[
  {
    "path": ".claude/commands/translate.md",
    "content": "# Translate Missing Strings\n\nTranslate missing translations for the given locale.\n\nUsage: /translate [locale_code] [locale_name]\nExample: /translate fr French\n\n## Steps\n\n1. Run `php artisan translations:missing $ARG1` and capture the output\n2. For each missing key/string:\n    - Translate the English string to the target language naturally (not literally)\n    - Preserve `:variable` placeholders, `<html>` tags, and pluralization syntax exactly\n    - Match tone/formality of existing translations (check a few rows in ltm_translations first)\n3. Insert each translation into `ltm_translations`. status field = 1. saved_value = null.\n4. Confirm count of translations added\n\n## Rules\n- Never guess at technical terms — keep English if unsure\n- Kanka-specific terms (Whiteboard) stay in English unless an equivalent already exists in the DB for that locale\n```\n\nThen invoke as:\n```\n/translate fr French\n/translate de German\n/translate es Spanish\n\n## Locale rules\n\nApply these rules based on the target locale:\n\n**fr**\n- Use Swiss French spelling and idioms\n- No space before `:` `!` `?` `;` (Swiss convention, unlike standard French)\n- Prefer Swiss vocabulary where it differs (e.g. \"septante\" vs \"soixante-dix\" if numbers appear)\n\n**es**\n- Default to neutral Latin American Spanish unless specified otherwise\n"
  },
  {
    "path": ".claude/skills/livewire-development/SKILL.md",
    "content": "---\nname: livewire-development\ndescription: >-\n  Develops reactive Livewire 3 components. Activates when creating, updating, or modifying\n  Livewire components; working with wire:model, wire:click, wire:loading, or any wire: directives;\n  adding real-time updates, loading states, or reactivity; debugging component behavior;\n  writing Livewire tests; or when the user mentions Livewire, component, counter, or reactive UI.\n---\n\n# Livewire Development\n\n## When to Apply\n\nActivate this skill when:\n- Creating new Livewire components\n- Modifying existing component state or behavior\n- Debugging reactivity or lifecycle issues\n- Writing Livewire component tests\n- Adding Alpine.js interactivity to components\n- Working with wire: directives\n\n## Documentation\n\nUse `search-docs` for detailed Livewire 3 patterns and documentation.\n\n## Basic Usage\n\n### Creating Components\n\nUse the `php artisan make:livewire [Posts\\CreatePost]` Artisan command to create new components.\n\n### Fundamental Concepts\n\n- State should live on the server, with the UI reflecting it.\n- All Livewire requests hit the Laravel backend; they're like regular HTTP requests. Always validate form data and run authorization checks in Livewire actions.\n\n## Livewire 3 Specifics\n\n### Key Changes From Livewire 2\n\nThese things changed in Livewire 3, but may not have been updated in this application. Verify this application's setup to ensure you follow existing conventions.\n- Use `wire:model.live` for real-time updates, `wire:model` is now deferred by default.\n- Components now use the `App\\Livewire` namespace (not `App\\Http\\Livewire`).\n- Use `$this->dispatch()` to dispatch events (not `emit` or `dispatchBrowserEvent`).\n- Use the `components.layouts.app` view as the typical layout path (not `layouts.app`).\n\n### New Directives\n\n- `wire:show`, `wire:transition`, `wire:cloak`, `wire:offline`, `wire:target` are available for use.\n\n### Alpine Integration\n\n- Alpine is now included with Livewire; don't manually include Alpine.js.\n- Plugins included with Alpine: persist, intersect, collapse, and focus.\n\n## Best Practices\n\n### Component Structure\n\n- Livewire components require a single root element.\n- Use `wire:loading` and `wire:dirty` for delightful loading states.\n\n### Using Keys in Loops\n\n<code-snippet name=\"Wire Key in Loops\" lang=\"blade\">\n\n@foreach ($items as $item)\n    <div wire:key=\"item-{{ $item->id }}\">\n        {{ $item->name }}\n    </div>\n@endforeach\n\n</code-snippet>\n\n### Lifecycle Hooks\n\nPrefer lifecycle hooks like `mount()`, `updatedFoo()` for initialization and reactive side effects:\n\n<code-snippet name=\"Lifecycle Hook Examples\" lang=\"php\">\n\npublic function mount(User $user) { $this->user = $user; }\npublic function updatedSearch() { $this->resetPage(); }\n\n</code-snippet>\n\n## JavaScript Hooks\n\nYou can listen for `livewire:init` to hook into Livewire initialization:\n\n<code-snippet name=\"Livewire Init Hook Example\" lang=\"js\">\n\ndocument.addEventListener('livewire:init', function () {\n    Livewire.hook('request', ({ fail }) => {\n        if (fail && fail.status === 419) {\n            alert('Your session expired');\n        }\n    });\n\n    Livewire.hook('message.failed', (message, component) => {\n        console.error(message);\n    });\n});\n\n</code-snippet>\n\n## Testing\n\n<code-snippet name=\"Example Livewire Component Test\" lang=\"php\">\n\nLivewire::test(Counter::class)\n    ->assertSet('count', 0)\n    ->call('increment')\n    ->assertSet('count', 1)\n    ->assertSee(1)\n    ->assertStatus(200);\n\n</code-snippet>\n\n<code-snippet name=\"Testing Livewire Component Exists on Page\" lang=\"php\">\n\n$this->get('/posts/create')\n    ->assertSeeLivewire(CreatePost::class);\n\n</code-snippet>\n\n## Common Pitfalls\n\n- Forgetting `wire:key` in loops causes unexpected behavior when items change\n- Using `wire:model` expecting real-time updates (use `wire:model.live` instead in v3)\n- Not validating/authorizing in Livewire actions (treat them like HTTP requests)\n- Including Alpine.js separately when it's already bundled with Livewire 3"
  },
  {
    "path": ".claude/skills/pest-testing/SKILL.md",
    "content": "---\nname: pest-testing\ndescription: >-\n  Tests applications using the Pest 3 PHP framework. Activates when writing tests, creating unit or feature\n  tests, adding assertions, testing Livewire components, architecture testing, debugging test failures,\n  working with datasets or mocking; or when the user mentions test, spec, TDD, expects, assertion,\n  coverage, or needs to verify functionality works.\n---\n\n# Pest Testing 3\n\n## When to Apply\n\nActivate this skill when:\n- Creating new tests (unit or feature)\n- Modifying existing tests\n- Debugging test failures\n- Working with datasets, mocking, or test organization\n- Writing architecture tests\n\n## Documentation\n\nUse `search-docs` for detailed Pest 3 patterns and documentation.\n\n## Basic Usage\n\n### Creating Tests\n\nAll tests must be written using Pest. Use `php artisan make:test --pest {name}`.\n\n### Test Organization\n\n- Tests live in the `tests/Feature` and `tests/Unit` directories.\n- Do NOT remove tests without approval - these are core application code.\n- Test happy paths, failure paths, and edge cases.\n\n### Basic Test Structure\n\n<code-snippet name=\"Basic Pest Test Example\" lang=\"php\">\n\nit('is true', function () {\n    expect(true)->toBeTrue();\n});\n\n</code-snippet>\n\n### Running Tests\n\n- Run minimal tests with filter before finalizing: `php artisan test --compact --filter=testName`.\n- Run all tests: `php artisan test --compact`.\n- Run file: `php artisan test --compact tests/Feature/ExampleTest.php`.\n\n## Assertions\n\nUse specific assertions (`assertSuccessful()`, `assertNotFound()`) instead of `assertStatus()`:\n\n<code-snippet name=\"Pest Response Assertion\" lang=\"php\">\n\nit('returns all', function () {\n    $this->postJson('/api/docs', [])->assertSuccessful();\n});\n\n</code-snippet>\n\n| Use | Instead of |\n|-----|------------|\n| `assertSuccessful()` | `assertStatus(200)` |\n| `assertNotFound()` | `assertStatus(404)` |\n| `assertForbidden()` | `assertStatus(403)` |\n\n## Mocking\n\nImport mock function before use: `use function Pest\\Laravel\\mock;`\n\n## Datasets\n\nUse datasets for repetitive tests (validation rules, etc.):\n\n<code-snippet name=\"Pest Dataset Example\" lang=\"php\">\n\nit('has emails', function (string $email) {\n    expect($email)->not->toBeEmpty();\n})->with([\n    'james' => 'james@laravel.com',\n    'taylor' => 'taylor@laravel.com',\n]);\n\n</code-snippet>\n\n## Pest 3 Features\n\n### Architecture Testing\n\nPest 3 includes architecture testing to enforce code conventions:\n\n<code-snippet name=\"Architecture Test Example\" lang=\"php\">\n\narch('controllers')\n    ->expect('App\\Http\\Controllers')\n    ->toExtendNothing()\n    ->toHaveSuffix('Controller');\n\narch('models')\n    ->expect('App\\Models')\n    ->toExtend('Illuminate\\Database\\Eloquent\\Model');\n\narch('no debugging')\n    ->expect(['dd', 'dump', 'ray'])\n    ->not->toBeUsed();\n\n</code-snippet>\n\n### Type Coverage\n\nPest 3 provides improved type coverage analysis. Run with `--type-coverage` flag.\n\n## Common Pitfalls\n\n- Not importing `use function Pest\\Laravel\\mock;` before using mock\n- Using `assertStatus(200)` instead of `assertSuccessful()`\n- Forgetting datasets for repetitive validation tests\n- Deleting tests without approval"
  },
  {
    "path": ".claude/skills/tailwindcss-development/SKILL.md",
    "content": "---\nname: tailwindcss-development\ndescription: >-\n  Styles applications using Tailwind CSS v4 utilities. Activates when adding styles, restyling components,\n  working with gradients, spacing, layout, flex, grid, responsive design, dark mode, colors,\n  typography, or borders; or when the user mentions CSS, styling, classes, Tailwind, restyle,\n  hero section, cards, buttons, or any visual/UI changes.\n---\n\n# Tailwind CSS Development\n\n## When to Apply\n\nActivate this skill when:\n\n- Adding styles to components or pages\n- Working with responsive design\n- Implementing dark mode\n- Extracting repeated patterns into components\n- Debugging spacing or layout issues\n\n## Documentation\n\nUse `search-docs` for detailed Tailwind CSS v4 patterns and documentation.\n\n## Basic Usage\n\n- Use Tailwind CSS classes to style HTML. Check and follow existing Tailwind conventions in the project before introducing new patterns.\n- Offer to extract repeated patterns into components that match the project's conventions (e.g., Blade, JSX, Vue).\n- Consider class placement, order, priority, and defaults. Remove redundant classes, add classes to parent or child elements carefully to reduce repetition, and group elements logically.\n\n## Tailwind CSS v4 Specifics\n\n- Always use Tailwind CSS v4 and avoid deprecated utilities.\n- `corePlugins` is not supported in Tailwind v4.\n\n### CSS-First Configuration\n\nIn Tailwind v4, configuration is CSS-first using the `@theme` directive — no separate `tailwind.config.js` file is needed:\n\n<code-snippet name=\"CSS-First Config\" lang=\"css\">\n@theme {\n  --color-brand: oklch(0.72 0.11 178);\n}\n</code-snippet>\n\n### Import Syntax\n\nIn Tailwind v4, import Tailwind with a regular CSS `@import` statement instead of the `@tailwind` directives used in v3:\n\n<code-snippet name=\"v4 Import Syntax\" lang=\"diff\">\n- @tailwind base;\n- @tailwind components;\n- @tailwind utilities;\n+ @import \"tailwindcss\";\n</code-snippet>\n\n### Replaced Utilities\n\nTailwind v4 removed deprecated utilities. Use the replacements shown below. Opacity values remain numeric.\n\n| Deprecated | Replacement |\n|------------|-------------|\n| bg-opacity-* | bg-black/* |\n| text-opacity-* | text-black/* |\n| border-opacity-* | border-black/* |\n| divide-opacity-* | divide-black/* |\n| ring-opacity-* | ring-black/* |\n| placeholder-opacity-* | placeholder-black/* |\n| flex-shrink-* | shrink-* |\n| flex-grow-* | grow-* |\n| overflow-ellipsis | text-ellipsis |\n| decoration-slice | box-decoration-slice |\n| decoration-clone | box-decoration-clone |\n\n## Spacing\n\nUse `gap` utilities instead of margins for spacing between siblings:\n\n<code-snippet name=\"Gap Utilities\" lang=\"html\">\n<div class=\"flex gap-8\">\n    <div>Item 1</div>\n    <div>Item 2</div>\n</div>\n</code-snippet>\n\n## Dark Mode\n\nIf existing pages and components support dark mode, new pages and components must support it the same way, typically using the `dark:` variant:\n\n<code-snippet name=\"Dark Mode\" lang=\"html\">\n<div class=\"bg-white dark:bg-gray-900 text-gray-900 dark:text-white\">\n    Content adapts to color scheme\n</div>\n</code-snippet>\n\n## Common Patterns\n\n### Flexbox Layout\n\n<code-snippet name=\"Flexbox Layout\" lang=\"html\">\n<div class=\"flex items-center justify-between gap-4\">\n    <div>Left content</div>\n    <div>Right content</div>\n</div>\n</code-snippet>\n\n### Grid Layout\n\n<code-snippet name=\"Grid Layout\" lang=\"html\">\n<div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n    <div>Card 1</div>\n    <div>Card 2</div>\n    <div>Card 3</div>\n</div>\n</code-snippet>\n\n## Common Pitfalls\n\n- Using deprecated v3 utilities (bg-opacity-*, flex-shrink-*, etc.)\n- Using `@tailwind` directives instead of `@import \"tailwindcss\"`\n- Trying to use `tailwind.config.js` instead of CSS `@theme` directive\n- Using margins for spacing between siblings instead of gap utilities\n- Forgetting to add dark mode variants when the project uses dark mode"
  },
  {
    "path": ".dockerignore",
    "content": "vendor\nbootstrap/cache/*\n**/*.log"
  },
  {
    "path": ".editorconfig",
    "content": "; This file is for unifying the coding style for different editors and IDEs.\n; More information at http://editorconfig.org\n\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 4\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[*.{yml,yaml}]\nindent_size = 2\n\n[docker-compose.yml]\nindent_size = 4\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\n\n*.blade.php diff=html\n*.css diff=css\n*.html diff=html\n*.md diff=markdown\n*.php diff=php\n\n/.github export-ignore\nCHANGELOG.md export-ignore\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "Please report bugs in Discord [![Discord](https://img.shields.io/discord/413623253366603777.svg)](https://discord.gg/rhsyZJ4). This github isn't used for bug tracking. "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "Please send feature requests to the [Roadmap](https://app.kanka.io/roadmap). This github isn't used for feature requests. \n"
  },
  {
    "path": ".github/workflows/claude.yml",
    "content": "name: Claude Code\n\non:\n  issue_comment:\n    types: [created]\n  pull_request_review_comment:\n    types: [created]\n  issues:\n    types: [opened, assigned]\n  pull_request_review:\n    types: [submitted]\n\njobs:\n  claude:\n    if: |\n      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||\n      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||\n      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||\n      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      pull-requests: read\n      issues: read\n      id-token: write\n      actions: read # Required for Claude to read CI results on PRs\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 1\n\n      - name: Run Claude Code\n        id: claude\n        uses: anthropics/claude-code-action@v1\n        with:\n          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\n\n          # This is an optional setting that allows Claude to read CI results on PRs\n          additional_permissions: |\n            actions: read\n\n          # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.\n          # prompt: 'Update the pull request description to include a summary of changes.'\n\n          # Optional: Add claude_args to customize behavior and configuration\n          # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md\n          # or https://code.claude.com/docs/en/cli-reference for available options\n          # claude_args: '--allowed-tools Bash(gh pr:*)'\n\n"
  },
  {
    "path": ".github/workflows/lint.yml",
    "content": "name: Fix Code Style & Duplication Check\n\non:\n  pull_request:\n    branches:\n      - main\n      - develop\n    paths:\n      - '**.php'\n  push:\n    branches:\n      - main\n    paths:\n      - '**.php'\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n\n    permissions:\n      # Give the default GITHUB_TOKEN write permission to commit and push the\n      # added or changed files to the repository.\n      contents: write\n\n    strategy:\n      fail-fast: true\n      matrix:\n        php: [8.4]\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n        with:\n          ref: ${{ github.event.pull_request.head.ref }}\n          repository: ${{ github.event.pull_request.head.repo.full_name }}\n\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: ${{ matrix.php }}\n          extensions: json, dom, curl, libxml, mbstring\n          coverage: none\n\n      - name: Install Pint\n        run: composer global require laravel/pint\n\n      - name: Run Pint\n        run: pint\n\n# can't run this in a github action\n#      - name: Run PHPCPD\n#        run: ./vendor/bin/phpcpd app/ --min-lines=5 --min-tokens=70\n\n      - name: Auto-commit fixes\n        uses: stefanzweifel/git-auto-commit-action@v6\n        with:\n          commit_message: Fix styling\n"
  },
  {
    "path": ".github/workflows/phpstan.yml",
    "content": "name: \"Tests\"\n\n# Controls when the workflow will run\non:\n  # Triggers the workflow on push or pull request events but only for the \"develop\" branch\n  pull_request:\n    branches: [ \"develop\" ]\n    paths:\n      - '**.php'\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\npermissions:\n  contents: read\n\n# A workflow run is made up of one or more jobs that can run sequentially or in parallel\njobs:\n\n  # This workflow contains a single job called \"build\"\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      fail-fast: true\n      matrix:\n        php: [8.4]\n        laravel: [\"^11.0\"]\n\n    name: PHP ${{ matrix.php }}\n\n    # Steps represent a sequence of tasks that will be executed as part of the job\n    steps:\n      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it\n      - name: Checkout code\n        uses: actions/checkout@v3\n\n      - name: Setup PHP\n        uses: \"shivammathur/setup-php@v2\"\n        with:\n          php-version: \"${{ matrix.php }}\"\n          extensions: \"dom, curl, libxml, mbstring, zip, fileinfo, sqlite, pdo_sqlite\"\n          coverage: \"none\"\n\n      - name: Install Composer dependencies\n        run: composer install --prefer-dist --no-interaction --no-progress\n\n      - name: \"Install highest dependencies from composer.json\"\n        run: \"composer install --no-interaction --no-progress\"\n\n      - name: \"Execute static analysis\"\n        run: \"composer run-script test:types\"\n\n      #- name: Generate app key\n      #  run: php artisan key:generate\n\n      #- name: Execute tests\n      #  run: vendor/bin/phpunit\n"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules\n/public/hot\n/public/build/js/tinymce\n/public/storage\n/public/.htaccess\n/public/exports\n/public/info.php\n/public/robots.txt\n/public/ads.txt\n#/public/images/defaults/patreon\n/storage/*.key\n/storage\n/vendor\n/.scannerwork\n/.idea\n/.vagrant\n/.vscode\n/.sail\n/.superpowers\n/.worktrees\n/docs/superpowers\nHomestead.json\nHomestead.yaml\nnpm-debug.log\nyarn-error.log\n.env\n.env.local\n.DS_Store\n.phpunit.result.cache\n*.sql\npackage-lock.json\n.phpstorm.meta.php\n_ide_helper.php\ntest.json"
  },
  {
    "path": ".jshintrc",
    "content": "{\n    \"undef\": true,\n    \"esversion\": 11,\n    \"unused\": true,\n    \"browser\": true,\n    \"node\": true,\n    \"globals\": {\n        \"$\": false,\n        \"document\": false,\n        \"require\": false,\n        \"jQuery\": false,\n        \"CodeMirror\": false,\n        \"Stripe\": false\n    }\n}\n"
  },
  {
    "path": ".mariadb/10-create-logs-database.sh",
    "content": "#!/usr/bin/env bash\n\nmysql --user=root --password=\"$MYSQL_ROOT_PASSWORD\" <<-EOSQL\n    CREATE DATABASE IF NOT EXISTS logs;\n    GRANT ALL PRIVILEGES ON \\`logs%\\`.* TO '$MYSQL_USER'@'%';\nEOSQL\n"
  },
  {
    "path": ".mariadb/conf.d/kanka.cnf",
    "content": "[mysqld]\nmax_allowed_packet=4G\nnet_read_timeout=600\nnet_write_timeout=600\nwait_timeout=28800\ninteractive_timeout=28800\nconnect_timeout=3600\n"
  },
  {
    "path": ".mcp.json",
    "content": "{\n    \"mcpServers\": {\n        \"laravel-boost\": {\n            \"command\": \"vendor/bin/sail\",\n            \"args\": [\n                \"artisan\",\n                \"boost:mcp\"\n            ]\n        }\n    }\n}"
  },
  {
    "path": ".nginx/thumbor.conf",
    "content": "\n\nupstream thumbor  {\n        server thumbor:8888;\n}\n\nserver {\n        listen 80 default;\n        server_name localhost;\n\n        add_header 'Access-Control-Allow-Origin' '*';\n        add_header 'Access-Control-Allow-Credentials' 'true';\n        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';\n        add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With';\n\n        if ($request_method = 'OPTIONS') {\n            return 204;\n        }\n\n        location ~* \"^/(..)(..)(.+)?.jpg$\" {\n            proxy_pass http://thumbor$request_uri;\n        }\n        location ~* \"^/(..)(..)(.+)?.jpeg$\" {\n            proxy_pass http://thumbor$request_uri;\n        }\n        location ~* \"^/(..)(..)(.+)?.png\" {\n            proxy_pass http://thumbor$request_uri;\n        }\n\n        location ~ /\\.ht { deny  all; }\n        location ~ /\\.hg { deny  all; }\n        location ~ /\\.svn { deny  all; }\n}\n"
  },
  {
    "path": ".phpactor.json",
    "content": "{\n    \"$schema\": \"/phpactor.schema.json\",\n    \"language_server_phpstan.enabled\": true,\n    \"php_code_sniffer.enabled\": true\n}\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "===\n\n<laravel-boost-guidelines>\n=== foundation rules ===\n\n# Laravel Boost Guidelines\n\nThe Laravel Boost guidelines are specifically curated by Laravel maintainers for this application. These guidelines should be followed closely to ensure the best experience when building Laravel applications.\n\n## Foundational Context\n\nThis application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.\n\n- php - 8.4.14\n- laravel/cashier (CASHIER) - v15\n- laravel/framework (LARAVEL) - v11\n- laravel/passport (PASSPORT) - v13\n- laravel/prompts (PROMPTS) - v0\n- laravel/reverb (REVERB) - v1\n- laravel/scout (SCOUT) - v10\n- laravel/socialite (SOCIALITE) - v5\n- livewire/livewire (LIVEWIRE) - v3\n- larastan/larastan (LARASTAN) - v3\n- laravel/mcp (MCP) - v0\n- laravel/pint (PINT) - v1\n- laravel/sail (SAIL) - v1\n- pestphp/pest (PEST) - v3\n- phpunit/phpunit (PHPUNIT) - v11\n- laravel-echo (ECHO) - v2\n- tailwindcss (TAILWINDCSS) - v4\n- vue (VUE) - v3\n\n## Skills Activation\n\nThis project has domain-specific skills available. You MUST activate the relevant skill whenever you work in that domain—don't wait until you're stuck.\n\n- `livewire-development` — Develops reactive Livewire 3 components. Activates when creating, updating, or modifying Livewire components; working with wire:model, wire:click, wire:loading, or any wire: directives; adding real-time updates, loading states, or reactivity; debugging component behavior; writing Livewire tests; or when the user mentions Livewire, component, counter, or reactive UI.\n- `pest-testing` — No testing. No automated testing. Don't try running pest or phpunit.\n- `tailwindcss-development` — Styles applications using Tailwind CSS v4 utilities. Activates when adding styles, restyling components, working with gradients, spacing, layout, flex, grid, responsive design, dark mode, colors, typography, or borders; or when the user mentions CSS, styling, classes, Tailwind, restyle, hero section, cards, buttons, or any visual/UI changes.\n\n## Conventions\n\n- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming.\n- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`.\n- Check for existing components to reuse before writing a new one.\n\n## Verification Scripts\n\n- Do not create verification scripts or tinker when tests cover that functionality and prove they work. Unit and feature tests are more important.\n\n## Application Structure & Architecture\n\n- Stick to existing directory structure; don't create new base folders without approval.\n- Do not change the application's dependencies without approval.\n\n## Frontend Bundling\n\n- If the user doesn't see a frontend change reflected in the UI, it could mean they need to run `vendor/bin/sail yarn run build`, `vendor/bin/sail yarn run dev`, or `vendor/bin/sail composer run dev`. Never ask them to run these commands, but remind them to do it in your closing summary.\n\n## Documentation Files\n\n- You must only create documentation files if explicitly requested by the user.\n\n## Replies\n\n- Be concise in your explanations - focus on what's important rather than explaining obvious details.\n\n=== boost rules ===\n\n# Laravel Boost\n\n- Laravel Boost is an MCP server that comes with powerful tools designed specifically for this application. Use them.\n\n## Artisan\n\n- Use the `list-artisan-commands` tool when you need to call an Artisan command to double-check the available parameters.\n\n## URLs\n\n- Whenever you share a project URL with the user, you should use the `get-absolute-url` tool to ensure you're using the correct scheme, domain/IP, and port.\n\n## Tinker / Debugging\n\n- You should use the `tinker` tool when you need to execute PHP to debug code or query Eloquent models directly.\n- Use the `database-query` tool when you only need to read from the database.\n\n## Reading Browser Logs With the `browser-logs` Tool\n\n- You can read browser logs, errors, and exceptions using the `browser-logs` tool from Boost.\n- Only recent browser logs will be useful - ignore old logs.\n\n## Searching Documentation (Critically Important)\n\n- Boost comes with a powerful `search-docs` tool you should use before trying other approaches when working with Laravel or Laravel ecosystem packages. This tool automatically passes a list of installed packages and their versions to the remote Boost API, so it returns only version-specific documentation for the user's circumstance. You should pass an array of packages to filter on if you know you need docs for particular packages.\n- Search the documentation before making code changes to ensure we are taking the correct approach.\n- Use multiple, broad, simple, topic-based queries at once. For example: `['rate limiting', 'routing rate limiting', 'routing']`. The most relevant results will be returned first.\n- Do not add package names to queries; package information is already shared. For example, use `test resource table`, not `filament 4 test resource table`.\n\n### Available Search Syntax\n\n1. Simple Word Searches with auto-stemming - query=authentication - finds 'authenticate' and 'auth'.\n2. Multiple Words (AND Logic) - query=rate limit - finds knowledge containing both \"rate\" AND \"limit\".\n3. Quoted Phrases (Exact Position) - query=\"infinite scroll\" - words must be adjacent and in that order.\n4. Mixed Queries - query=middleware \"rate limit\" - \"middleware\" AND exact phrase \"rate limit\".\n5. Multiple Queries - queries=[\"authentication\", \"middleware\"] - ANY of these terms.\n\n=== php rules ===\n\n# PHP\n\n- Always use curly braces for control structures, even for single-line bodies.\n\n## Constructors\n\n- Use PHP 8 constructor property promotion in `__construct()`.\n    - <code-snippet>public function __construct(public GitHub $github) { }</code-snippet>\n- Do not allow empty `__construct()` methods with zero parameters unless the constructor is private.\n\n## Type Declarations\n\n- Always use explicit return type declarations for methods and functions.\n- Use appropriate PHP type hints for method parameters.\n\n<code-snippet name=\"Explicit Return Types and Method Params\" lang=\"php\">\nprotected function isAccessible(User $user, ?string $path = null): bool\n{\n    ...\n}\n</code-snippet>\n\n## Enums\n\n- Typically, keys in an Enum should be TitleCase. For example: `FavoritePerson`, `BestLake`, `Monthly`.\n\n## Comments\n\n- Prefer PHPDoc blocks over inline comments. Never use comments within the code itself unless the logic is exceptionally complex.\n\n## PHPDoc Blocks\n\n- Add useful array shape type definitions when appropriate.\n\n=== sail rules ===\n\n# Laravel Sail\n\n- This project runs inside Laravel Sail's Docker containers. You MUST execute all commands through Sail.\n- Start services using `vendor/bin/sail up -d` and stop them with `vendor/bin/sail stop`.\n- Open the application in the browser by running `vendor/bin/sail open`.\n- Always prefix PHP, Artisan, Composer, and Node commands with `vendor/bin/sail`. Examples:\n    - Run Artisan Commands: `vendor/bin/sail artisan migrate`\n    - Install Composer packages: `vendor/bin/sail composer install`\n    - Execute Node commands: `vendor/bin/sail yarn run dev`\n    - Execute PHP scripts: `vendor/bin/sail php [script]`\n- View all available Sail commands by running `vendor/bin/sail` without arguments.\n\n=== laravel/core rules ===\n\n# Do Things the Laravel Way\n\n- Use `vendor/bin/sail artisan make:` commands to create new files (i.e. migrations, controllers, models, etc.). You can list available Artisan commands using the `list-artisan-commands` tool.\n- If you're creating a generic PHP class, use `vendor/bin/sail artisan make:class`.\n- Pass `--no-interaction` to all Artisan commands to ensure they work without user input. You should also pass the correct `--options` to ensure correct behavior.\n\n## Database\n\n- Always use proper Eloquent relationship methods with return type hints. Prefer relationship methods over raw queries or manual joins.\n- Use Eloquent models and relationships before suggesting raw database queries.\n- Avoid `DB::`; prefer `Model::query()`. Generate code that leverages Laravel's ORM capabilities rather than bypassing them.\n- Generate code that prevents N+1 query problems by using eager loading.\n- Use Laravel's query builder for very complex database operations.\n\n### Model Creation\n\n- When creating new models, create useful factories and seeders for them too. Ask the user if they need any other things, using `list-artisan-commands` to check the available options to `vendor/bin/sail artisan make:model`.\n\n### APIs & Eloquent Resources\n\n- For APIs, default to using Eloquent API Resources and API versioning unless existing API routes do not, then you should follow existing application convention.\n\n## Controllers & Validation\n\n- Always create Form Request classes for validation rather than inline validation in controllers. Include both validation rules and custom error messages.\n- Check sibling Form Requests to see if the application uses array or string based validation rules.\n\n## Authentication & Authorization\n\n- Use Laravel's built-in authentication and authorization features (gates, policies, Sanctum, etc.).\n\n## URL Generation\n\n- When generating links to other pages, prefer named routes and the `route()` function.\n\n## Queues\n\n- Use queued jobs for time-consuming operations with the `ShouldQueue` interface.\n\n## Configuration\n\n- Use environment variables only in configuration files - never use the `env()` function directly outside of config files. Always use `config('app.name')`, not `env('APP_NAME')`.\n\n## Vite Error\n\n- If you receive an \"Illuminate\\Foundation\\ViteException: Unable to locate file in Vite manifest\" error, you can run `vendor/bin/sail yarn run build` or ask the user to run `vendor/bin/sail yarn run dev` or `vendor/bin/sail composer run dev`.\n\n=== laravel/v11 rules ===\n\n# Laravel 11\n\n- CRITICAL: ALWAYS use `search-docs` tool for version-specific Laravel documentation and updated code examples.\n- This project upgraded from Laravel 10 without migrating to the new streamlined Laravel 11 file structure.\n- This is perfectly fine and recommended by Laravel. Follow the existing structure from Laravel 10. We do not need to migrate to the Laravel 11 structure unless the user explicitly requests it.\n\n## Laravel 10 Structure\n\n- Middleware typically lives in `app/Http/Middleware/` and service providers in `app/Providers/`.\n- There is no `bootstrap/app.php` application configuration in a Laravel 10 structure:\n    - Middleware registration is in `app/Http/Kernel.php`\n    - Exception handling is in `app/Exceptions/Handler.php`\n    - Console commands and schedule registration is in `app/Console/Kernel.php`\n    - Rate limits likely exist in `RouteServiceProvider` or `app/Http/Kernel.php`\n\n## Database\n\n- When modifying a column, the migration must include all of the attributes that were previously defined on the column. Otherwise, they will be dropped and lost.\n- Laravel 11 allows limiting eagerly loaded records natively, without external packages: `$query->latest()->limit(10);`.\n\n### Models\n\n- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.\n\n## New Artisan Commands\n\n- List Artisan commands using Boost's MCP tool, if available. New commands available in Laravel 11:\n    - `vendor/bin/sail artisan make:enum`\n    - `vendor/bin/sail artisan make:class`\n    - `vendor/bin/sail artisan make:interface`\n\n=== livewire/core rules ===\n\n# Livewire\n\n- Livewire allows you to build dynamic, reactive interfaces using only PHP — no JavaScript required.\n- Instead of writing frontend code in JavaScript frameworks, you use Alpine.js to build the UI when client-side interactions are required.\n- State lives on the server; the UI reflects it. Validate and authorize in actions (they're like HTTP requests).\n- IMPORTANT: Activate `livewire-development` every time you're working with Livewire-related tasks.\n\n=== pint/core rules ===\n\n# Laravel Pint Code Formatter\n\n- You must run `vendor/bin/sail bin pint --dirty --format agent` before finalizing changes to ensure your code matches the project's expected style.\n- Do not run `vendor/bin/sail bin pint --test --format agent`, simply run `vendor/bin/sail bin pint --format agent` to fix any formatting issues.\n\n=== pest/core rules ===\n\n## Pest\n\n- This project has no automated tests. Don't bother with them.\n\n=== tailwindcss/core rules ===\n\n# Tailwind CSS\n\n- Always use existing Tailwind conventions; check project patterns before adding new ones.\n- IMPORTANT: Always use `search-docs` tool for version-specific Tailwind CSS documentation and updated code examples. Never rely on training data.\n- IMPORTANT: Activate `tailwindcss-development` every time you're working with a Tailwind CSS or styling-related task.\n</laravel-boost-guidelines>\n\n# i18n\n\nThe app is translated in several languages by community members, but is developed in english. Never hardcode translations; use the `__()` function instead."
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at hello@kanka.io. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "LICENSE",
    "content": "“Commons Clause” License Condition v1.0\n\nThe Software is provided to you by the Licensor under the License, as defined below, subject to the following condition.\n\nWithout limiting other conditions in the License, the grant of rights under the License will not include, and the License does not grant to you, the right to Sell the Software.\n\nFor purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including without limitation fees for hosting or consulting/ support services related to the Software), a product or service whose value derives, entirely or substantially, from the functionality of the Software. Any license notice or attribution required by the License must also include this Commons Clause License Condition notice.\n\nSoftware: Kanka\n\nLicensor: Owlchester SNC\n"
  },
  {
    "path": "README.md",
    "content": "# Kanka\n# [![Kanka](./.github/logo.png)](https://kanka.io/en-US)\n\n[![Minimum PHP Version](http://img.shields.io/badge/php-%3E%3D%208.0-8892BF.svg)](https://php.net/)\n[![Discord](https://img.shields.io/discord/413623253366603777.svg)](https://kanka.io/go/discord)\n\n[Kanka](https://kanka.io/en-US) is a **source available** collaborative world building and campaign management tool tailored for tabletop RPG players and storytellers. This repository is the primary source for development of the Kanka platform. It's written in PHP, a mix of VueJS and jQuery, and runs with a MySQL database. A new version is released on average every a month.\n\n<img width=\"900\" alt=\"kanka-hero\" src=\"https://th.kanka.io/Vg8GkfblEvh1Z4HhO2Cwr4hzuCs=/900x562/smart/src/app/front/devices-preview-hd.png\">\n\nThis repository hosts the core Kanka web application.\n\n## Install Kanka\n\n- [Installing & Running Kanka](./docs/running.md).\n\n## Getting involved\n\n- [Contribute to Kanka](./docs/contributing.md)\n- [Translating Kanka](./docs/translating.md)\n\n## Technical guides\n\n- [Compiling assets](./docs/assets.md)\n\n## Support and Community\n\nIssues are inevitable. When you encounter one when using Kanka, our team and community is here to help.\n\n💬 Ask for help on [Discord](https://kanka.io/go/discord)\n\n🏛️ Find a solution in our [Documentation](https://docs.kanka.io)\n\n📧 Shoot us an email at [hello@kanka.io](mailto:hello@kanka.io)\n\n"
  },
  {
    "path": "app/Auth/PassportTokenGuard.php",
    "content": "<?php\n\nnamespace App\\Auth;\n\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Laravel\\Passport\\AccessToken;\nuse Laravel\\Passport\\Guards\\TokenGuard;\nuse Laravel\\Passport\\Token;\n\n/**\n * Workaround for a Passport 13.7 bug where personal access tokens are rejected\n * when the user's ID matches the OAuth client's ID. The upstream check assumes\n * equal IDs means a client credentials token, but this is a false positive.\n *\n * @see https://github.com/laravel/passport/blob/master/src/Guards/TokenGuard.php\n */\nclass PassportTokenGuard extends TokenGuard\n{\n    protected function authenticateViaBearerToken(): ?Authenticatable\n    {\n        if (! $psr = $this->getPsrRequestViaBearerToken()) {\n            return null;\n        }\n\n        $client = $this->clients->findActive(\n            $psr->getAttribute('oauth_client_id')\n        );\n\n        if (! $client ||\n            ($client->provider &&\n             $client->provider !== $this->provider->getProviderName())) {\n            return null;\n        }\n\n        $this->setClient($client);\n\n        $oauthUserId = $psr->getAttribute('oauth_user_id');\n\n        if (empty($oauthUserId)) {\n            return null;\n        }\n\n        // Passport 13.7 added a check: if oauth_user_id === oauth_client_id, reject\n        // as a client credentials token. However, this is a false positive when the\n        // user's primary key happens to equal the client's ID. We verify via the DB.\n        if ($oauthUserId === $psr->getAttribute('oauth_client_id')) {\n            $tokenId = $psr->getAttribute('oauth_access_token_id');\n            $token = Token::find($tokenId);\n\n            if (! $token || $token->user_id === null) {\n                return null;\n            }\n        }\n\n        try {\n            $user = $this->provider->retrieveById($oauthUserId);\n        } catch (\\Exception) {\n            return null;\n        }\n\n        return $user?->withAccessToken(AccessToken::fromPsrRequest($psr));\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Campaigns/CleanupCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Observers\\CampaignObserver;\nuse App\\Services\\Campaign\\PurgeService;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\n\nclass CleanupCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'campaigns:cleanup {dry=1}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Delete empty campaigns';\n\n    public function __construct(protected PurgeService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $this->info(Carbon::now());\n        Campaign::observe(CampaignObserver::class);\n\n        $dry = $this->argument('dry');\n        if ($dry === '0') {\n            $this->service->real();\n        }\n\n        $count = $this->service->purgeEmpty();\n\n        if ($dry === '0') {\n            $this->info(Carbon::now() . ': Deleted ' . $count . ' empty campaigns.');\n        } else {\n            $this->info(Carbon::now() . ': There are ' . $count . ' empty campaigns that can be deleted.');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Campaigns/DeleteCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Campaigns;\n\nuse App\\Jobs\\Campaigns\\Delete;\nuse App\\Jobs\\DeletedCampaignCleanupJob;\nuse App\\Models\\Campaign;\nuse Illuminate\\Console\\Command;\n\nclass DeleteCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'campaigns:delete {campaign}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Delete a specified campaign';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $campaignId = $this->argument('campaign');\n        $campaign = Campaign::where('id', $campaignId)->first();\n        if ($campaign) {\n            Delete::dispatch($campaign);\n            DeletedCampaignCleanupJob::dispatch($campaign);\n            $this->info('Queued campaign #' . $campaignId . ' for deletion');\n        } else {\n            $this->info('Invalid campaign ID');\n        }\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Campaigns/DummyEntities.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Campaigns;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\CharacterCache;\nuse App\\Facades\\EntityCache;\nuse App\\Facades\\QuestCache;\nuse App\\Models\\Ability;\nuse App\\Models\\Attribute;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\Character;\nuse App\\Models\\EntityAbility;\nuse App\\Models\\Event;\nuse App\\Models\\Family;\nuse App\\Models\\Item;\nuse App\\Models\\Journal;\nuse App\\Models\\Location;\nuse App\\Models\\Note;\nuse App\\Models\\Organisation;\nuse App\\Models\\Quest;\nuse App\\Models\\QuestElement;\nuse App\\Models\\Race;\nuse App\\Models\\Relation;\nuse App\\Models\\Tag;\nuse App\\Observers\\AbilityObserver;\nuse App\\Observers\\CalendarObserver;\nuse App\\Observers\\EntityAbilityObserver;\nuse App\\Observers\\EventObserver;\nuse App\\Observers\\JournalObserver;\nuse App\\Observers\\LocationObserver;\nuse App\\Observers\\NoteObserver;\nuse App\\Observers\\QuestElementObserver;\nuse App\\Observers\\QuestObserver;\nuse App\\Observers\\RaceObserver;\nuse App\\Observers\\RelationObserver;\nuse App\\Observers\\TagObserver;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\n\nclass DummyEntities extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'campaigns:populate {campaign}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Generate dummy entities in a specified campaign';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $campaignId = (int) $this->argument('campaign');\n        $campaign = Campaign::findOrFail($campaignId);\n\n        CampaignCache::campaign($campaign);\n        EntityCache::campaign($campaign);\n        CharacterCache::campaign($campaign);\n        QuestCache::campaign($campaign);\n\n        $this->loadObservers($campaign);\n\n        // Generate Characters Abilities and Locations\n        $firstLocation = Location::factory()\n            ->state(['name' => 'Thaelia', 'campaign_id' => $campaign->id])\n            ->has(\n                Character::factory()->state(['campaign_id' => $campaign->id])\n                    ->has(Item::factory()->state(['name' => 'Sword of Cebolla', 'campaign_id' => $campaign->id, 'price' => rand(1, 15) . 'g']))\n            )\n            ->has(Location::factory()\n                ->state(['name' => 'March', 'campaign_id' => $campaign->id])\n                ->has(Location::factory()\n                    ->state(['name' => 'Adestry', 'campaign_id' => $campaign->id])))\n            ->has(Location::factory()\n                ->state(['name' => 'Tilley', 'campaign_id' => $campaign->id])\n                ->has(Location::factory()\n                    ->state(['name' => 'Carrothead', 'campaign_id' => $campaign->id])))\n            ->has(Character::factory()->state(['campaign_id' => $campaign->id])->count(2))\n            ->has(Location::factory()->state(['name' => 'Orlene', 'campaign_id' => $campaign->id]))\n            ->has(Location::factory()\n                ->state(['name' => 'Owlchester', 'campaign_id' => $campaign->id]))\n            ->create();\n\n        $secondLocation = Location::factory()\n            ->state(['name' => 'Medina', 'campaign_id' => $campaign->id])\n            ->has(Location::factory()->count(2)->state(new Sequence(\n                ['name' => 'Torchio', 'campaign_id' => $campaign->id],\n                ['name' => 'Urdino', 'campaign_id' => $campaign->id]\n            )))\n            ->has(Character::factory()->state(['campaign_id' => $campaign->id]))\n            ->has(Character::factory()->state(['campaign_id' => $campaign->id])\n                ->has(Item::factory()->state(['name' => 'Dagger of Longaniza', 'campaign_id' => $campaign->id, 'price' => rand(1, 15) . 'g'])))\n            ->create();\n        $thirdLocation = Location::factory()->state(['campaign_id' => $campaign->id, 'name' => 'Middle Earth'])->create();\n\n        // Generate Characters\n        $firstCharacter = Character::factory()->state(['campaign_id' => $campaign->id, 'name' => 'Biblo Swaggins'])->create();\n        $secondCharacter = Character::factory()->state(['campaign_id' => $campaign->id])->create();\n        $thirdCharacter = Character::factory()->state(['campaign_id' => $campaign->id])->create();\n        $fourthCharacter = Character::factory()->state(['campaign_id' => $campaign->id])->create();\n        $fifthCharacter = Character::factory()->state(['campaign_id' => $campaign->id])->create();\n\n        Ability::factory()->state(['name' => 'Loud shout', 'campaign_id' => $campaign->id])->has(EntityAbility::factory()->state(['entity_id' => $firstCharacter->entity->id]), 'ability')->create();\n        Attribute::factory()->count(7)->state(\n            new Sequence(\n                ['name' => 'Population', 'entity_id' => $firstLocation->entity->id, 'is_pinned' => 1],\n                ['name' => 'Population', 'entity_id' => $secondLocation->entity->id, 'is_pinned' => 1],\n                ['name' => 'Population', 'entity_id' => $thirdLocation->entity->id, 'is_pinned' => 1],\n                ['name' => 'HP', 'value' => rand(1, 20), 'entity_id' => $firstCharacter->entity->id, 'is_pinned' => 1],\n                ['name' => 'Level', 'value' => rand(1, 20), 'entity_id' => $firstCharacter->entity->id, 'is_pinned' => 1],\n                ['name' => 'HP', 'value' => rand(1, 20), 'entity_id' => $secondCharacter->entity->id, 'is_pinned' => 1],\n                ['name' => 'Level', 'value' => rand(1, 20), 'entity_id' => $secondCharacter->entity->id, 'is_pinned' => 1],\n            )\n        )\n            ->create();\n\n        // Generate Families\n        Family::factory()\n            ->state(['name' => 'Graff', 'campaign_id' => $campaign->id])\n            ->has(Family::factory()->state(['name' => 'Market', 'campaign_id' => $campaign->id]))\n            ->create();\n        Family::factory()->state(['name' => 'Joren', 'campaign_id' => $campaign->id])->create();\n\n        // Generate Organisations\n        Organisation::factory()\n            ->state(['name' => 'Kankappy Cult', 'campaign_id' => $campaign->id])\n            ->has(Organisation::factory()->state(['name' => 'Fun Police', 'campaign_id' => $campaign->id]))\n            ->create();\n        Organisation::factory()->state(['name' => 'Great Reset', 'campaign_id' => $campaign->id])->create();\n\n        // Generate Events\n        Event::factory()->count(4)->state(\n            new Sequence(\n                ['name' => 'The Great War', 'campaign_id' => $campaign->id],\n                ['name' => 'Northern Rebellion', 'campaign_id' => $campaign->id],\n                ['name' => 'Peace of the Sea', 'campaign_id' => $campaign->id],\n                ['name' => 'Royal Wedding', 'campaign_id' => $campaign->id],\n            )\n        )\n            ->create();\n\n        // Generate Items\n        Item::factory()->count(5)->state(\n            new Sequence(\n                ['name' => 'Bow', 'campaign_id' => $campaign->id],\n                ['name' => 'Crowbar', 'campaign_id' => $campaign->id],\n                ['name' => 'Shield', 'campaign_id' => $campaign->id],\n                ['name' => 'Sword', 'campaign_id' => $campaign->id],\n                ['name' => 'Potion', 'campaign_id' => $campaign->id],\n            )\n        )\n            ->create();\n\n        // Generate Notes\n        Note::factory()->count(3)->state(\n            new Sequence(\n                ['name' => 'Aromas of Geneva', 'campaign_id' => $campaign->id],\n                ['name' => 'Pottery Stacking', 'campaign_id' => $campaign->id],\n                ['name' => 'Making Friends', 'campaign_id' => $campaign->id],\n            )\n        )\n            ->create();\n\n        // Generate Races\n        Race::factory()\n            ->state(['name' => 'Elf', 'campaign_id' => $campaign->id])\n            ->has(Race::factory()\n                ->state(['name' => 'Wood elf', 'campaign_id' => $campaign->id])\n                ->has(Race::factory()\n                    ->state(['name' => 'Leaf elf', 'campaign_id' => $campaign->id])))\n            ->has(Race::factory()->state(['name' => 'High elf', 'campaign_id' => $campaign->id]))\n            ->create();\n\n        Race::factory()->count(2)->state(\n            new Sequence(\n                ['name' => 'Human', 'campaign_id' => $campaign->id],\n                ['name' => 'Owlbear', 'campaign_id' => $campaign->id],\n            )\n        )\n            ->create();\n\n        // Generate Tags\n        Tag::factory()->count(3)->state(\n            new Sequence(\n                ['name' => '🧛🏻‍♂️', 'colour' => 'maroon', 'campaign_id' => $campaign->id],\n                ['name' => 'Important', 'colour' => 'aqua', 'campaign_id' => $campaign->id],\n                ['name' => 'NPC', 'colour' => 'grey', 'campaign_id' => $campaign->id],\n            )\n        )\n            ->create();\n\n        // Generate Quests\n        $itemFirstQuest = Item::factory()->state(['campaign_id' => $campaign->id])->create();\n        Quest::factory()->state(['name' => 'Salary Negotiations', 'campaign_id' => $campaign->id])\n            ->has(QuestElement::factory()->state(['name' => 'Main Character', 'entity_id' => $firstCharacter->entity->id, 'created_by' => $campaign->created_by]), 'elements')\n            ->has(QuestElement::factory()->state(['name' => 'MacGuffin', 'entity_id' => $itemFirstQuest->entity->id, 'created_by' => $campaign->created_by]), 'elements')\n            ->create();\n\n        Quest::factory()->state(['name' => 'Fixin Bugs', 'campaign_id' => $campaign->id])\n            ->create();\n\n        // Generate Journals\n        Journal::factory()->count(2)->state(\n            new Sequence(\n                ['name' => 'Bilbo\\'s journey to middle earth', 'campaign_id' => $campaign->id, 'author_id' => $firstCharacter->entity->id],\n                ['name' => 'The tree rings', 'campaign_id' => $campaign->id],\n            )\n        )\n            ->create();\n\n        // Generate Calendars\n        Calendar::factory()->state([\n            'name' => 'Gregorian', 'campaign_id' => $campaign->id,\n            'months' => '[{\"name\":\"January\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"February\",\"length\":28,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"March\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"April\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"Mai\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"June\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"July\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"August\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"September\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"October\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"November\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"December\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"}]',\n            'weekdays' => '[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"]',\n            'seasons' => '[{\"name\":\"Spring\",\"month\":3,\"day\":21},{\"name\":\"Summer\",\"month\":6,\"day\":21},{\"name\":\"Autumn\",\"month\":9,\"day\":21},{\"name\":\"Winter\",\"month\":12,\"day\":21}]',\n            'suffix' => 'AD',\n            'has_leap_year' => 1,\n            'leap_year_amount' => 1,\n            'leap_year_month' => 2,\n            'leap_year_offset' => 4,\n            'leap_year_start' => 4,\n            'start_offset' => 5,\n            'is_incrementing' => 1,\n            'date' => Carbon::now()->toDateString(),\n        ])\n            ->create();\n\n        // Generate Relations\n        $firstRelation = Relation::factory()->state(['relation' => 'Best Friend', 'campaign_id' => $campaign->id, 'owner_id' => $secondCharacter->entity->id, 'target_id' => $thirdCharacter->entity->id])->create();\n        Relation::factory()->state(['relation' => 'Mortal Enemy', 'campaign_id' => $campaign->id, 'owner_id' => $thirdCharacter->entity->id, 'target_id' => $secondCharacter->entity->id])->for($firstRelation, 'mirror')->create();\n\n        $secondRelation = Relation::factory()->state(['relation' => 'Best Friend', 'campaign_id' => $campaign->id, 'owner_id' => $secondCharacter->entity->id, 'target_id' => $thirdCharacter->entity->id])->create();\n        Relation::factory()->state(['relation' => 'Mortal Enemy', 'campaign_id' => $campaign->id, 'owner_id' => $thirdCharacter->entity->id, 'target_id' => $secondCharacter->entity->id])->for($secondRelation, 'mirror')->create();\n\n        return 0;\n    }\n\n    /**\n     * Load observers.\n     */\n    private function loadObservers(Campaign $campaign)\n    {\n        CampaignLocalization::forceCampaign($campaign);\n        Ability::observe(AbilityObserver::class);\n        Location::observe(LocationObserver::class);\n        Calendar::observe(CalendarObserver::class);\n        Quest::observe(QuestObserver::class);\n        QuestElement::observe(QuestElementObserver::class);\n        Relation::observe(RelationObserver::class);\n        Journal::observe(JournalObserver::class);\n        Event::observe(EventObserver::class);\n        Tag::observe(TagObserver::class);\n        Race::observe(RaceObserver::class);\n        Note::observe(NoteObserver::class);\n        EntityAbility::observe(EntityAbilityObserver::class);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Campaigns/ExportCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse App\\Services\\Campaign\\ExportService;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\n\nclass ExportCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'campaigns:export {campaign}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Export a campaign';\n\n    public function __construct(protected ExportService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $this->info(Carbon::now());\n\n        $campaignID = $this->argument('campaign');\n        $campaign = Campaign::find($campaignID);\n        $user = User::find(1);\n\n        $this->service\n            ->campaign($campaign)\n            ->user($user)\n            ->queue();\n\n        $this->info(Carbon::now() . ': Queues campaign #' . $campaign->id . ' export.');\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Campaigns/ImportCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Campaigns;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Jobs\\Campaigns\\Import;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignImport;\nuse Illuminate\\Console\\Command;\n\nclass ImportCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'campaigns:import {campaign}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Re-run an import job';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $campaignID = $this->argument('campaign');\n        $campaign = Campaign::find($campaignID);\n\n        $job = CampaignImport::where('campaign_id', $campaign->id)->orderBy('created_at', 'DESC')->\n        where('status_id', '<>', 1)->first();\n        if (! $job) {\n            $this->info('No job for campaign ' . $campaign->id);\n\n            return;\n        }\n\n        $job->status_id = CampaignImportStatus::QUEUED;\n        $job->saveQuietly();\n\n        Import::dispatch($job);\n        $this->info('Re-queued campaign ' . $campaign->id);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Campaigns/PermissionsSyncCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Database\\Eloquent\\Collection;\n\nclass PermissionsSyncCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'campaigns:permissions {campaign}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Sync permissions from one campaign role to another';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(): int\n    {\n        $campaign = Campaign::find($this->argument('campaign'));\n\n        if (! $campaign) {\n            $this->error('Campaign not found.');\n\n            return 1;\n        }\n\n        $this->info(\"Campaign: {$campaign->name}\");\n\n        /** @var Collection<int, CampaignRole> $roles */\n        $roles = CampaignRole::where('campaign_id', $campaign->id)->get();\n\n        if ($roles->count() < 2) {\n            $this->error('Campaign must have at least two roles to sync permissions.');\n\n            return 1;\n        }\n\n        $roleChoices = $roles->mapWithKeys(fn (CampaignRole $role) => [$role->id => $role->name])->all();\n\n        $sourceName = $this->choice('Select the source role (permissions will be copied from)', $roleChoices);\n        $sourceRole = $roles->firstWhere('name', $sourceName);\n\n        $targetName = $this->choice('Select the target role (permissions will be copied to)', $roleChoices);\n        $targetRole = $roles->firstWhere('name', $targetName);\n\n        if ($sourceRole->id === $targetRole->id) {\n            $this->error('Source and target roles must be different.');\n\n            return 1;\n        }\n\n        $existingPermissionsCount = CampaignPermission::where('campaign_role_id', $targetRole->id)->count();\n\n        if ($existingPermissionsCount > 0) {\n            if (! $this->confirm(\"The target role \\\"{$targetRole->name}\\\" already has {$existingPermissionsCount} permission(s). Clear them before syncing?\")) {\n                $this->info('Sync cancelled.');\n\n                return 0;\n            }\n\n            CampaignPermission::where('campaign_role_id', $targetRole->id)->delete();\n            $this->info(\"Cleared {$existingPermissionsCount} existing permission(s) from \\\"{$targetRole->name}\\\".\");\n        }\n\n        $sourceRole->duplicate($targetRole);\n\n        $createdCount = CampaignPermission::where('campaign_role_id', $targetRole->id)->count();\n\n        $this->info(\"Successfully copied {$createdCount} permission(s) from \\\"{$sourceRole->name}\\\" to \\\"{$targetRole->name}\\\".\");\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Campaigns/PopulateCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Campaigns;\n\nuse App\\Jobs\\Campaigns\\Populate;\nuse App\\Models\\Campaign;\nuse App\\Services\\StarterService;\nuse Illuminate\\Console\\Command;\n\nclass PopulateCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'campaigns:populate {campaign}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Populate a campaign with the starter kit';\n\n    protected StarterService $starterService;\n\n    public function __construct(StarterService $starterService)\n    {\n        $this->starterService = $starterService;\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $campaignId = $this->argument('campaign');\n        $campaign = Campaign::where('id', $campaignId)->first();\n        if ($campaign) {\n            Populate::dispatch($campaign);\n        } else {\n            $this->info('Invalid campaign ID');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Campaigns/VisibileEntityCountCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\Counters\\VisibleEntityCountService;\nuse App\\Traits\\HasJobLog;\nuse Illuminate\\Console\\Command;\n\nclass VisibileEntityCountCommand extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'campaigns:public';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Update the visible entity count for public campaigns';\n\n    /** @var int Number of processed elements */\n    protected int $count = 0;\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct(protected VisibleEntityCountService $countService)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(): void\n    {\n        Campaign::public()->chunk(1000, function ($campaigns): void {\n            /** @var Campaign $campaign */\n            foreach ($campaigns as $campaign) {\n                $this->count++;\n                $this->countService->campaign($campaign)->process();\n            }\n        });\n        $log = \"Updated {$this->count} public campaigns.\";\n        $this->info($log);\n        $this->log($log);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Cleanup/AnonymiseUserLogs.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Cleanup;\n\nuse App\\Services\\Users\\UserLogService;\nuse App\\Traits\\HasJobLog;\nuse Illuminate\\Console\\Command;\n\nclass AnonymiseUserLogs extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'cleanup:anonymise-user-logs';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Anonymise User logs older than 30 days';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct(protected UserLogService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $this->service->anonymize();\n\n        $log = 'Cleaned up ' . $this->service->count() . ' logs PII.';\n        $this->info($log);\n        $this->log($log);\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Cleanup/CleanupEntityLogs.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Cleanup;\n\nuse App\\Models\\EntityLog;\nuse App\\Traits\\HasJobLog;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CleanupEntityLogs extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'cleanup:entity-logs';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Cleanup entity log details';\n\n    /** @var int number of cleaned up logs */\n    protected int $count = 0;\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $amount = config('entities.logs');\n\n        /**\n         * We don't delete logs here (that's handled by the MassPrunable trait), but instead, we remove\n         * the changelogs that are available to superboosted campaigns for up to $amount(30) days.\n         */\n        EntityLog::where('created_at', '<=', Carbon::now()->subDays($amount)->toDateString())\n            ->whereNotNull('changes')\n            ->chunkById(100, function ($models): void {\n                $entityIds = [];\n                foreach ($models as $model) {\n                    $entityIds[] = $model->id;\n                    $this->count++;\n                }\n\n                $statement = 'UPDATE entity_logs SET changes = null WHERE id in(' .\n                    implode(', ', $entityIds) .\n                ') limit ' . count($entityIds);\n                DB::statement($statement);\n            });\n        $log = \"Cleaned up {$this->count} entity logs.\";\n        $this->info($log);\n        $this->log($log);\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Cleanup/CleanupImages.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Cleanup;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\nclass CleanupImages extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'cleanup:images {folder=w} {max=500} {dry=0}';\n\n    protected bool $dry = true;\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Delete old images from s3';\n\n    protected int $count = 0;\n\n    protected int $max = 0;\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $folder = $this->argument('folder');\n        $this->max = (int) $this->argument('max');\n\n        $dry = $this->argument('dry');\n        if ($dry === '1') {\n            $this->dry = false;\n        }\n\n        $this->info('Cleaning up ' . $folder . '/');\n        if ($this->dry) {\n            $this->warn('This is a dry run. Nothing will get deleted.');\n        }\n        $directories = Storage::directories($folder . '/');\n        $chunks = array_chunk($directories, 500);\n        foreach ($chunks as $chunk) {\n            $ids = [];\n            foreach ($chunk as $path) {\n                $ids[] = Str::after($path, $folder . '/');\n            }\n\n            // Get ids where a left join on the campaigns table has no result\n            $select = 'with u(id) as (values (' . implode('), (', $ids) . ')) ' .\n                'select u.id from u ' .\n                'left join campaigns as c on c.id = u.id ' .\n                'where c.id is null';\n            $db = DB::select($select);\n            $nullCampaigns = [];\n            foreach ($db as $campaign) {\n                $nullCampaigns[] = $campaign->id;\n            }\n\n            if (empty($nullCampaigns)) {\n                continue;\n            }\n            foreach ($nullCampaigns as $id) {\n                if (empty($id)) {\n                    continue;\n                }\n                if (! $this->dry) {\n                    $files = Storage::allFiles($folder . '/' . $id);\n                    if (! empty($files)) {\n                        Storage::delete($files);\n                    }\n                    Storage::deleteDirectory($folder . '/' . $id);\n                }\n                $this->count++;\n            }\n            if ($this->dry) {\n                $this->info('Would delete ' . $this->count . ' images/folders.');\n                $this->info(implode(',', $nullCampaigns));\n            }\n            if ($this->count > $this->max) {\n                $this->info('Reached max amount of ' . $this->max);\n\n                return;\n            }\n        }\n\n        if ($this->dry) {\n            return;\n        }\n        $this->info('Deleted ' . $this->count . ' images/folders.');\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Cleanup/CleanupTrashed.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Cleanup;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Services\\Entity\\PurgeService;\nuse App\\Services\\Posts\\PurgeService as PostPurgeService;\nuse App\\Traits\\HasJobLog;\nuse Carbon\\Carbon;\nuse Exception;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CleanupTrashed extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'cleanup:trashed';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Delete old trashed entities';\n\n    /**\n     * The recovery service\n     */\n    protected PurgeService $service;\n\n    protected PostPurgeService $postService;\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct(PurgeService $service, PostPurgeService $postService)\n    {\n        parent::__construct();\n        $this->service = $service;\n        $this->postService = $postService;\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $delay = Carbon::now()->subDays(config('entities.hard_delete'))->toDateString();\n        $log = '';\n        $this->info('Looking to purge entities and posts deleted since ' . $delay);\n\n        DB::beginTransaction();\n        try {\n            Entity::onlyTrashed()\n                ->where('deleted_at', '<=', $delay)\n                ->allCampaigns()\n                ->with(['campaign', 'entityType'])\n                ->has('campaign')\n                ->chunkById(1000, function ($entities): void {\n                    $this->info('Chunk deleting ' . count($entities) . ' entities.');\n                    foreach ($entities as $entity) {\n                        // dump($entity->name . ' (' . $entity->entityType->code . ')');\n                        $this->service->trash($entity);\n                    }\n                });\n            Post::onlyTrashed()\n                ->where('deleted_at', '<=', $delay)\n                ->chunkById(1000, function ($posts): void {\n                    $this->info('Chunk deleting ' . count($posts) . ' posts.');\n                    /** @var Post $post */\n                    foreach ($posts as $post) {\n                        $this->postService->trash($post);\n                    }\n                });\n            DB::commit();\n        } catch (Exception $e) {\n            $this->error($e->getMessage());\n            $log .= '<br />' . $e->getMessage();\n            DB::rollBack();\n        }\n\n        $this->info('');\n        $this->info('Deleted ' . $this->service->count() . ' trashed entities.');\n        $log .= \"\\n\" . 'Deleted ' . $this->service->count() . ' trashed entities.';\n\n        $this->info('Deleted ' . $this->postService->count() . ' trashed posts.');\n        $log .= \"\\n\" . 'Deleted ' . $this->postService->count() . ' trashed posts.';\n        $this->log($log);\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Cleanup/CleanupTrashedCampaigns.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Cleanup;\n\nuse App\\Models\\Campaign;\nuse App\\Observers\\CampaignObserver;\nuse App\\Services\\Campaign\\PurgeService;\nuse App\\Traits\\HasJobLog;\nuse Illuminate\\Console\\Command;\n\nclass CleanupTrashedCampaigns extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'cleanup:trashed-campaigns';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Delete old trashed campaigns';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct(protected PurgeService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        Campaign::observe(CampaignObserver::class);\n\n        $count = $this->service->purgeDeleted();\n        $log = 'Deleted ' . $count . ' trashed campaigns.';\n        $this->info($log);\n        $this->log($log . ' ' . implode(',', $this->service->ids()));\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Cleanup/CleanupUsers.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Cleanup;\n\nuse App\\Services\\Users\\PurgeService;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\n\nclass CleanupUsers extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'users:purge {dry=0} {limit=1000}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Purge accounts';\n\n    public function __construct(protected PurgeService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(): void\n    {\n        $this->info(Carbon::now());\n\n        $dry = $this->argument('dry');\n        if ($dry === '0') {\n            $this->service->real();\n        }\n        $limit = (int) $this->argument('limit');\n        $this->service->limit($limit);\n\n        /*\n        $cutoff = Carbon::now()->subYears(1);\n\n        $count = $service->date($cutoff)->empty();\n        $this->info(Carbon::now() . ': Empty scheduled ' . $count . ' users for cleanup.');\n\n        $cutoff = Carbon::now()->subYears(2);\n        $count = $service->date($cutoff)->example();\n        $this->info(Carbon::now() . ': Example  scheduled ' . $count . ' users for cleanup.');\n         */\n\n        $count = $this->service->firstWarning();\n        $this->info(Carbon::now() . ': ' . $count . ' inactive users notified (first warning)');\n\n        $count = $this->service->secondWarning();\n        $this->info(Carbon::now() . ': ' . $count . ' inactive users notified (second warning)');\n\n        $count = $this->service->purge();\n        $this->info(Carbon::now() . ': ' . $count . ' inactive users purged');\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Entities/CalendarAdvancer.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Entities;\n\nuse App\\Jobs\\CalendarsClearElapsed;\nuse App\\Models\\Calendar;\nuse App\\Services\\Calendars\\AdvancerService;\nuse App\\Traits\\HasJobLog;\nuse Exception;\nuse Illuminate\\Console\\Command;\n\nclass CalendarAdvancer extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'calendar:advance';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Increment the date of all advancing calendars.';\n\n    /** Calendars that were advanced */\n    protected int $count = 0;\n\n    /** Errors that happened */\n    protected array $errors = [];\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct(protected AdvancerService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        Calendar::where('is_incrementing', true)->chunkById(500, function ($calendars): void {\n            /** @var Calendar $calendar */\n            foreach ($calendars as $calendar) {\n                try {\n                    $this->service->calendar($calendar)->advance();\n                    // Consoles don't have observers at the moment because Jay makes terrible life choices\n                    CalendarsClearElapsed::dispatch($calendar);\n                    $this->count++;\n                } catch (Exception $e) {\n                    $this->errors[$calendar->id] = $e->getMessage();\n                }\n            }\n        });\n\n        $log = \"Advanced {$this->count} calendars.\";\n        $this->info($log);\n\n        if (! empty($this->errors)) {\n            $this->error('Errors for ' . count($this->errors) . ' calendars.');\n            $this->error(implode(', ', array_keys($this->errors)));\n\n            $log .= \"\\n\" . 'Errors for ' . count($this->errors) . ' calendars.';\n            $log .= \"\\n\" . implode(', ', array_keys($this->errors));\n        }\n        $this->log($log);\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Entities/ChildlessEntities.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Entities;\n\nuse App\\Models\\Entity;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Str;\n\nclass ChildlessEntities extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'entities:childless';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Find entities with no children';\n\n    protected $traces = [];\n\n    protected $total = 0;\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $entities = [];\n        $types = config('entities.ids');\n        foreach ($types as $type => $id) {\n            $entities[] = $type;\n        }\n\n        foreach ($entities as $type) {\n            $plural = Str::plural($type);\n            $this->info('checking ' . $plural);\n\n            Entity::select('entities.*')\n                ->where('entities.type', $type)\n                ->leftJoin($plural . ' as f', 'f.id', 'entities.entity_id')\n                ->whereNull('f.id')\n                ->with(Str::camel($type))\n                ->chunk(1000, function ($models) use ($type): void {\n                    foreach ($models as $model) {\n                        $this->trace($model, $type);\n                    }\n\n                    if (! empty($this->traces)) {\n                        $this->info(implode(', ', $this->traces));\n                        $this->traces = [];\n                    }\n                });\n\n            $this->info('');\n        }\n\n        $this->warn('Found ' . $this->total . ' childless entities.');\n\n        return 0;\n    }\n\n    protected function trace(Entity $entity, string $type): void\n    {\n        $this->traces[] = $entity->id;\n        $this->total++;\n\n        /*if (count($this->traces) > 100) {\n            $this->info(implode(', ', $this->traces));\n            $this->traces = [];\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Entities/MapChunk.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Entities;\n\nuse App\\Jobs\\ChunkMapJob;\nuse App\\Models\\Map;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Foundation\\Bus\\PendingDispatch;\n\nclass MapChunk extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'map:chunk {map : The map ID}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Chunks a map\\'s image into tiles.';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * @return int\n     */\n    public function handle()\n    {\n        $mapID = (int) $this->argument('map');\n        $map = Map::find($mapID);\n        if (empty($map)) {\n            $this->error('Unknown map #' . $mapID);\n\n            return 0;\n        }\n\n        $this->dispatch($mapID);\n        $this->info('ChunkMapJob queues for map #' . $mapID);\n\n        return 0;\n    }\n\n    /**\n     * @return PendingDispatch\n     */\n    protected function dispatch(int $mapID)\n    {\n        return ChunkMapJob::dispatch($mapID);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/InstallCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse App\\Models\\EntityType;\nuse Exception;\nuse Illuminate\\Console\\Command;\n\nclass InstallCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'kanka:install';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Set up Kanka\\'s boilerplate';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        try {\n            if (EntityType::find(1)) {\n                $this->error('Kanka has already been installed.');\n                $this->info('Check it out at ' . config('app.url') . ':' . env('APP_PORT'));\n\n                return;\n            }\n        } catch (Exception) {\n        }\n        $this->call('key:generate');\n        $this->call('migrate');\n        $this->call('db:seed');\n        $this->call('passport:install');\n\n        $this->info('Kanka successfully installed.');\n        $this->info('Check it out at ' . config('app.url') . ':' . env('APP_PORT'));\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Metrics/MetricsGa4.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Metrics;\n\nuse Google\\Analytics\\Data\\V1beta\\Client\\BetaAnalyticsDataClient;\nuse Google\\Analytics\\Data\\V1beta\\DateRange;\nuse Google\\Analytics\\Data\\V1beta\\Dimension;\nuse Google\\Analytics\\Data\\V1beta\\Filter;\nuse Google\\Analytics\\Data\\V1beta\\Filter\\InListFilter;\nuse Google\\Analytics\\Data\\V1beta\\Filter\\StringFilter;\nuse Google\\Analytics\\Data\\V1beta\\Filter\\StringFilter\\MatchType;\nuse Google\\Analytics\\Data\\V1beta\\FilterExpression;\nuse Google\\Analytics\\Data\\V1beta\\FilterExpressionList;\nuse Google\\Analytics\\Data\\V1beta\\Metric;\nuse Google\\Analytics\\Data\\V1beta\\OrderBy;\nuse Google\\Analytics\\Data\\V1beta\\OrderBy\\DimensionOrderBy;\nuse Google\\Analytics\\Data\\V1beta\\OrderBy\\DimensionOrderBy\\OrderType;\nuse Google\\Analytics\\Data\\V1beta\\OrderBy\\MetricOrderBy;\nuse Google\\Analytics\\Data\\V1beta\\RunReportRequest;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass MetricsGa4 extends Command\n{\n    protected $signature = 'metrics:ga4 {--days=28 : Number of days to look back}';\n\n    protected $description = 'Pull GA4 metrics and save as a markdown report to storage/app/metrics/';\n\n    public function handle(): int\n    {\n        $days = (int) $this->option('days');\n        $credentialsPath = config('tracking.ga_credential_path');\n        $propertyId = config('tracking.ga_property_id');\n\n        if (empty($credentialsPath) || empty($propertyId)) {\n            $this->error('GA4_CREDENTIALS_PATH and GA4_PROPERTY_ID must be configured.');\n\n            return Command::FAILURE;\n        }\n\n        $client = new BetaAnalyticsDataClient(['credentials' => $credentialsPath]);\n        $property = \"properties/{$propertyId}\";\n        $dateRange = new DateRange([\n            'start_date' => \"{$days}daysAgo\",\n            'end_date' => 'today',\n        ]);\n\n        $startDate = now()->subDays($days)->format('Y-m-d');\n        $endDate = now()->format('Y-m-d');\n\n        $sections = [\n            '# GA4 Metrics Report',\n            \"_Date range: {$startDate} — {$endDate} ({$days} days)_\",\n            $this->homepageSessions($client, $property, $dateRange),\n            $this->registerPageSources($client, $property, $dateRange),\n            $this->registerCtaClicks($client, $property, $dateRange),\n            $this->scrollDepth($client, $property, $dateRange),\n        ];\n\n        $report = implode(\"\\n\\n\", $sections);\n        $filename = 'metrics/ga4-' . now()->format('Y-m-d') . '.md';\n\n        Storage::put($filename, $report);\n\n        $this->line($report);\n        $this->newLine();\n        $this->info(\"Saved to storage/app/{$filename}\");\n\n        return Command::SUCCESS;\n    }\n\n    private function homepageSessions(BetaAnalyticsDataClient $client, string $property, DateRange $dateRange): string\n    {\n        $response = $client->runReport(new RunReportRequest([\n            'property' => $property,\n            'date_ranges' => [$dateRange],\n            'metrics' => [\n                new Metric(['name' => 'sessions']),\n                new Metric(['name' => 'engagementRate']),\n            ],\n            'dimension_filter' => new FilterExpression([\n                'and_group' => new FilterExpressionList([\n                    'expressions' => [\n                        new FilterExpression([\n                            'filter' => new Filter([\n                                'field_name' => 'pagePath',\n                                'string_filter' => new StringFilter([\n                                    'match_type' => MatchType::EXACT,\n                                    'value' => '/',\n                                ]),\n                            ]),\n                        ]),\n                        new FilterExpression([\n                            'not_expression' => new FilterExpression([\n                                'filter' => new Filter([\n                                    'field_name' => 'country',\n                                    'in_list_filter' => new InListFilter([\n                                        'values' => ['China', 'Singapore', 'Vietnam'],\n                                    ]),\n                                ]),\n                            ]),\n                        ]),\n                    ],\n                ]),\n            ]),\n        ]));\n\n        $lines = [\n            '## Homepage Sessions (`/`)',\n            '_Excludes traffic from China, Singapore, and Vietnam._',\n            '',\n            '| Sessions | Engagement Rate |',\n            '| --- | --- |',\n        ];\n\n        if ($response->getRowCount() === 0) {\n            $lines[] = '| — | — |';\n        } else {\n            foreach ($response->getRows() as $row) {\n                $sessions = $row->getMetricValues()[0]->getValue();\n                $engagementRate = round((float) $row->getMetricValues()[1]->getValue() * 100, 2);\n                $lines[] = \"| {$sessions} | {$engagementRate}% |\";\n            }\n        }\n\n        return implode(\"\\n\", $lines);\n    }\n\n    private function registerPageSources(BetaAnalyticsDataClient $client, string $property, DateRange $dateRange): string\n    {\n        $response = $client->runReport(new RunReportRequest([\n            'property' => $property,\n            'date_ranges' => [$dateRange],\n            'dimensions' => [\n                new Dimension(['name' => 'sessionSource']),\n            ],\n            'metrics' => [\n                new Metric(['name' => 'activeUsers']),\n            ],\n            'dimension_filter' => new FilterExpression([\n                'filter' => new Filter([\n                    'field_name' => 'pagePath',\n                    'string_filter' => new StringFilter([\n                        'match_type' => MatchType::EXACT,\n                        'value' => '/register',\n                    ]),\n                ]),\n            ]),\n            'order_bys' => [\n                new OrderBy([\n                    'metric' => new MetricOrderBy(['metric_name' => 'activeUsers']),\n                    'desc' => true,\n                ]),\n            ],\n        ]));\n\n        $lines = [\n            '## Register Page Active Users by Session Source (`/register`)',\n            '',\n            '| Source | Active Users |',\n            '| --- | --- |',\n        ];\n\n        if ($response->getRowCount() === 0) {\n            $lines[] = '| — | — |';\n        } else {\n            foreach ($response->getRows() as $row) {\n                $source = $row->getDimensionValues()[0]->getValue();\n                $users = $row->getMetricValues()[0]->getValue();\n                $lines[] = \"| {$source} | {$users} |\";\n            }\n        }\n\n        return implode(\"\\n\", $lines);\n    }\n\n    private function registerCtaClicks(BetaAnalyticsDataClient $client, string $property, DateRange $dateRange): string\n    {\n        $response = $client->runReport(new RunReportRequest([\n            'property' => $property,\n            'date_ranges' => [$dateRange],\n            'dimensions' => [\n                new Dimension(['name' => 'customEvent:cta_location']),\n            ],\n            'metrics' => [\n                new Metric(['name' => 'eventCount']),\n            ],\n            'dimension_filter' => new FilterExpression([\n                'filter' => new Filter([\n                    'field_name' => 'eventName',\n                    'string_filter' => new StringFilter([\n                        'match_type' => MatchType::EXACT,\n                        'value' => 'register_cta_click',\n                    ]),\n                ]),\n            ]),\n            'order_bys' => [\n                new OrderBy([\n                    'metric' => new MetricOrderBy(['metric_name' => 'eventCount']),\n                    'desc' => true,\n                ]),\n            ],\n        ]));\n\n        $lines = [\n            '## `register_cta_click` Events by CTA Location',\n            '',\n            '| CTA Location | Event Count |',\n            '| --- | --- |',\n        ];\n\n        if ($response->getRowCount() === 0) {\n            $lines[] = '| — | — |';\n        } else {\n            foreach ($response->getRows() as $row) {\n                $location = $row->getDimensionValues()[0]->getValue();\n                $count = $row->getMetricValues()[0]->getValue();\n                $lines[] = \"| {$location} | {$count} |\";\n            }\n        }\n\n        return implode(\"\\n\", $lines);\n    }\n\n    private function scrollDepth(BetaAnalyticsDataClient $client, string $property, DateRange $dateRange): string\n    {\n        $response = $client->runReport(new RunReportRequest([\n            'property' => $property,\n            'date_ranges' => [$dateRange],\n            'dimensions' => [\n                new Dimension(['name' => 'percentScrolled']),\n            ],\n            'metrics' => [\n                new Metric(['name' => 'sessions']),\n            ],\n            'dimension_filter' => new FilterExpression([\n                'filter' => new Filter([\n                    'field_name' => 'pagePath',\n                    'string_filter' => new StringFilter([\n                        'match_type' => MatchType::EXACT,\n                        'value' => '/',\n                    ]),\n                ]),\n            ]),\n            'order_bys' => [\n                new OrderBy([\n                    'dimension' => new DimensionOrderBy([\n                        'dimension_name' => 'percentScrolled',\n                        'order_type' => OrderType::NUMERIC,\n                    ]),\n                    'desc' => false,\n                ]),\n            ],\n        ]));\n\n        $lines = [\n            '## Scroll Depth Distribution (`/`)',\n            '',\n            '| Scroll Depth | Sessions |',\n            '| --- | --- |',\n        ];\n\n        if ($response->getRowCount() === 0) {\n            $lines[] = '| — | — |';\n        } else {\n            foreach ($response->getRows() as $row) {\n                $depth = $row->getDimensionValues()[0]->getValue();\n                $sessions = $row->getMetricValues()[0]->getValue();\n                $lines[] = \"| {$depth}% | {$sessions} |\";\n            }\n        }\n\n        return implode(\"\\n\", $lines);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Migrations/BookmarkEntityType.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Migrations;\n\nuse App\\Models\\EntityType;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass BookmarkEntityType extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'migrate:bookmarks';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Migrate bookmarks to the new entity type id foreign key';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $this->info('Migrating bookmarks to the new entity_type_id property');\n        $entityTypes = EntityType::default()->get();\n        foreach ($entityTypes as $entityType) {\n            $statement = 'UPDATE bookmarks SET entity_type_id = ' . $entityType->id . ' WHERE type = \\'' . $entityType->code . '\\'';\n            DB::statement($statement);\n        }\n        $this->info('Finished');\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Migrations/Cdn.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Migrations;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass Cdn extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'cdn:migrate';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Migrate cdn urls';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $tables = [\n            //            'posts' => 'entry',\n            //            'timeline_eras' => 'entry',\n            //            'timeline_elements' => 'entry',\n            //            'quest_elements' => 'entry',\n            //            'attributes' => 'value',\n            //            'campaigns' => 'entry',\n            //            'entities' => 'entry',\n            //            'map_layers' => 'entry',\n            //            'character_traits' => 'entry',\n            'plugin_versions' => 'content',\n        ];\n        $old = 'https://kanka-user-assets.s3.eu-central-1.amazonaws.com/';\n        $new = 'https://cdn-ugc.kanka.io/';\n        $batchSize = 1000;\n\n        foreach ($tables as $tableName => $column) {\n            $this->info(\"Migrating $tableName ($column)...\");\n            do {\n                $affected = DB::update(\"\n            UPDATE `$tableName`\n            SET `$column` = REPLACE(`$column`, ?, ?)\n            WHERE `$column` LIKE ?\n            LIMIT $batchSize\n        \", [$old, $new, \"%$old%\"]);\n\n                $this->info(\" Updated $affected rows...\");\n\n            } while ($affected > 0);\n\n        }\n\n        $tableName = 'plugin_versions';\n        $column = 'json';\n        $old = 'kanka-user-assets.s3.eu-central-1.amazonaws.com';\n        $new = 'cdn-ugc.kanka.io';\n        $this->info(\"Migrating $tableName ($column)...\");\n        do {\n            $affected = DB::update(\"\n\n                UPDATE `$tableName`\n                SET `$column` = REPLACE(`$column`, ?, ?)\n                WHERE `$column` LIKE ?\n                LIMIT $batchSize\n            \", [$old, $new, \"%$old%\"]);\n            $this->info(\" Updated $affected rows...\");\n        } while ($affected > 0);\n\n        $this->info('URL replacement completed.');\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Migrations/MigrateEntityStatuses.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Migrations;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass MigrateEntityStatuses extends Command\n{\n    protected $signature = 'migrate:entity-statuses';\n\n    protected $description = 'Migrate statuses from child tables to the entities table';\n\n    public function handle(): void\n    {\n        $this->migrateCharacters();\n        $this->migrateQuests();\n\n        $this->migrateBooleans('creature', 'creatures', [\n            'is_dead' => 'dead',\n            'is_extinct' => 'extinct',\n        ]);\n        $this->migrateBooleans('location', 'locations', [\n            'is_destroyed' => 'destroyed',\n        ]);\n        $this->migrateBooleans('organisation', 'organisations', [\n            'is_defunct' => 'defunct',\n        ]);\n        $this->migrateBooleans('race', 'races', [\n            'is_extinct' => 'extinct',\n        ]);\n        $this->migrateBooleans('family', 'families', [\n            'is_extinct' => 'extinct',\n        ]);\n\n        $this->info('Finished migrating entity statuses.');\n    }\n\n    /**\n     * Migrate character statuses (0=alive, 1=dead, 2=missing) to entities.status_id.\n     */\n    protected function migrateCharacters(): void\n    {\n        $characterTypeId = config('entities.ids.character');\n\n        $mapping = [\n            0 => 'alive',\n            1 => 'dead',\n            2 => 'missing',\n        ];\n\n        $statusIds = $this->getCategoryStatusIds($characterTypeId, $mapping);\n\n        foreach ($mapping as $oldValue => $key) {\n            if (! isset($statusIds[$key])) {\n                $this->warn(\"Category status '{$key}' not found for characters, skipping.\");\n\n                continue;\n            }\n\n            $updated = DB::table('entities')\n                ->join('characters', function ($join) use ($characterTypeId) {\n                    $join->on('entities.entity_id', '=', 'characters.id')\n                        ->where('entities.type_id', '=', $characterTypeId);\n                })\n                ->where('characters.status_id', $oldValue)\n                ->update(['entities.status_id' => $statusIds[$key]]);\n\n            $this->info(\"Characters [{$key}]: {$updated} entities updated.\");\n        }\n    }\n\n    /**\n     * Migrate quest statuses (0=notStarted, 1=ongoing, 2=completed, 3=abandoned) to entities.status_id.\n     */\n    protected function migrateQuests(): void\n    {\n        $questTypeId = config('entities.ids.quest');\n\n        $mapping = [\n            0 => 'not_started',\n            1 => 'ongoing',\n            2 => 'completed',\n            3 => 'abandoned',\n        ];\n\n        $statusIds = $this->getCategoryStatusIds($questTypeId, $mapping);\n\n        foreach ($mapping as $oldValue => $key) {\n            if (! isset($statusIds[$key])) {\n                $this->warn(\"Category status '{$key}' not found for quests, skipping.\");\n\n                continue;\n            }\n\n            $updated = DB::table('entities')\n                ->join('quests', function ($join) use ($questTypeId) {\n                    $join->on('entities.entity_id', '=', 'quests.id')\n                        ->where('entities.type_id', '=', $questTypeId);\n                })\n                ->where('quests.status_id', $oldValue)\n                ->update(['entities.status_id' => $statusIds[$key]]);\n\n            $this->info(\"Quests [{$key}]: {$updated} entities updated.\");\n        }\n    }\n\n    /**\n     * Migrate boolean columns (is_dead, is_extinct, etc.) to entities.status_id.\n     *\n     * @param  array<string, string>  $columns  [boolean_column => status_key]\n     */\n    protected function migrateBooleans(string $entityTypeKey, string $table, array $columns): void\n    {\n        $typeId = config('entities.ids.' . $entityTypeKey);\n        $statusIds = $this->getCategoryStatusIds($typeId, $columns);\n\n        foreach ($columns as $column => $key) {\n            if (! isset($statusIds[$key])) {\n                $this->warn(\"Category status '{$key}' not found for {$table}, skipping.\");\n\n                continue;\n            }\n\n            $updated = DB::table('entities')\n                ->join($table, function ($join) use ($table, $typeId) {\n                    $join->on('entities.entity_id', '=', $table . '.id')\n                        ->where('entities.type_id', '=', $typeId);\n                })\n                ->where($table . '.' . $column, true)\n                ->whereNull('entities.status_id')\n                ->update(['entities.status_id' => $statusIds[$key]]);\n\n            $this->info(ucfirst($entityTypeKey) . \" [{$key}]: {$updated} entities updated.\");\n        }\n    }\n\n    /**\n     * Get category_statuses.id keyed by status key for a given entity type.\n     *\n     * @param  array<int|string, string>  $mapping\n     * @return array<string, int>\n     */\n    protected function getCategoryStatusIds(int $categoryId, array $mapping): array\n    {\n        return DB::table('category_statuses')\n            ->where('category_id', $categoryId)\n            ->whereIn('key', array_values($mapping))\n            ->pluck('id', 'key')\n            ->toArray();\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Migrations/MigrateStatusFilters.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Migrations;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass MigrateStatusFilters extends Command\n{\n    protected $signature = 'migrate:status-filters';\n\n    protected $description = 'Migrate old status filter params in bookmarks and dashboard widgets to the new status_id format';\n\n    /** @var array<string, array<string, string>> Old boolean column → status key, keyed by entity type code */\n    protected array $booleanMap = [\n        'creature' => ['is_dead' => 'dead', 'is_extinct' => 'extinct'],\n        'location' => ['is_destroyed' => 'destroyed'],\n        'organisation' => ['is_defunct' => 'defunct'],\n        'race' => ['is_extinct' => 'extinct'],\n        'family' => ['is_extinct' => 'extinct'],\n    ];\n\n    /** @var array<int, string> Character old enum value → status key */\n    protected array $characterMap = [0 => 'alive', 1 => 'dead', 2 => 'missing'];\n\n    /** @var array<int, string> Quest old enum value → status key */\n    protected array $questMap = [0 => 'not_started', 1 => 'ongoing', 2 => 'completed', 3 => 'abandoned'];\n\n    /** @var array<int, array<string, int>> Cached category_status IDs keyed by entity_type_id then status key */\n    protected array $statusCache = [];\n\n    public function handle(): void\n    {\n        $this->migrateBookmarks();\n        $this->migrateWidgets();\n\n        $this->info('Finished migrating status filters.');\n    }\n\n    protected function migrateBookmarks(): void\n    {\n        $bookmarks = DB::table('bookmarks')\n            ->whereNotNull('filters')\n            ->where('filters', '!=', '')\n            ->whereNotNull('entity_type_id')\n            ->get(['id', 'filters', 'entity_type_id']);\n\n        $updated = 0;\n        foreach ($bookmarks as $bookmark) {\n            $params = $this->parseFilterString($bookmark->filters);\n            if ($this->migrateFilterParams($params, $bookmark->entity_type_id)) {\n                DB::table('bookmarks')\n                    ->where('id', $bookmark->id)\n                    ->update(['filters' => $this->buildFilterString($params)]);\n                $updated++;\n            }\n        }\n\n        $this->info(\"Bookmarks: {$updated} updated.\");\n    }\n\n    protected function migrateWidgets(): void\n    {\n        $widgets = DB::table('campaign_dashboard_widgets')\n            ->whereNotNull('entity_type_id')\n            ->whereNotNull('config')\n            ->get(['id', 'config', 'entity_type_id']);\n\n        $updated = 0;\n        foreach ($widgets as $widget) {\n            $config = json_decode($widget->config, true);\n            if (empty($config['filters']) || ! is_string($config['filters'])) {\n                continue;\n            }\n\n            $params = $this->parseFilterString($config['filters']);\n            if ($this->migrateFilterParams($params, $widget->entity_type_id)) {\n                $config['filters'] = $this->buildFilterString($params);\n                DB::table('campaign_dashboard_widgets')\n                    ->where('id', $widget->id)\n                    ->update(['config' => json_encode($config)]);\n                $updated++;\n            }\n        }\n\n        $this->info(\"Widgets: {$updated} updated.\");\n    }\n\n    /**\n     * Replace old status filter params with the new status_id param.\n     *\n     * @return bool True if any changes were made\n     */\n    protected function migrateFilterParams(array &$params, int $entityTypeId): bool\n    {\n        $changed = false;\n\n        // Handle character/quest enum status_id values\n        $characterTypeId = config('entities.ids.character');\n        $questTypeId = config('entities.ids.quest');\n\n        if (isset($params['status_id']) && ($entityTypeId === $characterTypeId || $entityTypeId === $questTypeId)) {\n            $oldValue = (int) $params['status_id'];\n            $map = $entityTypeId === $characterTypeId ? $this->characterMap : $this->questMap;\n\n            if (isset($map[$oldValue])) {\n                $statusId = $this->resolveStatusId($entityTypeId, $map[$oldValue]);\n                if ($statusId !== null) {\n                    $params['status_id'] = (string) $statusId;\n                    $changed = true;\n                }\n            }\n        }\n\n        // Handle boolean columns (is_dead, is_defunct, is_destroyed, is_extinct)\n        $entityTypeCode = $this->resolveEntityTypeCode($entityTypeId);\n        if ($entityTypeCode === null || ! isset($this->booleanMap[$entityTypeCode])) {\n            return $changed;\n        }\n\n        foreach ($this->booleanMap[$entityTypeCode] as $oldParam => $statusKey) {\n            if (! isset($params[$oldParam])) {\n                continue;\n            }\n\n            $oldValue = (int) $params[$oldParam];\n            unset($params[$oldParam]);\n            $changed = true;\n\n            // Value of 0 means \"not this status\", just remove the old param\n            if ($oldValue === 0) {\n                continue;\n            }\n\n            $statusId = $this->resolveStatusId($entityTypeId, $statusKey);\n            if ($statusId !== null) {\n                $params['status_id'] = (string) $statusId;\n            }\n        }\n\n        return $changed;\n    }\n\n    protected function resolveStatusId(int $entityTypeId, string $key): ?int\n    {\n        if (! isset($this->statusCache[$entityTypeId])) {\n            $this->statusCache[$entityTypeId] = DB::table('category_statuses')\n                ->where('category_id', $entityTypeId)\n                ->pluck('id', 'key')\n                ->toArray();\n        }\n\n        return $this->statusCache[$entityTypeId][$key] ?? null;\n    }\n\n    protected function resolveEntityTypeCode(int $entityTypeId): ?string\n    {\n        $ids = config('entities.ids');\n        foreach ($ids as $code => $id) {\n            if ($id === $entityTypeId) {\n                return $code;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * @return array<string, string>\n     */\n    protected function parseFilterString(string $filters): array\n    {\n        parse_str($filters, $params);\n\n        return $params;\n    }\n\n    /**\n     * @param  array<string, string>  $params\n     */\n    protected function buildFilterString(array $params): string\n    {\n        return http_build_query($params);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Migrations/MigrateSubMentions.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Migrations;\n\nuse App\\Models\\EntityMention;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\n\nclass MigrateSubMentions extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'mentions:migrate-sub';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Update mentions linked to quest elements, timelines and posts to be sortable by name';\n\n    protected int $count = 0;\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(): void\n    {\n        $start = Carbon::now();\n        $this->warn('Start at ' . $start);\n\n        EntityMention::with([\n            'questElement' => function ($sub) {\n                $sub->select('id', 'name', 'quest_id');\n            },\n            'questElement.quest' => function ($sub) {\n                $sub->select('id', 'name', 'is_private');\n            },\n            'questElement.quest.entity' => function ($sub) {\n                $sub->select('id', 'entity_id', 'type_id');\n            }])\n            ->whereNotNull('quest_element_id')\n            ->whereNull('entity_id')\n            ->has('questElement')\n            ->has('questElement.quest')\n            ->has('questElement.quest.entity')\n            ->chunkById(500, function ($mentions) {\n                foreach ($mentions as $mention) {\n                    $mention->entity_id = $mention->questElement->quest->entity->id;\n                    $mention->saveQuietly();\n                    $this->count++;\n                }\n            });\n        $this->info('Migrated ' . $this->count . ' quest element mentions.');\n\n        $this->count = 0;\n        EntityMention::with([\n            'timelineElement' => function ($sub) {\n                $sub->select('id', 'name', 'timeline_id');\n            },\n            'timelineElement.timeline' => function ($sub) {\n                $sub->select('id', 'name', 'is_private');\n            },\n            'timelineElement.timeline.entity' => function ($sub) {\n                $sub->select('id', 'entity_id', 'type_id');\n            }])\n            ->whereNotNull('timeline_element_id')\n            ->whereNull('entity_id')\n            ->has('timelineElement')\n            ->has('timelineElement.timeline')\n            ->has('timelineElement.timeline.entity')\n            ->chunkById(500, function ($mentions) {\n                foreach ($mentions as $mention) {\n                    $mention->entity_id = $mention->timelineElement->timeline->entity->id;\n                    $mention->saveQuietly();\n                    $this->count++;\n                }\n            });\n        $this->info('Migrated ' . $this->count . ' timeline element mentions.');\n\n        $this->count = 0;\n        EntityMention::with([\n            'post' => function ($sub) {\n                $sub->select('id', 'entity_id');\n            }])\n            ->whereNotNull('post_id')\n            ->whereNull('entity_id')\n            ->has('post')\n            ->has('post.entity')\n            ->chunkById(5000, function ($mentions) {\n                foreach ($mentions as $mention) {\n                    $mention->entity_id = $mention->post->entity_id;\n                    $mention->saveQuietly();\n                    $this->count++;\n                }\n            });\n        $this->info('Migrated ' . $this->count . ' post mentions.');\n\n        $now = Carbon::now();\n        $this->warn('End in ' . $now->diffInSeconds($start) . ' seconds at ' . $now);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Migrations/NewsletterSubCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Migrations;\n\nuse App\\Models\\User;\nuse App\\Services\\NewsletterService;\nuse Illuminate\\Console\\Command;\n\nclass NewsletterSubCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'migrate:newsletter-sub';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Update users who are subbed and want the newsletter to be in the correct mailerlite group';\n\n    protected int $count = 0;\n\n    public function __construct(protected NewsletterService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        User::whereNotNull('pledge')\n            ->where('pledge', '<>', '')\n            ->where('settings', 'like', '%mail_release%')\n            ->chunk(100, function ($users) {\n                foreach ($users as $user) {\n                    if (! $user->mail_release) {\n                        continue;\n                    }\n                    $options = [\n                        'releases' => (bool) $user->mail_release,\n                    ];\n                    if ($this->service->user($user)->update($options)) {\n                        $this->count++;\n\n                        continue;\n                    }\n                    $this->error($this->service->error()->getMessage());\n                }\n                sleep(60);\n            });\n\n        $this->info('Processed ' . $this->count . ' users.');\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Report/Accounts.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Report;\n\nuse App\\Jobs\\Discord\\ReportJob;\nuse App\\Services\\Report\\AccountsReportService;\nuse Illuminate\\Console\\Command;\n\nclass Accounts extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'report:accounts {--days=7}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Generate a new accounts report';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(AccountsReportService $service): void\n    {\n        $days = (int) $this->option('days');\n\n        $current = $service->getStats(now()->subDays($days), now());\n        $previous = $service->getStats(now()->subDays($days * 2), now()->subDays($days));\n\n        $title = \"{$service->name()} (Last {$days} days)\";\n\n        $this->info($title);\n        $this->info(str_repeat('=', 60));\n        $this->newLine();\n\n        foreach ($service->buildTerminalLines($current, $previous) as $line) {\n            $this->line($line);\n        }\n\n        ReportJob::dispatch($title, $service->buildDiscordBody($current, $previous));\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Report/Churn.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Report;\n\nuse App\\Jobs\\Discord\\ReportJob;\nuse App\\Services\\Report\\ChurnReportService;\nuse Illuminate\\Console\\Command;\n\nclass Churn extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'report:churn {--days=7}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Generate churn report';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(ChurnReportService $service): void\n    {\n        $days = (int) $this->option('days');\n\n        $current = $service->getStats(now()->subDays($days), now());\n        $previous = $service->getStats(now()->subDays($days * 2), now()->subDays($days));\n\n        $title = \"{$service->name()} (Last {$days} days)\";\n\n        $this->info($title);\n        $this->info(str_repeat('=', 60));\n        $this->newLine();\n\n        foreach ($service->buildTerminalLines($current, $previous) as $line) {\n            $this->line($line);\n        }\n\n        ReportJob::dispatch($title, $service->buildDiscordBody($current, $previous));\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Report/Onboarding.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Report;\n\nuse App\\Jobs\\Discord\\ReportJob;\nuse App\\Services\\Report\\OnboardingReportService;\nuse Illuminate\\Console\\Command;\n\nclass Onboarding extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'report:onboarding {--days=7}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Generate onboarding funnel report';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(OnboardingReportService $service): void\n    {\n        $days = (int) $this->option('days');\n\n        $current = $service->getStats(now()->subDays($days), now());\n        $previous = $service->getStats(now()->subDays($days * 2), now()->subDays($days));\n\n        $title = \"{$service->name()} (Last {$days} days)\";\n\n        $this->info($title);\n        $this->info(str_repeat('=', 60));\n        $this->newLine();\n\n        foreach ($service->buildTerminalLines($current, $previous) as $line) {\n            $this->line($line);\n        }\n\n        ReportJob::dispatch($title, $service->buildDiscordBody($current, $previous));\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Report/Weekly.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Report;\n\nuse App\\Jobs\\Discord\\ReportJob;\nuse App\\Services\\Report\\WeeklyReportService;\nuse Illuminate\\Console\\Command;\n\nclass Weekly extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'report:weekly {--days=7}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Generate a new weekly report';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(WeeklyReportService $service): void\n    {\n        $days = (int) $this->option('days');\n\n        // Ex: Feb 10-16, 2026\n        $period = now()->subDays($days)->format('M j') . '-' . now()->format('j, Y');\n\n        $current = $service->getStats(now()->subDays($days), now());\n        $previous = $service->getStats(now()->subDays($days * 2), now()->subDays($days));\n\n        $title = \"**{$service->name()}** - $period\";\n\n        $this->info($title);\n        $this->info(str_repeat('=', 60));\n        $this->newLine();\n\n        foreach ($service->buildTerminalLines($current, $previous) as $line) {\n            $this->line($line);\n        }\n\n        ReportJob::dispatch($title, $service->buildDiscordBody($current, $previous));\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/SetupMeilisearch.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse App\\Models\\Attribute;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\QuestElement;\nuse App\\Models\\TimelineElement;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Number;\nuse Meilisearch\\Client;\n\nclass SetupMeilisearch extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'setup:meilisearch\n        {--c|chunk= : The number of records to import at a time (Defaults to configuration value: `scout.chunk.searchable`)}\n    ';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Setup meilisearch';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        if (config('app.lazy')) {\n            $this->error('Config error:');\n            $this->error('Temporarily remove APP_LAZY=true from your .env file.');\n\n            return;\n        }\n\n        // Update Non Separator Tokens for entity mentions\n        $start = Carbon::now();\n        $this->info('Meilisearch import started at ' . date('H:i:s'));\n        $client = new Client(config('scout.meilisearch.host'), config('scout.meilisearch.key'));\n        $client->getKeys();\n        $client->deleteIndex('entities');\n        $client->index('entities')->resetSeparatorTokens();\n        $client->index('entities')->updateNonSeparatorTokens([':']);\n        $client->index('entities')->updateFilterableAttributes(['campaign_id']);\n\n        $models = [\n            Attribute::class,\n            Entity::class,\n            Post::class,\n            QuestElement::class,\n            TimelineElement::class,\n        ];\n        foreach ($models as $model) {\n            $time = Carbon::now();\n            $object = new $model;\n            $this->info('Importing ' . Number::format($object->count()) . ' [' . $model . '] at ' . date('H:i:s'));\n            $object::makeAllSearchable($this->option('chunk'));\n            $this->info('- Done in ' . round($time->diffInMinutes(), 4) . ' min');\n            Log::info('Meilisearch', ['model' => $model]);\n        }\n        $this->info('Ended at ' . date('H:i:s') . ' after ' . round($start->diffInMinutes(), 3) . ' min');\n\n        if (config('scout.queue')) {\n            $this->newLine();\n            $this->warn('Meilisearch seeding has been queued.');\n            $this->warn('Now run `sail artisan queue:work` to finish importing.');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/SubscriptionEndPaypalFix.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse App\\Jobs\\SubscriptionEndJob;\nuse App\\Models\\User;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\nuse Laravel\\Cashier\\Subscription;\n\nclass SubscriptionEndPaypalFix extends Command\n{\n    protected $signature = 'subscriptions:end-paypal-fix\n                            {--dry-run : List affected users without dispatching jobs}';\n\n    protected $description = 'One-time fix: dispatch SubscriptionEndJob for users with expired PayPal subs that still have an active pledge';\n\n    public function handle(): int\n    {\n        $subscriptions = Subscription::with('user')\n            ->where('stripe_price', 'like', 'paypal_%')\n            ->where('stripe_status', 'canceled')\n            ->where('ends_at', '<', now())\n            ->whereHas('user', fn ($q) => $q->whereNotNull('pledge')->where('pledge', '<>', ''))\n            ->whereNotExists(function ($sub) {\n                $sub->select(DB::raw(1))\n                    ->from('subscriptions as s2')\n                    ->whereColumn('s2.user_id', 'subscriptions.user_id')\n                    ->whereColumn('s2.id', '<>', 'subscriptions.id')\n                    ->whereColumn('s2.created_at', '>', 'subscriptions.ends_at');\n            })\n            ->get();\n\n        $count = $subscriptions->count();\n        $this->info(\"Found {$count} affected users.\");\n\n        if ($count === 0) {\n            return self::SUCCESS;\n        }\n\n        if ($this->option('dry-run')) {\n            $this->table(\n                ['User ID', 'Name', 'Email', 'Pledge', 'Ended At'],\n                $subscriptions->map(fn (Subscription $sub) => [\n                    $sub->user->id,\n                    $sub->user->name,\n                    $sub->user->email,\n                    $sub->user->pledge,\n                    $sub->ends_at,\n                ])\n            );\n\n            return self::SUCCESS;\n        }\n\n        foreach ($subscriptions as $subscription) {\n            /** @var User $user */\n            $user = $subscription->user;\n            SubscriptionEndJob::dispatch($user);\n            $this->line(\"Dispatched for user {$user->id} ({$user->name})\");\n        }\n\n        $this->info(\"Dispatched {$count} jobs.\");\n\n        return self::SUCCESS;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Subscriptions/EndFreeTrials.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Subscriptions;\n\nuse App\\Services\\Subscription\\FreeTrialEndService;\nuse App\\Traits\\HasJobLog;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\n\nclass EndFreeTrials extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'subscriptions:end-free-trials';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'End free trials';\n\n    public function __construct(protected FreeTrialEndService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $count = $this->service->run();\n        // $this->info(Carbon::now()->subMinute()->startOfMinute() . ' and ' . Carbon::now()->subMinute()->endOfMinute());\n        $log = 'Ended ' . $count . ' free trials.';\n        $this->info($log);\n        $this->log($log . ' ' . implode(',', $this->service->ids()));\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Subscriptions/EndSubscriptions.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Subscriptions;\n\nuse App\\Services\\Subscription\\SubscriptionEndService;\nuse App\\Traits\\HasJobLog;\nuse Illuminate\\Console\\Command;\n\nclass EndSubscriptions extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'subscriptions:end {fake=false}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'End custom subscriptions (sofort) that have expired';\n\n    public function __construct(protected SubscriptionEndService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $fake = $this->argument('fake');\n\n        $count = $this->service->run($fake === 'false');\n        $log = 'Ended ' . $count . ' subscriptions.';\n        $this->info($log);\n        $this->log($log . ' ' . implode(', ', $this->service->ids()));\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Subscriptions/ExpiringCardCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Subscriptions;\n\nuse App\\Jobs\\Emails\\Subscriptions\\ExpiringCardAlert;\nuse App\\Models\\User;\nuse App\\Traits\\HasJobLog;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\n\nclass ExpiringCardCommand extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'subscriptions:expiring-card';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Alert subscribers who have an old card set up in their settings';\n\n    /** @var int Number of alerts sent */\n    protected int $count = 0;\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $now = Carbon::now()->endOfMonth();\n        $log = \"Looking for cards expiring on {$now->format('Y-m-d')}\";\n        $this->info($log);\n\n        User::where('card_expires_at', $now)\n            ->with('subscriptions')\n            ->chunk(100, function ($users): void {\n                foreach ($users as $user) {\n                    $this->notify($user);\n                }\n            });\n\n        $this->info('Alerted ' . $this->count . ' subscribers.');\n        $log .= '<br />' . 'Alerted ' . $this->count . ' subscribers.';\n\n        $this->log($log);\n\n        return 0;\n    }\n\n    protected function notify(User $user): void\n    {\n        // Check the user has a card\n        if (! $user->subscribed('kanka')) {\n            // Has a card but isn't subbed, ignore\n            $this->warn('Expired card but unsubbed user');\n\n            return;\n        }\n\n        // Notify the user about their soon expiring card\n        ExpiringCardAlert::dispatch($user);\n        $this->count++;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Subscriptions/PaypalExpiringCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Subscriptions;\n\nuse App\\Jobs\\Emails\\Subscriptions\\PaypalExpiringAlert;\nuse App\\Models\\User;\nuse App\\Traits\\HasJobLog;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\n\nclass PaypalExpiringCommand extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'subscriptions:paypal-expiring';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Alert PayPal subscribers whose subscription expires in 14 days';\n\n    /** @var int Number of alerts sent */\n    protected int $count = 0;\n\n    public function handle(): int\n    {\n        $target = Carbon::now()->addDays(14)->toDateString();\n        $log = \"Looking for PayPal subscriptions expiring on {$target}\";\n        $this->info($log);\n\n        User::whereHas('subscriptions', function ($query) use ($target): void {\n            $query->where('stripe_price', 'like', 'paypal_%')\n                ->whereDate('ends_at', $target);\n        })\n            ->chunk(100, function ($users): void {\n                foreach ($users as $user) {\n                    $this->notify($user);\n                }\n            });\n\n        $this->info('Alerted ' . $this->count . ' subscribers.');\n        $log .= '<br />' . 'Alerted ' . $this->count . ' subscribers.';\n\n        $this->log($log);\n\n        return 0;\n    }\n\n    protected function notify(User $user): void\n    {\n        if (! $user->subscribed('kanka')) {\n            return;\n        }\n\n        PaypalExpiringAlert::dispatch($user);\n        $this->count++;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Subscriptions/SubCleanupCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Subscriptions;\n\nuse App\\Jobs\\SubscriptionEndJob;\nuse App\\Models\\User;\nuse Illuminate\\Console\\Command;\n\nclass SubCleanupCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'subscriptions:cleanup {user}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Cleanup the sub';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $userID = $this->argument('user');\n\n        /** @var User $user */\n        $user = User::findOrFail($userID);\n\n        SubscriptionEndJob::dispatch($user);\n\n        $this->info('Sub cleaned up for user ' . $user->name . '#' . $user->id . '.');\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Tests/Mailerlite.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Tests;\n\nuse App\\Models\\User;\nuse App\\Services\\NewsletterService;\nuse Illuminate\\Console\\Command;\n\nclass Mailerlite extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'test:mailerlite';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Test the mailerlite integration';\n\n    public function __construct(protected NewsletterService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $user = User::findorFail(13);\n\n        if ($this->service->user($user)->isSubscribed()) {\n            $this->service->remove();\n        } else {\n            $options = [\n                'releases' => (bool) $user->mail_release,\n            ];\n\n            $this->service->update($options);\n        }\n\n        return Command::SUCCESS;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Tests/SendNotification.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Tests;\n\nuse App\\Models\\User;\nuse App\\Notifications\\Header;\nuse Illuminate\\Console\\Command;\n\nclass SendNotification extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'test:notify {user=1} {url=0}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Send a test notification';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $userID = $this->argument('user');\n        $url = $this->argument('url');\n\n        if ($url !== '0') {\n            $url = config('app.url') . '/pricing';\n        }\n\n        /** @var User $user */\n        $user = User::findOrFail($userID);\n        $user->notify(new Header('campaign.application.approved', 'download', 'info', ['link' => $url, 'campaign' => 'Fun & Games']));\n\n        $this->info('User ' . $user->name . '#' . $user->id . ' notified.');\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Tests/SignImageCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Tests;\n\nuse App\\Facades\\Img;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Str;\n\nclass SignImageCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     *\n     * @example php artisan img:sign images/tiers/xxx-325.png app 200\n     * @example php artisan img:sign locations/xxx.png user 200x304\n     * @example php artisan img:sign images/features/kanka-feature-dashboard.jpg app\n     */\n    protected $signature = 'img:sign {img} {base=user} {size=200}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Sign an image for thumbor';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $img = $this->argument('img');\n        $base = $this->argument('base');\n        $width = $height = $this->argument('size');\n        if (Str::contains($width, 'x')) {\n            $full = $width;\n            $width = Str::before($full, 'x');\n            $height = Str::after($full, 'x');\n        }\n        $width = (int) $width;\n        $height = (int) $height;\n\n        if (! empty($height)) {\n            $url = Img::console()->base($base)->crop($width, $height)->url($img);\n        } else {\n            $url = Img::console()->base($base)->url($img);\n        }\n\n        $this->info(\"Base: {$base}\");\n        $this->info(\"Size: {$width} x {$height}\");\n        $this->info('' . $url);\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Tests/TestEmail.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Tests;\n\nuse App\\Events\\FeatureCreated;\nuse App\\Jobs\\Emails\\Purge\\FirstWarningJob;\nuse App\\Jobs\\Emails\\Purge\\SecondWarningJob;\nuse App\\Jobs\\Emails\\SubscriptionCancelEmailJob;\nuse App\\Jobs\\Emails\\SubscriptionDowngradedEmailJob;\nuse App\\Jobs\\Emails\\SubscriptionFailedEmailJob;\nuse App\\Jobs\\Emails\\Subscriptions\\ExpiringCardAlert;\nuse App\\Jobs\\Emails\\Subscriptions\\UpcomingYearlyAlert;\nuse App\\Jobs\\Emails\\Subscriptions\\WelcomeSubscriptionEmailJob;\nuse App\\Jobs\\Emails\\WelcomeEmailJob;\nuse App\\Jobs\\Users\\NewPassword;\nuse App\\Models\\Feature;\nuse App\\Models\\Tier;\nuse App\\Models\\User;\nuse Illuminate\\Console\\Command;\n\nclass TestEmail extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'test:email {user} {template=welcome}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Send a test email to a user';\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $userId = $this->argument('user');\n        $user = User::findOrFail($userId);\n\n        $template = $this->argument('template');\n        if ($template === 'welcome') {\n            WelcomeEmailJob::dispatch($user, 'en');\n        } elseif ($template === 'cancelled') {\n            SubscriptionCancelEmailJob::dispatch($user, null, 'custom text');\n        } elseif ($template === 'downgrade') {\n            SubscriptionDowngradedEmailJob::dispatch($user);\n        } elseif ($template === 'elemental') {\n            WelcomeSubscriptionEmailJob::dispatch($user, Tier::where('name', 'elemental')->first());\n        } elseif ($template === 'wyvern') {\n            WelcomeSubscriptionEmailJob::dispatch($user, Tier::where('name', 'wyvern')->first());\n        } elseif ($template === 'owlbear') {\n            WelcomeSubscriptionEmailJob::dispatch($user, Tier::where('name', 'owlbear')->first());\n        } elseif ($template === 'expiring') {\n            ExpiringCardAlert::dispatch($user);\n        } elseif ($template === 'failed') {\n            SubscriptionFailedEmailJob::dispatch($user);\n        } elseif ($template === 'upcoming') {\n            UpcomingYearlyAlert::dispatch($user);\n        } elseif ($template === 'password') {\n            NewPassword::dispatch($user);\n        } elseif ($template === 'first') {\n            FirstWarningJob::dispatch($user->id);\n        } elseif ($template === 'second') {\n            SecondWarningJob::dispatch($user->id);\n        } elseif ($template === 'feature') {\n            $feature = Feature::latest()->first();\n            FeatureCreated::dispatch($feature);\n        } else {\n            $this->warn('Unknown template ' . $template);\n        }\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Tests/TestWhiteboards.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Tests;\n\nuse App\\Events\\WhiteboardUpdated;\nuse Illuminate\\Console\\Command;\n\nclass TestWhiteboards extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'test:whiteboards {id}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Send a websocket test event to a given whiteboard ID';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $id = (int) $this->argument('id');\n\n        broadcast(new WhiteboardUpdated($id, [\n            'test' => true,\n            'message' => \"Test event sent to whiteboard {$id}\",\n        ]));\n\n        $this->info(\"Broadcasted test event to whiteboard.{$id}\");\n\n        return Command::SUCCESS;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Translations/Missing.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Translations;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass Missing extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'translations:missing {locale : The target locale to find missing translations for}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Export missing translations for a given locale.';\n\n    protected string $prompt;\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(): void\n    {\n        $locale = $this->argument('locale');\n\n        $this->prompt = '';\n\n        $translations = DB::select(\n            \"select * from ltm_translations where locale = 'en' and not exists(select t.* from ltm_translations as t where t.locale = ? and t.group = ltm_translations.group and t.key = ltm_translations.key) order by ltm_translations.group ASC, ltm_translations.key ASC\",\n            [$locale]\n        );\n\n        $groups = [];\n        foreach ($translations as $translation) {\n            if (! isset($groups[$translation->group])) {\n                $groups[$translation->group] = [];\n                $this->prompt .= \"\\n#\" . $translation->group . \"\\n\";\n            }\n            $this->prompt .= ' - ' . $translation->value . \"\\n\";\n        }\n        $this->info($this->prompt);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Users/OfferFreeTrial.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Users;\n\nuse App\\Services\\Users\\OfferTrialService;\nuse App\\Traits\\HasJobLog;\nuse Illuminate\\Console\\Command;\n\nclass OfferFreeTrial extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'users:trial';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Offer a free trial to some users';\n\n    public function __construct(protected OfferTrialService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $count = $this->service->run();\n        $log = 'Offered free trial to ' . $count . ' users.';\n        $this->info($log);\n        $this->log($log . ' ' . implode(',', $this->service->ids()));\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Users/RegenerateDiscordToken.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Users;\n\nuse App\\Jobs\\Users\\UnsyncDiscord;\nuse App\\Models\\UserApp;\nuse App\\Services\\DiscordService;\nuse App\\Traits\\HasJobLog;\nuse Carbon\\Carbon;\nuse GuzzleHttp\\Exception\\ClientException;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Str;\n\nclass RegenerateDiscordToken extends Command\n{\n    use HasJobLog;\n\n    /**\n     * The name and signature of the console command.\n     */\n    protected $signature = 'users:renew-discord-tokens';\n\n    /**\n     * The console command description.\n     */\n    protected $description = 'Renew a user\\'s discord api token.';\n\n    public function __construct(protected DiscordService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $tokens = UserApp::select(['id', 'user_id', 'access_token', 'refresh_token', 'expires_at', 'updated_at', 'settings'])\n            ->with('user')\n            ->where('app', '=', 'discord')\n            ->where('expires_at', '<=', Carbon::now()->toDateString())\n            ->get();\n\n        if ($tokens->count() === 0) {\n            $this->error('No tokens to renew');\n\n            return 0;\n        }\n\n        $count = 0;\n        foreach ($tokens as $token) {\n            try {\n                $this->service->app($token)->refresh();\n                $count++;\n            } catch (ClientException $e) {\n                if (Str::contains($e->getResponse()->getBody()->getContents(), 'invalid_grant')) {\n                    UnsyncDiscord::dispatch($token);\n                }\n            } catch (\\Exception $e) {\n                report($e);\n                // Silence errors and ignore\n            }\n        }\n\n        $log = 'Renewed ' . $count . ' tokens.';\n        $this->info($log);\n        $this->log($log . ' ' . implode(',', $this->service->ids()));\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Users/ResetUserPassword.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Users;\n\nuse App\\Enums\\UserAction;\nuse App\\Models\\User;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Str;\n\nclass ResetUserPassword extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'users:reset-password {user} {password=auto}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Reset a user password';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $userID = $this->argument('user');\n        $user = User::find($userID);\n        if (empty($user)) {\n            $this->error('Invalid user id ' . $userID);\n\n            return 0;\n        }\n\n        $password = $this->argument('password');\n        if ($password == 'auto') {\n            $password = Str::random();\n        }\n\n        $hash = Hash::make($password);\n        $user->update(['password' => $hash]);\n        $user->log(UserAction::passwordAdminUpdate);\n\n        $this->info('User ' . $userID . ' updated to new password ' . $password);\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/Users/SyncUserRoles.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands\\Users;\n\nuse App\\Models\\User;\nuse App\\Services\\DiscordService;\nuse Illuminate\\Console\\Command;\n\nclass SyncUserRoles extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'users:sync-discord {user}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Sync a user\\'s discord roles.';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct(protected DiscordService $service)\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $userID = $this->argument('user');\n\n        /** @var User $user */\n        $user = User::find($userID);\n\n        if ($user->apps()->app('discord')->count() === 0) {\n            $this->error('User has no discord sync.');\n\n            return 0;\n        }\n\n        $this->service->user($user)\n            ->addRoles();\n\n        $logs = $this->service->logs();\n        foreach ($logs as $log) {\n            $this->info($log);\n        }\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/VerifyParentIds.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass VerifyParentIds extends Command\n{\n    protected $signature = 'parent:verify';\n\n    protected $description = 'Report mismatches between child table parent keys and entities.parent_id';\n\n    public function handle(): int\n    {\n        $models = [\n            'abilities' => ['key' => 'ability_id',            'type_id' => config('entities.ids.ability')],\n            'attribute_templates' => ['key' => 'attribute_template_id', 'type_id' => config('entities.ids.attribute_template')],\n            'calendars' => ['key' => 'calendar_id',           'type_id' => config('entities.ids.calendar')],\n            'creatures' => ['key' => 'creature_id',           'type_id' => config('entities.ids.creature')],\n            'events' => ['key' => 'event_id',              'type_id' => config('entities.ids.event')],\n            'families' => ['key' => 'family_id',             'type_id' => config('entities.ids.family')],\n            'items' => ['key' => 'item_id',               'type_id' => config('entities.ids.item')],\n            'journals' => ['key' => 'journal_id',            'type_id' => config('entities.ids.journal')],\n            'locations' => ['key' => 'location_id',           'type_id' => config('entities.ids.location')],\n            'maps' => ['key' => 'map_id',                'type_id' => config('entities.ids.map')],\n            'notes' => ['key' => 'note_id',               'type_id' => config('entities.ids.note')],\n            'organisations' => ['key' => 'organisation_id',       'type_id' => config('entities.ids.organisation')],\n            'quests' => ['key' => 'quest_id',              'type_id' => config('entities.ids.quest')],\n            'races' => ['key' => 'race_id',               'type_id' => config('entities.ids.race')],\n            'tags' => ['key' => 'tag_id',                'type_id' => config('entities.ids.tag')],\n            'timelines' => ['key' => 'timeline_id',           'type_id' => config('entities.ids.timeline')],\n        ];\n\n        $totalMismatches = 0;\n\n        foreach ($models as $table => $config) {\n            // Find entities where child has a parent but entities.parent_id doesn't match\n            $mismatches = DB::select(\"\n                SELECT e.id AS entity_id, e.name, e.parent_id AS entity_parent_id,\n                       c.{$config['key']} AS child_parent_id,\n                       parent_entity.id AS expected_parent_id\n                FROM entities e\n                JOIN {$table} c ON e.entity_id = c.id AND e.type_id = {$config['type_id']}\n                LEFT JOIN entities parent_entity ON parent_entity.entity_id = c.{$config['key']}\n                    AND parent_entity.type_id = {$config['type_id']}\n                WHERE (\n                    (c.{$config['key']} IS NOT NULL AND (e.parent_id IS NULL OR e.parent_id != parent_entity.id))\n                    OR (c.{$config['key']} IS NULL AND e.parent_id IS NOT NULL)\n                )\n                AND e.deleted_at IS NULL\n            \");\n\n            if (count($mismatches) > 0) {\n                $this->warn(\"{$table}: \" . count($mismatches) . ' mismatches');\n                foreach ($mismatches as $row) {\n                    $this->line(\"  Entity #{$row->entity_id} ({$row->name}): entity.parent_id={$row->entity_parent_id}, child.{$config['key']}={$row->child_parent_id}, expected={$row->expected_parent_id}\");\n                }\n                $totalMismatches += count($mismatches);\n            } else {\n                $this->info(\"{$table}: OK\");\n            }\n        }\n\n        if ($totalMismatches === 0) {\n            $this->info('All parent IDs are in sync.');\n\n            return self::SUCCESS;\n        }\n\n        $this->error(\"Total mismatches: {$totalMismatches}\");\n\n        return self::FAILURE;\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/WordCount.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse App\\Models\\CharacterTrait;\nuse App\\Models\\Entity;\nuse App\\Models\\MapLayer;\nuse App\\Models\\MapMarker;\nuse App\\Models\\Post;\nuse App\\Models\\QuestElement;\nuse App\\Models\\TimelineElement;\nuse App\\Models\\TimelineEra;\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass WordCount extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'app:word-count';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Count the words in every entity';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n\n        $start = Carbon::now();\n        $this->info('Started at ' . date('H:i:s'));\n\n        $this->process(Entity::class);\n        $this->process(Post::class);\n        $this->process(TimelineElement::class);\n        $this->process(TimelineEra::class);\n        $this->process(QuestElement::class);\n        $this->process(MapMarker::class);\n        $this->process(MapLayer::class);\n        $this->process(CharacterTrait::class);\n        $this->info('Ended at ' . date('H:i:s') . ' after ' . round($start->diffInMinutes(), 3) . ' min');\n    }\n\n    protected function process(string $className, string $field = 'entry')\n    {\n        $model = app()->make($className);\n        $table = $model->getTable();\n\n        // DB::statement('UPDATE ' . $model->getTable() . ' SET words = null');\n        $this->info($className);\n        $total = $model::whereNull('words')->whereNotNull($field)->count();\n        $progressBar = $this->output->createProgressBar($total);\n\n        $batchSize = 5000;\n        $processed = 0;\n\n        do {\n            // Process in batches using LIMIT/OFFSET or better yet, use a cursor approach\n            $updated = DB::table($table)\n                ->whereNotNull($field)\n                ->whereNull('words')\n                ->limit($batchSize)\n                ->update([\n                    'words' => DB::raw(\"\n                    CASE\n                        WHEN TRIM(REGEXP_REPLACE($field, '<[^>]*>', '')) = '' THEN 0\n                        ELSE (\n                            LENGTH(TRIM(REGEXP_REPLACE($field, '<[^>]*>', ''))) -\n                            LENGTH(REPLACE(TRIM(REGEXP_REPLACE($field, '<[^>]*>', '')), ' ', '')) + 1\n                        )\n                    END\n                \"),\n                ]);\n\n            $processed += $updated;\n            $progressBar->advance($updated);\n\n            // Small delay to prevent overwhelming the database\n            usleep(10000); // 10ms delay\n\n        } while ($updated > 0);\n\n        $progressBar->finish();\n        $this->newLine();\n\n        $this->info(\"Processed {$processed} records total\");\n\n    }\n}\n"
  },
  {
    "path": "app/Console/Kernel.php",
    "content": "<?php\n\nnamespace App\\Console;\n\nuse App\\Console\\Commands\\Campaigns\\VisibileEntityCountCommand;\nuse App\\Console\\Commands\\Cleanup\\AnonymiseUserLogs;\nuse App\\Console\\Commands\\Cleanup\\CleanupEntityLogs;\nuse App\\Console\\Commands\\Cleanup\\CleanupTrashed;\nuse App\\Console\\Commands\\Cleanup\\CleanupTrashedCampaigns;\nuse App\\Console\\Commands\\Cleanup\\CleanupUsers;\nuse App\\Console\\Commands\\Entities\\CalendarAdvancer;\nuse App\\Console\\Commands\\Report\\Accounts;\nuse App\\Console\\Commands\\Report\\Churn;\nuse App\\Console\\Commands\\Report\\Onboarding;\nuse App\\Console\\Commands\\Report\\Weekly;\nuse App\\Console\\Commands\\Subscriptions\\EndFreeTrials;\nuse App\\Console\\Commands\\Subscriptions\\EndSubscriptions;\nuse App\\Console\\Commands\\Subscriptions\\ExpiringCardCommand;\nuse App\\Console\\Commands\\Subscriptions\\PaypalExpiringCommand;\nuse App\\Console\\Commands\\Users\\RegenerateDiscordToken;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\n\nclass Kernel extends ConsoleKernel\n{\n    /**\n     * The Artisan commands provided by your application.\n     *\n     * @var array\n     */\n    protected $commands = [\n\n    ];\n\n    /**\n     * Define the application's command schedule.\n     */\n    protected function schedule(Schedule $schedule): void\n    {\n        $schedule->command(ExpiringCardCommand::class)->onOneServer()->monthly();\n        $schedule->command('model:prune')->onOneServer()->daily();\n        $schedule->command(CalendarAdvancer::class)->onOneServer()->daily();\n        $schedule->command(AnonymiseUserLogs::class)->onOneServer()->daily();\n        $schedule->command(EndSubscriptions::class)->onOneServer()->dailyAt('00:05')->sentryMonitor();\n        $schedule->command(EndFreeTrials::class)->onOneServer()->dailyAt('00:01');\n        $schedule->command(PaypalExpiringCommand::class)->onOneServer()->dailyAt('06:30');\n        $schedule->command(RegenerateDiscordToken::class)->onOneServer()->dailyAt('00:15');\n        $schedule->command(VisibileEntityCountCommand::class)->onOneServer()->dailyAt('01:00');\n        $schedule->command(CleanupTrashed::class)->onOneServer()->dailyAt('01:15');\n        $schedule->command('backup:clean')->onOneServer()->dailyAt('01:20');\n        $schedule->command(CleanupEntityLogs::class)->onOneServer()->dailyAt('01:30');\n        $schedule->command(CleanupTrashedCampaigns::class)->onOneServer()->dailyAt('01:45');\n        // $schedule->command(CleanupUsers::class)->onOneServer()->dailyAt('01:50');\n        $schedule->command('backup:run')->onOneServer()->twiceDaily(2, 14);\n\n        $schedule->command(Onboarding::class)->onOneServer()->weekly();\n        $schedule->command(Churn::class)->onOneServer()->weekly();\n        // $schedule->command(Accounts::class)->onOneServer()->weekly();\n        $schedule->command(Weekly::class)->onOneServer()->weekly();\n\n        // $schedule->command('backup:monitor')->daily()->at('03:00');\n\n    }\n\n    /**\n     * Register the commands for the application.\n     */\n    protected function commands(): void\n    {\n        $this->load(__DIR__ . '/Commands');\n\n        require base_path('routes/console.php');\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Actions/BookmarkDatagridActions.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Actions;\n\n/**\n * Menu links aren't real entities, meaning that they don't get a lot of actions\n */\nclass BookmarkDatagridActions extends DatagridActions\n{\n    public $bulkPermissions = false;\n\n    public $bulkCopyToCampaign = false;\n\n    public $bulkTransform = false;\n\n    public $bulkPrint = false;\n\n    public $bulkTemplate = false;\n}\n"
  },
  {
    "path": "app/Datagrids/Actions/DatagridActions.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Actions;\n\n/**\n * Datagrids\n *\n * This abstract class controls parameters that are available to the datagrid bulk actions.\n * For example, to disable the bulk setting of permissions, set $bulkPermissions to false.\n * You can also add custom fields in the bulk delete modal by then testing on\n */\nabstract class DatagridActions\n{\n    /** @var bool */\n    public $bulkPermissions = true;\n\n    /** @var bool */\n    public $bulkCopyToCampaign = true;\n\n    /** @var bool */\n    public $bulkTransform = true;\n\n    /** @var bool */\n    public $bulkPrint = true;\n\n    /** @var bool */\n    public $bulkTemplate = true;\n\n    /** @var bool */\n    public $bulkEditing = true;\n\n    /**\n     * Determine if the datagrid has bulk permissions.\n     */\n    public function hasBulkPermissions(): bool\n    {\n        return $this->bulkPermissions;\n    }\n\n    /**\n     * Determine if the datagrid has bulk permissions.\n     */\n    public function hasBulkEditing(): bool\n    {\n        return $this->bulkEditing;\n    }\n\n    /**\n     * Determine if the datagrid has bulk copy to campaign.\n     */\n    public function hasBulkCopy(): bool\n    {\n        return $this->bulkCopyToCampaign;\n    }\n\n    /**\n     * Determine if the datagrid has bulk transforming entities.\n     */\n    public function hasBulkTransform(): bool\n    {\n        return $this->bulkTransform;\n    }\n\n    /**\n     * Determine if the datagrid has bulk transforming entities.\n     */\n    public function hasBulkTemplate(): bool\n    {\n        return $this->bulkTemplate;\n    }\n\n    /**\n     * Determine if the datagrid has bulk entity printing.\n     */\n    public function hasBulkPrint(): bool\n    {\n        return $this->bulkPrint;\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Actions/DefaultDatagridActions.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Actions;\n\n/**\n * By default, allow all datagrid actions\n */\nclass DefaultDatagridActions extends DatagridActions {}\n"
  },
  {
    "path": "app/Datagrids/Actions/DeprecatedDatagridActions.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Actions;\n\n/**\n * For conversations, we don't want to bulk copy them to other campaigns, nor transform\n * them into other entity types.\n */\nclass DeprecatedDatagridActions extends DatagridActions\n{\n    public $bulkCopyToCampaign = false;\n\n    public $bulkTransform = false;\n}\n"
  },
  {
    "path": "app/Datagrids/Actions/HistoryActions.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Actions;\n\n/**\n * Relations heavily restrict options because they aren't entities.\n */\nclass HistoryActions extends DatagridActions\n{\n    public $bulkPermissions = false;\n\n    public $bulkCopyToCampaign = false;\n\n    public $bulkPrint = false;\n\n    public $bulkTransform = false;\n\n    public $bulkTemplate = false;\n}\n"
  },
  {
    "path": "app/Datagrids/Actions/NoDatagridActions.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Actions;\n\n/**\n * Catch all datagrid that disabled everything.\n * Used by dice results interface\n */\nclass NoDatagridActions extends DatagridActions\n{\n    public $bulkCopyToCampaign = false;\n\n    public $bulkTransform = false;\n\n    public $bulkPermissions = false;\n\n    public $bulkPrint = false;\n\n    public $bulkEditing = false;\n}\n"
  },
  {
    "path": "app/Datagrids/Actions/RelationDatagridActions.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Actions;\n\n/**\n * Relations heavily restrict options because they aren't entities.\n */\nclass RelationDatagridActions extends DatagridActions\n{\n    public $bulkPermissions = false;\n\n    public $bulkCopyToCampaign = false;\n\n    public $bulkPrint = false;\n\n    public $bulkTransform = false;\n\n    public $bulkTemplate = false;\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/AbilityBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass AbilityBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/AttributeTemplateBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass AttributeTemplateBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        // 'attribute_template_id',\n        // 'tags',\n        'parent_id',\n        'entity_type_id',\n        'private_choice',\n        'enabled_choice',\n        'entity_image',\n        'entity_header',\n    ];\n\n    protected array $booleans = [\n        'is_enabled',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/BookmarkBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass BookmarkBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'icon',\n        // 'position',\n        'private_choice',\n        'is_active',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/Bulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\n/**\n * Class Bulk\n *\n * This abstract class allows each sub object to define which fields are available in the\n * bulk edit interface from the main entity type's datagrid.\n */\nabstract class Bulk\n{\n    /**\n     * The fields available for bulk edit, fallsback to a set of defaults\n     */\n    public function fields(): array\n    {\n        if (isset($this->fields)) {\n            return $this->fields;\n        }\n\n        return $this->defaults();\n    }\n\n    /**\n     * The mapping, used for is_/has_ fields to be able to unset a value. For example a character's is_dead status\n     */\n    public function booleans(): array\n    {\n        if (isset($this->booleans)) {\n            return $this->booleans;\n        }\n\n        return [];\n    }\n\n    /**\n     * The list of fields that are foreign fields, to be able to properly unset(detach) them if needed\n     */\n    public function foreignRelations(): array\n    {\n        if (isset($this->foreignRelations)) {\n            return $this->foreignRelations;\n        }\n\n        return [];\n    }\n\n    /**\n     * Attributes that can support basic math\n     */\n    public function maths(): array\n    {\n        if (isset($this->maths)) {\n            return $this->maths;\n        }\n\n        return [];\n    }\n\n    /**\n     * Default fields that are available in the bulk edit interface if no other are defined.\n     */\n    protected function defaults(): array\n    {\n        return [\n            'name',\n            'type',\n            'tags',\n            'private_choice',\n            'entity_image',\n            'entity_header',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/CalendarBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass CalendarBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'tags',\n        'private_choice',\n        'format',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/CharacterBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass CharacterBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'title',\n        'families',\n        'entity_locations',\n        'races',\n        'type',\n        'sex',\n        'status_id',\n        'age',\n        'organisations',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n\n    protected array $maths = [\n        'age',\n    ];\n\n    protected array $foreignRelations = [\n        'races',\n        'families',\n        'organisations',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/ConversationBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass ConversationBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/CreatureBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass CreatureBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'locations',\n        'status_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/DefaultBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\n/**\n * Class DefaultBulk\n */\nclass DefaultBulk extends Bulk {}\n"
  },
  {
    "path": "app/Datagrids/Bulks/DiceRollBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass DiceRollBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'character_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/EntityBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass EntityBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'locations',\n        'status_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/EventBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass EventBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'entity_locations',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/FamilyBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass FamilyBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'location_id',\n        'status_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/ItemBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass ItemBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'price',\n        'size',\n        'weight',\n        'parent_id',\n        'location_id',\n        'creators',\n        'status_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/JournalBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass JournalBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'author_id',\n        'date',\n        'location_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/LocationBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass LocationBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'title',\n        'type',\n        'status_id',\n        'parent_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/MapBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass MapBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'location_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/NoteBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass NoteBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/OrganisationBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass OrganisationBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'locations',\n        'status_id',\n        'parent_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/QuestBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass QuestBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'instigator_id',\n        'date',\n        'locations',\n        'status_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/RaceBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass RaceBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'locations',\n        'status_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/RelationBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass RelationBulk extends Bulk\n{\n    protected array $fields = [\n        'owner_id',\n        'target_id',\n        'relation',\n        'attitude',\n        'colour_picker',\n        'pinned_choice',\n        'visibility_id',\n        'update_mirrored',\n        'unmirror',\n    ];\n\n    protected array $booleans = [\n        'colour',\n        'is_pinned',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/TagBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass TagBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'colour_picker',\n        'parent_id',\n        'private_choice',\n        'auto_applied_choice',\n        'hide_choice',\n        'tags',\n        'entity_image',\n        'entity_header',\n    ];\n\n    protected array $booleans = [\n        'colour',\n        'is_auto_applied',\n        'is_hidden',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Bulks/TimelineBulk.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Bulks;\n\nclass TimelineBulk extends Bulk\n{\n    protected array $fields = [\n        'name',\n        'type',\n        'parent_id',\n        'tags',\n        'private_choice',\n        'entity_image',\n        'entity_header',\n    ];\n}\n"
  },
  {
    "path": "app/Datagrids/Datagrid.php",
    "content": "<?php\n\nnamespace App\\Datagrids;\n\n/**\n * Datagrids\n *\n * This abstract class controls parameters that are available to the datagrid bulk actions.\n * For example, to disable the bulk setting of permissions, set $bulkPermissions to false.\n * You can also add custom fields in the bulk delete modal by then testing on\n */\nabstract class Datagrid\n{\n    /** The entities can have permissions applied to them */\n    public bool $bulkPermissions = true;\n\n    /** The entities can be copied to other campaigns */\n    public bool $bulkCopyToCampaign = true;\n\n    /** The entities can be transformed */\n    public bool $bulkTransform = true;\n\n    /** The entities can be printed */\n    public bool $bulkPrint = true;\n\n    /** The entities can have templates applied to them */\n    public bool $bulkTemplate = true;\n\n    /**\n     * Determine if the datagrid has bulk permissions.\n     */\n    public function hasBulkPermissions(): bool\n    {\n        return $this->bulkPermissions;\n    }\n\n    /**\n     * Determine if the datagrid has bulk copy to campaign.\n     */\n    public function hasBulkCopy(): bool\n    {\n        return $this->bulkCopyToCampaign;\n    }\n\n    /**\n     * Determine if the datagrid has bulk transforming entities.\n     */\n    public function hasBulkTransform(): bool\n    {\n        return $this->bulkTransform;\n    }\n\n    /**\n     * Determine if the datagrid has bulk transforming entities.\n     */\n    public function hasBulkTemplate(): bool\n    {\n        return $this->bulkTemplate;\n    }\n\n    /**\n     * Determine if the datagrid has bulk entity printing.\n     */\n    public function hasBulkPrint(): bool\n    {\n        return $this->bulkPrint;\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/AbilityFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass AbilityFilter extends DatagridFilter\n{\n    /**\n     * Filters available for abilities\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.ability'))\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/AttributeTemplateFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass AttributeTemplateFilter extends DatagridFilter\n{\n    /**\n     * Filters available for attribute templates\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->parent(config('entities.ids.attribute_template'))\n            ->add('is_enabled')\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/CalendarFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass CalendarFilter extends DatagridFilter\n{\n    /**\n     * Filters available for calendars\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.calendar'))\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/CharacterFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass CharacterFilter extends DatagridFilter\n{\n    /**\n     * Filters available for characters\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('title')\n            ->families()\n            ->locations()\n            ->races()\n            ->organisations()\n            ->add('type')\n            ->add('age')\n            ->add('sex')\n            ->add('pronouns')\n            ->add('status_id')\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/ConversationFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass ConversationFilter extends DatagridFilter\n{\n    /**\n     * Filters available for conversations\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n//            ->add([\n//                'field' => 'target',\n//                'label' => __('conversations.fields.target'),\n//                'valueKey' => 'conversations.targets.',\n//                'type' => 'select',\n//                'placeholder' =>  __('conversations.placeholders.target'),\n//                'data' => __('conversations.targets')\n//            ])\n            ->add('is_closed')\n            ->isPrivate()\n            ->archived()\n            ->tags();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/CreatureFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass CreatureFilter extends DatagridFilter\n{\n    /**\n     * Filters available for creatures\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.creature'))\n            ->locations()\n            ->add('status_id')\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/CustomEntityFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass CustomEntityFilter extends DatagridFilter\n{\n    /**\n     * Filters available for races\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent($this->entityType->id)\n            ->location()\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/DatagridFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nuse App\\Facades\\Module;\nuse App\\Models\\Character;\nuse App\\Models\\Entity;\nuse App\\Models\\Family;\nuse App\\Models\\Journal;\nuse App\\Models\\Location;\nuse App\\Models\\Organisation;\nuse App\\Models\\Race;\nuse App\\Models\\Tag;\nuse App\\Models\\User;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse Illuminate\\Support\\Facades\\Auth;\n\n/**\n * This abstract class sets up all the stuff needed for rendering filters on entity datagrids.\n * Each entity has a class that extends this class and in the constructor sets the fields available.\n * Filters that are re-used multiple times or have their own rendering logic are added as functions\n * directly on this class.\n */\nabstract class DatagridFilter\n{\n    use CampaignAware;\n    use EntityTypeAware;\n\n    /** @var array Filters to be rendered */\n    protected array $filters = [];\n\n    public function build() {}\n\n    /**\n     * Get the filters\n     */\n    public function filters(): array\n    {\n        return $this->filters;\n    }\n\n    /**\n     * @param  string|array  $name\n     */\n    protected function add($name): self\n    {\n        $this->filters[] = $name;\n\n        return $this;\n    }\n\n    /**\n     * Add the location filters\n     */\n    protected function location(): self\n    {\n        $name = Module::singular(config('entities.ids.location'));\n        $placeholder = __('crud.placeholders.location');\n        if (! empty($name)) {\n            $placeholder = __('crud.placeholders.fallback', ['module' => $name]);\n        }\n        $this->filters[] = [\n            'field' => 'location_id',\n            'label' => Module::singular(config('entities.ids.location'), __('entities.location')),\n            'type' => 'select2',\n            'route' => route('search-list', [$this->campaign, config('entities.ids.location')]),\n            'placeholder' => $placeholder,\n            'model' => Location::class,\n            'withChildren' => true,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the locations filters\n     */\n    protected function locations(): self\n    {\n        $name = Module::plural(config('entities.ids.location'));\n        $placeholder = __('crud.placeholders.search');\n        if (! empty($name)) {\n            $placeholder = __('crud.placeholders.fallback', ['module' => $name]);\n        }\n        $this->filters[] = [\n            'field' => 'locations',\n            'label' => Module::plural(config('entities.ids.location'), __('entities.locations')),\n            'type' => 'selectMultiple',\n            'route' => route('search-list', [$this->campaign, config('entities.ids.location')]),\n            'placeholder' => $placeholder,\n            'model' => Location::class,\n            'multiple' => true,\n            'withChildren' => true,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the races filters\n     */\n    protected function races(): self\n    {\n        $name = Module::plural(config('entities.ids.race'));\n        $placeholder = __('crud.placeholders.search');\n        if (! empty($name)) {\n            $placeholder = __('crud.placeholders.fallback', ['module' => $name]);\n        }\n        $this->filters[] = [\n            'field' => 'races',\n            'label' => Module::plural(config('entities.ids.race'), __('entities.races')),\n            'type' => 'selectMultiple',\n            'route' => route('search-list', [$this->campaign, config('entities.ids.race')]),\n            'placeholder' => $placeholder,\n            'model' => Race::class,\n            'multiple' => true,\n            'withChildren' => true,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the organisations filters\n     */\n    protected function organisations(): self\n    {\n        $name = Module::plural(config('entities.ids.organisation'));\n        $placeholder = __('crud.placeholders.search');\n        if (! empty($name)) {\n            $placeholder = __('crud.placeholders.fallback', ['module' => $name]);\n        }\n        $this->filters[] = [\n            'field' => 'organisations',\n            'label' => Module::plural(config('entities.ids.organisation'), __('entities.organisations')),\n            'type' => 'selectMultiple',\n            'route' => route('search-list', [$this->campaign, config('entities.ids.organisation')]),\n            'placeholder' => $placeholder,\n            'model' => Organisation::class,\n            'multiple' => true,\n            'withChildren' => true,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the families filters\n     */\n    protected function families(): self\n    {\n        $name = Module::plural(config('entities.ids.family'));\n        $placeholder = __('crud.placeholders.search');\n        if (! empty($name)) {\n            $placeholder = __('crud.placeholders.fallback', ['module' => $name]);\n        }\n        $this->filters[] = [\n            'field' => 'families',\n            'label' => Module::plural(config('entities.ids.family'), __('entities.families')),\n            'type' => 'selectMultiple',\n            'route' => route('search-list', [$this->campaign, config('entities.ids.family')]),\n            'placeholder' => $placeholder,\n            'model' => Family::class,\n            'multiple' => true,\n            'withChildren' => true,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the character filters\n     */\n    protected function character(string $field = 'character_id'): self\n    {\n        $name = Module::singular(config('entities.ids.character'));\n        $placeholder = __('crud.placeholders.search');\n        if (! empty($name)) {\n            $placeholder = __('crud.placeholders.fallback', ['module' => $name]);\n        }\n        $this->filters[] = [\n            'field' => $field,\n            'label' => Module::singular(config('entities.ids.character'), __('entities.character')),\n            'type' => 'select2',\n            'route' => route('search-list', [$this->campaign, config('entities.ids.character')]),\n            'placeholder' => $placeholder,\n            'model' => Character::class,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the character filters\n     */\n    protected function journal(): self\n    {\n        $name = Module::singular(config('entities.ids.journal'));\n        $placeholder = __('crud.placeholders.journal');\n        if (! empty($name)) {\n            $placeholder = __('crud.placeholders.fallback', ['module' => $name]);\n        }\n        $this->filters[] = [\n            'field' => 'journal_id',\n            'label' => Module::singular(config('entities.ids.journal'), __('entities.journal')),\n            'type' => 'select2',\n            'route' => route('search-list', [$this->campaign, config('entities.ids.journal')]),\n            'placeholder' => $placeholder,\n            'model' => Journal::class,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the tags filters\n     */\n    protected function tags(): self\n    {\n        $name = Module::singular(config('entities.ids.tag'));\n        $placeholder = __('crud.placeholders.tag');\n        if (! empty($name)) {\n            $placeholder = __('crud.placeholders.fallback', ['module' => $name]);\n        }\n        $this->filters[] = [\n            'field' => 'tags',\n            'label' => Module::plural(config('entities.ids.tag'), __('entities.tags')),\n            'type' => 'tag',\n            'route' => route('search-list', [$this->campaign, config('entities.ids.tag')]),\n            'placeholder' => $placeholder,\n            'model' => Tag::class,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the is_private\n     */\n    protected function isPrivate(): self\n    {\n        // Add the is_private filter only for admins.\n        if (Auth::check() && Auth::user()->isAdmin()) {\n            $this->filters[] = 'is_private';\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add the entity has an image\n     */\n    protected function hasImage(): self\n    {\n        $this->filters[] = 'has_image';\n\n        return $this;\n    }\n\n    /**\n     * Add the entity parent filter as a select2 for the given entity type\n     */\n    protected function parent(int $entityTypeId): self\n    {\n        $this->filters[] = [\n            'field' => 'parent_id',\n            'label' => __('crud.fields.parent'),\n            'type' => 'select2',\n            'route' => route('search-list', [$this->campaign, $entityTypeId, 'entity' => true]),\n            'placeholder' => __('crud.placeholders.search'),\n            'model' => Entity::class,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the entity has posts\n     */\n    protected function hasPosts(): self\n    {\n        $this->filters[] = 'has_posts';\n\n        return $this;\n    }\n\n    /**\n     * Add the entity has entry\n     */\n    protected function hasEntry(): self\n    {\n        $this->filters[] = 'has_entry';\n\n        return $this;\n    }\n\n    /**\n     * Add the entity has attributes\n     */\n    protected function hasAttributes(): self\n    {\n        $this->filters[] = 'has_attributes';\n\n        return $this;\n    }\n\n    /**\n     * Add the has image\n     */\n    protected function hasEntityFiles(): self\n    {\n        $this->filters[] = 'has_entity_files';\n\n        return $this;\n    }\n\n    /**\n     * Add the (real) date filter\n     */\n    protected function date(): self\n    {\n        $this->filters[] = 'date';\n\n        return $this;\n    }\n\n    /**\n     * Add the attributes selector\n     */\n    protected function attributes(): self\n    {\n        $this->filters[] = 'attributes';\n\n        return $this;\n    }\n\n    /**\n     * Add the connection selector\n     */\n    protected function connections(): self\n    {\n        $this->filters[] = 'connections';\n\n        return $this;\n    }\n\n    /**\n     * Add the created by selector\n     */\n    protected function createdBy(): self\n    {\n        $this->filters[] = [\n            'field' => 'created_by',\n            'label' => __('crud.fields.created_by'),\n            'type' => 'select2',\n            'route' => route('find.members', [$this->campaign]),\n            'placeholder' => __('crud.placeholders.user'),\n            'model' => User::class,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the updated by selector\n     */\n    protected function updatedBy(): self\n    {\n        $this->filters[] = [\n            'field' => 'updated_by',\n            'label' => __('crud.fields.updated_by'),\n            'type' => 'select2',\n            'route' => route('find.members', [$this->campaign]),\n            'placeholder' => __('crud.placeholders.user'),\n            'model' => User::class,\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the date range filter\n     */\n    protected function dateRange(): self\n    {\n        $this->filters[] = 'date_range';\n\n        return $this;\n    }\n\n    /**\n     * Add the is template filter\n     */\n    protected function template(): self\n    {\n        $this->filters[] = 'template';\n\n        return $this;\n    }\n\n    /**\n     * Add the is archived filter\n     */\n    protected function archived(): self\n    {\n        $this->filters[] = 'archived';\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/DiceRollFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass DiceRollFilter extends DatagridFilter\n{\n    /**\n     * Filters available for dice rolls\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->character()\n            ->isPrivate()\n            ->archived()\n            ->tags();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/EventFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass EventFilter extends DatagridFilter\n{\n    /**\n     * Filters available for events\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.event'))\n            ->add('date')\n            ->locations()\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/FamilyFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass FamilyFilter extends DatagridFilter\n{\n    /**\n     * Filters available for families\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.family'))\n            ->location()\n            ->character('member_id')\n            ->add('status_id')\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/HistoryFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nuse App\\Models\\Entity;\n\nclass HistoryFilter extends DatagridFilter\n{\n    /**\n     * Filters available for relations\n     */\n    public function build()\n    {\n        $this\n            ->add([\n                'field' => 'entity_id',\n                'label' => __('crud.fields.entity'),\n                'type' => 'select2',\n                'route' => route('search.entities-with-relations', $this->campaign),\n                'placeholder' => __('search.placeholders.entry'),\n                'model' => Entity::class,\n            ])\n            ->add([\n                'field' => 'created_by',\n                'label' => __('crud.permissions.fields.member'),\n                'type' => 'select2',\n                'route' => route('users.find', $this->campaign),\n                'placeholder' => __('crud.permissions.fields.member'),\n                'model' => Entity::class,\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/ItemFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass ItemFilter extends DatagridFilter\n{\n    /**\n     * Filters available for items\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.item'))\n            ->add('price')\n            ->add('size')\n            ->add('weight')\n            ->add('is_equipped')\n            ->location()\n            ->character()\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/JournalFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nuse App\\Models\\Entity;\n\nclass JournalFilter extends DatagridFilter\n{\n    /**\n     * Filters available for journals\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.journal'))\n            ->dateRange()\n            ->add([\n                'field' => 'author_id',\n                'label' => __('journals.fields.author'),\n                'type' => 'select2',\n                'route' => route('search.entities-with-relations', $this->campaign),\n                'placeholder' => __('journals.placeholders.author'),\n                'model' => Entity::class,\n            ])\n            ->location()\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/LocationFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass LocationFilter extends DatagridFilter\n{\n    /**\n     * Filters available for locations\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('title')\n            ->add('type')\n            ->add('status_id')\n            ->parent(config('entities.ids.location'))\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/MapFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass MapFilter extends DatagridFilter\n{\n    /**\n     * Filters available for maps\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.map'))\n            ->location()\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/NoteFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass NoteFilter extends DatagridFilter\n{\n    /**\n     * Filters available for notes\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.note'))\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/OrganisationFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass OrganisationFilter extends DatagridFilter\n{\n    /**\n     * Filters available for organisations\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.organisation'))\n            ->locations()\n            ->character('member_id')\n            ->add('status_id')\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/QuestFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nuse App\\Models\\Entity;\n\nclass QuestFilter extends DatagridFilter\n{\n    /**\n     * Filters available for quests\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->dateRange()\n            ->add('status_id')\n            ->add([\n                'field' => 'instigator_id',\n                'label' => __('quests.fields.instigator'),\n                'type' => 'select2',\n                'route' => route('search.entities-with-relations', $this->campaign),\n                'placeholder' => __('search.placeholders.entry'),\n                'model' => Entity::class,\n            ])\n            ->location()\n            ->parent(config('entities.ids.quest'))\n            ->add([\n                'field' => 'quest_element_id',\n                'label' => __('fields.entry.label'),\n                'type' => 'select2',\n                'route' => route('search.entities-with-relations', $this->campaign),\n                'placeholder' => __('quests.placeholders.entity'),\n                'model' => Entity::class,\n            ])\n            ->add('element_role')\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/RaceFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass RaceFilter extends DatagridFilter\n{\n    /**\n     * Filters available for races\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.race'))\n            ->locations()\n            ->add('status_id')\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/RelationFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nuse App\\Models\\Entity;\n\nclass RelationFilter extends DatagridFilter\n{\n    /**\n     * Filters available for relations\n     */\n    public function build()\n    {\n        $this\n            ->add([\n                'field' => 'owner_id',\n                'label' => __('entities/relations.fields.owner'),\n                'type' => 'select2',\n                'route' => route('search.entities-with-relations', $this->campaign),\n                'placeholder' => __('search.placeholders.entry'),\n                'model' => Entity::class,\n            ])\n            ->add([\n                'field' => 'target_id',\n                'label' => __('entities/relations.fields.target'),\n                'type' => 'select2',\n                'route' => route('search.entities-with-relations', $this->campaign),\n                'placeholder' => __('search.placeholders.entry'),\n                'model' => Entity::class,\n            ])\n            ->add([\n                'field' => 'relation',\n                'label' => __('entities/relations.fields.role'),\n                'type' => 'text',\n                'placeholder' => __('entities/relations.placeholders.role'),\n            ])\n            ->add('attitude')\n            ->add('is_pinned');\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/TagFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass TagFilter extends DatagridFilter\n{\n    /**\n     * Filters available for tags\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.tag'))\n            ->add('is_auto_applied')\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/TimelineFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass TimelineFilter extends DatagridFilter\n{\n    /**\n     * Filters available for timelines\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.timeline'))\n            ->isPrivate()\n            ->template()\n            ->archived()\n            ->hasImage()\n            ->hasEntry()\n            ->hasPosts()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Filters/WhiteboardFilter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Filters;\n\nclass WhiteboardFilter extends DatagridFilter\n{\n    /**\n     * Filters available for timelines\n     */\n    public function build()\n    {\n        $this\n            ->add('name')\n            ->add('type')\n            ->parent(config('entities.ids.whiteboard'))\n            ->isPrivate()\n            ->template()\n            ->hasImage()\n            ->hasEntityFiles()\n            ->hasAttributes()\n            ->tags()\n            ->attributes()\n            ->connections();\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Sorters/DatagridSorter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Sorters;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\nuse ReflectionClass;\n\nabstract class DatagridSorter\n{\n    public array $options;\n\n    /**\n     * The default field for sorting\n     *\n     * @var string|array\n     */\n    public $default = 'name';\n\n    /**\n     * The default order\n     *\n     * @var string\n     */\n    public $order = 'asc';\n\n    /**\n     * The current selected option\n     *\n     * @var string\n     */\n    public $selected = '';\n\n    /**\n     * Field name for the request key\n     *\n     * @var string\n     */\n    protected $fieldname = 'dg-sort';\n\n    /**\n     * The column to order by\n     *\n     * @var string\n     */\n    protected $column = '';\n\n    /**\n     * @var bool|string\n     */\n    protected $sessionKey = false;\n\n    /**\n     * DatagridSorter constructor.\n     */\n    public function __construct()\n    {\n        $session = session()->get($this->sessionkey());\n        if (! empty($session)) {\n            $this->parse($session);\n        }\n    }\n\n    /**\n     * Build the list of filters\n     */\n    public function options(?Campaign $campaign = null): array\n    {\n        // Clean up options that don't make sense for this campaign\n        $options = [];\n        foreach ($this->options as $key => $option) {\n            if ($this->validOption($key, $campaign)) {\n                $options[$key] = $option;\n            }\n        }\n\n        return $options;\n    }\n\n    public function isSelected(string $key, bool $asc = true): bool\n    {\n        $key .= $this->direction($asc);\n\n        return $this->selected === $key;\n    }\n\n    /**\n     * Get the direction part of the key\n     */\n    public function direction(bool $asc = true): string\n    {\n        return $asc ? '_asc' : '_desc';\n    }\n\n    public function fieldname(): string\n    {\n        return $this->fieldname;\n    }\n\n    public function request(array $data): self\n    {\n        $selected = mb_strtolower(Arr::get($data, $this->fieldname()));\n        $segments = explode('_', $selected);\n        if (count($segments) < 2) {\n            return $this;\n        }\n        $this->parse($selected);\n\n        // Save these new values in the session\n        session()->put($this->sessionkey(), $this->selected);\n\n        return $this;\n    }\n\n    /**\n     * The field to perform the order by on\n     *\n     * @return string|array\n     */\n    public function column()\n    {\n        if (! empty($this->column)) {\n            return $this->column;\n        }\n\n        return $this->default;\n    }\n\n    public function order(): string\n    {\n        return (string) $this->order;\n    }\n\n    protected function sessionkey(): string\n    {\n        // ReflectionClass is cheap but let's still avoid extra calls\n        if ($this->sessionKey === false) {\n            $this->sessionKey = 'dg-sorter-' . Str::kebab((new ReflectionClass($this))->getShortName());\n        }\n\n        return (string) $this->sessionKey;\n    }\n\n    protected function parse(string $selected): self\n    {\n        $this->selected = $selected;\n\n        // Handle order later\n        $segments = explode('_', $selected);\n        $order = array_pop($segments);\n\n        // Validate fields. We can have \"abc_asc\" and \"other.is_abs_desc\" as fields\n        $field = implode('_', $segments);\n        if (in_array($field, array_keys($this->options))) {\n            $this->column = $field;\n        }\n\n        // Validate order\n        if (! empty($order) && in_array($order, ['asc', 'desc'])) {\n            $this->order = $order;\n        }\n\n        return $this;\n    }\n\n    protected function validOption(string $key, ?Campaign $campaign = null)\n    {\n        $whitelist = ['tag.name', 'target.name'];\n        if (! str_contains($key, '.name') || in_array($key, $whitelist)) {\n            return true;\n        }\n        if ($key == 'entity.name') {\n            return true;\n        }\n\n        // If it's a foreign key, it can probably be a module\n        $module = str_replace('.name', '', $key);\n        $module = Str::plural($module);\n\n        return $campaign->enabled($module);\n    }\n}\n"
  },
  {
    "path": "app/Datagrids/Sorters/QuestElementSorter.php",
    "content": "<?php\n\nnamespace App\\Datagrids\\Sorters;\n\n/**\n * Class QuestLocationSorter\n */\nclass QuestElementSorter extends DatagridSorter\n{\n    public $default = 'role';\n\n    public array $options = [\n        'entity.name' => 'crud.fields.name',\n        'role' => 'quests.fields.role',\n    ];\n}\n"
  },
  {
    "path": "app/Definitions/CustomCssDefinitions.php",
    "content": "<?php\n\nnamespace App\\Definitions;\n\nuse HTMLPurifier_AttrDef_CSS_AlphaValue;\nuse HTMLPurifier_AttrDef_CSS_Composite;\nuse HTMLPurifier_AttrDef_CSS_Length;\nuse HTMLPurifier_AttrDef_CSS_Percentage;\nuse HTMLPurifier_CSSDefinition;\nuse Stevebauman\\Purify\\Definitions\\CssDefinition;\n\nclass CustomCssDefinitions implements CssDefinition\n{\n    public static function apply(HTMLPurifier_CSSDefinition $definition): void\n    {\n        $definition->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue;\n\n        $borderRadius = new HTMLPurifier_AttrDef_CSS_Composite([\n            new HTMLPurifier_AttrDef_CSS_Length('0'),\n            new HTMLPurifier_AttrDef_CSS_Percentage(true),\n        ]);\n        $definition->info['border-radius'] = $borderRadius;\n    }\n}\n"
  },
  {
    "path": "app/Definitions/CustomDefinitions.php",
    "content": "<?php\n\nnamespace App\\Definitions;\n\nuse HTMLPurifier_HTMLDefinition;\nuse Stevebauman\\Purify\\Definitions\\Definition;\nuse Stevebauman\\Purify\\Definitions\\Html5Definition;\n\nclass CustomDefinitions implements Definition\n{\n    public static function apply(HTMLPurifier_HTMLDefinition $def)\n    {\n        Html5Definition::apply($def);\n\n        // Mentions\n        $def->addAttribute('a', 'data-toggle', 'Text');\n        $def->addAttribute('a', 'data-dropdown', 'Text');\n        $def->addAttribute('a', 'data-pulse', 'Text');\n        $def->addAttribute('a', 'data-animate', 'Text');\n        $def->addAttribute('a', 'data-tooltip', 'Text');\n        $def->addAttribute('a', 'data-title', 'Text');\n        $def->addAttribute('a', 'data-html', 'Text');\n        $def->addAttribute('a', 'data-entity-type', 'Text');\n        $def->addAttribute('a', 'target', 'Text');\n\n        $def->addAttribute('th', 'colwidth', 'Text');\n        $def->addAttribute('td', 'colwidth', 'Text');\n\n        // Gallery\n        $def->addAttribute('img', 'data-gallery-id', 'Text');\n        $def->addAttribute('img', 'data-uuid', 'Text');\n\n        $def->addAttribute('ul', 'role', 'Text');\n        $def->addAttribute('ol', 'role', 'Text');\n        $def->addAttribute('li', 'role', 'Text');\n        $def->addAttribute('div', 'role', 'Text');\n        $def->addAttribute('a', 'role', 'Text');\n\n        // Task lists\n        $def->addAttribute('ul', 'data-type', 'Text');\n        $def->addAttribute('li', 'data-type', 'Text');\n        $def->addAttribute('li', 'data-checked', 'Text');\n        $def->addElement('label', 'Inline', 'Inline', 'Common');\n        $def->addElement('input', 'Inline', 'Empty', 'Common', [\n            'type' => new \\HTMLPurifier_AttrDef_Enum(['checkbox']),\n            'checked' => new \\HTMLPurifier_AttrDef_HTML_Bool(true),\n            'disabled' => new \\HTMLPurifier_AttrDef_HTML_Bool(true),\n        ]);\n\n        $def->addElement(\n            'details',\n            'Block',\n            'Flow',\n            'Common',\n            [\n                'open' => new \\HTMLPurifier_AttrDef_HTML_Bool(true),\n            ]\n        );\n        $def->addElement(\n            'section',\n            'Block',\n            'Flow',\n            'Common'\n        );\n\n        $def->addElement(\n            'aside',\n            'Block',\n            'Flow',\n            'Common'\n        );\n        $def->addElement(\n            'sidebar',\n            'Block',\n            'Flow',\n            'Common'\n        );\n\n        $def->addElement('summary', 'Inline', 'Inline', 'Common');\n        $def->addElement('mark', 'Inline', 'Inline', 'Common');\n\n        // Ordered list attributes\n        $def->addAttribute('ol', 'start', 'Number');\n        $def->addAttribute('ol', 'type', 'Text');\n        $def->addAttribute('li', 'value', 'Number');\n\n        // Table cell vertical alignment\n        $def->addAttribute('td', 'valign', 'Text');\n        $def->addAttribute('th', 'valign', 'Text');\n    }\n}\n"
  },
  {
    "path": "app/Enums/AppReleaseCategory.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum AppReleaseCategory: int\n{\n    case release = 1;\n    case event = 2;\n    case vote = 3;\n    case other = 4;\n    case livestream = 5;\n}\n"
  },
  {
    "path": "app/Enums/ApplicationStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum ApplicationStatus: int\n{\n    case Pending = 0;\n    case Approved = 1;\n    case Rejected = 2;\n}\n"
  },
  {
    "path": "app/Enums/AttributeType.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum AttributeType: int\n{\n    case Invalid = 0;\n    case Standard = 1;\n    case Block = 2;\n    case Checkbox = 3;\n    case Section = 4;\n    case Random = 5;\n    case Number = 6;\n    case List = 7;\n}\n"
  },
  {
    "path": "app/Enums/CampaignExportStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum CampaignExportStatus: int\n{\n    case scheduled = 1;\n    case running = 2;\n    case finished = 3;\n    case failed = 4;\n}\n"
  },
  {
    "path": "app/Enums/CampaignFilterType.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum CampaignFilterType: int\n{\n    case Intro = 1;\n    case Timezone = 2;\n    case Schedule = 3;\n    case PlayerCount = 4;\n}\n"
  },
  {
    "path": "app/Enums/CampaignFlags.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum CampaignFlags: string\n{\n    case Gallery = 'gallery';\n}\n"
  },
  {
    "path": "app/Enums/CampaignImportStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum CampaignImportStatus: int\n{\n    case PREPARED = 1;\n    case QUEUED = 2;\n    case RUNNING = 3;\n    case FINISHED = 4;\n    case FAILED = 5;\n    case VALIDATING = 6;\n    case READY = 7;\n    case PROCESSING = 8;\n}\n"
  },
  {
    "path": "app/Enums/CampaignVisibility.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum CampaignVisibility: int\n{\n    case private = 1;\n    case public = 3;\n    case unlisted = 4;\n}\n"
  },
  {
    "path": "app/Enums/CharacterStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum CharacterStatus: int\n{\n    case alive = 0;\n    case dead = 1;\n    case missing = 2;\n}\n"
  },
  {
    "path": "app/Enums/ConversationTarget.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum ConversationTarget: int\n{\n    case users = 1;\n    case characters = 2;\n}\n"
  },
  {
    "path": "app/Enums/Descendants.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum Descendants: int\n{\n    case Direct = 0;\n    case All = 1;\n}\n"
  },
  {
    "path": "app/Enums/EntityAssetType.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum EntityAssetType: int\n{\n    case file = 1;\n    case link = 2;\n    case alias = 3;\n}\n"
  },
  {
    "path": "app/Enums/EntityEventTypes.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum EntityEventTypes: int\n{\n    case birth = 2;\n    case death = 3;\n    case calendarDate = 4;\n    case founded = 5;\n}\n"
  },
  {
    "path": "app/Enums/FeatureStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum FeatureStatus: int\n{\n    case Draft = 1;\n    case Rejected = 2;\n    case Approved = 3;\n    case Later = 4;\n    case Next = 5;\n    case Now = 6;\n    case Done = 7;\n}\n"
  },
  {
    "path": "app/Enums/FilterOption.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum FilterOption: string\n{\n    case INCLUDE = 'include';\n    case EXCLUDE = 'exclude';\n    case NONE = 'none';\n    case CHILDREN = 'children';\n}\n"
  },
  {
    "path": "app/Enums/MapMarkerShape.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum MapMarkerShape: int\n{\n    case marker = 1;\n    case label = 2;\n    case circle = 3;\n    case poly = 5;\n}\n"
  },
  {
    "path": "app/Enums/OrganisationMemberPin.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum OrganisationMemberPin: int\n{\n    case empty = 0; // Added to prevent a crash due to invalid value.\n    case character = 1;\n    case organisation = 2;\n    case both = 3;\n}\n"
  },
  {
    "path": "app/Enums/OrganisationMemberStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum OrganisationMemberStatus: int\n{\n    case active = 0;\n    case inactive = 1;\n    case unknown = 2;\n}\n"
  },
  {
    "path": "app/Enums/Permission.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum Permission: int\n{\n    case View = 1;\n    case Update = 2;\n    case Create = 3;\n    case Delete = 4;\n    case Posts = 5;\n    case Permissions = 6;\n\n    case Manage = 10;\n    case Dashboards = 11;\n    case Members = 12;\n    case Gallery = 13;\n    case Campaign = 14;\n\n    case GalleryBrowse = 15;\n    case GalleryUpload = 16;\n\n    case Templates = 17;\n    case PostTemplates = 18;\n    case Bookmarks = 19;\n}\n"
  },
  {
    "path": "app/Enums/PricingPeriod.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum PricingPeriod: int\n{\n    case Monthly = 1;\n    case Yearly = 2;\n\n    public function isYearly(): bool\n    {\n        return match ($this) {\n            PricingPeriod::Yearly => true,\n            default => false,\n        };\n    }\n\n    public function lowerName(): string\n    {\n        return mb_strtolower($this->name);\n    }\n}\n"
  },
  {
    "path": "app/Enums/QuestStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum QuestStatus: int\n{\n    case notStarted = 0;\n    case ongoing = 1;\n    case completed = 2;\n    case abandoned = 3;\n}\n"
  },
  {
    "path": "app/Enums/ReferralEventType.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum ReferralEventType: int\n{\n    case register = 1;\n    case invite = 2;\n}\n"
  },
  {
    "path": "app/Enums/SpotlightContentStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum SpotlightContentStatus: int\n{\n    case draft = 1;\n    case applied = 2;\n    case approved = 3;\n    case rejected = 4;\n}\n"
  },
  {
    "path": "app/Enums/SpotlightStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum SpotlightStatus: int\n{\n    case active = 1;\n    case inactive = 2;\n}\n"
  },
  {
    "path": "app/Enums/Tier.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum Tier: string\n{\n    case Owlbear = 'owlbear';\n    case Wyvern = 'wyvern';\n    case Elemental = 'elemental';\n}\n"
  },
  {
    "path": "app/Enums/UserAction.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum UserAction: int\n{\n    case login = 1;\n    case logout = 2;\n    case autoLogin = 3;\n    case update = 4;\n    case bannedLogin = 5;\n    case subNew = 10;\n    case subCancel = 11;\n    case subUpgrade = 12;\n    case subDowngrade = 13;\n    case subFail = 15;\n    case subPaypal = 16;\n    case subRenew = 17;\n    case campaignNew = 20;\n    case campaignJoin = 21;\n    case campaignLeave = 22;\n    case campaignDelete = 23;\n    case passwordUpdate = 30;\n    case passwordReset = 31;\n    case passwordRequest = 32;\n    case passwordAdminUpdate = 35;\n    case emailUpdate = 40;\n    case socialSwitch = 41;\n    case currencySwitch = 42;\n    case lang = 43;\n    case userSwitch = 50;\n    case userRevert = 51;\n    case userSwitchLogin = 52;\n    case purgeWarningFirst = 60;\n    case purgeWarningSecond = 61;\n    case notifyYearlySub = 70;\n    case failedChargeEmail = 80;\n    case yearlyRenewWarning = 81;\n    case subCancelManual = 82;\n    case subCancelAuto = 83;\n    case subPaypalExpiringWarning = 84;\n    case subPaypalRenew = 85;\n    case paymentEdit = 86;\n    case paymentAuto = 87;\n    case campaignBoost = 90;\n    case campaignUpgradeBoost = 91;\n    case campaignSuperboost = 92;\n    case campaignUnboost = 93;\n    case campaignUnboostAuto = 94;\n    case campaignPremium = 95;\n\n    // Campaign admin stuff\n    case campaign = 100;\n    case entity = 101;\n    case post = 102;\n    case csvImport = 103;\n    case zipImport = 104;\n}\n"
  },
  {
    "path": "app/Enums/UserFlags.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum UserFlags: string\n{\n    case firstWarning = 'inactive_1';\n    case secondWarning = 'inactive_2';\n\n    case email = 'email';\n    case freeTrial = 'free_trial';\n    case startTrial = 'start_trial';\n    case uploadSize = 'upload_size';\n}\n"
  },
  {
    "path": "app/Enums/Visibility.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum Visibility: int\n{\n    case All = 1;\n    case Admin = 2;\n    case AdminSelf = 3;\n    case Self = 4;\n    case Member = 5;\n}\n"
  },
  {
    "path": "app/Enums/WebhookAction.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum WebhookAction: int\n{\n    case CREATED = 1;\n    case EDITED = 2;\n    case DELETED = 3;\n}\n"
  },
  {
    "path": "app/Enums/Widget.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum Widget: string\n{\n    case Preview = 'preview';\n    case Recent = 'recent';\n    case Calendar = 'calendar';\n    case Unmentioned = 'unmentioned';\n    case Random = 'random';\n    case Header = 'header';\n    case Campaign = 'campaign';\n    case Welcome = 'welcome';\n    case Help = 'help';\n    case Onboarding = 'onboarding';\n    case Join = 'join';\n    case Gallery = 'gallery';\n\n    public function isHeader(): bool\n    {\n        return match ($this) {\n            Widget::Header => true,\n            default => false,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Events/AdminInviteCreated.php",
    "content": "<?php\n\nnamespace App\\Events;\n\nuse App\\Models\\AdminInvite;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass AdminInviteCreated\n{\n    use Dispatchable, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public AdminInvite $adminInvite,\n    ) {}\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Applications/Accepted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Applications;\n\nuse App\\Models\\Application;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Accepted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Application $application,\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Applications/Rejected.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Applications;\n\nuse App\\Models\\Application;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Rejected\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Application $application,\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Dashboards/DashboardCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Dashboards;\n\nuse App\\Models\\CampaignDashboard;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass DashboardCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignDashboard $campaignDashboard,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Dashboards/DashboardDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Dashboards;\n\nuse App\\Models\\CampaignDashboard;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass DashboardDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignDashboard $campaignDashboard,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Dashboards/DashboardUpdated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Dashboards;\n\nuse App\\Models\\CampaignDashboard;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass DashboardUpdated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignDashboard $campaignDashboard,\n        public ?User $user, )\n    {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Deleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Deleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/EntityTypes/EntityTypeCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\EntityTypes;\n\nuse App\\Models\\EntityType;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass EntityTypeCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public EntityType $entityType,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/EntityTypes/EntityTypeDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\EntityTypes;\n\nuse App\\Models\\EntityType;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass EntityTypeDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public EntityType $entityType,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/EntityTypes/EntityTypeToggled.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\EntityTypes;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass EntityTypeToggled\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public EntityType $entityType,\n        public ?User $user,\n        public ?Campaign $campaign\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/EntityTypes/EntityTypeUpdated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\EntityTypes;\n\nuse App\\Models\\EntityType;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass EntityTypeUpdated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public EntityType $entityType,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Exports/ExportCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Exports;\n\nuse App\\Models\\CampaignExport;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ExportCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignExport $campaignExport,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Followers/FollowerCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Followers;\n\nuse App\\Models\\CampaignFollower;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass FollowerCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignFollower $campaignFollower,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Followers/FollowerRemoved.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Followers;\n\nuse App\\Models\\CampaignFollower;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass FollowerRemoved\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignFollower $campaignFollower,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Invites/InviteCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Invites;\n\nuse App\\Models\\CampaignInvite;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass InviteCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignInvite $campaignInvite,\n        public ?User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Invites/InviteDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Invites;\n\nuse App\\Models\\CampaignInvite;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass InviteDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignInvite $campaignInvite,\n        public ?User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Members/RoleUserAdded.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Members;\n\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RoleUserAdded\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignRoleUser $campaignRoleUser,\n        public ?User $user,\n    ) {\n        //\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Members/RoleUserRemoved.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Members;\n\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RoleUserRemoved\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignRoleUser $campaignRoleUser,\n        public ?User $user,\n    ) {\n        //\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Members/Switched.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Members;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Switched\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public User $user,\n        public CampaignUser $campaignUser\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Members/UserJoined.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Members;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignInvite;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass UserJoined\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public User $user,\n        public CampaignInvite $campaignInvite,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Members/UserLeft.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Members;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass UserLeft\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Plugins/PluginDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Plugins;\n\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass PluginDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignPlugin $campaignPlugin,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Plugins/PluginImported.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Plugins;\n\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass PluginImported\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignPlugin $campaignPlugin,\n        public ?User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Plugins/PluginUpdated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Plugins;\n\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass PluginUpdated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignPlugin $campaignPlugin,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Roles/RoleCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Roles;\n\nuse App\\Models\\CampaignRole;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RoleCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignRole $campaignRole,\n        public User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Roles/RoleDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Roles;\n\nuse App\\Models\\CampaignRole;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RoleDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignRole $campaignRole,\n        public User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Roles/RoleUpdated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Roles;\n\nuse App\\Models\\CampaignRole;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RoleUpdated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignRole $campaignRole,\n        public User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Saved.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Saved\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/SettingsSaved.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass SettingsSaved\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Sidebar/SidebarReset.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Sidebar;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass SidebarReset\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Sidebar/SidebarSaved.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Sidebar;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass SidebarSaved\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Styles/StyleCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Styles;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignStyle;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass StyleCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignStyle $campaignStyle,\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Styles/StyleDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Styles;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignStyle;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass StyleDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignStyle $campaignStyle,\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Styles/StyleUpdated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Styles;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignStyle;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass StyleUpdated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public CampaignStyle $campaignStyle,\n        public Campaign $campaign,\n        public ?User $user, )\n    {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Thumbnails/ThumbnailCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Thumbnails;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ThumbnailCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public EntityType $entityType,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Thumbnails/ThumbnailDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Thumbnails;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ThumbnailDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public EntityType $entityType,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Thumbnails/ThumbnailsDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Thumbnails;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ThumbnailsDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Updated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Updated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Webhooks/WebhookCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Webhooks;\n\nuse App\\Models\\User;\nuse App\\Models\\Webhook;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass WebhookCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Webhook $webhook,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Webhooks/WebhookDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Webhooks;\n\nuse App\\Models\\User;\nuse App\\Models\\Webhook;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass WebhookDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Webhook $webhook,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Webhooks/WebhookTested.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Webhooks;\n\nuse App\\Models\\User;\nuse App\\Models\\Webhook;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass WebhookTested\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Webhook $webhook,\n        public ?User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Campaigns/Webhooks/WebhookUpdated.php",
    "content": "<?php\n\nnamespace App\\Events\\Campaigns\\Webhooks;\n\nuse App\\Models\\User;\nuse App\\Models\\Webhook;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass WebhookUpdated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Webhook $webhook,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Entities/EntityRestored.php",
    "content": "<?php\n\nnamespace App\\Events\\Entities;\n\nuse App\\Models\\Entity;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass EntityRestored\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Entity $entity,\n        public ?User $user,\n    ) {}\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/FeatureCreated.php",
    "content": "<?php\n\nnamespace App\\Events;\n\nuse App\\Models\\Feature;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass FeatureCreated\n{\n    use Dispatchable, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Feature $feature,\n    ) {}\n}\n"
  },
  {
    "path": "app/Events/Posts/PostCreated.php",
    "content": "<?php\n\nnamespace App\\Events\\Posts;\n\nuse App\\Models\\Post;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass PostCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Post $post,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Posts/PostDeleted.php",
    "content": "<?php\n\nnamespace App\\Events\\Posts;\n\nuse App\\Models\\Post;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass PostDeleted\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Post $post,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Posts/PostRestored.php",
    "content": "<?php\n\nnamespace App\\Events\\Posts;\n\nuse App\\Models\\Post;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass PostRestored\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Post $post,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Posts/PostUpdated.php",
    "content": "<?php\n\nnamespace App\\Events\\Posts;\n\nuse App\\Models\\Post;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass PostUpdated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Post $post,\n        public User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/SpotlightSubmitted.php",
    "content": "<?php\n\nnamespace App\\Events;\n\nuse App\\Models\\SpotlightContent;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass SpotlightSubmitted\n{\n    use Dispatchable,  SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(public SpotlightContent $spotlightContent)\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "app/Events/Subscriptions/AutoRemove.php",
    "content": "<?php\n\nnamespace App\\Events\\Subscriptions;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass AutoRemove\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Subscriptions/Boost.php",
    "content": "<?php\n\nnamespace App\\Events\\Subscriptions;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Boost\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Subscriptions/Disable.php",
    "content": "<?php\n\nnamespace App\\Events\\Subscriptions;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Disable\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Subscriptions/Premium.php",
    "content": "<?php\n\nnamespace App\\Events\\Subscriptions;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Premium\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Subscriptions/SuperBoost.php",
    "content": "<?php\n\nnamespace App\\Events\\Subscriptions;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass SuperBoost\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Subscriptions/Upgrade.php",
    "content": "<?php\n\nnamespace App\\Events\\Subscriptions;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Upgrade\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public ?User $user,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Users/EmailChanged.php",
    "content": "<?php\n\nnamespace App\\Events\\Users;\n\nuse App\\Models\\User;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PrivateChannel;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass EmailChanged\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    /**\n     * Create a new event instance.\n     */\n    public function __construct(\n        public User $user,\n        public string $email,\n    ) {\n        //\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PrivateChannel('channel-name'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/WhiteboardUpdated.php",
    "content": "<?php\n\nnamespace App\\Events;\n\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithBroadcasting;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Contracts\\Broadcasting\\ShouldBroadcastNow;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass WhiteboardUpdated implements ShouldBroadcastNow\n{\n    use Dispatchable, InteractsWithBroadcasting, InteractsWithSockets, SerializesModels;\n\n    public int $whiteboardId;\n\n    public array $payload;\n\n    public function __construct(int $whiteboardId, array $payload = [])\n    {\n        $this->whiteboardId = $whiteboardId;\n        $this->payload = $payload;\n        $this->broadcastVia('reverb');\n    }\n\n    public function broadcastAs()\n    {\n        return 'WhiteboardUpdated';\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new Channel('kanka-whiteboard-' . $this->whiteboardId),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Events/Whiteboards/Updated.php",
    "content": "<?php\n\nnamespace App\\Events\\Whiteboards;\n\nuse App\\Http\\Resources\\Whiteboards\\ShapeResource;\nuse App\\Models\\Whiteboard;\nuse App\\Models\\WhiteboardShape;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\InteractsWithBroadcasting;\nuse Illuminate\\Broadcasting\\InteractsWithSockets;\nuse Illuminate\\Broadcasting\\PresenceChannel;\nuse Illuminate\\Contracts\\Broadcasting\\ShouldBroadcastNow;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Updated implements ShouldBroadcastNow\n{\n    use Dispatchable;\n    use InteractsWithBroadcasting;\n    use InteractsWithSockets;\n    use SerializesModels;\n\n    public function __construct(\n        public Whiteboard $whiteboard,\n        public string $action,\n        public WhiteboardShape $shape,\n        public ?string $image = null,\n        public ?array $entity = null,\n    ) {\n        $this->broadcastVia('reverb');\n    }\n\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return array<int, Channel>\n     */\n    public function broadcastOn(): array\n    {\n        return [\n            new PresenceChannel(\"whiteboard.{$this->whiteboard->id}\"),\n        ];\n    }\n\n    /**\n     * The event's broadcast name.\n     */\n    public function broadcastAs(): string\n    {\n        return 'shape';\n    }\n\n    public function broadcastWith(): array\n    {\n        return [\n            'action' => $this->action,\n            'shape' => new ShapeResource($this->shape),\n            'image' => $this->image,\n            'entity' => $this->entity,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Exceptions/Campaign/AlreadyBoostedException.php",
    "content": "<?php\n\nnamespace App\\Exceptions\\Campaign;\n\nuse App\\Exceptions\\TranslatableException;\nuse Throwable;\n\nclass AlreadyBoostedException extends TranslatableException\n{\n    public $trans = 'settings.boost.exceptions.already_boosted';\n\n    public function __construct($message = '', $code = 0, ?Throwable $previous = null)\n    {\n        $this->options = ['name' => $message->name];\n        parent::__construct('', $code, $previous);\n    }\n}\n"
  },
  {
    "path": "app/Exceptions/Campaign/ExhaustedBoostsException.php",
    "content": "<?php\n\nnamespace App\\Exceptions\\Campaign;\n\nuse App\\Exceptions\\TranslatableException;\n\nclass ExhaustedBoostsException extends TranslatableException\n{\n    public $trans = 'settings.boost.exceptions.exhausted_boosts';\n}\n"
  },
  {
    "path": "app/Exceptions/Campaign/ExhaustedSuperboostsException.php",
    "content": "<?php\n\nnamespace App\\Exceptions\\Campaign;\n\nuse App\\Exceptions\\TranslatableException;\n\nclass ExhaustedSuperboostsException extends TranslatableException\n{\n    public $trans = 'settings.boost.exceptions.exhausted_superboosts';\n}\n"
  },
  {
    "path": "app/Exceptions/Campaign/ImportException.php",
    "content": "<?php\n\nnamespace App\\Exceptions\\Campaign;\n\nuse Exception;\n\nclass ImportException extends Exception {}\n"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "content": "<?php\n\nnamespace App\\Exceptions;\n\nuse App\\Facades\\ApiLog;\nuse App\\Facades\\Domain;\nuse App\\Models\\Campaign;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Auth\\AuthenticationException;\nuse Illuminate\\Broadcasting\\BroadcastException;\nuse Illuminate\\Database\\Eloquent\\ModelNotFoundException;\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\nuse Illuminate\\Http\\Exceptions\\ThrottleRequestsException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Session\\TokenMismatchException;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Validation\\ValidationException;\nuse Intervention\\Image\\Exceptions\\DecoderException;\nuse Laravel\\Passport\\Exceptions\\OAuthServerException;\nuse Livewire\\Features\\SupportLockedProperties\\CannotUpdateLockedPropertyException;\nuse Sentry\\Laravel\\Integration;\nuse Symfony\\Component\\Console\\Exception\\CommandNotFoundException;\nuse Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException;\nuse Symfony\\Component\\ErrorHandler\\Error\\FatalError;\nuse Symfony\\Component\\HttpKernel\\Exception\\HttpException as SymHttpException;\nuse Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException;\nuse Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException;\nuse Symfony\\Component\\Mailer\\Exception\\HttpTransportException;\nuse Throwable;\n\nclass Handler extends ExceptionHandler\n{\n    /**\n     * A list of the exception types that are not reported.\n     *\n     * @var array<int, class-string<Throwable>>\n     */\n    protected $dontReport = [\n        \\League\\OAuth2\\Server\\Exception\\OAuthServerException::class,\n        NamespaceNotFoundException::class,\n        CommandNotFoundException::class,\n        HttpTransportException::class,\n        FatalError::class,\n        OAuthServerException::class,\n        CannotUpdateLockedPropertyException::class,\n        BroadcastException::class,\n        NotFoundHttpException::class,\n        DecoderException::class,\n    ];\n\n    public function register(): void\n    {\n        $this->reportable(function (Throwable $e) {\n            Integration::captureUnhandledException($e);\n        });\n    }\n\n    /**\n     * Render an exception into an HTTP response.\n     *\n     * @param  Request  $request\n     * @return JsonResponse|RedirectResponse|Response|\\Symfony\\Component\\HttpFoundation\\Response\n     *\n     * @throws Throwable\n     */\n    public function render($request, Throwable $exception)\n    {\n        if ($exception instanceof TokenMismatchException) {\n            return redirect()\n                ->back()\n                ->withInput($request->all())\n                ->withErrors(__('redirects.session_timeout'));\n        } elseif ($exception instanceof AuthorizationException && auth()->guest()) {\n            // User needs to be logged in, remember the page they visited\n            session()->put('login_redirect', $request->getRequestUri());\n        } elseif (! $request->is('api/*') && $exception instanceof ModelNotFoundException) {\n            // If the guest user tries accessing a private campaign, let's tell them about it\n            $campaign = request()->route('campaign');\n            if (! empty($campaign) && ! ($campaign instanceof Campaign)) {\n                session()->put('login_redirect', $request->getRequestUri());\n                /** @var Campaign $campaign */\n                $campaign = Campaign::select('id')->slug($campaign)->first();\n                if ($campaign && ! $campaign->isPublic()) {\n                    return response()->view('errors.private-campaign', [\n                        'campaign' => $campaign,\n                    ], 200);\n                }\n            }\n        } elseif ($exception instanceof SymHttpException && $exception->getStatusCode() == 503) {\n            if (request()->ajax()) {\n                return response()->json([\n                    'title' => __('errors.503.title'),\n                    'message' => __('errors.503.json'),\n                ], 503);\n            }\n            // For stripe, we want them to try again later\n            if (request()->is('stripe/*')) {\n                return response()->json(['maintenance'], 503);\n            }\n\n            return response()->view('errors.maintenance', [\n                'message' => $exception->getMessage(),\n                // 'retry' => $exception->retryAfter\n            ], 200);\n        } elseif ($request->is('api/*') || Domain::isApi()) {\n            // API error handling\n            return $this->handleApiErrors($exception);\n        }\n\n        return parent::render($request, $exception);\n    }\n\n    /**\n     * Unauthenticated exception handler\n     *\n     * @param  Request  $request\n     * @return JsonResponse|RedirectResponse|\\Symfony\\Component\\HttpFoundation\\Response\n     */\n    protected function unauthenticated($request, AuthenticationException $exception)\n    {\n        return $request->is('api/*') || Domain::isApi()\n            ? response()->json([\n                'message' => 'Unauthenticated (missing the authorization token in the request headers, or the token is invalid).',\n                'documentation' => 'https://app.kanka.io/api-docs/1.0/setup#authentication',\n            ], 401)\n            : redirect()->guest(route('login'));\n    }\n\n    /**\n     * Handle all errors that happen in the API\n     *\n     * @return JsonResponse\n     */\n    protected function handleApiErrors(Throwable $exception)\n    {\n        if ($exception instanceof ModelNotFoundException) {\n            return response()\n                ->json([\n                    'code' => 404,\n                    'error' => $exception->getMessage(),\n                ], 404);\n        } elseif ($exception instanceof MethodNotAllowedHttpException) {\n            return response()\n                ->json([\n                    'code' => 405,\n                    'error' => $exception->getMessage(),\n                ], 405);\n        } elseif ($exception instanceof ValidationException) {\n            return response()\n                ->json([\n                    'code' => $exception->status,\n                    'error' => $exception->getMessage(),\n                    'fields' => $exception->errors(),\n                ], $exception->status);\n        } elseif ($exception instanceof AuthorizationException) {\n            return response()\n                ->json([\n                    'code' => 403,\n                    'error' => $exception->getMessage(),\n                ], 403);\n        } elseif ($exception instanceof NotFoundHttpException) {\n            return response()\n                ->json(['error' => 'Page not found'], 404);\n        } elseif ($exception instanceof ThrottleRequestsException) {\n            $amount = auth()->user()->rateLimit;\n            $message = $amount != 90 ? ' Subscribe to Kanka to unlock higher limits' : null;\n\n            return response()\n                ->json(['Your account limit of ' . $amount . ' requests per minute has been reached.'\n                    . $message], 429);\n        } elseif ($exception instanceof AuthenticationException) {\n            return response()\n                ->json([\n                    'code' => 401,\n                    'error' => 'Invalid authentication token. Make sure you copy-pasted it correctly, or try using a new one at https://app.kanka.io/settings/api.',\n                ], 401);\n        }\n\n        $limit = app()->isProduction() ? 100 : 2000;\n        $trace = app()->hasDebugModeEnabled() ? $exception->getTrace() : null;\n\n        ApiLog::exception($exception);\n\n        return response()\n            ->json([\n                'code' => 500,\n                'error' => 'Unhandled API error. Contact us on Discord',\n                'hint' => Str::limit($exception->getMessage(), $limit),\n                'trace' => $trace,\n            ], 500);\n    }\n}\n"
  },
  {
    "path": "app/Exceptions/OpenAiException.php",
    "content": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\n\nclass OpenAiException extends Exception\n{\n    protected $context;\n\n    public function getContext()\n    {\n        return $this->context;\n    }\n\n    public function setContext($context)\n    {\n        $this->context = $context;\n    }\n}\n"
  },
  {
    "path": "app/Exceptions/RequireLoginException.php",
    "content": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\n\nclass RequireLoginException extends Exception {}\n"
  },
  {
    "path": "app/Exceptions/TranslatableException.php",
    "content": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\n\n/**\n * Class TranslatableException\n */\nclass TranslatableException extends Exception\n{\n    /**\n     * Translation options\n     *\n     * @var array\n     */\n    public $options = [];\n\n    public function getTranslatedMessage(): string\n    {\n        return __($this->message, $this->options);\n    }\n\n    /**\n     * @return $this\n     */\n    public function setOptions(array $options)\n    {\n        $this->options = $options;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Facades/AdCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\AdCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class AdCache\n *\n * @see AdCacheService\n *\n * @mixin AdCacheService\n */\nclass AdCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'adcache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/ApiLog.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Logs\\ApiLogService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class ApiLog\n *\n * @see ApiLogService\n *\n * @mixin ApiLogService\n */\nclass ApiLog extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'api_log';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Attributes.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\AttributeMentionService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Attributes\n *\n * @see AttributeMentionService\n *\n * @mixin AttributeMentionService\n */\nclass Attributes extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'attributes';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Avatar.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Images\\AvatarService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Avatar\n *\n * @see AvatarService\n *\n * @mixin AvatarService\n */\nclass Avatar extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'avatar';\n    }\n}\n"
  },
  {
    "path": "app/Facades/BookmarkCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\BookmarkCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class BookmarkCache\n *\n * @see BookmarkCacheService\n *\n * @mixin BookmarkCacheService\n */\nclass BookmarkCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'bookmarkcache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Breadcrumb.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\BreadcrumbService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Breadcrumb\n *\n * @see BreadcrumbService\n *\n * @mixin BreadcrumbService\n */\nclass Breadcrumb extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'breadcrumb';\n    }\n}\n"
  },
  {
    "path": "app/Facades/CampaignCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\CampaignCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class CampaignLocalization\n *\n * @see CampaignCacheService\n *\n * @mixin CampaignCacheService\n */\nclass CampaignCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'campaigncache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/CampaignLocalization.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Campaign\\LocalisationService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class CampaignLocalization\n *\n * @mixin LocalisationService\n *\n * @see LocalisationService\n */\nclass CampaignLocalization extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'campaignlocalization';\n    }\n}\n"
  },
  {
    "path": "app/Facades/CharacterCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\CharacterCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class CharacterCache\n *\n * @see CharacterCacheService\n *\n * @mixin CharacterCacheService\n */\nclass CharacterCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'charactercache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Dashboard.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\DashboardService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Dashboard\n *\n * @mixin DashboardService\n *\n * @see DashboardService\n */\nclass Dashboard extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'dashboard';\n    }\n}\n"
  },
  {
    "path": "app/Facades/DataLayer.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Tracking\\DatalayerService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class DataLayer\n *\n * @see DatalayerService\n *\n * @mixin DatalayerService\n */\nclass DataLayer extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'datalayer';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Datagrid.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Renderers\\DatagridRenderer2;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Datagrid\n *\n * @see DatagridRenderer2\n *\n * @mixin DatagridRenderer2\n */\nclass Datagrid extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return DatagridRenderer2::class;\n    }\n}\n"
  },
  {
    "path": "app/Facades/Domain.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\DomainService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * @mixin DomainService\n */\nclass Domain extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'domain';\n    }\n}\n"
  },
  {
    "path": "app/Facades/EntityAssetCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\EntityAssetCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class EntityAssetCache\n *\n * @see EntityAssetCacheService\n *\n * @mixin EntityAssetCacheService\n */\nclass EntityAssetCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'entityassetcache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/EntityCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\EntityCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class EntityCache\n *\n * @see EntityCacheService\n *\n * @mixin EntityCacheService\n */\nclass EntityCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'entitycache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/EntityLogger.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Entity\\LoggerService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class EntityLogger\n *\n * @see LoggerService\n *\n * @mixin LoggerService\n */\nclass EntityLogger extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'entitylogger';\n    }\n}\n"
  },
  {
    "path": "app/Facades/EntityPermission.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class EntityPermission\n *\n * @see \\App\\Services\\Permissions\\EntityPermission\n *\n * @mixin \\App\\Services\\Permissions\\EntityPermission\n */\nclass EntityPermission extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'entitypermission';\n    }\n}\n"
  },
  {
    "path": "app/Facades/FormCopy.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\FormCopyService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class FormCopy\n *\n * @see FormCopyService\n *\n * @mixin FormCopyService\n */\nclass FormCopy extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return FormCopyService::class;\n    }\n}\n"
  },
  {
    "path": "app/Facades/Identity.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\IdentityManager;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Identity\n *\n * @see IdentityManager\n *\n * @mixin IdentityManager\n */\nclass Identity extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return IdentityManager::class;\n    }\n}\n"
  },
  {
    "path": "app/Facades/Images.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\ImagesService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Img\n *\n * @see ImagesService\n *\n * @mixin ImagesService\n */\nclass Images extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'images';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Img.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\ImgService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Img\n *\n * @see ImgService\n *\n * @mixin ImgService\n */\nclass Img extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'img';\n    }\n}\n"
  },
  {
    "path": "app/Facades/ImportIdMapper.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class QuestCache\n *\n * @see \\App\\Services\\Campaign\\Import\\ImportIdMapper\n *\n * @mixin \\App\\Services\\Campaign\\Import\\ImportIdMapper\n */\nclass ImportIdMapper extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'importidmapper';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Limit.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\LimitService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * @mixin LimitService\n */\nclass Limit extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'limit';\n    }\n}\n"
  },
  {
    "path": "app/Facades/MapMarkerCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\MapMarkerCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class MapMarkerCache\n *\n * @see MapMarkerCacheService\n *\n * @mixin MapMarkerCacheService\n */\nclass MapMarkerCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'mapmarkercache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/MarketplaceCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\MarketplaceCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class MarketplaceCache\n *\n * @see MarketplaceCacheService\n *\n * @mixin MarketplaceCacheService\n */\nclass MarketplaceCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'marketplacecache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Mentions.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\MentionsService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Mentions\n *\n * @see MentionsService\n *\n * @mixin MentionsService\n */\nclass Mentions extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'mentions';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Module.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Campaign\\ModuleService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Module\n *\n * @see ModuleService\n *\n * @mixin ModuleService\n */\nclass Module extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'module';\n    }\n}\n"
  },
  {
    "path": "app/Facades/Permissions.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Permissions\\PermissionService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class Permissions\n * Used for the Entity object\n *\n * @see PermissionService\n *\n * @mixin PermissionService\n */\nclass Permissions extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'permissions';\n    }\n}\n"
  },
  {
    "path": "app/Facades/QuestCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\QuestCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class QuestCache\n *\n * @see QuestCacheService\n *\n * @mixin QuestCacheService\n */\nclass QuestCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'questcache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/ReleaseCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\ReleaseCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * @see ReleaseCacheService\n *\n * @mixin ReleaseCacheService\n */\nclass ReleaseCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'releasecache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/RolePermission.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class RolePermission\n * Used for the Entity object\n *\n * @see \\App\\Services\\Permissions\\RolePermission\n *\n * @mixin \\App\\Services\\Permissions\\RolePermission\n */\nclass RolePermission extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'rolepermission';\n    }\n}\n"
  },
  {
    "path": "app/Facades/SingleUserCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\UserCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class UserCache\n *\n * @see UserCacheService\n *\n * @mixin UserCacheService\n */\nclass SingleUserCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'singleusercache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/TimelineElementCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\TimelineElementCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class TimelineElementCache\n *\n * @see TimelineElementCacheService\n *\n * @mixin TimelineElementCacheService\n */\nclass TimelineElementCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'timelineelementcache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/UserCache.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Services\\Caches\\UserCacheService;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class UserCache\n *\n * @see UserCacheService\n *\n * @mixin UserCacheService\n */\nclass UserCache extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'usercache';\n    }\n}\n"
  },
  {
    "path": "app/Facades/UserPermission.php",
    "content": "<?php\n\nnamespace App\\Facades;\n\nuse App\\Models\\Entity;\nuse Illuminate\\Support\\Facades\\Facade;\n\n/**\n * Class UserPermission\n * Used for the Entity object\n *\n * @see \\App\\Services\\Permissions\\UserPermission\n */\nclass UserPermission extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'userpermission';\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Abilities/AbilityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Abilities;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Ability;\nuse App\\Models\\Campaign;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass AbilityController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Ability $ability)\n    {\n        $this->campaign($campaign)->authEntityView($ability->entity);\n\n        return redirect()->route('entities.children', [$campaign, $ability->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Abilities/EntityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Abilities;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreAbilityEntity;\nuse App\\Models\\Ability;\nuse App\\Models\\Campaign;\nuse App\\Renderers\\Layouts\\Ability\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass EntityController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Ability $ability)\n    {\n        $this->campaign($campaign)->authEntityView($ability->entity);\n\n        $options = ['campaign' => $campaign, 'ability' => $ability];\n        Datagrid::layout(Entity::class)\n            ->route('abilities.entities', $options);\n\n        $this->rows = $ability\n            ->entityAbilities()\n            ->with(['entity.image', 'entity.tags', 'entity.entityType'])\n            // ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('abilities.entities', $ability);\n    }\n\n    public function create(Campaign $campaign, Ability $ability)\n    {\n        $this->authorize('update', $ability->entity);\n        $formOptions = ['abilities.entity-add.save', $campaign, 'ability' => $ability];\n        if (request()->has('from-children')) {\n            $formOptions['from-children'] = true;\n        }\n\n        return view('abilities.entities.create', [\n            'campaign' => $campaign,\n            'model' => $ability,\n            'formOptions' => $formOptions,\n        ]);\n    }\n\n    public function store(StoreAbilityEntity $request, Campaign $campaign, Ability $ability)\n    {\n        $this->authorize('update', $ability->entity);\n        $redirectUrlOptions = ['ability' => $ability->id];\n        if (request()->has('from-children')) {\n            $redirectUrlOptions['ability_id'] = $ability->id;\n        }\n\n        $count = $ability->attachEntity($request->only('entities', 'visibility_id'));\n\n        return redirect()->route('abilities.entities', [$campaign, 'ability' => $ability->id])\n            // ->with('success', __('abilities.children.create.success', ['name' => $ability->name]));\n            ->with('success', trans_choice('abilities.children.create.attach_success', $count, ['count' => $count, 'name' => $ability->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Account/Billing/InformationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Account\\Billing;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreBillingSettings;\nuse App\\Models\\User;\n\nclass InformationController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware(['identity']);\n    }\n\n    public function index()\n    {\n        return view('account.billing.information.form')->with('user', auth()->user());\n    }\n\n    public function save(StoreBillingSettings $request)\n    {\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        /** @var User $user */\n        $user = $request->user();\n        $user->updateBillingInfo($request->profile['billing'])\n            ->update();\n\n        return redirect()\n            ->route('billing.payment-method')\n            ->with('success', trans('settings.profile.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Account/DeleteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Account;\n\nuse App\\Facades\\Domain;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\DeleteSettingsAccount;\nuse App\\Services\\Account\\DeletionService;\n\nclass DeleteController extends Controller\n{\n    public function __construct(protected DeletionService $deletionService)\n    {\n        $this->middleware(['auth', 'identity', 'password.confirm']);\n    }\n\n    public function destroy(DeleteSettingsAccount $request)\n    {\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $this->deletionService\n            ->user($request->user())\n            ->request($request)\n            ->delete();\n\n        return redirect()->to(Domain::toFront('goodbye') . '?deleted=true');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Account/EmailController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Account;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreSettingsAccountEmail;\n\nclass EmailController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware(['identity', 'password.confirm']);\n    }\n\n    public function index()\n    {\n        return view('account.email.form')->with('user', auth()->user());\n    }\n\n    public function save(StoreSettingsAccountEmail $request)\n    {\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        auth()->user()->update($request->only('email'));\n\n        return redirect()\n            ->route('settings.account')\n            ->with('success', __('settings.account.email_success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Account/PasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Account;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreSettingsAccount;\nuse App\\Jobs\\Users\\NewPassword;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Hash;\n\nclass PasswordController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('password.confirm');\n    }\n\n    public function index()\n    {\n        return view('account.password.form')->with('user', auth()->user());\n    }\n\n    public function save(StoreSettingsAccount $request)\n    {\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = [\n            'password' => Hash::make($request->post('password_new')),\n        ];\n        auth()->user()->update($data);\n        NewPassword::dispatch(auth()->user());\n\n        Auth::logoutOtherDevices($request->get('password_new'));\n\n        return redirect()\n            ->route('settings.account')\n            ->with('success', __('settings.account.password_success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Account/SocialController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Account;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreSettingsAccount;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Hash;\n\nclass SocialController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware(['identity', 'password.confirm']);\n    }\n\n    public function index()\n    {\n        if (empty(auth()->user()->provider)) {\n            return redirect()\n                ->route('settings.account')\n                ->with('error', __('settings.account.social.error'));\n        }\n\n        return view('account.social.form')->with('user', auth()->user());\n    }\n\n    public function save(StoreSettingsAccount $request)\n    {\n        if (empty(auth()->user()->provider)) {\n            return redirect()\n                ->route('settings.account')\n                ->with('error', __('settings.account.social.error'));\n        }\n\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $data['provider'] = null;\n        $data['provider_id'] = null;\n        $data['password'] = Hash::make($request->post('password_new'));\n\n        auth()->user()->update($data);\n        Auth::logoutOtherDevices($request->get('password_new'));\n\n        return redirect()\n            ->route('settings.account')\n            ->with('success', __('settings.account.social.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/Public/CampaignController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\Public;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\Api\\CampaignService;\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\Request;\n\nclass CampaignController extends Controller\n{\n    protected CampaignService $service;\n\n    public function __construct(CampaignService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function index(Request $request)\n    {\n        return response()\n            ->json(\n                $this->service\n                    ->request($request)\n                    ->search()\n            )\n            ->header('Expires', Carbon::now()->addDays(1)->toDateTimeString());\n    }\n\n    public function setup()\n    {\n        return response()\n            ->json(\n                $this->service\n                    ->setup()\n            )\n            ->header('Expires', Carbon::now()->addDays(1)->toDateTimeString());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/Public/HallOfFameController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\Public;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\Subscribers\\HallOfFameService;\nuse Carbon\\Carbon;\n\nclass HallOfFameController extends Controller\n{\n    protected HallOfFameService $service;\n\n    public function __construct(HallOfFameService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function index()\n    {\n        return response()->json($this->service->subscribers())\n            ->header('Expires', Carbon::now()->addDays(1)->toDateTimeString());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/Public/KbController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\Public;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\Api\\KbService;\nuse Carbon\\Carbon;\n\nclass KbController extends Controller\n{\n    protected KbService $service;\n\n    public function __construct(KbService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function index()\n    {\n        return response()->json($this->service->api())\n            ->header('Expires', Carbon::now()->addDays(7)->toDateTimeString());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/Public/ShowcaseController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\Public;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\Api\\ShowcaseService;\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\Request;\n\nclass ShowcaseController extends Controller\n{\n    public function __construct(protected ShowcaseService $service) {}\n\n    public function index(Request $request)\n    {\n        return response()\n            ->json(\n                $this->service\n                    ->request($request)\n                    ->search()\n            )\n            ->header('Expires', Carbon::now()->addDays(1)->toDateTimeString());\n    }\n\n    public function setup(Request $request)\n    {\n        return response()\n            ->json(\n                $this->service\n                    ->request($request)\n                    ->search()\n            )\n            ->header('Expires', Carbon::now()->addDays(1)->toDateTimeString());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/Public/VoteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\Public;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Resources\\VoteResource;\nuse App\\Models\\CommunityVote;\nuse App\\Services\\Api\\VoteService;\n\nclass VoteController extends Controller\n{\n    protected VoteService $service;\n\n    public function __construct(VoteService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function index()\n    {\n        $votes = CommunityVote::published()\n            ->orderBy('visible_at', 'DESC')\n            ->paginate();\n\n        return VoteResource::collection($votes);\n    }\n\n    public function show(CommunityVote $communityVote)\n    {\n        return new VoteResource($communityVote);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/AbilityApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreAbility as Request;\nuse App\\Http\\Resources\\AbilityResource as Resource;\nuse App\\Models\\Ability;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass AbilityApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->abilities()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Ability $ability)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $ability->entity);\n\n        return new Resource($ability);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.ability')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Ability::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Ability $ability)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $ability->entity);\n        $ability->update($request->all());\n        $this->crudSave($ability, $request->validated());\n\n        return new Resource($ability);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Ability $ability)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $ability->entity);\n        $ability->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/ApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Controllers\\Controller;\n\nclass ApiController extends Controller {}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/ApplicationApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\Campaigns\\ApproveApplication;\nuse App\\Http\\Requests\\Campaigns\\RejectApplication;\nuse App\\Http\\Resources\\ApplicationResource as Resource;\nuse App\\Models\\Application;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\ApplicationService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass ApplicationApiController extends ApiController\n{\n    public function __construct(protected ApplicationService $service)\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('applications', $campaign);\n\n        return Resource::collection($campaign\n            ->applications()\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Application $application)\n    {\n        $this->authorize('applications', $campaign);\n\n        return new Resource($application);\n    }\n\n    /**\n     * @return JsonResponse\n     */\n    public function reject(RejectApplication $request, Campaign $campaign, Application $application)\n    {\n        $this->authorize('applications', $campaign);\n\n        $request->merge(['action' => 'reject']);\n\n        $note = $this->service\n            ->user(auth()->user())\n            ->campaign($campaign)\n            ->application($application)\n            ->process($request->only('action', 'reason'));\n\n        return response()->json([$note]);\n    }\n\n    /**\n     * @return JsonResponse\n     */\n    public function approve(ApproveApplication $request, Campaign $campaign, Application $application)\n    {\n        $this->authorize('applications', $campaign);\n\n        if (! $campaign->canHaveMoreMembers()) {\n            return response()->json(['Campaign is full, please boost it.']);\n        }\n\n        $request->merge(['action' => 'approve']);\n\n        $note = $this->service\n            ->user(auth()->user())\n            ->campaign($campaign)\n            ->application($application)\n            ->process($request->only('role_id', 'action', 'reason'));\n\n        return response()->json([$note]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/AttributeTemplateApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreAttributeTemplate as Request;\nuse App\\Http\\Resources\\AttributeTemplateResource as Resource;\nuse App\\Models\\AttributeTemplate;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\EntityRelationsServiceFactory;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass AttributeTemplateApiController extends MiscApiController\n{\n    protected AttributeService $attributeService;\n\n    public function __construct(\n        EntitySaveService $entitySaveService,\n        EntityRelationsServiceFactory $relationsFactory,\n        AttributeService $attributeService,\n    ) {\n        parent::__construct($entitySaveService, $relationsFactory);\n        $this->attributeService = $attributeService;\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->attributeTemplates()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, AttributeTemplate $attributeTemplate)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $attributeTemplate->entity);\n\n        return new Resource($attributeTemplate);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.attribute_template')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = AttributeTemplate::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, AttributeTemplate $attributeTemplate)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $attributeTemplate->entity);\n        $attributeTemplate->update($request->all());\n        $this->crudSave($attributeTemplate, $request->validated());\n\n        return new Resource($attributeTemplate);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, AttributeTemplate $attributeTemplate)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $attributeTemplate->entity);\n        $attributeTemplate->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/BookmarkApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreBookmark as Request;\nuse App\\Http\\Resources\\BookmarkResource as Resource;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass BookmarkApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->bookmarks()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Bookmark $bookmark)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $bookmark);\n\n        return new Resource($bookmark);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', Bookmark::class);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        /** @var Bookmark $model */\n        $model = Bookmark::create($data);\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Bookmark $bookmark)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $bookmark);\n        $bookmark->update($request->all());\n\n        return new Resource($bookmark);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Bookmark $bookmark)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $bookmark);\n        $bookmark->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CalendarApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreCalendar as Request;\nuse App\\Http\\Resources\\CalendarResource as Resource;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Sanitizers\\CalendarSanitizer;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\EntityRelationsServiceFactory;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass CalendarApiController extends MiscApiController\n{\n    protected CalendarSanitizer $sanitizer;\n\n    public function __construct(\n        EntitySaveService $entitySaveService,\n        EntityRelationsServiceFactory $relationsFactory,\n        CalendarSanitizer $sanitizer,\n    ) {\n        parent::__construct($entitySaveService, $relationsFactory);\n        $this->sanitizer = $sanitizer;\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->calendars()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $calendar->entity);\n\n        return new Resource($calendar);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.calendar')), $campaign]);\n\n        $request->merge($this->sanitizer->request($request)->sanitize());\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        /** @var Calendar $model */\n        $model = Calendar::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $calendar->entity);\n        $request->merge($this->sanitizer->request($request)->sanitize());\n        $calendar->update($request->all());\n        $this->crudSave($calendar, $request->validated());\n\n        return new Resource($calendar);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $calendar->entity);\n        $calendar->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CalendarEventApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\ReminderResource as Resource;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass CalendarEventApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $calendar->entity);\n\n        return Resource::collection($calendar\n            ->calendarEvents()\n            ->paginate());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CalendarWeatherApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\AddCalendarWeather as Request;\nuse App\\Http\\Resources\\CalendarWeatherResource as Resource;\nuse App\\Models\\Calendar;\nuse App\\Models\\CalendarWeather;\nuse App\\Models\\Campaign;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass CalendarWeatherApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($calendar\n            ->calendarWeather()\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function show(Campaign $campaign, Calendar $calendar, CalendarWeather $calendarWeather)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $calendar->entity);\n\n        return new Resource($calendarWeather);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $calendar->entity);\n        $data = $request->all();\n        $data['calendar_id'] = $calendar->id;\n        $model = CalendarWeather::create($data);\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function update(Request $request, Campaign $campaign, Calendar $calendar, CalendarWeather $calendarWeather)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $calendar->entity);\n        $calendarWeather->update($request->all());\n\n        return new Resource($calendarWeather);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Calendar $calendar, CalendarWeather $calendarWeather)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $calendar->entity);\n        $calendarWeather->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/Calendars/AdvancerApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1\\Calendars;\n\nuse App\\Http\\Controllers\\Api\\v1\\ApiController;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Services\\Calendars\\AdvancerService;\nuse Illuminate\\Http\\JsonResponse;\n\nclass AdvancerApiController extends ApiController\n{\n    protected AdvancerService $service;\n\n    public function __construct(AdvancerService $service)\n    {\n        $this->service = $service;\n    }\n\n    /**\n     * @return JsonResponse\n     */\n    public function advance(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $calendar->entity);\n        if ($calendar->missingDetails()) {\n            return response()->json(['Invalid calendar config'], 406);\n        }\n        $this->service->calendar($calendar)->advance();\n\n        return response()->json(['date' => $calendar->date]);\n    }\n\n    /**\n     * @return JsonResponse\n     */\n    public function retreat(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $calendar->entity);\n        if ($calendar->missingDetails()) {\n            return response()->json(['Invalid calendar config'], 406);\n        }\n        $this->service->calendar($calendar)->retreat();\n\n        return response()->json(['date' => $calendar->date]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CampaignApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreCampaign as Request;\nuse App\\Http\\Resources\\CampaignResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDescription;\nuse App\\Services\\Campaign\\CreateService;\nuse App\\Services\\Campaign\\DeletionService;\n\nclass CampaignApiController extends ApiController\n{\n    public function __construct(\n        protected CreateService $createService,\n        protected DeletionService $deletionService,\n    ) {}\n\n    public function index(\\Illuminate\\Http\\Request $request)\n    {\n        $campaigns = $request\n            ->user()\n            ->campaigns()\n            ->with(['members', 'setting', 'roles', 'applications', 'members.user', 'description'])\n            ->lastSync(request()->get('lastSync'))\n            ->paginate();\n\n        return CampaignResource::collection($campaigns);\n    }\n\n    public function show(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $campaign->load('description');\n        $resource = new CampaignResource($campaign);\n\n        return $resource->withMentions();\n    }\n\n    public function store(Request $request)\n    {\n        $this->authorize('create', Campaign::class);\n\n        $campaign = $this->createService->user($request->user())\n            ->request($request)\n            ->create();\n        $campaign->refresh();\n\n        return new CampaignResource($campaign);\n    }\n\n    public function update(Request $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n        $campaign->update($request->all());\n\n        $descriptionData = $request->only(['description', 'excerpt']);\n        if (! empty($descriptionData)) {\n            CampaignDescription::updateOrCreate(['campaign_id' => $campaign->id], $descriptionData);\n        }\n\n        return new CampaignResource($campaign->refresh());\n    }\n\n    public function destroy(Request $request, Campaign $campaign)\n    {\n        $this->authorize('delete', $campaign);\n\n        $this->deletionService\n            ->campaign($campaign)\n            ->user($request->user())\n            ->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CampaignDashboardWidgetApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Enums\\Widget;\nuse App\\Http\\Requests\\StoreCampaignDashboardWidget as Request;\nuse App\\Http\\Resources\\CampaignDashboardWidgetResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass CampaignDashboardWidgetApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection(\n            $campaign->widgets()\n                ->lastSync(request()->get('lastSync'))\n                ->paginate()\n        );\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        $this->authorize('update', $campaign);\n\n        return new Resource($campaignDashboardWidget);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n        if ($request->input('widget') === Widget::Gallery->value) {\n            $this->authorize('galleryWidget', $campaign);\n        }\n\n        $data = array_merge(['campaign_id' => $campaign->id], $request->all());\n        $model = CampaignDashboardWidget::create($data);\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        $this->authorize('update', $campaign);\n        $campaignDashboardWidget->update($request->all());\n\n        return new Resource($campaignDashboardWidget);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        $this->authorize('update', $campaign);\n        $campaignDashboardWidget->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CampaignImageApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\Campaigns\\GalleryImageStore;\nuse App\\Http\\Requests\\Campaigns\\GalleryImageUpdate;\nuse App\\Http\\Resources\\ImageResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\nuse App\\Services\\Gallery\\SummernoteService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\n\nclass CampaignImageApiController extends ApiController\n{\n    protected SummernoteService $service;\n\n    public function __construct(SummernoteService $summernoteService)\n    {\n        $this->service = $summernoteService;\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection(\n            $campaign\n                ->images()\n                ->where('is_default', false)\n                ->defaultOrder()\n                ->lastSync(request()->get('lastSync'))\n                ->paginate(auth()->user()->isSubscriber() ? 100 : 45)\n        );\n    }\n\n    public function show(Campaign $campaign, Image $image)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n\n        return new Resource($image);\n    }\n\n    public function store(GalleryImageStore $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n        $images = $this->service\n            ->user($request->user())\n            ->campaign($campaign)\n            ->store($request);\n\n        return Resource::collection($images);\n    }\n\n    public function update(GalleryImageUpdate $request, Campaign $campaign, Image $image)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n        $image->update($request->only('name', 'folder_id'));\n\n        return new Resource($image);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Image $image)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n        $image->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CampaignRoleApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\CampaignUserRoleResource as Resource;\nuse App\\Models\\Campaign;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass CampaignRoleApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->roles()\n            ->paginate());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CampaignStyleApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Http\\Requests\\StoreCampaignStyle as Request;\nuse App\\Http\\Resources\\CampaignStyleResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignStyle;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass CampaignStyleApiController extends ApiController\n{\n    public function __construct()\n    {\n        $this->middleware(Boosted::class, ['except' => 'index']);\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection(\n            $campaign\n                ->styles()\n                ->paginate()\n        );\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, CampaignStyle $campaignStyle)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n\n        return new Resource($campaignStyle);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n        $model = new CampaignStyle($request->all());\n        $model->campaign_id = $campaign->id;\n        $model->save();\n        $model->refresh();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, CampaignStyle $campaignStyle)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n        $campaignStyle->update($request->all());\n\n        return new Resource($campaignStyle);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, CampaignStyle $campaignStyle)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n        $campaignStyle->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/Campaigns/CategoryStatusController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1\\Campaigns;\n\nuse App\\Http\\Controllers\\Api\\v1\\ApiController;\nuse App\\Http\\Resources\\Api\\CategoryStatusResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\CategoryStatus;\n\nclass CategoryStatusController extends ApiController\n{\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        $statuses = CategoryStatus::get();\n\n        return CategoryStatusResource::collection($statuses);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/Campaigns/EntityTypeApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1\\Campaigns;\n\nuse App\\Http\\Controllers\\Api\\v1\\ApiController;\nuse App\\Http\\Middleware\\Campaigns\\Premium;\nuse App\\Http\\Requests\\StoreEntityType;\nuse App\\Http\\Resources\\EntityTypeResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\EntityTypeService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EntityTypeApiController extends ApiController\n{\n    public function __construct(protected EntityTypeService $entityTypeService)\n    {\n        $this->middleware(Premium::class, ['except' => ['index', 'show']]);\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection(EntityType::inCampaign($campaign)->paginate());\n    }\n\n    public function show(Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('access', $campaign);\n        if ($entityType->campaign_id !== $campaign->id) {\n            abort(403);\n        }\n\n        return new Resource($entityType);\n    }\n\n    public function store(StoreEntityType $request, Campaign $campaign)\n    {\n        $this->authorize('setting', $campaign);\n\n        $error = '. Consider upgrading to a higher tier to unlock a higher limit';\n\n        $limit = config('limits.campaigns.modules.premium');\n        if ($campaign->isWyvern()) {\n            $limit = config('limits.campaigns.modules.wyvern');\n        } elseif ($campaign->isElemental()) {\n            $limit = config('limits.campaigns.modules.elemental');\n            $error = '';\n        }\n\n        if ($campaign->entityTypes->count() >= $limit) {\n            return response()->json(['error' => 'Max number of custom modules reached (:count/:max)' . $error, [\n                'count' => $campaign->entityTypes->count(),\n                'max' => $limit,\n            ]], 401);\n        }\n\n        $entityType = $this->entityTypeService\n            ->campaign($campaign)\n            ->request($request)\n            ->save();\n\n        return new Resource($entityType);\n    }\n\n    public function update(StoreEntityType $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n        $this->authorize('update', [$entityType, $campaign]);\n\n        $entityType = $this->entityTypeService\n            ->campaign($campaign)\n            ->request($request)\n            ->entityType($entityType)\n            ->save();\n\n        return new Resource($entityType);\n    }\n\n    public function destroy(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n        $this->authorize('delete', [$entityType, $campaign]);\n\n        $this->entityTypeService\n            ->campaign($campaign)\n            ->entityType($entityType)\n            ->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/Campaigns/UserApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1\\Campaigns;\n\nuse App\\Http\\Controllers\\Api\\v1\\ApiController;\nuse App\\Http\\Requests\\API\\UpdateUserRole;\nuse App\\Http\\Resources\\UserResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse App\\Services\\Campaign\\MemberService;\nuse Illuminate\\Http\\JsonResponse;\n\nclass UserApiController extends ApiController\n{\n    protected MemberService $service;\n\n    public function __construct(MemberService $memberService)\n    {\n        $this->service = $memberService;\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n\n        return UserResource::collection($campaign->users()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    public function show(Campaign $campaign, User $user)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $campaign);\n\n        return UserResource::collection($campaign->users()->where('user_id', '=', $user->id)\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * Add a single user to a role\n     *\n     * @return JsonResponse\n     */\n    public function add(UpdateUserRole $request, Campaign $campaign)\n    {\n        $result = $this->service\n            ->fromRequest($request)\n            ->campaign($campaign)\n            ->add();\n\n        if ($result) {\n            return response()->json([\n                'data' => 'role successfully added to user',\n            ]);\n        }\n\n        return response()->json(['error' => 'Invalid input'], 422);\n    }\n\n    /**\n     * Remove a role from a user\n     *\n     * @return JsonResponse\n     */\n    public function remove(UpdateUserRole $request, Campaign $campaign)\n    {\n        $result = $this->service\n            ->fromRequest($request)\n            ->campaign($campaign)\n            ->remove();\n\n        if ($result) {\n            return response()->json([\n                'data' => 'role successfully removed from the user',\n            ]);\n        }\n\n        return response()->json(['error' => 'Invalid input'], 422);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CharacterApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreCharacter as Request;\nuse App\\Http\\Resources\\CharacterResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Character;\nuse App\\Models\\EntityType;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass CharacterApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return CharacterResource::collection(\n            $campaign\n                ->characters()\n                ->withApi()\n                ->filter(request()->all())\n                ->lastSync(request()->get('lastSync'))\n                ->paginate(),\n        );\n    }\n\n    /**\n     * @return CharacterResource\n     *\n     * @throws AuthorizationException\n     */\n    public function show(Campaign $campaign, Character $character)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $character->entity);\n\n        return new CharacterResource($character);\n    }\n\n    /**\n     * @return CharacterResource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [\n            EntityType::find(config('entities.ids.character')),\n            $campaign,\n        ]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        /** @var Character $model */\n        $model = Character::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new CharacterResource($model);\n    }\n\n    /**\n     * @return CharacterResource\n     *\n     * @throws AuthorizationException\n     */\n    public function update(\n        Request $request,\n        Campaign $campaign,\n        Character $character,\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $character->entity);\n        $character->update($request->all());\n        $this->crudSave($character, $request->validated());\n\n        return new CharacterResource($character);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Character $character)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $character->entity);\n        $character->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/ConversationApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreConversation as Request;\nuse App\\Http\\Resources\\ConversationResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Conversation;\nuse App\\Models\\EntityType;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass ConversationApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->conversations()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $conversation->entity);\n\n        return new Resource($conversation);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.conversation')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        /** @var Conversation $model */\n        $model = Conversation::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $conversation->entity);\n        $conversation->update($request->all());\n        $this->crudSave($conversation, $request->validated());\n\n        return new Resource($conversation);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $conversation->entity);\n        $conversation->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/ConversationMessageApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreConversationMessage as RequestMessage;\nuse App\\Http\\Resources\\ConversationMessageResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Conversation;\nuse App\\Models\\ConversationMessage;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass ConversationMessageApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $conversation->entity);\n\n        return Resource::collection(\n            $conversation\n                ->messages()\n                ->lastSync(request()->get('lastSync'))\n                ->paginate()\n        );\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(\n        Campaign $campaign,\n        Conversation $conversation,\n        ConversationMessage $conversationMessage\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $conversation->entity);\n\n        return new Resource($conversationMessage);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(RequestMessage $requestMessage, Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $conversation->entity);\n        $model = ConversationMessage::create($requestMessage->all());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(\n        RequestMessage $requestMessage,\n        Campaign $campaign,\n        Conversation $conversation,\n        ConversationMessage $conversationMessage\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $conversation->entity);\n        $conversationMessage->update($requestMessage->all());\n\n        return new Resource($conversationMessage);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        Request $request,\n        Campaign $campaign,\n        Conversation $conversation,\n        ConversationMessage $conversationMessage\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $conversation->entity);\n        $conversationMessage->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/ConversationParticipantApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreConversationParticipant as RequestParticipant;\nuse App\\Http\\Resources\\ConversationParticipantResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Conversation;\nuse App\\Models\\ConversationParticipant;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass ConversationParticipantApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $conversation->entity);\n\n        return Resource::collection($conversation->participants()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(\n        Campaign $campaign,\n        Conversation $conversation,\n        ConversationParticipant $conversationParticipant\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $conversation->entity);\n\n        return new Resource($conversationParticipant);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(RequestParticipant $requestParticipant, Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $conversation->entity);\n        $model = ConversationParticipant::create($requestParticipant->all());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(\n        RequestParticipant $requestParticipant,\n        Campaign $campaign,\n        Conversation $conversation,\n        ConversationParticipant $conversationParticipant\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $conversation->entity);\n        $conversationParticipant->update($requestParticipant->all());\n\n        return new Resource($conversationParticipant);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        Request $request,\n        Campaign $campaign,\n        Conversation $conversation,\n        ConversationParticipant $conversationParticipant\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $conversation->entity);\n        $conversationParticipant->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/CreatureApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreCreature as Request;\nuse App\\Http\\Resources\\CreatureResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Creature;\nuse App\\Models\\EntityType;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass CreatureApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->creatures()\n            ->filter(request()->all())\n            ->withApi()\n            ->has('entity')\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Creature $creature)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $creature->entity);\n\n        return new Resource($creature);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.creature')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Creature::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Creature $creature)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $creature->entity);\n        $creature->update($request->all());\n        $this->crudSave($creature, $request->validated());\n\n        return new Resource($creature);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Creature $creature)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $creature->entity);\n        $creature->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/DefaultThumbnailApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Http\\Requests\\Campaigns\\DestroyDefaultThumbnail;\nuse App\\Http\\Requests\\Campaigns\\StoreDefaultThumbnail;\nuse App\\Http\\Resources\\EntityDefaultThumbnailResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\Campaign\\DefaultImageService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass DefaultThumbnailApiController extends ApiController\n{\n    public function __construct(protected DefaultImageService $defaultImageService)\n    {\n        $this->middleware(Boosted::class)->except('index');\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign->defaultImages());\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function upload(StoreDefaultThumbnail $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        /** @var EntityType $entityType */\n        $entityType = EntityType::inCampaign($campaign)->find($request->post('entity_type_id'));\n        $this->defaultImageService->campaign($campaign)\n            ->user($request->user())\n            ->entityType($entityType);\n        if ($this->defaultImageService->save($request)) {\n            return response()->json([\n                'data' => 'Default thumbnail successfully uploaded',\n            ]);\n        }\n\n        return response()->json(['error' => 'Invalid input'], 422);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function delete(DestroyDefaultThumbnail $request, Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        /** @var EntityType $entityType */\n        $entityType = EntityType::inCampaign($campaign)->find($request->post('entity_type_id'));\n        $result = $this->defaultImageService\n            ->campaign($campaign)\n            ->user($request->user())\n            ->entityType($entityType)\n            ->destroy();\n\n        if ($result) {\n            return response()->json([\n                'data' => 'Default thumbnail successfully deleted',\n            ]);\n        }\n\n        return response()->json(['error' => 'Invalid input'], 422);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/DiceRollApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreDiceRoll as Request;\nuse App\\Http\\Resources\\DiceRollResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\DiceRoll;\nuse App\\Models\\EntityType;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass DiceRollApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->diceRolls()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, DiceRoll $diceRoll)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $diceRoll->entity);\n\n        return new Resource($diceRoll);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.dice_roll')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = DiceRoll::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, DiceRoll $diceRoll)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $diceRoll->entity);\n        $diceRoll->update($request->all());\n        $this->crudSave($diceRoll, $request->validated());\n\n        return new Resource($diceRoll);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, DiceRoll $diceRoll)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $diceRoll->entity);\n        $diceRoll->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/Entities/Attributes/PatchController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1\\Entities\\Attributes;\n\nuse App\\Http\\Controllers\\Api\\v1\\ApiController;\nuse App\\Http\\Requests\\SaveAttributesApi;\nuse App\\Http\\Resources\\AttributeResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Api\\BulkAttributeService;\n\nclass PatchController extends ApiController\n{\n    public function __construct(protected BulkAttributeService $service) {}\n\n    public function patch(SaveAttributesApi $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n\n        $attributes = $request->get('attribute', []);\n        $this->service\n            ->entity($entity)\n            ->save($attributes)\n            ->touch();\n\n        return Resource::collection($entity->attributes()->with('entity')->get());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/Entities/Attributes/PutController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1\\Entities\\Attributes;\n\nuse App\\Http\\Controllers\\Api\\v1\\ApiController;\nuse App\\Http\\Requests\\SaveAttributesApi;\nuse App\\Http\\Resources\\AttributeResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Api\\BulkAttributeService;\n\nclass PutController extends ApiController\n{\n    public function __construct(protected BulkAttributeService $service) {}\n\n    public function put(SaveAttributesApi $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n\n        $attributes = $request->get('attribute', []);\n\n        $this->service\n            ->entity($entity)\n            ->deleteOld()\n            ->save($attributes)\n            ->touch();\n\n        return Resource::collection($entity->attributes()->with('entity')->get());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/Entities/ReminderApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1\\Entities;\n\nuse App\\Http\\Controllers\\Api\\v1\\ApiController;\nuse App\\Http\\Requests\\API\\StoreReminder as Request;\nuse App\\Http\\Resources\\ReminderResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Reminder;\n\nclass ReminderApiController extends ApiController\n{\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->reminders()->paginate());\n    }\n\n    public function show(Campaign $campaign, Entity $entity, Reminder $reminder)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n        $this->authorize('entity', [$reminder, $entity]);\n\n        return new Resource($reminder);\n    }\n\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->all();\n        if (! isset($data['length'])) {\n            $data['length'] = 1;\n        }\n        $model = new Reminder($data);\n        $model->remindable_id = $entity->id;\n        $model->remindable_type = Entity::class;\n        $model->save();\n\n        return new Resource($model);\n    }\n\n    public function update(Request $request, Campaign $campaign, Entity $entity, Reminder $reminder)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $this->authorize('entity', [$reminder, $entity]);\n        $reminder->update($request->all());\n\n        return new Resource($reminder);\n    }\n\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Entity $entity,\n        Reminder $reminder\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $this->authorize('entity', [$reminder, $entity]);\n        $reminder->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityAbilityApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreEntityAbility as Request;\nuse App\\Http\\Resources\\EntityAbilityResource as Resource;\nuse App\\Models\\Ability;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Support\\Collection;\n\nclass EntityAbilityApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->abilities()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Entity $entity, EntityAbility $entityAbility)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new Resource($entityAbility);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->all();\n        $data['entity_id'] = $entity->id;\n        if (isset($data['abilities']) && is_array($data['abilities'])) {\n            $models = new Collection;\n            foreach ($data['abilities'] as $abilityId) {\n                $ability = Ability::find($abilityId);\n                if (! $ability) {\n                    continue;\n                }\n                $data['ability_id'] = $ability->id;\n                $models->add(EntityAbility::create($data));\n            }\n\n            return Resource::collection($models);\n        }\n\n        $model = EntityAbility::create($data);\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Entity $entity, EntityAbility $entityAbility)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $entityAbility->update($request->all());\n\n        return new Resource($entityAbility);\n    }\n\n    /**\n     * @param  Request  $request\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Entity $entity,\n        EntityAbility $entityAbility\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $entityAbility->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\API\\PatchEntity;\nuse App\\Http\\Requests\\API\\StoreEntities;\nuse App\\Http\\Resources\\EntityResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Services\\Api\\BulkEntityCreatorService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass EntityApiController extends ApiController\n{\n    public function __construct(\n        protected EntitySaveService $entitySaveService,\n        protected BulkEntityCreatorService $bulkEntityCreatorService,\n    ) {}\n\n    public function index(Campaign $campaign)\n    {\n        if (config('app.debug')) {\n            DB::enableQueryLog();\n        }\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign->entities()\n            ->apiFilter($campaign, request()->all())\n            ->lastSync(request()->get('lastSync'))\n            ->paginate()\n            ->appends(request()->except(['page', 'lastSync'])));\n    }\n\n    public function show(Campaign $campaign, Entity $entity)\n    {\n        if (config('app.debug')) {\n            DB::enableQueryLog();\n        }\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n        $resource = new Resource($entity);\n\n        return $resource->withMisc();\n    }\n\n    public function put(StoreEntities $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [$campaign, $entityType]);\n\n        $entities = [];\n\n        $this->bulkEntityCreatorService\n            ->campaign($campaign)\n            ->entityType($entityType)\n            ->user($request->user());\n\n        foreach ($request->get('entities', []) as $entity) {\n            $entities[] = $this->bulkEntityCreatorService->data($entity)->create();\n        }\n\n        return Resource::collection($entities);\n    }\n\n    public function edit(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n\n        if ($entity->entityType->isStandard()) {\n            return response()->json(['error' => 'Only entities of custom modules can be deleted here'], 401);\n        }\n\n        $entity->update($request->all());\n\n        return new Resource($entity);\n    }\n\n    public function patch(PatchEntity $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $keys = ['name', 'type', 'is_private', 'is_template', 'tooltip', 'entry', 'image_uuid', 'header_uuid'];\n        if ($entity->entityType->isCustom()) {\n            $keys[] = 'parent_id';\n        }\n\n        $data = $request->only($keys);\n\n        $this->entitySaveService->save($entity->fill($data), $data);\n\n        return new Resource($entity);\n    }\n\n    public function destroy(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $entity);\n\n        if ($entity->entityType->isStandard()) {\n            return response()->json(['error' => 'Only entities of custom modules can be deleted here'], 401);\n        }\n\n        $entity->delete();\n\n        return response()->json(['success'], 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityArchiveApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\EntityResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\ArchiveService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass EntityArchiveApiController extends ApiController\n{\n    protected ArchiveService $service;\n\n    public function __construct(ArchiveService $archiveService)\n    {\n        $this->service = $archiveService;\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        if (config('app.debug')) {\n            DB::enableQueryLog();\n        }\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign->entities()\n            ->apiFilter($campaign, request()->all())\n            ->lastSync(request()->get('lastSync'))\n            ->whereNotNull('archived_at')\n            ->paginate()\n            ->appends(request()->except(['page', 'lastSync'])));\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function switch(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n\n        $this->service->entity($entity)->toggle();\n\n        $resource = new Resource($entity);\n\n        return $resource->withMisc();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityAssetApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Http\\Requests\\StoreEntityAsset as Request;\nuse App\\Http\\Resources\\EntityAssetResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAsset;\nuse App\\Services\\EntityFileService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EntityAssetApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->assets()->with(['entity', 'image'])->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Entity $entity, EntityAsset $entityAsset)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new Resource($entityAsset);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->all();\n        $data['entity_id'] = $entity->id;\n\n        if ($request->get('type_id') == EntityAssetType::file->value) {\n            /** @var EntityFileService $service */\n            $service = app()->make(EntityFileService::class);\n            $files = $service\n                ->entity($entity)\n                ->campaign($campaign)\n                ->upload($request, 'file')\n                ->files();\n\n            return new Resource($files[0]);\n        }\n        $model = EntityAsset::create($data);\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Entity $entity, EntityAsset $entityAsset)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $entityAsset->update($request->all());\n\n        return new Resource($entityAsset);\n    }\n\n    /**\n     * @param  Request  $request\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Entity $entity,\n        EntityAsset $entityAsset\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $entityAsset->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityAttributeApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreAttribute as Request;\nuse App\\Http\\Resources\\AttributeResource as Resource;\nuse App\\Models\\Attribute;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EntityAttributeApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->attributes()->with('entity')->get());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Entity $entity, Attribute $attribute)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new Resource($attribute);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->all();\n        $data['entity_id'] = $entity->id;\n        $model = Attribute::create($data);\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Entity $entity, Attribute $attribute)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->all();\n        $data['entity_id'] = $entity->id;\n        $attribute->update($data);\n\n        return new Resource($attribute);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Entity $entity, Attribute $attribute)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $attribute->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityImageApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Gallery\\UploadFile;\nuse App\\Http\\Resources\\Api\\EntityImagesResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Gallery\\UploadService;\nuse Illuminate\\Http\\Request;\n\nclass EntityImageApiController extends Controller\n{\n    public function __construct(public UploadService $uploadService) {}\n\n    public function show(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new EntityImagesResource($entity);\n    }\n\n    public function put(UploadFile $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $this->authorize('galleryUpload', $campaign);\n        try {\n            $this->uploadService\n                ->campaign($campaign)\n                ->user($request->user())\n                ->file($request->file('file'));\n            $image = $this->uploadService->image();\n            $field = $request->filled('is_header') ? 'header_uuid' : 'image_uuid';\n            $entity->update([$field => $image->id]);\n\n            return new EntityImagesResource($entity);\n        } catch (TranslatableException $e) {\n            return response()->json(\n                ['error' => $e->getTranslatedMessage()],\n                421\n            );\n        }\n    }\n\n    public function destroy(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n\n        $field = $request->filled('is_header') ? 'header_uuid' : 'image_uuid';\n        $entity->update([$field => null]);\n\n        return new EntityImagesResource($entity);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityInventoryApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\UpdateInventory as Request;\nuse App\\Http\\Resources\\InventoryResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Inventory;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EntityInventoryApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->inventories()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Entity $entity, Inventory $inventory)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new Resource($inventory);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->all();\n        $data['entity_id'] = $entity->id;\n        $model = Inventory::create($data);\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Entity $entity, Inventory $inventory)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $inventory->update($request->all());\n\n        return new Resource($inventory);\n    }\n\n    /**\n     * @param  Request  $request\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Entity $entity,\n        Inventory $inventory\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $inventory->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityMentionApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\EntityMentionResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EntityMentionApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->mentions()->paginate());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityMoveApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Requests\\MoveEntity as Request;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\MoveService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\n\nclass EntityMoveApiController extends ApiController\n{\n    protected MoveService $service;\n\n    public function __construct(MoveService $service)\n    {\n        $this->middleware('auth');\n\n        $this->service = $service;\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function transfer(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $count = 0;\n        $copy = $request->has('copy');\n        try {\n            foreach ($request->entities as $id) {\n                $entity = Entity::find($id);\n                if ($this->authorize('update', $entity)) {\n                    $this->service\n                        ->entity($entity)\n                        ->campaign($campaign)\n                        ->user($request->user())\n                        ->to($request->campaign_id)\n                        ->copy($copy)\n                        ->validate()\n                        ->process();\n                    $count++;\n                }\n            }\n\n            if ($copy) {\n                return response()->json(['success' => 'Succesfully copied ' . $count . ' entities.']);\n            }\n\n            return response()->json(['success' => 'Succesfully transfered ' . $count . ' entities.']);\n        } catch (TranslatableException $e) {\n            return response()->json([\n                'error' => true,\n                'message' => $e->getTranslatedMessage(),\n            ]);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityPermissionApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\PermissionTestRequest;\nuse App\\Http\\Requests\\StoreEntityPermission as Request;\nuse App\\Http\\Resources\\EntityPermissionResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\Entity;\nuse App\\Services\\Api\\ApiPermissionService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EntityPermissionApiController extends ApiController\n{\n    protected ApiPermissionService $apiPermissionService;\n\n    /**\n     * Create a new controller instance.\n     */\n    public function __construct(ApiPermissionService $apiPermissionService)\n    {\n        $this->apiPermissionService = $apiPermissionService;\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->permissions);\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Entity $entity, CampaignPermission $permission)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new Resource($permission);\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n\n        $model = $this->apiPermissionService->saveEntity($request, $entity);\n\n        return Resource::collection($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Entity $entity, CampaignPermission $permission)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $permission->update($request->only('access', 'action'));\n\n        return new Resource($permission);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Entity $entity, CampaignPermission $permission)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $permission->delete();\n\n        return response()->json(null, 204);\n    }\n\n    /**\n     * @return JsonResponse\n     */\n    public function test(PermissionTestRequest $request, Campaign $campaign)\n    {\n        $permissionTest = $this->apiPermissionService->entityPermissionTest($request, $campaign);\n\n        return response()->json($permissionTest);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityRecoveryApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\RecoverEntity as Request;\nuse App\\Http\\Resources\\EntityResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Services\\Entity\\RecoveryService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EntityRecoveryApiController extends ApiController\n{\n    protected RecoveryService $service;\n\n    public function __construct(RecoveryService $service)\n    {\n        $this->middleware('auth');\n\n        $this->service = $service;\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        return Resource::collection($campaign\n            ->entities()->onlyTrashed()\n            ->paginate());\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function recover(Request $request, Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        if (! $campaign->boosted()) {\n            return response()->json(null, 204);\n        }\n        $this->service->campaign($campaign)->user($request->user())->recover($request->entities);\n\n        return response()->json(['success' => 'Successfully recovered deleted entities']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityRelationApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreRelation as Request;\nuse App\\Http\\Requests\\UpdateRelation as UpdateRequest;\nuse App\\Http\\Resources\\RelationResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Relation;\nuse App\\Services\\Entity\\RelationService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EntityRelationApiController extends ApiController\n{\n    protected RelationService $relationService;\n\n    public function __construct(RelationService $relationService)\n    {\n        $this->relationService = $relationService;\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->relationships()->has('target')->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Entity $entity, Relation $relation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new Resource($relation);\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n\n        $this->relationService->campaign($campaign)->createRelations($request);\n\n        return Resource::collection($entity->relationships()->has('target')->whereIn('target_id', $this->relationService->getEntities())->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(UpdateRequest $request, Campaign $campaign, Entity $entity, Relation $relation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $relation->update($request->all());\n\n        return new Resource($relation);\n    }\n\n    /**\n     * @param  Request  $request\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Entity $entity,\n        Relation $relation\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $relation->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityTagApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreEntityTag as Request;\nuse App\\Http\\Resources\\Api\\EntityTagResource as ApiResource;\nuse App\\Http\\Resources\\EntityTagResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityTag;\n\nclass EntityTagApiController extends ApiController\n{\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->tags()->withPivot('id')->paginate());\n    }\n\n    public function show(Campaign $campaign, Entity $entity, EntityTag $entityTag)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new ApiResource($entityTag);\n    }\n\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->only(['tag_id']);\n        $data['entity_id'] = $entity->id;\n        $model = EntityTag::create($data);\n\n        return new ApiResource($model);\n    }\n\n    public function update(Request $request, Campaign $campaign, Entity $entity, EntityTag $entityTag)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $entityTag->update($request->all());\n\n        return new ApiResource($entityTag);\n    }\n\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Entity $entity,\n        EntityTag $entityTag\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $entityTag->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityTemplateApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\EntityResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\TemplateService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass EntityTemplateApiController extends ApiController\n{\n    protected TemplateService $service;\n\n    public function __construct(TemplateService $templateService)\n    {\n        $this->service = $templateService;\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        if (config('app.debug')) {\n            DB::enableQueryLog();\n        }\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign->entities()\n            ->apiFilter($campaign, request()->all())\n            ->lastSync(request()->get('lastSync'))\n            ->where('is_template', true)\n            ->paginate()\n            ->appends(request()->except(['page', 'lastSync'])));\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function switch(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n\n        $this->service->entity($entity)->toggle();\n\n        $resource = new Resource($entity);\n\n        return $resource->withMisc();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityTransformApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\TransformEntity as Request;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Services\\Entity\\TransformService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\n\nclass EntityTransformApiController extends ApiController\n{\n    protected TransformService $service;\n\n    public function __construct(TransformService $service)\n    {\n        $this->middleware('auth');\n\n        $this->service = $service;\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function transform(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $count = 0;\n\n        $entityType = EntityType::inCampaign($campaign)->where('id', $request->entity_type)->first();\n        foreach ($request->entities as $id) {\n            $entity = Entity::find($id);\n            if ($this->authorize('update', $entity)) {\n                $this->service\n                    ->entity($entity)\n                    ->entityType($entityType)\n                    ->transform();\n                $count++;\n            }\n        }\n\n        return response()->json(['success' => 'Succesfully transformed ' . $count . ' entities.']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EntityTypeApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\Api\\DefaultEntityTypeResource as Resource;\nuse App\\Models\\EntityType;\n\nclass EntityTypeApiController extends ApiController\n{\n    public function index()\n    {\n        return Resource::collection(EntityType::default()->paginate());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/EventApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreEvent as Request;\nuse App\\Http\\Resources\\EventResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Event;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass EventApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->events()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Event $event)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $event->entity);\n\n        return new Resource($event);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.event')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Event::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Event $event)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $event->entity);\n        $event->update($request->all());\n        $this->crudSave($event, $request->validated());\n\n        return new Resource($event);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Event $event)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $event->entity);\n        $event->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/FamilyApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreFamily as Request;\nuse App\\Http\\Resources\\FamilyResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Family;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass FamilyApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->families()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Family $family)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $family->entity);\n\n        return new Resource($family);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.family')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Family::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Family $family)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $family->entity);\n        $family->update($request->all());\n        $this->crudSave($family, $request->validated());\n\n        return new Resource($family);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Family $family)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $family->entity);\n        $family->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/FamilyTreeApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Middleware\\Campaigns\\Premium;\nuse App\\Http\\Requests\\StoreFamilyTree as Request;\nuse App\\Http\\Resources\\FamilyTreeResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Family;\nuse App\\Services\\Families\\FamilyTreeService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\n\nclass FamilyTreeApiController extends ApiController\n{\n    protected FamilyTreeService $treeService;\n\n    public function __construct(FamilyTreeService $treeService)\n    {\n        $this->treeService = $treeService;\n        $this->middleware(Premium::class, ['except' => ['show']]);\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Family $family)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $family->entity);\n\n        return new Resource($family->familyTree);\n    }\n\n    /**\n     * @return resource | JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Family $family)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $family->entity);\n\n        if (! $campaign->premium()) {\n            return response()->json('You need to activate premium functions on the campaign to use this feature', 204);\n        }\n\n        $data = $request->input('tree');\n\n        $model = $this\n            ->treeService\n            ->family($family)\n            ->user($request->user())\n            ->save($data)\n            ->familyTree();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Family $family)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $family->entity);\n\n        if ($family->familyTree) {\n            $family->familyTree->delete();\n        }\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/FilterApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\EntityType;\nuse App\\Services\\Api\\FilterService;\n\nclass FilterApiController extends Controller\n{\n    protected FilterService $filterService;\n\n    public function __construct(FilterService $filterService)\n    {\n        $this->filterService = $filterService;\n    }\n\n    public function index()\n    {\n        return response()->json($this->filterService->endpoints());\n    }\n\n    public function show(EntityType $entityType)\n    {\n        return response()->json([\n            'data' => $this->filterService\n                ->entityType($entityType)\n                ->filters(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/FullTextSearchApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Search\\EntitySearchService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\n\nclass FullTextSearchApiController extends ApiController\n{\n    protected EntitySearchService $service;\n\n    public function __construct(EntitySearchService $service)\n    {\n        $this->service = $service;\n    }\n\n    /**\n     * return \\Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $term = request()->term;\n        $term2 = null;\n        /** @var ?Entity $entity */\n        $entity = Entity::with('entityType')->where(['name' => request()->term, 'campaign_id' => $campaign->id])->first();\n        if ($entity) {\n            $term2 = $entity->entityType->code . ':' . $entity->id;\n        }\n\n        $results = $this->service\n            ->campaign($campaign)\n            ->search($term, $term2);\n\n        return $results;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/HealthController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Controllers\\Controller;\n\nclass HealthController extends Controller\n{\n    public function index()\n    {\n        return response()->json(['success' => true]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/ItemApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreItem as Request;\nuse App\\Http\\Resources\\ItemResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Item;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass ItemApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->items()\n            ->has('entity')\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Item $item)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $item->entity);\n\n        return new Resource($item);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.item')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        /** @var Item $model */\n        $model = Item::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Item $item)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $item->entity);\n        $item->update($request->all());\n        $this->crudSave($item, $request->validated());\n\n        return new Resource($item);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Item $item)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $item->entity);\n        $item->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/JournalApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreJournal as Request;\nuse App\\Http\\Resources\\JournalResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Journal;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass JournalApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->journals()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Journal $journal)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $journal->entity);\n\n        return new Resource($journal);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.journal')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Journal::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Journal $journal)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $journal->entity);\n        $journal->update($request->all());\n        $this->crudSave($journal, $request->validated());\n\n        return new Resource($journal);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Journal $journal)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $journal->entity);\n        $journal->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/LocationApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreLocation as Request;\nuse App\\Http\\Resources\\LocationResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Location;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass LocationApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->locations()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Location $location)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $location->entity);\n\n        return new Resource($location);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.location')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Location::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Location $location)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $location->entity);\n        $location->update($request->all());\n        $this->crudSave($location, $request->validated());\n\n        return new Resource($location);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Location $location)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $location->entity);\n        $location->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/MapApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreMap as Request;\nuse App\\Http\\Resources\\MapResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Map;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass MapApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->maps()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $map->entity);\n\n        return new Resource($map);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.map')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Map::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        $map->update($request->all());\n        $this->crudSave($map, $request->validated());\n\n        return new Resource($map);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $map->entity);\n        $map->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/MapGroupApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreMapGroup as Request;\nuse App\\Http\\Resources\\MapGroupResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapGroup;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass MapGroupApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $map->entity);\n\n        return Resource::collection($map->groups()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Map $map, MapGroup $mapGroup)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $map->entity);\n\n        return new Resource($mapGroup);\n    }\n\n    public function store(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        if (! auth()->user()->can('addGroup', [$map, $campaign])) {\n            return response()->json(['error' => 'Max amount of map groups reached']);\n        }\n\n        $model = MapGroup::create($request->all());\n\n        return new Resource($model);\n    }\n\n    public function update(\n        Request $request,\n        Campaign $campaign,\n        Map $map,\n        MapGroup $mapGroup\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        $mapGroup->update($request->all());\n\n        return new Resource($mapGroup);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Map $map,\n        MapGroup $mapGroup\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        $mapGroup->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/MapLayerApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreMapLayer as Request;\nuse App\\Http\\Resources\\MapLayerResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapLayer;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass MapLayerApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $map->entity);\n\n        return Resource::collection($map->layers()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Map $map, MapLayer $mapLayer)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $map->entity);\n\n        return new Resource($mapLayer);\n    }\n\n    public function store(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n\n        if (! auth()->user()->can('addLayer', [$map, $campaign])) {\n            return response()->json(['error' => 'Max amount of map layers reached']);\n        }\n\n        $model = MapLayer::create($request->all());\n        $model->refresh();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function update(\n        Request $request,\n        Campaign $campaign,\n        Map $map,\n        MapLayer $mapLayer\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        $mapLayer->update($request->all());\n\n        return new Resource($mapLayer);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Map $map,\n        MapLayer $mapLayer\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        $mapLayer->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/MapMarkerApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreMapMarker as Request;\nuse App\\Http\\Resources\\MapMarkerResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapMarker;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass MapMarkerApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $map->entity);\n\n        return Resource::collection($map->markers()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Map $map, MapMarker $mapMarker)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $map->entity);\n\n        return new Resource($mapMarker);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        $data = $request->all();\n        $data['map_id'] = $map->id;\n        $model = MapMarker::create($data);\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function update(\n        Request $request,\n        Campaign $campaign,\n        Map $map,\n        MapMarker $mapMarker\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        $mapMarker->update($request->all());\n\n        return new Resource($mapMarker);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Map $map,\n        MapMarker $mapMarker\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $map->entity);\n        $mapMarker->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/MiscApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\EntityRelationsServiceFactory;\n\nclass MiscApiController extends ApiController\n{\n    public function __construct(\n        protected EntitySaveService $entitySaveService,\n        protected EntityRelationsServiceFactory $relationsFactory,\n    ) {}\n\n    protected function crudSave(MiscModel $model, array $data): void\n    {\n        $service = $this->relationsFactory->for($model->entity);\n        if (request()->isMethod('patch')) {\n            $service?->patch();\n        }\n        $service?->save($model, $data);\n\n        if (! empty($model->entity)) {\n            $this->entitySaveService->save($model->entity, $data);\n            if ($model->wasChanged() && ! $model->entity->wasChanged()) {\n                $model->entity->touch();\n            }\n        }\n        $model->refresh();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/NoteApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreNote as Request;\nuse App\\Http\\Resources\\NoteResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Note;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass NoteApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->notes()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Note $note)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $note->entity);\n\n        return new Resource($note);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.note')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Note::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Note $note)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $note->entity);\n        $note->update($request->all());\n        $this->crudSave($note, $request->validated());\n\n        return new Resource($note);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Note $note)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $note->entity);\n        $note->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/OrganisationApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreOrganisation as Request;\nuse App\\Http\\Resources\\OrganisationResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Organisation;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass OrganisationApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->organisations()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Organisation $organisation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $organisation->entity);\n\n        return new Resource($organisation);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.organisation')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Organisation::create($data);\n        $this->crudSave($model, $request->validated());\n        $model->refresh();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Organisation $organisation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $organisation->entity);\n        $organisation->update($request->all());\n        $this->crudSave($organisation, $request->validated());\n\n        return new Resource($organisation);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Organisation $organisation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $organisation->entity);\n        $organisation->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/OrganisationMemberApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreOrganisationMember as Request;\nuse App\\Http\\Resources\\OrganisationMemberResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Organisation;\nuse App\\Models\\OrganisationMember;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass OrganisationMemberApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Organisation $organisation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $organisation->entity);\n\n        return Resource::collection($organisation->members()->has('character')->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Organisation $organisation, OrganisationMember $organisationMember)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $organisation->entity);\n\n        return new Resource($organisationMember);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Organisation $organisation)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $organisation->entity);\n        $model = OrganisationMember::create($request->all());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function update(\n        Request $request,\n        Campaign $campaign,\n        Organisation $organisation,\n        OrganisationMember $organisationMember\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $organisation->entity);\n        $organisationMember->update($request->all());\n\n        return new Resource($organisationMember);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Organisation $organisation,\n        OrganisationMember $organisationMember\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $organisation->entity);\n        $organisationMember->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/PostApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StorePost as Request;\nuse App\\Http\\Resources\\PostResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass PostApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->posts()->with('permissions')->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new Resource($post);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->all();\n        $data['entity_id'] = $entity->id;\n        $model = Post::create($data);\n        $model->refresh();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $post->update($request->all());\n\n        return new Resource($post);\n    }\n\n    /**\n     * @param  Request  $request\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Entity $entity,\n        Post $post\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $post->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/PostLayoutApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Resources\\PostLayoutResource as Resource;\nuse App\\Models\\PostLayout;\n\nclass PostLayoutApiController extends Controller\n{\n    public function index()\n    {\n        return Resource::collection(PostLayout::get());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/PostRecoveryApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\RecoverPost as Request;\nuse App\\Http\\Resources\\PostResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Services\\Posts\\RecoveryService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass PostRecoveryApiController extends ApiController\n{\n    protected RecoveryService $service;\n\n    public function __construct(RecoveryService $service)\n    {\n        $this->middleware('auth');\n\n        $this->service = $service;\n    }\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        return Resource::collection($campaign\n            ->posts()->onlyTrashed()\n            ->paginate());\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function recover(Request $request, Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        if (! $campaign->boosted()) {\n            return response()->json(null, 204);\n        }\n        $this->service->campaign($campaign)->user($request->user())->recover($request->posts);\n\n        return response()->json(['success' => 'Successfully recovered deleted posts']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/ProfileApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\ProfileResource;\n\nclass ProfileApiController extends ApiController\n{\n    public function index()\n    {\n        return new ProfileResource(auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/QuestApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreQuest as Request;\nuse App\\Http\\Resources\\QuestResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Quest;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass QuestApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->quests()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Quest $quest)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $quest->entity);\n\n        return new Resource($quest);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.quest')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        /** @var Quest $model */\n        $model = Quest::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Quest $quest)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $quest->entity);\n        $quest->update($request->all());\n        $this->crudSave($quest, $request->validated());\n\n        return new Resource($quest);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Quest $quest)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $quest->entity);\n        $quest->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/QuestElementApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreQuestElement as RequestElement;\nuse App\\Http\\Resources\\QuestElementResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Quest;\nuse App\\Models\\QuestElement;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass QuestElementApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Quest $quest)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $quest->entity);\n\n        return Resource::collection($quest->elements()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Quest $quest, QuestElement $questElement)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $quest->entity);\n\n        return new Resource($questElement);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(RequestElement $requestElement, Campaign $campaign, Quest $quest)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $quest->entity);\n        $data = $requestElement->all();\n        $data['quest_id'] = $quest->id;\n        $model = QuestElement::create($data);\n        $model->refresh();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(\n        RequestElement $requestElement,\n        Campaign $campaign,\n        Quest $quest,\n        QuestElement $questElement\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $quest->entity);\n        $questElement->update($requestElement->all());\n\n        return new Resource($questElement);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        Request $request,\n        Campaign $campaign,\n        Quest $quest,\n        QuestElement $questElement\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $quest->entity);\n        $questElement->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/RaceApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreRace as Request;\nuse App\\Http\\Resources\\RaceResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Race;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass RaceApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->races()\n            ->filter(request()->all())\n            ->withApi()\n            ->has('entity')\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Race $race)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $race->entity);\n\n        return new Resource($race);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.race')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Race::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Race $race)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $race->entity);\n        $race->update($request->all());\n        $this->crudSave($race, $request->validated());\n\n        return new Resource($race);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Race $race)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $race->entity);\n        $race->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/RecentEntityApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\EntityResource as Resource;\nuse App\\Models\\Campaign;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass RecentEntityApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        if (config('app.debug')) {\n            DB::enableQueryLog();\n        }\n\n        $this->authorize('access', $campaign);\n\n        return Resource::collection(\n            $campaign->entities()\n                ->apiFilter($campaign, request()->all())\n                ->orderBy('updated_at', 'DESC')\n                ->limit(min(max(1, request()->get('amount')), 10))\n                ->lastSync(request()->get('lastSync'))\n                ->get()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/RelationApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Resources\\RelationResource as Resource;\nuse App\\Models\\Campaign;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass RelationApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection(\n            $campaign->entityRelations()\n                ->has('target')\n                ->paginate()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/ReminderApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\API\\StoreReminder as Request;\nuse App\\Http\\Resources\\ReminderResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Reminder;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass ReminderApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return Resource::collection($entity->reminders()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Entity $entity, Reminder $reminder)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $entity);\n\n        return new Resource($reminder);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $data = $request->all();\n        $model = new Reminder($data);\n        $model->remindable_id = $entity->id;\n        $model->remindable_type = Entity::class;\n        $model->save();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Entity $entity, Reminder $reminder)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $reminder->update($request->all());\n\n        return new Resource($reminder);\n    }\n\n    /**\n     * @param  Request  $request\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Entity $entity,\n        Reminder $reminder\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $entity);\n        $reminder->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/SearchApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\EntityTypeService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass SearchApiController extends ApiController\n{\n    public function __construct(protected EntityTypeService $entityTypeService) {}\n\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Request $request, Campaign $campaign, ?string $search = null)\n    {\n        $this->authorize('access', $campaign);\n\n        $term = mb_trim($search);\n        $enabledEntities = array_keys($this->entityTypeService->campaign($campaign)->toSelect());\n        $models = Entity::with(['entityType', 'image'])\n            ->whereIn('type_id', $enabledEntities)\n            ->where('name', 'like', \"%{$term}%\")\n            ->limit(10)\n            ->get();\n\n        return \\App\\Http\\Resources\\Entity::collection($models);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/TagApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreTag as Request;\nuse App\\Http\\Resources\\TagResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Tag;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass TagApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->tags()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $tag->entity);\n\n        return new Resource($tag);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.tag')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Tag::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $tag->entity);\n        $tag->update($request->all());\n        $this->crudSave($tag, $request->validated());\n\n        return new Resource($tag);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $tag->entity);\n        $tag->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/TimelineApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreTimeline as Request;\nuse App\\Http\\Resources\\TimelineResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Timeline;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass TimelineApiController extends MiscApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return Resource::collection($campaign\n            ->timelines()\n            ->filter(request()->all())\n            ->withApi()\n            ->lastSync(request()->get('lastSync'))\n            ->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $timeline->entity);\n\n        return new Resource($timeline);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('create', [EntityType::find(config('entities.ids.timeline')), $campaign]);\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $model = Timeline::create($data);\n        $this->crudSave($model, $request->validated());\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(Request $request, Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $timeline->entity);\n        $timeline->update($request->all());\n        $this->crudSave($timeline, $request->validated());\n\n        return new Resource($timeline);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('delete', $timeline->entity);\n        $timeline->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/TimelineElementApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreTimelineElement as Request;\nuse App\\Http\\Resources\\TimelineElementResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Timeline;\nuse App\\Models\\TimelineElement;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass TimelineElementApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $timeline->entity);\n\n        return Resource::collection($timeline->elements()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Timeline $timeline, TimelineElement $timelineElement)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $timeline->entity);\n\n        return new Resource($timelineElement);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $timeline->entity);\n        $data = $request->all();\n        $data['timeline_id'] = $timeline->id;\n        $model = TimelineElement::create($data);\n        $model->refresh();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     */\n    public function update(\n        Request $request,\n        Campaign $campaign,\n        Timeline $timeline,\n        TimelineElement $timelineElement\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $timeline->entity);\n        $timelineElement->update($request->all());\n\n        return new Resource($timelineElement);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Timeline $timeline,\n        TimelineElement $timelineElement\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $timeline->entity);\n        $timelineElement->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/TimelineEraApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Requests\\StoreTimelineEra as Request;\nuse App\\Http\\Resources\\TimelineEraResource as Resource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Timeline;\nuse App\\Models\\TimelineEra;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\n\nclass TimelineEraApiController extends ApiController\n{\n    /**\n     * @return AnonymousResourceCollection\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $timeline->entity);\n\n        return Resource::collection($timeline->eras()->paginate());\n    }\n\n    /**\n     * @return resource\n     */\n    public function show(Campaign $campaign, Timeline $timeline, TimelineEra $timelineEra)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('view', $timeline->entity);\n\n        return new Resource($timelineEra);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Request $request, Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $timeline->entity);\n        $data = $request->all();\n        $data['timeline_id'] = $timeline->id;\n        $model = TimelineEra::create($data);\n        $model->refresh();\n\n        return new Resource($model);\n    }\n\n    /**\n     * @return resource\n     *\n     * @throws AuthorizationException\n     */\n    public function update(\n        Request $request,\n        Campaign $campaign,\n        Timeline $timeline,\n        TimelineEra $timelineEra\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $timeline->entity);\n        $timelineEra->update($request->all());\n\n        return new Resource($timelineEra);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(\n        \\Illuminate\\Http\\Request $request,\n        Campaign $campaign,\n        Timeline $timeline,\n        TimelineEra $timelineEra\n    ) {\n        $this->authorize('access', $campaign);\n        $this->authorize('update', $timeline->entity);\n        $timelineEra->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/v1/VisibilityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\v1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Resources\\VisibilityResource;\nuse App\\Models\\Visibility;\n\nclass VisibilityController extends Controller\n{\n    public function index()\n    {\n        return VisibilityResource::collection(\n            Visibility::get()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Attributes/ApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Attributes;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Services\\Attributes\\ApiService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass ApiController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(protected ApiService $apiService) {}\n\n    public function index(Campaign $campaign, EntityType $entityType)\n    {\n        if (request()->has('source')) {\n            $source = Entity::findOrFail((int) request()->get('source'));\n\n            $this->apiService\n                ->user(auth()->user())\n                ->copy()\n                ->entityType($entityType);\n\n            return $this->entity($campaign, $source);\n        }\n\n        return response()->json(\n            $this->apiService\n                ->user(auth()->user())\n                ->campaign($campaign)\n                ->entityType($entityType)\n                ->build()\n        );\n    }\n\n    public function entity(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        // When copying an entity, the source might have private attributes, which blocks the attributes\n        if (auth()->check() && auth()->user()->can('view-attributes', [$entity, $campaign])) {\n            $this->apiService\n                ->entity($entity);\n        }\n\n        return response()->json(\n            $this->apiService\n                ->user(auth()->user())\n                ->campaign($campaign)\n                ->build()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/AuthController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Enums\\ReferralEventType;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse App\\Services\\Referrals\\JoinService;\nuse Exception;\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Laravel\\Socialite\\Facades\\Socialite;\nuse Symfony\\Component\\HttpKernel\\Exception\\AccessDeniedHttpException;\n\nclass AuthController extends Controller\n{\n    /**\n     * Where to redirect users after login.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(protected JoinService $referralService)\n    {\n        $this->middleware('guest')->except('logout');\n    }\n\n    /**\n     * Redirect the user to the service authentication page.\n     *\n     * @param  string  $provider\n     */\n    public function redirectToProvider($provider)\n    {\n        if (! in_array($provider, ['facebook', 'twitter', 'google'])) {\n            return redirect()->route('login');\n        }\n        try {\n            return Socialite::driver($provider)->redirect();\n        } catch (Exception $e) {\n            return redirect()->route('login')->withErrors('Error contacting ' . ucfirst($provider) . '.');\n        }\n    }\n\n    /**\n     * Obtain the user information from provider.  Check if the user already exists in our\n     * database by looking up their provider_id in the database.\n     * If the user exists, log them in. Otherwise, create a new user then log them in. After that\n     * redirect them to the authenticated user's homepage.\n     *\n     * @param  string  $provider\n     */\n    public function handleProviderCallback($provider)\n    {\n        try {\n            // Twitter uses Oauth1 and doesn't support stateless\n            if ($provider == 'twitter') {\n                $user = Socialite::driver($provider)->user();\n            } else {\n                // @phpstan-ignore-next-line\n                $user = Socialite::driver($provider)->stateless()->user();\n            }\n\n            $authUser = $this->findOrCreateUser($user, $provider);\n            Auth::login($authUser, true);\n\n            return redirect()->route('home');\n        } catch (Exception $ex) {\n            // Send the exception to Sentry\n            //            if (app()->bound('sentry')) {\n            //                app('sentry')->captureException($ex);\n            //            }\n\n            if ($ex->getCode() == '1') {\n                return redirect()->route('login')->with('error', __('auth.register.errors.email_already_taken'));\n            } else {\n                return redirect()->route('register')->with('error', __('auth.register.errors.general_error'));\n            }\n        }\n    }\n\n    /**\n     * If a user has registered before using social auth, return the user\n     * else, create a new user object.\n     *\n     * @param  mixed  $user  Socialite user object\n     * @param  mixed  $provider  Social auth provider\n     * @return User\n     */\n    public function findOrCreateUser(mixed $user, mixed $provider)\n    {\n        $authUser = User::where('provider_id', $user->id)->first();\n        if ($authUser) {\n            return $authUser;\n        }\n\n        // Make sure the email doesn't already exist\n        $emailExists = User::where('email', $user->email)->first();\n        if ($emailExists) {\n            throw new Exception('', 1);\n        }\n\n        // Only allow creating if it's set that way\n        if (! config('auth.register_enabled')) {\n            throw new AccessDeniedHttpException('ACCOUNT REGISTRATION DISABLED');\n        }\n\n        $referrer = $this->referralService->referrer();\n        $authUser = User::create([\n            'name' => $user->name,\n            'email' => $user->email,\n            'password' => $user->email,\n            'provider' => $provider,\n            'provider_id' => $user->id,\n            'referred_by' => $referrer,\n        ]);\n        $this->referralService->event($authUser, ReferralEventType::register);\n\n        // Call the registered event\n        event(new Registered($authUser));\n\n        return $authUser;\n    }\n\n    /**\n     * @return RedirectResponse\n     */\n    public function logout(Request $request)\n    {\n        Auth::logout();\n\n        $request->session()->invalidate();\n        $request->session()->regenerateToken();\n\n        // We also need to flush the session (campaign_id and other things) since this could cause\n        // weird behaviour if the user registers a new account.\n\n        $request->session()->flush();\n\n        return redirect()->route('login');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ConfirmPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider;\nuse Illuminate\\Foundation\\Auth\\ConfirmsPasswords;\n\nclass ConfirmPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Confirm Password Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password confirmations and\n    | uses a simple trait to include the behavior. You're free to explore\n    | this trait and override any functions that require customization.\n    |\n    */\n    use ConfirmsPasswords;\n\n    /**\n     * Where to redirect users when the intended url fails.\n     *\n     * @var string\n     */\n    protected $redirectTo = RouteServiceProvider::HOME;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ForgotPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Rules\\SocialLogin;\nuse Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails;\nuse Illuminate\\Http\\Request;\n\nclass ForgotPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password reset emails and\n    | includes a trait which assists in sending these notifications from\n    | your application to your users. Feel free to explore this trait.\n    |\n    */\n    use SendsPasswordResetEmails;\n\n    protected function validateEmail(Request $request)\n    {\n        $request->validate($this->rules());\n    }\n\n    protected function rules(): array\n    {\n        return [\n            'email' => ['required', 'email', new SocialLogin],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/LoginController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse App\\Rules\\SocialLogin;\nuse App\\Services\\UserAuthenticatedService;\nuse Illuminate\\Foundation\\Auth\\AuthenticatesUsers;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass LoginController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Login Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller handles authenticating users for the application and\n    | redirecting them to your home screen. The controller uses a trait\n    | to conveniently provide its functionality to your applications.\n    |\n    */\n    use AuthenticatesUsers;\n\n    public UserAuthenticatedService $userAuthService;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(UserAuthenticatedService $userAuthService)\n    {\n        $this->middleware('guest')->except('logout');\n        $this->middleware('login.redirect')->except('logout');\n\n        $this->userAuthService = $userAuthService;\n    }\n\n    /**\n     * @return RedirectResponse\n     */\n    public function loginAsUser(Request $request, User $user)\n    {\n        if (! config('auth.user_list')) {\n            return redirect()->route('login');\n        }\n\n        Auth::login($user, true);\n\n        return $this->sendLoginResponse($request);\n    }\n\n    /**\n     * @return RedirectResponse\n     */\n    public function loginAs(Request $request)\n    {\n        if (! config('auth.user_list')) {\n            return redirect()->route('login');\n        }\n\n        $user = User::where('id', $request->get('user'))->first();\n        Auth::login($user, true);\n\n        return $this->sendLoginResponse($request);\n    }\n\n    protected function authenticated(Request $request, $user)\n    {\n        $response = $this->userAuthService->authenticated($user);\n\n        return $response;\n    }\n\n    protected function redirectTo(Request $request): string\n    {\n        return route('home');\n    }\n\n    /**\n     * Make sure a social login can't log in with a password\n     */\n    protected function validateLogin(Request $request)\n    {\n        $request->validate([\n            $this->username() => [\n                'required',\n                'string',\n                new SocialLogin,\n            ],\n            'password' => 'required|string',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/RegisterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Enums\\ReferralEventType;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse App\\Rules\\AccountEmail;\nuse App\\Rules\\AccountName;\nuse App\\Rules\\Recaptcha;\nuse App\\Services\\Referrals\\JoinService;\nuse Illuminate\\Foundation\\Auth\\RegistersUsers;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Validator;\n\nclass RegisterController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Register Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller handles the registration of new users as well as their\n    | validation and creation. By default this controller uses a trait to\n    | provide this functionality without requiring any additional code.\n    |\n    */\n    use RegistersUsers;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(protected JoinService $referralService)\n    {\n        $this->middleware('guest');\n        $this->middleware('login.redirect');\n    }\n\n    /**\n     * Get a validator for an incoming registration request.\n     *\n     * @return \\Illuminate\\Contracts\\Validation\\Validator\n     */\n    protected function validator(array $data)\n    {\n        $rules = [\n            'name' => ['required', 'string', 'max:255', 'min:2', new AccountName],\n            'email' => ['required', 'string', 'email:rfc,dns', 'max:255', 'unique:users', new AccountEmail],\n            'password' => ['required', 'string', 'min:8'],\n        ];\n        if (config('auth.recaptcha.enabled')) {\n            $rules['g-recaptcha-response'] = ['required', 'string', new Recaptcha];\n        }\n\n        return Validator::make($data, $rules);\n    }\n\n    /**\n     * Create a new user instance after a valid registration.\n     *\n     * @return User\n     */\n    protected function create(array $data)\n    {\n        $referrer = $this->referralService->referrer();\n        $user = User::create([\n            'name' => $data['name'],\n            'email' => $data['email'],\n            'password' => Hash::make($data['password']),\n            'referred_by' => $referrer,\n        ]);\n        $this->referralService->event($user, ReferralEventType::register);\n\n        return $user;\n    }\n\n    protected function redirectTo(): string\n    {\n        return session()->pull('login_redirect', route('home'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ResetPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider;\nuse App\\Rules\\SocialLogin;\nuse Illuminate\\Foundation\\Auth\\ResetsPasswords;\nuse Illuminate\\Validation\\Rules;\n\nclass ResetPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password reset requests\n    | and uses a simple trait to include this behavior. You're free to\n    | explore this trait and override any methods you wish to tweak.\n    |\n    */\n    use ResetsPasswords;\n\n    /**\n     * Where to redirect users after resetting their password.\n     *\n     * @var string\n     */\n    protected $redirectTo = RouteServiceProvider::HOME;\n\n    public function __construct()\n    {\n        $this->middleware('guest');\n    }\n\n    /**\n     * Get the password reset validation rules.\n     *\n     * @return array\n     */\n    protected function rules()\n    {\n        return [\n            'token' => 'required',\n            'email' => ['required', 'email', new SocialLogin],\n            'password' => ['required', 'confirmed', Rules\\Password::defaults()],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/VerificationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider;\nuse Illuminate\\Foundation\\Auth\\VerifiesEmails;\n\nclass VerificationController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Email Verification Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling email verification for any\n    | user that recently registered with the application. Emails may also\n    | be re-sent if the user didn't receive the original email message.\n    |\n    */\n    use VerifiesEmails;\n\n    /**\n     * Where to redirect users after verification.\n     *\n     * @var string\n     */\n    protected $redirectTo = RouteServiceProvider::HOME;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n        $this->middleware('signed')->only('verify');\n        $this->middleware('throttle:6,1')->only('verify', 'resend');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Billing/HistoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Billing;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\View\\View;\n\nclass HistoryController extends Controller\n{\n    /**\n     * InvoiceController constructor.\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity', 'subscriptions']);\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function index(Request $request)\n    {\n        /** @var User $user */\n        $user = $request->user();\n        $invoices = ! empty($user->stripe_id) ? $user->invoicesIncludingPending() : [];\n\n        return view('billing.history', compact(\n            'invoices'\n        ));\n    }\n\n    /**\n     * @param  string  $invoice\n     */\n    public function download(Request $request, $invoice)\n    {\n        /** @var User $user */\n        $user = $request->user();\n        $billing = '';\n        if ($user->profile && ! empty($user->profile['billing'])) {\n            $billing = $user->profile['billing'];\n        }\n\n        return $user->downloadInvoice($invoice, [\n            'vendor' => 'Owlchester SNC',\n            'product' => 'Kanka Subscription',\n            'url' => config('app.url'),\n            'street' => config('billing.street'),\n            'location' => config('billing.location'),\n            'country' => config('billing.country'),\n            'email' => config('app.email'),\n            'billing' => $billing,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Billing/PaymentMethodController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Billing;\n\nuse App\\Enums\\UserAction;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Settings\\UserBillingStore;\nuse App\\Services\\Users\\CurrencyService;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\View\\View;\n\nclass PaymentMethodController extends Controller\n{\n    protected CurrencyService $currencyService;\n\n    /**\n     * PaymentMethodController constructor.\n     */\n    public function __construct(CurrencyService $currencyService)\n    {\n        $this->middleware(['auth', 'identity', 'subscriptions']);\n        $this->currencyService = $currencyService;\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function index()\n    {\n        $stripeApiToken = config('cashier.key', null);\n        $user = Auth::user();\n\n        $translations = [\n            'ending' => __('settings.subscription.payment_method.ending'),\n            'add_one' => __('settings.subscription.payment_method.add_one'),\n            'new_card' => __('settings.subscription.payment_method.new_card'),\n            'card_name' => __('settings.subscription.payment_method.card_name'),\n            'card' => __('settings.subscription.payment_method.card'),\n            'helper' => __('settings.subscription.payment_method.helper'),\n            'actions.add_new' => __('settings.subscription.payment_method.actions.add_new'),\n            'actions.save' => __('settings.subscription.payment_method.actions.save'),\n        ];\n        $translations = json_encode($translations);\n\n        $currencies = $this->currencyService->user($user)->availableCurrencies();\n\n        return view('billing.payment-method', compact(\n            'stripeApiToken',\n            'user',\n            'translations',\n            'currencies',\n        ));\n    }\n\n    public function currency()\n    {\n        $content = auth()->user()->subscribed('kanka') ?\n            '_blocked' : '_form';\n\n        return view('settings.subscription.currency.edit')\n            ->with('content', $content)\n            ->with('currencies', $this->currencyService->user(auth()->user())->availableCurrencies());\n    }\n\n    public function save(UserBillingStore $request)\n    {\n        $user = $request->user();\n\n        $from = $request->get('from', 'billing.payment-method');\n\n        if ($request->get('reset_billing') && ($request->get('currency') != $user->currency())) {\n            $paymentMethods = $user->paymentMethods();\n\n            foreach ($paymentMethods as $method) {\n                $method->delete();\n            }\n            $user->subscriptions()->delete();\n\n            $user->card_expires_at = null;\n            $user->stripe_id = null;\n            $user->log(UserAction::currencySwitch);\n        }\n\n        $user->saveSettings($request->only('currency'));\n        $user->save();\n\n        return redirect()\n            ->route($from)\n            ->with('success', __('settings.subscription.success.currency'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bookmarks/RandomController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bookmarks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Services\\Bookmarks\\RandomEntityService;\n\nclass RandomController extends Controller\n{\n    public function __construct(protected RandomEntityService $service) {}\n\n    public function index(Campaign $campaign, Bookmark $bookmark)\n    {\n        $route = $this->service->bookmark($bookmark)->url();\n\n        if (empty($route)) {\n            return redirect()\n                ->route('dashboard', $campaign)\n                ->with(\n                    'error',\n                    __('bookmarks.random_no_entity')\n                );\n        }\n\n        return redirect()->to($route);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bookmarks/ReorderController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bookmarks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ReorderBookmarks;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Services\\BookmarkService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass ReorderController extends Controller\n{\n    protected BookmarkService $service;\n\n    public function __construct(BookmarkService $service)\n    {\n        $this->service = $service;\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('create', Bookmark::class);\n\n        $links = Bookmark::ordered()->with(['target', 'entityType'])->get();\n\n        return view('bookmarks.reorder', compact(\n            'links',\n            'campaign'\n        ));\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function save(ReorderBookmarks $request, Campaign $campaign)\n    {\n        $this->authorize('create', Bookmark::class);\n\n        $this->service\n            ->reorder($request);\n\n        return redirect()\n            ->route('bookmarks.index', $campaign)\n            ->with('success', __('bookmarks.reorder.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bragi/BragiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bragi;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\BragiRequest;\nuse App\\Models\\Campaign;\nuse App\\Services\\Bragi\\BragiService;\n\nclass BragiController extends Controller\n{\n    public function __construct(protected BragiService $service)\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        return response()->json(\n            $this->service\n                ->campaign($campaign)\n                ->user(auth()->user())\n                ->prepare()\n        );\n    }\n\n    public function generate(BragiRequest $request, Campaign $campaign)\n    {\n        return response()->json(\n            $this->service\n                ->user($request->user())\n                ->campaign($campaign)\n                ->generate($request)\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/BulkController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Requests\\BulkRequest;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\BulkService;\nuse App\\Traits\\BulkControllerTrait;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse Exception;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass BulkController extends Controller\n{\n    use BulkControllerTrait;\n    use CampaignAware;\n    use EntityTypeAware;\n\n    protected BulkRequest $request;\n\n    protected array $routeParams = [];\n\n    protected ?string $entity = null;\n\n    public function __construct(protected BulkService $bulkService) {}\n\n    public function index(BulkRequest $request, Campaign $campaign)\n    {\n        $this->request = $request;\n        $this->entity = $request->get('entity');\n        $models = $request->get('model', []);\n        $action = $request->get('datagrid-action');\n        $page = $request->get('page');\n        if (! empty($page)) {\n            $this->routeParams = ['page' => $page];\n        }\n\n        $this->bulkService\n            ->entities($models);\n\n        if ($request->filled('entity_type')) {\n            $this->entityType = EntityType::find($request->get('entity_type'));\n        }\n\n        try {\n            if ($action === 'batch') {\n                return $this->batch();\n            }\n        } catch (TranslatableException $e) {\n            if (config('app.debug')) {\n                throw $e;\n            }\n\n            return redirect()\n                ->back()\n                ->with('error', __('crud.bulk.errors.general', ['hint' => $e->getTranslatedMessage()]));\n        } catch (Exception $e) {\n            if (config('app.debug')) {\n                throw $e;\n            }\n\n            return redirect()\n                ->back()\n                ->with('error', __('crud.bulk.errors.general', ['hint' => $e->getMessage()]));\n        }\n\n        return redirect()\n            ->back();\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws Exception\n     */\n    protected function batch()\n    {\n        if (isset($this->entityType)) {\n            $entityObj = $this->entityType->getClass();\n            $this->bulkService->entityType($this->entityType);\n        } else {\n            $classes = config('entities.classes-plural');\n            $entityObj = new $classes[$this->entity];\n        }\n\n        $langFile = $this->entity === 'relations' ? 'entities/relations.bulk.success.' : 'entries/bulk.success.';\n        $models = $this->models();\n\n        $count = $this\n            ->bulkService\n            ->entities($models)\n            ->user($this->request->user())\n            ->editing($this->request->all(), $this->bulkModel($entityObj));\n        $total = $this->bulkService->total();\n\n        $key = 'editing';\n        if ($count != $total) {\n            $key = 'editing_partial';\n        }\n\n        return redirect()\n            ->back()\n            ->with('success', trans_choice($langFile . $key, $count, ['count' => $count, 'total' => $total]));\n    }\n\n    protected function models(): array\n    {\n        return explode(',', $this->request->get('models'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bulks/BatchController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bulks;\n\nuse App\\Datagrids\\Bulks\\Bulk;\nuse App\\Datagrids\\Bulks\\EntityBulk;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\BulkService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Str;\n\nclass BatchController extends Controller\n{\n    public function __construct(\n        protected BulkService $bulkService,\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $entities = $request->get('entities');\n\n        return view('cruds.datagrids.bulks.modals._batch')\n            ->with('campaign', $campaign)\n            ->with('bulk', $this->resolveBulk($entityType))\n            ->with('entityType', $entityType)\n            ->with('entities', $entities);\n    }\n\n    public function apply(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $models = explode(',', $request->get('models'));\n        if ($request->has('entities')) {\n            $models = $request->get('entities');\n        }\n\n        $count = $this\n            ->bulkService\n            ->entityType($entityType)\n            ->user($request->user())\n            ->campaign($campaign)\n            ->entities($models)\n            ->editing($request->all(), $this->resolveBulk($entityType));\n\n        $total = $this->bulkService->total();\n\n        $key = 'editing';\n        if ($count != $total) {\n            $key = 'editing_partial';\n        }\n\n        return redirect()\n            ->back()\n            ->with('success', trans_choice('entries/bulk.success.' . $key, $count, ['count' => $count, 'total' => $total]));\n    }\n\n    private function resolveBulk(EntityType $entityType): Bulk\n    {\n        $bulkClass = 'App\\Datagrids\\Bulks\\\\' . Str::studly($entityType->code) . 'Bulk';\n\n        if (class_exists($bulkClass)) {\n            return new $bulkClass;\n        }\n\n        return new EntityBulk;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bulks/CopyController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bulks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Bulks\\Copy;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\BulkService;\nuse App\\Services\\Users\\CampaignService;\nuse Illuminate\\Http\\Request;\n\nclass CopyController extends Controller\n{\n    public function __construct(\n        protected BulkService $bulkService,\n        protected CampaignService $campaignService\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $entities = $request->get('entities');\n        $campaigns = $this->campaignService\n            ->user(auth()->user())\n            ->campaign($campaign)\n            ->campaigns();\n\n        return view('cruds.datagrids.bulks.modals._copy_campaign')\n            ->with('campaign', $campaign)\n            ->with('campaigns', $campaigns)\n            ->with('entityType', $entityType)\n            ->with('type', $entityType->code)\n            ->with('entities', $entities);\n    }\n\n    public function apply(Copy $request, Campaign $campaign, EntityType $entityType)\n    {\n        $models = explode(',', $request->get('models'));\n        if ($request->has('entities')) {\n            $models = $request->get('entities');\n        }\n\n        /** @var Campaign $target */\n        $target = Campaign::findOrFail($request->get('campaign'));\n\n        $count = $this\n            ->bulkService\n            ->entityType($entityType)\n            ->campaign($campaign)\n            ->user($request->user())\n            ->entities($models)\n            ->copyToCampaign($target);\n\n        $link = '<a href=\"' . route('dashboard', $target) . '\" class=\"text-link\">' . $target->name . '</a>';\n\n        return redirect()\n            ->back()\n            ->with('success_raw', trans_choice('entries/bulk.success.copy_to_campaign', $count, ['count' => $count, 'campaign' => $link]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bulks/DeleteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bulks;\n\nuse App\\Datagrids\\Actions\\BookmarkDatagridActions;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\BulkService;\nuse Illuminate\\Http\\Request;\n\nclass DeleteController extends Controller\n{\n    public function __construct(\n        protected BulkService $bulkService,\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $datagrid = null;\n        if ($entityType->id === config('entities.ids.bookmark')) {\n            $datagrid = new BookmarkDatagridActions;\n        }\n        $entities = $request->get('entities');\n\n        return view('cruds.datagrids.bulks.modals.delete.delete')\n            ->with('campaign', $campaign)\n            ->with('entityType', $entityType)\n            ->with('datagrid', $datagrid)\n            ->with('entities', $entities);\n    }\n\n    public function apply(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $models = explode(',', $request->get('models'));\n        if ($request->has('entities')) {\n            $models = $request->get('entities');\n        }\n\n        $count = $this->bulkService\n            ->entityType($entityType)\n            ->entities($models)\n            ->campaign($campaign)\n            ->user($request->user())\n            ->request($request)\n            ->delete();\n        $key = 'entries/bulk.success.delete';\n\n        return redirect()\n            ->back()\n            ->with('success', trans_choice($key, $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bulks/DeleteRelationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bulks;\n\nuse App\\Datagrids\\Actions\\RelationDatagridActions;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\BulkService;\nuse Illuminate\\Http\\Request;\n\nclass DeleteRelationController extends Controller\n{\n    public function __construct(\n        protected BulkService $bulkService,\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $datagrid = new RelationDatagridActions;\n\n        return view('cruds.datagrids.bulks.modals.delete.relation')\n            ->with('campaign', $campaign)\n            ->with('datagrid', $datagrid);\n    }\n\n    public function apply(Request $request, Campaign $campaign)\n    {\n        $models = explode(',', request()->get('models'));\n\n        $count = $this->bulkService\n            ->entities($models)\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->request($request)\n            ->delete();\n        $key = 'entities/relations.bulk.delete';\n\n        return redirect()\n            ->back()\n            ->with('success', trans_choice($key, $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bulks/PermissionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bulks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\BulkService;\nuse Illuminate\\Http\\Request;\n\nclass PermissionController extends Controller\n{\n    public function __construct(\n        protected BulkService $bulkService,\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $entities = $request->get('entities');\n\n        return view('cruds.datagrids.bulks.modals._permissions')\n            ->with('campaign', $campaign)\n            ->with('entityType', $entityType)\n            ->with('entities', $entities);\n    }\n\n    public function apply(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $models = explode(',', $request->get('models'));\n        if ($request->has('entities')) {\n            $models = $request->get('entities');\n        }\n\n        $count = $this\n            ->bulkService\n            ->campaign($campaign)\n            ->user($request->user())\n            ->entityType($entityType)\n            ->entities($models)\n            ->permissions(\n                request()->only('user', 'role'),\n                request()->has('permission-override')\n            );\n\n        return redirect()\n            ->back()\n            ->with('success', trans_choice('entries/bulk.success.permissions', $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bulks/PrintController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bulks;\n\nuse App\\Facades\\Mentions;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\BulkService;\nuse Illuminate\\Http\\Request;\n\nclass PrintController extends Controller\n{\n    public function __construct(\n        protected BulkService $bulkService\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        Mentions::campaign($campaign);\n        $entities = $this->bulkService\n            ->campaign($campaign)\n            ->user($request->user())\n            ->entityType($entityType)\n            ->entities($request->get('model'))\n            ->export();\n\n        return view('entities.pages.print.print-bulk')\n            ->with('campaign', $campaign)\n            ->with('entities', $entities)\n            ->with('printing', true);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bulks/TemplateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bulks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Bulks\\Template;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\AttributeService;\nuse App\\Services\\BulkService;\nuse Illuminate\\Http\\Request;\n\nclass TemplateController extends Controller\n{\n    public function __construct(\n        protected BulkService $bulkService,\n        protected AttributeService $attributeService,\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $templates = $this->attributeService\n            ->campaign($campaign)\n            ->templateList();\n        $entities = $request->get('entities');\n\n        return view('cruds.datagrids.bulks.modals._templates')\n            ->with('campaign', $campaign)\n            ->with('templates', $templates)\n            ->with('entityType', $entityType)\n            ->with('entities', $entities);\n    }\n\n    public function apply(Template $request, Campaign $campaign, EntityType $entityType)\n    {\n        $models = explode(',', $request->get('models'));\n        if ($request->has('entities')) {\n            $models = $request->get('entities');\n        }\n        $target = $request->get('template_id');\n\n        $count = $this->bulkService\n            ->campaign($campaign)\n            ->user($request->user())\n            ->entityType($entityType)\n            ->entities($models)\n            ->templates($target);\n\n        return redirect()\n            ->back()\n            ->with('success', trans_choice('entries/bulk.success.templates', $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Bulks/TransformController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Bulks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Bulks\\Transform;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\BulkService;\nuse App\\Services\\EntityTypeService;\nuse Illuminate\\Http\\Request;\n\nclass TransformController extends Controller\n{\n    public function __construct(\n        protected BulkService $bulkService,\n        protected EntityTypeService $entityTypeService,\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $entityTypes = $this->entityTypeService\n            ->campaign($campaign)\n            ->exclude([$entityType->id, config('entities.ids.bookmark')])\n            ->prepend(['' => __('entities/transform.fields.select_one')])\n            ->toSelect();\n        $entities = $request->get('entities');\n\n        return view('cruds.datagrids.bulks.modals._transform')\n            ->with('campaign', $campaign)\n            ->with('entityTypes', $entityTypes)\n            ->with('entities', $entities)\n            ->with('entityType', $entityType);\n    }\n\n    public function apply(Transform $request, Campaign $campaign, EntityType $entityType)\n    {\n        $models = explode(',', $request->get('models'));\n        if ($request->has('entities')) {\n            $models = $request->get('entities');\n        }\n\n        /** @var EntityType $newEntityType */\n        $newEntityType = EntityType::inCampaign($campaign)->find($request->get('target'));\n\n        $count = $this\n            ->bulkService\n            ->entities($models)\n            ->entityType($entityType)\n            ->campaign($campaign)\n            ->user($request->user())\n            ->transform($newEntityType);\n\n        $link = '<a href=\"' . ($newEntityType->hasEntity() ? route('entities.index', [$campaign, $newEntityType]) : route($newEntityType->pluralCode() . '.index', [$campaign])) . '\" class=\"text-link\">' . $newEntityType->name() . '</a>';\n\n        return redirect()\n            ->back()\n            ->with('success_raw', trans_choice('entities/transform.bulk.success', $count, ['count' => $count, 'type' => $link]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Calendar/CalendarWeatherController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Calendar;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\AddCalendarWeather;\nuse App\\Models\\Calendar;\nuse App\\Models\\CalendarWeather;\nuse App\\Models\\Campaign;\nuse App\\Services\\CalendarService;\nuse Illuminate\\Support\\Str;\n\nclass CalendarWeatherController extends Controller\n{\n    protected CalendarService $calendarService;\n\n    public function __construct(CalendarService $calendarService)\n    {\n        $this->calendarService = $calendarService;\n    }\n\n    public function index(Campaign $campaign, Calendar $calendar)\n    {\n        return redirect()->route('entities.show', [$campaign, $calendar->entity]);\n    }\n\n    public function create(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('update', $calendar->entity);\n\n        $date = request()->get('date');\n        [$year, $month, $day] = explode('-', $date);\n        if (Str::startsWith($date, '-')) {\n            [$year, $month, $day] = explode('-', mb_trim($date, '-'));\n            $year = '-' . $year;\n        }\n\n        $weather = $this->calendarService\n            ->calendar($calendar)\n            ->findWeather((int) $year, (int) $month, (int) $day);\n\n        return view('calendars.weather.' . (! empty($weather) ? 'edit' : 'create'), compact(\n            'calendar',\n            'campaign',\n            'day',\n            'month',\n            'year',\n            'weather'\n        ));\n    }\n\n    public function store(AddCalendarWeather $request, Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('update', $calendar->entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $weather = $this->calendarService\n            ->calendar($calendar)\n            ->saveWeather($request);\n\n        $routeOptions = [$campaign, $calendar->entity, 'year' => $weather->year, 'month' => $weather->month];\n        if ($request->has('layout')) {\n            $routeOptions['layout'] = $request->get('layout');\n        }\n\n        return redirect()->route('entities.show', $routeOptions)\n            ->with('success', __('calendars/weather.create.success'));\n    }\n\n    public function update(AddCalendarWeather $request, Campaign $campaign, Calendar $calendar, CalendarWeather $calendarWeather)\n    {\n        $this->authorize('update', $calendar->entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $weather = $this->calendarService\n            ->calendar($calendar)\n            ->saveWeather($request);\n\n        $routeOptions = [$campaign, $calendar->entity, 'year' => $weather->year, 'month' => $weather->month];\n        if ($request->has('layout')) {\n            $routeOptions['layout'] = $request->get('layout');\n        }\n\n        return redirect()->route('entities.show', $routeOptions)\n            ->with('success', __('calendars/weather.edit.success'));\n    }\n\n    public function destroy(Campaign $campaign, Calendar $calendar, CalendarWeather $calendarWeather)\n    {\n        $this->authorize('update', $calendar->entity);\n        $calendarWeather->delete();\n\n        $routeOptions = [$campaign, $calendar->entity];\n        if (request()->has('layout')) {\n            $routeOptions['layout'] = request()->get('layout');\n        }\n\n        return redirect()->route('entities.show', $routeOptions)\n            ->with('success', __('calendars/weather.destroy.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Calendars/Bulks/EntityEventController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Calendars\\Bulks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Controllers\\Datagrid2\\BulkControllerTrait;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\Reminder;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Http\\Request;\n\nclass EntityEventController extends Controller\n{\n    use BulkControllerTrait;\n    use CampaignAware;\n\n    public function index(Request $request, Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('update', $calendar->entity);\n        $action = $request->get('action');\n        $models = $request->get('model');\n        if (! in_array($action, $this->validBulkActions()) || empty($models)) {\n            return redirect()->back();\n        }\n\n        if ($action === 'edit') {\n            return $this->campaign($campaign)->bulkBatch(route('calendars.entity-events.bulk', [\n                'campaign' => $campaign, 'calendar' => $calendar]), '_calendar-event', $models, $calendar);\n        }\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $count = $this->campaign($campaign)->bulkProcess($request, Reminder::class);\n\n        return redirect()\n            ->route('calendars.events', [$campaign, 'calendar' => $calendar])\n            ->with('success', trans_choice('calendars.events.bulks.' . $action, $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Calendars/EventController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Calendars;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\AddCalendarEvent;\nuse App\\Http\\Requests\\ValidateReminderLength;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Renderers\\Layouts\\Calendar\\Reminder;\nuse App\\Services\\CalendarService;\nuse App\\Services\\LengthValidatorService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Support\\Str;\n\nclass EventController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    protected CalendarService $service;\n\n    protected LengthValidatorService $lengthValidatorService;\n\n    public function __construct(CalendarService $calendarService, LengthValidatorService $lengthValidatorService)\n    {\n        $this->service = $calendarService;\n        $this->lengthValidatorService = $lengthValidatorService;\n    }\n\n    public function index(Campaign $campaign, Calendar $calendar)\n    {\n        $this->campaign($campaign)->authEntityView($calendar->entity);\n\n        $options = [$campaign, 'calendar' => $calendar];\n        $after = $before = false;\n        if (request()->has('before_id')) {\n            $options['before_id'] = 1;\n            $before = true;\n        } elseif (request()->has('after_id')) {\n            $options['after_id'] = 1;\n            $after = true;\n        }\n        Datagrid::layout(Reminder::class)\n            ->route('calendars.events', $options)\n            ->permissions(! (auth()->check() && auth()->user()->can('update', $calendar)));\n\n        $rows = $calendar->calendarEvents();\n        if ($after) {\n            $rows->after($calendar);\n        } elseif ($before) {\n            $rows->before($calendar);\n        }\n\n        // @phpstan-ignore-next-line\n        $this->rows = $rows\n            ->with(['calendar', 'calendar.entity',\n                'remindable' => function ($morphTo) {\n                    $morphTo->morphWith([\n                        Entity::class => ['entityType', 'tags', 'image'],\n                        Post::class => ['tags', 'entity', 'entity.image', 'entity.entityType'],\n                    ]);\n                },\n            ])\n            ->whereHas('remindable')\n            ->sort(request()->only(['o', 'k']))\n            ->paginate();\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('calendars.events', $calendar);\n    }\n\n    public function create(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('update', $calendar->entity);\n\n        $date = request()->get('date', '1-1-1');\n        [$year, $month, $day] = explode('-', $date);\n        if (Str::startsWith($date, '-')) {\n            [$year, $month, $day] = explode('-', mb_trim($date, '-'));\n            $year = \"-{$year}\";\n        }\n\n        return view('calendars.reminders.create', compact(\n            'campaign',\n            'calendar',\n            'day',\n            'month',\n            'year',\n        ));\n    }\n\n    public function store(AddCalendarEvent $request, Campaign $campaign, Calendar $calendar)\n    {\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $routeOptions = [$campaign, $calendar->entity, 'year' => $request->post('year')];\n        if ($request->has('layout')) {\n            $routeOptions['layout'] = $request->get('layout');\n        } else {\n            $routeOptions['month'] = $request->post('month');\n        }\n\n        // We need to handle negative year dates (start with -)\n        try {\n            $link = $this->service\n                ->user($request->user())\n                ->campaign($campaign)\n                ->calendar($calendar)\n                ->addEvent($request->all());\n\n            return redirect()->route('entities.show', $routeOptions)\n                ->with('success', __('calendars.event.success', ['event' => $link->remindable->name]));\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('entities.show', $routeOptions)\n                ->with('error', __('crud.bulk.errors.general', ['hint' => $e->getTranslatedMessage()]));\n        } catch (Exception $e) {\n            return redirect()->route('entities.show', $routeOptions);\n        }\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function eventLength(Campaign $campaign, Calendar $calendar, ValidateReminderLength $request)\n    {\n        $this->authorize('view', $calendar->entity);\n\n        return response()->json($this->lengthValidatorService->validateLength($calendar, $request));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/AchievementController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\AchievementService;\n\n/**\n * Class StatController\n */\nclass AchievementController extends Controller\n{\n    public function __construct(protected AchievementService $service) {}\n\n    public function index(Campaign $campaign)\n    {\n        $achievements = $this->service->campaign($campaign)->stats();\n\n        return view('campaigns.achievements.index', compact('campaign', 'achievements'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ApplicationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Enums\\ApplicationStatus;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Campaigns\\PatchCampaignApplication;\nuse App\\Http\\Requests\\Campaigns\\StoreCampaignApplicationStatus;\nuse App\\Models\\Application;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\ApplicationService;\n\nclass ApplicationController extends Controller\n{\n    public function __construct(protected ApplicationService $service)\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('applications', $campaign);\n\n        if (request()->get('filter') && request()->get('filter') == 'approved') {\n            $applications = $campaign->applications()->where('status', ApplicationStatus::Approved)->with('user')->paginate();\n        } elseif (request()->get('filter') && request()->get('filter') == 'rejected') {\n            $applications = $campaign->applications()->where('status', ApplicationStatus::Rejected)->with('user')->paginate();\n        } elseif (request()->get('filter') && request()->get('filter') == 'all') {\n            $applications = $campaign->applications()->with('user')->paginate();\n        } else {\n            $applications = $campaign->applications()->where('status', ApplicationStatus::Pending)->with('user')->paginate();\n        }\n\n        return view('campaigns.applications.index')\n            ->with('applications', $applications)\n            ->with('campaign', $campaign)\n            ->with('filter', request()->get('filter'));\n    }\n\n    public function show(Campaign $campaign, Application $application)\n    {\n        $this->authorize('applications', $campaign);\n\n        if (! $campaign->canHaveMoreMembers()) {\n            return view('cruds.forms.limit')\n                ->with('campaign', $campaign)\n                ->with('key', 'members')\n                ->with('name', 'campaign_roles');\n        }\n\n        if ($application->status == ApplicationStatus::Pending) {\n            return view('campaigns.applications.show')\n                ->with('application', $application)\n                ->with('campaign', $campaign);\n        }\n\n        return view('campaigns.applications.view')\n            ->with('application', $application)\n            ->with('campaign', $campaign);\n    }\n\n    public function edit(Campaign $campaign, Application $application)\n    {\n        $this->authorize('applications', $campaign);\n\n        if (! $campaign->canHaveMoreMembers()) {\n            return view('cruds.forms.limit')\n                ->with('campaign', $campaign)\n                ->with('limit', config('limits.campaigns.members'))\n                ->with('thing', __('campaigns.show.tabs.members'))\n                ->with('name', 'campaign_roles');\n        }\n\n        $action = request()->get('action');\n        if (! in_array($action, ['approve', 'reject'])) {\n            return redirect()->route('applications.index', $campaign);\n        }\n\n        return view('campaigns.applications.edit')\n            ->with('application', $application)\n            ->with('campaign', $campaign)\n            ->with('action', $action);\n    }\n\n    public function update(PatchCampaignApplication $request, Campaign $campaign, Application $application)\n    {\n        $this->authorize('applications', $campaign);\n\n        if (! $campaign->canHaveMoreMembers()) {\n            return view('cruds.forms.limit')\n                ->with('campaign', $campaign)\n                ->with('limit', config('limits.campaigns.members'))\n                ->with('thing', __('campaigns.show.tabs.members'))\n                ->with('name', 'campaign_roles');\n        }\n\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $note = $this->service\n            ->user(auth()->user())\n            ->campaign($campaign)\n            ->application($application)\n            ->process($request->only('role_id', 'rejection', 'action', 'reason'));\n\n        return redirect()->route('applications.index', $campaign)\n            ->with('success', __('campaigns/applications.update.' . $note));\n    }\n\n    public function toggle(Campaign $campaign)\n    {\n        $this->authorize('applications', $campaign);\n\n        return view('campaigns.applications._toggle', compact('campaign'));\n    }\n\n    public function toggleSave(StoreCampaignApplicationStatus $request, Campaign $campaign)\n    {\n        $this->authorize('applications', $campaign);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $isOpen = (bool) $request->get('status');\n\n        $campaign->update([\n            'is_open' => $isOpen,\n        ]);\n\n        $successKey = $isOpen ? 'campaigns/applications.toggle.success_open' : 'campaigns/applications.toggle.success';\n\n        return redirect()\n            ->route('applications.index', $campaign)\n            ->with('success', __($successKey));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ApplicationDashboardController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Enums\\Widget;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\n\nclass ApplicationDashboardController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('applications', $campaign);\n\n        $hasJoinWidget = $campaign->widgets()->where('widget', Widget::Join)->exists();\n\n        return view('campaigns.applications.dashboard_widget')\n            ->with('campaign', $campaign)\n            ->with('hasJoinWidget', $hasJoinWidget);\n    }\n\n    public function store(Campaign $campaign)\n    {\n        $this->authorize('applications', $campaign);\n\n        if (! $campaign->widgets()->where('widget', Widget::Join)->exists()) {\n            CampaignDashboardWidget::create([\n                'campaign_id' => $campaign->id,\n                'widget' => Widget::Join,\n                'dashboard_id' => null,\n            ]);\n        }\n\n        return redirect()\n            ->route('applications.index', $campaign)\n            ->with('success', __('campaigns/applications.dashboard_widget.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ApplicationSetupController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Enums\\CampaignFilterType;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Campaigns\\StoreCampaignSetup;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignFilter;\nuse App\\Services\\Campaign\\ApplicationService;\nuse App\\Services\\LanguageService;\nuse Illuminate\\Support\\Str;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass ApplicationSetupController extends Controller\n{\n    public function __construct(protected ApplicationService $service, protected LanguageService $languageService)\n    {\n        $this->middleware('auth');\n    }\n\n    public function setup(Campaign $campaign)\n    {\n        $this->authorize('applications', $campaign);\n\n        $timezones = [];\n\n        for ($i = -12; $i <= 14; $i++) {\n            $prefix = ($i >= 0) ? '+' : '-';\n            // Formats to \"UTC +05:00\" or \"UTC -11:00\"\n            $utcString = 'UTC ' . $prefix . Str::padLeft((string) abs($i), 2, '0') . ':00';\n\n            $timezones[$utcString] = $utcString;\n        }\n\n        $user = auth()->user();\n        $isElemental = $user->isElemental();\n        $prioritisedCampaign = null;\n\n        if ($isElemental) {\n            $adminCampaignIds = $user->campaignRoles()->where('is_admin', true)->pluck('campaign_id');\n            $prioritisedCampaign = Campaign::where('is_prioritised', true)\n                ->where('id', '!=', $campaign->id)\n                ->whereIn('id', $adminCampaignIds)\n                ->first();\n        }\n\n        $languages = $this->languageService->getSupportedLanguagesList(true);\n\n        return view('campaigns.applications.setup')\n            ->with('campaign', $campaign)\n            ->with('timezones', $timezones)\n            ->with('languages', $languages)\n            ->with('isElemental', $isElemental)\n            ->with('prioritisedCampaign', $prioritisedCampaign);\n    }\n\n    public function saveSetup(StoreCampaignSetup $request, Campaign $campaign)\n    {\n        $this->authorize('applications', $campaign);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $isPrioritised = false;\n        $user = auth()->user();\n\n        if ($user->isElemental() && $request->boolean('is_prioritised')) {\n            $adminCampaignIds = $user->campaignRoles()->where('is_admin', true)->pluck('campaign_id');\n            $conflicting = Campaign::where('is_prioritised', true)\n                ->where('id', '!=', $campaign->id)\n                ->whereIn('id', $adminCampaignIds)\n                ->first();\n\n            if ($conflicting) {\n                return redirect()->back()\n                    ->with('error', __('campaigns/applications.setup.prioritise_conflict', [\n                        'campaign' => '<a href=\"' . route('campaign-applications.setup', $conflicting) . '\" class=\"text-link\">' . e($conflicting->name) . '</a>',\n                    ]));\n            }\n\n            $isPrioritised = true;\n        }\n\n        $campaign->update([\n            'locale' => $request->get('locale'),\n            'is_prioritised' => $isPrioritised,\n        ]);\n\n        $campaign->systems()->sync($request->input('systems', []));\n        $campaign->genres()->sync($request->input('genres', []));\n        $campaign->playstyles()->sync($request->input('playstyles', []));\n\n        // Map request keys to Enum types\n        $filters = [\n            'intro' => CampaignFilterType::Intro,\n            'timezone' => CampaignFilterType::Timezone,\n            'schedule' => CampaignFilterType::Schedule,\n            'players' => CampaignFilterType::PlayerCount,\n        ];\n\n        foreach ($filters as $inputKey => $enumType) {\n            // Only save if the user actually sent data for this field\n            if ($request->filled($inputKey)) {\n                CampaignFilter::updateOrCreate(\n                    [\n                        'campaign_id' => $campaign->id,\n                        'type' => $enumType,\n                    ],\n                    [\n                        'entry' => Purify::clean($request->input($inputKey)),\n                    ]\n                );\n            }\n        }\n\n        $campaign->refresh();\n        $successKey = $user->can('canOpen', $campaign)\n            ? 'campaigns/applications.setup.success_complete'\n            : 'campaigns/applications.setup.success';\n\n        return redirect()\n            ->route('applications.index', $campaign)\n            ->with('success', __($successKey));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ApplyController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Campaigns\\StoreCampaignApplication;\nuse App\\Models\\Application;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\ApplicationService;\nuse Illuminate\\Support\\Str;\n\nclass ApplyController extends Controller\n{\n    public function __construct(protected ApplicationService $service)\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('apply', $campaign);\n\n        $application = auth()->user()->applications()->first();\n\n        $timezones = [];\n\n        for ($i = -12; $i <= 14; $i++) {\n            $prefix = ($i >= 0) ? '+' : '-';\n            // Formats to \"UTC +05:00\" or \"UTC -11:00\"\n            $utcString = 'UTC ' . $prefix . Str::padLeft((string) abs($i), 2, '0') . ':00';\n\n            $timezones[$utcString] = $utcString;\n        }\n\n        return view('campaigns.applications.apply')\n            ->with('application', $application)\n            ->with('timezones', $timezones)\n            ->with('campaign', $campaign);\n    }\n\n    public function save(StoreCampaignApplication $request, Campaign $campaign)\n    {\n        $this->authorize('apply', $campaign);\n\n        /** @var ?Application $application */\n        $application = auth()->user()->applications()->first();\n        if (! empty($application)) {\n            $application->update($request->validated());\n            $success = __('campaigns/applications.apply.success.update');\n        } else {\n            $this->service\n                ->user(auth()->user())\n                ->campaign($campaign)\n                ->apply($request);\n\n            $success = __('campaigns/applications.apply.success.apply');\n        }\n\n        return redirect()\n            ->route('dashboard', $campaign)\n            ->with('success', $success);\n    }\n\n    public function remove(Campaign $campaign)\n    {\n        $this->authorize('apply', $campaign);\n\n        /** @var ?Application $application */\n        $application = auth()->user()->applications()->first();\n        if (! empty($application)) {\n            $application->delete();\n        }\n\n        return redirect()\n            ->route('dashboard', $campaign)\n            ->with('success', __('campaigns/applications.apply.success.remove'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/CreateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCampaign;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\CreateService;\nuse App\\Services\\Campaign\\GenreService;\nuse App\\Services\\Campaign\\SystemService;\nuse App\\Services\\LanguageService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Str;\n\nclass CreateController extends Controller\n{\n    public function __construct(\n        protected CreateService $createService,\n        protected GenreService $genreService,\n        protected SystemService $systemService,\n        protected LanguageService $languageService\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request)\n    {\n        $this->authorize('create', new Campaign);\n\n        // A user with campaigns doesn't need this process.\n        $tracking = null;\n        if (session()->has('user_registered')) {\n            session()->remove('user_registered');\n            $tracking = 'pa10CJTvrssBEOaOq7oC';\n        }\n        $languages = $this->languageService->getSupportedLanguagesList(true);\n        $timezones = [];\n\n        for ($i = -12; $i <= 14; $i++) {\n            $prefix = ($i >= 0) ? '+' : '-';\n            // Formats to \"UTC +05:00\" or \"UTC -11:00\"\n            $utcString = 'UTC ' . $prefix . Str::padLeft((string) abs($i), 2, '0') . ':00';\n\n            $timezones[$utcString] = $utcString;\n        }\n\n        return view('campaigns.forms.create', [\n            'start' => auth()->user()->campaigns->count() === 0,\n            'gaTrackingEvent' => $tracking,\n            'languages' => $languages,\n            'timezones' => $timezones,\n        ]);\n    }\n\n    public function store(StoreCampaign $request)\n    {\n        $this->authorize('create', new Campaign);\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $first = auth()->user()->campaigns->count() === 0;\n        $campaign = $this->createService\n            ->request($request)\n            ->user($request->user())\n            ->create();\n\n        $this->genreService->campaign($campaign)->save($request->post('genres', []));\n        $this->systemService->campaign($campaign)->save($request->post('systems', []));\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('campaigns.edit', $campaign)\n                ->with('success', __('campaigns.create.success', ['name' => $campaign->name]));\n        } elseif ($request->has('submit-new')) {\n            return redirect()\n                ->route('start')\n                ->with('success', __('campaigns.create.success', ['name' => $campaign->name]));\n        } elseif ($first) {\n            return redirect()->route('dashboard', $campaign);\n        }\n\n        return redirect()->route('dashboard', $campaign)\n            ->with('success', __('campaigns.create.success', ['name' => $campaign->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/CssController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse Illuminate\\Http\\Response;\n\nclass CssController extends Controller\n{\n    /**\n     * Get the campaign css\n     *\n     * @return Response\n     */\n    public function index(Campaign $campaign)\n    {\n        $css = null;\n        if ($campaign->boosted()) {\n            $css = CampaignCache::campaign($campaign)->styles();\n        }\n\n        $response = \\Illuminate\\Support\\Facades\\Response::make($css);\n        $response->header('Content-Type', 'text/css');\n        // $response->header('Expires', Carbon::now()->addYear()->toDateTimeString());\n        $month = 31536000;\n        $response->setLastModified($campaign->updated_at->toDateTime());\n        $response->header('Cache-Control', 'public, max_age=' . $month);\n\n        return $response;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/DashboardController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Http\\Requests\\StoreCampaignDashboard;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboard;\nuse App\\Services\\DashboardService;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass DashboardController extends Controller\n{\n    public function __construct(protected DashboardService $service)\n    {\n        $this->middleware('auth');\n        $this->middleware(Boosted::class, ['except' => ['index', 'create']]);\n    }\n\n    /**\n     * @return RedirectResponse\n     */\n    public function index()\n    {\n        return redirect()->to('home');\n    }\n\n    public function create(Campaign $campaign)\n    {\n        if (! $campaign->boosted()) {\n            return $this->cta($campaign);\n        }\n\n        $this->authorize('dashboard', $campaign);\n        $source = null;\n        if (request()->has('source')) {\n            $source = CampaignDashboard::findOrFail(request()->get('source'));\n        }\n\n        return view('dashboard.dashboards.create')\n            ->with('campaign', $campaign)\n            ->with('source', $source);\n    }\n\n    public function store(StoreCampaignDashboard $request, Campaign $campaign)\n    {\n        if (! $campaign->boosted()) {\n            return $this->cta($campaign);\n        }\n\n        $this->authorize('dashboard', $campaign);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $dashboard = $this\n            ->service\n            ->campaign($campaign)\n            ->request($request)\n            ->user($request->user())\n            ->create();\n\n        return redirect()->route('dashboard.setup', [$campaign, 'dashboard' => $dashboard->id])\n            ->with('success', __('dashboard.dashboards.create.success', ['name' => $dashboard->name]));\n    }\n\n    public function edit(Campaign $campaign, CampaignDashboard $campaignDashboard)\n    {\n        $this->authorize('dashboard', $campaign);\n\n        return view('dashboard.dashboards.update')\n            ->with('campaign', $campaign)\n            ->with('dashboard', $campaignDashboard);\n    }\n\n    public function update(Campaign $campaign, CampaignDashboard $campaignDashboard, StoreCampaignDashboard $request)\n    {\n        $this->authorize('dashboard', $campaign);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $dashboard = $this->service->campaign($campaign)\n            ->dashboard($campaignDashboard)\n            ->request($request)\n            ->update();\n\n        return redirect()->route('dashboard.setup', [$campaign, 'dashboard' => $dashboard->id])\n            ->with('success', __('dashboard.dashboards.update.success', ['name' => $dashboard->name]));\n    }\n\n    public function destroy(Campaign $campaign, CampaignDashboard $campaignDashboard)\n    {\n        $this->authorize('dashboard', $campaign);\n        if (request()->ajax()) {\n            return response()->json();\n        }\n\n        $campaignDashboard->delete();\n\n        return redirect()->route('dashboard.setup', $campaign)\n            ->with('success', __('dashboard.dashboards.delete.success', ['name' => $campaignDashboard->name]));\n    }\n\n    protected function cta(Campaign $campaign)\n    {\n        return view('components.premium-dialog', [\n            'campaign' => $campaign,\n            'title' => __('dashboards/premium.title'),\n            'pitch' => __('dashboards/premium.pitch'),\n            'doc' => 'guides/dashboard.html#custom-dashboards',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/DashboardHeaderController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\UpdateCampaignHeader;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass DashboardHeaderController extends Controller\n{\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function edit(Campaign $campaign, ?CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        $this->authorize('update', $campaign);\n\n        if (! empty($campaignDashboardWidget) && ! empty($campaignDashboardWidget->campaign_id)) {\n            if ($campaignDashboardWidget->campaign_id != $campaign->id) {\n                abort(404);\n            }\n        } else {\n            $campaignDashboardWidget = null;\n        }\n\n        return view('campaigns.forms.dashboard-header.edit')\n            ->with('campaign', $campaign)\n            ->with('widget', $campaignDashboardWidget);\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function update(UpdateCampaignHeader $request, Campaign $campaign, ?CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        $this->authorize('update', $campaign);\n\n        $campaign->update($request->only('excerpt'));\n\n        return redirect()\n            ->route('dashboard.setup', $campaignDashboardWidget->dashboard_id ? [$campaign, 'dashboard' => $campaignDashboardWidget->dashboard_id] : [$campaign])\n            ->with('success', __('campaigns/dashboard-header.edit.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/DashboardWidgetController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Enums\\Widget;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCampaignDashboardWidget;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboard;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Services\\EntityTypeService;\n\nclass DashboardWidgetController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(protected EntityTypeService $entityTypeService)\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('dashboard', $campaign);\n\n        $dashboard = null;\n        if (request()->get('dashboard')) {\n            $dashboard = CampaignDashboard::findOrFail(request()->get('dashboard'));\n        }\n\n        $withOnboarding = $campaign->widgets()->onDashboard($dashboard)->where('widget', Widget::Onboarding)->count() === 0;\n        $withHelp = $campaign->widgets()->onDashboard($dashboard)->where('widget', Widget::Help)->count() === 0;\n\n        return view('dashboard.widgets.selection')\n            ->with('campaign', $campaign)\n            ->with('dashboard', $dashboard)\n            ->with('withOnboarding', $withOnboarding)\n            ->with('withHelp', $withHelp);\n    }\n\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('dashboard', $campaign);\n\n        $widget = request()->get('widget', 'preview');\n        if (! view()->exists('dashboard.widgets.forms._' . $widget)) {\n            abort(404);\n        }\n\n        if ($widget === 'gallery' && ! $campaign->premium()) {\n            return view('components.premium-dialog', [\n                'title' => __('dashboards/widgets/gallery.name'),\n                'campaign' => $campaign,\n                'doc' => 'guides/dashboard.html#gallery',\n                'pitch' => __('dashboards/widgets/gallery.helpers.premium'),\n            ]);\n        }\n\n        $entityTypes = $this->entityTypeService\n            ->campaign($campaign)\n            ->exclude([config('entities.ids.bookmark')])\n            ->prepend(['' => __('dashboard.widgets.random.type.all')])\n            ->toSelect();\n\n        $dashboard = request()->has('dashboard') ?\n            CampaignDashboard::where('id', request()->get('dashboard'))->first() : null;\n\n        return view('dashboard.widgets.forms.create', [\n            'campaign' => $campaign,\n            'widget' => $widget,\n            'entityTypes' => $entityTypes,\n            'dashboard' => $dashboard,\n        ]);\n    }\n\n    public function store(StoreCampaignDashboardWidget $request, Campaign $campaign)\n    {\n        $this->authorize('dashboard', $campaign);\n        if ($request->input('widget') === Widget::Gallery->value) {\n            $this->authorize('galleryWidget', $campaign);\n        }\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n        $widget = CampaignDashboardWidget::create($data);\n\n        return redirect()\n            ->route('dashboard.setup', $widget->dashboard_id ?\n                [$campaign, 'dashboard' => $widget->dashboard_id] : $campaign)\n            ->with('success', __('dashboard.widgets.create.success'));\n    }\n\n    public function show(Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        return redirect()->route('dashboard', $campaign);\n    }\n\n    public function edit(Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        $this->authorize('dashboard', $campaign);\n\n        $dashboards = [null => __('dashboard.dashboards.default.title')];\n        foreach (CampaignDashboard::orderBy('name')->pluck('name', 'id')->toArray() as $id => $dashboard) {\n            $dashboards[$id] = $dashboard;\n        }\n\n        $entityTypes = $this->entityTypeService\n            ->campaign($campaign)\n            ->exclude([config('entities.ids.bookmark')])\n            ->prepend(['' => __('dashboard.widgets.random.type.all')])\n            ->toSelect();\n\n        return view('dashboard.widgets.forms.edit', [\n            'campaign' => $campaign,\n            'model' => $campaignDashboardWidget,\n            'widget' => $campaignDashboardWidget->widget->value,\n            'entityTypes' => $entityTypes,\n            'dashboards' => $dashboards,\n        ]);\n    }\n\n    public function update(StoreCampaignDashboardWidget $request, Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        $this->authorize('dashboard', $campaign);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        // get all request data\n        $input = $request->all();\n        // force entity_id to take null if not present in data\n        $input['entity_id'] = $request->input('entity_id');\n\n        $campaignDashboardWidget->update($input);\n\n        return redirect()\n            ->route('dashboard.setup', $campaignDashboardWidget->dashboard_id ?\n                [$campaign, 'dashboard' => $campaignDashboardWidget->dashboard_id] : $campaign)\n            ->with('success', __('dashboard.widgets.update.success'));\n    }\n\n    public function destroy(Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        $this->authorize('dashboard', $campaign);\n        $campaignDashboardWidget->delete();\n\n        return redirect()\n            ->route('dashboard.setup', $campaignDashboardWidget->dashboard_id ?\n                [$campaign, 'dashboard' => $campaignDashboardWidget->dashboard_id] : $campaign)\n            ->with('success', __('dashboard.widgets.delete.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/DefaultImageController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Http\\Requests\\Campaigns\\DefaultImageDestroy;\nuse App\\Http\\Requests\\Campaigns\\DefaultImageStore;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\Campaign\\DefaultImageService;\nuse App\\Services\\EntityTypeService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\View\\View;\n\nclass DefaultImageController extends Controller\n{\n    public function __construct(\n        protected EntityTypeService $entityTypeService,\n        protected DefaultImageService $service\n    ) {\n        $this->middleware(Boosted::class, ['except' => 'index']);\n    }\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $entityTypes = [];\n        /** @var EntityType $entityType */\n        foreach (EntityType::inCampaign($campaign)->get() as $entityType) {\n            $entityTypes[$entityType->pluralCode()] = $entityType;\n        }\n\n        $images = $campaign->defaultImages();\n\n        return view('campaigns.default-images.index')\n            ->with('campaign', $campaign)\n            ->with('images', $images)\n            ->with('entityTypes', $entityTypes);\n    }\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        $ignore = $campaign->existingDefaultImages();\n\n        $entityTypes = $this->entityTypeService\n            ->campaign($campaign)\n            ->exclude(config('entities.ids.bookmark'))\n            ->skip($ignore)\n            ->toSelect();\n\n        return view('campaigns.default-images.create', compact(\n            'campaign',\n            'entityTypes'\n        ));\n    }\n\n    public function store(DefaultImageStore $request, Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        /** @var EntityType $entityType */\n        $entityType = EntityType::inCampaign($campaign)->find($request->post('entity_type'));\n\n        if ($this->service->campaign($campaign)->entityType($entityType)->user(auth()->user())->save($request)) {\n            return redirect()->route('campaign.default-images', $campaign)\n                ->with(\n                    'success',\n                    __('campaigns/default-images.create.success', ['type' => $entityType->plural()])\n                );\n        }\n\n        return redirect()->route('campaign.default-images', $campaign)\n            ->with(\n                'error',\n                __('campaigns/default-images.create.error', ['type' => $entityType->plural()])\n            );\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(DefaultImageDestroy $request, Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        /** @var EntityType $entityType */\n        $entityType = EntityType::inCampaign($campaign)->findOrFail($request->post('entity_type'));\n        $this->service\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->entityType($entityType)\n            ->destroy();\n\n        return redirect()->route('campaign.default-images', $campaign)\n            ->with(\n                'success',\n                __('campaigns/default-images.destroy.success', ['type' => $entityType->plural()])\n            );\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function reset(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        $this->service\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->destroyAll();\n\n        return redirect()->route('campaign.default-images', $campaign)\n            ->with(\n                'success',\n                __('campaigns/default-images.reset.success')\n            );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/DefaultsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Campaigns\\StoreDefaults;\nuse App\\Models\\Campaign;\n\nclass DefaultsController extends Controller\n{\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        return view('campaigns.defaults.index', compact('campaign'));\n    }\n\n    public function save(StoreDefaults $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $campaign->update($request->all());\n\n        return redirect()->route('campaign-defaults', $campaign)\n            ->with('success', __('campaigns/defaults.update.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/DeleteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\DeleteCampaign;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\DeletionService;\n\nclass DeleteController extends Controller\n{\n    protected DeletionService $deletionService;\n\n    public function __construct(DeletionService $deletionService)\n    {\n        $this->middleware('auth');\n        $this->deletionService = $deletionService;\n    }\n\n    public function show(Campaign $campaign)\n    {\n        $this->authorize('roles', $campaign);\n\n        return view('campaigns.delete')\n            ->with('campaign', $campaign);\n    }\n\n    public function destroy(DeleteCampaign $request, Campaign $campaign)\n    {\n        $this->authorize('delete', $campaign);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $this->deletionService\n            ->campaign($campaign)\n            ->user($request->user())\n            ->delete();\n\n        return redirect()->route('home')\n            ->with('success', __('campaigns/delete.success', ['name' => $campaign->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/EntityTypeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\DeleteEntityType;\nuse App\\Http\\Requests\\StoreEntityType;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\EntityTypeService;\nuse Exception;\n\nclass EntityTypeController extends Controller\n{\n    public function __construct(\n        protected EntityTypeService $entityTypeService\n    ) {}\n\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('setting', $campaign);\n\n        if (! $campaign->premium()) {\n            return view('campaigns.entity-types.not-premium')\n                ->with('campaign', $campaign);\n        }\n\n        $limit = config('limits.campaigns.modules.premium');\n        if ($campaign->isWyvern()) {\n            $limit = config('limits.campaigns.modules.wyvern');\n        } elseif ($campaign->isElemental()) {\n            $limit = config('limits.campaigns.modules.elemental');\n        }\n\n        if ($campaign->entityTypes->count() >= $limit) {\n            return view('campaigns.entity-types.max-reached')\n                ->with('campaign', $campaign)\n                ->with('limit', $limit);\n        }\n\n        return view('campaigns.entity-types.create')\n            ->with('campaign', $campaign);\n    }\n\n    public function store(StoreEntityType $request, Campaign $campaign)\n    {\n        $this->authorize('setting', $campaign);\n\n        if (! $campaign->premium()) {\n            return redirect()->route('campaign.modules', $campaign)\n                ->with('error', __('This feature is only available on premium campaigns'));\n        } elseif ($campaign->entityTypes->count() > config('limits.campaigns.modules')) {\n            return view('campaigns.entity-types.max-reached')\n                ->with('campaign', $campaign);\n        }\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $this->entityTypeService\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->request($request)\n            ->save();\n\n        return redirect()->route('campaign.modules', $campaign)\n            ->with('success', __('campaigns/modules.create.success'));\n    }\n\n    public function edit(Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n        $this->authorize('update', [$entityType, $campaign]);\n\n        if (! $campaign->premium()) {\n            return view('campaigns.entity-types.not-premium')\n                ->with('campaign', $campaign);\n        }\n\n        $image = null;\n        $thumbnails = $campaign->defaultImages();\n        foreach ($thumbnails as $thumbnail) {\n            if ($thumbnail['type'] == $entityType->pluralCode()) {\n                $image = $thumbnail;\n            }\n        }\n\n        return view('campaigns.entity-types.edit')\n            ->with('campaign', $campaign)\n            ->with('image', $image)\n            ->with('entityType', $entityType);\n    }\n\n    public function update(StoreEntityType $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n        $this->authorize('update', [$entityType, $campaign]);\n\n        if (! $campaign->premium()) {\n            return redirect()->route('campaign.modules', $campaign)\n                ->with('error', __('This feature is only available on premium campaigns'));\n        }\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $this->entityTypeService\n            ->campaign($campaign)\n            ->entityType($entityType)\n            ->request($request)\n            ->user(auth()->user())\n            ->save();\n\n        return redirect()->route('campaign.modules', $campaign)\n            ->with('success', __('campaigns/modules.rename.success'));\n    }\n\n    /**\n     * Toggle a module in the campaign's settings\n     */\n    public function toggle(Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n        $this->authorize('update', [$entityType, $campaign]);\n\n        try {\n            $this->entityTypeService\n                ->campaign($campaign)\n                ->user(auth()->user())\n                ->entityType($entityType)\n                ->toggle();\n\n            return response()->json([\n                'success' => true,\n                'status' => $entityType->isEnabled(),\n                'toast' => __('campaigns.settings.' . ($entityType->isEnabled() ? 'enabled' : 'disabled'), ['module' => $entityType->plural()]),\n            ]);\n        } catch (Exception $e) {\n            return response()->json([\n                'success' => false,\n            ]);\n        }\n    }\n\n    public function confirm(Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n        $this->authorize('delete', [$entityType, $campaign]);\n\n        $entityCount = $entityType->entities->count();\n\n        return view('campaigns.entity-types.confirm')\n            ->with('campaign', $campaign)\n            ->with('entityCount', $entityCount)\n            ->with('entityType', $entityType);\n    }\n\n    public function destroy(DeleteEntityType $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n        $this->authorize('delete', [$entityType, $campaign]);\n\n        if (request()->ajax()) {\n            return response()->json();\n        }\n\n        $this->entityTypeService\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->entityType($entityType)\n            ->delete();\n\n        return redirect()->route('campaign.modules', $campaign)\n            ->with('success', __('campaigns/modules.delete.success', ['name' => $entityType->name()]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ExportController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\Exports\\QueueService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\Request;\n\nclass ExportController extends Controller\n{\n    public function __construct(protected QueueService $queueService)\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('setting', $campaign);\n\n        return view('campaigns.export', compact('campaign'));\n    }\n\n    /**\n     * Dispatch the campaign export jobs and have the user wait for a bit\n     *\n     * @throws AuthorizationException\n     */\n    public function export(Request $request, Campaign $campaign)\n    {\n        $this->authorize('setting', $campaign);\n        if (request()->ajax()) {\n            return response()->json();\n        }\n\n        if (! $request->user()->can('export', $campaign)) {\n            return redirect()\n                ->route('campaign.export', $campaign)\n                ->withError(__('campaigns/export.errors.limit'));\n        }\n\n        if ($request->get('type') == 2 && ! $campaign->premium()) {\n            return redirect()\n                ->route('campaign.export', $campaign)\n                ->withError(__('campaigns/export.errors.premium'));\n        }\n\n        $this->queueService\n            ->campaign($campaign)\n            ->user($request->user())\n            ->type($request->get('type'))\n            ->queue();\n\n        $adminRoleName = $campaign->adminRoleName();\n\n        return redirect()\n            ->route('campaign.export', $campaign)\n            ->withSuccess(__('campaigns/export.success', [\n                'admin' => $adminRoleName,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/FollowController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\FollowService;\n\nclass FollowController extends Controller\n{\n    protected FollowService $service;\n\n    public function __construct(FollowService $service)\n    {\n        $this->middleware('auth');\n        $this->service = $service;\n    }\n\n    public function update(Campaign $campaign)\n    {\n        $this->authorize('follow', $campaign);\n\n        return response()->json([\n            'following' => $this->service\n                ->campaign($campaign)\n                ->user(auth()->user())\n                ->update(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ImageController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Campaigns\\StoreImage;\nuse App\\Models\\Campaign;\n\nclass ImageController extends Controller\n{\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        return view('campaigns.forms.modals.image')\n            ->with('campaign', $campaign);\n    }\n\n    public function save(StoreImage $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $campaign->update($request->only('image', 'image_url'));\n\n        return redirect()->route('dashboard', $campaign)->with('success', __('campaigns/sidebar.image-success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ImportController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignImport;\nuse App\\Services\\Campaign\\Import\\PrepareService;\n\nclass ImportController extends Controller\n{\n    protected PrepareService $service;\n\n    public function __construct(PrepareService $prepareService)\n    {\n        $this->middleware('auth');\n        $this->service = $prepareService;\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('setting', $campaign);\n\n        Datagrid::layout(\\App\\Renderers\\Layouts\\Campaign\\CampaignImport::class);\n\n        $rows = $campaign->campaignImports()\n            ->sort(request()->only(['o', 'k']))\n            ->where('status_id', '<>', CampaignImportStatus::PREPARED)\n            ->with(['user'])\n            ->orderBy('updated_at', 'DESC')\n            ->paginate();\n\n        // Ajax Datagrid\n        if (request()->ajax()) {\n            $html = view('layouts.datagrid._table')->with('rows', $rows)->render();\n\n            return response()->json([\n                'success' => true,\n                'html' => $html,\n            ]);\n        }\n\n        $token = null;\n        if (auth()->user()->can('import', $campaign)) {\n            $token = $this->service\n                ->campaign($campaign)\n                ->user(auth()->user())\n                ->token();\n        }\n\n        return view('campaigns.import.index')\n            ->with('campaign', $campaign)\n            ->with('token', $token)\n            ->with('rows', $rows);\n    }\n\n    public function csv(Campaign $campaign, CampaignImport $campaignImport)\n    {\n        $this->authorize('setting', $campaign);\n\n        return view('campaigns.import.process-csv')\n            ->with('campaign', $campaign)\n            ->with('import', $campaignImport);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/InviteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCampaignInvite;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignInvite;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass InviteController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @return RedirectResponse\n     */\n    public function index()\n    {\n        return redirect()->route('home');\n    }\n\n    public function show(Campaign $campaign, CampaignInvite $campaignInvite)\n    {\n        return redirect()->route('home');\n    }\n\n    /**\n     * Create a new invitation link form\n     *\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('invite', $campaign);\n\n        if (! $campaign->canHaveMoreMembers()) {\n            return view('cruds.forms.limit')\n                ->with('campaign', $campaign)\n                ->with('limit', config('limits.campaigns.members'))\n                ->with('thing', __('campaigns.show.tabs.members'))\n                ->with('name', 'campaign_roles');\n        }\n\n        return view('campaigns.invites.create', compact('campaign'));\n    }\n\n    /**\n     * Save the new invitation link to the database\n     */\n    public function store(StoreCampaignInvite $request, Campaign $campaign)\n    {\n        $this->authorize('invite', $campaign);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        if (! $campaign->canHaveMoreMembers()) {\n            return redirect()->back();\n        }\n\n        $data = $request->only('role_id', 'validity');\n        $data['campaign_id'] = $campaign->id;\n        /** @var CampaignInvite $invitation */\n        $invitation = CampaignInvite::create($data);\n\n        $link = route('campaigns.join', [$invitation->token]);\n        $copy = '<a href=\"#\" data-clipboard=\"' . $link . '\" data-toggle=\"tooltip\" data-toast=\"' . __('crud.alerts.copy_invite') . '\" title=\"' . __('campaigns.invites.actions.copy') . '\" class=\"text-link\"><i class=\"fa-solid fa-copy\"></i> ' . __('campaigns.invites.actions.copy') . '</a>';\n\n        return redirect()->route('campaign_users.index', $campaign)\n            ->with(\n                'success_raw',\n                __(\n                    'campaigns.invites.create.success_link',\n                    ['link' => $copy]\n                )\n            );\n    }\n\n    /**\n     * Remove an invitation link\n     */\n    public function destroy(Campaign $campaign, CampaignInvite $campaignInvite)\n    {\n        $this->authorize('invite', $campaignInvite->campaign);\n\n        $campaignInvite->delete();\n\n        return redirect()->route('campaign_users.index', $campaign)\n            ->with('success', __('campaigns.invites.destroy.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/LeaveController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\LeaveService;\nuse App\\Services\\Users\\CampaignService;\nuse Exception;\n\nclass LeaveController extends Controller\n{\n    public function __construct(\n        protected LeaveService $leaveService,\n        protected CampaignService $campaignService,\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('member', $campaign);\n\n        return view('campaigns.leave')->with('campaign', $campaign);\n    }\n\n    public function process(Campaign $campaign)\n    {\n        $this->authorize('leave', $campaign);\n        if (request()->ajax()) {\n            return response()->json();\n        }\n\n        try {\n            $this->leaveService\n                ->campaign($campaign)\n                ->user(auth()->user())\n                ->leave();\n\n            $this->campaignService\n                ->user(auth()->user())\n                ->next();\n\n            return redirect()->route('home')\n                ->with('success', __('campaigns.leave.success', ['name' => $campaign->name]));\n        } catch (Exception $e) {\n            $this->campaignService\n                ->user(auth()->user())\n                ->next();\n\n            return redirect()->route('overview', $campaign)->withErrors($e->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/LogController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\UserLog;\nuse Carbon\\Carbon;\n\nclass LogController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        $cutoff = $campaign->premium() ? config('limits.campaigns.logs.premium') : config('limits.campaigns.logs.standard');\n        $premium = config('limits.campaigns.logs.premium');\n        $logs = UserLog::with(['user', 'impersonator'])\n            ->where('campaign_id', $campaign->id)\n            ->whereDate('created_at', '>=', Carbon::today()->subDays($premium)->format('Y-m-d'))\n            ->latest()\n            ->paginate();\n\n        return view('campaigns.logs.index')\n            ->with('campaign', $campaign)\n            ->with('cutoff', $cutoff)\n            ->with('premium', $premium)\n            ->with('logs', $logs);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/MemberController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Facades\\Identity;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\Entity;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass MemberController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * Switch to another member\n     *\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function switch(Campaign $campaign, CampaignUser $campaignUser, ?Entity $entity = null)\n    {\n        $this->authorize('switch', $campaignUser);\n\n        if (Identity::campaign($campaign)->switch($campaignUser)) {\n            if ($entity) {\n                return redirect()\n                    ->to($entity->url());\n            }\n\n            return redirect()\n                ->route('dashboard', $campaign);\n        }\n\n        return redirect()\n            ->route('dashboard', $campaign);\n    }\n\n    /**\n     * Switch back to the original user\n     *\n     * @return RedirectResponse\n     */\n    public function back(Campaign $campaign)\n    {\n        if (Identity::back()) {\n            return redirect()\n                ->route('dashboard', $campaign)\n                ->with('success', __('campaigns.members.switch_back_success'));\n        }\n\n        return redirect()\n            ->route('dashboard', $campaign);\n    }\n\n    public function delete(Campaign $campaign, CampaignUser $campaignUser)\n    {\n        $this->authorize('delete', $campaignUser);\n\n        return view('campaigns.members.delete', $campaign)\n            ->with('campaign', $campaign)\n            ->with('campaignUser', $campaignUser);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/Members/RoleController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign\\Members;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\UpdateUserRoles;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignUser;\nuse App\\Services\\Campaign\\MemberService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass RoleController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(\n        protected MemberService $memberService\n    ) {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, CampaignUser $campaignUser)\n    {\n        $this->authorize('members', $campaign);\n\n        $roles = $campaign->roles->where('is_public', false)->all();\n\n        return view('campaigns.members.update', [\n            'campaign' => $campaign,\n            'roles' => $roles,\n            'campaignUser' => $campaignUser,\n        ]);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function save(UpdateUserRoles $request, Campaign $campaign, CampaignUser $campaignUser)\n    {\n        $this->authorize('update', $campaignUser);\n        if (request()->ajax()) {\n            return response()->json();\n        }\n        try {\n            $this->memberService\n                ->user($request->user())\n                ->campaign($campaign)\n                ->update($campaignUser, $request->get('roles', []));\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('campaign_users.index', $campaign)\n                ->with('error_raw', $e->getTranslatedMessage());\n        }\n\n        return redirect()\n            ->route('campaign_users.index', $campaign)\n            ->with('success', __('campaigns/members.roles.success', [\n                'user' => $campaignUser->user->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ModuleController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\UpdateModuleName;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\Campaign\\ModuleEditService;\nuse App\\Services\\Campaign\\Sidebar\\SaveService;\nuse App\\Services\\EntityTypeService;\nuse Exception;\n\nclass ModuleController extends Controller\n{\n    public function __construct(\n        protected SaveService $sidebarService,\n        protected ModuleEditService $moduleEditService,\n        protected EntityTypeService $entityTypeService\n    ) {}\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('setting', $campaign);\n\n        $entityTypes = $this->entityTypeService\n            ->campaign($campaign)\n            ->exclude(config('entities.ids.attribute_template'))\n            ->withDisabled()\n            ->ordered();\n\n        $customEntityTypes = $entityTypes->whereNotNull('campaign_id');\n        $entityTypes = $entityTypes->whereNull('campaign_id');\n        $thumbnails = $campaign->defaultImages(true);\n\n        return view('campaigns.modules.index')\n            ->with('campaign', $campaign)\n            ->with('customEntityTypes', $customEntityTypes)\n            ->with('entityTypes', $entityTypes)\n            ->with('canReset', true)\n            ->with('thumbnails', $thumbnails);\n    }\n\n    public function edit(Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n\n        $image = null;\n        $thumbnails = $campaign->defaultImages();\n        foreach ($thumbnails as $thumbnail) {\n            if ($thumbnail['type'] == $entityType->pluralCode()) {\n                $image = $thumbnail;\n            }\n        }\n\n        $singular = $campaign->moduleName($entityType->id);\n        $plural = $campaign->moduleName($entityType->id, true);\n        $icon = $campaign->moduleIcon($entityType->id);\n\n        return view('campaigns.modules.edit')\n            ->with('campaign', $campaign)\n            ->with('entityType', $entityType)\n            ->with('singular', $singular)\n            ->with('plural', $plural)\n            ->with('icon', $icon)\n            ->with('image', $image);\n    }\n\n    public function update(UpdateModuleName $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $this->moduleEditService\n            ->campaign($campaign)\n            ->entityType($entityType)\n            ->user($request->user())\n            ->update($request);\n\n        return redirect()->route('campaign.modules', $campaign)\n            ->with('success', __('campaigns/modules.rename.success'));\n    }\n\n    public function reset(Campaign $campaign)\n    {\n        $this->authorize('setting', $campaign);\n\n        $this->moduleEditService\n            ->user(auth()->user())\n            ->campaign($campaign)\n            ->reset();\n\n        $this->sidebarService\n            ->campaign($campaign)\n            ->clearCache();\n\n        return redirect()\n            ->route('campaign.modules', $campaign)\n            ->with('success', __('campaigns/modules.reset.success'));\n    }\n\n    /**\n     * Toggle a module in the campaign's settings\n     */\n    public function toggle(Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('setting', $campaign);\n\n        try {\n            $status = $this->moduleEditService\n                ->campaign($campaign)\n                ->user(auth()->user())\n                ->entityType($entityType)\n                ->toggle();\n\n            return response()->json([\n                'success' => true,\n                'status' => $campaign->enabled($entityType),\n                'toast' => __('campaigns.settings.' . ($status ? 'enabled' : 'disabled'), ['module' => $entityType->plural()]),\n            ]);\n        } catch (Exception $e) {\n            return response()->json([\n                'success' => false,\n            ]);\n        }\n    }\n\n    /**\n     * Toggle a module in the campaign's settings\n     */\n    public function toggleFeature(Campaign $campaign, string $module)\n    {\n        $this->authorize('setting', $campaign);\n\n        try {\n            $status = $this->moduleEditService\n                ->campaign($campaign)\n                ->toggleFeature($module);\n\n            return response()->json([\n                'success' => true,\n                'status' => $campaign->setting->{$module},\n                'toast' => __('campaigns.settings.' . ($status ? 'enabled' : 'disabled'), ['module' => __('entities.' . $module)]),\n            ]);\n        } catch (Exception $e) {\n            return response()->json([\n                'success' => false,\n            ]);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/PluginController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Plugin;\nuse App\\Services\\Campaign\\PluginService;\nuse Exception;\nuse Illuminate\\Http\\Request;\n\nclass PluginController extends Controller\n{\n    public function __construct(protected PluginService $service) {}\n\n    public function index(Campaign $campaign)\n    {\n        Datagrid::layout(\\App\\Renderers\\Layouts\\Campaign\\Plugin::class);\n\n        $highlight = request()->get('highlight');\n        if (! empty($highlight)) {\n            Datagrid::highlight(function () use ($highlight) {\n                // @phpstan-ignore-next-line\n                return $this->uuid === $highlight;\n            });\n        }\n\n        $plugins = $campaign->plugins()\n            ->preparedSelect()\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->highlighted($highlight)\n            ->has('user')\n            ->with('versions');\n\n        if (auth()->guest() || ! auth()->user()->can('member', $campaign)) {\n            $plugins->where('campaign_plugins.is_active', true);\n        }\n        $rows = $plugins->paginate();\n\n        // Ajax Datagrid\n        if (request()->ajax()) {\n            $html = view('layouts.datagrid._table')->with('rows', $rows)->with('campaign', $campaign)->render();\n            $deletes = view('layouts.datagrid.delete-forms')->with('models', Datagrid::deleteForms())->with('campaign', $campaign)->render();\n\n            return response()->json([\n                'success' => true,\n                'html' => $html,\n                'deletes' => $deletes,\n            ]);\n        }\n\n        return view('campaigns.plugins', compact('campaign', 'rows', 'highlight'));\n    }\n\n    public function delete(Request $request, Campaign $campaign, Plugin $plugin)\n    {\n        $this->authorize('recover', $campaign);\n\n        try {\n            $this->service->campaign($campaign)->user($request->user())->plugin($plugin)->remove();\n\n            return redirect()->route('campaign_plugins.index', $campaign)\n                ->with(\n                    'success',\n                    __('campaigns/plugins.destroy.success', ['plugin' => $plugin->name])\n                );\n        } catch (Exception $e) {\n            return redirect()->route('campaign_plugins.index', $campaign)\n                ->with(\n                    'error',\n                    $e->getMessage()\n                );\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/Plugins/BulkController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign\\Plugins;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Models\\Campaign;\nuse App\\Models\\Plugin;\nuse App\\Services\\Campaign\\PluginService;\n\nclass BulkController extends Controller\n{\n    public function __construct(protected PluginService $service)\n    {\n        $this->middleware(['auth', Boosted::class]);\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        $action = request()->get('action');\n        $models = request()->get('model');\n        if (! in_array($action, ['enable', 'disable', 'update', 'delete']) || empty($models)) {\n            return redirect()\n                ->route('campaign_plugins.index', $campaign);\n        }\n\n        $this->service->campaign($campaign)->user(auth()->user());\n        $count = 0;\n        foreach ($models as $id) {\n            /** @var Plugin|null $plugin */\n            $plugin = Plugin::find($id);\n            if (empty($plugin)) {\n                continue;\n            }\n            if ($action === 'enable') {\n                if ($this->service->plugin($plugin)->enable()) {\n                    $count++;\n                }\n            } elseif ($action === 'disable') {\n                if ($this->service->plugin($plugin)->disable()) {\n                    $count++;\n                }\n            } elseif ($action === 'update') {\n                if ($this->service->plugin($plugin)->update()) {\n                    $count++;\n                }\n            } elseif ($action === 'delete') {\n                $this->service->plugin($plugin)->remove();\n                $count++;\n            }\n        }\n        CampaignCache::campaign($campaign)->clearTheme();\n\n        return redirect()\n            ->route('campaign_plugins.index', $campaign)\n            ->with('success', trans_choice('campaigns/plugins.bulks.' . $action, $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/Plugins/CssController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign\\Plugins;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse Illuminate\\Support\\Facades\\Response;\n\nclass CssController extends Controller\n{\n    public function index(Campaign $campaign)\n    {\n        $css = null;\n        if ($campaign->boosted()) {\n            $css = CampaignCache::campaign($campaign)->themes();\n        }\n\n        $response = Response::make($css);\n        $response->header('Content-Type', 'text/css');\n        // $response->header('Expires', Carbon::now()->addMonth()->toDateTimeString());\n        $month = 31536000;\n        $response->setLastModified($campaign->updated_at->toDateTime());\n        $response->header('Cache-Control', 'public, max_age=' . $month);\n\n        return $response;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/Plugins/ImportController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign\\Plugins;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\Plugin;\nuse App\\Services\\Plugins\\ImporterService;\nuse Exception;\nuse Illuminate\\Http\\Request;\n\nclass ImportController extends Controller\n{\n    public function __construct(protected ImporterService $importerService)\n    {\n        $this->middleware(['auth', Boosted::class]);\n    }\n\n    public function index(Campaign $campaign, Plugin $plugin)\n    {\n        $this->authorize('recover', $campaign);\n\n        $version = CampaignPlugin::where('campaign_id', $campaign->id)\n            ->where('plugin_id', $plugin->id)\n            ->firstOrFail();\n\n        return view('campaigns.plugins.confirm')\n            ->with('plugin', $plugin)\n            ->with('campaign', $campaign)\n            ->with('version', $version);\n    }\n\n    public function process(Request $request, Campaign $campaign, Plugin $plugin)\n    {\n        $this->authorize('recover', $campaign);\n\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        try {\n            $count = $this->importerService\n                ->plugin($plugin)\n                ->campaign($campaign)\n                ->user($request->user())\n                ->options($request->only(['force_private', 'only_new']))\n                ->import();\n\n            return redirect()->route('campaign_plugins.index', $campaign)\n                ->with(\n                    'success',\n                    trans_choice('campaigns/plugins.import.success', $count, ['plugin' => $plugin->name, 'count' => $count])\n                )\n                ->with('plugin_entities_created', $this->importerService->created())\n                ->with('plugin_entities_updated', $this->importerService->updated())\n                ->with('plugin_only_new', $request->get('only_new'));\n        } catch (Exception $e) {\n            return redirect()->route('campaign_plugins.index', $campaign)\n                ->withError(__('campaigns/plugins.import.errors.' . $e->getMessage(), ['plugin' => $plugin->name]));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/Plugins/ToggleController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign\\Plugins;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Models\\Campaign;\nuse App\\Models\\Plugin;\nuse App\\Services\\Campaign\\PluginService;\n\nclass ToggleController extends Controller\n{\n    public function __construct(protected PluginService $service)\n    {\n        $this->middleware(['auth', Boosted::class]);\n    }\n\n    public function enable(Campaign $campaign, Plugin $plugin)\n    {\n        $this->authorize('recover', $campaign);\n\n        $this->service->campaign($campaign)->user(auth()->user())->plugin($plugin)->enable();\n\n        return redirect()->route('campaign_plugins.index', $campaign)\n            ->with(\n                'success',\n                __('campaigns/plugins.enabled.success', ['plugin' => $plugin->name])\n            );\n    }\n\n    public function disable(Campaign $campaign, Plugin $plugin)\n    {\n        $this->authorize('recover', $campaign);\n\n        $this->service->campaign($campaign)->user(auth()->user())->plugin($plugin)->disable();\n\n        return redirect()->route('campaign_plugins.index', $campaign)\n            ->with(\n                'success',\n                __('campaigns/plugins.disabled.success', ['plugin' => $plugin->name])\n            );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/Plugins/UpdateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign\\Plugins;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Models\\Campaign;\nuse App\\Models\\Plugin;\nuse App\\Services\\Campaign\\PluginService;\nuse Illuminate\\Http\\Request;\n\nclass UpdateController extends Controller\n{\n    public function __construct(protected PluginService $service)\n    {\n        $this->middleware(['auth', Boosted::class]);\n    }\n\n    public function index(Campaign $campaign, Plugin $plugin)\n    {\n        $this->authorize('recover', $campaign);\n\n        $versions = $plugin\n            ->versions()\n            ->publishedVersions($plugin->created_by === auth()->user()->id)\n            ->orderBy('id', 'desc')\n            ->paginate();\n\n        $plugin = $campaign->plugins->where('id', $plugin->id)->first();\n\n        return view('campaigns.plugins.info', compact('plugin', 'campaign', 'versions'));\n    }\n\n    public function update(Request $request, Campaign $campaign, Plugin $plugin)\n    {\n        $this->authorize('recover', $campaign);\n\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $this->service->plugin($plugin)->user(auth()->user())->campaign($campaign)->update();\n\n        return redirect()->route('campaign_plugins.index', $campaign)\n            ->with(\n                'success',\n                __('campaigns/plugins.update.success', ['plugin' => $plugin->name])\n            );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/RecoveryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Entity\\RecoveryService as EntityRecoveryService;\nuse App\\Services\\Entity\\RecoverySetupService;\nuse App\\Services\\Posts\\RecoveryService;\nuse Exception;\nuse Illuminate\\Http\\Request;\n\nclass RecoveryController extends Controller\n{\n    public function __construct(\n        protected RecoveryService $postService,\n        protected EntityRecoveryService $entityService,\n        protected RecoverySetupService $recoverySetupService\n    ) {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        return view('campaigns.recovery.index', compact('campaign'));\n    }\n\n    public function setup(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        return response()->json(\n            $this->recoverySetupService\n                ->user(auth()->user())\n                ->campaign($campaign)\n                ->setup()\n        );\n    }\n\n    public function recover(Request $request, Campaign $campaign)\n    {\n        if (! $campaign->boosted()) {\n            return redirect()\n                ->route('recovery', $campaign)\n                ->with('boosted-pitch', true);\n        }\n\n        $this->authorize('recover', $campaign);\n\n        try {\n            $entities = $this->entityService\n                ->campaign($campaign)\n                ->user($request->user())\n                ->recover($request->get('entities', []));\n            $posts = $this->postService\n                ->campaign($campaign)\n                ->user($request->user())\n                ->recover($request->get('posts', []));\n\n            $count = count($entities) + count($posts);\n\n            return response()->json(['entities' => $entities, 'posts' => $posts, 'toast' => trans_choice('campaigns/recovery.success_v2', $count, ['count' => $count])]);\n        } catch (Exception $e) {\n            return redirect()\n                ->route('recovery', $campaign)\n                ->with('error', __('campaigns/recovery.error'));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/RoleController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCampaignRole;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\EntityType;\nuse App\\Services\\EntityTypeService;\nuse App\\Services\\Permissions\\RolePermissionService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\n\nclass RoleController extends Controller\n{\n    protected string $view = 'campaigns.roles';\n\n    protected RolePermissionService $service;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(RolePermissionService $rolePermissionService, protected EntityTypeService $entityTypeService)\n    {\n        $this->middleware('auth');\n        $this->service = $rolePermissionService;\n    }\n\n    /**\n     * @return Application|Factory|View|JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('roles', $campaign);\n        Datagrid::layout(\\App\\Renderers\\Layouts\\Campaign\\CampaignRole::class);\n\n        $roles = $campaign->roles()\n            ->sort(request()->only(['o', 'k']))\n            ->withCount(['users', 'rolePermissions'])\n            ->orderBy('is_admin', 'DESC')\n            ->orderBy('is_public', 'DESC')\n            ->orderBy('name')\n            ->paginate();\n\n        $rows = $roles;\n\n        // Ajax Datagrid\n        if (request()->ajax()) {\n            $html = view('layouts.datagrid._table')->with('rows', $rows)->with('campaign', $campaign)->render();\n            $deletes = view('layouts.datagrid.delete-forms')->with('models', Datagrid::deleteForms())->with('campaign', $campaign)->render();\n\n            return response()->json([\n                'success' => true,\n                'html' => $html,\n                'deletes' => $deletes,\n            ]);\n        }\n        $unlimited = $campaign->boosted() || empty(config('limits.campaigns.roles'));\n\n        return view('campaigns.roles', compact('campaign', 'rows', 'roles', 'unlimited'));\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('create', CampaignRole::class);\n        if (! $campaign->canHaveMoreRoles()) {\n            return view('cruds.forms.limit')\n                ->with('limit', config('limits.campaigns.roles'))\n                ->with('thing', __('campaigns.show.tabs.roles'))\n                ->with('campaign', $campaign)\n                ->with('name', 'campaign_roles');\n        }\n\n        return view($this->view . '.create', ['campaign' => $campaign, 'model' => $campaign]);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function duplicate(Campaign $campaign, CampaignRole $campaignRole)\n    {\n        $this->authorize('create', CampaignRole::class);\n        if (! $campaign->canHaveMoreRoles()) {\n            return view('cruds.forms.limit')\n                ->with('limit', config('limits.campaigns.roles'))\n                ->with('thing', __('campaigns.show.tabs.roles'))\n                ->with('campaign', $campaign)\n                ->with('name', 'campaign_roles');\n        }\n\n        return view($this->view . '.create', ['campaign' => $campaign, 'model' => $campaign, 'roleId' => $campaignRole->id]);\n    }\n\n    public function store(StoreCampaignRole $request, Campaign $campaign)\n    {\n        $this->authorize('create', CampaignRole::class);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n        if (! $campaign->canHaveMoreRoles()) {\n            return redirect()->back();\n        }\n        $data = $request->all() + ['campaign_id' => $campaign->id];\n        $role = CampaignRole::create($data);\n        if ($request->has('duplicate') && $request->get('duplicate') != 0) {\n            /** @var CampaignRole $copy */\n            $copy = CampaignRole::where('id', $request->get('role_id'))->first();\n            if ($copy) {\n                $copy->duplicate($role);\n            }\n        }\n\n        return redirect()->route('campaign_roles.index', $campaign)\n            ->with('success_raw', __($this->view . '.create.success', ['name' => $role->name]));\n    }\n\n    public function show(Campaign $campaign, CampaignRole $campaignRole)\n    {\n        $this->authorize('view', [$campaignRole, $campaign]);\n\n        $members = $campaignRole\n            ->users()\n            ->with('user')\n            ->paginate();\n\n        $modules = $this->entityTypeService\n            ->campaign($campaign)\n            ->exclude([config('entities.ids.bookmark')])\n            ->ordered();\n\n        return view($this->view . '.show', [\n            'model' => $campaign,\n            'role' => $campaignRole,\n            'campaign' => $campaign,\n            'members' => $members,\n            'modules' => $modules,\n            'permissionService' => $this->service->campaign($campaign)->role($campaignRole),\n        ]);\n    }\n\n    public function edit(Campaign $campaign, CampaignRole $campaignRole)\n    {\n        $this->authorize('view', [$campaignRole, $campaign]);\n        $this->authorize('update', $campaignRole);\n\n        return view($this->view . '.edit', [\n            'campaign' => $campaign,\n            'model' => $campaign,\n            'role' => $campaignRole,\n        ]);\n    }\n\n    public function update(StoreCampaignRole $request, Campaign $campaign, CampaignRole $campaignRole)\n    {\n        $this->authorize('view', [$campaignRole, $campaign]);\n        $this->authorize('update', $campaignRole);\n\n        $campaignRole->update($request->only('name'));\n\n        return redirect()->route('campaign_roles.index', $campaign)\n            ->with('success_raw', __($this->view . '.edit.success', ['name' => $campaignRole->name]));\n    }\n\n    public function destroy(Campaign $campaign, CampaignRole $campaignRole)\n    {\n        $this->authorize('view', [$campaignRole, $campaign]);\n        $this->authorize('delete', $campaignRole);\n        $campaignRole->delete();\n\n        return redirect()->route('campaign_roles.index', $campaign)\n            ->with('success_raw', __($this->view . '.destroy.success', ['name' => $campaignRole->name]));\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function savePermissions(Request $request, Campaign $campaign, CampaignRole $campaignRole)\n    {\n        $this->authorize('view', [$campaignRole, $campaign]);\n        $this->authorize('update', $campaignRole);\n\n        $this->service->role($campaignRole)->savePermissions($request->post('permissions', []));\n\n        return redirect()->route('campaign_roles.show', [$campaign, 'campaign_role' => $campaignRole])\n            ->with('success', trans('crud.permissions.success'));\n    }\n\n    /**\n     * campaign/<id>/campaign_roles/admin fast url\n     *\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function admin(Campaign $campaign)\n    {\n        $this->authorize('roles', $campaign);\n\n        $adminRole = $campaign->roles()->admin()->firstOrFail();\n\n        return $this->show($campaign, $adminRole);\n    }\n\n    /**\n     * campaign/<id>/campaign_roles/admin fast url\n     *\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function public(Campaign $campaign)\n    {\n        $this->authorize('roles', $campaign);\n\n        $adminRole = $campaign->roles()->public()->firstOrFail();\n\n        return $this->show($campaign, $adminRole);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function search(Request $request, Campaign $campaign)\n    {\n        $this->authorize('members', $campaign);\n\n        $term = $request->get('q', null);\n        if (empty($term)) {\n            $members = $campaign->roles()->where('is_admin', 0)->where('is_public', 0)->orderBy('name', 'asc')->limit(5)->get();\n        } elseif ($request->get('with-admin', null)) {\n            $members = $campaign->roles()->where('is_public', 0)->where('name', 'like', '%' . $term . '%')->limit(5)->get();\n        } else {\n            $members = $campaign->roles()->where('is_admin', 0)->where('is_public', 0)->where('name', 'like', '%' . $term . '%')->limit(5)->get();\n        }\n\n        $results = [];\n        foreach ($members as $member) {\n            $results[] = [\n                'id' => $member->id,\n                'text' => $member->name,\n            ];\n        }\n\n        return response()->json($results);\n    }\n\n    /**\n     * Toggle a permission on a role\n     *\n     * @return JsonResponse\n     */\n    public function toggle(Campaign $campaign, CampaignRole $campaignRole, EntityType $entityType, int $action)\n    {\n        $this->authorize('view', [$campaignRole, $campaign]);\n        $this->authorize('update', $campaignRole);\n\n        if (! $campaignRole->is_public) {\n            abort(404);\n        }\n\n        $enabled = $this->service->role($campaignRole)->entityType($entityType)->toggle($action);\n\n        return response()->json([\n            'success' => true,\n            'status' => $enabled,\n            'toast' => __('campaigns/roles.toggle.' . ($enabled ? 'enabled' : 'disabled'), [\n                'role' => $campaignRole->name,\n                'action' => __('campaigns.roles.permissions.actions.read'),\n                'entities' => $entityType->plural(),\n            ]),\n        ]);\n    }\n\n    public function bulk(Campaign $campaign)\n    {\n        $this->authorize('roles', $campaign);\n\n        $action = request()->get('action');\n        $models = request()->get('model');\n        if (! in_array($action, ['edit', 'delete']) || empty($models)) {\n            return redirect()\n                ->route('campaign_roles.index', $campaign);\n        }\n        $count = 0;\n        foreach ($models as $id) {\n            /** @var CampaignRole|null $role */\n            $role = CampaignRole::find($id);\n            if ($role === null) {\n                continue;\n            }\n\n            if ($action === 'delete' && ! $role->isAdmin() && ! $role->isPublic()) {\n                $role->delete();\n                $count++;\n            }\n        }\n\n        return redirect()\n            ->route('campaign_roles.index', $campaign)\n            ->with('success', trans_choice('campaigns.roles.bulks.' . $action, $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/RoleUserController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCampaignRoleUser;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Services\\Campaign\\MemberService;\n\nclass RoleUserController extends Controller\n{\n    protected string $view = 'campaigns.roles.users';\n\n    protected MemberService $service;\n\n    public function __construct(MemberService $service)\n    {\n        $this->middleware('auth');\n\n        $this->service = $service;\n    }\n\n    public function index(Campaign $campaign)\n    {\n        return redirect()->route('campaign_roles.index', $campaign);\n    }\n\n    public function create(Campaign $campaign, CampaignRole $campaignRole)\n    {\n        $this->authorize('roles', $campaign);\n        $this->authorize('user', $campaignRole);\n\n        return view($this->view . '.create', ['campaign' => $campaign, 'role' => $campaignRole]);\n    }\n\n    public function store(StoreCampaignRoleUser $request, Campaign $campaign, CampaignRole $campaignRole)\n    {\n        $this->authorize('roles', $campaign);\n        $this->authorize('create', CampaignRole::class);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only(['user_id']);\n        $data['campaign_role_id'] = $campaignRole->id;\n        $relation = CampaignRoleUser::create($data);\n\n        return redirect()->route('campaign_roles.show', [\n            $campaign,\n            'campaign_role' => $campaignRole])\n            ->with('success', __($this->view . '.create.success', [\n                'user' => $relation->user->name,\n                'role' => $relation->campaignRole->name,\n            ]));\n    }\n\n    public function show(Campaign $campaign, CampaignRole $campaignRole, CampaignRoleUser $campaignRoleUser)\n    {\n        return redirect()\n            ->route('campaign_roles.show', [$campaign, $campaignRole]);\n    }\n\n    public function destroy(Campaign $campaign, CampaignRole $campaignRole, CampaignRoleUser $campaignRoleUser)\n    {\n        $this->authorize('roles', $campaign);\n        $this->authorize('view', [$campaignRoleUser, $campaign]);\n        $this->authorize('delete', [$campaignRoleUser, $campaignRole]);\n\n        try {\n            $this->service\n                ->user(auth()->user())\n                ->element($campaignRoleUser)\n                ->delete();\n        } catch (TranslatableException $e) {\n            return redirect()->route('campaign_roles.show', [$campaign, $campaignRole])\n                ->with('error_raw', $e->getTranslatedMessage());\n        }\n\n        return redirect()->route('campaign_roles.show', [$campaign, $campaignRole])\n            ->with('success', __($this->view . '.destroy.success', [\n                'user' => $campaignRoleUser->user->name,\n                'role' => $campaignRoleUser->campaignRole->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ShareController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\ShareService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\n\nclass ShareController extends Controller\n{\n    public function __construct(protected ShareService $shareService)\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function setup(Campaign $campaign): View\n    {\n        $this->authorize('update', $campaign);\n\n        return view('campaigns.share.setup', compact('campaign'));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function save(Request $request, Campaign $campaign): JsonResponse\n    {\n        $this->authorize('update', $campaign);\n\n        $request->validate([\n            'campaign_visibility' => ['required', 'string', 'in:public'],\n        ]);\n\n        $this->shareService\n            ->campaign($campaign)\n            ->makePublic();\n\n        return response()->json([\n            'success' => true,\n            'campaign_public' => true,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/SidebarController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\Sidebar\\SaveService;\nuse App\\Services\\Campaign\\Sidebar\\SetupService;\nuse Illuminate\\Http\\Request;\n\nclass SidebarController extends Controller\n{\n    public function __construct(protected SetupService $service, protected SaveService $saveService)\n    {\n        $this->middleware('auth');\n        $this->middleware(Boosted::class, ['except' => 'index']);\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $layout = $this->service->campaign($campaign)->withDisabled()->layout();\n\n        return view(\n            'campaigns.sidebar.index',\n            compact(\n                'campaign',\n                'layout',\n            )\n        );\n    }\n\n    public function save(Request $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $this->saveService\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->save(request()->all());\n\n        return redirect()\n            ->route('campaign-sidebar', $campaign)\n            ->with('success', __('campaigns/sidebar.success'));\n    }\n\n    public function reset(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $this->saveService\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->reset();\n\n        return redirect()\n            ->route('campaign-sidebar', $campaign)\n            ->with('success', __('campaigns/sidebar.reset.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/StatController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\Campaign\\StatService;\n\nclass StatController extends Controller\n{\n    public function __construct(\n        protected StatService $statService\n    ) {}\n\n    public function index(Campaign $campaign)\n    {\n        $stats = $this->statService->campaign($campaign)->get();\n\n        $entityTypes = [];\n        /** @var EntityType $entityType */\n        foreach (EntityType::inCampaign($campaign)->get() as $entityType) {\n            $entityTypes[$entityType->id] = $entityType;\n        }\n\n        return view('campaigns.stats.index')\n            ->with('campaign', $campaign)\n            ->with('stats', $stats)\n            ->with('entityTypes', $entityTypes);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/StyleController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Http\\Requests\\ReorderStyles;\nuse App\\Http\\Requests\\StoreCampaignStyle;\nuse App\\Http\\Requests\\StoreCampaignTheme;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignStyle;\nuse App\\Models\\Theme;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\n\nclass StyleController extends Controller\n{\n    public const int MAX_THEMES = 30;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n        $this->middleware(Boosted::class, ['except' => 'index']);\n    }\n\n    /**\n     * @return Application|Factory|View|JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n        $styles = $campaign->styles()\n            ->sort(request()->only(['o', 'k']))\n            ->take(self::MAX_THEMES)\n            ->paginate(config('limits.pagination'));\n        Datagrid::layout(\\App\\Renderers\\Layouts\\Campaign\\Theme::class)->permissions(false);\n\n        // Ajax Datagrid\n        if (request()->ajax()) {\n            $html = view('layouts.datagrid._table')->with('rows', $styles)->with('campaign', $campaign)->render();\n            $deletes = view('layouts.datagrid.delete-forms')->with('models', Datagrid::deleteForms())->with('campaign', $campaign)->render();\n\n            return response()->json([\n                'success' => true,\n                'html' => $html,\n                'deletes' => $deletes,\n            ]);\n        }\n\n        $theme = $campaign->theme;\n        $reorderStyles = $campaign->styles()->select(['id', 'name', 'is_enabled'])->defaultOrder()->take(self::MAX_THEMES)->get();\n\n        return view('campaigns.styles.index', compact('campaign', 'styles', 'theme', 'reorderStyles'));\n    }\n\n    public function show(Campaign $campaign, CampaignStyle $campaignStyle)\n    {\n        return redirect()\n            ->route('campaign_styles.index', $campaign);\n    }\n\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        if ($campaign->styles()->count() >= self::MAX_THEMES) {\n            return redirect()->route('campaign_styles.index', $campaign)\n                ->with('error', __('campaigns/styles.errors.max_reached', ['max' => self::MAX_THEMES]));\n        }\n\n        return view('campaigns.styles.create', compact('campaign'));\n    }\n\n    public function store(StoreCampaignStyle $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        if ($campaign->styles()->count() >= self::MAX_THEMES) {\n            return redirect()->route('campaign_styles.index', $campaign)\n                ->with('error', __('campaigns/styles.errors.max_reached', ['max' => self::MAX_THEMES]));\n        }\n\n        $style = new CampaignStyle($request->only('name', 'content', 'is_enabled'));\n        $style->campaign_id = $campaign->id;\n        $style->save();\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('campaign_styles.edit', [$campaign, $style])\n                ->with('success', __('campaigns/styles.create.success', ['name' => $style->name]));\n        }\n\n        return redirect()\n            ->route('campaign_styles.index', $campaign)\n            ->with('success', __('campaigns/styles.create.success'));\n    }\n\n    public function edit(Campaign $campaign, CampaignStyle $campaignStyle)\n    {\n        $this->authorize('update', $campaign);\n\n        if ($campaignStyle->isTheme()) {\n            return redirect()->route('campaign_styles.builder', $campaign);\n        }\n\n        $style = $campaignStyle;\n\n        return view('campaigns.styles.edit', compact('campaign', 'style'));\n    }\n\n    public function update(StoreCampaignStyle $request, Campaign $campaign, CampaignStyle $campaignStyle)\n    {\n        $this->authorize('update', $campaign);\n\n        $campaignStyle->update($request->only('name', 'content', 'is_enabled'));\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('campaign_styles.edit', [$campaign, $campaignStyle])\n                ->with('success', __('campaigns/styles.update.success', ['name' => $campaignStyle->name]));\n        }\n\n        return redirect()\n            ->route('campaign_styles.index', $campaign)\n            ->with('success', __('campaigns/styles.update.success', ['name' => $campaignStyle->name]));\n    }\n\n    public function destroy(Campaign $campaign, CampaignStyle $campaignStyle)\n    {\n        $this->authorize('update', $campaign);\n\n        $campaignStyle->delete();\n\n        return redirect()\n            ->route('campaign_styles.index', $campaign)\n            ->with('success', __('campaigns/styles.delete.success', ['name' => $campaignStyle->name]));\n    }\n\n    public function theme(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $themes = [null => __('campaigns.themes.none')];\n        foreach (Theme::all() as $theme) {\n            $themes[$theme->id] = $theme->__toString();\n        }\n\n        return view('campaigns.styles.theme', compact('campaign', 'themes'));\n    }\n\n    public function themeSave(StoreCampaignTheme $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $campaign->update([\n            'theme_id' => $request->get('theme_id'),\n        ]);\n\n        return redirect()\n            ->route('campaign_styles.index', $campaign)\n            ->with('success', __('campaigns/styles.theme.success'));\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws ContainerExceptionInterface\n     * @throws NotFoundExceptionInterface\n     */\n    public function bulk(Campaign $campaign)\n    {\n        $action = request()->get('action');\n        $models = request()->get('model');\n        if (! in_array($action, ['enable', 'disable', 'delete']) || empty($models)) {\n            return redirect()\n                ->route('campaign_styles.index', $campaign);\n        }\n\n        $count = 0;\n        foreach ($models as $id) {\n            /** @var CampaignStyle|null $style */\n            $style = CampaignStyle::find($id);\n            if ($style === null) {\n                continue;\n            }\n            if ($action === 'enable' && ! $style->is_enabled) {\n                $style->is_enabled = true;\n                $style->update();\n                $count++;\n            } elseif ($action === 'disable' && $style->is_enabled) {\n                $style->is_enabled = false;\n                $style->update();\n                $count++;\n            } elseif ($action === 'delete') {\n                $style->delete();\n                $count++;\n            }\n        }\n\n        return redirect()\n            ->route('campaign_styles.index', $campaign)\n            ->with('success', trans_choice('campaigns/styles.bulks.' . $action, $count, ['count' => $count]));\n    }\n\n    public function reorder(ReorderStyles $request, Campaign $campaign)\n    {\n        $order = 1;\n        $ids = $request->get('style');\n        foreach ($ids as $id) {\n            $style = CampaignStyle::find($id);\n            if (empty($style)) {\n                continue;\n            }\n            $style->order = $order;\n            $style->timestamps = false;\n            $style->update();\n            $order++;\n        }\n\n        $order--;\n\n        return redirect()\n            ->route('campaign_styles.index', $campaign)\n            ->with('success', trans_choice('campaigns/styles.reorder.success', $order, ['count' => $order]));\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function toggle(Campaign $campaign, CampaignStyle $campaignStyle)\n    {\n        $this->authorize('update', $campaign);\n\n        if ($campaignStyle->is_enabled) {\n            $message = __('campaigns/styles.toggle.disable');\n        } else {\n            $message = __('campaigns/styles.toggle.enable');\n        }\n\n        $campaignStyle->update(['is_enabled' => ! $campaignStyle->is_enabled]);\n\n        return redirect()->route('campaign_styles.index', $campaign)\n            ->with(\n                'success',\n                $message\n            );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/ThemeBuilderController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\Campaigns\\Boosted;\nuse App\\Http\\Requests\\Campaigns\\StoreTheme;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignStyle;\nuse App\\Services\\Campaign\\ThemeBuilderService;\n\nclass ThemeBuilderController extends Controller\n{\n    public function __construct(protected ThemeBuilderService $themeBuilderService)\n    {\n        $this->middleware('auth');\n        $this->middleware(Boosted::class, ['except' => 'index']);\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $style = CampaignStyle::theme()->first();\n        $config = $style?->content;\n\n        return view('campaigns.styles.builder', compact('campaign', 'config'));\n    }\n\n    public function save(StoreTheme $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $this->themeBuilderService\n            ->campaign($campaign)\n            ->save($request->get('config'));\n\n        CampaignCache::campaign($campaign)->clearStyles()->clear();\n\n        return redirect()\n            ->route('campaign_styles.index', $campaign)\n            ->with('success', __('campaigns/builder.success'));\n    }\n\n    public function reset(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $theme = $campaign->styles()->theme()->first();\n        if (empty($theme)) {\n            return redirect()\n                ->route('campaign_styles.index', $campaign);\n        }\n        $theme->delete();\n        CampaignCache::campaign($campaign)->clearStyles()->clear();\n\n        return redirect()\n            ->route('campaign_styles.index', $campaign)\n            ->with('success', __('campaigns/builder.reset'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/UserController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignUser;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\View\\View;\n\nclass UserController extends Controller\n{\n    use CampaignAware;\n    use HasDatagrid;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @return Application|Factory|View|JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('members', $campaign);\n\n        $this->rows = $campaign\n            ->members()\n            ->sort(request()->only(['o', 'k']), ['id' => 'desc'])\n            ->with([\n                'user:id,name,avatar,last_login_at,has_last_login_sharing,banned_until',\n                'user.campaignRoles',\n            ])\n            ->paginate();\n\n        $invitations = $campaign\n            ->invites()\n            ->where('is_active', true)\n            ->with('role')\n            ->paginate();\n\n        $roles = $campaign->roles->where('is_public', false)->all();\n\n        Datagrid::campaign($campaign)->layout(\\App\\Renderers\\Layouts\\Campaign\\CampaignUser::class);\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return view('campaigns.members.index', [\n            'campaign' => $campaign,\n            'roles' => $roles,\n            'invitations' => $invitations,\n            'rows' => $this->rows,\n            'unlimited' => $campaign->boosted() || empty(config('limits.campaigns.members')),\n        ]);\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, CampaignUser $campaignUser)\n    {\n        $this->authorize('invite', $campaign);\n        $this->authorize('view', [$campaignUser, $campaign]);\n\n        $campaignUser->delete();\n\n        return redirect()->route('campaign_users.index', $campaign);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function search(Request $request, Campaign $campaign)\n    {\n        $this->authorize('members', $campaign);\n\n        $term = $request->get('q', null);\n        if (empty($term)) {\n            $members = $campaign->users()->orderBy('name', 'asc')->limit(5)->get();\n        } else {\n            $members = $campaign->users()->where('name', 'like', '%' . $term . '%')->limit(5)->get();\n        }\n\n        $results = [];\n        foreach ($members as $member) {\n            $results[] = [\n                'id' => $member->id,\n                'text' => $member->name,\n            ];\n        }\n\n        return response()->json($results);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/VanityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Campaigns\\Vanity;\nuse App\\Models\\Campaign;\nuse Illuminate\\Support\\Str;\n\nclass VanityController extends Controller\n{\n    public function index(Vanity $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        return response([\n            'success' => true,\n            'vanity' => Str::slug($request->post('vanity')),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/VisibilityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Campaigns\\StoreCampaignVisibility;\nuse App\\Models\\Campaign;\n\nclass VisibilityController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function edit(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n        $from = request()->get('from');\n\n        return view('campaigns.forms.modals.visibility', compact('campaign', 'from'));\n    }\n\n    public function save(StoreCampaignVisibility $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $campaign->update([\n            'visibility_id' => $request->get('visibility_id'),\n        ]);\n\n        $key = $campaign->isUnlisted() ? 'unlisted' : ($campaign->isPublic() ? 'public' : 'private');\n        $success = __('campaigns/public.update.' . $key, [\n            'public-campaigns' => '<a href=\"https://kanka.io/campaigns\" class=\"text-link\">' . __('footer.public-campaigns') . '</a>',\n        ]);\n\n        if ($request->get('from') === 'overview') {\n            return redirect()\n                ->route('overview', $campaign)\n                ->with('success_raw', $success);\n        }\n\n        return redirect()\n            ->back()\n            ->with('success_raw', $success);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/WebController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\Connections\\WebService;\n\nclass WebController extends Controller\n{\n    public function __construct(protected WebService $webService) {}\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return view('connections.web')\n            ->with('campaign', $campaign);\n    }\n\n    public function api(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        if (auth()->check()) {\n            $this->webService->user(auth()->user());\n        }\n\n        return response()->json(\n            $this->webService->campaign($campaign)->build()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Campaign/WebhookController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Campaign;\n\nuse App\\Events\\Campaigns\\Webhooks\\WebhookTested;\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreWebhook;\nuse App\\Jobs\\TestWebhookJob;\nuse App\\Models\\Campaign;\nuse App\\Models\\Webhook;\nuse App\\Services\\Campaign\\Webhooks\\SaveService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass WebhookController extends Controller\n{\n    protected string $view = 'webhooks';\n\n    public function __construct(protected SaveService $service)\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @return Application|Factory|View|JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign)\n    {\n        Datagrid::layout(\\App\\Renderers\\Layouts\\Campaign\\Webhook::class);\n\n        $this->authorize('webhooks', $campaign);\n\n        $rows = $campaign->webhooks()\n            ->sort(request()->only(['o', 'k']))\n            // ->with(['users', 'permissions', 'campaign'])\n            ->orderBy('updated_at', 'DESC')\n            // ->orderBy('name')\n            ->paginate();\n\n        // Ajax Datagrid\n        if (request()->ajax()) {\n            $html = view('layouts.datagrid._table')->with('rows', $rows)->with('campaign', $campaign)->render();\n            $deletes = view('layouts.datagrid.delete-forms')->with('models', Datagrid::deleteForms())->with('campaign', $campaign)->render();\n\n            return response()->json([\n                'success' => true,\n                'html' => $html,\n                'deletes' => $deletes,\n            ]);\n        }\n\n        return view('campaigns.webhooks', compact('campaign', 'rows'));\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('webhooks', $campaign);\n\n        if (! $campaign->premium()) {\n            return view('components.premium-dialog', [\n                'campaign' => $campaign,\n                'title' => __('campaigns/webhooks.title'),\n                'pitch' => __('campaigns/webhooks.premium'),\n                'doc' => 'features/campaigns/webhooks.html',\n            ]);\n        }\n\n        return view('campaigns.webhooks.create', ['campaign' => $campaign]);\n    }\n\n    public function store(StoreWebhook $request, Campaign $campaign)\n    {\n        $this->authorize('webhooks', $campaign);\n\n        if (! $campaign->premium()) {\n            return redirect()->route('webhooks.index', $campaign)\n                ->with(\n                    'error',\n                    __('campaigns/webhooks.error.pitch')\n                );\n        }\n\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $new = $this->service->campaign($campaign)->user($request->user())->request($request)->save();\n\n        return redirect()->route('webhooks.index', $campaign)\n            ->with('success', __('campaigns/webhooks.create.success'));\n    }\n\n    public function edit(Campaign $campaign, Webhook $webhook)\n    {\n        $this->authorize('webhooks', $campaign);\n\n        return view('campaigns.webhooks.edit', [\n            'campaign' => $campaign,\n            'webhook' => $webhook,\n        ]);\n    }\n\n    public function update(StoreWebhook $request, Campaign $campaign, Webhook $webhook)\n    {\n        $this->authorize('webhooks', $campaign);\n\n        $this->service\n            ->campaign($campaign)\n            ->user($request->user())\n            ->webhook($webhook)\n            ->request($request)\n            ->save();\n        $webhook->update($request->all());\n\n        return redirect()->route('webhooks.index', $campaign)\n            ->with('success', __('campaigns/webhooks.edit.success'));\n    }\n\n    public function destroy(Campaign $campaign, Webhook $webhook)\n    {\n        $this->authorize('webhooks', $campaign);\n\n        $webhook->delete();\n\n        return redirect()->route('webhooks.index', $campaign)\n            ->with('success', __('campaigns/webhooks.destroy.success'));\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function toggle(Campaign $campaign, Webhook $webhook)\n    {\n        $this->authorize('webhooks', $campaign);\n\n        if ($webhook->status != 1) {\n            $message = __('campaigns/webhooks.toggle.enable');\n        } else {\n            $message = __('campaigns/webhooks.toggle.disable');\n        }\n\n        $webhook->update(['status' => ! $webhook->status]);\n\n        return redirect()->route('webhooks.index', $campaign)\n            ->with(\n                'success',\n                $message\n            );\n    }\n\n    public function bulk(Campaign $campaign)\n    {\n        $this->authorize('webhooks', $campaign);\n\n        $action = request()->get('action');\n        $models = request()->get('model');\n        if (! in_array($action, ['enable', 'disable', 'delete']) || empty($models)) {\n            return redirect()\n                ->route('webhooks.index', $campaign);\n        }\n        $count = 0;\n        foreach ($models as $id) {\n            /** @var Webhook|null $webhook */\n            $webhook = Webhook::find($id);\n            if ($webhook === null) {\n                continue;\n            }\n\n            if ($action === 'delete') {\n                $webhook->delete();\n                $count++;\n            } elseif ($action === 'disable' && $webhook->status) {\n                $webhook->update(['status' => 0]);\n                $count++;\n            } elseif ($action === 'enable' && ! $webhook->status) {\n                $webhook->update(['status' => 1]);\n                $count++;\n            }\n        }\n\n        return redirect()\n            ->route('webhooks.index', $campaign)\n            ->with('success', trans_choice('campaigns/webhooks.actions.bulks.' . $action . '_success', $count, ['count' => $count]));\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function test(Campaign $campaign, Webhook $webhook)\n    {\n        $this->authorize('webhooks', $campaign);\n\n        if (! $campaign->premium()) {\n            return redirect()->route('webhooks.index', $campaign)\n                ->with(\n                    'error',\n                    __('campaigns/webhooks.error.pitch')\n                );\n        }\n\n        TestWebhookJob::dispatch($campaign, auth()->user(), $webhook);\n\n        WebhookTested::dispatch($webhook, auth()->user());\n\n        return redirect()->route('webhooks.index', $campaign)\n            ->with(\n                'success',\n                __('campaigns/webhooks.test.success')\n            );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/CampaignBoostController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Facades\\CampaignCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignBoost;\nuse App\\Services\\Campaign\\BoostService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\Request;\n\nclass CampaignBoostController extends Controller\n{\n    protected BoostService $campaignBoostService;\n\n    public function __construct(BoostService $campaignBoostService)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->campaignBoostService = $campaignBoostService;\n    }\n\n    public function create()\n    {\n        $campaignID = request()->get('campaign');\n        $campaign = Campaign::where('slug', $campaignID)->firstOrFail();\n        $user = auth()->user();\n        if ($user->hasBoosterNomenclature()) {\n            $superboost = request()->has('superboost');\n            $cost = $superboost ? 3 : 1;\n\n            return view('settings.boosters.create')\n                ->with('campaign', $campaign)\n                ->with('superboost', $superboost)\n                ->with('cost', $cost)\n                ->with('user', $user);\n        }\n\n        if (! $campaign->boosted() && $user->availableBoosts() < 1 && ! auth()->user()->can('boost', $user)) {\n            return view('layouts.dialogs.subscription', [\n                'title' => __('settings/premium.ready.title'),\n                'campaign' => $campaign,\n            ]);\n        }\n\n        return view('settings.premium.create')\n            ->with('campaign', $campaign)\n            ->with('user', $user);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(Request $request)\n    {\n        $campaignId = $request->get('campaign_id');\n        /** @var Campaign $campaign */\n        $campaign = Campaign::findOrFail($campaignId);\n        CampaignCache::campaign($campaign);\n        $this->authorize('access', $campaign);\n\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        if (auth()->user()->hasBoosterNomenclature()) {\n            try {\n                $action = $request->post('action');\n                if ($request->has('superboost')) {\n                    $action = 'superboost';\n                }\n                $this->campaignBoostService\n                    ->user(auth()->user())\n                    ->campaign($campaign)\n                    ->action($action)\n                    ->boost();\n                CampaignCache::campaign($campaign)->clearSidebar()->clear();\n\n                $superboost = $action == 'superboost';\n\n                return redirect()\n                    ->route('settings.boost')\n                    ->with('success_raw', __('settings/boosters.' . ($superboost ? 'superboost' : 'boost') . '.success', ['campaign' => $campaign->name]));\n            } catch (TranslatableException $e) {\n                return redirect()\n                    ->route('settings.boost')\n                    ->with('error', $e->getTranslatedMessage());\n            }\n        }\n\n        try {\n            $this->campaignBoostService\n                ->user(auth()->user())\n                ->campaign($campaign)\n                ->premium();\n            CampaignCache::campaign($campaign)->clearSidebar()->clear();\n\n            return redirect()\n                ->route('settings.premium')\n                ->with('success_raw', __('settings/premium.create.success', ['campaign' => $campaign->name]));\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('settings.premium')\n                ->with('error', $e->getTranslatedMessage());\n        }\n    }\n\n    public function show(CampaignBoost $campaignBoost)\n    {\n        return redirect()->route('settings.boost');\n    }\n\n    public function edit(CampaignBoost $campaignBoost)\n    {\n        $this->authorize('destroy', $campaignBoost);\n\n        if (! auth()->user()->hasBoosterNomenclature()) {\n            return redirect()->route('settings.premium');\n        }\n\n        return view('settings.boosters.update')\n            ->with('boost', $campaignBoost)\n            ->with('campaign', $campaignBoost->campaign)\n            ->with('cost', 2);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function update(Request $request, CampaignBoost $campaignBoost)\n    {\n        if (! auth()->user()->hasBoosterNomenclature()) {\n            return redirect()->route('settings.premium');\n        }\n        $campaign = $campaignBoost->campaign;\n\n        // If the user created the boost, allow them to update it. We don't check the campaign because there is\n        // no campaign in the url.\n        $this->authorize('destroy', $campaignBoost);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        try {\n            $this->campaignBoostService\n                ->user(auth()->user())\n                ->campaign($campaign)\n                ->upgrade()\n                ->action($request->post('action'))\n                ->boost();\n\n            return redirect()\n                ->route('settings.boost')\n                ->with('success_raw', __('settings/boosters.superboost.success', ['campaign' => $campaign->name]));\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('settings.boost')\n                ->with('error', $e->getTranslatedMessage());\n        }\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function confirm(CampaignBoost $campaignBoost)\n    {\n        $this->authorize('destroy', $campaignBoost);\n\n        if (auth()->user()->hasBoosterNomenclature()) {\n            return view('settings.boosters.unboost')\n                ->with('campaign', $campaignBoost->campaign)\n                ->with('boost', $campaignBoost);\n        }\n\n        return view('settings.premium.remove')\n            ->with('campaign', $campaignBoost->campaign)\n            ->with('boost', $campaignBoost);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function destroy(CampaignBoost $campaignBoost)\n    {\n        $this->authorize('destroy', $campaignBoost);\n        if (request()->ajax()) {\n            return response()->json();\n        }\n        $this->campaignBoostService\n            ->user(auth()->user())\n            ->campaign($campaignBoost->campaign)\n            ->unboost($campaignBoost);\n        CampaignCache::campaign($campaignBoost->campaign)->clearSidebar()->clear();\n\n        if (auth()->user()->hasBoosterNomenclature()) {\n            return redirect()\n                ->route('settings.boost')\n                ->with('success_raw', __('settings/boosters.unboost.success', ['campaign' => $campaignBoost->campaign->name]));\n        }\n\n        return redirect()\n            ->route('settings.premium')\n            ->with('success_raw', __('settings/premium.remove.success', ['campaign' => $campaignBoost->campaign->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Characters/Families/ManagementController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Characters\\Families;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ManageFamilies;\nuse App\\Models\\Campaign;\nuse App\\Models\\Character;\nuse App\\Models\\CharacterFamily;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\n\nclass ManagementController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Character $character)\n    {\n        $this->authorize('update', $character->entity);\n\n        $this->campaign($campaign)->authEntityView($character->entity);\n\n        $families = $character\n            ->characterFamilies()\n            ->with(['family', 'family.entity', 'family.entity.image'])\n            ->get();\n\n        return view('characters.families.reorder', compact(\n            'campaign',\n            'families',\n            'character'\n        ));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function save(Campaign $campaign, Character $character, ManageFamilies $request)\n    {\n        $this->authorize('update', $character->entity);\n\n        $families = $character->families()->pluck('families.id')->toArray();\n        $privates = $request->get('family_privates');\n\n        // We need to delete the old ones to make way for the new ones.\n        CharacterFamily::where('character_id', $character->id)->delete();\n        foreach ($request->get('character_family') as $newFamily) {\n            // We just want to reorder, not add whatever the user sends as a request.\n            if (in_array($newFamily, $families)) {\n                $characterFamily = new CharacterFamily;\n                $characterFamily->family_id = $newFamily;\n                $characterFamily->character_id = $character->id;\n                $characterFamily->is_private = $privates[$newFamily];\n                $characterFamily->save();\n            }\n        }\n\n        return redirect()\n            ->route('entities.show', [$campaign, $character->entity])\n            ->withSuccess(__('characters.families.reorder.success', ['name' => $character->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Characters/MemberController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Characters;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Character;\nuse App\\Renderers\\Layouts\\Character\\Organisation;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass MemberController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Character $character)\n    {\n        $this->campaign($campaign)->authEntityView($character->entity);\n\n        Datagrid::layout(Organisation::class)\n            ->route('characters.organisations', [$character]);\n\n        $this->rows = $character\n            ->organisationMemberships()\n            ->with([\n                'organisation.entity', 'organisation.entity.image',\n                'organisation.entity.entityType' => function ($sub) {\n                    $sub->select('id', 'code');\n                },\n                'organisation.entity.tags',\n            ])\n            ->rows()\n            ->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('characters.organisations', $character);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Characters/MembershipController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Characters;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCharacterOrganisation;\nuse App\\Models\\Campaign;\nuse App\\Models\\Character;\nuse App\\Models\\CharacterOrganisation;\nuse App\\Models\\OrganisationMember;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\RedirectResponse;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\n\nclass MembershipController extends Controller\n{\n    protected string $view = 'characters.organisations';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @return RedirectResponse\n     */\n    public function index(Campaign $campaign, Character $character)\n    {\n        return redirect()->route('entities.show', [$campaign, $character->entity]);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign, Character $character)\n    {\n        $this->authorize('update', $character->entity);\n\n        return view($this->view . '.create', ['model' => $character, 'campaign' => $campaign]);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(StoreCharacterOrganisation $request, Campaign $campaign, Character $character)\n    {\n        $this->authorize('update', $character->entity);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $relation = OrganisationMember::create(['character_id' => $character->id] + $request->all());\n\n        return redirect()->route('characters.organisations', [$campaign, $character->id])\n            ->with('success', __($this->view . '.create.success', [\n                'character' => $character->name,\n                'organisation' => $relation->organisation->name,\n            ]));\n    }\n\n    /**\n     * @return void\n     *\n     * @throws AuthorizationException\n     */\n    public function show(Campaign $campaign, Character $character, OrganisationMember $organisationMember)\n    {\n        $this->authorize('update', $character->entity);\n        abort(404);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function edit(Campaign $campaign, Character $character, CharacterOrganisation $characterOrganisation)\n    {\n        $this->authorize('update', $character->entity);\n\n        return view($this->view . '.edit', [\n            'model' => $character,\n            'campaign' => $campaign,\n            'member' => $characterOrganisation,\n        ]);\n    }\n\n    public function update(\n        StoreCharacterOrganisation $request,\n        Campaign $campaign,\n        Character $character,\n        CharacterOrganisation $characterOrganisation\n    ) {\n        $this->authorize('update', $character->entity);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $characterOrganisation->update($request->all());\n\n        if ($request->has('from') && $request->get('from') == 'org') {\n            return redirect()->route('entities.show', [$campaign, $characterOrganisation->organisation->entity])\n                ->with('success', __($this->view . '.edit.success'));\n        }\n\n        return redirect()->route('characters.organisations', [$campaign, $character->id])\n            ->with('success', __($this->view . '.edit.success'));\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     * @throws ContainerExceptionInterface\n     * @throws NotFoundExceptionInterface\n     */\n    public function destroy(Campaign $campaign, Character $character, CharacterOrganisation $characterOrganisation)\n    {\n        $this->authorize('update', $character->entity);\n\n        $characterOrganisation->delete();\n\n        if (request()->has('from') && request()->get('from') === 'org') {\n            return redirect()->route('entities.show', [$campaign, $characterOrganisation->organisation->entity])\n                ->with('success', __($this->view . '.destroy.success'));\n        }\n\n        return redirect()->route('characters.organisations', [$campaign, $characterOrganisation->character_id])\n            ->with('success', __($this->view . '.destroy.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Characters/Races/ManagementController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Characters\\Races;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ManageRaces;\nuse App\\Models\\Campaign;\nuse App\\Models\\Character;\nuse App\\Models\\CharacterRace;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\n\nclass ManagementController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Character $character)\n    {\n        $this->authorize('update', $character->entity);\n\n        $this->campaign($campaign)->authEntityView($character->entity);\n\n        $races = $character\n            ->characterRaces()\n            ->with(['race', 'race.entity', 'race.entity.image'])\n            ->get();\n\n        return view('characters.races.reorder', compact(\n            'campaign',\n            'races',\n            'character'\n        ));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function save(Campaign $campaign, Character $character, ManageRaces $request)\n    {\n        $this->authorize('update', $character->entity);\n\n        $races = $character->races()->pluck('races.id')->toArray();\n        $privates = $request->get('race_privates');\n\n        // We need to delete the old ones to make way for the new ones.\n        CharacterRace::where('character_id', $character->id)->delete();\n        foreach ($request->get('character_race') as $newRace) {\n            // We just want to reorder, not add whatever the user sends as a request.\n            if (in_array($newRace, $races)) {\n                $characterRace = new CharacterRace;\n                $characterRace->race_id = $newRace;\n                $characterRace->character_id = $character->id;\n                $characterRace->is_private = $privates[$newRace];\n                $characterRace->save();\n            }\n        }\n\n        return redirect()\n            ->route('entities.show', [$campaign, $character->entity])\n            ->withSuccess(__('characters.races.reorder.success', ['name' => $character->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ConfirmController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Campaign;\n\nclass ConfirmController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        $route = request()->get('route');\n        $name = request()->get('name');\n        $permanent = request()->has('permanent');\n        $mirrored = request()->get('mirrored', false);\n\n        return view('confirms.delete')\n            ->with('route', $route)\n            ->with('name', $name)\n            ->with('mirrored', $mirrored)\n            ->with('campaign', $campaign)\n            ->with('permanent', $permanent);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Foundation\\Validation\\ValidatesRequests;\nuse Illuminate\\Routing\\Controller as BaseController;\n\nclass Controller extends BaseController\n{\n    use AuthorizesRequests;\n    use DispatchesJobs;\n    use ValidatesRequests;\n\n    public function callAction($method, $parameters)\n    {\n        return parent::callAction($method, array_values($parameters));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ConversationMessageController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\StoreConversationMessage;\nuse App\\Http\\Resources\\Conversation\\ConversationMessageResource;\nuse App\\Http\\Resources\\Conversation\\ConversationResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Conversation;\nuse App\\Models\\ConversationMessage;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass ConversationMessageController extends Controller\n{\n    /**\n     * @return ConversationResource\n     */\n    public function index(Campaign $campaign, Conversation $conversation)\n    {\n        return new ConversationResource(\n            $conversation\n        );\n    }\n\n    /**\n     * @return ConversationResource\n     *\n     * @throws AuthorizationException\n     */\n    public function store(StoreConversationMessage $request, Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('update', $conversation->entity);\n\n        $participant = new ConversationMessage;\n        $data = $request->only('message', 'character_id');\n        if (! $conversation->forCharacters()) {\n            $data['user_id'] = Auth::user()->id;\n        }\n        $data['conversation_id'] = $conversation->id;\n\n        $participant = $participant->create($data);\n\n        return new ConversationResource(\n            $conversation\n        );\n    }\n\n    public function update(StoreConversationMessage $request, Campaign $campaign, Conversation $conversation, ConversationMessage $conversationMessage)\n    {\n        $this->authorize('update', $conversation->entity);\n        $this->authorize('edit', $conversationMessage);\n\n        $conversationMessage->update($request->only('message'));\n\n        if (request()->ajax()) {\n            return new ConversationMessageResource($conversationMessage);\n        }\n    }\n\n    /**\n     * @return JsonResponse|RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Conversation $conversation, ConversationMessage $conversationMessage)\n    {\n        $this->authorize('update', $conversation->entity);\n        $this->authorize('delete', $conversationMessage);\n\n        if (! $conversationMessage->delete()) {\n            abort(500);\n        }\n\n        if (request()->ajax()) {\n            return response()->json([\n                'success' => true,\n            ]);\n        }\n\n        return redirect()\n            ->route('entities.show', [$campaign, $conversation->entity])\n            ->with('success', trans('conversations.messages.destroy.success', [\n                'name' => $conversationMessage->author(),\n                'conversation' => $conversation->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ConversationParticipantController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\StoreConversationParticipant;\nuse App\\Models\\Campaign;\nuse App\\Models\\Conversation;\nuse App\\Models\\ConversationParticipant;\n\nclass ConversationParticipantController extends Controller\n{\n    public function index(Campaign $campaign, Conversation $conversation)\n    {\n        return view('conversations.participants', ['campaign' => $campaign, 'model' => $conversation]);\n    }\n\n    public function store(StoreConversationParticipant $request, Campaign $campaign, Conversation $conversation)\n    {\n        $this->authorize('update', $conversation->entity);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $participant = new ConversationParticipant;\n        $participant = $participant->create($request->all());\n\n        return redirect()\n            ->route('entities.show', [$campaign, $conversation->entity])\n            ->with('success', __('conversations.participants.create.success', [\n                'name' => $conversation->name,\n                'entity' => $participant->name(),\n            ]));\n    }\n\n    public function edit(Campaign $campaign, Conversation $conversation, ConversationParticipant $conversationParticipant)\n    {\n        $this->authorize('update', $conversation->entity);\n\n        dd('CPC 055');\n    }\n\n    public function update(\n        StoreConversationParticipant $request,\n        Campaign $campaign,\n        Conversation $conversation,\n        ConversationParticipant $conversationParticipant\n    ) {\n        $this->authorize('update', $conversation->entity);\n\n        $conversationParticipant->update($request->all());\n\n        return redirect()\n            ->to($conversation->getLink())\n            ->with('success', trans('crud.notes.edit.success', [\n                'name' => $conversationParticipant->entity()->name, 'entity' => $conversation->name,\n            ]));\n    }\n\n    public function destroy(Campaign $campaign, Conversation $conversation, ConversationParticipant $conversationParticipant)\n    {\n        $this->authorize('update', $conversation->entity);\n\n        if (! $conversationParticipant->delete()) {\n            abort(500);\n        }\n\n        return redirect()\n            ->to($conversation->getLink())\n            ->with('success', trans('conversations.participants.destroy.success', [\n                'name' => $conversation->name,\n                'entity' => $conversationParticipant->entity()->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/CookieConsentController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Services\\CountryService;\n\nclass CookieConsentController extends Controller\n{\n    protected CountryService $service;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(CountryService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function index()\n    {\n        $country = $this->service->getCountry();\n\n        return response()->json([\n            'country' => $country,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Creatures/CreatureController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Creatures;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Creature;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass CreatureController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Creature $creature)\n    {\n        $this->campaign($campaign)->authEntityView($creature->entity);\n\n        return redirect()->route('entities.children', [$campaign, $creature->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/AbilityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\AbilityFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreAbility;\nuse App\\Models\\Ability;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\n\nclass AbilityController extends CrudController\n{\n    protected string $view = 'abilities';\n\n    protected string $route = 'abilities';\n\n    protected string $module = 'abilities';\n\n    protected string $model = Ability::class;\n\n    protected string $filter = AbilityFilter::class;\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(Campaign $campaign, StoreAbility $request)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Ability $ability)\n    {\n        return $this->campaign($campaign)->crudShow($ability);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Ability $ability)\n    {\n        return $this->campaign($campaign)->crudEdit($ability);\n    }\n\n    public function update(StoreAbility $request, Campaign $campaign, Ability $ability)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $ability);\n    }\n\n    public function destroy(Campaign $campaign, Ability $ability)\n    {\n        return $this->campaign($campaign)->crudDestroy($ability);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.ability'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/AttributeTemplateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\AttributeTemplateFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreAttributeTemplate;\nuse App\\Models\\AttributeTemplate;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\n\nclass AttributeTemplateController extends CrudController\n{\n    protected string $view = 'attribute_templates';\n\n    protected string $route = 'attribute_templates';\n\n    protected string $module = 'entity_attributes';\n\n    protected string $model = AttributeTemplate::class;\n\n    protected string $filter = AttributeTemplateFilter::class;\n\n    protected string $forceMode = 'table';\n\n    public function store(StoreAttributeTemplate $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request, true);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, AttributeTemplate $attributeTemplate)\n    {\n        return $this->campaign($campaign)->crudShow($attributeTemplate);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, AttributeTemplate $attributeTemplate)\n    {\n        return $this->campaign($campaign)->crudEdit($attributeTemplate);\n    }\n\n    public function update(StoreAttributeTemplate $request, Campaign $campaign, AttributeTemplate $attributeTemplate)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $attributeTemplate);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, AttributeTemplate $attributeTemplate)\n    {\n        return $this->campaign($campaign)->crudDestroy($attributeTemplate);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.attribute_template'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/BookmarkController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Actions\\BookmarkDatagridActions;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreBookmark;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\Campaign\\Sidebar\\SetupService;\nuse App\\Services\\DashboardService;\nuse Illuminate\\Http\\Request;\n\nclass BookmarkController extends CrudController\n{\n    /** @var string Config for the crudController */\n    protected string $view = 'bookmarks';\n\n    protected string $route = 'bookmarks';\n\n    protected bool $tabPermissions = false;\n\n    protected bool $tabAttributes = false;\n\n    protected bool $tabBoosted = false;\n\n    protected bool $tabCopy = false;\n\n    protected bool $hasLimitCheck = true;\n\n    protected string $model = Bookmark::class;\n\n    protected string $datagridActions = BookmarkDatagridActions::class;\n\n    protected string $forceMode = 'table';\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        // Check that the user has permission to actually be here\n        if (! $this->authorize('browse', [new Bookmark, $campaign])) {\n            return redirect()->route('dashboard', $campaign);\n        }\n\n        return $this->campaign($campaign)->crudIndex($request);\n    }\n\n    public function create(Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudCreate([\n            'dashboards' => $this->dashboardOptions(),\n            'parents' => $this->sidebarParents(),\n        ]);\n    }\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreBookmark $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Redirect to the edit screen\n     */\n    public function show(Campaign $campaign, Bookmark $bookmark)\n    {\n        if (! auth()->check()) {\n            abort(403);\n        }\n\n        return redirect()->route('bookmarks.edit', [$campaign, $bookmark]);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Bookmark $bookmark)\n    {\n        return $this->campaign($campaign)->crudEdit($bookmark, [\n            'dashboards' => $this->dashboardOptions(),\n            'parents' => $this->sidebarParents(),\n        ]);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreBookmark $request, Campaign $campaign, Bookmark $bookmark)\n    {\n\n        $this->authorize('update', $bookmark);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->all();\n        $bookmark->update($data);\n\n        $link = '<a href=\"' . route(\n            $this->view . '.edit',\n            [$campaign, $bookmark->id]\n        )\n            . '\" class=\"text-link\">' . $bookmark->name . '</a>';\n        $success = __('general.success.updated', [\n            'name' => $link,\n        ]);\n\n        $options = [];\n        $options = [$campaign, $bookmark] + $options;\n        $route = route($this->view . '.edit', $options + [$bookmark]);\n\n        if ($request->has('submit-new')) {\n            $route = route($this->route . '.create', $campaign);\n        } elseif ($request->has('submit-update')) {\n            $route = route($this->route . '.edit', [$campaign, $bookmark->id]);\n        } elseif ($request->has('submit-close')) {\n            $route = route($this->route . '.index', [$campaign]);\n        } elseif ($request->has('submit-copy')) {\n            $route = route($this->route . '.create', [$campaign, 'copy' => $bookmark->id]);\n\n            return response()->redirectTo($route)->with('success_raw', $success);\n        }\n\n        return response()->redirectTo($route)->with('success_raw', $success);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Bookmark $bookmark)\n    {\n        return $this->campaign($campaign)->crudDestroy($bookmark);\n    }\n\n    protected function limitCheckReached(): bool\n    {\n        return ! $this->campaign->canHaveMoreBookmarks();\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.bookmark'))->first();\n    }\n\n    protected function dashboardOptions(): array\n    {\n        if (auth()->guest()) {\n            return [];\n        }\n        /** @var DashboardService $service */\n        $service = app()->make(DashboardService::class);\n        $dashboards = $service->campaign($this->campaign)->user(auth()->user())->getDashboards();\n        $dashboardOptions = ['' => ''];\n        foreach ($dashboards as $dashboard) {\n            $dashboardOptions[$dashboard->id] = $dashboard->name;\n        }\n\n        return $dashboardOptions;\n    }\n\n    protected function sidebarParents(): array\n    {\n        /** @var SetupService $service */\n        $service = app()->make(SetupService::class);\n\n        return $service->campaign($this->campaign)->availableParents();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/CalendarController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\CalendarFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreCalendar;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Sanitizers\\CalendarSanitizer;\n\nclass CalendarController extends CrudController\n{\n    protected string $view = 'calendars';\n\n    protected string $route = 'calendars';\n\n    protected string $module = 'calendars';\n\n    protected string $model = Calendar::class;\n\n    protected string $filter = CalendarFilter::class;\n\n    protected string $sanitizer = CalendarSanitizer::class;\n\n    /**\n     * Store the new calendar in the db\n     */\n    public function store(StoreCalendar $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Calendar $calendar)\n    {\n        return $this->campaign($campaign)->crudShow($calendar);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Calendar $calendar)\n    {\n        return $this->campaign($campaign)->crudEdit($calendar);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreCalendar $request, Campaign $campaign, Calendar $calendar)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $calendar);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Calendar $calendar)\n    {\n        return $this->campaign($campaign)->crudDestroy($calendar);\n    }\n\n    public function monthList(Campaign $campaign, Calendar $calendar)\n    {\n        return response()->json([\n            'months' => $calendar->months(),\n            'current' => [\n                'year' => $calendar->currentDate('year'),\n                'month' => $calendar->currentDate('month'),\n                'day' => $calendar->currentDate('date'),\n            ],\n            'recurring' => $calendar->recurringOptions(true),\n        ]);\n    }\n\n    /**\n     * Set the day as today\n     */\n    public function today(Campaign $campaign, Calendar $calendar)\n    {\n        $this->authorize('update', $calendar->entity);\n\n        $date = request()->get('date', null);\n        if ($date) {\n            $calendar->update([\n                'date' => $date,\n            ]);\n        }\n\n        return redirect()->back()\n            ->with('success', __('calendars.edit.today'));\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.calendar'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/CampaignController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\UpdateCampaign;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDescription;\nuse App\\Services\\Campaign\\GenreService;\nuse App\\Services\\Campaign\\SystemService;\nuse App\\Services\\LanguageService;\nuse App\\Services\\MultiEditingService;\nuse Illuminate\\Support\\Str;\n\nclass CampaignController extends Controller\n{\n    protected string $view = 'campaigns';\n\n    public function __construct(\n        protected MultiEditingService $editingService,\n        protected GenreService $genreService,\n        protected SystemService $systemService,\n        protected LanguageService $languageService\n    ) {\n        $this->middleware('auth', ['except' => ['index', 'show', 'css']]);\n    }\n\n    public function show(Campaign $campaign)\n    {\n        return view($this->view . '.show', compact('campaign'));\n    }\n\n    public function edit(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $editingUsers = null;\n\n        if ($campaign->hasEditingWarning()) {\n            $editingUsers = $this->editingService\n                ->model($campaign)\n                ->user(auth()->user())\n                ->users();\n            // If no one is editing the model, we are now editing it\n            if (empty($editingUsers)) {\n                $this->editingService->edit();\n            }\n        }\n        $languages = $this->languageService->getSupportedLanguagesList(true);\n        $timezones = [];\n\n        for ($i = -12; $i <= 14; $i++) {\n            $prefix = ($i >= 0) ? '+' : '-';\n            // Formats to \"UTC +05:00\" or \"UTC -11:00\"\n            $utcString = 'UTC ' . $prefix . Str::padLeft((string) abs($i), 2, '0') . ':00';\n\n            $timezones[$utcString] = $utcString;\n        }\n\n        return view($this->view . '.forms.edit', [\n            'campaign' => $campaign,\n            'model' => $campaign,\n            'start' => false,\n            'editingUsers' => $editingUsers,\n            'languages' => $languages,\n            'timezones' => $timezones,\n        ]);\n    }\n\n    public function update(UpdateCampaign $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->all();\n        // Missing sidebar config? Because we shouldn't have used the same array...\n        if (! empty($campaign->ui_settings['sidebar'])) {\n            $data['ui_settings']['sidebar'] = $campaign->ui_settings['sidebar'];\n        }\n        // Also, let's unset ui_settings that are set to true\n        foreach ($data['ui_settings'] as $key => $value) {\n            if ($value === '0') {\n                unset($data['ui_settings'][$key]);\n            }\n        }\n        // Same mumbo jumbo for module settings...\n        if (! empty($campaign->settings['modules'])) {\n            $data['settings']['modules'] = $campaign->settings['modules'];\n        }\n\n        if ($request->filled('vanity') && $campaign->premium()) {\n            $data['slug'] = $request->post('vanity');\n        }\n\n        $campaign->update($data);\n\n        CampaignDescription::updateOrCreate(\n            ['campaign_id' => $campaign->id],\n            ['description' => $request->post('description'), 'excerpt' => $request->post('excerpt')]\n        );\n\n        $this->genreService->campaign($campaign)->save($request->post('genres', []));\n        $this->systemService->campaign($campaign)->save($request->post('systems', []));\n\n        $this->editingService\n            ->model($campaign)\n            ->user($request->user())\n            ->finish();\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('campaigns.edit', $campaign)\n                ->with('success', __($this->view . '.edit.success', ['name' => $campaign->name]));\n        }\n        if ($request->has('submit-new')) {\n            return redirect()\n                ->route('start')\n                ->with('success', __($this->view . '.edit.success', ['name' => $campaign->name]));\n        }\n\n        return redirect()->route('overview', $campaign)\n            ->with('success', __($this->view . '.edit.success', ['name' => $campaign->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/CharacterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\CharacterFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreCharacter;\nuse App\\Models\\Campaign;\nuse App\\Models\\Character;\nuse App\\Models\\EntityType;\nuse App\\Models\\MiscModel;\nuse App\\Renderers\\DatagridRenderer;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\CharacterRelationsService;\nuse App\\Services\\FilterService;\n\nclass CharacterController extends CrudController\n{\n    protected string $view = 'characters';\n\n    protected string $route = 'characters';\n\n    protected string $module = 'characters';\n\n    protected string $model = Character::class;\n\n    protected string $filter = CharacterFilter::class;\n\n    public function __construct(\n        FilterService $filterService,\n        DatagridRenderer $datagridRenderer,\n        AttributeService $attributeService,\n        EntitySaveService $entitySaveService,\n        protected CharacterRelationsService $characterRelationsService,\n    ) {\n        parent::__construct($filterService, $datagridRenderer, $attributeService, $entitySaveService);\n    }\n\n    public function store(StoreCharacter $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Character $character)\n    {\n        return $this->campaign($campaign)->crudShow($character);\n    }\n\n    public function edit(Campaign $campaign, Character $character)\n    {\n        return $this->campaign($campaign)->crudEdit($character);\n    }\n\n    public function update(StoreCharacter $request, Campaign $campaign, Character $character)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $character);\n    }\n\n    public function destroy(Campaign $campaign, Character $character)\n    {\n        return $this->campaign($campaign)->crudDestroy($character);\n    }\n\n    protected function afterModelSave(MiscModel $model, array $data): void\n    {\n        $this->characterRelationsService->save($model, $data);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.character'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/ConversationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Actions\\DeprecatedDatagridActions;\nuse App\\Datagrids\\Filters\\ConversationFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreConversation;\nuse App\\Models\\Campaign;\nuse App\\Models\\Conversation;\nuse App\\Models\\EntityType;\n\nclass ConversationController extends CrudController\n{\n    protected string $view = 'conversations';\n\n    protected string $route = 'conversations';\n\n    protected string $module = 'conversations';\n\n    protected string $model = Conversation::class;\n\n    protected string $filter = ConversationFilter::class;\n\n    protected string $datagridActions = DeprecatedDatagridActions::class;\n\n    protected string $forceMode = 'table';\n\n    public function store(StoreConversation $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Conversation $conversation)\n    {\n        return $this->campaign($campaign)->crudShow($conversation);\n    }\n\n    public function edit(Campaign $campaign, Conversation $conversation)\n    {\n        return $this->campaign($campaign)->crudEdit($conversation);\n    }\n\n    public function update(StoreConversation $request, Campaign $campaign, Conversation $conversation)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $conversation);\n    }\n\n    public function destroy(Campaign $campaign, Conversation $conversation)\n    {\n        return $this->campaign($campaign)->crudDestroy($conversation);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.conversation'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/CreatureController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\CreatureFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreCreature;\nuse App\\Models\\Campaign;\nuse App\\Models\\Creature;\nuse App\\Models\\EntityType;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass CreatureController extends CrudController\n{\n    protected string $view = 'creatures';\n\n    protected string $route = 'creatures';\n\n    protected string $module = 'creatures';\n\n    protected string $model = Creature::class;\n\n    protected string $filter = CreatureFilter::class;\n\n    /**\n     * @return RedirectResponse\n     */\n    public function store(Campaign $campaign, StoreCreature $request)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Creature $creature)\n    {\n        return $this->campaign($campaign)->crudShow($creature);\n    }\n\n    public function edit(Campaign $campaign, Creature $creature)\n    {\n        return $this->campaign($campaign)->crudEdit($creature);\n    }\n\n    public function update(Campaign $campaign, StoreCreature $request, Creature $creature)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $creature);\n    }\n\n    public function destroy(Campaign $campaign, Creature $creature)\n    {\n        return $this->campaign($campaign)->crudDestroy($creature);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.creature'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/DiceRollController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Actions\\DeprecatedDatagridActions;\nuse App\\Datagrids\\Filters\\DiceRollFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreDiceRoll;\nuse App\\Models\\Campaign;\nuse App\\Models\\DiceRoll;\nuse App\\Models\\DiceRollResult;\nuse App\\Models\\EntityType;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\n\nclass DiceRollController extends CrudController\n{\n    protected string $view = 'dice_rolls';\n\n    protected string $route = 'dice_rolls';\n\n    protected string $module = 'dice_rolls';\n\n    protected string $model = DiceRoll::class;\n\n    protected string $filter = DiceRollFilter::class;\n\n    protected string $datagridActions = DeprecatedDatagridActions::class;\n\n    protected string $forceMode = 'table';\n\n    /**\n     * @return JsonResponse|RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function store(Campaign $campaign, StoreDiceRoll $request)\n    {\n        return $this->campaign($campaign)->crudStore($request, true);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function show(Campaign $campaign, DiceRoll $diceRoll)\n    {\n        return $this->campaign($campaign)->crudShow($diceRoll);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     * @throws BindingResolutionException\n     */\n    public function edit(Campaign $campaign, DiceRoll $diceRoll)\n    {\n        return $this->campaign($campaign)->crudEdit($diceRoll);\n    }\n\n    /**\n     * @return JsonResponse|RedirectResponse\n     *\n     * @throws AuthorizationException\n     * @throws BindingResolutionException\n     * @throws ContainerExceptionInterface\n     * @throws NotFoundExceptionInterface\n     */\n    public function update(StoreDiceRoll $request, Campaign $campaign, DiceRoll $diceRoll)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $diceRoll);\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, DiceRoll $diceRoll)\n    {\n        return $this->campaign($campaign)->crudDestroy($diceRoll);\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function roll(Campaign $campaign, DiceRoll $diceRoll)\n    {\n        $this->authorize('view', $diceRoll->entity);\n\n        try {\n            $result = DiceRollResult::create([\n                'dice_roll_id' => $diceRoll->id,\n                'created_by' => Auth::user()->id,\n            ]);\n\n            return redirect()->to($diceRoll->getLink())\n                ->with('success', trans('dice_rolls.results.success'));\n        } catch (Exception $e) {\n            return redirect()->to($diceRoll->getLink())\n                ->with('error', trans('dice_rolls.results.error'));\n        }\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroyRoll(Campaign $campaign, DiceRoll $diceRoll, DiceRollResult $diceRollResult)\n    {\n        $this->authorize('delete', $diceRoll->entity);\n\n        $diceRollResult->delete();\n\n        return redirect()->to($diceRoll->getLink())\n            ->with('success', trans('dice_rolls.destroy.dice_roll'));\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.dice_roll'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/EventController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\EventFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreEvent;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Event;\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\Relations\\EntityRelationsServiceFactory;\n\nclass EventController extends CrudController\n{\n    protected string $view = 'events';\n\n    protected string $route = 'events';\n\n    protected string $module = 'events';\n\n    protected string $model = Event::class;\n\n    protected string $filter = EventFilter::class;\n\n    public function store(StoreEvent $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Event $event)\n    {\n        return $this->campaign($campaign)->crudShow($event);\n    }\n\n    public function edit(Campaign $campaign, Event $event)\n    {\n        return $this->campaign($campaign)->crudEdit($event);\n    }\n\n    public function update(StoreEvent $request, Campaign $campaign, Event $event)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $event);\n    }\n\n    public function destroy(Campaign $campaign, Event $event)\n    {\n        return $this->campaign($campaign)->crudDestroy($event);\n    }\n\n    protected function afterModelSave(MiscModel $model, array $data): void\n    {\n        app(EntityRelationsServiceFactory::class)->for($model->entity)?->save($model, $data);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.event'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/FamilyController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\FamilyFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreFamily;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Family;\nuse App\\Models\\MiscModel;\nuse App\\Renderers\\DatagridRenderer;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\FamilyRelationsService;\nuse App\\Services\\FilterService;\n\nclass FamilyController extends CrudController\n{\n    protected string $view = 'families';\n\n    protected string $route = 'families';\n\n    protected string $module = 'families';\n\n    protected string $model = Family::class;\n\n    protected string $filter = FamilyFilter::class;\n\n    public function __construct(\n        FilterService $filterService,\n        DatagridRenderer $datagridRenderer,\n        AttributeService $attributeService,\n        EntitySaveService $entitySaveService,\n        protected FamilyRelationsService $familyRelationsService,\n    ) {\n        parent::__construct($filterService, $datagridRenderer, $attributeService, $entitySaveService);\n    }\n\n    public function store(StoreFamily $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Family $family)\n    {\n        return $this->campaign($campaign)->crudShow($family);\n    }\n\n    public function edit(Campaign $campaign, Family $family)\n    {\n        return $this->campaign($campaign)->crudEdit($family);\n    }\n\n    public function update(StoreFamily $request, Campaign $campaign, Family $family)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $family);\n    }\n\n    public function destroy(Campaign $campaign, Family $family)\n    {\n        return $this->campaign($campaign)->crudDestroy($family);\n    }\n\n    protected function afterModelSave(MiscModel $model, array $data): void\n    {\n        $this->familyRelationsService->save($model, $data);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.family'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/ItemController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\ItemFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreItem;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Item;\nuse App\\Models\\MiscModel;\nuse App\\Renderers\\DatagridRenderer;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\ItemRelationsService;\nuse App\\Services\\FilterService;\n\nclass ItemController extends CrudController\n{\n    protected string $view = 'items';\n\n    protected string $route = 'items';\n\n    protected string $module = 'items';\n\n    protected string $model = Item::class;\n\n    protected string $filter = ItemFilter::class;\n\n    public function __construct(\n        FilterService $filterService,\n        DatagridRenderer $datagridRenderer,\n        AttributeService $attributeService,\n        EntitySaveService $entitySaveService,\n        protected ItemRelationsService $itemRelationsService,\n    ) {\n        parent::__construct($filterService, $datagridRenderer, $attributeService, $entitySaveService);\n    }\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreItem $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Item $item)\n    {\n        return $this->campaign($campaign)->crudShow($item);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Item $item)\n    {\n        return $this->campaign($campaign)->crudEdit($item);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreItem $request, Campaign $campaign, Item $item)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $item);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Item $item)\n    {\n        return $this->campaign($campaign)->crudDestroy($item);\n    }\n\n    protected function afterModelSave(MiscModel $model, array $data): void\n    {\n        $this->itemRelationsService->save($model, $data);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.item'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/JournalController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\JournalFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreJournal;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Journal;\n\nclass JournalController extends CrudController\n{\n    protected string $view = 'journals';\n\n    protected string $route = 'journals';\n\n    protected string $module = 'journals';\n\n    protected string $model = Journal::class;\n\n    protected string $filter = JournalFilter::class;\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreJournal $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Journal $journal)\n    {\n        return $this->campaign($campaign)->crudShow($journal);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Journal $journal)\n    {\n        return $this->campaign($campaign)->crudEdit($journal);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreJournal $request, Campaign $campaign, Journal $journal)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $journal);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Journal $journal)\n    {\n        return $this->campaign($campaign)->crudDestroy($journal);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.journal'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/LocationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\LocationFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreLocation;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Location;\nuse App\\Models\\MiscModel;\nuse App\\Renderers\\DatagridRenderer;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\LocationRelationsService;\nuse App\\Services\\FilterService;\n\nclass LocationController extends CrudController\n{\n    protected string $view = 'locations';\n\n    protected string $route = 'locations';\n\n    protected string $module = 'locations';\n\n    protected string $model = Location::class;\n\n    protected string $filter = LocationFilter::class;\n\n    public function __construct(\n        FilterService $filterService,\n        DatagridRenderer $datagridRenderer,\n        AttributeService $attributeService,\n        EntitySaveService $entitySaveService,\n        protected LocationRelationsService $locationRelationsService,\n    ) {\n        parent::__construct($filterService, $datagridRenderer, $attributeService, $entitySaveService);\n    }\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreLocation $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Location $location)\n    {\n        return $this->campaign($campaign)->crudShow($location);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Location $location)\n    {\n        return $this->campaign($campaign)->crudEdit($location);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreLocation $request, Campaign $campaign, Location $location)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $location);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Location $location)\n    {\n        return $this->campaign($campaign)->crudDestroy($location);\n    }\n\n    protected function afterModelSave(MiscModel $model, array $data): void\n    {\n        $this->locationRelationsService->save($model, $data);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.location'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/MapController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\MapFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreMap;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Map;\nuse App\\Models\\MiscModel;\n\nclass MapController extends CrudController\n{\n    protected string $view = 'maps';\n\n    protected string $route = 'maps';\n\n    protected string $module = 'maps';\n\n    protected string $model = Map::class;\n\n    protected string $filter = MapFilter::class;\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreMap $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Map $map)\n    {\n        return $this->campaign($campaign)->crudShow($map);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Map $map)\n    {\n        // Can't edit a map being chunked\n        if ($map->isChunked() && $map->chunkingRunning()) {\n            return redirect()\n                ->to($map->getLink())\n                ->with('error', __('maps.errors.chunking.running.edit') . ' ' . __('maps.errors.chunking.running.time'));\n        }\n\n        return $this->campaign($campaign)->crudEdit($map);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreMap $request, Campaign $campaign, Map $map)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $map);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Map $map)\n    {\n        return $this->campaign($campaign)->crudDestroy($map);\n    }\n\n    protected function afterModelSave(MiscModel $model, array $data): void\n    {\n        /** @var Map $model */\n        $model->height = null;\n        $model->width = null;\n        $model->save();\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.map'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/NoteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\NoteFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreNote;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Note;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass NoteController extends CrudController\n{\n    protected string $view = 'notes';\n\n    protected string $route = 'notes';\n\n    protected string $module = 'notes';\n\n    protected string $model = Note::class;\n\n    protected string $filter = NoteFilter::class;\n\n    /**\n     * @return RedirectResponse\n     */\n    public function store(StoreNote $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Note $note)\n    {\n        return $this->campaign($campaign)->crudShow($note);\n    }\n\n    public function edit(Campaign $campaign, Note $note)\n    {\n        return $this->campaign($campaign)->crudEdit($note);\n    }\n\n    public function update(StoreNote $request, Campaign $campaign, Note $note)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $note);\n    }\n\n    public function destroy(Campaign $campaign, Note $note)\n    {\n        return $this->campaign($campaign)->crudDestroy($note);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.note'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/OrganisationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\OrganisationFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreOrganisation;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Organisation;\nuse App\\Renderers\\DatagridRenderer;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\OrganisationRelationsService;\nuse App\\Services\\FilterService;\n\nclass OrganisationController extends CrudController\n{\n    protected string $view = 'organisations';\n\n    protected string $route = 'organisations';\n\n    protected string $module = 'organisations';\n\n    protected string $model = Organisation::class;\n\n    protected string $filter = OrganisationFilter::class;\n\n    public function __construct(\n        FilterService $filterService,\n        DatagridRenderer $datagridRenderer,\n        AttributeService $attributeService,\n        EntitySaveService $entitySaveService,\n        protected OrganisationRelationsService $organisationRelationsService,\n    ) {\n        parent::__construct($filterService, $datagridRenderer, $attributeService, $entitySaveService);\n    }\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreOrganisation $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Organisation $organisation)\n    {\n        return $this->campaign($campaign)->crudShow($organisation);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Organisation $organisation)\n    {\n        return $this->campaign($campaign)->crudEdit($organisation);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreOrganisation $request, Campaign $campaign, Organisation $organisation)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $organisation);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Organisation $organisation)\n    {\n        return $this->campaign($campaign)->crudDestroy($organisation);\n    }\n\n    protected function afterModelSave(MiscModel $model, array $data): void\n    {\n        $this->organisationRelationsService->save($model, $data);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.organisation'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/QuestController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\QuestFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreQuest;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Quest;\n\nclass QuestController extends CrudController\n{\n    protected string $view = 'quests';\n\n    protected string $route = 'quests';\n\n    protected string $module = 'quests';\n\n    protected string $model = Quest::class;\n\n    protected string $filter = QuestFilter::class;\n\n    public function store(StoreQuest $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Quest $quest)\n    {\n        return $this->campaign($campaign)->crudShow($quest);\n    }\n\n    public function edit(Campaign $campaign, Quest $quest)\n    {\n        return $this->campaign($campaign)->crudEdit($quest);\n    }\n\n    public function update(StoreQuest $request, Campaign $campaign, Quest $quest)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $quest);\n    }\n\n    public function destroy(Campaign $campaign, Quest $quest)\n    {\n        return $this->campaign($campaign)->crudDestroy($quest);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.quest'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/RaceController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\RaceFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreRace;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Race;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass RaceController extends CrudController\n{\n    protected string $view = 'races';\n\n    protected string $route = 'races';\n\n    protected string $module = 'races';\n\n    protected string $model = Race::class;\n\n    protected string $filter = RaceFilter::class;\n\n    /**\n     * @return RedirectResponse\n     */\n    public function store(StoreRace $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    public function show(Campaign $campaign, Race $race)\n    {\n        return $this->campaign($campaign)->crudShow($race);\n    }\n\n    public function edit(Campaign $campaign, Race $race)\n    {\n        return $this->campaign($campaign)->crudEdit($race);\n    }\n\n    public function update(StoreRace $request, Campaign $campaign, Race $race)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $race);\n    }\n\n    public function destroy(Campaign $campaign, Race $race)\n    {\n        return $this->campaign($campaign)->crudDestroy($race);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.race'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/TagController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\TagFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreTag;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Tag;\n\nclass TagController extends CrudController\n{\n    protected string $view = 'tags';\n\n    protected string $route = 'tags';\n\n    protected string $module = 'tags';\n\n    protected string $model = Tag::class;\n\n    protected string $filter = TagFilter::class;\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreTag $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Tag $tag)\n    {\n        return $this->campaign($campaign)->crudShow($tag);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Tag $tag)\n    {\n        return $this->campaign($campaign)->crudEdit($tag);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreTag $request, Campaign $campaign, Tag $tag)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $tag);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Tag $tag)\n    {\n        return $this->campaign($campaign)->crudDestroy($tag);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.tag'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Crud/TimelineController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Crud;\n\nuse App\\Datagrids\\Filters\\TimelineFilter;\nuse App\\Http\\Controllers\\CrudController;\nuse App\\Http\\Requests\\StoreTimeline;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Timeline;\n\nclass TimelineController extends CrudController\n{\n    protected string $view = 'timelines';\n\n    protected string $route = 'timelines';\n\n    protected string $model = Timeline::class;\n\n    protected string $filter = TimelineFilter::class;\n\n    protected string $module = 'timelines';\n\n    public function store(StoreTimeline $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Timeline $timeline)\n    {\n        return $this->campaign($campaign)->crudShow($timeline);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Timeline $timeline)\n    {\n        return $this->campaign($campaign)->crudEdit($timeline);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreTimeline $request, Campaign $campaign, Timeline $timeline)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $timeline);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Timeline $timeline)\n    {\n        return $this->campaign($campaign)->crudDestroy($timeline);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.timeline'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/CrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Datagrids\\Actions\\DefaultDatagridActions;\nuse App\\Datagrids\\Filters\\DatagridFilter;\nuse App\\Datagrids\\Sorters\\DatagridSorter;\nuse App\\Facades\\Breadcrumb;\nuse App\\Facades\\FormCopy;\nuse App\\Facades\\Module;\nuse App\\Http\\Middleware\\CachedResponse;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Relation;\nuse App\\Renderers\\DatagridRenderer;\nuse App\\Sanitizers\\MiscSanitizer;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\AliasService;\nuse App\\Services\\Entity\\CopyService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\FilterService;\nuse App\\Services\\MultiEditingService;\nuse App\\Traits\\BulkControllerTrait;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasNested;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Pagination\\Paginator;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Session;\nuse Illuminate\\Support\\Str;\nuse LogicException;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\n\nclass CrudController extends Controller\n{\n    use BulkControllerTrait;\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasNested;\n    use HasSubview;\n\n    /** The view where to find the resources */\n    protected string $view = '';\n\n    /** The name of the route for the resource */\n    protected string $route = '';\n\n    /** Model class name for the object */\n    protected string $model;\n\n    /** Name of the campaign module to test if it's enabled or not */\n    protected string $module;\n\n    protected string $filter;\n\n    protected FilterService $filterService;\n\n    protected DatagridRenderer $datagrid;\n\n    /** If the permissions tab and pane is enabled or not. */\n    protected bool $tabPermissions = true;\n\n    /** If the attributes tab and pane is enabled or not */\n    protected bool $tabAttributes = true;\n\n    /** If the copy tab and pane is enabled or not */\n    protected bool $tabCopy = true;\n\n    /** If the boosted tab and pane is enabled or not */\n    protected bool $tabBoosted = true;\n\n    /** Make the request play nice with the model */\n    protected string $sanitizer;\n\n    /**\n     * A sorter object for subviews\n     */\n    protected DatagridSorter $datagridSorter;\n\n    protected AttributeService $attributeService;\n\n    protected EntitySaveService $entitySaveService;\n\n    /** If the auth check was already performed on this controller */\n    protected bool $alreadyAuthChecked = false;\n\n    /** The datagrid actions, set to null to disable */\n    protected string $datagridActions = DefaultDatagridActions::class;\n\n    /** Determine if the create/store procedure has a limit checking in place */\n    protected bool $hasLimitCheck = false;\n\n    protected Request $request;\n\n    public function __construct(\n        FilterService $filterService,\n        DatagridRenderer $datagridRenderer,\n        AttributeService $attributeService,\n        EntitySaveService $entitySaveService,\n    ) {\n        $this->filterService = $filterService;\n        $this->datagrid = $datagridRenderer;\n        $this->attributeService = $attributeService;\n        $this->entitySaveService = $entitySaveService;\n\n        $this->middleware([CachedResponse::class]);\n    }\n\n    protected function afterModelSave(MiscModel $model, array $data): void {}\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudIndex($request);\n    }\n\n    public function crudIndex(Request $request)\n    {\n        if (! $this->moduleEnabled()) {\n            return redirect()\n                ->route('dashboard', $this->campaign)\n                ->with(\n                    'error_raw',\n                    __('campaigns/modules.errors.disabled', [\n                        'name' => $this->module,\n                        'fix' => '<a href=\"' .\n                            route('campaign.modules', [\n                                $this->campaign,\n                                '#' . $this->module,\n                            ]) .\n                            '\" class=\"text-link\">' .\n                            __('crud.fix-this-issue') .\n                            '</a>',\n                    ]),\n                );\n        }\n        if (method_exists($this, 'getEntityType')) {\n            /** @var EntityType $entityType */\n            $entityType = $this->getEntityType();\n            if ($entityType->hasEntity()) {\n                return redirect()->route('entities.index', [\n                    $this->campaign,\n                    $entityType,\n                ]);\n            }\n        }\n\n        /**\n         * Prepare a lot of variables that will be shared over to the view\n         *\n         * @var Bookmark|Relation $model\n         */\n        $model = new $this->model;\n        $campaign = $this->campaign;\n        $this->request = $request;\n        $this->filterService->request($request);\n        if (method_exists($model, 'explicitFilters')) {\n            $this->filterService->model($model)->make($this->view);\n        }\n        $name = $this->view;\n        $langKey = $this->langKey ?? $name;\n        /** @var ?DatagridFilter $filter */\n        $filter = ! empty($this->filter) ? new $this->filter : null;\n        if (! empty($filter)) {\n            $filter->campaign($this->campaign)->build();\n        }\n        $route = $this->route;\n        $bulk = $this->bulkModel();\n        $datagridActions = new $this->datagridActions;\n\n        // Switch between the new explore/grid mode and the old table\n        $mode = $this->mode();\n        $forceMode = null;\n        $nested = $this->isNested();\n\n        $base = $model->preparedSelect()->preparedWith();\n        //             dd(get_class($model), get_class($base));\n\n        if ($nested) {\n            $this->datagrid->nested();\n        }\n\n        $base\n            ->search($this->filterService->search())\n            ->order($this->filterService->order())\n            ->distinct();\n\n        $parent = null;\n\n        // Do this to avoid an extra sql query when no filters are selected\n        if ($this->filterService->hasFilters()) {\n            $unfilteredCount = $base->count();\n            $base = $base->filter($this->filterService->filters());\n\n            $models = $base->paginate();\n\n            // Don't use total as it won't use the distinct() filters (typically when doing\n            // left join on the entities table)\n            $filteredCount = $models->total();\n        } else {\n            if (! $model instanceof Bookmark) {\n                $relation = 'entity';\n                // If $model is a Relation, theres no entity, we have to handle it differently\n                if ($model instanceof Relation) {\n                    $relation = 'owner';\n                    $base = $base->whereHas('target', function ($query) {\n                        $query->whereNull('entities.archived_at');\n                    });\n                }\n\n                // Filter out archived entities\n                $base = $base->whereHas($relation, function ($query) {\n                    $query->whereNull('entities.archived_at');\n                });\n            }\n\n            /** @var Paginator $models */\n            $models = $base->paginate();\n            $unfilteredCount = $filteredCount = $models->count();\n        }\n\n        // If the current page is higher than the max amount of pages, redirect the user\n        if ((int) request()->get('page', 1) > $models->lastPage()) {\n            return redirect()->route($this->route . '.index', [\n                $this->campaign,\n                'page' => $models->lastPage(),\n                'order' => request()->get('order'),\n            ]);\n        }\n\n        $data = compact(\n            'campaign',\n            'models',\n            'name',\n            'langKey',\n            'model',\n            'filter',\n            'filteredCount',\n            'unfilteredCount',\n            'route',\n            'bulk',\n            'datagridActions',\n            'mode',\n            'parent',\n            'forceMode',\n        );\n        if (method_exists($this, 'getEntityType')) {\n            $data['entityType'] = $this->getEntityType();\n            $data['templates'] = $this->loadTemplates($data['entityType']);\n            $this->datagrid->entityType($data['entityType']);\n        } else {\n            $data['singular'] = __('entities.' . Str::singular($route));\n        }\n\n        if (method_exists($this, 'titleKey')) {\n            $data['titleKey'] = $this->titleKey();\n        } elseif ($this->campaign->boosted()) {\n            // Custom sidebar link, with fallback on custom module plural name\n            $data['titleKey'] = Arr::get(\n                $campaign->ui_settings,\n                'sidebar.labels.' . $langKey,\n            );\n            if (empty($data['titleKey']) && isset($data['entityType'])) {\n                $data['titleKey'] = $data['entityType']->plural();\n            }\n            // If its a bookmark, override everything else\n            if ($request->has('bookmark')) {\n                $bookmark = Bookmark::where(\n                    'id',\n                    $request->get('bookmark'),\n                )->first();\n                if ($bookmark) {\n                    $this->datagrid->bookmark($bookmark);\n                    $data['bookmark'] = $bookmark;\n                    $data['titleKey'] = $bookmark->name;\n                }\n            }\n\n            if ($request->has('order')) {\n                $data['order'] = $request->get('order');\n                $data['desc'] = $request->get('desc');\n            }\n        }\n\n        if (method_exists($model, 'getParentKeyName')) {\n            $data['nestable'] = $nested;\n        }\n        $this->datagrid\n            ->models($models)\n            ->campaign($campaign)\n            ->request($request)\n            ->service($this->filterService);\n        if (auth()->check()) {\n            $this->datagrid->user(auth()->user());\n        }\n\n        $data['datagrid'] = $this->datagrid;\n        $data['filterService'] = $this->filterService;\n\n        return view('cruds.index', $data);\n    }\n\n    /**\n     * Show the form for creating a new resource.\n     *\n     * @return Response\n     */\n    public function create(Campaign $campaign)\n    {\n        return $this->campaign($campaign)->crudCreate();\n    }\n\n    public function crudCreate($params = [])\n    {\n        // @phpstan-ignore-next-line\n        $this->authorize('create', [$this->getEntityType(), $this->campaign]);\n\n        if ($this->hasLimitCheck) {\n            // @phpstan-ignore-next-line\n            if ($this->limitCheckReached()) {\n                $key = $this->view == 'bookmarks' ? 'bookmarks' : 'entities';\n\n                return view('cruds.forms.limit')\n                    ->with('campaign', $this->campaign)\n                    ->with('limit', config('limits.campaigns.' . $key))\n                    ->with('thing', __('entities.bookmarks'))\n                    ->with('doc', '/advanced/bookmarks.html')\n                    ->with('name', $this->view);\n            }\n        }\n        FormCopy::request(request());\n        if (! isset($params['source'])) {\n            $copyId = request()->input('copy');\n            if (! empty($copyId)) {\n                /** @var ?Entity $model */\n                $model = Entity::find(request()->get('copy'));\n                if (! $model || $model->isMissingChild()) {\n                    abort(404);\n                }\n                $params['source'] = $model;\n                FormCopy::source($params['source']);\n            } else {\n                $params['source'] = null;\n            }\n        }\n        $model = new $this->model;\n\n        $params['campaign'] = $this->campaign;\n        $params['tabAttributes'] =\n            $this->tabAttributes &&\n            $this->campaign->enabled('entity_attributes');\n        $params['tabPermissions'] = $this->tabPermissions;\n        $params['tabCopy'] = $this->tabCopy;\n        $params['tabBoosted'] = $this->tabBoosted;\n        if (method_exists($this, 'getEntityType')) {\n            $params['entityType'] = $this->getEntityType();\n            $params['tabPermissions'] =\n                $this->tabPermissions &&\n                auth()->user()->can('permissions', $params['entityType']);\n        }\n        $params['title'] = __($this->view . '.create.title');\n\n        // Custom module names shenanigans\n        $entityTypeID = $model->entityTypeId();\n        $plural = Module::plural($entityTypeID, __('entities.' . $this->view));\n        $singular = Module::singular($entityTypeID);\n        $params['entityTypeId'] = $entityTypeID;\n        $params['plural'] = $plural;\n        if (! empty($singular)) {\n            $params['title'] = __('crud.titles.new', ['module' => $singular]);\n        }\n\n        $view = 'cruds.forms.create';\n        $override = $this->view . '.forms.create';\n        if (view()->exists($override)) {\n            $view = $override;\n        }\n\n        return view($view, array_merge(['name' => $this->view], $params));\n    }\n\n    public function crudStore(Request $request, bool $redirectToCreated = false)\n    {\n        // @phpstan-ignore-next-line\n        $this->authorize('create', [$this->getEntityType(), $this->campaign]);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        if ($this->hasLimitCheck) {\n            // @phpstan-ignore-next-line\n            if ($this->limitCheckReached()) {\n                return redirect()->back();\n            }\n        }\n\n        try {\n            // Sanitize the data\n            if (isset($this->sanitizer)) {\n                /** @var MiscSanitizer $sanitizer */\n                $sanitizer = app()->make($this->sanitizer);\n                $request->merge($sanitizer->request($request)->sanitize());\n            }\n\n            $data = $request->all();\n            $data['campaign_id'] = $this->campaign->id;\n\n            /** @var MiscModel $model */\n            $model = new $this->model;\n            /** @var MiscModel $new */\n            $new = $model->create($data);\n\n            // Bookmarks have no entity attached to them.\n            if (! ($new instanceof Bookmark) && $new->entity) {\n                // Fire an event for the Entity Observer.\n                $this->afterModelSave($new, $data);\n\n                $this->entitySaveService->save($new->entity, $data);\n                // Weird hack for prod issues\n                if (! $new->entity->child) {\n                    $new->entity->child = $new;\n                }\n\n                /** @var CopyService $copyService */\n                $copyService = app()->make(CopyService::class);\n                // First copy stuff like posts, since we might replace attribute mentions next\n                $copyService\n                    ->entity($new->entity)\n                    ->request($request)\n                    ->fromId()\n                    ->copy();\n\n                if (auth()->user()->can('attributes', $new->entity)) {\n                    $this->attributeService\n                        ->campaign($this->campaign)\n                        ->entity($new->entity)\n                        ->save($request->get('attribute', []));\n\n                    // When copying an entity, the user probably wants to update all mentions of attributes to ones on the new entity.\n                    if (\n                        $request->has('replace_mentions') &&\n                        $request->filled('replace_mentions') &&\n                        $new->entity->isFillable('entry')\n                    ) {\n                        $this->attributeService->replaceMentions(\n                            (int) $request->post('copy_source_id'),\n                        );\n                    }\n                }\n\n                /** @var AliasService $aliasService */\n                $aliasService = app()->make(AliasService::class);\n                $aliasService->entity($new->entity)->request($request)->save();\n            }\n\n            $link =\n                '<a href=\"' .\n                route(\n                    $new->entity ? 'entities.show' : $this->view . '.show',\n                    $new->entity\n                        ? [$this->campaign, $new->entity]\n                        : [$this->campaign, $new->id],\n                ) .\n                '\" class=\"text-link\">' .\n                $new->name .\n                '</a>';\n            $success = __('general.success.created', [\n                'name' => $link,\n            ]);\n\n            session()->flash('success_raw', $success);\n\n            if (auth()->user()->editor === 'tiptap') {\n                $count = session()->get('tiptap_survey_count', 0);\n                $count++;\n                session()->put('tiptap_survey_count', $count);\n                if ($count % 5 === 0) {\n                    session()->flash('tiptap_survey', true);\n                }\n            }\n\n            if ($request->has('submit-new')) {\n                $route = route($this->route . '.create', $this->campaign);\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-update')) {\n                $route = route($this->route . '.edit', [$this->campaign, $new]);\n                if (! $new instanceof Bookmark) {\n                    $route = route('entities.edit', [\n                        $this->campaign,\n                        $new->entity,\n                    ]);\n                }\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-view') && $new->entity) {\n                $route = route('entities.show', [\n                    $this->campaign,\n                    $new->entity,\n                ]);\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-copy')) {\n                $route = route($this->route . '.create', [\n                    $this->campaign,\n                    'copy' => $new->id,\n                ]);\n\n                return response()->redirectTo($route);\n            }\n\n            if ($new->entity) {\n                $route = route('entities.show', [\n                    $this->campaign,\n                    $new->entity,\n                ]);\n\n                return response()->redirectTo($route);\n            }\n            $route = Breadcrumb::campaign($this->campaign)->index($this->route);\n\n            return response()->redirectTo($route);\n        } catch (LogicException $exception) {\n            if (config('app.debug')) {\n                throw $exception;\n            }\n            $error = str_replace(\n                ' ',\n                '_',\n                mb_strtolower($exception->getMessage()),\n            );\n\n            return redirect()\n                ->back()\n                ->withInput()\n                ->with('error', __('crud.errors.' . $error));\n        }\n    }\n\n    public function crudShow(Model|MiscModel $model)\n    {\n        // @phpstan-ignore-next-line\n        if (! $model->entity) {\n            abort(404);\n        }\n\n        return redirect()->route('entities.show', [\n            $this->campaign,\n            $model->entity,\n        ]);\n    }\n\n    public function crudEdit(Model|MiscModel $model, array $params = [])\n    {\n        $this->authorize(\n            'update',\n            $model instanceof MiscModel ? $model->entity : $model,\n        );\n\n        if ($model instanceof MiscModel) {\n            return redirect()->route('entities.edit', [\n                $this->campaign,\n                $model->entity,\n            ]);\n        }\n\n        /** @var MiscModel $model */\n        $editingUsers = null;\n\n        if ($this->campaign->hasEditingWarning() && $model->entity) {\n            /** @var MultiEditingService $editingService */\n            $editingService = app()->make(MultiEditingService::class);\n            $editingUsers = $editingService\n                ->model($model->entity)\n                ->user(auth()->user())\n                ->users();\n            // If no one is editing the entity, we are now editing it\n            if (empty($editingUsers)) {\n                $editingService->edit();\n            }\n        }\n\n        $params = array_merge($params, [\n            'campaign' => $this->campaign,\n            'model' => $model,\n            'name' => $this->view,\n            'tabPermissions' => $this->tabPermissions &&\n                auth()->user()->can('permissions', $model),\n            'tabAttributes' => $this->tabAttributes &&\n                auth()->user()->can('attributes', $model->entity) &&\n                $this->campaign->enabled('entity_attributes'),\n            'tabBoosted' => $this->tabBoosted,\n            'tabCopy' => $this->tabCopy,\n            'editingUsers' => $editingUsers,\n        ]);\n        if (! $model instanceof Bookmark && $model->entity) {\n            $params['entity'] = $model->entity;\n        }\n\n        $view = 'cruds.forms.edit';\n        $override = $this->view . '.forms.edit';\n        if (view()->exists($override)) {\n            $view = $override;\n        } else {\n            dd('Missing form override for ' . $this->view);\n        }\n\n        return view($view, $params);\n    }\n\n    /**\n     * @return JsonResponse|RedirectResponse\n     *\n     * @throws AuthorizationException\n     * @throws BindingResolutionException\n     * @throws ContainerExceptionInterface\n     * @throws NotFoundExceptionInterface\n     */\n    public function crudUpdate(Request $request, Model|MiscModel $model)\n    {\n        $this->authorize(\n            'update',\n            $model instanceof MiscModel ? $model->entity : $model,\n        );\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        try {\n            // Sanitize the data\n            if (isset($this->sanitizer)) {\n                /** @var MiscSanitizer $sanitizer */\n                $sanitizer = app()->make($this->sanitizer);\n                $request->merge($sanitizer->request($request)->sanitize());\n            }\n\n            /** @var MiscModel $model */\n            $data = $this->prepareData($request, $model);\n            $model->update($data);\n\n            // Bookmarks have no entity attached to them.\n            if (! ($model instanceof Bookmark) && $model->entity) {\n                // Fire an event for the Entity Observer\n                $this->afterModelSave($model, $data);\n\n                $this->entitySaveService->save($model->entity, $data);\n\n                if (auth()->user()->can('attributes', $model->entity)) {\n                    $this->attributeService\n                        ->campaign($this->campaign)\n                        ->entity($model->entity)\n                        ->save($request->get('attribute', []));\n                }\n\n                /** @var AliasService $aliasService */\n                $aliasService = app()->make(AliasService::class);\n                $aliasService\n                    ->entity($model->entity)\n                    ->request($request)\n                    ->save();\n            }\n\n            $link =\n                '<a href=\"' .\n                route(\n                    $model->entity ? 'entities.show' : $this->view . '.show',\n                    $model->entity\n                        ? [$this->campaign, $model->entity]\n                        : [$this->campaign, $model->id],\n                ) .\n                '\" class=\"text-link\">' .\n                $model->name .\n                '</a>';\n            $success = __('general.success.updated', [\n                'name' => $link,\n            ]);\n\n            if ($model->entity) {\n                /** @var MultiEditingService $editingService */\n                $editingService = app()->make(MultiEditingService::class);\n                $editingService\n                    ->model($model->entity)\n                    ->user($request->user())\n                    ->finish();\n            }\n\n            session()->flash('success_raw', $success);\n\n            $options = [];\n            if (request()->has('redirect')) {\n                $redirect = explode('&', request()->get('redirect'));\n                foreach ($redirect as $option) {\n                    $vals = explode('=', $option);\n                    $options[$vals[0]] = $vals[1];\n                }\n            }\n            if ($model->entity) {\n                $route = route(\n                    'entities.show',\n                    $options + [$this->campaign, $model->entity],\n                );\n            } else {\n                $options = [$this->campaign, $model] + $options;\n                $route = route($this->view . '.show', $options + [$model]);\n            }\n            if ($request->has('submit-new')) {\n                $route = route($this->route . '.create', $this->campaign);\n            } elseif ($request->has('submit-update')) {\n                $route = route($this->route . '.edit', [\n                    $this->campaign,\n                    $model->id,\n                ]);\n            } elseif ($request->has('submit-close')) {\n                $route = route($this->route . '.index', [$this->campaign]);\n            } elseif ($request->has('submit-copy')) {\n                $route = route($this->route . '.create', [\n                    $this->campaign,\n                    'copy' => $model->id,\n                ]);\n\n                return response()->redirectTo($route);\n            }\n\n            return response()->redirectTo($route);\n        } catch (LogicException $exception) {\n            $error = str_replace(\n                ' ',\n                '_',\n                mb_strtolower(mb_rtrim($exception->getMessage(), '.')),\n            );\n\n            return redirect()\n                ->back()\n                ->withInput()\n                ->with('error', __('crud.errors.' . $error));\n        }\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function crudDestroy(Model|MiscModel $model)\n    {\n        return abort(404);\n    }\n\n    /**\n     * @return array\n     */\n    protected function prepareData(Request $request, MiscModel $model)\n    {\n        $data = $request->all();\n        foreach ($model->nullableForeignKeys as $field) {\n            if (! request()->has($field) && ! isset($data[$field])) {\n                $data[$field] = null;\n            }\n        }\n\n        return $data;\n    }\n\n    /**\n     * Set the datagrid sorter for sub views\n     */\n    protected function datagridSorter(string $datagridSorter): self\n    {\n        $this->datagridSorter = new $datagridSorter;\n        $this->datagridSorter->request(request()->all());\n\n        return $this;\n    }\n\n    /**\n     * Detect if a module is enabled\n     */\n    protected function moduleEnabled(): bool\n    {\n        return ! isset($this->module) || $this->campaign->enabled($this->module);\n    }\n\n    /**\n     * Set the controller as having a limit check\n     */\n    protected function hasLimitCheck(bool $value = true): self\n    {\n        $this->hasLimitCheck = $value;\n\n        return $this;\n    }\n\n    /**\n     * Load a list of templates the user can create new entities from\n     */\n    protected function loadTemplates(EntityType $entityType): Collection\n    {\n        // No valid user, or invalid entity type (ie relations)\n        if (auth()->guest()) {\n            return new Collection;\n        } elseif (\n            ! auth()\n                ->user()\n                ->can('create', [$entityType, $this->campaign])\n        ) {\n            return new Collection;\n        }\n\n        return Entity::select('id', 'name', 'entity_id')\n            ->templates($entityType->id)\n            ->orderBy('name')\n            ->get();\n    }\n\n    /**\n     * Determine if the layout is in the nice grid mode, or the old table mode\n     */\n    protected function mode(): string\n    {\n        if (! isset($this->module)) {\n            return 'table';\n        }\n        $key = $this->module . '_mode';\n        if ($this->request->has('m')) {\n            $mode = $this->request->get('m');\n            if (! in_array($mode, ['grid', 'table'])) {\n                return 'grid';\n            }\n            $newMode = $mode;\n        }\n        if (isset($newMode)) {\n            if (auth()->guest()) {\n                Session::put($key, $newMode);\n            } else {\n                $settings = auth()->user()->settings;\n                if (auth()->check() && Arr::get($settings, $key) !== $newMode) {\n                    if ($newMode === 'grid') {\n                        unset($settings[$key]);\n                    } else {\n                        $settings[$key] = $newMode;\n                    }\n                    auth()->user()->settings = $settings;\n                    auth()->user()->updateQuietly();\n                }\n            }\n\n            return $newMode;\n        }\n\n        if (auth()->guest()) {\n            return Session::get($key, 'grid');\n        }\n\n        // Else use the user's preferred stacking for this entity type\n        return Arr::get(auth()->user()->settings, $key, 'grid');\n    }\n\n    /**\n     * Determine if the current layout should be nested or not\n     */\n    protected function isNested(): bool\n    {\n        // Model isn't nested, not an option to start with\n        if (\n            ! isset($this->module) ||\n            ! method_exists($this->model, 'getParentKeyName')\n        ) {\n            return false;\n        }\n        $key = $this->module . '_nested';\n        if ($this->request->has('n')) {\n            return $this->saveNested($key);\n        }\n\n        if (auth()->guest()) {\n            return (bool) Session::get($key, true);\n        }\n\n        // Else use the user's preferred stacking for this entity type\n        return Arr::get(auth()->user()->settings, $key, true);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/DashboardController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Enums\\Widget;\nuse App\\Facades\\Dashboard;\nuse App\\Facades\\DataLayer;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\CampaignEvent;\nuse App\\Models\\Entity;\nuse App\\Services\\DashboardService;\n\nclass DashboardController extends Controller\n{\n    public function __construct(protected DashboardService $dashboardService) {}\n\n    public function index(Campaign $campaign)\n    {\n        // Determine the user's dashboard\n        $requestedDashboard = request()->get('dashboard');\n        if ($requestedDashboard == 'default') {\n            $requestedDashboard = -1;\n        }\n        if (auth()->check()) {\n            $this->dashboardService->user(auth()->user());\n        }\n        $dashboard = $this\n            ->dashboardService\n            ->campaign($campaign)\n            ->getDashboard((int) $requestedDashboard);\n        $dashboards = $this->dashboardService->getDashboards();\n\n        $widgets =\n            CampaignDashboardWidget::onDashboard($dashboard)\n                ->positioned()\n                ->get();\n\n        // A user with campaigns doesn't need this process.\n        $gaTrackingEvent = null;\n        $welcome = $onboarding = false;\n        if (session()->has('user_registered')) {\n            session()->remove('user_registered');\n            $gaTrackingEvent = 'pa10CJTvrssBEOaOq7oC';\n            DataLayer::newAccount();\n            $welcome = true;\n        }\n        // Onboarding\n        if (session()->has('onboarding') || request()->filled('onboarding')) {\n            $onboarding = true;\n            session()->remove('onboarding');\n            CampaignEvent::create([\n                'campaign_id' => $campaign->id,\n                'created_by' => auth()->user()->id,\n                'event' => 'onboarding_shown',\n            ]);\n        }\n\n        $hasMap = $hasCampaignHeader = false;\n        foreach ($widgets as $w) {\n            if ($w->widget === Widget::Preview && $w->entity && $w->visible() && $w->entity->isMap()) {\n                $hasMap = true;\n            } elseif ($w->widget === Widget::Campaign) {\n                $hasCampaignHeader = true;\n            }\n        }\n        if (empty($requestedDashboard)) {\n            $hasCampaignHeader = true;\n        }\n\n        return view('home', compact(\n            'campaign',\n            'widgets',\n            'dashboard',\n            'dashboards',\n            'welcome',\n            'onboarding',\n            'gaTrackingEvent',\n        ))\n            ->with('hasMap', $hasMap)\n            ->with('hasCampaignHeader', $hasCampaignHeader);\n    }\n\n    /**\n     * @param  int  $id\n     */\n    public function recent(Campaign $campaign, $id)\n    {\n        /** @var CampaignDashboardWidget $widget */\n        $widget = CampaignDashboardWidget::findOrFail($id);\n        if ($widget->widget != Widget::Recent) {\n            return response()->json([\n                'success' => true,\n            ]);\n        }\n\n        $entities = $widget->entities();\n\n        return view('dashboard.widgets._recent_list')\n            ->with('campaign', $campaign)\n            ->with('entities', $entities)\n            ->with('widget', $widget)\n            ->with('campaign', $campaign);\n    }\n\n    /**\n     * @param  int  $id\n     */\n    public function unmentioned(Campaign $campaign, $id)\n    {\n        /** @var CampaignDashboardWidget $widget */\n        $widget = CampaignDashboardWidget::findOrFail($id);\n        if ($widget->widget != Widget::Unmentioned) {\n            return response()->json([\n                'success' => true,\n            ]);\n        }\n\n        $entities = Entity::unmentioned()\n            ->inTags($widget->tags->pluck('id')->toArray())\n            ->inTypes($widget->conf('entity'))\n            ->with(['updater'])\n            ->paginate(10);\n\n        return view('dashboard.widgets._recent_list')\n            ->with('campaign', $campaign)\n            ->with('entities', $entities)\n            ->with('widget', $widget)\n            ->with('campaign', $campaign);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboards/GettingStartedController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboards;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Dashboards\\GettingStartedService;\n\nclass GettingStartedController extends Controller\n{\n    public function __construct(protected GettingStartedService $gettingStartedService) {}\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        return response()->json($this->gettingStartedService->campaign($campaign)->tasks());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboards/SetupController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboards;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboard;\nuse App\\Models\\CampaignDashboardWidget;\n\nclass SetupController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('dashboard', $campaign);\n\n        // Validate dashboard\n        $dashboard = request()->has('dashboard') ? CampaignDashboard::where('id', request()->get('dashboard'))->first() : null;\n        $dashboards = CampaignDashboard::exclude($dashboard)->orderBy('name')->get();\n\n        $widgets = CampaignDashboardWidget::onDashboard($dashboard)->with('tags')->positioned()->get();\n\n        return view('dashboard.setup')\n            ->with('campaign', $campaign)\n            ->with('dashboards', $dashboards)\n            ->with('dashboard', $dashboard)\n            ->with('widgets', $widgets);\n    }\n\n    /**\n     * Save the new dashboard widgets order\n     */\n    public function save(Campaign $campaign)\n    {\n        $this->authorize('dashboard', $campaign);\n\n        $position = 0;\n        $widgets = (array) request()->post('widgets', []);\n        foreach ($widgets as $i => $widget) {\n            $wi = CampaignDashboardWidget::findOrFail($widget);\n            $wi->update([\n                'position' => $position,\n            ]);\n            $position++;\n        }\n\n        return response()->json([\n            'success' => true,\n            'message' => __('dashboard.setup.reorder.success'),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Datagrid2/BulkControllerTrait.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Datagrid2;\n\nuse App\\Models\\MapGroup;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Request;\n\ntrait BulkControllerTrait\n{\n    /**\n     * List of valid bulk actions.\n     *\n     * @return string[]\n     */\n    public function validBulkActions(array $values = ['delete', 'edit', 'patch']): array\n    {\n        return $values;\n    }\n\n    public function bulkProcess(Request $request, string $className): int\n    {\n        $action = $request->get('action');\n        $models = $request->get('model');\n\n        $count = 0;\n        $patch = $request->except('models', 'action');\n        if ($action === 'patch') {\n            // Clean up the request. Skip nulls\n            foreach ($patch as $field => $value) {\n                if ($value !== null) {\n                    continue;\n                }\n                unset($patch[$field]);\n            }\n        }\n        foreach ($models as $id) {\n            /** @var MapGroup|Model $modelClass */\n            $modelClass = new $className;\n            $model = $modelClass->find($id);\n            if (empty($model)) {\n                continue;\n            }\n\n            if ($action === 'delete') {\n                $model->delete();\n                $count++;\n            } elseif ($action === 'patch') {\n                /** @var MapGroup $model */\n                $model->patch($patch);\n                $count++;\n            }\n        }\n\n        return $count;\n    }\n\n    public function bulkBatch(string $route, string $view, array $models, mixed $model = null)\n    {\n        return view('layouts.datagrid.bulks.update')\n            ->with('campaign', $this->campaign)\n            ->with('route', $route)\n            ->with('view', $view)\n            ->with('models', $models)\n            ->with('model', $model);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Datagrids/SubscriptionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Datagrids;\n\nuse App\\Http\\Controllers\\Controller;\n\nclass SubscriptionController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index()\n    {\n        return view('datagrids.subscription');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/DiceRolls/ResultsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\DiceRolls;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\DiceRollResult;\nuse Illuminate\\Http\\Request;\n\nclass ResultsController extends Controller\n{\n    public function index(Request $request, Campaign $campaign)\n    {\n        $models = DiceRollResult::with([\n            'diceRoll',\n            'diceRoll.entity',\n            'diceRoll.entity.image',\n            'user',\n            'diceRoll.character',\n            'diceRoll.character.entity',\n        ])\n            ->orderByDesc('updated_at')\n            ->has('diceRoll.entity')\n            ->has('diceRoll.character.entity')\n            ->paginate();\n\n        return view('dice_rolls.results')\n            ->with('campaign', $campaign)\n            ->with('models', $models);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/EditingController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\QuestElement;\nuse App\\Models\\TimelineElement;\nuse App\\Services\\MultiEditingService;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass EditingController extends Controller\n{\n    protected MultiEditingService $service;\n\n    public function __construct(MultiEditingService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $model = request()->get('model');\n        $id = request()->get('id');\n        if (empty($model)) {\n            $model = $campaign;\n        } else {\n            $modelName = app()->make('App\\Models\\\\' . $model);\n            $model = new $modelName;\n            $model = $model->findOrFail($id);\n        }\n\n        $editingUsers = $this->service\n            ->model($model)\n            ->user(auth()->user())\n            ->users();\n\n        if ($model instanceof Post) {\n            $url = route('posts.confirm-editing', [$campaign, 'post' => $model, 'entity' => $model->entity]);\n            $show = $model->entity->url();\n        } elseif ($model instanceof Campaign) {\n            $url = route('campaigns.confirm-editing', $model);\n            $show = route('overview', $campaign);\n        } elseif ($model instanceof TimelineElement) {\n            $url = route('timeline-elements.confirm-editing', [$campaign, $model]);\n            $show = $model->timeline->getLink();\n        } elseif ($model instanceof QuestElement) {\n            $url = route('quest-elements.confirm-editing', [$campaign, $model]);\n            $show = $model->quest->getLink();\n        } else {\n            $url = route('entities.confirm-editing', [$campaign, $model]);\n            $show = $model->url();\n        }\n\n        return view('confirms.editing')\n            ->with('url', $url)\n            ->with('show', $show)\n            ->with('editingUsers', $editingUsers);\n    }\n\n    private function confirmHandle(Model $model)\n    {\n        $this->service\n            ->user(auth()->user())\n            ->model($model)\n            ->confirm();\n\n        return response()->json(['success' => true]);\n    }\n\n    private function keepAliveHandle(Model $model)\n    {\n        $this->service->model($model)\n            ->user(auth()->user())\n            ->keepAlive();\n\n        return response()\n            ->json([\n                'success' => true,\n            ]);\n    }\n\n    public function confirm(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return $this->confirmHandle($entity);\n    }\n\n    public function confirmCampaign(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        return $this->confirmHandle($campaign);\n    }\n\n    public function confirmPost(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('post', [$entity, 'edit', $post]);\n\n        return $this->confirmHandle($post);\n    }\n\n    public function confirmQuestElement(Campaign $campaign, QuestElement $questElement)\n    {\n        $this->authorize('update', $questElement->quest()->first()->entity);\n\n        return $this->confirmHandle($questElement);\n    }\n\n    public function confirmTimelineElement(Campaign $campaign, TimelineElement $timelineElement)\n    {\n        $this->authorize('update', $timelineElement->timeline()->first()->entity);\n\n        return $this->confirmHandle($timelineElement);\n    }\n\n    public function keepAlive(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return $this->keepAliveHandle($entity);\n    }\n\n    public function keepAliveCampaign(Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        return $this->keepAliveHandle($campaign);\n    }\n\n    public function keepAlivePost(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('post', [$entity, 'edit', $post]);\n\n        return $this->keepAliveHandle($post);\n    }\n\n    public function keepAliveTimelineElement(Campaign $campaign, TimelineElement $timelineElement)\n    {\n        $this->authorize('update', $timelineElement->timeline()->first()->entity);\n\n        return $this->keepAliveHandle($timelineElement);\n    }\n\n    public function keepAliveQuestElement(Campaign $campaign, QuestElement $questElement)\n    {\n        $this->authorize('update', $questElement->quest()->first()->entity);\n\n        return $this->keepAliveHandle($questElement);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entities/Apis/DocumentController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entities\\Apis;\n\nuse App\\Facades\\Avatar;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\n\nclass DocumentController extends Controller\n{\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('view', $entity);\n\n        return response()->json([\n            'document' => $entity->entry,\n            'mentions' => $this->mentions($entity),\n        ]);\n    }\n\n    protected function mentions(Entity $entity): array\n    {\n        // @phpstan-ignore-next-line\n        return $entity->mentions()->with(['entity', 'entity.entityType', 'entity.aliases'])->get()->map(function ($mention) {\n            if ($mention->isEntity()) {\n                return [\n                    'id' => $mention->target_id,\n                    'name' => $mention->target->name,\n                    'type' => $mention->target->entityType->code,\n                    'image' => Avatar::entity($mention->target)->fallback()->size(32)->thumbnail(),\n                    'url' => $mention->target->url(),\n                    'aliases' => $mention->target->aliases->map(fn ($alias) => [\n                        'id' => $alias->id,\n                        'name' => $alias->name,\n                    ])->toArray(),\n                ];\n            }\n\n            return [\n                'id' => $mention->id,\n                // @phpstan-ignore-next-line\n                'label' => $mention->label,\n                // @phpstan-ignore-next-line\n                'mention' => $mention->mention,\n            ];\n        })->toArray();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entities/ChildrenController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entities;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Renderers\\Layouts\\Entity\\Children;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass ChildrenController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        $options = ['campaign' => $campaign, 'entity' => $entity, 'm' => $this->descendantsMode()];\n\n        /** @var Children $layout */\n        $layout = app()->make(Children::class);\n        $layout->entityType($entity->entityType);\n        Datagrid::layout($layout)\n            ->route('entities.children', $options);\n\n        $query = $entity\n            ->descendants()\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->with([\n                'image', 'entityType',\n                'tags',\n                'children',\n                'parent',\n            ]);\n\n        if ($this->filterToDirect()) {\n            $query->where('parent_id', $entity->id);\n        }\n\n        $this->rows = $query->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return view('entities.pages.children.index')\n            ->with([\n                'entity' => $entity,\n                'campaign' => $this->campaign,\n                'rows' => $this->rows,\n                'mode' => $this->descendantsMode(),\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entities/CreateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entities;\n\nuse App\\Facades\\FormCopy;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCustomEntity;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\AliasService;\nuse App\\Services\\Entity\\CopyService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse Illuminate\\Http\\Request;\nuse LogicException;\n\nclass CreateController extends Controller\n{\n    public function __construct(\n        protected CopyService $copyService,\n        protected AttributeService $attributeService,\n        protected AliasService $aliasService,\n        protected EntitySaveService $entitySaveService\n    ) {}\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('create', [$entityType, $campaign]);\n\n        $tabCopy = false;\n        $source = null;\n        FormCopy::request($request);\n        if ($request->filled('copy')) {\n            $source = Entity::inTypes([$entityType->id])->find($request->get('copy'));\n            if ($source) {\n                FormCopy::request($request)->source($source);\n                $tabCopy = true;\n            }\n        }\n\n        if ($entityType->isStandard()) {\n            $options = [$campaign];\n            if ($tabCopy) {\n                $options['copy'] = $source->id;\n                $options['template'] = true;\n            }\n\n            return redirect()->route($entityType->pluralCode() . '.create', $options);\n        }\n\n        return view('entities.forms.create')\n            ->with('campaign', $campaign)\n            ->with('entityType', $entityType)\n            ->with('tabCopy', $tabCopy)\n            ->with('source', $source);\n    }\n\n    public function store(StoreCustomEntity $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('create', [$entityType, $campaign]);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->all();\n        $data['campaign_id'] = $campaign->id;\n\n        try {\n            /** @var Entity $entity */\n            $entity = new Entity($data);\n            $entity->type_id = $entityType->id;\n            $entity->save();\n            $this->entitySaveService->save($entity, $data);\n\n            $this->aliasService->entity($entity)->request($request)->save();\n\n            // First copy stuff like posts, since we might replace attribute mentions next\n            $this->copyService->entity($entity)->request($request)->fromId()->copy();\n\n            if (auth()->user()->can('attributes', $entity)) {\n                $this->attributeService\n                    ->campaign($campaign)\n                    ->entity($entity)\n                    ->save($request->get('attribute', []));\n\n                // When copying an entity, the user probably wants to update all mentions of attributes to ones on the new entity.\n                if ($request->has('replace_mentions') && $request->filled('replace_mentions') && $entity->isFillable('entry')) {\n                    $this->attributeService\n                        ->replaceMentions((int) $request->post('copy_source_id'));\n                }\n            }\n\n            $link = '<a href=\"' . route(\n                'entities.show',\n                [$campaign, $entity]\n            )\n                . '\" class=\"text-link\">' . $entity->name . '</a>';\n            $success = __('general.success.created', [\n                'name' => $link,\n            ]);\n\n            session()->flash('success_raw', $success);\n\n            if ($request->has('submit-new')) {\n                $route = route('entities.create', [$campaign, $entityType]);\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-update')) {\n                $route = route('entities.edit', [$campaign, $entity]);\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-view') && $entity) {\n                $route = route('entities.show', [$campaign, $entity]);\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-copy')) {\n                $route = route('entities.create', [$campaign, $entityType, 'copy' => $entity->id]);\n\n                return response()->redirectTo($route);\n            }\n\n            $route = route('entities.show', [$campaign, $entity]);\n\n            return response()->redirectTo($route);\n        } catch (LogicException $exception) {\n            if (config('app.debug')) {\n                throw $exception;\n            }\n            $error = str_replace(' ', '_', mb_strtolower($exception->getMessage()));\n\n            return redirect()\n                ->back()\n                ->withInput()\n                ->with('error', __('crud.errors.' . $error));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entities/DeleteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entities;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\n\nclass DeleteController extends Controller\n{\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('delete', $entity);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $entity->delete();\n        // Todo: we really have to unify this one day. We have to delete the child to keep the withCount()\n        // to work until we migrate all parent data to the Entity model and out of the child model.\n        if ($entity->hasChild()) {\n            $entity->child->delete();\n        }\n\n        $routeName = $entity->entityType->hasEntity() ? 'entities' : $entity->entityType->pluralCode();\n        $params = $entity->entityType->hasEntity() ? [$campaign, $entity->entityType] : [$campaign];\n\n        return redirect()->route($routeName . '.index', $params)\n            ->with('success_raw', __('general.success.deleted-cancel', [\n                'name' => $entity->name,\n                'cancel' => '<a href=\"' . route('recovery', $campaign) . '\" class=\"text-link\">' . __('crud.cancel') . '</a>',\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entities/EditController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entities;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCustomEntity;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\AliasService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\EntityRelationsServiceFactory;\nuse App\\Services\\MultiEditingService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Str;\n\nclass EditController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(\n        protected AttributeService $attributeService,\n        protected AliasService $aliasService,\n        protected MultiEditingService $multiEditingService,\n        protected EntitySaveService $entitySaveService,\n        protected EntityRelationsServiceFactory $relationsFactory\n    ) {}\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authorize('update', $entity);\n\n        $editingUsers = null;\n\n        if ($this->campaign->hasEditingWarning()) {\n            /** @var MultiEditingService $editingService */\n            $editingService = app()->make(MultiEditingService::class);\n            $editingUsers = $editingService->model($entity)->user(auth()->user())->users();\n            // If no one is editing the entity, we are now editing it\n            if (empty($editingUsers)) {\n                $editingService->edit();\n            }\n        }\n\n        $params = [\n            'campaign' => $this->campaign,\n            'entity' => $entity,\n            'name' => $entity->entityType->pluralCode(),\n            'tabPermissions' => auth()->user()->can('permissions', $entity),\n            'tabAttributes' => auth()->user()->can('attributes', $entity) && $this->campaign->enabled('entity_attributes'),\n            'entityType' => $entity->entityType,\n            'editingUsers' => $editingUsers,\n        ];\n        if ($entity->entityType->isStandard()) {\n            $params['model'] = $entity->child;\n        }\n\n        return view('entities.forms.edit', $params);\n    }\n\n    public function save(Request $request, Campaign $campaign, Entity $entity)\n    {\n        // We need to validate the request\n        $validationClass = $entity->entityType->isStandard()\n            ? 'App\\Http\\Requests\\Store' . Str::studly($entity->entityType->code)\n            : StoreCustomEntity::class;\n\n        if (class_exists($validationClass)) {\n            $validator = app()->make($validationClass);\n            if (method_exists($validator, 'resolvedFields')) {\n                $resolved = $validator->resolvedFields();\n                if ($resolved) {\n                    $request->merge($resolved);\n                }\n            }\n            $this->validate($request, $validator->rules());\n        }\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        try {\n            // Sanitize the data\n            $sanitizerClassName = 'App\\Sanitizers\\\\' . Str::studly($entity->entityType->code) . 'Sanitizer';\n            if (class_exists($sanitizerClassName)) {\n                $sanitizer = app()->make($sanitizerClassName);\n                $request->merge($sanitizer->request($request)->sanitize());\n            }\n\n            if ($entity->hasChild()) {\n                $data = $this->prepareData($request, $entity->child);\n                $entity->child->update($data);\n\n                // Fire an event for the Entity Observer\n                $this->relationsFactory->for($entity)?->save($entity->child, $data);\n\n                // Sync parent_id from the request for all entity types\n                // $entity->parent_id = $request->has('parent_id') ? $request->get('parent_id') : null;\n                $this->entitySaveService->save($entity, $data);\n\n                // If the child was changed but nothing changed on the entity, we still want to trigger an update\n                if ($entity->child->wasChanged() && ! $entity->wasChanged()) {\n                    $entity->touch();\n                }\n            } else {\n                $preparedData = $this->fixRequestData($request, $entity);\n                $entity->update($preparedData);\n                $this->entitySaveService->save($entity, $preparedData);\n            }\n\n            $this->aliasService->entity($entity)->request($request)->save();\n\n            if (auth()->user()->can('attributes', $entity)) {\n                $this->attributeService\n                    ->campaign($campaign)\n                    ->entity($entity)\n                    ->save($request->get('attribute', []))\n                    ->touch();\n            }\n\n            $link = '<a href=\"' . route(\n                'entities.show',\n                [$campaign, $entity]\n            )\n                . '\" class=\"text-link\">' . $entity->name . '</a>';\n            $success = __('general.success.updated', [\n                'name' => $link,\n            ]);\n\n            $this->multiEditingService->model($entity)\n                ->user($request->user())\n                ->finish();\n\n            session()->flash('success_raw', $success);\n\n            if (auth()->user()->editor === 'tiptap') {\n                $count = session()->get('tiptap_survey_count', 0);\n                $count++;\n                session()->put('tiptap_survey_count', $count);\n                if ($count % 5 === 0) {\n                    session()->flash('tiptap_survey', true);\n                }\n            }\n\n            $options = [];\n            if (request()->has('redirect')) {\n                $redirect = explode('&', request()->get('redirect'));\n                foreach ($redirect as $option) {\n                    $vals = explode('=', $option);\n                    $options[$vals[0]] = $vals[1];\n                }\n            }\n\n            $route = route('entities.show', $options + [$campaign, $entity]);\n\n            if ($request->has('submit-new')) {\n                $route = route('entities.create', [$campaign, $entity->entityType]);\n            } elseif ($request->has('submit-update')) {\n                $route = route('entities.edit', [$campaign, $entity]);\n            } elseif ($request->has('submit-close')) {\n                $route = route('entities.index', [$campaign, $entity->entityType]);\n            } elseif ($request->has('submit-copy')) {\n                $route = route('entities.create', [$campaign, $entity->entityType, 'copy' => $entity]);\n\n                return response()->redirectTo($route);\n            }\n\n            return response()->redirectTo($route);\n        } catch (\\LogicException $exception) {\n            $error = str_replace(' ', '_', mb_strtolower(mb_rtrim($exception->getMessage(), '.')));\n\n            return redirect()->back()->withInput()->with('error', __('crud.errors.' . $error));\n        }\n    }\n\n    protected function prepareData(Request $request, MiscModel $model): array\n    {\n        $data = $request->all();\n        foreach ($model->nullableForeignKeys as $field) {\n            if (! $request->has($field) && ! isset($data[$field])) {\n                $data[$field] = null;\n            }\n        }\n\n        return $data;\n    }\n\n    protected function fixRequestData(Request $request, Entity $entity): array\n    {\n        $data = $request->all();\n        foreach (['parent_id'] as $field) {\n            if (! $request->has($field) && ! isset($data[$field])) {\n                $data[$field] = null;\n            }\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entities/IndexController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entities;\n\nuse App\\Facades\\Domain;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\CachedResponse;\nuse App\\Http\\Resources\\Entities\\ExploreResource;\nuse App\\Http\\Resources\\Entities\\TemplateResource;\nuse App\\Http\\Resources\\EntityTypeResource;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityListingPreference;\nuse App\\Models\\EntityType;\nuse App\\Services\\Entity\\ColumnDefinitionService;\nuse App\\Services\\FilterService;\nuse App\\Services\\PaginationService;\nuse App\\Traits\\Controllers\\HasNested;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Session;\nuse Illuminate\\Support\\Str;\n\nclass IndexController extends Controller\n{\n    use HasNested;\n\n    protected EntityType $entityType;\n\n    protected Campaign $campaign;\n\n    protected Request $request;\n\n    protected ?EntityListingPreference $preference = null;\n\n    public function __construct(\n        protected FilterService $filterService,\n        protected ColumnDefinitionService $columnDefinitionService,\n        protected PaginationService $paginationService,\n    ) {\n        $this->middleware([CachedResponse::class]);\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        if (! $entityType->isEnabled()) {\n            return redirect()->route('dashboard', $campaign)->with(\n                'error_raw',\n                __('campaigns/modules.errors.disabled', [\n                    'name' => $entityType->plural(),\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#' . $entityType->code]) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        } elseif ($entityType->isStandard() && ! $campaign->enabled($entityType->pluralCode())) {\n            return redirect()->route('dashboard', $campaign)->with(\n                'error_raw',\n                __('campaigns/modules.errors.disabled', [\n                    'name' => $entityType->plural(),\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#' . $entityType->code]) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        } elseif ($entityType->isBookmark()) {\n            return redirect()->route('dashboard', $campaign);\n        }\n\n        $this->entityType = $entityType;\n        $this->campaign = $campaign;\n        $this->request = $request;\n\n        $this->filterService->request($request)->entityType($entityType)->campaign($campaign)->build(\n            $this->columnDefinitionService->sortableFields($entityType, $campaign)\n        );\n\n        $nested = $this->isNested();\n        $mode = $this->layoutMode();\n        $title = $entityType->plural();\n\n        $parent = null;\n        if ($request->has('parent_id')) {\n            $parent = Entity::select([\n                'entities.id', 'entities.name', 'entities.type', 'entities.is_private',\n                'entities.type_id', 'entities.parent_id', 'entities.entity_id',\n                'entities.image_uuid', 'entities.focus_x', 'entities.focus_y',\n            ])\n                ->inTypes([$entityType->id])->where('id', $request->get('parent_id'))->first();\n        }\n\n        $apiParams = [$campaign, $entityType];\n        if ($parent) {\n            $apiParams['parent_id'] = $parent;\n        }\n        if ($request->get('_from') === 'bookmark') {\n            $apiParams['_from'] = 'bookmark';\n            $apiParams['bookmark'] = $request->get('bookmark');\n        }\n        if ($request->has('bookmark')) {\n            $bookmark = Bookmark::where('id', $request->get('bookmark'))->first();\n            if ($bookmark) {\n                $title = $bookmark->name;\n            }\n        }\n\n        return view('entities.index.index')\n            ->with('campaign', $campaign)\n            ->with('entityType', $entityType)\n            ->with('mode', $mode)\n            ->with('parent', $parent)\n            ->with('filterService', $this->filterService)\n            ->with('nestable', $nested)\n            ->with('templates', new Collection)\n            ->with('apiParams', $apiParams)\n            ->with('title', $title);\n    }\n\n    protected function loadTemplates(Campaign $campaign, EntityType $entityType): Collection\n    {\n        // No valid user, or invalid entity type (ie relations)\n        if (auth()->guest()) {\n            return new Collection;\n        } elseif (! auth()->user()->can('create', [$entityType, $campaign])) {\n            return new Collection;\n        }\n\n        return Entity::select('id', 'name', 'entity_id')\n            ->with('entityType')\n            ->templates($entityType->id)\n            ->orderBy('name')\n            ->get();\n    }\n\n    public function api(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->entityType = $entityType;\n        $this->campaign = $campaign;\n        $this->request = $request;\n\n        $filterService = $this->filterService->request($request)->entityType($entityType)->campaign($campaign);\n        if ($request->boolean('children')) {\n            $filterService->ignoring(['parent_id']);\n        }\n        $filterService->build($this->columnDefinitionService->sortableFields($entityType, $campaign));\n\n        // Column definitions\n        $columns = $this->columnDefinitionService->columns($entityType, $campaign);\n        $relations = $this->columnDefinitionService->relationMap($entityType, $campaign);\n        $childCountRelations = $this->columnDefinitionService->childCountRelations($entityType, $campaign);\n        $entityCountRelations = $this->columnDefinitionService->entityCountRelations($entityType, $campaign);\n\n        // User preferences (query once, reuse in isNested/layoutMode)\n        $this->preference = null;\n        if (auth()->check()) {\n            $this->preference = EntityListingPreference::query()->where([\n                'user_id' => auth()->id(),\n                'campaign_id' => $campaign->id,\n                'type_id' => $entityType->id,\n            ])->first();\n        }\n        $preference = $this->preference;\n        $columnPreferences = $preference->visible_columns\n            ?? $this->columnDefinitionService->defaultVisibleColumns($entityType, $campaign);\n\n        // Tell the resource which columns to serialize\n        ExploreResource::withColumns(array_map(fn ($c) => $c['key'], $columns));\n\n        $nested = $this->isNested();\n        $layout = $this->layoutMode();\n        $perPage = $this->perPageValue();\n\n        $with = $relations;\n        // Eager load child model with withCount for count columns (e.g. organisation.members)\n        if ($entityType->isStandard()) {\n            $childRelation = Str::camel($entityType->code);\n            $with[$childRelation] = function ($query) use ($childCountRelations) {\n                if (! empty($childCountRelations)) {\n                    $query->withCount($childCountRelations);\n                }\n            };\n        }\n        // All entity types: nesting uses entities.parent_id\n        $with['children'] = fn ($q) => $q->whereNull('archived_at')->with('image');\n\n        $base = Entity::inTypes($entityType->id)\n            ->select([\n                'entities.id', 'entities.name', 'entities.type', 'entities.is_private', 'entities.entity_id',\n                'entities.type_id', 'entities.parent_id', 'entities.status_id',\n                'entities.image_uuid', 'entities.focus_x', 'entities.focus_y', 'entities.image_path',\n            ])\n            ->with($with)\n            ->withCount(array_merge(\n                ['children' => fn ($q) => $q->whereNull('archived_at')],\n                $entityCountRelations,\n            ))\n            ->search($this->filterService->search())\n            ->order($this->filterService->order(), $entityType)\n            ->when($entityType->isStandard(), fn ($q) => $q->whereHas(Str::camel($entityType->code)))\n            ->distinct();\n\n        $parent = null;\n        if ($request->has('parent_id')) {\n            $parent = Entity::select([\n                'entities.id', 'entities.name', 'entities.type', 'entities.is_private',\n                'entities.type_id', 'entities.parent_id', 'entities.entity_id',\n                'entities.image_uuid', 'entities.focus_x', 'entities.focus_y',\n            ])\n                ->inTypes([$entityType->id])->where('id', $request->get('parent_id'))->first();\n            if ($parent) {\n                $base->where('entities.parent_id', $request->get('parent_id'));\n            }\n        }\n        if (empty($parent) && $nested && $this->filterService->activeFiltersCount() === 0) {\n            $base->whereNull('entities.parent_id');\n        }\n\n        $loadError = false;\n        $models = null;\n        $unfilteredCount = 0;\n\n        try {\n            if ($this->filterService->hasFilters()) {\n                $unfilteredCount = $base->count();\n                $base = $base->filter($this->filterService->filters(), $entityType);\n            } else {\n                $base = $base->whereNull('entities.archived_at');\n            }\n            $models = $base->orderBy('entities.name')->paginate($perPage);\n\n            // All children share the same entity type — set it without an extra DB query\n            $models->each(function (Entity $entity) use ($entityType): void {\n                $entity->children->each(fn (Entity $child) => $child->setRelation('entityType', $entityType));\n            });\n        } catch (\\Throwable $e) {\n            report($e);\n            $loadError = true;\n        }\n\n        // Children requests only need the entity list — skip the heavy metadata\n        if ($request->boolean('children')) {\n            return response()->json([\n                'error' => $loadError,\n                'parent' => $parent ? new ExploreResource($parent) : null,\n                'entities' => $models ? ExploreResource::collection($models)->response()->getData(true) : null,\n            ]);\n        }\n\n        $i18n = [\n            'fields' => [\n                'name' => __('crud.fields.name'),\n                'type' => __('crud.fields.type'),\n                'is_private' => __('crud.fields.is_private'),\n            ],\n            'is_private' => __('crud.is_private'),\n            'select' => __('crud.select'),\n            'selected' => __('datagrids.bulks.selected'),\n            'selectAll' => __('general.select_all'),\n            'done' => __('general.done'),\n            'filters' => __('datagrids.actions.filters'),\n            'bookmark' => __('filters.actions.bookmark'),\n            'noResults' => __('search.no_results'),\n            'templates' => __('entries/archetypes.helpers.how'),\n            'actions' => __('crud.actions.actions'),\n            'display' => __('datagrids.display.title'),\n            'perPage' => __('datagrids.display.per_page'),\n            'sortBy' => __('datagrids.display.sort_by'),\n            'clearFilters' => __('datagrids.filters.clear'),\n            'flatten' => __('datagrids.modes.flatten'),\n            'nest' => __('datagrids.modes.nested'),\n            'layout_grid' => __('datagrids.modes.grid'),\n            'layout_table' => __('datagrids.modes.table'),\n            'bulkEdit' => __('crud.bulk.actions.edit'),\n            'bulkRemove' => __('crud.remove'),\n            'bulkPermissions' => __('crud.bulk.actions.permissions'),\n            'bulkTemplate' => __('crud.bulk.actions.kits'),\n            'bulkTransform' => __('crud.actions.transform'),\n            'bulkCopy' => __('crud.actions.copy_to_campaign'),\n            'bulkPrint' => __('crud.actions.print'),\n            'bulkDelete' => __('crud.remove'),\n            'columns' => __('datagrids.columns.title'),\n            'resetDefaults' => __('datagrids.columns.reset'),\n            'relations' => __('entries/tabs.relations'),\n            'inventory' => __('crud.tabs.inventory'),\n            'edit' => __('crud.edit'),\n            'loadMore' => __('entities/story.actions.load_more'),\n        ];\n\n        $bookmarkable = $this->filterService->activeFiltersCount() > 0 && auth()->check() && auth()->user()->can('create', Bookmark::class) && ! $request->has('bookmark');\n\n        return response()->json([\n            'error' => $loadError,\n            'parent' => $parent ? new ExploreResource($parent) : null,\n            'entities' => $models ? ExploreResource::collection($models)->response()->getData(true) : null,\n            'nested' => $nested,\n            'i18n' => $i18n,\n            'bookmarkable' => $bookmarkable,\n            'entityType' => new EntityTypeResource($entityType),\n            'templates' => TemplateResource::collection($this->loadTemplates($campaign, $entityType)),\n            'permissions' => auth()->check() ? [\n                'create' => auth()->user()->can('create', [$entityType, $campaign]),\n                'delete' => auth()->user()->can('deleteEntities', [$entityType, $campaign]),\n                'template' => auth()->user()->can('useTemplates', $campaign),\n                'admin' => auth()->user()->isAdmin($campaign),\n            ] : null,\n            'features' => [\n                'inventories' => $campaign->enabled('inventories'),\n            ],\n            'urls' => [\n                'create' => $entityType->createRoute($campaign),\n                'batch' => route('bulk.batch', [$campaign, $entityType]),\n                'template' => route('bulk.templates', [$campaign, $entityType]),\n                'transform' => route('bulk.transform', [$campaign, $entityType]),\n                'permissions' => route('bulk.permissions', [$campaign, $entityType]),\n                'copy' => route('bulk.copy-to-campaign', [$campaign, $entityType]),\n                'delete' => route('bulk.delete', [$campaign, $entityType]),\n                'print' => route('bulk.print', [$campaign, $entityType]),\n                'bookmark' => route('filters.modal_form', [$campaign, $entityType]),\n                'preferences' => route('entities.listing-preferences.update', [$campaign, $entityType]),\n                'preferencesReset' => route('entities.listing-preferences.destroy', [$campaign, $entityType]),\n            ],\n            'csrf' => csrf_token(),\n            'filters' => [\n                'count' => $this->filterService->activeFiltersCount(),\n                'unfilteredCount' => $unfilteredCount,\n                'urls' => [\n                    'form' => route('filters.form', array_merge(\n                        [$campaign, $entityType, 'm' => $layout],\n                        $request->get('_from') === 'bookmark' ? ['_from' => 'bookmark', 'bookmark' => $request->get('bookmark')] : [],\n                    )),\n                    'clear' => route('entities.index', array_merge(\n                        [$campaign, $entityType, 'reset-filter' => true],\n                        $request->get('_from') === 'bookmark' ? ['_from' => 'bookmark', 'bookmark' => $request->get('bookmark')] : [],\n                    )),\n                ],\n            ],\n            'order' => $this->filterService->order(),\n            'columns' => $columns,\n            'columnPreferences' => $columnPreferences,\n            'ads' => [\n                'enabled' => false, // $this->showAds($campaign),\n                'frequency' => 7,\n            ],\n            'preferences' => $preference ? [\n                'layout' => $preference->layout,\n                'nested' => $preference->nested,\n                'per_page' => $perPage,\n            ] : null,\n            'subscription' => [\n                'isSubscriber' => auth()->check() && auth()->user()->isSubscriber(),\n                'url' => route('datagrids.subscription'),\n            ],\n            'perPageOptions' => $this->paginationService->options(),\n            'subscriberPerPageOptions' => $this->paginationService->subscriberOnlyOptions(),\n            'emptyState' => [\n                'title' => __('lists.empty.title', ['plural' => strtolower($entityType->plural())]),\n                'helper' => __($entityType->pluralCode() . '.lists.empty'),\n                'docsUrl' => 'https://docs.kanka.io/en/latest/entries/' . Str::replace('_', '-', $entityType->isAttributeTemplate() ? 'property-kits' : $entityType->pluralCode()) . '.html',\n                'publicUrl' => Domain::toFront('campaigns'),\n                'learn' => __('lists.actions.learn'),\n                'public' => __('lists.actions.public'),\n            ],\n        ]);\n    }\n\n    protected function showAds(Campaign $campaign): bool\n    {\n        if (! config('ads.nitro.enabled')) {\n            return false;\n        }\n        if (request()->has('_showads')) {\n            return true;\n        }\n        if (auth()->check()) {\n            $user = auth()->user();\n            if ($user->isSubscriber()) {\n                return false;\n            }\n            if ($user->created_at->diffInHours(now()) < 24) {\n                return false;\n            }\n        }\n\n        return ! $campaign->boosted();\n    }\n\n    /**\n     * Determine if the current layout should be nested or not\n     */\n    protected function isNested(): bool\n    {\n        if (! $this->entityType->isNested()) {\n            return false;\n        }\n\n        $key = $this->entityType->code . '_nested';\n\n        // URL override\n        if ($this->request->has('n')) {\n            return $this->saveNested($key);\n        }\n\n        // Check preferences table\n        if ($this->preference && $this->preference->nested !== null) {\n            return $this->preference->nested;\n        }\n\n        // Fallback to session for guests\n        if (auth()->guest()) {\n            return (bool) Session::get($key, true);\n        }\n\n        return true;\n    }\n\n    /**\n     * Determine if the current layout should be grid or table\n     */\n    protected function layoutMode(): string\n    {\n        $key = $this->entityType->code . '_layout';\n\n        if ($this->request->has('m') && in_array($this->request->get('m'), ['grid', 'table'])) {\n            $new = $this->request->get('m', 'grid');\n\n            if (auth()->guest()) {\n                Session::put($key, $new);\n            } else {\n                $settings = auth()->user()->settings;\n                if (auth()->check() && Arr::get($settings, $key) != $new) {\n                    $settings = auth()->user()->settings;\n                    if ($new === 'grid') {\n                        unset($settings[$key]);\n                    } else {\n                        $settings[$key] = 'table';\n                    }\n                    auth()->user()->settings = $settings;\n                    auth()->user()->updateQuietly();\n                }\n            }\n\n            return $new;\n        }\n\n        // Check preferences table\n        if ($this->preference && $this->preference->layout !== null) {\n            return $this->preference->layout;\n        }\n\n        if (auth()->guest()) {\n            return Session::get($key, 'grid');\n        }\n\n        return Arr::get(auth()->user()->settings, $key, 'grid');\n    }\n\n    protected function perPageValue(): int\n    {\n        $allowed = $this->paginationService->options();\n        $subscriberOnly = $this->paginationService->subscriberOnlyOptions();\n        $isSubscriber = auth()->user()?->isSubscriber() ?? false;\n        $default = 25;\n\n        $cap = function (int $value) use ($subscriberOnly, $isSubscriber, $default): int {\n            if (in_array($value, $subscriberOnly) && ! $isSubscriber) {\n                return $default;\n            }\n\n            return $value;\n        };\n\n        // URL override (e.g. from pagination links)\n        if ($this->request->has('pp')) {\n            $pp = (int) $this->request->get('pp');\n            if (in_array($pp, $allowed)) {\n                return $cap($pp);\n            }\n        }\n\n        // Preference\n        if ($this->preference && in_array($this->preference->per_page, $allowed)) {\n            return $cap($this->preference->per_page);\n        }\n\n        return $default;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entities/ListingPreferenceController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entities;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Entities\\UpdateListingPreferenceRequest;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityListingPreference;\nuse App\\Models\\EntityType;\nuse Illuminate\\Http\\JsonResponse;\n\nclass ListingPreferenceController extends Controller\n{\n    public function update(\n        UpdateListingPreferenceRequest $request,\n        Campaign $campaign,\n        EntityType $entityType\n    ): JsonResponse {\n        EntityListingPreference::updateOrCreate(\n            [\n                'user_id' => auth()->id(),\n                'campaign_id' => $campaign->id,\n                'type_id' => $entityType->id,\n            ],\n            array_filter([\n                'visible_columns' => $request->input('columns'),\n                'layout' => $request->has('layout') ? $request->input('layout') : null,\n                'nested' => $request->has('nested') ? $request->boolean('nested') : null,\n                'per_page' => $request->has('per_page') ? $request->integer('per_page') : null,\n            ], fn ($value) => $value !== null)\n        );\n\n        return response()->json(['success' => true]);\n    }\n\n    public function destroy(\n        Campaign $campaign,\n        EntityType $entityType\n    ): JsonResponse {\n        EntityListingPreference::query()->where([\n            'user_id' => auth()->id(),\n            'campaign_id' => $campaign->id,\n            'type_id' => $entityType->id,\n        ])->delete();\n\n        return response()->json(['success' => true]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Abilities/ApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Abilities;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Abilities\\AbilityService;\n\nclass ApiController extends Controller\n{\n    protected AbilityService $service;\n\n    public function __construct(AbilityService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        if (auth()->check()) {\n            $this->service->user(auth()->user());\n        }\n\n        return response()->json([\n            'data' => $this->service\n                ->campaign($campaign)\n                ->entity($entity)\n                ->get(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Abilities/ChargeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Abilities;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse App\\Services\\Abilities\\ChargeService;\nuse Illuminate\\Http\\Request;\n\nclass ChargeController extends Controller\n{\n    protected ChargeService $service;\n\n    public function __construct(ChargeService $chargeService)\n    {\n        $this->service = $chargeService;\n    }\n\n    public function use(Request $request, Campaign $campaign, Entity $entity, EntityAbility $entityAbility)\n    {\n        $this->authorize('update', $entity);\n\n        return response()->json([\n            'success' => $this->service\n                ->entity($entity)\n                ->ability($entityAbility)\n                ->use((int) $request->post('used')),\n        ]);\n    }\n\n    public function reset(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        $this->service\n            ->entity($entity)\n            ->reset();\n\n        return redirect()->route('entities.entity_abilities.index', [$campaign, $entity])\n            ->withSuccess(__('entities/abilities.recharge.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Abilities/ImportController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Abilities;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Character;\nuse App\\Models\\Entity;\nuse App\\Services\\Abilities\\ImportService;\nuse Exception;\n\nclass ImportController extends Controller\n{\n    protected ImportService $service;\n\n    public function __construct(ImportService $chargeService)\n    {\n        $this->service = $chargeService;\n    }\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        if (! $entity->isCharacter()) {\n            return redirect()->route('entities.entity_abilities.index', [$campaign, $entity])\n                ->with('error', __('entities/abilities.import.errors.not_character'));\n        }\n\n        $races = [];\n\n        /** @var Character $character */\n        $character = $entity->child;\n        $characterRaces = $character\n            ->characterRaces()\n            ->with('race', 'race.entity', 'race.entity.abilities')\n            ->get();\n        foreach ($characterRaces as $race) {\n            // Exclude races with no abilities from the list.\n            if ($race->race->entity->abilities->count() > 0) {\n                $races[$race->race->name] = $race->race->entity->abilities->count();\n            }\n        }\n\n        return view('entities.pages.abilities.import', compact(\n            'campaign',\n            'entity',\n            'races'\n        ));\n    }\n\n    public function import(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        try {\n            $count = $this->service\n                ->entity($entity)\n                ->import();\n\n            return redirect()->route('entities.entity_abilities.index', [$campaign, $entity])\n                ->with('success', trans_choice('entities/abilities.import.success', $count, ['count' => $count]));\n        } catch (Exception $e) {\n            return redirect()->route('entities.entity_abilities.index', [$campaign, $entity])\n                ->with('error', __('entities/abilities.import.errors.' . $e->getMessage()));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Abilities/ReorderController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Abilities;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ReorderAbility;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Abilities\\ReorderService;\nuse Illuminate\\Database\\Query\\JoinClause;\n\nclass ReorderController extends Controller\n{\n    public function __construct(protected ReorderService $reorderService) {}\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        $abilities = $entity->abilities()\n            ->select('entity_abilities.*')\n            ->with(['ability',\n                // entity\n                'ability.entity', 'ability.entity.image', 'ability.entity.attributes',\n                // parent\n                'ability.entity.parent', 'ability.entity.parent',\n            ])\n            ->join('abilities as a', 'a.id', 'entity_abilities.ability_id')\n            ->leftJoin('entities as ae', function (JoinClause $join) {\n                $join\n                    ->on('ae.entity_id', '=', 'a.id')\n                    ->where('ae.type_id', '=', config('entities.ids.ability'));\n            })\n            ->defaultOrder()\n            ->get();\n\n        $parents = [];\n        foreach ($abilities as $ability) {\n            // Missing permission to view the ability\n            if (empty($ability->ability)) {\n                continue;\n            }\n            if (array_key_exists($ability->ability->entity->parent_id, $parents)) {\n                $parents[$ability->ability->entity->parent_id][] = $ability;\n            } else {\n                $parents[$ability->ability->entity->parent_id] = [$ability];\n            }\n        }\n\n        return view('entities.pages.abilities.reorder.index', compact(\n            'campaign',\n            'entity',\n            'parents'\n        ));\n    }\n\n    public function save(Campaign $campaign, Entity $entity, ReorderAbility $request)\n    {\n        $this->authorize('update', $entity);\n\n        $this->reorderService\n            ->entity($entity)\n            ->reorder($request);\n\n        return redirect()\n            ->route('entities.entity_abilities.index', [$campaign, $entity])\n            ->withSuccess(__('entities/abilities.reorder.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/AbilityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreEntityAbility;\nuse App\\Http\\Requests\\UpdateEntityAbility;\nuse App\\Models\\Ability;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass AbilityController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        if (! $campaign->enabled('abilities')) {\n            return redirect()->route('entities.show', [$campaign, $entity])->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#abilities']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n\n        $translations = [\n            'all' => __('crud.visibilities.all'),\n            'members' => __('crud.visibilities.members'),\n            'admin-self' => __('crud.visibilities.admin-self'),\n            'admin' => __('crud.visibilities.admin'),\n            'self' => __('crud.visibilities.self'),\n            'update' => __('crud.update'),\n            'remove' => __('crud.remove'),\n        ];\n        $translations = json_encode($translations);\n\n        return view('entities.pages.abilities.index', compact(\n            'campaign',\n            'entity',\n            'translations'\n        ));\n    }\n\n    public function create(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.abilities.create', compact(\n            'campaign',\n            'entity'\n        ));\n    }\n\n    public function store(StoreEntityAbility $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only(['abilities', 'ability_id', 'visibility_id']);\n        $data['entity_id'] = $entity->id;\n\n        $success = '';\n        if (is_array($data['abilities'])) {\n            $abilities = [];\n            foreach ($data['abilities'] as $abilityId) {\n                /** @var ?Ability $ability */\n                $ability = Ability::find($abilityId);\n                if ($ability) {\n                    $entityAbility = EntityAbility::create([\n                        'entity_id' => $entity->id,\n                        'ability_id' => $abilityId,\n                        'visibility_id' => $data['visibility_id'],\n                    ]);\n                    $abilities[] = $ability->name;\n                }\n            }\n            $success = __('entities/abilities.create.success_multiple', [\n                'abilities' => implode(', ', $abilities),\n                'entity' => $entity->name,\n            ]);\n        } elseif (! empty($data['ability_id'])) {\n            // Allow adding a single ability through the API\n            $entityAbility = new EntityAbility;\n            unset($data['abilities']);\n            $entityAbility = $entityAbility->create($data);\n\n            $success = trans('entities/abilities.create.success', [\n                'ability' => $entityAbility->ability->name,\n                'entity' => $entity->name,\n            ]);\n        }\n\n        return redirect()\n            ->route('entities.entity_abilities.index', [$campaign, $entity])\n            ->with('success', $success);\n    }\n\n    public function show(Campaign $campaign, Entity $entity, EntityAbility $entityAbility)\n    {\n        return redirect()\n            ->route('entities.entity_abilities.index', [$campaign, $entity->id]);\n    }\n\n    public function edit(Campaign $campaign, Entity $entity, EntityAbility $entityAbility)\n    {\n        $this->authorize('update', $entity);\n        $ability = $entityAbility;\n        if (empty($ability->ability)) {\n            abort(403);\n        }\n\n        return view('entities.pages.abilities.update', compact(\n            'campaign',\n            'entity',\n            'ability'\n        ));\n    }\n\n    public function update(UpdateEntityAbility $request, Campaign $campaign, Entity $entity, EntityAbility $entityAbility)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only(['ability_id', 'visibility_id', 'note']);\n\n        $entityAbility->update($data);\n\n        if (request()->ajax()) {\n            return response()->json([\n                'success' => true,\n            ]);\n        }\n\n        return redirect()\n            ->route('entities.entity_abilities.index', [$campaign, $entity->id])\n            ->with('success', __('entities/abilities.update.success', ['ability' => $entityAbility->ability->name]));\n    }\n\n    public function destroy(Campaign $campaign, Entity $entity, EntityAbility $entityAbility)\n    {\n        $this->authorize('update', $entity);\n\n        if (! $entityAbility->delete()) {\n            abort(500);\n        }\n\n        if (request()->ajax()) {\n            return response()->json([\n                'success' => true,\n            ]);\n        }\n\n        $from = request()->get('from');\n        if ($from == 'ability') {\n            return redirect()->route('abilities.entities', [$campaign, $entityAbility->ability]);\n        }\n\n        return redirect()\n            ->route('entities.entity_abilities.index', [$campaign, $entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/ArchiveController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\ArchiveService;\n\nclass ArchiveController extends Controller\n{\n    protected ArchiveService $service;\n\n    public function __construct(ArchiveService $archiveService)\n    {\n        $this->middleware('auth');\n        $this->service = $archiveService;\n    }\n\n    public function update(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        if (request()->ajax()) {\n            return response()->json();\n        }\n\n        $this->service->entity($entity)->toggle();\n\n        return redirect()->back()\n            ->with(\n                'success',\n                __('entities/actions.' . ($entity->archived_at ? 'archive' : 'unarchive') . '.success', ['name' => $entity->name])\n            );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/AssetController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Exceptions\\TranslatableException;\nuse App\\Facades\\Limit;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreEntityAsset;\nuse App\\Http\\Requests\\StoreEntityAssets;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAsset;\nuse App\\Services\\EntityFileService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Exception;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Support\\Facades\\Cookie;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\View;\n\nclass AssetController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        if (! $campaign->enabled('media')) {\n            return redirect()->route('entities.show', [$campaign, $entity])->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#assets']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n\n        $assets = $entity->assets()\n            ->withoutAliases()\n            ->with('image')\n            ->get();\n\n        return view('entities.pages.assets.index', compact(\n            'campaign',\n            'entity',\n            'assets'\n        ));\n    }\n\n    public function show(Campaign $campaign, Entity $entity, EntityAsset $entityAsset)\n    {\n        return redirect()->route('entities.entity_assets.index', [$campaign, $entity]);\n    }\n\n    public function create(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        $typeID = (int) request()->get('type');\n\n        if ($typeID === EntityAssetType::file->value) {\n            return $this->createFile($campaign, $entity);\n        } elseif ($typeID === EntityAssetType::link->value) {\n            return $this->createLink($campaign, $entity);\n        }\n        abort(404);\n    }\n\n    public function store(StoreEntityAssets $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = [];\n        $type = '';\n        $typeId = null;\n        if (request()->get('type_id') == EntityAssetType::file->value) {\n            return $this->storeFile($request, $campaign, $entity);\n        } elseif (request()->get('type_id') == EntityAssetType::link->value) {\n            $data = $request->only(['name', 'position', 'visibility_id', 'metadata']);\n            $type = 'links';\n            $typeId = EntityAssetType::link;\n        }\n        $data['entity_id'] = $entity->id;\n        $data['type_id'] = $typeId;\n\n        $asset = EntityAsset::create($data);\n\n        return redirect()\n            ->route('entities.entity_assets.index', [$campaign, $entity])\n            ->with('success', __(\n                'entities/' . $type . '.create.success',\n                ['name' => $asset->name, 'entity' => $entity->name]\n            ));\n    }\n\n    protected function storeFile(StoreEntityAssets $request, Campaign $campaign, Entity $entity)\n    {\n        /** @var EntityFileService $service */\n        $service = app()->make(EntityFileService::class);\n\n        try {\n            $files = $service\n                ->entity($entity)\n                ->campaign($campaign)\n                ->upload($request)\n                ->files();\n\n            return redirect()\n                ->route('entities.entity_assets.index', [$campaign, $entity])\n                ->with('success', trans_choice('entities/files.create.success_plural', count($files), ['count' => count($files), 'name' => $files['0']->name]));\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('entities.entity_assets.index', [$campaign, $entity])\n                ->with('error', $e->getTranslatedMessage());\n        } catch (Exception $e) {\n            return redirect()\n                ->route('entities.entity_assets.index', [$campaign, $entity])\n                ->with('error', $e->getMessage());\n        }\n    }\n\n    public function edit(Campaign $campaign, Entity $entity, EntityAsset $entityAsset)\n    {\n        $this->authorize('update', $entity);\n\n        $file = 'files';\n        if ($entityAsset->isLink()) {\n            $file = 'links';\n        }\n\n        return view('entities.pages.' . $file . '.update')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('entityAsset', $entityAsset);\n    }\n\n    public function update(StoreEntityAsset $request, Campaign $campaign, Entity $entity, EntityAsset $entityAsset)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $type = 'files';\n        if ($entityAsset->isLink()) {\n            $data = $request->only(['name', 'metadata.url', 'metadata.icon', 'visibility_id']);\n            $entityAsset->update($data);\n            $type = 'links';\n        } elseif ($entityAsset->isFile()) {\n            $data = $request->only(['name', 'visibility_id', 'is_pinned']);\n            $entityAsset->update($data);\n        }\n\n        if (request()->ajax()) {\n            return response()->json([\n                'success' => true,\n            ]);\n        }\n\n        return redirect()\n            ->route('entities.entity_assets.index', [$campaign, $entity])\n            ->with('success', __('entities/' . $type . '.update.success', ['name' => $entityAsset->name, 'entity' => $entity->name]));\n    }\n\n    public function destroy(Campaign $campaign, Entity $entity, EntityAsset $entityAsset)\n    {\n        $this->authorize('update', $entity);\n\n        if (! $entityAsset->delete()) {\n            abort(500);\n        }\n        $type = 'files';\n        if ($entityAsset->isLink()) {\n            $type = 'links';\n        }\n\n        if (request()->ajax()) {\n            return response()->json([\n                'success' => true,\n            ]);\n        }\n\n        return redirect()\n            ->route('entities.entity_assets.index', [$campaign, $entity])\n            ->with('success', __('entities/' . $type . '.destroy.success', ['name' => $entityAsset->name, 'entity' => $entity->name]));\n    }\n\n    /**\n     * Create a new file\n     *\n     * @return Application|Factory|\\Illuminate\\Contracts\\View\\View\n     */\n    protected function createFile(Campaign $campaign, Entity $entity)\n    {\n        if (! auth()->user()->can('addFile', [$entity, $campaign])) {\n            return view('entities.pages.files.max')\n                ->with('campaign', $campaign)\n                ->with('max', Limit::campaign($campaign)->entityFiles());\n        }\n\n        return view('entities.pages.files.create')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity);\n    }\n\n    /**\n     * Create a new link\n     *\n     * @return Application|Factory|\\Illuminate\\Contracts\\View\\View\n     */\n    protected function createLink(Campaign $campaign, Entity $entity)\n    {\n        if (! $campaign->boosted()) {\n            return view('components.premium-dialog', [\n                'campaign' => $campaign,\n                'pitch' => 'entities/links.call-to-action',\n            ]);\n        }\n\n        return view('entities.pages.links.create', compact(\n            'campaign',\n            'entity'\n        ));\n    }\n\n    /**\n     * @return Application|Factory|RedirectResponse|View\n     *\n     * @throws AuthorizationException\n     */\n    public function go(Campaign $campaign, Entity $entity, EntityAsset $entityAsset)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        if ($entityAsset->entity_id !== $entity->id || ! $entityAsset->isLink()) {\n            abort(404);\n        }\n\n        // If the link goes to the same domain, just go.\n        $url = $entityAsset->metadata['url'];\n        if (Str::startsWith($url, config('app.url')) && ! Str::contains($url, 'entity_links/')) {\n            return redirect()->to($url);\n        }\n\n        // If the domain is trusted for the user, we don't need the confirmation, just go\n        $trusted = Cookie::get('kanka_trusted_domains');\n        if ($trusted) {\n            $domains = explode('|', $trusted);\n            if (in_array($entityAsset->urlDomain(), $domains)) {\n                return redirect()->to($url);\n            }\n        }\n\n        return view('entities.pages.links.go', compact(\n            'campaign',\n            'entity',\n            'entityAsset'\n        ));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/AttributeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\SaveAttributes;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Attributes\\TemplateService;\nuse App\\Services\\AttributeService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\n/**\n * Attribute Controller\n */\nclass AttributeController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(protected AttributeService $service, protected TemplateService $templateService) {}\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        if (! $campaign->enabled('entity_attributes')) {\n            return redirect()->route('entities.show', [$campaign, $entity])->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#entity_attributes']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n\n        $this->campaign($campaign)->authEntityView($entity);\n        $this->authorize('view-attributes', [$entity, $campaign]);\n\n        $template = null;\n        $marketplaceTemplate = null;\n\n        $layout = $entity->attributes()->where(['name' => '_layout'])->first();\n        if (! empty($layout)) {\n            $template = $this->templateService->communityTemplate($layout->value);\n            $marketplaceTemplate = $this->templateService->campaign($campaign)->marketplaceTemplate($layout->value);\n        }\n\n        return view('entities.pages.attributes.index', compact(\n            'entity',\n            'marketplaceTemplate',\n            'template',\n            'campaign'\n        ));\n    }\n\n    public function dashboard(Campaign $campaign, Entity $entity)\n    {\n        if (! $campaign->enabled('entity_attributes')) {\n            return redirect()->route('dashboard', $campaign)->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#entity_attributes']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n        $this->campaign($campaign)->authEntityView($entity);\n        $this->authorize('view-attributes', [$entity, $campaign]);\n\n        $template = null;\n        $marketplaceTemplate = null;\n        $fromDashboard = true;\n\n        $layout = $entity->attributes()->where(['name' => '_layout'])->first();\n        if ($layout) {\n            $template = $this->templateService->communityTemplate($layout->value);\n            $marketplaceTemplate = $this->templateService->campaign($campaign)->marketplaceTemplate($layout->value);\n        }\n\n        return view('entities.pages.attributes.dashboard', compact(\n            'entity',\n            'marketplaceTemplate',\n            'template',\n            'campaign',\n            'fromDashboard'\n        ));\n    }\n\n    public function edit(Campaign $campaign, Entity $entity)\n    {\n        if (! $campaign->enabled('entity_attributes')) {\n            return redirect()->route('dashboard', $campaign)->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#entity_attributes']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n        if ($entity->isMissingChild()) {\n            abort(404);\n        }\n        $this->authorize('update', $entity);\n        $this->authorize('attributes', $entity);\n\n        return view('entities.pages.attributes.edit', compact(\n            'campaign',\n            'entity',\n        ));\n    }\n\n    public function save(SaveAttributes $request, Campaign $campaign, Entity $entity)\n    {\n        if ($entity->isMissingChild()) {\n            abort(404);\n        }\n        $this->authorize('update', $entity);\n        $this->authorize('attributes', $entity);\n\n        $attributes = $request->get('attribute', []);\n        $this->service\n            ->entity($entity)\n            ->user($request->user())\n            ->updateVisibility(request()->get('is_attributes_private') === '1')\n            ->save($attributes)\n            ->touch();\n\n        return redirect()->route('entities.attributes', [$campaign, $entity->id])\n            ->with('success', __('entities/attributes.update.success', ['entity' => $entity->name]));\n    }\n\n    public function liveEdit(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        $id = request()->get('id');\n        $uid = request()->get('uid');\n        if (! is_numeric($uid)) {\n            abort(421);\n        }\n\n        $attribute = $entity->attributes()->where('id', $id)->first();\n        if (! $id || ! $attribute) {\n            return abort(421);\n        }\n\n        return response()->view('entities.pages.attributes.live.edit', compact('campaign', 'attribute', 'entity', 'uid'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/AttributeTemplateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ApplyAttributeTemplate;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Attributes\\TemplateService;\nuse App\\Services\\AttributeService;\n\nclass AttributeTemplateController extends Controller\n{\n    protected AttributeService $service;\n\n    protected TemplateService $templateService;\n\n    public function __construct(AttributeService $service, TemplateService $templateService)\n    {\n        $this->middleware('auth');\n\n        $this->service = $service;\n        $this->templateService = $templateService;\n    }\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        if (! $campaign->enabled('entity_attributes')) {\n            return redirect()->route('dashboard', $campaign)->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#entity_attributes']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n        $this->authorize('update', $entity);\n        $this->authorize('attributes', $entity);\n\n        $templates = $this->service->campaign($campaign)->templateList();\n\n        return view('entities.pages.attribute-templates.apply', compact(\n            'campaign',\n            'entity',\n            'templates'\n        ));\n    }\n\n    public function process(ApplyAttributeTemplate $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $success = $this->templateService\n            ->entity($entity)\n            ->apply($request->get('template_id'));\n        if (! $success) {\n            return redirect()->back()->with('error', __('entities/attributes.template.error'));\n        }\n        $templateName = $this->templateService->templateName();\n        if ($request->has('submit-story')) {\n            return redirect()\n                ->to($entity->url())\n                ->with('success', __('entities/attributes.template.success', [\n                    'name' => $templateName, 'entity' => $entity->child->name,\n                ]));\n        } elseif ($request->has('submit-update')) {\n            return redirect()\n                ->route('entities.attributes.edit', [$campaign, $entity])\n                ->with('success', __('entities/attributes.template.success', [\n                    'name' => $templateName, 'entity' => $entity->child->name,\n                ]));\n        }\n\n        return redirect()\n            ->route('entities.attributes', [$campaign, $entity])\n            ->with('success', __('entities/attributes.template.success', [\n                'name' => $templateName, 'entity' => $entity->child->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Attributes/ApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Attributes;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Attributes\\ApiService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass ApiController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    protected ApiService $apiService;\n\n    public function __construct(ApiService $apiService)\n    {\n        $this->apiService = $apiService;\n    }\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        $this->authorize('view-attributes', [$entity, $campaign]);\n\n        return response()->json(\n            $this->apiService\n                ->campaign($campaign)\n                ->entity($entity)\n                ->build()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Attributes/LiveApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Attributes;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreAttribute;\nuse App\\Http\\Requests\\UpdateAttribute;\nuse App\\Http\\Resources\\Attributes\\LiveAttributeResource;\nuse App\\Models\\Attribute;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass LiveApiController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        $this->authorize('view-attributes', [$entity, $campaign]);\n\n        return LiveAttributeResource::collection($entity->attributes()->with(['entity', 'entity.campaign', 'entity.attributes'])->get());\n    }\n\n    public function store(StoreAttribute $request, Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        $this->authorize('attributes', [$entity, $campaign]);\n\n        $data = $request->all();\n        $data['entity_id'] = $entity->id;\n        $attribute = Attribute::create($data);\n\n        return new LiveAttributeResource($attribute);\n    }\n\n    public function update(UpdateAttribute $request, Campaign $campaign, Entity $entity, Attribute $attribute)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        $this->authorize('attributes', [$entity, $campaign]);\n\n        $attribute->update($request->all());\n\n        return new LiveAttributeResource($attribute);\n    }\n\n    public function destroy(Campaign $campaign, Entity $entity, Attribute $attribute)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        $this->authorize('attributes', [$entity, $campaign]);\n\n        $attribute->delete();\n\n        return response()->json(null, 204);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Attributes/LiveController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Attributes;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\UpdateEntityAttribute;\nuse App\\Models\\Attribute;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass LiveController extends Controller\n{\n    public function index(Campaign $campaign, Entity $entity, Attribute $attribute)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.attributes.live.edit')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('attribute', $attribute)\n            ->with('uid', request()->get('uid'));\n    }\n\n    public function save(UpdateEntityAttribute $request, Campaign $campaign, Entity $entity, Attribute $attribute)\n    {\n        $this->authorize('update', $entity);\n\n        if ($attribute->entity_id !== $entity->id) {\n            abort(404);\n        }\n\n        $attribute->update([\n            'value' => Purify::clean($request->get('value')),\n        ]);\n        // Track that the entity was updated\n        $entity->touch();\n\n        if (! request()->ajax()) {\n            return redirect()->route('entities.attributes', [$campaign, $entity]);\n        }\n\n        $attributeValue = null;\n        $result = $attribute->mappedValue();\n        $attributeValue = $result;\n        if ($attribute->isText()) {\n            $result = nl2br($result);\n            $attributeValue = $result;\n        } elseif ($attribute->isCheckbox()) {\n            $result = '<i ' .\n                'class=\"fa-solid fa-' . ($attribute->value ? 'check' : 'times') . '\" ' .\n                'aria-hidden=\"true\" ' .\n                'aria-label=\"' . ($attribute->value ? 'checked' : 'unchecked') . '\"></i>';\n            $attributeValue = $attribute->value ? 'true' : 'false';\n        }\n\n        return response()->json([\n            'value' => $result,\n            'attribute' => $attributeValue,\n            'id' => $attribute->id,\n            'uid' => $request->get('uid'),\n            'success' => __('entities/attributes.live.success', ['attribute' => $attribute->name()]),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Connections/MapController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Connections;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\Connections\\MapService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass MapController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(protected MapService $mapService) {}\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        $map = $this->mapService\n            ->campaign($campaign)\n            ->entity($entity)\n            ->option(request()->get('option', null))\n            ->map();\n\n        return response()->json(\n            $map\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Connections/TableController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Connections;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Renderers\\Layouts\\Entity\\Relation;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\GuestAuthTrait;\n\nclass TableController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        Datagrid::layout(Relation::class)\n            ->route('entities.relations_table', ['campaign' => $campaign, 'entity' => $entity, 'mode' => 'table']);\n\n        $this->rows = $entity\n            ->allRelationships()\n            ->sort(request()->only(['o', 'k']))\n            ->paginate();\n\n        // $this->campaign($campaign)->datagrid();\n\n        $html = view('layouts.datagrid._table')\n            ->with('rows', $this->rows)\n            ->with('campaign', $campaign)\n            ->render();\n        $data = [\n            'success' => true,\n            'html' => $html,\n        ];\n\n        return response()->json($data);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/CopyInventoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\CopyInventory;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass CopyInventoryController extends Controller\n{\n    use GuestAuthTrait;\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.inventory.copy', compact(\n            'campaign',\n            'entity',\n        ));\n    }\n\n    public function store(CopyInventory $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $copyFrom = Entity::where('id', $request->only('entity_id'))->first();\n        $count = 0;\n        foreach ($copyFrom->inventories as $old) {\n            $inventory = $old->replicate(['entity_id']);\n            $inventory->entity_id = $entity->id;\n            $inventory->save();\n            $count++;\n        }\n\n        return redirect()\n            ->route('entities.inventory', [$campaign, $entity])\n            ->with('success_raw', trans_choice('entities/inventories.create.success_bulk', $count, [\n                'entity' => $entity->name,\n                'count' => $count,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/EntryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\UpdateEntityEntry;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass EntryController extends Controller\n{\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function edit(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.entry.edit')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity);\n    }\n\n    /**\n     * Update the entity's entry\n     */\n    public function update(UpdateEntityEntry $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $fields = $request->only('entry');\n        $entity->update($fields);\n\n        if ($entity->wasChanged()) {\n            EntityLogger::entity($entity);\n            $entity->touch();\n        }\n\n        $return = redirect()->to($entity->url());\n        if (auth()->user()->editor === 'tiptap') {\n            $count = session()->get('tiptap_survey_count', 0);\n            $count++;\n            session()->put('tiptap_survey_count', $count);\n            if ($count % 5 === 0) {\n                session()->flash('tiptap_survey', true);\n            }\n        }\n\n        return $return;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/ExportController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\ExportService;\nuse App\\Services\\Entity\\MarkdownExportService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Support\\Str;\nuse League\\HTMLToMarkdown\\Converter\\TableConverter;\nuse League\\HTMLToMarkdown\\HtmlConverter;\n\n/**\n * Class ExportController\n */\nclass ExportController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    protected ExportService $service;\n\n    protected MarkdownExportService $markdownExportService;\n\n    public function __construct(ExportService $service, MarkdownExportService $markdownExportService)\n    {\n        $this->service = $service;\n        $this->markdownExportService = $markdownExportService;\n    }\n\n    public function json(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        return $this->service->entity($entity)->json();\n    }\n\n    public function markdown(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        $converter = new HtmlConverter;\n        $converter->getConfig()->setOption('strip_tags', true);\n        $converter->getEnvironment()->addConverter(new TableConverter);\n\n        if (auth()->check()) {\n            $this->markdownExportService->user(auth()->user());\n        }\n        $entityData = $this->markdownExportService\n            ->campaign($campaign)\n            ->entity($entity)\n            ->single(true)\n            ->entityData();\n\n        return response()->view('entities.markdown.base', ['entity' => $entity, 'entityData' => $entityData, 'converter' => $converter, 'campaign' => $campaign])\n            ->header('Content-Type', 'application/md')\n            ->header('Content-disposition', 'attachment; filename=\"' . Str::slug($entity->name) . '.md\"');\n    }\n\n    public function html(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        return view('entities.pages.print.print')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('model', $entity->entityType->isStandard() ? $entity->child : null)\n            ->with('name', $entity->entityType->pluralCode())\n            ->with('printing', true);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/GenerateInventoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\GenerateInventory;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\InventoryService;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass GenerateInventoryController extends Controller\n{\n    use GuestAuthTrait;\n\n    public function __construct(protected InventoryService $service) {}\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.inventory.generate', compact(\n            'campaign',\n            'entity',\n        ));\n    }\n\n    public function store(GenerateInventory $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $count = $this->service\n            ->entity($entity)\n            ->handle($request);\n\n        return redirect()\n            ->route('entities.inventory', [$campaign, $entity])\n            ->with('success_raw', trans_choice('entities/inventories.create.success_bulk', $count, [\n                'entity' => $entity->name,\n                'count' => $count,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/ImageController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreImageFocus;\nuse App\\Http\\Requests\\UpdateEntityImage;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass ImageController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware(['auth']);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function focus(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.image.focus')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity);\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function saveFocus(StoreImageFocus $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        // Gallery image?\n        $source = empty($entity->image_path) && $entity->image ? $entity->image : $entity;\n\n        $source->focus_x = (int) $request->post('focus_x');\n        $source->focus_y = (int) $request->post('focus_y');\n        $source->save();\n\n        return redirect()\n            ->to($entity->url())\n            ->with('success', __('entities/image.focus.success'));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function replace(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.image.replace')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity);\n    }\n\n    public function update(UpdateEntityImage $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $entity->image_uuid = request()->get('entity_image_uuid');\n        // New image requires a focus reset\n        if ($entity->isDirty(['image_uuid'])) {\n            $entity->focus_x = null;\n            $entity->focus_y = null;\n        }\n        $entity->save();\n\n        return redirect()\n            ->to($entity->url())\n            ->with('success', __('entities/image.replace.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Inventory/DetailController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Inventory;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Inventory;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass DetailController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Entity $entity, Inventory $inventory)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        if ($inventory->item_id && ! $inventory->item) {\n            abort(403);\n        }\n\n        return view('entities.pages.inventory.details')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('inventory', $inventory);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/InventoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreInventory;\nuse App\\Http\\Requests\\UpdateInventory;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Inventory;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass InventoryController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    protected array $fillable = [\n        'amount',\n        'name',\n        'item_id',\n        'entity_id',\n        'position',\n        'description',\n        'visibility_id',\n        'is_equipped',\n        'copy_item_entry',\n        'image_uuid',\n    ];\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        if (! $campaign->enabled('inventories')) {\n            return redirect()->route('entities.show', [$campaign, $entity])->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#inventories']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n\n        $inventory = $entity->orderedInventory();\n\n        return view('entities.pages.inventory.index', compact(\n            'campaign',\n            'entity',\n            'inventory',\n        ));\n    }\n\n    public function create(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        $positionPreset = request()->get('position');\n        $positionOptions = ['' => ''];\n        $positions = Inventory::positionList($campaign)->pluck('position')->all();\n        foreach ($positions as $position) {\n            $positionOptions[$position] = $position;\n        }\n\n        return view('entities.pages.inventory.create', compact(\n            'campaign',\n            'entity',\n            'positionPreset',\n            'positionOptions',\n        ));\n    }\n\n    public function store(StoreInventory $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $count = 0;\n        $itemIds = $request->post('item_id');\n        if (isset($itemIds) && is_array($itemIds)) {\n            foreach ($itemIds as $id) {\n                $data = $request->only($this->fillable);\n                $data['item_id'] = $id;\n                $inventory = new Inventory;\n                $inventory = $inventory->create($data);\n                $count++;\n            }\n            $success = trans_choice('entities/inventories.create.success_bulk', $count, [\n                'entity' => $entity->name,\n                'count' => $count,\n            ]);\n        } else {\n            $data = $request->only($this->fillable);\n            $inventory = new Inventory;\n            $inventory = $inventory->create($data);\n            $success = __('entities/inventories.create.success', [\n                'item' => $inventory->itemName(),\n                'entity' => $entity->name,\n            ]);\n        }\n\n        return redirect()\n            ->route('entities.inventory', [$campaign, $entity])\n            ->with('success_raw', $success);\n    }\n\n    /**\n     * Unhandled page, redirect\n     */\n    public function show(Campaign $campaign, Entity $entity, Inventory $inventory)\n    {\n        $this->authorize('update', $entity);\n\n        return redirect()->route('entities.inventory', [$campaign, $entity]);\n    }\n\n    public function edit(Campaign $campaign, Entity $entity, Inventory $inventory)\n    {\n        $this->authorize('update', $entity);\n        $positionOptions = ['' => ''];\n        $positions = Inventory::positionList($campaign)->pluck('position')->all();\n        foreach ($positions as $position) {\n            $positionOptions[$position] = $position;\n        }\n\n        return view('entities.pages.inventory.update', compact(\n            'campaign',\n            'entity',\n            'inventory',\n            'positionOptions'\n        ));\n    }\n\n    public function update(UpdateInventory $request, Campaign $campaign, Entity $entity, Inventory $inventory)\n    {\n        $this->authorize('update', $entity);\n\n        $data = $request->only($this->fillable);\n\n        $inventory->update($data);\n        $inventory->refresh();\n\n        return redirect()\n            ->route('entities.inventory', [$campaign, $entity])\n            ->with('success_raw', __('entities/inventories' . '.update.success', [\n                'item' => $inventory->itemName(),\n                'entity' => $entity->name,\n            ]));\n    }\n\n    public function destroy(Campaign $campaign, Entity $entity, Inventory $inventory)\n    {\n        $this->authorize('update', $entity);\n\n        $inventory->delete();\n\n        return redirect()\n            ->route('entities.inventory', [$campaign, $entity])\n            ->with('success_raw', __('entities/inventories.destroy.success', [\n                'item' => $inventory->itemName(),\n                'entity' => $entity->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/InventorySectionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Inventory;\nuse App\\Traits\\GuestAuthTrait;\n\nclass InventorySectionController extends Controller\n{\n    use GuestAuthTrait;\n\n    public function delete(Campaign $campaign, Entity $entity, Inventory $inventory)\n    {\n        $this->authorize('update', $entity);\n        if ($inventory->position) {\n            Inventory::where('entity_id', $entity->id)->where('position', $inventory->position)->delete();\n        } else {\n            Inventory::where('entity_id', $entity->id)->where('position', '')->delete();\n        }\n\n        return redirect()\n            ->route('entities.inventory', [$campaign, $entity])\n            ->with('success_raw', __('entities/inventories.destroy.success_position', [\n                'position' => $inventory->position,\n                'entity' => $entity->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/LogController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\HistoryRequest;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityLog;\nuse App\\Models\\Post;\n\nclass LogController extends Controller\n{\n    public function index(HistoryRequest $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        $this->authorize('history', [$entity, $campaign]);\n\n        $fields = ['action'];\n        $expanded = false;\n        if ($campaign->superboosted()) {\n            $fields = ['q', 'action'];\n            if ($request->filled('q')) {\n                $expanded = true;\n            }\n        }\n\n        $postIds = $entity->posts()->pluck('id');\n        $logs = EntityLog::where(function ($query) use ($entity, $postIds) {\n            $query->where(function ($sub) use ($entity) {\n                $sub->where('parent_type', Entity::class)\n                    ->where('parent_id', $entity->id);\n            })\n                ->orWhere(function ($sub) use ($postIds) {\n                    $sub->where('parent_type', Post::class)\n                        ->whereIn('parent_id', $postIds);\n                });\n        })\n            ->filter($request->only($fields))\n            ->with([\n                'user',\n                'impersonator',\n                'parent',\n            ])\n            ->recent()\n            ->paginate(config('limits.pagination'));\n\n        $transKey = $entity->entityType->pluralCode();\n\n        $q = request()->get('q');\n        $action = request()->get('action');\n        $actions = [\n            '' => __('history.filters.all-actions'),\n            EntityLog::ACTION_CREATE => __('entities/logs.actions.create'),\n            EntityLog::ACTION_UPDATE => __('entities/logs.actions.update'),\n            EntityLog::ACTION_DELETE => __('entities/logs.actions.delete'),\n            EntityLog::ACTION_RESTORE => __('entities/logs.actions.restore'),\n        ];\n\n        return view('entities.pages.logs.index', compact(\n            'campaign',\n            'entity',\n            'logs',\n            'campaign',\n            'transKey',\n            'q',\n            'action',\n            'actions',\n            'expanded',\n        ));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/MentionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Renderers\\Layouts\\Mention\\Mention;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\GuestAuthTrait;\n\nclass MentionController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        $options = ['campaign' => $campaign, 'entity' => $entity];\n\n        Datagrid::layout(Mention::class)\n            ->route('entities.mentions', $options);\n        $this->rows = $entity\n            ->targetMentions()\n            ->datagridElements(request()->only(['o', 'k']))\n            ->with([\n                'campaign' => function ($sub) {\n                    $sub->select('id', 'name', 'slug');\n                },\n                'post' => function ($sub) {\n                    $sub->select('id', 'entity_id', 'name', 'visibility_id');\n                },\n                'post.entity' => function ($sub) {\n                    $sub->select('id', 'type_id', 'entity_id', 'name', 'is_private');\n                },\n                'entity' => function ($sub) {\n                    $sub->select('id', 'type_id', 'entity_id', 'name', 'is_private');\n                },\n                'entity.entityType' => function ($sub) {\n                    $sub->select('id', 'code', 'singular', 'plural');\n                },\n                'questElement' => function ($sub) {\n                    $sub->select('id', 'name', 'quest_id', 'entity_id', 'visibility_id');\n                },\n                'questElement.entity' => function ($sub) {\n                    $sub->select('id', 'type_id', 'entity_id', 'name', 'is_private');\n                },\n                /*'questElement.quest' => function ($sub) {\n                    $sub->select('id', 'name', 'is_private');\n                },\n                'questElement.quest.entity' => function ($sub) {\n                    $sub->select('id', 'type_id', 'entity_id', 'name', 'is_private');\n                },*/\n                'timelineElement' => function ($sub) {\n                    $sub->select('id', 'name', 'timeline_id', 'entity_id', 'visibility_id');\n                },\n                'timelineElement.entity' => function ($sub) {\n                    $sub->select('id', 'type_id', 'entity_id', 'name', 'is_private');\n                },\n                /*'timelineElement.timeline' => function ($sub) {\n                    $sub->select('id', 'name', 'is_private');\n                },\n                'timelineElement.timeline.entity' => function ($sub) {\n                    $sub->select('id', 'type_id', 'entity_id', 'name', 'is_private');\n                },*/\n            ])\n            ->filterValid()\n            ->paginate();\n\n        // Ajax Datagrid\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        $rows = $this->rows;\n\n        return view('entities.pages.mentions.mentions', compact(\n            'entity',\n            'rows',\n            'campaign',\n        ));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/MoveController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\MoveEntityRequest;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\MoveService;\nuse App\\Services\\EntityTypeService;\nuse App\\Services\\Users\\CampaignService;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\View\\View;\n\nclass MoveController extends Controller\n{\n    /**\n     * Guest Auth Trait\n     */\n    use GuestAuthTrait;\n\n    public function __construct(\n        protected MoveService $service,\n        protected EntityTypeService $entityTypeService,\n        protected CampaignService $campaignService,\n    ) {\n        $this->middleware(['auth']);\n    }\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('view', $entity);\n\n        $campaigns = $this->campaignService\n            ->user(auth()->user())\n            ->campaign($campaign)\n            ->campaigns();\n\n        return view('entities.pages.move.index', compact(\n            'campaign',\n            'entity',\n            'campaigns',\n        ));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function move(MoveEntityRequest $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('view', $entity);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $copied = $request->filled('copy');\n        try {\n            $this->service\n                ->entity($entity)\n                ->campaign($campaign)\n                ->user($request->user())\n                ->to($request->get('campaign'))\n                ->copy($copied)\n                ->validate()\n                ->process();\n\n            return redirect()\n                ->route($entity->entityType->hasEntity() ? 'entities.index' : $entity->entityType->pluralCode() . '.index', [$campaign, $entity->entityType])\n                ->with('success_raw', __('entities/move.success' . ($copied ? '_copy' : null), ['name' => $entity->name, 'campaign' => '<a href=\\'' . route('dashboard', $this->service->target()) . '\\' class=\"text-link\">' . $this->service->target()->name . '</a>']));\n        } catch (TranslatableException $ex) {\n            return redirect()\n                ->to($entity->url())\n                ->with('error_raw', $ex->getTranslatedMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/PermissionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StorePermission;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\PermissionService;\n\nclass PermissionController extends Controller\n{\n    protected PermissionService $permissionService;\n\n    public function __construct(PermissionService $permissionService)\n    {\n        $this->permissionService = $permissionService;\n    }\n\n    public function view(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('permissions', $entity);\n\n        return view('cruds.permissions', compact('entity', 'campaign'));\n    }\n\n    public function store(StorePermission $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('permissions', $entity);\n\n        $this->permissionService\n            ->user($request->user())\n            ->entity($entity)\n            ->save($request->only('role', 'user'));\n\n        return redirect()->back()\n            ->with('success_raw', __('crud.permissions.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/PostController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StorePost;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\PostLayout;\nuse App\\Services\\MultiEditingService;\nuse App\\Services\\Posts\\Permissions\\SavePermissionsService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Collator;\n\nclass PostController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(\n        protected SavePermissionsService $savePermissionsService,\n        protected MultiEditingService $editingService,\n    ) {}\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('browse', [$entity]);\n\n        return redirect()->to($entity->url());\n    }\n\n    public function create(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('post', [$entity, 'add']);\n        $parentRoute = $entity->entityType->pluralCode();\n        $templates = Post::postTemplates($campaign)->orderBy('name')->get();\n\n        $data = [];\n        $template = request()->input('template');\n        if (! empty($template) && $this->authorize('useTemplates', $campaign)) {\n            $template = Post::template()->with('entity')->has('entity')->where('posts.id', $template)->first();\n            $data['model'] = $template;\n            $data['model']->name = '';\n            $data['model']->position = null;\n        }\n\n        /** @var PostLayout[] $layouts */\n        $layouts = PostLayout::entity($entity->entityType)->get();\n        $layoutDefault = ['' => __('fields.description.label')];\n        $layoutOptions = $disabledLayoutOptions = [];\n\n        foreach ($layouts as $layout) {\n            $layoutOptions[$layout->id] = $layout->name();\n            if (! $campaign->superboosted()) {\n                $disabledLayoutOptions[$layout->id] = true;\n            }\n        }\n\n        $collator = new Collator(app()->getLocale());\n        $collator->asort($layoutOptions);\n        $layoutOptions = $layoutDefault + $layoutOptions;\n\n        return view('entities.pages.posts.create', compact(\n            'campaign',\n            'post',\n            'layoutOptions',\n            'disabledLayoutOptions',\n            'entity',\n            'parentRoute',\n            'templates',\n            'template',\n        ))->with($data);\n    }\n\n    public function show(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        if (! request()->json()) {\n            return redirect()->to($entity->url());\n        }\n\n        return view('entities.pages.posts.show')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('post', $post);\n    }\n\n    public function store(StorePost $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('post', [$entity, 'add']);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $campaign->superboosted() ? $request->all() : $request->except(['layout_id']);\n        $data['entity_id'] = $entity->id;\n        $post = Post::create($data);\n\n        if (auth()->user()->can('permissions', $entity)) {\n            $this->savePermissionsService->post($post)->request($request)->save();\n        }\n\n        if ($request->has('submit-new')) {\n            $route = route('entities.posts.create', [$campaign, $entity]);\n\n            return response()->redirectTo($route);\n        } elseif ($request->has('submit-update')) {\n            $route = route('entities.posts.edit', [$campaign, $entity, $post]);\n\n            return response()->redirectTo($route);\n        }\n\n        return redirect()\n            ->to($entity->url())\n            ->with('success', __('entities/notes.create.success', [\n                'name' => $post->name, 'entity' => $entity->name,\n            ]));\n    }\n\n    public function edit(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('post', [$entity, 'edit', $post]);\n        $editingUsers = null;\n\n        /** @var Post $model */\n        $model = $post;\n\n        if ($campaign->hasEditingWarning()) {\n            $editingUsers = $this->editingService->model($model)->user(auth()->user())->users();\n            // If no one is editing the model, we are now editing it\n            if (empty($editingUsers)) {\n                $this->editingService->edit();\n            }\n        }\n\n        $parentRoute = $entity->entityType->pluralCode();\n        $from = request()->get('from');\n\n        return view('entities.pages.posts.edit', compact(\n            'campaign',\n            'entity',\n            'model',\n            'parentRoute',\n            'from',\n            'editingUsers'\n        ));\n    }\n\n    public function update(StorePost $request, Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('post', [$entity, 'edit', $post]);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->all();\n        unset($data['entity_id']);\n        if ($request->isNotFilled('position')) {\n            unset($data['position']);\n        }\n        $post->update($data);\n        if (auth()->user()->can('permissions', $entity)) {\n            $this->savePermissionsService\n                ->post($post)\n                ->request($request)\n                ->save();\n        }\n\n        $this->editingService->model($post)\n            ->user($request->user())\n            ->finish();\n\n        if ($request->has('submit-new')) {\n            $route = route('entities.posts.create', [$campaign, $entity]);\n\n            return response()->redirectTo($route);\n        } elseif ($request->has('submit-update')) {\n            $route = route('entities.posts.edit', [$campaign, $entity, $post]);\n\n            return response()->redirectTo($route);\n        }\n\n        return redirect()->route('entities.show', [$campaign, $entity, '#post-' . $post->id])\n            ->with('success', __('entities/notes.edit.success', [\n                'name' => $post->name, 'entity' => $entity->name,\n            ]));\n    }\n\n    public function destroy(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('post', [$entity, 'delete']);\n\n        $post->delete();\n\n        return redirect()\n            ->route('entities.show', [$campaign, $entity])\n            ->with('success', __('entities/notes.destroy.success', [\n                'name' => $post->name, 'entity' => $entity->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Posts/LayoutController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Posts;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\n\nclass LayoutController extends Controller\n{\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('view', [$entity]);\n\n        return view('entities.pages.posts.layouts.index')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Posts/LogController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Posts;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\HistoryRequest;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityLog;\nuse App\\Models\\Post;\n\nclass LogController extends Controller\n{\n    public function index(HistoryRequest $request, Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('history', [$entity, $campaign]);\n        $this->authorize('post', [$entity, 'edit', $post]);\n\n        $fields = ['action'];\n        $expanded = false;\n        if ($campaign->superboosted()) {\n            $fields = ['q', 'action'];\n            if ($request->filled('q')) {\n                $expanded = true;\n            }\n        }\n\n        $logs = $post\n            ->logs()\n            ->filter($request->only($fields))\n            ->with(['user', 'impersonator'])\n            ->recent()\n            ->paginate(config('limits.pagination'));\n\n        $transKey = $entity->entityType->pluralCode();\n\n        $q = request()->get('q');\n        $action = request()->get('action');\n        $actions = [\n            '' => __('history.filters.all-actions'),\n            EntityLog::ACTION_CREATE => __('entities/logs.actions.create'),\n            EntityLog::ACTION_UPDATE => __('entities/logs.actions.update'),\n            EntityLog::ACTION_DELETE => __('entities/logs.actions.delete'),\n        ];\n\n        return view('entities.pages.posts.logs.index', compact(\n            'post',\n            'campaign',\n            'entity',\n            'logs',\n            'campaign',\n            'transKey',\n            'q',\n            'action',\n            'actions',\n            'expanded'\n        ));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Posts/MoveController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Posts;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\MovePostRequest;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Services\\Entity\\PostService;\n\nclass MoveController extends Controller\n{\n    public function __construct(protected PostService $service) {}\n\n    public function index(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.posts.move.index', compact(\n            'entity',\n            'post',\n            'campaign',\n        ));\n    }\n\n    public function move(MovePostRequest $request, Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        /** @var Entity|null $newEntity */\n        $newEntity = Entity::where(['id' => $request['entity']])->first();\n        $this->authorize('update', $newEntity);\n        try {\n            // Check if the post has a layout and if said layout is compatible with the new entity\n            if ($post->layout_id) {\n                if ($post->layout->entity_type_id !== null && $post->layout->entity_type_id != $newEntity->type_id) {\n                    throw new TranslatableException(__('errors.post_layout'));\n                }\n            }\n            $newPost = $this->service\n                ->post($post)\n                ->user($request->user())\n                ->handle($request);\n            $success = 'move_success';\n            if (isset($request['copy'])) {\n                $success = 'copy_success';\n            }\n\n            return redirect()\n                ->route('entities.show', [$campaign, $newEntity, '#post-' . $newPost->id])\n                ->with('success', __('entities/notes.move.' . $success, ['name' => $newPost->name,\n                    'entity' => $newEntity->name,\n                ]));\n        } catch (TranslatableException $ex) {\n            return redirect()\n                ->route('entities.show', [$campaign, $entity, '#post-' . $post->id])\n                ->with('error', __($ex->getMessage(), ['name' => $entity->name]));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Posts/TemplateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Posts;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Post;\nuse App\\Services\\Entity\\TemplateService;\n\nclass TemplateController extends Controller\n{\n    protected TemplateService $service;\n\n    public function __construct(TemplateService $templateService)\n    {\n        $this->middleware('auth');\n        $this->service = $templateService;\n    }\n\n    public function update(Campaign $campaign, Post $post)\n    {\n        $this->authorize('setPostTemplates', $campaign);\n\n        if (request()->ajax()) {\n            return response()->json();\n        }\n\n        $this->service->post($post)->toggle();\n\n        return redirect()->back()\n            ->with(\n                'success',\n                __('posts/actions.templates.success.' . ($post->isTemplate() ? 'set' : 'unset'), ['name' => $post->name])\n            );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/Posts/VisibilityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity\\Posts;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\EditPostVisibility;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\View\\View;\n\nclass VisibilityController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @return View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('post', [$entity, 'edit', $post]);\n        $this->authorize('visibility', $post);\n\n        return view('entities.pages.posts.dialogs.visibility', [\n            'campaign' => $campaign,\n            'post' => $post,\n            'entity' => $entity,\n        ]);\n    }\n\n    /**\n     * @return JsonResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function update(EditPostVisibility $request, Campaign $campaign, Entity $entity, Post $post)\n    {\n        $this->authorize('post', [$entity, 'edit', $post]);\n        $this->authorize('visibility', $post);\n\n        $post->update($request->all());\n\n        return response()->json(['toast' => __('visibilities.toast'), 'icon' => $post->visibilityIcon('btn-box-tool'), 'post_id' => $post->id, 'visibility_id' => $post->visibility_id]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/PreviewController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\PreviewService;\nuse App\\Services\\Search\\RecentService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass PreviewController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    protected PreviewService $service;\n\n    protected RecentService $recentService;\n\n    public function __construct(PreviewService $service, RecentService $recentService)\n    {\n        $this->service = $service;\n        $this->recentService = $recentService;\n    }\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        if (auth()->check()) {\n            $this->recentService\n                ->campaign($campaign)\n                ->user(auth()->user())\n                ->logView($entity);\n        }\n\n        return response()->json(\n            $this\n                ->service\n                ->entity($entity)\n                ->campaign($campaign)\n                ->preview()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/PrivacyController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\PrivacyService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\n\n/**\n * Class PrivacyController\n */\nclass PrivacyController extends Controller\n{\n    protected PrivacyService $service;\n\n    public function __construct(PrivacyService $service)\n    {\n        $this->service = $service;\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('privacy', $entity);\n\n        $visibility = $this->service->entity($entity)->visibilities();\n\n        return view('entities.pages.privacy.index')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('visibility', $visibility);\n    }\n\n    /**\n     * Toggle an entity's privacy setting\n     */\n    public function toggle(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('privacy', $entity);\n\n        if ($entity->entityType->isCustom()) {\n            $entity->update(['is_private' => ! $entity->is_private]);\n        } else {\n            $misc = $entity->child;\n            $misc->is_private = ! $misc->is_private;\n            $misc->update(['is_private' => $misc->is_private]);\n            $entity->update(['is_private' => $misc->is_private]);\n        }\n\n        return response()->json([\n            'toast' => __('entities/permissions.quick.success.' . ($entity->is_private ? 'private' : 'public'), [\n                'entity' => $entity->name,\n            ]),\n            'success' => true,\n            'status' => $entity->is_private,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/ProfileController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass ProfileController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        if (! view()->exists('entities.pages.profile._' . $entity->entityType->code)) {\n            return redirect()->to($entity->url());\n        }\n\n        return view('entities.pages.profile.index')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('model', $entity->child);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/RelationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreRelation;\nuse App\\Http\\Resources\\Web\\EntityResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Relation;\nuse App\\Services\\Entity\\Connections\\RelatedService;\nuse App\\Services\\Entity\\RelationService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass RelationController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    protected RelatedService $connectionService;\n\n    protected RelationService $relationService;\n\n    public function __construct(RelatedService $connectionService, RelationService $relationService)\n    {\n        $this->connectionService = $connectionService;\n        $this->relationService = $relationService;\n    }\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        $mode = request()->get('mode', null);\n        if (! in_array($mode, ['map', 'table'])) {\n            $mode = null;\n        }\n\n        $option = request()->get('option', null);\n        if (! in_array($option, ['related', 'mentions', 'only_relations'])) {\n            $option = null;\n        }\n\n        $order = request()->get('order', null);\n\n        $rows = $connections = $connectionService = [];\n        // @phpstan-ignore-next-line\n        $defaultToTable = ! $campaign->boosted() || ($campaign->boosted() && $campaign->defaultToConnection());\n        if ($mode == 'table' || (empty($mode) && $defaultToTable)) {\n            $mode = 'table';\n\n            Datagrid::layout(\\App\\Renderers\\Layouts\\Entity\\Relation::class)\n                ->route('entities.relations_table', ['campaign' => $campaign, 'entity' => $entity, 'mode' => 'table']);\n\n            $rows = $entity\n                ->allRelationships()\n                ->sort(request()->only(['o', 'k']))\n                ->with(['owner', 'target', 'target.location', 'target.location.entity'])\n                ->paginate()\n                ->withPath(route('entities.relations_table', ['campaign' => $campaign, 'entity' => $entity, 'mode' => 'table']));\n\n            $connections = $this->connectionService\n                ->entity($entity)\n                ->order($order)\n                ->connections();\n\n            $connectionService = $this->connectionService;\n        }\n        // @phpstan-ignore-next-line\n        $defaultToMap = ! $campaign->boosted() || ($campaign->boosted() && $campaign->defaultToConnectionMode());\n        if ($mode != 'table' && empty($option) && $defaultToMap) {\n            if ($campaign->defaultToConnectionMode() == 1) {\n                $option = 'only_relations';\n            } elseif ($campaign->defaultToConnectionMode() == 2) {\n                $option = 'related';\n            } elseif ($campaign->defaultToConnectionMode() == 3) {\n                $option = 'mentions';\n            }\n        }\n        $entityTypeId = 'connection';\n\n        return view('entities.pages.relations.index', compact(\n            'campaign',\n            'entity',\n            'entityTypeId',\n            'rows',\n            'mode',\n            'option',\n            'connections',\n            'connectionService',\n            'campaign'\n        ));\n    }\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        $mode = $this->getModeOption();\n\n        return view('entities.pages.relations.create', compact(\n            'campaign',\n            'entity',\n            'mode'\n        ));\n    }\n\n    public function store(StoreRelation $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $this->relationService->campaign($campaign)->createRelations($request);\n\n        $mode = $this->getModeOption(true);\n        $redirect = [$campaign, $entity];\n        if (! empty($mode)) {\n            $redirect['mode'] = $mode;\n        }\n\n        return redirect()\n            ->route('entities.relations.index', $redirect)\n            ->with('success', trans_choice('entities/relations.create.success_bulk', $this->relationService->getCount(), [\n                'entity' => $entity->name,\n                'count' => $this->relationService->getCount(),\n            ]));\n    }\n\n    // This page doesn't exist, but crawlers will try\n    public function show(Campaign $campaign, Entity $entity, Relation $relation)\n    {\n        abort(404);\n    }\n\n    public function edit(Campaign $campaign, Entity $entity, Relation $relation)\n    {\n        $this->authorize('update', $entity);\n\n        $from = request()->get('from', 0);\n        if ($from !== 'web') {\n            $from = (int) $from;\n        }\n        $mode = $this->getModeOption();\n\n        return view('entities.pages.relations.update', compact(\n            'campaign',\n            'entity',\n            'relation',\n            'from',\n            'mode'\n        ));\n    }\n\n    public function update(StoreRelation $request, Campaign $campaign, Entity $entity, Relation $relation)\n    {\n        $this->authorize('update', $entity);\n        $data = $request->only(['target_id', 'attitude', 'relation', 'colour', 'is_pinned', 'two_way', 'visibility_id']);\n\n        if ($request->unmirror && $relation->mirror) {\n            $relation->mirror->update(['mirror_id' => null]);\n            $data['mirror_id'] = null;\n        }\n\n        $relation->update($data);\n        $relation->refresh();\n        $mode = $this->getModeOption();\n\n        if (request()->has('from')) {\n            $from = request()->post('from');\n            if ($from === 'web') {\n                return response()\n                    ->json([\n                        'updated' => true,\n                        'id' => $relation->id,\n                        'colour' => $relation->colour,\n                        'attitude' => $relation->attitude,\n                        'text' => $relation->relation,\n                        'target' => (new EntityResource($relation->target))->campaign($campaign),\n                    ]);\n            } elseif (! empty($from)) {\n                $redirect = [$campaign, (int) $from];\n                if (! empty($mode)) {\n                    $redirect['mode'] = $mode;\n                }\n                if (request()->has('option')) {\n                    $redirect['option'] = request()->get('option');\n                }\n\n                return redirect()\n                    ->route('entities.relations.index', $redirect)\n                    ->with('success', trans('entities/relations' . '.update.success', [\n                        'target' => $relation->target->name,\n                        'entity' => $entity->name,\n                    ]));\n            }\n        }\n\n        $redirect = [$campaign, $entity];\n        if (! empty($mode)) {\n            $redirect['mode'] = $mode;\n        }\n        if (request()->has('option')) {\n            $redirect['option'] = request()->get('option');\n        }\n\n        return redirect()\n            ->route('entities.relations.index', $redirect)\n            ->with('success', __('entities/relations' . '.update.success', [\n                'target' => $relation->target->name,\n                'entity' => $entity->name,\n            ]));\n    }\n\n    public function destroy(Campaign $campaign, Entity $entity, Relation $relation)\n    {\n        $this->authorize('update', $entity);\n\n        if (request()->has('mode')) {\n            $mode = request()->get('mode');\n        } else {\n            $mode = $this->getModeOption();\n        }\n\n        $deletedMirror = false;\n        if (request()->get('remove_mirrored') === '1' && $relation->isMirrored()) {\n            $mirror = $relation->mirror;\n            if (! empty($mirror) && auth()->user()->can('relation', [$relation->target, 'delete'])) {\n                $mirror->delete();\n                $deletedMirror = true;\n            }\n        }\n\n        // Update the mirror to remove it's mirrored status\n        if ($deletedMirror === false && $relation->isMirrored()) {\n            $mirror = $relation->mirror;\n            $mirror->update([\n                'mirror_id' => null,\n            ]);\n        }\n\n        $relation->delete();\n        $redirect = [$campaign, $entity];\n        if (! empty($mode)) {\n            $redirect['mode'] = $mode;\n        }\n        if (request()->has('option')) {\n            $redirect['option'] = request()->get('option');\n        }\n        if (request()->get('from') === 'web') {\n            return response()\n                ->json(['deleted' => true, 'id' => $relation->id]);\n        }\n\n        return redirect()\n            ->route('entities.relations.index', $redirect)\n            ->with('success', trans('entities/relations.destroy.success', [\n                'target' => $relation->target->name,\n                'entity' => $entity->name,\n            ]));\n    }\n\n    protected function getModeOption(bool $post = false)\n    {\n        $mode = request()->get('mode');\n        if ($post) {\n            $mode = request()->post('mode');\n        }\n        if (in_array($mode, ['mode', 'table'])) {\n            return $mode;\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/ReminderController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\AddCalendarEvent;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Reminder;\nuse App\\Services\\CalendarService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass ReminderController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    protected string $view = 'entity_event';\n\n    protected string $route = 'reminders';\n\n    protected CalendarService $calendarService;\n\n    protected string $model = Reminder::class;\n\n    public function __construct(CalendarService $calendarService)\n    {\n        // parent::__construct();\n        $this->calendarService = $calendarService;\n    }\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        if (! $campaign->enabled('calendars')) {\n            return redirect()->route('entities.show', [$campaign, $entity])->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#calendars']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n\n        $options = ['campaign' => $campaign, 'entity' => $entity];\n        Datagrid::layout(\\App\\Renderers\\Layouts\\Entity\\Reminder::class)\n            ->route('entities.reminders.index', $options);\n\n        $this->rows = $entity\n            ->reminders()\n            ->has('calendar')\n            ->has('calendar.entity')\n            ->with(['calendar', 'calendar.entity', 'remindable'])\n            ->sort(request()->only(['o', 'k']))\n            ->paginate();\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return view('entities.pages.reminders.index')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('rows', $this->rows);\n    }\n\n    public function show(Campaign $campaign, Entity $entity, Reminder $reminder)\n    {\n        return redirect()\n            ->route('entities.reminders.index', [$campaign, $entity]);\n    }\n\n    public function create(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('reminders', $entity);\n\n        $name = $this->view;\n        $route = $this->route;\n        $parent = explode('.', $this->view)[0];\n        $next = request()->get('next', null);\n        $calendars = Calendar::get();\n\n        return view('calendars.reminders.create_from_entity', compact(\n            'campaign',\n            'entity',\n            'name',\n            'route',\n            'parent',\n            'next',\n            'entity',\n            'calendars',\n        ));\n    }\n\n    public function store(AddCalendarEvent $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('reminders', $entity);\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        // Since reminders are polymorphic, we need to attach them to the proper model\n        $entity = Entity::findOrFail($request->get('entity_id'));\n        $data = [\n            'calendar_id' => $request->get('calendar_id'),\n            'day' => $request->get('day'),\n            'month' => $request->get('month'),\n            'year' => $request->get('year'),\n            'comment' => $request->get('comment'),\n            'length' => $request->get('length'),\n            'colour' => $request->get('colour'),\n            'recurring_periodicity' => $request->get('recurring_periodicity'),\n            'recurring_until' => $request->get('recurring_until'),\n            'visibility_id' => $request->get('visibility_id'),\n            'type_id' => $request->get('type_id'),\n        ];\n        $entity->reminders()->create($data);\n\n        //        $reminder = new Reminder($request->all());\n        //        $reminder->entity_id = $entity->id;\n        //        $reminder->save();\n\n        $next = request()->post('next', '0');\n        if ($next == 'entity.events') {\n            return redirect()\n                ->route('entities.reminders.index', [$campaign, $entity])\n                ->with('success', __('calendars.event.create.success'));\n        }\n\n        return redirect()\n            ->route('entities.reminders.index', [$campaign, $entity])\n            ->with('success', __('calendars.event.create.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/ShareController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreShare;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Campaign\\ShareService as CampaignShareService;\nuse App\\Services\\Entity\\ShareService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\JsonResponse;\n\nclass ShareController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(\n        protected ShareService $shareService,\n        protected CampaignShareService $campaignShareService,\n    ) {}\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function setup(Campaign $campaign, Entity $entity): View\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.share.setup', compact(\n            'campaign',\n            'entity',\n        ));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function save(StoreShare $request, Campaign $campaign, Entity $entity): JsonResponse\n    {\n        $this->authorize('update', $entity);\n\n        $visibilityMode = $request->input('visibility_mode');\n        $campaignVisibility = $request->input('campaign_visibility');\n\n        if ($campaignVisibility === 'public') {\n            $this->authorize('update', $campaign);\n        }\n\n        if ($visibilityMode) {\n            $this->shareService\n                ->campaign($campaign)\n                ->entity($entity);\n\n            if ($visibilityMode === 'entity') {\n                $this->shareService->shareEntity();\n            } elseif ($visibilityMode === 'global') {\n                $this->shareService->shareGlobal();\n            }\n\n            $entity->refresh();\n        } elseif ($campaignVisibility === 'public') {\n            $this->campaignShareService\n                ->campaign($campaign)\n                ->makePublic();\n        }\n\n        return response()->json([\n            'success' => true,\n            'campaign_public' => $campaign->isPublic(),\n            'entity_private' => (bool) $entity->is_private,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/ShowController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Middleware\\CachedResponse;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Http\\Request;\n\nclass ShowController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct()\n    {\n\n        $this->middleware([CachedResponse::class]);\n    }\n\n    public function index(Request $request, Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n        /*if ($entity->slug !== $slug) {\n            return redirect()->route('entities.show', [$campaign, $entity, $entity->slug]);\n        }*/\n\n        // Perf trick\n        if ($entity->hasChild()) {\n            $entity->child->setRelation('entity', $entity);\n        }\n\n        $bookmark = null;\n        if ($request->filled('bookmark')) {\n            $bookmark = Bookmark::where('id', $request->get('bookmark'))\n                ->where('campaign_id', $campaign->id)\n                ->first();\n        }\n\n        return view('cruds.show')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('entityType', $entity->entityType)\n            ->with('bookmark', $bookmark);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/StoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ReorderStories;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\StoryService;\nuse App\\Traits\\GuestAuthTrait;\n\nclass StoryController extends Controller\n{\n    use GuestAuthTrait;\n\n    protected StoryService $service;\n\n    public function __construct(StoryService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function edit(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n\n        return view('entities.pages.story.reorder', compact(\n            'campaign',\n            'entity'\n        ));\n    }\n\n    public function save(ReorderStories $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $this->service\n            ->entity($entity)\n            ->user($request->user())\n            ->reorder($request);\n\n        return redirect()\n            ->to($entity->url())\n            ->with('success', __('entities/story.reorder.success'));\n    }\n\n    /**\n     * Load more posts to display to the user (partial view)\n     */\n    public function more(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('view', $entity);\n\n        $pagination = app()->isProduction() ? 15 : 6;\n        $posts = $entity->posts()->with(['permissions', 'location', 'layout'])->ordered()->paginate($pagination);\n\n        return view('entities.components.posts')\n            ->with('entity', $entity)\n            ->with('more', true)\n            ->with('campaign', $campaign)\n            ->with('posts', $posts);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/TagController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\UpdateEntityTags;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\TagService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass TagController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    protected TagService $tagService;\n\n    public function __construct(TagService $tagService)\n    {\n        $this->tagService = $tagService;\n    }\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        $formOptions = ['entity.tags-add.save', $campaign, 'entity' => $entity];\n\n        return view('entities.pages.tags.create', [\n            'campaign' => $campaign,\n            'entity' => $entity,\n            'formOptions' => $formOptions,\n        ]);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(UpdateEntityTags $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        if ($request->ajax()) {\n            return response()->json();\n        }\n\n        $ids = request()->post('tags', []);\n        if (empty($ids)) {\n            $ids = [];\n        }\n        $this->tagService\n            ->user($request->user())\n            ->entity($entity)\n            ->withNew()\n            ->sync($ids);\n        $entity->touch();\n\n        return redirect()->route('entities.show', [$campaign, $entity])\n            ->with('success', __('tags.children.create.attach_success_entity', ['name' => $entity->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/TemplateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\TemplateService;\n\nclass TemplateController extends Controller\n{\n    protected TemplateService $service;\n\n    public function __construct(TemplateService $templateService)\n    {\n        $this->middleware('auth');\n        $this->service = $templateService;\n    }\n\n    public function update(Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('update', $entity);\n        $this->authorize('setTemplates', $campaign);\n\n        if (request()->ajax()) {\n            return response()->json();\n        }\n\n        $this->service->entity($entity)->toggle();\n\n        if ($entity->isTemplate()) {\n            session()->flash('success_docs', 'guides/archetypes');\n        }\n\n        return redirect()->back()\n            ->with(\n                'success_raw',\n                __('entries/archetypes.success.' . ($entity->isTemplate() ? 'set' : 'unset'), ['name' => $entity->name])\n            );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/TooltipController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Facades\\Avatar;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Entity\\TooltipService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass TooltipController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(public TooltipService $tooltipService) {}\n\n    /**\n     * Prepare and show an entity's tooltip\n     */\n    public function show(Campaign $campaign, Entity $entity)\n    {\n        $this->campaign($campaign)->authEntityView($entity);\n\n        $tags = $entity->tags;\n        $tagClasses = [];\n        foreach ($tags as $tag) {\n            $tagClasses[] = 'kanka-tag-' . $tag->id;\n            $tagClasses[] = 'kanka-tag-' . $tag->slug;\n        }\n        $render = request()->get('render');\n        $hasImage = Avatar::entity($entity)->hasImage();\n\n        $tooltipText = $this->tooltipService->entity($entity)->campaign($campaign)->tooltip();\n\n        $tooltip = view('entities.components.tooltip')\n            ->with('campaign', $campaign)\n            ->with('entity', $entity)\n            ->with('tags', $entity->visibleTags())\n            ->with('hasImage', $hasImage)\n            ->with('tagClasses', $tagClasses)\n            ->with('render', $render)\n            ->with('tooltip', $tooltipText)\n            ->render();\n\n        return response()->json([\n            $tooltip,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Entity/TransformController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Entity;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\TransformEntityRequest;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Services\\Entity\\TransformService;\nuse App\\Services\\EntityTypeService;\nuse App\\Traits\\GuestAuthTrait;\n\nclass TransformController extends Controller\n{\n    use GuestAuthTrait;\n\n    public function __construct(\n        protected EntityTypeService $entityTypeService,\n        protected TransformService $transformService\n    ) {}\n\n    public function index(Campaign $campaign, Entity $entity)\n    {\n        // Policies will always fail if they can't resolve the user.\n        $this->authorize('move', $entity);\n\n        $entities = $this->entityTypeService\n            ->campaign($campaign)\n            ->exclude([$entity->entityType->id, config('entities.ids.bookmark')])\n            ->prepend(['' => __('entities/transform.fields.select_one')])\n            ->toSelect();\n\n        $confirm = $this->transformService->entity($entity)->confirm();\n\n        return view('entities.pages.transform.index', compact(\n            'campaign',\n            'entity',\n            'entities',\n            'campaign',\n            'confirm'\n        ));\n    }\n\n    public function transform(TransformEntityRequest $request, Campaign $campaign, Entity $entity)\n    {\n        $this->authorize('move', $entity);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        try {\n            /** @var EntityType $entityType */\n            $entityType = EntityType::inCampaign($campaign)->find($request->get('target'));\n            $this->transformService\n                ->campaign($campaign)\n                ->entity($entity)\n                ->entityType($entityType)\n                ->transform();\n\n            return redirect()\n                ->to($entity->url())\n                ->with('success', __('entities/transform.success', ['name' => $entity->name]));\n        } catch (TranslatableException $ex) {\n            return redirect()\n                ->route('entities.show', [$campaign, $entity])\n                ->with('error', __($ex->getMessage(), ['name' => $entity->name]));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/EntityCreatorController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Facades\\Module;\nuse App\\Http\\Requests\\QuickCreator\\StoreEntity;\nuse App\\Http\\Requests\\QuickCreator\\StorePost;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\Post;\nuse App\\Services\\Entity\\PopularService;\nuse App\\Services\\EntityTypeService;\nuse App\\Services\\QuickCreator\\ProcessService;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\View\\View;\n\nclass EntityCreatorController extends Controller\n{\n    protected Campaign $campaign;\n\n    public function __construct(\n        protected PopularService $popularService,\n        protected EntityTypeService $entityTypeService,\n        protected ProcessService $processService,\n    ) {\n        $this->middleware('auth');\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function selection(Request $request, Campaign $campaign)\n    {\n        $this->campaign = $campaign;\n\n        return $this->renderSelection(null);\n    }\n\n    public function form(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        return $this->renderForm($request, $campaign, $entityType);\n    }\n\n    public function post(Request $request, Campaign $campaign)\n    {\n        return $this->renderForm($request, $campaign);\n    }\n\n    public function store(StoreEntity $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('create', [$entityType, $campaign]);\n        $this->campaign = $campaign;\n\n        $this->processService\n            ->campaign($campaign)\n            ->user($request->user())\n            ->entityType($entityType)\n            ->request($request)\n            ->entity();\n\n        // Have a target? Return json for the js to handle it instead\n        $first = $this->processService->first();\n        if ($request->has('_target')) {\n            return response()->json([\n                '_target' => $request->get('_target'),\n                '_id' => $first->entityType->isCustom() ? $first->id : $first->child->id,\n                '_name' => $first->name,\n                '_multi' => $request->get('_multi'),\n            ]);\n        }\n\n        // Redirect the user to the edit form\n        if ($request->get('action') == 'edit') {\n            $entity = $first instanceof Post ? $first->entity : $first;\n            $editUrl = route('entities.edit', [$campaign, $entity]);\n\n            return response()->json([\n                'redirect' => $editUrl,\n            ]);\n        }\n\n        $successKey = 'entities.creator.success_multiple';\n        $success = trans_choice(\n            $successKey,\n            $this->processService->count(),\n            ['link' => implode(', ', $this->processService->links())]\n        );\n\n        // Continue creating more of the same kind\n        if ($request->get('action') == 'more') {\n            return $this->renderForm(new Request, $campaign, $entityType, $success);\n        }\n\n        return $this->renderSelection($success);\n    }\n\n    public function storePost(StorePost $request, Campaign $campaign)\n    {\n        // Make sure the user is allowed to create this kind of entity\n        $this->campaign = $campaign;\n        $this->authorize('recover', $this->campaign);\n\n        $this->processService\n            ->campaign($campaign)\n            ->request($request)\n            ->post();\n\n        // Have a target? Return json for the js to handle it instead\n        $first = $this->processService->first();\n        if ($request->has('_target')) {\n            return response()->json([\n                '_target' => $request->get('_target'),\n                '_id' => $first->id,\n                '_name' => $first->name,\n                '_multi' => $request->get('_multi'),\n            ]);\n        }\n\n        // Redirect the user to the edit form\n        if ($request->get('action') == 'edit') {\n            $editUrl = route('entities.posts.edit', [$campaign, $first->entity_id, $first->id]);\n\n            return response()->json([\n                'redirect' => $editUrl,\n            ]);\n        }\n\n        $successKey = 'entities.creator.success_multiple_posts';\n        $success = trans_choice(\n            $successKey,\n            $this->processService->count(),\n            ['link' => implode(', ', $this->processService->links())]\n        );\n\n        // Continue creating more of the same kind\n        if ($request->get('action') == 'more') {\n            return $this->renderForm(new Request, $campaign, null, $success);\n        }\n\n        return $this->renderSelection($success);\n    }\n\n    protected function renderSelection(?string $success)\n    {\n        // Content for the selector\n        $orderedEntityTypes = $this->orderedEntityTypes();\n\n        return view('entities.creator.selection', [\n            'campaign' => $this->campaign,\n            'entityTypes' => $orderedEntityTypes,\n            'new' => $success,\n            'popular' => $this->popularService->campaign($this->campaign)->user(auth()->user())->get(),\n        ]);\n    }\n\n    protected function renderForm(Request $request, Campaign $campaign, ?EntityType $entityType = null, ?string $success = null)\n    {\n        $this->campaign = $campaign;\n        // Make sure the user is allowed to create this kind of entity\n        if (! isset($entityType)) {\n            $this->authorize('recover', $campaign);\n        } else {\n            $this->authorize('create', [$entityType, $campaign]);\n        }\n\n        $origin = $request->get('origin');\n        $target = $request->get('target');\n        $multi = $request->get('multi');\n        $mode = $request->get('mode');\n        $source = $templates = null;\n        $view = 'form';\n\n        if ($mode === 'templates' && isset($entityType)) {\n            $templates = Entity::select('id', 'name', 'entity_id')\n                ->templates($entityType->id)\n                ->get();\n            $view = 'templates';\n        }\n\n        $orderedEntityTypes = $this->orderedEntityTypes();\n\n        if (isset($entityType)) {\n            $newLabel = __($entityType->pluralCode() . '.create.title');\n            $singular = Module::singular($entityType->id);\n            if ($entityType->isCustom()) {\n                $singular = $entityType->name();\n            }\n            if (! empty($singular)) {\n                $newLabel = __('crud.titles.new', ['module' => $singular]);\n            }\n        } else {\n            $newLabel = __('posts.create.title');\n            $singular = __('entities.article');\n        }\n\n        return view('entities.creator.' . $view, compact(\n            'campaign',\n            'entityType',\n            'entityType',\n            'origin',\n            'target',\n            'multi',\n            'mode',\n            'source',\n            'templates',\n            'orderedEntityTypes',\n            'success',\n            'newLabel',\n            'singular',\n        ))\n            ->with('campaign', $this->campaign);\n    }\n\n    /**\n     * Ordered entity types alphabetically to the user's local\n     */\n    protected function orderedEntityTypes(): Collection\n    {\n        $types = $this->entityTypeService\n            ->campaign($this->campaign)\n            ->user(auth()->user())\n            ->exclude([config('entities.ids.bookmark'), config('entities.ids.whiteboard')])\n            ->creatable()\n            ->ordered();\n\n        if (auth()->user()->can('recover', $this->campaign)) {\n            $types->add(__('entities.articles'));\n        }\n\n        return $types;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Events/EventController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Events;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Event;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass EventController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Event $event)\n    {\n        $this->campaign($campaign)->authEntityView($event->entity);\n\n        return redirect()->route('entities.children', [$campaign, $event->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Facebook/DeletionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Facebook;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Jobs\\Users\\DeleteUser;\nuse App\\Models\\JobLog;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass DeletionController extends Controller\n{\n    public function handle(Request $request)\n    {\n        $signedRequest = $request->input('signed_request');\n        if (! $signedRequest) {\n            return response()->json(['error' => 'missing signed_request'], 400);\n        }\n\n        $data = $this->parseSignedRequest($signedRequest, config('services.facebook.client_secret'));\n        if (! $data || ! isset($data['user_id'])) {\n            return response()->json(['error' => 'invalid signed_request'], 400);\n        }\n\n        $userId = $data['user_id'];\n        $confirmation = 'fbdel_' . $userId . '_' . time();\n\n        $user = User::where(['provider' => 'facebook', 'provider_id' => $userId])->first();\n        if ($user) {\n            Log::info('Facebook Deletion', ['user' => $user->id]);\n            DeleteUser::dispatch($user);\n\n            JobLog::create([\n                'name' => 'facebook:user-deletion',\n                'result' => $user->id,\n            ]);\n        }\n\n        return response()->json([\n            'url' => url('/facebook/data-deletion/status?code=' . $confirmation),\n            'confirmation_code' => $confirmation,\n        ]);\n    }\n\n    public function status(Request $request)\n    {\n        $code = $request->query('code');\n\n        return \"Data deletion processed. Confirmation code: {$code}\";\n    }\n\n    public function generate(Request $request)\n    {\n        if (app()->isProduction()) {\n            abort(404);\n        }\n\n        $secret = config('services.facebook.client_secret');\n\n        $payload = json_encode([\n            'user_id' => $request->query('user_id', '123456789'),\n            'issued_at' => time(),\n        ]);\n        $payloadB64 = rtrim(strtr(base64_encode($payload), '+/', '-_'), '=');\n        $sig = hash_hmac('sha256', $payloadB64, $secret, true);\n        $sigB64 = rtrim(strtr(base64_encode($sig), '+/', '-_'), '=');\n\n        return $sigB64 . '.' . $payloadB64;\n    }\n\n    private function parseSignedRequest($signedRequest, $secret)\n    {\n        [$encodedSig, $payload] = explode('.', $signedRequest, 2);\n\n        $sig = $this->base64UrlDecode($encodedSig);\n        $data = json_decode($this->base64UrlDecode($payload), true);\n\n        $expectedSig = hash_hmac('sha256', $payload, $secret, true);\n\n        if (! hash_equals($expectedSig, $sig)) {\n            return null;\n        }\n\n        return $data;\n    }\n\n    private function base64UrlDecode($input)\n    {\n        return base64_decode(strtr($input, '-_', '+/'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Families/FamilyController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Families;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Family;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass FamilyController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Family $family)\n    {\n        $this->campaign($campaign)->authEntityView($family->entity);\n\n        return redirect()->route('entities.children', [$campaign, $family->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Families/MemberController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Families;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCharacterFamily;\nuse App\\Models\\Campaign;\nuse App\\Models\\Family;\nuse App\\Renderers\\Layouts\\Family\\Character;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass MemberController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Family $family)\n    {\n        $this->campaign($campaign)->authEntityView($family->entity);\n\n        $options = ['campaign' => $campaign, 'family' => $family, 'm' => $this->descendantsMode()];\n        $relation = 'allMembers';\n        if ($this->filterToDirect()) {\n            $relation = 'members';\n        }\n        Datagrid::layout(Character::class)\n            ->route('families.members', $options);\n\n        $this->rows = $family\n            ->{$relation}()\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->with([\n                'characterFamilies',\n                'entity', 'entity.tags', 'entity.image', 'entity.entityType',\n                'entity.entityLocations',\n            ])\n            ->has('entity')\n            ->paginate();\n\n        // Ajax Datagrid\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('families.members', $family);\n    }\n\n    public function create(Campaign $campaign, Family $family)\n    {\n        $this->authorize('update', $family->entity);\n\n        return view('families.members.create', [\n            'campaign' => $campaign,\n            'model' => $family,\n        ]);\n    }\n\n    public function store(StoreCharacterFamily $request, Campaign $campaign, Family $family)\n    {\n        $this->authorize('update', $family->entity);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $newMembers = $family->members()->syncWithoutDetaching($request->characters);\n\n        return redirect()->route('entities.show', [$campaign, $family->entity])\n            ->with('success', trans_choice('families.members.create.success', count($newMembers['attached']), ['count' => count($newMembers['attached'])]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Families/TreeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Families;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Family;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass TreeController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Family $family)\n    {\n        $this->campaign($campaign)->authEntityView($family->entity);\n\n        return view('families.trees.index')\n            ->with('family', $family)\n            ->with('campaign', $campaign)\n            ->with('mode', 'vue');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Families/Trees/ApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Families\\Trees;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Family;\nuse App\\Services\\Families\\FamilyTreeService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\n\nclass ApiController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    protected FamilyTreeService $service;\n\n    public function __construct(FamilyTreeService $service)\n    {\n        $this->service = $service;\n    }\n\n    /**\n     * Provide the family tree info as a json\n     */\n    public function index(Campaign $campaign, Family $family): JsonResponse\n    {\n        $this->campaign($campaign)->authEntityView($family->entity);\n        if (auth()->check()) {\n            $this->service->user(auth()->user());\n        }\n\n        return response()->json(\n            $this\n                ->service\n                ->campaign($campaign)\n                ->family($family)\n                ->api()\n        );\n    }\n\n    /**\n     * Provide the entity info as a json\n     */\n    public function entity(Campaign $campaign, Entity $entity): JsonResponse\n    {\n        if (empty($entity->child)) {\n            abort(404);\n        }\n        $this->authorize('view', $entity);\n\n        return response()->json(\n            $this\n                ->service\n                ->entity($entity)\n        );\n    }\n\n    /**\n     * Save the new config\n     */\n    public function save(Request $request, Campaign $campaign, Family $family): JsonResponse\n    {\n        $this->authorize('update', $family->entity);\n\n        if (! $campaign->premium()) {\n            return response()->json('You need to activate premium functions on the campaign to use this feature', 204);\n        }\n\n        return response()->json(\n            $this\n                ->service\n                ->family($family)\n                ->campaign($campaign)\n                ->save($request->get('data'))\n                ->api()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Filters/FormController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Filters;\n\nuse App\\Datagrids\\Filters\\CharacterFilter;\nuse App\\Datagrids\\Filters\\CustomEntityFilter;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Relation;\nuse App\\Services\\FilterService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse Exception;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Str;\nuse ReflectionClass;\n\nclass FormController extends Controller\n{\n    use CampaignAware;\n    use EntityTypeAware;\n\n    public function __construct(protected FilterService $filterService)\n    {\n        $this->middleware(['auth']);\n    }\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('access', $campaign);\n\n        $plural = Str::plural(Str::remove('-', $entityType->code));\n        $route = $entityType->hasEntity() ? 'entities.index' : $plural . '.index';\n        $this->entityType($entityType);\n\n        if ($entityType->isCustom()) {\n            $this->filterService\n                ->request($request)\n                ->entityType($entityType)\n                ->campaign($campaign)\n                ->build();\n\n            /** @var CustomEntityFilter $filters */\n            $filters = app()->make(CustomEntityFilter::class);\n            $filters->campaign($campaign)->entityType($entityType)->build();\n\n            return view('filters.form')\n                ->with('filters', $filters->filters())\n                ->with('campaign', $campaign)\n                ->with('entityType', $entityType)\n                ->with('filterService', $this->filterService);\n        }\n        $model = $entityType->getClass();\n\n        try {\n            return $this->campaign($campaign)->render($model, $plural, $route);\n        } catch (Exception $e) {\n            if (app()->hasDebugModeEnabled()) {\n                throw $e;\n            }\n\n            return redirect()->route('dashboard', $campaign);\n        }\n    }\n\n    public function connection(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        $route = 'relations.index';\n        $model = new Relation;\n        $plural = 'relations';\n\n        try {\n            return $this->campaign($campaign)->render($model, $plural, $route, 'entities/relations');\n        } catch (Exception $e) {\n            return redirect()->route('dashboard', $campaign);\n        }\n    }\n\n    protected function render(mixed $model, string $plural, string $route, ?string $langKey = null)\n    {\n        if (isset($this->entityType)) {\n            $this->filterService\n                ->entityType($this->entityType)\n                ->campaign($this->campaign)\n                ->build();\n        } else {\n            $this->filterService\n                ->campaign($this->campaign)\n                ->model($model)\n                ->make($plural);\n        }\n        $mode = request()->get('m');\n\n        $reflect = new ReflectionClass($model);\n        $filtersClass = 'App\\Datagrids\\Filters\\\\' . $reflect->getShortName() . 'Filter';\n        /** @var CharacterFilter $filters */\n        $filters = app()->make($filtersClass);\n        if ($filters) {\n            $filters->campaign($this->campaign)->build();\n        }\n\n        return view('filters.form')\n            ->with('campaign', $this->campaign)\n            ->with('filters', $filters->filters())\n            ->with('filterService', $this->filterService)\n            ->with('route', $route)\n            ->with('entityModel', $model)\n            ->with('entityType', $this->entityType ?? null)\n            ->with('count', 0)\n            ->with('langKey', $langKey ?? $plural)\n            ->with('hasAttributeFilters', false)\n            ->with('activeFilters', $this->filterService->activeFiltersCount())\n            ->with('clipboardFilters', $this->filterService->clipboardFilters())\n            ->with('mode', $mode);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Filters/SaveController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Filters;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\Bookmarks\\RoutingService;\nuse App\\Services\\Campaign\\Sidebar\\SetupService;\nuse App\\Services\\FilterService;\n\nclass SaveController extends Controller\n{\n    public function __construct(\n        protected FilterService $filterService,\n        protected RoutingService $routingService,\n        protected SetupService $sidebarService)\n    {\n        $this->middleware(['auth']);\n    }\n\n    protected function render(Campaign $campaign, EntityType $entityType)\n    {\n        $mode = request()->get('m');\n        $parents = $this->sidebarService->campaign($campaign)->availableParents();\n\n        return view('filters.save_form')\n            ->with('campaign', $campaign)\n            ->with('entityType', $entityType)\n            ->with('parents', $parents)\n            ->with('mode', $mode);\n    }\n\n    public function save(Campaign $campaign, EntityType $entityType)\n    {\n        $this->authorize('create', Bookmark::class);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        // Check limit\n        if (Bookmark::count() >= config('limits.campaigns.bookmarks') && ! $campaign->boosted()) {\n            return redirect()->back()->withErrors(__('filters.bookmark.premium'));\n        }\n\n        $this->filterService\n            ->entityType($entityType)\n            ->campaign($campaign)\n            ->build();\n\n        $filters = $entityType->isCustom()\n            ? $this->filterService->clipboardFilters()\n            : 'm=' . request()->get('m') . '&' . $this->filterService->clipboardFilters();\n\n        $bookmark = new Bookmark;\n        $bookmark->campaign_id = $campaign->id;\n        $bookmark->name = request()->get('name', __('filters.bookmark.name', ['module' => $entityType->plural()]));\n        $bookmark->icon = request()->get('icon', null);\n        $bookmark->entity_type_id = $entityType->id;\n        $bookmark->filters = $filters;\n        $bookmark->parent = $entityType->isCustom() ? null : $entityType->pluralCode();\n        $bookmark->save();\n\n        $route = $this->routingService->campaign($campaign)->bookmark($bookmark)->url();\n\n        return redirect()->to($route)->withSuccess(__('filters.bookmark.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Front/HelperController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Front;\n\nuse App\\Models\\MiscModel;\nuse Exception;\nuse Illuminate\\Support\\Str;\n\nclass HelperController\n{\n    public function apiFilters()\n    {\n        $type = request()->get('type');\n        if (empty($type)) {\n            return redirect()->route('home');\n        }\n\n        // Try creating the object\n        try {\n            $className = \"\\App\\Models\\\\\" . Str::camel($type);\n            $misc = new \\ReflectionClass($className);\n            if (! $misc->isInstantiable()) {\n                abort(404);\n            }\n            /** @var MiscModel $misc */\n            $misc = new $className;\n            if (! $misc instanceof MiscModel) {\n                abort(404);\n            }\n            // @phpstan-ignore-next-line\n            $filters = $misc->getFilterableColumns();\n\n            return view('helpers.api-filters', compact(\n                'filters',\n                'type'\n            ));\n        } catch (Exception $e) {\n            abort(404);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/FrontendPrepareController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nclass FrontendPrepareController extends Controller\n{\n    public function index()\n    {\n        return response()->json();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/BrowseController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Gallery\\BrowseService;\nuse Illuminate\\Http\\Request;\n\nclass BrowseController extends Controller\n{\n    protected BrowseService $service;\n\n    public function __construct(BrowseService $browseService)\n    {\n        $this->service = $browseService;\n    }\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        $this->authorize('galleryBrowse', $campaign);\n\n        return response()->json(\n            $this->service\n                ->campaign($campaign)\n                ->user($request->user())\n                ->folder($request->get('folder'))\n                ->term($request->get('term'))\n                ->images()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/CreateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Gallery\\CreateFolder;\nuse App\\Models\\Campaign;\nuse App\\Services\\Gallery\\CreateService;\n\nclass CreateController extends Controller\n{\n    protected CreateService $service;\n\n    public function __construct(CreateService $service)\n    {\n        $this->middleware('auth');\n        $this->service = $service;\n    }\n\n    public function index(Campaign $campaign, CreateFolder $request)\n    {\n        $this->authorize('gallery', $campaign);\n\n        $folder = $this->service\n            ->campaign($campaign)\n            ->create($request);\n\n        return response()->json(['folder' => $folder]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/DeleteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Gallery\\DeleteImages;\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\nuse App\\Services\\Gallery\\DeleteService;\nuse App\\Services\\Gallery\\StorageService;\n\nclass DeleteController extends Controller\n{\n    protected DeleteService $service;\n\n    protected StorageService $storage;\n\n    public function __construct(DeleteService $service, StorageService $storageService)\n    {\n        $this->middleware('auth');\n        $this->service = $service;\n        $this->storage = $storageService;\n    }\n\n    public function destroy(Campaign $campaign, DeleteImages $request)\n    {\n        $this->authorize('gallery', $campaign);\n\n        $count = $this->service\n            ->campaign($campaign)\n            ->delete($request->get('images'));\n\n        $this->storage->campaign($campaign)->clearCache();\n\n        return response()->json([\n            'toast' => trans_choice('gallery.delete.success', $count, ['count' => $count]),\n            'used' => $this->storage->uncachedUsedSpace(),\n        ]);\n    }\n\n    public function file(Campaign $campaign, Image $image)\n    {\n        $this->authorize('gallery', $campaign);\n\n        $image->delete();\n        $this->storage->campaign($campaign)->clearCache();\n\n        return response()->json([\n            'used' => $this->storage->uncachedUsedSpace(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/ImageController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\nuse App\\Services\\Gallery\\SetupService;\n\nclass ImageController extends Controller\n{\n    protected SetupService $service;\n\n    public function __construct(SetupService $service)\n    {\n        $this->middleware('auth');\n        $this->service = $service;\n    }\n\n    public function show(Campaign $campaign, Image $image)\n    {\n        $this->authorize('gallery', $campaign);\n\n        if ($image->isFolder()) {\n            return response()->json(\n                $this->service\n                    ->user(auth()->user())\n                    ->campaign($campaign)\n                    ->image($image)\n                    ->filters(request()->only('unused'))\n                    ->sort(request()->only('sort'))\n                    ->open()\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/SearchController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Gallery\\SetupService;\nuse Illuminate\\Http\\Request;\n\nclass SearchController extends Controller\n{\n    protected SetupService $service;\n\n    public function __construct(SetupService $service)\n    {\n        $this->middleware('auth');\n        $this->service = $service;\n    }\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        $this->authorize('gallery', $campaign);\n\n        $term = mb_trim($request->get('term') ?? '');\n\n        return response()->json(\n            $this->service\n                ->user($request->user())\n                ->campaign($campaign)\n                ->term($term)\n                ->filters($request->only('unused'))\n                ->sort($request->only('sort'))\n                ->search()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/SetupController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Gallery\\SetupService;\n\nclass SetupController extends Controller\n{\n    protected SetupService $service;\n\n    public function __construct(SetupService $service)\n    {\n        $this->middleware('auth');\n        $this->service = $service;\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('gallery', $campaign);\n\n        return response()->json(\n            $this->service\n                ->user(auth()->user())\n                ->campaign($campaign)\n                ->setup()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/ShowController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Resources\\GalleryFileFull;\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\n\nclass ShowController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function show(Campaign $campaign, Image $image)\n    {\n        $this->authorize('gallery', $campaign);\n\n        return new GalleryFileFull($image);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/TiptapController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Resources\\Gallery\\Tiptap\\ImageResource;\nuse App\\Models\\Campaign;\nuse App\\Services\\Gallery\\TiptapService;\nuse Illuminate\\Http\\Request;\n\nclass TiptapController extends Controller\n{\n    public function __construct(protected TiptapService $service) {}\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        $this->authorize('galleryBrowse', $campaign);\n\n        return ImageResource::collection(\n            $this->service\n                ->campaign($campaign)\n                ->user($request->user())\n                ->request($request)\n                ->images()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/UpdateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Gallery\\UpdateFile;\nuse App\\Http\\Requests\\Gallery\\UpdateFiles;\nuse App\\Http\\Requests\\Gallery\\UpdateFocus;\nuse App\\Http\\Resources\\GalleryFile;\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\nuse App\\Services\\Gallery\\UpdateService;\n\nclass UpdateController extends Controller\n{\n    protected UpdateService $service;\n\n    public function __construct(UpdateService $service)\n    {\n        $this->middleware('auth');\n        $this->service = $service;\n    }\n\n    public function bulk(UpdateFiles $request, Campaign $campaign)\n    {\n        $this->authorize('gallery', $campaign);\n\n        $count = $this->service\n            ->campaign($campaign)\n            ->files($request->get('files'))\n            ->update($request->only('visibility_id', 'folder_id', 'folder_home'));\n\n        return response()->json(['toast' => trans_choice('gallery.update.success', $count, ['count' => $count])]);\n    }\n\n    public function process(UpdateFile $request, Campaign $campaign, Image $image)\n    {\n        $this->authorize('gallery', $campaign);\n\n        $image->update(\n            $request->only(['name', 'visibility_id'])\n        );\n\n        return (new GalleryFile($image))->campaign($campaign);\n    }\n\n    public function focus(UpdateFocus $request, Campaign $campaign, Image $image)\n    {\n        $this->authorize('gallery', $campaign);\n\n        $image->update(\n            $request->only(['focus_x', 'focus_y'])\n        );\n\n        return (new GalleryFile($image))->campaign($campaign);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/UploadController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Gallery\\UploadFile;\nuse App\\Http\\Requests\\Gallery\\UploadFiles;\nuse App\\Http\\Requests\\Gallery\\UploadUrl;\nuse App\\Models\\Campaign;\nuse App\\Services\\Gallery\\StorageService;\nuse App\\Services\\Gallery\\UploadService;\nuse Intervention\\Image\\Exceptions\\DecoderException;\n\nclass UploadController extends Controller\n{\n    protected UploadService $service;\n\n    protected StorageService $storage;\n\n    public function __construct(UploadService $uploadService, StorageService $storageService)\n    {\n        $this->service = $uploadService;\n        $this->storage = $storageService;\n    }\n\n    public function file(UploadFile $request, Campaign $campaign)\n    {\n        $this->authorize('galleryUpload', $campaign);\n\n        try {\n            return response()->json(\n                $this->service\n                    ->campaign($campaign)\n                    ->user($request->user())\n                    ->file($request->file('file'))\n            );\n        } catch (TranslatableException $e) {\n            return response()->json(\n                ['error' => $e->getTranslatedMessage()],\n                421\n            );\n        }\n    }\n\n    public function files(UploadFiles $request, Campaign $campaign)\n    {\n        $this->authorize('galleryUpload', $campaign);\n\n        try {\n            $files = $this->service\n                ->campaign($campaign)\n                ->user($request->user())\n                ->folder($request->get('folder_id', ''))\n                ->files((array) $request->file('files'));\n            $this->storage->campaign($campaign)->clearCache();\n\n            return response()->json([\n                'files' => $files,\n                'used' => $this->storage->uncachedUsedSpace(),\n            ]);\n        } catch (TranslatableException $e) {\n            return response()->json(\n                ['error' => $e->getTranslatedMessage()],\n                421\n            );\n        }\n    }\n\n    public function url(UploadUrl $request, Campaign $campaign)\n    {\n        $this->authorize('galleryUpload', $campaign);\n\n        try {\n            return response()->json(\n                $this->service\n                    ->campaign($campaign)\n                    ->user($request->user())\n                    ->request($request)\n                    ->url($request->get('url'))\n            );\n        } catch (TranslatableException $e) {\n            return response()->json(\n                ['error' => $e->getTranslatedMessage()],\n                421\n            );\n        } catch (DecoderException) {\n            return response()->json(\n                ['error' => __('gallery.download.errors.invalid_url')],\n                422\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Gallery/VisibilityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Gallery;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\EditPostVisibility;\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\n\nclass VisibilityController extends Controller\n{\n    public function index(Campaign $campaign, Image $image)\n    {\n        $this->authorize('gallery', $campaign);\n\n        return view('gallery.file.visibility.edit')\n            ->with('campaign', $campaign)\n            ->with('image', $image);\n    }\n\n    public function save(EditPostVisibility $request, Campaign $campaign, Image $image)\n    {\n        $this->authorize('gallery', $campaign);\n\n        if (request()->ajax()) {\n            return response()->json();\n        }\n\n        $image->visibility_id = $request->visibility_id;\n        $image->save();\n\n        return redirect()->back()->withSuccess(__('entities/image.visibility.updated'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/GalleryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\n\nclass GalleryController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('gallery', $campaign);\n\n        $folder = null;\n        $folderId = request()->get('folder_id');\n        if (! empty($folderId)) {\n            $folder = Image::where('is_folder', '1')->where('id', $folderId)->firstOrFail();\n        }\n\n        return view('gallery.index', compact('campaign', 'folder'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/HealthController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Events\\DiagnosingHealth;\nuse Illuminate\\Support\\Facades\\Event;\n\nclass HealthController extends Controller\n{\n    public function index()\n    {\n        $exception = null;\n\n        try {\n            Event::dispatch(new DiagnosingHealth);\n        } catch (\\Throwable $e) {\n            if (app()->hasDebugModeEnabled()) {\n                throw $e;\n            }\n\n            report($e);\n\n            $exception = $e->getMessage();\n        }\n\n        return response()->view('health', [\n            'exception' => $exception,\n        ], status: $exception ? 500 : 200);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/HistoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\HistoryRequest;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityLog;\nuse App\\Models\\Post;\n\nclass HistoryController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(HistoryRequest $request, Campaign $campaign)\n    {\n        $this->authorize('recover', $campaign);\n\n        $pagnation = $campaign->superboosted() ? 25 : 10;\n        $models = EntityLog::where(function ($query) use ($campaign) {\n            $query->where(function ($sub) use ($campaign) {\n                $sub->where('parent_type', Entity::class)\n                    ->whereIn('parent_id', function ($entities) use ($campaign) {\n                        $entities\n                            ->select('id')\n                            ->from('entities')\n                            ->where('entities.campaign_id', $campaign->id);\n                    });\n            })->orWhere(function ($query) use ($campaign) {\n                $query->where('parent_type', Post::class)\n                    ->whereIn('parent_id', Post::has('entity')\n                        ->join('entities', 'entities.id', '=', 'posts.entity_id')\n                        ->where('entities.campaign_id', $campaign->id)\n                        ->select('posts.id'));\n            });\n        })\n            ->with([\n                'user',\n                'impersonator',\n                'parent' => function ($morphTo) {\n                    $morphTo->withTrashed()->morphWith([\n                        Entity::class => ['entityType'],\n                        Post::class => ['entity' => fn ($q) => $q->withTrashed(), 'entity.entityType'],\n                    ]);\n                },\n            ])\n            ->filter($request->only('action', 'user'))\n            ->orderBy('entity_logs.created_at', 'desc')\n            // ->where('parent.campaign_id', '=', $campaign->id)\n            ->paginate($pagnation);\n\n        $previous = null;\n        $superboosted = $campaign->superboosted();\n\n        $users = $campaign\n            ->members()\n            ->leftJoin('users as u', 'u.id', 'campaign_user.user_id')\n            ->with(['user'])\n            ->orderBy('u.name')\n            ->get();\n        $user = $request->get('user');\n        $action = $request->get('action');\n        $actions = [\n            '' => __('history.filters.all-actions'),\n            EntityLog::ACTION_CREATE => __('entities/logs.actions.create'),\n            EntityLog::ACTION_UPDATE => __('entities/logs.actions.update'),\n            EntityLog::ACTION_DELETE => __('entities/logs.actions.delete'),\n            EntityLog::ACTION_RESTORE => __('entities/logs.actions.restore'),\n        ];\n\n        $filters = [];\n        if (! empty($user)) {\n            $filters['user'] = (int) $user;\n        }\n        if (! empty($action)) {\n            $filters['action'] = (int) $action;\n        }\n\n        return view('history.index', compact(\n            'models',\n            'previous',\n            'campaign',\n            'superboosted',\n            'users',\n            'user',\n            'action',\n            'actions',\n            'filters',\n        ));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/HomeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Support\\Facades\\Session;\n\nclass HomeController extends Controller\n{\n    public function index()\n    {\n        if (auth()->guest()) {\n            return redirect()->route('login');\n        }\n\n        return $this->back();\n    }\n\n    /**\n     * When a user hits /, or logs in, figure out where to take them.\n     * Last campaign? Any campaign? Create a new campaign?\n     */\n    protected function back()\n    {\n        // If we have a success message, save it for the redirect (for example when deleting a campaign)\n        $with = Session::get('success');\n\n        // Go to the user's last campaign, if any\n        $last = auth()->user()->last_campaign_id;\n        if (! empty($last)) {\n            /** @var ?Campaign $lastCampaign */\n            $lastCampaign = Campaign::acl($last)->first();\n            if ($lastCampaign) {\n                return redirect()->route('dashboard', $last)->with('success', $with);\n            }\n        }\n\n        // No valid last campaign? Let's redirect to the last campaign the user had\n        $campaigns = auth()->user()->campaigns;\n        foreach ($campaigns as $campaign) {\n            return redirect()->route('dashboard', $campaign)->with('success', $with);\n        }\n\n        // No campaign? Ask the user to create one\n        return redirect()->route('start')->with('success', $with);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/InvitationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Exceptions\\RequireLoginException;\nuse App\\Models\\User;\nuse App\\Services\\InviteService;\nuse App\\Services\\Users\\CampaignService;\nuse Exception;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass InvitationController extends Controller\n{\n    protected InviteService $inviteService;\n\n    protected CampaignService $campaignService;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(InviteService $inviteService, CampaignService $campaignService)\n    {\n        $this->inviteService = $inviteService;\n        $this->campaignService = $campaignService;\n    }\n\n    /**\n     * @param  string  $token\n     * @return RedirectResponse\n     */\n    public function join($token)\n    {\n        try {\n            if (auth()->check()) {\n                $this->inviteService\n                    ->user(auth()->user());\n            }\n            $campaign = $this->inviteService\n                ->useToken($token)\n                ->campaign();\n\n            if (auth()->check()) {\n                $this->campaignService\n                    ->user(auth()->user())\n                    ->campaign($campaign)\n                    ->set();\n            }\n\n            return redirect()->to('/');\n        } catch (RequireLoginException $e) {\n            return redirect()->route('login')->with('info', $e->getMessage());\n        } catch (Exception $e) {\n            if (auth()->guest()) {\n                return redirect()->route('login')->withErrors($e->getMessage());\n            }\n            // Let's redirect the user to their first campaign, to handle the error message, or on start otherwise\n            $campaign = auth()->user()->campaigns->first();\n            if (! $campaign) {\n                return redirect()->route('start')->withError($e->getMessage());\n            }\n\n            return redirect()\n                ->route('dashboard', $campaign)\n                ->withErrors($e->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Items/EntityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Items;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Item;\nuse App\\Renderers\\Layouts\\Item\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass EntityController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Item $item)\n    {\n        $this->campaign($campaign)->authEntityView($item->entity);\n\n        $options = ['campaign' => $campaign, 'item' => $item];\n\n        Datagrid::layout(Entity::class)\n            ->route('items.inventories', $options);\n\n        $this->rows = $item\n            ->entities()\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->with(['image', 'entityType', 'tags'])\n            ->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('items.entities', $item);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Items/ItemController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Items;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Item;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass ItemController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Item $item)\n    {\n        $this->campaign($campaign)->authEntityView($item->entity);\n\n        return redirect()->route('entities.children', [$campaign, $item->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Journals/JournalController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Journals;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Journal;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass JournalController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Journal $journal)\n    {\n        $this->campaign($campaign)->authEntityView($journal->entity);\n\n        return redirect()->route('entities.children', [$campaign, $journal->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Layout/NavigationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Layout;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\Layout\\NavigationService;\n\nclass NavigationController extends Controller\n{\n    public function __construct(protected NavigationService $navigationService)\n    {\n        $this->middleware('auth');\n    }\n\n    public function index()\n    {\n        $data = $this->navigationService\n            ->user(auth()->user())\n            ->data();\n\n        return response()->json(\n            $data\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Locations/CharacterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Locations;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Location;\nuse App\\Renderers\\Layouts\\Location\\Character;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass CharacterController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Location $location)\n    {\n        $this->campaign($campaign)->authEntityView($location->entity);\n\n        $options = ['campaign' => $campaign, 'location' => $location, 'm' => $this->descendantsMode()];\n        $filters = [];\n        if ($this->filterToDirect()) {\n            $filters['location_id'] = $location->id;\n        }\n        Datagrid::layout(Character::class)\n            ->route('locations.characters', $options);\n\n        $this->rows = $location\n            ->allCharacters($this->filterToDirect())\n            ->filter($filters)\n            ->filteredCharacters()\n            ->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('locations.characters', $location);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Locations/EventController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Locations;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Location;\nuse App\\Renderers\\Layouts\\Location\\Event;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass EventController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Location $location)\n    {\n        $this->campaign($campaign)->authEntityView($location->entity);\n\n        $options = ['campaign' => $campaign, 'location' => $location, 'm' => $this->descendantsMode()];\n        $filters = [];\n        if ($this->filterToDirect()) {\n            $filters['locations'] = [$location->id];\n        }\n        Datagrid::layout(Event::class)\n            ->route('locations.events', $options);\n\n        $this->rows = $location\n            ->allEvents()\n            ->filter($filters)\n            ->filteredEvents()\n            ->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return redirect()->to($location->getLink());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Locations/LocationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Locations;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Location;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass LocationController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Location $location)\n    {\n        $this->campaign($campaign)->authEntityView($location->entity);\n\n        return redirect()->route('entities.children', [$campaign, $location->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Locations/QuestController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Locations;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Location;\nuse App\\Renderers\\Layouts\\Location\\Quest;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass QuestController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Location $location)\n    {\n        $this->campaign($campaign)->authEntityView($location->entity);\n\n        $options = ['campaign' => $campaign, 'location' => $location, 'm' => $this->descendantsMode()];\n        $filters = [];\n        if ($this->filterToDirect()) {\n            $filters['location_id'] = $location->id;\n        }\n        Datagrid::layout(Quest::class)\n            ->route('locations.quests', $options);\n\n        $this->rows = $location\n            ->allQuests()\n            ->filter($filters)\n            ->filteredQuests()\n            ->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return redirect()->to($location->getLink());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/Bulks/GroupController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps\\Bulks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Controllers\\Datagrid2\\BulkControllerTrait;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapGroup;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Http\\Request;\n\nclass GroupController extends Controller\n{\n    use BulkControllerTrait;\n    use CampaignAware;\n\n    public function index(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        $action = $request->get('action');\n        $models = $request->get('model');\n        if (! in_array($action, $this->validBulkActions()) || empty($models)) {\n            return redirect()->back();\n        }\n\n        if ($action === 'edit') {\n            return $this->bulkBatch(route('maps.groups.bulk', [$campaign, 'map' => $map]), '_map-group', $models);\n        }\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $count = $this->bulkProcess($request, MapGroup::class);\n\n        return redirect()\n            ->route('maps.map_groups.index', [$campaign, 'map' => $map])\n            ->with('success', trans_choice('maps/groups.bulks.' . $action, $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/Bulks/LayerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps\\Bulks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Controllers\\Datagrid2\\BulkControllerTrait;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapLayer;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Http\\Request;\n\nclass LayerController extends Controller\n{\n    use BulkControllerTrait;\n    use CampaignAware;\n\n    public function index(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        $this->campaign = $campaign;\n        $action = $request->get('action');\n        $models = $request->get('model');\n        if (! in_array($action, $this->validBulkActions()) || empty($models)) {\n            return redirect()->back();\n        }\n\n        if ($action === 'edit') {\n            return $this->campaign($campaign)->bulkBatch(route('maps.layers.bulk', [$campaign, 'map' => $map]), '_map-layer', $models);\n        }\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $count = $this->bulkProcess($request, MapLayer::class);\n\n        return redirect()\n            ->route('maps.map_layers.index', [$campaign, $map])\n            ->with('success', trans_choice('maps/layers.bulks.' . $action, $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/Bulks/MarkerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps\\Bulks;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Controllers\\Datagrid2\\BulkControllerTrait;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapMarker;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Http\\Request;\n\nclass MarkerController extends Controller\n{\n    use BulkControllerTrait;\n    use CampaignAware;\n\n    public function index(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n        $action = $request->get('action');\n        $models = $request->get('model');\n        if (! in_array($action, $this->validBulkActions()) || empty($models)) {\n            return redirect()->back();\n        }\n\n        if ($action === 'edit') {\n            return $this->campaign($campaign)->bulkBatch(route('maps.markers.bulk', [\n                'campaign' => $campaign, 'map' => $map]), '_map-marker', $models, $map);\n        }\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $count = $this->campaign($campaign)->bulkProcess($request, MapMarker::class);\n\n        return redirect()\n            ->route('maps.map_markers.index', [$campaign, 'map' => $map])\n            ->with('success', trans_choice('maps/markers.bulks.' . $action, $count, ['count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/ExploreController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapMarker;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Carbon\\Carbon;\nuse Exception;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass ExploreController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct()\n    {\n        $this->middleware('adless');\n    }\n\n    /**\n     * Exploration view for a map\n     */\n    public function index(Campaign $campaign, Map $map)\n    {\n        if (empty($map->entity)) {\n            abort(404);\n        }\n        $this->campaign($campaign)->authEntityView($map->entity);\n\n        if (! $map->explorable()) {\n            return redirect()\n                ->route('entities.show', [$campaign, $map->entity])\n                ->withError(__('maps.errors.explore.missing'));\n        }\n        if ($map->isChunked()) {\n            if ($map->chunkingError()) {\n                return redirect()\n                    ->route('entities.show', [$campaign, $map->entity]);\n            } elseif (! $map->chunkingReady()) {\n                return redirect()\n                    ->route('entities.show', [$campaign, $map->entity]);\n            }\n        }\n        // Error handling\n        try {\n            $map->bounds();\n        } catch (Exception $e) {\n            return redirect()->route('entities.show', [$campaign, $map->entity])\n                ->with('error_raw', __('Error getting bounds from the map. This sometimes happens with animated WebP files, which aren\\'t supported. Please contact us on :discord or at at :email.', [\n                    'discord' => '<a href=\"http://kanka.io/go/discord\" class=\"text-link\">Discord</a>',\n                    'email' => '<a href=\"mailto:' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>',\n                ]));\n        }\n\n        return view('maps.explore')\n            ->with('map', $map)\n            ->with('campaign', $campaign);\n    }\n\n    /**\n     * Map ticker for updates to pointers\n     */\n    public function ticker(Campaign $campaign, Map $map)\n    {\n        $this->campaign($campaign)->authEntityView($map->entity);\n\n        $timestamp = request()->get('ts', time());\n        /** @var MapMarker[] $markers */\n        $markers = $map->markers()->where('updated_at', '>=', $timestamp)->get();\n        $data = [];\n        foreach ($markers as $marker) {\n            $data[] = [\n                'id' => $marker->id,\n                'longitude' => $marker->longitude,\n                'latitude' => $marker->latitude,\n            ];\n        }\n\n        return response()->json([\n            'ts' => Carbon::now(),\n            'markers' => $data,\n        ]);\n    }\n\n    /**\n     * Load only a chunk of the map and cache it for the user\n     */\n    public function chunks(Campaign $campaign, Map $map)\n    {\n        $headers = ['Expires', Carbon::now()->addDays(1)->toDateTimeString()];\n        if (! request()->has(['z', 'x', 'y'])) {\n            return response()\n                ->file(public_path('/images/map_chunks/transparent.png'), $headers);\n        }\n\n        $path = 'maps/' . $map->id . '/chunks/' . request()->get('z')\n            . '/' . request()->get('x') . '_' . request()->get('y')\n            . '.png';\n\n        if (! Storage::exists($path)) {\n            return response()\n                ->file(public_path('/images/map_chunks/transparent.png'), $headers);\n        }\n\n        return redirect()->to(Storage::url($path));\n        // return response()\n        //    ->file(Storage::path($path), $headers);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/GroupController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreMapGroup;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapGroup;\nuse App\\Renderers\\Layouts\\Map\\Group;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse Illuminate\\Support\\Arr;\n\nclass GroupController extends Controller\n{\n    use CampaignAware;\n    use HasDatagrid;\n    use HasSubview;\n\n    /**\n     * Index\n     */\n    public function index(Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        $options = ['map' => $map->id];\n\n        Datagrid::layout(Group::class)\n            ->route('maps.map_groups.index', $options);\n        $this->rows = $map\n            ->groups()\n            ->sort(request()->only(['o', 'k']), ['position' => 'asc'])\n            ->with(['map', 'parent'])\n            ->paginate(config('limits.pagination'));\n\n        $groups = $map\n            ->groups()\n            ->orderBy('position', 'asc')\n            ->with(['map'])\n            ->get();\n\n        $this->campaign($campaign);\n\n        if (request()->ajax()) {\n            return $this->datagridAjax();\n        }\n\n        return view('cruds.subview')\n            ->with([\n                'fullview' => 'maps.groups.index',\n                'model' => $map,\n                'entity' => $map->entity,\n                'campaign' => $this->campaign,\n                'rows' => $this->rows,\n                'groups' => $groups,\n                'mode' => $this->descendantsMode(),\n            ]);\n\n    }\n\n    public function show(Campaign $campaign, Map $map)\n    {\n        return redirect()->route('entities.show', [$campaign, $map->entity]);\n    }\n\n    public function create(Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        if (! auth()->user()->can('addGroup', [$map, $campaign])) {\n            return view('maps.form._groups_max')\n                ->with('campaign', $campaign)\n                ->with('map', $map)\n                ->with('max', config('limits.campaigns.maps.groups.premium'));\n        }\n\n        return view(\n            'maps.groups.create',\n            compact('map', 'campaign')\n        );\n    }\n\n    public function store(Campaign $campaign, Map $map, StoreMapGroup $request)\n    {\n        $this->authorize('update', $map->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        if (! auth()->user()->can('addGroup', [$map, $campaign])) {\n            return view('maps.form._groups_max')\n                ->with('campaign', $campaign)\n                ->with('map', $map)\n                ->with('max', config('limits.campaigns.maps.groups.premium'));\n        }\n        $model = new MapGroup;\n        $data = $request->only('name', 'position', 'entry', 'visibility_id', 'is_shown', 'parent_id');\n        if (Arr::exists($data, 'position')) {\n            $map->groups()->where('position', '>', $data['position'] - 1)->increment('position');\n        }\n        $data['map_id'] = $map->id;\n        $new = $model->create($data);\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('maps.map_groups.edit', [$campaign, 'map' => $map, $new])\n                ->withSuccess(__('maps/groups.create.success', ['name' => $new->name]));\n        } elseif ($request->has('submit-new')) {\n            return redirect()\n                ->route('maps.map_groups.create', [$campaign, 'map' => $map])\n                ->withSuccess(__('maps/groups.create.success', ['name' => $new->name]));\n        } elseif ($request->has('submit-explore')) {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map])\n                ->withSuccess(__('maps/groups.create.success', ['name' => $new->name]));\n        }\n\n        return redirect()\n            ->route('maps.map_groups.index', [$campaign, $map])\n            ->withSuccess(__('maps/groups.create.success', ['name' => $new->name]));\n    }\n\n    public function edit(Campaign $campaign, Map $map, MapGroup $mapGroup)\n    {\n        $this->authorize('update', $map->entity);\n        $model = $mapGroup;\n\n        return view(\n            'maps.groups.edit',\n            compact('map', 'model', 'campaign')\n        );\n    }\n\n    public function update(StoreMapGroup $request, Campaign $campaign, Map $map, MapGroup $mapGroup)\n    {\n        $this->authorize('update', $map->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $mapGroup->update($request->only('name', 'position', 'entry', 'visibility_id', 'is_shown', 'parent_id'));\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('maps.map_groups.edit', [$campaign, 'map' => $map, $mapGroup])\n                ->withSuccess(__('maps/groups.edit.success', ['name' => $mapGroup->name]));\n        } elseif ($request->has('submit-new')) {\n            return redirect()\n                ->route('maps.map_groups.create', [$campaign, 'map' => $map])\n                ->withSuccess(__('maps/groups.edit.success', ['name' => $mapGroup->name]));\n        } elseif ($request->has('submit-explore')) {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map])\n                ->withSuccess(__('maps/groups.edit.success', ['name' => $mapGroup->name]));\n        }\n\n        return redirect()\n            ->route('maps.map_groups.index', [$campaign, $map])\n            ->withSuccess(__('maps/groups.edit.success', ['name' => $mapGroup->name]));\n    }\n\n    public function destroy(Campaign $campaign, Map $map, MapGroup $mapGroup)\n    {\n        $this->authorize('update', $map->entity);\n\n        $mapGroup->delete();\n\n        return redirect()\n            ->route('maps.map_groups.index', [$campaign, $map])\n            ->withSuccess(__('maps/groups.delete.success', ['name' => $mapGroup->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/LayerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreMapLayer;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapLayer;\nuse App\\Renderers\\Layouts\\Map\\Layer;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\View\\View;\n\nclass LayerController extends Controller\n{\n    use CampaignAware;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        $options = ['campaign' => $campaign, 'map' => $map->id];\n\n        Datagrid::layout(Layer::class)\n            ->route('maps.map_layers.index', $options);\n        $this->rows = $map\n            ->layers()\n            ->sort(request()->only(['o', 'k']), ['position' => 'asc'])\n            ->with(['map', 'image'])\n            ->paginate(config('limits.pagination'));\n\n        $layers = $map\n            ->layers()\n            ->orderBy('position', 'asc')\n            ->with(['image'])\n            ->get();\n\n        $this->campaign($campaign);\n\n        if (request()->ajax()) {\n            return $this->datagridAjax();\n        }\n\n        return view('cruds.subview')\n            ->with([\n                'fullview' => 'maps.layers.index',\n                'model' => $map,\n                'entity' => $map->entity,\n                'campaign' => $this->campaign,\n                'rows' => $this->rows,\n                'layers' => $layers,\n                'mode' => $this->descendantsMode(),\n            ]);\n    }\n\n    public function show(Campaign $campaign, Map $map)\n    {\n        return redirect()\n            ->route('entities.show', [$campaign, $map->entity]);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        if (! auth()->user()->can('addLayer', [$map, $campaign])) {\n            return view('maps.form._layers_max')\n                ->with('campaign', $campaign)\n                ->with('map', $map)\n                ->with('max', config('limits.campaigns.maps.layers.premium'));\n        }\n\n        return view(\n            'maps.layers.create',\n            compact('map', 'campaign')\n        );\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(Campaign $campaign, Map $map, StoreMapLayer $request)\n    {\n        $this->authorize('update', $map->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        if (! auth()->user()->can('addLayer', [$map, $campaign])) {\n            return view('maps.form._groups_max')\n                ->with('campaign', $campaign)\n                ->with('map', $map)\n                ->with('max', config('limits.campaigns.maps.layers.premium'));\n        }\n\n        $model = new MapLayer;\n        $data = $request->only('name', 'position', 'entry', 'visibility_id', 'type_id', 'image_uuid');\n        if (Arr::exists($data, 'position')) {\n            $map->layers()->where('position', '>', $data['position'] - 1)->increment('position');\n        }\n        $data['map_id'] = $map->id;\n        $new = $model->create($data);\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('maps.map_layers.edit', [$campaign, 'map' => $map, $new])\n                ->withSuccess(__('maps/layers.create.success', ['name' => $new->name]));\n        } elseif ($request->haS('submit-new')) {\n            return redirect()\n                ->route('maps.map_layers.create', [$campaign, 'map' => $map])\n                ->withSuccess(__('maps/layers.create.success', ['name' => $new->name]));\n        } elseif ($request->has('submit-explore')) {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map])\n                ->withSuccess(__('maps/layers.create.success', ['name' => $new->name]));\n        }\n\n        return redirect()\n            ->route('maps.map_layers.index', [$campaign, $map])\n            ->withSuccess(__('maps/layers.create.success', ['name' => $new->name]));\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function edit(Campaign $campaign, Map $map, MapLayer $mapLayer)\n    {\n        $this->authorize('update', $map->entity);\n\n        // Migrate to gallery\n        //        if (!empty($mapLayer->image_path)) {\n        //            return view('maps.layers.migrate')\n        //                ->with('campaign', $campaign)\n        //                ->with('map', $map)\n        //                ->with('layer', $mapLayer)\n        //            ;\n        //        }\n\n        $model = $mapLayer;\n\n        return view(\n            'maps.layers.edit',\n            compact('campaign', 'map', 'model')\n        );\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function update(StoreMapLayer $request, Campaign $campaign, Map $map, MapLayer $mapLayer)\n    {\n        $this->authorize('update', $map->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $mapLayer->update($request->only('name', 'position', 'entry', 'visibility_id', 'type_id', 'image_uuid'));\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('maps.map_layers.edit', [$campaign, $map, $mapLayer])\n                ->withSuccess(__('maps/layers.create.success', ['name' => $mapLayer->name]));\n        } elseif ($request->haS('submit-new')) {\n            return redirect()\n                ->route('maps.map_layers.create', [$campaign, $map])\n                ->withSuccess(__('maps/layers.create.success', ['name' => $mapLayer->name]));\n        } elseif ($request->has('submit-explore')) {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map])\n                ->withSuccess(__('maps/layers.create.success', ['name' => $mapLayer->name]));\n        }\n\n        return redirect()\n            ->route('maps.map_layers.index', [$campaign, $map])\n            ->withSuccess(__('maps/layers.edit.success', ['name' => $mapLayer->name]));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Map $map, MapLayer $mapLayer)\n    {\n        $this->authorize('update', $map->entity);\n\n        $mapLayer->delete();\n\n        return redirect()\n            ->route('maps.map_layers.index', [$campaign, $map])\n            ->withSuccess(__('maps/layers.delete.success', ['name' => $mapLayer->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/Layers/MigrateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps\\Layers;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapLayer;\nuse App\\Services\\Maps\\MigrateLayerService;\nuse App\\Traits\\CampaignAware;\n\nclass MigrateController extends Controller\n{\n    use CampaignAware;\n\n    protected MigrateLayerService $service;\n\n    public function __construct(MigrateLayerService $migrateLayerService)\n    {\n        $this->service = $migrateLayerService;\n    }\n\n    public function index(Campaign $campaign, Map $map, MapLayer $mapLayer)\n    {\n        $this->authorize('update', $map->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        try {\n            $this->service->layer($mapLayer)->migrate();\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('maps.map_layers.edit', [$campaign, $map, $mapLayer])\n                ->with('error', $e->getTranslatedMessage());\n        } catch (\\Exception $e) {\n        }\n\n        return redirect()\n            ->route('maps.map_layers.edit', [$campaign, $map, $mapLayer])\n            ->withSuccess('Map layer image migrated.');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/MapController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass MapController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Map $map)\n    {\n        $this->campaign($campaign)->authEntityView($map->entity);\n\n        return redirect()->route('entities.children', [$campaign, $map->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/MarkerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps;\n\nuse App\\Facades\\Datagrid;\nuse App\\Facades\\FormCopy;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreMapMarker;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapMarker;\nuse App\\Renderers\\Layouts\\Map\\Marker;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\View\\View;\n\nclass MarkerController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    /**\n     * @var array fields from the input sent to the model\n     */\n    protected $fields = [\n        'entity_id', 'name', 'entry', 'longitude', 'latitude',\n        'colour', 'font_colour', 'opacity',\n        'shape_id',\n        'type_id', 'size_id', 'icon', 'custom_icon', 'custom_shape', 'visibility_id',\n        'is_draggable',\n        'group_id',\n        'pin_size',\n        'circle_radius', 'polygon_style',\n        'is_popupless',\n        'css',\n    ];\n\n    public function index(Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        $options = ['campaign' => $campaign, 'map' => $map->id];\n\n        Datagrid::layout(Marker::class)\n            ->route('maps.map_markers.index', $options);\n        $this->rows = $map\n            ->markers()\n            ->sort(request()->only(['o', 'k']), ['id' => 'desc'])\n            ->with(['map'])\n            ->paginate(config('limits.pagination'));\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('maps.markers.index', $map);\n    }\n\n    public function show(Campaign $campaign, Map $map)\n    {\n        return redirect()\n            ->route('entities.show', [$campaign, $map->entity]);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        $source = null;\n        if (request()->has('source')) {\n            $source = MapMarker::findOrFail(request()->get('source'));\n            FormCopy::request($request)->source($source);\n        }\n\n        $activeTab = 1;\n        if ($source) {\n            $activeTab = $source->shape_id;\n        }\n\n        return view(\n            'maps.markers.create',\n            compact('campaign', 'map', 'source', 'activeTab')\n        );\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(Campaign $campaign, Map $map, StoreMapMarker $request)\n    {\n        $this->authorize('update', $map->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $model = new MapMarker;\n        $data = $request->only($this->fields);\n        $data['map_id'] = $map->id;\n        $new = $model->create($data);\n\n        if ($request->has('submit-explore')) {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map, 'focus' => $new->id])\n                ->withSuccess(__('maps/markers.create.success', ['name' => $new->name]));\n        } elseif ($request->has('submit-update')) {\n            return redirect()\n                ->route('maps.map_markers.edit', [$campaign, $map, $new])\n                ->withSuccess(__('maps/markers.create.success', ['name' => $new->name]));\n        } elseif ($request->get('from') == 'explore') {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map, 'focus' => $new->id]);\n        }\n\n        return redirect()\n            ->route('maps.map_markers.index', [$campaign, $map, 'focus' => $new->id])\n            ->withSuccess(__('maps/markers.create.success', ['name' => $new->name]));\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function edit(Campaign $campaign, Map $map, MapMarker $mapMarker, string $from = '')\n    {\n        $this->authorize('update', $map->entity);\n        if ($mapMarker->map_id !== $map->id) {\n            abort(503);\n        }\n\n        $from = request()->get('from');\n        $model = $mapMarker;\n        $includeMap = true;\n        $activeTab = $mapMarker->shape_id;\n\n        return view(\n            'maps.markers.edit',\n            compact('map', 'campaign', 'model', 'includeMap', 'activeTab', 'from')\n        );\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function update(StoreMapMarker $request, Campaign $campaign, Map $map, MapMarker $mapMarker)\n    {\n        $this->authorize('update', $map->entity);\n        if ($mapMarker->map_id !== $map->id) {\n            abort(503);\n        }\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only($this->fields);\n        if (! request()->has('entity_id') && ! isset($data['entity_id'])) {\n            $data['entity_id'] = null;\n        }\n        $mapMarker->update($data);\n\n        if ($request->has('submit-explore')) {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map, 'focus' => $mapMarker->id])\n                ->withSuccess(__('maps/markers.edit.success', ['name' => $mapMarker->name]));\n        } elseif ($request->has('submit-update')) {\n            return redirect()\n                ->route('maps.map_markers.edit', [$campaign, $map, $mapMarker])\n                ->withSuccess(__('maps/markers.edit.success', ['name' => $mapMarker->name]));\n        } elseif ($request->get('from') == 'explore') {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map, 'focus' => $mapMarker->id]);\n        }\n\n        return redirect()\n            ->route('maps.map_markers.index', [$campaign, $map, '#tab_form-markers'])\n            ->withSuccess(__('maps/markers.edit.success', ['name' => $mapMarker->name]));\n    }\n\n    /**\n     * @return RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Map $map, MapMarker $mapMarker)\n    {\n        $this->authorize('update', $map->entity);\n        if ($mapMarker->map_id !== $map->id) {\n            abort(503);\n        }\n\n        $mapMarker->delete();\n\n        if (request()->get('from') == 'explore') {\n            return redirect()\n                ->route('maps.explore', [$campaign, $map]);\n        }\n\n        return redirect()\n            ->route('maps.map_markers.index', [$campaign, $map])\n            ->withSuccess(__('maps/markers.delete.success', ['name' => $mapMarker->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/Markers/DetailController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps\\Markers;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapMarker;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass DetailController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Map $map, MapMarker $mapMarker)\n    {\n        $this->campaign($campaign)->authEntityView($map->entity);\n        if (! empty($mapMarker->entity_id)) {\n            $this->campaign($campaign)->authEntityView($mapMarker->entity);\n        }\n\n        $name = $mapMarker->name;\n        if ($mapMarker->entity) {\n            $name = ! empty($mapMarker->name) ? $mapMarker->name : $mapMarker->entity->name;\n            $name = '<a href=\"' . $mapMarker->entity->url() . '\" target=\"_blank\" class=\"text-link\">' . $name . '</a>';\n        }\n        if (request()->has('mobile')) {\n            return response()->view('maps.markers.dialog_details', [\n                'marker' => $mapMarker,\n                'campaign' => $campaign,\n                'name' => $name,\n            ]);\n        }\n\n        return response()->json([\n            'body' => view('maps.markers.details', [\n                'marker' => $mapMarker,\n                'campaign' => $campaign,\n            ])->render(),\n            'name' => $name,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/Markers/MoveController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps\\Markers;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapMarker;\nuse Illuminate\\Http\\Request;\n\nclass MoveController extends Controller\n{\n    public function index(Request $request, Campaign $campaign, Map $map, MapMarker $mapMarker)\n    {\n        $this->authorize('update', $map->entity);\n\n        $mapMarker->update($request->only('latitude', 'longitude'));\n\n        return response()->json([\n            'success' => true,\n            'marker_id' => $mapMarker->id,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/PreviewController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass PreviewController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Map $map)\n    {\n        if (! $campaign->enabled('maps')) {\n            return redirect()->route('dashboard', $campaign)->with(\n                'error_raw',\n                __('campaigns.settings.errors.module-disabled', [\n                    'fix' => '<a href=\"' . route('campaign.modules', [$campaign, '#maps']) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n                ])\n            );\n        }\n\n        $this->campaign($campaign)->authEntityView($map->entity);\n\n        return view('maps.preview')\n            ->with('campaign', $campaign)\n            ->with('entity', $map->entity);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/Reorders/GroupController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps\\Reorders;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ReorderGroups;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapGroup;\n\nclass GroupController extends Controller\n{\n    public function index(ReorderGroups $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        $order = 1;\n        $ids = $request->get('group');\n        foreach ($ids as $id) {\n            $group = MapGroup::where('id', $id)->where('map_id', $map->id)->first();\n            if (empty($group)) {\n                continue;\n            }\n            $group->position = $order;\n            $group->updateQuietly();\n            $order++;\n        }\n        $order--;\n\n        return redirect()\n            ->route('maps.map_groups.index', [$campaign, 'map' => $map])\n            ->with('success', trans_choice('maps/groups.reorder.success', $order, ['count' => $order]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Maps/Reorders/LayerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Maps\\Reorders;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ReorderLayers;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\MapLayer;\n\nclass LayerController extends Controller\n{\n    /**\n     * Controls drag and drop reordering of map layers\n     */\n    public function index(ReorderLayers $request, Campaign $campaign, Map $map)\n    {\n        $this->authorize('update', $map->entity);\n\n        $order = 1;\n        $ids = $request->get('layer');\n        foreach ($ids as $id) {\n            $layer = MapLayer::where('id', $id)->where('map_id', $map->id)->first();\n            if (empty($layer)) {\n                continue;\n            }\n            $layer->position = $order;\n            $layer->updateQuietly();\n            $order++;\n        }\n        $order--;\n\n        return redirect()\n            ->route('maps.map_layers.index', [$campaign, $map])\n            ->with('success', trans_choice('maps/layers.reorder.success', $order, ['count' => $order]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Notes/NoteController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Notes;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Note;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass NoteController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Note $note)\n    {\n        $this->campaign($campaign)->authEntityView($note->entity);\n\n        return redirect()->route('entities.children', [$campaign, $note->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/NotificationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\User;\nuse App\\Services\\Layout\\NavigationService;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass NotificationController extends Controller\n{\n    protected NavigationService $navigationService;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(NavigationService $navigationService)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->navigationService = $navigationService;\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function index()\n    {\n        // Set all notifications as read\n        /** @var User $user */\n        $user = auth()->user();\n\n        $notifications = $user->notifications()->paginate();\n        // @phpstan-ignore-next-line\n        $user->unreadNotifications->markAsRead();\n\n        return view('notifications.index', compact('notifications'));\n    }\n\n    public function read($id)\n    {\n        $notification = auth()->user()->notifications()->where('id', $id)->first();\n        if (empty($notification)) {\n            abort(403);\n        }\n\n        $notification->markAsRead();\n\n        return response()->json(['success' => true]);\n    }\n\n    public function refresh()\n    {\n        /** @var User $user */\n        $user = auth()->user();\n\n        return response()->json(\n            $this->navigationService->user($user)->pull()\n        );\n    }\n\n    public function clearAll()\n    {\n        auth()->user()->notifications()->delete();\n\n        return redirect()\n            ->route('notifications')\n            ->with('success', __('notifications.clear.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Onboarding/InitialController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Onboarding;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Onboarding\\InitialRequest;\nuse App\\Models\\Campaign;\nuse App\\Services\\Onboarding\\InitialService;\nuse Illuminate\\Http\\Request;\n\nclass InitialController extends Controller\n{\n    public function __construct(protected InitialService $initialService) {}\n\n    public function save(InitialRequest $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $this->initialService\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->request($request)\n            ->save();\n\n        return response()->json([\n            'success' => true,\n            'redirect' => route('home', $campaign),\n        ]);\n    }\n\n    public function skip(Request $request, Campaign $campaign)\n    {\n        $this->authorize('update', $campaign);\n\n        $this->initialService\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->skip($request->get('reason', 'skip'));\n\n        return response()->json([\n            'success' => true,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Organisation/MemberController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Organisation;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreOrganisationMember;\nuse App\\Http\\Requests\\StoreOrganisationMembers;\nuse App\\Models\\Campaign;\nuse App\\Models\\Organisation;\nuse App\\Models\\OrganisationMember;\nuse App\\Renderers\\Layouts\\Organisation\\Member;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass MemberController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    protected string $view = 'organisations.members';\n\n    public function index(Campaign $campaign, Organisation $organisation)\n    {\n        $this->campaign($campaign)->authEntityView($organisation->entity);\n\n        $options = ['campaign' => $campaign, 'organisation' => $organisation];\n        $base = 'members';\n        if ($this->filterToAll()) {\n            $options['all'] = true;\n            $base = 'allMembers';\n        }\n        Datagrid::layout(Member::class)\n            ->route('organisations.members', $options)\n            ->actionParams(['from' => 'org']);\n\n        $this->rows = $organisation\n            ->{$base}()\n            ->select('organisation_member.*')\n            ->with([\n                'organisation', 'organisation.entity',\n                'organisation.entity.entityType' => function ($sub) {\n                    $sub->select('id', 'code');\n                },\n                'parent', 'parent.character', 'parent.character.entity',\n                'character', 'character.entity', 'character.entity.image',\n                'character.entity.entityType' => function ($sub) {\n                    $sub->select('id', 'code');\n                },\n                'character.entity.locations'])\n            ->has('character')\n            ->has('character.entity')\n            ->leftJoin('characters as c', 'c.id', 'organisation_member.character_id')\n            ->sort(request()->only(['o', 'k']), ['c.name' => 'asc'])\n            ->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('organisations.members', $organisation);\n    }\n\n    /**\n     * Show the form for creating a new resource.\n     */\n    public function create(Campaign $campaign, Organisation $organisation)\n    {\n        $this->authorize('member', $organisation);\n\n        return view($this->view . '.create', [\n            'model' => $organisation,\n            'campaign' => $campaign,\n        ]);\n    }\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreOrganisationMembers $request, Campaign $campaign, Organisation $organisation)\n    {\n        $this->authorize('member', $organisation);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $count = 0;\n        foreach ($request->get('characters', []) as $character) {\n            $relation = OrganisationMember::create(['character_id' => $character, 'organisation_id' => $organisation->id] + $request->except('characters'));\n            $count++;\n        }\n\n        return redirect()->route('entities.show', [$campaign, $organisation->entity])\n            ->with('success', trans_choice('organisations.members.create.success_multiple', $count, ['name' => $organisation->name, 'count' => $count]));\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Organisation $organisation, OrganisationMember $organisationMember)\n    {\n        $this->authorize('member', $organisation);\n\n        return view($this->view . '.show', [\n            'campaign' => $campaign,\n            'model' => $organisation,\n            'member' => $organisationMember,\n        ]);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Organisation $organisation, OrganisationMember $organisationMember)\n    {\n        $this->authorize('member', $organisation);\n\n        return view($this->view . '.edit', [\n            'model' => $organisation,\n            'member' => $organisationMember,\n            'campaign' => $campaign,\n        ]);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(\n        StoreOrganisationMember $request,\n        Campaign $campaign,\n        Organisation $organisation,\n        OrganisationMember $organisationMember\n    ) {\n        $this->authorize('member', $organisation);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $organisationMember->update($request->all());\n\n        return redirect()->route('entities.show', [$campaign, $organisation->entity])\n            ->with('success', trans($this->view . '.edit.success'));\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Organisation $organisation, OrganisationMember $organisationMember)\n    {\n        $this->authorize('member', $organisation);\n\n        $organisationMember->delete();\n\n        return redirect()->route('entities.show', [$campaign, $organisationMember->organisation->entity])\n            ->with('success', trans($this->view . '.destroy.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Organisation/OrganisationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Organisation;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Organisation;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass OrganisationController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function organisations(Campaign $campaign, Organisation $organisation)\n    {\n        $this->campaign($campaign)->authEntityView($organisation->entity);\n\n        return redirect()->route('entities.children', [$campaign, $organisation->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Passport/ClientController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Passport;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Contracts\\Validation\\Factory as ValidationFactory;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Laravel\\Passport\\Client;\nuse Laravel\\Passport\\ClientRepository;\nuse Laravel\\Passport\\Http\\Rules\\RedirectRule;\n\nclass ClientController extends Controller\n{\n    /**\n     * Create a client controller instance.\n     */\n    public function __construct(\n        protected ClientRepository $clients,\n        protected ValidationFactory $validation,\n        protected RedirectRule $redirectRule\n    ) {}\n\n    /**\n     * Store a new client.\n     */\n    public function store(Request $request): JsonResponse\n    {\n        $this->validation->make($request->all(), [\n            'name' => ['required', 'string', 'max:255'],\n            'redirect' => ['required', $this->redirectRule],\n            'confidential' => 'boolean',\n        ])->validate();\n\n        $client = $this->clients->createAuthorizationCodeGrantClient(\n            $request->name,\n            explode(',', $request->redirect),\n            (bool) $request->input('confidential', true),\n            $request->user(),\n        );\n\n        return response()->json([\n            'secret' => $client->plainSecret,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/PasswordSecurityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\PasswordSecurity;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse PragmaRX\\Google2FA\\Google2FA;\n\nclass PasswordSecurityController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('2fa');\n    }\n\n    /*\n    * Generates secret code for 2fa\n    */\n    public function generate2faSecretCode(Request $request)\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $otp = new Google2FA;\n\n        // Generate a new Google2FA code for User\n        PasswordSecurity::create([\n            'user_id' => $user->id,\n            'google2fa_enable' => 0,\n            'google2fa_secret' => $otp->generateSecretKey(),\n        ]);\n\n        return redirect()->route('settings.account')->with('success', __('settings.account.2fa.success_key'));\n    }\n\n    /*\n    * Aborts login of user with 2fa enabled.\n    */\n    public function cancel2FA(Request $request)\n    {\n        return redirect()->route('login');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/PayPalController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Http\\Requests\\ValidatePledge;\nuse App\\Models\\Tier;\nuse App\\Models\\TierPrice;\nuse App\\Services\\PayPalService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Log;\nuse Srmklive\\PayPal\\Services\\PayPal as PayPalClient;\n\nclass PayPalController extends Controller\n{\n    protected PayPalService $service;\n\n    public function __construct(PayPalService $service)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->service = $service;\n    }\n\n    /**\n     * process transaction.\n     */\n    public function processTransaction(ValidatePledge $request, Tier $tier)\n    {\n        if ($tier->isFree()) {\n            abort(401);\n        }\n        if (request()->ajax()) {\n            return response()->json();\n        }\n        $response = $this->service\n            ->user($request->user())\n            ->tier($tier)\n            ->process();\n\n        if (isset($response['id'])) {\n            foreach ($response['links'] as $links) {\n                if ($links['rel'] == 'approve') {\n                    return redirect()->away($links['href']);\n                }\n            }\n\n            return redirect()\n                ->route('settings.subscription')\n                ->with(\n                    'error',\n                    __('subscriptions/paypal.errors.rejected') . ' ' .\n                    __('subscriptions/paypal.errors.contact', ['email' => config('app.email')])\n                );\n        } else {\n            Log::error('Subscription PayPal error', $response);\n\n            return redirect()\n                ->route('settings.subscription')\n                ->with(\n                    'error',\n                    __('subscriptions/paypal.errors.failed') . ' ' .\n                    __('subscriptions/paypal.errors.contact', ['email' => config('app.email')])\n                );\n        }\n    }\n\n    /**\n     * Process a successful transaction\n     */\n    public function successTransaction(Request $request)\n    {\n        $provider = new PayPalClient;\n        $provider->setApiCredentials(config('paypal'));\n        $provider->getAccessToken();\n        $response = $provider->capturePaymentOrder($request['token']);\n\n        if (isset($response['status']) && $response['status'] == 'COMPLETED') {\n            $pledge = $response['purchase_units']['0']['reference_id'];\n            Log::info('Paypal', $response);\n            $this->service\n                ->user($request->user())\n                ->subscribe($pledge);\n            $routeOptions = ['success' => 1];\n            $flash = 'subscribed';\n\n            /** @var ?Tier $tier */\n            $tier = Tier::where('name', $pledge)->first();\n            /** @var ?TierPrice $tierPrice */\n            $tierPrice = $tier->prices()\n                ->where('currency', $request->user()->currency())\n                ->where('period', PricingPeriod::Yearly)\n                ->first();\n\n            return redirect()\n                ->route('settings.subscription.finish', $routeOptions)\n                ->with('success', __('settings.subscription.success.subscribed'))\n                ->with('sub_tracking', $flash)\n                ->with('sub_id', $tierPrice?->id)\n                ->with('sub_value', $response['purchase_units']['0']['payments']['captures'][0]['amount']['value']);\n        } else {\n            Log::error('Subscription PayPal error 2', $response);\n\n            return redirect()\n                ->route('settings.subscription')\n                ->with(\n                    'error',\n                    __('subscriptions/paypal.errors.incomplete') . ' ' .\n                    __('subscriptions/paypal.errors.contact', ['email' => config('app.email')])\n                );\n        }\n    }\n\n    /**\n     * cancel transaction\n     */\n    public function cancelTransaction(Request $request)\n    {\n        return redirect()\n            ->route('settings.subscription')\n            ->with('error', __('settings.subscription.errors.callback'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/PresetController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\StorePreset;\nuse App\\Models\\Campaign;\nuse App\\Models\\Preset;\nuse App\\Models\\PresetType;\nuse Illuminate\\Http\\Request;\n\nclass PresetController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign, PresetType $presetType)\n    {\n        $presets = Preset::inType($presetType->id)->orderBy('name')->get();\n\n        return view('presets.list')\n            ->with('campaign', $campaign)\n            ->with('presets', $presets)\n            ->with('presetType', $presetType)\n            ->with('from', request()->get('from'));\n    }\n\n    public function show(Campaign $campaign, PresetType $presetType, Preset $preset)\n    {\n        return response()\n            ->json(['preset' => $preset->config]);\n    }\n\n    public function create(Campaign $campaign, PresetType $presetType)\n    {\n        $this->authorize('mapPresets', $campaign);\n\n        $from = request()->get('from', 'dashboard');\n\n        return view('presets.forms.create')\n            ->with('campaign', $campaign)\n            ->with('presetType', $presetType)\n            ->with('from', $from);\n    }\n\n    public function store(StorePreset $request, Campaign $campaign, PresetType $presetType)\n    {\n        $this->authorize('mapPresets', $campaign);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only('name', 'config', 'visibility_id');\n        $data['type_id'] = $presetType->id;\n        $data['campaign_id'] = $campaign->id;\n        $preset = new Preset;\n        $preset = $preset->create($data);\n\n        [$route, $params] = $this->parseFrom($request);\n        if (! is_array($params)) {\n            $params = [$params];\n        }\n        $params['campaign'] = $campaign;\n\n        return redirect()\n            ->route($route, $params)\n            ->with('success', __('presets.create.success', ['name' => $preset->name]));\n    }\n\n    public function edit(Campaign $campaign, PresetType $presetType, Preset $preset)\n    {\n        $this->authorize('mapPresets', $campaign);\n\n        $from = request()->get('from', 'dashboard');\n\n        return view('presets.forms.edit')\n            ->with('campaign', $campaign)\n            ->with('presetType', $presetType)\n            ->with('preset', $preset)\n            ->with('from', $from);\n    }\n\n    public function update(StorePreset $request, Campaign $campaign, PresetType $presetType, Preset $preset)\n    {\n        $this->authorize('mapPresets', $campaign);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only('name', 'config', 'visibility_id');\n        $preset->update($data);\n\n        [$route, $params] = $this->parseFrom($request);\n        if (! is_array($params)) {\n            $params = [$params];\n        }\n        $params['campaign'] = $campaign;\n\n        return redirect()\n            ->route($route, $params)\n            ->with('success', __('presets.edit.success', ['name' => $preset->name]));\n    }\n\n    public function destroy(Request $request, Campaign $campaign, PresetType $presetType, Preset $preset)\n    {\n        $this->authorize('mapPresets', $campaign);\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $preset->delete();\n\n        [$route, $params] = $this->parseFrom($request);\n        if (! is_array($params)) {\n            $params = [$params];\n        }\n        $params['campaign'] = $campaign;\n\n        return redirect()\n            ->route($route, $params)\n            ->with('success', __('presets.destroy.success', ['name' => $preset->name]));\n    }\n\n    protected function parseFrom(Request $request)\n    {\n        $from = $request->get('from');\n        if (empty($from) || $from === 'dashboard') {\n            return ['dashboard', null];\n        }\n        $from = base64_decode($from);\n        $from = explode(':', $from);\n\n        if (count($from) !== 2) {\n            return ['dashboard', null];\n        }\n\n        return [$from[0], $from[1]];\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Quests/ElementController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Quests;\n\nuse App\\Datagrids\\Sorters\\QuestElementSorter;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreQuestElement;\nuse App\\Models\\Campaign;\nuse App\\Models\\Quest;\nuse App\\Models\\QuestElement;\nuse App\\Services\\MultiEditingService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass ElementController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function index(Campaign $campaign, Quest $quest)\n    {\n        if (empty($quest->entity)) {\n            abort(404);\n        }\n        // Policies will always fail if they can't resolve the user.\n        $this->campaign($campaign)->authEntityView($quest->entity);\n\n        $datagridSorter = new QuestElementSorter;\n        $datagridSorter->request(request()->all());\n\n        $model = $quest;\n        $entity = $model->entity;\n        $elements = $quest\n            ->elements()\n            ->with(['entity', 'entity.image', 'entity.entityType'])\n            ->simpleSort($datagridSorter)\n            ->paginate();\n\n        return view('quests.elements.index', compact(\n            'campaign',\n            'model',\n            'entity',\n            'elements',\n            'datagridSorter'\n        ));\n    }\n\n    public function create(Campaign $campaign, Quest $quest)\n    {\n        $this->authorize('update', $quest->entity);\n\n        return view('quests.elements.create', compact(\n            'campaign',\n            'quest'\n        ));\n    }\n\n    public function store(StoreQuestElement $request, Campaign $campaign, Quest $quest)\n    {\n        $this->authorize('update', $quest->entity);\n\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only([\n            'entity_id', 'name', 'role', 'entry', 'colour', 'visibility_id', 'copy_entity_entry',\n        ]);\n        $data['quest_id'] = $quest->id;\n\n        $element = new QuestElement;\n        $element = $element->create($data);\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('quests.quest_elements.edit', [$campaign, 'quest_element' => $element, 'quest' => $quest])\n                ->with('success', __('quests.elements.create.success', [\n                    'entity' => $element->name(),\n                ]));\n        } elseif ($request->has('submit-new')) {\n            return redirect()\n                ->route('quests.quest_elements.create', [$campaign, $quest])\n                ->with('success', __('quests.elements.create.success', [\n                    'entity' => $element->name(),\n                ]));\n        }\n\n        return redirect()\n            ->route('quests.quest_elements.index', [$campaign, $quest])\n            ->with('success', __('quests.elements.create.success', [\n                'entity' => $element->name(),\n            ]));\n    }\n\n    public function show(Campaign $campaign, Quest $quest, QuestElement $questElement)\n    {\n        abort(404);\n    }\n\n    public function edit(Campaign $campaign, Quest $quest, QuestElement $questElement)\n    {\n        $this->authorize('update', $quest->entity);\n        $model = $questElement;\n\n        $editingUsers = null;\n\n        if ($campaign->hasEditingWarning()) {\n            /** @var MultiEditingService $editingService */\n            $editingService = app()->make(MultiEditingService::class);\n            $editingUsers = $editingService->model($questElement)->user(auth()->user())->users();\n            // If no one is editing the quest element, we are now editing it\n            if (empty($editingUsers)) {\n                $editingService->edit();\n            }\n        }\n\n        return view('quests.elements.update', compact(\n            'campaign',\n            'quest',\n            'model',\n            'editingUsers'\n        ));\n    }\n\n    public function update(StoreQuestElement $request, Campaign $campaign, Quest $quest, QuestElement $questElement)\n    {\n        $this->authorize('update', $quest->entity);\n\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only(['entity_id', 'name', 'role', 'entry', 'colour', 'visibility_id', 'copy_entity_entry']);\n\n        $questElement->update($data);\n        $questElement->refresh();\n\n        /** @var MultiEditingService $editingService */\n        $editingService = app()->make(MultiEditingService::class);\n        $editingService->model($questElement)\n            ->user($request->user())\n            ->finish();\n\n        if ($request->has('submit-update')) {\n            return redirect()\n                ->route('quests.quest_elements.edit', [$campaign, 'quest_element' => $questElement, 'quest' => $quest])\n                ->with('success', __('quests.elements.edit.success', [\n                    'entity' => $questElement->name(),\n                ]));\n        } elseif ($request->has('submit-new')) {\n            return redirect()\n                ->route('quests.quest_elements.create', [$campaign, $quest])\n                ->with('success', __('quests.elements.create.success', [\n                    'entity' => $questElement->name(),\n                ]));\n        }\n\n        return redirect()\n            ->route('quests.quest_elements.index', [$campaign, $quest])\n            ->with('success', __('quests.elements.edit.success', [\n                'entity' => $questElement->name(),\n            ]));\n    }\n\n    public function destroy(Campaign $campaign, Quest $quest, QuestElement $questElement)\n    {\n        $this->authorize('update', $quest->entity);\n\n        $questElement->delete();\n\n        return redirect()\n            ->route('quests.quest_elements.index', [$campaign, $quest])\n            ->with('success', __('quests.elements.destroy.success', [\n                'entity' => $questElement->name(),\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Quests/QuestController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Quests;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Quest;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass QuestController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Quest $quest)\n    {\n        $this->campaign($campaign)->authEntityView($quest->entity);\n\n        return redirect()->route('entities.children', [$campaign, $quest->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Races/MemberController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Races;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCharacterRace;\nuse App\\Models\\Campaign;\nuse App\\Models\\Race;\nuse App\\Renderers\\Layouts\\Race\\Character;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass MemberController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Race $race)\n    {\n        $this->campaign($campaign)->authEntityView($race->entity);\n\n        $options = ['campaign' => $campaign, 'race' => $race, 'm' => $this->descendantsMode()];\n        $relation = 'allCharacters';\n        if ($this->filterToDirect()) {\n            $relation = 'characters';\n        }\n        Datagrid::layout(Character::class)\n            ->route('races.characters', $options);\n        $this->rows = $race\n            ->{$relation}()\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->with([\n                'entity.locations',\n                'characterRaces',\n                'entity', 'entity.tags', 'entity.image', 'entity.tags',\n                'entity.entityType',\n            ])\n            ->has('entity')\n            ->paginate(config('limits.pagination'));\n\n        return $this->campaign($campaign)->datagridAjax();\n    }\n\n    /**\n     * Show the form for creating a new resource.\n     */\n    public function create(Campaign $campaign, Race $race)\n    {\n        $this->authorize('update', $race->entity);\n\n        return view('races.members.create', [\n            'campaign' => $campaign,\n            'model' => $race,\n        ]);\n    }\n\n    /**\n     * Store a newly created resource in storage.\n     */\n    public function store(StoreCharacterRace $request, Campaign $campaign, Race $race)\n    {\n        $this->authorize('update', $race->entity);\n\n        $newMembers = $race->characters()->syncWithoutDetaching($request->members);\n\n        return redirect()->route('entities.show', [$campaign, $race->entity])\n            ->with('success', trans_choice('races.members.create.success', count($newMembers['attached']), ['count' => count($newMembers['attached'])]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Races/RaceController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Races;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Race;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass RaceController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Race $race)\n    {\n        $this->campaign($campaign)->authEntityView($race->entity);\n\n        return redirect()->route('entities.children', [$campaign, $race->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ReferralController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Referral;\nuse App\\Services\\Referrals\\JoinService;\n\nclass ReferralController extends Controller\n{\n    public function __construct(protected JoinService $service) {}\n\n    public function index(Referral $referral)\n    {\n        if (auth()->guest()) {\n            if ($this->service->referral($referral)->expired()) {\n                abort(404);\n            }\n            $this->service->flag();\n\n            return redirect()->route('register');\n        }\n\n        // Already logged in? Just redirect to their dashboard\n        return redirect()->route('home');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/RelationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Datagrids\\Actions\\RelationDatagridActions;\nuse App\\Datagrids\\Filters\\RelationFilter;\nuse App\\Http\\Requests\\StoreRelation;\nuse App\\Http\\Resources\\Web\\EntityResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Relation;\nuse App\\Renderers\\DatagridRenderer;\nuse App\\Services\\AttributeService;\nuse App\\Services\\Entity\\RelationService;\nuse App\\Services\\FilterService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Response;\nuse Illuminate\\View\\View;\n\nclass RelationController extends CrudController\n{\n    protected RelationService $relationService;\n\n    protected string $view = 'relations';\n\n    protected string $route = 'relations';\n\n    protected $langKey = 'entities/relations';\n\n    protected bool $tabPermissions = false;\n\n    protected bool $tabAttributes = false;\n\n    protected bool $tabBoosted = false;\n\n    protected bool $tabCopy = false;\n\n    protected string $forceMode = 'table';\n\n    protected string $model = Relation::class;\n\n    /** @var string The datagrid controlling the bulk actions */\n    protected string $datagridActions = RelationDatagridActions::class;\n\n    /** @var string Disable the sanitizer, handled by the observer */\n    protected string $sanitizer = '';\n\n    protected string $filter = RelationFilter::class;\n\n    public function __construct(FilterService $filterService, DatagridRenderer $datagridRenderer, AttributeService $attributeService, RelationService $relationService)\n    {\n        $this->filterService = $filterService;\n        $this->datagrid = $datagridRenderer;\n        $this->attributeService = $attributeService;\n        $this->relationService = $relationService;\n    }\n\n    public function titleKey(): string\n    {\n        return __('sidebar.relations');\n    }\n\n    /**\n     * @return Application|Factory|\\Illuminate\\Contracts\\View\\View|Response\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('relations', $campaign);\n\n        $model = new $this->model;\n\n        $params['campaign'] = $campaign;\n        $params['entityAttributeTemplates'] = [];\n        $params['source'] = null;\n        $params['langKey'] = $this->langKey;\n\n        return view('entities.pages.relations.full-form.create', array_merge(['name' => $this->view], $params));\n    }\n\n    /**\n     * @return JsonResponse|RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function store(StoreRelation $request, Campaign $campaign)\n    {\n        $this->authorize('relations', $campaign);\n\n        if ($request->get('from') === 'web') {\n            $this->relationService->campaign($campaign)->createRelations($request);\n            $new = $this->relationService->getNew();\n            $new->load('target', 'owner');\n\n            return response()->json([\n                'created' => true,\n                'id' => $new->id,\n                'source' => $new->owner_id,\n                'target' => (new EntityResource($new->target))->campaign($campaign),\n                'text' => $new->relation,\n                'colour' => $new->colour,\n                'attitude' => $new->attitude,\n                'shape' => $new->isMirrored() ? 'none' : 'triangle',\n                'url' => route('entities.relations.edit', [\n                    'campaign' => $campaign,\n                    'entity' => $new->owner_id,\n                    'relation' => $new,\n                    'from' => 'web',\n                ]),\n            ]);\n        }\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        try {\n            $this->relationService->campaign($campaign)->createRelations($request);\n            $new = $this->relationService->getNew();\n            $count = $this->relationService->getCount();\n\n            $success = trans_choice($this->langKey . '.create.success_bulk', $count, [\n                'entity' => '<a href=\"' . $new->owner->url() . '\" class=\"text-link\">' . $new->owner->name . '</a>',\n                'count' => $count,\n            ]);\n            session()->flash('success_raw', $success);\n\n            if ($request->has('submit-new')) {\n                $route = route($this->route . '.create', $campaign);\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-update')) {\n                $route = route($this->route . '.edit', [$campaign, $new]);\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-view')) {\n                $route = route($this->route . '.show', [$campaign, $new]);\n\n                return response()->redirectTo($route);\n            } elseif ($request->has('submit-copy')) {\n                $route = route($this->route . '.create', [$campaign, 'copy' => $new->id]);\n\n                return response()->redirectTo($route);\n            } elseif (auth()->user()->new_entity_workflow == 'created') {\n                $route = route($this->route . '.show', [$campaign, $new]);\n\n                return response()->redirectTo($route);\n            }\n\n            $route = route($this->route . '.index', $campaign);\n\n            return response()->redirectTo($route);\n        } catch (\\LogicException $exception) {\n            $error = str_replace(' ', '_', mb_strtolower($exception->getMessage()));\n\n            return redirect()\n                ->back()\n                ->withInput()\n                ->with('error', __('crud.errors.' . $error));\n        }\n    }\n\n    /**\n     * @return RedirectResponse\n     */\n    public function show(Campaign $campaign, Relation $relation)\n    {\n        return redirect()\n            ->route('relations.index', $campaign);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function edit(Campaign $campaign, Relation $relation)\n    {\n        $this->authorize('update', $relation->owner);\n\n        $params = [\n            'campaign' => $campaign,\n            'model' => $relation,\n            'relation' => $relation,\n            'name' => $this->view,\n            'source' => null,\n            'langKey' => $this->langKey,\n        ];\n\n        return view('entities.pages.relations.full-form.update', $params);\n    }\n\n    /**\n     * @return JsonResponse|RedirectResponse\n     *\n     * @throws AuthorizationException\n     */\n    public function update(StoreRelation $request, Campaign $campaign, Relation $relation)\n    {\n        $this->authorize('update', $relation->owner);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only(['owner_id', 'target_id', 'attitude', 'relation', 'colour', 'is_pinned', 'two_way', 'visibility_id']);\n        $relation->update($data);\n        $relation->refresh();\n\n        return redirect()\n            ->route('relations.index', $campaign)\n            ->with('success', __('entities/relations' . '.update.success', [\n                'target' => $relation->target->name,\n                'entity' => $relation->owner->name,\n            ]));\n    }\n\n    public function destroy(Campaign $campaign, Relation $relation)\n    {\n        $this->authorize('update', $relation->owner);\n\n        $relation->delete();\n\n        return redirect()\n            ->route('relations.index', $campaign)\n            ->with('success', __('entities/relations.destroy.success', [\n                'target' => $relation->target->name,\n                'entity' => $relation->owner->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ReminderUpdateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Enums\\EntityEventTypes;\nuse App\\Http\\Requests\\UpdateCalendarEvent;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\Reminder;\nuse App\\Services\\CalendarService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Support\\Str;\n\nclass ReminderUpdateController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    protected string $view = 'entity_event';\n\n    protected string $route = 'reminders';\n\n    protected ?Entity $entity = null;\n\n    protected ?Post $post = null;\n\n    protected CalendarService $calendarService;\n\n    public function __construct(CalendarService $calendarService)\n    {\n        // parent::__construct();\n        $this->calendarService = $calendarService;\n    }\n\n    public function edit(Campaign $campaign, Reminder $reminder)\n    {\n        $this->checkPermissions($reminder);\n        $entity = $this->entity;\n        $post = $this->post;\n        $name = $this->view;\n        $route = $this->route;\n        $parent = explode('.', $this->view)[0];\n        $calendar = $reminder->calendar;\n        $next = request()->get('next', null);\n        $from = request()->get('from', null);\n        if (! empty($from)) {\n            if ($from !== 'calendar') {\n                $from = Calendar::find($from);\n            }\n        }\n\n        return view('calendars.reminders.edit', compact(\n            'campaign',\n            'entity',\n            'post',\n            'reminder',\n            'calendar',\n            'name',\n            'route',\n            'parent',\n            'next',\n            'from'\n        ));\n    }\n\n    public function update(UpdateCalendarEvent $request, Campaign $campaign, Reminder $reminder)\n    {\n        $this->checkPermissions($reminder);\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        if (request()->has('entity_id') && request()->get('entity_id') != $this->entity->id && is_null($this->post)) {\n            $newEntity = Entity::findOrFail(request()->get('entity_id'));\n\n            $this->authorize('reminders', $newEntity);\n            $request->merge(['type_id' => null]);\n        }\n\n        if (! is_null($this->post)) {\n            $request->merge(['type_id' => EntityEventTypes::calendarDate->value]);\n        }\n\n        $routeOptions = ['campaign' => $campaign, 'entity' => $reminder->calendar->entity, 'year' => request()->post('year')];\n        $reminder->update($request->all());\n\n        if (request()->has('layout')) {\n            $routeOptions['layout'] = request()->get('layout');\n        }\n        if (request()->get('layout', $reminder->calendar->defaultLayout()) !== 'year') {\n            $routeOptions['month'] = request()->post('month');\n        }\n\n        $next = request()->post('next', '0');\n        if ($next == 'calendars.events') {\n            return redirect()\n                ->route('calendars.events', [$campaign, $reminder->calendar])\n                ->with('success', __('calendars.event.edit.success'));\n        } elseif ($next == 'entity.reminders') {\n            return redirect()\n                ->route('entities.reminders.index', [$campaign, $this->entity])\n                ->with('success', __('calendars.event.edit.success'));\n        } elseif (Str::startsWith($next, 'calendar.')) {\n            $id = Str::after($next, 'calendar.');\n            $routeOptions['calendar'] = $id;\n        }\n\n        return redirect()->route('entities.show', $routeOptions)\n            ->with('success', __('calendars.event.edit.success'));\n    }\n\n    public function destroy(Campaign $campaign, Reminder $reminder)\n    {\n        $this->checkPermissions($reminder);\n\n        $reminder->delete();\n        $success = __('calendars.event.destroy', ['name' => $reminder->calendar->name]);\n\n        $next = request()->post('next', '0');\n        if ($next == 'calendars.events') {\n            return redirect()\n                ->route('calendars.events', [$campaign, $reminder->calendar])\n                ->with('success', $success);\n        } elseif ($next == 'entity.reminders') {\n            return redirect()\n                ->route('entities.reminders.index', [$campaign, $this->entity])\n                ->with('success', $success);\n        } elseif (Str::startsWith($next, 'calendar.')) {\n            return redirect()\n                ->route('entities.show', [$campaign, $reminder->calendar->entity])\n                ->with('success', $success);\n        }\n\n        return redirect()\n            ->route('entities.reminders.index', [$campaign, $this->entity])\n            ->with('success', $success);\n    }\n\n    private function checkPermissions(Reminder $reminder)\n    {\n        if ($reminder->remindable instanceof Post) {\n            $this->authorize('reminders', $reminder->remindable->entity);\n            $this->entity = $reminder->remindable->entity;\n            $this->post = $reminder->remindable;\n        } else {\n            $this->authorize('reminders', $reminder->remindable);\n            $this->entity = $reminder->remindable;\n            $this->post = null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Roadmap/FeatureController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Roadmap;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreFeature;\nuse App\\Models\\Feature;\nuse App\\Models\\FeatureVote;\nuse Illuminate\\Http\\Request;\n\nclass FeatureController extends Controller\n{\n    public function show(Feature $feature)\n    {\n        return view('roadmap.feature.show')\n            ->with('feature', $feature);\n    }\n\n    public function store(StoreFeature $request)\n    {\n        return redirect()->route('roadmap');\n    }\n\n    public function upvote(Request $request, Feature $feature)\n    {\n        $this->middleware('auth');\n        $this->authorize('vote', $feature);\n\n        /** @var FeatureVote $vote */\n        $vote = FeatureVote::where('user_id', auth()->user()->id)\n            ->where('feature_id', $feature->id)\n            ->firstOrNew();\n        if ($vote->exists) {\n            $vote->delete();\n            $feature->upvote_count--;\n            $feature->updateQuietly();\n        } else {\n            $vote->feature_id = $feature->id;\n            $vote->user_id = auth()->user()->id;\n            $vote->save();\n            $feature->upvote_count++;\n            $feature->updateQuietly();\n        }\n\n        return view('roadmap.feature._upvote')\n            ->with('feature', $feature);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Roadmap/RoadmapController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Roadmap;\n\nuse App\\Http\\Controllers\\Controller;\n\nclass RoadmapController extends Controller\n{\n    public function index()\n    {\n        return view('roadmap.index');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/AttributeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Search\\AttributeSearchService;\nuse Illuminate\\Http\\Request;\n\nclass AttributeController extends Controller\n{\n    public function __construct(protected AttributeSearchService $searchService)\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign, Entity $entity)\n    {\n        return response()->json(\n            $this\n                ->searchService\n                ->entity($entity)\n                ->request($request)\n                ->find()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/CalendarController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\SearchService;\nuse Illuminate\\Http\\Request;\n\nclass CalendarController extends Controller\n{\n    /**\n     * LiveController constructor.\n     */\n    public function __construct(protected SearchService $searchService) {}\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n\n        return response()->json(\n            $this->searchService\n                ->term($term)\n                ->campaign($campaign)\n                ->only(config('entities.ids.calendar'))\n                ->find()\n        );\n    }\n\n    /**\n     * Live Search\n     */\n    public function months(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n\n        return response()->json(\n            $this->searchService\n                ->term($term)\n                ->campaign($campaign)\n                ->monthList()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/CampaignController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Search\\CampaignSearchService;\nuse Illuminate\\Http\\Request;\n\nclass CampaignController extends Controller\n{\n    public function __construct(protected CampaignSearchService $searchService) {}\n\n    public function members(Request $request, Campaign $campaign)\n    {\n        $this->authorize('search', $campaign);\n\n        return response()->json(\n            $this->searchService\n                ->campaign($campaign)\n                ->members(\n                    $request->get('q')\n                )\n        );\n    }\n\n    public function roles(Request $request, Campaign $campaign)\n    {\n        $this->authorize('search', $campaign);\n\n        return response()->json(\n            $this->searchService\n                ->campaign($campaign)\n                ->roles(\n                    $request->get('q')\n                )\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/FullTextController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Search\\EntitySearchService;\nuse Illuminate\\Http\\Request;\n\nclass FullTextController extends Controller\n{\n    public function __construct(protected EntitySearchService $service) {}\n\n    public function index(Campaign $campaign, Request $request)\n    {\n        $term = strip_tags($request->get('term'));\n        $term2 = null;\n\n        $data = [\n            'campaign' => $campaign,\n            'models' => [],\n            'term' => $term,\n            'route' => 'search.fulltext',\n        ];\n\n        if (empty($term)) {\n            return view('search.fulltext')->with($data);\n        }\n\n        /** @var ?Entity $entity */\n        $entity = Entity::with('entityType')->where('name', $term)->first();\n        if ($entity) {\n            $term2 = $entity->entityType->code . ':' . $entity->id;\n        }\n\n        // Get entity ids from meilisearch\n        $results = $this->service\n            ->campaign($campaign)\n            ->limit(100)\n            ->search($term, $term2);\n        $results = array_column($results, 'id');\n\n        // Then get the actual entities from the campaign\n        $models = Entity::whereIn('id', $results)\n            ->orderBy('name')\n            ->paginate();\n\n        // If the current page is higher than the max amount of pages, redirect the user\n        if ((int) $request->get('page', 1) > $models->lastPage()) {\n            return redirect()->route('search.fulltext', [\n                $campaign,\n                'page' => $models->lastPage(),\n                'order' => $request->get('order'),\n            ]);\n        }\n\n        $data['models'] = $models;\n\n        return view('search.fulltext')->with($data);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/GameSystemSearchController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\GameSystem;\nuse Illuminate\\Http\\JsonResponse;\n\n/**\n * Controller that loads popular game systems\n */\nclass GameSystemSearchController extends Controller\n{\n    /**\n     * Get a user's recent searches\n     */\n    public function index(): JsonResponse\n    {\n        /** @var GameSystem[] $systems */\n        $systems = GameSystem::where('name', 'like', '%' . request()->get('q') . '%')\n            ->withCount('campaignSystem')\n            ->orderBy('campaign_system_count', 'desc')\n            ->orderBy('name', 'asc')\n            ->limit(20)\n            ->get();\n\n        foreach ($systems as $system) {\n            $format = [\n                'id' => $system->id,\n                'text' => $system->name,\n            ];\n\n            $formatted[] = $format;\n        }\n\n        // Add Other if it's empty\n        if (empty($formatted)) {\n            $other = GameSystem::where('name', 'Other')->first();\n            $formatted[] = [\n                'id' => $other->id,\n                'text' => __('sidebar.other'),\n            ];\n        }\n\n        return response()->json(\n            $formatted\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/ImageController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\n\nclass ImageController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Campaign $campaign)\n    {\n        /** @var Image[] $images */\n        $images = Image::where('is_default', false)\n            ->where('is_folder', false)\n            ->where('name', 'like', '%' . request()->get('q') . '%')\n            ->limit(10)\n            ->get();\n\n        $formatted = [];\n\n        foreach ($images as $image) {\n            $format = [\n                'id' => $image->id,\n                'text' => $image->name,\n                'image' => $image->getUrl(40),\n            ];\n\n            $formatted[] = $format;\n        }\n\n        return response()->json($formatted);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/ListController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\Search\\LiveSearchService;\nuse Illuminate\\Http\\Request;\n\nclass ListController extends Controller\n{\n    public function __construct(protected LiveSearchService $service) {}\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        return response()->json(\n            $this->service\n                ->campaign($campaign)\n                ->request($request)\n                ->entityType($entityType)\n                ->search()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/LiveController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Ability;\nuse App\\Models\\Campaign;\nuse App\\Models\\Organisation;\nuse App\\Models\\OrganisationMember;\nuse App\\Models\\Tag;\nuse App\\Services\\SearchService;\nuse Illuminate\\Http\\Request;\n\nclass LiveController extends Controller\n{\n    public function __construct(protected SearchService $searchService) {}\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n        $exclude = mb_trim($request->get('exclude') ?? '');\n        if ($exclude === 'undefined') {\n            $exclude = null;\n        }\n        if (auth()->check()) {\n            $this->searchService->user(auth()->user());\n        }\n        if (request()->has('new')) {\n            $this->searchService->new(true);\n        }\n        if ($request->get('v2') === 'true') {\n            $this->searchService->v2();\n        }\n        if ($request->has('posts')) {\n            $this->searchService->posts()->new();\n        }\n        if ($request->has('thumb')) {\n            $size = min(max($request->get('thumb'), 64), 512);\n            $this->searchService->thumb($size);\n        }\n\n        $this->searchService\n            ->term($term)\n            ->campaign($campaign)\n            ->full()\n            ->excludeIds($exclude);\n\n        return response()->json(\n            $this->searchService->find()\n        );\n    }\n\n    /**\n     * Filter on entities which have reminders\n     */\n    public function reminderEntities(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n\n        return response()->json(\n            $this->searchService\n                ->term($term)\n                ->campaign($campaign)\n                ->exclude([\n                    config('entities.ids.calendar'),\n                    config('entities.ids.tag'),\n                    config('entities.ids.map'),\n                    config('entities.ids.timeline'),\n                ])\n                ->find()\n        );\n    }\n\n    /**\n     * Filter on entities which have relations\n     */\n    public function relationEntities(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n        $exclude = [];\n\n        if ($request->has('exclude')) {\n            $exclude = $request['exclude'];\n        }\n\n        return response()->json(\n            $this->searchService\n                ->term($term)\n                ->campaign($campaign)\n                ->exclude([config('entities.ids.bookmark')])\n                ->excludeIds($exclude)\n                ->only($request->get('only'))\n                ->find()\n        );\n    }\n\n    /**\n     * Filter on entities which have multiple tags\n     */\n    public function tagChildren(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n\n        $exclude = [];\n        if ($request->has('exclude-entity')) {\n            /** @var Tag $tag */\n            $tag = Tag::findOrFail($request->get('exclude-entity'));\n            $exclude = $tag->entities->pluck('id')->toArray();\n            $exclude[] = $tag->entity->id;\n        }\n\n        return response()->json(\n            $this->searchService\n                ->term($term)\n                ->campaign($campaign)\n                ->excludeIds($exclude)\n                ->find()\n        );\n    }\n\n    /**\n     * Filter on entities which aren't part of an ability\n     */\n    public function abilityEntities(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n\n        $exclude = [];\n        if ($request->has('exclude')) {\n            /** @var Ability $ability */\n            $ability = Ability::findOrFail($request->get('exclude'));\n            $exclude = $ability->entities->pluck('id')->toArray();\n        }\n\n        return response()->json(\n            $this->searchService\n                ->term($term)\n                ->campaign($campaign)\n                ->exclude([config('entities.ids.tag')])\n                ->excludeIds($exclude)\n                ->find()\n        );\n    }\n\n    /**\n     * Only find calendar entities\n     */\n    public function calendars(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n\n        return response()->json(\n            $this->searchService\n                ->term($term)\n                ->campaign($campaign)\n                ->only([config('entities.ids.calendar')])\n                ->find()\n        );\n    }\n\n    /**\n     * Filter on org members\n     */\n    public function organisationMembers(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n\n        $exclude = [];\n        $data = [];\n        if ($request->has('exclude')) {\n            /** @var Organisation $org */\n            $org = Organisation::findOrFail($request->get('exclude'));\n            $members = $org\n                ->members()\n                ->select('organisation_member.*')\n                ->with('character')\n                ->has('character')\n                ->leftJoin('characters as c', 'c.id', 'organisation_member.character_id')\n                ->orderBy('c.name');\n            if (! empty($term)) {\n                $members\n                    ->whereLike('c.name', '%' . $term . '%');\n            }\n            /** @var OrganisationMember $member */\n            foreach ($members->get() as $member) {\n                $data[] = [\n                    'id' => $member->id,\n                    'text' => $member->character->name . (! empty($member->role) ? ' (' . $member->role . ')' : null),\n                ];\n            }\n        }\n\n        return response()->json(\n            $data\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/MapGroupController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Services\\Search\\MapGroupSearchService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Http\\Request;\n\nclass MapGroupController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(protected MapGroupSearchService $service) {}\n\n    public function index(Request $request, Campaign $campaign, Map $map)\n    {\n        $this->campaign($campaign)->authEntityView($map->entity);\n\n        return response()->json(\n            $this->service\n                ->campaign($campaign)\n                ->map($map)\n                ->request($request)\n                ->search()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/MarkerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\MapMarker;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Str;\n\nclass MarkerController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        $term = mb_trim($request->get('q') ?? '');\n        // parent map_id allowed for the marker (limits search to the markers of the map only)\n        $include = $request->has('include') ? [$request->get('include')] : [];\n\n        // marker must be in given map\n        $modelClass = MapMarker::whereIn('map_id', $include);\n\n        // Search text\n        if (! empty($term)) {\n            if (Str::startsWith($term, '=')) {\n                $modelClass->where('name', mb_ltrim($term, '='));\n            } else {\n                $modelClass->where('name', 'like', \"%{$term}%\");\n            }\n        } else {\n            $modelClass->orderBy('updated_at', 'desc');\n        }\n\n        // execute query\n        $models = $modelClass->limit(10)\n            ->get();\n\n        // format results for frontend select\n        $formatted = [];\n        /** @var MapMarker $model */\n        foreach ($models as $model) {\n            $format = [\n                'id' => $model->id,\n                'text' => $model->markerTitle(),\n            ];\n\n            $formatted[] = $format;\n        }\n\n        return response()->json($formatted);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/MentionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Search\\MentionRequest;\nuse App\\Models\\Campaign;\nuse App\\Services\\Search\\MentionService;\nuse Illuminate\\Http\\Request;\n\nclass MentionController extends Controller\n{\n    public function __construct(protected MentionService $service) {}\n\n    public function index(Request $request, Campaign $campaign)\n    {\n        $this->authorize('member', $campaign);\n\n        $this->service\n            ->user(auth()->user())\n            ->request($request)\n            ->campaign($campaign);\n\n        return response()->json(\n            $this->service->search()\n        );\n    }\n\n    public function load(MentionRequest $request, Campaign $campaign)\n    {\n        $this->authorize('member', $campaign);\n\n        $this->service\n            ->user(auth()->user())\n            ->request($request)\n            ->campaign($campaign);\n\n        return response()->json(\n            $this->service->load()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/RecentController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Search\\RecentService;\nuse Illuminate\\Http\\JsonResponse;\n\n/**\n * Controller that loads recently searched entities and other information for the search popout\n */\nclass RecentController extends Controller\n{\n    public function __construct(protected RecentService $recentService) {}\n\n    /**\n     * Get a user's recent searches\n     */\n    public function index(Campaign $campaign): JsonResponse\n    {\n        $recent = [];\n        $this->recentService->campaign($campaign);\n        if (auth()->check()) {\n            $recent = $this->recentService\n                ->user(auth()->user())\n                ->recent();\n        }\n\n        return response()->json([\n            'recent' => $recent,\n            'bookmarks' => $this->recentService->bookmarks(),\n            'indexes' => $this->recentService->indexes(),\n            'fulltext_route' => route('search.fulltext', [$campaign]),\n            'texts' => [\n                'recents' => __('search.lookup.recents'),\n                'results' => __('search.lookup.results'),\n                'bookmarks' => __('entities.bookmarks'),\n                'index' => __('search.lookup.lists'),\n                'hint' => __('search.lookup.hint'),\n                'fulltext' => __('search.fulltext'),\n                'keyboard' => __('search.lookup.keyboard', [\n                    'k' => '<strong>k</strong>',\n                    'esc' => '<strong>esc</strong>',\n                ]),\n                'empty_results' => __('search.lookup.empty'),\n            ],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Search/TemplateController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Search;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Services\\Search\\TemplateSearchService;\nuse Illuminate\\Http\\Request;\n\nclass TemplateController extends Controller\n{\n    public function __construct(public TemplateSearchService $searchService) {}\n\n    public function index(Request $request, Campaign $campaign, EntityType $entityType)\n    {\n        return response()->json(\n            $this->searchService\n                ->request($request)\n                ->campaign($campaign)\n                ->entityType($entityType)\n                ->search()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/SearchController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\n\nclass SearchController extends Controller\n{\n    /**\n     * Old deprecated search page\n     */\n    public function search(Request $request, Campaign $campaign): RedirectResponse\n    {\n        $term = $request->get('q');\n        if (empty($term) || ! is_string($term)) {\n            return redirect()->route('search.fulltext', [$campaign]);\n        }\n        $term = mb_trim($term);\n\n        return redirect()->route('search.fulltext', [$campaign, 'term' => $term]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/AccountController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\n\nclass AccountController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity', 'password.confirm']);\n    }\n\n    public function index()\n    {\n        $user = auth()->user();\n\n        return view('settings.account')\n            ->with(compact('user'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/ApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Settings\\StoreApiToken;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Date;\nuse Illuminate\\View\\View;\nuse Laravel\\Passport\\Client;\nuse Laravel\\Passport\\Token;\n\nclass ApiController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function index(Request $request)\n    {\n        $tokens = $request->user()->tokens()\n            ->with('client')\n            ->where('revoked', false)\n            ->where('expires_at', '>', Date::now())\n            ->orderByDesc('created_at')\n            ->get();\n\n        // Retrieving all the user's connections to third-party OAuth app clients.\n        $applications = $tokens\n            ->reject(fn (Token $token): bool => $token->client->revoked || $token->client->firstParty())\n            ->values();\n\n        $clients = Client::where('user_id', auth()->user()->id)\n            ->where('revoked', false)\n            ->orderByDesc('created_at')\n            ->paginate(config('limits.pagination'), ['*'], 'clientsPage');\n\n        $tokens = $request->user()->tokens()\n            ->with('client')\n            ->where('revoked', false)\n            ->where('expires_at', '>', Date::now())\n            ->orderByDesc('created_at')\n            ->paginate(config('limits.pagination'), ['*'], 'tokensPage');\n\n        return view('settings.api', compact('tokens', 'clients', 'applications'));\n    }\n\n    /**\n     * Create a new api token form\n     *\n     * @return Application|Factory|\\Illuminate\\Contracts\\View\\View\n     *\n     * @throws AuthorizationException\n     */\n    public function create()\n    {\n        return view('settings.api.create');\n    }\n\n    public function store(StoreApiToken $request)\n    {\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $accessToken = auth()->user()->createToken($request['name'])->accessToken;\n\n        return redirect()->route('settings.api')->with('new_token', $accessToken);\n    }\n\n    public function revoke(Request $request, Token $token)\n    {\n        $this->authorize('update', $token);\n\n        $revokedToken = Token::where('user_id', auth()->user()->id)\n            ->where('id', $token->id)\n            ->first();\n\n        $revokedToken->revoke();\n\n        return redirect()->route('settings.api')->with('success', 'Token deleted successfully.');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/AppearanceController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Facades\\UserCache;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreSettingsLayout;\nuse App\\Models\\User;\n\nclass AppearanceController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    public function index()\n    {\n        $highlight = request()->get('highlight');\n        $from = request()->get('from');\n\n        $editorOptions = [\n            '' => __('settings/appearance.editors.default', ['name' => 'Summernote']),\n        ];\n        if (auth()->user()->created_at->isBefore('2023-01-09 12:00:00')) {\n            $editorOptions['legacy'] = __('settings/appearance.editors.legacy', ['name' => 'TinyMCE 4']);\n        }\n        $editorOptions['tiptap'] = __('settings/appearance.editors.tiptap');\n\n        return view('settings.appearance')\n            ->with('highlight', $highlight)\n            ->with('from', $from)\n            ->with('editorOptions', $editorOptions);\n    }\n\n    public function update(StoreSettingsLayout $request)\n    {\n        if ($request->ajax()) {\n            return response()->json();\n        }\n        /** @var User $user */\n        $user = $request->user();\n        $settingFields = $request->only([\n            'editor', 'advanced_mentions', 'new_entity_workflow',\n            'campaign_switcher_order_by', 'date_format',\n        ]);\n        $user\n            ->saveSettings($settingFields)\n            ->update($request->only(['theme']));\n\n        // refresh user campaigns in cache if order by has changed\n        if ($request->has('campaign_switcher_order_by')) {\n            UserCache::clear();\n        }\n\n        if ($request->filled('from')) {\n            $from = base64_decode($request->get('from'));\n\n            return redirect()\n                ->to($from)\n                ->with('success', __('settings/appearance.success'));\n        }\n\n        return redirect()\n            ->route('settings.appearance')\n            ->with('success', __('settings/appearance.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/Apps/DiscordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings\\Apps;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\DiscordService;\nuse Exception;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass DiscordController extends Controller\n{\n    protected DiscordService $discord;\n\n    public function __construct(DiscordService $discord)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->discord = $discord;\n    }\n\n    public function callback(Request $request)\n    {\n        try {\n            $this->discord\n                ->user($request->user())\n                ->validate($request->get('code', ''))\n                ->addServer()\n                ->addRoles();\n\n            return response()->redirectToRoute('settings.apps')->withSuccess(\n                __('settings.apps.discord.success.add')\n            );\n        } catch (Exception $e) {\n            Log::error('Discord sync error for ' . $request->user()->id . ': ' . $e->getMessage());\n\n            return response()->redirectToRoute('settings.apps')->withError(\n                __('settings.apps.discord.errors.add')\n            );\n        }\n    }\n\n    public function destroy(Request $request)\n    {\n        try {\n            $this->discord\n                ->user($request->user())\n                ->remove();\n\n            return response()->redirectToRoute('settings.apps')->withSuccess(\n                __('settings.apps.discord.success.remove')\n            );\n        } catch (Exception $e) {\n            return response()->redirectToRoute('settings.apps')->withError(\n                __('settings.apps.discord.errors.remove')\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/AppsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass AppsController extends Controller\n{\n    /**\n     * AppsController constructor.\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function index()\n    {\n        return view('settings.apps');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/BoostController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\RedirectResponse;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\n\nclass BoostController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    /**\n     * @return Application|Factory|View|RedirectResponse\n     *\n     * @throws AuthorizationException\n     * @throws ContainerExceptionInterface\n     * @throws NotFoundExceptionInterface\n     */\n    public function index()\n    {\n        if (! auth()->user()->hasBoosterNomenclature()) {\n            return redirect()->route('settings.premium');\n        }\n        // If a campaign was provided, make sure we have access to it\n        $campaignId = request()->get('campaign');\n        $campaign = null;\n        $superboost = false;\n\n        /** @var User $user */\n        $user = auth()->user();\n        $boosts = $user->boosts()->with('campaign')->groupBy('campaign_id')->get();\n        $userCampaigns = $user->campaigns()->unboosted()->whereNotIn('campaigns.id', $boosts->pluck('campaign_id'))->get();\n\n        if (! empty($campaignId)) {\n            /** @var Campaign $campaign */\n            $campaign = Campaign::where(['id' => (int) $campaignId])->firstOrFail();\n            CampaignCache::campaign($campaign);\n            $this->authorize('access', $campaign);\n\n            if ($campaign->superboosted()) {\n                return redirect()\n                    ->route('settings.boost');\n            }\n\n            $userCampaigns = $userCampaigns->where('id', '!=', $campaignId);\n            $superboost = request()->get('superboost') === '1';\n        }\n\n        return view('settings.boosters.index')\n            ->with('campaigns', $userCampaigns)\n            ->with('boosts', $boosts)\n            ->with('focus', $campaign)\n            ->with('superboost', $superboost);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/BragiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass BragiController extends Controller\n{\n    /**\n     * AppsController constructor.\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function index()\n    {\n        if (! auth()->user()->hasTokens()) {\n            abort(401);\n        }\n        $logs = auth()->user()->bragiLogs()->orderByDesc('created_at')->paginate();\n        $isAdmin = auth()->user()->hasRole('admin');\n\n        return view('settings.bragi')\n            ->with('logs', $logs)\n            ->with('isAdmin', $isAdmin);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/ClientController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Settings\\StoreClient;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\Request;\nuse Laravel\\Passport\\Client;\nuse Laravel\\Passport\\ClientRepository;\n\nclass ClientController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    /**\n     * Create a new api client form\n     *\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create()\n    {\n        return view('settings.client.create');\n    }\n\n    public function edit(Client $client)\n    {\n        $this->authorize('update', $client);\n\n        $client = Client::where('user_id', auth()->user()->id)\n            ->where('id', $client->id)\n            ->first();\n\n        return view('settings.client.update', ['client' => $client]);\n    }\n\n    public function update(StoreClient $request, Client $client)\n    {\n        $this->authorize('update', $client);\n\n        $updatedClient = Client::where('user_id', auth()->user()->id)\n            ->where('id', $client->id)\n            ->first();\n\n        $updatedClient->forceFill($request->only(['name', 'redirect']))->save();\n\n        return redirect()->route('settings.api', ['clients' => 1])->with('success', 'Client updated successfully.');\n    }\n\n    public function store(StoreClient $request)\n    {\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        // Creating an OAuth app client that belongs to the given user.\n        $client = app(ClientRepository::class)->createAuthorizationCodeGrantClient(\n            user: auth()->user(),\n            name: $request['name'],\n            redirectUris: [$request['redirect']],\n            confidential: true,\n            enableDeviceFlow: true\n        );\n\n        return redirect()->route('settings.api', ['clients' => 1])->with('new_token', $client->plainSecret);\n    }\n\n    public function revoke(Request $request, Client $client)\n    {\n        $this->authorize('update', $client);\n\n        $client = Client::where('user_id', auth()->user()->id)\n            ->where('id', $client->id)\n            ->first();\n\n        $client->forceFill(['revoked' => true])->save();\n\n        return redirect()->route('settings.api')->with('success', 'Client deleted successfully.');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/NewsletterApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Settings\\NewsletterStore;\nuse App\\Jobs\\Emails\\MailSettingsChangeJob;\nuse Illuminate\\Http\\JsonResponse;\n\nclass NewsletterApiController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    /**\n     * @return JsonResponse\n     */\n    public function update(NewsletterStore $request)\n    {\n        $request->user()\n            ->updateSettings($request->only(['mail_release']))\n            ->save();\n\n        MailSettingsChangeJob::dispatch($request->user());\n\n        return response()->json(['success' => true, 'message' => __('profiles.newsletter.updated')]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/NewsletterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\View\\View;\n\nclass NewsletterController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function index(Request $request)\n    {\n        $user = $request->user();\n\n        return view('settings.notifications', compact('user'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/PatreonController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\PatreonService;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\View\\View;\n\nclass PatreonController extends Controller\n{\n    protected PatreonService $service;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(PatreonService $service)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->service = $service;\n    }\n\n    /**\n     * @return Factory|View\n     */\n    public function index(Request $request)\n    {\n        return view('settings.patreon');\n    }\n\n    /**\n     * @return RedirectResponse\n     */\n    public function unlink(Request $request)\n    {\n        $this->service->user($request->user())->unlink();\n\n        return redirect()->route('settings.patreon')\n            ->with('success', __('settings.patreon.remove.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/PremiumController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse App\\Services\\Campaign\\BoostService;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass PremiumController extends Controller\n{\n    protected BoostService $service;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(BoostService $campaignBoostService)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->service = $campaignBoostService;\n    }\n\n    public function index()\n    {\n        if (auth()->user()->hasBoosterNomenclature()) {\n            return redirect()->route('settings.boost');\n        }\n\n        // If a campaign was provided, make sure we have access to it\n        $campaignId = request()->get('campaign');\n        $campaign = null;\n\n        /** @var User $user */\n        $user = auth()->user();\n        $premiums = $user->boosts()\n            ->with(['campaign', 'campaign.boosts', 'campaign.boosts.user'])\n            ->has('campaign')\n            ->groupBy('campaign_id')\n            ->get();\n        $userCampaigns = $user->campaigns()->with(['boosts', 'boosts.user'])->unboosted()->whereNotIn('campaigns.id', $premiums->pluck('campaign_id'))->get();\n\n        if (! empty($campaignId)) {\n            /** @var Campaign $campaign */\n            $campaign = Campaign::where(['id' => (int) $campaignId])->firstOrFail();\n            CampaignCache::campaign($campaign);\n            $this->authorize('access', $campaign);\n\n            if ($campaign->premium()) {\n                return redirect()\n                    ->route('settings.premium');\n            }\n\n            $userCampaigns = $userCampaigns->where('id', '!=', $campaignId);\n        }\n\n        return view('settings.premium.index')\n            ->with('campaigns', $userCampaigns)\n            ->with('premiums', $premiums)\n            ->with('focus', $campaign);\n    }\n\n    /**\n     * Migrate a user to the new system\n     *\n     * @return RedirectResponse\n     */\n    public function migrate()\n    {\n        try {\n            $this->service\n                ->user(auth()->user())\n                ->migrate();\n\n            return redirect()->route('settings.premium')\n                ->with('success', __('Thanks for switching to our premium campaigns!'));\n        } catch (TranslatableException $ex) {\n            return redirect()\n                ->route('settings.boost')\n                ->with('error', __($ex->getMessage()));\n        }\n    }\n\n    /**\n     * For local debugging\n     *\n     * @return RedirectResponse|void\n     */\n    public function back()\n    {\n        if (! config('app.debug')) {\n            return redirect()->route('settings.premium');\n        }\n\n        $this->service\n            ->user(auth()->user())\n            ->back();\n\n        return redirect()->route('settings.boost')\n            ->with('success', __('Migrated back'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/ProfileController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreSettingsProfile;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Http\\Request;\n\nclass ProfileController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    /**\n     * @return Application|Factory|View\n     */\n    public function index(Request $request)\n    {\n        $user = $request->user();\n\n        return view('settings.profile', compact('user'));\n    }\n\n    public function update(StoreSettingsProfile $request)\n    {\n        if ($request->ajax()) {\n            return response()->json();\n        }\n        /** @var User $user */\n        $user = $request->user();\n\n        $user->saveSettings($request->only(['settings.hide_subscription', 'settings.marketplace_name', 'settings.pronouns', 'settings.link']))\n            ->update($request->only('name', 'has_last_login_sharing', 'avatar', 'profile'));\n\n        return redirect()\n            ->route('settings.profile')\n            ->with('success', trans('settings.profile.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/ReferralController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\Referrals\\ManagementService;\n\nclass ReferralController extends Controller\n{\n    public function __construct(protected ManagementService $service)\n    {\n        $this->middleware('auth');\n    }\n\n    public function index()\n    {\n        $this->service->user(auth()->user());\n\n        return view('settings.referrals.index')\n            ->with('referral', $this->service->referral())\n            ->with('users', $this->service->users())\n            ->with('subscribers', $this->service->subscribers())\n            ->with('badge', $this->service->badge());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/ReleaseController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\AppRelease;\nuse App\\Services\\TutorialService;\nuse Illuminate\\Http\\JsonResponse;\n\nclass ReleaseController extends Controller\n{\n    protected TutorialService $tutorialService;\n\n    public function __construct(TutorialService $tutorialService)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->tutorialService = $tutorialService;\n    }\n\n    /**\n     * Update the user's last viewed release\n     *\n     * @return JsonResponse\n     */\n    public function read(AppRelease $appRelease)\n    {\n        $user = auth()->user();\n\n        // Track it using the system already set up for tutorials.\n        $this->tutorialService->user($user)->track('releases_' . $appRelease->category_id->value . '_' . $appRelease->id);\n\n        return response()->json([\n            'success' => true,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/Subscription/CancellationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings\\Subscription;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\SubscriptionCancel;\nuse App\\Services\\Subscription\\CancellationService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Collection;\n\nclass CancellationController extends Controller\n{\n    public function __construct(\n        protected CancellationService $service,\n    ) {\n        $this->middleware(['auth', 'identity', 'subscriptions']);\n    }\n\n    public function index(Request $request)\n    {\n        $user = $request->user();\n        if ($user->hasPayPal() || $user->subscription('kanka')?->onGracePeriod()) {\n            return view('settings.subscription.cancellation.grace', compact(\n                'user',\n            ));\n        }\n\n        // Loss data\n        $premiumCampaign = null;\n\n        /** @var Collection<int, int> $members */\n        $members = new Collection;\n        $plugins = 0;\n        $premiumCampaigns = $user->boosts()\n            ->with([\n                'campaign' => function ($sub) {\n                    return $sub->select('campaigns.id', 'campaigns.name');\n                },\n                'campaign.members',\n                'campaign.plugins',\n            ])\n            ->groupBy('campaign_id')->get();\n        foreach ($premiumCampaigns as $campaign) {\n            if (! $premiumCampaign) {\n                $premiumCampaign = $campaign->campaign;\n                foreach ($campaign->campaign->members as $member) {\n                    $members->push($member->user_id);\n                }\n                $plugins += $campaign->campaign->plugins->count();\n            }\n        }\n        $members = $members->unique();\n        $players = $members->reject(fn ($userId) => $userId == $user->id)->count();\n\n        $discord = auth()->user()->discord();\n\n        return view('settings.subscription.cancellation.form', compact(\n            'user',\n            'premiumCampaigns',\n            'premiumCampaign',\n            'players',\n            'discord',\n            'plugins',\n        ));\n    }\n\n    public function save(SubscriptionCancel $request)\n    {\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $this->service\n            ->user($request->user())\n            ->request($request)\n            ->cancel();\n\n        return redirect()\n            ->route('settings.subscription.cancelled', ['cancelled' => 1])\n            ->with('sub_tracking', 'cancel')\n            ->with('sub_value', 0);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/Subscription/CancelledController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings\\Subscription;\n\nuse App\\Facades\\DataLayer;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\n\nclass CancelledController extends Controller\n{\n    public function __construct()\n    {\n        $this->middleware(['auth', 'identity', 'subscriptions']);\n    }\n\n    public function index(Request $request)\n    {\n        $user = $request->user();\n        // If the user doesn't have an ending sub, send them back to the subscription page\n        if (! $user->subscription('kanka')?->ends_at) {\n            return redirect()\n                ->route('settings.subscription');\n        }\n        $tracking = session()->get('sub_tracking');\n\n        $gaTrackingEvent = null;\n        if (! empty($tracking)) {\n            $gaTrackingEvent = 'TJhYCMDErpYDEOaOq7oC';\n            if ($tracking === 'cancel') {\n                DataLayer::newCancelledSubscriber();\n            }\n        }\n\n        $endDate = $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y');\n\n        return view('settings.subscription.cancelled')\n            ->with('user', $user)\n            ->with('endDate', $endDate)\n            ->with('gaTrackingEvent', $gaTrackingEvent);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/Subscription/FinishController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings\\Subscription;\n\nuse App\\Facades\\DataLayer;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\TierPrice;\nuse App\\Models\\User;\nuse App\\Services\\SubscriptionService;\nuse Illuminate\\Http\\Request;\n\nclass FinishController extends Controller\n{\n    public function __construct(\n        protected SubscriptionService $subscriptionService\n    ) {\n        $this->middleware(['auth', 'identity', 'subscriptions']);\n    }\n\n    public function index(Request $request)\n    {\n        /** @var User $user */\n        $user = auth()->user();\n\n        $stripeApiToken = config('cashier.key', null);\n        $status = $this->subscriptionService->user($user)->status();\n        $current = $this->subscriptionService->currentPlan();\n        $currency = $user->currencySymbol();\n\n        $tracking = session()->get('sub_tracking');\n        $newSubPricingId = session()->get('sub_id');\n        $isPayPal = $user->hasPayPal();\n        $gaTrackingEvent = $gaPurchase = null;\n        if (! empty($tracking)) {\n            $gaTrackingEvent = 'TJhYCMDErpYDEOaOq7oC';\n            DataLayer::newSubscriber();\n            DataLayer::add('userSubValue', session('sub_value'));\n        }\n\n        if (! empty($newSubPricingId)) {\n            /** @var TierPrice $pricing */\n            $pricing = TierPrice::find($newSubPricingId);\n            $gaPurchase = [\n                'value' => $pricing->cost,\n                'currency' => $pricing->currency,\n                'coupon' => session()->get('sub_coupon'),\n                'item_id' => $pricing->tier->id,\n                'item_name' => $pricing->tier->name . ($pricing->isYearly() ? ' Yearly' : null),\n            ];\n        }\n\n        $availableCampaigns = $user->campaigns()->unboosted()->get();\n        $isTrial = $request->get('trial') == 1;\n\n        return view('settings.subscription.finish', compact(\n            'stripeApiToken',\n            'status',\n            'availableCampaigns',\n            'user',\n            'currency',\n            'current',\n            'tracking',\n            'gaTrackingEvent',\n            'gaPurchase',\n            'isPayPal',\n            'isTrial',\n        ));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/Subscription/FreeTrialController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings\\Subscription;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse App\\Services\\Subscription\\TrialService;\nuse Illuminate\\Http\\Request;\n\nclass FreeTrialController extends Controller\n{\n    public function __construct(\n        protected TrialService $trialService\n    ) {\n        $this->middleware(['auth', 'identity', 'subscriptions']);\n    }\n\n    public function index(Request $request)\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $this->authorize('free-trial', $user);\n\n        return view('settings.subscription.free-trial', compact(\n            'user',\n        ));\n    }\n\n    public function accept(Request $request)\n    {\n        /** @var User $user */\n        $user = $request->user();\n        $this->authorize('free-trial', $user);\n\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $this->trialService->user($user)->accept();\n\n        return redirect()->route('settings.subscription.finish', ['trial' => 1]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/SubscriptionApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ValidateCoupon;\nuse App\\Models\\Tier;\nuse App\\Models\\User;\nuse App\\Services\\Subscription\\CouponService;\nuse App\\Services\\SubscriptionService;\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Laravel\\Cashier\\Exceptions\\CustomerAlreadyCreated;\nuse Laravel\\Cashier\\PaymentMethod;\nuse Stripe\\Card;\n\nclass SubscriptionApiController extends Controller\n{\n    protected SubscriptionService $service;\n\n    protected CouponService $couponService;\n\n    /**\n     * SubscriptionApiController constructor.\n     */\n    public function __construct(SubscriptionService $service, CouponService $couponService)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->service = $service;\n        $this->couponService = $couponService;\n    }\n\n    /**\n     * Creates an intent for payment so we can capture the payment\n     * method for the user.\n     *\n     * @param  Request  $request  The request data from the user.\n     */\n    public function setupIntent(Request $request)\n    {\n        return $request->user()->createSetupIntent();\n    }\n\n    /**\n     * Adds a payment method to the current user.\n     *\n     * @return JsonResponse\n     *\n     * @throws CustomerAlreadyCreated\n     */\n    public function paymentMethods(Request $request)\n    {\n        /** @var User $user */\n        $user = $request->user();\n        $paymentMethodID = $request->get('payment_method');\n\n        if ($user->stripe_id == null) {\n            $user->createAsStripeCustomer();\n        }\n\n        if ($user->isFrauding()) {\n            return response()\n                ->json(null, 429);\n        }\n\n        $user->addPaymentMethod($paymentMethodID);\n        $user->updateDefaultPaymentMethod($paymentMethodID);\n\n        // Save the expiration date on the user for alerts about expiring cards\n        $payment = $user->defaultPaymentMethod();\n        if ($payment && $payment instanceof PaymentMethod) {\n            /** @var Card $card */\n            $card = $payment->asStripePaymentMethod()->card;\n            $expiresAt = Carbon::createFromDate($card->exp_year, $card->exp_month)->endOfMonth();\n            $user->card_expires_at = $expiresAt;\n            $user->save();\n        }\n\n        return response()->json(null, 204);\n    }\n\n    /**\n     * Returns the payment methods the user has saved\n     *\n     * @param  Request  $request  The request data from the user.\n     */\n    public function getPaymentMethods(Request $request)\n    {\n        $user = $request->user();\n\n        $methods = [];\n\n        if ($user->hasPaymentMethod()) {\n            foreach ($user->paymentMethods() as $method) {\n                array_push($methods, [\n                    'id' => $method->id, // @phpstan-ignore-line\n                    'brand' => $method->card->brand, // @phpstan-ignore-line\n                    'last_four' => $method->card->last4, // @phpstan-ignore-line\n                    'exp_month' => $method->card->exp_month, // @phpstan-ignore-line\n                    'exp_year' => $method->card->exp_year, // @phpstan-ignore-line\n                ]);\n            }\n        }\n\n        return response()->json($methods);\n    }\n\n    /**\n     * Removes a payment method for the current user.\n     *\n     * @param  Request  $request  The request data from the user.\n     */\n    public function removePaymentMethod(Request $request)\n    {\n        /** @var User $user */\n        $user = $request->user();\n        $paymentMethodID = $request->get('id');\n\n        $paymentMethods = $user->paymentMethods();\n\n        foreach ($paymentMethods as $method) {\n            // @phpstan-ignore-next-line\n            if ($method->id == $paymentMethodID) {\n                $method->delete();\n                break;\n            }\n        }\n\n        $user->card_expires_at = null;\n        $user->saveQuietly();\n\n        return response()->json(null, 204);\n    }\n\n    public function checkCoupon(ValidateCoupon $request, Tier $tier)\n    {\n        /** @var User $user */\n        $user = $request->user();\n        $coupon = $request->get('coupon');\n\n        return response()->json(\n            $this->couponService\n                ->user($user)\n                ->code((string) $coupon)\n                ->tier($tier)\n                ->check()\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/SubscriptionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Enums\\UserAction;\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Settings\\UserSubscribeStore;\nuse App\\Jobs\\Users\\AbandonedCart;\nuse App\\Models\\Tier;\nuse App\\Models\\User;\nuse App\\Services\\SubscriptionService;\nuse App\\Services\\SubscriptionUpgradeService;\nuse App\\Services\\Users\\CurrencyService;\nuse App\\Services\\Users\\EmailValidationService;\nuse Carbon\\Carbon;\nuse Exception;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Cashier\\Exceptions\\IncompletePayment;\n\nclass SubscriptionController extends Controller\n{\n    protected SubscriptionService $subscription;\n\n    protected SubscriptionUpgradeService $subscriptionUpgrade;\n\n    protected EmailValidationService $emailValidation;\n\n    protected CurrencyService $currencyService;\n\n    /**\n     * SubscriptionController constructor.\n     */\n    public function __construct(\n        SubscriptionService $service,\n        SubscriptionUpgradeService $subscriptionUpgradeService,\n        EmailValidationService $validationService,\n        CurrencyService $currencyService\n    ) {\n        $this->middleware(['auth', 'identity', 'subscriptions']);\n        $this->subscription = $service;\n        $this->subscriptionUpgrade = $subscriptionUpgradeService;\n        $this->emailValidation = $validationService;\n        $this->currencyService = $currencyService;\n    }\n\n    public function index()\n    {\n        /** @var User $user */\n        $user = auth()->user();\n        $stripeApiToken = config('cashier.key');\n        $this->currencyService->user($user)->setDefaultCurrency();\n        $status = $this->subscription->user($user)->status();\n        $current = $this->subscription->currentPlan();\n        $currency = $user->currencySymbol();\n        $tiers = Tier::with('prices')->ordered()->get();\n        $isPayPal = $user->hasPayPal();\n        $hasManual = $user->hasManualSubscription();\n        $tempTiers = [];\n        $downgrades = [];\n        $upgrades = [];\n        if (isset($current)) {\n            foreach ($tiers as $tier) {\n                if ($tier->id == $current->tier->id) {\n                    $downgrades = $tempTiers;\n                } else {\n                    $tempTiers[] = $tier->id;\n                }\n            }\n            $upgrades = array_diff($tempTiers, $downgrades);\n        }\n\n        return view('settings.subscription.index', compact(\n            'stripeApiToken',\n            'status',\n            'user',\n            'currency',\n            'current',\n            'tiers',\n            'isPayPal',\n            'hasManual',\n            'upgrades',\n            'downgrades',\n        ));\n    }\n\n    public function change(Request $request, Tier $tier)\n    {\n        if ($tier->isFree()) {\n            dd('Cancel instead');\n        }\n        /** @var User $user */\n        $user = $request->user();\n        $period = $request->get('period') === 'yearly' ? PricingPeriod::Yearly : PricingPeriod::Monthly;\n\n        // If the user has a cancelled sub still ending\n        if ($user->subscribed('kanka') && $user->subscription('kanka')->onGracePeriod() && ! $user->hasPayPal()) {\n            if ($tier->isCurrent($user)) {\n                return view('settings.subscription.renew')\n                    ->with('user', $user);\n            }\n\n            return view('settings.subscription.change_blocked')\n                ->with('user', $user);\n        }\n\n        $amount = $this->subscription\n            ->user($request->user())\n            ->tier($tier)\n            ->period($period)\n            ->amount();\n        $card = $user->hasPaymentMethod() ? Arr::first($user->paymentMethods()) : null;\n        if (empty($user->stripe_id)) {\n            $user->createAsStripeCustomer();\n        }\n        $intent = $user->createSetupIntent();\n        $isDowngrading = $this->subscription->downgrading();\n        $isYearly = $period->isYearly();\n        $hasPromo = true; // \\Carbon\\Carbon::create(2023, 11, 28)->isFuture();\n        $limited = $this->subscription->isLimited();\n        if ($user->hasPayPal() || $user->hasManualSubscription()) {\n            $limited = true;\n        }\n        $upgrade = $this->subscriptionUpgrade\n            ->user($user)\n            ->tier($tier)\n            ->period($period)\n            ->upgradePrice();\n        $currency = $user->currencySymbol();\n\n        if ($user->isFrauding()) {\n            $this->emailValidation->user($user)->requiresEmail();\n        }\n\n        if ($user->hasNewsletter()) {\n            $delay = app()->isProduction() ? 30 : 1;\n            AbandonedCart::dispatch(auth()->user(), $tier)->delay(now()->addMinutes($delay));\n        }\n\n        $nextBillingDate = Carbon::now();\n        if ($period === PricingPeriod::Yearly) {\n            $nextBillingDate->addYear();\n        } else {\n            $nextBillingDate->addMonth();\n        }\n\n        return view('settings.subscription.change', compact(\n            'tier',\n            'period',\n            'amount',\n            'card',\n            'intent',\n            'currency',\n            'user',\n            'upgrade',\n            'isDowngrading',\n            'hasPromo',\n            'limited',\n            'isYearly',\n            'nextBillingDate'\n        ));\n    }\n\n    public function renew(Request $request)\n    {\n        if ($request->ajax()) {\n            return response()->json([]);\n        }\n        try {\n            $this->subscription\n                ->user($request->user())\n                ->renew();\n            $request->user()->log(UserAction::subRenew);\n\n            $routeOptions = [];\n\n            return redirect()\n                ->route('settings.subscription', $routeOptions)\n                ->withSuccess(__('subscriptions.renew.success'));\n        } catch (IncompletePayment $exception) {\n            session()->put('subscription_callback', $request->get('payment_id'));\n\n            return redirect()->route(\n                'cashier.payment',\n                // @phpstan-ignore-next-line\n                [$exception->payment->id, 'redirect' => route('settings.subscription.callback')]\n            );\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('settings.subscription')\n                ->with('error_raw', $e->getTranslatedMessage());\n        } catch (Exception $e) {\n            // Error? json\n            return response()->json([\n                'error' => true,\n                'message' => $e->getMessage(),\n            ]);\n        }\n    }\n\n    /**\n     * Subscribe\n     */\n    public function subscribe(UserSubscribeStore $request, Tier $tier)\n    {\n        if ($request->user()->isFrauding()) {\n            return redirect()\n                ->route('settings.subscription')\n                ->withError(__('settings.subscription.errors.failed', ['email' => config('app.email')]));\n        }\n        if ($request->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        try {\n            $period = $request->get('period') === 'yearly' ? PricingPeriod::Yearly : PricingPeriod::Monthly;\n            $this->subscription->user($request->user())\n                ->tier($tier)\n                ->period($period)\n                ->coupon($request->get('coupon'))\n                ->request($request->all())\n                ->change()\n                ->finish();\n\n            return redirect()\n                ->route('settings.subscription.finish')\n                ->with('sub_tracking', 'subscribed')\n                ->with('sub_value', $this->subscription->subscriptionValue())\n                ->with('sub_coupon', $request->get('coupon'))\n                ->with('sub_id', $this->subscription->tierPrice()->id);\n        } catch (IncompletePayment $exception) {\n            session()->put('subscription_callback', $request->get('payment_id'));\n\n            return redirect()->route(\n                'cashier.payment',\n                // @phpstan-ignore-next-line\n                [$exception->payment->id, 'redirect' => route('settings.subscription.callback')]\n            );\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('settings.subscription')\n                ->with('error_raw', $e->getTranslatedMessage());\n        } catch (Exception $e) {\n            // If they are trying to sub in another currency, let's help them understand that issue\n            $error = $e->getMessage();\n            if (Str::contains($error, 'expected currency')) {\n                preg_match_all('/`(\\w{3})`/', $error, $currencies);\n\n                return redirect()\n                    ->route('settings.subscription')\n                    ->with('error_raw', __('subscription.errors.invalid_currency', [\n                        'old' => mb_strtoupper($currencies[1][0]),\n                        'new' => mb_strtoupper($currencies[1][1]),\n                        'email' => '<a href=\"mailto:' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>',\n                    ]));\n            }\n\n            // Error? json\n            return response()->json([\n                'error' => true,\n                'message' => $e->getMessage(),\n            ]);\n        }\n    }\n\n    /**\n     * Stripe secure 3d callback page handler\n     */\n    public function callback(Request $request)\n    {\n        // Not expecting a callback\n        if (! session()->has('subscription_callback')) {\n            return redirect()\n                ->route('settings.subscription');\n        }\n\n        // This contains our original request\n        session()->remove('subscription_callback');\n\n        if ($request->get('success')) {\n            return redirect()\n                ->route('settings.subscription')\n                ->withSuccess(__('settings.subscription.success.callback'));\n        }\n\n        return redirect()\n            ->route('settings.subscription')\n            ->withError(__('settings.subscription.errors.callback'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Settings/TutorialController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Services\\TutorialService;\n\nclass TutorialController extends Controller\n{\n    protected TutorialService $service;\n\n    public function __construct(TutorialService $service)\n    {\n        $this->middleware(['auth', 'identity']);\n        $this->service = $service;\n    }\n\n    public function reset()\n    {\n        if (app()->isProduction()) {\n            abort(404);\n        }\n        $this->service\n            ->user(auth()->user())\n            ->reset();\n\n        return redirect()->route('settings.profile')\n            ->with('success', __('Tutorials reset'));\n    }\n\n    public function dismiss(string $code)\n    {\n        $this->service\n            ->user(auth()->user())\n            ->track($code);\n\n        return response()->json(['success', true]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/SetupController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nclass SetupController extends Controller\n{\n    public function index()\n    {\n        if (! config('app.debug')) {\n            return abort(404);\n        }\n\n        return view('setup');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Spotlights/ApplicationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Spotlights;\n\nuse App\\Enums\\CampaignVisibility;\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Spotlights\\ApplyRequest;\nuse App\\Models\\Campaign;\nuse App\\Services\\Spotlights\\ApplyService;\nuse Illuminate\\Http\\Request;\n\nclass ApplicationController extends Controller\n{\n    public function __construct(protected ApplyService $service)\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    public function index()\n    {\n        $campaigns = auth()->user()->campaigns->where('visibility_id', CampaignVisibility::public);\n        if (request()->has('campaign')) {\n            $campaign = $campaigns->where('slug', request()->get('campaign'))->firstOrFail();\n        }\n\n        return view('spotlights.index')\n            ->with('campaigns', $campaigns)\n            ->with('campaign', $campaign ?? null);\n    }\n\n    public function form(Campaign $campaign)\n    {\n        $this->authorize('member', $campaign);\n\n        $content = $this->service\n            ->campaign($campaign)\n            ->content();\n\n        return view('spotlights.form')\n            ->with('campaign', $campaign)\n            ->with('content', $content);\n    }\n\n    public function save(ApplyRequest $request, Campaign $campaign)\n    {\n        $this->authorize('member', $campaign);\n\n        $this->service\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->request($request);\n\n        if ($request->get('action') == 'apply') {\n            try {\n                $this->service->apply();\n\n                return redirect()\n                    ->route('spotlights.form', [$campaign])\n                    ->with('success', __('spotlights.apply.success'));\n\n            } catch (TranslatableException $e) {\n                return redirect()\n                    ->route('spotlights.form', [$campaign])\n                    ->with('error', $e->getTranslatedMessage());\n            }\n        }\n\n        $this->service->save();\n\n        return redirect()\n            ->route('spotlights.form', [$campaign])\n            ->with('success', __('spotlights.form.success'));\n    }\n\n    public function retract(Request $request, Campaign $campaign)\n    {\n        $this->authorize('member', $campaign);\n\n        $this->service\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->retract();\n\n        return redirect()\n            ->route('spotlights.form', [$campaign])\n            ->with('success', __('spotlights.retract.success'));\n\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Subscription/PayPal/RenewalController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Subscription\\PayPal;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ValidatePledge;\nuse App\\Models\\Tier;\nuse App\\Services\\Subscription\\PayPalRenewalService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Log;\nuse Srmklive\\PayPal\\Services\\PayPal as PayPalClient;\n\nclass RenewalController extends Controller\n{\n    public function __construct(protected PayPalRenewalService $service)\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    public function index(Request $request)\n    {\n        $user = $request->user();\n        if (! $user->can('renewPaypalSubscription', $user)) {\n            return redirect()\n                ->route('settings.subscription')\n                ->with('error', __('subscriptions/paypal-renew.errors.permission'));\n        }\n\n        $tiers = Tier::ordered()->get()->reject(fn (Tier $tier) => $tier->isFree());\n\n        return view('settings.subscription.paypal-renew', compact('user', 'tiers'));\n    }\n\n    public function process(ValidatePledge $request, Tier $tier)\n    {\n        $this->authorize('renewPaypalSubscription', $request->user());\n\n        if ($tier->isFree()) {\n            abort(401);\n        }\n\n        $response = $this->service\n            ->user($request->user())\n            ->tier($tier)\n            ->process();\n\n        if (isset($response['id'])) {\n            foreach ($response['links'] as $link) {\n                if ($link['rel'] === 'approve') {\n                    return redirect()->away($link['href']);\n                }\n            }\n        }\n\n        Log::error('PayPal renewal process error', $response);\n\n        return redirect()\n            ->route('settings.subscription')\n            ->with('error', __('subscriptions/paypal.errors.failed') . ' ' . __('subscriptions/paypal.errors.contact', ['email' => config('app.email')]));\n    }\n\n    public function success(Request $request)\n    {\n        $provider = new PayPalClient;\n        $provider->setApiCredentials(config('paypal'));\n        $provider->getAccessToken();\n        $response = $provider->capturePaymentOrder($request['token']);\n\n        if (isset($response['status']) && $response['status'] === 'COMPLETED') {\n            $tierName = $response['purchase_units']['0']['reference_id'];\n            $tier = Tier::where('name', $tierName)->firstOrFail();\n\n            Log::info('PayPal renewal', $response);\n\n            $this->service\n                ->user($request->user())\n                ->renew($tier);\n\n            return redirect()\n                ->route('settings.subscription')\n                ->with('success', __('subscriptions.renew.success', ['date' => auth()->user()->subscription('kanka')->ends_at->isoFormat('MMMM D, Y')]));\n        }\n\n        Log::error('PayPal renewal capture error', $response);\n\n        return redirect()\n            ->route('settings.subscription')\n            ->with('error', __('subscriptions/paypal.errors.incomplete') . ' ' . __('subscriptions/paypal.errors.contact', ['email' => config('app.email')]));\n    }\n\n    public function cancel()\n    {\n        return redirect()\n            ->route('settings.subscription')\n            ->with('error', __('settings.subscription.errors.callback'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Summernote/GalleryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Summernote;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Campaigns\\GalleryImageStore;\nuse App\\Models\\Campaign;\nuse App\\Models\\Image;\nuse App\\Services\\Gallery\\SummernoteService;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Support\\Arr;\n\nclass GalleryController extends Controller\n{\n    protected SummernoteService $service;\n\n    public function __construct(SummernoteService $service)\n    {\n        $this->middleware('auth');\n        $this->service = $service;\n    }\n\n    public function index(Campaign $campaign)\n    {\n        $this->authorize('access', $campaign);\n\n        $start = request()->get('page', 0);\n        $name = request()->get('name');\n        $perPage = 20;\n        $offset = $start * $perPage;\n\n        $response = [\n            'data' => [],\n            'links' => [],\n        ];\n\n        // Has folder? Go back option\n        $folderId = request()->get('folder_id');\n        if (! empty($folderId) && ! request()->has('page')) {\n            $image = Image::where('is_folder', true)->where('id', $folderId)->firstOrFail();\n\n            $response['data'][] = [\n                'title' => __('crud.actions.back'),\n                'folder' => $image->is_folder,\n                'id' => $image->id,\n                'icon' => 'fa-regular fa-arrow-left',\n                'url' => route('campaign.gallery.summernote', $image->folder_id ? [$campaign, 'folder_id' => $image->folder_id] : [$campaign]),\n            ];\n        }\n        $canBrowse = auth()->user()->can('browse', [Image::class, $campaign]);\n        $images = Image::acl($canBrowse)\n            ->where('is_default', false)\n            ->orderBy('is_folder', 'desc')\n            ->orderBy('updated_at', 'desc')\n            ->offset($offset)\n            ->take(20);\n        if ($name) {\n            $images->where('name', 'like', \"%{$name}%\");\n        } else {\n            $images->imageFolder($folderId);\n        }\n        $images = $images->get();\n        /** @var Image $image */\n        foreach ($images as $image) {\n            $response['data'][] = [\n                'src' => $image->url(),\n                'title' => $image->name,\n                'folder' => $image->is_folder,\n                'icon' => 'fa-regular fa-folder',\n                'id' => $image->id,\n                'url' => $image->is_folder ? route('campaign.gallery.summernote', [$campaign, 'folder_id' => $image->id]) : [$campaign],\n                'thumb' => $image->getImagePath(128, 128),\n            ];\n        }\n\n        // Next page\n        $total = Image::count();\n        if ($offset + $perPage < $total) {\n            $params = ['page' => $start + 1];\n            $params[] = $campaign;\n            if (! empty($folderId)) {\n                $params['folder_id'] = $folderId;\n            }\n            $response['links']['next'] = route('campaign.gallery.summernote', $params);\n        }\n\n        return response()->json($response);\n    }\n\n    /**\n     * Called when adding an image from the text editor\n     */\n    public function upload(GalleryImageStore $request, Campaign $campaign): JsonResponse\n    {\n        $this->authorize('create', [Image::class, $campaign]);\n\n        $images = $this->service\n            ->campaign($campaign)\n            ->user(auth()->user())\n            ->store($request);\n        /** @var Image $image */\n        $image = Arr::first($images);\n\n        return response()->json([\n            'url' => $image->url(),\n            'id' => $image->id,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Tags/ChildController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Tags;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreTagEntity;\nuse App\\Models\\Campaign;\nuse App\\Models\\Tag;\nuse App\\Renderers\\Layouts\\Tag\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass ChildController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Tag $tag)\n    {\n        $this->campaign($campaign)->authEntityView($tag->entity);\n\n        $options = ['campaign' => $campaign, 'tag' => $tag, 'm' => $this->descendantsMode()];\n        $base = 'allChildren';\n        if ($this->filterToDirect()) {\n            $base = 'entities';\n        }\n        Datagrid::layout(Entity::class)\n            ->route('tags.children', $options);\n\n        $this->rows = $tag\n            ->{$base}()\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->with(['image', 'tags', 'entityType'])\n            ->paginate(config('limits.pagination'));\n\n        // Ajax Datagrid\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('tags.children', $tag);\n    }\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('update', $tag->entity);\n        $formOptions = ['tags.entity-add.save', $campaign, 'tag' => $tag];\n        if (request()->has('from-children')) {\n            $formOptions['from-children'] = true;\n        }\n\n        return view('tags.entities.create', [\n            'campaign' => $campaign,\n            'model' => $tag,\n            'formOptions' => $formOptions,\n        ]);\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(StoreTagEntity $request, Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('update', $tag->entity);\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $redirectUrlOptions = ['campaign' => $campaign, 'entity' => $tag->entity];\n        if (request()->has('from-children')) {\n            $redirectUrlOptions['tag_id'] = $tag->id;\n        }\n\n        $count = $tag->attachEntities($request->get('entities'));\n\n        return redirect()->route('entities.show', $redirectUrlOptions)\n            ->with('success', trans_choice('tags.children.create.attach_success', $count, ['name' => $tag->name, 'count' => $count]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Tags/PostController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Tags;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Tag;\nuse App\\Renderers\\Layouts\\Tag\\Post;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass PostController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Tag $tag)\n    {\n        $this->campaign($campaign)->authEntityView($tag->entity);\n\n        $options = ['campaign' => $campaign, 'tag' => $tag];\n\n        Datagrid::layout(Post::class)\n            ->route('tags.posts', $options);\n\n        $this->rows = $tag\n            ->posts()\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->with(['entity', 'entity.image', 'tags'])\n            ->has('entity')\n            ->paginate(config('limits.pagination'));\n\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return $this\n            ->campaign($campaign)\n            ->subview('tags.children.posts', $tag);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Tags/TagController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Tags;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Tag;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass TagController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Tag $tag)\n    {\n        $this->campaign($campaign)->authEntityView($tag->entity);\n\n        return redirect()->route('entities.children', [$campaign, $tag->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Tags/TransferController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Tags;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\TransferTag;\nuse App\\Models\\Campaign;\nuse App\\Models\\Tag;\nuse App\\Services\\TagService;\n\nclass TransferController extends Controller\n{\n    protected TagService $service;\n\n    public function __construct(TagService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function index(Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('update', $tag->entity);\n\n        return view('tags.transfer.entities.transfer', compact('campaign', 'tag'));\n    }\n\n    public function postIndex(Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('update', $tag->entity);\n\n        return view('tags.transfer.posts.transfer', compact('campaign', 'tag'));\n    }\n\n    public function process(TransferTag $request, Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('update', $tag->entity);\n        $newTag = Tag::where('id', $request->tag_id)->first();\n        try {\n            $this->service->transfer($tag, $newTag);\n\n            return redirect()\n                ->route('entities.show', [$campaign, $tag->entity])\n                ->with('success_raw', __('tags.transfer.success', ['tag' => $tag->name, 'newTag' => $newTag->name]));\n        } catch (TranslatableException $ex) {\n            return redirect()\n                ->route('entities.show', [$campaign, $tag->entity])\n                ->with('error', __('tags.transfer.fail', ['tag' => $tag->name, 'newTag' => $newTag->name]));\n        }\n    }\n\n    public function processPosts(TransferTag $request, Campaign $campaign, Tag $tag)\n    {\n        $this->authorize('update', $tag->entity);\n        $newTag = Tag::where('id', $request->tag_id)->first();\n        try {\n            $this->service->transferPosts($tag, $newTag);\n\n            return redirect()\n                ->route('entities.show', [$campaign, $tag->entity])\n                ->with('success_raw', __('tags.transfer.success_post', ['tag' => $tag->name, 'newTag' => $newTag->name]));\n        } catch (TranslatableException $ex) {\n            return redirect()\n                ->route('entities.show', [$campaign, $tag->entity])\n                ->with('error', __('tags.transfer.fail_post', ['tag' => $tag->name, 'newTag' => $newTag->name]));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Templates/LoadController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Templates;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Services\\Attributes\\TemplateService;\nuse Illuminate\\Http\\Request;\n\nclass LoadController extends Controller\n{\n    public function __construct(protected TemplateService $templateService) {}\n\n    public function index(Request $request, Campaign $campaign)\n    {\n\n        return response()->json(\n            $this\n                ->templateService\n                ->campaign($campaign)\n                ->api($request->get('template'))\n        );\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Timelines/TimelineController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Timelines;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Timeline;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse App\\Traits\\Controllers\\HasSubview;\nuse App\\Traits\\GuestAuthTrait;\n\nclass TimelineController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n    use HasDatagrid;\n    use HasSubview;\n\n    public function index(Campaign $campaign, Timeline $timeline)\n    {\n        $this->campaign($campaign)->authEntityView($timeline->entity);\n\n        return redirect()->route('entities.children', [$campaign, $timeline->entity]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Timelines/TimelineElementController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Timelines;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreTimelineElement;\nuse App\\Models\\Campaign;\nuse App\\Models\\Timeline;\nuse App\\Models\\TimelineElement;\nuse App\\Models\\TimelineEra;\nuse App\\Services\\MultiEditingService;\nuse App\\Services\\TimelineService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\View\\View;\n\nclass TimelineElementController extends Controller\n{\n    protected TimelineService $service;\n\n    /** @var string[] Form fields passed on to the model */\n    protected $fields = [\n        'era_id',\n        'entity_id',\n        'name',\n        'entry',\n        'position',\n        'colour',\n        'date',\n        'visibility_id',\n        'icon',\n        'is_collapsed',\n        'use_entity_entry',\n        'use_event_date',\n    ];\n\n    /**\n     * TimelineElementController constructor.\n     */\n    public function __construct(TimelineService $timelineService)\n    {\n        $this->service = $timelineService;\n    }\n\n    public function show(Campaign $campaign, Timeline $timeline, TimelineElement $timelineElement)\n    {\n        return redirect()->route('entities.show', [$campaign, $timeline->entity]);\n    }\n\n    public function index(Campaign $campaign, Timeline $timeline)\n    {\n        return redirect()->route('entities.show', [$campaign, $timeline->entity]);\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Request $request, Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        $eraId = $request->get('era_id');\n        $position = $request->get('position', 1);\n        $era = TimelineEra::findOrFail($eraId);\n\n        return view(\n            'timelines.elements.create',\n            compact('campaign', 'timeline', 'eraId', 'position', 'era')\n        );\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(Campaign $campaign, Timeline $timeline, StoreTimelineElement $request)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $model = new TimelineElement;\n        $data = $request->only($this->fields);\n        $data['timeline_id'] = $timeline->id;\n        $new = $model->create($data);\n        $this->service->reorderElements($new);\n\n        return redirect()\n            ->route('entities.show', [$campaign, $timeline->entity, '#timeline-element-' . $new->id])\n            ->withSuccess(__('timelines/elements.create.success', ['name' => $new->name]));\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function edit(Campaign $campaign, Timeline $timeline, TimelineElement $timelineElement)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        $editingUsers = null;\n        $model = $timelineElement;\n\n        if ($campaign->hasEditingWarning()) {\n            /** @var MultiEditingService $editingService */\n            $editingService = app()->make(MultiEditingService::class);\n            $editingUsers = $editingService->model($model)->user(auth()->user())->users();\n            // If no one is editing the model, we are now editing it\n            if (empty($editingUsers)) {\n                $editingService->edit();\n            }\n        }\n\n        return view(\n            'timelines.elements.edit',\n            compact('timeline', 'campaign', 'model', 'editingUsers')\n        );\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function update(StoreTimelineElement $request, Campaign $campaign, Timeline $timeline, TimelineElement $timelineElement)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        /** @var MultiEditingService $editingService */\n        $editingService = app()->make(MultiEditingService::class);\n        $editingService->model($timelineElement)\n            ->user($request->user())\n            ->finish();\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $data = $request->only($this->fields);\n        if (! $request->has('entity_id')) {\n            $data['entity_id'] = null;\n        }\n\n        if ($request->position == null) {\n            unset($data['position']);\n        }\n\n        $timelineElement->update($data);\n        if ($request->position) {\n            $this->service->reorderElements($timelineElement);\n        }\n\n        return redirect()\n            ->route('entities.show', [$campaign, $timeline->entity, '#timeline-element-' . $timelineElement->id])\n            ->withSuccess(__('timelines/elements.edit.success', ['name' => $timelineElement->name]));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function destroy(Campaign $campaign, Timeline $timeline, TimelineElement $timelineElement)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        $timelineElement->delete();\n        $this->service->reorderElements($timelineElement, true);\n\n        return redirect()\n            ->route('entities.show', [$campaign, $timeline->entity])\n            ->withSuccess(__('timelines/elements.delete.success', ['name' => $timelineElement->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Timelines/TimelineEraController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Timelines;\n\nuse App\\Facades\\Datagrid;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Controllers\\Datagrid2\\BulkControllerTrait;\nuse App\\Http\\Requests\\StoreTimelineEra;\nuse App\\Models\\Campaign;\nuse App\\Models\\Timeline;\nuse App\\Models\\TimelineEra;\nuse App\\Renderers\\Layouts\\Timeline\\Era;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\Controllers\\HasDatagrid;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\Foundation\\Application;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\View\\View;\n\nclass TimelineEraController extends Controller\n{\n    use BulkControllerTrait;\n    use CampaignAware;\n    use HasDatagrid;\n\n    /** @var string[] Form fields passed on to the model */\n    protected $fields = [\n        'name',\n        'abbreviation',\n        'entry',\n        'start_year',\n        'end_year',\n        'is_collapsed',\n    ];\n\n    public function index(Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        $options = ['campaign' => $campaign, 'timeline' => $timeline->id];\n\n        Datagrid::layout(Era::class)\n            ->route('timelines.timeline_eras.index', $options);\n        $this->rows = $timeline\n            ->eras()\n            ->sort(request()->only(['o', 'k']), ['position' => 'asc'])\n            ->with(['timeline'])\n            ->paginate(config('limits.pagination'));\n        if (request()->ajax()) {\n            return $this->campaign($campaign)->datagridAjax();\n        }\n\n        return view('timelines.eras.index')\n            ->with('rows', $this->rows)\n            ->with('campaign', $campaign)\n            ->with('model', $timeline)\n            ->with('entity', $timeline->entity);\n    }\n\n    public function show(Campaign $campaign, Timeline $timeline, TimelineEra $timelineEra)\n    {\n        return redirect()->to($timeline->getLink());\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function create(Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('update', $timeline->entity);\n        $from = request()->get('from') == 'view' ? 'view' : null;\n\n        return view(\n            'timelines.eras.create',\n            compact('campaign', 'timeline', 'from')\n        );\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function store(Campaign $campaign, Timeline $timeline, StoreTimelineEra $request)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $model = new TimelineEra;\n        $data = $request->only($this->fields);\n        $data['timeline_id'] = $timeline->id;\n        $new = $model->create($data);\n\n        if (request()->post('from') == 'view') {\n            return redirect()\n                ->route('entities.show', [$campaign, $timeline->entity, '#era' . $new->id])\n                ->withSuccess(__('timelines/eras.create.success', ['name' => $new->name]));\n        }\n\n        return redirect()\n            ->route('timelines.timeline_eras.index', [$campaign, $timeline])\n            ->withSuccess(__('timelines/eras.create.success', ['name' => $new->name]));\n    }\n\n    /**\n     * @return Application|Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function edit(Campaign $campaign, Timeline $timeline, TimelineEra $timelineEra)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        $model = $timelineEra;\n        $from = request()->get('from') == 'view' ? 'view' : null;\n\n        return view(\n            'timelines.eras.edit',\n            compact('campaign', 'timeline', 'model', 'from')\n        );\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function update(StoreTimelineEra $request, Campaign $campaign, Timeline $timeline, TimelineEra $timelineEra)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        // For ajax requests, send back that the validation succeeded, so we can really send the form to be saved.\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n\n        $timelineEra->update($request->only($this->fields));\n\n        if (request()->post('from') == 'view') {\n            return redirect()\n                ->route('entities.show', [$campaign, $timeline->entity, '#era' . $timelineEra->id])\n                ->withSuccess(__('timelines/eras.edit.success', ['name' => $timelineEra->name]));\n        }\n\n        return redirect()\n            ->route('timelines.timeline_eras.index', [$campaign, $timeline])\n            ->withSuccess(__('timelines/eras.edit.success', ['name' => $timelineEra->name]));\n    }\n\n    public function destroy(Campaign $campaign, Timeline $timeline, TimelineEra $timelineEra)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        $timelineEra->delete();\n\n        if (request()->get('from') == 'view') {\n            return redirect()\n                ->route('entities.show', [$campaign, $timeline->entity])\n                ->withSuccess(__('timelines/eras.delete.success', ['name' => $timelineEra->name]));\n        }\n\n        return redirect()\n            ->route('timelines.timeline_eras.index', [$campaign, $timeline])\n            ->withSuccess(__('timelines/eras.delete.success', ['name' => $timelineEra->name]));\n    }\n\n    public function bulk(Request $request, Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('update', $timeline->entity);\n        $action = $request->get('action');\n        $models = $request->get('model');\n        if (! in_array($action, $this->validBulkActions()) || empty($models)) {\n            return redirect()->back();\n        }\n\n        /*if ($action === 'edit') {\n            return $this->bulkBatch(route('timelines.eras.bulk', [$campaign, 'timeline' => $timeline]), '_timeline-era', $models);\n        }*/\n\n        if (request()->ajax()) {\n            return response()->json(['success' => true]);\n        }\n        $count = $this->bulkProcess($request, TimelineEra::class);\n\n        return redirect()\n            ->route('timelines.timeline_eras.index', [$campaign, 'timeline' => $timeline])\n            ->with('success', trans_choice('timelines/eras.bulks.' . $action, $count, ['count' => $count]));\n    }\n\n    public function positionList(Campaign $campaign, Timeline $timeline, TimelineEra $timelineEra)\n    {\n        $this->authorize('view', $timeline->entity);\n\n        if ($timeline->id != $timelineEra->timeline_id) {\n            abort(404);\n        }\n\n        $new = (bool) request()->get('new');\n\n        return response()->json([\n            'positions' => $timelineEra->positionOptions(null, $new),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Timelines/TimelineReorderController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Timelines;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ReorderTimeline;\nuse App\\Models\\Campaign;\nuse App\\Models\\Timeline;\nuse App\\Services\\TimelineService;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\View\\View;\n\nclass TimelineReorderController extends Controller\n{\n    protected TimelineService $service;\n\n    public function __construct(TimelineService $timelineService)\n    {\n        $this->service = $timelineService;\n    }\n\n    /**\n     * @return Factory|View\n     *\n     * @throws AuthorizationException\n     */\n    public function index(Campaign $campaign, Timeline $timeline)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        $eras = $timeline\n            ->eras()\n            ->with(['orderedElements', 'orderedElements.entity'])\n            ->ordered()\n            ->get();\n\n        return view('timelines.reorder.index', compact(\n            'campaign',\n            'eras',\n            'timeline',\n        ));\n    }\n\n    /**\n     * @throws AuthorizationException\n     */\n    public function save(Campaign $campaign, Timeline $timeline, ReorderTimeline $request)\n    {\n        $this->authorize('update', $timeline->entity);\n\n        $this->service\n            ->timeline($timeline)\n            ->reorder($request);\n\n        return redirect()\n            ->route('entities.show', [$campaign, $timeline->entity])\n            ->withSuccess(__('timelines.reorder.success', ['name' => $timeline->name]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/TroubleshootingController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Requests\\SaveUserHelp;\nuse App\\Models\\Campaign;\nuse App\\Services\\TroubleshootingService;\n\nclass TroubleshootingController extends Controller\n{\n    public function __construct(protected TroubleshootingService $service)\n    {\n        $this->middleware(['auth', 'identity']);\n    }\n\n    public function index()\n    {\n        $campaigns = $this->service\n            ->user(auth()->user())\n            ->campaigns();\n        $token = session()->get('token');\n\n        return view('helpers.troubleshooting.index')\n            ->with(compact('campaigns', 'token'));\n    }\n\n    public function store(SaveUserHelp $request)\n    {\n        if (request()->ajax()) {\n            return response()->json();\n        }\n        try {\n            $campaign = Campaign::findOrFail($request->get('campaign'));\n            $invite = $this->service\n                ->user($request->user())\n                ->campaign($campaign)\n                ->generate();\n\n            return redirect()\n                ->route('troubleshooting')\n                ->with('token', $invite->token);\n        } catch (TranslatableException $e) {\n            return redirect()\n                ->route('troubleshooting')\n                ->with('error_raw', $e->getTranslatedMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/User/EmailValidationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\User;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\UserValidation;\nuse Illuminate\\Http\\Request;\n\nclass EmailValidationController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    public function validateEmail(Request $request, UserValidation $userValidation)\n    {\n        if (auth()->user()->id != $userValidation->user_id) {\n            return response()->redirectTo(route('settings.subscription'))->withError(__('emails/validation.error'));\n        }\n\n        $userValidation->is_valid = true;\n        $userValidation->saveQuietly();\n\n        return response()->redirectTo(route('settings.subscription'))->withSuccess(__('emails/validation.success'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/User/ProfileController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\User;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\n\nclass ProfileController extends Controller\n{\n    public function show(User $user)\n    {\n        $campaigns = $user->campaigns()->public()->front()->paginate();\n\n        return view('users.profile')\n            ->with('user', $user)\n            ->with('campaigns', $campaigns);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/WebhookController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Enums\\UserAction;\nuse App\\Jobs\\Emails\\MailSettingsChangeJob;\nuse App\\Jobs\\Emails\\SubscriptionDeletedEmailJob;\nuse App\\Jobs\\Emails\\Subscriptions\\UpcomingYearlyAlert;\nuse App\\Jobs\\SubscriptionEndJob;\nuse App\\Models\\User;\nuse App\\Services\\Subscription\\PaymentMethodService;\nuse App\\Services\\SubscriptionService;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Log;\nuse Laravel\\Cashier\\Http\\Controllers\\WebhookController as CashierController;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass WebhookController extends CashierController\n{\n    /**\n     * Handle an updated subscription (for example when managing 3d secure payments)\n     */\n    public function handleCustomerSubscriptionUpdated(array $payload)\n    {\n        // Call parent handler method\n        $response = parent::handleCustomerSubscriptionUpdated($payload);\n\n        if ($user = $this->getUserByStripeId($payload['data']['object']['customer'])) {\n            /** @var User $user */\n            /** @var SubscriptionService $service */\n            $service = app()->make('App\\Services\\SubscriptionService');\n\n            $data = $payload['data']['object'];\n            $status = Arr::get($data, 'status', false);\n\n            Log::debug('Customer Sub Updated Status ' . $status);\n\n            // If the status is past_due, we need to remind the user to update their credit card info.\n            // Also if the user is cancelling, we've already handled that in Kanka, we don't need to handle it here, but\n            // stripe will still tell us about it.\n            if ($status != 'past_due' && ! $this->isCancelling($payload)) {\n                $service->user($user)->webhook()\n                    ->plan($payload['data']['object']['plan']['id'])\n                    ->finish();\n            }\n        }\n\n        return $response;\n    }\n\n    /**\n     * Handle a deleted subscription\n     */\n    public function handleCustomerSubscriptionDeleted(array $payload)\n    {\n        // Call parent handler method\n        $response = parent::handleCustomerSubscriptionDeleted($payload);\n\n        // User notification. Maybe even an email\n        if ($user = $this->getUserByStripeId($payload['data']['object']['customer'])) {\n            /** @var User $user */\n            // Notify admin\n            SubscriptionDeletedEmailJob::dispatch($user);\n            // Cleanup the user \"now\". This used to have a delay, but if Stripe is calling this endpoint,\n            // it's that the user's sub has ended.\n            SubscriptionEndJob::dispatch($user);\n            MailSettingsChangeJob::dispatch($user);\n        }\n\n        return $response;\n    }\n\n    /**\n     * Handle an upcoming invoice (yearly renewal warning).\n     */\n    public function handleInvoiceUpcoming(array $payload): Response\n    {\n        $data = $payload['data']['object'];\n        $user = $this->getUserByStripeId($data['customer'] ?? null);\n\n        if (! $user) {\n            return $this->successMethod();\n        }\n\n        /** @var User $user */\n        $yearlyPlans = array_filter(array_merge(\n            config('subscription.owlbear.yearly'),\n            config('subscription.wyvern.yearly'),\n            config('subscription.elemental.yearly'),\n        ));\n\n        $lines = $data['lines']['data'] ?? [];\n        $isYearly = collect($lines)->contains(\n            fn ($line) => in_array($line['price']['id'] ?? null, $yearlyPlans)\n        );\n\n        if (! $isYearly) {\n            return $this->successMethod();\n        }\n\n        UpcomingYearlyAlert::dispatch($user);\n\n        return $this->successMethod();\n    }\n\n    /**\n     * Check if a request is to cancel a user\n     */\n    protected function isCancelling(array $data): bool\n    {\n        // Log::debug('data', $data);\n        $cancel = Arr::get($data, 'object.canceled_at', null);\n        $previousCancel = Arr::get($data, 'previous_attributes.canceled_at', null);\n\n        return ! empty($cancel) && empty($previousCancel);\n    }\n\n    /**\n     * Handle payment method automatically updated by vendor.\n     */\n    protected function handlePaymentMethodAutomaticallyUpdated(array $payload)\n    {\n        if ($user = $this->getUserByStripeId($payload['data']['object']['customer'])) {\n            /** @var User $user */\n            $user->updateDefaultPaymentMethodFromStripe();\n\n            /** @var PaymentMethodService $paymentService */\n            $paymentService = app()->make(PaymentMethodService::class);\n            $paymentService->updateExpiry($user, UserAction::paymentAuto);\n        }\n\n        return $this->successMethod();\n    }\n\n    /**\n     * Handle payment method updated by vendor.\n     */\n    protected function handlePaymentMethodUpdated(array $payload)\n    {\n        if ($user = $this->getUserByStripeId($payload['data']['object']['customer'])) {\n            /** @var User $user */\n            $user->updateDefaultPaymentMethodFromStripe();\n\n            /** @var PaymentMethodService $paymentService */\n            $paymentService = app()->make(PaymentMethodService::class);\n            $paymentService->updateExpiry($user, UserAction::paymentEdit);\n        }\n\n        return $this->successMethod();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Whiteboards/ApiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Whiteboards;\n\nuse App\\Events\\Whiteboards\\Updated;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Whiteboards\\CreateStrokeRequest;\nuse App\\Http\\Requests\\Whiteboards\\StoreShapeRequest;\nuse App\\Http\\Requests\\Whiteboards\\UpdateShapeRequest;\nuse App\\Http\\Resources\\Whiteboards\\EntityResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Whiteboard;\nuse App\\Models\\WhiteboardShape;\nuse App\\Services\\Whiteboards\\ApiService;\nuse App\\Services\\Whiteboards\\Shapes\\PersistanceService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass ApiController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function __construct(protected ApiService $apiService, protected PersistanceService $persistanceService) {}\n\n    public function index(Campaign $campaign, Whiteboard $whiteboard)\n    {\n        $this->campaign($campaign)->authEntityView($whiteboard->entity);\n        if (auth()->check()) {\n            $this->apiService->user(auth()->user());\n        }\n\n        return response()->json(\n            $this->apiService\n                ->campaign($campaign)\n                ->whiteboard($whiteboard)\n                ->load()\n        );\n    }\n\n    public function store(StoreShapeRequest $request, Campaign $campaign, Whiteboard $whiteboard)\n    {\n        $this->authorize('view', $campaign);\n        $this->authorize('update', $whiteboard->entity);\n\n        $shape = $this->persistanceService\n            ->whiteboard($whiteboard)\n            ->request($request)\n            ->create();\n\n        $shape->setRelation('whiteboard', $whiteboard);\n        $whiteboard->setRelation('campaign', $campaign);\n        $entity = null;\n        if ($request->has('entity_id')) {\n            $entity = Entity::find($request->get('entity_id'));\n            if ($entity) {\n                $entity = new EntityResource($entity)->campaign($campaign)->toArray($request);\n            } else {\n                $entity = null;\n            }\n        }\n        broadcast(new Updated(\n            $whiteboard,\n            'created',\n            $shape,\n            $shape->image(),\n            $entity\n        ))->toOthers();\n\n        return response()->json([\n            'success' => true,\n            'id' => $shape->id,\n            'urls' => [\n                'edit' => route('whiteboards.shapes.update', [$campaign, $whiteboard, $shape]),\n                'delete' => route('whiteboards.shapes.delete', [$campaign, $whiteboard, $shape]),\n                'stroke' => route('whiteboards.shapes.stroke', [$campaign, $whiteboard, $shape]),\n            ],\n        ]);\n    }\n\n    public function update(UpdateShapeRequest $request, Campaign $campaign, Whiteboard $whiteboard, WhiteboardShape $whiteboardShape)\n    {\n        $this->authorize('view', $campaign);\n        $this->authorize('update', $whiteboard->entity);\n\n        $this->persistanceService\n            ->whiteboard($whiteboard)\n            ->request($request)\n            ->shape($whiteboardShape)\n            ->save();\n\n        $whiteboardShape->setRelation('whiteboard', $whiteboard);\n        $whiteboard->setRelation('campaign', $campaign);\n        broadcast(new Updated($whiteboard, 'updated', $whiteboardShape))->toOthers();\n\n        return response()->json([\n            'success' => true,\n        ]);\n    }\n\n    public function destroy(Campaign $campaign, Whiteboard $whiteboard, WhiteboardShape $whiteboardShape)\n    {\n        $this->authorize('view', $campaign);\n        $this->authorize('update', $whiteboard->entity);\n\n        $whiteboardShape->delete();\n        $whiteboardShape->setRelation('whiteboard', $whiteboard);\n        $whiteboard->setRelation('campaign', $campaign);\n        broadcast(new Updated($whiteboard, 'deleted', $whiteboardShape))->toOthers();\n\n        return response(null, 204);\n    }\n\n    public function stroke(CreateStrokeRequest $request, Campaign $campaign, Whiteboard $whiteboard, WhiteboardShape $whiteboardShape)\n    {\n        $this->authorize('view', $campaign);\n        $this->authorize('update', $whiteboard->entity);\n\n        $stroke = $this->persistanceService\n            ->whiteboard($whiteboard)\n            ->request($request)\n            ->shape($whiteboardShape)\n            ->addStroke();\n\n        return response()->json([\n            'success' => true,\n            'id' => $stroke->id,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Whiteboards/CrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Whiteboards;\n\nuse App\\Datagrids\\Filters\\WhiteboardFilter;\nuse App\\Http\\Controllers\\CrudController as BaseCrudController;\nuse App\\Http\\Requests\\StoreWhiteboard;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Whiteboard;\n\nclass CrudController extends BaseCrudController\n{\n    protected string $view = 'whiteboards';\n\n    protected string $route = 'whiteboards';\n\n    protected string $model = Whiteboard::class;\n\n    protected string $filter = WhiteboardFilter::class;\n\n    protected string $module = 'whiteboards';\n\n    public function create(Campaign $campaign)\n    {\n        $this->authorize('create', [$this->getEntityType(), $campaign]);\n\n        if (! auth()->user()->can('whiteboards', $campaign)) {\n            // @phpstan-ignore-next-line\n            return view('whiteboards.cta')\n                ->with('campaign', $campaign);\n        }\n\n        return $this->campaign($campaign)->crudCreate();\n    }\n\n    public function store(StoreWhiteboard $request, Campaign $campaign)\n    {\n        $this->authorize('create', [$this->getEntityType(), $campaign]);\n\n        if (! auth()->user()->can('whiteboards', $campaign)) {\n            return view('whiteboards.cta')\n                ->with('campaign', $campaign);\n        }\n\n        return $this->campaign($campaign)->crudStore($request);\n    }\n\n    /**\n     * Display the specified resource.\n     */\n    public function show(Campaign $campaign, Whiteboard $whiteboard)\n    {\n        return $this->campaign($campaign)->crudShow($whiteboard);\n    }\n\n    /**\n     * Show the form for editing the specified resource.\n     */\n    public function edit(Campaign $campaign, Whiteboard $whiteboard)\n    {\n        return $this->campaign($campaign)->crudEdit($whiteboard);\n    }\n\n    /**\n     * Update the specified resource in storage.\n     */\n    public function update(StoreWhiteboard $request, Campaign $campaign, Whiteboard $whiteboard)\n    {\n        return $this->campaign($campaign)->crudUpdate($request, $whiteboard);\n    }\n\n    /**\n     * Remove the specified resource from storage.\n     */\n    public function destroy(Campaign $campaign, Whiteboard $whiteboard)\n    {\n        return $this->campaign($campaign)->crudDestroy($whiteboard);\n    }\n\n    protected function getEntityType(): EntityType\n    {\n        return EntityType::where('id', config('entities.ids.whiteboard'))->first();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Whiteboards/DrawController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Whiteboards;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Campaign;\nuse App\\Models\\Whiteboard;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\GuestAuthTrait;\n\nclass DrawController extends Controller\n{\n    use CampaignAware;\n    use GuestAuthTrait;\n\n    public function show(Campaign $campaign, Whiteboard $whiteboard)\n    {\n        $this->campaign($campaign)->authEntityView($whiteboard->entity);\n\n        return view('whiteboards.draw', compact('campaign', 'whiteboard'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Widgets/CalendarWidgetController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Widgets;\n\nuse App\\Enums\\Widget;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Services\\Calendars\\AdvancerService;\nuse App\\Services\\Calendars\\ReminderService;\n\nclass CalendarWidgetController extends Controller\n{\n    protected AdvancerService $service;\n\n    protected ReminderService $reminderService;\n\n    public function __construct(AdvancerService $advancerService, ReminderService $reminderService)\n    {\n        $this->service = $advancerService;\n        $this->reminderService = $reminderService;\n    }\n\n    public function add(Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        if ($campaignDashboardWidget->widget != Widget::Calendar) {\n            return response()->json([\n                'success' => false,\n            ]);\n        }\n\n        /** @var Calendar $calendar */\n        $calendar = $campaignDashboardWidget->entity->child;\n        $this->service->calendar($calendar)->advance();\n\n        return view('dashboard.widgets.calendar.body')\n            ->with('widget', $campaignDashboardWidget)\n            ->with('calendar', $calendar)\n            ->with('campaign', $campaign);\n    }\n\n    public function sub(Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        if ($campaignDashboardWidget->widget != Widget::Calendar) {\n            return response()->json([\n                'success' => false,\n            ]);\n        }\n\n        /** @var Calendar $calendar */\n        $calendar = $campaignDashboardWidget->entity->child;\n        $this->service->calendar($calendar)->retreat();\n\n        return view('dashboard.widgets.calendar.body')\n            ->with('widget', $campaignDashboardWidget)\n            ->with('calendar', $calendar)\n            ->with('campaign', $campaign);\n    }\n\n    public function render(Campaign $campaign, CampaignDashboardWidget $campaignDashboardWidget)\n    {\n        if ($campaignDashboardWidget->widget != Widget::Calendar) {\n            return response()->json([\n                'success' => false,\n            ]);\n        }\n\n        return view('dashboard.widgets.calendar.body')\n            ->with('widget', $campaignDashboardWidget)\n            ->with('campaign', $campaign);\n    }\n}\n"
  },
  {
    "path": "app/Http/Kernel.php",
    "content": "<?php\n\nnamespace App\\Http;\n\nuse App\\Http\\Middleware\\PasswordConfirm;\nuse App\\Http\\Middleware\\ReplicationSwitcher;\nuse App\\Http\\Middleware\\Tracking;\nuse Illuminate\\Auth\\Middleware\\Authenticate;\nuse Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth;\nuse Illuminate\\Auth\\Middleware\\Authorize;\nuse Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse;\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\nuse Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode;\nuse Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull;\nuse Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize;\nuse Illuminate\\Http\\Middleware\\HandleCors;\nuse Illuminate\\Routing\\Middleware\\SubstituteBindings;\nuse Illuminate\\Routing\\Middleware\\ThrottleRequests;\nuse Illuminate\\Session\\Middleware\\AuthenticateSession;\nuse Illuminate\\Session\\Middleware\\StartSession;\nuse Illuminate\\View\\Middleware\\ShareErrorsFromSession;\nuse Laravel\\Passport\\Http\\Middleware\\ValidateToken;\nuse Mcamara\\LaravelLocalization\\Middleware\\LaravelLocalizationRedirectFilter;\nuse Mcamara\\LaravelLocalization\\Middleware\\LaravelLocalizationRoutes;\nuse Mcamara\\LaravelLocalization\\Middleware\\LaravelLocalizationViewPath;\nuse Mcamara\\LaravelLocalization\\Middleware\\LocaleSessionRedirect;\n\nclass Kernel extends HttpKernel\n{\n    /**\n     * The application's global HTTP middleware stack.\n     *\n     * These middleware are run during every request to your application.\n     */\n    protected $middleware = [\n        Middleware\\TrustProxies::class,\n        HandleCors::class,\n        CheckForMaintenanceMode::class,\n        ValidatePostSize::class,\n        Middleware\\TrimStrings::class,\n        ConvertEmptyStringsToNull::class,\n    ];\n\n    /**\n     * The application's route middleware groups.\n     */\n    protected $middlewareGroups = [\n        'web' => [\n            Middleware\\EncryptCookies::class,\n            AddQueuedCookiesToResponse::class,\n            StartSession::class,\n            AuthenticateSession::class,\n            ShareErrorsFromSession::class,\n            Middleware\\VerifyCsrfToken::class,\n            SubstituteBindings::class,\n            // Middleware\\HttpsProtocol::class, // Force https in prod\n            Middleware\\LocaleChange::class, // Save language changing\n            Middleware\\LocalizeDatetime::class,\n            Tracking::class,\n            Middleware\\CheckIfUserBanned::class,\n            Middleware\\OTP::class,\n            ReplicationSwitcher::class,\n        ],\n        'api' => [\n            // Do this in the routes 'throttle:rate_limit,1',\n            'bindings',\n            Middleware\\ApiLogMiddleware::class,\n        ],\n        // Used for locale-less routes like our sitemaps, go/, auth/callbacks, webhooks\n        'minimum' => [\n            Middleware\\EncryptCookies::class,\n            AddQueuedCookiesToResponse::class,\n            StartSession::class,\n            ShareErrorsFromSession::class,\n            Middleware\\VerifyCsrfToken::class,\n            SubstituteBindings::class,\n            Middleware\\HttpsProtocol::class,\n            ReplicationSwitcher::class,\n        ],\n        'webhooks' => [\n            SubstituteBindings::class,\n            Middleware\\HttpsProtocol::class,\n        ],\n    ];\n\n    /**\n     * The application's route middleware.\n     *\n     * These middleware may be assigned to groups or used individually.\n     */\n    protected $middlewareAliases = [\n        'localize' => LaravelLocalizationRoutes::class,\n        'localizationRedirect' => LaravelLocalizationRedirectFilter::class,\n        'localeSessionRedirect' => LocaleSessionRedirect::class,\n        'localeViewPath' => LaravelLocalizationViewPath::class,\n        'localizeDatetime' => Middleware\\LocalizeDatetime::class,\n        'client' => ValidateToken::class, // Laravel Passport\n\n        'auth' => Authenticate::class,\n        'auth.basic' => AuthenticateWithBasicAuth::class,\n        'bindings' => SubstituteBindings::class,\n        'can' => Authorize::class,\n        'guest' => Middleware\\RedirectIfAuthenticated::class,\n        'throttle' => ThrottleRequests::class,\n        'login.redirect' => Middleware\\LoginRedirect::class,\n        'translator' => Middleware\\Translator::class,\n        'identity' => Middleware\\Identity::class,\n        'password.confirm' => PasswordConfirm::class,\n        'subscriptions' => Middleware\\Subscriptions::class,\n        '2fa' => Middleware\\OTP::class,\n        'adless' => Middleware\\Adless::class,\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/Adless.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Facades\\AdCache;\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass Adless\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Closure(Request): (Response)  $next\n     */\n    public function handle(Request $request, Closure $next): Response\n    {\n        // Use this middleware to define routes that won't display ads\n        AdCache::adless();\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/ApiLogMiddleware.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Facades\\ApiLog;\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\n\nclass ApiLogMiddleware\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        return $next($request);\n    }\n\n    public function terminate($request, $response)\n    {\n        if (! $request instanceof JsonResponse) {\n            return;\n        }\n        $startTime = LARAVEL_START;\n        $endTime = microtime(true);\n        $duration = $endTime - $startTime;\n\n        // @phpstan-ignore-next-line\n        $campaign = $request->route('campaign');\n        // @phpstan-ignore-next-line\n        $log = ApiLog::request($request)\n            ->response($response)\n            ->duration($duration);\n\n        if ($campaign !== null && $campaign instanceof Campaign) {\n            $log->campaign($campaign);\n        }\n        $log->log();\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/CachedResponse.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass CachedResponse\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Closure(Request): (Response)  $next\n     */\n    public function handle(Request $request, Closure $next): Response\n    {\n        $response = $next($request);\n\n        if (auth()->guest()) {\n            $response->headers->set('Cache-Control', 'public, max-age=600, s-maxage=1200');\n        }\n\n        return $response;\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/Campaigns/Boosted.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware\\Campaigns;\n\nuse App\\Facades\\Domain;\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Http\\Request;\n\nclass Boosted\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        // Make sure we have an id\n        /** @var Campaign $campaign */\n        $campaign = $request->route('campaign');\n        if (empty($campaign)) {\n            return redirect()->route('login')\n                ->withErrors(__('You\\'ve been banned'));\n        }\n\n        if (! $campaign->boosted()) {\n            if ($request->is('api/*') || Domain::isApi()) {\n                return response()->json([\n                    'error' => 'This feature is reserved to boosted campaigns.',\n                ]);\n            }\n\n            return redirect()->route('dashboard', $campaign)->withErrors(__('crud.errors.boosted_campaigns', ['boosted' => __('concept.premium-campaigns')]));\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/Campaigns/Premium.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware\\Campaigns;\n\nuse App\\Facades\\Domain;\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass Premium\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Closure(Request): (Response)  $next\n     */\n    public function handle(Request $request, Closure $next)\n    {\n        $campaign = $request->route('campaign');\n        if (! $campaign instanceof Campaign) {\n            return $next($request);\n        }\n        if ($campaign->premium()) {\n            return $next($request);\n        }\n\n        if ($request->is('api/*') || Domain::isApi()) {\n            return response()->json([\n                'error' => __('Required premium features to be enabled.'),\n            ], 401);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/Campaigns/Superboosted.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware\\Campaigns;\n\nuse App\\Facades\\Domain;\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Http\\Request;\n\nclass Superboosted\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        // Make sure we have an id\n        /** @var Campaign $campaign */\n        $campaign = $request->route('campaign');\n        if (empty($campaign)) {\n            return redirect()->route('home');\n        }\n\n        if (! $campaign->superboosted()) {\n            if ($request->is('api/*') || Domain::isApi()) {\n                return response()->json([\n                    'error' => 'This feature is reserved to premium campaign.',\n                ]);\n            }\n\n            return redirect()->route('dashboard', $campaign)->withErrors(__('campaigns.errors.premium'));\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/CheckIfUserBanned.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Carbon\\Carbon;\nuse Closure;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Response;\n\nclass CheckIfUserBanned\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Closure(Request): (Response|RedirectResponse)  $next\n     * @return Response|RedirectResponse\n     */\n    public function handle(Request $request, Closure $next)\n    {\n        if (auth()->guest() || ! auth()->user()->isBanned()) {\n            return $next($request);\n        }\n\n        // If banned for less than 7 days, tell the user as much\n        if (auth()->user()->banned_until < Carbon::now()->addDays(7)) {\n            $days = auth()->user()->banned_until->diffInDays(Carbon::now());\n            auth()->logout();\n\n            return redirect()->route('login')->with(\n                'error',\n                trans_choice('auth.banned.temporary', $days, ['days' => $days])\n            );\n        }\n        auth()->logout();\n\n        return redirect()->route('login')->with('error', __('auth.banned.permanent'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCookies extends Middleware\n{\n    /**\n     * The names of the cookies that should not be encrypted.\n     */\n    protected $except = [\n        'authenticated',\n        'kanka_locale',\n        'kanka_trusted_domains', // used for the trusted domains entity links that is set in javascript\n        'toggleState', // used to determine if the sidebar is collapsed or not\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/HttpsProtocol.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\n\nclass HttpsProtocol\n{\n    /**\n     * @return RedirectResponse|mixed\n     */\n    public function handle(Request $request, Closure $next)\n    {\n        if (! $request->secure() && config('app.force_https') === true) {\n            return redirect()->secure($request->getRequestUri());\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/Identity.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Facades\\Identity as IdentityFacade;\nuse Closure;\nuse Illuminate\\Http\\Request;\n\nclass Identity\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        // If we are impersonating someone, move us back home\n        if (IdentityFacade::isImpersonating()) {\n            return redirect()->route('home');\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/LastCampaign.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass LastCampaign\n{\n    /**\n     * Handle an incoming request.\n     */\n    public function handle(Request $request, Closure $next): Response\n    {\n        if (auth()->guest()) {\n            return $next($request);\n        }\n\n        // When a user looks at another campaign, track it for when they come back later to Kanka and log in\n        /** @var Campaign $campaign */\n        $campaign = $request->route('campaign');\n        if ($request->user()->last_campaign_id !== $campaign->id) {\n            $request->user()->last_campaign_id = $campaign->id;\n            $request->user()->saveQuietly();\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/LocaleChange.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Enums\\UserAction;\nuse App\\Facades\\Identity as IdentityFacade;\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Cookie;\nuse Illuminate\\Support\\Str;\nuse Mcamara\\LaravelLocalization\\Facades\\LaravelLocalization;\n\nclass LocaleChange\n{\n    /**\n     * List of languages that are no longer available and should redirect to english\n     */\n    protected array $disabledLangs = ['he', 'hr', 'hu', 'ca', 'gl'];\n\n    /**\n     * @return RedirectResponse|mixed\n     */\n    public function handle(Request $request, Closure $next)\n    {\n        // Never bother with any of these requests\n        if (\n            $request->is(\n                'subscription-api/*',\n                'oauth/*'\n            )\n        ) {\n            return $next($request);\n        }\n\n        // If it's not a get request, don't touch it either\n        if (! $request->isMethod('get')) {\n            $locale = $this->currentLocale();\n            LaravelLocalization::setLocale($locale);\n\n            return $next($request);\n        }\n\n        // If we are impersonating someone, you guessed it, don't touch it either\n        if (IdentityFacade::isImpersonating()) {\n            return $next($request);\n        }\n\n        $locale = $this->currentLocale();\n        LaravelLocalization::setLocale($locale);\n\n        $new = $request->get('lang');\n        if (! empty($new) && $this->valid($new)) {\n            return $this->update($request, $new);\n        }\n\n        return $next($request);\n    }\n\n    protected function currentLocale(): string\n    {\n        if (auth()->check()) {\n            return auth()->user()->locale;\n        }\n\n        // Unlogged users can change language, we keep it in a cookie\n        $locale = Cookie::get('kanka_locale');\n\n        return ! empty($locale) && $this->valid($locale) ? $locale : 'en-US';\n    }\n\n    protected function update(Request $request, string $locale): RedirectResponse\n    {\n        if (auth()->check()) {\n            /** @var User $user */\n            $user = auth()->user();\n            $user->log(UserAction::lang, ['from' => $user->locale, 'to' => $locale]);\n            $user->locale = $locale;\n            $user->saveQuietly();\n\n            return redirect()->to($request->path());\n        } else {\n            return redirect()->to($request->path())->withCookie(\n                Cookie::make('kanka_locale', $locale)\n            );\n        }\n    }\n\n    protected function valid(string $locale): bool\n    {\n        $locales = LaravelLocalization::getSupportedLocales();\n        if (! in_array($locale, array_keys($locales))) {\n            return false;\n        }\n\n        // Remove old\n        return ! in_array($locale, $this->disabledLangs);\n    }\n\n    protected function fallbackUrl(): string\n    {\n        $targetUrl = LaravelLocalization::getLocalizedURL('en');\n        // Prod is behind a reverse proxy that doesn't know about https\n        if (config('app.force_https') && ! Str::startsWith('https', $targetUrl)) {\n            $targetUrl = Str::replaceFirst('http://', 'https://', $targetUrl);\n        }\n\n        return $targetUrl;\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/LocalizeDatetime.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Carbon\\Carbon;\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Number;\nuse Mcamara\\LaravelLocalization\\Middleware\\LaravelLocalizationMiddlewareBase;\n\nclass LocalizeDatetime extends LaravelLocalizationMiddlewareBase\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        // If the URL of the request is in exceptions.\n        if ($this->shouldIgnore($request)) {\n            return $next($request);\n        }\n        $locale = app('laravellocalization')->getCurrentLocale();\n        Carbon::setLocale($locale);\n        Number::useLocale($locale);\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/LoginRedirect.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass LoginRedirect\n{\n    public function handle(Request $request, Closure $next): Response\n    {\n        $whitelist = ['roadmap', 'dashboard'];\n\n        // If to check where the request is coming from and set the variable if its a valid route.\n        if ($request->has('next')) {\n            [$routeName, $campaignSlug] = array_pad(explode('.', $request->get('next'), 2), 2, null);\n\n            if (in_array($routeName, $whitelist)) {\n                try {\n                    $params = $campaignSlug ? ['campaign' => $campaignSlug] : $request->except('next');\n                    session(['login_redirect' => route($routeName, $params)]);\n                } catch (\\Exception) {\n                    // Route generation failed, skip the redirect.\n                }\n            }\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/OTP.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Facades\\Identity;\nuse App\\Models\\OTPAuthentication;\nuse Closure;\nuse Illuminate\\Http\\Request;\n\nclass OTP\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        if (! config('google2fa.enabled')) {\n            return $next($request);\n        }\n        if ($request->is('settings/security/cancel2fa')) {\n            auth()->logout();\n\n            return $next($request);\n        }\n        // If the user is impersonating someone that has 2FA, don't ask for the user's OTP\n        if ($request->user() && Identity::isImpersonating()) {\n            return $next($request);\n        }\n        // Send requested logging User to OTP Authentication Support\n        /** @var OTPAuthentication $authentication */\n        $authentication = app(OTPAuthentication::class)->boot($request);\n\n        if ($authentication->isAuthenticated()) {\n            $redirectTo = session()->get('2fa_redirect');\n            if ($redirectTo) {\n                session()->remove('2fa_redirect');\n\n                return redirect($redirectTo);\n            }\n\n            return $next($request);\n        }\n\n        return $authentication->makeRequestOneTimePasswordResponse();\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/PasswordConfirm.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Contracts\\Routing\\ResponseFactory;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Http\\Request;\n\nclass PasswordConfirm\n{\n    /**\n     * The response factory instance.\n     *\n     * @var ResponseFactory\n     */\n    protected $responseFactory;\n\n    /**\n     * The URL generator instance.\n     *\n     * @var UrlGenerator\n     */\n    protected $urlGenerator;\n\n    /**\n     * The password timeout.\n     *\n     * @var int\n     */\n    protected $passwordTimeout;\n\n    /**\n     * Create a new middleware instance.\n     *\n     * @param  int|null  $passwordTimeout\n     * @return void\n     */\n    public function __construct(ResponseFactory $responseFactory, UrlGenerator $urlGenerator, $passwordTimeout = null)\n    {\n        $this->responseFactory = $responseFactory;\n        $this->urlGenerator = $urlGenerator;\n        $this->passwordTimeout = $passwordTimeout ?: 10800;\n    }\n\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     * @param  string|null  $redirectToRoute\n     */\n    public function handle($request, Closure $next, $redirectToRoute = null)\n    {\n        if ($request->user()->isSocialLogin()) {\n            return $next($request);\n        }\n\n        if ($this->shouldConfirmPassword($request)) {\n            if ($request->expectsJson()) {\n                return $this->responseFactory->json([\n                    'message' => __('Password confirmation required.'),\n                ], 423);\n            }\n\n            return $this->responseFactory->redirectGuest(\n                $this->urlGenerator->route($redirectToRoute ?? 'password.confirm')\n            );\n        }\n\n        return $next($request);\n    }\n\n    /**\n     * Determine if the confirmation timeout has expired.\n     *\n     * @param  Request  $request\n     * @return bool\n     */\n    protected function shouldConfirmPassword($request)\n    {\n        if (config('app.debug')) {\n            return false;\n        }\n\n        $confirmedAt = time() - $request->session()->get('auth.password_confirmed_at', 0);\n\n        return $confirmedAt > $this->passwordTimeout;\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass RedirectIfAuthenticated\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     * @param  string|null  $guard\n     */\n    public function handle($request, Closure $next, $guard = null)\n    {\n        if (Auth::guard($guard)->check()) {\n            return redirect('/');\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/ReplicationSwitcher.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\DB;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass ReplicationSwitcher\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Closure(Request): (Response)  $next\n     */\n    public function handle(Request $request, Closure $next): Response\n    {\n        // If the user is a guest and not on the login or register routes\n        if (Auth::guest() && ! $request->is('login', 'register', 'auth.*', 'auth/*', 'password*', 'settings/security/*')) {\n            DB::setDefaultConnection('replica');\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/Subscriptions.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\n\nclass Subscriptions\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        if (! config('services.stripe.enabled')) {\n            return redirect()->route('home');\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/Tracking.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\n\nclass Tracking\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        //        dump(session()->all());\n        //        if (session()->has('tracking')) {\n        //            dd(session()->get('tracking'));\n        //        }\n        if ($request->hasAny(['utm_campaign', 'utm_id', 'utm_source', 'utm_medium'])) {\n            $data = [];\n            if ($request->has('utm_id')) {\n                $data['id'] = $request->get('utm_id');\n            }\n            if ($request->has('utm_campaign')) {\n                $data['campaign'] = $request->get('utm_campaign');\n            }\n            if ($request->has('utm_source')) {\n                $data['source'] = $request->get('utm_source');\n            }\n            if ($request->has('utm_medium')) {\n                $data['medium'] = $request->get('utm_medium');\n            }\n            session()->put('tracking', $data);\n        }\n\n        //        dump(session()->all());\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/Translator.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\n\nclass Translator\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  Request  $request\n     */\n    public function handle($request, Closure $next)\n    {\n        if (! auth()->user()->hasRole('translator')) {\n            return redirect()->route('home');\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/TrimStrings.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as Middleware;\n\nclass TrimStrings extends Middleware\n{\n    /**\n     * The names of the attributes that should not be trimmed.\n     */\n    protected $except = [\n        'password',\n        'password_confirmation',\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/TrustProxies.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Middleware\\TrustProxies as Middleware;\nuse Illuminate\\Http\\Request;\n\nclass TrustProxies extends Middleware\n{\n    /**\n     * The trusted proxies for this application.\n     */\n    protected $proxies;\n\n    /**\n     * The headers that should be used to detect proxies.\n     *\n     * @var int\n     */\n    protected $headers =\n        Request::HEADER_X_FORWARDED_FOR |\n        Request::HEADER_X_FORWARDED_HOST |\n        Request::HEADER_X_FORWARDED_PORT |\n        Request::HEADER_X_FORWARDED_PROTO |\n        Request::HEADER_X_FORWARDED_AWS_ELB;\n\n    /**\n     * Get the trusted proxies.\n     *\n     * @return array|string|null\n     */\n    protected function proxies()\n    {\n        if (config('trustedproxy.defined') === false) {\n            return [];\n        }\n\n        return config('trustedproxy.proxies');\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass VerifyCsrfToken extends Middleware\n{\n    /**\n     * The URIs that should be excluded from CSRF verification.\n     */\n    protected $except = [\n        'stripe/*',\n        'api/*',\n    ];\n}\n"
  },
  {
    "path": "app/Http/Requests/API/PatchEntity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\API;\n\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass PatchEntity extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /*\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'nullable|string|max:191',\n            'entry' => 'nullable|string',\n            'tooltip' => 'nullable|string',\n            'image_uuid' => 'nullable|exists:images,id',\n            'header_uuid' => 'nullable|exists:images,id',\n            'type' => 'nullable|string|max:191',\n        ];\n\n        // Editing an special entity type? Don't allow selecting oneself.\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/API/StoreEntities.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\API;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntities extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /*\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entities' => 'array|max:20',\n            'entities.*.name' => 'required|string|max:191',\n            'entities.*.entry' => 'nullable|string',\n            'entities.*.type' => 'nullable|string|max:191',\n            'entities.*.tags' => 'array',\n            'entities.*.tags.*' => 'distinct|exists:tags,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/API/StoreReminder.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\API;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreReminder extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'calendar_id' => 'required|integer|exists:calendars,id',\n            'day' => 'required|integer|min:1',\n            'month' => 'required|integer|min:1',\n            'year' => 'required|integer',\n            'length' => 'integer|min:1',\n            'is_recurring' => 'nullable',\n            'recurring_until' => 'nullable',\n            'recurring_periodicity' => 'nullable|max:5',\n            'colour' => 'nullable|string|max:7',\n            'comment' => 'nullable|max:191',\n            'type_id' => 'nullable|integer|exists:entity_event_types,id',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/API/UpdateUserRole.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\API;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateUserRole extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'user_id' => 'required|integer|exists:users,id',\n            'role_id' => 'required|integer|exists:campaign_roles,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/API/UploadEntityImage.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\API;\n\nuse App\\Facades\\Limit;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UploadEntityImage extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /*\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'image' => 'required|mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/AddCalendarEvent.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass AddCalendarEvent extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entity_id' => 'required_without:name|integer|exists:entities,id',\n            'name' => 'required_without:entity_id|nullable',\n            'day' => 'required',\n            'month' => 'required',\n            'year' => 'required',\n            'length' => 'required|integer|min:1',\n            'is_recurring' => 'nullable',\n            'recurring_until' => 'nullable',\n            'recurring_periodicity' => 'nullable|max:5',\n            'colour' => 'nullable|string|max:7',\n            'comment' => 'nullable|max:191',\n            'type_id' => 'nullable|integer|exists:entity_event_types,id',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ];\n    }\n\n    public function prepareForValidation()\n    {\n        if ($this->entity_id && ! is_numeric($this->entity_id)) {\n            $this->merge([\n                'name' => $this->entity_id,\n            ]);\n            $this->offsetUnset('entity_id');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/AddCalendarWeather.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass AddCalendarWeather extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'weather' => 'required',\n            'temperature' => 'nullable',\n            'precipitation' => 'nullable',\n            'wind' => 'nullable',\n            'effect' => 'nullable',\n            'day' => 'required',\n            'month' => 'required',\n            'year' => 'required',\n            'name' => 'nullable|string|max:40',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ApplyAttributeTemplate.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ApplyAttributeTemplate extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'template_id' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/BragiRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass BragiRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, mixed>\n     */\n    public function rules()\n    {\n        return [\n            'prompt' => 'required|string|min:10|max:' . config('bragi.limit.prompt'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/BulkRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\n/**\n * Class BulkRequest\n */\nclass BulkRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entity' => 'required',\n            'model' => 'required_without:models',\n            'models' => 'required_without:model',\n            'entity_type' => 'integer|exists:entity_types,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Bulks/Copy.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Bulks;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass Copy extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'models' => 'required_without:entities|string',\n            'entities' => 'required_without:models|array',\n            'entities.*' => 'integer',\n            'campaign' => 'required|integer|exists:campaigns,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Bulks/Template.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Bulks;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass Template extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'template_id' => 'required|integer|exists:attribute_templates,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Bulks/Transform.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Bulks;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass Transform extends FormRequest\n{\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    public function rules(): array\n    {\n        return [\n            'target' => 'required|integer|exists:entity_types,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/ApproveApplication.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ApproveApplication extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'role_id' => 'required|integer|exists:campaign_roles,id',\n            'reason' => 'nullable|string|max:191',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/DefaultImageDestroy.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass DefaultImageDestroy extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entity_type' => 'required|integer|exists:entity_types,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/DefaultImageStore.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse App\\Facades\\Limit;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass DefaultImageStore extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entity_type' => 'required|integer|exists:entity_types,id',\n            'default_entity_image' => 'required|mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/DestroyDefaultThumbnail.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass DestroyDefaultThumbnail extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entity_type_id' => 'required|integer|exists:entity_types,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/GalleryImageFolderStore.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass GalleryImageFolderStore extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:100',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/GalleryImageStore.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse App\\Facades\\Limit;\nuse App\\Rules\\GallerySize;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\File;\n\nclass GalleryImageStore extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        // opentype,ttf,woff,woff2 not working for some reason.\n        $rules = [\n            'file' => 'required|array',\n            'file.*' => [\n                File::types(['jpeg', 'jpg', 'gif', 'png', 'webp', 'woff2', 'svg']),\n                'max:' . Limit::upload(),\n                new GallerySize,\n            ],\n            'folder_id' => [\n                'nullable',\n                Rule::exists('images', 'id')->where(function ($query) {\n                    return $query->where('is_folder', 1);\n                }),\n            ],\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/GalleryImageUpdate.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass GalleryImageUpdate extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:45',\n            'folder_id' => [\n                'nullable',\n                Rule::exists('images', 'id')->where(function ($query) {\n                    return $query->where('is_folder', 1);\n                }),\n            ],\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/PatchCampaignApplication.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass PatchCampaignApplication extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'role_id' => 'required_if:action,approve:rejection|exists:campaign_roles,id',\n            'reason' => 'nullable|string|max:191',\n            'action' => 'required',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/RejectApplication.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass RejectApplication extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'reason' => 'nullable|string|max:191',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/StoreCampaignApplication.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignApplication extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'character_concept' => 'nullable|string|min:10',\n            'experience' => 'required|integer|in:0,1,2',\n            'availability_days' => 'nullable|array',\n            'availability_days.*' => 'string|in:mon,tue,wed,thu,fri,sat,sun',\n            'time_start' => 'nullable|date_format:H:i',\n            'time_end' => 'nullable|date_format:H:i',\n            'timezone' => 'nullable|string|max:100',\n            'pref_rp_combat' => 'required|integer|between:0,2',\n            'pref_tone' => 'required|integer|between:0,2',\n            'external_link' => 'nullable|url|max:255',\n            'additional_notes' => 'nullable|string|max:255',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/StoreCampaignApplicationStatus.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignApplicationStatus extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'status' => 'required',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/StoreCampaignSetup.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignSetup extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'locale' => 'nullable|string|max:10',\n            'systems' => 'nullable|array',\n            'systems.*' => 'exists:game_systems,id',\n            'campaign_genre' => 'nullable|integer',\n            'genres' => 'nullable|array',\n            'genres.*' => 'exists:genres,id',\n            'intro' => 'nullable|string|max:2000',\n            'timezone' => 'nullable|string|max:45',\n            'schedule' => 'nullable|string|max:45',\n            'players' => 'nullable|string|max:45',\n            'playstyles' => 'array',\n            'playstyles.*' => 'exists:playstyles,id',\n            'is_prioritised' => 'nullable|boolean',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/StoreCampaignVisibility.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse App\\Enums\\CampaignVisibility;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rules\\Enum;\n\nclass StoreCampaignVisibility extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'visibility_id' => ['required', new Enum(CampaignVisibility::class)],\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/StoreDefaultThumbnail.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse App\\Facades\\Limit;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreDefaultThumbnail extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entity_type_id' => 'required|integer|exists:entity_types,id',\n            'default_entity_image' => 'required|mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/StoreDefaults.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreDefaults extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'entity_visibility' => 'boolean',\n            'entity_personality_visibility' => 'boolean',\n            'settings' => 'array',\n            'settings.default_visibility' => 'nullable|string|in:admin,members,self,admin-self',\n            'settings.private_mention_visibility' => 'boolean',\n            'ui_settings' => 'array',\n            'ui_settings.connections' => 'boolean',\n            'ui_settings.connection_mode' => 'boolean',\n            'ui_settings.descendants' => 'boolean',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/StoreImage.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse App\\Facades\\Limit;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreImage extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/StoreTheme.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreTheme extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'config' => 'required|nullable|string',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Campaigns/Vanity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Campaigns;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass Vanity extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'vanity' => [\n                'string',\n                'min:4',\n                'max:45',\n                'unique:campaigns,slug',\n                new \\App\\Rules\\Vanity,\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/CopyEntityToCampaignRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass CopyEntityToCampaignRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return Auth::check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'campaign' => 'required|integer|exists:campaigns,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/CopyInventory.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass CopyInventory extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'entity_id' => 'required:exists:entities,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/DeleteCampaign.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Rules\\CampaignDelete;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass DeleteCampaign extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'delete' => ['required', 'string', new CampaignDelete],\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/DeleteEntityType.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Rules\\Confirm;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass DeleteEntityType extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'delete' => ['required', 'string', new Confirm],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/DeleteSettingsAccount.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Rules\\GoodBye;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass DeleteSettingsAccount extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $user = Auth::user();\n        $rules = [\n            'goodbye' => ['string', new GoodBye],\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/EditPostVisibility.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass EditPostVisibility extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Entities/UpdateListingPreferenceRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Entities;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateListingPreferenceRequest extends FormRequest\n{\n    public function authorize(): bool\n    {\n        if (! auth()->check()) {\n            return false;\n        }\n\n        if ((int) $this->input('per_page') === 100 && ! auth()->user()->isSubscriber()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    public function rules(): array\n    {\n        return [\n            'columns' => ['sometimes', 'array'],\n            'columns.*' => ['string'],\n            'layout' => ['sometimes', 'nullable', 'in:grid,table'],\n            'nested' => ['sometimes', 'nullable', 'boolean'],\n            'per_page' => ['sometimes', 'nullable', 'integer', 'in:15,25,45,100'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/FilterPublicCampaignRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass FilterPublicCampaignRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'sort_field_name' => 'integer|max:2',\n            'is_boosted' => 'nullable|boolean',\n            'is_open' => 'nullable|boolean',\n            'system' => 'nullable|string|max:25',\n            'language' => 'nullable|string|max:5',\n            'genre' => 'nullable|integer',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Front/StoreCommunityEventEntry.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Front;\n\nuse App\\Rules\\EntityLink;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCommunityEventEntry extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'link' => ['required', 'url', new EntityLink],\n            'comment' => 'nullable|string',\n        ];\n    }\n\n    protected function getRedirectUrl()\n    {\n        $url = $this->redirector->getUrlGenerator();\n\n        return $url->previous() . '#event-form';\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/CreateFolder.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass CreateFolder extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'name' => 'required|string|max:191',\n            'visibility_id' => 'integer|exists:visibilities,id',\n            'folder_id' => 'nullable|exists:images,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/DeleteImages.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass DeleteImages extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'images' => 'required|array',\n            'images.*' => 'distinct|exists:images,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/MoveFiles.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MoveFiles extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'folder_id' => 'nullable|string|exists:images,id',\n            'images' => 'required|array',\n            'images.*' => 'distinct|exists:images,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/UpdateFile.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateFile extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'name' => 'required|string|max:191',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/UpdateFiles.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateFiles extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'files' => 'required|array',\n            'images.*' => 'distinct|exists:images,id',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'folder_id' => 'nullable|string|exists:images,id',\n            'folder_home' => 'nullable',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/UpdateFocus.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateFocus extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'focus_x' => 'nullable|integer',\n            'focus_y' => 'nullable|integer',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/UploadFile.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse App\\Facades\\Limit;\nuse App\\Rules\\GallerySize;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rules\\File;\n\nclass UploadFile extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        $types = ['jpeg', 'jpg', 'gif', 'png', 'webp'];\n        if (request()->has('map')) {\n            Limit::map();\n            $types[] = 'svg';\n        }\n\n        return [\n            'file' => [\n                'required',\n                File::types($types),\n                'max:' . Limit::upload(),\n                new GallerySize,\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/UploadFiles.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse App\\Facades\\Limit;\nuse App\\Rules\\GallerySize;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rules\\File;\n\nclass UploadFiles extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     */\n    public function rules(): array\n    {\n        $types = ['jpeg', 'jpg', 'gif', 'png', 'webp', 'woff2'];\n\n        return [\n            'files' => 'required|array',\n            'files.*' => [\n                'required',\n                File::types($types),\n                'max:' . Limit::upload(),\n                new GallerySize,\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Gallery/UploadUrl.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Gallery;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UploadUrl extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'url' => 'url|active_url',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/GalleryBulkDelete.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass GalleryBulkDelete extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'file.*' => 'exists:images,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/GenerateInventory.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass GenerateInventory extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'tags' => 'array',\n            'tags.*' => 'distinct|exists:tags,id',\n            'item_amount' => ['required', 'integer', 'between:1,100'],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/HistoryRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass HistoryRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, mixed>\n     */\n    public function rules()\n    {\n        return [\n            'user' => 'integer|nullable|exists:users,id',\n            'action' => 'integer|nullable',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ManageFamilies.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ManageFamilies extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     */\n    public function rules(): array\n    {\n        return [\n            'character_family' => 'array',\n            'character_family.*' => 'integer|exists:families,id',\n            'family_privates' => 'array',\n            'family_privates.*' => 'boolean',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ManageRaces.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ManageRaces extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'character_race' => 'array',\n            'character_race.*' => 'integer|exists:races,id',\n            'race_privates' => 'array',\n            'race_privates.*' => 'boolean',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/MoveEntity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MoveEntity extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entities' => 'array|required',\n            'entities.*' => 'distinct|integer|exists:entities,id',\n            'campaign_id' => 'required|integer|exists:campaigns,id',\n            'copy' => 'boolean',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/MoveEntityRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MoveEntityRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'campaign' => 'required|integer|exists:campaigns,id',\n            'copy' => 'nullable',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/MovePostRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MovePostRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entity' => 'required|integer|exists:entities,id',\n            'copy' => 'nullable',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Onboarding/InitialRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Onboarding;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass InitialRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'name' => 'nullable|min:4|max:191',\n            'type' => 'nullable|in:worldbuilding,campaign,story,skip',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/PermissionTestRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\CampaignLocalization;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass PermissionTestRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            '*.entity_id' => 'required_without:*.entity_type_id|integer|exists:entities,id',\n            '*.entity_type_id' => 'required_without:*.entity_id|integer|exists:entity_types,id',\n            '*.action' => 'required|integer|exists:campaign_permissions,action',\n            // '*.user_id' => 'required|integer|exists:campaign_user,user_id',\n            '*.user_id' => [\n                'required',\n                'integer',\n                Rule::exists('campaign_user')->where(function ($query) {\n                    $query->where('user_id', $this->input('*.user_id'))->where('campaign_id', CampaignLocalization::getCampaign()->id);\n                }),\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/QuickCreator/StoreEntity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\QuickCreator;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass StoreEntity extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'name' => 'required|string',\n            'template_id' => [\n                'nullable',\n                'integer',\n                Rule::exists('entities', 'id')->where(function ($query) {\n                    return $query->where('is_template', true);\n                }),\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/QuickCreator/StorePost.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\QuickCreator;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePost extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'name' => 'required|string|max:191',\n            'entity_id' => 'required|integer|exists:entities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ReadBanner.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ReadBanner extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'code' => 'required|string|max:20',\n            'type' => 'nullable|string|max:10',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/RecoverEntity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass RecoverEntity extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entities' => 'required|array',\n            'entities.*' => 'distinct|exists:entities,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/RecoverPost.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass RecoverPost extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'posts' => 'required|array',\n            'posts.*' => 'distinct|exists:posts,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/RenameEntityFile.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass RenameEntityFile extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'sometimes|required|min:3',\n            'visibility' => 'sometimes|required|string|in:all,admin,self,members,admin-self',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ReorderAbility.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ReorderAbility extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entity_ability' => 'array',\n            'entity_ability.*' => 'integer|exists:entity_abilities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ReorderBookmarks.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ReorderBookmarks extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'bookmark' => 'array',\n            'bookmark.*' => 'integer|exists:bookmarks,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ReorderGroups.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ReorderGroups extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'groups' => 'array',\n            'groups.*' => 'integer|exists:map_groups,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ReorderLayers.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ReorderLayers extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'layers' => 'array',\n            'layers.*' => 'integer|exists:map_layers,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ReorderStories.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ReorderStories extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'posts' => [\n                '*' => [\n                    'id' => 'integer|exists:posts,id',\n                    'visibility_id' => 'integer|exists:visibilities,id',\n                ],\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ReorderStyles.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ReorderStyles extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'styles' => 'array',\n            'styles.*' => 'integer|exists:campaign_styles,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ReorderTimeline.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ReorderTimeline extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'timeline_era' => 'array',\n            'timeline_era.*' => 'integer|exists:timeline_eras,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/SaveAttributes.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass SaveAttributes extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n\n        return $this->clean([\n            'attribute' => ['array', new UniqueAttributeNames],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/SaveAttributesApi.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Enums\\AttributeType;\nuse App\\Rules\\ApiUniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rules\\Enum;\n\nclass SaveAttributesApi extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n\n        return $this->clean([\n            'attribute' => ['array', new ApiUniqueAttributeNames],\n            'attribute.*' => ['array'],\n            'attribute.*.name' => ['nullable', 'string'],\n            'attribute.*.id' => ['nullable', 'integer', 'exists:attributes,id'],\n            'attribute.*.type_id' => [\n                'required_without:attribute.*.id',\n                new Enum(AttributeType::class),\n            ],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/SaveUserHelp.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass SaveUserHelp extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'campaign' => 'required|integer|exists:campaigns,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Search/MentionRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Search;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MentionRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'entities' => 'array',\n            'entities.*' => 'integer',\n            'posts' => 'array',\n            'posts.*' => 'integer',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Settings/NewsletterStore.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Settings;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass NewsletterStore extends FormRequest\n{\n    public function rules()\n    {\n        return [\n            'mail_release' => 'nullable',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Settings/StoreApiToken.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Settings;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreApiToken extends FormRequest\n{\n    public function rules()\n    {\n        return [\n            'name' => ['required', 'string', 'max:90'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Settings/StoreClient.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Settings;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreClient extends FormRequest\n{\n    public function rules()\n    {\n        return [\n            'name' => ['required', 'string', 'max:90'],\n            'redirect' => ['required', 'string', 'max:120', 'url', 'active_url'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Settings/UserAltSubscribeStore.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Settings;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UserAltSubscribeStore extends FormRequest\n{\n    public function rules()\n    {\n        return [\n            'method' => 'required|in:giropay,sofort,ideal',\n            'period' => 'required|in:yearly',\n            'accountholder-name' => 'required_if:method,giropay',\n            'sofort-country' => 'required_if:method,sofort',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Settings/UserBillingStore.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Settings;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass UserBillingStore extends FormRequest\n{\n    public function rules()\n    {\n        return [\n            'currency' => [\n                'nullable',\n                Rule::in(['usd', 'eur', 'brl']),\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Settings/UserSubscribeStore.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Settings;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UserSubscribeStore extends FormRequest\n{\n    public function rules()\n    {\n        return [\n            'payment_id' => 'required_without:is_downgrade',\n            'reason' => 'nullable',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Spotlights/ApplyRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Spotlights;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ApplyRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        $isApply = $this->string('action')->toString() === 'apply';\n        $requiredOrNullable = $isApply ? 'required|string|min:15' : 'nullable|string';\n\n        return [\n            'action' => 'nullable|in:save,apply',\n\n            'time' => $requiredOrNullable,\n            'world' => $requiredOrNullable,\n            'proud' => $requiredOrNullable,\n            'inspiration' => $requiredOrNullable,\n            'stories' => $requiredOrNullable,\n            'kanka' => 'nullable|string',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreAbility.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreAbility extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'charges' => 'nullable|max:120',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreAbilityEntity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreAbilityEntity extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'ability_id' => 'required|integer|exists:entities,id',\n            'visibility_id' => 'required|integer|exists:visibilities,id',\n            'entities' => 'array|required',\n            'entities.*' => ['different:ability_id|integer|exists:entities,id'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreAttribute.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreAttribute extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'name' => 'required|max:191',\n            'value' => 'nullable|string',\n            'type' => 'nullable|string',\n            'api_key' => 'nullable|string|max:20',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreAttributeTemplate.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreAttributeTemplate extends FormRequest\n{\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'entity_type_id' => 'nullable|integer|exists:entity_types,id',\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreBillingSettings.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreBillingSettings extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'profile.billing' => 'max:1024',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreBookmark.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Rules\\FontAwesomeIcon;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreBookmark extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'name' => 'required|max:191',\n            'entity_id' => 'required_without_all:entity_type_id,random_entity_type,dashboard_id|nullable|exists:entities,id',\n            'entity_type_id' => 'required_without_all:entity_id,random_entity_type,dashboard_id|nullable|exists:entity_types,id',\n            'random_entity_type' => 'required_without_all:entity_id,entity_type_id,dashboard_id',\n            'dashboard_id' => 'required_without_all:entity_id,entity_type_id,random_entity_type',\n            'icon' => ['nullable', new FontAwesomeIcon],\n            'tab' => 'nullable',\n            'parent' => 'nullable|string|max:25',\n            'css' => 'nullable|string|max:45',\n            'filters' => 'nullable|string|max:191',\n            'menu' => 'nullable|string|max:45',\n            'position' => 'nullable|integer|min:1|max:99',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCalendar.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\CalendarFormat;\nuse App\\Rules\\CalendarMoonOffset;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCalendar extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'month_name' => 'required|array|min:1',\n            'month_length' => 'required|array|min:1',\n            'weekday' => 'required|array|min:2',\n            'start_offset' => 'nullable|integer|min:0|max:99',\n            'year_name' => 'nullable|array',\n            'moon_name' => 'nullable|array',\n            'moon_fullmoon' => 'nullable|array',\n            'moon_offset' => 'required_with:moon_name|array',\n            'moon_colour' => 'required_with:moon_name|array',\n            'moon_id' => 'required_with:moon_name|nullable|array',\n            'epoch_name' => 'nullable|array',\n            'season_name' => 'nullable|array',\n            'show_birthdays' => 'boolean',\n            'template_id' => 'nullable',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n            'format' => ['nullable', new CalendarFormat, 'string', 'max:20'],\n            //            'moon_offset' => [\n            //                '*' => new CalendarMoonOffset()\n            //            ],\n        ];\n\n        if (request()->has('quick-creator')) {\n            $rules = [\n                'name' => 'required|max:191',\n                'type' => 'nullable|max:191',\n                'parent_id' => 'nullable|integer|exists:entities,id',\n            ];\n        }\n\n        $rules['has_leap_year'] = 'boolean';\n        $rules['leap_year_amount'] = 'exclude_if:has_leap_year,0|numeric|min:-128|max:128';\n        $rules['leap_year_offset'] = 'exclude_if:has_leap_year,0|numeric|min:1|max:255';\n        $rules['leap_year_start'] = 'exclude_if:has_leap_year,0|numeric|min:1|max:255';\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaign.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Domain;\nuse App\\Facades\\Limit;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaign extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|string|min:4|max:191',\n            'description' => 'nullable|string',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'header_image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'locale' => 'nullable|string',\n            'systems' => 'array',\n            'systems.*' => 'distinct|exists:game_systems,id',\n            'entity_visibility' => 'nullable',\n            'entity_personality_visibility' => 'nullable',\n            'css' => 'nullable|string',\n            'theme_id' => 'nullable|exists:themes,id',\n        ];\n\n        if ((Domain::isApi()) && ! request()->isMethod('POST')) {\n            $rules['name'] = 'string|min:4';\n        }\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaignDashboard.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignDashboard extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:100',\n            'roles' => 'required',\n            'source' => 'nullable|exists:campaign_dashboards,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaignDashboardWidget.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Enums\\Widget;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\Enum;\n\nclass StoreCampaignDashboardWidget extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'widget' => ['required', new Enum(Widget::class)],\n            'entity_id' => 'nullable|exists:entities,id',\n            'dashboard_id' => 'nullable|exists:campaign_dashboards,id',\n            'config.order' => 'nullable|in:name_asc,name_desc,oldest',\n            'entity_type_id' => 'nullable|exists:entity_types,id',\n            'config.folder_id' => ['required_if:widget,gallery', Rule::exists('images', 'id')->where('is_folder', true)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaignInvite.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignInvite extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'role_id' => 'required|integer|exists:campaign_roles,id',\n            'validity' => 'nullable|integer',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaignRole.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignRole extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required',\n            'role_id' => 'integer|exists:campaign_roles,id',\n            'duplicate' => 'boolean',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaignRoleUser.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignRoleUser extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'user_id' => 'required|integer|exists:users,id|unique:campaign_role_users,user_id,NULL,NULL,campaign_role_id,'\n                . request()->get('campaign_role_id'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaignStyle.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignStyle extends FormRequest\n{\n    use ApiRequest;\n\n    public const MAX = 60000;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'name' => 'required|string|max:45',\n            'content' => ['required', 'max:' . self::MAX],\n            'is_enabled' => 'nullable',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaignTheme.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignTheme extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'theme_id' => 'nullable|exists:themes,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCampaignUser.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCampaignUser extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'role' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCharacter.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Family;\nuse App\\Models\\Location;\nuse App\\Models\\Race;\nuse App\\Rules\\EntityField;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCharacter extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'locations' => [\n                'nullable',\n                'array',\n                new EntityField(\n                    config('entities.ids.location'),\n                    Location::class,\n                ),\n            ],\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'age' => 'nullable|max:25',\n            'sex' => 'nullable|max:45',\n            'pronouns' => 'nullable|max:45',\n            'title' => 'nullable|max:191',\n            'template_id' => 'nullable',\n            'families' => [\n                'nullable',\n                'array',\n                new EntityField(config('entities.ids.family'), Family::class),\n            ],\n            'races' => [\n                'nullable',\n                'array',\n                new EntityField(config('entities.ids.race'), Race::class),\n            ],\n            'personality_name' => 'nullable|array',\n            'personality_entry' => 'nullable|array',\n            'appearance_name' => 'nullable|array',\n            'appearance_entry' => 'nullable|array',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n            'status_id' => ['nullable', 'exists:category_statuses,id'],\n            'tags' => 'nullable|array',\n            'tags.*' => 'distinct|exists:tags,id',\n        ];\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCharacterFamily.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCharacterFamily extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'characters' => 'required|array|min:1',\n            'characters.*' => 'distinct|required|distinct|exists:characters,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCharacterOrganisation.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCharacterOrganisation extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return $this->clean([\n            'organisation_id' => 'required|integer|exists:organisations,id',\n            'role' => 'nullable|string|max:191',\n            'is_private' => 'nullable|boolean',\n            'parent_id' => 'nullable|integer|exists:organisation_member,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCharacterRace.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCharacterRace extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'race_id' => 'required|integer|exists:races,id',\n            'members' => 'array',\n            'members.*' => 'integer|exists:characters,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreConversation.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Enums\\ConversationTarget;\nuse App\\Facades\\Limit;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rules\\Enum;\n\nclass StoreConversation extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'type' => 'nullable|string|max:45',\n            'target_id' => ['required', new Enum(ConversationTarget::class)],\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreConversationMessage.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreConversationMessage extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'message' => 'required|string',\n            'character_id' => 'nullable|integer|exists:characters,id',\n            'user_id' => 'nullable|integer|exists:users,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreConversationParticipant.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreConversationParticipant extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'character_id' => 'nullable|integer|exists:characters,id|required_without_all:user_id',\n            'user_id' => 'nullable|integer|exists:users,id|required_without_all:character_id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCreature.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Models\\Location;\nuse App\\Rules\\EntityField;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCreature extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'locations' => ['nullable', 'array', new EntityField(config('entities.ids.location'), Location::class)],\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n            'status_id' => ['nullable', 'exists:category_statuses,id'],\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreCustomEntity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\EntityType;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\CreatesEntityFromName;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Support\\Str;\n\nclass StoreCustomEntity extends FormRequest\n{\n    use ApiRequest;\n    use CreatesEntityFromName;\n\n    private bool $parentIdResolved = false;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'image_uuid' => 'nullable|integer|exists:images,id',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'attribute' => ['array', new UniqueAttributeNames],\n        ];\n\n        return $this->clean($rules);\n    }\n\n    /**\n     * Return the resolved parent_id so EditController can sync it back into the original request.\n     *\n     * @return array<string, mixed>\n     */\n    public function resolvedFields(): array\n    {\n        if (! $this->parentIdResolved) {\n            return [];\n        }\n\n        return ['parent_id' => $this->input('parent_id')];\n    }\n\n    protected function prepareForValidation(): void\n    {\n        $value = $this->input('parent_id');\n        if (empty($value) || is_numeric($value)) {\n            return;\n        }\n\n        // AJAX calls are validation-only pre-flight requests; replace the string with null\n        // so the 'nullable' rule passes without creating an entity.\n        if (request()->ajax()) {\n            $this->merge(['parent_id' => null]);\n\n            return;\n        }\n\n        // Resolve entity type from route: creation uses {entity_type}, editing uses {entity}.\n        $entityType = request()->route('entity_type') ?? request()->route('entity')?->entityType;\n        if (! $entityType instanceof EntityType) {\n            $this->merge(['parent_id' => null]);\n\n            return;\n        }\n\n        $name = Str::startsWith($value, 'new:') ? Str::substr($value, 4) : $value;\n        $campaign = CampaignLocalization::getCampaign();\n        $id = $this->createEntityFromName($name, $entityType, $campaign);\n\n        $this->parentIdResolved = true;\n        $this->merge(['parent_id' => $id]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreDiceRoll.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreDiceRoll extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'parameters' => 'required|max:191',\n            'character_id' => 'nullable|integer|exists:characters,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        if (request()->has('quick-creator')) {\n            unset($rules['parameters']);\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityAbility.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityAbility extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            // 'ability_id' => 'required_without:abilities|exists:abilities,id',\n            'abilities' => 'required:ability_id|array|min:1',\n            'abilities.*' => 'distinct|exists:abilities,id',\n            'position' => 'nullable|integer|min:0|max:100',\n            'note' => 'nullable|string',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityAlias.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityAlias extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'name' => 'required|string|max:45',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityAsset.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Facades\\Limit;\nuse App\\Rules\\EntityFile;\nuse App\\Rules\\FontAwesomeIcon;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityAsset extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'name' => 'required_unless:type_id,' . EntityAssetType::file->value . '|max:45',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'file' => [\n                'required_if:type_id,' . EntityAssetType::file->value,\n                'file',\n                'max:' . Limit::upload(),\n                new EntityFile,\n            ],\n            'metadata.url' => 'required_if:type_id,' . EntityAssetType::link->value . '|string|url',\n            'metadata.icon' => ['max:45', new FontAwesomeIcon],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityAssets.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Facades\\Limit;\nuse App\\Rules\\EntityFile;\nuse App\\Rules\\FontAwesomeIcon;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityAssets extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'name' => 'required_unless:type_id,' . EntityAssetType::file->value . '|max:45',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'files' => ['required_if:type_id,' . EntityAssetType::file->value],\n            'files.*' => [\n                'file',\n                'max:' . Limit::upload(),\n                new EntityFile,\n            ],\n            'metadata.url' => 'required_if:type_id,' . EntityAssetType::link->value . '|string|url',\n            'metadata.icon' => ['max:45', new FontAwesomeIcon],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityFile.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Rules\\EntityFile;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityFile extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'file' => [\n                'required',\n                'file',\n                'max:' . Limit::upload(),\n                new EntityFile,\n            ],\n            'name' => 'nullable|string|max:45',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityLink.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityLink extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'name' => 'required|string|max:45',\n            'url' => 'required|string|url',\n            'icon' => 'nullable|string|max:45',\n            'position' => 'nullable|integer',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityPermission.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityPermission extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            '*.campaign_role_id' => ['required_without:*.user_id', 'integer', 'exists:campaign_roles,id'],\n            '*.user_id' => ['required_without:*.campaign_role_id', 'integer', 'exists:users,id'],\n            '*.access' => ['required', 'boolean'],\n            '*.action' => ['required', 'numeric'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityTag.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityTag extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'tag_id' => 'required|integer|exists:tags,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEntityType.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEntityType extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'singular' => ['required', 'string', 'max:45'],\n            'plural' => ['required', 'string', 'max:45'],\n            'icon' => ['required', 'string', 'max:100'],\n            'roles' => 'array',\n            'roles.*' => 'integer|exists:campaign_roles,id',\n            'default_entity_image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreEvent.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Models\\Location;\nuse App\\Rules\\EntityField;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreEvent extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'date' => 'nullable|max:191',\n            'locations' => ['nullable', 'array', new EntityField(config('entities.ids.location'), Location::class)],\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreFamily.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreFamily extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = ['location_id'];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'location_id' => 'nullable|integer|exists:locations,id',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n            'status_id' => ['nullable', 'exists:category_statuses,id'],\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreFamilyTree.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreFamilyTree extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreFeature.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreFeature extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreImageFocus.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreImageFocus extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'focus_x' => 'nullable|integer',\n            'focus_y' => 'nullable|integer',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreInventory.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreInventory extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entity_id' => 'required|integer|exists:entities,id',\n            'name' => 'nullable|string|required_without:item_id',\n            'item_id' => 'nullable|array|required_without:name',\n            'item_id.*' => 'integer|exists:items,id',\n            'amount' => 'required|numeric',\n            'position' => 'nullable|string|max:191',\n            'description' => 'nullable|string|max:191',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'image_uuid' => 'nullable|exists:images,id',\n            'is_equipped' => 'boolean',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreItem.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreItem extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = ['location_id'];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'location_id' => 'nullable|integer|exists:locations,id',\n            'creators' => 'nullable|array',\n            'creators.*' => 'integer|exists:entities,id',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'price' => 'nullable|string|max:191',\n            'size' => 'nullable|string|max:191',\n            'weight' => 'nullable|string|max:191',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreJournal.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreJournal extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = ['location_id'];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'date' => 'nullable|date',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'location_id' => 'nullable|exists:locations,id',\n            'author_id' => 'nullable|exists:entities,id',\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        if (request()->has('calendar_id') && request()->post('calendar_id') !== null && ! request()->has('calendar_skip')) {\n            $rules['calendar_day'] = 'required_with:calendar_id|min:1';\n            $rules['calendar_year'] = 'required_with:calendar_id';\n\n            if (request()->has('length')) {\n                $rules['length'] = 'required_with:calendar_id|min:1';\n            }\n        }\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreLocation.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreLocation extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'title' => 'nullable|string|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n            'status_id' => ['nullable', 'exists:category_statuses,id'],\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreMap.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Models\\Map;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreMap extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = ['location_id'];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'location_id' => 'nullable|integer|exists:locations,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp,svg|max:' . Limit::map()->upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'center_x' => 'nullable|numeric',\n            'center_y' => 'nullable|numeric',\n            'max_zoom' => 'nullable|numeric|min:1|max:' . Map::MAX_ZOOM,\n            'min_zoom' => 'nullable|numeric|min:' . Map::MIN_ZOOM . '|max:' . Map::MAX_ZOOM_REAL,\n            'initial_zoom' => 'nullable|numeric|min:' . Map::MIN_ZOOM . '|max:' . Map::MAX_ZOOM_REAL,\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreMapGroup.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Models\\MapGroup;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreMapGroup extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'position' => 'nullable|string|max:3',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'parent_id' => 'nullable|integer|exists:map_groups,id',\n        ];\n\n        /** @var MapGroup $self */\n        $self = request()->route('map_group');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:map_groups,id',\n            ];\n        }\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreMapLayer.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Models\\MapLayer;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreMapLayer extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'image_uuid' => 'required|exists:images,id',\n            'position' => 'nullable|string|max:3',\n            'type_id' => 'nullable|integer',\n        ];\n\n        // If editing, don't need a new image\n        /** @var MapLayer $self */\n        $self = request()->route('map_layer');\n        if ($self && ! empty($self->image_path)) {\n            unset($rules['image_uuid']);\n        }\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreMapMarker.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreMapMarker extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'nullable|string|required_without:entity_id',\n            'entry' => 'nullable|string',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'entity_id' => 'nullable|integer|exists:entities,id|required_without:name',\n            'group_id' => 'nullable|integer|exists:map_groups,id',\n\n            'longitude' => 'required|numeric',\n            'latitude' => 'required|numeric',\n            'colour' => 'max:7',\n            'size_id' => 'nullable|integer',\n\n            'shape_id' => 'required|integer',\n            'custom_shape' => 'nullable|string',\n            'is_draggable' => 'boolean',\n            'is_popupless' => 'boolean',\n            'css' => 'nullable|string|max:45',\n\n            'icon' => 'required|integer',\n            'custom_icon' => 'nullable|string',\n            'circle_radius' => 'nullable|integer',\n            'opacity' => 'nullable|min:0|max:100|integer',\n\n            'marker_size' => 'nullable|integer|min:10',\n        ];\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreMarketplaceProfile.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreMarketplaceProfile extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'marketplace_name' => 'nullable|string|min:4',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreNote.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreNote extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreOrganisation.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Models\\Location;\nuse App\\Rules\\EntityField;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreOrganisation extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'locations' => ['nullable', 'array', new EntityField(config('entities.ids.location'), Location::class)],\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n            'status_id' => ['nullable', 'exists:category_statuses,id'],\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreOrganisationMember.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreOrganisationMember extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'organisation_id' => 'required|integer|exists:organisations,id',\n            'character_id' => 'required|integer|exists:characters,id',\n            'role' => 'nullable',\n            'is_private' => 'nullable',\n            'parent_id' => 'nullable|integer|exists:organisation_member,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreOrganisationMembers.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreOrganisationMembers extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'characters' => 'required|array|min:1',\n            'characters.*' => 'distinct|required|distinct|exists:characters,id',\n            'role' => 'nullable',\n            'is_private' => 'nullable',\n            'parent_id' => 'nullable|exists:organisation_member,id',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StorePermission.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePermission extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entity_id' => 'required|integer|exists:entities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StorePost.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Rules\\Lessless;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePost extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => ['required', 'string', 'max:191', new Lessless],\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'location_id' => 'nullable|exists:locations,id',\n            'is_pinned' => 'boolean',\n            'position' => 'nullable|integer|min:-128|max:128',\n            'entry' => 'nullable|string',\n            'layout_id' => 'nullable|integer|exists:post_layouts,id',\n        ];\n\n        if (request()->has('calendar_id') && request()->post('calendar_id') !== null && ! request()->has('calendar_skip')) {\n            $rules['calendar_day'] = 'required_with:calendar_id|min:1';\n            $rules['calendar_year'] = 'required_with:calendar_id';\n\n            if (request()->has('length')) {\n                $rules['length'] = 'required_with:calendar_id|min:1';\n            }\n        }\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StorePreset.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePreset extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, mixed>\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required|string',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreQuest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreQuest extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = ['location_id'];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'status_id' => ['nullable', 'exists:category_statuses,id'],\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'character_id' => 'nullable|integer|exists:characters,id',\n            'location_id' => 'nullable|integer|exists:locations,id',\n            'template_id' => 'nullable',\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        // If the calendar is present and not null, but we aren't \"skipping\" it (editing but without permission)\n        if (request()->has('calendar_id') && request()->post('calendar_id') !== null && ! request()->has('calendar_skip')) {\n            $rules['calendar_day'] = 'required_with:calendar_id|min:1';\n            $rules['calendar_year'] = 'required_with:calendar_id';\n\n            if (request()->has('length')) {\n                $rules['length'] = 'required_with:calendar_id|min:1';\n            }\n        }\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreQuestElement.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreQuestElement extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    protected function prepareForValidation(): void\n    {\n        if ($this->input('copy_entity_entry') && empty($this->input('entity_id'))) {\n            $this->merge(['copy_entity_entry' => false]);\n        }\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entity_id' => 'nullable|required_without:name|exists:entities,id',\n            'name' => 'nullable|string|required_without:entity_id',\n            'entry' => 'string|nullable',\n            'role' => 'nullable|string|max:191',\n            'colour' => 'nullable|string|max:10',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'copy_entity_entry' => 'nullable|boolean',\n        ];\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreRace.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Models\\Location;\nuse App\\Rules\\EntityField;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreRace extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'locations' => ['nullable', 'array', new EntityField(config('entities.ids.location'), Location::class)],\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n            'status_id' => ['nullable', 'exists:category_statuses,id'],\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreRelation.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreRelation extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'owner_id' => 'required|integer|exists:entities,id',\n            'targets' => 'required_without:target_id',\n            'targets.*' => 'integer|exists:entities,id',\n            'target_id' => 'required_without:targets|integer|exists:entities,id|different:owner_id',\n            'relation' => 'required|max:255',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'attitude' => 'min:-100|max:100',\n            'colour' => 'nullable|max:7',\n            'is_pinned' => 'boolean',\n            'two_way' => 'boolean',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreSettingsAccount.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreSettingsAccount extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [];\n        $rules['password_new'] = 'required|min:6|confirmed';\n        $rules['password_new_confirmation'] = 'required';\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreSettingsAccountEmail.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass StoreSettingsAccountEmail extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $user = Auth::user();\n        $rules = [\n            'email' => 'required|email|unique:users,email,' . $user->id,\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreSettingsLayout.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreSettingsLayout extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'date_format' => 'nullable|string|max:5',\n            'theme' => 'nullable',\n            //            'editor' => 'in:,summernote,markdown',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreSettingsProfile.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreSettingsProfile extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|string|min:2',\n            'pronouns' => 'string|max:45',\n            'link' => 'url|max:90',\n            'newsletter' => 'boolean',\n            'has_last_login_sharing' => 'boolean',\n            'avatar' => 'mimes:jpeg,png,jpg,gif,webp|max:8192',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreShare.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreShare extends FormRequest\n{\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    public function rules(): array\n    {\n        return [\n            'visibility_mode' => ['nullable', 'string', 'in:entity,global'],\n            'campaign_visibility' => ['nullable', 'string', 'in:public'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreTag.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreTag extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'icon' => ['nullable', 'string', 'max:100', 'regex:/^(fa-|ra )/'],\n            'colour' => [\n                'nullable',\n                'max:7',\n            ],\n            'attribute' => ['array', new UniqueAttributeNames],\n            'is_private' => 'nullable|boolean',\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreTagEntity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreTagEntity extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'tag_id' => 'required|integer|exists:entities,id',\n            'entities' => 'required|min:1',\n            'entities.*' => 'different:tag_id|integer|exists:entities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreTimeline.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Rules\\Nested;\nuse App\\Rules\\UniqueAttributeNames;\nuse App\\Traits\\ApiRequest;\nuse App\\Traits\\ResolvesNewForeignEntities;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreTimeline extends FormRequest\n{\n    use ApiRequest;\n    use ResolvesNewForeignEntities;\n\n    protected array $foreignEntityFields = [];\n\n    protected bool $foreignEntityParent = true;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'entry' => 'nullable|string',\n            'type' => 'nullable|string|max:191',\n            'parent_id' => 'nullable|integer|exists:entities,id',\n            'calendar_id' => 'nullable|integer|exists:calendars,id',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp,svg|max:' . Limit::upload(),\n            'image_url' => 'nullable|url|active_url',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n            'revert_order' => 'nullable',\n            'attribute' => ['array', new UniqueAttributeNames],\n        ];\n\n        /** @var Entity $self */\n        $self = request()->route('entity');\n        if (! empty($self)) {\n            $rules['parent_id'] = [\n                'nullable',\n                'integer',\n                'exists:entities,id',\n                new Nested($self),\n            ];\n        }\n\n        $rules['tags'] = 'nullable|array';\n        $rules['tags.*'] = 'distinct|exists:tags,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreTimelineElement.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Rules\\FontAwesomeIcon;\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreTimelineElement extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'timeline_id' => 'prohibited',\n            'entity_id' => 'nullable|required_without:name|exists:entities,id',\n            'name' => 'nullable|string|max:191|required_without:entity_id',\n            'era_id' => 'required|integer|exists:timeline_eras,id',\n            'entry' => 'nullable|string',\n            'position' => 'nullable|integer',\n            'colour' => 'nullable|string|max:12',\n            'date' => 'nullable|string|max:45',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n            'icon' => ['nullable', 'string', new FontAwesomeIcon],\n            'use_event_date' => 'boolean',\n        ];\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreTimelineEra.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreTimelineEra extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|string',\n            'entry' => 'nullable|string',\n            'abbreviation' => 'nullable|string',\n            'start_date' => 'nullable|integer',\n            'end_date' => 'nullable|integer',\n        ];\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreWebhook.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreWebhook extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'action' => 'integer|required',\n            'tags' => 'array',\n            'tags.*' => 'integer|exists:tags,id',\n            'url' => 'string|required|active_url|max:191',\n            'type' => 'required|integer',\n            'message' => 'required_if:type_id,1',\n            'status' => 'nullable|boolean',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreWhiteboard.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreWhiteboard extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'required|max:191',\n            'type' => 'nullable|string|max:45',\n            'entity_image_uuid' => 'nullable|exists:images,id',\n            'entity_header_uuid' => 'nullable|exists:images,id',\n            'template_id' => 'nullable',\n        ];\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/SubscriptionCancel.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass SubscriptionCancel extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'reason' => 'nullable',\n            'reason_secondary' => 'nullable',\n            'reason_custom' => 'nullable',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/TransferTag.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass TransferTag extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'tag_id' => 'required|integer|exists:tags,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/TransformEntity.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass TransformEntity extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entities' => 'array|required',\n            'entities.*' => 'distinct|integer|exists:entities,id',\n            'entity_type' => 'required|integer|exists:entity_types,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/TransformEntityRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass TransformEntityRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'target' => 'required|integer|exists:entity_types,id',\n            'confirm' => 'required|boolean',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Translation/StoreFaqTranslationRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Translation;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreFaqTranslationRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'category_id' => 'required|integer|exists:faq_categories,id',\n            'locale' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateAttribute.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateAttribute extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'name' => 'nullable|string|max:191',\n            'value' => 'nullable|string',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateCalendarEvent.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateCalendarEvent extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entity_id' => 'integer|exists:entities,id',\n            'day' => 'required',\n            'month' => 'required',\n            'year' => 'required',\n            'length' => 'required|integer|min:1',\n            'is_recurring' => 'nullable',\n            'recurring_until' => 'nullable',\n            'recurring_periodicity' => 'nullable|max:5',\n            'colour' => 'nullable|string|max:7',\n            'comment' => 'nullable|max:191',\n            'type_id' => 'nullable|integer|exists:entity_event_types,id',\n            'visibility' => 'nullable|string|in:all,admin,self,members,admin-self',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateCampaign.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse App\\Rules\\Vanity;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateCampaign extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'name' => 'string|min:4',\n            'vanity' => ['nullable', 'string', 'min:4', 'max:45', 'unique:campaigns,slug', new Vanity],\n            'description' => 'nullable|string',\n            'image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'header_image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n            'locale' => 'nullable|string',\n            'systems' => 'array',\n            'systems.*' => 'distinct|exists:game_systems,id',\n            'entity_visibility' => 'nullable',\n            'entity_personality_visibility' => 'nullable',\n            'is_public' => 'nullable',\n            'css' => 'nullable|string',\n            'theme_id' => 'nullable|exists:themes,id',\n            'genres' => 'array',\n            'genres.*' => 'distinct|exists:genres,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateCampaignHeader.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateCampaignHeader extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'excerpt' => 'nullable',\n            'header_image' => 'nullable|mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateEntityAbility.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateEntityAbility extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'note' => 'nullable|string',\n            'visibility_id' => 'nullable|integer|exists:visibilities,id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateEntityAttribute.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateEntityAttribute extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'value' => 'nullable',\n            'uid' => 'required|numeric',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateEntityEntry.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateEntityEntry extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'entry' => 'required|string',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateEntityFile.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateEntityFile extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required|string|max:45',\n            'visibility' => 'nullable|string|max:10',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateEntityImage.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateEntityImage extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'entity_image_uuid' => 'nullable|exists:images,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateEntityTags.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateEntityTags extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'tags' => 'array',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateInventory.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\n\nclass UpdateInventory extends StoreInventory\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = parent::rules();\n        unset($rules['item_id.*']);\n        $rules['item_id'] = 'nullable|required_without:name|exists:items,id';\n\n        return $this->clean($rules);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateModuleName.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Facades\\Limit;\nuse Illuminate\\Contracts\\Validation\\Rule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateModuleName extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, Rule|array|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'enabled' => 'nullable|boolean',\n            'singular' => 'nullable|string|max:45',\n            'plural' => 'nullable|string|max:45',\n            'icon' => 'nullable|string|max:60',\n            'default_entity_image' => 'mimes:jpeg,png,jpg,gif,webp|max:' . Limit::upload(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateRelation.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse App\\Traits\\ApiRequest;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateRelation extends FormRequest\n{\n    use ApiRequest;\n\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return $this->clean([\n            'target_id' => 'integer|exists:entities,id',\n            'relation' => 'max:255',\n            'visibility_id' => 'integer|exists:visibilities,id',\n            'attitude' => 'min:-100|max:100',\n            'colour' => 'max:7',\n            'is_pinned' => 'boolean',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateUserRoles.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateUserRoles extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        $rules = [\n            'roles' => 'array',\n            'roles.*' => 'required|integer|exists:campaign_roles,id',\n        ];\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ValidateCoupon.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ValidateCoupon extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, mixed>\n     */\n    public function rules()\n    {\n        return [\n            'coupon' => 'required|min:4|max:25',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ValidatePledge.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ValidatePledge extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, mixed>\n     */\n    public function rules()\n    {\n        return [\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ValidateReminderLength.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ValidateReminderLength extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'day' => 'integer|nullable',\n            'month' => 'required|integer',\n            'year' => 'required|integer',\n            'length' => 'required|integer',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Whiteboards/CreateRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Whiteboards;\n\nuse App\\Models\\Whiteboard;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass CreateRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return $this->user()->can('create', Whiteboard::class);\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'name' => 'required|string|max:255',\n            'data' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Whiteboards/CreateStrokeRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Whiteboards;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass CreateStrokeRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'points' => 'required|array',\n            'fill' => 'string',\n            'width' => 'integer|min:1',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Whiteboards/StoreShapeRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Whiteboards;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreShapeRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return $this->user()->can('update', $this->whiteboard->entity);\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'type' => 'required|string',\n            'x' => 'required|numeric',\n            'y' => 'required|numeric',\n            'scale_x' => 'numeric',\n            'scale_y' => 'numeric',\n            'rotation' => 'nullable|numeric',\n            'width' => 'required|numeric',\n            'height' => 'required|numeric',\n            'is_locked' => 'boolean',\n            'z_index' => 'integer|integer',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Whiteboards/UpdateRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Whiteboards;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return $this->user()->can('update', $this->whiteboard->entity);\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'type' => 'required|string',\n            'shape' => 'required',\n            'x' => 'required|integer',\n            'y' => 'required|integer',\n            'scale_x' => 'required|integer',\n            'scale_y' => 'required|integer',\n            'rotation' => 'integer',\n            'width' => 'required|integer',\n            'height' => 'required|integer',\n            'is_locked' => 'boolean',\n            'z_index' => 'integer',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Whiteboards/UpdateShapeRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests\\Whiteboards;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateShapeRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return $this->user()->can('update', $this->whiteboard->entity);\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'group_id' => 'nullable|integer|exists:whiteboard_shapes,id',\n            'x' => 'numeric',\n            'y' => 'numeric',\n            'scale_x' => 'numeric',\n            'scale_y' => 'numeric',\n            'rotation' => 'numeric',\n            'width' => 'numeric',\n            'height' => 'numeric',\n            'is_locked' => 'boolean',\n            'z_index' => 'integer',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/AbilityResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Ability;\nuse Illuminate\\Http\\Request;\n\nclass AbilityResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Ability $ability */\n        $ability = $this->resource;\n\n        return $this->entity([\n            'charges' => $ability->charges,\n            'abilities' => $ability->entity->descendants()->pluck('id')->toArray(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Api/CategoryStatusResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Api;\n\nuse App\\Models\\CategoryStatus;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass CategoryStatusResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var CategoryStatus $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'key' => $model->key,\n            'is_default' => $model->is_default,\n            'category_id' => $model->category_id,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Api/DefaultEntityTypeResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Api;\n\nuse App\\Models\\EntityType;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass DefaultEntityTypeResource extends JsonResource\n{\n    public function toArray($request)\n    {\n        /** @var EntityType $entityType */\n        $entityType = $this->resource;\n\n        return [\n            'id' => $entityType->id,\n            'code' => $entityType->code,\n            'singular' => __('entities.' . $entityType->code),\n            'plural' => __('entities.' . $entityType->pluralCode()),\n            'icon' => $entityType->icon,\n            'is_special' => false,\n            'is_enabled' => true,\n            'is_nested' => $entityType->isNested(),\n            'has_table' => $entityType->hasTable(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Api/EntityImagesResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Api;\n\nuse App\\Facades\\Avatar;\nuse App\\Models\\Entity;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass EntityImagesResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var Entity $entity */\n        $entity = $this->resource;\n\n        return [\n            'image' => [\n                'uuid' => $entity->image_uuid,\n                'full' => Avatar::entity($entity)->original(),\n                'thumbnail' => Avatar::entity($entity)->size(40)->thumbnail(),\n            ],\n            'header' => [\n                'uuid' => $entity->header_uuid,\n                'full' => $entity->header?->getUrl(),\n                'thumbnail' => $entity->hasHeaderImage() ? $entity->getHeaderUrl() : null,\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Api/EntityTagResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Api;\n\nuse App\\Models\\EntityTag;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass EntityTagResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var EntityTag $model */\n        $model = $this->resource;\n\n        return [\n            'tag_id' => $model->tag_id,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ApiEntityTagResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass ApiEntityTagResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        return parent::toArray($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ApiExclusion.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\ntrait ApiExclusion\n{\n    public function excludeForApi(array $fields, array $rules): array\n    {\n        foreach ($fields as $field) {\n            if (! request()->has($field)) {\n                unset($rules[$field]);\n            }\n        }\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ApiSync.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Services\\Api\\ApiService;\nuse Carbon\\Carbon;\nuse Exception;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Str;\n\ntrait ApiSync\n{\n    /**\n     * Create new anonymous resource collection.\n     *\n     * @return AnonymousResourceCollection\n     */\n    public static function collection($resource)\n    {\n        $additional = [\n            'sync' => Carbon::now(),\n        ];\n        if (config('app.debug')) {\n            $additional['queries'] = new ApiService;\n        }\n\n        // Make sure we have the app's url for pagination, otherwise on prod it will skip the https scheme\n        try {\n            if (app()->isProduction() && $resource instanceof LengthAwarePaginator) {\n                /** @var LengthAwarePaginator $resource */\n                $path = $resource->path();\n                $path = Str::replaceFirst('http://', 'https://', $path);\n                $resource->setPath($path);\n            }\n        } catch (Exception $e) {\n            // Do nothing, this can happen for sub resources\n            // being called (ex character::characterOrgsCollection)\n            // throw $e;\n        }\n\n        return parent::collection($resource)\n            ->additional($additional);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ApplicationResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Application;\nuse Illuminate\\Http\\Request;\n\nclass ApplicationResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Application $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'user_id' => $model->user_id,\n            'text' => $model->text,\n            'created_at' => $model->created_at,\n            'updated_at' => $model->updated_at,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/AttributeResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Attribute;\nuse Illuminate\\Http\\Request;\n\nclass AttributeResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Attribute $attribute */\n        $attribute = $this->resource;\n\n        return $this->onEntity([\n            'name' => $attribute->name,\n            'value' => $attribute->isCheckbox() ? (bool) $attribute->value : $attribute->value,\n            'parsed' => $attribute->mappedValue(),\n            'default_order' => $attribute->default_order,\n            'is_star' => (bool) $attribute->isPinned(),\n            'is_pinned' => (bool) $attribute->isPinned(),\n            'api_key' => $attribute->api_key,\n            'type_id' => $attribute->type_id,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/AttributeTemplateResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\AttributeTemplate;\nuse Illuminate\\Http\\Request;\n\nclass AttributeTemplateResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var AttributeTemplate $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'entity_type_id' => $model->entity_type_id,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Attributes/LiveAttributeResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Attributes;\n\nuse App\\Models\\Attribute;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass LiveAttributeResource extends JsonResource\n{\n    public function toArray($request)\n    {\n        /** @var Attribute $attribute */\n        $attribute = $this->resource;\n\n        $formatted = [\n            'id' => $attribute->id,\n            'name' => $attribute->mappedName(),\n            'name_raw' => $attribute->name,\n            'value' => $attribute->isCheckbox() ? (bool) $attribute->value : $attribute->mappedValue(),\n            'value_raw' => $attribute->value,\n            'type_id' => $attribute->type_id,\n            'is_section' => $attribute->isSection(),\n            'is_number' => $attribute->isNumber(),\n            'is_multiline' => $attribute->isText(),\n            'is_checkbox' => $attribute->isCheckbox(),\n            'is_random' => $attribute->isRandom(),\n            'is_private' => (bool) $attribute->is_private,\n            'is_pinned' => $attribute->isPinned(),\n            'is_hidden' => (bool) $attribute->is_hidden,\n        ];\n\n        if ($attribute->isList()) {\n            $formatted['values'] = $attribute->listRange();\n        }\n\n        // Routes\n        $formatted['apis'] = [\n            'update' => [\n                'method' => 'POST',\n                'url' => route('entities.attributes.live-api.update', [$attribute->entity->campaign, $attribute->entity, $attribute]),\n            ],\n            'delete' => [\n                'method' => 'POST',\n                'url' => route('entities.attributes.live-api.delete', [$attribute->entity->campaign, $attribute->entity, $attribute]),\n            ],\n        ];\n\n        return $formatted;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/BookmarkResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Bookmark;\nuse Illuminate\\Http\\Request;\n\nclass BookmarkResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Bookmark $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'name' => $model->name,\n            'entity_id' => $model->entity_id,\n            'filters' => $model->filters,\n            'icon' => $model->icon,\n            'is_private' => $model->is_private,\n            'is_active' => $model->is_active,\n            'menu' => $model->menu,\n            'random_entity_type' => $model->random_entity_type,\n            'entity_type_id' => $model->entity_type_id,\n            'tab' => $model->tab,\n            'target' => $model->target,\n            'dashboard_id' => $model->dashboard_id,\n            'parent' => $model->parent,\n            'css' => $model->css,\n            'created_at' => $model->created_at,\n            'updated_at' => $model->updated_at,\n            'created_by' => $model->created_by,\n            'updated_by' => $model->updated_by,\n            'options' => $model->options,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CalendarResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Calendar;\nuse Illuminate\\Http\\Request;\n\nclass CalendarResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Calendar $calendar */\n        $calendar = $this->resource;\n\n        return $this->entity([\n            'date' => $calendar->date,\n            'parameters' => $calendar->parameters,\n            'months' => json_decode($calendar->months),\n            'weekdays' => json_decode($calendar->weekdays),\n            'years' => json_decode($calendar->years),\n            'seasons' => json_decode($calendar->seasons),\n            'moons' => json_decode($calendar->moons),\n            'start_offset' => $calendar->start_offset, // X year is a leap year\n            'suffix' => $calendar->suffix,\n            'format' => $calendar->format,\n            'has_leap_year' => $calendar->has_leap_year,\n            'skip_year_zero' => $calendar->skip_year_zero,\n            'leap_year_amount' => $calendar->leap_year_amount, // Add X number of days\n            'leap_year_month' => $calendar->leap_year_month, // At the end of month X\n            'leap_year_offset' => $calendar->leap_year_offset, // every X years\n            'leap_year_start' => $calendar->leap_year_start, // X year is a leap year\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CalendarWeatherResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass CalendarWeatherResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        return parent::toArray($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CampaignDashboardWidgetResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\CampaignDashboardWidget;\nuse Illuminate\\Http\\Request;\n\nclass CampaignDashboardWidgetResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var CampaignDashboardWidget $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'campaign_id' => $model->campaign_id,\n            'entity_id' => $model->entity_id,\n            'widget' => $model->widget,\n            'config' => $model->config,\n            'width' => (int) $model->width,\n            'position' => (int) $model->position,\n            'tags' => $model->tags()->pluck('id')->toArray(),\n\n            'created_at' => $model->created_at,\n            'updated_at' => $model->updated_at,\n            'created_by' => $model->created_by,\n            'updated_by' => $model->updated_by,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CampaignResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Illuminate\\Support\\Facades\\Route;\n\nclass CampaignResource extends JsonResource\n{\n    use ApiSync;\n\n    protected $withMentions = false;\n\n    public function withMentions(): self\n    {\n        $this->withMentions = true;\n\n        return $this;\n    }\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     */\n    public function toArray($request): array\n    {\n        /** @var Campaign $campaign */\n        $campaign = $this->resource;\n\n        $url = route('dashboard', ['campaign' => $campaign]);\n        $apiViewUrl = 'campaigns.show';\n\n        $data = [\n            'id' => $campaign->id,\n            'slug' => $campaign->slug,\n            'name' => $campaign->name,\n            'locale' => $campaign->locale,\n            'description_raw' => $campaign->description?->description,\n            'image' => $campaign->image,\n            'image_full' => $campaign->thumbnail(0),\n            'image_thumb' => $campaign->thumbnail(),\n            'visibility' => $campaign->isUnlisted() ? 'discreet' : ($campaign->isPublic() ? 'public' : 'private'),\n            'visibility_id' => $campaign->visibility_id->value,\n            'created_at' => $campaign->created_at,\n            'updated_at' => $campaign->updated_at,\n            'settings' => $campaign->settings,\n            'ui_settings' => $campaign->ui_settings,\n            'default_images' => $campaign->default_images,\n            'follower' => $campaign->follower(),\n            'boosted' => $campaign->boosted(),\n            'superboosted' => $campaign->superboosted(),\n            'premium' => $campaign->premium(),\n            'is_hidden' => (bool) $campaign->is_hidden,\n            'is_prioritised' => (bool) $campaign->is_prioritised,\n\n            'urls' => [\n                'view' => $url,\n                'api' => Route::has($apiViewUrl) ? route($apiViewUrl, [$campaign]) : null,\n            ],\n        ];\n\n        CampaignCache::campaign($campaign)->user(auth()->user());\n        UserCache::campaign($campaign)->user(auth()->user());\n        if (auth()->user()->can('member', $campaign) && auth()->user()->can('members', $campaign)) {\n            $data['members'] = CampaignUserResource::collection($campaign->members);\n        }\n\n        if ($this->withMentions) {\n            $data['description'] = $campaign->parsedEntry();\n        }\n\n        // Hide stuff like sidebar\n        unset($data['ui_settings']['sidebar']);\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CampaignStyleResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\CampaignStyle;\nuse Illuminate\\Http\\Request;\n\nclass CampaignStyleResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var CampaignStyle $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'campaign_id' => $model->campaign_id,\n            'name' => $model->name,\n            'content' => $model->content,\n            'is_enabled' => $model->is_enabled,\n            'is_theme' => $model->isTheme(),\n\n            'created_at' => $model->created_at,\n            'updated_at' => $model->updated_at,\n            'created_by' => $model->created_by,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CampaignUserResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\CampaignUser;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass CampaignUserResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var CampaignUser $resource */\n        $resource = $this->resource;\n\n        return [\n            'id' => $resource->id,\n            'user' => new UserResource($resource->user),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CampaignUserRoleResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\CampaignRole;\nuse Illuminate\\Http\\Request;\n\nclass CampaignUserRoleResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var CampaignRole $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'name' => $model->name,\n            'is_admin' => $model->isAdmin(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CategoryStatusResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\CategoryStatus;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass CategoryStatusResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var CategoryStatus $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'key' => $model->key,\n            'is_custom' => $model->isCustom(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CharacterOrganisationResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\n\nclass CharacterOrganisationResource extends KankaCollection\n{\n    /**\n     * Transform the resource collection into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        return parent::toArray($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CharacterResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Character;\nuse Illuminate\\Http\\Request;\n\nclass CharacterResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Character $model */\n        $model = $this->resource;\n\n        $raceIDs = $model->characterRaces->pluck('race.id');\n        $privateRaceIDs = $model->characterRaces->where('is_private', true)->pluck('race.id');\n        $familyIDs = $model->characterFamilies->pluck('family.id');\n        $privateFamilyIDs = $model->characterFamilies->where('is_private', true)->pluck('family.id');\n        $locationIds = $model->entity->locations->pluck('id');\n\n        $character = [\n            'title' => $model->title,\n            'age' => $model->age,\n            'sex' => $model->sex,\n            'pronouns' => $model->pronouns,\n            'races' => $raceIDs,\n            'private_races' => $privateRaceIDs,\n\n            'families' => $familyIDs,\n            'private_families' => $privateFamilyIDs,\n\n            'locations' => $locationIds,\n\n            'traits' => CharacterTraitResource::collection($model->characterTraits),\n            'is_personality_visible' => (bool) $model->is_personality_visible,\n            'is_personality_pinned' => (bool) $model->is_personality_pinned,\n            'is_appearance_pinned' => (bool) $model->is_appearance_pinned,\n        ];\n\n        if (request()->get('related', false)) {\n            $character['organisations'] = new CharacterOrganisationResource($model->organisationMemberships()->has('organisation')->get());\n        }\n\n        return $this->entity($character);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CharacterTraitResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Facades\\Mentions;\nuse App\\Models\\CharacterTrait;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass CharacterTraitResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var CharacterTrait $resource */\n        $resource = $this->resource;\n\n        return [\n            'id' => $resource->id,\n            'name' => $resource->name,\n            'entry' => $resource->entry,\n            'entry_parsed' => $resource->entry ? Mentions::mapAny($resource) : null,\n            'section_id' => $resource->section_id,\n            'section' => $resource->section_id == CharacterTrait::SECTION_APPEARANCE ? 'appearance' : 'personality',\n            // 'is_private' => (bool) $this->is_private,\n            'default_order' => $resource->default_order,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Conversation/ConversationMessageResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Conversation;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\ConversationMessage;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass ConversationMessageResource extends JsonResource\n{\n    public function toArray($request)\n    {\n        $campaign = CampaignLocalization::getCampaign();\n        /** @var ConversationMessage $resource */\n        $resource = $this->resource;\n\n        return [\n            'id' => $resource->id,\n            'from_id' => $resource->user_id ?: $resource->character_id,\n            'user' => $resource->user?->name,\n            'character' => $resource->character?->name,\n            'message' => $resource->message,\n            'created_at' => $resource->created_at->diffForHumans(),\n            'updated_at' => $resource->updated_at->diffForHumans(),\n            'created_by' => $resource->created_by,\n            'can_delete' => auth()->check() && auth()->user()->can('delete', $resource),\n            'can_edit' => auth()->check() && auth()->user()->can('edit', $resource),\n            'delete_url' => route('conversations.conversation_messages.destroy', [$campaign, $resource->conversation_id, $resource->id]),\n            'is_updated' => $resource->updated_at != $resource->created_at,\n            'group' => $resource->isGroup(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Conversation/ConversationResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Conversation;\n\nuse App\\Models\\Conversation;\nuse App\\Models\\ConversationMessage;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Illuminate\\Support\\Collection;\n\nclass ConversationResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        $oldest = $request->get('oldest', null);\n        $newest = $request->get('newest', null);\n\n        /** @var Conversation $resource */\n        $resource = $this->resource;\n\n        $messages = new Collection($resource->messages()->default($oldest, $newest)->get());\n        $messages = $messages->reverse();\n\n        $data = [];\n        $previous = null;\n        /** @var ConversationMessage $message */\n        foreach ($messages as $message) {\n            $message->grouppedWith($previous);\n            $data[] = new ConversationMessageResource($message);\n            //            [\n            //                'id' => $message->id,\n            //                'user' => $message->user ? $message->user->name : null,\n            //                'character' => $message->character ? $message->character->name : null,\n            //                'message' => $message->message,\n            //                'created_at' => $message->created_at->diffForHumans(),\n            //                'can_delete' => Auth::user()->can('delete', $message),\n            //                'can_edit' => Auth::user()->can('edit', $message),\n            //                'delete_url' => route('conversations.conversation_messages.destroy', [$this, $message]),\n            //                'is_updated' => $message->updated_at !== $message->created_at\n            //            ];\n            $previous = $message;\n        }\n\n        // Check if there are previous messages available\n        $first = $messages->first();\n        $previous = false;\n        if ($first) {\n            $previous = $resource->messages()->where('id', '<', $first->id)->count() > 0;\n        }\n\n        return [\n            'messages' => $data,\n            'previous' => $previous,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ConversationMessageResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\ConversationMessage;\nuse Illuminate\\Http\\Request;\n\nclass ConversationMessageResource extends ModelResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var ConversationMessage $resource */\n        $resource = $this->resource;\n\n        return [\n            'conversation_id' => $resource->conversation_id,\n            'created_by' => $resource->created_by,\n            'character_id' => $resource->character_id,\n            'user_id' => $resource->user_id,\n            'message' => $resource->message,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ConversationParticipantResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\ConversationParticipant;\nuse Illuminate\\Http\\Request;\n\nclass ConversationParticipantResource extends ModelResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var ConversationParticipant $resource */\n        $resource = $this->resource;\n\n        return [\n            'conversation_id' => $resource->conversation_id,\n            'character_id' => $resource->character_id,\n            'user_id' => $resource->user_id,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ConversationResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Conversation;\n\nclass ConversationResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Conversation $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'target' => $model->forCharacters() ? 'characters' : 'members',\n            'target_id' => $model->target_id,\n            'is_closed' => $model->is_closed,\n            'participants' => $model->participants()->count(),\n            'messages' => $model->messages()->count(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/CreatureResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Creature;\nuse Illuminate\\Http\\Request;\n\nclass CreatureResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Creature $model */\n        $model = $this->resource;\n        $locationIds = $model->entity->locations->pluck('id');\n\n        return $this->entity([\n            'locations' => $locationIds,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/DiceRollResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\DiceRoll;\nuse Illuminate\\Http\\Request;\n\nclass DiceRollResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var DiceRoll $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'system' => $model->system,\n            'parameters' => $model->parameters,\n            'rolls' => $model->diceRollResults()->pluck('results')->toArray(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Entities/ExploreResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Entities;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Http\\Resources\\EntityTypeResource;\nuse App\\Models\\Entity;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Illuminate\\Support\\Str;\n\nclass ExploreResource extends JsonResource\n{\n    protected static array $columnKeys = [];\n\n    public static function withColumns(array $keys): void\n    {\n        static::$columnKeys = $keys;\n    }\n\n    protected function hasColumn(string $key): bool\n    {\n        return empty(static::$columnKeys) || in_array($key, static::$columnKeys);\n    }\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var Entity $entity */\n        $entity = $this->resource;\n        $campaign = CampaignLocalization::getCampaign();\n        $attributes = [];\n        if ($entity->is_private) {\n            $attributes[] = 'private';\n        }\n\n        if ($entity->status) {\n            $attributes[] = $entity->status->key;\n        }\n\n        // Use the eager-loaded relation directly (not $entity->child which goes through EntityCache and loses withCount)\n        $child = $entity->entityType->isStandard()\n            ? $entity->getRelationValue(Str::camel($entity->entityType->code))\n            : null;\n        $parentEntity = $entity->parent;\n\n        $routeParams = [$campaign, $entity->entityType];\n        $links = ['back' => __('crud.actions.back')];\n        if ($parentEntity) {\n            $routeParams['parent_id'] = $parentEntity;\n            $links['back'] = __('datagrids.actions.back_to', ['name' => $parentEntity->name]);\n        }\n        $routeBack = route('entities.index', $routeParams);\n\n        $showParams = [$campaign, $entity];\n        if ($request->filled('bookmark')) {\n            $showParams['bookmark'] = $request->get('bookmark');\n        }\n\n        $data = [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'type' => $entity->type,\n            'type_slug' => Str::slug($entity->type ?? ''),\n            'attributes' => $attributes,\n            'selected' => false,\n            'children' => $entity->children_count ?? 0,\n            'images' => [\n                'thumb' => Avatar::entity($entity)->fallback()->size(192, 144)->thumbnail(),\n                'full' => Avatar::entity($entity)->original(),\n            ],\n            'is_private' => $entity->is_private,\n            'parent_id' => $parentEntity?->id,\n            'entityType' => new EntityTypeResource($entity->entityType),\n            'urls' => [\n                'tooltip' => route('entities.tooltip', [$campaign, $entity]),\n                'show' => route('entities.show', $showParams),\n                'children' => route('entities.index', [$campaign, $entity->entityType, 'parent_id' => $entity->id]),\n                'children_api' => route('entities.index-api', [$campaign, $entity->entityType, 'parent_id' => $entity->id, 'children' => true]),\n                'parent' => $routeBack,\n                'parent_api' => $parentEntity\n                    ? route('entities.index-api', [$campaign, $entity->entityType, 'parent_id' => $parentEntity->id])\n                    : route('entities.index-api', [$campaign, $entity->entityType]),\n                'edit' => route('entities.edit', [$campaign, $entity]),\n                'relations' => route('entities.relations.index', [$campaign, $entity]),\n                'inventory' => route('entities.inventory', [$campaign, $entity]),\n            ],\n            'can_edit' => auth()->check() && auth()->user()->can('update', $entity),\n            'tags' => $this->tags(),\n            'links' => $links,\n        ];\n\n        // Column-driven entity-type-specific data (standard types only — custom types have no child model)\n        if ($child) {\n            if ($this->hasColumn('title') && isset($child->title)) {\n                $data['title'] = $child->title;\n            }\n            if ($this->hasColumn('date') && isset($child->date)) {\n                $data['date'] = $child->date;\n            }\n            if ($this->hasColumn('price') && isset($child->price)) {\n                $data['price'] = $child->price;\n            }\n            if ($this->hasColumn('size') && isset($child->size)) {\n                $data['size'] = $child->size;\n            }\n            if ($this->hasColumn('weight') && isset($child->weight)) {\n                $data['weight'] = $child->weight;\n            }\n            if ($this->hasColumn('colour') && isset($child->colour)) {\n                $data['colour'] = $child->colour;\n            }\n            if ($this->hasColumn('sex') && isset($child->sex)) {\n                $data['sex'] = $child->sex;\n            }\n            if ($this->hasColumn('pronouns') && isset($child->pronouns)) {\n                $data['pronouns'] = $child->pronouns;\n            }\n            if ($this->hasColumn('is_auto_applied') && isset($child->is_auto_applied)) {\n                $data['is_auto_applied'] = (bool) $child->is_auto_applied;\n            }\n            if ($this->hasColumn('is_hidden') && isset($child->is_hidden)) {\n                $data['is_hidden'] = (bool) $child->is_hidden;\n            }\n            if ($this->hasColumn('is_enabled') && isset($child->is_enabled)) {\n                $data['is_enabled'] = (bool) $child->is_enabled;\n            }\n            if ($this->hasColumn('entity_type_name')) {\n                $data['entity_type_name'] = $child->entityType?->name() ?? null;\n            }\n            if ($this->hasColumn('location')) {\n                $data['location'] = $this->formatSingleEntity($child->location ?? null);\n            }\n            if ($this->hasColumn('character')) {\n                $data['character'] = $this->formatSingleEntity($child->character ?? null);\n            }\n            if ($this->hasColumn('author') && method_exists($child, 'author')) {\n                $data['author'] = $this->formatSingleEntity($child->author ?? null);\n            }\n            if ($this->hasColumn('instigator') && method_exists($child, 'instigator')) {\n                $data['instigator'] = $this->formatSingleEntity($child->instigator ?? null);\n            }\n            if ($this->hasColumn('families') && method_exists($child, 'characterFamilies')) {\n                $data['families'] = $this->formatRelatedEntities($child, 'characterFamilies', 'family');\n            }\n            if ($this->hasColumn('races') && method_exists($child, 'characterRaces')) {\n                $data['races'] = $this->formatRelatedEntities($child, 'characterRaces', 'race');\n            }\n            if ($this->hasColumn('creators') && method_exists($child, 'itemCreators')) {\n                $data['creators'] = $this->formatPivotEntities($child, 'itemCreators', 'creator');\n            }\n            // Count columns\n            if ($this->hasColumn('members_count') && isset($child->members_count)) {\n                $data['members_count'] = $child->members_count ?? 0;\n            }\n            if ($this->hasColumn('elements_count') && isset($child->elements_count)) {\n                $data['elements_count'] = $child->elements_count ?? 0;\n            }\n            if ($this->hasColumn('eras_count') && isset($child->eras_count)) {\n                $data['eras_count'] = $child->eras_count ?? 0;\n            }\n            if ($this->hasColumn('entities_count') && isset($child->entities_count)) {\n                $data['entities_count'] = $child->entities_count ?? 0;\n            }\n            if ($this->hasColumn('attributes_count')) {\n                $data['attributes_count'] = $entity->attributes_count ?? 0;\n            }\n\n            // Map explore link\n            if ($this->hasColumn('explore')) {\n                if ($child->isReal()) {\n                    $data['explore'] = ['url' => route('maps.explore', [$campaign, $child->id])];\n                } elseif (! $entity->hasImage()) {\n                    $data['explore'] = null;\n                } elseif ($child->isChunked() && $child->chunkingError()) {\n                    $data['explore'] = ['url' => null, 'status' => 'error'];\n                } elseif ($child->isChunked() && $child->chunkingRunning()) {\n                    $data['explore'] = ['url' => null, 'status' => 'running'];\n                } else {\n                    $data['explore'] = ['url' => route('maps.explore', [$campaign, $child->id])];\n                }\n            }\n\n            // Whiteboard draw link\n            if ($this->hasColumn('draw')) {\n                $data['draw'] = ['url' => route('whiteboards.draw', [$campaign, $child->id])];\n            }\n        }\n\n        // Calendar date (lives on entity, not child)\n        if ($this->hasColumn('calendar_date')) {\n            $data['calendar_date'] = $this->formatCalendarDate($entity);\n        }\n\n        // Status (lives on entity, not child)\n        if ($this->hasColumn('status')) {\n            $status = $entity->status;\n            if ($status) {\n                $status->setRelation('entityType', $entity->entityType);\n            }\n            $data['status'] = ($status && $status->icon) ? [\n                'icon' => $status->icon(),\n                'tooltip' => $status->name(),\n            ] : null;\n        }\n\n        // Parent entity link\n        if ($this->hasColumn('parent') && $parentEntity) {\n            $data['parent_entity'] = [\n                'id' => $parentEntity->id,\n                'name' => $parentEntity->name,\n                'url' => route('entities.show', [$campaign, $parentEntity]),\n            ];\n        }\n\n        // Entity locations (many-to-many)\n        if ($this->hasColumn('locations') && $entity->relationLoaded('locations')) {\n            $data['locations'] = $this->formatEntityLocations($entity);\n        }\n\n        // Children preview for grid avatar bubbles\n        if ($entity->relationLoaded('children')) {\n            $data['children_preview'] = $entity->children->take(3)->map(fn ($childEntity) => [\n                'id' => $childEntity->id,\n                'name' => $childEntity->name,\n                'image' => Avatar::entity($childEntity)->fallback()->size(40, 40)->thumbnail(),\n            ])->values()->toArray();\n        }\n\n        return $data;\n    }\n\n    protected function tags(): array\n    {\n        /** @var Entity $entity */\n        $entity = $this->resource;\n\n        $tags = [];\n        $campaign = CampaignLocalization::getCampaign();\n        foreach ($entity->visibleTags() as $tag) {\n            $tags[] = [\n                'id' => $tag->id,\n                'urls' => [\n                    'show' => route('entities.show', [$campaign, $tag->entity]),\n                ],\n                'name' => $tag->name,\n                'colour' => $tag->colourClass(),\n                'colour_style' => $tag->colourStyle(),\n                'shortname' => $tag->hasIcon()\n                    ? '<i class=\"' . e($tag->icon) . '\" aria-hidden=\"true\"></i>'\n                    : $tag->shortname(),\n            ];\n        }\n\n        return $tags;\n    }\n\n    protected function formatRelatedEntities(mixed $child, string $pivotRelation, string $entityRelation): array\n    {\n        if (! method_exists($child, $pivotRelation)) {\n            return [];\n        }\n\n        $items = [];\n        $campaign = CampaignLocalization::getCampaign();\n        foreach ($child->{$pivotRelation} as $pivot) {\n            $related = $pivot->{$entityRelation};\n            if ($related && $related->entity) {\n                $items[] = [\n                    'id' => $related->entity->id,\n                    'name' => $related->entity->name,\n                    'url' => route('entities.show', [$campaign, $related->entity]),\n                ];\n            }\n        }\n\n        return $items;\n    }\n\n    /**\n     * Format pivot relations where the related model is an Entity directly (e.g. ItemCreator->creator)\n     */\n    protected function formatPivotEntities(mixed $child, string $pivotRelation, string $entityRelation): array\n    {\n        if (! method_exists($child, $pivotRelation)) {\n            return [];\n        }\n\n        $items = [];\n        $campaign = CampaignLocalization::getCampaign();\n        foreach ($child->{$pivotRelation} as $pivot) {\n            $entity = $pivot->{$entityRelation};\n            if ($entity) {\n                $items[] = [\n                    'id' => $entity->id,\n                    'name' => $entity->name,\n                    'url' => route('entities.show', [$campaign, $entity]),\n                ];\n            }\n        }\n\n        return $items;\n    }\n\n    protected function formatSingleEntity(mixed $model): ?array\n    {\n        if (! $model) {\n            return null;\n        }\n\n        $campaign = CampaignLocalization::getCampaign();\n\n        // Some relations (e.g. Journal::author, Quest::instigator) already return an Entity directly\n        if ($model instanceof Entity) {\n            return [\n                'id' => $model->id,\n                'name' => $model->name,\n                'url' => route('entities.show', [$campaign, $model]),\n            ];\n        }\n\n        if (! $model->entity) {\n            return null;\n        }\n\n        return [\n            'id' => $model->entity->id,\n            'name' => $model->entity->name,\n            'url' => route('entities.show', [$campaign, $model->entity]),\n        ];\n    }\n\n    protected function formatCalendarDate(Entity $entity): ?array\n    {\n        if (! $entity->relationLoaded('calendarDate') || ! $entity->calendarDate) {\n            return null;\n        }\n\n        $reminder = $entity->calendarDate;\n        if (! $reminder->calendar || ! $reminder->calendar->entity) {\n            return null;\n        }\n\n        $campaign = CampaignLocalization::getCampaign();\n\n        return [\n            'date' => $reminder->readableDate(),\n            'url' => route('entities.show', [\n                $campaign,\n                $reminder->calendar->entity,\n                'month' => $reminder->month,\n                'year' => $reminder->year,\n            ]),\n        ];\n    }\n\n    protected function formatEntityLocations(Entity $entity): array\n    {\n        $items = [];\n        $campaign = CampaignLocalization::getCampaign();\n        foreach ($entity->locations as $location) {\n            if ($location->entity) {\n                $items[] = [\n                    'id' => $location->entity->id,\n                    'name' => $location->entity->name,\n                    'url' => route('entities.show', [$campaign, $location->entity]),\n                ];\n            }\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Entities/TemplateResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Entities;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Entity;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass TemplateResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var Entity $entity */\n        $entity = $this->resource;\n\n        $campaign = CampaignLocalization::getCampaign();\n\n        return [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'url' => route('entities.create', [$campaign, $entity->entityType, 'copy' => $entity, 'template' => true]),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Entity.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Facades\\Avatar;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\n\nclass Entity extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var \\App\\Models\\Entity $model */\n        $model = $this->resource;\n\n        if ($model->isMissingChild()) {\n            return ['error' => 'KA7: Entity #' . $model->id . ' missing child.'];\n        }\n\n        $url = $model->url();\n        $apiViewUrl = 'campaigns.' . $model->entityType->pluralCode() . '.show';\n\n        return [\n            'id' => $model->id,\n            'child_id' => $model->hasChild() ? $model->id : null,\n            'child_type' => $model->hasChild() ? $model->entityType->code : null,\n            'name' => $model->name,\n            'image' => Avatar::entity($model)->original(),\n            'image_thumb' => Avatar::entity($model)->size(40)->thumbnail(),\n            'has_custom_image' => ! empty($model->image_path) && ! empty($model->image),\n\n            'type' => $model->type,\n            'type_id' => $model->type_id,\n            'entity_type' => $model->entityType->code,\n            'tooltip' => $model->tooltip,\n            'url' => $model->url(),\n            'is_attributes_private' => $model->is_attributes_private,\n\n            'is_private' => (bool) $model->is_private,\n\n            'created_at' => $model->created_at,\n            'created_by' => $model->created_by,\n            'updated_at' => $model->updated_at,\n            'updated_by' => $model->updated_by,\n\n            'urls' => [\n                'view' => $url,\n                'api' => Route::has($apiViewUrl) ? route($apiViewUrl, [$model->campaign_id, $model->entity_id]) : null,\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityAbilityResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\EntityAbility;\nuse Illuminate\\Http\\Request;\n\nclass EntityAbilityResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var EntityAbility $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'visibility_id' => $model->visibility_id,\n            'charges' => $model->charges,\n            'ability_id' => $model->ability_id,\n            'position' => $model->position,\n            'note' => $model->note,\n            'created_at' => $model->created_at,\n            'created_by' => $model->created_by,\n            'updated_at' => $model->updated_at,\n            'updated_by' => $model->updated_by,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityAssetResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\EntityAsset;\nuse Illuminate\\Http\\Request;\n\nclass EntityAssetResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var EntityAsset $asset */\n        $asset = $this->resource;\n\n        $data = $this->onEntity([\n            'type_id' => $asset->type_id,\n            '_file' => $asset->isFile(),\n            '_link' => $asset->isLink(),\n            '_alias' => $asset->isAlias(),\n            'name' => $asset->name,\n            'metadata' => $asset->metadata,\n            'visibility_id' => $asset->visibility_id,\n            'is_pinned' => (bool) $asset->isPinned(),\n        ]);\n\n        if ($asset->isFile()) {\n            $data['_url'] = $asset->url();\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityChild.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Attribute;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Post;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass EntityChild extends JsonResource\n{\n    use ApiSync;\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array\n     */\n    public function entity(array $prepared = [])\n    {\n        /** @var MiscModel $model */\n        $model = $this->resource;\n        $merged = [\n            'id' => $model->id,\n\n            'is_private' => (bool) $model->is_private,\n            'entity_id' => $model->entity->id,\n\n            'created_at' => $model->created_at,\n            'created_by' => $model->entity->created_by,\n            'updated_at' => $model->updated_at,\n            'updated_by' => $model->entity->updated_by,\n        ];\n\n        $final = array_merge($prepared, $merged);\n        ksort($final);\n\n        return $final;\n    }\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array\n     */\n    public function onEntity(array $prepared = [])\n    {\n        /** @var Model|Attribute|mixed $model */\n        $model = $this->resource;\n        $merged = [\n            'id' => $model->id,\n\n            'is_private' => (bool) $model->is_private,\n            'entity_id' => $model->entity_id,\n\n            'created_at' => $model->created_at,\n            'created_by' => $model->created_by,\n            'updated_at' => $model->updated_at,\n            'updated_by' => $model->updated_by,\n        ];\n\n        if ($model instanceof Post) {\n            unset($merged['is_private']);\n        }\n\n        $final = array_merge($prepared, $merged);\n        ksort($final);\n\n        return $final;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityDefaultThumbnailResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Facades\\Img;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass EntityDefaultThumbnailResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        $resource = $this->resource;\n\n        return [\n            'entity_type' => $resource['type'],\n            'url' => Img::url($resource['path']),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityMentionResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\EntityMention;\nuse Illuminate\\Http\\Request;\n\nclass EntityMentionResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var EntityMention $model */\n        $model = $this->resource;\n\n        return [\n            'entity_id' => $model->entity_id,\n            'post_id' => $model->post_id,\n            'campaign_id' => $model->campaign_id,\n            'target_id' => $model->target_id,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityPermissionResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\CampaignPermission;\nuse Illuminate\\Http\\Request;\n\nclass EntityPermissionResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var CampaignPermission $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'campaign_role_id' => $model->campaign_role_id,\n            'user_id' => $model->user_id,\n            'action' => $model->action,\n            'access' => (bool) $model->access,\n            'created_at' => $model->created_at,\n            'updated_at' => $model->updated_at,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Facades\\Avatar;\nuse App\\Models\\Entity;\nuse App\\Models\\Item;\nuse App\\Models\\MiscModel;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Illuminate\\Support\\Facades\\Route;\n\nclass EntityResource extends JsonResource\n{\n    use ApiSync;\n\n    /** @var bool If the entity should come with related objects */\n    public bool $withRelated = false;\n\n    /** @var bool If the entity comes with the misc model */\n    public bool $withMisc = false;\n\n    /**\n     * Get related objects for this entity\n     */\n    public function withRelated(): self\n    {\n        $this->withRelated = true;\n\n        return $this;\n    }\n\n    public function withMisc(): self\n    {\n        $this->withMisc = true;\n\n        return $this;\n    }\n\n    /**\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Entity $entity */\n        $entity = $this->resource;\n        $url = $entity->url();\n        if ($entity->entityType->isCustom()) {\n            $apiViewUrl = 'campaigns.entities.show';\n        } else {\n            $apiViewUrl =\n                'campaigns.' . $entity->entityType->pluralCode() . '.show';\n        }\n\n        $data = [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'type' => $entity->entityType->code,\n            'type_field' => $entity->type,\n            'type_id' => $entity->type_id,\n            'module' => [\n                'id' => $entity->entityType->id,\n                'code' => $entity->entityType->code,\n                'singular' => $entity->entityType->name(),\n                'plural' => $entity->entityType->plural(),\n            ],\n            'tags' => $entity->tags->pluck('id')->toArray(),\n            'is_private' => (bool) $entity->is_private,\n            'is_template' => $entity->isTemplate(),\n            'campaign_id' => $entity->campaign_id,\n            'is_attributes_private' => (bool) $entity->is_attributes_private,\n            'status_id' => $entity->status_id,\n            'tooltip' => $entity->tooltip,\n            'header_image' => $entity->header_image,\n            'header_uuid' => $entity->header_uuid,\n            'image_uuid' => $entity->image_uuid,\n\n            'created_at' => $entity->created_at,\n            'created_by' => $entity->created_by,\n            'updated_at' => $entity->updated_at,\n            'updated_by' => $entity->updated_by,\n            'archived_at' => $entity->archived_at,\n\n            'urls' => [\n                'view' => $url,\n                'api' => Route::has($apiViewUrl)\n                    ? route($apiViewUrl, [\n                        $entity->campaign_id,\n                        $entity->entity_id,\n                    ])\n                    : null,\n            ],\n        ];\n\n        $data['parent_id'] = $entity->parent_id;\n\n        if ($entity->entityType->isCustom()) {\n            $data['entry'] = $entity->entry;\n            $data['entry_parsed'] = $entity->parsedEntry();\n            $data['locations'] = [];\n            foreach ($entity->locations as $loc) {\n                $data['locations'][] = $loc->id;\n            }\n        } else {\n            $data['child_id'] = $entity->entity_id;\n        }\n\n        if (request()->get('related', false)) {\n            $data['attributes'] = AttributeResource::collection(\n                $entity->attributes,\n            );\n            $data['posts'] = PostResource::collection($entity->posts);\n            $data['entity_events'] = ReminderResource::collection(\n                $entity->reminders,\n            );\n            $data['reminders'] = ReminderResource::collection(\n                $entity->reminders,\n            );\n            $data['relations'] = RelationResource::collection(\n                $entity->relationships,\n            );\n            $data['inventory'] = InventoryResource::collection(\n                $entity->inventories,\n            );\n            $data['entity_abilities'] = EntityAbilityResource::collection(\n                $entity->abilities,\n            );\n\n            // Children and Parents\n            if ($entity->ancestors) {\n                $ancestors = [];\n                foreach ($entity->ancestors as $ancestor) {\n                    $ancestors[] = $ancestor->id;\n                }\n                $data['parents'] = $ancestors;\n            }\n            if ($entity->children) {\n                $descendants = [];\n                foreach ($entity->children as $descendant) {\n                    $descendants[] = $descendant->id;\n                }\n                $data['children'] = $descendants;\n            }\n        }\n\n        if (\n            request()->get('related', false) ||\n            request()->get('image', false)\n        ) {\n            if ($entity->isMissingChild()) {\n                $data['child'] =\n                    'Invalid child, please contact us on Discord with the following: EntityResource for #' .\n                    $entity->id;\n            } else {\n                $image = ! empty($entity->image);\n                $data['child'] = [\n                    'image' => $image\n                        ? $entity->image->path\n                        : $entity->image_path,\n                    'image_full' => Avatar::entity($entity)->original(),\n                    'image_thumb' => Avatar::entity($entity)\n                        ->size(40)\n                        ->thumbnail(),\n                    'has_custom_image' => $image || ! empty($entity->image_path),\n                ];\n            }\n        }\n\n        // Get the actual model\n        if ($this->withMisc && $entity->entityType->isStandard()) {\n            $className =\n                \"App\\Http\\Resources\\\\\" .\n                ucfirst($entity->entityType->code) .\n                'Resource';\n            if (class_exists($className)) {\n                $entity->child->setRelation('entity', $entity);\n                $obj = new $className($entity->child);\n                $data['child'] = $obj;\n            } else {\n                $data['child'] = 'unknown child class ' . $className;\n            }\n        }\n\n        // Check for ?fields\n        $fields = request()->query('fields');\n        if ($fields) {\n            $fields = array_map('trim', explode(',', $fields));\n            $data = array_intersect_key($data, array_flip($fields));\n        }\n\n        return $data;\n    }\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array|string\n     */\n    public function entity(array $prepared = [])\n    {\n        /** @var mixed|MiscModel|Item $misc */\n        $misc = $this->resource;\n        if (! $misc->entity) {\n            return 'permission issue';\n        }\n\n        $galleryImage = $misc->entity->image;\n        $url = $misc->getLink();\n        $apiViewUrl =\n            'campaigns.' . $misc->entity->entityType->pluralCode() . '.show';\n\n        $merged = [\n            'id' => $misc->id,\n            'name' => $misc->entity->name,\n            'entry' => $misc->entity->hasEntry() ? $misc->entity->entry : null,\n            'entry_parsed' => $misc->entity->hasEntry()\n                ? $misc->entity->parsedEntry()\n                : null,\n            'tooltip' => $misc->entity->tooltip ?: null,\n            'type' => $misc->entity->type ?: null,\n            'image' => $misc->entity->image_path,\n            'focus_x' => $misc->entity->focus_x,\n            'focus_y' => $misc->entity->focus_y,\n\n            // Image\n            'image_full' => Avatar::entity($misc->entity)->original(),\n            'image_thumb' => Avatar::size(40)->fallback()->thumbnail(),\n            'has_custom_image' => ! empty($misc->entity->image_path) || ! empty($galleryImage),\n            'image_uuid' => $misc->entity->image\n                ? $misc->entity->image->id\n                : null,\n\n            // Header\n            'header_full' => $misc->entity->getHeaderUrl(),\n            'header_uuid' => $misc->entity->header\n                ? $misc->entity->header->id\n                : null,\n            'has_custom_header' => $misc->entity->hasHeaderImage(),\n\n            'is_private' => (bool) $misc->entity->is_private,\n            'is_template' => (bool) $misc->entity->isTemplate(),\n\n            'is_attributes_private' => (bool) $misc->entity->is_attributes_private,\n            'status_id' => $misc->entity->status_id,\n            'status' => CategoryStatusResource::make($misc->entity->status),\n\n            'entity_id' => $misc->entity->id,\n\n            //            'module' => [\n            //                'id' => $misc->entity->entityType->id,\n            //                'code' => $misc->entity->entityType->code,\n            //                'singular' => $misc->entity->entityType->name(),\n            //                'plural' => $misc->entity->entityType->plural(),\n            //            ],\n            'tags' => $misc->entity->tags()->pluck('tags.id')->toArray(),\n\n            'created_at' => $misc->entity->created_at,\n            'created_by' => $misc->entity->created_by,\n            'updated_at' => $misc->entity->updated_at,\n            'updated_by' => $misc->entity->updated_by,\n\n            'urls' => [\n                'view' => $url,\n                'api' => Route::has($apiViewUrl)\n                    ? route($apiViewUrl, [$misc->campaign_id, $misc->id])\n                    : null,\n            ],\n        ];\n\n        // Foreign elements\n        $attributes = $misc->getAttributes();\n        if (array_key_exists('location_id', $attributes)) {\n            $merged['location_id'] = $misc->location_id;\n        }\n        if (array_key_exists('character_id', $attributes)) {\n            $merged['character_id'] = $misc->character_id;\n        }\n\n        if (request()->get('related', false) || $this->withRelated) {\n            $merged['attributes'] = AttributeResource::collection(\n                $misc->entity->attributes,\n            );\n            $merged['posts'] = PostResource::collection($misc->entity->posts);\n            $merged['entity_events'] = ReminderResource::collection(\n                $misc->entity->reminders,\n            );\n            $merged['reminders'] = ReminderResource::collection(\n                $misc->entity->reminders,\n            );\n            $merged['relations'] = RelationResource::collection(\n                $misc->entity->relationships,\n            );\n            $merged['inventory'] = InventoryResource::collection(\n                $misc->entity->inventories,\n            );\n            $merged['entity_abilities'] = EntityAbilityResource::collection(\n                $misc->entity->abilities,\n            );\n            $merged['entity_assets'] = EntityAssetResource::collection(\n                $misc->entity->assets,\n            );\n\n            if ($misc->entity->ancestors) {\n                $ancestors = [];\n                foreach ($misc->entity->ancestors as $ancestor) {\n                    $ancestors[] = $ancestor->id;\n                }\n                $merged['parents'] = $ancestors;\n            }\n            if ($misc->entity->children) {\n                $descendants = [];\n                foreach ($misc->entity->children as $descendant) {\n                    $descendants[] = $descendant->entity_id;\n                }\n                $merged['children'] = $descendants;\n            }\n        }\n\n        $final = array_merge($merged, $prepared);\n\n        // Check for ?fields\n        $fields = request()->query('fields');\n        if ($fields) {\n            $fields = array_map('trim', explode(',', $fields));\n            $final = array_intersect_key($final, array_flip($fields));\n        }\n\n        // ksort($final);\n        return $final;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityTagResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\EntityTag;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass EntityTagResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var EntityTag $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->pivot->id, // @phpstan-ignore-line\n            'tag_id' => $model->id,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EntityTypeResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\EntityType;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass EntityTypeResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var EntityType $entityType */\n        $entityType = $this->resource;\n\n        return [\n            'id' => $entityType->id,\n            'code' => $entityType->code,\n            'singular' => $entityType->name(),\n            'plural' => $entityType->plural(),\n            'icon' => $entityType->icon,\n            'is_custom' => $entityType->isCustom(),\n            'is_enabled' => $entityType->isEnabled(),\n            'is_nested' => $entityType->isNested(),\n            'has_table' => $entityType->hasTable(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/EventResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Event;\nuse Illuminate\\Http\\Request;\n\nclass EventResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Event $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'date' => $model->date,\n            'locations' => $model->entity->locations->pluck('id'),\n            'calendar_id' => $model->entity->calendarDate?->calendar_id,\n            'calendar_year' => $model->entity->calendarDate?->year,\n            'calendar_month' => $model->entity->calendarDate?->month,\n            'calendar_day' => $model->entity->calendarDate?->day,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/FamilyResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Family;\nuse Illuminate\\Http\\Request;\n\nclass FamilyResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Family $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'members' => $model->members()->pluck('character_id')->toArray(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/FamilyTreeResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\FamilyTree;\nuse Illuminate\\Http\\Request;\n\nclass FamilyTreeResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var FamilyTree $model */\n        $model = $this->resource;\n\n        return $model->config ?? [];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Gallery/Tiptap/ImageResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Gallery\\Tiptap;\n\nuse App\\Models\\Image;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass ImageResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var Image $image */\n        $image = $this->resource;\n\n        return [\n            'src' => $image->url(),\n            'name' => $image->name,\n            'folder' => $image->isFolder(),\n            'uuid' => $image->id,\n            'icon' => 'fa-regular fa-folder',\n            'url' => $image->isFolder() ? route('gallery.tiptap', [$image->campaign, 'folder' => $image->id]) : null,\n            'thumbnail' => $image->getUrl(192, 144),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/GalleryFile.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass GalleryFile extends JsonResource\n{\n    use CampaignAware;\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var Image $file */\n        $file = $this->resource;\n\n        return [\n            'id' => $file->id,\n            'is_folder' => $file->isFolder(),\n            'name' => $file->name,\n            'thumbnail' => $file->hasThumbnail()\n                ? $file->getUrl(192, 144)\n                : null,\n            'original' => $file->hasThumbnail() ? $file->url() : null,\n            'thumbnails' => $file->isFolder() ? $this->thumbnails($file) : null,\n            'visibility_id' => $file->visibility_id,\n            'focus_x' => $file->focus_x,\n            'focus_y' => $file->focus_y,\n            'is_selected' => false,\n            'is_deleted' => false,\n            'open' => route('gallery.show', [$this->campaign, $file]),\n            'link' => $file->url(),\n            'ext' => $file->ext,\n            'size' => $file->niceSize(),\n            'creator' => $file->creator->name ?? __('crud.unknown'),\n            'api' => [\n                'show' => route('gallery.file.show', [$this->campaign, $file]),\n                'update' => route('gallery.file.update', [\n                    $this->campaign,\n                    $file,\n                ]),\n                'delete' => route('gallery.file.delete', [\n                    $this->campaign,\n                    $file,\n                ]),\n                'focus' => route('gallery.file.update-focus', [\n                    $this->campaign,\n                    $file,\n                ]),\n            ],\n        ];\n    }\n\n    protected function thumbnails(Image $file): array\n    {\n        $thumbnails = [];\n        foreach ($file->images as $subFile) {\n            if (! $subFile->hasThumbnail()) {\n                continue;\n            }\n            if (count($thumbnails) >= 3) {\n                return $thumbnails;\n            }\n            if ($subFile->isFolder()) {\n                continue;\n            }\n            $thumbnails[] = $subFile->getUrl(192, 144);\n        }\n\n        return $thumbnails;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/GalleryFileFull.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Image;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass GalleryFileFull extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var Image $file */\n        $file = $this->resource;\n\n        $mentions = [];\n        foreach ($file->inEntities() as $entity) {\n            $mentions[] = [\n                'url' => $entity->url(),\n                'name' => $entity->name,\n                'type' => 'image',\n            ];\n        }\n        foreach ($file->mentions as $mention) {\n            if ($mention->isPost() && $mention->post) {\n                $mentions[] = [\n                    'url' => $mention->entity->url() . '?#post-' . $mention->post_id,\n                    'name' => $mention->post->name,\n                    'type' => 'post',\n                ];\n            } else {\n                $mentions[] = [\n                    'url' => $mention->entity->url(),\n                    'name' => $mention->entity->name,\n                    'type' => 'entity',\n                ];\n            }\n        }\n\n        return [\n            'mentions' => $mentions,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ImageResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Facades\\Img;\nuse App\\Models\\Image;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass ImageResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Image $image */\n        $image = $this->resource;\n\n        return [\n            'id' => $image->id,\n            'name' => $image->name,\n            'is_folder' => (bool) $image->is_folder,\n            'folder_id' => $image->folder_id,\n\n            'path' => $image->is_folder ? null : Img::crop(300, 300)->url($image->path),\n\n            'ext' => $image->ext,\n            'size' => $image->size,\n\n            'created_at' => $image->created_at,\n            'created_by' => $image->created_by,\n            'updated_at' => $image->updated_at,\n\n            'visibility_id' => $image->visibility_id,\n\n            'focus_x' => $image->focus_x,\n            'focus_y' => $image->focus_y,\n\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/InventoryResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Inventory;\nuse Illuminate\\Http\\Request;\n\nclass InventoryResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Inventory $model */\n        $model = $this->resource;\n\n        return $this->onEntity([\n            'item_id' => $model->item_id,\n            'name' => $model->name,\n            'position' => $model->position,\n            'amount' => $model->amount,\n            'visibility_id' => $model->visibility_id,\n            'is_equipped' => (bool) $model->is_equipped,\n            'copy_item_entry' => (bool) $model->copy_item_entry,\n            'description' => $model->description,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ItemResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Item;\nuse Illuminate\\Http\\Request;\n\nclass ItemResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Item $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'price' => $model->price,\n            'size' => $model->size,\n            'weight' => $model->weight,\n            'creators' => $model->itemCreators->pluck('creator_id'),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/JournalResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Journal;\nuse Illuminate\\Http\\Request;\n\nclass JournalResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Journal $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'date' => $model->date,\n            'author' => $model->author,\n            'author_id' => $model->author_id,\n            'calendar_id' => $model->entity->calendarDate?->calendar_id,\n            'calendar_year' => $model->entity->calendarDate?->year,\n            'calendar_month' => $model->entity->calendarDate?->month,\n            'calendar_day' => $model->entity->calendarDate?->day,\n            'calendar_reminder_length' => $model->entity->calendarDate?->length,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/KankaCollection.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\ResourceCollection;\n\nclass KankaCollection extends ResourceCollection\n{\n    /**\n     * Transform the resource collection into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        return [\n            'data' => $this->collection,\n            // Add the sync object to the result for caching when the api was last called\n            'sync' => Carbon::now(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/LocationResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Location;\nuse Illuminate\\Http\\Request;\n\nclass LocationResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Location $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'title' => $model->title,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/MapGroupResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\MapGroup;\nuse Illuminate\\Http\\Request;\n\nclass MapGroupResource extends ModelResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var MapGroup $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'map_id' => $model->map_id,\n            'name' => $model->name,\n            'parent_id' => $model->parent_id,\n            'position' => (int) $model->position,\n            'visibility_id' => $model->visibility_id,\n            'is_shown' => (bool) $model->is_shown,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/MapLayerResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\MapLayer;\nuse Illuminate\\Http\\Request;\n\nclass MapLayerResource extends ModelResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var MapLayer $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'map_id' => (int) $model->map_id,\n            'name' => $model->name,\n            'position' => (int) $model->position,\n            'width' => (int) $model->width,\n            'height' => (int) $model->height,\n            'visibility_id' => $model->visibility_id,\n            'type_id' => (bool) $model->type_id,\n            'type' => (string) $model->typeName(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/MapMarkerResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\MapMarker;\nuse Illuminate\\Http\\Request;\n\nclass MapMarkerResource extends ModelResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var MapMarker $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'map_id' => $model->map_id,\n            'name' => $model->name,\n            'entity_id' => $model->entity_id,\n            'longitude' => $model->longitude,\n            'latitude' => $model->latitude,\n            'colour' => $model->colour,\n            'font_colour' => $model->font_colour,\n            'shape_id' => $model->shape_id,\n            'size_id' => $model->size_id,\n            'pin_size' => $model->pin_size,\n            'icon' => $model->icon,\n            'custom_icon' => $model->custom_icon,\n            'custom_shape' => $model->custom_shape,\n            'is_draggable' => (bool) $model->is_draggable,\n            'is_popupless' => (bool) $model->is_popupless,\n            'opacity' => $model->opacity,\n            'circle_radius' => $model->circle_radius,\n            'polygon_style' => $model->polygon_style,\n            'visibility_id' => $model->visibility_id,\n            'css' => $model->css,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/MapResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Map;\nuse Illuminate\\Http\\Request;\n\nclass MapResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Map $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'height' => $model->height,\n            'width' => $model->width,\n            'grid' => $model->grid,\n            'min_zoom' => $model->minZoom(),\n            'max_zoom' => $model->maxZoom(),\n            'initial_zoom' => $model->initialZoom(),\n            'center_marker_id' => $model->center_marker_id,\n            'center_x' => $model->center_x,\n            'center_y' => $model->center_y,\n            'layers' => MapLayerResource::collection($model->layers),\n            'groups' => MapGroupResource::collection($model->groups),\n            'is_real' => (bool) $model->is_real,\n            'config' => $model->config,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ModelResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Item;\nuse App\\Models\\MiscModel;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass ModelResource extends JsonResource\n{\n    use ApiSync;\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array\n     */\n    public function entity(array $prepared = [])\n    {\n        /** @var MiscModel|Entity|Item $model */\n        $model = $this->resource;\n        $merged = [\n            'id' => $model->id,\n            'is_private' => (bool) $model->is_private,\n\n            'created_at' => $model->created_at,\n            'created_by' => $model->created_by,\n            'updated_at' => $model->updated_at,\n            'updated_by' => $model->updated_by,\n        ];\n\n        $final = array_merge($prepared, $merged);\n        ksort($final);\n\n        return $final;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/NoteResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Note;\nuse Illuminate\\Http\\Request;\n\nclass NoteResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Note $model */\n        $model = $this->resource;\n\n        return $this->entity([\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/OrganisationMemberResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\OrganisationMember;\nuse Illuminate\\Http\\Request;\n\nclass OrganisationMemberResource extends ModelResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var OrganisationMember $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'role' => $model->role,\n            'organisation_id' => $model->organisation_id,\n            'character_id' => $model->character_id,\n            'pin_id' => $model->pin_id,\n            'status_id' => $model->status_id,\n            'parent_id' => $model->parent_id,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/OrganisationResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Organisation;\nuse Illuminate\\Http\\Request;\n\nclass OrganisationResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Organisation $model */\n        $model = $this->resource;\n        $locationIds = $model->entity->locations->pluck('id');\n\n        return $this->entity([\n            'members' => OrganisationMemberResource::collection($model->members()->has('character')->with('character')->get()),\n            'locations' => $locationIds,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/PostLayoutResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\PostLayout;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass PostLayoutResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var PostLayout $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'code' => $model->code,\n            'entity_type_id' => $model->entity_type_id,\n            'config' => $model->config,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/PostPermissionResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\PostPermission;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass PostPermissionResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var PostPermission $model */\n        $model = $this->resource;\n\n        return [\n            'user_id' => $model->user_id,\n            'role_id' => $model->role_id,\n            'permission' => $model->permission,\n            'permission-text' => $model->permText(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/PostResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Post;\nuse Illuminate\\Http\\Request;\n\nclass PostResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Post $model */\n        $model = $this->resource;\n\n        return $this->onEntity([\n            'name' => $model->name,\n            'visibility_id' => (int) $model->visibility_id->value,\n            'entry' => $model->entry,\n            'entry_parsed' => $model->parsedEntry(),\n            //            'is_pinned' => (bool) $this->is_pinned,\n            'position' => $model->position,\n            'settings' => $model->settings,\n            'permissions' => PostPermissionResource::collection($model->permissions),\n            'layout_id' => $model->layout_id,\n            'is_template' => $model->isTemplate(),\n            'tags' => $model->tags()->pluck('tags.id')->toArray(),\n            'calendar_id' => $model->calendarDate?->calendar_id,\n            'calendar_year' => $model->calendarDate?->year,\n            'calendar_month' => $model->calendarDate?->month,\n            'calendar_day' => $model->calendarDate?->day,\n            'calendar_reminder_length' => $model->calendarDate?->length,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ProfileResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Facades\\Img;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass ProfileResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var User $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'name' => $model->name,\n            'avatar' => $model->hasAvatar() ? Img::resetCrop()->url($model->avatar) : null,\n            'avatar_thumb' => $model->hasAvatar() ? $model->getAvatarUrl() : null,\n            'locale' => $model->locale,\n            'timezone' => $model->timezone,\n            'date_format' => $model->dateformat,\n            'default_pagination' => $model->pagination,\n            'last_campaign_id' => $model->last_campaign_id,\n            'is_patreon' => $model->isSubscriber(),\n            'is_subscriber' => $model->isSubscriber(),\n            'rate_limit' => $model->rate_limit,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Public/CampaignResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Public;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Illuminate\\Support\\Number;\n\nclass CampaignResource extends JsonResource\n{\n    public function toArray($request)\n    {\n        /** @var Campaign $campaign */\n        $campaign = $this->resource;\n\n        return [\n            'id' => $campaign->id,\n            'thumb' => $campaign->image ? $campaign->thumbnail(320, 240) : 'https://th.kanka.io/zzKcBpijSBvm4rPWdzRpI82pTNQ=/320x240/smart/src/app/backgrounds/mountain-background-medium.jpg',\n            'name' => $campaign->name,\n            'justify' => $campaign->spotlight?->url,\n            'link' => route('dashboard', $campaign),\n            'followers' => Number::format($campaign->follower()),\n            'entities' => Number::format($campaign->visible_entity_count),\n            'locale' => $campaign->locale,\n            'system' => $campaign->getSystems(),\n            'is_open' => $campaign->isOpen(),\n            'is_prioritised' => (bool) $campaign->is_prioritised,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/QuestElementResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\QuestElement;\nuse Illuminate\\Http\\Request;\n\nclass QuestElementResource extends ModelResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var QuestElement $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'entity_id' => $model->entity_id,\n            'name' => $model->name,\n            'entry' => $model->entry,\n            'entry_parsed' => ! empty($model->entry) ? $model->parsedEntry() : null,\n            'copy_entity_entry' => (bool) $model->copy_entity_entry,\n            'colour' => $model->colour,\n            'role' => $model->role,\n            'visibility_id' => $model->visibility_id,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/QuestResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Quest;\nuse Illuminate\\Http\\Request;\n\nclass QuestResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Quest $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'date' => $model->date,\n            'instigator_id' => $model->instigator_id,\n            'location_id' => $model->location_id,\n            'calendar_id' => $model->entity->calendarDate?->calendar_id,\n            'calendar_year' => $model->entity->calendarDate?->year,\n            'calendar_month' => $model->entity->calendarDate?->month,\n            'calendar_day' => $model->entity->calendarDate?->day,\n            'calendar_reminder_length' => $model->entity->calendarDate?->length,\n            'elements_count' => $model->elements->count(),\n            'elements' => QuestElementResource::collection($model->elements),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/RaceResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Race;\nuse Illuminate\\Http\\Request;\n\nclass RaceResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Race $model */\n        $model = $this->resource;\n        $locationIds = $model->entity->locations->pluck('id');\n\n        return $this->entity([\n            'locations' => $locationIds,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/RelationResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Relation;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass RelationResource extends JsonResource\n{\n    use ApiSync;\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Relation $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'owner_id' => $model->owner_id,\n            'target_id' => $model->target_id,\n            'relation' => $model->relation,\n            'attitude' => $model->attitude,\n            'colour' => $model->colour,\n            // 'is_private' => (bool) $this->is_private,\n            'visibility_id' => $model->visibility_id,\n            'is_star' => (bool) $model->isPinned(),\n            'is_pinned' => (bool) $model->isPinned(),\n            'mirror_id' => $model->mirror_id,\n            'created_at' => $model->created_at,\n            'created_by' => $model->created_by,\n            'updated_at' => $model->updated_at,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/ReminderResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Reminder;\nuse Illuminate\\Http\\Request;\n\nclass ReminderResource extends EntityChild\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Reminder $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'remindable_id' => $model->remindable_id,\n            'remindable_type' => $model->remindable_type,\n            'calendar_id' => $model->calendar_id,\n            'date' => $model->date(),\n            'day' => $model->day,\n            'month' => $model->month,\n            'year' => $model->year,\n            'length' => $model->length,\n            'comment' => $model->comment,\n            'is_recurring' => (bool) $model->is_recurring,\n            'recurring_until' => $model->recurring_until,\n            'recurring_periodicity' => $model->recurring_periodicity,\n            'colour' => $model->colour,\n            'type_id' => $model->type_id,\n            'visibility_id' => $model->visibility_id,\n\n            'created_at' => $model->created_at,\n            'created_by' => $model->created_by,\n            'updated_at' => $model->updated_at,\n            'updated_by' => $model->updated_by,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/TagResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Tag;\nuse Illuminate\\Http\\Request;\n\nclass TagResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Tag $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'colour' => $model->colour,\n            'icon' => $model->icon,\n            'entities' => $model->entities()->distinct()->pluck('entities.id')->toArray(),\n            'is_auto_applied' => (bool) $model->is_auto_applied,\n            'is_hidden' => (bool) $model->is_hidden,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/TimelineElementResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\TimelineElement;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass TimelineElementResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var TimelineElement $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'era_id' => $model->era_id,\n            'timeline_id' => $model->timeline_id,\n            'entity_id' => $model->entity_id,\n            'name' => $model->name,\n            'entry' => $model->entry,\n            'entry_parsed' => $model->parsedEntry(),\n            'date' => $model->date,\n            'colour' => $model->colour,\n            'position' => $model->position,\n            'visibility_id' => $model->visibility_id,\n            'icon' => $model->icon,\n            'is_collapsed' => $model->collapsed(),\n            'use_entity_entry' => $model->use_entity_entry,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/TimelineEraResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\TimelineEra;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass TimelineEraResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var TimelineEra $era */\n        $era = $this->resource;\n\n        return [\n            'id' => $era->id,\n            'name' => $era->name,\n            'abbreviation' => $era->abbreviation,\n            'start_year' => $era->start_year,\n            'entry' => $era->entry,\n            'entry_parsed' => $era->parsedEntry(),\n            'end_year' => $era->end_year,\n            'elements' => $era->elements ? TimelineElementResource::collection($era->elements) : [],\n            'is_collapsed' => $era->collapsed(),\n            'position' => $era->position,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/TimelineResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Timeline;\nuse Illuminate\\Http\\Request;\n\nclass TimelineResource extends EntityResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Timeline $model */\n        $model = $this->resource;\n\n        return $this->entity([\n            'eras' => TimelineEraResource::collection($model->eras()->with('elements')->get()),\n            'revert_order' => $model->revert_order,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/UserResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass UserResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var User $user */\n        $user = $this->resource;\n\n        $data = [\n            'id' => $user->id,\n            'name' => $user->name,\n            'avatar' => $user->hasAvatar() ? $user->getAvatarUrl() : null,\n            'password' => 'hihi',\n        ];\n\n        $campaign = CampaignLocalization::getCampaign();\n        if ($campaign) {\n            $roles = $user->campaignRoles->where('campaign_id', $campaign->id);\n            $data['role'] = CampaignUserRoleResource::collection($roles);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/VisibilityResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\Visibility;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass VisibilityResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @param  Request  $request\n     * @return array\n     */\n    public function toArray($request)\n    {\n        /** @var Visibility $model */\n        $model = $this->resource;\n\n        return [\n            'id' => $model->id,\n            'code' => $model->code,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/VoteResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse App\\Models\\CommunityVote;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass VoteResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var CommunityVote $model */\n        $model = $this->resource;\n\n        $data = [\n            'id' => $model->id,\n            'name' => $model->name,\n            'excerpt' => $model->excerpt,\n            'content' => $model->content,\n            'options' => $model->options(),\n            'voting' => $model->isVoting(),\n            'slug' => $model->getSlug(),\n            'published' => $model->visible_at->isoFormat('MMMM D, Y'),\n            'until' => $model->published_at->isoFormat('MMMM D, Y'),\n            'valid_ballots' => $model->ballots->count(),\n        ];\n\n        $ballots = [];\n        foreach ($model->options() as $key => $text) {\n            $ballots[$key] = $model->ballotWidth($key);\n        }\n        $data['ballots'] = $ballots;\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Web/EntityResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Web;\n\nuse App\\Facades\\Avatar;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass EntityResource extends JsonResource\n{\n    use CampaignAware;\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var Entity $entity */\n        $entity = $this->resource;\n        if (! isset($this->campaign)) {\n            dd($this);\n        }\n\n        return [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'image' => Avatar::entity($entity)->size(192)->fallback()->thumbnail(),\n            'link' => route('entities.show', [$this->campaign, $entity]),\n            'tooltip' => route('entities.tooltip', [$this->campaign, $entity]),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Whiteboards/EntityResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Whiteboards;\n\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass EntityResource extends JsonResource\n{\n    use CampaignAware;\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var Entity $entity */\n        $entity = $this->resource;\n\n        return [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'link' => $entity->url(),\n            'preview' => route('entities.tooltip', [$this->campaign, $entity]),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Whiteboards/ShapeResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Whiteboards;\n\nuse App\\Models\\WhiteboardShape;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Illuminate\\Support\\Arr;\n\nclass ShapeResource extends JsonResource\n{\n    const SCALE = 1000;\n\n    const ROT_SCALE = 1_000_000;\n\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var WhiteboardShape $shape */\n        $shape = $this->resource;\n        $campaign = $shape->whiteboard->campaign;\n        $whiteboard = $shape->whiteboard;\n\n        $data = [\n            'id' => $shape->id,\n            'type' => $shape->type,\n            'x' => $shape->x / self::SCALE,\n            'y' => $shape->y / self::SCALE,\n            'width' => $shape->width / self::SCALE,\n            'height' => $shape->height / self::SCALE,\n            'rotation' => $shape->rotation / self::ROT_SCALE,\n            'is_locked' => (bool) $shape->is_locked,\n            'z_index' => $shape->z_index,\n            'fill' => Arr::get($shape->shape, 'fill'),\n\n            'urls' => [\n                'edit' => route('whiteboards.shapes.update', [$campaign, $whiteboard, $shape]),\n                'delete' => route('whiteboards.shapes.delete', [$campaign, $whiteboard, $shape]),\n                'stroke' => route('whiteboards.shapes.stroke', [$campaign, $whiteboard, $shape]),\n            ],\n        ];\n\n        if ($shape->isCircle()) {\n            $data['radius'] = $shape->width / self::SCALE / 2;\n        }\n        if ($shape->isText()) {\n            $data['text'] = Arr::get($shape->shape, 'text');\n            $data['fontSize'] = Arr::get($shape->shape, 'fontSize');\n        }\n        if ($shape->isImage()) {\n            $data['uuid'] = Arr::get($shape->shape, 'uuid');\n        }\n        if ($shape->isEntity()) {\n            $data['entity'] = Arr::get($shape->shape, 'entity_id');\n        }\n        if ($shape->isDrawing()) {\n            $data['children'] = StrokeResource::collection($shape->strokes);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/Whiteboards/StrokeResource.php",
    "content": "<?php\n\nnamespace App\\Http\\Resources\\Whiteboards;\n\nuse App\\Models\\WhiteboardStroke;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass StrokeResource extends JsonResource\n{\n    /**\n     * Transform the resource into an array.\n     *\n     * @return array<string, mixed>\n     */\n    public function toArray(Request $request): array\n    {\n        /** @var WhiteboardStroke $stroke */\n        $stroke = $this->resource;\n\n        return [\n            'id' => $stroke->id,\n            'fill' => $stroke->color,\n            'points' => $stroke->unpack(),\n            'strokeWidth' => $stroke->width,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Validators/HashValidator.php",
    "content": "<?php\n\nnamespace App\\Http\\Validators;\n\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Validation\\Validator;\n\nclass HashValidator extends Validator\n{\n    /**\n     * @param  string  $attribute\n     * @param  string  $value\n     * @param  array  $parameters\n     */\n    public function validateHash($attribute, $value, $parameters)\n    {\n        return Hash::check($value, $parameters[0]);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/CalendarsClearElapsed.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Calendar;\nuse App\\Models\\Reminder;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CalendarsClearElapsed implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public Calendar $calendar;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(Calendar $calendar)\n    {\n        $this->calendar = $calendar;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $model = new Reminder;\n        DB::update(\n            'UPDATE ' . $model->getTable() . ' SET elapsed = NULL ' .\n            'WHERE calendar_id = \\'' . $this->calendar->id . '\\''\n        );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/CampaignRoleUserJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\CampaignRoleUser;\nuse App\\Notifications\\Header;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass CampaignRoleUserJob\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(\n        public CampaignRoleUser $campaignRoleUser,\n        public bool $new = true\n    ) {}\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        // If the role was deleted, don't notify anyone\n        // @phpstan-ignore-next-line\n        if (empty($this->campaignRoleUser) || empty($this->campaignRoleUser->campaignRole)) {\n            Log::info('no role found', [$this->campaignRoleUser]);\n\n            return;\n        }\n\n        $notification = new Header(\n            'campaign.role.' . ($this->new ? 'add' : 'remove'),\n            'user',\n            'success',\n            [\n                'role' => e($this->campaignRoleUser->campaignRole->name),\n                'campaign' => e($this->campaignRoleUser->campaignRole->campaign->name),\n                'link' => route('dashboard', ['campaign' => $this->campaignRoleUser->campaignRole->campaign->id]),\n            ]\n        );\n\n        $this->campaignRoleUser->user->notify($notification);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Campaigns/Delete.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Delete implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $campaign;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Campaign $campaign)\n    {\n        $this->campaign = $campaign->id;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        /** @var Campaign|null $campaign */\n        $campaign = Campaign::find($this->campaign);\n        if (! $campaign) {\n            return;\n        }\n        $campaign->forceDelete();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Campaigns/Export.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Campaigns;\n\nuse App\\Enums\\CampaignExportStatus;\nuse App\\Jobs\\FileCleanup;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignExport;\nuse App\\Models\\User;\nuse App\\Services\\Campaign\\ExportService;\nuse Exception;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Throwable;\n\nclass Export implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    protected int $campaignId;\n\n    protected int $userId;\n\n    protected int $campaignExportId;\n\n    /**\n     * CampaignExport constructor.\n     */\n    public function __construct(Campaign $campaign, User $user, CampaignExport $campaignExport)\n    {\n        $this->campaignId = $campaign->id;\n        $this->userId = $user->id;\n        $this->campaignExportId = $campaignExport->id;\n    }\n\n    /**\n     * Execute the job\n     *\n     * @throws Exception\n     */\n    public function handle()\n    {\n        Log::info('Campaign export', ['init', 'id' => $this->campaignExportId]);\n        $campaignExport = CampaignExport::find($this->campaignExportId);\n        if (! $campaignExport) {\n            Log::info('Campaign export', ['empty', 'id' => $this->campaignExportId]);\n\n            return 0;\n        }\n        Log::info('Campaign export', ['running', 'id' => $this->campaignExportId]);\n        $campaignExport->update(['status' => CampaignExportStatus::running]);\n        /** @var Campaign|null $campaign */\n        $campaign = Campaign::find($this->campaignId);\n        if (! $campaign) {\n            return 0;\n        }\n\n        /** @var User|null $user */\n        $user = User::find($this->userId);\n        if (! $user) {\n            return 0;\n        }\n        $isMarkdown = false;\n        if ($campaignExport->type == 2) {\n            $isMarkdown = true;\n        }\n        /** @var ExportService $service */\n        $service = app()->make(ExportService::class);\n        $service\n            ->markdown($isMarkdown)\n            ->user($user)\n            ->campaign($campaign)\n            ->log($campaignExport)\n            ->export();\n\n        // Don't delete in \"sync\" mode as there is no delay.\n        $queue = config('queue.default');\n        if ($queue !== 'sync') {\n            FileCleanup::dispatch($service->exportPath())\n                ->delay(now()->addHours(config('limits.campaigns.export')));\n        }\n\n        return 1;\n    }\n\n    public function failed(Throwable $exception)\n    {\n        $campaignExport = CampaignExport::find($this->campaignExportId);\n        if (! $campaignExport) {\n            return;\n        }\n        $campaignExport->update(['status' => CampaignExportStatus::failed]);\n        // Set the campaign export date to null so that the user can try again.\n        // If it failed once, trying again won't help, but this might motivate\n        // them to report the error.\n        /** @var Campaign|null $campaign */\n        $campaign = Campaign::find($this->campaignId);\n        if (! $campaign) {\n            return;\n        }\n\n        /** @var User|null $user */\n        $user = User::find($this->userId);\n        if (! $user) {\n            return;\n        }\n\n        /** @var ExportService $service */\n        $service = app()->make(ExportService::class);\n        $service\n            ->user($user)\n            ->campaign($campaign)\n            ->fail();\n\n        // Sentry will handle the rest\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Campaigns/Hide.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\Notifications\\HideService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass Hide implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $campaign;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Campaign $campaign)\n    {\n        $this->campaign = $campaign->id;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        /** @var HideService $service */\n        $service = app()->make(HideService::class);\n        $campaign = Campaign::find($this->campaign);\n        if (! $campaign) {\n            // Campaign wasn't found\n            Log::warning('Hide Campaign: unknown #' . $this->campaign . '.');\n        }\n        $service->campaign($campaign)->notify();\n\n        Log::info('Campaign #' . $this->campaign . ' hidden (job)');\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Campaigns/Import.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Campaigns;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Models\\CampaignImport;\nuse App\\Services\\Campaign\\Import\\ImportService;\nuse App\\Services\\CsvValidatorService;\nuse Exception;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Throwable;\n\nclass Import implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    protected int $jobID;\n\n    /**\n     * CampaignExport constructor.\n     */\n    public function __construct(CampaignImport $campaignImport)\n    {\n        $this->jobID = $campaignImport->id;\n    }\n\n    /**\n     * Execute the job\n     *\n     * @throws Exception\n     */\n    public function handle()\n    {\n        Log::info('Campaign import', ['init', 'id' => $this->jobID]);\n        /** @var CampaignImport $job */\n        $job = CampaignImport::find($this->jobID);\n        if (! $job) {\n            Log::info('Campaign import', ['empty', 'id' => $this->jobID]);\n\n            return 0;\n        }\n        if (! $job->campaign || ! $job->user) {\n            Log::info('Campaign import', ['empty_campaign_or_user', 'id' => $this->jobID]);\n\n            return 0;\n        }\n        Log::info('Campaign import', ['running', 'id' => $this->jobID]);\n        $job->update(['status_id' => CampaignImportStatus::RUNNING]);\n\n        if ($job->isCsv()) {\n            Log::info('Campaign import', ['csv', 'id' => $this->jobID]);\n            $service = app()->make(CsvValidatorService::class)\n                ->job($job)\n                ->run();\n        } else {\n            Log::info('Campaign import', ['backup import', 'id' => $this->jobID]);\n            /** @var ImportService $service */\n            $service = app()->make(ImportService::class);\n            $service\n                ->job($job)\n                ->run();\n        }\n\n        return 1;\n    }\n\n    public function failed(Throwable $exception)\n    {\n        $job = CampaignImport::find($this->jobID);\n        if (! $job) {\n            Log::info('Campaign import', ['empty', 'id' => $this->jobID]);\n\n            return 0;\n        }\n\n        /** @var ImportService $service */\n        $service = app()->make(ImportService::class);\n        $service\n            ->job($job)\n            ->fail($exception);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Campaigns/ImportCsv.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Campaigns;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Models\\CampaignImport;\nuse App\\Models\\EntityType;\nuse App\\Services\\CsvImportService;\nuse Exception;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Throwable;\n\nclass ImportCsv implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    protected int $jobID;\n\n    protected int $userId;\n\n    protected int $entityTypeId;\n\n    protected array $columnMap;\n\n    protected array $tagIds;\n\n    protected array $appearances;\n\n    protected array $personalities;\n\n    /**\n     * CampaignExport constructor.\n     */\n    public function __construct(CampaignImport $campaignImport, int $userId, int $entityTypeId, array $columnMap, array $tagIds, array $appearances, array $personalities)\n    {\n        $this->jobID = $campaignImport->id;\n        $this->userId = $userId;\n        $this->columnMap = $columnMap;\n        $this->tagIds = $tagIds;\n        $this->entityTypeId = $entityTypeId;\n        $this->appearances = $appearances;\n        $this->personalities = $personalities;\n    }\n\n    /**\n     * Execute the job\n     *\n     * @throws Exception\n     */\n    public function handle()\n    {\n        Log::info('CSV campaign import', ['init', 'id' => $this->jobID]);\n        /** @var CampaignImport $job */\n        $job = CampaignImport::find($this->jobID);\n\n        $entityType = EntityType::inCampaign($job->campaign)->where('id', $this->entityTypeId)->first();\n\n        $logs = $job->logs;\n        if (! $job) {\n            Log::info('CSV campaign import', ['empty', 'id' => $this->jobID]);\n\n            return 0;\n        }\n\n        if (! $job->campaign || ! $job->user || ! $entityType) {\n            $logs[] = 'Missing campaign, user or entity type';\n\n            Log::info('Campaign import', ['empty_campaign_or_user', 'id' => $this->jobID]);\n            $job->update(['status_id' => CampaignImportStatus::FAILED, 'logs' => $logs]);\n\n            return 0;\n        }\n\n        $logs[] = 'Running csv import';\n        Log::info('CSV campaign import', ['running', 'id' => $this->jobID]);\n        $job->update(['status_id' => CampaignImportStatus::RUNNING, 'logs' => $logs]);\n\n        $service = app()->make(CsvImportService::class)\n            ->job($job)\n            ->campaign($job->campaign)\n            ->user($job->user)\n            ->entityType($entityType)\n            ->fieldMap($this->columnMap)\n            ->traits($this->appearances, $this->personalities)\n            ->tags($this->tagIds)\n            ->run();\n\n        return 1;\n    }\n\n    public function failed(Throwable $exception)\n    {\n        $job = CampaignImport::find($this->jobID);\n        if (! $job) {\n            Log::info('Campaign import', ['empty', 'id' => $this->jobID]);\n\n            return 0;\n        }\n\n        /** @var CsvImportService $service */\n        $service = app()->make(CsvImportService::class);\n        $service\n            ->job($job)\n            ->fail($exception);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Campaigns/NotifyAdmins.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Services\\Campaign\\NotificationService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass NotifyAdmins implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $campaign;\n\n    protected string $key;\n\n    protected string $icon;\n\n    protected string $colour;\n\n    protected array $params;\n\n    public function __construct(\n        Campaign $campaign,\n        string $key,\n        string $icon,\n        string $colour,\n        array $params\n    ) {\n        $this->campaign = $campaign->id;\n        $this->key = $key;\n        $this->icon = $icon;\n        $this->colour = $colour;\n        $this->params = $params;\n    }\n\n    public function handle()\n    {\n        /** @var NotificationService $service */\n        $service = app()->make(NotificationService::class);\n\n        /** @var Campaign|null $campaign */\n        $campaign = Campaign::find($this->campaign);\n        if (! $campaign) {\n            Log::warning('Notify campaign: unknown #' . $this->campaign . '.');\n        }\n\n        $service\n            ->campaign($campaign)\n            ->notify($this->key, $this->icon, $this->colour, $this->params);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Campaigns/Populate.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Services\\StarterService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Populate implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $campaign;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Campaign $campaign)\n    {\n        $this->campaign = $campaign->id;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        /** @var Campaign|null $campaign */\n        $campaign = Campaign::find($this->campaign);\n        if (! $campaign) {\n            return;\n        }\n\n        /** @var StarterService $service */\n        $service = app()->make(StarterService::class);\n\n        $service\n            ->campaign($campaign)\n            ->bind()\n            ->create();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/ChunkMapJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Map;\nuse App\\Services\\Maps\\ChunkingService;\nuse Exception;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass ChunkMapJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public $tries = 1;\n\n    protected $mapID;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(int $mapID)\n    {\n        $this->mapID = $mapID;\n        $this->onConnection('heavy');\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        /** @var ChunkingService $service */\n        $service = app()->make(ChunkingService::class);\n\n        /** @var ?Map $map */\n        $map = Map::find($this->mapID);\n        if (empty($map)) {\n            Log::error('Chunking map: unknown map #' . $this->mapID);\n\n            return;\n        }\n\n        $now = Carbon::now();\n        Log::info('Chunking map #' . $this->mapID);\n        try {\n            $service\n                ->map($map)\n                ->chunk();\n\n            $elapsed = Carbon::now()->diffInMinutes($now);\n            Log::info('Chunked map #' . $this->mapID . ' in ' . $elapsed . ' minutes.');\n        } catch (Exception $e) {\n            throw $e;\n        }\n    }\n\n    public function failed(Exception $exception)\n    {\n        /** @var ?Map $map */\n        $map = Map::find($this->mapID);\n        if (empty($map)) {\n            Log::error('No map #' . $this->mapID);\n\n            return;\n        }\n\n        if ($map->chunkingError()) {\n            Log::error('Already error #' . $this->mapID);\n\n            return;\n        }\n        $map->chunking_status = Map::CHUNKING_ERROR;\n        $map->saveQuietly();\n\n        Log::error('Saved error for #' . $this->mapID);\n\n        throw $exception;\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Copyright/DeleteCampaignImage.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Copyright;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass DeleteCampaignImage implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected $campaignId;\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        $this->deleteImage();\n\n        Log::info('Removed image from campaign #' . $this->campaignId . ' for copyright reasons');\n    }\n\n    private function deleteImage()\n    {\n        $campaign = Campaign::find($this->campaignId);\n\n        if (empty($campaign) || ! (Storage::exists($campaign->image))) {\n            // Image was deleted\n            return;\n        }\n        Storage::delete($campaign->image);\n        $campaign->image = null;\n        $campaign->saveQuietly();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Copyright/DeleteEntityImage.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Copyright;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Images;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Campaign\\Notifications\\ImageRemoveService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass DeleteEntityImage implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected $entityId;\n\n    protected $removeHeader;\n\n    protected $removeImage;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct($data)\n    {\n        $this->entityId = $data['entity'];\n        $this->removeHeader = $data['remove_header'];\n        $this->removeImage = $data['remove_image'];\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        // Most basic setup, the child has an image, otherwise, might have a gallery image\n        if ($this->removeImage) {\n            $this->deleteImage('image');\n        }\n        if ($this->removeHeader) {\n            $this->deleteImage('header_image');\n        }\n        Log::info('Removed image or header from entity #' . $this->entityId . ' for copyright reasons');\n    }\n\n    private function deleteImage(string $field)\n    {\n        /** @var Entity $entity */\n        $entity = Entity::find($this->entityId);\n\n        if (empty($entity) || empty($entity->child)) {\n            // Entity was deleted\n            return;\n        }\n        /** @var ImageRemoveService $service */\n        $service = app()->make(ImageRemoveService::class);\n        $campaign = Campaign::find($entity->campaign_id);\n\n        $service->campaign($campaign)->entity($entity)->notify();\n\n        if ($campaign->superboosted() && $entity->image && $field == 'image') {\n            $entity->image->delete();\n        } elseif (! empty($entity->image_path) && $field == 'image') {\n            Images::model($entity)->field($field)->cleanup();\n            $entity->updateQuietly(['image_path' => '']);\n        }\n\n        if ($campaign->superboosted() && $entity->header && $field == 'header_image') {\n            $entity->header->delete();\n        } elseif (! empty($entity->header_image) && $field == 'header_image') {\n            Images::model($entity)->field($field)->cleanup();\n            $entity->update(['header_image' => $entity->header_image]);\n        }\n\n        // Whenever an entity is updated, we always want to re-calculate the cached image.\n        Avatar::entity($entity)->forget();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Copyright/DeleteUserImage.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Copyright;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass DeleteUserImage implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected $userId;\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        $this->deleteImage();\n\n        Log::info('Removed image from user #' . $this->userId . ' for copyright reasons');\n    }\n\n    private function deleteImage()\n    {\n        $user = User::where('id', $this->userId)->first();\n\n        if (empty($user) || ! (Storage::exists($user->avatar))) {\n            // Image was deleted\n            return;\n        }\n        Storage::delete($user->avatar);\n        $user->avatar = null;\n        $user->saveQuietly();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/DeletedCampaignCleanupJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Meilisearch\\Client;\n\nclass DeletedCampaignCleanupJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    /** @var int Campaign id */\n    public $campaignId;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Campaign $campaign)\n    {\n        $this->campaignId = $campaign->id;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        if (empty($this->campaignId)) {\n            // We dont want to delete everything.\n            return;\n        }\n\n        // Delete leftover images\n        if (Storage::has('/w/' . $this->campaignId)) {\n            Storage::deleteDirectory('/w/' . $this->campaignId);\n        }\n        if (Storage::has('/campaigns/' . $this->campaignId)) {\n            Storage::deleteDirectory('/campaigns/' . $this->campaignId);\n        }\n\n        // Cleanup deleted campaign entries from meilisearch\n        $client = new Client(config('scout.meilisearch.host'), config('scout.meilisearch.key'));\n        $client->getKeys();\n\n        $client->index('entities')->deleteDocuments(['filter' => 'campaign_id = ' . $this->campaignId]);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Discord/AdminInviteJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Discord;\n\nuse App\\Models\\AdminInvite;\nuse App\\Services\\Discord\\NotificationService;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Queue\\Queueable;\n\nclass AdminInviteJob implements ShouldQueue\n{\n    use Queueable;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(\n        public AdminInvite $adminInvite\n    ) {\n        //\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $webhook = config('discord.webhooks.admin');\n        if (empty($webhook)) {\n            return;\n        }\n\n        /** @var NotificationService $service */\n        $service = app()->make(NotificationService::class);\n        $service\n            ->webhook($webhook)\n            ->title('New support request')\n            ->content('A new admin invite has been created')\n            ->user($this->adminInvite->user)\n            ->description('One of our users is in need of help and has generated an admin invite')\n            ->url('https://admin.kanka.io/invites/' . $this->adminInvite->id)\n            ->send();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Discord/ReportJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Discord;\n\nuse App\\Services\\Discord\\NotificationService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass ReportJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected string $name;\n\n    protected string $content;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(string $name, string $content)\n    {\n        $this->name = $name;\n        $this->content = $content;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $webhook = config('discord.webhooks.admin');\n        if (empty($webhook)) {\n            return;\n        }\n        Log::info('Jobs/Discord/ReportJob', ['start', 'name' => $this->name]);\n\n        /** @var NotificationService $service */\n        $service = app()->make(NotificationService::class);\n        $messageData = $service\n            ->webhook(config('discord.webhooks.admin'))\n            ->content('')\n            ->description($this->content)\n            ->title($this->name)\n            ->send()\n            ->json();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Discord/SendNewFeature.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Discord;\n\nuse App\\Models\\Feature;\nuse App\\Services\\Discord\\NotificationService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass SendNewFeature implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $feature;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(int $feature)\n    {\n        $this->feature = $feature;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        /** @var Feature|null $feature */\n        $feature = Feature::find($this->feature);\n        if (empty($feature)) {\n            // Feature wasn't found\n            Log::warning('Jobs/Discord/SendNewFeature', ['unknown feature', 'feature' => $this->feature]);\n\n            return;\n        }\n\n        $webhook = config('discord.webhooks.features');\n        if (empty($webhook)) {\n            Log::warning('Jobs/Discord/SendNewFeature', ['no webhook defined']);\n\n            return;\n        }\n        Log::info('Jobs/Discord/SendNewFeature', ['start', 'feature' => $feature->id]);\n\n        /** @var NotificationService $service */\n        $service = app()->make(NotificationService::class);\n        $messageData = $service\n            ->webhook(config('discord.webhooks.features'))\n            ->title($feature->name)\n            ->content('A new idea has been approved and can be voted on!')\n            ->user($feature->user)\n            ->description($feature->description)\n            ->url(route('roadmap', ['status' => 'ideas', 'idea' => $feature->id]))\n            ->send()\n            ->json();\n\n        $feature->message_id = $messageData['id'];\n        $feature->saveQuietly();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Discord/UpdateFeatureUpvotes.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Discord;\n\nuse App\\Models\\Feature;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Http;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass UpdateFeatureUpvotes implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $feature;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(int $feature)\n    {\n        $this->feature = $feature;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        /** @var Feature|null $feature */\n        $feature = Feature::find($this->feature);\n        if (empty($feature) || empty($feature->message_id)) {\n            // Feature wasn't found\n            Log::warning('Jobs/Discord/UpdateFeatureUpvotes', ['unknown feature or no message_id', 'feature' => $this->feature]);\n\n            return;\n        }\n\n        $webhook = config('discord.webhooks.features');\n        if (empty($webhook)) {\n            Log::warning('Jobs/Discord/UpdateFeatureUpvotes', ['no webhook defined']);\n\n            return;\n        }\n        Log::info('Jobs/Discord/UpdateFeatureUpvotes', ['start', 'feature' => $feature->id]);\n\n        $content = 'A new idea has been approved and can be voted on! :arrow_up_small: ' . $feature->upvote_count . '.';\n\n        // Construct the message edit URL\n        $editUrl = config('discord.webhooks.features') . \"/messages/{$feature->message_id}\";\n\n        Http::patch($editUrl, [\n            'content' => $content,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/DiscordRoleJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\User;\nuse App\\Services\\DiscordService;\nuse Exception;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass DiscordRoleJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 3;\n\n    /** @var User */\n    public $user;\n\n    /** @var bool if to add or remove roles */\n    public $add;\n\n    /** @var DiscordService */\n    public $discord;\n\n    /**\n     * CampaignExport constructor.\n     */\n    public function __construct(User $user, bool $add = true)\n    {\n        $this->user = $user;\n        $this->add = $add;\n    }\n\n    /**\n     * Execute the job\n     *\n     * @throws Exception\n     */\n    public function handle()\n    {\n        $this->discord = app()->make(DiscordService::class);\n        try {\n            if ($this->add) {\n                $this->discord->user($this->user)->addRoles();\n            } else {\n                $this->discord->user($this->user)->removeRoles();\n            }\n        } catch (Exception $e) {\n            Log::error('DiscordRoleJob:: ' . $e->getMessage());\n            // Silence errors and ignore\n        }\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/EmailChangeJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Mail\\Subscription\\User\\EmailChangeMail;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass EmailChangeJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /** @var int user id */\n    protected $user;\n\n    /** @var string email */\n    protected $email;\n\n    public function __construct(User $user, string $email)\n    {\n        $this->user = $user->id;\n        $this->email = $email;\n    }\n\n    /**\n     * @throws BindingResolutionException\n     */\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        /** @var User|null $user */\n        $user = User::find($this->user);\n        if (empty($user)) {\n            return;\n        }\n\n        // Send an email to the user\n        Mail::to($this->email)\n            ->locale($user->locale)\n            ->send(\n                new EmailChangeMail($user)\n            );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/MailSettingsChangeJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Models\\User;\nuse App\\Services\\NewsletterService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass MailSettingsChangeJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public int $userId;\n\n    /** @var int how many times the job can fail before quitting */\n    public $tries = 3;\n\n    public bool $new;\n\n    /**\n     * MailSettingsChangeJob constructor.\n     */\n    public function __construct(User $user, bool $new = false)\n    {\n        $this->userId = $user->id;\n        $this->new = $new;\n    }\n\n    /**\n     * @throws BindingResolutionException\n     */\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        /** @var ?User $user */\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n\n        /** @var NewsletterService $newsletter */\n        $newsletter = app()->make(NewsletterService::class);\n\n        // If the user was subscribed and no longer desires anything, unsub them\n        $wantsSomething = $user->hasNewsletter();\n\n        if ($newsletter->user($user)->isSubscribed() && ! $wantsSomething) {\n            $newsletter->remove();\n        } elseif ($wantsSomething) {\n            $options = [\n                'releases' => (bool) $user->mail_release,\n                'new' => $this->new,\n            ];\n\n            $newsletter->update($options);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Purge/FirstWarningJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Purge;\n\nuse App\\Enums\\UserAction;\nuse App\\Mail\\Purge\\FirstWarning;\nuse App\\Models\\User;\nuse App\\Services\\Users\\CampaignService;\nuse Exception;\nuse GuzzleHttp\\Exception\\ServerException;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass FirstWarningJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public $tries = 1;\n\n    protected int $userId;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(int $userId)\n    {\n        $this->userId = $userId;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        /** @var User $user */\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n\n        Log::info('PurgeFirstWarning', ['user' => $this->userId]);\n\n        /** @var CampaignService $service */\n        $service = app()->make(CampaignService::class);\n        $campaigns = $service->user($user)->flaggedCampaigns();\n        $user->log(UserAction::purgeWarningFirst);\n\n        $target = app()->isProduction() ? $user->email : config('mail.from.address');\n        if (empty($target)) {\n            return;\n        }\n        try {\n            Mail::to($target)\n                ->locale($user->locale ?? 'en-US')\n                ->send(\n                    new FirstWarning($user, $campaigns)\n                );\n        } catch (ServerException $e) {\n            // Silence\n        } catch (Exception $e) {\n            // Something went wrong with mailgun, or the email is invalid. Silence these errors\n            // to avoid spamming sentry.\n            throw $e;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Purge/SecondWarningJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Purge;\n\nuse App\\Enums\\UserAction;\nuse App\\Mail\\Purge\\SecondWarning;\nuse App\\Models\\User;\nuse App\\Services\\Users\\CampaignService;\nuse Exception;\nuse GuzzleHttp\\Exception\\ServerException;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass SecondWarningJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public $tries = 1;\n\n    protected int $userId;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(int $userId)\n    {\n        $this->userId = $userId;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n\n        Log::info('PurgeFirstWarning', ['user' => $this->userId]);\n\n        /** @var CampaignService $service */\n        $service = app()->make(CampaignService::class);\n        $campaigns = $service->user($user)->flaggedCampaigns();\n\n        $user->log(UserAction::purgeWarningSecond);\n\n        $target = app()->isProduction() ? $user->email : config('mail.from.address');\n        if (empty($target)) {\n            return;\n        }\n        try {\n            Mail::to($target)\n                ->locale($user->locale ?? 'en-US')\n                ->send(\n                    new SecondWarning($user, $campaigns)\n                );\n        } catch (ServerException $e) {\n            // Silence\n        } catch (Exception $e) {\n            // Something went wrong with mailgun, or the email is invalid. Silence these errors\n            // to avoid spamming sentry.\n            throw $e;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/SubscriptionCancelEmailJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Enums\\UserAction;\nuse App\\Mail\\Subscription\\Admin\\CancelledSubscriptionMail;\nuse App\\Mail\\Subscription\\User\\CancelledUserSubscriptionMail;\nuse App\\Models\\SubscriptionCancellation;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass SubscriptionCancelEmailJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public int $cancellationId;\n\n    /** @var int */\n    public $tries = 3;\n\n    public function __construct(SubscriptionCancellation $cancellation)\n    {\n        $this->cancellationId = $cancellation->id;\n    }\n\n    public function handle(): void\n    {\n        $cancellation = SubscriptionCancellation::find($this->cancellationId);\n        if (empty($cancellation)) {\n            return;\n        }\n\n        $user = $cancellation->user;\n        if (empty($user)) {\n            return;\n        }\n\n        // Send an email to the admins\n        Mail::to('hello@kanka.io')\n            ->send(new CancelledSubscriptionMail($cancellation));\n\n        // Send an email to the user\n        Mail::to($user->email)\n            ->send(new CancelledUserSubscriptionMail($cancellation));\n\n        $user->log(UserAction::subCancelManual);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/SubscriptionCreatedEmailJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Mail\\Subscription\\Admin\\NewSubscriptionMail;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass SubscriptionCreatedEmailJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /** @var int user id */\n    public $userId;\n\n    /** @var bool if new or changed */\n    public $new;\n\n    public PricingPeriod $period;\n\n    /** @var int how many times the job can fail before quitting */\n    public $tries = 3;\n\n    /**\n     * WelcomeEmailJob constructor.\n     *\n     * @param  bool  $new  if it's a new sub or a changed sub\n     */\n    public function __construct(User $user, PricingPeriod $period, bool $new = true)\n    {\n        $this->userId = $user->id;\n        $this->new = $new;\n        $this->period = $period;\n    }\n\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n        if ($this->new) {\n            // Send an email to the admins\n            Mail::to('hello@kanka.io')\n                ->send(\n                    new NewSubscriptionMail($user, $this->period)\n                );\n        }\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/SubscriptionDeletedEmailJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Enums\\UserAction;\nuse App\\Models\\User;\nuse App\\Notifications\\Header;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass SubscriptionDeletedEmailJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public int $userId;\n\n    public $tries = 1;\n\n    /**\n     * WelcomeEmailJob constructor.\n     */\n    public function __construct(User $user)\n    {\n        $this->userId = $user->id;\n    }\n\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        /** @var ?User $user */\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            Log::warning('Subscription Deleted Email Job: unknown user id', ['userId' => $this->userId]);\n\n            return;\n        }\n\n        // Don't notify if the user was banned\n        if ($user->isBanned()) {\n            Log::warning('Subscription Deleted Email Job: banned user id', ['userId' => $this->userId]);\n\n            return;\n        }\n\n        $user->notify(new Header(\n            'subscriptions.deleted',\n            'far fa-credit-card',\n            'red'\n        ));\n\n        $user->log(UserAction::subCancelAuto);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/SubscriptionDowngradedEmailJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Mail\\Subscription\\Admin\\DowngradedSubscriptionMail;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass SubscriptionDowngradedEmailJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /** @var int user id */\n    public $userId;\n\n    /** @var string */\n    public $reason;\n\n    public $custom;\n\n    /** @var int how many times the job can fail before quitting */\n    public $tries = 3;\n\n    /**\n     * WelcomeEmailJob constructor.\n     */\n    public function __construct(User $user, ?string $reason = null, ?string $custom = null)\n    {\n        $this->userId = $user->id;\n        $this->reason = $reason;\n        $this->custom = $custom;\n    }\n\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n        $reason = $this->reason;\n\n        if ($reason == 'custom') {\n            $reason = 'other';\n        }\n\n        // Send an email to the admins\n        Mail::to('hello@kanka.io')\n            ->send(\n                new DowngradedSubscriptionMail($user, $reason, $this->custom)\n            );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/SubscriptionFailedEmailJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Enums\\UserAction;\nuse App\\Mail\\Subscription\\User\\FailedUserSubscriptionMail;\nuse App\\Models\\User;\nuse App\\Notifications\\Header;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass SubscriptionFailedEmailJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var int\n     */\n    public $userId;\n\n    public $tries = 1;\n\n    /**\n     * WelcomeEmailJob constructor.\n     */\n    public function __construct(User $user)\n    {\n        $this->userId = $user->id;\n    }\n\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            Log::warning('Subscription Failed Email Job: unknown user id', ['userId' => $this->userId]);\n\n            return;\n        }\n\n        $user->notify(new Header(\n            'subscriptions.failed',\n            'far fa-credit-card',\n            'red'\n        ));\n\n        // Send an email to the admins\n        /*Mail::to('hello@kanka.io')\n            ->send(\n                new FailedSubscriptionMail($user)\n            );*/\n\n        // Send an email to the user\n        Mail::to($user->email)\n            // ->bcc('hello@kanka.io')\n            ->send(\n                new FailedUserSubscriptionMail($user)\n            );\n        $user->log(UserAction::failedChargeEmail);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Subscriptions/Admin/PaypalRenewedJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Subscriptions\\Admin;\n\nuse App\\Mail\\Subscription\\Admin\\PaypalRenewedMail;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Queue\\Queueable;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass PaypalRenewedJob implements ShouldQueue\n{\n    use Queueable;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(public int $user) {}\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $user = User::find($this->user);\n        if (! $user) {\n            return;\n        }\n\n        Mail::to('hello@kanka.io')\n            ->send(\n                new PaypalRenewedMail($user)\n            );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Subscriptions/Converted.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Subscriptions;\n\nuse App\\Mail\\Admin\\Subscriptions\\ConvertedMail;\nuse App\\Models\\TierPrice;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Queue\\Queueable;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass Converted implements ShouldQueue\n{\n    use Queueable;\n\n    public int $userId;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(\n        User $user,\n    ) {\n        $this->userId = $user->id;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n\n        // Guess the period based on the sub's end date\n        $price = $user->subscription('kanka')->stripe_price;\n        /** @var ?TierPrice $price */\n        $price = TierPrice::where('stripe_id', $price)->first();\n\n        Mail::to('hello@kanka.io')\n            ->send(\n                new ConvertedMail($user, $price->period)\n            );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Subscriptions/EmailValidationJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Subscriptions;\n\nuse App\\Mail\\Subscription\\User\\ValidationEmail;\nuse App\\Models\\User;\nuse App\\Models\\UserValidation;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass EmailValidationJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $user;\n\n    protected int $token;\n\n    public function __construct(User $user, UserValidation $token)\n    {\n        $this->user = $user->id;\n        $this->token = $token->id;\n    }\n\n    /**\n     * @throws BindingResolutionException\n     */\n    public function handle()\n    {\n        // Small check in case the user deleted their account before the queue could get to them\n        /** @var User|null $user */\n        $user = User::find($this->user);\n        if (empty($user)) {\n            return;\n        }\n        $userValidation = UserValidation::find($this->token);\n        $url = route('validation.email', ['userValidation' => $userValidation]);\n\n        Mail::to($user->email)\n            ->locale($user->locale)\n            ->send(\n                new ValidationEmail($user, $url)\n            );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Subscriptions/ExpiringCardAlert.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Subscriptions;\n\nuse App\\Mail\\Subscription\\User\\ExpiringCardEmail;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass ExpiringCardAlert implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /** @var int user id */\n    protected $user;\n\n    public function __construct(User $user)\n    {\n        $this->user = $user->id;\n    }\n\n    /**\n     * @throws BindingResolutionException\n     */\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        /** @var User|null $user */\n        $user = User::find($this->user);\n        if (empty($user)) {\n            return;\n        }\n\n        // Send an email to the user\n        Mail::to($user->email)\n            ->locale($user->locale)\n            ->send(\n                new ExpiringCardEmail($user)\n            );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Subscriptions/PaypalExpiringAlert.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Subscriptions;\n\nuse App\\Enums\\UserAction;\nuse App\\Mail\\Subscription\\User\\PaypalExpiringMail;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass PaypalExpiringAlert implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $userId;\n\n    public function __construct(User $user)\n    {\n        $this->userId = $user->id;\n    }\n\n    public function handle(): void\n    {\n        /** @var User|null $user */\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n\n        Mail::to($user->email)\n            ->locale($user->locale)\n            ->send(new PaypalExpiringMail($user));\n\n        $user->log(UserAction::subPaypalExpiringWarning);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Subscriptions/UpcomingYearlyAlert.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Subscriptions;\n\nuse App\\Enums\\UserAction;\nuse App\\Mail\\Subscription\\User\\UpcomingYearlyEmail;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass UpcomingYearlyAlert implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /** @var int user id */\n    protected $user;\n\n    public function __construct(User $user)\n    {\n        $this->user = $user->id;\n    }\n\n    /**\n     * @throws BindingResolutionException\n     */\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        /** @var User|null $user */\n        $user = User::find($this->user);\n        if (empty($user)) {\n            return;\n        }\n\n        // Send an email to the user\n        Mail::to($user->email)\n            ->locale($user->locale)\n            ->send(\n                new UpcomingYearlyEmail($user)\n            );\n        $user->log(UserAction::yearlyRenewWarning);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/Subscriptions/WelcomeSubscriptionEmailJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails\\Subscriptions;\n\nuse App\\Mail\\Subscription\\User\\NewSubscriberMail;\nuse App\\Models\\Tier;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass WelcomeSubscriptionEmailJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public int $userId;\n\n    public int $tierId;\n\n    /** @var int how many times the job can fail before quitting */\n    public $tries = 3;\n\n    /**\n     * WelcomeEmailJob constructor.\n     */\n    public function __construct(User $user, Tier $tier)\n    {\n        $this->userId = $user->id;\n        $this->tierId = $tier->id;\n    }\n\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        /** @var User|null $user */\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n\n        $tier = Tier::find($this->tierId);\n\n        Mail::to($user->email)\n            ->send(\n                new NewSubscriberMail($user, $tier)\n            );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/TrialAcceptedEmailJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Mail\\Subscription\\Admin\\NewTrialAcceptedMail;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass TrialAcceptedEmailJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /** @var int user id */\n    public $userId;\n\n    /** @var int how many times the job can fail before quitting */\n    public $tries = 3;\n\n    /**\n     * TrialAcceptedEmailJob constructor.\n     */\n    public function __construct(User $user)\n    {\n        $this->userId = $user->id;\n    }\n\n    public function handle()\n    {\n        // User deleted their account already? Sure thing\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            return;\n        }\n\n        // Send an email to the admins\n        Mail::to('hello@kanka.io')\n            ->send(\n                new NewTrialAcceptedMail($user)\n            );\n\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Emails/WelcomeEmailJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Emails;\n\nuse App\\Mail\\WelcomeEmail;\nuse App\\Models\\User;\nuse Exception;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass WelcomeEmailJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var int\n     */\n    public $userId;\n\n    /**\n     * @var string\n     */\n    public $language;\n\n    public $tries = 3;\n\n    /**\n     * WelcomeEmailJob constructor.\n     */\n    public function __construct(User $user, string $language = 'en')\n    {\n        $this->userId = $user->id;\n        $this->language = $language;\n    }\n\n    /**\n     * Handle the job\n     */\n    public function handle()\n    {\n        $user = User::find($this->userId);\n        // In a dev environment, it's possible that the queue wasn't running and\n        // the user was deleted before we even get to send the welcome email.\n        if (empty($user)) {\n            return;\n        }\n        Log::info('WelcomeEmailJob', ['user' => $this->userId]);\n\n        // try {\n        Mail::to($user->email)\n            ->locale($this->language)\n            ->send(\n                new WelcomeEmail($user)\n            );\n        /*} catch (\\GuzzleHttp\\Exception\\ServerException $e) {\n            // Silence\n        } catch (Exception $e) {\n            // Something went wrong with mailgun, or the email is invalid. Silence these errors\n            // to avoid spamming sentry.\n            throw $e;\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/Jobs/EntityMappingJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Services\\EntityMappingService;\nuse App\\Traits\\MentionTrait;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass EntityMappingJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use MentionTrait;\n    use Queueable;\n    use SerializesModels;\n\n    public Model $model;\n\n    public int $modelId;\n\n    public string $class;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Model $model)\n    {\n        // @phpstan-ignore-next-line\n        $this->modelId = $model->id;\n        $this->class = get_class($model);\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        // Get the model\n        $model = $this->class::find($this->modelId);\n        if (! $model) {\n            return;\n        }\n\n        /** @var EntityMappingService $entityMappingService. */\n        $entityMappingService = app()->make(EntityMappingService::class);\n        $entityMappingService->with($model)->silent()->map();\n    }\n\n    public function failure()\n    {\n        // Sentry will handle this\n    }\n}\n"
  },
  {
    "path": "app/Jobs/EntityUpdatedJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Facades\\Avatar;\nuse App\\Models\\Entity;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass EntityUpdatedJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public Entity $entity;\n\n    public array $dirty;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Entity $entity)\n    {\n        // Serialize the model directly to the db\n        $this->entity = $entity;\n        $this->dirty = $entity->getDirty();\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        Log::info('EntityUpdateJob for entity #' . $this->entity->id);\n\n        // Whenever the image is updated, clear the avatar cache\n        if ($this->isDirty(['image_uuid', 'image_path'])) {\n            Avatar::entity($this->entity)->forget();\n        }\n    }\n\n    public function failure()\n    {\n        // Sentry will handle this\n    }\n\n    /**\n     * Determine if a specific field was changed on the entity when saving\n     */\n    protected function isDirty(array $keys): bool\n    {\n        foreach ($this->dirty as $key => $val) {\n            if (in_array($key, $keys)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "app/Jobs/EntityWebhookJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\User;\nuse App\\Services\\WebhookService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass EntityWebhookJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public Campaign $campaign;\n\n    public Entity $entity;\n\n    public int $action;\n\n    public User $user;\n\n    public int $tries = 1;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Entity $entity, User $user, int $action)\n    {\n        // Can't save the entity directly into the job because of the child() function not returning a\n        // string? Maybe something to do with the to array part of the queue.\n        $this->campaign = $entity->campaign;\n        $this->user = $user;\n        $this->action = $action;\n        $this->entity = $entity;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        Log::info('EntityWebhookJob for entity #' . $this->entity->id);\n        if (! $this->campaign->premium()) {\n            return;\n        }\n\n        /** @var WebhookService $webhookService */\n        $webhookService = app()->make(WebhookService::class);\n        $webhookService->campaign($this->campaign)->user($this->user)->entity($this->entity)->process($this->action);\n\n    }\n\n    public function failure()\n    {\n        // Sentry will handle this\n    }\n}\n"
  },
  {
    "path": "app/Jobs/FileCleanup.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass FileCleanup implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected string $path;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(string $path)\n    {\n        $this->path = $path;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        if (Storage::exists($this->path)) {\n            Storage::delete($this->path);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Jobs/ResetCssCache.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass ResetCssCache implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /** @var int */\n    protected $campaign;\n\n    /**queue\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Campaign $campaign)\n    {\n        $this->campaign = $campaign->id;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        $campaign = Campaign::find($this->campaign);\n        if (empty($campaign)) {\n            return;\n        }\n        Cache::forget('campaign_' . $campaign->id . '_theme');\n        $campaign->touch();\n        Log::info('Campaign #' . $campaign->id . ' cleared css cache (job)');\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Roadmap/DiscordFeatureJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Roadmap;\n\nuse App\\Models\\Feature;\nuse App\\Services\\Discord\\NotificationService;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Queue\\Queueable;\n\nclass DiscordFeatureJob implements ShouldQueue\n{\n    use Queueable;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(\n        public Feature $feature\n    ) {\n        //\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $webhook = config('discord.webhooks.admin');\n        if (empty($webhook)) {\n            return;\n        }\n\n        /** @var NotificationService $service */\n        $service = app()->make(NotificationService::class);\n        $isCancellation = ($this->feature->meta['from'] ?? null) === 'cancellation';\n        $content = $isCancellation\n            ? '❗ Cancellation - A new idea has been submitted and needs approval.'\n            : 'A new idea has been submitted and needs approval.';\n\n        $service\n            ->webhook($webhook)\n            ->title($this->feature->name)\n            ->content($content)\n            ->user($this->feature->user)\n            ->description($this->feature->description)\n            ->url('https://admin.kanka.io/features/' . $this->feature->id)\n            ->send();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Spotlight/DiscordSpotlightJob.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Spotlight;\n\nuse App\\Models\\SpotlightContent;\nuse App\\Services\\Discord\\NotificationService;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Queue\\Queueable;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\nclass DiscordSpotlightJob implements ShouldQueue\n{\n    use Queueable;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(\n        public SpotlightContent $spotlightContent\n    ) {\n        //\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $webhook = config('discord.webhooks.admin');\n        if (empty($webhook)) {\n            return;\n        }\n\n        /** @var NotificationService $service */\n        $service = app()->make(NotificationService::class);\n        $service\n            ->webhook($webhook)\n            ->title('Spotlight application for ' . $this->spotlightContent->campaign->name)\n            ->content('A campaign applied for a spotlight.')\n            ->user($this->spotlightContent->creator)\n            ->description(Str::limit(Arr::get($this->spotlightContent->content_json, 'time'), 250))\n            ->url('https://admin.kanka.io/spotlight-contents/' . $this->spotlightContent->id)\n            ->send();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/SubscriptionEndJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Events\\Subscriptions\\AutoRemove;\nuse App\\Models\\CampaignBoost;\nuse App\\Models\\Pledge;\nuse App\\Models\\Role;\nuse App\\Models\\User;\nuse App\\Notifications\\Header;\nuse App\\Services\\DiscordService;\nuse Exception;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass SubscriptionEndJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    public int $userId;\n\n    public bool $cancelled;\n\n    public bool $trial = false;\n\n    public function __construct(User $user, bool $cancelled = false, bool $trial = false)\n    {\n        $this->userId = $user->id;\n        $this->cancelled = $cancelled;\n        $this->trial = $trial;\n    }\n\n    /**\n     * A user has ended their subscription, either by cancelling or automatically by the script.\n     * Let's send them a notification, update their discord roles, send an email, and update their user status\n     */\n    public function handle()\n    {\n        /** @var ?User $user */\n        $user = User::find($this->userId);\n        if (empty($user) || $this->userId == 27078 || $user->subscribed('kanka')) {\n            // User deleted their account already or renewed their subscription.\n            return;\n        }\n\n        // Cleanup the user\n        $user->pledge = null;\n        $settings = $user->settings;\n        unset($settings['grandfathered_boost']);\n        $user->settings = $settings;\n        $user->saveQuietly();\n\n        // Cleanup the campaign boosts\n        $boostService = app()->make('App\\Services\\Campaign\\BoostService');\n        $unboostedCampaigns = [];\n        /** @var CampaignBoost $boost */\n        foreach ($user->boosts()->with(['campaign'])->groupBy('campaign_id')->get() as $boost) {\n            $boostService\n                ->campaign($boost->campaign)\n                ->user($user)\n                ->unboost($boost);\n            if (! in_array($boost->campaign_id, $unboostedCampaigns)) {\n                AutoRemove::dispatch($boost->campaign, $user);\n                $unboostedCampaigns[] = $boost->campaign_id;\n            }\n        }\n\n        // Cleanup the subscriber role\n        /** @var Role $role */\n        $role = Role::where('name', Pledge::ROLE)->first();\n        $user->roles()->detach($role->id);\n\n        // Notify the user in app about the change\n        $key = 'subscriptions.' . ($this->trial ? 'trial' : ($this->cancelled ? 'failed' : 'ended'));\n        $user->notify(\n            new Header(\n                $key,\n                'fa-regular fa-gem',\n                'orange'\n            )\n        );\n\n        // Lastly, cleanup any discord stuff\n        /** @var DiscordService $discord */\n        $discord = app()->make('App\\Services\\DiscordService');\n        try {\n            $discord->user($user)->removeRoles();\n        } catch (Exception $e) {\n            Log::error('DiscordRoleJob:: ' . $e->getMessage());\n            // Silence errors and ignore\n        }\n    }\n}\n"
  },
  {
    "path": "app/Jobs/TestWebhookJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse App\\Models\\Webhook;\nuse App\\Services\\WebhookService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass TestWebhookJob implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public int $campaignId;\n\n    public User $user;\n\n    public Webhook $webhook;\n\n    /**\n     * The number of times the job may be attempted.\n     *\n     * @var int\n     */\n    public $tries = 1;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(Campaign $campaign, User $user, Webhook $webhook)\n    {\n        // Can't save the entity directly into the job because of the child() function not returning a\n        // string? Maybe something to do with the to array part of the queue.\n        $this->campaignId = $campaign->id;\n        $this->user = $user;\n        $this->webhook = $webhook;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        /** @var Campaign|null $campaign */\n        $campaign = Campaign::find($this->campaignId);\n\n        /** @var WebhookService $webhookService */\n        $webhookService = app()->make(WebhookService::class);\n        $webhookService->user($this->user)->campaign($campaign)->test($this->webhook);\n    }\n\n    public function failure()\n    {\n        // Sentry will handle this\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Users/AbandonedCart.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Users;\n\nuse App\\Models\\Tier;\nuse App\\Models\\User;\nuse App\\Services\\NewsletterService;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Queue\\Queueable;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass AbandonedCart implements ShouldQueue\n{\n    use Queueable;\n\n    protected int $user;\n\n    protected string $tier;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(User $user, Tier $tier)\n    {\n        $this->user = $user->id;\n        $this->tier = $tier->name;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        /** @var ?User $user */\n        $user = User::find($this->user);\n        if (empty($user)) {\n            Log::warning('Jobs/Users/AbandonedCart', ['unknown user', 'user' => $this->user]);\n\n            return;\n        }\n        Log::info('Jobs/Users/AbandonedCart', ['start', 'user' => $this->user]);\n\n        // If the user subbed, we don't do anything\n        if (! $user->hasNewsletter() || $user->subscribed('kanka')) {\n            return;\n        }\n\n        $fields = [\n            'abandoned_cart' => now()->format('Y-m-d'),\n            'abandoned_package' => $this->tier,\n        ];\n\n        /** @var NewsletterService $service */\n        $service = app()->make(NewsletterService::class);\n\n        $options = [\n            'releases' => true,\n            'new' => false,\n        ];\n        // Log::warning('Jobs/Users/AbandonnedCard', ['fields' => $fields]);\n\n        $service->user($user)->fields($fields)->update($options);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Users/DeleteUser.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Users;\n\nuse App\\Models\\User;\nuse App\\Services\\Users\\CleanupService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass DeleteUser implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $user;\n\n    /**queue\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user->id;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        /** @var User|null $user */\n        $user = User::find($this->user);\n        if (empty($user)) {\n            // User wasn't found\n            Log::warning('Jobs/Users/DeleteUser', ['unknown user', 'user' => $this->user]);\n\n            return;\n        }\n        Log::info('Jobs/Users/DeleteUser', ['start', 'user' => $user->id]);\n\n        /** @var CleanupService $service */\n        // We don't use the model's observer, because in laravel 10, it's adding the observer for each loop in local dev, slowing everything down\n        $service = app()->make(CleanupService::class);\n        $service->user($user)->delete();\n        $user->delete();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Users/NewPassword.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Users;\n\nuse App\\Models\\User;\nuse Exception;\nuse GuzzleHttp\\Exception\\ServerException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Queue\\Queueable;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Mail;\n\nclass NewPassword implements ShouldQueue\n{\n    use Queueable;\n\n    protected int $userId;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(User $user)\n    {\n        $this->userId = $user->id;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        /** @var User|null $user */\n        $user = User::find($this->userId);\n        if (empty($user)) {\n            Log::warning('Jobs/Users/NewPassword', ['unknown user', 'user' => $this->userId]);\n\n            return;\n        }\n\n        $target = app()->isProduction() ? $user->email : config('mail.from.address');\n        try {\n            Mail::to($target)\n                ->locale($user->locale ?? 'en-US')\n                ->send(\n                    new \\App\\Mail\\Users\\NewPassword($user)\n                );\n        } catch (ServerException $e) {\n            // Silence\n        } catch (Exception $e) {\n            // Something went wrong with mailgun, or the email is invalid. Silence these errors\n            // to avoid spamming sentry.\n            throw $e;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Users/UnsubscribeUser.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Users;\n\nuse App\\Services\\NewsletterService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass UnsubscribeUser implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected string $email;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(string $email)\n    {\n        $this->email = $email;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        /** @var NewsletterService $service */\n        $service = app()->make(NewsletterService::class);\n        $service->email($this->email)->delete();\n        Log::info('Newsletter', ['action' => 'delete', 'email' => $this->email]);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Users/UnsyncDiscord.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Users;\n\nuse App\\Models\\UserApp;\nuse App\\Notifications\\Header;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Queue\\Queueable;\n\nclass UnsyncDiscord implements ShouldQueue\n{\n    use Queueable;\n\n    public int $id;\n\n    /**\n     * Create a new job instance.\n     */\n    public function __construct(UserApp $app)\n    {\n        $this->id = $app->id;\n    }\n\n    /**\n     * Execute the job.\n     */\n    public function handle(): void\n    {\n        $app = UserApp::find($this->id);\n        if (empty($app)) {\n            return;\n        }\n\n        $app->delete();\n        $app->user->notify(\n            new Header(\n                'apps.discord.invalid',\n                'brands fa-discord',\n                'warning',\n                ['route' => 'settings.apps']\n            )\n        );\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Users/UpdateEmail.php",
    "content": "<?php\n\nnamespace App\\Jobs\\Users;\n\nuse App\\Models\\User;\nuse App\\Services\\NewsletterService;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass UpdateEmail implements ShouldQueue\n{\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    protected int $userId;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->userId = $user->id;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        /** @var User|null $user */\n        $user = User::find($this->userId);\n\n        /** @var NewsletterService $newsletter */\n        $newsletter = app()->make(NewsletterService::class);\n\n        $newsletter->user($user)->update(['email' => $user->email]);\n        Log::info('Newsletter', ['action' => 'update', 'user' => $user->id]);\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Admins/Notify.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Admins;\n\nuse App\\Events\\Campaigns\\Members\\UserJoined;\nuse App\\Events\\Campaigns\\Members\\UserLeft;\nuse App\\Services\\Campaign\\NotificationService;\n\nclass Notify\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct(protected NotificationService $service)\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(UserJoined|UserLeft $event): void\n    {\n        $key = 'join';\n        $icon = 'user';\n        $colour = 'success';\n        $params = [];\n\n        if ($event instanceof UserLeft) {\n            $key = 'leave';\n            $icon = 'user';\n            $colour = 'warning';\n            $params = [\n                'user' => $event->user->name,\n                'campaign' => $event->campaign->name,\n                'link' => route('dashboard', $event->campaign),\n            ];\n        } elseif ($event instanceof UserJoined) {\n            $params = [\n                'user' => $event->user->name,\n                'campaign' => $event->campaign->name,\n                'link' => route('dashboard', $event->campaign),\n            ];\n        }\n        $this->service\n            ->campaign($event->campaign)\n            ->notify($key, $icon, $colour, $params);\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Applications/LogApplication.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Applications;\n\nuse App\\Events\\Campaigns\\Applications\\Accepted;\nuse App\\Events\\Campaigns\\Applications\\Rejected;\n\nclass LogApplication\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(Accepted|Rejected $event): void\n    {\n        $action = $event instanceof Accepted ? 'accepted' : 'rejected';\n        $event->user->campaignLog(\n            $event->campaign->id,\n            'applications',\n            $action, [\n                'user' => $event->application->user->name,\n                'id' => $event->application->user_id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Campaigns/LogCampaign.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Campaigns;\n\nuse App\\Events\\Campaigns\\Updated;\n\nclass LogCampaign\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(Updated $event): void\n    {\n        if ($event->campaign->wasChanged('is_open')) {\n            $event->user->campaignLog(\n                $event->campaign->id,\n                'applications',\n                'switch',\n                ['new' => $event->campaign->isOpen() ? 'open' : 'closed']\n            );\n        }\n        if ($event->campaign->wasChanged('visibility_id')) {\n            $event->user->campaignLog(\n                $event->campaign->id,\n                'visibility',\n                'switch',\n                ['new' => $event->campaign->isPublic() ? 'public' : 'private']\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/ClearCampaignCache.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns;\n\nuse App\\Facades\\CampaignCache;\n\nclass ClearCampaignCache\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(object $event): void\n    {\n        $campaign = $event->campaignRoleUser->campaignRole->campaign\n            ?? $event->campaignRole->campaign\n            ?? $event->campaign\n            ?? $event->campaignDashboard->campaign\n            ?? null;\n\n        CampaignCache::campaign($campaign)->clear();\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/ClearCampaignThemeCache.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns;\n\nuse App\\Facades\\CampaignCache;\n\nclass ClearCampaignThemeCache\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(object $event): void\n    {\n        $campaign = $event->campaignStyle->campaign\n            ?? $event->campaign\n            ?? null;\n\n        CampaignCache::campaign($campaign)->clearTheme();\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/ClearCampaignUsersSaved.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns;\n\nuse App\\Events\\Campaigns\\Deleted;\nuse App\\Events\\Campaigns\\Saved;\nuse App\\Facades\\UserCache;\n\nclass ClearCampaignUsersSaved\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(Saved|Deleted $event): void\n    {\n        // Whenever a campaign is changed, clear the cache for users and followers\n        if ($event instanceof Deleted || $event->campaign->wasChanged(['visibility_id', 'name', 'image'])) {\n            foreach ($event->campaign->users as $member) {\n                UserCache::user($member)->clear();\n            }\n\n            foreach ($event->campaign->followers as $follower) {\n                UserCache::user($follower)->clear();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Dashboards/LogDashboard.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Dashboards;\n\nuse App\\Events\\Campaigns\\Dashboards\\DashboardCreated;\nuse App\\Events\\Campaigns\\Dashboards\\DashboardDeleted;\nuse App\\Events\\Campaigns\\Dashboards\\DashboardUpdated;\n\nclass LogDashboard\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(DashboardCreated|DashboardUpdated|DashboardDeleted $event): void\n    {\n        $action = match (true) {\n            $event instanceof DashboardCreated => 'created',\n            $event instanceof DashboardUpdated => 'updated',\n            $event instanceof DashboardDeleted => 'deleted',\n        };\n\n        $event->user->campaignLog(\n            $event->campaignDashboard->campaign_id,\n            'dashboards',\n            $action,\n            [\n                'name' => $event->campaignDashboard->name,\n                'id' => $event->campaignDashboard->id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/EntityTypes/LogEntityType.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\EntityTypes;\n\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeCreated;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeDeleted;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeToggled;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeUpdated;\n\nclass LogEntityType\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(EntityTypeCreated|EntityTypeUpdated|EntityTypeDeleted|EntityTypeToggled $event): void\n    {\n        if (! isset($event->entityType->campaign_id) && ! isset($event->campaign)) {\n            return;\n        }\n\n        $action = match (true) {\n            $event instanceof EntityTypeCreated => 'created',\n            $event instanceof EntityTypeUpdated => 'updated',\n            $event instanceof EntityTypeDeleted => 'deleted',\n            $event instanceof EntityTypeToggled => 'toggled',\n        };\n\n        if ($event instanceof EntityTypeUpdated && $event->entityType->wasChanged('is_enabled')) {\n            $action = $event->entityType->is_enabled ? 'enabled' : 'disabled';\n        } elseif ($event instanceof EntityTypeToggled) {\n            $action = $event->campaign->setting->{$event->entityType->pluralCode()} ? 'enabled' : 'disabled';\n        }\n\n        $event->user->campaignLog(\n            $event->entityType->campaign_id ?? $event->campaign->id,\n            'modules',\n            $action,\n            [\n                'id' => $event->entityType->id,\n                'code' => $event->entityType->code,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Exports/LogExport.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Exports;\n\nuse App\\Events\\Campaigns\\Exports\\ExportCreated;\n\nclass LogExport\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(ExportCreated $event): void\n    {\n        $event->user->campaignLog(\n            $event->campaignExport->campaign_id,\n            'export',\n            'queued'\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Invites/LogInvite.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Invites;\n\nuse App\\Events\\Campaigns\\Invites\\InviteCreated;\nuse App\\Events\\Campaigns\\Invites\\InviteDeleted;\n\nclass LogInvite\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(InviteCreated|InviteDeleted $event): void\n    {\n        $action = $event instanceof InviteCreated ? 'created' : 'deleted';\n        $event->user->campaignLog(\n            $event->campaignInvite->campaign_id,\n            'invites',\n            $action,\n            [\n                'id' => $event->campaignInvite->id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Members/LogMember.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Members;\n\nuse App\\Events\\Campaigns\\Members\\Switched;\nuse App\\Events\\Campaigns\\Members\\UserJoined;\nuse App\\Events\\Campaigns\\Members\\UserLeft;\n\nclass LogMember\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(UserJoined|UserLeft|Switched $event): void\n    {\n        $action = 'joined';\n        $params = [];\n        if ($event instanceof UserLeft) {\n            $action = 'left';\n        } elseif ($event instanceof Switched) {\n            $action = 'switched';\n            $params = ['to' => $event->campaignUser->user->name];\n        } elseif ($event instanceof UserJoined) {\n            $params = ['invite' => $event->campaignInvite->id];\n        }\n        $event->user->campaignLog(\n            $event->campaign->id,\n            'members',\n            $action,\n            $params,\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Members/LogUserRoleChanged.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Members;\n\nuse App\\Events\\Campaigns\\Members\\RoleUserAdded;\nuse App\\Events\\Campaigns\\Members\\RoleUserRemoved;\n\nclass LogUserRoleChanged\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(RoleUserAdded|RoleUserRemoved $event): void\n    {\n        $action = $event instanceof RoleUserAdded ? 'created' : 'deleted';\n\n        if (! isset($event->campaignRoleUser->campaignRole)) {\n            return;\n        }\n\n        $event->user->campaignLog(\n            $event->campaignRoleUser->campaignRole->campaign_id,\n            'user-role',\n            $action,\n            [\n                'user' => $event->campaignRoleUser->user->name,\n                'user_id' => $event->campaignRoleUser->user_id,\n                'role' => $event->campaignRoleUser->campaignRole->name,\n                'role_id' => $event->campaignRoleUser->campaign_role_id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Members/RunRoleUserJob.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Members;\n\nuse App\\Events\\Campaigns\\Members\\RoleUserAdded;\nuse App\\Events\\Campaigns\\Members\\RoleUserRemoved;\nuse App\\Jobs\\CampaignRoleUserJob;\n\nclass RunRoleUserJob\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(RoleUserAdded|RoleUserRemoved $event): void\n    {\n        CampaignRoleUserJob::dispatch($event->campaignRoleUser, $event instanceof RoleUserAdded);\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Plugins/ClearThemeCache.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Plugins;\n\nuse App\\Events\\Campaigns\\Plugins\\PluginDeleted;\nuse App\\Events\\Campaigns\\Plugins\\PluginUpdated;\nuse App\\Facades\\CampaignCache;\n\nclass ClearThemeCache\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(PluginUpdated|PluginDeleted $event): void\n    {\n        // If we changed the theme we'll need to re-think it\n        if ($event->campaignPlugin->plugin->isTheme()) {\n            CampaignCache::campaign($event->campaignPlugin->campaign)->clearTheme();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Plugins/LogPlugin.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Plugins;\n\nuse App\\Events\\Campaigns\\Plugins\\PluginDeleted;\nuse App\\Events\\Campaigns\\Plugins\\PluginImported;\nuse App\\Events\\Campaigns\\Plugins\\PluginUpdated;\n\nclass LogPlugin\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(PluginUpdated|PluginDeleted|PluginImported $event): void\n    {\n        $action = $event instanceof PluginUpdated ? 'updated' : 'deleted';\n        if ($event instanceof PluginUpdated) {\n            $action = 'updated';\n            if ($event->campaignPlugin->wasChanged('is_active')) {\n                $action = $event->campaignPlugin->is_active ? 'enabled' : 'disabled';\n            }\n            if ($event->campaignPlugin->wasChanged('plugin_version_id')) {\n                $action = 'updated';\n            }\n        }\n        if ($event instanceof PluginImported) {\n            $action = 'imported';\n        }\n\n        $event->user->campaignLog(\n            $event->campaignPlugin->campaign_id,\n            'plugins',\n            $action,\n            [\n                'name' => $event->campaignPlugin->plugin->name,\n                'id' => $event->campaignPlugin->id,\n                'plugin' => $event->campaignPlugin->plugin_id,\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Roles/LogRole.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Roles;\n\nuse App\\Events\\Campaigns\\Roles\\RoleCreated;\nuse App\\Events\\Campaigns\\Roles\\RoleDeleted;\nuse App\\Events\\Campaigns\\Roles\\RoleUpdated;\n\nclass LogRole\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(RoleCreated|RoleUpdated|RoleDeleted $event): void\n    {\n        $action = match (true) {\n            $event instanceof RoleCreated => 'created',\n            $event instanceof RoleUpdated => 'updated',\n            $event instanceof RoleDeleted => 'deleted',\n        };\n\n        $event->user->campaignLog(\n            $event->campaignRole->campaign_id,\n            'roles',\n            $action,\n            [\n                'name' => $event->campaignRole->name,\n                'id' => $event->campaignRole->id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Sidebar/LogSidebar.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Sidebar;\n\nuse App\\Events\\Campaigns\\Sidebar\\SidebarReset;\nuse App\\Events\\Campaigns\\Sidebar\\SidebarSaved;\n\nclass LogSidebar\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(SidebarReset|SidebarSaved $event): void\n    {\n        if (! $event->campaign->wasChanged('ui_settings')) {\n            return;\n        }\n        $action = match (true) {\n            $event instanceof SidebarReset => 'reset',\n            $event instanceof SidebarSaved => 'updated',\n        };\n\n        $event->user->campaignLog(\n            $event->campaign->id,\n            'sidebar',\n            $action,\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Styles/ClearStylesCache.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Styles;\n\nuse App\\Facades\\CampaignCache;\n\nclass ClearStylesCache\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(object $event): void\n    {\n        CampaignCache::campaign($event->campaign)->clearStyles();\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Styles/LogStyle.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Styles;\n\nuse App\\Events\\Campaigns\\Styles\\StyleCreated;\nuse App\\Events\\Campaigns\\Styles\\StyleDeleted;\nuse App\\Events\\Campaigns\\Styles\\StyleUpdated;\n\nclass LogStyle\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(StyleCreated|StyleUpdated|StyleDeleted $event): void\n    {\n        $action = match (true) {\n            $event instanceof StyleCreated => 'created',\n            $event instanceof StyleUpdated => 'updated',\n            $event instanceof StyleDeleted => 'deleted',\n        };\n        if ($event instanceof StyleUpdated && $event->campaignStyle->wasChanged('is_enabled')) {\n            $action = $event->campaignStyle->is_enabled ? 'enabled' : 'disabled';\n        }\n\n        $event->user->campaignLog(\n            $event->campaignStyle->campaign_id,\n            'styles',\n            $action,\n            [\n                'name' => $event->campaignStyle->name,\n                'id' => $event->campaignStyle->id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Thumbnails/LogThumbnail.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Thumbnails;\n\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailCreated;\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailDeleted;\n\nclass LogThumbnail\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(ThumbnailCreated|ThumbnailDeleted $event): void\n    {\n        $action = match (true) {\n            $event instanceof ThumbnailCreated => 'created',\n            $event instanceof ThumbnailDeleted => 'deleted',\n        };\n\n        $event->user->campaignLog(\n            $event->campaign->id,\n            'thumbnails',\n            $action,\n            [\n                'type' => $event->entityType->code,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Thumbnails/LogThumbnails.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Thumbnails;\n\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailsDeleted;\n\nclass LogThumbnails\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(ThumbnailsDeleted $event): void\n    {\n        $event->user->campaignLog(\n            $event->campaign->id,\n            'thumbnails',\n            'deleted',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Campaigns/Webhooks/LogWebhook.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Campaigns\\Webhooks;\n\nuse App\\Events\\Campaigns\\Webhooks\\WebhookCreated;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookDeleted;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookTested;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookUpdated;\n\nclass LogWebhook\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(WebhookCreated|WebhookUpdated|WebhookDeleted|WebhookTested $event): void\n    {\n        $action = match (true) {\n            $event instanceof WebhookCreated => 'created',\n            $event instanceof WebhookUpdated => 'updated',\n            $event instanceof WebhookDeleted => 'deleted',\n            $event instanceof WebhookTested => 'tested',\n        };\n\n        if ($event instanceof WebhookUpdated && $event->webhook->wasChanged('status')) {\n            $action = $event->webhook->status ? 'enabled' : 'disabled';\n        }\n\n        $event->user->campaignLog(\n            $event->webhook->campaign_id,\n            'webhooks',\n            $action,\n            [\n                'id' => $event->webhook->id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Entities/LogEntity.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Entities;\n\nuse App\\Events\\Entities\\EntityRestored;\n\nclass LogEntity\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(EntityRestored $event): void\n    {\n        $event->user?->campaignLog(\n            $event->entity->campaign_id,\n            'recovery',\n            'entity',\n            [\n                'type' => $event->entity->entityType->code,\n                'name' => $event->entity->name,\n                'id' => $event->entity->id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Posts/LogPost.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Posts;\n\nuse App\\Enums\\UserAction;\nuse App\\Events\\Posts\\PostCreated;\nuse App\\Events\\Posts\\PostDeleted;\nuse App\\Events\\Posts\\PostRestored;\nuse App\\Events\\Posts\\PostUpdated;\nuse App\\Facades\\Identity;\nuse App\\Models\\EntityLog;\nuse App\\Models\\Post;\nuse App\\Services\\Entity\\PostLoggerService;\n\nclass LogPost\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct(protected PostLoggerService $postLoggerService)\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(PostCreated|PostUpdated|PostRestored|PostDeleted $event): void\n    {\n        $action = match (true) {\n            $event instanceof PostCreated => 'created',\n            $event instanceof PostUpdated => 'updated',\n            $event instanceof PostDeleted => 'deleted',\n            $event instanceof PostRestored => 'restored',\n        };\n        $actionId = match (true) {\n            $event instanceof PostCreated => EntityLog::ACTION_CREATE_POST,\n            $event instanceof PostUpdated => EntityLog::ACTION_UPDATE_POST,\n            $event instanceof PostDeleted => EntityLog::ACTION_DELETE_POST,\n            $event instanceof PostRestored => EntityLog::ACTION_RESTORE,\n        };\n\n        $log = new EntityLog;\n        $log->created_by = $event->user->id;\n        $log->parent_id = $event->post->id;\n        $log->parent_type = Post::class;\n        $log->impersonated_by = Identity::getImpersonatorId();\n        $log->action = $actionId;\n        $changes = $this->postLoggerService->post($event->post)->dirty();\n        if ($event instanceof PostUpdated && ! empty($changes)) {\n            $log->changes = $changes;\n        }\n        $log->save();\n\n        // make a campaign admin log when restoring a post since it's an admin feature\n        // not sure if this actually makes sense to have, since it's also available in the post logs\n        //        if ($event instanceof PostRestored) {\n        //            $event->user?->campaignLog(\n        //                $event->post->entity->campaign_id,\n        //                'recovery',\n        //                'post',\n        //                [\n        //                    'name' => $event->post->name,\n        //                    'id' => $event->post->id,\n        //                ]\n        //            );\n        //        }\n\n        $event->user->log(\n            UserAction::post,\n            [\n                'action' => $action,\n                'id' => $event->post->id,\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/SendAdminInviteNotification.php",
    "content": "<?php\n\nnamespace App\\Listeners;\n\nuse App\\Events\\AdminInviteCreated;\nuse App\\Jobs\\Discord\\AdminInviteJob;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\n\nclass SendAdminInviteNotification implements ShouldQueue\n{\n    public function __construct()\n    {\n        //\n    }\n\n    public function handle(AdminInviteCreated $event): void\n    {\n        AdminInviteJob::dispatch($event->adminInvite);\n    }\n}\n"
  },
  {
    "path": "app/Listeners/SendFeatureNotification.php",
    "content": "<?php\n\nnamespace App\\Listeners;\n\nuse App\\Events\\FeatureCreated;\nuse App\\Jobs\\Roadmap\\DiscordFeatureJob;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\n\nclass SendFeatureNotification implements ShouldQueue\n{\n    public function __construct()\n    {\n        //\n    }\n\n    public function handle(FeatureCreated $event): void\n    {\n        DiscordFeatureJob::dispatch($event->feature);\n    }\n}\n"
  },
  {
    "path": "app/Listeners/SendSpotlightNotification.php",
    "content": "<?php\n\nnamespace App\\Listeners;\n\nuse App\\Events\\SpotlightSubmitted;\nuse App\\Jobs\\Spotlight\\DiscordSpotlightJob;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\n\nclass SendSpotlightNotification implements ShouldQueue\n{\n    public function __construct()\n    {\n        //\n    }\n\n    public function handle(SpotlightSubmitted $event): void\n    {\n        DiscordSpotlightJob::dispatch($event->spotlightContent);\n    }\n}\n"
  },
  {
    "path": "app/Listeners/UserEventSubscriber.php",
    "content": "<?php\n\nnamespace App\\Listeners;\n\nuse App\\Enums\\UserAction;\nuse App\\Jobs\\Emails\\MailSettingsChangeJob;\nuse App\\Models\\User;\nuse App\\Services\\Auth\\LoginService;\nuse App\\Services\\Auth\\SessionService;\nuse Illuminate\\Auth\\Events\\Login;\nuse Illuminate\\Auth\\Events\\Logout;\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illuminate\\Events\\Dispatcher;\nuse Illuminate\\Support\\Facades\\Log;\n\n/**\n * @property User $user\n */\nclass UserEventSubscriber\n{\n    public function __construct(\n        protected LoginService $loginService,\n        protected SessionService $sessionService,\n    ) {}\n\n    /**\n     * Handle user login events.\n     */\n    public function handleUserLogin(Login $event): bool\n    {\n        /** @var User $user */\n        $user = $event->user;\n        // Log the user's login\n        if (! $user) {\n            Log::error('Missing user in login event');\n\n            return false;\n        }\n\n        $this->loginService\n            ->user($user)\n            ->logUserActivity()\n            ->updateLastLoginTime()\n            ->clearInactivityFlag()\n            ->loadFlags();\n\n        // Update mailerlite for the login stuff\n        if (! session()->has('first_login') && $user->hasNewsletter()) {\n            MailSettingsChangeJob::dispatch($user);\n        }\n\n        // Process invite token or first login\n        $inviteResult = $this->sessionService->user($user)->handleInviteToken();\n        if ($inviteResult !== null) {\n            return $inviteResult;\n        }\n\n        $firstLoginResult = $this->sessionService->user($user)->handleFirstLogin();\n        if ($firstLoginResult !== null) {\n            return $firstLoginResult;\n        }\n\n        return true;\n    }\n\n    /**\n     * Handle user logout events.\n     */\n    public function handleUserLogout(Logout $event)\n    {\n        // Log the activity\n        if (! $event->user) {\n            return;\n        }\n        if (! $event->user->isBanned()) {\n            $event->user->log(UserAction::logout);\n        }\n    }\n\n    public function handleUserRegistered(Registered $event)\n    {\n        // If the user has an invite-token, we don't want to do anything else\n        if (session()->has('invite_token')) {\n            return;\n        }\n\n        session()->put('first_login', true);\n    }\n\n    /**\n     * Register the listeners for the subscriber.\n     */\n    public function subscribe(Dispatcher $events): void\n    {\n        $events->listen(\n            Login::class,\n            [UserEventSubscriber::class, 'handleUserLogin']\n        );\n\n        $events->listen(\n            Logout::class,\n            [UserEventSubscriber::class, 'handleUserLogout']\n        );\n\n        $events->listen(\n            Registered::class,\n            [UserEventSubscriber::class, 'handleUserRegistered']\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Users/ClearUserCache.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Users;\n\nuse App\\Facades\\UserCache;\n\nclass ClearUserCache\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(object $event): void\n    {\n        $user = $event->campaignRoleUser->user\n            ?? $event->application->user\n            ?? $event->user\n            ?? null;\n\n        UserCache::user($user)->clear();\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Users/SendEmailUpdate.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Users;\n\nuse App\\Jobs\\Emails\\EmailChangeJob;\n\nclass SendEmailUpdate\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(object $event): void\n    {\n        EmailChangeJob::dispatch($event->user, $event->email);\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Users/Subscriptions/LogPremium.php",
    "content": "<?php\n\nnamespace App\\Listeners\\Users\\Subscriptions;\n\nuse App\\Events\\Subscriptions\\AutoRemove;\nuse App\\Events\\Subscriptions\\Boost;\nuse App\\Events\\Subscriptions\\Disable;\nuse App\\Events\\Subscriptions\\Premium;\nuse App\\Events\\Subscriptions\\SuperBoost;\nuse App\\Events\\Subscriptions\\Upgrade;\n\nclass LogPremium\n{\n    /**\n     * Create the event listener.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Handle the event.\n     */\n    public function handle(Boost|SuperBoost|Upgrade|Premium|AutoRemove|Disable $event): void\n    {\n        $action = match (true) {\n            $event instanceof Boost => 'boosted',\n            $event instanceof SuperBoost => 'superboosted',\n            $event instanceof Upgrade => 'upgraded',\n            $event instanceof Premium => 'premium',\n            $event instanceof AutoRemove => 'auto-removed',\n            $event instanceof Disable => 'disabled',\n        };\n\n        $event->user->campaignLog(\n            $event->campaign->id,\n            'premium',\n            $action\n        );\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Campaigns/CsvImport.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Campaigns;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Facades\\Avatar;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Module;\nuse App\\Facades\\UserCache;\nuse App\\Jobs\\Campaigns\\ImportCsv;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignImport;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Services\\CsvValidatorService;\nuse App\\Services\\EntityTypeService;\nuse Livewire\\Attributes\\Validate;\nuse Livewire\\Component;\nuse Livewire\\WithFileUploads;\n\nclass CsvImport extends Component\n{\n    use WithFileUploads;\n\n    public Campaign $campaign;\n\n    public CampaignImport $import;\n\n    public EntityType $type;\n\n    #[Validate('required|exists:entity_types,id')]\n    public int $entityType = 0;\n\n    public array $columnMap = [];\n\n    public array $entityTypes = [];\n\n    public array $headers = [];\n\n    public array $fillableFields = [];\n\n    public array $columns = [];\n\n    public array $fullColumns = [];\n\n    public array $preview = [];\n\n    public bool $canAssign = false;\n\n    public string $tagLabel = '';\n\n    public array $tags = [];\n\n    public bool $success = false;\n\n    public $personalities = [];\n\n    public $appearances = [];\n\n    public function mount(Campaign $campaign, CampaignImport $campaignImport)\n    {\n        $this->campaign = $campaign;\n\n        UserCache::campaign($this->campaign);\n        Avatar::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n        CampaignLocalization::forceCampaign($this->campaign);\n\n        $this->tagLabel = Module::plural(config('entities.ids.tag'), __('entities.tags'));\n\n        $this->import = $campaignImport;\n        $entityTypeService = app(EntityTypeService::class);\n\n        $excluded = [\n            config('entities.ids.bookmark'),\n            config('entities.ids.whiteboard'),\n            config('entities.ids.bookmark'),\n            config('entities.ids.dice_roll'),\n            config('entities.ids.attribute_template'),\n            config('entities.ids.conversation'),\n            config('entities.ids.calendar'),\n        ];\n        $this->entityTypes = $entityTypeService\n            ->campaign($campaign)\n            ->exclude($excluded)\n            ->toSelect();\n\n        $this->entityType = array_key_first($this->entityTypes);\n\n        $csvValidatorService = app(CsvValidatorService::class);\n\n        $this->headers = $csvValidatorService\n            ->campaign($campaign)\n            ->job($campaignImport)\n            ->toSelect();\n\n        $this->preview = $csvValidatorService->preview();\n    }\n\n    public function addPersonality()\n    {\n        $this->personalities[] = null; // Adds a new empty entry\n    }\n\n    public function addAppearance()\n    {\n        $this->appearances[] = null; // Adds a new empty entry\n    }\n\n    public function removePersonality($index)\n    {\n        unset($this->personalities[$index]);\n        $this->personalities = array_values($this->personalities);\n    }\n\n    public function removeAppearance($index)\n    {\n        unset($this->appearances[$index]);\n        $this->appearances = array_values($this->appearances);\n    }\n\n    public function selectEntity()\n    {\n        $this->type = EntityType::where('id', $this->entityType)->first();\n        $this->canAssign = true;\n\n        $fields = app()->make(Entity::class)->getFillable();\n        if (! $this->type->isCustom()) {\n            $fields = array_unique(array_merge($fields, $this->type->getMiscClass()->getFillable()));\n        }\n\n        $fields = array_values(array_filter($fields, fn ($field) => $this->isImportableField($field)));\n\n        foreach ($fields as $field) {\n            $this->fillableFields[$field] = $this->fieldName($field);\n        }\n\n        $this->fullColumns = $this->import->config['filled_columns'];\n    }\n\n    protected function isImportableField(string $field): bool\n    {\n        $excluded = [\n            'is_template',\n            'is_attributes_private',\n            'slug',\n            'source',\n            'header_image',\n        ];\n\n        if (str_ends_with($field, '_id') || str_ends_with($field, 'uuid')) {\n            return false;\n        }\n\n        return ! in_array($field, $excluded);\n    }\n\n    public function fieldName(string $field): string\n    {\n        $keys = [\n            'crud.fields.' . $field,\n            'fields.' . $field . '.label',\n            $this->type->pluralCode() . '.fields.' . $field,\n        ];\n\n        foreach ($keys as $key) {\n            $translation = __($key);\n            if ($translation !== $key) {\n                return $translation;\n            }\n        }\n\n        return $field;\n    }\n\n    public function updatedColumnMap($value, $key)\n    {\n        // If the selected value is empty or null\n        if (blank($value)) {\n            // Remove the key entirely from the array\n            unset($this->columnMap[$key]);\n        }\n    }\n\n    public function submit()\n    {\n        $tagIds = [];\n        foreach ($this->tags as $tag) {\n            $tagIds[] = $tag['id'];\n        }\n        $logs = $this->import->logs;\n        $logs[] = 'Mapping form submitted';\n\n        $this->import->update(['status_id' => CampaignImportStatus::PROCESSING, 'logs' => $logs]);\n        ImportCsv::dispatch($this->import, auth()->user()->id, $this->entityType, $this->columnMap, $tagIds, $this->appearances, $this->personalities)->onQueue('heavy');\n\n        return $this->redirectRoute(\n            'campaign.import',\n            ['campaign' => $this->campaign]\n        );\n    }\n\n    public function render()\n    {\n        return view('livewire.campaigns.csv-import');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Campaigns/ExportsTable.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Campaigns;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignExport;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Number;\nuse Livewire\\Component;\nuse Livewire\\WithPagination;\n\nclass ExportsTable extends Component\n{\n    use WithPagination;\n\n    public $sortColumn = 'created_at'; // Default column to sort by\n\n    public $sortDirection = 'desc'; // Default sort direction (asc/desc)\n\n    public $updateInterval = 15; // Update interval in seconds\n\n    protected $listeners = ['refreshTable' => '$refresh']; // Listen for table refresh event\n\n    public Campaign $campaign;\n\n    public int $pageNumber = 1;\n\n    public bool $hasMorePages;\n\n    public function mount(Campaign $campaign)\n    {\n        $this->campaign = $campaign;\n    }\n\n    public function sortBy($column)\n    {\n        // Toggle sorting direction if the same column is clicked\n        if ($this->sortColumn === $column) {\n            $this->sortDirection = $this->sortDirection === 'asc' ? 'desc' : 'asc';\n        } else {\n            $this->sortColumn = $column;\n            $this->sortDirection = 'asc';\n        }\n    }\n\n    public function render()\n    {\n        // $campaignExports = CampaignExport::orderBy($this->sortColumn, $this->sortDirection)->paginate(10);\n\n        $campaignExports = $this->campaign->campaignExports()\n            ->with(['user'])\n            ->orderBy($this->sortColumn, $this->sortDirection)\n            // ->orderBy('updated_at', 'DESC')\n            ->paginate();\n\n        return view('livewire.campaigns.exports-table', [\n            'campaignExports' => $campaignExports,\n        ]);\n    }\n\n    public function status(CampaignExport $export): string\n    {\n        $key = 'running';\n        if ($export->failed()) {\n            $key = 'failed';\n        } elseif ($export->scheduled()) {\n            $key = 'scheduled';\n        } elseif ($export->finished()) {\n            $key = 'finished';\n        }\n\n        return __('campaigns/export.status.' . $key);\n    }\n\n    public function type(CampaignExport $export): string\n    {\n        $key = 'Markdown';\n        if ($export->type == 1) {\n            $key = 'JSON';\n        }\n\n        return $key;\n    }\n\n    public function progress(CampaignExport $model): string\n    {\n        if ($model->finished()) {\n            return '100%';\n        } elseif (! $model->running()) {\n            return '';\n        } elseif (empty($model->progress)) {\n            return '<i>' . __('Calculating') . '</i>';\n        }\n\n        return $model->progress . '%';\n    }\n\n    public function size(CampaignExport $model): string\n    {\n        if (! $model->finished()) {\n            return '';\n        }\n        if (empty($model->size)) {\n            return '<1 MB';\n        }\n\n        return Number::format($model->size) . ' MB';\n    }\n\n    public function download(CampaignExport $model): string\n    {\n        if (! $model->finished()) {\n            return '';\n        }\n        if ($model->path && Storage::disk('s3')->exists($model->path)) {\n            // Sometimes there are bugs and a job doesn't get queued to delete the file.\n            // This is a dirty hack in the meantime\n            if ($model->created_at->diffInHours(Carbon::now()) > config('limits.campaigns.export')) {\n                Storage::disk('s3')->delete($model->path);\n\n                return '';\n            }\n            if (Storage::disk('s3')->visibility($model->path) == 'private') {\n                Storage::disk('s3')->setVisibility($model->path, 'public');\n            }\n            $html = '<a class=\"flex items-center gap-1 text-link\" href=\"' . Storage::disk('s3')->url($model->path) . '\">' .\n                '<i class=\"fa-regular fa-download\" aria-hidden=\"true\"></i>' .\n                __('campaigns/export.actions.download') .\n                '</a>';\n\n            return $html;\n        }\n\n        return '<span class=\"text-neutral-content italic\">' . __('campaigns/export.expired') . '</span>';\n    }\n\n    public function sortIcon(): string\n    {\n\n        $icon = 'fa-regular fa-arrow-down-z-a';\n\n        if ($this->sortDirection == 'asc') {\n            $icon = 'fa-regular fa-arrow-up-a-z';\n        }\n\n        return '<i class=\"' . $icon . ' mr-0!\"></i>';\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Campaigns/Tags.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Campaigns;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\Tag;\nuse Livewire\\Attributes\\Modelable;\nuse Livewire\\Component;\n\nclass Tags extends Component\n{\n    public Campaign $campaign;\n\n    public string $search = '';\n\n    #[Modelable]\n    public array $selected = [];\n\n    public array $options = [];\n\n    public bool $open = false;\n\n    public function mount(Campaign $campaign, array $selected = [])\n    {\n        $this->campaign = $campaign;\n        $this->selected = $selected;\n\n        // Ensure campaign context is always set\n        $this->bootCampaignContext();\n    }\n\n    /**\n     * Input focus → open dropdown immediately\n     */\n    public function show(): void\n    {\n        $this->open = true;\n        $this->loadDefaultTags();\n    }\n\n    /**\n     * Typing → debounce → search\n     */\n    public function updatedSearch(): void\n    {\n        $this->open = true;\n\n        // If empty, revert to default list\n        if ($this->search === '') {\n            $this->loadDefaultTags();\n\n            return;\n        }\n\n        // Do not search until 2+ chars\n        if (strlen($this->search) < 2) {\n            $this->options = [];\n\n            return;\n        }\n\n        $this->bootCampaignContext();\n\n        $this->options = Tag::query()\n            ->where('name', 'like', '%' . $this->search . '%')\n            ->limit(10)\n            ->get()\n            ->map(fn ($tag) => [\n                'id' => $tag->id,\n                'label' => $tag->name,\n            ])\n            ->toArray();\n    }\n\n    protected function loadDefaultTags(): void\n    {\n        $this->bootCampaignContext();\n\n        $this->options = Tag::query()\n            ->orderBy('name') // or ->latest(), ->popular()\n            ->limit(10)\n            ->get()\n            ->map(fn ($tag) => [\n                'id' => $tag->id,\n                'label' => $tag->name,\n            ])\n            ->toArray();\n    }\n\n    protected function bootCampaignContext(): void\n    {\n        UserCache::campaign($this->campaign);\n        Avatar::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n        CampaignLocalization::forceCampaign($this->campaign);\n    }\n\n    public function select($id, $label): void\n    {\n        if (! collect($this->selected)->pluck('id')->contains($id)) {\n            $this->selected[] = compact('id', 'label');\n        }\n\n        $this->search = '';\n        $this->open = false;\n    }\n\n    public function remove($id): void\n    {\n        $this->selected = array_values(\n            array_filter($this->selected, fn ($item) => $item['id'] !== $id)\n        );\n    }\n\n    public function render()\n    {\n        return view('livewire.campaigns.tags');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/EntityListing.php",
    "content": "<?php\n\nnamespace App\\Livewire;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse Illuminate\\Support\\Collection;\nuse Livewire\\Attributes\\Locked;\nuse Livewire\\Component;\nuse Livewire\\WithPagination;\n\nclass EntityListing extends Component\n{\n    use WithPagination;\n\n    #[Locked]\n    public Collection $entities;\n\n    #[Locked]\n    public CampaignDashboardWidget $widget;\n\n    #[Locked]\n    public Campaign $campaign;\n\n    #[Locked]\n    public int $pageNumber = 1;\n\n    #[Locked]\n    public bool $hasMorePages;\n\n    public function mount(Campaign $campaign, CampaignDashboardWidget $widget)\n    {\n        $this->entities = new Collection;\n        $this->campaign = $campaign;\n        $this->widget = $widget;\n        $entities = $widget->entities();\n        $this->entities->push(...$entities->items());\n        $this->hasMorePages = $entities->hasMorePages();\n        // $this->loadEntities();\n    }\n\n    public function loadEntities()\n    {\n        // We need this here for the \"load more entities\" button that loads more data\n        request()->route()->setParameter('campaign', $this->campaign);\n        UserCache::campaign($this->campaign);\n        Avatar::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n\n        $this->pageNumber += 1;\n        $entities = $this->widget->entities($this->pageNumber);\n\n        $this->hasMorePages = $entities->hasMorePages();\n\n        $this->entities->push(...$entities->items());\n    }\n\n    public function render()\n    {\n        // We need this here for when the widget gets re-rendered\n        request()->route()?->setParameter('campaign', $this->campaign);\n        UserCache::campaign($this->campaign);\n        Avatar::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n\n        return view('livewire.dashboards.entity-listing');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Roadmap/Form.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Roadmap;\n\nuse App\\Enums\\FeatureStatus;\nuse App\\Models\\Feature;\nuse App\\Models\\FeatureFile;\nuse App\\Models\\FeatureVote;\nuse Livewire\\Attributes\\Url;\nuse Livewire\\Attributes\\Validate;\nuse Livewire\\Component;\nuse Livewire\\WithFileUploads;\n\nclass Form extends Component\n{\n    use WithFileUploads;\n\n    #[Validate('image|nullable|max:3072')] // 3MB Max\n    public $file;\n\n    #[Validate('required|min:5')]\n    public string $title = '';\n\n    #[Validate('required|min:5')]\n    public string $description = '';\n\n    #[Url]\n    public string $from = '';\n\n    public bool $success = false;\n\n    public int $iteration = 0;\n\n    public $duplicates;\n\n    public function save()\n    {\n        $this->authorize('create', Feature::class);\n        $this->validate();\n\n        $feat = new Feature;\n        $feat->created_by = auth()->user()->id;\n        $feat->name = $this->title;\n        $feat->description = $this->description;\n        $feat->status_id = FeatureStatus::Draft;\n        if (! empty($this->from)) {\n            $feat->meta = ['from' => $this->from];\n        }\n        $feat->save();\n\n        if (auth()->user()->can('vote', $feat)) {\n            /** @var FeatureVote $vote */\n            $vote = new FeatureVote;\n            $vote->feature_id = $feat->id;\n            $vote->user_id = auth()->user()->id;\n            $vote->save();\n            $feat->upvote_count++;\n            $feat->updateQuietly();\n        }\n\n        if ($this->file) {\n            $file = $this->file->storeAs('features/' . $feat->id, uniqid() . '.' . $this->file->getClientOriginalExtension(), 's3');\n            $featFile = new FeatureFile;\n            $featFile->feature_id = $feat->id;\n            $featFile->path = $file;\n            $featFile->save();\n        }\n\n        $this->success = true;\n        $this->title = '';\n        $this->description = '';\n        $this->file = null;\n        $this->iteration++;\n    }\n\n    public function updated()\n    {\n        if (empty($this->title)) {\n            return;\n        }\n\n        $titles = explode(' ', $this->title);\n        $words = [];\n        $base = Feature::approved();\n        foreach ($titles as $word) {\n            // Let's try and skip small descriptive words\n            if (mb_strlen($word) <= 4) {\n                continue;\n            }\n            $words[] = $word;\n        }\n        if (empty($words)) {\n            return;\n        }\n        $base->where(function ($sub) use ($words) {\n            foreach ($words as $word) {\n                $sub->orWhere('name', 'like', '%' . $word . '%');\n            }\n\n            return $sub;\n        });\n\n        $this->duplicates = $base->limit(5)->get();\n    }\n\n    public function open(Feature $feature)\n    {\n        $this->dispatch('open-idea', idea: $feature->id);\n    }\n\n    public function render()\n    {\n        return view('livewire.roadmap.form');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Roadmap/Ideas.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Roadmap;\n\nuse App\\Models\\Feature;\nuse Livewire\\Attributes\\Url;\nuse Livewire\\Component;\nuse Livewire\\WithPagination;\n\nclass Ideas extends Component\n{\n    use WithPagination;\n\n    #[Url]\n    public string $search;\n\n    public function open(Feature $feature)\n    {\n        $this->dispatch('open-idea', idea: $feature->id);\n    }\n\n    public function render()\n    {\n        $ideas = Feature::approved();\n        if (auth()->check()) {\n            $ideas->with('uservote');\n        }\n\n        if (isset($this->search) && $this->search != '') {\n            $ideasQuery = $ideas->search($this->search)->paginate(15, ['*'], 'page', 1);\n        } else {\n            $ideasQuery = $ideas->paginate(15);\n        }\n\n        return view('livewire.roadmap.ideas', [\n            'ideas' => $ideasQuery,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Roadmap/Upvote.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Roadmap;\n\nuse App\\Jobs\\Discord\\UpdateFeatureUpvotes;\nuse App\\Models\\Feature;\nuse App\\Models\\FeatureVote;\nuse Livewire\\Component;\n\nclass Upvote extends Component\n{\n    public Feature $feature;\n\n    public int $count;\n\n    public bool $isGuest = false;\n\n    public bool $isUnsubbed = false;\n\n    public bool $col;\n\n    public function mount(Feature $feature, bool $col = true)\n    {\n        $this->feature = $feature;\n        $this->count = $feature->upvote_count;\n        $this->col = $col;\n    }\n\n    public function upvote(): void\n    {\n        if (auth()->guest()) {\n            $this->isGuest = true;\n\n            return;\n        } elseif (! auth()->user()->can('vote', $this->feature)) {\n            $this->isUnsubbed = true;\n\n            return;\n        }\n\n        /** @var FeatureVote $vote */\n        $vote = FeatureVote::where('user_id', auth()->user()->id)\n            ->where('feature_id', $this->feature->id)\n            ->firstOrNew();\n        if ($vote->exists) {\n            $vote->delete();\n            $this->feature->upvote_count--;\n            $this->feature->updateQuietly();\n            $this->count--;\n        } else {\n            $vote->feature_id = $this->feature->id;\n            $vote->user_id = auth()->user()->id;\n            $vote->save();\n            $this->feature->upvote_count++;\n            $this->feature->updateQuietly();\n            $this->count++;\n        }\n\n        UpdateFeatureUpvotes::dispatch($this->feature->id);\n    }\n\n    public function render()\n    {\n        return view('livewire.roadmap.upvote');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Roadmap.php",
    "content": "<?php\n\nnamespace App\\Livewire;\n\nuse App\\Models\\Feature;\nuse App\\Models\\FeatureCategory;\nuse Livewire\\Attributes\\On;\nuse Livewire\\Attributes\\Url;\nuse Livewire\\Component;\n\nclass Roadmap extends Component\n{\n    #[Url]\n    public string $status;\n\n    #[Url]\n    public int $idea;\n\n    public Feature $feature;\n\n    public function mount()\n    {\n        if (isset($this->idea) && ! empty($this->idea)) {\n            $feat = Feature::visible()->where('id', $this->idea)->first();\n            if ($feat) {\n                $this->feature = $feat;\n            }\n        }\n    }\n\n    public function inProgress()\n    {\n        $this->status = 'in-progress';\n    }\n\n    public function ideas()\n    {\n        $this->status = 'ideas';\n    }\n\n    public function done()\n    {\n        $this->status = 'done';\n    }\n\n    #[On('open-idea')]\n    public function openIdea($idea)\n    {\n        $this->idea = $idea;\n        $this->feature = Feature::visible()->where('id', $this->idea)->first();\n        $this->dispatch('open-idea-dialog', url: route('roadmap.feature.show', $this->feature));\n    }\n\n    public function open(Feature $feature)\n    {\n        $this->dispatch('open-idea', idea: $feature->id);\n    }\n\n    #[On('idea-closed')]\n    public function close()\n    {\n        $this->idea = 0;\n        unset($this->feature);\n    }\n\n    public function render()\n    {\n        $with = ['features', 'next', 'now', 'later', 'done'];\n        if (auth()->check()) {\n            $with[] = 'next.uservote';\n            $with[] = 'now.uservote';\n            $with[] = 'later.uservote';\n            $with[] = 'done.uservote';\n        }\n        $categories = FeatureCategory::with($with)->get();\n\n        return view('livewire.roadmap', ['categories' => $categories]);\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Users/Otp.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Users;\n\nuse App\\Models\\PasswordSecurity;\nuse App\\Models\\User;\nuse Livewire\\Attributes\\Validate;\nuse Livewire\\Component;\nuse PragmaRX\\Google2FA\\Google2FA;\n\nclass Otp extends Component\n{\n    public $duplicates;\n\n    public bool $clickedBefore = false;\n\n    protected $listeners = ['refreshTable' => '$refresh']; // Listen for table refresh event\n\n    #[Validate('required|numeric')]\n    public string $otp = '';\n\n    /*\n    * Generates secret code for 2fa\n    */\n    public function generate2faSecretCode()\n    {\n        /** @var User $user */\n        $user = auth()->user();\n\n        $otp = new Google2FA;\n\n        // Generate a new Google2FA code for User\n        PasswordSecurity::create([\n            'user_id' => $user->id,\n            'google2fa_enable' => 0,\n            'google2fa_secret' => $otp->generateSecretKey(),\n        ]);\n        $this->dispatch('refreshTable');\n    }\n\n    /*\n    * Enables 2fa for the current user.\n    */\n    public function enable2fa()\n    {\n        $this->validate();\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        // Enable OTP if the Authenticator code matches secret\n        $otpModel = new Google2FA;\n        $valid = $otpModel->verifyKey($user->passwordSecurity->google2fa_secret, $this->otp);\n\n        // If OTP code is valid enable OTP\n        if ($valid) {\n            $user->passwordSecurity->update(['google2fa_enable' => 1]);\n            // 2FA is enabled, log out the user and ask them to set up.\n            auth()->logout();\n            session()->flush();\n\n            $this->redirectRoute('login', ['success' => __('settings.account.2fa.success_enable')]);\n        }\n        session()->flash('otp-error', __('settings.account.2fa.error_enable'));\n    }\n\n    /*\n    * Disables 2fa for the current user.\n    */\n    public function disable2fa()\n    {\n        if ($this->clickedBefore) {\n            /** @var User $user */\n            $user = auth()->user();\n\n            // Update disabling OTP\n            $user->passwordSecurity->google2fa_enable = 0;\n            $user->passwordSecurity->save();\n            session()->flash('disable-success', __('settings.account.2fa.success_disable'));\n        } else {\n            $this->clickedBefore = true;\n        }\n    }\n\n    public function render()\n    {\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        return view('livewire.users.otp', ['user' => $user]);\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Widgets/GalleryCarousel.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Widgets;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\Image;\nuse Livewire\\Attributes\\Locked;\nuse Livewire\\Component;\n\nclass GalleryCarousel extends Component\n{\n    #[Locked]\n    public CampaignDashboardWidget $widget;\n\n    #[Locked]\n    public Campaign $campaign;\n\n    #[Locked]\n    public array $images = [];\n\n    #[Locked]\n    public bool $readyToLoad = false;\n\n    #[Locked]\n    public bool $showName = false;\n\n    public function mount(CampaignDashboardWidget $widget, Campaign $campaign): void\n    {\n        $this->widget = $widget;\n        $this->campaign = $campaign;\n        $this->showName = $this->widget->conf('show_name') == '1';\n    }\n\n    public function loadImages(): void\n    {\n        $this->readyToLoad = true;\n\n        request()->route()->setParameter('campaign', $this->campaign);\n        UserCache::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n\n        $folderId = $this->widget->conf('folder_id');\n        if (empty($folderId)) {\n            return;\n        }\n\n        $images = Image::where('campaign_id', $this->campaign->id)\n            ->where('folder_id', $folderId)\n            ->where('is_folder', false)\n            ->acl(true)\n            ->orderBy('name', 'asc')\n            ->limit(30)\n            ->get();\n\n        $this->images = $images\n            ->filter(fn (Image $image) => $image->hasThumbnail())\n            ->map(fn (Image $image) => [\n                'url' => $image->getUrl(800, 600),\n                'full' => $image->getUrl(),\n                'name' => $image->name,\n            ])\n            ->values()\n            ->toArray();\n    }\n\n    public function render()\n    {\n        request()->route()?->setParameter('campaign', $this->campaign);\n        UserCache::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n\n        return view('livewire.widgets.gallery-carousel');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/Widgets/RandomEntity.php",
    "content": "<?php\n\nnamespace App\\Livewire\\Widgets;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\Dashboard;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\Entity;\nuse Livewire\\Attributes\\Locked;\nuse Livewire\\Component;\n\nclass RandomEntity extends Component\n{\n    #[Locked]\n    public CampaignDashboardWidget $widget;\n\n    #[Locked]\n    public Entity $entity;\n\n    #[Locked]\n    public Campaign $campaign;\n\n    #[Locked]\n    public ?string $customName;\n\n    #[Locked]\n    public string $specificPreview;\n\n    #[Locked]\n    public bool $readyToLoad = false;\n\n    public function mount(CampaignDashboardWidget $widget, Campaign $campaign)\n    {\n        $this->widget = $widget;\n        $this->campaign = $campaign;\n    }\n\n    public function loadEntity(): void\n    {\n        $this->readyToLoad = true;\n\n        // We need this here for the \"load more entities\" button that loads more data\n        request()->route()->setParameter('campaign', $this->campaign);\n        UserCache::campaign($this->campaign);\n        Avatar::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n\n        $entity = $this->widget->randomEntity();\n        if (! $entity) {\n            return;\n        }\n        $this->entity = $entity;\n        Dashboard::add($this->entity);\n        $this->widget->setEntity($this->entity);\n\n        $this->specificPreview = 'dashboard.widgets.previews.' . $this->entity->entityType->code;\n        if ($entity->isMap()) {\n            $this->specificPreview = 'dashboard.widgets.previews.random-map';\n        }\n\n        $this->customName = ! empty($this->widget->conf('text')) ? str_replace('{name}', $this->entity->name, $this->widget->conf('text')) : null;\n    }\n\n    public function render()\n    {\n        // We need this here for when the widget gets re-rendered\n        request()->route()?->setParameter('campaign', $this->campaign);\n        UserCache::campaign($this->campaign);\n        Avatar::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n\n        return view('livewire.widgets.random-entity');\n    }\n}\n"
  },
  {
    "path": "app/Mail/Admin/Subscriptions/ConvertedMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Admin\\Subscriptions;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Enums\\UserFlags;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Attachment;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ConvertedMail extends Mailable\n{\n    use Queueable, SerializesModels;\n\n    /**\n     * Create a new message instance.\n     */\n    public function __construct(public User $user, public PricingPeriod $period)\n    {\n        //\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        $subject = 'Sub: Converted ' . ucfirst($this->period->name) . ' ' . $this->user->pledge;\n\n        return new Envelope(\n            subject: $subject,\n            tags: ['admin-new'],\n            from: new Address(config('app.email'), 'Kanka Admin'),\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        $trial = $this->user->flags()->where('flag', UserFlags::startTrial)->first();\n\n        return new Content(\n            markdown: 'emails.subscriptions.new.md',\n            with: ['lastCancel' => null, 'user' => $this->user, 'period' => $this->period, 'trial' => $trial],\n        );\n    }\n\n    /**\n     * Get the attachments for the message.\n     *\n     * @return array<int, Attachment>\n     */\n    public function attachments(): array\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "app/Mail/Purge/FirstWarning.php",
    "content": "<?php\n\nnamespace App\\Mail\\Purge;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Attachment;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass FirstWarning extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    public mixed $campaigns;\n\n    public $mailer = 'ses';\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user, mixed $campaigns)\n    {\n        $this->user = $user;\n        $this->campaigns = $campaigns;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            from: new Address('hello@kanka.io', 'Kanka'),\n            subject: __('emails/purge/first.title', ['amount' => config('purge.users.first.limit')]),\n            tags: ['purge', 'first']\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.purge.first.md',\n        );\n    }\n\n    /**\n     * Get the attachments for the message.\n     *\n     * @return array<int, Attachment>\n     */\n    public function attachments(): array\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "app/Mail/Purge/SecondWarning.php",
    "content": "<?php\n\nnamespace App\\Mail\\Purge;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Attachment;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass SecondWarning extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    public mixed $campaigns;\n\n    public $mailer = 'ses';\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user, mixed $campaigns)\n    {\n        $this->user = $user;\n        $this->campaigns = $campaigns;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            from: new Address('hello@kanka.io', 'Kanka'),\n            subject: __('emails/purge/second.title', ['amount' => config('purge.users.second.limit')]),\n            tags: ['purge', 'second']\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.purge.second.md',\n        );\n    }\n\n    /**\n     * Get the attachments for the message.\n     *\n     * @return array<int, Attachment>\n     */\n    public function attachments(): array\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/Admin/CancelledSubscriptionMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\Admin;\n\nuse App\\Models\\SubscriptionCancellation;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass CancelledSubscriptionMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public SubscriptionCancellation $cancellation;\n\n    public User $user;\n\n    public function __construct(SubscriptionCancellation $cancellation)\n    {\n        $this->cancellation = $cancellation;\n        $this->user = $cancellation->user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: 'Sub: Cancelled ' . $this->user->pledge,\n            tags: ['admin-cancelled'],\n            from: new Address(config('app.email'), 'Kanka Admin'),\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.cancelled.md',\n            with: ['cancellation' => $this->cancellation, 'user' => $this->user],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/Admin/DowngradedSubscriptionMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\Admin;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass DowngradedSubscriptionMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var User\n     */\n    public $user;\n\n    public $reason;\n\n    public $custom;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user, ?string $reason = null, ?string $custom = null)\n    {\n        $this->user = $user;\n        $this->reason = $reason;\n        $this->custom = $custom;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: 'Subscription: Downgraded ' . $this->user->pledge,\n            tags: ['admin-downgrade'],\n            from: new Address(config('app.email'), 'Kanka Admin'),\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.changed.md',\n            with: ['user' => $this->user, 'reason' => $this->reason, 'custom' => $this->custom],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/Admin/NewSubscriptionMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\Admin;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Models\\User;\nuse App\\Models\\UserLog;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\nuse Laravel\\Cashier\\Subscription;\n\nclass NewSubscriptionMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    public bool $new;\n\n    public PricingPeriod $period;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user, PricingPeriod $period)\n    {\n        $this->user = $user;\n        $this->period = $period;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        $action = 'New';\n        // Check if user was previously subbed\n\n        // Auto-cancelled subs due to credit card issues don't trigger a cancellation, so we need to check previous\n        // subs instead.\n        $cancelled = Subscription::where('user_id', $this->user->id)->canceled()->count();\n        if ($cancelled > 0) {\n            $action = 'Renewed';\n        }\n\n        $subject = 'Sub: ' . $action . ' ' . ucfirst($this->period->name) . ' ' . $this->user->pledge;\n\n        return new Envelope(\n            subject: $subject,\n            tags: ['admin-new'],\n            from: new Address(config('app.email'), 'Kanka Admin'),\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        $lastCancel = $this->user->cancellations()->orderByDesc('id')->first();\n\n        /** @var ?UserLog $log */\n        $log = $this->user->logs()->whereNotNull('country')->latest()->first();\n\n        return new Content(\n            markdown: 'emails.subscriptions.new.md',\n            with: ['lastCancel' => $lastCancel, 'user' => $this->user, 'period' => $this->period, 'trial' => false, 'country' => $log?->country],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/Admin/NewTrialAcceptedMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\Admin;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass NewTrialAcceptedMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: 'Trial accepted',\n            tags: ['admin-trial-new'],\n            from: new Address(config('app.email'), 'Kanka Admin'),\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.trial.md',\n            with: ['user' => $this->user],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/Admin/PaypalRenewedMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\Admin;\n\nuse App\\Models\\User;\nuse App\\Models\\UserLog;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass PaypalRenewedMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        $action = 'Renewed';\n\n        $subject = 'Sub: ' . $action . ' Yearly ' . $this->user->pledge;\n\n        return new Envelope(\n            subject: $subject,\n            tags: ['admin-new'],\n            from: new Address(config('app.email'), 'Kanka Admin'),\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        $lastCancel = null;\n\n        /** @var ?UserLog $log */\n        $log = $this->user->logs()->whereNotNull('country')->latest()->first();\n\n        return new Content(\n            markdown: 'emails.subscriptions.new.md',\n            with: ['lastCancel' => $lastCancel, 'user' => $this->user, 'period' => 'Yearly', 'trial' => false, 'country' => $log?->country],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/CancelledUserSubscriptionMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\SubscriptionCancellation;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass CancelledUserSubscriptionMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public SubscriptionCancellation $cancellation;\n\n    public User $user;\n\n    public function __construct(SubscriptionCancellation $cancellation)\n    {\n        $this->cancellation = $cancellation;\n        $this->user = $cancellation->user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            from: new Address(config('app.email'), 'Kanka Team'),\n            subject: 'Confirmation: ' . $this->cancellation->tier . ' subscription cancellation',\n            tags: ['cancelled']\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.cancelled.user-md',\n            with: ['cancellation' => $this->cancellation, 'user' => $this->user],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/EmailChangeMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass EmailChangeMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var User\n     */\n    public $user;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: __('emails/activity/email.title'),\n            tags: ['email-change']\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.activity.email-change-md',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/ExpiringCardEmail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ExpiringCardEmail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var User\n     */\n    public $user;\n\n    public $date;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: __('emails/subscriptions/expiring.title'),\n            tags: ['expiring']\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.expiring.user-md',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/FailedUserSubscriptionMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass FailedUserSubscriptionMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var User\n     */\n    public $user;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: 'Issue with your Kanka subscription',\n            tags: ['failed']\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.charge-failed.user-md',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/NewElementalSubscriptionMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\Pledge;\nuse App\\Models\\Tier;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass NewElementalSubscriptionMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var User\n     */\n    public $user;\n\n    /**\n     * @var Tier\n     */\n    public $tier;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n        $this->tier = Tier::where('name', Pledge::ELEMENTAL)->first();\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            from: new Address(config('app.email'), 'Kanka Team'),\n            subject: 'Thank you, and welcome!',\n            tags: ['elemental']\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.new.elemental',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/NewSubscriberMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\Tier;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass NewSubscriberMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    public Tier $tier;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user, Tier $tier)\n    {\n        $this->user = $user;\n        $this->tier = $tier;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            from: new Address(config('app.email'), 'Kanka Team'),\n            subject: 'Thank you, and welcome!',\n            tags: ['elemental']\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.new.' . $this->tier->code,\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/PaypalExpiringMail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Collection;\n\nclass PaypalExpiringMail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    public string $expiryDate;\n\n    public ?string $premiumCampaignName;\n\n    public int $premiumCampaignCount;\n\n    public int $players;\n\n    public int $plugins;\n\n    public bool $discord;\n\n    public string $renewUrl;\n\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n\n        $subscription = $user->subscription('kanka');\n        $this->expiryDate = $subscription?->ends_at?->isoFormat('MMMM D, Y') ?? '';\n        $this->renewUrl = route('paypal.renew');\n\n        $this->discord = (bool) $user->discord();\n\n        /** @var Collection $premiumCampaigns */\n        $premiumCampaigns = $user->boosts()\n            ->with([\n                'campaign' => fn ($sub) => $sub->select('campaigns.id', 'campaigns.name'),\n                'campaign.members',\n                'campaign.plugins',\n            ])\n            ->groupBy('campaign_id')\n            ->get();\n\n        $firstCampaign = $premiumCampaigns->first();\n        $this->premiumCampaignName = $firstCampaign?->campaign?->name;\n        $this->premiumCampaignCount = $premiumCampaigns->count();\n\n        /** @var Collection<int, int> $members */\n        $members = new Collection;\n        $this->plugins = 0;\n\n        if ($firstCampaign) {\n            foreach ($firstCampaign->campaign->members as $member) {\n                $members->push($member->user_id);\n            }\n            $this->plugins = $firstCampaign->campaign->plugins->count();\n        }\n\n        $this->players = $members->unique()->reject(fn ($userId) => $userId === $user->id)->count();\n    }\n\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: __('emails/subscriptions/paypal-expiring.title'),\n            tags: ['user', 'paypal-expiring'],\n        );\n    }\n\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.paypal-expiring.user',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/UpcomingYearlyEmail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\User;\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass UpcomingYearlyEmail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var User\n     */\n    public $user;\n\n    public $date;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n        $this->date = Carbon::now()->addMonth();\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: __('emails/subscriptions/upcoming.title'),\n            tags: ['user', 'upcoming-yearly'],\n        );\n    }\n\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.subscriptions.upcoming.user',\n            with: ['user' => $this->user, 'date' => $this->date],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/Subscription/User/ValidationEmail.php",
    "content": "<?php\n\nnamespace App\\Mail\\Subscription\\User;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ValidationEmail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    public string $url;\n\n    public $date;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user, string $url)\n    {\n        $this->user = $user;\n        $this->url = $url;\n    }\n\n    /**\n     * Build the message.\n     *\n     * @return $this\n     */\n    public function build()\n    {\n        return $this\n            ->from(['address' => config('app.email'), 'name' => 'Kanka Team'])\n            ->subject(__('emails/subscriptions/validation.title'))\n            ->view('emails.subscriptions.validation.user-html')\n            ->tag('validation');\n    }\n}\n"
  },
  {
    "path": "app/Mail/Users/NewPassword.php",
    "content": "<?php\n\nnamespace App\\Mail\\Users;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass NewPassword extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    public User $user;\n\n    public $mailer = 'ses';\n\n    /**\n     * Create a new message instance.\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: __('emails/activity/password.title'),\n            tags: ['user', 'new-password'],\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.activity.password',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mail/WelcomeEmail.php",
    "content": "<?php\n\nnamespace App\\Mail;\n\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Address;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass WelcomeEmail extends Mailable\n{\n    use Queueable;\n    use SerializesModels;\n\n    /**\n     * @var User\n     */\n    public $user;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct(User $user)\n    {\n        $this->user = $user;\n    }\n\n    /**\n     * Get the message envelope.\n     */\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            subject: __('emails/welcome.title'),\n            tags: ['welcome'],\n            from: new Address(config('app.email'), 'Kanka.io'),\n        );\n    }\n\n    /**\n     * Get the message content definition.\n     */\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'emails.welcome.2024.text',\n            with: ['user' => $this->user],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Models/Ability.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Arr;\n\n/**\n * Class Ability\n *\n * @property mixed|null $charges\n * @property ?Ability $parent\n * @property Ability[] $orderedAbilities\n * @property Collection|Entity[] $entities\n *\n * @method static self|Builder ordered()\n */\nclass Ability extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'campaign_id',\n        'name',\n        'is_private',\n        'charges',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'charges',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'charges',\n    ];\n\n    public function entities()\n    {\n        return $this\n            ->belongsToMany(Entity::class, 'entity_abilities')\n            ->withPivot(['visibility_id', 'id']);\n    }\n\n    public function entityAbilities(): HasMany\n    {\n        return $this->hasMany(EntityAbility::class, 'ability_id')\n            ->with('entity')\n            ->has('entity');\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        $this->entities()->detach();\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.ability');\n    }\n\n    /**\n     * Attach an entity to the ability\n     */\n    public function attachEntity(array $request): int\n    {\n        $entityIds = Arr::get($request, 'entities');\n        $count = 0;\n        $visibility = Arr::get($request, 'visibility_id', Visibility::All);\n        $sync = [];\n\n        foreach ($entityIds as $entity) {\n            $sync[$entity] = ['visibility_id' => $visibility];\n            $count++;\n        }\n        $this->entities()->syncWithoutDetaching($sync);\n\n        return $count;\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if (! empty($this->charges)) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n}\n"
  },
  {
    "path": "app/Models/Ad.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property int $section\n * @property int $created_by\n * @property bool|int $is_active\n * @property string $customer\n * @property string $html\n */\nclass Ad extends Model\n{\n    public const int SECTION_SIDEBAR = 1;\n\n    public const int SECTION_BANNER = 2;\n\n    public const int SECTION_FOOTER = 3;\n\n    public function scopeSection(Builder $query, int $section)\n    {\n        return $query->where('section', $section);\n    }\n\n    public function isSidebar(): bool\n    {\n        return $this->section == self::SECTION_SIDEBAR;\n    }\n}\n"
  },
  {
    "path": "app/Models/AdminInvite.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property string $token\n * @property int $campaign_id\n * @property int $created_by\n * @property Campaign $campaign\n *\n * @method static self|Builder check(int $campaignId)\n */\nclass AdminInvite extends Model\n{\n    use HasUser;\n\n    public string $userField = 'created_by';\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class);\n    }\n\n    public function scopeCheck(Builder $query, int $campaignId): Builder\n    {\n        return $query->where('campaign_id', $campaignId)\n            ->whereNull('used_by');\n    }\n}\n"
  },
  {
    "path": "app/Models/ApiLog.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Prunable;\n\n/**\n * @property int $int\n * @property int $user_id\n * @property int $campaign_id\n * @property ?string $uri\n * @property array $params\n * @property ?float $duration\n * @property ?string $response\n */\nclass ApiLog extends Model\n{\n    use Prunable;\n\n    public $connection = 'logs';\n\n    public $casts = [\n        'params' => 'array',\n    ];\n\n    public $fillable = [\n        'user_id',\n        'campaign_id',\n        'uri',\n        'params',\n        'duration',\n        'response',\n    ];\n\n    /**\n     * Determines the prunable query.\n     */\n    public function prunable(): Builder\n    {\n        return $this->where('created_at', '<=', now()->subDays(30));\n    }\n}\n"
  },
  {
    "path": "app/Models/AppRelease.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\AppReleaseCategory;\nuse App\\Facades\\UserCache;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class AppRelease\n *\n * @property int $id\n * @property string $name\n * @property string $excerpt\n * @property string $link\n * @property Carbon $published_at\n * @property Carbon $end_at\n * @property int $created_by\n * @property AppReleaseCategory $category_id\n * @property User $author\n */\nclass AppRelease extends Model\n{\n    public $table = 'releases';\n\n    public $casts = [\n        'published_at' => 'date',\n        'end_at' => 'date',\n        'category_id' => AppReleaseCategory::class,\n    ];\n\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function author(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'created_by');\n    }\n\n    /**\n     * Release's category\n     */\n    public function category(): string\n    {\n        if ($this->category_id === AppReleaseCategory::release) {\n            return __('releases.categories.release');\n        } elseif ($this->category_id === AppReleaseCategory::event) {\n            return __('releases.categories.event');\n        } elseif ($this->category_id === AppReleaseCategory::vote) {\n            return __('releases.categories.vote');\n        } elseif ($this->category_id === AppReleaseCategory::other) {\n            return __('releases.categories.other');\n        } elseif ($this->category_id === AppReleaseCategory::livestream) {\n            return __('releases.categories.livestream');\n        }\n\n        return '';\n    }\n\n    /**\n     * Check if the user has already read this release\n     */\n    public function alreadyRead(): bool\n    {\n        // Don't show announcements that are older than the account itself\n        $firstVisibility = ! empty($this->published_at) ? $this->published_at : $this->created_at;\n        if ($firstVisibility->isBefore(auth()->user()->created_at)) {\n            return true;\n        }\n\n        // Check if the user has the release tutorial entry on the db.\n        return UserCache::user(auth()->user())->dismissedTutorial('releases_' . $this->category_id->value . '_' . $this->id);\n    }\n\n    /**\n     * Check if the release shouldn't be shown anymore\n     */\n    public function isPast(): bool\n    {\n        return ! empty($this->end_at) && $this->end_at->isPast();\n    }\n}\n"
  },
  {
    "path": "app/Models/Application.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\ApplicationStatus;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Class Application\n *\n * @property string $text\n * @property ApplicationStatus $status\n */\nclass Application extends Model\n{\n    use HasCampaign;\n    use HasUser;\n    use Sanitizable;\n\n    protected $casts = [\n        'status' => ApplicationStatus::class,\n        'availability_days' => 'array',\n    ];\n\n    protected array $sanitizable = [\n        'text', 'character_concept', 'additional_notes',\n    ];\n\n    protected $fillable = [\n        'campaign_id',\n        'user_id',\n        'character_concept',\n        'experience',\n        'availability_days',\n        'time_start',\n        'time_end',\n        'timezone',\n        'pref_rp_combat',\n        'pref_tone',\n        'external_link',\n        'additional_notes',\n        'status',\n    ];\n}\n"
  },
  {
    "path": "app/Models/Attribute.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\AttributeType;\nuse App\\Facades\\Attributes;\nuse App\\Facades\\Mentions;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Privatable;\nuse App\\Models\\Scopes\\Pinnable;\nuse App\\Traits\\OrderableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Scout\\Searchable;\n\n/**\n * Class Attribute\n *\n * @property int $id\n * @property int $entity_id\n * @property string $name\n * @property ?string $value\n * @property AttributeType $type_id\n * @property ?int $origin_attribute_id\n * @property int $default_order\n * @property int|bool $is_private\n * @property int|bool $is_hidden\n * @property int|bool $is_pinned\n * @property ?string $api_key\n * @property ?Entity $entity\n */\nclass Attribute extends Model\n{\n    use Blameable;\n    use HasFactory;\n    use OrderableTrait;\n    use Paginatable;\n    use Pinnable;\n    use Privatable;\n    use Searchable;\n\n    protected $fillable = [\n        'entity_id',\n        'name',\n        'value',\n        'is_private',\n        'default_order',\n        'type_id',\n        'origin_attribute_id',\n        'api_key',\n        'is_pinned',\n        'is_hidden',\n    ];\n\n    public $casts = [\n        'type_id' => AttributeType::class,\n    ];\n\n    /**\n     * Trigger for filtering based on the order request.\n     */\n    protected string $orderTrigger = 'attributes/';\n\n    /**\n     * Searchable fields\n     */\n    protected array $searchableColumns = [\n        'name',\n    ];\n\n    protected string $numberRange = '`\\[range:(-?[0-9]+),(-?[0-9]+)\\]`i';\n\n    protected int|bool $numberMax;\n\n    protected int|bool $numberMin;\n\n    protected string $listRegexp = '`\\[range:(.+)\\]`i';\n\n    protected array|bool $listRange;\n\n    protected string $mappedName;\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Attribute, $this>\n     */\n    public function origin(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Attribute', 'origin_attribute_id', 'id');\n    }\n\n    /**\n     * Get an entity's value parsed of mentions\n     */\n    public function mappedValue(): string\n    {\n        if ($this->type_id == AttributeType::Section) {\n            return $this->name;\n        }\n\n        return Mentions::mapAttribute($this);\n    }\n\n    /**\n     * Get an entity's name parsed of mentions\n     */\n    public function mappedName(): string\n    {\n        if (isset($this->mappedName)) {\n            return $this->mappedName;\n        }\n\n        return (string) $this->mappedName = Attributes::map($this);\n    }\n\n    public function exposedName(bool $slug = true): string\n    {\n        $name = str_replace(' ', '', $this->name);\n        if (Str::contains($name, '[range:')) {\n            $name = Str::before($name, '[range:');\n        }\n\n        return $slug ? Str::slug($name) : $name;\n    }\n\n    /**\n     * Determine if an attribute is of the standard input field type\n     */\n    public function isDefault(): bool\n    {\n        return $this->type_id === AttributeType::Standard;\n    }\n\n    /**\n     * Determine if an attribute is of the \"checkbox\" type\n     */\n    public function isCheckbox(): bool\n    {\n        return $this->type_id === AttributeType::Checkbox;\n    }\n\n    /**\n     * Determine if an attribute is of the \"text\" type\n     */\n    public function isText(): bool\n    {\n        return $this->type_id === AttributeType::Block;\n    }\n\n    /**\n     * Determine if an attribute is of the \"section\" type\n     */\n    public function isSection(): bool\n    {\n        return $this->type_id === AttributeType::Section;\n    }\n\n    /**\n     * Determine if an attribute is of the \"number\" type\n     */\n    public function isNumber(): bool\n    {\n        return $this->type_id === AttributeType::Number;\n    }\n\n    /**\n     * Determine if an attribute is of the \"list\" type\n     */\n    public function isList(): bool\n    {\n        return $this->type_id === AttributeType::List;\n    }\n\n    /**\n     * Determine if an attribute is of the \"random\" type\n     */\n    public function isRandom(): bool\n    {\n        return $this->type_id === AttributeType::Random;\n    }\n\n    /**\n     * Copy an attribute to another target\n     */\n    public function copyTo(Entity $target): bool\n    {\n        $new = $this->replicate(['entity_id']);\n        $new->entity_id = $target->id;\n\n        return $new->save();\n    }\n\n    public function scopeOrdered(Builder $query, string $order = 'asc'): Builder\n    {\n        return $query->orderBy('default_order', $order);\n    }\n\n    public function scopeHidden(Builder $query, bool $hidden = false): Builder\n    {\n        return $query->where(['is_hidden' => $hidden]);\n    }\n\n    public function name(): string\n    {\n        $name = preg_replace('`\\[icon:(.*?)\\]`si', '<i class=\"$1\"></i>', $this->name);\n        $name = preg_replace($this->listRegexp, '', $name);\n\n        return Mentions::mapAttribute($this, $name);\n    }\n\n    /**\n     * Set the value of the attribute. Validates if there are constraints\n     */\n    public function setValue($value): self\n    {\n        $this->value = $value;\n        // Check if there is a constraint\n        if (! $this->validConstraints()) {\n            return $this;\n        }\n\n        if ($this->isNumber()) {\n            $this->value = min($this->numberMax, max($this->numberMin, $value));\n        } elseif (! empty($this->listRange)) {\n            if (! in_array($this->value, $this->listRange())) {\n                $this->value = null;\n            }\n        }\n\n        return $this;\n    }\n\n    public function numberMax(): int\n    {\n        $this->calculateConstraints();\n\n        return $this->numberMax;\n    }\n\n    public function numberMin(): int\n    {\n        $this->calculateConstraints();\n\n        return $this->numberMin;\n    }\n\n    /**\n     * Generate the attribute's mention syntax\n     */\n    public function mentionName(): string\n    {\n        return '{attribute:' . $this->id . '}';\n    }\n\n    /**\n     * Determine if an attribute's value is inside its numeric constraints (for ranged attributes)\n     */\n    public function validConstraints(): bool\n    {\n        $this->calculateConstraints();\n        if ($this->isNumber()) {\n            return $this->numberMax !== false && $this->numberMin !== false;\n        }\n\n        return isset($this->listRange) && $this->listRange !== false;\n    }\n\n    /**\n     * Determine an attribute's constraints (for ranged and listed attributes)\n     */\n    protected function calculateConstraints(): self\n    {\n        if ($this->isNumber()) {\n            return $this->calculateNumberConstraints();\n        } elseif ($this->isDefault()) {\n            return $this->calculateListConstraints();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Define the min/max range of a number, if set\n     */\n    protected function calculateNumberConstraints(): self\n    {\n        if (isset($this->numberMax)) {\n            return $this;\n        }\n\n        $this->numberMax = false;\n        $this->numberMin = false;\n\n        // dump('checking ' . $this->name . '(' . $this->mappedName() . ')');\n\n        if (! Str::contains($this->mappedName(), '[range:')) {\n            return $this;\n        }\n\n        // dump('check regexp');\n        preg_match($this->numberRange, $this->mappedName(), $constraints);\n        if (count($constraints) !== 3) {\n            return $this;\n        }\n\n        $this->numberMin = (int) $constraints[1];\n        $this->numberMax = (int) $constraints[2];\n\n        // dump($this->numberMin);\n        // dd($this->numberMax);\n\n        return $this;\n    }\n\n    /**\n     * Generate a list of values possible for an attribute\n     */\n    protected function calculateListConstraints(): self\n    {\n        if (isset($this->listRange)) {\n            return $this;\n        }\n\n        $this->listRange = false;\n\n        if (! Str::contains($this->mappedName(), '[range:')) {\n            // dd('Missing range syntax');\n            return $this;\n        }\n\n        preg_match($this->listRegexp, $this->mappedName(), $constraints);\n        if (count($constraints) !== 2) {\n            return $this;\n        }\n        $this->listRange = explode(',', $constraints[1]);\n\n        // dump($constraints);\n        // dd($this->listRange);\n\n        return $this;\n    }\n\n    public function listRange(): array\n    {\n        if (! is_array($this->listRange)) {\n            return [];\n        }\n\n        return $this->listRange;\n    }\n\n    public function listRangeText(): string\n    {\n        return implode(', ', $this->listRange);\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'id',\n            'type_id',\n            'name',\n            'value',\n            'is_private',\n            'default_order',\n            'is_pinned',\n            'is_hidden',\n        ];\n    }\n\n    /**\n     * Get the value used to index the model.\n     */\n    public function getScoutKey()\n    {\n        return $this->getTable() . '_' . $this->id;\n    }\n\n    /**\n     * Get the name of the index associated with the model.\n     */\n    public function searchableAs(): string\n    {\n        return 'entities';\n    }\n\n    protected function makeAllSearchableUsing($query)\n    {\n        return $query\n            ->select([$this->getTable() . '.*', 'entities.id as entity_id'])\n            ->leftJoin('entities', $this->getTable() . '.entity_id', '=', 'entities.id')\n            ->has('entity')\n            ->with('entity');\n    }\n\n    /**\n     * @return array\n     */\n    public function toSearchableArray()\n    {\n        if (! $this->entity) {\n            return [];\n        }\n\n        return [\n            'campaign_id' => $this->entity->campaign_id,\n            'entity_id' => $this->entity_id,\n            'name' => $this->name,\n            'type' => 'attribute',\n            'entry' => strip_tags($this->value),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/AttributeTemplate.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Services\\Attributes\\RandomService;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class AttributeTemplate\n *\n * @property ?int $entity_type_id\n * @property EntityType $entityType\n */\nclass AttributeTemplate extends MiscModel\n{\n    use Acl;\n    use HasCampaign;\n    use HasFilters;\n    use SoftDeletes;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'entity_type_id',\n        'is_private',\n        'is_enabled',\n    ];\n\n    /**\n     * Searchable fields\n     */\n    protected array $searchableColumns = ['name'];\n\n    /**\n     * Fields that can be sorted on\n     */\n\n    /**\n     * Fields that can be set to null (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'entity_type_id',\n    ];\n\n    /** @var bool Attribute templates don't have inventory, relations or abilities */\n    public bool $hasRelations = false;\n\n    /**\n     * @return BelongsTo<EntityType, $this>\n     */\n    public function entityType(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\EntityType', 'entity_type_id', 'id');\n    }\n\n    /**\n     * Performance with for datagrids\n     */\n    public function scopeEnabled(Builder $query): Builder\n    {\n        return $query\n            ->where('is_enabled', true);\n    }\n\n    /**\n     * Apply a template to an entity\n     * todo: move to service\n     */\n    public function apply(Entity $entity, int $startingOrder = 0): int\n    {\n        $order = $startingOrder;\n        $existing = array_values($entity->attributes()->pluck('name')->toArray());\n\n        // If adding to an entity that already has attributes, we need to add the new ones after the existing ones\n        $lastOrder = 0;\n        if ($startingOrder == 0) {\n            $lastExisting = $entity->attributes()->orderByDesc('default_order')->first();\n            if (! empty($lastExisting)) {\n                $lastOrder = $lastExisting->default_order + 1;\n            }\n        }\n\n        /** @var RandomService $randomService */\n        $randomService = app()->make(RandomService::class);\n\n        /** @var Attribute $attribute */\n        foreach ($this->entity->attributes()->orderBy('default_order', 'ASC')->get() as $attribute) {\n            // Don't re-create existing attributes.\n            if (in_array($attribute->name, $existing)) {\n                continue;\n            }\n\n            [$type, $value] = $randomService->randomAttribute($attribute->type_id, $attribute->value);\n\n            Attribute::create([\n                'entity_id' => $entity->id,\n                'name' => $attribute->name,\n                'value' => $value,\n                'default_order' => $lastOrder + $order,\n                'is_private' => $attribute->is_private,\n                'is_pinned' => $attribute->isPinned(),\n                'type_id' => $type,\n            ]);\n            $order++;\n        }\n\n        // Loop through parents\n        /** @var Entity $ancestor */\n        foreach ($this->entity->ancestors()->get() as $ancestor) {\n            foreach ($ancestor->attributes()->orderBy('default_order', 'ASC')->get() as $attribute) {\n                // Don't re-create existing attributes.\n                if (in_array($attribute->name, $existing)) {\n                    continue;\n                }\n                [$type, $value] = $randomService->randomAttribute($attribute->type_id, $attribute->value);\n\n                Attribute::create([\n                    'entity_id' => $entity->id,\n                    'name' => $attribute->name,\n                    'value' => $value,\n                    'default_order' => $order,\n                    'is_private' => $attribute->is_private,\n                    'is_pinned' => $attribute->isPinned(),\n                    'type_id' => $type,\n                ]);\n                $order++;\n            }\n        }\n\n        $entity->touch();\n\n        return $order;\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.attribute_template');\n    }\n\n    /**\n     * Determine if the attribute templates has visible (to show on the entity creation _attributes tab) attributes\n     */\n    public function hasVisibleAttributes(array $names = []): bool\n    {\n        if (! $this->entity) {\n            return false;\n        }\n        $visible = false;\n        foreach ($this->entity->attributes()->get() as $attribute) {\n            if (! in_array($attribute->name, $names)) {\n                $visible = true;\n            }\n        }\n\n        return $visible;\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if ($this->entityType) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'is_enabled',\n        ];\n    }\n\n    /**\n     * Grid mode sortable fields\n     */\n    public function datagridSortableColumns(): array\n    {\n        $columns = [\n            'name' => __('crud.fields.name'),\n        ];\n\n        if (auth()->check() && auth()->user()->isAdmin()) {\n            $columns['is_private'] = __('crud.fields.is_private');\n        }\n\n        return $columns;\n    }\n\n    public function toSearchableArray()\n    {\n        if (! $this->entity) {\n            return [];\n        }\n\n        return [\n            'campaign_id' => $this->entity->campaign_id,\n            'entity_id' => $this->entity->id,\n            'name' => $this->name,\n            'type' => 'attribute_template',\n        ];\n    }\n\n    public function isEnabled(): bool\n    {\n        return $this->is_enabled;\n    }\n}\n"
  },
  {
    "path": "app/Models/Bookmark.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Facades\\BookmarkCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Dashboard;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasSuggestions;\nuse App\\Models\\Concerns\\LastSync;\nuse App\\Models\\Concerns\\Orderable;\nuse App\\Models\\Concerns\\Privatable;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\Searchable;\nuse App\\Models\\Concerns\\Sortable;\nuse App\\Models\\Concerns\\Taggable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class Bookmark\n *\n * @property int $id\n * @property string $name\n * @property ?string $tab\n * @property ?string $menu\n * @property ?string $type\n * @property string $icon\n * @property ?string $filters\n * @property ?string $parent\n * @property string $css\n * @property string $random_entity_type\n * @property int $position\n * @property ?int $dashboard_id\n * @property ?int $entity_id\n * @property ?int $entity_type_id\n * @property array $options\n * @property ?CampaignDashboard $dashboard\n * @property ?EntityType $entityType\n * @property ?EntityType $randomEntityType\n * @property ?Entity $target\n * @property bool|int $is_private\n * @property bool|int $is_active\n * @property array $optionsAllowedKeys\n *\n * @method static self|Builder ordered()\n * @method static self|Builder active()\n */\nclass Bookmark extends Model\n{\n    use Blameable;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use HasSuggestions;\n    use LastSync;\n    use Orderable;\n    use Privatable;\n    use Sanitizable;\n    use Searchable;\n    use Sortable;\n    use Taggable;\n\n    protected $fillable = [\n        'campaign_id',\n        'entity_id',\n        'entity_type_id',\n        'name',\n        'icon',\n        'tab',\n        'filters',\n        'is_private',\n        'menu',\n        'type',\n        'position',\n        'random_entity_type',\n        'dashboard_id',\n        'css',\n        'parent',\n        'options',\n        'is_active',\n    ];\n\n    /**\n     * The attributes that should be cast.\n     *\n     * @var array<string, string>\n     */\n    protected $casts = [\n        'options' => 'array',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'icon',\n        'css',\n    ];\n\n    /**\n     * Custom options array key filter\n     * Used in the Menu link observer\n     */\n    public array $optionsAllowedKeys = ['is_nested', 'default_dashboard', 'subview_filter'];\n\n    /**\n     * Searchable fields\n     */\n    protected array $searchableColumns = ['name'];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'entity_id',\n        'dashboard_id',\n    ];\n\n    protected array $apiWith = [\n        'target',\n    ];\n\n    protected array $suggestions = [\n        BookmarkCache::class => 'clearSuggestion',\n    ];\n\n    /**\n     * Set to false if this entity type doesn't have relations\n     */\n    public bool $hasRelations = false;\n\n    /**\n     * Fields that can be sorted on\n     */\n    public array $sortableColumns = [\n        'position',\n        'menu',\n        'tab',\n        'is_active',\n    ];\n\n    /** @var string Default order for lists */\n    public string $defaultOrderField = 'position';\n\n    /**\n     * Performance with for datagrids\n     */\n    public function scopePreparedWith(Builder $query): Builder\n    {\n        return $query->with([\n            'entity',\n            'entityType',\n            'randomEntityType',\n            'target',\n            'dashboard',\n        ]);\n    }\n\n    public function scopePreparedSelect(Builder $query): Builder\n    {\n        return $query;\n    }\n\n    /**\n     * Scope for Active menu links\n     */\n    public function scopeActive(Builder $query): Builder\n    {\n        return $query->where('is_active', true);\n    }\n\n    /**\n     * Scope for ordering models by default\n     */\n    public function scopeOrdered(Builder $query): Builder\n    {\n        return $query\n            ->orderBy('position', 'ASC')\n            ->orderBy('name', 'ASC');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function target(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id');\n    }\n\n    /**\n     * @return BelongsTo<CampaignDashboard, $this>\n     */\n    public function dashboard(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\CampaignDashboard', 'dashboard_id');\n    }\n\n    /**\n     * @return BelongsTo<EntityType, $this>\n     */\n    public function entityType(): BelongsTo\n    {\n        return $this->belongsTo(EntityType::class);\n    }\n\n    /**\n     * @return BelongsTo<EntityType, $this>\n     */\n    public function randomEntityType(): BelongsTo\n    {\n        return $this->belongsTo(EntityType::class, 'random_entity_type');\n    }\n\n    /**\n     * Override the get link\n     */\n    public function getLink(string $route = 'show'): string\n    {\n        $campaign = CampaignLocalization::getCampaign();\n\n        return route('bookmarks.' . $route, [$campaign, $this->id]);\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table.\n     * Needed to get custom module name\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.bookmark');\n    }\n\n    public function isRandom(): bool\n    {\n        return ! empty($this->random_entity_type);\n    }\n\n    public function isEntity(): bool\n    {\n        return ! empty($this->entity_id);\n    }\n\n    public function isDashboard(): bool\n    {\n        return ! empty($this->dashboard_id);\n    }\n\n    public function isList(): bool\n    {\n        return ! empty($this->entity_type_id);\n    }\n\n    /**\n     * Icon HTML class\n     */\n    public function iconClass(): string\n    {\n        if (! empty($this->icon)) {\n            return e($this->icon);\n        } elseif ($this->target) {\n            return 'fa-regular fa-arrow-circle-right';\n        } elseif ($this->isRandom()) {\n            return 'fa-regular fa-question';\n        }\n        if (! empty($this->entityType->icon)) {\n            return $this->entityType->icon;\n        }\n\n        return 'fa-regular fa-th-list';\n    }\n\n    /**\n     * Validate that the user has access to this dashboard\n     */\n    public function isValidDashboard(): bool\n    {\n        return Dashboard::campaign($this->campaign)->getDashboard($this->dashboard_id) !== null;\n    }\n\n    public function customClass(Campaign $campaign): string\n    {\n        $class = '';\n        $request = request()->get('bookmark');\n        if (! empty($request) && $request == $this->id) {\n            $class = 'active ';\n        }\n\n        if (! $campaign->boosted()) {\n            return $class;\n        }\n        if (empty($this->css)) {\n            return $class;\n        }\n\n        return (string) $class . $this->css;\n    }\n\n    /**\n     * Determine if the bookmark is valid\n     */\n    public function valid(Campaign $campaign): bool\n    {\n        $this->setRelation('campaign', $campaign);\n        if ($this->dashboard) {\n            return $campaign->boosted() && $this->isValidDashboard();\n        } elseif ($this->target) {\n            return true;\n        } elseif ($this->entityType) {\n            return true;\n        }\n\n        return (bool) ($this->isRandom());\n    }\n\n    public function activeModule(Campaign $campaign, Entity|EntityType|null $current = null): ?string\n    {\n        if (empty($current) || request()->has('bookmark')) {\n            return null;\n        }\n        // We have no way of having a bookmark set \"just to the custom module\", so in cases where the campaign has a\n        // bookmark to the module with no filters, and one with, we assume we want the one without filters to be\n        // highlighted.\n        if (! empty($this->filters)) {\n            return null;\n        }\n        if ($current instanceof EntityType) {\n            if ($current->isStandard() || $current->id != $this->entity_type_id) {\n                return null;\n            }\n\n            return 'active';\n        }\n        // @phpstan-ignore-next-line\n        if (($current instanceof Entity && $current->entityType && $current->entityType->isStandard()) || $current->type_id != $this->entity_type_id) {\n            return null;\n        }\n\n        return 'active';\n    }\n}\n"
  },
  {
    "path": "app/Models/BragiLog.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property string $prompt\n * @property string $result\n * @property array $data\n */\nclass BragiLog extends Model\n{\n    use HasCampaign;\n    use HasUser;\n\n    public $casts = [\n        'data' => 'array',\n    ];\n\n    public function scopeRecent(Builder $query, $cutoffDate): Builder\n    {\n        return $query\n            ->whereDate('created_at', '>=', $cutoffDate);\n    }\n}\n"
  },
  {
    "path": "app/Models/Calendar.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Relations\\CalendarRelations;\nuse App\\Traits\\ExportableTrait;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class Calendar\n *\n * @property string $date\n * @property int $start_offset\n * @property string $months\n * @property string $years\n * @property string $weekdays\n * @property string $week_names\n * @property string $month_aliases\n * @property string $seasons\n * @property string $moons\n * @property string $reset\n * @property string $format\n * @property string $suffix\n * @property array $parameters\n * @property bool|int $skip_year_zero\n * @property bool|int $show_birthdays\n */\nclass Calendar extends MiscModel\n{\n    use Acl;\n    use CalendarRelations;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use SoftDeletes;\n\n    protected $fillable = [\n        'campaign_id',\n        'name',\n        'start_offset',\n        'is_private',\n        'parameters',\n        'months',\n        'weekdays',\n        'years',\n        'seasons',\n        'moons',\n        'date',\n        'suffix',\n        'skip_year_zero',\n        'epochs',\n        'month_aliases',\n        'week_names',\n        'reset',\n        'is_incrementing',\n        'format',\n        'show_birthdays',\n\n        // Leap year\n        'has_leap_year',\n        'leap_year_amount', // Add X number of days\n        'leap_year_month', // At the end of month X\n        'leap_year_offset', // every X years\n        'leap_year_start', // X year is a leap year\n\n    ];\n\n    /** @var array<string, string> */\n    public $casts = [\n        'parameters' => 'array',\n    ];\n\n    protected array $foreignExport = [\n        'calendarWeather',\n    ];\n\n    protected array $loadedMonths;\n\n    protected array $loadedWeekdays;\n\n    protected array $loadedYears;\n\n    protected array $loadedSeasons;\n\n    protected array $loadedMoons;\n\n    protected array $loadedWeeks;\n\n    protected array $loadedMonthAliases;\n\n    protected array $cachedCurrentDate;\n\n    /**\n     * Get the months decoded from the json into a usable array\n     */\n    public function months(): array\n    {\n        if (isset($this->loadedMonths)) {\n            return $this->loadedMonths;\n        }\n\n        return (array) $this->loadedMonths = ! empty($this->months) ?\n            json_decode(strip_tags($this->months), true) : [];\n    }\n\n    /**\n     * Get the weekdays\n     */\n    public function weekdays(): array\n    {\n        if (! isset($this->loadedWeekdays)) {\n            $this->loadedWeekdays = [];\n            if (! empty($this->months)) {\n                $this->loadedWeekdays = json_decode(strip_tags($this->weekdays), true);\n            }\n        }\n\n        return $this->loadedWeekdays;\n    }\n\n    /**\n     * Get the weekdays\n     */\n    public function years(): array\n    {\n        if (! isset($this->loadedYears)) {\n            $this->loadedYears = [];\n            if (! empty($this->years)) {\n                $this->loadedYears = json_decode(strip_tags($this->years), true);\n            }\n        }\n\n        return $this->loadedYears;\n    }\n\n    /**\n     * Get the calendar's moons\n     */\n    public function moons(): array\n    {\n        if (! isset($this->loadedMoons)) {\n            $this->loadedMoons = json_decode(empty($this->moons) ? '[]' : strip_tags($this->moons), true);\n        }\n\n        return $this->loadedMoons;\n    }\n\n    /**\n     * Get the calendar's seasons\n     */\n    public function seasons(): array\n    {\n        if (! isset($this->loadedSeasons)) {\n            $this->loadedSeasons = json_decode(empty($this->seasons) ? '[]' : strip_tags($this->seasons), true);\n        }\n\n        return $this->loadedSeasons;\n    }\n\n    /**\n     * Get the calendar's weeks\n     */\n    public function weeks(): array\n    {\n        if (! isset($this->loadedWeeks)) {\n            $this->loadedWeeks = json_decode(empty($this->week_names) ? '[]' : strip_tags($this->week_names), true);\n        }\n\n        return $this->loadedWeeks;\n    }\n\n    /**\n     * Get the calendar's month aliases\n     */\n    public function monthAliases(): array\n    {\n        if (! isset($this->loadedMonthAliases)) {\n            $this->loadedMonthAliases = json_decode(empty($this->month_aliases) ? '[]' :\n                strip_tags($this->month_aliases), true);\n        }\n\n        return $this->loadedMonthAliases;\n    }\n\n    public function currentDate(?string $value = null): mixed\n    {\n        // If we have no date saved at all, skip this part. This happens when an entity was changed to the calendar\n        // type and most fields are missing.\n        if (empty($this->date)) {\n            return null;\n        }\n\n        if ($value == 'year') {\n            return $this->cacheCurrentDate()[0] ?? 0;\n        } elseif ($value == 'month') {\n            return $this->cacheCurrentDate()[1] ?? 1;\n        } elseif ($value == 'date') {\n            return $this->cacheCurrentDate()[2] ?? 1;\n        }\n\n        return null;\n    }\n\n    /**\n     * Get the calendar's current date\n     */\n    public function currentYear(): int\n    {\n        return $this->cacheCurrentDate()[0] ?? 0;\n    }\n\n    /**\n     * Get the calendar's current month\n     */\n    public function currentMonth(): int\n    {\n        return $this->cacheCurrentDate()[1] ?? 1;\n    }\n\n    /**\n     * Get the calendar's current day\n     */\n    public function currentDay(): int\n    {\n        return $this->cacheCurrentDate()[2] ?? 1;\n    }\n\n    /**\n     * Get the calendar's nice date\n     */\n    public function niceDate(?string $date = null): string\n    {\n        if (empty($date)) {\n            $date = $this->date;\n        }\n        if (empty($date)) {\n            return '';\n        }\n\n        [$year, $month, $day] = $this->dateArray($date);\n\n        // Replace month with real month, and year maybe\n        $months = $this->months();\n        $years = $this->years();\n\n        try {\n            $return = $day . ' ' .\n                (isset($months[$month - 1]) ? $months[$month - 1]['name'] : $month) . ', ' .\n                ($years[$year] ?? $year) . ' ' .\n                $this->suffix;\n\n            return $return;\n        } catch (Exception $e) { // @phpstan-ignore-line\n            return $this->date;\n        }\n    }\n\n    /**\n     * Get a list of months for select fields\n     */\n    public function monthList(): array\n    {\n        $months = [];\n        $i = 1;\n        foreach ($this->months() as $month) {\n            $months[$i] = $month['name'];\n            $i++;\n        }\n\n        return $months;\n    }\n\n    /**\n     * Get the length as a data-property for each of the calendar's months\n     */\n    public function monthDataProperties(): array\n    {\n        $monthData = [];\n        $i = 1;\n        foreach ($this->months() as $month) {\n            $monthData[$i] = ['data-length' => $month['length']];\n            $i++;\n        }\n\n        return $monthData;\n    }\n\n    /**\n     * Build the list of days for a month\n     */\n    public function dayList(?int $month = null): array\n    {\n        if (empty($month)) {\n            $month = $this->currentMonth();\n        }\n        $monthId = $month - ($month > 0 ? 1 : 0);\n        // if the current month no longer exists, reset it to the first month\n        if ($monthId > (count($this->months()) - 1)) {\n            $monthId = 0;\n        }\n        $days = [];\n        $currentMonth = $this->months()[$monthId];\n        for ($i = 1; $i <= $currentMonth['length']; $i++) {\n            $days[$i] = $i;\n        }\n\n        // No leaps days, or not on this month\n        if (! $this->has_leap_year || $this->leap_year_month != $month) {\n            return $days;\n        }\n        // We might be on a year with leap years, but the js is too complex so let's just assume\n        $start = count($days);\n        for ($i = 1; $i <= $this->leap_year_amount; $i++) {\n            $day = $start + $i;\n            $days[$day] = $day;\n        }\n\n        return $days;\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        foreach ($this->calendarEvents as $child) {\n            $child->delete();\n        }\n    }\n\n    /**\n     * Determine if the calendar is missing months of weekdays to be rendered successfully\n     */\n    public function missingDetails(): bool\n    {\n        return count($this->months()) < 1 || count($this->weekdays()) < 2;\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.calendar');\n    }\n\n    /**\n     * Cache the current date explode method\n     */\n    protected function cacheCurrentDate(): array\n    {\n        if (isset($this->cachedCurrentDate)) {\n            return $this->cachedCurrentDate;\n        }\n\n        $date = mb_ltrim($this->date, '-');\n        $this->cachedCurrentDate = explode('-', $date);\n\n        if (Str::startsWith($this->date, '-')) {\n            $this->cachedCurrentDate[0] = '-' . $this->cachedCurrentDate[0];\n        }\n\n        return $this->cachedCurrentDate;\n    }\n\n    /**\n     * Get the date as an array\n     */\n    public function dateArray(?string $date = null): array\n    {\n        if (empty($date)) {\n            $date = $this->date;\n        }\n\n        $isNegativeYear = Str::startsWith($date, '-');\n        $date = explode('-', mb_ltrim($date, '-'));\n\n        if (count($date) !== 3) {\n            return [1, 1, 1];\n        }\n\n        return [\n            $isNegativeYear ? '-' . $date[0] : $date[0],\n            max($date[1], 1),\n            max($date[2], 1),\n        ];\n    }\n\n    public function recurringOptions(bool $flat = false): array\n    {\n        $options = [\n            '' => __('calendars.options.events.recurring_periodicity.none'),\n            'month' => __('calendars.options.events.recurring_periodicity.month'),\n            'year' => __('calendars.options.events.recurring_periodicity.year'),\n        ];\n\n        // Add options based on moons\n        $unnamed = 0;\n        foreach ($this->moons() as $moon) {\n            if ($flat) {\n                $options[$moon['id'] . '_f'] = __('calendars.options.events.recurring_periodicity.fullmoon_name', ['moon' => $moon['name']]);\n                $options[$moon['id'] . '_n'] = __('calendars.options.events.recurring_periodicity.newmoon_name', ['moon' => $moon['name']]);\n\n                continue;\n            }\n            $name = $moon['name'];\n            if (empty($name)) {\n                $unnamed++;\n                $name = __('calendars.options.events.recurring_periodicity.unnamed_moon', ['number' => $unnamed]);\n            }\n            $options[$name] = [\n                $moon['id'] . '_f' => __('calendars.options.events.recurring_periodicity.fullmoon'),\n                $moon['id'] . '_n' => __('calendars.options.events.recurring_periodicity.newmoon'),\n            ];\n        }\n\n        return $options;\n    }\n\n    /**\n     * Get the number of days in a year\n     */\n    public function daysInYear(): int\n    {\n        $days = 0;\n        foreach ($this->months() as $month) {\n            $days += Arr::get($month, 'length', 1);\n        }\n\n        return $days;\n    }\n\n    /**\n     * Default calendar layout\n     */\n    public function defaultLayout(): string\n    {\n        return $this->yearlyLayout() ? 'year' : 'month';\n    }\n\n    /**\n     * Determine if the calendar defaults to a yearly layout\n     */\n    public function yearlyLayout(): bool\n    {\n        return Arr::get($this->parameters, 'layout') === 'yearly';\n    }\n\n    /**\n     * Determine if the calendar skips year zero.\n     */\n    public function hasYearZero(): bool\n    {\n        return ! $this->skip_year_zero;\n    }\n}\n"
  },
  {
    "path": "app/Models/CalendarWeather.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Scopes\\CalendarWeatherScopes;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CalendarWeather\n *\n * @property int $id\n * @property int $calendar_id\n * @property string $weather\n * @property string $temperature\n * @property string $precipitation\n * @property string $wind\n * @property string $effect\n * @property int $year\n * @property int $month\n * @property int $day\n * @property string $name\n * @property Calendar $calendar\n */\nclass CalendarWeather extends Model\n{\n    use Blameable;\n    use CalendarWeatherScopes;\n    use HasVisibility;\n    use Sanitizable;\n\n    public $table = 'calendar_weather';\n\n    public $fillable = [\n        'calendar_id',\n        'weather',\n        'temperature',\n        'precipitation',\n        'wind',\n        'effect',\n        'day',\n        'month',\n        'year',\n        'visibility_id',\n        'name',\n    ];\n\n    protected array $sanitizable = [\n        'weather',\n        'temperature',\n        'precipitation',\n        'wind',\n        'effect',\n        'name',\n    ];\n\n    /**\n     * @return BelongsTo<Calendar, $this>\n     */\n    public function calendar(): BelongsTo\n    {\n        return $this->belongsTo(Calendar::class);\n    }\n\n    public function tooltip(): string\n    {\n        return\n            (! empty($this->temperature) ? __('calendars/weather.fields.temperature') . ': ' . e($this->temperature) . \"<br />\\n\" : null) .\n            (! empty($this->precipitation) ? __('calendars/weather.fields.precipitation') . ': ' . e($this->precipitation) . \"<br />\\n\" : null) .\n            (! empty($this->wind) ? __('calendars/weather.fields.wind') . ': ' . e($this->wind) . \"<br />\\n\" : null) .\n            (! empty($this->effect) ? __('calendars/weather.fields.effect') . ': ' . e($this->effect) . \"<br />\\n\" : null);\n    }\n\n    public function weatherName(): string\n    {\n        if (! empty($this->name)) {\n            return $this->name;\n        }\n\n        return __('calendars/weather.options.weather.' . $this->weather);\n    }\n}\n"
  },
  {
    "path": "app/Models/Campaign.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\CampaignFilterType;\nuse App\\Enums\\CampaignVisibility;\nuse App\\Enums\\Descendants;\nuse App\\Enums\\Permission;\nuse App\\Enums\\Visibility;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\Mentions;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\Boosted;\nuse App\\Models\\Concerns\\CampaignLimit;\nuse App\\Models\\Concerns\\HasEntry;\nuse App\\Models\\Concerns\\HasImage;\nuse App\\Models\\Concerns\\LastSync;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Relations\\CampaignRelations;\nuse App\\Models\\Scopes\\CampaignScopes;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Notifications\\Notification;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\n\n/**\n * Class Campaign\n *\n * @property int $id\n * @property string $name\n * @property string $slug\n * @property string $locale\n * @property CampaignVisibility $visibility_id\n * @property bool|int $entity_visibility\n * @property bool|int $entity_personality_visibility\n * @property string $header_image\n * @property string $excerpt\n * @property string $css\n * @property string $theme\n * @property int $boost_count\n * @property int $visible_entity_count\n * @property array $ui_settings\n * @property bool|int $is_open\n * @property bool|int $is_prioritised\n * @property array|null $default_images\n * @property array|null $settings\n * @property Carbon $created_at\n * @property Carbon $updated_at\n * @property Carbon $deleted_at\n * @property bool|int $is_hidden\n *\n * UI virtual Settings\n * @property bool|int $tooltip_family\n * @property bool|int $hide_members\n * @property bool|int $hide_history\n */\nclass Campaign extends Model\n{\n    use Blameable;\n    use Boosted;\n    use CampaignLimit;\n    use CampaignRelations;\n    use CampaignScopes;\n    use HasEntry;\n    use HasFactory;\n    use HasImage;\n    use LastSync;\n    use Sanitizable;\n    use SoftDeletes;\n\n    protected $fillable = [\n        'name',\n        'slug',\n        'locale',\n        'image',\n        'visibility_id',\n        'entity_visibility',\n        'entity_personality_visibility',\n        'header_image',\n        'theme_id',\n        'css',\n        'ui_settings',\n        'settings',\n        'is_open',\n        'is_prioritised',\n    ];\n\n    protected $casts = [\n        'ui_settings' => 'array',\n        'default_images' => 'array',\n        'settings' => 'array',\n        'visibility_id' => CampaignVisibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    protected array $imageFields = [\n        'image',\n        'header_image',\n    ];\n\n    /** @var Collection|EntityType[] */\n    protected Collection|array $cachedEntityTypes;\n\n    public function getRouteKeyName()\n    {\n        return 'slug';\n    }\n\n    /**\n     * Does the campaign has a preview text that can be displayed\n     */\n    public function hasPreview(): bool\n    {\n        return ! empty($this->preview());\n    }\n\n    /**\n     * Preview text for the dashboard\n     */\n    public function preview(): string\n    {\n        if (! empty(strip_tags($this->excerpt))) {\n            return $this->excerpt();\n        }\n        if (! empty(strip_tags($this->entry))) {\n            return strip_tags(mb_substr($this->parsedEntry(), 0, 1000)) . ' ...';\n        }\n\n        return '';\n    }\n\n    public function membersList($removedIds = []): array\n    {\n        $members = [];\n\n        foreach ($this->members()->with('user')->get() as $m) {\n            if (! in_array($m->user->id, $removedIds)) {\n                $members[$m->user->id] = $m->user->name;\n            }\n        }\n\n        return $members;\n    }\n\n    /**\n     * Get a list of users who are admins of the campaign\n     *\n     * @return User[]|array|Collection\n     */\n    public function admins()\n    {\n        $users = [];\n        $roles = $this->roles()\n            ->with(['users', 'users.user'])\n            ->where('is_admin', '1')\n            ->get();\n        foreach ($roles as $role) {\n            foreach ($role->users as $user) {\n                if (! isset($users[$user->id])) {\n                    $users[$user->user->id] = $user->user;\n                }\n            }\n        }\n\n        return $users;\n    }\n\n    /**\n     * Determine if a campaign has a module enabled or not\n     */\n    public function enabled(string|EntityType $module): bool\n    {\n        if ($module instanceof EntityType) {\n            $module = $module->pluralCode();\n        }\n        if ($module === 'attribute_templates') {\n            $module = 'entity_attributes';\n        }\n\n        return (bool) CampaignCache::campaign($this)->settings()->get($module);\n    }\n\n    public function isPublic(): bool\n    {\n        return $this->visibility_id == CampaignVisibility::public;\n    }\n\n    public function isPrivate(): bool\n    {\n        return $this->visibility_id == CampaignVisibility::private;\n    }\n\n    /**\n     * Determine if the user is currently following the campaign\n     */\n    public function isFollowing(): bool\n    {\n        return $this->followers()->where('user_id', auth()->user()->id)->count() === 1;\n    }\n\n    /**\n     * Determine if a campaign is discreet\n     */\n    public function isUnlisted(): bool\n    {\n        return $this->visibility_id === CampaignVisibility::unlisted;\n    }\n\n    /**\n     * Determine if a campaign is open to applications\n     */\n    public function isOpen(): bool\n    {\n        return $this->is_open;\n    }\n\n    /**\n     * Determine if a campaign is hidden\n     */\n    public function isHidden(): bool\n    {\n        return $this->is_hidden;\n    }\n\n    public function getEntryAttribute(): ?string\n    {\n        return $this->description?->description;\n    }\n\n    public function getDescriptionForEditionAttribute(): string\n    {\n        return Mentions::parseForEdit($this, 'entry');\n    }\n\n    public function getExcerptAttribute(): ?string\n    {\n        return $this->description?->excerpt;\n    }\n\n    public function excerpt(): string\n    {\n        return Mentions::mapAny($this, 'excerpt');\n    }\n\n    public function getExcerptForEditionAttribute()\n    {\n        return Mentions::parseForEdit($this, 'excerpt');\n    }\n\n    public function defaultDescendantsMode(): Descendants\n    {\n        return Descendants::from(Arr::get($this->ui_settings, 'descendants', 0));\n    }\n\n    public function defaultToConnection(): bool\n    {\n        return (bool) Arr::get($this->ui_settings, 'connections', false);\n    }\n\n    public function defaultToConnectionMode(): int\n    {\n        return (int) Arr::get($this->ui_settings, 'connections_mode', 0);\n    }\n\n    public function getHideMembersAttribute()\n    {\n        return Arr::get($this->ui_settings, 'hide_members', false);\n    }\n\n    public function getHideHistoryAttribute()\n    {\n        return Arr::get($this->ui_settings, 'hide_history', false);\n    }\n\n    public function existingDefaultImages(): array\n    {\n        if (empty($this->default_images)) {\n            return [];\n        }\n\n        return array_keys($this->default_images);\n    }\n\n    /**\n     * Prepare the default entity images\n     */\n    public function defaultImages($withKey = false): array\n    {\n        if (empty($this->default_images)) {\n            return [];\n        }\n\n        $imageIds = array_values($this->default_images);\n        $images = Image::whereIn('id', $imageIds)->get();\n\n        $data = [];\n        foreach ($this->default_images as $type => $uuid) {\n            /** @var ?Image $image */\n            $image = $images->where('id', $uuid)->first();\n            if (empty($image) || in_array($type, ['relations', 'bookmarks', 'menu_links'])) {\n                continue;\n            }\n            if ($withKey) {\n                $data[$type] = [\n                    'type' => $type,\n                    'uuid' => $uuid,\n                    'path' => $image->path,\n                ];\n            } else {\n                $data[] = [\n                    'type' => $type,\n                    'uuid' => $uuid,\n                    'path' => $image->path,\n                ];\n            }\n        }\n\n        return $data;\n    }\n\n    /**\n     * Determine if a campaign has plugins of the theme type\n     */\n    public function hasPluginTheme(): bool\n    {\n        return ! empty(CampaignCache::themes());\n    }\n\n    public function getDefaultVisibilityAttribute(): mixed\n    {\n        return Arr::get($this->settings, 'default_visibility', 'all');\n    }\n\n    public function getDefaultGalleryVisibilityAttribute(): mixed\n    {\n        return Arr::get($this->settings, 'gallery_visibility', 'all');\n    }\n\n    public function showPrivateEntityMentions(): bool\n    {\n        return Arr::get($this->settings, 'private_mention_visibility', 0);\n    }\n\n    /**\n     * Determine the campaign's default visibility_id select option\n     */\n    public function defaultVisibility(): Visibility\n    {\n        $visibility = $this->getDefaultVisibilityAttribute();\n        if ($visibility == 'admin' && auth()->user()->isAdmin()) {\n            return Visibility::Admin;\n        } elseif ($visibility == 'admin-self') {\n            return Visibility::AdminSelf;\n        } elseif ($visibility == 'members') {\n            return Visibility::Member;\n        } elseif ($visibility == 'self') {\n            return Visibility::Self;\n        }\n\n        return Visibility::All;\n    }\n\n    /**\n     * Determine the gallery's default visibility_id select option\n     */\n    public function defaultGalleryVisibility(): Visibility\n    {\n        $visibility = $this->getDefaultGalleryVisibilityAttribute();\n        if ($visibility == 'admin' && auth()->user()->isAdmin()) {\n            return Visibility::Admin;\n        } elseif ($visibility == 'admin-self') {\n            return Visibility::AdminSelf;\n        } elseif ($visibility == 'members') {\n            return Visibility::Member;\n        } elseif ($visibility == 'self') {\n            return Visibility::Self;\n        }\n\n        return Visibility::All;\n    }\n\n    /**\n     * Checks if the campaign's public role has no read permissions\n     */\n    public function publicHasNoVisibility(): bool\n    {\n        $permissionCount = $this->publicRole->permissions()\n            ->where('action', Permission::View->value)\n            ->where('access', 1)\n            ->count();\n\n        return $permissionCount == 0;\n    }\n\n    /**\n     * Determine if a campaign has editing warnings (when multiple people are trying to edit\n     * the same entity). This is enabled if the campaign has several members.\n     */\n    public function hasEditingWarning(): bool\n    {\n        $members = CampaignCache::campaign($this)->members();\n\n        return $members->count() > 1;\n    }\n\n    /**\n     * Send a notification to the campaign's admins\n     */\n    public function notifyAdmins(Notification $notification): self\n    {\n        foreach ($this->admins() as $user) {\n            $user->notify($notification);\n        }\n\n        return $this;\n    }\n\n    public function follower(): int\n    {\n        if (app()->hasDebugModeEnabled() && request()->has('_followers')) {\n            return request()->get('_followers');\n        }\n\n        return (int) ($this->followers_count ?? $this->followers()->count());\n    }\n\n    public function hasModuleName(int $type, bool $plural = false): bool\n    {\n        $key = 'modules.' . $type . '.' . ($plural ? 'p' : 's');\n\n        return Arr::has($this->settings, $key);\n    }\n\n    public function moduleName(int $type, bool $plural = false): ?string\n    {\n        $key = 'modules.' . $type . '.' . ($plural ? 'p' : 's');\n        $val = Arr::get($this->settings, $key);\n\n        return $val;\n    }\n\n    public function hasModuleIcon(int $type): bool\n    {\n        $key = 'modules.' . $type . '.i';\n\n        return Arr::has($this->settings, $key);\n    }\n\n    public function moduleIcon(int $type): ?string\n    {\n        $key = 'modules.' . $type . '.i';\n        $val = Arr::get($this->settings, $key);\n\n        return $val;\n    }\n\n    public function hasVanity(): bool\n    {\n        return $this->slug != $this->id;\n    }\n\n    public function getSystems(): string\n    {\n        $systems = '';\n        foreach ($this->systems as $system) {\n            if ($systems) {\n                $systems .= ', ';\n            }\n            $systems .= $system->name;\n        }\n\n        return $systems;\n    }\n\n    public function imageStoragePath(): string\n    {\n        return 'w/' . $this->id;\n    }\n\n    /**\n     * @return Collection|EntityType[]\n     */\n    public function getEntityTypes(): Collection|array\n    {\n        if (isset($this->cachedEntityTypes)) {\n            return $this->cachedEntityTypes;\n        }\n\n        $this->cachedEntityTypes = EntityType::inCampaign($this)->enabled()->get();\n\n        return $this->cachedEntityTypes;\n    }\n\n    public function link(): string\n    {\n        return '<a href=\"' . route('dashboard', $this) . '\">' . $this->name . '</a>';\n    }\n\n    public function adminRole(): array\n    {\n        return CampaignCache::campaign($this)->adminRole();\n    }\n\n    public function adminRoleName(): string\n    {\n        $role = $this->adminRole();\n\n        return Arr::get($role, 'name', __('campaigns.roles.admin_role'));\n    }\n\n    /**\n     * Helper to get a specific filter value by its Enum type\n     */\n    public function getFilter(CampaignFilterType $type): ?string\n    {\n        $filter = $this->filters->firstWhere('type', $type);\n\n        return $filter ? $filter->entry : null;\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignBoost.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\Paginatable;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Prunable;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class CampaignBoost\n *\n * @property int $campaign_id\n * @property Campaign $campaign\n * @property Carbon $created_at\n */\nclass CampaignBoost extends Model\n{\n    use HasUser;\n    use Paginatable;\n    use Prunable;\n    use SoftDeletes;\n\n    protected $fillable = ['user_id', 'campaign_id'];\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n\n    public function inCooldown(): bool\n    {\n        return app()->isProduction() && ! $this->created_at->isBefore(Carbon::now()->subDays(7));\n    }\n\n    /**\n     * Automatically prune old elements from the db\n     */\n    public function prunable(): Builder\n    {\n        return static::where('deleted_at', '<=', now()->subDays(90));\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignDashboard.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\n/**\n * Class CampaignDashboard\n *\n * @property int $id\n * @property string $name\n * @property int $created_by\n * @property CampaignDashboardWidget[]|Collection $widgets\n * @property CampaignDashboardRole[]|Collection $roles\n *\n * @method static Builder|self exclude(CampaignDashboard $campaignDashboard)\n */\nclass CampaignDashboard extends Model\n{\n    use HasCampaign;\n    use Sanitizable;\n\n    public $fillable = [\n        'name',\n        'campaign_id',\n        'created_by',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * @return HasMany<CampaignDashboardWidget, $this>\n     */\n    public function widgets(): HasMany\n    {\n        return $this->hasMany(CampaignDashboardWidget::class, 'dashboard_id', 'id');\n    }\n\n    /**\n     * @return HasMany<CampaignDashboardRole, $this>\n     */\n    public function roles(): HasMany\n    {\n        return $this->hasMany(CampaignDashboardRole::class, 'campaign_dashboard_id', 'id');\n    }\n\n    /**\n     * @return Builder\n     */\n    public function scopeExclude(Builder $builder, ?CampaignDashboard $campaignDashboard = null)\n    {\n        if (empty($campaignDashboard)) {\n            return $builder;\n        }\n\n        return $builder->where('id', '!=', $campaignDashboard->id);\n    }\n\n    /**\n     * Check if a campaign role is set up\n     */\n    public function permission(CampaignRole $role, bool $default = false): bool\n    {\n        $dashboardRole = $this->roles->where('campaign_role_id', $role->id)\n            ->first();\n\n        if (empty($dashboardRole)) {\n            return false;\n        }\n\n        if ($default) {\n            return $dashboardRole->is_default;\n        }\n\n        return $dashboardRole->is_visible;\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignDashboardRole.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CampaignDashboardRole\n *\n * @property int $id\n * @property bool|int $is_default\n * @property bool|int $is_visible\n * @property int $campaign_role_id\n * @property int $campaign_dashboard_id\n * @property CampaignDashboard $dashboard\n * @property CampaignRole $role\n */\nclass CampaignDashboardRole extends Model\n{\n    public $fillable = [\n        'is_default',\n        'is_visible',\n        'campaign_role_id',\n        'campaign_dashboard_id',\n    ];\n\n    /**\n     * @return BelongsTo<CampaignRole, $this>\n     */\n    public function role(): BelongsTo\n    {\n        return $this->belongsTo(CampaignRole::class, 'campaign_role_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<CampaignDashboard, $this>\n     */\n    public function dashboard(): BelongsTo\n    {\n        return $this->belongsTo(CampaignDashboard::class, 'campaign_dashboard_id', 'id');\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignDashboardWidget.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Widget;\nuse App\\Facades\\Dashboard;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\LastSync;\nuse App\\Models\\Concerns\\Taggable;\nuse App\\Services\\FilterService;\nuse Exception;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class CampaignDashboardWidget\n *\n * @property int $id\n * @property int $entity_id\n * @property int $dashboard_id\n * @property ?int $entity_type_id\n * @property Widget $widget\n * @property array $config\n * @property int $width\n * @property int $position\n * @property Entity $entity\n * @property CampaignDashboard $dashboard\n * @property CampaignDashboardWidgetTag[] $dashboardWidgetTags\n * @property ?EntityType $entityType\n *\n * @method static self|Builder positioned()\n * @method static self|Builder onDashboard(?CampaignDashboard $dashboard = null)\n */\nclass CampaignDashboardWidget extends Model\n{\n    use Blameable;\n    use HasCampaign;\n    use HasFactory;\n    use LastSync;\n    use Taggable;\n\n    protected $fillable = [\n        'campaign_id',\n        'entity_id',\n        'widget',\n        'config',\n        'position',\n        'width',\n        'dashboard_id',\n        'entity_type_id',\n    ];\n\n    protected $casts = [\n        'config' => 'array',\n        'widget' => Widget::class,\n    ];\n\n    protected LengthAwarePaginator $cachedEntities;\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo(Entity::class);\n    }\n\n    /**\n     * @return BelongsTo<EntityType, $this>\n     */\n    public function entityType(): BelongsTo\n    {\n        return $this->belongsTo(EntityType::class);\n    }\n\n    /**\n     * @return BelongsTo<CampaignDashboard, $this>\n     */\n    public function dashboard(): BelongsTo\n    {\n        return $this->belongsTo(CampaignDashboard::class, 'dashboard_id', 'id');\n    }\n\n    /**\n     * @return BelongsToMany<\n     *     Tag,\n     *     $this,\n     *     CampaignDashboardWidgetTag\n     * >\n     */\n    public function tags(): BelongsToMany\n    {\n        return $this->belongsToMany(\n            Tag::class,\n            'campaign_dashboard_widget_tags',\n            'widget_id',\n            'tag_id'\n        )->using(CampaignDashboardWidgetTag::class)\n            ->with('entity')\n            ->has('entity');\n    }\n\n    /**\n     * @return HasMany<CampaignDashboardWidgetTag, $this>\n     */\n    public function dashboardWidgetTags(): HasMany\n    {\n        return $this->hasMany(CampaignDashboardWidgetTag::class, 'widget_id', 'id');\n    }\n\n    /**\n     * Get the column size\n     */\n    public function colSize(): int\n    {\n        if ($this->widget == Widget::Campaign) {\n            return 12;\n        }\n        if (! empty($this->width)) {\n            return $this->width;\n        }\n\n        return ($this->widget == Widget::Preview || $this->widget == Widget::Random || $this->widget == Widget::Gallery ||\n            ($this->widget == Widget::Recent && $this->conf('singular')))\n            ? 4 : 6;\n    }\n\n    /**\n     * Get the column size for tablet devices\n     */\n    public function mdColSize(): int\n    {\n        if ($this->widget == Widget::Campaign) {\n            return 12;\n        }\n        if (! empty($this->width)) {\n            return max(6, $this->width);\n        }\n\n        return ($this->widget == Widget::Preview || $this->widget == Widget::Random || $this->widget == Widget::Gallery ||\n            ($this->widget == Widget::Recent && $this->conf('singular')))\n            ? 6 : 6;\n    }\n\n    public function scopePositioned(Builder $query): Builder\n    {\n        return $query->with([\n            'entity', 'entity.image', 'entity.entityType', 'entity.header',\n            //            'tags',\n            'entity.mentions', 'entity.mentions.target', 'entity.mentions.target.tags:id,name,slug',\n            'entity.mentions.target.entityType:id,code,is_special',\n            'entityType',\n        ])\n            ->orderBy('position');\n    }\n\n    public function scopeOnDashboard(Builder $query, ?CampaignDashboard $dashboard = null): Builder\n    {\n        if (empty($dashboard)) {\n            return $query->whereNull('dashboard_id');\n        }\n\n        return $query->where('dashboard_id', $dashboard->id);\n    }\n\n    /**\n     * @param  string  $value\n     */\n    public function conf($value)\n    {\n        return Arr::get($this->config, $value, null);\n    }\n\n    /**\n     * Copy a dashboard to another target\n     */\n    public function copyTo(CampaignDashboard $target)\n    {\n        $new = $this->replicate(['dashboard_id']);\n        $new->dashboard_id = $target->id;\n        $new->save();\n        foreach ($this->dashboardWidgetTags as $tag) {\n            $newTag = $tag->replicate(['widget_id']);\n            $newTag->widget_id = $new->id;\n            $newTag->save();\n        }\n    }\n\n    public function hasAdvancedOptions(): bool\n    {\n        return $this->conf('attributes') == 1 ||\n            $this->conf('members') == '1' ||\n            $this->conf('entity-header') == '1' ||\n            $this->conf('relations') == '1';\n    }\n\n    public function showAttributes(): bool\n    {\n        if ($this->conf('attributes') != '1') {\n            return false;\n        }\n        if (! in_array($this->widget, [Widget::Preview, Widget::Recent, Widget::Random])) {\n            return false;\n        }\n        if ($this->widget == Widget::Recent) {\n            return true;\n        }\n\n        return ! empty($this->entity);\n    }\n\n    public function showRelations(): bool\n    {\n        if ($this->conf('relations') != '1') {\n            return false;\n        }\n        if (! in_array($this->widget, [Widget::Preview, Widget::Recent, Widget::Random])) {\n            return false;\n        }\n        if ($this->widget == Widget::Recent) {\n            return true;\n        }\n\n        return ! empty($this->entity);\n    }\n\n    /*\n     * Show members of families and organisations\n     * @param Entity|null $entity\n     * @return bool\n     */\n    public function showMembers(?Entity $entity = null): bool\n    {\n        if ($this->conf('members') !== '1') {\n            return false;\n        }\n        if (! in_array($this->widget, [Widget::Preview, Widget::Recent, Widget::Random])) {\n            return false;\n        }\n        $types = [\n            config('entities.ids.family'),\n            config('entities.ids.organisation'),\n        ];\n\n        // Preview, check the linked entity\n        $entity = ! empty($entity) ? $entity : $this->entity;\n\n        return $entity !== null && in_array($entity->typeId(), $types);\n    }\n\n    /**\n     * Get the entities of a widget\n     */\n    public function entities(int $page = 1)\n    {\n        if (isset($this->cachedEntities)) {\n            return $this->cachedEntities;\n        }\n        $base = new Entity;\n\n        $excludedTypes = [];\n\n        if ($this->filterUnmentioned()) {\n            $base = $base->unmentioned()\n                ->whereNotIn($base->getTable() . '.type_id', $excludedTypes);\n        } elseif ($this->filterMentionless()) {\n            $base = $base->mentionless()\n                ->whereNotIn($base->getTable() . '.type_id', $excludedTypes);\n        }\n        // Get only non archived entities\n        $base = $base->whereNull('entities.archived_at');\n        $base = $base->select([\n            'entities.id',\n            'entities.name',\n            'entities.is_private',\n            'entities.type_id',\n            'entities.entity_id',\n            'entities.image_path',\n            'entities.created_by',\n            'entities.updated_by',\n            'entities.updated_at',\n            'entities.image_uuid',\n        ]);\n\n        // Ordering\n        $order = Arr::get($this->config, 'order', null);\n        if (empty($order)) {\n            $base = $base->recentlyModified();\n        } elseif ($order == 'oldest') {\n            $base = $base->oldestModified();\n        } else {\n            [$field, $order] = explode('_', $order);\n            $base = $base->orderBy($field, $order);\n        }\n        $relations = [\n            'image:campaign_id,id,ext,focus_x,focus_y',\n            'entityType:id,code,is_special',\n            'mentions',\n            'mentions.target',\n            'mentions.target.tags',\n            'mentions.target.entityType:id,code,is_special',\n        ];\n\n        // If an entity type is provided, we can combine that with filters. We need to get the list of the misc\n        // ids first to pass on to the entity query.\n        if ($this->entityType && ! empty($this->config['filters']) && $this->entityType->isStandard()) {\n            /** @var Character|mixed $model */\n            $model = $this->entityType->getClass();\n\n            /** @var FilterService $filterService */\n            $filterService = app()->make('App\\Services\\FilterService');\n            $filterService\n                ->session(false)\n                ->options($this->filterOptions())\n                ->model($model)\n                ->entityType($this->entityType)\n                ->make('dashboard');\n\n            $models = $model\n                ->select($model->getTable() . '.id')\n                ->filter($filterService->filters())\n                ->get();\n\n            $entityIds = $models->pluck('id');\n\n            // Add the filter to the base query\n            $base = $base->whereIn('entities.entity_id', $entityIds);\n        }\n\n        return $this->cachedEntities = $base\n            ->inTags($this->tags->pluck('id')->toArray())\n            ->inTypes($this->entityType?->id)\n            ->with($relations)\n            ->paginate(10, ['*'], 'page', $page);\n    }\n\n    /**\n     * Get a random entity\n     * Todo: refactor this code with the code from the quick link?\n     *\n     * @throws BindingResolutionException\n     */\n    public function randomEntity()\n    {\n        $base = new Entity;\n\n        if ($this->entityType) {\n            if ($this->entityType->isCustom()) {\n                return $base\n                    ->filter($this->filterOptions())\n                    ->inTags($this->tags->pluck('id')->toArray())\n                    ->whereNotIn('entities.id', Dashboard::excluding())\n                    ->inTypes($this->entityType->id)\n                    ->with(['image', 'entityType', 'header', 'tags'])\n                    // We cannot use inRandomOrder, because for some reason, when copled with livewire, it always returns RAND(0)\n                    ->orderByRaw('RAND()')\n                    ->first();\n            }\n            $model = $this->entityType->getClass();\n\n            /** @var FilterService $filterService */\n            $filterService = app()->make('App\\Services\\FilterService');\n            $filterService->entityType($this->entityType);\n\n            $filterService\n                ->session(false)\n                ->options($this->filterOptions())\n                ->model($model)\n                ->make('dashboard');\n\n            // @phpstan-ignore-next-line\n            $models = $model\n                ->select($model->getTable() . '.id')\n                ->filter($filterService->filters())\n                ->get();\n\n            $entityIds = $models->pluck('id');\n\n            // Add the filter to the base query\n            $base = $base->whereIn('entities.entity_id', $entityIds);\n        }\n\n        return $base\n            ->inTags($this->tags->pluck('id')->toArray())\n            ->whereNotIn('type_id', [config('entities.ids.attribute_template'), config('entities.ids.conversation'), config('entities.ids.tag')])\n            ->whereNotIn('entities.id', Dashboard::excluding())\n            ->inTypes($this->entityType?->id)\n            ->with(['image', 'entityType', 'header', 'tags'])\n            ->orderByRaw('RAND()')\n            ->first();\n    }\n\n    /**\n     * Get the widget filters\n     */\n    public function filterOptions(): array\n    {\n        if (empty($this->config['filters'])) {\n            return [];\n        }\n\n        try {\n            $filters = [];\n            $segments = explode('&', $this->config['filters']);\n            foreach ($segments as $segment) {\n                $params = explode('=', $segment);\n                $name = $params[0];\n                if (Str::endsWith($name, '[]')) {\n                    $filters[mb_substr($name, 0, -2)][] = $params[1];\n\n                    continue;\n                }\n                $filters[$params[0]] = $params[1];\n            }\n\n            return $filters;\n        } catch (Exception $e) {\n            // Log::error('Widget error:' . $e->getMessage());\n            return [];\n        }\n    }\n\n    /**\n     * A way to set the entity, typically for the random widget\n     */\n    public function setEntity(Entity $entity): self\n    {\n        $this->entity = $entity;\n\n        return $this;\n    }\n\n    public function widgetIcon(): string\n    {\n        if ($this->widget === Widget::Recent) {\n            return 'fa-regular fa-list';\n        } elseif ($this->widget === Widget::Header) {\n            return 'fa-regular fa-heading';\n        } elseif ($this->widget === Widget::Preview) {\n            return 'fa-regular fa-align-justify';\n        } elseif ($this->widget === Widget::Calendar) {\n            return 'fa-regular fa-calendar';\n        } elseif ($this->widget === Widget::Random) {\n            return 'fa-regular fa-dice-d20';\n        } elseif ($this->widget === Widget::Campaign) {\n            return 'fa-regular fa-th-list';\n        } elseif ($this->widget === Widget::Welcome) {\n            return 'fa-regular fa-party-horn';\n        } elseif ($this->widget === Widget::Onboarding) {\n            return 'fa-regular fa-calendar-check';\n        } elseif ($this->widget === Widget::Gallery) {\n            return 'fa-regular fa-images';\n        }\n\n        return 'fa-regular fa-question-circle';\n    }\n\n    public function customClass(Campaign $campaign): string\n    {\n        if (! $campaign->boosted()) {\n            return '';\n        }\n        if (empty($this->conf('class'))) {\n            return '';\n        }\n\n        return (string) $this->conf('class');\n    }\n\n    public function customSize(): string\n    {\n        if (empty($this->conf('size'))) {\n            return 'h3';\n        }\n\n        return (string) $this->conf('size');\n    }\n\n    protected function filterUnmentioned(): bool\n    {\n        return Arr::get($this->config, 'adv_filter') === 'unmentioned';\n    }\n\n    protected function filterMentionless(): bool\n    {\n        return Arr::get($this->config, 'adv_filter') === 'mentionless';\n    }\n\n    /**\n     * Determine if a widget is visible. This is a simple check on the linked entity, if there is one.\n     */\n    public function visible(): bool\n    {\n        // Not linked to an entity, easy\n        if (empty($this->entity_id)) {\n            return true;\n        }\n\n        // Linked but no entity or no child? Permission issue or deleted entity\n        return ! empty($this->entity);\n    }\n\n    public function noGuest(): bool\n    {\n        return $this->widget == Widget::Onboarding;\n    }\n\n    /**\n     * Some\n     */\n    public function missingEntity(): bool\n    {\n        return in_array($this->widget, [\n            Widget::Calendar,\n            Widget::Preview,\n            Widget::Unmentioned,\n        ]) && empty($this->entity);\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignDashboardWidgetTag.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n\n/**\n * Class CampaignDashboardWidgetTag\n *\n * @property int $widget_id\n * @property int $tag_id\n * @property Tag $tag\n * @property CampaignDashboardWidget $widget\n */\nclass CampaignDashboardWidgetTag extends Pivot\n{\n    public $timestamps = false;\n\n    public $table = 'campaign_dashboard_widget_tags';\n\n    /**\n     * @return BelongsTo<Tag, $this>\n     */\n    public function tag(): BelongsTo\n    {\n        return $this->belongsTo(Tag::class);\n    }\n\n    /**\n     * @return BelongsTo<CampaignDashboardWidget, $this>\n     */\n    public function widget(): BelongsTo\n    {\n        return $this->belongsTo(CampaignDashboardWidget::class, 'id', 'widget_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignDescription.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $id\n * @property int $campaign_id\n * @property ?string $description\n * @property ?string $excerpt\n * @property Campaign $campaign\n */\nclass CampaignDescription extends Model\n{\n    protected $fillable = [\n        'campaign_id',\n        'description',\n        'excerpt',\n    ];\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignEvent.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasTimestamps;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property string $event\n * @property array $metadata\n */\nclass CampaignEvent extends Model\n{\n    use Blameable;\n    use HasCampaign;\n    use HasTimestamps;\n\n    public $fillable = [\n        'campaign_id',\n        'created_by',\n        'event',\n        'metadata',\n    ];\n\n    public $casts = [\n        'metadata' => 'array',\n    ];\n}\n"
  },
  {
    "path": "app/Models/CampaignExport.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\CampaignExportStatus;\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Observers\\CampaignExportObserver;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\MassPrunable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CampaignExport\n *\n * @property int $id\n * @property int $campaign_id\n * @property int $status\n * @property string $path\n * @property float $progress\n */\n#[ObservedBy(CampaignExportObserver::class)]\nclass CampaignExport extends Model\n{\n    use HasUser;\n    use MassPrunable;\n    use SortableTrait;\n\n    public $fillable = [\n        'size',\n        'type',\n        'status',\n        'campaign_id',\n        'created_by',\n        'path',\n    ];\n\n    public $sortable = [\n        'status',\n        'type',\n        'created_at',\n        'created_by',\n    ];\n\n    public $casts = [\n        'status' => CampaignExportStatus::class,\n    ];\n\n    protected string $userField = 'created_by';\n\n    /**\n     * Automatically prune old elements from the db\n     */\n    public function prunable(): Builder\n    {\n        return static::where('updated_at', '<=', now()->subDays(90));\n    }\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n\n    public function finished(): bool\n    {\n        return $this->status === CampaignExportStatus::finished;\n    }\n\n    public function running(): bool\n    {\n        return $this->status === CampaignExportStatus::running;\n    }\n\n    public function scheduled(): bool\n    {\n        return $this->status === CampaignExportStatus::scheduled;\n    }\n\n    public function failed(): bool\n    {\n        return $this->status === CampaignExportStatus::failed;\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignFilter.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\CampaignFilterType;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass CampaignFilter extends Model\n{\n    protected $fillable = ['campaign_id', 'type', 'entry'];\n\n    protected $casts = [\n        'type' => CampaignFilterType::class,\n    ];\n\n    public function campaign()\n    {\n        return $this->belongsTo(Campaign::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignFlag.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\CampaignFlags;\nuse App\\Models\\Concerns\\HasCampaign;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property CampaignFlags $flag\n * @property string $value\n */\nclass CampaignFlag extends Model\n{\n    use HasCampaign;\n    use HasFactory;\n\n    protected $fillable = [\n        'flag',\n    ];\n\n    public $casts = [\n        'flag' => CampaignFlags::class,\n    ];\n}\n"
  },
  {
    "path": "app/Models/CampaignFollower.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\Paginatable;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n\n/**\n * Class CampaignFollower\n *\n * @property int $campaign_id\n * @property Campaign $campaign\n */\nclass CampaignFollower extends Pivot\n{\n    use HasUser;\n    use Paginatable;\n\n    /**\n     * @var string\n     */\n    public $table = 'campaign_followers';\n\n    protected $fillable = ['user_id', 'campaign_id'];\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignGenre.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n\n/**\n * Class CampaignGenre\n *\n * @property int $genre_id\n * @property int $campaign_id\n * @property Campaign $campaign\n * @property Genre $genre\n */\nclass CampaignGenre extends Pivot\n{\n    /**\n     * @var string\n     */\n    public $table = 'campaign_genre';\n\n    protected $fillable = ['campaign_id', 'genre_id'];\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Genre, $this>\n     */\n    public function genre(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Genre', 'genre_id', 'id');\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignImport.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Prunable;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Storage;\n\n/**\n * @property int $id\n * @property array $config\n * @property array $logs\n * @property array $errors\n * @property CampaignImportStatus $status_id\n * @property Campaign $campaign\n */\nclass CampaignImport extends Model\n{\n    use HasUser;\n    use Prunable;\n    use SortableTrait;\n\n    public $fillable = [\n        'user_id',\n        'campaign_id',\n        'status_id',\n        'logs',\n        'errors',\n    ];\n\n    public $casts = [\n        'config' => 'array',\n        'logs' => 'array',\n        'errors' => 'array',\n        'status_id' => CampaignImportStatus::class,\n    ];\n\n    public $sortable = [\n        'status_id',\n        'updated_at',\n        'created_by',\n    ];\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class);\n    }\n\n    /**\n     * Automatically prune old elements from the db\n     */\n    public function prunable(): Builder\n    {\n        return static::where(function ($query) {\n            // Stuck in PREPARED or QUEUED > 24h\n            $query->whereIn('status_id', [\n                CampaignImportStatus::PREPARED,\n                CampaignImportStatus::QUEUED,\n            ])\n                ->where('created_at', '<=', now()->subDay());\n        })\n            // CSV imports that are (READY) > 24h ago\n            ->orWhere(function ($query) {\n                $query->where('status_id', CampaignImportStatus::READY)\n                    ->where('updated_at', '<=', now()->subHours(24));\n            })\n            // Existing: Catch-all cleanup for very old records\n            ->orWhere('created_at', '<=', now()->subDays(config('imports.prune')));\n    }\n\n    public function isPrepared(): bool\n    {\n        return $this->status_id == CampaignImportStatus::PREPARED;\n    }\n\n    public function isFailed(): bool\n    {\n        return $this->status_id == CampaignImportStatus::FAILED;\n    }\n\n    public function isCsv(): bool\n    {\n        $files = $this->config['files'];\n        foreach ($files as $file) {\n            if (is_string($file) && str_ends_with($file, '.csv')) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    protected function pruning(): void\n    {\n        $files = Arr::get($this->config, 'files');\n        if (empty($files)) {\n            return;\n        }\n        foreach ($files as $file) {\n            Storage::disk('s3')->delete($file);\n            Storage::disk('export')->delete($file);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignInvite.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CampaignInvite\n *\n * @property int $id\n * @property int $role_id\n * @property string $token\n * @property bool|int $is_active\n * @property int $validity\n */\nclass CampaignInvite extends Model\n{\n    use Blameable;\n    use HasCampaign;\n\n    /**\n     * @var string\n     */\n    public $table = 'campaign_invites';\n\n    protected $fillable = [\n        'role_id',\n        'campaign_id',\n        'created_by',\n        'token',\n        'is_active',\n        'validity',\n    ];\n\n    /**\n     * @return BelongsTo<CampaignRole, $this>\n     */\n    public function role(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\CampaignRole', 'role_id', 'id');\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignPermission.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CampaignPermission\n *\n * @property int $entity_id\n * @property int $campaign_role_id\n * @property int $campaign_id\n * @property int $entity_type_id\n * @property int $action\n * @property string $key\n * @property string $table_name\n * @property bool|int $access\n * @property Carbon $created_at\n * @property Carbon $updated_at\n * @property Campaign $campaign\n * @property CampaignRole $campaignRole\n * @property Entity $entity\n *\n * @method static self|Builder roleIds(array $ids)\n */\nclass CampaignPermission extends Model\n{\n    use HasUser;\n\n    public const ACTION_READ = 1;\n\n    public const ACTION_EDIT = 2;\n\n    public const ACTION_ADD = 3;\n\n    public const ACTION_DELETE = 4;\n\n    public const ACTION_POSTS = 5;\n\n    public const ACTION_PERMS = 6;\n\n    public const ACTION_MANAGE = 10;\n\n    public const ACTION_DASHBOARD = 11;\n\n    public const ACTION_MEMBERS = 12;\n\n    public const ACTION_GALLERY = 13;\n\n    public const ACTION_CAMPAIGN = 14;\n\n    public const ACTION_GALLERY_BROWSE = 15;\n\n    public const ACTION_GALLERY_UPLOAD = 16;\n\n    public const ACTION_TEMPLATES = 17;\n\n    public const ACTION_POST_TEMPLATES = 18;\n\n    public const ACTION_BOOKMARKS = 19;\n\n    public const ACTION_WHITEBOARDS_VIEW = 30;\n\n    public const ACTION_WHITEBOARDS_CREATE = 31;\n\n    protected $fillable = [\n        'campaign_role_id',\n        'campaign_id',\n        'user_id',\n        'action',\n        'entity_id',\n        'entity_type_id',\n        'access',\n    ];\n\n    /**\n     * Optional campaign role\n     *\n     * @return BelongsTo<CampaignRole, $this>\n     */\n    public function campaignRole(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\CampaignRole', 'campaign_role_id', 'id');\n    }\n\n    /**\n     * Optional entity\n     *\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id');\n    }\n\n    public function scopeRoleIDs(Builder $query, array $roleIds): Builder\n    {\n        return $query->whereIn('campaign_role_id', $roleIds);\n    }\n\n    public function scopeAction(Builder $query, int $action): Builder\n    {\n        return $query->whereIn('action', $action);\n    }\n\n    /**\n     * Copy an entity permission to another target\n     */\n    public function copyTo(Entity $target)\n    {\n        $new = $this->replicate(['entity_id']);\n        $new->entity_id = $target->id;\n\n        return $new->save();\n    }\n\n    /**\n     * Determine if the permission's action is the wanted one\n     */\n    public function isAction(int $action): bool\n    {\n        return $this->action === $action;\n    }\n\n    /**\n     * Get the \"key\" of the permission, used for caching and lookup in the permission engines\n     */\n    public function key(): string\n    {\n        // Campaign actions have a different cache key\n        if ($this->action >= 10) {\n            return 'campaign_' . $this->action;\n        }\n\n        // If there is no entity attached, just go entity type + action\n        if (! $this->entity_id) {\n            return $this->entity_type_id . '_' . $this->action;\n        }\n\n        return '_' . $this->action . '_' . $this->entity_id;\n    }\n\n    public function isGallery(): bool\n    {\n        $galleryPermissions = [\n            self::ACTION_GALLERY,\n            self::ACTION_GALLERY_BROWSE,\n            self::ACTION_GALLERY_UPLOAD,\n        ];\n\n        return in_array($this->action, $galleryPermissions);\n    }\n\n    public function isWhiteboard(): bool\n    {\n        $galleryPermissions = [\n            self::ACTION_WHITEBOARDS_VIEW,\n            self::ACTION_WHITEBOARDS_CREATE,\n        ];\n\n        return in_array($this->action, $galleryPermissions);\n    }\n\n    public function isTemplate(): bool\n    {\n        $templatePermissions = [\n            self::ACTION_TEMPLATES,\n            self::ACTION_POST_TEMPLATES,\n        ];\n\n        return in_array($this->action, $templatePermissions);\n    }\n\n    public function isBookmark(): bool\n    {\n        $templatePermissions = [\n            self::ACTION_BOOKMARKS,\n        ];\n\n        return in_array($this->action, $templatePermissions);\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignPlugin.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CampaignPlugin\n *\n * @property int $campaign_id\n * @property int $created_by\n * @property int $plugin_id\n * @property int $plugin_version_id\n * @property string $name\n * @property bool|int $is_active\n * @property Plugin $plugin\n * @property Campaign $campaign\n * @property PluginVersion $version\n *\n * @method static self|Builder templates(Campaign $campaign)\n */\nclass CampaignPlugin extends Model\n{\n    /**\n     * @return BelongsTo<Plugin, $this>\n     */\n    public function plugin(): BelongsTo\n    {\n        return $this->belongsTo(Plugin::class);\n    }\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class);\n    }\n\n    /**\n     * @return BelongsTo<PluginVersion, $this>\n     */\n    public function version(): BelongsTo\n    {\n        return $this->belongsTo(PluginVersion::class, 'plugin_version_id');\n    }\n\n    public function scopeTemplates(Builder $builder, Campaign $campaign): Builder\n    {\n        return $builder->leftJoin('plugins as p', 'p.id', 'plugin_id')\n            ->where('campaign_id', $campaign->id)\n            ->where('p.type_id', 2)\n            ->where('is_active', true)\n            ->with('version')\n            ->orderBy('p.name');\n    }\n\n    public function canEnable(): bool\n    {\n        return $this->plugin->isTheme() && ! $this->is_active;\n    }\n\n    public function canDisable(): bool\n    {\n        return $this->plugin->isTheme() && $this->is_active;\n    }\n\n    /**\n     * Determine if the plug can be rendered. This is needed for character sheets in draft statuses,\n     * to only render a sheet for the author, as they can potentially add XSS injections.\n     */\n    public function renderable(): bool\n    {\n        if (! $this->plugin->isAttributeTemplate()) {\n            return false;\n        } elseif ($this->version->status_id === 3) {\n            // Published version? We good\n            return true;\n        }\n\n        // The user needs to be an author\n        return $this->isAuthor();\n    }\n\n    /**\n     * Check if the current user is an author of a plugin\n     */\n    public function isAuthor(): bool\n    {\n        if (auth()->guest()) {\n            return false;\n        }\n\n        return $this->plugin->created_by === auth()->user()->id;\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignRole.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\n/**\n * Class Attribute\n *\n * @property int $id\n * @property int $campaign_id\n * @property string $name\n * @property bool|int $is_admin\n * @property bool|int $is_public\n * @property Campaign $campaign\n * @property Collection|CampaignPermission[] $permissions\n * @property Collection|CampaignPermission[] $rolePermissions\n * @property Collection|CampaignDashboardRole[] $dashboardRoles\n * @property Collection|CampaignRoleUser[] $users\n *\n * @method static self|Builder admin(bool $with)\n * @method static self|Builder public(bool $with)\n * @method static self|Builder withoutAdmin()\n */\nclass CampaignRole extends Model\n{\n    use Paginatable;\n    use SortableTrait;\n\n    protected $fillable = [\n        'campaign_id',\n        'is_admin',\n        'is_public',\n        'name',\n    ];\n\n    /**\n     * @var array\n     */\n    public $sortable = [\n        'name',\n        'is_admin',\n    ];\n\n    /**\n     * Determine if the campaign role is the campaign's public role\n     */\n    public function isPublic(): bool\n    {\n        return $this->is_public;\n    }\n\n    /**\n     * Determine if the campaign role is the campaign's admin role\n     */\n    public function isAdmin(): bool\n    {\n        return $this->is_admin;\n    }\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n\n    /**\n     * @return HasMany<CampaignRoleUser, $this>\n     */\n    public function users(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignRoleUser', 'campaign_role_id');\n    }\n\n    /**\n     * @return HasMany<CampaignDashboardRole, $this>\n     */\n    public function dashboardRoles(): HasMany\n    {\n        return $this->hasMany(CampaignDashboardRole::class, 'campaign_role_id', 'id');\n    }\n\n    /**\n     * Filter on a campaign role's public status\n     */\n    public function scopePublic(Builder $query, int $value = 1): Builder\n    {\n        return $query->where('is_public', $value);\n    }\n\n    /**\n     * Get all roles except admin\n     */\n    public function scopeWithoutAdmin(Builder $query): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $query->admin(false);\n    }\n\n    /**\n     * Get the admin role\n     */\n    public function scopeAdmin(Builder $query, bool $with = true): Builder\n    {\n        return $query->where('is_admin', $with);\n    }\n\n    /**\n     * @return HasMany<CampaignPermission, $this>\n     */\n    public function permissions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignPermission', 'campaign_role_id');\n    }\n\n    /**\n     * @return HasMany\n     */\n    public function rolePermissions()\n    {\n        return $this->permissions()\n            ->whereNull('entity_id');\n    }\n\n    public function scopeSearch(Builder $builder, ?string $search = null): Builder\n    {\n        return $builder\n            ->where('name', 'like', \"%{$search}%\");\n    }\n\n    public function url(string $sub): string\n    {\n        return 'campaign_roles.' . $sub;\n    }\n\n    public function duplicate(CampaignRole $campaignRole): self\n    {\n        foreach ($this->permissions as $permission) {\n            $newPermission = $permission->replicate(['campaign_role_id']);\n            $newPermission->campaign_role_id = $campaignRole->id;\n            $newPermission->save();\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignRoleUser.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class Attribute\n *\n * @property int $id\n * @property int $campaign_role_id\n * @property Campaign $campaign\n * @property CampaignRole $campaignRole\n * @property Carbon $created_at\n */\nclass CampaignRoleUser extends Model\n{\n    use HasUser;\n\n    protected $fillable = [\n        'campaign_role_id',\n        'user_id',\n    ];\n\n    /**\n     * @return BelongsTo<CampaignRole, $this>\n     */\n    public function campaignRole(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\CampaignRole', 'campaign_role_id', 'id');\n    }\n\n    public function recentlyCreated(): bool\n    {\n        return $this->created_at->diffInMinutes() <= 15;\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignSetting.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property Campaign $campaign\n * @property int|bool $characters\n * @property int|bool $quests\n * @property int|bool $events\n * @property int|bool $dice_rolls\n * @property int|bool $conversations\n * @property int|bool $abilities\n * @property int|bool $calendars\n * @property int|bool $items\n * @property int|bool $timelines\n * @property int|bool $races\n * @property int|bool $aliases\n * @property int|bool $assets\n */\nclass CampaignSetting extends Model\n{\n    /**\n     * @var string\n     */\n    public $table = 'campaign_settings';\n\n    protected $fillable = [\n        'abilities',\n        'media',\n        'campaign_id',\n        'characters',\n        'entity_attributes',\n        'events',\n        'families',\n        'items',\n        'journals',\n        'locations',\n        'notes',\n        'organisations',\n        'quests',\n        'calendars',\n        'tags',\n        'dice_rolls',\n        'bookmarks',\n        'conversations',\n        'races',\n        'maps',\n        'timelines',\n        'inventories',\n        'creatures',\n        'whiteboards',\n        'aliases',\n    ];\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n\n    /**\n     * Count the number of activated modules\n     */\n    public function countEnabledModules(): int\n    {\n        $count = 0;\n        foreach ($this->fillable as $col) {\n            if ($col != 'campaign_id' && $this->$col == true) {\n                $count++;\n            }\n        }\n\n        return $count;\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignStyle.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Carbon\\Carbon;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Number;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class CampaignStyle\n *\n * @property int $id\n * @property string $name\n * @property string $content\n * @property Carbon $updated_at\n * @property Carbon $created_at\n * @property bool|int $is_enabled\n * @property bool|int $is_theme\n * @property int $order\n *\n * @method static self|Builder enabled($enabled = true)\n */\nclass CampaignStyle extends Model\n{\n    use Blameable;\n    use HasCampaign;\n    use HasFactory;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    public $fillable = [\n        'name',\n        'content',\n        'is_enabled',\n        'order',\n    ];\n\n    public $sortable = [\n        'name',\n        'updated_at',\n        'is_enabled',\n        'order',\n        'is_theme',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    public $defaultSort = ['order', 'id'];\n\n    public function scopeEnabled(Builder $query, bool $enabled = true): Builder\n    {\n        return $query->where('is_enabled', $enabled);\n    }\n\n    public function scopeTheme(Builder $query, bool $theme = true): Builder\n    {\n        return $query->where('is_theme', $theme);\n    }\n\n    public function length(): string\n    {\n        return (string) Number::format(mb_strlen($this->content));\n    }\n\n    public function url(string $sub): string\n    {\n        return 'campaign_styles.' . $sub;\n    }\n\n    public function isTheme(): bool\n    {\n        return $this->is_theme;\n    }\n\n    public function content(): ?string\n    {\n        if (! $this->isTheme()) {\n            return $this->content;\n        }\n\n        try {\n            $theme = [':root {'];\n            $config = json_decode($this->content);\n            foreach ($config as $k => $v) {\n                $theme[] = '  --' . $k . ': ' . $v . ';';\n            }\n            $theme[] = '}';\n\n            return implode(\"\\n\", $theme);\n        } catch (Exception $e) {\n            return '/** Issue with the theme, please contact us */' . \"\\n\\n\";\n        }\n    }\n\n    public function jsonConfig(): string\n    {\n        if (empty($this->content)) {\n            return '';\n        }\n\n        $rootless = Str::remove([':root ', \"\\n\"], $this->content);\n\n        $json = json_encode($rootless);\n        dd($json);\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignSystem.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasCampaign;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n\n/**\n * Class CampaignSystem\n *\n * @property int $user_id\n * @property string $text\n */\nclass CampaignSystem extends Pivot\n{\n    use HasCampaign;\n\n    /**\n     * @return BelongsTo<GameSystem, $this>\n     */\n    public function gameSystem(): BelongsTo\n    {\n        return $this->belongsTo(GameSystem::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/CampaignUser.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough;\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n\n/**\n * Class CampaignUser\n *\n * @property int $id\n * @property int $campaign_id\n * @property Campaign $campaign\n * @property Carbon $created_at\n *\n * @method static Builder|self campaignUser(int $campaignID, int $userID)\n */\nclass CampaignUser extends Pivot\n{\n    use HasUser;\n    use Paginatable;\n    use SortableTrait;\n\n    public $table = 'campaign_user';\n\n    protected array $sortable = ['user.name', 'created_at', 'last_login'];\n\n    protected $fillable = ['user_id', 'campaign_id'];\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n\n    /**\n     * Get the user's roles\n     *\n     * @return HasManyThrough<CampaignRole, CampaignRoleUser, $this>\n     */\n    public function roles(): HasManyThrough\n    {\n        return $this->hasManyThrough(\n            'App\\Models\\CampaignRole',\n            'App\\Models\\CampaignRoleUser',\n            'user_id',\n            'id',\n            'user_id',\n            'campaign_role_id'\n        )\n            ->where('campaign_id', $this->campaign_id);\n    }\n\n    /**\n     * Determin if the user is part of an admin role\n     */\n    public function isAdmin(): bool\n    {\n        return $this->roles()->where(['is_admin' => true])->count() > 0;\n    }\n\n    public function scopeSearch(Builder $builder, ?string $search = null): Builder\n    {\n        return $builder\n            ->select($this->getTable() . '.*')\n            ->leftJoin('users as u', 'u.id', $this->getTable() . '.user_id')\n            ->where('u.name', 'like', \"%{$search}%\");\n    }\n\n    /**\n     * Only get users of a campaign who aren't admins (used for the bulk permission UI)\n     */\n    public function scopeWithoutAdmins(Builder $builder): Builder\n    {\n        return $builder->whereNotExists(function ($query) {\n            $query->from('campaign_role_users as cru')\n                ->join('campaign_roles as cr', 'cr.id', 'cru.campaign_role_id')\n                ->whereColumn('cru.user_id', $this->getTable() . '.user_id')\n                ->whereColumn('cr.campaign_id', $this->getTable() . '.campaign_id')\n                ->where('cr.is_admin', true);\n        });\n    }\n\n    public function scopeCampaignUser(Builder $builder, int $campaignID, int $userID): Builder\n    {\n        return $builder\n            ->where('campaign_id', $campaignID)\n            ->where('user_id', $userID);\n    }\n}\n"
  },
  {
    "path": "app/Models/CategoryStatus.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $id\n * @property int $category_id\n * @property string $key\n * @property ?string $icon\n * @property int $sort_order\n * @property bool $is_default\n * @property EntityType $entityType\n */\nclass CategoryStatus extends Model\n{\n    public $timestamps = false;\n\n    public $fillable = [\n        'category_id',\n        'key',\n        'icon',\n        'sort_order',\n        'is_default',\n    ];\n\n    protected function casts(): array\n    {\n        return [\n            'is_default' => 'boolean',\n        ];\n    }\n\n    /**\n     * @return BelongsTo<EntityType, $this>\n     */\n    public function entityType(): BelongsTo\n    {\n        return $this->belongsTo(EntityType::class, 'category_id');\n    }\n\n    public function name(): string\n    {\n        return trans('entities/statuses.' . $this->entityType->code . '.' . $this->key);\n    }\n\n    public function icon(): string\n    {\n        return 'fa-regular ' . ($this->icon ?? '');\n    }\n\n    public function isCustom(): bool\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "app/Models/Character.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\FilterOption;\nuse App\\Enums\\OrganisationMemberPin;\nuse App\\Facades\\CharacterCache;\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Character\n *\n * @property string $title\n * @property string $age\n * @property string $sex\n * @property string $pronouns\n * @property bool|int $is_personality_visible\n * @property bool|int $is_appearance_pinned\n * @property bool|int $is_personality_pinned\n * @property Collection|CharacterFamily[] $characterFamilies\n * @property Collection|Family[] $families\n * @property Collection|Race[] $races\n * @property Collection|CharacterRace[] $characterRaces\n * @property Collection|Organisation[] $organisations\n * @property Collection|OrganisationMember[] $organisationMemberships\n * @property Collection|ConversationParticipant[] $conversationParticipants\n * @property Collection|Item[] $items\n * @property Collection|DiceRoll[] $diceRolls\n * @property Collection|CharacterTrait[] $appearances\n * @property Collection|CharacterTrait[] $personality\n */\nclass Character extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'title',\n        'age',\n        'sex',\n        'pronouns',\n        'is_private',\n        'is_personality_visible',\n        'is_appearance_pinned',\n        'is_personality_pinned',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'title',\n        'age',\n        'sex',\n        'pronouns',\n        'locations',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n        'sex',\n        'pronouns',\n    ];\n\n    /**\n     * Searchable fields\n     */\n    protected array $searchableColumns = ['name', 'title'];\n\n    protected array $suggestions = [\n        CharacterCache::class => 'clearSuggestion',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'sex',\n        'pronouns',\n        'title',\n        'age',\n    ];\n\n    /**\n     * Casting for order by\n     *\n     * @var array\n     */\n    protected $orderCasting = [\n        'age' => 'unsigned',\n    ];\n\n    /**\n     * Explicit filters\n     */\n    protected array $explicitFilters = [\n        'sex',\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [\n        'characterTraits', 'characterFamilies', 'characterRaces', 'organisationMemberships',\n    ];\n\n    /**\n     * @var string[] Extra relations loaded for the API endpoint\n     */\n    public array $apiWith = ['characterTraits', 'characterRaces', 'characterFamilies'];\n\n    /**\n     * Filter for characters in a specific list of organisations\n     */\n    public function scopeMember(Builder $query, ?string $value, FilterOption $filter): Builder\n    {\n        if ($filter === FilterOption::NONE) {\n            // If called with a param, it's being called too early and will be called later in the process\n            if (! empty($value)) {\n                return $query;\n            }\n            $query\n                ->select($this->getTable() . '.*')\n                ->leftJoin('organisation_member as memb', function ($join) {\n                    $join->on('memb.character_id', '=', $this->getTable() . '.id');\n                })\n                ->where('memb.organisation_id', null);\n\n            if (auth()->guest() || ! auth()->user()->isAdmin()) {\n                $query->where('memb.is_private', 0);\n            }\n\n            return $query;\n        } elseif ($filter === FilterOption::EXCLUDE) {\n            return $query\n                ->whereRaw('(select count(*) from organisation_member as memb where memb.character_id = ' .\n                    $this->getTable() . '.id and memb.character_id = ' . ((int) $value) . ' ' . $this->subPrivacy('and memb.is_private') . ') = 0');\n        }\n\n        $ids = [$value];\n        if ($filter === FilterOption::CHILDREN) {\n            /** @var ?Organisation $model */\n            $model = Organisation::find($value);\n            if (! empty($model)) {\n                $ids = [...$model->entity->descendants->pluck('id')->toArray(), $model->id];\n            }\n        }\n        $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin('organisation_member as memb', function ($join) {\n                $join->on('memb.character_id', '=', $this->getTable() . '.id');\n            })\n            ->whereIn('memb.organisation_id', $ids);\n\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->where('memb.is_private', 0);\n        }\n\n        return $query->distinct();\n    }\n\n    /**\n     * @return BelongsToMany<Family, $this>\n     */\n    public function families(): BelongsToMany\n    {\n        return $this->belongsToMany(Family::class)\n            ->orderBy('character_family.id')\n            ->with([\n                'entity' => function ($sub) {\n                    $sub->select('id', 'name', 'entity_id', 'type_id');\n                },\n            ]);\n    }\n\n    /**\n     * @return HasMany<CharacterFamily, $this>\n     */\n    public function characterFamilies(): HasMany\n    {\n        return $this->hasMany(CharacterFamily::class, 'character_id')\n            ->orderBy('id')\n            ->has('family')\n            ->has('family.entity')\n            ->with([\n                'family' => function ($sub) {\n                    $sub->select('id', 'name', 'is_private');\n                },\n                'family.entity' => function ($sub) {\n                    $sub->select('id', 'name', 'entity_id', 'type_id');\n                },\n            ]);\n    }\n\n    /**\n     * @return HasMany<CharacterRace, $this>\n     */\n    public function characterRaces(): HasMany\n    {\n        return $this->hasMany(CharacterRace::class, 'character_id')\n            ->orderBy('id')\n            ->has('race')\n            ->has('race.entity')\n            ->with([\n                'race' => function ($sub) {\n                    $sub->select('id', 'name', 'is_private');\n                },\n                'race.entity' => function ($sub) {\n                    $sub->select('id', 'name', 'entity_id', 'type_id');\n                },\n            ]);\n    }\n\n    /**\n     * @return BelongsToMany<Race, $this>\n     */\n    public function races(): BelongsToMany\n    {\n        return $this->belongsToMany(Race::class)\n            ->orderBy('character_race.id')\n            ->with([\n                'entity' => function ($sub) {\n                    $sub->select('id', 'name', 'entity_id', 'type_id');\n                },\n            ]);\n    }\n\n    /**\n     * @return HasMany<OrganisationMember, $this>\n     */\n    public function organisationMemberships(): HasMany\n    {\n        return $this->hasMany('App\\Models\\OrganisationMember', 'character_id', 'id');\n    }\n\n    /**\n     * @return BelongsToMany<Organisation, $this>\n     */\n    public function organisations(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Organisation', 'organisation_member')\n            ->orderBy('organisation_member.id')\n            ->with([\n                'entity' => function ($sub) {\n                    $sub->select('id', 'name', 'entity_id', 'type_id');\n                },\n            ]);\n    }\n\n    /**\n     * @return HasMany<Item, $this>\n     */\n    public function items(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Item', 'character_id', 'id');\n    }\n\n    /**\n     * @return HasMany<DiceRoll, $this>\n     */\n    public function diceRolls(): HasMany\n    {\n        return $this->hasMany('App\\Models\\DiceRoll', 'character_id', 'id');\n    }\n\n    /**\n     * @return HasManyThrough<Conversation, ConversationParticipant, $this>\n     */\n    public function conversations(): HasManyThrough\n    {\n        return $this->hasManyThrough(\n            'App\\Models\\Conversation',\n            'App\\Models\\ConversationParticipant',\n            'character_id',\n            'id',\n            'id',\n            'conversation_id'\n        );\n    }\n\n    /**\n     * @return HasMany<ConversationParticipant, $this>\n     */\n    public function conversationParticipants(): HasMany\n    {\n        return $this->hasMany('App\\Models\\ConversationParticipant', 'character_id');\n    }\n\n    /**\n     * @return HasMany<CharacterTrait, $this>\n     */\n    public function characterTraits(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CharacterTrait', 'character_id', 'id');\n    }\n\n    public function appearances()\n    {\n        return $this->characterTraits()->appearance()->orderBy('default_order');\n    }\n\n    public function personality()\n    {\n        return $this->characterTraits()->personality()->orderBy('default_order');\n    }\n\n    public function pinnedMembers()\n    {\n        return $this\n            ->organisationMemberships()\n            ->has('organisation')\n            ->with(['organisation', 'organisation.entity'])\n            ->whereIn('pin_id', [\n                OrganisationMemberPin::character,\n                OrganisationMemberPin::both,\n            ])\n            ->orderBy('role');\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        foreach ($this->items as $child) {\n            $child->character_id = null;\n            $child->save();\n        }\n        foreach ($this->diceRolls as $child) {\n            $child->character_id = null;\n            $child->save();\n        }\n\n        $this->organisations()->detach();\n        $this->races()->detach();\n        $this->families()->detach();\n    }\n\n    /**\n     * Tooltip subtitle (character title)\n     */\n    public function tooltipSubtitle(): string\n    {\n        if (empty($this->title)) {\n            return '';\n        }\n\n        return strip_tags($this->title);\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.character');\n    }\n\n    /**\n     * Determine if the character has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        // Test text fields first\n        if (! empty($this->age) || ! empty($this->sex) || ! empty($this->pronouns)) {\n            return true;\n        }\n        if ($this->characterRaces->isNotEmpty() || $this->characterFamilies->isNotEmpty()) {\n            return true;\n        }\n        if ($this->entity->elapsedEvents->isNotEmpty()) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Determine if the character has an age. 0 counts as a valide age.\n     */\n    public function hasAge(): bool\n    {\n        return ! empty($this->age) || $this->age === '0';\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'title',\n            'age',\n            'sex',\n            'pronouns',\n            'locations',\n            'organisations',\n            'races',\n            'families',\n            'member_id',\n            'race_id',\n            'family_id',\n            'races',\n        ];\n    }\n\n    /**\n     * Available sorting on the grid view\n     */\n    public function datagridSortableColumns(): array\n    {\n        $columns = [\n            'name' => __('crud.fields.name'),\n            'type' => __('crud.fields.type'),\n            'title' => __('characters.fields.title'),\n            'sex' => __('characters.fields.sex'),\n            'status_id' => __('characters.fields.status'),\n            'locations.name' => __('entities.locations'),\n        ];\n\n        if (auth()->check() && auth()->user()->isAdmin()) {\n            $columns['is_private'] = __('crud.fields.is_private');\n        }\n\n        return $columns;\n    }\n\n    public function scopeFilteredCharacters(Builder $query): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $query\n            ->select([$this->getTable() . '.id', 'title', $this->getTable() . '.is_private'])\n            ->sort(request()->only(['o', 'k']), ['entities.name' => 'asc'])\n            ->with([\n                'characterRaces',\n                'characterFamilies',\n                'entity', 'entity.tags', 'entity.tags.entity', 'entity.image', 'entity.locations', 'entity.status'])\n            ->has('entity');\n    }\n}\n"
  },
  {
    "path": "app/Models/CharacterFamily.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Privatable;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $int\n * @property int $character_id\n * @property int $family_id\n * @property Carbon $created_at\n * @property Carbon $modified_at\n * @property ?Character $character\n * @property ?Family $family\n */\nclass CharacterFamily extends Model\n{\n    use Privatable;\n\n    protected $fillable = [\n        'character_id',\n        'family_id',\n        'is_private',\n    ];\n\n    public $table = 'character_family';\n\n    /**\n     * @return BelongsTo<Character, $this>\n     */\n    public function character(): BelongsTo\n    {\n        return $this->belongsTo(Character::class);\n    }\n\n    /**\n     * @return BelongsTo<Family, $this>\n     */\n    public function family(): BelongsTo\n    {\n        return $this->belongsTo(Family::class);\n    }\n\n    public function getCharacterFamiliesAttribute()\n    {\n        return $this->character->races;\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'character_id',\n            'family_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/CharacterOrganisation.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nclass CharacterOrganisation extends OrganisationMember\n{\n    // This is simply an alias for the route resources\n}\n"
  },
  {
    "path": "app/Models/CharacterRace.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Privatable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Collection;\n\n/**\n * @property int $character_id\n * @property int $race_id\n * @property bool|int $is_private\n * @property ?Character $character\n * @property ?Race $race\n * @property Collection|Race[] $characterRaces\n */\nclass CharacterRace extends Model\n{\n    use HasFilters;\n    use Paginatable;\n    use Privatable;\n    use SortableTrait;\n\n    public $table = 'character_race';\n\n    protected $fillable = [\n        'character_id',\n        'race_id',\n        'is_private',\n    ];\n\n    protected array $sortable = [\n        'character.name',\n        'character.type',\n    ];\n\n    /**\n     * @return BelongsTo<Character, $this>\n     */\n    public function character(): BelongsTo\n    {\n        return $this->belongsTo(Character::class);\n    }\n\n    /**\n     * @return BelongsTo<Race, $this>\n     */\n    public function race(): BelongsTo\n    {\n        return $this->belongsTo(Race::class);\n    }\n\n    public function getCharacterRacesAttribute()\n    {\n        return $this->character->races;\n    }\n}\n"
  },
  {
    "path": "app/Models/CharacterTrait.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Purifiable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CharacterTrait\n *\n * @property int $id\n * @property int $character_id\n * @property string $name\n * @property string $entry\n * @property int $section_id\n * @property bool|int $is_private\n * @property int $default_order\n */\nclass CharacterTrait extends Model\n{\n    use Paginatable;\n    use Purifiable;\n\n    public const int SECTION_APPEARANCE = 1;\n\n    public const int SECTION_PERSONALITY = 2;\n\n    protected $fillable = [\n        'character_id',\n        'name',\n        'entry',\n        'section_id',\n        'created_by',\n        'is_private',\n        'default_order',\n    ];\n\n    /**\n     * @return BelongsTo<Character, $this>\n     */\n    public function character(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Character', 'character_id');\n    }\n\n    public function scopePersonality(Builder $query): Builder\n    {\n        return $query->where('section_id', self::SECTION_PERSONALITY);\n    }\n\n    public function scopeAppearance(Builder $query): Builder\n    {\n        return $query->where('section_id', self::SECTION_APPEARANCE);\n    }\n\n    public function copyTo(int $character): self\n    {\n        $copy = $this->replicate(['character_id']);\n        $copy->character_id = $character;\n        $copy->save();\n\n        return $this;\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'name',\n            'entry',\n            'is_private',\n            'section_id',\n            'default_order',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/CommunityEvent.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Facades\\Img;\nuse App\\Models\\Scopes\\CommunityEventScopes;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUuids;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class CommunityEvent\n *\n * @property int $id\n * @property string $uuid\n * @property string $name\n * @property string $entry\n * @property string $excerpt\n * @property string $image\n * @property Carbon $start_at\n * @property Carbon $end_at\n * @property CommunityEventEntry[]|Collection $entries\n * @property CommunityEventEntry[]|Collection $rankedResults\n * @property User $jury\n */\nclass CommunityEvent extends Model\n{\n    use CommunityEventScopes;\n    use HasUuids;\n\n    public $casts = [\n        'start_at' => 'date',\n        'end_at' => 'date',\n    ];\n\n    /**\n     * Determine if the event can be participated in\n     */\n    public function isOngoing(): bool\n    {\n        return $this->start_at->isPast() && $this->end_at->isFuture();\n    }\n\n    /**\n     * Determine if the event is in the future\n     */\n    public function isScheduled(): bool\n    {\n        return $this->start_at->isFuture();\n    }\n\n    /**\n     * Get the image (or default image) of an entity\n     */\n    public function thumbnail(int $width = 400, ?int $height = null, string $field = 'image'): string\n    {\n        if (empty($this->$field)) {\n            return '';\n        }\n\n        return Img::crop($width, (! empty($height) ? $height : $width))->url($this->$field);\n    }\n\n    /**\n     * @return HasMany<CommunityEventEntry, $this>\n     */\n    public function entries(): HasMany\n    {\n        return $this->hasMany(CommunityEventEntry::class);\n    }\n\n    public function getSlug(): string\n    {\n        return $this->uuid . '-' . Str::slug($this->name);\n    }\n\n    /**\n     * @return Model|HasMany|object|null\n     */\n    public function userEntry(int $userId)\n    {\n        return $this->entries()->where('created_by', $userId)->first();\n    }\n\n    public function rankedResults()\n    {\n        return $this->entries()\n            ->with('user')\n            ->has('user')\n            ->where(function ($rank) {\n                // MySQL is weird where != -1 means that null gets also caught?\n                return $rank\n                    ->whereNull('rank')\n                    ->orWhere('rank', '<>', -1);\n            })\n            ->orderByRaw('-rank desc');\n    }\n\n    /**\n     * Determine if the event is finished & has a winner\n     */\n    public function hasRankedResults(): bool\n    {\n        return ! $this->rankedResults->where('rank', 1)->isEmpty();\n    }\n\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function jury(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'jury_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/CommunityEventEntry.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CommunityEventEntry\n *\n * @property int $id\n * @property int $community_event_id\n * @property string $vote\n * @property int $created_by\n * @property CommunityEvent $event\n */\nclass CommunityEventEntry extends Model\n{\n    use HasUser;\n\n    protected string $userField = 'created_by';\n\n    public $fillable = [\n        'community_event_id',\n        'comment',\n        'link',\n    ];\n\n    /**\n     * @return BelongsTo<CommunityEvent, $this>\n     */\n    public function event(): BelongsTo\n    {\n        return $this->belongsTo(CommunityEvent::class, 'community_event_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/CommunityVote.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Scopes\\CommunityVoteScopes;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class CommunityVote\n *\n * @property int $id\n * @property string $name\n * @property string $content\n * @property string $excerpt\n * @property string $options\n * @property Carbon $published_at\n * @property Carbon $visible_at\n * @property Carbon $updated_at\n * @property Collection $ballots\n * @property string $link\n */\nclass CommunityVote extends Model\n{\n    use CommunityVoteScopes;\n\n    public const string STATUS_DRAFT = 'draft';\n\n    public const string STATUS_SCHEDULED = 'scheduled';\n\n    public const string STATUS_VOTING = 'voting';\n\n    public const string STATUS_PUBLISHED = 'published';\n\n    protected $cachedStatus = false;\n\n    protected $cachedResults = false;\n\n    public $casts = [\n        'visible_at' => 'date',\n        'published_at' => 'date',\n    ];\n\n    /**\n     * @return HasMany<CommunityVoteBallot, $this>\n     */\n    public function ballots(): HasMany\n    {\n        return $this->hasMany(CommunityVoteBallot::class);\n    }\n\n    /**\n     * Get the vote status as a string\n     */\n    public function status(): string\n    {\n        if ($this->cachedStatus === false) {\n            if (empty($this->visible_at)) {\n                $this->cachedStatus = self::STATUS_DRAFT;\n            } elseif ($this->visible_at->isFuture()) {\n                $this->cachedStatus = self::STATUS_SCHEDULED;\n            } elseif (empty($this->published_at) || $this->published_at->isFuture()) {\n                $this->cachedStatus = self::STATUS_VOTING;\n            } else {\n                $this->cachedStatus = self::STATUS_PUBLISHED;\n            }\n        }\n\n        return $this->cachedStatus;\n    }\n\n    public function getSlug(): string\n    {\n        return $this->id . '-' . Str::slug($this->name);\n    }\n\n    /**\n     * Get the options as an array expression\n     */\n    public function options(): array\n    {\n        if (empty($this->options)) {\n            return [];\n        }\n\n        $options = json_decode($this->options, true);\n        if (is_array($options)) {\n            return $options;\n        }\n\n        return [];\n    }\n\n    public function ballotWidth(string $option): int\n    {\n        return Arr::get($this->voteStats(), $option, 0);\n    }\n\n    public function isVoting(): bool\n    {\n        return $this->status() === self::STATUS_VOTING;\n    }\n\n    /**\n     * Returns if a user casted a ballot for this vote\n     */\n    public function votedFor(string $option): bool\n    {\n        if (Auth::guest()) {\n            return false;\n        }\n\n        $user = Auth::user();\n\n        return $this->ballots->contains(function ($ballot) use ($user, $option) {\n            return $ballot->user_id === $user->id && $ballot->vote === $option;\n        });\n    }\n\n    public function voteStats(): array\n    {\n        if ($this->cachedResults === false) {\n            // Prepare null results\n            $this->cachedResults = [];\n            foreach ($this->options() as $key => $name) {\n                $this->cachedResults[$key] = 0;\n            }\n\n            $totalBallots = $this->ballots->count();\n            $votes = $this->ballots()->groupBy('vote')->select('vote', \\DB::raw('count(*) as total'))->get();\n\n            foreach ($votes as $vote) {\n                // @phpstan-ignore-next-line\n                $this->cachedResults[$vote->vote] = floor(($vote->total / $totalBallots) * 100);\n            }\n        }\n\n        return $this->cachedResults;\n    }\n}\n"
  },
  {
    "path": "app/Models/CommunityVoteBallot.php",
    "content": "<?php\n\n/**\n * Description of\n */\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class CommunityVoteBallot\n *\n * @property int $id\n * @property int $community_vote_id\n * @property string $vote\n */\nclass CommunityVoteBallot extends Model\n{\n    use HasUser;\n\n    public $fillable = [\n        'community_vote_id',\n        'user_id',\n        'vote',\n    ];\n\n    /**\n     * @return BelongsTo<CommunityVote, $this>\n     */\n    public function vote(): BelongsTo\n    {\n        return $this->belongsTo(CommunityVote::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Acl.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Scopes\\AclScope;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * @method static self|Builder withInvisible()\n */\ntrait Acl\n{\n    /**\n     * Boot the trait's observers\n     */\n    public static function bootAcl(): void\n    {\n        static::addGlobalScope(new AclScope);\n    }\n\n    /**\n     * Global privacy scope\n     */\n    public function scopePrivate(Builder $query, bool $private = true): Builder\n    {\n        return $query->where($this->getTable() . '.is_private', $private);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Blameable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\User;\nuse App\\Observers\\BlameableObserver;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Trait Blameable\n *\n * @property ?int $created_by\n * @property ?int $updated_by\n * @property ?int $deleted_by\n * @property ?User $creator\n * @property ?User $updater\n * @property ?User $remover\n */\ntrait Blameable\n{\n    /**\n     * Boot the trait's observers\n     */\n    public static function bootBlameable(): void\n    {\n        static::observe(app(BlameableObserver::class));\n    }\n\n    /**\n     * Get the user who created this model\n     *\n     * @return BelongsTo<User, $this>\n     */\n    public function creator(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'created_by');\n    }\n\n    /**\n     * Get the user who updated this model\n     *\n     * @return BelongsTo<User, $this>\n     */\n    public function updater(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'updated_by');\n    }\n\n    /**\n     * Get the user who deleted this model\n     *\n     * @return BelongsTo<User, $this>\n     */\n    public function remover(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'deleted_by');\n    }\n\n    public function scopeCreatedBy(Builder $query, $userId): Builder\n    {\n        if ($userId instanceof Model) {\n            $userId = $userId->getKey();\n        }\n\n        return $query->where(['created_by' => $userId]);\n    }\n\n    public function scopeUpdatedBy(Builder $query, $userId): Builder\n    {\n        if ($userId instanceof Model) {\n            $userId = $userId->getKey();\n        }\n\n        return $query->where(['updated_by' => $userId]);\n    }\n\n    /**\n     * Check if the current model uses SoftDeletes.\n     */\n    public function useSoftDeletes(): bool\n    {\n        return in_array(SoftDeletes::class, class_uses_recursive($this), true);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Boosted.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\CampaignBoost;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\ntrait Boosted\n{\n    /**\n     * List of boosts the campaign is receiving\n     *\n     * @return HasMany<CampaignBoost, $this>\n     */\n    public function boosts(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignBoost', 'campaign_id', 'id')\n            ->with('user:id,name,pledge');\n    }\n\n    /**\n     * Determine if the campaign is boosted\n     */\n    public function boosted(bool $superboosted = false): bool\n    {\n        if (request()->get('_boosted') === '0') {\n            return false;\n        }\n\n        return $this->boost_count > ($superboosted ? 2 : 0);\n    }\n\n    /**\n     * Determine if a campaign is superboosted\n     */\n    public function superboosted(): bool\n    {\n        return $this->boosted(true);\n    }\n\n    public function legacyBoosted(): bool\n    {\n        return $this->boost_count > 0 && $this->boost_count < 4;\n    }\n\n    /**\n     * Determine if a campaign is premium\n     */\n    public function premium(): bool\n    {\n        if (request()->get('_boosted') === '0') {\n            return false;\n        }\n\n        return $this->boost_count >= 4;\n    }\n\n    /**\n     * Determine if a campaign is boosted by a wyvern\n     */\n    public function isWyvern(): bool\n    {\n        $boost = $this->boosts->first();\n\n        return $boost?->user->isWyvern() ?? false;\n    }\n\n    /**\n     * Determine if a campaign is boosted by an elemental\n     */\n    public function isElemental(): bool\n    {\n        $boost = $this->boosts->first();\n\n        return $boost?->user->isElemental() ?? false;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/CampaignLimit.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\ntrait CampaignLimit\n{\n    /**\n     * Get the member limit for the campaign\n     */\n    public function memberLimit(): ?int\n    {\n        if ($this->boosted()) {\n            return null;\n        }\n\n        return config('limits.campaigns.members');\n    }\n\n    /**\n     * Get the role limit for the campaign\n     */\n    public function roleLimit(): ?int\n    {\n        if ($this->boosted()) {\n            return null;\n        }\n\n        return config('limits.campaigns.roles');\n    }\n\n    /**\n     * Get the quick link limit for the campaign\n     */\n    public function bookmarkLimit(): ?int\n    {\n        if ($this->boosted()) {\n            return null;\n        }\n\n        return config('limits.campaigns.bookmarks');\n    }\n\n    /**\n     * Determine if the campaign can have more roles added to it\n     */\n    public function canHaveMoreRoles(): bool\n    {\n        $limit = $this->roleLimit();\n        if (empty($limit)) {\n            return true;\n        }\n\n        return $this->roles()->count() < $limit;\n    }\n\n    /**\n     * Determine if the campaign can have more members added to it\n     */\n    public function canHaveMoreMembers(): bool\n    {\n        $limit = $this->memberLimit();\n        if (empty($limit)) {\n            return true;\n        }\n\n        return $this->members()->count() < $limit;\n    }\n\n    /**\n     * Determine if the campaign can have more quick links added\n     */\n    public function canHaveMoreBookmarks(): bool\n    {\n        $limit = $this->bookmarkLimit();\n        if (empty($limit)) {\n            return true;\n        }\n\n        return $this->bookmarks()->count() < $limit;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/CompositeKey.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\n\ntrait CompositeKey\n{\n    /**\n     * Set the keys for a save update query.\n     *\n     * @param  Builder  $query\n     * @return Builder\n     */\n    protected function setKeysForSaveQuery($query)\n    {\n        $keys = $this->getKeyName();\n        if (! is_array($keys)) {\n            return parent::setKeysForSaveQuery($query);\n        }\n\n        foreach ($keys as $keyName) {\n            $query->where($keyName, '=', $this->getKeyForSaveQuery($keyName));\n        }\n\n        return $query;\n    }\n\n    /**\n     * Get the primary key value for a save query.\n     */\n    protected function getKeyForSaveQuery(?string $keyName = null)\n    {\n        if ($keyName === null) {\n            $keyName = $this->getKeyName();\n        }\n\n        if (isset($this->original[$keyName])) {\n            return $this->original[$keyName];\n        }\n\n        return $this->getAttribute($keyName);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Copiable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\ntrait Copiable\n{\n    public function isCopiableObject(): bool\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/EntityAsset.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\ntrait EntityAsset\n{\n    public function isLink(): bool\n    {\n        return $this->isLink;\n    }\n\n    public function isFile(): bool\n    {\n        return $this->isFile;\n    }\n\n    public function isAlias(): bool\n    {\n        return $this->isAlias;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/EntityLogs.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Observers\\EntityLogObserver;\n\ntrait EntityLogs\n{\n    protected bool $hasUpdateLog = true;\n\n    public function withoutUpdateLog(): self\n    {\n        $this->hasUpdateLog = false;\n\n        return $this;\n    }\n\n    public function hasUpdateLog(): bool\n    {\n        return $this->hasUpdateLog;\n    }\n\n    /**\n     * Boot the trait's observers\n     */\n    public static function bootEntityLogs(): void\n    {\n        // Don't add this observer if in console mode\n        if (app()->runningInConsole()) {\n            return;\n        }\n        static::observe(app(EntityLogObserver::class));\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/EntityType.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\n/**\n * @property ?int $type_id\n */\ntrait EntityType\n{\n    public function isAbility(): bool\n    {\n        return $this->type_id === config('entities.ids.ability');\n    }\n\n    public function isCharacter(): bool\n    {\n        return $this->type_id === config('entities.ids.character');\n    }\n\n    public function isLocation(): bool\n    {\n        return $this->type_id === config('entities.ids.location');\n    }\n\n    public function isFamily(): bool\n    {\n        return $this->type_id === config('entities.ids.family');\n    }\n\n    public function isMap(): bool\n    {\n        return $this->type_id === config('entities.ids.map');\n    }\n\n    public function isQuest(): bool\n    {\n        return $this->type_id === config('entities.ids.quest');\n    }\n\n    public function isOrganisation(): bool\n    {\n        return $this->type_id === config('entities.ids.organisation');\n    }\n\n    public function isRace(): bool\n    {\n        return $this->type_id === config('entities.ids.race');\n    }\n\n    public function isTimeline(): bool\n    {\n        return $this->type_id === config('entities.ids.timeline');\n    }\n\n    public function isCreature(): bool\n    {\n        return $this->type_id === config('entities.ids.creature');\n    }\n\n    public function isEvent(): bool\n    {\n        return $this->type_id === config('entities.ids.event');\n    }\n\n    public function isDiceRoll(): bool\n    {\n        return $this->type_id === config('entities.ids.dice_roll');\n    }\n\n    public function isAttributeTemplate(): bool\n    {\n        return $this->type_id === config('entities.ids.attribute_template');\n    }\n\n    public function isTag(): bool\n    {\n        return $this->type_id === config('entities.ids.tag');\n    }\n\n    public function isItem(): bool\n    {\n        return $this->type_id === config('entities.ids.item');\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasCampaign.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Scopes\\CampaignScope;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Trait HasCampaign\n *\n * @property int $campaign_id\n * @property Campaign $campaign\n *\n * @method static Builder|self allCampaigns()\n */\ntrait HasCampaign\n{\n    /** @var bool Determine if the query context is limited to the current campaign */\n    protected bool $withCampaignLimit = true;\n\n    public function scopeAllCampaigns(Builder $builder): Builder\n    {\n        $this->withCampaignLimit = false;\n\n        return $builder;\n    }\n\n    /**\n     * Check if limited to the current campaign context\n     */\n    public function withCampaignLimit(): bool\n    {\n        return $this->withCampaignLimit;\n    }\n\n    /**\n     * @return void\n     */\n    public static function bootHasCampaign()\n    {\n        static::addGlobalScope(new CampaignScope);\n    }\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class, 'campaign_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasEntity.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Observers\\ChildEntityObserver;\n\ntrait HasEntity\n{\n    public static function bootHasEntity(): void\n    {\n        static::observe(app(ChildEntityObserver::class));\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasEntry.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Facades\\Mentions;\nuse App\\Observers\\EntryObserver;\n\n/**\n * @property ?string $entry\n * @property ?int $words\n */\ntrait HasEntry\n{\n    public static function bootHasEntry(): void\n    {\n        if (app()->runningInConsole() && ! app()->runningUnitTests()) {\n            return;\n        }\n        static::observe(app(EntryObserver::class));\n    }\n\n    public function entryFieldName(): string\n    {\n        return $this->entryField ?? 'entry';\n    }\n\n    public function tooltipFieldName(): string\n    {\n        return $this->tooltipField ?? 'tooltip';\n    }\n\n    /**\n     * Get the entry where mentions are parsed to html links\n     */\n    public function parsedEntry(): string\n    {\n        return Mentions::mapAny($this, $this->entryFieldName());\n    }\n\n    /**\n     * Get the entry where mentions are made to look nice for the text editor\n     */\n    public function getEntryForEditionAttribute(): string\n    {\n        return Mentions::parseForEdit($this, $this->entryFieldName());\n    }\n\n    /**\n     * Determine if the marker has a filled out entry\n     */\n    public function hasEntry(): bool\n    {\n        // If all that's in the entry is two \\n, then there is no real content\n        $stripped = mb_trim(preg_replace('/\\s\\s+/', ' ', $this->{$this->entryFieldName()}));\n\n        return ! empty($stripped);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasFilters.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Enums\\FilterOption;\nuse App\\Models\\Entity;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\n/**\n * HasFilters\n *\n * This trait adds support on models to call the filter() scope.\n * This takes parameters passed by the controller and only includes fields that are whitelisted. Whitelisted filters\n * are combined between\n *\n * @method static self|Builder filter(?array $params = null)\n */\ntrait HasFilters\n{\n    protected string|array|null $filterValue;\n\n    /** @var string|null Some filters have a fellow _option field that can define more in detail what is needed */\n    protected ?string $filterOption;\n\n    /** @var string The operator for the SQL search. For example <>, %%, %{term}, etc */\n    protected string $filterOperator;\n\n    protected array $filterParams = [];\n\n    /**\n     * Get all available filterable columns of the entity. Merge the custom\n     * with the default ones (if not overwritten)\n     */\n    public function getFilterableColumns(): array\n    {\n        $custom = [];\n        if (method_exists($this, 'filterableColumns')) {\n            $custom = $this->filterableColumns();\n        }\n        $default = $this->defaultFilterableColumns();\n\n        return array_unique(array_merge($custom, $default));\n    }\n\n    /**\n     * Default available filterable columns to every model using the HasFilters trait.\n     *\n     * @return string[]\n     */\n    protected function defaultFilterableColumns(): array\n    {\n        return [\n            'name',\n            'type',\n            'is_private',\n            'template',\n            'tag_id',\n            'tags',\n            'has_image',\n            'has_posts',\n            'has_entry',\n            'has_entity_files',\n            'has_attributes',\n            'created_by',\n            'updated_by',\n            'attribute_name',\n            'attribute_value',\n            'connections',\n            'connection_target',\n            'connection_name',\n            'archived',\n            'parent_id',\n            'status_id',\n        ];\n    }\n\n    public function scopeFilter(Builder $query, array $params = []): Builder\n    {\n        $fields = $this->getFilterableColumns();\n        if (! is_array($params) || empty($params) || empty($fields)) {\n            return $query;\n        }\n\n        $this->filterParams = $params;\n\n        foreach ($this->filterParams as $key => $value) {\n            if (isset($value) && in_array($key, $fields)) {\n                // The requested field is an array, which we don't support for anything other than tags, and locations (\"or\" searches)\n                if (is_array($value) && ! in_array($key, ['tags', 'locations', 'organisations', 'races', 'families'])) {\n                    continue;\n                }\n                $this->filterOption = ! empty($params[$key . '_option']) ? $params[$key . '_option'] : null;\n                $this->extractSearchOperator($value, $key);\n\n                // Foreign key search\n                $segments = explode('-', $key);\n                if (count($segments) > 1) {\n                    $this->foreign($query, $segments[0], $key);\n\n                    return $query;\n                }\n\n                // Explicit filters (numbers typically, foreign ids)\n                if (in_array($key, $this->explicitFilters())) {\n                    if ($this->filterOperator == 'IS NULL') {\n                        $query->whereNull($this->getTable() . '.' . $key);\n                    } else {\n                        $query->where($this->getTable() . '.' . $key, $this->filterOperator, $this->filterValue);\n                    }\n\n                    continue;\n                }\n\n                if ($key === 'tags') {\n                    $this->filterTags($query, $value);\n                } elseif ($key === 'archived') {\n                    $this->filterArchived($query, $value);\n                } elseif ($key == 'locations') {\n                    $this->filterLocations($query, $value);\n                } elseif ($key == 'organisations') {\n                    $this->filterOrganisations($query, $value);\n                } elseif ($key == 'races') {\n                    $this->filterRaces($query, $value);\n                } elseif ($key == 'families') {\n                    $this->filterFamilies($query, $value);\n                } elseif (in_array($key, ['date_start', 'date_end'])) {\n                    $this->filterDateRange($query, $key, $params);\n                } elseif ($key == 'races') {\n                    $this->filterRaces($query, $value);\n                } elseif ($key == 'location_id') {\n                    $this->filterLocation($query, $value, $key);\n                } elseif ($key == 'tag_id') {\n                    $query\n                        ->joinEntity()\n                        ->leftJoin('entity_tags as et', 'et.entity_id', 'e.id')\n                        ->where('et.tag_id', $value);\n                } elseif (in_array($key, ['attribute_value', 'attribute_name'])) {\n                    $this->filterAttributes($query, $key);\n                } elseif (in_array($key, ['connection_target', 'connection_name'])) {\n                    $this->filterConnections($query, $key);\n                } elseif ($key == 'race_id') {\n                    $this->filterRace($query, $value);\n                } elseif ($key == 'family_id') {\n                    $this->filterFamily($query, $value);\n                } elseif ($key == 'member_id') {\n                    $this->filterMember($query, $value);\n                } elseif ($key == 'quest_element_id') {\n                    $query->element($value, $this->getFilterOption());\n                } elseif ($key == 'element_role') {\n                    $query->elementRole($value, $this->filterOperator);\n                } elseif ($key == 'has_image') {\n                    $this->filterHasImage($query, $value);\n                } elseif ($key == 'template') {\n                    $this->filterTemplate($query, $value);\n                } elseif ($key == 'type') {\n                    $this->filterType($query, $value);\n                } elseif ($key == 'has_posts') {\n                    $this->filterHasPosts($query, $value);\n                } elseif ($key == 'has_entry') {\n                    $this->filterHasEntry($query, $value);\n                } elseif ($key == 'is_equipped') {\n                    $this->filterIsEquipped($query, $value);\n                } elseif ($key == 'has_attributes') {\n                    $this->filterHasAttributes($query, $value);\n                } elseif ($key == 'has_entity_files') {\n                    $this->filterHasFiles($query, $value);\n                } elseif ($key == 'parent') {\n                    $this->filterParent($query);\n                } elseif ($key == 'parent_id') {\n                    $this->filterParent($query);\n                } elseif ($key == 'status_id') {\n                    $this->filterStatus($query);\n                } elseif (in_array($key, ['created_by', 'updated_by'])) {\n                    $query\n                        ->joinEntity()\n                        ->where('e.' . $key, (int) $value);\n                } elseif ($this->filterOperator === 'IS NULL') {\n                    $query->where(function ($sub) use ($key) {\n                        $sub->whereNull($this->getTable() . '.' . $key)\n                            ->orWhere($this->getTable() . '.' . $key, '=', '');\n                    });\n                } else {\n                    // If we have an exclude option filter, change the operator\n                    $this->filterFallback($query, $key);\n                }\n            } elseif (Str::endsWith($key, '_option') && $value == 'none') {\n                $this->filterNoneOptions($query, $key, $fields);\n            } elseif ($key == 'archived' && ! isset($value)) {\n                $query\n                    ->joinEntity()\n                    ->whereNull('e.archived_at');\n            }\n        }\n\n        return $query;\n    }\n\n    /**\n     * @param  string|array  $value  (array for tags)\n     */\n    protected function extractSearchOperator($value, string $key): void\n    {\n        $operator = 'like';\n        $filterValue = $value;\n        if (! in_array($key, ['tags', 'locations', 'organisations', 'races', 'families'])) {\n            if ($value == '!!') {\n                $operator = 'IS NULL';\n                $filterValue = null;\n            } elseif (Str::startsWith($value, '!')) {\n                $operator = 'not like';\n                $filterValue = mb_ltrim($value, '!');\n            } elseif (Str::endsWith($value, '!')) {\n                $operator = '=';\n                $filterValue = mb_rtrim($value, '!');\n            } elseif (Str::endsWith($key, '_id')) {\n                $operator = '=';\n            }\n        }\n\n        $this->filterOperator = $operator;\n        $this->filterValue = $filterValue;\n    }\n\n    /**\n     * Add a query on a foreign relationship of the model\n     */\n    protected function foreign(Builder $query, string $relationName, string $key): void\n    {\n        $relation = $this->{$relationName}();\n        $foreignName = $relation->getQuery()->getQuery()->from;\n\n        $query\n            ->select($this->getTable() . '.*')\n            ->with($relationName)\n            ->leftJoin($foreignName . ' as f', 'f.id', $this->getTable() . '.' . $relation->getForeignKeyName())\n            ->where(\n                str_replace($relationName, 'f', str_replace('-', '.', $key)),\n                $this->filterOperator,\n                ($this->filterOperator == '=' ? $this->filterValue : \"%{$this->filterValue}%\")\n            );\n    }\n\n    /**\n     * Determine if the filter option is the one required\n     */\n    protected function filterOption(string $condition): bool\n    {\n        return ! empty($this->filterOption) && $this->filterOption === $condition;\n    }\n\n    /**\n     * Filter on the attributes of an entity\n     */\n    protected function filterAttributes(Builder $query, string $key): void\n    {\n        if ($key == 'attribute_value') {\n            return;\n        }\n        $query->joinEntity();\n\n        // No attribute with this name\n        if ($this->filterOperator === 'not like') {\n            $query\n                ->whereRaw('(select count(*) from attributes as att where att.entity_id = e.id and att.name = \\''\n                    . ($this->filterValue) . '\\') = 0');\n\n            return;\n        }\n        $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin('attributes as att', function ($join) {\n                $join->on('att.entity_id', '=', 'e.id');\n            })\n            ->where('att.name', $this->filterValue);\n\n        $attributeValue = Arr::get($this->filterParams, 'attribute_value');\n        if ($attributeValue === '!') {\n            $query\n                ->whereRaw('att.value <> \"\"');\n        } elseif ($attributeValue !== '' && $attributeValue !== null) {\n            $query\n                ->where('att.value', $attributeValue);\n        }\n    }\n\n    /**\n     * Filter on the connections of an entity\n     */\n    protected function filterConnections(Builder $query, string $key): void\n    {\n        if ($key == 'connection_target' && Arr::get($this->filterParams, 'connection_name')) {\n            return;\n        }\n\n        $query->joinEntity();\n\n        $query\n            ->leftJoin('relations as rel', function ($join) {\n                $join->on('rel.owner_id', '=', 'e.id');\n            });\n        $connectionTarget = Arr::get($this->filterParams, 'connection_target');\n        if ($connectionTarget !== '' && $connectionTarget !== null) {\n            $query\n                ->where('rel.target_id', $connectionTarget);\n        }\n\n        $connectionName = Arr::get($this->filterParams, 'connection_name');\n        if ($connectionName !== '' && $connectionName !== null) {\n            $connectionName = $this->filterValue;\n            if ($this->filterOperator != '=') {\n                $connectionName = '%' . $this->filterValue . '%';\n            }\n\n            $query\n                ->where('rel.relation', $this->filterOperator, $connectionName);\n        }\n    }\n\n    /**\n     * General fallback filter for what wasn't cought in specific cases\n     */\n    protected function filterFallback(Builder $query, string $key): void\n    {\n        if ($this->filterOption('exclude')) {\n            $query->where(function ($subquery) use ($key) {\n                return $subquery->where(\n                    $this->getTable() . '.' . $key,\n                    '!=',\n                    $this->filterValue\n                )->orWhereNull($this->getTable() . '.' . $key);\n            });\n\n            return;\n        }\n        $searchTerms = explode(';', $this->filterValue);\n        $firstTerm = true;\n        foreach ($searchTerms as $searchTerm) {\n            if (empty($searchTerm) && $searchTerm != '0') {\n                continue;\n            }\n            // If it isn't the first term, we need to re-extract the search operators\n            if (! $firstTerm) {\n                $this->extractSearchOperator($searchTerm, $key);\n                $searchTerm = $this->filterValue;\n            }\n            $query->where(\n                $this->getTable() . '.' . $key,\n                $this->filterOperator,\n                ($this->filterOperator == '=' ? $this->filterValue : \"%{$searchTerm}%\")\n            );\n            $firstTerm = false;\n        }\n    }\n\n    /**\n     * Filter on entities with files\n     */\n    protected function filterHasFiles(Builder $query, ?string $value = null): void\n    {\n        $query\n            ->joinEntity()\n            ->leftJoin('entity_assets', 'entity_assets.entity_id', '=', 'e.id')\n            ->where('entity_assets.type_id', EntityAssetType::file);\n\n        if ($value) {\n            $query->whereNotNull('entity_assets.id');\n        } else {\n            $query->whereNull('entity_assets.id');\n        }\n    }\n\n    /**\n     * Filter on entities with or without an uploaded image\n     */\n    protected function filterHasImage(Builder $query, ?string $value = null): void\n    {\n        $query->joinEntity();\n        if ($value) {\n            $query->where(function ($sub) {\n                return $sub\n                    ->whereNotNull('e.image_path')\n                    ->orWhereNotNull('e.image_uuid');\n            });\n        } else {\n            $query->where(function ($sub) {\n                return $sub\n                    ->whereNull('e.image_path')\n                    ->whereNull('e.image_uuid');\n            });\n        }\n    }\n\n    /**\n     * Filter on entities that are or aren't templates\n     */\n    protected function filterTemplate(Builder $query, ?string $value = null): void\n    {\n        $query->joinEntity();\n\n        if ($value) {\n            $query->where('e.is_template', 1);\n        } else {\n            $query->where(function ($sub) {\n                $sub->whereNull('e.is_template')\n                    ->orWhere('e.is_template', '<>', 1);\n            });\n        }\n    }\n\n    /**\n     * Filter on entities's type\n     */\n    protected function filterType(Builder $query, ?string $value = null): void\n    {\n        $query->joinEntity();\n\n        $searchTerms = explode(';', $this->filterValue);\n        $firstTerm = true;\n        foreach ($searchTerms as $searchTerm) {\n            if (empty($searchTerm) && $searchTerm != '0') {\n                continue;\n            }\n            // If it isn't the first term, we need to re-extract the search operators\n            if (! $firstTerm) {\n                $this->extractSearchOperator($searchTerm, 'type');\n                $searchTerm = $this->filterValue;\n            }\n            $query->where(\n                'e.type',\n                $this->filterOperator,\n                ($this->filterOperator == '=' ? $this->filterValue : \"%{$searchTerm}%\")\n            );\n            $firstTerm = false;\n        }\n    }\n\n    /**\n     * Filter on entities with posts\n     */\n    protected function filterHasPosts(Builder $query, ?string $value = null): void\n    {\n        $query\n            ->joinEntity()\n            ->leftJoin('posts', 'posts.entity_id', 'e.id');\n\n        if ($value) {\n            $query->whereNotNull('posts.id');\n        } else {\n            $query->whereNull('posts.id');\n        }\n    }\n\n    /**\n     * Filter on entities with an entry\n     */\n    protected function filterHasEntry(Builder $query, ?string $value = null): void\n    {\n        $query\n            ->joinEntity();\n\n        if ($value) {\n            $query->whereNotNull('e.entry')\n                ->where('e.entry', '!=', '');\n        } else {\n            $query->whereNull('e.entry')\n                ->orWhere('e.entry', '');\n        }\n    }\n\n    /**\n     * Filter on entities that are equipped\n     */\n    protected function filterIsEquipped(Builder $query, ?string $value = null): void\n    {\n        $query\n            ->leftJoin('inventories', 'inventories.item_id', 'items.id');\n\n        if ($value) {\n            $query->whereNotNull('inventories.id');\n        } else {\n            $query->whereNull('inventories.id');\n        }\n        $query->distinct('items.id');\n    }\n\n    /**\n     * Filter on entities with attributes\n     */\n    protected function filterHasAttributes(Builder $query, ?string $value = null): void\n    {\n        $query\n            ->joinEntity()\n            ->leftJoin('attributes', 'attributes.entity_id', 'e.id');\n\n        if ($value) {\n            $query->whereNotNull('attributes.id');\n        } else {\n            $query->whereNull('attributes.id');\n        }\n    }\n\n    /**\n     * Filter on characters on multiple races\n     */\n    protected function filterRaces(Builder $query, null|string|array $value = null): void\n    {\n        // \"none\" filter keys is handled later\n        if ($this->filterOption('none')) {\n            return;\n        }\n        $query\n            ->joinEntity();\n\n        // Make sure we always have an array\n        if (! is_array($value)) {\n            $value = [$value];\n        }\n        $raceIds = [];\n        foreach ($value as $v) {\n            $raceIds[] = (int) $v;\n        }\n\n        if ($this->filterOption('exclude')) {\n            $query->whereRaw('(select count(*) from character_race as cr where cr.character_id = ' .\n                $this->getTable() . '.id and cr.race_id in (' . implode(', ', $raceIds) . ')) = 0');\n\n            return;\n        }\n\n        if ($this->filterOption('children')) {\n            $value = Entity::whereIn('entity_id', $raceIds)\n                ->where('type_id', config('entities.ids.race'))\n                ->with('descendants')\n                ->get()\n                ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                ->unique()\n                ->toArray();\n        }\n\n        $values = collect($value)->map(fn ($v) => (int) $v)->toArray(); // Ensure values are integers\n        $query\n            ->leftJoin('character_race as cr', 'cr.character_id', '=', $this->getTable() . '.id')\n            ->whereIn('cr.race_id', $values);\n    }\n\n    /**\n     * Filter characters in location\n     */\n    protected function filterLocation(Builder $query, ?string $value = null, ?string $key = null): void\n    {\n        if (method_exists($this, 'scopeLocation')) {\n            $query->location($value, $this->getFilterOption());\n\n            return;\n        }\n        if ($this->filterOption('children')) {\n            $locationIds = Entity::where('entity_id', $value)\n                ->where('type_id', config('entities.ids.location'))\n                ->with('descendants')\n                ->get()\n                ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                ->unique()\n                ->toArray();\n            $query->whereIn($this->getTable() . '.location_id', $locationIds)->distinct();\n\n            return;\n        }\n        $this->filterFallback($query, $key);\n    }\n\n    /**\n     * Filter on multiple locations\n     */\n    protected function filterLocations(Builder $query, null|string|array $value = null, ?string $key = null): void\n    {\n        // \"none\" filter keys is handled later\n        if ($this->filterOption('none')) {\n            return;\n        }\n\n        $query\n            ->joinEntity();\n        // Make sure we always have an array\n        if (! is_array($value)) {\n            $value = [$value];\n        }\n        $locationIds = [];\n        foreach ($value as $v) {\n            $locationIds[] = (int) $v;\n        }\n\n        if ($this->filterOption('exclude')) {\n            $query->whereRaw('(\n                select count(*) from entity_locations as el\n                where el.entity_id = e.id and el.location_id in (' . implode(', ', $locationIds) . ')\n            ) = 0');\n\n            return;\n        }\n\n        if ($this->filterOption('children')) {\n            $locationIds = Entity::whereIn('entity_id', $locationIds)\n                ->where('type_id', config('entities.ids.location'))\n                ->with('descendants')\n                ->get()\n                ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                ->unique()\n                ->toArray();\n        }\n\n        $query\n            ->join('entity_locations', 'entity_locations.entity_id', '=', 'e.id')\n            ->whereIn('entity_locations.location_id', $locationIds)->distinct();\n    }\n\n    /**\n     * Filter on characters on multiple organisations\n     */\n    protected function filterOrganisations(Builder $query, null|string|array $value = null, ?string $key = null): void\n    {\n        // \"none\" filter keys is handled later\n        if ($this->filterOption('none')) {\n            return;\n        }\n        $query\n            ->joinEntity();\n\n        // Make sure we always have an array\n        if (! is_array($value)) {\n            $value = [$value];\n        }\n        $orgIds = [];\n        foreach ($value as $v) {\n            $orgIds[] = (int) $v;\n        }\n\n        if ($this->filterOption('exclude')) {\n            $query->whereRaw('(select count(*) from organisation_member as cr where cr.character_id = ' .\n                $this->getTable() . '.id and cr.organisation_id in (' . implode(', ', $orgIds) . ')) = 0');\n\n            return;\n        }\n\n        if ($this->filterOption('children')) {\n            $value = Entity::whereIn('entity_id', $orgIds)\n                ->where('type_id', config('entities.ids.organisation'))\n                ->with('descendants')\n                ->get()\n                ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                ->unique()\n                ->toArray();\n        }\n\n        $values = collect($value)->map(fn ($v) => (int) $v)->toArray(); // Ensure values are integers\n        $query\n            ->leftJoin('organisation_member as om', 'om.character_id', '=', $this->getTable() . '.id')\n            ->whereIn('om.organisation_id', $values);\n    }\n\n    /**\n     * Filter on characters on multiple families\n     */\n    protected function filterFamilies(Builder $query, null|string|array $value = null, ?string $key = null): void\n    {\n        // \"none\" filter keys is handled later\n        if ($this->filterOption('none')) {\n            return;\n        }\n        $query\n            ->joinEntity();\n\n        // Make sure we always have an array\n        if (! is_array($value)) {\n            $value = [$value];\n        }\n\n        $familyIds = [];\n        foreach ($value as $v) {\n            $familyIds[] = (int) $v;\n        }\n\n        if ($this->filterOption('exclude')) {\n            $query->whereRaw('(select count(*) from character_family as cr where cr.character_id = ' .\n                $this->getTable() . '.id and cr.family_id in (' . implode(', ', $familyIds) . ')) = 0');\n\n            return;\n        }\n\n        if ($this->filterOption('children')) {\n            $value = Entity::whereIn('entity_id', $familyIds)\n                ->where('type_id', config('entities.ids.family'))\n                ->with('descendants')\n                ->get()\n                ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                ->unique()\n                ->toArray();\n        }\n\n        $values = collect($value)->map(fn ($v) => (int) $v)->toArray(); // Ensure values are integers\n        $query\n            ->leftJoin('character_family as cf', 'cf.character_id', '=', $this->getTable() . '.id')\n            ->whereIn('cf.family_id', $values);\n    }\n\n    /**\n     * Filter characters on a single race\n     */\n    protected function filterRace(Builder $query, ?string $value = null): void\n    {\n        $ids = [$value];\n        if ($this->filterOption('exclude')) {\n            if (auth()->check() && auth()->user()->isAdmin()) {\n                $query->whereRaw('(select count(*) from character_race as cr where cr.character_id = ' .\n                    $this->getTable() . '.id and cr.race_id = ' . ((int) $value) . ') = 0');\n            } else {\n                $query->whereRaw('(select count(*) from character_race as cr where cr.character_id = ' .\n                    $this->getTable() . '.id and cr.race_id = ' . ((int) $value) . ' and cr.is_private = 0) = 0');\n            }\n\n            return;\n        } elseif ($this->filterOption('children')) {\n            $ids = Entity::where('entity_id', $value)\n                ->where('type_id', config('entities.ids.race'))\n                ->with('descendants')\n                ->get()\n                ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                ->unique()\n                ->toArray();\n        }\n        $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin('character_race as cr', function ($join) {\n                $join->on('cr.character_id', '=', $this->getTable() . '.id');\n            })->whereIn('cr.race_id', $ids);\n\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->where('cr.is_private', false);\n        }\n        $query->distinct();\n    }\n\n    /**\n     * Filter characters on a single family\n     */\n    protected function filterFamily(Builder $query, ?string $value = null): void\n    {\n        $ids = [$value];\n        if ($this->filterOption('exclude')) {\n            $query->whereRaw('(select count(*) from character_family as cf where cf.character_id = ' .\n                $this->getTable() . '.id and cf.family_id = ' . ((int) $value)\n                . ' ' . /* $this->subPrivacy('and cf.is_private') . */ ') = 0');\n\n            return;\n        } elseif ($this->filterOption('children')) {\n            $ids = Entity::where('entity_id', $value)\n                ->where('type_id', config('entities.ids.family'))\n                ->with('descendants')\n                ->get()\n                ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                ->unique()\n                ->toArray();\n        }\n        $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin('character_family as cf', function ($join) {\n                $join->on('cf.character_id', '=', $this->getTable() . '.id');\n            })->whereIn('cf.family_id', $ids);\n\n        /*if (auth()->guest() || !auth()->user()->isAdmin()) {\n            $query->where('cf.is_private', false);\n        }*/\n\n        $query->distinct();\n    }\n\n    /**\n     * Filter on entities with specific tags\n     */\n    protected function filterTags(Builder $query, null|string|array $value = null): void\n    {\n        // \"none\" filter tags is handled later (because this won't be called if the tags field is empty)\n        if ($this->filterOption('none')) {\n            return;\n        }\n        $query\n            ->joinEntity();\n\n        // Make sure we always have an array\n        if (! is_array($value)) {\n            $value = [$value];\n        }\n\n        if ($this->filterOption('exclude')) {\n            $tagIds = [];\n            foreach ($value as $v) {\n                $tagIds[] = (int) $v;\n            }\n            // $query->leftJoin('entity_tags as et_tags', \"et_tags.entity_id\", 'e.id')\n            $query->whereRaw('(\n                select count(*) from entity_tags as et\n                where et.entity_id = e.id and et.tag_id in (' . implode(', ', $tagIds) . ')\n            ) = 0');\n\n            return;\n        }\n\n        if ($this->filterOption('any')) {\n            $tagIds = [];\n            foreach ($value as $v) {\n                $tagIds[] = (int) $v;\n            }\n            // $query->leftJoin('entity_tags as et_tags', \"et_tags.entity_id\", 'e.id')\n            // $query\n            $query->leftJoin('entity_tags as et_tags', 'et_tags.entity_id', 'e.id')\n                ->whereIn('et_tags.tag_id', $tagIds);\n\n            return;\n        }\n\n        foreach ($value as $v) {\n            if (! is_numeric($v)) {\n                continue;\n            }\n            $v = (int) $v;\n            $query\n                ->leftJoin('entity_tags as et' . $v, \"et{$v}.entity_id\", 'e.id')\n                ->where(\"et{$v}.tag_id\", $v);\n        }\n    }\n\n    /**\n     * Filter on archived entities\n     */\n    protected function filterArchived(Builder $query, ?string $value = null): void\n    {\n        $query\n            ->joinEntity();\n\n        if ($value) {\n            $query->whereNotNull('e.archived_at');\n\n            return;\n        }\n    }\n\n    /**\n     * Filter on models at or between given real dates\n     */\n    protected function filterDateRange(Builder $query, string $key, array $params = []): void\n    {\n        // Don't apply twice if both fields are set\n        if ($key === 'date_end' && ! empty($params['date_start'])) {\n            return;\n        }\n        $start = Arr::get($params, 'date_start');\n        $end = Arr::get($params, 'date_end');\n\n        if ($start && $end) {\n            $query->whereBetween('date', [$start, $end]);\n        } elseif ($end) {\n            $query->whereDate('date', '=', $end);\n        } else {\n            $query->whereDate('date', '=', $start);\n        }\n    }\n\n    /**\n     * Filter for elements with a specific member (character) in them\n     */\n    protected function filterMember(Builder $query, ?string $value = null): void\n    {\n        $filter = $this->getFilterOption();\n        $query->member($value, $filter);\n    }\n\n    /**\n     * Filter on entities that have one of the targets as \"none\" selected\n     */\n    protected function filterNoneOptions(Builder $query, string $key, array $fields = []): void\n    {\n        $key = Str::beforeLast($key, '_option');\n\n        // Handle locations filter through entity_locations\n        if ($key === 'locations' && in_array('locations', $fields)) {\n            $query\n                ->joinEntity()\n                ->leftJoin('entity_locations as el_none', 'el_none.entity_id', 'e.id')\n                ->whereNull('el_none.location_id');\n\n            return;\n        }\n\n        if (in_array($key, ['races', 'families', 'organisations'])) {\n            $names = ['races' => 'race_id', 'families' => 'family_id', 'organisations' => 'organisation_id'];\n            $key = $names[$key];\n        }\n        // Validate the key is a filter\n        if (! in_array($key, $fields)) {\n            return;\n        }\n        // Left join shenanigans\n        if (! in_array($key, ['race_id', 'family_id', 'tags', 'quest_element_id', 'member_id'])) {\n            $query->whereNull($this->getTable() . '.' . $key);\n        } elseif ($key === 'tags') {\n            $query\n                ->joinEntity()\n                ->leftJoin('entity_tags as no_tags', 'no_tags.entity_id', 'e.id')\n                ->whereNull('no_tags.tag_id');\n        } elseif ($key === 'race_id') {\n            $query\n                ->select($this->getTable() . '.*')\n                ->leftJoin('character_race as cr2', function ($join) {\n                    $join->on('cr2.character_id', '=', $this->getTable() . '.id');\n                })\n                ->where('cr2.race_id', null);\n        } elseif ($key === 'family_id') {\n            $query\n                ->select($this->getTable() . '.*')\n                ->leftJoin('character_family as cf2', function ($join) {\n                    $join->on('cf2.character_id', '=', $this->getTable() . '.id');\n                })\n                ->where('cf2.family_id', null);\n        } elseif ($key === 'quest_element_id') {\n            $query->element(null, FilterOption::NONE);\n        } elseif ($key === 'member_id') {\n            $query->member(null, FilterOption::NONE);\n        }\n    }\n\n    /**\n     * Get the filter option enum\n     */\n    protected function getFilterOption(): FilterOption\n    {\n        match ($this->filterOption) {\n            'exclude' => $filter = FilterOption::EXCLUDE,\n            'none' => $filter = FilterOption::NONE,\n            'children' => $filter = FilterOption::CHILDREN,\n            default => $filter = FilterOption::INCLUDE,\n        };\n\n        return $filter;\n    }\n\n    protected function filterParent(Builder $query): void\n    {\n        $query->whereHas('entity', fn ($q) => $q->where('entities.parent_id', $this->filterValue));\n    }\n\n    protected function filterStatus(Builder $query): void\n    {\n        $query->whereHas('entity', fn ($q) => $q->where('entities.status_id', $this->filterValue));\n    }\n\n    protected function explicitFilters(): array\n    {\n        if (property_exists($this, 'explicitFilters')) {\n            return $this->explicitFilters;\n        }\n\n        return [];\n    }\n\n    protected function subPrivacy(string $field): ?string\n    {\n        // Campaign admins don't have private data hidden from them\n        if (auth()->check() && auth()->user()->isAdmin()) {\n            return null;\n        }\n\n        return ' ' . $field . ' = 0';\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasImage.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Facades\\Img;\nuse App\\Observers\\ImageableObserver;\n\n/**\n * @property ?string image\n */\ntrait HasImage\n{\n    public static function bootHasImage(): void\n    {\n        static::observe(ImageableObserver::class);\n    }\n\n    public function getImageFields(): array\n    {\n        return $this->imageFields ?? ['image'];\n    }\n\n    /**\n     * Get the campaign's thumbnail url\n     */\n    public function thumbnail(int $width = 400, ?int $height = null, string $field = 'image'): string\n    {\n        if (empty($this->$field)) {\n            return '';\n        }\n\n        return Img::resetCrop()\n            ->crop($width, (! empty($height) ? $height : $width))\n            ->url($this->$field);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasLocation.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Location;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property ?int $location_id\n * @property ?Location $location\n */\ntrait HasLocation\n{\n    /**\n     * @return BelongsTo<Location, $this>\n     */\n    public function location(): BelongsTo\n    {\n        return $this\n            ->belongsTo('App\\Models\\Location', 'location_id', 'id')\n            ->select('locations.id', 'locations.name')\n            ->with([\n                'entity' => function ($sub) {\n                    $sub->select('id', 'name', 'entity_id', 'type_id');\n                },\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasLocations.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Enums\\FilterOption;\nuse App\\Models\\Location;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\n\n/**\n * @property Collection|Location[] $locations\n */\ntrait HasLocations\n{\n    //    protected string $locationPivot = '';\n    //    protected string $locationPivotKey = '';\n\n    /**\n     * Model have multiple locations through a pivot table\n     *\n     * @return BelongsToMany<Location, $this>\n     */\n    public function locations(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Location', $this->getLocationPivotTableName())\n            ->has('entity')\n            ->with('entity');\n    }\n\n    protected function getLocationPivotTableName(): string\n    {\n        return $this->locationPivot;\n    }\n\n    protected function getLocationPivotKey(): string\n    {\n        return $this->locationPivotKey;\n    }\n\n    /**\n     * Filter on models tied to a specific location or its descendants\n     */\n    public function scopeLocation(Builder $query, ?int $location, FilterOption $filter): Builder\n    {\n        if ($filter === FilterOption::NONE) {\n            if (! empty($location)) {\n                return $query;\n            }\n\n            return $query\n                ->whereRaw('(select count(*) from ' . $this->getLocationPivotTableName() . ' as lp where lp.' . $this->getLocationPivotKey() . ' = ' .\n                    $this->getTable() . '.id and lp.location_id = ' . ((int) $location) . ') = 0');\n        } elseif ($filter === FilterOption::EXCLUDE) {\n            return $query\n                ->whereRaw('(select count(*) from ' . $this->getLocationPivotTableName() . ' as lp where lp.' . $this->getLocationPivotKey() . ' = ' .\n                    $this->getTable() . '.id and lp.location_id = ' . ((int) $location) . ') = 0');\n        }\n\n        $ids = [$location];\n        if ($filter === FilterOption::CHILDREN) {\n            /** @var ?Location $model */\n            $model = Location::find($location);\n            if (! empty($model)) {\n                $ids = [...$model->descendants->pluck('id')->toArray(), $model->id];\n            }\n        }\n\n        return $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin($this->getLocationPivotTableName() . ' as lp', function ($join) {\n                $join->on('lp.' . $this->getLocationPivotKey(), '=', $this->getTable() . '.id');\n            })\n            ->whereIn('lp.location_id', $ids)->distinct();\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasMentions.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\EntityMention;\nuse App\\Models\\ImageMention;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\n/**\n * @property EntityMention[]|Collection $mentions\n * @property EntityMention[]|Collection $targetMentions\n *\n * @method static self|Builder unmentioned()\n * @method static self|Builder mentionless()\n */\ntrait HasMentions\n{\n    /**\n     * List of entities that this entity mentions\n     *\n     * @return HasMany<EntityMention, $this>\n     */\n    public function mentions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\EntityMention', 'entity_id', 'id');\n    }\n\n    /**\n     * List of images used by this entity\n     *\n     * @return HasMany<ImageMention, $this>\n     */\n    public function imageMentions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\ImageMention', 'entity_id', 'id');\n    }\n\n    /**\n     * List of entities that mention this entity\n     *\n     * @return HasMany<EntityMention, $this>\n     */\n    public function targetMentions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\EntityMention', 'target_id', 'id');\n    }\n\n    /**\n     * Get entities that are unmentioned\n     */\n    public function scopeUnmentioned(Builder $query): Builder\n    {\n        return $query->select($this->getTable() . '.*')\n            ->leftJoin('entity_mentions as em', 'em.target_id', $this->getTable() . '.id')\n            ->whereNull('em.id');\n    }\n\n    /**\n     * Get entities that aren't mentioned anywhere\n     */\n    public function scopeMentionless(Builder $query): Builder\n    {\n        return $query->select($this->getTable() . '.*')\n            ->leftJoin('entity_mentions as em', 'em.entity_id', $this->getTable() . '.id')\n            ->whereNull('em.id');\n    }\n\n    /**\n     * Count the number of mentions this entity has\n     */\n    public function mentionsCount(): int\n    {\n        return $this->targetMentions()\n            ->filterValid()\n            ->count();\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasReminder.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Reminder;\nuse App\\Observers\\Remindable;\nuse Illuminate\\Support\\Arr;\n\n/**\n * Trait HasReminder\n *\n * @property Reminder $calendarReminder\n * @property Reminder|null $calendarDate\n * @property int|null $calendar_id\n * @property int|null $calendar_year\n * @property int|null $calendar_month\n * @property int|null $calendar_day\n */\ntrait HasReminder\n{\n    /**\n     * On boot of the trait, inject the fillable fields.\n     */\n    public static function bootHasReminder()\n    {\n        static::observe(app(Remindable::class));\n    }\n\n    public function hasCalendar(): bool\n    {\n        return $this->hasCalendarDate() && $this->calendarDate->calendar !== null;\n    }\n\n    public function hasCalendarButNoAccess(): bool\n    {\n        return $this->hasCalendarDate() && $this->calendarDate->calendar === null;\n    }\n\n    public function getDate(): string\n    {\n        $reminder = $this->calendarDate;\n        $months = $reminder->calendar->months();\n        $count = 0;\n        $monthCount = 1;\n        foreach ($months as $month) {\n            $monthType = Arr::get($month, 'type');\n            if ($monthType === 'standard') {\n                $count++;\n            }\n            if ($monthCount == $reminder->month) {\n                if ($monthType === 'intercalary') {\n                    return $reminder->year . '-' . $month['name'] . '-' . $reminder->day;\n                }\n\n                return $reminder->year . '-' . $count . '-' . $reminder->day;\n            }\n            $monthCount++;\n        }\n\n        return $reminder->year . '-' . $reminder->month . '-' . $reminder->day;\n    }\n\n    public function getCalendarIdAttribute(): ?int\n    {\n        if (! $this->hasCalendarDate()) {\n            return null;\n        }\n\n        return $this->calendarDate->calendar_id;\n    }\n\n    public function getCalendarYearAttribute(): ?int\n    {\n        if (! $this->hasCalendarDate()) {\n            return null;\n        }\n\n        return $this->calendarDate->year;\n    }\n\n    public function getCalendarMonthAttribute(): ?int\n    {\n        if (! $this->hasCalendarDate()) {\n            return null;\n        }\n\n        return $this->calendarDate->month;\n    }\n\n    public function getCalendarDayAttribute(): ?int\n    {\n        if (! $this->hasCalendarDate()) {\n            return null;\n        }\n\n        return $this->calendarDate->day;\n    }\n\n    public function getCalendarLengthAttribute(): ?int\n    {\n        if (! $this->hasCalendarDate()) {\n            return null;\n        }\n\n        return (int) $this->calendarDate->length;\n    }\n\n    /**\n     * recurring_periodicity\n     */\n    public function getCalendarRecurringPeriodicityAttribute(): ?string\n    {\n        if (! $this->hasCalendarDate()) {\n            return null;\n        }\n\n        return $this->calendarDate->recurring_periodicity;\n    }\n\n    /**\n     * Calendar Colour\n     *\n     * @return null|string\n     */\n    public function getCalendarColourAttribute()\n    {\n        if (! $this->hasCalendarDate()) {\n            return '#cccccc';\n        }\n\n        return $this->calendarDate->colour;\n    }\n\n    public function calendarReminder(): ?Reminder\n    {\n        return $this->calendarDate;\n    }\n\n    protected function hasCalendarDate(): bool\n    {\n        return isset($this->calendarDate);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasSlug.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Observers\\SlugObserver;\n\n/**\n * @property string $slug\n */\ntrait HasSlug\n{\n    public static function bootHasSlug(): void\n    {\n        static::observe(app(SlugObserver::class));\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasSuggestions.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Observers\\SuggestionObserver;\n\ntrait HasSuggestions\n{\n    public static function bootHasSuggestions()\n    {\n        static::observe(new SuggestionObserver);\n    }\n\n    public function getSuggestions(): array\n    {\n        if (! property_exists($this, 'suggestions')) {\n            return [];\n        }\n\n        return $this->suggestions;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasUser.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property ?int $user_id\n * @property ?User $user\n */\ntrait HasUser\n{\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function user(): BelongsTo\n    {\n        return $this->belongsTo(User::class, $this->getUserFieldName());\n    }\n\n    protected function getUserFieldName(): string\n    {\n        if (! property_exists($this, 'userField')) {\n            return 'user_id';\n        }\n\n        return $this->userField;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasVisibility.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Scopes\\VisibilityIDScope;\nuse App\\Observers\\VisibilityObserver;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * Trait VisibilityTrait\n *\n * Add a visibility permission to subelements, using the Visibility enum\n *\n *\n * @property ?Visibility $visibility_id\n *\n * @method static self|Builder withPrivate()\n */\ntrait HasVisibility\n{\n    protected bool $skipAllIcon = false;\n\n    /**\n     * Add the Visible scope as a default scope to this model\n     */\n    public static function bootHasVisibility()\n    {\n        static::addGlobalScope(new VisibilityIDScope);\n        static::observe(app(VisibilityObserver::class));\n    }\n\n    public function skipAllIcon(): self\n    {\n        $this->skipAllIcon = true;\n\n        return $this;\n    }\n\n    /**\n     * Generate the data for the visibility icon\n     */\n    public function visibilityIcon(?string $extra = null): array\n    {\n        $icon = [];\n\n        if ($this->isVisibleAll()) {\n            if ($this->skipAllIcon) {\n                $icon['skip'] = true;\n\n                return $icon;\n            }\n            $icon['class'] = 'fa-regular fa-eye';\n            $icon['key'] = __('visibilities.helpers.all');\n        } elseif ($this->isVisibleAdmin()) {\n            $icon['class'] = 'fa-regular fa-lock';\n            $icon['key'] = __('visibilities.helpers.admin');\n        } elseif ($this->visibility_id === Visibility::Self) {\n            $icon['class'] = 'fa-regular fa-user-secret';\n            $icon['key'] = __('visibilities.helpers.self');\n        } elseif ($this->visibility_id === Visibility::AdminSelf) {\n            $icon['class'] = 'fa-regular fa-user-lock';\n            $icon['key'] = __('visibilities.helpers.admin-self');\n        } elseif ($this->visibility_id === Visibility::Member) {\n            $icon['class'] = 'fa-regular fa-users';\n            $icon['key'] = __('visibilities.helpers.members');\n        }\n\n        $icon['class'] = mb_rtrim($icon['class'] . ' ' . $extra);\n\n        return $icon;\n    }\n\n    public function visibilityName(): string\n    {\n        if ($this->isVisibleAll()) {\n            if ($this->skipAllIcon) {\n                return '';\n            }\n\n            return __('crud.visibilities.all');\n        } elseif ($this->isVisibleAdmin()) {\n            return __('crud.visibilities.admin');\n        } elseif ($this->visibility_id === Visibility::Self->value) {\n            return __('crud.visibilities.self');\n        } elseif ($this->visibility_id === Visibility::AdminSelf->value) {\n            return __('crud.visibilities.admin-self');\n        } elseif ($this->visibility_id === Visibility::Member->value) {\n            return __('crud.visibilities.members');\n        }\n\n        return __('crud.visibilities.all');\n    }\n\n    /**\n     * Get a list of visibility options when editing an element\n     */\n    public function visibilityOptions(): array\n    {\n        $options = [];\n        $options[Visibility::All->value] = __('crud.visibilities.all');\n\n        if (auth()->user()->isAdmin()) {\n            $options[Visibility::Admin->value] = __('crud.visibilities.admin');\n            $options[Visibility::Member->value] = __('crud.visibilities.members');\n        }\n        if ($this->isCreator()) {\n            $options[Visibility::Self->value] = __('crud.visibilities.self');\n            $options[Visibility::AdminSelf->value] = __('crud.visibilities.admin-self');\n        }\n\n        // If it's a visibility self & admin, and we're not the creator, we can't change this\n        if ($this->visibility_id === Visibility::AdminSelf->value && ! $this->isCreator()) {\n            $options = [Visibility::AdminSelf->value => __('crud.visibilities.admin-self')];\n        } elseif ($this->visibility_id === Visibility::Self->value && ! $this->isCreator()) {\n            $options = [Visibility::Self->value => __('crud.visibilities.self')];\n        }\n\n        return $options;\n    }\n\n    /**\n     * Determine if the current user is the creator\n     */\n    protected function isCreator(): bool\n    {\n        return $this->created_by == auth()->user()->id;\n    }\n\n    public function isVisibleAll(): bool\n    {\n        return $this->visibility_id === Visibility::All;\n    }\n\n    public function isVisibleAdmin(): bool\n    {\n        return $this->visibility_id === Visibility::Admin;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/LastSync.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * @method static self|Builder lastSync(?string $lastSync = null)\n */\ntrait LastSync\n{\n    /**\n     * Used by the API to get models updated since a previous date\n     */\n    public function scopeLastSync(Builder $query, ?string $lastSync = null): Builder\n    {\n        if (empty($lastSync)) {\n            return $query;\n        }\n        // @phpstan-ignore-next-line\n        $tableName = (with(new static))->getTable();\n\n        return $query->where($tableName . '.updated_at', '>', $lastSync);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Orderable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Enums\\EntityEventTypes;\nuse App\\Models\\Entity;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Facades\\DB;\n\n/**\n * @method static self|Builder order(array|null $data)\n */\ntrait Orderable\n{\n    public function scopeOrder(Builder $query, ?array $data)\n    {\n        // Default values can be defined on the model, or default\n        $field = $this->defaultOrderField ?: 'name';\n        $direction = $this->defaultOrderDirection ?: 'asc';\n\n        if (! empty($data) && auth()->check()) {\n            foreach ($data as $key => $value) {\n                $field = $key;\n                $direction = $value;\n            }\n        }\n\n        // Calendar dates are handled differently since we have three fields.\n        // However, we should do a left join instead\n        if ($field === 'calendar_date') {\n            return $query\n                ->joinEntity()\n                ->leftJoin('reminders as cd', function ($on) {\n                    return $on->on('cd.remindable_id', 'e.id')\n                        ->on('cd.remindable_type', '=', DB::raw(\"'\" . addslashes(Entity::class) . \"'\"))\n                        ->where('cd.type_id', EntityEventTypes::calendarDate);\n                })\n                ->orderBy('cd.year', $direction)\n                ->orderBy('cd.month', $direction)\n                ->orderBy('cd.day', $direction);\n        } elseif ($field === 'type') {\n            return $query\n                ->joinEntity()\n                ->orderBy('e.type', $direction);\n        } elseif ($field === 'locations') {\n            return $query\n                ->joinEntity()\n                ->leftJoin('entity_locations', 'entity_locations.entity_id', '=', 'e.id')\n                ->leftJoin('locations', 'locations.id', '=', 'entity_locations.location_id')\n                ->orderBy('locations.name', $direction);\n        }\n        if (! empty($field)) {\n            $segments = explode('.', $field);\n            if (count($segments) > 1) {\n                $relationName = $segments[0];\n\n                /** @var BelongsTo $relation */\n                $relation = $this->{$relationName}();\n                $foreignName = $relation->getQuery()->getQuery()->from;\n\n                return $query\n                    ->with($relationName)\n                    ->leftJoin(\n                        $foreignName . ' as orderable_j',\n                        'orderable_j.id',\n                        $this->getTable() . '.' . $relation->getForeignKeyName()\n                    )\n                    ->orderBy(str_replace($relationName, 'orderable_j', $field), $direction);\n            } else {\n                // Order by related table? Yeah that's fun.\n                // While this would be possible, this would mean injecting the acl/permission system\n                // just for an order by, which seems quite overkill.\n                // A better solution might present itself during a future rewrite of the acl engine.\n                //                if (substr($field, 0, 6) == 'count(') {\n                //                    $relationName = preg_replace('/count\\((.*)\\)/si', '$1', $field);\n                //                    $relation = $this->{$relationName}();\n                //                    $foreignName = $relation->getQuery()->getQuery()->from;\n                //\n                //                    return $query\n                //                        ->orderByRaw('(select count(*) from ' . $foreignName . ' where ' .\n                // $relation->getForeignKeyName() . ' = ' . $this->getTable() . '.' . $this->primaryKey . ') ' . $direction);\n                //                }\n\n                // If the field has a casting\n                if (property_exists($this, 'orderCasting') && ! empty($this->orderCasting[$field])) {\n                    return $query->orderByRaw(\n                        'cast(' . $this->getTable() . '.' . $field . ' as ' . $this->orderCasting[$field] . ')'\n                        . $direction\n                    );\n                }\n\n                return $query->orderBy($this->getTable() . '.' . $field, $direction);\n            }\n        }\n\n        return $query;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Paginatable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Facades\\Domain;\nuse App\\Services\\PaginationService;\n\ntrait Paginatable\n{\n    private int $pageSizeMax = 45;\n\n    private int $pageSizeMinimum = 15;\n\n    public function getPerPage()\n    {\n        $pageSize = 15;\n\n        if (auth()->check()) {\n            $pageSize = auth()->user()->pagination;\n            $pagService = app()->make(PaginationService::class);\n            $this->pageSizeMax = $pagService->user(auth()->user())->max();\n        }\n\n        // Currently exporting single or bulk? Rise limit to 100.\n        // @phpstan-ignore-next-line\n        $request = request()->route()->getAction();\n        if (! empty($request['as']) && in_array($request['as'], ['bulk.process'])) {\n            return 100;\n        }\n\n        if (Domain::isApi()) {\n            $this->pageSizeMinimum = 45;\n        }\n\n        return min(max($pageSize, $this->pageSizeMinimum), $this->pageSizeMax);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Privatable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Scopes\\PrivateScope;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * @property bool|int $is_private\n */\ntrait Privatable\n{\n    /**\n     * Add the Visible scope as a default scope to this model\n     */\n    public static function bootPrivatable()\n    {\n        static::addGlobalScope(new PrivateScope);\n    }\n\n    public function scopeOnPrivate(Builder $query): Builder\n    {\n        // Only apply these scopes in non-console mode.\n        if (app()->runningInConsole()) {\n            return $query;\n        }\n\n        // Only admins have access to private models\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->where($this->getTable() . '.is_private', false);\n        }\n\n        return $query;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Purifiable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Observers\\PurifiableObserver;\n\n/**\n * @property ?string $entry\n */\ntrait Purifiable\n{\n    public static function bootPurifiable(): void\n    {\n        if (app()->runningInConsole() && ! app()->runningUnitTests()) {\n            return;\n        }\n        static::observe(app(PurifiableObserver::class));\n    }\n\n    public function getPurifiableFields(): array\n    {\n        return $this->purifiableFields ?? ['entry'];\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Sanitizable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Observers\\SanitizedObserver;\n\n/**\n * @property array $sanitizable\n */\ntrait Sanitizable\n{\n    /**\n     * Boot the trait's observers\n     */\n    public static function bootSanitizable(): void\n    {\n        static::observe(app(SanitizedObserver::class));\n    }\n\n    public function getSanitizable(): array\n    {\n        if (! property_exists($this, 'sanitizable')) {\n            return [];\n        }\n\n        return $this->sanitizable;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Searchable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * @method static self|Builder search(string|null $term)\n */\ntrait Searchable\n{\n    /**\n     * Scope a query to only include users of a given type.\n     */\n    public function scopeSearch(Builder $query, ?string $term = null): Builder\n    {\n        if (empty($term)) {\n            return $query;\n        }\n\n        $searchFields = $this->searchableFields();\n\n        return $query->where(function ($q) use ($term, $searchFields) {\n            foreach ($searchFields as $field) {\n                $q->orWhere($this->getTable() . '.' . $field, 'like', \"%{$term}%\");\n            }\n        });\n    }\n\n    public function hasSearchableFields(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Available searchable fields. Defaults to name, type and type\n     *\n     * @return string[]\n     */\n    protected function searchableFields(): array\n    {\n        if (property_exists($this, 'searchableColumns')) {\n            return $this->searchableColumns;\n        }\n\n        return [\n            'name',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/SimpleSortableTrait.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Datagrids\\Sorters\\DatagridSorter;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Str;\n\n/**\n * Trait SimpleSortableTrait\n */\ntrait SimpleSortableTrait\n{\n    /**\n     * @param  DatagridSorter|string  $datagridSorter\n     * @return Builder\n     */\n    public function scopeSimpleSort(Builder $builder, mixed $datagridSorter = null)\n    {\n        // DatagridSorter can be empty on exports\n        if (empty($datagridSorter)) {\n            return $builder;\n        }\n        if (is_string($datagridSorter)) {\n            $datagridSorter = new $datagridSorter;\n            $datagridSorter->request(request()->all());\n        }\n\n        $columns = $datagridSorter->column();\n        if (! is_array($columns)) {\n            $columns = [$columns];\n        }\n        $order = $datagridSorter->order();\n\n        foreach ($columns as $column) {\n            if (Str::contains($column, '.')) {\n                $segments = explode('.', $column);\n                if (count($segments) == 2) {\n                    $relationName = $segments[0];\n\n                    $relation = $this->{$relationName}();\n                    $foreignName = $relation->getQuery()->getQuery()->from;\n                    $builder\n                        ->select($this->getTable() . '.*')\n                        ->with($relationName)\n                        ->leftJoin(\n                            $foreignName . ' as f',\n                            'f.id',\n                            $this->getTable() . '.' . $relation->getForeignKeyName()\n                        )\n                        ->orderBy(str_replace($relationName, 'f', $column), $order);\n\n                    continue;\n                }\n            }\n            $builder->orderBy($this->getTable() . '.' . $column, $order);\n        }\n\n        return $builder;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Sortable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\ntrait Sortable\n{\n    /**\n     * Get a list of sortable columns, based on some defaults and custom properties\n     */\n    public function sortableColumns(): array\n    {\n        $base = ['name', 'type', 'is_private'];\n        // Nested models can sort by parent name\n        if (method_exists($this, 'parent')) {\n            $base[] = 'parent.name';\n        }\n\n        return array_merge($this->customSortableColumns(), $base);\n    }\n\n    protected function customSortableColumns(): array\n    {\n        if (! property_exists($this, 'sortableColumns')) {\n            return [];\n        }\n\n        return $this->sortableColumns;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/SortableTrait.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Entity;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\n/**\n * @method static self|Builder sort(array $filters, array $defaultOrder = [])\n * @method static self|Builder defaultOrder()\n * @method static self|Builder sortOnForeign(string $key, string $order)\n */\ntrait SortableTrait\n{\n    public function scopeSort(Builder $query, array $filters, array $defaultOrder = [], ?array $fields = null): Builder\n    {\n        if (empty($filters)) {\n            if (empty($defaultOrder)) {\n                // @phpstan-ignore-next-line\n                return $query->defaultOrder();\n            }\n            foreach ($defaultOrder as $field => $order) {\n                $query->orderBy($field, $order);\n            }\n\n            return $query;\n        }\n\n        //        dump($this->sortable);\n        //        dd($filters);\n        if (empty($this->sortable)) {\n            return $query;\n        }\n\n        if (empty($filters['k'])) {\n            return $query;\n        }\n\n        $key = Arr::get($filters, 'k');\n        if (! in_array($key, $this->sortable)) {\n            return $query;\n        }\n\n        // Force the order to be valid\n        $order = mb_strtolower(Arr::get($filters, 'o', 'asc'));\n        if (! in_array($order, ['asc', 'desc'])) {\n            $order = 'asc';\n        }\n\n        if (Str::contains($key, '.')) {\n            $segments = explode('.', $key);\n            if (count($segments) == 2) {\n                // @phpstan-ignore-next-line\n                return $query->sortOnForeign($key, $order);\n            }\n        } elseif ($key === 'type') {\n            if ($this instanceof Entity) {\n                return $query->orderBy($this->getTable() . '.type', $order);\n            }\n\n            return $query\n                ->select($this->getTable() . '.*')\n                ->leftJoin('entities as e', function ($join) {\n                    $join->on('e.entity_id', '=', $this->getTable() . '.id');\n                    // @phpstan-ignore-next-line\n                    $join->where('e.type_id', '=', $this->entityTypeID())\n                        ->whereRaw('e.campaign_id = ' . $this->getTable() . '.campaign_id');\n                })\n                ->groupBy($this->getTable() . '.id')\n                ->orderBy('e.type', $order);\n        }\n\n        // Custom sort method?\n        $custom = 'scopeCustomSort' . ucfirst($key);\n        if (method_exists($this, $custom)) {\n            return $query->{'customSort' . ucfirst($key)}($order);\n        }\n\n        return $query->orderBy($key, $order);\n    }\n\n    public function scopeDefaultOrder(Builder $query): Builder\n    {\n        if (! isset($this->defaultSort)) {\n            return $query;\n        }\n\n        $defaults = is_array($this->defaultSort) ? $this->defaultSort : [$this->defaultSort];\n        foreach ($defaults as $default) {\n            if (is_array($default)) {\n                $key = array_key_first($default);\n                $query->orderBy($key, $default[$key]);\n\n                continue;\n            }\n            $query->orderBy($default);\n        }\n\n        return $query;\n    }\n\n    /**\n     * Sort on a foreign relation\n     */\n    protected function scopeSortOnForeign(Builder $query, string $key, string $order): Builder\n    {\n        $segments = explode('.', $key);\n        $relationName = $segments[0];\n\n        // Querying a pivot table? Let's let the other query builder take care of this.\n        if ($relationName === 'pivot') {\n            return $query;\n        }\n        $relation = $this->{$relationName}();\n        $foreignName = $relation->getQuery()->getQuery()->from;\n\n        return $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin(\n                $foreignName . ' as f',\n                'f.id',\n                $this->getTable() . '.' . $relation->getForeignKeyName()\n            )\n            ->orderBy(str_replace($relationName, 'f', $key), $order);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Taggable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Tag;\nuse App\\Observers\\TaggableObserver;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\n\n/**\n * Trait Taggable\n *\n * @property Tag[]|Collection $tags\n * @property Tag[]|Collection $visibleTags\n */\ntrait Taggable\n{\n    public static function bootTaggable(): void\n    {\n        // Don't add this observer if in console mode\n        if (app()->runningInConsole()) {\n            return;\n        }\n        static::observe(app(TaggableObserver::class));\n    }\n\n    /**\n     * @return BelongsToMany<Tag, $this>\n     */\n    public function tags(): BelongsToMany\n    {\n        return $this->belongsToMany(Tag::class, $this->getTagPivotTableName())\n            ->with(['entity' => function ($query) {\n                $query->select('entities.id', 'entities.name', 'entities.entity_id', 'entities.type_id');\n            }])\n            ->has('entity');\n    }\n\n    protected function getTagPivotTableName(): ?string\n    {\n        if (property_exists($this, 'tagPivotName')) {\n            return $this->tagPivotName;\n        }\n\n        return null;\n    }\n\n    public function visibleTags(): \\Illuminate\\Support\\Collection\n    {\n        return $this->tags\n            ->where('is_hidden', 0);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/Templatable.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Campaign;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * @property int|bool $is_template\n *\n * @method static self|Builder template(bool $template = true)\n * @method static self|Builder postTemplates(Campaign $campaign, bool $template = true)\n */\ntrait Templatable\n{\n    public function isTemplate(): bool\n    {\n        return (bool) $this->is_template;\n    }\n\n    public function scopeTemplate(Builder $query, bool $template = true): Builder\n    {\n        return $query->select($this->getTable() . '.*')\n            ->where($this->getTable() . '.is_template', $template);\n    }\n\n    public function scopePostTemplates(Builder $query, Campaign $campaign, bool $template = true): Builder\n    {\n        return $query->select([\n            $this->getTable() . '.id',\n            $this->getTable() . '.name',\n            $this->getTable() . '.entity_id',\n        ])\n            ->with('entity')\n            ->leftJoin('entities as e', 'e.id', $this->getTable() . '.entity_id')\n            ->where('e.campaign_id', $campaign->id)\n            ->where($this->getTable() . '.is_template', $template);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/TouchSilently.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\ntrait TouchSilently\n{\n    /**\n     * Touch a model (update the timestamps) without any observers/events\n     */\n    public function touchSilently()\n    {\n        return static::withoutEvents(function () {\n            if (in_array('updated_by', $this->getFillable())) {\n                // Still log who edited the entity\n                $this->updated_by = auth()->user()->id;\n            }\n\n            return $this->touch();\n        });\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/UserBoosters.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Pledge;\nuse Illuminate\\Support\\Arr;\n\n/**\n * @property\n * @property int $booster_count\n */\ntrait UserBoosters\n{\n    /**\n     * Get available boosts for the user\n     */\n    public function availableBoosts(): int\n    {\n        return $this->maxBoosts() - $this->boosting();\n    }\n\n    /**\n     * Get amount of campaigns the user is boosting\n     */\n    public function boosting(): int\n    {\n        if ($this->hasBoosterNomenclature()) {\n            return $this->boosts->count();\n        }\n\n        return $this->boosts->groupBy('campaign_id')->count();\n    }\n\n    /**\n     * Get max number of boosts a user can give\n     */\n    public function maxBoosts(): int\n    {\n        // Allows admins to give boosters to members of the community\n        $base = 0;\n        if (! empty($this->booster_count)) {\n            $base += $this->booster_count;\n        }\n\n        if (! $this->isSubscriber()) {\n            return $base;\n        }\n\n        if ($this->hasRole('admin')) {\n            return max(3, $base);\n        }\n\n        $levels = [\n            Pledge::KOBOLD => 0,\n            Pledge::GOBLIN => 0,\n            Pledge::OWLBEAR => 1,\n            Pledge::WYVERN => 3,\n            Pledge::ELEMENTAL => 7,\n        ];\n        if ($this->hasBoosterNomenclature()) {\n            $levels = [\n                Pledge::KOBOLD => 0,\n                Pledge::GOBLIN => 1,\n                Pledge::OWLBEAR => 3,\n                Pledge::WYVERN => 6,\n                Pledge::ELEMENTAL => 10,\n            ];\n        }\n\n        return Arr::get($levels, $this->pledge ?? 'unknown', 0) + $base;\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/UserTokens.php",
    "content": "<?php\n\nnamespace App\\Models\\Concerns;\n\nuse Carbon\\Carbon;\n\ntrait UserTokens\n{\n    public function hasTokens(): bool\n    {\n        return $this->isElemental() || $this->isWyvern() || $this->hasRole('admin') || $this->id === 158800;\n    }\n\n    public function availableTokens(): int\n    {\n        return max($this->maxTokens() - $this->usedTokens(), 0);\n    }\n\n    /**\n     * Get the max amount of tokens for Bragi\n     */\n    public function maxTokens(): int\n    {\n        $key = 'all';\n        if ($this->hasRole('admin')) {\n            $key = 'admin';\n        } elseif ($this->isElemental()) {\n            $key = 'elemental';\n        } elseif ($this->isWyvern()) {\n            $key = 'wyvern';\n        } elseif ($this->id === 158800) {\n            return 20;\n        }\n\n        return config('bragi.tokens.' . $key);\n    }\n\n    /**\n     * Count the number of recently used tokens (calls to the API). These reset every month for the user\n     */\n    public function usedTokens(): int\n    {\n        $subDay = $this->tokenRenewalDay();\n        $currentDay = date('d');\n\n        $date = new Carbon;\n        $date->setDay($subDay);\n\n        // If the sub was on the 7th, and we're the 3rd, move the cutoff to a month ago\n        if ($subDay >= $currentDay) {\n            $date->subMonth();\n        }\n\n        return $this->bragiLogs()->recent($date->format('Y-m-d'))->count();\n    }\n\n    /**\n     * Get the next date the token count resets\n     */\n    public function tokenRenewalDate(): string\n    {\n        $subDay = $this->tokenRenewalDay();\n        $currentDay = date('d');\n\n        $date = new Carbon;\n        $date->setDay($subDay);\n\n        // If the sub was on the 7th, and we're the 11th, move the next date to the following month\n        if ($subDay < $currentDay) {\n            $date->addMonth();\n        }\n\n        return $date->format('M d, Y');\n    }\n\n    /**\n     * Get the day the renewal of tokens is based on\n     */\n    protected function tokenRenewalDay(): int\n    {\n        // Admins aren't subbed, take their creation date for debugging\n        if ($this->hasRole('admin')) {\n            return $this->created_at->format('d');\n        }\n        $data = $this->subscription('kanka');\n\n        return ! empty($data) ? $data->created_at->format('d') : 1;\n    }\n}\n"
  },
  {
    "path": "app/Models/Conversation.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\ConversationTarget;\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Conversation\n *\n * @property string $name\n * @property string $image\n * @property string $type\n * @property ConversationTarget $target_id\n * @property bool|int $is_private\n * @property bool|int $is_closed\n * @property ConversationParticipant[]|Collection $participants\n * @property ConversationMessage[]|Collection $messages\n */\nclass Conversation extends MiscModel\n{\n    use Acl;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'target_id',\n        'is_private',\n        'is_closed',\n    ];\n\n    public $casts = [\n        'target_id' => ConversationTarget::class,\n    ];\n\n    /**\n     * Searchable fields\n     */\n    protected array $searchableColumns = ['name'];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'target_id',\n        'colour',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * Set to false if this entity type doesn't have relations\n     */\n    public bool $hasRelations = false;\n\n    /**\n     * @var string[] Extra relations loaded for the API endpoint\n     */\n    public array $apiWith = ['messages', 'participants'];\n\n    /**\n     * @return HasMany<ConversationMessage, $this>\n     */\n    public function messages(): HasMany\n    {\n        return $this->hasMany('App\\Models\\ConversationMessage', 'conversation_id');\n    }\n\n    /**\n     * @return HasMany<ConversationParticipant, $this>\n     */\n    public function participants(): HasMany\n    {\n        return $this->hasMany('App\\Models\\ConversationParticipant', 'conversation_id')\n            ->with('character');\n    }\n\n    /**\n     * Get a list of participants\n     *\n     * @return array\n     */\n    public function participantsList(bool $withNames = true, bool $users = false)\n    {\n        $participants = [];\n        foreach ($this->participants as $participant) {\n            if (! $participant->character) {\n                continue;\n            }\n            if (auth()->check() && auth()->user()->can('update', $participant->character->entity)) {\n                $participants[$participant->id()] = $participant->name();\n            } elseif ($users == true) {\n                $participants[$participant->id()] = $participant->name();\n            }\n        }\n\n        if (! $withNames) {\n            return array_keys($participants);\n        }\n\n        return $participants;\n    }\n\n    /**\n     * @return false|string\n     */\n    public function jsonParticipants()\n    {\n        return json_encode($this->participantsList());\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.conversation');\n    }\n\n    public function forCharacters(): bool\n    {\n        return $this->target_id === ConversationTarget::characters;\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'target_id',\n            'is_closed',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/ConversationMessage.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\ConversationTarget;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\LastSync;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Facades\\Auth;\n\n/**\n * Class ConversationMessage\n *\n * @property int $id\n * @property int $conversation_id\n * @property int $character_id\n * @property int $user_id\n * @property string $message\n * @property ?Character $character\n * @property Conversation $conversation\n * @property Carbon $created_at\n */\nclass ConversationMessage extends Model\n{\n    use Blameable;\n    use HasFactory;\n    use HasUser;\n    use LastSync;\n\n    public bool $isGroupped = false;\n\n    protected $fillable = [\n        'conversation_id',\n        'created_by',\n        'character_id',\n        'user_id',\n        'message',\n    ];\n\n    /**\n     * Fields that can be filtered on\n     *\n     * @var array\n     */\n    protected $filterableColumns = [\n        'conversation_id',\n        'created_at',\n        'created_by',\n    ];\n\n    /**\n     * @return BelongsTo<Character, $this>\n     */\n    public function character(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Character', 'character_id');\n    }\n\n    /**\n     * @return BelongsTo<Conversation, $this>\n     */\n    public function conversation(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Conversation', 'conversation_id');\n    }\n\n    /**\n     * @return int|null\n     */\n    public function target()\n    {\n        return ! empty($this->character_id) ? ConversationTarget::characters->value :\n            (! empty($this->user_id) ? ConversationTarget::users->value : null);\n    }\n\n    /**\n     * @return string|null\n     */\n    public function author()\n    {\n        if (! empty($this->user_id)) {\n            return $this->user;\n        } elseif (! empty($this->character_id)) {\n            return $this->character;\n        }\n\n        return null;\n    }\n\n    public function authorID(): ?int\n    {\n        if (! empty($this->user_id)) {\n            return $this->user_id;\n        } elseif (! empty($this->character_id)) {\n            return $this->character_id;\n        }\n\n        return null;\n    }\n\n    public function scopeDefault(Builder $query, ?int $oldestId = null, ?int $newestId = null)\n    {\n        $query->with(['user', 'character'])\n            ->latest()\n            ->take(20);\n\n        if (! empty($oldestId)) {\n            $query->where('id', '<', $oldestId);\n        } elseif (! empty($newestId)) {\n            $query->where('id', '>', $newestId);\n        }\n    }\n\n    public function isMine(): bool\n    {\n        return Auth::check() && $this->created_by == Auth::user()->id;\n    }\n\n    public function grouppedWith(?ConversationMessage $previous = null): self\n    {\n        if (empty($previous)) {\n            return $this;\n        }\n        if ($previous->authorID() != $this->authorID()) {\n            return $this;\n        }\n        // Same 60 seconds\n        $this->isGroupped = $previous->created_at->diffInSeconds($this->created_at) < 60;\n\n        return $this;\n    }\n\n    public function isGroup(): bool\n    {\n        return $this->isGroupped;\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/ConversationParticipant.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\ConversationTarget;\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\n\n/**\n * @property int $id\n * @property int $conversation_id\n * @property ?int $character_id\n * @property ?Character $character\n */\nclass ConversationParticipant extends Model\n{\n    use HasFactory;\n    use HasUser;\n\n    protected Character|User|null $loadedEntity;\n\n    protected $fillable = [\n        'conversation_id',\n        'character_id',\n        'user_id',\n    ];\n\n    /**\n     * Who created this entry\n     *\n     * @return BelongsTo<User, $this>\n     */\n    public function creator(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'created_by');\n    }\n\n    /**\n     * @return BelongsTo<Character, $this>\n     */\n    public function character(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Character', 'character_id');\n    }\n\n    /**\n     * @return BelongsTo<Conversation, $this>\n     */\n    public function conversation(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Conversation', 'conversation_id');\n    }\n\n    public function name(): string\n    {\n        return $this->entity()->name ?? __('conversations.messages.author_unknown');\n    }\n\n    public function target(): ?int\n    {\n        return ! empty($this->character_id) ? ConversationTarget::characters->value :\n            (! empty($this->user_id) ? ConversationTarget::users->value : null);\n    }\n\n    public function isMember(): bool\n    {\n        return ! empty($this->user_id);\n    }\n\n    public function id()\n    {\n        $entity = $this->loadEntity();\n\n        return ! empty($entity) ? $entity->id : null;\n    }\n\n    /**\n     * @return Character|User|bool|HasOne|mixed\n     */\n    public function entity()\n    {\n        return $this->loadEntity();\n    }\n\n    /**\n     * @return Character|User|bool|mixed\n     */\n    protected function loadEntity()\n    {\n        if (isset($this->loadedEntity)) {\n            return $this->loadedEntity;\n        }\n        if (! empty($this->user_id)) {\n            return $this->loadedEntity = $this->user;\n        }\n\n        return $this->loadedEntity = $this->character;\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'conversation_id',\n            'created_at',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/Creature.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Creature\n *\n * @property bool|int $is_extinct\n * @property bool|int $is_dead\n */\nclass Creature extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'is_private',\n        'is_extinct',\n        'is_dead',\n    ];\n\n    protected array $sortableColumns = [\n        'is_extinct',\n        'is_dead',\n        'locations',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'is_extinct',\n        'is_dead',\n        'type',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [];\n\n    protected array $exportFields = [\n        'base',\n        'is_extinct',\n        'is_dead',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.creature');\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'locations',\n        ];\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if ($this->entity->locations->isNotEmpty()) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        // Pivot tables can be deleted directly\n        $this->entity->locations()->detach();\n    }\n}\n"
  },
  {
    "path": "app/Models/DiceRoll.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * @property string $system\n * @property string $parameters\n * @property ?int $character_id\n * @property ?Character $character\n */\nclass DiceRoll extends MiscModel\n{\n    use Acl;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'character_id',\n        'system',\n        'parameters',\n        'is_private',\n    ];\n\n    /**\n     * Searchable fields\n     */\n    protected array $searchableColumns = ['name'];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'parameters',\n        'character.name',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'character_id',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'parameters',\n    ];\n\n    /**\n     * Who created this entry\n     *\n     * @return BelongsTo<Character, $this>\n     */\n    public function character(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Character', 'character_id');\n    }\n\n    /**\n     * @return HasMany<DiceRollResult, $this>\n     */\n    public function diceRollResults(): HasMany\n    {\n        return $this->hasMany('App\\Models\\DiceRollResult', 'dice_roll_id');\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.dice_roll');\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        return $this->parameters || $this->character;\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'character_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/DiceRollResult.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\Orderable;\nuse App\\Models\\Concerns\\Searchable;\nuse App\\Models\\Concerns\\Sortable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property ?DiceRoll $diceRoll\n * @property ?int $dice_roll_id\n * @property int|bool $is_private\n * @property string $results\n */\nclass DiceRollResult extends Model\n{\n    use Blameable;\n    use HasFilters;\n    use HasUser;\n    use Orderable;\n    use Searchable;\n    use Sortable;\n\n    protected $fillable = [\n        'dice_roll_id',\n        'created_by',\n        'results',\n        'is_private',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'diceRoll.name',\n        'character.name',\n        'user.name',\n        'results',\n        'created_at',\n    ];\n\n    protected string $defaultOrderField = 'created_at';\n\n    protected string $defaultOrderDirection = 'DESC';\n\n    protected string $userField = 'created_by';\n\n    /**\n     * We want to use the dice_roll entity type for permissions\n     */\n    protected string $entityType = 'dice_roll';\n\n    /** @var bool No relations for this entity \"type\" */\n    protected bool $hasRelations = false;\n\n    /**\n     * @return BelongsTo<DiceRoll, $this>\n     */\n    public function diceRoll(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\DiceRoll', 'dice_roll_id');\n    }\n\n    public function character()\n    {\n        return $this->diceRoll->character();\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'dice_roll_id',\n            'created_at',\n            'created_by',\n            'diceRoll-character_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/Entity.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\EntityCache;\nuse App\\Facades\\Img;\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\EntityLogs;\nuse App\\Models\\Concerns\\EntityType;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasEntry;\nuse App\\Models\\Concerns\\HasLocations;\nuse App\\Models\\Concerns\\HasMentions;\nuse App\\Models\\Concerns\\HasReminder;\nuse App\\Models\\Concerns\\HasSuggestions;\nuse App\\Models\\Concerns\\LastSync;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\Searchable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Models\\Concerns\\Taggable;\nuse App\\Models\\Concerns\\Templatable;\nuse App\\Models\\Concerns\\TouchSilently;\nuse App\\Models\\Relations\\EntityRelations;\nuse App\\Models\\Scopes\\EntityScopes;\nuse Carbon\\Carbon;\nuse Collator;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Scout\\Searchable as Scout;\nuse Staudenmeir\\LaravelAdjacencyList\\Eloquent\\HasRecursiveRelationships;\n\n/**\n * Class Entity\n *\n * @property int $id\n * @property int $entity_id\n * @property string $name\n * @property ?string $type\n * @property ?string $entry\n * @property int $type_id\n * @property int $created_by\n * @property int $updated_by\n * @property int $deleted_by\n * @property bool|int $is_private\n * @property bool|int $is_attributes_private\n * @property string $tooltip\n * @property string $header_image\n * @property ?string $image_uuid\n * @property ?string $header_uuid\n * @property ?string $marketplace_uuid\n * @property ?int $parent_id\n * @property ?int $focus_x\n * @property ?int $focus_y\n * @property ?string $image_path\n * @property string $source\n * @property Carbon $created_at\n * @property Carbon $updated_at\n * @property Carbon $deleted_at\n * @property ?Carbon $archived_at\n */\nclass Entity extends Model\n{\n    use Acl;\n    use Blameable;\n    use EntityLogs;\n    use EntityRelations;\n    use EntityScopes;\n    use EntityType;\n    use HasCampaign;\n    use HasEntry;\n    use HasLocations;\n    use HasMentions;\n    use HasRecursiveRelationships;\n    use HasReminder;\n    use HasSuggestions;\n    use LastSync;\n    use Paginatable;\n    use Sanitizable;\n    use Scout;\n    use Searchable;\n    use SoftDeletes;\n    use SortableTrait;\n    use Taggable;\n    use Templatable;\n    use TouchSilently;\n\n    protected $fillable = [\n        'campaign_id',\n        'entity_id',\n        'name',\n        'is_private',\n        'is_attributes_private',\n        'header_image',\n        'image_uuid',\n        'header_uuid',\n        'is_template',\n        'type',\n        'entry',\n        'parent_id',\n        'status_id',\n        'source',\n    ];\n\n    protected array $sanitizable = [\n        'type',\n    ];\n\n    protected string $tagPivotName = 'entity_tags';\n\n    /** @var array Searchable fields */\n    protected array $searchableColumns = [\n        'name',\n    ];\n\n    /** @var string[] Fields that can be used to order by */\n    protected array $sortable = [\n        'name',\n        'type',\n        'type_id',\n        'deleted_at',\n    ];\n\n    /**\n     * Get the child entity\n     *\n     * @return HasMany|HasOne|MiscModel\n     */\n    public function child()\n    {\n        if ($this->isAttributeTemplate()) {\n            return $this->attributeTemplate();\n        } elseif ($this->isDiceRoll()) {\n            return $this->diceRoll();\n        }\n\n        return $this->{$this->entityType->code}();\n    }\n\n    /**\n     * Child attribute\n     *\n     * @return HasMany|HasOne|MiscModel\n     */\n    public function getChildAttribute()\n    {\n        // When in console mode (queue), don't cache results as the queue won't re-validate them\n        return app()->runningInConsole() ? $this->child()->first() : EntityCache::child($this);\n    }\n\n    /**\n     * @return Entity\n     */\n    public function reloadChild()\n    {\n        if ($this->isAttributeTemplate()) {\n            return $this->load('attributeTemplate');\n        } elseif ($this->isDiceRoll()) {\n            return $this->load('diceRoll');\n        }\n\n        return $this->load($this->entityType->code);\n    }\n\n    /**\n     * Preview of the entity with mapped mentions. For map markers\n     */\n    public function mappedPreview(): string\n    {\n        $campaign = CampaignLocalization::getCampaign();\n        if ($campaign->boosted()) {\n            $boostedTooltip = strip_tags($this->tooltip);\n            if (! empty(mb_trim($boostedTooltip))) {\n                $text = $this->parsedEntry();\n\n                return (string) strip_tags($text);\n            }\n        }\n        if (! $this->hasEntry()) {\n            return '';\n        }\n\n        return Str::limit(strip_tags($this->parsedEntry()), 500);\n    }\n\n    /**\n     * @return string\n     */\n    public function url(string $action = 'show', array $options = [])\n    {\n        $campaign = CampaignLocalization::getCampaign();\n        try {\n            if ($action == 'index') {\n                return route($this->entityType->code . '.index', [$campaign, $this->entityType]);\n            } elseif ($action === 'show') {\n                return route('entities.show', [$campaign, $this] + $options);\n            } elseif ($action === 'edit') {\n                return route('entities.edit', [$campaign, $this] + $options);\n            }\n            $routeOptions = array_merge([$campaign, $this->entity_id], $options);\n\n            return route($this->entityType->code . '.' . $action, $routeOptions);\n        } catch (Exception $e) {\n            return route('dashboard', $campaign);\n        }\n    }\n\n    /**\n     * Get the entity's type id\n     */\n    public function typeId()\n    {\n        return $this->type_id;\n    }\n\n    public function isType(array|int $types): bool\n    {\n        if (! is_array($types)) {\n            $types = [$types];\n        }\n\n        return in_array($this->type_id, $types);\n    }\n\n    /**\n     * Get the image (or default image) of an entity\n     *\n     * @param  int  $width  = 200\n     */\n    public function thumbnail(int $width = 400, ?int $height = null, string $field = 'header_image'): string\n    {\n        if (empty($this->$field)) {\n            return '';\n        }\n\n        return Img::resetCrop()->crop($width, $height ?? $width)->url($this->$field);\n    }\n\n    /**\n     * If an entity has entity files\n     */\n    public function hasFiles(): bool\n    {\n        return $this->type_id != config('entities.ids.bookmark');\n    }\n\n    public function hasHeaderImage(): bool\n    {\n        if (! empty($this->header_image)) {\n            return true;\n        }\n\n        return ! empty($this->header_uuid) && ! empty($this->header);\n    }\n\n    /**\n     * Determine if an entity has an image that can be shown. This can be either uploaded\n     * directly on them, or from the gallery\n     */\n    public function hasImage(bool $boosted = false): bool\n    {\n        return ! empty($this->image_path) || ! empty($this->image);\n    }\n\n    public function hasLinks(): bool\n    {\n        return $this->links()->count() > 0;\n    }\n\n    /**\n     * Get the entity background header image\n     */\n    public function getHeaderUrl(int $width = 1200, int $height = 400): ?string\n    {\n        if (! empty($this->header_image)) {\n            return $this->thumbnail($width, $height, 'header_image');\n        }\n\n        if (empty($this->header)) {\n            return null;\n        }\n\n        return $this->header->getUrl($width, $height);\n    }\n\n    /**\n     * Determine if an entity has pinned elements to display\n     */\n    public function hasPins(): bool\n    {\n        if ($this->pinnedRelations->isNotEmpty()) {\n            return true;\n        }\n        if ($this->starredAttributes()->isNotEmpty()) {\n            return true;\n        }\n\n        return (bool) ($this->pinnedFiles->isNotEmpty());\n    }\n\n    /**\n     * @return array|string[]\n     */\n    public function postPositionOptions(?int $position = null): array\n    {\n        $options = $position ? [\n            null => __('posts.position.dont_change'),\n        ] : [];\n\n        $layers = $this->posts->sortBy('position');\n        $hasFirst = false;\n        foreach ($layers as $layer) {\n            if (! $hasFirst) {\n                $hasFirst = true;\n                $options[$layer->position < 0 ? $layer->position - 1 : 1] = __('posts.position.first');\n            }\n            $key = $layer->position > 0 ? $layer->position + 1 : $layer->position;\n            $lang = __('maps/layers.placeholders.position_list', ['name' => $layer->name]);\n            if (config('app.debug')) {\n                $lang .= ' (' . $key . ')';\n            }\n            $options[$key] = $lang;\n        }\n\n        // Didn't have a first option added, add one now\n        if (! $hasFirst) {\n            $options[1] = __('posts.position.first');\n        }\n\n        // If is the last position remove last+1 position from the options array\n        /*if ($position == array_key_last($options) - 1 && count($options) > 1) {\n            array_pop($options);\n        }*/\n        return $options;\n    }\n\n    public function export(): array\n    {\n        $fields = [\n            'id',\n            'entity_id',\n            'parent_id',\n            'type_id',\n            'name',\n            'type',\n            'entry',\n            'is_private',\n            'tooltip',\n            'is_template',\n            'is_attributes_private',\n            'focus_x',\n            'focus_y',\n            'created_at',\n            'updated_at',\n            'created_by',\n            'updated_by',\n            'image_path',\n            'image_uuid',\n            'header_image',\n            'header_uuid',\n            'marketplace_uuid',\n            'status_id',\n        ];\n        $data = [];\n        foreach ($fields as $field) {\n            $data[$field] = $this->$field;\n        }\n\n        // Entity relations\n        $relations = [\n            'entityTags', 'relationships', 'posts', 'abilities', 'reminders',\n            'entityAttributes', 'assets', 'mentions', 'inventories', 'entityLocations',\n        ];\n        foreach ($relations as $relation) {\n            foreach ($this->$relation as $model) {\n                if ($relation === 'abilities' && empty($model->ability)) {\n                    continue;\n                }\n                if ($relation === 'inventories' && empty($model->item)) {\n                    continue;\n                }\n                // here\n                if (method_exists($model, 'exportFields')) {\n                    $export = [];\n                    foreach ($model->exportFields() as $field) {\n                        $export[$field] = $model->$field;\n                    }\n                    $data[$relation][] = $export;\n                } elseif (method_exists($model, 'export')) {\n                    $data[$relation][] = $model->export();\n                } else {\n                    $data[$relation][] = $model->toArray();\n                }\n            }\n        }\n\n        return $data;\n    }\n\n    /**\n     * List of inventory items, group by alphabetical position\n     */\n    public function orderedInventory(): Collection\n    {\n        $inventory = [];\n        $items = $this->inventories()->with(['image', 'item', 'item.entity', 'item.entity.image'])->get();\n        foreach ($items as $item) {\n            if ($item->item_id && (empty($item->item) || empty($item->item->entity))) {\n                continue;\n            }\n            $position = $item->position ?: __('entities/inventories.default_position');\n            $inventory[$position][] = $item;\n        }\n\n        // We want the inventory ordered by position, then by item name\n        $collator = new Collator(app()->getLocale());\n        $positions = array_keys($inventory);\n        $collator->asort($positions);\n\n        $ordered = [];\n        foreach ($positions as $position) {\n            $items = new Collection($inventory[$position]);\n            $ordered[$position] = $items->sortBy(function ($model) {\n                /** @var Inventory $model */\n                return $model->itemName();\n            });\n        }\n\n        return new Collection($ordered);\n    }\n\n    public function hasChild(): bool\n    {\n        return $this->entityType->isStandard();\n    }\n\n    public function isMissingChild(): bool\n    {\n        return $this->entityType->isStandard() && empty($this->child);\n    }\n\n    /**\n     * Get the status key from category_statuses\n     */\n    public function statusKey(): ?string\n    {\n        return $this->status?->key;\n    }\n\n    /**\n     * Get the CSS class for the entity's current status\n     */\n    public function statusClass(): string\n    {\n        $status = $this->status;\n\n        return $status !== null ? $this->entityType->code . '-' . $status->key : '';\n    }\n\n    /**\n     * Generate the entity's body css classes\n     */\n    public function bodyClasses(): string\n    {\n        $classes = [\n            'kanka-entity-' . $this->id,\n            'kanka-entity-' . $this->entityType->code,\n        ];\n\n        $classes[] = 'kanka-type-' . Str::slug($this->type);\n\n        foreach ($this->tags as $tag) {\n            $classes[] = 'kanka-tag-' . $tag->id;\n            $classes[] = 'kanka-tag-' . $tag->slug;\n\n            if ($tag->tag_id) {\n                $classes[] = 'kanka-tag-' . $tag->tag_id;\n            }\n        }\n\n        // Entity status flag\n        $statusClass = $this->statusClass();\n        if ($statusClass !== '') {\n            $classes[] = $statusClass;\n        }\n\n        if ($this->is_private) {\n            $classes[] = 'kanka-entity-private';\n        }\n\n        if ($this->archived_at) {\n            $classes[] = 'kanka-entity-archived';\n        }\n\n        if ($this->hasHeaderImage()) {\n            $classes[] = 'entity-with-banner';\n        }\n\n        return (string) implode(' ', $classes);\n    }\n\n    /**\n     * Get the value used to index the model.\n     */\n    public function getScoutKey()\n    {\n        return $this->getTable() . '_' . $this->id;\n    }\n\n    /**\n     * Get the name of the index associated with the model.\n     */\n    public function searchableAs(): string\n    {\n        return 'entities';\n    }\n\n    public function toSearchableArray()\n    {\n        return [\n            'campaign_id' => $this->campaign_id,\n            'entity_id' => $this->id,\n            'name' => $this->name,\n            'type' => $this->type,\n            'entry' => strip_tags($this->entry),\n        ];\n    }\n\n    public function getLocationPivotTableName(): string\n    {\n        return 'entity_locations';\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityAbility.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class EntityAbility\n *\n * @property int $id\n * @property int $entity_id\n * @property int $ability_id\n * @property int $charges\n * @property int $position\n * @property string $note\n * @property Carbon $created_at\n * @property Carbon $updated_at\n * @property Ability|null $ability\n * @property ?Entity $entity\n *\n * @method static Builder|self defaultOrder()\n */\nclass EntityAbility extends Model\n{\n    use Blameable;\n    use HasFactory;\n    use HasVisibility;\n    use Sanitizable;\n\n    /**\n     * Fillable fields\n     */\n    public $fillable = [\n        'entity_id',\n        'ability_id',\n        'visibility_id',\n        'created_by',\n        'charges',\n        'position',\n        'note',\n    ];\n\n    public $casts = [\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'note',\n    ];\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity');\n    }\n\n    /**\n     * @return BelongsTo<Ability, $this>\n     */\n    public function ability(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Ability');\n    }\n\n    /**\n     * @return Builder\n     */\n    public function scopeDefaultOrder(Builder $query)\n    {\n        return $query\n            ->orderBy('position')\n            ->orderBy('ae.type')\n            ->orderBy('a.name');\n    }\n\n    /**\n     * Copy an entity ability to another target\n     */\n    public function copyTo(Entity $target)\n    {\n        $new = $this->replicate(['entity_id']);\n        $new->entity_id = $target->id;\n\n        return $new->save();\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'ability_id',\n            'visibility_id',\n            'created_by',\n            'charges',\n            'position',\n            'note',\n        ];\n    }\n\n    public function url(string $sub): string\n    {\n        return 'entities.entity_abilities.' . $sub;\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityAsset.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Enums\\Visibility;\nuse App\\Facades\\EntityAssetCache;\nuse App\\Facades\\Img;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasSuggestions;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Scopes\\EntityAssetScopes;\nuse App\\Models\\Scopes\\Pinnable;\nuse Carbon\\Carbon;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\n/**\n * @property int $id\n * @property EntityAssetType $type_id\n * @property int $entity_id\n * @property ?string $image_uuid\n * @property string $name\n * @property array $metadata\n * @property Carbon $created_at\n * @property Carbon $updated_at\n * @property ?Entity $entity\n * @property ?Image $image\n */\nclass EntityAsset extends Model\n{\n    use Blameable;\n    use EntityAssetScopes;\n    use HasFactory;\n    use HasSuggestions;\n    use HasVisibility;\n    use Pinnable;\n    use Sanitizable;\n\n    public $fillable = [\n        'type_id',\n        'entity_id',\n        'name',\n        'metadata',\n        'visibility_id',\n        'is_pinned',\n        'image_uuid',\n    ];\n\n    public $casts = [\n        'metadata' => 'array',\n        'visibility_id' => Visibility::class,\n        'type_id' => EntityAssetType::class,\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'metadata.icon',\n        'metadata.url',\n    ];\n\n    protected array $suggestions = [\n        EntityAssetCache::class => 'clearSuggestion',\n    ];\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo(Entity::class);\n    }\n\n    /**\n     * @return HasOne<Image, $this>\n     */\n    public function image(): HasOne\n    {\n        return $this->hasOne(Image::class, 'id', 'image_uuid');\n    }\n\n    /**\n     * Determine if the asset is a file\n     */\n    public function isFile(): bool\n    {\n        return $this->type_id === EntityAssetType::file;\n    }\n\n    /**\n     * Determine if the asset is a link\n     */\n    public function isLink(): bool\n    {\n        return $this->type_id === EntityAssetType::link;\n    }\n\n    /**\n     * Determine if the asset is an alias\n     */\n    public function isAlias(): bool\n    {\n        return $this->type_id === EntityAssetType::alias;\n    }\n\n    /**\n     * Determine if the file is an image\n     */\n    public function isImage(): bool\n    {\n        return $this->isFile() && Str::startsWith($this->metadata['type'], 'image/');\n    }\n\n    /**\n     * Determine if the file is audio\n     */\n    public function isAudio(): bool\n    {\n        return $this->isFile() && Str::startsWith($this->metadata['type'], 'audio/');\n    }\n\n    /**\n     * Get the image's url\n     */\n    public function imageUrl(): string\n    {\n        if ($this->image) {\n            return $this->image->getUrl(128, 80);\n        }\n\n        return Img::crop(128, 80)->url($this->metadata['path']);\n    }\n\n    /**\n     * Get the fontawesome custom icon\n     */\n    public function icon(): string\n    {\n        if (empty($this->metadata['icon'])) {\n            return 'fa-regular fa-link';\n        }\n\n        return (string) $this->metadata['icon'];\n    }\n\n    public function previewIcon(): string\n    {\n        if (! $this->image) {\n            return 'fa-regular fa-file';\n        }\n\n        return match ($this->image->ext) {\n            'pdf' => 'fa-regular fa-file-pdf',\n            'json' => 'fa-regular fa-brackets-curly',\n            'mp3', 'mp4', 'ogg' => 'fa-regular fa-file-music',\n            'xls', 'xlsx' => 'fa-regular fa-file-xls',\n            'csv' => 'fa-regular fa-file-csv',\n            default => 'fa-regular fa-file',\n        };\n    }\n\n    public function getIconAttribute(): mixed\n    {\n        return Arr::get($this->metadata, 'icon');\n    }\n\n    /**\n     * A virtual getter for the image path for the image observer delete loop\n     */\n    public function getImagePathAttribute(): string\n    {\n        if ($this->image && ! $this->image->isUsed()) {\n            return (string) $this->image->path;\n        }\n\n        return (string) $this->metadata['path'];\n    }\n\n    /**\n     * Copy the asset to another target\n     */\n    public function copyTo(Entity $target): bool\n    {\n        $new = $this->replicate(['entity_id']);\n        $new->entity_id = $target->id;\n\n        return $new->save();\n    }\n\n    /**\n     * Get the url's domain (skip the rest)\n     */\n    public function urlDomain(): string\n    {\n        $url = $this->metadata['url'];\n        try {\n            $params = parse_url($url);\n\n            return $params['host'];\n        } catch (Exception $e) {\n            return '';\n        }\n    }\n\n    public function url(): string\n    {\n        if ($this->image_uuid) {\n            return $this->image?->url() ?? '';\n        }\n\n        $path = $this->metadata['path'];\n        $cdn = config('cdn.ugc');\n        if ($cdn) {\n            return $cdn . '/' . $path;\n        }\n\n        return Storage::url($path);\n    }\n\n    /**\n     * A file can be linked to a gallery image, but the target image is hidden from the current user.\n     */\n    public function hiddenImage(): bool\n    {\n        return ! empty($this->image_uuid) && ! $this->image;\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityEventType.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\EntityEventTypes;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass EntityEventType extends Model\n{\n    public $casts = [\n        'id' => EntityEventTypes::class,\n    ];\n\n    public $timestamps = false;\n}\n"
  },
  {
    "path": "app/Models/EntityListingPreference.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\nclass EntityListingPreference extends Model\n{\n    protected $fillable = [\n        'user_id',\n        'campaign_id',\n        'type_id',\n        'visible_columns',\n        'layout',\n        'nested',\n        'per_page',\n    ];\n\n    protected function casts(): array\n    {\n        return [\n            'visible_columns' => 'array',\n            'nested' => 'boolean',\n            'per_page' => 'integer',\n        ];\n    }\n\n    public function user(): BelongsTo\n    {\n        return $this->belongsTo(User::class);\n    }\n\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class);\n    }\n\n    public function entityType(): BelongsTo\n    {\n        return $this->belongsTo(EntityType::class, 'type_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityLocation.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Blameable;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasTimestamps;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $entity_id\n * @property int $location_id\n * @property Entity $entity\n * @property Location $location\n */\nclass EntityLocation extends Model\n{\n    use Blameable;\n    use HasTimestamps;\n\n    protected $fillable = [\n        'entity_id',\n        'location_id',\n    ];\n\n    /**\n     * @return BelongsTo<Location, $this>\n     */\n    public function location(): BelongsTo\n    {\n        return $this->belongsTo(Location::class, 'location_id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo(Entity::class, 'entity_id');\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'location_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityLog.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\MassPrunable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphTo;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class EntityLog\n *\n * @property int $campaign_id\n * @property int $created_by\n * @property int $impersonated_by\n * @property int $action\n * @property null|string|array $changes\n * @property ?User $impersonator\n * @property Campaign $campaign\n * @property Carbon $created_at\n * @property int $parent_id\n * @property string $parent_type\n * @property-read Entity|Post $parent\n */\nclass EntityLog extends Model\n{\n    use HasUser;\n    use MassPrunable;\n\n    public const ACTION_CREATE = 1;\n\n    public const ACTION_UPDATE = 2;\n\n    public const ACTION_DELETE = 3;\n\n    public const ACTION_RESTORE = 4;\n\n    public const ACTION_DELETE_POST = 5;\n\n    public const ACTION_REORDER_POST = 6;\n\n    public const ACTION_CREATE_POST = 7;\n\n    public const ACTION_UPDATE_POST = 8;\n\n    public const ACTION_UPDATE_FAMILY_TREE = 10;\n\n    public $fillable = [\n        'created_by',\n        'impersonated_by',\n        'action',\n        'campaign_id',\n    ];\n\n    public $casts = [\n        'changes' => 'array',\n    ];\n\n    protected array $custom = [\n        'header_uuid' => 'fields.header-image.title',\n        'image_uuid' => 'crud.fields.image',\n        'is_template' => 'entities/actions.archetype.toggle',\n        'is_attributes_private' => 'entities/attributes.fields.is_private',\n    ];\n\n    protected string $userField = 'created_by';\n\n    public function parent(): MorphTo\n    {\n        return $this->morphTo();\n    }\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function impersonator(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'impersonated_by');\n    }\n\n    public function actionCode(): string\n    {\n        if ($this->action == self::ACTION_CREATE) {\n            return 'create';\n        } elseif ($this->action == self::ACTION_UPDATE) {\n            return 'update';\n        } elseif ($this->action == self::ACTION_DELETE) {\n            return 'delete';\n        } elseif ($this->action == self::ACTION_RESTORE) {\n            return 'restore';\n        } elseif ($this->action == self::ACTION_CREATE_POST) {\n            return 'create_post';\n        } elseif ($this->action == self::ACTION_UPDATE_POST) {\n            return 'update_post';\n        } elseif ($this->action == self::ACTION_DELETE_POST) {\n            return 'delete_post';\n        } elseif ($this->action == self::ACTION_REORDER_POST) {\n            return 'reorder_post';\n        } elseif ($this->action == self::ACTION_UPDATE_FAMILY_TREE) {\n            return 'update_tree';\n        }\n\n        return 'unknown';\n    }\n\n    public function actionIcon(): string\n    {\n        if ($this->action == self::ACTION_CREATE || $this->action == self::ACTION_CREATE_POST) {\n            return 'fa-plus';\n        } elseif ($this->action == self::ACTION_UPDATE || $this->action == self::ACTION_UPDATE_POST || $this->action == self::ACTION_UPDATE_FAMILY_TREE) {\n            return 'fa-pencil';\n        } elseif ($this->action == self::ACTION_REORDER_POST) {\n            return 'fa-arrows-rotate';\n        } elseif ($this->action == self::ACTION_DELETE || $this->action == self::ACTION_DELETE_POST) {\n            return 'fa-trash-can';\n        } elseif ($this->action == self::ACTION_RESTORE) {\n            return 'fa-history';\n        }\n\n        return 'fa-question-circle';\n    }\n\n    public function actionBackground(): string\n    {\n        if ($this->action == self::ACTION_CREATE || $this->action == self::ACTION_CREATE_POST) {\n            return 'bg-green-300';\n        } elseif ($this->action == self::ACTION_UPDATE || $this->action == self::ACTION_UPDATE_POST || $this->action == self::ACTION_UPDATE_FAMILY_TREE) {\n            return 'bg-blue-200';\n        } elseif ($this->action == self::ACTION_REORDER_POST) {\n            return 'bg-yellow-300';\n        } elseif ($this->action == self::ACTION_DELETE || $this->action == self::ACTION_DELETE_POST) {\n            return 'bg-red-300';\n        } elseif ($this->action == self::ACTION_RESTORE) {\n            return 'bg-orange-300';\n        }\n\n        return 'bg-gray';\n    }\n\n    /**\n     * @return Builder\n     */\n    public function scopeRecent(Builder $query)\n    {\n        return $query->orderBy('created_at', 'DESC')->orderBy('id', 'DESC');\n    }\n\n    /**\n     * @return Builder\n     */\n    public function scopeAction(Builder $query, int $action)\n    {\n        return $query->where(['action' => $action]);\n    }\n\n    public function isBoolean(string $attribute): bool\n    {\n        return Str::startsWith($attribute, ['has_', 'is_']);\n    }\n\n    /**\n     * Replace the field edited with it's translated name\n     */\n    public function attributeKey(string $transKey, string $attribute): string\n    {\n        $name = Str::beforeLast($attribute, '_id');\n\n        // Entity name\n        $key = 'entities.' . $name;\n        $translation = __($key);\n        if ($key !== $translation && ! is_array($translation)) {\n            return $translation;\n        }\n\n        // Crud field\n        $key = 'crud.fields.' . $name;\n        $translation = __($key);\n        if ($key !== $translation) {\n            return $translation;\n        }\n\n        $key = $transKey . '.fields.' . $name;\n        $translation = __($key);\n        if ($key !== $translation) {\n            return $translation;\n        }\n\n        // Custom mapping\n        if (isset($this->custom[$name])) {\n            return __($this->custom[$name]);\n        }\n\n        if (app()->isProduction()) {\n            return '<i data-key=\"' . $transKey . '\" data-attr=\"' . $name . '\">' . __('crud.users.unknown') . '</i>';\n        }\n\n        return '<i data-key=\"' . $transKey . '\" data-attr=\"' . $name . '\">' . $name . '</i>';\n    }\n\n    /**\n     * Automatically prune old elements from the db\n     */\n    public function prunable(): Builder\n    {\n        $delay = config('entities.logs_delete');\n\n        return static::where('updated_at', '<=', now()->subDays($delay));\n    }\n\n    public function day(): int\n    {\n        return (int) $this->created_at->format('Ymd');\n    }\n\n    public function userLink(): string\n    {\n        if (! $this->user) {\n            return '<i>' . __('crud.users.unknown') . '</i>';\n        }\n\n        return '<strong>' . $this->user->name . '</strong>';\n    }\n\n    public function actions($action): array\n    {\n        if ($action == self::ACTION_CREATE || $action == self::ACTION_CREATE_POST) {\n            return [self::ACTION_CREATE, self::ACTION_CREATE_POST];\n        } elseif ($action == self::ACTION_UPDATE) {\n            return [self::ACTION_UPDATE, self::ACTION_UPDATE_POST, self::ACTION_REORDER_POST, self::ACTION_UPDATE_FAMILY_TREE];\n        } elseif ($action == self::ACTION_DELETE) {\n            return [self::ACTION_DELETE, self::ACTION_DELETE_POST];\n        } elseif ($action == self::ACTION_RESTORE) {\n            return [self::ACTION_RESTORE];\n        } elseif ($action == self::ACTION_REORDER_POST) {\n            return [self::ACTION_REORDER_POST];\n        }\n\n        return [];\n    }\n\n    public function scopeFilter(Builder $builder, array $filters): Builder\n    {\n        $user = Arr::get($filters, 'user');\n        if (! empty($user)) {\n            $builder->where($this->getTable() . '.created_by', (int) $user);\n        }\n        $action = Arr::get($filters, 'action');\n        if (! empty($action)) {\n            $actions = $this->actions($action);\n            $builder->whereIn($this->getTable() . '.action', $actions);\n        }\n        if (Arr::has($filters, 'q')) {\n            $q = mb_trim(Arr::get($filters, 'q'));\n            $builder->whereLike('changes', '%' . $q . '%');\n        }\n\n        return $builder;\n    }\n\n    public function isPost(): bool\n    {\n        return $this->parent_type == Post::class;\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityMention.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Arr;\n\n/**\n * Class EntityMention\n *\n * @property int $entity_id\n * @property ?int $post_id\n * @property ?int $quest_element_id\n * @property ?int $timeline_element_id\n * @property ?int $campaign_id\n * @property int $target_id\n * @property Entity $entity\n * @property Post|null $post\n * @property QuestElement|null $questElement\n * @property TimelineElement|null $timelineElement\n * @property ?Entity $target\n * @property Campaign|null $campaign\n *\n * @method static self|Builder filterValid()\n */\nclass EntityMention extends Model\n{\n    use SortableTrait;\n\n    public $fillable = [\n        'entity_id',\n        'post_id',\n        'timeline_element_id',\n        'quest_element_id',\n        'campaign_id',\n        'target_id',\n    ];\n\n    protected array $sortable = [\n        'name',\n    ];\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function target(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'target_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Post, $this>\n     */\n    public function post(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Post', 'post_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<TimelineElement, $this>\n     */\n    public function timelineElement(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\TimelineElement', 'timeline_element_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<QuestElement, $this>\n     */\n    public function questElement(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\QuestElement', 'quest_element_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Campaign', 'campaign_id', 'id');\n    }\n\n    /**\n     * Determine if the mention goes to a post\n     */\n    public function isPost(): bool\n    {\n        return ! empty($this->post_id);\n    }\n\n    /**\n     * Determine if the mention goes to an entity\n     */\n    public function isEntity(): bool\n    {\n        return ! empty($this->entity_id);\n    }\n\n    /**\n     * Determine if the mention goes to a timeline element\n     */\n    public function isTimelineElement(): bool\n    {\n        return ! empty($this->timeline_element_id);\n    }\n\n    /**\n     * Determine if the mention goes to a quest element\n     */\n    public function isQuestElement(): bool\n    {\n        return ! empty($this->quest_element_id);\n    }\n\n    /**\n     * Determine if the mention goes to a campaign\n     */\n    public function isCampaign(): bool\n    {\n        return ! empty($this->campaign_id);\n    }\n\n    /**\n     * Build the query that will loop on the various mentions to get the total count.\n     * The AclTrait on entities and posts makes sure only visible things get added to the query.\n     */\n    public function scopeFilterValid(Builder $query): Builder\n    {\n        return $query->where(function ($sub) {\n            return $sub\n                ->where(function ($subEnt) {\n                    // @phpstan-ignore-next-line\n                    return $subEnt\n                        ->onEntity()\n                        ->has('entity');\n                })\n                ->orWhere(function ($subPost) {\n                    // @phpstan-ignore-next-line\n                    return $subPost\n                        ->onPost()\n                        ->has('post.entity');\n                })\n                ->orWhere(function ($subQuestElement) {\n                    // @phpstan-ignore-next-line\n                    return $subQuestElement\n                        ->onQuestElement()\n                        ->has('questElement.quest.entity');\n                })\n                ->orWhere(function ($subTimelineElement) {\n                    // @phpstan-ignore-next-line\n                    return $subTimelineElement\n                        ->onTimelineElement()\n                        ->has('timelineElement.timeline.entity');\n                })\n                ->orWhere(function ($subCam) {\n                    // @phpstan-ignore-next-line\n                    return $subCam->onCampaign();\n                });\n        });\n    }\n\n    public function scopeOnEntity(Builder $query): Builder\n    {\n        return $query->where(function ($sub) {\n            $sub->whereNotNull('entity_mentions.entity_id')\n                ->whereNull('entity_mentions.post_id')\n                ->whereNull('entity_mentions.timeline_element_id')\n                ->whereNull('entity_mentions.quest_element_id');\n        });\n    }\n\n    public function scopeOnPost(Builder $query): Builder\n    {\n        return $query->whereNotNull('entity_mentions.post_id');\n    }\n\n    public function scopeOnTimelineElement(Builder $query): Builder\n    {\n        return $query->whereNotNull('entity_mentions.timeline_element_id');\n    }\n\n    public function scopeOnQuestElement(Builder $query): Builder\n    {\n        return $query->whereNotNull('entity_mentions.quest_element_id');\n    }\n\n    public function scopeOnCampaign(Builder $query): Builder\n    {\n        return $query->whereNotNull('entity_mentions.campaign_id');\n    }\n\n    public function scopeDatagridElements(Builder $query, array $options): Builder\n    {\n        $column = Arr::get($options, 'k', 'name');\n        $order = Arr::get($options, 'o', 'ASC');\n        $query->select('entity_mentions.*')\n            ->leftJoin('entities as e', 'e.id', 'entity_mentions.entity_id');\n\n        if ($column == 'name') {\n            $query->orderByRaw('CASE WHEN e.name IS NULL THEN 1 ELSE 0 END');\n            $query->orderBy('e.name', $order);\n        } elseif ($column == 'type') {\n            $query->orderByRaw('CASE WHEN e.type_id IS NULL THEN 1 ELSE 0 END');\n            $query->orderBy('e.type_id', $order);\n        }\n\n        return $query\n            ->orderBy('campaign_id');\n    }\n\n    /**\n     * Todo: move this out of the model\n     */\n    public function getLink(): string\n    {\n        $campaign = CampaignLocalization::getCampaign();\n        if ($this->isQuestElement()) {\n            return route('quests.quest_elements.index', [$campaign, $this->entity->entity_id, '#quest-element-' . $this->quest_element_id]);\n        } elseif ($this->isTimelineElement()) {\n            return route('entities.show', [$campaign, $this->entity, '#timeline-element-' . $this->timeline_element_id]);\n        } elseif ($this->isPost()) {\n            return route('entities.show', [$campaign, $this->entity, '#post-' . $this->post_id]);\n        }\n\n        return '#';\n    }\n\n    /**\n     * Determine if the mention is linked to an entity.\n     * In theory, this is true for everything except a campaign mention, but in practice it's more complicated.\n     */\n    public function hasEntity(): bool\n    {\n        return ! empty($this->entity_id) && ! empty($this->entity);\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'entity_id',\n            'campaign_id',\n            'post_id',\n            'timeline_element_id',\n            'quest_element_id',\n            'target_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityTag.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class EntityTag\n *\n * @property int $entity_id\n * @property int $tag_id\n * @property Tag $tag\n * @property Entity $entity\n */\nclass EntityTag extends Model\n{\n    use HasFactory;\n\n    protected $fillable = [\n        'entity_id',\n        'tag_id',\n    ];\n\n    /**\n     * @return BelongsTo<Tag, $this>\n     */\n    public function tag(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Tag', 'tag_id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id');\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'tag_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityType.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Facades\\Module;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Str;\n\n/**\n * @property int $id\n * @property string $code\n * @property int $campaign_id\n * @property Campaign $campaign\n * @property ?string $singular\n * @property ?string $plural\n * @property ?string $icon\n * @property bool|int $is_special\n * @property bool|int $is_enabled\n * @property AttributeTemplate[]|Collection $attributeTemplates\n * @property Bookmark[]|Collection $bookmarks\n * @property Entity[]|Collection $entities\n * @property CampaignDashboardWidget[]|Collection $widgets\n *\n * @method static self|Builder enabled()\n * @method static self|Builder default()\n * @method static self|Builder exclude(array $ids)\n * @method static self|Builder inCampaign(Campaign|int $campaign)\n */\nclass EntityType extends Model\n{\n    use Sanitizable;\n\n    protected array $sanitizable = ['singular', 'plural'];\n\n    protected string $cachedPluralCode;\n\n    public $fillable = [\n        'id',\n        'code',\n        'position',\n        'is_enabled',\n        'is_special',\n    ];\n\n    public function scopeInCampaign(Builder $query, Campaign|int $campaign): Builder\n    {\n        if ($campaign instanceof Campaign) {\n            $campaign = $campaign->id;\n        }\n\n        return $query->where(function ($sub) use ($campaign) {\n            return $sub->where('campaign_id', $campaign)\n                ->orWhereNull('campaign_id');\n        });\n    }\n\n    public function scopeDefault(Builder $query): Builder\n    {\n        return $query->whereNull('campaign_id');\n    }\n\n    public function scopeEnabled(Builder $query): Builder\n    {\n        return $query\n            ->where(['is_enabled' => true])\n            ->orderBy('position');\n    }\n\n    public function scopeExclude(Builder $query, array $exclude): Builder\n    {\n        return $query->whereNotIn('id', $exclude);\n    }\n\n    /**\n     * @return HasMany<Entity, $this>\n     */\n    public function entities(): HasMany\n    {\n        return $this->hasMany(Entity::class, 'type_id');\n    }\n\n    /**\n     * @return HasMany<AttributeTemplate, $this>\n     */\n    public function attributeTemplates(): HasMany\n    {\n        return $this->hasMany(AttributeTemplate::class, 'entity_type_id');\n    }\n\n    /**\n     * @return HasMany<Bookmark, $this>\n     */\n    public function bookmarks(): HasMany\n    {\n        return $this->hasMany(Bookmark::class, 'entity_type_id');\n    }\n\n    /**\n     * @return HasMany<CampaignDashboardWidget, $this>\n     */\n    public function widgets(): HasMany\n    {\n        return $this->hasMany(CampaignDashboardWidget::class, 'entity_type_id');\n    }\n\n    /**\n     * Get the class model of the entity type\n     */\n    public function getClass(): MiscModel|Model\n    {\n        $className = 'App\\Models\\\\' . Str::studly($this->code);\n\n        return app()->make($className);\n    }\n\n    /**\n     * Freaking hate PHPStan\n     */\n    public function getMiscClass(): MiscModel\n    {\n        $className = 'App\\Models\\\\' . Str::studly($this->code);\n\n        return app()->make($className);\n    }\n\n    /**\n     * Get the translated name of the entity\n     */\n    public function name(): string\n    {\n        if (! empty($this->singular)) {\n            return $this->singular;\n        }\n\n        return Module::singular($this->id, __('entities.' . $this->code));\n    }\n\n    /**\n     * Get the translated name of the entity\n     */\n    public function plural(): string\n    {\n        // Custom module always uses the defined plural\n        if (! empty($this->plural)) {\n            return $this->plural;\n        }\n\n        return Module::plural($this->id, $this->defaultPluralKey());\n    }\n\n    public function defaultPluralKey(): string\n    {\n        return 'entities.' . $this->pluralCode();\n    }\n\n    /**\n     * Get the translated name of the entity\n     */\n    public function icon(): string\n    {\n        // Custom module? Always use the icon\n        if (! empty($this->campaign_id)) {\n            return $this->icon;\n        }\n\n        return Module::duoIcon($this);\n    }\n\n    /**\n     * Get the translated name of the entity\n     */\n    public function pluralCode(): string\n    {\n        if (isset($this->cachedPluralCode)) {\n            return $this->cachedPluralCode;\n        }\n\n        return $this->cachedPluralCode = Str::plural($this->code);\n    }\n\n    public function getNameAttribute(): string\n    {\n        return $this->name();\n    }\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class);\n    }\n\n    public function isCustom(): bool\n    {\n        return (bool) $this->is_special;\n    }\n\n    public function isStandard(): bool\n    {\n        return ! $this->isCustom();\n    }\n\n    public function isEnabled(): bool\n    {\n        return (bool) $this->is_enabled;\n    }\n\n    public function isBookmark(): bool\n    {\n        return $this->id == config('entities.ids.bookmark');\n    }\n\n    public function isAttributeTemplate(): bool\n    {\n        return $this->id == config('entities.ids.attribute_template');\n    }\n\n    public function isCharacter(): bool\n    {\n        return $this->id == config('entities.ids.character');\n    }\n\n    public function isLocation(): bool\n    {\n        return $this->id == config('entities.ids.location');\n    }\n\n    public function createRoute(Campaign $campaign, array $params = []): string\n    {\n        if ($this->isCustom()) {\n            return route('entities.create', [$campaign, $this] + $params);\n        }\n\n        return route($this->pluralCode() . '.create', [$campaign] + $params);\n    }\n\n    public function isDeprecated(): bool\n    {\n        return in_array($this->id, [config('entities.ids.conversation'), config('entities.ids.dice_roll')]);\n    }\n\n    /**\n     * For some weird reason, bookmarks are an entity type, despite bookmarks not being entities\n     */\n    public function hasEntity(): bool\n    {\n        return $this->code !== 'bookmark';\n    }\n\n    public function isNested(): bool\n    {\n        return ! in_array($this->id, [\n            config('entities.ids.character'),\n            config('entities.ids.conversation'),\n            config('entities.ids.dice_roll'),\n        ]);\n    }\n\n    public function hasTable(): bool\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Models/EntityUser.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\MassPrunable;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n\n/**\n * Class EntityUser\n *\n * @property int $id\n * @property int $entity_id\n * @property int $campaign_id\n * @property int $post_id\n * @property int $timeline_element_id\n * @property int $quest_element_id\n * @property int $type_id\n * @property Entity $entity\n *\n * @method static self|Builder keepAlive()\n * @method static self|Builder userID(int $userID)\n * @method static self|Builder campaignID(int $campaignID)\n */\nclass EntityUser extends Pivot\n{\n    use HasUser;\n    use MassPrunable;\n\n    public const int TYPE_KEEPALIVE = 1;\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo(Entity::class, 'entity_id');\n    }\n\n    /**\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function campaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class, 'campaign_id');\n    }\n\n    /**\n     * @return BelongsTo<Post, $this>\n     */\n    public function post(): BelongsTo\n    {\n        return $this->belongsTo(Post::class, 'post_id');\n    }\n\n    /**\n     * @return BelongsTo<TimelineElement, $this>\n     */\n    public function timelineElement(): BelongsTo\n    {\n        return $this->belongsTo(TimelineElement::class, 'timeline_element_id');\n    }\n\n    /**\n     * @return BelongsTo<QuestElement, $this>\n     */\n    public function questElement(): BelongsTo\n    {\n        return $this->belongsTo(QuestElement::class, 'quest_element_id');\n    }\n\n    public function scopeKeepAlive(Builder $query): Builder\n    {\n        return $query->where('type_id', self::TYPE_KEEPALIVE);\n    }\n\n    public function scopeUserID(Builder $query, int $userID): Builder\n    {\n        return $query->where('user_id', $userID);\n    }\n\n    public function scopeCampaignID(Builder $query, int $campaignID): Builder\n    {\n        return $query->where('campaign_id', $campaignID);\n    }\n\n    /**\n     * Automatically prune old elements from the db\n     */\n    public function prunable(): Builder\n    {\n        return static::keepAlive()\n            ->where('created_at', '<=', now()->subDay());\n    }\n}\n"
  },
  {
    "path": "app/Models/Event.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Event\n *\n * @property string $date\n */\nclass Event extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'campaign_id',\n        'name',\n        'date',\n        'is_private',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'date',\n        'type',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'date',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'date',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'date',\n    ];\n\n    public function scopeFilteredEvents(Builder $query): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $query\n            ->select(['events.id', 'events.name', 'events.date', 'events.is_private'])\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->with([\n                'entity.locations', 'entity.locations.entity',\n                'entity', 'entity.parent', 'entity.tags', 'entity.tags.entity', 'entity.image'])\n            ->has('entity');\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.event');\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if (! empty($this->type)) {\n            return true;\n        }\n\n        if ($this->entity->locations->isNotEmpty() || ! empty($this->entity->calendarReminder())) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'date',\n            'locations',\n        ];\n    }\n\n    /**\n     * Grid mode sortable fields\n     */\n    public function datagridSortableColumns(): array\n    {\n        $columns = [\n            'name' => __('crud.fields.name'),\n            'type' => __('crud.fields.type'),\n            'date' => __('events.fields.date'),\n        ];\n\n        if (auth()->check() && auth()->user()->isAdmin()) {\n            $columns['is_private'] = __('crud.fields.is_private');\n        }\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Models/Family.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\FilterOption;\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasLocation;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Family\n *\n * @property bool|int $is_extinct\n * @property Collection|Character[] $members\n * @property ?FamilyTree $familyTree\n * @property Collection|CharacterFamily[] $pitvotMembers\n */\nclass Family extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use HasLocation;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'campaign_id',\n        'name',\n        'location_id',\n        'is_private',\n        'is_extinct',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'location.name',\n        'is_extinct',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'location.name',\n        'is_extinct',\n        'type',\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [\n        'pivotMembers',\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'location_id',\n        'is_extinct',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'location_id',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * Filter for family with specific member\n     */\n    public function scopeMember(Builder $query, ?string $value, FilterOption $filter): Builder\n    {\n        if ($filter === FilterOption::NONE) {\n            // If called with a param, it's being called too early and will be called later in the process\n            if (! empty($value)) {\n                return $query;\n            }\n            $query\n                ->select($this->getTable() . '.*')\n                ->leftJoin('character_family as memb', function ($join) {\n                    $join->on('memb.family_id', '=', $this->getTable() . '.id');\n                })\n                ->where('memb.character_id', null);\n\n            if (auth()->guest() || ! auth()->user()->isAdmin()) {\n                $query->where('memb.is_private', 0);\n            }\n\n            return $query;\n        } elseif ($filter === FilterOption::EXCLUDE) {\n            return $query\n                ->whereRaw('(select count(*) from character_family as memb where memb.family_id = ' .\n                    $this->getTable() . '.id and memb.family_id = ' . ((int) $value) . ' ' . $this->subPrivacy('and memb.is_private') . ') = 0');\n        }\n\n        $ids = [$value];\n        $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin('character_family as memb', function ($join) {\n                $join->on('memb.family_id', '=', $this->getTable() . '.id');\n            })\n            ->whereIn('memb.character_id', $ids);\n\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->where('memb.is_private', 0);\n        }\n\n        return $query->distinct();\n    }\n\n    /**\n     * @return HasOne<FamilyTree, $this>\n     */\n    public function familyTree(): HasOne\n    {\n        return $this->hasOne(FamilyTree::class);\n    }\n\n    public function members(): BelongsToMany\n    {\n        $query = $this->belongsToMany('App\\Models\\Character', 'character_family');\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->wherePivot('is_private', false);\n        }\n\n        return $query;\n    }\n\n    /**\n     * @return HasMany<CharacterFamily, $this>\n     */\n    public function pivotMembers(): HasMany\n    {\n        return $this->hasMany(CharacterFamily::class)\n            ->with(['character', 'character.entity']);\n    }\n\n    /**\n     * All members of a family and descendants\n     */\n    public function allMembers()\n    {\n        $familyId = [$this->id];\n        foreach ($this->entity->descendants as $descendant) {\n            $familyId[] = $descendant->entity_id;\n        }\n\n        $query = Character::select('characters.*')\n            ->distinct('characters.id')\n            ->leftJoin('character_family as cf', function ($join) {\n                $join->on('cf.character_id', '=', 'characters.id');\n            })\n            ->has('entity')\n            ->whereIn('cf.family_id', $familyId);\n\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->where('cf.is_private', false);\n        }\n\n        return $query;\n    }\n\n    /**\n     * Get all characters in the family and descendants\n     */\n    public function allCharacterFamilies()\n    {\n        $familyIDs = [$this->id];\n        foreach ($this->entity->descendants as $descendant) {\n            $familyIDs[] = $descendant->entity_id;\n        }\n\n        return CharacterFamily::groupBy('character_id')\n            ->distinct('character_id')\n            ->whereIn('character_family.family_id', $familyIDs)\n            ->with('character');\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        $this->members()->detach();\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.family');\n    }\n\n    /**\n     * Determine if the model is extinct.\n     */\n    public function isExtinct(): bool\n    {\n        return (bool) $this->is_extinct;\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        // Test text fields first\n        if (! empty($this->type)) {\n            return true;\n        }\n        if (! empty($this->entity->parent)) {\n            return true;\n        }\n        if ($this->entity->elapsedEvents->isNotEmpty()) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'location_id',\n            'member_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/FamilyTree.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Blameable;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $family_id\n * @property array $config\n */\nclass FamilyTree extends Model\n{\n    use Blameable;\n    use HasFactory;\n\n    public $casts = [\n        'config' => 'array',\n    ];\n\n    /**\n     * @return BelongsTo<Family, $this>\n     */\n    public function family(): BelongsTo\n    {\n        return $this->belongsTo(Family::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Faq.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Orderable;\nuse App\\Models\\Concerns\\Searchable;\nuse App\\Models\\Concerns\\Sortable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class Faq\n *\n * @property int $id\n * @property int $category_id\n * @property string $locale\n * @property string $question\n * @property string $answer\n * @property FaqTranslation[]|Collection $translations\n * @property FaqTranslation|null $localeTranslation\n */\nclass Faq extends Model\n{\n    use Orderable;\n    use Searchable;\n    use Sortable;\n\n    public $table = 'faq';\n\n    public $searchableColumns = ['question', 'answer'];\n\n    public $sortableColumns = [];\n\n    public $fillable = [\n        'faq_category_id',\n        'question',\n        'answer',\n        'order',\n        'is_visible',\n        'locale',\n    ];\n\n    /** @var null|string Cached slug */\n    protected $cachedSlug = null;\n\n    public function scopeVisible(Builder $query, bool $visible = true): Builder\n    {\n        return $query->where('is_visible', $visible);\n    }\n\n    public function scopeLocale(Builder $query, string $locale = 'en'): Builder\n    {\n        return $query->where('locale', $locale);\n    }\n\n    /**\n     * @param  string  $order\n     */\n    public function scopeOrdered(Builder $query, $order = 'ASC'): Builder\n    {\n        return $query->orderBy('order', $order);\n    }\n\n    /**\n     * @return BelongsTo<FaqCategory, $this>\n     */\n    public function category(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\FaqCategory', 'faq_category_id', 'id');\n    }\n\n    /**\n     * @return HasMany<FaqTranslation, $this>\n     */\n    public function translations(): HasMany\n    {\n        return $this->hasMany(FaqTranslation::class);\n    }\n\n    public function localeTranslation()\n    {\n        return $this->hasOne(FaqTranslation::class, 'faq_id', 'id')\n            ->where('locale', app()->getLocale());\n    }\n\n    public function slug(): string\n    {\n        if ($this->cachedSlug !== null) {\n            return $this->cachedSlug;\n        }\n\n        return $this->cachedSlug = Str::slug($this->question);\n    }\n\n    /**\n     * Get the question\n     */\n    public function question(): string\n    {\n        if ($this->localeTranslation && ! empty($this->localeTranslation->question)) {\n            return $this->localeTranslation->question;\n        }\n\n        return $this->question;\n    }\n\n    /**\n     * Get the answer\n     */\n    public function answer(): string\n    {\n        if ($this->localeTranslation && ! empty($this->localeTranslation->answer)) {\n            return $this->localeTranslation->answer;\n        }\n\n        return $this->answer;\n    }\n\n    public function translatedQuestion(string $locale): string\n    {\n        $translation = $this->translations->where('locale', $locale)->first();\n        if (! $translation) {\n            return '';\n        }\n\n        return $translation->question;\n    }\n\n    public function translatedAnswer(string $locale): string\n    {\n        $translation = $this->translations->where('locale', $locale)->first();\n        if (! $translation) {\n            return '';\n        }\n\n        return $translation->answer;\n    }\n}\n"
  },
  {
    "path": "app/Models/FaqCategory.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Searchable;\nuse App\\Models\\Concerns\\Sortable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\n/**\n * Class FaqCategory\n *\n *\n * @property int $id\n * @property string $locale\n * @property string $title\n * @property int $order\n * @property bool|int $is_visible\n * @property Faq[]|Collection $faqs\n */\nclass FaqCategory extends Model\n{\n    use Searchable;\n    use Sortable;\n\n    public $searchableColumns = ['name'];\n\n    public $sortableColumns = [];\n\n    public $fillable = [\n        'title',\n        'order',\n        'is_visible',\n        'locale',\n    ];\n\n    protected $locale;\n\n    /**\n     * @param  bool  $visible\n     */\n    public function scopeVisible(Builder $query, $visible = true)\n    {\n        return $query->where('is_visible', $visible);\n    }\n\n    /**\n     * @param  string  $locale\n     */\n    public function scopeLocale(Builder $query, $locale = 'en')\n    {\n        return $query->where('locale', $locale);\n    }\n\n    /**\n     * @param  string  $order\n     * @return Builder\n     */\n    public function scopeOrdered(Builder $query, $order = 'ASC')\n    {\n        return $query->orderBy('order', $order);\n    }\n\n    /**\n     * @return HasMany<Faq, $this>\n     */\n    public function faqs(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Faq', 'faq_category_id', 'id');\n    }\n\n    /**\n     * @return string\n     */\n    public function getNameAttribute()\n    {\n        return $this->title;\n    }\n\n    /**\n     * @return Faq[]|Collection\n     */\n    public function sortedFaqs()\n    {\n        return $this->faqs\n            ->where('is_visible', true)\n            ->sortBy('order');\n    }\n}\n"
  },
  {
    "path": "app/Models/FaqTranslation.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class Faq\n *\n * @property int $id\n * @property int $faq_id\n * @property string $locale\n * @property string $question\n * @property string $answer\n * @property Faq $faq\n */\nclass FaqTranslation extends Model\n{\n    // public $table = 'faq_translations';\n\n    public $fillable = [\n        'faq_id',\n        'question',\n        'answer',\n        'locale',\n    ];\n\n    /**\n     * @return BelongsTo<Faq, $this>\n     */\n    public function faq(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Faq', 'faq_id', 'id');\n    }\n\n    public function scopeLocale(Builder $query, string $locale = 'en'): Builder\n    {\n        return $query->where('locale', $locale);\n    }\n\n    public function scopeFaqID(Builder $query, int $faq): Builder\n    {\n        return $query->where('faq_id', $faq);\n    }\n}\n"
  },
  {
    "path": "app/Models/Feature.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Observers\\FeatureObserver;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\nuse Illuminate\\Support\\Str;\n\n/**\n * @property int $id\n * @property string $name\n * @property string $description\n * @property \\App\\Enums\\FeatureStatus $status_id\n * @property int $category_id\n * @property ?int $created_by\n * @property int $upvote_count\n * @property FeatureCategory $category\n * @property FeatureStatus $status\n *\n * @method static self|Builder visible()\n * @method static self|Builder approved()\n * @method static self|Builder search(string $search)\n */\n#[ObservedBy([FeatureObserver::class])]\nclass Feature extends Model\n{\n    use HasUser;\n    use Sanitizable;\n\n    public $fillable = [\n        'name',\n        'description',\n        'meta',\n    ];\n\n    protected string $userField = 'created_by';\n\n    protected $casts = [\n        'meta' => 'array',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'description',\n    ];\n\n    /**\n     * @return BelongsTo<FeatureCategory, $this>\n     */\n    public function category(): BelongsTo\n    {\n        return $this->belongsTo(FeatureCategory::class);\n    }\n\n    /**\n     * @return BelongsTo<FeatureStatus, $this>\n     */\n    public function status(): BelongsTo\n    {\n        return $this->belongsTo(FeatureStatus::class);\n    }\n\n    /**\n     * @return HasOne<FeatureVote, $this>\n     */\n    public function uservote(): HasOne\n    {\n        return $this->hasOne(FeatureVote::class)\n            ->where('user_id', auth()->user()->id);\n    }\n\n    /**\n     * @return HasMany<FeatureFile, $this>\n     */\n    public function featureFiles(): HasMany\n    {\n        return $this->hasMany(FeatureFile::class, 'feature_id', 'id');\n    }\n\n    public function scopeApproved(Builder $builder): Builder\n    {\n        return $builder->whereIn('status_id', [\\App\\Enums\\FeatureStatus::Approved])\n            ->orderBy('upvote_count', 'DESC');\n    }\n\n    public function scopeVisible(Builder $builder): Builder\n    {\n        $statuses = [\n            \\App\\Enums\\FeatureStatus::Approved,\n            \\App\\Enums\\FeatureStatus::Later,\n            \\App\\Enums\\FeatureStatus::Next,\n            \\App\\Enums\\FeatureStatus::Now,\n            \\App\\Enums\\FeatureStatus::Done,\n        ];\n\n        return $builder->whereIn('status_id', $statuses)\n            ->orderBy('upvote_count', 'DESC');\n    }\n\n    public function scopeSearch(Builder $builder, string $search): Builder\n    {\n        if (empty($search) | mb_strlen($search) < 3) {\n            return $builder;\n        }\n\n        return $builder->where('name', 'like', '%' . $search . '%');\n    }\n\n    public function isUpvoted(): bool\n    {\n        if (auth()->guest()) {\n            return false;\n        }\n\n        return auth()->user()->upvotes()->forFeature($this)->count() === 1;\n    }\n\n    public function cleanDescription(): string\n    {\n        if (Str::startsWith($this->description, '<p>')) {\n            return $this->description;\n        }\n\n        return '<p>' . nl2br($this->description) . '</p>';\n    }\n}\n"
  },
  {
    "path": "app/Models/FeatureCategory.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\FeatureStatus;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\n/**\n * @property int $id\n * @property string $name\n */\nclass FeatureCategory extends Model\n{\n    /**\n     * @return HasMany<Feature, $this>\n     */\n    public function features(): HasMany\n    {\n        return $this->hasMany(Feature::class, 'category_id', 'id');\n    }\n\n    public function progress(): HasMany\n    {\n        return $this->features()\n            ->whereIn('features.status_id', [\n                FeatureStatus::Later, FeatureStatus::Next, FeatureStatus::Now,\n            ]);\n    }\n\n    public function done(): HasMany\n    {\n        return $this->features()->where('status_id', FeatureStatus::Done)->orderBy('updated_at', 'DESC');\n    }\n\n    public function now(): HasMany\n    {\n        return $this->features()->where('status_id', FeatureStatus::Now);\n    }\n\n    public function next(): HasMany\n    {\n        return $this->features()->where('status_id', FeatureStatus::Next);\n    }\n\n    public function later(): HasMany\n    {\n        return $this->features()->where('status_id', FeatureStatus::Later);\n    }\n\n    public function nothingPlanned(): bool\n    {\n        return $this->now->count() + $this->later->count() + $this->next->count() === 0;\n    }\n\n    public function nothingDone(): bool\n    {\n        return $this->done->count() === 0;\n    }\n}\n"
  },
  {
    "path": "app/Models/FeatureFile.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $id\n * @property int $feature_id\n * @property string $path\n * @property Feature $feature\n */\nclass FeatureFile extends Model\n{\n    public $fillable = [\n        'feature_id',\n        'path',\n    ];\n\n    /**\n     * @return BelongsTo<Feature, $this>\n     */\n    public function feature(): BelongsTo\n    {\n        return $this->belongsTo(Feature::class, 'feature_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/FeatureStatus.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\n/**\n * @property int $id\n * @property string $name\n */\nclass FeatureStatus extends Model\n{\n    /**\n     * @return HasMany<Feature, $this>\n     */\n    public function features(): HasMany\n    {\n        return $this->hasMany(Feature::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/FeatureUpvote.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $id\n * @property int $feature_id\n * @property Feature $feature\n */\nclass FeatureUpvote extends Model\n{\n    use HasUser;\n\n    /**\n     * @return BelongsTo<Feature, $this>\n     */\n    public function feature(): BelongsTo\n    {\n        return $this->belongsTo(Feature::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/FeatureVote.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $id\n * @property int $feature_id\n * @property Feature $feature\n *\n * @method static self|Builder forFeature(Feature $feature)\n */\nclass FeatureVote extends Model\n{\n    use HasUser;\n\n    public $table = 'feature_upvotes';\n\n    /**\n     * @return BelongsTo<Feature, $this>\n     */\n    public function feature(): BelongsTo\n    {\n        return $this->belongsTo(Feature::class);\n    }\n\n    public function scopeForFeature(Builder $query, Feature $feature): Builder\n    {\n        return $query->where('feature_id', $feature->id);\n    }\n}\n"
  },
  {
    "path": "app/Models/GameSystem.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\n/**\n * @property int $id\n * @property string $name\n */\nclass GameSystem extends Model\n{\n    /**\n     * @return HasMany<CampaignSystem, $this>\n     */\n    public function campaignSystem(): HasMany\n    {\n        return $this->hasMany(CampaignSystem::class, 'system_id', 'id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Genre.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property string $slug\n */\nclass Genre extends Model\n{\n    public $fillable = [\n        'slug',\n        'campaign_count',\n    ];\n}\n"
  },
  {
    "path": "app/Models/Image.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\Img;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\LastSync;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Traits\\ExportableTrait;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUuids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Storage;\n\n/**\n * Class Image\n *\n * @property string $id\n * @property string $name\n * @property string $ext\n * @property int $size\n * @property ?int $focus_x\n * @property ?int $focus_y\n * @property ?string $folder_id\n * @property bool|int $is_default\n * @property bool|int $is_folder\n * @property Carbon $created_at\n * @property Carbon $updated_at\n * @property Image $imageFolder\n * @property Image[] $folders\n * @property Image[] $images\n * @property Entity[] $entities\n * @property Collection|ImageMention[] $mentions\n * @property Collection|EntityAsset[] $entityAssets\n * @property MapLayer[] $mapLayers\n * @property Inventory[] $inventories\n * @property Entity[] $headers\n * @property string $path\n * @property string $file\n * @property string $folder\n * @property int $_usageCount\n *\n * @method static Builder|self acl(bool $browse)\n * @method static Builder|self named(string|null $term)\n * @method static Builder|self imageFolder(string|null $folder)\n * @method static Builder|self search(?string $folder, ?string $term)\n */\nclass Image extends Model\n{\n    use Blameable;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasUser;\n    use HasUuids;\n    use HasVisibility;\n    use LastSync;\n    use Sanitizable;\n\n    public $fillable = [\n        'name',\n        'is_folder',\n        'folder_id',\n        'visibility_id',\n        'focus_x',\n        'focus_y',\n    ];\n\n    public $casts = [\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected string $userField = 'created_by';\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * @return BelongsTo<Image, $this>\n     */\n    public function imageFolder(): BelongsTo\n    {\n        return $this->belongsTo(Image::class, 'folder_id', 'id');\n    }\n\n    /**\n     * @return HasMany<Image, $this>\n     */\n    public function images(): HasMany\n    {\n        return $this->hasMany(Image::class, 'folder_id', 'id');\n    }\n\n    /**\n     * @return HasMany<Image, $this>\n     */\n    public function folders(): HasMany\n    {\n        return $this->hasMany(Image::class, 'folder_id', 'id')\n            ->where('is_folder', true);\n    }\n\n    /**\n     * @return HasMany<Entity, $this>\n     */\n    public function entities(): HasMany\n    {\n        return $this->hasMany(Entity::class, 'image_uuid', 'id');\n    }\n\n    /**\n     * @return HasMany<MapLayer, $this>\n     */\n    public function mapLayers(): HasMany\n    {\n        return $this->hasMany(MapLayer::class, 'image_uuid', 'id');\n    }\n\n    /**\n     * @return HasMany<Inventory, $this>\n     */\n    public function inventories(): HasMany\n    {\n        return $this->hasMany(Inventory::class, 'image_uuid', 'id');\n    }\n\n    /**\n     * @return HasMany<EntityAsset, $this>\n     */\n    public function entityAssets(): HasMany\n    {\n        return $this->hasMany(EntityAsset::class, 'image_uuid', 'id')\n            ->with('entity')\n            ->has('entity');\n    }\n\n    /**\n     * @return HasMany<Entity, $this>\n     */\n    public function headers(): HasMany\n    {\n        return $this->hasMany(Entity::class, 'header_uuid', 'id');\n    }\n\n    /**\n     * @return HasMany<ImageMention, $this>\n     */\n    public function mentions(): HasMany\n    {\n        return $this->hasMany(ImageMention::class, 'image_id', 'id')\n            ->with('entity')\n            ->with('post')\n            ->has('entity');\n    }\n\n    public function inEntities(): array\n    {\n        $entities = [];\n        foreach ($this->entities as $entity) {\n            if (isset($entities[$entity->id])) {\n                continue;\n            }\n            $entities[$entity->id] = $entity;\n        }\n        foreach ($this->headers as $entity) {\n            if (isset($entities[$entity->id])) {\n                continue;\n            }\n            $entities[$entity->id] = $entity;\n        }\n        foreach ($this->entityAssets as $asset) {\n            if (isset($entities[$asset->entity->id])) {\n                continue;\n            }\n            $entities[$asset->entity->id] = $asset->entity;\n        }\n\n        return $entities;\n    }\n\n    public function isUsed(): bool\n    {\n        $entities = count($this->inEntities());\n        $mentions = $this->mentions()->count();\n        $layers = $this->mapLayers()->count();\n        $inventories = $this->inventories()->count();\n\n        return $entities || $mentions || $layers || $inventories;\n    }\n\n    public function inEntitiesCount(): int\n    {\n        if (isset($this->_usageCount)) {\n            return $this->_usageCount;\n        }\n\n        return $this->_usageCount = count($this->inEntities());\n    }\n\n    /**\n     * @return bool\n     */\n    public function getIncrementing()\n    {\n        return false;\n    }\n\n    /**\n     * @return string\n     */\n    public function getKeyType()\n    {\n        return 'string';\n    }\n\n    public function getPathAttribute(): string\n    {\n        return $this->folder . '/' . $this->file;\n    }\n\n    public function getFileAttribute(): string\n    {\n        return $this->id . '.' . $this->ext;\n    }\n\n    public function getFolderAttribute(): string\n    {\n        return 'campaigns/' . $this->campaign_id;\n    }\n\n    public function niceSize(): string\n    {\n        if ($this->size > 1000) {\n            return round($this->size / 1024, 2) . ' MB';\n        }\n\n        return $this->size . ' KB';\n    }\n\n    public function scopeImageFolder(Builder $query, ?string $folder = null): Builder\n    {\n        if (empty($folder)) {\n            return $query->whereNull('folder_id');\n        }\n\n        return $query->where('folder_id', $folder);\n    }\n\n    public function scopeDefaultOrder(Builder $query): Builder\n    {\n        return $query\n            ->orderBy('is_folder', 'desc')\n            ->orderBy('updated_at', 'desc')\n            ->orderBy('name', 'asc');\n    }\n\n    public function scopeSortOrder(Builder $query, string $sort = 'asc'): Builder\n    {\n        return $query\n            ->orderBy('is_folder', 'desc')\n            ->orderBy('name', $sort)\n            ->orderBy('updated_at', 'desc');\n    }\n\n    public function scopeFolders(Builder $query): Builder\n    {\n        return $query\n            ->where('is_folder', true)\n            ->orderBy('name', 'asc');\n    }\n\n    public function scopeAcl(Builder $query, bool $browse): Builder\n    {\n        if (! $browse) {\n            return $query->where('created_by', auth()->user()->id);\n        }\n\n        return $query;\n    }\n\n    public function scopeNamed(Builder $query, ?string $term): Builder\n    {\n        if (empty($term)) {\n            return $query;\n        }\n\n        return $query->where($this->getTable() . '.name', 'like', '%' . $term . '%');\n    }\n\n    public function scopeSearch(Builder $query, ?string $folder, ?string $term): Builder\n    {\n        if (empty($term)) {\n            // @phpstan-ignore-next-line\n            return $query->imageFolder($folder);\n        }\n\n        // @phpstan-ignore-next-line\n        return $query->named($term);\n    }\n\n    public function hasNoFolders(): bool\n    {\n        return $this->images()->where('is_folder', '1')->count() == 0;\n    }\n\n    public function getImagePath($width = 40, $height = 40): string\n    {\n        return Img::resetCrop()->crop($width, $height)->url($this->path);\n    }\n\n    public function isFolder(): bool\n    {\n        return (bool) $this->is_folder;\n    }\n\n    public function isFont(): bool\n    {\n        return in_array($this->ext, ['woff', 'woff2']);\n    }\n\n    public function hasThumbnail(): bool\n    {\n        return in_array($this->ext, ['jpg', 'png', 'jpeg', 'gif', 'webp']);\n    }\n\n    public function getUrl(?int $sizeX = null, ?int $sizeY = null): string\n    {\n        if ($this->isSvg()) {\n            return $this->url();\n        }\n        Img::reset();\n\n        if (! $sizeY && $sizeX) {\n            $sizeY = $sizeX;\n        } elseif (! $sizeX && $sizeY) {\n            $sizeX = $sizeY;\n        }\n        if ($sizeX && $sizeY) {\n            if (! $this->focus_x && ! $this->focus_y) {\n                return Img::crop($sizeX, $sizeY)->url($this->path);\n            }\n\n            return Img::focus($this->focus_x, $this->focus_y)->crop($sizeX, $sizeY)->url($this->path);\n        }\n\n        if ($this->focus_x && $this->focus_y) {\n            return Img::focus($this->focus_x, $this->focus_y)->url($this->path);\n        }\n\n        return Img::url($this->path);\n    }\n\n    public function isSvg(): bool\n    {\n        return $this->ext == 'svg';\n    }\n\n    public function url(): string\n    {\n        $path = $this->path;\n        $cdn = config('cdn.ugc');\n        if ($cdn) {\n            return $cdn . '/' . $path;\n        }\n\n        return Storage::url($path);\n    }\n}\n"
  },
  {
    "path": "app/Models/ImageMention.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class ImageMention\n *\n * @property string $image_id\n * @property int $post_id\n * @property int $entity_id\n * @property Entity $entity\n * @property Post $post\n * @property Entity $target\n *\n * @method static self|Builder prepareCount()\n */\nclass ImageMention extends Model\n{\n    use SortableTrait;\n\n    public $fillable = [\n        'entity_id',\n        'image_id',\n        'post_id',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n    ];\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Post, $this>\n     */\n    public function post(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Post', 'post_id', 'id');\n    }\n\n    /**\n     * Determine if the mention goes to a post\n     */\n    public function isPost(): bool\n    {\n        return ! empty($this->post_id);\n    }\n\n    /**\n     * Build the query that will loop on the various mentions to get the total count.\n     * The AclTrait on entities and posts makes sure only visible things get added to the query.\n     */\n    public function scopePrepareCount(Builder $query): Builder\n    {\n        return $query->where(function ($sub) {\n            return $sub\n                ->where(function ($subEnt) {\n                    // @phpstan-ignore-next-line\n                    return $subEnt\n                        ->entity()\n                        ->has('entity');\n                })\n                ->orWhere(function ($subPost) {\n                    // @phpstan-ignore-next-line\n                    return $subPost\n                        ->post()\n                        ->has('post.entity');\n                });\n        });\n    }\n\n    public function scopeEntity(Builder $query): Builder\n    {\n        return $query->whereNotNull('image_mentions.entity_id');\n    }\n\n    public function scopePost(Builder $query): Builder\n    {\n        return $query->whereNotNull('image_mentions.post_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Inventory.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\n\n/**\n * Class Inventory\n *\n * @property int $entity_id\n * @property ?int $item_id\n * @property string $name\n * @property int $amount\n * @property string $position\n * @property string $description\n * @property ?string $image_uuid\n * @property bool|int $is_equipped\n * @property bool|int $copy_item_entry\n * @property ?Item $item\n * @property ?Entity $entity\n * @property ?Image $image\n */\nclass Inventory extends Model\n{\n    use Blameable;\n    use HasVisibility;\n    use Sanitizable;\n\n    /**\n     * Fillable fields\n     */\n    public $fillable = [\n        'entity_id',\n        'item_id',\n        'name',\n        'amount',\n        'position',\n        'description',\n        'visibility_id',\n        'created_by',\n        'is_equipped',\n        'copy_item_entry',\n        'image_uuid',\n    ];\n\n    public $casts = [\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'position',\n        'description',\n    ];\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity');\n    }\n\n    /**\n     * @return BelongsTo<Item, $this>\n     */\n    public function item(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Item');\n    }\n\n    /**\n     * @return HasOne<Image, $this>\n     */\n    public function image(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Image', 'id', 'image_uuid');\n    }\n\n    /**\n     * List of recently used positions for the form suggestions\n     */\n    public function scopePositionList(Builder $builder, Campaign $campaign): Builder\n    {\n        return $builder->groupBy('position')\n            ->whereNotNull('position')\n            ->leftJoin('entities as e', 'e.id', 'inventories.entity_id')\n            ->where('e.campaign_id', $campaign->id)\n            ->orderBy('position', 'ASC')\n            ->limit(50);\n    }\n\n    /**\n     * Get the item name, either custom or attached object\n     */\n    public function itemName(): string\n    {\n        if (empty($this->name) && ! empty($this->item)) {\n            return $this->item->name;\n        }\n\n        return (string) $this->name;\n    }\n\n    /**\n     * Copy an entity inventory to another target\n     */\n    public function copyTo(Entity $target, bool $sameCampaign): bool\n    {\n        $without = $sameCampaign ? ['entity_id'] : ['entity_id', 'item_id', 'image_uuid'];\n        $new = $this->replicate($without);\n        $new->entity_id = $target->id;\n        if ($sameCampaign) {\n            return $new->save();\n        }\n        if (empty($new->name)) {\n            return false;\n        }\n\n        return $new->save();\n    }\n\n    public function isEquipped(): bool\n    {\n        return $this->is_equipped;\n    }\n}\n"
  },
  {
    "path": "app/Models/Item.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasLocation;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Item\n *\n * @property string $type\n * @property string $price\n * @property string $size\n * @property string $weight\n * @property Collection|ItemCreator[] $itemCreators\n * @property Collection|Entity[] $creators\n */\nclass Item extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use HasLocation;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'price',\n        'size',\n        'weight',\n        'location_id',\n        'is_private',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'price',\n        'size',\n        'weight',\n        'location.name',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'size',\n        'weight',\n        'price',\n    ];\n\n    /**\n     * Casting for order by\n     *\n     * @var array\n     */\n    protected $orderCasting = [\n        'price' => 'unsigned',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'location_id',\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [\n        'itemCreators',\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'price',\n        'size',\n        'weight',\n        'location_id',\n    ];\n\n    /**\n     * @var string[] Extra relations loaded for the API endpoint\n     */\n    public array $apiWith = ['itemCreators'];\n\n    /**\n     * Tooltip subtitle (item price/size)\n     */\n    public function tooltipSubtitle(): string\n    {\n        $extra = [];\n        if (! empty($this->price)) {\n            $extra[] = __('items.fields.price') . ': ' . e($this->price);\n        }\n        if (! empty($this->size)) {\n            $extra[] = __('items.fields.size') . ': ' . e($this->size);\n        }\n        if (! empty($this->weight)) {\n            $extra[] = __('items.fields.weight') . ': ' . e($this->weight);\n        }\n        if (empty($extra)) {\n            return '';\n        }\n\n        return implode('<br />', $extra);\n    }\n\n    /**\n     * @return HasMany<ItemCreator, $this>\n     */\n    public function itemCreators(): HasMany\n    {\n        return $this->hasMany(ItemCreator::class, 'item_id')\n            ->orderBy('id');\n    }\n\n    /**\n     * @return BelongsToMany<Entity, $this>\n     */\n    public function creators(): BelongsToMany\n    {\n        return $this->belongsToMany(Entity::class, 'item_creator', 'item_id', 'creator_id')\n            ->orderBy('item_creator.id');\n    }\n\n    /**\n     * @return HasMany<Inventory, $this>\n     */\n    public function inventories(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Inventory', 'item_id');\n    }\n\n    /**\n     * @return HasManyThrough<Entity, Inventory, $this>\n     */\n    public function entities(): HasManyThrough\n    {\n        return $this->hasManyThrough(\n            'App\\Models\\Entity',\n            'App\\Models\\Inventory',\n            'item_id',\n            'id',\n            'id',\n            'entity_id'\n        );\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.item');\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if (! empty($this->price) || ! empty($this->size) || ! empty($this->weight)) {\n            return true;\n        }\n        if ($this->itemCreators->isNotEmpty() || $this->location) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'location_id',\n            'creators',\n            'price',\n            'size',\n            'weight',\n        ];\n    }\n\n    /**\n     * Grid mode sortable fields\n     */\n    public function datagridSortableColumns(): array\n    {\n        $columns = [\n            'name' => __('crud.fields.name'),\n            'type' => __('crud.fields.type'),\n            'price' => __('items.fields.price'),\n            'size' => __('items.fields.size'),\n            'weight' => __('items.fields.weight'),\n        ];\n\n        if (auth()->check() && auth()->user()->isAdmin()) {\n            $columns['is_private'] = __('crud.fields.is_private');\n        }\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Models/ItemCreator.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $id\n * @property int $item_id\n * @property int $creator_id\n * @property Carbon $created_at\n * @property Carbon $updated_at\n * @property ?Item $item\n * @property ?Entity $creator\n */\nclass ItemCreator extends Model\n{\n    protected $fillable = [\n        'item_id',\n        'creator_id',\n    ];\n\n    public $table = 'item_creator';\n\n    /**\n     * @return BelongsTo<Item, $this>\n     */\n    public function item(): BelongsTo\n    {\n        return $this->belongsTo(Item::class);\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function creator(): BelongsTo\n    {\n        return $this->belongsTo(Entity::class, 'creator_id');\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'item_id',\n            'creator_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/JobLog.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * This model/table keeps track of all the jobs running in the background and their results.\n *\n * @property string $name\n * @property string $result\n * @property string $config\n */\nclass JobLog extends Model\n{\n    public $connection = 'logs';\n\n    public $fillable = [\n        'name',\n        'result',\n        'config',\n    ];\n}\n"
  },
  {
    "path": "app/Models/Journal.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasLocation;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Journal\n *\n * @property int $id\n * @property string $date\n * @property ?int $character_id\n * @property ?int $author_id\n * @property ?Character $character\n * @property ?Entity $author\n */\nclass Journal extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use HasLocation;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'date',\n        'character_id',\n        'location_id',\n        'is_private',\n        'author_id',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'date',\n        'calendar_date',\n        'author.name',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'date',\n        'character.name',\n        'type',\n        // 'character.name',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'location_id',\n        // 'character_id',\n        'calendar_id',\n        'author_id',\n    ];\n\n    protected array $apiWith = [\n        'author',\n        'entity.calendarDate',\n    ];\n\n    public array $exportFields = [\n        'base',\n        'author_id',\n        'location_id',\n        'date',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'date',\n    ];\n\n    /**\n     * Get all journals in the journal and descendants\n     */\n    public function allJournals()\n    {\n        $entityIds = [$this->entity->id];\n        foreach ($this->entity->descendants as $descendant) {\n            $entityIds[] = $descendant->id;\n        }\n\n        return Journal::whereHas('entity', fn ($q) => $q->whereIn('entities.parent_id', $entityIds))\n            ->has('entity')\n            ->with('entity.parent');\n    }\n\n    /**\n     * @return BelongsTo<Character, $this>\n     */\n    public function character(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Character', 'character_id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function author(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'author_id');\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.journal');\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if (! empty($this->date)) {\n            return true;\n        }\n\n        if (! empty($this->author) || ! empty($this->location)) {\n            return true;\n        }\n        if (! empty($this->entity->calendarReminder())) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'date',\n            'character_id',\n            'location_id',\n            'author_id',\n            'date_start',\n            'date_end',\n        ];\n    }\n\n    /**\n     * Grid mode sortable fields\n     */\n    public function datagridSortableColumns(): array\n    {\n        $columns = [\n            'name' => __('crud.fields.name'),\n            'type' => __('crud.fields.type'),\n            'date' => __('journals.fields.date'),\n            'calendar_date' => __('crud.fields.calendar_date'),\n        ];\n\n        if (auth()->check() && auth()->user()->isAdmin()) {\n            $columns['is_private'] = __('crud.fields.is_private');\n        }\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Models/Location.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Location\n *\n * @property string $name\n * @property string $type\n * @property string $image\n * @property ?string $map\n * @property bool|int $is_private\n * @property bool|int $is_destroyed\n * @property bool|int $is_map_private\n * @property Map[]|Collection $maps\n * @property Event[]|Collection $events\n * @property Character[]|Collection $characters\n * @property Organisation[]|Collection $organisations\n * @property Creature[]|Collection $creatures\n * @property Race[]|Collection $races\n * @property Family[]|Collection $families\n * @property Item[]|Collection $items\n */\nclass Location extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'is_private',\n        'is_destroyed',\n        'title',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n        'is_destroyed',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'is_destroyed',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     */\n    public array $nullableForeignKeys = [\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'title',\n        'is_destroyed',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * @return BelongsToMany<Race, $this>\n     */\n    public function races(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Race', 'race_location');\n    }\n\n    /**\n     * @return BelongsToMany<Creature, $this>\n     */\n    public function creatures(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Creature', 'creature_location');\n    }\n\n    /**\n     * @return BelongsToMany<Entity, $this>\n     */\n    public function entities(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Entity', 'entity_locations');\n    }\n\n    /**\n     * @return HasMany<Item, $this>\n     */\n    public function items(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Item', 'location_id', 'id');\n    }\n\n    /**\n     * @return HasMany<Map, $this>\n     */\n    public function maps(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Map', 'location_id', 'id')\n            ->with('entity')\n            ->with('entity.image')\n            ->has('entity')\n            ->select(['id', 'name', 'is_real']);\n    }\n\n    /**\n     * Get all events in the location and descendants\n     */\n    public function allEvents(): Builder|Event\n    {\n        $locationIds = [$this->id];\n        foreach ($this->entity->descendants as $descendant) {\n            $locationIds[] = $descendant->entity_id;\n        }\n\n        return Event::distinct()\n            ->join('entities', function ($join) {\n                $join\n                    ->on('entities.entity_id', '=', 'events.id')\n                    ->where('entities.type_id', config('entities.ids.event'));\n            })\n            ->join('entity_locations as all_el', 'all_el.entity_id', '=', 'entities.id')\n            ->whereIn('all_el.location_id', $locationIds);\n    }\n\n    /**\n     * Get all characters in the location and descendants\n     */\n    public function allCharacters(bool $direct = false): Builder|Character\n    {\n        $locationIds = [$this->id];\n        if ($direct) {\n            foreach ($this->entity->descendants as $descendant) {\n                $locationIds[] = $descendant->entity_id;\n            }\n        }\n\n        return Character::distinct()\n            ->join('entities', function ($join) {\n                $join\n                    ->on('entities.entity_id', '=', 'characters.id')\n                    ->where('entities.type_id', config('entities.ids.character'));\n            })\n            ->join('entity_locations', 'entity_locations.entity_id', '=', 'entities.id')\n            ->whereIn('entity_locations.location_id', $locationIds);\n    }\n\n    /**\n     * Get all quests in the location and descendants\n     */\n    public function allQuests(): Builder|Quest\n    {\n        $locationIds = [$this->id];\n        foreach ($this->entity->descendants as $descendant) {\n            $locationIds[] = $descendant->entity_id;\n        }\n\n        $table = new Quest;\n\n        return Quest::whereIn($table->getTable() . '.location_id', $locationIds)\n            ->with('location')\n            ->has('entity');\n    }\n\n    /**\n     * @return HasMany<Family, $this>\n     */\n    public function families(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Family', 'location_id', 'id');\n    }\n\n    /**\n     * @return HasMany<Journal, $this>\n     */\n    public function journals(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Journal', 'location_id', 'id');\n    }\n\n    /**\n     * @return BelongsToMany<Organisation, $this>\n     */\n    public function organisations(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Organisation', 'organisation_location');\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        foreach ($this->families as $child) {\n            $child->location_id = null;\n            $child->save();\n        }\n\n        foreach ($this->items as $child) {\n            $child->location_id = null;\n            $child->save();\n        }\n\n        // Pivot tables can be deleted directly\n        $this->races()->delete();\n        $this->creatures()->delete();\n        $this->organisations()->delete();\n        $this->entities()->delete();\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.location');\n    }\n\n    /**\n     * If the profile is shown\n     */\n    public function showProfileInfo(): bool\n    {\n        if ($this->maps->isNotEmpty() || $this->entity->elapsedEvents->isNotEmpty()) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Get the value of the is_destroyed variable\n     */\n    public function isDestroyed(): bool\n    {\n        return (bool) $this->is_destroyed;\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "app/Models/Map.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasLocation;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class Map\n *\n * @property ?int $width\n * @property ?int $height\n * @property int $grid\n * @property int $min_zoom\n * @property int $max_zoom\n * @property int $initial_zoom\n * @property float $center_x\n * @property float $center_y\n * @property int $center_marker_id\n * @property bool|int $is_real\n * @property bool|int $has_clustering\n * @property int $chunking_status\n * @property array $config\n * @property Collection|MapLayer[] $layers\n * @property Collection|MapMarker[] $markers\n * @property MapMarker $centerMarker\n * @property Collection|MapGroup[] $groups\n * @property array $grids\n */\nclass Map extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use HasLocation;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    public const MAX_ZOOM = 10;\n\n    public const MIN_ZOOM = -10;\n\n    public const MAX_ZOOM_REAL = 15;\n\n    public const MIN_ZOOM_REAL = 2;\n\n    public const MIN_ZOOM_CHUNK = 8;\n\n    public const MAX_ZOOM_CHUNK = 13;\n\n    public const CHUNKING_RUNNING = 1;\n\n    public const CHUNKING_FINISHED = 2;\n\n    public const CHUNKING_ERROR = 3;\n\n    protected $fillable = [\n        'campaign_id',\n        'name',\n        'location_id',\n        'grid',\n        'is_private',\n        'height',\n        'width',\n        'min_zoom',\n        'max_zoom',\n        'initial_zoom',\n        'center_x',\n        'center_y',\n        'center_marker_id',\n        'is_real',\n        'has_clustering',\n        'config',\n    ];\n\n    public $casts = [\n        'config' => 'array',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'location_id',\n        'center_marker_id',\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [\n        'layers',\n        'groups',\n        'markers',\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'location_id',\n        'grid',\n        'height',\n        'width',\n        'min_zoom',\n        'max_zoom',\n        'initial_zoom',\n        'center_x',\n        'center_y',\n        'center_marker_id',\n        'is_real',\n        'has_clustering',\n        'config',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * Extra relations loaded for the API endpoint\n     *\n     * @var string[]\n     */\n    public array $apiWith = ['groups', 'layers'];\n\n    /**\n     * @return HasMany<MapLayer, $this>\n     */\n    public function layers(): HasMany\n    {\n        return $this->hasMany('App\\Models\\MapLayer', 'map_id', 'id')\n            ->with('image');\n    }\n\n    /**\n     * @return HasMany<MapGroup, $this>\n     */\n    public function groups(): HasMany\n    {\n        return $this->hasMany('App\\Models\\MapGroup', 'map_id', 'id');\n    }\n\n    /**\n     * @return HasMany<MapMarker, $this>\n     */\n    public function markers(): HasMany\n    {\n        return $this->hasMany('App\\Models\\MapMarker', 'map_id', 'id')\n            ->with(['entity', 'entity.entityType', 'group', 'map', 'entity.image']);\n    }\n\n    /**\n     * @return HasOne<MapMarker, $this>\n     */\n    public function centerMarker(): HasOne\n    {\n        return $this->hasOne('App\\Models\\MapMarker', 'id', 'center_marker_id');\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.map');\n    }\n\n    public function grids(): array\n    {\n        $lines = [];\n\n        // Horizontal lines\n        $grid = $this->grid;\n        for ($i = $grid; $i <= $this->height; $i += $grid) {\n            $lines[] = [$i, 0, $i, $this->width];\n        }\n\n        // Vertical lines\n        for ($i = $grid; $i <= $this->width; $i += $grid) {\n            $lines[] = [0, $i, $this->height, $i];\n        }\n\n        return $lines;\n    }\n\n    /**\n     * @return array|string[]\n     */\n    public function groupOptions(): array\n    {\n        $options = [null => ''];\n        $groups = $this->groups->sortBy('name');\n        foreach ($groups as $group) {\n            $options[$group->id] = $group->name;\n        }\n\n        return $options;\n    }\n\n    /**\n     * @return array|string[]\n     */\n    public function groupPositionOptions(?int $position = null): array\n    {\n        $options = [1 => __('maps/groups.placeholders.position')];\n        $groups = $this->groups->sortBy('position');\n        foreach ($groups as $group) {\n            $options[$group->position + 1] = __('maps/groups.placeholders.position_list', ['name' => $group->name]);\n        }\n\n        // If is the last position remove last+1 position from the options array\n        if ($position == array_key_last($options) - 1 && count($options) > 1) {\n            array_pop($options);\n        }\n\n        return $options;\n    }\n\n    /**\n     * @return array|string[]\n     */\n    public function layerPositionOptions(?int $position = null): array\n    {\n        $options = [1 => __('maps/layers.placeholders.position')];\n        $layers = $this->layers->sortBy('position');\n        foreach ($layers as $layer) {\n            $options[$layer->position + 1] = __('maps/layers.placeholders.position_list', ['name' => $layer->name]);\n        }\n\n        // If is the last position remove last+1 position from the options array\n        if ($position == array_key_last($options) - 1 && count($options) > 1) {\n            array_pop($options);\n        }\n\n        return $options;\n    }\n\n    public function activeLayers(bool $groups = true): string\n    {\n        $layers = [];\n        if (! $this->isReal()) {\n            $layers = ['baseLayer' . $this->id];\n        }\n        if ($groups) {\n            foreach ($this->groups->where('is_shown', true) as $group) {\n                $layers[] = 'group' . $group->id;\n            }\n            foreach ($this->layers->where('type_id', 2)->whereNotNull('image') as $layer) {\n                $layers[] = 'layer' . $layer->id;\n            }\n        }\n\n        return implode(', ', $layers);\n    }\n\n    /**\n     * List of markers for the map legend (ordered by \"name\")\n     */\n    public function legendMarkers(bool $link = true): array\n    {\n        $markers = new Collection;\n        $groups = [];\n\n        foreach ($this->markers as $marker) {\n            if (! $marker->visible()) {\n                continue;\n            }\n            if (! empty($marker->group)) {\n                if (empty($groups[$marker->group_id])) {\n                    $groups[$marker->group_id] = [\n                        'name' => $marker->group->name,\n                        'lower_name' => mb_strtolower($marker->group->name),\n                        'id' => $marker->group_id,\n                        'markers' => new Collection,\n                    ];\n                }\n                $groups[$marker->group_id]['markers']->add([\n                    'id' => $marker->id,\n                    'longitude' => $marker->longitude,\n                    'latitude' => $marker->latitude,\n                    'name' => str_replace(\"\\\\'\", \"'\", $marker->markerTitle($link)),\n                    'lower_name' => mb_strtolower($marker->markerTitle(false)),\n                ]);\n\n                continue;\n            }\n            $markers->add([\n                'id' => $marker->id,\n                'longitude' => $marker->longitude,\n                'latitude' => $marker->latitude,\n                'name' => $marker->markerTitle($link),\n                'lower_name' => mb_strtolower($marker->markerTitle(false)),\n                'visibility' => $marker->skipAllIcon()->visibilityIcon(),\n            ]);\n        }\n\n        $all = $markers->sortBy('lower_name')->toArray();\n\n        usort($groups, function ($a, $b) {\n            return strcmp($a['lower_name'], $b['lower_name']);\n        });\n\n        foreach ($groups as $id => $group) {\n            // Reorder group\n            $group['markers'] = $group['markers']->sortBy('lower_name')->toArray();\n            $all[] = $group;\n        }\n\n        usort($all, function ($a, $b) {\n            return strcmp($a['lower_name'], $b['lower_name']);\n        });\n\n        return $all;\n    }\n\n    /**\n     * Minimum zoom of a map\n     */\n    public function minZoom(): int\n    {\n        if (! is_numeric($this->min_zoom)) {\n            if ($this->isReal() || $this->isChunked()) {\n                return self::MIN_ZOOM_REAL;\n            }\n\n            return -2;\n        }\n\n        // if the initial zoom is further away than the min zoom, adapt\n        if ($this->min_zoom > $this->initial_zoom && $this->initial_zoom > self::MIN_ZOOM) {\n            return $this->initial_zoom;\n        }\n        // The max zoom is based on the chunked image so we trust this.\n        if ($this->isChunked()) {\n            return $this->min_zoom;\n        }\n        $min = $this->isReal() ? self::MIN_ZOOM_REAL : self::MIN_ZOOM;\n\n        return (int) max($this->min_zoom, $min);\n    }\n\n    /**\n     * Maximum zoom of a map\n     */\n    public function maxZoom(): float\n    {\n        if (! is_numeric($this->max_zoom)) {\n            if ($this->isChunked()) {\n                return 13;\n            }\n            if ($this->isReal()) {\n                return self::MAX_ZOOM_REAL;\n            }\n\n            return 2.75;\n        }\n        // The max zoom is based on the chunked image so we trust this.\n        if ($this->isChunked()) {\n            return $this->max_zoom;\n        }\n        $max = $this->isReal() ? self::MAX_ZOOM_REAL : self::MAX_ZOOM;\n\n        return (float) min($this->max_zoom, $max);\n    }\n\n    /**\n     * Initiall zoom of a map\n     */\n    public function initialZoom(): int\n    {\n        if (! is_numeric($this->initial_zoom)) {\n            if ($this->isReal() || $this->isChunked()) {\n                return 12;\n            }\n\n            return 0;\n        }\n\n        if ($this->initial_zoom > self::MAX_ZOOM) {\n            return self::MAX_ZOOM;\n        }\n        if ($this->initial_zoom < self::MIN_ZOOM) {\n            return self::MIN_ZOOM;\n        }\n\n        return (int) $this->initial_zoom;\n    }\n\n    public function centerFocus(): string\n    {\n        // Init position in the middle of the map\n        $latitude = $longitude = 0;\n        if ($this->isReal()) {\n            $latitude = 46.205;\n            $longitude = 6.147;\n        } elseif ($this->isChunked()) {\n            $latitude = 0;\n            $longitude = 0;\n        } else {\n            $latitude = floor($this->height / 2);\n            $longitude = floor($this->width / 2);\n        }\n\n        // If we have a center marker\n        if ($this->centerMarker != null) {\n            // use his position\n            $latitude = $this->centerMarker->latitude;\n            $longitude = $this->centerMarker->longitude;\n        } else {\n            // Use the center positions if they exist\n            if (! empty($this->center_y)) {\n                $latitude = $this->center_y;\n            }\n\n            if (! empty($this->center_x)) {\n                $longitude = $this->center_x;\n            }\n        }\n\n        return \"{$latitude}, {$longitude}\";\n    }\n\n    /**\n     * Build the image's bounds for leaflet.\n     * If the height or width is 0, which can happen with an svg with no height/width property,\n     * we just assume 1000/1000 and wait for a user to come in discord for help.\n     */\n    public function bounds(bool $extend = false): string\n    {\n        $this->prepareBounds();\n        $extra = $extend ? 50 : 0;\n        $height = empty($this->height) ? 1000 : $this->height;\n        $width = empty($this->width) ? 1000 : $this->width;\n        $height = floor(($height) / 1) + $extra;\n        $width = floor(($width) / 1) + $extra;\n\n        $min = $extend ? -50 : 0;\n\n        return \"[[{$min}, {$min}], [{$height}, {$width}]]\";\n    }\n\n    /**\n     * Whenever a map gets updated, its height and width are reset to re-calculate them on rendering\n     * This is because the map's image is on the entity, or from the gallery\n     */\n    protected function prepareBounds(): void\n    {\n        if (! empty($this->height)) {\n            return;\n        }\n\n        // Prioritize the gallery image, and fall back on the uploaded image\n        if (! empty($this->entity->image)) {\n            $path = $this->entity->image->path;\n        } elseif ($this->entity->image_path) {\n            $path = $this->entity->image_path;\n        }\n        if (empty($path)) {\n            return;\n        }\n\n        $contents = Storage::get($path);\n        if (Str::endsWith($path, '.svg')) {\n            $xml = simplexml_load_string($contents);\n            $width = $xml->attributes()->width;\n            $height = $xml->attributes()->height;\n        } else {\n            $image = imagecreatefromstring($contents);\n            $width = imagesx($image);\n            $height = imagesy($image);\n        }\n\n        $this->height = $height;\n        $this->width = $width;\n        // Don't save on the replica db\n        if (auth()->check()) {\n            $this->saveQuietly();\n        }\n    }\n\n    /**\n     * Determine if a map can be explored\n     */\n    public function explorable(): bool\n    {\n        if ($this->isReal()) {\n            return true;\n        }\n        if (! $this->entity->hasImage()) {\n            return false;\n        }\n\n        return ! ($this->isChunked() && ($this->chunkingError() || $this->chunkingRunning()));\n    }\n\n    /**\n     * Prepare groups for clustering\n     */\n    public function checkinGroups(): string\n    {\n        if (empty($this->groups)) {\n            return '[]';\n        }\n        $ids = [];\n        foreach ($this->groups as $group) {\n            $ids[] = 'group' . $group->id;\n        }\n\n        return '[' . implode(', ', $ids) . ']';\n    }\n\n    /**\n     * Check if a map is using the \"real\" world (openstreetmaps)\n     */\n    public function isReal(): bool\n    {\n        return (bool) $this->is_real;\n    }\n\n    /**\n     * Check if a map has a chunked tileset\n     */\n    public function isChunked(): bool\n    {\n        return ! empty($this->chunking_status);\n    }\n\n    /**\n     * Check if a map is currently being chunked\n     */\n    public function chunkingReady(): bool\n    {\n        return ! $this->chunkingError() && ! $this->chunkingRunning();\n    }\n\n    /**\n     * Check if a map encountered a chunking error\n     */\n    public function chunkingError(): bool\n    {\n        return $this->chunking_status == self::CHUNKING_ERROR;\n    }\n\n    /**\n     * Check if a map encountered a chunking error\n     */\n    public function chunkingRunning(): bool\n    {\n        return $this->chunking_status == self::CHUNKING_RUNNING;\n    }\n\n    /**\n     * Determine if the map uses marker clustering or not\n     */\n    public function isClustered(): bool\n    {\n        return $this->has_clustering;\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'location_id',\n        ];\n    }\n\n    public function hasDistanceUnit(): bool\n    {\n        // return false;\n        return ! empty($this->config['distance_measure']);\n    }\n\n    /**\n     * Available datagrid actions\n     */\n    public function datagridActions(Campaign $campaign): array\n    {\n        $newActions = [];\n        $actions = parent::datagridActions($campaign);\n\n        if (auth()->check() && auth()->user()->can('update', $this)) {\n            $newActions[] = null;\n            $newActions[] = [\n                'route' => route('maps.map_layers.index', [$campaign, $this]),\n                'icon' => 'fa-regular fa-layer-group',\n                'label' => 'maps.panels.layers',\n            ];\n            $newActions[] = [\n                'route' => route('maps.map_groups.index', [$campaign, $this]),\n                'icon' => 'fa-regular fa-map-signs',\n                'label' => 'maps.panels.groups',\n            ];\n            $newActions[] = [\n                'route' => route('maps.map_markers.index', [$campaign, $this]),\n                'icon' => 'fa-regular fa-map-pin',\n                'label' => 'maps.panels.markers',\n            ];\n        }\n        array_splice($actions, 2, 0, $newActions);\n\n        return $actions;\n    }\n\n    public function buildGroupTree(): string\n    {\n        $groups = $this->groups()->with('children')->whereNull('parent_id')->get()->sortBy('position');\n\n        return $this->buildGroup($groups);\n    }\n\n    protected function buildGroup($groups): string\n    {\n        $json = '';\n        foreach ($groups as $group) {\n            $children = $group->children;\n            $element = \"{label: '\" . str_replace('&amp;', '&', e($group->name)) . \"', layer: group\" . $group->id;\n            if ($children) {\n                $element .= ',children: [' . $this->buildGroup($children) . ']';\n            }\n            $json .= $element . '},';\n        }\n\n        return $json;\n    }\n}\n"
  },
  {
    "path": "app/Models/MapGroup.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Staudenmeir\\LaravelAdjacencyList\\Eloquent\\HasRecursiveRelationships;\n\n/**\n * Class MapGroup\n *\n * @property int $id\n * @property int $map_id\n * @property ?int $parent_id\n * @property string $name\n * @property int $position\n * @property bool|int $is_shown\n * @property ?MapGroup $parent\n * @property Map $map\n *\n * @method static self|Builder ordered()\n */\nclass MapGroup extends Model\n{\n    use Blameable;\n    use HasFactory;\n    use HasRecursiveRelationships;\n    use HasVisibility;\n    use Paginatable;\n    use Sanitizable;\n    use SortableTrait;\n\n    protected array $sortable = [\n        'name',\n        'position',\n        'parent_id',\n    ];\n\n    protected $fillable = [\n        'map_id',\n        'parent_id',\n        'name',\n        'position',\n        'visibility_id',\n        'is_shown',\n    ];\n\n    public $casts = [\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    protected static function booted(): void\n    {\n        static::saving(function (MapGroup $model) {\n            if (! $model->parent) {\n                return;\n            }\n            $bloodline = $model->parent->ancestors()->pluck('id')->toArray();\n            if (in_array($model->id, $bloodline)) {\n                $model->parent_id = null;\n            }\n        });\n\n        static::deleting(function (MapGroup $model) {\n            foreach ($model->children as $child) {\n                $child->parent_id = null;\n                $child->save();\n            }\n        });\n    }\n\n    /**\n     * @return BelongsTo<Map, $this>\n     */\n    public function map(): BelongsTo\n    {\n        return $this->belongsTo(Map::class, 'map_id');\n    }\n\n    /**\n     * @return BelongsTo<MapGroup, $this>\n     */\n    public function parent(): BelongsTo\n    {\n        return $this->belongsTo(MapGroup::class, 'parent_id');\n    }\n\n    /**\n     * @return HasMany<MapGroup, $this>\n     */\n    public function children(): HasMany\n    {\n        return $this->hasMany(MapGroup::class, 'parent_id')->with('children');\n    }\n\n    public function descendantGroupIds(): array\n    {\n        $ids = [];\n\n        foreach ($this->children as $child) {\n            $ids[] = $child->id;\n            $ids = array_merge($ids, $child->descendantGroupIds());\n        }\n\n        return $ids;\n    }\n\n    /**\n     * @return Builder\n     */\n    public function scopeOrdered(Builder $query)\n    {\n        return $query\n            ->orderByDesc('position')\n            ->orderBy('name');\n    }\n\n    /**\n     * @return HasMany<MapMarker, $this>\n     */\n    public function markers(): HasMany\n    {\n        return $this->hasMany(MapMarker::class, 'group_id');\n    }\n\n    public function markersWithEntity()\n    {\n        $ids = $this->descendantGroupIds();\n        $ids[] = $this->id; // include this group itself\n\n        return MapMarker::whereIn('group_id', $ids)\n            ->with(['entity', 'entity.entityType', 'group'])\n            ->get();\n    }\n\n    public function markerGroupHtml(): string\n    {\n        $data = [];\n        /** @var MapMarker[] $markers */\n        $markers = $this->markersWithEntity();\n        // dd($markers);\n\n        foreach ($markers as $marker) {\n            if ($marker->visible()) {\n                $data[] = 'marker' . $marker->id;\n            }\n        }\n\n        return implode(',', $data);\n    }\n\n    /**\n     * Functions for the datagrid2\n     */\n    public function url(string $where): string\n    {\n        return 'maps.map_groups.' . $where;\n    }\n\n    public function routeParams(array $options = []): array\n    {\n        return $options + ['map' => $this->map_id, 'map_group' => $this->id];\n    }\n\n    /**\n     * Patch an entity from the datagrid2 batch editing\n     */\n    public function patch(array $data): bool\n    {\n        return $this->updateQuietly($data);\n    }\n\n    /**\n     * Override the get link\n     */\n    public function getLink(): string\n    {\n        $campaign = CampaignLocalization::getCampaign();\n\n        return route('maps.map_groups.edit', [$campaign, 'map' => $this->map_id, $this->id]);\n    }\n}\n"
  },
  {
    "path": "app/Models/MapLayer.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Img;\nuse App\\Facades\\Mentions;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasEntry;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class MapLayer\n *\n * @property int $id\n * @property int $map_id\n * @property ?string $image_uuid\n * @property ?string $image_path\n * @property string $name\n * @property string $entry\n * @property int $position\n * @property int $height\n * @property int $width\n * @property ?int $type_id\n * @property Map $map\n * @property Image $image\n *\n * @method static self|Builder ordered()\n */\nclass MapLayer extends Model\n{\n    use Blameable;\n    use HasEntry;\n    use HasFactory;\n    use HasVisibility;\n    use Paginatable;\n    use Sanitizable;\n    use SortableTrait;\n\n    protected $fillable = [\n        'map_id',\n        'name',\n        'image_uuid',\n        'entry',\n        'position',\n        'visibility_id',\n        'type_id',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'position',\n    ];\n\n    public $casts = [\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * @return BelongsTo<Map, $this>\n     */\n    public function map(): BelongsTo\n    {\n        return $this->belongsTo(Map::class, 'map_id');\n    }\n\n    /**\n     * @return BelongsTo<Image, $this>\n     */\n    public function image(): BelongsTo\n    {\n        return $this->belongsTo(Image::class, 'image_uuid');\n    }\n\n    /**\n     * Default order maps based on their position field\n     */\n    public function scopeOrdered(Builder $query): Builder\n    {\n        return $query\n            ->orderByDesc('position')\n            ->orderBy('name');\n    }\n\n    /**\n     * Get the image (or default image) of an entity\n     */\n    public function thumbnail(int $width = 400, ?int $height = null): string\n    {\n        if ($this->image) {\n            return $this->image->getUrl($width, $height);\n        }\n\n        return Img::crop($width, (! empty($height) ? $height : $width))->url($this->image_path);\n    }\n\n    public function typeName(): string\n    {\n        if (empty($this->type_id)) {\n            return 'standard';\n        } elseif ($this->type_id == 1) {\n            return 'overlay';\n        }\n\n        return 'overlay_shown';\n    }\n\n    /**\n     * Functions for the datagrid2\n     */\n    public function url(string $where): string\n    {\n        return 'maps.map_layers.' . $where;\n    }\n\n    public function routeParams(array $options = []): array\n    {\n        return $options + ['map' => $this->map_id, 'map_layer' => $this->id];\n    }\n\n    /**\n     * Patch an entity from the datagrid2 batch editing\n     */\n    public function patch(array $data): bool\n    {\n        return $this->updateQuietly($data);\n    }\n\n    /**\n     * Override the get link\n     */\n    public function getLink(): string\n    {\n        $campaign = CampaignLocalization::getCampaign();\n\n        return route('maps.map_layers.edit', [$campaign, 'map' => $this->map_id, $this->id]);\n    }\n\n    public function hasImage(): bool\n    {\n        return $this->image || ! empty($this->image_path);\n    }\n\n    public function getEntryForEditionAttribute()\n    {\n        return Mentions::parseForEdit($this);\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'id',\n            'map_id',\n            'image_uuid',\n            'image_path',\n            'name',\n            'entry',\n            'position',\n            'height',\n            'width',\n            'visibility_id',\n            'type_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/MapMarker.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\MapMarkerShape;\nuse App\\Enums\\Visibility;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\MapMarkerCache;\nuse App\\Facades\\Mentions;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\Copiable;\nuse App\\Models\\Concerns\\HasEntry;\nuse App\\Models\\Concerns\\HasSuggestions;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class MapMarker\n *\n * @property Map $map\n * @property ?Entity $entity\n * @property int $id\n * @property int $map_id\n * @property ?int $entity_id\n * @property string $name\n * @property string $entry\n * @property int $longitude\n * @property int $latitude\n * @property string $colour\n * @property string $font_colour\n * @property ?int $shape_id\n * @property ?int $size_id\n * @property ?int $icon\n * @property string $custom_icon\n * @property string $custom_shape\n * @property ?int $circle_radius\n * @property string $css\n * @property bool|int $is_draggable\n * @property bool|int $is_popupless\n * @property array $polygon_style\n * @property float $opacity\n * @property ?int $group_id\n * @property ?int $pin_size\n * @property MapGroup|null $group\n */\nclass MapMarker extends Model\n{\n    use Blameable;\n    use Copiable;\n    use HasEntry;\n    use HasFactory;\n    use HasSuggestions;\n    use HasVisibility;\n    use Paginatable;\n    use Sanitizable;\n    use SortableTrait;\n\n    protected $fillable = [\n        'map_id',\n        'name',\n        'entry',\n        'visibility_id',\n        'entity_id',\n        'size_id',\n        'shape_id',\n        'icon',\n        'custom_icon',\n        'custom_shape',\n        'is_draggable',\n        'colour',\n        'font_colour',\n        'longitude',\n        'latitude',\n        'opacity',\n        'group_id',\n        'pin_size',\n        'circle_radius',\n        'polygon_style',\n        'is_popupless',\n        'css',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'entity_id',\n        'type',\n        'icon',\n        'group.name',\n        'visibility',\n    ];\n\n    public $casts = [\n        'polygon_style' => 'array',\n        'visibility_id' => Visibility::class,\n        'shape_id' => MapMarkerShape::class,\n    ];\n\n    protected array $suggestions = [\n        MapMarkerCache::class => 'clearSuggestion',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'css',\n    ];\n\n    /** Editing the map */\n    protected bool $editing = false;\n\n    /** Exploring the map */\n    protected bool $exploring = false;\n\n    /** Marker MouseOver Popup on explore */\n    protected string $tooltipPopup = '';\n\n    /** size multiplier for circles */\n    protected int $sizeMultiplier = 1;\n\n    /**\n     * @return BelongsTo<Map, $this>\n     */\n    public function map(): BelongsTo\n    {\n        return $this->belongsTo(Map::class, 'map_id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo(Entity::class, 'entity_id');\n    }\n\n    /**\n     * @return BelongsTo<MapGroup, $this>\n     */\n    public function group(): BelongsTo\n    {\n        return $this->belongsTo(MapGroup::class, 'group_id');\n    }\n\n    /**\n     * Get the marker's size, and make it 20 times bigger for a \"pixel\" size equivalent\n     */\n    public function size(): int\n    {\n        return ($this->size_id * 20) + 20;\n    }\n\n    /**\n     * Determine if the marker is of the label type\n     */\n    public function isLabel(): bool\n    {\n        return $this->shape_id === MapMarkerShape::label;\n    }\n\n    /**\n     * Determine if the marker is of the circle type\n     */\n    public function isCircle(): bool\n    {\n        return $this->shape_id === MapMarkerShape::circle;\n    }\n\n    /**\n     * Determine if the marker is of the polygon type and has a custom shape\n     */\n    public function isPolygon(): bool\n    {\n        return $this->shape_id === MapMarkerShape::poly && ! empty($this->custom_shape);\n    }\n\n    /**\n     * Determine the type of the marker\n     */\n    public function typeLabel(): string\n    {\n        if ($this->isPolygon()) {\n            return __('maps/markers.tabs.polygon');\n        } elseif ($this->isLabel()) {\n            return __('maps/markers.tabs.label');\n        } elseif ($this->isCircle()) {\n            return __('maps/markers.tabs.circle');\n        }\n\n        return __('maps/markers.tabs.marker');\n    }\n\n    /**\n     * Determine the icon of the marker for the datagrid.\n     */\n    public function datagridMarkerIcon(): string\n    {\n        if (in_array($this->shape_id, [2, 3, 5])) {\n            return '';\n        }\n\n        $icon = '<i class=\"fa-solid fa-map-pin\"></i>';\n\n        $campaign = CampaignLocalization::getCampaign();\n        if (! empty($this->custom_icon) && $campaign->boosted()) {\n            if (Str::startsWith($this->custom_icon, '<i ')) {\n                $icon = $this->custom_icon;\n            } elseif (Str::startsWith($this->custom_icon, ['fa-', 'ra '])) {\n                $icon = ' <i class=\"' . $this->custom_icon . '\" aria-hidden=\"true\"></i>';\n            } elseif (Str::startsWith($this->custom_icon, '<?xml')) {\n                $icon = '<div class=\"custom-icon\"><img src=\"' . $this->resizedCustomIcon() . '\" /></div>';\n            }\n        } elseif ($this->icon == 2) {\n            $icon = '<i class=\"fa-solid fa-question\"></i>';\n        } elseif ($this->icon == 3) {\n            $icon = '<i class=\"fa-solid fa-exclamation\"></i>';\n        }\n\n        return $icon;\n    }\n\n    /**\n     * Generate the marker for leaflet\n     */\n    public function marker(): string\n    {\n        if ($this->isCircle()) {\n            return $this->circleMarker();\n        } elseif ($this->isLabel()) {\n            return $this->labelMarker();\n        } elseif ($this->isPolygon()) {\n            $coords = [];\n            $segments = explode(' ', str_replace(\"\\r\\n\", ' ', $this->custom_shape));\n            foreach ($segments as $segment) {\n                $coord = explode(',', $segment);\n                if (! empty($coord[0]) && ! empty($coord[1])) {\n                    $coords[] = '[' . $coord[0] . ', ' . Str::before($coord[1], ' ') . ']';\n                }\n            }\n\n            return 'L.polygon([' . implode(', ', $coords) . '], {\n                color: \\'' . Arr::get($this->polygon_style, 'stroke', $this->colour) . '\\',\n                weight: ' . max(1, Arr::get($this->polygon_style, 'stroke-width', 1)) . ',\n                opacity: ' . $this->strokeOpacity() . ',\n                fillOpacity: ' . $this->floatOpacity() . ',\n                fillColor: \\'' . e($this->colour) . '\\',\n                smoothFactor: 1,\n                linecap: \\'round\\',\n                linejoin: \\'round\\',\n            })' . $this->popup();\n            // ' . ($this->editing ? 'draggable: true,' : null) . '\n        }\n\n        return 'L.marker([' . $this->latitude . ', ' . $this->longitude . '], {\n            title: \\'' . $this->markerTitle() . '\\',\n            opacity: ' . $this->floatOpacity() . ','\n            . ($this->isDraggable() ? 'draggable: true,' : null) . '\n            ' . $this->markerIcon() . '\n        })' . $this->popup() . $this->draggable();\n    }\n\n    /**\n     * Generate a circle marker\n     */\n    protected function circleMarker(): string\n    {\n        return 'L.circle([' . $this->latitude . ', ' . $this->longitude . '], {\n                radius: ' . $this->circleRadius() . ',\n                fillColor: \\'' . e($this->colour) . '\\',\n                title: \\'' . $this->markerTitle() . '\\',\n                stroke: false,\n                fillOpacity: ' . $this->floatOpacity() . ',\n                className: \\'marker marker-circle marker-' . $this->id . ' size-' . $this->size_id . ' ' . $this->css . '\\','\n            . ($this->isDraggable() ? 'draggable: true' : null) . '\n            })' . $this->popup() . $this->draggable();\n    }\n\n    /**\n     * Generate a label marker\n     */\n    protected function labelMarker(): string\n    {\n        return 'L.marker([' . $this->latitude . ', ' . $this->longitude . '], {\n                opacity: 0.1,\n                icon: labelShapeIcon,'\n            . ($this->editing ? null : null) . '\n            }).bindTooltip(`' . str_replace('`', '\\'', $this->markerTitle()) . '`, {\n                direction: \\'center\\',\n                permanent: true,\n                offset: [0,0],\n                opacity: ' . $this->floatOpacity() . ',\n            })' . $this->popup();\n    }\n\n    /**\n     * Generate the marker's popup that is usually opened on hover\n     */\n    protected function popup(): ?string\n    {\n        if ($this->editing) {\n            return null;\n        }\n\n        $body = null;\n        $campaign = CampaignLocalization::getCampaign();\n        if (! empty($this->entity)) {\n            if (! empty($this->name)) { // Name is set, include link to the entity\n                $url = $this->entity->url();\n                if ($this->entity->isMap()) {\n                    $url = $this->entity->child->getLink('explore');\n                }\n                $body .= \"<p><a href=\\\"{$url}\\\">\" . str_replace('`', '\\'', $this->entity->name) . '</a></p>';\n            }\n            // No entry field, include the entity tooltip\n            if (! $this->isLabel()) {\n                $body .= $this->entity->mappedPreview();\n                // Replace backslashes because javascript can think that things like \\6e is an octogonal string\n                $body = str_replace('\\\\', '/', $body);\n            }\n        }\n\n        // When exploring, we want the texts to be slightly shorter, to avoid lots of jittering on maps\n        if ($this->isExploring()) {\n            $body = Str::limit($body, 300);\n            $output = '.on(`click`, function (ev) {\n                window.markerDetails(`' . route('maps.markers.details', [$campaign, $this->map_id, $this->id]) . '`)\n            })';\n\n            if ($this->is_popupless) {\n                return $output;\n            }\n\n            return '.bindPopup(`\n            <div class=\"marker-popup-content\">\n                <h4 class=\"marker-header\">' . str_replace('`', '\\'', $this->markerTitle(true)) . '</h4>\n                ' . (! empty($this->entry) ? '<p class=\"marker-text\">' . Str::limit(Mentions::mapAny($this), 300) . '</p>' : null) . '\n            </div>\n            <div class=\"marker-popup-entry\">\n                ' . $body . '\n            </div>`)\n                ' . $this->tooltipPopup . $output;\n        }\n\n        $editButton = $copyButton = $deleteButton = '';\n        if (auth()->check()) {\n            if (auth()->user()->can('update', $this)) {\n                $editButton = '<a href=\"' . route('maps.map_markers.edit', [$campaign, $this->map_id, $this->id]) . '\" class=\"btn2 btn-xs btn-primary\">' . __('crud.edit') . '</a>';\n                $copyButton = '<a href=\"' . route('maps.map_markers.create', [$campaign, $this->map_id, 'source' => $this->id]) . '\" class=\"btn2 btn-xs btn-primary\">' . __('crud.actions.copy') . '</a>';\n            }\n            if (auth()->user()->can('delete', $this)) {\n                $route = route('confirm-delete', [$campaign, 'route' => route('maps.map_markers.destroy', [$campaign, $this->map_id, $this->id]), 'name' => $this->markerTitle(), 'permanent' => true]);\n                $deleteButton = '<a href=\"#\" class=\"btn2 btn-xs btn-error\"\n                data-url=\"' . $route . '\" data-toggle=\"dialog\" data-target=\"primary-dialog\"\n                        title=\"' . __('crud.remove') . '\">\n                    ' . __('crud.remove') . '\n                </a>';\n            }\n        }\n\n        return '.bindPopup(`\n            <div class=\"marker-popup-content\">\n                <h4 class=\"marker-header\">' . str_replace('`', '\\'', $this->markerTitle(true)) . '</h4>\n                ' . (! empty($this->entry) ? '<p class=\"marker-text\">' . Mentions::mapAny($this) . '</p>' : null) . '\n            </div>\n            <div class=\"marker-popup-body\">\n            ' . $body . '\n            </div>\n            <div class=\"marker-popup-actions flex gap-2\">\n                ' . $editButton . $copyButton . $deleteButton . '\n            </div>`\n        )';\n    }\n\n    /**\n     * Determine if a marker is draggable\n     */\n    protected function isDraggable(): bool\n    {\n        if (! auth()->check()) {\n            return false;\n        }\n\n        return $this->editing || ($this->isExploring() && $this->is_draggable);\n    }\n\n    /**\n     * Generate the draggable event for a marker\n     */\n    protected function draggable(): string\n    {\n        if (! $this->isDraggable()) {\n            return '';\n        }\n\n        // Exploring and moving? Update through ajax\n        if ($this->isExploring() && $this->is_draggable) {\n            $campaign = CampaignLocalization::getCampaign();\n\n            return '.on(`dragstart`, function() {\n                this.closePopup();\n            })\n\n            .on(\\'dragend\\', function() {\n                var coordinates = marker' . $this->id . '.getLatLng();\n                //console.log(`dragend`, coordinates);\n                $.ajax({\n                    url: `' . route('maps.markers.move', [$campaign, $this->map_id, $this->id]) . '`,\n                    type: `post`,\n                    data: {latitude: coordinates.lat.toFixed(3), longitude: coordinates.lng.toFixed(3)}\n                }).done(function (data) {\n                    console.log(`moved marker`);\n                });\n            })';\n        }\n\n        return '.on(\\'dragend\\', function() {\n            var coordinates = marker' . $this->id . '.getLatLng();\n            //console.log(\\'coords\\', coordinates);\n            //console.log(\\'new coords\\', coordinates.lat, coordinates.lng);\n\n            var shapeId = $(\\'input[name=\"shape_id\"]\\').val();\n            var polyCoords = $(\\'textarea[name=\"custom_shape\"]\\');\n            //console.log(\\'shape id\\', shapeId);\n            if (shapeId == \"5\") {\n                //console.log(\\'poly\\', polyCoords.val());\n                polyCoords.val(polyCoords.val() + \\' \\' + coordinates.lat.toFixed(3) + \\',\\' + coordinates.lng.toFixed(3));\n            } else {\n                $(\\'#marker-latitude\\').val(coordinates.lat.toFixed(3));\n                $(\\'#marker-longitude\\').val(coordinates.lng.toFixed(3));\n            }\n        })';\n    }\n\n    /**\n     * Marker icon as shown in explore and edit mode\n     */\n    protected function markerIcon(): string\n    {\n        if ($this->icon == 5) {\n            return '';\n        }\n\n        $iconStyles = [];\n        $iconStyles[] = 'background-color: ' . $this->backgroundColour();\n\n        $iconShape = '<div style=\"background-color: ' . $this->backgroundColour() . '\" class=\"marker-pin\"></div>';\n\n        $icon = '`' . $iconShape . '<i class=\"fa-solid fa-map-pin\"></i>`';\n\n        $campaign = CampaignLocalization::getCampaign();\n        if (! empty($this->custom_icon) && $campaign->boosted()) {\n            if (Str::startsWith($this->custom_icon, '<i ')) {\n                $icon = '`' . $iconShape . $this->custom_icon . '`';\n            } elseif (Str::startsWith($this->custom_icon, ['fa-', 'ra '])) {\n                $icon = '`' . $iconShape . ' <i class=\"' . $this->custom_icon . '\" aria-hidden=\"true\"></i>`';\n            } elseif (Str::startsWith($this->custom_icon, '<?xml')) {\n                $icon = 'L.Util.template(`<div class=\"custom-icon\">' . $this->resizedCustomIcon() . '</div>`)';\n            }\n        } elseif ($this->icon == 2) {\n            $icon = '`' . $iconShape . '<i class=\"fa-solid fa-question\"></i>`';\n        } elseif ($this->icon == 3) {\n            $icon = '`' . $iconShape . '<i class=\"fa-solid fa-exclamation\"></i>`';\n        } elseif ($this->icon == 4) {\n            $icon = '`' . $iconShape . '`';\n        }\n\n        // dd($this->pin_size ?: 40);\n        $size = (int) $this->pinSize(false);\n\n        return 'icon: L.divIcon({\n                html: ' . $icon . ',\n                iconSize: [' . $size . ', ' . $size . '],\n                iconAnchor: [' . ceil($size / 2) . ', ' . ($size + ceil($size / 4)) . '],\n                popupAnchor: [0, -' . ($size + ceil($size / 4)) . '],\n                className: \\'marker marker-' . $this->id . ' ' . $this->css . '\\'\n        })';\n    }\n\n    public function pinSize(bool $withPx = true): string\n    {\n        $size = max(10, $this->pin_size ?: 40);\n\n        return (string) $size . ($withPx ? 'px' : null);\n    }\n\n    /**\n     * The name of the marker: name or entity\n     *\n     * @param  bool  $link  = false\n     */\n    public function markerTitle(bool $link = false): string\n    {\n        if (empty($this->name) && ! empty($this->entity)) {\n            if ($link) {\n                $url = $this->entity->url();\n                if ($this->entity->isMap()) {\n                    $url = $this->entity->child->getLink('explore');\n                }\n\n                return '<a href=\"' . $url . '\">' . $this->entity->name . '</a>';\n            }\n\n            return str_replace(\"'\", \"\\'\", $this->entity->name);\n        }\n\n        return $link ? e($this->name) : str_replace(\"'\", \"\\'\", $this->name);\n    }\n\n    /**\n     * Set the current mode to editing the marker\n     */\n    public function editing(): self\n    {\n        $this->editing = true;\n\n        return $this;\n    }\n\n    /**\n     * Set the current mode to exploring the map\n     */\n    public function exploring(bool $popup = true): self\n    {\n        $this->exploring = true;\n        if ($popup) {\n            $this->tooltipPopup = '.on(`mouseover`, function (ev) {this.openPopup();})';\n        }\n\n        return $this;\n    }\n\n    /**\n     * Determine if the marker is being viewed in the \"explore\" page.\n     * Refactor potential: move all of the rendering logic to a separate class.\n     */\n    public function isExploring(): bool\n    {\n        return $this->exploring;\n    }\n\n    /**\n     * Used for calculating sizes and distances when using open street map where everything is way more\n     * zoomed in.\n     */\n    public function multiplier(bool $isReal = false): self\n    {\n        $this->sizeMultiplier = $isReal ? 50 : 1;\n\n        return $this;\n    }\n\n    /**\n     * Get the opacity of a point. Users input a %, convert it to a float for leaflet\n     */\n    protected function floatOpacity(): float\n    {\n        if ($this->opacity > 100) {\n            return 1.0;\n        }\n\n        if (empty($this->opacity) && $this->editing) {\n            return 0.5;\n        }\n\n        return round($this->opacity / 100, 1);\n    }\n\n    /**\n     * Get the polygon's stroke opacity\n     */\n    protected function strokeOpacity(): float\n    {\n        $opacity = Arr::get($this->polygon_style, 'stroke-opacity');\n        if (empty($opacity)) {\n            return 1.0;\n        }\n\n        // The number is an int (1 to 100), but needs to be a float\n        return round($opacity / 100, 1);\n    }\n\n    /**\n     * Resize any custom svg icon to be limited in height and width to the pin\n     */\n    protected function resizedCustomIcon(): string\n    {\n        $resized = preg_replace('`(width|height)=\\\".*?\\\"`sui', '$1=\"32\"', $this->custom_icon);\n        $resized = str_replace('height=\"32\"', 'height=\"32\" style=\"margin-top: 4px;\"', $resized);\n\n        return $resized;\n    }\n\n    /**\n     * Marker background colour\n     */\n    public function backgroundColour(): string\n    {\n        if (! empty($this->colour)) {\n            return $this->colour;\n        }\n\n        // Entity with no image? Add a grey background colour to make the pin visible\n        if ($this->icon == 4 && $this->entity && ! $this->entity->hasImage()) {\n            return '#ccc';\n        }\n\n        if ($this->icon != 1 || ! empty($this->custom_icon)) {\n            return 'unset';\n        }\n\n        return '#ccc';\n    }\n\n    /**\n     * Check if a marker is visible (pointing to an entity that shouldn't be visible)\n     */\n    public function visible(): bool\n    {\n        $campaign = CampaignLocalization::getCampaign();\n        if ($this->isPolygon() && ! $campaign->boosted()) {\n            return false;\n        }\n        // Part of a private group, don't show either\n        if (! empty($this->group_id) && ! $this->group) {\n            return false;\n        }\n\n        return empty($this->entity_id) || (! empty($this->entity) && ! $this->entity->isMissingChild());\n    }\n\n    /**\n     * Calculate the circle radius\n     */\n    protected function circleRadius(): int\n    {\n        if (! empty($this->circle_radius)) {\n            return (int) $this->circle_radius * $this->sizeMultiplier;\n        }\n\n        return (int) ($this->size_id * 20) * ($this->size_id * $this->sizeMultiplier);\n    }\n\n    /**\n     * For legacy tinymce editor\n     */\n    public function hasEntity(): bool\n    {\n        return false;\n    }\n\n    /**\n     * Functions for the datagrid2\n     */\n    public function url(string $where): string\n    {\n        return 'maps.map_markers.' . $where;\n    }\n\n    public function routeParams(array $options = []): array\n    {\n        return $options + ['map' => $this->map_id, 'map_marker' => $this->id];\n    }\n\n    public function routeCopyParams(array $options = []): array\n    {\n        return $options + ['map' => $this->map_id, 'source' => $this->id];\n    }\n\n    /**\n     * Patch an entity from the datagrid2 batch editing\n     */\n    public function patch(array $data): bool\n    {\n        if (isset($data['group_id']) && $data['group_id'] == -1) {\n            $data['group_id'] = null;\n        }\n\n        return $this->updateQuietly($data);\n    }\n\n    /**\n     * Override the get link\n     */\n    public function getLink(): string\n    {\n        $campaign = CampaignLocalization::getCampaign();\n\n        return route('maps.map_markers.edit', [$campaign, 'map' => $this->map_id, $this->id]);\n    }\n\n    /**\n     * Generate link for the datagrid\n     */\n    public function markerLink(?string $displayName = null): string\n    {\n        return '<a href=\"' . $this->getLink() . '\">' .\n            (! empty($displayName) ? $displayName : e($this->name)) .\n        '</a>';\n    }\n}\n"
  },
  {
    "path": "app/Models/MiscModel.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Concerns\\Copiable;\nuse App\\Models\\Concerns\\HasEntity;\nuse App\\Models\\Concerns\\LastSync;\nuse App\\Models\\Concerns\\Orderable;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Searchable;\nuse App\\Models\\Concerns\\Sortable;\nuse App\\Models\\Concerns\\TouchSilently;\nuse App\\Models\\Scopes\\SubEntityScopes;\nuse Carbon\\Carbon;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\n\n/**\n * Class MiscModel\n *\n * @property int $id\n * @property int $campaign_id\n * @property string $name\n * @property ?Entity $entity\n * @property string $image\n * @property string $tooltip\n * @property string $header_image\n * @property bool|int $is_private\n * @property string[] $nullableForeignKeys\n * @property Carbon $created_at\n * @property Carbon $updated_at\n *\n * @method static self|Builder sort(array $filters, array $defaultOrder = [])\n */\nabstract class MiscModel extends Model\n{\n    use Copiable;\n    use HasEntity;\n    use LastSync;\n    use Orderable;\n    use Paginatable;\n    use Searchable;\n    use Sortable;\n    use SubEntityScopes;\n    use TouchSilently;\n\n    /**\n     * Explicit fields for filtering.\n     * Ex. ['sex']\n     */\n    protected array $explicitFilters = [];\n\n    /**\n     * Fields that can be set to null (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [];\n\n    /**\n     * Default ordering\n     */\n    protected string $defaultOrderField = 'name';\n\n    protected string $defaultOrderDirection = 'asc';\n\n    /**\n     * Every misc model has an attached entity\n     *\n     * @return HasOne\n     */\n    public function entity()\n    {\n        return $this\n            ->hasOne('App\\Models\\Entity', 'entity_id', 'id')\n            ->where('type_id', $this->entityTypeID());\n    }\n\n    /**\n     * Determine if model inheriting miscModel has an actual entity\n     */\n    public function hasEntity(): bool\n    {\n        return method_exists($this, 'entityTypeID');\n    }\n\n    public function getLink(string $action = 'show'): string\n    {\n        if (empty($this->entity)) {\n            return '#';\n        }\n        try {\n            $campaign = CampaignLocalization::getCampaign();\n            if (in_array($action, ['show', 'update'])) {\n                return route('entities.' . $action, [$campaign, $this->entity]);\n            }\n\n            return route($this->entity->entityType->pluralCode() . '.' . $action, [$campaign, $this->id]);\n        } catch (Exception $e) {\n            return '#';\n        }\n    }\n\n    /**\n     * Create the model's Entity\n     */\n    public function createEntity(): Entity\n    {\n        $entity = new Entity;\n        $entity->entity_id = $this->id;\n        $entity->name = $this->name;\n        $entity->campaign_id = $this->campaign_id;\n        $entity->type_id = $this->entityTypeId();\n        $entity->is_private = $this->isPrivate();\n        $entity->save();\n        $this->setRelation('entity', $entity);\n\n        return $entity;\n    }\n\n    /**\n     * Available datagrid actions\n     * Todo: move this out of the model\n     *\n     * @throws Exception\n     */\n    public function datagridActions(Campaign $campaign): array\n    {\n        $actions = [];\n\n        // Relations & Inventory\n        if (! isset($this->hasRelations)) {\n            $actions[] = [\n                'route' => route('entities.relations.index', [$campaign, $this->entity]),\n                'icon' => 'fa-regular fa-circle-nodes',\n                'label' => 'entries/tabs.relations',\n            ];\n\n            if ($campaign->enabled('inventories')) {\n                $actions[] = [\n                    'route' => route('entities.inventory', [$campaign, $this->entity]),\n                    'icon' => 'fa-regular fa-gem',\n                    'label' => 'crud.tabs.inventory',\n                ];\n            }\n        }\n\n        if (auth()->check() && auth()->user()->can('update', $this->entity)) {\n            if (! empty($actions)) {\n                $actions[] = null;\n            }\n            $actions[] = [\n                'route' => route('entities.edit', [$campaign, $this->entity]),\n                'icon' => 'edit',\n                'label' => 'crud.edit',\n            ];\n        }\n\n        return $actions;\n    }\n\n    /**\n     * To be overwritten by the model instance\n     */\n    public function showProfileInfo(): bool\n    {\n        return ! empty($this->entity->type) || $this->entity->aliases->isNotEmpty();\n    }\n\n    /**\n     * Row classes for entities\n     */\n    public function rowClasses(): string\n    {\n        $classes = [];\n        if ($this->is_private) {\n            $classes[] = 'entity-private';\n        }\n\n        $statusClass = $this->entity->statusClass();\n        if ($statusClass !== '') {\n            $classes[] = $statusClass;\n        }\n\n        return implode(' ', $classes);\n    }\n\n    /**\n     * Boilerplate\n     */\n    public function entityTypeId(): int\n    {\n        return 0;\n    }\n\n    /**\n     * Boilerplate for sortable columns in the datagrid dropdowns\n     */\n    public function datagridSortableColumns(): array\n    {\n        $columns = [\n            'name' => __('crud.fields.name'),\n            'type' => __('crud.fields.type'),\n        ];\n\n        if (auth()->check() && auth()->user()->isAdmin()) {\n            $columns['is_private'] = __('crud.fields.is_private');\n        }\n\n        return $columns;\n    }\n\n    public function isPrivate(): bool\n    {\n        return (bool) $this->is_private;\n    }\n}\n"
  },
  {
    "path": "app/Models/Note.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Note\n */\nclass Note extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'campaign_id',\n        'name',\n        'is_private',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n    ];\n\n    /**\n     * Fields that can be set to null (foreign keys)\n     */\n    public array $nullableForeignKeys = [\n    ];\n\n    protected array $exportFields = [\n        'base',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.note');\n    }\n}\n"
  },
  {
    "path": "app/Models/Notification.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\MassPrunable;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Notification extends Model\n{\n    use MassPrunable;\n\n    /**\n     * Automatically prune read notifications older than a year\n     */\n    public function prunable(): Builder\n    {\n        return static::whereNotNull('read_at')\n            ->where('read_at', '<=', now()->subYear());\n    }\n}\n"
  },
  {
    "path": "app/Models/OTPAuthentication.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Exception;\nuse PragmaRX\\Google2FALaravel\\Support\\Authenticator;\n\nclass OTPAuthentication extends Authenticator\n{\n    // If User does not have Google2FA Setup yet\n    protected function canPassWithoutCheckingOTP()\n    {\n        if (! isset($this->getUser()->passwordSecurity)) {\n            return true;\n        }\n\n        return ! $this->getUser()->passwordSecurity->google2fa_enable || ! $this->isEnabled() || $this->noUserIsAuthenticated() || $this->twoFactorAuthStillValid();\n    }\n\n    protected function getGoogle2FaSecretkey()\n    {\n        // Get User secret column\n        try {\n            $secret = $this->getUser()->passwordSecurity->{$this->config('otp_secret_column')};\n        } catch (Exception $e) {\n            // If User has not set up Google2FA\n            $secret = $this->getUser()->passwordSecurity;\n        }\n\n        // If User is not Authenticated through 2FA\n        if (empty($secret)) {\n            // return Action\n            return redirect()->action('PasswordSecurityController@generate2faSecretCode');\n        }\n\n        // If user has Google2FA setup and is Authenticated\n        return $secret;\n    }\n}\n"
  },
  {
    "path": "app/Models/Organisation.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\FilterOption;\nuse App\\Enums\\OrganisationMemberPin;\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Organisation\n *\n * @property Collection|OrganisationMember[] $members\n */\nclass Organisation extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'campaign_id',\n        'name',\n        'is_private',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n        'locations',\n    ];\n\n    protected int $allMembersCount;\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'locations',\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [\n        'members',\n    ];\n\n    protected array $exportFields = [\n        'base',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    protected array $organisationAndDescendantIds;\n\n    /**\n     * Filter for organisations with specific member\n     */\n    public function scopeMember(Builder $query, ?string $value, FilterOption $filter): Builder\n    {\n        if ($filter === FilterOption::NONE) {\n            // If called with a param, it's being called too early and will be called later in the process\n            if (! empty($value)) {\n                return $query;\n            }\n            $query\n                ->select($this->getTable() . '.*')\n                ->leftJoin('organisation_member as memb', function ($join) {\n                    $join->on('memb.organisation_id', '=', $this->getTable() . '.id');\n                })\n                ->where('memb.character_id', null);\n            if (auth()->guest() || ! auth()->user()->isAdmin()) {\n                $query->where('memb.is_private', 0);\n            }\n\n            return $query;\n        } elseif ($filter === FilterOption::EXCLUDE) {\n            return $query\n                ->whereRaw('(select count(*) from organisation_member as memb where memb.organisation_id = ' .\n                    $this->getTable() . '.id and memb.character_id = ' . ((int) $value) . ' ' . $this->subPrivacy('and memb.is_private') . ') = 0');\n        }\n        $ids = [$value];\n\n        $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin('organisation_member as memb', function ($join) {\n                $join->on('memb.organisation_id', '=', $this->getTable() . '.id');\n            })\n            ->whereIn('memb.character_id', $ids);\n\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->where('memb.is_private', 0);\n        }\n\n        return $query->distinct();\n    }\n\n    public function pinnedMembers()\n    {\n        return $this\n            ->members()\n            ->has('character')\n            ->with(['character', 'character.entity'])\n            ->whereIn('pin_id', [\n                OrganisationMemberPin::organisation,\n                OrganisationMemberPin::both,\n            ])\n            ->orderBy('role');\n    }\n\n    /**\n     * @return HasMany<OrganisationMember, $this>\n     */\n    public function members(): HasMany\n    {\n        return $this->hasMany('App\\Models\\OrganisationMember', 'organisation_id', 'id');\n    }\n\n    /**\n     * Get all characters in the organisation and descendants\n     */\n    public function allMembers()\n    {\n        $organisationId = $this->organisationAndDescendantIds();\n\n        return OrganisationMember::whereIn('organisation_member.organisation_id', $organisationId)\n            ->with('character')\n            ->has('character.entity');\n    }\n\n    public function allMembersCount(): int\n    {\n        if (isset($this->allMembersCount)) {\n            return $this->allMembersCount;\n        }\n\n        return $this->allMembersCount = $this->allMembers()->count();\n    }\n\n    /**\n     * Get a list of this organisation and descendant ids\n     */\n    public function organisationAndDescendantIds(): array\n    {\n        if (! isset($this->organisationAndDescendantIds)) {\n            $this->organisationAndDescendantIds = [$this->id];\n            foreach ($this->entity->descendants as $descendant) {\n                $this->organisationAndDescendantIds[] = $descendant->entity_id;\n            }\n        }\n\n        return $this->organisationAndDescendantIds;\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        // Pivot tables can be deleted directly\n        $this->members()->delete();\n        $this->entity->locations()->detach();\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.organisation');\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if ($this->entity->elapsedEvents->isNotEmpty() || $this->entity->locations->isNotEmpty()) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'locations',\n            'member_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/OrganisationMember.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\OrganisationMemberPin;\nuse App\\Enums\\OrganisationMemberStatus;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Privatable;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class OrganisationMember\n *\n * @property int $id\n * @property int $character_id\n * @property int $organisation_id\n * @property int $parent_id\n * @property string $role\n * @property bool|int $is_private\n * @property OrganisationMemberPin $pin_id\n * @property OrganisationMemberStatus $status_id\n * @property ?Character $character\n * @property ?Organisation $organisation\n * @property ?OrganisationMember $parent\n */\nclass OrganisationMember extends Model\n{\n    use HasFilters;\n    use Paginatable;\n    use Privatable;\n    use Sanitizable;\n    use SortableTrait;\n\n    public $entityType = 'character';\n\n    public $aclFieldName = 'character_id';\n\n    public $table = 'organisation_member';\n\n    protected $filterableColumns = ['organisation_id'];\n\n    protected $fillable = [\n        'organisation_id',\n        'character_id',\n        'role',\n        'is_private',\n        'pin_id',\n        'status_id',\n        'parent_id',\n    ];\n\n    protected array $sortable = [\n        'organisation.name',\n        'character.name',\n        'parent_id',\n        'role',\n        // 'character.location.name',\n    ];\n\n    protected array $sanitizable = [\n        'role',\n    ];\n\n    public $casts = [\n        'status_id' => OrganisationMemberStatus::class,\n        'pin_id' => OrganisationMemberPin::class,\n    ];\n\n    /**\n     * @return BelongsTo<Character, $this>\n     */\n    public function character(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Character', 'character_id');\n    }\n\n    /**\n     * @return BelongsTo<Organisation, $this>\n     */\n    public function organisation(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Organisation', 'organisation_id');\n    }\n\n    /**\n     * @return BelongsTo<OrganisationMember, $this>\n     */\n    public function parent(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\OrganisationMember', 'parent_id');\n    }\n\n    public function tags()\n    {\n        return $this->organisation->entity->visibleTags();\n    }\n\n    public function pinned(): bool\n    {\n        return ! empty($this->pin_id);\n    }\n\n    /**\n     * Determine if the member is pinned to the character\n     */\n    public function pinnedToCharacter(): bool\n    {\n        return $this->pin_id === OrganisationMemberPin::character;\n    }\n\n    /**\n     * Determine if the member is pinned to the org\n     */\n    public function pinnedToOrganisation(): bool\n    {\n        return $this->pin_id === OrganisationMemberPin::organisation;\n    }\n\n    /**\n     * Determine if the member is pinned to both the org and character\n     */\n    public function pinnedToBoth(): bool\n    {\n        return $this->pin_id === OrganisationMemberPin::both;\n    }\n\n    /**\n     * Determine if the member is inactive\n     */\n    public function inactive(): bool\n    {\n        return $this->status_id === OrganisationMemberStatus::inactive;\n    }\n\n    /**\n     * Determine if the member status is unknown\n     */\n    public function unknown(): bool\n    {\n        return $this->status_id === OrganisationMemberStatus::unknown;\n    }\n\n    public function scopePinned(Builder $query, int $pin): Builder\n    {\n        return $query->where('pin_id', $pin);\n    }\n\n    /**\n     * Datagrid2: delete name\n     */\n    public function deleteName(): string\n    {\n        return $this->character->name;\n    }\n\n    /**\n     * Foreign selected\n     */\n    public function getNameAttribute(): string\n    {\n        return $this->character->name;\n    }\n\n    /**\n     * Datagrid2: url\n     */\n    public function url(string $where): string\n    {\n        return 'characters.character_organisations.' . $where;\n    }\n\n    /**\n     * Datagrid2: route options\n     */\n    public function routeParams(array $options = []): array\n    {\n        return $options + ['character' => $this->character, 'character_organisation' => $this];\n    }\n\n    public function scopeRows(Builder $query): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $query\n            ->select('organisation_member.*')\n            ->sort(request()->only(['o', 'k']), ['c.name' => 'asc'])\n            ->with(['character', 'character.entity', 'organisation', 'organisation.entity', 'organisation.entity.locations', 'organisation.entity.locations.entity'])\n            ->has('organisation')\n            ->has('organisation.entity')\n            ->leftJoin('organisations as c', 'c.id', 'organisation_member.organisation_id');\n    }\n\n    public function getSuperiorAttribute()\n    {\n        return $this->parent?->character;\n    }\n}\n"
  },
  {
    "path": "app/Models/PasswordSecurity.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse BaconQrCode\\Renderer\\Image\\SvgImageBackEnd;\nuse BaconQrCode\\Renderer\\ImageRenderer;\nuse BaconQrCode\\Renderer\\RendererStyle\\RendererStyle;\nuse BaconQrCode\\Writer;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Auth;\nuse PragmaRX\\Google2FA\\Google2FA;\n\nclass PasswordSecurity extends Model\n{\n    use HasUser;\n\n    protected $table = 'password_securities';\n\n    protected $fillable = [\n        'user_id',\n        'google2fa_enable',\n        'google2fa_secret',\n    ];\n\n    /**\n     * Generates the QR code for 2FA\n     */\n    public function getGoogleQR()\n    {\n        if (Auth::guest()) {\n            return;\n        }\n\n        $user = Auth::user();\n\n        $google2FaUrl = '';\n\n        // If User has 2FA current disabled generate QR code\n        if (isset($user->passwordSecurity)) {\n            $google2Fa = new Google2FA;\n            // $google2Fa->setAllowInsecureCallToGoogleApis(true);\n            $appName = config('app.name');\n            if (! app()->isProduction()) {\n                $appName .= ':' . app()->environment();\n            }\n            $google2FaUrl = $google2Fa->getQRCodeUrl(\n                $appName,\n                $user->email,\n                $user->passwordSecurity->google2fa_secret\n            );\n        }\n        $renderer = new ImageRenderer(\n            new RendererStyle(200),\n            new SvgImageBackEnd\n        );\n        $writer = new Writer($renderer);\n\n        return $writer->writeString($google2FaUrl);\n    }\n}\n"
  },
  {
    "path": "app/Models/Playstyle.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\n\nclass Playstyle extends Model\n{\n    use HasFactory;\n\n    protected $fillable = [\n        'slug',\n        'campaign_count',\n    ];\n\n    /**\n     * @return BelongsToMany<Campaign, $this>\n     */\n    public function campaigns(): BelongsToMany\n    {\n        return $this->belongsToMany(Campaign::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Pledge.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nclass Pledge\n{\n    public const string KOBOLD = 'Kobold';\n\n    public const string GOBLIN = 'Goblin';\n\n    public const string OWLBEAR = 'Owlbear';\n\n    public const string WYVERN = 'Wyvern';\n\n    public const string ELEMENTAL = 'Elemental';\n\n    /** @var string Role name for subscribers. For legacy reasons, called Patreon. */\n    public const string ROLE = 'patreon';\n}\n"
  },
  {
    "path": "app/Models/Plugin.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class Plugin\n *\n * @property int $id\n * @property string $uuid\n * @property int $type_id\n * @property int $status_id\n * @property ?int $created_by\n * @property string $name\n * @property bool|int $is_obsolete\n * @property PluginVersion[]|Collection $versions\n * @property PluginVersion $version\n *\n * @method static self|Builder highlighted(string $uuid)\n */\nclass Plugin extends Model\n{\n    use HasUser;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected string $userField = 'created_by';\n\n    protected ?PluginVersion $cachedHasUpdate;\n\n    public $sortable = [\n        'name',\n        'type_id',\n        'pivot_is_active',\n        'has_update',\n    ];\n\n    public function type(): string\n    {\n        if ($this->type_id == 1) {\n            return 'theme';\n        } elseif ($this->type_id == 2) {\n            return 'attribute';\n        }\n\n        return 'pack';\n    }\n\n    public function hasUpdate(bool $withDraft = false): bool\n    {\n        if (isset($this->cachedHasUpdate)) {\n            return ! empty($this->cachedHasUpdate);\n        }\n\n        $statuses = [3];\n        if ($withDraft) {\n            $statuses[] = 1;\n        }\n\n        $this->cachedHasUpdate = $this\n            ->versions\n            ->whereIn('status_id', $statuses)\n            ->where('id', '>', $this->pivot->plugin_version_id) // @phpstan-ignore-line\n            ->last();\n\n        return ! empty($this->cachedHasUpdate);\n    }\n\n    public function updateVersionNumber(): string\n    {\n        return $this->cachedHasUpdate->version ?? '0.0.0';\n    }\n\n    /**\n     * @return HasMany<PluginVersion, $this>\n     */\n    public function versions(): HasMany\n    {\n        return $this->hasMany(PluginVersion::class);\n    }\n\n    public function scopePreparedSelect(Builder $builder): Builder\n    {\n        $update = 'null';\n        if (auth()->check()) {\n            $update = 'CASE WHEN (\n                    SELECT upd.id\n                    FROM plugin_versions AS upd\n                    WHERE upd.plugin_id = ' . $this->getTable() . '.id AND\n                    (upd.status_id = 3 OR (upd.status_id in (1,3) AND ' . $this->getTable() . '.created_by = ' . auth()->user()->id . ')) AND\n                    upd.id > campaign_plugins.plugin_version_id\n                    LIMIT 1\n                ) IS NOT NULL THEN 1 ELSE 0 END AS has_update';\n        }\n\n        return $builder\n            ->distinct()\n            ->select([\n                $this->getTable() . '.*',\n                DB::raw($update),\n            ]);\n    }\n\n    public function author(): string\n    {\n        if (empty($this->user)) {\n            return __('crud.users.unknown');\n        }\n        if (! empty($this->user->settings['marketplace_name'])) {\n            return e($this->user->settings['marketplace_name']);\n        }\n\n        return e($this->user->name);\n    }\n\n    public function isContentPack(): bool\n    {\n        return $this->type_id == PluginType::TYPE_PACK;\n    }\n\n    public function isTheme(): bool\n    {\n        return $this->type_id == PluginType::TYPE_THEME;\n    }\n\n    public function isAttributeTemplate(): bool\n    {\n        return $this->type_id == PluginType::TYPE_ATTRIBUTE;\n    }\n\n    public function scopeHighlighted(Builder $query, ?string $uuid = null): Builder\n    {\n        if (empty($uuid) || ! Str::isUuid($uuid)) {\n            return $query;\n        }\n\n        return $query->orderByRaw(\n            $this->getTable() . '.uuid = ? DESC',\n            [$uuid]\n        );\n    }\n\n    public function url(string $sub): string\n    {\n        return 'campaign_plugins.' . $sub;\n    }\n\n    public function libraryUrl(): string\n    {\n        return config('marketplace.url') . '/plugins/' . $this->uuid;\n    }\n\n    /**\n     * Determine if the plugin is obsolete\n     */\n    public function obsolete(): bool\n    {\n        return $this->is_obsolete;\n    }\n}\n"
  },
  {
    "path": "app/Models/PluginType.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PluginType extends Model\n{\n    public const int TYPE_THEME = 1;\n\n    public const int TYPE_ATTRIBUTE = 2;\n\n    public const int TYPE_PACK = 3;\n}\n"
  },
  {
    "path": "app/Models/PluginVersion.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Arr;\n\n/**\n * Class PluginVersion\n *\n * @property int $id\n * @property int $plugin_id\n * @property string $uuid\n * @property string $version\n * @property string $entry\n * @property string $content\n * @property string $fonts\n * @property string $css\n * @property Carbon $updated_at\n * @property int $status_id\n * @property int $approved_by\n * @property Plugin $plugin\n * @property string|array $json\n */\nclass PluginVersion extends Model\n{\n    /**\n     * @var array<string, string>\n     */\n    protected $casts = [\n        'json' => 'array',\n    ];\n\n    /**\n     * Get the attributes (stored in the JSON)\n     */\n    public function getAttributesAttribute(): array\n    {\n        return Arr::get($this->json, 'attributes', []);\n    }\n\n    /**\n     * Get the CSS (stored in the JSON)\n     */\n    public function getCssAttribute(): string\n    {\n        return Arr::get($this->json, 'css', '');\n    }\n\n    /**\n     * Get the translations (stored in the JSON)\n     */\n    public function getTranslationsAttribute(): array\n    {\n        return Arr::get($this->json, 'translations', []);\n    }\n\n    public function css(): string\n    {\n        return (string) $this->css;\n    }\n\n    public function scopePublishedVersions(Builder $query, bool $withDrafts = false): Builder\n    {\n        $ids = [3];\n        if ($withDrafts) {\n            $ids[] = 1;\n        }\n\n        return $query->whereIn('status_id', $ids);\n    }\n\n    /**\n     * @return HasMany<PluginVersionEntity, $this>\n     */\n    public function entities(): HasMany\n    {\n        return $this->hasMany(PluginVersionEntity::class);\n    }\n\n    /**\n     * Determine if the current version is a draft\n     */\n    public function isDraft(): bool\n    {\n        return $this->status_id === 1;\n    }\n}\n"
  },
  {
    "path": "app/Models/PluginVersionEntity.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class PluginVersionEntity\n *\n * @property int $id\n * @property string $name\n * @property int $plugin_version_id\n * @property int $type_id\n * @property string $image_path\n * @property string $entry\n * @property array $fields\n * @property array $related\n * @property array $posts\n * @property string $uuid\n * @property EntityType $type\n * @property PluginVersion $version\n */\nclass PluginVersionEntity extends Model\n{\n    public $casts = [\n        'fields' => 'array',\n        'related' => 'array',\n        'posts' => 'array',\n    ];\n\n    /**\n     * @return BelongsTo<PluginVersion, $this>\n     */\n    public function version(): BelongsTo\n    {\n        return $this->belongsTo(PluginVersion::class, 'plugin_version_id');\n    }\n\n    /**\n     * @return BelongsTo<EntityType, $this>\n     */\n    public function type(): BelongsTo\n    {\n        return $this->belongsTo(EntityType::class, 'type_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Post.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\EntityEventTypes;\nuse App\\Enums\\Visibility;\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasEntry;\nuse App\\Models\\Concerns\\HasLocation;\nuse App\\Models\\Concerns\\HasReminder;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Models\\Concerns\\Taggable;\nuse App\\Models\\Concerns\\Templatable;\nuse App\\Models\\Concerns\\TouchSilently;\nuse App\\Services\\MentionsService;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphOne;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Laravel\\Scout\\Searchable;\n\n/**\n * Class Post\n *\n * @property int $id\n * @property int $entity_id\n * @property string $name\n * @property string $value\n * @property string $entry\n * @property Visibility $visibility_id\n * @property ?int $layout_id\n * @property ?string $marketplace_uuid\n * @property int $deleted_by\n * @property bool|int $is_template\n * @property int $position\n * @property array $settings\n * @property ?Entity $entity\n * @property PostLayout|null $layout\n * @property EntityMention[]|Collection $mentions\n * @property PostPermission[]|Collection $permissions\n * @property ImageMention[]|Collection $imageMentions\n * @property PostTag[] $postTags\n * @property Carbon $deleted_at\n *\n * @method static Builder|self pinned()\n */\nclass Post extends Model\n{\n    use Acl;\n    use Blameable;\n    use HasEntry;\n    use HasFactory;\n    use HasLocation;\n    use HasReminder;\n    use HasVisibility;\n    use Paginatable;\n    use Sanitizable;\n    use Searchable;\n    use SoftDeletes;\n    use SortableTrait;\n    use Taggable;\n    use Templatable;\n    use TouchSilently;\n\n    protected $fillable = [\n        'entity_id',\n        'name',\n        'entry',\n        'created_by',\n        'is_pinned',\n        'position',\n        'visibility_id',\n        'settings',\n        'location_id',\n        'layout_id',\n        'is_template',\n    ];\n\n    /** @var string[] Fields that can be used to order by */\n    protected array $sortable = [\n        'name',\n        'deleted_at',\n    ];\n\n    /** @var array<string, string> */\n    public $casts = [\n        'settings' => 'array',\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id');\n    }\n\n    /**\n     * @return BelongsTo<PostLayout, $this>\n     */\n    public function layout(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\PostLayout', 'layout_id');\n    }\n\n    /**\n     * @return HasMany<PostPermission, $this>\n     */\n    public function permissions(): HasMany\n    {\n        return $this->hasMany(PostPermission::class, 'post_id', 'id');\n    }\n\n    /**\n     * List of entities that mention this entity\n     *\n     * @return HasMany<EntityMention, $this>\n     */\n    public function mentions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\EntityMention', 'post_id', 'id');\n    }\n\n    /**\n     * List of images that mention this entity\n     *\n     * @return HasMany<ImageMention, $this>\n     */\n    public function imageMentions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\ImageMention', 'post_id', 'id');\n    }\n\n    /**\n     * Copy a post to another target\n     */\n    public function copyTo(Entity $target, bool $sameCampaign): Post\n    {\n        $without = ['entity_id', 'created_by', 'updated_by', 'is_template'];\n        if (! $sameCampaign) {\n            $without[] = 'location_id';\n        }\n        $new = $this->replicate($without);\n        $new->entity_id = $target->id;\n        $new->created_by = auth()->user()->id;\n        /** @var MentionsService $mentionsService */\n        $mentionsService = app()->make(MentionsService::class);\n\n        $newEntry = $mentionsService->mapCopiedEntry($new->entry);\n        $new->entry = $newEntry;\n        $new->saveQuietly();\n\n        if (! $sameCampaign) {\n            return $new;\n        }\n        foreach ($this->permissions as $perm) {\n            $newPerm = $perm->replicate(['post_id']);\n            $newPerm->post_id = $new->id;\n            $newPerm->save();\n        }\n        foreach ($this->postTags as $tag) {\n            $newTag = $tag->replicate(['post_id']);\n            $newTag->post_id = $new->id;\n            $newTag->save();\n        }\n\n        return $new;\n    }\n\n    /**\n     * @return HasMany<PostTag, $this>\n     */\n    public function postTags(): HasMany\n    {\n        return $this->hasMany(PostTag::class, 'post_id', 'id');\n    }\n\n    public function export(): array\n    {\n        $post = $this->toArray();\n        if (array_key_exists('post_tags', $post)) {\n            foreach ($post['post_tags'] as $postTag) {\n                $post['postTags'][] = ['tag_id' => $postTag['tag_id']];\n            }\n            unset($post['post_tags']);\n        }\n\n        return $post;\n    }\n\n    public function scopeOrdered(Builder $query): Builder\n    {\n        return $query\n            ->orderBy('position');\n    }\n\n    public function collapsed(): bool\n    {\n        return Arr::get($this->settings, 'collapsed', false);\n    }\n\n    /**\n     * @return BelongsToMany<\n     *     User,\n     *     $this,\n     *     EntityUser\n     * >\n     */\n    public function editingUsers(): BelongsToMany\n    {\n        return $this->belongsToMany(User::class, 'entity_user', 'post_id')\n            ->using(EntityUser::class)\n            ->withPivot('type_id');\n    }\n\n    /**\n     * Get the value used to index the model.\n     */\n    public function getScoutKey()\n    {\n        return $this->getTable() . '_' . $this->id;\n    }\n\n    /**\n     * Get the name of the index associated with the model.\n     */\n    public function searchableAs(): string\n    {\n        return 'entities';\n    }\n\n    protected function makeAllSearchableUsing($query)\n    {\n        return $query\n            ->select([$this->getTable() . '.*', 'entities.id as entity_id', 'entities.campaign_id as campaign_id'])\n            ->leftJoin('entities', $this->getTable() . '.entity_id', '=', 'entities.id')\n            ->has('entity')\n            ->with('entity');\n    }\n\n    public function toSearchableArray()\n    {\n        if (! $this->entity) {\n            return [];\n        }\n\n        return [\n            'campaign_id' => $this->entity->campaign_id,\n            'entity_id' => $this->entity_id,\n            'name' => $this->name,\n            'type' => 'post',\n            'entry' => strip_tags($this->entry),\n        ];\n    }\n\n    /**\n     * @return MorphMany<Reminder, $this>\n     */\n    public function reminders(): MorphMany\n    {\n        return $this->morphMany(Reminder::class, 'remindable');\n    }\n\n    /**\n     * @return MorphMany<EntityLog, $this>\n     */\n    public function logs(): MorphMany\n    {\n        return $this->morphMany(EntityLog::class, 'parent');\n    }\n\n    /**\n     * Calendar Date Events are used by Journals and Quests to link them directly to a calendar\n     */\n    public function calendarDateEvents(): MorphMany\n    {\n        return $this->reminders()\n            ->with('calendar')\n            ->has('calendar')\n            ->calendarDate();\n    }\n\n    /**\n     * @return MorphOne<Reminder, $this>\n     */\n    public function calendarDate(): MorphOne\n    {\n        return $this->morphOne(Reminder::class, 'remindable')\n            ->with('calendar')\n            ->has('calendar')\n            ->where('type_id', EntityEventTypes::calendarDate);\n    }\n\n    public function elapsedEvents(): MorphMany\n    {\n        return $this->reminders()->with('calendar')->whereNotNull('type_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/PostLayout.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class PostLayout\n *\n * @property int $id\n * @property int $entity_type_id\n * @property string $code\n * @property array $config\n * @property EntityType|null $entityType\n *\n * @method static self|Builder entity(EntityType $entityType)\n */\nclass PostLayout extends Model\n{\n    protected $fillable = [\n        'code',\n        'entity_type_id',\n        'config',\n    ];\n\n    /**\n     * @return BelongsTo<EntityType, $this>\n     */\n    public function entityType(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\EntityType', 'entity_type_id', 'id');\n    }\n\n    public function scopeEntity(Builder $query, EntityType $entityType): Builder\n    {\n        if (! $entityType->isNested()) {\n            $query->where('code', '!=', 'children');\n        }\n\n        return $query->where(function ($sub) use ($entityType) {\n            $sub->whereNull('entity_type_id')\n                ->orWhere('entity_type_id', $entityType->id);\n        });\n    }\n\n    public function name(): string\n    {\n        if (in_array($this->code, ['abilities', 'inventory', 'reminders'])) {\n            return __('crud.tabs.' . $this->code);\n        } elseif ($this->code === 'attributes') {\n            return __('entries/tabs.properties');\n        } elseif ($this->code === 'assets') {\n            return __('entries/tabs.media');\n        } elseif ($this->code === 'entry') {\n            return __('crud.fields.' . $this->code);\n        } elseif ($this->code === 'children') {\n            return __('tags.fields.' . $this->code);\n        }\n\n        return __('post_layouts.' . $this->code);\n    }\n}\n"
  },
  {
    "path": "app/Models/PostPermission.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class PostPermission\n *\n * @property int $id\n * @property int $post_id\n * @property int $role_id\n * @property int $permission\n * @property Post $post\n */\nclass PostPermission extends Model\n{\n    use HasUser;\n\n    public $fillable = [\n        'user_id',\n        'role_id',\n        'post_id',\n        'permission',\n    ];\n\n    /**\n     * @return BelongsTo<CampaignRole, $this>\n     */\n    public function role(): BelongsTo\n    {\n        return $this->belongsTo(CampaignRole::class);\n    }\n\n    /**\n     * @return BelongsTo<Post, $this>\n     */\n    public function post(): BelongsTo\n    {\n        return $this->belongsTo(Post::class, 'post_id', 'id');\n    }\n\n    public function permText(): string\n    {\n        if ($this->permission == 0) {\n            return __('crud.view');\n        } elseif ($this->permission == 2) {\n            return __('crud.permissions.actions.bulk.deny');\n        }\n\n        return __('crud.update');\n    }\n\n    public function scopeOnlyUsers($query)\n    {\n        return $query->whereNotNull('user_id');\n    }\n\n    public function scopeOnlyRoles($query)\n    {\n        return $query->whereNotNull('role_id');\n    }\n\n    public function isUser(): bool\n    {\n        return ! empty($this->user_id);\n    }\n}\n"
  },
  {
    "path": "app/Models/PostTag.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class PostTag\n *\n * @property int $post_id\n * @property int $tag_id\n * @property Tag $tag\n * @property Post $post\n */\nclass PostTag extends Model\n{\n    use HasFactory;\n\n    public $table = 'post_tag';\n\n    protected $fillable = [\n        'post_id',\n        'tag_id',\n    ];\n\n    /**\n     * @return BelongsTo<Tag, $this>\n     */\n    public function tag(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Tag', 'tag_id');\n    }\n\n    /**\n     * @return BelongsTo<Post, $this>\n     */\n    public function post(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Post', 'post_id');\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'tag_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/Preset.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property string $name\n * @property array $config\n * @property int $type_id\n * @property PresetType $type\n *\n * @method static Builder|self inType(int $type)\n */\nclass Preset extends Model\n{\n    use Blameable;\n    use HasCampaign;\n    use HasVisibility;\n    use Sanitizable;\n\n    public $fillable = [\n        'name',\n        'type_id',\n        'config',\n        'visibility_id',\n        'campaign_id',\n    ];\n\n    public $casts = [\n        'config' => 'array',\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * @return BelongsTo<PresetType, $this>\n     */\n    public function type(): BelongsTo\n    {\n        return $this->belongsTo(PresetType::class);\n    }\n\n    public function scopeInType(Builder $builder, int $type): Builder\n    {\n        return $builder->where('type_id', $type);\n    }\n}\n"
  },
  {
    "path": "app/Models/PresetType.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property int $id\n * @property string $code\n */\nclass PresetType extends Model\n{\n    public const int MARKER = 1;\n}\n"
  },
  {
    "path": "app/Models/Quest.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\FilterOption;\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasLocation;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Collection;\n\n/**\n * Class Quest\n *\n * @property ?int $instigator_id\n * @property ?int $location_id\n * @property string $date\n * @property ?Location $location\n * @property ?Entity $instigator\n * @property QuestElement[]|Collection $elements\n */\nclass Quest extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use HasLocation;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'campaign_id',\n        'name',\n        'is_private',\n        'instigator_id',\n        'location_id',\n        'date',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'date',\n        'type',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'date',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'date',\n        'instigator.name',\n        'calendar_date',\n        'location.name',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'instigator_id',\n        'location_id',\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [\n        'elements',\n    ];\n\n    protected array $apiWith = [\n        'entity.calendarDate',\n        'elements',\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'instigator_id',\n        'location_id',\n        'date',\n    ];\n\n    public function scopeFilteredQuests(Builder $query): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $query\n            ->select(['id', 'name', 'location_id', 'is_private'])\n            ->sort(request()->only(['o', 'k']), ['name' => 'asc'])\n            ->with([\n                'location', 'location.entity',\n                'elements',\n                'entity', 'entity.tags', 'entity.tags.entity', 'entity.image'])\n            ->has('entity');\n    }\n\n    /**\n     * Filter quests on specific elements (entities)\n     */\n    public function scopeElement(Builder $query, ?string $value, FilterOption $filter): Builder\n    {\n        // \"none\" filter keys is handled later\n        if ($filter === FilterOption::NONE) {\n            if (! empty($value)) {\n                return $query;\n            }\n\n            return $query\n                ->select($this->getTable() . '.*')\n                ->leftJoin('quest_elements as qe2', function ($join) {\n                    $join->on('qe2.quest_id', '=', $this->getTable() . '.id');\n                })\n                ->where('qe2.entity_id', null);\n        } elseif ($filter === FilterOption::EXCLUDE) {\n            return $query\n                ->whereRaw('(select count(*) from quest_elements as qe where qe.quest_id = ' .\n                    $this->getTable() . '.id and qe.entity_id = ' . ((int) $value) . ') = 0');\n        }\n        $ids = [$value];\n\n        return $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin('quest_elements as qe', function ($join) {\n                $join->on('qe.quest_id', '=', $this->getTable() . '.id');\n            })->whereIn('qe.entity_id', $ids)->distinct();\n    }\n\n    /**\n     * Filter quests on specific element roles\n     */\n    public function scopeElementRole(Builder $query, string $value, string $operator): Builder\n    {\n        // No attribute with this name\n        if ($operator === 'not like') {\n            return $query\n                ->whereRaw('(select count(*) from quest_elements as qe where qe.quest_id =' . $this->getTable() . '.id and qe.role = \\''\n                    . mb_ltrim($value, '!') . '\\') = 0');\n        }\n\n        return $query\n            ->select($this->getTable() . '.*')\n            ->leftJoin('quest_elements as qe', function ($join) {\n                $join->on('qe.quest_id', '=', $this->getTable() . '.id');\n            })\n            ->where('qe.role', $value);\n    }\n\n    public function shortDescription()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The Quest Giver\n     *\n     * @return BelongsTo<Entity, $this>\n     */\n    public function instigator(): BelongsTo\n    {\n        return $this->belongsTo(Entity::class);\n    }\n\n    /**\n     * The Starting location\n     *\n     * @return BelongsTo<Location, $this>\n     */\n    public function location(): BelongsTo\n    {\n        return $this->belongsTo(Location::class);\n    }\n\n    /**\n     * Elements of the quest\n     *\n     * @return HasMany<QuestElement, $this>\n     */\n    public function elements(): HasMany\n    {\n        return $this->hasMany(QuestElement::class)\n            ->with(['entity', 'entity.image']);\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        foreach ($this->elements as $child) {\n            $child->delete();\n        }\n        $this->instigator_id = null;\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.quest');\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if (\n            $this->instigator ||\n            ! empty($this->date) || ! empty($this->entity->calendarReminder()) || ! empty($this->location)\n        ) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'date',\n            'instigator_id',\n            'date_start',\n            'location_id',\n            'date_end',\n            'quest_element_id',\n            'element_role',\n        ];\n    }\n\n    /**\n     * Grid mode sortable fields\n     */\n    public function datagridSortableColumns(): array\n    {\n        $columns = [\n            'name' => __('crud.fields.name'),\n            'type' => __('crud.fields.type'),\n            'calendar_date' => __('crud.fields.calendar_date'),\n        ];\n\n        if (auth()->check() && auth()->user()->isAdmin()) {\n            $columns['is_private'] = __('crud.fields.is_private');\n        }\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Models/QuestElement.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\QuestCache;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasEntry;\nuse App\\Models\\Concerns\\HasSuggestions;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SimpleSortableTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Laravel\\Scout\\Searchable;\n\n/**\n * Class QuestCharacter\n *\n * @property int $entity_id\n * @property string $name\n * @property int $quest_id\n * @property string $entry\n * @property string $role\n * @property string $colour\n * @property bool|int $copy_entity_entry\n * @property Quest|null $quest\n * @property ?Entity $entity\n */\nclass QuestElement extends Model\n{\n    use Blameable;\n    use HasEntry;\n    use HasFactory;\n    use HasSuggestions;\n    use HasVisibility;\n    use Sanitizable;\n    use Searchable;\n    use SimpleSortableTrait;\n\n    protected $fillable = [\n        'quest_id',\n        'name',\n        'entity_id',\n        'entry',\n        'copy_entity_entry',\n        'role',\n        'colour',\n        'visibility_id',\n    ];\n\n    public $casts = [\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'role',\n        'colour',\n    ];\n\n    protected array $suggestions = [\n        QuestCache::class => 'clearSuggestion',\n    ];\n\n    /**\n     * @return BelongsTo<Quest, $this>\n     */\n    public function quest(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Quest', 'quest_id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'entity_id');\n    }\n\n    public function colourClass(): string\n    {\n        if (empty($this->colour)) {\n            return 'bg-none';\n        }\n\n        return $this->colour == 'grey' ? 'bg-gray' : 'bg-' . $this->colour;\n    }\n\n    public function name(): string\n    {\n        if (empty($this->name) && $this->entity) {\n            return $this->entity->name;\n        }\n\n        return (string) $this->name;\n    }\n\n    /**\n     * For the legacy editor\n     */\n    public function hasEntity(): bool\n    {\n        return false;\n    }\n\n    /**\n     * List of entities that mention this entity\n     *\n     * @return HasMany<EntityMention, $this>\n     */\n    public function mentions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\EntityMention', 'quest_element_id', 'id');\n    }\n\n    /**\n     * @return BelongsToMany<\n     *     User,\n     *     $this,\n     *     EntityUser\n     * >\n     */\n    public function editingUsers(): BelongsToMany\n    {\n        return $this->belongsToMany(User::class, 'entity_user')\n            ->using(EntityUser::class)\n            ->withPivot('type_id');\n    }\n\n    /**\n     * Get the value used to index the model.\n     */\n    public function getScoutKey()\n    {\n        return $this->getTable() . '_' . $this->id;\n    }\n\n    /**\n     * Get the name of the index associated with the model.\n     */\n    public function searchableAs(): string\n    {\n        return 'entities';\n    }\n\n    protected function makeAllSearchableUsing($query)\n    {\n        return $query\n            ->select([$this->getTable() . '.*', 'entities.id as entity_id'])\n            ->leftJoin('quests', 'quests.id', '=', 'quest_elements.quest_id')\n            ->leftJoin('entities', function ($join) {\n                $join->on('entities.entity_id', $this->getTable() . '.id');\n            })\n            ->has('quest')\n            ->has('quest.entity')\n            ->with('quest', 'quest.entity');\n    }\n\n    public function toSearchableArray()\n    {\n        if (! $this->quest || ! $this->quest->entity) {\n            return [];\n        }\n\n        return [\n            'campaign_id' => $this->quest->entity->campaign_id,\n            'entity_id' => $this->quest->entity->id,\n            'name' => $this->name,\n            'type' => 'quest_element',\n            'entry' => strip_tags($this->entry),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/Race.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Race\n *\n * @property bool|int $is_extinct\n * @property Collection|CharacterRace[] $characterRaces\n */\nclass Race extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    protected $fillable = [\n        'name',\n        'campaign_id',\n        'is_private',\n        'is_extinct',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n        'is_extinct',\n        'type',\n    ];\n\n    protected array $sortableColumns = [\n        'is_extinct',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'is_extinct',\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * Characters belonging to this race\n     */\n    public function characters(): BelongsToMany\n    {\n        $query = $this->belongsToMany('App\\Models\\Character', 'character_race');\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->wherePivot('is_private', false);\n        }\n\n        return $query;\n    }\n\n    /**\n     * @return HasMany<CharacterRace, $this>\n     */\n    public function characterRaces(): HasMany\n    {\n        return $this->hasMany(CharacterRace::class, 'race_id')\n            ->with(['character', 'character.entity']);\n    }\n\n    /**\n     * Get all characters in the race and descendants\n     */\n    public function allCharacters()\n    {\n        $raceIds = [$this->id];\n        foreach ($this->entity->descendants as $descendant) {\n            $raceIds[] = $descendant->entity_id;\n        }\n\n        $query = Character::select('characters.*')\n            ->distinct('characters.id')\n            ->leftJoin('character_race as cr', function ($join) {\n                $join->on('cr.character_id', '=', 'characters.id');\n            })\n            ->whereIn('cr.race_id', $raceIds);\n\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $query->where('cr.is_private', false);\n        }\n\n        return $query;\n    }\n\n    /**\n     * Get all characters in the race and descendants\n     */\n    public function allCharacterRaces()\n    {\n        $raceIds = [$this->id];\n        foreach ($this->entity->descendants as $descendant) {\n            $raceIds[] = $descendant->entity_id;\n        }\n        $model = new CharacterRace;\n\n        return CharacterRace::groupBy('character_id')\n            ->distinct('character_id')\n            ->whereIn($model->getTable() . '.race_id', $raceIds)->with('character');\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.race');\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'locations',\n        ];\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if ($this->entity->locations->isNotEmpty()) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Determine if the model is extinct.\n     */\n    public function isExtinct(): bool\n    {\n        return (bool) $this->is_extinct;\n    }\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        // Pivot tables can be deleted directly\n        $this->characters()->detach();\n        $this->entity->locations()->detach();\n    }\n}\n"
  },
  {
    "path": "app/Models/Referral.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasTimestamps;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property int $id\n * @property string $code\n * @property Carbon $created_at\n * @property Carbon $revoked_at\n */\nclass Referral extends Model\n{\n    use HasTimestamps;\n    use HasUser;\n\n    public function getRouteKeyName()\n    {\n        return 'code';\n    }\n\n    public $fillable = [\n        'user_id',\n        'code',\n    ];\n}\n"
  },
  {
    "path": "app/Models/ReferralEvent.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\ReferralEventType;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasTimestamps;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property int $id\n * @property ?int $created_by\n * @property ?int $referred_by\n * @property ReferralEventType $type\n */\nclass ReferralEvent extends Model\n{\n    use HasTimestamps;\n\n    public $fillable = [\n        'created_by',\n        'referred_by',\n        'type',\n    ];\n\n    public $casts = [\n        'type' => ReferralEventType::class,\n    ];\n}\n"
  },
  {
    "path": "app/Models/Relation.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Orderable;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\Searchable;\nuse App\\Models\\Concerns\\Sortable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Models\\Scopes\\Pinnable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class Relation\n *\n * @property int $id\n * @property string $relation\n * @property int $attitude\n * @property ?int $mirror_id\n * @property int $owner_id\n * @property int $target_id\n * @property bool|int $is_pinned\n * @property string $colour\n * @property string $marketplace_uuid\n * @property Relation|null $mirror\n * @property ?Entity $target\n * @property Entity $owner\n * @property int $created_at\n * @property int $updated_at\n */\nclass Relation extends Model\n{\n    use Blameable;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use HasVisibility;\n    use Orderable;\n    use Paginatable;\n    use Pinnable;\n    use Sanitizable;\n    use Searchable;\n    use Sortable;\n    use SortableTrait;\n\n    protected $fillable = [\n        'campaign_id',\n        'owner_id',\n        'target_id',\n        'relation',\n        'visibility_id',\n        'mirror_id',\n        'attitude',\n        'is_pinned',\n        'colour',\n    ];\n\n    protected array $sortable = [\n        'owner',\n        'owner.name',\n        'relation',\n        'target.name',\n        'attitude',\n        'visibility_id',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    public array $sortableColumns = [\n        'owner.name',\n        'target.name',\n        'relation',\n        'attitude',\n        'is_pinned',\n        'mirror_id',\n        'visibility_id',\n    ];\n\n    public string $defaultOrderField = 'relation';\n\n    public $casts = [\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $sanitizable = [\n        'relation',\n    ];\n\n    public function scopeOrdered(Builder $query, string $order = 'asc'): Builder\n    {\n        return $query\n            ->orderBy('relation', $order)\n            ->orderBy('attitude', 'asc');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function owner(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'owner_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function target(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Entity', 'target_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Relation, $this>\n     */\n    public function mirror(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Relation', 'mirror_id', 'id');\n    }\n\n    /**\n     * Check if a relation is mirrored\n     */\n    public function isMirrored(): bool\n    {\n        return ! empty($this->mirror_id);\n    }\n\n    /**\n     * Create a mirror of the relation\n     */\n    public function createMirror(): void\n    {\n        $target = request()->get('target_relation');\n        $mirror = Relation::create([\n            'owner_id' => $this->target_id,\n            'target_id' => $this->owner_id,\n            'campaign_id' => $this->campaign_id,\n            'relation' => ! empty($target) ? $target : $this->relation,\n            'attitude' => $this->attitude,\n            'colour' => $this->colour,\n            'visibility_id' => $this->visibility_id,\n            'is_pinned' => $this->isPinned(),\n            'mirror_id' => $this->id,\n        ]);\n\n        // Update this relation to keep track of everything\n        $this->update(['mirror_id' => $mirror->id]);\n    }\n\n    /**\n     * Performance with for datagrids\n     */\n    public function scopePreparedWith(Builder $query): Builder\n    {\n        return $query\n            ->with([\n                'owner',\n                'owner.entityType',\n                'target',\n                'target.entityType',\n            ])\n            ->has('owner')\n            ->has('target');\n    }\n\n    /**\n     * Performance with for datagrids\n     */\n    public function scopePreparedSelect(Builder $query): Builder\n    {\n        $defaults = ['id', 'target_id', 'owner_id', 'relation', 'mirror_id', 'is_pinned', 'attitude', 'visibility_id', 'colour'];\n        $tableName = $this->getTable();\n        $prefixedFields = [];\n        foreach ($defaults as $field) {\n            $prefixedFields[] = $tableName . '.' . $field;\n        }\n\n        return $query->select($prefixedFields);\n    }\n\n    /**\n     * When setting the colour, remove the '#' from the db\n     *\n     * @param  string  $colour\n     */\n    public function setColourAttribute($colour)\n    {\n        $this->attributes['colour'] = mb_ltrim($colour ?? '', '#');\n    }\n\n    /**\n     * When getting the colour, remove the '#' from the db\n     */\n    public function getColourAttribute(): string\n    {\n        if (empty($this->attributes['colour'])) {\n            return '';\n        }\n\n        return '#' . $this->attributes['colour'];\n    }\n\n    /** Fake entity type ID */\n    public function entityTypeID(): int\n    {\n        return 0;\n    }\n\n    /**\n     * Functions for the datagrid2\n     */\n    public function deleteName(): string\n    {\n        return (string) $this->relation;\n    }\n\n    public function url(string $where): string\n    {\n        return 'entities.relations.' . $where;\n    }\n\n    public function routeParams(array $options = []): array\n    {\n        return $options + ['entity' => $this->owner_id, 'relation' => $this->id, 'mode' => 'table'];\n    }\n\n    public function actionDeleteConfirmOptions(): array\n    {\n        return ['mirrored' => $this->isMirrored()];\n    }\n\n    /**\n     * Relations don't use the default filterable columns available to entities\n     */\n    protected function defaultFilterableColumns(): array\n    {\n        return [];\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'name',\n            'attitude',\n            'relation',\n            'owner_id',\n            'target_id',\n            'is_pinned',\n            'is_mirrored',\n        ];\n    }\n\n    public function hasSearchableFields(): bool\n    {\n        return false;\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'id',\n            'owner_id',\n            'target_id',\n            'relation',\n            'visibility_id',\n            'mirror_id',\n            'attitude',\n            'is_pinned',\n            'colour',\n            'marketplace_uuid',\n        ];\n    }\n\n    /**\n     * On the datagrid tables, add data-* attributes to help people style with css\n     */\n    public function rowAttributes(): array\n    {\n        $attributes = [];\n        $attributes['attitude'] = $this->attitude;\n        $attributes['visibility'] = $this->visibility_id;\n\n        return $attributes;\n    }\n}\n"
  },
  {
    "path": "app/Models/Relations/CalendarRelations.php",
    "content": "<?php\n\nnamespace App\\Models\\Relations;\n\nuse App\\Models\\Calendar;\nuse App\\Models\\CalendarWeather;\nuse App\\Models\\Reminder;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Collection;\n\n/**\n * @property Collection|Reminder[] $calendarEvents\n * @property Collection|CalendarWeather[] $calendarWeather\n * @property ?Calendar $calendar\n */\ntrait CalendarRelations\n{\n    /**\n     * @return HasMany<Reminder, $this>\n     */\n    public function calendarEvents(): HasMany\n    {\n        return $this->hasMany(Reminder::class, 'calendar_id');\n    }\n\n    /**\n     * @return HasMany<CalendarWeather, $this>\n     */\n    public function calendarWeather(): HasMany\n    {\n        return $this->hasMany(CalendarWeather::class, 'calendar_id');\n    }\n\n    /**\n     * @return BelongsTo<Calendar, $this>\n     */\n    public function calendar(): BelongsTo\n    {\n        return $this->belongsTo(Calendar::class);\n    }\n\n    /**\n     * @return HasMany<Calendar, $this>\n     */\n    public function calendars(): HasMany\n    {\n        return $this->hasMany(Calendar::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Relations/CampaignRelations.php",
    "content": "<?php\n\nnamespace App\\Models\\Relations;\n\nuse App\\Enums\\CampaignExportStatus;\nuse App\\Enums\\EntityAssetType;\nuse App\\Models\\Ability;\nuse App\\Models\\Application;\nuse App\\Models\\AttributeTemplate;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Calendar;\nuse App\\Models\\CampaignDashboard;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\CampaignDescription;\nuse App\\Models\\CampaignExport;\nuse App\\Models\\CampaignFilter;\nuse App\\Models\\CampaignFlag;\nuse App\\Models\\CampaignFollower;\nuse App\\Models\\CampaignImport;\nuse App\\Models\\CampaignInvite;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignSetting;\nuse App\\Models\\CampaignStyle;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\Character;\nuse App\\Models\\Conversation;\nuse App\\Models\\Creature;\nuse App\\Models\\DiceRoll;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\EntityMention;\nuse App\\Models\\EntityType;\nuse App\\Models\\EntityUser;\nuse App\\Models\\Event;\nuse App\\Models\\Family;\nuse App\\Models\\GameSystem;\nuse App\\Models\\Genre;\nuse App\\Models\\Image;\nuse App\\Models\\Item;\nuse App\\Models\\Journal;\nuse App\\Models\\Location;\nuse App\\Models\\Map;\nuse App\\Models\\Note;\nuse App\\Models\\Organisation;\nuse App\\Models\\Playstyle;\nuse App\\Models\\Plugin;\nuse App\\Models\\Post;\nuse App\\Models\\Quest;\nuse App\\Models\\Race;\nuse App\\Models\\Relation;\nuse App\\Models\\Spotlight;\nuse App\\Models\\Tag;\nuse App\\Models\\Theme;\nuse App\\Models\\Timeline;\nuse App\\Models\\User;\nuse App\\Models\\Webhook;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\nuse Illuminate\\Support\\Collection;\n\n/**\n * Trait CampaignRelations\n *\n * @property Collection|User[] $users\n * @property Collection|User[] $followers\n * @property Collection|CampaignRole[] $roles\n * @property CampaignRole $publicRole\n * @property Collection|EntityMention[] $mentions\n * @property Collection|CampaignSetting $setting\n * @property Collection|CampaignUser[] $members\n * @property Collection|Theme[] $theme\n * @property Collection|Webhook[] $webhooks\n * @property Collection|Entity[] $entities\n * @property Collection|Character[] $characters\n * @property Collection|Location[] $locations\n * @property Collection|Image[] $images\n * @property Collection|Plugin[] $plugins\n * @property Collection|CampaignPlugin[] $campaignPlugins\n * @property Collection|CampaignDashboardWidget[] $widgets\n * @property Collection|CampaignDashboard[] $dashboards\n * @property Collection|Application[] $applications\n * @property Collection|CampaignStyle[] $styles\n * @property Collection|Genre[] $genres\n * @property Collection|GameSystem[] $systems\n * @property Collection|CampaignExport[] $campaignExports\n * @property Collection|CampaignExport[] $queuedCampaignExports\n * @property Collection|EntityType[] $entityTypes\n * @property Collection|CampaignFlag[] $flags\n * @property ?Spotlight $spotlight\n * @property ?CampaignDescription $description\n */\ntrait CampaignRelations\n{\n    /**\n     * @return BelongsToMany<\n     *     User,\n     *     $this,\n     *     CampaignUser\n     * >\n     */\n    public function users(): BelongsToMany\n    {\n        return $this->belongsToMany(User::class, 'campaign_user')->using('App\\Models\\CampaignUser');\n    }\n\n    /**\n     * @return BelongsToMany<\n     *     User,\n     *     $this,\n     *     CampaignFollower\n     * >\n     */\n    public function followers(): BelongsToMany\n    {\n        return $this\n            ->belongsToMany(User::class, 'campaign_followers')\n            ->using(CampaignFollower::class);\n    }\n\n    /**\n     * @return BelongsTo<CampaignSetting, $this>\n     */\n    public function setting(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\CampaignSetting', 'id', 'campaign_id');\n    }\n\n    /**\n     * @return HasMany<CampaignUser, $this>\n     */\n    public function members(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignUser');\n    }\n\n    /**\n     * @return HasMany<CampaignUser, $this>\n     */\n    public function nonAdminMembers(): HasMany\n    {\n        return $this\n            ->members()\n            ->withoutAdmins()\n            ->with('user');\n    }\n\n    /**\n     * @return HasMany<CampaignRole, $this>\n     */\n    public function roles(): HasMany\n    {\n        return $this->hasMany(CampaignRole::class);\n    }\n\n    public function publicRole(): HasOne\n    {\n        return $this->roles()->public()->one();\n    }\n\n    /**\n     * @return HasMany<Webhook, $this>\n     */\n    public function webhooks(): HasMany\n    {\n        return $this->hasMany(Webhook::class);\n    }\n\n    /**\n     * @return HasMany<Character, $this>\n     */\n    public function characters(): HasMany\n    {\n        return $this->hasMany(Character::class);\n    }\n\n    /**\n     * @return HasMany<Location, $this>\n     */\n    public function locations(): HasMany\n    {\n        return $this->hasMany(Location::class);\n    }\n\n    /**\n     * @return HasMany<Calendar, $this>\n     */\n    public function calendars(): HasMany\n    {\n        return $this->hasMany(Calendar::class);\n    }\n\n    /**\n     * @return HasMany<Event, $this>\n     */\n    public function events(): HasMany\n    {\n        return $this->hasMany(Event::class);\n    }\n\n    /**\n     * @return HasMany<Family, $this>\n     */\n    public function families(): HasMany\n    {\n        return $this->hasMany(Family::class);\n    }\n\n    /**\n     * @return HasMany<Item, $this>\n     */\n    public function items(): HasMany\n    {\n        return $this->hasMany(Item::class);\n    }\n\n    /**\n     * @return HasMany<Journal, $this>\n     */\n    public function journals(): HasMany\n    {\n        return $this->hasMany(Journal::class);\n    }\n\n    /**\n     * @return HasMany<Map, $this>\n     */\n    public function maps(): HasMany\n    {\n        return $this->hasMany(Map::class);\n    }\n\n    /**\n     * @return HasMany<Note, $this>\n     */\n    public function notes(): HasMany\n    {\n        return $this->hasMany(Note::class);\n    }\n\n    /**\n     * @return HasMany<Organisation, $this>\n     */\n    public function organisations(): HasMany\n    {\n        return $this->hasMany(Organisation::class);\n    }\n\n    /**\n     * @return HasMany<Quest, $this>\n     */\n    public function quests(): HasMany\n    {\n        return $this->hasMany(Quest::class);\n    }\n\n    /**\n     * @return HasMany<Ability, $this>\n     */\n    public function abilities(): HasMany\n    {\n        return $this->hasMany(Ability::class);\n    }\n\n    /**\n     * @return HasMany<AttributeTemplate, $this>\n     */\n    public function attributeTemplates(): HasMany\n    {\n        return $this->hasMany(AttributeTemplate::class);\n    }\n\n    /**\n     * @return HasMany<Tag, $this>\n     */\n    public function tags(): HasMany\n    {\n        return $this->hasMany(Tag::class);\n    }\n\n    /**\n     * @return HasMany<Timeline, $this>\n     */\n    public function timelines(): HasMany\n    {\n        return $this->hasMany(Timeline::class);\n    }\n\n    /**\n     * @return HasMany<Bookmark, $this>\n     */\n    public function bookmarks(): HasMany\n    {\n        return $this->hasMany(Bookmark::class)\n            ->with(['dashboard']);\n    }\n\n    /**\n     * @return HasMany<DiceRoll, $this>\n     */\n    public function diceRolls(): HasMany\n    {\n        return $this->hasMany(DiceRoll::class);\n    }\n\n    /**\n     * @return HasMany<Conversation, $this>\n     */\n    public function conversations(): HasMany\n    {\n        return $this->hasMany(Conversation::class);\n    }\n\n    /**\n     * @return HasMany<Race, $this>\n     */\n    public function races(): HasMany\n    {\n        return $this->hasMany(Race::class);\n    }\n\n    /**\n     * @return HasMany<Creature, $this>\n     */\n    public function creatures(): HasMany\n    {\n        return $this->hasMany(Creature::class);\n    }\n\n    public function images(): HasMany|Image\n    {\n        return $this->hasMany(Image::class)\n            ->where('is_default', false);\n    }\n\n    /**\n     * List of entities that are mentioned in the campaign's description\n     *\n     * @return HasMany<EntityMention, $this>\n     */\n    public function mentions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\EntityMention', 'campaign_id', 'id');\n    }\n\n    /**\n     * @return HasMany<Entity, $this>\n     */\n    public function entities(): HasMany\n    {\n        return $this->hasMany(Entity::class, 'campaign_id', 'id');\n    }\n\n    /**\n     * @return BelongsTo<Theme, $this>\n     */\n    public function theme(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Theme');\n    }\n\n    /**\n     * @return HasMany<Application, $this>\n     */\n    public function applications(): HasMany\n    {\n        return $this->hasMany(Application::class);\n    }\n\n    /**\n     * @return HasMany<Relation, $this>\n     */\n    public function entityRelations(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Relation');\n    }\n\n    /**\n     * @return HasManyThrough<Post, Entity, $this>\n     */\n    public function posts(): HasManyThrough\n    {\n        return $this->hasManyThrough(Post::class, Entity::class);\n    }\n\n    /**\n     * @return HasManyThrough<EntityAsset, Entity, $this>\n     */\n    public function entityAliases(): HasManyThrough\n    {\n        return $this->hasManyThrough(EntityAsset::class, Entity::class)->where('entity_assets.type_id', EntityAssetType::alias);\n    }\n\n    /**\n     * @return BelongsToMany<Plugin, $this>\n     */\n    public function plugins(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Plugin', 'campaign_plugins', 'campaign_id', 'plugin_id')\n            // ->using('App\\Models\\CampaignPlugin')\n            ->withPivot('is_active')\n            ->withPivot('plugin_version_id');\n    }\n\n    /**\n     * @return HasMany<CampaignPlugin, $this>\n     */\n    public function campaignPlugins(): HasMany\n    {\n        return $this->hasMany(CampaignPlugin::class);\n    }\n\n    /**\n     * @return HasMany<CampaignDashboardWidget, $this>\n     */\n    public function widgets(): HasMany\n    {\n        return $this->hasMany(CampaignDashboardWidget::class);\n    }\n\n    /**\n     * @return HasMany<CampaignDashboard, $this>\n     */\n    public function dashboards(): HasMany\n    {\n        return $this->hasMany(CampaignDashboard::class);\n    }\n\n    /**\n     * @return HasMany<CampaignExport, $this>\n     */\n    public function campaignExports(): HasMany\n    {\n        return $this->hasMany(CampaignExport::class);\n    }\n\n    public function queuedCampaignExports()\n    {\n        return $this->campaignExports()\n            ->whereIn('status', [\n                CampaignExportStatus::scheduled,\n                CampaignExportStatus::running,\n            ]);\n    }\n\n    /**\n     * @return HasMany<CampaignImport, $this>\n     */\n    public function campaignImports(): HasMany\n    {\n        return $this->hasMany(CampaignImport::class);\n    }\n\n    /**\n     * @return HasMany<CampaignStyle, $this>\n     */\n    public function styles(): HasMany\n    {\n        return $this->hasMany(CampaignStyle::class);\n    }\n\n    /**\n     * @return BelongsToMany<\n     *     User,\n     *     $this,\n     *     EntityUser\n     * >\n     */\n    public function editingUsers(): BelongsToMany\n    {\n        return $this->belongsToMany(User::class, 'entity_user')\n            ->using(EntityUser::class)\n            ->withPivot('type_id');\n    }\n\n    /**\n     * @return HasMany<CampaignInvite, $this>\n     */\n    public function invites(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignInvite');\n    }\n\n    /**\n     * @return BelongsToMany<Genre, $this>\n     */\n    public function genres(): BelongsToMany\n    {\n        return $this->belongsToMany(Genre::class);\n    }\n\n    /**\n     * @return BelongsToMany<GameSystem, $this>\n     */\n    public function systems(): BelongsToMany\n    {\n        return $this->belongsToMany(GameSystem::class, 'campaign_system', 'campaign_id', 'system_id');\n    }\n\n    /**\n     * @return HasMany<EntityType, $this>\n     */\n    public function entityTypes(): HasMany\n    {\n        return $this->hasMany(EntityType::class);\n    }\n\n    /**\n     * List of the campaign's flags\n     *\n     * @return HasMany<CampaignFlag, $this>\n     */\n    public function flags(): HasMany\n    {\n        return $this->hasMany(CampaignFlag::class, 'campaign_id', 'id');\n    }\n\n    /**\n     * @return HasOne<Spotlight, $this>\n     */\n    public function spotlight(): HasOne\n    {\n        return $this->hasOne(Spotlight::class);\n    }\n\n    /**\n     * @return BelongsToMany<Playstyle, $this>\n     */\n    public function playstyles(): BelongsToMany\n    {\n        return $this->belongsToMany(Playstyle::class);\n    }\n\n    /**\n     * @return HasMany<CampaignFilter, $this>\n     */\n    public function filters(): HasMany\n    {\n        return $this->hasMany(CampaignFilter::class);\n    }\n\n    /**\n     * @return HasOne<CampaignDescription, $this>\n     */\n    public function description(): HasOne\n    {\n        return $this->hasOne(CampaignDescription::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Relations/EntityRelations.php",
    "content": "<?php\n\nnamespace App\\Models\\Relations;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Enums\\EntityEventTypes;\nuse App\\Models\\Ability;\nuse App\\Models\\Attribute;\nuse App\\Models\\AttributeTemplate;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CategoryStatus;\nuse App\\Models\\Character;\nuse App\\Models\\Conversation;\nuse App\\Models\\Creature;\nuse App\\Models\\DiceRoll;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\EntityLocation;\nuse App\\Models\\EntityLog;\nuse App\\Models\\EntityTag;\nuse App\\Models\\EntityType;\nuse App\\Models\\EntityUser;\nuse App\\Models\\Event;\nuse App\\Models\\Family;\nuse App\\Models\\Image;\nuse App\\Models\\Inventory;\nuse App\\Models\\Item;\nuse App\\Models\\Journal;\nuse App\\Models\\Location;\nuse App\\Models\\Map;\nuse App\\Models\\MapMarker;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Note;\nuse App\\Models\\Organisation;\nuse App\\Models\\Post;\nuse App\\Models\\Quest;\nuse App\\Models\\QuestElement;\nuse App\\Models\\Race;\nuse App\\Models\\Relation;\nuse App\\Models\\Reminder;\nuse App\\Models\\Tag;\nuse App\\Models\\Timeline;\nuse App\\Models\\TimelineElement;\nuse App\\Models\\User;\nuse App\\Models\\Whiteboard;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphOne;\n\n/**\n * Trait EntityRelations\n *\n * @property EntityType $entityType\n * @property Conversation $conversation\n * @property Character $character\n * @property Creature $creature\n * @property AttributeTemplate $attributeTemplate\n * @property Tag $tag\n * @property Tag[]|Collection $tags\n * @property EntityTag[]|Collection $entityTags\n * @property Post[]|Collection $posts\n * @property Inventory[]|Collection $inventories\n * @property EntityAbility[]|Collection $abilities\n * @property EntityLink[]|Collection $links\n * @property CampaignDashboardWidget[]|Collection $widgets\n * @property Attribute[]|Collection $entityAttributes\n * @property EntityLocation[]|Collection $entityLocations\n * @property MiscModel|null $child\n * @property User $updater\n * @property Campaign $campaign\n * @property Map $map\n * @property Race $race\n * @property Timeline $timeline\n * @property Quest $quest\n * @property Organisation $organisation\n * @property Attribute[]|Collection $allAttributes\n * @property Attribute[]|Collection $starredAttributes\n * @property Relation[]|Collection $pinnedRelations\n * @property EntityAsset[]|Collection $pinnedFiles\n * @property EntityAsset[]|Collection $pinnedAssets\n * @property EntityAsset[]|Collection $pinnedAliases\n * @property Relation[]|Collection $relationships\n * @property Relation[]|Collection $allRelationships\n * @property Reminder[]|Collection $elapsedEvents\n * @property Reminder[]|Collection $calendarDateEvents\n * @property Reminder[]|Collection $reminders\n * @property Reminder|null $calendarDate\n * @property Image|null $image\n * @property Image|null $header\n * @property User[]|Collection $users\n * @property CampaignPermission[]|Collection $permissions\n * @property EntityAsset[]|Collection $aliases\n * @property EntityAsset[]|Collection $assets\n * @property ?Entity $parent\n * @property ?CategoryStatus $status\n */\ntrait EntityRelations\n{\n    /**\n     * @return BelongsTo<EntityType, $this>\n     */\n    public function entityType(): BelongsTo\n    {\n        return $this->belongsTo(EntityType::class, 'type_id');\n    }\n\n    /**\n     * @return HasMany<Attribute, $this>\n     */\n    public function attributes(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Attribute', 'entity_id', 'id');\n    }\n\n    public function allAttributes()\n    {\n        return $this->attributes();\n    }\n\n    /**\n     * Call $entity->entityAttributes to avoid multiple calls to the db\n     */\n    public function entityAttributes()\n    {\n        return $this->attributes()\n            ->with(['entity' => function ($sub) {\n                $sub->select('entities.id', 'entities.name');\n            }])\n            ->ordered();\n    }\n\n    /**\n     * @return HasMany<EntityLocation, $this>\n     */\n    public function entityLocations(): HasMany\n    {\n        return $this->hasMany(EntityLocation::class, 'entity_id', 'id');\n    }\n\n    /**\n     * @return HasOne<AttributeTemplate, $this>\n     */\n    public function attributeTemplate(): HasOne\n    {\n        return $this->hasOne('App\\Models\\AttributeTemplate', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Ability, $this>\n     */\n    public function ability(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Ability', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Character, $this>\n     */\n    public function character(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Character', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<DiceRoll, $this>\n     */\n    public function diceRoll(): HasOne\n    {\n        return $this->hasOne('App\\Models\\DiceRoll', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Event, $this>\n     */\n    public function event(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Event', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Family, $this>\n     */\n    public function family(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Family', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Item, $this>\n     */\n    public function item(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Item', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Journal, $this>\n     */\n    public function journal(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Journal', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Location, $this>\n     */\n    public function location(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Location', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Map, $this>\n     */\n    public function map(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Map', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Note, $this>\n     */\n    public function note(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Note', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Organisation, $this>\n     */\n    public function organisation(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Organisation', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Quest, $this>\n     */\n    public function quest(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Quest', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Calendar, $this>\n     */\n    public function calendar(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Calendar', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Tag, $this>\n     */\n    public function tag(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Tag', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Timeline, $this>\n     */\n    public function timeline(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Timeline', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Whiteboard, $this>\n     */\n    public function whiteboard(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Whiteboard', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasMany<EntityTag, $this>\n     */\n    public function entityTags(): HasMany\n    {\n        return $this->hasMany('App\\Models\\EntityTag', 'entity_id', 'id');\n    }\n\n    /**\n     * @return HasMany<Inventory, $this>\n     */\n    public function inventories(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Inventory', 'entity_id');\n    }\n\n    /**\n     * @return HasMany<TimelineElement, $this>\n     */\n    public function timelines(): HasMany\n    {\n        return $this->hasMany('App\\Models\\TimelineElement', 'entity_id');\n    }\n\n    /**\n     * @return HasMany<EntityAbility, $this>\n     */\n    public function abilities(): HasMany\n    {\n        return $this->hasMany('App\\Models\\EntityAbility', 'entity_id');\n    }\n\n    /**\n     * @return HasMany<QuestElement, $this>\n     */\n    public function quests(): HasMany\n    {\n        return $this->hasMany('App\\Models\\QuestElement', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Conversation, $this>\n     */\n    public function conversation(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Conversation', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Race, $this>\n     */\n    public function race(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Race', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasOne<Creature, $this>\n     */\n    public function creature(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Creature', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasMany<CampaignDashboardWidget, $this>\n     */\n    public function widgets(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignDashboardWidget', 'id', 'entity_id');\n    }\n\n    /**\n     * @return HasMany<Relation, $this>\n     */\n    public function relationships(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Relation', 'owner_id', 'id');\n    }\n\n    public function allRelationships()\n    {\n        return\n            $this\n                ->relationships()\n                ->select('relations.*')\n                ->with(['target', 'target.entityType', 'owner'])\n                ->has('target')\n                ->leftJoin('entities as t', 't.id', '=', 'relations.target_id');\n    }\n\n    /**\n     * @return HasMany<Relation, $this>\n     */\n    public function targetRelationships(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Relation', 'target_id', 'id');\n    }\n\n    /**\n     * @return HasMany<Post, $this>\n     */\n    public function posts(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Post', 'entity_id', 'id');\n    }\n\n    public function files(): HasMany\n    {\n        return $this->assets()\n            ->where('type_id', 1);\n    }\n\n    public function pinnedFiles(): HasMany\n    {\n        return $this->files()\n            ->where('is_pinned', 1)\n            ->with('image');\n    }\n\n    public function pinnedAliases(): HasMany\n    {\n        return $this->aliases()\n            ->where('is_pinned', 1);\n    }\n\n    public function aliases(): HasMany\n    {\n        return $this->assets()\n            ->where('type_id', 3);\n    }\n\n    /**\n     * @return MorphMany<Reminder, $this>\n     */\n    public function reminders(): MorphMany\n    {\n        return $this->morphMany(Reminder::class, 'remindable');\n    }\n\n    /**\n     * Calendar Date Events are used by Journals and Quests to link them directly to a calendar\n     */\n    public function calendarDateEvents(): MorphMany\n    {\n        return $this->reminders()\n            ->with('calendar')\n            ->has('calendar')\n            ->calendarDate();\n    }\n\n    /**\n     * @return MorphOne<Reminder, $this>\n     */\n    public function calendarDate(): MorphOne\n    {\n        return $this->morphOne(Reminder::class, 'remindable')\n            ->with('calendar')\n            ->has('calendar')\n            ->where('type_id', EntityEventTypes::calendarDate);\n    }\n\n    public function elapsedEvents(): MorphMany\n    {\n        return $this->reminders()->with('calendar')->whereNotNull('type_id');\n    }\n\n    /**\n     * @return MorphMany<EntityLog, $this>\n     */\n    public function logs(): MorphMany\n    {\n        return $this->morphMany(EntityLog::class, 'parent');\n    }\n\n    /**\n     * @return HasMany<CampaignPermission, $this>\n     */\n    public function permissions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignPermission', 'entity_id', 'id');\n    }\n\n    /**\n     * @return HasMany<MapMarker, $this>\n     */\n    public function mapMarkers(): HasMany\n    {\n        return $this->hasMany('App\\Models\\MapMarker', 'entity_id', 'id');\n    }\n\n    /**\n     * @return HasMany<Journal, $this>\n     */\n    public function authoredJournals(): HasMany\n    {\n        return $this->hasMany(Journal::class, 'author_id', 'id');\n    }\n\n    /**\n     * Entity image stored in the gallery\n     *\n     * @return HasOne<Image, $this>\n     */\n    public function image(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Image', 'id', 'image_uuid');\n    }\n\n    /**\n     * Header image stored in the gallery\n     *\n     * @return HasOne<Image, $this>\n     */\n    public function header(): HasOne\n    {\n        return $this->hasOne('App\\Models\\Image', 'id', 'header_uuid');\n    }\n\n    /**\n     * @return EntityAsset[]|Collection\n     */\n    public function links()\n    {\n        return $this->assets\n            ->where('type_id', EntityAssetType::link);\n    }\n\n    /**\n     * @return HasMany<EntityAsset, $this>\n     */\n    public function assets(): HasMany\n    {\n        return $this->hasMany(EntityAsset::class, 'entity_id', 'id')\n            ->with('image');\n    }\n\n    public function starredAttributes()\n    {\n        return $this->entityAttributes->where('is_pinned', 1);\n    }\n\n    public function pinnedRelations(): HasMany\n    {\n        return $this->relationships()\n            ->pinned()\n            ->ordered()\n            ->with(['target', 'target.image'])\n            ->has('target');\n    }\n\n    /**\n     * @return BelongsToMany<\n     *     User,\n     *     $this,\n     *     EntityUser\n     * >\n     */\n    public function editingUsers(): BelongsToMany\n    {\n        return $this->belongsToMany(User::class)\n            ->using(EntityUser::class)\n            ->withPivot('type_id');\n    }\n\n    /**\n     * @return BelongsTo<CategoryStatus, $this>\n     */\n    public function status(): BelongsTo\n    {\n        return $this->belongsTo(CategoryStatus::class, 'status_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Relations/UserRelations.php",
    "content": "<?php\n\nnamespace App\\Models\\Relations;\n\nuse App\\Models\\Application;\nuse App\\Models\\BragiLog;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignBoost;\nuse App\\Models\\CampaignFollower;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityUser;\nuse App\\Models\\FeatureVote;\nuse App\\Models\\PasswordSecurity;\nuse App\\Models\\Plugin;\nuse App\\Models\\Role;\nuse App\\Models\\SubscriptionCancellation;\nuse App\\Models\\User;\nuse App\\Models\\UserApp;\nuse App\\Models\\UserFlag;\nuse App\\Models\\UserLog;\nuse App\\Models\\Users\\Tutorial;\nuse App\\Models\\UserValidation;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\n\n/**\n * Trait UserRelations\n *\n * @property Collection|CampaignBoost[] $boosts\n * @property Collection|CampaignRole[] $campaignRoles\n * @property Collection|Campaign[] $campaigns\n * @property Collection|Campaign[] $following\n * @property Campaign|null $lastCampaign\n * @property ?User $referrer\n * @property Collection|Application[] $applications\n * @property Collection|Entity[] $entities\n * @property Collection|Plugin[] $plugins\n * @property Collection|UserApp[] $apps\n * @property Collection|Role[] $roles\n * @property Collection|CampaignPermission[] $permissions\n * @property PasswordSecurity|null $passwordSecurity\n * @property Collection|UserFlag[] $flags\n * @property Collection|Tutorial[] $tutorials\n */\ntrait UserRelations\n{\n    /**\n     * Last campaign the user switched to.\n     *\n     * @return BelongsTo<Campaign, $this>\n     */\n    public function lastCampaign(): BelongsTo\n    {\n        return $this->belongsTo(Campaign::class, 'last_campaign_id', 'id');\n    }\n\n    /**\n     * List of campaigns the user is a member of\n     *\n     * @return BelongsToMany<\n     *     Campaign,\n     *     $this,\n     *     CampaignUser\n     * >\n     */\n    public function campaigns(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Campaign', 'campaign_user')\n            ->withPivot('created_at')\n            ->using('App\\Models\\CampaignUser');\n    }\n\n    /**\n     * List of campaigns the user is following\n     *\n     * @return BelongsToMany<\n     *     Campaign,\n     *     $this,\n     *     CampaignFollower\n     * >\n     */\n    public function following(): BelongsToMany\n    {\n        return $this->belongsToMany('App\\Models\\Campaign', 'campaign_followers')\n            ->withPivot('created_at')\n            ->using('App\\Models\\CampaignFollower');\n    }\n\n    /**\n     * @return HasManyThrough<CampaignRole, CampaignRoleUser, $this>\n     */\n    public function campaignRoles(): HasManyThrough\n    {\n        return $this->hasManyThrough(\n            'App\\Models\\CampaignRole',\n            'App\\Models\\CampaignRoleUser',\n            'user_id',\n            'id',\n            'id',\n            'campaign_role_id'\n        );\n    }\n\n    /**\n     * List of campaign roles the user is part of\n     *\n     * @return HasMany<CampaignRoleUser, $this>\n     */\n    public function campaignRoleUser(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignRoleUser');\n    }\n\n    /**\n     * List of boosts the user is giving\n     *\n     * @return HasMany<CampaignBoost, $this>\n     */\n    public function boosts(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignBoost', 'user_id', 'id');\n    }\n\n    /**\n     * List of logs the user has recently done\n     *\n     * @return HasMany<UserLog, $this>\n     */\n    public function logs(): HasMany\n    {\n        return $this->hasMany('App\\Models\\UserLog', 'user_id', 'id');\n    }\n\n    /**\n     * List of connected apps (Discord) the user has set up\n     *\n     * @return HasMany<UserApp, $this>\n     */\n    public function apps(): HasMany\n    {\n        return $this->hasMany(UserApp::class, 'user_id', 'id');\n    }\n\n    /**\n     * List of campaign permissions the user has\n     *\n     * @return HasMany<CampaignPermission, $this>\n     */\n    public function permissions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\CampaignPermission', 'user_id');\n    }\n\n    /**\n     * The referral code a user used\n     *\n     * @return BelongsTo<User, $this>\n     */\n    public function referrer(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'referred_by', 'id');\n    }\n\n    /**\n     * List of campaign applications the user is trying to join\n     *\n     * @return HasMany<Application, $this>\n     */\n    public function applications(): HasMany\n    {\n        return $this->hasMany(Application::class);\n    }\n\n    /**\n     * List of entities the user is currently editing\n     *\n     * @return BelongsToMany<\n     *     Entity,\n     *     $this,\n     *     EntityUser\n     * >\n     */\n    public function entities(): BelongsToMany\n    {\n        return $this->belongsToMany(Entity::class)\n            ->using(EntityUser::class);\n    }\n\n    /**\n     * @return HasMany<Plugin, $this>\n     */\n    public function plugins(): HasMany\n    {\n        return $this->hasMany(Plugin::class, 'created_by');\n    }\n\n    /**\n     * Return alternative User Roles.\n     *\n     * @return BelongsToMany<Role, $this>\n     */\n    public function roles(): BelongsToMany\n    {\n        return $this->belongsToMany(Role::class, 'user_roles');\n    }\n\n    /**\n     * Logs created each time a user uses Bragi\n     *\n     * @return HasMany<BragiLog, $this>\n     */\n    public function bragiLogs(): HasMany\n    {\n        return $this->hasMany(BragiLog::class);\n    }\n\n    /**\n     * List of subscription cancellations for the user\n     *\n     * @return HasMany<SubscriptionCancellation, $this>\n     */\n    public function cancellations(): HasMany\n    {\n        return $this->hasMany('App\\Models\\SubscriptionCancellation', 'user_id', 'id');\n    }\n\n    /**\n     * List of the user's flags, used to know when a user can be deleted\n     *\n     * @return HasMany<UserFlag, $this>\n     */\n    public function flags(): HasMany\n    {\n        return $this->hasMany(UserFlag::class, 'user_id', 'id');\n    }\n\n    /**\n     * List of tutorials the user has completed\n     *\n     * @return HasMany<Tutorial, $this>\n     */\n    public function tutorials(): HasMany\n    {\n        return $this->hasMany(Tutorial::class);\n    }\n\n    /**\n     * List of ideas the user has upvoted in the roadmap\n     *\n     * @return HasMany<FeatureVote, $this>\n     */\n    public function upvotes(): HasMany\n    {\n        return $this->hasMany(FeatureVote::class);\n    }\n\n    /**\n     * User email validation done\n     */\n    public function userValidation(): HasOne|UserValidation\n    {\n        return $this->hasOne(UserValidation::class, 'user_id', 'id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Reminder.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\EntityEventTypes;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Models\\Scopes\\EntityEventScopes;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphOne;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class EntityEvent\n *\n * @property int $id\n * @property int $calendar_id\n * @property int $remindable_id\n * @property string $remindable_type\n * @property string $date\n * @property int $length\n * @property string $comment\n * @property string $colour\n * @property int $day\n * @property int $month\n * @property int $year\n * @property bool|int $is_recurring\n * @property ?int $recurring_until\n * @property string $recurring_periodicity\n * @property EntityEventTypes $type_id\n * @property ?int $elapsed\n * @property ?Calendar $calendar\n * @property ?Reminder $death\n * @property ?EntityEventType $type\n * @property-read Entity|null $remindable\n *\n * @method static \\Illuminate\\Database\\Eloquent\\Builder|Reminder has($relation)\n */\nclass Reminder extends Model\n{\n    use Blameable;\n    use EntityEventScopes;\n    use HasFactory;\n    use HasVisibility;\n    use SortableTrait;\n\n    /** @var string Cached readable date */\n    protected string $readableDate;\n\n    protected $fillable = [\n        'calendar_id',\n        'length',\n        'comment',\n        'is_recurring',\n        'recurring_until',\n        'recurring_periodicity',\n        'colour',\n        'day',\n        'month',\n        'year',\n        'type_id',\n        'visibility_id',\n    ];\n\n    protected array $sortable = [\n        'remindable.name',\n        'length',\n        'is_recurring',\n        'visibility_id',\n        'comment',\n    ];\n\n    protected $casts = [\n        'type_id' => EntityEventTypes::class,\n    ];\n\n    public function remindable()\n    {\n        return $this->morphTo();\n    }\n\n    /** Last occurrence of the reminder */\n    protected int $cachedLast;\n\n    /** Next occurrence of the reminder */\n    protected int $cachedNext;\n\n    /**\n     * @return BelongsTo<Calendar, $this>\n     */\n    public function calendar(): BelongsTo\n    {\n        return $this->belongsTo(Calendar::class, 'calendar_id');\n    }\n\n    /**\n     * @return BelongsTo<EntityEventType, $this>\n     */\n    public function type(): BelongsTo\n    {\n        return $this->belongsTo(EntityEventType::class, 'type_id');\n    }\n\n    public function isPost(): bool\n    {\n        return $this->remindable instanceof Post;\n    }\n\n    public function isEntity(): bool\n    {\n        return $this->remindable instanceof Entity;\n    }\n\n    public function readableDate(): string\n    {\n        if (! isset($this->readableDate)) {\n            // Replace month with real month, and year maybe\n            $months = $this->calendar->months();\n            $years = $this->calendar->years();\n\n            try {\n                if ($this->calendar->format) {\n                    $this->readableDate = Str::replace(\n                        ['d', 's', 'y', 'm', 'M'],\n                        [$this->day, $this->calendar->suffix, $years[$this->year] ?? $this->year, $this->month, isset($months[$this->month - 1]) ? $months[$this->month - 1]['name'] : $this->month],\n                        $this->calendar->format\n                    );\n                } else {\n                    $this->readableDate = $this->day . ' ' .\n                        (isset($months[$this->month - 1]) ? $months[$this->month - 1]['name'] : $this->month) . ', ' .\n                        ($years[$this->year] ?? $this->year) . ' ' .\n                        $this->calendar->suffix;\n                }\n            } catch (Exception $e) {\n                $this->readableDate = $this->date();\n            }\n        }\n\n        return $this->readableDate;\n    }\n\n    /**\n     * Length of the event in a readable format (appends \"days\")\n     */\n    public function readableLength(): string\n    {\n        return trans_choice('calendars.fields.length_days', $this->length, ['count' => $this->length]);\n    }\n\n    public function isToday(Calendar $calendar): bool\n    {\n        return $this->date() === $calendar->date;\n    }\n\n    public function date(): string\n    {\n        return $this->year . '-' . $this->month . '-' . $this->day;\n    }\n\n    public function getLabelColour(): string\n    {\n        if (empty($this->colour) || in_array($this->colour, ['default', 'grey', '#cccccc'])) {\n            return 'colour-pallet bg-gray';\n        }\n\n        return 'colour-pallet ' . (Str::startsWith($this->colour, '#') ? '' : 'bg-' . $this->colour);\n    }\n\n    public function getLabelBackgroundColour(): string\n    {\n        if (Str::startsWith($this->colour, '#')) {\n            return $this->colour;\n        }\n\n        return '';\n    }\n\n    /**\n     * Generate the Entity Event label for the calendar\n     */\n    public function getLabel(): string\n    {\n        $label = '';\n\n        if ($this->is_recurring) {\n            $label .= '<span class=\"absolute top-1 right-1\" data-toggle=\"tooltip\" data-title=\"' . __('calendars.fields.is_recurring') . '\">\n            <i class=\"fa-solid fa-arrows-rotate\" aria-hidden=\"true\"></i>\n            </span>';\n        }\n        if ($this->comment) {\n            $label .= '<span class=\"calendar-event-comment\" data-toggle=\"tooltip\" data-title=\"'\n                . e($this->comment) . '\">' . e($this->comment) . '</span>';\n        }\n\n        return $label;\n    }\n\n    /**\n     * Check if a reminder is after the current date of a given calendar\n     */\n    public function isPast(Calendar $calendar): bool\n    {\n        // First check the year\n        if ($this->year < $calendar->currentDate('year')) {\n            return true;\n        } elseif ($this->year > $calendar->currentDate('year')) {\n            return false;\n        }\n\n        // Current year is reminder's year, check month\n        if ($this->month < $calendar->currentDate('month')) {\n            return true;\n        } elseif ($this->month > $calendar->currentDate('month')) {\n            return false;\n        }\n\n        // Current month, check on day\n        return $this->day < $calendar->currentDate('date');\n    }\n\n    public function isPastDate(int $year, int $month, int $day): bool\n    {\n        if ($this->year < $year) {\n            return true;\n        } elseif ($this->year > $year) {\n            return false;\n        }\n\n        if ($this->month < $month) {\n            return true;\n        } elseif ($this->month > $month) {\n            return false;\n        }\n\n        return $this->day <= $day;\n    }\n\n    /**\n     * Calculate the elapsed time since the event happened\n     *\n     * @return int years\n     */\n    public function calcElapsed(?Reminder $event = null): int\n    {\n        // Have the value cached? Don't bother with more work\n        if (empty($event) && ! empty($this->elapsed)) {\n            return $this->elapsed;\n        }\n\n        if (! empty($event)) {\n            $year = $event->year;\n            $month = $event->month;\n            $day = $event->day;\n        } else {\n            $year = $this->calendar->currentDate('year');\n            $month = $this->calendar->currentDate('month');\n            $day = (int) $this->calendar->currentDate('date');\n        }\n\n        // Current reminder is pre 0, calendar is > 0\n        $baseYear = $this->year;\n        if ($this->year < 0 && $year > 0 && ! $this->calendar->hasYearZero()) {\n            $baseYear++;\n        }\n        $years = $year - $baseYear;\n\n        if ($month < $this->month) {\n            return $this->saveElapsed($years - 1, empty($event));\n        }\n        if ($month > $this->month) {\n            return $this->saveElapsed($years, empty($event));\n        }\n\n        // Same month\n        return $this->saveElapsed($years - ($day < $this->day ? 1 : 0), empty($event));\n    }\n\n    protected function saveElapsed(int $number, bool $save): int\n    {\n        // If comparing two days, don't save the \"elapsed\" part, we need to re-calc those one each page load\n        if (! $save || $number < 0) {\n            return $number;\n        }\n        $this->elapsed = $number;\n        $this->saveQuietly();\n\n        return $this->elapsed;\n    }\n\n    /**\n     * Functions for the datagrid2\n     */\n    public function deleteName(): string\n    {\n        return (string) $this->remindable->name;\n    }\n\n    public function url(string $where): string\n    {\n        return 'reminders.' . $where;\n    }\n\n    public function routeParams(array $options = []): array\n    {\n        return $options + ['entity' => $this->remindable_id, 'reminder' => $this->id, 'next' => 'entity.reminders'];\n    }\n\n    public function getNameAttribute(): string\n    {\n        return $this->deleteName();\n    }\n\n    /**\n     * Calculate how long ago the event happened\n     */\n    public function mostRecentOccurrence(int $year, int $month, int $day, array $months, int $daysInYear): int\n    {\n        $reminderYear = $this->year;\n        $reminderMonth = $this->month;\n        $reminderDay = $this->day;\n\n        // Recurring? We need to switch around the data a bit to figure out the most recent date\n        if (! empty($this->is_recurring)) {\n            if ($this->recurringMonthly()) {\n                // dump('monthly');\n                $reminderMonth = $month;\n                $reminderYear = $year;\n                // If it repeats monthly, we need to see if it happened \"last month\" or \"this month\".\n                // dump('Reminder ' . $reminderDay . ' > ' . $day);\n                if ($reminderDay > $day) {\n                    $reminderMonth--;\n                    // Switched to previous month?\n                    if ($reminderMonth === 0) {\n                        $reminderMonth = $month;\n                        $reminderYear--;\n                    }\n                }\n            } else {\n                // Yearly is easy\n                // dump('yearly recurring');\n                $reminderYear = $year;\n                $reminderMonth = $month;\n            }\n        }\n        // Diff in years between current year and reminder's year\n\n        if (! $this->calendar->hasYearZero() && $year > 0 && $reminderYear < 0) {\n            $days = ($year - 1 - $reminderYear) * $daysInYear;\n        } else {\n            $days = ($year - $reminderYear) * $daysInYear;\n        }\n\n        // Not the same month? We need to do some math\n        if ($month != $reminderMonth) {\n            // dump('month diff ' . $month . ' (current) vs ' . $reminderMonth . '(reminder)');\n            // dump('amount of months ' . count($months));\n            $totalMonths = count($months);\n\n            // If the reminder a month in the future, meaning it was another year\n            if ($reminderMonth > $month) {\n                // dump('last year');\n                $days -= $daysInYear;\n\n                // Loop through the beginning of the year\n                for ($m = 1; $m < $month; $m++) {\n                    // dump('beginning of the year');\n                    // Month status\n                    $previousMonth = $this->previousMonth($m, $totalMonths);\n                    $monthData = $months[$previousMonth];\n                    $days += $monthData['length'];\n                }\n                for ($m = $reminderMonth; $m <= $totalMonths; $m++) {\n                    // dump('end of previous year');\n                    $previousMonth = $this->previousMonth($m, $totalMonths);\n                    $monthData = $months[$previousMonth];\n                    $days += $monthData['length'];\n                    // dump('days increase by ' . $monthData['length']);\n                }\n            } else {\n                // The event happened earlier this year\n                for ($m = $reminderMonth; $m < $month; $m++) {\n                    // dump('previous month');\n                    $previousMonth = $this->previousMonth($m, $totalMonths);\n                    $monthData = $months[$previousMonth];\n                    $days += $monthData['length'];\n                }\n            }\n        }\n\n        // Diff in days\n        $days += ($day - $reminderDay);\n\n        if ($days > 1 && $this->length > 1) {\n            $days -= $this->length - 1;\n        }\n\n        // dump($days);\n        return $this->cachedLast = $days;\n    }\n\n    /**\n     * Calculate when this reminder happens next. We want the YYYYYYYMMMMDDDD format, and use that as a string to\n     * order by, instead of doing complicated math. Or do we? I don't know, I'm so confused. This is all super\n     * hard to calculate :(\n     */\n    public function nextUpcomingOccurrence(int $calendarYear, int $calendarMonth, int $day, array $months, int $daysInYear): int\n    {\n        if (isset($this->cachedNext)) {\n            return $this->cachedNext;\n        }\n        $reminderYear = $this->year;\n        $reminderMonth = $this->month;\n        $reminderDay = $this->day;\n\n        // dump(\"Event #\" . $this->id . \" \" . $this->remindable->name . \": \" . $this->year . \"-\" . $this->month . \"-\" . $this->day);\n\n        // Recurring? We need to switch around the data a bit to figure out the most recent date\n        if (! empty($this->is_recurring)) {\n            if ($this->recurringMonthly()) {\n                $reminderMonth = $calendarMonth;\n                // Max to properly track reminders starting in the future\n                $reminderYear = max($reminderYear, $calendarYear);\n                // If it repeats monthly, we need to see if it happened \"last month\" or \"this month\".\n                // dump('Reminder ' . $reminderDay . ' > ' . $day);\n                if ($reminderDay < $day) {\n                    $reminderMonth++;\n                    // Switched to previous month?\n                    if ($reminderMonth === count($months) - 1) {\n                        $reminderMonth = $calendarMonth;\n                        $reminderYear++;\n                    }\n                }\n            } else {\n                // It's a yearly reoccurring event, so we need to put the reminder's date to the \"next\" available one\n                // in the future.\n                $reminderYear = $calendarYear; // Make sure it's the same year\n                // If the month is earlier from this year, we need to push the next occurrence to next year. The month\n                // stays the same\n                if ($reminderMonth === $calendarMonth && $reminderDay < $day) {\n                    $reminderYear++;\n                }\n            }\n        }\n\n        $days = 0;\n        // We loop on every extra year, ex 2000 to 2004\n        for ($y = $calendarYear; $y < $reminderYear; $y++) {\n            $days += $daysInYear;\n            // dump(\"Add a year\");\n        }\n        if (! $this->calendar->hasYearZero() && $calendarYear < 0 && $reminderYear > 0) {\n            $days -= $daysInYear;\n        }\n        // If the reminder happens \"before\" the same month / same date, we need to reduce the days by one year\n        // current: 2004-05-01 and reminder is 2005-03-15\n        if ($days > 0 && ($reminderMonth < $calendarMonth)) {\n            $days -= $daysInYear;\n            // dump(\"Remove a year\");\n        }\n\n        // Now we need to loop on the remaining months.\n        $monthStart = $calendarMonth; // ex August\n        $monthEnd = $reminderMonth; // ex September\n        $totalMonths = count($months);\n        // dump(\"Comparing $reminderMonth < $calendarMonth\");\n        if ($reminderMonth < $calendarMonth) {\n            // The reminder's month is before the current calendar month, so we jumped a year.\n            // ex reminder is in April and calendar is currently in August\n            $monthStart = 1;\n            // We still need to add days to the end of the current year before switching to the next one\n            // dump(\"Backfilling $calendarMonth to $totalMonths\");\n            for ($m = $calendarMonth; $m <= $totalMonths; $m++) {\n                $previousMonth = $this->previousMonth($m, $totalMonths);\n                $monthData = $months[$previousMonth];\n                $days += $monthData['length'];\n            }\n            // $monthEnd = $reminderMonth;\n        }\n        // dump(\"Month start $monthStart and $monthEnd\");\n        for ($m = $monthStart; $m < $monthEnd; $m++) {\n            $previousMonth = $this->previousMonth($m, $totalMonths);\n            $monthData = $months[$previousMonth];\n            $days += $monthData['length'];\n        }\n\n        $days += ($reminderDay - $day);\n\n        return $this->cachedNext = $days;\n    }\n\n    /**\n     * Determine if a reminder is recurring every year\n     */\n    public function recurringYearly(): bool\n    {\n        return $this->is_recurring && $this->recurring_periodicity === 'year';\n    }\n\n    /**\n     * Determine if a reminder is recurring every month\n     */\n    public function recurringMonthly(): bool\n    {\n        return $this->is_recurring && $this->recurring_periodicity === 'month';\n    }\n\n    /**\n     * How many days ago the last occurrence was\n     */\n    public function daysAgo(): int\n    {\n        return $this->cachedLast;\n    }\n\n    /**\n     * In how many days the next reminder is\n     */\n    public function inDays(): int\n    {\n        return $this->cachedNext;\n    }\n\n    /**\n     * Determine if an event is of the character birth type\n     */\n    public function isBirth(): bool\n    {\n        return $this->type_id === EntityEventTypes::birth;\n    }\n\n    /**\n     * Determine if an event is of the entity foundation type\n     */\n    public function isFounded(): bool\n    {\n        return $this->type_id === EntityEventTypes::founded;\n    }\n\n    /**\n     * Determine if an event is of the character death type\n     */\n    public function isDeath(): bool\n    {\n        return $this->type_id === EntityEventTypes::death;\n    }\n\n    /**\n     * Determine if an event is of the calendar date type\n     */\n    public function isCalendarDate(): bool\n    {\n        return $this->type_id === EntityEventTypes::calendarDate;\n    }\n\n    /**\n     * Reduce the month by one, making sure it's still in the bounds of a valid month\n     */\n    protected function previousMonth(int $month, int $min): int\n    {\n        if ($month >= $min) {\n            return $min - 1;\n        }\n\n        return $month--;\n    }\n\n    /**\n     * @return MorphOne<Reminder, $this>\n     */\n    public function death(): MorphOne\n    {\n        return $this->morphOne(Reminder::class, 'remindable')\n            ->whereColumn('calendar_id', 'reminders.calendar_id')\n            ->where('type_id', EntityEventTypes::death);\n    }\n\n    /**\n     * Patch an entity from the datagrid2 batch editing\n     */\n    public function patch(array $data): bool\n    {\n        return $this->updateQuietly($data);\n    }\n\n    public function exportFields(): array\n    {\n        return [\n            'id',\n            'calendar_id',\n            'length',\n            'comment',\n            'is_recurring',\n            'recurring_until',\n            'recurring_periodicity',\n            'colour',\n            'day',\n            'month',\n            'year',\n            'type_id',\n            'visibility_id',\n            'created_by',\n        ];\n    }\n\n    /**\n     * Copy a reminder to another target\n     */\n    public function copyTo(Entity $target): Reminder\n    {\n        $new = $this->replicate(['remindable_id', 'created_by']);\n        $new->remindable_id = $target->id;\n        $new->created_by = auth()->user()->id;\n        $new->saveQuietly();\n\n        return $new;\n    }\n}\n"
  },
  {
    "path": "app/Models/Role.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property int $id\n * @property string $name\n */\nclass Role extends Model\n{\n    public function users()\n    {\n        return $this->belongsToMany(User::class, 'user_roles');\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/AclScope.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse App\\Enums\\Permission;\nuse App\\Enums\\Visibility;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Permissions;\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Post;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Scope;\nuse Illuminate\\Support\\Facades\\DB;\n\n/**\n * @method static self|Builder withInvisible()\n */\nclass AclScope implements Scope\n{\n    /**\n     * All the extensions to be added to the builder.\n     *\n     * @var array\n     */\n    protected $extensions = ['WithInvisible'];\n\n    /**\n     * Extend the query builder with the needed functions.\n     *\n     * @return void\n     */\n    public function extend(Builder $builder)\n    {\n        foreach ($this->extensions as $extension) {\n            $this->{\"add{$extension}\"}($builder);\n        }\n    }\n\n    /**\n     * Add the with-invisible extension to the builder.\n     *\n     * @return void\n     */\n    protected function addWithInvisible(Builder $builder)\n    {\n        $builder->macro('withInvisible', function (Builder $builder, $withInvisible = true) {\n            if (! $withInvisible) {\n                // Sends the default scope\n                return $builder;\n            }\n\n            // @phpstan-ignore-next-link\n            return $builder->withoutGlobalScope($this);\n        });\n    }\n\n    /**\n     * Our main logic for this scope: filtering on elements the user has access to.\n     *\n     * @return Builder|void\n     */\n    public function apply(Builder $query, Model $model)\n    {\n        // No permission engine on console for the time being. In the future, we might want\n        // to build a system to limit exposing private stuff on a campaign export.\n        if (app()->runningInConsole() && (! app()->environment('testing') || config('app.skip_permissions') === true)) {\n            return $query;\n        }\n\n        // For posts, we need a different hook because they can be private even for an admin\n        if ($model instanceof Post) {\n            return $this->applyToPost($query, $model);\n        }\n\n        // Campaign admins don't have any restrictions on base\n        Permissions::campaign(CampaignLocalization::getCampaign())\n            ->action(Permission::View);\n        if (auth()->check()) {\n            Permissions::user(auth()->user());\n        }\n        /*if ($model instanceof MiscModel) {\n            Permissions::entityTypeID($model->entityTypeId());\n        }*/\n\n        if (Permissions::isAdmin()) {\n            // Check if this is a visibility entity or a global kanka entity\n            return $query;\n        }\n\n        if ($model instanceof Entity) {\n            return $this->applyToEntity($query, $model);\n        }\n\n        return $query;\n    }\n\n    /**\n     * Permission scope on an Entity model\n     */\n    protected function applyToEntity(Builder $query, Entity $model): Builder\n    {\n        if (auth()->check()) {\n            Permissions::createTemporaryTable();\n\n            // @phpstan-ignore-next-line\n            return $query\n                ->private(false)\n                ->where(function ($subquery) use ($model) {\n                    return $subquery\n                        ->where(function ($sub) use ($model) {\n                            return $sub\n                                ->whereRaw(DB::raw('EXISTS (SELECT * FROM tmp_permissions as perm WHERE perm.id = ' . $model->getTable() . '.id)'))\n                                ->orWhereIn($model->getTable() . '.type_id', Permissions::allowedEntityTypes());\n                        })\n                        ->whereNotIn($model->getTable() . '.id', Permissions::deniedEntities());\n                });\n        }\n\n        // Unlogged users have a read-only replica db to query, so a left join is needed directly on the permission table\n        $publicRoleId = Permissions::publicRoleID();\n\n        // @phpstan-ignore-next-line\n        return $query\n            ->private(false)\n            ->where(function ($subquery) use ($model, $publicRoleId) {\n                return $subquery\n                    ->where(function ($sub) use ($model, $publicRoleId) {\n                        return $sub\n                            ->whereRaw(DB::raw('EXISTS (SELECT * FROM campaign_permissions as perm WHERE perm.entity_id = ' . $model->getTable() . '.id AND perm.access = 1 AND perm.campaign_role_id = ' . $publicRoleId . ')'))\n                            // ->orWhereIn($model->getTable() . '.id', Permissions::allowedEntities())\n                            ->orWhereIn($model->getTable() . '.type_id', Permissions::allowedEntityTypes());\n                    })\n                    ->whereNotIn($model->getTable() . '.id', Permissions::deniedEntities());\n            });\n    }\n\n    /**\n     * Apply the ACL scope to posts.\n     *\n     * @return Builder\n     */\n    protected function applyToPost(Builder $query, Model $model)\n    {\n        $campaign = CampaignLocalization::getCampaign();\n        $table = $model->getTable();\n        // Guest, or not part of the campaign either, just get the all visibility\n        if (auth()->guest() || ! auth()->user()->can('member', $campaign)) {\n            return $query->where($table . '.visibility_id', Visibility::All);\n        }\n\n        Permissions::campaign($campaign);\n        Permissions::user(auth()->user());\n\n        // Either mine (self && created_by = me) or (if admin: !self, else: all)\n        return $query\n            // Ignore the Visibility scope because we're overriding it here with the permission engine of posts\n            ->withoutGlobalScope(VisibilityIDScope::class)\n            ->where(function ($sub) use ($table) {\n                $visibilities = Permissions::isAdmin()\n                    ? [Visibility::All, Visibility::Admin,\n                        Visibility::AdminSelf, Visibility::Member]\n                    : [Visibility::All, Visibility::Member];\n                $sub\n                    ->where(function ($self) use ($table) {\n                        $self\n                            ->whereIn($table . '.visibility_id', [\n                                Visibility::Self,\n                                Visibility::AdminSelf,\n                            ])\n                            ->where($table . '.created_by', auth()->user()->id);\n                    })\n                    ->orWhereIn($table . '.visibility_id', $visibilities)\n                    ->orWhereIn($table . '.id', Permissions::allowedPosts());\n            })\n            ->whereNotIn($table . '.id', Permissions::deniedPosts());\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/CalendarWeatherScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * @method static self|Builder year(int $year)\n * @method static self|Builder month(int $month)\n * @method static self|Builder dated(int $calendarID, int $year, int $month, int $year)\n */\ntrait CalendarWeatherScopes\n{\n    /**\n     * @return Builder\n     */\n    public function scopeYear(Builder $builder, int $year)\n    {\n        return $builder->where('year', $year);\n    }\n\n    /**\n     * @return Builder\n     */\n    public function scopeMonth(Builder $builder, int $month)\n    {\n        return $builder->where('month', $month);\n    }\n\n    public function scopeDated(Builder $builder, int $calendarId, int $year, int $month, int $day)\n    {\n        // @phpstan-ignore-next-line\n        return $builder\n            ->where('calendar_id', $calendarId)\n            ->year($year)\n            ->month($month)\n            ->where('day', $day);\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/CampaignScope.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Location;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Scope;\n\nclass CampaignScope implements Scope\n{\n    /**\n     * @param  Location  $model\n     * @return Builder\n     */\n    public function apply(Builder $builder, $model)\n    {\n        if (! app()->runningInConsole()) {\n            $campaign = CampaignLocalization::getCampaign();\n            if ($campaign && $model->withCampaignLimit()) {\n                $builder->where($model->getTable() . '.campaign_id', '=', $campaign->id);\n            }\n\n            return $builder;\n        }\n\n        // In console mode, we still sometimes need scoping to a campaign (for example when deleting nested\n        // elements to not interfere with data from other campaigns.\n        $campaignId = CampaignLocalization::getConsoleCampaign();\n        if ($campaignId && $model->withCampaignLimit()) {\n            $builder->where($model->getTable() . '.campaign_id', '=', $campaignId);\n        }\n\n        return $builder;\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/CampaignScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse App\\Enums\\CampaignVisibility;\nuse App\\Enums\\SpotlightStatus;\nuse App\\Facades\\Identity;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Query\\JoinClause;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\n/**\n * Trait CampaignScopes\n *\n * @method static self|Builder visibility(int $visibility)\n * @method static self|Builder admin()\n * @method static self|Builder public($withUnlisted = true)\n * @method static self|Builder top()\n * @method static self|Builder front(?string $sort = null)\n * @method static self|Builder featured(bool $featured = true)\n * @method static self|Builder filterPublic(array $filters)\n * @method static self|Builder open()\n * @method static self|Builder unboosted()\n * @method static self|Builder hidden()\n * @method static self|Builder slug(string|int $slug)\n * @method static self|Builder acl(string|int $slug)\n * @method static self|Builder userOrdered(User $user)\n * @method static self|Builder showcased(?int $limit = 4)\n */\ntrait CampaignScopes\n{\n    /**\n     * We bind the campaign model on the slug in the url, so we need to ensure\n     * that the user can only access valid campaigns. This means for either\n     * public campaigns, or campaigns that the user is a member of.\n     */\n    public function scopeAcl(Builder $query, string|int $slug): Builder\n    {\n        if (auth()->guest()) {\n            return $this->public()->slug($slug);\n        }\n\n        // If we are impersonating, that gives us only a single choice\n        if (Identity::isImpersonating()) {\n            return $this\n                ->slug($slug)\n                // Use ID and not slug to avoid shenanigans when updating the slug\n                ->where($this->getTable() . '.id', Identity::getCampaignId());\n        }\n\n        // Limit to the campaigns the user is in\n        return $this\n            ->select([\n                $this->getTable() . '.*',\n            ])\n            ->leftJoin('campaign_user as cu', function (JoinClause $sub) {\n                return $sub->on('cu.campaign_id', $this->getTable() . '.id')\n                    ->where('cu.user_id', auth()->user()->id);\n            })\n            ->slug($slug)\n            ->where(function ($sub) {\n                return $sub\n                    ->public()\n                    ->orWhereNotNull('cu.user_id');\n            });\n    }\n\n    /**\n     * Filter on a campaign's ID or slug. Since slugs always require at least one letter,\n     * we can have this is_numeric logic to differentiate between the two. We also need\n     * this for the APIs, as those work on the ID and not the slug.\n     */\n    public function scopeSlug(Builder $query, string|int $slug): Builder\n    {\n        $key = is_numeric($slug) ? 'id' : 'slug';\n\n        return $query->where($this->getTable() . '.' . $key, '=', $slug);\n    }\n\n    public function scopeVisibility(Builder $query, CampaignVisibility|array $visibility): Builder\n    {\n        if ($visibility instanceof CampaignVisibility) {\n            return $query->where($this->getTable() . '.visibility_id', $visibility->value);\n        }\n\n        return $query->whereIn($this->getTable() . '.visibility_id', $visibility);\n    }\n\n    public function scopeOpen(Builder $query, bool $open = true): Builder\n    {\n        return $query->where('is_open', $open);\n    }\n\n    /**\n     * Admin crud datagrid\n     */\n    public function scopeAdmin(Builder $query): Builder\n    {\n        return $query->with('users');\n    }\n\n    /**\n     * Featured Campaigns\n     */\n    public function scopeShowcased(Builder $query, ?int $limit = 4): Builder\n    {\n        $activeSpotlights = DB::table('spotlights')\n            ->selectRaw('campaign_id, MAX(featured_at) as featured_at')\n            ->where('status', SpotlightStatus::active)\n            ->groupBy('campaign_id');\n\n        $query\n            ->select($this->getTable() . '.*')\n            ->joinSub($activeSpotlights, 'active_spotlights', function ($join) {\n                $join->on('active_spotlights.campaign_id', '=', $this->getTable() . '.id');\n            })\n            ->orderByDesc('active_spotlights.featured_at');\n\n        if ($limit !== null) {\n            $query->limit($limit);\n        }\n\n        return $query;\n    }\n\n    /**\n     * Public campaigns\n     */\n    public function scopePublic(Builder $query, bool $withUnlisted = true): Builder\n    {\n        // @phpstan-ignore-next-line\n        $values = [\n            CampaignVisibility::public,\n        ];\n        if ($withUnlisted) {\n            $values[] = CampaignVisibility::unlisted;\n        }\n\n        // @phpstan-ignore-next-line\n        return $query->visibility($values);\n    }\n\n    /**\n     * Filtered campaigns for the front end\n     */\n    public function scopeFront(Builder $query, ?int $sort = null): Builder\n    {\n        if (! config('app.debug')) {\n            $query\n                ->where('visible_entity_count', '>', 0);\n        }\n        $defaultSort = $sort == 1 ? 'campaign_followers_count' : 'visible_entity_count';\n        $query\n            ->with(['systems', 'spotlight'])\n            ->withCount('followers')\n            ->where('is_hidden', 0)\n            ->orderBy($defaultSort, 'desc')\n            ->orderBy('name');\n\n        return $query;\n    }\n\n    public function scopeFilterPublic(Builder $query, array $options): Builder\n    {\n        $language = Arr::get($options, 'language');\n        $genre = Arr::get($options, 'genre');\n        $system = Arr::get($options, 'system');\n        if (! empty($language)) {\n            $query->where('locale', $language);\n        }\n\n        if (! empty($genre)) {\n            $query\n                ->select('campaigns.*')\n                ->leftJoin('campaign_genre as cg', function ($join) {\n                    $join->on('cg.campaign_id', '=', 'campaigns.id');\n                })->where('cg.genre_id', $genre);\n        }\n\n        if (! empty($system)) {\n            $query\n                ->select('campaigns.*')\n                ->leftJoin('campaign_system as cs', function ($join) {\n                    $join->on('cs.campaign_id', '=', 'campaigns.id');\n                })\n                ->whereIn('cs.system_id', $system)\n                ->distinct();\n        }\n        $boosted = Arr::get($options, 'is_boosted');\n        if ($boosted === '1') {\n            $query->where('boost_count', '>=', 1);\n        } elseif ($boosted === '0') {\n            $query->where(function ($sub) {\n                return $sub->where('boost_count', 0)->orWhereNull('boost_count');\n            });\n        }\n\n        $open = Arr::get($options, 'is_open');\n        if ($open === '1') {\n            $query->open() // @phpstan-ignore-line\n                ->reorder()\n                ->orderByDesc('is_prioritised')\n                ->orderByDesc('visible_entity_count')\n                ->orderBy('name');\n        } elseif ($open === '0') {\n            $query->open(false); // @phpstan-ignore-line\n        }\n\n        $featured = Arr::get($options, 'featured_until');\n        if ($featured === '1') {\n            $query->whereNull('featured_until');\n        } elseif ($featured === '0') {\n            $query->whereNotNull('featured_until');\n        }\n\n        return $query;\n    }\n\n    public function scopePreparedWith(Builder $query): Builder\n    {\n        return $query;\n    }\n\n    /**\n     * Unboosted campaigns\n     */\n    public function scopeUnboosted(Builder $query): Builder\n    {\n        return $query->where(function ($sub) {\n            return $sub->where('boost_count', 0)\n                ->orWhereNull('boost_count');\n        });\n    }\n\n    public function scopeHidden(Builder $query, int $hidden = 1): Builder\n    {\n        return $query->where(['is_hidden' => $hidden]);\n    }\n\n    public function scopeUserOrdered(Builder $query, User $user): Builder\n    {\n        switch ($user->campaignSwitcherOrderBy) {\n            case 'alphabetical':\n                $query->orderBy('name', 'asc');\n                break;\n            case 'r_alphabetical':\n                $query->orderBy('name', 'desc');\n                break;\n            case 'date_joined':\n                // @phpstan-ignore-next-line\n                $query->orderBy('pivot_created_at', 'asc');\n                break;\n            case 'r_date_joined':\n                // @phpstan-ignore-next-line\n                $query->orderBy('pivot_created_at', 'desc');\n                break;\n            case 'r_date_created':\n                $query->orderBy('created_at', 'desc');\n                break;\n        }\n\n        return $query;\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/CommunityEventScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * Trait CommunityVoteScopes\n *\n * @method static self|Builder ongoing()\n * @method static self|Builder finished()\n * @method static self|Builder recent()\n * @method static self|Builder visible()\n */\ntrait CommunityEventScopes\n{\n    /**\n     * @return Builder\n     */\n    public function scopeOngoing(Builder $builder)\n    {\n        return $builder\n            ->where('end_at', '>=', Carbon::now())\n            ->where('start_at', '<=', Carbon::now());\n    }\n\n    public function scopeFinished(Builder $builder)\n    {\n        return $builder->where('end_at', '<=', Carbon::now());\n    }\n\n    public function scopeVoting(Builder $builder)\n    {\n        // @phpstan-ignore-next-line\n        return $builder\n            ->where('published_at', '>=', Carbon::now())\n            ->visible();\n    }\n\n    public function scopeRecent(Builder $builder)\n    {\n        // @phpstan-ignore-next-line\n        return $builder\n            ->published()\n            ->orderBy('published_at', 'DESC')\n            ->take(5);\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/CommunityVoteScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * Trait CommunityVoteScopes\n *\n * @method static self|Builder published()\n * @method static self|Builder voting()\n * @method static self|Builder recent()\n * @method static self|Builder visible()\n */\ntrait CommunityVoteScopes\n{\n    public function scopeVisible(Builder $builder): Builder\n    {\n        return $builder\n            ->where('visible_at', '<=', Carbon::now());\n    }\n\n    public function scopePublished(Builder $builder): Builder\n    {\n        return $builder->where('published_at', '<=', Carbon::now());\n    }\n\n    public function scopeVoting(Builder $builder): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $builder\n            ->where('published_at', '>=', Carbon::now())\n            ->visible();\n    }\n\n    public function scopeRecent(Builder $builder): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $builder\n            ->published()\n            ->orderBy('published_at', 'DESC')\n            ->take(5);\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/EntityAssetScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse App\\Enums\\EntityAssetType;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * @method static self|Builder type(int $type)\n * @method static self|Builder filtered(bool $premium)\n * @method static self|Builder alias()\n * @method static self|Builder file()\n * @method static self|Builder link()\n * @method static self|Builder withoutAliases()\n */\ntrait EntityAssetScopes\n{\n    public function scopeType(Builder $query, EntityAssetType|int $type): Builder\n    {\n        return $query->where('type_id', $type instanceof EntityAssetType ? $type->value : $type);\n    }\n\n    public function scopeFiltered(Builder $query, bool $premium = false): Builder\n    {\n        $types = [\n            EntityAssetType::file,\n        ];\n        if ($premium) {\n            $types[] = EntityAssetType::link;\n            $types[] = EntityAssetType::alias;\n        }\n\n        return $query->whereIn('type_id', $types);\n    }\n\n    public function scopeFile(Builder $query)\n    {\n        // @phpstan-ignore-next-line\n        return $query->type(EntityAssetType::file);\n    }\n\n    public function scopeLink(Builder $query): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $query->type(EntityAssetType::link);\n    }\n\n    public function scopeAlias(Builder $query)\n    {\n        // @phpstan-ignore-next-line\n        return $query->type(EntityAssetType::alias);\n    }\n\n    public function scopeWithoutAliases(Builder $query)\n    {\n        // @phpstan-ignore-next-line\n        return $query->whereNot('type_id', EntityAssetType::alias);\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/EntityEventScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse App\\Enums\\EntityEventTypes;\nuse App\\Models\\Calendar;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\ntrait EntityEventScopes\n{\n    /**\n     * All events before the current calendar's date\n     */\n    public function scopeBefore(Builder $query, Calendar $calendar): Builder\n    {\n        $year = $calendar->currentDate('year');\n        $month = $calendar->currentDate('month');\n        $day = $calendar->currentDate('date');\n\n        return $query->where('year', '<', $year)\n            ->orWhere(function ($sub) use ($year, $month) {\n                $sub->where('year', '=', $year)\n                    ->where('month', '<', $month);\n            })\n            ->orWhere(function ($sub) use ($year, $month, $day) {\n                $sub->where('year', '=', $year)\n                    ->where('month', '=', $month)\n                    ->where('day', '<=', $day);\n            });\n    }\n\n    /**\n     * All events today and after today\n     */\n    public function scopeAfter(Builder $query, Calendar $calendar): Builder\n    {\n        $year = $calendar->currentDate('year');\n        $month = $calendar->currentDate('month');\n        $day = $calendar->currentDate('date');\n\n        return $query->where('year', '>', $year)\n            ->orWhere(function ($sub) use ($year, $month) {\n                $sub->where('year', '=', $year)\n                    ->where('month', '>', $month);\n            })\n            ->orWhere(function ($sub) use ($year, $month, $day) {\n                $sub->where('year', '=', $year)\n                    ->where('month', '=', $month)\n                    ->where('day', '>=', $day);\n            });\n    }\n\n    /**\n     * Sort order for the datagrid page\n     */\n    public function scopeCustomSortDate(Builder $query, ?string $order = null): Builder\n    {\n        return $query\n            ->orderBy('year', $order)\n            ->orderBy('month', $order)\n            ->orderBy('day', $order);\n    }\n\n    public function scopeEntity(Builder $query, int $entity_id): Builder\n    {\n        return $query->where('entity_id', $entity_id);\n    }\n\n    public function scopeCalendar(Builder $query, int $calendar_id): Builder\n    {\n        return $query->where('calendar_id', $calendar_id);\n    }\n\n    public function scopeCalendarDate(Builder $query): Builder\n    {\n        return $query->where('type_id', EntityEventTypes::calendarDate);\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/EntityScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Enums\\EntityEventTypes;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Str;\n\n/**\n * Trait EntityScopes\n *\n * @method static self|Builder recentlyModified()\n * @method static self|Builder inTags(array $tags)\n * @method static self|Builder inTypes(mixed $types)\n * @method static self|Builder templates(string $entityType)\n * @method static self|Builder apiFilter(array $requests)\n * @method static self|Builder order(array $config)\n * @method static self|Builder filter(array $filter)\n * @method static self|Builder filterHasFiles(bool $filter)\n * @method static self|Builder filterHasPost(bool $filter)\n * @method static self|Builder filterTags(array $tags, string $option)\n */\ntrait EntityScopes\n{\n    /**\n     * Order entities by recently modified\n     */\n    public function scopeRecentlyModified(Builder $query): Builder\n    {\n        return $query\n            ->orderBy($this->getTable() . '.updated_at', 'desc');\n    }\n\n    /**\n     * Order entities by their olderst modified\n     */\n    public function scopeOldestModified(Builder $query): Builder\n    {\n        return $query\n            ->orderBy($this->getTable() . '.updated_at', 'asc');\n    }\n\n    /**\n     * Filter entities on specific tags\n     */\n    public function scopeInTags(Builder $query, ?array $tags = null): Builder\n    {\n        if (empty($tags)) {\n            return $query;\n        }\n\n        $query->distinct()\n            ->select($this->getTable() . '.*');\n\n        foreach ($tags as $tag) {\n            $v = (int) $tag;\n            $query\n                ->leftJoin('entity_tags as et' . $v, \"et{$v}.entity_id\", $this->getTable() . '.id')\n                ->where(\"et{$v}.tag_id\", $v);\n        }\n\n        return $query;\n    }\n\n    /**\n     * Get entity templates of a specific entity type\n     */\n    public function scopeTemplates(Builder $query, int $entityTypeID): Builder\n    {\n        // @phpstan-ignore-next-line\n        return $query\n            ->template()\n            ->where('type_id', $entityTypeID);\n    }\n\n    /**\n     * Default API filter options\n     */\n    public function scopeApiFilter(Builder $query, Campaign $campaign, array $request = []): Builder\n    {\n        $related = Arr::get($request, 'related', false);\n        $types = Arr::get($request, 'types');\n        if (! empty($types)) {\n            $typeNames = explode(',', $types);\n            $typeIds = [];\n            foreach ($typeNames as $type) {\n                $id = config('entities.ids.' . $type);\n                if (empty($id)) {\n                    continue;\n                }\n                $typeIds[] = $id;\n            }\n            $query->whereIn('type_id', $typeIds);\n        }\n\n        $modules = Arr::get($request, 'type_id');\n        if (! empty($modules) && is_array($modules)) {\n            $validateModules = EntityType::inCampaign($campaign)->whereIn('id', $modules)->pluck('id')->toArray();\n            if (! empty($validateModules)) {\n                $query->whereIn('type_id', $validateModules);\n            }\n        }\n\n        // Other available:\n        $filterableFields = [\n            'name',\n            'is_private',\n            'is_template',\n            'created_by',\n            'updated_by',\n            'tags',\n            'type',\n        ];\n        foreach ($request as $field => $value) {\n            if (! in_array($field, $filterableFields)) {\n                continue;\n            }\n            if (Str::startsWith($field, ['is_'])) {\n                $bool = in_array($value, ['true', 1]) ? true : false;\n                $query->where($field, $bool);\n            } elseif (Str::endsWith($field, '_by')) {\n                $query->where($field, (int) $value);\n            } elseif ($field === 'tags') {\n                // Something something tags\n                if (! is_array($value)) {\n                    $value = [$value];\n                }\n                $query\n                    ->whereHas('tags', function ($query) use ($value) {\n                        return $query->whereIn('tags.id', $value);\n                    });\n            } else {\n                $query->where($field, 'LIKE', '%' . $value . '%');\n            }\n        }\n\n        return $query\n            ->with($related ? [\n                'attributes', 'attributes.entity',\n                'posts', 'posts.permissions', 'posts.entity',\n                'reminders', 'reminders.remindable',\n                'inventories', 'inventories.entity',\n                'relationships', 'abilities',\n                'tags', 'image', 'assets',\n                'entityType',\n                'locations' => function ($query) {\n                    $query->select('locations.id');\n                },\n            ] : ['tags', 'image', 'entityType',\n                'locations' => function ($query) {\n                    $query->select('locations.id');\n                },\n            ]);\n    }\n\n    /**\n     * Filter entities on specific types.\n     * Valid option is 'all'\n     */\n    public function scopeInTypes(Builder $query, mixed $types = null): Builder\n    {\n        if (empty($types)) {\n            return $query;\n        }\n        if (! is_array($types)) {\n            $types = [$types];\n        }\n\n        // Use to do [0] but that can be get unset by the exclude\n        if (head($types) == 'all') {\n            return $query;\n        }\n\n        return $query->whereIn($this->getTable() . '.type_id', $types);\n    }\n\n    public function scopeOrder(Builder $query, array $config = [], ?EntityType $entityType = null): Builder\n    {\n        $entityFields = ['name', 'type', 'is_private', 'status_id'];\n\n        foreach ($config as $field => $order) {\n            if ($field === 'parent.name') {\n                $query->leftJoin('entities as parent_order', 'parent_order.id', '=', 'entities.parent_id')\n                    ->orderBy('parent_order.name', $order);\n            } elseif ($field === 'calendar_date') {\n                $query->leftJoin('reminders as cd', function ($join) {\n                    $join->on('cd.remindable_id', '=', 'entities.id')\n                        ->on('cd.remindable_type', '=', DB::raw(\"'\" . addslashes(Entity::class) . \"'\"))\n                        ->where('cd.type_id', EntityEventTypes::calendarDate);\n                })\n                    ->orderBy('cd.year', $order)\n                    ->orderBy('cd.month', $order)\n                    ->orderBy('cd.day', $order);\n            } elseif ($field === 'tags') {\n                $query->leftJoin('entity_tags as tags_order', 'tags_order.entity_id', '=', 'entities.id')\n                    ->leftJoin('tags as tag_order', 'tag_order.id', '=', 'tags_order.tag_id')\n                    ->orderBy('tag_order.name', $order);\n            } elseif (! in_array($field, $entityFields) && $entityType?->isStandard()) {\n                // Field lives on the child model's table\n                $childModel = $entityType->getClass();\n                $childTable = $childModel->getTable();\n                $query->leftJoin($childTable . ' as child_order', 'child_order.id', '=', 'entities.entity_id');\n\n                $segments = explode('.', $field);\n                if (count($segments) > 1) {\n                    // Dotted field like location.name — resolve the relationship on the child model\n                    $relationName = $segments[0];\n                    /** @var BelongsTo $relation */\n                    $relation = $childModel->{$relationName}();\n                    $relatedTable = $relation->getQuery()->getQuery()->from;\n                    $query->leftJoin(\n                        $relatedTable . ' as orderable_j',\n                        'orderable_j.id',\n                        'child_order.' . $relation->getForeignKeyName()\n                    )->orderBy(str_replace($relationName, 'orderable_j', $field), $order);\n                } else {\n                    $query->orderBy('child_order.' . $field, $order);\n                }\n            } else {\n                $query->orderBy('entities.' . $field, $order);\n            }\n        }\n\n        return $query;\n    }\n\n    public function scopeFilter(Builder $query, array $filters = [], ?EntityType $entityType = null): Builder\n    {\n        $childFilterKeys = [];\n        foreach ($filters as $name => $values) {\n            // Skip null or empty-string values (empty form fields)\n            if ($values === null || $values === '') {\n                continue;\n            } elseif (is_array($values) && empty(array_filter($values, fn ($v) => $v !== '' && $v !== null))) {\n                continue;\n            } elseif (in_array($name, ['is_private', 'parent_id', 'status_id'])) {\n                $query->where('entities.' . $name, $values);\n            } elseif (in_array($name, ['name', 'type'])) {\n                // @phpstan-ignore-next-line\n                $query->textFilter($name, $values);\n            } elseif (in_array($name, ['has_image', 'template'])) {\n                $property = 'is_template';\n                if ($name === 'has_image') {\n                    $property = 'image_uuid';\n                }\n\n                if ($values) {\n                    $query->whereNotNull($property);\n                } else {\n                    $query->whereNull($property);\n                }\n            } elseif ($name === 'archived') {\n                if ($values) {\n                    $query->whereNotNull('archived_at');\n                }\n            } elseif ($name === 'has_entity_files') {\n                // @phpstan-ignore-next-line\n                $query->filterHasFiles($values);\n            } elseif ($name === 'has_posts') {\n                // @phpstan-ignore-next-line\n                $query->filterHasPosts($values);\n            } elseif ($name === 'has_entry') {\n                // @phpstan-ignore-next-line\n                $query->filterHasEntry($values);\n            } elseif ($name === 'has_attributes') {\n                // @phpstan-ignore-next-line\n                $query->filterHasAttributes($values);\n            } elseif (in_array($name, ['attribute_name', 'attribute_value'])) {\n                // attribute_value is handled together with attribute_name\n                if ($name === 'attribute_name') {\n                    // @phpstan-ignore-next-line\n                    $query->filterAttributes($values, Arr::get($filters, 'attribute_value'));\n                }\n            } elseif (in_array($name, ['connection_target', 'connection_name'])) {\n                // connection_name is handled together with connection_target\n                if ($name === 'connection_target' || ! isset($filters['connection_target'])) {\n                    // @phpstan-ignore-next-line\n                    $query->filterConnections(\n                        Arr::get($filters, 'connection_target'),\n                        Arr::get($filters, 'connection_name')\n                    );\n                }\n            } elseif (in_array($name, ['created_by', 'updated_by'])) {\n                $option = Arr::get($filters, $name . '_option');\n                if ($option === 'exclude') {\n                    $query->where(function ($sub) use ($name, $values) {\n                        $sub->where('entities.' . $name, '!=', (int) $values)\n                            ->orWhereNull('entities.' . $name);\n                    });\n                } else {\n                    $query->where('entities.' . $name, (int) $values);\n                }\n            } elseif ($name === 'creators') {\n                // Handled after the loop (like tags) so that creators_option works even with an empty array\n                continue;\n            } elseif ($name === 'tags') {\n                // Handled after the loop so that tags_option works even with an empty array\n                continue;\n            } elseif ($entityType?->isStandard() && ! Str::endsWith($name, '_option')) {\n                $childFilterKeys[$name] = $values;\n            }\n        }\n\n        // Entity-type-specific filters (e.g. status_id on characters)\n        if (! empty($childFilterKeys) && $entityType?->isStandard()) {\n            $childModel = $entityType->getClass();\n            $childTable = $childModel->getTable();\n            $query->leftJoin($childTable . ' as child_filter', 'child_filter.id', '=', 'entities.entity_id');\n            foreach ($childFilterKeys as $name => $values) {\n                $ids = collect((array) $values)->map(fn ($v) => (int) $v)->toArray();\n                $option = Arr::get($filters, $name . '_option');\n                if ($name === 'families') {\n                    if ($option === 'children') {\n                        $ids = Entity::whereIn('entity_id', $ids)\n                            ->where('type_id', config('entities.ids.family'))\n                            ->with('descendants')\n                            ->get()\n                            ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                            ->unique()\n                            ->toArray();\n                    }\n                    if ($option === 'exclude') {\n                        $query->whereRaw('(select count(*) from `character_family` where `character_family`.`character_id` = `child_filter`.`id` and `character_family`.`family_id` in (' . implode(', ', $ids) . ')) = 0');\n                    } else {\n                        $query->whereExists(fn ($q) => $q->select(DB::raw(1))->from('character_family')->whereColumn('character_family.character_id', 'child_filter.id')->whereIn('character_family.family_id', $ids));\n                    }\n                } elseif ($name === 'races') {\n                    if ($option === 'children') {\n                        $ids = Entity::whereIn('entity_id', $ids)\n                            ->where('type_id', config('entities.ids.race'))\n                            ->with('descendants')\n                            ->get()\n                            ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                            ->unique()\n                            ->toArray();\n                    }\n                    if ($option === 'exclude') {\n                        $query->whereRaw('(select count(*) from `character_race` where `character_race`.`character_id` = `child_filter`.`id` and `character_race`.`race_id` in (' . implode(', ', $ids) . ')) = 0');\n                    } else {\n                        $query->whereExists(fn ($q) => $q->select(DB::raw(1))->from('character_race')->whereColumn('character_race.character_id', 'child_filter.id')->whereIn('character_race.race_id', $ids));\n                    }\n                } elseif ($name === 'organisations') {\n                    if ($option === 'children') {\n                        $ids = Entity::whereIn('entity_id', $ids)\n                            ->where('type_id', config('entities.ids.organisation'))\n                            ->with('descendants')\n                            ->get()\n                            ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                            ->unique()\n                            ->toArray();\n                    }\n                    if ($option === 'exclude') {\n                        $query->whereRaw('(select count(*) from `organisation_member` where `organisation_member`.`character_id` = `child_filter`.`id` and `organisation_member`.`organisation_id` in (' . implode(', ', $ids) . ')) = 0');\n                    } else {\n                        $query->whereExists(fn ($q) => $q->select(DB::raw(1))->from('organisation_member')->whereColumn('organisation_member.character_id', 'child_filter.id')->whereIn('organisation_member.organisation_id', $ids));\n                    }\n                } elseif ($name === 'locations') {\n                    if ($option === 'children') {\n                        $ids = Entity::whereIn('entity_id', $ids)\n                            ->where('type_id', config('entities.ids.location'))\n                            ->with('descendants')\n                            ->get()\n                            ->flatMap(fn ($e) => [$e->entity_id, ...$e->descendants->pluck('entity_id')->toArray()])\n                            ->unique()\n                            ->toArray();\n                    }\n                    if ($option === 'exclude') {\n                        $query->whereRaw('(select count(*) from `entity_locations` where `entity_locations`.`entity_id` = `entities`.`id` and `entity_locations`.`location_id` in (' . implode(', ', $ids) . ')) = 0');\n                    } else {\n                        $query->whereExists(fn ($q) => $q->select(DB::raw(1))->from('entity_locations')->whereColumn('entity_locations.entity_id', 'entities.id')->whereIn('entity_locations.location_id', $ids));\n                    }\n                } elseif ($name === 'location_id') {\n                    if ($option === 'exclude') {\n                        $query->where(function ($sub) use ($values) {\n                            $sub->where('child_filter.location_id', '!=', (int) $values)\n                                ->orWhereNull('child_filter.location_id');\n                        });\n                    } else {\n                        $query->where('child_filter.location_id', (int) $values);\n                    }\n                } elseif ($name === 'member_id') {\n                    // @phpstan-ignore-next-line\n                    $memberTable = $entityType?->id == config('entities.ids.family')\n                        ? ['table' => 'character_family', 'fk' => 'family_id']\n                        : ['table' => 'organisation_member', 'fk' => 'organisation_id'];\n                    if ($option === 'exclude') {\n                        $query->whereRaw('(select count(*) from `' . $memberTable['table'] . '` where `' . $memberTable['table'] . '`.`' . $memberTable['fk'] . '` = `child_filter`.`id` and `' . $memberTable['table'] . '`.`character_id` = ' . (int) $values . ') = 0');\n                    } else {\n                        $query->whereExists(fn ($q) => $q->selectRaw(1)->from($memberTable['table'])->whereColumn($memberTable['table'] . '.' . $memberTable['fk'], 'child_filter.id')->where($memberTable['table'] . '.character_id', (int) $values));\n                    }\n                } else {\n                    $query->where('child_filter.' . $name, $values);\n                }\n            }\n        }\n\n        foreach (['created_by', 'updated_by'] as $field) {\n            if (Arr::get($filters, $field . '_option') === 'none') {\n                $query->whereNull('entities.' . $field);\n            }\n        }\n\n        $noneJoinTables = [\n            'races' => ['table' => 'character_race', 'fk' => 'character_id', 'ref' => 'entities.entity_id'],\n            'families' => ['table' => 'character_family', 'fk' => 'character_id', 'ref' => 'entities.entity_id'],\n            'organisations' => ['table' => 'organisation_member', 'fk' => 'character_id', 'ref' => 'entities.entity_id'],\n            'locations' => ['table' => 'entity_locations', 'fk' => 'entity_id', 'ref' => 'entities.id'],\n        ];\n        foreach ($noneJoinTables as $field => $join) {\n            if (Arr::get($filters, $field . '_option') === 'none') {\n                $query->whereNotExists(\n                    fn ($q) => $q->selectRaw(1)->from($join['table'])->whereColumn($join['table'] . '.' . $join['fk'], $join['ref'])\n                );\n            }\n        }\n\n        if (Arr::get($filters, 'member_id_option') === 'none') {\n            $memberTable = $entityType?->id == config('entities.ids.family')\n                ? ['table' => 'character_family', 'fk' => 'family_id']\n                : ['table' => 'organisation_member', 'fk' => 'organisation_id'];\n            $query->whereNotExists(\n                fn ($q) => $q->selectRaw(1)->from($memberTable['table'])->whereColumn($memberTable['table'] . '.' . $memberTable['fk'], 'entities.entity_id')\n            );\n        }\n\n        if (Arr::get($filters, 'location_id_option') === 'none' && $entityType?->isStandard()) {\n            $childTable = $entityType->getClass()->getTable();\n            $query->whereExists(\n                fn ($q) => $q->selectRaw(1)\n                    ->from($childTable)\n                    ->whereColumn($childTable . '.id', 'entities.entity_id')\n                    ->whereNull($childTable . '.location_id')\n            );\n        }\n\n        if (Arr::hasAny($filters, ['tags', 'tags_option'])) {\n            // @phpstan-ignore-next-line\n            $query->filterTags(Arr::get($filters, 'tags', []), Arr::get($filters, 'tags_option'));\n        }\n\n        // Creators filter (handled outside loop so creators_option works even with empty array)\n        if (Arr::hasAny($filters, ['creators', 'creators_option'])) {\n            $creatorsOption = Arr::get($filters, 'creators_option');\n            if ($creatorsOption === 'none') {\n                $query->whereNotExists(function ($sub) {\n                    $sub->selectRaw(1)\n                        ->from('item_creator')\n                        ->whereColumn('item_creator.item_id', 'entities.entity_id');\n                });\n            } else {\n                $creatorValues = Arr::get($filters, 'creators', []);\n                $creatorIds = array_values(array_filter(array_map('intval', is_array($creatorValues) ? $creatorValues : [$creatorValues])));\n                if (! empty($creatorIds)) {\n                    if ($creatorsOption === 'exclude') {\n                        foreach ($creatorIds as $creatorId) {\n                            $query->whereNotExists(function ($sub) use ($creatorId) {\n                                $sub->selectRaw(1)\n                                    ->from('item_creator')\n                                    ->whereColumn('item_creator.item_id', 'entities.entity_id')\n                                    ->where('item_creator.creator_id', $creatorId);\n                            });\n                        }\n                    } else {\n                        foreach ($creatorIds as $creatorId) {\n                            $query->whereExists(function ($sub) use ($creatorId) {\n                                $sub->selectRaw(1)\n                                    ->from('item_creator')\n                                    ->whereColumn('item_creator.item_id', 'entities.entity_id')\n                                    ->where('item_creator.creator_id', $creatorId);\n                            });\n                        }\n                    }\n                }\n            }\n        }\n\n        return $query;\n    }\n\n    /**\n     * Filter on entities with files\n     */\n    protected function scopeFilterHasFiles(Builder $query, bool $value = true): void\n    {\n        $query\n            ->leftJoin('entity_assets', 'entity_assets.entity_id', '=', 'entities.id')\n            ->where('entity_assets.type_id', EntityAssetType::file);\n\n        if ($value) {\n            $query->whereNotNull('entity_assets.id');\n        } else {\n            $query->whereNull('entity_assets.id');\n        }\n    }\n\n    /**\n     * Filter on entities with posts\n     */\n    protected function scopeFilterHasPosts(Builder $query, bool $value = true): void\n    {\n        $query\n            ->leftJoin('posts', 'posts.entity_id', 'entities.id');\n\n        if ($value) {\n            $query->whereNotNull('posts.id');\n        } else {\n            $query->whereNull('posts.id');\n        }\n    }\n\n    /**\n     * Filter on entities with posts\n     */\n    protected function scopeFilterHasEntry(Builder $query, bool $value = true): void\n    {\n        if ($value) {\n            $query->whereNotNull('entities.entry')\n                ->where('entities.entry', '!=', '');\n        } else {\n            $query->whereNull('entities.entry')\n                ->orWhere('entities.entry', '');\n        }\n    }\n\n    /**\n     * Filter on entities with specific tags\n     */\n    protected function scopeFilterTags(Builder $query, array $tags = [], ?string $type = null): void\n    {\n        // Gets handled differently for some reason?\n        if ($type === 'none') {\n            $query\n                ->leftJoin('entity_tags as no_tags', 'no_tags.entity_id', 'entities.id')\n                ->whereNull('no_tags.tag_id');\n\n            return;\n        } elseif ($type === 'exclude') {\n            $tagIds = [];\n            foreach ($tags as $v) {\n                $tagIds[] = (int) $v;\n            }\n            // $query->leftJoin('entity_tags as et_tags', \"et_tags.entity_id\", 'e.id')\n            $query->whereRaw('(\n                select count(*) from entity_tags as et\n                where et.entity_id = entities.id and et.tag_id in (' . implode(', ', $tagIds) . ')\n            ) = 0');\n\n            return;\n        }\n\n        foreach ($tags as $v) {\n            if (! is_numeric($v)) {\n                continue;\n            }\n            $v = (int) $v;\n            $query\n                ->leftJoin('entity_tags as et' . $v, \"et{$v}.entity_id\", 'entities.id')\n                ->where(\"et{$v}.tag_id\", $v);\n        }\n    }\n\n    protected function scopeTextFilter(Builder $query, string $field, ?string $value = null): Builder\n    {\n        $searchTerms = explode(';', $value);\n        foreach ($searchTerms as $searchTerm) {\n            if (empty($searchTerm) && $searchTerm != '0') {\n                continue;\n            }\n            [$operator, $text] = $this->extractSearchOperator($searchTerm, 'type');\n            $searchTerm = $text;\n\n            $query->where(\n                'entities.' . $field,\n                $operator,\n                ($operator == '=' ? $text : \"%{$searchTerm}%\")\n            );\n        }\n\n        return $query;\n    }\n\n    /**\n     * Filter on entities with attributes\n     */\n    protected function scopeFilterHasAttributes(Builder $query, bool $value = true): void\n    {\n        $query\n            ->leftJoin('attributes', 'attributes.entity_id', 'entities.id');\n\n        if ($value) {\n            $query->whereNotNull('attributes.id');\n        } else {\n            $query->whereNull('attributes.id');\n        }\n    }\n\n    /**\n     * Filter on entities by attribute name and optionally value\n     */\n    protected function scopeFilterAttributes(Builder $query, ?string $name = null, ?string $attributeValue = null): void\n    {\n        if ($name === null) {\n            return;\n        }\n\n        [$operator, $filterName] = $this->extractSearchOperator($name, 'attribute_name');\n\n        // No attribute with this name (exclude)\n        if ($operator === 'not like') {\n            $query\n                ->whereRaw('(select count(*) from attributes as att where att.entity_id = entities.id and att.name = ?) = 0', [$filterName]);\n\n            return;\n        }\n\n        $query\n            ->leftJoin('attributes as att', 'att.entity_id', '=', 'entities.id')\n            ->where('att.name', $filterName);\n\n        if ($attributeValue === '!') {\n            $query->whereRaw('att.value <> \"\"');\n        } elseif ($attributeValue !== '' && $attributeValue !== null) {\n            $query->where('att.value', $attributeValue);\n        }\n    }\n\n    /**\n     * Filter on entities by their connections\n     */\n    protected function scopeFilterConnections(Builder $query, ?string $targetId = null, ?string $connectionName = null): void\n    {\n        $query\n            ->leftJoin('relations as rel', 'rel.owner_id', '=', 'entities.id');\n\n        if ($targetId !== '' && $targetId !== null) {\n            $query->where('rel.target_id', $targetId);\n        }\n\n        if ($connectionName !== '' && $connectionName !== null) {\n            [$operator, $filterName] = $this->extractSearchOperator($connectionName, 'connection_name');\n            $searchValue = $operator === '=' ? $filterName : '%' . $filterName . '%';\n            $query->where('rel.relation', $operator, $searchValue);\n        }\n    }\n\n    /**\n     * @param  string|array  $value  (array for tags)\n     */\n    protected function extractSearchOperator(mixed $value, string $key): array\n    {\n        $operator = 'like';\n        $filterValue = $value;\n        if ($value == '!!') {\n            $operator = 'IS NULL';\n            $filterValue = null;\n        } elseif (Str::startsWith($value, '!')) {\n            $operator = 'not like';\n            $filterValue = mb_ltrim($value, '!');\n        } elseif (Str::endsWith($value, '!')) {\n            $operator = '=';\n            $filterValue = mb_rtrim($value, '!');\n        } elseif (Str::endsWith($key, '_id')) {\n            $operator = '=';\n        }\n\n        return [$operator, $filterValue];\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/Pinnable.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * Trait Pinnable\n *\n * @property bool|int $is_pinned\n *\n * @method static self|Builder pinnable(bool $is_pinned = true)\n */\ntrait Pinnable\n{\n    /**\n     * @param  int  $pin\n     */\n    public function scopePinned(Builder $query, $pin = 1)\n    {\n        return $query->where(['is_pinned' => $pin]);\n    }\n\n    public function isPinned(): bool\n    {\n        return (bool) $this->is_pinned;\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/PrivateScope.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Scope;\n\nclass PrivateScope implements Scope\n{\n    protected $extensions = ['WithPrivate'];\n\n    public function extend(Builder $builder)\n    {\n        foreach ($this->extensions as $extension) {\n            $this->{\"add{$extension}\"}($builder);\n        }\n    }\n\n    protected function addWithPrivate(Builder $builder)\n    {\n        $builder->macro('withPrivate', function (Builder $builder, $withInvisible = true) {\n            if (! $withInvisible) {\n                // Sends the default scope\n                return $builder;\n            }\n\n            // @phpstan-ignore-next-line\n            return $builder->withoutGlobalScope($this);\n        });\n    }\n\n    /**\n     * Apply the scope to a given Eloquent query builder.\n     *\n     * @return void\n     */\n    public function apply(Builder $builder, Model $model)\n    {\n        // Only apply these scopes in non-console mode.\n        if (app()->runningInConsole()) {\n            return;\n        }\n\n        // If we aren't authenticated, just see what is set to all\n        if (auth()->guest() || ! auth()->user()->isAdmin()) {\n            $builder->where($model->getTable() . '.is_private', false);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/SubEntityScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * Trait SubEntityScopes\n *\n * @method static self|Builder recent()\n * @method static self|Builder withApi()\n */\ntrait SubEntityScopes\n{\n    protected bool $hasJoinedEntity = false;\n\n    public function scopeRecent(Builder $query): Builder\n    {\n        return $query->orderBy('updated_at', 'desc');\n    }\n\n    public function scopeWithApi(Builder $query): Builder\n    {\n        $relations = [\n            'entity',\n            'entity.image',\n            'entity.header',\n            'entity.entityType',\n            'entity.tags',\n            'entity.posts', 'entity.posts.permissions',\n            'entity.reminders',\n            'entity.relationships', 'entity.attributes', 'entity.inventories', 'entity.inventories',\n            'entity.assets',\n            'entity.abilities',\n        ];\n\n        if (method_exists($this, 'ancestors')) {\n            $relations[] = 'ancestors';\n            $relations[] = 'children';\n        }\n        $with = ! empty($this->apiWith) ? $this->apiWith : [];\n        foreach ($with as $relation) {\n            $relations[] = $relation;\n        }\n\n        return $query\n            ->select($this->getTable() . '.*')\n            ->has('entity')\n            ->with($relations);\n    }\n\n    public function scopeJoinEntity(Builder $query): Builder\n    {\n        if ($this->hasJoinedEntity) {\n            return $query;\n        }\n\n        $this->hasJoinedEntity = true;\n\n        return $query\n            ->leftJoin('entities as e', function ($join) {\n                $join->on('e.entity_id', '=', $this->getTable() . '.id');\n                // @phpstan-ignore-next-line\n                $join->where('e.type_id', '=', $this->entityTypeID())\n                    ->whereRaw('e.campaign_id = ' . $this->getTable() . '.campaign_id');\n            })\n            ->groupBy($this->getTable() . '.id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/TagScopes.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\n\n/**\n * @method static|self onlyVisible()\n * @method static|self autoApplied()\n */\ntrait TagScopes\n{\n    /**\n     * Get tags that are auto applied to entities\n     */\n    public function scopeAutoApplied(Builder $query): Builder\n    {\n        return $query->where('is_auto_applied', true);\n    }\n\n    /**\n     * Get tags that are not hidden\n     */\n    public function scopeOnlyVisible(Builder $query): Builder\n    {\n        return $query->where('is_hidden', 0);\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/UserScope.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\n/**\n * Trait UserScope\n */\ntrait UserScope {}\n"
  },
  {
    "path": "app/Models/Scopes/VisibilityIDScope.php",
    "content": "<?php\n\nnamespace App\\Models\\Scopes;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\CampaignLocalization;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Scope;\n\nclass VisibilityIDScope implements Scope\n{\n    protected $extensions = ['WithPrivate'];\n\n    public function extend(Builder $builder)\n    {\n        foreach ($this->extensions as $extension) {\n            $this->{\"add{$extension}\"}($builder);\n        }\n    }\n\n    protected function addWithPrivate(Builder $builder)\n    {\n        $builder->macro('withPrivate', function (Builder $builder, $withInvisible = true) {\n            if (! $withInvisible) {\n                // Sends the default scope\n                return $builder;\n            }\n\n            // @phpstan-ignore-next-line\n            return $builder->withoutGlobalScope($this);\n        });\n    }\n\n    /**\n     * Apply the scope to a given Eloquent query builder.\n     *\n     * @return void\n     */\n    public function apply(Builder $builder, Model $model)\n    {\n        // Only apply these scopes in non-console mode.\n        if (app()->runningInConsole()) {\n            return;\n        }\n\n        // If we aren't authenticated, just see what is set to all\n        if (! auth()->check()) {\n            $builder->where($model->getTable() . '.visibility_id', Visibility::All);\n\n            return;\n        }\n        $campaign = CampaignLocalization::getCampaign();\n        if (! auth()->user()->can('member', $campaign)) {\n            $builder->where($model->getTable() . '.visibility_id', Visibility::All);\n\n            return;\n        }\n\n        // Either mine (self && created_by = me) or (if admin: !self, else: all)\n        $builder->where(function ($sub) use ($model) {\n            $visibilities = auth()->user()->isAdmin()\n                ? [Visibility::All, Visibility::Admin,\n                    Visibility::AdminSelf, Visibility::Member]\n                : [Visibility::All, Visibility::Member];\n            $sub\n                ->where(function ($self) use ($model) {\n                    $self\n                        ->whereIn($model->getTable() . '.visibility_id', [\n                            Visibility::Self,\n                            Visibility::AdminSelf,\n                        ])\n                        ->where($model->getTable() . '.created_by', auth()->user()->id);\n                })\n                ->orWhereIn($model->getTable() . '.visibility_id', $visibilities);\n        });\n    }\n}\n"
  },
  {
    "path": "app/Models/Spotlight.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\SpotlightStatus;\nuse App\\Models\\Concerns\\HasCampaign;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasTimestamps;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property int $id\n * @property string $url\n * @property Carbon $featured_at\n * @property ?int $featured_by\n * @property int $status\n */\nclass Spotlight extends Model\n{\n    use HasCampaign;\n    use HasTimestamps;\n\n    public $casts = [\n        'status' => SpotlightStatus::class,\n    ];\n}\n"
  },
  {
    "path": "app/Models/SpotlightContent.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\SpotlightContentStatus;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasTimestamps;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property int $id\n * @property SpotlightContentStatus $status\n * @property array $content_json\n */\nclass SpotlightContent extends Model\n{\n    use Blameable;\n    use HasCampaign;\n    use HasTimestamps;\n\n    public $casts = [\n        'status' => SpotlightContentStatus::class,\n        'content_json' => 'json',\n    ];\n\n    public function isDraft(): bool\n    {\n        return $this->status === SpotlightContentStatus::draft;\n    }\n\n    public function isApplied(): bool\n    {\n        return $this->status === SpotlightContentStatus::applied;\n    }\n\n    public function isRejected(): bool\n    {\n        return $this->status === SpotlightContentStatus::rejected;\n    }\n\n    public function isApproved(): bool\n    {\n        return $this->status === SpotlightContentStatus::approved;\n    }\n}\n"
  },
  {
    "path": "app/Models/SubscriptionCancellation.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Class SubscriptionCancellation\n *\n * @property int $id\n * @property string $reason\n * @property ?string $secondary\n * @property ?string $custom\n * @property string $tier\n * @property string $duration\n * @property Carbon $created_at\n */\nclass SubscriptionCancellation extends Model\n{\n    use HasUser;\n\n    /**\n     * @var string\n     */\n    public $table = 'subscription_cancellations';\n\n    protected $fillable = [\n        'user_id',\n        'reason',\n        'secondary',\n        'custom',\n        'tier',\n        'duration',\n    ];\n}\n"
  },
  {
    "path": "app/Models/SubscriptionSource.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Class SubscriptionSource\n *\n * @property int $id\n * @property string $source_id\n * @property string $charge_id\n * @property string $tier\n * @property string $period\n * @property string $status\n * @property string $method\n */\nclass SubscriptionSource extends Model\n{\n    use HasUser;\n\n    public $timestamps = true;\n\n    public $fillable = [\n        'source_id',\n        'charge_id',\n        'tier',\n        'period',\n        'user_id',\n        'status',\n        'method',\n    ];\n\n    public function currency(): string\n    {\n        return in_array($this->method, ['giropay', 'sofort', 'ideal']) ? 'eur' : 'eur';\n    }\n\n    public function plan(): string\n    {\n        if ($this->tier === Pledge::ELEMENTAL) {\n            if ($this->period === 'yearly') {\n                return config('subscription.elemental.eur.yearly');\n            }\n\n            return config('subscription.elemental.eur.monthly');\n        }\n        if ($this->period === 'yearly') {\n            return config('subscription.owlbear.eur.yearly');\n        }\n\n        return config('subscription.owlbear.eur.monthly');\n    }\n}\n"
  },
  {
    "path": "app/Models/Tag.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\HasSlug;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Models\\Scopes\\TagScopes;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Collection;\n\n/**\n * Class Tag\n *\n * @property string $name\n * @property string $type\n * @property string $colour\n * @property ?string $icon\n * @property bool|int $is_auto_applied\n * @property bool|int $is_hidden\n * @property Entity[]|Collection $entities\n */\nclass Tag extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use HasSlug;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n    use TagScopes;\n\n    protected array $sortable = [\n        'name',\n        'colour',\n        'icon',\n        'is_auto_applied',\n        'is_hidden',\n        'type',\n    ];\n\n    /**\n     * Fields that can be sorted on\n     */\n    protected array $sortableColumns = [\n        'colour',\n        'is_auto_applied',\n        'is_hidden',\n        'icon',\n    ];\n\n    protected $fillable = [\n        'name',\n        'slug',\n        'colour',\n        'icon',\n        'campaign_id',\n        'is_private',\n        'is_auto_applied',\n        'is_hidden',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'colour',\n        'icon',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'colour',\n        'icon',\n        'is_auto_applied',\n        'is_hidden',\n    ];\n\n    /**\n     * Detach children when moving this entity from one campaign to another\n     */\n    public function detach(): void\n    {\n        /** @var Entity $child */\n        foreach ($this->allChildren()->get() as $child) {\n            $child->tags()->detach($this->id);\n        }\n    }\n\n    /**\n     * Get all the children\n     */\n    public function allChildren(): Builder\n    {\n        $descendantIds = $this->entity->descendants()->pluck('entity_id');\n\n        return Entity::whereIn('id', function ($query) use ($descendantIds) {\n            $query->select('entity_id')\n                ->from('entity_tags')\n                ->whereIn('tag_id', $descendantIds->push($this->id));\n        });\n    }\n\n    /**\n     * @return BelongsToMany<Entity, $this>\n     */\n    public function entities(): BelongsToMany\n    {\n        return $this->belongsToMany(\n            'App\\Models\\Entity',\n            'entity_tags',\n            'tag_id',\n            'entity_id',\n            'id',\n            'id'\n        );\n    }\n\n    /**\n     * @return HasMany<EntityTag, $this>\n     */\n    public function entityTags(): HasMany\n    {\n        return $this->hasMany(EntityTag::class);\n    }\n\n    /**\n     * @return BelongsToMany<Post, $this>\n     */\n    public function posts(): BelongsToMany\n    {\n        return $this->belongsToMany(\n            'App\\Models\\Post',\n            'post_tag',\n            'tag_id',\n            'post_id',\n            'id',\n            'id'\n        );\n    }\n\n    /**\n     * @return HasMany<PostTag, $this>\n     */\n    public function postTags(): HasMany\n    {\n        return $this->hasMany(PostTag::class);\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.tag');\n    }\n\n    /**\n     * Strip '#' when setting colour\n     */\n    public function setColourAttribute(?string $colour): void\n    {\n        $this->attributes['colour'] = mb_ltrim($colour ?? '', '#');\n    }\n\n    /**\n     * Prepend '#' when getting colour\n     */\n    public function getColourAttribute(): string\n    {\n        if (empty($this->attributes['colour'])) {\n            return '';\n        }\n\n        return '#' . $this->attributes['colour'];\n    }\n\n    /**\n     * Get the tag's structural colour classes\n     */\n    public function colourClass(): string\n    {\n        if (! $this->hasColour()) {\n            return 'border-0!';\n        }\n\n        return 'color-palette color-tag border-0!';\n    }\n\n    /**\n     * Get inline CSS style for the tag's colour\n     */\n    public function colourStyle(): string\n    {\n        if (! $this->hasColour()) {\n            return '';\n        }\n\n        $hex = $this->colour;\n        $textColour = $this->isLightColour($hex) ? '#000' : '#fff';\n\n        return 'background-color: ' . e($hex) . '; color: ' . $textColour . ';';\n    }\n\n    /**\n     * Determine if a hex colour is light based on luminance\n     */\n    protected function isLightColour(string $hex): bool\n    {\n        $hex = ltrim($hex, '#');\n        if (strlen($hex) !== 6) {\n            return false;\n        }\n\n        $r = hexdec(substr($hex, 0, 2));\n        $g = hexdec(substr($hex, 2, 2));\n        $b = hexdec(substr($hex, 4, 2));\n\n        // Relative luminance formula\n        $luminance = (0.299 * $r + 0.587 * $g + 0.114 * $b) / 255;\n\n        return $luminance > 0.5;\n    }\n\n    public function hasColour(): bool\n    {\n        return ! empty($this->attributes['colour']);\n    }\n\n    public function hasIcon(): bool\n    {\n        return ! empty($this->icon);\n    }\n\n    /**\n     * Attach entities to the tag\n     */\n    public function attachEntities(array $entityIds): int\n    {\n        $data = $this->entities()->syncWithoutDetaching($entityIds);\n\n        return count($data['attached']);\n    }\n\n    /**\n     * Determine if the model has profile data to be displayed\n     */\n    public function showProfileInfo(): bool\n    {\n        if ($this->hasColour() || $this->hasIcon()) {\n            return true;\n        }\n\n        return parent::showProfileInfo();\n    }\n\n    /**\n     * Determine if the model is a tag that has to be applied to all newly created entities\n     */\n    public function isAutoApplied(): bool\n    {\n        return (bool) $this->is_auto_applied;\n    }\n\n    /**\n     * Determine if the model is a tag that is hidden\n     */\n    public function isHidden(): bool\n    {\n        return (bool) $this->is_hidden;\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'colour',\n            'is_auto_applied',\n            'is_hidden',\n        ];\n    }\n\n    public function shortname(): string\n    {\n        return grapheme_extract($this->name, 1);\n    }\n}\n"
  },
  {
    "path": "app/Models/Theme.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n/**\n * Class Theme\n *\n * @property string $name\n */\nclass Theme extends Model\n{\n    use SoftDeletes;\n\n    /**\n     * @return HasMany<Campaign, $this>\n     */\n    public function campaigns(): HasMany\n    {\n        return $this->hasMany('App\\Models\\Campaign', 'theme_id');\n    }\n\n    public function __toString(): string\n    {\n        return __('profiles.theme.themes.' . $this->name);\n    }\n}\n"
  },
  {
    "path": "app/Models/Tier.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\PricingPeriod;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Collection;\n\n/**\n * @property int $id\n * @property string $code\n * @property string $name\n * @property float $monthly\n * @property float $yearly\n * @property Collection|TierPrice[] $prices\n */\nclass Tier extends Model\n{\n    public $fillable = [\n        'name',\n        'monthly',\n        'yearly',\n        'position',\n    ];\n\n    /**\n     * @return HasMany<TierPrice, $this>\n     */\n    public function prices(): HasMany\n    {\n        return $this->hasMany(TierPrice::class);\n    }\n\n    public function scopeOrdered(Builder $query): Builder\n    {\n        return $query->orderBy('position');\n    }\n\n    public function isFree(): bool\n    {\n        return $this->name === Pledge::KOBOLD;\n    }\n\n    public function isPopular(): bool\n    {\n        return $this->name === Pledge::OWLBEAR;\n    }\n\n    public function isBestValue(): bool\n    {\n        return $this->name === Pledge::WYVERN;\n    }\n\n    public function image(): string\n    {\n        return match ($this->name) {\n            'Owlbear' => 'https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/owlbear-128.png',\n            'Wyvern' => 'https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/wyvern-128.png',\n            'Elemental' => 'https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/elemental-128.png',\n            default => 'https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/kobold-128.png'\n        };\n    }\n\n    public function isCurrent(User $user): bool\n    {\n        if ($this->name === Pledge::OWLBEAR && $user->isOwlbear()) {\n            return true;\n        } elseif ($this->name === Pledge::WYVERN && $user->isWyvern()) {\n            return true;\n        }\n\n        return (bool) ($this->name === Pledge::ELEMENTAL && $user->isElemental());\n    }\n\n    public function monthlyPlans(): array\n    {\n        return config('subscription.' . $this->code . '.monthly');\n    }\n\n    public function yearlyPlans(): array\n    {\n        return config('subscription.' . $this->code . '.yearly');\n    }\n\n    public function plans(): array\n    {\n        return array_merge(\n            config('subscription.' . $this->code . '.monthly'),\n            config('subscription.' . $this->code . '.yearly'),\n        );\n    }\n\n    public function price(string $currency, PricingPeriod $period): float\n    {\n        /** @var TierPrice $price */\n        $price = $this->prices\n            ->where('currency', $currency)\n            ->where('period', $period)\n            ->first();\n        if (empty($price)) {\n            return 0.00;\n        }\n\n        return $price->cost;\n    }\n\n    public function isWyvern(): bool\n    {\n        return $this->code === 'wyvern';\n    }\n}\n"
  },
  {
    "path": "app/Models/TierPrice.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\PricingPeriod;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $id\n * @property int $tier_id\n * @property float $cost\n * @property PricingPeriod $period\n * @property string $currency\n * @property string $stripe_id\n * @property Tier $tier\n *\n * @method static self|Builder stripe(string $id)\n */\nclass TierPrice extends Model\n{\n    use HasFactory;\n\n    public $casts = [\n        'period' => PricingPeriod::class,\n    ];\n\n    /**\n     * @return BelongsTo<Tier, $this>\n     */\n    public function tier(): BelongsTo\n    {\n        return $this->belongsTo(Tier::class);\n    }\n\n    public function isYearly(): bool\n    {\n        return $this->period->isYearly();\n    }\n\n    public function scopeStripe(Builder $query, string $id): Builder\n    {\n        return $query->where('stripe_id', $id);\n    }\n}\n"
  },
  {
    "path": "app/Models/Timeline.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Collection;\n\n/**\n * Class Timeline\n *\n * @property TimelineEra[]|Collection $eras\n * @property int|bool $revert_order\n */\nclass Timeline extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFactory;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    public $fillable = [\n        'campaign_id',\n        'name',\n        'calendar_id',\n        'is_private',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'type',\n    ];\n\n    /**\n     * Nullable values (foreign keys)\n     *\n     * @var string[]\n     */\n    public array $nullableForeignKeys = [\n        'calendar_id',\n    ];\n\n    /**\n     * Foreign relations to add to export\n     */\n    protected array $foreignExport = [\n        'eras',\n        'elements',\n    ];\n\n    protected array $exportFields = [\n        'base',\n        'calendar_id',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    protected array $apiWith = [\n        'eras',\n        'eras.elements',\n    ];\n\n    /**\n     * @return BelongsTo<Calendar, $this>\n     */\n    public function calendar(): BelongsTo\n    {\n        return $this->belongsTo('App\\Models\\Calendar', 'calendar_id', 'id');\n    }\n\n    /**\n     * @return HasMany<TimelineEra, $this>\n     */\n    public function eras(): HasMany\n    {\n        return $this->hasMany('App\\Models\\TimelineEra');\n    }\n\n    /**\n     * @return HasMany<TimelineElement, $this>\n     */\n    public function elements(): HasMany\n    {\n        return $this->hasMany(\n            'App\\Models\\TimelineElement',\n        );\n    }\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.timeline');\n    }\n\n    /**\n     * Define the fields unique to this model that can be used on filters\n     *\n     * @return string[]\n     */\n    public function filterableColumns(): array\n    {\n        return [\n            'calendar_id',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/TimelineElement.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\TimelineElementCache;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasEntry;\nuse App\\Models\\Concerns\\HasSuggestions;\nuse App\\Models\\Concerns\\HasVisibility;\nuse App\\Models\\Concerns\\Sanitizable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Laravel\\Scout\\Searchable;\n\n/**\n * Class TimelineElement\n *\n * @property int $id\n * @property int $timeline_id\n * @property int $era_id\n * @property ?int $entity_id\n * @property string $name\n * @property string $date\n * @property int $position\n * @property string $colour\n * @property string $icon\n * @property bool|int $use_entity_entry\n * @property bool|int $is_collapsed\n * @property bool|int $use_event_date\n * @property Timeline $timeline\n * @property TimelineEra $era\n * @property Entity $entity\n *\n * @method static self|Builder ordered()\n */\nclass TimelineElement extends Model\n{\n    use Blameable;\n    use HasEntry;\n    use HasFactory;\n    use HasSuggestions;\n    use HasVisibility;\n    use Sanitizable;\n    use Searchable;\n\n    protected $fillable = [\n        'timeline_id',\n        'era_id',\n        'entity_id',\n        'name',\n        'entry',\n        'position',\n        'colour',\n        'visibility_id',\n        'icon',\n        'date',\n        'is_collapsed',\n        'use_entity_entry',\n        'use_event_date',\n    ];\n\n    public $casts = [\n        'visibility_id' => Visibility::class,\n    ];\n\n    protected array $suggestions = [\n        TimelineElementCache::class => 'clearSuggestion',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'date',\n        'icon',\n    ];\n\n    /**\n     * @return BelongsTo<Timeline, $this>\n     */\n    public function timeline(): BelongsTo\n    {\n        return $this->belongsTo(Timeline::class, 'timeline_id');\n    }\n\n    /**\n     * @return BelongsTo<TimelineEra, $this>\n     */\n    public function era(): BelongsTo\n    {\n        return $this->belongsTo(TimelineEra::class, 'era_id');\n    }\n\n    /**\n     * @return BelongsTo<Entity, $this>\n     */\n    public function entity(): BelongsTo\n    {\n        return $this->belongsTo(Entity::class, 'entity_id');\n    }\n\n    public function scopeOrdered(Builder $query): Builder\n    {\n        return $query\n            ->with('entity')\n            ->orderBy('position');\n    }\n\n    public function elementName(): string\n    {\n        if (! empty($this->entity_id)) {\n            return $this->entity->name ?? __('crud.history.unknown');\n        }\n\n        return $this->name;\n    }\n\n    public function mentionName(): string\n    {\n        if (! empty($this->name)) {\n            return strip_tags(htmlentities($this->name));\n        }\n\n        // @phpstan-ignore-next-line\n        return strip_tags($this->entity?->name);\n    }\n\n    /**\n     * For legacy tinymce editor\n     */\n    public function hasEntity(): bool\n    {\n        return false;\n    }\n\n    public function collapsed(): bool\n    {\n        return $this->is_collapsed;\n    }\n\n    /**\n     * Check if the element has an entity, but it's not accessible (permission issue for non-admins)\n     */\n    public function invisibleEntity(): bool\n    {\n        if (empty($this->entity_id)) {\n            return false;\n        }\n\n        return empty($this->entity);\n    }\n\n    /**\n     * @return BelongsToMany<\n     *     User,\n     *     $this,\n     *     EntityUser\n     * >\n     */\n    public function editingUsers(): BelongsToMany\n    {\n        return $this->belongsToMany(User::class, 'entity_user')\n            ->using(EntityUser::class)\n            ->withPivot('type_id');\n    }\n\n    /**\n     * List of entities that mention this entity\n     *\n     * @return HasMany<EntityMention, $this>\n     */\n    public function mentions(): HasMany\n    {\n        return $this->hasMany('App\\Models\\EntityMention', 'timeline_element_id', 'id');\n    }\n\n    public function visible(): bool\n    {\n        if (empty($this->entity_id)) {\n            return true;\n        }\n\n        return $this->entity && ! $this->entity->isMissingChild();\n    }\n\n    /**\n     * Get the value used to index the model.\n     */\n    public function getScoutKey()\n    {\n        return $this->getTable() . '_' . $this->id;\n    }\n\n    /**\n     * Get the name of the index associated with the model.\n     */\n    public function searchableAs(): string\n    {\n        return 'entities';\n    }\n\n    protected function makeAllSearchableUsing($query)\n    {\n        return $query\n            ->select([$this->getTable() . '.*', 'entities.id as entity_id'])\n            ->leftJoin('timelines', 'timelines.id', '=', 'timeline_elements.timeline_id')\n            ->leftJoin('entities', function ($join) {\n                $join->on('entities.entity_id', $this->getTable() . '.id');\n            })\n            ->has('timeline')\n            ->has('timeline.entity')\n            ->with(['timeline', 'timeline.entity']);\n    }\n\n    public function toSearchableArray()\n    {\n        if (! $this->timeline || ! $this->timeline->entity) {\n            return [];\n        }\n\n        return [\n            'campaign_id' => $this->timeline->entity->campaign_id,\n            'entity_id' => $this->timeline->entity->id,\n            'name' => $this->name,\n            'type' => 'timeline_element',\n            'entry' => strip_tags($this->entry),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/TimelineEra.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Mentions;\nuse App\\Models\\Concerns\\HasEntry;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\n\n/**\n * Class TimelineEra\n *\n * @property int $id\n * @property ?int $timeline_id\n * @property string $name\n * @property string $entry\n * @property string $abbreviation\n * @property string|int $start_year\n * @property string|int $end_year\n * @property bool|int $is_collapsed\n * @property ?int $position\n * @property Timeline $timeline\n * @property TimelineElement[]|Collection $elements\n * @property TimelineElement[]|Collection $orderedElements\n *\n * @method static self|Builder ordered()\n */\nclass TimelineEra extends Model\n{\n    use HasEntry;\n    use HasFactory;\n    use Sanitizable;\n    use SortableTrait;\n\n    protected $fillable = [\n        'timeline_id',\n        'name',\n        'abbreviation',\n        'entry',\n        'start_year',\n        'end_year',\n        'is_collapsed',\n    ];\n\n    protected array $sortable = [\n        'name',\n        'position',\n        'abbreviation',\n        'start_year',\n        'end_year',\n        'is_collapsed',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n        'abbreviation',\n        'start_year',\n        'end_year',\n    ];\n\n    /**\n     * @return BelongsTo<Timeline, $this>\n     */\n    public function timeline(): BelongsTo\n    {\n        return $this->belongsTo(Timeline::class, 'timeline_id');\n    }\n\n    /**\n     * @return HasMany<TimelineElement, $this>\n     */\n    public function elements(): HasMany\n    {\n        return $this->hasMany(TimelineElement::class, 'era_id');\n    }\n\n    public function orderedElements(): HasMany\n    {\n        return $this->elements()\n            ->ordered();\n    }\n\n    public function scopeOrdered(Builder $query): Builder\n    {\n        return $query\n            ->orderBy('position')\n            ->orderBy('start_year')\n            ->orderBy('end_year')\n            ->orderBy('name');\n    }\n\n    public function collapsed(): bool\n    {\n        return $this->is_collapsed;\n    }\n\n    /**\n     * Get the age header of the era\n     */\n    public function ages(): string\n    {\n        $a = new \\NumberFormatter(app()->getLocale(), \\NumberFormatter::DECIMAL);\n        $from = mb_strlen($this->start_year);\n        $to = mb_strlen($this->end_year);\n\n        if ($from == 0 && $to == 0) {\n            return '';\n        }\n\n        if ($from == 0) {\n            return '< ' . $a->format($this->start_year);\n        } elseif ($to == 0) {\n            return '> ' . $a->format($this->start_year);\n        }\n\n        return $a->format($this->start_year) . ' &mdash; ' . $a->format($this->end_year);\n    }\n\n    public function hasEntity(): bool\n    {\n        return false;\n    }\n\n    /**\n     * Functions for the datagrid2\n     */\n    public function url(string $where): string\n    {\n        return 'timelines.timeline_eras.' . $where;\n    }\n\n    public function routeParams(array $options = []): array\n    {\n        return $options + ['timeline' => $this->timeline_id, 'timeline_era' => $this->id];\n    }\n\n    /**\n     * Override the get link\n     */\n    public function getLink(): string\n    {\n        $campaign = CampaignLocalization::getCampaign();\n\n        return route('timelines.timeline_eras.edit', [$campaign, 'timeline' => $this->timeline_id, $this->id]);\n    }\n\n    public function getEntryForEditionAttribute()\n    {\n        $text = Mentions::parseForEdit($this);\n\n        return $text;\n    }\n\n    /**\n     * @return array|string[]\n     */\n    public function positionOptions($position = null, bool $new = false): array\n    {\n        $options = [null => __('posts.position.dont_change')];\n\n        $elements = $this->orderedElements;\n        $hasFirst = false;\n        foreach ($elements as $element) {\n            if (! $element->visible()) {\n                continue;\n            }\n            if (! $hasFirst) {\n                $hasFirst = true;\n                $options[1] = __('posts.position.first');\n            }\n            $key = $element->position;\n            $lang = __('maps/layers.placeholders.position_list', ['name' => $element->elementName()]);\n            if (config('app.debug')) {\n                $lang .= ' (' . $key . ')';\n            }\n            if (! ($position == $key)) {\n                $options[$key + 1] = $lang;\n            }\n        }\n\n        // Didn't have a first option added, add one now\n        if (! $hasFirst) {\n            $options[1] = __('posts.position.first');\n        }\n\n        if ($new) {\n            unset($options[null]);\n        }\n\n        return $options;\n    }\n}\n"
  },
  {
    "path": "app/Models/User.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\UserAction;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Identity;\nuse App\\Facades\\ReleaseCache;\nuse App\\Facades\\SingleUserCache;\nuse App\\Models\\Concerns\\HasImage;\nuse App\\Models\\Concerns\\LastSync;\nuse App\\Models\\Concerns\\UserBoosters;\nuse App\\Models\\Concerns\\UserTokens;\nuse App\\Models\\Relations\\UserRelations;\nuse App\\Models\\Scopes\\UserScope;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOne;\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Number;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Cashier\\Billable;\nuse Laravel\\Passport\\Contracts\\OAuthenticatable;\nuse Laravel\\Passport\\HasApiTokens;\n\n/**\n * Class User\n *\n * @property int $id\n * @property string $name\n * @property string $email\n * @property string $locale\n * @property ?int $last_campaign_id\n * @property ?string $avatar\n * @property string $provider\n * @property int $provider_id\n * @property Carbon $last_login_at\n * @property int $welcome_campaign_id\n * @property bool|int $newsletter\n * @property bool|int $has_last_login_sharing\n * @property ?string $pledge\n * @property ?string $timezone\n * @property ?string $currency\n * @property ?User $referred_by\n * @property ?Carbon $card_expires_at\n * @property ?Carbon $banned_until\n * @property ?Carbon $created_at\n * @property Collection|array $settings\n * @property Collection|array $profile\n * @property Campaign $campaign\n * @property ?string $stripe_id\n */\nclass User extends \\Illuminate\\Foundation\\Auth\\User implements OAuthenticatable\n{\n    use Billable;\n    use HasApiTokens;\n    use HasFactory;\n    use HasImage;\n    use LastSync;\n    use Notifiable;\n    use UserBoosters;\n    use UserRelations;\n    use UserScope;\n    use UserSetting;\n    use UserTokens;\n\n    protected $fillable = [\n        'name',\n        'email',\n        'password',\n        'last_campaign_id',\n        'provider',\n        'provider_id',\n        'newsletter',\n        'timezone',\n        'campaign_role',\n        'theme',\n        'locale', // Keep this for the LocaleChange middleware\n        'last_login_at',\n        'has_last_login_sharing',\n        'pledge',\n        'referred_by',\n        'profile',\n        'settings',\n    ];\n\n    /**\n     * The attributes that should be hidden for arrays.\n     */\n    protected $hidden = [\n        'password', 'remember_token', 'card_expires_at',\n    ];\n\n    /**\n     * Casted variables\n     *\n     * @var array<string, string>\n     */\n    protected $casts = [\n        'settings' => 'array',\n        'profile' => 'array',\n        'card_expires_at' => 'datetime',\n        'last_login_at' => 'date',\n        'banned_until' => 'date',\n        'trial_ends_at' => 'date',\n    ];\n\n    protected array $imageFields = ['avatar'];\n\n    protected bool $isAdmin;\n\n    public function getAvatarUrl(int $size = 40): string\n    {\n        if ($this->hasAvatar()) {\n            return $this->thumbnail($size, null, 'avatar');\n        } else {\n            return '/images/defaults/user.svg';\n        }\n    }\n\n    public function hasAvatar(): bool\n    {\n        return ! empty($this->avatar) && $this->avatar != 'users/default.png';\n    }\n\n    /**\n     * Determine if a user has a specific role\n     */\n    public function hasCampaignRole(int $roleId): bool\n    {\n        return $this->campaignRoles->where('id', $roleId)->count() > 0;\n    }\n\n    /**\n     * Figure out if the user is an admin of the current campaign.\n     * $campaign can be provided, for example when listing a user's campaigns\n     */\n    public function isAdmin(?Campaign $campaign = null): bool\n    {\n        if (isset($this->isAdmin)) {\n            return $this->isAdmin;\n        }\n        if (empty($campaign) && CampaignLocalization::hasCampaign()) {\n            $campaign = CampaignLocalization::getCampaign();\n        }\n        if (empty($campaign)) {\n            return false;\n        }\n\n        return $this->isAdmin = $this->campaignRoles\n            ->where('campaign_id', $campaign->id)\n            ->where('is_admin', 1)\n            ->count() === 1;\n    }\n\n    /**\n     * Determine if a user is a subscriber\n     */\n    public function isSubscriber(): bool\n    {\n        return $this->hasRole(Pledge::ROLE) || $this->hasRole('admin') || $this->onTrial();\n    }\n\n    /**\n     * Determine if a user has a legacy patreon sync set up\n     */\n    public function isLegacyPatron(): bool\n    {\n        return $this->hasRole(Pledge::ROLE) && ! empty($this->patreon_email);\n    }\n\n    /**\n     * Determine if a user is a goblin (deprecated)\n     */\n    public function isGoblin(): bool\n    {\n        return ! empty($this->pledge) && $this->pledge !== Pledge::KOBOLD;\n    }\n\n    /**\n     * Determine if a user is an elemental\n     */\n    public function isElemental(): bool\n    {\n        return (bool) (! empty($this->pledge) && $this->pledge == Pledge::ELEMENTAL);\n    }\n\n    public function isOwlbear(): bool\n    {\n        return ! empty($this->pledge) && $this->pledge == Pledge::OWLBEAR;\n    }\n\n    public function isWyvern(): bool\n    {\n        return ! empty($this->pledge) && $this->pledge == Pledge::WYVERN;\n    }\n\n    /**\n     * API throttling is increased for subscribers\n     */\n    public function getRateLimitAttribute(): int\n    {\n        return $this->isGoblin() ? config('limits.api.throttle.subscriber') : config('limits.api.throttle.default');\n    }\n\n    /**\n     * Currency symbol\n     */\n    public function currencySymbol(): string\n    {\n        if ($this->billedInEur()) {\n            return '€';\n        } elseif ($this->billedInBrl()) {\n            return 'R$';\n        }\n\n        return 'US$';\n    }\n\n    /**\n     * Determine if the user is billed in EUR.\n     */\n    public function billedInEur(): bool\n    {\n        return $this->currency() === 'eur';\n    }\n\n    /**\n     * Determine if the user is billed in BRL\n     */\n    public function billedInBrl(): bool\n    {\n        return $this->currency() === 'brl';\n    }\n\n    /**\n     * Check if the user has a Role(s) associated.\n     *\n     * @param  string|array  $name  The role(s) to check.\n     */\n    public function hasRole($name): bool\n    {\n        $roles = $this->roles->pluck('name')->toArray();\n\n        foreach ((is_array($name) ? $name : [$name]) as $role) {\n            if (in_array($role, $roles)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Determine if a user is using a social login\n     */\n    public function isSocialLogin(): bool\n    {\n        return ! empty($this->provider);\n    }\n\n    /**\n     * Number of entities the user has created\n     */\n    public function createdEntitiesCount(): string\n    {\n        return (string) Number::format(SingleUserCache::user($this)->entitiesCreatedCount());\n    }\n\n    /**\n     * Determine if the user has published plugins on the marketplace\n     */\n    public function hasPlugins(): bool\n    {\n        return config('marketplace.enabled') && $this->plugins->count();\n    }\n\n    /**\n     * Get the Discord app of the user\n     */\n    public function discord()\n    {\n        return $this->apps->where('app', 'discord')->first();\n    }\n\n    /**\n     * Log an event on the user\n     */\n    public function log(UserAction $action, array $data = []): self\n    {\n        // todo: move to a facade\n        if (! config('logging.enabled')) {\n            return $this;\n        }\n        $log = new UserLog([\n            'user_id' => $this->id,\n        ]);\n        $log->type_id = $action;\n        $log->data = ! empty($data) ? $data : null;\n        $log->save();\n\n        return $this;\n    }\n\n    public function campaignLog(int $campaign, string $module, string $action, array $data = []): self\n    {\n        // todo: move to a facade\n        if (! config('logging.enabled')) {\n            return $this;\n        }\n        $log = new UserLog([\n            'user_id' => $this->id,\n        ]);\n        $log->type_id = UserAction::campaign;\n        $log->campaign_id = $campaign;\n        $first = [];\n        $first['module'] = $module;\n        $first['action'] = $action;\n        $log->data = $first + $data;\n        $log->impersonated_by = Identity::getImpersonatorId();\n        $log->save();\n\n        return $this;\n    }\n\n    /**\n     * Determine if the user is banned\n     */\n    public function isBanned(): bool\n    {\n        return ! empty($this->banned_until) && $this->banned_until->isFuture();\n    }\n\n    /**\n     * Determine if the user has achievements to display on their profile page\n     */\n    public function hasAchievements(): bool\n    {\n        return $this->isWordsmith();\n    }\n\n    /**\n     * Determine if a user has the Wordsmith role\n     */\n    public function isWordsmith(): bool\n    {\n        return $this->hasRole('wordsmith');\n    }\n\n    /**\n     * Check if user has 2FA.\n     *\n     * @return HasOne<PasswordSecurity, $this>\n     */\n    public function passwordSecurity(): HasOne\n    {\n        return $this->hasOne('App\\Models\\PasswordSecurity');\n    }\n\n    /**\n     * When auto-login is enabled, the code to check if the user needs to input their 2FA code checks for this property\n     */\n    public function getGoogle2faSecretAttribute(): ?string\n    {\n        return $this->passwordSecurity?->google2fa_secret;\n    }\n\n    /**\n     * Get the user's initial for some UI elements\n     */\n    public function initials(): string\n    {\n        // If the username has no spaces, use the two first letters of the name\n        if (! Str::contains(' ', $this->name)) {\n            return Str::limit($this->name, 2, '');\n        }\n        $explode = explode(' ', $this->name);\n\n        return $explode[0] . $explode[1];\n    }\n\n    /**\n     * Determine if the user has unread notifications or kanka alerts\n     */\n    public function hasUnread(): bool\n    {\n        if (Identity::isImpersonating()) {\n            return false;\n        }\n\n        // Unread notifications\n        $releases = ReleaseCache::latest();\n        /** @var AppRelease $release */\n        foreach ($releases as $release) {\n            if (! $release->alreadyRead()) {\n                return true;\n            }\n        }\n\n        return $this->unreadNotifications()->count() > 0;\n    }\n\n    /**\n     * Fraud detection system\n     */\n    public function isFrauding(): bool\n    {\n        // Fraud detection can be turned on or off\n        if (! config('subscription.fraud_detection')) {\n            return false;\n        }\n        // Someone with a provider (twitter, fb) login is always considered safe\n        if (! empty($this->provider)) {\n            return false;\n        }\n\n        $validation = $this->userValidation()->valid()->first();\n        if ($validation) {\n            return false;\n        }\n\n        // If the account was created recently, add some small checks\n        /*if ($this->created_at->isAfter(Carbon::now()->subHour())) {\n            // User's name is directly in the campaign name\n            if (Str::startsWith($this->email, $this->name . '@')) {\n                return true;\n            } elseif ($this->campaigns()->count() === 1) {\n                $campaign = $this->campaigns()->first();\n                // Only the 4 starting entities\n                if ($campaign->entities()->withInvisible()->count() === 4) {\n                    return true;\n                }\n            }\n        }*/\n        // Recent fails are a clear indicator of someone cycling through cards\n        return $this->logs()\n            ->where('type_id', UserAction::failedChargeEmail)\n            ->whereDate('created_at', '>=', Carbon::now()->subHour()->toDateString())\n            ->count() >= 2;\n    }\n\n    /**\n     * Check if the user is subscribed via PayPal\n     */\n    public function hasPayPal(): bool\n    {\n        return $this->subscribed('kanka') &&\n            $this->subscription('kanka') &&\n            str_contains($this->subscription('kanka')->stripe_price, 'paypal');\n    }\n\n    /**\n     * Check if the user is subscribed via a manual sub\n     */\n    public function hasManualSubscription(): bool\n    {\n        return $this->subscribed('kanka') &&\n            $this->subscription('kanka') &&\n            Str::startsWith($this->subscription('kanka')->stripe_id, 'manual_');\n    }\n\n    /**\n     * Determine in which folder to store the user's avatar. We group them by 1000 user ids to avoid\n     * having one massive folder containing everything.\n     */\n    public function imageStoragePath(): string\n    {\n        return 'users/' . (int) floor($this->id / 1000);\n    }\n}\n"
  },
  {
    "path": "app/Models/UserApp.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Class UserApp\n *\n * @property int $id\n * @property string $type\n * @property string $access_token\n * @property string $refresh_token\n * @property Carbon $expires_at\n * @property string $identifier\n * @property string|array $settings\n *\n * @method static self|Builder app(string $app)\n * @method static self|Builder discord()\n */\nclass UserApp extends Model\n{\n    use HasUser;\n\n    public $fillable = [\n        'user_id',\n        'app',\n        'access_token',\n        'refresh_token',\n        'expires_at',\n        'identifier',\n        'settings',\n    ];\n\n    public $casts = [\n        'expires_at' => 'date',\n        'settings' => 'array',\n    ];\n\n    public function scopeApp(Builder $query, string $type): Builder\n    {\n        return $query->where('app', $type);\n    }\n\n    public function scopeDiscord(Builder $query): Builder\n    {\n        return $this->app('discord');\n    }\n}\n"
  },
  {
    "path": "app/Models/UserFlag.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\UserFlags;\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property UserFlags $flag\n *\n * @method static|self|Builder freeTrial()\n */\nclass UserFlag extends Model\n{\n    use HasFactory;\n    use HasUser;\n\n    public $casts = [\n        'flag' => UserFlags::class,\n    ];\n\n    public function scopeFreeTrial(Builder $query): Builder\n    {\n        return $query->where('flag', UserFlags::freeTrial);\n    }\n\n    public function scopeUploadLimit(Builder $query): Builder\n    {\n        return $query->where('flag', UserFlags::uploadSize);\n    }\n}\n"
  },
  {
    "path": "app/Models/UserLog.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\UserAction;\nuse App\\Models\\Concerns\\HasUser;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\MassPrunable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * Class UserLog\n *\n * @property UserAction $type_id\n * @property ?string $ip\n * @property ?string $country\n * @property ?int $campaign_id\n * @property array $data\n * @property ?int $impersonated_by\n * @property Carbon $created_at\n * @property ?User $impersonator\n */\nclass UserLog extends Model\n{\n    use HasUser;\n    use MassPrunable;\n\n    public $connection = 'logs';\n\n    public $table = 'user_logs';\n\n    protected $casts = [\n        'type_id' => UserAction::class,\n        'data' => 'array',\n    ];\n\n    protected $fillable = [\n        'user_id',\n        'type_id',\n        'ip',\n        'campaign_id',\n        'data',\n        'impersonated_by',\n    ];\n\n    /**\n     * Automatically prune old elements from the db\n     */\n    public function prunable(): Builder\n    {\n        $cutoff = config('logging.prune_months');\n\n        return static::where('updated_at', '<=', now()->subMonths($cutoff));\n    }\n\n    public function scopeLogins(Builder $builder): Builder\n    {\n        return $builder->whereIn('type_id', [UserAction::login->value, UserAction::autoLogin->value]);\n    }\n\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function impersonator(): BelongsTo\n    {\n        $this->setConnection(config('database.default'));\n\n        return $this->belongsTo(User::class, 'impersonated_by');\n    }\n\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function user(): BelongsTo\n    {\n        $this->setConnection(config('database.default'));\n\n        return $this->belongsTo(User::class, $this->getUserFieldName());\n    }\n\n    public function requiresPremium(): bool\n    {\n        $cutoff = config('limits.campaigns.logs.standard');\n\n        return $this->created_at->diffInDays() > $cutoff;\n    }\n}\n"
  },
  {
    "path": "app/Models/UserRole.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass UserRole extends Model\n{\n    use HasUser;\n}\n"
  },
  {
    "path": "app/Models/UserSetting.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Support\\Arr;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\n/**\n * Trait UserSetting\n *\n * @property bool|int $mail_release\n * @property string $patreon_email\n * @property string $newEntityWorkflow\n * @property string $campaignSwitcherOrderBy\n * @property string $marketplaceName\n * @property bool $advancedMentions\n * @property bool $defaultNested\n */\ntrait UserSetting\n{\n    public function getPatreonEmailAttribute()\n    {\n        return Arr::get($this->settings, 'patreon_email', '');\n    }\n\n    public function getEditorAttribute()\n    {\n        return Arr::get($this->settings, 'editor');\n    }\n\n    /**\n     * @param  string|null  $value\n     */\n    public function setNewEntityWorkflowAttribute($value)\n    {\n        $this->setSettingsOption('new_entity_workflow', $value);\n    }\n\n    public function getNewEntityWorkflowAttribute()\n    {\n        return Arr::get($this->settings, 'new_entity_workflow');\n    }\n\n    public function getEntityExploreAttribute()\n    {\n        return Arr::get($this->settings, 'entity_explore');\n    }\n\n    /**\n     * @param  string|null  $value\n     */\n    public function setCampaignSwitcherOrderByAttribute($value)\n    {\n        $this->setSettingsOption('campaign_switcher_order_by', $value);\n    }\n\n    public function getCampaignSwitcherOrderByAttribute()\n    {\n        return Arr::get($this->settings, 'campaign_switcher_order_by');\n    }\n\n    /**\n     * @param  string|null  $value\n     */\n    public function setAdvancedMentionsAttribute($value)\n    {\n        $this->setSettingsOption('advanced_mentions', $value);\n    }\n\n    public function getAdvancedMentionsAttribute()\n    {\n        return Arr::get($this->settings, 'advanced_mentions', false);\n    }\n\n    /**\n     * @param  string|null  $value\n     */\n    public function setMailReleaseAttribute($value)\n    {\n        $this->setSettingsOption('mail_release', $value);\n    }\n\n    public function getMailReleaseAttribute()\n    {\n        return Arr::get($this->settings, 'mail_release', false);\n    }\n\n    /**\n     * @param  string|null  $key\n     * @param  string|null  $value\n     */\n    protected function setSettingsOption($key, $value)\n    {\n        $settings = $this->settings;\n        $settings[$key] = $value;\n        $this->settings = $settings;\n    }\n\n    /**\n     * Save the user settings into the array mutator\n     */\n    public function saveSettings(array $data): self\n    {\n        $settings = $this->settings;\n        // Flatten if provided\n        if (isset($data['settings']) && is_array($data['settings'])) {\n            $data = $data['settings'];\n        }\n        foreach ($data as $key => $value) {\n            if (empty($value) && isset($settings[$key])) {\n                unset($settings[$key], $settings[$key]);\n            } elseif (! empty($value)) {\n                if ($key == 'link') {\n                    $settings[$key] = Purify::config(['URI.AllowedSchemes' => ['https']])->clean($value); // Allows https URLs\n                } else {\n                    $settings[$key] = Purify::clean($value);\n                }\n            }\n        }\n\n        $this->settings = $settings;\n\n        return $this;\n    }\n\n    /**\n     * Save user's custom billing info\n     */\n    public function updateBillingInfo($billing): self\n    {\n        $profile = $this->profile;\n        $profile['billing'] = $billing;\n        if ($billing == '') {\n            unset($profile['billing']);\n        }\n\n        $this->profile = $profile;\n\n        return $this;\n    }\n\n    public function updateSettings($data): self\n    {\n        $fields = ['mail_release'];\n        foreach ($fields as $field) {\n            if (! Arr::has($data, $field)) {\n                continue;\n            }\n            $this->$field = Arr::get($data, $field);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Get the user's public display name\n     */\n    public function displayName(): string\n    {\n        if (empty($this->settings['marketplace_name'])) {\n            return (string) $this->name;\n        }\n\n        return (string) $this->settings['marketplace_name'];\n    }\n\n    /**\n     * Determine if a user only wants advance mentions in their text editor\n     */\n    public function alwaysAdvancedMentions(): bool\n    {\n        return (bool) Arr::get($this->settings, 'advanced_mentions', false);\n    }\n\n    public function currency()\n    {\n        return Arr::get($this->settings, 'currency', 'usd');\n    }\n\n    public function getPaginationAttribute(): ?int\n    {\n        return (int) Arr::get($this->settings, 'pagination');\n    }\n\n    public function getDateformatAttribute(): ?string\n    {\n        return Arr::get($this->settings, 'date_format');\n    }\n\n    /**\n     * Determine if a user is subsribed to the newsletter\n     */\n    public function hasNewsletter(): bool\n    {\n        return ! empty($this->mail_release);\n    }\n\n    /**\n     * Determine if a user has the old booster nomenclature\n     */\n    public function hasBoosterNomenclature(): bool\n    {\n        if (config('app.debug') && request()->get('_legacy') == 1) {\n            return true;\n        }\n\n        return Arr::get($this->settings, 'grandfathered_boost') === 1;\n    }\n}\n"
  },
  {
    "path": "app/Models/UserValidation.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasUser;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Prunable;\n\n/**\n * @property int $id\n * @property string $token\n * @property bool|int $is_valid\n *\n * @method static self|Builder valid()\n */\nclass UserValidation extends Model\n{\n    use HasUser;\n    use Prunable;\n\n    protected $fillable = [\n        'is_valid',\n        'token',\n    ];\n\n    public function getRouteKeyName()\n    {\n        return 'token';\n    }\n\n    /**\n     * Automatically prune old elements from the db\n     */\n    public function prunable(): Builder\n    {\n        return static::where('is_valid', false)->where('created_at', '<=', now()->subDays(1));\n    }\n\n    public function scopeValid(Builder $query, bool $valid = true): Builder\n    {\n        return $query->where(['is_valid' => $valid]);\n    }\n}\n"
  },
  {
    "path": "app/Models/Users/Tutorial.php",
    "content": "<?php\n\nnamespace App\\Models\\Users;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @property int $user_id\n * @property string $code\n */\nclass Tutorial extends Model\n{\n    public $table = 'user_tutorials';\n}\n"
  },
  {
    "path": "app/Models/Visibility.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Class Visibility\n *\n * @property int $id\n * @property string $code\n */\nclass Visibility extends Model\n{\n    public $fillable = [\n        'code',\n    ];\n}\n"
  },
  {
    "path": "app/Models/Webhook.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\WebhookAction;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\Paginatable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Support\\Arr;\n\n/**\n * @property int $id\n * @property int $feature_id\n * @property int $status\n * @property string $path\n * @property Feature $feature\n * @property int $action\n * @property array|null $settings\n */\nclass Webhook extends Model\n{\n    use Blameable;\n    use HasCampaign;\n    use Paginatable;\n    use SortableTrait;\n\n    public $fillable = [\n        'action',\n        'url',\n        'type',\n        'message',\n        'status',\n        'settings',\n    ];\n\n    protected $casts = [\n        'settings' => 'array',\n    ];\n\n    protected array $sortable = [\n        'type',\n        'status',\n        'action',\n    ];\n\n    public function url(string $sub): string\n    {\n        return 'webhooks.' . $sub;\n    }\n\n    /**\n     * @return BelongsToMany<Tag, $this>\n     */\n    public function tags(): BelongsToMany\n    {\n        return $this->belongsToMany(\n            'App\\Models\\Tag',\n            'webhook_tags',\n            'webhook_id',\n            'tag_id',\n            'id',\n            'id'\n        );\n    }\n\n    public function typeKey(): string\n    {\n        if ($this->type == 2) {\n            return __('campaigns/webhooks.fields.types.payload');\n        }\n\n        return __('campaigns/webhooks.fields.types.custom');\n    }\n\n    public function actionKey(): string\n    {\n        $campaign = CampaignLocalization::getCampaign();\n        $action = __('campaigns/webhooks.fields.events.deleted');\n\n        if ($this->action === WebhookAction::CREATED->value) {\n            $action = __('campaigns/webhooks.fields.events.new');\n        } elseif ($this->action === WebhookAction::EDITED->value) {\n            $action = __('campaigns/webhooks.fields.events.edited');\n        }\n\n        return '<a class=\"name\" href=\"' . route('webhooks.edit', [$campaign, $this->id]) . '\">' . $action . '</a>';\n    }\n\n    public function shortUrl(): string\n    {\n        $pieces = parse_url($this->url);\n        $domain = $pieces['host'] ?? '';\n        if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\\-]{1,63}\\.[a-z\\.]{2,6})$/i', $domain, $regs)) {\n            return mb_strstr($regs['domain'], '.', true);\n        }\n\n        return $this->url;\n    }\n\n    public function scopeActive(Builder $query, int $campaignId, int $action): Builder\n    {\n        return $query\n            ->where('campaign_id', $campaignId)\n            ->where('action', $action)\n            ->where('status', 1);\n    }\n\n    public function isActive(): bool\n    {\n        return $this->status == 1;\n    }\n\n    public function skipPrivate(): bool\n    {\n        if (Arr::has($this->settings, 'skip_private')) {\n            return Arr::get($this->settings, 'skip_private');\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "app/Models/Whiteboard.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\Acl;\nuse App\\Models\\Concerns\\HasCampaign;\nuse App\\Models\\Concerns\\HasFilters;\nuse App\\Models\\Concerns\\Sanitizable;\nuse App\\Models\\Concerns\\SortableTrait;\nuse App\\Traits\\ExportableTrait;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Collection;\n\n/**\n * @property int $id\n * @property string $name\n * @property int|bool $is_private\n * @property array $data\n * @property WhiteboardShape[]|Collection $shapes\n */\nclass Whiteboard extends MiscModel\n{\n    use Acl;\n    use ExportableTrait;\n    use HasCampaign;\n    use HasFilters;\n    use Sanitizable;\n    use SoftDeletes;\n    use SortableTrait;\n\n    public $fillable = [\n        'campaign_id',\n        'name',\n        'data',\n        'is_private',\n    ];\n\n    public $casts = [\n        'data' => 'array',\n    ];\n\n    protected array $sortable = [\n        'name',\n    ];\n\n    protected array $sanitizable = [\n        'name',\n    ];\n\n    /**\n     * Get the entity_type id from the entity_types table\n     */\n    public function entityTypeId(): int\n    {\n        return (int) config('entities.ids.whiteboard');\n    }\n\n    public function shapes(): HasMany\n    {\n        return $this->hasMany(WhiteboardShape::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/WhiteboardShape.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Facades\\Avatar;\nuse App\\Models\\Concerns\\Blameable;\nuse App\\Observers\\WhiteboardShapeObserver;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasTimestamps;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Collection;\n\n/**\n * @property int $id\n * @property int $whiteboard_id\n * @property ?int $group_id\n * @property string $type\n * @property int $x\n * @property int $y\n * @property int $width\n * @property int $height\n * @property int $scale_x\n * @property int $scale_y\n * @property int $rotation\n * @property int $z_index\n * @property bool|int $is_locked\n * @property array $shape\n * @property Whiteboard $whiteboard\n * @property ?WhiteboardShape $group\n * @property WhiteboardStroke[]|Collection $strokes\n */\n#[ObservedBy(WhiteboardShapeObserver::class)]\nclass WhiteboardShape extends Model\n{\n    use Blameable;\n    use HasTimestamps;\n    use SoftDeletes;\n\n    public $fillable = [\n        'whiteboard_id',\n        'group_id',\n        'type',\n        'x',\n        'y',\n        'width',\n        'height',\n        'rotation',\n        'is_locked',\n        'z_index',\n        'shape',\n        // Transistent ui data\n        'scale_x',\n        'scale_y',\n    ];\n\n    public $casts = [\n        'x' => 'float',\n        'y' => 'float',\n        'width' => 'float',\n        'height' => 'float',\n        'rotation' => 'float',\n        'shape' => 'array',\n    ];\n\n    public function whiteboard(): BelongsTo\n    {\n        return $this->belongsTo(Whiteboard::class);\n    }\n\n    public function group(): BelongsTo\n    {\n        return $this->belongsTo(WhiteboardShape::class, 'id', 'group_id');\n    }\n\n    public function strokes(): HasMany\n    {\n        return $this->hasMany(WhiteboardStroke::class, 'shape_id');\n    }\n\n    public function isRectangle(): bool\n    {\n        return $this->type === 'rect';\n    }\n\n    public function isCircle(): bool\n    {\n        return $this->type === 'circle';\n    }\n\n    public function isText(): bool\n    {\n        return $this->type === 'text';\n    }\n\n    public function isEntity(): bool\n    {\n        return $this->type === 'entity';\n    }\n\n    public function isImage(): bool\n    {\n        return $this->type === 'image';\n    }\n\n    public function isDrawing(): bool\n    {\n        return $this->type === 'drawing';\n    }\n\n    public function image(): ?string\n    {\n        if ($this->isImage()) {\n            $image = Image::find($this->shape['uuid']);\n            if ($image) {\n                return $image->url();\n            }\n        } elseif ($this->isEntity()) {\n            $entity = Entity::find($this->shape['entity_id']);\n            if ($entity) {\n                return Avatar::entity($entity)->size(256)->fallback()->thumbnail();\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/Models/WhiteboardStroke.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasTimestamps;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property int $id\n * @property int $shape_id\n * @property string $points\n * @property string $color\n * @property int $width\n * @property WhiteboardShape $shape;\n */\nclass WhiteboardStroke extends Model\n{\n    use HasTimestamps;\n\n    public $fillable = [\n        'shape_id',\n        'points',\n        'color',\n        'width',\n    ];\n\n    public function shape(): BelongsTo\n    {\n        return $this->belongsTo(WhiteboardShape::class);\n    }\n\n    public function unpack(int $scale = 1000): array\n    {\n        $points = [];\n        $len = strlen($this->points);\n\n        for ($i = 0; $i < $len; $i += 16) {\n            $x = unpack('q', substr($this->points, $i, 8))[1];\n            $y = unpack('q', substr($this->points, $i + 8, 8))[1];\n\n            $points[] = $x / $scale;\n            $points[] = $y / $scale;\n        }\n\n        return $points;\n    }\n}\n"
  },
  {
    "path": "app/Notifications/Header.php",
    "content": "<?php\n\nnamespace App\\Notifications;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications\\Notification;\n\n/**\n * @property array $data\n */\nclass Header extends Notification\n{\n    use Queueable;\n\n    public $key;\n\n    public $colour;\n\n    public $icon;\n\n    public $params;\n\n    public $url;\n\n    /**\n     * Header constructor.\n     *\n     * @param  string  $key\n     * @param  string  $colour\n     * @param  string  $icon\n     * @param  array  $params\n     */\n    public function __construct($key = '', $icon = '', $colour = '', $params = [])\n    {\n        $this->key = $key;\n        $this->colour = $colour;\n        $this->icon = $icon;\n        $this->params = $params;\n    }\n\n    /**\n     * Get the notification's delivery channels.\n     *\n     * @return array\n     */\n    public function via($notifiable)\n    {\n        return ['database'];\n    }\n\n    /**\n     * Get the array representation of the notification.\n     *\n     * @return array\n     */\n    public function toArray($notifiable)\n    {\n        return [\n            'key' => $this->key,\n            'colour' => $this->colour,\n            'icon' => $this->icon,\n            'params' => $this->params,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Observers/AdminInviteObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\AdminInviteCreated;\nuse App\\Models\\AdminInvite;\n\nclass AdminInviteObserver\n{\n    public function created(AdminInvite $adminInvite)\n    {\n        AdminInviteCreated::dispatch($adminInvite);\n    }\n}\n"
  },
  {
    "path": "app/Observers/ApplicationObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nclass ApplicationObserver {}\n"
  },
  {
    "path": "app/Observers/BlameableObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\n\nclass BlameableObserver\n{\n    public function creating(Model $model): void\n    {\n        // We need the auth check because of workers having no user\n        if (auth()->check()) {\n            // @phpstan-ignore-next-line\n            $model->created_by = auth()->user()->id;\n        }\n    }\n\n    public function updating(Model $model): void\n    {\n        // Some models don't have an updated_by.\n        if (Arr::exists($model->getAttributes(), 'updated_by') && auth()->check()) {\n            // @phpstan-ignore-next-line\n            $model->updated_by = auth()->user()->id;\n        }\n    }\n\n    public function deleted(Model $model): void\n    {\n        if (Arr::exists($model->getAttributes(), 'deleted_by') && auth()->check()) {\n            // @phpstan-ignore-next-line\n            $model->deleted_by = auth()->user()->id;\n\n            if (\n                method_exists($model, 'useSoftDeletes') && $model->isDirty()\n            ) {\n                // Using softDeletes makes an update() on the model but only on the deleted_at field,\n                // so we need to do another write to the db because it's dumb.\n                $model->updateQuietly();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/BookmarkObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\Bookmark;\n\nclass BookmarkObserver\n{\n    public function saving(Bookmark $model)\n    {\n        // Handle empty or wrong positions\n        if (empty($model->position)) {\n            $model->position = Bookmark::max('position') + 1;\n        } else {\n            $model->position = (int) $model->position;\n        }\n\n        // Handle the entity type or direct entity\n        if (! empty($model->entity_type_id)) {\n            $model->entity_id = null;\n            // $model->tab = null;\n            $model->menu = '';\n        } else {\n            $model->entity_type_id = null;\n            $model->filters = null;\n        }\n\n        // Only allow certain keys in the options array\n        $options = $model->options;\n        if (! empty($options)) {\n            $model->options = array_intersect_key($model->options, array_flip($model->optionsAllowedKeys));\n        }\n\n        // Is private hook for non-admin (who can't set is_private)\n        if (! isset($model->is_private)) {\n            $model->is_private = false;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/CalendarObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Jobs\\CalendarsClearElapsed;\nuse App\\Models\\Calendar;\nuse App\\Models\\MiscModel;\n\nclass CalendarObserver\n{\n    public function saved(MiscModel $model)\n    {\n        if ($model->isDirty(['date'])) {\n            /** @var Calendar $model */\n            CalendarsClearElapsed::dispatch($model);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignDashboardObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Dashboards\\DashboardCreated;\nuse App\\Events\\Campaigns\\Dashboards\\DashboardDeleted;\nuse App\\Events\\Campaigns\\Dashboards\\DashboardUpdated;\nuse App\\Models\\CampaignDashboard;\n\nclass CampaignDashboardObserver\n{\n    public function created(CampaignDashboard $campaignDashboard)\n    {\n        DashboardCreated::dispatch($campaignDashboard, auth()->user());\n    }\n\n    public function updated(CampaignDashboard $campaignDashboard)\n    {\n        DashboardUpdated::dispatch($campaignDashboard, auth()->user());\n    }\n\n    public function deleted(CampaignDashboard $campaignDashboard)\n    {\n        DashboardDeleted::dispatch($campaignDashboard, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignDashboardRoleObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Dashboards\\DashboardUpdated;\nuse App\\Models\\CampaignDashboardRole;\n\nclass CampaignDashboardRoleObserver\n{\n    public function created(CampaignDashboardRole $campaignDashboardRole): void\n    {\n        DashboardUpdated::dispatch($campaignDashboardRole->dashboard, auth()->user());\n    }\n\n    public function updated(CampaignDashboardRole $campaignDashboardRole): void\n    {\n        DashboardUpdated::dispatch($campaignDashboardRole->dashboard, auth()->user());\n    }\n\n    public function deleted(CampaignDashboardRole $campaignDashboardRole): void\n    {\n        DashboardUpdated::dispatch($campaignDashboardRole->dashboard, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignDashboardWidgetObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\CampaignDashboardWidget;\n\nclass CampaignDashboardWidgetObserver\n{\n    public function creating(CampaignDashboardWidget $model)\n    {\n        // Get position\n        $model->position = 0;\n        $last = CampaignDashboardWidget::onDashboard($model->dashboard)\n            ->with('entity')\n            ->orderBy('position', 'desc')\n            ->first();\n        if (! empty($last)) {\n            $model->position = $last->position + 1;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignDescriptionObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Jobs\\EntityMappingJob;\nuse App\\Models\\CampaignDescription;\nuse App\\Services\\Mentions\\SaveService;\n\nclass CampaignDescriptionObserver\n{\n    use PurifiableTrait;\n\n    public function __construct(protected SaveService $saveService) {}\n\n    public function saving(CampaignDescription $description): void\n    {\n        $attributes = $description->getAttributes();\n        $campaign = $description->campaign;\n\n        foreach (['description', 'excerpt'] as $field) {\n            if (! array_key_exists($field, $attributes)) {\n                continue;\n            }\n            $description->$field = $this->purify(\n                $this->saveService\n                    ->campaign($campaign)\n                    ->user(auth()->user())\n                    ->text($description->$field)\n                    ->save()\n            );\n        }\n    }\n\n    public function saved(CampaignDescription $description): void\n    {\n        if ($description->isClean('description')) {\n            return;\n        }\n\n        $campaign = $description->campaign;\n        if ($campaign && method_exists($campaign, 'mentions')) {\n            EntityMappingJob::dispatch($campaign);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignExportObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Exports\\ExportCreated;\nuse App\\Models\\CampaignExport;\n\nclass CampaignExportObserver\n{\n    public function created(CampaignExport $campaignExport)\n    {\n        ExportCreated::dispatch($campaignExport, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignFollowerObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Followers\\FollowerCreated;\nuse App\\Events\\Campaigns\\Followers\\FollowerRemoved;\nuse App\\Models\\CampaignFollower;\n\nclass CampaignFollowerObserver\n{\n    public function created(CampaignFollower $campaignFollower)\n    {\n        FollowerCreated::dispatch($campaignFollower);\n    }\n\n    public function deleted(CampaignFollower $campaignFollower)\n    {\n        FollowerRemoved::dispatch($campaignFollower);\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignInviteObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Invites\\InviteCreated;\nuse App\\Events\\Campaigns\\Invites\\InviteDeleted;\nuse App\\Models\\CampaignInvite;\nuse Illuminate\\Support\\Str;\n\nclass CampaignInviteObserver\n{\n    public function creating(CampaignInvite $campaignInvite)\n    {\n        $campaignInvite->token = sha1(Str::random(50)) . time() . uniqid();\n        $campaignInvite->is_active = true;\n    }\n\n    public function created(CampaignInvite $campaignInvite)\n    {\n        InviteCreated::dispatch($campaignInvite, auth()->user());\n    }\n\n    public function deleted(CampaignInvite $campaignInvite)\n    {\n        InviteDeleted::dispatch($campaignInvite, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Deleted;\nuse App\\Events\\Campaigns\\Saved;\nuse App\\Events\\Campaigns\\Updated;\nuse App\\Models\\Campaign;\n\nclass CampaignObserver\n{\n    public function saving(Campaign $campaign)\n    {\n        // Safety net: ensure only one admin campaign per user can be prioritised at a time.\n        // This guards against two-tab exploits where the controller check passes twice.\n        if ($campaign->isDirty('is_prioritised') && $campaign->is_prioritised && auth()->check()) {\n            $user = auth()->user();\n\n            if (! $user->isElemental()) {\n                $campaign->is_prioritised = false;\n\n                return;\n            }\n\n            $adminCampaignIds = $user->campaignRoles()->where('is_admin', true)->pluck('campaign_id');\n            $alreadyPrioritised = Campaign::where('is_prioritised', true)\n                ->where('id', '!=', $campaign->id)\n                ->whereIn('id', $adminCampaignIds)\n                ->exists();\n\n            if ($alreadyPrioritised) {\n                $campaign->is_prioritised = false;\n            }\n        }\n    }\n\n    public function creating(Campaign $campaign)\n    {\n        $campaign->entity_visibility = false;\n        $campaign->entity_personality_visibility = false;\n    }\n\n    public function saved(Campaign $campaign)\n    {\n        Saved::dispatch($campaign, auth()->user());\n    }\n\n    public function updated(Campaign $campaign)\n    {\n        Updated::dispatch($campaign, auth()->user());\n    }\n\n    public function deleted(Campaign $campaign)\n    {\n        Deleted::dispatch($campaign, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignPluginObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Plugins\\PluginDeleted;\nuse App\\Events\\Campaigns\\Plugins\\PluginUpdated;\nuse App\\Models\\CampaignPlugin;\n\nclass CampaignPluginObserver\n{\n    public function updated(CampaignPlugin $campaignPlugin)\n    {\n        PluginUpdated::dispatch($campaignPlugin, auth()->user());\n        $campaignPlugin->campaign->touchQuietly();\n    }\n\n    public function deleted(CampaignPlugin $campaignPlugin)\n    {\n        PluginDeleted::dispatch($campaignPlugin, auth()->user());\n        $campaignPlugin->campaign->touchQuietly();\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignRoleObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Roles\\RoleCreated;\nuse App\\Events\\Campaigns\\Roles\\RoleDeleted;\nuse App\\Events\\Campaigns\\Roles\\RoleUpdated;\nuse App\\Models\\CampaignRole;\n\nclass CampaignRoleObserver\n{\n    public function created(CampaignRole $campaignRole)\n    {\n        RoleCreated::dispatch($campaignRole, auth()->user());\n    }\n\n    public function deleted(CampaignRole $campaignRole)\n    {\n        RoleDeleted::dispatch($campaignRole, auth()->user());\n    }\n\n    public function updated(CampaignRole $campaignRole)\n    {\n        RoleUpdated::dispatch($campaignRole, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignRoleUserObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Members\\RoleUserAdded;\nuse App\\Events\\Campaigns\\Members\\RoleUserRemoved;\nuse App\\Models\\CampaignRoleUser;\n\nclass CampaignRoleUserObserver\n{\n    public function created(CampaignRoleUser $campaignRoleUser)\n    {\n        RoleUserAdded::dispatch($campaignRoleUser, auth()->user());\n    }\n\n    public function deleted(CampaignRoleUser $campaignRoleUser)\n    {\n        RoleUserRemoved::dispatch($campaignRoleUser, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignSettingObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\SettingsSaved;\nuse App\\Models\\CampaignSetting;\n\n/**\n * Class CampaignSettingObserver\n */\nclass CampaignSettingObserver\n{\n    public function saved(CampaignSetting $campaignSetting)\n    {\n        SettingsSaved::dispatch($campaignSetting->campaign, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignStyleObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Styles\\StyleCreated;\nuse App\\Events\\Campaigns\\Styles\\StyleDeleted;\nuse App\\Events\\Campaigns\\Styles\\StyleUpdated;\nuse App\\Models\\CampaignStyle;\n\nclass CampaignStyleObserver\n{\n    public function saving(CampaignStyle $campaignStyle)\n    {\n        $content = preg_replace('/<\\/style\\s*>/i', '', $campaignStyle->content);\n        $campaignStyle->content = str_replace(['&gt;', '{{', '}}'], ['>', '', ''], $content);\n    }\n\n    public function creating(CampaignStyle $campaignStyle)\n    {\n        $last = $campaignStyle->campaign->styles()->max('order');\n        $campaignStyle->order = (int) $last + 1;\n    }\n\n    public function created(CampaignStyle $campaignStyle)\n    {\n        StyleCreated::dispatch($campaignStyle, $campaignStyle->campaign, auth()->user());\n    }\n\n    public function updated(CampaignStyle $campaignStyle)\n    {\n        StyleUpdated::dispatch($campaignStyle, $campaignStyle->campaign, auth()->user());\n    }\n\n    public function deleted(CampaignStyle $campaignStyle)\n    {\n        StyleDeleted::dispatch($campaignStyle, $campaignStyle->campaign, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/CampaignUserObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Models\\CampaignFollower;\nuse App\\Models\\CampaignUser;\n\nclass CampaignUserObserver\n{\n    public function created(CampaignUser $campaignUser)\n    {\n        // When joining a campaign, stop following said campaign\n        $follow = CampaignFollower::where('user_id', $campaignUser->user_id)\n            ->where('campaign_id', $campaignUser->campaign_id)\n            ->first();\n        if ($follow) {\n            $follow->delete();\n        }\n\n        // Update the campaign members cache when a user was added to the campaign\n        CampaignCache::campaign($campaignUser->campaign)->clear();\n    }\n\n    public function deleted(CampaignUser $campaignUser)\n    {\n        // Update the campaign members cache when a user was deleted\n        if ($campaignUser->campaign === null) {\n            return;\n        }\n        CampaignCache::campaign($campaignUser->campaign)->clear();\n    }\n}\n"
  },
  {
    "path": "app/Observers/ChildEntityObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Facades\\Images;\nuse App\\Models\\MiscModel;\n\nclass ChildEntityObserver\n{\n    public function created(MiscModel $model)\n    {\n        // Created a new sub entity? Create the parent entity.\n        $model->createEntity();\n    }\n\n    public function deleted(MiscModel $model)\n    {\n        // Soft-delete the entity\n        if ($model->entity) {\n            $model->entity->delete();\n        }\n\n        // If soft deleting, don't really delete the image\n        // @phpstan-ignore-next-line\n        if ($model->trashed()) {\n            return;\n        }\n\n        Images::model($model)->cleanup();\n    }\n\n    public function saved(MiscModel $model)\n    {\n        EntityLogger::model($model);\n    }\n}\n"
  },
  {
    "path": "app/Observers/Concerns/HasMany.php",
    "content": "<?php\n\nnamespace App\\Observers\\Concerns;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\MiscModel;\n\ntrait HasMany\n{\n    protected function saveMany(MiscModel $model, string $relation, array $values, string $classname, ?string $pivotRelation = null, ?string $pivotId = null): void\n    {\n        $existing = $unique = $recreate = [];\n        // Sometimes we have duplicate ids in the db, which we need to clean up\n        $relationName = $pivotRelation ?? $relation;\n        $relationID = $pivotId ?? 'id';\n        foreach ($model->$relationName as $rel) {\n            // If it already exists, we have an issue\n            if (! empty($existing[$rel->$relationID])) {\n                $recreate[$rel->$relationID] = $rel->$relationID;\n                $model->$relation()->detach($rel->$relationID);\n\n                continue;\n            }\n            $existing[$rel->$relationID] = $rel->$relationID;\n            $unique[$rel->$relationID] = $rel->$relationID;\n        }\n\n        if (! empty($recreate)) {\n            $model->$relation()->attach($recreate);\n        }\n\n        $newModels = [];\n        $find = new $classname;\n        foreach ($values as $id) {\n            // Existing race, do nothing\n            if (! empty($existing[$id])) {\n                unset($existing[$id]);\n\n                continue;\n            }\n            // If already managed, again, ignore\n            if (! empty($unique[$id])) {\n                continue;\n            }\n\n            $found = $find::find($id);\n            if (empty($found)) {\n                continue;\n            }\n            $newModels[] = $found->id;\n            EntityLogger::dirty($relation, null);\n        }\n        $model->$relation()->attach($newModels);\n\n        // Detach the remaining\n        if (! empty($existing)) {\n            $model->$relation()->detach($existing);\n            EntityLogger::dirty($relation, null);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/ConversationMessageObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\ConversationMessage;\n\nclass ConversationMessageObserver\n{\n    public function created(ConversationMessage $model)\n    {\n        $model->conversation->touch();\n    }\n}\n"
  },
  {
    "path": "app/Observers/ConversationObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\Conversation;\nuse App\\Models\\MiscModel;\n\nclass ConversationObserver\n{\n    public function updated(MiscModel $model)\n    {\n        // Changed the target? Remove participants.\n        if ($model->isDirty('target')) {\n            /** @var Conversation $model */\n            $model->participants()->delete();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/DiceRollObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\DiceRoll;\n\nclass DiceRollObserver\n{\n    public function saving(DiceRoll $model)\n    {\n        $model->system = 'standard';\n    }\n}\n"
  },
  {
    "path": "app/Observers/DiceRollResultObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\DiceRollResult;\nuse App\\Services\\DiceRollerService;\n\nclass DiceRollResultObserver\n{\n    public function __construct(protected DiceRollerService $diceRollerService) {}\n\n    public function saving(DiceRollResult $model)\n    {\n        $model->results = $this->diceRollerService->roll($model->diceRoll);\n    }\n}\n"
  },
  {
    "path": "app/Observers/EntityAbilityObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\EntityAbility;\nuse Illuminate\\Database\\Query\\JoinClause;\n\nclass EntityAbilityObserver\n{\n    public function saving(EntityAbility $entityAbility)\n    {\n        if ($entityAbility->position !== null) {\n            $entityAbility->position = (int) $entityAbility->position;\n        }\n    }\n\n    public function saved(EntityAbility $entityAbility)\n    {\n        // Position isn't empty, move the rest\n        if ($entityAbility->position !== null) {\n            $position = $entityAbility->position;\n            $abilities = EntityAbility::select('entity_abilities.*')\n                ->with(['ability', 'ability.entity'])\n                ->has('ability')\n                ->join('abilities as a', 'a.id', 'entity_abilities.ability_id')\n                ->leftJoin('entities as ae', function (JoinClause $join) {\n                    $join\n                        ->on('ae.entity_id', '=', 'a.id')\n                        ->where('ae.type_id', '=', config('entities.ids.ability'));\n                })\n                ->where(function ($query) use ($entityAbility) {\n                    $query->where('ae.id', $entityAbility->entity_id)\n                        ->orWhereNull('ae.id');\n                })\n                ->where('entity_abilities.entity_id', $entityAbility->entity_id)\n                ->where('entity_abilities.id', '<>', $entityAbility->id)\n                ->where('position', '>=', $position)\n                ->defaultOrder()\n                ->get();\n            /** @var EntityAbility $next */\n            foreach ($abilities as $next) {\n                // No access, skip\n                if (! $next->ability || ! $entityAbility->ability) {\n                    continue;\n                }\n                // Check the ability's parent to only move stuff in the same \"group\"\n                if ($next->ability->ability_id != $entityAbility->ability->ability_id) {\n                    continue;\n                }\n                $position++;\n                $next->position = $position;\n                $next->saveQuietly();\n            }\n        }\n\n        // When adding or changing an entity ability to an entity, we want to update the\n        // last updated date to reflect changes in the dashboard.\n        if ($entityAbility->entity) {\n            $entityAbility->entity->touchQuietly();\n        }\n    }\n\n    public function deleted(EntityAbility $entityAbility)\n    {\n        // When deleting an entity ability, we want to update the entity's last update\n        // for the dashboard. Careful of this when deleting an entity, we could be\n        // entering a non-ending loop.\n        if ($entityAbility->entity) {\n            $entityAbility->entity->touchQuietly();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/EntityAssetObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\Images;\nuse App\\Models\\EntityAsset;\n\nclass EntityAssetObserver\n{\n    public function saved(EntityAsset $entityAsset): void\n    {\n        // When adding or changing an asset to an entity, we want to update the\n        // last updated date to reflect changes in the dashboard.\n        if ($entityAsset->entity) {\n            $entityAsset->entity->touchQuietly();\n        }\n    }\n\n    public function deleting(EntityAsset $entityAsset): void\n    {\n        if ($entityAsset->isFile() && ! $entityAsset->image) {\n            Images::model($entityAsset)->field('imagePath')->cleanup();\n        }\n    }\n\n    public function deleted(EntityAsset $entityAsset): void\n    {\n        if ($entityAsset->entity) {\n            $entityAsset->entity->touchQuietly();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/EntityLogObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\Entity;\n\n/**\n * Class EntityLogObserver\n *\n * Added as an observer to the Entity model\n */\nclass EntityLogObserver\n{\n    public function created(Entity $entity)\n    {\n        EntityLogger::entity($entity)->create();\n    }\n\n    public function updated(Entity $entity)\n    {\n        // Don't log updates if just did one (typically when creating, restoring or bulk editing)\n        if (! empty($entity->getOriginal('deleted_at'))) {\n            return;\n        }\n\n        EntityLogger::entity($entity)->update();\n    }\n\n    public function deleted(Entity $entity)\n    {\n        // Not soft deleting? Nothing more to do\n        if (! $entity->trashed()) {\n            return;\n        }\n        EntityLogger::entity($entity)->delete();\n    }\n\n    public function restored(Entity $entity)\n    {\n        EntityLogger::entity($entity)->restore();\n    }\n}\n"
  },
  {
    "path": "app/Observers/EntityObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Enums\\Permission;\nuse App\\Enums\\WebhookAction;\nuse App\\Events\\Entities\\EntityRestored;\nuse App\\Facades\\Permissions;\nuse App\\Jobs\\EntityUpdatedJob;\nuse App\\Jobs\\EntityWebhookJob;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\Entity;\n\nclass EntityObserver\n{\n    public function created(Entity $entity)\n    {\n        // If the user has created a new entity but doesn't have the permission to read or edit it,\n        // automatically create said permission.\n        if (! auth()->user()->can('view', $entity)) {\n            $this->grant($entity, Permission::View->value);\n        }\n        if (! auth()->user()->can('update', $entity)) {\n            $this->grant($entity, Permission::Update->value);\n        }\n        // Refresh the model because adding permissions to the child means we have a new relation\n        if (Permissions::granted() && $entity->hasChild()) {\n            $entity->unsetRelation('child');\n            $entity->reloadChild();\n        }\n\n        if ($entity->campaign->premium()) {\n            EntityWebhookJob::dispatch($entity, auth()->user(), WebhookAction::CREATED->value);\n        }\n    }\n\n    protected function grant(Entity $entity, int $action): CampaignPermission\n    {\n        $permission = new CampaignPermission;\n        $permission->entity_id = $entity->id;\n        $permission->entity_type_id = $entity->type_id;\n        $permission->campaign_id = $entity->campaign_id;\n        $permission->user_id = auth()->user()->id;\n        $permission->action = $action;\n        $permission->access = true;\n        $permission->save();\n        Permissions::grant($entity);\n\n        return $permission;\n    }\n\n    /**\n     * Queue a few jobs whenever an entity gets updated\n     */\n    public function updated(Entity $entity)\n    {\n        EntityUpdatedJob::dispatch($entity);\n\n        if ($entity->campaign->premium()) {\n            EntityWebhookJob::dispatch($entity, auth()->user(), WebhookAction::EDITED->value);\n        }\n    }\n\n    public function deleted(Entity $entity)\n    {\n        // When an entity is soft-deleted, we just want some webhooks to trigger,\n        // not actually delete the entity and its image.\n        if ($entity->trashed()) {\n            if ($entity->campaign->premium()) {\n                EntityWebhookJob::dispatch($entity, auth()->user(), WebhookAction::DELETED->value);\n            }\n\n            return;\n        }\n\n        // Todo: Why is this not handled by the database?\n        $entity->permissions()->delete();\n        $entity->widgets()->delete();\n    }\n\n    public function restored(Entity $entity)\n    {\n        EntityRestored::dispatch($entity, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/EntityTypeObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeCreated;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeDeleted;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeUpdated;\nuse App\\Models\\EntityType;\n\nclass EntityTypeObserver\n{\n    public function created(EntityType $entityType)\n    {\n        EntityTypeCreated::dispatch($entityType, auth()->user());\n    }\n\n    public function updated(EntityType $entityType)\n    {\n        EntityTypeUpdated::dispatch($entityType, auth()->user());\n    }\n\n    public function deleted(EntityType $entityType)\n    {\n        EntityTypeDeleted::dispatch($entityType, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/EntryObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Jobs\\EntityMappingJob;\nuse App\\Services\\Mentions\\SaveService;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\n\nclass EntryObserver\n{\n    use PurifiableTrait;\n\n    public function saving(Model $model)\n    {\n        // When creating modules through the API, there might be no entry, which is why we need to\n        // check if they are in the attributes of the model before interacting with it;\n        $attributes = $model->getAttributes();\n        // @phpstan-ignore-next-line\n        if (! array_key_exists($model->entryFieldName(), $attributes)) {\n            return;\n        }\n        /** @var SaveService $service */\n        $service = app()->make(SaveService::class);\n        $campaign = CampaignLocalization::getCampaign();\n        // When creating a campaign, there is no campaign yet\n        if ($campaign) {\n            $service->campaign($campaign);\n        }\n        // @phpstan-ignore-next-line\n        $model->{$model->entryFieldName()} = $this->purify(\n            $service\n                ->user(auth()->user())\n                // @phpstan-ignore-next-line\n                ->text($model->{$model->entryFieldName()})\n                ->save()\n        );\n\n        //        dd($model->{$model->entryFieldName()});\n\n        // Word count\n        if (! Arr::exists($attributes, 'words')) {\n            return;\n        }\n        // @phpstan-ignore-next-line\n        $model->words = str_word_count(strip_tags($model->{$model->entryFieldName()}));\n    }\n\n    public function saved(Model $model)\n    {\n        // @phpstan-ignore-next-line\n        if ($model->isClean([$model->entryFieldName(), $model->tooltipFieldName()])) {\n            return;\n        }\n        if (method_exists($model, 'mentions')) {\n            EntityMappingJob::dispatch($model);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/FamilyTreeObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\FamilyTree;\n\nclass FamilyTreeObserver\n{\n    public function saved(FamilyTree $familyTree)\n    {\n        EntityLogger::entity($familyTree->family->entity)->updatedFamilyTree();\n    }\n}\n"
  },
  {
    "path": "app/Observers/FeatureObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\FeatureCreated;\nuse App\\Models\\Feature;\n\nclass FeatureObserver\n{\n    public function created(Feature $feature)\n    {\n        FeatureCreated::dispatch($feature);\n    }\n}\n"
  },
  {
    "path": "app/Observers/ImageObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Models\\Image;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass ImageObserver\n{\n    public function deleting(Image $image)\n    {\n        if (! $image->isFolder()) {\n            return;\n        }\n\n        // Delete any images in the folder first\n        foreach ($image->images as $img) {\n            $img->delete();\n        }\n    }\n\n    public function deleted(Image $image)\n    {\n        Storage::disk(config('images.disk'))\n            ->delete($image->path);\n\n        CampaignCache::campaign($image->campaign)->clear();\n    }\n\n    public function saved(Image $image)\n    {\n        CampaignCache::campaign($image->campaign)->clear();\n    }\n}\n"
  },
  {
    "path": "app/Observers/ImageableObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\Images;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass ImageableObserver\n{\n    public function saved(Model $model): void\n    {\n        // @phpstan-ignore-next-line\n        foreach ($model->getImageFields() as $field) {\n            Images::model($model)\n                // @phpstan-ignore-next-line\n                ->folder($model->imageStoragePath())\n                ->field($field)\n                ->handle();\n        }\n        $model->saveQuietly();\n    }\n\n    public function deleted(Model $model): void\n    {\n        // @phpstan-ignore-next-line\n        foreach ($model->getImageFields() as $field) {\n            Images::model($model)\n                ->field($field)\n                ->cleanup();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/InventoryObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\Inventory;\n\nclass InventoryObserver\n{\n    public function saving(Inventory $inventory)\n    {\n        if ($inventory->copy_item_entry && empty($inventory->item)) {\n            $inventory->copy_item_entry = false;\n        }\n    }\n\n    public function saved(Inventory $inventory)\n    {\n        // When adding or changing an inventory to an entity, we want to update the\n        // last updated date to reflect changes in the dashboard.\n        if ($inventory->entity) {\n            $inventory->entity->touchQuietly();\n        }\n    }\n\n    public function deleted(Inventory $inventory)\n    {\n        // When deleting an inventory, we want to update the entity's last update\n        // for the dashboard. Careful of this when deleting an entity, we could be\n        // entering a non-ending loop.\n        if ($inventory->entity) {\n            $inventory->entity->touchQuietly();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/MapGroupObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\MapGroup;\n\nclass MapGroupObserver\n{\n    use ReorderTrait;\n\n    public function saving(MapGroup $mapGroup)\n    {\n        if (! empty($mapGroup->position)) {\n            $mapGroup->position = (int) $mapGroup->position;\n        } else {\n            $lastGroup = $mapGroup->map->groups()->max('position');\n            if ($lastGroup) {\n                $mapGroup->position = (int) $lastGroup + 1;\n            } else {\n                $mapGroup->position = 1;\n            }\n        }\n    }\n\n    public function deleted(MapGroup $mapGroup)\n    {\n        $mapGroup->map->touchSilently();\n    }\n\n    public function saved(MapGroup $mapGroup)\n    {\n        $this->reorder($mapGroup);\n        $mapGroup->map->touchSilently();\n    }\n}\n"
  },
  {
    "path": "app/Observers/MapLayerObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\Images;\nuse App\\Models\\MapLayer;\n\nclass MapLayerObserver\n{\n    use ReorderTrait;\n\n    public function saving(MapLayer $mapLayer)\n    {\n        if (! empty($mapLayer->position)) {\n            $mapLayer->position = (int) $mapLayer->position;\n        } else {\n            /** @var ?MapLayer $lastLayer */\n            $lastLayer = $mapLayer->map->layers()->orderByDesc('position')->first();\n            if ($lastLayer) {\n                $mapLayer->position = (int) $lastLayer->position + 1;\n            } else {\n                $mapLayer->position = 1;\n            }\n        }\n\n        // Trying to cheat the options\n        if ($mapLayer->type_id > 2) {\n            $mapLayer->type_id = null;\n        }\n    }\n\n    public function deleted(MapLayer $mapLayer)\n    {\n        Images::model($mapLayer)->cleanup();\n        $mapLayer->map->touchSilently();\n    }\n\n    public function saved(MapLayer $mapLayer)\n    {\n        $this->reorder($mapLayer);\n        $mapLayer->map->touchSilently();\n    }\n}\n"
  },
  {
    "path": "app/Observers/MapMarkerObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\MapMarker;\nuse enshrined\\svgSanitize\\Sanitizer;\nuse Illuminate\\Support\\Str;\n\nclass MapMarkerObserver\n{\n    use PurifiableTrait;\n\n    public function saving(MapMarker $mapMarker)\n    {\n        $mapMarker->opacity = round($mapMarker->opacity, 1);\n        $mapMarker->custom_icon = $this->sanitizeCustomIcon($mapMarker);\n\n        if ($mapMarker->size_id != 6) {\n            $mapMarker->circle_radius = null;\n        }\n    }\n\n    public function saved(MapMarker $mapMarker)\n    {\n        $mapMarker->map->touchSilently();\n    }\n\n    public function deleted(MapMarker $mapMarker)\n    {\n        $mapMarker->map->touchSilently();\n    }\n\n    /**\n     * Sanitize the custom icon (i or svg html element)\n     *\n     * @return string|null\n     */\n    protected function sanitizeCustomIcon(MapMarker $mapMarker)\n    {\n        if (empty($mapMarker->custom_icon)) {\n            return null;\n        }\n\n        if (Str::startsWith($mapMarker->custom_icon, ['<svg', '<?xml'])) {\n            $sanitizer = new Sanitizer;\n            $cleanSvg = $sanitizer->sanitize($mapMarker->custom_icon);\n            if ($cleanSvg !== false) {\n                return $cleanSvg;\n            } else {\n                return null;\n            }\n        } elseif (Str::startsWith($mapMarker->custom_icon, ['<i ', 'fa-', 'ra '])) {\n            return $this->purify($mapMarker->custom_icon);\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/Observers/MapObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\Map;\n\nclass MapObserver\n{\n    public function saving(Map $map)\n    {\n        $map->grid = (int) $map->grid;\n    }\n}\n"
  },
  {
    "path": "app/Observers/OrganisationMemberObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nclass OrganisationMemberObserver {}\n"
  },
  {
    "path": "app/Observers/PostObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Posts\\PostCreated;\nuse App\\Events\\Posts\\PostDeleted;\nuse App\\Events\\Posts\\PostRestored;\nuse App\\Events\\Posts\\PostUpdated;\nuse App\\Models\\Post;\n\nclass PostObserver\n{\n    use ReorderTrait;\n\n    public function saving(Post $post)\n    {\n        $settings = $post->settings;\n        if (request()->has('settings[collapse]')) {\n            if ((bool) request()->get('settings[collapse]')) {\n                $settings['collapse'] = true;\n            } else {\n                unset($settings['collapse']);\n            }\n        }\n        $post->settings = $settings;\n    }\n\n    public function created(Post $post)\n    {\n        PostCreated::dispatch($post, auth()->user());\n    }\n\n    public function updated(Post $post)\n    {\n        // Don't log updates if just did one (typically when creating, restoring or bulk editing)\n        if ($post->isDirty('deleted_at')) {\n            return;\n        }\n\n        PostUpdated::dispatch($post, auth()->user());\n    }\n\n    public function saved(Post $post)\n    {\n        if (request()->filled('position')) {\n            $this->reorder($post);\n        }\n        // When adding or changing a post to an entity, we want to update the\n        // last updated date to reflect changes in the dashboard.\n        $post->entity->touchSilently();\n    }\n\n    public function deleted(Post $post)\n    {\n        PostDeleted::dispatch($post, auth()->user());\n\n        // When deleting a post, we want to update the entity's last update\n        // for the dashboard. Careful of this when deleting an entity, we could be\n        // entering a non-ending loop.\n        if ($post->entity) {\n            $post->entity->touchSilently();\n        }\n    }\n\n    public function restored(Post $post)\n    {\n        PostRestored::dispatch($post, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/PresetObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\Preset;\n\nclass PresetObserver\n{\n    public function saving(Preset $preset)\n    {\n        // Clean up config\n        $config = $preset->config;\n        foreach ($config as $key => $value) {\n            if ($value === null) {\n                unset($config[$key]);\n            }\n        }\n\n        $preset->config = $config;\n    }\n}\n"
  },
  {
    "path": "app/Observers/PurifiableObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PurifiableObserver\n{\n    use PurifiableTrait;\n\n    public function saving(Model $model): void\n    {\n        // @phpstan-ignore-next-line\n        $fields = $model->getPurifiableFields();\n        foreach ($fields as $field) {\n            $model->{$field} = $this->purify(\n                $model->{$field}\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/PurifiableTrait.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse Stevebauman\\Purify\\Facades\\Purify;\n\n/**\n * Trait PurifiableTrait\n */\ntrait PurifiableTrait\n{\n    /**\n     * @param  string  $text\n     * @return string\n     */\n    public function purify($text = '')\n    {\n        // dd('help');\n        $purified = Purify::clean($text);\n\n        // If it's really empty, zap it\n        if ($purified == \"\\r\\n\\r\\n\") {\n            return '';\n        }\n\n        return $purified;\n    }\n}\n"
  },
  {
    "path": "app/Observers/QuestElementObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nclass QuestElementObserver {}\n"
  },
  {
    "path": "app/Observers/Remindable.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Services\\Entity\\RemindableService;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Remindable\n{\n    protected RemindableService $service;\n\n    public function __construct(RemindableService $service)\n    {\n        $this->service = $service;\n    }\n\n    public function saved(Model $model)\n    {\n        // @phpstan-ignore-next-line\n        $this->service->request(request())->save($model);\n    }\n}\n"
  },
  {
    "path": "app/Observers/ReminderObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\Reminder;\n\nclass ReminderObserver\n{\n    public function saving(Reminder $reminder)\n    {\n        $reminder->is_recurring = ! empty($reminder->recurring_periodicity);\n        if (! $reminder->is_recurring) {\n            $reminder->recurring_until = null;\n        }\n    }\n\n    public function updating(Reminder $reminder)\n    {\n        // When updating and elapsed isn't dirty (calculated on the overview), reset it\n        if ($reminder->isDirty(['year', 'month', 'day', 'calendar_id'])) {\n            $reminder->elapsed = null;\n        }\n    }\n\n    public function updated(Reminder $reminder)\n    {\n        // Go touch linked entity and its child\n        $reminder->remindable->touchSilently();\n    }\n\n    public function deleted(Reminder $reminder)\n    {\n        // Go touch linked entity and its child\n        $reminder->remindable->touchSilently();\n    }\n}\n"
  },
  {
    "path": "app/Observers/ReorderTrait.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\MapGroup;\nuse App\\Models\\MapLayer;\nuse App\\Models\\Post;\nuse App\\Models\\TimelineElement;\n\n/**\n * Trait ReorderTrait\n */\ntrait ReorderTrait\n{\n    public function reorder(mixed $model)\n    {\n        $position = 1;\n\n        if ($model instanceof MapGroup) {\n            foreach ($model->map->groups()->orderBy('position')->get() as $group) {\n                $group->position = $position;\n                $group->updateQuietly();\n                $position = $position + 1;\n            }\n        } elseif ($model instanceof MapLayer) {\n            foreach ($model->map->layers()->orderBy('position')->get() as $layer) {\n                $layer->position = $position;\n                $layer->updateQuietly();\n                $position = $position + 1;\n            }\n        } elseif ($model instanceof TimelineElement) {\n            foreach ($model->era->elements()->orderBy('position')->orderBy('updated_at', 'DESC')->get() as $element) {\n                $element->position = $position;\n                $element->updateQuietly();\n                $position = $position + 1;\n            }\n        } elseif ($model instanceof Post) {\n            $this->reorderPosts($model);\n        }\n    }\n\n    protected function reorderPosts(Post $model)\n    {\n        // Placing it first, this makes it a bit complicated\n        $position = $model->position;\n\n        // If it's placed after the entry (positive position)\n        if ($model->position > 0) {\n            /** @var Post[] $posts */\n            $posts = $model->entity->posts()\n                ->where('position', '>', 0)\n                ->whereNot('id', $model->id)\n                ->orderBy('position')\n                ->get();\n            foreach ($posts as $post) {\n                // Ignore things that come \"before\". Could be moved into the query\n                if ($post->position < $model->position) {\n                    continue;\n                }\n                $position++;\n                $post->position = $position;\n                $post->updateQuietly();\n            }\n        } else {\n            /** @var Post[] $posts */\n            $posts = $model->entity->posts()\n                ->where('position', '<', 0)\n                ->whereNot('id', $model->id)\n                ->orderByDesc('position')\n                ->get();\n            foreach ($posts as $post) {\n                // Ignore things that come \"after\". Could be moved into the query\n                if ($post->position > $model->position) {\n                    continue;\n                }\n                $position--;\n                $post->position = $position;\n                $post->updateQuietly();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/SanitizedObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Str;\n\nclass SanitizedObserver\n{\n    public function saving(Model $model): void\n    {\n        $attributes = $model->getAttributes();\n        // @phpstan-ignore-next-line\n        foreach ($model->getSanitizable() as $field) {\n            if (Str::contains($field, '.')) {\n                $segments = explode('.', $field);\n                if (! isset($attributes[$segments[0]])) {\n                    continue;\n                }\n                $array = $model->{$segments[0]};\n                if (! isset($array[$segments[1]])) {\n                    continue;\n                }\n                $array[$segments[1]] = $this->purify($model->{$segments[0]}[$segments[1]]);\n                $model->{$segments[0]} = $array;\n            } else {\n                if (! isset($attributes[$field])) {\n                    continue;\n                }\n                $model->$field = $this->purify($model->$field);\n            }\n        }\n    }\n\n    protected function purify(?string $text): ?string\n    {\n        return mb_trim(strip_tags($text ?? ''));\n    }\n}\n"
  },
  {
    "path": "app/Observers/SlugObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Str;\n\nclass SlugObserver\n{\n    public function saving(Model $model)\n    {\n        // @phpstan-ignore-next-line\n        $model->slug = Str::slug($model->name, '');\n    }\n}\n"
  },
  {
    "path": "app/Observers/SuggestionObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Facades\\EntityCache;\nuse App\\Models\\Entity;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SuggestionObserver\n{\n    public function saved(Model $model)\n    {\n        $this->clearSuggestions($model);\n    }\n\n    public function deleted(Model $model)\n    {\n        $this->clearSuggestions($model);\n    }\n\n    protected function clearSuggestions(Model $model): void\n    {\n        // Clear the cache suggestion for the entity type\n        if ($model instanceof Entity) {\n            EntityCache::clearSuggestion($model->entityType);\n        }\n        // @phpstan-ignore-next-line\n        foreach ($model->getSuggestions() as $class => $call) {\n            $cache = app($class);\n            $cache::{$call}();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/TaggableObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\Bookmark;\nuse App\\Models\\Tag;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass TaggableObserver\n{\n    public function saved(Model $model)\n    {\n        $this->saveTags($model);\n    }\n\n    /**\n     * @return void\n     */\n    protected function saveTags(Model $model)\n    {\n        /** @var Bookmark $model */\n        if (! request()->has('save_tags')) {\n            return;\n        }\n\n        // Only save tags if we are in a form.\n        $ids = (array) request()->post('tags', []);\n\n        // Only use tags the user can actually view. This way admins can\n        // have tags on entities that the user doesn't know about.\n        $existing = [];\n        foreach ($model->tags as $tag) {\n            $existing[$tag->id] = $tag->name;\n        }\n        $new = [];\n\n        foreach ($ids as $id) {\n            if (! empty($existing[$id])) {\n                unset($existing[$id]);\n            } else {\n                /** @var Tag $tag */\n                $tag = Tag::findOrFail($id);\n                $new[] = $tag->id;\n            }\n        }\n        $model->tags()->attach($new);\n\n        // Detach the remaining\n        if (! empty($existing)) {\n            $model->tags()->detach(array_keys($existing));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/TimelineElementObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\TimelineElement;\n\nclass TimelineElementObserver\n{\n    use ReorderTrait;\n\n    public function saving(TimelineElement $timelineElement)\n    {\n\n        if (empty($timelineElement->position) || $timelineElement->position < 1) {\n            $timelineElement->position = 1;\n            /** @var ?TimelineElement $last */\n            $last = $timelineElement->era->elements()->orderByDesc('position')->first();\n            if ($last) {\n                $timelineElement->position = $last->position + 1;\n            }\n        }\n\n        if (empty($timelineElement->colour)) {\n            $timelineElement->colour = '';\n        }\n    }\n\n    public function saved(TimelineElement $timelineElement)\n    {\n        $this->reorder($timelineElement);\n    }\n}\n"
  },
  {
    "path": "app/Observers/TimelineEraObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\TimelineEra;\n\nclass TimelineEraObserver\n{\n    public function saving(TimelineEra $timelineEra)\n    {\n        $timelineEra->is_collapsed = (bool) $timelineEra->is_collapsed;\n    }\n\n    public function creating(TimelineEra $timelineEra)\n    {\n        // Give it the last position\n        $lastGroup = $timelineEra->timeline->eras()->max('position');\n        if ($lastGroup) {\n            $timelineEra->position = (int) $lastGroup + 1;\n        } else {\n            $timelineEra->position = 1;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/UserLogObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\UserLog;\n\nclass UserLogObserver\n{\n    public function creating(UserLog $userLog)\n    {\n        $userLog->ip = request()->ip();\n        // In prod, requests come from our load balancers, so the real user ip is provided by Cloudflare.\n        $ip = request()->server('HTTP_CF_CONNECTING_IP');\n        if (! empty($ip)) {\n            $userLog->ip = $ip;\n            // While we're at it, track the user's country. All of this data is purged after 30 days.\n            $userLog->country = mb_substr(request()->server('HTTP_CF_IPCOUNTRY'), 0, 6);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/UserObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Enums\\UserAction;\nuse App\\Events\\Users\\EmailChanged;\nuse App\\Facades\\UserCache;\nuse App\\Jobs\\Emails\\MailSettingsChangeJob;\nuse App\\Jobs\\Emails\\WelcomeEmailJob;\nuse App\\Jobs\\Users\\UnsubscribeUser;\nuse App\\Jobs\\Users\\UpdateEmail;\nuse App\\Models\\User;\nuse Exception;\nuse Mcamara\\LaravelLocalization\\Facades\\LaravelLocalization;\n\nclass UserObserver\n{\n    public function saving(User $user)\n    {\n        // Purify the bio\n        if (! empty($user->profile['bio'])) {\n            $profile = $user->profile;\n            try {\n                $profile['bio'] = mb_substr(strip_tags($profile['bio']), 0, 301);\n                $user->profile = $profile;\n            } catch (Exception $e) {\n                // An invalid profile, like emojis in text\n                $profile['bio'] = '';\n                $user->profile = $profile;\n            }\n        }\n\n        // Purify Billing info\n        if (! empty($user->profile['billing'])) {\n            $profile = $user->profile;\n            try {\n                $profile['billing'] = mb_substr(strip_tags($profile['billing']), 0, 1024);\n                $user->profile = $profile;\n            } catch (Exception $e) {\n                // invalid billing info, like emojis in text\n                $profile['billing'] = '';\n                $user->profile = $profile;\n            }\n        }\n    }\n\n    public function updated(User $user)\n    {\n        // Tell mailchimp about the user's new email\n        if (! $user->wasRecentlyCreated && $user->isDirty('email') && $user->hasNewsletter()) {\n            UpdateEmail::dispatch($user);\n            EmailChanged::dispatch($user, $user->getOriginal('email'));\n        }\n        if ($user->isDirty('name')) {\n            UserCache::user($user)->clearName();\n        }\n\n        // Todo: move to the controller\n        if ($user->isDirty('email')) {\n            $user->log(UserAction::emailUpdate);\n        } elseif ($user->isDirty('provider')) {\n            $user->log(UserAction::socialSwitch);\n        } elseif ($user->isDirty('password')) {\n            $user->log(UserAction::passwordUpdate);\n        }\n    }\n\n    public function creating(User $user)\n    {\n        $user->locale = LaravelLocalization::getCurrentLocale();\n        $settings = [];\n\n        if (session()->has('tracking')) {\n            $settings['tracking'] = session()->get('tracking');\n            session()->remove('tracking');\n        }\n\n        if (session()->has('invite_token')) {\n            $settings['invited'] = true;\n        }\n\n        if (count($settings) > 0) {\n            $user->settings = $settings;\n        }\n    }\n\n    public function created(User $user)\n    {\n        if (! app()->environment('testing')) {\n            WelcomeEmailJob::dispatch($user, app()->getLocale());\n        }\n        session()->put('user_registered', true);\n\n        if (request()->filled('newsletter')) {\n            $user\n                ->updateSettings(['mail_release' => 1])\n                ->save();\n\n            MailSettingsChangeJob::dispatch($user, true);\n        }\n    }\n\n    /**\n     * When a user is deleted, we need to clean up their avatar (only on production to avoid Jay doing silly things),\n     * their newsletter status, cache, and later we also need to delete their stripe data after 3 months.\n     */\n    public function deleted(User $user)\n    {\n        // Log::info('Deleted user', ['user' => $user->id]);\n        UserCache::user($user)\n            ->clearName()\n            ->clear();\n\n        // If the user was subscribed to the newsletter, unsubscribe them\n        if (app()->isProduction() && ! empty($user->hasNewsletter())) {\n            UnsubscribeUser::dispatch($user->email);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/VisibilityObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Enums\\Visibility;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass VisibilityObserver\n{\n    public function saving(Model $model)\n    {\n        if (empty($model->visibility_id)) {\n            // @phpstan-ignore-next-line\n            $model->visibility_id = Visibility::All;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Observers/WebhookObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Events\\Campaigns\\Webhooks\\WebhookCreated;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookDeleted;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookUpdated;\nuse App\\Models\\Webhook;\n\nclass WebhookObserver\n{\n    public function created(Webhook $webhook)\n    {\n        WebhookCreated::dispatch($webhook, auth()->user());\n    }\n\n    public function updated(Webhook $webhook)\n    {\n        WebhookUpdated::dispatch($webhook, auth()->user());\n    }\n\n    public function deleted(Webhook $webhook)\n    {\n        WebhookDeleted::dispatch($webhook, auth()->user());\n    }\n}\n"
  },
  {
    "path": "app/Observers/WhiteboardShapeObserver.php",
    "content": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Models\\WhiteboardShape;\n\nclass WhiteboardShapeObserver\n{\n    const SCALE = 1000;\n\n    public function saving(WhiteboardShape $shape)\n    {\n        if (! empty($shape->scale_x)) {\n            $shape->width *= $shape->scale_x;\n            unset($shape->scale_x);\n        }\n\n        if (! empty($shape->scale_y)) {\n            $shape->height *= $shape->scale_y;\n            unset($shape->scale_y);\n        }\n\n        if ($shape->isDirty('x')) {\n            $shape->x = (int) round($shape->x * self::SCALE);\n        }\n        if ($shape->isDirty('y')) {\n            $shape->y = (int) round($shape->y * self::SCALE);\n        }\n        if ($shape->isDirty('width')) {\n            $shape->width = (int) round($shape->width * self::SCALE);\n        }\n        if ($shape->isDirty('height')) {\n            $shape->height = (int) round($shape->height * self::SCALE);\n        }\n\n        if ($shape->isDirty('rotation')) {\n            $shape->rotation = (int) round($shape->rotation * 1_000_000);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Policies/AbilityPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass AbilityPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.ability');\n    }\n}\n"
  },
  {
    "path": "app/Policies/AttributeTemplatePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass AttributeTemplatePolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.attribute_template');\n    }\n}\n"
  },
  {
    "path": "app/Policies/BookmarkPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Enums\\Permission;\nuse App\\Facades\\EntityPermission;\nuse App\\Models\\Bookmark;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass BookmarkPolicy\n{\n    use HandlesAuthorization;\n\n    public function browse(User $user, Bookmark $bookmark): bool\n    {\n        return $user->isAdmin() || $this->checkPermission(Permission::Bookmarks->value, $user);\n    }\n\n    public function view(User $user, Bookmark $bookmark): bool\n    {\n        return $user->isAdmin() || $this->checkPermission(Permission::Bookmarks->value, $user);\n    }\n\n    public function create(User $user): bool\n    {\n        return $user->isAdmin() || EntityPermission::user($user)->hasPermission(0, Permission::Bookmarks->value);\n    }\n\n    public function update(User $user, Bookmark $bookmark): bool\n    {\n        return $this->view($user, $bookmark);\n    }\n\n    public function delete(User $user, Bookmark $bookmark): bool\n    {\n        return $this->view($user, $bookmark);\n    }\n\n    protected function checkPermission(int $action, User $user): bool\n    {\n        return EntityPermission::user($user)->hasPermission(0, $action);\n    }\n}\n"
  },
  {
    "path": "app/Policies/CalendarPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass CalendarPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.calendar');\n    }\n}\n"
  },
  {
    "path": "app/Policies/CampaignBoostPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\CampaignBoost;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CampaignBoostPolicy\n{\n    use HandlesAuthorization;\n\n    /**\n     * Create a new policy instance.\n     *\n     * @return void\n     */\n    public function __construct() {}\n\n    public function destroy(User $user, CampaignBoost $campaignBoost): bool\n    {\n        return $campaignBoost->user_id === $user->id;\n    }\n}\n"
  },
  {
    "path": "app/Policies/CampaignPluginPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\User;\nuse App\\Traits\\AdminPolicyTrait;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CampaignPluginPolicy\n{\n    use AdminPolicyTrait;\n    use HandlesAuthorization;\n\n    /**\n     * Determine whether the user can delete the campaignPermission.\n     */\n    public function enable(User $user, CampaignPlugin $campaignPlugin)\n    {\n        return $this->isAdmin($user);\n    }\n}\n"
  },
  {
    "path": "app/Policies/CampaignPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Enums\\CampaignExportStatus;\nuse App\\Enums\\CampaignFilterType;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\EntityPermission;\nuse App\\Facades\\Identity;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\User;\nuse App\\Traits\\AdminPolicyTrait;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CampaignPolicy\n{\n    use AdminPolicyTrait;\n    use HandlesAuthorization;\n\n    /**\n     * Determine whether the user can view the campaign.\n     */\n    public function view(User $user, Campaign $campaign): bool\n    {\n        return $this->access($user, $campaign);\n    }\n\n    public function member(User $user, Campaign $campaign): bool\n    {\n        return CampaignCache::campaign($campaign)\n            ->members()\n            ->where('id', $user->id)->count() == 1;\n    }\n\n    /**\n     * Determine whether the user can access the campaign\n     */\n    public function access(User $user, Campaign $campaign): bool\n    {\n        return true;\n    }\n\n    public function admin(User $user, Campaign $campaign): bool\n    {\n        return $user->isAdmin($campaign);\n    }\n\n    /**\n     * Can't create a campaign while impersonating another user. Should be handled in the controller?\n     */\n    public function create(User $user): bool\n    {\n        return ! Identity::isImpersonating();\n    }\n\n    /**\n     * Determine whether the user can update the campaign.\n     */\n    public function update(User $user, Campaign $campaign): bool\n    {\n        return\n            $this->member($user, $campaign) && (\n                $user->isAdmin() || $this->checkPermission(CampaignPermission::ACTION_MANAGE, $user, $campaign)\n            );\n    }\n\n    /**\n     * Determine whether the user can manage the roles of the campaign.\n     */\n    public function roles(User $user, Campaign $campaign): bool\n    {\n        return\n            $this->member($user, $campaign) && (\n                $user->isAdmin()\n            );\n    }\n\n    /**\n     * Determine whether the user can manage the webhooks of the campaign.\n     */\n    public function webhooks(User $user, Campaign $campaign): bool\n    {\n        return $this->recover($user, $campaign);\n    }\n\n    /**\n     * Determine whether the user can manage the webhooks of the campaign.\n     */\n    public function logs(User $user, Campaign $campaign): bool\n    {\n        return $this->recover($user, $campaign);\n    }\n\n    /**\n     * Determine whether the user can delete the campaign.\n     */\n    public function delete(User $user, Campaign $campaign): bool\n    {\n        return\n            $this->member($user, $campaign) &&\n            $user->isAdmin() &&\n            CampaignCache::campaign($campaign)->members()->count() == 1;\n    }\n\n    public function invite(User $user, Campaign $campaign): bool\n    {\n        return $this->member($user, $campaign) && (\n            $user->isAdmin() || $this->checkPermission(CampaignPermission::ACTION_MEMBERS, $user, $campaign)\n        );\n    }\n\n    public function setting(User $user, Campaign $campaign): bool\n    {\n        return $user->isAdmin();\n    }\n\n    public function recover(User $user, Campaign $campaign): bool\n    {\n        return $user->isAdmin($campaign);\n    }\n\n    public function history(User $user, Campaign $campaign): bool\n    {\n        return $this->recover($user, $campaign);\n    }\n\n    public function dashboard(User $user, Campaign $campaign): bool\n    {\n        return $user->isAdmin() || $this->checkPermission(CampaignPermission::ACTION_DASHBOARD, $user, $campaign);\n    }\n\n    public function stats(User $user, Campaign $campaign): bool\n    {\n        return $this->member($user, $campaign);\n    }\n\n    public function search(User $user, Campaign $campaign): bool\n    {\n        return $user->isAdmin();\n    }\n\n    public function import(User $user, Campaign $campaign): bool\n    {\n        return $user->isWyvern() || $user->isElemental() || $user->hasRole('admin');\n    }\n\n    /**\n     * Determine whether the user can leave the campaign\n     */\n    public function leave(User $user, Campaign $campaign): bool\n    {\n        if (Identity::isImpersonating()) {\n            return false;\n        }\n        if (! $this->member($user, $campaign)) {\n            return false;\n        }\n\n        // If we are not the owner\n        if (! $user->isAdmin()) {\n            return true;\n        }\n\n        // If there are other admins\n        return $campaign->roles()\n            ->admin()\n            ->first()\n            ->users\n            ->count() > 1;\n    }\n\n    /**\n     * Determine if a user can follow a campaign\n     */\n    public function follow(User $user, Campaign $campaign): bool\n    {\n        if (! $campaign->isPublic()) {\n            return false;\n        }\n\n        return ! $this->member($user, $campaign);\n    }\n\n    /**\n     * Determine if the campaign setup is complete enough to be opened for applications\n     */\n    public function canOpen(User $user, Campaign $campaign): bool\n    {\n        return $campaign->filters->count() === count(CampaignFilterType::cases())\n            && $campaign->systems->isNotEmpty()\n            && $campaign->genres->isNotEmpty()\n            && $campaign->playstyles->isNotEmpty()\n            && ! empty($campaign->locale);\n    }\n\n    /**\n     * Determine if a user can apply to a campaign\n     */\n    public function apply(User $user, Campaign $campaign): bool\n    {\n        if ($campaign->isPrivate() || ! $campaign->is_open) {\n            return false;\n        }\n\n        return ! $this->member($user, $campaign);\n    }\n\n    /**\n     * Permission to view the members of a campaign\n     */\n    public function members(User $user, Campaign $campaign): bool\n    {\n        return ($user->isAdmin($campaign) || $this->checkPermission(CampaignPermission::ACTION_MEMBERS, $user, $campaign)) ||\n            ! ($campaign->boosted() && $campaign->hide_members);\n    }\n\n    /**\n     * Permission to view the campaign applications\n     */\n    public function applications(?User $user): bool\n    {\n        return $user && $user->isAdmin();\n    }\n\n    public function gallery(?User $user, Campaign $campaign): bool\n    {\n        return $user && (\n            $user->isAdmin() ||\n            $this->checkPermission(CampaignPermission::ACTION_GALLERY, $user, $campaign) ||\n            $this->checkPermission(CampaignPermission::ACTION_GALLERY_BROWSE, $user, $campaign)\n        );\n    }\n\n    public function relations(?User $user): bool\n    {\n        return $user && $user->isAdmin();\n    }\n\n    public function mapPresets(?User $user): bool\n    {\n        return $user && $user->isAdmin();\n    }\n\n    /**\n     * Check if a user can unboost a campaign\n     */\n    public function unboost(?User $user, Campaign $campaign): bool\n    {\n        $boost = $campaign->boosts->first();\n\n        return $user && $boost && $boost->user_id === $user->id;\n    }\n\n    public function galleryManage(?User $user, Campaign $campaign): bool\n    {\n        return $user && (\n            $user->isAdmin() ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY, $user, $campaign)\n        );\n    }\n\n    public function galleryBrowse(?User $user, Campaign $campaign): bool\n    {\n        return $user && (\n            $user->isAdmin() ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY, $user, $campaign) ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY_BROWSE, $user, $campaign)\n        );\n    }\n\n    public function galleryUpload(?User $user, Campaign $campaign): bool\n    {\n        return $user && (\n            $user->isAdmin() ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY, $user, $campaign) ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY_UPLOAD, $user, $campaign)\n        );\n    }\n\n    protected function checkPermission(int $action, User $user, ?Campaign $campaign = null): bool\n    {\n        return EntityPermission::campaign($campaign)->user($user)->hasPermission(0, $action, null);\n    }\n\n    /**\n     * Determine if the user can use templates on the campaign\n     */\n    public function useTemplates(?User $user, Campaign $campaign): bool\n    {\n        return true;\n    }\n\n    /**\n     * Determine if the user can set templates on the campaign\n     */\n    public function setTemplates(?User $user, Campaign $campaign): bool\n    {\n        return $this->isAdmin($user) || $this->checkPermission(CampaignPermission::ACTION_TEMPLATES, $user, $campaign);\n    }\n\n    /**\n     * Determine if the user can set post templates on the campaign\n     */\n    public function setPostTemplates(?User $user, Campaign $campaign): bool\n    {\n        return $this->isAdmin($user) || $this->checkPermission(CampaignPermission::ACTION_POST_TEMPLATES, $user, $campaign);\n    }\n\n    public function export(User $user, Campaign $campaign): bool\n    {\n        if (! app()->isProduction()) {\n            return true;\n        }\n        if ($user->hasRole('admin')) {\n            return true;\n        }\n\n        return $campaign->campaignExports()\n            ->whereDate('created_at', today())\n            ->where('status', '!=', CampaignExportStatus::failed)\n            ->doesntExist();\n    }\n\n    public function galleryWidget(?User $user, Campaign $campaign): bool\n    {\n        return $campaign->premium();\n    }\n\n    public function whiteboards(User $user, Campaign $campaign): bool\n    {\n        if (app()->hasDebugModeEnabled() || app()->environment('qa')) {\n            return true;\n        }\n\n        return $campaign->premium() && ($campaign->isWyvern() || $campaign->isElemental());\n    }\n}\n"
  },
  {
    "path": "app/Policies/CampaignRolePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CampaignRolePolicy\n{\n    use HandlesAuthorization;\n\n    public function view(User $user, CampaignRole $campaignRole, Campaign $campaign): bool\n    {\n        return $campaignRole->campaign_id === $campaign->id && $user->isAdmin();\n    }\n\n    public function create(User $user)\n    {\n        return $user->isAdmin();\n    }\n\n    public function update(User $user, CampaignRole $campaignRole)\n    {\n        return $user->isAdmin();\n    }\n\n    public function delete(User $user, CampaignRole $campaignRole)\n    {\n        return ! $campaignRole->isAdmin() && ! $campaignRole->isPublic()\n            && $user->isAdmin();\n    }\n\n    public function user(User $user, CampaignRole $campaignRole)\n    {\n        return $user->isAdmin();\n    }\n\n    /**\n     * Only allow removing users from the admin role is there is more than one user in it\n     */\n    public function removeUser(User $user, CampaignRole $campaignRole)\n    {\n        if (! $this->user($user, $campaignRole)) {\n            return false;\n        }\n\n        // Non-admin role? Yep the user can modify the member\n        return (bool) (! $campaignRole->isAdmin());\n    }\n\n    public function permission(User $user, CampaignRole $campaignRole)\n    {\n        return ! $campaignRole->isAdmin()\n            && $user->isAdmin();\n    }\n}\n"
  },
  {
    "path": "app/Policies/CampaignRoleUserPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\User;\nuse App\\Traits\\AdminPolicyTrait;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CampaignRoleUserPolicy\n{\n    use AdminPolicyTrait;\n    use HandlesAuthorization;\n\n    public function view(User $user, CampaignRoleUser $campaignRoleUser, Campaign $campaign): bool\n    {\n        return $campaignRoleUser->campaignRole->campaign_id === $campaign->id && $user->isAdmin();\n    }\n\n    public function create(User $user, Campaign $campaign): bool\n    {\n        return $this->isAdmin($user);\n    }\n\n    public function update(User $user, CampaignRoleUser $campaignRoleUser): bool\n    {\n        return $this->isAdmin($user);\n    }\n\n    public function delete(User $user): bool\n    {\n        return $user->isAdmin();\n    }\n}\n"
  },
  {
    "path": "app/Policies/CampaignStylePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\CampaignStyle;\nuse App\\Models\\User;\nuse App\\Traits\\AdminPolicyTrait;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CampaignStylePolicy\n{\n    use AdminPolicyTrait;\n    use HandlesAuthorization;\n\n    public function enable(User $user, CampaignStyle $style): bool\n    {\n        return $user->isAdmin() && ! $style->is_enabled;\n    }\n\n    public function disable(User $user, CampaignStyle $style): bool\n    {\n        return $user->isAdmin() && $style->is_enabled;\n    }\n}\n"
  },
  {
    "path": "app/Policies/CampaignUserPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Facades\\Identity;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\User;\nuse App\\Traits\\AdminPolicyTrait;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CampaignUserPolicy\n{\n    use AdminPolicyTrait;\n    use HandlesAuthorization;\n\n    public function view(User $user, CampaignUser $campaignUser, Campaign $campaign): bool\n    {\n        return $campaignUser->campaign_id === $campaign->id && $user->isAdmin();\n    }\n\n    public function update(User $user, CampaignUser $campaignUser): bool\n    {\n        // Don't allow updating if we are currently impersonating\n        if (Identity::isImpersonating()) {\n            return false;\n        }\n\n        // If user isn't in admin\n        if (! $user->isAdmin()) {\n            return false;\n        }\n\n        if ($user->id === $campaignUser->user_id) {\n            return false;\n        }\n\n        // User isn't an admin, easy peasy\n        if (! $campaignUser->user->isAdmin()) {\n            return true;\n        }\n\n        // Check if the user was added to the admin role recently\n        $adminRole = UserCache::adminRole();\n        $role = $campaignUser->user->campaignRoleUser->where('campaign_role_id', $adminRole['id'])->first();\n\n        return $role->created_at->diffInMinutes() <= 15;\n    }\n\n    public function delete(User $user, CampaignUser $campaignUser): bool\n    {\n        return $this->update($user, $campaignUser);\n    }\n\n    public function switch(User $user, CampaignUser $campaignUser): bool\n    {\n        if (Identity::isImpersonating()) {\n            return false;\n        }\n\n        return $user->isAdmin()\n            && ! $campaignUser->user->isAdmin()\n            && ! $campaignUser->user->isBanned();\n    }\n}\n"
  },
  {
    "path": "app/Policies/CharacterPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Character;\nuse App\\Models\\User;\n\nclass CharacterPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.character');\n    }\n\n    public function personality(User $user, Character $character): bool\n    {\n        return $character->is_personality_visible || $user->isAdmin();\n    }\n}\n"
  },
  {
    "path": "app/Policies/ClientPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\nuse Laravel\\Passport\\Client;\n\nclass ClientPolicy\n{\n    use HandlesAuthorization;\n\n    /**\n     * Create a new policy instance.\n     *\n     * @return void\n     */\n    public function __construct() {}\n\n    public function update(User $user, Client $client): bool\n    {\n        return $client->user_id === $user->id;\n    }\n}\n"
  },
  {
    "path": "app/Policies/CommunityEventEntryPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\CommunityEventEntry;\nuse App\\Models\\User;\n\nclass CommunityEventEntryPolicy\n{\n    /**\n     * Determine whether the user can delete the entry.\n     */\n    public function delete(User $user, CommunityEventEntry $communityEventEntry): bool\n    {\n        return ($user->id == $communityEventEntry->created_by) && $communityEventEntry->event->isOngoing();\n    }\n}\n"
  },
  {
    "path": "app/Policies/CommunityVotePolicy.php",
    "content": "<?php\n\n/**\n * Description of\n *\n * 05/02/2020\n */\n\nnamespace App\\Policies;\n\nuse App\\Models\\CommunityVote;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CommunityVotePolicy\n{\n    use HandlesAuthorization;\n\n    /**\n     * Determine if a user can view a vote\n     */\n    public function show(?User $user, CommunityVote $communityVote): bool\n    {\n        $status = $communityVote->status();\n        if ($status == CommunityVote::STATUS_PUBLISHED) {\n            return true;\n        }\n        // If it's not published and we aren't logged in, nope nope nope\n        if (empty($user)) {\n            return false;\n        }\n\n        if ($status == CommunityVote::STATUS_VOTING) {\n            return $user->isGoblin() || $user->hasRole('admin');\n        }\n\n        // Scheduled and Draft are limited to admins\n        return $user->hasRole('admin');\n    }\n\n    /**\n     * Determine if a user can participate in a vote\n     */\n    public function vote(User $user, CommunityVote $communityVote): bool\n    {\n        $status = $communityVote->status();\n        if ($status == CommunityVote::STATUS_PUBLISHED) {\n            return true;\n        } elseif ($status == CommunityVote::STATUS_VOTING) {\n            return $user->isGoblin();\n        }\n\n        // Not in a voting phase\n        return false;\n    }\n}\n"
  },
  {
    "path": "app/Policies/ConversationMessagePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\ConversationMessage;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\n\nclass ConversationMessagePolicy\n{\n    /**\n     * Allow deleting a message for up to one hour by the author\n     */\n    public function delete(?User $user, ConversationMessage $message): bool\n    {\n        $elapsedHours = $message->created_at->diffInHours(Carbon::now());\n\n        return $message->created_by === $user->id && ($elapsedHours < 1);\n    }\n\n    public function edit(?User $user, ConversationMessage $message): bool\n    {\n        return $this->delete($user, $message);\n    }\n}\n"
  },
  {
    "path": "app/Policies/ConversationPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass ConversationPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.conversation');\n    }\n}\n"
  },
  {
    "path": "app/Policies/CreaturePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass CreaturePolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.creature');\n    }\n}\n"
  },
  {
    "path": "app/Policies/DiceRollPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass DiceRollPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.dice_roll');\n    }\n}\n"
  },
  {
    "path": "app/Policies/EntityPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Enums\\Permission;\nuse App\\Facades\\EntityPermission;\nuse App\\Facades\\Limit;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass EntityPolicy\n{\n    use HandlesAuthorization;\n\n    public function view(?User $user, Entity $entity): bool\n    {\n        if ($user) {\n            EntityPermission::user($user);\n        } else {\n            EntityPermission::userless();\n        }\n\n        return EntityPermission::entity($entity)->can(Permission::View);\n    }\n\n    public function update(User $user, Entity $entity): bool\n    {\n        return EntityPermission::entity($entity)->user($user)->can(Permission::Update);\n    }\n\n    public function attributes(?User $user, Entity $entity): bool\n    {\n        if ($entity->exists === false) {\n            return true;\n        }\n\n        return ! $entity->is_attributes_private || $user && $user->isAdmin();\n    }\n\n    public function viewAttributes(?User $user, Entity $entity, Campaign $campaign): bool\n    {\n        if (! $campaign->enabled('entity_attributes')) {\n            return false;\n        }\n\n        if (! $entity->is_attributes_private) {\n            return true;\n        }\n\n        return $user && $user->isAdmin();\n    }\n\n    public function privacy(User $user): bool\n    {\n        return $user->isAdmin();\n    }\n\n    public function history(User $user, Entity $entity, Campaign $campaign): bool\n    {\n        return $user->isAdmin() || ! ($campaign->boosted() && $campaign->hide_history);\n    }\n\n    public function move(User $user, Entity $entity): bool\n    {\n        return $this->update($user, $entity);\n    }\n\n    public function inventory(User $user, Entity $entity): bool\n    {\n        return $this->update($user, $entity);\n    }\n\n    public function relation(User $user, Entity $entity): bool\n    {\n        return $this->update($user, $entity);\n    }\n\n    public function permissions(User $user, Entity $entity): bool\n    {\n        return $this->update($user, $entity)\n            && EntityPermission::entity($entity)->user($user)->can(Permission::Permissions);\n    }\n\n    public function post(User $user, Entity $entity, ?string $action = null, ?Post $post = null): bool\n    {\n        return\n            $this->update($user, $entity) ||\n            EntityPermission::entity($entity)->user($user)->can(Permission::Posts) ||\n            ($action == 'edit' ? $this->checkPostPermission($user, $post) : false);\n    }\n\n    public function delete(User $user, Entity $entity): bool\n    {\n        return EntityPermission::entity($entity)->user($user)->can(Permission::Delete);\n    }\n\n    public function reminders(User $user, Entity $entity): bool\n    {\n        return $this->update($user, $entity);\n    }\n\n    protected function checkPostPermission(User $user, Post $post): bool\n    {\n        $roleIds = UserCache::roles()->pluck('id')->toArray();\n        $perms = $post->permissions->where('permission', 1);\n\n        return $perms->where('user_id', $user->id)->count() == 1\n            ||\n            $perms->whereIn('role_id', $roleIds)->count() == 1;\n    }\n\n    public function addFile(User $user, Entity $entity, Campaign $campaign): bool\n    {\n        return $campaign->isWyvern() || $campaign->isElemental() || $entity->assets()->file()->count() < Limit::campaign($campaign)->entityFiles();\n    }\n}\n"
  },
  {
    "path": "app/Policies/EntityTypePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Enums\\Permission;\nuse App\\Facades\\EntityPermission;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\User;\n\nclass EntityTypePolicy\n{\n    public function create(?User $user, EntityType $entityType, Campaign $campaign)\n    {\n        if (auth()->guest()) {\n            return false;\n        }\n\n        if (! $entityType->isEnabled()) {\n            return false;\n        }\n        if ($entityType->isCustom() && ! $campaign->premium()) {\n            return false;\n        }\n\n        if ($entityType->code === 'bookmark') {\n            return auth()->user()->can('create', new Bookmark);\n        }\n\n        return EntityPermission::campaign($campaign)->user($user)->entityType($entityType)->can(Permission::Create);\n    }\n\n    public function update(User $user, EntityType $entityType, Campaign $campaign)\n    {\n        return $entityType->campaign_id === $campaign->id;\n    }\n\n    public function delete(User $user, EntityType $entityType, Campaign $campaign)\n    {\n        return $entityType->campaign_id === $campaign->id && $entityType->isCustom();\n    }\n\n    public function deleteEntities(User $user, EntityType $entityType, Campaign $campaign)\n    {\n        return EntityPermission::campaign($campaign)->user($user)->entityType($entityType)->can(Permission::Delete);\n    }\n\n    public function permissions(User $user, EntityType $entityType): bool\n    {\n        return EntityPermission::entityType($entityType)->user($user)->can(Permission::Permissions);\n    }\n}\n"
  },
  {
    "path": "app/Policies/EventPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\User;\n\nclass EventPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.event');\n    }\n\n    public function calendar(User $user)\n    {\n        return $this->checkPermission(CampaignPermission::ACTION_ADD, $user);\n    }\n}\n"
  },
  {
    "path": "app/Policies/FamilyPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass FamilyPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.family');\n    }\n}\n"
  },
  {
    "path": "app/Policies/FeaturePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Feature;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\n\nclass FeaturePolicy\n{\n    /**\n     * Create a new policy instance.\n     */\n    public function __construct() {}\n\n    public function create(User $user): bool\n    {\n        // Admins can create unlimited ideas\n        if ($user->hasRole('admin')) {\n            return true;\n        }\n\n        return Feature::where('created_by', auth()->user()->id)\n            ->whereDate('created_at', Carbon::today())\n            ->count() < 10;\n    }\n\n    public function vote(User $user): bool\n    {\n        return $user->isSubscriber();\n    }\n}\n"
  },
  {
    "path": "app/Policies/ImagePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\EntityPermission;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\Image;\nuse App\\Models\\User;\n\nclass ImagePolicy\n{\n    /**\n     * Create a new policy instance.\n     */\n    public function __construct() {}\n\n    public function browse(?User $user, Campaign $campaign): bool\n    {\n        return $user && (\n            $user->isAdmin() ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY, $user, $campaign) ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY_BROWSE, $user, $campaign)\n        );\n    }\n\n    public function create(?User $user, Campaign $campaign): bool\n    {\n        return $user && (\n            $user->isAdmin() ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY, $user, $campaign) ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY_UPLOAD, $user, $campaign)\n        );\n    }\n\n    public function view(?User $user, Image $image, Campaign $campaign): bool\n    {\n        return $user && (\n            $user->isAdmin() ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY, $user, $campaign) ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY_BROWSE, $user, $campaign) ||\n                ($this->checkPermission(CampaignPermission::ACTION_GALLERY_UPLOAD, $user, $campaign) && $image->created_by === $user->id)\n        );\n    }\n\n    public function edit(?User $user, Image $image, Campaign $campaign): bool\n    {\n        return $user && (\n            $user->isAdmin() ||\n                $this->checkPermission(CampaignPermission::ACTION_GALLERY, $user, $campaign) ||\n                ($this->checkPermission(CampaignPermission::ACTION_GALLERY_UPLOAD, $user, $campaign) && $image->created_by === $user->id)\n        );\n    }\n\n    public function visibility(User $user, Image $image): bool\n    {\n        if (\n            (in_array($image->visibility_id, [Visibility::Admin, Visibility::AdminSelf]) && ! auth()->user()->isAdmin())\n            &&\n            (in_array($image->visibility_id, [Visibility::Self, Visibility::AdminSelf]) && ! ($image->created_by == auth()->user()->id))\n        ) {\n            return false;\n        }\n        if ($image->visibility_id === Visibility::AdminSelf && auth()->user()->isAdmin() && $image->created_by !== auth()->user()->id) {\n            return false;\n        }\n\n        return true;\n    }\n\n    public function delete(?User $user, Image $image, Campaign $campaign): bool\n    {\n        return $this->edit($user, $image, $campaign);\n    }\n\n    /**\n     * @return bool\n     */\n    protected function checkPermission(int $action, User $user, ?Campaign $campaign = null)\n    {\n        return EntityPermission::campaign($campaign)->user($user)->hasPermission(0, $action, null);\n    }\n}\n"
  },
  {
    "path": "app/Policies/ItemPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass ItemPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.item');\n    }\n}\n"
  },
  {
    "path": "app/Policies/JournalPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass JournalPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.journal');\n    }\n}\n"
  },
  {
    "path": "app/Policies/LocationPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass LocationPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.location');\n    }\n}\n"
  },
  {
    "path": "app/Policies/MapGroupPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\MapGroup;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass MapGroupPolicy\n{\n    use HandlesAuthorization;\n\n    public function update(?User $user, MapGroup $mapGroup)\n    {\n        return $user && $user->can('update', $mapGroup->map);\n    }\n\n    public function delete(?User $user, MapGroup $mapGroup)\n    {\n        return $user && $user->can('update', $mapGroup->map);\n    }\n}\n"
  },
  {
    "path": "app/Policies/MapLayerPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\MapLayer;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass MapLayerPolicy\n{\n    use HandlesAuthorization;\n\n    public function update(?User $user, MapLayer $mapLayer)\n    {\n        return $user && $user->can('update', $mapLayer->map);\n    }\n\n    public function delete(?User $user, MapLayer $mapLayer)\n    {\n        return $user && $user->can('update', $mapLayer->map);\n    }\n}\n"
  },
  {
    "path": "app/Policies/MapMarkerPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\MapMarker;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass MapMarkerPolicy\n{\n    use HandlesAuthorization;\n\n    public function update(?User $user, MapMarker $mapMarker)\n    {\n        return $user && $user->can('update', $mapMarker->map->entity);\n    }\n\n    public function delete(?User $user, MapMarker $mapMarker)\n    {\n        return $user && $user->can('update', $mapMarker->map->entity);\n    }\n}\n"
  },
  {
    "path": "app/Policies/MapPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Map;\nuse App\\Models\\User;\n\nclass MapPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.map');\n    }\n\n    public function addGroup(User $user, Map $map, Campaign $campaign): bool\n    {\n        $max = config('limits.campaigns.maps.groups.standard');\n        if ($campaign->boosted()) {\n            $max = config('limits.campaigns.maps.groups.premium');\n        }\n\n        return $map->groups->count() < $max;\n    }\n\n    public function addLayer(User $user, Map $map, Campaign $campaign): bool\n    {\n        $max = config('limits.campaigns.maps.layers.standard');\n        if ($campaign->boosted()) {\n            $max = config('limits.campaigns.maps.layers.premium');\n        }\n\n        return $map->layers->count() < $max;\n    }\n}\n"
  },
  {
    "path": "app/Policies/MiscPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Facades\\EntityPermission;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass MiscPolicy\n{\n    use HandlesAuthorization;\n\n    /**\n     * @param  Entity|MiscModel|null  $entity\n     */\n    protected function checkPermission(int $action, User $user, mixed $entity = null, ?Campaign $campaign = null): bool\n    {\n        return EntityPermission::campaign($campaign)\n            ->user($user)\n            // @phpstan-ignore-next-line\n            ->hasPermission($this->entityTypeID(), $action, $entity);\n    }\n}\n"
  },
  {
    "path": "app/Policies/NotePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass NotePolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.note');\n    }\n}\n"
  },
  {
    "path": "app/Policies/OrganisationMemberPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\OrganisationMember;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass OrganisationMemberPolicy\n{\n    use HandlesAuthorization;\n\n    /**\n     * Create a new policy instance.\n     *\n     * @return void\n     */\n    public function __construct() {}\n\n    /**\n     * Determine whether the user can update the entity.\n     */\n    public function update(User $user, OrganisationMember $entity)\n    {\n        if (auth()->guest()) {\n            return false;\n        }\n\n        return auth()->user()->can('update', $entity->organisation->entity) ||\n            auth()->user()->can('update', $entity->character->entity);\n    }\n\n    /**\n     * Determine whether the user can update the entity.\n     */\n    public function delete(User $user, OrganisationMember $entity)\n    {\n        if (auth()->guest()) {\n            return false;\n        }\n\n        return auth()->user()->can('delete', $entity->organisation->entity) ||\n            auth()->user()->can('delete', $entity->character->entity);\n    }\n}\n"
  },
  {
    "path": "app/Policies/OrganisationPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Organisation;\nuse App\\Models\\User;\n\nclass OrganisationPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.organisation');\n    }\n\n    public function member(User $user, Organisation $organisation)\n    {\n        return $user->can('update', $organisation->entity);\n    }\n}\n"
  },
  {
    "path": "app/Policies/PluginPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Plugin;\nuse App\\Models\\User;\nuse App\\Traits\\AdminPolicyTrait;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass PluginPolicy\n{\n    use AdminPolicyTrait;\n    use HandlesAuthorization;\n\n    public function delete(User $user): bool\n    {\n        return $user->isAdmin();\n    }\n\n    public function update(User $user, Plugin $plugin): bool\n    {\n        return $user->isAdmin() && $plugin->hasUpdate($plugin->created_by === $user->id);\n    }\n\n    public function changelog(User $user, Plugin $plugin): bool\n    {\n        return $user->isAdmin() && ! $plugin->hasUpdate($plugin->created_by === $user->id);\n    }\n\n    public function enable(User $user, Plugin $plugin): bool\n    {\n        // @phpstan-ignore-next-line\n        return $user->isAdmin() && $plugin->isTheme() && ! $plugin->pivot->is_active;\n    }\n\n    public function disable(User $user, Plugin $plugin): bool\n    {\n        // @phpstan-ignore-next-line\n        return $user->isAdmin() && $plugin->isTheme() && $plugin->pivot->is_active;\n    }\n\n    public function import(User $user, Plugin $plugin): bool\n    {\n        return $user->isAdmin() && $plugin->isContentPack();\n    }\n}\n"
  },
  {
    "path": "app/Policies/PostPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Post;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass PostPolicy\n{\n    use HandlesAuthorization;\n\n    public function visibility(User $user, Post $post): bool\n    {\n        // If the post's visibility is set to admin, but the user is not an admin, don't allow changing\n        // as it's a custom permission for the user to be able to edit this model.\n        if (\n            in_array($post->visibility_id, [Visibility::Admin, Visibility::AdminSelf])\n            && ! $user->isAdmin() && $post->created_by != $user->id\n        ) {\n            return false;\n        } elseif ($post->visibility_id === Visibility::AdminSelf && $post->created_by !== $user->id) {\n            // If the post has its visibility set to admin-self, but they didn't create it, they can't edit its visibility\n            return false;\n        }\n\n        // In all other cases, a user who can edit the post can edit the visibility, probably.\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Policies/QuestPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass QuestPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.quest');\n    }\n}\n"
  },
  {
    "path": "app/Policies/RacePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass RacePolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.race');\n    }\n}\n"
  },
  {
    "path": "app/Policies/RelationPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Relation;\nuse App\\Models\\User;\nuse App\\Traits\\AdminPolicyTrait;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass RelationPolicy\n{\n    use AdminPolicyTrait;\n    use HandlesAuthorization;\n\n    /**\n     * Determine whether the user can view the relation.\n     *\n     * @return bool\n     */\n    public function view()\n    {\n        return true;\n    }\n\n    /**\n     * Determine whether the user can create items.\n     *\n     * @return bool\n     */\n    public function create(User $user)\n    {\n        $campaign = CampaignLocalization::getCampaign();\n\n        return $user->can('relations', $campaign);\n    }\n\n    /**\n     * Determine whether the user can update the relation.\n     *\n     * @return bool\n     */\n    public function update(User $user, Relation $relation)\n    {\n        if (empty($relation->owner) || $relation->owner->isMissingChild()) {\n            return false;\n        }\n\n        return $user->can('relation', $relation->owner);\n    }\n\n    /**\n     * Determine whether the user can delete the relation.\n     *\n     * @return bool\n     */\n    public function delete(User $user, ?Relation $relation)\n    {\n        // If the relation is empty, this call is coming from the bulk delete check\n        if (empty($relation) || empty($relation->id)) {\n            $campaign = CampaignLocalization::getCampaign();\n\n            return $user->can('relations', $campaign);\n        }\n        if (empty($relation->owner) || $relation->owner->isMissingChild()) {\n            return false;\n        }\n\n        return $user->can('relation', $relation->owner);\n    }\n}\n"
  },
  {
    "path": "app/Policies/ReminderPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Reminder;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass ReminderPolicy\n{\n    use HandlesAuthorization;\n\n    public function entity(?User $user, Reminder $reminder, Entity $entity): bool\n    {\n        return $reminder->remindable_type === Entity::class && $reminder->remindable_id === $entity->id;\n    }\n\n    public function update(?User $user, Reminder $reminder)\n    {\n        return $user && $user->can('update', $reminder->calendar->entity);\n    }\n\n    public function delete(?User $user, Reminder $reminder)\n    {\n        return $user && $user->can('update', $reminder->calendar->entity);\n    }\n}\n"
  },
  {
    "path": "app/Policies/TagPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass TagPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.tag');\n    }\n}\n"
  },
  {
    "path": "app/Policies/TimelineEraPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\TimelineEra;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass TimelineEraPolicy\n{\n    use HandlesAuthorization;\n\n    public function update(?User $user, TimelineEra $timelineEra)\n    {\n        return $user && $user->can('update', $timelineEra->timeline);\n    }\n\n    public function delete(?User $user, TimelineEra $timelineEra)\n    {\n        return $user && $user->can('update', $timelineEra->timeline);\n    }\n}\n"
  },
  {
    "path": "app/Policies/TimelinePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass TimelinePolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.timeline');\n    }\n}\n"
  },
  {
    "path": "app/Policies/TokenPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\nuse Laravel\\Passport\\Token;\n\nclass TokenPolicy\n{\n    use HandlesAuthorization;\n\n    /**\n     * Create a new policy instance.\n     *\n     * @return void\n     */\n    public function __construct() {}\n\n    public function update(User $user, Token $token): bool\n    {\n        return $token->user_id === $user->id;\n    }\n}\n"
  },
  {
    "path": "app/Policies/UserPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\User;\n\nclass UserPolicy\n{\n    public function admin(User $user)\n    {\n        return $user->isAdmin();\n    }\n\n    public function boost(?User $user)\n    {\n        if (empty($user) || request()->get('_boost') === '0') {\n            return false;\n        }\n\n        return $user->isGoblin() || ! empty($user->booster_count);\n    }\n\n    public function freeTrial(User $user)\n    {\n        return session()->get('kanka.freeTrial') && ! $user->isSubscriber();\n    }\n\n    public function renewPaypalSubscription(User $user): bool\n    {\n        if (! $user->hasPayPal()) {\n            return false;\n        }\n\n        $subscription = $user->subscription('kanka');\n        if (! $subscription) {\n            return false;\n        }\n\n        return $subscription->ends_at->lte(now()->addDays(15));\n    }\n}\n"
  },
  {
    "path": "app/Policies/WebhookPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\User;\nuse App\\Models\\Webhook;\nuse App\\Traits\\AdminPolicyTrait;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass WebhookPolicy\n{\n    use AdminPolicyTrait;\n    use HandlesAuthorization;\n\n    public function enable(User $user, Webhook $webhook): bool\n    {\n        return $user->isAdmin() && ! $webhook->isActive();\n    }\n\n    public function disable(User $user, Webhook $webhook): bool\n    {\n        return $user->isAdmin() && $webhook->isActive();\n    }\n\n    public function delete(User $user, Webhook $webhook): bool\n    {\n        return $user->isAdmin();\n    }\n}\n"
  },
  {
    "path": "app/Policies/WhiteboardPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nclass WhiteboardPolicy extends MiscPolicy\n{\n    public function entityTypeID(): int\n    {\n        return config('entities.ids.timeline');\n    }\n}\n"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Auth\\PassportTokenGuard;\nuse App\\Http\\Validators\\HashValidator;\nuse App\\Models\\AdminInvite;\nuse App\\Models\\Application;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboard;\nuse App\\Models\\CampaignDashboardRole;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\CampaignDescription;\nuse App\\Models\\CampaignFollower;\nuse App\\Models\\CampaignInvite;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\CampaignSetting;\nuse App\\Models\\CampaignStyle;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\Conversation;\nuse App\\Models\\ConversationMessage;\nuse App\\Models\\DiceRoll;\nuse App\\Models\\DiceRollResult;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\EntityType;\nuse App\\Models\\FamilyTree;\nuse App\\Models\\Image;\nuse App\\Models\\Inventory;\nuse App\\Models\\Map;\nuse App\\Models\\MapGroup;\nuse App\\Models\\MapLayer;\nuse App\\Models\\MapMarker;\nuse App\\Models\\OrganisationMember;\nuse App\\Models\\Post;\nuse App\\Models\\Preset;\nuse App\\Models\\QuestElement;\nuse App\\Models\\Reminder;\nuse App\\Models\\TimelineElement;\nuse App\\Models\\TimelineEra;\nuse App\\Models\\User;\nuse App\\Models\\UserLog;\nuse App\\Models\\Webhook;\nuse App\\Observers\\AdminInviteObserver;\nuse App\\Observers\\CalendarObserver;\nuse App\\Observers\\CampaignDescriptionObserver;\nuse App\\Observers\\CampaignObserver;\nuse App\\Observers\\CampaignUserObserver;\nuse App\\Observers\\FamilyTreeObserver;\nuse App\\Observers\\OrganisationMemberObserver;\nuse App\\Observers\\UserObserver;\nuse Exception;\nuse Illuminate\\Contracts\\Encryption\\Encrypter;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Queue;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Cashier\\Cashier;\nuse Laravel\\Passport\\ClientRepository;\nuse Laravel\\Passport\\Passport;\nuse Laravel\\Passport\\PassportUserProvider;\nuse League\\OAuth2\\Server\\ResourceServer;\nuse Symfony\\Component\\Console\\Exception\\InvalidOptionException;\nuse Symfony\\Component\\Process\\Process;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        // Fix setups for utf8_mb4 mysql strings (emoji support)\n        Schema::defaultStringLength(191);\n\n        Passport::$clientUuids = false;\n        Passport::authorizationView('vendor.passport.authorize');\n\n        // Override Passport's TokenGuard to fix a false positive in 13.7 where\n        // personal access tokens are rejected when user ID == client ID.\n        Auth::resolved(function ($auth): void {\n            $auth->extend('passport', fn ($app, $name, array $config) => tap(\n                new PassportTokenGuard(\n                    app(ResourceServer::class),\n                    new PassportUserProvider(Auth::createUserProvider($config['provider']), $config['provider']),\n                    app(ClientRepository::class),\n                    app(Encrypter::class),\n                    app('request'),\n                ),\n                fn ($guard) => app()->refresh('request', $guard, 'setRequest')\n            ));\n        });\n\n        $this->registerDevelopWarning();\n\n        $this->registerWebObservers();\n        Cashier::useCustomerModel(User::class);\n\n        if (config('app.lazy')) {\n            Model::preventLazyLoading();\n        }\n\n        Validator::resolver(function ($translator, $data, $rules, $messages) {\n            return new HashValidator($translator, $data, $rules, $messages);\n        });\n    }\n\n    /**\n     * Register any application services.\n     *\n     * @return void\n     */\n    public function register() {}\n\n    protected function registerDevelopWarning()\n    {\n        if (! app()->runningInConsole()) {\n            return;\n        }\n        if (config('app.ignore_develop_warning')) {\n            return;\n        }\n\n        $path = base_path();\n        $command = 'git symbolic-ref -q --short HEAD || git describe --tags --exact-match';\n        if (class_exists('\\Symfony\\Component\\Process\\Process')) {\n            try {\n                // @phpstan-ignore-next-line\n                if (method_exists(Process::class, 'fromShellCommandline')) {\n                    $process = Process::fromShellCommandline($command, $path);\n                } else {\n                    $process = new Process([$command], $path);\n                }\n\n                $process->mustRun();\n                $output = $process->getOutput();\n            } catch (Exception $e) {\n                // Silence errors\n            }\n        }\n\n        if (! empty($output) && Str::startsWith($output, 'develop')) {\n            throw new InvalidOptionException(\n                \"CONFIGURATION WARNING\\n\" .\n                \"You are currently running Kanka on the unstable @develop branch. This is unstable and WILL RESULT IN DATA LOSS.\\n\" .\n                \"If this isn't a mistake, add `APP_IGNORE_DEVELOP_WARNING=true` to your .env file.\"\n            );\n        }\n    }\n\n    /**\n     * Register web observers (ie not running in console)\n     * Kanka uses a lot of observers because they offer some magic, but\n     * they also make a lot of stuff break.\n     */\n    protected function registerWebObservers()\n    {\n        // When in console (queue, commands), we don't want observers to trigger.\n        // We probably do, but we're so far down the rabbit hole that we no\n        // longer want them.\n        if (app()->runningInConsole() && ! app()->runningUnitTests()) {\n            return;\n        }\n\n        // In production, we want URLs to be HTTPS for pagination and redirects\n        if ($this->app->isProduction() || $this->app->environment('qa')) {\n            \\URL::forceScheme('https');\n        }\n\n        // Model observers. Lots of magic.\n        AdminInvite::observe(AdminInviteObserver::class);\n        Calendar::observe(CalendarObserver::class);\n        Campaign::observe(CampaignObserver::class);\n        CampaignDescription::observe(CampaignDescriptionObserver::class);\n        CampaignUser::observe(CampaignUserObserver::class);\n        CampaignRole::observe('App\\Observers\\CampaignRoleObserver');\n        CampaignRoleUser::observe('App\\Observers\\CampaignRoleUserObserver');\n        CampaignInvite::observe('App\\Observers\\CampaignInviteObserver');\n        CampaignDashboard::observe('App\\Observers\\CampaignDashboardObserver');\n        CampaignDashboardRole::observe('App\\Observers\\CampaignDashboardRoleObserver');\n        CampaignDashboardWidget::observe('App\\Observers\\CampaignDashboardWidgetObserver');\n        CampaignFollower::observe('App\\Observers\\CampaignFollowerObserver');\n        CampaignPlugin::observe('App\\Observers\\CampaignPluginObserver');\n        CampaignSetting::observe('App\\Observers\\CampaignSettingObserver');\n        Application::observe('App\\Observers\\ApplicationObserver');\n        CampaignStyle::observe('App\\Observers\\CampaignStyleObserver');\n        Conversation::observe('App\\Observers\\ConversationObserver');\n        ConversationMessage::observe('App\\Observers\\ConversationMessageObserver');\n        DiceRoll::observe('App\\Observers\\DiceRollObserver');\n        DiceRollResult::observe('App\\Observers\\DiceRollResultObserver');\n        Entity::observe('App\\Observers\\EntityObserver');\n        EntityType::observe('App\\Observers\\EntityTypeObserver');\n        EntityAbility::observe('App\\Observers\\EntityAbilityObserver');\n        EntityAsset::observe('App\\Observers\\EntityAssetObserver');\n        Post::observe('App\\Observers\\PostObserver');\n        Reminder::observe('App\\Observers\\ReminderObserver');\n        FamilyTree::observe(FamilyTreeObserver::class);\n        Image::observe('App\\Observers\\ImageObserver');\n        Inventory::observe('App\\Observers\\InventoryObserver');\n        Map::observe('App\\Observers\\MapObserver');\n        MapLayer::observe('App\\Observers\\MapLayerObserver');\n        MapGroup::observe('App\\Observers\\MapGroupObserver');\n        MapMarker::observe('App\\Observers\\MapMarkerObserver');\n        Bookmark::observe('App\\Observers\\BookmarkObserver');\n        OrganisationMember::observe(OrganisationMemberObserver::class);\n        Preset::observe('App\\Observers\\PresetObserver');\n        TimelineEra::observe('App\\Observers\\TimelineEraObserver');\n        TimelineElement::observe('App\\Observers\\TimelineElementObserver');\n        User::observe(UserObserver::class);\n        UserLog::observe('App\\Observers\\UserLogObserver');\n        Webhook::observe('App\\Observers\\WebhookObserver');\n        QuestElement::observe('App\\Observers\\QuestElementObserver');\n\n        if (request()->has('_debug_perm') && config('app.debug')) {\n            // Add in boot function\n            DB::listen(function ($query) {\n                $sql = $query->sql;\n                foreach ($query->bindings as $key => $binding) {\n                    $sql = preg_replace('/\\?/', \"'{$binding}'\", $sql, 1);\n                }\n                dump($sql);\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "app/Providers/AttributesServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\AttributeMentionService;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AttributesServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(AttributeMentionService::class, function () {\n            return new AttributeMentionService;\n        });\n\n        $this->app->alias(AttributeMentionService::class, 'attributes');\n    }\n}\n"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Policies\\ClientPolicy;\nuse App\\Policies\\TokenPolicy;\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\nuse Laravel\\Passport\\Client;\nuse Laravel\\Passport\\Passport;\nuse Laravel\\Passport\\Token;\n\nclass AuthServiceProvider extends ServiceProvider\n{\n    /**\n     * Register any authentication / authorization services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        if (! app()->runningInConsole()) {\n            // We don't have api grants so allow anyone with a token to do everything\n            // Todo: this might not actually be needed?\n            Passport::enableImplicitGrant();\n        }\n    }\n\n    /**\n     * The policy mappings for the application.\n     * Laravel auto-discoveres policies if the Model is named \\App\\Models\\XYZ and the police is \\App\\Policies\\XYZPolicy\n     */\n    protected $policies = [\n        Token::class => TokenPolicy::class,\n        Client::class => ClientPolicy::class,\n    ];\n}\n"
  },
  {
    "path": "app/Providers/AvatarServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\Images\\AvatarService;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AvatarServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(AvatarService::class, function () {\n            $service = new AvatarService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n            if (auth()->check()) {\n                $service->user(auth()->user());\n            }\n\n            return $service;\n        });\n\n        $this->app->alias(AvatarService::class, 'avatar');\n    }\n}\n"
  },
  {
    "path": "app/Providers/BreadcrumbServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\BreadcrumbService;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass BreadcrumbServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(BreadcrumbService::class, function () {\n            return new BreadcrumbService;\n        });\n\n        $this->app->alias(BreadcrumbService::class, 'breadcrumb');\n    }\n}\n"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass BroadcastServiceProvider extends ServiceProvider\n{\n    public function boot(): void\n    {\n        Broadcast::routes();\n        require base_path('routes/channels.php');\n    }\n}\n"
  },
  {
    "path": "app/Providers/CacheServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\Caches\\AdCacheService;\nuse App\\Services\\Caches\\BookmarkCacheService;\nuse App\\Services\\Caches\\CampaignCacheService;\nuse App\\Services\\Caches\\CharacterCacheService;\nuse App\\Services\\Caches\\EntityAssetCacheService;\nuse App\\Services\\Caches\\EntityCacheService;\nuse App\\Services\\Caches\\MapMarkerCacheService;\nuse App\\Services\\Caches\\MarketplaceCacheService;\nuse App\\Services\\Caches\\QuestCacheService;\nuse App\\Services\\Caches\\ReleaseCacheService;\nuse App\\Services\\Caches\\SingleUserCacheService;\nuse App\\Services\\Caches\\TimelineElementCacheService;\nuse App\\Services\\Caches\\UserCacheService;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass CacheServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(EntityCacheService::class, function () {\n            $service = new EntityCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(CampaignCacheService::class, function () {\n            $service = new CampaignCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(UserCacheService::class, function () {\n\n            $service = new UserCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n            if (auth()->check()) {\n                $service->user(auth()->user());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(SingleUserCacheService::class, function () {\n            return new SingleUserCacheService;\n        });\n        $this->app->singleton(ReleaseCacheService::class, function () {\n            return new ReleaseCacheService;\n        });\n        $this->app->singleton(CharacterCacheService::class, function () {\n            $service = new CharacterCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(QuestCacheService::class, function () {\n            $service = new QuestCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(MapMarkerCacheService::class, function () {\n            $service = new MapMarkerCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(EntityAssetCacheService::class, function () {\n            $service = new EntityAssetCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(BookmarkCacheService::class, function () {\n            $service = new BookmarkCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(TimelineElementCacheService::class, function () {\n            $service = new TimelineElementCacheService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->singleton(MarketplaceCacheService::class, function () {\n            return new MarketplaceCacheService;\n        });\n\n        $this->app->alias(EntityCacheService::class, 'entitycache');\n        $this->app->alias(CampaignCacheService::class, 'campaigncache');\n        $this->app->alias(UserCacheService::class, 'usercache');\n        $this->app->alias(SingleUserCacheService::class, 'singleusercache');\n        $this->app->alias(ReleaseCacheService::class, 'releasecache');\n        $this->app->alias(CharacterCacheService::class, 'charactercache');\n        $this->app->alias(QuestCacheService::class, 'questcache');\n        $this->app->alias(AdCacheService::class, 'adcache');\n        $this->app->alias(MapMarkerCacheService::class, 'mapmarkercache');\n        $this->app->alias(EntityAssetCacheService::class, 'entityassetcache');\n        $this->app->alias(BookmarkCacheService::class, 'bookmarkcache');\n        $this->app->alias(TimelineElementCacheService::class, 'timelineelementcache');\n        $this->app->alias(MarketplaceCacheService::class, 'marketplacecache');\n    }\n}\n"
  },
  {
    "path": "app/Providers/CampaignLocalizationServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\Campaign\\LocalisationService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass CampaignLocalizationServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap the application events.\n     *\n     * @return void\n     */\n    public function boot() {}\n\n    /**\n     * Get the services provided by the provider.\n     *\n     * @return array\n     */\n    public function provides()\n    {\n        return ['modules.handler', 'modules'];\n    }\n\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(LocalisationService::class, function ($app) {\n            $service = new LocalisationService;\n            $service->request($app->make(Request::class));\n\n            return $service;\n        });\n\n        $this->app->alias(LocalisationService::class, 'campaignlocalization');\n    }\n}\n"
  },
  {
    "path": "app/Providers/DashboardServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\DashboardService;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass DashboardServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(DashboardService::class, function () {\n            return new DashboardService;\n        });\n\n        $this->app->alias(DashboardService::class, 'dashboard');\n    }\n}\n"
  },
  {
    "path": "app/Providers/DatagridRendererProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Renderers\\DatagridRenderer2;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass DatagridRendererProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(DatagridRenderer2::class, function () {\n            $service = new DatagridRenderer2;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n\n        $this->app->alias(DatagridRenderer2::class, 'datagrid');\n    }\n}\n"
  },
  {
    "path": "app/Providers/DatalayerServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\Tracking\\DatalayerService;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\nuse Illuminate\\Http\\Request;\n\nclass DatalayerServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(DatalayerService::class, function ($app) {\n            $service = new DatalayerService;\n            $service->request($app->make(Request::class));\n\n            return $service;\n        });\n        $this->app->alias(DatalayerService::class, 'datalayer');\n    }\n}\n"
  },
  {
    "path": "app/Providers/DomainServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\DomainService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass DomainServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(DomainService::class, function ($app) {\n            $service = new DomainService;\n            $service->request($app->make(Request::class));\n\n            return $service;\n        });\n\n        $this->app->alias(DomainService::class, 'domain');\n    }\n}\n"
  },
  {
    "path": "app/Providers/EntitySetupServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\Entity\\LoggerService;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass EntitySetupServiceProvider extends ServiceProvider\n{\n    /**\n     * Register services.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(LoggerService::class, function () {\n            $s = new LoggerService;\n            if (auth()->check()) {\n                $s->user(auth()->user());\n            }\n\n            return $s;\n        });\n        $this->app->alias(LoggerService::class, 'entitylogger');\n    }\n\n    /**\n     * Bootstrap services.\n     *\n     * @return void\n     */\n    public function boot() {}\n}\n"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Events\\AdminInviteCreated;\nuse App\\Events\\Campaigns\\Applications\\Accepted;\nuse App\\Events\\Campaigns\\Applications\\Rejected;\nuse App\\Events\\Campaigns\\Dashboards\\DashboardCreated;\nuse App\\Events\\Campaigns\\Dashboards\\DashboardDeleted;\nuse App\\Events\\Campaigns\\Dashboards\\DashboardUpdated;\nuse App\\Events\\Campaigns\\Deleted;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeCreated;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeDeleted;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeToggled;\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeUpdated;\nuse App\\Events\\Campaigns\\Exports\\ExportCreated;\nuse App\\Events\\Campaigns\\Invites\\InviteCreated;\nuse App\\Events\\Campaigns\\Invites\\InviteDeleted;\nuse App\\Events\\Campaigns\\Members\\RoleUserAdded;\nuse App\\Events\\Campaigns\\Members\\RoleUserRemoved;\nuse App\\Events\\Campaigns\\Members\\Switched;\nuse App\\Events\\Campaigns\\Members\\UserJoined;\nuse App\\Events\\Campaigns\\Members\\UserLeft;\nuse App\\Events\\Campaigns\\Plugins\\PluginDeleted;\nuse App\\Events\\Campaigns\\Plugins\\PluginImported;\nuse App\\Events\\Campaigns\\Plugins\\PluginUpdated;\nuse App\\Events\\Campaigns\\Roles\\RoleCreated;\nuse App\\Events\\Campaigns\\Roles\\RoleDeleted;\nuse App\\Events\\Campaigns\\Roles\\RoleUpdated;\nuse App\\Events\\Campaigns\\Saved;\nuse App\\Events\\Campaigns\\SettingsSaved;\nuse App\\Events\\Campaigns\\Sidebar\\SidebarReset;\nuse App\\Events\\Campaigns\\Sidebar\\SidebarSaved;\nuse App\\Events\\Campaigns\\Styles\\StyleCreated;\nuse App\\Events\\Campaigns\\Styles\\StyleDeleted;\nuse App\\Events\\Campaigns\\Styles\\StyleUpdated;\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailCreated;\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailDeleted;\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailsDeleted;\nuse App\\Events\\Campaigns\\Updated;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookCreated;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookDeleted;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookTested;\nuse App\\Events\\Campaigns\\Webhooks\\WebhookUpdated;\nuse App\\Events\\Entities\\EntityRestored;\nuse App\\Events\\FeatureCreated;\nuse App\\Events\\Posts\\PostCreated;\nuse App\\Events\\Posts\\PostDeleted;\nuse App\\Events\\Posts\\PostRestored;\nuse App\\Events\\Posts\\PostUpdated;\nuse App\\Events\\SpotlightSubmitted;\nuse App\\Events\\Subscriptions\\AutoRemove;\nuse App\\Events\\Subscriptions\\Boost;\nuse App\\Events\\Subscriptions\\Disable;\nuse App\\Events\\Subscriptions\\Premium;\nuse App\\Events\\Subscriptions\\SuperBoost;\nuse App\\Events\\Subscriptions\\Upgrade;\nuse App\\Events\\Users\\EmailChanged;\nuse App\\Listeners\\Campaigns\\Admins\\Notify;\nuse App\\Listeners\\Campaigns\\Applications\\LogApplication;\nuse App\\Listeners\\Campaigns\\Campaigns\\LogCampaign;\nuse App\\Listeners\\Campaigns\\ClearCampaignCache;\nuse App\\Listeners\\Campaigns\\ClearCampaignUsersSaved;\nuse App\\Listeners\\Campaigns\\Dashboards\\LogDashboard;\nuse App\\Listeners\\Campaigns\\EntityTypes\\LogEntityType;\nuse App\\Listeners\\Campaigns\\Exports\\LogExport;\nuse App\\Listeners\\Campaigns\\Invites\\LogInvite;\nuse App\\Listeners\\Campaigns\\Members\\LogMember;\nuse App\\Listeners\\Campaigns\\Members\\LogUserRoleChanged;\nuse App\\Listeners\\Campaigns\\Members\\RunRoleUserJob;\nuse App\\Listeners\\Campaigns\\Plugins\\ClearThemeCache;\nuse App\\Listeners\\Campaigns\\Plugins\\LogPlugin;\nuse App\\Listeners\\Campaigns\\Roles\\LogRole;\nuse App\\Listeners\\Campaigns\\Sidebar\\LogSidebar;\nuse App\\Listeners\\Campaigns\\Styles\\ClearStylesCache;\nuse App\\Listeners\\Campaigns\\Styles\\LogStyle;\nuse App\\Listeners\\Campaigns\\Thumbnails\\LogThumbnail;\nuse App\\Listeners\\Campaigns\\Thumbnails\\LogThumbnails;\nuse App\\Listeners\\Campaigns\\Webhooks\\LogWebhook;\nuse App\\Listeners\\Entities\\LogEntity;\nuse App\\Listeners\\Posts\\LogPost;\nuse App\\Listeners\\SendAdminInviteNotification;\nuse App\\Listeners\\SendFeatureNotification;\nuse App\\Listeners\\SendSpotlightNotification;\nuse App\\Listeners\\Users\\ClearUserCache;\nuse App\\Listeners\\Users\\SendEmailUpdate;\nuse App\\Listeners\\Users\\Subscriptions\\LogPremium;\nuse Illuminate\\Auth\\Events\\Login;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\nuse PragmaRX\\Google2FALaravel\\Listeners\\LoginViaRemember;\n\nclass EventServiceProvider extends ServiceProvider\n{\n    /**\n     * The event listener mappings for the application.\n     */\n    protected $listen = [\n        Login::class => [\n            LoginViaRemember::class,\n        ],\n        AdminInviteCreated::class => [\n            SendAdminInviteNotification::class,\n        ],\n        FeatureCreated::class => [\n            SendFeatureNotification::class,\n        ],\n        SpotlightSubmitted::class => [\n            SendSpotlightNotification::class,\n        ],\n        RoleUserAdded::class => [\n            RunRoleUserJob::class,\n            ClearUserCache::class,\n            LogUserRoleChanged::class,\n        ],\n        RoleUserRemoved::class => [\n            RunRoleUserJob::class,\n            LogUserRoleChanged::class,\n            ClearUserCache::class,\n            ClearCampaignCache::class,\n        ],\n\n        InviteCreated::class => [\n            LogInvite::class,\n        ],\n        InviteDeleted::class => [\n            LogInvite::class,\n        ],\n        PluginUpdated::class => [\n            LogPlugin::class,\n            ClearThemeCache::class,\n        ],\n        PluginDeleted::class => [\n            LogPlugin::class,\n            ClearThemeCache::class,\n        ],\n        PluginImported::class => [\n            LogPlugin::class,\n        ],\n        StyleCreated::class => [\n            LogStyle::class,\n            ClearStylesCache::class,\n            ClearCampaignCache::class,\n        ],\n        StyleUpdated::class => [\n            LogStyle::class,\n            ClearStylesCache::class,\n            ClearCampaignCache::class,\n        ],\n        StyleDeleted::class => [\n            LogStyle::class,\n            ClearStylesCache::class,\n            ClearCampaignCache::class,\n        ],\n        SettingsSaved::class => [\n            ClearCampaignCache::class,\n        ],\n        Accepted::class => [\n            LogApplication::class,\n            ClearCampaignCache::class,\n            ClearUserCache::class,\n        ],\n        Rejected::class => [\n            LogApplication::class,\n            ClearCampaignCache::class,\n        ],\n        Saved::class => [\n            ClearCampaignUsersSaved::class,\n        ],\n        Updated::class => [\n            LogCampaign::class,\n        ],\n        Deleted::class => [\n            ClearCampaignUsersSaved::class,\n        ],\n        DashboardCreated::class => [\n            LogDashboard::class,\n            ClearCampaignCache::class,\n        ],\n        DashboardUpdated::class => [\n            LogDashboard::class,\n            ClearCampaignCache::class,\n        ],\n        DashboardDeleted::class => [\n            LogDashboard::class,\n            ClearCampaignCache::class,\n        ],\n        WebhookCreated::class => [\n            LogWebhook::class,\n        ],\n        WebhookUpdated::class => [\n            LogWebhook::class,\n        ],\n        WebhookDeleted::class => [\n            LogWebhook::class,\n        ],\n        WebhookTested::class => [\n            LogWebhook::class,\n        ],\n        RoleCreated::class => [\n            LogRole::class,\n            ClearCampaignCache::class,\n        ],\n        RoleUpdated::class => [\n            LogRole::class,\n            ClearCampaignCache::class,\n        ],\n        RoleDeleted::class => [\n            LogRole::class,\n            ClearCampaignCache::class,\n        ],\n        ExportCreated::class => [\n            LogExport::class,\n        ],\n        SidebarSaved::class => [\n            LogSidebar::class,\n        ],\n        SidebarReset::class => [\n            LogSidebar::class,\n        ],\n        ThumbnailCreated::class => [\n            LogThumbnail::class,\n            ClearCampaignCache::class,\n        ],\n        ThumbnailDeleted::class => [\n            LogThumbnail::class,\n            ClearCampaignCache::class,\n        ],\n        ThumbnailsDeleted::class => [\n            LogThumbnails::class,\n            ClearCampaignCache::class,\n        ],\n        UserJoined::class => [\n            Notify::class,\n            ClearUserCache::class,\n            LogMember::class,\n        ],\n        UserLeft::class => [\n            Notify::class,\n            ClearUserCache::class,\n            LogMember::class,\n        ],\n        Switched::class => [\n            LogMember::class,\n        ],\n        EntityRestored::class => [\n            LogEntity::class,\n        ],\n        PostRestored::class => [\n            LogPost::class,\n        ],\n        PostCreated::class => [\n            LogPost::class,\n        ],\n        PostUpdated::class => [\n            LogPost::class,\n        ],\n        PostDeleted::class => [\n            LogPost::class,\n        ],\n        EntityTypeCreated::class => [\n            LogEntityType::class,\n        ],\n        EntityTypeUpdated::class => [\n            LogEntityType::class,\n        ],\n        EntityTypeToggled::class => [\n            LogEntityType::class,\n            ClearCampaignCache::class,\n        ],\n        EntityTypeDeleted::class => [\n            LogEntityType::class,\n        ],\n        Boost::class => [\n            LogPremium::class,\n        ],\n        Premium::class => [\n            LogPremium::class,\n        ],\n        Upgrade::class => [\n            LogPremium::class,\n        ],\n        AutoRemove::class => [\n            LogPremium::class,\n        ],\n        SuperBoost::class => [\n            LogPremium::class,\n        ],\n        Disable::class => [\n            LogPremium::class,\n        ],\n        EmailChanged::class => [\n            SendEmailUpdate::class,\n        ],\n    ];\n\n    /**\n     * The subscriber classes to register.\n     *\n     * @var array\n     */\n    protected $subscribe = [\n        'App\\Listeners\\UserEventSubscriber',\n    ];\n\n    /**\n     * Register any events for your application.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        parent::boot();\n    }\n}\n"
  },
  {
    "path": "app/Providers/FormCopyServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\FormCopyService;\nuse Illuminate\\Support\\ServiceProvider;\n\n/**\n * Class FormCopyServiceProvider\n */\nclass FormCopyServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(FormCopyService::class, function () {\n            return new FormCopyService;\n        });\n\n        // $this->app->alias(FormCopyService::class, 'formcopy');\n    }\n}\n"
  },
  {
    "path": "app/Providers/IdentityServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\IdentityManager;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass IdentityServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(IdentityManager::class, function ($app) {\n            return new IdentityManager($app);\n        });\n\n        $this->app->alias(IdentityManager::class, 'identity');\n    }\n}\n"
  },
  {
    "path": "app/Providers/ImgServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\ImagesService;\nuse App\\Services\\ImgService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass ImgServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(ImgService::class, function () {\n            return new ImgService;\n        });\n        $this->app->singleton(ImagesService::class, function ($app) {\n            $service = new ImagesService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n            $service->request($app->make(Request::class));\n\n            return $service;\n        });\n\n        $this->app->alias(ImgService::class, 'img');\n        $this->app->alias(ImagesService::class, 'images');\n    }\n}\n"
  },
  {
    "path": "app/Providers/ImporterServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Services\\Campaign\\Import\\ImportIdMapper;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass ImporterServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(ImportIdMapper::class, function () {\n            return new ImportIdMapper;\n        });\n\n        $this->app->alias(ImportIdMapper::class, 'importidmapper');\n    }\n}\n"
  },
  {
    "path": "app/Providers/LimitServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\LimitService;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass LimitServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(LimitService::class, function () {\n            $service = new LimitService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n            if (auth()->check()) {\n                $service->user(auth()->user());\n            }\n\n            return $service;\n        });\n\n        $this->app->alias(LimitService::class, 'limit');\n    }\n}\n"
  },
  {
    "path": "app/Providers/Logs/ApiLogServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers\\Logs;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\Logs\\ApiLogService;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass ApiLogServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(ApiLogService::class, function () {\n            $service = new ApiLogService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n            if (auth()->check()) {\n                $service->user(auth()->user());\n            }\n\n            return $service;\n        });\n\n        $this->app->alias(ApiLogService::class, 'api_log');\n    }\n}\n"
  },
  {
    "path": "app/Providers/MentionsServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\Entity\\NewService;\nuse App\\Services\\MentionsService;\nuse Illuminate\\Support\\ServiceProvider;\nuse TOC\\MarkupFixer;\n\nclass MentionsServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(MentionsService::class, function () {\n            $service = new MentionsService(\n                app()->make(MarkupFixer::class),\n                app()->make(NewService::class)\n            );\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n\n        $this->app->alias(MentionsService::class, 'mentions');\n    }\n}\n"
  },
  {
    "path": "app/Providers/ModuleServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\Campaign\\ModuleService;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass ModuleServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the service provider.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $this->app->singleton(ModuleService::class, function () {\n            $service = new ModuleService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->alias(ModuleService::class, 'module');\n    }\n}\n"
  },
  {
    "path": "app/Providers/PermissionsServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\Permissions\\EntityPermission;\nuse App\\Services\\Permissions\\PermissionService;\nuse App\\Services\\Permissions\\RolePermission;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass PermissionsServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap services.\n     *\n     * @return void\n     */\n    public function boot() {}\n\n    /**\n     * Register services.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        /*\n        App\\Providers\\EntityPermissionServiceProvider::class,\n        */\n        $this\n            ->registerMain()\n            // ->registerUser()\n            ->registerRole()\n            ->registerEntity();\n    }\n\n    protected function registerMain(): self\n    {\n        $this->app->singleton(PermissionService::class, function () {\n            $service = new PermissionService;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n        $this->app->alias(PermissionService::class, 'permissions');\n\n        return $this;\n    }\n\n    protected function registerEntity(): self\n    {\n        $this->app->singleton(EntityPermission::class, function () {\n            /** @var EntityPermission $service */\n            $service = new EntityPermission;\n            if (CampaignLocalization::hasCampaign()) {\n                $service->campaign(CampaignLocalization::getCampaign());\n            }\n\n            return $service;\n        });\n\n        $this->app->alias(EntityPermission::class, 'entitypermission');\n\n        return $this;\n    }\n\n    protected function registerRole(): self\n    {\n        $this->app->singleton(RolePermission::class, function () {\n            return new RolePermission;\n        });\n\n        $this->app->alias(RolePermission::class, 'rolepermission');\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Facades\\Domain;\nuse App\\Http\\Controllers\\Api\\v1\\HealthController;\nuse App\\Http\\Middleware\\LastCampaign;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse App\\Models\\Plugin;\nuse App\\Models\\Tier;\nuse App\\Models\\UserValidation;\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\nuse Illuminate\\Support\\Facades\\Route;\n\nclass RouteServiceProvider extends ServiceProvider\n{\n    /**\n     * This namespace is applied to your controller routes.\n     *\n     * In addition, it is set as the URL generator's root namespace.\n     *\n     * @var string\n     */\n    protected $namespace = 'App\\Http\\Controllers';\n\n    public const HOME = '/';\n\n    /**\n     * Define your route model bindings, pattern filters, etc.\n     */\n    public function boot(): void\n    {\n        parent::boot();\n\n        Route::model('plugin', Plugin::class);\n        Route::model('tier', Tier::class);\n\n        // This is important, ensures only campaigns the user has access get injected in the route model binding.\n        Route::bind('campaign', function (string $value) {\n            return Campaign::acl($value)->firstOrFail();\n        });\n        Route::model('entityType', EntityType::class);\n        Route::model('userValidation', UserValidation::class);\n    }\n\n    /**\n     * Define the routes for the application.\n     */\n    public function map()\n    {\n        $this->api()\n            ->web()\n            ->campaign()\n            ->settings()\n            ->auth()\n            ->webhooks()\n            ->vendor();\n    }\n\n    /**\n     * Define the general \"web\" routes for the application.\n     *\n     * These routes all receive session state, CSRF protection, etc.\n     */\n    protected function web(): self\n    {\n        Route::middleware(['web', 'adless'])\n            ->namespace($this->namespace)\n            ->group(base_path('routes/web.php'));\n\n        Route::middleware(['web', 'adless'])\n            ->namespace($this->namespace)\n            ->group(base_path('routes/web-i18n.php'));\n\n        return $this;\n    }\n\n    /**\n     * Define the \"api\" routes for the application.\n     */\n    protected function api(): self\n    {\n        $domain = Domain::isApi() ? Domain::api() : '';\n        $prefix = Domain::isApi() ? null : 'api';\n        $prefixName = Domain::isApi() ? null : 'api.';\n        Route::domain($domain)\n            ->prefix($prefix)\n            ->namespace($this->namespace)\n            ->get('/health', [HealthController::class, 'index']);\n\n        Route::domain($domain)\n            ->name($prefixName)\n            ->prefix($prefix)\n            ->middleware('api')\n            ->namespace($this->namespace)\n            ->group(base_path('routes/api.php'));\n\n        return $this;\n    }\n\n    /**\n     * Define the \"campaign\" routes for everything in a campaign\n     */\n    protected function campaign(): self\n    {\n        $domain = Domain::isApi() ? Domain::app() : null;\n        Route::domain($domain)\n            ->middleware(['web', LastCampaign::class])\n            ->namespace($this->namespace)\n            ->group(base_path('routes/campaigns/campaign.php'));\n\n        Route::domain($domain)\n            ->middleware(['web', LastCampaign::class])\n            ->namespace($this->namespace)\n            ->group(base_path('routes/campaigns/entities.php'));\n\n        Route::domain($domain)\n            ->middleware(['web', LastCampaign::class])\n            ->namespace($this->namespace)\n            ->group(base_path('routes/campaigns/bulks.php'));\n\n        Route::domain($domain)\n            ->middleware(['web', LastCampaign::class])\n            ->namespace($this->namespace)\n            ->group(base_path('routes/campaigns/search.php'));\n\n        return $this;\n    }\n\n    /**\n     * Define the \"profile\" routes of a user\n     */\n    protected function settings(): self\n    {\n        Route::middleware(['web', 'adless'])\n            ->prefix('settings')\n            ->namespace($this->namespace)\n            ->group(base_path('routes/settings.php'));\n\n        return $this;\n    }\n\n    /**\n     * Define the \"auth\" routes for login, logout, lost password etc\n     */\n    protected function auth(): self\n    {\n        Route::middleware(['web', 'adless'])\n            ->namespace('App\\Http\\Controllers')\n            ->group(base_path('routes/auth.php'));\n\n        return $this;\n    }\n\n    protected function vendor(): self\n    {\n        Route::middleware(['minimum'])\n            ->namespace('\\App\\Http\\Controllers')\n            ->group(base_path('routes/vendor.php'));\n\n        return $this;\n    }\n\n    protected function webhooks(): self\n    {\n        Route::middleware(['webhooks'])\n            ->namespace($this->namespace)\n            ->group(base_path('routes/webhooks.php'));\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/CalendarRenderer.php",
    "content": "<?php\n\nnamespace App\\Renderers;\n\nuse App\\Enums\\EntityEventTypes;\nuse App\\Models\\Calendar;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\Reminder;\nuse App\\Services\\Calendars\\DaysService;\nuse App\\Services\\Calendars\\MoonService;\nuse App\\Services\\Calendars\\SeasonService;\nuse App\\Services\\Calendars\\WeatherService;\nuse App\\Traits\\CalendarAware;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\nclass CalendarRenderer\n{\n    use CalendarAware;\n    use CampaignAware;\n    use RequestAware;\n\n    /**\n     * Segments of the date\n     */\n    protected bool $segments;\n\n    /**\n     * Current month\n     */\n    protected int $month;\n\n    /**\n     * Current Year\n     */\n    protected int $year;\n\n    /**\n     * Named Weeks\n     */\n    protected array $weeks = [];\n\n    /**\n     * Death events\n     */\n    protected array $deaths = [];\n\n    /**\n     * Birthday events\n     */\n    protected array $births = [];\n\n    /**\n     * Array of weirdly recurring events\n     */\n    protected array $recurring = [];\n\n    /**\n     * Layout option\n     */\n    protected string $layout = 'year';\n\n    /**\n     * Events displayed on the calendar view\n     */\n    protected array $events = [];\n\n    /**\n     * Start date of events displayed on the calendar view\n     */\n    protected array $eventStart = [];\n\n    /**\n     * End date of events displayed on the calendar view\n     */\n    protected array $eventEnd = [];\n\n    protected array $dayData;\n\n    protected array $remainingRecurring;\n\n    public function __construct(\n        protected MoonService $moonService,\n        protected SeasonService $seasonService,\n        protected WeatherService $weatherService,\n        protected DaysService $daysService\n    ) {}\n\n    public function prepare(): self\n    {\n        $this->buildCurrentSegments();\n\n        return $this;\n    }\n\n    /**\n     * Get previous month link\n     */\n    public function previous(bool $title = false): string\n    {\n        $month = $this->getMonth(-1);\n        $year = $this->getYear();\n        $months = $this->calendar->months();\n\n        // Yearly navigation\n        if ($this->isYearlyLayout()) {\n            $year--;\n            if (! $this->calendar->hasYearZero() && $year == 0) {\n                $year--;\n            }\n            if ($title) {\n                return (string) $year;\n            } else {\n                return route(\n                    'entities.show',\n                    [$this->campaign, 'entity' => $this->calendar->entity, 'layout' => 'year', 'year' => $year]\n                );\n            }\n        }\n\n        if ($month <= 0) {\n            $year--;\n            if (! $this->calendar->hasYearZero() && $year == 0) {\n                $year--;\n            }\n            $month = count($months);\n        }\n\n        if ($title) {\n            return $months[$month - 1]['name'] . \" {$year}\";\n        }\n\n        $routeOptions = [$this->campaign, 'entity' => $this->calendar->entity, 'month' => $month, 'year' => $year];\n        if ($this->calendar->defaultLayout() === 'year') {\n            // @phpstan-ignore-next-line\n            $routeOptions['layout'] = $this->isYearlyLayout() ? 'year' : 'month';\n        }\n\n        return route(\n            'entities.show',\n            $routeOptions\n        );\n    }\n\n    /**\n     * Build a link to a year\n     */\n    public function linkToYear(bool $next = true): string\n    {\n        $month = $this->getMonth();\n        $year = $this->getYear($next ? 1 : -1);\n        if (! $this->calendar->hasYearZero() && $year == 0) {\n            if ($next) {\n                $year++;\n            } else {\n                $year--;\n            }\n        }\n\n        $options = [\n            'campaign' => $this->campaign,\n            'entity' => $this->calendar->entity,\n            'month' => $month,\n            'year' => $year,\n        ];\n        if ($this->isYearlyLayout()) {\n            if (! $this->calendar->yearlyLayout()) {\n                $options['layout'] = 'year';\n            }\n            unset($options['month']);\n        } elseif ($this->calendar->yearlyLayout()) {\n            $options['layout'] = 'month';\n        }\n\n        return route(\n            'entities.show',\n            $options\n        );\n    }\n\n    /**\n     * Get the title to a year\n     */\n    public function titleToYear(bool $next = true): string\n    {\n        $month = $this->getMonth();\n        $year = $this->getYear($next ? 1 : -1);\n        if (! $this->calendar->hasYearZero() && $year == 0) {\n            if ($next) {\n                $year++;\n            } else {\n                $year--;\n            }\n        }\n\n        if ($this->isYearlyLayout()) {\n            return (string) $year;\n        }\n\n        $months = $this->calendar->months();\n\n        return $months[$month - 1]['name'] . \" {$year}\";\n    }\n\n    /**\n     * Get current year-month\n     */\n    public function currentMonthName(): string\n    {\n        $months = $this->calendar->months();\n        $month = $months[$this->getMonth(-1)];\n        $monthName = e(Arr::get($month, 'name', ''));\n        $monthName = '' . $monthName . '';\n\n        return $this->isYearlyLayout() ? '' : $monthName;\n    }\n\n    public function currentYearName(): string\n    {\n        // Year name\n        $year = $this->getYear();\n        $names = $this->calendar->years();\n        $yearText = $year;\n        if (isset($names[$year])) {\n            $safeName = e($names[$year]);\n            $yearText = \"<span title=\\\"{$year}\\\">{$safeName}</span>\";\n        }\n\n        return $yearText;\n    }\n\n    public function monthAlias(): string\n    {\n        $months = $this->calendar->months();\n        $month = $months[$this->getMonth(-1)];\n        $alias = Arr::get($month, 'alias', '');\n\n        if (empty($alias)) {\n            return '';\n        }\n\n        // Month alias is already escaped on saving so let's skip it here\n        return $alias;\n    }\n\n    /**\n     * Get next month link\n     */\n    public function next($title = false): string\n    {\n        $month = $this->getMonth(1);\n        $year = $this->getYear();\n        $months = $this->calendar->months();\n\n        // Yearly navigation\n        if ($this->isYearlyLayout()) {\n            $year++;\n            if (! $this->calendar->hasYearZero() && $year == 0) {\n                $year++;\n            }\n            if ($title) {\n                return (string) $year;\n            } else {\n                return route(\n                    'entities.show',\n                    [$this->campaign, 'entity' => $this->calendar->entity, 'layout' => 'year', 'year' => $year]\n                );\n            }\n        }\n\n        if ($month > count($months)) {\n            $year++;\n            if (! $this->calendar->hasYearZero() && $year == 0) {\n                $year++;\n            }\n            $month = 1;\n        }\n\n        if ($title) {\n            return $months[$month - 1]['name'] . \" {$year}\";\n        }\n\n        $routeOptions = [$this->campaign, 'entity' => $this->calendar->entity, 'month' => $month, 'year' => $year];\n        if ($this->calendar->yearlyLayout()) {\n            // @phpstan-ignore-next-line\n            $routeOptions['layout'] = $this->isYearlyLayout() ? 'year' : 'month';\n        }\n\n        return route(\n            'entities.show',\n            $routeOptions\n        );\n    }\n\n    /**\n     * Build the calendar events for a month view\n     *\n     * @return array\n     */\n    public function buildForMonth()\n    {\n        // Number of weeks in this month?\n        $weekdays = $this->calendar->weekdays();\n        $months = $this->calendar->months();\n        $month = $months[$this->getMonth() - 1];\n        $data = [];\n\n        // If weeks reset on the first day of the week, skip the offset\n        $offset = 0;\n        if (empty($this->calendar->reset) || ($this->calendar->reset === 'year' && $this->getMonth() != 1)) {\n            $offset = $this->weekStartoffset();\n\n            if ($this->calendar->start_offset > 0) {\n                $offset += $this->calendar->start_offset;\n            } elseif ($this->calendar->start_offset < 0) {\n                $offset += count($weekdays) + $this->calendar->start_offset;\n            }\n        }\n        $events = $this->events();\n\n        if (Arr::get($month, 'type') == 'intercalary') {\n            $offset = 0;\n        }\n\n        // Check if this month is a leap month\n        if ($this->calendar->has_leap_year) {\n            if ($this->calendar->leap_year_month == $this->getMonth()) {\n                // Is this the starting year, or an increment of the offset?\n                $handle = $this->getYear() - $this->calendar->leap_year_start;\n                if ($handle % max(1, $this->calendar->leap_year_offset) === 0) {\n                    $month['length'] += $this->calendar->leap_year_amount;\n                }\n            }\n        }\n\n        // If the offset is higher than a week, let's scale it down a week to avoid an empty week row\n        if ($offset >= count($weekdays)) {\n            $offset -= count($weekdays);\n        }\n\n        // Define the week number from the start of the year\n        $weekNumber = $this->startingWeekNumber();\n        // dump(\"starting week number: \" . $weekNumber);\n\n        $monthLength = $month['length'];\n        $weekLength = 0;\n        $week = [];\n        $this->remainingRecurring = [];\n\n        // Calc julian based on previous months\n        $julian = 1;\n        for ($passedMonth = 1; $passedMonth < $this->getMonth(); $passedMonth++) {\n            $passedMonthData = $months[$passedMonth - 1];\n            $julian += $passedMonthData['length'];\n        }\n\n        for ($day = 1; $day <= $monthLength; $day++) {\n            if ($offset > 0) {\n                $week[] = null;\n                $offset--;\n                $day--;\n            } else {\n                $exact = $this->getYear() . '-' . $this->getMonth() . '-' . $day;\n                $this->dayData = [\n                    'day' => $day,\n                    'year' => $this->getYear(),\n                    'month' => $this->getMonth(),\n                    'events' => [],\n                    'date' => $exact,\n                    'isToday' => false,\n                    'julian' => $julian,\n                ];\n\n                if (isset($events[$exact])) {\n                    $this->dayData['events'] = $events[$exact];\n                }\n\n                if ($exact == $this->calendar->date) {\n                    $this->dayData['isToday'] = true;\n                }\n\n                if ($this->moonService->has($day)) {\n                    $this->dayData['moons'] = $this->moonService->get($day);\n                }\n\n                if ($this->weatherService->has($exact)) {\n                    $this->dayData['weather'] = $this->weatherService->get($exact);\n                }\n\n                $monthday = $this->getMonth() . '-' . $day;\n                if ($this->seasonService->has($monthday)) {\n                    $this->dayData['season'] = $this->seasonService->get($monthday);\n                }\n\n                // Add recurring events that span multiple days from the previous call\n                $this->recurringReminders();\n                $this->addMoonReminders($day);\n\n                $week[] = $this->dayData;\n                $julian++;\n            }\n\n            $weekLength++;\n\n            if (count($week) >= count($weekdays)) {\n                $data[$weekNumber] = $week;\n                $week = [];\n                $weekNumber++;\n            }\n        }\n\n        // Fill in the last week?\n        $lastWeekDiff = count($week) - count($weekdays);\n        if ($lastWeekDiff < 0) {\n            if (abs($lastWeekDiff) >= count($weekdays)) {\n                $lastWeekDiff += count($weekdays);\n            }\n            for ($day = $lastWeekDiff; $day < 0; $day++) {\n                $week[] = null;\n            }\n        }\n\n        $data[$weekNumber] = $week;\n\n        return $data;\n    }\n\n    /**\n     * Build the calendar for the yearly view\n     */\n    public function buildForYear(): array\n    {\n        // Number of weeks in this month?\n        $weekdays = $this->calendar->weekdays();\n        $months = $this->calendar->months();\n        $julian = 1;\n        $data = [];\n\n        $events = $this->events();\n\n        $offset = 0;\n        if (empty($this->calendar->reset) || ($this->calendar->reset === 'year' && $this->getMonth() != 1)) {\n            $offset = $this->weekStartoffset();\n\n            if ($this->calendar->start_offset > 0) {\n                $offset += $this->calendar->start_offset;\n            } elseif ($this->calendar->start_offset < 0) {\n                $offset += count($weekdays) + $this->calendar->start_offset;\n            }\n        }\n\n        // Add empty days for the beginning of the year\n        for ($i = $offset; $i > 0; $i--) {\n            $data[] = null;\n        }\n\n        $weekLength = count($weekdays);\n        $monthNumber = 1;\n        $weekNumber = $offset > 0 && empty($this->calendar->reset) ? 2 : 1;\n        // dump('Starting week number: ' . $weekNumber);\n        $totalDay = 1;\n        $weekday = 1;\n        foreach ($months as $month) {\n            // dump('Month: ' . $month['name']);\n            // if ($weekNumber)\n            $month = $months[$monthNumber - 1];\n            $this->month = $monthNumber;\n\n            // Check if this month is a leap month\n            if ($this->calendar->has_leap_year) {\n                if ($this->calendar->leap_year_month == $monthNumber) {\n                    // Is this the starting year, or an increment of the offset?\n                    $handle = $this->getYear() - $this->calendar->leap_year_start;\n                    if ($handle % max(1, $this->calendar->leap_year_offset) === 0) {\n                        $month['length'] += $this->calendar->leap_year_amount;\n\n                        // If it also happens to add days on an intercalary day, we need to influence the number of days\n                        // added at the end of the month.\n                    }\n                }\n            }\n\n            $monthLength = $month['length'];\n            $week = [];\n            $currentPosition = 0;\n\n            // If the month is intercalary, we need to offset to the \"beginning\" of the week\n            if (Arr::get($month, 'type') == 'intercalary') {\n                $totalDays = count($data);\n                $emptyDaysToFill = $weekLength - ($totalDays % $weekLength);\n                $currentPosition = $weekLength - $emptyDaysToFill; // On which week day we currently are\n\n                // Don't fill a whole empty week\n                if ($emptyDaysToFill == $weekLength) {\n                    $emptyDaysToFill = 0;\n                }\n\n                for ($d = 0; $d < $emptyDaysToFill; $d++) {\n                    $data[] = [];\n                }\n            }\n\n            // Add each day of the month to the day thing\n            $this->remainingRecurring = [];\n            $endedWeek = false;\n            for ($day = 1; $day <= $monthLength; $day++) {\n                $endedWeek = false;\n                $exact = $this->getYear() . '-' . $monthNumber . '-' . $day;\n                // if ($weekNumber < 13) dump('new day ' . $weekday . ', ' . $totalDay . ', ' . $exact);\n                $this->dayData = [\n                    'day' => $day,\n                    'events' => [],\n                    'date' => $exact,\n                    'year' => $this->getYear(),\n                    'julian' => $julian,\n                    'isToday' => false,\n                    'month' => $month['name'],\n                    'week' => Arr::get($month, 'type') == 'intercalary' ? null : $weekNumber,\n                ];\n\n                if (isset($events[$exact])) {\n                    $this->dayData['events'] = $events[$exact];\n                }\n\n                if ($exact == $this->calendar->date) {\n                    $this->dayData['isToday'] = true;\n                }\n\n                if ($this->moonService->has($totalDay)) {\n                    $this->dayData['moons'] = $this->moonService->get($totalDay);\n                }\n                if ($this->weatherService->has($exact)) {\n                    $this->dayData['weather'] = $this->weatherService->get($exact);\n                }\n\n                $this->recurringReminders();\n                $this->addMoonReminders($day);\n\n                $monthday = $monthNumber . '-' . $day;\n                if ($this->seasonService->has($monthday)) {\n                    $this->dayData['season'] = $this->seasonService->get($monthday);\n                }\n                $data[] = $this->dayData;\n\n                $totalDay++;\n\n                // If we're hitting the end of the week, go down\n                if ($weekday % $weekLength == 0 && Arr::get($month, 'type') != 'intercalary') {\n                    // if ($weekNumber < 13) dump('end of the week: week ' . $weekNumber . ' is over, going to ' . ($weekNumber+1));\n                    $weekNumber++;\n                    $endedWeek = true;\n                    $weekday = 1;\n                } else {\n                    $weekday++;\n                }\n\n                // Increase the julian date by one\n                $julian++;\n            }\n\n            // if ($weekNumber < 13) dump('finished the month. Did we end the week on the last day? ' . ($endedWeek ? 'yes' : 'no'));\n\n            // If the month is intercalary, we need to fill out the rest of the \"week\" until where it starts again\n            // Or iff we have resets on the end of the month, we need to fill in some empty days\n            if (Arr::get($month, 'type') == 'intercalary' || $this->calendar->reset === 'month') {\n                // if ($weekNumber < 13) dump('there is a reset going on here');\n                $totalDays = count($data);\n                $emptyDaysToFill = $weekLength - ($totalDays % $weekLength);\n\n                // Don't fill a whole empty week\n                if ($emptyDaysToFill == $weekLength) {\n                    $emptyDaysToFill = 0;\n                }\n\n                for ($d = 0; $d < $emptyDaysToFill; $d++) {\n                    $data[] = [];\n                }\n\n                // Fill out the next month beginning if needed\n                // Only add at the beginning if we don't reset on first day of the week\n                if (! $this->calendar->reset == 'month') {\n                    for ($d = 0; $d < $currentPosition; $d++) {\n                        $data[] = [];\n                    }\n                } elseif (! $endedWeek) {\n                    // Only increase the week number if the reset didn't happen on the last day of the previous month,\n                    // otherwise we are skipping a week number.\n                    // if ($weekNumber < 13) dump('reset: week ' . $weekNumber . ' is over, going to ' . ($weekNumber+1));\n                    $weekNumber++;\n                    $weekday = 1;\n                }\n            }\n\n            $monthNumber++;\n        }\n\n        return $data;\n    }\n\n    public function currentMonthId()\n    {\n        return $this->getMonth();\n    }\n\n    /**\n     * Determine if the \"today\" button is disabled.\n     */\n    public function todayButtonIsDisabled(): bool\n    {\n        $calendarYear = $this->calendar->currentDate('year');\n        $calendarMonth = $this->calendar->currentDate('month');\n\n        return (bool) ($this->year == $calendarYear && $this->month == $calendarMonth);\n    }\n\n    public function isIntercalaryMonth(): bool\n    {\n        $month = $this->currentMonthId() - 1;\n        foreach ($this->calendar->months() as $k => $m) {\n            if ($k == $month && Arr::get($m, 'type') == 'intercalary') {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Build the current month and year segments\n     */\n    protected function buildCurrentSegments(): void\n    {\n        if (isset($this->segments)) {\n            return;\n        }\n        $this->segments = true;\n\n        $segments = $this->splitDate($this->calendar->date);\n        $this->setMonth((int) $segments[1])\n            ->setYear($segments[0]);\n\n        if ($this->request->filled('month')) {\n            $this->setMonth((int) $this->request->input('month'));\n        }\n        if ($this->request->filled('year')) {\n            $this->setYear((int) $this->request->input('year'));\n        }\n\n        if (empty($this->getMonth())) {\n            $this->setMonth(1);\n        }\n\n        // If the month is too big? Then use the max\n        if ($this->getMonth() > count($this->calendar->months())) {\n            $this->setMonth(count($this->calendar->months()));\n        }\n\n        // Yearly layout does things a bit differently, reset month to first\n        $this->layout = $this->request->get('layout', $this->calendar->defaultLayout()) ?? 'month';\n        if ($this->isYearlyLayout()) {\n            $this->setMonth(1);\n        }\n\n        $this->buildFullmoons();\n        $this->buildSeasons();\n        $this->buildWeeks();\n        $this->buildWeather();\n    }\n\n    /**\n     * Calculate the month starting offset\n     */\n    protected function weekStartOffset(): int\n    {\n        $totalDays = $this->daysToDate(false);\n        $negativeYear = $totalDays < 0;\n        $weekLength = count($this->calendar->weekdays());\n        if ($weekLength == 0) {\n            $weekLength = 1;\n        }\n\n        // If the calendar resets on the first day of the year, we can switch this around\n        if ($this->calendar->reset == 'year') {\n            $totalDays = $this->daysToDateForYear();\n        }\n\n        $totalDays = $negativeYear ? abs($totalDays) : $totalDays;\n        $offset = (int) floor($totalDays % $weekLength);\n\n        // If we are in a negative year, we need to reduce the offset from the week length, as we want the last\n        // month before the calendar really \"starts\" to end on the last day of the week.\n        return $negativeYear && $this->calendar->reset != 'year' ? $weekLength - $offset : $offset;\n    }\n\n    /**\n     * Load events of the year and month\n     */\n    protected function events(): array\n    {\n        $this->events = [];\n        $reminders = $this->getReminders($this->calendar);\n        $this->parseReminders($reminders);\n\n        if ($this->calendar->entity->parent) {\n            $reminders = $this->getReminders($this->calendar->entity->parent->calendar);\n            $this->parseReminders($reminders);\n        }\n\n        // dd($this->events);\n        return $this->events;\n    }\n\n    /**\n     * @return \\Illuminate\\Database\\Eloquent\\Collection\n     */\n    protected function getReminders(Calendar $calendar)\n    {\n        // @phpstan-ignore-next-line\n        return $calendar->calendarEvents()\n            ->whereHas('remindable')\n            ->with([\n                'remindable' => function ($morphTo) {\n                    $morphTo->morphWith([\n                        Entity::class => ['entityType', 'tags', 'image'],\n                        Post::class => ['tags', 'entity'],\n                    ]);\n                },\n                'death'])\n            ->where(function ($query) {\n                $query\n                    // Where it's the current year , or current year and current month\n                    ->where(function ($sub) {\n                        $sub->where('year', $this->getYear());\n\n                        if (! $this->isYearlyLayout()) {\n                            $sub->where('month', $this->getMonth());\n                        }\n                    })\n                    // Or where the event is recurring, or recurring on this month\n                    ->orWhere(function ($sub) {\n                        if ($this->isYearlyLayout()) {\n                            $sub->where('is_recurring', true);\n                        } else {\n                            $sub->where('month', $this->getMonth())\n                                ->where('is_recurring', true);\n                        }\n                    })\n                    ->orWhere(function ($sub) {\n                        if ($this->calendar->show_birthdays) {\n                            $sub->where('year', '<=', $this->getYear())\n                                ->whereIn('type_id', [EntityEventTypes::birth, EntityEventTypes::death]);\n                            if (! $this->isYearlyLayout()) {\n                                $sub->where('month', $this->getMonth());\n                            }\n                        }\n                    })\n                    // Events from previous year or month that spill over\n                    ->orWhere(function ($sub) {\n                        $previousYear = $this->getYear(-1);\n                        if (! $this->calendar->hasYearZero() && $previousYear == 0) {\n                            $previousYear--;\n                        }\n                        $sub->whereIn('year', [$previousYear, $this->getYear()])\n                            ->where('length', '>', 1);\n                    })\n                    // Events from previous month that spill over\n//                    ->orWhere(function ($sub) {\n//                        list($year, $month) = $this->subMonth($this->getYear(), $this->getMonth());\n//                        $sub->where('year', $year)\n//                            ->where('month', $month)\n//                            ->where('length', '>', 1);\n//                    })\n\n                    // Monthly recurring events\n                    ->orWhere(function ($sub) {\n                        $sub->where('is_recurring', true);\n                    });\n            })\n            ->get();\n    }\n\n    protected function parseReminders(Collection $reminders): void\n    {\n        $totalMonths = count($this->calendar->months());\n        if (! $this->isYearlyLayout()) {\n            $totalMonths = $this->getMonth();\n        }\n        /** @var Reminder $event */\n        foreach ($reminders as $event) {\n            if ($event->isBirth() && $event->death && $event->death->isPastDate($this->getYear(), $event->month, $event->day)) {\n                continue;\n            }\n            $date = $event->year . '-' . $event->month . '-' . $event->day;\n\n            // If the event is recurring, get the year to make sure it should start showing. This was previously\n            // done in the query, but it didn't work on all systems.\n            if ($event->is_recurring || $event->isBirth()) {\n                if ($event->year > $this->getYear()) {\n                    continue;\n                }\n                // Over max reoccurring year?\n                if (! empty($event->recurring_until) && $event->recurring_until < $this->getYear()) {\n                    continue;\n                }\n                $date = $this->getYear() . '-' . $event->month . '-' . $event->day;\n            }\n\n            if (! isset($this->events[$date])) {\n                $this->events[$date] = [];\n            }\n\n            // Make sure the user can actually see the requested event\n            if (empty($event->remindable) || ($event->remindable instanceof Entity && $event->remindable->isMissingChild()) || ($event->remindable instanceof Post && ! $event->remindable->entity)) {\n                continue;\n            }\n            // If the event reoccurs each month, let's add it everywhere\n            if ($event->recurringMonthly()) {\n                $startingMonth = $event->year == $this->getYear() ? $event->month : 1;\n                for ($month = $startingMonth; $month <= $totalMonths; $month++) {\n                    $recurringDate = $this->getYear() . '-' . $month . '-' . $event->day;\n                    $this->events[$recurringDate][] = $event;\n                    $this->addMultidayEvent($event, $recurringDate);\n                }\n            } elseif ($event->is_recurring && $event->recurring_periodicity !== 'year') {\n                // If we haven't passed the max date for this event, show it in the recurring blocks\n                if (empty($event->recurring_until) || $this->getYear() < $event->recurring_until) {\n                    $this->recurring[$event->recurring_periodicity][] = $event;\n                }\n            } else {\n                // Only add it once\n                $this->events[$date][] = $event;\n                $this->addMultidayEvent($event, $date);\n            }\n        }\n\n        foreach ($this->births as $key => $birth) {\n            if (! isset($this->deaths[$key]) || ($this->deaths[$key]->month > $birth->month || ($this->deaths[$key]->month == $birth->month && $this->deaths[$key]->day > $birth->day))) {\n                $date = $this->getYear() . '-' . $birth->month . '-' . $birth->day;\n                $this->events[$date][] = $birth;\n            }\n        }\n        // should end the first day of the month\n    }\n\n    /**\n     * For multi-day event, add it to each day the event lasts\n     */\n    protected function addMultidayEvent(Reminder $reminder, string $date)\n    {\n        // Does the day go over a few days?\n        if ($reminder->length == 1) {\n            return;\n        }\n        // Flag this reminder's start date to show (start) in the UI\n        $this->eventStart[$reminder->id][] = $date;\n\n        // For each length of the reminder, add it to the UI\n        $extraDate = $date;\n        for ($extra = 1; $extra < $reminder->length; $extra++) {\n            $extraDate = $this->addDay($extraDate);\n\n            [$y, $m, $d] = $this->splitDate($extraDate);\n            if (! $this->calendar->hasYearZero() && $y == 0) {\n                $extraDate = '1-' . $m . '-' . $d;\n            }\n            $this->events[$extraDate][] = $reminder;\n        }\n        // Finished adding all the reminder's days, flag it to show (end) in the UI\n        $this->eventEnd[$reminder->id][] = $extraDate;\n    }\n\n    /**\n     * Add an extra day to a date.\n     */\n    protected function addDay(string $date): string\n    {\n        [$year, $month, $day] = $this->splitDate($date);\n        $day++;\n\n        // Day longer than month?\n        $months = $this->calendar->months();\n        $monthKey = max($month - 1, 0);\n        // If we're showing a reminder from the parent calendar, but the month doesn't exist in this calendar,\n        // we need to do this dirty hack where we fake the previous month as being the last month of the previous year\n        if (! isset($months[$monthKey])) {\n            $monthKey = count($months) - 1;\n            // $year;\n            $day = 999999; // Force it to the last day of the previous month so that it can be incremented by one\n        }\n        $currentMonth = $months[$monthKey];\n        // $previousMonth = $month > 1 ? $months[$month-1] : last($months);\n        if ($day > $currentMonth['length']) {\n            $day = 1;\n            $month++;\n        }\n\n        // Month longer than max year?\n        if ($month > count($months)) {\n            $month = 1;\n            $year++;\n        }\n\n        return \"{$year}-{$month}-{$day}\";\n    }\n\n    protected function subMonth(int $year, int $month): array\n    {\n        $months = $this->calendar->months();\n        $month--;\n\n        if ($month <= 0) {\n            $month = count($months);\n            $year--;\n        }\n\n        return [$year, $month];\n    }\n\n    /**\n     * Get the current year\n     */\n    protected function getYear(?int $add = 0): int\n    {\n        if (! $this->calendar->hasYearZero() && $this->year == 0) {\n            return intval($this->year + 1 + $add);\n        }\n\n        // We need intval for people asking for a number that is > 32bit converting to floats\n        return intval((int) $this->year + $add);\n    }\n\n    /**\n     * Get the current month\n     */\n    protected function getMonth(?int $add = 0): int\n    {\n        return intval($this->month + $add);\n    }\n\n    protected function setYear(int $year): self\n    {\n        $this->year = $year;\n\n        return $this;\n    }\n\n    protected function setMonth(int $month): self\n    {\n        $this->month = $month;\n\n        return $this;\n    }\n\n    /**\n     * Split the date into segments. Handle negative years\n     */\n    protected function splitDate(string $date): array\n    {\n        $segments = explode('-', mb_ltrim($date, '-'));\n        if (Str::startsWith($date, '-')) {\n            $segments[0] = '-' . $segments[0];\n        }\n\n        return $segments;\n    }\n\n    public function isYearlyLayout(): bool\n    {\n        return $this->layout === 'year';\n    }\n\n    public function currentYear(): int\n    {\n        return (int) $this->year;\n    }\n\n    public function isNamedWeek(int $week): bool\n    {\n        return ! empty($this->weeks[$week]) && ! $this->isIntercalaryMonth();\n    }\n\n    public function namedWeek(int $week): string\n    {\n        return $this->weeks[$week] . '';\n    }\n\n    protected function buildFullmoons(): void\n    {\n        // dump('full moons go brr');\n        // Calculate the number of days since 0000-01-01\n        $totalDays = $this->daysToDate();\n\n        // We'll need this later to know how many full moons to add\n        $daysInAYear = 0;\n        foreach ($this->calendar->months() as $count => $month) {\n            $length = $month['length'];\n            $daysInAYear += $length;\n        }\n\n        $this->moonService\n            ->calendar($this->calendar)\n            ->build($totalDays, $daysInAYear);\n    }\n\n    /**\n     * Build the weather for the year\n     */\n    public function buildWeather(): void\n    {\n        $this->weatherService\n            ->calendar($this->calendar)\n            ->currentYear($this->currentYear())\n            ->build();\n    }\n\n    /**\n     * Get the total number of days since the beginning\n     *\n     * @return float|int|mixed\n     */\n    protected function daysToDate(bool $includeIntercalary = true)\n    {\n        return $this->daysService\n            ->calendar($this->calendar)\n            ->intercalary($includeIntercalary)\n            ->month($this->getMonth())\n            ->year($this->getYear())\n            ->daysToDate();\n    }\n\n    /**\n     * Prepare each of the calendar's seasons\n     */\n    protected function buildSeasons(): void\n    {\n        $this->seasonService\n            ->calendar($this->calendar)\n            ->build();\n    }\n\n    /**\n     * Prepare each of the calendar's yearly weeks\n     */\n    protected function buildWeeks(): void\n    {\n        foreach ($this->calendar->weeks() as $number => $week) {\n            if ($number <= 0) {\n                continue;\n            }\n            $this->weeks[$number] = $week;\n        }\n    }\n\n    /**\n     * Calculate the starting week number\n     */\n    protected function startingWeekNumber(): int\n    {\n        $months = $this->calendar->months();\n        $weekdays = $this->calendar->weekdays();\n        $daysInAYear = 0;\n        $weekNumber = 1;\n        $weekdaysCount = count($weekdays);\n\n        foreach ($months as $monthNumber => $monthData) {\n            // If we've reached the current month, break\n            if ($monthNumber == $this->getMonth() - 1) {\n                break;\n            }\n            if (Arr::get($monthData, 'type') == 'intercalary') {\n                continue;\n            }\n\n            // If we reset months on the week, we need\n            if ($this->calendar->reset === 'month') {\n                // dump('month ' . $monthNumber . ' resets. length: ' . $monthData['length'] . ' / ' . $weekdaysCount . ' + 1');\n                // dump('reset, adding ' . (ceil($monthData['length'] / $weekdaysCount)) . ' week');\n                $weekNumber += ceil($monthData['length'] / $weekdaysCount);\n            }\n            $daysInAYear += $monthData['length'];\n        }\n\n        // If we reset months on the week, we need\n        if ($this->calendar->reset === 'month') {\n            return $weekNumber;\n        }\n\n        // We have the total number of days from the previous months, so we can figure out when the current\n        // week starts\n        $weekNumber = floor($daysInAYear / $weekdaysCount) + 1;\n\n        return (int) $weekNumber;\n    }\n\n    /**\n     * Get the number of days since the beginning of the year. This is used to calculate the month start offset on\n     * calendars with first days resetting on the year.\n     */\n    protected function daysToDateForYear(): int\n    {\n        $offset = 0;\n\n        $daysInAYear = $days = $leapDays = 0;\n        foreach ($this->calendar->months() as $count => $month) {\n            if (Arr::get($month, 'type') == 'intercalary') {\n                continue;\n            }\n            $length = $month['length'];\n            $daysInAYear += $length;\n\n            // If the month has already passed, add it to the days for this year\n            if ($count < $this->getMonth() - 1) {\n                $days += $length;\n            }\n        }\n\n        return $days;\n    }\n\n    /**\n     * Checks if date is the start of an event\n     */\n    public function isEventStartDate(Reminder $reminder, string $date): bool\n    {\n        return isset($this->eventStart[$reminder->id]) && in_array($date, $this->eventStart[$reminder->id]);\n    }\n\n    /**\n     * Checks if date is the end of an event\n     */\n    public function isEventEndDate(Reminder $reminder, string $date): bool\n    {\n        return isset($this->eventEnd[$reminder->id]) && in_array($date, $this->eventEnd[$reminder->id]);\n    }\n\n    protected function recurringReminders(): void\n    {\n        // Add recurring events that span multiple days from the previous call\n        $newRemaining = [];\n        foreach ($this->remainingRecurring as $recurring) {\n            if ($recurring['remaining'] == 1) {\n                $this->eventEnd[$recurring['event']->id][] = $this->dayData['date'];\n            }\n            $this->dayData['events'][] = $recurring['event'];\n            if ($recurring['remaining'] > 1) {\n                $newRemaining[] = ['remaining' => $recurring['remaining'] - 1, 'event' => $recurring['event']];\n            }\n        }\n        $this->remainingRecurring = $newRemaining;\n    }\n\n    protected function addMoonReminders(int $day): void\n    {\n        // Add recurring events if the moon stuff fits\n        if (empty($this->dayData['moons'])) {\n            return;\n        }\n        foreach ($this->dayData['moons'] as $moon) {\n            $key = $moon['id'] . '_' . $moon['type'][0];\n            if (! isset($this->recurring[$key])) {\n                continue;\n            }\n            /** @var Reminder $event */\n            // dump('found events for ' . $key);\n            foreach ($this->recurring[$key] as $event) {\n                if (! $event->isPastDate($this->getYear(), $this->getMonth(), $day)) {\n                    continue;\n                }\n                $this->dayData['events'][] = $event;\n\n                if ($event->length > 1) {\n                    $this->eventStart[$event->id][] = $this->dayData['date'];\n                    $this->remainingRecurring[] = ['remaining' => $event->length - 1, 'event' => $event];\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Renderers/CharacterSheets/Blade.php",
    "content": "<?php\n\nnamespace App\\Renderers\\CharacterSheets;\n\nuse Exception;\nuse Illuminate\\Support\\Str;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\n\nclass Blade extends Renderer\n{\n    public function render(): string\n    {\n        $html = $this->campaignPlugin->version->content;\n        $html = str_replace(['&lt;', '&gt;', '&amp;&amp;'], ['<', '>', '&&'], $html);\n\n        // Get all the referenced attributes in the character sheet so that they are set to null if an entity\n        // doesn't have the attribute\n        $html = preg_replace_callback('`\\{\\{(.*?[^(\\!])\\}\\}`i', function ($matches) {\n            $attribute = mb_trim((string) $matches[1]);\n            // If it's a comment, we can safely ignore it\n            if (Str::startsWith($attribute, '--') && Str::endsWith($attribute, '--')) {\n                return '{{' . $attribute . '}}';\n            }\n            // Flag this as an attribute that is referenced\n            $name = Str::after($attribute, '$');\n            $this->templateAttributes[$name] = null;\n\n            return '{{ ' . $attribute . ' }}';\n        }, $html);\n\n        $html = preg_replace_callback('`\\{\\!\\!(.*?[^(\\!])\\!\\!\\}`i', function ($matches) {\n            $attribute = mb_trim((string) $matches[1]);\n            $name = Str::after($attribute, '$');\n            // Flag this as an attribute that is referenced\n            $this->templateAttributes[$name] = null;\n\n            return '{!! ' . $attribute . ' !!}';\n        }, $html);\n\n        // Blacklisted commands\n        $html = str_replace([\n            '@php', '@dd', '@inject', '@yield', '@section', '@session', '@env', '@once', '@push', '@csrf',\n            '@use',\n            '@include', '\\Illuminate\\\\',\n        ], [\n            '', '', '', '', '', '', '', '', '', '', '', '', '',\n        ], $html);\n\n        // Remove more blacklisted stuff than can go unnoticed\n        $html = preg_replace('`dd\\((.*?)\\)`i', '', $html);\n        $html = preg_replace('`config\\((.*?)\\)`i', '', $html);\n\n        // First loop to replace i18n with ()) in the texts\n        $regexp = '`\\@i18n(\\((?:[^)(]++|(?1))*\\))`i';\n        $html = preg_replace_callback($regexp, function ($matches) {\n            return '{{ trans' . $matches[1] . ' }}';\n        }, $html);\n\n        // Next loop on the easy non complicated i18n calls without ()\n        $regexp = '`\\@i18n\\((.*?)\\)`i';\n        $html = preg_replace_callback($regexp, function ($matches) {\n            return '{{ trans' . $matches[1] . ' }}';\n        }, $html);\n\n        $this->loadTranslations();\n\n        $html = \\Illuminate\\Support\\Facades\\Blade::compileString($html);\n\n        [$data, $ids, $checkboxes] = $this->prepareEntityData();\n\n        $html = preg_replace_callback('`\\@liveAttribute\\(\\'(.*?[^)])\\'\\)`i', function ($matches) use ($data, $ids, $checkboxes) {\n            $attr = mb_trim((string) $matches[1]);\n            if (! isset($data[$attr])) {\n                return $matches[0];\n            }\n            $value = $data[$attr];\n            if (in_array($attr, $checkboxes)) {\n                if ($data[$attr] === 'on' || $data[$attr] === '1') {\n                    $value = '<i class=\"fa-solid fa-check\" aria-hidden=\"true\" aria-label=\"checked\"></i>';\n                } else {\n                    $value = '<i class=\"fa-solid fa-times\" aria-hidden=\"true\" aria-label=\"unchecked\"></i>';\n                }\n            }\n\n            return '<span class=\"live-edit\" data-id=\"' . $ids[$attr] . '\">' . $value . '</span>';\n        }, $html);\n\n        $obLevel = ob_get_level();\n        ob_start() && extract($data, EXTR_SKIP);\n\n        $errors = null;\n\n        try {\n            eval('?' . '>' . $html);\n            $blade = ob_get_clean();\n\n            return $blade;\n        } catch (Exception $e) {\n            while (ob_get_level() > $obLevel) {\n                ob_end_clean();\n            }\n            $errors = $e->getMessage();\n            // throw $e;\n        } catch (\\Throwable $e) {\n            while (ob_get_level() > $obLevel) {\n                ob_end_clean();\n            }\n            $errors = $e->getMessage();\n\n            // throw new FatalThrowableError($e);\n        }\n\n        return '<div class=\"alert alert-danger\">\n            ' . __('attributes/templates.errors.marketplace.rendering') . (! empty($errors) ?\n                '<br /><br />' . __('attributes/templates.errors.marketplace.hint') . ': ' . $errors . ' (line ' . $e->getLine() . ')' : null) . '\n        </div>' . $this->debug($data);\n    }\n\n    /**\n     * Build a html list of all variables\n     *\n     * @throws ContainerExceptionInterface\n     * @throws NotFoundExceptionInterface\n     */\n    protected function debug(mixed $data): string\n    {\n        $html = '<div class=\"m-2 p-2 text-xs\">\n            <h4 class=\"mb-5\">Debug info - the following variables are available</h4>\n            ';\n\n        foreach ($data as $key => $val) {\n            if (! is_array($val) && ! is_object($val)) {\n                $html .= '<dtk>$' . $key . '</dtk> <code>' . (empty($val) ? null : e($val)) . '</code><br />';\n            } elseif (is_array($val)) {\n                $html .= '<dtk class=\"\">$' . $key . '</dtk>';\n                if (empty($val)) {\n                    $html .= '<code>NULL</code><br />';\n                } else {\n                    $html .= '<ul class=\"m-0\">';\n                    foreach ($val as $k => $v) {\n                        if (is_array($v)) {\n                            $html .= '<li><dtk>' . $k . '</dtk></li>';\n\n                            continue;\n                        }\n                        $html .= '<li><dtk>' . $k . '</dtk> <code>' . $v . '</code></li>';\n                    }\n                    $html .= '</ul>';\n                }\n            }\n        }\n\n        return $html . '</div>';\n    }\n}\n"
  },
  {
    "path": "app/Renderers/CharacterSheets/Custom.php",
    "content": "<?php\n\nnamespace App\\Renderers\\CharacterSheets;\n\nuse App\\Models\\Attribute;\nuse Illuminate\\Support\\Str;\n\nclass Custom extends Renderer\n{\n    public function render(): string\n    {\n        $this->entityAttributes = $this->entity->allAttributes;\n        $html = preg_replace_callback('`\\{(.*?)\\}`i', function ($matches) {\n            $name = (string) $matches[1];\n\n            return $this->attribute($name);\n        }, $this->campaignPlugin->version->content);\n\n        // Replace < and > in logical blocks\n        // $html = str_replace(['&lt;', '&gt;'], ['<', '>'], $html);\n\n        // dump($html);\n        // return $html;\n\n        // If-Else condition\n\n        $html = preg_replace_callback('`@if\\((.*?)\\)(.*?)@endif`si', function ($matches) {\n            return $this->ifBlock($matches);\n        }, $html);\n\n        $html = preg_replace_callback('`@if\\((.*?)\\)(.*?)@else(.*?)@endif`si', function ($matches) {\n            return $this->ifElseBlock($matches);\n        }, $html);\n\n        $html = preg_replace_callback('`@empty\\((.*?)\\)(.*?)@endempty`si', function ($matches) {\n            return (string) $this->emptyBlock($matches);\n        }, $html);\n        $html = preg_replace_callback('`@notempty\\((.*?)\\)(.*?)@endnotempty`si', function ($matches) {\n            return (string) ! $this->emptyBlock($matches);\n        }, $html);\n\n        return $html;\n    }\n\n    protected function attribute(string $name): string\n    {\n        /** @var Attribute|null $attr */\n        $attr = $this->entityAttributes->where('name', $name)->first();\n        if (! empty($attr)) {\n            if ($attr->isText()) {\n                return nl2br($attr->mappedValue());\n            }\n\n            return $attr->mappedValue();\n        }\n\n        return '<i class=\"missing-attribute\">' . $name . '</i>';\n    }\n\n    /**\n     * If Else block\n     */\n    protected function ifElseBlock(array $matches)\n    {\n        // Test on a missing attribute always returns false\n        $trimmed = mb_trim($matches[1]);\n        if (Str::contains($trimmed, '<i class=\"missing-attribute\">')) {\n            return $matches[3];\n        }\n\n        // Strip tags to remove html brs on multilines\n        $condition = strip_tags(mb_trim($matches[1]));\n        if (Str::contains($condition, ['=', '>', '<'])) {\n            if ($this->evaluateCondition($condition)) {\n                return $matches[2];\n            }\n\n            return null;\n        }\n        if (! empty($condition)) {\n            return $matches[2];\n        } else {\n            return $matches[3];\n        }\n    }\n\n    /**\n     * If block\n     *\n     * @return mixed|null\n     */\n    protected function ifBlock(array $matches)\n    {\n        // If there is an else in the block, let the if-else block handle it later\n        if (Str::contains($matches[2], '@else')) {\n            return $matches[0];\n        }\n        // Test on a missing attribute always returns false\n        $trimmed = mb_trim($matches[1]);\n        if (Str::contains($trimmed, '<i class=\"missing-attribute\">')) {\n            return null;\n        }\n\n        // Strip tags to remove html brs on multilines\n        $condition = strip_tags(mb_trim($matches[1]));\n        if (Str::contains($condition, ['=', '>', '<', '&lt;', '&gt;'])) {\n            if ($this->evaluateCondition($condition)) {\n                return $matches[2];\n            }\n\n            return null;\n        }\n        if (! empty($condition)) {\n            return $matches[2];\n        }\n\n        return null;\n    }\n\n    /**\n     * Evaluate a condition\n     */\n    protected function evaluateCondition(string $condition): bool\n    {\n        // >=\n        if (Str::contains($condition, '&gt;=')) {\n            $segments = explode('&gt;=', $condition);\n\n            return (int) mb_trim($segments[0]) >= (int) mb_trim($segments[1]);\n        } elseif (Str::contains($condition, '&lt;=')) {\n            $segments = explode('&lt;=', $condition);\n\n            return (int) mb_trim($segments[0]) <= (int) mb_trim($segments[1]);\n        } elseif (Str::contains($condition, '&gt;')) {\n            $segments = explode('&gt;', $condition);\n\n            return (int) mb_trim($segments[0]) > (int) mb_trim($segments[1]);\n        } elseif (Str::contains($condition, '&lt;')) {\n            $segments = explode('&lt;', $condition);\n\n            return (int) mb_trim($segments[0]) < (int) mb_trim($segments[1]);\n        } elseif (Str::contains($condition, '=')) {\n            $segments = explode('=', $condition);\n\n            return mb_trim($segments[0]) == mb_trim($segments[1]);\n        }\n\n        return false;\n    }\n\n    protected function emptyBlock(array $matches)\n    {\n        $condition = mb_trim($matches[1]);\n        if (Str::contains($condition, '<i class=\"missing\">')) {\n            return false;\n        }\n\n        return ! (empty($condition));\n    }\n}\n"
  },
  {
    "path": "app/Renderers/CharacterSheets/Renderer.php",
    "content": "<?php\n\nnamespace App\\Renderers\\CharacterSheets;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Mentions;\nuse App\\Models\\Attribute;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\Character;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\Factory;\n\nabstract class Renderer\n{\n    use CampaignAware;\n    use EntityAware;\n\n    protected CampaignPlugin $campaignPlugin;\n\n    /** @var Collection|Attribute[] */\n    protected $entityAttributes;\n\n    /** A list of all the attributes being referenced in the character sheet */\n    protected array $templateAttributes = [];\n\n    public function plugin(CampaignPlugin $campaignPlugin): self\n    {\n        $this->campaignPlugin = $campaignPlugin;\n\n        return $this;\n    }\n\n    /**\n     * Add the plugin's translations to memory\n     */\n    protected function loadTranslations(): void\n    {\n        // Always add the user's locale + en as a fallback\n        $userLocale = app()->getLocale();\n        $locales = [$userLocale, 'en'];\n\n        foreach ($this->campaignPlugin->version->getTranslationsAttribute() as $translation) {\n            if (! in_array($translation['locale'], $locales)) {\n                continue;\n            }\n            $lines['*.' . $translation['base']] = $translation['translation'];\n\n            app('translator')->addLines($lines, $userLocale);\n        }\n    }\n\n    /**\n     * Prepare all the attributes of the entity to be accessible in blade\n     */\n    protected function prepareEntityData(): array\n    {\n        $data = [];\n        $ids = [];\n        $checkboxes = [];\n        $this->entityAttributes = $this->entity->allAttributes;\n        $allAttributes = [];\n        foreach ($this->entityAttributes as $attr) {\n            $name = $attr->exposedName(false);\n            $data[$name] = $attr->mappedValue();\n            $ids[$name] = $attr->id;\n            if ($attr->isText()) {\n                $data[$name] = nl2br($data[$name]);\n            } elseif ($attr->isCheckbox()) {\n                $checkboxes[] = $name;\n            }\n            // dump('mapping ' . $name . ' to ' . $attr->mappedValue());\n\n            // Clean up the name for ranged values\n            $allAttributes[$name] = $data[$name];\n            unset($this->templateAttributes[$name]);\n        }\n\n        // We need this for some blade directives like foreach\n        $data['__env'] = app(Factory::class);\n        $data['attributes'] = $allAttributes;\n        $data['_abilities'] = $this->abilities();\n\n        // Share some attributes to plugin developers\n        $data['_locale'] = app()->getLocale();\n        $data['_entity_name'] = $this->entity->name;\n        $data['_entity_type'] = $this->entity->type;\n        $data['_entity_type_name'] = $this->entity->entityType->code;\n\n        if ($this->entity->isCharacter()) {\n            /** @var Character $character */\n            $character = $this->entity->child;\n            $data['_character_title'] = $character->title;\n            $data['_character_gender'] = $character->sex;\n            $data['_character_age'] = $character->age;\n            $data['_character_pronouns'] = $character->pronouns;\n\n            $appearances = $character->appearances;\n            $data['_character_appearances'] = $appearances->pluck('entry', 'name')->toArray();\n            $traits = $character->personality;\n            $data['_character_traits'] = $traits->pluck('entry', 'name')->toArray();\n        }\n\n        $tags = [];\n        foreach ($this->entity->tags as $tag) {\n            $tags[$tag->slug] = $tag->name;\n        }\n        $data['_tags'] = $tags;\n\n        $data['_superboosted'] = $this->campaign->superboosted();\n        $data['_premium'] = $this->campaign->premium();\n\n        // Add any missing attributes to be accessible in blade\n        foreach ($this->templateAttributes as $name => $val) {\n            if (isset($data[$name])) {\n                continue;\n            }\n            $data[$name] = $val;\n        }\n\n        if (! isset($data['openLI'])) {\n            $data['openLI'] = '<li>';\n        }\n        if (! isset($data['closeLI'])) {\n            $data['closeLI'] = '</li>';\n        }\n        if (! isset($data['openOL'])) {\n            $data['openOL'] = '<ol>';\n        }\n        if (! isset($data['closeOL'])) {\n            $data['closeOL'] = '</ol>';\n        }\n        if (! isset($data['openUL'])) {\n            $data['openUL'] = '<ul>';\n        }\n        if (! isset($data['closeUL'])) {\n            $data['closeUL'] = '</ul>';\n        }\n\n        return [$data, $ids, $checkboxes];\n    }\n\n    /**\n     * Load abilities of the entity and make them available to blade\n     */\n    protected function abilities(): array\n    {\n        $abilities = $this->entity\n            ->abilities()\n            ->has('ability')\n            ->has('ability.entity')\n            ->with(['ability', 'ability.entity', 'ability.entity.parent', 'ability.entity.image', 'ability.entity.tags'])\n            ->get();\n        $data = [];\n        /** @var EntityAbility $abi */\n        foreach ($abilities as $abi) {\n            $tags = [];\n            foreach ($abi->ability->entity->tags as $tag) {\n                $tags[] = $tag->slug;\n            }\n\n            $parent = null;\n            if (! empty($abi->ability->entity->parent)) {\n                $parent = [\n                    'name' => $abi->ability->entity->parent->name,\n                    'slug' => Str::slug($abi->ability->entity->parent->name),\n                ];\n            }\n\n            $ability = [\n                'id' => $abi->id,\n                'ability_id' => $abi->ability_id,\n                'name' => $abi->ability->name,\n                'slug' => Str::slug($abi->ability->name),\n                'type' => $abi->ability->type,\n                'entry' => $abi->ability->entity->parsedEntry(),\n                'charges' => $abi->ability->charges,\n                'note' => Mentions::mapAny($abi, 'note'),\n                'note_raw' => $abi->note,\n                'used_charges' => $abi->charges,\n                'thumb' => '<img src=\"' . Avatar::entity($abi->ability->entity)->child($abi->ability)->size(40)->thumbnail() . '\" class=\"ability-thumb\"></i>',\n                'link' => '<a href=\"' . $abi->ability->getLink() . '\" class=\"ability-link\">' . $abi->ability->name . '</a>',\n                'tags' => $tags,\n                'parent' => $parent,\n            ];\n            $data[] = $ability;\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/DatagridRenderer.php",
    "content": "<?php\n\nnamespace App\\Renderers;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Module;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Entity;\nuse App\\Models\\Journal;\nuse App\\Models\\Location;\nuse App\\Models\\MiscModel;\nuse App\\Services\\FilterService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse App\\View\\Components\\EntityLink;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Blade;\nuse Illuminate\\Support\\Str;\n\nclass DatagridRenderer\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use RequestAware;\n    use UserAware;\n\n    protected string $hidden = ' hidden lg:table-cell';\n\n    protected array $columns = [];\n\n    protected Bookmark $bookmark;\n\n    protected LengthAwarePaginator|Collection|array $data = [];\n\n    protected array $options = [];\n\n    protected Collection|LengthAwarePaginator|array $models;\n\n    protected ?FilterService $filterService = null;\n\n    protected ?string $nestedFilter = null;\n\n    protected bool $showAds;\n\n    public function __construct() {}\n\n    public function columns(array $columns): self\n    {\n        $this->columns = $columns;\n\n        return $this;\n    }\n\n    public function options(array $options): self\n    {\n        $this->options = $options;\n\n        return $this;\n    }\n\n    public function bookmark(Bookmark $bookmark): self\n    {\n        $this->bookmark = $bookmark;\n\n        return $this;\n    }\n\n    public function models(Collection|LengthAwarePaginator $models): self\n    {\n        $this->models = $models;\n\n        return $this;\n    }\n\n    public function service($service): self\n    {\n        $this->filterService = $service;\n\n        return $this;\n    }\n\n    /**\n     * @param  array  $columns\n     * @param  array  $data\n     * @param  array  $options\n     */\n    public function render(\n        FilterService $filterService,\n        $columns = [],\n        $data = [],\n        $options = []\n    ): self {\n        $this->columns = $columns;\n        $this->models = $data;\n        $this->options = $options;\n\n        $this->filterService = $filterService;\n\n        return $this;\n    }\n\n    public function __toString(): string\n    {\n        $html = '<table id=\"' . $this->getOption('baseRoute') . '\" class=\"table table-striped table-entities mb-0' .\n            ($this->nestedFilter ? ' table-nested' : null) . '\">';\n        $html .= '<thead><tr>';\n        $html .= $this->renderColumns();\n        $html .= '</tr></thead>';\n        $html .= '<tbody>';\n        $html .= $this->renderRows();\n        $html .= '</tbody></table>';\n\n        return $html;\n    }\n\n    /**\n     * Render the header columns\n     */\n    private function renderColumns()\n    {\n        $html = '';\n        // Checkbox for delete\n        if (auth()->check()) {\n            $html .= '<th class=\"col-checkbox\"><input type=\"checkbox\" name=\"all\" value=\"1\" id=\"datagrid-select-all\" /></th>';\n        }\n\n        foreach ($this->columns as $column) {\n            $html .= $this->renderHeadColumn($column);\n        }\n        // Admin column\n\n        $html .= '<th class=\"text-right col-actions\">' . $this->renderFilters() . '</th>';\n\n        return $html;\n    }\n\n    /**\n     * @param  string|array  $column\n     */\n    private function renderHeadColumn($column)\n    {\n        // Easy mode: A string. We want to return it directly since it's so easy.\n        if (is_string($column)) {\n            if ($column == 'name') {\n                return \"<th class='dg-name'>\" . $this->route($column) . \"</th>\\n\";\n            } else {\n                return \"<th class='dg-\" . $column . ' ' . $this->hidden . \"'>\" . $this->route($column) . \"</th>\\n\";\n            }\n        }\n\n        // Check visibility\n        if (isset($column['visible']) && $column['visible'] == false) {\n            return null;\n        }\n\n        $html = null;\n        $class = null;\n\n        if (! empty($column['type'])) {\n            // We have a type so we know what to do\n            $type = $column['type'];\n            $class = $column['type'];\n            if ($type == 'avatar') {\n                $class = (! empty($column['parent']) ? $this->hidden : $class) . ' w-14';\n            } elseif ($type == 'location') {\n                $class .= ' ' . $this->hidden;\n                $label = Arr::get($column, 'label', Module::singular(config('entities.ids.location'), __('entities.location')));\n                $html = $this->route('location.name', $label);\n            } elseif ($type == 'entityLocations') {\n                $class .= ' ' . $this->hidden;\n                $label = Arr::get($column, 'label', Module::plural(config('entities.ids.location'), __('entities.locations')));\n                $html = $this->route('locations', $label);\n            } elseif ($type == 'organisation') {\n                $class .= ' ' . $this->hidden;\n                $label = Arr::get($column, 'label', Module::singular(config('entities.ids.organisation'), __('entities.organisation')));\n                $html = $this->route('organisation.name', $label);\n            } elseif ($type == 'character') {\n                $class .= ' ' . $this->hidden;\n                $label = Arr::get($column, 'label', Module::singular(config('entities.ids.character'), __('entities.character')));\n                $html = $this->route(\n                    'character.name',\n                    $label\n                );\n            } elseif ($type == 'entity') {\n                $class .= ' ' . $this->hidden;\n                $html = $this->route(\n                    'entity.name',\n                    ! empty($column['label']) ? $column['label'] : __('fields.entry.label')\n                );\n            } elseif ($type == 'parent') {\n                $class .= ' ' . $this->hidden;\n                if (! empty($this->nestedFilter)) {\n                    return null;\n                }\n                $html = $this->route(\n                    Arr::get($column, 'field', 'parent.name'),\n                    ! empty($column['label']) ? $column['label'] : __('crud.fields.parent')\n                );\n            } elseif ($type == 'is_private') {\n                // Viewers can't see private\n                if (! isset($this->user) || ! $this->user->isAdmin()) {\n                    return null;\n                }\n                $html = $this->route(\n                    'is_private',\n                    '<i class=\"fa-regular fa-lock\" data-title=\"' . __('crud.fields.is_private') . '\" aria-hidden=\"true\" data-toggle=\"tooltip\"></i> <span class=\"sr-only\">' . __('crud.fields.is_private') . '</span>'\n                );\n                $class = 'w-14 text-center';\n            } elseif ($type == 'reminder') {\n                $class .= ' ' . $this->hidden;\n                $html = $this->route('calendar_date', __('crud.fields.calendar_date'));\n            } else {\n                // No idea what is expected\n                $html = null;\n            }\n        } else {\n            // Now the 'fun' starts\n            $class .= Arr::get($column, 'class', ' ' . $this->hidden);\n            if (! empty($column['label'])) {\n                $label = $column['label'];\n\n                // We have a label, that's nice. If we have a custom render, we probably can't orderBy\n                if (! empty($column['disableSort'])) {\n                    $html = $label;\n                } else {\n                    // So we have a label and no renderer, so we can order by. We just need a field\n                    $html = $this->route($column['field'], $label);\n                }\n                if (Str::contains($label, '<i')) {\n                    $type = $column['field'] ?? '';\n                } else {\n                    $type = Str::slug($label);\n                }\n            } else {\n                // No label? Sure, we can do this\n                $html = null;\n                $type = 'unknown';\n            }\n        }\n\n        return \"<th class='dg-\" . $type . ' ' . ($class ?? null) . \"'>{$html}</th>\\n\";\n    }\n\n    private function route(?string $field = null, ?string $label = null): string\n    {\n        // Field is label\n        if (empty($label)) {\n            $label = $this->trans($field);\n        }\n\n        // If we are in public mode (bots) don't make this links\n        if (! auth()->check()) {\n            return $label;\n        }\n\n        $routeOptions = [\n            'campaign' => $this->campaign,\n            'order' => $field,\n            'page' => $this->request->get('page'),\n        ];\n\n        if (isset($this->bookmark)) {\n            $routeOptions['bookmark'] = $this->bookmark;\n        }\n\n        if ($this->request->get('_from', false) == 'bookmark') {\n            $routeOptions['_from'] = 'bookmark';\n        }\n\n        if (! empty($this->nestedFilter)) {\n            $val = $this->request->get($this->nestedFilter, null);\n            if (! empty($val)) {\n                $routeOptions[$this->nestedFilter] = $val;\n            }\n        }\n\n        // Order by\n        $order = $this->filterService->order();\n        $orderImg = ' <i class=\"fa-regular fa-sort\" aria-hidden=\"true\"></i>';\n        if (! empty($order) && isset($order[$field])) {\n            $direction = 'down';\n            if ($order[$field] != 'DESC') {\n                $routeOptions['desc'] = true;\n                $direction = 'up';\n            }\n            $orderImg = ' <i class=\"fa-regular fa-sort-' . $direction . '\" aria-hidden=\"true\"></i>';\n        }\n\n        return \"<a href='\" .\n            url()->route($this->getOption('route'), $routeOptions) . \"' class='text-link'>\" . $label . $orderImg . '</a>';\n    }\n\n    private function renderRows()\n    {\n        $html = '';\n        $rows = 0;\n        foreach ($this->models as $model) {\n            $rows++;\n            $html .= $this->renderRow($model);\n\n            if ($rows % 7 === 0) {\n                $html .= $this->renderAdRow($rows);\n            }\n        }\n\n        // Render an empty row\n        if ($rows == 0) {\n            $html .= '<tr><td colspan=\"' . (count($this->columns) + 2) . '\"><i>'\n                . __('crud.datagrid.empty') . '</i></td>';\n        }\n\n        return $html;\n    }\n\n    private function renderRow(Model $model): string\n    {\n        /** @var MiscModel|Entity|Location $model */\n        $useEntity = $this->getOption('disableEntity') !== true;\n        // Should never happen...\n        if ($useEntity && empty($model->entity)) {\n            return '';\n        }\n\n        $html = '<tr data-id=\"' . $model->id . '\" '\n            . (! empty($model->type) ? 'data-type=\"' . Str::slug($model->type) . '\" ' : null)\n            . ($useEntity ? 'data-entity-id=\"' . $model->entity->id . '\" data-entity-type=\"' . $model->entity->entityType->code . '\"' : null);\n        /*if (!empty($this->options['row']) && !empty($this->options['row']['data'])) {\n            foreach ($this->options['row']['data'] as $name => $data) {\n                $html .= ' ' . $name . '=\"' . $data($model) . '\"';\n            }\n        }*/\n        if (! empty($this->nestedFilter) && method_exists($model, 'children')) {\n            $html .= ' data-children=\"' . $model->children_count . '\"';\n        }\n        $html .= '>';\n\n        // Bulk\n        if (auth()->check()) {\n            $html .= '<td class=\"w-8\"><input type=\"checkbox\" name=\"model[]\" value=\"' . $model->id . '\" /></td>';\n        }\n\n        foreach ($this->columns as $column) {\n            $html .= $this->renderColumn($column, $model);\n        }\n        $html .= $model instanceof MiscModel ? $this->renderEntityActionRow($model) : $this->renderActionRow($model);\n\n        return $html . '</tr>';\n    }\n\n    protected function renderAdRow(int $rows): string\n    {\n        if (! $this->showAds()) {\n            return '';\n        }\n\n        $colspan = count($this->columns) + (auth()->check() ? 2 : 0);\n\n        return '<tr><td class=\"adrow\" colspan=\"' . $colspan . '\">' .\n            Blade::render('ads.table', ['campaign' => $this->campaign, 'rows' => $rows]) .\n        '</td></tr>';\n    }\n\n    protected function showAds(): bool\n    {\n        if (isset($this->showAds)) {\n            return $this->showAds;\n        }\n        if (! config('ads.nitro.enabled')) {\n            return $this->showAds = false;\n        }\n        if ($this->request->has('_showads')) {\n            return $this->showAds = true;\n        }\n        if (isset($this->user)) {\n            // Subscribed users don't have ads\n            if ($this->user->isSubscriber()) {\n                return $this->showAds = false;\n            }\n            // User has been created less than 24 hours ago\n            if ($this->user->created_at->diffInHours(Carbon::now()) < 24) {\n                return $this->showAds = false;\n            }\n        }\n\n        // Premium campaigns don't have ads displayed to their members\n        return $this->showAds = ! empty($this->campaign) && ! $this->campaign->boosted();\n    }\n\n    /**\n     * @param  MiscModel|Journal|Location  $model\n     * @return string|null\n     */\n    private function renderColumn(string|array $column, $model)\n    {\n        $class = null;\n        $content = null;\n\n        // Easy mode: String. Just return it, no need to make it complicated.\n        if (is_string($column)) {\n            // Just for name, a link to the view\n            if ($column == 'name') {\n                if (isset($this->bookmark)) {\n                    // Need to embed the _from=bookmark&bookmark=<id> in the url somehow\n                    $content = $this->entityLink($model);\n                } else {\n                    $content = $this->entityLink($model);\n                }\n            } elseif ($column === 'type') {\n                $content = $model instanceof Entity ? $model->type : $model->entity->type;\n            } else {\n                // Handle boolean values (has, is)\n                if ($this->isBoolean($column)) {\n                    $content = $model->{$column} ? '<i class=\"fa-regular fa-check-circle\" aria-hidden=\"true\"></i>' : '';\n                } else {\n                    $content = ($model->{$column});\n                }\n                $class = $this->hidden;\n            }\n\n            return '<td class=\"truncated max-w-fit' . ($class ?? null) . '\">' . $content . '</td>';\n        }\n\n        // Check visibility\n        if (isset($column['visible']) && $column['visible'] == false) {\n            return null;\n        }\n\n        // Start with a pre-defined \"type\"\n        if (! empty($column['type'])) {\n            $type = $column['type'];\n            if ($type == 'avatar') {\n                $who = ! empty($column['parent']) ? $model->{$column['parent']} : $model;\n                if ($who instanceof Entity) {\n                    Avatar::entity($who)->child($who->child);\n                    $who = $who->child;\n                } else {\n                    Avatar::entity($who->entity)->child($who);\n                }\n                $class = ! empty($column['parent']) ? $this->hidden : $class;\n                if (! empty($who)) {\n                    $bookmarkId = isset($this->bookmark) ? $this->bookmark->id : null;\n                    $route = $who->entity\n                        ? $who->entity->url('show', $bookmarkId ? ['bookmark' => $bookmarkId] : [])\n                        : $who->getLink();\n                    $content = '<a class=\"entity-image cover-background w-10 h-10\" style=\"background-image: url(\\'' . Avatar::size(40)->fallback()->thumbnail() .\n                        '\\');\" title=\"' . e($who->name) . '\" href=\"' . $route . '\"></a>';\n                }\n            } elseif ($type == 'location') {\n                $class = $this->hidden;\n                // @phpstan-ignore-next-line\n                if (method_exists($model, 'location') && $model->location && $model->location->entity) {\n                    $content = $this->entityLink($model->location->entity);\n                }\n            } elseif ($type == 'entityLocations') {\n                $class = $this->hidden;\n                $locations = [];\n                if ($model->entity->locations->isNotEmpty()) {\n                    foreach ($model->entity->locations as $location) {\n                        $locations[] = $this->entityLink($location->entity);\n                    }\n                }\n                $content = implode(', ', $locations);\n            } elseif ($type == 'character') {\n                $class = $this->hidden;\n                // @phpstan-ignore-next-line\n                if (method_exists($model, 'character') && $model->character && $model->character->entity) {\n                    $content = $this->entityLink($model->character->entity);\n                }\n            } elseif ($type == 'organisation') {\n                $class = $this->hidden;\n                // @phpstan-ignore-next-line\n                if (method_exists($model, 'organisation') && $model->organisation && $model->organisation->entity) {\n                    $content = $this->entityLink($model->organisation->entity);\n                }\n            } elseif ($type == 'entity') {\n                $class = $this->hidden;\n                if ($model->entity) {\n                    $content = $this->entityLink($model->entity);\n                }\n            } elseif ($type == 'parent') {\n                $class = $this->hidden;\n                if (! empty($this->nestedFilter)) {\n                    return null;\n                }\n                // @phpstan-ignore-next-line\n                if ($model->parent && $model->parent->entity) {\n                    $content = $this->entityLink($model->parent->entity);\n                }\n            } elseif ($type == 'is_private') {\n                // Viewer can't see private\n                if (! isset($this->user) || ! $this->user->isAdmin()) {\n                    return null;\n                }\n                $content = $model->is_private ?\n                    '<i class=\"fa-regular fa-lock\" data-title=\"' . __('crud.is_private') . '\" aria-hidden=\"true\" data-toggle=\"tooltip\"></i> <span class=\"sr-only\">' . __('crud.is_private') . '</span>' :\n                    null;\n                $class = ' text-center';\n            } elseif ($type == 'reminder') {\n                $class = $this->hidden . ' col-calendar-date';\n                /** @var Journal $model */\n                if ($model->entity->calendarDate && $model->entity->calendarDate->calendar && $model->entity->calendarDate->calendar->entity) {\n                    $reminder = $model->entity->calendarDate;\n                    $content = '<a href=\"' . route('entities.show', [$this->campaign, $reminder->calendar->entity, 'month' => $reminder->month, 'year' => $reminder->year]) . '\" class=\"text-link\">' . $reminder->readableDate() . '</a>';\n                }\n            } else {\n                // Exception\n                $content = 'ERR_UNKNOWN_TYPE';\n            }\n        } elseif (! empty($column['render'])) {\n            // If it's not a type, do we have a renderer?\n            $content = $column['render']($model, $column);\n            $class = Arr::get($column, 'class', $this->hidden);\n        } elseif (! empty($column['field'])) {\n            // A field was given? This could be when a field needs another label than anticipated.\n            $content = $model->{$column['field']};\n            $class = $this->hidden;\n        } else {\n            // I have no idea.\n            $content = 'ERR_UNKNOWN';\n        }\n\n        return '<td' . (! empty($class) ? ' class=\"' . $class . '\"' : null) . '>' . $content . '</td>';\n    }\n\n    /**\n     * @param  string  $option\n     * @return mixed|null\n     */\n    private function getOption($option)\n    {\n        if (! empty($this->options[$option])) {\n            return $this->options[$option];\n        }\n\n        return null;\n    }\n\n    /**\n     * @return string\n     */\n    private function trans(string $field = '')\n    {\n        $crudFields = ['name', 'type'];\n        if (in_array($field, $crudFields)) {\n            return __('crud.fields.' . $field);\n        }\n        $trans = $this->getOption('trans');\n        if (! empty($trans)) {\n            return __(mb_rtrim($trans, '.') . '.' . $field);\n        }\n\n        // No idea what to do!\n        return $field;\n    }\n\n    private function renderEntityActionRow(MiscModel $model): string\n    {\n        $content = '';\n        $actions = $model->datagridActions($this->campaign);\n        if (! empty($actions)) {\n            $content = Blade::render('cruds.datagrids._row-actions', ['campaign' => $this->campaign, 'model' => $model, 'actions' => $actions]);\n        }\n\n        return '<td class=\"text-center table-actions w-14\">' . $content . '</td>';\n    }\n\n    private function renderActionRow($model): string\n    {\n        $actions = '';\n        if (isset($this->user) && $this->user->can('update', $model)) {\n            $actions .= ' <a href=\"'\n                . route($this->getOption('baseRoute') . '.edit', [$this->campaign, $model])\n                . '\" title=\"' . __('crud.edit') . '\" class=\"text-link\">\n                <i class=\"fa-regular fa-edit\" aria-hidden=\"true\"></i>\n            </a>';\n        }\n\n        return '<td class=\"text-center table-actions\">' . $actions . '</td>';\n    }\n\n    /**\n     * Determin if a column is a boolean column\n     *\n     * @return bool\n     */\n    private function isBoolean(string $column)\n    {\n        return Str::startsWith($column, ['is_', 'has_']);\n    }\n\n    /**\n     * Render the filter\n     *\n     * @return string\n     */\n    protected function renderFilters()\n    {\n        return '';\n    }\n\n    /**\n     * Tell the rendered that this is a nested view\n     */\n    public function nested(string $key = 'parent_id'): self\n    {\n        $this->nestedFilter = $key;\n\n        return $this;\n    }\n\n    protected function entityLink(Model $model): string\n    {\n        $bookmarkId = isset($this->bookmark) ? $this->bookmark->id : null;\n        if ($model instanceof Entity) {\n            return Blade::renderComponent(\n                new EntityLink($model, $this->campaign, bookmark: $bookmarkId)\n            );\n        } elseif ($model->entity) {// @phpstan-ignore-line\n            return Blade::renderComponent(\n                new EntityLink($model->entity, $this->campaign, bookmark: $bookmarkId)\n            );\n        }\n\n        // @phpstan-ignore-next-line\n        return '<a href=\"' . $model->getLink() . '\" class=\"text-link font-medium\">' . $model->name . '</a>';\n    }\n}\n"
  },
  {
    "path": "app/Renderers/DatagridRenderer2.php",
    "content": "<?php\n\nnamespace App\\Renderers;\n\nuse App\\Models\\Entity;\nuse App\\Renderers\\Layouts\\Columns\\Action;\nuse App\\Renderers\\Layouts\\Columns\\Checkbox;\nuse App\\Renderers\\Layouts\\Columns\\Column;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Header;\nuse App\\Renderers\\Layouts\\Layout;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\View\\Components\\EntityLink;\nuse Closure;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Routing\\Route;\nuse Illuminate\\Support\\Facades\\Blade;\nuse Illuminate\\Support\\Str;\nuse Psr\\Container\\ContainerExceptionInterface;\nuse Psr\\Container\\NotFoundExceptionInterface;\nuse UnitEnum;\n\nclass DatagridRenderer2\n{\n    use CampaignAware;\n    use EntityTypeAware;\n\n    protected Layout $layout;\n\n    protected array $deleteForms = [];\n\n    /** Action params for the edit/delete */\n    protected array $actionParams = [];\n\n    /** If permissions are checked or not. If false, assume we are admin. */\n    protected bool $permissions = true;\n\n    protected $routeName = null;\n\n    protected array $routeOptions = [];\n\n    protected array $bulks;\n\n    protected Closure $highlight;\n\n    public function layout(string|Layout $layout): self\n    {\n        if (is_string($layout)) {\n            $layout = (new $layout)->campaign($this->campaign);\n        }\n        $this->layout = $layout;\n\n        return $this;\n    }\n\n    public function route(string $route, ?array $options = null): self\n    {\n        $this->routeName = $route;\n        $this->routeOptions = $options;\n\n        return $this;\n    }\n\n    public function actionParams(?array $options = null): self\n    {\n        $this->actionParams = $options;\n\n        return $this;\n    }\n\n    /**\n     * Set which element needs to be highlighted\n     */\n    public function highlight(Closure $highlight): self\n    {\n        $this->highlight = $highlight;\n\n        return $this;\n    }\n\n    public function getActionParams(): array\n    {\n        return $this->actionParams;\n    }\n\n    /**\n     * @return Header[]\n     */\n    public function headers(): array\n    {\n        $headers = [];\n\n        $header = null;\n        if ($this->hasBulks()) {\n            $headers[] = (new Header('bulk'))->campaign($this->campaign);\n        }\n\n        foreach ($this->layout->visibleColumns() as $key => $col) {\n            $headers[] = (new Header($col))->campaign($this->campaign);\n        }\n\n        if ($this->hasActions()) {\n            $headers[] = (new Header([]))->campaign($this->campaign);\n        }\n\n        return $headers;\n    }\n\n    /**\n     * @return array|Column[]\n     */\n    public function columns(Model $model): array\n    {\n        $columns = [];\n\n        if ($this->hasBulks()) {\n            $columns[] = (new Checkbox($model, []))->campaign($this->campaign);\n        }\n        foreach ($this->layout->visibleColumns() as $key => $col) {\n            $columns[] = (new Standard($model, $col))->campaign($this->campaign);\n        }\n        if ($this->hasActions() && auth()->check()) {\n            $action = new Action($model, $this->layout->actions(), $this->permissions);\n            $action->params($this->actionParams);\n            $action->campaign($this->campaign);\n            if ($action->hasDelete()) {\n                $this->deleteForms[] = $model;\n            }\n            $columns[] = $action;\n        }\n\n        return $columns;\n    }\n\n    public function hasBulks(): bool\n    {\n        return ! empty($this->layout->bulks()) && auth()->check() && auth()->user()->isAdmin();\n    }\n\n    public function bulks(): array\n    {\n        if (isset($this->bulks)) {\n            return $this->bulks;\n        }\n\n        $this->bulks = [];\n        $bulks = $this->layout->bulks();\n        foreach ($bulks as $bulk) {\n            if (is_array($bulk)) {\n                if (empty($bulk['can'])) {\n                    $this->bulks[] = $bulk;\n\n                    continue;\n                }\n                $can = $bulk['can'];\n                // General campaign permission\n                if (Str::startsWith($can, 'campaign:')) {\n                    $action = Str::afterLast($can, 'campaign:');\n\n                    if (auth()->check() && auth()->user()->can($action, $this->campaign)) {\n                        $this->bulks[] = $bulk;\n                    }\n\n                    continue;\n                }\n                // More specific use cases?\n            } elseif ($bulk === Layout::ACTION_DELETE) {\n                if (auth()->check() && auth()->user()->isAdmin()) {\n                    $this->bulks[] = $bulk;\n                }\n            } elseif ($bulk === Layout::ACTION_EDIT) {\n                $this->bulks[] = $bulk;\n            }\n        }\n\n        return $this->bulks;\n    }\n\n    public function hasActions(): bool\n    {\n        return ! empty($this->layout->actions());\n    }\n\n    public function deleteForms(): array\n    {\n        return $this->deleteForms;\n    }\n\n    public function permissions(bool $permissions): self\n    {\n        $this->permissions = $permissions;\n\n        return $this;\n    }\n\n    /**\n     * @return string|null\n     */\n    public function routeName()\n    {\n        if (isset($this->routeName)) {\n            return $this->routeName;\n        }\n\n        /** @var Route $route */\n        $route = request()->route();\n\n        return $route->getName();\n    }\n\n    public function routeOptions(): array\n    {\n        return $this->routeOptions;\n    }\n\n    /**\n     * @throws ContainerExceptionInterface\n     * @throws NotFoundExceptionInterface\n     */\n    public function paginationFilters(): array\n    {\n        $options = $this->routeOptions;\n        foreach ($this->routeOptions as $k => $v) {\n            if (Str::endsWith($k, '_id')) {\n                continue;\n            } elseif ($k === 'all') {\n                continue;\n            }\n            unset($options[$k]);\n        }\n        if (request()->has('o')) {\n            $options['o'] = request()->get('o');\n        }\n        if (request()->has('k')) {\n            $options['k'] = request()->get('k');\n        }\n        if (request()->has('m')) {\n            $options['m'] = request()->get('m');\n        }\n\n        return $options;\n    }\n\n    /**\n     * Allow the ajax init to have custom ordering\n     *\n     * @throws ContainerExceptionInterface\n     * @throws NotFoundExceptionInterface\n     */\n    public function initOptions(array $config): array\n    {\n        if (request()->has('o')) {\n            $config['o'] = request()->get('o');\n        }\n        if (request()->has('k')) {\n            $config['k'] = request()->get('k');\n        }\n\n        return $config;\n    }\n\n    /**\n     * Highlight a row if it matches the highlight closure\n     */\n    public function isHighlighted(mixed $row): bool\n    {\n        if (! isset($this->highlight)) {\n            return false;\n        }\n\n        return $this->highlight->call($row);\n    }\n\n    /**\n     * Create a list of data-attributes from the row for the row\n     */\n    public function rowAttributes(mixed $row): string\n    {\n        $attributes = [];\n        foreach ($row->rowAttributes() as $attr => $val) {\n            if ($val instanceof UnitEnum) {\n                // @phpstan-ignore-next-line\n                $val = $val->value;\n            }\n            $attributes[] = 'data-' . $attr . '=\"' . $val . '\"';\n        }\n\n        return implode(' ', $attributes);\n    }\n\n    protected function entityLink(Model $model): string\n    {\n        if ($model instanceof Entity) {\n            return Blade::renderComponent(\n                new EntityLink($model, $this->campaign)\n            );\n        }\n\n        // @phpstan-ignore-next-line\n        return '<a href=\"' . $model->getLink() . '\" class=\"text-link\">' . $model->name . '</a>';\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Ability/Ability.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Ability;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Ability extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.ability'), __('entities.ability')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Ability $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'ability' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('parent_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Ability/Entity.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Ability;\n\nuse App\\Models\\EntityAbility;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Entity extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        return [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => __('crud.fields.name'),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type_id',\n                'label' => __('crud.fields.category'),\n                'render' => function (EntityAbility $model) {\n                    return $model->entity->entityType->name();\n                },\n            ],\n            'visibility' => [\n                'label' => __('crud.fields.visibility'),\n                'render' => Standard::VISIBILITY,\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n                'with' => 'entity',\n            ],\n        ];\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            'abilities.entities.actions.delete',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Calendar/Reminder.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Calendar;\n\nuse App\\Models\\Post;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Reminder extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'entity' => [\n                'key' => 'entity.name',\n                'label' => __('fields.entry.label'),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type_id',\n                'label' => __('campaigns/categories.tab'),\n                'render' => function ($model) {\n                    return $model->remindable instanceof Post\n                        ? __('entities.post') .\n                                ' (' .\n                                $model->remindable->entity->entityType->name() .\n                                ')'\n                        : $model->remindable->entityType->name();\n                },\n            ],\n            'date' => [\n                'key' => 'date',\n                'label' => __('events.fields.date'),\n                'render' => 'readableDate()',\n            ],\n            'length' => [\n                'key' => 'length',\n                'label' => __('calendars.fields.length'),\n                'render' => 'readableLength()',\n            ],\n            'comment' => [\n                'label' => '',\n                'render' => function ($model) {\n                    if (empty($model->comment)) {\n                        return '';\n                    }\n\n                    return '<i class=\"fa-regular fa-comment\" data-title=\"' .\n                        $model->comment .\n                        '\" data-toggle=\"tooltip\"></i>';\n                },\n            ],\n            'recurring' => [\n                'label' => '',\n                'render' => function ($model) {\n                    if (empty($model->is_recurring)) {\n                        return '';\n                    }\n\n                    return '<i class=\"fa-regular fa-refresh\" data-title=\"' .\n                        __('calendars.fields.is_recurring') .\n                        '\" data-toggle=\"tooltip\"></i>';\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [self::ACTION_EDIT_DIALOG, self::ACTION_DELETE];\n    }\n\n    public function bulks(): array\n    {\n        return [self::ACTION_EDIT, self::ACTION_DELETE];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Campaign/CampaignImport.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Campaign;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass CampaignImport extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'user_id' => [\n                'key' => 'user.name',\n                'label' => __('campaigns.members.fields.name'),\n                'render' => function (\\App\\Models\\CampaignImport $model) {\n                    if (! $model->user_id) {\n                        return '';\n                    }\n                    $html = '<a class=\"block break-all truncate text-link\" href=\"' . route('users.profile', [$model->user]) . '\" target=\"_blank\">' . $model->user->name . '</a>';\n\n                    return $html;\n                },\n            ],\n            'updated_at' => [\n                'key' => 'updated_at',\n                'label' => __('campaigns/import.fields.updated'),\n                'render' => function (\\App\\Models\\CampaignImport $model) {\n                    $html = '<span data-title=\"' . $model->updated_at . 'UTC\" data-toggle=\"tooltip\">' . $model->updated_at->diffForHumans() . '</span>';\n\n                    return $html;\n                },\n            ],\n            'status' => [\n                'key' => 'status_id',\n                'label' => __('campaigns/plugins.fields.status'),\n                'render' => function (\\App\\Models\\CampaignImport $model) {\n                    if ($model->status_id === CampaignImportStatus::FAILED) {\n                        if ($model->isCsv()) {\n                            return '<span class=\"text-error-content\"><i class=\"fa-regular fa-xmark-circle\" aria-hidden=\"true\"></i> ' . __('campaigns/import.status.invalid') . '</span>';\n                        }\n\n                        return '<span class=\"text-error-content\"><i class=\"fa-regular fa-xmark-circle\" aria-hidden=\"true\"></i> ' . __('campaigns/import.status.failed') . '</span>';\n                    } elseif ($model->status_id == CampaignImportStatus::QUEUED) {\n                        return '<span class=\"text-neutral-content\"><i class=\"fa-regular fa-hourglass\" aria-hidden=\"true\"></i> ' . __('campaigns/import.status.queued') . '</span>';\n                    } elseif ($model->status_id == CampaignImportStatus::FINISHED) {\n                        return '<span class=\"text-success\"><i class=\"fa-regular fa-check-circle\" aria-hidden=\"true\"></i> ' . __('campaigns/import.status.finished') . '</span>';\n                    } elseif ($model->status_id == CampaignImportStatus::READY) {\n                        return '<a href=\"' . route('campaign.import.csv', [$model->campaign, $model]) . '\" class=\"btn2 btn-outline btn-sm\"> <i class=\"fa-regular fa-check-circle\" aria-hidden=\"true\"></i> ' . __('campaigns/import.status.ready') . '</a>';\n                    } elseif ($model->status_id == CampaignImportStatus::VALIDATING) {\n                        return '<span class=\"text-info\"><i class=\"fa-regular fa-microscope\" aria-hidden=\"true\"></i> ' . __('campaigns/import.status.validating') . '</span>';\n                    } elseif ($model->status_id == CampaignImportStatus::PROCESSING) {\n                        return '<span class=\"text-neutral-content\"><i class=\"fa-regular fa-hourglass\" aria-hidden=\"true\"></i> ' . __('campaigns/import.status.processing') . '</span>';\n                    }\n\n                    return '<span class=\"text-neutral-content\"><i class=\"fa-regular fa-spinner fa-spin\" aria-hidden=\"true\"></i> ' . __('campaigns/import.status.running') . '</span>';\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Campaign/CampaignRole.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Campaign;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\nuse Illuminate\\Support\\Number;\n\nclass CampaignRole extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'name' => [\n                'key' => 'name',\n                'label' => __('campaigns.roles.fields.name'),\n                'render' => function ($model) {\n                    /** @var \\App\\Models\\CampaignRole $model */\n                    $html =\n                        '<a href=\"' .\n                        route('campaign_roles.show', [\n                            $this->campaign,\n                            'campaign_role' => $model,\n                        ]) .\n                        '\" class=\"text-link\">' .\n                        $model->name .\n                        '</a><br />';\n\n                    return $html;\n                },\n            ],\n            'users' => [\n                'label' => __('campaigns.roles.fields.users'),\n                'render' => function ($model) {\n                    return Number::format($model->users_count ?? 0);\n                },\n            ],\n            'type' => [\n                'key' => 'is_admin',\n                'label' => __('campaigns.roles.fields.type'),\n                'render' => function ($model) {\n                    /** @var \\App\\Models\\CampaignRole $model */\n                    $html = __(\n                        'campaigns.roles.types.' .\n                            ($model->isAdmin()\n                                ? 'owner'\n                                : ($model->isPublic()\n                                    ? 'public'\n                                    : 'standard')),\n                    );\n\n                    return $html;\n                },\n            ],\n            'permissions' => [\n                'label' => __('campaigns.roles.fields.permissions'),\n                'render' => Standard::VIEW,\n                'with' => 'campaigns.roles.rows.permissions',\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            'update' => [\n                'label' => 'campaigns.roles.actions.rename',\n                'icon' => 'fa-regular fa-edit',\n                'can' => 'update',\n                'type' => 'dialog-ajax',\n                'route' => 'campaign_roles.edit',\n            ],\n            'show' => [\n                'label' => 'campaigns.roles.actions.permissions',\n                'icon' => 'fa-regular fa-cog',\n                'route' => 'campaign_roles.show',\n            ],\n            'duplicate' => [\n                'label' => 'campaigns.roles.actions.duplicate',\n                'icon' => 'fa-regular fa-copy',\n                'can' => 'update',\n                'type' => 'dialog-ajax',\n                'route' => 'campaign_roles.duplicate',\n            ],\n            Layout::ACTION_DELETE,\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [self::ACTION_DELETE];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Campaign/CampaignUser.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Campaign;\n\nuse App\\Models\\CampaignRole;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\nuse App\\View\\Components\\Since;\nuse Illuminate\\Support\\Facades\\Blade;\n\nclass CampaignUser extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'label' => '',\n                'render' => function (\\App\\Models\\CampaignUser $model) {\n                    if ($model->user->hasAvatar()) {\n                        return '<div class=\"rounded-full h-8 w-8 cover-background\" style=\"background-image: url(' .\n                            $model->user->getAvatarUrl() .\n                            ')\" data-title=\"' .\n                            $model->user->name .\n                            '\"></div>';\n                    }\n\n                    return '<div class=\"rounded-full h-8 w-8 flex items-center justify-center bg-neutral text-neutral-content uppercase\">' .\n                        $model->user->initials() .\n                        '</div>';\n                },\n            ],\n            'name' => [\n                'key' => 'user.name',\n                'label' => __('campaigns.members.fields.name'),\n                'render' => function (\\App\\Models\\CampaignUser $model) {\n                    $html =\n                        '<a class=\"block break-all truncate text-link\" href=\"' .\n                        route('users.profile', [$model->user]) .\n                        '\" target=\"_blank\">' .\n                        $model->user->name .\n                        '</a>';\n                    if ($model->user->isBanned()) {\n                        $html .=\n                            '<i class=\"fa-regular fa-ban\" aria-hidden=\"true\" data-toggle=\"tooltip\" data-title = \"' .\n                            __('campaigns.members.fields.banned') .\n                            '\"></i>';\n                    }\n\n                    return $html;\n                },\n            ],\n            'roles' => [\n                'key' => 'user.roles',\n                'label' => __('campaigns.members.fields.roles'),\n                'render' => function (\\App\\Models\\CampaignUser $model) {\n                    /** @var CampaignRole[] $roles */\n                    $roles = $model->user->campaignRoles->where(\n                        'campaign_id',\n                        $this->campaign->id,\n                    );\n                    $roleLinks = [];\n                    foreach ($roles as $role) {\n                        if (auth()->user()->isAdmin()) {\n                            $roleLinks[] =\n                                '<a href=\"' .\n                                route('campaign_roles.show', [\n                                    $this->campaign,\n                                    $role->id,\n                                ]) .\n                                '\" class=\"text-link\">' .\n                                $role->name .\n                                '</a>';\n                        } else {\n                            $roleLinks[] = $role->name;\n                        }\n                    }\n                    $html = (string) implode(', ', $roleLinks);\n\n                    if (auth()->user()->can('update', $model)) {\n                        $html .=\n                            ' <i href=\"' .\n                            route('campaign.members.roles', [\n                                $this->campaign,\n                                $model->id,\n                            ]) .\n                            '\" class=\"fa-regular fa-pencil cursor-pointer\"\n                            data-toggle=\"dialog-ajax\" data-target=\"new-invite\" data-url=\"' .\n                            route('campaign.members.roles', [\n                                $this->campaign,\n                                $model->id,\n                            ]) .\n                            '\" data-tooltip data-title=\"' .\n                            __('campaigns/members.roles.title') .\n                            '\" aria-label=\"' .\n                            __('campaigns/members.roles.title') .\n                            '\">\n                        </i>';\n                    }\n\n                    return $html;\n                },\n            ],\n            'created_at' => [\n                'key' => 'created_at',\n                'label' => __('campaigns.members.fields.joined'),\n                'render' => Standard::SINCE,\n            ],\n            'last_login' => [\n                'key' => 'user.last_login',\n                'label' => __('campaigns.members.fields.last_login'),\n                'render' => function (\\App\\Models\\CampaignUser $model) {\n                    if (\n                        $model->user->has_last_login_sharing &&\n                        ! empty($model->user->last_login_at)\n                    ) {\n                        return Blade::renderComponent(\n                            new Since(\n                                date: $model->user->last_login_at,\n                                withTime: false,\n                            ),\n                        );\n                    }\n\n                    return '';\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            'switch' => [\n                'label' => 'campaigns.members.actions.switch',\n                'icon' => 'fa-regular fa-sign-in-alt',\n                'can' => 'switch',\n                'route' => 'identity.switch',\n            ],\n            'delete' => [\n                'label' => 'campaigns.members.actions.remove',\n                'icon' => 'fa-regular fa-trash-can',\n                'can' => 'delete',\n                'type' => 'dialog-ajax',\n                'route' => 'campaign_users.delete',\n                'css' => 'text-error-content hover:bg-error',\n            ],\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Campaign/Plugin.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Campaign;\n\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Plugin extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'name' => [\n                'key' => 'name',\n                'label' => __('campaigns/plugins.fields.name'),\n                'render' => function (\\App\\Models\\Plugin $model) {\n                    return '<a href=\"' . $model->libraryUrl() . '\" class=\"text-link\">'\n                             . $model->name\n                            . '</a>';\n                },\n            ],\n            'update' => [\n                'key' => 'has_update',\n                'label' => __('campaigns/plugins.info.updates'),\n                'render' => function ($model) {\n                    $base = '';\n                    if ($model->obsolete()) {\n                        $base = '<i class=\"fa-regular fa-skull text-neutral-content\" aria-hidden=\"true\" data-toggle=\"tooltip\" data-title=\"'\n                            . __('campaigns/plugins.fields.obsolete')\n                            . '\"></i>';\n                    }\n                    if (! $model->has_update) {\n                        return $base;\n                    }\n\n                    if (! auth()->check() || ! auth()->user()->can('recover', $this->campaign)) {\n                        return $base;\n                    }\n\n                    return '<a href=\"' . route('campaign_plugins.update-info', [$this->campaign, $model])\n                            . '\" class=\"btn2 btn-xs\" data-toggle=\"dialog-ajax\" '\n                            . 'data-target=\"plugin-update\" data-url=\"'\n                            . route('campaign_plugins.update-info', [$this->campaign, $model]) . '\">'\n                            . __('campaigns/plugins.actions.update_available')\n                            . '</a> ' . $base;\n                },\n            ],\n            'type' => [\n                'key' => 'type_id',\n                'label' => __('campaigns/plugins.fields.type'),\n                'render' => function ($model) {\n                    return __('campaigns/plugins.types.' . $model->type());\n                },\n            ],\n            'status' => [\n                'key' => 'pivot_is_active',\n                'label' => __('campaigns/plugins.fields.status'),\n                'render' => function ($model) {\n                    if (! $model->isTheme()) {\n                        return '<i class=\"fa-regular fa-infinity\" data-title=\"' .\n                            __('campaigns/plugins.status.always') .\n                            '\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('campaigns/plugins.status.always') . '</span>';\n                    }\n                    if ($model->pivot->is_active) {\n                        return\n                            '<i class=\"fa-regular fa-check-circle text-green-500\" data-title=\"' .\n                            __('campaigns/plugins.status.enabled') .\n                            '\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('campaigns/plugins.status.enabled') . '</span>';\n                    }\n\n                    return\n                        '<i class=\"fa-regular fa-ban text-red-500\" data-title=\"' .\n                        __('campaigns/plugins.status.disabled') .\n                        '\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('campaigns/plugins.status.disabled') . '</span>';\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            'update' => [\n                'label' => 'campaigns/plugins.actions.update',\n                'icon' => 'fa-regular fa-download',\n                'can' => 'update',\n                'type' => 'dialog-ajax',\n                'route' => 'campaign_plugins.update-info',\n            ],\n            'changelog' => [\n                'label' => 'campaigns/plugins.actions.changelog',\n                'icon' => 'fa-regular fa-list',\n                'can' => 'changelog',\n                'type' => 'dialog-ajax',\n                'route' => 'campaign_plugins.update-info',\n            ],\n            'disable' => [\n                'can' => 'disable',\n                'route' => 'campaign_plugins.disable',\n                'label' => 'campaigns/plugins.actions.disable',\n                'icon' => 'fa-regular fa-ban',\n            ],\n            'enable' => [\n                'can' => 'enable',\n                'route' => 'campaign_plugins.enable',\n                'label' => 'campaigns/plugins.actions.enable',\n                'icon' => 'fa-regular fa-check',\n            ],\n            'import' => [\n                'can' => 'import',\n                'route' => 'campaign_plugins.confirm-import',\n                'type' => 'dialog-ajax',\n                'label' => 'campaigns/plugins.actions.import',\n                'icon' => 'fa-regular fa-clone',\n            ],\n            Layout::ACTION_DELETE,\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [\n            [\n                'action' => 'enable',\n                'label' => 'campaigns/plugins.actions.bulks.enable',\n                'icon' => 'fa-regular fa-check',\n                'can' => 'campaign:recover',\n            ],\n            [\n                'action' => 'disable',\n                'label' => 'campaigns/plugins.actions.bulks.disable',\n                'icon' => 'fa-regular fa-ban',\n                'can' => 'campaign:recover',\n            ],\n            [\n                'action' => 'update',\n                'label' => 'campaigns/plugins.actions.bulks.update',\n                'icon' => 'fa-regular fa-download',\n                'can' => 'campaign:recover',\n            ],\n            self::ACTION_DELETE,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Campaign/PostRecovery.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Campaign;\n\nuse App\\Renderers\\Layouts\\Layout;\n\nclass PostRecovery extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'name' => [\n                'key' => 'name',\n                'label' => __('crud.fields.name'),\n            ],\n            'deleted' => [\n                'key' => 'deleted_at',\n                'label' => __('campaigns/recovery.fields.deleted'),\n                'class' => self::ONLY_DESKTOP,\n                'render' => function ($post) {\n                    return $post->deleted_at->diffForHumans();\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Bulk actions\n     */\n    public function bulks(): array\n    {\n        return [\n            [\n                'action' => 'recover',\n                'label' => 'campaigns/recovery.actions.recover',\n                'icon' => 'fa-regular fa-history',\n                'can' => 'campaign:recover',\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Campaign/Recovery.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Campaign;\n\nuse App\\Facades\\Avatar;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Recovery extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'class' => 'avatar w-14',\n                'label' => '',\n                'render' => function ($entity) {\n                    $child = $entity->child()->withTrashed()->first();\n                    if (empty($child)) {\n                        return '';\n                    }\n\n                    return '<div style=\"background-image: url(' .\n                        Avatar::entity($entity)->size(40)->thumbnail() .\n                        ');\" class=\"entity-image w-10 h-10\"></div>';\n                },\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => __('crud.fields.name'),\n            ],\n            'type' => [\n                'key' => 'type_id',\n                'label' => __('campaigns/categories.tab'),\n                'render' => function ($entity) {\n                    return $entity->entityType->singular();\n                },\n            ],\n            'deleted' => [\n                'key' => 'deleted_at',\n                'label' => __('campaigns/recovery.fields.deleted'),\n                'class' => self::ONLY_DESKTOP,\n                'render' => function ($model) {\n                    return $model->deleted_at->diffForHumans();\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Bulk actions\n     */\n    public function bulks(): array\n    {\n        return [\n            [\n                'action' => 'recover',\n                'label' => 'campaigns/recovery.actions.recover',\n                'icon' => 'fa-regular fa-history',\n                'can' => 'campaign:recover',\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Campaign/Theme.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Campaign;\n\nuse App\\Models\\CampaignStyle;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Theme extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'order' => [\n                'key' => 'order',\n                'label' => __('campaigns/styles.fields.order'),\n                'render' => function ($model) {\n                    return $model->order ? '#' . $model->order : null;\n                },\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => __('campaigns/styles.fields.name'),\n                'render' => function ($model) {\n                    return '<a href=\"' .\n                        route('campaign_styles.edit', [\n                            $this->campaign,\n                            $model,\n                        ]) .\n                        '\" class=\"text-link\">' .\n                        $model->name .\n                        '</a>';\n                },\n            ],\n            'length' => [\n                'label' => __('campaigns/styles.fields.length'),\n                'class' => self::ONLY_DESKTOP,\n                'render' => 'length()',\n            ],\n            'modified' => [\n                'key' => 'updated_at',\n                'label' => __('campaigns/styles.fields.modified'),\n                'class' => self::ONLY_DESKTOP,\n                'render' => function ($model) {\n                    return $model->updated_at->diffForHumans();\n                },\n            ],\n            'enabled' => [\n                'key' => 'is_enabled',\n                'label' => __('campaigns/styles.fields.is_enabled'),\n                'render' => function (CampaignStyle $model) {\n                    return $model->is_enabled\n                        ? '<i class=\"fa-regular fa-check-circle\" aria-hidden=\"true\"></i><span class=\"sr-only\">' .\n                                __('campaigns/styles.fields.is_enabled') .\n                                '</span>'\n                        : null;\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            'disable' => [\n                'can' => 'disable',\n                'route' => 'campaign_styles.toggle',\n                'label' => 'campaigns/styles.actions.disable',\n                'icon' => 'fa-regular fa-ban',\n            ],\n            'enable' => [\n                'can' => 'enable',\n                'route' => 'campaign_styles.toggle',\n                'label' => 'campaigns/styles.actions.enable',\n                'icon' => 'fa-regular fa-check',\n            ],\n            self::ACTION_EDIT,\n            self::ACTION_DELETE,\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [\n            [\n                'action' => 'enable',\n                'label' => 'campaigns/styles.actions.enable',\n                'icon' => 'fa-regular fa-check',\n            ],\n            [\n                'action' => 'disable',\n                'label' => 'campaigns/styles.actions.disable',\n                'icon' => 'fa-regular fa-ban',\n            ],\n            self::ACTION_DELETE,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Campaign/Webhook.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Campaign;\n\nuse App\\Renderers\\Layouts\\Layout;\nuse Illuminate\\Support\\Str;\n\nclass Webhook extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'action' => [\n                'key' => 'action',\n                'label' => __('campaigns/webhooks.fields.event'),\n                'render' => function ($model) {\n                    /** @var \\App\\Models\\Webhook $model */\n                    return $model->actionKey();\n                },\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('campaigns/webhooks.fields.type'),\n                'render' => function ($model) {\n                    return $model->typeKey();\n                },\n            ],\n            'message' => [\n                'label' => __('campaigns/webhooks.fields.message'),\n                'render' => function ($model) {\n                    /** @var \\App\\Models\\Webhook $model */\n                    return '<div data-toggle=\"tooltip\" data-title=\"' . nl2br($model->message) . '\" data-html=\"1\">'\n                        . Str::limit(strip_tags($model->message ?? ''), 30)\n                        . '</div>';\n                },\n            ],\n            'url' => [\n                'label' => __('campaigns/webhooks.fields.url'),\n                'render' => function ($model) {\n                    return '<div data-toggle=\"tooltip\" data-title=\"' . $model->url . '\">'\n                        . $model->shortUrl()\n                        . '</div>';\n                },\n            ],\n\n            'status' => [\n                'key' => 'status',\n                'label' => __('campaigns/webhooks.fields.enabled'),\n                'render' => function (\\App\\Models\\Webhook $model) {\n                    if ($model->status) {\n                        return '<i class=\"fa-regular fa-check-circle\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('campaigns/webhooks.fields.enabled') . '</span>';\n                    }\n\n                    return '';\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            'update' => [\n                'label' => 'crud.update',\n                'icon' => 'fa-regular fa-edit',\n                'route' => 'webhooks.edit',\n            ],\n            'test' => [\n                'label' => 'campaigns/webhooks.actions.test',\n                'icon' => 'fa-regular fa-webhook',\n                'route' => 'webhooks.test',\n            ],\n            'disable' => [\n                'can' => 'disable',\n                'route' => 'webhooks.toggle',\n                'label' => 'campaigns/webhooks.actions.bulks.disable',\n                'icon' => 'fa-regular fa-ban',\n            ],\n            'enable' => [\n                'can' => 'enable',\n                'route' => 'webhooks.toggle',\n                'label' => 'campaigns/webhooks.actions.bulks.enable',\n                'icon' => 'fa-regular fa-check',\n            ],\n            Layout::ACTION_DELETE,\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [\n            [\n                'action' => 'enable',\n                'label' => 'campaigns/webhooks.actions.bulks.enable',\n                'icon' => 'fa-regular fa-check',\n                'can' => 'campaign:update',\n            ],\n            [\n                'action' => 'disable',\n                'label' => 'campaigns/webhooks.actions.bulks.disable',\n                'icon' => 'fa-regular fa-ban',\n                'can' => 'campaign:update',\n            ],\n            self::ACTION_DELETE,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Character/Organisation.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Character;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Organisation extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n                'with' => ['target' => 'organisation'],\n            ],\n            'organisation' => [\n                'key' => 'organisation.name',\n                'label' => Module::singular(\n                    config('entities.ids.organisation'),\n                    __('entities.organisation'),\n                ),\n                'render' => Standard::ENTITYLINK,\n                'with' => 'organisation',\n            ],\n            'role' => [\n                'key' => 'role',\n                'label' => __('organisations.members.fields.role'),\n                'render' => function ($model) {\n                    $icon = '';\n                    if ($model->inactive()) {\n                        $icon =\n                            '<i class=\"fa-regular fa-user-slash\" data-title=\"' .\n                            __('organisations.members.status.inactive') .\n                            '\" data-toggle=\"tooltip\"></i>';\n                    } elseif ($model->unknown()) {\n                        $icon =\n                            '<i class=\"fa-solid fa-question\" data-title=\"' .\n                            __('organisations.members.status.unknown') .\n                            '\" data-toggle=\"tooltip\"></i>';\n                    }\n                    $private = '';\n                    if ($model->is_private) {\n                        $private =\n                            '<i class=\"fa-regular fa-lock\" aria-hidden=\"true\"></i> ';\n                    }\n\n                    return $icon . $private . $model->role;\n                },\n            ],\n            'locations' => [\n                'key' => 'locations.name',\n                'label' => Module::plural(\n                    config('entities.ids.location'),\n                    __('entities.locations'),\n                ),\n                'render' => function ($model) {\n                    $locations = [];\n                    if (\n                        $model->organisation?->entity?->locations?->isNotEmpty()\n                    ) {\n                        foreach (\n                            $model->organisation->entity->locations as $location\n                        ) {\n                            if ($location->entity) {\n                                $locations[] =\n                                    '<a href=\"' .\n                                    $location->entity->url() .\n                                    '\" data-toggle=\"tooltip-ajax\" data-id=\"' .\n                                    $location->entity->id .\n                                    '\" data-url=\"' .\n                                    route('entities.tooltip', [\n                                        $location->entity->campaign_id,\n                                        $location->entity,\n                                    ]) .\n                                    '\">' .\n                                    e($location->name) .\n                                    '</a>';\n                            }\n                        }\n                    }\n\n                    return implode(', ', $locations);\n                },\n            ],\n            'pinned' => [\n                'label' => '<i class=\"fa-regular fa-map-pin\" data-title=\"' .\n                    __('organisations.members.fields.pinned') .\n                    '\" data-toggle=\"tooltip\"></i><span class=\"sr-only\">' .\n                    __('organisations.members.fields.pinned') .\n                    '</span>',\n                'render' => function ($model) {\n                    if (! $model->pinned()) {\n                        return '';\n                    }\n                    if ($model->pinnedToCharacter()) {\n                        return '<i class=\"fa-regular fa-user\" data-toggle=\"tooltip\" data-title=\"' .\n                            __('entities.character') .\n                            '\"></i>';\n                    } elseif ($model->pinnedToOrganisation()) {\n                        return '<i class=\"fa-regular fa-screen-users\" data-toggle=\"tooltip\" data-title=\"' .\n                            __('entities.organisation') .\n                            '\"></i>';\n                    }\n\n                    return '<i class=\"fa-regular fa-map-pin\" data-toggle=\"tooltip\" data-title=\"' .\n                        __('organisations.members.pinned.both') .\n                        '\"></i>';\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [self::ACTION_EDIT_DIALOG, self::ACTION_DELETE];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Columns/Action.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Columns;\n\nuse App\\Renderers\\Layouts\\Layout;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\n\nclass Action extends Column\n{\n    /** @var array Available actions to render */\n    protected array $actions = [];\n\n    /** @var array Params passed to the individual action routes, ie ['from' => 'calendar'] for workflow */\n    protected array $params = [];\n\n    public function __construct(Model $model, array $config, bool $permissions)\n    {\n        parent::__construct($model, $config);\n\n        // Validate actions?\n        foreach ($this->config as $action) {\n            if (in_array($action, [Layout::ACTION_EDIT, Layout::ACTION_COPY, Layout::ACTION_EDIT_DIALOG])) {\n                if (! $permissions) {\n                    $this->actions[] = $action;\n                } elseif (auth()->user()->can('update', $this->model)) {\n                    $this->actions[] = $action;\n                }\n            } elseif ($action == Layout::ACTION_DELETE) {\n                if (! $permissions) {\n                    $this->actions[] = $action;\n                } elseif (auth()->user()->can('delete', $this->model)) {\n                    $this->actions[] = $action;\n                }\n            } elseif (is_string($action) && view()->exists($action)) {\n                $this->actions[] = $action;\n            } elseif (is_array($action)) {\n                // Custom, to do?\n                $this->import($action);\n            }\n        }\n    }\n\n    public function params(array $params): self\n    {\n        $this->params = $params;\n\n        return $this;\n    }\n\n    public function __toString(): string\n    {\n        $html = view('layouts.datagrid.actions')\n            ->with('actions', $this->actions)\n            ->with('model', $this->model)\n            ->with('params', $this->params)\n            ->with('campaign', $this->campaign)\n            ->render();\n\n        return $html;\n    }\n\n    public function css(): ?string\n    {\n        return 'text-center table-actions w-8 h-8';\n    }\n\n    public function hasDelete(): bool\n    {\n        return in_array(Layout::ACTION_DELETE, $this->actions);\n    }\n\n    protected function import(array $action): self\n    {\n        // No auth check? We good.\n        if (! Arr::has($action, 'can')) {\n            $this->actions[] = $action;\n\n            return $this;\n        }\n\n        if (auth()->user()->can($action['can'], $this->model)) {\n            $this->actions[] = $action;\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Columns/Checkbox.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Columns;\n\nclass Checkbox extends Column\n{\n    public function css(): ?string\n    {\n        return 'w-8';\n    }\n\n    public function __toString(): string\n    {\n        // @phpstan-ignore-next-line\n        return '<input type=\"checkbox\" class=\"m-0 cursor-pointer\" name=\"model[]\" value=\"' . $this->model->id . '\" />';\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Columns/Column.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Columns;\n\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\n\n/**\n * Column for the datagrid2 rendering\n */\nabstract class Column\n{\n    use CampaignAware;\n\n    protected Model $model;\n\n    protected array $config;\n\n    public function __construct(Model $model, array $config)\n    {\n        $this->model = $model;\n        $this->config = $config;\n    }\n\n    public function __toString(): string\n    {\n        return '';\n    }\n\n    public function css(): ?string\n    {\n        $default = null;\n        if (Arr::get($this->config, 'render') === Standard::IMAGE) {\n            $default = 'avatar w-14';\n        }\n        if (empty($this->config['class'])) {\n            return $default;\n        }\n\n        return (string) $this->config['class'];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Columns/Standard.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Columns;\n\nuse Closure;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\nclass Standard extends Column\n{\n    public const CHARACTER = 'character';\n\n    public const IMAGE = 'image';\n\n    public const ENTITYLINK = 'entitylink';\n\n    public const ENTITYLIST = 'entitylist';\n\n    public const ParentLink = 'parentlink';\n\n    public const VIEW = 'view';\n\n    public const LOCATION = 'location';\n\n    public const ENTITY_LOCATIONS = 'locations';\n\n    public const MENTION_LINK = 'mention-link';\n\n    public const VISIBILITY = 'visibility';\n\n    public const VISIBILITY_PIVOT = 'visibility_pivot';\n\n    public const DATE = 'date';\n\n    public const TAGS = 'tags';\n\n    public const SINCE = 'since';\n\n    public function __toString(): string\n    {\n        if (! isset($this->config['render']) && isset($this->config['renter'])) {\n            return 'Misspelled _render_';\n        }\n        if (! isset($this->config['render'])) {\n            return (string) $this->model->{$this->config['key']};\n        }\n\n        $render = $this->config['render'];\n        if ($render instanceof Closure) {\n            return (string) $render($this->model);\n        } elseif ($this->defined($render)) {\n            return $this->view($render, Arr::get($this->config, 'with'));\n        }\n\n        $method = mb_substr($render, 0, -2);\n        if (Str::endsWith($render, '()') && method_exists($this->model, $method)) {\n            return (string) $this->model->$method();\n        }\n\n        return $render . '???';\n    }\n\n    /**\n     * If this is a defined view\n     */\n    protected function defined(string $render): bool\n    {\n        return in_array($render, [\n            self::CHARACTER,\n            self::IMAGE,\n            self::TAGS,\n            self::ENTITYLINK,\n            self::LOCATION,\n            self::ENTITY_LOCATIONS,\n            self::ENTITYLIST,\n            self::ParentLink,\n            self::VISIBILITY,\n            self::VISIBILITY_PIVOT,\n            self::DATE,\n            self::MENTION_LINK,\n            self::VIEW,\n            self::SINCE,\n        ]);\n    }\n\n    /**\n     * Render a defined view\n     */\n    protected function view(string $view, mixed $extra = null): string\n    {\n        return view('layouts.datagrid.rows.' . $view)\n            ->with('model', $this->model)\n            ->with('with', $extra)\n            ->with('key', $this->config['key'] ?? '')\n            ->with('campaign', $this->campaign)\n            ->render();\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Creature/Creature.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Creature;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Creature extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'creature_id' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.creature'), __('entities.creature')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Creature $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'creature' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('parent_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Entity/Children.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Entity;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\nuse App\\Traits\\EntityTypeAware;\n\nclass Children extends Layout\n{\n    use EntityTypeAware;\n\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'race_id' => [\n                'key' => 'name',\n                'label' => $this->entityType->name(),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n            ],\n            'parent' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return request()->get('m') != 0;\n                },\n            ],\n            'children' => [\n                'label' => __('tags.fields.children'),\n                'render' => function ($model) {\n                    return $model->children->count();\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Entity/Relation.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Entity;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Relation extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'relation' => [\n                'key' => 'relation',\n                'label' => __('entities/relations.fields.role'),\n                'render' => function ($relation) {\n                    $icon = '';\n                    if ($relation->isPinned()) {\n                        $icon =\n                            '<i class=\"fa-regular fa-star\" data-title=\"' .\n                            __('crud.fields.is_star') .\n                            '\" data-toggle=\"tooltip\"></i> ';\n                    }\n\n                    $text = e($relation->relation);\n                    if (\n                        auth()->check() &&\n                        auth()->user()->can('update', $relation)\n                    ) {\n                        $url = route(\n                            $relation->url('edit'),\n                            $relation->routeParams([\n                                'campaign' => $relation->campaign_id,\n                            ]),\n                        );\n                        $text =\n                            '<a href=\"' .\n                            $url .\n                            '\" class=\"text-link\" data-toggle=\"dialog\" data-url=\"' .\n                            $url .\n                            '\">' .\n                            $text .\n                            '</a>';\n                    }\n\n                    return $icon . $text;\n                },\n            ],\n            'target' => [\n                'key' => 'target.name',\n                'label' => __('fields.entry.label'),\n                'render' => Standard::ENTITYLINK,\n                'with' => 'target',\n            ],\n            'location' => [\n                'label' => __('entities.location'),\n                'render' => Standard::LOCATION,\n                'with' => 'target',\n            ],\n            'attitude' => [\n                'key' => 'attitude',\n                'label' => __('entities/relations.fields.attitude'),\n                'class' => 'hidden-xs hidden-sm',\n                'render' => function ($relation) {\n                    /** @var \\App\\Models\\Relation $relation */\n                    $icon = '';\n                    if (empty($relation->colour)) {\n                        return $relation->attitude;\n                    }\n                    $html = '<div class=\"flex items-center gap-1\">';\n                    $icon =\n                        '<div class=\"flex-0 inline-block p-1 rounded-2xl w-5 h-5\" style=\"background-color: ' .\n                        $relation->colour .\n                        '; \"></div>';\n\n                    return $html .\n                        $icon .\n                        '<div class=\"grow\">' .\n                        $relation->attitude .\n                        '</div></div>';\n                },\n            ],\n            'visibility' => [\n                'label' => '',\n                'render' => Standard::VISIBILITY,\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [self::ACTION_EDIT_DIALOG, self::ACTION_DELETE];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Entity/Reminder.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Entity;\n\nuse App\\Models\\Reminder as Model;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Reminder extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'calendar' => [\n                'key' => 'calendar.name',\n                'label' => __('entities.calendar'),\n                'render' => Standard::ENTITYLINK,\n                'with' => 'calendar',\n            ],\n            'date' => [\n                'key' => 'date',\n                'label' => __('events.fields.date'),\n                'render' => function (Model $reminder) {\n                    $params = '?year=' . $reminder->year . '&month=' . $reminder->month;\n\n                    return '<a href=\"' . $reminder->calendar->getLink() . $params . '\" class=\"text-link\">' . $reminder->readableDate() . '</a>';\n                },\n            ],\n            'length' => [\n                'key' => 'length',\n                'label' => __('calendars.fields.length'),\n                'render' => function (Model $reminder) {\n                    return trans_choice('calendars.fields.length_days', $reminder->length, ['count' => $reminder->length]);\n                },\n            ],\n            'comment' => [\n                'key' => 'comment',\n                'label' => '<i class=\"fa-regular fa-comments\" data-title=\"' . __('calendars.fields.comment') . '\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('calendars.fields.comment') . '</span>',\n                'render' => function (Model $reminder) {\n                    return '<p class=\"text-xs text-neutral-content\">' . $reminder->comment . '</p>';\n                },\n            ],\n            'recurring' => [\n                'label' => '<i class=\"fa-regular fa-arrows-rotate\" data-title=\"' . __('calendars.fields.is_recurring') . '\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('calendars.fields.is_recurring') . '</span>',\n                'render' => function (Model $reminder) {\n                    if ($reminder->is_recurring) {\n                        return '<i class=\"fa-regular fa-redo\" data-title=\"' . __('calendars.fields.is_recurring') . '\" data-toggle=\"tooltip\" aria-hidden=\"true\" ></i>';\n                    }\n                    if ($reminder->isBirth()) {\n                        return '<i class=\"fa-regular fa-birthday-cake\" data-title=\"' . __('entities/events.types.birth') . '\" data-toggle=\"tooltip\" aria-hidden=\"true\" ></i>';\n                    } elseif ($reminder->isDeath()) {\n                        return '<i class=\"fa-regular fa-skull\" data-title=\"' . __('entities/events.types.death') . '\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i>';\n                    } elseif ($reminder->isFounded()) {\n                        return '<i class=\"fa-regular fa-building-columns\" data-title=\"' . __('entities/events.types.founded') . '\" data-toggle=\"tooltip\" aria-hidden=\"true\" ></i>';\n                    }\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            self::ACTION_EDIT_DIALOG,\n            self::ACTION_DELETE,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Event/Event.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Event;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Event extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.event'), __('entities.event')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Event $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'date' => [\n                'key' => 'date',\n                'label' => __('events.fields.date'),\n            ],\n            'event' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('parent_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Family/Character.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Family;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Character extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'character_id' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.character'), __('entities.character')),\n                'render' => Standard::CHARACTER,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Character $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'locations' => [\n                'label' => Module::plural(config('entities.ids.location'), __('entities.locations')),\n                'render' => Standard::ENTITY_LOCATIONS,\n            ],\n            'families' => [\n                'label' => Module::plural(config('entities.ids.family'), __('entities.families')),\n                'render' => Standard::ENTITYLIST,\n                'with' => ['characterFamilies', 'family'],\n                'visible' => function () {\n                    return ! request()->has('family_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Family/Family.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Family;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Family extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'family_id' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.family'), __('entities.family')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Family $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'location' => [\n                'key' => 'location.name',\n                'label' => Module::singular(config('entities.ids.location'), __('entities.location')),\n                'render' => Standard::LOCATION,\n            ],\n            'family' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('parent_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Header.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts;\n\nuse App\\Facades\\Datagrid;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Traits\\CampaignAware;\nuse Exception;\nuse Illuminate\\Support\\Arr;\n\nclass Header\n{\n    use CampaignAware;\n\n    /** @var array|string */\n    protected $data;\n\n    protected $orderField;\n\n    protected $orderDir;\n\n    public function __construct(array|string $data)\n    {\n        $this->data = $data;\n    }\n\n    public function __toString(): string\n    {\n        if (empty($this->data)) {\n            return '';\n        }\n        if (empty($this->data['label'])) {\n            if (Arr::get($this->data, 'render') === Standard::IMAGE) {\n                return '';\n            }\n            if (Arr::get($this->data, 'render') === Standard::TAGS) {\n                return __('entities.tags');\n            }\n\n            return ! isset($this->data['label']) ? '<i>no label</i>' : '';\n        }\n\n        if (! $this->sortable()) {\n            return $this->data['label'];\n        }\n\n        // Prepare some data\n        $this->orderField = request()->get('k');\n        $this->orderDir = request()->get('o');\n\n        // We have some HTML going on, let blade render it\n        try {\n            return view('layouts.datagrid._head')\n                ->with('head', $this)\n                ->render();\n        } catch (Exception $e) {\n            throw $e;\n            // return $e->getMessage();\n        }\n    }\n\n    public function css(): ?string\n    {\n        $default = null;\n        if (Arr::get($this->data, 'render') === Standard::IMAGE) {\n            $default = 'avatar w-14';\n        }\n        if (empty($this->data['class'])) {\n            return $default;\n        }\n\n        return $this->data['class'];\n    }\n\n    public function bulk(): bool\n    {\n        return ! is_array($this->data) && $this->data === 'bulk';\n    }\n\n    public function sortable(): bool\n    {\n        return ! empty($this->data['key']) &&\n            auth()->check() &&\n            ! empty(request()->route());\n    }\n\n    public function icon(): ?string\n    {\n        if ($this->orderField != $this->data['key']) {\n            return '';\n        }\n\n        if ($this->orderDir == 'asc') {\n            return 'fa-regular fa-arrow-up-a-z';\n        }\n\n        return 'fa-regular fa-arrow-down-z-a';\n    }\n\n    public function route(): string\n    {\n        $route = Datagrid::routeName();\n        $options = [\n            'campaign' => $this->campaign,\n            'k' => $this->data['key'],\n            'o' => 'asc',\n        ];\n        if ($this->orderField == $this->data['key']) {\n            // Already desc? we want to reset\n            if ($this->orderDir == 'desc') {\n                $options = ['campaign' => $this->campaign];\n            } else {\n                $options['o'] = 'desc';\n            }\n        }\n        $options = array_merge($options, Datagrid::routeOptions());\n        if (request()->has('page')) {\n            $options['page'] = (int) request()->get('page');\n        }\n\n        try {\n            return route($route, $options);\n        } catch (Exception $e) {\n            throw $e;\n            // return 'invalid';\n        }\n    }\n\n    public function label(): string\n    {\n        return $this->data['label'];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Item/Entity.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Item;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Entity extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => 'fields.entry.label',\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type_id',\n                'label' => 'campaigns/categories.tab',\n                'render' => function ($model) {\n                    return $model->entityType->name();\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Item/Item.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Item;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Item extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.item'), __('entities.item')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Item $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'price' => [\n                'key' => 'price',\n                'label' => __('items.fields.price'),\n            ],\n            'size' => [\n                'key' => 'size',\n                'label' => __('items.fields.size'),\n            ],\n            'weight' => [\n                'key' => 'weight',\n                'label' => __('items.fields.weight'),\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Journal/Journal.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Journal;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\nuse App\\View\\Components\\Date;\nuse Illuminate\\Support\\Facades\\Blade;\n\nclass Journal extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'journal' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.journal'), __('entities.journal')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Journal $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'date' => [\n                'key' => 'date',\n                'label' => __('journals.fields.date'),\n                'render' => function ($model) {\n                    return Blade::renderComponent(\n                        new Date(date: $model->date)\n                    );\n                },\n            ],\n            'author' => [\n                'key' => 'author.name',\n                'label' => __('journals.fields.author'),\n                'render' => Standard::ENTITYLINK,\n                'with' => 'author',\n            ],\n            'parent' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('parent_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Layout.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts;\n\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Traits\\CampaignAware;\nuse App\\View\\Components\\EntityLink;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Blade;\n\nabstract class Layout\n{\n    use CampaignAware;\n\n    public const ONLY_DESKTOP = 'hidden lg:table-cell';\n\n    public const ACTION_EDIT = 'edit';\n\n    public const ACTION_EDIT_DIALOG = 'edit-dialog';\n\n    public const ACTION_DELETE = 'delete';\n\n    public const ACTION_COPY = 'copy';\n\n    /** @var bool|array */\n    protected $visibleColumns = false;\n\n    public function columns(): array\n    {\n        return [];\n    }\n\n    public function actions(): array\n    {\n        return [];\n    }\n\n    public function bulks(): array\n    {\n        return [];\n    }\n\n    public function visibleColumns(): array\n    {\n        if ($this->visibleColumns !== false) {\n            return $this->visibleColumns;\n        }\n\n        $this->visibleColumns = [];\n        foreach ($this->columns() as $key => $column) {\n            if (! isset($column['visible'])) {\n                $this->visibleColumns[] = $column;\n\n                continue;\n            }\n            $condition = $column['visible']();\n            if (! $condition) {\n                continue;\n            }\n            $this->visibleColumns[] = $column;\n        }\n\n        return $this->visibleColumns;\n    }\n\n    protected function entityLink(Model|MiscModel|Entity $model): string\n    {\n        if ($model instanceof Entity) {\n            return Blade::renderComponent(\n                new EntityLink($model, $this->campaign)\n            );\n        }\n\n        // @phpstan-ignore-next-line\n        return '<a href=\"' . $model->getLink() . '\" class=\"text-link\">' . $model->name . '</a>';\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Location/Character.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Location;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Character extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'character_id' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.character'), __('entities.character')),\n                'render' => Standard::CHARACTER,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Character $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'locations' => [\n                'key' => 'locations.name',\n                'label' => Module::plural(config('entities.ids.location'), __('entities.locations')),\n                'render' => Standard::ENTITY_LOCATIONS,\n                'visible' => function () {\n                    return ! request()->has('location_id');\n                },\n            ],\n            'families' => [\n                'label' => Module::plural(config('entities.ids.family'), __('entities.families')),\n                'render' => Standard::ENTITYLIST,\n                'with' => ['characterFamilies', 'family'],\n            ],\n            'races' => [\n                'label' => Module::plural(config('entities.ids.race'), __('entities.races')),\n                'class' => self::ONLY_DESKTOP,\n                'render' => Standard::ENTITYLIST,\n                'with' => ['characterRaces', 'race'],\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Location/Event.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Location;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Event extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(\n                    config('entities.ids.event'),\n                    __('entities.event')\n                ),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Event $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'date' => [\n                'key' => 'date',\n                'label' => __('events.fields.date'),\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Location/Location.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Location;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Location extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'location_id' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.location'), __('entities.location')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Location $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'location' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('parent_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Location/Quest.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Location;\n\nclass Quest extends \\App\\Renderers\\Layouts\\Quest\\Quest {}\n"
  },
  {
    "path": "app/Renderers/Layouts/Map/Group.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Map;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Group extends Layout\n{\n    /**\n     * Available columnsname\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'name' => [\n                'key' => 'name',\n                'label' => __('crud.fields.name'),\n                'render' => function ($model) {\n                    return '<a href=\"' . $model->getLink() . '\" data-target=\"primary-dialog\" data-url=\"' . $model->getLink() . '\" data-toggle=\"dialog\" class=\"text-link\">' . $model->name . '</a>';\n                },\n            ],\n            'position' => [\n                'key' => 'position',\n                'label' => __('maps/groups.fields.position'),\n            ],\n            'shown' => [\n                'label' => __('maps/groups.fields.is_shown'),\n                'render' => function ($model) {\n                    if ($model->is_shown) {\n                        return '<i class=\"fa-regular fa-check\" aria-hidden=\"true\"></i>';\n                    }\n\n                    return '';\n                },\n            ],\n            'parent' => [\n                'label' => __('maps/groups.fields.parent'),\n                'key' => 'parent_id',\n                'render' => function ($model) {\n                    if ($model->parent) {\n                        return '<a href=\"' . $model->parent->getLink() . '\" data-target=\"primary-dialog\" data-url=\"' . $model->parent->getLink() . '\" data-toggle=\"dialog\" class=\"text-link\">' . $model->parent->name . '</a>';\n                    }\n\n                    return '';\n                },\n            ],\n            'visibility' => [\n                'label' => __('crud.fields.visibility'),\n                'render' => Standard::VISIBILITY,\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            self::ACTION_EDIT_DIALOG,\n            self::ACTION_DELETE,\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [\n            self::ACTION_EDIT_DIALOG,\n            self::ACTION_DELETE,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Map/Layer.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Map;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Layer extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => __('crud.fields.name'),\n                'render' => function ($model) {\n                    return '<a href=\"' . $model->getLink() . '\" class=\"text-link\">' . $model->name . '</a>';\n                },\n            ],\n            'position' => [\n                'key' => 'position',\n                'label' => __('maps/layers.fields.position'),\n            ],\n            'type' => [\n                'label' => __('maps/layers.fields.type'),\n                'render' => function ($model) {\n                    return __('maps/layers.short_types.' . $model->typeName());\n                },\n            ],\n            'visibility' => [\n                'label' => __('crud.fields.visibility'),\n                'render' => Standard::VISIBILITY,\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            self::ACTION_EDIT,\n            self::ACTION_DELETE,\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [\n            self::ACTION_EDIT,\n            self::ACTION_DELETE,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Map/Map.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Map;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Map extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.map'), __('entities.map')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Map $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'map' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('map_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Map/Marker.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Map;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Marker extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'name' => [\n                'key' => 'name',\n                'label' => __('crud.fields.name'),\n                'render' => function ($model) {\n                    return $model->markerLink();\n                },\n            ],\n            'entity_id' => [\n                'label' => __('fields.description.label'),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'groups' => [\n                'label' => __('maps/markers.fields.group'),\n                'render' => function ($model) {\n                    return $model->group?->name;\n                },\n            ],\n            'type' => [\n                'label' => __('crud.fields.type'),\n                'render' => function ($model) {\n                    return $model->typeLabel();\n                },\n            ],\n            'icon' => [\n                'label' => __('maps/markers.fields.icon'),\n                'render' => function ($model) {\n                    return $model->datagridMarkerIcon();\n                },\n            ],\n            'visibility' => [\n                'label' => __('crud.fields.visibility'),\n                'render' => Standard::VISIBILITY,\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            self::ACTION_EDIT,\n            self::ACTION_COPY,\n            self::ACTION_DELETE,\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [\n            self::ACTION_EDIT,\n            self::ACTION_DELETE,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Mention/Mention.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Mention;\n\nuse App\\Models\\EntityMention;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Mention extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'name' => [\n                'key' => 'name',\n                'label' => __('entities/mentions.fields.element'),\n                'render' => Standard::MENTION_LINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (EntityMention $model) {\n                    if ($model->isCampaign()) {\n                        return __('entities.campaign');\n                    }\n                    $base = __('crud.hidden');\n                    if ($model->entity) {\n                        $base = $model->entity->entityType->name();\n                    }\n\n                    if ($model->isTimelineElement()) {\n                        return $base .\n                            ' (' .\n                            __('entities.timeline_element') .\n                            ')';\n                    } elseif ($model->isQuestElement()) {\n                        return $base .\n                            ' (' .\n                            __('entities.quest_element') .\n                            ')';\n                    } elseif ($model->isPost()) {\n                        return $base . ' (' . __('entities.post') . ')';\n                    }\n\n                    return $base;\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Note/Note.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Note;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Note extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.note'), __('entities.note')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Note $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Organisation/Member.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Organisation;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Member extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n                'with' => ['target' => 'character'],\n            ],\n            'character' => [\n                'key' => 'character.name',\n                'label' => Module::singular(\n                    config('entities.ids.character'),\n                    __('entities.character'),\n                ),\n                'render' => Standard::CHARACTER,\n            ],\n            'role' => [\n                'key' => 'role',\n                'label' => __('organisations.members.fields.role'),\n                'render' => function ($model) {\n                    $icon = '';\n                    if ($model->inactive()) {\n                        $icon =\n                            '<i class=\"fa-regular fa-user-slash\" data-title=\"' .\n                            __('organisations.members.status.inactive') .\n                            '\" data-toggle=\"tooltip\"></i>';\n                    } elseif ($model->unknown()) {\n                        $icon =\n                            '<i class=\"fa-regular fa-question\" data-title=\"' .\n                            __('organisations.members.status.unknown') .\n                            '\" data-toggle=\"tooltip\"></i>';\n                    }\n                    $private = '';\n                    if ($model->is_private) {\n                        $private =\n                            '<i class=\"fa-regular fa-lock\" aria-hidden=\"true\"></i> ';\n                    }\n\n                    return $icon . $private . $model->role;\n                },\n            ],\n            'superior' => [\n                'key' => 'parent_id',\n                'label' => __('organisations.members.fields.parent'),\n                'render' => Standard::ENTITYLINK,\n                'with' => 'superior',\n            ],\n            'locations' => [\n                'label' => Module::plural(\n                    config('entities.ids.location'),\n                    __('entities.locations'),\n                ),\n                'class' => self::ONLY_DESKTOP,\n                'render' => Standard::ENTITY_LOCATIONS,\n                'with' => 'character.entity',\n            ],\n            'pinned' => [\n                'label' => '<i class=\"fa-regular fa-map-pin\" data-title=\"' .\n                    __('organisations.members.fields.pinned') .\n                    '\" data-toggle=\"tooltip\"></i>',\n                'render' => function ($model) {\n                    if (! $model->pinned()) {\n                        return '';\n                    }\n                    if ($model->pinnedToCharacter()) {\n                        return '<i class=\"fa-regular fa-user\" data-toggle=\"tooltip\" data-title=\"' .\n                            __('entities.character') .\n                            '\"></i>';\n                    } elseif ($model->pinnedToOrganisation()) {\n                        return '<i class=\"fa-regular fa-screen-users\" data-toggle=\"tooltip\" data-title=\"' .\n                            __('entities.organisation') .\n                            '\"></i>';\n                    }\n\n                    return '<i class=\"fa-regular fa-map-pin\" data-toggle=\"tooltip\" data-title=\"' .\n                        __('organisations.members.pinned.both') .\n                        '\"></i>';\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [self::ACTION_EDIT_DIALOG, self::ACTION_DELETE];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Organisation/Organisation.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Organisation;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Organisation extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.organisation'), __('entities.organisation')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Organisation $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'organisation' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('parent_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Quest/Quest.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Quest;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Quest extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.quest'), __('entities.quest')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Quest $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'date' => [\n                'key' => 'date',\n                'label' => __('quests.fields.date'),\n                'render' => Standard::DATE,\n            ],\n            'completed' => [\n                'key' => 'status',\n                'label' => __('quests.fields.status'),\n                'render' => function (\\App\\Models\\Quest $model) {\n                    if ($model->entity->status) {\n                        return '<i class=\"' . $model->entity->status->icon() . '\" data-title=\"' . $model->entity->status->setRelation('entityType', $model->entity->type)->name() . '\" aria-hidden=\"true\"></i>';\n                    }\n\n                    return '';\n                },\n            ],\n            'location' => [\n                'key' => 'location.name',\n                'label' => Module::singular(config('entities.ids.location'), __('entities.location')),\n                'render' => Standard::LOCATION,\n                'visible' => function () {\n                    return ! request()->has('location_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Race/Character.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Race;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Character extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        return [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'character_id' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.character'), __('entities.character')),\n                'render' => Standard::CHARACTER,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Character $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'locations' => [\n                'label' => Module::plural(config('entities.ids.location'), __('entities.locations')),\n                'render' => Standard::ENTITY_LOCATIONS,\n            ],\n            'races' => [\n                'label' => Module::plural(config('entities.ids.race'), __('entities.races')),\n                'class' => self::ONLY_DESKTOP,\n                'render' => Standard::ENTITYLIST,\n                'with' => ['characterRaces', 'race'],\n                'visible' => function () {\n                    return ! request()->has('race_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Race/Race.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Race;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Race extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'race_id' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.race'), __('entities.race')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Race $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'race' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n            ],\n            'characters' => [\n                'label' => Module::plural(config('entities.ids.character'), __('entities.characters')),\n                'render' => function ($model) {\n                    return $model->characters->count();\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Tag/Entity.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Tag;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Entity extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => __('fields.entry.label'),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n            ],\n            'module' => [\n                'key' => 'type_id',\n                'label' => __('campaigns/categories.tab'),\n                'render' => function ($model) {\n                    return $model->entityType->name();\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Tag/Post.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Tag;\n\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Post extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'entity' => [\n                'key' => 'entity.name',\n                'label' => __('fields.entry.label'),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type_id',\n                'label' => __('campaigns/categories.tab'),\n                'render' => function ($model) {\n                    return $model->entity->entityType->name();\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Tag/Tag.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Tag;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Tag extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.tag'), __('entities.tag')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Tag $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'colour' => [\n                'key' => 'colour',\n                'label' => __('crud.fields.colour'),\n                'render' => function (\\App\\Models\\Tag $tag) {\n                    if (! $tag->hasColour()) {\n                        return '';\n                    }\n\n                    return '<div class=\"rounded-full w-6 h-6\" style=\"' . e($tag->colourStyle()) . '\"></div>';\n                },\n            ],\n            'tag' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('tag_id');\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Timeline/Era.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Timeline;\n\nuse App\\Models\\TimelineEra;\nuse App\\Renderers\\Layouts\\Layout;\nuse Illuminate\\Support\\Number;\n\nclass Era extends Layout\n{\n    /**\n     * Available column names\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'name' => [\n                'key' => 'name',\n                'label' => __('crud.fields.name'),\n                'render' => function (TimelineEra $model) {\n                    return '<a href=\"' . $model->getLink() . '\" class=\"text-link\">' . $model->name . '</a>';\n                },\n            ],\n            'abbreviation' => [\n                'key' => 'abbreviation',\n                'label' => __('timelines/eras.fields.abbreviation'),\n            ],\n            'position' => [\n                'key' => 'position',\n                'label' => __('maps/groups.fields.position'),\n            ],\n            'start_year' => [\n                'key' => 'start_year',\n                'label' => __('timelines/eras.fields.start_year'),\n                'render' => function (TimelineEra $era) {\n                    if (empty($era->start_year)) {\n                        return '';\n                    }\n\n                    return Number::format($era->start_year ?? 0);\n                },\n            ],\n            'end_year' => [\n                'key' => 'end_year',\n                'label' => __('timelines/eras.fields.end_year'),\n                'render' => function (TimelineEra $era) {\n                    if (empty($era->end_year)) {\n                        return '';\n                    }\n\n                    return Number::format($era->end_year);\n                },\n            ],\n            'is_collapsed' => [\n                'key' => 'is_collapsed',\n                'label' => __('timelines/eras.fields.is_collapsed'),\n                'render' => function (TimelineEra $model) {\n                    if ($model->is_collapsed) {\n                        return '<i class=\"fa-regular fa-check-circle\" aria-hidden=\"true\"></i>';\n                    }\n\n                    return '';\n                },\n            ],\n        ];\n\n        return $columns;\n    }\n\n    /**\n     * Available actions on each row\n     */\n    public function actions(): array\n    {\n        return [\n            self::ACTION_EDIT,\n            self::ACTION_DELETE,\n        ];\n    }\n\n    public function bulks(): array\n    {\n        return [\n            self::ACTION_DELETE,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Renderers/Layouts/Timeline/Timeline.php",
    "content": "<?php\n\nnamespace App\\Renderers\\Layouts\\Timeline;\n\nuse App\\Facades\\Module;\nuse App\\Renderers\\Layouts\\Columns\\Standard;\nuse App\\Renderers\\Layouts\\Layout;\n\nclass Timeline extends Layout\n{\n    /**\n     * Available columns\n     *\n     * @return array[]\n     */\n    public function columns(): array\n    {\n        $columns = [\n            'image' => [\n                'render' => Standard::IMAGE,\n            ],\n            'name' => [\n                'key' => 'name',\n                'label' => Module::singular(config('entities.ids.timeline'), __('entities.timeline')),\n                'render' => Standard::ENTITYLINK,\n            ],\n            'type' => [\n                'key' => 'type',\n                'label' => __('crud.fields.type'),\n                'render' => function (\\App\\Models\\Timeline $model) {\n                    return $model->entity->type;\n                },\n            ],\n            'timeline' => [\n                'key' => 'parent.name',\n                'label' => __('crud.fields.parent'),\n                'render' => Standard::ParentLink,\n                'visible' => function () {\n                    return ! request()->has('parent_id');\n                },\n            ],\n            'tags' => [\n                'render' => Standard::TAGS,\n            ],\n        ];\n\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "app/Rules/AccountEmail.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass AccountEmail implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (Str::contains($value, ['@boxmail.lol', '@fireboxmail.lol'])) {\n            $fail('The validation error message.');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/AccountName.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass AccountName implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (Str::contains($value, ['<', '>', 'https', 'http://', 'www.', 'Ђ', ' Illuro']) && Str::length($value) < 31) {\n            $fail('Invalid account name.');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/ApiUniqueAttributeNames.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass ApiUniqueAttributeNames implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        $names = array_column($value, 'name');\n        if (! (count($names) === count(array_flip($names)))) {\n            $fail(__('validation.attribute_unique'));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/CalendarFormat.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass CalendarFormat implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (! preg_match('/^[ymMds\\s,-]+$/', $value)) {\n            $fail(__('calendars.validators.format'));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/CalendarMoonOffset.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass CalendarMoonOffset implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        // Max value\n        $lengths = request()->get('month_length');\n        if (! is_array($lengths) || count($lengths) === 0) {\n            $fail(__('calendars.validators.moon_offset'));\n        }\n        $max = $lengths[0];\n        $min = 0 - $max;\n\n        foreach ($value as $offset) {\n            if ($offset > $max || $offset < $min) {\n                $fail(__('calendars.validators.moon_offset'));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/CampaignDelete.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass CampaignDelete implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (! Str::is(mb_strtolower($value), 'delete')) {\n            $fail(__('validation.delete_campaign', ['code' => 'delete']));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/Confirm.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass Confirm implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (! Str::is(mb_strtolower($value), 'delete')) {\n            $fail(__('validation.confirmation', ['code' => '<strong>delete</strong>']));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/EntityField.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\EntityType;\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass EntityField implements ValidationRule\n{\n    public function __construct(\n        protected int $entityTypeId,\n        protected string $modelClass\n    ) {}\n\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        /** @var EntityType $module */\n        $module = EntityType::find($this->entityTypeId);\n\n        if (! is_array($value)) {\n            $value = [$value];\n        }\n        foreach ($value as $id) {\n            if (is_numeric($id)) {\n                if ($this->modelClass::find($id)) {\n                    continue;\n                }\n                $fail(__('crud.dynamic.unknown', ['module' => $module->name()]));\n\n                return;\n            }\n\n            $name = Str::startsWith($id, 'new:') ? Str::substr($id, 4) : $id;\n            if (empty(mb_trim($name))) {\n                continue;\n            }\n\n            $campaign = CampaignLocalization::getCampaign();\n            if (! auth()->user()->can('create', [$module, $campaign])) {\n                $fail(__('crud.dynamic.permission', ['module' => $module->name()]));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/EntityFile.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\nuse Symfony\\Component\\HttpFoundation\\File\\UploadedFile;\n\nclass EntityFile implements ValidationRule\n{\n    protected string $formats = 'jpg, jpeg, png, gif, webp, pdf, xls(x), csv, mp3, ogg, json, csv';\n\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        // Not a valid file, don't go further\n        if ($value instanceof UploadedFile && ! $value->isValid()) {\n            $fail(__('validation.mimes', ['values' => $this->formats]));\n        }\n\n        // Block any hacking shenanigans\n        if ($this->shouldBlockPhpUpload($value, [])) {\n            $fail(__('validation.mimes', ['values' => $this->formats]));\n        }\n\n        if (empty($value->getPath())) {\n            $fail(__('validation.mimes', ['values' => $this->formats]));\n        }\n\n        $validExtensions = explode(',', 'jpeg,png,jpg,gif,webp,pdf,xls,xlsx,mp3');\n        if (in_array($value->guessExtension(), $validExtensions)) {\n            return;\n            // $fail(__('validation.mimes', ['values' => 'jpg, jpeg, png, gif, webp, pdf, xls(x), csv, mp3, ogg, json']));\n        }\n\n        // It wasn't an image, maybe it's an audio file\n        if (empty($value->getClientOriginalExtension())) {\n            $fail(__('validation.mimes', ['values' => $this->formats]));\n        }\n\n        if (in_array($value->getClientOriginalExtension(), ['mp3', 'ogg', 'json', 'csv'])) {\n            return;\n        }\n        $fail(__('validation.mimes', ['values' => $this->formats]));\n    }\n\n    protected function shouldBlockPhpUpload($value, $parameters)\n    {\n        if (in_array('php', $parameters)) {\n            return false;\n        }\n\n        $phpExtensions = [\n            'php', 'php3', 'php4', 'php5', 'phtml',\n        ];\n\n        return ($value instanceof UploadedFile)\n            ? in_array(mb_trim(mb_strtolower($value->getClientOriginalExtension())), $phpExtensions)\n            : in_array(mb_trim(mb_strtolower($value->getExtension())), $phpExtensions);\n    }\n}\n"
  },
  {
    "path": "app/Rules/EntityLink.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse App\\Enums\\Permission;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass EntityLink implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        // Validate that tue url is for Kanka\n        if (! Str::startsWith($value, config('app.url'))) {\n            $fail(__('validation.entity_link'));\n        }\n\n        // Extract the campaign and entity\n        $value = Str::after($value, config('app.url'));\n        $value = mb_trim($value, '/');\n\n        $segments = explode('/', $value);\n        // 0: lang\n        // 1: campaign\n        // 2: campaign id\n        // 3: character|entities\n        // 4: id\n        if (count($segments) < 3) {\n            $fail(__('validation.entity_link'));\n        }\n\n        if ($segments[1] !== 'campaign' || ! is_numeric($segments[2])) {\n            $fail(__('validation.entity_link'));\n        }\n\n        // Check that the campaign is public\n        $campaign = Campaign::where('id', $segments[2])->first();\n        if (empty($campaign) || ! $campaign->isPublic()) {\n            $fail(__('validation.entity_link'));\n        }\n\n        // Are we targeting an entity or a misc?\n        $entity = null;\n        if ($segments[3] === 'entities') {\n            /** @var ?Entity $entity */\n            // @phpstan-ignore-next-line\n            $entity = Entity::where('id', (int) $segments[4])\n                ->where('campaign_id', $campaign->id)\n                ->allCampaigns()\n                ->withInvisible()\n                ->first();\n        } else {\n            $entityTypeID = config('entities.ids.' . Str::singular($segments[3]));\n            if (empty($entityTypeID)) {\n                $fail(__('validation.entity_link'));\n            }\n            // @phpstan-ignore-next-line\n            $entity = Entity::where('entity_id', (int) $segments[4])\n                ->allCampaigns()\n                ->withInvisible()\n                ->where('type_id', $entityTypeID)\n                ->where('campaign_id', $campaign->id)\n                ->first();\n        }\n        if (empty($entity) || $entity->is_private) {\n            $fail(__('validation.entity_link'));\n        }\n\n        // Figuring out if the entity is visible to the public role is going to be tricky, so let's start doing some magic.\n        $publicRole = $campaign->roles()->public()->first();\n        if (empty($publicRole)) {\n            $fail(__('validation.entity_link'));\n        }\n\n        $permission = $publicRole->permissions()\n\n            ->where(function ($sub) use ($entity) {\n                return $sub->where('entity_id', $entity->id)\n                    ->orWhere('entity_type_id', $entity->typeId());\n            })\n            ->where('access', 1)\n            ->where('action', Permission::View->value)\n            ->first();\n\n        // We don't check for the public role have deny as a permission, this is good enough\n        if (empty($permission)) {\n            $fail(__('validation.entity_link'));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/FontAwesomeIcon.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass FontAwesomeIcon implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (Str::startsWith($value, '<i ')) {\n            $fail(__('validation.fontawesome', ['example' => '<code>fa-solid fa-skull</code>']));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/GallerySize.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Services\\Gallery\\StorageService;\nuse Closure;\nuse Exception;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass GallerySize implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        /** @var StorageService $service */\n        $service = app()->make(StorageService::class);\n        $available = $service->campaign(CampaignLocalization::getCampaign())->available();\n\n        if (! is_object($value)) {\n            $fail('File isn\\'t a stream');\n\n            return;\n        }\n\n        try {\n            $size = (int) floor($value->getSize() / 1024);\n            if ($size > $available) {\n                $available = $this->human($available);\n                $fail(__('campaigns/gallery.errors.storage', ['available' => $available]) . ' (storage_full)');\n            }\n        } catch (Exception $e) {\n            $available = $this->human($available);\n            $fail(__('campaigns/gallery.errors.storage', ['available' => $available]) . ' (storage_full)');\n        }\n    }\n\n    public function human(int $value): string\n    {\n        if ($value > 1000000) {\n            return floor($value / (1024 * 1024)) . ' GB';\n        } elseif ($value > 1000) {\n            return floor($value / 1024) . ' MB';\n        }\n\n        return $value . ' KB';\n    }\n}\n"
  },
  {
    "path": "app/Rules/GoodBye.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass GoodBye implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n\n        if (! Str::is(mb_strtolower($value), 'goodbye')) {\n            $fail(__('validation.goodbye', ['code' => 'goodbye']));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/Lessless.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass Lessless implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (is_string($value) && Str::contains(mb_strtolower($value), '<')) {\n            $fail(__('validation.forbidden_letter', ['attribute' => $attribute, 'letter' => '&lt;']));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/Location.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\EntityType;\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass Location implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        /** @var EntityType $module */\n        $module = EntityType::find(config('entities.ids.location'));\n\n        if (is_numeric($value)) {\n            if (\\App\\Models\\Location::find($value)) {\n                return;\n            }\n            $fail(__('crud.dynamic.unknown', ['module' => $module->name()]));\n        }\n\n        if (empty(mb_trim($value))) {\n            return;\n        }\n\n        $campaign = CampaignLocalization::getCampaign();\n        if (! auth()->user()->can('create', [$module, $campaign])) {\n            $fail(__('crud.dynamic.permission', ['module' => $module->name()]));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/Nested.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse App\\Models\\Entity;\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass Nested implements ValidationRule\n{\n    public function __construct(\n        protected ?Entity $self = null\n    ) {}\n\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        // Don't allow setting the parent to an entity that is included in the target's children\n        if (empty($value) || empty($this->self)) {\n            return;\n        }\n\n        /** @var ?Entity $parent */\n        $parent = Entity::where('id', $value)->first();\n        if (! $parent) {\n            return;\n        }\n\n        $bloodline = $parent->ancestorsAndSelf()->pluck('id')->toArray();\n        if (in_array($this->self->id, $bloodline)) {\n            $fail('validation.nested_loop')->translate(['parent' => $parent->name]);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/Recaptcha.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Facades\\Http;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass Recaptcha implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        $data = [\n            'secret' => config('auth.recaptcha.secret'),\n            'response' => $value,\n        ];\n        $res = Http::asForm()->post('https://www.google.com/recaptcha/api/siteverify', $data);\n        // Log::info('Recaptcha request', $data);\n        if (! $res->json('success')) {\n            // Log::info('Recaptcha request', $res->json());\n            $fail(__('Invalid request, please try again.'));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/SocialLogin.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass SocialLogin implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        /** @var ?User $user */\n        $user = User::where('email', $value)->first();\n        if ($user && $user->isSocialLogin()) {\n            $fail(__('validation.social_login', ['provider' => Str::upper($user->provider)]));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/UniqueAttributeNames.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass UniqueAttributeNames implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        $attributes = [];\n        foreach ($value as $att) {\n            $attributes[] = json_decode($att, true);\n        }\n        $names = array_column($attributes, 'name');\n        if (! (count($names) === count(array_flip($names)))) {\n            $fail(__('validation.attribute_unique'));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Rules/Vanity.php",
    "content": "<?php\n\nnamespace App\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nclass Vanity implements ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        $value = mb_trim($value);\n        if (Str::contains($value, '/')) {\n            $fail(__('campaigns/vanity.rule2', ['field' => $attribute]));\n        }\n\n        if (! preg_match('`[a-zA-Z]+`', $value)) {\n            $fail(__('campaigns/vanity.rule', ['field' => $attribute]));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Sanitizers/CalendarSanitizer.php",
    "content": "<?php\n\nnamespace App\\Sanitizers;\n\nclass CalendarSanitizer extends MiscSanitizer\n{\n    protected int $monthCount = 0;\n\n    public function sanitize(): array\n    {\n        // Handle months\n        $months = $this->cleanMonths();\n\n        $this\n            ->cleanWeekdays()\n            ->cleanYearNames()\n            ->cleanWeekNames()\n            ->cleanMoons()\n            ->cleanSeasons()\n            ->cleanDate();\n\n        // Leap year\n        $this->cleanLeap($months);\n\n        return $this->data;\n    }\n\n    protected function cleanMonths(): array\n    {\n        $months = [];\n        $monthNames = (array) $this->request->post('month_name', []);\n        $monthLengths = (array) $this->request->post('month_length', []);\n        $monthAliases = (array) $this->request->post('month_alias', []);\n        $monthTypes = (array) $this->request->post('month_type', []);\n\n        foreach ($monthNames as $name) {\n            if (empty($name)) {\n                continue;\n            }\n\n            // We want a month length of at least 1 day\n            $length = (int) $monthLengths[$this->monthCount];\n            $months[] = [\n                'name' => $this->purify($name),\n                'length' => max($length, 1),\n                'type' => $monthTypes[$this->monthCount] ?? 'standard',\n                'alias' => $this->purify($monthAliases[$this->monthCount] ?? ''),\n            ];\n            $this->monthCount++;\n        }\n        $this->data['months'] = json_encode($months);\n\n        return $months;\n    }\n\n    protected function cleanWeekdays(): self\n    {\n        $weekdays = [];\n        $weekdayNames = (array) $this->request->post('weekday', []);\n        foreach ($weekdayNames as $name) {\n            if (empty($name)) {\n                continue;\n            }\n\n            $weekdays[] = $this->purify($name);\n        }\n        $this->data['weekdays'] = json_encode($weekdays);\n\n        return $this;\n    }\n\n    protected function cleanYearNames(): self\n    {\n        $years = [];\n        $yearCount = 0;\n        $yearValues = (array) $this->request->post('year_number', []);\n        $yearNames = (array) $this->request->post('year_name', []);\n        if (! empty($yearValues)) {\n            foreach ($yearValues as $year) {\n                if (empty($year)) {\n                    continue;\n                }\n                // Save the leap year\n                $years[$year] = $this->purify($yearNames[$yearCount] ?? $year);\n                $yearCount++;\n            }\n        }\n        $this->data['years'] = json_encode($years);\n\n        return $this;\n    }\n\n    protected function cleanWeekNames(): self\n    {\n        $weeks = [];\n        $weekCount = 0;\n        $weekValues = (array) $this->request->post('week_number', []);\n        $weekNames = (array) $this->request->post('week_name', []);\n        if (! empty($weekValues)) {\n            foreach ($weekValues as $week) {\n                if (empty($week)) {\n                    continue;\n                }\n                // Save the leap year\n                $weeks[$week] = $this->purify($weekNames[$weekCount]);\n                $weekCount++;\n            }\n        }\n        $this->data['week_names'] = json_encode($weeks);\n\n        return $this;\n    }\n\n    protected function cleanMoons(): self\n    {\n        $moons = [];\n        $moonCount = 0;\n        $moonValues = (array) $this->request->post('moon_fullmoon', []);\n        $moonNames = (array) $this->request->post('moon_name', []);\n        $moonOffsets = (array) $this->request->post('moon_offset', []);\n        $moonColours = (array) $this->request->post('moon_colour', []);\n        $moonIds = (array) $this->request->post('moon_id', []);\n\n        // Get the highest moon id\n        $autoMoonId = 0;\n        foreach ($moonIds as $id) {\n            if (! empty($id) && $id > $autoMoonId) {\n                $autoMoonId = $id;\n            }\n        }\n        $autoMoonId++;\n\n        if ($moonValues) {\n            foreach ($moonValues as $moon) {\n                if (empty($moon)) {\n                    continue;\n                }\n\n                $moonId = $moonIds[$moonCount];\n                if (empty($moonId)) {\n                    $moonId = $autoMoonId;\n                    $autoMoonId++;\n                }\n\n                $moons[] = [\n                    'name' => $this->purify($moonNames[$moonCount]),\n                    'fullmoon' => round((float) $moon, 10),\n                    'offset' => (int) $moonOffsets[$moonCount],\n                    'colour' => $this->purify($moonColours[$moonCount]),\n                    'id' => (int) $moonId,\n                ];\n                $moonCount++;\n            }\n        }\n        $this->data['moons'] = json_encode($moons);\n\n        return $this;\n    }\n\n    protected function cleanSeasons(): self\n    {\n        $seasons = [];\n        $seasonCount = 0;\n        $seasonNames = (array) $this->request->post('season_name', []);\n        $seasonMonths = (array) $this->request->post('season_month', []);\n        $seasonDays = (array) $this->request->post('season_day', []);\n        foreach ($seasonNames as $name) {\n            if (empty($name)) {\n                continue;\n            }\n\n            // We want a season length of at least 1 day\n            $month = (int) $seasonMonths[$seasonCount];\n            $day = (int) $seasonDays[$seasonCount];\n            $seasons[] = [\n                'name' => $this->purify($name),\n                'month' => $month < 1 ? 1 : $month,\n                'day' => $day,\n            ];\n            $seasonCount++;\n        }\n        $this->data['seasons'] = json_encode($seasons);\n\n        return $this;\n    }\n\n    protected function cleanDate(): self\n    {\n        // Calculate date\n        /** @var ?int $year */\n        $year = $this->request->post('current_year', '1');\n        $month = mb_ltrim($this->request->post('current_month', '1'), '0');\n        $day = mb_ltrim($this->request->post('current_day', '1'), '0');\n        $monthLengths = (array) $this->request->post('month_length', []);\n\n        // Empty values and skipping year 0\n        if ($year === null || ($this->request->skip_year_zero && $year == 0)) {\n            $year = 1;\n        }\n        if (empty($month)) {\n            $month = 1;\n        }\n        if (empty($day)) {\n            $day = 1;\n        }\n        if ($month > ($this->monthCount)) {\n            $month = $this->monthCount;\n        }\n        if (isset($monthLengths[$month - 1])) {\n            if ($day > $monthLengths[$month - 1]) {\n                $day = $monthLengths[$month - 1];\n            }\n        }\n\n        $this->data['date'] = \"{$year}-{$month}-{$day}\";\n\n        return $this;\n    }\n\n    protected function cleanLeap(array $months): self\n    {\n        if (! $this->request->filled('has_leap_year')) {\n            return $this;\n        }\n\n        if ($this->request->leap_year_month < 1) {\n            $this->data['leap_year_month'] = 1;\n        } elseif ($this->request->leap_year_month > count($months)) {\n            $this->data['leap_year_month'] = count($months);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Sanitizers/MiscSanitizer.php",
    "content": "<?php\n\nnamespace App\\Sanitizers;\n\nuse App\\Observers\\PurifiableTrait;\nuse Illuminate\\Http\\Request;\n\nclass MiscSanitizer\n{\n    use PurifiableTrait;\n\n    protected Request $request;\n\n    protected array $data = [];\n\n    public function request(Request $request): self\n    {\n        $this->request = $request;\n\n        return $this;\n    }\n\n    public function sanitize(): array\n    {\n        return $this->data;\n    }\n}\n"
  },
  {
    "path": "app/Sanitizers/SvgAllowedAttributes.php",
    "content": "<?php\n\nnamespace App\\Sanitizers;\n\nuse enshrined\\svgSanitize\\data\\AttributeInterface;\n\n/**\n * Class AllowedAttributes\n */\nclass SvgAllowedAttributes implements AttributeInterface\n{\n    /**\n     * Returns an array of attributes\n     *\n     * @return array\n     */\n    public static function getAttributes()\n    {\n        return [\n            // HTML\n            'accept',\n            'action',\n            'align',\n            'alt',\n            'autocomplete',\n            'background',\n            'bgcolor',\n            'border',\n            'cellpadding',\n            'cellspacing',\n            'checked',\n            'cite',\n            'class',\n            'clear',\n            'color',\n            'cols',\n            'colspan',\n            'coords',\n            'crossorigin',\n            'datetime',\n            'default',\n            'dir',\n            'disabled',\n            'download',\n            'enctype',\n            'face',\n            'for',\n            'headers',\n            'height',\n            'hidden',\n            'high',\n            'href',\n            'hreflang',\n            'id',\n            'integrity',\n            'ismap',\n            'label',\n            'lang',\n            'list',\n            'loop',\n            'low',\n            'max',\n            'maxlength',\n            'media',\n            'method',\n            'min',\n            'multiple',\n            'name',\n            'noshade',\n            'novalidate',\n            'nowrap',\n            'open',\n            'optimum',\n            'pattern',\n            'placeholder',\n            'poster',\n            'preload',\n            'pubdate',\n            'radiogroup',\n            'readonly',\n            'rel',\n            'required',\n            'rev',\n            'reversed',\n            'role',\n            'rows',\n            'rowspan',\n            'spellcheck',\n            'scope',\n            'selected',\n            'shape',\n            'size',\n            'sizes',\n            'span',\n            'srclang',\n            'start',\n            'startOffset',\n            'src',\n            'srcset',\n            'step',\n            'style',\n            'summary',\n            'tabindex',\n            'title',\n            'type',\n            'usemap',\n            'valign',\n            'value',\n            'width',\n            'xmlns',\n\n            // SVG\n            'accent-height',\n            'accumulate',\n            'additivive',\n            'alignment-baseline',\n            'ascent',\n            'attributename',\n            'attributetype',\n            'azimuth',\n            'basefrequency',\n            'baseline-shift',\n            'begin',\n            'bias',\n            'by',\n            'class',\n            'clip',\n            'clip-path',\n            'clip-rule',\n            'color',\n            'color-interpolation',\n            'color-interpolation-filters',\n            'color-profile',\n            'color-rendering',\n            'cx',\n            'cy',\n            'd',\n            'dx',\n            'dy',\n            'diffuseconstant',\n            'direction',\n            'display',\n            'divisor',\n            'dur',\n            'edgemode',\n            'elevation',\n            'end',\n            'fill',\n            'fill-opacity',\n            'fill-rule',\n            'filter',\n            'flood-color',\n            'flood-opacity',\n            'font-family',\n            'font-size',\n            'font-size-adjust',\n            'font-stretch',\n            'font-style',\n            'font-variant',\n            'font-weight',\n            'fx',\n            'fy',\n            'g1',\n            'g2',\n            'glyph-name',\n            'glyphref',\n            'gradientunits',\n            'gradienttransform',\n            'height',\n            'href',\n            'id',\n            'image-rendering',\n            'in',\n            'in2',\n            'k',\n            'k1',\n            'k2',\n            'k3',\n            'k4',\n            'kerning',\n            'keypoints',\n            'keysplines',\n            'keytimes',\n            'lang',\n            'lengthadjust',\n            'letter-spacing',\n            'kernelmatrix',\n            'kernelunitlength',\n            'lighting-color',\n            'local',\n            'marker-end',\n            'marker-mid',\n            'marker-start',\n            'markerheight',\n            'markerunits',\n            'markerwidth',\n            'maskcontentunits',\n            'maskunits',\n            'max',\n            'mask',\n            'media',\n            'method',\n            'mode',\n            'min',\n            'name',\n            'numoctaves',\n            'offset',\n            'operator',\n            'opacity',\n            'order',\n            'orient',\n            'orientation',\n            'origin',\n            'overflow',\n            'paint-order',\n            'path',\n            'pathlength',\n            'patterncontentunits',\n            'patterntransform',\n            'patternunits',\n            'points',\n            'preservealpha',\n            'preserveaspectratio',\n            'r',\n            'rx',\n            'ry',\n            'radius',\n            'rescale',\n            'refx',\n            'refy',\n            'repeatcount',\n            'repeatdur',\n            'restart',\n            'result',\n            'rotate',\n            'scale',\n            'seed',\n            'shape-rendering',\n            'specularconstant',\n            'specularexponent',\n            'spreadmethod',\n            'stddeviation',\n            'stitchtiles',\n            'stop-color',\n            'stop-opacity',\n            'stroke-dasharray',\n            'stroke-dashoffset',\n            'stroke-linecap',\n            'stroke-linejoin',\n            'stroke-miterlimit',\n            'stroke-opacity',\n            'stroke',\n            'stroke-width',\n            'style',\n            'surfacescale',\n            'tabindex',\n            'targetx',\n            'targety',\n            'transform',\n            'text-anchor',\n            'text-decoration',\n            'text-rendering',\n            'textlength',\n            'type',\n            'u1',\n            'u2',\n            'unicode',\n            'values',\n            'viewbox',\n            'visibility',\n            'vert-adv-y',\n            'vert-origin-x',\n            'vert-origin-y',\n            'width',\n            'word-spacing',\n            'wrap',\n            'writing-mode',\n            'xchannelselector',\n            'ychannelselector',\n            'x',\n            'x1',\n            'x2',\n            'xmlns',\n            'y',\n            'y1',\n            'y2',\n            'z',\n            'zoomandpan',\n\n            // MathML\n            'accent',\n            'accentunder',\n            'align',\n            'bevelled',\n            'close',\n            'columnsalign',\n            'columnlines',\n            'columnspan',\n            'denomalign',\n            'depth',\n            'dir',\n            'display',\n            'displaystyle',\n            'fence',\n            'frame',\n            'height',\n            'href',\n            'id',\n            'largeop',\n            'length',\n            'linethickness',\n            'lspace',\n            'lquote',\n            'mathbackground',\n            'mathcolor',\n            'mathsize',\n            'mathvariant',\n            'maxsize',\n            'minsize',\n            'movablelimits',\n            'notation',\n            'numalign',\n            'open',\n            'rowalign',\n            'rowlines',\n            'rowspacing',\n            'rowspan',\n            'rspace',\n            'rquote',\n            'scriptlevel',\n            'scriptminsize',\n            'scriptsizemultiplier',\n            'selection',\n            'separator',\n            'separators',\n            'slope',\n            'stretchy',\n            'subscriptshift',\n            'supscriptshift',\n            'symmetric',\n            'voffset',\n            'width',\n            'xmlns',\n\n            // XML\n            'xlink:href',\n            'xml:id',\n            'xlink:title',\n            'xml:space',\n            'xmlns:xlink',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Abilities/AbilityService.php",
    "content": "<?php\n\nnamespace App\\Services\\Abilities;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Mentions;\nuse App\\Models\\Attribute;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse App\\Models\\Tag;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Database\\Query\\JoinClause;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\nclass AbilityService extends BaseAbilityService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    /** @var array All the abilities of this entity, nicely prepared */\n    protected array $abilities = [\n        'groups' => [],\n        'meta' => [],\n    ];\n\n    protected array $groups = [];\n\n    /**\n     * Build a list of entities grouped by their parent\n     */\n    public function get(): array\n    {\n        $abilities = $this->entity->abilities()\n            ->select('entity_abilities.*')\n            ->with(['ability',\n                // entity\n                'ability.entity', 'ability.entity.image', 'ability.entity.attributes', 'ability.entity.attributes.entity',\n                'ability.entity.tags',\n                // parent\n                'ability.entity.parent', 'ability.entity.parent.tags', 'ability.entity.parent.image',\n            ])\n            ->join('abilities as a', 'a.id', 'entity_abilities.ability_id')\n            ->leftJoin('entities as ae', function (JoinClause $join) {\n                $join\n                    ->on('ae.entity_id', '=', 'a.id')\n                    ->where('ae.type_id', '=', config('entities.ids.ability'));\n            })\n            ->defaultOrder()\n            ->get();\n        /** @var EntityAbility $ability */\n        foreach ($abilities as $ability) {\n            // Can't read the ability? skip\n            if (empty($ability->ability) || empty($ability->ability->entity)) {\n                continue;\n            }\n            // If this ability has a parent ability, save it there\n            $this->add($ability);\n        }\n\n        // Reorder parents\n        $this->abilities['groups'] = $this->groups;\n        usort($this->abilities['groups'], function ($a, $b) {\n            return strcmp(mb_strtoupper($a['name']), mb_strtoupper($b['name']));\n        });\n\n        // Meta\n        $this->abilities['meta'] = [\n            'add_url' => route('entities.entity_abilities.create', [$this->campaign, $this->entity]),\n            'user_id' => $this->user->id ?? 0,\n            'is_admin' => isset($this->user) && $this->user->isAdmin(),\n        ];\n\n        return $this->abilities;\n    }\n\n    protected function add(EntityAbility $entityAbility): void\n    {\n        $ability = $entityAbility->ability;\n        $parent = $ability->entity->parent;\n\n        $groupKey = $parent->id ?? 'unorganised';\n\n        if (empty($this->groups[$groupKey])) {\n            if (empty($parent)) {\n                $this->groups[$groupKey] = [\n                    'id' => 0,\n                    'name' => __('entities/abilities.groups.unorganised'),\n                    'type' => __('entities/abilities.types.unorganised'),\n                    'abilities' => [],\n                ];\n            } else {\n                $type = empty($parent->type) ? Str::limit(strip_tags($parent->entry), 200) : $parent->type;\n                $this->groups[$groupKey] = [\n                    'id' => $parent->id,\n                    'name' => $parent->name,\n                    'type' => $type,\n                    'image' => Avatar::entity($parent)->size(192)->thumbnail(),\n                    'has_image' => $parent->hasImage(),\n                    'entry' => $parent->parsedEntry(),\n                    'url' => $parent->url(),\n                    'abilities' => [],\n                ];\n            }\n        }\n        // Add to their parent's abilities\n        $this->groups[$groupKey]['abilities'][] = $this->formatAbility($entityAbility);\n    }\n\n    /**\n     * Prepare the entity ability into a json object that can be used on the frontend\n     */\n    protected function formatAbility(EntityAbility $entityAbility): array\n    {\n        $classes = [];\n        $tags = $entityAbility->ability->entity->visibleTags();\n        foreach ($tags as $tag) {\n            $classes[] = ' kanka-tag-' . $tag->id;\n            $classes[] = ' kanka-tag-' . $tag->slug;\n\n            if ($tag->tag_id) {\n                $classes[] = ' kanka-tag-' . $tag->tag_id;\n            }\n        }\n        // implode(' ', $classes);\n\n        $note = nl2br((string) $this->mapAttributes(\n            Mentions::mapAny($entityAbility, 'note'),\n            false\n        ));\n        if (! empty($note)) {\n            $note = '<strong>' . __('entities/abilities.fields.note') . ':</strong> ' . $note;\n        }\n\n        $data = [\n            'id' => $entityAbility->id,\n            'ability_id' => $entityAbility->ability_id,\n            'name' => $entityAbility->ability->name,\n            'entry' => $this->parseEntry($entityAbility->ability),\n            'type' => $entityAbility->ability->entity->type,\n            'charges' => $this->parseCharges($entityAbility->ability),\n            'used_charges' => $entityAbility->charges,\n            'class' => $classes,\n            'note' => $note,\n            'tags' => $this->formatTags($tags),\n            'visibility_id' => $entityAbility->visibility_id,\n            'visibility' => $entityAbility->visibilityName(),\n            'created_by' => $entityAbility->created_by,\n            'attributes' => $this->attributes($entityAbility->ability->entity),\n            'images' => [\n                'has' => ! empty($entityAbility->ability->entity->image_path) || $entityAbility->ability->entity->image,\n                'thumb' => Avatar::entity($entityAbility->ability->entity)->size(192)->thumbnail(),\n                'url' => Avatar::entity($entityAbility->ability->entity)->original(),\n            ],\n            'actions' => [\n                'edit' => route('entities.entity_abilities.edit', [$this->campaign, $this->entity, $entityAbility]),\n                'update' => route('entities.entity_abilities.update', [$this->campaign, $this->entity, $entityAbility]),\n                'delete' => route('entities.entity_abilities.destroy', [$this->campaign, $this->entity, $entityAbility]),\n                'view' => route('entities.show', [$this->campaign, $entityAbility->ability->entity]),\n            ],\n            'i18n' => [\n                'edit' => __('crud.update'),\n                'left' => __('entities/abilities.charges.left'),\n            ],\n            'entity' => [\n                'id' => $entityAbility->ability->entity->id,\n                'tooltip' => route('entities.tooltip', [$this->campaign, $entityAbility->ability->entity->id]),\n            ],\n        ];\n\n        if (! empty($entityAbility->ability->charges)) {\n            $data['actions']['use'] = route('entities.entity_abilities.use', [$this->campaign, $this->entity, $entityAbility]);\n        }\n\n        return $data;\n    }\n\n    protected function attributes(Entity $entity): array\n    {\n        $attributes = [];\n        /** @var Attribute $attr */\n        foreach ($entity->attributes->sortBy('default_order') as $attr) {\n            $attributes[] = [\n                'id' => $attr->id,\n                'name' => $attr->name(),\n                'value' => Mentions::mapAttribute($attr),\n                'type' => $attr->type,\n            ];\n        }\n\n        return $attributes;\n    }\n\n    protected function formatTags(Collection $tags): array\n    {\n        $formatted = [];\n        /** @var Tag $tag */\n        foreach ($tags as $tag) {\n            $formatted[] = [\n                'id' => $tag->id,\n                'name' => $tag->name,\n                'url' => $tag->getLink(),\n                'tooltip' => route('entities.tooltip', [$this->campaign, $tag->entity]),\n                'class' => $tag->colourClass(),\n                'style' => $tag->colourStyle(),\n            ];\n        }\n\n        return $formatted;\n    }\n}\n"
  },
  {
    "path": "app/Services/Abilities/BaseAbilityService.php",
    "content": "<?php\n\nnamespace App\\Services\\Abilities;\n\nuse App\\Models\\Ability;\nuse App\\Models\\Attribute;\nuse App\\Traits\\EntityAware;\nuse ChrisKonnertz\\StringCalc\\Exceptions\\ContainerException;\nuse ChrisKonnertz\\StringCalc\\Exceptions\\NotFoundException;\nuse ChrisKonnertz\\StringCalc\\StringCalc;\nuse Exception;\nuse Illuminate\\Support\\Collection;\n\nabstract class BaseAbilityService\n{\n    use EntityAware;\n\n    protected Collection $attributes;\n\n    /**\n     * @return int|string|null\n     */\n    protected function parseCharges(Ability $ability)\n    {\n        if (empty($ability->charges)) {\n            return null;\n        }\n\n        if (is_int($ability->charges)) {\n            return $ability->charges;\n        }\n        try {\n            return $this->mapAttributes($ability->charges);\n        } catch (Exception $e) {\n            return null;\n        }\n    }\n\n    /**\n     * @return float|int|mixed\n     */\n    protected function parseEntry(Ability $ability)\n    {\n        $entry = $ability->entity->parsedEntry();\n        try {\n            return $this->mapAttributes($entry, false);\n        } catch (Exception $e) {\n            return $entry;\n        }\n    }\n\n    /**\n     * @return float|int|string|null\n     *\n     * @throws ContainerException\n     * @throws NotFoundException\n     */\n    protected function mapAttributes(string $haystack, bool $calc = true)\n    {\n        // Replace {} with entity attributes\n        $mappedText = preg_replace_callback('`\\{(.*?)\\}`i', function ($matches) {\n            // dd($matches);\n            $text = $matches[1];\n            if ($this->entityAttributes()->has($text)) {\n                return $this->entityAttributes()->get($text);\n            }\n\n            return 0;\n        }, $haystack);\n\n        if (! $calc) {\n            return $mappedText;\n        }\n\n        $calculator = new StringCalc;\n\n        return $calculator->calculate($mappedText);\n    }\n\n    /**\n     * @return array|Collection\n     */\n    protected function entityAttributes()\n    {\n        if (isset($this->attributes)) {\n            return $this->attributes;\n        }\n\n        $this->attributes = new Collection;\n\n        /** @var Attribute $attribute */\n        foreach ($this->entity->attributes as $attribute) {\n            $this->attributes->put($attribute->name, $attribute->mappedValue());\n        }\n\n        return $this->attributes;\n    }\n}\n"
  },
  {
    "path": "app/Services/Abilities/ChargeService.php",
    "content": "<?php\n\nnamespace App\\Services\\Abilities;\n\nuse App\\Models\\Ability;\nuse App\\Models\\EntityAbility;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\n\nclass ChargeService extends BaseAbilityService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected EntityAbility $ability;\n\n    public function ability(EntityAbility $ability): self\n    {\n        $this->ability = $ability;\n\n        return $this;\n    }\n\n    /**\n     * Set an ability's charge as used\n     */\n    public function use(int $used): bool\n    {\n        // Check that we are not above the parent\n        if ($used > $this->parseCharges($this->ability->ability)) {\n            return false;\n        }\n\n        $this->ability->charges = $used;\n        $this->ability->saveQuietly();\n\n        return true;\n    }\n\n    /**\n     * Reset the ability charges on the entity\n     */\n    public function reset(): self\n    {\n        $usedAbilities = $this->entity->abilities()->where('charges', '>', 0)->get();\n        /** @var Ability $ability */\n        foreach ($usedAbilities as $ability) {\n            $ability->charges = null;\n            $ability->saveQuietly();\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Abilities/ImportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Abilities;\n\nuse App\\Models\\Character;\nuse App\\Models\\EntityAbility;\nuse App\\Traits\\EntityAware;\nuse Exception;\n\nclass ImportService\n{\n    use EntityAware;\n\n    /**\n     * @throws Exception\n     */\n    public function import(): int\n    {\n        if (! $this->entity->isCharacter()) {\n            throw new Exception('not_character');\n        }\n        /** @var Character $character */\n        $character = $this->entity->child;\n        if (empty($character->characterRaces)) {\n            throw new Exception('no_race');\n        }\n        $count = 0;\n\n        // Existing abilities\n        $abilities = $this->entity->abilities()->with('ability')->get();\n        $existingIds = [];\n        foreach ($abilities as $ability) {\n            // The ability is soft-deleted so we can skip it\n            if (empty($ability) || empty($ability->ability)) {\n                continue;\n            }\n            $existingIds[] = $ability->ability_id;\n        }\n\n        $characterRaces = $character->characterRaces()->with('race', 'race.entity', 'race.entity.abilities')->get();\n        foreach ($characterRaces as $race) {\n            /** @var EntityAbility[] $abilities */\n            $abilities = $race->race->entity->abilities;\n            $count = 0;\n            foreach ($abilities as $ability) {\n                // If it's deleted or already on this entity, skip\n                if (empty($ability->ability) || in_array($ability->ability_id, $existingIds)) {\n                    continue;\n                }\n                $new = $ability->replicate(['entity_id']);\n                $new->entity_id = $this->entity->id;\n                $new->save();\n                $count++;\n            }\n        }\n\n        return $count;\n    }\n}\n"
  },
  {
    "path": "app/Services/Abilities/ReorderService.php",
    "content": "<?php\n\nnamespace App\\Services\\Abilities;\n\nuse App\\Http\\Requests\\ReorderAbility;\nuse App\\Models\\EntityAbility;\nuse App\\Traits\\EntityAware;\n\nclass ReorderService\n{\n    use EntityAware;\n\n    public function reorder(ReorderAbility $request): bool\n    {\n        $ids = $request->get('ability');\n\n        if (empty($ids)) {\n            return false;\n        }\n\n        $position = 1;\n        foreach ($ids as $id) {\n            /** @var ?EntityAbility $ability */\n            $ability = EntityAbility::find($id);\n            if ($ability === null || $ability->entity_id !== $this->entity->id) {\n                continue;\n            }\n\n            $ability->position = $position;\n            $ability->saveQuietly();\n            $position++;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Services/Account/DeletionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Account;\n\nuse App\\Jobs\\Users\\DeleteUser;\nuse App\\Models\\User;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\n\nclass DeletionService\n{\n    use RequestAware;\n    use UserAware;\n\n    public function delete(): bool\n    {\n        $this->subscription();\n        DeleteUser::dispatch($this->user);\n\n        auth()->logout();\n        $this->request->session()->invalidate();\n        $this->request->session()->regenerateToken();\n\n        // We also need to flush the session (campaign_id and other things) since this could cause\n        // unexpected behaviour if the user registers a new account.\n        $this->request->session()->flush();\n\n        return true;\n    }\n\n    /**\n     * Remove the user from stripe\n     */\n    protected function subscription(): void\n    {\n        if (! $this->user->hasStripeId()) {\n            return;\n        }\n\n        // If the user has no active or invalid payment\n        $sub = $this->user->subscription('kanka');\n        if (empty($sub) || $sub->canceled()) {\n            return;\n        }\n\n        // If their sub was failing\n        if ($sub->hasIncompletePayment()) {\n            $sub->cancel();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/ApiPermissionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse App\\Facades\\EntityPermission;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\n\nclass ApiPermissionService\n{\n    protected $cachedPermissions;\n\n    /**\n     * Get the permissions of an entity\n     */\n    protected function entityPermissions(Entity $entity): array\n    {\n        if (! empty($this->cachedPermissions)) {\n            return $this->cachedPermissions;\n        }\n\n        $permissions = ['user' => [], 'role' => []];\n        /** @var CampaignPermission $perm */\n        foreach (CampaignPermission::where('entity_id', $entity->id)->get() as $perm) {\n            $key = (! empty($perm->user_id) ? 'user' : 'role');\n            $subkey = (! empty($perm->user_id) ? $perm->user_id : $perm->campaign_role_id);\n            $permissions[$key][$subkey][$perm->action] = $perm;\n        }\n\n        return $this->cachedPermissions = $permissions;\n    }\n\n    /**\n     * @param  Request  $request\n     */\n    public function saveEntity($request, Entity $entity)\n    {\n        // First, let's get all the stuff for this entity\n        $permissions = $this->entityPermissions($entity);\n        $model = [];\n        // Next, start looping the data\n        foreach ($request->all() as $permission) {\n            if (! empty($permission['campaign_role_id'])) {\n                $key = 'role';\n                $key2 = 'campaign_role_id';\n            } else {\n                $key = 'user';\n                $key2 = 'user_id';\n            }\n            if (empty($permissions[$key][$permission[$key2]][$permission['action']])) {\n                $permission['campaign_id'] = $entity->campaign_id;\n                $permission['entity_type_id'] = $entity->type_id;\n                $permission['entity_id'] = $entity->id;\n                array_push($model, CampaignPermission::create($permission));\n            }\n        }\n\n        return $model;\n    }\n\n    /**\n     * @param  Request  $request\n     */\n    public function entityPermissionTest($request, Campaign $campaign): array\n    {\n        $previousUser = 0;\n        $permissionTest = [];\n        foreach ($request->all() as $test) {\n            $entityTypeId = null;\n            /** @var Entity|MiscModel|null $entity */\n            $entity = null;\n            $entityId = null;\n            if (! isset($user) || $user != $previousUser) {\n                $user = User::find($test['user_id']);\n                EntityPermission::resetPermissions();\n            }\n\n            if (isset($test['entity_type_id'])) {\n                $entityTypeId = $test['entity_type_id'];\n            } else {\n                $entity = Entity::find($test['entity_id']);\n                $entityTypeId = $entity->type_id;\n                $entityId = $entity->id;\n            }\n\n            $permission = EntityPermission::campaign($campaign)->user($user)->hasPermission($entityTypeId, $test['action'], $entity);\n\n            $permissionTest[] = ([\n                'entity_type_id' => $entityTypeId,\n                'entity_id' => $entityId,\n                'user_id' => $test['user_id'],\n                'action' => $test['action'],\n                'can' => $permission,\n            ]);\n            $previousUser = $user;\n        }\n\n        return $permissionTest;\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/ApiService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse Illuminate\\Support\\Facades\\DB;\n\nclass ApiService implements \\JsonSerializable\n{\n    public function jsonSerialize(): mixed\n    {\n        return count(DB::getQueryLog());\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/BulkAttributeService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse App\\Models\\Attribute;\nuse App\\Services\\Attributes\\BaseAttributesService;\nuse App\\Services\\Attributes\\RandomService;\nuse App\\Traits\\EntityAware;\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Log;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass BulkAttributeService extends BaseAttributesService\n{\n    use EntityAware;\n\n    protected array $existingNames = [];\n\n    protected bool $deleteOld = false;\n\n    protected RandomService $randomService;\n\n    public function __construct(RandomService $randomService)\n    {\n        $this->randomService = $randomService;\n    }\n\n    public function deleteOld(bool $deleteOld = true): self\n    {\n        $this->deleteOld = $deleteOld;\n\n        return $this;\n    }\n\n    /**\n     * Add form attributes to an entity\n     *\n     * @throws Exception\n     */\n    public function save(array $attributes): self\n    {\n        // First, let's get all the stuff for this entity\n        $existingAttributes = $this->entity->attributes()\n            // Need with() for saving to meilisearch\n            ->with('entity')\n            ->get();\n\n        foreach ($existingAttributes as $att) {\n            $this->existing[$att->id] = $att;\n            $this->existingNames[$att->id] = $att->name;\n        }\n\n        $this->purifyConfig();\n\n        foreach ($attributes as $attribute) {\n            $this->saveAttribute($attribute);\n        }\n\n        if ($this->deleteOld) {\n            // Remaining existing attributes have been deleted\n            foreach ($this->existing as $id => $attribute) {\n                $this->touched = true;\n                $attribute->delete();\n            }\n        }\n\n        return $this;\n    }\n\n    protected function saveAttribute(array $attributeArray): self\n    {\n        try {\n            // If they set an id we check if its a valid one, then fetch that attribute to edit it\n            if (isset($attributeArray['id'])) {\n                /** @var Attribute $attribute */\n                $attribute = Arr::get($this->existing, $attributeArray['id']);\n                // If its an existing attribute we remove it from the existing names list.\n                if (! empty($attribute)) {\n                    unset($this->existingNames[$attribute->id]);\n                }\n            }\n\n            /** @var Attribute $attr */\n            $attr = new Attribute($attributeArray);\n\n            if (empty($attr->name)) {\n                return $this;\n            }\n\n            // If patching an attribute with the same name as one existing, delete the old one.\n            if (! $this->deleteOld && in_array($attr->name, $this->existingNames)) {\n                $key = array_search($attr->name, $this->existingNames);\n\n                /** @var Attribute $attribute */\n                $attribute = Arr::get($this->existing, $key);\n                $this->touched = true;\n                $attribute->delete();\n            }\n\n            $name = Purify::config($this->purifyConfig)->clean($attr->name);\n            $value = Purify::config($this->purifyConfig)->clean($attr->value ?? '');\n            // Save empty strings as null\n            $value = $value === '' ? null : $value;\n\n            if (! isset($attribute)) {\n                $attribute = new Attribute;\n            }\n\n            // If the linked entity isn't an attribute template, we might be dealing with a random value\n            if (! $this->entity->isAttributeTemplate()) {\n                [$attr->type_id, $value] =\n                    $this->randomService->randomAttribute($attr->type_id, $value);\n            }\n\n            $attribute->name = $name;\n            $attribute->setValue($value);\n            $attribute->is_private = $attr->is_private ?? 0;\n            $attribute->is_pinned = $attr->is_pinned ?? 0;\n            $attribute->type_id = $attr->type_id;\n\n            // Some fields can only be defined on creation\n            if (! $attribute->exists) {\n                $attribute->entity_id = $this->entity->id;\n                $attribute->is_hidden = $attr->is_hidden ?? 0;\n                $attribute->origin_attribute_id = $attr->source_id ?? null;\n            }\n            $attribute->default_order = $this->order;\n            if ($attribute->isDirty() || ! $attribute->exists) {\n                $this->touched = true;\n            }\n            $attribute->save();\n\n            // Remove it from the list of existing ids, so that it doesn't get deleted\n            unset($this->existing[$attribute->id]);\n            // We add the new name to the list\n            $this->existingNames[$attribute->id] = $attribute->name;\n\n            $this->order++;\n        } catch (Exception $e) {\n            if (app()->isProduction()) {\n                Log::error($e->getMessage());\n            } else {\n                throw $e;\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/BulkEntityCreatorService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\UserAware;\n\nclass BulkEntityCreatorService\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use UserAware;\n\n    protected MiscModel $new;\n\n    protected Entity $entity;\n\n    protected array $data;\n\n    public function __construct(protected EntitySaveService $entitySaveService) {}\n\n    public function data(array $data): self\n    {\n        $this->data = $data;\n\n        return $this;\n    }\n\n    public function create(): Entity\n    {\n        if ($this->entityType->isCustom()) {\n            return $this->createEntity();\n        }\n        $this->new = $this->entityType->getMiscClass();\n        $this->new->fill($this->data);\n        $this->new->campaign_id = $this->campaign->id;\n        $this->new->save();\n        $this->entity = $this->new->entity;\n        $this->entitySaveService->save($this->entity, $this->data);\n\n        return $this->new->entity;\n    }\n\n    protected function createEntity(): Entity\n    {\n        $this->entity = new Entity($this->data);\n        $this->entity->type_id = $this->entityType->id;\n        $this->entity->campaign_id = $this->campaign->id;\n        $this->entity->save();\n        $this->entitySaveService->save($this->entity, $this->data);\n\n        return $this->entity;\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/CampaignService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse App\\Http\\Resources\\Public\\CampaignResource;\nuse App\\Models\\Campaign;\nuse App\\Models\\GameSystem;\nuse App\\Services\\GenreService;\nuse App\\Traits\\RequestAware;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Facades\\Cache;\n\nclass CampaignService\n{\n    use RequestAware;\n\n    protected array $data = [];\n\n    public function __construct(protected GenreService $genreService) {}\n\n    public function setup(): array\n    {\n        return $this->filters()\n            ->showcased()\n            ->data;\n    }\n\n    public function search(): array\n    {\n        return $this->campaigns()\n            ->data;\n    }\n\n    protected function filters(): self\n    {\n        $this->data['filters'] = [\n            'is_open' => [\n                'title' => 'Looking for players',\n            ],\n            'is_boosted' => [\n                'title' => 'Premium campaigns',\n            ],\n            'language' => [\n                'title' => 'Language',\n                'options' => [\n                    'en' => 'English',\n                    'pt-BR' => 'Brazilian Portuguese',\n                    'fr' => 'French',\n                    'de' => 'German',\n                    'es' => 'Spanish',\n                    'ru' => 'Russian',\n                    'it' => 'Italian',\n                    'pl' => 'Polish',\n                    'sk' => 'Slovak',\n                ],\n            ],\n            'system[]' => [\n                'title' => 'System',\n                'options' => $this->systemsOptions(),\n            ],\n            'genre' => [\n                'title' => 'Genre',\n                'options' => $this->genreService->getGenres(),\n            ],\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Build a list of featured campaigns\n     */\n    protected function showcased(): self\n    {\n\n        $this->data['featured'] = Campaign::public(false)\n            ->showcased()\n            ->get()\n            ->map(fn ($campaign) => new CampaignResource($campaign));\n\n        return $this;\n    }\n\n    /**\n     * Build a list of public campaigns\n     */\n    protected function campaigns(): self\n    {\n        $this->data['campaigns'] = [];\n\n        if ($this->usesDefaultFilters()) {\n            $this->data['campaigns'] = $this->cachedCampaigns();\n        } else {\n            $campaigns = Campaign::public()\n                ->front((int) $this->request->get('sort_field_name'))\n                ->filterPublic($this->request->only(['language', 'system', 'is_boosted', 'is_open', 'genre']))\n                ->paginate();\n            $this->data['campaigns'] = CampaignResource::collection($campaigns);\n        }\n\n        $this->campaignsMeta();\n\n        return $this;\n    }\n\n    /**\n     * Determine if the request comes with any filters\n     */\n    protected function usesDefaultFilters(): bool\n    {\n        return ! $this->request->anyFilled('sort_field_name', 'language', 'system', 'is_boosted', 'is_open', 'genre', 'page');\n    }\n\n    /**\n     * Cache the first page of campaigns with no filters for a day\n     */\n    protected function cachedCampaigns(int $hours = 24): AnonymousResourceCollection\n    {\n        return Cache::remember('public-campaigns-page-1', 24 * 3600, function () {\n            $campaigns = Campaign::public()\n                ->front()\n                ->filterPublic([])\n                ->paginate();\n\n            return CampaignResource::collection($campaigns);\n        });\n    }\n\n    /**\n     * Add some pagination data to the response\n     */\n    protected function campaignsMeta(): void\n    {\n        /** @var LengthAwarePaginator $paginator */\n        $paginator = $this->data['campaigns']->resource;\n        $this->data['pagination'] = [\n            'per_page' => $paginator->perPage(),\n            'current_page' => $paginator->currentPage(),\n            'total' => $paginator->total(),\n            'has_pages' => $paginator->hasPages(),\n            'next' => $paginator->nextPageUrl(),\n            'previous' => $paginator->previousPageUrl(),\n        ];\n    }\n\n    protected function systemsOptions(): array\n    {\n        return Cache::remember('campaign_systems', 24 * 3600, function () {\n            return GameSystem::withCount('campaignSystem')\n                ->orderByDesc('campaign_system_count')\n                ->limit(20)\n                ->pluck('name', 'id')\n                ->toArray();\n        });\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/FilterService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse App\\Models\\EntityType;\nuse App\\Traits\\EntityTypeAware;\n\nclass FilterService\n{\n    use EntityTypeAware;\n\n    public function endpoints()\n    {\n        $endpoints = [];\n        $types = EntityType::get();\n        foreach ($types as $type) {\n            $endpoints[] = [\n                'code' => $type->code,\n                'url' => url('/filters/' . $type->id),\n            ];\n        }\n\n        return $endpoints;\n    }\n\n    public function filters(): array\n    {\n        $model = $this->entityType->getClass();\n        if (method_exists($model, 'getFilterableColumns')) {\n            return $model->getFilterableColumns();\n        }\n\n        return [];\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/KbService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse App\\Models\\Faq;\nuse App\\Models\\FaqCategory;\n\nclass KbService\n{\n    public function api(): array\n    {\n        $data = [];\n\n        $categories = FaqCategory::visible()->ordered()->with(['faqs'])->get();\n        /** @var FaqCategory $category */\n        foreach ($categories as $category) {\n            $questions = [];\n\n            /** @var Faq $faq */\n            foreach ($category->sortedFaqs() as $faq) {\n                $questions[] = [\n                    'id' => $faq->id,\n                    'q' => $faq->question(),\n                    'a' => $faq->answer(),\n                    'slug' => $faq->slug(),\n                ];\n            }\n\n            if (empty($questions)) {\n                continue;\n            }\n\n            $data[] = [\n                'id' => $category->id,\n                'name' => $category->title,\n                'questions' => $questions,\n            ];\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/ShowcaseService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse App\\Http\\Resources\\Public\\CampaignResource;\nuse App\\Models\\Campaign;\nuse App\\Services\\GenreService;\nuse App\\Traits\\RequestAware;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Facades\\Cache;\n\nclass ShowcaseService\n{\n    use RequestAware;\n\n    protected array $data = [];\n\n    public function __construct(protected GenreService $genreService) {}\n\n    public function search(): array\n    {\n        return $this->campaigns()\n            ->data;\n    }\n\n    /**\n     * Build a list of public campaigns\n     */\n    protected function campaigns(): self\n    {\n        $this->data['campaigns'] = [];\n\n        if ($this->usesDefaultFilters() && ! app()->hasDebugModeEnabled()) {\n            $this->data['campaigns'] = $this->cachedCampaigns();\n        } else {\n            $campaigns = $this->baseQuery()\n                ->paginate();\n            $this->data['campaigns'] = CampaignResource::collection($campaigns);\n        }\n\n        $this->campaignsMeta();\n\n        return $this;\n    }\n\n    /**\n     * Determine if the request comes with any filters\n     */\n    protected function usesDefaultFilters(): bool\n    {\n        return ! $this->request->anyFilled('page');\n    }\n\n    /**\n     * Cache the first page of campaigns with no filters for a day\n     */\n    protected function cachedCampaigns(int $hours = 24): AnonymousResourceCollection\n    {\n        return Cache::remember('showcase-campaigns-page-1', $hours * 3600, function () {\n            $campaigns = $this\n                ->baseQuery()\n                ->paginate();\n\n            return CampaignResource::collection($campaigns);\n        });\n    }\n\n    protected function baseQuery(): Builder\n    {\n        return Campaign::public(false)\n            ->showcased(null)\n            ->with(['systems', 'spotlight']);\n    }\n\n    /**\n     * Add some pagination data to the response\n     */\n    protected function campaignsMeta(): void\n    {\n        /** @var LengthAwarePaginator $paginator */\n        $paginator = $this->data['campaigns']->resource;\n        $this->data['pagination'] = [\n            'per_page' => $paginator->perPage(),\n            'current_page' => $paginator->currentPage(),\n            'total' => $paginator->total(),\n            'has_pages' => $paginator->hasPages(),\n            'next' => $paginator->nextPageUrl(),\n            'previous' => $paginator->previousPageUrl(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Api/VoteService.php",
    "content": "<?php\n\nnamespace App\\Services\\Api;\n\nuse App\\Models\\CommunityVote;\n\nclass VoteService\n{\n    public function api(): array\n    {\n        $data = [];\n\n        $votes = CommunityVote::published()\n            ->orderBy('visible_at', 'DESC')\n            ->paginate(15);\n        foreach ($votes as $vote) {\n            $data[] = [\n\n            ];\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Services/AttributeMentionService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Attribute;\nuse App\\Models\\Entity;\nuse ChrisKonnertz\\StringCalc\\Exceptions\\ContainerException;\nuse ChrisKonnertz\\StringCalc\\Exceptions\\NotFoundException;\nuse ChrisKonnertz\\StringCalc\\StringCalc;\nuse Exception;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\nclass AttributeMentionService\n{\n    protected array $loadedAttributes = [];\n\n    protected Entity $loadedEntity;\n\n    protected Collection $calculatedAttributes;\n\n    /**\n     * Replace references in an attribute name with attribute values for ranges\n     *\n     * @throws ContainerException\n     * @throws NotFoundException\n     */\n    public function map(Attribute $attribute, string $field = 'name'): string\n    {\n        if (! $this->validField((string) $attribute->$field)) {\n            return (string) $attribute->$field;\n        }\n\n        if (! isset($this->loadedEntity) || $this->loadedEntity->id != $attribute->entity_id) {\n            // Referencing an attribute linked to an entity the user can't access\n            if (empty($attribute->entity)) {\n                return (string) $attribute->$field;\n            }\n            $this->loadedEntity = $attribute->entity;\n        }\n\n        try {\n            // Prepare all the attributes and calculates them\n            $this->entityAttributes();\n\n            $data = [\n                'name' => $attribute->name,\n                'value' => $attribute->$field,\n            ];\n            $value = $this->calculateAttributeValue($data);\n\n            return $value;\n        } catch (Exception $e) {\n            return $this->$field;\n        }\n    }\n\n    public function parse(Attribute $attribute, string $field = 'value'): string\n    {\n        if (! $this->validField((string) $attribute->$field)) {\n            return (string) $attribute->$field;\n        }\n\n        if (! isset($this->loadedEntity) || $this->loadedEntity->id != $attribute->entity_id) {\n            if (empty($attribute->entity)) {\n                return (string) $attribute->$field;\n            }\n            $this->loadedEntity = $attribute->entity;\n        }\n\n        try {\n            $calculated = $this->entityAttributes()->get($attribute->name);\n\n            return (string) $calculated['final'];\n        } catch (Exception $e) {\n            // throw $e;\n            return (string) $attribute->$field;\n        }\n    }\n\n    /**\n     * Determine if the text contains a valid attribute mention using {}\n     * Also ignore anything with html like mentions, as the calculator\n     * won't know what to do with such tags.\n     */\n    protected function validField(?string $value = null): bool\n    {\n        if (! Str::contains($value, ['{', '}'])) {\n            return false;\n        }\n\n        return ! (Str::contains($value, ['<', '>']));\n    }\n\n    /**\n     * Load all the entity attributes and pre-calculate the values\n     */\n    protected function entityAttributes(): Collection\n    {\n        if (isset($this->loadedAttributes[$this->loadedEntity->id])) {\n            return $this->loadedAttributes[$this->loadedEntity->id];\n        }\n\n        $baseAttributes = $this->loadedEntity->attributes()->orderBy('default_order')->pluck('value', 'name');\n\n        $this->calculatedAttributes = new Collection;\n\n        // Prepare our attributes with first level references\n        foreach ($baseAttributes as $name => $value) {\n            $references = [];\n            preg_match_all('`\\{(.*?)\\}`i', $value, $references);\n\n            // Cleanup attribute name to remove range stuff\n            $name = preg_replace('`\\[range:(.*)\\]`i', '', $name);\n\n            $this->calculatedAttributes->put($name, [\n                'value' => $value,\n                'loop' => false,\n                'name' => $name,\n                'final' => null,\n                'references' => ! empty($references[1]) ? $references[1] : [],\n            ]);\n        }\n\n        // Loop through the attributes and calculate the values\n        foreach ($this->calculatedAttributes as $name => $attribute) {\n            try {\n                // @phpstan-ignore-next-line\n                $this->calculatedAttributes[$name] = $this->calculateAttribute($attribute);\n            } catch (Exception $e) {\n                $attribute['loop'] = true;\n                $attribute['final'] = $attribute['value'];\n                $this->calculatedAttributes[$name] = $attribute;\n            }\n        }\n\n        return $this->loadedAttributes[$this->loadedEntity->id] = $this->calculatedAttributes;\n    }\n\n    /**\n     * Replace any attribute mentions in a string and result any math calculations in the resulting string\n     *\n     * @throws ContainerException\n     * @throws NotFoundException\n     */\n    protected function calculateAttributeValue(array $data, array $from = []): string\n    {\n        // If the final version is already calculated, use that\n\n        // dump('parsing ' . $data['name'] . ' value ' . $data['value']);\n\n        // First detect any loops going on here\n        if (in_array($data['name'], $from)) {\n            throw new Exception('loop detected on ' . $data['name']);\n        }\n\n        // Replace any attribute references\n        $final = preg_replace_callback('`\\{(.*?)\\}`i', function ($matches) use ($data, $from) {\n            $text = $matches[1];\n            // dump('checking for a reference called ' . $text);\n            $ref = $this->calculatedAttributes->get($text);\n            if ($ref) {\n                // dump('has an attribute called it!');\n                if (! empty($ref['final'])) {\n                    // dump('has a final version too');\n                    return $ref['final'];\n                } elseif ($ref['loop']) {\n                    return 0;\n                }\n                // dump('calculating final version for ' . $text . ' with value ' . $ref['value']);\n                $newFrom = $from;\n                $newFrom[] = $data['name'];\n\n                $ref['final'] = $this->calculateAttributeValue($ref, $newFrom);\n                $this->calculatedAttributes[$text] = $ref;\n\n                return $ref['final'];\n                /*} catch (Exception $e) {\n                    $ref['loop'] = true;\n                    $ref['final'] = $ref['value'];\n                    $this->calculatedAttributes[$text] = $ref;\n                    return 0;\n                }*/\n            }\n            if ($text == 'name') {\n                return (string) $this->loadedEntity->name;\n            }\n\n            return 0;\n        }, $data['value']);\n\n        try {\n            $calculator = new StringCalc;\n            $return = (string) $calculator->calculate($final);\n\n            return $return;\n        } catch (Exception $e) {\n            return $final;\n        }\n    }\n\n    /**\n     * Calculate the value of an attribute by performing math on it\n     */\n    protected function calculateAttribute(array $data): array\n    {\n        if (empty($data['references'])) {\n            $data['final'] = $data['value'];\n\n            return $data;\n        }\n\n        try {\n            $data['final'] = $this->calculateAttributeValue($data, []);\n        } catch (Exception $e) {\n            // dump($e->getMessage());\n            // dd('oh these is a loop in here');\n            $data['final'] = 0;\n            $data['loop'] = true;\n        }\n\n        return $data;\n    }\n\n    /**\n     * Check if a given attribute is flagged as being in a loop\n     */\n    public function isLoop(string $name): bool\n    {\n        if (! isset($this->calculatedAttributes) || $this->calculatedAttributes->isEmpty()) {\n            return false;\n        }\n        $ref = $this->calculatedAttributes->get($name);\n        if ($ref) {\n            return $ref['loop'];\n        }\n\n        return false;\n    }\n\n    public function organise(Collection $attributes): array\n    {\n        $sections = [];\n        $section = null;\n        /** @var Attribute $attribute */\n        foreach ($attributes as $attribute) {\n            if ($attribute->isSection()) {\n                if ($section !== null) {\n                    $sections[] = $section;\n                }\n                $section = [\n                    'id' => $attribute->id,\n                    'name' => $attribute->name(),\n                    'is_private' => $attribute->is_private,\n                    'attributes' => [],\n                ];\n\n                continue;\n            } elseif ($section === null) {\n                $section = [\n                    'id' => 0,\n                    'attributes' => [],\n                ];\n            }\n            $section['attributes'][] = $attribute;\n        }\n        $sections[] = $section;\n\n        return $sections;\n    }\n}\n"
  },
  {
    "path": "app/Services/AttributeService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\AttributeType;\nuse App\\Models\\Attribute;\nuse App\\Models\\AttributeTemplate;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\Entity;\nuse App\\Services\\Attributes\\BaseAttributesService;\nuse App\\Services\\Attributes\\RandomService;\nuse App\\Services\\Attributes\\TemplateService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Str;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass AttributeService extends BaseAttributesService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected array $existing = [];\n\n    protected array $names;\n\n    protected array $values;\n\n    protected array $types;\n\n    protected array $privates;\n\n    protected array $stars;\n\n    protected array $hidden;\n\n    protected RandomService $randomService;\n\n    protected TemplateService $templateService;\n\n    protected string $templateName;\n\n    public function __construct(RandomService $randomService, TemplateService $templateService)\n    {\n        $this->randomService = $randomService;\n        $this->templateService = $templateService;\n    }\n\n    /**\n     * Apply a template to an entity\n     *\n     * @param  int|string  $templateId\n     */\n    public function apply(Entity $entity, mixed $templateId): void\n    {\n        $this->templateService\n            ->entity($entity)\n            ->apply($templateId);\n    }\n\n    /**\n     * Add form attributes to an entity\n     *\n     * @throws Exception\n     */\n    public function save(array $attributes): self\n    {\n        // First, let's get all the stuff for this entity\n        $existingAttributes = $this->entity->attributes()\n            // Need with() for saving to meilisearch\n            ->with('entity')\n            ->get();\n        foreach ($existingAttributes as $att) {\n            $this->existing[$att->id] = $att;\n        }\n\n        $this->purifyConfig();\n\n        foreach ($attributes as $attribute) {\n            $this->saveAttribute($attribute);\n        }\n\n        // Remaining existing have been deleted\n        foreach ($this->existing as $id => $attribute) {\n            $this->touched = true;\n            $attribute->delete();\n        }\n\n        return $this;\n    }\n\n    protected function saveAttribute(string $attributeJson): self\n    {\n        try {\n            /** @var Attribute $attr */\n            $attr = json_decode($attributeJson);\n            if (empty($attr->name)) {\n                return $this;\n            }\n            $name = Purify::config($this->purifyConfig)->clean($attr->name);\n            $value = Purify::config($this->purifyConfig)->clean($attr->value ?? '');\n            // Save empty strings as null\n            $value = $value === '' ? null : $value;\n\n            /** @var Attribute $attribute */\n            $attribute = Arr::get($this->existing, $attr->id);\n            if (empty($attribute)) {\n                $attribute = new Attribute;\n            }\n\n            // If the linked entity isn't an attribute template, we might be dealing with a random value\n            if (! $this->entity->isAttributeTemplate()) {\n                [$attr->type, $value] =\n                    $this->randomService->randomAttribute(AttributeType::from($attr->type), $value);\n            }\n\n            $attribute->name = $name;\n            $attribute->setValue($value);\n            $attribute->is_private = $attr->is_private;\n            $attribute->is_pinned = $attr->is_pinned;\n            $attribute->type_id = $attr->type; // @phpstan-ignore-line\n            // Some fields can only be defined on creation\n            if (! $attribute->exists) {\n                $attribute->entity_id = $this->entity->id;\n                $attribute->is_hidden = $attr->is_hidden;\n                $attribute->origin_attribute_id = $attr->source_id ?? null;\n            }\n            $attribute->default_order = $this->order;\n            if ($attribute->isDirty() || ! $attribute->exists) {\n                $this->touched = true;\n            }\n            $attribute->save();\n\n            // Remove it from the list of existing ids, so that it doesn't get deleted\n            unset($this->existing[$attr->id]);\n            $this->order++;\n        } catch (Exception $e) {\n            if (app()->isProduction()) {\n                Log::error($e->getMessage());\n            } else {\n                throw $e;\n            }\n        }\n\n        return $this;\n    }\n\n    public function updateVisibility(bool $privateAttributes): self\n    {\n        // Only admins can update this value\n        if (! $this->user->isAdmin()) {\n            return $this;\n        }\n        $this->entity->is_attributes_private = $privateAttributes ? 1 : 0;\n        // If the setting was changed, the entity is dirty and will need be be touched later\n        if ($this->entity->isDirty('is_attributes_private')) {\n            $this->touched = true;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Apply attribute templates to a new entity\n     */\n    public function applyEntityTemplates(Entity $entity, int $order = 0): int\n    {\n        $typeId = $entity->typeId();\n        $templates = AttributeTemplate::has('entity')->enabled()->where(['entity_type_id' => $typeId])->get();\n        /** @var AttributeTemplate $template */\n        foreach ($templates as $template) {\n            $order = $template->apply($entity, $order);\n        }\n\n        return $order;\n    }\n\n    /**\n     * Deprecated?\n     */\n    public function templates(Campaign $campaign): array\n    {\n        $templates = [];\n\n        foreach (config('attribute-templates.templates') as $code => $class) {\n            $template = new $class;\n            $templates[$code] = $template->name();\n        }\n        // Get templates from the plugins\n        if ($campaign->boosted() && config('marketplace.enabled')) {\n            foreach (CampaignPlugin::templates($campaign)->get() as $plugin) {\n                if (empty($plugin->plugin)) {\n                    continue;\n                }\n                $templates[$plugin->plugin->uuid] = __('campaigns/plugins.templates.name', [\n                    'name' => $plugin->name,\n                    'user' => $plugin->plugin->author(),\n                ]);\n            }\n        }\n\n        return $templates;\n    }\n\n    /**\n     * Build a list of templates:\n     * - First display attribute templates from the campaign\n     * - Then display character sheets from the marketplace installed on the campaign\n     */\n    public function templateList(): array\n    {\n        $templates = [];\n\n        // Campaign templates\n        $campaignTemplates = AttributeTemplate::has('entity')\n            ->enabled()\n            ->orderBy('name', 'ASC')\n            ->pluck('name', 'id');\n        $key = __('entities.attribute_templates');\n        foreach ($campaignTemplates as $id => $name) {\n            $templates[$key][$id] = $name;\n        }\n\n        // Kanka templates - deprecated as of 1.30\n        //        $key = __('attributes/templates.list.kanka');\n        //        foreach (config('attribute-templates.templates') as $code => $class) {\n        //            $template = new $class();\n        //            $templates[$key][$code] = $template->name();\n        //        }\n\n        // If the campaign isn't boosted, or the marketplace isn't enable, end here\n        if (! $this->campaign->boosted() || ! config('marketplace.enabled')) {\n            return $templates;\n        }\n\n        // Marketplace campaigns\n        $key = __('attributes/templates.list.sheets');\n        foreach (CampaignPlugin::templates($this->campaign)->with(['plugin', 'plugin.user'])->get() as $plugin) {\n            if (empty($plugin->plugin)) {\n                continue;\n            }\n            $templates[$key][$plugin->plugin->uuid] = __('campaigns/plugins.templates.name', [\n                'name' => $plugin->name,\n                'user' => $plugin->plugin->author(),\n            ]);\n        }\n\n        return $templates;\n    }\n\n    public function replaceMentions(int $sourceId): self\n    {\n        $source = Entity::findOrFail($sourceId);\n\n        $sourceAttributes = [];\n        foreach ($source->attributes as $attribute) {\n            $sourceAttributes[Str::slug($attribute->name)] = $attribute->id;\n        }\n        $searchAttributes = $replaceAttributes = [];\n        foreach ($this->entity->attributes as $attribute) {\n            $slug = Str::slug($attribute->name);\n            if (! isset($sourceAttributes[$slug])) {\n                continue;\n            }\n            $searchAttributes[] = '{attribute:' . $sourceAttributes[$slug] . '}';\n            $replaceAttributes[] = '{attribute:' . $attribute->id . '}';\n        }\n        if ($this->entity->hasEntry()) {\n            $entry = Str::replace($searchAttributes, $replaceAttributes, $this->entity->entry);\n            $this->entity->update(['entry' => $entry]);\n        }\n        foreach ($this->entity->posts as $post) {\n            $post->entry = Str::replace($searchAttributes, $replaceAttributes, $post->entry);\n            $post->updateQuietly();\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Attributes/ApiService.php",
    "content": "<?php\n\nnamespace App\\Services\\Attributes;\n\nuse App\\Models\\Attribute;\nuse App\\Models\\AttributeTemplate;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Number;\nuse Illuminate\\Support\\Str;\n\nclass ApiService\n{\n    use CampaignAware;\n    use EntityAware;\n    use EntityTypeAware;\n    use UserAware;\n\n    protected Collection $attributes;\n\n    protected bool $copy = false;\n\n    protected bool $template = false;\n\n    public function copy(): self\n    {\n        $this->copy = true;\n\n        return $this;\n    }\n\n    public function build(): array\n    {\n        $this->buildAttributes();\n\n        return [\n            'attributes' => $this->attributes->toArray(),\n            'i18n' => $this->i18n(),\n            'meta' => $this->meta(),\n            'templates' => $this->templates(),\n        ];\n    }\n\n    protected function i18n(): array\n    {\n        return [\n            'actions' => [\n                'toggle' => __('entities/attributes.actions.toggle_privacy'),\n                'load' => __('entities/attributes.template.load.title'),\n                'help' => __('crud.actions.help'),\n                'search' => __('crud.search'),\n                'filters' => __('bookmarks.fields.filters'),\n            ],\n            'columns' => [\n                'attribute' => __('entities/attributes.fields.property'),\n                'value' => __('entities/attributes.fields.value'),\n                'pinned' => __('entities/attributes.fields.is_star'),\n                'private' => __('crud.fields.is_private'),\n                'delete' => __('crud.permissions.actions.delete'),\n                'preferences' => __('entities/attributes.fields.preferences'),\n            ],\n            'types' => [\n                'attribute' => __('entities/attributes.types.attribute'),\n                'multiline' => __('entities/attributes.types.text'),\n                'number' => __('entities/attributes.types.number'),\n                'section' => __('entities/attributes.types.section'),\n                'checkbox' => __('entities/attributes.types.checkbox'),\n                'random' => __('entities/attributes.types.random'),\n                'templates' => __('entities/attributes.types.kits'),\n            ],\n            'filters' => [\n                'show_hidden' => __('entities/attributes.actions.show_hidden'),\n                'no_results' => __('No results.'),\n            ],\n            'placeholders' => [\n                'name' => __('entities/attributes.labels.name'),\n                'checkbox_name' => __('entities/attributes.labels.checkbox'),\n                'section_name' => __('entities/attributes.labels.section'),\n                'multiline_name' => __('entities/attributes.placeholders.block'),\n                'value' => __('entities/attributes.placeholders.attribute'),\n                'number_value' => __('entities/attributes.placeholders.number'),\n            ],\n            'toasts' => [\n                'no_attributes_selected' => __('entities/attributes.errors.no_attribute_selected'),\n                'toggle_deleted' => __('entities/attributes.toasts.bulk_deleted'),\n                'toggled_privacy' => __('entities/attributes.toasts.bulk_privacy'),\n                'template' => __('entities/attributes.template.load.success'),\n                'max_reached' => __('entities/attributes.errors.too_many_v2', [\n                    'max' => Number::format($this->maxFields()),\n                ]),\n            ],\n            'templates' => [\n                'title' => __('entities/attributes.template.load.title'),\n                'template' => __('entities/attributes.fields.kit'),\n                'load' => __('entities/attributes.actions.load'),\n                'helper' => __('entities/attributes.template.pitch', [\n                    'plugin' => '<a href=\"' . config('marketplace.url') . '/character-sheets\" class=\"text-link\">' . __('footer.plugins') . '</a>',\n                ]),\n            ],\n        ];\n    }\n\n    protected function meta(): array\n    {\n        return [\n            'has_hidden' => false,\n            'is_admin' => isset($this->user) && $this->user->isAdmin(),\n            'template' => route('templates.load-attributes', $this->campaign),\n            'mentions' => route('search.live', $this->campaign),\n            'max' => $this->maxFields(),\n        ];\n    }\n\n    protected function buildAttributes(): void\n    {\n        $this->attributes = new Collection;\n        if (isset($this->entity)) {\n            foreach ($this->entity->attributes()->ordered()->get() as $attribute) {\n                $this->parseAttribute($attribute);\n            }\n        }\n        $this->buildAutoTemplates();\n        $this->buildPlaceholders();\n    }\n\n    protected function buildAutoTemplates(): void\n    {\n        if (! isset($this->entityType)) {\n            return;\n        }\n        $templates = $this->entityType\n            ->attributeTemplates()\n            ->with(['entity', 'entity.attributes', 'entity.ancestors'])\n            ->enabled()\n            ->has('entity')\n            ->get();\n        /** @var AttributeTemplate $template */\n        foreach ($templates as $template) {\n            $this->addTemplate($template);\n            /** @var AttributeTemplate $child */\n            foreach ($template->entity->ancestors()->with('attributeTemplate')->get() as $child) {\n                /** @var Entity $child */\n                if (! $child->attributeTemplate->isEnabled()) {\n                    continue;\n                }\n                /*if (!in_array($child->id, $ids)) {\n                    $ids[] = $child->id;\n                    $attributeTemplates[] = $child;\n                }*/\n                $this->addTemplate($child->attributeTemplate);\n            }\n        }\n    }\n\n    protected function buildPlaceholders(): void\n    {\n        /** @var ?Attribute $layout */\n        $layout = $this->attributes->where('name', '_layout')->first();\n        if (! $layout || ! Str::isUuid($layout['value'])) {\n            return;\n        }\n\n        /** @var ?CampaignPlugin $plugin */\n        $plugin = CampaignPlugin::templates($this->campaign)\n            ->select('campaign_plugins.*')\n            ->leftJoin('plugin_versions as pv', 'pv.plugin_id', 'campaign_plugins.plugin_id')\n            ->where('pv.uuid', $layout['value'])\n            ->has('plugin')\n            ->first();\n\n        // If the plugin is published, we're good. Otherwise, it's\n        if (empty($plugin) || ! $plugin->renderable()) {\n            return;\n        }\n\n        foreach ($plugin->version->attributes as $attribute) {\n            if (! isset($attribute['placeholder']) || empty($attribute['placeholder'])) {\n                continue;\n            }\n            $index = $this->attributes->search(function ($item) use ($attribute) {\n                return $item['name'] === $attribute['name'];\n            });\n            if ($index !== false) {\n                $ex = $this->attributes->get($index);\n                $ex['placeholder'] = $attribute['placeholder'];\n                $this->attributes->put($index, $ex);\n            }\n        }\n    }\n\n    protected function addTemplate(AttributeTemplate $template): void\n    {\n        if (! $template->entity) {\n            return;\n        }\n        $first = true;\n        $count = $template->entity->attributes->count();\n        $this->template = true;\n        foreach ($template->entity->attributes()->ordered()->get() as $attribute) {\n            $this->parseAttribute($attribute, $first ? $template : null, $count);\n            $first = false;\n        }\n        $this->template = false;\n\n        // Update the helper text of the attribute\n    }\n\n    protected function parseAttribute(Attribute $attribute, ?AttributeTemplate $template = null, int $templateTotalAttributes = 0): void\n    {\n        // If an attribute with the same name already exists, don't add it again\n        $existing = $this->attributes->where('name', $attribute->name)->first();\n        if ($existing) {\n            return;\n        }\n        $formatted = [\n            'id' => $this->copy ? null : $attribute->id,\n            'source_id' => $this->template ? $attribute->id : null,\n            'name' => $attribute->name,\n            'value' => $attribute->isCheckbox() ? (bool) $attribute->value : $attribute->value,\n            'is_section' => $attribute->isSection(),\n            'is_number' => $attribute->isNumber(),\n            'is_multiline' => $attribute->isText(),\n            'is_checkbox' => $attribute->isCheckbox(),\n            'is_random' => $attribute->isRandom(),\n            'is_private' => (bool) $attribute->is_private,\n            'is_pinned' => $attribute->isPinned(),\n            'is_hidden' => (bool) $attribute->is_hidden,\n            'is_checked' => false,\n            'is_deleted' => false,\n        ];\n\n        if ($attribute->isList()) {\n            $formatted['values'] = $attribute->listRange();\n        }\n\n        if ($template) {\n            $formatted['template'] = [\n                'id' => $template->id,\n                'name' => $template->name,\n                'url' => $template->getLink(),\n                'text' => trans_choice(\n                    'attribute_templates.hints.automatic',\n                    $templateTotalAttributes,\n                    [\n                        'link' => '<a href=\"' . $template->getLink() . '\" class=\"text-link\">' . $template->name . '</a>',\n                        'count' => \"<strong>{$templateTotalAttributes}</strong>\",\n                    ]\n                ),\n            ];\n        }\n\n        $this->attributes->add($formatted);\n    }\n\n    protected function templates(): array\n    {\n        $templates = [];\n\n        // Campaign templates\n        $campaignTemplates = AttributeTemplate::has('entity')\n            ->enabled()\n            ->orderBy('name', 'ASC')\n            ->pluck('name', 'id');\n        $key = __('entities.attribute_templates');\n        foreach ($campaignTemplates as $id => $name) {\n            $templates[$key][$id] = $name;\n        }\n\n        // If the campaign isn't boosted, or the marketplace isn't enable, end here\n        if (! $this->campaign->boosted() || ! config('marketplace.enabled')) {\n            return $templates;\n        }\n\n        // Marketplace campaigns\n        $key = __('attributes/templates.list.sheets');\n        foreach (CampaignPlugin::templates($this->campaign)->with(['plugin', 'plugin.user'])->get() as $plugin) {\n            if (empty($plugin->plugin)) {\n                continue;\n            }\n            $templates[$key][$plugin->plugin->uuid] = __('campaigns/plugins.templates.name', [\n                'name' => $plugin->name,\n                'user' => $plugin->plugin->author(),\n            ]);\n        }\n\n        return $templates;\n    }\n\n    /**\n     * Get the max amount of fields a form can have\n     */\n    protected function maxFields(): int\n    {\n        return app()->isProduction() ? ini_get('max_input_vars') : 200;\n    }\n}\n"
  },
  {
    "path": "app/Services/Attributes/BaseAttributesService.php",
    "content": "<?php\n\nnamespace App\\Services\\Attributes;\n\nuse App\\Models\\Attribute;\nuse App\\Traits\\EntityAware;\n\nabstract class BaseAttributesService\n{\n    use EntityAware;\n\n    protected Attribute $attribute;\n\n    protected array $purifyConfig;\n\n    protected array $existing = [];\n\n    protected int $order = 0;\n\n    protected bool $touched = false;\n\n    /**\n     * When we're done updating the attributes, if anything was changed, we need to \"touch\" the entity to have a log and\n     * updated timestamp.\n     */\n    public function touch(): self\n    {\n        if (! $this->touched) {\n            return $this;\n        }\n        $this->entity->touch();\n\n        return $this;\n    }\n\n    /**\n     * Prepare a custom HTML purifying config for attributes. We remove all custom fields that are added to purify.php\n     * and in PurifySetupProvider.\n     */\n    protected function purifyConfig(): self\n    {\n        $purifyConfig = config('purify.configs.default');\n        $purifyConfig['HTML.Allowed'] = preg_replace('`,a\\[(.*?)\\]`', '$2', $purifyConfig['HTML.Allowed']);\n        $purifyConfig['HTML.Allowed'] = preg_replace('`,iframe\\[(.*?)\\]`', '$2', $purifyConfig['HTML.Allowed']);\n        $purifyConfig['HTML.Allowed'] = preg_replace('`,summary\\[(.*?)\\]`', '$2', $purifyConfig['HTML.Allowed']);\n        $purifyConfig['HTML.Allowed'] = preg_replace('`,table\\[(.*?)\\]`', '$2', $purifyConfig['HTML.Allowed']);\n        $purifyConfig['HTML.Allowed'] = preg_replace('`,details\\[(.*?)\\]`', '$2', $purifyConfig['HTML.Allowed']);\n        $purifyConfig['HTML.Allowed'] = preg_replace('`,figure\\[(.*?)\\]`', '$2', $purifyConfig['HTML.Allowed']);\n        $purifyConfig['HTML.Allowed'] = preg_replace('`,figcaption\\[(.*?)\\]`', '$2', $purifyConfig['HTML.Allowed']);\n\n        $this->purifyConfig = $purifyConfig;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Attributes/RandomService.php",
    "content": "<?php\n\nnamespace App\\Services\\Attributes;\n\nuse App\\Enums\\AttributeType;\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\nclass RandomService\n{\n    protected AttributeType $type;\n\n    protected mixed $value;\n\n    /**\n     * Rewrite an attribute if it's a random value\n     */\n    public function randomAttribute(AttributeType $type, mixed $value): array\n    {\n        // Special case if the attribute is a random\n        if ($type != AttributeType::Random) {\n            return [$type, $value];\n        }\n\n        // Remap the type to a number attribute\n        $this->type = AttributeType::Standard;\n        $this->value = $value;\n\n        try {\n            // List of strings separated by commas\n            if (Str::contains($this->value, ',')) {\n                return $this->fromList();\n            } elseif (Str::contains($this->value, '-')) {\n                $this->type = AttributeType::Number;\n\n                return $this->fromRange();\n            }\n        } catch (Exception $e) {\n            // Something went wrong, let's assume the random value is badly formatted\n            return [$this->type, $this->value];\n        }\n\n        return [$this->type, $this->value];\n    }\n\n    /**\n     * Split an attribute by comma, selecting a value from the list\n     */\n    protected function fromList(): array\n    {\n        $values = explode(',', $this->value);\n        $validValues = [];\n        foreach ($values as $val) {\n            $val = mb_trim($val);\n            if (! empty($val)) {\n                $validValues[] = $val;\n            }\n        }\n\n        if (empty($validValues)) {\n            return [$this->type, $this->value];\n        } elseif (count($validValues) == 1) {\n            return [$this->type, Arr::first($validValues)];\n        }\n\n        return [$this->type, Arr::random($validValues)];\n    }\n\n    /**\n     * Fine a value between a range\n     */\n    protected function fromRange(): array\n    {\n        // Numerical value\n        $values = explode('-', $this->value);\n        if (count($values) !== 2) {\n            return [$this->type, $this->value];\n        }\n\n        $min = (int) mb_trim($values[0]);\n        $max = (int) mb_trim($values[1]);\n\n        return [$this->type, mt_rand($min, $max)];\n    }\n}\n"
  },
  {
    "path": "app/Services/Attributes/TemplateService.php",
    "content": "<?php\n\nnamespace App\\Services\\Attributes;\n\nuse App\\Enums\\AttributeType;\nuse App\\Models\\Attribute;\nuse App\\Models\\AttributeTemplate;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPlugin;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\nuse Kanka\\Dnd5eMonster\\Template;\n\nclass TemplateService\n{\n    use CampaignAware;\n    use EntityAware;\n\n    protected RandomService $randomService;\n\n    protected array $loadedTemplates = [];\n\n    protected array $loadedPlugins = [];\n\n    protected string $templateName;\n\n    public function __construct(RandomService $randomService)\n    {\n        $this->randomService = $randomService;\n    }\n\n    public function templateName(): string\n    {\n        return $this->templateName;\n    }\n\n    public function apply(mixed $templateId): bool\n    {\n        $templateIdInt = (int) $templateId;\n        if (Str::isUuid($templateId)) {\n            return $this->applyMarketplaceTemplate($templateId);\n        } elseif (is_int($templateIdInt) && ! empty($templateIdInt)) {\n            $attributeTemplate = $this->getAttributeTemplate($templateId);\n            $attributeTemplate->apply($this->entity);\n            $this->templateName = $attributeTemplate->name;\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Apply a marketplace character sheet on an entity based on its uuid. This is called in the BULK interface\n     *\n     * @todo: move to a separate service\n     */\n    public function applyMarketplaceTemplate(string $uuid): bool\n    {\n        $campaign = $this->entity->campaign;\n        if (! $campaign->boosted()) {\n            return false;\n        }\n\n        $plugin = $this->getMarketplacePlugin($uuid, $campaign);\n        if (empty($plugin)) {\n            return false;\n        }\n\n        $order = $this->entity->attributes()->count();\n        $existing = array_values($this->entity->attributes()->pluck('name')->toArray());\n        foreach ($plugin->version->attributes as $attribute) {\n            // If the config is simply a name, we default to a small varchar\n            if (! is_array($attribute)) {\n                continue;\n            }\n\n            // Don't re-create existing attributes.\n            $name = Arr::get($attribute, 'name', 'unknown');\n            if (in_array($name, $existing)) {\n                continue;\n            }\n            $type = Arr::get($attribute, 'type', '');\n            $type = $this->mapAttributeTypeToID($type);\n            $value = Arr::get($attribute, 'value', '');\n\n            [$type, $value] = $this->randomService->randomAttribute($type, $value);\n\n            $order++;\n\n            Attribute::create([\n                'entity_id' => $this->entity->id,\n                'name' => $name,\n                'value' => $value,\n                'default_order' => $order,\n                'is_private' => false,\n                'type_id' => $type,\n                'is_pinned' => false,\n                'is_hidden' => Arr::get($attribute, 'is_hidden', false),\n            ]);\n        }\n\n        // Layout attribute for rendering\n        $layout = '_layout';\n        if (! in_array($layout, $existing)) {\n            $order++;\n\n            Attribute::create([\n                'entity_id' => $this->entity->id,\n                'name' => '_layout',\n                'value' => $plugin->version->uuid,\n                'default_order' => $order,\n                'is_private' => false,\n                'is_pinned' => false,\n                'type_id' => AttributeType::Standard,\n            ]);\n        }\n\n        $this->entity->touch();\n        $this->templateName = $plugin->plugin->name;\n\n        return true;\n    }\n\n    /**\n     * Get a character sheet marketplace plugin model from the db based on its uuid\n     */\n    public function marketplaceTemplate(string $uuid): ?CampaignPlugin\n    {\n        if (! $this->campaign->boosted() || ! config('marketplace.enabled')) {\n            return null;\n        }\n\n        if (! Str::isUuid($uuid)) {\n            return null;\n        }\n\n        /** @var ?CampaignPlugin $plugin */\n        $plugin = CampaignPlugin::templates($this->campaign)\n            ->select('campaign_plugins.*')\n            ->leftJoin('plugin_versions as pv', 'pv.plugin_id', 'campaign_plugins.plugin_id')\n            ->where('pv.uuid', $uuid)\n            ->has('plugin')\n            ->first();\n\n        // If the plugin is published, we're good. Otherwise, it's\n        if (empty($plugin) || ! $plugin->renderable()) {\n            return null;\n        }\n\n        return $plugin;\n    }\n\n    /**\n     * Get an attribute template model from the campaign based on its ID\n     */\n    protected function getAttributeTemplate(int $templateId): AttributeTemplate\n    {\n        if (isset($this->loadedTemplates[$templateId])) {\n            return $this->loadedTemplates[$templateId];\n        }\n        /** @var AttributeTemplate $attributeTemplate */\n        $attributeTemplate = AttributeTemplate::findOrFail($templateId);\n\n        return $this->loadedTemplates[$templateId] = $attributeTemplate;\n    }\n\n    /**\n     * Get a marketplace plugin's model based on its UUID\n     *\n     * @return CampaignPlugin|null\n     */\n    protected function getMarketplacePlugin(string $pluginUuid, Campaign $campaign)\n    {\n        if (isset($this->loadedPlugins[$pluginUuid])) {\n            return $this->loadedPlugins[$pluginUuid];\n        }\n\n        return $this->loadedPlugins[$pluginUuid] = CampaignPlugin::templates($campaign)\n            ->select('campaign_plugins.*')\n            // ->leftJoin('plugins as p', 'p.id', 'plugin_id')\n            ->where('p.uuid', $pluginUuid)\n            ->first();\n    }\n\n    /**\n     * Map an attribute type from its string representation to an ID (as saved in the DB)\n     *\n     * @param  string|null  $type  the string type of attribute to be converted to an int\n     */\n    protected function mapAttributeTypeToID(?string $type = null): AttributeType\n    {\n        if (empty($type) || $type === 'attribute') {\n            return AttributeType::Standard;\n        }\n\n        $mapping = [\n            'text' => AttributeType::Block,\n            'checkbox' => AttributeType::Checkbox,\n            'section' => AttributeType::Section,\n            'block' => AttributeType::Section,\n            'random' => AttributeType::Random,\n            'number' => AttributeType::Number,\n            'list' => AttributeType::List,\n        ];\n\n        if (isset($mapping[$type])) {\n            return $mapping[$type];\n        }\n        dd('missing mapping for ' . $type);\n    }\n\n    /**\n     * Deprecated as of 1.30\n     * Get a community template base on its name to render properly\n     *\n     * @return bool|Template\n     */\n    public function communityTemplate(string $template)\n    {\n        $templates = config('attribute-templates.templates');\n        if (Arr::exists($templates, $template)) {\n            /** @var Template $template */\n            // @phpstan-ignore-next-line\n            return new $templates[$template];\n        }\n\n        return false;\n    }\n\n    public function api(string|int $template): array\n    {\n        $templateIdInt = (int) $template;\n        if (Str::isUuid($template)) {\n            return $this->loadCharacterSheet($template);\n        } elseif (is_int($templateIdInt) && ! empty($templateIdInt)) {\n            return $this->loadCampaignTemplate($template);\n        }\n\n        return [];\n    }\n\n    protected function loadCharacterSheet(string $template): array\n    {\n        $plugin = $this->getMarketplacePlugin($template, $this->campaign);\n        if (empty($plugin)) {\n            return [];\n        }\n\n        $attributes = [];\n        foreach ($plugin->version->attributes as $attribute) {\n            // If the config is simply a name, we default to a small varchar\n            if (! is_array($attribute)) {\n                continue;\n            }\n\n            // Don't re-create existing attributes.\n            $name = Arr::get($attribute, 'name', 'unknown');\n            $type = Arr::get($attribute, 'type', '');\n            $type = $this->mapAttributeTypeToID($type);\n            $value = Arr::get($attribute, 'value', '');\n\n            [$type, $value] = $this->randomService->randomAttribute($type, $value);\n\n            $attributes[] = [\n                'name' => $name,\n                'value' => $value,\n                'is_private' => false,\n                'is_pinned' => false,\n                'is_hidden' => (bool) Arr::get($attribute, 'is_hidden', false),\n                'is_checked' => false,\n                'is_deleted' => false,\n\n                'is_checkbox' => $type === AttributeType::Checkbox,\n                'is_multiline' => $type === AttributeType::Block,\n                'is_section' => $type === AttributeType::Section,\n                'is_number' => $type === AttributeType::Number,\n                'placeholder' => Arr::get($attribute, 'placeholder', ''),\n            ];\n        }\n\n        // Layout attribute for rendering\n        $attributes[] = [\n            'name' => '_layout',\n            'value' => $plugin->version->uuid,\n            'is_private' => false,\n            'is_pinned' => false,\n            'is_hidden' => false,\n            'is_checked' => false,\n            'is_deleted' => false,\n        ];\n\n        return $attributes;\n    }\n\n    protected function loadCampaignTemplate(int $templateId): array\n    {\n        $template = AttributeTemplate::findOrFail($templateId);\n        $attributes = [];\n\n        /** @var Attribute $attribute */\n        foreach ($template->entity->attributes()->orderBy('default_order', 'ASC')->get() as $attribute) {\n            [$type, $value] = $this->randomService->randomAttribute($attribute->type_id, $attribute->value);\n            $attribute->type_id = $type;\n\n            $attributes[] = [\n                'name' => $attribute->name,\n                'value' => $value,\n                'is_private' => (bool) $attribute->is_private,\n                'is_pinned' => $attribute->isPinned(),\n                'is_hidden' => false,\n                'is_checked' => false,\n                'is_deleted' => false,\n                'source_id' => $attribute->id,\n\n                'is_checkbox' => $attribute->isCheckbox(),\n                'is_multiline' => $attribute->isText(),\n                'is_random' => $attribute->isRandom(),\n                'is_section' => $attribute->isSection(),\n                'is_number' => $attribute->isNumber(),\n            ];\n        }\n\n        return $attributes;\n    }\n}\n"
  },
  {
    "path": "app/Services/Auth/LoginService.php",
    "content": "<?php\n\nnamespace App\\Services\\Auth;\n\nuse App\\Enums\\UserAction;\nuse App\\Enums\\UserFlags;\nuse App\\Facades\\UserCache;\nuse App\\Models\\UserFlag;\nuse App\\Models\\Users\\Tutorial;\nuse App\\Traits\\UserAware;\nuse Carbon\\Carbon;\n\nclass LoginService\n{\n    use UserAware;\n\n    public function logUserActivity(): self\n    {\n        $action = auth()->viaRemember() ? UserAction::autoLogin : UserAction::login;\n        $userLogType = session()->get('kanka.userLog', $action);\n        if ($this->user->isBanned()) {\n            $userLogType = session()->get('kanka.userLog', UserAction::bannedLogin);\n        }\n        $this->user->log($userLogType);\n        session()->remove('kanka.userLog');\n\n        return $this;\n    }\n\n    public function updateLastLoginTime(): self\n    {\n        $this->user->updateQuietly(['last_login_at' => Carbon::now()]);\n\n        return $this;\n    }\n\n    public function clearInactivityFlag(): self\n    {\n        // Delete any flags to auto-delete the account based on inactivity\n        UserFlag::where('user_id', $this->user->id)\n            ->whereIn('flag', [UserFlags::firstWarning->value, UserFlags::secondWarning->value])\n            ->delete();\n\n        return $this;\n    }\n\n    public function loadFlags(): self\n    {\n        // Only bother users for up to 30 days about their free trial\n        $flag = $this\n            ->user\n            ->flags()\n            ->freeTrial()\n            ->whereDate('created_at', '>=', Carbon::now()->subDays(30))\n            ->count() === 1;\n        if ($flag) {\n            // If the user \"dismissed\" the tutorial 2 or more days ago, cancel that\n            $count = $this->user->tutorials()\n                ->where('code', 'banner_free_trial')\n                ->whereDate('created_at', '<', Carbon::now()->subDays(2))\n                ->delete();\n            if ($count === 1) {\n                UserCache::user($this->user)->clear();\n            }\n            session()->put('kanka.freeTrial', true);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Auth/SessionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Auth;\n\nuse App\\Services\\InviteService;\nuse App\\Services\\StarterService;\nuse App\\Services\\Users\\CampaignService;\nuse App\\Traits\\UserAware;\nuse Exception;\n\nclass SessionService\n{\n    use UserAware;\n\n    public function __construct(\n        protected InviteService $inviteService,\n        protected StarterService $starterService,\n        protected CampaignService $campaignService\n    ) {}\n\n    public function handleInviteToken(): ?bool\n    {\n        // Does the user have a join campaign token?\n        if (! session()->has('invite_token')) {\n            return null;\n        }\n        try {\n            $campaign = $this->inviteService\n                ->user($this->user)\n                ->useToken(session()->get('invite_token'))\n                ->attribute()\n                ->campaign();\n            $this->campaignService\n                ->user($this->user)\n                ->campaign($campaign)\n                ->set();\n\n            return true;\n        } catch (Exception $e) {\n            // Silence errors here\n            return false;\n        }\n    }\n\n    public function handleFirstLogin(): ?bool\n    {\n        if (! session()->has('first_login')) {\n            return null;\n        }\n        try {\n            $this->starterService\n                ->user($this->user)\n                ->create();\n            session()->remove('first_login');\n\n            return true;\n        } catch (Exception $e) {\n            // Log exception or handle it properly\n            return false;\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/Services/BookmarkService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Http\\Requests\\ReorderBookmarks;\nuse App\\Models\\Bookmark;\n\nclass BookmarkService\n{\n    public function reorder(ReorderBookmarks $request): bool\n    {\n        $ids = $request->get('bookmark');\n        if (empty($ids)) {\n            return false;\n        }\n\n        $position = 1;\n        foreach ($ids as $id) {\n            /** @var ?Bookmark $link */\n            $link = Bookmark::where('id', $id)->first();\n            if (empty($link)) {\n                continue;\n            }\n\n            $link->position = $position;\n            $link->saveQuietly();\n            $position++;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Services/Bookmarks/RandomEntityService.php",
    "content": "<?php\n\nnamespace App\\Services\\Bookmarks;\n\nuse App\\Facades\\Dashboard;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Entity;\n\nclass RandomEntityService\n{\n    protected Bookmark $bookmark;\n\n    public function bookmark(Bookmark $bookmark): self\n    {\n        $this->bookmark = $bookmark;\n\n        return $this;\n    }\n\n    public function url(): ?string\n    {\n        $entityType = $this->bookmark->random_entity_type != 'any' ? $this->bookmark->random_entity_type : null;\n        $entityTypeID = null;\n        if (! empty($entityType)) {\n            $entityTypeID = config('entities.ids.' . $entityType);\n        }\n\n        /** @var ?Entity $entity */\n        $entity = Entity::inTags($this->bookmark->tags->pluck('id')->toArray())\n            ->inTypes($entityTypeID)\n            ->whereNotIn('entities.id', Dashboard::excluding())\n            ->orderByRaw('RAND()')\n            ->first();\n\n        if (empty($entity) || $entity->isMissingChild()) {\n            return null;\n        }\n\n        return $entity->url();\n    }\n}\n"
  },
  {
    "path": "app/Services/Bookmarks/RoutingService.php",
    "content": "<?php\n\nnamespace App\\Services\\Bookmarks;\n\nuse App\\Models\\Bookmark;\nuse App\\Traits\\CampaignAware;\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Route;\n\nclass RoutingService\n{\n    use CampaignAware;\n\n    protected Bookmark $bookmark;\n\n    public function bookmark(Bookmark $bookmark): self\n    {\n        $this->bookmark = $bookmark;\n\n        return $this;\n    }\n\n    /**\n     * Get the route the bookmark points to\n     */\n    public function url(): string\n    {\n        if ($this->bookmark->dashboard) {\n            $dashboard = $this->bookmark->dashboard_id;\n            if (Arr::get($this->bookmark->options, 'default_dashboard') === '1') {\n                $dashboard = 'default';\n            }\n\n            return route('dashboard', [$this->campaign, 'dashboard' => $dashboard, 'bookmark' => $this->bookmark->id]);\n        } elseif ($this->bookmark->isRandom()) {\n            return route('bookmarks.random', [$this->campaign, $this->bookmark->id]);\n        }\n\n        return ! empty($this->bookmark->entity_id) ? $this->getEntityRoute() : $this->getIndexRoute();\n    }\n\n    /**\n     * Generate a route for an entity's overview or subpage\n     */\n    protected function getEntityRoute(): string\n    {\n        $plural = $this->bookmark->target->entityType->pluralCode();\n        if (empty($plural)) {\n            return '';\n        }\n        $route = 'entities.show';\n        $entity = true;\n        if (! empty($this->bookmark->menu)) {\n            $menuRoute = $this->bookmark->target->entityType->pluralCode() . '.' . $this->bookmark->menu;\n            $entity = false;\n\n            // Inventories use a different url buildup\n            $routeOptions = [$this->campaign, $this->bookmark->target->id, 'bookmark' => $this->bookmark->id];\n            if ($this->bookmark->menu === 'inventory') {\n                return route('entities.inventory', $routeOptions);\n            } elseif ($this->bookmark->menu === 'relations') {\n                return route('entities.relations.index', $routeOptions);\n            } elseif ($this->bookmark->menu === 'abilities') {\n                if ($this->bookmark->target->isAbility()) {\n                    $routeOptions = [$this->campaign, $this->bookmark->target->entity_id, 'bookmark' => $this->bookmark->id];\n\n                    return route('abilities.abilities', $routeOptions);\n                }\n\n                return route('entities.entity_abilities.index', $routeOptions);\n            } elseif ($this->bookmark->menu === 'assets') {\n                return route('entities.entity_assets.index', $routeOptions);\n            } elseif ($this->bookmark->menu === 'reminders') {\n                return route('entities.reminders.index', $routeOptions);\n            } elseif ($this->bookmark->menu === 'attributes') {\n                return route('entities.attributes', $routeOptions);\n            }\n            if (Route::has($menuRoute)) {\n                $route = $menuRoute;\n            }\n        }\n\n        return route($route, $this->getRouteParams($entity));\n    }\n\n    /**\n     * Generate the route for a list of entities\n     */\n    protected function getIndexRoute(): string\n    {\n        $filters = $this->bookmark->filters . '&_clean=true&_from=bookmark&bookmark=' . $this->bookmark->id;\n        if (! empty($this->bookmark->options['is_nested']) && $this->bookmark->options['is_nested'] == '1') {\n            $filters .= '&n=1';\n        }\n        try {\n            return route('entities.index', [$this->campaign, $this->bookmark->entityType, $filters]);\n        } catch (Exception $e) {\n            return '/invalid';\n        }\n    }\n\n    public function getRouteParams(bool $entity): array\n    {\n        $parameters = [\n            $this->campaign,\n            $entity ? $this->bookmark->target : $this->bookmark->target->entity_id,\n            'bookmark' => $this->bookmark->id,\n        ];\n\n        if (! empty($this->bookmark->menu)) {\n            if ($this->bookmark->menu == 'all-members') {\n                $parameters['all_members'] = 1;\n            }\n            if (isset($this->bookmark->options['subview_filter'])) {\n                $parameters[] = $this->bookmark->options['subview_filter'];\n            }\n        }\n\n        return $parameters;\n    }\n}\n"
  },
  {
    "path": "app/Services/Bragi/BragiService.php",
    "content": "<?php\n\nnamespace App\\Services\\Bragi;\n\nuse App\\Exceptions\\OpenAiException;\nuse App\\Http\\Requests\\BragiRequest;\nuse App\\Models\\BragiLog;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass BragiService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected OpenAiService $openAI;\n\n    public function __construct(OpenAiService $service)\n    {\n        $this->openAI = $service;\n    }\n\n    public function prepare(): array\n    {\n        $data = [\n            'header' => __('bragi.intro', [\n                'name' => '<strong>Bragi</strong>',\n                'here' => '<a href=\"https://docs.kanka.io/en/latest/features/bragi.html\" class=\"text-link\">' . __('bragi.here') . '</a>',\n            ]),\n        ];\n        if (! $this->user->hasTokens()) {\n            return $this->renderError($data, 'invalid-sub');\n        } elseif ($this->user->availableTokens() <= 0) {\n            return $this->renderError($data, 'out-of-tokens', ['date' => $this->user->tokenRenewalDate()]);\n        }\n\n        $data['texts'] = [\n            'placeholder' => __('bragi.placeholders.prompt'),\n            'submit' => __('bragi.actions.generate'),\n            'insert' => __('bragi.actions.insert'),\n            'tokens' => __('bragi.token-limit', ['amount' => '<span class=\"token-amount font-bold\"></span>']),\n            'loading' => __('bragi.loading'),\n        ];\n\n        $data['limits'] = [\n            'prompt' => config('bragi.limit.prompt'),\n        ];\n        $data['tokens'] = $this->user->availableTokens();\n\n        return $data;\n    }\n\n    /**\n     * Call the API and generate a result for the user.\n     */\n    public function generate(BragiRequest $request): array\n    {\n        if (! $this->user->hasTokens()) {\n            return $this->renderError([], 'invalid-sub');\n        } elseif ($this->user->availableTokens() <= 0) {\n            return $this->renderError([], 'out-of-tokens', ['date' => $this->user->tokenRenewalDate()]);\n        }\n        $data = [];\n        $prompt = $request->get('prompt');\n        $context = [];\n        if ($request->filled('name')) {\n            $context['name'] = $request->get('name');\n        }\n        if ($request->filled('gender')) {\n            $context['gender'] = $request->get('gender');\n        }\n        if ($request->filled('pronouns')) {\n            $context['pronouns'] = $request->get('pronouns');\n        }\n\n        $openAI = $this\n            ->openAI\n            ->input($prompt, $context)\n            ->campaign($this->campaign)\n            ->generate();\n\n        try {\n            $data['result'] = $this->openAI->result();\n\n            $logs = [];\n            $logs = $openAI['usage'];\n\n            // Log the result into the db for admins\n            $this->log($prompt, $data['result'], $logs);\n        } catch (OpenAiException $e) {\n            $data['result'] = 'API error, please try again';\n            Log::warning('OpenAI error', $e->getContext());\n        }\n\n        $data['tokens'] = $this->user->availableTokens();\n        if ($data['tokens'] <= 0) {\n            $data['message'] = __('bragi.errors.out-of-tokens', ['date' => $this->user->tokenRenewalDate()]);\n        }\n\n        return $data;\n    }\n\n    /**\n     * Log what was generated into the db\n     *\n     * @return void\n     */\n    protected function log(string $prompt, string $result, array $data = [])\n    {\n        $log = new BragiLog;\n        $log->user_id = $this->user->id;\n        $log->campaign_id = $this->campaign->id;\n        $log->prompt = $prompt;\n        $log->result = $result;\n        $log->data = $data;\n        $log->save();\n    }\n\n    /**\n     * Prepare an error for the plugin\n     */\n    protected function renderError(array $data, string $error, array $params = []): array\n    {\n        $data['error'] = $error;\n        $data['message'] = __('bragi.errors.' . $error, $params);\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Services/Bragi/OpenAiService.php",
    "content": "<?php\n\nnamespace App\\Services\\Bragi;\n\nuse App\\Exceptions\\OpenAiException;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Orhanerday\\OpenAi\\OpenAi;\n\nclass OpenAiService\n{\n    use CampaignAware;\n\n    protected string $prompt;\n\n    protected ?string $name;\n\n    protected ?string $pronouns = null;\n\n    protected ?string $gender = null;\n\n    protected mixed $output;\n\n    public function input(string $prompt, array $context = []): self\n    {\n        $this->prompt = $prompt;\n        foreach ($context as $key => $value) {\n            $this->$key = $value;\n        }\n\n        return $this;\n    }\n\n    public function generate(): array\n    {\n        $token = config('openai.secret');\n        $openAi = new OpenAi($token);\n\n        $openAi->setCustomURL(config('openai.custom_url'));\n\n        // Creating prompt\n        $prompt = $this->preparePrompt();\n\n        // Choosing model\n        $engine = config('bragi.backstory.engine');\n\n        // Defining max tokens\n        // 1 token is almost 0.75 word\n        $maxTokens = config('bragi.backstory.tokens');\n\n        $complete = $openAi->chat([\n            'model' => $engine,\n            'messages' => $prompt,\n            'temperature' => config('bragi.backstory.temperature'),\n            'max_tokens' => $maxTokens,\n            'frequency_penalty' => config('bragi.backstory.frequency_penalty'),\n            'presence_penalty' => config('bragi.backstory.presence_penalty'),\n        ]);\n\n        $this->output = json_decode($complete, true);\n\n        return $this->output;\n    }\n\n    /**\n     * Generate the prompt to send to ChatGTP\n     */\n    protected function preparePrompt(): array\n    {\n        $prompts = [\n            [\n                'role' => 'system',\n                'content' => __('bragi/backstory.system'),\n            ],\n        ];\n\n        $roles = [];\n        if (! empty($this->name)) {\n            $roles[] = __('bragi/backstory.setup.name', ['name' => $this->name]);\n        }\n\n        if (! empty($this->pronouns)) {\n            $roles[] = __('bragi/backstory.setup.gender', ['gender' => $this->gender]);\n        }\n\n        if (! empty($this->gender)) {\n            $roles[] = __('bragi/backstory.setup.pronouns', ['pronouns' => $this->pronouns]);\n        }\n\n        if ($this->campaign->systems) {\n            $roles[] = __('bragi/backstory.setup.systems', ['systems' => $this->campaign->systems->pluck('name')->implode(', ')]);\n        }\n        if ($this->campaign->genres) {\n            // Comma-separated list of campaign genres\n            $list = new Collection;\n            foreach ($this->campaign->genres as $genre) {\n                $list->push(__('genres.' . $genre->slug));\n            }\n            $roles[] = __('bragi/backstory.setup.genres', ['genres' => $list->implode(', ')]);\n        }\n\n        $roles[] = __('bragi/backstory.setup.prompt', ['prompt' => $this->prompt]);\n        $roles[] = __('bragi/backstory.closing');\n\n        foreach ($roles as $role) {\n\n        }\n        $prompts[] = [\n            'role' => 'user',\n            'content' => implode(\"\\n\", $roles),\n        ];\n\n        return $prompts;\n    }\n\n    public function result(): string\n    {\n        if (! Arr::has($this->output, 'choices')) {\n            $excep = new OpenAiException;\n            $excep->setContext($this->output);\n            throw $excep;\n        }\n        $return = '';\n        $texts = explode(\"\\n\", $this->output['choices'][0]['message']['content']);\n        foreach ($texts as $text) {\n            $striped = mb_trim(htmlentities($text));\n            if (empty($striped) || $striped == '.') {\n                continue;\n            }\n            $return .= '<p>' . $text . '</p>';\n        }\n\n        // Disciple of Kankappy 0.x%\n        if (mt_rand(1, 1000) <= config('bragi.kankappy')) {\n            $return .= '<p>' . __('bragi.kankappy') . '</p>';\n        }\n\n        return $return;\n    }\n}\n"
  },
  {
    "path": "app/Services/BreadcrumbService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\EntityTypeAware;\n\nclass BreadcrumbService\n{\n    use CampaignAware;\n    use EntityAware;\n    use EntityTypeAware;\n\n    public function index(?string $name = null): string\n    {\n        // Determine the \"mode\" for logged-in users who prefer the old table view\n        $params = [];\n        $params['campaign'] = $this->campaign;\n\n        if (isset($this->entityType) && $this->entityType->hasEntity()) {\n            $params['entityType'] = $this->entityType;\n            $entityIndexRoute = route('entities.index', $params);\n        } elseif (isset($this->entity) && $this->entity->entityType->hasEntity()) {\n            $params['entityType'] = $this->entity->entityType;\n            $entityIndexRoute = route('entities.index', $params);\n        } else {\n            $entityIndexRoute = route($name . '.index', $params);\n        }\n\n        return $entityIndexRoute;\n    }\n\n    public function list(): array\n    {\n        return [\n            'url' => $this->index(),\n            'label' => isset($this->entityType) ? $this->entityType->plural() : $this->entity->entityType->plural(),\n        ];\n    }\n\n    public function show(): array\n    {\n        return [\n            'url' => route('entities.show', [$this->campaign, $this->entity]),\n            'label' => $this->entity->name,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/BulkService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Datagrids\\Bulks\\Bulk;\nuse App\\Exceptions\\TranslatableException;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\Relation;\nuse App\\Services\\Entity\\MoveService;\nuse App\\Services\\Entity\\Relations\\LocationRelationsService;\nuse App\\Services\\Entity\\TagService;\nuse App\\Services\\Entity\\TransformService;\nuse App\\Services\\Permissions\\BulkPermissionService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass BulkService\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use RequestAware;\n    use UserAware;\n\n    /** Ids of entities */\n    protected array $ids;\n\n    /** Total entities submitted for update */\n    protected int $total = 0;\n\n    /** Total entities that were updated */\n    protected int $count = 0;\n\n    public function __construct(\n        protected BulkPermissionService $permissionService,\n        protected TransformService $transformService,\n        protected MoveService $moveService,\n        protected LocationRelationsService $locationRelationsService,\n    ) {}\n\n    public function entities(array $ids = []): self\n    {\n        $this->ids = $ids;\n\n        return $this;\n    }\n\n    /**\n     * Total updated entities submitted (can be different from the total that was updated)\n     */\n    public function total(): int\n    {\n        return $this->total;\n    }\n\n    /**\n     * Delete several entities\n     *\n     * @throws Exception\n     */\n    public function delete(): int\n    {\n        $model = $this->getModel();\n        if (isset($this->entityType)) {\n            if (! $this->entityType->isBookmark()) {\n                $with = ['entityType', 'campaign'];\n                if ($this->entityType->isNested()) {\n                    $with[] = 'children';\n                }\n                $entities = Entity::with($with)->whereIn('id', $this->ids)->get();\n            } else {\n                $entities = $model->whereIn('id', $this->ids)->get();\n            }\n        } else {\n            $entities = $model->with('mirror')->whereIn('id', $this->ids)->get();\n        }\n        /** @var Entity|Relation $entity */\n        foreach ($entities as $entity) {\n            if (! $this->can('delete', $entity)) {\n                continue;\n            }\n            if ($this->request->get('delete_mirrored') && $entity->mirror) {\n                $entity->mirror->delete();\n                $this->count++;\n            }\n            $entity->delete();\n            $this->count++;\n        }\n\n        return $this->count;\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function export(): Collection\n    {\n        return Entity::whereIn('id', $this->ids)->get();\n    }\n\n    /**\n     * Set permissions for several entities\n     *\n     * @return int number of updated entities\n     */\n    public function permissions(array $permissions = [], bool $override = true): int\n    {\n        $entities = Entity::whereIn('id', $this->ids)->get();\n        foreach ($entities as $entity) {\n            if (! $this->can('update', $entity)) {\n                continue;\n            }\n            $this->permissionService\n                ->entity($entity)\n                ->override($override)\n                ->change($permissions);\n            $this->count++;\n        }\n\n        return $this->count;\n    }\n\n    /**\n     * @throws TranslatableException\n     */\n    public function copyToCampaign(Campaign $campaign): int\n    {\n        // First we make sure we have access to the new campaign.\n        // todo: move this to the request validator\n        $check = $this->user->campaigns()->where('campaign_id', $campaign->id)->first();\n        if (empty($check)) {\n            throw new TranslatableException('crud.move.errors.unknown_campaign');\n        }\n\n        $this->moveService\n            ->campaign($this->campaign)\n            ->copy(true)\n            ->to($campaign);\n\n        $with = [\n            'entityType', 'image', 'inventories', 'attributes',\n        ];\n        $entities = Entity::with($with)->whereIn('id', $this->ids)->get();\n\n        foreach ($entities as $entity) {\n            if (! $this->can('update', $entity)) {\n                continue;\n            }\n            if ($this->moveService->entity($entity)->process()) {\n                $this->count++;\n            }\n        }\n\n        return $this->count;\n    }\n\n    public function transform(EntityType $entityType): int\n    {\n        $this->transformService\n            ->entityType($entityType)\n            ->campaign($this->campaign);\n\n        $entities = Entity::whereIn('id', $this->ids)->get();\n\n        foreach ($entities as $entity) {\n            if (! $this->can('update', $entity)) {\n                continue;\n            }\n\n            $this->transformService->entity($entity);\n            $this->transformService->transform();\n            $this->count++;\n        }\n\n        return $this->count;\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function editing(array $fields, Bulk $bulk): int\n    {\n        $model = $this->getModel();\n\n        // Only get fields that can be bulk edited and with content\n        $fillableFields = Arr::only($fields, $bulk->fields());\n        $filledFields = [];\n        $filledForeigns = [];\n        foreach ($fillableFields as $field => $value) {\n            if (is_array($value) && ! empty($value)) {\n                $filledFields[$field] = $value;\n            } elseif (! empty($value) || ($value === '0' && Str::endsWith($field, '_id'))) {\n                $filledFields[$field] = mb_trim($value);\n            }\n        }\n\n        // Purify name\n        if (Arr::has($filledFields, 'name')) {\n            $filledFields['name'] = Purify::clean($filledFields['name']);\n        }\n\n        // Loop on boolean fields that can be true, false or null\n        foreach ($bulk->booleans() as $field) {\n            // Field wasn't provided in request, ignore\n            if (! Arr::has($fields, $field)) {\n                continue;\n            }\n            $value = Arr::get($fields, $field);\n            // If the field is a boolean type is_ or has_ and the value is null, we skip updating it\n            // Also skip colour when empty/null\n            if (Str::startsWith($field, ['is_', 'has_']) && $value === null) {\n                // Do nothing\n            } elseif ($field === 'colour' && empty($value)) {\n                // Do nothing\n            } else {\n                $filledFields[$field] = $value;\n            }\n        }\n\n        // Loop on all the bulk fields that are foreign relations\n        foreach ($bulk->foreignRelations() as $relation) {\n            // Field wasn't provided in request, ignore\n            if (! Arr::has($fields, $relation)) {\n                continue;\n            }\n            foreach ($fields[$relation] as $foreignID) {\n                if (! isset($filledForeigns[$relation])) {\n                    $filledForeigns[$relation] = [];\n                }\n                $filledForeigns[$relation][] = $foreignID;\n            }\n        }\n\n        // Private\n        if (isset($fields['is_private']) && $fields['is_private'] != null) {\n            $filledFields['is_private'] = $fields['is_private'] === '0';\n        }\n\n        // Active\n        if (isset($fields['is_active']) && $fields['is_active'] != null) {\n            $filledFields['is_active'] = $fields['is_active'] === '1';\n        }\n\n        // List of fields that can have +/- math operations, like a character's age\n        $maths = $bulk->maths();\n\n        // Handle tags differently\n        unset($filledFields['tags']);\n        $tagIds = Arr::get($fields, 'tags', []);\n\n        // Handle locations differently\n        unset($filledFields['locations']);\n        $locationIds = Arr::get($fields, 'locations', []);\n\n        // Handle creators differently\n        unset($filledFields['creators']);\n        $creatorIds = Arr::get($fields, 'creators', []);\n\n        // Handle images differently\n        if (isset($filledFields['entity_image'])) {\n            $imageUuid = $filledFields['entity_image'];\n            unset($filledFields['entity_image']);\n        }\n        if (isset($filledFields['entity_header'])) {\n            $headerUuid = $filledFields['entity_header'];\n            unset($filledFields['entity_header']);\n        }\n        if (isset($filledFields['type'])) {\n            $type = $filledFields['type'];\n            unset($filledFields['type']);\n        }\n\n        // Handle entity_type_id unset (value \"0\" means remove)\n        $unsetEntityType = false;\n        if (Arr::get($filledFields, 'entity_type_id') === '0') {\n            $unsetEntityType = true;\n            unset($filledFields['entity_type_id']);\n        }\n\n        // Handle status_id (entity-level field, \"0\" means remove)\n        $unsetStatus = false;\n        $newStatusId = null;\n        if (Arr::has($filledFields, 'status_id')) {\n            if (Arr::get($filledFields, 'status_id') === 'remove') {\n                $unsetStatus = true;\n            } else {\n                $newStatusId = $filledFields['status_id'];\n            }\n            unset($filledFields['status_id']);\n        }\n\n        if (! isset($this->entityType)) {\n            $mirrorOptions = [];\n            $mirrorOptions['unmirror'] = (bool) Arr::get($fields, 'unmirror', '0');\n            $mirrorOptions['update_mirrored'] = (bool) Arr::get($fields, 'update_mirrored', '0');\n\n            return $this->updateRelations($filledFields, $mirrorOptions);\n        }\n\n        $with = $this->entityType->hasEntity() ? ['tags'] : [];\n        $models = $model->with($with)->whereIn('id', $this->ids)->get();\n        foreach ($models as $entity) {\n            $this->total++;\n            if (! $this->can('update', $entity)) {\n                continue;\n            }\n            $entityFields = $filledFields;\n\n            // Handle math fields\n            foreach ($maths as $math) {\n                $mathField = Arr::get($entityFields, $math, false);\n                if ($mathField !== false && Str::startsWith($mathField, ['+', '-']) && is_numeric($entity->{$math})) {\n                    if (Str::startsWith($mathField, '+')) {\n                        $entityFields[$math] = $entity->child->{$math} + (int) Str::after($mathField, '+');\n                    } else {\n                        $entityFields[$math] = $entity->child->{$math} - (int) Str::after($mathField, '-');\n                    }\n                }\n            }\n            if ($this->entityType->hasEntity() && $this->entityType->isStandard()) {\n                $entity->child->update($entityFields);\n            } else {\n                // Relations, bookmarks\n                $entity->update($entityFields);\n            }\n\n            // Foreign belongsTo loop\n            foreach ($filledForeigns as $relation => $ids) {\n                if ($this->entityType->isStandard()) {\n                    $entity->child->{$relation}()->syncWithoutDetaching($ids);\n                } else {\n                    $entity->{$relation}()->syncWithoutDetaching($ids);\n                }\n            }\n\n            // We have to still update the entity object (except for bookmarks)\n            if (isset($imageUuid)) {\n                $entity->image_uuid = $imageUuid;\n                // Changed the image, reset the focus\n                $entity->focus_x = null;\n                $entity->focus_y = null;\n            }\n\n            if (isset($headerUuid)) {\n                $entity->header_uuid = $headerUuid;\n            }\n            if (isset($type)) {\n                $entity->type = $type;\n            }\n\n            // Sync parent_id if provided, preventing self-referencing\n            if (isset($entityFields['parent_id']) && intval($entityFields['parent_id']) != $entity->id) {\n                $entity->parent_id = $entityFields['parent_id'];\n            }\n\n            if ($newStatusId !== null) {\n                $entity->status_id = $newStatusId;\n            } elseif ($unsetStatus) {\n                $entity->status_id = null;\n            }\n\n            if ($this->entityType->hasEntity() && $this->entityType->isStandard()) {\n                $entity->is_private = $entity->child->is_private;\n                $entity->name = $entity->child->name;\n            }\n            $entity->update();\n\n            $this->count++;\n\n            $locationsAction = Arr::get($fields, 'bulk-locations', 'add');\n            if ($locationsAction === 'remove') {\n                $entity->locations()->detach($locationIds);\n            } elseif (! empty($locationIds)) {\n                $this->locationRelationsService->attach($entity, $locationIds);\n            }\n\n            // Handle creators (items only)\n            if ($this->entityType->hasEntity() && $this->entityType->isStandard() && method_exists($entity->child, 'creators')) {\n                if (Arr::get($fields, 'bulk-creators') === 'remove') {\n                    $entity->child->creators()->detach();\n                } elseif (! empty($creatorIds)) {\n                    $entity->child->creators()->syncWithoutDetaching($creatorIds);\n                }\n            }\n\n            // Handle entity_type_id unset (attribute templates only)\n            if ($unsetEntityType && $this->entityType->hasEntity() && $this->entityType->isStandard() && in_array('entity_type_id', $entity->child->getFillable())) {\n                $entity->child->update(['entity_type_id' => null]);\n            }\n\n            // No tags? We're done\n            if (empty($fields['tags'])) {\n                continue;\n            }\n\n            $tagAction = Arr::get($fields, 'bulk-tagging', 'add');\n            if ($tagAction === 'remove') {\n                $entity->tags()->detach($tagIds);\n            } else {\n                /** @var TagService $tagService */\n                $tagService = app()->make(TagService::class);\n                $tagService\n                    ->user($this->user)\n                    ->entity($entity)\n                    ->withNew()\n                    ->add($tagIds);\n                $entity->touch();\n            }\n        }\n\n        return $this->count;\n    }\n\n    /**\n     * Bulk apply attribute templates\n     *\n     * @param  string  $template\n     *\n     * @throws BindingResolutionException\n     */\n    public function templates(string|int $template): int\n    {\n        /** @var AttributeService $service */\n        $service = app()->make('App\\Services\\AttributeService');\n\n        $entities = Entity::whereIn('id', $this->ids)->get();\n\n        foreach ($entities as $entity) {\n            if (! $this->can('update', $entity)) {\n                continue;\n            }\n            $service->apply($entity, $template);\n            $this->count++;\n        }\n\n        return $this->count;\n    }\n\n    /**\n     * @throws Exception\n     */\n    protected function getModel()\n    {\n        if (isset($this->entityType)) {\n            if ($this->entityType->isBookmark()) {\n                return new Bookmark;\n            }\n\n            return new Entity;\n        }\n\n        return new Relation;\n    }\n\n    protected function updateRelations(array $filledFields, $mirrorOptions): int\n    {\n        $relations = Relation::whereIn('id', $this->ids)->get();\n\n        // If the colour is empty, unset it\n        if (empty($filledFields['colour'])) {\n            unset($filledFields['colour']);\n        }\n\n        /** @var Relation $relation */\n        foreach ($relations as $relation) {\n            $this->total++;\n            if (! $this->user->can('update', $relation)) {\n                // Can't update this? Technically not possible since bulk editing is only available\n                // for admins, but better safe than sorry\n                continue;\n            }\n            // Same owner and target? no bueno\n            if ($relation->owner_id == Arr::get($filledFields, 'target_id') || ($relation->target_id == Arr::get($filledFields, 'owner_id'))) {\n                continue;\n            }\n            if ($mirrorOptions['update_mirrored'] && $relation->mirror) {\n                $mirrorFields = Arr::except($filledFields, ['target_id', 'owner_id']);\n                $relation->mirror->update($mirrorFields);\n                $this->count++;\n                $this->total++;\n            }\n            if ($mirrorOptions['unmirror'] && $relation->mirror) {\n                $relation->mirror->update(['mirror_id' => null]);\n                $filledFields['mirror_id'] = null;\n                if (! $mirrorOptions['update_mirrored']) {\n                    $this->count++;\n                    $this->total++;\n                }\n            }\n            $relation->update($filledFields);\n            $this->count++;\n        }\n\n        return $this->count;\n    }\n\n    protected function can(string $action, $entity): bool\n    {\n        if (! isset($this->entityType) || ! $this->entityType->hasEntity() || $entity instanceof Entity) {\n            return $this->user->can($action, $entity);\n        }\n\n        return $this->user->can($action, $entity);\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/AdCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\Ad;\nuse Illuminate\\Support\\Facades\\Cache;\n\nclass AdCacheService\n{\n    /** @var Ad|bool|null */\n    protected $ad;\n\n    protected bool $ads = true;\n\n    protected ?int $currentId;\n\n    public function adless(): self\n    {\n        $this->ads = false;\n\n        return $this;\n    }\n\n    public function canHaveAds(): bool\n    {\n        return $this->ads;\n    }\n\n    public function get(): ?Ad\n    {\n        return $this->ad;\n    }\n\n    public function newId(bool $reset = false): self\n    {\n        if (! $reset && isset($this->currentId)) {\n            $this->currentId++;\n        } else {\n            $this->currentId = 1;\n        }\n\n        return $this;\n    }\n\n    public function id(string $key): string\n    {\n        if ($this->currentId === 1) {\n            return $key;\n        }\n\n        return $key . '_' . $this->currentId;\n    }\n\n    public function test(int $section, int $id): bool\n    {\n        $this->ad = Ad::select(['id', 'html'])->section($section)->where('id', $id)->first();\n\n        return ! empty($this->ad);\n    }\n\n    public function show(): string\n    {\n        return (string) $this->ad->html;\n    }\n\n    /**\n     * Check if there is an ad to be displayed\n     */\n    public function has(int $section): bool\n    {\n        $this->load($section);\n\n        return (bool) (! empty($this->ad));\n    }\n\n    /**\n     * Load the ad in memory\n     */\n    protected function load(int $section): self\n    {\n        if (! config('app.admin')) {\n            return $this;\n        }\n        $key = $this->cacheKey($section);\n        if (cache()->has($key)) {\n            $this->ad = cache()->get($key);\n\n            return $this;\n        }\n        $this->ad = Ad::select(['id', 'html'])->section($section)->where('is_active', true)->first();\n        // Save a \"false\" model in the db to avoid re-calling the db each time\n        if (empty($this->ad)) {\n            $this->ad = false;\n        }\n        cache()->put($key, $this->ad, 86400);\n\n        return $this;\n    }\n\n    /**\n     * Ad cache key for section\n     */\n    protected function cacheKey(int $section): string\n    {\n        return 'ad_section_' . $section;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/BaseCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Log;\n\n/**\n * Class BaseCache\n */\nabstract class BaseCache\n{\n    /**\n     * Wrapper for the cache forget method\n     */\n    protected function forget(string $key): bool\n    {\n        //        Log::info('Cache forget', [\n        //            'cache' => class_basename($this),\n        //            'key' => $key,\n        //        ]);\n        return Cache::forget($key);\n    }\n\n    /**\n     * Wrapper for the cache get method\n     */\n    protected function get(string $key)\n    {\n        return Cache::get($key);\n    }\n\n    /**\n     * Wrapper for the cache put method\n     */\n    protected function put(string $key, $data, int $ttl): bool\n    {\n        Log::info(class_basename($this), [\n            'put' => $key,\n        ]);\n\n        return Cache::put($key, $data, $ttl);\n    }\n\n    /**\n     * Wrapper for the cache forever method. Don't actually store forever as data from inactive users doesn't\n     * need to be kept somewhere.\n     */\n    protected function forever(string $key, $data, int $days = 7): bool\n    {\n        Log::info(class_basename($this), [\n            'forever' => $key,\n        ]);\n\n        return Cache::put($key, $data, $days * 86400);\n    }\n\n    /**\n     * Wrapper for the cache has metho\n     */\n    protected function has(string $key): bool\n    {\n        return Cache::has($key) && ! app()->environment('testing');\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/BookmarkCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\Bookmark;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass BookmarkCacheService extends BaseCache\n{\n    use CampaignAware;\n\n    public function iconSuggestion(): array\n    {\n        $key = $this->iconSuggestionKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            return Bookmark::where('campaign_id', $this->campaign->id)\n                ->whereNotNull('icon')\n                ->select(DB::raw('icon, MAX(created_at) as cmat'))\n                ->groupBy('icon')\n                ->orderBy('cmat', 'DESC')\n                ->take(10)\n                ->pluck('icon')\n                ->toArray();\n        });\n    }\n\n    public function clearSuggestion(): self\n    {\n        $this->forget(\n            $this->iconSuggestionKey()\n        );\n\n        return $this;\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function iconSuggestionKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_bookmark_suggestions';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/CampaignCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Services\\Caches\\Traits\\Campaign\\ApplicationCache;\nuse App\\Services\\Caches\\Traits\\Campaign\\DashboardCache;\nuse App\\Services\\Caches\\Traits\\Campaign\\FlagCache;\nuse App\\Services\\Caches\\Traits\\Campaign\\MemberCache;\nuse App\\Services\\Caches\\Traits\\Campaign\\RoleCache;\nuse App\\Services\\Caches\\Traits\\Campaign\\SettingCache;\nuse App\\Services\\Caches\\Traits\\Campaign\\StyleCache;\nuse App\\Services\\Caches\\Traits\\Campaign\\ThemeCache;\nuse App\\Services\\Caches\\Traits\\Campaign\\ThumbnailCache;\nuse App\\Services\\Caches\\Traits\\PrimaryCache;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\n/**\n * Class CampaignCacheService\n */\nclass CampaignCacheService extends BaseCache\n{\n    use ApplicationCache;\n    use CampaignAware;\n    use DashboardCache;\n    use FlagCache;\n    use MemberCache;\n    use PrimaryCache;\n    use RoleCache;\n    use SettingCache;\n    use StyleCache;\n    use ThemeCache;\n    use ThumbnailCache;\n    use UserAware;\n\n    protected function primaryData(): array\n    {\n        return [\n            'modules' => $this->formatSettings(),\n            'dashboards' => $this->formatDashboards(),\n            'members' => $this->formatMembers(),\n            'admin-role' => $this->formatAdminRole(),\n            'applications' => $this->formatApplications(),\n            'flags' => $this->formatFlags(),\n            'time' => time(),\n        ];\n    }\n\n    protected function primaryKey(): string\n    {\n        return 'campaign_' . $this->campaign->id;\n    }\n\n    public function clearSidebar(): self\n    {\n        $this->forget('campaign_' . $this->campaign->id . '_sidebar');\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/CharacterCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\Character;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CharacterCacheService extends BaseCache\n{\n    use CampaignAware;\n\n    public function genderSuggestion(): array\n    {\n        $key = $this->genderSuggestionKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            return Character::select(DB::raw('sex, MAX(created_at) as cmat'))\n                ->groupBy('sex')\n                ->whereNotNull('sex')\n                ->orderBy('cmat', 'DESC')\n                ->take(10)\n                ->pluck('sex')\n                ->toArray();\n        });\n    }\n\n    public function pronounSuggestion(): array\n    {\n        $key = $this->pronounSuggestionKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            return Character::select(DB::raw('pronouns, MAX(created_at) as cmat'))\n                ->groupBy('pronouns')\n                ->whereNotNull('pronouns')\n                ->orderBy('cmat', 'DESC')\n                ->take(10)\n                ->pluck('pronouns')\n                ->toArray();\n        });\n    }\n\n    public function clearSuggestion(): self\n    {\n        $this->forget(\n            $this->genderSuggestionKey()\n        );\n\n        $this->forget(\n            $this->pronounSuggestionKey()\n        );\n\n        return $this;\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function genderSuggestionKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_character_gender_suggestions';\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function pronounSuggestionKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_character_pronoun_suggestions';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/EntityAssetCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Models\\EntityAsset;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass EntityAssetCacheService extends BaseCache\n{\n    use CampaignAware;\n\n    public function iconSuggestion(): array\n    {\n        $key = $this->iconSuggestionKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            $default = [\n                'fa-brands fa-d-and-d-beyond',\n                'ra ra-aura',\n            ];\n\n            $data = [];\n\n            $icons = EntityAsset::leftJoin('entities as e', 'e.id', 'entity_assets.entity_id')\n                ->where('e.campaign_id', $this->campaign->id)\n                ->select(DB::raw('JSON_UNQUOTE(JSON_EXTRACT(metadata, \"$.icon\")) as icon\n, MAX(entity_assets.created_at) as cmat'))\n                ->groupBy('metadata')\n                ->whereNotNull('metadata->icon')\n                ->where('entity_assets.type_id', EntityAssetType::link)\n                ->orderBy('cmat', 'DESC')\n                ->take(10)\n                ->pluck('icon')\n                ->all();\n\n            return array_slice(array_unique(array_merge($icons, $default)), 0, 10);\n        });\n    }\n\n    public function clearSuggestion(): self\n    {\n        $this->forget(\n            $this->iconSuggestionKey()\n        );\n\n        return $this;\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function iconSuggestionKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_entity_asset_suggestions';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/EntityCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\MiscModel;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\n/**\n * Class EntityCacheService\n */\nclass EntityCacheService extends BaseCache\n{\n    use CampaignAware;\n\n    /**\n     * In-memory entity cache\n     */\n    protected array $entities = [];\n\n    public function typeSuggestion(EntityType $entityType): array\n    {\n        return Cache::remember($this->typeSuggestionKey($entityType->code), 24 * 3600, function () use ($entityType) {\n            return Entity::select(DB::raw('type, MAX(created_at) as cmat'))\n                ->groupBy('type')\n                ->whereNotNull('type')\n                ->where('type_id', $entityType->id)\n                ->orderBy('cmat', 'DESC')\n                ->take(20)\n                ->pluck('type')\n                ->all();\n        });\n    }\n\n    public function clearSuggestion(EntityType $entityType): self\n    {\n        $this->forget(\n            $this->typeSuggestionKey(\n                $entityType->code\n            )\n        );\n\n        return $this;\n    }\n\n    /**\n     * @return MiscModel|mixed\n     */\n    public function child(Entity $entity)\n    {\n        $key = $entity->type_id . '_' . $entity->entity_id;\n        if (isset($this->entities[$key])) {\n            return $this->entities[$key];\n        }\n\n        // Why are we doing ->first? because child is a loop to this function.\n        $child = $entity->child()->first();\n\n        return $this->entities[$key] = $child;\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function typeSuggestionKey(string $type): string\n    {\n        return 'campaign_' . $this->campaign->id . '_' . $type . '_type_suggestions';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/MapMarkerCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\MapMarker;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass MapMarkerCacheService extends BaseCache\n{\n    use CampaignAware;\n\n    public function iconSuggestion(): array\n    {\n        $key = $this->iconSuggestionKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            $default = [\n                'ra ra-tower',\n                'fa-solid fa-home',\n                'ra ra-capitol',\n                'fa-solid fa-skull',\n                'fa-solid fa-coins',\n                'ra ra-beer',\n                'fa-solid fa-map-marker-alt',\n                'fa-solid fa-thumbtack',\n                'ra ra-wooden-sign',\n                'fa-solid fa-map-pin',\n            ];\n\n            $data = MapMarker::leftJoin('maps as m', 'm.id', 'map_markers.map_id')\n                ->where('m.campaign_id', $this->campaign->id)\n                ->select(DB::raw('custom_icon, MAX(map_markers.created_at) as cmat'))\n                ->groupBy('custom_icon')\n                ->whereNotNull('custom_icon')\n                ->orderBy('cmat', 'DESC')\n                ->take(10)\n                ->pluck('custom_icon')\n                ->all();\n\n            foreach ($default as $value) {\n                if (! in_array($value, $data)) {\n                    $data[] = $value;\n                }\n            }\n\n            return array_slice($data, 0, 10);\n        });\n    }\n\n    public function clearSuggestion(): self\n    {\n        $this->forget(\n            $this->iconSuggestionKey()\n        );\n\n        return $this;\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function iconSuggestionKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_map_marker_suggestions';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/MarketplaceCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\Plugin;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass MarketplaceCacheService extends BaseCache\n{\n    public function counts(): array\n    {\n        $key = $this->countKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            $data = [\n                1 => 0,\n                2 => 0,\n                3 => 0,\n            ];\n            $bonus = config('app.debug') ? 22 : 1;\n            $counts = Plugin::where('status_id', 3)\n                ->groupBy('type_id')\n                ->select('type_id', DB::raw('count(*) as tot'))\n                ->get()\n                ->toArray();\n            foreach ($counts as $type) {\n                $data[$type['type_id']] = $type['tot'] * $bonus;\n            }\n\n            return $data;\n        });\n    }\n\n    public function clearCount(): self\n    {\n        $this->forget(\n            $this->countKey()\n        );\n\n        return $this;\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function countKey(): string\n    {\n        return 'marketplace_counts';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/QuestCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\QuestElement;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass QuestCacheService extends BaseCache\n{\n    use CampaignAware;\n\n    public function roleSuggestion(): array\n    {\n        $key = $this->roleSuggestionKey() . '2';\n\n        return Cache::remember($key, 24 * 3600, function () {\n            return QuestElement::select(DB::raw('role, MAX(created_at) as cmat'))\n                ->groupBy('role')\n                ->whereNotNull('role')\n                ->orderBy('cmat', 'DESC')\n                ->take(10)\n                ->pluck('role')\n                ->toArray();\n        });\n    }\n\n    public function clearSuggestion(): self\n    {\n        $this->forget(\n            $this->roleSuggestionKey()\n        );\n\n        return $this;\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function roleSuggestionKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_quest_element_role_suggestions';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/ReleaseCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\AppRelease;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Cache;\n\nclass ReleaseCacheService extends BaseCache\n{\n    public function latest(): Collection\n    {\n        if (! config('app.admin')) {\n            return new Collection;\n        }\n        $key = 'latest_releases_v3';\n\n        return Cache::remember($key, 24 * 3600 * 7, function () {\n            $date = Carbon::now();\n\n            return AppRelease::select('id', 'name', 'excerpt', 'link', 'category_id', 'created_at', 'published_at')\n                ->whereRaw('id IN (select MAX(id) FROM releases WHERE published_at < \\'' . $date . '\\' AND (end_at IS NULL OR end_at > \\'' . $date . '\\') GROUP BY category_id)')\n                // ->groupBy('category_id2')\n                ->latest('published_at')\n                ->get();\n        });\n    }\n\n    public function clearLatest(): bool\n    {\n        return $this->forget('latest_releases');\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/SingleUserCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\User;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Log;\n\n/**\n * @property User $user\n */\nclass SingleUserCacheService\n{\n    use UserAware;\n\n    public function entitiesCreatedCount(): int\n    {\n        $key = 'user_' . $this->user->id . '_entities_created_count';\n        if ($this->has($key)) {\n            return (int) $this->get($key);\n        }\n\n        $data = DB::table('entities')->where('created_by', $this->user->id)->count();\n\n        $this->forever($key, $data, 1);\n\n        return $data;\n    }\n\n    /**\n     * Wrapper for the cache get method\n     */\n    protected function get(string $key)\n    {\n        return Cache::get($key);\n    }\n\n    /**\n     * Wrapper for the cache forever method. Don't actually store forever as data from inactive users doesn't\n     * need to be kept somewhere.\n     */\n    protected function forever(string $key, $data, int $days = 7): bool\n    {\n        Log::info(class_basename($this), [\n            'forever' => $key,\n        ]);\n\n        return Cache::put($key, $data, $days * 86400);\n    }\n\n    /**\n     * Wrapper for the cache has metho\n     */\n    protected function has(string $key): bool\n    {\n        return Cache::has($key);\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/TimelineElementCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\TimelineElement;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass TimelineElementCacheService extends BaseCache\n{\n    use CampaignAware;\n\n    public function iconSuggestion(): array\n    {\n        $key = $this->iconSuggestionKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            $default = [\n                'ra ra-tower',\n                'fa-solid fa-home',\n                'ra ra-capitol',\n                'fa-solid fa-skull',\n                'fa-regular fa-coins',\n                'ra ra-beer',\n                'fa-solid fa-map-marker-alt',\n                'fa-solid fa-thumbtack',\n                'ra ra-wooden-sign',\n                'fa-solid fa-map-pin',\n            ];\n\n            $data = TimelineElement::leftJoin('timelines as t', 't.id', 'timeline_elements.timeline_id')\n                ->where('t.campaign_id', $this->campaign->id)\n                ->select(DB::raw('icon, MAX(timeline_elements.created_at) as cmat'))\n                ->groupBy('icon')\n                ->whereNotNull('icon')\n                ->orderBy('cmat', 'DESC')\n                ->take(10)\n                ->pluck('icon')\n                ->all();\n\n            foreach ($default as $value) {\n                if (! in_array($value, $data)) {\n                    $data[] = $value;\n                }\n            }\n\n            return array_slice($data, 0, 10);\n        });\n    }\n\n    public function clearSuggestion(): self\n    {\n        $this->forget(\n            $this->iconSuggestionKey()\n        );\n\n        return $this;\n    }\n\n    /**\n     * Type suggestion cache key\n     */\n    protected function iconSuggestionKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_timeline_element_suggestions';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/ApplicationCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\ntrait ApplicationCache\n{\n    public function applicationsCount(): int\n    {\n        return $this->primary($this->campaign->id)->get('applications');\n    }\n\n    protected function formatApplications(): int\n    {\n        return $this->campaign->applications->count();\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/DashboardCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\nuse App\\Models\\CampaignRole;\n\ntrait DashboardCache\n{\n    /**\n     * Build a list of dashboards setup for the campaign\n     */\n    public function dashboards(): array\n    {\n        return $this->primary($this->campaign->id)->get('dashboards');\n    }\n\n    protected function formatDashboards(): array\n    {\n        $available = [\n            'admin' => [],\n            'public' => [],\n        ];\n\n        /** @var CampaignRole[] $roles */\n        $roles = $this->campaign->roles()->with(['dashboardRoles', 'dashboardRoles.dashboard'])->get();\n        foreach ($roles as $role) {\n            $dashboards = $role->dashboardRoles;\n            if ($dashboards->isEmpty()) {\n                continue;\n            }\n\n            $key = 'role_' . $role->id;\n            if ($role->is_admin) {\n                $key = 'admin';\n            } elseif ($role->is_public) {\n                $key = 'public';\n            }\n            $available[$key] = $dashboards;\n        }\n\n        return $available;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/FlagCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\nuse Illuminate\\Support\\Collection;\n\ntrait FlagCache\n{\n    public function flags(): Collection\n    {\n        return new Collection($this->primary($this->campaign->id)->get('flags'));\n    }\n\n    protected function formatFlags(): array\n    {\n        $flags = [];\n        foreach ($this->campaign->flags as $flag) {\n            $flags[$flag->flag->value] = $flag->value;\n        }\n\n        return $flags;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/MemberCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\nuse Illuminate\\Support\\Collection;\n\ntrait MemberCache\n{\n    public function members(): Collection\n    {\n        return new Collection($this->primary($this->campaign->id)->get('members'));\n    }\n\n    protected function formatMembers(): array\n    {\n        $data = [];\n        foreach ($this->campaign->members as $member) {\n            $data[] = [\n                'id' => $member->user_id,\n            ];\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/RoleCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\ntrait RoleCache\n{\n    // Used to cache the whole roles as objects in the cache, just for the public role permission.\n    // There are better ways to handle this!\n\n    public function publicPermissions(): array\n    {\n        return $this->primary($this->campaign->id)->get('public-permissions');\n    }\n\n    /**\n     * Build a list of dashboards setup for the campaign\n     *\n     * @return array[]\n     */\n    public function adminRole(): array\n    {\n        return $this->primary($this->campaign->id)->get('admin-role');\n    }\n\n    protected function formatAdminRole(): array\n    {\n        $role = $this->campaign->roles->where('is_admin', 1)->first();\n\n        return [\n            'id' => $role->id,\n            'name' => $role->name,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/SettingCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\nuse Illuminate\\Support\\Collection;\n\ntrait SettingCache\n{\n    public function settings(): Collection\n    {\n        return new Collection($this->primary($this->campaign->id)->get('modules'));\n    }\n\n    protected function formatSettings(): array\n    {\n        $settings = $this->campaign->setting->toArray();\n        unset($settings['id'], $settings['campaign_id'], $settings['created_at'], $settings['updated_at']);\n\n        return $settings;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/StyleCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\nuse App\\Models\\CampaignStyle;\nuse Illuminate\\Support\\Facades\\Cache;\n\ntrait StyleCache\n{\n    /**\n     * Build campaign styles\n     */\n    public function styles(): string\n    {\n        $key = $this->stylesKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            $css = \"/**\\n * Campaign Styles for campaign #\" . $this->campaign->id . \"\\n */\\n\\n\";\n            $styles = $this->campaign\n                ->styles()\n                ->enabled()\n                ->defaultOrder()\n                ->get();\n            foreach ($styles as $style) {\n                /** @var CampaignStyle $style */\n                if ($style->isTheme()) {\n                    $css .= '/** Theme builder #' . $style->id . \" */\\n@layer theme {\\n\" . $style->content() . \"\\n}\\n\";\n\n                    continue;\n                }\n                $css .= '/** Style ' . $style->name . '#' . $style->id . \" */\\n\" . $style->content() . \"\\n\";\n            }\n\n            return $css;\n        });\n    }\n\n    public function stylesTimestamp(): int\n    {\n        return (int) $this->primary($this->campaign->id)->get('time');\n    }\n\n    public function clearStyles(): self\n    {\n        $this->forget(\n            $this->stylesKey()\n        );\n\n        return $this;\n    }\n\n    protected function stylesKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_styles';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/ThemeCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\nuse App\\Models\\CampaignPlugin;\nuse Illuminate\\Support\\Facades\\Cache;\n\ntrait ThemeCache\n{\n    /**\n     * List of theme plugins the campaign has activated\n     */\n    public function themes(): string|bool\n    {\n        if (! config('marketplace.enabled')) {\n            return false;\n        }\n\n        $key = $this->themeKey();\n\n        return Cache::remember($key, 24 * 3600, function () {\n            $theme = '';\n            // @phpstan-ignore-next-line\n            $plugins = CampaignPlugin::leftJoin('plugins as p', 'p.id', 'plugin_id')\n                ->where('campaign_id', $this->campaign->id)\n                ->where('p.type_id', 1)\n                ->where('is_active', true)\n                ->with('version')\n                ->has('plugin')\n                ->has('plugin.user')\n                ->get();\n            /** @var CampaignPlugin $plugin */\n            foreach ($plugins as $plugin) {\n                if ($plugin->version->fonts) {\n                    $theme .= '/** plugin: ' . e($plugin->name) . ' #' . e($plugin->version->version) . \" fonts **/\\n\";\n                    $theme .= $plugin->version->fonts . \"\\n\\n\";\n                }\n            }\n            foreach ($plugins as $plugin) {\n                $theme .= '/** plugin: ' . e($plugin->name) . ' #' . e($plugin->version->version) . \" code **/\\n\";\n                $theme .= $plugin->version->content . \"\\n\\n\";\n            }\n\n            return $theme;\n        });\n    }\n\n    public function clearTheme(): self\n    {\n        $this->forget(\n            $this->themeKey()\n        );\n\n        return $this;\n    }\n\n    protected function themeKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_theme';\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/Campaign/ThumbnailCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\Campaign;\n\nuse Illuminate\\Support\\Str;\n\ntrait ThumbnailCache\n{\n    /**\n     * Default Entity Images for a campaign\n     */\n    public function defaultImages(): array\n    {\n        $data = $this->primary($this->campaign->id)->get('thumbnails', null);\n        // Since thumbnails come from the db, we need to load them _after_ permissions/campaign roles have been loaded.\n        // It's an extra back and forth with redis on the first init of a clear cache\n        if (is_array($data)) {\n            return $data;\n        }\n\n        return $this->append($this->campaign->id, 'thumbnails', $this->formatThumbnails());\n    }\n\n    protected function formatThumbnails(): array\n    {\n        $defaults = $this->campaign->defaultImages();\n        $data = [];\n        foreach ($defaults as $default) {\n            $data[Str::singular($default['type'])] = $default['path'];\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/PrimaryCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits;\n\nuse Illuminate\\Support\\Collection;\n\ntrait PrimaryCache\n{\n    /**\n     * Cached primary data\n     */\n    protected array $primary = [];\n\n    protected function primary(int $cache): Collection\n    {\n        if (isset($this->primary[$cache])) {\n            return $this->primary[$cache];\n        }\n\n        $key = $this->primaryKey();\n        if ($this->has($key)) {\n            return $this->primary[$cache] = new Collection($this->get($key));\n        }\n\n        $data = $this->primaryData();\n\n        $this->forever($key, $data);\n\n        return $this->primary[$cache] = new Collection($data);\n    }\n\n    /**\n     * Clear the primary cache\n     */\n    public function clear(): self\n    {\n        $this->forget($this->primaryKey());\n\n        return $this;\n    }\n\n    /**\n     * Some data needs to load \"after the init\", which can be done with this append function.\n     */\n    protected function append(int $key, string $property, mixed $data): mixed\n    {\n        $this->primary[$key][$property] = $data;\n        $this->forever($this->primaryKey(), $this->primary[$key]);\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/User/CampaignCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\User;\n\nuse Illuminate\\Support\\Collection;\n\ntrait CampaignCache\n{\n    /**\n     * Get the user campaigns\n     */\n    public function campaigns(): Collection\n    {\n        return new Collection(\n            $this->primary($this->user->id)->get('campaigns')\n        );\n    }\n\n    public function follows(): Collection\n    {\n        return new Collection(\n            $this->primary($this->user->id)->get('follows')\n        );\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/User/RoleCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\User;\n\nuse Illuminate\\Support\\Collection;\n\ntrait RoleCache\n{\n    /**\n     * Check if a user is an admin of a campaign\n     */\n    public function admin(): bool\n    {\n        return $this->adminRole() !== null;\n    }\n\n    /**\n     * Get the user's admin role in a current campaign\n     */\n    public function adminRole(): ?array\n    {\n        foreach ($this->roles() as $role) {\n            if ($role['is_admin']) {\n                return $role;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Get the user roles\n     */\n    public function roles(): Collection\n    {\n        $roles = $this->primary($this->user->id)->get('roles');\n        foreach ($roles as $campaignId => $campaignRoles) {\n            if ($campaignId !== $this->campaign->id) {\n                continue;\n            }\n\n            return new Collection($campaignRoles);\n        }\n\n        return new Collection;\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/User/TutorialCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\User;\n\ntrait TutorialCache\n{\n    public function dismissedTutorial(string $tutorial): bool\n    {\n        return in_array($tutorial, $this->primary($this->user->id)->get('tutorials'));\n    }\n\n    protected function prepareTutorials(): array\n    {\n        return $this->user\n            ->tutorials\n            ->pluck('code')\n            ->toArray();\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/Traits/User/UserFlagCache.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches\\Traits\\User;\n\nuse Illuminate\\Support\\Collection;\n\ntrait UserFlagCache\n{\n    public function flags(): Collection\n    {\n        return new Collection(\n            $this->primary($this->user->id)->get('flags')\n        );\n    }\n}\n"
  },
  {
    "path": "app/Services/Caches/UserCacheService.php",
    "content": "<?php\n\nnamespace App\\Services\\Caches;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\User;\nuse App\\Models\\UserFlag;\nuse App\\Services\\Caches\\Traits\\PrimaryCache;\nuse App\\Services\\Caches\\Traits\\User\\CampaignCache;\nuse App\\Services\\Caches\\Traits\\User\\RoleCache;\nuse App\\Services\\Caches\\Traits\\User\\TutorialCache;\nuse App\\Services\\Caches\\Traits\\User\\UserFlagCache;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass UserCacheService extends BaseCache\n{\n    use CampaignAware;\n    use CampaignCache;\n    use PrimaryCache;\n    use RoleCache;\n    use TutorialCache;\n    use UserAware;\n    use UserFlagCache;\n\n    /**\n     * Get the username\n     *\n     * @param  int  $userId  the user id\n     */\n    public function name(int $userId): string\n    {\n        $key = $this->nameKey($userId);\n\n        return Cache::remember($key, 3600 * 24, function () use ($userId) {\n            /** @var ?User $user */\n            $user = User::select('name')->find($userId);\n\n            return $user?->name;\n        });\n    }\n\n    public function clearName(): self\n    {\n        $key = $this->nameKey($this->user->id);\n        $this->forget($key);\n\n        return $this;\n    }\n\n    public function entitiesCreatedCount(): int\n    {\n        $key = 'user_' . $this->user->id . '_entities_created_count';\n\n        return Cache::remember($key, 24 * 3600, function () {\n            return DB::table('entities')->where('created_by', $this->user->id)->count();\n        });\n    }\n\n    protected function nameKey(int $userId): string\n    {\n        return 'user_' . $userId . '_name';\n    }\n\n    protected function primaryData(): array\n    {\n        // Prepare the data.\n        $data = [\n            'campaigns' => [],\n            'follows' => [],\n            'roles' => [],\n            'tutorials' => [],\n            'flags' => [],\n        ];\n\n        /** @var Campaign $campaign */\n        foreach ($this->user->campaigns()->userOrdered($this->user)->get() as $campaign) {\n            $data['campaigns'][] = $this->formatCampaign($campaign);\n        }\n\n        /** @var Campaign $campaign */\n        foreach ($this->user->following()->public()->userOrdered($this->user)->get() as $campaign) {\n            $data['follows'][] = $this->formatCampaign($campaign);\n        }\n\n        // Track the user's admin roles\n        foreach ($this->user->campaignRoles as $role) {\n            $data['roles'][$role->campaign_id][] = $this->formatRole($role);\n        }\n\n        foreach ($this->user->flags as $flag) {\n            $data['flags'][$flag->flag->value] = $this->formatFlag($flag);\n        }\n\n        $data['tutorials'] = $this->prepareTutorials();\n\n        return $data;\n    }\n\n    /**\n     * Format the campaign for the cache\n     */\n    protected function formatCampaign(Campaign $campaign): array\n    {\n        return [\n            'id' => $campaign->id,\n            'name' => $campaign->name,\n            'route' => route('dashboard', $campaign),\n            'image' => $campaign->image,\n            'boosted' => $campaign->boosted(),\n        ];\n    }\n\n    /**\n     * Format the role for the cache\n     */\n    protected function formatRole(CampaignRole $role): array\n    {\n        return [\n            'id' => $role->id,\n            'name' => $role->name,\n            'is_admin' => $role->isAdmin(),\n            'is_public' => $role->isPublic(),\n        ];\n    }\n\n    /**\n     * Format a flag for the cache\n     */\n    protected function formatFlag(UserFlag $role): array\n    {\n        return [\n            'amount' => $role->amount,\n        ];\n    }\n\n    protected function primaryKey(): string\n    {\n        return 'user_' . $this->user->id;\n    }\n}\n"
  },
  {
    "path": "app/Services/CalendarService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Requests\\AddCalendarWeather;\nuse App\\Models\\Calendar;\nuse App\\Models\\CalendarWeather;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\Event;\nuse App\\Models\\Reminder;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass CalendarService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected Calendar $calendar;\n\n    public function calendar(Calendar $calendar): self\n    {\n        $this->calendar = $calendar;\n\n        return $this;\n    }\n\n    /**\n     * Add an event to a calendar, and return the new calendar_event model\n     */\n    public function addEvent(array $data = []): Reminder\n    {\n        $entity = $this->entity($data);\n        $link = new Reminder;\n        $link->remindable_type = Entity::class;\n        $link->remindable_id = $entity->id;\n        $link->calendar_id = $this->calendar->id;\n        $link->year = $data['year'];\n        $link->month = $data['month'];\n        $link->day = $data['day'];\n        $link->length = $data['length'];\n        $link->comment = Purify::clean($data['comment']);\n        $link->is_recurring = Arr::get($data, 'is_recurring', false);\n        $link->colour = Arr::get($data, 'colour', null);\n        $link->recurring_until = Arr::get($data, 'recurring_until', null);\n        $link->recurring_periodicity = Arr::get($data, 'recurring_periodicity', null);\n        $link->visibility_id = Arr::get($data, 'visibility_id', 1);\n        $link->save();\n\n        return $link;\n    }\n\n    /**\n     * Save the weather on the requested date\n     */\n    public function saveWeather(AddCalendarWeather $request): CalendarWeather\n    {\n        // Make sure we don't already have a weather effect on this date\n        $weather = $this->findWeather(\n            (int) $request->post('year'),\n            (int) $request->post('month'),\n            (int) $request->post('day')\n        );\n\n        if (! $weather) {\n            $weather = new CalendarWeather([\n                'calendar_id' => $this->calendar->id,\n                'year' => $request->post('year'),\n                'month' => $request->post('month'),\n                'day' => $request->post('day'),\n                'visibility_id' => $request->post('visibility_id'),\n                'name' => $request->post('name'),\n            ]);\n        }\n\n        $weather->fill([\n            'weather' => $request->post('weather'),\n            'temperature' => $request->post('temperature'),\n            'precipitation' => $request->post('precipitation'),\n            'wind' => $request->post('wind'),\n            'effect' => $request->post('effect'),\n            'visibility_id' => $request->post('visibility_id'),\n            'name' => $request->post('name'),\n        ]);\n        $weather->save();\n\n        return $weather;\n    }\n\n    /**\n     * Find the saved weather for a specific date\n     */\n    public function findWeather(int $year, int $month, int $day)\n    {\n        return CalendarWeather::dated(\n            $this->calendar->id,\n            $year,\n            $month,\n            $day\n        )->first();\n    }\n\n    /**\n     * Create a new event if it's just a name and no entity id. Otherwise, validate the entity\n     *\n     * @throws TranslatableException\n     */\n    protected function entity(array $data = []): Entity\n    {\n        if (empty($data['entity_id']) && ! empty($data['name'])) {\n            $entityType = EntityType::find(config('entities.ids.event'));\n            if (! $this->user->can('create', [$entityType, $this->campaign])) {\n                throw new TranslatableException(__('calendars.event.errors.missing_permissions'));\n            }\n            // Create an event\n            $event = new Event;\n            $event->name = Str::after($data['name'], 'new:');\n            $event->date = $data['year'] . '-' . $data['month'] . '-' . $data['day'];\n            $event->campaign_id = $this->campaign->id;\n            if ($event->save()) {\n                return $event->entity;\n            }\n        } elseif (! empty($data['entity_id'])) {\n            return Entity::findOrFail($data['entity_id']);\n        }\n\n        throw new TranslatableException(__('calendars.event.errors.invalid_entity'));\n    }\n}\n"
  },
  {
    "path": "app/Services/Calendars/AdvancerService.php",
    "content": "<?php\n\nnamespace App\\Services\\Calendars;\n\nuse App\\Jobs\\CalendarsClearElapsed;\nuse App\\Models\\Calendar;\n\nclass AdvancerService\n{\n    protected Calendar $calendar;\n\n    public function calendar(Calendar $calendar): self\n    {\n        $this->calendar = $calendar;\n\n        return $this;\n    }\n\n    /**\n     * Advance a calendar's date by one day\n     */\n    public function advance(): self\n    {\n        [$year, $month, $day] = $this->calendar->dateArray();\n\n        // Day is longer than month max length?\n        $months = $this->calendar->months();\n        if (! empty($day)) {\n            $day = ((int) $day) + 1;\n            if ($day > $months[$month - 1]['length']) {\n                $day = 1;\n                $month++;\n            }\n        } else {\n            $month++;\n        }\n\n        // Reset month and increment year\n        if ($month > count($months)) {\n            $month = 1;\n            $year++;\n        }\n\n        if (! $this->calendar->hasYearZero() && $year == 0) {\n            $year++;\n        }\n        $this->calendar->date = $year . '-' . $month . ($day !== false ? '-' . $day : null);\n        $this->calendar->saveQuietly();\n\n        return $this;\n    }\n\n    /**\n     * Retreat a calendar's date by one day\n     */\n    public function retreat(): self\n    {\n        [$year, $month, $day] = $this->calendar->dateArray();\n\n        $day--;\n        $months = $this->calendar->months();\n        if ($day < 1) {\n            $month--;\n            if ($month < 1) {\n                $month = count($months);\n                $year--;\n            }\n            $day = $months[$month - 1]['length'];\n        }\n\n        if (! $this->calendar->hasYearZero() && $year == 0) {\n            $year--;\n        }\n        $this->calendar->date = $year . '-' . $month . '-' . $day;\n        $this->calendar->save();\n        CalendarsClearElapsed::dispatch($this->calendar);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Calendars/DaysService.php",
    "content": "<?php\n\nnamespace App\\Services\\Calendars;\n\nuse App\\Traits\\CalendarAware;\nuse Illuminate\\Support\\Arr;\n\nclass DaysService\n{\n    use CalendarAware;\n\n    protected bool $intercalary = true;\n\n    protected int $month;\n\n    protected int $year;\n\n    protected int $day;\n\n    public function intercalary(bool $intercalary): self\n    {\n        $this->intercalary = $intercalary;\n\n        return $this;\n    }\n\n    public function month(int $month): self\n    {\n        $this->month = $month;\n\n        return $this;\n    }\n\n    public function day(int $day): self\n    {\n        $this->day = $day;\n\n        return $this;\n    }\n\n    public function year(int $year): self\n    {\n        $this->year = $year;\n\n        return $this;\n    }\n\n    public function daysToDate(): int\n    {\n        // We assume that the 01 01 00 is a monday.\n        // We need to know how many days elapsed since that day, to calculate the offset (total days / week length)\n\n        $daysInAYear = $days = $leapDays = 0;\n        foreach ($this->calendar->months() as $count => $month) {\n            if (! $this->intercalary && Arr::get($month, 'type') == 'intercalary') {\n                continue;\n            }\n            $length = $month['length'];\n            $daysInAYear += $length;\n\n            // If the month has already passed, add it to the days for this year\n            if ($count < $this->month - 1) {\n                $days += $length;\n            }\n        }\n\n        if ($this->calendar->has_leap_year && $this->year >= $this->calendar->leap_year_start) {\n            // If the leap month is intercalary, we don't need to offset anything.\n            $months = $this->calendar->months();\n            $leapMonth = Arr::get($months, $this->calendar->leap_year_month - 1, false);\n            if ($leapMonth && Arr::get($leapMonth, 'type') == 'intercalary') {\n                // Nothing\n            } else {\n                // Calc the number of years that were leap years\n                //            dump(\"the current year (\" . $this->getYear() . \") is >= to when the calendar leap year starts\n                //               (\" . $this->calendar->leap_year_start . \")\");\n                $yearDiffWithLeapStart = $this->year - $this->calendar->leap_year_start;\n                $amountOfYears = ceil($yearDiffWithLeapStart / max(1, $this->calendar->leap_year_offset));\n                //            dump (\"the amount of leap years that has elapsed since the beginning is the following: $amountOfYears\");\n                //            dump (\"the value is ceil((\" . $this->getYear() . \"-\" . $this->calendar->leap_year_start . \")\n                //               / \" . $this->calendar->leap_year_offset . \")\");\n                if ($amountOfYears < 0) {\n                    $amountOfYears = 0;\n                }\n\n                $leapDays = $amountOfYears * $this->calendar->leap_year_amount;\n\n                //            dump (\"total leap days elapsed: $leapDays\");\n\n                // But if we are a leap year, we need to do the math\n                if (($this->year - $this->calendar->leap_year_start) % max($this->calendar->leap_year_offset, 1) == 0) {\n                    if ($this->month > $this->calendar->leap_year_month) {\n                        // We've passed the leap month of the year\n                        $leapDays += $this->calendar->leap_year_amount;\n                    }\n                }\n            }\n        }\n\n        // Number of days since the beginning of the year\n        if (! $this->calendar->hasYearZero() && $this->year > 0) {\n            return ($daysInAYear * ($this->year - 1)) + $days + $leapDays;\n        }\n\n        return ($daysInAYear * $this->year) + $days + $leapDays;\n    }\n}\n"
  },
  {
    "path": "app/Services/Calendars/MoonService.php",
    "content": "<?php\n\nnamespace App\\Services\\Calendars;\n\nuse App\\Traits\\CalendarAware;\nuse Illuminate\\Support\\Arr;\n\nclass MoonService\n{\n    use CalendarAware;\n\n    protected array $moons = [];\n\n    public function has(int $day): bool\n    {\n        return isset($this->moons[$day]);\n    }\n\n    public function get(int $day): array\n    {\n        return $this->moons[$day] ?? [];\n    }\n\n    public function build(int $totalDays, int $daysInAYear): void\n    {\n        foreach ($this->calendar->moons() as $moon) {\n            $fullmoon = $moon['fullmoon'];\n            // Let's figure out how many full moons occurred until now\n            $numberOfFullMoons = $totalDays / $fullmoon;\n\n            // When was the last full moon?\n            $lastFullMoon = floor($numberOfFullMoons) * $fullmoon;\n\n            // Use that to see how many days it's been\n            $daysSinceLastFullMoon = round($totalDays - $lastFullMoon, 2);\n\n            // Next full moon? If it's 0, we want it today.\n            $nextFullMoon = (1 + $moon['offset']) + ($fullmoon - ($daysSinceLastFullMoon == 0 ? $fullmoon : $daysSinceLastFullMoon));\n\n            // Previous cycles. Twice because sometimes the first full moon appears at the end of a long month, so\n            // we need to fill up the month as much as we can.\n            // With a big enough offset and fullmoon cycle, the user can end up with no moon on their first month of\n            // the first year?\n            $maxCycles = max(2, 3);\n            for ($cycles = 1; $cycles <= $maxCycles; $cycles++) {\n                $this->addPhases($nextFullMoon - ($moon['fullmoon'] * $cycles), $moon);\n            }\n\n            // Current cycles\n            $this->addPhases($nextFullMoon, $moon);\n\n            // Now the full moon will appear several times on this month/year.\n            $fullMoonsPerYear = ceil($daysInAYear / $fullmoon);\n            for ($i = 0; $i < $fullMoonsPerYear; $i++) {\n                $nextFullMoon += $fullmoon;\n                $this->addPhases($nextFullMoon, $moon);\n            }\n        }\n    }\n\n    protected function addPhases(float $start, array $moon): void\n    {\n        // Full & New Moon\n        $this->addPhase($start, $moon, 'full', 'far fa-circle');\n        $newMoon = $start + ($moon['fullmoon'] / 2);\n        $this->addPhase($newMoon, $moon, 'new', 'fa-solid fa-circle');\n\n        if ($moon['fullmoon'] <= 10) {\n            return;\n        }\n        // Cycle is long enough for more phases to be displayed\n        $quarterMonth = $moon['fullmoon'] / 4;\n        $this->addPhase($newMoon - $quarterMonth, $moon, 'last_quarter', 'fa-solid fa-circle-half-stroke fa-flip-horizontal');\n        $this->addPhase($newMoon + $quarterMonth, $moon, '1first_quarter', 'fa-solid fa-circle-half-stroke');\n    }\n\n    protected function addPhase(float $nextFullMoon, array $moon, string $type = 'full', string $class = 'fa-regular fa-circle'): void\n    {\n        // Moons can be float so we \"floor\" them\n        $nextFullMoon = (int) floor($nextFullMoon);\n\n        // If the next full moon is before year 0... What?\n        if ($nextFullMoon < 0) {\n            // return;\n        }\n        if (! isset($this->moons[$nextFullMoon])) {\n            $this->moons[$nextFullMoon] = [];\n        }\n        $this->moons[$nextFullMoon][] = [\n            'name' => $moon['name'],\n            'type' => $type,\n            'class' => $class,\n            'colour' => $this->colour(Arr::get($moon, 'colour', 'grey')),\n            'id' => Arr::get($moon, 'id', null),\n        ];\n    }\n\n    protected function colour(string $colour): string\n    {\n        switch ($colour) {\n            case 'aqua':\n                return '#3B82F6'; // blue-500\n            case 'black':\n                return '#000000'; // black\n            case 'brown':\n                return '#7C2D12'; // orange-900 (closest brown)\n            case 'green':\n                return '#22C55E'; // green-500\n            case 'light-blue':\n                return '#93C5FD'; // blue-300\n            case 'maroon':\n                return '#9D174D'; // pink-800 (closest maroon)\n            case 'navy':\n                return '#1E3A8A'; // blue-900\n            case 'orange':\n                return '#F97316'; // orange-500\n            case 'pink':\n                return '#EC4899'; // pink-500\n            case 'purple':\n                return '#A855F7'; // purple-500\n            case 'red':\n                return '#EF4444'; // red-500\n            case 'teal':\n                return '#14B8A6'; // teal-500\n            case 'yellow':\n                return '#EAB308'; // yellow-500\n            case 'grey':\n                return '#6B7280'; // gray-500\n        }\n\n        return $colour;\n    }\n}\n"
  },
  {
    "path": "app/Services/Calendars/ReminderService.php",
    "content": "<?php\n\nnamespace App\\Services\\Calendars;\n\nuse App\\Models\\Calendar;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\Reminder;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Collection;\n\nclass ReminderService\n{\n    protected Calendar $calendar;\n\n    public function calendar(Calendar $calendar): self\n    {\n        $this->calendar = $calendar;\n\n        return $this;\n    }\n\n    /**\n     * Look at events to calculate the most upcoming events for the calendar\n     * dashboard widget.\n     */\n    public function upcoming(int $needle = 10): Collection\n    {\n        // @phpstan-ignore-next-line\n        $reminders = $this->calendar->calendarEvents()\n            ->with(['remindable'])\n            ->whereHasMorph(\n                'remindable',\n                [Entity::class, Post::class],\n                function (Builder $query, string $type) {\n                    if ($type === Post::class) {\n                        $query->whereHas('entity');\n                    }\n                })\n            ->where(function ($primary) {\n                $primary->where(function ($sub) {\n                    $sub->where(function ($recurring) {\n                        $recurring\n                            ->where('is_recurring', true)\n                            ->whereIn('recurring_periodicity', ['year', 'month'])\n                            ->where(function ($recurringuntil) {\n                                $recurringuntil\n                                    ->whereNull('recurring_until')\n                                    // Events that end in the future are fine, they could be reoccurring on this month\n                                    ->orWhere('recurring_until', '>=', $this->calendar->currentYear());\n                            });\n                    });\n                })\n                    ->orWhere(function ($ondate) {\n                        // Not recurring\n                        $ondate\n                            ->where('is_recurring', false)\n                            ->where(function ($date) {\n                                // An event that happens before this year\n                                $date\n                                    ->where('year', '>', $this->calendar->currentYear())\n                                    ->orWhere(function ($subdate) {\n                                        // An event that happens this year but after this month\n                                        $subdate\n                                            ->where('year', $this->calendar->currentYear())\n                                            ->where('month', '>', $this->calendar->currentMonth());\n                                    })\n                                    ->orWhere(function ($subdate) {\n                                        // An event that happens this year after this year\n                                        $subdate\n                                            ->where('year', $this->calendar->currentYear())\n                                            ->where('month', $this->calendar->currentMonth())\n                                            ->where('day', '>=', $this->calendar->currentDay());\n                                    });\n                            });\n                    });\n            })\n            // Skip events that were on months which no longer exist\n            ->where('month', '<=', count($this->calendar->months()))\n            ->orderBy('year', 'asc')\n            ->orderBy('month', 'asc')\n            ->orderBy('day', 'asc')\n            ->take($needle)\n            ->get();\n\n        // Order the past events in descending date to get the closest ones to the current date first\n        return $reminders->sortBy(function (Reminder $reminder) {\n            return $reminder\n                ->setRelation('calendar', $this->calendar)\n                ->nextUpcomingOccurrence(\n                    $this->calendar->currentYear(),\n                    $this->calendar->currentMonth(),\n                    $this->calendar->currentDay(),\n                    $this->calendar->months(),\n                    $this->calendar->daysInYear()\n                );\n        });\n    }\n\n    /**\n     * Look at events to calculate the most recently occurring events for the calendar\n     * dashboard widget.\n     */\n    public function past(int $needle = 10): Collection\n    {\n        // @phpstan-ignore-next-line\n        $reminders = $this->calendar->calendarEvents()\n            ->with(['remindable'])\n            ->whereHas('remindable')\n            ->where(function ($primary) {\n                $primary->where(function ($sub) {\n                    $sub->where(function ($recurring) {\n                        $recurring\n                            ->where('is_recurring', true)\n                            ->whereIn('recurring_periodicity', ['year', 'month'])\n                            ->where(function ($recurringuntil) {\n                                $recurringuntil\n                                    ->whereNull('recurring_until')\n                                    // Events that end in the future are fine, they could be reoccurring on this month\n                                    ->orWhere('recurring_until', '>=', $this->calendar->currentYear());\n                            })\n                            ->where('year', '<=', $this->calendar->currentYear());\n                    });\n                })\n                    ->orWhere(function ($ondate) {\n                        // Not recurring\n                        $ondate\n                            ->where('is_recurring', false)\n                            ->where(function ($date) {\n                                // An event that happens before this year\n                                $date\n                                    ->where('year', '<', $this->calendar->currentYear())\n                                    ->orWhere(function ($subdate) {\n                                        // An event that happens this year but before this month\n                                        $subdate\n                                            ->where('year', $this->calendar->currentYear())\n                                            ->where('month', '<', $this->calendar->currentMonth());\n                                    })\n                                    ->orWhere(function ($subdate) {\n                                        // An event that happens this year but before this day\n                                        $subdate\n                                            ->where('year', $this->calendar->currentYear())\n                                            ->where('month', $this->calendar->currentMonth())\n                                            ->where('day', '<', $this->calendar->currentDay());\n                                    });\n                            });\n                    });\n            })\n            // Skip events that were on months which no longer exist\n            ->where('month', '<=', count($this->calendar->months()))\n            ->orderBy('year', 'desc')\n            ->orderBy('month', 'desc')\n            ->orderBy('day', 'desc')\n            ->take($needle)\n            ->get();\n\n        // Order the past events in descending date to get the closest ones to the current date first\n        return $reminders->sortBy(function (Reminder $reminder) {\n            return $reminder\n                ->setRelation('calendar', $this->calendar)\n                ->mostRecentOccurrence(\n                    $this->calendar->currentYear(),\n                    $this->calendar->currentMonth(),\n                    $this->calendar->currentDay(),\n                    $this->calendar->months(),\n                    $this->calendar->daysInYear()\n                );\n        });\n    }\n}\n"
  },
  {
    "path": "app/Services/Calendars/SeasonService.php",
    "content": "<?php\n\nnamespace App\\Services\\Calendars;\n\nuse App\\Traits\\CalendarAware;\n\nclass SeasonService\n{\n    use CalendarAware;\n\n    protected array $seasons = [];\n\n    public function has(string $day): bool\n    {\n        return isset($this->seasons[$day]);\n    }\n\n    public function get(string $day): ?string\n    {\n        return $this->seasons[$day] ?? null;\n    }\n\n    public function build(): void\n    {\n        foreach ($this->calendar->seasons() as $season) {\n            $date = $season['month'] . '-' . $season['day'];\n            $this->seasons[$date] = $season['name'];\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Calendars/WeatherService.php",
    "content": "<?php\n\nnamespace App\\Services\\Calendars;\n\nuse App\\Models\\CalendarWeather;\nuse App\\Traits\\CalendarAware;\n\nclass WeatherService\n{\n    use CalendarAware;\n\n    /** @var CalendarWeather[] */\n    protected array $effects = [];\n\n    protected int $currentYear;\n\n    public function currentYear(int $currentYear): self\n    {\n        $this->currentYear = $currentYear;\n\n        return $this;\n    }\n\n    public function has(string $day): bool\n    {\n        return isset($this->effects[$day]);\n    }\n\n    public function get(string $day): CalendarWeather\n    {\n        return $this->effects[$day];\n    }\n\n    public function build(): void\n    {\n        // First build parent weather, and override with local weather\n        if ($this->calendar->calendar) {\n            $weathers = $this->calendar->calendar->calendarWeather()->year($this->currentYear)->get();\n\n            /** @var CalendarWeather $weather */\n            foreach ($weathers as $weather) {\n                $this->effects[$weather->year . '-' . $weather->month . '-' . $weather->day] = $weather;\n            }\n        }\n\n        $weathers = $this->calendar->calendarWeather()->year($this->currentYear)->get();\n\n        /** @var CalendarWeather $weather */\n        foreach ($weathers as $weather) {\n            $this->effects[$weather->year . '-' . $weather->month . '-' . $weather->day] = $weather;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/AchievementService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Enums\\SpotlightStatus;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\EntityTag;\nuse App\\Models\\EntityType;\nuse App\\Models\\MapMarker;\nuse App\\Models\\Relation;\nuse App\\Models\\Spotlight;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\n\nclass AchievementService\n{\n    use CampaignAware;\n\n    protected array $primaryTargets = [25, 50, 100, 250, 500];\n    // protected $primaryTargets = [2, 5, 10, 25, 40];\n\n    protected array $secondaryTargets = [10, 20, 45, 100, 200];\n\n    protected array $tertiaryTargets = [1, 2, 5, 10, 20];\n    // protected $secondaryTargets = [1, 2, 3, 4, 5];\n\n    protected array $modules;\n\n    public function stats(): array|false\n    {\n        if (! $this->campaign->superboosted()) {\n            return false;\n        }\n\n        $cacheKey = 'campaign_' . $this->campaign->id . '_achievements';\n\n        if (Cache::has($cacheKey) && app()->isProduction()) {\n            return Cache::get($cacheKey);\n        }\n\n        // @phpstan-ignore-next-line\n        $characters = $this->campaign->characters()->withInvisible()->count() + $this->random();\n        // @phpstan-ignore-next-line\n        $locations = $this->campaign->locations()->withInvisible()->count() + $this->random();\n        // @phpstan-ignore-next-line\n        $creatures = $this->campaign->creatures()->withInvisible()->count() + $this->random();\n        // @phpstan-ignore-next-line\n        $families = $this->campaign->families()->withInvisible()->count() + $this->random();\n        // @phpstan-ignore-next-line\n        $organisations = $this->campaign->organisations()->withInvisible()->count() + $this->random();\n        // @phpstan-ignore-next-line\n        $dead = $this->campaign->characters()->withInvisible()->whereHas('entity', fn ($q) => $q->where('entities.status_id', 3))->count() + $this->random(10, 30);\n        // @phpstan-ignore-next-line\n        $calendars = $this->campaign->calendars()->withInvisible()->count() + $this->random(5, 15);\n        // @phpstan-ignore-next-line\n        $events = $this->campaign->events()->withInvisible()->count() + $this->random();\n\n        $tags = $this->taggedEntities() + $this->random();\n        $plugins = $this->plugins() + $this->random(2, 9);\n        $connections = $this->connections() + $this->random(30, 60);\n        $markers = $this->markers() + $this->random(30, 60);\n\n        $this->loadModules();\n\n        /** @var ?Spotlight $spotlight */\n        $spotlight = $this->campaign->spotlight()\n            ->where('status', SpotlightStatus::active)\n            ->first();\n\n        $stats = [\n            'spotlighted' => [\n                'icon' => 'fa-duotone fa-stars',\n                'amount' => $spotlight ? 1 : 0,\n                'target' => 1,\n                'level' => $spotlight ? 5 : 0,\n                'history' => 'spotlighted',\n                'url' => $spotlight?->url,\n            ],\n            'characters' => [\n                'icon' => $this->modules['character']->icon(),\n                'amount' => $characters,\n                'target' => $this->target($characters),\n                'level' => $this->level($characters),\n                'module' => $this->moduleName('character'),\n            ],\n            'locations' => [\n                'icon' => $this->modules['location']->icon(),\n                'amount' => $locations,\n                'target' => $this->target($locations),\n                'level' => $this->level($locations),\n                'module' => $this->moduleName('location'),\n            ],\n            'creatures' => [\n                'icon' => $this->modules['creature']->icon(),\n                'amount' => $creatures,\n                'target' => $this->target($creatures),\n                'level' => $this->level($creatures),\n                'module' => $this->moduleName('creature'),\n            ],\n            'families' => [\n                'icon' => $this->modules['family']->icon(),\n                'amount' => $families,\n                'target' => $this->target($families, 2),\n                'level' => $this->level($families, 2),\n                'module' => $this->moduleName('family'),\n            ],\n            'organisations' => [\n                'icon' => $this->modules['organisation']->icon(),\n                'amount' => $organisations,\n                'target' => $this->target($organisations, 2),\n                'level' => $this->level($organisations, 2),\n                'module' => $this->moduleName('organisation'),\n            ],\n            'calendars' => [\n                'icon' => $this->modules['calendar']->icon(),\n                'amount' => $calendars,\n                'target' => $this->target($calendars, 3),\n                'level' => $this->level($calendars, 3),\n                'module' => $this->moduleName('calendar'),\n            ],\n            'events' => [\n                'icon' => $this->modules['event']->icon(),\n                'amount' => $events,\n                'target' => $this->target($events, 2),\n                'level' => $this->level($events, 2),\n                'module' => $this->moduleName('event'),\n            ],\n            'dead' => [\n                'icon' => 'fa-regular fa-skull',\n                'amount' => $dead,\n                'target' => $this->target($dead, 2),\n                'level' => $this->level($dead, 2),\n                'history' => 'dead',\n            ],\n            'tags' => [\n                'icon' => $this->modules['tag']->icon(),\n                'amount' => $tags,\n                'target' => $this->target($tags, 1),\n                'level' => $this->level($tags, 1),\n                'history' => 'tagged',\n            ],\n            'plugins' => [\n                'icon' => 'fa-duotone fa-store',\n                'amount' => $plugins,\n                'target' => $this->target($plugins, 3),\n                'level' => $this->level($plugins, 3),\n                'history' => 'plugins',\n            ],\n            'markers' => [\n                'icon' => 'fa-duotone fa-map-location',\n                'amount' => $markers,\n                'target' => $this->target($markers, 2),\n                'level' => $this->level($markers, 2),\n                'history' => 'markers',\n            ],\n            'connections' => [\n                'icon' => 'fa-duotone fa-heart',\n                'amount' => $connections,\n                'target' => $this->target($connections, 2),\n                'level' => $this->level($connections, 2),\n                'history' => 'connections',\n            ],\n        ];\n\n        // Calc progress\n        foreach ($stats as $key => $stat) {\n            $stats[$key]['progress'] = ($stat['amount'] / $stat['target']) * 100;\n        }\n\n        // Reorder\n        uasort($stats, function ($a, $b) {\n            if ($a['level'] == $b['level']) {\n                return 0;\n            }\n\n            return ($a['level'] < $b['level']) ? 1 : -1;\n        });\n\n        Cache::put($cacheKey, $stats, 86400);\n\n        return $stats;\n    }\n\n    public function target(int $amount, int $level = 1): int\n    {\n        $targets = $level == 1 ? $this->primaryTargets : ($level == 2 ? $this->secondaryTargets : $this->tertiaryTargets);\n\n        $last = 20;\n        foreach ($targets as $target) {\n            if ($amount < $target) {\n                return $target;\n            }\n            $last = $target;\n        }\n\n        return $last;\n    }\n\n    public function level(int $amount, int $level = 1): int\n    {\n        $targets = $level == 1 ? $this->primaryTargets : ($level == 2 ? $this->secondaryTargets : $this->tertiaryTargets);\n        $level = 0;\n        foreach ($targets as $target) {\n            if ($amount >= $target) {\n                $level++;\n            }\n        }\n\n        return $level;\n    }\n\n    public function title(int $amount, int $level = 1): string\n    {\n        $targets = $level == 1 ? $this->primaryTargets : ($level == 2 ? $this->secondaryTargets : $this->tertiaryTargets);\n        foreach ($targets as $target) {\n            if ($amount > $target) {\n                $level++;\n            }\n        }\n\n        return __('campaigns/stats.titles.' . ($level == 1 ? 'primary' : ($level == 2 ? 'secondary' : 'tertiary')) . '.' . $level);\n    }\n\n    public function achievements(): array\n    {\n        $dead = $this->campaign->characters()->whereHas('entity', fn ($q) => $q->where('entities.status_id', 3))->count();\n        $calendars = $this->campaign->calendars()->count();\n\n        $achievements = [\n            'dead' => [\n                'title' => __('campaigns/stats.achievements.murderer.title'),\n                'goal' => __('campaigns/stats.achievements.murderer.goal'),\n                'amount' => $dead,\n                'target' => 100,\n                'icon' => 'fa-regular fa-skull',\n            ],\n            'calendars' => [\n                'title' => __('campaigns/stats.achievements.calendars.title'),\n                'goal' => __('campaigns/stats.achievements.calendars.goal'),\n                'amount' => $calendars,\n                'target' => 3,\n                'icon' => 'fa-regular fa-calendar',\n            ],\n        ];\n\n        // Success rate\n        foreach ($achievements as $key => $achievement) {\n            $achievements[$key]['score'] = $achievement['amount'] > $achievement['target'] ? 100 : ($achievement['amount'] / $achievement['target']);\n        }\n\n        // Reorder by achieved or close\n        usort($achievements, function ($a, $b) {\n            return strcmp((string) $a['score'], (string) $b['score']);\n        });\n\n        return $achievements;\n    }\n\n    protected function taggedEntities(): int\n    {\n        return EntityTag::leftJoin('entities as e', 'e.id', 'entity_tags.entity_id')\n            ->where('e.campaign_id', $this->campaign->id)\n            ->whereNull('e.deleted_at')\n            ->count();\n    }\n\n    protected function plugins(): int\n    {\n        return CampaignPlugin::where('campaign_id', $this->campaign->id)\n            ->count();\n    }\n\n    protected function connections(): int\n    {\n        return Relation::where('campaign_id', $this->campaign->id)\n            ->whereNull('mirror_id')\n            ->count();\n    }\n\n    protected function markers(): int\n    {\n        return MapMarker::leftJoin('maps as m', 'm.id', 'map_markers.map_id')\n            ->where('m.campaign_id', $this->campaign->id)\n            ->whereNull('m.deleted_at')\n            ->count();\n    }\n\n    protected function moduleName(string $module): array\n    {\n        /** @var EntityType $entityType */\n        $entityType = $this->modules[$module];\n\n        return [\n            'singular' => $entityType->name(),\n            'plural' => $entityType->plural(),\n        ];\n    }\n\n    protected function random(int $min = 50, int $max = 4000): int\n    {\n        if (app()->isProduction()) {\n            return 0;\n        }\n\n        return mt_rand($min, $max);\n    }\n\n    protected function loadModules(): void\n    {\n        /** @var EntityType $module */\n        foreach (EntityType::default()->get() as $module) {\n            $this->modules[$module->code] = $module;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/ApplicationService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Enums\\ApplicationStatus;\nuse App\\Events\\Campaigns\\Applications\\Accepted;\nuse App\\Events\\Campaigns\\Applications\\Rejected;\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Requests\\Campaigns\\StoreCampaignApplication;\nuse App\\Jobs\\Campaigns\\NotifyAdmins;\nuse App\\Models\\Application;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\CampaignUser;\nuse App\\Notifications\\Header;\nuse App\\Observers\\PurifiableTrait;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Arr;\n\nclass ApplicationService\n{\n    use CampaignAware;\n    use PurifiableTrait;\n    use UserAware;\n\n    protected Application $application;\n\n    public function application(Application $application): self\n    {\n        $this->application = $application;\n\n        return $this;\n    }\n\n    public function apply(StoreCampaignApplication $request): self\n    {\n\n        $data = $request->validated();\n\n        // Attach relationship data\n        $data['campaign_id'] = $this->campaign->id;\n        $data['user_id'] = $this->user->id;\n\n        // Create the record\n        Application::create($data);\n\n        CampaignCache::campaign($this->campaign)->clear();\n\n        NotifyAdmins::dispatch(\n            $this->campaign,\n            'application.new',\n            'door-open',\n            'yellow',\n            [\n                'link' => route('applications.index', $this->campaign),\n                'campaign' => $this->campaign->name,\n            ]\n        );\n\n        return $this;\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function process(array $data): string\n    {\n        $return = 'approved';\n        if (Arr::get($data, 'action') === 'reject') {\n            $return = 'rejected';\n\n            // Notify the user\n            $rejection = $this->purify(Arr::get($data, 'reason'));\n            if ($rejection == '') {\n                $key = 'campaign.application.rejected_no_message';\n            } else {\n                $key = 'campaign.application.rejected';\n            }\n            $this->application\n                ->user\n                ->notify(\n                    new Header($key, 'user', 'red', [\n                        'campaign' => $this->campaign->name,\n                        'reason' => $rejection,\n                    ])\n                );\n            Rejected::dispatch($this->application, $this->campaign, $this->user);\n            $this->application->update(['status' => ApplicationStatus::Rejected]);\n        } else {\n            $this->approve((int) Arr::get($data, 'role_id'), $this->purify(Arr::get($data, 'reason')));\n            $this->application->update(['status' => ApplicationStatus::Approved]);\n        }\n\n        return $return;\n    }\n\n    protected function approve(int $roleID, string $message = ''): self\n    {\n        // Add the user to the campaign\n        CampaignUser::create([\n            'user_id' => $this->application->user_id,\n            'campaign_id' => $this->campaign->id,\n        ]);\n\n        // Add the user to the role\n        CampaignRoleUser::create([\n            'user_id' => $this->application->user_id,\n            'campaign_role_id' => $roleID,\n        ]);\n        // $message = $this->purify(Arr::get($data, 'message'));\n        if ($message == '') {\n            $key = 'campaign.application.approved';\n        } else {\n            $key = 'campaign.application.approved_message';\n        }\n        // Notify the user\n        $this->application\n            ->user\n            ->notify(\n                new Header(\n                    $key,\n                    'user',\n                    'success',\n                    [\n                        'campaign' => $this->campaign->name,\n                        'reason' => $message,\n                        'link' => route('dashboard', $this->campaign),\n                    ]\n                )\n            );\n\n        Accepted::dispatch($this->application, $this->campaign, $this->user);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/BoostService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Enums\\CampaignVisibility;\nuse App\\Events\\Subscriptions\\Boost;\nuse App\\Events\\Subscriptions\\Disable;\nuse App\\Events\\Subscriptions\\Premium;\nuse App\\Events\\Subscriptions\\SuperBoost;\nuse App\\Events\\Subscriptions\\Upgrade;\nuse App\\Exceptions\\Campaign\\AlreadyBoostedException;\nuse App\\Exceptions\\Campaign\\ExhaustedBoostsException;\nuse App\\Exceptions\\Campaign\\ExhaustedSuperboostsException;\nuse App\\Exceptions\\TranslatableException;\nuse App\\Jobs\\Campaigns\\NotifyAdmins;\nuse App\\Models\\CampaignBoost;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass BoostService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected string $action;\n\n    /** @var bool If updating an existing boost to a superboost */\n    protected bool $upgrade = false;\n\n    public function action(string $action = 'boost'): self\n    {\n        $this->action = $action;\n\n        return $this;\n    }\n\n    public function upgrade(): self\n    {\n        $this->upgrade = true;\n\n        return $this;\n    }\n\n    /**\n     * @throws AlreadyBoostedException\n     * @throws ExhaustedBoostsException\n     */\n    public function boost(): void\n    {\n        if ($this->campaign->boosted() && ! $this->upgrade) {\n            throw new AlreadyBoostedException($this->campaign);\n        } elseif ($this->user->availableBoosts() === 0) {\n            throw new TranslatableException('settings/premium.exceptions.out-of-stock');\n        }\n\n        if ($this->action == 'superboost' && $this->user->availableBoosts() < ($this->upgrade ? 2 : 3)) {\n            throw new ExhaustedSuperboostsException;\n        }\n\n        // How many boosters we need to create in the table. This is silly and could use some refactoring.\n        $amount = 1;\n        if ($this->upgrade) {\n            $amount = 2;\n            Upgrade::dispatch($this->campaign, $this->user);\n        } elseif ($this->action === 'superboost') {\n            $amount = 3;\n            SuperBoost::dispatch($this->campaign, $this->user);\n        } else {\n            Boost::dispatch($this->campaign, $this->user);\n        }\n\n        for ($i = 0; $i < $amount; $i++) {\n            CampaignBoost::create([\n                'campaign_id' => $this->campaign->id,\n                'user_id' => $this->user->id,\n            ]);\n        }\n        $this->campaign->boost_count = $this->campaign->boosts()->count();\n        $this->campaign->saveQuietly();\n\n        $key = $this->action === 'superboost' ? 'boost.superboost' : 'boost.add';\n        $this->notify($key);\n    }\n\n    public function premium(): void\n    {\n        if ($this->campaign->premium()) {\n            throw new TranslatableException('settings/premium.exceptions.already');\n        } elseif ($this->user->availableBoosts() < 1) {\n            throw new TranslatableException('settings/premium.exceptions.out-of-stock');\n        }\n\n        $amount = 4;\n        Premium::dispatch($this->campaign, $this->user);\n\n        for ($i = 0; $i < $amount; $i++) {\n            CampaignBoost::create([\n                'campaign_id' => $this->campaign->id,\n                'user_id' => $this->user->id,\n            ]);\n        }\n        $this->campaign->boost_count = $this->campaign->boosts()->count();\n        $this->campaign->saveQuietly();\n\n        $this->notify('premium.add');\n    }\n\n    /**\n     * Unboost a campaign\n     *\n     * @throws \\Exception\n     */\n    public function unboost(CampaignBoost $campaignBoost): self\n    {\n        $campaignBoost->delete();\n\n        // Delete other boosts on the same campaign if the user is superboosting\n        if (isset($this->user)) {\n            foreach ($this->user->boosts()->where('campaign_id', $campaignBoost->campaign_id)->get() as $boost) {\n                $boost->delete();\n            }\n            Disable::dispatch($this->campaign, $this->user);\n        }\n        $boostCount = $this->campaign->boosts()->count();\n        $this->campaign->boost_count = $boostCount;\n        // Revert back to public visibility\n        if ($this->campaign->isUnlisted()) {\n            $this->campaign->visibility_id = CampaignVisibility::public;\n        }\n\n        $this->campaign->saveQuietly();\n\n        if (isset($this->user)) {\n            $key = $this->user->hasBoosterNomenclature() ? 'boost.remove' : 'premium.remove';\n            $this->notify($key);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Migrate a user away from the old boost concepts\n     */\n    public function migrate(): void\n    {\n        if ($this->user->isLegacyPatron()) {\n            throw new TranslatableException('As a Patreon supporter, your account cannot switch to the new premium campaigns system. Please switch to supporting Kanka directly through the app to migrate to premium campaigns.');\n        }\n\n        $settings = $this->user->settings;\n\n        if (! isset($settings['grandfathered_boost'])) {\n            throw new TranslatableException('Your account has already switched to the premium campaign system.');\n        }\n        unset($settings['grandfathered_boost']);\n        $this->user->settings = $settings;\n        $this->user->saveQuietly();\n\n        // Unboost everything\n        foreach ($this->user->boosts()->with(['campaign', 'user'])->get() as $boost) {\n            $this\n                ->campaign($boost->campaign)\n                ->unboost($boost);\n        }\n    }\n\n    public function back(): void\n    {\n        $settings = $this->user->settings;\n        $settings['grandfathered_boost'] = 1;\n        $this->user->settings = $settings;\n        $this->user->saveQuietly();\n\n        foreach ($this->user->boosts()->with(['campaign', 'user'])->get() as $boost) {\n            $this\n                ->campaign($boost->campaign)\n                ->unboost($boost);\n        }\n    }\n\n    /**\n     * Dispatch a job to notify all campaign admins\n     */\n    protected function notify(string $key): self\n    {\n        NotifyAdmins::dispatch(\n            $this->campaign,\n            $key,\n            'rocket',\n            'maroon',\n            [\n                'user' => $this->user->name,\n                'campaign' => $this->campaign->name,\n                'link' => route('dashboard', $this->campaign),\n            ]\n        );\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Connections/WebService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Connections;\n\nuse App\\Http\\Resources\\Web\\EntityResource;\nuse App\\Models\\Entity;\nuse App\\Models\\Relation;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Collection;\n\nclass WebService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected array $entities = [];\n\n    protected array $parsedEntities = [];\n\n    protected array $nodes = [];\n\n    protected Collection $mirrored;\n\n    public function build(): array\n    {\n        $this->mirrored = new Collection;\n        $this->loadConnections();\n\n        return [\n            'entities' => $this->entities,\n            'nodes' => $this->nodes,\n            'i18n' => $this->i18n(),\n            'urls' => $this->urls(),\n        ];\n    }\n\n    protected function loadConnections(): void\n    {\n        $query = Relation::preparedWith();\n        if (! $this->campaign->boosted()) {\n            $query->limit(config('limits.campaigns.web'))->latest();\n        }\n        $connections = $query->get();\n        foreach ($connections as $connection) {\n            $this->parseConnection($connection);\n        }\n    }\n\n    protected function parseConnection(Relation $connection): void\n    {\n        $this->addEntity($connection->target);\n        $this->addEntity($connection->owner);\n        $this->addNode($connection);\n    }\n\n    protected function addEntity(Entity $entity): void\n    {\n        if (in_array($entity->id, $this->parsedEntities)) {\n            return;\n        }\n        $this->entities[$entity->id] = (new EntityResource($entity))->campaign($this->campaign);\n\n    }\n\n    protected function addNode(Relation $connection): void\n    {\n        // Don't add mirrored relations\n        $mirrorKey = $connection->mirror_id . '-' . $connection->id;\n        if ($connection->isMirrored() and $this->mirrored->has($mirrorKey)) {\n            return;\n        }\n\n        $node = [\n            'id' => $connection->id,\n            'source' => $connection->owner_id,\n            'target' => $connection->target_id,\n            'text' => $connection->relation,\n            'colour' => $connection->colour,\n            'attitude' => $connection->attitude,\n            'type' => 'entity-relation',\n            'is_mirrored' => $connection->isMirrored(),\n            'shape' => $connection->isMirrored() && $connection->mirror && $connection->relation == $connection->mirror->relation ? 'none' : 'triangle',\n        ];\n        if (isset($this->user) && $this->user->can('update', $connection->owner)) {\n            $node['url'] = route('entities.relations.edit', [\n                'campaign' => $this->campaign,\n                'entity' => $connection->owner_id,\n                'relation' => $connection,\n                'from' => 'web',\n            ]);\n        }\n        $this->nodes[] = $node;\n\n        if ($connection->isMirrored() && $connection->mirror && $connection->relation && $connection->relation == $connection->mirror->relation) {\n            $this->mirrored->put($connection->id . '-' . $connection->mirror_id, true);\n        }\n    }\n\n    protected function i18n(): array\n    {\n        return [\n            'add' => __('connections/web.actions.add'),\n            'create' => __('crud.create'),\n            'print' => __('crud.actions.print'),\n            'download' => __('connections/web.actions.download'),\n            'download-png' => __('connections/web.actions.download-png'),\n            'download-pdf' => __('connections/web.actions.download-pdf'),\n            'qq-keyboard-shortcut' => __('header.qq.tooltip') . ' [ N ]',\n            'back' => __('connections/web.actions.back'),\n            'campaign' => $this->campaign->name,\n            'zoom-fit' => __('connections/web.actions.zoom-fit'),\n            'reset-layout' => __('connections/web.actions.reset-layout'),\n        ];\n    }\n\n    protected function urls(): array\n    {\n        return [\n            'create' => route('relations.create', [$this->campaign, 'from' => 'web']),\n            'creator' => route('entity-creator.selection', $this->campaign),\n            'back' => route('relations.index', [$this->campaign]),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Counters/VisibleEntityCountService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Counters;\n\nuse App\\Enums\\Permission;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\n\nclass VisibleEntityCountService\n{\n    use CampaignAware;\n\n    protected CampaignRole $role;\n\n    protected int $count;\n\n    protected array $types;\n\n    protected array $ids;\n\n    public function process(): void\n    {\n        $this\n            ->role()\n            ->permissions()\n            ->count()\n            ->save()\n            ->cleanup();\n    }\n\n    protected function role(): self\n    {\n        $this->role = CampaignRole::where([\n            'campaign_id' => $this->campaign->id,\n            'is_public' => true,\n        ])\n            ->with('permissions')\n            ->first();\n\n        return $this;\n    }\n\n    protected function permissions(): self\n    {\n        $this->types = $this->ids = [];\n        /** @var CampaignPermission $permission */\n        foreach ($this->role->permissions as $permission) {\n            if ($permission->isAction(Permission::View->value)) {\n                if (! empty($permission->entity_id)) {\n                    $this->ids[] = $permission->entity_id;\n                } else {\n                    $this->types[] = $permission->entity_type_id;\n                }\n            }\n        }\n\n        return $this;\n    }\n\n    protected function count(): self\n    {\n        // Now that we have the types and ids, we can count the number of visible entities in this campaign\n        $this->count = Entity::where(['campaign_id' => $this->campaign->id])\n            ->where('is_private', false)\n            ->where(function ($sub) {\n                return $sub->inTypes($this->types)\n                    ->orWhereIn('id', $this->ids);\n            })\n            ->count();\n\n        return $this;\n    }\n\n    protected function save(): self\n    {\n        $this->campaign->visible_entity_count = $this->count;\n        $this->campaign->saveQuietly();\n\n        return $this;\n    }\n\n    protected function cleanup(): void\n    {\n        unset($this->count);\n        unset($this->campaign);\n        unset($this->role);\n        unset($this->ids);\n        unset($this->types);\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/CreateService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Enums\\UserAction;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDescription;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\CampaignSetting;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\EntityType;\nuse App\\Notifications\\Header;\nuse App\\Services\\Users\\CampaignService;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CreateService\n{\n    use RequestAware;\n    use UserAware;\n\n    protected Campaign $campaign;\n\n    protected array $data;\n\n    public function __construct(protected CampaignService $campaignService) {}\n\n    public function data(array $data): self\n    {\n        $this->data = $data;\n\n        return $this;\n    }\n\n    public function create(): Campaign\n    {\n        $data = $this->data ?? $this->request->all();\n        $entry = Arr::get($data, 'description');\n        $excerpt = Arr::get($data, 'excerpt');\n\n        DB::beginTransaction();\n        try {\n            $this->campaign = Campaign::create($data);\n\n            $this\n                ->slug()\n                ->notify()\n                ->roles()\n                ->settings()\n                ->description($entry, $excerpt)\n                ->log();\n\n            DB::commit();\n        } catch (Exception $e) {\n            DB::rollBack();\n            throw $e;\n        }\n\n        return $this->campaign;\n    }\n\n    protected function notify(): self\n    {\n        $this->user->notify(new Header(\n            'campaign.created',\n            'check',\n            'success',\n            [\n                'campaign' => $this->campaign->name,\n                'link' => route('dashboard', ['campaign' => $this->campaign]),\n            ]\n        ));\n\n        return $this;\n    }\n\n    protected function roles(): self\n    {\n        $role = new CampaignUser([\n            'user_id' => $this->user->id,\n            'campaign_id' => $this->campaign->id,\n        ]);\n        $role->save();\n\n        $role = CampaignRole::create([\n            'campaign_id' => $this->campaign->id,\n            'name' => __('campaigns.members.roles.owner'),\n            'is_admin' => true,\n        ]);\n\n        $readOnlyRoles = [];\n\n        $readOnlyRoles[] = CampaignRole::create([\n            'campaign_id' => $this->campaign->id,\n            'name' => __('campaigns.members.roles.public'),\n            'is_public' => true,\n        ]);\n\n        $readOnlyRoles[] = CampaignRole::create([\n            'campaign_id' => $this->campaign->id,\n            'name' => __('campaigns.members.roles.player'),\n        ]);\n\n        $entityTypes = EntityType::default()->get();\n\n        foreach ($readOnlyRoles as $readOnlyRole) {\n            foreach ($entityTypes as $entityType) {\n                CampaignPermission::create([\n                    'campaign_role_id' => $readOnlyRole->id,\n                    'access' => true,\n                    'action' => CampaignPermission::ACTION_READ,\n                    'entity_type_id' => $entityType->id,\n                ]);\n            }\n        }\n\n        $member = new CampaignRoleUser([\n            'campaign_role_id' => $role->id,\n            'user_id' => $this->user->id,\n        ]);\n        $member->save();\n\n        return $this;\n    }\n\n    protected function slug(): self\n    {\n        $this->campaign->slug = (string) $this->campaign->id;\n        $this->campaign->saveQuietly();\n\n        return $this;\n    }\n\n    protected function settings(): self\n    {\n        $setting = new CampaignSetting([\n            'campaign_id' => $this->campaign->id,\n            'dice_rolls' => 0,\n            'conversations' => 0,\n        ]);\n        $setting->save();\n\n        return $this;\n    }\n\n    protected function description(?string $entry, ?string $excerpt): self\n    {\n        if ($entry !== null || $excerpt !== null) {\n            CampaignDescription::create([\n                'campaign_id' => $this->campaign->id,\n                'description' => $entry,\n                'excerpt' => $excerpt,\n            ]);\n        }\n\n        return $this;\n    }\n\n    protected function log(): self\n    {\n        // Make sure we save the last campaign id to avoid infinite loops\n        $this->campaignService\n            ->user($this->user)\n            ->campaign($this->campaign)\n            ->set();\n\n        $this->user->log(UserAction::campaignNew, ['campaign' => $this->campaign->id]);\n        UserCache::clear();\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/DefaultImageService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailCreated;\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailDeleted;\nuse App\\Events\\Campaigns\\Thumbnails\\ThumbnailsDeleted;\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Support\\Arr;\n\nclass DefaultImageService\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use UserAware;\n\n    public function save(Request $request): bool\n    {\n        // Does the campaign already have this type? If yes, let's stop\n        $images = $this->campaign->default_images;\n        if ($images === null) {\n            $images = [];\n        }\n        if (Arr::has($images, $this->entityType->pluralCode())) {\n            return false;\n        }\n        /** @var UploadedFile $source */\n        $source = $request->file('default_entity_image');\n\n        $image = new Image;\n        $image->campaign_id = $this->campaign->id;\n        $image->ext = $source->extension();\n        $image->size = (int) ceil($source->getSize() / 1024); // kb\n        $image->name = mb_substr($source->getFileName(), 0, 45);\n        $image->is_default = true;\n        $image->save();\n\n        $source\n            ->storePubliclyAs(\n                $image->folder,\n                $image->file\n            );\n\n        $images[$this->entityType->pluralCode()] = $image->id;\n        $this->campaign->default_images = $images;\n        $this->campaign->saveQuietly();\n\n        ThumbnailCreated::dispatch($this->campaign, $this->entityType, $this->user);\n\n        return true;\n    }\n\n    /**\n     * Remove a default image\n     */\n    public function destroy(): bool\n    {\n        $images = $this->campaign->default_images;\n        if ($images === null) {\n            $images = [];\n        }\n\n        if (! isset($images[$this->entityType->pluralCode()])) {\n            return false;\n        }\n        /** @var ?Image $image */\n        $image = Image::find($images[$this->entityType->pluralCode()]);\n        if (empty($image)) {\n            return false;\n        }\n        $image->delete();\n\n        unset($images[$this->entityType->pluralCode()]);\n        $this->campaign->default_images = $images;\n        $this->campaign->saveQuietly();\n\n        ThumbnailDeleted::dispatch($this->campaign, $this->entityType, $this->user);\n\n        return true;\n    }\n\n    /**\n     * Remove all default images from a campaign\n     */\n    public function destroyAll(): void\n    {\n        $images = $this->campaign->default_images ?? [];\n\n        $imageModels = Image::find($images);\n\n        foreach ($imageModels as $image) {\n            $image->delete();\n        }\n\n        $this->campaign->default_images = [];\n        $this->campaign->saveQuietly();\n\n        ThumbnailsDeleted::dispatch($this->campaign, $this->user);\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/DeletionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Enums\\UserAction;\nuse App\\Notifications\\Header;\nuse App\\Services\\Users\\CampaignService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass DeletionService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function __construct(\n        protected CampaignService $campaignService,\n        protected SearchCleanupService $searchCleanupService,\n    ) {}\n\n    public function delete(): void\n    {\n        $this->user->log(UserAction::campaignDelete, ['campaign' => $this->campaign->id]);\n        $this->campaign->delete();\n\n        // Todo: queue this maybe\n        $this->searchCleanupService->campaign($this->campaign)->cleanup();\n\n        // Delete boosters, so the user can use them on other campaigns.\n        // If the person boosting isn't the current user, maybe we could warn them?\n        $this->campaign->boosts()->delete();\n\n        // Log for the user\n        foreach ($this->campaign->users as $member) {\n            $member->notify(new Header(\n                'campaign.deleted',\n                'trash',\n                'yellow',\n                [\n                    'campaign' => $this->campaign->name,\n                ]\n            ));\n        }\n\n        $this->campaignService->user($this->user)->next();\n    }\n\n    public function cleanup(): void\n    {\n        // Since these are generally s3/minio storages, we need this mumbo jumbo\n        $folders = ['campaign', 'campaigns', 'w'];\n        foreach ($folders as $folder) {\n            $path = $folder . '/' . $this->campaign->id;\n            if (! Storage::directoryExists($path)) {\n                continue;\n            }\n            $files = Storage::allFiles($path);\n            if (! empty($files)) {\n                Storage::delete($files);\n            }\n            Storage::deleteDirectory($path);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/ExportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Enums\\CampaignExportStatus;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Mentions;\nuse App\\Facades\\Module;\nuse App\\Models\\CampaignExport;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\Image;\nuse App\\Models\\Map;\nuse App\\Models\\MiscModel;\nuse App\\Notifications\\Header;\nuse App\\Services\\Entity\\MarkdownExportService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Avatar;\nuse Exception;\nuse Illuminate\\Support\\Facades\\File;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse Zip;\nuse ZipArchive;\n\nclass ExportService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected string $exportPath;\n\n    protected string $path;\n\n    protected string $file;\n\n    protected ZipArchive $archive;\n\n    protected int $files = 0;\n\n    protected int $filesize = 0;\n\n    protected bool $cloudfront = false;\n\n    protected bool $isMarkdown = false;\n\n    protected string $version;\n\n    protected CampaignExport $log;\n\n    protected int $totalElements;\n\n    protected int $currentElements;\n\n    public function __construct(protected MarkdownExportService $markdown) {}\n\n    public function exportPath(): string\n    {\n        return $this->exportPath;\n    }\n\n    public function markdown($isMarkdown = false): self\n    {\n        $this->isMarkdown = $isMarkdown;\n\n        return $this;\n    }\n\n    public function isJson(): bool\n    {\n        return ! $this->isMarkdown;\n    }\n\n    public function log(CampaignExport $campaignExport): self\n    {\n        $this->log = $campaignExport;\n\n        return $this;\n    }\n\n    public function export(): self\n    {\n        try {\n            $this\n                ->prepare()\n                ->info()\n                ->campaignJson()\n                ->campaignModules()\n                ->customCampaignModules()\n                ->entities()\n                ->customEntities()\n                ->gallery()\n                ->finish()\n                ->notify();\n\n            $this->log->update([\n                'status' => CampaignExportStatus::finished,\n                'size' => $this->filesize(),\n                'path' => $this->exportPath(),\n            ]);\n        } catch (Exception $e) {\n            $this->log\n                ->update([\n                    'status' => CampaignExportStatus::failed,\n                ]);\n            if (isset($this->path)) {\n                $this->cleanup();\n            }\n            Log::error('Campaign export', ['action' => 'export', 'err' => $e->getMessage()]);\n            throw $e;\n        }\n\n        return $this;\n    }\n\n    public function filesize(): int\n    {\n        return $this->filesize;\n    }\n\n    protected function campaignModules(): self\n    {\n        // If markdown export, skip\n        if ($this->isMarkdown) {\n            return $this;\n        }\n\n        $modules = [];\n        $settings = $this->campaign->setting->toArray();\n        unset($settings['id'], $settings['campaign_id'], $settings['created_at'], $settings['updated_at']);\n        $entities = config('entities.ids');\n\n        foreach ($settings as $name => $active) {\n            $module = ['enabled' => $active];\n            try {\n                if ($this->campaign->hasModuleName($entities[Str::singular($name)])) {\n                    $module['name_singular'] = $this->campaign->moduleName($entities[Str::singular($name)]);\n                }\n                if ($this->campaign->hasModuleName($entities[Str::singular($name)], true)) {\n                    $module['name_plural'] = $this->campaign->moduleName($entities[Str::singular($name)], true);\n                }\n                if ($this->campaign->hasModuleIcon($entities[Str::singular($name)])) {\n                    $module['icon'] = $this->campaign->moduleIcon($entities[Str::singular($name)]);\n                }\n            } catch (Exception $e) {\n            }\n            $modules[$name] = $module;\n        }\n        $this->archive->addFromString('settings/modules.json', json_encode($modules));\n        $this->files++;\n\n        return $this;\n    }\n\n    protected function customCampaignModules(): self\n    {\n        // If markdown export, skip\n        if ($this->isMarkdown) {\n            return $this;\n        }\n\n        $settings = $this->campaign->entityTypes->where('is_special', 1)->select('id', 'code', 'is_enabled', 'singular', 'plural', 'icon')->toArray();\n        $this->archive->addFromString('settings/custom-modules.json', json_encode($settings));\n        $this->files++;\n\n        return $this;\n    }\n\n    protected function prepare(): self\n    {\n        $this->version = config('app.version');\n        $this->exportPath = 'app/exports/';\n        $saveFolder = storage_path($this->exportPath);\n        File::ensureDirectoryExists($saveFolder);\n\n        // We want the full path for jobs running in the queue.\n        $this->file =\n            Str::slug($this->campaign->name) . '_' .\n            date('Ymd_His') . '.zip';\n        Log::debug('Campaign export', ['action' => 'preparing', 'exportPath' => $this->exportPath, 'file' => $this->file]);\n        CampaignCache::campaign($this->campaign);\n        if ($this->isMarkdown) {\n            CampaignCache::user($this->user);\n            Mentions::campaign($this->campaign);\n            Avatar::campaign($this->campaign);\n            CampaignLocalization::forceCampaign($this->campaign);\n            Module::campaign($this->campaign);\n            $this->markdown->user($this->user);\n        }\n        $this->path = $saveFolder . $this->file;\n        $this->archive = new ZipArchive;\n        $creation = $this->archive->open($this->path, ZipArchive::CREATE | ZipArchive::OVERWRITE);\n        if (! $creation) {\n            throw new Exception('Could not create zip file');\n        }\n        Log::debug('Campaign export', ['action' => 'zip created', 'path' => $this->path]);\n\n        // Count the number of elements to export to get a rough idea of progress\n        $this->totalElements = Entity::where('campaign_id', $this->campaign->id)->count() + 1; // Campaign json;\n        if ($this->isJson()) {\n            $this->totalElements = $this->totalElements + Image::where('campaign_id', $this->campaign->id)->count();\n        }\n\n        $this->currentElements = 0;\n\n        $cloudfront = config('filesystems.disks.cloudfront.url');\n        if ($cloudfront) {\n            $this->cloudfront = true;\n        }\n\n        return $this;\n    }\n\n    protected function info(): self\n    {\n        if ($this->isMarkdown) {\n            return $this;\n        }\n\n        $info = [\n            'kanka_version' => config('app.version'),\n            'export_version' => $this->version,\n            'started' => date('Y-m-d H:i:s'),\n        ];\n        $this->archive->addFromString('info.json', json_encode($info));\n\n        return $this;\n    }\n\n    protected function campaignJson(): self\n    {\n        // We don't want the whole model to be available to the export.\n        // It would probably make more sense to have a resource for this.\n        $hidden = [\n            'boost_count', 'visible_entity_count', 'is_hidden',\n        ];\n\n        if ($this->isMarkdown) {\n            $this->archive->addFromString('campaign.md', $this->markdown->campaign($this->campaign)->campaignMarkdown());\n        } else {\n            $this->archive->addFromString('campaign.json', $this->campaign->makeHidden($hidden)->toJson());\n        }\n\n        $this->files++;\n        $image = $this->campaign->image;\n        if (! empty($image) && Str::contains($image, '?') && Storage::exists($image)) {\n            $this->addImage($image, $image);\n        }\n        $image = $this->campaign->header_image;\n        if (! empty($image) && Str::contains($image, '?') && Storage::exists($image)) {\n            $this->addImage($image, $image);\n        }\n\n        $this->progress();\n\n        return $this;\n    }\n\n    protected function entities(): self\n    {\n        $entityWith = [\n            'entity',\n            'entity.entityTags', 'entity.relationships',\n            'entity.posts', 'entity.posts.postTags', 'entity.abilities', 'entity.abilities.ability',\n            'entity.reminders',\n            'entity.image',\n            'entity.header',\n            'entity.assets',\n            'entity.files',\n            'entity.mentions',\n            'entity.inventories',\n            'entity.inventories.item',\n            'entity.entityAttributes',\n        ];\n        $entities = config('entities.classes-plural');\n        foreach ($entities as $entity => $class) {\n            if (! $this->campaign->enabled($entity) || ! method_exists($class, 'export')) {\n                continue;\n            }\n            try {\n                $property = Str::camel($entity);\n                $smartWith = $this->smartWith($entityWith, $class);\n                foreach ($this->campaign->$property()->with($smartWith)->has('entity')->get() as $model) {\n                    $this->process($entity, $model);\n                }\n            } catch (Exception $e) {\n                Log::error('Campaign export', ['err' => $e->getMessage()]);\n                // $saveFolder = storage_path($this->exportPath);\n                // $this->archive->saveTo($saveFolder);\n                throw new Exception(\n                    'Missing campaign entity relation: ' . $entity . '-' . $class . '? '\n                    . $e->getMessage()\n                );\n            }\n        }\n\n        return $this;\n    }\n\n    protected function customEntities(): self\n    {\n        $entityWith = [\n            'entityTags', 'relationships',\n            'posts', 'posts.postTags', 'abilities', 'abilities.ability',\n            'reminders',\n            'image',\n            'header',\n            'assets',\n            'files',\n            'mentions',\n            'inventories',\n            'inventories.item',\n            'entityAttributes',\n        ];\n\n        $entityTypes = $this->campaign->entityTypes->where('is_special', 1)->all();\n\n        foreach ($entityTypes as $entityType) {\n            if (! $entityType->isEnabled()) {\n                continue;\n            }\n\n            try {\n                $base = Entity::inTypes($entityType->id)\n\n                    ->with($entityWith)\n                    ->get();\n\n                $name = Str::camel(Str::slug($entityType->plural)) . '_' . $entityType->id;\n                foreach ($base as $model) {\n                    $this->process($name, $model);\n                }\n            } catch (Exception $e) {\n                Log::error('Campaign export', ['err' => $e->getMessage()]);\n                //                $saveFolder = storage_path($this->exportPath);\n                //                $this->archive->saveTo($saveFolder);\n                throw new Exception(\n                    'Missing campaign custom entity relation: ' . $entityType->singular . '? '\n                    . $e->getMessage()\n                );\n            }\n        }\n\n        return $this;\n    }\n\n    protected function smartWith(array $with, string $entityClass): array\n    {\n        /** @var MiscModel $class */\n        $class = app()->make($entityClass);\n        // @phpstan-ignore-next-line\n        foreach ($class->exportRelations() as $rel) {\n            $with[] = $rel;\n        }\n\n        return $with;\n    }\n\n    protected function gallery(): self\n    {\n        if ($this->isMarkdown) {\n            return $this;\n        }\n\n        foreach ($this->campaign->images()->with('imageFolder')->get() as $image) {\n            try {\n                /** @var Image $image */\n                $this->processImage($image);\n            } catch (Exception $e) {\n                //                $saveFolder = storage_path($this->exportPath);\n                //                $this->archive->saveTo($saveFolder);\n                throw new Exception(\n                    $e->getMessage()\n                );\n            }\n        }\n\n        return $this;\n    }\n\n    protected function processImage(Image $image): self\n    {\n        try {\n            $this->archive->addFromString('gallery/' . $image->id . '.json', $image->export());\n            $this->files++;\n        } catch (Exception $e) {\n            Log::warning('Campaign export', ['err' => 'Can\\'t get gallery image', 'image' => $image->id]);\n        }\n\n        if (! $image->isFolder() && Storage::exists($image->path)) {\n            $this->addImage($image->path, 'gallery/' . $image->id . '.' . $image->ext);\n        }\n        $this->progress();\n\n        return $this;\n    }\n\n    protected function process(string $module, $model): self\n    {\n        if ($model instanceof Entity) {\n            $entity = $model;\n        } else {\n            $entity = $model->entity;\n        }\n\n        if ($this->isMarkdown) {\n            $exportData = $this->markdown->campaign($this->campaign)->module($module)->entity($entity)->markdown();\n            $this->archive->addFromString($module . '/' . Str::slug($model->name) . '_' . $entity->id . '.md', $exportData);\n        } else {\n            $exportData = $model->export();\n            if ($model instanceof Entity) {\n                $exportData = json_encode(['entity' => $exportData]);\n            }\n            $this->archive->addFromString($module . '/' . Str::slug($model->name) . '_' . $entity->id . '.json', $exportData);\n        }\n\n        $this->files++;\n\n        $path = $entity->image_path;\n        if (! empty($path) && ! Str::contains($path, '?') && Storage::exists($path)) {\n            $this->addImage($path, $path);\n        }\n        $path = $entity->header_image;\n        if (! empty($path) && ! Str::contains($path, '?') && Storage::exists($path)) {\n            $this->addImage($path, $path);\n        }\n\n        /** @var EntityAsset $file */\n        foreach ($entity->files as $file) {\n            if (! isset($file->metadata['path'])) {\n                continue;\n            }\n            $path = $file->metadata['path'];\n            if (! Storage::exists($path)) {\n                continue;\n            }\n            $this->addImage($path, $path);\n        }\n\n        // Layers are now stored in the gallery so this no longer applies\n        //        if ($model instanceof Map) {\n        //            foreach ($model->layers as $layer) {\n        //                $path = $layer->image;\n        //                if (! $path || ! Storage::exists($path)) {\n        //                    continue;\n        //                }\n        //                $this->addImage($path, $path);\n        //            }\n        //        }\n\n        $this->progress();\n\n        return $this;\n    }\n\n    protected function notify(): self\n    {\n        $this->user->notify(new Header(\n            'campaign.export',\n            'download',\n            'success',\n            [\n                'link' => route('campaign.export', $this->campaign),\n                'time' => 120,\n                'campaign' => $this->campaign->name,\n            ]\n        ));\n\n        return $this;\n    }\n\n    protected function finish(): self\n    {\n        // Save all the content.\n        try {\n\n            if ($this->isMarkdown) {\n                $exportData = $this->markdown->exportIndex();\n                $this->archive->addFromString('index.md', $exportData);\n                $this->files++;\n            }\n\n            $this->archive->close();\n            $path = 'exports/' . $this->campaign->id;\n            $this->exportPath = $path . '/' . $this->file;\n            Log::info('Campaign export', ['action' => 'finished generating zip', 'exportPath' => $this->exportPath, 'path' => $this->path, 'file' => $this->file]);\n\n            Storage::disk('s3')->putFileAs($path, $this->path, $this->file, 'public');\n            $this->filesize = (int) floor(filesize($this->path) / pow(1024, 2));\n            Log::info('Campaign export', ['action' => 'saved to disk']);\n\n        } catch (Exception $e) {\n            Log::error('Campaign export', ['action' => 'finish', 'err' => $e->getMessage()]);\n            // The export might fail if the zip is too big.\n            $this->files = 0;\n            throw $e;\n        }\n\n        $this->cleanup();\n\n        return $this;\n    }\n\n    protected function cleanup(): void\n    {\n        if (! isset($this->path)) {\n            return;\n        }\n        // Don't delete zips on debug mode\n        if (app()->hasDebugModeEnabled()) {\n            return;\n        }\n        if (file_exists($this->path) && ! is_dir($this->path)) {\n            unlink($this->path);\n        }\n    }\n\n    /**\n     * Track that the export had an issue\n     */\n    public function fail(): self\n    {\n\n        // Notify the user that something went wrong\n        $this->user->notify(new Header(\n            'campaign.export_error',\n            'circle-exclamation',\n            'red',\n            [\n                'campaign' => $this->campaign->name,\n            ]\n        ));\n\n        $this->cleanup();\n\n        return $this;\n    }\n\n    /**\n     * Each time an element is added to the zip, there is a chance that the progress is increased\n     */\n    protected function progress(): void\n    {\n        $this->currentElements++;\n\n        $total = round($this->currentElements / $this->totalElements, 2) * 100;\n\n        // Only track in 1 percentage point increments\n        if ($total < ($this->log->progress + 1)) {\n            return;\n        }\n        $this->log->progress = $total;\n        $this->log->save();\n    }\n\n    protected function addImage(string $path, string $fileName): void\n    {\n        $maxRetries = 3;\n        $retry = 0;\n        while ($retry < $maxRetries) {\n            try {\n                if (! $this->cloudfront) {\n                    // In Laravel, Storage::get() will load the image in memory but not get rid of it until\n                    // garbage collection, so to avoid memory issues, we do it ourselves\n                    $stream = Storage::disk('s3')->readStream($path);\n                } else {\n                    // In prod, s3 assets are behind cloudfront, so we can be even more efficient\n                    $stream = Storage::disk('cloudfront')->readStream($path);\n                }\n                $content = stream_get_contents($stream);\n                fclose($stream);\n                $this->archive->addFromString($fileName, $content);\n                $this->files++;\n\n                return;\n            } catch (\\Throwable $e) {\n                $retry++;\n                usleep(200_000 * $retry); // exponential backoff (200ms, 400ms, 600ms)\n            }\n        }\n        Log::error('Campaign export', ['err' => 'S3 GetObject permanently failed', 'attempt' => $retry, 'path' => $path]);\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Exports/QueueService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Exports;\n\nuse App\\Enums\\CampaignExportStatus;\nuse App\\Jobs\\Campaigns\\Export;\nuse App\\Models\\CampaignExport;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass QueueService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public int $type = 1;\n\n    public function queue()\n    {\n        $entitiesExport = CampaignExport::create([\n            'campaign_id' => $this->campaign->id,\n            'created_by' => $this->user->id,\n            'type' => $this->type,\n            'status' => CampaignExportStatus::scheduled,\n        ]);\n\n        Export::dispatch($this->campaign, $this->user, $entitiesExport)->onQueue('heavy');\n    }\n\n    public function type(int $type): self\n    {\n        $this->type = $type;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/FollowService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\CampaignFollower;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass FollowService\n{\n    use CampaignAware;\n    use UserAware;\n\n    /**\n     * Update a user's following of a campaign.\n     *\n     * @return bool If true, the user is following the campaign\n     */\n    public function update(): bool\n    {\n        if ($this->campaign->isFollowing()) {\n            return ! $this->remove();\n        }\n\n        return $this->add();\n    }\n\n    public function remove(): bool\n    {\n        /** @var ?CampaignFollower $follow */\n        $follow = CampaignFollower::where([\n            'campaign_id' => $this->campaign->id,\n            'user_id' => $this->user->id,\n        ])->first();\n\n        if (empty($follow)) {\n            return false;\n        }\n        $follow->delete();\n\n        return true;\n    }\n\n    public function add(): bool\n    {\n        $follow = new CampaignFollower;\n        $follow->campaign_id = $this->campaign->id;\n        $follow->user_id = $this->user->id;\n\n        return $follow->save();\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Gallery/BulkService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Gallery;\n\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\n\nclass BulkService\n{\n    use CampaignAware;\n\n    protected array $files;\n\n    public function files(array $files): self\n    {\n        $this->files = $files;\n\n        return $this;\n    }\n\n    public function delete(): int\n    {\n        if (count($this->files) === 0) {\n            return 0;\n        }\n        $count = Image::whereIn('id', $this->files)->delete();\n\n        return $count;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/GenreService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\Genre;\nuse App\\Traits\\CampaignAware;\n\nclass GenreService\n{\n    use CampaignAware;\n\n    public function save(array $ids): void\n    {\n        $existing = [];\n        /** @var Genre $genre */\n        foreach ($this->campaign->genres as $genre) {\n            $existing[$genre->id] = $genre->slug;\n        }\n        $new = [];\n\n        foreach ($ids as $id) {\n            if (! empty($existing[$id])) {\n                unset($existing[$id]);\n            } else {\n                $genre = Genre::find($id);\n                if (! empty($genre)) {\n                    $new[] = $genre->id;\n                }\n            }\n        }\n        $this->campaign->genres()->attach($new);\n\n        // Detatch the remaining\n        if (! empty($existing)) {\n            $this->campaign->genres()->detach(array_keys($existing));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/ImportIdMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import;\n\nclass ImportIdMapper\n{\n    protected array $misc = [];\n\n    protected array $customEntityTypes = [];\n\n    protected array $customEntityTypeNames = [];\n\n    protected array $entities = [];\n\n    protected array $gallery = [];\n\n    protected array $posts = [];\n\n    protected array $timelineElements = [];\n\n    protected array $questElements = [];\n\n    public function put(string $type, int $old, int $new): self\n    {\n        $this->misc[$type][$old] = $new;\n\n        return $this;\n    }\n\n    public function putEntity(int $old, int $new): self\n    {\n        $this->entities[$old] = $new;\n\n        return $this;\n    }\n\n    public function putCustomEntityType(int $old, int $new): self\n    {\n        $this->customEntityTypes[$old] = $new;\n\n        return $this;\n    }\n\n    public function putCustomEntityTypeName(string $old, string $oldPlural): self\n    {\n        $this->customEntityTypeNames[$old] = $oldPlural;\n\n        return $this;\n    }\n\n    public function putGallery(string $old, string $new): self\n    {\n        $this->gallery[$old] = $new;\n\n        return $this;\n    }\n\n    public function putPost(int $old, int $new): self\n    {\n        $this->posts[$old] = $new;\n\n        return $this;\n    }\n\n    public function putQuestElement(int $old, int $new): self\n    {\n        $this->questElements[$old] = $new;\n\n        return $this;\n    }\n\n    public function putTimelineElement(int $old, int $new): self\n    {\n        $this->timelineElements[$old] = $new;\n\n        return $this;\n    }\n\n    public function get(string $type, int $old): int\n    {\n        return $this->misc[$type][$old];\n    }\n\n    public function has(string $type, int $old): bool\n    {\n        return ! empty($this->misc[$type][$old]);\n    }\n\n    public function getEntity(int $old): int\n    {\n        return $this->entities[$old];\n    }\n\n    public function hasEntity(int $old): bool\n    {\n        return ! empty($this->entities[$old]);\n    }\n\n    public function getCustomEntityType(int $old): int\n    {\n        return $this->customEntityTypes[$old];\n    }\n\n    public function getCustomEntityTypes(): array\n    {\n        return $this->customEntityTypeNames;\n    }\n\n    public function hasOldEntityType(int $old): bool\n    {\n        return ! empty($this->customEntityTypes[$old]);\n    }\n\n    public function getGallery(string $old): string\n    {\n        return $this->gallery[$old];\n    }\n\n    public function hasGallery(string $old): bool\n    {\n        return ! empty($this->gallery[$old]);\n    }\n\n    public function getPost(int $old): int\n    {\n        return $this->posts[$old];\n    }\n\n    public function getTimelineElement(int $old): int\n    {\n        return $this->timelineElements[$old];\n    }\n\n    public function getQuestElement(int $old): int\n    {\n        return $this->questElements[$old];\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/ImportMentions.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import;\n\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\ImageMention;\nuse App\\Models\\Post;\nuse Illuminate\\Support\\Str;\n\ntrait ImportMentions\n{\n    protected array $imageMentions = [];\n\n    protected function mentions(?string $text): ?string\n    {\n        if (empty($text)) {\n            return $text;\n        }\n\n        $text = preg_replace_callback(\n            '`\\[([a-z_]+):(.*?)\\]`i',\n            function ($matches) {\n                $segments = explode('|', $matches[2]);\n                $oldEntityID = (int) $segments[0];\n                $entityType = $matches[1];\n\n                if (! ImportIdMapper::hasEntity($oldEntityID)) {\n                    return $matches[0];\n                }\n                $entityID = ImportIdMapper::getEntity($oldEntityID);\n\n                if (Str::contains($matches[2], '|')) {\n                    return '[' . $entityType . ':' . Str::replace($oldEntityID . '|', $entityID . '|', $matches[2] . ']');\n                }\n\n                return '[' . $entityType . ':' . $entityID . ']';\n            },\n            $text\n        );\n\n        $images = [];\n        preg_match_all('/data-gallery-id=\"[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\"/i', $text, $segments);\n        foreach ($segments[0] as $key => $type) {\n            $id = mb_substr($type, 17, -1);\n            if (! in_array($id, $images)) {\n                $images[$key] = $id;\n            }\n        }\n        $this->imageMentions = [];\n        foreach ($images as $uuid) {\n            if (! ImportIdMapper::hasGallery($uuid)) {\n                continue;\n            }\n            $newUuid = ImportIdMapper::getGallery($uuid);\n            $text = Str::replace($uuid, $newUuid, $text);\n            // Old folder structure\n            $text = Str::replace(\n                // @phpstan-ignore-next-line\n                '/campaigns/' . $this->data['campaign_id'] . '/',\n                '/w/' . $this->campaign->id . '/',\n                $text\n            );\n            // Newer folder structure\n            $text = Str::replace(\n                // @phpstan-ignore-next-line\n                '/w/' . $this->data['campaign_id'] . '/',\n                '/w/' . $this->campaign->id . '/',\n                $text\n            );\n            $this->imageMentions[] = $newUuid;\n        }\n\n        return $text;\n    }\n\n    public function imageMentions(): array\n    {\n        return $this->imageMentions;\n    }\n\n    protected function mapImageMentions(mixed $model): self\n    {\n        if (empty($this->imageMentions)) {\n            return $this;\n        }\n\n        foreach ($this->imageMentions as $uuid) {\n            $men = new ImageMention;\n            // @phpstan-ignore-next-line\n            $men->entity_id = $this->entity->id;\n            $men->image_id = $uuid;\n            if ($model instanceof Post) {\n                $men->post_id = $model->id;\n            }\n\n            $men->save();\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/ImportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Enums\\UserAction;\nuse App\\Exceptions\\Campaign\\ImportException;\nuse App\\Facades\\BookmarkCache;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CharacterCache;\nuse App\\Facades\\EntityAssetCache;\nuse App\\Facades\\EntityCache;\nuse App\\Facades\\ImportIdMapper;\nuse App\\Facades\\MapMarkerCache;\nuse App\\Facades\\QuestCache;\nuse App\\Facades\\TimelineElementCache;\nuse App\\Models\\Bookmark;\nuse App\\Models\\CampaignImport;\nuse App\\Models\\EntityType;\nuse App\\Models\\UserLog;\nuse App\\Notifications\\Header;\nuse App\\Services\\Campaign\\Import\\Mappers\\AbilityMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\CalendarMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\CampaignMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\CharacterMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\CreatureMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\CustomMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\EventMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\FamilyMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\GalleryMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\ItemMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\JournalMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\LocationMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\MapMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\NoteMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\OrganisationMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\QuestMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\RaceMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\TagMapper;\nuse App\\Services\\Campaign\\Import\\Mappers\\TimelineMapper;\nuse App\\Services\\EntityMappingService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse Throwable;\nuse ZipArchive;\n\nclass ImportService\n{\n    use CampaignAware;\n    use ImportMentions;\n    use UserAware;\n\n    protected ZipArchive $archive;\n\n    protected CampaignImport $job;\n\n    protected GalleryMapper $gallery;\n\n    protected EntityMappingService $entityMappingService;\n\n    protected int $originalCampaignID;\n\n    protected string $dataPath;\n\n    protected array $mappers;\n\n    protected array $logs = [];\n\n    protected array $errors = [];\n\n    protected int $entityCount = 0;\n\n    protected Exception $exception;\n\n    public function __construct(EntityMappingService $entityMappingService)\n    {\n\n        $this->entityMappingService = $entityMappingService;\n    }\n\n    public function job(CampaignImport $job)\n    {\n        $this->job = $job;\n        $this\n            ->campaign($job->campaign)\n            ->user($job->user);\n\n        return $this;\n    }\n\n    public function run(): void\n    {\n        $this\n            ->init()\n            ->mappers()\n            ->download()\n            ->process()\n            ->finish()\n            ->cleanup();\n    }\n\n    protected function init(): self\n    {\n        $this->job->status_id = CampaignImportStatus::RUNNING;\n        $this->job->save();\n\n        return $this;\n    }\n\n    protected function mappers(): self\n    {\n        $this->mappers = [];\n        $setup = [\n            'tags' => TagMapper::class,\n            'calendars' => CalendarMapper::class,\n            'creatures' => CreatureMapper::class,\n            'notes' => NoteMapper::class,\n            'races' => RaceMapper::class,\n            'events' => EventMapper::class,\n            'items' => ItemMapper::class,\n            'journals' => JournalMapper::class,\n            'abilities' => AbilityMapper::class,\n            'families' => FamilyMapper::class,\n            'organisations' => OrganisationMapper::class,\n            'timelines' => TimelineMapper::class,\n            'quests' => QuestMapper::class,\n            'maps' => MapMapper::class,\n            'locations' => LocationMapper::class,\n            'characters' => CharacterMapper::class,\n            'custom' => CustomMapper::class,\n        ];\n        foreach ($setup as $model => $mapperClass) {\n            $this->logs[] = 'Init mapper ' . $model;\n            $mapper = app()->make($mapperClass);\n            $this->mappers[$model] = $mapper\n                ->campaign($this->campaign)\n                ->user($this->user)\n                ->prepare();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Download the files from s3 onto the local machine and unzip it\n     */\n    protected function download(): self\n    {\n        $files = $this->job->config['files'];\n        $path = '/campaigns/' . $this->campaign->id . '/imports/';\n        foreach ($files as $file) {\n            // Log::info('Want to download ' . $file);\n            $s3 = Storage::disk('export')->get($file);\n            $local = $path . uniqid() . '.zip';\n            // Log::info('Will download from the export disk to local ' . $local);\n            Storage::disk('local')->put($local, $s3);\n\n            $this->archive = new ZipArchive;\n            $zipPath = storage_path('app/' . $local);\n            // Log::info('Want to open ' . $zipPath);\n            $this->archive->open($zipPath);\n            // Log::info('Opened ' . $local . ' file');\n            $this->extract();\n            $this->archive->close();\n            unlink($zipPath);\n        }\n\n        return $this;\n    }\n\n    protected function extract(): void\n    {\n        $this->dataPath = 'campaigns/' . $this->campaign->id . '/import-data';\n        $this->archive->extractTo(storage_path('/app/' . $this->dataPath));\n    }\n\n    protected function process()\n    {\n        try {\n            $this->importCampaign()\n                ->moduleSettings()\n                ->customModules()\n                ->gallery()\n                ->entities()\n                ->secondCampaign();\n            $this->job->status_id = CampaignImportStatus::FINISHED;\n        } catch (ImportException $e) {\n            $this->errors = [$e->getMessage()];\n            Log::error('Import', ['where' => 'importException', 'error' => $e->getMessage()]);\n            $this->job->status_id = CampaignImportStatus::FAILED;\n        } catch (Exception $e) {\n            // dump($e->getMessage());\n            // dump($e->getTrace());\n            $this->errors = [$e->getMessage()];\n            Log::error('Import', ['where' => 'exception', 'error' => $e->getMessage()]);\n            $this->job->status_id = CampaignImportStatus::FAILED;\n            $this->exception = $e;\n        }\n\n        return $this;\n    }\n\n    protected function finish(): self\n    {\n        Storage::disk('local')->deleteDirectory($this->dataPath);\n\n        $this->job->logs = $this->logs;\n        $this->job->save();\n\n        $key = 'failed';\n        $colour = 'red';\n        if (! $this->job->isFailed()) {\n            $key = 'success';\n            $colour = 'success';\n\n            UserLog::create([\n                'user_id' => $this->user->id,\n                'type_id' => UserAction::zipImport,\n                'campaign_id' => $this->campaign->id,\n                'data' => [\n                    'module' => 'import',\n                    'action' => 'zip finished',\n                    'count' => $this->entityCount,\n                ],\n            ]);\n        }\n        $this->campaign->notifyAdmins(\n            new Header(\n                'campaign.import.' . $key,\n                'upload',\n                $colour,\n                [\n                    'campaign' => $this->campaign->name,\n                    'link' => route('dashboard', $this->campaign),\n                ]\n            )\n        );\n\n        return $this;\n    }\n\n    protected function importCampaign(): self\n    {\n        // Open the campaign zip\n        $data = $this->open('campaign.json');\n        if ($data == []) {\n            throw new ImportException('No campaign.json found');\n        }\n\n        /** @var CampaignMapper $mapper */\n        $mapper = app()->make(CampaignMapper::class);\n        $this->campaign = $mapper\n            ->path($this->dataPath)\n            ->data($data)\n            ->campaign($this->campaign)\n            ->import();\n\n        $this->originalCampaignID = (int) $data['id'];\n\n        return $this;\n    }\n\n    protected function gallery(): self\n    {\n        $this->gallery = app()->make(GalleryMapper::class);\n        $this->gallery->campaign($this->campaign)\n            ->prepare();\n\n        $path = $this->dataPath . '/gallery';\n        if (! Storage::disk('local')->exists($path)) {\n            $this->logs[] = 'No gallery';\n\n            return $this;\n        }\n\n        Log::info('Campaign import', ['importing' => 'gallery']);\n        $files = Storage::disk('local')->files($path);\n        foreach ($files as $file) {\n            if (! Str::endsWith($file, '.json')) {\n                continue;\n            }\n            $filePath = Str::replace($this->dataPath, '', $file);\n            $data = $this->open($filePath);\n            $this->gallery\n                ->path($path)\n                ->data($data)\n                ->import();\n            unset($data);\n        }\n        $this->gallery->tree()->clear();\n\n        return $this;\n    }\n\n    protected function moduleSettings(): self\n    {\n        // Open the campaign settings file\n        $data = $this->open('settings/modules.json');\n\n        if (! $data) {\n            return $this;\n        }\n        Log::info('Campaign import', ['importing' => 'module settings']);\n\n        $moduleSettings = $this->campaign->setting;\n\n        foreach ($data as $module => $settings) {\n            if (isset($moduleSettings->$module)) {\n                $moduleSettings->$module = $settings['enabled'];\n            }\n        }\n        $moduleSettings->save();\n\n        // Since modules and custom names are cached, any changes to them need to invalidate any existing cache\n        CampaignCache::campaign($this->campaign)->clear();\n        EntityCache::campaign($this->campaign);\n        CharacterCache::campaign($this->campaign);\n        TimelineElementCache::campaign($this->campaign);\n        QuestCache::campaign($this->campaign);\n        MapMarkerCache::campaign($this->campaign);\n        EntityAssetCache::campaign($this->campaign);\n        BookmarkCache::campaign($this->campaign);\n\n        return $this;\n    }\n\n    protected function customModules(): self\n    {\n        // Open the campaign settings file\n        $data = $this->open('settings/custom-modules.json');\n\n        if (! $data || ! $this->campaign->premium()) {\n            return $this;\n        }\n\n        // Dont import more than the campaign is allowed to have.\n        $limit = config('limits.campaigns.modules.premium');\n        if ($this->campaign->isWyvern()) {\n            $limit = config('limits.campaigns.modules.wyvern');\n        } elseif ($this->campaign->isElemental()) {\n            $limit = config('limits.campaigns.modules.elemental');\n        }\n\n        $entityTypes = $this->campaign->entityTypes->count();\n\n        foreach ($data as $module) {\n\n            if ($entityTypes >= $limit) {\n                break;\n            }\n\n            // Create Custom Module\n            $newModule = new EntityType;\n            $newModule->campaign_id = $this->campaign->id;\n            $newModule->is_special = true;\n            $newModule->is_enabled = $module['is_enabled'];\n            $newModule->singular = $module['singular'];\n            $newModule->plural = $module['plural'];\n            $newModule->icon = $module['icon'];\n            $newModule->code = $module['code'];\n            $newModule->save();\n            // Create its corresponding bookmark\n            $bookmark = new Bookmark;\n            $bookmark->campaign_id = $this->campaign->id;\n            $bookmark->entity_type_id = $newModule->id;\n            $bookmark->name = $newModule->plural;\n            $bookmark->save();\n\n            ImportIdMapper::putCustomEntityType($module['id'], $newModule->id);\n            ImportIdMapper::putCustomEntityTypeName($module['code'] . '_' . $module['id'], Str::camel(Str::slug($module['plural'])) . '_' . $module['id']);\n            $entityTypes++;\n        }\n\n        return $this;\n    }\n\n    protected function entities(): self\n    {\n        $fileNames = ImportIdMapper::getCustomEntityTypes();\n\n        /**\n         * @var string $model\n         * @var mixed $mapper\n         */\n        foreach ($this->mappers as $model => $mapper) {\n            if ($model == 'custom') {\n                Log::info('Campaign import', ['importing' => 'custom entities']);\n                // We handle custom models differently.\n                foreach ($fileNames as $fileName => $pluralFileName) {\n                    $this->logs[] = 'Processing ' . $fileName;\n                    $count = 0;\n                    foreach ($this->customFiles($fileName, $pluralFileName) as $file) {\n                        if (! Str::endsWith($file, '.json')) {\n                            continue;\n                        }\n                        $filePath = Str::replace($this->dataPath, '', $file);\n                        $data = $this->open($filePath);\n                        // Log::info('array: ' . json_encode($data));\n                        // Log::info('array: ' . $filePath);\n\n                        $mapper\n                            ->path($this->dataPath)\n                            ->data($data)\n                            ->first();\n                        $count++;\n                        unset($data);\n                    }\n                    $this->logs[] = $count;\n                    $this->entityCount += $count;\n                    $mapper->tree()->clear();\n                }\n            } else {\n                $this->logs[] = 'Processing ' . $model;\n                Log::info('Campaign import', ['importing' => $model]);\n                $count = 0;\n                foreach ($this->files($model) as $file) {\n                    if (! Str::endsWith($file, '.json')) {\n                        continue;\n                    }\n                    $filePath = Str::replace($this->dataPath, '', $file);\n                    $data = $this->open($filePath);\n                    $mapper\n                        ->path($this->dataPath . '/')\n                        ->data($data)\n                        ->first();\n                    $count++;\n                    unset($data);\n                }\n                $this->logs[] = $count;\n                $this->entityCount += $count;\n                $mapper->tree()->clear();\n            }\n        }\n\n        // Second parse\n        foreach ($this->mappers as $model => $mapper) {\n            if ($model == 'custom') {\n                foreach ($fileNames as $fileName => $newId) {\n                    if (! method_exists($mapper, 'second')) {\n                        continue;\n                    }\n                    $this->logs[] = 'Second round ' . $fileName;\n                    $count = 0;\n                    foreach ($this->files($fileName) as $file) {\n                        if (! Str::endsWith($file, '.json')) {\n                            continue;\n                        }\n                        $filePath = Str::replace($this->dataPath, '', $file);\n                        $data = $this->open($filePath);\n                        // Add the original campaign id for gallery image mapping\n                        $data['campaign_id'] = $this->originalCampaignID;\n                        // @phpstan-ignore-next-line\n                        $mapper\n                            ->path($this->dataPath . '/')\n                            ->data($data)\n                            ->second();\n                        $count++;\n                        unset($data);\n                    }\n                    $this->logs[] = $count;\n                }\n            } else {\n                if (! method_exists($mapper, 'second')) {\n                    continue;\n                }\n                $this->logs[] = 'Second round ' . $model;\n                $count = 0;\n                foreach ($this->files($model) as $file) {\n                    if (! Str::endsWith($file, '.json')) {\n                        continue;\n                    }\n                    $filePath = Str::replace($this->dataPath, '', $file);\n                    $data = $this->open($filePath);\n                    // Add the original campaign id for gallery image mapping\n                    $data['campaign_id'] = $this->originalCampaignID;\n                    // @phpstan-ignore-next-line\n                    $mapper\n                        ->path($this->dataPath . '/')\n                        ->data($data)\n                        ->second();\n                    $count++;\n                    unset($data);\n                }\n                $this->logs[] = $count;\n            }\n        }\n\n        foreach ($this->mappers as $model => $mapper) {\n            if ($model == 'custom') {\n                foreach ($fileNames as $fileName => $newId) {\n                    if (! method_exists($mapper, 'third')) {\n                        continue;\n                    }\n                    $this->logs[] = 'Third round ' . $fileName;\n                    $count = 0;\n                    foreach ($this->files($fileName) as $file) {\n                        if (! Str::endsWith($file, '.json')) {\n                            continue;\n                        }\n                        $filePath = Str::replace($this->dataPath, '', $file);\n                        $data = $this->open($filePath);\n                        if (empty($data['entity']['mentions'])) {\n                            continue;\n                        }\n                        // @phpstan-ignore-next-line\n                        $mapper\n                            ->path($this->dataPath . '/')\n                            ->data($data)\n                            ->third();\n                        $count++;\n                        unset($data);\n                    }\n                    $this->logs[] = '- ' . $count;\n                }\n            } else {\n                if (! method_exists($mapper, 'third')) {\n                    continue;\n                }\n                $this->logs[] = 'Third round ' . $model;\n                $count = 0;\n                foreach ($this->files($model) as $file) {\n                    if (! Str::endsWith($file, '.json')) {\n                        continue;\n                    }\n                    $filePath = Str::replace($this->dataPath, '', $file);\n                    $data = $this->open($filePath);\n                    if (empty($data['entity']['mentions'])) {\n                        continue;\n                    }\n                    // @phpstan-ignore-next-line\n                    $mapper\n                        ->path($this->dataPath . '/')\n                        ->data($data)\n                        ->third();\n                    $count++;\n                    unset($data);\n                }\n                $this->logs[] = '- ' . $count;\n            }\n        }\n\n        return $this;\n    }\n\n    protected function files(string $model): array\n    {\n        $path = $this->dataPath . '/' . $model;\n        if (! Storage::disk('local')->exists($path)) {\n            $this->logs[] = 'No ' . $model;\n\n            return [];\n        }\n\n        return Storage::disk('local')->files($path);\n    }\n\n    protected function customFiles(string $model, string $pluralModel): array\n    {\n        $path = $this->dataPath . '/' . $model;\n        $pluralPath = $this->dataPath . '/' . $pluralModel;\n\n        if (Storage::disk('local')->exists($path)) {\n            return Storage::disk('local')->files($path);\n        } elseif (Storage::disk('local')->exists($pluralPath)) {\n            return Storage::disk('local')->files($pluralPath);\n        }\n\n        $this->logs[] = 'No ' . $model;\n\n        return [];\n    }\n\n    protected function open(string $file): array\n    {\n        $path = $this->dataPath . '/' . $file;\n        if (! Storage::disk('local')->exists($path)) {\n            $this->logs[] = 'file ' . $path . ' doesnt exist';\n\n            return [];\n        }\n\n        $fullpath = Storage::disk('local')->path($path);\n        $content = file_get_contents($fullpath);\n        $data = json_decode($content, true);\n\n        if (! is_array($data)) {\n            Log::info('Failed to open ' . $path . ' into a proper json', ['data' => $data]);\n        }\n\n        return $data;\n    }\n\n    protected function secondCampaign(): self\n    {\n        $this->campaign->entry = $this->mentions($this->campaign->entry);\n        $this->campaign->excerpt = $this->mentions($this->campaign->excerpt);\n        $this->campaign->save();\n\n        $this->entityMappingService->silent()->with($this->campaign)->map();\n\n        return $this;\n    }\n\n    protected function cleanup(): self\n    {\n        $files = $this->job->config['files'];\n        foreach ($files as $file) {\n            Storage::disk('local')->delete($file);\n        }\n\n        // Finished with our core loop, now throw any exception for sentry to catch them\n        if (isset($this->exception)) {\n            throw $this->exception;\n        }\n\n        return $this;\n    }\n\n    public function fail(Throwable $e): self\n    {\n        $config = $this->job->config;\n        if (! isset($config['logs'])) {\n            $config['logs'] = [];\n        }\n        $this->job->errors = [$e->getMessage()];\n        $this->job->config = $config;\n        $this->job->status_id = CampaignImportStatus::FAILED;\n        $this->job->save();\n\n        if (app()->bound('sentry')) {\n            app('sentry')->captureException($e);\n        }\n        Log::error('Import', ['where' => 'fail', 'error' => $e->getMessage()]);\n\n        return $this->cleanup();\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/AbilityMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Ability;\nuse App\\Models\\Entity;\n\nclass AbilityMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'ability_id', 'created_at', 'updated_at'];\n\n    protected string $className = Ability::class;\n\n    protected string $mappingName = 'abilities';\n\n    public function first(): void\n    {\n        $this\n            ->prepareModel()\n            ->trackMappings('ability_id');\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.ability'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/BaseEntityMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Attribute;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\EntityMention;\nuse App\\Models\\EntityTag;\nuse App\\Models\\Image;\nuse App\\Models\\Inventory;\nuse App\\Models\\Post;\nuse App\\Models\\PostTag;\nuse App\\Models\\Relation;\nuse App\\Models\\Reminder;\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\ntrait BaseEntityMapper\n{\n    protected function gallery(): self\n    {\n        $image = Arr::get($this->data, 'entity.image_uuid');\n        if (! empty($image) && ImportIdMapper::hasGallery($image)) {\n            $this->entity->image_uuid = ImportIdMapper::getGallery($image);\n        }\n        $image = Arr::get($this->data, 'entity.header_uuid');\n        if (! empty($image) && ImportIdMapper::hasGallery($image)) {\n            $this->entity->header_uuid = ImportIdMapper::getGallery($image);\n        }\n\n        return $this;\n    }\n\n    protected function posts(): self\n    {\n        if (empty($this->data['entity']['posts'])) {\n            return $this;\n        }\n\n        $import = [\n            'name',\n            'entry',\n            'visibility_id',\n            'position',\n            'settings',\n            'layout_id',\n        ];\n        foreach ($this->data['entity']['posts'] as $data) {\n            $post = new Post;\n            $post->entity_id = $this->entity->id;\n            foreach ($import as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $post->$field = $data[$field];\n            }\n            if (! empty($data['location_id']) && ImportIdMapper::has('locations', $data['location_id'])) {\n                $locationID = ImportIdMapper::get('locations', $data['location_id']);\n                if (! empty($locationID)) {\n                    $post->location_id = $locationID;\n                }\n            }\n            if (empty($post->position)) {\n                $post->position = 0;\n            }\n\n            $post->entry = $this->mentions($post->entry);\n            $post->created_by = $this->user->id;\n            $post->save();\n\n            if (array_key_exists('postTags', $data)) {\n                foreach ($data['postTags'] as $oldTag) {\n                    if (! ImportIdMapper::has('tags', $oldTag['tag_id'])) {\n                        continue;\n                    }\n                    $tagID = ImportIdMapper::get('tags', $oldTag['tag_id']);\n                    $postTag = new PostTag;\n                    $postTag->post_id = $post->id;\n                    $postTag->tag_id = $tagID;\n                    $postTag->save();\n                }\n            }\n\n            ImportIdMapper::putPost($data['id'], $post->id);\n            $this->mapImageMentions($post);\n        }\n\n        return $this;\n    }\n\n    protected function assets(): self\n    {\n        if (empty($this->data['entity']['assets'])) {\n            return $this;\n        }\n\n        $import = [\n            'type_id',\n            'visibility_id',\n            'name',\n            'position',\n            'is_pinned',\n        ];\n        foreach ($this->data['entity']['assets'] as $data) {\n            $asset = new EntityAsset;\n            $asset->entity_id = $this->entity->id;\n\n            foreach ($import as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $asset->$field = $data[$field];\n            }\n            if (! empty($data['metadata'])) {\n                if (! empty($data['metadata']['path'])) {\n                    $img = $data['metadata']['path'];\n                    if (! Storage::disk('local')->exists($this->path . $img)) {\n                        // dd('image ' . $this->path . $img . ' doesnt exist');\n                        continue;\n                    }\n\n                    $image = $this->migrateImage($img);\n                    $asset->image_uuid = $image->id;\n                    unset($data['metadata']['path']);\n                    $asset->metadata = $data['metadata'];\n                } else {\n                    $asset->metadata = $data['metadata'];\n                }\n            }\n            if (! empty($data['image_uuid']) && ImportIdMapper::hasGallery($data['image_uuid'])) {\n                $asset->image_uuid = ImportIdMapper::getGallery($data['image_uuid']);\n            }\n            $asset->created_by = $this->user->id;\n            $asset->save();\n        }\n\n        return $this;\n    }\n\n    protected function attributes(): self\n    {\n        if (empty($this->data['entity']['entityAttributes'])) {\n            return $this;\n        }\n\n        $import = [\n            'name',\n            'value',\n            'is_private',\n            'default_order',\n            'is_pinned',\n            'type_id',\n            'is_hidden',\n        ];\n        foreach ($this->data['entity']['entityAttributes'] as $data) {\n            $attr = new Attribute;\n            $attr->entity_id = $this->entity->id;\n\n            foreach ($import as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $attr->$field = $data[$field];\n            }\n            $attr->value = $this->mentions($attr->value);\n            $attr->save();\n        }\n\n        return $this;\n    }\n\n    protected function tags(): self\n    {\n        if (empty($this->data['entity']['entityTags'])) {\n            return $this;\n        }\n\n        foreach ($this->data['entity']['entityTags'] as $data) {\n            if (! ImportIdMapper::has('tags', $data['tag_id'])) {\n                continue;\n            }\n            $tagID = ImportIdMapper::get('tags', $data['tag_id']);\n            $entityTag = new EntityTag;\n            $entityTag->entity_id = $this->entity->id;\n            $entityTag->tag_id = $tagID;\n            $entityTag->save();\n        }\n\n        return $this;\n    }\n\n    protected function reminders(): self\n    {\n\n        if (empty($this->data['entity']['events'])) {\n            return $this;\n        }\n        $fields = [\n            'length',\n            'comment',\n            'is_recurring',\n            'recurring_until',\n            'recurring_periodicity',\n            'colour',\n            'day',\n            'month',\n            'year',\n            'type_id',\n            'visibility_id',\n        ];\n        foreach ($this->data['entity']['events'] as $data) {\n            if (! ImportIdMapper::has('calendars', $data['calendar_id'])) {\n                continue;\n            }\n            $rem = new Reminder;\n            $rem->remindable_id = $this->entity->id;\n            $rem->remindable_type = Entity::class;\n            $rem->calendar_id = ImportIdMapper::get('calendars', $data['calendar_id']);\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $rem->$field = $data[$field];\n            }\n            $rem->created_by = $this->user->id;\n            $rem->save();\n        }\n\n        return $this;\n    }\n\n    protected function relations(): self\n    {\n        if (empty($this->data['entity']['relationships'])) {\n            return $this;\n        }\n\n        $fields = [\n            'relation', 'visibility_id', 'attitude', 'is_pinned', 'colour', 'marketplace_uuid',\n        ];\n        foreach ($this->data['entity']['relationships'] as $data) {\n            if (! ImportIdMapper::hasEntity($data['target_id'])) {\n                continue;\n            }\n            $targetID = ImportIdMapper::getEntity($data['target_id']);\n            $rel = new Relation;\n            $rel->owner_id = $this->entity->id;\n            $rel->target_id = $targetID;\n            $rel->campaign_id = $this->campaign->id;\n            $rel->created_by = $this->user->id;\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $rel->$field = $data[$field];\n            }\n            $rel->save();\n        }\n\n        return $this;\n    }\n\n    protected function abilities(): self\n    {\n        if (empty($this->data['entity']['abilities'])) {\n            return $this;\n        }\n\n        $fields = [\n            'visibility_id', 'charges', 'position', 'note',\n        ];\n        foreach ($this->data['entity']['abilities'] as $data) {\n            if (! ImportIdMapper::has('abilities', $data['ability_id'])) {\n                continue;\n            }\n            $abilityID = ImportIdMapper::get('abilities', $data['ability_id']);\n            if (empty($abilityID)) {\n                continue;\n            }\n\n            $ab = new EntityAbility;\n            $ab->entity_id = $this->entity->id;\n            $ab->ability_id = $abilityID;\n            $ab->created_by = $this->user->id;\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $ab->$field = $data[$field];\n            }\n            $ab->save();\n        }\n\n        return $this;\n    }\n\n    protected function inventory(): self\n    {\n        if (empty($this->data['entity']['inventories'])) {\n            return $this;\n        }\n        $fields = [\n            'name',\n            'amount',\n            'position',\n            'description',\n            'visibility_id',\n            'is_equipped',\n            'copy_item_entry',\n        ];\n        foreach ($this->data['entity']['inventories'] as $data) {\n            $inv = new Inventory;\n            $inv->entity_id = $this->entity->id;\n            if (! empty($data['item_id'])) {\n                if (! ImportIdMapper::has('items', $data['item_id'])) {\n                    continue;\n                }\n                $itemID = ImportIdMapper::get('items', $data['item_id']);\n                if (empty($itemID)) {\n                    continue;\n                }\n                $inv->item_id = $itemID;\n            }\n            $inv->created_by = $this->user->id;\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $inv->$field = $data[$field];\n            }\n            $inv->save();\n        }\n\n        return $this;\n    }\n\n    protected function entityThird(): void\n    {\n        $this\n            ->foreignMentions();\n    }\n\n    /**\n     * Migrate old entity image system to the gallery.\n     */\n    protected function images(): self\n    {\n        $oldImages = ['image_path', 'header_image'];\n        foreach ($oldImages as $old) {\n            $this->migrateToGallery($old);\n        }\n\n        return $this;\n    }\n\n    protected function migrateToGallery(string $old): self\n    {\n        $img = Arr::get($this->data, 'entity.' . $old);\n\n        if (empty($img) || ! Storage::disk('local')->exists($this->path . $img)) {\n            return $this;\n        }\n\n        $image = $this->migrateImage($img);\n\n        if ($old == 'image_path') {\n            $this->entity->image_uuid = ImportIdMapper::getGallery($image->id);\n        } else {\n            $this->entity->header_uuid = ImportIdMapper::getGallery($image->id);\n        }\n\n        return $this;\n    }\n\n    protected function migrateImage(string $img): Image\n    {\n        $imageExt = Str::after($img, '.');\n\n        // We need to create a new Image to migrate to the new system.\n        $image = new Image;\n        $image->campaign_id = $this->campaign->id;\n        $image->ext = $imageExt;\n        $image->name = $this->entity->name;\n        $image->visibility_id = Visibility::All;\n        $size = Storage::disk('local')->size($this->path . $img);\n        $image->size = (int) ceil($size / 1024); // kb\n        $image->save();\n\n        // Upload the file to s3 using streams\n        Storage::writeStream($image->path, Storage::disk('local')->readStream($this->path . $img));\n        ImportIdMapper::putGallery($image->id, $image->id);\n\n        return $image;\n    }\n\n    protected function foreignMentions(): self\n    {\n        if (empty($this->data['entity']['mentions'])) {\n            return $this;\n        }\n\n        foreach ($this->data['entity']['mentions'] as $data) {\n            if (! ImportIdMapper::hasEntity($data['target_id'])) {\n                continue;\n            }\n            try {\n                $men = new EntityMention;\n                $men->entity_id = $this->entity->id;\n                $men->target_id = ImportIdMapper::getEntity($data['target_id']);\n                if (! empty($data['campaign_id'])) {\n                    $men->campaign_id = $this->campaign->id;\n                } elseif (! empty($data['post_id'])) {\n                    $men->post_id = ImportIdMapper::getPost($data['post_id']);\n                } elseif (! empty($data['timeline_element_id'])) {\n                    $men->timeline_element_id = ImportIdMapper::getTimelineElement($data['timeline_element_id']);\n                } elseif (! empty($data['quest_element_id'])) {\n                    $men->quest_element_id = ImportIdMapper::getQuestElement($data['quest_element_id']);\n                }\n                $men->save();\n            } catch (Exception $e) {\n                // Silence issues in parsing mentions\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/CalendarMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Calendar;\nuse App\\Models\\CalendarWeather;\nuse App\\Models\\Entity;\n\nclass CalendarMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'calendar_id', 'created_at', 'updated_at'];\n\n    protected string $className = Calendar::class;\n\n    protected string $mappingName = 'calendars';\n\n    public function first(): void\n    {\n        $this\n            ->prepareModel()\n            ->trackMappings('calendar_id');\n    }\n\n    public function second(): void\n    {\n        // @phpstan-ignore-next-line\n        $this->loadModel()\n            ->weather()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.calendar'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n\n    protected function weather(): self\n    {\n        if (empty($this->data['calendarWeather'])) {\n            return $this;\n        }\n        $fields = [\n            'weather', 'temperature', 'precipitation', 'wind', 'effect', 'name', 'day', 'month', 'year', 'visibility_id',\n        ];\n        foreach ($this->data['calendarWeather'] as $data) {\n            $el = new CalendarWeather;\n            $el->calendar_id = $this->model->id;\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $el->$field = $data[$field];\n            }\n            $el->created_by = $this->user->id;\n            $el->save();\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/CampaignMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Campaign;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\nclass CampaignMapper\n{\n    use CampaignAware;\n    use ImportMapper;\n\n    public function import(): Campaign\n    {\n        // Fields that are fillable but that we don't want to import automatically\n        $forbidden = ['slug', 'name', 'image', 'visibility_id'];\n        $fillable = $this->campaign->getFillable();\n        foreach ($this->data as $property => $value) {\n            if (in_array($property, $forbidden) && ! empty($this->campaign->$property)) {\n                continue;\n            }\n            if (! is_array($value)) {\n                if (! in_array($property, $fillable)) {\n                    continue;\n                }\n                $this->campaign->$property = $value;\n            }\n        }\n\n        $this->image('image');\n        $this->image('header_image');\n\n        $arrays = ['settings', 'default_images', 'ui_settings'];\n        foreach ($arrays as $key) {\n            if (empty($this->data[$key])) {\n                continue;\n            }\n            $this->campaign->$key = $this->data[$key];\n        }\n\n        $this->campaign->save();\n\n        return $this->campaign;\n    }\n\n    protected function image(string $field): void\n    {\n        if (empty($this->data[$field]) || empty($this->campaign->$field)) {\n            return;\n        }\n\n        // Let's see if the original exists on the s3 bucket to avoid a lot of pain\n        $destination = 'w/' . $this->campaign->id . '/' . Str::afterLast($this->data[$field], '/');\n        if (Storage::exists($this->data[$field])) {\n            Storage::copy($this->data[$field], $destination);\n            $this->campaign->$field = $destination;\n\n            return;\n        }\n\n        $path = $this->path . '/' . $this->data[$field];\n        if (! Storage::disk('local')->exists($path)) {\n            return;\n        }\n\n        // Upload the file to s3 using streams\n        Storage::writeStream($destination, Storage::disk('local')->readStream($path));\n        $this->campaign->$field = $destination;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/CharacterMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Character;\nuse App\\Models\\CharacterOrganisation;\nuse App\\Models\\CharacterTrait;\nuse Illuminate\\Support\\Arr;\n\nclass CharacterMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'created_at', 'location_id', 'updated_at', 'race_id', 'family_id'];\n\n    protected string $className = Character::class;\n\n    protected string $mappingName = 'characters';\n\n    public function first(): void\n    {\n        $this\n            ->migrateOldStatus()\n            ->prepareModel()\n            ->trackMappings('character_id');\n    }\n\n    /**\n     * Backward compatibility: resolve old character status fields to entities.status_id.\n     * Old is_dead boolean or child status_id enum (0=alive, 1=dead, 2=missing).\n     */\n    protected function migrateOldStatus(): self\n    {\n        if (array_key_exists('status_id', $this->data['entity'] ?? [])) {\n            return $this;\n        }\n\n        $map = [0 => 'alive', 1 => 'dead', 2 => 'missing'];\n\n        // Old is_dead boolean → enum value\n        if (array_key_exists('is_dead', $this->data) && ! array_key_exists('status_id', $this->data)) {\n            $this->data['status_id'] = (int) $this->data['is_dead'];\n            unset($this->data['is_dead']);\n        }\n\n        // Child-level status_id enum → resolve to category_statuses, then remove\n        // so it doesn't get written back to the characters table's old enum column\n        if (array_key_exists('status_id', $this->data)) {\n            $oldValue = (int) $this->data['status_id'];\n            unset($this->data['status_id']);\n            if (isset($map[$oldValue])) {\n                $this->resolveOldStatusToEntity('character', $map[$oldValue]);\n            }\n        }\n\n        return $this;\n    }\n\n    public function second(): void\n    {\n        // @phpstan-ignore-next-line\n        $this\n            ->loadModel()\n            ->pivot('characterFamilies', 'families', 'family_id')\n            ->pivot('characterRaces', 'races', 'race_id')\n            ->saveModel()\n            ->traits()\n            ->characterLocations()\n            ->memberships()\n            ->entitySecond();\n    }\n\n    protected function traits(): self\n    {\n        if (empty($this->data['characterTraits'])) {\n            return $this;\n        }\n        $fields = ['name', 'entry', 'is_private', 'section_id', 'default_order'];\n        foreach ($this->data['characterTraits'] as $data) {\n            $trait = new CharacterTrait;\n            $trait->character_id = $this->model->id;\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $trait->$field = $data[$field];\n            }\n            $trait->save();\n        }\n\n        return $this;\n    }\n\n    protected function memberships(): self\n    {\n        if (empty($this->data['organisationMemberships'])) {\n            return $this;\n        }\n        $parents = [];\n        foreach ($this->data['organisationMemberships'] as $data) {\n            $member = new CharacterOrganisation;\n            $member->character_id = $this->model->id;\n            $member->organisation_id = ImportIdMapper::get('organisations', $data['organisation_id']);\n            $member->role = $data['role'] ?? null;\n            $member->is_private = $data['is_private'] ?? false;\n            $member->pin_id = $data['pin_id'] ?? null;\n            $member->status_id = $data['status_id'] ?? null;\n            if (! empty($data['parent_id']) && isset($parents[$data['parent_id']])) {\n                $member->parent_id = $parents[$data['parent_id']];\n            }\n            $member->save();\n\n            $parents[$data['id']] = $member->id;\n        }\n\n        return $this;\n    }\n\n    protected function characterLocations(): self\n    {\n        // Support old format\n        if (! empty($this->data['location_id'])) {\n            $locationID = ImportIdMapper::get('locations', $this->data['location_id']);\n            if (! empty($locationID)) {\n                $this->entity->locations()->attach($locationID);\n            }\n        }\n\n        if (! Arr::has($this->data, 'entity.entityLocations')) {\n            return $this;\n        }\n        // New 3.8 format\n        foreach ($this->data['entity']['entityLocations'] as $location) {\n            if (empty($location['location_id'])) {\n                continue;\n            }\n            $locationID = ImportIdMapper::get('locations', $location['location_id']);\n            if (empty($locationID)) {\n                continue;\n            }\n            $this->entity->locations()->attach($locationID);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/CreatureMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Creature;\nuse App\\Models\\Entity;\n\nclass CreatureMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'creature_id', 'created_at', 'updated_at'];\n\n    protected string $className = Creature::class;\n\n    protected string $mappingName = 'creatures';\n\n    public function first(): void\n    {\n        $this\n            ->migrateOldStatus()\n            ->prepareModel()\n            ->trackMappings('creature_id');\n    }\n\n    /**\n     * Backward compatibility: resolve old boolean status fields to entities.status_id.\n     */\n    protected function migrateOldStatus(): self\n    {\n        if (array_key_exists('status_id', $this->data['entity'] ?? [])) {\n            return $this;\n        }\n\n        if (! empty($this->data['is_dead'])) {\n            $this->resolveOldStatusToEntity('creature', 'dead');\n        } elseif (! empty($this->data['is_extinct'])) {\n            $this->resolveOldStatusToEntity('creature', 'extinct');\n        }\n\n        return $this;\n    }\n\n    public function second(): void\n    {\n        $this->loadModel()\n            ->entityLocations()\n            ->saveModel()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.creature'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/CustomEntityMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityLocation;\nuse App\\Services\\EntityMappingService;\nuse Illuminate\\Support\\Facades\\Log;\n\ntrait CustomEntityMapper\n{\n    protected array $mapping = [];\n\n    protected array $parents = [];\n\n    protected Entity $entity;\n\n    protected EntityMappingService $entityMappingService;\n\n    public function __construct(EntityMappingService $entityMappingService)\n    {\n        $this->entityMappingService = $entityMappingService;\n    }\n\n    protected function prepareEntity(): self\n    {\n        $this->entity();\n\n        return $this;\n    }\n\n    protected function loadEntity(): self\n    {\n        $id = ImportIdMapper::getEntity($this->data['entity']['id']);\n        $this->entity = Entity::where('id', $id)->firstOrFail();\n\n        return $this;\n    }\n\n    protected function trackMappings(?string $parent = null): void\n    {\n        $this->mapping[$this->data['entity']['id']] = $this->entity->id;\n        ImportIdMapper::putEntity($this->data['entity']['id'], $this->entity->id);\n        if ($parent && ! empty($this->data['entity'][$parent])) {\n            $this->parents[$this->data['entity'][$parent]][] = $this->entity->id;\n        }\n    }\n\n    protected function entity(): void\n    {\n        $entityMapping = ['name', 'is_private', 'tooltip', 'is_template', 'is_attributes_private', 'focus_x', 'focus_y', 'entry', 'type', 'status_id'];\n        $this->entity = new Entity;\n        $this->entity->created_by = $this->user->id;\n        $this->entity->updated_by = $this->user->id;\n        $this->entity->campaign_id = $this->campaign->id;\n        // Log::info(ImportIdMapper::getCustomEntityTypes());\n\n        $this->entity->type_id = ImportIdMapper::getCustomEntityType($this->data['entity']['type_id']);\n        foreach ($entityMapping as $field) {\n            if (! array_key_exists($field, $this->data['entity'] ?? [])) {\n                continue;\n            }\n            $this->entity->$field = $this->data['entity'][$field];\n        }\n\n        $this\n            ->images()\n            ->gallery();\n        $this->entity->save();\n\n        EntityLogger::entity($this->entity)->create();\n\n        ImportIdMapper::putEntity($this->data['entity']['id'], $this->entity->id);\n\n        $this\n            ->assets()\n            ->tags();\n    }\n\n    public function second(): void\n    {\n        $this\n            ->entitySecond();\n    }\n\n    protected function entitySecond(): void\n    {\n        $this->entity->tooltip = $this->mentions($this->entity->tooltip);\n        $this->entity->entry = $this->mentions($this->entity->entry);\n        $this->entity->save();\n\n        $this->posts()\n            ->attributes()\n            ->relations()\n            ->reminders()\n            ->abilities()\n            ->inventory()\n            ->locations();\n    }\n\n    protected function locations(): self\n    {\n        if (empty($this->data['entity']['entityLocations'])) {\n            return $this;\n        }\n\n        foreach ($this->data['entity']['entityLocations'] as $data) {\n            if (! ImportIdMapper::has('locations', $data['location_id'])) {\n                continue;\n            }\n            $locID = ImportIdMapper::get('locations', $data['location_id']);\n            $entityLoc = new EntityLocation;\n            $entityLoc->entity_id = $this->entity->id;\n            $entityLoc->location_id = $locID;\n            $entityLoc->save();\n        }\n\n        return $this;\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $children) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            // We need the nested trait to trigger for this so it's going to be inefficient\n            $models = Entity::whereIn('id', $children)->get();\n            foreach ($models as $model) {\n                $model->parent_id = $this->mapping[$parent];\n                $model->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n\n    protected function saveEntity(): self\n    {\n        $this->entity->save();\n        $this->mapImageMentions($this->entity);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/CustomMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Services\\Campaign\\Import\\ImportMentions;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass CustomMapper\n{\n    use BaseEntityMapper;\n    use CampaignAware;\n    use CustomEntityMapper;\n    use ImportMapper;\n    use ImportMentions;\n    use UserAware;\n\n    protected array $mapping = [];\n\n    protected array $parents = [];\n\n    protected array $ignore = ['id', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'parent_id', 'created_at', 'updated_at'];\n\n    protected string $mappingName;\n\n    public function prepare(): self\n    {\n        return $this;\n    }\n\n    public function first(): void\n    {\n        $this\n            ->prepareEntity()\n            ->trackMappings('parent_id');\n    }\n\n    public function second(): void\n    {\n        $this\n            ->loadEntity()\n            ->saveEntity()\n            ->entitySecond();\n    }\n\n    public function third(): self\n    {\n        $this\n            ->loadEntity()\n            ->entityThird();\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/EntityMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Entity;\nuse App\\Services\\EntityMappingService;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Arr;\n\ntrait EntityMapper\n{\n    protected array $mapping = [];\n\n    protected array $parents = [];\n\n    protected Entity $entity;\n\n    protected mixed $model;\n\n    protected EntityMappingService $entityMappingService;\n\n    public function __construct(EntityMappingService $entityMappingService)\n    {\n        $this->entityMappingService = $entityMappingService;\n    }\n\n    protected function prepareModel(): self\n    {\n        $this->model = app()->make($this->className);\n        $this->model->campaign_id = $this->campaign->id;\n        $columns = $this->model->getConnection()->getSchemaBuilder()->getColumnListing($this->model->getTable());\n        foreach ($this->data as $field => $value) {\n            // @phpstan-ignore-next-line\n            if (is_array($value) || in_array($field, $this->ignore) || ! in_array($field, $columns)) {\n                continue;\n            }\n            $this->model->$field = $value;\n        }\n\n        $this->model->saveQuietly();\n        $this->entity();\n\n        return $this;\n    }\n\n    protected function loadModel(): self\n    {\n        $builder = app()->make($this->className);\n        $id = ImportIdMapper::get($this->mappingName, $this->data['id']);\n        $this->model = $builder->where('id', $id)->with('entity')->firstOrFail();\n        $this->entity = $this->model->entity;\n\n        return $this;\n    }\n\n    protected function trackMappings(?string $parent = null): void\n    {\n        $this->mapping[$this->data['id']] = $this->model->id;\n        ImportIdMapper::put($this->mappingName, $this->data['id'], $this->model->id);\n        if ($parent && ! empty($this->data[$parent])) {\n            $this->parents[$this->data[$parent]][] = $this->entity->id;\n        }\n    }\n\n    protected function entity(): void\n    {\n        $mapping = ['name', 'is_private', 'campaign_id'];\n        $entityMapping = ['tooltip', 'is_template', 'is_attributes_private', 'focus_x', 'focus_y', 'entry', 'type', 'type_id', 'status_id'];\n        $this->entity = new Entity;\n        $this->entity->entity_id = $this->model->id;\n        $this->entity->created_by = $this->user->id;\n        $this->entity->updated_by = $this->user->id;\n        foreach ($mapping as $field) {\n            $this->entity->$field = $this->model->$field;\n        }\n        // Old exports might not have this info so we call back on the model hardcoded ids\n        if (empty($this->entity->type_id)) {\n            $this->entity->type_id = $this->model->entityTypeId();\n        }\n        foreach ($entityMapping as $field) {\n            if (! array_key_exists($field, $this->data['entity'] ?? [])) {\n                continue;\n            }\n            $this->entity->$field = $this->data['entity'][$field];\n        }\n\n        if (isset($this->data['entity']['archived_at'])) {\n            $this->entity->archived_at = Carbon::now();\n        }\n\n        $this\n            ->images()\n            ->gallery();\n        $this->entity->save();\n\n        EntityLogger::entity($this->entity)->create();\n\n        ImportIdMapper::putEntity($this->data['entity']['id'], $this->entity->id);\n\n        $this\n            ->assets()\n            ->tags();\n    }\n\n    public function second(): void\n    {\n        $this\n            ->loadModel()\n            ->entitySecond();\n    }\n\n    protected function entitySecond(): void\n    {\n        $this->entity = $this->model->entity;\n\n        $this->entity->tooltip = $this->mentions($this->entity->tooltip);\n        $this->entity->entry = $this->mentions($this->entity->entry);\n        $this->entity->save();\n\n        $this->posts()\n            ->attributes()\n            ->relations()\n            ->reminders()\n            ->abilities()\n            ->inventory();\n    }\n\n    protected function foreign(string $model, string $field): self\n    {\n        if (empty($this->data[$field])) {\n            return $this;\n        }\n        if ($model === 'entities') {\n            if (! ImportIdMapper::hasEntity($this->data[$field])) {\n                return $this;\n            }\n            $foreignID = ImportIdMapper::getEntity($this->data[$field]);\n        } else {\n            if (! ImportIdMapper::has($model, $this->data[$field])) {\n                return $this;\n            }\n            $foreignID = ImportIdMapper::get($model, $this->data[$field]);\n        }\n        if (! $foreignID) {\n            return $this;\n        }\n        $this->model->$field = $foreignID;\n\n        return $this;\n    }\n\n    protected function pivot(string $relation, string $model, string $field): self\n    {\n        // Check if import has old location_id and migrate it to new locations pivot table system, currently only happens with organisations\n        if ($relation == 'pivotLocations' && isset($this->data['location_id']) && ! in_array(['location_id' => $this->data['location_id']], $this->data[$relation])) {\n            $this->data[$relation][] = ['location_id' => $this->data['location_id']];\n        }\n        foreach ($this->data[$relation] as $pivot) {\n            if (! ImportIdMapper::has($model, $pivot[$field])) {\n                continue;\n            }\n            $foreignID = ImportIdMapper::get($model, $pivot[$field]);\n            if (array_key_exists('is_private', $pivot)) {\n                $this->model->{$model}()->attach($foreignID, ['is_private' => $pivot['is_private']]);\n            } else {\n                $this->model->{$model}()->attach($foreignID);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Import locations through the entity_locations pivot table\n     */\n    protected function entityLocations(): self\n    {\n        // Handle old location_id field from legacy exports\n        if (isset($this->data['location_id']) && ImportIdMapper::has('locations', $this->data['location_id'])) {\n            $foreignID = ImportIdMapper::get('locations', $this->data['location_id']);\n            $this->entity->locations()->attach($foreignID);\n        }\n\n        // Handle pivotLocations data from exports\n        if (isset($this->data['pivotLocations'])) {\n            foreach ($this->data['pivotLocations'] as $pivot) {\n                if (! ImportIdMapper::has('locations', $pivot['location_id'])) {\n                    continue;\n                }\n                $foreignID = ImportIdMapper::get('locations', $pivot['location_id']);\n                // Avoid duplicates (e.g., if location_id was already handled above)\n                if (! $this->entity->locations()->wherePivot('location_id', $foreignID)->exists()) {\n                    $this->entity->locations()->attach($foreignID);\n                }\n            }\n        }\n\n        // Handle entityLocations nested in entity data\n        if (Arr::has($this->data, 'entity.entityLocations')) {\n            foreach ($this->data['entity']['entityLocations'] as $location) {\n                if (empty($location['location_id'])) {\n                    continue;\n                }\n                if (! ImportIdMapper::has('locations', $location['location_id'])) {\n                    continue;\n                }\n                $foreignID = ImportIdMapper::get('locations', $location['location_id']);\n                if (! $this->entity->locations()->wherePivot('location_id', $foreignID)->exists()) {\n                    $this->entity->locations()->attach($foreignID);\n                }\n            }\n        }\n\n        return $this;\n    }\n\n    protected function saveModel(): self\n    {\n        $this->model->save();\n        $this->mapImageMentions($this->model);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/EventMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Event;\n\nclass EventMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'event_id', 'location_id', 'created_at', 'updated_at'];\n\n    protected string $className = Event::class;\n\n    protected string $mappingName = 'events';\n\n    public function first(): void\n    {\n        $this\n            ->prepareModel()\n            ->trackMappings('event_id');\n    }\n\n    public function second(): void\n    {\n        $this\n            ->loadModel()\n            ->entityLocations()\n            ->saveModel()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.event'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/FamilyMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Family;\n\nclass FamilyMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'family_id', 'created_at', 'updated_at', 'location_id'];\n\n    protected string $className = Family::class;\n\n    protected string $mappingName = 'families';\n\n    public function first(): void\n    {\n        $this\n            ->migrateOldStatus()\n            ->prepareModel()\n            ->trackMappings('family_id');\n    }\n\n    /**\n     * Backward compatibility: resolve old boolean status fields to entities.status_id.\n     */\n    protected function migrateOldStatus(): self\n    {\n        if (array_key_exists('status_id', $this->data['entity'] ?? [])) {\n            return $this;\n        }\n\n        if (! empty($this->data['is_extinct'])) {\n            $this->resolveOldStatusToEntity('family', 'extinct');\n        }\n\n        return $this;\n    }\n\n    public function second(): void\n    {\n        $this\n            ->loadModel()\n            ->foreign('locations', 'location_id')\n            ->saveModel();\n\n        /*$this\n            ->familyTree();*/\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.family'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/GalleryMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass GalleryMapper\n{\n    use CampaignAware;\n    use ImportMapper;\n\n    protected array $mapping = [];\n\n    protected array $parents = [];\n\n    protected Image $image;\n\n    protected array $reset = ['created_at', 'updated_at', 'created_by', 'campaign_id', 'id', 'folder_id', 'image_folder'];\n\n    public function has(string $uuid): bool\n    {\n        return ! empty($this->mapping[$uuid]);\n    }\n\n    public function get(string $uuid): string\n    {\n        return $this->mapping[$uuid];\n    }\n\n    public function mapping(): array\n    {\n        return $this->mapping;\n    }\n\n    public function prepare(): self\n    {\n        // $this->campaign->images()->delete();\n        return $this;\n    }\n\n    public function import(): void\n    {\n        // We allow uploading json files in the gallery, which will be ignored here for now.\n        if (empty($this->data['id'])) {\n            return;\n        }\n        $this->image = new Image;\n        $this->image->campaign_id = $this->campaign->id;\n        // Need to save to set the id otherwise it stores wrong data.\n        $this->image->save();\n        $this->mapping[$this->data['id']] = $this->image->id;\n        ImportIdMapper::putGallery($this->data['id'], $this->image->id);\n\n        if (! empty($this->data['folder_id'])) {\n            $this->parents[$this->data['folder_id']][] = $this->image->id;\n        }\n\n        $this->importFields();\n        $this->image->save();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $children) {\n            if (empty($this->mapping[$parent])) {\n                continue;\n            }\n\n            $newParent = $this->mapping[$parent];\n            DB::update('UPDATE images SET folder_id = \\'' . $newParent . '\\' where id in (\\'' . implode('\\', \\'', $children) . '\\') limit ' . count($children));\n        }\n\n        return $this;\n    }\n\n    protected function importFields(): void\n    {\n        $columns = $this->image->getConnection()->getSchemaBuilder()->getColumnListing($this->image->getTable());\n        foreach ($this->data as $field => $value) {\n            if (in_array($field, $this->reset) || is_array($value) || ! in_array($field, $columns)) {\n                continue;\n            }\n            $this->image->$field = $value;\n        }\n\n        $this->importImage();\n    }\n\n    protected function importImage(): void\n    {\n        if (($this->data['is_folder'] ?? 0) === 1) {\n            return;\n        }\n        if (empty($this->data['id']) || empty($this->data['ext'])) {\n            return;\n        }\n        // An image needs the image saved locally\n        $imagePath = $this->path . '/' . $this->data['id'] . '.' . $this->data['ext'];\n        $destination = 'campaigns/' . $this->campaign->id . '/' . $this->image->id . '.' . $this->data['ext'];\n\n        if (! Storage::disk('local')->exists($imagePath)) {\n            Log::info('image ' . $imagePath . ' doesnt exist');\n\n            return;\n        }\n\n        // Upload the file to s3 using streams\n        Storage::writeStream($destination, Storage::disk('local')->readStream($imagePath));\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/ImageMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\ntrait ImageMapper\n{\n    protected function image(string $field): void\n    {\n        if (empty($this->data[$field]) && ! empty($this->model->$field)) {\n            return;\n        }\n\n        // Let's see if the original exists on the s3 bucket to avoid a lot of pain\n        $destination = 'w/' . $this->campaign->id . '/' . Str::afterLast($this->data[$field], '/');\n        if (Storage::exists($this->data['image'])) {\n            Storage::copy($this->data['image'], $destination);\n            $this->campaign->image = $destination;\n\n            return;\n        }\n\n        $path = $this->path . '/' . $this->data[$field];\n        if (! Storage::disk('local')->exists($path)) {\n            return;\n        }\n\n        // Upload the file to s3 using streams\n        Storage::writeStream($destination, Storage::disk('local')->readStream($path));\n        $this->campaign->$field = $destination;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/ImportMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\ntrait ImportMapper\n{\n    protected array $data;\n\n    protected string $path;\n\n    public function data(array $data): self\n    {\n        $this->data = $data;\n\n        return $this;\n    }\n\n    public function path(string $path): self\n    {\n        $this->path = $path;\n\n        return $this;\n    }\n\n    public function prepare(): self\n    {\n        return $this;\n    }\n\n    public function clear(): void\n    {\n        unset($this->path, $this->data);\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/ItemMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Entity;\nuse App\\Models\\Item;\nuse App\\Models\\ItemCreator;\n\nclass ItemMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'item_id', 'character_id', 'creator_id', 'created_at', 'updated_at', 'location_id'];\n\n    protected string $className = Item::class;\n\n    protected string $mappingName = 'items';\n\n    public function first(): void\n    {\n        $this\n            ->prepareModel()\n            ->trackMappings('item_id');\n    }\n\n    public function second(): void\n    {\n        // @phpstan-ignore method.notFound\n        $this\n            ->loadModel()\n            ->foreign('locations', 'location_id')\n            ->importCreators()\n            ->saveModel()\n            ->legacyCreator()\n            ->entitySecond();\n    }\n\n    protected function importCreators(): self\n    {\n        if (empty($this->data['itemCreators'])) {\n            return $this;\n        }\n\n        foreach ($this->data['itemCreators'] as $pivot) {\n            if (! ImportIdMapper::hasEntity($pivot['creator_id'])) {\n                continue;\n            }\n\n            $foreignID = ImportIdMapper::getEntity($pivot['creator_id']);\n            $creator = new ItemCreator;\n            $creator->item_id = $this->model->id;\n            $creator->creator_id = $foreignID;\n            $creator->save();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Backward compatibility: old exports have creator_id on the item instead of itemCreators pivot\n     */\n    protected function legacyCreator(): self\n    {\n        if (empty($this->data['creator_id']) || ! empty($this->data['itemCreators'])) {\n            return $this;\n        }\n\n        if (! ImportIdMapper::hasEntity($this->data['creator_id'])) {\n            return $this;\n        }\n\n        $foreignID = ImportIdMapper::getEntity($this->data['creator_id']);\n        $creator = new ItemCreator;\n        $creator->item_id = $this->model->id;\n        $creator->creator_id = $foreignID;\n        $creator->save();\n\n        return $this;\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.item'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/JournalMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Journal;\n\nclass JournalMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'journal_id', 'location_id', 'author_id', 'created_at', 'updated_at'];\n\n    protected string $className = Journal::class;\n\n    protected string $mappingName = 'journals';\n\n    public function first(): void\n    {\n        $this\n            ->prepareModel()\n            ->trackMappings('journal_id');\n    }\n\n    public function second(): void\n    {\n        $this\n            ->loadModel()\n            ->foreign('locations', 'location_id')\n            ->foreign('entities', 'author_id')\n            ->saveModel()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.journal'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/LocationMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Location;\n\nclass LocationMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'location_id', 'created_at', 'updated_at'];\n\n    protected string $className = Location::class;\n\n    protected string $mappingName = 'locations';\n\n    public function first(): void\n    {\n        $this\n            ->migrateOldStatus()\n            ->prepareModel()\n            ->trackMappings('location_id');\n    }\n\n    /**\n     * Backward compatibility: resolve old boolean status fields to entities.status_id.\n     */\n    protected function migrateOldStatus(): self\n    {\n        if (array_key_exists('status_id', $this->data['entity'] ?? [])) {\n            return $this;\n        }\n\n        if (! empty($this->data['is_destroyed'])) {\n            $this->resolveOldStatusToEntity('location', 'destroyed');\n        }\n\n        return $this;\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.location'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/MapMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Entity;\nuse App\\Models\\Map;\nuse App\\Models\\MapGroup;\nuse App\\Models\\MapLayer;\nuse App\\Models\\MapMarker;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\nclass MapMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'map_id', 'created_at', 'updated_at', 'location_id', 'center_marker_id'];\n\n    protected string $className = Map::class;\n\n    protected string $mappingName = 'maps';\n\n    protected array $layers;\n\n    protected array $groups;\n\n    public function first(): void\n    {\n        $this\n            ->prepareModel()\n            ->trackMappings('map_id');\n    }\n\n    public function second(): void\n    {\n        // @phpstan-ignore-next-line\n        $this->loadModel()\n            ->foreign('locations', 'location_id')\n            ->groups()\n            ->groupsParents()\n            ->layers()\n            ->markers()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.map'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n\n    protected function groups(): self\n    {\n        $fields = [\n            'name', 'position', 'visibility_id', 'is_shown',\n        ];\n        $this->groups = [];\n        foreach ($this->data['groups'] as $data) {\n            $el = new MapGroup;\n            $el->map_id = $this->model->id;\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $el->$field = $data[$field];\n            }\n            $el->created_by = $this->user->id;\n            $el->save();\n            $this->groups[$data['id']] = $el->id;\n        }\n\n        return $this;\n    }\n\n    protected function groupsParents(): self\n    {\n        foreach ($this->data['groups'] as $data) {\n            if (isset($data['parent_id'])) {\n                $group = MapGroup::where('id', $this->groups[$data['id']])->first();\n                $group->parent_id = $this->groups[$data['parent_id']];\n                $group->save();\n            }\n        }\n\n        return $this;\n    }\n\n    protected function layers(): self\n    {\n        $fields = [\n            'name', 'position', 'image_uuid', 'image_path', 'height', 'width', 'entry', 'visibility_id', 'type_id',\n        ];\n        $this->layers = [];\n        foreach ($this->data['layers'] as $data) {\n            $el = new MapLayer;\n            $el->map_id = $this->model->id;\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $el->$field = $data[$field];\n            }\n            $el->entry = $this->mentions($el->entry);\n            $el->created_by = $this->user->id;\n\n            // Move image\n            $imageField = isset($data['image_path']) ? 'image' : 'image_path';\n            if (! empty($el->$imageField)) {\n                $imageName = Str::afterLast($el->$imageField, '/');\n                $destination = 'w/' . $this->campaign->id . '/maps/' . $el->map_id . '/' . $imageName;\n\n                if (! Storage::disk('local')->exists($this->path . $el->$imageField)) {\n                    Log::error('map layer image ' . $this->path . $el->$imageField . ' doesnt exist');\n\n                    return $this;\n                }\n\n                // Upload the file to s3 using streams\n                Storage::writeStream($destination, Storage::disk('local')->readStream($this->path . $el->$imageField));\n                $el->image_path = $destination;\n            } else {\n                if (empty($el->image_uuid) || ! ImportIdMapper::hasGallery($el->image_uuid)) {\n                    continue;\n                }\n                $el->image_uuid = ImportIdMapper::getGallery($el->image_uuid);\n            }\n            $el->save();\n            $this->layers[$data['id']] = $el->id;\n        }\n\n        return $this;\n    }\n\n    protected function markers(): self\n    {\n        $fields = [\n            'pin_size', 'name', 'entry', 'longitude', 'latitude', 'colour', 'shape_id', 'size_id', 'icon', 'custom_icon', 'custom_shape', 'is_draggable', 'visibility_id', 'font_colour', 'circle_radius', 'polygon_style', 'opacity', 'css',\n        ];\n        foreach ($this->data['markers'] as $data) {\n            $marker = new MapMarker;\n            $marker->map_id = $this->model->id;\n            if (! empty($data['entity_id'])) {\n                if (! ImportIdMapper::hasEntity($data['entity_id'])) {\n                    continue;\n                }\n                $marker->entity_id = ImportIdMapper::getEntity($data['entity_id']);\n            }\n            foreach ($fields as $field) {\n                if (isset($data[$field])) {\n                    $marker->$field = $data[$field];\n                }\n            }\n\n            if (! empty($data['group_id'])) {\n                $marker->group_id = $this->groups[$data['group_id']];\n            }\n\n            $marker->created_by = $this->user->id;\n            $marker->entry = $this->mentions($marker->entry);\n            $marker->save();\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/MiscMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Services\\Campaign\\Import\\ImportMentions;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\DB;\n\nabstract class MiscMapper\n{\n    use BaseEntityMapper;\n    use CampaignAware;\n    use EntityMapper;\n    use ImportMapper;\n    use ImportMentions;\n    use UserAware;\n\n    protected array $mapping = [];\n\n    protected array $parents = [];\n\n    protected string $className;\n\n    protected string $mappingName;\n\n    public function prepare(): self\n    {\n        // $this->campaign->{$this->mappingName}()->forceDelete();\n        return $this;\n    }\n\n    public function third(): self\n    {\n        $this\n            ->loadModel()\n            ->entityThird();\n\n        return $this;\n    }\n\n    public function tree(): self\n    {\n        return $this;\n    }\n\n    /**\n     * Resolve an old child-level status field to a category_statuses.id\n     * and inject it into $this->data['entity']['status_id'] for the EntityMapper.\n     */\n    protected function resolveOldStatusToEntity(string $entityTypeCode, string $statusKey): void\n    {\n        if (array_key_exists('status_id', $this->data['entity'] ?? [])) {\n            return;\n        }\n\n        $entityTypeId = config('entities.ids.' . $entityTypeCode);\n        $status = DB::table('category_statuses')\n            ->where('category_id', $entityTypeId)\n            ->where('key', $statusKey)\n            ->first();\n\n        if ($status) {\n            $this->data['entity']['status_id'] = $status->id;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/NoteMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Note;\n\nclass NoteMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'note_id', 'created_at', 'updated_at'];\n\n    protected string $className = Note::class;\n\n    protected string $mappingName = 'notes';\n\n    public function first(): void\n    {\n        $this\n            ->prepareModel()\n            ->trackMappings('note_id');\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.note'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/OrganisationMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Organisation;\n\nclass OrganisationMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'organisation_id', 'created_at', 'updated_at', 'location_id'];\n\n    protected string $className = Organisation::class;\n\n    protected string $mappingName = 'organisations';\n\n    public function first(): void\n    {\n        $this\n            ->migrateOldStatus()\n            ->prepareModel()\n            ->trackMappings('organisation_id');\n    }\n\n    /**\n     * Backward compatibility: resolve old boolean status fields to entities.status_id.\n     */\n    protected function migrateOldStatus(): self\n    {\n        if (array_key_exists('status_id', $this->data['entity'] ?? [])) {\n            return $this;\n        }\n\n        if (! empty($this->data['is_defunct'])) {\n            $this->resolveOldStatusToEntity('organisation', 'defunct');\n        }\n\n        return $this;\n    }\n\n    public function second(): void\n    {\n        $this\n            ->loadModel()\n            ->entityLocations()\n            ->saveModel()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.organisation'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/QuestMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Entity;\nuse App\\Models\\Quest;\nuse App\\Models\\QuestElement;\n\nclass QuestMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'quest_id', 'created_at', 'updated_at', 'location_id', 'instigator_id'];\n\n    protected string $className = Quest::class;\n\n    protected string $mappingName = 'quests';\n\n    public function first(): void\n    {\n        $this\n            ->migrateOldStatus()\n            ->prepareModel()\n            ->trackMappings('quest_id');\n    }\n\n    /**\n     * Backward compatibility: resolve old quest status fields to entities.status_id.\n     * Old is_completed boolean or child status_id enum (0=not_started, 1=ongoing, 2=completed, 3=abandoned).\n     */\n    protected function migrateOldStatus(): self\n    {\n        if (array_key_exists('status_id', $this->data['entity'] ?? [])) {\n            return $this;\n        }\n\n        $map = [0 => 'not_started', 1 => 'ongoing', 2 => 'completed', 3 => 'abandoned'];\n\n        // Old is_completed boolean → enum value\n        if (array_key_exists('is_completed', $this->data) && ! array_key_exists('status_id', $this->data)) {\n            $this->data['status_id'] = $this->data['is_completed'] ? 2 : 0;\n            unset($this->data['is_completed']);\n        }\n\n        // Child-level status_id enum → resolve to category_statuses, then remove\n        // so it doesn't get written back to the quests table's old enum column\n        if (array_key_exists('status_id', $this->data)) {\n            $oldValue = (int) $this->data['status_id'];\n            unset($this->data['status_id']);\n            if (isset($map[$oldValue])) {\n                $this->resolveOldStatusToEntity('quest', $map[$oldValue]);\n            }\n        }\n\n        return $this;\n    }\n\n    public function second(): void\n    {\n        // @phpstan-ignore-next-line\n        $this->loadModel()\n            ->foreign('locations', 'location_id')\n            ->foreign('entities', 'instigator_id')\n            ->saveModel()\n            ->elements()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.quest'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n\n    protected function elements(): self\n    {\n        $fields = [\n            'role', 'entry', 'visibility_id', 'colour', 'name',\n        ];\n        foreach ($this->data['elements'] as $data) {\n            $el = new QuestElement;\n            $el->quest_id = $this->model->id;\n            if (! empty($data['entity_id'])) {\n                if (! ImportIdMapper::hasEntity($data['entity_id'])) {\n                    continue;\n                }\n                $el->entity_id = ImportIdMapper::getEntity($data['entity_id']);\n            }\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $el->$field = $data[$field];\n            }\n            $el->entry = $this->mentions($el->entry);\n            $el->save();\n            ImportIdMapper::putQuestElement($data['id'], $el->id);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/RaceMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Race;\n\nclass RaceMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'race_id', 'created_at', 'updated_at'];\n\n    protected string $className = Race::class;\n\n    protected string $mappingName = 'races';\n\n    public function first(): void\n    {\n        $this\n            ->migrateOldStatus()\n            ->prepareModel()\n            ->trackMappings('race_id');\n    }\n\n    /**\n     * Backward compatibility: resolve old boolean status fields to entities.status_id.\n     */\n    protected function migrateOldStatus(): self\n    {\n        if (array_key_exists('status_id', $this->data['entity'] ?? [])) {\n            return $this;\n        }\n\n        if (! empty($this->data['is_extinct'])) {\n            $this->resolveOldStatusToEntity('race', 'extinct');\n        }\n\n        return $this;\n    }\n\n    public function second(): void\n    {\n        $this->loadModel()\n            ->entityLocations()\n            ->saveModel()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.race'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/TagMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Tag;\n\nclass TagMapper extends MiscMapper\n{\n    /** @var array<string, string> Legacy named colour to hex mapping for old exports */\n    protected const LEGACY_COLOURS = [\n        'red' => 'D93D33',\n        'yellow' => 'f39c12',\n        'brown' => 'a35831',\n        'aqua' => '00829B',\n        'light-blue' => '3A7CAD',\n        'green' => '058943',\n        'navy' => '001F3F',\n        'teal' => '2D8289',\n        'orange' => 'C85208',\n        'purple' => '605ca8',\n        'maroon' => 'D81B60',\n        'grey' => '797676',\n        'gray' => '797676',\n        'pink' => 'C822D7',\n        'black' => '111111',\n    ];\n\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'tag_id', 'created_at', 'updated_at'];\n\n    protected string $className = Tag::class;\n\n    protected string $mappingName = 'tags';\n\n    public function first(): void\n    {\n        $this->convertLegacyColour();\n\n        $this\n            ->prepareModel()\n            ->trackMappings('tag_id');\n    }\n\n    /**\n     * Convert legacy named colour values from old exports to hex\n     */\n    protected function convertLegacyColour(): void\n    {\n        if (! empty($this->data['colour']) && isset(self::LEGACY_COLOURS[$this->data['colour']])) {\n            $this->data['colour'] = self::LEGACY_COLOURS[$this->data['colour']];\n        }\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.tag'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/Mappers/TimelineMapper.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import\\Mappers;\n\nuse App\\Facades\\ImportIdMapper;\nuse App\\Models\\Entity;\nuse App\\Models\\Timeline;\nuse App\\Models\\TimelineElement;\nuse App\\Models\\TimelineEra;\n\nclass TimelineMapper extends MiscMapper\n{\n    protected array $ignore = ['id', 'entry', 'type', 'campaign_id', 'slug', 'image', '_lft', '_rgt', 'timeline_id', 'created_at', 'updated_at', 'calendar_id'];\n\n    protected string $className = Timeline::class;\n\n    protected string $mappingName = 'timelines';\n\n    protected array $eras;\n\n    public function first(): void\n    {\n        $this\n            ->prepareModel()\n            ->trackMappings('timeline_id');\n    }\n\n    public function second(): void\n    {\n        // @phpstan-ignore-next-line\n        $this->loadModel()\n            ->eras()\n            ->elements()\n            ->entitySecond();\n    }\n\n    public function tree(): self\n    {\n        foreach ($this->parents as $parent => $entityIds) {\n            if (! isset($this->mapping[$parent])) {\n                continue;\n            }\n            $parentEntity = Entity::where('entity_id', $this->mapping[$parent])\n                ->where('type_id', config('entities.ids.timeline'))\n                ->first();\n            if (! $parentEntity) {\n                continue;\n            }\n            $entities = Entity::whereIn('id', $entityIds)->get();\n            foreach ($entities as $entity) {\n                $entity->parent_id = $parentEntity->id;\n                $entity->saveQuietly();\n            }\n        }\n\n        return $this;\n    }\n\n    protected function eras(): self\n    {\n        $fields = [\n            'name', 'abbreviation', 'start_year', 'end_year', 'entry', 'is_collapsed', 'position',\n        ];\n        $this->eras = [];\n        foreach ($this->data['eras'] as $data) {\n            $er = new TimelineEra;\n            $er->timeline_id = $this->model->id;\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $er->$field = $data[$field];\n            }\n            $er->entry = $this->mentions($er->entry);\n            $er->save();\n            $this->eras[$data['id']] = $er->id;\n        }\n\n        return $this;\n    }\n\n    protected function elements(): self\n    {\n        $fields = [\n            'position', 'name', 'date', 'entry', 'colour', 'visibility_id', 'icon', 'is_collapsed', 'use_entity_entry', 'use_event_date',\n        ];\n        foreach ($this->data['elements'] as $data) {\n            $el = new TimelineElement;\n            $el->timeline_id = $this->model->id;\n            $el->era_id = $this->eras[$data['era_id']];\n            if (! empty($data['entity_id'])) {\n                if (! ImportIdMapper::hasEntity($data['entity_id'])) {\n                    continue;\n                }\n                $el->entity_id = ImportIdMapper::getEntity($data['entity_id']);\n            }\n            foreach ($fields as $field) {\n                if (! array_key_exists($field, $data)) {\n                    continue;\n                }\n                $el->$field = $data[$field];\n            }\n            $el->entry = $this->mentions($el->entry);\n            $el->save();\n\n            ImportIdMapper::putTimelineElement($data['id'], $el->id);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Import/PrepareService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Import;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Models\\CampaignImport;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass PrepareService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function token(): CampaignImport\n    {\n        $token = CampaignImport::where('campaign_id', $this->campaign->id)\n            ->where('user_id', $this->user->id)\n            ->whereNotIn('status_id', [CampaignImportStatus::FINISHED, CampaignImportStatus::FAILED, CampaignImportStatus::READY])\n            ->first();\n        if ($token) {\n            return $token;\n        }\n\n        $token = new CampaignImport;\n        $token->user_id = $this->user->id;\n        $token->campaign_id = $this->campaign->id;\n        $token->status_id = CampaignImportStatus::PREPARED;\n        $token->save();\n\n        return $token;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/LeaveService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Events\\Campaigns\\Members\\UserLeft;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\CampaignUser;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Exception;\n\nclass LeaveService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function leave(): void\n    {\n        /** @var ?CampaignUser $member */\n        $member = CampaignUser::where('campaign_id', $this->campaign->id)\n            ->where('user_id', $this->user->id)\n            ->first();\n        if (empty($member)) {\n            throw new Exception(__('campaigns.leave.error'));\n        }\n\n        // Delete the member\n        $member->delete();\n\n        // Delete the member from all the roles in the campaign\n        $roles = CampaignRoleUser::select('campaign_role_users.*')\n            ->where('user_id', $this->user->id)\n            ->leftJoin('campaign_roles as cr', 'cr.id', '=', 'campaign_role_users.campaign_role_id')\n            ->where('cr.campaign_id', $this->campaign->id)\n            ->get();\n        foreach ($roles as $role) {\n            $role->delete();\n        }\n\n        UserLeft::dispatch($this->campaign, $this->user);\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/LocalisationService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\Campaign;\nuse App\\Traits\\RequestAware;\n\n/**\n * Use this facade to get the current campaign ID when needed.\n * To keep the code clean, avoid this, as it's available in every controller and on every model as a\n * campaign_id property.\n */\nclass LocalisationService\n{\n    use RequestAware;\n\n    /** @var Campaign|null The current campaign contact */\n    protected ?Campaign $campaign;\n\n    /** @var int console campaign id */\n    protected int $consoleCampaignId = 0;\n\n    public function hasCampaign(): bool\n    {\n        $campaign = $this->request->route('campaign');\n\n        return ! empty($campaign) && $campaign instanceof Campaign;\n    }\n\n    /**\n     * Get the campaign\n     */\n    public function getCampaign(): ?Campaign\n    {\n        if (isset($this->campaign)) {\n            return $this->campaign;\n        }\n\n        // Load the campaign from the router\n        return $this->campaign = $this->request->route('campaign');\n    }\n\n    /**\n     * Force the campaign. This is use for moving entities between campaigns.\n     */\n    public function forceCampaign(Campaign $campaign): void\n    {\n        $this->campaign = $campaign;\n    }\n\n    public function getConsoleCampaign(): int\n    {\n        return $this->consoleCampaignId;\n    }\n\n    public function setConsoleCampaign(int $campaignId): self\n    {\n        $this->consoleCampaignId = $campaignId;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/MemberService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Requests\\API\\UpdateUserRole;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\User;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass MemberService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected CampaignRole $campaignRole;\n\n    protected ?CampaignRoleUser $userCampaignRole;\n\n    public function element(CampaignRoleUser $campaignRoleUser): self\n    {\n        $this->userCampaignRole = $campaignRoleUser;\n\n        return $this;\n    }\n\n    public function fromRequest(UpdateUserRole $request): self\n    {\n        $this\n            ->loadUser($request->get('user_id'))\n            ->loadCampaignRole($request->get('role_id'));\n\n        return $this;\n    }\n\n    public function update(CampaignUser $user, array $roles): bool\n    {\n        $currentRoles = $user->roles->pluck('id')->toArray();\n        $roleUsers = CampaignRoleUser::where('user_id', $user->user_id)\n            ->whereIn('campaign_role_id', $currentRoles)\n            ->whereNotIn('campaign_role_id', $roles)\n            ->with('campaignRole')\n            ->get();\n\n        $deletedRoles = [];\n        /** @var ?CampaignRoleUser $role */\n        foreach ($roleUsers as $role) {\n            // Admin role being switched? Forget the cache\n            if ($role->campaignRole->isAdmin()) {\n                CampaignCache::campaign($this->campaign)->clear();\n            }\n            // When trying to delete an admin role check if it was created recently\n            if ($role->campaignRole->isAdmin() && ! $role->recentlyCreated()) {\n                throw (new TranslatableException(\n                    'campaigns.roles.users.errors.cant_kick_admins'\n                ))->setOptions([\n                    'admin' => $role->campaignRole->name,\n                    'discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>',\n                    'email' => '<a href=\"mailto:' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>',\n                ]);\n            }\n        }\n\n        // Now actually delete the roles\n        foreach ($roleUsers as $role) {\n            $deletedRoles[] = $role->id;\n            $role->delete();\n        }\n\n        $rolesToCreate = array_diff_key($roles, $currentRoles);\n        foreach ($rolesToCreate as $role) {\n            CampaignRoleUser::create([\n                'campaign_role_id' => $role,\n                'user_id' => $user->user_id,\n            ]);\n        }\n\n        return true;\n    }\n\n    /**\n     * Add a user to a role\n     */\n    public function add(): bool\n    {\n        if (\n            ! $this->checkUserInCampaign() ||\n            ! $this->checkRoleInCampaign() ||\n            $this->userIsInRole()\n        ) {\n            return false;\n        }\n\n        // If both are valid, add the user to the role\n        $userRole = new CampaignRoleUser;\n        $userRole->user_id = $this->user->id;\n        $userRole->campaign_role_id = $this->campaignRole->id;\n        $userRole->save();\n\n        return true;\n    }\n\n    /**\n     * Remove a user from a campaign role\n     */\n    public function remove(): bool\n    {\n        if (\n            ! $this->checkUserInCampaign() ||\n            ! $this->checkRoleInCampaign() ||\n            ! $this->userIsInRole()\n        ) {\n            return false;\n        }\n\n        $this->userCampaignRole->delete();\n\n        return true;\n    }\n\n    /**\n     * @throws TranslatableException\n     */\n    public function delete(): bool\n    {\n        // If the role isn't an admin, we can safely delete\n        if (! $this->userCampaignRole->campaignRole->isAdmin()) {\n            return $this->userCampaignRole->delete();\n        }\n\n        // It's the admin role. Only allow if campaign author or self\n        $userIsCreator = $this->userCampaignRole->campaignRole->campaign->created_by === $this->user->id;\n        if ($this->userCampaignRole->user_id === $this->user->id || $userIsCreator) {\n            $roleCount = $this\n                ->user\n                ->campaignRoles\n                ->where('campaign_id', $this->userCampaignRole->campaignRole->campaign_id)\n                ->count();\n            // Stop a user from having 0 roles\n            if ($this->userCampaignRole->user_id === $this->user->id && $roleCount === 1) {\n                throw (new TranslatableException(\n                    'campaigns.roles.users.errors.needs_more_roles'\n                ))->setOptions(['admin' => $this->userCampaignRole->campaignRole->name]);\n            }\n        } elseif (! $this->userCampaignRole->recentlyCreated()) {\n            // If the user wasn't added to the admin role recently (ex by mistake), allow removing them\n            throw (new TranslatableException(\n                'campaigns.roles.users.errors.cant_kick_admins'\n            ))->setOptions([\n                'admin' => $this->userCampaignRole->campaignRole->name,\n                'discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>',\n                'email' => '<a href=\"mailto:' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>',\n            ]);\n        }\n\n        return $this->userCampaignRole->delete();\n    }\n\n    /**\n     * Load a user\n     */\n    protected function loadUser(int $userID): self\n    {\n        $this->user = User::find($userID);\n\n        return $this;\n    }\n\n    /**\n     * Load a campaign role\n     */\n    protected function loadCampaignRole(int $roleID): self\n    {\n        $this->campaignRole = CampaignRole::find($roleID);\n\n        return $this;\n    }\n\n    /**\n     * Validate that the given user is in the correct campaign\n     */\n    protected function checkUserInCampaign(): bool\n    {\n        return $this->campaign->users()->where('user_id', $this->user->id)->count() === 1;\n    }\n\n    /**\n     * Validate that the given role is in the correct campaign\n     */\n    protected function checkRoleInCampaign(): bool\n    {\n        return $this->campaignRole->campaign_id === $this->campaign->id;\n    }\n\n    /**\n     * Validate that the user exists in the role\n     */\n    protected function userIsInRole(): bool\n    {\n        $this\n            ->userCampaignRole = CampaignRoleUser::where('user_id', $this->user->id)\n            ->where('campaign_role_id', $this->campaignRole->id)\n            ->first();\n\n        return ! empty($this->userCampaignRole);\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/ModuleEditService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Events\\Campaigns\\EntityTypes\\EntityTypeToggled;\nuse App\\Facades\\CampaignCache;\nuse App\\Http\\Requests\\UpdateModuleName;\nuse App\\Observers\\PurifiableTrait;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Str;\n\nclass ModuleEditService\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use PurifiableTrait;\n    use UserAware;\n\n    public function __construct(\n        protected DefaultImageService $defaultImageService\n    ) {}\n\n    public function update(UpdateModuleName $request): self\n    {\n        $settings = $this->campaign->settings;\n\n        $key = $this->entityType->id;\n        unset($settings['modules'][$key]['s'], $settings['modules'][$key]['p'], $settings['modules'][$key]['i']);\n\n        if ($this->campaign->boosted()) {\n            $singular = $plural = $icon = null;\n            if ($request->filled('singular')) {\n                $singular = $this->purify(mb_trim($request->get('singular')));\n            }\n            if ($request->filled('plural')) {\n                $plural = $this->purify(mb_trim($request->get('plural')));\n            }\n            if ($request->filled('icon')) {\n                $icon = $this->purify(mb_trim($request->get('icon')));\n            }\n\n            if (! empty($singular)) {\n                $settings['modules'][$key]['s'] = $singular;\n            }\n            if (! empty($plural)) {\n                $settings['modules'][$key]['p'] = $plural;\n            }\n            if (! empty($icon)) {\n                $settings['modules'][$key]['i'] = $icon;\n            }\n        }\n\n        // Bookmarks can't have default images.\n        if (($request->hasFile('default_entity_image') || $request->filled('remove-image')) && ! $this->entityType->isBookmark()) {\n\n            $this->defaultImageService->campaign($this->campaign)\n                ->user($this->user)\n                ->entityType($this->entityType)\n                ->destroy();\n\n            if ($request->hasFile('default_entity_image')) {\n                $this->defaultImageService->save($request);\n            }\n        }\n\n        $this->campaign->settings = $settings;\n        $this->campaign->updateQuietly();\n\n        $this->campaign->setting->{$this->entityType->pluralCode()} = (int) $request->get('enabled');\n        $this->campaign->setting->save();\n\n        Cache::forget('campaign_' . $this->campaign->id . '_sidebar');\n\n        return $this;\n    }\n\n    /**\n     * Remove the custom modules setup from the campaign\n     */\n    public function reset(): self\n    {\n        $settings = $this->campaign->settings;\n        unset($settings['modules']);\n        if (is_array($settings)) {\n            foreach ($settings as $name => $val) {\n                if (Str::startsWith($name, 'modules.')) {\n                    unset($settings[$name]);\n                }\n            }\n        }\n        $this->campaign->settings = $settings;\n        $this->campaign->saveQuietly();\n        CampaignCache::campaign($this->campaign)->clear();\n        Cache::forget('campaign_' . $this->campaign->id . '_sidebar');\n\n        $this->user->campaignLog($this->campaign->id, 'modules', 'reset');\n\n        return $this;\n    }\n\n    public function toggle(): bool\n    {\n        // Validate module\n        $fillable = $this->campaign->setting->getFillable();\n        if (! in_array($this->entityType->pluralCode(), $fillable)) {\n            throw new Exception;\n        }\n\n        $this->campaign->setting->{$this->entityType->pluralCode()} = ! $this->campaign->setting->{$this->entityType->pluralCode()};\n        $this->campaign->setting->saveQuietly();\n        Cache::forget('campaign_' . $this->campaign->id . '_sidebar');\n        EntityTypeToggled::dispatch($this->entityType, $this->user, $this->campaign);\n\n        return (bool) $this->campaign->setting->{$this->entityType->pluralCode()};\n    }\n\n    public function toggleFeature(string $module): bool\n    {\n        // Validate module\n        $fillable = $this->campaign->setting->getFillable();\n        if (empty($module) || ! in_array($module, $fillable)) {\n            throw new Exception;\n        }\n\n        $this->campaign->setting->{$module} = ! $this->campaign->setting->{$module};\n        $this->campaign->setting->saveQuietly();\n        CampaignCache::campaign($this->campaign)->clear();\n        Cache::forget('campaign_' . $this->campaign->id . '_sidebar');\n\n        return (bool) $this->campaign->setting->{$module};\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/ModuleService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\EntityType;\nuse App\\Traits\\CampaignAware;\nuse Exception;\nuse Illuminate\\Support\\Str;\n\n/**\n * Easily get access to a campaign's modules custom name and icon\n */\nclass ModuleService\n{\n    use CampaignAware;\n\n    protected array $cache = [];\n\n    protected bool $fallback = false;\n\n    public function fallback(): self\n    {\n        $this->fallback = true;\n\n        return $this;\n    }\n\n    public function singular(string|int $key, ?string $fallback = null): ?string\n    {\n        $id = $this->id($key);\n        if ($this->campaign->hasModuleName($id)) {\n            return $this->campaign->moduleName($id);\n        }\n\n        return $fallback;\n    }\n\n    public function plural(string|int $key, ?string $fallback = null): ?string\n    {\n        $id = $this->id($key);\n        if ($this->campaign->hasModuleName($id, true)) {\n            return $this->campaign->moduleName($id, true);\n        }\n        if (empty($fallback) && $this->fallback) {\n            return $this->pluralFallback($id);\n        }\n\n        if (is_array(__($fallback))) {\n            return $this->pluralFallback($id);\n        }\n\n        return __($fallback);\n    }\n\n    public function icon(string|int $key, ?string $fallback = null): ?string\n    {\n        $id = $this->id($key);\n        if ($this->campaign->hasModuleIcon($id)) {\n            return $this->campaign->moduleIcon($id);\n        }\n\n        return $fallback;\n    }\n\n    public function duoIcon(EntityType $entityType): string\n    {\n        if ($this->campaign->hasModuleIcon($entityType->id)) {\n            return $this->campaign->moduleIcon($entityType->id);\n        }\n\n        return $this->defaultIcon($entityType);\n    }\n\n    public function defaultIcon(EntityType $entityType): string\n    {\n        if (config('fontawesome.kit')) {\n            return 'fa-duotone ' . $entityType->icon;\n        }\n\n        return 'fa-regular ' . $entityType->icon;\n    }\n\n    /**\n     * From a string or id, figure out the entity type number\n     */\n    protected function id(mixed $key): int\n    {\n        // Ints are easy and what we hope for\n        if (is_int($key)) {\n            return $key;\n        }\n\n        // Already cached in this page execution? Easy!\n        if (isset($this->cache[$key])) {\n            return $this->cache[$key];\n        }\n        // If it's a plural, and this is a bit bonkers, but we want to figure out the singular\n        if (Str::endsWith($key, 's')) {\n            $key = Str::singular($key);\n        }\n\n        $id = config('entities.ids.' . $key);\n        if (empty($id)) {\n            throw new Exception('Invalid entity type id key ' . $key);\n        }\n\n        return $this->cache[$key] = (int) $id;\n    }\n\n    protected function pluralFallback(int $key)\n    {\n        $flipped = array_flip(config('entities.ids'));\n\n        return __('entities.' . Str::plural($flipped[$key]));\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/NotificationService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Notifications\\Header;\nuse App\\Traits\\CampaignAware;\n\nclass NotificationService\n{\n    use CampaignAware;\n\n    public function notify(string $key, string $icon, string $colour, array $params = []): void\n    {\n        $this->campaign->notifyAdmins(\n            new Header('campaign.' . $key, $icon, $colour, $params)\n        );\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Notifications/HideService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Notifications;\n\nuse App\\Jobs\\Campaigns\\NotifyAdmins;\nuse App\\Traits\\CampaignAware;\n\nclass HideService\n{\n    use CampaignAware;\n\n    /**\n     * Notify the campaign admins that the campaign was forcibly hidden/made visible\n     */\n    public function notify(): void\n    {\n        $colour = 'success';\n        $icon = 'eye';\n        $key = 'shown';\n        if ($this->campaign->isHidden()) {\n            $colour = 'yellow';\n            $icon = 'eye-slash';\n            $key = 'hidden';\n        }\n\n        NotifyAdmins::dispatch(\n            $this->campaign,\n            $key,\n            $icon,\n            $colour,\n            [\n                'campaign' => $this->campaign->name,\n                'link' => route('dashboard', $this->campaign),\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Notifications/ImageRemoveService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Notifications;\n\nuse App\\Jobs\\Campaigns\\NotifyAdmins;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\n\nclass ImageRemoveService\n{\n    use CampaignAware;\n    use EntityAware;\n\n    /**\n     * Notify the campaign admins that the image from an entity was forcibly deleted\n     */\n    public function notify(): void\n    {\n        $colour = 'yellow';\n        $icon = 'eye-slash';\n        $key = 'removed-image';\n\n        NotifyAdmins::dispatch(\n            $this->campaign,\n            $key,\n            $icon,\n            $colour,\n            [\n                'entity' => $this->entity->name,\n                'link' => route('entities.show', [$this->entity, $this->campaign]),\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/PluginService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\Plugin;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Exception;\n\nclass PluginService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected Plugin $plugin;\n\n    public function plugin(Plugin $plugin): self\n    {\n        $this->plugin = $plugin;\n\n        return $this;\n    }\n\n    public function enable(): bool\n    {\n        $plugin = $this->campaignPlugin();\n        if ($plugin->canEnable()) {\n            $plugin->is_active = true;\n            $plugin->save();\n\n            return true;\n        }\n\n        return false;\n    }\n\n    public function disable(): bool\n    {\n        $plugin = $this->campaignPlugin();\n\n        if ($plugin->canDisable()) {\n            $plugin->is_active = false;\n            $plugin->save();\n\n            return true;\n        }\n\n        return false;\n    }\n\n    public function remove(): bool\n    {\n        // Find the campaign plugin\n        $plugin = $this->campaignPlugin();\n\n        if (empty($plugin)) {\n            throw new Exception(__('campaigns/plugins.errors.invalid_plugin'));\n        }\n\n        $plugin->delete();\n\n        return true;\n    }\n\n    protected function campaignPlugin(): ?CampaignPlugin\n    {\n        return CampaignPlugin::where('campaign_id', $this->campaign->id)\n            ->where('plugin_id', $this->plugin->id)\n            ->first();\n    }\n\n    public function update(): bool\n    {\n        // Get latest\n        $latest = $this->plugin->versions()\n            ->publishedVersions($this->plugin->created_by === $this->user->id)\n            ->orderBy('id', 'desc')\n            ->first();\n        // The user could be submitting a plugin to update that was removed in another window\n        if (empty($latest)) {\n            return false;\n        }\n\n        /** @var CampaignPlugin $campaignPlugin */\n        $campaignPlugin = CampaignPlugin::where('campaign_id', $this->campaign->id)\n            ->where('plugin_id', $this->plugin->id)\n            ->first();\n\n        if ($campaignPlugin->plugin_version_id === $latest->id) {\n            return false;\n        }\n\n        $campaignPlugin->plugin_version_id = $latest->id;\n        $campaignPlugin->save();\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/PurgeService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\Campaign;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass PurgeService\n{\n    protected int $count = 0;\n\n    protected bool $dry = true;\n\n    protected array $ids = [];\n\n    public function __construct(\n        protected DeletionService $deletionService,\n    ) {}\n\n    public function ids(): array\n    {\n        return $this->ids;\n    }\n\n    public function real(): self\n    {\n        $this->dry = false;\n\n        return $this;\n    }\n\n    public function count(): int\n    {\n        return $this->baseAll()\n            ->count();\n    }\n\n    public function purgeEmpty(): int\n    {\n        $this->baseAll()\n            ->chunkById(500, function ($campaigns) {\n                /** @var Campaign $campaign */\n                foreach ($campaigns as $campaign) {\n                    if (! $this->dry) {\n                        $campaign->forceDelete();\n                        $this->deletionService->campaign($campaign)->cleanup();\n                        Log::info('Services\\Campaigns\\PurgeService', ['campaign' => $campaign->id]);\n                    }\n                    $this->count++;\n                }\n            });\n\n        return $this->count;\n    }\n\n    public function purgeDeleted(): int\n    {\n        $delay = Carbon::now()->subHours(config('purge.hard_delete'))->toDateString();\n\n        Campaign::onlyTrashed()\n            ->where('deleted_at', '<=', $delay)\n            ->chunkById(500, function ($campaigns) {\n                /** @var Campaign $campaign */\n                foreach ($campaigns as $campaign) {\n                    $this->ids[] = $campaign->id;\n                    $campaign->forceDelete();\n                    $this->deletionService->campaign($campaign)->cleanup();\n\n                    Log::info('Services\\Campaigns\\PurgeService', ['campaign' => $campaign->id]);\n                    $this->count++;\n                }\n            });\n\n        return $this->count;\n    }\n\n    protected function baseAll(): Builder\n    {\n        return Campaign::select('campaigns.id')\n            ->leftJoin('campaign_user as cu', 'cu.campaign_id', 'campaigns.id')\n            ->whereNull('cu.id');\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/SearchCleanupService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Traits\\CampaignAware;\nuse Meilisearch\\Client;\n\nclass SearchCleanupService\n{\n    use CampaignAware;\n\n    /**\n     * Send cleanup request\n     */\n    public function cleanup()\n    {\n        // Cleanup deleted campaign entries from meilisearch\n        $client = new Client(config('scout.meilisearch.host'), config('scout.meilisearch.key'));\n        $client->getKeys();\n\n        $client->index('entities')->deleteDocuments(['filter' => 'campaign_id = ' . $this->campaign->id]);\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/ShareService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Enums\\CampaignVisibility;\nuse App\\Traits\\CampaignAware;\n\nclass ShareService\n{\n    use CampaignAware;\n\n    /**\n     * Make the campaign publicly visible.\n     */\n    public function makePublic(): self\n    {\n        $this->campaign->update(['visibility_id' => CampaignVisibility::public->value]);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Sidebar/SaveService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Sidebar;\n\nuse App\\Events\\Campaigns\\Sidebar\\SidebarReset;\nuse App\\Events\\Campaigns\\Sidebar\\SidebarSaved;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Str;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass SaveService\n{\n    use CampaignAware;\n    use UserAware;\n\n    /**\n     * Save the new config into the database, somehow.\n     */\n    public function save(array $data): void\n    {\n        // Prepare the data for the database\n        $ui = $this->campaign->ui_settings;\n\n        // First we want to figure out the new \"order\", and later we can worry about the \"overrides\".\n        $order = [];\n        $parent = null;\n        foreach ($data['order'] as $field => $value) {\n            if (Str::endsWith($field, '_start')) {\n                $parent = Str::before($field, '_start');\n                $order[$parent] = [];\n\n                continue;\n            } elseif (Str::endsWith($field, '_end')) {\n                $parent = null;\n\n                continue;\n            }\n\n            if (! empty($parent)) {\n                $order[$parent][$field] = $field;\n            } else {\n                $order[$field] = null;\n            }\n        }\n\n        $ui['sidebar'] = [\n            'order' => $order,\n        ];\n\n        // Now let's build the config.\n        $labels = [];\n        $icons = [];\n\n        foreach ($data as $field => $value) {\n            if (empty($value)) {\n                continue;\n            }\n            if (Str::endsWith($field, '_label')) {\n                $labels[Str::before($field, '_label')] = Purify::clean(strip_tags($value));\n\n                continue;\n            } elseif (Str::endsWith($field, '_icon')) {\n                $icons[Str::before($field, '_icon')] = Purify::clean(strip_tags($value));\n\n                continue;\n            }\n            // Nothing of value\n        }\n\n        // Save the new data to the campaign config\n        if (! empty($labels)) {\n            $ui['sidebar']['labels'] = $labels;\n        } elseif (isset($ui['sidebar']['labels'])) { // @phpstan-ignore-line\n            unset($ui['sidebar']['labels']);\n        }\n\n        if (! empty($icons)) {\n            $ui['sidebar']['icons'] = $icons;\n        } elseif (isset($ui['sidebar']['icons'])) {\n            unset($ui['sidebar']['icons']);\n        }\n\n        $this->campaign->ui_settings = $ui;\n        $this->campaign->save();\n\n        SidebarSaved::dispatch($this->campaign, $this->user);\n\n        $this->clearCache();\n    }\n\n    public function reset(): void\n    {\n        $ui = $this->campaign->ui_settings;\n        unset($ui['sidebar']);\n        $this->campaign->ui_settings = $ui;\n        $this->campaign->save();\n\n        SidebarReset::dispatch($this->campaign, $this->user);\n\n        $this->clearCache();\n    }\n\n    public function clearCache(): void\n    {\n        Cache::forget($this->cacheKey());\n    }\n\n    protected function cacheKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_sidebar';\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Sidebar/SetupService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Sidebar;\n\nuse App\\Facades\\Module;\nuse App\\Models\\EntityType;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Cache;\n\nclass SetupService\n{\n    use CampaignAware;\n    use RequestAware;\n    use UserAware;\n\n    protected array $elements;\n\n    protected $layout = [\n        'dashboard' => null,\n        'bookmarks' => null,\n        'world' => [ // world\n            'characters',\n            'locations',\n            'maps',\n            'organisations',\n            'families',\n            'creatures',\n            'races',\n        ],\n        'time' => [\n            'calendars',\n            'timelines',\n            'events',\n            'journals',\n        ],\n        'game' => [\n            'quests',\n            'items',\n            'abilities',\n        ],\n        'notes' => null,\n        'other' => [\n            'tags',\n            'conversations',\n            'dice_rolls',\n            'relations',\n            'attribute_templates',\n            'whiteboards',\n        ],\n        'gallery' => null,\n        'history' => null,\n        'settings' => null,\n        // 'search' => null,\n    ];\n\n    protected $modules = [];\n\n    public function __construct()\n    {\n        $this->setupElements();\n    }\n\n    protected function setupElements(): void\n    {\n        $this->elements = [\n            'dashboard' => [\n                'icon' => 'fa-duotone fa-house',\n                'label' => 'sidebar.dashboard',\n                'module' => false,\n                'route' => 'dashboard',\n                'fixed' => true,\n            ],\n            'bookmarks' => [\n                'type' => 'bookmark',\n                'fixed' => true,\n            ],\n            'world' => [\n                'icon' => 'fa-duotone fa-mountains',\n                'label' => 'sidebar.world',\n                'module' => false,\n                'fixed' => true,\n                'route' => false,\n            ],\n            'characters' => [\n                'type' => 'character',\n                'category_id' => config('entities.ids.character'),\n                'mode' => true,\n            ],\n            'locations' => [\n                'type' => 'location',\n                'category_id' => config('entities.ids.location'),\n                'mode' => true,\n            ],\n            'maps' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.map'),\n                'type' => 'map',\n            ],\n            'organisations' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.organisation'),\n                'type' => 'organisation',\n            ],\n            'families' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.family'),\n                'type' => 'family',\n            ],\n            'calendars' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.calendar'),\n                'type' => 'calendar',\n            ],\n            'timelines' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.timeline'),\n                'type' => 'timeline',\n            ],\n            'races' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.race'),\n                'type' => 'race',\n            ],\n            'creatures' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.creature'),\n                'type' => 'creature',\n            ],\n            'game' => [\n                'icon' => 'fa-duotone fa-book',\n                'label' => 'sidebar.game',\n                'route' => false,\n                'fixed' => true,\n            ],\n            'quests' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.quest'),\n                'type' => 'quest',\n            ],\n            'journals' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.journal'),\n                'type' => 'journal',\n            ],\n            'items' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.item'),\n                'type' => 'item',\n            ],\n            'events' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.event'),\n                'type' => 'event',\n            ],\n            'abilities' => [\n                'mode' => true,\n                'category_id' => config('entities.ids.ability'),\n                'type' => 'ability',\n            ],\n            'notes' => [\n                'mode' => true,\n                'type' => 'note',\n            ],\n            'other' => [\n                'icon' => 'fa-duotone fa-database',\n                'label' => 'sidebar.other',\n                'module' => false,\n                'route' => false,\n                'fixed' => true,\n            ],\n            'time' => [\n                'icon' => 'fa-duotone fa-hourglass',\n                'label' => 'sidebar.time',\n                'module' => false,\n                'route' => false,\n                'fixed' => true,\n            ],\n            'tags' => [\n                'mode' => true,\n                'type' => 'tag',\n            ],\n            'conversations' => [\n                'type' => 'conversation',\n            ],\n            'dice_rolls' => [\n                'type' => 'dice_roll',\n            ],\n            'relations' => [\n                'icon' => 'fa-duotone fa-circle-nodes',\n                'label' => 'sidebar.relations',\n                'perm' => 'relations',\n                'module' => false,\n            ],\n            'gallery' => [\n                'icon' => 'fa-duotone fa-images',\n                'label' => 'sidebar.gallery',\n                'route' => 'gallery',\n                'perm' => 'gallery',\n                'module' => false,\n            ],\n            'attribute_templates' => [\n                'type' => 'attribute_template',\n            ],\n            'whiteboards' => [\n                'type' => 'whiteboard',\n            ],\n            'settings' => [\n                'icon' => 'fa-duotone fa-cog',\n                'label' => 'sidebar.settings',\n                'module' => false,\n                'fixed' => true,\n                'route' => 'overview',\n            ],\n            /*'search' => [\n            'icon' => 'fa fa-search',\n            'label' => 'Search...',\n            'module' => false,\n            'route' => 'search',\n        ],*/\n            'history' => [\n                'icon' => 'fa-duotone fa-clock-rotate-left',\n                'label' => 'sidebar.recent',\n                'perm' => 'recover',\n                'module' => false,\n                'fixed' => true,\n            ],\n        ];\n    }\n\n    protected bool $withDisabled = false;\n\n    public function withDisabled(): self\n    {\n        $this->withDisabled = true;\n\n        return $this;\n    }\n\n    /**\n     * Generate an array of the sidebar elements\n     */\n    public function layout(): array\n    {\n        $key = $this->cacheKey();\n        if (! $this->withDisabled && Cache::has($key)) {\n            if (! app()->hasDebugModeEnabled()) {\n                return Cache::get($key);\n            }\n        }\n        $this->loadModules();\n        $this->fillElements();\n        $layout = [];\n        $layoutSetup = $this->customLayout();\n        $rewrite = [];\n        foreach ($layoutSetup as $name => $children) {\n            // We migrated to a new structure, but have the setup in json, so we need to \"fix it\" here\n            if (in_array($name, $rewrite)) {\n                continue;\n            }\n            if ($name === 'menu_links') {\n                $name = 'bookmarks';\n            } elseif ($name === 'campaigns') {\n                $name = 'world';\n                $rewrite[] = 'world';\n            } elseif ($name === 'campaign') {\n                $name = 'game';\n                $rewrite[] = 'game';\n            }\n            if (! isset($this->elements[$name])) {\n                dd('E601 - cant find element ' . $name);\n            }\n            $element = $this->customElement($name);\n            // Add a route if it should have one\n            if (! isset($element['route'])) {\n                if (! isset($element['type'])) {\n                    $element['route'] = $name . '.index';\n                }\n            }\n\n            // No children? Nothing more to do\n            if (empty($children)) {\n                // If this is a level 0 element like \"Notes\", the module still needs to be checked\n                if (! isset($element['module']) && ! $this->withDisabled) {\n                    if (! $this->campaign->enabled($name)) {\n                        continue;\n                    }\n                }\n                $layout[$name] = $element;\n\n                continue;\n            }\n            $layout[$name] = $element;\n            $layout[$name]['children'] = [];\n            foreach ($children as $childName) {\n                $child = $this->customElement($childName);\n                // Child has a module, check that the campaign has it enabled\n                if (! isset($child['module'])) {\n                    if (! $this->campaign->enabled($childName)) {\n                        if ($this->withDisabled) {\n                            $child['disabled'] = true;\n                        } else {\n                            continue;\n                        }\n                    }\n                }\n                // Child has permission check?\n                if (isset($child['perm']) && count($children) === 1) {\n                    $layout[$name]['perm'] = $child['perm'];\n                }\n\n                // Add route when none is set\n                if (! isset($child['route']) && ! isset($child['type'])) {\n                    $child['route'] = $childName . '.index';\n                }\n\n                // Add it\n                $layout[$name]['children'][$childName] = $child;\n            }\n        }\n\n        if (! $this->withDisabled) {\n            Cache::put($key, $layout, 7 * 86400);\n        }\n\n        return $layout;\n    }\n\n    protected function customLayout(): array\n    {\n        // Only boosted campaigns can change the layout\n        if (! $this->campaign->boosted()) {\n            return $this->layout;\n        }\n        $layout = Arr::get($this->campaign->ui_settings, 'sidebar.order');\n        if (empty($layout)) {\n            return $this->layout;\n        }\n\n        // We have a layout, let's see if anything is missing. There is probably a smarter way to do this.\n        $definedElements = [];\n        foreach ($layout as $name => $values) {\n            $definedElements[] = $name;\n            if (! is_array($values)) {\n                continue;\n            }\n            foreach ($values as $key) {\n                $definedElements[] = $key;\n            }\n        }\n\n        // Find missing elements that are in the base layout but not in the custom one\n        $missing = array_diff(array_keys($this->elements), $definedElements);\n\n        // Loop through the missing elements and inject them where they are \"expected\"\n        foreach ($missing as $element) {\n            $found = false;\n            // dump('Missing: ' . $element);\n            // If it's a base level, add it there\n            if (array_key_exists($element, $this->layout)) {\n                $layout[$element] = null;\n\n                continue;\n            }\n            foreach ($this->layout as $name => $children) {\n                if (! is_array($children)) {\n                    continue;\n                }\n                $values = array_values($children);\n                // dump(!in_array($element, $values));\n                if (! in_array($element, $values)) {\n                    continue;\n                }\n                $layout[$name][$element] = $element;\n                // dump('Added it to ' . $name);\n\n                $found = true;\n\n                continue;\n            }\n\n            if (! $found) {\n                dd('E637: Couldn\\'t place sidebar element ' . $element);\n            }\n        }\n\n        return $layout;\n    }\n\n    /**\n     * Load custom element setup for boosted campaigns\n     */\n    protected function customElement(string $key): array\n    {\n        $element = $this->elements[$key];\n        $element['label_key'] = $element['label'] ?? null;\n        unset($element['label']);\n\n        if (! $this->campaign->boosted()) {\n            return $element;\n        }\n\n        // Module custom name\n        if (! empty($element['type']) && ! $this->withDisabled) {\n            /** @var ?EntityType $type */\n            $type = $this->modules[$element['type']] ?? null;\n            if ($type) {\n                if ($type->isCustom() || $this->campaign->hasModuleName($type->id, true)) {\n                    $element['custom_label'] = $type->plural();\n                }\n                $element['custom_icon'] = $type->icon();\n            }\n        }\n\n        $label = Arr::get($this->campaign->ui_settings, 'sidebar.labels.' . $key);\n        $icon = Arr::get($this->campaign->ui_settings, 'sidebar.icons.' . $key);\n        if (! empty($label)) {\n            $element['custom_label'] = $label;\n        }\n        if (! empty($icon)) {\n            $element['custom_icon'] = $icon;\n        }\n\n        return $element;\n    }\n\n    protected function cacheKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_sidebar';\n    }\n\n    /**\n     * Available parents for placing a quick link\n     */\n    public function availableParents(): array\n    {\n        $labels = [];\n        $this->loadModules();\n        foreach ($this->elements as $key => $element) {\n            $labels[$key] = $this->elementName($element);\n        }\n\n        return $labels;\n    }\n\n    protected function loadModules(): void\n    {\n        $modules = $this->campaign->getEntityTypes();\n        /** @var EntityType $module */\n        foreach ($modules as $module) {\n            $this->modules[$module->code] = $module;\n        }\n    }\n\n    protected function fillElements(): void\n    {\n        foreach ($this->elements as $key => $element) {\n            if (! isset($element['type'])) {\n                continue;\n            }\n\n            /** @var ?EntityType $module */\n            $module = $this->modules[$element['type']] ?? null;\n            if (! $module) {\n                continue;\n            }\n\n            $element['icon'] = Module::defaultIcon($module);\n            $element['label'] = $module->defaultPluralKey();\n            $this->elements[$key] = $element;\n        }\n    }\n\n    protected function elementName(array $element): string\n    {\n        if (empty($element['type'])) {\n            return __($element['label']);\n        }\n\n        /** @var ?EntityType $module */\n        $module = $this->modules[$element['type']];\n        if (! $module) {\n            return __($element['label']);\n        }\n\n        return __($module->defaultPluralKey());\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/StatService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\Attribute;\nuse App\\Models\\Bookmark;\nuse App\\Models\\CharacterTrait;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAbility;\nuse App\\Models\\Inventory;\nuse App\\Models\\MapLayer;\nuse App\\Models\\MapMarker;\nuse App\\Models\\Post;\nuse App\\Models\\QuestElement;\nuse App\\Models\\Reminder;\nuse App\\Models\\TimelineElement;\nuse App\\Models\\TimelineEra;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass StatService\n{\n    use CampaignAware;\n\n    protected array $stats;\n\n    public function get(): array\n    {\n        $key = 'campaign_stats_' . $this->campaign->id;\n        if (Cache::has($key) && ! config('app.debug')) {\n            return Cache::get($key);\n        }\n\n        $this->stats = [];\n\n        // @phpstan-ignore-next-line\n        $this->stats['entities'] = $this->campaign->entities()->withInvisible()->count();\n        $this->permissions()\n            ->types()\n            ->modules()\n            ->words();\n\n        Cache::put($key, $this->stats, 3600 * 24);\n\n        return $this->stats;\n    }\n\n    protected function types(): self\n    {\n        $stats = [];\n        // @phpstan-ignore-next-line\n        $res = $this->campaign\n            ->entities()\n            ->withInvisible()\n            ->select(['type_id', DB::raw('count(*) as total')])\n            ->groupBy('type_id')\n            ->get();\n        foreach ($res as $data) {\n            $stats[$data->type_id] = $data->total;\n        }\n        arsort($stats);\n        $this->stats['types'] = $stats;\n\n        return $this;\n    }\n\n    protected function permissions(): self\n    {\n        $this->stats['permissions'] = [];\n        $this->stats['permissions']['users'] = $this->campaign->users()->count();\n        $this->stats['permissions']['followers'] = $this->campaign->followers()->count();\n        $this->stats['permissions']['roles'] = $this->campaign->roles()->count();\n        arsort($this->stats['permissions']);\n\n        return $this;\n    }\n\n    protected function modules(): self\n    {\n        $this->stats['modules'] = [];\n        // @phpstan-ignore-next-line\n        $this->stats['modules']['properties'] = Attribute::withPrivate()->leftJoin('entities', 'entities.id', 'attributes.entity_id')->where('entities.campaign_id', $this->campaign->id)->count();\n        // @phpstan-ignore-next-line\n        $this->stats['modules']['articles'] = Post::withInvisible()->leftJoin('entities', 'entities.id', 'posts.entity_id')->where('entities.campaign_id', $this->campaign->id)->count();\n        // @phpstan-ignore-next-line\n        $this->stats['modules']['abilities'] = EntityAbility::withPrivate()->leftJoin('entities', 'entities.id', 'entity_abilities.entity_id')->where('entities.campaign_id', $this->campaign->id)->count();\n        // @phpstan-ignore-next-line\n        $this->stats['modules']['reminders'] = Reminder::withPrivate()->whereHasMorph(\n            'remindable',\n            [Entity::class, Post::class],\n            function (Builder $query, string $type) {\n                if ($type === Entity::class) {\n                    $query->where('campaign_id', $this->campaign->id);\n                } else {\n                    $query->leftJoin('entities as e', 'e.id', '=', 'posts.entity_id')\n                        ->where('e.campaign_id', $this->campaign->id);\n                }\n            })->count();\n        // @phpstan-ignore-next-line\n        $this->stats['modules']['inventories'] = Inventory::withPrivate()->leftJoin('entities', 'entities.id', 'inventories.entity_id')->where('entities.campaign_id', $this->campaign->id)->count();\n        // @phpstan-ignore-next-line\n        $this->stats['modules']['bookmarks'] = Bookmark::withPrivate()->where('campaign_id', $this->campaign->id)->count();\n        arsort($this->stats['modules']);\n\n        return $this;\n    }\n\n    protected function words(): self\n    {\n        $this->stats['words'] = [\n            'total' => 0,\n            'entities' => 0,\n            'posts' => 0,\n        ];\n\n        // Count the `words` field in the entities\n        // @phpstan-ignore-next-line\n        $entityWords = $this->campaign\n            ->entities()\n            ->withInvisible()\n            ->sum('words');\n        $this->stats['words']['entities'] = $entityWords;\n        $this->stats['words']['total'] += $entityWords;\n\n        // Count words from all posts of entities in the campaign\n        // @phpstan-ignore-next-line\n        $postWords = Post::withInvisible()\n            ->leftJoin('entities', 'entities.id', 'posts.entity_id')\n            ->where('entities.campaign_id', $this->campaign->id)\n            ->sum('posts.words');\n        $this->stats['words']['total'] += $postWords;\n        $this->stats['words']['posts'] = $postWords;\n\n        // Count words from all quest and timeline elements in the campaign\n        // @phpstan-ignore-next-line\n        $questWords = QuestElement::withPrivate()\n            ->leftJoin('quests', 'quests.id', 'quest_elements.quest_id')\n            ->where('quests.campaign_id', $this->campaign->id)\n            ->sum('quest_elements.words');\n        $this->stats['words']['total'] += $questWords;\n        $this->stats['words']['elements'] = $questWords;\n\n        // @phpstan-ignore-next-line\n        $timelineWords = TimelineElement::withPrivate()\n            ->leftJoin('timelines', 'timelines.id', 'timeline_elements.timeline_id')\n            ->where('timelines.campaign_id', $this->campaign->id)\n            ->sum('timeline_elements.words');\n        $this->stats['words']['total'] += $timelineWords;\n        $this->stats['words']['elements'] += $timelineWords;\n        $timelineEraWords = TimelineEra::leftJoin('timelines', 'timelines.id', 'timeline_eras.timeline_id')\n            ->where('timelines.campaign_id', $this->campaign->id)\n            ->sum('timeline_eras.words');\n        $this->stats['words']['total'] += $timelineEraWords;\n        $this->stats['words']['elements'] += $timelineEraWords;\n\n        // Map layers and markers\n        $markerWords = MapMarker::leftJoin('maps', 'maps.id', 'map_markers.map_id')\n            ->where('maps.campaign_id', $this->campaign->id)\n            ->sum('map_markers.words');\n        $this->stats['words']['total'] += $markerWords;\n        $this->stats['words']['elements'] += $markerWords;\n        $layerWords = MapLayer::leftJoin('maps', 'maps.id', 'map_layers.map_id')\n            ->where('maps.campaign_id', $this->campaign->id)\n            ->sum('map_layers.words');\n        $this->stats['words']['total'] += $layerWords;\n        $this->stats['words']['elements'] += $layerWords;\n\n        // Character traits\n        $traitWords = CharacterTrait::leftJoin('characters', 'characters.id', 'character_traits.character_id')\n            ->where('characters.campaign_id', $this->campaign->id)\n            ->sum('character_traits.words');\n        $this->stats['words']['total'] += $traitWords;\n        $this->stats['words']['elements'] += $traitWords;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/SystemService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\GameSystem;\nuse App\\Traits\\CampaignAware;\n\nclass SystemService\n{\n    use CampaignAware;\n\n    public function save(array $ids): void\n    {\n        $existing = [];\n        foreach ($this->campaign->systems as $system) {\n            $existing[$system->id] = $system->name;\n        }\n        $new = [];\n\n        foreach ($ids as $id) {\n            if (! empty($existing[$id])) {\n                unset($existing[$id]);\n            } else {\n                $genre = GameSystem::find($id);\n                if (! empty($genre)) {\n                    $new[] = $genre->id;\n                }\n            }\n        }\n        $this->campaign->systems()->attach($new);\n\n        // Detatch the remaining\n        if (! empty($existing)) {\n            $this->campaign->systems()->detach(array_keys($existing));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/ThemeBuilderService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign;\n\nuse App\\Models\\CampaignStyle;\nuse App\\Traits\\CampaignAware;\n\nclass ThemeBuilderService\n{\n    use CampaignAware;\n\n    public function save(?string $config = null)\n    {\n        $style = $this->getStyle();\n        $style->content = $config;\n        $style->save();\n    }\n\n    protected function getStyle(): CampaignStyle\n    {\n        $style = CampaignStyle::theme()->first();\n        if ($style) {\n            return $style;\n        }\n\n        $style = new CampaignStyle([\n            'name' => 'Campaign theme',\n            'is_enabled' => true,\n        ]);\n        $style->is_theme = true;\n        $style->campaign_id = $this->campaign->id;\n\n        return $style;\n    }\n}\n"
  },
  {
    "path": "app/Services/Campaign/Webhooks/SaveService.php",
    "content": "<?php\n\nnamespace App\\Services\\Campaign\\Webhooks;\n\nuse App\\Models\\Webhook;\nuse App\\Services\\Entity\\TagService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\n\nclass SaveService\n{\n    use CampaignAware;\n    use RequestAware;\n    use UserAware;\n\n    protected Webhook $webhook;\n\n    public function __construct(protected TagService $tagService) {}\n\n    public function webhook(Webhook $webhook): self\n    {\n        $this->webhook = $webhook;\n\n        return $this;\n    }\n\n    public function save(): Webhook\n    {\n        if (! isset($this->webhook)) {\n            $this->create();\n        }\n        $this->tags();\n\n        return $this->webhook;\n    }\n\n    protected function create(): void\n    {\n        $this->webhook = new Webhook($this->request->all());\n        $this->webhook->campaign_id = $this->campaign->id;\n        $this->webhook->save();\n    }\n\n    protected function tags(): void\n    {\n        // HTML forms will have 'save-tags', while the api will have a tag array if they want to make changes.\n        if (! $this->request->has('tags') && ! $this->request->has('save-tags')) {\n            return;\n        }\n        $ids = $this->request->post('tags', []);\n        if (! is_array($ids)) { // People sent weird stuff through the API\n            $ids = [];\n        }\n\n        $this->tagService\n            ->user($this->user)\n            ->campaign($this->campaign)\n            ->model($this->webhook)\n            ->sync($ids);\n    }\n}\n"
  },
  {
    "path": "app/Services/ColourService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nclass ColourService\n{\n    protected array $calculated = [];\n\n    /**\n     * Get a contrasting colour, either black or white depending on the provided colour\n     */\n    public function contrastBW(string $colour): string\n    {\n        $hexColour = mb_trim($colour, '#');\n        // Don't re-check already calculated values\n        if (isset($this->calculated[$hexColour])) {\n            return $this->calculated[$hexColour];\n        }\n\n        // hexColour RGB\n        $R1 = hexdec(mb_substr($hexColour, 1, 2));\n        $G1 = hexdec(mb_substr($hexColour, 3, 2));\n        $B1 = hexdec(mb_substr($hexColour, 5, 2));\n\n        // Black RGB\n        $blackColour = '#000000';\n        $R2BlackColour = hexdec(mb_substr($blackColour, 1, 2));\n        $G2BlackColour = hexdec(mb_substr($blackColour, 3, 2));\n        $B2BlackColour = hexdec(mb_substr($blackColour, 5, 2));\n\n        // Calc contrast ratio\n        $L1 = 0.2126 * pow($R1 / 255, 2.2) +\n            0.7152 * pow($G1 / 255, 2.2) +\n            0.0722 * pow($B1 / 255, 2.2);\n\n        $L2 = 0.2126 * pow($R2BlackColour / 255, 2.2) +\n            0.7152 * pow($G2BlackColour / 255, 2.2) +\n            0.0722 * pow($B2BlackColour / 255, 2.2);\n\n        $contrastRatio = 0;\n        if ($L1 > $L2) {\n            $contrastRatio = (int) (($L1 + 0.05) / ($L2 + 0.05));\n        } else {\n            $contrastRatio = (int) (($L2 + 0.05) / ($L1 + 0.05));\n        }\n\n        // If contrast is more than 5, return black colour\n        if ($contrastRatio > 5) {\n            return $this->calculated[$hexColour] = '#000000';\n        } else {\n            return $this->calculated[$hexColour] = '#FFFFFF';\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/CommunityVoteService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\CommunityVote;\nuse App\\Models\\CommunityVoteBallot;\nuse App\\Models\\User;\n\nclass CommunityVoteService\n{\n    public function cast(CommunityVote $communityVote, User $user, ?string $option = null): array\n    {\n        if (empty($option)) {\n            $this->remove($communityVote, $user);\n        } else {\n            $this->add($communityVote, $user, $option);\n        }\n\n        // Return the new % values\n        $communityVote->refresh();\n\n        return $communityVote->voteStats();\n    }\n\n    protected function remove(CommunityVote $communityVote, User $user): void\n    {\n        CommunityVoteBallot::where([\n            'community_vote_id' => $communityVote->id,\n            'user_id' => $user->id,\n        ])->delete();\n    }\n\n    protected function add(CommunityVote $communityVote, User $user, string $option): void\n    {\n        // Validate the option\n        $options = $communityVote->options();\n        if (! isset($options[$option])) {\n            return;\n        }\n\n        // If we've already voted for this option, don't bother\n        if ($communityVote->votedFor($option)) {\n            return;\n        }\n\n        // Delete any previous option\n        $this->remove($communityVote, $user);\n\n        CommunityVoteBallot::create([\n            'community_vote_id' => $communityVote->id,\n            'user_id' => $user->id,\n            'vote' => $option,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Services/CountryService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nclass CountryService\n{\n    /**\n     * Get the user's country base on where they are making the request from\n     */\n    public function getCountry(): string\n    {\n        $country = config('app.default_country');\n        if (isset($_SERVER['HTTP_CF_IPCOUNTRY'])) {\n            $country = mb_substr($_SERVER['HTTP_CF_IPCOUNTRY'], 0, 6);\n        }\n\n        return $country;\n    }\n\n    /**\n     * Get the user's currency based on the country they are making the request from\n     */\n    public function getCurrency(): string\n    {\n        $country = $this->getCountry();\n        $currency = 'usd';\n        $euroCountries = ['AT', 'BE', 'HR', 'CY', 'EE', 'FI', 'FR', 'DE', 'GR', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PT', 'SK', 'SI', 'ES', 'EZ'];\n\n        if (in_array($country, $euroCountries)) {\n            $currency = 'eur';\n        }\n\n        return $currency;\n    }\n}\n"
  },
  {
    "path": "app/Services/CsvImportService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Enums\\UserAction;\nuse App\\Facades\\BookmarkCache;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\CharacterCache;\nuse App\\Facades\\EntityAssetCache;\nuse App\\Facades\\EntityCache;\nuse App\\Facades\\Limit;\nuse App\\Facades\\MapMarkerCache;\nuse App\\Facades\\QuestCache;\nuse App\\Facades\\TimelineElementCache;\nuse App\\Http\\Requests\\StoreCharacter;\nuse App\\Http\\Requests\\StoreCustomEntity;\nuse App\\Models\\CampaignImport;\nuse App\\Models\\Character;\nuse App\\Models\\CharacterTrait;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\UserLog;\nuse App\\Notifications\\Header;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\TagService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\File;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Support\\Str;\nuse SplFileObject;\nuse Throwable;\n\nclass CsvImportService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function __construct(protected EntitySaveService $entitySaveService) {}\n\n    protected int $expectedColumns = 1;\n\n    protected int $requiredFullyFilledColumns = 1;\n\n    protected CampaignImport $job;\n\n    protected EntityType $entityType;\n\n    protected string $filePath;\n\n    protected array $tags = [];\n\n    protected array $fieldMap = [];\n\n    protected array $data = [];\n\n    protected array $appearances = [];\n\n    protected array $personalities = [];\n\n    protected array $headers = [];\n\n    protected array $logs = [];\n\n    protected int $entityCount = 0;\n\n    public function job(CampaignImport $job)\n    {\n        $this->job = $job;\n        $this\n            ->campaign($job->campaign)\n            ->user($job->user);\n\n        return $this;\n    }\n\n    public function entityType(EntityType $entityType)\n    {\n        $this->entityType = $entityType;\n\n        return $this;\n    }\n\n    public function tags(array $tags)\n    {\n        $this->tags = $tags;\n\n        return $this;\n    }\n\n    public function fieldMap(array $fieldMap)\n    {\n        $this->fieldMap = $fieldMap;\n\n        return $this;\n    }\n\n    public function traits(array $appearances, array $personalities)\n    {\n        $this->appearances = $appearances;\n        $this->personalities = $personalities;\n\n        return $this;\n    }\n\n    public function run(): void\n    {\n        $this\n            ->init()\n            ->download()\n            ->processCsv();\n    }\n\n    protected function init(): self\n    {\n        $this->logs[] = 'Starting Import';\n\n        $this->job->status_id = CampaignImportStatus::RUNNING;\n        $this->job->save();\n\n        return $this;\n    }\n\n    /**\n     * Download the files from s3 onto the local machine and unzip it\n     */\n    protected function download(): self\n    {\n        $files = $this->job->config['files'];\n        $path = '/campaigns/' . $this->campaign->id . '/imports/';\n        foreach ($files as $file) {\n            // Log::info('Want to download ' . $file);\n            $s3 = Storage::disk('export')->get($file);\n            $local = $path . uniqid() . '.csv';\n            // Log::info('Will download from the export disk to local ' . $local);\n            Storage::disk('local')->put($local, $s3);\n\n            $this->filePath = storage_path('app/' . $local);\n            $this->logs[] = 'Downloaded csv to ' . $local;\n        }\n\n        return $this;\n    }\n\n    protected function getHeader(): array\n    {\n        $csv = new SplFileObject($this->filePath);\n        $csv->setFlags(\n            SplFileObject::READ_CSV |\n            SplFileObject::SKIP_EMPTY |\n            SplFileObject::DROP_NEW_LINE\n        );\n\n        foreach ($csv as $row) {\n            // Skip empty lines / EOF\n            if ($row === [null]) {\n                continue;\n            }\n\n            return $row;\n        }\n\n        return [];\n    }\n\n    public function processCsv(): self\n    {\n        // Open the CSV file\n        $this->logs[] = 'Processing CSV';\n        $csv = new SplFileObject($this->filePath);\n        $csv->setFlags(\n            SplFileObject::READ_CSV |\n            SplFileObject::SKIP_EMPTY |\n            SplFileObject::DROP_NEW_LINE\n        );\n\n        DB::beginTransaction();\n        try {\n            // We're in the queue after all\n            CampaignLocalization::forceCampaign($this->campaign);\n            CampaignCache::campaign($this->campaign)->clear();\n            EntityCache::campaign($this->campaign);\n            CharacterCache::campaign($this->campaign);\n            TimelineElementCache::campaign($this->campaign);\n            QuestCache::campaign($this->campaign);\n            MapMarkerCache::campaign($this->campaign);\n            EntityAssetCache::campaign($this->campaign);\n            BookmarkCache::campaign($this->campaign);\n            Limit::campaign($this->campaign);\n            Limit::user($this->user);\n\n            // Batch size controls how many rows are loaded into memory at once.\n            $batchSize = 50;\n            $batch = [];\n            $count = 0;\n            foreach ($csv as $rowIndex => $row) {\n                // Skip header if needed\n                if ($rowIndex === 0) {\n                    $this->headers = $row;\n\n                    continue;\n                }\n\n                // Skip empty rows\n                if ($row === [null]) {\n                    continue;\n                }\n\n                $count++;\n                $batch[] = $row;\n\n                if (count($batch) === $batchSize) {\n                    $this->logs[] = 'Processing batch';\n                    $this->processBatch($batch);\n                    $batch = []; // free memory immediately\n                }\n            }\n\n            // Process remaining rows\n            if (! empty($batch)) {\n                $this->processBatch($batch);\n            }\n\n            DB::commit();\n\n        } catch (Exception $e) {\n            DB::rollBack();\n            $this->fail($e);\n            throw $e;\n        }\n\n        $this->job->status_id = CampaignImportStatus::FINISHED;\n        $this->job->save();\n\n        UserLog::create([\n            'user_id' => $this->user->id,\n            'type_id' => UserAction::csvImport,\n            'campaign_id' => $this->campaign->id,\n            'data' => [\n                'module' => 'import',\n                'action' => 'CSV finished',\n                'count' => $this->entityCount,\n                'entity_type' => $this->entityType->code,\n            ],\n        ]);\n\n        $this->user->notify(new Header('campaign.import.csv_success', 'upload', 'info',\n            [\n                'campaign' => $this->campaign->name,\n                'link' => route('dashboard', ['campaign' => $this->campaign]),\n                'count' => $count,\n            ]));\n        $this->logs[] = 'Finished processing CSV';\n        $this->cleanup();\n\n        return $this;\n    }\n\n    protected function processBatch(array $rows): void\n    {\n        foreach ($rows as $row) {\n            if ($row === false) {\n                continue;\n            }\n            $temp = [];\n            foreach ($this->fieldMap as $field => $index) {\n                if (Str::startsWith($field, 'is_')) {\n                    // Correctly handles \"true\", \"false\", \"1\", \"0\", \"on\", \"off\"\n                    $temp[$field] = filter_var($row[$index], FILTER_VALIDATE_BOOL);\n                } else {\n                    $temp[$field] = $row[$index];\n                }\n            }\n\n            $mappedPersonalities = [];\n            foreach ($this->personalities as $key) {\n                $this->logs[] = 'Has personalities';\n\n                if (isset($row[$key])) {\n                    $mappedPersonalities[$this->headers[$key]] = $row[$key];\n                }\n            }\n\n            $mappedAppearances = [];\n            foreach ($this->appearances as $key) {\n                $this->logs[] = 'Has appearances';\n\n                if (isset($row[$key])) {\n                    $mappedAppearances[$this->headers[$key]] = $row[$key];\n                }\n            }\n            $temp['traits'] = ['personalities' => $mappedPersonalities, 'appearances' => $mappedAppearances];\n\n            $this->data = $temp;\n            $this->create();\n        }\n        // Log::info('Example CSV Data', ['data' => $data]);\n    }\n\n    public function create(): Entity\n    {\n        // Remove target as we need that for something else\n        if (! empty($this->data['entry'])) {\n            $this->data['entry'] = '<p>' . nl2br($this->data['entry'] . '</p>');\n        } elseif ($this->entityType->id == config('entities.ids.note')) {\n            $this->data['entry'] = '';\n        }\n\n        if (empty($this->data['is_private'])) {\n            $this->data['is_private'] = $this->campaign->entity_visibility;\n        }\n\n        $traits = $this->data['traits'];\n        unset($this->data['traits']);\n\n        if ($this->entityType->isCustom()) {\n            $entity = $this->createEntity();\n\n            $this->entityCount++;\n\n            return $entity;\n        }\n\n        // Prepare the validator\n        $requestValidator = '\\App\\Http\\Requests\\Store' . ucfirst(Str::camel($this->entityType->code));\n\n        /** @var StoreCharacter $validator */\n        $validator = new $requestValidator;\n\n        $this->validateEntity($this->data, $validator->rules());\n\n        $new = $this->entityType->getMiscClass();\n        $new->fill($this->data);\n        $new->campaign_id = $this->campaign->id;\n        $new->save();\n        $new->createEntity();\n        $entity = $new->entity;\n        $entity->entry = $this->data['entry'] ?? '';\n        $entity->type = $this->data['type'] ?? '';\n        $entity->is_private = $this->data['is_private'];\n        $entity->created_by = $this->user->id;\n        $entity->saveQuietly();\n        $this->saveTags($entity);\n\n        if ($this->entityType->isCharacter() && $new instanceof Character) {\n            $this->saveTraits($new, $traits);\n        }\n        $this->entityCount++;\n\n        return $new->entity;\n    }\n\n    protected function createEntity(): Entity\n    {\n        $requestValidator = StoreCustomEntity::class;\n        $validator = new $requestValidator;\n        $this->validateEntity($this->data, $validator->rules());\n\n        $entity = new Entity($this->data);\n        $entity->type_id = $this->entityType->id;\n        $entity->campaign_id = $this->campaign->id;\n        $entity->entry = $this->data['entry'] ?? '';\n        $entity->type = $this->data['type'] ?? '';\n        $entity->is_private = $this->data['is_private'];\n        $entity->created_by = $this->user->id;\n        $entity->save();\n        $this->entitySaveService->save($entity, $this->data);\n\n        return $entity;\n    }\n\n    /**\n     * Validate an entity's request to make sure data doesn't contain erroneous info\n     */\n    protected function validateEntity(array $data, array $rules)\n    {\n        return Validator::make(\n            $data,\n            $rules,\n        )->validate();\n    }\n\n    /**\n     * Save the tags\n     */\n    protected function saveTags(Entity $entity): void\n    {\n        if (empty($this->tags)) {\n            return;\n        }\n        /** @var TagService $tagService */\n        $tagService = app()->make(TagService::class);\n        $tagService->user($this->user)\n            ->entity($entity)\n            ->sync($this->tags);\n    }\n\n    /**\n     * Save the character traits\n     */\n    protected function saveTraits(Character $character, array $traits): void\n    {\n\n        foreach ($traits as $type => $entries) {\n            $traitOrder = 0;\n            foreach ($entries as $name => $entry) {\n                if (empty($name)) {\n                    continue;\n                }\n\n                $model = new CharacterTrait;\n                $model->character_id = $character->id;\n                $model->section_id = $type == 'personalities' ?\n                    CharacterTrait::SECTION_PERSONALITY : CharacterTrait::SECTION_APPEARANCE;\n\n                $model->name = $name;\n                $model->entry = $entry;\n                $model->default_order = $traitOrder;\n                $model->save();\n                $traitOrder++;\n            }\n        }\n    }\n\n    protected function cleanup(): self\n    {\n        $files = $this->job->config['files'];\n        $this->logs[] = 'Created ' . $this->entityCount . ' new entities';\n        $this->job->logs = $this->logs;\n        $this->job->save();\n        foreach ($files as $file) {\n            Storage::disk('export')->delete($file);\n        }\n        File::delete($this->filePath);\n\n        return $this;\n    }\n\n    public function fail(Throwable $e): self\n    {\n        // Notify the user that something went wrong\n        $this->user->notify(new Header(\n            'campaign.import.failed',\n            'circle-exclamation',\n            'red',\n            [\n                'campaign' => $this->campaign->name,\n                'link' => route('dashboard', ['campaign' => $this->campaign]),\n            ]\n        ));\n\n        $config = $this->job->config;\n        if (! isset($config['logs'])) {\n            $config['logs'] = [];\n        }\n        $this->job->errors = [$e->getMessage()];\n        $this->job->config = $config;\n        $this->job->status_id = CampaignImportStatus::FAILED;\n        $this->job->save();\n\n        if (app()->bound('sentry')) {\n            app('sentry')->captureException($e);\n        }\n\n        Log::error('CSV Import', ['where' => 'fail', 'error' => $e->getMessage()]);\n        $this->logs[] = 'Processing Failed';\n\n        return $this->cleanup();\n    }\n}\n"
  },
  {
    "path": "app/Services/CsvValidatorService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\CampaignImportStatus;\nuse App\\Models\\CampaignImport;\nuse App\\Notifications\\Header;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\File;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\nuse RuntimeException;\nuse SplFileObject;\n\nclass CsvValidatorService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected int $expectedColumns = 1;\n\n    protected int $requiredFullyFilledColumns = 1;\n\n    protected CampaignImport $job;\n\n    protected string $filePath;\n\n    public function job(CampaignImport $job)\n    {\n        $this->job = $job;\n        $this\n            ->campaign($job->campaign)\n            ->user($job->user);\n\n        return $this;\n    }\n\n    public function run(): void\n    {\n        $this\n            ->init()\n            ->download()\n            ->validate();\n    }\n\n    public function toSelect(): array\n    {\n        return $this\n            ->download()\n            ->getHeader();\n    }\n\n    public function preview(): array\n    {\n        return $this\n            ->download()\n            ->getHeaderAndFirstRows();\n    }\n\n    protected function init(): self\n    {\n        $this->job->status_id = CampaignImportStatus::VALIDATING;\n        $this->job->save();\n\n        return $this;\n    }\n\n    /**\n     * Download the files from s3 onto the local machine and unzip it\n     */\n    protected function download(): self\n    {\n        $files = $this->job->config['files'];\n        $path = '/campaigns/' . $this->campaign->id . '/imports/';\n\n        foreach ($files as $file) {\n            // Log::info('Want to download ' . $file);\n            $s3 = Storage::disk('export')->get($file);\n            $local = $path . uniqid() . '.csv';\n            // Log::info('Will download from the export disk to local ' . $local);\n            Storage::disk('local')->put($local, $s3);\n\n            $this->filePath = storage_path('app/' . $local);\n        }\n\n        return $this;\n    }\n\n    protected function cleanup(): self\n    {\n        File::delete($this->filePath);\n\n        return $this;\n    }\n\n    protected function getHeader(): array\n    {\n        $csv = new SplFileObject($this->filePath);\n        $csv->setFlags(\n            SplFileObject::READ_CSV |\n            SplFileObject::SKIP_EMPTY |\n            SplFileObject::DROP_NEW_LINE\n        );\n\n        foreach ($csv as $row) {\n            // Skip empty lines / EOF\n            if ($row === [null]) {\n                continue;\n            }\n            $this->cleanup();\n\n            return $row;\n        }\n        $this->cleanup();\n\n        return [];\n    }\n\n    /**\n     * Return the header row and the first two data rows from a CSV\n     */\n    protected function getHeaderAndFirstRows(int $rows = 2): array\n    {\n        $csv = new SplFileObject($this->filePath);\n        $csv->setFlags(\n            SplFileObject::READ_CSV |\n            SplFileObject::SKIP_EMPTY |\n            SplFileObject::DROP_NEW_LINE\n        );\n        $result = [];\n\n        foreach ($csv as $row) {\n            // Skip empty lines / EOF\n            if ($row === [null]) {\n                continue;\n            }\n\n            $result[] = $row;\n\n            // Stop after header + N rows\n            if (count($result) === $rows + 1) {\n                break;\n            }\n        }\n\n        // Reset pointer for later use\n        $csv->rewind();\n        $this->cleanup();\n\n        return $result;\n    }\n\n    /**\n     * Return headers for columns that have no empty values in any row\n     */\n    protected function getFullyFilledColumnHeaders(SplFileObject $csv): array\n    {\n        $headers = null;\n        $hasEmpty = [];\n\n        foreach ($csv as $row) {\n            // Skip empty lines / EOF\n            if ($row === [null] || $row === false) {\n                continue;\n            }\n\n            // First non-empty row = headers\n            if ($headers === null) {\n                $headers = $row;\n                $hasEmpty = array_fill(0, count($headers), false);\n\n                continue;\n            }\n\n            foreach ($row as $index => $value) {\n                if (trim((string) $value) === '') {\n                    $hasEmpty[$index] = true;\n                }\n            }\n        }\n\n        // Reset pointer if needed later\n        $csv->rewind();\n\n        if ($headers === null) {\n            return [];\n        }\n\n        $result = [];\n\n        foreach ($headers as $index => $header) {\n            if ($hasEmpty[$index] === false) {\n                $result[] = $header;\n            }\n        }\n\n        return $result;\n    }\n\n    public function validate(): void\n    {\n        $csv = new SplFileObject($this->filePath);\n        $csv->setFlags(\n            SplFileObject::READ_CSV |\n            SplFileObject::SKIP_EMPTY |\n            SplFileObject::DROP_NEW_LINE\n        );\n\n        $validHeaders = $this->getFullyFilledColumnHeaders($csv);\n\n        if (empty($validHeaders)) {\n            $this->cleanup();\n            throw new RuntimeException(\n                __('campaigns/import.csv.validation_error')\n            );\n        }\n\n        $config = $this->job->config;\n        $config['filled_columns'] = $validHeaders;\n\n        $this->job->status_id = CampaignImportStatus::READY;\n        $this->job->config = $config;\n        $this->job->save();\n\n        $this->user->notify(new Header('campaign.import.csv_ready', 'upload', 'info',\n            [\n                'campaign' => $this->campaign->name,\n                'link' => route('campaign.import.csv', ['campaign' => $this->campaign, 'campaign_import' => $this->job]),\n            ]));\n        $this->cleanup();\n\n    }\n}\n"
  },
  {
    "path": "app/Services/DashboardService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\UserCache;\nuse App\\Models\\CampaignDashboard;\nuse App\\Models\\CampaignDashboardRole;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\n\nclass DashboardService\n{\n    use CampaignAware;\n    use RequestAware;\n    use UserAware;\n\n    // IDs of entities displayed\n    protected array $displayedEntities = [];\n\n    protected CampaignDashboard $dashboard;\n\n    public function dashboard(CampaignDashboard $dashboard): self\n    {\n        $this->dashboard = $dashboard;\n\n        return $this;\n    }\n\n    /**\n     * Get the current or default dashboard for the user\n     */\n    public function getDashboard(?int $dashboard = null): ?CampaignDashboard\n    {\n        // Only available for boosted campaigns\n        if (! $this->campaign->boosted()) {\n            return null;\n        }\n\n        // If the campaign has no dashboards, just stop\n        $available = $this->availableDashboards();\n        if (empty($available)) {\n            return null;\n        }\n\n        // No dashboard given, let's see what the user can access\n        if (empty($dashboard)) {\n            return $this->defaultDashboard($available);\n        }\n\n        // Dashboard given, make sure the user has access\n\n        return $this->validateDashboard($available, $dashboard);\n    }\n\n    /**\n     * Get the available dashboards for the user\n     *\n     * @return array[]|CampaignDashboard[]\n     */\n    public function getDashboards(): array\n    {\n        // Only available for boosted campaigns\n        if (! $this->campaign->boosted()) {\n            return [];\n        }\n\n        $available = $this->availableDashboards();\n        $dashboards = [];\n\n        if (! isset($this->user) || ! $this->user->can('member', $this->campaign)) {\n            foreach ($available['public'] as $role) {\n                $dashboards[] = $role->dashboard;\n            }\n\n            return $dashboards;\n        }\n\n        // Admin?\n        if ($this->user->isAdmin()) {\n            foreach ($available['admin'] as $role) {\n                $dashboards[] = $role->dashboard;\n            }\n\n            return $dashboards;\n        }\n\n        // Member of the campaign, check dashboards for roles of them\n        $roles = UserCache::roles();\n        $dashboards = [];\n        foreach ($roles as $role) {\n            $key = 'role_' . $role['id'];\n            if (! isset($available[$key])) {\n                continue;\n            }\n            foreach ($available[$key] as $r) {\n                $dashboards[] = $r->dashboard;\n            }\n        }\n\n        return $dashboards;\n    }\n\n    public function add(Entity $entity): self\n    {\n        $this->displayedEntities[] = $entity->id;\n\n        return $this;\n    }\n\n    public function excluding(): array\n    {\n        return $this->displayedEntities;\n    }\n\n    /**\n     * Create a dashboard and it's permissions\n     */\n    public function create(): CampaignDashboard\n    {\n        $this\n            ->createDashboard()\n            ->roles()\n            ->copy();\n\n        return $this->dashboard;\n    }\n\n    protected function createDashboard(): self\n    {\n        $this->dashboard = CampaignDashboard::create([\n            'campaign_id' => $this->campaign->id,\n            'created_by' => $this->user->id,\n            'name' => $this->request->post('name'),\n        ]);\n\n        return $this;\n    }\n\n    protected function roles(): self\n    {\n        // Loop through the permissions\n        $roles = (array) $this->request->post('roles');\n        foreach ($roles as $roleId => $setting) {\n            if (empty($setting)) {\n                continue;\n            }\n\n            // Validate the role\n            /** @var ?CampaignRole $role */\n            $role = $this->campaign->roles()->where('id', $roleId)->first();\n            if (empty($role)) {\n                continue;\n            }\n\n            $dashboardRole = CampaignDashboardRole::create([\n                'campaign_dashboard_id' => $this->dashboard->id,\n                'campaign_role_id' => $role->id,\n                'is_visible' => true,\n                'is_default' => $setting == 'default',\n            ]);\n        }\n\n        return $this;\n    }\n\n    protected function copy(): self\n    {\n        if (! $this->request->filled('copy_widgets')) {\n            return $this;\n        }\n        $sourceId = $this->request->post('source');\n        /** @var ?CampaignDashboard $source */\n        $source = CampaignDashboard::find($sourceId);\n        if (empty($source)) {\n            return $this;\n        }\n        /** @var CampaignDashboardWidget $widget */\n        foreach ($source->widgets()->with('dashboardWidgetTags')->get() as $widget) {\n            $widget->copyTo($this->dashboard);\n        }\n\n        return $this;\n    }\n\n    /**\n     * @throws \\Exception\n     */\n    public function update(): CampaignDashboard\n    {\n        $this->dashboard->update([\n            'name' => $this->request->post('name'),\n        ]);\n\n        // Existing roles\n        $roles = [];\n        foreach ($this->dashboard->roles as $role) {\n            $roles[$role->id] = $role;\n        }\n\n        // Loop through the permissions\n        $rolesForm = (array) $this->request->post('roles');\n        foreach ($rolesForm as $roleId => $setting) {\n            if (empty($setting)) {\n                continue;\n            }\n\n            // Validate the role\n            /** @var ?CampaignRole $role */\n            $role = $this->campaign->roles()->where('id', $roleId)->first();\n            if (empty($role)) {\n                continue;\n            }\n\n            if (isset($roles[$roleId])) {\n                $role = $roles[$roleId];\n                $role->update([\n                    'is_default' => $setting == 'default',\n                ]);\n                unset($roles[$roleId]);\n            } else {\n                // New\n                $dashboardRole = CampaignDashboardRole::create([\n                    'campaign_dashboard_id' => $this->dashboard->id,\n                    'campaign_role_id' => $role->id,\n                    'is_visible' => true,\n                    'is_default' => $setting == 'default',\n                ]);\n            }\n        }\n\n        // Delete any leftover roles that weren't updates\n        foreach ($roles as $role) {\n            $role->delete();\n        }\n\n        return $this->dashboard;\n    }\n\n    /**\n     * Get the default dashboards for the various roles\n     */\n    protected function availableDashboards(): array\n    {\n        return CampaignCache::campaign($this->campaign)->dashboards();\n    }\n\n    /**\n     * Get the default dashboard of a user\n     */\n    protected function defaultDashboard(array $available)\n    {\n        // Unlogged or not a member\n        if (! isset($this->user) || ! $this->user->can('member', $this->campaign)) {\n            foreach ($available['public'] as $role) {\n                if ($role->is_default) {\n                    return $role->dashboard;\n                }\n            }\n\n            return null;\n        }\n\n        // Admin?\n        if ($this->user->isAdmin()) {\n            foreach ($available['admin'] as $role) {\n                if ($role->is_default) {\n                    return $role->dashboard;\n                }\n            }\n\n            return null;\n        }\n\n        // Member of the campaign, check dashboards for roles of them\n        $roles = UserCache::roles();\n        foreach ($roles as $role) {\n            $key = 'role_' . $role['id'];\n            if (! isset($available[$key])) {\n                continue;\n            }\n            foreach ($available[$key] as $r) {\n                if ($r->is_default) {\n                    return $r->dashboard;\n                }\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Validate that a requested dashboard is available to the user\n     *\n     * @return null|CampaignDashboard\n     */\n    protected function validateDashboard(array $available, int $dashboard)\n    {\n        $filtered = false;\n        if (! isset($this->user) || ! $this->user->can('member', $this->campaign)) {\n            $filtered = $available['public'];\n        } elseif ($this->user) {\n            $filtered = $available['admin'];\n        }\n\n        if ($filtered !== false) {\n            foreach ($filtered as $role) {\n                if ($role->campaign_dashboard_id == $dashboard) {\n                    return $role->dashboard;\n                }\n            }\n\n            return null;\n        }\n\n        $roles = UserCache::roles();\n        foreach ($roles as $role) {\n            $key = 'role_' . $role['id'];\n            if (empty($available[$key])) {\n                continue;\n            }\n            foreach ($available[$key] as $r) {\n                if ($r->campaign_dashboard_id == $dashboard) {\n                    return $r->dashboard;\n                }\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/Services/Dashboards/GettingStartedService.php",
    "content": "<?php\n\nnamespace App\\Services\\Dashboards;\n\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Arr;\n\nclass GettingStartedService\n{\n    use CampaignAware;\n\n    protected array $tasks;\n\n    public function tasks(): array\n    {\n        $this->tasks = [];\n\n        $this->start()\n            ->rename()\n            ->character()\n            ->location()\n            ->invite()\n            ->widgets();\n\n        return $this->tasks;\n    }\n\n    protected function start(): self\n    {\n        $this->track(\n            'campaign',\n            true\n        );\n\n        return $this;\n    }\n\n    protected function rename(): self\n    {\n        $completed = true;\n        $originalName = Arr::get($this->campaign->settings, 'default-name');\n        if (! empty($originalName) && $originalName === $this->campaign->name) {\n            $completed = false;\n        }\n        $this->track(\n            'rename',\n            $completed,\n            route('campaigns.edit', [$this->campaign, 'from' => 'onboarding'])\n        );\n\n        return $this;\n    }\n\n    protected function character(): self\n    {\n        $completed = $this->campaign\n            ->entities()\n            ->where('type_id', config('entities.ids.character'))\n            ->where('source', 'user')\n            ->count() > 0;\n        $this->track(\n            'character',\n            $completed,\n            route('characters.create', [$this->campaign, 'from' => 'onboarding'])\n        );\n\n        return $this;\n    }\n\n    protected function location(): self\n    {\n        $completed = $this->campaign\n            ->entities()\n            ->where('type_id', config('entities.ids.location'))\n            ->where('source', 'user')\n            ->count() > 0;\n        $this->track(\n            'location',\n            $completed,\n            route('locations.create', [$this->campaign, 'from' => 'onboarding'])\n        );\n\n        return $this;\n    }\n\n    protected function invite(): self\n    {\n        $completed = $this->campaign->invites()->count() > 0;\n        $this->track(\n            'invite',\n            $completed,\n            route('campaign_users.index', [$this->campaign, 'from' => 'onboarding'])\n        );\n\n        return $this;\n    }\n\n    protected function widgets(): self\n    {\n        $completed = $this->campaign\n            ->widgets()\n            ->where('created_at', '>', $this->campaign->created_at->addSeconds(10))\n            ->count() > 0;\n        $this->track(\n            'widgets',\n            $completed,\n            route('dashboard.setup', [$this->campaign, 'from' => 'onboarding'])\n        );\n\n        return $this;\n    }\n\n    protected function track(string $key, bool $completed, ?string $url = null)\n    {\n        $this->tasks[] = [\n            'name' => __('dashboards/widgets/onboarding.tasks.' . $key . '.name'),\n            'helper' => __('dashboards/widgets/onboarding.tasks.' . $key . '.helper'),\n            'completed' => $completed,\n            'url' => $url ?? null,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/DiceRollerService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\DiceRoll;\nuse DiceCalc\\Calc;\n\nclass DiceRollerService\n{\n    public function roll(DiceRoll $diceRoll)\n    {\n        // Switch character attributes with the values\n        $query = mb_strtolower($diceRoll->parameters);\n\n        $attributes = [];\n        if ($diceRoll->character) {\n            foreach ($diceRoll->character->entity->attributes as $attribute) {\n                $attributes[mb_strtolower('{character.' . $attribute->name . '}')] = $attribute->value;\n            }\n        }\n        preg_match_all(\"/\\{(.*?)\\}/\", $query, $matches);\n        foreach ($matches[0] as $match) {\n            $match = mb_strtolower($match);\n            if (isset($attributes[$match])) {\n                $query = str_replace($match, $attributes[$match], $query);\n            }\n        }\n\n        $query = str_replace('+-', '-', $query);\n\n        $calc = new Calc($query);\n\n        return $calc();\n    }\n}\n"
  },
  {
    "path": "app/Services/Discord/NotificationService.php",
    "content": "<?php\n\nnamespace App\\Services\\Discord;\n\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\Http;\n\nclass NotificationService\n{\n    use UserAware;\n\n    protected ?string $webhook;\n\n    protected string $title;\n\n    protected string $content;\n\n    protected string $description;\n\n    protected string $url;\n\n    protected array $json;\n\n    public function title(string $title): self\n    {\n        $this->title = $title;\n\n        return $this;\n    }\n\n    public function content(string $content): self\n    {\n        $this->content = $content;\n\n        return $this;\n    }\n\n    public function description(string $description): self\n    {\n        $this->description = strip_tags($description);\n\n        return $this;\n    }\n\n    public function url(string $url): self\n    {\n        $this->url = $url;\n\n        return $this;\n    }\n\n    public function webhook(string $webhook): self\n    {\n        $this->webhook = $webhook;\n\n        return $this;\n    }\n\n    public function json(): ?array\n    {\n        return $this->json;\n    }\n\n    public function send(): self\n    {\n        $embeds = $this->embeds();\n\n        $response = Http::post($this->webhook . '?wait=true', [\n            'content' => $this->content,\n            'embeds' => [\n                $embeds,\n            ],\n            'wait' => true,\n        ]);\n\n        $this->json = $response->json();\n\n        return $this;\n    }\n\n    protected function embeds(): array\n    {\n        $embeds = [\n            'title' => $this->title,\n            'color' => config('discord.color'),\n        ];\n\n        if (isset($this->url)) {\n            $embeds['url'] = $this->url;\n        }\n        if (isset($this->description)) {\n            $embeds['description'] = $this->description;\n        }\n\n        if (isset($this->user)) {\n            $embeds['author'] = [\n                'name' => $this->user->name,\n                'url' => route('users.profile', $this->user->id),\n                'icon_url' => $this->user->hasAvatar() ? $this->user->getAvatarUrl() : null,\n            ];\n        }\n\n        return $embeds;\n    }\n}\n"
  },
  {
    "path": "app/Services/DiscordService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\User;\nuse App\\Models\\UserApp;\nuse Carbon\\Carbon;\nuse Exception;\nuse GuzzleHttp\\Client;\nuse Illuminate\\Support\\Facades\\Log;\n\n/**\n * Class DiscordService\n *\n * To set up your discord bot, access the following:\n * https://discord.com/api/oauth2/authorize?client_id=<DISCORD_ID>&scope=bot&permissions=268443657\n */\nclass DiscordService\n{\n    protected User $user;\n\n    /** @var UserApp|null */\n    protected $app;\n\n    protected string $url = 'https://discord.com/api/v10/';\n\n    protected $me;\n\n    protected array $logs = [];\n\n    protected array $ids = [];\n\n    public function ids(): array\n    {\n        return $this->ids;\n    }\n\n    public function user(User $user): self\n    {\n        $this->user = $user;\n        $this->app = $user->apps()->app('discord')->first();\n\n        return $this;\n    }\n\n    public function app(UserApp $app): self\n    {\n        $this->app = $app;\n        $this->user = $app->user;\n\n        return $this;\n    }\n\n    public function validate(string $code): self\n    {\n        $body = [\n            'client_id' => config('discord.client_id'),\n            'client_secret' => config('discord.client_secret'),\n            'grant_type' => 'authorization_code',\n            'code' => $code,\n            'redirect_uri' => url('/settings/discord-callback'),\n            'scope' => 'identify guilds guilds.join',\n        ];\n        $headers = [\n            'Content-Type' => 'application/x-www-form-urlencoded',\n        ];\n\n        $content = $this->post('oauth2/token', $body, $headers);\n        $this->saveUserApp($content);\n\n        return $this;\n    }\n\n    /**\n     * Add the user to the server.\n     * We don't need to worry about re-adding a user twice, Discord's api will provide\n     * a success message back with the info.\n     */\n    public function addServer(): self\n    {\n        $me = $this->me();\n\n        $headers = [\n            'Authorization' => 'Bot ' . config('discord.bot_token'),\n            'Content-Type' => 'application/json',\n        ];\n        $body = [\n            'access_token' => $this->app->access_token,\n        ];\n        $this->call('put', 'guilds/' . config('discord.channel_id') . '/members/' . $me->id, $body, $headers);\n\n        return $this;\n    }\n\n    public function me()\n    {\n        // Cache the response during a single process\n        if (isset($this->me)) {\n            return $this->me;\n        }\n\n        $this->refresh();\n        $client = new Client;\n        $url = $this->url . 'users/@me';\n        $headers = [\n            'Authorization' => 'Bearer ' . $this->app->access_token,\n        ];\n\n        $response = $client->get($url, ['headers' => $headers]);\n        $this->me = json_decode($response->getBody());\n\n        return $this->me;\n    }\n\n    /**\n     * Save the user app\n     *\n     * @param  object  $data\n     */\n    protected function saveUserApp($data): self\n    {\n        if (! $this->app) {\n            $this->app = new UserApp([\n                'user_id' => $this->user->id,\n                'app' => 'discord',\n            ]);\n        }\n\n        $this->app->access_token = $data->access_token;\n        $this->app->refresh_token = $data->refresh_token;\n        $this->app->expires_at = Carbon::now()->addSeconds($data->expires_in);\n        $this->app->save();\n\n        // Get me for data\n        $me = $this->me();\n        $this->app->settings = ['username' => $me->username];\n        $this->app->save();\n\n        return $this;\n    }\n\n    /**\n     * Refresh the user's access token\n     */\n    public function refresh(): self\n    {\n        // Don't refresh a valid token\n        if (! $this->app->expires_at->isPast()) {\n            return $this;\n        }\n        $body = [\n            'client_id' => config('discord.client_id'),\n            'client_secret' => config('discord.client_secret'),\n            'grant_type' => 'refresh_token',\n            'refresh_token' => $this->app->refresh_token,\n            'redirect_uri' => url('/settings/discord-callback'),\n            'scope' => 'identify guilds guilds.join',\n        ];\n        $content = $this->post('oauth2/token', $body);\n        $this->saveUserApp($content);\n\n        $log = 'Renewed user #' . $this->user->id . ' Discord auth token.';\n        $this->logs[] = $log;\n\n        // Clear the cached Discord user\n        unset($this->me);\n\n        return $this;\n    }\n\n    /**\n     * Add the user to the discord roles\n     */\n    public function addRoles(): self\n    {\n        // Don't add roles if the user isn't connected\n        if (empty($this->app)) {\n            $this->logs[] = 'User isn\\'t synced with Discord';\n\n            return $this;\n        }\n\n        // Only add roles if the user is a subscriber\n        if (! $this->user->subscribed('kanka')) {\n            $this->logs[] = 'User isn\\'t subbed to Kanka';\n\n            return $this;\n        }\n\n        $me = $this->me();\n\n        $headers = [\n            'Authorization' => 'Bot ' . config('discord.bot_token'),\n            'Content-Type' => 'application/json',\n        ];\n        $body = [\n            'access_token' => $this->app->access_token,\n        ];\n\n        $roles = [\n            config('discord.roles.' . ($this->user->isElemental() ? 'elemental' : ($this->user->isWyvern() ? 'wyvern' : 'owlbear'))),\n        ];\n\n        foreach ($roles as $id) {\n            $url = 'guilds/' . config('discord.channel_id') . '/members/' . $me->id . '/roles/' . $id;\n            $this->logs[] = $this->call('put', $url, $body, $headers);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Remove all bonus discord roles for the user\n     */\n    public function removeRoles(): self\n    {\n        // Don't remove if the user is already disconnected\n        if (empty($this->app)) {\n            return $this;\n        }\n\n        $me = $this->me();\n\n        $headers = [\n            'Authorization' => 'Bot ' . config('discord.bot_token'),\n            'Content-Type' => 'application/json',\n        ];\n        $body = [\n            'access_token' => $this->app->access_token,\n        ];\n\n        try {\n            foreach (config('discord.roles') as $id) {\n                $url = 'guilds/' . config('discord.channel_id') . '/members/' . $me->id . '/roles/' . $id;\n                $this->call('delete', $url, $body, $headers);\n            }\n        } catch (Exception $e) {\n            Log::warning('Couldn\\'t delete role for user');\n        }\n\n        return $this;\n    }\n\n    /**\n     * Remove a user's discord integration\n     *\n     * @throws Exception\n     */\n    public function remove(): self\n    {\n        // Don't remove if the user is already disconnected\n        if (empty($this->app)) {\n            return $this;\n        }\n\n        // Remove any roles the user might have had\n        try {\n            $this->removeRoles();\n        } catch (Exception $e) {\n        }\n\n        // Delete the discord app\n        $this->app->delete();\n\n        return $this;\n    }\n\n    /**\n     * Make a post request on the discord api\n     */\n    protected function post(string $api, array $body = [], ?array $headers = null)\n    {\n        $client = new Client;\n        if ($headers === null) {\n            $headers = [\n                'Content-Type' => 'application/x-www-form-urlencoded',\n            ];\n        }\n\n        $url = $this->url . mb_ltrim($api, '/');\n        $response = $client->post($url, ['form_params' => $body, 'headers' => $headers]);\n\n        return json_decode($response->getBody());\n    }\n\n    /**\n     * @param  string  $action  post, get, put, delete\n     */\n    protected function call(string $action, string $api, array $body = [], ?array $headers = null)\n    {\n        $client = new Client;\n        if ($headers === null) {\n            $headers = [\n                'Content-Type' => 'application/x-www-form-urlencoded',\n            ];\n        }\n\n        $url = $this->url . mb_ltrim($api, '/');\n\n        if ($action === 'put') {\n            $response = $client->{$action}($url, ['json' => $body, 'headers' => $headers]);\n        } else {\n            $response = $client->{$action}($url, ['form_params' => $body, 'headers' => $headers]);\n        }\n\n        return json_decode($response->getBody());\n    }\n\n    public function logs(): array\n    {\n        return $this->logs;\n    }\n}\n"
  },
  {
    "path": "app/Services/DomainService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Traits\\RequestAware;\n\nclass DomainService\n{\n    use RequestAware;\n\n    /**\n     * Check if the request is for the app/backend\n     */\n    public function isApp(): bool\n    {\n        return $this->request->host() === $this->app();\n    }\n\n    /**\n     * Check if the request is for the api\n     */\n    public function isApi(): bool\n    {\n        return $this->request->is('api/*') || $this->request->host() === $this->api();\n    }\n\n    /**\n     * Check if the request is for the frontend\n     */\n    public function isFront(): bool\n    {\n        return $this->request->host() === $this->front();\n    }\n\n    public function app(): string\n    {\n        return config('domains.app');\n    }\n\n    public function front(): string\n    {\n        return config('domains.front');\n    }\n\n    public function api(): string\n    {\n        return config('domains.api');\n    }\n\n    public function importer(): string\n    {\n        return config('domains.importer');\n    }\n\n    public function toFront(string $page): string\n    {\n        return '//' . $this->front() . '/' . $page;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/AliasService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Enums\\Visibility;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\RequestAware;\n\nclass AliasService\n{\n    use EntityAware;\n    use RequestAware;\n\n    /**\n     * Save aliases submitted from the entity create/edit form.\n     *\n     * Reads the `aliases` JSON field from the request. Each item has shape:\n     *   { id: int, name: string, visibility: string }\n     *\n     * Negative IDs indicate new aliases; positive IDs are existing ones.\n     * Because EntityAsset uses VisibilityIDScope, admin-only aliases are\n     * invisible to non-admin users — the scope automatically protects them\n     * from being accidentally deleted or modified.\n     */\n    public function save(): void\n    {\n        $aliases = json_decode($this->request->input('aliases', '[]'), true) ?? [];\n\n        $this->saveAliases($aliases);\n    }\n\n    /**\n     * @param  array<int, array{id: int|string, name: string, visibility: string}>  $aliases\n     */\n    private function saveAliases(array $aliases): void\n    {\n        $submittedIds = collect($aliases)\n            ->filter(fn (array $a): bool => (int) $a['id'] > 0)\n            ->pluck('id')\n            ->map(fn ($id): int => (int) $id)\n            ->all();\n\n        // Delete visible aliases that the user removed from the list.\n        // VisibilityIDScope ensures admin-only aliases are excluded here,\n        // so they are never deleted by non-admin users.\n        $this->entity->aliases()\n            ->whereNotIn('id', $submittedIds)\n            ->delete();\n\n        foreach ($aliases as $data) {\n            $id = (int) $data['id'];\n            $name = $data['name'];\n            $visibility = $this->visibilityFromString($data['visibility'] ?? 'all');\n\n            if ($id <= 0) {\n                $this->entity->assets()->create([\n                    'type_id' => EntityAssetType::alias,\n                    'name' => $name,\n                    'visibility_id' => $visibility,\n                ]);\n            } else {\n                // VisibilityIDScope prevents non-admin users from updating\n                // aliases they cannot see.\n                $this->entity->aliases()\n                    ->where('id', $id)\n                    ->update([\n                        'name' => $name,\n                        'visibility_id' => $visibility,\n                    ]);\n            }\n        }\n    }\n\n    private function visibilityFromString(string $visibility): Visibility\n    {\n        return match ($visibility) {\n            'admin' => Visibility::Admin,\n            'admin-self' => Visibility::AdminSelf,\n            'self' => Visibility::Self,\n            'members' => Visibility::Member,\n            default => Visibility::All,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/ArchiveService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Traits\\EntityAware;\nuse Carbon\\Carbon;\n\nclass ArchiveService\n{\n    use EntityAware;\n\n    public function toggle(): void\n    {\n        // If archived, unarchive and vice versa\n        if (isset($this->entity->archived_at)) {\n            $this->entity->archived_at = null;\n        } else {\n            $this->entity->archived_at = Carbon::now();\n        }\n\n        $this->entity->save();\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/ColumnDefinitionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CategoryStatus;\nuse App\\Models\\EntityType;\nuse Illuminate\\Support\\Str;\n\nclass ColumnDefinitionService\n{\n    /** @var array<int, array<int, CategoryStatus>> */\n    protected array $statusCache = [];\n\n    public function columns(EntityType $entityType, Campaign $campaign): array\n    {\n        $method = Str::camel($entityType->code);\n        if (method_exists($this, $method)) {\n            $columns = $this->{$method}();\n        } else {\n            $columns = $this->defaultColumns();\n        }\n\n        // Inject dynamic status column if the entity type has statuses\n        $statusColumn = $this->statusColumn($entityType);\n        if ($statusColumn) {\n            $tagsIndex = array_search('tags', array_column($columns, 'key'));\n            if ($tagsIndex !== false) {\n                array_splice($columns, $tagsIndex, 0, [$statusColumn]);\n            } else {\n                $columns[] = $statusColumn;\n            }\n        }\n\n        return $this->filterByModules($columns, $campaign);\n    }\n\n    /**\n     * @return string[] Sort keys for all sortable columns\n     */\n    public function sortableFields(EntityType $entityType, Campaign $campaign): array\n    {\n        $columns = $this->columns($entityType, $campaign);\n\n        return array_values(array_filter(array_map(\n            fn (array $col) => $col['sortable'] ? ($col['sortKey'] ?? $col['key']) : null,\n            $columns\n        )));\n    }\n\n    public function defaultVisibleColumns(EntityType $entityType, Campaign $campaign): array\n    {\n        $columns = $this->columns($entityType, $campaign);\n\n        return array_values(array_map(\n            fn (array $col) => $col['key'],\n            array_filter($columns, fn (array $col) => ! ($col['adminOnly'] ?? false))\n        ));\n    }\n\n    public function relationMap(EntityType $entityType, Campaign $campaign): array\n    {\n        $map = ['entityType', 'image', 'tags', 'parent', 'status'];\n\n        $typeRelations = $this->typeRelations();\n\n        foreach ($this->columns($entityType, $campaign) as $col) {\n            if (isset($typeRelations[$col['key']])) {\n                $map = array_merge($map, $typeRelations[$col['key']]);\n            }\n        }\n\n        return array_unique($map);\n    }\n\n    /**\n     * @return string[] Child model relation names that need withCount (e.g. ['members', 'elements'])\n     */\n    public function childCountRelations(EntityType $entityType, Campaign $campaign): array\n    {\n        $countColumns = [\n            'members_count' => 'members',\n            'elements_count' => 'elements',\n            'eras_count' => 'eras',\n            'entities_count' => 'entities',\n        ];\n\n        $needed = [];\n        foreach ($this->columns($entityType, $campaign) as $col) {\n            if (isset($countColumns[$col['key']])) {\n                $needed[] = $countColumns[$col['key']];\n            }\n        }\n\n        return $needed;\n    }\n\n    /**\n     * @return string[] Entity relation names that need withCount (e.g. ['attributes'])\n     */\n    public function entityCountRelations(EntityType $entityType, Campaign $campaign): array\n    {\n        $countColumns = [\n            'attributes_count' => 'attributes',\n        ];\n\n        $needed = [];\n        foreach ($this->columns($entityType, $campaign) as $col) {\n            if (isset($countColumns[$col['key']])) {\n                $needed[] = $countColumns[$col['key']];\n            }\n        }\n\n        return $needed;\n    }\n\n    protected function typeRelations(): array\n    {\n        return [\n            'families' => ['character.characterFamilies.family.entity'],\n            'races' => ['character.characterRaces.race.entity'],\n            'locations' => ['locations.entity'],\n            'location' => ['location.entity'],\n            'calendar_date' => ['calendarDate.calendar.entity'],\n            'author' => ['journal.author'],\n            'organisation' => ['organisation.entity'],\n            'character' => ['character.entity'],\n            'instigator' => ['quest.instigator'],\n            'creators' => ['item.itemCreators.creator'],\n            'entity_type_name' => ['attributeTemplate.entityType'],\n        ];\n    }\n\n    protected function statusColumn(EntityType $entityType): ?array\n    {\n        if (! isset($this->statusCache[$entityType->id])) {\n            $this->statusCache[$entityType->id] = CategoryStatus::where('category_id', $entityType->id)\n                ->orderBy('sort_order')\n                ->get()\n                ->all();\n        }\n\n        $statuses = $this->statusCache[$entityType->id];\n\n        if (empty($statuses)) {\n            return null;\n        }\n\n        $icons = [];\n        foreach ($statuses as $status) {\n            if (empty($status->icon)) {\n                continue;\n            }\n            $icons[$status->id] = [\n                'icon' => $status->icon(),\n                'tooltip' => $status->setRelation('entityType', $entityType)->name(),\n            ];\n        }\n\n        if (empty($icons)) {\n            return null;\n        }\n\n        return [\n            'key' => 'status',\n            'type' => 'icon',\n            'label' => __('entities.status'),\n            'sortable' => true,\n            'sortKey' => 'status_id',\n            'icons' => $icons,\n        ];\n    }\n\n    protected function filterByModules(array $columns, Campaign $campaign): array\n    {\n        return array_values(array_filter($columns, function (array $col) use ($campaign) {\n            if (! empty($col['moduleGate'])) {\n                return $campaign->enabled($col['moduleGate']);\n            }\n\n            return true;\n        }));\n    }\n\n    // --- Entity type column definitions ---\n\n    protected function defaultColumns(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function character(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'title', 'type' => 'text', 'label' => __('characters.fields.title'), 'sortable' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'families', 'type' => 'entities', 'label' => __('entities.families'), 'sortable' => false, 'moduleGate' => 'families'],\n            ['key' => 'locations', 'type' => 'entities', 'label' => __('entities.locations'), 'sortable' => false, 'moduleGate' => 'locations'],\n            ['key' => 'races', 'type' => 'entities', 'label' => __('entities.races'), 'sortable' => false, 'moduleGate' => 'races'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'sex', 'type' => 'text', 'label' => __('characters.fields.sex'), 'sortable' => true],\n            ['key' => 'pronouns', 'type' => 'text', 'label' => __('characters.fields.pronouns'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function location(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'title', 'type' => 'text', 'label' => __('locations.fields.title'), 'sortable' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function organisation(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'locations', 'type' => 'entities', 'label' => __('entities.locations'), 'sortable' => false, 'moduleGate' => 'locations'],\n            ['key' => 'members_count', 'type' => 'count', 'label' => __('organisations.fields.members'), 'sortable' => false, 'moduleGate' => 'characters'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function family(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'location', 'type' => 'entity', 'label' => __('entities.location'), 'sortable' => true, 'sortKey' => 'location.name', 'moduleGate' => 'locations'],\n            ['key' => 'members_count', 'type' => 'count', 'label' => __('organisations.fields.members'), 'sortable' => false],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function journal(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'location', 'type' => 'entity', 'label' => __('entities.location'), 'sortable' => true, 'sortKey' => 'location.name', 'moduleGate' => 'locations'],\n            ['key' => 'date', 'type' => 'text', 'label' => __('journals.fields.date'), 'sortable' => true],\n            ['key' => 'calendar_date', 'type' => 'calendar_date', 'label' => __('crud.fields.calendar_date'), 'sortable' => true],\n            ['key' => 'author', 'type' => 'entity', 'label' => __('journals.fields.author'), 'sortable' => true, 'sortKey' => 'author.name'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function quest(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'instigator', 'type' => 'entity', 'label' => __('quests.fields.instigator'), 'sortable' => false],\n            ['key' => 'locations', 'type' => 'entities', 'label' => __('entities.locations'), 'sortable' => false, 'moduleGate' => 'locations'],\n            ['key' => 'elements_count', 'type' => 'count', 'label' => __('quests.show.tabs.elements'), 'sortable' => false],\n            ['key' => 'date', 'type' => 'text', 'label' => __('journals.fields.date'), 'sortable' => true],\n            ['key' => 'calendar_date', 'type' => 'calendar_date', 'label' => __('crud.fields.calendar_date'), 'sortable' => true],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function calendar(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function map(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'explore', 'type' => 'explore', 'label' => __('maps.actions.explore'), 'sortable' => false],\n            ['key' => 'location', 'type' => 'entity', 'label' => __('entities.location'), 'sortable' => true, 'sortKey' => 'location.name', 'moduleGate' => 'locations'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function whiteboard(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'draw', 'type' => 'draw', 'label' => __('whiteboards.actions.draw'), 'sortable' => false],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function timeline(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'eras_count', 'type' => 'count', 'label' => __('timelines.fields.eras'), 'sortable' => false],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function race(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function creature(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'locations', 'type' => 'entities', 'label' => __('entities.locations'), 'sortable' => false, 'moduleGate' => 'locations'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function item(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'price', 'type' => 'text', 'label' => __('items.fields.price'), 'sortable' => true],\n            ['key' => 'size', 'type' => 'text', 'label' => __('items.fields.size'), 'sortable' => true],\n            ['key' => 'weight', 'type' => 'text', 'label' => __('items.fields.weight'), 'sortable' => true],\n            ['key' => 'location', 'type' => 'entity', 'label' => __('entities.location'), 'sortable' => true, 'sortKey' => 'location.name', 'moduleGate' => 'locations'],\n            ['key' => 'creators', 'type' => 'entities', 'label' => __('items.fields.creators'), 'sortable' => false],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function event(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'date', 'type' => 'text', 'label' => __('events.fields.date'), 'sortable' => true],\n            ['key' => 'locations', 'type' => 'entities', 'label' => __('entities.locations'), 'sortable' => false, 'moduleGate' => 'locations'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function note(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function ability(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'entities_count', 'type' => 'count', 'label' => __('entities.entries'), 'sortable' => false],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function attributeTemplate(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'entity_type_name', 'type' => 'text', 'label' => __('attribute_templates.fields.auto_apply'), 'sortable' => false],\n            ['key' => 'is_enabled', 'type' => 'icon', 'label' => __('attribute_templates.fields.is_enabled'), 'sortable' => true, 'icon' => 'fa-regular fa-wand-magic', 'tooltip' => __('attribute_templates.fields.is_enabled')],\n            ['key' => 'attributes_count', 'type' => 'count', 'label' => __('entities.properties'), 'sortable' => false],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function diceRoll(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'character', 'type' => 'entity', 'label' => __('entities.character'), 'sortable' => true, 'sortKey' => 'character.name', 'moduleGate' => 'characters'],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n\n    protected function tag(): array\n    {\n        return [\n            ['key' => 'avatar', 'type' => 'avatar', 'sortable' => false, 'alwaysVisible' => true],\n            ['key' => 'name', 'type' => 'name', 'label' => __('crud.fields.name'), 'sortable' => true, 'alwaysVisible' => true],\n            ['key' => 'type', 'type' => 'text', 'label' => __('crud.fields.type'), 'sortable' => true],\n            ['key' => 'parent', 'type' => 'entity', 'label' => __('crud.fields.parent'), 'sortable' => true, 'sortKey' => 'parent.name'],\n            ['key' => 'colour', 'type' => 'text', 'label' => __('crud.fields.colour'), 'sortable' => true],\n            ['key' => 'entities_count', 'type' => 'count', 'label' => __('tags.fields.children'), 'sortable' => false],\n            ['key' => 'is_auto_applied', 'type' => 'icon', 'label' => __('attribute_templates.fields.auto_apply'), 'sortable' => true, 'icon' => 'fa-regular fa-wand-magic', 'tooltip' => __('tags.fields.is_auto_applied')],\n            ['key' => 'is_hidden', 'type' => 'icon', 'label' => __('campaigns.privacy.hidden'), 'sortable' => true, 'icon' => 'fa-regular fa-eye-slash', 'tooltip' => __('tags.fields.is_hidden')],\n            ['key' => 'tags', 'type' => 'tags', 'label' => __('entities.tags'), 'sortable' => true],\n            ['key' => 'is_private', 'type' => 'private', 'label' => __('crud.fields.is_private'), 'sortable' => true, 'adminOnly' => true],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Connections/MapService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Connections;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Module;\nuse App\\Models\\Character;\nuse App\\Models\\Conversation;\nuse App\\Models\\DiceRoll;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityMention;\nuse App\\Models\\Family;\nuse App\\Models\\Item;\nuse App\\Models\\Journal;\nuse App\\Models\\Location;\nuse App\\Models\\Map;\nuse App\\Models\\MapMarker;\nuse App\\Models\\Organisation;\nuse App\\Models\\OrganisationMember;\nuse App\\Models\\QuestElement;\nuse App\\Models\\Relation;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse Illuminate\\Support\\Arr;\n\nclass MapService\n{\n    use CampaignAware;\n    use EntityAware;\n\n    /** Entities */\n    protected array $entities = [];\n\n    /** Relations */\n    protected array $relations = [];\n\n    /** Loaded relation IDS */\n    protected array $relationIds = [];\n\n    /** Loaded org members to avoid things getting messy */\n    protected array $orgMembers = [];\n\n    /** @var array Mirrored IDs */\n    protected array $mirrors = [];\n\n    protected bool $family = false;\n\n    protected bool $organisation = false;\n\n    /** @var array Entities that have had their relations already loaded */\n    protected array $entityIds = [];\n\n    /** @var bool Enable or disable relations */\n    protected bool $withRelations = true;\n\n    /** @var bool Enable loading entities on relations */\n    protected bool $withEntity = false;\n\n    protected ?string $option = null;\n\n    public function option(?string $option = null): self\n    {\n        if (! in_array($option, ['related', 'mentions', 'only_relations'])) {\n            $option = null;\n        }\n        $this->option = $option;\n\n        return $this;\n    }\n\n    protected function family(bool $family = true): self\n    {\n        $this->family = $family;\n\n        return $this;\n    }\n\n    protected function organisation(bool $organisation = true): self\n    {\n        $this->organisation = $organisation;\n\n        return $this;\n    }\n\n    protected function withoutRelations(bool $without = true): self\n    {\n        $this->withRelations = ! $without;\n\n        return $this;\n    }\n\n    protected function withEntity(bool $with = true): self\n    {\n        $this->withEntity = $with;\n\n        return $this;\n    }\n\n    /**\n     * Check if there is a special init loop for the entity type, or use a generic fallback one instead.\n     */\n    public function map(): array\n    {\n        $entityHook = 'init' . ucfirst($this->entity->entityType->code);\n        if (method_exists($this, $entityHook)) {\n            $this->$entityHook();\n        } else {\n            // Other: just relations\n            $this->addEntity($this->entity)\n                ->withEntity();\n\n            $this->loadRelations();\n\n            if ($this->withRelated()) {\n                if ($this->entity->entityType->isStandard()) {\n                    $this->addParent()\n                        ->addLocation()\n                        ->addQuests()\n                        ->addAuthorJournals()\n                        ->addLocations();\n                } else {\n                    $this->addCustom();\n                }\n                $this->addMapMarkers();\n            }\n        }\n\n        $this->addMentions();\n\n        $this->cleanup();\n\n        return ['relations' => $this->relations, 'entities' => $this->entities];\n    }\n\n    /**\n     * Remove any relations that don't match up\n     */\n    protected function cleanup()\n    {\n        $relations = [];\n        foreach ($this->relations as $relation) {\n            if (\n                isset($this->entities[$relation['source']], $this->entities[$relation['target']])\n            ) {\n                $relations[] = $relation;\n            }\n        }\n\n        $this->relations = $relations;\n    }\n\n    /**\n     * Add an entity to the map, only loading its data if it hasn't been already into memory\n     */\n    protected function addEntity(Entity $entity, ?string $image = null): self\n    {\n        // dump('add entity ' . $entity->name);\n        if (Arr::has($this->entities, (string) $entity->id)) {\n            return $this;\n        }\n        // Make sure the child is accessible in case there is a permission mis-match\n        if ($entity->isMissingChild()) {\n            return $this;\n        }\n\n        $img = $image ?? Avatar::entity($entity)->size(192)->fallback()->thumbnail();\n        if (empty($img)) {\n            // Fallback?\n            $img = '';\n        }\n        $params = [$this->campaign, $entity->id, 'mode' => 'map'];\n        if ($this->option) {\n            $params['option'] = $this->option;\n        }\n        $this->entities[$entity->id] = [\n            'id' => $entity->id,\n            'name' => $entity->name . \"\\n(\" . $entity->entityType->name() . ')',\n            'image' => $img,\n            'link' => route('entities.relations.index', $params),\n            // 'tooltip' => route('entities.tooltip', $entity->id)\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add a relation model to the map\n     */\n    protected function addRelations(Entity $entity): self\n    {\n        // dump('add relations for ' . $entity->name);\n        if (Arr::has($this->entityIds, (string) $entity->id)) {\n            return $this;\n        }\n        $this->entityIds[$entity->id] = true;\n\n        // Get the relations directly from this entity\n        /** @var Relation[] $relations */\n        $relations = $entity->relationships()\n            ->select('relations.*')\n            ->with(['target', 'target.entityType', 'mirror', 'target.image'])\n            ->has('target')\n            ->leftJoin('entities as t', 't.id', '=', 'relations.target_id')\n            ->get();\n\n        foreach ($relations as $relation) {\n            if ($relation->target === null) {\n                continue;\n            }\n\n            // Don't add mirrored relations\n            if ($relation->isMirrored()) {\n                if (Arr::has($this->mirrors, $relation->mirror_id . '-' . $relation->id)) {\n                    continue;\n                }\n            }\n            // Relation already loaded\n            if (in_array($relation->id, $this->relationIds)) {\n                continue;\n            }\n\n            if ($this->withEntity) {\n                $this->addEntity($relation->target);\n            }\n\n            $this->relations[] = [\n                'source' => $relation->owner_id,\n                'target' => $relation->target_id,\n                'text' => $relation->relation,\n                'colour' => $relation->colour,\n                'attitude' => $relation->attitude,\n                'type' => 'entity-relation',\n                'is_mirrored' => $relation->isMirrored(),\n                'shape' => $relation->isMirrored() && $relation->mirror && $relation->relation == $relation->mirror->relation ? 'none' : 'triangle',\n                'edit_url' => route('entities.relations.edit', [\n                    'campaign' => $this->campaign,\n                    'entity' => $relation->owner_id,\n                    'relation' => $relation,\n                    'from' => $this->entity->id,\n                    'mode' => 'map',\n                    'option' => $this->option,\n                ]),\n            ];\n\n            if ($relation->isMirrored() && $relation->mirror && $relation->relation && $relation->relation == $relation->mirror->relation) {\n                $this->mirrors[$relation->id . '-' . $relation->mirror_id] = true;\n            }\n            $this->relationIds[] = $relation->id;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add an individual family. This only works for characters\n     */\n    protected function addFamily(): self\n    {\n        if (empty($this->entity->child->family)) {\n            return $this;\n        }\n\n        $family = $this->entity->child->family;\n\n        $this->addFamilyRelations($family);\n\n        // Add relation to the family\n        return $this;\n    }\n\n    /**\n     * Add the family or a character and the family's members\n     */\n    protected function addFamilyRelations(Family $family)\n    {\n        /** @var Family $family */\n        $this->family()->addEntity($family->entity)->addRelations($family->entity);\n\n        $this->addFamilyMembers($family);\n    }\n\n    /**\n     * Add the organisations of a character\n     */\n    protected function addOrganisation(): self\n    {\n        /** @var Character $character */\n        $character = $this->entity->child;\n        $organisations = $character->organisationMemberships()\n            ->has('organisation')\n            ->with(['organisation', 'organisation.entity', 'organisation.entity.image', 'organisation.entity.entityType'])\n            ->get();\n        foreach ($organisations as $org) {\n            if ($org->organisation !== null && $org->organisation->entity !== null) {\n                $this->addOrganisationRelations($org->organisation);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add the relations between character organisation members\n     */\n    protected function addOrganisationRelations(?Organisation $organisation = null)\n    {\n        if (empty($organisation) || $organisation->entity === null) {\n            return;\n        }\n        $this->organisation()->addEntity($organisation->entity);\n\n        /** @var OrganisationMember $member */\n        foreach ($organisation->members()->with(['character.entity', 'character.entity.image', 'character.entity.entityType'])->has('character.entity')->get() as $member) {\n            if (empty($member->character->entity)) {\n                return;\n            }\n            if (isset($this->orgMembers[$member->id])) {\n                continue;\n            }\n            $this->orgMembers[$member->id] = true;\n            $this->addEntity($member->character->entity, Avatar::entity($member->character->entity)->fallback()->size(192)->thumbnail());\n\n            // Add relation\n            $this->relations[] = [\n                'source' => $organisation->entity->id,\n                'target' => $member->character->entity->id,\n                'text' => $member->role,\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'org-member',\n                'shape' => 'none',\n            ];\n\n            // Show relations of org members if the target is shown here\n            $this->addRelations($member->character->entity);\n        }\n    }\n\n    /**\n     * Prepare a family\n     */\n    protected function initFamily(): self\n    {\n        $this->addEntity($this->entity)\n            ->withEntity()\n            ->loadRelations();\n\n        if ($this->withRelated()) {\n            /** @var Family $family */\n            $family = $this->entity->child;\n            $this->addFamilyMembers($family);\n\n            $this\n                ->addParent()\n                ->addLocation()\n                ->addQuests()\n                ->addMapMarkers()\n                ->addAuthorJournals();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Generate a map for a character\n     */\n    protected function initCharacter(): self\n    {\n        $this->addEntity($this->entity)\n            ->withEntity()\n            ->loadRelations();\n\n        if ($this->withRelated()) {\n            $this->addFamily()\n                ->addOrganisation()\n                ->addItems()\n                ->addAuthorJournals()\n                ->addEntityLocations()\n                ->addDiceRolls()\n                ->addConversations()\n                ->addMapMarkers()\n                ->addQuests();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Generate a map for a location\n     */\n    protected function initLocation(): self\n    {\n        $this->addEntity($this->entity)\n            ->withEntity()\n            ->loadRelations();\n\n        if ($this->withRelated()) {\n            $this->relatedRelations()\n                ->addItems()\n                ->addFamilies()\n                ->addJournals()\n                ->addOrganisations()\n                ->addParent()\n                ->addQuests()\n                ->addMapMarkers()\n                ->addMaps()\n                ->addAuthorJournals()\n                ->addRaces()\n                ->addLocationCreatures()\n                ->addEntities();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Generate a map for an organisation\n     */\n    protected function initOrganisation(): self\n    {\n        $this->addEntity($this->entity)\n            ->withEntity()\n            ->loadRelations();\n\n        if ($this->withRelated()) {\n            $this->addOrganisationMembers($this->entity);\n            $this\n                ->addParent()\n                ->addLocations()\n                ->addQuests()\n                ->addMapMarkers()\n                ->addAuthorJournals();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Generate a map for a map model\n     */\n    protected function initMap(): self\n    {\n        $this->addEntity($this->entity)\n            ->withEntity();\n\n        if ($this->withRelations()) {\n            $this->addRelations($this->entity);\n        }\n\n        if ($this->withRelated()) {\n            $this->addParent()\n                ->addLocation()\n                ->addQuests()\n                ->addMapMarkers()\n                ->addAuthorJournals();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add a family member. Note that characters can be in multiple families.\n     */\n    protected function addFamilyMembers(Family $family): self\n    {\n        /** @var Character $member */\n        foreach ($family->members()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $member) {\n            $this\n                ->addEntity($member->entity, Avatar::entity($member->entity)->fallback()->size(192)->thumbnail())\n                ->addRelations($member->entity);\n\n            // Add relation\n            $this->relations[] = [\n                'source' => $family->entity->id,\n                'target' => $member->entity->id,\n                'text' => __('entities/relations.types.family_member'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'family-member',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add related families\n     */\n    protected function addFamilies(): self\n    {\n        /** @var Location $family */\n        $family = $this->entity->child;\n\n        foreach ($family->families()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $subfamily) {\n            $this->addEntity($subfamily->entity);\n            $this->addRelations($subfamily->entity);\n\n            $this->relations[] = [\n                'source' => $subfamily->entity->id,\n                'target' => $this->entity->id,\n                'text' => Module::singular(config('entities.ids.family'), __('entities.family')),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'sub-family',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addOrganisationMembers(Entity $entity): self\n    {\n        /** @var Organisation $organisation */\n        $organisation = $entity->child;\n\n        /** @var OrganisationMember[] $members */\n        $members = $organisation->members()->with(['character', 'character.entity', 'character.entity.image', 'character.entity.entityType'])->has('character')->has('character.entity')->get();\n        foreach ($members as $member) {\n            $this\n                ->addEntity($member->character->entity, Avatar::entity($member->character->entity)->fallback()->size(192)->thumbnail())\n                ->addRelations($member->character->entity);\n\n            // Add relation\n            $this->relations[] = [\n                'source' => $entity->id,\n                'target' => $member->character->entity->id,\n                'text' => __('entities/relations.types.organisation_member'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'family-member',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addOrganisations(): self\n    {\n        /** @var Location $child */\n        $child = $this->entity->child;\n\n        foreach ($child->organisations()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $sub) {\n            $this->addEntity($sub->entity);\n            $this->addRelations($sub->entity);\n\n            $this->relations[] = [\n                'source' => $sub->entity->id,\n                'target' => $this->entity->id,\n                'text' => __('entities/relations.types.organisation_member'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'sub-org',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addItems(): self\n    {\n        /** @var Character|Location $parent */\n        $parent = $this->entity->child;\n        /** @var Item $item */\n        foreach ($parent->items()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $item) {\n            $this->addEntity($item->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $item->entity->id,\n                'text' => Module::singular(config('entities.ids.item'), __('entities.item')),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'entity-item',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addJournals(): self\n    {\n        /** @var Location $parent */\n        $parent = $this->entity->child;\n        /** @var Journal $journal */\n        foreach ($parent->journals()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $journal) {\n            $this->addEntity($journal->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $journal->entity->id,\n                'text' => Module::singular(config('entities.ids.journal'), __('entities.journal')),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'journal-location',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addAuthorJournals(): self\n    {\n        $elements = $this->entity->authoredJournals()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get();\n        foreach ($elements as $journal) {\n            $this->addEntity($journal->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $journal->entity->id,\n                'text' => __('journals.fields.author'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'journal-author',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addLocation(): self\n    {\n        if (! array_key_exists('location_id', $this->entity->child->getAttributes())) {\n            return $this;\n        }\n        if (empty($this->entity->child->location_id) || empty($this->entity->child->location) || empty($this->entity->child->location->entity)) {\n            return $this;\n        }\n\n        /** @var Map $child */\n        $child = $this->entity->child;\n        $this->addEntity($child->location->entity);\n        $this->relations[] = [\n            'source' => $this->entity->id,\n            'target' => $child->location->entity->id,\n            'text' => Module::singular(config('entities.ids.location'), __('entities.location')),\n            'colour' => '#ccc',\n            'attitude' => null,\n            'type' => 'entity-location',\n            'shape' => 'none',\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Add the entity's parent if it has one\n     */\n    protected function addParent(): self\n    {\n        if (! $this->entity->parent) {\n            return $this;\n        }\n\n        $parent = $this->entity->parent;\n\n        $this->addEntity($parent);\n        $this->relations[] = [\n            'source' => $this->entity->id,\n            'target' => $parent->id,\n            'text' => __('crud.fields.parent'),\n            'colour' => '#ccc',\n            'attitude' => null,\n            'type' => 'entity-parent',\n            'shape' => 'triangle',\n        ];\n\n        $this->addChildren();\n\n        return $this;\n    }\n\n    /**\n     * Assuming the entity has a parent field, it probably has children too\n     */\n    protected function addChildren(): self\n    {\n        if (! method_exists($this->entity, 'children')) {\n            return $this;\n        }\n\n        /** @var Entity $related */\n        foreach ($this->entity->children()->with(['image', 'entityType'])->get() as $related) {\n            $this->addEntity($related);\n            $this->relations[] = [\n                'target' => $this->entity->id,\n                'source' => $related->id,\n                'text' => __('crud.fields.child'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'entity-child',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addDiceRolls(): self\n    {\n        /** @var Character $parent */\n        $parent = $this->entity->child;\n        /** @var DiceRoll $related */\n        foreach ($parent->diceRolls()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $related) {\n            $this->addEntity($related->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $related->entity->id,\n                'text' => __('entities.dice_roll'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'character-diceroll',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addConversations(): self\n    {\n        /** @var Character $parent */\n        $parent = $this->entity->child;\n        /** @var Conversation $related */\n        foreach ($parent->conversations()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $related) {\n            $this->addEntity($related->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $related->entity->id,\n                'text' => __('entities.conversation'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'character-diceroll',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addMapMarkers(): self\n    {\n        /** @var MapMarker $related */\n        foreach ($this->entity->mapMarkers()->with(['map', 'map.entity', 'map.entity.image'])->has('map')->has('map.entity')->get() as $related) {\n            $this->addEntity($related->map->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $related->map->entity->id,\n                'text' => __('maps/markers.tabs.marker'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'entity-map-marker',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addMaps(): self\n    {\n        /** @var Location $parent */\n        $parent = $this->entity->child;\n        /** @var Map $related */\n        foreach ($parent->maps()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $related) {\n            $this->addEntity($related->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $related->entity->id,\n                'text' => Module::singular(config('entities.ids.map'), __('entities.maps')),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'location-map',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addQuests(): self\n    {\n        /** @var QuestElement $related */\n        foreach ($this->entity->quests()->with(['quest', 'quest.entity', 'quest.entity.image', 'quest.entity.entityType'])->has('quest')->has('quest.entity')->get() as $related) {\n            $this->addEntity($related->quest->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $related->quest->entity->id,\n                'text' => __('entities/relations.connections.quest_element'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'entity-map-point',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add a character's races\n     */\n    protected function addRaces(): self\n    {\n        /** @var Character $race */\n        $race = $this->entity->child;\n\n        foreach ($race->races()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $subrace) {\n            $this->addEntity($subrace->entity);\n            $this->addRelations($subrace->entity);\n\n            $this->relations[] = [\n                'source' => $subrace->entity->id,\n                'target' => $this->entity->id,\n                'text' => Module::singular(config('entities.ids.race'), __('entities.race')),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'sub-race',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n\n    /**\n     * Creature locations\n     */\n    protected function addLocationCreatures(): self\n    {\n        /** @var Location $location */\n        $location = $this->entity->child;\n\n        foreach ($location->creatures()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $loc) {\n            $this->addEntity($loc->entity);\n            $this->addRelations($loc->entity);\n\n            $this->relations[] = [\n                'source' => $loc->entity->id,\n                'target' => $this->entity->id,\n                'text' => Module::singular(config('entities.ids.location'), __('entities.location')),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'location-creature',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addEntityLocations(): self\n    {\n        $locations = $this->entity->locations()\n            ->with(['entity.image'])\n            ->get();\n        foreach ($locations as $location) {\n            $entity = $location->entity;\n            $this->addEntity($entity);\n            $this->addRelations($entity);\n\n            $this->relations[] = [\n                'source' => $entity->id,\n                'target' => $this->entity->id,\n                'text' => $this->entity->entityType->name(),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'location-entity',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n\n    /**\n     * Location's custom entities\n     */\n    protected function addEntities(): self\n    {\n        // @phpstan-ignore-next-line\n        $entities = $this->entity->child\n            ->entities()\n            ->with(['image'])\n            ->get();\n        foreach ($entities as $entity) {\n            $this->addEntity($entity);\n            $this->addRelations($entity);\n\n            $this->relations[] = [\n                'source' => $entity->id,\n                'target' => $this->entity->id,\n                'text' => $this->entity->entityType->name(),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'location-entity',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function addLocations(): self\n    {\n        /** @var Location $child */\n        $child = $this->entity->child;\n        if (! method_exists($child, 'locations')) {\n            return $this;\n        }\n\n        foreach ($child->locations()->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')->get() as $subrace) {\n            $this->addEntity($subrace->entity);\n            $this->addRelations($subrace->entity);\n\n            $this->relations[] = [\n                'source' => $subrace->entity->id,\n                'target' => $this->entity->id,\n                'text' => Module::singular(config('entities.ids.race'), __('entities.race')),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'sub-race',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n\n    /**\n     * Load relations between linked entities\n     */\n    protected function relatedRelations(): self\n    {\n        // Go through the entities loaded and re-check their relations\n        $relatedEntityIds = [];\n        /** @var Relation $relation */\n        foreach ($this->relations as $relation) {\n            $relatedEntityIds[] = $relation['target'];\n        }\n\n        $entities = Entity::whereIn('id', $relatedEntityIds)->get();\n        foreach ($entities as $entity) {\n            $this->addRelations($entity);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add an entity's mentions to the map\n     */\n    protected function addMentions(): self\n    {\n        if (! $this->withMentions()) {\n            return $this;\n        }\n\n        /** @var EntityMention[] $mentions */\n        $mentions = $this->entity->targetMentions()->with(['entity', 'entity.image', 'entity.entityType'])\n            ->has('entity')\n            ->whereNotNull('entity_id')\n            ->get();\n        foreach ($mentions as $mention) {\n            // Skip mentions to self\n            if ($mention->entity_id == $this->entity->id) {\n                continue;\n            }\n            $this->addEntity($mention->entity);\n            $this->relations[] = [\n                'source' => $this->entity->id,\n                'target' => $mention->entity->id,\n                'text' => __('entities/relations.connections.mention'),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'entity-mention',\n                'shape' => 'none',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function withRelations(): bool\n    {\n        return ! $this->onlyRelations();\n    }\n\n    /**\n     * Check if the rendering mode includes related models\n     */\n    protected function withRelated(): bool\n    {\n        return in_array($this->option, ['related', 'mentions']);\n    }\n\n    /**\n     * Check if the rendering mode includes mentions\n     */\n    protected function withMentions(): bool\n    {\n        return $this->option === 'mentions';\n    }\n\n    /**\n     * Check if the rendering mode only focuses on direct relations\n     */\n    protected function onlyRelations(): bool\n    {\n        return $this->option === 'only_relations';\n    }\n\n    /**\n     * Load the entity's relations, along with optionally the relation's relations\n     */\n    protected function loadRelations(): self\n    {\n        $this\n            ->addRelations($this->entity)\n            ->withEntity(false);\n\n        if ($this->withRelations()) {\n            $this->relatedRelations();\n        } elseif ($this->onlyRelations()) {\n            // Just requested the entity's relations and target entities, nothing else\n        }\n\n        return $this;\n    }\n\n    protected function addCustom(): self\n    {\n        // Add the entitiy's locations\n        $locations = $this->entity\n            ->locations()\n            ->with(['entity', 'entity.image', 'entity.entityType'])->has('entity')\n            ->get();\n        /** @var Location $sub */\n        foreach ($locations as $sub) {\n            $this->addEntity($sub->entity);\n            $this->addRelations($sub->entity);\n\n            $this->relations[] = [\n                'source' => $sub->entity->id,\n                'target' => $this->entity->id,\n                'text' => $sub->entity->entityType->name(),\n                'colour' => '#ccc',\n                'attitude' => null,\n                'type' => 'child',\n                'shape' => 'triangle',\n            ];\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Connections/RelatedService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Connections;\n\nuse App\\Models\\Character;\nuse App\\Models\\Conversation;\nuse App\\Models\\Entity;\nuse App\\Models\\Location;\nuse App\\Traits\\EntityAware;\n\nclass RelatedService\n{\n    use EntityAware;\n\n    protected array $ids = [];\n\n    protected array $reasons = [];\n\n    protected string $order = 'name';\n\n    /**\n     * @param  string|null  $order\n     */\n    public function order($order): self\n    {\n        if (! in_array($order, ['name', 'type'])) {\n            return $this;\n        }\n\n        $this->order = $order;\n\n        return $this;\n    }\n\n    public function connectionsText(int $entityId): string\n    {\n        return implode(', ', $this->reasons[$entityId]);\n    }\n\n    public function connections()\n    {\n        // Prepare ids for pagination\n        $this->prepareIds();\n\n        return Entity::whereIn('id', $this->ids)\n            ->with(['image', 'entityType', 'map'])\n            ->orderBy($this->order)\n            ->paginate();\n    }\n\n    protected function prepareIds()\n    {\n        // Do stuff\n        $entityHook = 'init' . ucfirst($this->entity->entityType->code);\n        if (method_exists($this, $entityHook)) {\n            $this->$entityHook();\n        } else {\n            $this->loadMapMarkers()\n                ->loadLocation()\n                ->loadTimelines()\n                ->loadQuests()\n                ->loadAuthoredJournals()\n                ->loadChildren()\n                ->loadParent();\n        }\n    }\n\n    /**\n     * Load anything related to a character\n     */\n    protected function initCharacter()\n    {\n        $this->loadMapMarkers()\n            ->loadQuests()\n            ->loadItems()\n            ->loadTimelines()\n            ->loadDicerolls()\n            ->loadAuthoredJournals();\n    }\n\n    /**\n     * Load anything related to a location\n     */\n    protected function initLocation()\n    {\n        $this->loadMapMarkers()\n            ->loadQuests()\n            ->loadItems()\n            ->loadOrganisations()\n            ->loadMaps()\n            ->loadJournals()\n            ->loadFamilies()\n            ->loadTimelines()\n            ->loadAuthoredJournals()\n            ->loadRaces()\n            ->loadParent()\n            ->loadChildren();\n    }\n\n    protected function initMap()\n    {\n        $this->loadMapMarkers()\n            ->loadChildren()\n            ->loadParent()\n            ->loadLocation()\n            ->loadTimelines()\n            ->loadAuthoredJournals()\n            ->loadQuests();\n    }\n\n    protected function initRace()\n    {\n        $this\n            ->loadChildren()\n            ->loadParent()\n            ->loadLocations();\n    }\n\n    protected function initOrganisation()\n    {\n        $this\n            ->loadMapMarkers()\n            ->loadLocations()\n            ->loadTimelines()\n            ->loadQuests()\n            ->loadAuthoredJournals()\n            ->loadChildren()\n            ->loadParent();\n    }\n\n    protected function loadQuests(): self\n    {\n        $elements = $this->entity->quests()->with(['quest', 'quest.entity'])->has('quest')->get();\n        foreach ($elements as $sub) {\n            $entity = $sub->quest->entity;\n            if (empty($entity)) {\n                continue;\n            }\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities/relations.connections.quest_element');\n        }\n\n        return $this;\n    }\n\n    protected function loadTimelines(): self\n    {\n        $elements = $this->entity->timelines()->with(['timeline', 'timeline.entity'])->has('timeline')->get();\n        foreach ($elements as $sub) {\n            $entity = $sub->timeline->entity;\n            if (empty($entity)) {\n                continue;\n            }\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities/relations.connections.timeline_element');\n        }\n\n        return $this;\n    }\n\n    protected function loadMapMarkers(): self\n    {\n        $elements = $this->entity->mapMarkers()->with(['map', 'map.entity'])->has('map')->get();\n        foreach ($elements as $sub) {\n            $entity = $sub->map->entity;\n            if (empty($entity)) {\n                continue;\n            }\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities/relations.connections.map_point');\n        }\n\n        return $this;\n    }\n\n    protected function loadMaps(): self\n    {\n        /** @var Location $location */\n        $location = $this->entity->child;\n        $elements = $location->maps()->with(['entity'])->has('entity')->get();\n        /** @var Entity $entity */\n        foreach ($elements as $entity) {\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities.map');\n        }\n\n        return $this;\n    }\n\n    protected function loadParent(): self\n    {\n        if (! $this->entity->parent) {\n            return $this;\n        }\n\n        $this->ids[] = $this->entity->parent->id;\n        $this->reasons[$this->entity->parent->id][] = __('crud.fields.parent');\n\n        return $this;\n    }\n\n    protected function loadDicerolls(): self\n    {\n        /** @var Character $parent */\n        $parent = $this->entity->child;\n        $elements = $parent->diceRolls()->with(['entity'])->has('entity')->get();\n        foreach ($elements as $sub) {\n            $entity = $sub->entity;\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities.dice_roll');\n        }\n\n        return $this;\n    }\n\n    protected function loadConversations(): self\n    {\n        /** @var Character $parent */\n        $parent = $this->entity->child;\n        $elements = $parent->conversations()->with(['entity'])->has('entity')->get();\n        foreach ($elements as $sub) {\n            /** @var Conversation $sub */\n            $entity = $sub->entity;\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities.conversation');\n        }\n\n        return $this;\n    }\n\n    protected function loadItems(): self\n    {\n        $elements = $this->entity->children()->get();\n        /** @var Entity $entity */\n        foreach ($elements as $entity) {\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities.item');\n        }\n\n        return $this;\n    }\n\n    protected function loadJournals(): self\n    {\n        $elements = $this->entity->children()->get();\n        /** @var Entity $entity */\n        foreach ($elements as $entity) {\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities.journal');\n        }\n\n        return $this;\n    }\n\n    protected function loadAuthoredJournals(): self\n    {\n        $elements = $this->entity->authoredJournals()->with(['entity'])->has('entity')->get();\n        foreach ($elements as $sub) {\n            $entity = $sub->entity;\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('journals.fields.author');\n        }\n\n        return $this;\n    }\n\n    protected function loadFamilies(): self\n    {\n        /** @var Location $parent */\n        $parent = $this->entity->child;\n        $elements = $parent->families()->with(['entity'])->has('entity')->get();\n        foreach ($elements as $sub) {\n            $entity = $sub->entity;\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities.family');\n        }\n\n        return $this;\n    }\n\n    protected function loadOrganisations(): self\n    {\n        $elements = $this->entity->children()->get();\n        /** @var Entity $entity */\n        foreach ($elements as $entity) {\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities.organisation');\n        }\n\n        return $this;\n    }\n\n    protected function loadRaces(): self\n    {\n        $elements = $this->entity->children()->get();\n        /** @var Entity $entity */\n        foreach ($elements as $entity) {\n            $this->ids[] = $entity->id;\n            $this->reasons[$entity->id][] = __('entities.race');\n        }\n\n        return $this;\n    }\n\n    protected function loadChildren(): self\n    {\n        foreach ($this->entity->children as $sub) {\n            $this->ids[] = $sub->id;\n            $this->reasons[$sub->id][] = __('crud.fields.child');\n        }\n\n        return $this;\n    }\n\n    protected function loadLocations(): self\n    {\n        $elements = $this->entity->locations;\n        /** @var Location $entity */\n        foreach ($elements as $entity) {\n            $this->ids[] = $entity->entity->id;\n            $this->reasons[$entity->entity->id][] = __('entities.location');\n        }\n\n        return $this;\n    }\n\n    /**\n     * Load the entity's location if it has one\n     */\n    protected function loadLocation(): self\n    {\n        if ($this->entity->entityType->isCustom()) {\n            return $this;\n        }\n        if (\n            ! isset($this->entity->child->location) ||\n            empty($this->entity->child->location) ||\n            empty($this->entity->child->location->entity)\n        ) {\n            return $this;\n        }\n\n        $entity = $this->entity->child->location->entity;\n        $this->ids[] = $entity->id;\n        $this->reasons[$entity->id][] = __('entities.location');\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/CopyService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Models\\CharacterRace;\nuse App\\Models\\CharacterTrait;\nuse App\\Models\\Entity;\nuse App\\Models\\MapMarker;\nuse App\\Models\\TimelineElement;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\RequestAware;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CopyService\n{\n    use EntityAware;\n    use RequestAware;\n\n    protected Entity $source;\n\n    protected bool $force = false;\n\n    public function source(Entity $entity): self\n    {\n        $this->source = $entity;\n\n        return $this;\n    }\n\n    public function force(): self\n    {\n        $this->force = true;\n\n        return $this;\n    }\n\n    public function fromId(): self\n    {\n        if (! $this->request->filled('copy_source_id')) {\n            return $this;\n        }\n        $entity = Entity::find((int) $this->request->get('copy_source_id'));\n        if (empty($entity)) {\n            return $this;\n        }\n        $this->source = $entity;\n\n        return $this;\n    }\n\n    public function copy(): void\n    {\n        // Invalid source, or of a different type?\n        if (! isset($this->source) || $this->source->type_id !== $this->entity->type_id) {\n            return;\n        }\n\n        $this->posts()\n            ->links()\n            ->abilities()\n            ->inventory()\n            ->permissions()\n            ->reminders()\n            ->map()\n            ->quest()\n            ->timeline();\n    }\n\n    public function posts(): self\n    {\n        if (! $this->force && ! $this->check('copy_posts')) {\n            return $this;\n        }\n        foreach ($this->source->posts()->with(['permissions', 'postTags'])->get() as $post) {\n            $post->copyTo($this->entity, $this->isSameCampaign());\n        }\n\n        return $this;\n    }\n\n    public function attributes(): self\n    {\n        if (! $this->force && ! $this->check('copy_attributes')) {\n            return $this;\n        }\n        foreach ($this->source->attributes as $attribute) {\n            $newAttribute = $attribute->replicate(['entity_id', 'created_by', 'updated_by']);\n            $newAttribute->entity_id = $this->entity->id;\n            $newAttribute->save();\n        }\n\n        return $this;\n    }\n\n    protected function links(): self\n    {\n        if (! $this->force && ! $this->check('copy_links')) {\n            return $this;\n        }\n        foreach ($this->source->assets()->link()->get() as $link) {\n            $link->copyTo($this->entity);\n        }\n\n        return $this;\n    }\n\n    protected function abilities(): self\n    {\n        if (! $this->force && ! $this->check('copy_abilities')) {\n            return $this;\n        }\n        foreach ($this->source->abilities as $ability) {\n            $ability->copyTo($this->entity);\n        }\n\n        return $this;\n    }\n\n    protected function permissions(): self\n    {\n        if (! $this->force && ! $this->check('copy_permissions')) {\n            return $this;\n        }\n        foreach ($this->source->permissions as $perm) {\n            $perm->copyTo($this->entity);\n        }\n\n        return $this;\n    }\n\n    public function inventory(): self\n    {\n        if (! $this->force && ! $this->check('copy_inventory')) {\n            return $this;\n        }\n        foreach ($this->source->inventories as $inventory) {\n            $inventory->copyTo($this->entity, $this->isSameCampaign());\n        }\n\n        return $this;\n    }\n\n    protected function reminders(): self\n    {\n        if (! $this->force && ! $this->check('copy_reminders')) {\n            return $this;\n        }\n        foreach ($this->source->reminders as $reminder) {\n            if ($reminder->isCalendarDate()) {\n                continue;\n            }\n            $reminder->copyTo($this->entity);\n        }\n\n        return $this;\n    }\n\n    public function character(): self\n    {\n        if (! $this->source->isCharacter()) {\n            return $this;\n        }\n        /** @var CharacterTrait $trait */\n        // @phpstan-ignore-next-line\n        foreach ($this->source->child->characterTraits as $trait) {\n            $trait->copyTo($this->entity->entity_id);\n        }\n\n        // Families, races\n        $relations = ['characterFamilies', 'characterRaces', 'organisationMemberships'];\n        foreach ($relations as $relation) {\n            /** @var CharacterRace $item */\n            // @phpstan-ignore-next-line\n            foreach ($this->source->child->{$relation} as $item) {\n                $new = $item->replicate(['character_id']);\n                $new->character_id = $this->entity->entity_id;\n                $new->save();\n            }\n        }\n\n        return $this;\n    }\n\n    public function map(): self\n    {\n        if (! $this->source->isMap() || ! $this->check('copy_elements')) {\n            return $this;\n        }\n        $groups = [];\n        // @phpstan-ignore-next-line\n        foreach ($this->source->child->layers as $sub) {\n            // Old layer not linked to the gallery? Skip it\n            if (! empty($sub->image_path)) {\n                continue;\n            }\n            $newSub = $sub->replicate(['map_id']);\n            $newSub->map_id = $this->entity->entity_id;\n\n            $newSub->save();\n        }\n        // @phpstan-ignore-next-line\n        foreach ($this->source->child->groups as $sub) {\n            $newSub = $sub->replicate(['map_id']);\n            $newSub->map_id = $this->entity->entity_id;\n            $newSub->save();\n            $groups[$sub->id] = $newSub->id;\n        }\n        // @phpstan-ignore-next-line\n        foreach ($this->source->child->markers as $sub) {\n            /** @var MapMarker $newSub */\n            $newSub = $sub->replicate(['map_id']);\n            $newSub->map_id = $this->entity->entity_id;\n            $newSub->group_id = ! empty($newSub->group_id) && isset($groups[$newSub->group_id]) ? $groups[$newSub->group_id] : null;\n\n            // If moving to another campaign, switch the markers pointing to an entity\n            if (! empty($newSub->entity_id) && ! $this->isSameCampaign()) {\n                $newSub->entity_id = null;\n                if ($newSub->icon == 4) {\n                    $newSub->icon = 1;\n                }\n                if (empty($newSub->name)) {\n                    // Because the permission engine is already set on the new campaign, searching the marker's entity\n                    // will always fail. So we need to go get it directly\n                    $raw = DB::table('entities')\n                        ->select('name')\n                        ->where('id', $sub->entity_id)\n                        ->first();\n                    $newSub->name = $raw ? $raw->name : 'Copy of #' . $sub->id;\n                }\n            }\n            $newSub->save();\n        }\n\n        return $this;\n    }\n\n    protected function quest(): self\n    {\n        if (! $this->source->isQuest() || ! $this->check('copy_elements')) {\n            return $this;\n        }\n        // @phpstan-ignore-next-line\n        foreach ($this->source->child->elements as $sub) {\n            $newSub = $sub->replicate();\n            $newSub->quest_id = $this->entity->entity_id;\n            $newSub->save();\n        }\n\n        return $this;\n    }\n\n    public function timeline(): self\n    {\n        if (! $this->source->isTimeline() || (! $this->force && ! $this->check('copy_eras'))) {\n            return $this;\n        }\n        $copyElements = $this->force || $this->check('copy_elements');\n        // @phpstan-ignore-next-line\n        foreach ($this->source->child->eras()->with('elements')->get() as $era) {\n            $newEra = $era->replicate();\n            $newEra->timeline_id = $this->entity->entity_id;\n            $newEra->save();\n\n            if (! $copyElements) {\n                continue;\n            }\n            foreach ($era->elements as $element) {\n                /** @var TimelineElement $newElement */\n                $newElement = $element->replicate();\n                $newElement->timeline_id = $this->entity->entity_id;\n                $newElement->era_id = $newEra->id;\n                if (! $this->isSameCampaign()) {\n                    $newElement->entity_id = null;\n                    if (empty($newElement->name)) {\n                        continue;\n                    }\n                }\n                $newElement->save();\n            }\n        }\n\n        return $this;\n    }\n\n    protected function check(string $field): bool\n    {\n        return isset($this->request) && $this->request->boolean($field);\n    }\n\n    protected function isSameCampaign(): bool\n    {\n        return $this->source->campaign_id === $this->entity->campaign_id;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/EntitySaveService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Enums\\Permission;\nuse App\\Facades\\Domain;\nuse App\\Facades\\EntityLogger;\nuse App\\Facades\\Images;\nuse App\\Facades\\Permissions;\nuse App\\Models\\Entity;\nuse App\\Services\\PermissionService;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass EntitySaveService\n{\n    public function __construct(\n        protected TagService $tagService,\n        protected PermissionService $permissionService,\n    ) {}\n\n    public function save(Entity $entity, array $data): Entity\n    {\n        // Pre-save: scalar entity fields — must all be set before save() so HasEntry fires once\n        if (array_key_exists('name', $data)) {\n            $entity->name = $data['name'];\n        }\n        if (array_key_exists('is_private', $data)) {\n            $entity->is_private = $data['is_private'];\n        }\n        if (array_key_exists('type', $data)) {\n            $entity->type = $data['type'];\n        }\n        if (array_key_exists('entry', $data)) {\n            $entity->entry = $data['entry'];\n        }\n        if (array_key_exists('parent_id', $data)) {\n            $entity->parent_id = $data['parent_id'];\n        }\n        if (array_key_exists('status_id', $data)) {\n            $entity->status_id = $data['status_id'] ?: null;\n        }\n\n        $this->applyGalleryFields($entity, $data);\n\n        $entity->save();\n\n        // Post-save: image file cleanup (safe after save — doesn't affect entity record)\n        if (($data['remove-image'] ?? null) == '1') {\n            Images::model($entity)->field('image')->cleanup();\n        }\n        if (($data['remove-header_image'] ?? null) == '1') {\n            Images::model($entity)->field('header_image')->cleanup();\n        }\n\n        $this->saveTags($entity, $data);\n        $this->savePermissions($entity, $data);\n\n        return $entity;\n    }\n\n    protected function applyGalleryFields(Entity $entity, array $data): void\n    {\n        // image_uuid is available to all (not premium-gated)\n        if (array_key_exists('entity_image_uuid', $data)) {\n            $entity->image_uuid = $data['entity_image_uuid'];\n        } elseif (Domain::isApp()) {\n            // On the hosted app, a missing key means the user cleared it\n            $entity->image_uuid = null;\n        }\n\n        // tooltip and header_uuid are boosted-campaign features\n        if (! $entity->campaign->boosted()) {\n            return;\n        }\n\n        if (array_key_exists('tooltip', $data)) {\n            $entity->tooltip = Purify::clean($data['tooltip']);\n        }\n\n        if (array_key_exists('entity_header_uuid', $data)) {\n            $entity->header_uuid = $data['entity_header_uuid'];\n        } elseif (Domain::isApp()) {\n            $entity->header_uuid = null;\n        }\n    }\n\n    protected function saveTags(Entity $entity, array $data): void\n    {\n        if (! array_key_exists('tags', $data) && ! array_key_exists('save-tags', $data)) {\n            return;\n        }\n\n        $ids = $data['tags'] ?? [];\n        if (! is_array($ids)) {\n            // The API can send malformed values\n            $ids = [];\n        }\n\n        $this->tagService\n            ->user(auth()->user())\n            ->entity($entity)\n            ->withNew()\n            ->sync($ids);\n\n        // Touch entity to update updated_at if tags changed (but quietly if just created)\n        if ($this->tagService->isDirty()) {\n            if (EntityLogger::entity($entity)->created()) {\n                $entity->touchQuietly();\n            } else {\n                $entity->touch();\n            }\n        }\n    }\n\n    protected function savePermissions(Entity $entity, array $data): void\n    {\n        if (! auth()->user()->can('permissions', $entity)) {\n            return;\n        }\n        if (array_key_exists('copy_permissions', $data) && ! empty($data['copy_permissions'])) {\n            return;\n        }\n        if (($data['quick-creator'] ?? null) === '1') {\n            return;\n        }\n\n        $permData = array_intersect_key($data, array_flip(['role', 'user', 'is_attributes_private', 'permissions_too_many']));\n\n        // If the user has been granted permissions on this entity, ensure they keep read/write\n        if (Permissions::granted() && ! empty($permData['user'])) {\n            $userId = auth()->user()->id;\n            if (! in_array(Permission::Update->value, $permData['user'][$userId] ?? [])) {\n                $permData['user'][$userId][Permission::Update->value] = 'allow';\n            }\n            if (! in_array(Permission::View->value, $permData['user'][$userId] ?? [])) {\n                $permData['user'][$userId][Permission::View->value] = 'allow';\n            }\n        }\n\n        $this->permissionService\n            ->user(auth()->user())\n            ->entity($entity)\n            ->save($permData);\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/ExportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Http\\Resources\\EntityResource;\nuse App\\Traits\\EntityAware;\nuse Illuminate\\Support\\Str;\n\nclass ExportService\n{\n    use EntityAware;\n\n    /**\n     * @return array|mixed\n     */\n    public function json()\n    {\n        $child = Str::studly($this->entity->entityType->code);\n        $className = 'App\\Http\\Resources\\\\' . $child . 'Resource';\n\n        if (class_exists($className)) {\n            $resource = new $className($this->entity->child);\n\n            return $resource->withRelated();\n        } elseif ($this->entity->entityType->isCustom()) {\n            return new EntityResource($this->entity);\n        } else {\n            return ['error' => 'unknown resource ' . $className];\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/InventoryService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Http\\Requests\\GenerateInventory;\nuse App\\Models\\Inventory;\nuse App\\Models\\Item;\nuse App\\Traits\\EntityAware;\n\nclass InventoryService\n{\n    use EntityAware;\n\n    public function handle(GenerateInventory $request): int\n    {\n        if ($request->isNotFilled('tags')) {\n            $items = Item::with('entity')\n                ->limit($request->get('item_amount', 1))\n                ->get();\n        } elseif ($request->has('tags') && $request->has('match_all') && $request['match_all'] == true) {\n            // Match all tags\n            $items = Item::whereHas('entity', function ($query) use ($request) {\n                $query\n                    ->whereHas('entityTags', function ($tagQuery) use ($request) {\n                        $tagQuery->whereIn('tag_id', $request->get('tags'));\n                    }, '=', count($request->get('tags'))); // requires all tags\n            })\n                ->limit($request->get('item_amount', 1))\n                ->get();\n\n        } else {\n            // Match one tag at least\n            $items = Item::whereHas('entity', function ($query) use ($request) {\n                $query->whereHas('entityTags', function ($tagQuery) use ($request) {\n                    $tagQuery->whereIn('tag_id', $request->get('tags'));\n                });\n            })\n                ->limit($request->get('item_amount', 1))\n                ->get();\n        }\n\n        if ($request->has('replace') && $request['replace'] == true) {\n            // Replace current inventory\n            Inventory::where('entity_id', $this->entity->id)->delete();\n        }\n\n        $count = 0;\n        foreach ($items as $item) {\n            $inventory = new Inventory;\n            $inventory = $inventory->create(['item_id' => $item->id, 'entity_id' => $this->entity->id]);\n            $count++;\n        }\n\n        return $count;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/LoggerService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Enums\\ConversationTarget;\nuse App\\Facades\\Identity;\nuse App\\Models\\Conversation;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityLog;\nuse App\\Models\\Location;\nuse App\\Models\\MapMarker;\nuse App\\Models\\MiscModel;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Str;\n\nclass LoggerService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected array $logged = [];\n\n    /** Track fields that are dirty for the current entity */\n    protected array $changes = [];\n\n    /** Track entities that were created in the current execution */\n    protected array $created = [];\n\n    protected EntityLog $log;\n\n    protected MiscModel $model;\n\n    /** Track if the model is dirty on a relationship property like many to many (character races, tags) */\n    protected bool $dirty = false;\n\n    public function model(MiscModel $model): self\n    {\n        $this->model = $model;\n        $this->modelDirty();\n\n        return $this;\n    }\n\n    public function finish(): void\n    {\n        // If the model isn't dirty, or was created right now, there is no need for logging\n        if (! $this->dirty || $this->created) {\n            return;\n        }\n\n        $this->update();\n        $this->entity->touchQuietly();\n        $this->model->touchQuietly();\n    }\n\n    public function created(): bool\n    {\n        return in_array($this->entity->id, $this->created);\n    }\n\n    public function create(): void\n    {\n        if ($this->logged()) {\n            return;\n        }\n\n        $this->log(EntityLog::ACTION_CREATE);\n        $this->log->save();\n\n        $this->created[] = $this->entity->id;\n    }\n\n    public function dirty(string $key, mixed $values): self\n    {\n        $this->changes[$key] = $values;\n        $this->dirty = true;\n\n        return $this;\n    }\n\n    public function isDirty(): bool\n    {\n        return $this->dirty;\n    }\n\n    public function update(): void\n    {\n        if ($this->logged()) {\n            $this->tail(EntityLog::ACTION_UPDATE);\n        } else {\n            $this->log(EntityLog::ACTION_UPDATE);\n        }\n\n        $this->buildDirty();\n        if (empty($this->changes)) {\n            return;\n        }\n        if (! empty($this->log->changes)) {\n            $changes = $this->log->changes + $this->changes;\n            $this->log->changes = $changes;\n        } else {\n            $this->log->changes = $this->changes;\n        }\n\n        // Only save for superboosted and premium campaigns\n        if (isset($this->campaign) && ! $this->campaign->superboosted()) {\n            $this->log->changes = null;\n        }\n        $this->log->save();\n\n        $this->dirty = false;\n        $this->changes = [];\n    }\n\n    public function delete(): void\n    {\n        $this->log(EntityLog::ACTION_DELETE);\n        $this->log->save();\n    }\n\n    public function restore(): void\n    {\n        $this->log(EntityLog::ACTION_RESTORE);\n        $this->log->save();\n    }\n\n    public function updatedFamilyTree(): void\n    {\n        $this->log(EntityLog::ACTION_UPDATE_FAMILY_TREE);\n        $this->log->save();\n    }\n\n    protected function log(int $action)\n    {\n        $this->log = new EntityLog;\n        $this->log->parent_id = $this->entity->id;\n        $this->log->parent_type = Entity::class;\n        $this->log->created_by = isset($this->user) ? $this->user->id : null;\n        $this->log->action = $action;\n        $this->log->impersonated_by = Identity::getImpersonatorId();\n    }\n\n    protected function tail(int $action)\n    {\n        /** @var EntityLog $log */\n        $log = $this->entity->logs()->where('action', $action)->latest()->first();\n        if ($log) {\n            $this->log = $log;\n        }\n    }\n\n    protected function logged(): bool\n    {\n        if (in_array($this->entity->id, $this->logged)) {\n            return true;\n        }\n        $this->logged[] = $this->entity->id;\n\n        return false;\n    }\n\n    protected function buildDirty(): self\n    {\n        $this->entityDirty();\n\n        return $this;\n    }\n\n    protected function modelDirty(): void\n    {\n        if (! isset($this->model)) {\n            return;\n        }\n        $ignoredAttributes = [\n            'slug',\n            'campaign_id',\n            'updated_at',\n            'deleted_at',\n        ];\n        foreach ($this->model->getDirty() as $attribute => $value) {\n            // If the model has this attribute as ignored for logs, skip it\n            if (in_array($attribute, $ignoredAttributes)) {\n                continue;\n            }\n            // We log the old value\n            $value = $this->model->getOriginal($attribute);\n            if (Str::endsWith($attribute, '_id')) {\n                // Foreign? Try and get the related model\n                $value = $this->getForeignOriginal($attribute, $value);\n            }\n\n            // If it's not an array, easy work\n            if (! is_array($value)) {\n                $this->changes[$attribute] = $value;\n\n                continue;\n            }\n\n            // An array (config[, moons[) we need to store it differently\n            foreach ($value as $k => $v) {\n                $this->changes[$k] = $v;\n            }\n        }\n    }\n\n    protected function entityDirty(): void\n    {\n        if (! isset($this->entity)) {\n            return;\n        }\n        $dirty = $this->entity->getDirty();\n        $ignoredAttributes = ['created_at', 'updated_at', 'updated_by', 'deleted_by', 'deleted_at', 'type_id', 'words'];\n        foreach ($dirty as $attribute => $value) {\n            // If the model has this attribute as ignored for logs, skip it\n            if (in_array($attribute, $ignoredAttributes)) {\n                continue;\n            }\n            // We log the old value\n            $value = $this->entity->getOriginal($attribute);\n            if (Str::endsWith($attribute, '_id')) {\n                // Foreign? Try and get the related model\n                $value = $this->getForeignOriginal($attribute, $value);\n            }\n\n            // If it's not an array, easy work\n            if (! is_array($value)) {\n                $this->changes[$attribute] = $value;\n\n                continue;\n            }\n\n            // An array (config[, moons[) we need to store it differently\n            foreach ($value as $k => $v) {\n                $this->changes[$k] = $v;\n            }\n        }\n    }\n\n    protected function getForeignOriginal(string $attribute, mixed $original): string\n    {\n        if (empty($original)) {\n            return '';\n        }\n\n        try {\n            if ($attribute == 'location_id') {\n                $originalLocation = Location::where('id', $original)->first();\n                if (! empty($originalLocation)) {\n                    return (string) $originalLocation->name;\n                }\n\n                return '';\n            } elseif ($attribute == 'center_marker_id') {\n                // Maps can have a \"centered marker\" which gets tricky\n                $originalMarker = MapMarker::where('id', $original)->first();\n                if (! empty($originalMarker)) {\n                    return (string) $originalMarker->name;\n                }\n\n                return '';\n            } elseif (in_array($attribute, ['author_id', 'instigator_id', 'creator_id'])) {\n                // Journals have an author, which can be any entity type. In the future, quests might have this too\n                $originalAuthor = Entity::where('id', $original)->first();\n                if (! empty($originalAuthor)) {\n                    return (string) $originalAuthor->name;\n                }\n\n                return '';\n            } elseif ($attribute === 'parent_id') {\n                $originalParent = Entity::where('id', $original)->first();\n                if (! empty($originalParent)) {\n                    return (string) $originalParent->name;\n                }\n\n                return '';\n            }\n\n            // Silence\n            if ($attribute == 'target_id' && $this->model instanceof Conversation) {\n                return __('conversations.targets.' . (\n                    $original == ConversationTarget::users ? 'members' : 'characters'\n                ));\n            }\n\n            // Enum fields that aren't foreign keys\n            if ($attribute === 'status_id') {\n                return $original instanceof \\BackedEnum ? (string) $original->value : (string) $original;\n            }\n\n            // Let's try based off of the attribute name\n            $relationName = Str::before($attribute, '_id');\n            $relationName = Str::camel($relationName);\n\n            $relationClass = 'App\\Models\\\\' . ucfirst($relationName);\n\n            /** @var MiscModel $relationModel */\n            $relationModel = new $relationClass;\n            /** @var MiscModel $result */\n            $result = $relationModel->where('id', $original)->firstOrFail();\n\n            return $result->name;\n        } catch (Exception $e) {\n            Log::error('Issue with Logger', ['e' => $e->getMessage()]);\n\n            return '';\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/MarkdownExportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Models\\Post;\nuse App\\Services\\MarkdownMentionsService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\Blade;\nuse Illuminate\\Support\\Str;\nuse League\\HTMLToMarkdown\\Converter\\LinkConverter;\nuse League\\HTMLToMarkdown\\Converter\\TableConverter;\nuse League\\HTMLToMarkdown\\HtmlConverter;\n\nclass MarkdownExportService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected array $index = [];\n\n    protected string $module = '';\n\n    protected bool $isSingle = false;\n\n    public function __construct(\n        protected MarkdownMentionsService $markdownMentionsService\n    ) {}\n\n    public function single(bool $isSingle = true)\n    {\n        $this->isSingle = $isSingle;\n\n        return $this;\n    }\n\n    /**\n     * Main function for the Entity to Markdown conversion.\n     *\n     * @return string|mixed\n     */\n    public function markdown()\n    {\n        $converter = new HtmlConverter;\n        $converter->getConfig()->setOption('strip_tags', true);\n        $converter->getEnvironment()->addConverter(new TableConverter);\n        $converter->getEnvironment()->addConverter(new LinkConverter);\n        $entityData = $this->entityData();\n\n        if (! $this->isSingle) {\n            $this->addToIndex();\n        }\n\n        return Blade::render('entities.markdown.base', ['entity' => $this->entity, 'entityData' => $entityData, 'converter' => $converter, 'campaign' => $this->campaign]);\n    }\n\n    public function addToIndex()\n    {\n        $moduleName = $this->entity->entityType->plural() . '_' . $this->entity->entityType->id;\n\n        if (! isset($this->index[$moduleName])) {\n            $this->index[$moduleName] = [];\n        }\n\n        $this->index[$moduleName][$this->entity->id] = '* [' . $this->entity->name . '](' . str_replace(' ', '-', $this->module) . '/' . str_replace(' ', '-', Str::slug($this->entity->name)) . '_' . $this->entity->id . ')\n';\n    }\n\n    public function exportIndex()\n    {\n        return Blade::render('entities.markdown.index', ['index' => $this->index]);\n    }\n\n    public function module(string $module)\n    {\n        $this->module = $module;\n\n        return $this;\n    }\n\n    /**\n     * Main function for the Campaign to Markdown conversion.\n     *\n     * @return string|mixed\n     */\n    public function campaignMarkdown()\n    {\n        $converter = new HtmlConverter;\n        $converter->getConfig()->setOption('strip_tags', true);\n        $converter->getEnvironment()->addConverter(new TableConverter);\n\n        return Blade::render('campaigns.markdown', ['converter' => $converter, 'campaign' => $this->campaign]);\n    }\n\n    public function entityData()\n    {\n        // Move to service\n        $entityData = [];\n        $entityData['tags'] = [];\n        $entityData['attributes'] = '';\n        $entityData['relations'] = '';\n        $entityData['pinnedAliases'] = [];\n        $entityData['entry'] = $this->markdownEntry();\n        $entityData['posts'] = [];\n\n        if ($this->isSingle) {\n            foreach ($this->entity->tags as $tag) {\n                $entityData['tags'][] = '[' . html_entity_decode($tag->name, ENT_QUOTES, 'UTF-8') . '](' . $tag->entity->url() . ')';\n            }\n        } else {\n            foreach ($this->entity->tags as $tag) {\n                $entityData['tags'][] = '[' . html_entity_decode($tag->name, ENT_QUOTES, 'UTF-8') . '](tags/' . Str::slug($tag->name) . '_' . $tag->entity->id . ')';\n            }\n        }\n\n        foreach ($this->entity->pinnedAliases as $asset) {\n            $entityData['pinnedAliases'][] = $asset->name;\n        }\n\n        foreach ($this->entity->posts as $post) {\n            if (! $post->layout_id) {\n                $entityData['posts'][$post->id] = $this->markdownPost($post);\n            }\n        }\n\n        foreach ($this->entity->attributes as $attribute) {\n            $entityData['attributes'] .= '* **' . $attribute->name . '**: ' . html_entity_decode($attribute->value, ENT_QUOTES, 'UTF-8') . '\n';\n        }\n\n        if ($this->isSingle) {\n            foreach ($this->entity->allRelationships as $relation) {\n                $entityData['relations'] .= '* [' . html_entity_decode($relation->target->name, ENT_QUOTES, 'UTF-8') . '](' . $relation->target->url() . ')\n';\n            }\n        } else {\n            foreach ($this->entity->allRelationships as $relation) {\n                if ($relation->target->entityType->isCustom()) {\n                    $moduleName = $relation->target->entityType->code . '_' . $relation->target->entityType->id;\n\n                    $entityData['relations'] .= '* [' . $relation->target->name . '](' . Str::slug($moduleName) . '/' . Str::slug($relation->target->name) . '_' . $relation->target_id . ')\n';\n                } else {\n                    $entityData['relations'] .= '* [' . $relation->target->name . '](' . str_replace(' ', '-', $relation->target->entityType->pluralCode()) . '/' . Str::slug($relation->target->name) . '_' . $relation->target_id . ')\n';\n                }\n            }\n        }\n\n        return $entityData;\n    }\n\n    /**\n     * Get the entry where mentions are made to look nice for the text editor\n     */\n    public function markdownEntry(): string\n    {\n        if (isset($this->user)) {\n            $this->markdownMentionsService->user($this->user);\n        }\n\n        return $this->markdownMentionsService->single($this->isSingle)->parseForMarkdown($this->entity);\n    }\n\n    /**\n     * Get the entry where mentions are made to look nice for the text editor\n     */\n    public function markdownPost(Post $post): string\n    {\n        if (isset($this->user)) {\n            $this->markdownMentionsService->user($this->user);\n        }\n\n        return $this->markdownMentionsService->single($this->isSingle)->parseForMarkdown($post);\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/MoveService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Campaign;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Note;\nuse App\\Services\\Gallery\\StorageService;\nuse App\\Services\\MentionsService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\nclass MoveService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected Campaign $to;\n\n    protected StorageService $storageService;\n\n    protected CopyService $copyService;\n\n    protected MentionsService $mentionsService;\n\n    protected bool $copy = false;\n\n    protected int $count = 0;\n\n    public function __construct(StorageService $storageService, CopyService $copyService, MentionsService $mentionsService)\n    {\n        $this->storageService = $storageService;\n        $this->copyService = $copyService;\n        $this->mentionsService = $mentionsService;\n    }\n\n    public function to(Campaign|int $campaign): self\n    {\n        if ($campaign instanceof Campaign) {\n            $this->to = $campaign;\n        } else {\n            $this->to = Campaign::findOrFail($campaign);\n        }\n\n        return $this;\n    }\n\n    public function copy(bool $copy): self\n    {\n        $this->copy = $copy;\n\n        return $this;\n    }\n\n    public function process(): bool\n    {\n        if ($this->copy) {\n            return $this->copyEntity();\n        } else {\n            return $this->moveEntity();\n        }\n    }\n\n    public function count(): int\n    {\n        return $this->count;\n    }\n\n    public function target(): Campaign\n    {\n        return $this->to;\n    }\n\n    public function validate(): self\n    {\n        // First we make sure we have access to the new campaign.\n        /** @var ?Campaign $campaign */\n        $campaign = $this->user->campaigns()->where('campaign_id', $this->to->id)->first();\n        if (empty($campaign)) {\n            throw new TranslatableException('entities/move.errors.unknown_campaign');\n        }\n\n        // Check that the new campaign is different from the current one.\n        if ($campaign->id == $this->entity->campaign_id) {\n            throw new TranslatableException('entities/move.errors.same_campaign');\n        }\n\n        // Can the user create an entity of that type on the new campaign?\n        // UserCache::campaign($campaign);\n        if (! $this->user->can('create', [$this->entity->entityType, $campaign])) {\n            throw (new TranslatableException('entities/move.errors.permission'))->setOptions([\n                'type' => $this->entity->entityType->name(),\n                'target' => '<a href=\"' . route('dashboard', $campaign) . '\" class=\"text-link\">' . $campaign->name . '</a>',\n            ]);\n        }\n\n        // UserCache::campaign($this->entity->campaign);\n        // Trying to move (not copy) but can't update the original entity\n        if (! $this->copy && ! $this->user->can('update', $this->entity)) {\n            throw new TranslatableException('entities/move.errors.permission_update');\n        }\n\n        return $this;\n    }\n\n    protected function copyEntity(): bool\n    {\n        DB::beginTransaction();\n        try {\n            if ($this->entity->hasChild()) {\n                $newModel = $this->entity->child->replicate(['campaign_id']);\n                // Remove any foreign keys that wouldn't make any sense in the new campaign\n                $keepFields = ['campaign_id', 'status_id', 'visibility_id'];\n                foreach ($newModel->getAttributes() as $attribute => $value) {\n                    if (str_contains($attribute, '_id') && ! in_array($attribute, $keepFields)) {\n                        $newModel->$attribute = null;\n                    }\n                }\n            } else {\n                $newModel = new Note;\n                $newModel->name = $this->entity->name;\n                $newModel->is_private = $this->entity->is_private;\n            }\n\n            $newModel->campaign_id = $this->to->id;\n            $image = $this->entity->image; // Load the image before switching campaigns\n            $newEntry = $this->mentionsService->campaign($this->campaign)->mapCopiedEntry($this->entity->entry);\n\n            CampaignLocalization::forceCampaign($this->to);\n\n            // The model is ready to be saved.\n            $newModel->saveQuietly();\n            $newModel->createEntity();\n\n            $newModel->entity->entry = $newEntry;\n            // Copy the gallery image over\n            if (! empty($image)) {\n                // If there is enough space in the target campaign gallery\n                $available = $this->storageService->campaign($this->campaign)->available();\n                if ($available > $image->size) {\n                    $newImage = $image->replicate(['id', 'campaign_id']);\n                    $newImage->campaign_id = $this->to->id;\n                    $newImage->save();\n\n                    Storage::copy($image->path, $newImage->path);\n\n                    $newModel->entity->image_uuid = $newImage->id;\n                }\n            }\n            $newModel->entity->saveQuietly();\n\n            $this->copyService\n                ->entity($newModel->entity)\n                ->source($this->entity)\n                ->force()\n                ->posts()\n                ->inventory()\n                ->attributes()\n                ->character()\n                ->timeline()\n                ->map();\n\n            DB::commit();\n            $success = true;\n        } catch (Exception $e) {\n            DB::rollBack();\n            throw $e;\n        }\n\n        CampaignLocalization::forceCampaign($this->campaign);\n\n        return $success;\n    }\n\n    protected function moveEntity(): bool\n    {\n        $success = false;\n        DB::beginTransaction();\n        try {\n            // Made it so far, we can move the entity's campaign_id. We first need to remove all the\n            // relations and, since they won't make sense on the new campaign.\n            $this->entity->relationships()->delete();\n            $this->entity->targetRelationships()->delete();\n            $this->entity->reminders()->delete();\n            $this->entity->imageMentions()->delete();\n\n            // Get the child of the entity (the actual Location, Character etc) and remove the permissions, since they\n            // won't make sense on the new campaign either.\n            /* @var MiscModel $child */\n            if ($this->entity->hasChild()) {\n                $child = $this->entity->child;\n            }\n            $this->entity->permissions()->delete();\n\n            // Detach is a custom function on a child to remove itself from where it is parent to other entities.\n            if ($this->entity->hasChild()) {\n                $this->cleanupChild($child);\n            }\n\n            // Update Entity first, as there are no hooks on the Entity model.\n            CampaignLocalization::forceCampaign($this->to);\n            $this->entity->campaign_id = $this->to->id;\n            $this->entity->parent_id = null;\n            if (! empty($this->entity->image_path)) {\n                $oldImagePath = $this->entity->image_path;\n                $this->entity->image_path = Str::replace(\n                    'w/' . $this->campaign->id . '/',\n                    'w/' . $this->to->id . '/',\n                    $oldImagePath\n                );\n                Storage::move($oldImagePath, $this->entity->image_path);\n            }\n            $this->entity->saveQuietly();\n\n            // Update child second. We do this otherwise we'll have an old entity and a new one\n            if ($this->entity->hasChild()) {\n                $child->campaign_id = $this->to->id;\n                $child->saveQuietly();\n            }\n\n            DB::commit();\n            $success = true;\n        } catch (Exception $e) {\n            DB::rollBack();\n            if (config('app.debug')) {\n                throw $e;\n            }\n        }\n\n        CampaignLocalization::forceCampaign($this->campaign);\n\n        return $success;\n    }\n\n    protected function cleanupChild(MiscModel $model)\n    {\n        // Loop on children attributes and detach.\n        $attributes = $model->getAttributes();\n        foreach ($attributes as $attribute => $value) {\n            if (Str::endsWith($attribute, '_id') && $attribute != 'campaign_id') {\n                $model->$attribute = null;\n            }\n        }\n\n        // Detach children via entity parent_id\n        if (isset($model->entity)) {\n            foreach ($model->entity->children as $childEntity) {\n                $childEntity->parent_id = null;\n                $childEntity->saveQuietly();\n            }\n            $model->entity->parent_id = null;\n            $model->entity->saveQuietly();\n        }\n\n        if (method_exists($model, 'detach')) {\n            $model->detach();\n        }\n        $model->saveQuietly();\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/NewService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Tag;\nuse App\\Observers\\PurifiableTrait;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\nclass NewService\n{\n    use CampaignAware;\n    use EntityAware;\n    use EntityTypeAware;\n    use PurifiableTrait;\n    use UserAware;\n\n    protected array $tags;\n\n    protected Collection $available;\n\n    /**\n     * Get a list of available entity types the user can create\n     *\n     * @return Collection|EntityType[]\n     */\n    public function available(): Collection|array\n    {\n        if (isset($this->available)) {\n            return $this->available;\n        }\n        $this->available = new Collection;\n\n        if (! isset($this->user)) {\n            return $this->available;\n        }\n\n        $excludedTypes = [\n            config('entities.ids.bookmark'),\n            config('entities.ids.attribute_template'),\n        ];\n\n        foreach ($this->campaign->getEntityTypes() as $entityType) {\n            // Skip disabled modules\n            if ($entityType->isCustom() && ! $entityType->isEnabled()) {\n                continue;\n            }\n            if (\n                $entityType->isStandard() &&\n                ! $this->campaign->enabled($entityType)\n            ) {\n                continue;\n            }\n            if (in_array($entityType->id, $excludedTypes)) {\n                continue;\n            }\n            // Check permission\n            if (! $this->user->can('create', [$entityType, $this->campaign])) {\n                continue;\n            }\n            $this->available->add($entityType);\n        }\n\n        return $this->available;\n    }\n\n    public function create(string $name): Entity\n    {\n        $name = Str::replace(['&lt;', '&gt;'], ['<', '>'], $name);\n        if ($this->entityType->isCustom()) {\n            $this->entity = new Entity;\n            $this->entity->campaign_id = $this->campaign->id;\n            $this->entity->type_id = $this->entityType->id;\n            $this->entity->name = $this->purify(mb_trim(strip_tags($name)));\n            $this->entity->is_private = $this->private();\n            $this->entity->save();\n        } else {\n            // Todo: we need a better way to handle this in the future\n            /** @var MiscModel $misc */\n            $misc = $this->entityType->getClass();\n            $misc->name = $this->purify(mb_trim(strip_tags($name)));\n            $misc->is_private = $this->private();\n            $misc->campaign_id = $this->campaign->id;\n            $misc->save();\n            $this->entity = $misc->entity;\n        }\n\n        if ($this->entity->isTag()) {\n            return $this->entity;\n        }\n        // Apply auto tags to the entity\n        $allTags = $this->autoTags();\n        $this->entity->tags()->attach($allTags);\n\n        return $this->entity;\n    }\n\n    protected function private(): bool\n    {\n        return (bool) ($this->user->isAdmin() &&\n            $this->campaign->entity_visibility);\n    }\n\n    public function autoTags(): array\n    {\n        if (isset($this->tags)) {\n            return $this->tags;\n        }\n        $this->tags = [];\n        $tags = Tag::autoApplied()->has('entity')->get();\n        foreach ($tags as $tag) {\n            $this->tags[] = $tag->id;\n        }\n\n        return $this->tags;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/PopularService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Models\\EntityType;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Collection;\n\nclass PopularService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function get(): Collection\n    {\n        $types = new Collection;\n        /** @var EntityType $entityType */\n        foreach (EntityType::whereIn('id', $this->popularEntityIds())->get() as $entityType) {\n            if (! $this->campaign->enabled($entityType)) {\n                continue;\n            } elseif (! $this->user->can('create', [$entityType, $this->campaign])) {\n                continue;\n            }\n            $types->add($entityType);\n        }\n\n        return $types;\n    }\n\n    protected function popularEntityIds(): array\n    {\n        return [\n            config('entities.ids.character'),\n            config('entities.ids.location'),\n            config('entities.ids.race'),\n            config('entities.ids.item'),\n            config('entities.ids.organisation'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/PostLoggerService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Models\\EntityLog;\nuse App\\Models\\Location;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Post;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\PostAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Str;\n\nclass PostLoggerService\n{\n    use CampaignAware;\n    use PostAware;\n    use UserAware;\n\n    protected array $logged = [];\n\n    /** Track fields that are dirty for the current post */\n    protected array $changes = [];\n\n    protected EntityLog $log;\n\n    public function change(string $property, mixed $values = null): self\n    {\n        $this->changes[$property] = $values;\n\n        return $this;\n    }\n\n    public function dirty(): array\n    {\n        $dirty = $this->post->getDirty();\n        $ignoredAttributes = ['created_at', 'updated_at', 'updated_by', 'deleted_by', 'deleted_at', 'words'];\n        foreach ($dirty as $attribute => $value) {\n            // If the model has this attribute as ignored for logs, skip it\n            if (in_array($attribute, $ignoredAttributes)) {\n                continue;\n            }\n            // We log the old value\n            $value = $this->post->getOriginal($attribute);\n            if (Str::endsWith($attribute, '_id')) {\n                // Foreign? Try and get the related model\n                $value = $this->getForeignOriginal($attribute, $value);\n            }\n\n            // If it's not an array, easy work\n            if (! is_array($value)) {\n                $this->changes[$attribute] = $value;\n\n                continue;\n            }\n\n            // An array (config[, moons[) we need to store it differently\n            foreach ($value as $k => $v) {\n                $this->changes[$k] = $v;\n            }\n        }\n\n        return $this->changes;\n    }\n\n    protected function getForeignOriginal(string $attribute, mixed $original): string\n    {\n        if (empty($original)) {\n            return '';\n        }\n\n        try {\n            if ($attribute == 'location_id') {\n                $originalLocation = Location::where('id', $original)->first();\n                if (! empty($originalLocation)) {\n                    return (string) $originalLocation->name;\n                }\n\n                return '';\n            }\n\n            // Let's try based off of the attribute name\n            $relationName = Str::before($attribute, '_id');\n            $relationName = Str::camel($relationName);\n\n            $relationClass = 'App\\Models\\\\' . ucfirst($relationName);\n\n            /** @var MiscModel $relationModel */\n            $relationModel = new $relationClass;\n            /** @var MiscModel $result */\n            $result = $relationModel->where('id', $original)->firstOrFail();\n            if ($result->name) {\n                return $result->name;\n            } else {\n                // @phpstan-ignore-next-line\n                return $result->code;\n            }\n        } catch (Exception $e) {\n            Log::error('Issue with Logger', ['e' => $e->getMessage()]);\n\n            return '';\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/PostService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Facades\\Identity;\nuse App\\Http\\Requests\\MovePostRequest;\nuse App\\Jobs\\EntityMappingJob;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityLog;\nuse App\\Models\\Post;\nuse App\\Services\\EntityMappingService;\nuse App\\Traits\\PostAware;\nuse App\\Traits\\UserAware;\n\nclass PostService\n{\n    use PostAware;\n    use UserAware;\n\n    protected EntityMappingService $mappingService;\n\n    protected int $entityId;\n\n    public function __construct(EntityMappingService $mappingService)\n    {\n        $this->mappingService = $mappingService;\n    }\n\n    /**\n     * Move or copy a post to another entity\n     */\n    public function handle(MovePostRequest $request): Post\n    {\n        $this->entityId = (int) $request->get('entity');\n        if ($request->has('copy')) {\n            return $this->copy();\n        }\n\n        return $this->move();\n    }\n\n    /**\n     * Copy the post with its permissions to another entity\n     */\n    protected function copy(): Post\n    {\n        $entity = Entity::findOrFail($this->entityId);\n        $newPost = $this->post->copyTo($entity, true);\n\n        // Update the \"mentioned in\" mapping for the entity\n        EntityMappingJob::dispatch($newPost);\n\n        $this->log($newPost, EntityLog::ACTION_CREATE_POST);\n\n        return $newPost;\n    }\n\n    /**\n     * Move the post to another entity\n     */\n    protected function move(): Post\n    {\n        foreach ($this->post->imageMentions as $imageMention) {\n            $imageMention->entity_id = $this->entityId;\n            $imageMention->save();\n        }\n        $this->post->entity_id = $this->entityId;\n        $this->post->save();\n\n        $this->log($this->post, EntityLog::ACTION_UPDATE_POST);\n\n        return $this->post;\n    }\n\n    private function log(Post $post, int $action)\n    {\n        $log = new EntityLog;\n        $log->parent_id = $post->id;\n        $log->parent_type = Post::class;\n        $log->created_by = $this->user->id;\n        $log->impersonated_by = Identity::getImpersonatorId();\n        $log->action = $action;\n        $log->save();\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/PreviewService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Module;\nuse App\\Models\\Attribute;\nuse App\\Models\\Character;\nuse App\\Models\\Location;\nuse App\\Models\\MiscModel;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\n\nclass PreviewService\n{\n    use CampaignAware;\n    use EntityAware;\n\n    protected array $profile = [];\n\n    protected array $data = [];\n\n    public function preview(): array\n    {\n        $this->data = [\n            'id' => $this->entity->id,\n            'name' => $this->entity->name,\n            // @phpstan-ignore-next-line\n            'title' => $this->entity->isCharacter() ? $this->entity->child?->title : null,\n            'link' => $this->entity->url(),\n            'image' => $this->image(),\n        ];\n\n        $this->data['status'] = $this->status();\n        $this->data['tags'] = $this->tags();\n        $this->data['location'] = $this->location();\n        $this->data['locations'] = $this->locations();\n        $this->data['attributes'] = $this->attributes();\n        $this->data['profile'] = $this->profile();\n        $this->data['connections'] = $this->connections();\n        $this->data['access'] = []; // $this->access();\n\n        $this->data['texts'] = [\n            'profile' => __('crud.tabs.profile'),\n            'connections' => __('search.preview.links'),\n            'no-connections' => __('search.preview.no-connections'),\n        ];\n\n        return $this->data;\n    }\n\n    /**\n     * Load specific stuff from the child for the profile\n     */\n    protected function profile(): array\n    {\n        if ($this->entity->entityType->isCustom()) {\n            if (! empty($this->entity->type)) {\n                $this->addProfile('crud.fields.type', 'type', $this->entity->type);\n            }\n        } else {\n            /** @var MiscModel|Character $child */\n            $child = $this->entity->child;\n            if (! empty($this->entity->type)) {\n                $this->addProfile('crud.fields.type', 'type', $this->entity->type);\n            }\n        }\n\n        // Entity-specific content?\n        if ($this->entity->isCharacter() && ! $this->entity->isMissingChild()) {\n            /** @var Character $child */\n            // @phpstan-ignore-next-line\n            $this->characterProfile($child);\n        }\n\n        return $this->profile;\n    }\n\n    protected function image(): mixed\n    {\n        return Avatar::entity($this->entity)->size(276)->thumbnail();\n    }\n\n    protected function attributes(): array\n    {\n        $attributes = [];\n        /** @var Attribute $attr */\n        foreach ($this->entity->starredAttributes() as $attr) {\n            if ($attr->isCheckbox()) {\n                $val = __('general.no');\n                if ($attr->value) {\n                    $val = '<i class=\"fa-solid fa-check\" aria-hidden=\"true\"></i>';\n                }\n                $attributes[] = [\n                    'id' => $attr->id,\n                    'name' => $attr->name(),\n                    'value' => $val,\n                ];\n\n                continue;\n            }\n            $attributes[] = [\n                'id' => $attr->id,\n                'name' => $attr->name(),\n                'value' => $attr->mappedValue(),\n            ];\n        }\n\n        return $attributes;\n    }\n\n    protected function tags(): array\n    {\n        $tags = [];\n        foreach ($this->entity->tags()->with('entity')->get() as $tag) {\n            $tags[] = [\n                'id' => $tag->id,\n                'name' => $tag->name,\n                'icon' => $tag->icon,\n                'colour' => $tag->colour,\n                'style' => $tag->colourStyle(),\n                'link' => $tag->getLink(),\n                'slug' => $tag->slug,\n            ];\n        }\n\n        return $tags;\n    }\n\n    protected function location(): mixed\n    {\n        if ($this->entity->entityType->isCustom()) {\n            return null;\n        }\n        /** @var ?Location $loc */\n        $loc = null;\n        if (method_exists($this->entity->child, 'location') && ! empty($this->entity->child->location)) {\n            $loc = $this->entity->child->location;\n        }\n        if (method_exists($this->entity->child, 'parent_location') && ! empty($this->entity->child->parent_location)) {\n            $loc = $this->entity->child->parent_location;\n        }\n\n        if (empty($loc)) {\n            return null;\n        }\n\n        return [\n            'name' => $loc->name,\n            'link' => $loc->getLink(),\n        ];\n    }\n\n    protected function locations(): ?array\n    {\n        if ($this->entity->locations->isEmpty()) {\n            return null;\n        }\n\n        $locations = [];\n        foreach ($this->entity->locations as $location) {\n            $locations[] = [\n                'name' => $location->name,\n                'link' => $location->getLink(),\n            ];\n        }\n\n        return $locations;\n    }\n\n    protected function connections(): array\n    {\n        $relations = [];\n\n        foreach ($this->entity->pinnedRelations as $relation) {\n            if (! $relation->target) {\n                continue;\n            }\n            $rel = [\n                'id' => $relation->target->id,\n                'name' => $relation->target->name,\n                'type' => $relation->relation,\n                'image' => Avatar::entity($relation->target)->size(64)->thumbnail(),\n                'link' => $relation->target->url(),\n            ];\n\n            $relations[] = $rel;\n        }\n\n        return $relations;\n    }\n\n    protected function characterProfile(Character $child): void\n    {\n        if ($child->characterFamilies->isNotEmpty()) {\n            $races = $child->characterFamilies->pluck('family.name')->toArray();\n            $key = Module::plural(config('entities.ids.family'), 'entities.families');\n            $this->addProfile($key, 'families', implode(', ', $races));\n        }\n\n        if ($child->characterRaces->isNotEmpty()) {\n            $races = $child->characterRaces->pluck('race.name')->toArray();\n            $key = Module::plural(config('entities.ids.race'), 'entities.races');\n            $this->addProfile($key, 'races', implode(', ', $races));\n        }\n\n        if ($child->age) {\n            $this->addProfile('characters.fields.age', 'age', $child->age);\n        }\n\n        if ($child->sex) {\n            $this->addProfile('characters.fields.sex', 'gender', $child->sex);\n        }\n\n        if ($child->pronouns) {\n            $this->addProfile('characters.fields.pronouns', 'pronouns', $child->pronouns);\n        }\n\n    }\n\n    protected function status(): ?array\n    {\n        $status = $this->entity->status;\n        if (! $status?->icon) {\n            return null;\n        }\n\n        $status->setRelation('entityType', $this->entity->entityType);\n\n        return [\n            'icon' => $status->icon(),\n            'tooltip' => $status->name(),\n        ];\n    }\n\n    protected function addProfile(string $key, string $slug, mixed $value = null): void\n    {\n        $this->profile[] = [\n            'field' => __($key),\n            'slug' => $slug,\n            'value' => $value,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/PrivacyService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Enums\\Permission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\Entity;\nuse App\\Models\\User;\n\nclass PrivacyService\n{\n    protected array $data;\n\n    protected Entity $entity;\n\n    public function entity(Entity $entity): self\n    {\n        $this->entity = $entity;\n\n        return $this;\n    }\n\n    public function visibilities(): array\n    {\n        $this->data = ['roles' => [], 'users' => []];\n\n        /** @var CampaignRole[] $roles */\n        $roles = $this->entity->campaign->roles()->with('permissions')->get();\n        foreach ($roles as $role) {\n            if ($role->isAdmin()) {\n                continue;\n            }\n            // General role permission\n            $perm = $role->permissions\n                ->where('action', Permission::View->value)\n                ->whereNull('entity_id')\n                ->where('entity_type_id', $this->entity->type_id);\n            if ($perm->count() > 0) {\n                // Add unless it's on the entity denied\n                $subPerm = $role->permissions\n                    ->where('action', Permission::View->value)\n                    ->where('entity_id', $this->entity->id)\n                    ->where('access', 0);\n                if ($subPerm->count() === 0) {\n                    $this->data['roles'][] = $role;\n\n                    continue;\n                }\n            }\n            // Specific entity\n            $perm = $role->permissions\n                ->where('action', Permission::View->value)\n                ->where('entity_id', $this->entity->id)\n                ->where('access', 1);\n            if ($perm->count() > 0) {\n                $this->data['roles'][] = $role;\n            }\n        }\n\n        $this->members();\n\n        return $this->data;\n    }\n\n    public function toggle(): self\n    {\n        return $this;\n    }\n\n    protected function members(): self\n    {\n        /** @var User[] $users[] */\n        $users = $this->entity->campaign->users()->with('permissions')->get();\n        foreach ($users as $user) {\n            // Specific entity\n            $perm = $user->permissions\n                ->where('campaign_id', $this->entity->campaign_id)\n                ->where('action', Permission::View->value)\n                ->where('entity_id', $this->entity->id)\n                ->where('access', 1);\n            if ($perm->count() > 0) {\n                $this->data['users'][] = $user;\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/PurgeService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\CharacterCache;\nuse App\\Facades\\EntityCache;\nuse App\\Facades\\Images;\nuse App\\Models\\Entity;\nuse App\\Models\\Location;\nuse App\\Models\\MiscModel;\nuse Exception;\n\nclass PurgeService\n{\n    /** @var array Entity IDs to be deleted */\n    protected array $entityIds = [];\n\n    /** @var array Child IDs to be deleted */\n    protected array $childIds = [];\n\n    /** @var int Number of total deleted entities */\n    protected int $count = 0;\n\n    public function count(): int\n    {\n        return $this->count;\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function trash(Entity $entity): void\n    {\n        EntityCache::campaign($entity->campaign);\n\n        if ($entity->hasChild()) {\n            /** @var MiscModel $child */\n            // @phpstan-ignore-next-line\n            $child = $entity->child()->onlyTrashed()->first();\n            $this->trashChild($entity, $child);\n        }\n\n        $this->entityIds[] = $entity->id;\n        $entity->forceDelete();\n\n        if (isset($child)) {\n            Images::model($child)->field('image')->cleanup();\n        }\n\n        $this->count++;\n    }\n\n    /**\n     * @throws Exception\n     */\n    protected function trashChild(Entity $entity, ?MiscModel $child = null)\n    {\n        if (empty($child)) {\n            return false;\n        }\n\n        // Set the campaign scope to avoid hitting entities of other campaigns (this can happen with\n        // nested modules)\n        // This probably is no longer the case since.\n        CampaignLocalization::setConsoleCampaign($entity->campaign_id);\n\n        // Detach children of this entity via entities.parent_id\n        foreach ($entity->children as $childEntity) {\n            if ($childEntity->campaign_id != $entity->campaign_id) {\n                throw new Exception(\n                    'Found a child entity that doesn\\'t share the campaign id. '\n                    . $childEntity->id . ' and ' . $entity->id\n                );\n            }\n            $childEntity->parent_id = null;\n            $childEntity->timestamps = false;\n            $childEntity->saveQuietly();\n            dump('#' . $entity->id . ' child entity #' . $childEntity->id . ' untreed');\n        }\n\n        // Clean up the parent to avoid cascading deletes\n        $entity->parent_id = null;\n        $entity->timestamps = false;\n        $entity->saveQuietly();\n\n        $this->childIds[$entity->entityType->code][] = $child->id;\n\n        // Cleanup any images attached to the child.\n        Images::model($child)->field('image')->cleanup();\n\n        if ($child instanceof Location && ! empty($child->map)) {\n            Images::model($child)->field('map')->cleanup();\n        }\n\n        CharacterCache::campaign($entity->campaign);\n        $child->forceDelete();\n\n        // Unset the campaign id limitation again\n        CampaignLocalization::setConsoleCampaign(0);\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/RecoveryService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass RecoveryService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function recover(array $ids): array\n    {\n        $entities = [];\n        foreach ($ids as $id) {\n            $url = $this->entity($id);\n            if ($url) {\n                $entities[$id] = $url;\n            }\n        }\n\n        return $entities;\n    }\n\n    /**\n     * Restore an entity and it's child\n     */\n    protected function entity(int $id): ?string\n    {\n        /** @var ?Entity $entity */\n        $entity = Entity::onlyTrashed()->find($id);\n        if (! $entity) {\n            return null;\n        }\n\n        $entity->restore();\n        if ($entity->entityType->isCustom()) {\n            return $entity->url();\n        }\n\n        // Sometimes the child is soft-deleted, sometimes not.\n        // Honestly we shouldn't have soft-deleted children and just rely on the entity to reduce complexity.\n        // @phpstan-ignore-next-line\n        $child = $entity->child()->onlyTrashed()->first();\n        if (! $child) {\n            return $entity->url();\n        }\n        // Refresh the child first to not re-trigger the entity creation on save\n        $child->refresh();\n        $child->restoreQuietly();\n\n        return $entity->url();\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/RecoverySetupService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Facades\\Module;\nuse App\\Models\\EntityType;\nuse App\\Services\\Gallery\\StorageService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass RecoverySetupService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected array $elements;\n\n    protected ?string $term;\n\n    protected ?string $nextPage;\n\n    protected array $filters;\n\n    protected StorageService $storage;\n\n    public function __construct(StorageService $storage)\n    {\n        $this->storage = $storage;\n    }\n\n    public function term(?string $term): self\n    {\n        $this->term = $term;\n\n        return $this;\n    }\n\n    public function filters(array $filters): self\n    {\n        $this->filters = $filters;\n\n        return $this;\n    }\n\n    public function setup(): array\n    {\n        return [\n            'acl' => [\n                'premium' => $this->campaign->boosted(),\n            ],\n            'elements' => $this->elements(),\n            'i18n' => $this->i18n(),\n            'api' => [\n                'search' => route('gallery.search', [$this->campaign]),\n                'recovery' => route('recovery.save', [$this->campaign]),\n            ],\n            'upgrade' => $this->upgradeLink(),\n        ];\n    }\n\n    public function search(): array\n    {\n        return [\n            'elements' => $this->elements(),\n        ];\n    }\n\n    protected function elements(): array\n    {\n        // Pre-load all entity types of the campaign for custom module names\n        $moduleNames = [];\n        foreach (EntityType::inCampaign($this->campaign)->get() as $entityType) {\n            $moduleNames[$entityType->id] = $entityType->name();\n        }\n        // Query yields array of objects\n        $elements = DB::select(\n            'select e.id, e.name, e.deleted_at, e.deleted_by, e.type_id, t.code as type\n                from entities as e\n                left join entity_types as t on t.id = e.type_id\n                where e.deleted_at is not null and e.campaign_id = ' . $this->campaign->id . '\n                union all\n                select p.id, p.name, p.deleted_at, p.deleted_by, 0 as type_id, \"post\" as type\n                from posts as p\n                left join entities as e on e.id = p.entity_id\n                where p.deleted_at is not null and e.deleted_at is null and e.campaign_id = ' . $this->campaign->id .\n                ' order by deleted_at DESC'\n        );\n\n        // We fill the rest of the data needed into the objects\n        $data = new Collection;\n        $users = $this->campaign->users()->pluck('users.name', 'users.id')->toArray();\n        foreach ($elements as $key => $element) {\n            // Cast the object to an array for simplicity\n            $row = [\n                'id' => $element->id,\n                'name' => $element->name,\n                'deleted_at' => $element->deleted_at,\n                'type' => $element->type,\n                'type_id' => $element->type_id,\n            ];\n            $row['deleted_name'] = $users[$element->deleted_by] ?? 'Unknown';\n            $row['date'] = Carbon::createFromTimeStamp(strtotime($element->deleted_at))->diffForHumans();\n            $row['position'] = $key;\n            if ($element->type === 'post') {\n                $row['type_name'] = __('entities.article');\n            } else {\n                $row['type'] = 'entity';\n                $row['type_name'] = Arr::get($moduleNames, (int) $element->type_id, __('crud.history.unknown'));\n            }\n\n            $data->add($row);\n        }\n\n        return $data->toArray();\n    }\n\n    protected function i18n(): array\n    {\n        $translations = [\n            'model_0' => __('entities.post'),\n            'order_by_newest' => __('campaigns/recovery.order.newest'),\n            'order_by_oldest' => __('campaigns/recovery.order.oldest'),\n            'order_by_type' => __('campaigns/recovery.order.type'),\n            'select_all' => __('general.select_all'),\n            'deselect_all' => __('general.deselect_all'),\n            'recover' => __('campaigns/recovery.actions.recover'),\n            'restore_selected' => __('campaigns/recovery.actions.recover_selected'),\n            'newest' => __('campaigns/recovery.order.newest_first'),\n            'oldest' => __('campaigns/recovery.order.oldest_first'),\n            'type' => __('campaigns/recovery.order.type_order'),\n            'premium_title' => __('callouts.premium.title'),\n            'premium' => __('campaigns/recovery.premium'),\n            'upgrade' => __('cookieconsent.link'),\n            'confirm' => __('crud.actions.confirm'),\n            'deleted_at' => __('campaigns/recovery.fields.deleted_at', ['date' => 'placeholder', 'user' => 'placeholder']),\n            'recovery_success' => __('campaigns/recovery.name_link', ['name' => '<a href=\"placeholder\" class=\"text-link\">placeholder</a>']),\n\n        ];\n        // Modules\n        $modules = config('entities.ids');\n        foreach ($modules as $name => $id) {\n            $moduleName = __('entities.' . $name);\n            if ($this->campaign->superboosted() && $this->campaign->hasModuleName($id)) {\n                $moduleName = $this->campaign->moduleName($id);\n            }\n            $translations['model_' . $id] = $moduleName;\n        }\n\n        return $translations;\n    }\n\n    protected function upgradeLink(): ?string\n    {\n        if ($this->campaign->boosted()) {\n            return null;\n        }\n\n        return route('settings.premium');\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/RelationService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Http\\Requests\\StoreRelation;\nuse App\\Models\\Relation;\nuse App\\Traits\\CampaignAware;\n\nclass RelationService\n{\n    use CampaignAware;\n\n    protected array $entities;\n\n    protected Relation $new;\n\n    protected int $count;\n\n    public function createRelations(StoreRelation $request): self\n    {\n        $this->count = 0;\n        $data = $request->only([\n            'owner_id', 'attitude', 'relation', 'colour', 'is_pinned', 'two_way', 'visibility_id',\n        ]);\n        $data['campaign_id'] = $this->campaign->id;\n\n        if ($request->has('targets')) {\n            $this->entities = is_array($request->get('targets')) ? $request->get('targets') : [$request->get('targets')];\n        } else {\n            $this->entities = [$request->get('target_id')];\n        }\n        $new = null;\n        foreach ($this->entities as $entity_id) {\n            $data['target_id'] = $entity_id;\n            $relation = new Relation;\n            $relation = $relation->create($data);\n            $this->count++;\n            if (! isset($new)) {\n                $new = $relation;\n            }\n            if ($request->has('two_way')) {\n                $relation->createMirror();\n                $this->count++;\n            }\n        }\n        $this->new = $new;\n\n        return $this;\n    }\n\n    public function getEntities(): array\n    {\n        return $this->entities;\n    }\n\n    public function getNew(): Relation\n    {\n        return $this->new;\n    }\n\n    public function getCount(): int\n    {\n        return $this->count;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/CharacterRelationsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Enums\\OrganisationMemberPin;\nuse App\\Enums\\OrganisationMemberStatus;\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\Character;\nuse App\\Models\\CharacterTrait;\nuse App\\Models\\Family;\nuse App\\Models\\MiscModel;\nuse App\\Models\\OrganisationMember;\nuse App\\Models\\Race;\nuse App\\Observers\\Concerns\\HasMany;\nuse App\\Services\\Entity\\Relations\\Concerns\\SavesLocations;\nuse App\\Services\\Entity\\Relations\\Concerns\\SupportsPatchMode;\nuse App\\Traits\\CreatesEntityFromName;\nuse Illuminate\\Support\\Collection;\n\nclass CharacterRelationsService implements RelationsServiceInterface\n{\n    use CreatesEntityFromName;\n    use HasMany;\n    use SavesLocations;\n    use SupportsPatchMode;\n\n    public function save(MiscModel $model, array $data): void\n    {\n        /** @var Character $model */\n        $this->saveLocations($model, $data);\n        $this->saveTraits($model, 'personality', $data)\n            ->saveTraits($model, 'appearance', $data)\n            ->saveOrganisations($model, $data)\n            ->saveRaces($model, $data)\n            ->saveFamilies($model, $data);\n\n        EntityLogger::model($model)->entity($model->entity)->finish();\n    }\n\n    /** Save character traits for the given section (personality or appearance) */\n    protected function saveTraits(\n        Character $character,\n        string $trait,\n        array $data,\n    ): self {\n        if (\n            $trait === 'personality' &&\n            ! auth()->user()->can('personality', $character)\n        ) {\n            return $this;\n        }\n\n        if ($this->isPatch && ! array_key_exists($trait . '_name', $data)) {\n            return $this;\n        }\n\n        $existing = [];\n        foreach ($character->characterTraits()->{$trait}()->get() as $pers) {\n            $existing[$pers->id] = $pers;\n        }\n\n        $traitOrder = 0;\n        $traitNames = (array) ($data[$trait . '_name'] ?? []);\n        $traitEntry = (array) ($data[$trait . '_entry'] ?? []);\n\n        foreach ($traitNames as $id => $name) {\n            if (empty($name)) {\n                continue;\n            }\n\n            if (! empty($existing[$id])) {\n                $model = $existing[$id];\n                unset($existing[$id]);\n            } else {\n                $model = new CharacterTrait;\n                $model->character_id = $character->id;\n                $model->section_id =\n                    $trait === 'personality'\n                        ? CharacterTrait::SECTION_PERSONALITY\n                        : CharacterTrait::SECTION_APPEARANCE;\n                EntityLogger::dirty('traits', null);\n            }\n            $model->name = $name;\n            $model->entry = $traitEntry[$id] ?? ''; // Defensive: API callers may omit entry keys for a given trait\n            $model->default_order = $traitOrder;\n            $model->save();\n            $traitOrder++;\n        }\n\n        foreach ($existing as $id => $model) {\n            $model->delete();\n            EntityLogger::dirty('traits', null);\n        }\n\n        return $this;\n    }\n\n    /** Save organisation memberships for the given character */\n    protected function saveOrganisations(\n        Character $character,\n        array $data,\n    ): self {\n        if (! array_key_exists('character_save_organisations', $data)) {\n            return $this;\n        }\n\n        $existing = [];\n        foreach (\n            $character->organisationMemberships()->has('organisation')->get() as $org\n        ) {\n            $existing[$org->id] = $org;\n        }\n\n        $organisations = (array) ($data['organisations'] ?? []);\n        $roles = new Collection($data['organisation_roles'] ?? []);\n        $statuses = new Collection($data['organisation_statuses'] ?? []);\n        $pins = new Collection($data['organisation_pins'] ?? []);\n        $privates = new Collection($data['organisation_privates'] ?? []);\n\n        $newRoles = new Collection;\n        foreach ($roles as $id => $role) {\n            if (empty($id)) {\n                $newRoles->push($role);\n            }\n        }\n\n        $newStatuses = new Collection;\n        foreach ($statuses as $id => $status) {\n            if (empty($id)) {\n                $newStatuses->push($status);\n            }\n        }\n\n        $newPins = new Collection;\n        foreach ($pins as $id => $pin) {\n            if (empty($id)) {\n                $newPins->push($pin);\n            }\n        }\n\n        $newPrivates = new Collection;\n        foreach ($privates as $id => $private) {\n            if (empty($id)) {\n                $newPrivates->push($private);\n            }\n        }\n\n        foreach ($organisations as $key => $id) {\n            if (empty($id)) {\n                continue;\n            }\n\n            if (! empty($existing[$key])) {\n                $model = $existing[$key];\n                unset($existing[$key]);\n            } else {\n                $model = new OrganisationMember;\n                $model->character_id = $character->id;\n                EntityLogger::dirty('organisations', null);\n            }\n            $model->organisation_id = (int) $id;\n            $model->role = $roles->has($key)\n                ? $roles->get($key, '')\n                : $newRoles->shift();\n            $model->pin_id = OrganisationMemberPin::tryFrom(\n                (int) ($pins->has($key)\n                    ? $pins->get($key, '')\n                    : $newPins->shift()),\n            );\n            $model->status_id = OrganisationMemberStatus::from(\n                (int) ($statuses->has($key)\n                    ? $statuses->get($key, '')\n                    : $newStatuses->shift()),\n            );\n            if (array_key_exists('organisation_privates', $data)) {\n                $model->is_private = $privates->has($key)\n                    ? $privates->get($key, false)\n                    : $newPrivates->shift();\n            } else {\n                $model->is_private = false;\n            }\n            $model->save();\n        }\n\n        foreach ($existing as $id => $model) {\n            $model->delete();\n            EntityLogger::dirty('organisations', null);\n        }\n\n        return $this;\n    }\n\n    /** Save race associations for the given character */\n    protected function saveRaces(Character $character, array $data): self\n    {\n        if (\n            ! array_key_exists('save_races', $data) &&\n            ! array_key_exists('races', $data)\n        ) {\n            return $this;\n        }\n\n        $races = $this->resolveNewModels(\n            $data['races'] ?? [],\n            Race::class,\n            config('entities.ids.race'),\n        );\n        $this->saveMany(\n            $character,\n            'races',\n            $races,\n            Race::class,\n            'characterRaces',\n            'race_id',\n        );\n\n        return $this;\n    }\n\n    /** Save family associations for the given character */\n    protected function saveFamilies(Character $character, array $data): self\n    {\n        if (\n            ! array_key_exists('save_families', $data) &&\n            ! array_key_exists('families', $data)\n        ) {\n            return $this;\n        }\n\n        $families = $this->resolveNewModels(\n            $data['families'] ?? [],\n            Family::class,\n            config('entities.ids.family'),\n        );\n        $this->saveMany($character, 'families', $families, Family::class);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/Concerns/SavesLocations.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations\\Concerns;\n\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\Relations\\LocationRelationsService;\n\ntrait SavesLocations\n{\n    protected function saveLocations(MiscModel $model, array $data): void\n    {\n        app(LocationRelationsService::class)->save($model, $data);\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/Concerns/SupportsPatchMode.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations\\Concerns;\n\ntrait SupportsPatchMode\n{\n    protected bool $isPatch = false;\n\n    public function patch(): static\n    {\n        $this->isPatch = true;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/CreatureRelationsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\Creature;\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\Relations\\Concerns\\SavesLocations;\nuse App\\Services\\Entity\\Relations\\Concerns\\SupportsPatchMode;\n\nclass CreatureRelationsService implements RelationsServiceInterface\n{\n    use SavesLocations;\n    use SupportsPatchMode;\n\n    public function save(MiscModel $model, array $data): void\n    {\n        /** @var Creature $model */\n        $this->saveLocations($model, $data);\n        EntityLogger::model($model)->entity($model->entity)->finish();\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/EntityRelationsServiceFactory.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Models\\Entity;\n\nclass EntityRelationsServiceFactory\n{\n    public function __construct(\n        protected CharacterRelationsService $characterRelationsService,\n        protected CreatureRelationsService $creatureRelationsService,\n        protected EventRelationsService $eventRelationsService,\n        protected FamilyRelationsService $familyRelationsService,\n        protected ItemRelationsService $itemRelationsService,\n        protected OrganisationRelationsService $organisationRelationsService,\n        protected LocationRelationsService $locationRelationsService,\n        protected RaceRelationsService $raceRelationsService,\n    ) {}\n\n    public function for(Entity $entity): ?RelationsServiceInterface\n    {\n        return match ($entity->entityType->code) {\n            'character' => $this->characterRelationsService,\n            'creature' => $this->creatureRelationsService,\n            'event' => $this->eventRelationsService,\n            'family' => $this->familyRelationsService,\n            'item' => $this->itemRelationsService,\n            'organisation' => $this->organisationRelationsService,\n            'location' => $this->locationRelationsService,\n            'race' => $this->raceRelationsService,\n            default => null,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/EventRelationsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\Event;\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\Relations\\Concerns\\SavesLocations;\nuse App\\Services\\Entity\\Relations\\Concerns\\SupportsPatchMode;\n\nclass EventRelationsService implements RelationsServiceInterface\n{\n    use SavesLocations;\n    use SupportsPatchMode;\n\n    public function save(MiscModel $model, array $data): void\n    {\n        /** @var Event $model */\n        $this->saveLocations($model, $data);\n        EntityLogger::model($model)->entity($model->entity)->finish();\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/FamilyRelationsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\Character;\nuse App\\Models\\Family;\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\Relations\\Concerns\\SavesLocations;\nuse App\\Services\\Entity\\Relations\\Concerns\\SupportsPatchMode;\n\nclass FamilyRelationsService implements RelationsServiceInterface\n{\n    use SavesLocations;\n    use SupportsPatchMode;\n\n    public function save(MiscModel $model, array $data): void\n    {\n        /** @var Family $model */\n        $this->saveLocations($model, $data);\n        $this->saveMembers($model, $data);\n        EntityLogger::model($model)->entity($model->entity)->finish();\n    }\n\n    /** Save family members from submitted data */\n    protected function saveMembers(Family $family, array $data): void\n    {\n        if (! array_key_exists('sync_family_members', $data)) {\n            return;\n        }\n\n        $ids = (array) ($data['members'] ?? []);\n\n        $existing = [];\n        foreach ($family->members as $member) {\n            $existing['m_' . $member->id] = $member;\n        }\n\n        foreach ($ids as $id) {\n            if (! empty($existing[$id])) {\n                unset($existing[$id]);\n            } else {\n                $character = Character::find($id);\n                if (! empty($character)) {\n                    $character->families()->attach($family->id);\n                    EntityLogger::dirty('members', null);\n                }\n            }\n        }\n\n        foreach ($existing as $k) {\n            $k->families()->detach($family->id);\n            EntityLogger::dirty('members', null);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/ItemRelationsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Models\\Entity;\nuse App\\Models\\Item;\nuse App\\Models\\MiscModel;\nuse App\\Observers\\Concerns\\HasMany;\nuse App\\Services\\Entity\\Relations\\Concerns\\SavesLocations;\nuse App\\Services\\Entity\\Relations\\Concerns\\SupportsPatchMode;\nuse App\\Traits\\CreatesEntityFromName;\n\nclass ItemRelationsService implements RelationsServiceInterface\n{\n    use CreatesEntityFromName;\n    use HasMany;\n    use SavesLocations;\n    use SupportsPatchMode;\n\n    public function save(MiscModel $model, array $data): void\n    {\n        /** @var Item $model */\n        $this->saveLocations($model, $data);\n\n        if (! array_key_exists('save_creators', $data) && ! array_key_exists('creators', $data)) {\n            return;\n        }\n\n        $creators = $data['creators'] ?? [];\n        $this->saveMany($model, 'creators', $creators, Entity::class, 'itemCreators', 'creator_id');\n\n        // Note: EntityLogger::finish() is intentionally not called here.\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/LocationRelationsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Facades\\Domain;\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\Entity;\nuse App\\Models\\Location;\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\Relations\\Concerns\\SupportsPatchMode;\nuse App\\Traits\\CreatesEntityFromName;\n\nclass LocationRelationsService implements RelationsServiceInterface\n{\n    use CreatesEntityFromName;\n    use SupportsPatchMode;\n\n    public function save(MiscModel $model, array $data): void\n    {\n        $hasLocations = array_key_exists('locations', $data);\n        $hasSaveLocations = array_key_exists('save_locations', $data);\n\n        if (! $hasLocations && ! $hasSaveLocations) {\n            return;\n        }\n\n        if (Domain::isApi() && ! $hasLocations) {\n            return;\n        }\n\n        $this->syncLocations($model->entity, (array) ($data['locations'] ?? []), true);\n    }\n\n    /**\n     * Add-only location attach — used by BulkService which passes an explicit ID array\n     * and never wants to detach existing locations.\n     */\n    public function attach(Entity $entity, array $locationIds): void\n    {\n        $this->syncLocations($entity, $locationIds, false);\n    }\n\n    /** Sync entity locations, optionally detaching removed ones */\n    protected function syncLocations(Entity $entity, array $locations, bool $detach): void\n    {\n        $existing = $unique = $recreate = [];\n        foreach ($entity->locations as $location) {\n            if (! empty($existing[$location->id])) {\n                $recreate[$location->id] = $location->id;\n                $entity->locations()->detach($location->id);\n\n                continue;\n            }\n            $existing[$location->id] = $location->id;\n            $unique[$location->id] = $location->id;\n        }\n\n        if (! empty($recreate)) {\n            $entity->locations()->attach($recreate, ['created_by' => auth()->user()?->id]);\n        }\n\n        $newLocations = [];\n        $newNames = [];\n        foreach ($locations as $id) {\n            if (! empty($existing[$id])) {\n                unset($existing[$id]);\n\n                continue;\n            }\n            if (! empty($unique[$id])) {\n                continue;\n            }\n            if (! is_numeric($id)) {\n                $newNames[] = $id;\n\n                continue;\n            }\n            $location = Location::find($id);\n            if (empty($location)) {\n                continue;\n            }\n            $newLocations[] = $location->id;\n            EntityLogger::dirty('locations', null);\n        }\n\n        foreach ($this->resolveNewModels($newNames, Location::class, config('entities.ids.location')) as $newId) {\n            $newLocations[] = $newId;\n            EntityLogger::dirty('locations', null);\n        }\n\n        $entity->locations()->attach($newLocations, ['created_by' => auth()->user()?->id]);\n\n        if ($detach && ! empty($existing)) {\n            $entity->locations()->detach($existing);\n            EntityLogger::dirty('locations', null);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/OrganisationRelationsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\Character;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Organisation;\nuse App\\Models\\OrganisationMember;\nuse App\\Services\\Entity\\Relations\\Concerns\\SavesLocations;\nuse App\\Services\\Entity\\Relations\\Concerns\\SupportsPatchMode;\n\nclass OrganisationRelationsService implements RelationsServiceInterface\n{\n    use SavesLocations;\n    use SupportsPatchMode;\n\n    public function save(MiscModel $model, array $data): void\n    {\n        /** @var Organisation $model */\n        $this->saveLocations($model, $data);\n        $this->saveMembers($model, $data);\n        EntityLogger::model($model)->entity($model->entity)->finish();\n    }\n\n    /** Save organisation members from submitted data */\n    protected function saveMembers(Organisation $organisation, array $data): void\n    {\n        if (! array_key_exists('sync_org_members', $data)) {\n            return;\n        }\n\n        $ids = (array) ($data['members'] ?? []);\n\n        $existing = [];\n        foreach ($organisation->members()->has('character')->get() as $member) {\n            $existing['m_' . $member->id] = $member;\n        }\n\n        foreach ($ids as $id) {\n            if (! empty($existing[$id])) {\n                unset($existing[$id]);\n            } else {\n                $character = Character::find($id);\n                if (! empty($character)) {\n                    OrganisationMember::create([\n                        'organisation_id' => $organisation->id,\n                        'character_id' => $character->id,\n                    ]);\n                    EntityLogger::dirty('members', null);\n                }\n            }\n        }\n\n        foreach ($existing as $k) {\n            $k->delete();\n            EntityLogger::dirty('members', null);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/RaceRelationsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Race;\nuse App\\Services\\Entity\\Relations\\Concerns\\SavesLocations;\nuse App\\Services\\Entity\\Relations\\Concerns\\SupportsPatchMode;\n\nclass RaceRelationsService implements RelationsServiceInterface\n{\n    use SavesLocations;\n    use SupportsPatchMode;\n\n    public function save(MiscModel $model, array $data): void\n    {\n        /** @var Race $model */\n        $this->saveLocations($model, $data);\n        EntityLogger::model($model)->entity($model->entity)->finish();\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/Relations/RelationsServiceInterface.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity\\Relations;\n\nuse App\\Models\\MiscModel;\n\ninterface RelationsServiceInterface\n{\n    public function save(MiscModel $model, array $data): void;\n\n    public function patch(): static;\n}\n"
  },
  {
    "path": "app/Services/Entity/RemindableService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Enums\\EntityEventTypes;\nuse App\\Models\\Calendar;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\Reminder;\nuse App\\Traits\\RequestAware;\nuse Exception;\n\nclass RemindableService\n{\n    use RequestAware;\n\n    public function save(Post|Entity $model)\n    {\n\n        // The user is editing an entity with a calendar, but doesn't have the permission to see\n        // the calendar? We skip any work.\n        if ($this->request->has('calendar_skip')) {\n            return;\n        }\n\n        // Previously, this lookup was only triggered when the calendar_id or date was dirty. However, this excludes just\n        // changing the colour or periodicity. To support the API not overriding the values, we still check to make\n        // sure that the calendar_id property is set.\n        if (! $this->request->has('calendar_id')) {\n            return;\n        }\n\n        $calendarID = $this->request->post('calendar_id');\n\n        // We already had this event linked\n        $reminder = $model->calendarReminder();\n\n        if ($reminder !== null) {\n            // We no longer have a calendar attached to this model\n            if ($calendarID === null) {\n                $reminder->delete();\n\n                return;\n            }\n        } else {\n            $reminder = new Reminder;\n            if ($model instanceof Post) {\n                $reminder->remindable_type = Post::class;\n                $reminder->remindable_id = $model->id;\n            } else {\n                $reminder->remindable_type = Entity::class;\n                $reminder->remindable_id = $model->id;\n            }\n        }\n\n        // Validate the calendar\n        /** @var ?Calendar $calendar */\n        $calendar = Calendar::find($calendarID);\n\n        if ($calendar === null || $calendar->missingDetails()) {\n            return;\n        }\n\n        $length = $this->request->post('calendar_length', '1');\n        $length = max(1, $length);\n        $reminder->calendar_id = $this->request->get('calendar_id');\n        $reminder->year = (int) $this->request->post('calendar_year', '1');\n        $reminder->month = (int) $this->request->post('calendar_month', '1');\n        $reminder->day = (int) $this->request->post('calendar_day', '1');\n        $reminder->length = $length;\n        $reminder->is_recurring = (bool) $this->request->post('calendar_is_recurring');\n        $reminder->recurring_periodicity = $this->request->post('calendar_recurring_periodicity');\n        $reminder->colour = $this->request->post('calendar_colour', '#cccccc');\n        $reminder->type_id = EntityEventTypes::calendarDate;\n        try {\n            $reminder->save();\n            $model->setRelation('calendarDate', $reminder);\n        } catch (Exception $e) {\n            // Something went wrong, silence the issue\n            throw $e;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/ShareService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\n\nclass ShareService\n{\n    use CampaignAware;\n    use EntityAware;\n\n    /**\n     * Share the entity with the public role using entity-level permissions.\n     */\n    public function shareEntity(): self\n    {\n        $publicRole = $this->campaign->roles()->public()->first();\n\n        if ($this->entity->is_private) {\n            $this->entity->update(['is_private' => false]);\n        }\n\n        CampaignPermission::updateOrCreate(\n            [\n                'campaign_id' => $this->campaign->id,\n                'campaign_role_id' => $publicRole->id,\n                'entity_id' => $this->entity->id,\n                'action' => CampaignPermission::ACTION_READ,\n            ],\n            [\n                'access' => true,\n            ]\n        );\n\n        $this->entity->refresh();\n\n        return $this;\n    }\n\n    /**\n     * Share all entities of the same type with the public role using global permissions.\n     */\n    public function shareGlobal(): self\n    {\n        $publicRole = $this->campaign->roles()->public()->first();\n\n        CampaignPermission::updateOrCreate(\n            [\n                'campaign_id' => $this->campaign->id,\n                'campaign_role_id' => $publicRole->id,\n                'entity_type_id' => $this->entity->type_id,\n                'entity_id' => null,\n                'action' => CampaignPermission::ACTION_READ,\n            ],\n            [\n                'access' => true,\n            ]\n        );\n\n        $this->entity->refresh();\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/StoryService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Facades\\Identity;\nuse App\\Http\\Requests\\ReorderStories;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityLog;\nuse App\\Models\\Post;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\n\nclass StoryService\n{\n    use EntityAware;\n    use UserAware;\n\n    public function reorder(ReorderStories $request): bool\n    {\n        $posts = $request->get('posts');\n        if (empty($posts)) {\n            return false;\n        }\n\n        // If the story element isn't in first place, we need to have negative starting positions.\n        $position = 0;\n        $storyPosition = array_search('story', array_values($posts));\n        $position -= $storyPosition;\n\n        foreach ($posts as $id => $data) {\n            // We only want to process posts\n            if (! is_array($data) || $data == 'story' || $id === 'story') {\n                continue;\n            }\n            $id = $data['id'];\n            /** @var ?Post $story */\n            $story = $this->entity->posts->where('id', $id)->first();\n            if (empty($story)) {\n                continue;\n            }\n\n            // Collapses status\n            if (isset($data['collapsed'])) {\n                $settings = $story->settings;\n                if ($data['collapsed']) {\n                    $settings['collapsed'] = true;\n                } else {\n                    unset($settings['collapsed']);\n                }\n                $story->settings = $settings;\n            }\n            if (isset($data['visibility_id'])) {\n                $story->visibility_id = $data['visibility_id'];\n            }\n\n            // We want the first post after the story to always have the \"1\" position\n            if ($position === 0) {\n                $position = 1;\n            }\n\n            $story->position = $position;\n            $story->timestamps = false;\n            $story->saveQuietly();\n            $position++;\n        }\n        $this->log();\n\n        return true;\n    }\n\n    /**\n     * Log the changes in the entity_logs table\n     */\n    private function log()\n    {\n        $log = new EntityLog;\n        $log->parent_id = $this->entity->id;\n        $log->parent_type = Entity::class;\n        $log->created_by = $this->user->id;\n        $log->impersonated_by = Identity::getImpersonatorId();\n        $log->action = EntityLog::ACTION_REORDER_POST;\n        $log->save();\n\n        $this->entity->touchSilently();\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/TagService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Tag;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Str;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass TagService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected bool $canCreate;\n\n    protected bool $withNew = false;\n\n    protected bool $withDetach = true;\n\n    protected Model $model;\n\n    protected bool $dirty = false;\n\n    public function withNew(): self\n    {\n        $this->withNew = true;\n\n        return $this;\n    }\n\n    public function model(Model $model): self\n    {\n        $this->model = $model;\n\n        return $this;\n    }\n\n    public function add(array $ids): self\n    {\n        $this->withDetach = false;\n\n        return $this->sync($ids);\n    }\n\n    public function isAllowed(): bool\n    {\n        if (! empty($this->canCreate)) {\n            return $this->canCreate;\n        }\n        $campaign = $this->campaign ?? $this->entity->campaign;\n\n        return $this->canCreate = $this->user->can('create', [\n            $campaign->getEntityTypes()->firstWhere('id', config('entities.ids.tag')),\n            $campaign,\n        ]);\n    }\n\n    public function create(mixed $name): Tag\n    {\n        $tag = new Tag([\n            'name' => Purify::clean($name),\n        ]);\n\n        $tag->campaign_id = isset($this->campaign) ? $this->campaign->id : $this->entity->campaign_id;\n        $tag->slug = Str::slug($tag->name, '');\n        $tag->is_private = false;\n        $tag->saveQuietly();\n        $tag->createEntity();\n\n        return $tag;\n    }\n\n    public function sync(array $ids): self\n    {\n        // Only use tags the user can actually view. This way admins can\n        // have tags on entities that the user doesn't know about.\n        $existing = [];\n        $this->dirty = false;\n        /** @var MiscModel|Entity $model */\n        $model = $this->entity ?? $this->model;\n\n        /** @var Tag[]|Collection $tags */\n        $tags = $model->tags()->with('entity')->has('entity')->get();\n        foreach ($tags as $tag) {\n            $existing[$tag->id] = $tag->name;\n        }\n        $new = [];\n\n        foreach ($ids as $id) {\n            if (! empty($existing[$id])) {\n                unset($existing[$id]);\n            } else {\n                $tag = $this->fetch($id);\n                if (empty($tag)) {\n                    continue;\n                }\n                $new[] = $tag->id;\n                $this->dirty = true;\n                EntityLogger::dirty('tags', null);\n            }\n        }\n        $model->tags()->attach($new);\n\n        // Detach previously existing tags that were not requested\n        if (empty($existing) || ! $this->withDetach) {\n            return $this;\n        }\n        $this->dirty = true;\n        EntityLogger::dirty('tags', null);\n        $model->tags()->detach(array_keys($existing));\n\n        return $this;\n    }\n\n    /**\n     * If the tags of the entity were changed, it gets flagged\n     */\n    public function isDirty(): bool\n    {\n        return $this->dirty;\n    }\n\n    protected function fetch(mixed $id): ?Tag\n    {\n        /** @var ?Tag $tag */\n        $tag = Tag::select(['id', 'name'])->find($id);\n        // Create the tag if the user has permission to do so\n        if (empty($tag) && $this->withNew && $this->isAllowed()) {\n            $tag = $this->create($id);\n        }\n\n        return $tag;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/TemplateService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\PostAware;\n\nclass TemplateService\n{\n    use EntityAware;\n    use PostAware;\n\n    public function toggle(): void\n    {\n        if (isset($this->post)) {\n            $this->post->is_template = ! $this->post->isTemplate();\n            $this->post->save();\n        } else {\n            $this->entity->is_template = ! $this->entity->isTemplate();\n            $this->entity->save();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/TooltipService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Facades\\Mentions;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse Illuminate\\Support\\Str;\n\nclass TooltipService\n{\n    use CampaignAware;\n    use EntityAware;\n\n    /**\n     * Full tooltip used for ajax calls\n     */\n    public function tooltip(): string\n    {\n        $limit = 500;\n        if ($this->campaign->boosted()) {\n            $limit = 1000;\n            // If the campaign is boosted, entities can have a custom tooltip. This allows them to use some\n            // html syntax, and thus a lot more control on what is displayed.\n            $boostedTooltip = strip_tags($this->entity->tooltip);\n            if (! empty(mb_trim($boostedTooltip))) {\n                $text = Mentions::mapEntity($this->entity);\n                $text = strip_tags($text, $this->allowedTooltipTags());\n                if (! empty($text)) {\n                    return '<div>' . nl2br($text) . '<div>';\n                }\n            }\n        }\n\n        if (! method_exists($this->entity, 'parsedEntry')) {\n            return '';\n        }\n        $text = $this->entity->parsedEntry();\n        $text = strip_tags($text, $this->allowedTooltipTags());\n        $text = $this->limitTooltipTextLength($text, $limit);\n\n        return $text;\n    }\n\n    protected function limitTooltipTextLength(string $text, int $limit): string\n    {\n        // Extract links to exclude them from the character count\n        $links = [];\n        preg_match_all('/<a[^>]*>(.*?)<\\/a>/is', $text, $matches, PREG_SET_ORDER);\n\n        foreach ($matches as $index => $match) {\n            // Temporarily replace link with placeholder\n            $placeholder = \"___LINK_{$index}___\";\n            $text = Str::replace($match[0], $placeholder, $text);\n            $links[$placeholder] = $match[0];\n        }\n\n        // Limit text length excluding link placeholders\n        $text = Str::limit($text, $limit);\n\n        // Restore links from placeholders\n        foreach ($links as $placeholder => $link) {\n            $text = Str::replace($placeholder, $link, $text);\n        }\n\n        return $text;\n    }\n\n    /**\n     * Allowed tags in tooltips, allowing Salvatos to do some interesting things with css\n     */\n    protected function allowedTooltipTags(): array\n    {\n        $html = [];\n        foreach (config('purify.configs.tooltips.allowed') as $tag) {\n            $html[] = \"<{$tag}>\";\n        }\n        $html[] = '<br>';\n\n        return $html;\n    }\n}\n"
  },
  {
    "path": "app/Services/Entity/TransformService.php",
    "content": "<?php\n\nnamespace App\\Services\\Entity;\n\nuse App\\Facades\\EntityLogger;\nuse App\\Models\\CategoryStatus;\nuse App\\Models\\Character;\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Models\\OrganisationMember;\nuse App\\Models\\Post;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\EntityTypeAware;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Str;\n\nclass TransformService\n{\n    use CampaignAware;\n    use EntityAware;\n    use EntityTypeAware;\n\n    protected MiscModel $child;\n\n    protected MiscModel|Entity $new;\n\n    protected array $fillable;\n\n    public function child(MiscModel $child): self\n    {\n        $this->child = $child;\n        $this->entity = $child->entity;\n\n        return $this;\n    }\n\n    public function confirm(): array\n    {\n        $confirm = [];\n        if ($this->entity->isTimeline()) {\n            $eras = $this->entity->timeline->eras()->count();\n            if ($eras > 0) {\n                $confirm['timelines.fields.eras'] = $eras;\n            }\n            $elements = $this->entity->timeline->elements()->count();\n            if ($elements > 0) {\n                $confirm['quests.show.tabs.elements'] = $elements;\n            }\n        } elseif ($this->entity->isMap()) {\n            $layers = $this->entity->map->layers()->count();\n            if ($layers > 0) {\n                $confirm['maps.fields.layers'] = $layers;\n            }\n            $groups = $this->entity->map->groups()->count();\n            if ($groups > 0) {\n                $confirm['maps.fields.groups'] = $groups;\n            }\n            $markers = $this->entity->map->markers()->count();\n            if ($markers > 0) {\n                $confirm['maps.fields.markers'] = $markers;\n            }\n        } elseif ($this->entity->isQuest()) {\n            $elements = $this->entity->quest->elements()->count();\n            if ($elements > 0) {\n                $confirm['quests.show.tabs.elements'] = $elements;\n            }\n        }\n\n        return $confirm;\n    }\n\n    public function transform(): Entity\n    {\n        // Custom to custom, just update the type_id\n        if ($this->entity->entityType->isCustom() && $this->entityType->isCustom()) {\n            $this->orphanChildren();\n            $this->entity->type_id = $this->entityType->id;\n            $this->entity->parent_id = null;\n            $this->entity->status_id = $this->defaultStatusId();\n            $this->entity->save();\n\n            return $this->entity;\n        }\n\n        // Custom to child\n        if ($this->entity->entityType->isCustom() && $this->entityType->isStandard()) {\n            return $this->specialToMisc();\n        } elseif ($this->entity->entityType->isStandard() && $this->entityType->isCustom()) {\n            return $this->miscToSpecial();\n        }\n\n        if (empty($this->child) && $this->entity->hasChild()) {\n            $this->child = $this->entity->child;\n        }\n\n        $this->new = $this->entityType->getMiscClass();\n\n        $this\n            ->attributes()\n            ->location()\n            ->removePosts();\n\n        // Finally, we can save. Should be all good.\n        $this->new->campaign_id = $this->child->campaign_id;\n        $this->new->saveQuietly();\n\n        $this\n            ->members()\n            ->participants()\n            ->locations();\n\n        $this->finish();\n\n        return $this->entity;\n    }\n\n    protected function location(): self\n    {\n        // Copy location_id if the new model supports it\n        if (in_array('location_id', $this->fillable) && empty($this->new->location_id) && ! empty($this->child->location_id)) {\n            // @phpstan-ignore-next-line\n            $this->new->location_id = $this->child->location_id;\n        }\n\n        $raceID = config('entities.ids.race');\n        $creatureID = config('entities.ids.creature');\n        $organisationID = config('entities.ids.organisation');\n        $characterID = config('entities.ids.character');\n        $entityLocations = [$raceID, $creatureID, $organisationID, $characterID];\n\n        // If moving from a multi-location to single location\n        if (in_array($this->child->entityTypeId(), $entityLocations) && ! in_array($this->new->entityTypeId(), $entityLocations) && $this->entity->locations->isNotEmpty()) {\n            if (in_array('location_id', $this->fillable)) {\n                // @phpstan-ignore-next-line\n                $this->new->location_id = $this->entity->locations->first()->id;\n            } elseif (in_array('location_id', $this->fillable)) {\n                // @phpstan-ignore-next-line\n                $this->new->setParentId($this->child->locations()->first()->id);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * For entities with multiple locations, they can sometimes be moved around\n     */\n    protected function locations(): self\n    {\n        $raceID = config('entities.ids.race');\n        $creatureID = config('entities.ids.creature');\n        $organisationID = config('entities.ids.organisation');\n        $characterID = config('entities.ids.character');\n        $entityLocations = [$raceID, $creatureID, $organisationID, $characterID];\n\n        // If the entity is switched from one location to entity locations\n        if (! in_array($this->child->entityTypeId(), $entityLocations) && in_array($this->new->entityTypeId(), $entityLocations)) {\n            // If the\n            if (in_array('location_id', $this->child->getFillable()) && ! empty($this->child->location_id)) {\n                $this->entity->locations()->sync([$this->child->location_id]);\n            }\n\n            return $this;\n        }\n\n        if (\n            ! in_array($this->child->entityTypeId(), $entityLocations) ||\n            ! in_array($this->new->entityTypeId(), $entityLocations)\n        ) {\n            if (property_exists($this->child, 'locations')) {\n                // @phpstan-ignore-next-line\n                $this->child->locations()->sync([]);\n            }\n\n            return $this;\n        }\n\n        if (property_exists($this->child, 'locations')) {\n            foreach ($this->child->locations as $loc) {\n                $this->new->locations()->attach($loc->id);\n            }\n        }\n\n        return $this;\n    }\n\n    protected function new(string $class): MiscModel\n    {\n        $class = '\\App\\Models\\\\' . Str::studly($class);\n        try {\n            return app()->make($class);\n        } catch (Exception $e) {\n            throw new Exception(\"Unknown target '{$class}' for transforming entity\");\n        }\n    }\n\n    protected function attributes(): self\n    {\n        $oldAttributes = $this->child->getAttributes();\n        unset($oldAttributes['id']);\n\n        $this->fillable = $this->new->getFillable();\n        foreach ($oldAttributes as $attribute => $value) {\n            if (in_array($attribute, $this->fillable)) {\n                $this->new->{$attribute} = $value;\n            }\n        }\n\n        return $this;\n    }\n\n    protected function removePosts(): self\n    {\n        // Delete non compatible posts.\n        Post::where('entity_id', $this->entity->id)\n            ->leftJoin('post_layouts', 'posts.layout_id', '=', 'post_layouts.id')\n            ->whereNotNull('post_layouts.entity_type_id')\n            ->delete();\n\n        return $this;\n    }\n\n    /**\n     * If switching from an organisation to a family, we need to move the members?\n     */\n    protected function members(): self\n    {\n        if (\n            $this->child->entityTypeId() == config('entities.ids.organisation') &&\n            $this->new->entityTypeId() == config('entities.ids.family')\n        ) {\n            // @phpstan-ignore-next-line\n            foreach ($this->child->members as $member) {\n                $member->delete();\n                // @phpstan-ignore-next-line\n                $this->new->members()->attach($member->character_id);\n            }\n        } elseif (\n            $this->child->entityTypeId() == config('entities.ids.family') &&\n            $this->new->entityTypeId() == config('entities.ids.organisation')\n        ) {\n            // @phpstan-ignore-next-line\n            foreach ($this->child->members as $character) {\n                $orgMember = new OrganisationMember;\n                $orgMember->character_id = $character->id;\n                $orgMember->organisation_id = $this->new->id;\n                $orgMember->role = '';\n                $orgMember->save();\n                // @phpstan-ignore-next-line\n                $this->child->members()->detach($character->id);\n            }\n        } else {\n            // Remove members when they aren't characters\n            if (isset($this->child->members)) {\n                foreach ($this->child->members as $member) {\n                    // We make sure this isn't a character, because a family has members which are\n                    // directly characters while orgs have members which are an in between entity.\n                    if (! $member instanceof Character) {\n                        $member->delete();\n                    }\n                }\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Remove the old participants from a convo\n     */\n    protected function participants(): self\n    {\n        if ($this->child->entityTypeId() != config('entities.ids.character')) {\n            return $this;\n        }\n        // @phpstan-ignore-next-line\n        foreach ($this->child->conversationParticipants as $conPar) {\n            $conPar->delete();\n        }\n\n        return $this;\n    }\n\n    protected function finish(): self\n    {\n        $type = $this->entity->entityType->name();\n        // Update entity to its new type. We don't use a new entity to keep all mentions, attributes and\n        // other related elements attached.\n        $this->entity->type_id = $this->entityType->id;\n        // Clean up the parent\n        $this->entity->parent_id = null;\n        // Reset status to the target category's default\n        $this->entity->status_id = $this->defaultStatusId();\n        // If attached to a misc model, save the entity_id\n        if (isset($this->new)) {\n            $this->entity->entity_id = $this->new->id;\n        }\n        $this->entity->saveQuietly();\n\n        EntityLogger::entity($this->entity)->dirty('entity_type', $type)->update();\n\n        // Delete old, this will take care of pictures and stuff. We detach the\n        // entity to avoid the softDelete affecting it and causing duplicate\n        // entities in the db. ForceDelete the MiscModel for img cleanup.\n        if (isset($this->child)) {\n            $this->child->entity = null;\n\n            // Force delete the old entity to avoid it creating weird issues in the db by being soft deleted.\n            $this->child->forceDelete();\n            unset($this->child);\n        }\n\n        return $this;\n    }\n\n    protected function specialToMisc(): Entity\n    {\n        $firstLocation = $this->entity->locations()->first();\n        $this->orphanChildren();\n\n        // Create misc without calling its observers, to not create duplicates\n        $this->new = $this->entityType->getMiscClass();\n        $this->new->name = $this->entity->name;\n        $this->new->is_private = $this->entity->is_private;\n        $this->new->campaign_id = $this->campaign->id;\n        if ($firstLocation && $this->new->isFillable('location_id')) {\n            // @phpstan-ignore-next-line\n            $this->new->location_id = $firstLocation->id;\n        }\n        $this->new->save();\n\n        // We need to get rid of the entity's locations, for now. In a future refactor, we can hopefully skip this part\n        if (method_exists($this->new, 'locations')) {\n            $this->new->locations()->sync($this->entity->locations()->get()->pluck('id'));\n        } elseif (method_exists($this->new, 'entityLocations')) {\n            // Characters use the entity.locations table so no mess needed.\n            // todo: races, orgs, families, creatures\n        } else {\n            $this->entity->locations()->sync([]);\n        }\n\n        $this->finish();\n\n        return $this->entity;\n    }\n\n    protected function miscToSpecial(): Entity\n    {\n        $this->child = $this->entity->child;\n\n        // Transfer over location_id to entityLocations\n        // @phpstan-ignore-next-line\n        if ($this->child->isFillable('location_id') && $this->child->location_id) {\n            $this->entity->locations()->sync([$this->child->location_id]);\n        }\n\n        $this->finish();\n\n        return $this->entity;\n    }\n\n    protected function defaultStatusId(): ?int\n    {\n        return CategoryStatus::where('category_id', $this->entityType->id)\n            ->where('is_default', true)\n            ->value('id');\n    }\n\n    protected function orphanChildren(): void\n    {\n        /** @var Entity $child */\n        foreach ($this->entity->children as $child) {\n            $child->parent_id = null;\n            $child->save();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/EntityFileService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Exceptions\\TranslatableException;\nuse App\\Facades\\Limit;\nuse App\\Http\\Requests\\StoreEntityAsset;\nuse App\\Http\\Requests\\StoreEntityAssets;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\Image;\nuse App\\Services\\Gallery\\StorageService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Str;\n\nclass EntityFileService\n{\n    use CampaignAware;\n    use EntityAware;\n\n    protected array $files;\n\n    /**\n     * @throws TranslatableException\n     */\n    public function upload(StoreEntityAsset|StoreEntityAssets $request, string $field = 'files'): self\n    {\n        /** @var StorageService $service */\n        $service = app()->make(StorageService::class);\n        $this->files = [];\n\n        // Prepare the file for the journey\n        $uploadedFiles = $request->file($field);\n        if (! is_array($uploadedFiles)) {\n            $uploadedFiles = [$uploadedFiles];\n        }\n        $files = [];\n        foreach ($uploadedFiles as $uploadedFile) {\n            // Already above max capacity?\n            if (! $request->user()->can('addFile', [$this->entity, $this->campaign])) {\n                throw (new TranslatableException('crud.files.errors.max'))\n                    ->setOptions(['max' => Limit::campaign($this->campaign)->entityFiles()]);\n            }\n            if ($service->campaign($this->campaign)->available() < $uploadedFile->getSize() / 1024) {\n                $key = 'gallery.download.errors.gallery_full_free';\n                if ($this->campaign->boosted()) {\n                    $key = 'gallery.download.errors.gallery_full_premium';\n                }\n                throw new TranslatableException($key);\n            }\n\n            $name = $request->get('name');\n            if (empty($name)) {\n                $name = $uploadedFile->getClientOriginalName();\n                $name = Str::limit(Str::beforeLast($name, '.'), 45, '');\n            }\n\n            $image = new Image;\n            $image->campaign_id = $this->campaign->id;\n            $image->ext = $uploadedFile->extension();\n            $image->size = (int) ceil($uploadedFile->getSize() / 1024); // kb\n            $image->name = mb_substr($name, 0, 45);\n            $image->visibility_id = $this->campaign->defaultGalleryVisibility();\n            $image->save();\n\n            $uploadedFile\n                ->storePubliclyAs(\n                    $image->folder,\n                    $image->file,\n                    ['disk' => 's3']\n                );\n\n            $file = new EntityAsset;\n            $file->type_id = EntityAssetType::file;\n            $file->entity_id = $this->entity->id;\n            $file->metadata = [\n                'size' => $uploadedFile->getSize(),\n                'type' => $uploadedFile->getMimeType(),\n            ];\n            $file->name = $name;\n            $file->visibility_id = $request->get('visibility_id', 1);\n            $file->is_pinned = $request->get('is_pinned', 1);\n            $file->image_uuid = $image->id;\n            $file->save();\n\n            Cache::forget('campaign_' . $this->campaign->id . '_gallery');\n            $this->files[] = $file;\n        }\n\n        return $this;\n    }\n\n    public function files(): array\n    {\n        return $this->files;\n    }\n}\n"
  },
  {
    "path": "app/Services/EntityMappingService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityMention;\nuse App\\Models\\EntityType;\nuse App\\Models\\Image;\nuse App\\Models\\ImageMention;\nuse App\\Models\\Post;\nuse App\\Models\\QuestElement;\nuse App\\Models\\TimelineElement;\nuse App\\Traits\\MentionTrait;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\n\nclass EntityMappingService\n{\n    use MentionTrait;\n\n    protected Model|Post|Entity|QuestElement|TimelineElement|Campaign $model;\n\n    protected int $entities;\n\n    protected int $createdImages = 0;\n\n    protected int $updatedImages = 0;\n\n    protected int $deletedImages = 0;\n\n    protected array $entityTypes;\n\n    /**\n     * If exceptions should be thrown. Probably not.\n     */\n    protected bool $throwExceptions = true;\n\n    /**\n     * If the app is verbose\n     */\n    public bool $verbose = false;\n\n    protected array $existingTargets = [];\n\n    /**\n     * Set errors and verbose to silent\n     */\n    public function silent(): self\n    {\n        $this->throwExceptions = false;\n        $this->verbose = false;\n\n        return $this;\n    }\n\n    public function with(Model|Post|Entity|QuestElement|TimelineElement|Campaign $model): self\n    {\n        $this->model = $model;\n\n        return $this;\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function map(): self\n    {\n        return $this\n            ->images()\n            ->entry();\n    }\n\n    protected function createNewMention(int $target): void\n    {\n        $mention = new EntityMention;\n\n        // Determine what kind of entity this is\n        // Todo: should be the model that gives us this info, not for the service to figure out\n        if ($this->model instanceof Campaign) {\n            $mention->campaign_id = $this->model->id;\n        } elseif ($this->model instanceof Post) {\n            $mention->post_id = $this->post()->id;\n            $mention->entity_id = $this->post()->entity_id;\n\n            // If we are making a reference to ourselves, no need to save it\n            if ($this->model->entity_id == $target) {\n                return;\n            }\n        } elseif ($this->model instanceof TimelineElement) {\n            $mention->timeline_element_id = $this->model->id;\n            $mention->entity_id = $this->model->timeline->entity->id;\n\n            // If we are making a reference to ourselves, no need to save it\n            if ($this->model->timeline_id == $target) {\n                return;\n            }\n        } elseif ($this->model instanceof QuestElement) {\n            $mention->quest_element_id = $this->model->id;\n            $mention->entity_id = $this->model->quest->entity->id;\n\n            // If we are making a reference to ourselves, no need to save it\n            if ($this->model->quest_id == $target) {\n                return;\n            }\n        } else {\n            // @phpstan-ignore-next-line\n            $mention->entity_id = $this->model->id;\n\n            // If we are making a reference to ourselves, no need to save it\n            if ($this->model->id == $target) { // @phpstan-ignore-line\n                return;\n            }\n        }\n        $mention->target_id = $target;\n        $mention->save();\n    }\n\n    /**\n     * Entities and Posts will track gallery images uses in their text\n     */\n    protected function images(): self\n    {\n        if (! method_exists($this->model, 'imageMentions')) {\n            return $this;\n        }\n        $images = [];\n        if ($this->model instanceof Entity) {\n            $images = $this->extractImages($this->entity()->entry);\n        } elseif ($this->model instanceof Post) {\n            $images = $this->extractImages($this->post()->entry);\n        }\n        $this->existingTargets = [];\n        if ($this->model instanceof Entity) {\n            /** @var ImageMention $map */\n            foreach ($this->model->imageMentions()->whereNull('post_id')->get() as $map) {\n                $this->existingTargets[$map->image_id] = $map;\n            }\n        } else {\n            foreach ($this->model->imageMentions as $map) {\n                $this->existingTargets[$map->image_id] = $map;\n            }\n        }\n\n        foreach ($images as $data) {\n            $id = $data;\n\n            // Determine the real campaign id from the model.\n            if ($this->model instanceof Post) {\n                $campaignId = $this->post()->entity->campaign_id;\n            } else {\n                $campaignId = $this->entity()->campaign_id;\n            }\n\n            /** @var ?Image $target */\n            $target = Image::where([\n                'id' => $id,\n                'campaign_id' => $campaignId,\n            ])->first();\n            if (! $target) {\n                continue;\n            }\n            // Don't map the same image multiple times\n            if (! empty($this->existingTargets[$target->id])) {\n                if ($this->model instanceof Post && $this->existingTargets[$target->id]->post_id == $this->model->id) {\n                    unset($this->existingTargets[$target->id]);\n                    $this->updatedImages++;\n\n                    continue;\n                } elseif ($this->model instanceof Entity && ! $this->existingTargets[$target->id]->post_id) {\n                    unset($this->existingTargets[$target->id]);\n                    $this->updatedImages++;\n\n                    continue;\n                }\n            }\n            $this->createNewImageMention($target->id);\n        }\n\n        // Existing mappings that are no longer needed\n        foreach ($this->existingTargets as $targetId => $map) {\n            $map->delete();\n            $this->deletedImages++;\n        }\n\n        return $this;\n    }\n\n    protected function entry(): self\n    {\n        // Build a list of existing targets, so that we delete the unused ones\n        $this->existingTargets = $alreadyMentioned = [];\n        // @phpstan-ignore-next-line\n        foreach ($this->model->mentions as $map) {\n            $this->existingTargets[$map->target_id] = $map;\n        }\n\n        // @phpstan-ignore-next-line\n        $entryMentions = $this->extract($this->model->{$this->model->entryFieldName()});\n        // @phpstan-ignore-next-line\n        $tooltipMentions = $this->extract($this->model->{$this->model->tooltipFieldName()});\n        $mentions = array_merge($tooltipMentions, $entryMentions);\n        foreach ($mentions as $data) {\n            $type = $data['type'];\n            $id = $data['id'];\n\n            // Old redirects or mapping to something else (like the map of a location) that doesn't have a tooltip\n            // But a link to a mention without a title will also break here.\n            if ($id == 'redirect') {\n                continue;\n            }\n            $id = (int) $id;\n            if (empty($id)) {\n                continue;\n            }\n\n            $singularType = $type;\n\n            // If we're targeting a campaign, no support for auto-updates\n            if ($singularType == 'campaign') {\n                continue;\n            }\n            $target = null;\n\n            // Validate that it's either targeting a post, or a valid entity type\n            $entityType = $this->getEntityTypeID($singularType);\n            if (! $entityType && $singularType !== 'post') {\n                continue;\n            }\n\n            /** @var ?Entity $target */\n            $target = $this->getTarget($id, $entityType);\n            if (! $target) {\n                continue;\n            }\n\n            // If already mentioned, don't create more mentions\n            if (in_array($target->id, $alreadyMentioned)) {\n                $alreadyMentioned[] = $target->id;\n\n                continue;\n            }\n            // Do we already have this mention mapped?\n            if (! empty($this->existingTargets[$target->id])) {\n                $alreadyMentioned[] = $target->id;\n                // $this->log(\"- already have mapping\");\n                unset($this->existingTargets[$target->id]);\n\n                continue;\n            }\n            $alreadyMentioned[] = $target->id;\n\n            // If a same target is mentioned multiple times, don't create a new mention each time\n            $this->createNewMention($target->id);\n        }\n\n        // Existing mappings that are no longer needed\n        foreach ($this->existingTargets as $targetId => $map) {\n            $map->delete();\n        }\n\n        return $this;\n    }\n\n    protected function getTarget(int $id, ?int $entityType): ?Entity\n    {\n        if (! isset($entityType)) {\n            $post = Post::with('entity')->where([\n                'id' => $id,\n            ])->first();\n            if ($post && $post->entity && $post->entity->campaign_id === $this->campaignID()) {\n                return $post->entity;\n            }\n\n            return null;\n        }\n\n        return Entity::where([\n            'type_id' => $entityType,\n            'id' => $id,\n            'campaign_id' => $this->campaignID(),\n        ])->first();\n    }\n\n    protected function campaignID(): int\n    {\n        // Todo: should be a method on the object or something, not the service's job to figure out\n        if ($this->model instanceof Campaign) {\n            return $this->model->id;\n        } elseif ($this->model instanceof Post) {\n            return $this->model->entity->campaign_id;\n        } elseif ($this->model instanceof TimelineElement) {\n            return $this->model->timeline->campaign_id;\n        } elseif ($this->model instanceof QuestElement) {\n            return $this->model->quest->campaign_id;\n        }\n\n        // @phpstan-ignore-next-line\n        return $this->model->campaign_id;\n    }\n\n    protected function createNewImageMention(string $target): void\n    {\n        $mention = new ImageMention;\n\n        // Determine what kind of entity this is\n        if ($this->model instanceof Post) {\n            $mention->post_id = $this->model->id;\n            $mention->entity_id = $this->model->entity_id;\n        } elseif ($this->model instanceof Entity) {\n            $mention->entity_id = $this->model->id;\n        }\n        $mention->image_id = $target;\n        $mention->save();\n        $this->createdImages++;\n    }\n\n    protected function log(?string $message = null)\n    {\n        if (! $this->verbose) {\n            return;\n        }\n        echo $message;\n        if (app()->runningInConsole()) {\n            echo \"\\n\";\n        } else {\n            echo '<br />';\n        }\n    }\n\n    protected function post(): Post\n    {\n        // @phpstan-ignore-next-line\n        return $this->model;\n    }\n\n    protected function entity(): Entity\n    {\n        // @phpstan-ignore-next-line\n        return $this->model;\n    }\n\n    protected function getEntityTypeID(string $code): ?int\n    {\n        $this->loadEntityTypes();\n\n        return Arr::get($this->entityTypes, $code);\n    }\n\n    protected function loadEntityTypes(): void\n    {\n        if (isset($this->entityTypes)) {\n            return;\n        }\n        $this->entityTypes = [];\n        foreach (EntityType::inCampaign($this->campaignID())->get() as $entityType) {\n            $this->entityTypes[$entityType->code] = $entityType->id;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/EntityTypeService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Bookmark;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\EntityType;\nuse App\\Services\\Campaign\\DefaultImageService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\nclass EntityTypeService\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use RequestAware;\n    use UserAware;\n\n    protected array $exclude = [];\n\n    protected array $skip = [];\n\n    protected array $prepend;\n\n    protected bool $withDisabled = false;\n\n    protected bool $creatable = false;\n\n    public function __construct(\n        protected DefaultImageService $defaultImageService\n    ) {}\n\n    public function exclude(mixed $ids): self\n    {\n        $this->exclude = is_array($ids) ? $ids : [$ids];\n\n        return $this;\n    }\n\n    public function skip(mixed $skip): self\n    {\n        $this->skip = is_array($skip) ? $skip : [$skip];\n\n        return $this;\n    }\n\n    public function withDisabled(): self\n    {\n        $this->withDisabled = true;\n\n        return $this;\n    }\n\n    public function prepend(array $prepend): self\n    {\n        $this->prepend = $prepend;\n\n        return $this;\n    }\n\n    public function available(): Collection\n    {\n        $types = new Collection;\n\n        $search = EntityType::inCampaign($this->campaign)->exclude($this->exclude);\n        if (! $this->withDisabled) {\n            $search->enabled();\n        }\n        /** @var EntityType $entityType */\n        foreach ($search->get() as $entityType) {\n            if (in_array($entityType->pluralCode(), $this->skip)) {\n                continue;\n            }\n            // Skip disabled standard modules\n            if (! $this->withDisabled && $entityType->isStandard() && ! $this->campaign->enabled($entityType)) {\n                continue;\n            }\n            if ($this->creatable && ! $this->user->can('create', [$entityType, $this->campaign])) {\n                continue;\n            }\n            $types->add($entityType);\n        }\n\n        return $types;\n    }\n\n    public function creatable(): self\n    {\n        $this->creatable = true;\n\n        return $this;\n    }\n\n    public function ordered(): Collection\n    {\n        return $this->available()->sortBy(fn (EntityType $a) => $a->name());\n        //\n        //        $collator = new \\Collator(app()->getLocale());\n        //        usort($types, function ($a, $b) use ($collator) {\n        //            return $collator->compare($a->name(), $b->name());\n        //        });\n        //\n        //        return $types;\n    }\n\n    public function toSelect(): array\n    {\n        $options = $this->ordered();\n        $values = [];\n        foreach ($options as $entityType) {\n            $values[$entityType->id] = $entityType->name();\n        }\n\n        if (! isset($this->prepend)) {\n            return $values;\n        }\n\n        return $this->prepend + $values;\n    }\n\n    public function save(): EntityType\n    {\n        if (! isset($this->entityType)) {\n            $this->entityType = new EntityType;\n            $this->entityType->campaign_id = $this->campaign->id;\n            $this->entityType->is_special = true;\n            $this->entityType->code = Str::slug($this->request->get('singular'));\n        }\n\n        $this->entityType->singular = $this->request->get('singular');\n        $this->entityType->plural = $this->request->get('plural');\n        $this->entityType->icon = $this->request->get('icon');\n        $this->entityType->is_enabled = (int) $this->request->get('is_enabled');\n        $this->entityType->save();\n\n        if ($this->entityType->wasRecentlyCreated) {\n            $this->permissions()->bookmark();\n        }\n\n        if ($this->request->get('update_name')) {\n            $this->updateBookmark();\n        }\n\n        if ($this->request->hasFile('default_entity_image') || $this->request->filled('remove-image')) {\n\n            $this->defaultImageService->campaign($this->campaign)\n                ->user($this->user)\n                ->entityType($this->entityType)\n                ->destroy();\n\n            if ($this->request->hasFile('default_entity_image')) {\n                $this->defaultImageService->save($this->request);\n            }\n        }\n\n        return $this->entityType;\n    }\n\n    public function toggle(): void\n    {\n        $this->entityType->is_enabled = ! $this->entityType->is_enabled;\n        $this->entityType->save();\n    }\n\n    protected function updateBookmark(): self\n    {\n        $bookmarks = $this->entityType->bookmarks()->whereNull('filters')->get();\n        foreach ($bookmarks as $bookmark) {\n            $bookmark->name = $this->entityType->plural;\n            $bookmark->update();\n        }\n\n        return $this;\n    }\n\n    protected function bookmark(): self\n    {\n        $bookmark = new Bookmark;\n        $bookmark->campaign_id = $this->campaign->id;\n        $bookmark->entity_type_id = $this->entityType->id;\n        $bookmark->name = $this->entityType->plural;\n        $bookmark->save();\n\n        return $this;\n    }\n\n    protected function permissions(): self\n    {\n        if (! $this->request->has('role')) {\n            return $this;\n        }\n\n        foreach ($this->request->get('role') as $roleID) {\n            /** @var CampaignRole $campaignRole */\n            $campaignRole = $this->campaign->roles->where('id', $roleID)->first();\n            if (! $campaignRole || $campaignRole->isAdmin()) {\n                continue;\n            }\n\n            $perm = new CampaignPermission;\n            $perm->entity_type_id = $this->entityType->id;\n            $perm->campaign_id = $this->campaign->id;\n            $perm->campaign_role_id = $campaignRole->id;\n            $perm->access = 1;\n            $perm->save();\n        }\n\n        return $this;\n    }\n\n    public function delete()\n    {\n        $this->entityType->bookmarks()->delete();\n        $this->entityType->entities()->delete();\n        $this->entityType->attributeTemplates()->delete();\n        $this->entityType->entities()->delete();\n        $this->entityType->delete();\n    }\n}\n"
  },
  {
    "path": "app/Services/Families/FamilyTreeService.php",
    "content": "<?php\n\nnamespace App\\Services\\Families;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\Avatar;\nuse App\\Models\\Entity;\nuse App\\Models\\Family;\nuse App\\Models\\FamilyTree;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Str;\n\nclass FamilyTreeService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected Family $family;\n\n    protected FamilyTree $familyTree;\n\n    protected array $entityIds = [];\n\n    protected array $entities = [];\n\n    protected array $missingIds = [];\n\n    protected array $config = [];\n\n    protected array $configEntityIds = [];\n\n    protected array $characterSuggestions = [];\n\n    public function family(Family $family): self\n    {\n        $this->family = $family;\n\n        return $this;\n    }\n\n    public function api()// : array\n    {\n        $this->loadSetup();\n\n        // return $this->fake();\n        return $this->tree();\n    }\n\n    public function familyTree()\n    {\n        return $this->familyTree;\n    }\n\n    /**\n     * Return all data required to generate the family tree\n     */\n    public function tree(): array\n    {\n        return [\n            'nodes' => $this->fillNodes(),\n            'entities' => $this->entities,\n            'suggestions' => $this->characterSuggestions,\n            'texts' => $this->texts(),\n        ];\n    }\n\n    /**\n     * Get an entity's representation for the rendering engine\n     *\n     * @return array|string[]\n     */\n    public function entity(Entity $entity): array\n    {\n        if (! $entity->isCharacter()) {\n            return ['error' => 'invalid-character'];\n        }\n\n        $entity->loadMissing(['status', 'entityType', 'tags', 'image', 'elapsedEvents']);\n\n        return $this->formatEntity($entity);\n    }\n\n    protected function loadSetup(): void\n    {\n        $this->loadFamilyTree();\n        $this->loadFamily();\n\n        // Get all the entity ids\n        if (empty($this->familyTree->config)) {\n            return;\n        }\n        $this->prepareEntities();\n        // foreach ()\n    }\n\n    protected function loadFamily(): void\n    {\n        $familyMembers = $this->family->allMembers()->with(['entity', 'entity.entityType'])->orderBy('name')->take(10)->get();\n        foreach ($familyMembers as $member) {\n            $this->characterSuggestions[] = ['id' => $member->entity->id, 'name' => $member->name];\n        }\n    }\n\n    protected function loadFamilyTree(): void\n    {\n        $familyTree = $this->family->familyTree;\n        if (! $familyTree) {\n            $familyTree = new FamilyTree;\n            $familyTree->family_id = $this->family->id;\n            if (isset($this->user)) {\n                $familyTree->save();\n            }\n        }\n        $this->familyTree = $familyTree;\n    }\n\n    /**\n     * Get all the unique entity ids from the family tree\n     */\n    protected function prepareEntities(): void\n    {\n        $data = $this->familyTree->config;\n        // Go find every unique entity id\n        array_walk_recursive($data, function ($v, $k) {\n            if ($k !== 'entity_id') {\n                return;\n            }\n            if (empty($v) || in_array($v, $this->configEntityIds)) {\n                return;\n            }\n            $this->configEntityIds[] = $v;\n        });\n        // Empty family tree\n        if (empty($this->configEntityIds)) {\n            return;\n        }\n\n        $this->entityIds = array_unique(array_values($this->configEntityIds));\n        // dump($this->entityIds);\n\n        // Prepare entities\n        $entities = Entity::inTypes([config('entities.ids.character')])\n            ->with([\n                'status',\n                'entityType',\n                'tags',\n                'image',\n                'elapsedEvents',\n            ])\n            ->find($this->entityIds);\n        foreach ($entities as $entity) {\n            $this->entities[$entity->id] = $this->formatEntity($entity);\n        }\n        // dump($this->entities);\n        if (! empty($this->entities)) {\n            $this->missingIds = array_diff($this->entityIds, array_keys($this->entities));\n            $this->cleanupMissingEntities();\n            $this->visibilityCheck();\n        } else {\n            $this->entities = [];\n            $this->familyTree->config = [];\n            // $this->generatePlaceholder();\n        }\n        // dd($this->characterSuggestions);\n        // dump($this->missingIds);\n    }\n\n    /**\n     * Format an entity for the rendering engine\n     */\n    protected function formatEntity(Entity $entity): array\n    {\n        $tags = [];\n        foreach ($entity->tags as $tag) {\n            $tags[] = 'kanka-tag-' . $tag->id;\n            $tags[] = 'kanka-tag-' . $tag->slug;\n        }\n        $elapsed = $entity->elapsedEvents;\n\n        // Prepare birth and death events\n        $birth = null;\n        $death = null;\n        foreach ($elapsed as $event) {\n            if ($event->isBirth() && $birth === null) {\n                $birth = $event->year;\n            } elseif ($event->isDeath() && $death === null) {\n                $death = $event->year;\n            }\n        }\n\n        $status = null;\n        if ($entity->status !== null) {\n            $entity->status->setRelation('entityType', $entity->entityType);\n            $status = [\n                'key' => $entity->status->key,\n                'icon' => $entity->status->icon(),\n                'name' => $entity->status->name(),\n            ];\n        }\n\n        return [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'url' => $entity->url(),\n            'thumb' => Avatar::entity($entity)->size(40)->fallback()->thumbnail(),\n            'status' => $status,\n            'death' => $death,\n            'birth' => $birth,\n            'tags' => $tags,\n        ];\n    }\n\n    protected function visibilityCheck(): void\n    {\n        $config = [];\n        foreach ($this->config as $key => $node) {\n            $config[$key] = $this->cleanInvisible($node, $key);\n        }\n        $this->config = $config;\n    }\n\n    protected function cleanInvisible($node, $key): mixed\n    {\n        if (isset($node['relations'])) {\n            foreach ($node['relations'] as $k => $rel) {\n                if (! isset($rel['children'])) {\n                    $relations[] = $rel;\n\n                    continue;\n                }\n\n                $children = [];\n                foreach ($rel['children'] as $ck => $child) {\n                    $child = $this->cleanInvisible($child, $ck);\n                    if (! $child) {\n                        continue;\n                    }\n                    if ($this->isVisible($child)) {\n                        $children[] = $child;\n                    }\n                }\n                unset($rel['children']);\n                if (! empty($children)) {\n                    $rel['children'] = $children;\n                }\n                if ($this->isVisible($rel)) {\n                    $relations[] = $rel;\n                }\n            }\n            unset($node['relations']);\n            if (! empty($relations)) {\n                $node['relations'] = $relations;\n            }\n        }\n\n        return $node;\n    }\n\n    protected function isVisible($relation): bool\n    {\n        return (bool) (\n            ! isset($relation['visibility']) ||\n            $relation['visibility'] == Visibility::All->value ||\n            ($relation['visibility'] == Visibility::Admin->value && isset($this->user) && $this->user->isAdmin()) ||\n            ($relation['visibility'] == Visibility::Member->value && isset($this->user) && $this->user->can('member', $this->campaign))\n        );\n    }\n\n    protected function cleanupMissingEntities(): void\n    {\n        if (empty($this->missingIds)) {\n            $this->config = $this->familyTree->config;\n\n            return;\n        }\n\n        $config = [];\n        // Loop everything and remove entities that match\n        foreach ($this->familyTree->config as $key => $node) {\n            $config[$key] = $this->cleanupNode($node, $key);\n        }\n\n        // Save the config now that its clean?\n        $this->config = $config;\n    }\n\n    protected function cleanupNode($node, $key): mixed\n    {\n        if (in_array($node['entity_id'], $this->missingIds) && $node['entity_id'] != null) {\n            return null;\n        }\n        if (! isset($node['relations'])) {\n            return null;\n        }\n        $relations = [];\n        foreach ($node['relations'] as $k => $rel) {\n            if (in_array($rel['entity_id'], $this->missingIds) && $rel['entity_id'] != null) {\n                continue;\n            }\n            if (! isset($rel['children'])) {\n                continue;\n            }\n            $children = [];\n            foreach ($rel['children'] as $ck => $child) {\n                $child = $this->cleanupNode($child, $ck);\n                if (! $child) {\n                    continue;\n                }\n                $children[] = $child;\n            }\n            unset($rel['children']);\n            if (! empty($children)) {\n                $rel['children'] = $children;\n            }\n\n            $relations[] = $rel;\n        }\n        unset($node['relations']);\n        if (! empty($relations)) {\n            $node['relations'] = $relations;\n        }\n\n        /*if (!empty($node['relations'])) {\n            $parent[$key]['relations'] = $node['relations'];\n        } elseif (isset($node['relations'])) {\n            unset($parent[$key]['relations']);\n        }*/\n\n        return $node;\n    }\n\n    protected function emptyNode(): array\n    {\n        return [];\n    }\n\n    /**\n     * Return an error handled by the frontend\n     */\n    protected function error(string $code): array\n    {\n        return [\n            'error' => true,\n            'code' => __($code),\n        ];\n    }\n\n    /**\n     * Save a new tree config to the database\n     */\n    public function save(array $data = []): self\n    {\n        // If the campaign is not premium dont save the tree.\n        if (! $this->campaign->premium()) {\n            return $this;\n        }\n\n        $this->loadFamilyTree();\n        if (empty($data)) {\n            $this->familyTree->config = [];\n            $this->familyTree->save();\n\n            return $this;\n        }\n\n        // $data = json_decode($data);\n        $data = $this->prepareForSave($data);\n\n        $this->familyTree->config = $data;\n        $this->familyTree->save();\n\n        return $this;\n    }\n\n    /**\n     * Prepare a new config for the database by adding a uuid everywhere\n     *\n     * @return array\n     */\n    protected function prepareForSave(array $data)// : array\n    {\n        $assingUuid = function (&$value, $key) {\n            if ($key == 'uuid' && (! is_string($value) || ! Str::isUuid($value))) {\n                $value = (string) Str::uuid();\n            }\n            // echo \"The key $key has the value $value <br>\";\n        };\n\n        array_walk_recursive($data, $assingUuid);\n\n        // Loop on the data, adding a uuid on each element that is missing one\n        // dd('ended recursive', $data);\n        return $data;\n    }\n\n    protected function fillNodes(): array\n    {\n        $nodes = $this->config;\n        if (empty($nodes)) {\n            return [];\n        }\n        // dd($nodes);\n        if (! isset($nodes[0]['relations'])) {\n            return $nodes;\n        }\n\n        foreach ($nodes[0]['relations'] as $i => $relation) {\n            $nodes[0]['relations'][$i] = $this->informRelation($relation);\n        }\n\n        return $nodes;\n    }\n\n    protected function informRelation(array $relation): array\n    {\n        // No children, single relation\n        if (empty($relation['children'])) {\n            $relation['width'] = 1;\n\n            return $relation;\n        }\n\n        $count = 0;\n        foreach ($relation['children'] as $i => $child) {\n            $count++;\n        }\n        $relation['width'] = $count;\n\n        return $relation;\n    }\n\n    protected function texts(): array\n    {\n        return [\n            'actions' => [\n                'edit' => __('crud.edit'),\n                'clear' => __('families/trees.actions.clear'),\n                'reset' => __('families/trees.actions.reset'),\n                'save' => __('families/trees.actions.save'),\n                'first' => __('families/trees.actions.first'),\n                'founder' => __('families/trees.actions.founder'),\n            ],\n            'modals' => [\n                'clear' => [\n                    'confirm' => __('families/trees.modals.clear.confirm'),\n                ],\n                'relation' => [\n                    'add' => [\n                        'title' => __('families/trees.modals.relations.add.title'),\n                    ],\n                    'edit' => [\n                        'title' => __('families/trees.modals.relations.edit.title'),\n                    ],\n                ],\n                'entity' => [\n                    'add' => [\n                        'title' => __('families/trees.modals.entity.add.title'),\n                    ],\n                    'edit' => [\n                        'title' => __('families/trees.modals.entity.edit.title'),\n                        'helper' => __('families/trees.modals.entity.edit.helper'),\n                    ],\n                    'child' => [\n                        'title' => __('families/trees.modals.entity.child.title'),\n                    ],\n                    'founder' => [\n                        'title' => __('families/trees.modals.entity.founder.title'),\n                    ],\n                    'remove' => [\n                        'title' => __('crud.remove'),\n                        'confirm' => __('families/trees.modals.entity.remove.confirm'),\n                    ],\n                ],\n                'pitch' => [\n                    'title' => __('concept.premium-feature'),\n                    'content' => __('families/trees.pitch'),\n                    'more' => __('callouts.premium.learn-more'),\n                    'subscription' => __('callouts.actions.subscription'),\n                ],\n                'reset' => [\n                    'confirm' => __('families/trees.modals.reset.confirm'),\n                ],\n                'fields' => [\n                    'relation' => __('entities/relations.fields.role'),\n                    'character' => __('entities.character'),\n                    'member' => __('families/trees.modals.entity.add.member'),\n                    'css' => __('dashboard.widgets.fields.class'),\n                    'colour' => __('crud.fields.colour'),\n                    'unknown' => __('families/trees.modals.relations.unknown'),\n                    'founder' => __('families/trees.modals.entity.add.founder'),\n                    'visibility' => [\n                        'title' => __('crud.fields.visibility'),\n                        'all' => __('crud.visibilities.all'),\n                        'admins' => __('crud.visibilities.admin'),\n                        'members' => __('crud.visibilities.members'),\n                    ],\n                ],\n            ],\n            'toasts' => [\n                'relations' => [\n                    'add' => __('families/trees.modals.relations.add.success'),\n                    'edit' => __('families/trees.modals.relations.edit.success'),\n                ],\n                'entity' => [\n                    'add' => __('families/trees.modals.entity.add.success'),\n                    'edit' => __('families/trees.modals.entity.edit.success'),\n                    'child' => __('families/trees.modals.entity.child.success'),\n                    'removed' => __('families/trees.modals.entity.remove.success'),\n                ],\n                'saved' => __('families/trees.success.saved'),\n                'cleared' => __('families/trees.success.cleared'),\n                'reseted' => __('families/trees.success.reseted'),\n            ],\n            'unknown' => __('families/trees.unknown'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/FilterService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Location;\nuse App\\Models\\MiscModel;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse Illuminate\\Contracts\\Translation\\Translator;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\nclass FilterService\n{\n    use CampaignAware, EntityTypeAware;\n\n    /** @var array The filters as saved in the session */\n    protected array $filters = [];\n\n    /** @var array|null The order as saved in the session */\n    protected ?array $order = [];\n\n    /** @var array The request data */\n    protected array $data = [];\n\n    /** @var string The index crud for session keys */\n    protected string $crud = '';\n\n    /** @var string Search option */\n    protected string $search = '';\n\n    /** @var bool If the filters are stored in the session */\n    protected bool $session = true;\n\n    /** @var Request The request object */\n    protected Request $request;\n\n    protected bool $hasRequest = false;\n\n    /** @var array Keys excluded from filter persistence (navigation params) */\n    protected array $ignored = [];\n\n    /** @var Model|MiscModel|Location The entity sub model */\n    protected Model|MiscModel|Location $model;\n\n    public function request(Request $request): self\n    {\n        $this->request = $request;\n        $this->data = $request->all();\n        $this->hasRequest = true;\n\n        return $this;\n    }\n\n    public function options(array $data): self\n    {\n        $this->data = $data;\n\n        return $this;\n    }\n\n    /**\n     * Mark keys as navigation-only so they are not persisted to the filter session.\n     *\n     * @param  string[]  $keys\n     */\n    public function ignoring(array $keys): self\n    {\n        $this->ignored = $keys;\n\n        return $this;\n    }\n\n    /**\n     * @throws \\Exception\n     */\n    public function model(Model $model): self\n    {\n        if (! method_exists($model, 'getFilterableColumns')) {\n            throw new \\Exception(\n                'Model ' . $model . ' doesn\\'t implement the Filterable trait.',\n            );\n        }\n        $this->model = $model;\n\n        return $this;\n    }\n\n    public function build(array $sortableColumns = [])\n    {\n        $this->crud = $this->entityType->id . '-' . $this->campaign->id;\n\n        $orderFields = array_unique(\n            array_merge(['name', 'type', 'is_private'], $sortableColumns),\n        );\n\n        $baseFilters = [\n            'name',\n            'type',\n            'is_private',\n            'status_id',\n            'parent_id',\n            'template',\n            'tag_id',\n            'tags',\n            'has_image',\n            'has_posts',\n            'has_entry',\n            'has_entity_files',\n            'has_attributes',\n            'created_by',\n            'updated_by',\n            'attribute_name',\n            'attribute_value',\n            'archived',\n        ];\n\n        // Merge entity-type-specific filterable columns\n        if ($this->entityType->isStandard()) {\n            $model = $this->entityType->getClass();\n            if (method_exists($model, 'getFilterableColumns')) {\n                $baseFilters = array_unique(\n                    array_merge($baseFilters, $model->getFilterableColumns()),\n                );\n            }\n        }\n\n        $this->prepareFilters($baseFilters)\n            ->prepareOrder($orderFields)\n            ->prepareSearch();\n    }\n\n    public function make(string $crud)\n    {\n        $this->crud = isset($this->campaign)\n            ? $crud . '-' . $this->campaign->id\n            : $crud;\n\n        $this->prepareFilters($this->model->getFilterableColumns()) // @phpstan-ignore-line\n            ->prepareOrder($this->model->sortableColumns()) // @phpstan-ignore-line\n            ->prepareSearch();\n    }\n\n    /**\n     * Prepare the filters\n     */\n    protected function prepareFilters(array $availableFilters = []): self\n    {\n        // No point in doing any work if the model has no fields to filter.\n        if (empty($availableFilters)) {\n            return $this;\n        }\n\n        // Load the filters from the session if we're revisiting a page\n        $sessionKey = 'filterService-filter-' . $this->crud;\n        if (\n            $this->hasRequest &&\n            $this->request->get('_from', false) == 'bookmark'\n        ) {\n            $sessionKey .= '-bookmark';\n        }\n        $this->filters = $this->sessionLoad($sessionKey);\n\n        // If the request has _clean, we only want filters that are set in the url\n        if ($this->hasRequest && $this->request->get('_clean', false)) {\n            $this->filters = [];\n        }\n\n        foreach (\n            [\n                'tags',\n                'locations',\n                'organisations',\n                'races',\n                'families',\n                'creators',\n            ] as $key\n        ) {\n            $this->checkFilterData($key, $availableFilters);\n        }\n\n        // If we have data but no \"tags\" array, it's empty\n        if (\n            ! empty($this->data) &&\n            in_array('tags', $availableFilters) &&\n            ! isset($this->data['tags'])\n        ) {\n            // Not calling from a page or order result, we can junk the filters\n            if (empty($this->data['page']) && empty($this->data['order'])) {\n                unset($this->data['tags']);\n            }\n        }\n        // If we have data but no \"locations\" array, it's empty\n        if (\n            ! empty($this->data) &&\n            in_array('locations', $availableFilters) &&\n            ! isset($this->data['locations'])\n        ) {\n            // Not calling from a page or order result, we can junk the filters\n            if (empty($this->data['page']) && empty($this->data['order'])) {\n                unset($this->data['locations']);\n            }\n        }\n\n        // If we have data but no \"organisations\" array, it's empty\n        if (\n            ! empty($this->data) &&\n            in_array('organisations', $availableFilters) &&\n            ! isset($this->data['organisations'])\n        ) {\n            // Not calling from a page or order result, we can junk the filters\n            if (empty($this->data['page']) && empty($this->data['order'])) {\n                unset($this->data['organisations']);\n            }\n        }\n\n        // If we have data but no \"races\" array, it's empty\n        if (\n            ! empty($this->data) &&\n            in_array('races', $availableFilters) &&\n            ! isset($this->data['races'])\n        ) {\n            // Not calling from a page or order result, we can junk the filters\n            if (empty($this->data['page']) && empty($this->data['order'])) {\n                unset($this->data['races']);\n            }\n        }\n\n        // If we have data but no \"families\" array, it's empty\n        if (\n            ! empty($this->data) &&\n            in_array('families', $availableFilters) &&\n            ! isset($this->data['families'])\n        ) {\n            // Not calling from a page or order result, we can junk the filters\n            if (empty($this->data['page']) && empty($this->data['order'])) {\n                unset($this->data['families']);\n            }\n        }\n\n        // Convert legacy tag_id to tags[] so it is treated like a normal tag filter\n        if (isset($this->data['tag_id']) && in_array('tags', $availableFilters)) {\n            $this->data['tags'] = array_merge(\n                is_array($this->data['tags'] ?? null) ? $this->data['tags'] : [],\n                [(int) $this->data['tag_id']],\n            );\n            unset($this->data['tag_id']);\n        }\n\n        // Don't support the old tags, force using tags[]\n        if (isset($this->data['tags']) && ! is_array($this->data['tags'])) {\n            unset($this->data['tags']);\n        }\n\n        foreach ($this->data as $key => $value) {\n            if (in_array($key, $this->ignored)) {\n                continue;\n            }\n            if (in_array($key, $availableFilters)) {\n                // Update the value we have in the session.\n                // But skip empty arrays (typically when sending `families[]=`\n                if ($value === [0 => null]) {\n                    $value = null;\n                }\n                $this->filters[$key] = $value;\n\n                continue;\n            }\n\n            // Of if it's the _option of a filter\n            if (Str::endsWith($key, '_option')) {\n                $stripedKey = Str::before($key, '_option');\n                if (in_array($stripedKey, $availableFilters)) {\n                    // Update the value we have in the session.\n                    $this->filters[$key] = $value;\n\n                    continue;\n                }\n            }\n        }\n\n        // Foreign keys that are not set might have been cleared. If so, remove them from the filters.\n        // However, only do this if not ordering or changing pages, and not doing a clean reset.\n        $isClean = $this->hasRequest && $this->request->get('_clean', false);\n        if (\n            ! $isClean &&\n            ! empty($this->data) &&\n            ! array_key_exists('order', $this->data) &&\n            ! array_key_exists('page', $this->data)\n        ) {\n            foreach ($availableFilters as $filter) {\n                if (in_array($filter, $this->ignored)) {\n                    continue;\n                }\n                if (\n                    ! isset($this->data[$filter]) &&\n                    (Str::endsWith($filter, '_id') || in_array($filter, ['created_by', 'updated_by']))\n                ) {\n                    $this->filters[$filter] = null;\n                }\n            }\n        }\n\n        // Reset the filters if requested, before saving it to the session.\n        if (Arr::has($this->data, 'reset-filter')) {\n            $this->filters = [];\n        }\n\n        // Save the new data into the session\n        $this->sessionSave($sessionKey, $this->filters);\n\n        return $this;\n    }\n\n    /**\n     * Prepare the Order By data\n     *\n     * @property array $availableFields\n     */\n    protected function prepareOrder(array $availableFields = []): self\n    {\n        // Get all the posted data. We need to see if any of it is part of a filter.\n        $field = Arr::get($this->data, 'order');\n        $direction = Arr::get($this->data, 'desc');\n\n        $sessionKey = 'filterService-order-' . $this->crud;\n        $this->order = session()->get($sessionKey, []);\n        if ($this->order === null) {\n            $this->order = [];\n        }\n\n        // Validate that the session's saved order field is still valid\n        if (! empty($this->order) && ! empty($availableFields)) {\n            $sessionField = array_key_first($this->order);\n            if (! in_array($sessionField, $availableFields)) {\n                $this->order = [];\n            }\n        }\n\n        if (! empty($field) && is_string($field)) {\n            if ($field === 'clear') {\n                // Explicit reset from the grid's third-click cycle\n                $this->order = [];\n            } else {\n                $this->order = [\n                    $field => empty($direction) ? 'ASC' : 'DESC',\n                ];\n\n                if (! in_array($field, $availableFields)) {\n                    $this->order = [];\n                }\n            }\n        }\n\n        // Reset the filters if requested, before saving it to the session.\n        if (Arr::has($this->data, 'reset-filter')) {\n            $this->order = [];\n        }\n\n        // Save the new data into the session\n        session()->put($sessionKey, $this->order);\n\n        return $this;\n    }\n\n    private function checkFilterData(string $key, array $availableFilters): void\n    {\n        // If we have data but no array, it's empty\n        if (\n            ! empty($this->data) &&\n            in_array($key, $availableFilters) &&\n            ! isset($this->data[$key])\n        ) {\n            // Not calling from a page or order result, we can junk the filters\n            if (empty($this->data['page']) && empty($this->data['order'])) {\n                unset($this->data[$key]);\n            }\n        }\n    }\n\n    private function prepareSearch(): self\n    {\n        $search = Arr::get($this->data, 'search');\n        $this->search = $search ? strip_tags($search) : '';\n\n        return $this;\n    }\n\n    /**\n     * @param  string|array  $key\n     * @return array|Translator|mixed|string|null\n     *\n     * @throws \\Exception\n     */\n    public function single(mixed $key, ?string $default = null)\n    {\n        if (is_array($key)) {\n            throw new \\Exception('Key for FilterService can\\'t be an array');\n        }\n        if (! empty($this->filters) && isset($this->filters[$key])) {\n            if ($this->isCheckbox($key)) {\n                return $this->filters[$key] == '1'\n                    ? __('general.yes')\n                    : __('general.no');\n            }\n            $result = $this->filters[$key];\n\n            return is_array($result) ? $default : $result;\n        }\n\n        return $default;\n    }\n\n    /**\n     * @param  string|array  $key\n     *\n     * @throws \\Exception\n     */\n    public function filterValue(mixed $key, ?string $default = null)\n    {\n        if (is_array($key)) {\n            throw new \\Exception('Key for FilterService can\\'t be an array');\n        }\n        if (! empty($this->filters) && isset($this->filters[$key])) {\n            return $this->filters[$key];\n        }\n\n        return $default;\n    }\n\n    /**\n     * Get the filters\n     */\n    public function filters(): array\n    {\n        return $this->filters;\n    }\n\n    /**\n     * Get the order data\n     */\n    public function order(): array\n    {\n        return $this->order;\n    }\n\n    /**\n     * Get the search data\n     */\n    public function search(): string\n    {\n        return $this->search;\n    }\n\n    /**\n     * Determine if a filter is a checkbox\n     */\n    public function isCheckbox(string $field): bool\n    {\n        return Str::startsWith($field, ['is_', 'has_']);\n    }\n\n    /**\n     * Get the active filters\n     */\n    public function activeFilters(): array\n    {\n        if (empty($this->filters)) {\n            return [];\n        }\n\n        $filters = [];\n        foreach ($this->filters as $key => $val) {\n            if ($val !== null) {\n                $filters[$key] = $val;\n            }\n        }\n\n        return $filters;\n    }\n\n    public function activeFiltersCount(): int\n    {\n        return count($this->activeFilters());\n    }\n\n    /**\n     * Determine if the request has active filters\n     */\n    public function hasFilters(): bool\n    {\n        return $this->activeFiltersCount() > 0;\n    }\n\n    /**\n     * Prepare data to append to the crud pagination\n     */\n    public function pagination(): array\n    {\n        $options = [];\n        if (! empty($this->search)) {\n            $options['search'] = $this->search;\n        }\n\n        if (! $this->hasRequest) {\n            return $options;\n        }\n\n        if ($this->request->get('_from', false) == 'bookmark') {\n            $options['_from'] = 'bookmark';\n        }\n\n        if ($bookmarkId = $this->request->get('bookmark')) {\n            $options['bookmark'] = (int) $bookmarkId;\n        }\n\n        if ($this->request->filled('parent_id')) {\n            $options['parent_id'] = (int) $this->request->get('parent_id');\n        }\n\n        return $options;\n    }\n\n    /**\n     * Flag the service to save the filters in session\n     */\n    public function session(bool $session = true): self\n    {\n        $this->session = $session;\n\n        return $this;\n    }\n\n    /**\n     * Load the stored filter data from session\n     */\n    protected function sessionLoad(string $key): array\n    {\n        if (! $this->session) {\n            return [];\n        }\n\n        if (! session()->has($key)) {\n            return [];\n        }\n\n        return session()->get($key);\n    }\n\n    /**\n     * Save the filter data to the session\n     */\n    protected function sessionSave(string $key, $data): self\n    {\n        if (! $this->session) {\n            return $this;\n        }\n\n        session()->put($key, $data);\n\n        return $this;\n    }\n\n    /**\n     * Prepare filters to be copied to the clipboard\n     */\n    public function clipboardFilters(): string\n    {\n        $filters = [];\n        foreach ($this->filters as $key => $val) {\n            if ($val !== null) {\n                if (! is_array($val)) {\n                    $filters[] = $key . '=' . $val;\n\n                    continue;\n                }\n\n                foreach ($val as $arrValue) {\n                    // If it's an array in an array, we don't support it.\n                    // For example calling the page with tags[bla][bli][blo]\n                    if (is_array($arrValue)) {\n                        continue;\n                    }\n                    $filters[] = $key . '[]=' . $arrValue;\n                }\n            }\n        }\n\n        return (string) implode('&', $filters);\n    }\n}\n"
  },
  {
    "path": "app/Services/FormCopyService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Traits\\RequestAware;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Class FormCopyService\n */\nclass FormCopyService\n{\n    use RequestAware;\n\n    protected Entity|Model $source;\n\n    /**\n     * The requested field\n     *\n     * @var string\n     */\n    protected $field;\n\n    protected bool $fromChild = false;\n\n    public function child(): self\n    {\n        $this->fromChild = true;\n\n        return $this;\n    }\n\n    public function source(Entity|Model|null $source = null): self\n    {\n        $this->source = $source;\n\n        return $this;\n    }\n\n    public function field(string $field): self\n    {\n        $this->field = $field;\n\n        return $this;\n    }\n\n    /**\n     * @param  string|null  $default\n     * @return string|null\n     */\n    public function string(mixed $default = null)\n    {\n        if ($this->valid()) {\n            return $this->getValue();\n        }\n\n        return $default;\n    }\n\n    /**\n     * Get values for a select field\n     */\n    public function select(bool $checkForParent = false, ?string $parentClass = null): array\n    {\n        // Only copy on MiscModel (entity) models\n        if ($this->valid()) {\n            $value = $this->getValues();\n            if (! empty($value) && is_object($value)) {\n                return [$value->id => $value->name];\n            }\n        }\n\n        $parent = isset($this->request) ? $this->request->get('parent_id', false) : false;\n        if ($checkForParent && $parent !== false) {\n            /** @var Model $class */\n            $class = new $parentClass;\n            /** @var ?MiscModel $parent */\n            $parent = $class->find($parent);\n            if ($parent) {\n                return [$parent->id => $parent->name];\n            }\n        }\n\n        return [];\n    }\n\n    /**\n     * Character traits\n     */\n    public function characterPersonality(): Collection\n    {\n        if ($this->valid()) {\n            $this->fromChild = false;\n\n            // @phpstan-ignore-next-line\n            if (auth()->user()->can('personality', $this->source->child)) {\n                // @phpstan-ignore-next-line\n                return $this->source->child->characterTraits()->personality()->get();\n            }\n        }\n\n        return new Collection;\n    }\n\n    /**\n     * Character traits\n     */\n    public function characterAppearance(): Collection\n    {\n        if ($this->valid()) {\n            $this->fromChild = false;\n\n            // @phpstan-ignore-next-line\n            return $this->source->child->characterTraits()->appearance()->get();\n        }\n\n        return new Collection;\n    }\n\n    /**\n     * Character organisations\n     */\n    public function characterOrganisation(): Collection\n    {\n        if ($this->valid()) {\n            $this->fromChild = false;\n\n            // @phpstan-ignore-next-line\n            return $this->source->child->organisationMemberships()\n                ->with('organisation')\n                ->has('organisation')\n                ->get();\n        }\n\n        return new Collection;\n    }\n\n    public function boolean(bool $default = false): bool\n    {\n        // Only copy on MiscModel (entity) models\n        if ($this->valid()) {\n            return $this->getValue() ? true : false;\n        }\n\n        return $default;\n    }\n\n    /**\n     * Prefill model for custom blade directives\n     */\n    public function model(): ?MiscModel\n    {\n        // Only copy on MiscModel (entity) models\n        if ($this->valid()) {\n            // @phpstan-ignore-next-line\n            return $this->source->child;\n        }\n\n        return null;\n    }\n\n    /**\n     * Prefill model for custom blade directives\n     */\n    public function related()\n    {\n        // Only copy on MiscModel (entity) models\n        if ($this->valid()) {\n            return $this->source->{$this->field};\n        }\n\n        return null;\n    }\n\n    /**\n     * @param  bool  $withNull  include \"none\" option\n     */\n    public function colours(bool $withNull = true): array\n    {\n        $colours = $withNull ? [\n            '' => __('colours.none'),\n        ] : [];\n        $colourKeys = config('colours.keys');\n        foreach ($colourKeys as $colour) {\n            $colours[$colour] = trans('colours.' . $colour);\n        }\n\n        asort($colours);\n\n        return $colours;\n    }\n\n    public function __toString(): string\n    {\n        return (string) $this->getValue();\n    }\n\n    private function valid(): bool\n    {\n        return ! empty($this->source);\n    }\n\n    private function getValue()\n    {\n        if (! $this->valid()) {\n            return null;\n        }\n\n        if (! $this->source instanceof Entity || ! $this->fromChild) {\n            return $this->source->getAttributeValue($this->field);\n        }\n        $this->fromChild = false;\n        if ($this->source->isMissingChild()) {\n            return null;\n        }\n\n        return $this->source->child->getAttributeValue($this->field);\n    }\n\n    private function getValues()\n    {\n        if (! $this->valid()) {\n            return null;\n        }\n        if (! $this->source instanceof Entity || ! $this->fromChild) {\n            return $this->source->{$this->field};\n        }\n        $this->fromChild = false;\n        if ($this->source->isMissingChild()) {\n            return null;\n        }\n\n        return $this->source->child->{$this->field};\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/BrowseService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass BrowseService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected ?string $folder;\n\n    protected ?string $term;\n\n    public function term(?string $term): self\n    {\n        $this->term = $term;\n\n        return $this;\n    }\n\n    public function folder(?string $folder): self\n    {\n        $this->folder = $folder;\n\n        return $this;\n    }\n\n    public function images(): array\n    {\n        $results = [];\n\n        $canBrowse = $this->user->can('galleryBrowse', $this->campaign);\n\n        if (! empty($this->folder)) {\n            $image = Image::where('is_folder', true)->where('id', $this->folder)->firstOrFail();\n            $results['images'][] = [\n                'name' => __('crud.actions.back'),\n                'folder' => true,\n                'icon' => 'fa-regular fa-arrow-left',\n                'url' => route('gallery.browse', [$this->campaign, 'folder' => $image->folder_id]),\n            ];\n        }\n\n        $images = Image::acl($canBrowse)\n            ->search($this->folder, $this->term)\n            ->where('is_default', false)\n            ->orderBy('is_folder', 'desc')\n            ->orderBy('updated_at', 'desc')\n            ->offset(0)\n            ->take(50)\n            ->get();\n        /** @var Image $image */\n        foreach ($images as $image) {\n            $results['images'][] = [\n                'src' => $image->url(),\n                'name' => $image->name,\n                'folder' => $image->isFolder(),\n                'uuid' => $image->id,\n                'icon' => 'fa-regular fa-folder',\n                'url' => $image->isFolder() ? route('gallery.browse', [$this->campaign, 'folder' => $image->id]) : null,\n                'thumbnail' => $image->getUrl(192, 144),\n            ];\n        }\n\n        return $results;\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/CreateService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Http\\Requests\\Gallery\\CreateFolder;\nuse App\\Http\\Resources\\GalleryFile;\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\n\nclass CreateService\n{\n    use CampaignAware;\n\n    public function create(CreateFolder $request): GalleryFile\n    {\n        $folder = new Image;\n        $folder->campaign_id = $this->campaign->id;\n        $folder->folder_id = $request->get('folder_id');\n        $folder->name = $request->get('name');\n        $folder->visibility_id = $request->get('visibility_id');\n        $folder->is_folder = true;\n        $folder->save();\n\n        return (new GalleryFile($folder))->campaign($this->campaign);\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/DeleteService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\n\nclass DeleteService\n{\n    use CampaignAware;\n\n    public function delete(array $ids): int\n    {\n        // We need to loop them for the observers\n        $count = 0;\n        foreach ($ids as $id) {\n            $image = Image::where('id', $id)->first();\n            if (! $image) {\n                continue;\n            }\n            $image->delete();\n            $count++;\n        }\n\n        return $count;\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/SelectionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Traits\\CampaignAware;\n\nclass SelectionService\n{\n    use CampaignAware;\n\n    public function api(): array\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/SetupService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Enums\\Visibility;\nuse App\\Facades\\Limit;\nuse App\\Http\\Resources\\GalleryFile;\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\n\nclass SetupService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected Collection $files;\n\n    protected Image $image;\n\n    protected ?string $term;\n\n    protected ?string $nextPage;\n\n    protected array $filters;\n\n    protected array $sort;\n\n    protected StorageService $storage;\n\n    public function __construct(StorageService $storage)\n    {\n        $this->storage = $storage;\n    }\n\n    public function image(Image $image): self\n    {\n        $this->image = $image;\n\n        return $this;\n    }\n\n    public function term(?string $term): self\n    {\n        $this->term = $term;\n\n        return $this;\n    }\n\n    public function filters(array $filters): self\n    {\n        $this->filters = $filters;\n\n        return $this;\n    }\n\n    public function sort(array $sort): self\n    {\n        $this->sort = $sort;\n\n        return $this;\n    }\n\n    public function setup(): array\n    {\n        return [\n            'acl' => [\n                'manage' => $this->user->can('galleryManage', $this->campaign),\n                'upload' => $this->user->can('galleryUpload', $this->campaign),\n                'premium' => $this->campaign->boosted() || $this->storage->campaign($this->campaign)->isUnlimited(),\n                'elemental' => $this->campaign->isElemental(),\n                'wyvern' => $this->campaign->isWyvern(),\n            ],\n            'files' => $this->files(),\n            'i18n' => $this->i18n(),\n            'folders' => $this->folders(),\n            'api' => [\n                'search' => route('gallery.search', [$this->campaign]),\n                'delete' => route('gallery.delete', [$this->campaign]),\n                'create' => route('gallery.create', [$this->campaign]),\n                'update' => route('gallery.update', [$this->campaign]),\n                'upload' => route('gallery.upload.files', [$this->campaign]),\n            ],\n            'next' => $this->nextPage ?? null,\n            'visibilities' => $this->visibilities(),\n            'bulkVisibilities' => $this->visibilities(true),\n            'url' => route('gallery', $this->campaign),\n            'space' => $this->space(),\n            'upgrade' => $this->upgradeLink(),\n        ];\n    }\n\n    /**\n     * Open a file\n     */\n    public function open(): array\n    {\n        return [\n            'folder' => $this->image,\n            'files' => $this->files(),\n            'breadcrumbs' => $this->breadcrumbs(),\n            'next' => $this->nextPage ?? null,\n            'url' => route('gallery', [$this->campaign, 'folder' => $this->image->id]),\n        ];\n    }\n\n    public function search(): array\n    {\n        return [\n            'files' => $this->files(),\n            'next' => $this->nextPage ?? null,\n        ];\n    }\n\n    protected function files(): array\n    {\n        $this->files = new Collection;\n        $query = $this\n            ->campaign\n            ->images()\n            ->with(['images', 'creator']);\n\n        if (isset($this->sort) && Arr::has($this->sort, 'sort') && in_array($this->sort['sort'], ['asc', 'desc'])) {\n            $query->sortOrder($this->sort['sort']);\n        } else {\n            $query->defaultOrder();\n        }\n\n        if (isset($this->filters) && Arr::has($this->filters, 'unused')) {\n            $query\n                ->distinct()\n                ->select('images.*')\n                ->leftJoin('image_mentions as im', 'im.image_id', 'images.id')\n                ->leftJoin('entities as e', 'e.image_uuid', 'images.id')\n                ->leftJoin('entities as eh', 'eh.header_uuid', 'images.id')\n                ->whereNull('im.id')\n                ->whereNull('e.id')\n                ->whereNull('eh.id')\n                ->where('is_folder', false);\n        }\n\n        if (isset($this->term)) {\n            $query->named($this->term);\n        } else {\n            $query->imageFolder(isset($this->image) ? $this->image->id : null);\n        }\n\n        $files = $query->paginate(25);\n        /** @var Image $file */\n        foreach ($files as $file) {\n            $fileData = (new GalleryFile($file))->campaign($this->campaign);\n            $this->files->add($fileData);\n        }\n\n        if ($files->hasMorePages()) {\n            $this->nextPage = $files->appends($this->filters ?? null)->nextPageUrl();\n        }\n\n        return $this->files->toArray();\n    }\n\n    protected function i18n(): array\n    {\n        return [\n            'filters' => __('bookmarks.fields.filters'),\n            'new_folder' => __('campaigns/gallery.uploader.new_folder'),\n            'select' => __('crud.select'),\n            'cancel' => __('crud.cancel'),\n            'remove' => __('crud.remove'),\n            'create' => __('crud.create'),\n            'update' => __('crud.update'),\n            'move' => __('crud.actions.move'),\n            'home' => __('Home'),\n            'load_more' => __('Load more'),\n            'upload_hint' => empty(config('limits.filesize.image.standard'))\n                ? __('crud.hints.image_formats', ['formats' => 'jpg, png, webp, gif, woff2'])\n                : __('crud.files.hints.limitations', ['formats' => 'jpg, png, webp, gif, woff2', 'size' => Limit::readable()->upload()]),\n\n            // Space\n            'storage' => __('campaigns/gallery.storage.title'),\n            'of' => __('campaigns/gallery.storage.of'),\n            'upgrade' => __('campaigns/gallery.actions.upgrade'),\n\n            // Files\n            'details' => __('campaigns/gallery.fields.details'),\n            'used_in' => __('campaigns/gallery.fields.used_in'),\n            'unused' => __('campaigns/gallery.fields.unused'),\n            'name' => __('crud.fields.name'),\n            'delete' => __('crud.remove'),\n            'save' => __('crud.save'),\n            'saved' => __('gallery.file.saved'),\n            'confirm' => __('crud.actions.confirm'),\n            'visibility' => __('crud.fields.visibility'),\n            'size' => __('campaigns/gallery.fields.size'),\n            'file_type' => __('campaigns/gallery.fields.file_type'),\n            'uploaded_by' => __('campaigns/gallery.fields.created_by'),\n            'focus_point' => __('campaigns/gallery.actions.focus_point'),\n            'link' => __('campaigns/gallery.fields.link'),\n            'open' => __('crud.actions.open'),\n            'focus_locked' => __('campaigns/gallery.focus.locked'),\n            'folder' => __('campaigns/gallery.fields.folder'),\n\n            'change' => __('crud.actions.change'),\n\n            // Filters\n            'filter_only_unused' => __('gallery.filters.only_unused'),\n\n            'visibility.1' => __('crud.visibilities.all'),\n            'visibility.2' => __('crud.visibilities.admin'),\n            'visibility.3' => __('crud.visibilities.admin-self'),\n            'visibility.4' => __('crud.visibilities.self'),\n            'visibility.5' => __('crud.visibilities.members'),\n\n            'sort' => __('gallery.filters.sort'),\n            'sort_asc' => __('crud.filters.sorting.asc', ['field' => 'Name']),\n            'sort_desc' => __('crud.filters.sorting.desc', ['field' => 'Name']),\n            'sort_default' => __('dashboard.widgets.orders.recent'),\n        ];\n    }\n\n    protected function folders(): array\n    {\n        $folders = [\n            '' => '',\n            0 => __('gallery.update.home'),\n        ];\n        $query = $this\n            ->campaign\n            ->images()\n            ->select(['id', 'name'])\n            ->folders()\n            ->get();\n        /** @var Image $folder */\n        foreach ($query as $folder) {\n            $folders[$folder->id] = $folder->name;\n        }\n\n        return $folders;\n    }\n\n    protected function breadcrumbs(): array\n    {\n        $crumbs = [];\n        if (! $this->image->imageFolder) {\n            return $crumbs;\n        }\n        $parent = $this->image->imageFolder;\n        if ($parent->imageFolder) {\n            $crumbs[] = [\n                'name' => $parent->imageFolder->name,\n                'open' => route('gallery.show', [$this->campaign, $parent->imageFolder]),\n            ];\n        }\n\n        $crumbs[] = [\n            'name' => $parent->name,\n            'open' => route('gallery.show', [$this->campaign, $parent]),\n        ];\n\n        return $crumbs;\n    }\n\n    protected function visibilities(bool $withNull = false): array\n    {\n        $options = [];\n        if ($withNull) {\n            $options[] = __('');\n        }\n\n        $options[Visibility::All->value] = __('crud.visibilities.all');\n\n        if ($this->user->isAdmin()) {\n            $options[Visibility::Admin->value] = __('crud.visibilities.admin');\n            $options[Visibility::Member->value] = __('crud.visibilities.members');\n        }\n        $options[Visibility::Self->value] = __('crud.visibilities.self');\n        $options[Visibility::AdminSelf->value] = __('crud.visibilities.admin-self');\n\n        return $options;\n    }\n\n    protected function space(): array\n    {\n        $storage = $this->storage->campaign($this->campaign);\n\n        return [\n            'total' => $storage->isUnlimited() ? 0 : $storage->totalSpace(),\n            'used' => $storage->usedSpace(),\n        ];\n    }\n\n    protected function upgradeLink(): ?string\n    {\n        if ($this->campaign->isElemental() || $this->campaign->isWyvern()) {\n            return null;\n        } elseif ($this->campaign->boosted()) {\n            return route('settings.subscription');\n        }\n\n        return route('settings.premium');\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/StorageService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Facades\\Cache;\n\nclass StorageService\n{\n    use CampaignAware;\n\n    protected int $used;\n\n    protected int $total;\n\n    /**\n     * Size in mb\n     */\n    public function usedSpace(): int\n    {\n        if (isset($this->used)) {\n            return $this->used;\n        }\n\n        return $this->used = Cache::remember($this->cacheKey(), 24 * 3600, function () {\n            return Image::sum('size');\n        });\n    }\n\n    public function uncachedUsedSpace(): int\n    {\n        return Image::sum('size');\n    }\n\n    /**\n     * Available space in KB\n     */\n    public function available(): int\n    {\n        return $this->totalSpace() - $this->usedSpace();\n    }\n\n    public function isUnlimited(): bool\n    {\n        $flags = CampaignCache::campaign($this->campaign)->flags();\n        if ($flags->has('gallery') || $this->campaign->boosted()) {\n            return false;\n        }\n\n        return empty(config('limits.gallery.standard'));\n    }\n\n    /**\n     * Total size in mb\n     */\n    public function totalSpace(): int\n    {\n        $flags = CampaignCache::campaign($this->campaign)->flags();\n        if ($flags->has('gallery')) {\n            return $flags->get('gallery');\n        }\n        if ($this->campaign->boosted()) {\n            if ($this->campaign->isWyvern()) {\n                return config('limits.gallery.wyvern');\n            } elseif ($this->campaign->isElemental()) {\n                return config('limits.gallery.elemental');\n            }\n\n            return config('limits.gallery.premium');\n        }\n\n        $standard = config('limits.gallery.standard');\n        if (empty($standard)) {\n            return PHP_INT_MAX;\n        }\n\n        return $standard;\n    }\n\n    protected function cacheKey(): string\n    {\n        return 'campaign_' . $this->campaign->id . '_gallery';\n    }\n\n    public function clearCache(): self\n    {\n        Cache::forget($this->cacheKey());\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/SummernoteService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Http\\Requests\\Campaigns\\GalleryImageStore;\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Str;\n\nclass SummernoteService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected StorageService $storage;\n\n    public function __construct(StorageService $storageService)\n    {\n        $this->storage = $storageService;\n    }\n\n    public function store(GalleryImageStore $request, string $field = 'file'): array\n    {\n        $images = [];\n        $files = $request->file($field);\n        if (! is_array($files)) {\n            $files = [$files];\n        }\n        $available = $this->storage->campaign($this->campaign)->available();\n        foreach ($files as $source) {\n            // Prepare the name as sent by the user. It gets purified in the observer\n            if (empty($source)) {\n                continue;\n            }\n            $name = $source->getClientOriginalName();\n            $name = Str::beforeLast($name, '.');\n\n            $image = new Image;\n            $image->campaign_id = $this->campaign->id;\n            $image->ext = $source->extension();\n            $image->size = (int) ceil($source->getSize() / 1024); // kb\n            $image->name = mb_substr($name, 0, 45);\n            $image->folder_id = $request->post('folder_id');\n            $image->visibility_id = $this->campaign->defaultGalleryVisibility();\n\n            // Check remaining space again before saving, as the user could be near max and uploading multiple\n            // files at a time to bypass the size restrictions\n            $available -= $image->size;\n            if ($available < 0) {\n                continue;\n            }\n\n            $image->save();\n\n            $source\n                ->storePubliclyAs(\n                    $image->folder,\n                    $image->file,\n                    ['disk' => 's3']\n                );\n\n            $images[] = $image;\n        }\n\n        $this->storage->clearCache();\n\n        return $images;\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/TiptapService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\n\nclass TiptapService\n{\n    use CampaignAware;\n    use RequestAware;\n    use UserAware;\n\n    public function images()\n    {\n        return $this->setup();\n    }\n\n    /**\n     * Return the initial gallery view: folders and up to 50 images\n     */\n    protected function setup(): LengthAwarePaginator\n    {\n        $canBrowse = $this->user->can('galleryBrowse', $this->campaign);\n\n        $images = Image::acl($canBrowse)\n            ->search($this->request->get('folder'), $this->request->get('term'))\n            ->where('is_default', false)\n            ->orderBy('is_folder', 'desc')\n            ->orderBy('updated_at', 'desc')\n            ->paginate(50);\n\n        return $images;\n\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/UpdateService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Models\\Image;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Arr;\n\nclass UpdateService\n{\n    use CampaignAware;\n\n    /** @var array|Image[] */\n    protected array $files;\n\n    public function files(array $ids): self\n    {\n        $this->files = [];\n        foreach ($ids as $id) {\n            $image = Image::where('id', $id)->first();\n            if (! $image) {\n                continue;\n            }\n            $this->files[] = $image;\n        }\n\n        return $this;\n    }\n\n    public function update(array $data): int\n    {\n        $folderId = Arr::get($data, 'folder_id');\n        $home = Arr::get($data, 'folder_home');\n        $visibilityId = Arr::get($data, 'visibility_id');\n\n        if (! empty($folderId)) {\n            // Make sure it's a folder from the current campaign\n            $folder = Image::where('id', $folderId)->where('is_folder', 1)->firstOrFail();\n        }\n\n        foreach ($this->files as $file) {\n            // todo: prevent loops?\n            if (isset($folder)) {\n                $file->folder_id = $folder->id;\n            } elseif (! empty($home)) {\n                $file->folder_id = null;\n            }\n            if (! empty($visibilityId)) {\n                $file->visibility_id = $visibilityId;\n            }\n            $file->save();\n        }\n\n        return count($this->files);\n    }\n}\n"
  },
  {
    "path": "app/Services/Gallery/UploadService.php",
    "content": "<?php\n\nnamespace App\\Services\\Gallery;\n\nuse App\\Facades\\Limit;\nuse App\\Http\\Resources\\GalleryFile;\nuse App\\Models\\Image;\nuse App\\Sanitizers\\SvgAllowedAttributes;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse enshrined\\svgSanitize\\Sanitizer;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Number;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Validation\\ValidationException;\nuse Intervention\\Image\\Drivers\\Gd\\Driver;\nuse Intervention\\Image\\ImageManager;\n\nclass UploadService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected FormRequest $request;\n\n    protected array $data;\n\n    protected Image $image;\n\n    protected string $folder;\n\n    protected StorageService $storage;\n\n    protected int $available;\n\n    public function __construct(StorageService $storageService)\n    {\n        $this->storage = $storageService;\n    }\n\n    public function request(FormRequest $request): self\n    {\n        $this->request = $request;\n\n        return $this;\n    }\n\n    public function image(): Image\n    {\n        return $this->image;\n    }\n\n    public function folder(string $folder): self\n    {\n        if (empty($folder)) {\n            unset($this->folder);\n\n            return $this;\n        }\n        $this->folder = $folder;\n\n        return $this;\n    }\n\n    public function data(array $data): self\n    {\n        $this->data = $data;\n\n        return $this;\n    }\n\n    public function file(UploadedFile $file): array\n    {\n        $this->image = new Image;\n        $this->image->campaign_id = $this->campaign->id;\n        $this->image->name = Str::beforeLast($file->getClientOriginalName(), '.');\n        $this->image->ext = Str::before($file->extension(), '?');\n        $this->image->size = (int) ceil($file->getSize() / 1024); // kb\n        $this->image->visibility_id = $this->campaign->defaultGalleryVisibility();\n        if (isset($this->folder)) {\n            $this->image->folder_id = $this->folder;\n        }\n        $this->image->save();\n\n        $file->storePubliclyAs($this->image->folder, $this->image->file);\n        $this->storage->campaign($this->campaign)->clearCache();\n\n        return $this->format();\n    }\n\n    public function files(array $files): array\n    {\n        $data = [];\n        $available = $this->storage->campaign($this->campaign)->available();\n        foreach ($files as $file) {\n            // If we have enough space\n            $kb = (int) ceil($file->getSize() / 1024);\n            if ($kb > $available) {\n                continue;\n            }\n            $this->file($file);\n            $available -= $kb;\n            $data[] = (new GalleryFile($this->image))->campaign($this->campaign);\n        }\n\n        return $data;\n    }\n\n    public function url(string $url): array\n    {\n        $this->image = new Image;\n\n        $externalFile = basename($url);\n\n        $tempImage = tempnam(sys_get_temp_dir(), $externalFile);\n        try {\n            copy($url, $tempImage);\n        } catch (\\Exception $e) {\n            throw ValidationException::withMessages([__('gallery.download.errors.copy_failed')]);\n        }\n\n        $cleanImageName = Str::slug(\n            Str::before(\n                Str::before($externalFile, '%3F'),\n                '?'\n            )\n        );\n        $cleanImageName = str_replace(['.', '/'], ['', ''], $cleanImageName);\n\n        // Check if file is too big\n        $copiedFileSize = ceil(filesize($tempImage) / 1024);\n        if ($this->request->has('map')) {\n            Limit::map();\n        }\n        $max = Limit::upload();\n        if ($copiedFileSize > $max) {\n            unlink($tempImage);\n            throw ValidationException::withMessages([__('gallery.download.errors.too_big', [\n                'size' => Number::format($copiedFileSize / 1024, 2),\n                'max' => Number::format($max / 1024, 2),\n            ])]);\n        }\n        $available = $this->storage->campaign($this->campaign)->available();\n        if ($copiedFileSize > $available) {\n            unlink($tempImage);\n            $key = 'gallery.download.errors.gallery_full_free';\n            if ($this->campaign->boosted()) {\n                $key = 'gallery.download.errors.gallery_full_premium';\n            }\n            throw ValidationException::withMessages([__($key)]);\n        }\n        $file = new UploadedFile($tempImage, basename($url));\n\n        // Invalid file type?\n        $ext = mb_strtolower($file->guessExtension());\n        if (! in_array($ext, ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'])) {\n            unlink($tempImage);\n            $key = 'gallery.download.errors.invalid_format';\n            throw ValidationException::withMessages([__($key)]);\n        }\n\n        $this->image->name = $cleanImageName;\n        $this->image->campaign_id = $this->campaign->id;\n        $this->image->ext = $file->guessExtension();\n        $this->image->size = (int) ceil($copiedFileSize); // kb\n        $this->image->visibility_id = $this->campaign->defaultGalleryVisibility();\n        if (isset($this->folder)) {\n            $this->image->folder_id = $this->folder;\n        }\n        $this->image->save();\n\n        if ($this->image->isSvg()) {\n            // GD can't handle svgs, so we need to move them directly\n            Storage::put($this->image->path, $this->sanitizedSvg($file), 'public');\n        } else {\n            $manager = new ImageManager(\n                new Driver\n            );\n            $image = $manager->read($file);\n            Storage::put($this->image->path, (string) $image->toJpeg(), 'public');\n        }\n        unlink($tempImage);\n        $this->storage->clearCache();\n\n        return $this->format();\n    }\n\n    protected function sanitizedSvg(string $path): string\n    {\n        $sanitizer = new Sanitizer;\n\n        // Custom allowed attributes for AFMG\n        $allowedAttributes = new SvgAllowedAttributes;\n        $sanitizer->setAllowedAttrs($allowedAttributes);\n\n        $dirtySVG = file_get_contents($path);\n        $cleanSVG = $sanitizer->sanitize($dirtySVG);\n        file_put_contents($path, $cleanSVG);\n\n        return $cleanSVG;\n    }\n\n    protected function format(): array\n    {\n        return [\n            'id' => $this->image->id,\n            'name' => $this->image->name,\n            'uuid' => $this->image->id,\n            'path' => $this->image->path,\n            'thumbnail' => $this->image->getUrl(192, 144),\n            'src' => $this->image->getUrl(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/GenreService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Genre;\n\nclass GenreService\n{\n    public function getGenres($emptyOption = false): array\n    {\n        $genres = [];\n        if ($emptyOption) {\n            $genres = ['' => __('campaigns.fields.genre')];\n        }\n        foreach (Genre::get() as $genre) {\n            $genres[$genre->id] = trans('genres.' . $genre->slug);\n        }\n\n        return $genres;\n    }\n}\n"
  },
  {
    "path": "app/Services/IdentityManager.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\UserAction;\nuse App\\Events\\Campaigns\\Members\\Switched;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\User;\nuse App\\Traits\\CampaignAware;\nuse Exception;\nuse Illuminate\\Foundation\\Application;\n\nclass IdentityManager\n{\n    use CampaignAware;\n\n    /**\n     * @var Application\n     */\n    private $app;\n\n    /**\n     * IdentityManager constructor.\n     */\n    public function __construct(Application $app)\n    {\n        $this->app = $app;\n    }\n\n    public function switch(CampaignUser $campaignUser): bool\n    {\n        try {\n            Switched::dispatch($campaignUser->campaign, auth()->user(), $campaignUser);\n\n            // Save the current user in the session to know we have limitation on the current user.\n            session()->put($this->getSessionKey(), $this->app['auth']->user()->id);\n            session()->put($this->getSessionCampaignKey(), $this->campaign->id);\n\n            // Log this action\n            session()->put('kanka.userLog', UserAction::userSwitchLogin);\n            $this->app['auth']->loginUsingId($campaignUser->user->id);\n        } catch (Exception $e) {\n            return false;\n        }\n\n        // Dispatch a log for the user?\n\n        return true;\n    }\n\n    public function back(): bool\n    {\n        // Not actually impersonating anyone? Sure.\n        if (! $this->isImpersonating()) {\n            return false;\n        }\n\n        try {\n            // $impersonated = $this->app['auth']->user();\n            $impersonator = $this->findUserById($this->getImpersonatorId());\n\n            session()->put('kanka.userLog', UserAction::userRevert);\n\n            $this->app['auth']->loginUsingId($impersonator->id);\n            $this->clear();\n        } catch (Exception $e) {\n            return false;\n        }\n\n        // Dispatch a log for the user?\n\n        return true;\n    }\n\n    /**\n     * Determine if we are someone else that we usually are.\n     */\n    public function isImpersonating(): bool\n    {\n        return session()->has($this->getSessionKey());\n    }\n\n    protected function findUserById(int $id): User\n    {\n        return User::findOrFail($id);\n    }\n\n    /**\n     * The Key used to determine where our original user is stored\n     */\n    public function getSessionKey(): string\n    {\n        return 'kanka.originalUserID';\n    }\n\n    /**\n     * The Key used to determine where our original campaign is stored\n     */\n    public function getSessionCampaignKey(): string\n    {\n        return 'kanka.originalCampaignID';\n    }\n\n    public function getImpersonatorId()\n    {\n        return session($this->getSessionKey(), null);\n    }\n\n    public function getCampaignId()\n    {\n        return session($this->getSessionCampaignKey(), null);\n    }\n\n    /**\n     * Forget the saved user identity.\n     */\n    protected function clear(): bool\n    {\n        session()->forget($this->getSessionKey());\n        session()->forget($this->getSessionCampaignKey());\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Services/Images/AvatarService.php",
    "content": "<?php\n\nnamespace App\\Services\\Images;\n\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\Img;\nuse App\\Models\\MiscModel;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass AvatarService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected MiscModel $child;\n\n    protected string $field = 'image';\n\n    protected bool $fallback = false;\n\n    protected int $width;\n\n    protected int $height;\n\n    protected bool $withCache = false;\n\n    public function child(MiscModel $miscModel): self\n    {\n        $this->child = $miscModel;\n\n        return $this;\n    }\n\n    public function field(string $field): self\n    {\n        $this->field = $field;\n\n        return $this;\n    }\n\n    public function cached(): self\n    {\n        $this->withCache = true;\n\n        return $this;\n    }\n\n    public function size(int $width, int $height = 0): self\n    {\n        $this->width = $width;\n        $this->height = ! empty($height) ? $height : $width;\n\n        return $this;\n    }\n\n    public function fallback(): self\n    {\n        $this->fallback = true;\n\n        return $this;\n    }\n\n    public function reset(): self\n    {\n        $this->field = 'image';\n        $this->fallback = false;\n        $this->withCache = false;\n        unset($this->entity, $this->child);\n\n        return $this;\n    }\n\n    public function thumbnail(): string\n    {\n        if (! $this->hasImage()) {\n            return $this->fallbackThumbnail();\n        }\n\n        if ($this->onEntity()) {\n            return $this->entity->image->getUrl($this->width, $this->height);\n        }\n\n        return $this->childThumbnail();\n    }\n\n    /**\n     * Get the full url of the original images\n     */\n    public function original(): string\n    {\n        if (! $this->hasImage()) {\n            return '';\n        }\n        if ($this->onEntity()) {\n            return $this->entity->image->url();\n        }\n        $path = $this->childThumbnailPath();\n        $cdn = config('cdn.ugc');\n        if ($cdn) {\n            return $cdn . '/' . $path;\n        }\n\n        return Storage::url($path);\n    }\n\n    protected function onEntity(): bool\n    {\n        return ! empty($this->entity->image);\n    }\n\n    protected function childThumbnail(): string\n    {\n        $url = $this->childThumbnailPath();\n        if (empty($url)) {\n            return $this->fallbackThumbnail();\n        }\n\n        $img = Img::resetCrop()->crop($this->width, $this->height);\n\n        if (! empty($this->width)) {\n            if (! empty($this->entity->focus_x) && ! empty($this->entity->focus_y)) {\n                $img = $img->focus($this->entity->focus_x, $this->entity->focus_y);\n            }\n        }\n\n        return $this->return(\n            $img->url($url)\n        );\n    }\n\n    public function hasImage(): bool\n    {\n        return $this->entity->image || ! empty($this->childThumbnailPath());\n    }\n\n    protected function fallbackThumbnail(): string\n    {\n        if (! $this->fallback) {\n            return $this->return('');\n        }\n\n        $cloudfront = config('filesystems.disks.cloudfront.url');\n        if ($this->campaign->boosted() && Arr::has(CampaignCache::campaign($this->campaign)->defaultImages(), $this->entity->entityType->code)) {\n            $url = Img::crop($this->width, $this->height)\n                ->url(CampaignCache::defaultImages()[$this->entity->entityType->code]);\n\n            return $this->return($url);\n        } elseif ($this->entity->entityType->isStandard() && ($this->campaign->premium() || (isset($this->user) && $this->user->isGoblin()))) {\n            return $this->return($cloudfront . '/images/defaults/subscribers/' . $this->entity->entityType->pluralCode() . '.jpeg');\n        }\n\n        // Default fallback\n        return $this->return($cloudfront . '/images/defaults/thumbnail.jpg');\n    }\n\n    protected function return(string $url): string\n    {\n        $this->reset();\n\n        return $url;\n    }\n\n    protected function getChild(): MiscModel\n    {\n        if (isset($this->child)) {\n            return $this->child;\n        }\n\n        return $this->child = $this->entity->child;\n    }\n\n    protected function childThumbnailPath(): ?string\n    {\n        return $this->entity->image_path;\n    }\n\n    public function forget(): void\n    {\n        Cache::forget($this->cacheKey());\n    }\n\n    protected function cacheKey(): string\n    {\n        return 'entity_' . $this->entity->id . '_avatar_v3';\n    }\n}\n"
  },
  {
    "path": "app/Services/ImagesService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Facades\\Limit;\nuse App\\Models\\Entity;\nuse App\\Sanitizers\\SvgAllowedAttributes;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse enshrined\\svgSanitize\\Sanitizer;\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse Intervention\\Image\\Drivers\\Gd\\Driver;\nuse Intervention\\Image\\ImageManager;\n\nclass ImagesService\n{\n    use CampaignAware;\n    use RequestAware;\n\n    protected Model $model;\n\n    protected string $field = 'image';\n\n    protected string $folder;\n\n    public function model(Model $model): self\n    {\n        $this->model = $model;\n\n        return $this;\n    }\n\n    public function field(string $field): self\n    {\n        $this->field = $field;\n\n        return $this;\n    }\n\n    public function folder(string $folder): self\n    {\n        $this->folder = $folder;\n\n        return $this;\n    }\n\n    public function handle()\n    {\n        // Remove the old image\n        if ($this->request->post('remove-' . $this->field) == '1') {\n            $this->cleanup();\n\n            return;\n        }\n\n        // No new image\n        if (! $this->request->has($this->field) && ! $this->request->filled($this->field . '_url')) {\n            return;\n        }\n\n        try {\n            $cleanSVG = null;\n            $url = $this->request->filled($this->field . '_url');\n\n            // Download the file locally to check it out\n            if ($url) {\n                $externalUrl = $this->request->input($this->field . '_url');\n                $externalFile = basename($externalUrl);\n\n                $tempImage = tempnam(sys_get_temp_dir(), $externalFile);\n                copy($externalUrl, $tempImage);\n\n                $file = $tempImage;\n                // Clean up the file name because weird letters can confuse thumbor\n                // $cleanImageName = Str::replace('&', '', $externalFile);\n                $cleanImageName = Str::slug(\n                    Str::before(\n                        Str::before($externalFile, '%3F'),\n                        '?'\n                    )\n                );\n                $cleanImageName = str_replace(['.', '/'], ['', ''], $cleanImageName);\n                $path = \"{$this->folder}/\" . uniqid() . '_' . Str::limit($cleanImageName, 20, '');\n\n                // Check if file is too big\n                $copiedFileSize = ceil(filesize($tempImage) / 1000);\n                if ($copiedFileSize > Limit::upload()) {\n                    unlink($tempImage);\n                    throw new Exception('image_url target too big');\n                }\n                $file = new UploadedFile($tempImage, basename($externalUrl));\n\n                // Add back the extension if it's missing after trimming long names\n                $imageUrlExt = '.' . str_replace('image/', '', $file->getMimeType());\n                if (! Str::endsWith($path, $imageUrlExt)) {\n                    $path = $path . mb_strtolower($imageUrlExt);\n                }\n            } else {\n                $file = $this->request->file($this->field);\n                $path = $file->hashName($this->folder);\n            }\n\n            // Sanitize SVGs to avoid any XSS attacks\n            if ($file->getMimeType() == 'image/svg+xml') {\n                $sanitizer = new Sanitizer;\n\n                // Custom allowed attributes for AFMG\n                $allowedAttributes = new SvgAllowedAttributes;\n                $sanitizer->setAllowedAttrs($allowedAttributes);\n\n                $dirtySVG = file_get_contents($file);\n                $cleanSVG = $sanitizer->sanitize($dirtySVG);\n                file_put_contents($file, $cleanSVG);\n            }\n\n            if (! empty($path)) {\n                // Remove old\n                $this->cleanup();\n\n                // Save the new image\n                if ($url) {\n                    if ($file->getMimeType() == 'image/svg+xml') {\n                        // GD can't handle svgs, so we need to move them directly\n                        Storage::put($path, $cleanSVG, 'public');\n                    } else {\n                        $manager = new ImageManager(\n                            new Driver\n                        );\n                        $image = $manager->read($file);\n                        Storage::put($path, (string) $image->toJpeg(), 'public');\n                    }\n                } else {\n                    $path = $this->request->file($this->field)->storePublicly($this->folder);\n                }\n                if ($this->model instanceof Entity) {\n                    $this->model->image_path = $path;\n                } else {\n                    $this->model->{$this->field} = $path;\n                }\n            }\n        } catch (Exception $e) {\n            // throw $e;\n            // There was an error getting the image. Could be the url, could be the request.\n            session()->flash('warning', trans('crud.image.error', ['size' => Limit::readable()->upload()]));\n        }\n    }\n\n    /**\n     * Delete old image and thumb\n     */\n    public function cleanup(): void\n    {\n        if ($this->model instanceof Entity && $this->field === 'image') {\n            $this->field = 'image_path';\n        }\n        if (empty($this->model->{$this->field})) {\n            return;\n        }\n\n        try {\n            Storage::delete($this->model->{$this->field});\n            // Leave removing thumbs for old campaigns\n            $thumb = str_replace('.', '_thumb.', $this->model->{$this->field});\n            if (Storage::has($thumb)) {\n                Storage::delete($thumb);\n            }\n            // If it's a map, reset its height to be re-calculated\n            if ($this->model instanceof Entity && $this->model->isMap()) {\n                $this->model->map->height = null;\n                $this->model->map->width = null;\n                $this->model->map->saveQuietly();\n            }\n        } catch (Exception $e) {\n            // silence exception, didn't find the image to delete.\n        }\n        $this->model->{$this->field} = null;\n    }\n}\n"
  },
  {
    "path": "app/Services/ImgService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\nclass ImgService\n{\n    protected string $crop = '';\n\n    /** @var bool If true, running locally with docker/minio */\n    protected bool $local = false;\n\n    /** @var bool If true, use the new th.kanka.io system */\n    protected bool $new = false;\n\n    /** @var bool Called from console */\n    protected bool $console = false;\n\n    /** @var string user or app */\n    protected string $base;\n\n    /** @var string s3 url */\n    protected string $s3;\n\n    protected bool $enabled;\n\n    protected ?int $focusX;\n\n    protected ?int $focusY;\n\n    public function __construct()\n    {\n        $this->enabled = ! empty(config('thumbor.key'));\n        $this->local = config('thumbor.key') === 'local';\n    }\n\n    public function console(): self\n    {\n        $this->console = true;\n\n        return $this;\n    }\n\n    public function new(): self\n    {\n        $this->new = true;\n\n        return $this;\n    }\n\n    public function crop(int $width, ?int $height = null): self\n    {\n        if ($width !== 0) {\n            if ($height === null) {\n                $height = $width;\n            }\n            $this->crop = \"{$width}x{$height}/\";\n        }\n\n        return $this;\n    }\n\n    public function focus(int $x, int $y): self\n    {\n        $this->focusX = $x;\n        $this->focusY = $y;\n\n        return $this;\n    }\n\n    public function resetCrop(): self\n    {\n        $this->crop = '';\n\n        return $this;\n    }\n\n    public function reset(): self\n    {\n        $this->crop = '';\n        $this->focusX = null;\n        $this->focusY = null;\n\n        return $this;\n    }\n\n    public function base(?string $base = 'user'): self\n    {\n        //        if (!empty($this->s3)) {\n        //            return $this;w\n        //        }\n        $this->base = $base;\n        if ($base === 'app') {\n            $this->s3 = config('thumbor.bases.app');\n        } else {\n            $this->s3 = config('thumbor.bases.user');\n        }\n\n        return $this;\n    }\n\n    public function url(string $img): string\n    {\n        // Self-hosted with no s3/minio instance or SVG files load directly from the storage\n        if (! $this->enabled || Str::contains($img, '?') || Str::endsWith($img, '.svg')) {\n            return Storage::url($img);\n        }\n\n        // Default base\n        if (! $this->console) {\n            $this->base();\n        }\n\n        $img = Str::before($img, '?');\n        $full = $this->s3 . $img;\n        $filter = 'smart/';\n        if (! empty($this->focusX)) {\n            // left x top:right x bottom\n            $filter = 'filters:focal(' . ($this->focusX - 10) . 'x' . ($this->focusY - 10) . ':' . ($this->focusX + 10) . 'x' . ($this->focusY + 10) . ')/';\n            $this->focusX = $this->focusY = null;\n        }\n        $thumborUrl = $this->crop . $filter . $full;\n        $sign = $this->sign($thumborUrl);\n\n        // If we're on a local instance, it's a lot easier, everything is in minio\n        if ($this->local) {\n            return config('thumbor.url') . 'unsafe/' . $this->crop . $filter\n                . app()->environment() . '/' . urlencode($img);\n        } elseif (Str::contains(config('thumbor.url'), 'th.kanka.io')) {\n            // New server\n            if (! app()->isProduction()) {\n                $img = app()->environment() . '/' . $img;\n                $full = $this->s3 . $img;\n            }\n            $thumborUrl = $this->crop . $filter . $full;\n            $sign = $this->sign($thumborUrl);\n\n            return config('thumbor.url') . $sign . '/' . $this->crop . $filter\n                . 'src/' . $img;\n        }\n\n        // Old system\n        return config('thumbor.url') . $this->base . '/' . $sign . '/' . $this->crop . $filter\n            . 'src/' . urlencode($img);\n    }\n\n    protected function sign(string $url): string\n    {\n        $signature = hash_hmac('sha1', $url, config('thumbor.key'), true);\n\n        return strtr(base64_encode($signature), '/+', '_-');\n    }\n}\n"
  },
  {
    "path": "app/Services/InviteService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\ReferralEventType;\nuse App\\Events\\Campaigns\\Members\\UserJoined;\nuse App\\Exceptions\\RequireLoginException;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignInvite;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\ReferralEvent;\nuse App\\Services\\Campaign\\FollowService;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Facades\\Session;\n\nclass InviteService\n{\n    use UserAware;\n\n    public FollowService $campaignFollowService;\n\n    protected ?CampaignInvite $invite;\n\n    public function __construct(FollowService $campaignFollowService)\n    {\n        $this->campaignFollowService = $campaignFollowService;\n    }\n\n    /**\n     * @throws RequireLoginException\n     * @throws Exception\n     */\n    public function useToken(?string $token = null): self\n    {\n        if (empty($token)) {\n            throw new Exception(__('campaigns.invites.error.invalid_token'));\n        }\n\n        $this->invite = CampaignInvite::where('token', $token)->first();\n        if (empty($this->invite)) {\n            throw new Exception(__('campaigns.invites.error.invalid_token'));\n        }\n\n        // Inactive (removed campaigns won't have their token still in the db)\n        if (! $this->invite->is_active) {\n            throw new Exception(__('campaigns.invites.error.inactive_token'));\n        }\n\n        if (! $this->invite->campaign->canHaveMoreMembers()) {\n            throw new Exception(__('campaigns/limits.members'));\n        }\n\n        if (! isset($this->user)) {\n            Session::put('invite_token', $this->invite->token);\n            throw new RequireLoginException(__('campaigns.invites.error.join', ['campaign' => '<strong>' . $this->invite->campaign->name . '</strong>']));\n        }\n\n        $this->join();\n\n        return $this;\n    }\n\n    public function attribute(): self\n    {\n        $this->user->referred_by = $this->invite->created_by;\n        $this->user->save();\n\n        ReferralEvent::create([\n            'created_by' => $this->user->id,\n            'referred_by' => $this->invite->created_by,\n            'type' => ReferralEventType::invite,\n        ]);\n\n        return $this;\n    }\n\n    public function invite(CampaignInvite $invite): self\n    {\n        $this->invite = $invite;\n\n        return $this;\n    }\n\n    public function campaign(): Campaign\n    {\n        return $this->invite->campaign;\n    }\n\n    public function join(): self\n    {\n        Session::forget('invite_token');\n\n        // Already a member?\n        $role = CampaignUser::campaignUser($this->invite->campaign->id, $this->user->id)\n            ->first();\n\n        if (empty($role)) {\n            $role = new CampaignUser([\n                'user_id' => $this->user->id,\n                'campaign_id' => $this->invite->campaign->id,\n            ]);\n            $role->save();\n        } else {\n            // User is already part of the campaign, don't go further otherwise one user can spam the join link and\n            // use up all the available tokens (validity field).\n            UserCache::clear();\n\n            return $this;\n        }\n\n        // Add the user to a role if it's provided by the invite link\n        if ($this->invite->role) {\n            $memberRole = CampaignRoleUser::create([\n                'campaign_role_id' => $this->invite->role->id,\n                'user_id' => $role->user_id,\n            ]);\n        }\n\n        // Invitation links can have a set number of usage (validity)\n        $this->invalidate();\n\n        // If the user was following the campaign, remove it\n        if ($this->invite->campaign->isFollowing()) {\n            $this->campaignFollowService\n                ->campaign($this->invite->campaign)\n                ->user($this->user)\n                ->remove();\n        }\n\n        UserJoined::dispatch($this->invite->campaign, $this->user, $this->invite);\n\n        return $this;\n    }\n\n    protected function invalidate(): void\n    {\n        if (empty($this->invite->validity)) {\n            return;\n        }\n        $this->invite->validity--;\n        if ($this->invite->validity <= 0) {\n            $this->invite->is_active = false;\n        }\n        $this->invite->save();\n    }\n}\n"
  },
  {
    "path": "app/Services/LanguageService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse Mcamara\\LaravelLocalization\\Facades\\LaravelLocalization;\n\nclass LanguageService\n{\n    /**\n     * @return array\n     */\n    public function getSupportedLanguagesList($emptyOption = false)\n    {\n        $languages = [];\n        if ($emptyOption) {\n            $languages = [null => ''];\n        }\n        foreach (LaravelLocalization::getSupportedLocales() as $langKey => $langData) {\n            $languages[$langKey] = trans('languages.codes.' . $langKey);\n        }\n\n        return $languages;\n    }\n}\n"
  },
  {
    "path": "app/Services/Layout/NavigationService.php",
    "content": "<?php\n\nnamespace App\\Services\\Layout;\n\nuse App\\Facades\\Domain;\nuse App\\Facades\\Identity;\nuse App\\Facades\\Img;\nuse App\\Facades\\ReleaseCache;\nuse App\\Facades\\UserCache;\nuse App\\Models\\AppRelease;\nuse App\\Models\\Campaign;\nuse App\\Models\\Pledge;\nuse App\\Notifications\\Header;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\nclass NavigationService\n{\n    use UserAware;\n\n    public function data(): array\n    {\n        return [\n            'profile' => $this->profile(),\n            'campaigns' => $this->campaigns(),\n            'notifications' => $this->notificationsData(),\n            'marketplace' => $this->marketplace(),\n            'releases' => $this->releasesData(),\n            'has_unread' => $this->user->hasUnread(),\n            'fontawesome_pro' => ! empty(config('fontawesome.kit')),\n        ];\n    }\n\n    protected function profile(): array\n    {\n        $data = [\n            'name' => $this->user->name,\n            'email' => $this->user->email,\n            'created' => __('users/profile.fields.member_since', ['date' => $this->user->created_at->format('M d, Y')]),\n            'is_impersonating' => false,\n            'your_profile' => __('header.user.your-profile'),\n        ];\n\n        if (Identity::isImpersonating()) {\n            $data['is_impersonating'] = true;\n\n            // Get the campaign linked to the impersonation\n            $campaign = Campaign::findOrFail(Identity::getCampaignId());\n\n            // \\App\\Facades\\CampaignLocalization::setCampaign(Identity::getCampaignId());\n            $returnUrl = route('identity.back', $campaign);\n            $campaignUrl = 'campaign/' . $campaign->id;\n            $returnUrl = str_replace('campaign/navigation', $campaignUrl, $returnUrl);\n            $data['return'] = [\n                'url' => $returnUrl,\n                'name' => __('campaigns.members.actions.switch-back'),\n            ];\n\n            return $data;\n        }\n        if (! empty($this->user->pledge) && $this->user->subscribed('kanka')) {\n            $data['subscription'] = [\n                'tier' => $this->user->pledge,\n                'created' => __('users/profile.fields.subscriber_since', ['date' => $this->user->subscription('kanka')->created_at->format('M d, Y')]),\n                'image' => 'https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/' . mb_strtolower($this->user->pledge) . '-128.png',\n                'boosters' => __('settings/boosters.available', [\n                    'amount' => $this->user->availableBoosts(),\n                    'total' => $this->user->maxBoosts(),\n                ]),\n            ];\n        } else {\n            $data['subscription'] = [\n                'tier' => Pledge::KOBOLD,\n                'image' => 'https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/kobold-128.png',\n                // 'call_to_action' => __('Subscriptions start at USD 5.00 per month')\n                'call_to_action' => __('settings/boosters.available', [\n                    'amount' => $this->user->availableBoosts(),\n                    'total' => $this->user->maxBoosts(),\n                ]),\n                'call_to_action_2' => __('header.user.upgrade'),\n            ];\n        }\n        $data['subscription']['title'] = __('settings.menu.subscription');\n        if (! config('services.stripe.enabled')) {\n            unset($data['subscription']);\n        }\n\n        $data['urls'] = [\n            'settings' => ['url' => route('settings.profile'), 'name' => __('header.user.settings')],\n            'profile' => ['url' => route('users.profile', $this->user->id), 'name' => __('header.user.your-profile')],\n            'help' => ['url' => 'https://docs.kanka.io/en/latest', 'name' => __('crud.actions.help')],\n            'logout' => ['url' => route('logout'), 'name' => __('header.user.sign-out')],\n            'subscription' => route('settings.subscription'),\n        ];\n\n        return $data;\n    }\n\n    protected function campaigns(): array\n    {\n        $data = [\n            'member' => [],\n            'following' => [],\n            'texts' => [\n                'campaigns' => __('sidebar.campaign_switcher.created_campaigns'),\n            ],\n        ];\n        if (Identity::isImpersonating()) {\n            return $data;\n        }\n\n        $member = 0;\n        foreach (UserCache::campaigns() as $campaign) {\n            $data['member'][] = [\n                'name' => $campaign['name'],\n                'is_boosted' => $campaign['boosted'],\n                'image' => $campaign['image'] ? Img::crop(100, 96)->url($campaign['image']) : null,\n                'url' => $campaign['route'],\n            ];\n            $member++;\n        }\n\n        foreach (UserCache::follows() as $campaign) {\n            $data['following'][] = [\n                'name' => $campaign['name'],\n                'is_boosted' => $campaign['boosted'],\n                'image' => $campaign['image'] ? Img::crop(100, 96)->url($campaign['image']) : null,\n                'url' => $campaign['route'],\n            ];\n        }\n\n        $data['urls'] = [\n            'new' => route('start'),\n            'follow' => Domain::toFront('campaigns'),\n            'reorder' => route('settings.appearance', ['highlight' => 'campaign-switcher']),\n        ];\n        $data['texts'] = [\n            'new' => __('sidebar.campaign_switcher.new_campaign'),\n            'campaigns' => __('sidebar.campaign_switcher.created_campaigns'),\n            'followed' => __('sidebar.campaign_switcher.followed_campaigns'),\n            'featured' => __('front.campaigns.featured.title'),\n            'reorder' => __('sidebar.campaign_switcher.reorder'),\n            'count' => __('sidebar.campaign_switcher.count', [\n                'member' => $member,\n            ]),\n            'follow' => __('sidebar.campaign_switcher.follow_more'),\n        ];\n\n        return $data;\n    }\n\n    protected function notificationsData(): array\n    {\n        if (Identity::isImpersonating()) {\n            return [];\n        }\n        $data = [\n            'title' => __('settings.menu.notifications'),\n            'all' => [\n                'url' => route('notifications'),\n                'text' => __('header.notifications.read_all'),\n            ],\n            'none' => __('header.notifications.no-unread'),\n        ];\n\n        $data['messages'] = $this->notifications();\n\n        return $data;\n    }\n\n    protected function notifications(): array\n    {\n        $notifications = [];\n        /** @var Header $not */\n        foreach ($this->user->notifications()->unread()->take(5)->get() as $not) {\n            $url = '';\n            // @phpstan-ignore-next-line\n            $data = $not->data;\n            if (Arr::has($data['params'], 'link')) {\n                $url = $data['params']['link'];\n                if (! Str::startsWith($url, 'http')) {\n                    $url = url(app()->getLocale() . '/' . $url);\n                }\n            } elseif (Arr::has($data['params'], 'route')) {\n                $url = route($data['params']['route']);\n            }\n            $notifications[] = [\n                'id' => $not->id,\n                'icon' => $data['icon'],\n                'text' => __('notifications.' . $data['key'], $data['params']),\n                'url' => $url,\n                'colour' => $data['colour'],\n                'dismiss' => route('notifications.read', $not->id),\n                'dismiss_text' => __('header.notifications.dismiss'),\n                'is_read' => $not->read(), // @phpstan-ignore-line\n            ];\n        }\n\n        return $notifications;\n    }\n\n    protected function marketplace(): array\n    {\n        $data = [\n            'title' => __('footer.plugins'),\n        ];\n\n        return $data;\n    }\n\n    protected function releasesData(): array\n    {\n        if (Identity::isImpersonating()) {\n            return [];\n        }\n\n        $data = [\n            'title' => __('header.news.title'),\n            'news' => [],\n        ];\n\n        $data['releases'] = $this->releases();\n\n        return $data;\n    }\n\n    protected function releases(): array\n    {\n        $releases = ReleaseCache::latest();\n        $unreadReleases = [];\n        /** @var AppRelease $release */\n        foreach ($releases as $release) {\n            if ($release->alreadyRead()) {\n                continue;\n            }\n            $unreadReleases[] = [\n                'id' => $release->id,\n                'url' => $release->link,\n                'title' => $release->name,\n                'text' => $release->excerpt,\n                'dismiss' => route('settings.release', $release->id),\n                'dismiss_text' => __('header.notifications.dismiss'),\n            ];\n        }\n\n        return $unreadReleases;\n    }\n\n    public function pull(): array\n    {\n        if (Identity::isImpersonating()) {\n            return [\n                'has_alerts' => false,\n                /*'releases' => [],\n                'notifications' => [],*/\n            ];\n        }\n\n        return [\n            'has_alerts' => $this->user->hasUnread(),\n            /*'releases' => $this->releases(),\n            'notifications' => $this->notifications(),*/\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/LengthValidatorService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Http\\Requests\\ValidateReminderLength as Request;\nuse App\\Models\\Calendar;\n\nclass LengthValidatorService\n{\n    /**\n     * @return array\n     */\n    public function validateLength(Calendar $calendar, Request $request)\n    {\n        $day = $request['day'] ?? 0;\n        $month = $request['month'];\n        $length = $request['length'];\n\n        $daysInYear = $calendar->daysInYear();\n        $counter = 0;\n        $monthLength = 0;\n        foreach ($calendar->monthDataProperties() as $monthData) {\n            $counter = $counter + 1;\n            if ($counter >= $month) {\n                $monthLength = $monthLength + $monthData['data-length'];\n            }\n        }\n        $totalLength = $monthLength - $day + $daysInYear;\n        if ($length >= $totalLength) {\n            return [\n                'overflow' => true,\n                'message' => __('calendars.warnings.event_length', ['documentation' => '<a href=\"https://docs.kanka.io/en/latest/entries/calendars.html#long-lasting-reminders\"  class=\"text-link\"><i class=\"fa-solid fa-external-link\" aria-hidden=\"true\"></i> ' . __('footer.documentation') . '</a>',\n                ])];\n        }\n\n        return [\n            'overflow' => false,\n            'message' => __('calendars.warnings.event_length', ['documentation' => '<a href=\"https://docs.kanka.io/en/latest/entries/calendars.html#long-lasting-reminders\" class=\"text-link\"><i class=\"fa-solid fa-external-link\" aria-hidden=\"true\"></i> ' . __('footer.documentation') . '</a>',\n            ])];\n    }\n}\n"
  },
  {
    "path": "app/Services/LimitService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\UserFlags;\nuse App\\Facades\\UserCache;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass LimitService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected bool $readable = false;\n\n    protected bool $map = false;\n\n    public function map(): self\n    {\n        $this->map = true;\n\n        return $this;\n    }\n\n    public function readable(): self\n    {\n        $this->readable = true;\n\n        return $this;\n    }\n\n    public function upload(): int|string\n    {\n        // Default for Owlbears and legacy Goblins/Kobolds, or members of a campaign\n        $min = config('limits.filesize.image.owlbear');\n        if (! $this->user->isSubscriber() && (! isset($this->campaign) || ! $this->campaign->boosted())) {\n            $min = config('limits.filesize.image.standard');\n            if ($this->map) {\n                $min = config('limits.filesize.map');\n            }\n        } elseif ($this->user->isElemental() || (isset($this->campaign) && $this->campaign->isElemental())) {\n            $min = config('limits.filesize.image.elemental') * 1024;\n        } elseif ($this->user->isWyvern() || (isset($this->campaign) && $this->campaign->isWyvern())) {\n            $min = config('limits.filesize.image.wyvern');\n        }\n\n        $this->map = false;\n\n        if (empty($min)) {\n            $this->readable = false;\n\n            return PHP_INT_MAX;\n        }\n\n        $size = ($min * 1024);\n\n        return $this->finalize($size);\n    }\n\n    protected function finalize(int $size): string|int\n    {\n        if (isset($this->campaign)) {\n            $flags = UserCache::user($this->user)->campaign($this->campaign)->flags();\n        }\n\n        if (isset($flags[UserFlags::uploadSize->value]) && $flags[UserFlags::uploadSize->value]['amount'] > ceil($size / 1024)) {\n            $size = $flags[UserFlags::uploadSize->value]['amount'] * 1024;\n        }\n\n        if (! $this->readable) {\n            return $size;\n        }\n        $this->readable = false;\n\n        return ceil($size / 1024) . 'MiB';\n    }\n\n    public function entityFiles(): int\n    {\n        if ($this->campaign->boosted()) {\n            return config('limits.campaigns.files.premium');\n        }\n\n        return config('limits.campaigns.files.standard');\n    }\n}\n"
  },
  {
    "path": "app/Services/Logs/ApiLogService.php",
    "content": "<?php\n\nnamespace App\\Services\\Logs;\n\nuse App\\Models\\ApiLog;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Http\\JsonResponse;\nuse Throwable;\n\nclass ApiLogService\n{\n    use CampaignAware;\n    use RequestAware;\n    use UserAware;\n\n    protected $duration;\n\n    protected JsonResponse $response;\n\n    protected Throwable $exception;\n\n    public function duration($duration): self\n    {\n        $this->duration = $duration;\n\n        return $this;\n    }\n\n    public function response(JsonResponse $response): self\n    {\n        $this->response = $response;\n\n        return $this;\n    }\n\n    public function exception(Throwable $exception): self\n    {\n        $this->exception = $exception;\n\n        return $this;\n    }\n\n    public function log()\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n\n        // Front-facing APIs? Don't log\n        if (! isset($this->user)) {\n            return;\n        }\n\n        if (isset($this->exception)) {\n            $code = 500;\n        } else {\n            $code = isset($this->response) ? $this->response->getStatusCode() : 200;\n        }\n\n        ApiLog::create([\n            'campaign_id' => isset($this->campaign) ? $this->campaign->id : null,\n            'user_id' => $this->user->id,\n            'uri' => $this->request->path(),\n            'params' => $this->request->all(),\n            'duration' => $this->duration,\n            'response' => $code,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Services/Maps/ChunkingService.php",
    "content": "<?php\n\nnamespace App\\Services\\Maps;\n\nuse App\\Models\\Map;\nuse App\\Models\\User;\nuse App\\Notifications\\Header;\nuse Exception;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Intervention\\Image\\Drivers\\Gd\\Driver;\nuse Intervention\\Image\\Facades\\Image;\nuse Intervention\\Image\\ImageManager;\n\nclass ChunkingService\n{\n    protected Map $map;\n\n    /** @var \\Intervention\\Image\\Image */\n    protected $original;\n\n    protected string $path;\n\n    protected int $width = 0;\n\n    protected int $height = 0;\n\n    protected int $maxZoom = 8;\n\n    protected int $minZoom = 8;\n\n    protected int $levelMin = 0;\n\n    protected int $maxBound = 0;\n\n    protected int $maxZoomThreshold = 13;\n\n    protected int $tileSize = 256;\n\n    protected string $tileFormat = 'png';\n\n    protected int $tileOverlap = 1;\n\n    protected ImageManager $manager;\n\n    public function map(Map $map): self\n    {\n        $this->map = $map;\n\n        return $this;\n    }\n\n    public function chunk(): bool\n    {\n        if (empty($this->map->image)) {\n            throw new Exception('Map #' . $this->map->id . ' has no image.');\n        }\n\n        // Set the map chunking process\n        $this->map->chunking_status = Map::CHUNKING_RUNNING;\n        $this->map->saveQuietly();\n\n        // Get original image and load it into memory\n        $this->log('File ' . $this->map->image);\n\n        $this->openOriginal();\n        $this->log('Generating levels ' . $this->minZoom . ' to ' . $this->maxZoom);\n\n        // Create the folder for storing the chunks\n        $folder = 'maps/' . $this->map->id . '/chunks';\n        Storage::deleteDirectory($folder);\n        Storage::makeDirectory($folder);\n\n        // create new manager instance with desired driver\n        $this->manager = new ImageManager(Driver::class);\n\n        for ($level = $this->minZoom; $level <= $this->maxZoom; $level++) {\n            $this->log('creating chunks for level ' . $level);\n            $levelFolder = $folder . '/' . $level;\n            Storage::makeDirectory($levelFolder);\n\n            // Get the scale and dimension of the image tile we're creating, based on the level\n            $scale = $this->scale($level);\n            [$width, $height] = $this->dimension($scale);\n\n            $this->createTile($width, $height, $level, $levelFolder);\n        }\n\n        // Update the map's min/max zoom levels\n        $this->finish();\n\n        return true;\n    }\n\n    protected function scale(int $level): float\n    {\n        $max = $this->maxZoom - 1;\n\n        return pow(0.5, $max - $level);\n    }\n\n    /**\n     * @return int[]\n     */\n    protected function dimension(float $scale): array\n    {\n        $width = (int) ceil($this->width * $scale);\n        $height = (int) ceil($this->height * $scale);\n\n        // dump(\"Checking dimensions for scale $scale (\" . $this->width . 'x' . $this->height . \") => $width x $height\");\n        return [$width, $height];\n    }\n\n    protected function countTiles(int $width, int $height): array\n    {\n        $cols = (int) ceil(floatval($width) / $this->tileSize);\n        $rows = (int) ceil(floatval($height) / $this->tileSize);\n\n        return [$cols, $rows];\n    }\n\n    public function tileBounds(int $col, int $row, $w, $h): array\n    {\n        [$posX, $posY] = $this->tileBoundsPosition($col, $row);\n\n        $width = $this->tileSize + 2 * $this->tileOverlap;\n        $height = $this->tileSize + 2 * $this->tileOverlap;\n        $newWidth = min($width, $w - $posX);\n        $newHeight = min($height, $h - $posY);\n\n        // Make sure the new height and width doesn't get bigger than the available image size\n        // dump(\"$col / $row (max $w x $h)\");\n        // dump(\"Building a $newWidth x $newHeight image, offset at $posX x $posY\");\n\n        return ['x' => $posX, 'y' => $posY, 'height' => $newHeight, 'width' => $newWidth];\n    }\n\n    protected function tileBoundsPosition(int $column, int $row): array\n    {\n        $offsetX = $column === 0 ? 0 : $this->tileOverlap;\n        $offsetY = $row === 0 ? 0 : $this->tileOverlap;\n        $x = ($column * $this->tileSize) - $offsetX;\n        $y = ($row * $this->tileSize) - $offsetY;\n\n        return [$x, $y];\n    }\n\n    protected function createTile(int $width, int $height, int $level, string $levelFolder): void\n    {\n        $original = $this->generate($width, $height);\n\n        /*Storage::put(\n            $levelFolder . '/base.png',\n            (string)$this->original->encode($this->tileFormat, 70),\n            'public'\n        );*/\n\n        [$cols, $rows] = $this->countTiles($width, $height);\n        // dump(\"Create title for level $level\");\n        // dump(\"cols $cols rows $rows ($width x $height)\");\n        // $total = $cols * $rows;\n\n        foreach (range(0, $cols - 1) as $col) {\n            // dump(\"- Col $col\");\n            foreach (range(0, $rows - 1) as $row) {\n                $file = $col . '_' . $row . '.' . $this->tileFormat;\n                // dump('tile ' . $levelFolder . '/' . $file);\n                // dump(\"width $width height $height\");\n                $bounds = $this->tileBounds($col, $row, $width, $height);\n\n                // We need to clone the original, because Image::make($this->original) crops\n                // the original for some reason.\n                // $tile = clone $image;\n                /*Storage::put(\n                    $levelFolder . '/' . str_replace('.', '_make.', $file),\n                    (string)$tile->encode($this->tileFormat, 50),\n                    'public'\n                );*/\n\n                $image = clone $original;\n                $image->crop($bounds['width'], $bounds['height'], $bounds['x'], $bounds['y']);\n\n                /*Storage::put(\n                    $levelFolder . '/' . str_replace('.', '_tile.', $file),\n                    (string)$tile->encode($this->tileFormat, 50),\n                    'public'\n                );*/\n\n                // Create a 256x256 blank transparent canvas on which we'll insert the crop. This is to make sure each\n                // image create is a square tile (and avoid distortion in leafletjs)\n                $png = $this->manager->create($this->tileSize, $this->tileSize);\n                $png->place($image);\n\n                Storage::put(\n                    $levelFolder . '/' . $file,\n                    (string) $png->toPng(),\n                    'public'\n                );\n                // unset($tile);\n                unset($png, $image);\n            }\n        }\n\n        unset($original);\n    }\n\n    /**\n     * Define the minimum and maximum zoom level based on the image dimensions\n     */\n    protected function zoomLevels(int $max): self\n    {\n        $this->maxZoom = min((int) ceil(log($max, 2)), $this->maxZoomThreshold);\n        $this->levelMin = (int) floor(log($max, 2));\n\n        return $this;\n    }\n\n    /**\n     * Finish the process by updating the map\n     */\n    protected function finish(): self\n    {\n        $this->map->chunking_status = Map::CHUNKING_FINISHED;\n        $this->map->min_zoom = $this->minZoom;\n        $this->map->max_zoom = $this->maxZoom;\n        $this->map->center_x = 0;\n        $this->map->center_y = 0;\n        // Set initial zoom in bounds\n        if ($this->map->initial_zoom > $this->maxZoom || $this->map->initial_zoom < $this->minZoom) {\n            $this->map->initial_zoom = max($this->minZoom, min($this->maxZoom, $this->map->initial_zoom));\n        }\n        $this->map->saveQuietly();\n        Log::info('Saved map #' . $this->map->id);\n        if ($this->map->entity->creator) {\n            /** @var User $user */\n            $user = $this->map->entity->creator;\n            $user->notify(new Header(\n                'map.chunked',\n                'fa-regular fa-map',\n                'success',\n                ['name' => $this->map->name]\n            ));\n\n            Log::info('Notified user #' . $this->map->entity->created_by);\n        }\n\n        // Cleanup the locally downloaded file\n        Storage::disk('local')->delete($this->map->image);\n\n        return $this;\n    }\n\n    protected function log($log): self\n    {\n        Log::info($log);\n\n        return $this;\n    }\n\n    protected function generate(int $width, int $height)\n    {\n        $image = $this->manager->read($this->path);\n\n        return $image->resize($width, $height);\n    }\n\n    /**\n     * Open the original image\n     */\n    protected function openOriginal(): self\n    {\n        $this->path = Storage::disk('local')->path($this->map->image);\n\n        // Download from s3 to local\n        $s3 = Storage::disk('s3')->get($this->map->image);\n        Storage::disk('local')->put(\n            $this->map->image,\n            $s3\n        );\n\n        $original = $this->manager->read($this->path);\n\n        $this->width = $original->width();\n        $this->height = $original->height();\n\n        $this->maxBound = max([$this->width, $this->height]);\n        $this->zoomLevels($this->maxBound);\n\n        unset($s3, $original);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Maps/MigrateLayerService.php",
    "content": "<?php\n\nnamespace App\\Services\\Maps;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Models\\Image;\nuse App\\Models\\MapLayer;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\nclass MigrateLayerService\n{\n    protected MapLayer $layer;\n\n    protected Image $image;\n\n    public function layer(MapLayer $layer): self\n    {\n        $this->layer = $layer;\n\n        return $this;\n    }\n\n    public function migrate(): void\n    {\n        if (empty($this->layer->image_path)) {\n            throw new TranslatableException('maps/layers.migrate.empty');\n        }\n\n        $path = $this->layer->image_path;\n        $ext = Str::afterLast('.', $path);\n\n        $this->image = new Image;\n        $this->image->campaign_id = $this->layer->map->campaign_id;\n        $this->image->created_by = $this->layer->created_by;\n        $this->image->name = $this->layer->name;\n        $this->image->ext = $ext;\n        $this->image->size = (int) ceil(Storage::fileSize($path) / 1024); // kb\n        $this->image->visibility_id = $this->layer->visibility_id;\n        $this->image->save();\n\n        Storage::move($path, $this->image->path);\n\n        $this->layer->image_path = null;\n        $this->layer->image_uuid = $this->image->id;\n        $this->layer->save();\n    }\n}\n"
  },
  {
    "path": "app/Services/MarkdownMentionsService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Attribute;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\Post;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\MentionTrait;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\nclass MarkdownMentionsService\n{\n    use CampaignAware;\n    use MentionTrait;\n    use UserAware;\n\n    /** The text that is being parsed, usually an entry field */\n    protected ?string $text = '';\n\n    protected bool $isSingle = false;\n\n    /** @var array|Entity[] List of entities */\n    protected array $entities = [];\n\n    /** @var array|Post[] List of posts */\n    protected array $posts = [];\n\n    /** @var array|Entity[] List of private entities */\n    protected array $privateEntities = [];\n\n    /** @var array|EntityAsset[] List of entity aliases */\n    protected array $aliases = [];\n\n    /** @var array|Attribute[] List of attributes */\n    protected array $attributes = [];\n\n    public function single(bool $isSingle = true)\n    {\n        $this->isSingle = $isSingle;\n\n        return $this;\n    }\n\n    /**\n     * Parse a model's text for markdown export\n     */\n    public function parseForMarkdown(Model $model, string $field = 'entry'): string\n    {\n        return $this->prepareEntity($model, $field);\n    }\n\n    protected function prepareEntity(Model $model, string $field): string\n    {\n        // We have to cast to a string for when the entity was created in the API with a NULL entry\n        $this->text = (string) $model->$field;\n\n        return $this->replaceForMarkdown();\n    }\n\n    protected function replaceForMarkdown(): string\n    {\n        // Extract links from the entry to foreign\n        $this\n            ->parseMentions()\n            ->parseAttributes();\n\n        return (string) $this->text;\n    }\n\n    /**\n     * Replace mentions of entities to a supported markdown converter link\n     */\n    protected function parseMentions(): self\n    {\n        $this->text = preg_replace_callback('`\\[([a-z_-]+):(.*?)\\]`i', function ($matches) {\n            $data = $this->extractData($matches);\n\n            if ($data['type'] === 'post') {\n                return $this->parsePost($data);\n            }\n            $hasCustom = Arr::has($data, 'custom');\n\n            // If the user always wants advanced mentions, we force the [] syntax upon them\n            if ($hasCustom || (isset($this->user) && $this->user->alwaysAdvancedMentions())) {\n\n                // Get entity\n                $entity = $this->entity($data['id']);\n                if (! empty($entity) && $entity->entityType->isCustom()) {\n                    $moduleName = Str::slug($entity->entityType->plural() . '_' . $entity->entityType->id);\n                } elseif (! empty($entity)) {\n                    $moduleName = Str::slug($entity->entityType->pluralCode());\n                }\n\n                // If no entity then render as unknown\n                if (empty($entity) || ($entity->hasChild() && $entity->isMissingChild())) {\n                    return __('crud.history.unknown');\n                }\n\n                if ($this->isSingle) {\n                    $url = $entity->url();\n                } else {\n                    $url = str_replace(' ', '-', $moduleName) . '/'\n                        . str_replace(' ', '-', Str::slug($entity->name)) . '_' . $entity->id;\n                }\n\n                // If field, render that.\n                if (Arr::has($data, 'field')) {\n                    $name = $entity->name;\n                    $field = $data['field'];\n                    // Check for field\n                    if (isset($entity->$field)) {\n                        $name = $entity->$field;\n                    }\n\n                    return '<a href=\"'\n                        . $url\n                        . '\">'\n                        . $name\n                        . '</a>';\n                }\n\n                // If no alias, render name\n                if (! Arr::has($data, 'alias')) {\n\n                    $name = $entity->name;\n\n                    // Check for custom name\n                    if (isset($data['text'])) {\n                        $name = $data['text'];\n                    }\n\n                    return '<a href=\"'\n                        . $url\n                        . '\">'\n                        . $name\n                        . '</a>';\n                }\n\n                // An alias was attached, try loading that too\n                $alias = $this->alias($data['alias']);\n                if (empty($alias) || empty($alias->entity)) {\n\n                    return '<a href=\"'\n                        . $url\n                        . '\">' . $entity->name . '</a>';\n                }\n\n                // If alias use that.\n                return '<a href=\"'\n                    . $url\n                    . '\">'\n                    . $alias->name\n                    . '</a>';\n            }\n\n            $entity = $this->entity($data['id']);\n\n            // No entity found, the user might not be allowed to see it\n            if (empty($entity) || ($entity->hasChild() && $entity->isMissingChild())) {\n                return __('crud.history.unknown');\n            } else {\n\n                if ($this->isSingle) {\n                    $url = $entity->url();\n                } else {\n                    // Get module name\n                    if ($entity->entityType->isCustom()) {\n                        $moduleName = Str::slug($entity->entityType->plural() . '_' . $entity->entityType->id);\n                    } else {\n                        $moduleName = Str::slug($entity->entityType->pluralCode());\n                    }\n\n                    $url = str_replace(' ', '-', $moduleName) . '/'\n                        . str_replace(' ', '-', Str::slug($entity->name)) . '_' . $entity->id;\n                }\n\n                // Render normally\n                return '<a href=\"'\n                    . $url\n                    . '\">'\n                    . $entity->name\n                    . '</a>';\n            }\n\n        }, $this->text);\n\n        return $this;\n    }\n\n    /**\n     * Replace mentions of attributes to supported markdown converter link\n     */\n    protected function parseAttributes(): self\n    {\n        // Extract links from the entry to attribute\n        $this->text = preg_replace_callback('`\\{attribute:(.*?)\\}`i', function ($matches) {\n            $id = (int) $matches[1];\n\n            /** @var ?Attribute $attribute */\n            $attribute = $this->attribute($id);\n\n            // No entity found, the user might not be allowed to see it\n            if (empty($attribute) || ! $attribute->entity) {\n                return __('crud.history.unknown');\n            }\n\n            if ($this->isSingle) {\n                $url = $attribute->entity->url();\n            } else {\n                // Get entity type for linking\n                if ($attribute->entity->entityType->isCustom()) {\n                    $moduleName = Str::slug($attribute->entity->entityType->plural() . '_' . $attribute->entity->entityType->id);\n                } else {\n                    $moduleName = Str::slug($attribute->entity->entityType->pluralCode());\n                }\n                $url = str_replace(' ', '-', $moduleName) . '/'\n                    . str_replace(' ', '-', Str::slug($attribute->entity->name)) . '_' . $attribute->entity->id;\n            }\n\n            // Render attribute.\n            return '<a href=\"'\n                . $url\n                . '\">'\n                . $attribute->value\n                . '</a>';\n\n        }, $this->text);\n\n        return $this;\n    }\n\n    protected function parsePost(array $data): string\n    {\n        $post = $this->post($data['id']);\n\n        // If no post then render unknown\n        if (empty($post) || $post->entity->isMissingChild()) {\n            return __('crud.history.unknown');\n        }\n\n        if ($this->isSingle) {\n            $url = $post->entity->url();\n        } else {\n            // Get entitytype from the post\n            if ($post->entity->entityType->isCustom()) {\n                $moduleName = Str::slug($post->entity->entityType->plural() . '_' . $post->entity->entityType->id);\n            } else {\n                $moduleName = Str::slug($post->entity->entityType->pluralCode());\n            }\n\n            $url = str_replace(' ', '-', $moduleName) . '/'\n                . str_replace(' ', '-', Str::slug($post->entity->name)) . '_' . $post->entity->id;\n        }\n\n        // If transcluding a post, render its entry\n        if (Arr::has($data, 'text') && $data['text'] == 'transclude') {\n            return '<a href=\"'\n                . $url\n                . '\">'\n                . $post->entry\n                . '</a>';\n        }\n\n        // Render normally\n        return '<a href=\"'\n            . $url\n            . '\">'\n            . $post->name\n            . '</a>';\n    }\n\n    protected function entity(int $id): ?Entity\n    {\n        if (! Arr::has($this->entities, (string) $id) && ! Arr::has($this->privateEntities, (string) $id)) {\n            $this->entities[$id] = Entity::with(['entityType'])->where(['id' => $id])->first();\n        }\n\n        return Arr::get($this->entities, $id);\n    }\n\n    protected function alias(int $id): ?EntityAsset\n    {\n        if (! Arr::has($this->aliases, (string) $id)) {\n            $this->aliases[$id] = EntityAsset::with(['entity', 'entity.tags', 'entity.entityType'])\n                ->alias()\n                ->where(['id' => $id])->first();\n        }\n\n        return Arr::get($this->aliases, $id);\n    }\n\n    protected function attribute(int $id): ?Attribute\n    {\n        if (! Arr::has($this->attributes, (string) $id)) {\n            $this->attributes[$id] = Attribute::with(['entity', 'entity.entityType'])\n                ->where(['id' => $id])->first();\n        }\n\n        return Arr::get($this->attributes, $id, null);\n    }\n\n    protected function post(int $id): ?Post\n    {\n        if (! Arr::has($this->posts, (string) $id)) {\n            $this->posts[$id] = Post::with(['entity', 'entity.entityType'])\n                ->has('entity')\n                ->find($id);\n        }\n\n        return Arr::get($this->posts, $id);\n    }\n}\n"
  },
  {
    "path": "app/Services/Mentions/SaveService.php",
    "content": "<?php\n\nnamespace App\\Services\\Mentions;\n\nuse App\\Models\\EntityType;\nuse App\\Services\\Entity\\NewService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse DOMDocument;\nuse DomElement;\nuse DOMXPath;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\nclass SaveService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected ?string $text;\n\n    protected DOMDocument $document;\n\n    protected DOMXPath $xpath;\n\n    /** @var array Created new mentions to avoid duplicates */\n    protected array $newEntityMentions = [];\n\n    /** @var bool New entities have been created from the mention parsing */\n    protected bool $createdNewEntities = false;\n\n    protected string $advancedMentionClass = 'advanced-mention';\n\n    protected string $advancedMentionNameClass = 'advanced-mention-name';\n\n    public function __construct(\n        protected NewService $newService,\n    ) {}\n\n    /**\n     * Might be a 600,000 word html document. Might be a <p><br /></p>.\n     * Who knows what we'll get, but we'll do our best to be useful.\n     */\n    public function text(?string $text): self\n    {\n        $this->text = $text;\n\n        return $this;\n    }\n\n    /**\n     * If new entities were created from the mentions\n     */\n    public function hasNewEntities(): bool\n    {\n        return $this->createdNewEntities;\n    }\n\n    /**\n     * Transform the html from the text editor with its weird mention syntax into mentions that can be parsed later on\n     */\n    public function save(): string\n    {\n        if (empty($this->text)) {\n            return '';\n        }\n\n        return $this\n            ->parseNewEntities()\n            ->prepareDocument()\n            ->parseMentions()\n            ->cleanup()\n            ->html();\n    }\n\n    /**\n     * The user can type @NewEntity and create a bunch of new things on the fly. This function\n     * supports that.\n     */\n    protected function parseNewEntities(): self\n    {\n        $this->text = preg_replace_callback(\n            '`\\[new:([a-z_-]+)\\|(.*?)\\]`i',\n            function ($data) {\n                if (count($data) !== 3) {\n                    return $data[0];\n                }\n\n                // check type is valid\n                return $this->newEntityMention($data[1], $data[2]);\n            },\n            $this->text\n        );\n\n        return $this;\n    }\n\n    /**\n     * We have a text of html, transform that into a DomDocument and DomXPath to be able to loop on various html\n     * elements easily.\n     */\n    protected function prepareDocument(): self\n    {\n        // Parse all links and transform them into advanced mentions [] if needed\n        $this->document = new DOMDocument;\n        libxml_use_internal_errors(true); // Suppress warnings for malformed HTML\n        $this->document->loadHTML(mb_convert_encoding($this->text, 'HTML-ENTITIES', 'UTF-8'));\n        libxml_clear_errors();\n\n        $this->xpath = new DOMXPath($this->document);\n\n        return $this;\n    }\n\n    /**\n     * Mentions come in different shapes and sizes. Handle them all in a single function call.\n     */\n    protected function parseMentions(): self\n    {\n        $nodes = $this->xpath->query('//a[\n            contains(concat(\" \", normalize-space(@class), \" \"), \" mention \") or\n            contains(concat(\" \", normalize-space(@class), \" \"), \" post-mention \") or\n            contains(concat(\" \", normalize-space(@class), \" \"), \" attribute-mention \")\n        ]');\n\n        foreach ($nodes as $element) {\n            if ($element instanceof DomElement) {\n                $this->parseMention($element);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * We have a mention link, do some magic\n     */\n    protected function parseMention(DomElement $mentionLink): void\n    {\n        $text = $mentionLink->nodeValue;\n\n        $name = html_entity_decode($mentionLink->getAttribute('data-name'));\n\n        // Now you can compare $name with $text to check for edits\n        $mentionName = Str::replace(['&amp;'], ['&'], $text);\n        $advancedMention = $mentionLink->getAttribute('data-mention');\n        $advancedAttribute = $mentionLink->getAttribute('data-attribute');\n        // It's not a mention or attribute, keep it as is\n        if (empty($advancedMention) && empty($advancedAttribute)) {\n            $this->replace($name, $mentionLink);\n\n            return;\n        }\n\n        // Advanced attribute [attribute:123], use that\n        if (! empty($advancedAttribute)) {\n            $this->replace($advancedAttribute, $mentionLink);\n\n            return;\n        }\n\n        // If the name isn't the target name, transform it into an advanced mention\n        $originalName = $mentionLink->getAttribute('data-name');\n\n        // Normalize data-mention to just [type:id] in case it contains extra params\n        if (preg_match('/\\[?([a-zA-Z_]+:\\d+)/', $advancedMention, $mentionParts)) {\n            $advancedMention = '[' . $mentionParts[1] . ']';\n        }\n\n        $params = new Collection;\n        // Tiptap sends config in a property to keep things clean\n        if (! empty($mentionLink->getAttribute('data-config'))) {\n            $params = new Collection(explode('|', $mentionLink->getAttribute('data-config')));\n        }\n\n        // Check if the mention name was customised by the user\n        $hasCustomName = ! empty($originalName) && $originalName != Str::replace('&quot;', '\"', $mentionName);\n\n        if ($hasCustomName) {\n            if ($params->isNotEmpty()) {\n                // Tiptap: merge custom name with params (page:abc|anchor:#post-1 etc)\n                $params->prepend($mentionName);\n                $mention = Str::replace(']', '|' . $params->implode('|') . ']', $advancedMention);\n            } else {\n                // Other editors: just attach the custom name\n                $mention = Str::replace(']', '|' . $mentionName . ']', $advancedMention);\n            }\n            $this->replace($mention, $mentionLink);\n\n            return;\n        }\n\n        // Add params to the mention link\n        if ($params->isNotEmpty()) {\n            $advancedMention = Str::replaceLast(']', '|' . $params->implode('|') . ']', $advancedMention);\n        }\n\n        $this->replace($advancedMention, $mentionLink);\n    }\n\n    /**\n     * Get rid of any fancy <ins> and special <span> elements leftover from mentions with custom names\n     */\n    protected function cleanup(): self\n    {\n        // Remove legacy <ins> and <span> advanced-mention elements\n        $advancedNodes = $this->xpath->query('//ins[@class=\"' . $this->advancedMentionNameClass . '\" and @data-name] | //span[@class=\"' . $this->advancedMentionNameClass . '\" and @data-name]');\n        foreach ($advancedNodes as $node) {\n            $node->parentNode->removeChild($node);\n        }\n\n        return $this;\n    }\n\n    protected function replace(string $text, DomElement $node): void\n    {\n        $textNode = $this->document->createTextNode($text);\n        $node->parentNode->replaceChild($textNode, $node);\n    }\n\n    /**\n     * Create a new entity based on a mention\n     */\n    protected function newEntityMention(string $type, string $name): string\n    {\n        if (empty($type) || empty($name)) {\n            return $name;\n        }\n\n        $types = $this->newService->campaign($this->campaign)->user($this->user)->available();\n\n        /** @var ?EntityType $entityType */\n        $entityType = $types->where('code', $type)->first();\n        if (! $entityType) {\n            return $name;\n        }\n\n        // Do we already have it cached?\n        $key = $type . ':' . mb_strtolower($name);\n        if (isset($this->newEntityMentions[$key])) {\n            return \"[{$type}:\" . $this->newEntityMentions[$key] . ']';\n        }\n\n        // Create the new model\n        $newEntity = $this->newService\n            ->user($this->user)\n            ->entityType($entityType)\n            ->create($name);\n        $this->newEntityMentions[$key] = $newEntity->id;\n        $this->createdNewEntities = true;\n\n        return '[' . $type . ':' . $newEntity->id . ']';\n    }\n\n    /**\n     * When all is said and done, get the body content of DomDocument and save that to the db\n     */\n    protected function html(): string\n    {\n        $body = $this->document->getElementsByTagName('body')->item(0);\n        if (empty($body)) {\n            return '';\n        }\n        $newHtml = '';\n        foreach ($body->childNodes as $child) {\n            $newHtml .= $this->document->saveHTML($child);\n        }\n\n        return $newHtml;\n    }\n}\n"
  },
  {
    "path": "app/Services/MentionsService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Facades\\Attributes;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Domain;\nuse App\\Models\\Attribute;\nuse App\\Models\\Calendar;\nuse App\\Models\\Character;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\Map;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Post;\nuse App\\Models\\Quest;\nuse App\\Services\\Entity\\NewService;\nuse App\\Services\\TOC\\TocSlugify;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\MentionTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\nuse TOC\\MarkupFixer;\nuse TOC\\TocGenerator;\n\nclass MentionsService\n{\n    use CampaignAware;\n    use MentionTrait;\n\n    /** The text that is being parsed, usually an entry field */\n    protected ?string $text = '';\n\n    /** @var array|Entity[] List of entities */\n    protected array $entities = [];\n\n    /** @var array|Post[] List of posts */\n    protected array $posts = [];\n\n    /** @var array|Entity[] List of private entities */\n    protected array $privateEntities = [];\n\n    /** @var array|EntityAsset[] List of entity aliases */\n    protected array $aliases = [];\n\n    /** @var array|Attribute[] List of attributes */\n    protected array $attributes = [];\n\n    /** @var array List of mentioned entities (their ids) */\n    protected array $mentionedEntities = [];\n\n    /** @var array List of mentioned private entities (their ids) */\n    protected array $hiddenEntities = [];\n\n    /** @var array List of mentioned attributes (their ids) */\n    protected array $mentionedAttributes = [];\n\n    /** @var array List of valid entity types */\n    protected array $validEntityTypes = [];\n\n    /** @var string Class used to inject and strip advanced mention name helpers */\n    public const string ADVANCED_MENTION_CLASS = 'advanced-mention-name';\n\n    /** @var bool When false, parsing field:entry won't render mentions */\n    protected bool $enableEntryField = true;\n\n    /** @var bool When true, names of entities will be rendered, instead of a tooltip link */\n    protected bool $onlyName = false;\n\n    /** @var bool When true, mentions will be mapped into links to the entities */\n    protected bool $isCopying = false;\n\n    public function __construct(\n        protected MarkupFixer $markupFixer,\n        protected NewService $newService,\n    ) {}\n\n    /**\n     * Map the mentions in an entity\n     */\n    public function map(MiscModel $model, string $field = 'entry'): string\n    {\n        $this->text = ! empty($model->$field) ? $model->$field : '';\n\n        return $this->extractAndReplace();\n    }\n\n    /**\n     * Map a string\n     */\n    public function mapText(?string $text = null): string\n    {\n        $this->text = $text;\n\n        return $this->extractAndReplace();\n    }\n\n    /**\n     * Map a string\n     */\n    public function mapCopiedEntry(?string $text = null): string\n    {\n        $this->text = $text;\n\n        return $this->extractAndLink();\n    }\n\n    /**\n     * Map the mentions in an entity's tooltip (boosted feature)\n     */\n    public function mapEntity(Entity $entity, string $field = 'tooltip'): string\n    {\n        $this->text = ! empty($entity->$field) ? $entity->$field : '';\n\n        return $this->extractAndReplace();\n    }\n\n    /**\n     * Map the mentions in any model\n     *\n     * @return string|string[]|null\n     */\n    public function mapAny(Model $model, string $field = 'entry')\n    {\n        $this->text = (string) $model->{$field};\n\n        return $this->extractAndReplace();\n    }\n\n    /**\n     * Map the mentions in an attribute\n     *\n     * @return string|string[]|null\n     */\n    public function mapAttribute(Attribute $attribute, ?string $text = null)\n    {\n        // If the attribute mentions itself in the value, don't do any parsing, it would cause an endless loop.\n        // The first check is for unchecked checkboxes\n        if (! empty($attribute->value) && Str::contains($attribute->value, $attribute->mentionName())) {\n            return Attributes::parse($attribute);\n        }\n\n        // Called in this order to avoid a bug that would render an attribute mention inside an attribute wrong.\n        if (! $text) {\n            $this->text = Attributes::parse($attribute);\n        } else {\n            $this->text = $text;\n        }\n\n        return $this->extractAndReplace();\n    }\n\n    public function onlyName(bool $option = true): self\n    {\n        $this->onlyName = $option;\n\n        return $this;\n    }\n\n    /**\n     * Parse a model's text for editing (transform mentions into advanced mentions, normal\n     * mentions visually, etc)\n     */\n    public function parseForEdit(Model $model, string $field = 'entry'): string\n    {\n        return $this->editEntity($model, $field);\n    }\n\n    protected function editEntity(Model $model, string $field): string\n    {\n        // We have to cast to a string for when the entity was created in the API with a NULL entry\n        $this->text = (string) $model->$field;\n\n        return $this->replaceForEdit();\n    }\n\n    /**\n     * Parse an entity and create the advanced mention helper bubble\n     */\n    public function advancedMentionHelper(string $name): string\n    {\n        $cleanEntityName = Str::replace(['\"', '&amp;'], ['\\'', '&'], $name);\n\n        return '<ins class=\"' . self::ADVANCED_MENTION_CLASS . '\" data-name=\"'\n            . $cleanEntityName . '\"></ins>';\n    }\n\n    /**\n     * Search mentions in a text and replace them with tooltiped links\n     *\n     * @return string|string[]|null\n     */\n    protected function extractAndReplace()\n    {\n        // Pre-fetch all the entities\n        $this->prepareEntities();\n        $this->prepareHiddenEntities();\n\n        // Extract links from the entry to foreign\n        $this->replaceEntityMentions();\n\n        // And now for extra fun, let's do attributes!\n        $this->mapAttributes();\n\n        // Can't forget our custom blocks\n        $this->mapCodes();\n\n        // Clean up weird ` chars that break the js\n        $this->text = str_replace('`', '\\'', $this->text);\n\n        $this->fixGalleryUrls();\n\n        return $this->text;\n    }\n\n    public function extractAndLink(): string\n    {\n        CampaignLocalization::forceCampaign($this->campaign);\n\n        $this->isCopying = true;\n        // Pre-fetch all the entities\n        $this->prepareEntities();\n        $this->prepareHiddenEntities();\n\n        // Extract links from the entry to foreign\n        $this->replaceEntityMentions();\n\n        return $this->text;\n    }\n\n    protected function replaceEntityMentions(): void\n    {\n        $this->text = preg_replace_callback('`\\[([a-z_-]+):(.*?)\\]`i', function ($matches) {\n            // Icons\n            $fontAwesomes = ['fa ', 'fas ', 'far ', 'fab ', 'ra ', 'fa-solid ', 'fa-regular ', 'fa-brands '];\n            if ($matches[1] == 'icon' && Str::startsWith($matches[2], $fontAwesomes)) {\n                return '<i class=\"' . e($matches[2]) . '\" aria-hidden=\"true\"></i>';\n            }\n\n            $data = $this->extractData($matches);\n            if (Arr::get($data, 'type') === 'post') {\n                return $this->mentionPost($data);\n            }\n\n            $entity = $this->entity($data['id']);\n            $tagClasses = [];\n            $cssClasses = ['entity-mention'];\n            // No entity found, the user might not be allowed to see it\n            if (empty($entity)) {\n                $hiddenEntity = $this->hiddenEntity($data['id']);\n                if (empty($hiddenEntity)) {\n                    if ($this->onlyName) {\n                        return __('crud.history.unknown');\n                    }\n                    $replace = Arr::get(\n                        $data,\n                        'text',\n                        '<i class=\"unknown-mention unknown-entity\">' . __('crud.history.unknown') . '</i>'\n                    );\n                } else {\n                    // An alias was used for this mention, so let's try and find it. ACL is handled directly\n                    // on the EntityAlias object.\n                    if (! empty($data['alias'])) {\n                        $alias = $hiddenEntity->assets()->alias()->where('id', $data['alias'])->first();\n                        if (! empty($alias)) {\n                            $data['text'] = $alias->name;\n                        }\n                    }\n                    if ($this->onlyName) {\n                        return Arr::get($data, 'text', $hiddenEntity->name);\n                    }\n                    $replace = '<i class=\"unknown-mention unknown-entity\" data-entity-type=\"' .\n                        $hiddenEntity->entityType->code . '\">' .\n                        Arr::get($data, 'text', $hiddenEntity->name) . '</i>';\n                }\n            } else {\n                $routeOptions = [];\n                if (! empty($data['params'])) {\n                    $routeParams = explode('&amp;', $data['params']);\n                    foreach ($routeParams as $routeParam) {\n                        // Do we whitelist? or have a max length to avoid shenanigans?\n                        if (mb_strlen($routeParam) > 20) {\n                            continue;\n                        }\n                        $paramOptions = explode('=', $routeParam);\n                        if (count($paramOptions) != 2) {\n                            continue;\n                        }\n                        $routeOptions[$paramOptions[0]] = $paramOptions[1];\n                    }\n                }\n\n                $url = $entity->url('show', $routeOptions);\n                if (! empty($data['page'])) {\n                    // Let's validate this new url first. Maybe we need to map to entities/id (ex inventory)\n                    $entityPages = ['inventory', 'abilities', 'relations', 'attributes', 'assets'];\n                    if (in_array($data['page'], $entityPages)) {\n                        $page = $data['page'];\n                        if ($page === 'relations') {\n                            $page = 'relations.index';\n                        } elseif ($page === 'assets') {\n                            $page = 'entity_assets.index';\n                        }\n                        $url = route('entities.' . $page, [$this->campaign, $entity->id] + $routeOptions);\n                    } else {\n                        $url = $entity->url($data['page'], [$this->campaign] + $routeOptions);\n                    }\n                }\n                // An alias was used for this mention, so let's try and find it. ACL is handled directly\n                // on the EntityAlias object.\n                if (! empty($data['alias'])) {\n                    $alias = $entity->assets()->alias()->where('id', $data['alias'])->first();\n                    if (! empty($alias)) {\n                        $data['text'] = $alias->name;\n                    }\n                }\n                if (! empty($data['anchor'])) {\n                    $url .= '#' . $data['anchor'];\n                }\n\n                $dataUrl = route('entities.tooltip', [$this->campaign->id, $entity->id]);\n                if (! empty($data['tooltip']) && $data['tooltip'] === 'attributes') {\n                    $dataUrl = route('entities.tooltip', [$this->campaign, $entity, 'render' => 'attributes']);\n                }\n\n                // If this request is through the API, we need to inject the language in the url\n                if (Domain::isApi()) {\n                    $url = Str::replaceFirst('/campaign/', '/w/', $url);\n                    $dataUrl = Str::replaceFirst('/w/', '/w/', $dataUrl);\n                }\n\n                // Add tags as a class\n                foreach ($entity->tags as $tag) {\n                    $tagClasses[] = 'id-' . $tag->id;\n                    $tagClasses[] = $tag->slug;\n                }\n                // Referencing a custom field on the entity\n                if (! empty($data['field'])) {\n                    $field = $data['field'];\n                    // Mapping\n                    if ($field == 'gender') {\n                        $field = 'sex';\n                    }\n\n                    if ($entity->hasChild() && ! $entity->isMissingChild()) {\n                        /** @var Character|Map|Quest $child */\n                        $child = $entity->child;\n                        if ($field == 'family' && ! $child->families->isEmpty()) {\n                            $data['text'] = $child->characterFamilies->first()->family->name;\n                        }\n                        if ($field == 'race' && ! $child->characterRaces->isEmpty()) {\n                            $data['text'] = $child->characterRaces->first()->race->name;\n                        }\n                        if ($field == 'calendar_date' && $child->calendar_id) {\n                            $data['text'] = $entity->calendarReminder()->readableDate();\n                        }\n                    }\n                    if ($field === 'entry' && method_exists($entity, 'parsedEntry')) {\n                        if ($this->enableEntryField) {\n                            $this->lockEntryRendering();\n                            $parsedTargetEntry = $entity->parsedEntry();\n                            $this->unlockEntryRendering();\n                        } else {\n                            $parsedTargetEntry = $entity->entry;\n                        }\n                        $cssClasses[] = 'mention-field-entry block';\n                        $entityName = '<a href=\"' . $url . '\"'\n                            . ' class=\"entity-mention-name block mb-2 text-link\"'\n                            . ' data-toggle=\"tooltip-ajax\"'\n                            . ' data-id=\"' . $entity->id . '\"'\n                            . ' data-url=\"' . $dataUrl . '\"'\n                            . '>'\n                            . Arr::get($data, 'text', $entity->name)\n                            . '</a>';\n\n                        return '<span class=\"' . implode(' ', $cssClasses) . '\"'\n                            . ' data-entity-tags=\"' . implode(' ', $tagClasses) . '\"'\n                            . '>'\n                            . $entityName\n                            . '<div class=\"mention-entry-content\">'\n                            . $parsedTargetEntry\n                            . '</div>'\n                            . '</span>';\n                    } elseif ($field === 'attributes') {\n                        return '<iframe\n                            src=\"' . route('entities.attributes-dashboard', [$this->campaign, $entity]) . '\"\n                            data-entity-tags=\"' . implode(' ', $tagClasses) . '\"\n                            data-entity-type=\"' . $entity->entityType->code . '\"\n                            class=\"entity-attributes-render w-full h-full\"\n                        ></iframe>';\n                    } elseif ($field == 'map' && isset($child) && $child->explorable()) {\n                        $height = 300;\n                        $width = 300;\n                        if (isset($routeOptions['height']) && is_numeric($routeOptions['height'])) {\n                            $height = $routeOptions['height'];\n                        }\n                        if (isset($routeOptions['width']) && is_numeric($routeOptions['width'])) {\n                            $width = $routeOptions['width'];\n                        }\n\n                        return '<iframe src=\"' . route('maps.preview', [$this->campaign, $child]) . '\" class=\"map-preview\" data-map=\"{{ $entity->id }}\" width=\"' . $width . '\" height=\"' . $height . '\"></iframe>';\n                    } elseif ($entity->hasChild() && ! $entity->isMissingChild() && isset($entity->child->$field)) {\n                        $foreign = $entity->child->$field;\n                        if ($foreign instanceof Model) {\n                            if (isset($foreign->name) && ! empty($foreign->name)) {\n                                $data['text'] = $foreign->name;\n                            }\n                        } elseif (is_string($foreign)) {\n                            $data['text'] = $foreign;\n                        }\n                        if ($field == 'date' && $entity->child instanceof Calendar) {\n                            $data['text'] = $entity->child->niceDate();\n                        }\n                    } elseif (isset($entity->$field) && is_string($entity->$field)) {\n                        $data['text'] = $entity->$field;\n                    }\n\n                    $cssClasses[] = 'mention-field-' . Str::slug($field);\n                }\n\n                if ($this->onlyName) {\n                    return Arr::get($data, 'text', $entity->name);\n                }\n\n                if ($this->isCopying) {\n                    return '<a href=\"' . $url . '\" class=\"external-mention text-link\" data-entity-type=\"' . $entity->entityType->code . '\"'\n                    . '>'\n                    . Arr::get($data, 'text', $entity->name)\n                    . '</a>';\n                }\n                $replace = '<a href=\"' . $url . '\"'\n                    . ' class=\"' . implode(' ', $cssClasses) . '\"'\n                    . ' data-entity-tags=\"' . implode(' ', $tagClasses) . '\"'\n                    . ' data-entity-type=\"' . $entity->entityType->code . '\"'\n                    . ' data-toggle=\"tooltip-ajax\"'\n                    . ' data-id=\"' . $entity->id . '\"'\n                    . ' data-url=\"' . $dataUrl . '\"'\n//                    . ' data-mention-url=\"' . route('entities.tooltip', $entity). '\"'\n//                    . ' title=\"<i class=\\'fa fa-spinner fa-spin\\'></i>\"'\n                    . '>'\n                    . Arr::get($data, 'text', $entity->name)\n                    . '</a>';\n            }\n\n            return $replace;\n        }, $this->text);\n    }\n\n    /**\n     * The gallery injects images as a thumbnail, instead of the final URL.\n     * Meaning that when we switched from images.kanka.io to th.kanka.io,\n     * all the gallery images in text were broken.\n     */\n    protected function fixGalleryUrls(): self\n    {\n        if (empty(config('thumbor.key'))) {\n            return $this;\n        }\n        $this->text = Str::replace(\n            'https://images.kanka.io/user/',\n            config('thumbor.url'),\n            $this->text\n        );\n\n        return $this;\n    }\n\n    protected function replaceForEdit(): string\n    {\n        // Extract links from the entry to foreign\n        $this\n            ->parseMentionsForEdit()\n            ->parseAttributesForEdit();\n\n        return (string) $this->text;\n    }\n\n    /**\n     * Replace mentions of entities to a visual representation for the text editor\n     */\n    protected function parseMentionsForEdit(): self\n    {\n        $this->text = preg_replace_callback('`\\[([a-z_-]+):(.*?)\\]`i', function ($matches) {\n            $data = $this->extractData($matches);\n\n            if ($data['type'] === 'post') {\n                return $this->parsePostForEdit($matches[0], $data);\n            }\n\n            $hasCustom = Arr::has($data, 'custom');\n            // If the user always wants advanced mentions, we force the [] syntax upon them\n            if ($hasCustom || auth()->user()->alwaysAdvancedMentions()) {\n                // Still need to show the target's name in the advanced mention\n                $entity = $this->entity($data['id']);\n                if (empty($entity) || ($entity->hasChild() && $entity->isMissingChild())) {\n                    return $matches[0];\n                }\n\n                $advancedName = $this->advancedMentionHelper($entity->name);\n                if (! Arr::has($data, 'alias')) {\n                    return Str::replaceLast(']', $advancedName . ']', $matches[0]);\n                }\n\n                // An alias was attached, try loading that too\n                $alias = $this->alias($data['alias']);\n                if (empty($alias) || empty($alias->entity)) {\n                    return Str::replaceLast(']', $advancedName . ']', $matches[0]);\n                }\n                $aliasName = $this->advancedMentionHelper($alias->name);\n\n                $mention = Str::replaceLast(']', $aliasName . ']', $matches[0]);\n                $replaceId = ':' . $data['id'] . '|';\n\n                return Str::replaceFirst($replaceId, ':' . $data['id'] . $advancedName . '|', $mention);\n            }\n\n            // This was matched on an attribute\n            if ($data['type'] == 'icon') {\n                return $matches[0];\n            }\n\n            $entity = $this->entity($data['id']);\n\n            // No entity found, the user might not be allowed to see it\n            if (empty($entity) || ($entity->hasChild() && $entity->isMissingChild())) {\n                $name = __('crud.history.unknown');\n                $dataName = $name;\n            } else {\n                $name = $entity->name;\n                $dataName = Str::replace('\"', '&quot;', $entity->name);\n            }\n\n            return '<a href=\"#\" class=\"mention\" data-name=\"' . $dataName . '\" data-mention=\"' . $matches[0]\n                . '\">' . $name . '</a>';\n        }, $this->text);\n\n        return $this;\n    }\n\n    /**\n     * Replace mentions of attributes to a visual representation for the text editor\n     */\n    protected function parseAttributesForEdit(): self\n    {\n        // If the user has advanced mentions always on, don't replace attributes\n        if (auth()->user()->alwaysAdvancedMentions()) {\n            return $this;\n        }\n        // Extract links from the entry to attribute\n        $this->text = preg_replace_callback('`\\{attribute:(.*?)\\}`i', function ($matches) {\n            $id = (int) $matches[1];\n\n            /** @var ?Attribute $attribute */\n            $attribute = $this->attribute($id);\n\n            // No entity found, the user might not be allowed to see it\n            if (empty($attribute)) {\n                $name = __('crud.history.unknown');\n            } else {\n                $name = $attribute->name;\n            }\n            if (str_contains($matches[1], '|')) {\n                return $matches[0];\n            }\n\n            return '<a href=\"#\" class=\"attribute attribute-mention\" data-attribute=\"' . $matches[0]\n                . '\">{' . $name . '}</a>';\n        }, $this->text);\n\n        return $this;\n    }\n\n    protected function parsePostForEdit(string $mention, array $data): string\n    {\n        $post = $this->post($data['id']);\n\n        $hasCustom = Arr::has($data, 'custom');\n        if ($hasCustom || auth()->user()->alwaysAdvancedMentions()) {\n            if (! $post) {\n                return $mention;\n            }\n            $advancedName = $this->advancedMentionHelper($post->name);\n\n            return Str::replaceLast(']', $advancedName . ']', $mention);\n        }\n\n        // No entity found, the user might not be allowed to see it\n        if (empty($post) || $post->entity->isMissingChild()) {\n            $name = __('crud.history.unknown');\n            $dataName = $name;\n        } else {\n            $name = $post->name;\n            $dataName = Str::replace('\"', '&quot;', $post->name);\n        }\n\n        return '<a href=\"#\" class=\"post-mention\" data-name=\"' . $dataName . '\" data-mention=\"' . $mention\n            . '\">' . $name . '</a>';\n    }\n\n    protected function entity(int $id): ?Entity\n    {\n        if (! Arr::has($this->entities, (string) $id) && ! Arr::has($this->privateEntities, (string) $id)) {\n            if ($this->isCopying) {\n                CampaignLocalization::forceCampaign($this->campaign);\n            }\n            $this->entities[$id] = Entity::where(['id' => $id])->first();\n        }\n\n        return Arr::get($this->entities, $id);\n    }\n\n    protected function post(int $id): ?Post\n    {\n        if (! Arr::has($this->posts, (string) $id)) {\n            $this->posts[$id] = Post::with(['entity', 'entity.tags', 'entity.entityType'])\n                ->has('entity')\n                ->find($id);\n        }\n\n        return Arr::get($this->posts, $id);\n    }\n\n    protected function hiddenEntity(int $id): ?Entity\n    {\n        if (! $this->campaign->showPrivateEntityMentions()) {\n            return null;\n        }\n\n        if (! Arr::has($this->entities, (string) $id) && ! Arr::has($this->privateEntities, (string) $id)) {\n            // @phpstan-ignore-next-line\n            $this->privateEntities[$id] = Entity::where(['id' => $id])->withInvisible()->first();\n        }\n\n        return Arr::get($this->privateEntities, $id);\n    }\n\n    public function preloadEntity(Entity $entity): void\n    {\n        if (Arr::has($this->entities, (string) $entity->id)) {\n            return;\n        }\n        $this->entities[$entity->id] = $entity;\n    }\n\n    protected function alias(int $id): ?EntityAsset\n    {\n        if (! Arr::has($this->aliases, (string) $id)) {\n            $this->aliases[$id] = EntityAsset::alias()->where(['id' => $id])->first();\n        }\n\n        return Arr::get($this->aliases, $id);\n    }\n\n    protected function attribute(int $id): ?Attribute\n    {\n        if (! Arr::has($this->attributes, (string) $id)) {\n            $this->attributes[$id] = Attribute::where(['id' => $id])->first();\n        }\n\n        return Arr::get($this->attributes, $id, null);\n    }\n\n    /**\n     * Pre-fetch all mentioned entities\n     */\n    protected function prepareEntities(): void\n    {\n        // First, let's prepare all mentions to do a single query on the entities table\n        $this->mentionedEntities = [];\n        preg_replace_callback('`\\[([a-z_-]+):(.*?)\\]`i', function ($matches) {\n            $segments = explode('|', $matches[2]);\n            $id = (int) $segments[0];\n\n            if (! in_array($id, $this->mentionedEntities)) {\n                $this->mentionedEntities[] = $id;\n            }\n\n            return $matches[0];\n        }, $this->text);\n\n        // Remove those already cached in memory\n        $ids = [];\n        // @phpstan-ignore-next-line\n        foreach ($this->mentionedEntities as $id) {\n            if (! Arr::has($this->entities, $id)) {\n                $ids[] = $id;\n            }\n        }\n\n        // @phpstan-ignore-next-line\n        if (empty($ids)) {\n            return;\n        }\n\n        // Directly get with the mentioned entity types (provided they are valid)\n        // @phpstan-ignore-next-line\n        $entities = Entity::whereIn('id', $ids)->with(['tags:id,name,slug', 'entityType:id,code,is_special'])->get();\n        // dump(count($ids));\n        foreach ($entities as $entity) {\n            $this->entities[$entity->id] = $entity;\n            $findKey = array_search($entity->id, $ids);\n            unset($ids[$findKey]);\n        }\n        $this->hiddenEntities = $ids;\n    }\n\n    /**\n     * Pre-fetch all private mentioned entities\n     */\n    protected function prepareHiddenEntities(): void\n    {\n        if (isset($this->campaign) && ! $this->campaign->showPrivateEntityMentions()) {\n            return;\n        }\n\n        // Remove those already cached in memory\n        $ids = [];\n        foreach ($this->hiddenEntities as $id) {\n            if (! Arr::has($this->privateEntities, $id)) {\n                $ids[] = $id;\n            }\n        }\n\n        if (empty($ids)) {\n            return;\n        }\n\n        // Directly get with the mentioned entity types (provided they are valid)\n        // @phpstan-ignore-next-line\n        $entities = Entity::whereIn('id', $ids)->with(['entityType:id,code,is_special'])->withInvisible()->get();\n        // dump(count($ids));\n        foreach ($entities as $entity) {\n            $this->privateEntities[$entity->id] = $entity;\n        }\n    }\n\n    /**\n     * Pre-fetch the attributes of the entity\n     */\n    protected function prepareAttributes()\n    {\n        // Remove those already cached in memory\n        $ids = [];\n        foreach ($this->mentionedAttributes as $id) {\n            if (! Arr::has($this->attributes, $id)) {\n                $ids[] = $id;\n            }\n        }\n\n        if (empty($ids)) {\n            return;\n        }\n\n        $attributes = Attribute::whereIn('id', $ids)->get();\n        foreach ($attributes as $attribute) {\n            $this->attributes[$attribute->id] = $attribute;\n        }\n    }\n\n    /**\n     * Validate the entity type that was inserted in the mention block\n     */\n    protected function validEntityType(string $type): bool\n    {\n        return in_array($type, $this->validEntityTypes());\n    }\n\n    /**\n     * List of valid entity types\n     */\n    protected function validEntityTypes(): array\n    {\n        if (! empty($this->validEntityTypes)) {\n            return $this->validEntityTypes;\n        }\n\n        $validEntityTypes = array_keys(config('entities.ids'));\n\n        return $this->validEntityTypes = $validEntityTypes;\n    }\n\n    /**\n     * Replace all attributes with their values and a toolip\n     */\n    protected function mapAttributes()\n    {\n        $this->mentionedAttributes = [];\n        preg_replace_callback('`\\{attribute:(.*?)\\}`i', function ($matches) {\n            $id = (int) $matches[1];\n            if (! in_array($id, $this->mentionedAttributes)) {\n                $this->mentionedAttributes[] = $id;\n            }\n\n            return $matches[0];\n        }, $this->text);\n\n        // Pre-fetch all the entities\n        $this->prepareAttributes();\n\n        // Extract links from the entry to foreign\n        $this->text = preg_replace_callback('`\\{attribute:(.*?)\\}`i', function ($matches) {\n            $id = (int) $matches[1];\n            $attribute = $this->attribute($id);\n            $fallback = '';\n            if (str_contains($matches[1], '|')) {\n                $fallback = Str::after($matches[1], '|');\n            }\n            // No entity found, the user might not be allowed to see it, if theres a fallback, apply it\n            if (empty($attribute)) {\n                if (! $fallback) {\n                    $replace = '<i class=\"unknown-mention unknown-attribute\">' . __('crud.history.unknown') . '</i>';\n                } else {\n                    $replace = '<i class=\"unknown-mention unknown-attribute\">' . $fallback . '</i>';\n                }\n            } else {\n                $replace = '<span class=\"attribute attribute-mention\" data-title=\"' . e($attribute->name)\n                    . '\" data-toggle=\"tooltip\">' . $attribute->mappedValue() . '</span>';\n            }\n\n            return $replace;\n        }, $this->text);\n    }\n\n    /**\n     * Replace any table-of-content blocks with a real HTML table of content, adding unique ids to each heading\n     * so that links can work.\n     *\n     * @return void\n     */\n    protected function mapCodes()\n    {\n        // Re-use the same markupFixer to keep references of previously generated slugs on this page\n        // @phpstan-ignore-next-line\n        if (! isset($this->markupFixer)) {\n            $this->markupFixer = new MarkupFixer(null, new TocSlugify);\n        }\n        // $markupFixer = new MarkupFixer(null, new TocSlugify());\n        $tocGenerator = new TocGenerator;\n        $this->text = $this->markupFixer->fix($this->text);\n\n        if (! Str::contains($this->text, '{table-of-contents}')) {\n            return;\n        }\n\n        // $this->text = $this->markupFixer->fix($this->text);\n        $toc = $tocGenerator->getHtmlMenu($this->text);\n        $this->text = Str::replaceFirst(\n            '{table-of-contents}',\n            '<div class=\"toc\">' . $toc . \"</div>\\n\",\n            $this->text\n        );\n    }\n\n    /**\n     * Protect from rendering future field:entry mentions to avoid endless loops\n     */\n    protected function lockEntryRendering(): void\n    {\n        $this->enableEntryField = false;\n    }\n\n    /**\n     * Re-enable rendering field:entry mentions\n     */\n    protected function unlockEntryRendering(): void\n    {\n        $this->enableEntryField = true;\n    }\n\n    protected function mentionPost(array $data): string\n    {\n        $post = $this->post($data['id']);\n        $isTranscluding = Arr::get($data, 'text') === 'transclude';\n        if (! $post) {\n            if ($this->onlyName || $isTranscluding) {\n                return __('crud.history.unknown');\n            }\n\n            return Arr::get(\n                $data,\n                'text',\n                '<i class=\"unknown-mention unknown-entity\">' . __('crud.history.unknown') . '</i>'\n            );\n        }\n\n        $url = route('entities.show', [$this->campaign, $post->entity, '#post-' . $post->id]);\n        $tooltipUrl = route('entities.tooltip', [$this->campaign, $post->entity]);\n\n        $cssClasses = ['entity-mention'];\n\n        $tagClasses = [];\n        foreach ($post->entity->tags as $tag) {\n            $tagClasses[] = 'id-' . $tag->id;\n            $tagClasses[] = $tag->slug;\n        }\n\n        if ($isTranscluding) {\n            if ($this->enableEntryField) {\n                $this->lockEntryRendering();\n                $parsedTargetEntry = $post->parsedEntry();\n                $this->unlockEntryRendering();\n            } else {\n                $parsedTargetEntry = $post->entry;\n            }\n            $cssClasses[] = 'mention-field-post block';\n            $entityName = '<a href=\"' . $url . '\"'\n                . ' class=\"entity-mention-name block mb-2\"'\n                . ' data-toggle=\"tooltip-ajax\"'\n                . ' data-id=\"' . $post->entity->id . '\"'\n                . ' data-url=\"' . $tooltipUrl . '\"'\n                . '>'\n                . $post->name\n                . '</a>';\n\n            return '<span class=\"' . implode(' ', $cssClasses) . '\"'\n                . ' data-entity-tags=\"' . implode(' ', $tagClasses) . '\"'\n                . '>'\n                . $entityName\n                . '<div class=\"mention-post-content\">'\n                . $parsedTargetEntry\n                . '</div>'\n                . '</span>';\n        }\n\n        if ($this->onlyName) {\n            return Arr::get($data, 'text', $post->name);\n        }\n\n        return '<a href=\"' . $url . '\"'\n            . ' class=\"' . implode(' ', $cssClasses) . '\"'\n            . ' data-entity-tags=\"' . implode(' ', $tagClasses) . '\"'\n            . ' data-entity-type=\"' . $post->entity->entityType->code . '\"'\n            . ' data-toggle=\"tooltip-ajax\"'\n            . ' data-id=\"' . $post->entity->id . '\"'\n            . ' data-url=\"' . $tooltipUrl . '\"'\n//                    . ' data-mention-url=\"' . route('entities.tooltip', $entity). '\"'\n//                    . ' title=\"<i class=\\'fa fa-spinner fa-spin\\'></i>\"'\n            . '>'\n            . Arr::get($data, 'text', $post->name)\n            . '</a>';\n    }\n}\n"
  },
  {
    "path": "app/Services/MultiEditingService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityUser;\nuse App\\Models\\Post;\nuse App\\Models\\QuestElement;\nuse App\\Models\\TimelineElement;\nuse App\\Traits\\UserAware;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MultiEditingService\n{\n    use UserAware;\n\n    /** @var Model|Post|Entity */\n    protected $model;\n\n    public function model(Model $model): self\n    {\n        $this->model = $model;\n\n        return $this;\n    }\n\n    /**\n     * Check for users that are currently editing an entity\n     */\n    public function users(): array\n    {\n        $data = [];\n        // @phpstan-ignore-next-line\n        $users = $this->model\n            ->editingUsers()\n            ->where('type_id', EntityUser::TYPE_KEEPALIVE)\n            ->where('entity_user.updated_at', '>=', Carbon::now()->subMinutes(10))\n            ->where('user_id', '!=', $this->user->id)\n            ->withPivot('created_at')\n            ->get();\n\n        foreach ($users as $user) {\n            $data[$user->id] = $user;\n        }\n\n        return $data;\n    }\n\n    /**\n     * Check if the user is editing the entity\n     */\n    public function isEditing(): bool\n    {\n        // @phpstan-ignore-next-line\n        return $this->model->editingUsers()\n            ->where('type_id', EntityUser::TYPE_KEEPALIVE)\n            ->where('user_id', $this->user->id)\n            ->count() !== 0;\n    }\n\n    /**\n     * Set the user as editing an entity\n     */\n    public function edit(): self\n    {\n        $model = new EntityUser;\n        if ($this->model instanceof Post) {\n            $model->post_id = $this->model->id;\n        } elseif ($this->model instanceof Campaign) {\n            $model->campaign_id = $this->model->id;\n        } elseif ($this->model instanceof TimelineElement) {\n            $model->timeline_element_id = $this->model->id;\n        } elseif ($this->model instanceof QuestElement) {\n            $model->quest_element_id = $this->model->id;\n        } elseif ($this->model instanceof Entity) {\n            $model->entity_id = $this->model->id;\n        }\n        $model->user_id = $this->user->id;\n        $model->type_id = EntityUser::TYPE_KEEPALIVE;\n        $model->save();\n\n        return $this;\n    }\n\n    /**\n     * Remove the user as editing the entity\n     */\n    public function finish(): self\n    {\n        $id = null;\n        if ($this->model instanceof Post) {\n            $id = 'post_id';\n        } elseif ($this->model instanceof Campaign) {\n            $id = 'campaign_id';\n        } elseif ($this->model instanceof TimelineElement) {\n            $id = 'timeline_element_id';\n        } elseif ($this->model instanceof QuestElement) {\n            $id = 'quest_element_id';\n        } elseif ($this->model instanceof Entity) {\n            $id = 'entity_id';\n        }\n\n        $models = EntityUser::userID($this->user->id)\n            ->keepAlive()\n            // @phpstan-ignore-next-line\n            ->where($id, $this->model->id)\n            ->get();\n        foreach ($models as $model) {\n            $model->delete();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Touch the editing entry in the db\n     */\n    public function keepAlive(): self\n    {\n        // @phpstan-ignore-next-line\n        $pulse = $this->model->editingUsers()\n            ->where('type_id', EntityUser::TYPE_KEEPALIVE)\n            ->where('user_id', $this->user->id)\n            ->first();\n\n        if ($pulse) {\n            $pulse->touch();\n        }\n\n        return $this;\n    }\n\n    public function confirm(): void\n    {\n        if (! $this->isEditing()) {\n            $this->edit();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/NewsletterService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\UserLog;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Laravel\\Cashier\\Subscription;\nuse MailerLite\\MailerLite;\n\nclass NewsletterService\n{\n    use UserAware;\n\n    public string $email;\n\n    public int $userID;\n\n    protected mixed $mailerlite;\n\n    protected Exception $error;\n\n    protected array $fields;\n\n    public function __construct()\n    {\n        $key = (string) config('mailerlite.api_key');\n        $this->mailerlite = new MailerLite(['api_key' => $key]);\n    }\n\n    public function fields(array $fields): self\n    {\n        $this->fields = $fields;\n\n        return $this;\n    }\n\n    public function email(string $email): self\n    {\n        $this->email = $email;\n\n        return $this;\n    }\n\n    /**\n     * Check if a user is subscribed\n     */\n    public function isSubscribed(): bool\n    {\n        try {\n            $email = isset($this->user) ? $this->user->email : $this->email;\n            $this->userID = $this->fetch($email);\n\n            return true;\n        } catch (Exception $e) {\n            return false;\n        }\n    }\n\n    /**\n     * Unsubscribe a user\n     */\n    public function remove()\n    {\n        $this->mailerlite->subscribers->delete($this->userID);\n\n        return true;\n    }\n\n    /**\n     * Unsubscribe a user\n     */\n    public function delete()\n    {\n        if (! $this->isSubscribed()) {\n            return false;\n        }\n        $this->mailerlite->subscribers->delete($this->userID);\n\n        return true;\n    }\n\n    public function update(array $options): bool\n    {\n        try {\n            // Build the interests of the user\n            $interests = [];\n            if (Arr::has($options, 'releases')) {\n                $interests[] = config('mailerlite.groups.all');\n                if (isset($this->user) && $this->user->isSubscriber()) {\n                    $interests[] = config('mailerlite.groups.subs');\n                }\n                if (isset($options['new']) && $options['new']) {\n                    $interests[] = config('mailerlite.groups.new');\n                }\n            }\n\n            $email = $this->user->email ?? $this->email;\n\n            $data = [\n                'email' => $email,\n                'fields' => $this->buildFields(),\n                'groups' => $interests,\n            ];\n            if (empty($this->userID)) {\n                $this->mailerlite->subscribers->create($data);\n\n                return true;\n            } else {\n                $this->mailerlite->subscribers->update($this->userID, $data);\n\n                return true;\n            }\n        } catch (Exception $e) {\n            $this->error = $e;\n\n            return false;\n        }\n    }\n\n    public function error(): Exception\n    {\n        return $this->error;\n    }\n\n    /**\n     * Get the user's id based on their email\n     */\n    protected function fetch(string $email): int\n    {\n        $response = $this->mailerlite->subscribers->find($email);\n\n        return (int) Arr::get($response, 'body.data.id');\n    }\n\n    /**\n     * Guess the user's country based on their login logs\n     */\n    protected function guessCountry(): ?string\n    {\n        if (! isset($this->user)) {\n            return null;\n        }\n        /** @var ?UserLog $latest */\n        $latest = $this->user->logs()->whereNotNull('country')->latest()->first();\n\n        return $latest?->country;\n    }\n\n    protected function buildFields(): array\n    {\n        $fields = [\n            'name' => $this->user->name,\n            'language' => $this->user->locale ?? app()->getLocale(),\n            'country' => $this->guessCountry(),\n        ];\n        if (! empty($this->user)) {\n            /** @var ?Subscription $first */\n            $first = $this->user->subscriptions->where('type', 'kanka')->last();\n            /** @var ?Subscription $latest */\n            $latest = $this->user->subscription('kanka');\n            $fields['become_a_customer'] = $first->created_at->format('Y-m-d') ?? null;\n            $fields['last_purchase'] = $latest->created_at->format('Y-m-d') ?? null;\n            $fields['purchases'] = $this->user->subscriptions->where('type', 'kanka')->count();\n            $fields['package'] = $this->user->subscribed('kanka') ? $this->user->pledge : null;\n            $fields['last_login'] = $this->user->last_login_at->format('Y-m-d');\n            // Number of logins over the past month\n            $fields['recent_logins'] = $this->user->logs()->logins()->where('created_at', '>=', now()->subMonth())->count();\n\n            // Remove abandoned cart data when they sub\n            if ($this->user->isSubscriber()) {\n                $fields['abandoned_cart'] = null;\n                $fields['abandoned_package'] = null;\n            }\n        }\n\n        if (isset($this->fields)) {\n            $fields = array_merge($fields, $this->fields);\n        }\n\n        return $fields;\n    }\n}\n"
  },
  {
    "path": "app/Services/Onboarding/InitialService.php",
    "content": "<?php\n\nnamespace App\\Services\\Onboarding;\n\nuse App\\Enums\\Widget;\nuse App\\Facades\\CampaignCache;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\CampaignEvent;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignSetting;\nuse App\\Models\\Family;\nuse App\\Models\\Quest;\nuse App\\Models\\Tag;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\n\nclass InitialService\n{\n    use CampaignAware;\n    use RequestAware;\n    use UserAware;\n\n    public function save()\n    {\n        $this\n            ->saveName()\n            ->saveType();\n    }\n\n    public function skip(string $reason)\n    {\n        CampaignEvent::create([\n            'campaign_id' => $this->campaign->id,\n            'created_by' => $this->user->id,\n            'event' => 'onboarding_dismissed',\n            'metadata' => ['method' => $reason],\n        ]);\n        $this->log('skip');\n    }\n\n    protected function log(string $type): void\n    {\n        $ui = $this->campaign->settings;\n        $ui['onboarding'] = $type;\n        $this->campaign->update(['settings' => $ui]);\n        $this->user->campaignLog(\n            $this->campaign->id,\n            'onboarding',\n            $type,\n        );\n    }\n\n    protected function saveName(): self\n    {\n        if (! $this->request->has('name')) {\n            return $this;\n        }\n\n        $this->campaign->update([\n            'name' => $this->request->get('name'),\n        ]);\n\n        if (! $this->campaign->wasChanged('name')) {\n            return $this;\n        }\n        $this->user->campaignLog(\n            $this->campaign->id,\n            'onboarding',\n            'rename'\n        );\n\n        return $this;\n    }\n\n    protected function saveType(): self\n    {\n\n        if (! $this->request->has('type')) {\n            return $this;\n        }\n        $type = $this->request->get('type');\n        $this->log($type);\n        CampaignEvent::create([\n            'campaign_id' => $this->campaign->id,\n            'created_by' => $this->user->id,\n            'event' => 'onboarding_completed',\n            'metadata' => ['choice' => $type],\n        ]);\n\n        if ($type == 'worldbuilding') {\n            $this->worldbuilding();\n        } elseif ($type == 'campaign') {\n            $this->ttrpg();\n        } elseif ($type === 'story') {\n            $this->story();\n        }\n\n        CampaignCache::campaign($this->campaign)->clear();\n\n        return $this;\n    }\n\n    protected function worldbuilding(): void\n    {\n        /** @var CampaignSetting $settings */\n        $settings = $this->campaign->setting;\n        $settings->quests = 0;\n        $settings->dice_rolls = 0;\n        $settings->conversations = 0;\n        $settings->abilities = 0;\n        $settings->items = 0;\n        $settings->save();\n\n        $playerRole = $this->playerRole();\n        $playerRole->update(['name' => __('dashboards/onboarding.roles.contributor')]);\n\n        $entityTypes = config('entities.ids');\n        foreach ($entityTypes as $entityType => $entityTypeId) {\n            foreach ([CampaignPermission::ACTION_READ, CampaignPermission::ACTION_ADD] as $action) {\n                CampaignPermission::create([\n                    'campaign_role_id' => $playerRole->id,\n                    'action' => $action,\n                    'entity_type_id' => $entityTypeId,\n                    'access' => true,\n                ]);\n            }\n        }\n        CampaignPermission::create([\n            'campaign_role_id' => $playerRole->id,\n            'action' => CampaignPermission::ACTION_GALLERY_UPLOAD,\n            'access' => true,\n        ]);\n        CampaignPermission::create([\n            'campaign_role_id' => $playerRole->id,\n            'action' => CampaignPermission::ACTION_GALLERY_BROWSE,\n            'access' => true,\n        ]);\n\n        $family = Family::create([\n            'name' => __('starter.name', ['name' => __('dashboards/onboarding.families.varren.title')]),\n            'campaign_id' => $this->campaign->id,\n        ]);\n        $family->entity->update(['source' => 'onboarding']);\n    }\n\n    protected function ttrpg(): void\n    {\n        $settings = $this->campaign->setting;\n        $settings->dice_rolls = 0;\n        $settings->timelines = 0;\n        $settings->races = 0;\n        $settings->save();\n\n        $tag = Tag::create([\n            'name' => __('onboarding/tags.npcs'),\n            'campaign_id' => $this->campaign->id,\n        ]);\n        $tag->entity->update(['source' => 'onboarding']);\n\n        // Give players some basic permissions to view/edit characters\n        $playerRole = $this->playerRole();\n        $permissions = [\n            config('entities.ids.character') => [\n                CampaignPermission::ACTION_READ,\n                CampaignPermission::ACTION_ADD,\n            ],\n            config('entities.ids.location') => [\n                CampaignPermission::ACTION_READ,\n            ],\n            config('entities.ids.family') => [\n                CampaignPermission::ACTION_READ,\n            ],\n            config('entities.ids.quest') => [\n                CampaignPermission::ACTION_READ,\n            ],\n            config('entities.ids.journal') => [\n                CampaignPermission::ACTION_READ,\n                CampaignPermission::ACTION_ADD,\n            ],\n        ];\n        foreach ($permissions as $entityType => $actions) {\n            foreach ($actions as $action) {\n                CampaignPermission::create([\n                    'campaign_role_id' => $playerRole->id,\n                    'action' => $action,\n                    'entity_type_id' => $entityType,\n                    'access' => true,\n                ]);\n            }\n        }\n        CampaignPermission::create([\n            'campaign_role_id' => $playerRole->id,\n            'action' => CampaignPermission::ACTION_GALLERY_UPLOAD,\n            'access' => true,\n        ]);\n\n        CampaignDashboardWidget::create([\n            'campaign_id' => $this->campaign->id,\n            'config' => [\n                'filters' => 'status=0',\n                'text' => __('dashboards/onboarding.widgets.active-quests'),\n            ],\n            'position' => 3,\n            'widget' => Widget::Recent,\n            'entity_type_id' => config('entities.ids.quest'),\n        ]);\n\n        $quest = Quest::create([\n            'name' => __('starter.name', ['name' => __('dashboards/onboarding.quests.crown.title')]),\n            'campaign_id' => $this->campaign->id,\n        ]);\n        $quest->entity->update(['source' => 'onboarding']);\n\n    }\n\n    protected function story(): void\n    {\n        $settings = $this->campaign->setting;\n        $settings->quests = 0;\n        $settings->dice_rolls = 0;\n        $settings->conversations = 0;\n        $settings->abilities = 0;\n        $settings->calendars = 0;\n        $settings->save();\n\n        $playerRole = $this->playerRole();\n        $playerRole->update(['name' => __('dashboards/onboarding.roles.co-writer')]);\n    }\n\n    protected function playerRole(): CampaignRole\n    {\n        return $this->campaign->roles()->where('is_admin', 0)->where('is_public', 0)->first();\n    }\n}\n"
  },
  {
    "path": "app/Services/PaginationService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\n\n/**\n * Class PaginationService\n */\nclass PaginationService\n{\n    use UserAware;\n\n    protected array $options = [\n        15,\n        25,\n        45,\n        100,\n    ];\n\n    protected int $nonSubscriberMax = 45;\n\n    /**\n     * List of available options for pagination\n     */\n    public function options(): array\n    {\n        return $this->options;\n    }\n\n    /**\n     * Options that require a subscription\n     */\n    public function subscriberOnlyOptions(): array\n    {\n        return array_values(array_filter($this->options, fn ($v) => $v > $this->nonSubscriberMax));\n    }\n\n    /**\n     * Get the max pagination amount possible\n     */\n    public function max(): int\n    {\n        return isset($this->user) && $this->user->isSubscriber() ? Arr::last($this->options) : $this->nonSubscriberMax;\n    }\n}\n"
  },
  {
    "path": "app/Services/PatreonService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Pledge;\nuse App\\Models\\Role;\nuse App\\Traits\\UserAware;\n\n/**\n * Class PatreonService\n */\nclass PatreonService\n{\n    use UserAware;\n\n    protected function getRole()\n    {\n        return Role::where('name', '=', Pledge::ROLE)->first();\n    }\n\n    /**\n     * Remove a user's legacy link to the patreon service\n     */\n    public function unlink(): bool\n    {\n        if (! $this->user->isLegacyPatron()) {\n            return false;\n        }\n\n        if ($this->user->hasRole(Pledge::ROLE)) {\n            $this->user->roles()->detach($this->getRole()->id);\n        }\n\n        $settings = $this->user->settings;\n        unset($settings['patreon_fullname'], $settings['patreon_name'], $settings['patreon_id'], $settings['patreon_email']);\n\n        if (empty($settings)) {\n            $settings = null;\n        }\n        $this->user->pledge = null;\n        $this->user->settings = $settings;\n        $this->user->save();\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Services/PayPalService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\UserAction;\nuse App\\Models\\Tier;\nuse App\\Traits\\UserAware;\nuse Carbon\\Carbon;\nuse Laravel\\Cashier\\Subscription;\nuse Srmklive\\PayPal\\Services\\PayPal;\n\nclass PayPalService\n{\n    use UserAware;\n\n    protected Tier $tier;\n\n    public function tier(Tier $tier): self\n    {\n        $this->tier = $tier;\n\n        return $this;\n    }\n\n    public function process(): mixed\n    {\n        if ($this->user->isSubscriber() && ! $this->user->hasPayPal()) {\n            return [];\n        }\n        $oldPrice = '';\n        $currency = 'USD';\n        if ($this->user->billedInEur()) {\n            $currency = 'EUR';\n        }\n        $price = $this->tier->yearly;\n\n        if ($this->user->isSubscriber()) {\n            if ($this->user->isElemental()) {\n                return [];\n            } elseif ($this->user->isOwlbear()) {\n                $tier = Tier::where('code', 'owlbear')->first();\n                $oldPrice = $tier->yearly;\n            } elseif ($this->user->isWyvern()) {\n                $tier = Tier::where('code', 'wyvern')->first();\n                $oldPrice = $tier->yearly;\n            }\n            // @phpstan-ignore-next-line\n            $price = round(($price - ($oldPrice)) * ($this->user->subscriptions()->first()->ends_at->diffInDays(Carbon::now(), true) / 365), 2);\n        }\n        $price = max(0, $price);\n\n        $provider = new PayPal;\n        $provider->setApiCredentials(config('paypal'));\n        $paypalToken = $provider->getAccessToken();\n\n        $response = $provider->createOrder([\n            'intent' => 'CAPTURE',\n            'application_context' => [\n                'return_url' => route('paypal.transaction-success'),\n                'cancel_url' => route('paypal.cancel-transaction'),\n            ],\n            'purchase_units' => [\n                0 => [\n                    'reference_id' => $this->tier->name,\n                    'amount' => [\n                        'currency_code' => $currency,\n                        'value' => $price,\n                    ],\n                ],\n            ],\n        ]);\n\n        return $response;\n    }\n\n    public function subscribe(string $pledge): void\n    {\n        if (! $this->user->isSubscriber()) {\n            // Add the subscriber role\n            $this->user->roles()->syncWithoutDetaching([5]);\n\n            // Add the subscription to the user level\n            $this->user->pledge = $pledge;\n            $this->user->save();\n\n            $sub = new Subscription;\n            $sub->user_id = $this->user->id;\n            $sub->type = 'kanka';\n            $sub->stripe_id = 'paypal_' . uniqid();\n            $sub->stripe_status = 'canceled';\n            $sub->stripe_price = 'paypal_' . $this->user->pledge;\n            $sub->quantity = 1;\n            $sub->ends_at = Carbon::now()->addYear();\n            $sub->save();\n        } else {\n            // Add the subscription to the user level\n            $this->user->pledge = $pledge;\n            $this->user->save();\n\n            $sub = $this->user->subscriptions()->first();\n            $sub->stripe_price = 'paypal_' . $this->user->pledge; // @phpstan-ignore-line\n            $sub->save();\n        }\n        $this->user->log(UserAction::subPaypal);\n    }\n}\n"
  },
  {
    "path": "app/Services/PermissionService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\Permission;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\RoleAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\n\n/**\n * Class PermissionService\n */\nclass PermissionService\n{\n    use CampaignAware;\n    use EntityAware;\n    use EntityTypeAware;\n    use RoleAware;\n    use UserAware;\n\n    protected int $action;\n\n    /**\n     * Permissions setup on the campaign\n     */\n    private array $basePermissions;\n\n    protected array $cachedPermissions;\n\n    public function action(Permission $action): self\n    {\n        $this->action = $action->value;\n\n        return $this;\n    }\n\n    public function save(array $request): void\n    {\n        // First, let's get all the stuff for this entity\n        $permissions = $this->entityPermissions($this->entity);\n\n        // Next, start looping the data\n        if (! empty($request['role'])) {\n            foreach ($request['role'] as $roleId => $data) {\n                foreach ($data as $perm => $action) {\n                    if ($action === 'allow') {\n                        if (empty($permissions['role'][$roleId][$perm])) {\n                            CampaignPermission::create([\n                                'campaign_role_id' => $roleId,\n                                'campaign_id' => $this->entity->campaign_id,\n                                'entity_type_id' => $this->entity->type_id,\n                                'entity_id' => $this->entity->id,\n                                'action' => $perm,\n                                'access' => true,\n                            ]);\n                        } else {\n                            $permissions['role'][$roleId][$perm]->update(['access' => true]);\n                            unset($permissions['role'][$roleId][$perm]);\n                        }\n                    } elseif ($action === 'deny') {\n                        if (empty($permissions['role'][$roleId][$perm])) {\n                            CampaignPermission::create([\n                                'campaign_role_id' => $roleId,\n                                'campaign_id' => $this->entity->campaign_id,\n                                'entity_type_id' => $this->entity->type_id,\n                                'entity_id' => $this->entity->id,\n                                'action' => $perm,\n                                'access' => false,\n                            ]);\n                        } else {\n                            $permissions['role'][$roleId][$perm]->update(['access' => false]);\n                            unset($permissions['role'][$roleId][$perm]);\n                        }\n                    } else {\n                        // Inherit? Remove it if it exists\n                        if (! empty($permissions['role'][$roleId][$perm])) {\n                            $permissions['role'][$roleId][$perm]->delete();\n                        }\n                    }\n                }\n            }\n        }\n        if (! empty($request['user'])) {\n            foreach ($request['user'] as $userId => $data) {\n                foreach ($data as $perm => $action) {\n                    if ($action === 'allow') {\n                        if (empty($permissions['user'][$userId][$perm])) {\n                            CampaignPermission::create([\n                                'user_id' => $userId,\n                                'campaign_id' => $this->entity->campaign_id,\n                                'entity_type_id' => $this->entity->type_id,\n                                'entity_id' => $this->entity->id,\n                                'action' => $perm,\n                                'access' => true,\n                            ]);\n                        } else {\n                            $permissions['user'][$userId][$perm]->update(['access' => true]);\n                            unset($permissions['user'][$userId][$perm]);\n                        }\n                    } elseif ($action === 'deny') {\n                        if (empty($permissions['user'][$userId][$perm])) {\n                            CampaignPermission::create([\n                                'user_id' => $userId,\n                                'campaign_id' => $this->entity->campaign_id,\n                                'entity_type_id' => $this->entity->type_id,\n                                'entity_id' => $this->entity->id,\n                                'action' => $perm,\n                                'access' => false,\n                            ]);\n                        } else {\n                            $permissions['user'][$userId][$perm]->update(['access' => false]);\n                            unset($permissions['user'][$userId][$perm]);\n                        }\n                    } else {\n                        // Inherit? Remove it if it exists\n                        if (! empty($permissions['user'][$userId][$perm])) {\n                            $permissions['user'][$userId][$perm]->delete();\n                        }\n                    }\n                }\n            }\n        }\n\n        // Delete remaining permissions\n        $skipUsers = Arr::has($request, 'permissions_too_many');\n        foreach ($permissions as $type => $data) {\n            // Skip users if there are too many users in the UI\n            if ($type === 'user' && $skipUsers) {\n                continue;\n            }\n            foreach ($data as $user => $actions) {\n                foreach ($actions as $action => $perm) {\n                    $perm->delete();\n                }\n            }\n        }\n\n        // Campaign admins can hide all attributes from an entity\n        if ($this->user->isAdmin()) {\n            $privateAttributes = Arr::get($request, 'is_attributes_private', false);\n            $this->entity->is_attributes_private = $privateAttributes ? 1 : 0;\n        }\n    }\n\n    /**\n     * Get the permissions of an entity\n     */\n    public function entityPermissions(Entity $entity): array\n    {\n        if (isset($this->cachedPermissions)) {\n            return $this->cachedPermissions;\n        }\n\n        $permissions = ['user' => [], 'role' => []];\n        /** @var CampaignPermission $perm */\n        foreach (CampaignPermission::where('entity_id', $entity->id)->get() as $perm) {\n            $key = (! empty($perm->user_id) ? 'user' : 'role');\n            $subkey = (! empty($perm->user_id) ? $perm->user_id : $perm->campaign_role_id);\n            $permissions[$key][$subkey][$perm->action] = $perm;\n        }\n\n        return $this->cachedPermissions = $permissions;\n    }\n\n    public function clearEntityPermissions(): self\n    {\n        unset($this->cachedPermissions);\n\n        return $this;\n    }\n\n    public function inherited(): bool\n    {\n        if (! isset($this->entityType)) {\n            return false;\n        }\n\n        if (! isset($this->basePermissions)) {\n            $this->basePermissions = [\n                'roles' => [],\n                'users' => [],\n            ];\n\n            /** @var CampaignRole $campaignRole */\n            foreach ($this->campaign->roles()->with(['users', 'permissions' => fn ($q) => $q->whereNull('entity_id')->whereNull('user_id')->where('entity_type_id', $this->entityType->id)])->get() as $campaignRole) {\n                $campaignPermissions = $campaignRole->permissions;\n                $users = $campaignRole->users->pluck('user_id');\n                /** @var CampaignPermission $campaignPermission */\n                foreach ($campaignPermissions as $campaignPermission) {\n                    $key = $campaignPermission->entity_type_id . '_' . $campaignPermission->action;\n                    $this->basePermissions['roles'][$campaignRole->id][$key] = true;\n                    foreach ($users as $permissionUser) {\n                        $this->basePermissions['users'][$permissionUser][$key] = [\n                            'role' => $campaignRole->name,\n                            'access' => $campaignPermission->access,\n                        ];\n                    }\n                }\n            }\n        }\n\n        $key = $this->entityType->id . '_' . $this->action;\n        if (isset($this->role)) {\n            return Arr::has($this->basePermissions, \"roles.{$this->role->id}.{$key}\");\n        }\n\n        return Arr::has($this->basePermissions, \"users.{$this->user->id}.{$key}\");\n    }\n\n    public function inheritedRoleName(): string\n    {\n        $key = $this->entityType->id . '_' . $this->action;\n\n        return $this->basePermissions['users'][$this->user->id][$key]['role'];\n    }\n\n    public function inheritedRoleAccess(): bool\n    {\n        $key = $this->entityType->id . '_' . $this->action;\n\n        return $this->basePermissions['users'][$this->user->id][$key]['access'];\n    }\n\n    public function selected(string $type): string\n    {\n        if (! isset($this->cachedPermissions)) {\n            return 'inherit';\n        }\n        $user = isset($this->user) ? $this->user->id : $this->role->id;\n        $value = Arr::get($this->cachedPermissions, $type . '.' . $user . '.' . $this->action, null);\n        if ($value === null) {\n            return 'inherit';\n        }\n\n        return $value->access ? 'allow' : 'deny';\n    }\n\n    public function reset(): self\n    {\n        unset($this->user, $this->role, $this->action);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Permissions/BulkPermissionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Permissions;\n\nuse App\\Models\\CampaignPermission;\nuse App\\Services\\PermissionService;\nuse App\\Traits\\EntityAware;\n\nclass BulkPermissionService\n{\n    use EntityAware;\n\n    protected PermissionService $service;\n\n    protected array $permissions;\n\n    protected bool $override;\n\n    public function __construct(PermissionService $permissionService)\n    {\n        $this->service = $permissionService;\n    }\n\n    public function override(bool $override): self\n    {\n        $this->override = $override;\n\n        return $this;\n    }\n\n    public function change(array $request): void\n    {\n        // First, let's get all the stuff for this entity\n        $this->permissions = $this->service\n            ->clearEntityPermissions()\n            ->entityPermissions($this->entity);\n\n        $this\n            ->roles($request)\n            ->users($request)\n            ->cleanup();\n    }\n\n    protected function roles(array $request): self\n    {\n        if (empty($request['role'])) {\n            return $this;\n        }\n        foreach ($request['role'] as $roleId => $data) {\n            foreach ($data as $perm => $action) {\n                if ($action == 'allow') {\n                    if (empty($this->permissions['role'][$roleId][$perm])) {\n                        CampaignPermission::create([\n                            'campaign_role_id' => $roleId,\n                            'campaign_id' => $this->entity->campaign_id,\n                            'entity_id' => $this->entity->id,\n                            'action' => $perm,\n                            'access' => true,\n                        ]);\n                    } else {\n                        $this->permissions['role'][$roleId][$perm]->update(['access' => true]);\n                        unset($this->permissions['role'][$roleId][$perm]);\n                    }\n                } elseif ($action == 'remove') {\n                    if (! empty($this->permissions['role'][$roleId][$perm])) {\n                        $this->permissions['role'][$roleId][$perm]->delete();\n                        unset($this->permissions['role'][$roleId][$perm]);\n                    }\n                } elseif ($action === 'deny') {\n                    if (empty($this->permissions['role'][$roleId][$perm])) {\n                        CampaignPermission::create([\n                            'campaign_role_id' => $roleId,\n                            'campaign_id' => $this->entity->campaign_id,\n                            'entity_id' => $this->entity->id,\n                            'action' => $perm,\n                            'access' => false,\n                        ]);\n                    } else {\n                        $this->permissions['role'][$roleId][$perm]->update(['access' => false]);\n                        unset($this->permissions['role'][$roleId][$perm]);\n                    }\n                } elseif ($action == 'inherit') {\n                    // Inherit? Remove it if it exists\n                    if (! empty($this->permissions['role'][$roleId][$perm])) {\n                        $this->permissions['role'][$roleId][$perm]->delete();\n                    }\n                }\n            }\n        }\n\n        return $this;\n    }\n\n    protected function users(array $request): self\n    {\n        if (empty($request['user'])) {\n            return $this;\n        }\n        foreach ($request['user'] as $userId => $data) {\n            foreach ($data as $perm => $action) {\n                if ($action == 'allow') {\n                    if (empty($this->permissions['user'][$userId][$perm])) {\n                        CampaignPermission::create([\n                            // 'key' => $this->entity->entityType->code . '_' . $perm . '_' . $this->entity->child->id,\n                            'user_id' => $userId,\n                            'campaign_id' => $this->entity->campaign_id,\n                            'entity_id' => $this->entity->id,\n                            // 'entity_type_id' => $this->entity->type_id,\n                            'action' => $perm,\n                            'access' => true,\n                        ]);\n                    } else {\n                        $this->permissions['user'][$userId][$perm]->update(['access' => true]);\n                        unset($this->permissions['user'][$userId][$perm]);\n                    }\n                } elseif ($action == 'remove') {\n                    if (! empty($this->permissions['user'][$userId][$perm])) {\n                        $this->permissions['user'][$userId][$perm]->delete();\n                        unset($this->permissions['user'][$userId][$perm]);\n                    }\n                } elseif ($action === 'deny') {\n                    if (empty($this->permissions['user'][$userId][$perm])) {\n                        CampaignPermission::create([\n                            // 'key' => $this->entity->entityType->code . '_' . $perm . '_' . $this->entity->child->id,\n                            'user_id' => $userId,\n                            'campaign_id' => $this->entity->campaign_id,\n                            'entity_id' => $this->entity->id,\n                            'action' => $perm,\n                            'access' => false,\n                        ]);\n                    } else {\n                        $this->permissions['user'][$userId][$perm]->update(['access' => false]);\n                    }\n                } elseif ($action == 'inherit') {\n                    // Inherit? Remove it if it exists\n                    if (! empty($this->permissions['user'][$userId][$perm])) {\n                        $this->permissions['user'][$userId][$perm]->delete();\n                    }\n                }\n            }\n        }\n\n        return $this;\n    }\n\n    protected function cleanup(): void\n    {\n        // If the user requested an override, any permissions that was not specifically set will be deleted.\n        if (! $this->override) {\n            return;\n        }\n        foreach ($this->permissions as $type => $data) {\n            foreach ($data as $user => $actions) {\n                foreach ($actions as $action => $perm) {\n                    $perm->delete();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Permissions/EntityPermission.php",
    "content": "<?php\n\nnamespace App\\Services\\Permissions;\n\nuse App\\Enums\\Permission;\nuse App\\Facades\\RolePermission;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\Entity;\nuse App\\Models\\MiscModel;\nuse App\\Models\\User;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Collection;\n\nclass EntityPermission\n{\n    use CampaignAware;\n    use EntityAware;\n    use EntityTypeAware;\n    use UserAware;\n\n    protected array $cached = [];\n\n    protected array|bool $roleIds;\n\n    /**\n     * The roles of the user\n     */\n    protected array|bool|Collection $roles = [];\n\n    protected array $cachedEntityIds = [];\n\n    /**\n     * @var bool is admin\n     */\n    protected bool $userIsAdmin;\n\n    /**\n     * Permissions were loaded\n     */\n    protected bool $loadedAll = false;\n\n    /**\n     * Campaign id of the loaded permissions (required for when moving entities between campaigns)\n     */\n    protected int $loadedCampaignId = 0;\n\n    public function can(Permission $permission): bool\n    {\n        $this->loadAllPermissions();\n        if ($this->userIsAdmin()) {\n            return true;\n        }\n\n        // Check general module permissions\n        $module = isset($this->entityType) ? $this->entityType->id : $this->entity->type_id;\n        $key = '' . $module . '_' . $permission->value;\n        $perm = false;\n        if (isset($this->cached[$key]) && $this->cached[$key]) {\n            $perm = $this->cached[$key];\n        }\n\n        //        dump('module permission');\n        //        dump($key);\n        //        dump($this->cached);\n        if (! isset($this->entity)) {\n            //            dd('no entity');\n            return $perm;\n        }\n\n        // Search for entity\n        $entityKey = '_' . $permission->value . '_' . $this->entity->id;\n        //        dump('check entity');\n        //        dd($entityKey);\n        if (isset($this->cached[$entityKey])) {\n            return $this->cached[$entityKey];\n        }\n\n        return $perm;\n    }\n\n    /**\n     * Determine the permission for a user to interact with an entity\n     *\n     * @param  MiscModel|Entity|null  $entity\n     */\n    public function hasPermission(\n        int $entityType,\n        int $action,\n        $entity = null,\n    ): bool {\n        $this->loadAllPermissions();\n\n        if ($this->userIsAdmin()) {\n            return true;\n        }\n\n        // Check if we have permission to `action` all the entities of this type first. The user\n        // might be able to view all quests, but have a specific quest set to denied. This is why\n        // we need to check the specific permissions too.\n        if ($entityType === 0) {\n            // Campaign permissions are a bit funky\n            $entityType = 'campaign';\n        }\n        $key = $entityType . '_' . $action;\n\n        //        if ($action === Permission::Bookmarks->value) {\n        //            dump($key = $entityType . '_' . $action);\n        //            dump($this->cached);\n        //        }\n\n        $perm = false;\n        if (isset($this->cached[$key]) && $this->cached[$key]) {\n            $perm = $this->cached[$key];\n        }\n\n        // Check if we have permission to do this action for exactly this entity\n        if (! empty($entity)) {\n            //            dump('i have an entity?');\n            //            dump($entity);\n\n            // Check if $entity is an entity type.\n            if (isset($entity->type_id)) {\n                $entityKey = '_' . $action . '_' . $entity->entity_id;\n            } else {\n                // dump('misc object');\n                $entityKey = '_' . $action . '_' . $entity->id;\n            }\n            //            dump('entity key ' . $entityKey);\n            if (isset($this->cached[$entityKey])) {\n                $perm = $this->cached[$entityKey];\n            }\n        }\n\n        // dump('have access? ' . ($perm ? 'yes' : 'no'));\n        return $perm;\n    }\n\n    /**\n     * Check the roles of the user. If the user is an admin, always return true\n     */\n    protected function getRoleIds(): array|bool\n    {\n        // If we haven't built a list of roles yet, build it.\n        if (isset($this->roleIds)) {\n            return $this->roleIds;\n        }\n\n        $this->roles = false;\n        // If we have a user, get the user's role for this campaign\n        if (isset($this->user)) {\n            $this->roles = UserCache::user($this->user)->campaign($this->campaign)->roles();\n        }\n\n        // If we don't have a user, or our user has no specified role yet, use the public role.\n        if ($this->roles === false || $this->roles->count() == 0) {\n            // Use the campaign's public role\n            $this->roles = $this->campaign->roles()->where('is_public', true)->get();\n        }\n\n        // Save all the role ids. If one of them is an admin, stop there.\n        $this->roleIds = [];\n        foreach ($this->roles as $role) {\n            if ($role['is_admin']) {\n                $this->roleIds = true;\n\n                return true;\n            }\n            $this->roleIds[] = $role['id'];\n        }\n\n        return $this->roleIds;\n    }\n\n    /**\n     * Determine if a user is part of a role that can do an action on all entities of a campaign\n     */\n    public function canRole(string $action, string $modelName): bool\n    {\n        $this->loadAllPermissions();\n        $key = $modelName . '_' . $action;\n\n        // We check if the role was set for global entity permissions\n        if (isset($this->cached[$key]) && $this->cached[$key]) {\n            return $this->cached[$key];\n        }\n\n        return false;\n    }\n\n    /**\n     * It's way easier to just load all permissions of the user once and \"cache\" them, rather than try and be\n     * optional on each query.\n     */\n    protected function loadAllPermissions(): void\n    {\n        // If no campaign was provided, get the one in the url. One is provided when moving entities between campaigns\n        if (! isset($this->campaign)) {\n            // Before we do that, we need to check if we're in a factory for unit tests\n            if (app()->environment('testing')) {\n                $this->userIsAdmin = true;\n\n                return;\n            } else {\n                abort(404);\n            }\n        }\n\n        if ($this->loadedAll === true && $this->campaign->id == $this->loadedCampaignId) {\n            return;\n        }\n\n        $this->resetPermissions();\n        $this->loadedCampaignId = $this->campaign->id;\n\n        // Loop through the roles to build a list of ids, and check if one of our roles is an admin\n        unset($this->roleIds);\n        $roleIds = $this->getRoleIds();\n        if ($roleIds === true) {\n            // If the role ids is simply true, it means the user is an admin\n            $this->userIsAdmin = true;\n\n            return;\n        }\n\n        $campaignRoleIDs = [];\n        /** @var CampaignRole $role */\n        foreach ($this->roles as $role) {\n            $campaignRoleIDs[] = $role['id'];\n        }\n        // dump('roles');\n        if (! empty($campaignRoleIDs)) {\n            $permissions = RolePermission::rolesPermissions($campaignRoleIDs);\n\n            /** @var CampaignPermission $permission */\n            foreach ($permissions as $permission) {\n                // dump($permission->id . ' - ' . $permission->key());\n                $this->cached[$permission->key()] = $permission->access;\n                if (! empty($permission->entity_id)) {\n                    $this->cachedEntityIds[$permission->entity_type_id][$permission->entity_id][$permission->action] = (bool) $permission->access;\n                }\n            }\n        }\n\n        // If a user is provided, get their permissions too\n        // dump('user');\n        if (isset($this->user)) {\n            $userPermissions = $this->user->permissions()->where('campaign_id', $this->campaign->id)->get();\n            /** @var CampaignPermission $permission */\n            foreach ($userPermissions as $permission) {\n                $this->cached[$permission->key()] = $permission->access;\n                // dump($permission->id . ' - ' . $permission->key());\n                if (! empty($permission->entity_id)) {\n                    $this->cachedEntityIds[$permission->entity_type_id][$permission->entity_id][$permission->action] = (bool) $permission->access;\n                }\n            }\n            unset($userPermissions);\n        }\n\n        // dump('finished loading entities:');\n        // dump($this->cachedEntityIds);\n    }\n\n    /**\n     * Reset all cached permissions.\n     */\n    public function resetPermissions(): void\n    {\n        // Reset the values keeping score\n        $this->loadedAll = true;\n        $this->cached = [];\n        unset($this->roleIds, $this->userIsAdmin);\n    }\n\n    protected function userIsAdmin(): bool\n    {\n        return isset($this->userIsAdmin) && $this->userIsAdmin;\n    }\n}\n"
  },
  {
    "path": "app/Services/Permissions/PermissionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Permissions;\n\nuse App\\Enums\\Permission;\nuse App\\Facades\\RolePermission;\nuse App\\Facades\\UserCache;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\Entity;\nuse App\\Models\\PostPermission;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass PermissionService\n{\n    use CampaignAware;\n    use UserAware;\n\n    /** @var int CampaignPermission::ACTION_READ etc */\n    protected int $action;\n\n    /** @var array Entity IDs and Types the user can access */\n    protected array $entityIds = [];\n\n    protected array $entityTypes = [];\n\n    protected array $entityTypesIds = [];\n\n    protected array $deniedIds = [];\n\n    protected bool $loadedPermissions = false;\n\n    protected bool $tempPermissionCreated = false;\n\n    protected bool $tempPermissionFilled = false;\n\n    /** @var array Permissions for posts */\n    protected array $allowedPostIDs = [];\n\n    protected array $deniedPostIDs = [];\n\n    protected int $publicRoleId;\n\n    protected bool $loadedPosts = false;\n\n    protected int $loadedRoles;\n\n    protected bool $admin = false;\n\n    protected bool $granted = false;\n\n    /** @var int the entity type if provided to limit queries */\n    protected int $entityType;\n\n    protected int $entityTypeID;\n\n    protected float $start;\n\n    public function isAdmin(): bool\n    {\n        $this->loadPermissions();\n\n        return $this->admin;\n    }\n\n    public function entityTypeID(int $id): self\n    {\n        $this->entityTypeID = $id;\n\n        return $this;\n    }\n\n    /**\n     * Set the desired action\n     */\n    public function action(Permission $permission): self\n    {\n        $this->action = $permission->value;\n\n        return $this;\n    }\n\n    public function publicRoleId(): int\n    {\n        return $this->publicRoleId;\n    }\n\n    public function reload(): self\n    {\n        $this->entityIds = [];\n        $this->entityTypes = [];\n        $this->entityTypesIds = [];\n        $this->deniedIds = [];\n        unset($this->loadedRoles);\n        $this->admin = false;\n        unset($this->publicRoleId);\n\n        return $this;\n    }\n\n    public function entityType(int $entityType): self\n    {\n        $this->entityType = $entityType;\n\n        return $this;\n    }\n\n    /**\n     * List of post ids the user has access to\n     */\n    public function allowedPosts(): array\n    {\n        return $this->loadPostPermissions()\n            ->allowedPostIDs();\n    }\n\n    /**\n     * List of post ids the user doesn't have access to\n     */\n    public function deniedPosts(): array\n    {\n        return $this->loadPostPermissions()\n            ->deniedPostIDs();\n    }\n\n    public function allowedEntities(): array\n    {\n        $this->loadPermissions();\n\n        return $this->entityIds;\n    }\n\n    public function allowedEntityTypes(): array\n    {\n        $this->loadPermissions();\n\n        return $this->entityTypesIds;\n    }\n\n    public function createTemporaryTable(): self\n    {\n        if ($this->tempPermissionFilled) {\n            return $this;\n        }\n        if (! $this->tempPermissionCreated) {\n            Schema::create('tmp_permissions', function (Blueprint $table) {\n                $table->unsignedInteger('id');\n                $table->temporary();\n            });\n            $this->tempPermissionCreated = true;\n            $this->tune('Temp table created');\n        }\n        $batch = [];\n        foreach ($this->entityIds as $id) {\n            $batch[] = $id;\n            if (count($batch) > 900) {\n                DB::statement('INSERT INTO tmp_permissions (id) VALUES (' . implode(') ,(', $batch) . ')');\n                $batch = [];\n            }\n        }\n        if (count($batch) > 0) {\n            DB::statement('INSERT INTO tmp_permissions (id) VALUES (' . implode(') ,(', $batch) . ')');\n        }\n        //        dump(in_array(329259, $batch));\n        //        $wa = DB::table('tmp_permissions')\n        //            ->where('id', 329259)->get();\n        //        dd($wa);\n        $this->tempPermissionFilled = true;\n        $this->tune('Temp table filled');\n\n        return $this;\n    }\n\n    public function deniedEntities(): array\n    {\n        $this->loadPermissions();\n\n        return $this->deniedIds;\n    }\n\n    protected function allowedPostIDs(): array\n    {\n        return $this->allowedPostIDs;\n    }\n\n    protected function deniedPostIDs(): array\n    {\n        return $this->deniedPostIDs;\n    }\n\n    public function canRole(): bool\n    {\n        $this->loadPermissions();\n\n        return in_array($this->entityType, $this->entityTypesIds);\n    }\n\n    /**\n     * Grant a permission ad-hoc\n     */\n    public function grant(Entity $entity): self\n    {\n        $this->granted = true;\n        $this->entityIds[] = $entity->id;\n        $this->tempPermissionFilled = false;\n\n        return $this;\n    }\n\n    /**\n     * Was a permission granted?\n     */\n    public function granted(): bool\n    {\n        return $this->granted;\n    }\n\n    /**\n     * Load the permissions for posts\n     */\n    protected function loadPostPermissions(): self\n    {\n        if ($this->loadedPosts) {\n            return $this;\n        }\n        $this->loadedPosts = true;\n\n        // Get the user's individual and role permissions\n        $roles = $this->userRoles();\n        $perms = PostPermission::select(['post_id', 'permission'])\n            ->leftJoin('posts as p', 'p.id', 'post_permissions.post_id')\n            ->leftJoin('entities as e', 'e.id', 'p.entity_id')\n            ->where(function ($sub) use ($roles) {\n                $sub->where('user_id', $this->user->id)\n                    ->orWhereIn('role_id', $roles);\n            })\n            ->where('e.campaign_id', $this->campaign->id)\n            ->get();\n        /** @var PostPermission $perm */\n        foreach ($perms as $perm) {\n            if ($perm->permission === 2) {\n                $this->deniedPostIDs[] = $perm->post_id;\n            } else {\n                $this->allowedPostIDs[] = $perm->post_id;\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Load the permissions of the user (roles and personal permissions)\n     */\n    private function loadPermissions(): self\n    {\n        if ($this->loadedPermissions) {\n            return $this;\n        }\n\n        $this->start = microtime(true);\n        $this->loadedPermissions = true;\n\n        // Valid user: load their roles\n        if ($this->hasUser()) {\n            $this->loadRoles();\n            $this->loadUserPermissions();\n            $this->tune('Perms loaded for user');\n        }\n\n        // If the user had no loaded roles, we need a public role\n        if (isset($this->loadedRoles) && $this->loadedRoles > 0) {\n            return $this;\n        }\n        $this->loadPublicRole();\n        $this->tune('Perms loaded with public');\n\n        return $this;\n    }\n\n    public function reset(): self\n    {\n        $this->loadedPermissions = false;\n        unset($this->loadedRoles);\n        $this->admin = false;\n\n        return $this;\n    }\n\n    /**\n     * Load the user's roles\n     */\n    protected function loadRoles(): self\n    {\n        if (isset($this->loadedRoles)) {\n            return $this;\n        }\n        $this->loadedRoles = 0;\n\n        $roles = UserCache::user($this->user)->roles();\n\n        $roleIDs = [];\n        foreach ($roles as $role) {\n            $this->loadedRoles++;\n            // If one of the roles is an admin, we don't need to figure any more stuff, we're good.\n            if ($role['is_admin']) {\n                $this->admin = true;\n\n                return $this;\n            }\n            $roleIDs[] = $role['id'];\n        }\n        $this->parseRoles($roleIDs);\n\n        return $this;\n    }\n\n    /**\n     * Load public role permissions as a fall-back for non-members of the campaign.\n     */\n    protected function loadPublicRole(): void\n    {\n        /** @var CampaignRole $publicRole */\n        $publicRole = $this->campaign\n            ->roles()\n            ->where('is_public', true)\n            ->first();\n        if ($publicRole) {\n            $this->parseRole($publicRole);\n        }\n    }\n\n    /**\n     * Load the permissions of a role into the service\n     */\n    protected function parseRole(CampaignRole $role): void\n    {\n        // Loop through the permissions of the role to get any blanket _read permissions on entities\n        $permissions = RolePermission::role($role)->permissions();\n        $this->publicRoleId = $role->id;\n        foreach ($permissions as $permission) {\n            $this->parseRolePermission($permission);\n        }\n    }\n\n    /**\n     * Load the permissions of several roles into the service\n     */\n    protected function parseRoles(array $roleIDs): void\n    {\n        // Loop through the permissions of the role to get any blanket _read permissions on entities\n        $permissions = RolePermission::rolesPermissions($roleIDs);\n        // dump($permissions);\n        // CampaignPermission::whereIn('campaign_role_id', $roleIDs)->get();\n        foreach ($permissions as $permission) {\n            $this->parseRolePermission($permission);\n        }\n    }\n\n    /**\n     * Parse a role permission\n     */\n    protected function parseRolePermission(CampaignPermission $permission)\n    {\n        // Only test permissions whose action is being requested\n        if (isset($this->action) && ! $permission->isAction($this->action)) {\n            return;\n        }\n        if (isset($this->entityType) && ! empty($this->entityType) && $permission->entity_type_id !== $this->entityType) {\n            return;\n        }\n        if (isset($this->entityTypeID) && ! empty($permission->entity_type_id) && $permission->entity_type_id !== $this->entityTypeID) {\n            return;\n        }\n\n        if (empty($permission->entity_id)) {\n            if (! in_array($permission->entity_type_id, $this->entityTypesIds)) {\n                $this->entityTypesIds[] = $permission->entity_type_id;\n            }\n        } elseif ($permission->access && ! in_array($permission->entity_id, $this->entityIds)) {\n            // This permission targets an entity directly\n            $this->entityIds[] = $permission->entity_id;\n        } elseif (! $permission->access && ! in_array($permission->entity_id, $this->deniedIds)) {\n            // This permission targets an entity directly\n            $this->deniedIds[] = $permission->entity_id;\n        }\n    }\n\n    /**\n     * Load the user's permissions.\n     */\n    protected function loadUserPermissions(): void\n    {\n        if ($this->admin) {\n            return;\n        }\n\n        // If we have a user, they might have individual entity permissions\n        $permissions = CampaignPermission::where('user_id', $this->user->id)\n            ->where('campaign_id', $this->campaign->id)\n            ->get();\n        foreach ($permissions as $permission) {\n            $this->parseUserPermission($permission);\n        }\n    }\n\n    /**\n     * Parse a permission\n     */\n    protected function parseUserPermission(CampaignPermission $permission)\n    {\n        if (isset($this->action) && ! $permission->isAction($this->action)) {\n            return;\n        }\n\n        // If the permission set is negative, we need to add it to the denied ones too, in case a role of\n        // the user has access to this entity.\n        if ($permission->access) {\n            if (! in_array($permission->entity_id, $this->entityIds)) {\n                $this->entityIds[] = $permission->entity_id;\n            }\n            // If the user was denied through a role but has access through a direct permissions, still allow them\n            if (($key = array_search($permission->entity_id, $this->deniedIds)) !== false) {\n                unset($this->deniedIds[$key]);\n            }\n\n            return;\n        }\n\n        if (! in_array($permission->entity_id, $this->deniedIds)) {\n            $this->deniedIds[] = $permission->entity_id;\n        }\n    }\n\n    protected function tune(string $log): void\n    {\n\n        //        if (!isset($this->campaign)) {\n        //            return;\n        //        }\n        //        if ($this->campaign->id !== 1) {\n        //            return;\n        //        }\n        //\n        //        Log::info($log . ' in ' . round(microtime(true) - $this->start, 3) . 's');\n    }\n\n    protected function userRoles(): array\n    {\n        return UserCache::user($this->user)\n            ->roles()\n            ->pluck('id')\n            ->toArray();\n    }\n}\n"
  },
  {
    "path": "app/Services/Permissions/RolePermission.php",
    "content": "<?php\n\nnamespace App\\Services\\Permissions;\n\nuse App\\Models\\CampaignPermission;\nuse App\\Traits\\RoleAware;\nuse Illuminate\\Database\\Eloquent\\Collection;\n\nclass RolePermission\n{\n    use RoleAware;\n\n    protected array $permissions = [];\n\n    protected array $rolesPermissions = [];\n\n    /**\n     * @return Collection|CampaignPermission[]|array\n     */\n    public function permissions()\n    {\n        if (isset($this->permissions[$this->role->id])) {\n            return $this->permissions[$this->role->id];\n        }\n\n        return $this->permissions[$this->role->id] = $this->role->permissions;\n    }\n\n    public function rolesPermissions(array $roles): mixed\n    {\n        $key = implode('-', $roles);\n        if (isset($this->rolesPermissions[$key])) {\n            return $this->rolesPermissions[$key];\n        }\n\n        return $this->rolesPermissions[$key] = CampaignPermission::roleIds($roles)->get();\n    }\n}\n"
  },
  {
    "path": "app/Services/Permissions/RolePermissionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Permissions;\n\nuse App\\Enums\\Permission;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\EntityType;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\RoleAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\nclass RolePermissionService\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use RoleAware;\n\n    protected int $type;\n\n    public function type(int $type): self\n    {\n        $this->type = $type;\n\n        return $this;\n    }\n\n    /**\n     * Get the campaign role permissions. First key is the entity type\n     */\n    public function permissions(): array\n    {\n        $permissions = [];\n\n        $campaignRolePermissions = [];\n        foreach ($this->role->rolePermissions as $perm) {\n            $campaignRolePermissions[$perm->entity_type_id . '_' . $perm->action] = 1;\n        }\n\n        $entityActions = [\n            CampaignPermission::ACTION_READ, CampaignPermission::ACTION_EDIT,\n            CampaignPermission::ACTION_ADD, CampaignPermission::ACTION_DELETE,\n            CampaignPermission::ACTION_POSTS, CampaignPermission::ACTION_PERMS,\n        ];\n        $icons = [\n            CampaignPermission::ACTION_READ => [\n                'fa-regular fa-eye',\n                'read',\n            ],\n            CampaignPermission::ACTION_EDIT => [\n                'fa-regular fa-pen',\n                'edit',\n            ],\n            CampaignPermission::ACTION_ADD => [\n                'fa-regular fa-plus-square',\n                'add',\n            ],\n            CampaignPermission::ACTION_DELETE => [\n                'fa-regular fa-trash-alt',\n                'delete',\n            ],\n            CampaignPermission::ACTION_POSTS => [\n                'fa-regular fa-file',\n                'articles',\n            ],\n            CampaignPermission::ACTION_PERMS => [\n                'fa-regular fa-cog',\n                'permission',\n            ],\n        ];\n\n        // Public actions\n        if ($this->role->isPublic()) {\n            // $actions = ['read'];\n            $entityActions = [CampaignPermission::ACTION_READ];\n        }\n\n        foreach (EntityType::exclude([config('entities.ids.bookmark')])->inCampaign($this->campaign)->get() as $entityType) {\n            foreach ($entityActions as $action) {\n                if (! isset($permissions[$entityType->plural()])) {\n                    $permissions[$entityType->plural()] = [\n                        'entityType' => $entityType,\n                        'permissions' => [],\n                    ];\n                }\n                $key = \"{$entityType->id}_{$action}\";\n                $permissions[$entityType->plural()]['permissions'][] = [\n                    'action' => $action,\n                    'key' => $key,\n                    'icon' => Arr::first($icons[$action]),\n                    'label' => Arr::last($icons[$action]),\n                    'enabled' => isset($campaignRolePermissions[$key]),\n                ];\n            }\n        }\n\n        $collator = new \\Collator(app()->getLocale());\n        $collator->asort($permissions);\n\n        $keys = array_keys($permissions);\n        $collator->sort($keys);\n        $result = [];\n        foreach ($keys as $key) {\n            $result[$key] = $permissions[$key];\n        }\n\n        return $result;\n    }\n\n    /**\n     * Campaign Permissions\n     */\n    public function campaignPermissions(): array\n    {\n        $permissions = [];\n\n        $campaignRolePermissions = [];\n        foreach ($this->role->permissions as $perm) {\n            if ($perm->entity_type_id || $perm->isGallery()) {\n                continue;\n            }\n            $campaignRolePermissions['campaign_' . $perm->action] = 1;\n        }\n\n        $entityActions = [\n            CampaignPermission::ACTION_MANAGE, CampaignPermission::ACTION_DASHBOARD,\n            CampaignPermission::ACTION_MEMBERS,\n        ];\n        $icons = [\n            CampaignPermission::ACTION_MANAGE => [\n                'fa-regular fa-cog',\n                'manage',\n            ],\n            CampaignPermission::ACTION_DASHBOARD => [\n                'fa-regular fa-columns', 'dashboard',\n            ],\n            CampaignPermission::ACTION_MEMBERS => [\n                'fa-regular fa-users', 'members',\n            ],\n        ];\n\n        foreach ($entityActions as $action) {\n            if (! isset($permissions['campaign'])) {\n                $permissions['campaign'] = [];\n            }\n            $key = \"campaign_{$action}\";\n            $permissions['campaign'][] = [\n                'action' => $action,\n                'key' => $key,\n                'icon' => Arr::first($icons[$action]),\n                'label' => Arr::last($icons[$action]),\n                'enabled' => isset($campaignRolePermissions[$key]),\n            ];\n        }\n\n        return $permissions;\n    }\n\n    public function galleryPermissions(): array\n    {\n        $permissions = [];\n\n        $campaignRolePermissions = [];\n        foreach ($this->role->permissions as $perm) {\n            if ($perm->entity_type_id || ! $perm->isGallery()) {\n                continue;\n            }\n            $campaignRolePermissions['campaign_' . $perm->action] = 1;\n        }\n\n        $entityActions = [\n            CampaignPermission::ACTION_GALLERY,\n            CampaignPermission::ACTION_GALLERY_BROWSE,\n            CampaignPermission::ACTION_GALLERY_UPLOAD,\n        ];\n        $icons = [\n            CampaignPermission::ACTION_GALLERY => [\n                'fa-regular fa-cog', 'gallery.manage',\n            ],\n            CampaignPermission::ACTION_GALLERY_BROWSE => [\n                'fa-regular fa-eye', 'gallery.browse',\n            ],\n            CampaignPermission::ACTION_GALLERY_UPLOAD => [\n                'fa-regular fa-upload', 'gallery.upload',\n            ],\n        ];\n\n        foreach ($entityActions as $action) {\n            if (! isset($permissions['campaign'])) {\n                $permissions['campaign'] = [];\n            }\n            $key = \"campaign_{$action}\";\n            $permissions['campaign'][] = [\n                'action' => $action,\n                'key' => $key,\n                'icon' => Arr::first($icons[$action]),\n                'label' => Arr::last($icons[$action]),\n                'enabled' => isset($campaignRolePermissions[$key]),\n            ];\n        }\n\n        return $permissions;\n    }\n\n    public function templatePermissions(): array\n    {\n        $permissions = [];\n\n        $campaignRolePermissions = [];\n        foreach ($this->role->permissions as $perm) {\n            if ($perm->entity_type_id || ! $perm->isTemplate()) {\n                continue;\n            }\n            $campaignRolePermissions['campaign_' . $perm->action] = 1;\n        }\n\n        $entityActions = [\n            CampaignPermission::ACTION_TEMPLATES,\n            CampaignPermission::ACTION_POST_TEMPLATES,\n\n        ];\n        $icons = [\n            CampaignPermission::ACTION_TEMPLATES => [\n                'fa-regular fa-cog', 'entries',\n            ],\n            CampaignPermission::ACTION_POST_TEMPLATES => [\n                'fa-regular fa-cog', 'articles',\n            ],\n        ];\n\n        foreach ($entityActions as $action) {\n            if (! isset($permissions['campaign'])) {\n                $permissions['campaign'] = [];\n            }\n            $key = \"campaign_{$action}\";\n            $permissions['campaign'][] = [\n                'action' => $action,\n                'key' => $key,\n                'icon' => Arr::first($icons[$action]),\n                'label' => Arr::last($icons[$action]),\n                'enabled' => isset($campaignRolePermissions[$key]),\n            ];\n        }\n\n        return $permissions;\n    }\n\n    public function bookmarkPermissions(): array\n    {\n        $permissions = [];\n\n        $campaignRolePermissions = [];\n        foreach ($this->role->permissions as $perm) {\n            if ($perm->entity_type_id || ! $perm->isBookmark()) {\n                continue;\n            }\n            $campaignRolePermissions['campaign_' . $perm->action] = 1;\n        }\n\n        $entityActions = [\n            CampaignPermission::ACTION_BOOKMARKS,\n        ];\n        $icons = [\n            CampaignPermission::ACTION_BOOKMARKS => [\n                'fa-regular fa-cog', 'manage',\n            ],\n        ];\n\n        foreach ($entityActions as $action) {\n            if (! isset($permissions['campaign'])) {\n                $permissions['campaign'] = [];\n            }\n            $key = \"campaign_{$action}\";\n            $permissions['campaign'][] = [\n                'action' => $action,\n                'key' => $key,\n                'icon' => Arr::first($icons[$action]),\n                'label' => Arr::last($icons[$action]),\n                'enabled' => isset($campaignRolePermissions[$key]),\n            ];\n        }\n\n        return $permissions;\n    }\n\n    public function savePermissions(array $permissions = []): void\n    {\n        // Load existing\n        $existing = [];\n        foreach ($this->role->rolePermissions as $permission) {\n            if (empty($permission->entity_type_id)) {\n                $existing['campaign_' . $permission->action] = $permission;\n\n                continue;\n            }\n            $existing[$permission->entity_type_id . '_' . $permission->action] = $permission;\n        }\n\n        // Loop on submitted form\n        if (empty($permissions)) {\n            $permissions = [];\n        }\n\n        foreach ($permissions as $key => $module) {\n            // Check if exists$\n            if (isset($existing[$key])) {\n                // Do nothing\n                unset($existing[$key]);\n            } else {\n                $action = Str::after($key, '_');\n                if ($module === 'campaign') {\n                    $module = 0;\n                }\n\n                $this->add($module, (int) $action);\n            }\n        }\n\n        // Delete existing that weren't updated\n        foreach ($existing as $permission) {\n            // Only delete if it's a \"general\" and not an entity specific permission\n            if (! is_numeric($permission->entity_id)) {\n                $permission->delete();\n            }\n        }\n    }\n\n    /**\n     * Toggle an entity's action permission\n     */\n    public function toggle(int $action): bool\n    {\n        $perm = $this->role->permissions()\n            ->where('entity_type_id', $this->entityType->id)\n            ->where('action', $action)\n            ->whereNull('entity_id')\n            ->first();\n\n        if ($perm) {\n            $perm->delete();\n\n            return false;\n        }\n\n        $this->add($this->entityType->id, $action);\n\n        return true;\n    }\n\n    /**\n     * Determine if the loaded role has the permission to do a specific action on the\n     * specified entity type (->type())\n     */\n    public function can(Permission $permission): bool\n    // int $action = CampaignPermission::ACTION_READ): bool\n    {\n        return $this->role->permissions\n            ->where('entity_type_id', $this->type)\n            ->whereNull('entity_id')\n            ->where('action', $permission->value)\n            ->where('access', true)\n            ->count() === 1;\n    }\n\n    /**\n     * Add a campaign permission for the role\n     */\n    protected function add(int $entityType, int $action): CampaignPermission\n    {\n        if ($entityType === 0) {\n            $entityType = null;\n        }\n\n        return CampaignPermission::create([\n            // 'key' => $key,\n            'campaign_role_id' => $this->role->id,\n            // 'table_name' => $value,\n            'access' => true,\n            'action' => $action,\n            'entity_type_id' => $entityType,\n            // 'campaign_id' => $campaign->id,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Services/Plugins/ImporterService.php",
    "content": "<?php\n\nnamespace App\\Services\\Plugins;\n\nuse App\\Enums\\Visibility;\nuse App\\Events\\Campaigns\\Plugins\\PluginImported;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\Character;\nuse App\\Models\\CharacterTrait;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityTag;\nuse App\\Models\\Family;\nuse App\\Models\\Image;\nuse App\\Models\\MiscModel;\nuse App\\Models\\OrganisationMember;\nuse App\\Models\\Plugin;\nuse App\\Models\\PluginVersionEntity;\nuse App\\Models\\Post;\nuse App\\Models\\QuestElement;\nuse App\\Models\\Race;\nuse App\\Models\\Relation;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\nclass ImporterService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected Plugin $plugin;\n\n    protected array $loadedRelations = [];\n\n    protected array $loadedPosts = [];\n\n    protected Collection $importedEntities;\n\n    /** updated entities */\n    protected array $updated = [];\n\n    /** created entities */\n    protected array $created = [];\n\n    /** entities that are to be skipped */\n    protected array $skippedEntities = [];\n\n    protected bool $forcePrivate = false;\n\n    protected bool $skipUpdates = false;\n\n    protected array $entityIds = [];\n\n    protected array $miscIds = [];\n\n    protected array $entityTypes = [];\n\n    protected array $models = [];\n\n    protected mixed $model;\n\n    public function plugin(Plugin $plugin): self\n    {\n        $this->plugin = $plugin;\n\n        return $this;\n    }\n\n    public function options(array $options): self\n    {\n        if (Arr::get($options, 'force_private', false)) {\n            $this->forcePrivate = true;\n        }\n        if (Arr::get($options, 'only_new', false)) {\n            $this->skipUpdates = true;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Import a content pack's entities into the campaign.\n     */\n    public function import()\n    {\n        if (! $this->plugin->isContentPack()) {\n            throw new Exception('not_content_pack');\n        }\n\n        // Prepare the uuids for already imported lookups\n        $campaignPlugin = $this->campaignPlugin();\n        $version = $campaignPlugin->version;\n        $entities = $version->entities()->with('type')->get();\n        $uuids = $entities->pluck('uuid');\n\n        $this->importedEntities = Entity::whereIn('marketplace_uuid', $uuids)->get();\n        $count = 0;\n\n        /**\n         * First we create the base model for all entities, or load existing ones from the db\n         */\n        foreach ($entities as $pluginEntity) {\n            $this->importModel($pluginEntity);\n        }\n\n        /*dump('Misc Mapping');\n        dump($this->miscIds);\n        dump('Entity Mapping');\n        dump($this->entityIds);*/\n        // Now what we have the base models and mappings, let's go again and post those fields\n        foreach ($entities as $pluginEntity) {\n            $this->importFields($pluginEntity);\n            $count++;\n        }\n\n        PluginImported::dispatch($campaignPlugin, $this->user);\n\n        return $count;\n    }\n\n    protected function importModel(PluginVersionEntity $pluginEntity)\n    {\n        // Updating?\n        /** @var ?Entity $model */\n        $model = null;\n        /** @var ?Entity $entity */\n        $entity = $this->importedEntities\n            ->where('marketplace_uuid', $pluginEntity->uuid)\n            ->where('type_id', $pluginEntity->type_id)\n            ->first();\n        /** @var ?Entity $modifiedEntity */\n        $modifiedEntity = $this->importedEntities\n            ->where('marketplace_uuid', $pluginEntity->uuid)\n            ->first();\n\n        if ($entity) {\n            $this->entityIds[$pluginEntity->id] = $entity->id;\n            $this->miscIds[$pluginEntity->id] = $entity->entity_id;\n            $this->entityTypes[$pluginEntity->id] = $entity->entityType->code;\n            // dump('existing ' . $pluginEntity->uuid);\n            $model = $entity->child;\n\n            if (! $this->skipUpdates) {\n                $this->updated[] = '<a href=\"' . $entity->url() . '\" class=\"text-link\">' . $entity->name . '</a>';\n            } else {\n                $this->skippedEntities[] = $pluginEntity->id;\n            }\n        } else {\n            if ($modifiedEntity) {\n                $modifiedEntity->marketplace_uuid = null;\n                $modifiedEntity->save();\n            }\n            $className = '\\App\\Models\\\\' . Str::studly($pluginEntity->type->code);\n            // dump('new ' . $className);\n\n            /** @var MiscModel $model */\n            $model = new $className;\n            $model->name = $pluginEntity->name;\n            // $model->entry = $this->$pluginEntity->entry;\n            $model->campaign_id = $this->campaign->id;\n            $model->save();\n\n            $entity = $model->entity;\n            $entity->marketplace_uuid = $pluginEntity->uuid;\n            $entity->source = 'plugin';\n            $entity->save();\n\n            $this->miscIds[$pluginEntity->id] = $model->id;\n            $this->entityTypes[$pluginEntity->id] = $model->entity->entityType->code;\n            $this->entityIds[$pluginEntity->id] = $model->entity->id;\n\n            $this->created[] = '<a href=\"' . $entity->url() . '\" class=\"text-link\">' . $entity->name . '</a>';\n        }\n        $this->models[$pluginEntity->id] = $model;\n    }\n\n    protected function importFields(PluginVersionEntity $pluginEntity): void\n    {\n        if (in_array($pluginEntity->id, $this->skippedEntities)) {\n            return;\n        }\n        // dump('Parsing entity ' . $pluginEntity->name . ' #' . $pluginEntity->id . '');\n        $this->model = $this->models[$pluginEntity->id];\n        $entityId = $this->getEntityId($pluginEntity->id);\n        // dump(\"entityId: $entityId\");\n        foreach ($pluginEntity->fields as $field => $value) {\n            $this->importField($field, $value, $pluginEntity);\n        }\n\n        if ($this->forcePrivate) {\n            $this->model->is_private = true;\n        }\n\n        $this->importImage($pluginEntity);\n\n        // Mentions\n        $this->model->entity->entry = preg_replace_callback('`\\[entity:(.*?)\\]`i', function ($matches) {\n            $id = (int) $matches[1];\n            if (empty($id) || ! isset($this->entityIds[$id])) {\n                return 'wat';\n            }\n\n            return '[' . $this->entityTypes[$id] . ':' . $this->entityIds[$id] . ']';\n        }, $pluginEntity->entry);\n\n        $this->model->save();\n        $this->model->entity->save();\n\n        // Relations\n        if (! empty($pluginEntity->related)) {\n            $this->importRelations($pluginEntity, $entityId);\n        }\n\n        $this->importPosts($pluginEntity, $entityId);\n    }\n\n    protected function importField(string $field, mixed $value, PluginVersionEntity $pluginEntity): void\n    {\n        // dump(\"field $field => $value\");\n        // parent mapping\n        if ($field == 'gender') {\n            $field = 'sex';\n        }\n        // Foreign key\n        if (Str::endsWith($field, '_id')) {\n            $this->importForeign($field, $value);\n        } elseif (in_array($field, ['personality', 'appearance'])) {\n            $this->importBlock($field, $value);\n        } elseif ($field == 'tags') {\n            $this->importTags($value);\n        } elseif ($field == 'tooltip') {\n            $this->importEntityTooltip($value);\n        } elseif ($field == 'type') {\n            $this->importEntityType($value);\n        } elseif ($field == 'is_private' && $this->forcePrivate) {\n            // Skip\n        } else {\n            $this->model->$field = $value;\n        }\n    }\n\n    protected function importForeign(string $field, mixed $value): void\n    {\n        if ($field == 'race_id' && $this->model instanceof Character) {\n            $this->importCharacterRace($value);\n\n            return;\n        } elseif ($field == 'family_id' && $this->model instanceof Character) {\n            $this->importCharacterFamily($value);\n\n            return;\n        }\n        if (empty($value)) {\n            $this->model->$field = null;\n        } elseif (isset($this->miscIds[$value])) {\n            $this->model->$field = $this->miscIds[$value];\n        }\n    }\n\n    protected function importEntityTooltip(mixed $value): void\n    {\n        $this->model->entity->tooltip = $value;\n    }\n\n    protected function importEntityType(mixed $value): void\n    {\n        $this->model->entity->type = $value;\n    }\n\n    protected function importCharacterRace(mixed $value): void\n    {\n        if (empty($value)) {\n            $this->model->races()->detach();\n        } elseif (isset($this->miscIds[$value])) {\n            $raceID = $this->miscIds[$value];\n            $race = Race::find($raceID);\n            if ($race) {\n                $this->model->races()->attach($race);\n            }\n        }\n    }\n\n    protected function importCharacterFamily(mixed $value): void\n    {\n        if (empty($value)) {\n            $this->model->families()->detach();\n        } elseif (isset($this->miscIds[$value])) {\n            $raceID = $this->miscIds[$value];\n            $race = Family::find($raceID);\n            if ($race) {\n                $this->model->families()->attach($race);\n            }\n        }\n    }\n\n    protected function importRelations(mixed $pluginEntity, mixed $entityId): void\n    {\n        $this->loadRelations($this->model);\n        foreach ($pluginEntity->related as $type => $fields) {\n            foreach ($fields as $uuid => $data) {\n                if ($type == 'relation') {\n                    $this->saveRelation($data, $uuid, $entityId);\n                } elseif ($type == 'member') {\n                    $this->saveOrganisationMember($data, $uuid, $this->model->id, $pluginEntity);\n                } elseif ($type == 'quest_element') {\n                    $this->saveQuestElement($data, $uuid, $this->model->id, $pluginEntity);\n                } else {\n                    Log::info('Unknown relation type \\'' . $type . '\\' for marketplace entity #' . $pluginEntity->id);\n                }\n            }\n        }\n    }\n\n    /**\n     * Create or update a relation\n     */\n    protected function saveRelation(array $data, string $uuid, int $ownerId): void\n    {\n        // dump(\"New relation for $ownerId\");\n        // dump($data);\n\n        $targetId = $this->getEntityId($data['target']);\n        if (empty($targetId) || empty($data['relation'])) {\n            return;\n        }\n\n        try {\n            $relation = $this->loadedRelations[$uuid] ?? null;\n            if (empty($relation)) {\n                $relation = new Relation;\n                $relation->owner_id = $ownerId;\n                $relation->marketplace_uuid = $uuid;\n            }\n\n            $relation->target_id = $targetId;\n            $relation->colour = Arr::get($data, 'colour', null);\n            $relation->attitude = Arr::get($data, 'attitude', null);\n            $relation->relation = Arr::get($data, 'relation', null);\n            $relation->save();\n        } catch (Exception $e) {\n            Log::error('Invalid relation for owner ' . $ownerId . ' and uuid ' . $uuid . ': ' . $e->getMessage());\n        }\n    }\n\n    protected function saveOrganisationMember(array $data, string $uuid, int $characterId, PluginVersionEntity $pluginEntity): void\n    {\n        // Check the target org\n        // dump('adding org member for ' . $characterId);\n        $organisation = $this->miscIds[$data['target']];\n        if (empty($organisation)) {\n            return;\n        }\n\n        // Look if already exists\n        try {\n            $member = OrganisationMember::where('character_id', $characterId)\n                ->where('organisation_id', $organisation)\n                ->first();\n            if (! $member) {\n                $member = new OrganisationMember;\n                $member->character_id = $characterId;\n                $member->organisation_id = $organisation;\n            }\n\n            $member->role = Arr::get($data, 'role', null);\n            $member->save();\n        } catch (Exception $e) {\n            Log::error('Invalid org member ' . $uuid . ' for plugin entity #' .\n                $pluginEntity->id . ': ' . $e->getMessage());\n        }\n    }\n\n    protected function saveQuestElement(array $data, string $uuid, int $questId, PluginVersionEntity $pluginEntity): void\n    {\n        // dump('importing a quest element.');\n\n        // Determine what we're adding\n        $target = $this->entityIds[$data['target']];\n\n        // dump(\"want to add target $target ($targetType) as a $class to $questId\");\n\n        // Does it exist?\n        try {\n            /** @var QuestElement $element */\n            $element = QuestElement::where('quest_id', $questId)->where('entity_id', $target)->first();\n            if (empty($element)) {\n                $element = new QuestElement;\n                $element->quest_id = $questId;\n                $element->entity_id = $target;\n            }\n            $element->role = Arr::get($data, 'role', null);\n            $element->entry = $this->mentions(Arr::get($data, 'description', ''));\n            $element->visibility_id = Visibility::All;\n            $element->save();\n        } catch (Exception $e) {\n            Log::error('Invalid quest element ' . $uuid . ' for plugin entity #' . $pluginEntity->id\n                . ' (entity #' . $target . '): ' . $e->getMessage());\n        }\n    }\n\n    /**\n     * Images are stored in the campaign gallery and need to be mapped to their uuid\n     */\n    protected function importImage(PluginVersionEntity $entity): self\n    {\n        // Don't do anything if no image or replacing an image (too many false positives)\n        if (empty($entity->image_path) || ! empty($this->model->entity->image_path) || ! empty($this->model->entity->image_uuid)) {\n            return $this;\n        }\n\n        // Need to download the image from the marketplace's s3 (if possible)\n        try {\n            $imageExt = Str::afterLast($entity->image_path, '.');\n\n            // We need to create a new Image to migrate to the new system. Maybe in the future\n            // we can store the marketplace's uuid here and avoid duplicates.\n            $image = new Image;\n            $image->campaign_id = $this->campaign->id;\n            $image->ext = $imageExt;\n            $image->name = $entity->name;\n            $image->visibility_id = Visibility::All;\n            $size = Storage::disk('s3-marketplace')->size($entity->image_path);\n            $image->size = (int) ceil($size / 1024); // kb\n            $image->save();\n\n            Storage::writeStream($image->path, Storage::disk('s3-marketplace')->readStream($entity->image_path));\n            $this->model->entity->image_uuid = $image->id;\n        } catch (Exception $e) {\n            Log::error('Error importing image from ' . $entity->id . ': ' . $e->getMessage());\n        }\n\n        return $this;\n    }\n\n    protected function importBlock(string $block, ?array $values = null): void\n    {\n        if (empty($values)) {\n            return;\n        }\n\n        /** @var CharacterTrait[] $existing */\n        $existing = [];\n        foreach ($this->model->characterTraits()->{$block}()->get() as $pers) {\n            $existing[$pers->name] = $pers;\n        }\n        foreach ($values as $name => $value) {\n            if (isset($existing[$name])) {\n                $existing[$name]->entry = $value;\n                $existing[$name]->save();\n            } else {\n                CharacterTrait::create([\n                    'character_id' => $this->model->id,\n                    'section_id' => $block == 'appearance' ?\n                        CharacterTrait::SECTION_APPEARANCE : CharacterTrait::SECTION_PERSONALITY,\n                    'name' => $name,\n                    'entry' => $value,\n                ]);\n            }\n        }\n    }\n\n    protected function importTags(?array $values = null): void\n    {\n        if (empty($values)) {\n            return;\n        }\n        $real = [];\n        foreach ($values as $val) {\n            if (! empty($val)) {\n                $real[] = $val;\n            }\n        }\n        if (empty($real)) {\n            return;\n        }\n\n        // Importing tags for\n\n        // Get existing tags on this entity\n        $existing = $this->model->entity->tags->pluck('id')->toArray();\n\n        foreach ($real as $tag) {\n            // Tag doesn't properly exist, skip\n            if (! isset($this->miscIds[$tag])) {\n                continue;\n            }\n            $target = $this->miscIds[$tag];\n            if (in_array($target, $existing)) {\n                continue;\n            }\n\n            $new = new EntityTag;\n            $new->entity_id = $this->model->entity->id;\n            $new->tag_id = $target;\n            $new->save();\n        }\n    }\n\n    protected function getEntityId(int $id)\n    {\n        return $this->entityIds[$id];\n    }\n\n    /**\n     * Load\n     */\n    protected function loadRelations(MiscModel $misc): void\n    {\n        $this->loadedRelations = [];\n        /** @var Relation $relation */\n        foreach ($misc->entity->relationships()->whereNotNull('marketplace_uuid')->get() as $relation) {\n            if (empty($relation->marketplace_uuid)) {\n                continue;\n            }\n            $this->loadedRelations[$relation->marketplace_uuid] = $relation;\n        }\n    }\n\n    protected function loadPosts(int $entityId): void\n    {\n        $this->loadedPosts = [];\n        $posts = Post::where('entity_id', $entityId)\n            ->whereNotNull('marketplace_uuid')\n            ->get();\n\n        /** @var Post $post */\n        foreach ($posts as $post) {\n            $this->loadedPosts[$post->marketplace_uuid] = $post;\n        }\n    }\n\n    protected function mentions(string $text): string\n    {\n        return preg_replace_callback('`\\[entity:(.*?)\\]`i', function ($matches) {\n            $id = (int) $matches[1];\n            if (empty($id) || ! isset($this->entityIds[$id])) {\n                return 'wat';\n            }\n\n            return '[' . $this->entityTypes[$id] . ':' . $this->entityIds[$id] . ']';\n        }, $text);\n    }\n\n    /**\n     * List of created entities\n     */\n    public function created(): string\n    {\n        return (string) implode(', ', $this->created);\n    }\n\n    /**\n     * List of created entities\n     */\n    public function updated(): string\n    {\n        return (string) implode(', ', $this->updated);\n    }\n\n    protected function importPosts(PluginVersionEntity $entity, int $entityId): void\n    {\n        if (empty($entity->posts)) {\n            return;\n        }\n\n        $this->loadPosts($entityId);\n\n        foreach ($entity->posts as $uuid => $data) {\n            $post = $this->loadedPosts[$uuid] ?? null;\n            if (empty($post)) {\n                $post = new Post;\n                $post->entity_id = $entityId;\n                $post->marketplace_uuid = $uuid;\n            }\n\n            $visibility = Visibility::All->value;\n\n            if (Arr::get($data, 'visibility') == 'admin') {\n                $visibility = Visibility::Admin->value;\n            } elseif (Arr::get($data, 'visibility') == 'admin-self') {\n                $visibility = Visibility::AdminSelf->value;\n            } elseif (Arr::get($data, 'visibility') == 'members') {\n                $visibility = Visibility::Member->value;\n            } elseif (Arr::get($data, 'visibility') == 'self') {\n                $visibility = Visibility::Self->value;\n            }\n\n            $post->name = Arr::get($data, 'name');\n            $post->entry = $this->mentions(Arr::get($data, 'entry'));\n            $post->visibility_id = $visibility;\n            $post->save();\n        }\n    }\n\n    protected function campaignPlugin(): ?CampaignPlugin\n    {\n        return CampaignPlugin::where('campaign_id', $this->campaign->id)\n            ->where('plugin_id', $this->plugin->id)\n            ->first();\n    }\n}\n"
  },
  {
    "path": "app/Services/Posts/Permissions/SavePermissionsService.php",
    "content": "<?php\n\nnamespace App\\Services\\Posts\\Permissions;\n\nuse App\\Models\\PostPermission;\nuse App\\Traits\\PostAware;\nuse App\\Traits\\RequestAware;\n\nclass SavePermissionsService\n{\n    use PostAware;\n    use RequestAware;\n\n    public function save()\n    {\n        $existing = $parsed = [];\n        foreach ($this->post->permissions as $perm) {\n            $existing[$perm->isUser() ? 'u_' . $perm->user_id : 'r_' . $perm->role_id] = $perm;\n        }\n\n        $users = (array) $this->request->post('perm_user', []);\n        $perms = (array) $this->request->post('perm_user_perm', []);\n        $dirty = false;\n\n        foreach ($users as $key => $user) {\n            if ($user == '$SELECTEDID$') {\n                continue;\n            }\n\n            $existingKey = 'u_' . $user;\n            if (isset($existing[$existingKey])) {\n                $perm = $existing[$existingKey];\n                $perm->permission = (int) $perms[$key];\n                $perm->save();\n                unset($existing[$existingKey]);\n                $parsed[] = $existingKey;\n            } elseif (! in_array($existingKey, $parsed)) {\n                PostPermission::create([\n                    'post_id' => $this->post->id,\n                    'user_id' => $user,\n                    'permission' => $perms[$key],\n                ]);\n                $parsed[] = $existingKey;\n                $dirty = true;\n            }\n        }\n\n        $roles = (array) $this->request->post('perm_role', []);\n        $perms = (array) $this->request->post('perm_role_perm', []);\n\n        foreach ($roles as $key => $user) {\n            if ($user == '$SELECTEDID$') {\n                continue;\n            }\n\n            $existingKey = 'r_' . $user;\n            if (isset($existing[$existingKey])) {\n                $perm = $existing[$existingKey];\n                $perm->permission = (int) $perms[$key];\n                $perm->save();\n                unset($existing[$existingKey]);\n                $parsed[] = $existingKey;\n            } elseif (! in_array($existingKey, $parsed)) {\n                PostPermission::create([\n                    'post_id' => $this->post->id,\n                    'role_id' => $user,\n                    'permission' => $perms[$key],\n                ]);\n                $dirty = true;\n                $parsed[] = $existingKey;\n            }\n        }\n\n        // Cleanup permissions that are no longer used\n        foreach ($existing as $oldPermission) {\n            $oldPermission->delete();\n            $dirty = true;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/Posts/PurgeService.php",
    "content": "<?php\n\nnamespace App\\Services\\Posts;\n\nuse App\\Models\\Post;\nuse Exception;\n\nclass PurgeService\n{\n    /** @var int Number of total deleted posts */\n    protected int $count = 0;\n\n    public function count(): int\n    {\n        return $this->count;\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function trash(Post $post): void\n    {\n        $post->forceDelete();\n        $this->count++;\n    }\n}\n"
  },
  {
    "path": "app/Services/Posts/RecoveryService.php",
    "content": "<?php\n\nnamespace App\\Services\\Posts;\n\nuse App\\Models\\Post;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass RecoveryService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function recover(array $ids): array\n    {\n        $posts = [];\n        foreach ($ids as $id) {\n            $url = $this->post($id);\n            if ($url) {\n                $posts[$id] = $url;\n            }\n        }\n\n        return $posts;\n    }\n\n    /**\n     * Restore an entity post.\n     */\n    protected function post(int $id): mixed\n    {\n        /** @var ?Post $post */\n        $post = Post::onlyTrashed()->find($id);\n        if (! $post) {\n            return null;\n        }\n        if ($post->entity->deleted_at) {\n            return null;\n        }\n        $post->restore();\n        $options = ['#post-' . $post->id];\n\n        return $post->entity->url('show', $options);\n    }\n}\n"
  },
  {
    "path": "app/Services/QuickCreator/ProcessService.php",
    "content": "<?php\n\nnamespace App\\Services\\QuickCreator;\n\nuse App\\Http\\Requests\\StoreCharacter;\nuse App\\Http\\Requests\\StoreCustomEntity;\nuse App\\Http\\Requests\\StorePost;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\Family;\nuse App\\Models\\Location;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Post;\nuse App\\Models\\Race;\nuse App\\Models\\Tag;\nuse App\\Services\\Entity\\CopyService;\nuse App\\Services\\Entity\\EntitySaveService;\nuse App\\Services\\Entity\\Relations\\EntityRelationsServiceFactory;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\CreatesEntityFromName;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Support\\Str;\n\nclass ProcessService\n{\n    use CampaignAware;\n    use CreatesEntityFromName;\n    use EntityTypeAware;\n    use RequestAware;\n    use UserAware;\n\n    /** @var Entity[]|Post[] */\n    protected array $new = [];\n\n    /** Fields as processed after creating dynamic elements */\n    protected array $inputFields;\n\n    protected Entity $template;\n\n    protected Entity $entity;\n\n    public function __construct(\n        protected CopyService $copyService,\n        protected EntitySaveService $entitySaveService,\n        protected EntityRelationsServiceFactory $relationsFactory,\n    ) {}\n\n    public function entity()\n    {\n        $names = explode(PHP_EOL, str_replace(\"\\r\", '', $this->request->get('name')));\n        $values = $this->request->all();\n\n        // Prepare the data\n        unset($values['names'], $values['_multi'], $values['_target']);\n\n        // Remove target as we need that for something else\n        if (! empty($values['entry'])) {\n            $values['entry'] = nl2br($values['entry']);\n        } elseif ($this->entityType->id == config('entities.ids.note')) {\n            $values['entry'] = '';\n        }\n\n        // Prepare the validator\n        $requestValidator = '\\App\\Http\\Requests\\Store' . ucfirst(Str::camel($this->entityType->code));\n        if ($this->entityType->isCustom()) {\n            $requestValidator = StoreCustomEntity::class;\n        }\n\n        /** @var StoreCharacter $validator */\n        $validator = new $requestValidator;\n\n        // Handle dynamic elements\n        $this->inputFields = $values;\n\n        $this->dynamicTags()\n            ->dynamicParent($this->entityType)\n            ->dynamicLocations()\n            ->dynamicLocation();\n        if ($this->entityType->isCharacter()) {\n            $this->dynamicFamilies()\n                ->dynamicRaces();\n        }\n\n        $this->loadTemplate();\n\n        $values = $this->inputFields;\n\n        foreach ($names as $name) {\n            if ($name == '') {\n                continue;\n            }\n\n            $values['name'] = $name;\n            $this->validateEntity($values, $validator->rules());\n\n            if ($this->entityType->isCustom()) {\n                $this->entity = new Entity($values);\n                $this->entity->campaign_id = $this->campaign->id;\n                $this->entity->type_id = $this->entityType->id;\n                $this->entity->save();\n                $this->entitySaveService->save($this->entity, $values);\n                $this->new[] = $this->entity;\n                $this->copyTemplateRelations();\n            } else {\n                /** @var MiscModel $new */\n                $new = $this->entityType->getClass();\n                $new->fill($values);\n                $new->campaign_id = $this->campaign->id;\n                $new->save();\n                $this->entitySaveService->save($new->entity, $values);\n                $this->relationsFactory->for($new->entity)?->save($new, $values);\n\n                $this->new[] = $new->entity;\n                $this->entity = $new->entity;\n                $this->copyTemplateRelations();\n            }\n        }\n\n        // If no entity was created, we throw the standard error\n        if (empty($this->new)) {\n            $rules = $validator->rules();\n            $this->validateEntity($values, $rules);\n        }\n    }\n\n    public function post(): self\n    {\n        $names = explode(PHP_EOL, str_replace(\"\\r\", '', $this->request->get('name')));\n        $values = $this->request->all();\n\n        // Prepare the data\n        unset($values['names'], $values['_multi'], $values['_target']);\n\n        // Remove target as we need that for something else\n\n        if (! empty($values['entry'])) {\n            $values['entry'] = nl2br($values['entry']);\n        }\n\n        // Prepare the validator\n        $validator = new StorePost;\n\n        // Handle dynamic elements\n        $this->inputFields = $values;\n        $values = $this->inputFields;\n\n        foreach ($names as $name) {\n            if (empty($name)) {\n                continue;\n            }\n\n            $values['name'] = $name;\n            // If position = 0 the post's position is last, else the post's position is first.\n            $rules = $validator->rules();\n            $rules['entity_id'] = 'required|integer|exists:entities,id';\n            $this->validateEntity($values, $rules);\n            if ($values['position'] == 0) {\n                $new = Post::create($values);\n            } else {\n                $entity = Entity::find($values['entity_id']);\n                $entity->posts()->increment('position');\n                $values['position'] = 1;\n                $new = Post::create($values);\n            }\n            $this->new[] = $new;\n        }\n\n        // If no entity was created, we throw the standard error\n        if (empty($this->new)) {\n            $rules = $validator->rules();\n            $this->validateEntity($values, $rules);\n        }\n\n        return $this;\n    }\n\n    public function first(): Post|Entity\n    {\n        return Arr::first($this->new);\n    }\n\n    public function count(): int\n    {\n        return count($this->new);\n    }\n\n    public function links(): array\n    {\n        $links = [];\n        foreach ($this->new as $new) {\n            if ($new instanceof Post) {\n                $links[] = '<a href=\"' . $new->entity->url() . '\" class=\"text-link\">' . $new->name . '</a>';\n            } else {\n                $links[] = '<a href=\"' . $new->url() . '\" class=\"text-link\">' . $new->name . '</a>';\n            }\n        }\n\n        return $links;\n    }\n\n    /**\n     * Validate an entity's request to make sure data doesn't contain erroneous info\n     */\n    protected function validateEntity(array $data, array $rules)\n    {\n        return Validator::make(\n            $data,\n            $rules,\n        );\n    }\n\n    protected function dynamicLocation(): self\n    {\n        if (! $this->request->has('location_id')) {\n            return $this;\n        }\n\n        $resolved = $this->resolveNewModels(\n            [$this->request->get('location_id')],\n            Location::class,\n            config('entities.ids.location'),\n        );\n\n        $this->inputFields['location_id'] = Arr::first($resolved);\n\n        return $this;\n    }\n\n    protected function dynamicTags(): self\n    {\n        if (! $this->request->has('tags') && ! $this->request->has('save-tags')) {\n            return $this;\n        }\n\n        $this->inputFields['tags'] = $this->resolveNewModels(\n            $this->request->get('tags', []),\n            Tag::class,\n            config('entities.ids.tag'),\n        );\n\n        return $this;\n    }\n\n    protected function dynamicLocations(): self\n    {\n        if (! $this->request->has('locations') && ! $this->request->has('save_locations')) {\n            return $this;\n        }\n\n        $this->inputFields['locations'] = $this->resolveNewModels(\n            $this->request->get('locations', []),\n            Location::class,\n            config('entities.ids.location'),\n        );\n\n        return $this;\n    }\n\n    protected function dynamicRaces(): self\n    {\n        if (! $this->request->has('races') && ! $this->request->has('save_races')) {\n            return $this;\n        }\n\n        $this->inputFields['races'] = $this->resolveNewModels(\n            $this->request->get('races', []),\n            Race::class,\n            config('entities.ids.race'),\n        );\n\n        return $this;\n    }\n\n    protected function dynamicFamilies(): self\n    {\n        if (! $this->request->has('families') && ! $this->request->has('save_families')) {\n            return $this;\n        }\n\n        $this->inputFields['families'] = $this->resolveNewModels(\n            $this->request->get('families', []),\n            Family::class,\n            config('entities.ids.family'),\n        );\n\n        return $this;\n    }\n\n    protected function dynamicParent(EntityType $entityType): self\n    {\n        if (! $this->request->has($entityType->code . '_id')) {\n            return $this;\n        }\n\n        $value = $this->request->get($entityType->code . '_id', null);\n        if ($value === null || is_numeric($value)) {\n            return $this;\n        }\n\n        // @phpstan-ignore-next-line\n        $id = $this->createModelFromName($value, get_class($entityType->getClass()), $entityType, $this->campaign);\n        if ($id !== null) {\n            $this->inputFields[$entityType->code . '_id'] = $id;\n        }\n\n        return $this;\n    }\n\n    protected function loadTemplate(): self\n    {\n        if (! $this->request->has('template_id')) {\n            return $this;\n        }\n        unset($this->inputFields['template_id']);\n\n        /** @var Entity $template */\n        $template = Entity::template()->find($this->request->get('template_id'));\n        if (empty($template)) {\n            return $this;\n        }\n\n        if ($template->type_id !== $this->entityType->id) {\n            return $this;\n        }\n        if ($this->entityType->isStandard() && $template->isMissingChild()) {\n            return $this;\n        }\n\n        $this->template = $template;\n\n        $entityFields = [\n            'type', 'parent_id', 'entry', 'image_uuid', 'header_uuid', 'focus_x', 'focus_y', 'tooltip',\n        ];\n        foreach ($entityFields as $field) {\n            if (empty($template->{$field})) {\n                continue;\n            }\n            if (! empty($this->inputFields[$field])) {\n                continue;\n            }\n            $this->inputFields[$field] = $template->{$field};\n        }\n\n        if ($this->entityType->isStandard()) {\n            $this->loadTemplateChild();\n        }\n\n        return $this;\n    }\n\n    protected function loadTemplateChild(): self\n    {\n        // Do we do a if/else per entity type? Or try and play it by fillable?\n        $fillable = $this->template->child->getFillable();\n        foreach ($fillable as $field) {\n            if (empty($this->template->child->{$field}) || ! empty($this->inputFields[$field])) {\n                continue;\n            }\n            $this->inputFields[$field] = $this->template->child->{$field};\n        }\n\n        return $this;\n    }\n\n    protected function copyTemplateRelations(): self\n    {\n        if (! isset($this->template)) {\n            return $this;\n        }\n\n        $this->copyService\n            ->source($this->template)\n            ->entity($this->entity)\n            ->force()\n            ->copy();\n\n        $this->copyService\n            ->attributes();\n        if ($this->template->isCharacter()) {\n            $this->copyService->character();\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Referrals/JoinService.php",
    "content": "<?php\n\nnamespace App\\Services\\Referrals;\n\nuse App\\Enums\\ReferralEventType;\nuse App\\Models\\Concerns\\HasUser;\nuse App\\Models\\Referral;\nuse App\\Models\\ReferralEvent;\nuse App\\Models\\User;\n\nclass JoinService\n{\n    use HasUser;\n\n    protected ?Referral $referral;\n\n    public function referral(Referral $referral): self\n    {\n        $this->referral = $referral;\n\n        return $this;\n    }\n\n    public function expired(): bool\n    {\n        return $this->referral->revoked_at !== null;\n    }\n\n    public function flag(): void\n    {\n        session()->put('referral_code', $this->referral->code);\n    }\n\n    public function referrer(): ?int\n    {\n        if (! session()->has('referral_code')) {\n            return null;\n        }\n\n        $code = session()->get('referral_code');\n        session()->forget('referral_code');\n\n        $this->referral = Referral::where('code', $code)->first();\n\n        return $this->referral?->user_id;\n    }\n\n    public function event(User $user, ReferralEventType $type): void\n    {\n        if (! isset($this->referral)) {\n            return;\n        }\n        $event = new ReferralEvent;\n        $event->created_by = $user->id;\n        $event->referred_by = $this->referral->user_id;\n        $event->type = $type;\n        $event->save();\n    }\n}\n"
  },
  {
    "path": "app/Services/Referrals/ManagementService.php",
    "content": "<?php\n\nnamespace App\\Services\\Referrals;\n\nuse App\\Models\\Referral;\nuse App\\Models\\User;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Database\\QueryException;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\nclass ManagementService\n{\n    use UserAware;\n\n    protected Collection $referrals;\n\n    public function referral(): Referral\n    {\n        $code = Referral::where('user_id', $this->user->id)->first();\n        if (! $code) {\n            return $this->createReferral();\n        }\n\n        return $code;\n    }\n\n    public function users(): int\n    {\n        if (app()->hasDebugModeEnabled()) {\n            return mt_rand(1, 50);\n        }\n\n        return $this->referrals()->count();\n    }\n\n    protected function referrals(): Collection\n    {\n        if (isset($this->referrals)) {\n            return $this->referrals;\n        }\n\n        return $this->referrals = User::select(['id', 'pledge'])->where('referred_by', $this->user->id)->get();\n    }\n\n    public function subscribers(): int\n    {\n        if (app()->hasDebugModeEnabled()) {\n            return mt_rand(0, 10);\n        }\n\n        return $this->referrals()->whereNotNull('pledge')->count();\n    }\n\n    public function badge(): string\n    {\n        $count = $this->users();\n        if ($count < 5) {\n            return 'I';\n        } elseif ($count < 12) {\n            return 'II';\n        }\n\n        return 'III';\n    }\n\n    protected function createReferral(): Referral\n    {\n        while (true) {\n            try {\n                return Referral::create([\n                    'user_id' => $this->user->id,\n                    'code' => $this->generateCode(),\n                ]);\n            } catch (QueryException $e) {\n                if ($e->getCode() !== '23000') {\n                    throw $e;\n                }\n                // If it's a collision, retry\n            }\n        }\n    }\n\n    protected function generateCode(int $length = 8): string\n    {\n        return Str::random($length);\n    }\n}\n"
  },
  {
    "path": "app/Services/Report/AccountsReportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Report;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass AccountsReportService extends BaseReportService\n{\n    public function name(): string\n    {\n        return 'Accounts Report';\n    }\n\n    public function getStats(Carbon $start, Carbon $end): array\n    {\n        $newAccounts = DB::table('users')\n            ->whereBetween('created_at', [$start, $end])\n            ->count();\n\n        if ($newAccounts === 0) {\n            return [\n                'new_accounts' => 0,\n                'accounts_with_entities' => 0,\n                'entities_created' => 0,\n            ];\n        }\n\n        $accountsWithEntities = DB::table('users')\n            ->join('entities', function ($join) {\n                $join->on('entities.created_by', '=', 'users.id')\n                    ->where('entities.source', '=', 'user');\n            })\n            ->whereBetween('users.created_at', [$start, $end])\n            ->distinct()\n            ->count('users.id');\n\n        $entitiesCreated = DB::table('entities')\n            ->join('users', 'users.id', '=', 'entities.created_by')\n            ->whereBetween('users.created_at', [$start, $end])\n            ->where('entities.source', 'user')\n            ->count();\n\n        return [\n            'new_accounts' => $newAccounts,\n            'accounts_with_entities' => $accountsWithEntities,\n            'entities_created' => $entitiesCreated,\n        ];\n    }\n\n    public function buildTerminalLines(array $current, array $previous): array\n    {\n        return [\n            $this->formatMetricLine('New Accounts', $current['new_accounts'], $previous['new_accounts']),\n            $this->formatMetricLine('Accounts that Created Entities', $current['accounts_with_entities'], $previous['accounts_with_entities'], $current['new_accounts']),\n            $this->formatMetricLine('Entities Created by New Accounts', $current['entities_created'], $previous['entities_created']),\n        ];\n    }\n\n    public function buildDiscordBody(array $current, array $previous): string\n    {\n        return implode(\"\\n\", [\n            $this->formatMetricText('New Accounts', $current['new_accounts'], $previous['new_accounts']),\n            $this->formatMetricText('Accounts that Created Entities', $current['accounts_with_entities'], $previous['accounts_with_entities'], $current['new_accounts']),\n            $this->formatMetricText('Entities Created by New Accounts', $current['entities_created'], $previous['entities_created']),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Services/Report/BaseReportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Report;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Number;\n\nabstract class BaseReportService\n{\n    abstract public function name(): string;\n\n    abstract public function getStats(Carbon $start, Carbon $end): array;\n\n    /**\n     * Returns an array of strings to output to the terminal.\n     * Use '<info>text</info>' for section headers and '' for blank lines.\n     */\n    abstract public function buildTerminalLines(array $current, array $previous): array;\n\n    abstract public function buildDiscordBody(array $current, array $previous): string;\n\n    protected function calculateGrowth(int $current, int $previous): float\n    {\n        if ($previous == 0) {\n            return $current > 0 ? 100 : 0;\n        }\n\n        return (($current - $previous) / $previous) * 100;\n    }\n\n    protected function getGrowthIndicator(float $growth): string\n    {\n        $color = $growth > 0 ? 'green' : ($growth < 0 ? 'red' : 'yellow');\n        $arrow = $growth > 0 ? '↑' : ($growth < 0 ? '↓' : '→');\n\n        return sprintf('<%s>%s %.1f%%</>', $color, $arrow, abs($growth));\n    }\n\n    protected function formatMetricLine(string $label, int $current, int $previous, ?int $base = null): string\n    {\n        $growth = $this->calculateGrowth($current, $previous);\n        $growthIndicator = $this->getGrowthIndicator($growth);\n\n        if ($base) {\n            $percentOfBase = $base > 0 ? Number::format(($current / $base) * 100, 1) : '0.0';\n\n            return sprintf('%s: %s (%s%%) %s', $label, Number::format($current), $percentOfBase, $growthIndicator);\n        }\n\n        return sprintf('%s: %s %s', $label, Number::format($current), $growthIndicator);\n    }\n\n    protected function formatMetricText(string $label, int $current, int $previous, ?int $base = null): string\n    {\n        $growth = $this->calculateGrowth($current, $previous);\n        $growthIndicator = strip_tags($this->getGrowthIndicator($growth));\n\n        if ($base) {\n            $percentOfBase = $base > 0 ? Number::format(($current / $base) * 100, 1) : '0.0';\n\n            return sprintf('%s: %s (%s%%) %s', $label, Number::format($current), $percentOfBase, $growthIndicator);\n        }\n\n        return sprintf('%s: %s %s', $label, Number::format($current), $growthIndicator);\n    }\n}\n"
  },
  {
    "path": "app/Services/Report/ChurnReportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Report;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass ChurnReportService extends BaseReportService\n{\n    public function name(): string\n    {\n        return 'Churn Report';\n    }\n\n    public function getStats(Carbon $start, Carbon $end): array\n    {\n        $base = fn () => DB::table('subscription_cancellations')\n            ->whereBetween('created_at', [$start, $end]);\n\n        $total = $base()->count();\n\n        if ($total === 0) {\n            return [\n                'total' => 0,\n                'avg_duration' => 0,\n                'flagged' => 0,\n                'by_tier' => collect(),\n                'by_reason' => collect(),\n            ];\n        }\n\n        return [\n            'total' => $total,\n            'avg_duration' => (int) round($base()->avg('duration') ?? 0),\n            'flagged' => $base()->where('is_flagged', true)->count(),\n            'by_tier' => $base()\n                ->select('tier', DB::raw('count(*) as total'))\n                ->whereNotNull('tier')\n                ->groupBy('tier')\n                ->orderByDesc('total')\n                ->pluck('total', 'tier'),\n            'by_reason' => $base()\n                ->select('reason', DB::raw('count(*) as total'))\n                ->whereNotNull('reason')\n                ->groupBy('reason')\n                ->orderByDesc('total')\n                ->pluck('total', 'reason'),\n        ];\n    }\n\n    public function buildTerminalLines(array $current, array $previous): array\n    {\n        $lines = [\n            $this->formatMetricLine('Total Cancellations', $current['total'], $previous['total']),\n            $this->formatMetricLine('Avg Duration (months)', $current['avg_duration'], $previous['avg_duration']),\n            $this->formatMetricLine('Flagged', $current['flagged'], $previous['flagged'], $current['total']),\n            '',\n            '<info>By Tier:</info>',\n        ];\n\n        foreach ($current['by_tier'] as $tier => $count) {\n            $lines[] = $this->formatMetricLine(\"  {$tier}\", $count, $previous['by_tier']->get($tier, 0), $current['total']);\n        }\n\n        $lines[] = '';\n        $lines[] = '<info>By Reason:</info>';\n\n        foreach ($current['by_reason'] as $reason => $count) {\n            $lines[] = $this->formatMetricLine(\"  {$reason}\", $count, $previous['by_reason']->get($reason, 0), $current['total']);\n        }\n\n        return $lines;\n    }\n\n    public function buildDiscordBody(array $current, array $previous): string\n    {\n        $lines = [\n            $this->formatMetricText('Total Cancellations', $current['total'], $previous['total']),\n            $this->formatMetricText('Avg Duration (months)', $current['avg_duration'], $previous['avg_duration']),\n            $this->formatMetricText('Flagged', $current['flagged'], $previous['flagged'], $current['total']),\n            '',\n            'By Tier:',\n        ];\n\n        foreach ($current['by_tier'] as $tier => $count) {\n            $lines[] = $this->formatMetricText(\"  {$tier}\", $count, $previous['by_tier']->get($tier, 0), $current['total']);\n        }\n\n        $lines[] = '';\n        $lines[] = 'By Reason:';\n\n        foreach ($current['by_reason'] as $reason => $count) {\n            $lines[] = $this->formatMetricText(\"  {$reason}\", $count, $previous['by_reason']->get($reason, 0), $current['total']);\n        }\n\n        return implode(\"\\n\", $lines);\n    }\n}\n"
  },
  {
    "path": "app/Services/Report/OnboardingReportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Report;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass OnboardingReportService extends BaseReportService\n{\n    public function name(): string\n    {\n        return 'Onboarding Report';\n    }\n\n    public function getStats(Carbon $start, Carbon $end): array\n    {\n        $campaignsCreated = DB::table('campaigns')\n            ->whereBetween('created_at', [$start, $end])\n            ->count();\n\n        $campaignIds = DB::table('campaigns')\n            ->whereBetween('created_at', [$start, $end])\n            ->pluck('id');\n\n        if ($campaignIds->isEmpty()) {\n            return [\n                'campaigns_created' => 0,\n                'onboarding_shown' => 0,\n                'onboarding_completed' => 0,\n                'onboarding_dismissed' => 0,\n                'onboarding_abandoned' => 0,\n                'campaign_choice' => 0,\n                'worldbuilding_choice' => 0,\n                'story_choice' => 0,\n                'skip_choice' => 0,\n            ];\n        }\n\n        $onboardingShown = DB::table('campaign_events')\n            ->whereIn('campaign_id', $campaignIds)\n            ->where('event', 'onboarding_shown')\n            ->count();\n\n        $onboardingCompleted = DB::table('campaign_events')\n            ->whereIn('campaign_id', $campaignIds)\n            ->where('event', 'onboarding_completed')\n            ->count();\n\n        $onboardingDismissed = DB::table('campaign_events')\n            ->whereIn('campaign_id', $campaignIds)\n            ->where('event', 'onboarding_dismissed')\n            ->count();\n\n        $completedOrDismissedCampaigns = DB::table('campaign_events')\n            ->whereIn('campaign_id', $campaignIds)\n            ->whereIn('event', ['onboarding_completed', 'onboarding_dismissed'])\n            ->distinct()\n            ->pluck('campaign_id');\n\n        $onboardingAbandoned = $onboardingShown - $completedOrDismissedCampaigns->count();\n\n        // @phpstan-ignore-next-line\n        $choices = DB::table('campaign_events')\n            ->whereIn('campaign_id', $campaignIds)\n            ->where('event', 'onboarding_completed')\n            ->get()\n            ->pluck('metadata')\n            ->map(function ($metadata) {\n                $decoded = json_decode($metadata, true);\n\n                return $decoded['choice'] ?? null;\n            })\n            ->filter()\n            ->countBy();\n\n        return [\n            'campaigns_created' => $campaignsCreated,\n            'onboarding_shown' => $onboardingShown,\n            'onboarding_completed' => $onboardingCompleted,\n            'onboarding_dismissed' => $onboardingDismissed,\n            'onboarding_abandoned' => $onboardingAbandoned,\n            'campaign_choice' => $choices->get('campaign', 0),\n            'worldbuilding_choice' => $choices->get('worldbuilding', 0),\n            'story_choice' => $choices->get('story', 0),\n            'skip_choice' => $choices->get('skip', 0),\n        ];\n    }\n\n    public function buildTerminalLines(array $current, array $previous): array\n    {\n        return [\n            $this->formatMetricLine('Campaigns Created', $current['campaigns_created'], $previous['campaigns_created']),\n            '',\n            '<info>Onboarding Funnel:</info>',\n            $this->formatMetricLine('  Onboarding Shown', $current['onboarding_shown'], $previous['onboarding_shown'], $current['campaigns_created']),\n            $this->formatMetricLine('  Onboarding Completed', $current['onboarding_completed'], $previous['onboarding_completed'], $current['onboarding_shown']),\n            $this->formatMetricLine('  Onboarding Dismissed', $current['onboarding_dismissed'], $previous['onboarding_dismissed'], $current['onboarding_shown']),\n            $this->formatMetricLine('  Onboarding Abandoned', $current['onboarding_abandoned'], $previous['onboarding_abandoned'], $current['onboarding_shown']),\n            '',\n            '<info>Choice Breakdown (of completed):</info>',\n            $this->formatMetricLine('  Campaign', $current['campaign_choice'], $previous['campaign_choice'], $current['onboarding_completed']),\n            $this->formatMetricLine('  Worldbuilding', $current['worldbuilding_choice'], $previous['worldbuilding_choice'], $current['onboarding_completed']),\n            $this->formatMetricLine('  Story', $current['story_choice'], $previous['story_choice'], $current['onboarding_completed']),\n            $this->formatMetricLine('  Skip', $current['skip_choice'], $previous['skip_choice'], $current['onboarding_completed']),\n        ];\n    }\n\n    public function buildDiscordBody(array $current, array $previous): string\n    {\n        return implode(\"\\n\", [\n            $this->formatMetricText('Campaigns Created', $current['campaigns_created'], $previous['campaigns_created']),\n            '',\n            'Onboarding Funnel:',\n            $this->formatMetricText('  Onboarding Shown', $current['onboarding_shown'], $previous['onboarding_shown'], $current['campaigns_created']),\n            $this->formatMetricText('  Onboarding Completed', $current['onboarding_completed'], $previous['onboarding_completed'], $current['onboarding_shown']),\n            $this->formatMetricText('  Onboarding Dismissed', $current['onboarding_dismissed'], $previous['onboarding_dismissed'], $current['onboarding_shown']),\n            $this->formatMetricText('  Onboarding Abandoned', $current['onboarding_abandoned'], $previous['onboarding_abandoned'], $current['onboarding_shown']),\n            '',\n            'Choice Breakdown (of completed):',\n            $this->formatMetricText('  Campaign', $current['campaign_choice'], $previous['campaign_choice'], $current['onboarding_completed']),\n            $this->formatMetricText('  Worldbuilding', $current['worldbuilding_choice'], $previous['worldbuilding_choice'], $current['onboarding_completed']),\n            $this->formatMetricText('  Story', $current['story_choice'], $previous['story_choice'], $current['onboarding_completed']),\n            $this->formatMetricText('  Skip', $current['skip_choice'], $previous['skip_choice'], $current['onboarding_completed']),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Services/Report/WeeklyReportService.php",
    "content": "<?php\n\nnamespace App\\Services\\Report;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Number;\n\nclass WeeklyReportService extends BaseReportService\n{\n    public function name(): string\n    {\n        return 'Weekly Report';\n    }\n\n    public function getStats(Carbon $start, Carbon $end): array\n    {\n        // Campaign Creators: new users who created at least one campaign\n        $campaignCreators = DB::table('users')\n            ->join('campaigns', 'campaigns.created_by', '=', 'users.id')\n            ->whereBetween('users.created_at', [$start, $end])\n            ->whereNull('campaigns.deleted_at')\n            ->distinct()\n            ->count('users.id');\n\n        $newUsers = DB::table('users')\n            ->whereBetween('created_at', [$start, $end])\n            ->count();\n\n        // Organic: campaign creators with no referral source\n        $organic = DB::table('users')\n            ->join('campaigns', 'campaigns.created_by', '=', 'users.id')\n            ->whereBetween('users.created_at', [$start, $end])\n            ->whereNull('campaigns.deleted_at')\n            ->whereNull('users.referred_by')\n            ->distinct()\n            ->count('users.id');\n\n        // Onboarding completed: campaign creators with onboarding_completed event\n        $onboarding = DB::table('users')\n            ->join('campaigns', 'campaigns.created_by', '=', 'users.id')\n            ->join('campaign_events', function ($join) {\n                $join->on('campaign_events.created_by', '=', 'users.id')\n                    ->where('campaign_events.event', '=', 'onboarding_completed');\n            })\n            ->whereBetween('users.created_at', [$start, $end])\n            ->whereNull('campaigns.deleted_at')\n            ->distinct()\n            ->count('users.id');\n\n        // 3+ Entities: campaign creators who created 3 or more user entities\n        $entities3Plus = DB::table('users')\n            ->join('campaigns', 'campaigns.created_by', '=', 'users.id')\n            ->whereBetween('users.created_at', [$start, $end])\n            ->whereNull('campaigns.deleted_at')\n            ->whereIn('users.id', function ($query) {\n                $query->select('created_by')\n                    ->from('entities')\n                    ->where('source', 'user')\n                    ->whereNull('deleted_at')\n                    ->groupBy('created_by')\n                    ->havingRaw('COUNT(*) >= 3');\n            })\n            ->distinct()\n            ->count('users.id');\n\n        // Second Login: campaign creators who logged in after their registration\n        $secondLogin = DB::table('users')\n            ->join('campaigns', 'campaigns.created_by', '=', 'users.id')\n            ->whereBetween('users.created_at', [$start, $end])\n            ->whereNull('campaigns.deleted_at')\n            ->whereNotNull('users.last_login_at')\n            ->whereColumn('users.last_login_at', '>', 'users.created_at')\n            ->distinct()\n            ->count('users.id');\n\n        // Subscribed: campaign creators with an active subscription\n        $subscribed = DB::table('users')\n            ->join('campaigns', 'campaigns.created_by', '=', 'users.id')\n            ->join('subscriptions', 'subscriptions.user_id', '=', 'users.id')\n            ->whereBetween('users.created_at', [$start, $end])\n            ->whereNull('campaigns.deleted_at')\n            ->distinct()\n            ->count('users.id');\n\n        // Engagement\n        $weeklyActiveUsers = DB::table('users')\n            ->whereBetween('last_login_at', [$start, $end])\n            ->whereRaw('last_login_at > created_at')\n            ->count();\n\n        $activeCampaigns = DB::table('campaigns')\n            ->whereBetween('updated_at', [$start, $end])\n            ->whereNull('deleted_at')\n            ->count();\n\n        $entitiesCreated = DB::table('entities')\n            ->where('source', 'user')\n            ->whereBetween('created_at', [$start, $end])\n            ->whereNull('deleted_at')\n            ->count();\n\n        return [\n            'campaign_creators' => $campaignCreators,\n            'organic' => $organic,\n            'referred' => max(0, $campaignCreators - $organic),\n            'invited_only' => max(0, $newUsers - $campaignCreators),\n            'onboarding' => $onboarding,\n            'entities_3plus' => $entities3Plus,\n            'second_login' => $secondLogin,\n            'subscribed' => $subscribed,\n            'weekly_active_users' => $weeklyActiveUsers,\n            'active_campaigns' => $activeCampaigns,\n            'entities_created' => $entitiesCreated,\n        ];\n    }\n\n    public function buildTerminalLines(array $current, array $previous): array\n    {\n        return [\n            '<info>🚀 ACTIVATION FUNNEL</info>',\n            'Campaign Creators → Onboarding → 3+ Entities → Second Login → Subscribe',\n            $this->formatFunnelRow($current),\n            '',\n            sprintf(\n                'Note: %s creators = %s organic + %s referred',\n                Number::format($current['campaign_creators']),\n                Number::format($current['organic']),\n                Number::format($current['referred'])\n            ),\n            sprintf('      (Excludes %s invited-only users)', Number::format($current['invited_only'])),\n            '',\n            'vs Last Week:',\n            $this->formatFunnelRow($previous),\n            '',\n            $this->buildTrendsLine($current, $previous),\n            '',\n            str_repeat('━', 26),\n            '<info>📈 ENGAGEMENT</info>',\n            $this->formatMetricLine('Weekly Active Users', $current['weekly_active_users'], $previous['weekly_active_users']),\n            $this->formatMetricLine('Active Campaigns', $current['active_campaigns'], $previous['active_campaigns']),\n            $this->formatMetricLine('Entities Created', $current['entities_created'], $previous['entities_created']),\n        ];\n    }\n\n    public function buildDiscordBody(array $current, array $previous): string\n    {\n        return implode(\"\\n\", [\n            '🚀 **ACTIVATION FUNNEL**',\n            'Campaign Creators → Onboarding → 3+ Entities → Second Login → Subscribe',\n            $this->formatFunnelRow($current),\n            '',\n            sprintf(\n                'Note: %s creators = %s organic + %s referred',\n                Number::format($current['campaign_creators']),\n                Number::format($current['organic']),\n                Number::format($current['referred'])\n            ),\n            sprintf('      (Excludes %s invited-only users)', Number::format($current['invited_only'])),\n            '',\n            'vs Last Week:',\n            $this->formatFunnelRow($previous),\n            '',\n            strip_tags($this->buildTrendsLine($current, $previous)),\n            '',\n            str_repeat('━', 26),\n            '📈 **ENGAGEMENT**',\n            $this->formatMetricText('Weekly Active Users', $current['weekly_active_users'], $previous['weekly_active_users']),\n            $this->formatMetricText('Active Campaigns', $current['active_campaigns'], $previous['active_campaigns']),\n            $this->formatMetricText('Entities Created', $current['entities_created'], $previous['entities_created']),\n        ]);\n    }\n\n    private function formatFunnelRow(array $stats): string\n    {\n        $base = $stats['campaign_creators'];\n\n        return sprintf(\n            '%s → %s (%s%%) → %s (%s%%) → %s (%s%%) → %s (%s%%)',\n            Number::format($base),\n            Number::format($stats['onboarding']),\n            $this->pct($stats['onboarding'], $base),\n            Number::format($stats['entities_3plus']),\n            $this->pct($stats['entities_3plus'], $base),\n            Number::format($stats['second_login']),\n            $this->pct($stats['second_login'], $base),\n            Number::format($stats['subscribed']),\n            $this->pct($stats['subscribed'], $base)\n        );\n    }\n\n    private function buildTrendsLine(array $current, array $previous): string\n    {\n        $parts = [\n            'Signups ' . $this->getGrowthIndicator($this->calculateGrowth($current['campaign_creators'], $previous['campaign_creators'])),\n            'Onboarding ' . $this->getGrowthIndicator($this->calculateGrowth($current['onboarding'], $previous['onboarding'])),\n            'Entities ' . $this->getGrowthIndicator($this->calculateGrowth($current['entities_3plus'], $previous['entities_3plus'])),\n            'Second Login ' . $this->getGrowthIndicator($this->calculateGrowth($current['second_login'], $previous['second_login'])),\n            'Conversion ' . $this->getGrowthIndicator($this->calculateGrowth($current['subscribed'], $previous['subscribed'])),\n        ];\n\n        return 'Trends: ' . implode(' | ', $parts);\n    }\n\n    private function pct(int $value, int $base): string\n    {\n        if ($base === 0) {\n            return '0.0';\n        }\n\n        return Number::format(($value / $base) * 100, 1);\n    }\n}\n"
  },
  {
    "path": "app/Services/Search/AttributeSearchService.php",
    "content": "<?php\n\nnamespace App\\Services\\Search;\n\nuse App\\Models\\Attribute;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\RequestAware;\n\nclass AttributeSearchService\n{\n    use EntityAware;\n    use RequestAware;\n\n    public function find(): array\n    {\n        $term = mb_trim($this->request->get('q') ?? '');\n        $attributes = $this->entity->attributes()\n            ->whereLike('name', '%' . $term . '%')\n            ->get();\n        $results = [];\n        /** @var Attribute $attribute */\n        foreach ($attributes as $attribute) {\n            $results[] = [\n                'id' => $attribute->id,\n                'name' => $attribute->name,\n                'value' => $attribute->value,\n            ];\n        }\n\n        return $results;\n    }\n}\n"
  },
  {
    "path": "app/Services/Search/CampaignSearchService.php",
    "content": "<?php\n\nnamespace App\\Services\\Search;\n\nuse App\\Models\\CampaignUser;\nuse App\\Traits\\CampaignAware;\n\nclass CampaignSearchService\n{\n    use CampaignAware;\n\n    /**\n     * List of roles in a campaign\n     *\n     * @param  string|null  $query  Search term\n     */\n    public function roles(?string $query = null): array\n    {\n        return $this->campaign->roles()\n            ->search($query)\n            ->get(['name', 'id'])\n            ->toArray();\n    }\n\n    /**\n     * List of members in a campaign\n     *\n     * @param  string|null  $query  Search term\n     */\n    public function members(?string $query = null): array\n    {\n        $members = $this->campaign->members()->search($query)->get();\n        $result = [];\n\n        /** @var CampaignUser $member */\n        foreach ($members as $member) {\n            $result[] = [\n                'id' => $member->user->id,\n                'text' => $member->user->name,\n                'image' => $member->user->hasAvatar() ? $member->user->getAvatarUrl() : null,\n            ];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "app/Services/Search/EntitySearchService.php",
    "content": "<?php\n\nnamespace App\\Services\\Search;\n\nuse App\\Models\\Attribute;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\QuestElement;\nuse App\\Models\\TimelineElement;\nuse App\\Traits\\CampaignAware;\nuse Illuminate\\Support\\Str;\nuse Meilisearch\\Client;\nuse Meilisearch\\Contracts\\SearchQuery;\n\nclass EntitySearchService\n{\n    use CampaignAware;\n\n    protected array $ids = [];\n\n    protected array $attributeIds = [];\n\n    protected array $timelineElementIds = [];\n\n    protected array $postIds = [];\n\n    protected array $questElementIds = [];\n\n    protected int $limit = 10;\n\n    protected int $pages;\n\n    protected int $page = 1;\n\n    public function limit(int $limit): self\n    {\n        $this->limit = $limit;\n\n        return $this;\n    }\n\n    public function pages(): int\n    {\n        return $this->pages;\n    }\n\n    public function page(int $page): self\n    {\n        $this->page = $page;\n\n        return $this;\n    }\n\n    /**\n     * Send search request\n     */\n    public function search(?string $term = null, ?string $term2 = null): array\n    {\n        // Get results from Meilisearch\n        $client = new Client(config('scout.meilisearch.host'), config('scout.meilisearch.key'));\n        $client->getKeys();\n        $queries = [\n            (new SearchQuery)\n                ->setIndexUid('entities')\n                ->setQuery($term)\n                ->setFilter(['campaign_id = ' . $this->campaign->id])\n                ->setAttributesToRetrieve(['id', 'entity_id', 'type'])\n                ->setPage($this->page)\n                ->setLimit($this->limit)\n                ->setHitsPerPage($this->limit),\n        ];\n\n        if ($term2) {\n            $queries[] =\n                (new SearchQuery)\n                    ->setIndexUid('entities')\n                    ->setQuery($term2)\n                    ->setFilter(['campaign_id = ' . $this->campaign->id])\n                    ->setAttributesToRetrieve(['id', 'entity_id', 'type'])\n                    ->setPage($this->page)\n                    ->setLimit($this->limit)\n                    ->setHitsPerPage($this->limit);\n        }\n        $results = $client->multiSearch($queries);\n\n        if ($term2) {\n            $entities = array_merge($results['results'][0]['hits'], $results['results'][1]['hits']);\n        } else {\n            $entities = $results['results'][0]['hits'];\n        }\n\n        $this->pages = $results['results'][0]['totalPages'];\n\n        return $this->process($entities)->fetch();\n    }\n\n    /**\n     * Process results to fetch entities from db\n     *\n     * @param  array  $results  Search term\n     */\n    protected function process(array $results = []): self\n    {\n        foreach ($results as $result) {\n            if ($result['type'] == 'quest_element') {\n                $id = Str::afterLast($result['id'], '_');\n                $this->questElementIds[$result['entity_id']] = $id;\n                // dd($result);\n            } elseif ($result['type'] == 'timeline_element') {\n                $id = Str::afterLast($result['id'], '_');\n                $this->timelineElementIds[$result['entity_id']] = $id;\n                // dd($result);\n            } elseif ($result['type'] == 'post') {\n                $id = Str::afterLast($result['id'], '_');\n                $this->postIds[$result['entity_id']] = $id;\n                // dd($result);\n            } elseif ($result['type'] == 'attribute') {\n                $id = Str::afterLast($result['id'], '_');\n                $this->attributeIds[$result['entity_id']] = $id;\n                // dd($result);\n            } else {\n                $this->ids[$result['entity_id']] = $result['entity_id'];\n            }\n        }\n\n        // If the search also threw the entity as a possible result don't bother loading the other models\n        $this->attributeIds = array_diff_key($this->attributeIds, $this->ids);\n        $this->timelineElementIds = array_diff_key($this->timelineElementIds, $this->ids);\n        $this->questElementIds = array_diff_key($this->questElementIds, $this->ids);\n        $this->postIds = array_diff_key($this->postIds, $this->ids);\n\n        return $this;\n    }\n\n    /**\n     * Fetch entities from DB\n     */\n    protected function fetch(): array\n    {\n        $posts = Post::select(['id', 'entity_id'])\n            ->with('entity')\n            ->has('entity')\n            ->whereIn('id', $this->postIds)\n            ->get();\n        $attributes = Attribute::select(['id', 'entity_id'])\n            ->with('entity')\n            ->has('entity')\n            ->whereIn('id', $this->attributeIds)\n            ->get();\n        $questElements = QuestElement::select(['id', 'quest_id'])\n            ->with(['quest', 'quest.entity'])\n            ->has('quest.entity')\n            ->whereIn('id', $this->questElementIds)\n            ->get();\n        $timelineElements = TimelineElement::select(['id', 'timeline_id'])\n            ->with(['timeline', 'timeline.entity'])\n            ->has('timeline.entity')\n            ->whereIn('id', $this->timelineElementIds)\n            ->get();\n\n        // Get entities from db\n        $entities = Entity::select('id', 'name')\n            ->whereIn('id', $this->ids)\n            ->orderBy('name')\n            ->get();\n\n        // Process entities for output\n        $output = [];\n        foreach ($entities as $entity) {\n            $output[$entity->id] = [\n                'id' => $entity->id,\n                'entity' => $entity->name,\n                'url' => $entity->url(),\n            ];\n        }\n        foreach ($attributes as $attribute) {\n            $output[$attribute->entity->id] = [\n                'id' => $attribute->entity->id,\n                'entity' => $attribute->entity->name,\n                'url' => $attribute->entity->url(),\n            ];\n        }\n        foreach ($posts as $post) {\n            $output[$post->entity->id] = [\n                'id' => $post->entity->id,\n                'entity' => $post->entity->name,\n                'url' => $post->entity->url(),\n            ];\n        }\n        foreach ($questElements as $questElement) {\n            $output[$questElement->quest->entity->id] = [\n                'id' => $questElement->quest->entity->id,\n                'entity' => $questElement->quest->name,\n                'url' => $questElement->quest->entity->url(),\n            ];\n        }\n        foreach ($timelineElements as $timelineElement) {\n            $output[$timelineElement->timeline->entity->id] = [\n                'id' => $timelineElement->timeline->entity->id,\n                'entity' => $timelineElement->timeline->entity->name,\n                'url' => $timelineElement->timeline->entity->url(),\n            ];\n        }\n\n        return $output;\n    }\n}\n"
  },
  {
    "path": "app/Services/Search/LiveSearchService.php",
    "content": "<?php\n\nnamespace App\\Services\\Search;\n\nuse App\\Facades\\Avatar;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\Search\\Orderable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Str;\n\nclass LiveSearchService\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use Orderable;\n    use RequestAware;\n\n    protected Builder $query;\n\n    public function search(): array\n    {\n        $term = mb_trim($this->request->get('q') ?? '');\n        $excludes = $this->request->has('exclude') ? $this->request->get('exclude') : null;\n\n        $with = ['image', 'entityType'];\n        if ($this->request->filled('with-family')) {\n            $with[] = 'character';\n            $with[] = 'character.families';\n        }\n        $this->query = Entity::inTypes($this->entityType->id);\n        if (! empty($excludes)) {\n            $this->query->whereNotIn('id', [$excludes]);\n        }\n        if ($this->entityType->isStandard()) {\n            $with[] = Str::camel($this->entityType->code);\n        }\n        $this->query->with($with);\n        $this->order($term);\n        $entities = $this->query\n            ->limit(10)\n            ->get();\n\n        $onlyEntity = $this->request->filled('entity');\n\n        $list = [];\n        $child = Str::camel($this->entityType->code);\n        /** @var Entity $entity */\n        foreach ($entities as $entity) {\n            if ($this->entityType->isStandard() && empty($entity->{$child})) {\n                continue;\n            }\n            $format = [\n                'id' => $this->entityType->isCustom() || $onlyEntity ? $entity->id : $entity->{$child}->id,\n                'entity_id' => $entity->id,\n                'name' => $entity->name,\n                'text' => $entity->name,\n            ];\n            if ($entity->isTag() && $entity->tag->hasColour()) {\n                $format['colour'] = $entity->tag->colour;\n                $format['colour_style'] = $entity->tag->colourStyle();\n            }\n            $format['image'] = Avatar::entity($entity)->fallback()->size(40)->thumbnail();\n            $format['url'] = $entity->url();\n\n            if ($this->request->filled('with-family')) {\n                $families = $entity->character->families->pluck('name')->toarray();\n                if (! empty($families)) {\n                    $format['text'] .= ' (' . implode(', ', $families) . ')';\n                }\n            }\n\n            $list[] = $format;\n        }\n\n        return $list;\n    }\n}\n"
  },
  {
    "path": "app/Services/Search/MapGroupSearchService.php",
    "content": "<?php\n\nnamespace App\\Services\\Search;\n\nuse App\\Models\\Map;\nuse App\\Models\\MapGroup;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\Search\\Orderable;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\nclass MapGroupSearchService\n{\n    use CampaignAware;\n    use Orderable;\n    use RequestAware;\n\n    protected Builder $query;\n\n    public Map $map;\n\n    public function map(Map $map): self\n    {\n        $this->map = $map;\n\n        return $this;\n    }\n\n    public function search(): array\n    {\n        $term = mb_trim($this->request->get('q') ?? '');\n        $excludes = $this->request->has('exclude') ? $this->request->get('exclude') : null;\n\n        $this->query = $this->map->groups()->getQuery();\n\n        if (! empty($excludes)) {\n            $this->query->whereNotIn('id', [$excludes]);\n        }\n\n        $this->order($term);\n        $groups = $this->query\n            ->limit(10)\n            ->get();\n\n        $list = [];\n        /** @var MapGroup $group */\n        foreach ($groups as $group) {\n            $format = [\n                'id' => $group->id,\n                'name' => $group->name,\n                'text' => $group->name,\n            ];\n\n            $list[] = $format;\n        }\n\n        return $list;\n    }\n}\n"
  },
  {
    "path": "app/Services/Search/MentionService.php",
    "content": "<?php\n\nnamespace App\\Services\\Search;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Facades\\Avatar;\nuse App\\Models\\Attribute;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\Post;\nuse App\\Services\\Entity\\NewService;\nuse App\\Services\\EntityTypeService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Str;\n\nclass MentionService\n{\n    use CampaignAware;\n    use EntityAware;\n    use RequestAware;\n    use UserAware;\n\n    protected string $term;\n\n    protected string $strippedTerm;\n\n    protected array $data;\n\n    protected int $limit = 15;\n\n    public function __construct(\n        protected EntityTypeService $entityTypeService,\n        protected NewService $newService) {}\n\n    public function search(): array\n    {\n        return $this\n            ->prepare()\n            ->entities()\n            ->posts()\n            ->attributes()\n            ->new()\n            ->data();\n    }\n\n    public function load(): array\n    {\n        $results = [];\n\n        if ($this->request->filled('entities')) {\n            $entities = Entity::with(['entityType', 'aliases'])->whereIn('id', $this->request->get('entities'))->get();\n            foreach ($entities as $entity) {\n                if ($entity->entityType->isStandard() && ! $entity->child) {\n                    continue;\n                }\n                $results[] = $this->formatEntity($entity);\n            }\n        }\n\n        if ($this->request->filled('posts')) {\n            $posts = Post::has('entity')->whereIn('id', $this->request->get('posts'))->get();\n            foreach ($posts as $post) {\n                $results[] = [\n                    'type' => 'post',\n                    'id' => $post->id,\n                    'name' => $post->name,\n                    'inject' => \"[post:{$post->id}]\",\n                ];\n            }\n        }\n\n        return $results;\n    }\n\n    protected function prepare(): self\n    {\n        if ($this->request->has('entity')) {\n            $entity = Entity::find(['id' => $this->request->get('entity')])->first();\n            if ($entity) {\n                $this->entity($entity);\n            }\n        }\n\n        $this->term = mb_trim(Str::replace('_', ' ', $this->request->get('q')));\n        $this->strippedTerm = mb_ltrim($this->term, '=');\n\n        return $this;\n    }\n\n    protected function entities(): self\n    {\n        // Figure out what kind of entities we want.\n        $availableEntityTypes = $this->entityTypeService\n            ->campaign($this->campaign)\n            ->available()\n            ->pluck('id')\n            ->toArray();\n\n        $query = Entity::inTypes($availableEntityTypes)->whereNull('archived_at');\n        $query\n            ->select(['entities.*', 'ea.id as alias_id', 'ea.name as alias_name'])\n            ->distinct()\n            ->leftJoin('entity_assets as ea', function ($join) {\n                $join->on('ea.entity_id', '=', 'entities.id');\n                if (Str::startsWith($this->term, '=')) {\n                    $join->where('ea.name', $this->strippedTerm);\n                } else {\n                    $join->where('ea.name', 'like', '%' . $this->term . '%');\n                }\n                $join->where('ea.type_id', EntityAssetType::alias);\n            })\n            ->where(function ($sub) {\n                if (Str::startsWith($this->term, '=')) {\n                    $sub->where('entities.name', $this->strippedTerm)\n                        ->orWhere('ea.name', $this->strippedTerm);\n                } else {\n                    $sub->where('entities.name', 'like', '%' . $this->term . '%')\n                        ->orWhere('ea.name', 'like', '%' . $this->term . '%');\n                }\n            });\n\n        // Exact name match comes first\n        // Only do this when the input string is utf8\n        $cleanTerm = preg_replace(\"/[^a-zA-Z0-9_\\-\\.\\s]/\", '', $this->strippedTerm);\n        if (mb_strlen($cleanTerm, 'UTF-8') === mb_strlen($cleanTerm)) {\n            $escapedTerm = preg_replace('/&/', '\\\\&', preg_quote($cleanTerm));\n            $query->orderByRaw('FIELD(entities.name, ?) DESC', [$cleanTerm]);\n            if ($this->campaign->boosted()) {\n                $query->orderByRaw('FIELD(ea.name, ?) DESC', [$cleanTerm]);\n            }\n            // Name word-start match, so when looking for 'Morley', entities named 'Momorley' appear at the end\n            $query->orderByRaw('entities.name RLIKE ? DESC', [\"[[:<:]]{$escapedTerm}\"]);\n            if ($this->campaign->boosted()) {\n                $query->orderByRaw('ea.name RLIKE ? DESC', [\"[[:<:]]{$escapedTerm}\"]);\n            }\n            // Partial name match\n            $query->orderByRaw('entities.name LIKE ? DESC', [\"%{$cleanTerm}%\"]);\n            if ($this->campaign->boosted()) {\n                $query->orderByRaw('ea.name LIKE ? DESC', [\"%{$cleanTerm}%\"]);\n            }\n        }\n        $with = ['image', 'entityType', 'aliases'];\n\n        $query\n            ->with($with)\n            ->limit($this->limit);\n\n        $this->data['entities'] = [];\n        /** @var Entity $entity */\n        foreach ($query->get() as $entity) {\n            $this->addEntity($entity);\n        }\n\n        return $this;\n    }\n\n    protected function addEntity(Entity $entity): void\n    {\n        // Force having a child for \"ghost\" entities.\n        if ($entity->entityType->isStandard() && ! $entity->child) {\n            return;\n        }\n\n        $this->data['entities'][] = $this->formatEntity($entity);\n    }\n\n    protected function formatEntity(Entity $entity): array\n    {\n        $mention = '[' . $entity->entityType->code . ':' . $entity->id . ']';\n        // @phpstan-ignore-next-line\n        if ($entity->alias_id) {\n            $mention = '[' . $entity->entityType->code . ':' . $entity->id . '|alias:' . $entity->alias_id . ']';\n        }\n\n        return [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'type' => $entity->entityType->name(),\n            'is_private' => $entity->is_private,\n            'image' => Avatar::entity($entity)->fallback()->size(32)->thumbnail(),\n            'url' => $entity->url(),\n            'preview' => route('entities.preview', [$this->campaign, $entity]),\n            'mention' => $mention,\n            'alias_name' => $entity->alias_name ?? null,\n            'alias_id' => $entity->alias_id ?? null,\n            'aliases' => $entity->aliases->map(fn ($alias) => [\n                'id' => $alias->id,\n                'name' => $alias->name,\n            ])->toArray(),\n        ];\n    }\n\n    protected function attributes(): self\n    {\n        if (! isset($this->entity)) {\n            return $this;\n        }\n\n        $query = $this->entity->entityAttributes();\n        if (Str::startsWith($this->term, '=')) {\n            $query->where('attributes.name', $this->strippedTerm);\n        } else {\n            $query->where('attributes.name', 'like', '%' . $this->term . '%');\n        }\n        $attributes = $query->limit($this->limit)->get();\n        if ($attributes->isEmpty()) {\n            return $this;\n        }\n\n        $this->data['attributes'] = [];\n        foreach ($attributes as $attribute) {\n            $this->addAttribute($attribute);\n        }\n\n        return $this;\n    }\n\n    protected function addAttribute(Attribute $attribute): void\n    {\n        $this->data['attributes'][] = [\n            'id' => $attribute->id,\n            'type' => 'post',\n            'name' => $attribute->name,\n            'value' => $attribute->value,\n            'inject' => \"{attribute:{$attribute->id}}\",\n        ];\n    }\n\n    protected function posts(): self\n    {\n        if (! isset($this->entity)) {\n            return $this;\n        }\n\n        $query = $this->entity->posts();\n        if (Str::startsWith($this->term, '=')) {\n            $query->where('posts.name', $this->strippedTerm);\n        } else {\n            $query->where('posts.name', 'like', '%' . $this->term . '%');\n        }\n        $posts = $query->limit($this->limit)->get();\n        if ($posts->isEmpty()) {\n            return $this;\n        }\n\n        $this->data['posts'] = [];\n        foreach ($posts as $post) {\n            $this->addPost($post);\n        }\n\n        return $this;\n    }\n\n    protected function addPost(Post $post): void\n    {\n        $this->data['posts'][] = [\n            'type' => 'post',\n            'id' => $post->id,\n            'name' => $post->name,\n            'inject' => \"[post:{$post->id}]\",\n        ];\n    }\n\n    protected function new(): self\n    {\n        $options = [];\n        if (! isset($this->user)) {\n            return $this;\n        }\n        $available = $this->newService\n            ->campaign($this->campaign)\n            ->user($this->user)\n            ->available();\n\n        // Re-order alphabetically and in groups of custom vs default\n\n        $available = $available->sortBy(fn (EntityType $a) => $a->isStandard() . '.' . $a->name());\n        $this->data['new'] = [];\n\n        foreach ($available as $entityType) {\n            $this->data['new'][] = [\n                'inject' => '[new:' . $entityType->code . '|' . $this->term . ']',\n                'type' => __('crud.titles.new', ['module' => $entityType->name()]),\n                'name' => $this->term,\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function data(): array\n    {\n        return $this->data;\n    }\n}\n"
  },
  {
    "path": "app/Services/Search/RecentService.php",
    "content": "<?php\n\nnamespace App\\Services\\Search;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Breadcrumb;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Entity;\nuse App\\Services\\Bookmarks\\RoutingService;\nuse App\\Services\\EntityTypeService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Collection;\n\n/**\n * Builds a list of recent entities for the search + the list of bookmarks and entity types\n */\nclass RecentService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function __construct(\n        protected EntityTypeService $entityTypeService,\n        protected RoutingService $routingService,\n    ) {}\n\n    public function recent(): array\n    {\n        $recentIds = $this->recentEntityIds();\n        if (empty($recentIds)) {\n            return [];\n        }\n\n        $orderedIds = implode(',', $recentIds);\n        $entities = Entity::whereIn('id', $recentIds)\n            ->with(['image', 'entityType'])\n            ->orderByRaw(\"FIELD(id, {$orderedIds})\")\n            ->get();\n        $recent = [];\n\n        /** @var Entity $entity */\n        foreach ($entities as $entity) {\n            $recent[] = $this->formatForLookup($entity);\n        }\n\n        return $recent;\n    }\n\n    /**\n     * Format an entity for the lookup/search/recent dropdown\n     * Todo: switch to a trait and share with SearchService\n     */\n    protected function formatForLookup(Entity $entity): array\n    {\n        return [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'is_private' => $entity->is_private,\n            'image' => Avatar::entity($entity)->fallback()->size(64)->thumbnail(),\n            'link' => $entity->url(),\n            'type' => $entity->entityType->name(),\n            'preview' => route('entities.preview', [$this->campaign, $entity]),\n        ];\n    }\n\n    public function logView(Entity $entity): void\n    {\n        $recents = $original = $this->recentEntityIds();\n        $recents = array_diff($recents, [$entity->id]);\n        $recents = [$entity->id, ...$recents];\n\n        // Limit the array to five\n        $recents = array_splice($recents, 0, 5);\n\n        if ($recents == $original) {\n            return;\n        }\n        $key = $this->recentEntityCacheKey();\n        cache()->put($key, $recents, 7 * 86400);\n    }\n\n    protected function recentEntityIds(): array\n    {\n        $key = $this->recentEntityCacheKey();\n        if (! cache()->has($key)) {\n            return [];\n        }\n\n        return (array) cache()->get($key);\n    }\n\n    protected function recentEntityCacheKey(): string\n    {\n        return 'recent_c' . $this->campaign->id . '_u' . $this->user->id;\n    }\n\n    public function bookmarks(): array\n    {\n        $bookmarks = [];\n        $links = Bookmark::active()->with(['entity', 'dashboard', 'target', 'entityType'])->ordered()->get();\n        /** @var Bookmark $link */\n        foreach ($links as $link) {\n            if (! $link->valid($this->campaign)) {\n                continue;\n            }\n            $bookmarks[] = $this->formatBookmark($link);\n        }\n\n        return $bookmarks;\n    }\n\n    /**\n     * Extract usable data from the bookmark\n     */\n    protected function formatBookmark(Bookmark $link): array\n    {\n        return [\n            'url' => $this->routingService->campaign($this->campaign)->bookmark($link)->url(),\n            'icon' => $link->iconClass(),\n            'text' => $link->name,\n        ];\n    }\n\n    public function indexes(): array\n    {\n        $types = $this->orderedTypes();\n        $indexes = [];\n        foreach ($types as $entityType) {\n            $indexes[] = [\n                'name' => $entityType->plural(),\n                'icon' => $entityType->icon(),\n                'url' => Breadcrumb::campaign($this->campaign)->entityType($entityType)->index(),\n            ];\n        }\n\n        return $indexes;\n    }\n\n    protected function orderedTypes(): Collection\n    {\n        return $this->entityTypeService\n            ->campaign($this->campaign)\n            ->exclude(config('entities.ids.bookmark'))\n            ->ordered();\n    }\n}\n"
  },
  {
    "path": "app/Services/Search/TemplateSearchService.php",
    "content": "<?php\n\nnamespace App\\Services\\Search;\n\nuse App\\Facades\\Avatar;\nuse App\\Models\\Entity;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityTypeAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\Search\\Orderable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Str;\n\nclass TemplateSearchService\n{\n    use CampaignAware;\n    use EntityTypeAware;\n    use Orderable;\n    use RequestAware;\n\n    protected Builder $query;\n\n    public function search(): array\n    {\n        $term = mb_trim($this->request->get('q') ?? '');\n        $excludes = $this->request->has('exclude') ? $this->request->get('exclude') : null;\n\n        $with = ['image', 'entityType'];\n        $this->query = Entity::inTypes($this->entityType->id);\n        if (! empty($excludes)) {\n            $this->query->whereNotIn('id', [$excludes]);\n        }\n        if ($this->entityType->isStandard()) {\n            $with[] = Str::camel($this->entityType->code);\n        }\n        $this->query->with($with);\n        $this->order($term);\n\n        // @phpstan-ignore-next-line\n        $entities = $this->query\n            ->template()\n            ->limit(10)\n            ->get();\n\n        $list = [];\n        /** @var Entity $entity */\n        foreach ($entities as $entity) {\n            if ($this->entityType->isStandard() && empty($entity->{$this->entityType->code})) {\n                continue;\n            }\n            $format = [\n                'id' => $entity->id,\n                'entity_id' => $entity->id,\n                'name' => $entity->name,\n                'text' => $entity->name,\n            ];\n            $format['image'] = Avatar::entity($entity)->fallback()->size(40)->thumbnail();\n            $format['url'] = $entity->url();\n\n            $list[] = $format;\n        }\n\n        return $list;\n    }\n}\n"
  },
  {
    "path": "app/Services/SearchService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\EntityAssetType;\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Mentions;\nuse App\\Models\\Calendar;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\MiscModel;\nuse App\\Services\\Entity\\NewService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\n\n/**\n * \"Old\" search that looks in misc models for data\n */\nclass SearchService\n{\n    use CampaignAware;\n    use UserAware;\n\n    /** The search term */\n    protected string $term;\n\n    /** Amount of results (sql limit) */\n    protected int $limit = 10;\n\n    /** List of excluded entity types */\n    protected array $excludedTypes = [];\n\n    /** List of excluded entity ids */\n    protected array $excludeIds = [];\n\n    /** List of the only entity types desired */\n    protected array $onlyTypes = [];\n\n    /** If true, adds more info for the nav header lookup */\n    protected bool $v2 = false;\n\n    /**\n     * Set to true for a full result (rather than id => name)\n     */\n    protected bool $full = false;\n\n    /**\n     * Thumb size\n     */\n    protected int $thumbSize = 64;\n\n    /**\n     * Set to true to return new entity options\n     */\n    protected bool $new = false;\n\n    /**\n     * Set to true to return posts\n     */\n    protected bool $posts = false;\n\n    protected Collection $pages;\n\n    public function __construct(\n        protected EntityTypeService $entityTypeService,\n        protected NewService $newService\n    ) {}\n\n    /**\n     * The search term as requested by the user\n     */\n    public function term(?string $term = null): self\n    {\n        $this->term = $term;\n\n        return $this;\n    }\n\n    /**\n     * Sets the service to return data in the \"v2\" format, used for the header lookup\n     */\n    public function v2(): self\n    {\n        $this->v2 = true;\n\n        return $this;\n    }\n\n    public function thumb(int $size): self\n    {\n        $this->thumbSize = $size;\n\n        return $this;\n    }\n\n    /**\n     * The search entity type as requested by the user\n     */\n    public function type(?int $type = null): self\n    {\n        if (! empty($type)) {\n            $this->onlyTypes = [$type];\n        }\n\n        return $this;\n    }\n\n    public function new(bool $new = false): self\n    {\n        $this->new = $new;\n\n        return $this;\n    }\n\n    public function posts(bool $posts = true): self\n    {\n        $this->posts = $posts;\n\n        return $this;\n    }\n\n    public function limit(int $limit = 10): self\n    {\n        $this->limit = $limit;\n\n        return $this;\n    }\n\n    public function exclude($types): self\n    {\n        $this->excludedTypes = is_array($types) ? $types : [$types];\n\n        return $this;\n    }\n\n    public function excludeIds($ids): self\n    {\n        if (empty($ids)) {\n            $this->excludeIds = [];\n\n            return $this;\n        }\n        if (! is_array($ids)) {\n            $ids = [$ids];\n        }\n        $this->excludeIds = $ids;\n\n        return $this;\n    }\n\n    public function only(null|array|string $types = null): self\n    {\n        if (empty($types)) {\n            $this->onlyTypes = [];\n\n            return $this;\n        }\n        $this->onlyTypes = is_array($types) ? $types : [$types];\n\n        return $this;\n    }\n\n    /**\n     * Set the result as full (live search, mentions)\n     */\n    public function full(): self\n    {\n        $this->full = true;\n\n        return $this;\n    }\n\n    /**\n     * List of entities matching the request\n     */\n    public function find()\n    {\n        // Figure out what kind of entities we want.\n        $availableEntityTypes = $this->entityTypeService\n            ->campaign($this->campaign)\n            ->available()\n            ->pluck('id')\n            ->toArray();\n\n        // If a list of types are provided, use those\n        if (! empty($this->onlyTypes)) {\n            $availableEntityTypes = $this->onlyTypes;\n        }\n        // If a list of excluded types are provided, remove them from the results\n        if (! empty($this->excludedTypes)) {\n            $availableEntityTypes = array_diff($availableEntityTypes, $this->excludedTypes);\n        }\n\n        $cleanTerm = mb_ltrim(str_replace('_', ' ', $this->term), '=');\n        $query = Entity::inTypes($availableEntityTypes)->whereNull('archived_at');\n        if (empty($this->term)) {\n            $query->orderBy('updated_at', 'DESC');\n        } else {\n            if ($this->campaign->boosted()) {\n                $query\n                    ->select(['entities.*', 'ea.id as alias_id', 'ea.name as alias_name'])\n                    ->distinct()\n                    ->leftJoin('entity_assets as ea', function ($join) use ($cleanTerm) {\n                        $join->on('ea.entity_id', '=', 'entities.id');\n                        if (Str::startsWith($this->term, '=')) {\n                            $join->where('ea.name', $cleanTerm);\n                        } else {\n                            $join->where('ea.name', 'like', '%' . $this->term . '%');\n                        }\n                        $join->where('ea.type_id', EntityAssetType::alias);\n                    })\n                    ->where(function ($sub) use ($cleanTerm) {\n                        if (Str::startsWith($this->term, '=')) {\n                            $sub->where('entities.name', $cleanTerm)\n                                ->orWhere('ea.name', $cleanTerm);\n                        } else {\n                            $sub->where('entities.name', 'like', '%' . $this->term . '%')\n                                ->orWhere('ea.name', 'like', '%' . $this->term . '%');\n                        }\n                    });\n            } else {\n                if (Str::startsWith($this->term, '=')) {\n                    $query->where('name', mb_ltrim($this->term, '='));\n                } else {\n                    $query->where('name', 'like', '%' . $this->term . '%');\n                }\n            }\n\n            // Exact name match comes first\n            // Only do this when the input string is utf8\n            $cleanTerm = preg_replace(\"/[^a-zA-Z0-9_\\-\\.\\s]/\", '', $cleanTerm);\n            if (mb_strlen($cleanTerm, 'UTF-8') === mb_strlen($cleanTerm)) {\n                $escapedTerm = preg_replace('/&/', '\\\\&', preg_quote($cleanTerm));\n                $query->orderByRaw('FIELD(entities.name, ?) DESC', [$cleanTerm]);\n                if ($this->campaign->boosted()) {\n                    $query->orderByRaw('FIELD(ea.name, ?) DESC', [$cleanTerm]);\n                }\n                // Name word-start match, so when looking for 'Morley', entities named 'Momorley' appear at the end\n                $query->orderByRaw('entities.name RLIKE ? DESC', [\"[[:<:]]{$escapedTerm}\"]);\n                if ($this->campaign->boosted()) {\n                    $query->orderByRaw('ea.name RLIKE ? DESC', [\"[[:<:]]{$escapedTerm}\"]);\n                }\n                // Partial name match\n                $query->orderByRaw('entities.name LIKE ? DESC', [\"%{$cleanTerm}%\"]);\n                if ($this->campaign->boosted()) {\n                    $query->orderByRaw('ea.name LIKE ? DESC', [\"%{$cleanTerm}%\"]);\n                }\n            }\n        }\n\n        if (! empty($this->excludeIds)) {\n            $query->whereNotIn('entities.id', $this->excludeIds);\n        }\n\n        $with = ['image', 'entityType'];\n        if ($this->posts) {\n            $with[] = 'posts';\n        }\n        $query\n            ->with($with)\n            ->limit($this->limit);\n\n        $searchResults = $foundEntityIds = [];\n        /** @var Entity $model */\n        foreach ($query->get() as $model) {\n            /** @var ?MiscModel $child */\n            // Force having a child for \"ghost\" entities.\n            if ($model->entityType->isStandard()) {\n                $child = $model->child;\n                if ($child === null || in_array($model->id, $foundEntityIds)) {\n                    continue;\n                }\n            }\n\n            if ($this->v2) {\n                $searchResults[] = $this->formatForLookup($model);\n\n                continue;\n            }\n            $img = '';\n            if ($model->hasImage()) {\n                $img = '<span class=\"entity-image cover-background w-8 h-8\" style=\"background-image: url(\\''\n                    . Avatar::entity($model)->size(192)->thumbnail() . '\\');\"></span> ';\n            }\n\n            $parsedName = str_replace(['&#039;', '&amp;'], ['\\'', '&'], $model->name);\n            $parsedNameAlias = $parsedName;\n\n            // @phpstan-ignore-next-line\n            if ($model->alias_name) {\n                $parsedNameAlias = $parsedName . ' - ' . str_replace(['&#039;', '&amp;'], ['\\'', '&'], e($model->alias_name));\n            }\n\n            if (! $this->full) {\n                $searchResults[] = [\n                    'id' => $model->id,\n                    'text' => $parsedName . ' (' . $model->entityType->name() . ')',\n                ];\n\n                continue;\n            }\n\n            $searchResults[] = [\n                'id' => $model->id,\n                'fullname' => $parsedNameAlias,\n                'image' => $img,\n                'name' => $parsedName,\n                'type' => $model->entityType->name(),\n                'model_type' => $model->entityType->code,\n                'url' => $model->url(),\n                'alias_id' => $model->alias_id, // @phpstan-ignore-line\n                'advanced_mention' => Mentions::advancedMentionHelper($model->name),\n                'advanced_mention_alias' => $model->alias_name ? Mentions::advancedMentionHelper($model->alias_name) : null,\n            ];\n            $foundEntityIds[] = $model->id;\n\n            // If the result is a map, also add its explore page as a result.\n            // @phpstan-ignore-next-line\n            if (! $this->posts && ! $this->new && $model->isMap() && $model->child->explorable()) {\n                $searchResults[] = [\n                    'id' => $model->id,\n                    'fullname' => $parsedName,\n                    'image' => $img,\n                    'name' => $parsedName,\n                    'type' => __('maps.actions.explore'),\n                    'model_type' => $model->entityType->code,\n                    'url' => $model->child->getLink('explore'),\n                    'alias_id' => $model->alias_id, // @phpstan-ignore-line\n                    'advanced_mention' => Mentions::advancedMentionHelper($model->name),\n                    'advanced_mention_alias' => $model->alias_name ? Mentions::advancedMentionHelper($model->alias_name) : null,\n                ];\n            }\n\n            if (! $this->posts) {\n                continue;\n            }\n            foreach ($model->posts as $post) {\n                $postName = str_replace(['&#039;', '&amp;'], ['\\'', '&'], $post->name);\n                $searchResults[] = [\n                    'id' => $post->id,\n                    'fullname' => $postName,\n                    'image' => null,\n                    'name' => $postName,\n                    'type' => '',\n                    'model_type' => 'post',\n                    'url' => route('entities.show', [$this->campaign, $model, '#post-' . $post->id]),\n                    'alias_id' => null,\n                    'advanced_mention' => Mentions::advancedMentionHelper($post->name),\n                    'advanced_mention_alias' => null,\n                ];\n            }\n        }\n        if (! $this->new) {\n            if ($this->v2) {\n                return [\n                    'entities' => $searchResults,\n                    'pages' => $this->pages(),\n                ];\n            }\n\n            return $searchResults;\n        } elseif (empty($searchResults)) {\n            return $this->newOptions();\n        }\n\n        $lowerCleanTerm = mb_strtolower($cleanTerm);\n        foreach ($searchResults as $result) {\n            if (mb_strtolower($result['name']) == $lowerCleanTerm) {\n                return $searchResults;\n            }\n        }\n\n        // @phpstan-ignore-next-line\n        return array_merge(array_values($searchResults), array_values($this->newOptions()));\n    }\n\n    /**\n     * List of months in the calendars\n     */\n    public function monthList(): array\n    {\n        $searchResults = [];\n\n        // Load up the calendars of a campaign to get the month names\n        // Todo: this can load any calendar regardless of permission\n        $calendars = Calendar::get();\n        foreach ($calendars as $calendar) {\n            $months = $calendar->months();\n\n            foreach ($months as $month) {\n                if ((! empty($this->term) && str_contains($month['name'], $this->term)) || empty($this->term)) {\n                    $searchResults[] = [\n                        'fullname' => $month['name'],\n                        'name' => $month['name'] . ' (' . $calendar->name . ')',\n                    ];\n                }\n            }\n        }\n\n        return $searchResults;\n    }\n\n    /**\n     * List of elements that can be created on the fly\n     */\n    protected function newOptions(): array\n    {\n        $options = [];\n        if (! isset($this->user)) {\n            return $options;\n        }\n        $term = str_replace('_', ' ', $this->term);\n        $available = $this->newService->campaign($this->campaign)->user($this->user)->available();\n\n        // Re-order alphabetically and in groups of custom vs default\n\n        $available = $available->sortBy(fn (EntityType $a) => $a->isStandard() . '.' . $a->name());\n\n        foreach ($available as $entityType) {\n            $options[] = [\n                'new' => true,\n                'inject' => '[new:' . $entityType->code . '|' . $term . ']',\n                'fullname' => $term,\n                'type' => __('crud.titles.new', ['module' => $entityType->name()]),\n                'text' => $term,\n                'name' => $term,\n            ];\n        }\n\n        return $options;\n    }\n\n    /**\n     * Format an entity for the lookup/search/recent dropdown\n     * Todo: switch to a trait and share with SearchService\n     */\n    protected function formatForLookup(Entity $entity): array\n    {\n        $mention = '[' . $entity->entityType->code . ':' . $entity->id . ']';\n        // @phpstan-ignore-next-line\n        if ($entity->alias_id) {\n            $mention = '[' . $entity->entityType->code . ':' . $entity->id . '|alias:' . $entity->alias_id . ']';\n        }\n\n        return [\n            'id' => $entity->id,\n            'name' => $entity->name,\n            'is_private' => $entity->is_private,\n            'image' => Avatar::entity($entity)->fallback()->size($this->thumbSize)->thumbnail(),\n            'link' => $entity->url(),\n            'type' => $entity->entityType->name(),\n            'preview' => route('entities.preview', [$this->campaign, $entity]),\n            'mention' => $mention,\n            'aliases' => $entity->aliases->map(fn ($alias) => [\n                'id' => $alias->id,\n                'name' => $alias->name,\n            ])->toArray(),\n        ];\n    }\n\n    protected function pages(): Collection\n    {\n        $this->pages = new Collection;\n        if (empty($this->term)) {\n            return $this->pages;\n        }\n        // Fill data with hardcoded pages and roles\n        $this\n            ->addCampaignPage('crud.tabs.overview', 'overview')\n            ->addCampaignPage('campaigns.show.tabs.achievements', 'campaign.achievements')\n            ->addCampaignPage('campaigns.show.tabs.stats', 'campaign.stats');\n\n        if (isset($this->user)) {\n            $this\n                ->addCampaignPage('campaigns.show.tabs.members', 'campaign_users.index', 'members')\n                ->addCampaignPage('campaigns.show.tabs.defaults', 'campaign-defaults', 'update')\n                ->addCampaignPage('campaigns.show.tabs.roles', 'campaign_roles.index', 'roles')\n                ->addCampaignPage('campaigns/applications.title', 'applications.index', 'applications')\n                ->addCampaignPage('campaigns.show.tabs.modules', 'campaign.modules')\n                ->addCampaignPage('campaigns/categories.tab', 'campaign.modules')\n                ->addCampaignPage('campaigns.show.tabs.recovery', 'recovery', 'update')\n                ->addCampaignPage('campaigns.show.tabs.styles', 'campaign_styles.index', 'update')\n                ->addCampaignPage('campaigns.show.tabs.export', 'campaign.export')\n                ->addCampaignPage('campaigns.show.tabs.import', 'campaign.import')\n                ->addCampaignPage('campaigns.show.tabs.webhooks', 'webhooks.index', 'webhooks');\n        }\n        if (config('marketplace.enabled')) {\n            $this->addCampaignPage('campaigns.show.tabs.plugins', 'campaign_plugins.index');\n        }\n\n        $this->pages\n            ->add(['name' => __('footer.plugins'), 'url' => config('marketplace.url')])\n            ->add(['name' => __('footer.documentation'), 'url' => 'https://docs.kanka.io/en/latest/index.html'])\n            ->add(['name' => __('front.features.api.link'), 'url' => route('larecipe.index')]);\n\n        if (isset($this->user)) {\n            $this->pages\n                ->add(['name' => __('settings.menu.premium'), 'url' => route('settings.premium')])\n                ->add(['name' => __('Dark mode'), 'url' => route('settings.appearance', ['highlight' => 'dark'])])\n                ->add(['name' => __('billing/menu.payment-method'), 'url' => route('billing.payment-method')])\n                ->add(['name' => __('billing/menu.history'), 'url' => route('billing.history')]);\n        }\n        $this->addCampaignRoles();\n\n        return $this->pages->filter(function ($page) {\n            return Str::contains(mb_strtolower($page['name']), mb_strtolower($this->term));\n        });\n    }\n\n    protected function addCampaignPage(string $name, string $route, ?string $perm = null): self\n    {\n        if (! empty($perm) && (! isset($this->user) || ! $this->user->can($perm, $this->campaign))) {\n            return $this;\n        }\n        $this->pages->add(['name' => __($name), 'url' => route($route, [$this->campaign])]);\n\n        return $this;\n    }\n\n    protected function addCampaignRoles(): self\n    {\n        if (! isset($this->user) || ! $this->user->can('roles', $this->campaign)) {\n            return $this;\n        }\n\n        foreach ($this->campaign->roles as $role) {\n            $this->pages->add(['name' => $role->name . ' (' . __('campaigns.invites.fields.role') . ')', 'url' => route($role->url('show'), [$this->campaign, $role])]);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Spotlights/ApplyService.php",
    "content": "<?php\n\nnamespace App\\Services\\Spotlights;\n\nuse App\\Enums\\SpotlightContentStatus;\nuse App\\Events\\SpotlightSubmitted;\nuse App\\Models\\SpotlightContent;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass ApplyService\n{\n    use CampaignAware;\n    use RequestAware;\n    use UserAware;\n\n    protected ?SpotlightContent $content;\n\n    public function content(): ?SpotlightContent\n    {\n        return SpotlightContent::where('campaign_id', $this->campaign->id)\n            ->where('status', '<>', SpotlightContentStatus::rejected)\n            ->first();\n    }\n\n    public function save()\n    {\n        $this->content = $this->content();\n        if (isset($this->content) && ! $this->content->isDraft()) {\n            return;\n        }\n        $this->fill();\n        $this->content->save();\n    }\n\n    public function apply()\n    {\n        $this->content = $this->content();\n        $this->fill();\n        $this->content->status = SpotlightContentStatus::applied;\n        $this->content->save();\n\n        SpotlightSubmitted::dispatch($this->content);\n    }\n\n    public function retract()\n    {\n        $this->content = $this->content();\n        if (empty($this->content)) {\n            return;\n        }\n        if ($this->content->status !== SpotlightContentStatus::applied) {\n            return;\n        }\n        $this->content->status = SpotlightContentStatus::draft;\n        $this->content->save();\n    }\n\n    public function fill()\n    {\n        if (empty($this->content)) {\n            $this->content = new SpotlightContent;\n            $this->content->campaign_id = $this->campaign->id;\n            $this->content->status = SpotlightContentStatus::draft;\n        }\n\n        $fields = $this->request->only([\n            'time',\n            'world',\n            'proud',\n            'inspiration',\n            'stories',\n            'kanka',\n            'share',\n        ]);\n        foreach ($fields as $key => $value) {\n            $fields[$key] = Purify::clean($value);\n        }\n        $this->content->content_json = $fields;\n    }\n}\n"
  },
  {
    "path": "app/Services/StarterService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\AttributeType;\nuse App\\Enums\\Widget;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\CharacterCache;\nuse App\\Facades\\EntityCache;\nuse App\\Facades\\EntityPermission;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Attribute;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\CampaignEvent;\nuse App\\Models\\Character;\nuse App\\Models\\CharacterTrait;\nuse App\\Models\\Location;\nuse App\\Models\\Post;\nuse App\\Models\\Relation;\nuse App\\Services\\Campaign\\CreateService;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass StarterService\n{\n    use CampaignAware;\n    use UserAware;\n\n    public function __construct(protected CreateService $createService) {}\n\n    /**\n     * Create a new campaign for the user when they register their account\n     */\n    public function create(): Campaign\n    {\n        $name = __('starter.campaign.name', ['user' => $this->user->name]);\n        $request = [\n            'name' => $name,\n            'entry' => '',\n            'excerpt' => '',\n            'settings' => ['default-name' => $name],\n        ];\n\n        $this->campaign = $this->createService\n            ->user($this->user)\n            ->data($request)\n            ->create();\n\n        EntityPermission::campaign($this->campaign);\n        CampaignCache::campaign($this->campaign);\n        UserCache::campaign($this->campaign);\n\n        $this->entities();\n        $this->dashboard();\n\n        CampaignEvent::create([\n            'campaign_id' => $this->campaign->id,\n            'created_by' => $this->user->id,\n            'event' => 'campaign_created',\n        ]);\n        session()->put('onboarding', 1);\n\n        return $this->campaign;\n    }\n\n    public function bind(): self\n    {\n        return $this;\n    }\n\n    public function entities()\n    {\n        CampaignLocalization::forceCampaign($this->campaign);\n        request()->route()->setParameter('campaign', $this->campaign);\n        EntityCache::campaign($this->campaign);\n        CharacterCache::campaign($this->campaign);\n\n        // Generate locations\n        $kingdom = new Location([\n            'name' => __('starter.kingdom.name'),\n            'campaign_id' => $this->campaign->id,\n            'is_private' => false,\n        ]);\n        $kingdom->save();\n        $kingdom->entity->update([\n            'type' => __('starter.kingdom.type'),\n            'entry' => '<p>' . __('starter.kingdom.description') . '</p>',\n            'source' => 'onboarding',\n        ]);\n        Post::create([\n            'entity_id' => $kingdom->entity->id,\n            'name' => __('starter.kingdom.recent.title'),\n            'entry' => '<ol>' .\n                '<li>' . __('starter.kingdom.recent.first') . '</li>' .\n                '<li>' . __('starter.kingdom.recent.second') . '</li>' .\n                '</ol>',\n        ]);\n        Attribute::create([\n            'entity_id' => $kingdom->entity->id,\n            'name' => __('starter.kingdom.features.pop.name'),\n            'value' => __('starter.kingdom.features.pop.value'),\n            'is_pinned' => true,\n            'type_id' => AttributeType::Standard,\n        ]);\n        Attribute::create([\n            'entity_id' => $kingdom->entity->id,\n            'name' => __('starter.kingdom.features.exp.name'),\n            'value' => __('starter.kingdom.features.exp.value'),\n            'is_pinned' => true,\n            'type_id' => AttributeType::Standard,\n        ]);\n        Attribute::create([\n            'entity_id' => $kingdom->entity->id,\n            'name' => __('starter.kingdom.features.gov.name'),\n            'value' => __('starter.kingdom.features.gov.value'),\n            'is_pinned' => true,\n            'type_id' => AttributeType::Standard,\n        ]);\n\n        $city = new Location([\n            'name' => __('starter.city.name'),\n            'location_id' => $kingdom->id,\n            'campaign_id' => $this->campaign->id,\n            'is_private' => false,\n        ]);\n        $city->save();\n        $city->entity->update([\n            'source' => 'onboarding',\n            'type' => __('starter.city.type'),\n            'entry' => '<p>' . __('starter.city.description') . '</p>',\n        ]);\n\n        Post::create([\n            'entity_id' => $city->entity->id,\n            'name' => __('starter.city.districts.title'),\n            'entry' => '<ol>' .\n                '<li>' . __('starter.city.districts.first') . '</li>' .\n                '<li>' . __('starter.city.districts.second') . '</li>' .\n                '<li>' . __('starter.city.districts.third') . '</li>' .\n                '<li>' . __('starter.city.districts.fourth') . '</li>' .\n                '</ol>',\n        ]);\n        Post::create([\n            'entity_id' => $city->entity->id,\n            'name' => __('starter.city.locations.title'),\n            'entry' => '<ol>' .\n                '<li>' . __('starter.city.locations.first') . '</li>' .\n                '<li>' . __('starter.city.locations.second') . '</li>' .\n                '<li>' . __('starter.city.locations.third') . '</li>' .\n                '</ol>',\n        ]);\n\n        Attribute::create([\n            'entity_id' => $kingdom->entity->id,\n            'name' => __('starter.kingdom.features.capital.name'),\n            'value' => '[entity:' . $city->entity->id . ']',\n            'is_pinned' => true,\n            'type_id' => AttributeType::Standard,\n        ]);\n\n        // Generate characters\n        $james = new Character([\n            'name' => __('starter.character1.name'),\n            'age' => __('starter.character1.age'),\n            'campaign_id' => $this->campaign->id,\n            'is_private' => false,\n            'is_appearance_pinned' => true,\n            'is_personality_pinned' => true,\n        ]);\n        $james->save();\n        $james->entity->locations()->sync([$city->id]);\n        CharacterTrait::create([\n            'character_id' => $james->id,\n            'name' => __('starter.character1.physical.build.name'),\n            'entry' => __('starter.character1.physical.build.value'),\n            'section_id' => CharacterTrait::SECTION_APPEARANCE,\n        ]);\n        CharacterTrait::create([\n            'character_id' => $james->id,\n            'name' => __('starter.character1.physical.features.name'),\n            'entry' => __('starter.character1.physical.features.value'),\n            'section_id' => CharacterTrait::SECTION_APPEARANCE,\n        ]);\n        CharacterTrait::create([\n            'character_id' => $james->id,\n            'name' => __('starter.character1.personality.trait1.name'),\n            'entry' => __('starter.character1.personality.trait1.value'),\n            'section_id' => CharacterTrait::SECTION_PERSONALITY,\n        ]);\n        CharacterTrait::create([\n            'character_id' => $james->id,\n            'name' => __('starter.character1.personality.trait2.name'),\n            'entry' => __('starter.character1.personality.trait2.value'),\n            'section_id' => CharacterTrait::SECTION_PERSONALITY,\n        ]);\n        CharacterTrait::create([\n            'character_id' => $james->id,\n            'name' => __('starter.character1.personality.trait2.name'),\n            'entry' => __('starter.character1.personality.trait2.value'),\n            'section_id' => CharacterTrait::SECTION_PERSONALITY,\n        ]);\n        $james->entity->update([\n            'source' => 'onboarding',\n            'entry' => '<p>' . __('starter.character1.description.template') . '</p>' .\n                '<p>' . __('starter.character1.description.intro') . '</p>' .\n                '<p>' . __('starter.character1.description.tip') . '</p>',\n        ]);\n\n        Post::create([\n            'entity_id' => $james->entity->id,\n            'name' => __('starter.character1.background.title'),\n            'entry' => '<ol>' .\n                '<li>' . __('starter.character1.background.loc') . '</li>' .\n                '<li>' . __('starter.character1.background.cur') . '</li>' .\n                '<li>' . __('starter.character1.background.seeking') . '</li>' .\n            '</ol>',\n        ]);\n\n        $irwie = new Character([\n            'name' => __('starter.character2.name'),\n            'age' => __('starter.character1.age'),\n            'campaign_id' => $this->campaign->id,\n            'is_private' => false,\n            'is_appearance_pinned' => true,\n            'is_personality_pinned' => true,\n        ]);\n        $irwie->save();\n        $irwie->entity->locations()->sync([$city->id]);\n        $irwie->entity->update([\n            'source' => 'onboarding',\n            'entry' => '<p>' . __('starter.character2.description.first', ['mention' => '[entity:' . $james->entity->id . ']']) . '</p>' .\n            '<p>' . __('starter.character2.description.second') . '</p>',\n        ]);\n\n        CharacterTrait::create([\n            'character_id' => $irwie->id,\n            'name' => __('starter.character1.physical.build.name'),\n            'entry' => __('starter.character1.physical.build.value'),\n            'section_id' => CharacterTrait::SECTION_APPEARANCE,\n        ]);\n        CharacterTrait::create([\n            'character_id' => $irwie->id,\n            'name' => __('starter.character1.physical.features.name'),\n            'entry' => __('starter.character1.physical.features.value'),\n            'section_id' => CharacterTrait::SECTION_APPEARANCE,\n        ]);\n        CharacterTrait::create([\n            'character_id' => $irwie->id,\n            'name' => __('starter.character1.personality.trait1.name'),\n            'entry' => __('starter.character1.personality.trait1.value'),\n            'section_id' => CharacterTrait::SECTION_PERSONALITY,\n        ]);\n        CharacterTrait::create([\n            'character_id' => $irwie->id,\n            'name' => __('starter.character1.personality.trait2.name'),\n            'entry' => __('starter.character1.personality.trait2.value'),\n            'section_id' => CharacterTrait::SECTION_PERSONALITY,\n        ]);\n        CharacterTrait::create([\n            'character_id' => $irwie->id,\n            'name' => __('starter.character1.personality.trait2.name'),\n            'entry' => __('starter.character1.personality.trait2.value'),\n            'section_id' => CharacterTrait::SECTION_PERSONALITY,\n        ]);\n\n        Post::create([\n            'entity_id' => $irwie->entity->id,\n            'name' => __('starter.character2.skills.title'),\n            'entry' => '<ol>' .\n                '<li>' . __('starter.character2.skills.first') . '</li>' .\n                '<li>' . __('starter.character2.skills.second') . '</li>' .\n                '<li>' . __('starter.character2.skills.third') . '</li>' .\n                '</ol>',\n        ]);\n\n        Relation::create([\n            'owner_id' => $irwie->entity->id,\n            'target_id' => $james->entity->id,\n            'relation' => __('starter.character2.relation'),\n            'campaign_id' => $this->campaign->id,\n        ]);\n    }\n\n    /**\n     * Setup the new campaign's dashboard\n     */\n    protected function dashboard()\n    {\n        $position = 0;\n\n        // Recent widget\n        $widget = new CampaignDashboardWidget([\n            'campaign_id' => $this->campaign->id,\n            'widget' => Widget::Recent,\n            'width' => 4,\n            'position' => $position++,\n        ]);\n        $widget->save();\n\n        $widget = new CampaignDashboardWidget([\n            'campaign_id' => $this->campaign->id,\n            'widget' => Widget::Onboarding,\n            'width' => 4,\n            'position' => $position++,\n        ]);\n        $widget->save();\n\n        $widget = new CampaignDashboardWidget([\n            'campaign_id' => $this->campaign->id,\n            'widget' => Widget::Help,\n            'width' => 4,\n            'position' => $position++,\n        ]);\n        $widget->save();\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/AbilitySubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Ability;\n\nclass AbilitySubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        /** @var Ability $ability */\n        $ability = $this->entity->child;\n        $items['second']['entities'] = [\n            'name' => __('entities.entries'),\n            'route' => 'abilities.entities',\n            'count' => $ability->entityAbilities()->count(),\n        ];\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/BaseSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\n\nclass BaseSubmenu\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected array $items;\n\n    public function items(array $items): self\n    {\n        $this->items = $items;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/CalendarSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Calendar;\n\nclass CalendarSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        /** @var Calendar $calendar */\n        $calendar = $this->entity->child;\n        // @phpstan-ignore-next-line\n        $count = $calendar->calendarEvents()->whereHas('remindable')->count();\n        $items = [];\n        if ($count > 0) {\n            $items['second']['events'] = [\n                'name' => __('crud.tabs.reminders'),\n                'route' => 'calendars.events',\n                'count' => $count,\n            ];\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/CharacterSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Facades\\Module;\n\nclass CharacterSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        $canEdit = isset($this->user) && $this->user->can('update', $this->entity);\n\n        $items['second']['profile'] = [\n            'name' => __('entities/profile.show.tab_name'),\n            'route' => 'entities.profile',\n            'entity' => true,\n\n            'button' => $canEdit ? [\n                'url' => $this->entity->url('edit'),\n                'icon' => 'fa-regular fa-pencil',\n                'tooltip' => __('entities/profile.actions.edit_profile'),\n            ] : null,\n        ];\n\n        // @phpstan-ignore-next-line\n        $count = $this->entity->child->organisationMemberships()->has('organisation')->has('organisation.entity')->count();\n        if ($this->campaign->enabled('organisations') && ($count > 0 || $canEdit)) {\n            $items['second']['organisations'] = [\n                'name' => Module::plural(config('entities.ids.organisation'), 'entities.organisations'),\n                'route' => 'characters.organisations',\n                'count' => $count,\n            ];\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/CreatureSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nclass CreatureSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/CustomSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nclass CustomSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/EntitySubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\ninterface EntitySubmenu\n{\n    public function extra(): array;\n}\n"
  },
  {
    "path": "app/Services/Submenus/EventSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nclass EventSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/FamilySubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Family;\n\nclass FamilySubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        /** @var Family $family */\n        $family = $this->entity->child;\n\n        if (config('services.stripe.enabled') && config('limits.campaigns.premium')) {\n            $items['second']['tree'] = [\n                'name' => __('families.show.tabs.tree'),\n                'route' => 'families.family-tree',\n            ];\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/ItemSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Item;\n\nclass ItemSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        /** @var Item $item */\n        $item = $this->entity->child;\n\n        $inventoryCount = $item->inventories()->with('item')->has('entity')->count();\n        if ($inventoryCount > 0) {\n            $items['second']['inventories'] = [\n                'name' => __('items.show.tabs.inventories'),\n                'route' => 'items.inventories',\n                'count' => $inventoryCount,\n            ];\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/JournalSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nclass JournalSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/LocationSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Facades\\Module;\nuse App\\Models\\Location;\n\nclass LocationSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        /** @var Location $location */\n        $location = $this->entity->child;\n\n        $count = $location->setRelation('entity', $this->entity)->allCharacters()->count();\n        if ($this->campaign->enabled('characters') && $count > 0) {\n            $items['second']['characters'] = [\n                'name' => Module::plural(config('entities.ids.character'), 'entities.characters'),\n                'route' => 'locations.characters',\n                'count' => $count,\n            ];\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/MapSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Map;\n\nclass MapSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        /** @var Map $map */\n        $map = $this->entity->child;\n        if (isset($this->user) && $this->user->can('update', $this->entity)) {\n            $items['second']['layers'] = [\n                'name' => __('maps.panels.layers'),\n                'route' => 'maps.map_layers.index',\n                'count' => $map->layers->count(),\n            ];\n            $items['second']['groups'] = [\n                'name' => __('maps.panels.groups'),\n                'route' => 'maps.map_groups.index',\n                'count' => $map->groups->count(),\n            ];\n            $items['second']['markers'] = [\n                'name' => __('maps.panels.markers'),\n                'route' => 'maps.map_markers.index',\n                'count' => $map->markers->count(),\n            ];\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/NoteSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nclass NoteSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/OrganisationSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Organisation;\n\nclass OrganisationSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        /** @var Organisation $model */\n        $model = $this->entity->child;\n\n        $count = $model->allMembersCount();\n        if ($this->campaign->enabled('characters') && $count > 0) {\n            $items['second']['members'] = [\n                'name' => __('organisations.fields.members'),\n                'route' => 'organisations.members',\n                'count' => $count,\n            ];\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/QuestSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Quest;\n\nclass QuestSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        /** @var Quest $model */\n        $model = $this->entity->child;\n        $count = $model->elements()->with('entity')->has('entity')->count();\n        $items['second']['elements'] = [\n            'name' => __('quests.show.tabs.elements'),\n            'route' => 'quests.quest_elements.index',\n            'count' => $count,\n        ];\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/RaceSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nclass RaceSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/SubmenuService.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Facades\\Module;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\n\nclass SubmenuService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    protected array $items = [];\n\n    protected array $ordered;\n\n    public function items(): array\n    {\n        return $this->default()\n            ->custom()\n            ->ordered();\n    }\n\n    protected function default(): self\n    {\n        $this->items['first']['story'] = [\n            'name' => __('crud.tabs.overview'),\n            'route' => 'entities.show',\n            'entity' => true,\n            'button' => isset($this->user) && $this->user->can('update', $this->entity) ? [\n                'url' => route('entities.story.reorder', [$this->campaign, $this->entity]),\n                'icon' => 'fa-regular fa-arrow-up-arrow-down',\n                'tooltip' => __('entities/story.reorder.icon_tooltip'),\n            ] : null,\n        ];\n\n        $childCount = $this->entity->children()->count();\n        if ($childCount > 0) {\n            $this->items['second']['children'] = [\n                'name' => __('entities/children.title'),\n                'route' => 'entities.children',\n                'count' => $childCount,\n                'entity' => true,\n            ];\n        }\n\n        // Each entity can have relations\n        $this->items['first']['relations'] = [\n            'name' => __('entries/tabs.relations'),\n            'route' => 'entities.relations.index',\n            'count' => $this->entity->relationships()->has('target')->count(),\n            'entity' => true,\n            'icon' => 'fa-regular fa-users',\n        ];\n\n        // Each entity can have abilities\n        if ($this->campaign->enabled('abilities') && ! $this->entity->isAbility()) {\n            $this->items['third']['abilities'] = [\n                'name' => Module::plural(config('entities.ids.ability'), 'crud.tabs.abilities'),\n                'route' => 'entities.entity_abilities.index',\n                'count' => 0, // $this->entity->abilities()->has('ability')->count(),\n                'entity' => true,\n                'icon' => 'ra ra-fire-symbol',\n            ];\n        }\n\n        if ($this->campaign->enabled('calendars')) {\n            $this->items['third']['reminders'] = [\n                'name' => __('crud.tabs.reminders'),\n                'route' => 'entities.reminders.index',\n                'count' => 0, // $this->entity->abilities()->has('ability')->count(),\n                'entity' => true,\n                'icon' => 'ra ra-sun-moon',\n            ];\n        }\n\n        if ($this->campaign->enabled('entity_attributes')) {\n            $this->items['third']['attributes'] = [\n                'name' => __('entries/tabs.properties'),\n                'route' => 'entities.attributes',\n                'entity' => true,\n                'icon' => '',\n                'perm' => 'view-attributes',\n            ];\n        }\n\n        // Each entity can have an inventory\n        if ($this->campaign->enabled('inventories')) {\n            $this->items['third']['inventory'] = [\n                'name' => __('crud.tabs.inventory'),\n                'route' => 'entities.inventory',\n                'count' => 0, // $this->entity->inventories()->has('item')->count(),\n                'entity' => true,\n                'icon' => 'ra ra-round-bottom-flask',\n            ];\n        }\n\n        // Each entity can have assets\n        if ($this->campaign->enabled('media') && $this->entity->hasFiles()) {\n            $this->items['third']['assets'] = [\n                'name' => __('entries/tabs.media'),\n                'route' => 'entities.entity_assets.index',\n                'count' => $this->entity->assets()->withoutAliases()->count(),\n                'entity' => true,\n                'icon' => 'fa-regular fa-file',\n            ];\n        }\n\n        // Check if and how many times entity has been mentioned\n        $mentionsCount = $this->entity->mentionsCount();\n        if (isset($this->user) && $mentionsCount > 0) {\n            $this->items['fourth']['mentions'] = [\n                'name' => __('crud.tabs.mentions'),\n                'route' => 'entities.mentions',\n                'entity' => true,\n                'count' => $mentionsCount,\n            ];\n        }\n\n        // Permissions for the admin?\n        if (isset($this->user) && $this->user->can('permissions', $this->entity)) {\n            $this->items['fourth']['permissions'] = [\n                'name' => __('crud.tabs.permissions'),\n                'route' => 'entities.permissions',\n                'entity' => true,\n                'ajax' => true,\n                'id' => 'entity-permissions-link',\n                'icon' => 'lock',\n            ];\n        }\n\n        return $this;\n    }\n\n    protected function custom(): self\n    {\n        if ($this->entity->entityType->isCustom()) {\n            return $this->customEntityType();\n        }\n        // Get the custom one based on the model name?\n        $className = ucfirst($this->entity->entityType->code);\n        $submenuName = 'App\\Services\\Submenus\\\\' . $className . 'Submenu';\n        try {\n            /** @var CharacterSubmenu $object */\n            $object = app()->make($submenuName);\n            if (isset($this->user)) {\n                $object->user($this->user);\n            }\n            $object->entity($this->entity)->campaign($this->campaign);\n\n            foreach ($object->extra() as $section => $sectionItems) {\n                $this->items[$section] = array_merge($this->items[$section] ?? [], $sectionItems);\n            }\n        } catch (\\Exception $e) {\n            // Some modules like convos have no submenu\n        }\n\n        return $this;\n    }\n\n    protected function customEntityType(): self\n    {\n        /** @var CustomSubmenu $service */\n        $service = app()->make(CustomSubmenu::class);\n        $service->entity($this->entity)->campaign($this->campaign);\n\n        foreach ($service->extra() as $section => $sectionItems) {\n            $this->items[$section] = array_merge($this->items[$section] ?? [], $sectionItems);\n        }\n\n        return $this;\n    }\n\n    protected function ordered(): array\n    {\n        $this->ordered = [];\n        if (Arr::has($this->items, 'first')) {\n            $this->ordered[] = $this->items['first'];\n        }\n        if (Arr::has($this->items, 'second')) {\n            $this->ordered[] = $this->items['second'];\n        }\n        if (Arr::has($this->items, 'third')) {\n            $sortedItems = array_combine(array_keys($this->items['third']), array_column($this->items['third'], 'name'));\n            foreach ($sortedItems as $key => $item) {\n                $sortedItems[$key] = $item;\n            }\n\n            $collator = new \\Collator(app()->getLocale());\n            $collator->asort($sortedItems);\n\n            $sortedMenuItems = [];\n            foreach ($sortedItems as $key => $item) {\n                $sortedMenuItems[$key] = $this->items['third'][$key];\n            }\n\n            $this->ordered[] = $sortedMenuItems;\n        }\n        if (Arr::has($this->items, 'fourth')) {\n            $this->ordered[] = $this->items['fourth'];\n        }\n\n        return $this->ordered;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/TagSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Tag;\n\nclass TagSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n\n        /** @var Tag $model */\n        $model = $this->entity->child;\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Submenus/TimelineSubmenu.php",
    "content": "<?php\n\nnamespace App\\Services\\Submenus;\n\nuse App\\Models\\Timeline;\n\nclass TimelineSubmenu extends BaseSubmenu implements EntitySubmenu\n{\n    public function extra(): array\n    {\n        $items = [];\n        /** @var Timeline $model */\n        $model = $this->entity->child;\n        if (isset($this->user) && $this->user->can('update', $this->entity)) {\n            $items['second']['eras'] = [\n                'name' => __('timelines.fields.eras'),\n                'route' => 'timelines.timeline_eras.index',\n                'count' => $model->eras->count(),\n            ];\n            $items['second']['reorder'] = [\n                'name' => __('crud.actions.reorder'),\n                'route' => 'timelines.reorder',\n            ];\n        }\n\n        return $items;\n    }\n}\n"
  },
  {
    "path": "app/Services/Subscribers/HallOfFameService.php",
    "content": "<?php\n\nnamespace App\\Services\\Subscribers;\n\nuse App\\Models\\Pledge;\nuse App\\Models\\Role;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Arr;\n\nclass HallOfFameService\n{\n    /**\n     * Get a list of subscribers for the hall of fame\n     *\n     * @return array list of subscribers by pledge\n     */\n    public function subscribers(): array\n    {\n        $cacheKey = 'about_subscribers';\n        if (cache()->has($cacheKey)) {\n            // return cache()->get($cacheKey);\n        }\n        $subscribers = [\n            'elemental' => [],\n            'wyvern' => [],\n            'owlbear' => [],\n            'goblin' => [],\n            'kobold' => [],\n        ];\n\n        /** @var ?Role $role */\n        $role = Role::where(['name' => Pledge::ROLE])->first();\n\n        // No subscriber role? Local instance or not properly set up. Let's just avoid throwing an error.\n        if ($role === null) {\n            return $subscribers;\n        }\n\n        $users = User::select(['pledge', 'name', 'settings'])\n            ->leftJoin('user_roles as ur', function ($join) use ($role) {\n                $join->on('ur.user_id', '=', 'users.id')\n                    ->where('ur.role_id', $role->id);\n            })\n            ->whereNotNull('ur.role_id')\n            ->orderBy('users.name', 'ASC')\n            ->get();\n        /** @var User $user */\n        foreach ($users as $user) {\n            if (empty($user->pledge) || $user->pledge === Pledge::KOBOLD) {\n                continue;\n            }\n            if (Arr::get($user, 'settings.hide_subscription', false)) {\n                continue;\n            }\n            $subscribers[mb_strtolower($user->pledge)][] = $user->name;\n        }\n\n        // Cache for a day\n        cache()->set($cacheKey, $subscribers, 3600 * 24);\n\n        return $subscribers;\n    }\n}\n"
  },
  {
    "path": "app/Services/Subscription/CancellationService.php",
    "content": "<?php\n\nnamespace App\\Services\\Subscription;\n\nuse App\\Enums\\UserAction;\nuse App\\Exceptions\\TranslatableException;\nuse App\\Http\\Requests\\SubscriptionCancel;\nuse App\\Jobs\\Emails\\SubscriptionCancelEmailJob;\nuse App\\Jobs\\SubscriptionEndJob;\nuse App\\Models\\SubscriptionCancellation;\nuse App\\Traits\\UserAware;\nuse Carbon\\Carbon;\n\nclass CancellationService\n{\n    use UserAware;\n\n    protected SubscriptionCancel $request;\n\n    protected bool $webhook = false;\n\n    public function request(SubscriptionCancel $request): self\n    {\n        $this->request = $request;\n\n        return $this;\n    }\n\n    public function cancel(): void\n    {\n        if (! $this->user->subscribed('kanka')) {\n            throw new TranslatableException('subscription/cancellation.errors.not_subscribed');\n        }\n\n        try {\n            $this->user->subscription('kanka')->cancel();\n        } catch (\\Exception $e) {\n            // On local machines, subs get dropped from stripe and it causes issues\n            $this->user->subscription('kanka')->delete();\n        }\n\n        $this->user->log(UserAction::subCancel);\n        if ($this->webhook) {\n            return;\n        }\n        $cancellation = SubscriptionCancellation::create([\n            'user_id' => $this->user->id,\n            'reason' => $this->request->reason,\n            'secondary' => $this->request->reason_secondary,\n            'custom' => $this->request->reason_custom,\n            'tier' => $this->user->pledge ?? 'Owlbear',\n            'duration' => $this->user->subscription('kanka')->created_at->diffInDays(Carbon::now()),\n        ]);\n\n        // Anything that can fail, send to a queue\n        SubscriptionCancelEmailJob::dispatch($cancellation);\n\n        // Dispatch the job when the subscription actually ends\n        SubscriptionEndJob::dispatch($this->user)\n            ->delay(\n                $this->user->subscription('kanka')->ends_at\n            );\n    }\n}\n"
  },
  {
    "path": "app/Services/Subscription/CouponService.php",
    "content": "<?php\n\nnamespace App\\Services\\Subscription;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Models\\Tier;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Number;\nuse Stripe\\PromotionCode;\nuse Stripe\\Stripe;\n\nclass CouponService\n{\n    use UserAware;\n\n    protected string $code;\n\n    protected Tier $tier;\n\n    public function code(string $code): self\n    {\n        $this->code = strip_tags(mb_trim($code, ' '));\n\n        return $this;\n    }\n\n    public function tier(Tier $tier): self\n    {\n        $this->tier = $tier;\n\n        return $this;\n    }\n\n    public function check(): array\n    {\n        if (empty($this->code)) {\n            return [\n                'valid' => false,\n                'error' => 'Empty code',\n            ];\n        }\n\n        try {\n            Stripe::setApiKey(config('cashier.secret'));\n\n            // We have to look at all codes with this coupon this way, because the retrieve method\n            // expects a stripe_id\n            $promos = PromotionCode::all(['code' => $this->code, 'active' => true]);\n            if ($promos->count() !== 1) {\n                return $this->error(__('subscriptions/promos.errors.invalid'));\n            }\n\n            /** @var PromotionCode $promo */\n            $promo = $promos->first();\n            if (! $promo->active) {\n                return $this->error(__('subscriptions/promos.errors.inactive'));\n            }\n\n            // Check restrictions\n            if ($promo->restrictions) {\n                // Some promos are only for first time subscribers\n                // @phpstan-ignore-next-line\n                if ($promo->restrictions->first_time_transaction) {\n                    if ($this->user->subscriptions->count()) {\n                        return $this->error(__('subscriptions/promos.errors.only-new'));\n                    }\n                }\n            }\n\n            // We have a valid coupon\n            return [\n                'promo' => $promo,\n                'valid' => $promo->active,\n                'promotion' => $promo->id,\n                'coupon' => $promo->coupon->id,\n                'discount' => __('settings.subscription.coupon.percent_off', ['percent' => $promo->coupon->percent_off]),\n                'price' => $this->price($promo),\n            ];\n        } catch (Exception $e) {\n            return $this->error($e->getMessage());\n        }\n    }\n\n    protected function price($promo): string\n    {\n        $price = $this->tier->price($this->user->currency(), PricingPeriod::Yearly);\n\n        $discount = round($price * ($promo->coupon->percent_off / 100), 2);\n        $newPrice = $price - $discount;\n\n        return '<del>' . Number::format($price, 2) . '</del> ' . Number::format($newPrice, 2);\n    }\n\n    protected function error(mixed $error): array\n    {\n        return [\n            'valid' => false,\n            'error' => $error,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Subscription/FreeTrialEndService.php",
    "content": "<?php\n\nnamespace App\\Services\\Subscription;\n\nuse App\\Jobs\\SubscriptionEndJob;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\nuse Laravel\\Cashier\\Subscription;\n\nclass FreeTrialEndService\n{\n    protected int $count = 0;\n\n    protected array $logs = [];\n\n    protected bool $dispatch;\n\n    protected array $ids = [];\n\n    public function ids(): array\n    {\n        return $this->ids;\n    }\n\n    /**\n     * Find users with expired subscriptions and dispatch a cleanup job for each one\n     *\n     * @param  bool  $dispatch  set as false to not dispatch the job, just listing the expired subscriptions\n     *                          in the admin job log.\n     */\n    public function run(bool $dispatch = true): int\n    {\n        $this->dispatch = $dispatch;\n\n        $this->endFreeTrials();\n\n        return $this->count;\n    }\n\n    protected function endFreeTrials(): void\n    {\n        $subscriptions = Subscription::with(['user', 'user.boosts', 'user.boosts.campaign'])\n            ->where('stripe_id', 'like', 'manual_sub%')\n            ->where('stripe_status', 'canceled')\n            ->whereLike('stripe_price', 'trial_%')\n            ->whereDate('ends_at', '=', Carbon::now()->startOfDay())\n            ->get();\n        if ($subscriptions->count() === 0) {\n            return;\n        }\n        $this->logs[] = 'Free trials';\n        foreach ($subscriptions as $subscription) {\n            $this->process($subscription);\n        }\n    }\n\n    protected function process(Subscription $subscription): void\n    {\n        /** @var User $user */\n        $user = $subscription->user;\n        $this->logs[] = 'User ' . $user->name . ' (' . $user->id . '): ' . $subscription->ends_at;\n        if ($this->dispatch) {\n            $this->ids[] = $user->id;\n            SubscriptionEndJob::dispatch($user, false, true);\n        }\n        $this->count++;\n    }\n}\n"
  },
  {
    "path": "app/Services/Subscription/PayPalRenewalService.php",
    "content": "<?php\n\nnamespace App\\Services\\Subscription;\n\nuse App\\Enums\\UserAction;\nuse App\\Jobs\\Emails\\Subscriptions\\Admin\\PaypalRenewedJob;\nuse App\\Models\\Tier;\nuse App\\Traits\\UserAware;\nuse Laravel\\Cashier\\Subscription;\nuse Srmklive\\PayPal\\Services\\PayPal;\n\nclass PayPalRenewalService\n{\n    use UserAware;\n\n    protected Tier $tier;\n\n    public function tier(Tier $tier): self\n    {\n        $this->tier = $tier;\n\n        return $this;\n    }\n\n    public function process(): mixed\n    {\n        $currency = 'USD';\n        if ($this->user->billedInEur()) {\n            $currency = 'EUR';\n        }\n\n        $price = $this->tier->yearly;\n\n        $provider = new PayPal;\n        $provider->setApiCredentials(config('paypal'));\n        $provider->getAccessToken();\n\n        return $provider->createOrder([\n            'intent' => 'CAPTURE',\n            'application_context' => [\n                'return_url' => route('paypal.renew-success'),\n                'cancel_url' => route('paypal.renew-cancel'),\n            ],\n            'purchase_units' => [\n                0 => [\n                    'reference_id' => $this->tier->name,\n                    'amount' => [\n                        'currency_code' => $currency,\n                        'value' => $price,\n                    ],\n                ],\n            ],\n        ]);\n    }\n\n    public function renew(Tier $tier): void\n    {\n        /** @var Subscription $sub */\n        $sub = $this->user->subscriptions()->where('stripe_price', 'like', 'paypal_%')->first();\n        $sub->ends_at = $sub->ends_at->addYear();\n        $sub->stripe_price = 'paypal_' . $tier->name;\n        $sub->save();\n\n        $this->user->pledge = $tier->name;\n        $this->user->save();\n\n        $this->user->log(UserAction::subPaypalRenew);\n\n        PaypalRenewedJob::dispatch($this->user->id);\n    }\n}\n"
  },
  {
    "path": "app/Services/Subscription/PaymentMethodService.php",
    "content": "<?php\n\nnamespace App\\Services\\Subscription;\n\nuse App\\Enums\\UserAction;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\nuse Laravel\\Cashier\\PaymentMethod;\nuse Stripe\\Card;\n\nclass PaymentMethodService\n{\n    public function updateExpiry(User $user, UserAction $action)\n    {\n        $defaultPaymentMethod = $user->defaultPaymentMethod();\n        if ($defaultPaymentMethod instanceof PaymentMethod) {\n            /** @var Card $card */\n            $card = $defaultPaymentMethod->asStripePaymentMethod()->card;\n            $expiresAt = Carbon::createFromDate($card->exp_year, $card->exp_month)->endOfMonth();\n            $user->card_expires_at = $expiresAt;\n        } else {\n            $user->card_expires_at = null;\n        }\n        $user->saveQuietly();\n        $user->log($action);\n    }\n}\n"
  },
  {
    "path": "app/Services/Subscription/SubscriptionEndService.php",
    "content": "<?php\n\nnamespace App\\Services\\Subscription;\n\nuse App\\Jobs\\SubscriptionEndJob;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\n\nclass SubscriptionEndService\n{\n    protected int $count = 0;\n\n    protected array $logs = [];\n\n    protected bool $dispatch;\n\n    protected array $ids = [];\n\n    public function ids(): array\n    {\n        return $this->ids;\n    }\n\n    /**\n     * Find users with a pledge but no valid subscription and dispatch a cleanup job for each one\n     *\n     * @param  bool  $dispatch  set as false to not dispatch the job, just listing the expired subscriptions\n     *                          in the admin job log.\n     */\n    public function run(bool $dispatch = true): int\n    {\n        $this->dispatch = $dispatch;\n\n        $users = User::with(['boosts', 'boosts.campaign'])\n            ->whereNotNull('pledge')\n            ->where('pledge', '!=', '')\n            ->where('settings', 'not like', '%patreon%')\n            ->whereNull('banned_until')\n            ->whereDoesntHave('subscriptions', function ($query) {\n                $query->where('stripe_status', 'active')\n                    ->orWhere('stripe_status', 'trialing')\n                    ->orWhere('stripe_status', 'past_due')\n                    ->orWhereDate('ends_at', '>=', Carbon::today()->toDateString());\n            })\n            ->get();\n\n        foreach ($users as $user) {\n            $this->process($user);\n        }\n\n        return $this->count;\n    }\n\n    protected function process(User $user): void\n    {\n        $this->logs[] = 'User ' . $user->name . ' (' . $user->id . ')';\n        if ($this->dispatch) {\n            SubscriptionEndJob::dispatch($user);\n            $this->ids[] = $user->id;\n        }\n        $this->count++;\n    }\n}\n"
  },
  {
    "path": "app/Services/Subscription/TrialService.php",
    "content": "<?php\n\nnamespace App\\Services\\Subscription;\n\nuse App\\Enums\\UserFlags;\nuse App\\Jobs\\Emails\\TrialAcceptedEmailJob;\nuse App\\Models\\UserFlag;\nuse App\\Traits\\UserAware;\nuse Laravel\\Cashier\\Subscription;\n\nclass TrialService\n{\n    use UserAware;\n\n    public function accept(): void\n    {\n        $this->removeFlag();\n        $this->start();\n    }\n\n    protected function start(): void\n    {\n        $this->user->roles()->syncWithoutDetaching([5]);\n\n        $this->user->pledge = 'Owlbear';\n        $this->user->save();\n\n        $sub = new Subscription;\n        $sub->user_id = $this->user->id;\n        $sub->type = 'kanka';\n        $sub->stripe_id = 'manual_sub_' . uniqid();\n        $sub->stripe_status = 'canceled';\n        $sub->stripe_price = 'trial_' . $this->user->pledge;\n        $sub->quantity = 1;\n        $sub->ends_at = now()->addDays(16)->startOfDay();\n        $sub->save();\n\n        $flag = new UserFlag;\n        $flag->user_id = $this->user->id;\n        $flag->flag = UserFlags::startTrial;\n        $flag->save();\n\n        TrialAcceptedEmailJob::dispatch($this->user);\n    }\n\n    protected function removeFlag(): void\n    {\n        $this\n            ->user\n            ->flags()\n            ->freeTrial()\n            ->delete();\n        session()->remove('kanka.freeTrial');\n    }\n}\n"
  },
  {
    "path": "app/Services/SubscriptionService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Enums\\UserAction;\nuse App\\Enums\\UserFlags;\nuse App\\Exceptions\\TranslatableException;\nuse App\\Jobs\\DiscordRoleJob;\nuse App\\Jobs\\Emails\\MailSettingsChangeJob;\nuse App\\Jobs\\Emails\\SubscriptionCreatedEmailJob;\nuse App\\Jobs\\Emails\\SubscriptionDowngradedEmailJob;\nuse App\\Jobs\\Emails\\Subscriptions\\Converted;\nuse App\\Jobs\\Emails\\Subscriptions\\WelcomeSubscriptionEmailJob;\nuse App\\Models\\Pledge;\nuse App\\Models\\Role;\nuse App\\Models\\Tier;\nuse App\\Models\\TierPrice;\nuse App\\Traits\\UserAware;\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Number;\nuse Laravel\\Cashier\\Exceptions\\IncompletePayment;\nuse Laravel\\Cashier\\PaymentMethod;\nuse Laravel\\Cashier\\Subscription;\nuse Stripe\\Card;\nuse Stripe\\Stripe;\n\nclass SubscriptionService\n{\n    use UserAware;\n\n    public const STATUS_UNSUBSCRIBED = 0;\n\n    public const STATUS_SUBSCRIBED = 1;\n\n    public const STATUS_GRACE = 2;\n\n    public const STATUS_CANCELLED = 3;\n\n    protected Tier $tier;\n\n    protected TierPrice $tierPrice;\n\n    /** @var string|null */\n    protected $plan = null;\n\n    protected PricingPeriod $period;\n\n    /** @var bool set to true if the request comes from a webhook */\n    protected bool $webhook = false;\n\n    /** @var bool if the user has cancelled */\n    protected bool $cancelled = false;\n\n    /** @var string applied coupon */\n    protected string $coupon;\n\n    /** Value of the subscription */\n    protected float $subscriptionValue = 0;\n\n    /** @var array|Request The request object */\n    protected $request;\n\n    public function tier(Tier $tier): self\n    {\n        $this->tier = $tier;\n\n        return $this;\n    }\n\n    public function period(PricingPeriod $period): self\n    {\n        $this->period = $period;\n\n        return $this;\n    }\n\n    public function yearly(): self\n    {\n        $this->period = PricingPeriod::Yearly;\n\n        return $this;\n    }\n\n    public function monthly(): self\n    {\n        $this->period = PricingPeriod::Monthly;\n\n        return $this;\n    }\n\n    public function webhook(): self\n    {\n        $this->webhook = true;\n\n        return $this;\n    }\n\n    public function request(array $request): self\n    {\n        $this->request = $request;\n\n        return $this;\n    }\n\n    public function coupon(?string $coupon = null): self\n    {\n        if ($this->period === PricingPeriod::Yearly && ! empty($coupon)) {\n            $this->coupon = $coupon;\n        }\n\n        return $this;\n    }\n\n    /**\n     * When the stripe API calls us, we get a plan_id that needs to be transformed into a tier and tierprice\n     */\n    public function plan(string $plan): self\n    {\n        // Some weird edge cases in prod need mapping\n        if ($plan === 'price_1IRIwTDInN4WlDnRJJU53rej') {\n            $plan = config('subscription.owlbear.usd.monthly');\n        }\n        /** @var ?TierPrice $price */\n        $price = TierPrice::where('stripe_id', $plan)->first();\n        $this->tier = $price->tier;\n\n        return $this;\n    }\n\n    /**\n     * Change plans\n     */\n    public function change(): self\n    {\n        // Update the user's payment plan\n        $paymentMethodID = Arr::get($this->request, 'payment_id');\n        $this->user->addPaymentMethod($paymentMethodID);\n        $this->user->updateDefaultPaymentMethod($paymentMethodID);\n\n        // Save the expiration date on the user for alerts about expiring cards\n        $payment = $this->user->defaultPaymentMethod();\n        if ($payment instanceof PaymentMethod) {\n            /** @var Card $card */\n            $card = $payment->asStripePaymentMethod()->card;\n            $expiresAt = Carbon::createFromDate($card->exp_year, $card->exp_month)->endOfMonth();\n            $this->user->card_expires_at = $expiresAt;\n            $this->user->save();\n\n            // Check that someone isn't using a VPN\n            if (app()->isProduction() && $this->user->currency() === 'brl' && $card->country !== 'BR') {\n                throw (new TranslatableException('subscription.errors.invalid_card_country.brl'))->setOptions(['email' => '<a href=\"mailto:' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>']);\n            }\n        }\n\n        // Subscribe\n        $this->subscribe($paymentMethodID);\n\n        return $this;\n    }\n\n    /**\n     * @throws IncompletePayment\n     */\n    public function subscribe(string $paymentID): self\n    {\n        // New subscriber\n        if (! $this->user->subscribed('kanka')) {\n            $this->user->newSubscription('kanka', $this->tierPrice()->stripe_id)\n                ->withCoupon($this->coupon ?? null)\n                ->create($paymentID);\n\n            $this->user->log(UserAction::subNew);\n\n            return $this;\n        }\n\n        // If going down from elemental to owlbear, keep it as is until the current billing period\n        if ($this->downgrading()) {\n            $this->user->subscription('kanka')->swap($this->tierPrice()->stripe_id);\n            $this->user->log(UserAction::subDowngrade);\n        } else {\n            $this->user->subscription('kanka')->swapAndInvoice($this->tierPrice()->stripe_id);\n            $this->user->log(UserAction::subUpgrade);\n        }\n\n        return $this;\n    }\n\n    public function renew(): void\n    {\n        $this->user->subscription('kanka')->resume();\n    }\n\n    /**\n     * Set up the user's pledge, role, discord\n     */\n    public function finish(): self\n    {\n\n        // If the user is cancelling through the interface, don't do anything else\n        if ($this->cancelled) {\n            return $this;\n        }\n\n        // If downgrading, send admins an email, and let stripe deal with the rest. A user update hook will be thrown\n        // when the user really changes. Probably?\n        if (! $this->webhook && $this->downgrading()) {\n            SubscriptionDowngradedEmailJob::dispatch(\n                $this->user,\n                Arr::get($this->request, 'reason'),\n                Arr::get($this->request, 'reason_custom')\n            );\n            $this->user->log(UserAction::subDowngrade);\n\n            return $this;\n        }\n\n        // Determine if the pledge was changed or not\n        $new = ! $this->upgrading();\n\n        // Add the necessary roles and pledge data\n        $this->user->pledge = $this->tier->name;\n        $this->user->update(['pledge' => $this->tier->name]);\n\n        // We're so far, good. Let's add the user to the subscriber group\n        $role = Role::where('name', '=', Pledge::ROLE)->first();\n        if ($role && ! $this->user->hasRole(Pledge::ROLE)) {\n            $this->user->roles()->attach($role->id);\n        }\n\n        // Anything that can fail, send to the queue\n        DiscordRoleJob::dispatch($this->user)->delay(now()->addSeconds($new ? 0 : 30));\n        MailSettingsChangeJob::dispatch($this->user);\n\n        // If Stripe is confirming that a sub is renewed, we don't want to do anything more\n        if ($this->renewal()) {\n            return $this;\n        }\n\n        // Don't send emails when called from the webhook\n        if (! $this->webhook) {\n            if ($this->userConvertedFromFreeTrial()) {\n                Converted::dispatch($this->user);\n            } else {\n                SubscriptionCreatedEmailJob::dispatch($this->user, $this->period, $new);\n                WelcomeSubscriptionEmailJob::dispatch($this->user, $this->tier);\n            }\n\n            // Save the new sub value\n            if (isset($this->tier)) {\n                $this->subscriptionValue = $this->tierPrice()->cost;\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Get the status of the user's subscription\n     */\n    public function status(): int\n    {\n        if (! $this->user->subscribed('kanka')) {\n            return self::STATUS_UNSUBSCRIBED;\n        } elseif ($this->user->subscription('kanka')->onGracePeriod()) {\n            return self::STATUS_GRACE;\n        } elseif ($this->user->subscription('kanka')->canceled()) {\n            return self::STATUS_CANCELLED;\n        }\n\n        return self::STATUS_SUBSCRIBED;\n    }\n\n    /**\n     * Get the tier amount\n     */\n    public function amount(): string\n    {\n        $amount = $this->tierPrice()->cost;\n\n        return Number::format($amount, 2);\n    }\n\n    /**\n     * Get the user's current plan\n     */\n    public function currentPlan(): ?TierPrice\n    {\n        if (! $this->user->subscribed('kanka')) {\n            return null;\n        }\n        $price = $this->user->subscription('kanka')->stripe_price;\n        /** @var TierPrice $tier */\n        $tier = TierPrice::where('stripe_id', $price)->first();\n        if (empty($tier)) {\n            return null;\n        }\n\n        return $tier;\n    }\n\n    /**\n     * Cancel the user's subscription to Kanka\n     */\n    public function canceled(): bool\n    {\n        return $this->cancelled;\n    }\n\n    /**\n     * Get the subscription value\n     */\n    public function subscriptionValue(): int\n    {\n        return (int) $this->subscriptionValue;\n    }\n\n    /**\n     * Determine if a user is downgrading\n     */\n    public function downgrading(): bool\n    {\n        // Elemental downgrading -> owl or wyv\n        if ($this->user->isElemental() && in_array($this->tier->name, [Pledge::OWLBEAR, Pledge::WYVERN])) {\n            return true;\n        }\n\n        // Wyvern downgrading to owl\n        if ($this->user->isWyvern() && $this->toOwlbear()) {\n            return true;\n        }\n\n        // Cancelling\n        return isset($this->tier) && $this->tier->name === Pledge::KOBOLD;\n    }\n\n    /**\n     * Determine if a user is upgrading their plan to a higher tier\n     */\n    protected function upgrading(): bool\n    {\n        if ($this->user->pledge == Pledge::OWLBEAR && in_array($this->tier->name, [Pledge::WYVERN, Pledge::ELEMENTAL])) {\n            return true;\n        }\n\n        return (bool) ($this->user->pledge == Pledge::WYVERN && $this->tier->name == Pledge::ELEMENTAL);\n    }\n\n    /**\n     * Determine if the process is renewing the user or not\n     */\n    protected function renewal(): bool\n    {\n        // If we're not in a webhook, it's not possible to be an auto-renewal\n        if (! $this->webhook) {\n            return false;\n        }\n\n        // Check if the user's active sub is from before the current date\n        /** @var ?Subscription $sub */\n        $sub = Subscription::where('user_id', $this->user->id)->where('stripe_status', 'active')->first();\n        if ($sub === null) {\n            return false;\n        }\n\n        return $sub->created_at->lessThan(Carbon::yesterday());\n    }\n\n    /**\n     * If the target tier is owlbear\n     */\n    protected function toOwlbear(): bool\n    {\n        return $this->tier->name == Pledge::OWLBEAR;\n    }\n\n    /**\n     * Determine if the user is only limited to paypal subscriptions\n     */\n    public function isLimited(): bool\n    {\n        $countries = ['EG'];\n\n        return $this->user->logs()\n            ->where('type_id', UserAction::login)\n            ->whereIn('country', $countries)\n            ->count() > 0;\n    }\n\n    protected function isYearly(): bool\n    {\n        return $this->period === PricingPeriod::Yearly;\n    }\n\n    public function tierPrice(): TierPrice\n    {\n        if (isset($this->tierPrice)) {\n            return $this->tierPrice;\n        }\n\n        return $this->tierPrice = TierPrice::where('tier_id', $this->tier->id)\n            ->where('currency', $this->user->currency())\n            ->where('period', $this->isYearly() ? PricingPeriod::Yearly->value : PricingPeriod::Monthly->value)\n            ->first();\n    }\n\n    protected function userConvertedFromFreeTrial(): bool\n    {\n        return $this->user->flags()\n            ->where('flag', UserFlags::startTrial)\n            ->whereDate('created_at', '>=', Carbon::now()->subDays(30))\n            ->exists();\n    }\n}\n"
  },
  {
    "path": "app/Services/SubscriptionUpgradeService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Models\\Tier;\nuse App\\Traits\\UserAware;\nuse Carbon\\Carbon;\n\nclass SubscriptionUpgradeService\n{\n    use UserAware;\n\n    protected Tier $tier;\n\n    protected PricingPeriod $period;\n\n    public function tier(Tier $tier): self\n    {\n        $this->tier = $tier;\n\n        return $this;\n    }\n\n    public function period(PricingPeriod $pricingPeriod): self\n    {\n        $this->period = $pricingPeriod;\n\n        return $this;\n    }\n\n    public function upgradePrice(): float|int\n    {\n        $monthly = true;\n\n        $price = $this->tier->price($this->user->currency(), $this->period);\n\n        if (! $this->user->subscribed('kanka') || $this->user->hasManualSubscription()) {\n            return $price;\n        }\n        if ($this->onYearlyPlan()) {\n            $monthly = false;\n        }\n\n        // Calculate the current subscription price\n        $code = 'owlbear';\n        if ($this->user->isElemental()) {\n            $code = 'elemental';\n            if (! $monthly) {\n                return 0;\n            }\n        } elseif ($this->user->isWyvern()) {\n            $code = 'wyvern';\n        }\n        $this->tier = Tier::where('code', $code)->first();\n        $oldPrice = $this->tier->price(\n            $this->user->currency(),\n            $monthly ? PricingPeriod::Monthly : PricingPeriod::Yearly\n        );\n        $endPeriod = $this->endPeriod();\n        if ($this->period === PricingPeriod::Yearly) {\n            // Prorated Cost = (New Tier Cost - Old Tier Cost) x (Number of Days Remaining / Number of Days in a Full Year)\n            // If going from monthly to yearly, we divide the current sub up on a month\n            $duration = $monthly ? 31 : 365;\n            $price = round(($price - ($oldPrice)) * ($endPeriod->diffInDays(Carbon::now(), true) / $duration), 2);\n            // @phpstan-ignore-next-line\n        } elseif ($monthly && $this->period === PricingPeriod::Monthly) {\n            // Prorated Cost = (New Tier Cost - Old Tier Cost) x (Number of Days Remaining / Total Days in the Month)\n            //            dump($price);\n            //            dump($oldPrice);\n            //            dump($endPeriod->format('Y.m.d'));\n            //            dump($endPeriod->diffInDays(Carbon::now(), true));\n            //            dump($endPeriod->diffInDays(Carbon::now(), true)/ 31);\n            $price = round(($price - ($oldPrice)) * ($endPeriod->diffInDays(Carbon::now(), true) / 31), 2);\n        } elseif ($this->period === PricingPeriod::Monthly) {\n            // Switching from a yearly plan to a monthly plan, this gets interesting\n            $remaining = 365;\n            $price = round(($price - ($oldPrice)) * ($endPeriod->diffInDays(Carbon::now(), true) / $remaining), 2);\n        }\n\n        return max(0, $price);\n    }\n\n    protected function endPeriod(): Carbon\n    {\n        // Stripe provides us with this information easily\n        if (! $this->user->hasPayPal()) {\n            return Carbon::createFromTimestamp($this->user->subscription('kanka')->asStripeSubscription()->current_period_end);\n        }\n\n        // For paypal, we need the subscription's end date\n        return $this->user->subscription('kanka')->ends_at;\n    }\n\n    protected function onYearlyPlan(): bool\n    {\n        if ($this->user->hasPayPal()) {\n            return true;\n        }\n\n        // Todo: move to tiers table?\n        $prices = array_merge(\n            config('subscription.owlbear.yearly'),\n            config('subscription.wyvern.yearly'),\n            config('subscription.elemental.yearly'),\n        );\n\n        return $this->user->subscribedToPrice($prices, 'kanka');\n    }\n}\n"
  },
  {
    "path": "app/Services/TOC/TocSlugify.php",
    "content": "<?php\n\nnamespace App\\Services\\TOC;\n\nuse Symfony\\Component\\String\\Slugger\\AsciiSlugger;\nuse Symfony\\Component\\String\\Slugger\\SluggerInterface as SymfonyStringSluggerInterface;\nuse TOC\\SluggerInterface;\n\n/**\n * This is a direct copy-paste of TOC\\UniqueSlugify, because the MarkupFixer doesn't want to re-use the same slugifier\n * twice, while this is exactly what we want to not repeat heading ids between entities, posts, quest elements, etc.\n */\nclass TocSlugify implements SluggerInterface\n{\n    private SymfonyStringSluggerInterface $slugger;\n\n    /**\n     * @var array\n     */\n    private $used;\n\n    /**\n     * Constructor\n     */\n    public function __construct(?SymfonyStringSluggerInterface $slugger = null)\n    {\n        $this->used = [];\n        $this->slugger = $slugger ?: new AsciiSlugger;\n    }\n\n    /**\n     * Slugify\n     */\n    public function makeSlug(string $string): string\n    {\n        $slugged = $this->slugger->slug($string)->lower()->toString();\n\n        $count = 1;\n        $orig = $slugged;\n        while (in_array($slugged, $this->used)) {\n            $slugged = $orig . '-' . $count;\n            $count++;\n        }\n\n        $this->used[] = $slugged;\n\n        return $slugged;\n    }\n\n    public function reset(): void\n    {\n        $this->used = [];\n    }\n}\n"
  },
  {
    "path": "app/Services/TagService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\Tag;\n\nclass TagService\n{\n    public function transfer(Tag $tag, Tag $newTag): void\n    {\n        foreach ($tag->entities as $entity) {\n            $entity->tags()->detach($tag->id);\n            $entity->tags()->attach($newTag->id);\n        }\n    }\n\n    public function transferPosts(Tag $tag, Tag $newTag): void\n    {\n        foreach ($tag->posts as $post) {\n            $post->tags()->detach($tag->id);\n            $post->tags()->attach($newTag->id);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Services/TimelineService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Http\\Requests\\ReorderTimeline;\nuse App\\Models\\Timeline;\nuse App\\Models\\TimelineElement;\nuse App\\Models\\TimelineEra;\nuse Illuminate\\Support\\Arr;\n\nclass TimelineService\n{\n    protected Timeline $timeline;\n\n    public function timeline(Timeline $timeline): self\n    {\n        $this->timeline = $timeline;\n\n        return $this;\n    }\n\n    public function reorderElements(TimelineElement $timelineElement, bool $replace = false)\n    {\n        // First position. If replacing, start where the current one is gone\n        $position = $timelineElement->position;\n        if (! $replace) {\n            $position++;\n        }\n\n        // Reorder the position of following elements\n        $elements = $timelineElement->era\n            ->elements()\n            ->where('position', '>=', $timelineElement->position)\n            ->where('id', '!=', $timelineElement->id)\n            ->orderBy('position')\n            ->get();\n        foreach ($elements as $element) {\n            $element->position = $position;\n            $element->save();\n            $position++;\n        }\n    }\n\n    public function reorder(ReorderTimeline $request): bool\n    {\n        $ids = $request->get('timeline_era');\n        $elementIds = $request->get('timeline_element');\n        if (empty($ids)) {\n            return false;\n        }\n\n        $position = 1;\n        foreach ($ids as $id) {\n            /** @var ?TimelineEra $era */\n            $era = TimelineEra::find($id);\n            if ($era === null || $era->timeline_id !== $this->timeline->id) {\n                continue;\n            }\n\n            $era->position = $position;\n            $era->save();\n            $position++;\n\n            // Reorder elements\n            $elements = Arr::get($elementIds, $id, []);\n            if (empty($elements)) {\n                continue;\n            }\n            $elementPosition = 1;\n            // dump($elements);\n            foreach ($elements as $elementId) {\n                /** @var ?TimelineElement $element */\n                $element = TimelineElement::find($elementId);\n                if ($element === null || $element->timeline_id !== $this->timeline->id) {\n                    continue;\n                }\n\n                // Reposition\n                // dump(\"Reposition $element->name (# $element->id) to $elementPosition\");\n                $element->position = $elementPosition;\n                $element->save();\n\n                $elementPosition++;\n            }\n        }\n\n        // dd('w');\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/Services/Tracking/DatalayerService.php",
    "content": "<?php\n\nnamespace App\\Services\\Tracking;\n\nuse App\\Facades\\AdCache;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\RequestAware;\nuse App\\Traits\\UserAware;\nuse Carbon\\Carbon;\n\nclass DatalayerService\n{\n    use CampaignAware;\n    use RequestAware;\n    use UserAware;\n\n    /** Group name: a|b */\n    protected string $group;\n\n    /** @var array Extra parameters to pass */\n    protected array $additional = [];\n\n    /** @var bool If the user is newly created */\n    protected bool $newAccount = false;\n\n    /** @var bool If the user is newly registered */\n    protected bool $newSubscriber = false;\n\n    /** @var bool If the user is newly cancelled */\n    protected bool $newCancelledSubscriber = false;\n\n    public function base(): string\n    {\n        $data = array_merge([\n            'userType' => 'visitor',\n            'userGroup' => $this->userGroup(),\n            'userTier' => null,\n            'userSubbed' => false,\n            'route' => $this->route(),\n            'newAccount' => $this->newAccount ? '1' : '0',\n            'newSubscriber' => $this->newSubscriber ? '1' : '0',\n            'userID' => null,\n        ], $this->additional);\n\n        if (isset($this->user)) {\n            $data['userType'] = 'registered';\n            $data['userTier'] = ! empty($this->user->pledge) ? $this->user->pledge : null;\n            $data['userSubbed'] = ! empty($this->user->pledge) ? 'true' : 'false';\n            $data['userID'] = $this->user->id;\n\n            if ($this->newCancelledSubscriber) {\n                $data['newCancelled'] = '1';\n            }\n            if ($this->newAccount || $this->newSubscriber) {\n                $data['userEmail'] = $this->user->email;\n            }\n        }\n\n        // We only track if ads are shown or hidden on page that are set up to actually serve ads\n        if (AdCache::canHaveAds()) {\n            $data['showAds'] = $this->showAds();\n        }\n\n        return json_encode($data);\n    }\n\n    protected function showAds(): bool\n    {\n        if (isset($this->campaign) && $this->campaign->boosted()) {\n            return false;\n            //        } elseif (!AdCache::canHaveAds()) {\n            //            return false;\n        } elseif (! isset($this->user)) {\n            return true;\n        } elseif ($this->user->isSubscriber()) {\n            return false;\n        }\n\n        return $this->user->created_at->diffInHours(Carbon::now()) > 24;\n    }\n\n    public function userGroup(): string\n    {\n        if (isset($this->group)) {\n            return $this->group;\n        }\n        // Set in session? Use that\n        if (session()->has('user_group')) {\n            $this->group = session()->get('user_group');\n\n            return $this->group;\n        }\n\n        if (isset($this->user)) {\n            $this->group = $this->user->id % 2 == 0 ? 'a' : 'b';\n\n            return $this->group;\n        }\n\n        // Unlogged user, use one from the session\n        $this->group = mt_rand(0, 1) === 0 ? 'a' : 'b';\n        session()->put('user_group', $this->group);\n\n        return $this->group;\n    }\n\n    public function groupB(): bool\n    {\n        return $this->userGroup() === 'b';\n    }\n\n    public function add(string $key, mixed $value): self\n    {\n        $this->additional[$key] = $value;\n\n        return $this;\n    }\n\n    protected function route(): string\n    {\n        if (empty($this->request->route())) {\n            return '';\n        }\n\n        return (string) $this->request->route()->getName();\n    }\n\n    /**\n     * Set the new subscriber as true\n     */\n    public function newSubscriber(): self\n    {\n        $this->newSubscriber = true;\n\n        return $this;\n    }\n\n    /**\n     * Trigger the user as being newly cancelled\n     */\n    public function newCancelledSubscriber(): self\n    {\n        $this->newCancelledSubscriber = true;\n\n        return $this;\n    }\n\n    /**\n     * Set the new account as true\n     */\n    public function newAccount(): self\n    {\n        $this->newAccount = true;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/TroubleshootingService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Exceptions\\TranslatableException;\nuse App\\Models\\AdminInvite;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Str;\n\nclass TroubleshootingService\n{\n    use CampaignAware;\n    use UserAware;\n\n    /**\n     * Generate a list of campaigns the user is an admin of\n     */\n    public function campaigns(): array\n    {\n        $campaigns = [\n            '' => __('assistance.placeholders.campaign'),\n        ];\n        foreach ($this->adminCampaigns() as $id => $name) {\n            $campaigns[$id] = $name;\n        }\n\n        return $campaigns;\n    }\n\n    /**\n     * Generate a unique token for the kanka team to join a campaign\n     *\n     * @throws TranslatableException\n     */\n    public function generate(): AdminInvite\n    {\n        // Already has a token?\n        $exists = AdminInvite::check($this->campaign->id)->first();\n        if ($exists) {\n            throw (new TranslatableException('helpers.troubleshooting.errors.token_exists'))\n                ->setOptions(['campaign' => $this->campaign->name]);\n        }\n        $token = new AdminInvite;\n        $token->created_by = $this->user->id;\n        $token->campaign_id = $this->campaign->id;\n        $token->token = Str::uuid();\n        $token->save();\n\n        return $token;\n    }\n\n    protected function adminCampaigns(): array\n    {\n        $campaigns = [];\n\n        return $this\n            ->user\n            ->campaignRoles()\n            ->where('campaign_roles.is_admin', 1)\n            ->leftJoin('campaigns', 'campaigns.id', '=', 'campaign_roles.campaign_id')\n            ->has('campaign')\n            ->pluck('campaigns.name', 'campaigns.id')\n            ->toArray();\n    }\n}\n"
  },
  {
    "path": "app/Services/TutorialService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Facades\\UserCache;\nuse App\\Models\\Users\\Tutorial;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Str;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\nclass TutorialService\n{\n    use UserAware;\n\n    protected array $tutorials = [\n        'campaign_modules',\n        'public_permissions',\n        'sidebar_reorder',\n        'pagination',\n        'abilities',\n        'attributes',\n        'inventory',\n        'events',\n        'history',\n        'map_markers',\n        'map_groups',\n        'map_layers',\n        'dashboard_setup',\n        'tiptap_survey',\n        'timeline',\n    ];\n\n    /**\n     * Reset all the dismissed tutorials for the user\n     */\n    public function reset(): self\n    {\n        $this->user\n            ->tutorials()\n            ->whereIn('code', $this->tutorials)\n            ->delete();\n\n        UserCache::user($this->user)->clear();\n\n        return $this;\n    }\n\n    /**\n     * Save that a user dismissed a tutorial\n     */\n    public function track(string $code): self\n    {\n        if (UserCache::dismissedTutorial($code)) {\n            return $this;\n        }\n\n        $code = Purify::clean($code);\n\n        if (! $this->valid($code) && ! Str::startsWith($code, ['releases_', 'banner_'])) {\n            return $this;\n        }\n\n        try {\n            $tutorial = new Tutorial;\n            $tutorial->user_id = $this->user->id;\n            $tutorial->code = $code;\n            $tutorial->save();\n\n            UserCache::clear();\n        } catch (Exception $e) {\n            // Someone double-clicked with a slow internet\n            return $this;\n        }\n\n        return $this;\n    }\n\n    protected function valid(string $code): bool\n    {\n        return in_array($code, $this->tutorials);\n    }\n}\n"
  },
  {
    "path": "app/Services/UserAuthenticatedService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\RedirectResponse;\n\nclass UserAuthenticatedService\n{\n    /**\n     * @return RedirectResponse\n     */\n    public function authenticated(User $user)\n    {\n        // If the user is login in from a 403 page, go there now first\n        $redirectTo = session()->get('login_redirect');\n        if (! empty($redirectTo)) {\n            session()->remove('login_redirect');\n            // 2FA redirects are handled by the OTP middleware\n            if (config('google2fa.enabled')) {\n                session(['2fa_redirect' => $redirectTo]);\n            }\n\n            return redirect()->to($redirectTo);\n        }\n\n        return redirect()->route('home');\n    }\n}\n"
  },
  {
    "path": "app/Services/Users/CampaignService.php",
    "content": "<?php\n\nnamespace App\\Services\\Users;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignUser;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\n\nclass CampaignService\n{\n    use CampaignAware;\n    use UserAware;\n\n    /**\n     * Set a campaign as the user's \"current\" campaign\n     */\n    public function set(): self\n    {\n        session()->put('campaign_id', $this->campaign->id);\n        $this->user->last_campaign_id = $this->campaign->id;\n        $this->user->saveQuietly();\n\n        return $this;\n    }\n\n    public function last(): self\n    {\n        if (! isset($this->user)) {\n            return $this;\n        }\n        $last = $this->user->lastCampaign;\n        if (! $last) {\n            return $this;\n        }\n\n        return $this->campaign($last)->set();\n    }\n\n    public function next(): self\n    {\n        // Switch to the next available campaign?\n        $member = CampaignUser::where('user_id', $this->user->id)->first();\n        if ($member && $member->campaign) {\n            // Just switch to the first one available.\n            return $this->campaign($member->campaign)->set();\n        } else {\n            // Need to create a new campaign\n            session()->forget('campaign_id');\n        }\n\n        return $this;\n    }\n\n    /**\n     * List of user campaigns thar aren't the current one\n     */\n    public function campaigns(): array\n    {\n        return $this\n            ->user\n            ->campaigns()\n            ->whereNotIn('campaign_id', [$this->campaign->id])\n            ->pluck('campaigns.name', 'campaigns.id')\n            ->toArray();\n    }\n\n    /**\n     * List of campaigns the user is the owner and last member of. This is used for the purge warning emails\n     */\n    public function flaggedCampaigns(): array\n    {\n        $campaigns = [];\n        /** @var Campaign[] $userCampaigns */\n        $userCampaigns = $this->user->campaigns()->with(['roles', 'roles.users'])->get();\n        foreach ($userCampaigns as $campaign) {\n            /** @var ?CampaignRole $adminRole */\n            $adminRole = $campaign->roles->where('is_admin', true)->first();\n            if (! $adminRole) {\n                continue;\n            }\n\n            // If the user isn't in the admin\n            $isAdmin = false;\n            foreach ($adminRole->users as $member) {\n                if ($member->user_id === $this->user->id) {\n                    $isAdmin = true;\n                }\n            }\n\n            if (! $isAdmin || $adminRole->users->count() > 1) {\n                continue;\n            }\n\n            // The user is the only admin\n            $campaigns[] = $campaign;\n        }\n\n        return $campaigns;\n    }\n}\n"
  },
  {
    "path": "app/Services/Users/CleanupService.php",
    "content": "<?php\n\nnamespace App\\Services\\Users;\n\nuse App\\Enums\\FeatureStatus;\nuse App\\Events\\Campaigns\\Deleted;\nuse App\\Facades\\Images;\nuse App\\Facades\\UserCache;\nuse App\\Jobs\\Users\\UnsubscribeUser;\nuse App\\Models\\CampaignFollower;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\CommunityEventEntry;\nuse App\\Models\\Feature;\nuse App\\Services\\Campaign\\SearchCleanupService;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass CleanupService\n{\n    use UserAware;\n\n    public function __construct(protected SearchCleanupService $cleanupService) {}\n\n    public function delete(): self\n    {\n        $this\n            ->removeCampaigns()\n            ->removeFollows()\n            ->removeFeatureRequests()\n            ->removeWorldbuilding()\n            ->removeAvatar()\n            ->cleanCache()\n            ->removeNewsletter();\n\n        return $this;\n    }\n\n    protected function removeCampaigns(): self\n    {\n        // Log::info('Services/Users/CleanupService', ['deleting', ['user' => $this->user->id]]);\n\n        $members = CampaignUser::where('user_id', $this->user->id)\n            ->with(['campaign', 'campaign.members'])\n            ->has('campaign')\n            ->get();\n        foreach ($members as $member) {\n            $member->delete();\n\n            // Delete a campaign if no one is left in it. Since we did the \"with\", it's cached, hence checking on 1\n            if ($member->campaign->members->count() <= 1) {\n                Images::model($member->campaign)->field('image')->cleanup();\n                $member->campaign->forceDelete();\n                Deleted::dispatch($member->campaign, $this->user);\n            }\n        }\n\n        return $this;\n    }\n\n    protected function removeFollows(): self\n    {\n        $followers = CampaignFollower::where('user_id', $this->user->id)->with('campaign')->get();\n        foreach ($followers as $follower) {\n            // Log::info('Removing follower', ['follower' => $follower->id]);\n            $follower->delete();\n        }\n\n        return $this;\n    }\n\n    protected function removeFeatureRequests(): self\n    {\n        Feature::where('created_by', $this->user->id)->where('upvote_count', '<', 10)->where('status_id', FeatureStatus::Approved)->delete();\n\n        return $this;\n    }\n\n    protected function removeWorldbuilding(): self\n    {\n        CommunityEventEntry::where('created_by', $this->user->id)->delete();\n\n        return $this;\n    }\n\n    protected function removeAvatar(): self\n    {\n        if ($this->user->hasAvatar()) {\n            Images::model($this->user)->field('avatar')->cleanup();\n        }\n\n        return $this;\n    }\n\n    protected function cleanCache(): self\n    {\n        UserCache::user($this->user)\n            ->clearName()\n            ->clear();\n\n        return $this;\n    }\n\n    protected function removeNewsletter(): self\n    {\n        // If the user was subscribed to the newsletter, unsubscribe them\n        if (app()->isProduction() && ! empty($this->user->hasNewsletter())) {\n            UnsubscribeUser::dispatch($this->user->email);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/Users/CurrencyService.php",
    "content": "<?php\n\nnamespace App\\Services\\Users;\n\nuse App\\Models\\TierPrice;\nuse App\\Services\\CountryService;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\n\nclass CurrencyService\n{\n    use UserAware;\n\n    protected CountryService $countryService;\n\n    public function __construct(CountryService $countryService)\n    {\n        $this->countryService = $countryService;\n    }\n\n    /**\n     * Build a list of currencies available to the user\n     */\n    public function availableCurrencies(): array\n    {\n        // USD and EUR are always available\n        $currencies = [\n            'usd' => __('settings.subscription.currencies.usd'),\n            'eur' => __('settings.subscription.currencies.eur'),\n        ];\n        // Brazil\n        if ($this->countryService->getCountry() === 'BR' || $this->user->currency() === 'brl') {\n            $currencies['brl'] = __('settings.subscription.currencies.brl');\n        }\n\n        return $currencies;\n    }\n\n    public function setDefaultCurrency(): void\n    {\n        // If the user has defined their preferred currency, we use that\n        if (Arr::has($this->user->settings, 'currency')) {\n            return;\n        }\n        // If the user has a subscription, use that\n        if ($this->user->subscribed('kanka')) {\n            $id = $this->user->subscription('kanka')->stripe_price;\n            $price = TierPrice::stripe($id)->first();\n            if ($price) {\n                $this->save($price->currency);\n\n                return;\n            }\n        }\n\n        $country = $this->countryService->getCountry();\n        $europe = [\n            // EuroZone\n            'AT', 'BE', 'HR', 'CY', 'EE', 'FI', 'FR', 'DE', 'GR', 'IE',\n            'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PT', 'SI', 'SK', 'ES',\n            // Pegged to the EUR\n            'DK',\n        ];\n        $currency = null;\n        if ($country === 'BR') {\n            $currency = 'brl';\n        } elseif (in_array($country, $europe)) {\n            $currency = 'eur';\n        }\n\n        // Not one of our cases, let it default to USD\n        if (empty($currency)) {\n            return;\n        }\n        $this->save($currency);\n    }\n\n    protected function save(string $currency): void\n    {\n        $settings = $this->user->settings;\n        $settings['currency'] = $currency;\n        $this->user->settings = $settings;\n        $this->user->saveQuietly();\n    }\n}\n"
  },
  {
    "path": "app/Services/Users/EmailValidationService.php",
    "content": "<?php\n\nnamespace App\\Services\\Users;\n\nuse App\\Enums\\UserFlags;\nuse App\\Jobs\\Emails\\Subscriptions\\EmailValidationJob;\nuse App\\Models\\UserFlag;\nuse App\\Models\\UserValidation;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Str;\n\nclass EmailValidationService\n{\n    use UserAware;\n\n    public function requiresEmail(): void\n    {\n        $token = UserValidation::where('user_id', $this->user->id)->first();\n        if ($token && $token->is_valid) {\n            return;\n        }\n\n        $flag = UserFlag::where('user_id', $this->user->id)\n            ->where('flag', UserFlags::email->value)\n            ->first();\n        // If we've already notified the user, no need to notify them again\n        if ($flag) {\n            return;\n        }\n\n        $flag = new UserFlag;\n        $flag->user_id = $this->user->id;\n        $flag->flag = UserFlags::email;\n        $flag->save();\n\n        $token = new UserValidation;\n        $token->token = Str::uuid();\n        $token->user_id = $this->user->id;\n        $token->is_valid = false;\n        $token->save();\n\n        EmailValidationJob::dispatch($this->user, $token);\n    }\n}\n"
  },
  {
    "path": "app/Services/Users/OfferTrialService.php",
    "content": "<?php\n\nnamespace App\\Services\\Users;\n\nuse App\\Enums\\UserFlags;\nuse App\\Models\\User;\nuse App\\Models\\UserFlag;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass OfferTrialService\n{\n    protected array $ids = [];\n\n    public function ids(): array\n    {\n        return $this->ids;\n    }\n\n    public function run(): int\n    {\n        $this->find();\n\n        return count($this->ids);\n    }\n\n    protected function find(): void\n    {\n        $ids = json_decode(Storage::disk('local')->get('promo.json'), true);\n        // $ids = [];\n\n        $users = User::select('users.id')\n            ->where('last_login_at', '>', now()->subMonths(3))\n            ->leftJoin('user_flags', 'user_flags.user_id', '=', 'users.id')\n            ->where(function ($query) {\n                $query->whereNull('pledge')->orWhere('pledge', '');\n            })\n            ->whereNull('user_flags.id')\n            ->whereNull('users.booster_count')\n            ->whereIn('users.id', $ids)\n            ->get();\n        foreach ($users as $user) {\n            $this->flag($user);\n        }\n    }\n\n    protected function flag(User $user): void\n    {\n        $this->ids[] = $user->id;\n\n        $flag = new UserFlag;\n        $flag->user_id = $user->id;\n        $flag->flag = UserFlags::freeTrial;\n        $flag->save();\n    }\n}\n"
  },
  {
    "path": "app/Services/Users/PurgeService.php",
    "content": "<?php\n\nnamespace App\\Services\\Users;\n\nuse App\\Enums\\UserFlags;\nuse App\\Jobs\\Emails\\Purge\\FirstWarningJob;\nuse App\\Jobs\\Emails\\Purge\\SecondWarningJob;\nuse App\\Jobs\\Users\\DeleteUser;\nuse App\\Models\\JobLog;\nuse App\\Models\\User;\nuse App\\Models\\UserFlag;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass PurgeService\n{\n    protected int $count = 0;\n\n    protected string $date;\n\n    protected array $warnedIds = [];\n\n    protected bool $dry = true;\n\n    protected int $limit;\n\n    public function date(string $date): self\n    {\n        $this->date = $date;\n\n        return $this;\n    }\n\n    public function real(): self\n    {\n        $this->dry = false;\n\n        return $this;\n    }\n\n    public function limit(int $limit): self\n    {\n        $this->limit = $limit;\n\n        return $this;\n    }\n\n    /**\n     * Accounts that haven't logged in during two years and have no campaign whatsoever\n     */\n    public function empty(): int\n    {\n        $this->reset();\n        User::select('users.*')\n            ->leftJoin('campaign_user as cu', 'cu.user_id', 'users.id')\n            ->where(function ($sub) {\n                $sub->whereNull('last_login_at')\n                    ->orWhereDate('last_login_at', '<=', $this->date);\n            })\n            ->whereDate('users.created_at', '<=', $this->date)\n            ->where(function ($sub) {\n                $sub->where('users.pledge', '')\n                    ->orWhereNull('users.pledge');\n            })\n            ->whereNull('cu.id')\n            ->whereNull('users.stripe_id')\n            ->chunk(500, function ($users) {\n                echo \"New chunk\\n\";\n                if ($this->count >= $this->limit) {\n                    return false;\n                }\n                /** @var User $user */\n                foreach ($users as $user) {\n                    if ($this->count >= $this->limit) {\n                        return false;\n                    }\n                    $this->count++;\n                    if (! $this->dry) {\n                        DeleteUser::dispatch($user);\n                    }\n                }\n            });\n\n        return $this->count;\n    }\n\n    /**\n     * Accounts that haven't logged in during two years and only have a campaign with the boilerplate stuff\n     */\n    public function example(): int\n    {\n        // $this->reset();\n\n        if ($this->count >= $this->limit) {\n            return 0;\n        }\n\n        User::distinct()\n            ->select('users.id')\n            ->leftJoin('campaign_user as cu', 'cu.user_id', 'users.id')\n            /*->with([\n                'campaigns' => function ($sub) {\n                    $sub->select('campaigns.id');\n                },\n                'campaigns.users' => function ($sub) {\n                    $sub->select('users.id');\n                }\n            ])*/\n            ->where(function ($sub) {\n                $sub->whereNull('last_login_at')\n                    ->orWhereDate('last_login_at', '<=', $this->date);\n            })->whereDate('users.created_at', '<=', $this->date)\n            ->where(function ($sub) {\n                $sub->where('users.pledge', '')\n                    ->orWhereNull('users.pledge');\n            })\n            ->where(DB::raw('(select count(cu2.id) from campaign_user as cu2 where cu2.user_id = users.id)'), '=', 1)\n            ->where(DB::raw('(select count(cu3.id) from campaign_user as cu3 where cu3.campaign_id = cu.campaign_id)'), '=', 1)\n            ->where(DB::raw('(select count(e.id) from entities as e where e.created_by = users.id and e.deleted_at is null)'), '<', 7)\n            ->whereNull('users.stripe_id')\n\n            ->chunk(2000, function ($users) {\n                echo \"New chunk\\n\";\n                if ($this->count >= $this->limit) {\n                    return false;\n                }\n                /** @var User $user */\n                foreach ($users as $user) {\n                    if ($this->count >= $this->limit) {\n                        return false;\n                    }\n                    $this->count++;\n                    if (! $this->dry) {\n                        DeleteUser::dispatch($user);\n                    }\n                }\n            });\n\n        return $this->count;\n    }\n\n    protected function reset(): void\n    {\n        $this->count = 0;\n    }\n\n    /**\n     * Inactive users for > 18 months, warn them of their upcoming deletion\n     */\n    public function firstWarning(): int\n    {\n        if ($this->count >= $this->limit) {\n            return 0;\n        }\n\n        $cutoff = config('purge.users.first.inactivity');\n        $this->date = Carbon::now()->subMonths($cutoff);\n        User::distinct()\n            ->select('users.id')\n            ->leftJoin('user_flags as f', function ($sub) {\n                return $sub\n                    ->on('f.user_id', 'users.id')\n                    ->where('f.flag', UserFlags::firstWarning->value);\n            })\n            ->where(function ($sub) {\n                $sub->whereNull('last_login_at')\n                    ->orWhereDate('last_login_at', '<=', $this->date);\n            })\n            ->whereDate('users.created_at', '<=', $this->date)\n            ->where(function ($sub) {\n                $sub->where('users.pledge', '')\n                    ->orWhereNull('users.pledge');\n            })\n            ->whereNull('f.id')\n            ->whereNull('users.stripe_id')\n            ->limit($this->limit)\n            ->chunk(1000, function ($users) {\n                if ($this->count >= $this->limit) {\n                    return false;\n                }\n                foreach ($users as $user) {\n                    if ($this->count >= $this->limit) {\n                        return false;\n                    }\n\n                    // Add a flag for this user\n                    if (! $this->dry) {\n                        $flag = new UserFlag;\n                        $flag->user_id = $user->id;\n                        $flag->flag = UserFlags::firstWarning;\n                        $flag->save();\n\n                        FirstWarningJob::dispatch($user->id);\n                    }\n\n                    $this->warnedIds[] = $user->id;\n                    $this->count++;\n                }\n            });\n\n        JobLog::create([\n            'name' => 'users:purge',\n            'result' => 'First warning: ' . implode(', ', $this->warnedIds),\n        ]);\n        $this->warnedIds = [];\n\n        return $this->count;\n    }\n\n    public function secondWarning(): int\n    {\n        $this->reset();\n        if ($this->count >= $this->limit) {\n            return 0;\n        }\n\n        // First warning send 23 days ago\n        $cutoff = Carbon::now()\n            ->subDays(config('purge.users.first.limit'))\n            ->addDays(config('purge.users.second.limit'));\n        User::distinct()\n            ->select('users.id')\n            ->leftJoin('user_flags as f', function ($sub) {\n                return $sub\n                    ->on('f.user_id', 'users.id')\n                    ->where('f.flag', UserFlags::firstWarning->value);\n            })\n            ->leftJoin('user_flags as f2', function ($sub) {\n                return $sub\n                    ->on('f2.user_id', 'users.id')\n                    ->where('f2.flag', UserFlags::secondWarning->value);\n            })\n            ->where(function ($sub) {\n                $sub->where('users.pledge', '')\n                    ->orWhereNull('users.pledge');\n            })\n            ->where('f.created_at', '<=', $cutoff)\n            ->whereNull('f2.id')\n            ->whereNull('users.stripe_id')\n            ->limit($this->limit)\n            ->chunk(1000, function ($users) {\n                if ($this->count >= $this->limit) {\n                    return false;\n                }\n                foreach ($users as $user) {\n                    if ($this->count >= $this->limit) {\n                        return false;\n                    }\n\n                    // Add a flag for this user\n                    if (! $this->dry) {\n                        $flag = new UserFlag;\n                        $flag->user_id = $user->id;\n                        $flag->flag = UserFlags::secondWarning;\n                        $flag->save();\n\n                        SecondWarningJob::dispatch($user->id);\n                    }\n\n                    $this->warnedIds[] = $user->id;\n                    $this->count++;\n                }\n            });\n\n        JobLog::create([\n            'name' => 'users:purge',\n            'result' => 'Second warning: ' . implode(', ', $this->warnedIds),\n        ]);\n        $this->warnedIds = [];\n\n        return $this->count;\n    }\n\n    /**\n     * Permanently delete users who haven't logged in and contributed in a long time\n     */\n    public function purge(): int\n    {\n        $this->reset();\n        if ($this->count >= $this->limit) {\n            return 0;\n        }\n\n        // Warning 2 sent 7 days ago\n        $cutoff = Carbon::now()\n            ->subDays(config('purge.users.second.limit'));\n        User::distinct()\n            ->select('users.id')\n            ->leftJoin('user_flags as f', function ($sub) {\n                return $sub\n                    ->on('f.user_id', 'users.id')\n                    ->where('f.flag', UserFlags::secondWarning->value);\n            })\n            ->where(function ($sub) {\n                $sub->where('users.pledge', '')\n                    ->orWhereNull('users.pledge');\n            })\n            ->where('f.created_at', '<=', $cutoff)\n            ->whereNull('users.stripe_id')\n            ->limit($this->limit)\n            ->chunkById(1000, function ($users) {\n                if ($this->count >= $this->limit) {\n                    return false;\n                }\n                /** @var User $user */\n                foreach ($users as $user) {\n                    if ($this->count >= $this->limit) {\n                        return false;\n                    }\n\n                    // Add a flag for this user\n                    if (! $this->dry) {\n                        DeleteUser::dispatch($user);\n                    }\n\n                    $this->warnedIds[$user->id] = $user->email;\n                    $this->count++;\n                }\n            }, 'users.id', 'id');\n\n        JobLog::create([\n            'name' => 'users:purge',\n            'result' => 'Purged: ' . collect($this->warnedIds)\n                ->map(fn ($v, $k) => \"$k:$v\")\n                ->implode(', '),\n        ]);\n        $this->warnedIds = [];\n\n        return $this->count;\n    }\n}\n"
  },
  {
    "path": "app/Services/Users/UserLogService.php",
    "content": "<?php\n\nnamespace App\\Services\\Users;\n\nuse App\\Models\\UserLog;\nuse Carbon\\Carbon;\n\nclass UserLogService\n{\n    protected int $count;\n\n    public function count(): int\n    {\n        return $this->count;\n    }\n\n    public function anonymize(): self\n    {\n        $cutoff = config('logging.anonymize');\n        $this->count = UserLog::whereDate('created_at', Carbon::today()->subDays($cutoff)->format('Y-m-d'))\n            ->update(['ip' => null, 'country' => null]);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Services/WebhookService.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Module;\nuse App\\Http\\Resources\\EntityResource;\nuse App\\Models\\Webhook;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\EntityAware;\nuse App\\Traits\\UserAware;\nuse Exception;\nuse Illuminate\\Support\\Facades\\Http;\nuse Illuminate\\Support\\Str;\n\nclass WebhookService\n{\n    use CampaignAware;\n    use EntityAware;\n    use UserAware;\n\n    public function process(int $action)\n    {\n        Module::campaign($this->campaign);\n        // Todo: move all of this to a service so it can be tested\n        $webhooks = Webhook::active($this->campaign->id, $action)->with('tags')->get();\n        $entityTags = $this->entity->tags()->pluck('tags.id')->all();\n        foreach ($webhooks as $webhook) {\n            if ($this->isInvalid($webhook, $entityTags)) {\n                continue;\n            }\n\n            if ($webhook->type == 1) {\n                $data = Str::replace(\n                    ['{name}', '{who}', '{url}'],\n                    [$this->entity->name, $this->user->name, route('entities.show', [$this->campaign->id, $this->entity])],\n                    $webhook->message\n                );\n            } else {\n                CampaignLocalization::forceCampaign($this->entity->campaign);\n                $data = [\n                    'event' => [\n                        'id' => uniqid(),\n                        'type' => $webhook->typeKey(),\n                        'webhook_id' => $webhook->id,\n                        'timestamp' => time(),\n                    ],\n                    'entity' => new EntityResource($this->entity),\n                ];\n            }\n\n            if ($webhook->shortUrl() == 'discord') {\n                if ($webhook->type == 2) {\n                    $data = json_encode($data);\n                }\n                $embeds = [\n                    'title' => $this->entity->name,\n                    'description' => strval($data),\n                    'color' => config('discord.color'),\n                    'url' => route('entities.show', [$this->campaign->id, $this->entity]),\n                    'author' => [\n                        'name' => 'Kanka Webhooks',\n                    ],\n                ];\n\n                if ($this->entity->hasImage(true)) {\n                    $embeds['thumbnail'] = [\n                        'url' => Avatar::entity($this->entity)->size(192)->thumbnail(),\n                    ];\n                }\n\n                $data = [\n                    'embeds' => [\n                        $embeds,\n                    ],\n                ];\n            }\n\n            try {\n                Http::post($webhook->url, $data);\n            } catch (Exception $e) {\n                // Don't do anything with failures\n            }\n        }\n    }\n\n    public function test(Webhook $webhook)\n    {\n\n        if ($webhook->type == 1) {\n            $data = Str::replace(\n                ['{name}', '{who}', '{url}'],\n                ['Thaelia', $this->user->name, route('locations.index', [$this->campaign])],\n                $webhook->message\n            );\n        } else {\n            $data = [\n                'event' => [\n                    'id' => uniqid(),\n                    'type' => $webhook->typeKey(),\n                    'webhook_id' => $webhook->id,\n                    'timestamp' => time(),\n                ],\n                'entity' => '{\"id\": 1,\"name\":\"Thaelia\",\"entry\":\"\\n<p>Lorem Ipsum.</p>\\n\",\"image\":\"{path}\",\"image_full\":\"{url}\",\"image_thumb\":\"{url}\",\"has_custom_image\":false,\"is_private\":true,\"location_id\": null,\"entity_id\": 5,\"tags\":[],\"created_at\":\"2019-01-30T00:01:44.000000Z\",\"created_by\": 1,\"updated_at\":\"2019-08-29T13:48:54.000000Z\",\"updated_by\":1,\"location_id\":4,\"type\":\"Kingdom\"}',\n            ];\n        }\n\n        if ($webhook->shortUrl() == 'discord') {\n            if ($webhook->type == 2) {\n                $data = json_encode($data);\n            }\n            $embeds = [\n                'title' => 'Thaelia',\n                'description' => strval($data),\n                'color' => config('discord.color'),\n                'url' => route('locations.index', [$this->campaign]),\n                'author' => [\n                    'name' => 'Kanka Webhooks',\n                ],\n            ];\n\n            $data = [\n                'embeds' => [\n                    $embeds,\n                ],\n            ];\n        }\n\n        try {\n            Http::post($webhook->url, $data);\n        } catch (Exception $e) {\n            // Don't do anything with failures\n        }\n    }\n\n    protected function isInvalid(Webhook $webhook, array $entityTags): bool\n    {\n        // Check if the entity is private or the webhook supports private entities.\n        if ($this->entity->is_private && $webhook->skipPrivate()) {\n            return true;\n        }\n\n        // Check that entity has at least one of the tags the webhook has.\n        if ($webhook->tags()->count() === 0) {\n            return false;\n        }\n        $tags = $webhook->tags()->pluck('tags.id')->all();\n\n        return (bool) (empty(array_intersect($entityTags, $tags)));\n    }\n}\n"
  },
  {
    "path": "app/Services/Whiteboards/ApiService.php",
    "content": "<?php\n\nnamespace App\\Services\\Whiteboards;\n\nuse App\\Facades\\Avatar;\nuse App\\Http\\Resources\\Whiteboards\\EntityResource;\nuse App\\Http\\Resources\\Whiteboards\\ShapeResource;\nuse App\\Models\\Entity;\nuse App\\Models\\Image;\nuse App\\Models\\Whiteboard;\nuse App\\Models\\WhiteboardShape;\nuse App\\Traits\\CampaignAware;\nuse App\\Traits\\UserAware;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Number;\n\nclass ApiService\n{\n    use CampaignAware;\n    use UserAware;\n\n    protected Whiteboard $whiteboard;\n\n    protected array $data = [];\n\n    protected array $images = [];\n\n    protected array $entityIds = [];\n\n    public function whiteboard(Whiteboard $whiteboard): self\n    {\n        $this->whiteboard = $whiteboard;\n\n        return $this;\n    }\n\n    public function load(): array\n    {\n        $this->data['name'] = $this->whiteboard->name;\n        $this->loadShapes();\n        $this->loadEntities();\n        $this->loadImages();\n        $this->translations();\n        $this->urls();\n        $this->interactive();\n        $this->fixData();\n\n        return $this->data;\n    }\n\n    protected function loadShapes(): self\n    {\n        $this->data['data'] = $this->whiteboard->data ?? [];\n\n        /** @var WhiteboardShape[]|Collection $shapes */\n        $shapes = $this->whiteboard->shapes()->with(['whiteboard', 'whiteboard.campaign'])->get();\n        $this->data['data'] = ShapeResource::collection($shapes);\n\n        // Collect image UUIDs from image shapes\n        foreach ($shapes as $shape) {\n            if ($shape->isImage()) {\n                $uuid = Arr::get($shape->shape, 'uuid');\n                if ($uuid) {\n                    $this->images[] = $uuid;\n                }\n            } elseif ($shape->isEntity()) {\n                $entity = Arr::get($shape->shape, 'entity_id');\n                if ($entity) {\n                    $this->entityIds[] = $entity;\n                }\n            }\n        }\n\n        return $this;\n    }\n\n    protected function loadImages(): void\n    {\n        $this\n            ->loadGallery();\n    }\n\n    protected function translations(): void\n    {\n        $this->data['i18n'] = [\n            'close' => __('crud.actions.close'),\n            'save' => __('crud.save'),\n            'create' => __('crud.create'),\n            'delete' => __('crud.permissions.actions.delete'),\n            'add-square' => __('whiteboards/draw.actions.add-square'),\n            'add-circle' => __('whiteboards/draw.actions.add-circle'),\n            'add-entity' => __('whiteboards/draw.actions.add-entity'),\n            'add-image' => __('whiteboards/draw.actions.add-image'),\n            'start-drawing' => __('whiteboards/draw.actions.start-drawing'),\n            'end-drawing' => __('whiteboards/draw.actions.end-drawing'),\n            'color' => __('whiteboards/draw.fields.color'),\n            'thin-stroke' => __('whiteboards/draw.pen.thin-stroke'),\n            'large-stroke' => __('whiteboards/draw.pen.large-stroke'),\n            'push-to-front' => __('whiteboards/draw.actions.push-to-front'),\n            'push-to-back' => __('whiteboards/draw.actions.push-to-back'),\n            'lock' => __('whiteboards/draw.actions.lock'),\n            'unlock' => __('whiteboards/draw.actions.unlock'),\n            'duplicate' => __('whiteboards/draw.actions.duplicate'),\n            'copy-success' => __('whiteboards/draw.toast.copy.success'),\n            'paste-error' => __('whiteboards/draw.toast.paste.error'),\n\n            // Reset\n            'reset-helper' => __('whiteboards/draw.reset.helper'),\n            'reset' => __('crud.actions.reset'),\n            'reset-title' => __('whiteboards/draw.reset.title'),\n\n            // General UI\n            'back' => __('whiteboards/draw.actions.back'),\n\n            // Entity search\n            'entity-search' => __('whiteboards/draw.entity-search.title'),\n            'search-placeholder' => __('whiteboards/draw.entity-search.placeholder'),\n\n            // Browse stuff\n            'cancel' => __('crud.cancel'),\n            'remove' => __('crud.remove'),\n            'url' => __('gallery.actions.url'),\n            'gallery' => __('gallery.actions.gallery'),\n            'unauthorized' => __('gallery.download.errors.unauthorized'),\n            'browse' => [\n                'title' => __('gallery.browse.title'),\n                'layouts' => [\n                    'small' => __('gallery.browse.layouts.small'),\n                    'large' => __('gallery.browse.layouts.large'),\n                ],\n                'search' => [\n                    'placeholder' => __('gallery.browse.search.placeholder'),\n                ],\n                'unauthorized' => __('gallery.browse.unauthorized'),\n            ],\n            'cta_title' => __('gallery.cta.title'),\n            'cta_action' => __('gallery.cta.action'),\n            'cta_helper' => __('gallery.cta.helper', [\n                'premium-campaign' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>',\n                'size' => Number::format(config('limits.gallery.premium') / (1024 * 1024), 2),\n            ]),\n            'qq-keyboard-shortcut' => __('crud.keyboard-shortcut', ['code' => '<code>N</code>']),\n\n            // Errors\n            'websocket-server-unavailable' => __('whiteboards/draw.errors.websockets.unavailable'),\n            'error-connecting-websocket' => __('whiteboards/draw.errors.websockets.error'),\n            'websocket-disconnected' => __('whiteboards/draw.errors.websockets.disconnected'),\n\n            'role-edit' => __('whiteboards/draw.roles.edit'),\n            'role-view' => __('whiteboards/draw.roles.view'),\n        ];\n    }\n\n    protected function loadEntities(): self\n    {\n        $entities = Entity::select('id', 'name', 'image_path', 'image_uuid', 'type_id')\n            ->with(['image', 'entityType'])\n            ->whereIn('id', $this->entityIds)\n            ->get();\n        /** @var Entity $entity */\n        foreach ($entities as $entity) {\n            $this->data['entities'][$entity->id] = new EntityResource($entity)->campaign($this->campaign);\n            $this->data['images'][$entity->id] = Avatar::entity($entity)->size(256)->fallback()->thumbnail();\n        }\n\n        return $this;\n    }\n\n    protected function loadGallery(): self\n    {\n        /** @var Image[] $images */\n        $images = Image::whereIn('id', $this->images)\n            ->get();\n        foreach ($images as $image) {\n            $this->data['images'][$image->id] = $image->url();\n        }\n\n        return $this;\n    }\n\n    protected function fixData(): void\n    {\n        foreach ($this->data['data'] as $id => $shape) {\n            if (! isset($shape['scaleX'])) {\n                $shape['scaleX'] = 1;\n            }\n            if (! isset($shape['scaleY'])) {\n                $shape['scaleY'] = 1;\n            }\n            $this->data['data'][$id] = $shape;\n        }\n    }\n\n    protected function urls(): void\n    {\n        $this->data['urls'] = [\n            'overview' => route('entities.show', [$this->campaign, $this->whiteboard->entity]),\n            'creator' => route('entity-creator.selection', $this->campaign),\n        ];\n    }\n\n    protected function interactive(): void\n    {\n        $pusher = config('broadcasting.connections.reverb.key');\n        if (empty($pusher) || ! isset($this->user)) {\n            return;\n        }\n\n        if (! $this->user->can('view', $this->whiteboard->entity)) {\n            return;\n        }\n\n        $this->data['interactive'] = [\n            'key' => $pusher,\n            'host' => config('broadcasting.connections.reverb.options.host'),\n            'port' => config('broadcasting.connections.reverb.options.port'),\n            'scheme' => config('broadcasting.connections.reverb.options.scheme'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/Whiteboards/Shapes/PersistanceService.php",
    "content": "<?php\n\nnamespace App\\Services\\Whiteboards\\Shapes;\n\nuse App\\Models\\Whiteboard;\nuse App\\Models\\WhiteboardShape;\nuse App\\Models\\WhiteboardStroke;\nuse App\\Traits\\RequestAware;\nuse Illuminate\\Support\\Arr;\nuse InvalidArgumentException;\n\nclass PersistanceService\n{\n    use RequestAware;\n\n    protected WhiteboardShape $shape;\n\n    protected Whiteboard $whiteboard;\n\n    protected array $fill;\n\n    public function shape(WhiteboardShape $shape): self\n    {\n        $this->shape = $shape;\n\n        return $this;\n    }\n\n    public function whiteboard(Whiteboard $whiteboard): self\n    {\n        $this->whiteboard = $whiteboard;\n\n        return $this;\n    }\n\n    public function create(): WhiteboardShape\n    {\n        $this->shape = new WhiteboardShape;\n        $this->shape->whiteboard_id = $this->whiteboard->id;\n        $this->cleanData();\n        $this->shape->save();\n        $this->points();\n\n        return $this->shape;\n    }\n\n    public function save(): void\n    {\n        $data = $this->request->only([\n            'x',\n            'y',\n            'width',\n            'height',\n            'scale_x',\n            'scale_y',\n            'group_id',\n            'rotation',\n            'is_locked',\n            'z_index',\n        ]);\n        $this->shape->fill($data);\n        $this->fillShape();\n\n        $this->shape->save();\n    }\n\n    public function addStroke(): ?WhiteboardStroke\n    {\n        if (! $this->shape->isDrawing()) {\n            return null;\n        }\n\n        if (! $this->request->filled('points')) {\n            return null;\n        }\n\n        $stroke = new WhiteboardStroke;\n        $stroke->shape_id = $this->shape->id;\n        $stroke->color = $this->request->get('fill', '#cccccc');\n        $stroke->width = $this->request->get('strokeWidth', 1);\n        $stroke->points = $this->pack($this->request->get('points'));\n        $stroke->save();\n\n        return $stroke;\n    }\n\n    protected function cleanData(): void\n    {\n        $data = $this->request->except('shape');\n        $this->shape->fill($data);\n        $this->shape->shape = [];\n\n        // Do the shape stuff\n        $this->fillShape();\n    }\n\n    protected function fillShape(): void\n    {\n        $this->fill = $this->shape->shape;\n        if ($this->shape->isRectangle()) {\n            $this->colour();\n        } elseif ($this->shape->isCircle()) {\n            $this->colour();\n        } elseif ($this->shape->isText()) {\n            $this->colour()\n                ->text();\n        } elseif ($this->shape->isImage()) {\n            $this->gallery();\n        } elseif ($this->shape->isEntity()) {\n            $this->entity()\n                ->colour();\n        } elseif ($this->shape->isDrawing()) {\n\n        }\n        $this->shape->shape = $this->fill;\n    }\n\n    protected function colour(): self\n    {\n        if ($this->request->filled('fill')) {\n            $this->fill['fill'] = $this->request->get('fill');\n        }\n\n        return $this;\n    }\n\n    protected function text(): self\n    {\n        if ($this->request->filled('text')) {\n            $this->fill['text'] = $this->request->get('text');\n        }\n        if ($this->request->filled('fontSize')) {\n            $this->fill['fontSize'] = $this->request->get('fontSize');\n        }\n\n        return $this;\n    }\n\n    protected function gallery(): self\n    {\n        if ($this->request->filled('uuid')) {\n            $this->fill['uuid'] = $this->request->get('uuid');\n        }\n\n        return $this;\n    }\n\n    protected function entity(): self\n    {\n        if ($this->request->filled('entity_id')) {\n            $this->fill['entity_id'] = $this->request->get('entity_id');\n        }\n\n        return $this;\n    }\n\n    protected function points(): void\n    {\n        if (! $this->shape->isDrawing()) {\n            return;\n        }\n\n        if (! $this->request->filled('children')) {\n            return;\n        }\n\n        $children = $this->request->get('children');\n        foreach ($children as $data) {\n            $stroke = new WhiteboardStroke;\n            $stroke->shape_id = $this->shape->id;\n            $stroke->color = Arr::get($data, 'fill', '#cccccc');\n            $stroke->width = Arr::get($data, 'strokeWidth', 1);\n            $stroke->points = $this->pack($data['points']);\n            $stroke->save();\n        }\n    }\n\n    /**\n     * Pack an array of points into a binary blob string\n     */\n    protected function pack(array $points, int $scale = 1000): string\n    {\n        $bin = '';\n        $count = count($points);\n\n        if ($count % 2 !== 0) {\n            throw new InvalidArgumentException('Point array must have even length');\n        }\n\n        for ($i = 0; $i < $count; $i += 2) {\n            $x = (int) round($points[$i] * $scale);\n            $y = (int) round($points[$i + 1] * $scale);\n\n            $bin .= pack('q', $x);\n            $bin .= pack('q', $y);\n        }\n\n        return $bin;\n    }\n}\n"
  },
  {
    "path": "app/Support/HtmlPurifier/CalcStyleDefinition.php",
    "content": "<?php\n\nnamespace App\\Support\\HtmlPurifier;\n\nuse HTMLPurifier_AttrDef;\nuse HTMLPurifier_AttrDef_Enum;\nuse Illuminate\\Support\\Str;\n\nclass CalcStyleDefinition extends HTMLPurifier_AttrDef\n{\n    /**\n     * Bool indicating whether enumeration is case-sensitive.\n     *\n     * @note In general this is always case-insensitive.\n     */\n    protected bool $caseSensitive = false; // values according to W3C spec\n\n    /**\n     * @param  bool  $caseSensitive  Whether case-sensitive\n     */\n    public function __construct(bool $caseSensitive = false)\n    {\n        $this->caseSensitive = $caseSensitive;\n    }\n\n    /**\n     * @param  string  $string\n     * @param  \\HTMLPurifier_Config  $config\n     * @param  \\HTMLPurifier_Context  $context\n     * @return bool|string\n     */\n    public function validate($string, $config, $context)\n    {\n        $string = mb_trim($string);\n        if (! $this->caseSensitive) {\n            // we may want to do full case-insensitive libraries\n            $string = ctype_lower($string) ? $string : mb_strtolower($string);\n        }\n        if (Str::contains($string, ['&', '<'])) {\n            return false;\n        }\n        $result = preg_match('`calc\\((.*)\\)`', $string);\n\n        return $result ? $string : false;\n    }\n\n    /**\n     * I have no idea what this is for, sorry.\n     *\n     * @param  string  $string  In form of comma-delimited list of case-insensitive\n     *                          valid values. Example: \"foo,bar,baz\". Prepend \"s:\" to make\n     *                          case-sensitive\n     * @return HTMLPurifier_AttrDef_Enum\n     */\n    public function make($string)\n    {\n        if (mb_strlen($string) > 2 && $string[0] == 's' && $string[1] == ':') {\n            $string = mb_substr($string, 2);\n            $sensitive = true;\n        } else {\n            $sensitive = false;\n        }\n        $values = explode(',', $string);\n\n        return new HTMLPurifier_AttrDef_Enum($values, $sensitive);\n    }\n}\n"
  },
  {
    "path": "app/Traits/AdminPolicyTrait.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\User;\n\ntrait AdminPolicyTrait\n{\n    /**\n     * Cached value of the check\n     */\n    protected bool $cachedAdminPolicy;\n\n    /**\n     * Determine if a user is admin of a campaign\n     */\n    public function isAdmin(User $user): bool\n    {\n        if (isset($this->cachedAdminPolicy)) {\n            return $this->cachedAdminPolicy;\n        }\n        $this->cachedAdminPolicy = false;\n        $campaign = CampaignLocalization::getCampaign();\n        /** @var CampaignRole[] $roles */\n        $roles = $user->campaignRoles->where('campaign_id', $campaign->id);\n        foreach ($roles as $role) {\n            if ($role->is_admin) {\n                $this->cachedAdminPolicy = true;\n            }\n        }\n\n        return $this->cachedAdminPolicy;\n    }\n}\n"
  },
  {
    "path": "app/Traits/ApiRequest.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Facades\\Domain;\n\ntrait ApiRequest\n{\n    /**\n     * On API PUT requests, don't have all the fields as required\n     */\n    public function clean(array $rules, array $except = []): array\n    {\n        $isApi = Domain::isApi() || app()->environment('testing');\n        if (! $isApi || ! (request()->isMethod('put') || request()->isMethod('patch'))) {\n            return $rules;\n        }\n\n        foreach ($rules as $field => $rule) {\n            if (! is_string($rule)) {\n                if (($key = array_search('required', $rule, true)) !== false) {\n                    unset($rule[$key]);\n                    $rules[$field] = $rule;\n\n                }\n\n                continue;\n            }\n\n            // Remove any required| rule, and remove any alone |\n            $rules[$field] = mb_trim(\n                str_replace('required|', '', $rule),\n                '|'\n            );\n        }\n\n        if ($except) {\n            // Do something with this?\n        }\n\n        return $rules;\n    }\n}\n"
  },
  {
    "path": "app/Traits/BulkControllerTrait.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Datagrids\\Bulks\\Bulk;\nuse App\\Datagrids\\Bulks\\DefaultBulk;\nuse App\\Models\\Bookmark;\nuse App\\Models\\MiscModel;\nuse App\\Models\\Relation;\nuse Illuminate\\Support\\Str;\n\ntrait BulkControllerTrait\n{\n    /**\n     * Get the Bulk model of an entity\n     */\n    protected function bulkModel(MiscModel|Relation|Bookmark|null $modelClass = null): Bulk\n    {\n        if (isset($this->bulk) && ! empty($this->bulk)) {\n            return new $this->bulk;\n        }\n\n        if ($modelClass !== null) {\n            $bulkClass = 'App\\Datagrids\\Bulks\\\\' . Str::studly(Str::singular($modelClass->getTable())) . 'Bulk';\n        } else {\n            // @phpstan-ignore-next-line\n            $model = new $this->model;\n            $bulkClass = 'App\\Datagrids\\Bulks\\\\' . Str::studly(Str::singular($model->getTable())) . 'Bulk';\n        }\n\n        if (class_exists($bulkClass)) {\n            return new $bulkClass;\n        }\n\n        return new DefaultBulk;\n    }\n}\n"
  },
  {
    "path": "app/Traits/CalendarAware.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Models\\Calendar;\n\ntrait CalendarAware\n{\n    public Calendar $calendar;\n\n    public function calendar(Calendar $calendar): self\n    {\n        $this->calendar = $calendar;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Traits/CampaignAware.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Models\\Campaign;\n\n/**\n * Trait for campaign aware services\n */\ntrait CampaignAware\n{\n    public Campaign $campaign;\n\n    public function campaign(Campaign $campaign): self\n    {\n        $this->campaign = $campaign;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Traits/Controllers/HasDatagrid.php",
    "content": "<?php\n\nnamespace App\\Traits\\Controllers;\n\nuse App\\Facades\\Datagrid;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Http\\JsonResponse;\n\ntrait HasDatagrid\n{\n    protected LengthAwarePaginator $rows;\n\n    /**\n     * @return JsonResponse\n     */\n    protected function datagridAjax()\n    {\n        $html = view('layouts.datagrid._table')\n            ->with('rows', $this->rows)\n            ->with('campaign', $this->campaign)\n            ->render();\n        $deletes = view('layouts.datagrid.delete-forms')\n            ->with('models', Datagrid::deleteForms())\n            ->with('params', Datagrid::getActionParams())\n            ->with('campaign', $this->campaign)\n            ->render();\n\n        $data = [\n            'success' => true,\n            'html' => $html,\n            'deletes' => $deletes,\n        ];\n\n        return response()->json($data);\n    }\n}\n"
  },
  {
    "path": "app/Traits/Controllers/HasNested.php",
    "content": "<?php\n\nnamespace App\\Traits\\Controllers;\n\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Session;\n\ntrait HasNested\n{\n    public function saveNested(string $key): bool\n    {\n        $new = (bool) $this->request->get('n');\n        if (auth()->guest()) {\n            Session::put($key, $new);\n        } else {\n            $settings = auth()->user()->settings;\n            if (auth()->check() && Arr::get($settings, $key) !== $new) {\n                $settings = auth()->user()->settings;\n                if ($new) {\n                    unset($settings[$key]);\n                } else {\n                    $settings[$key] = false;\n                }\n                auth()->user()->settings = $settings;\n                auth()->user()->updateQuietly();\n            }\n        }\n\n        return $new;\n    }\n}\n"
  },
  {
    "path": "app/Traits/Controllers/HasSubview.php",
    "content": "<?php\n\nnamespace App\\Traits\\Controllers;\n\nuse App\\Enums\\Descendants;\nuse App\\Models\\Entity;\n\ntrait HasSubview\n{\n    protected Descendants $descendantsMode;\n\n    public function subview(string $view, $model)\n    {\n        return view('cruds.subview')\n            ->with([\n                'fullview' => $view,\n                'model' => $model,\n                'entity' => $model instanceof Entity ? $model : $model->entity,\n                'campaign' => $this->campaign,\n                'rows' => $this->rows,\n                'mode' => $this->descendantsMode(),\n            ]);\n    }\n\n    protected function filterToDirect(): bool\n    {\n        return $this->descendantsMode() === Descendants::Direct;\n    }\n\n    protected function filterToAll(): bool\n    {\n        return $this->descendantsMode() === Descendants::All;\n    }\n\n    protected function descendantsMode(): Descendants\n    {\n        if (isset($this->descendantsMode)) {\n            return $this->descendantsMode;\n        }\n        if (request()->has('m')) {\n            if (request()->get('m') == Descendants::All->value) {\n                return $this->descendantsMode = Descendants::All;\n            } elseif (request()->get('m') == Descendants::Direct->value) {\n                return $this->descendantsMode = Descendants::Direct;\n            }\n        }\n\n        return $this->descendantsMode = $this->campaign->defaultDescendantsMode();\n    }\n}\n"
  },
  {
    "path": "app/Traits/CreatesEntityFromName.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Facades\\CampaignLocalization;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Models\\EntityType;\nuse App\\Models\\MiscModel;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Str;\nuse Stevebauman\\Purify\\Facades\\Purify;\n\ntrait CreatesEntityFromName\n{\n    /**\n     * Sanitize, authorize, and create a new MiscModel (Location, Character, etc.) from a name string.\n     * Returns the new model's ID, or null if creation is not possible.\n     *\n     * @param  class-string<MiscModel>  $classname\n     */\n    protected function createModelFromName(string $name, string $classname, EntityType $entityType, Campaign $campaign, bool $returnEntityId = false): ?int\n    {\n        $name = mb_trim(Purify::clean($name));\n        if (empty($name)) {\n            return null;\n        }\n\n        if (! auth()->user()->can('create', [$entityType, $campaign])) {\n            return null;\n        }\n\n        /** @var MiscModel $model */\n        $model = new $classname([\n            'name' => $name,\n            'campaign_id' => $campaign->id,\n            'is_private' => false,\n        ]);\n\n        return DB::transaction(function () use ($model, $returnEntityId): int {\n            $model->saveQuietly();\n            $model->createEntity();\n\n            return $returnEntityId ? $model->entity->id : $model->id;\n        });\n    }\n\n    /**\n     * For each value in the array, if it is a non-numeric string, create a new entity with that name.\n     * Returns an array of model IDs ready for relationship syncing.\n     *\n     * @param  array<mixed>  $values\n     * @param  class-string<MiscModel>  $classname\n     * @return array<int>\n     */\n    public function resolveNewModels(array $values, string $classname, int $entityTypeId): array\n    {\n        $campaign = $entityType = null;\n        $resolved = [];\n\n        foreach ($values as $value) {\n            if ($value === null) {\n                continue;\n            }\n            if (is_numeric($value)) {\n                $resolved[] = (int) $value;\n\n                continue;\n            }\n\n            if ($campaign === null) {\n                $campaign = CampaignLocalization::getCampaign();\n                $entityType = $campaign->getEntityTypes()->firstWhere('id', $entityTypeId);\n            }\n\n            $name = Str::startsWith($value, 'new:') ? Str::substr($value, 4) : $value;\n            $id = $this->createModelFromName($name, $classname, $entityType, $campaign);\n            if ($id !== null) {\n                $resolved[] = $id;\n            }\n        }\n\n        return $resolved;\n    }\n\n    /**\n     * Sanitize, authorize, and create a new custom Entity from a name string.\n     * Returns the new entity's ID, or null if creation is not possible.\n     */\n    protected function createEntityFromName(string $name, EntityType $entityType, Campaign $campaign): ?int\n    {\n        $name = mb_trim(Purify::clean($name));\n        if (empty($name)) {\n            return null;\n        }\n\n        if (! auth()->user()->can('create', [$entityType, $campaign])) {\n            return null;\n        }\n\n        $entity = new Entity([\n            'name' => $name,\n            'campaign_id' => $campaign->id,\n            'is_private' => false,\n        ]);\n        $entity->type_id = $entityType->id;\n        $entity->save();\n\n        return $entity->id;\n    }\n}\n"
  },
  {
    "path": "app/Traits/EntityAware.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Models\\Entity;\n\ntrait EntityAware\n{\n    public Entity $entity;\n\n    public function entity(Entity $entity): self\n    {\n        $this->entity = $entity;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Traits/EntityTypeAware.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Models\\EntityType;\n\ntrait EntityTypeAware\n{\n    public EntityType $entityType;\n\n    public function entityType(EntityType $entityType): self\n    {\n        $this->entityType = $entityType;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Traits/ExportableTrait.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse Exception;\n\ntrait ExportableTrait\n{\n    protected array $exportData;\n\n    /**\n     * Prepares the data of an entity to json.\n     *\n     * @throws Exception\n     */\n    public function export(): string\n    {\n        $this\n            ->baseExportData()\n            ->entityExportData()\n            ->foreignExportData();\n\n        return json_encode($this->exportData);\n    }\n\n    protected function baseExportData(): self\n    {\n        if (! isset($this->exportFields)) {\n            $this->exportData = $this->toArray();\n\n            return $this;\n        }\n        $this->exportData = [];\n        $baseFields = [\n            'id',\n            'name',\n            'created_at',\n            'updated_at',\n            'is_private',\n        ];\n        foreach ($this->exportFields as $field) {\n            if ($field !== 'base') {\n                $value = $this->$field;\n                $this->exportData[$field] = $value instanceof \\BackedEnum ? $value->value : $value;\n\n                continue;\n            }\n            foreach ($baseFields as $baseField) {\n                // @phpstan-ignore-next-line\n                $this->exportData[$baseField] = $this->$baseField;\n            }\n        }\n        // Parent relationship is now on entities.parent_id, exported via entity export\n\n        return $this;\n    }\n\n    protected function entityExportData(): self\n    {\n        if (isset($this->entity) && $this->entity) {\n            $this->exportData['entity'] = $this->entity->export();\n        }\n\n        return $this;\n    }\n\n    public function exportRelations(): array\n    {\n        // @phpstan-ignore-next-line\n        if (! property_exists($this, 'foreignExport')) {\n            return [];\n        }\n\n        return $this->foreignExport;\n    }\n\n    protected function foreignExportData(): self\n    {\n        foreach ($this->exportRelations() as $foreign) {\n            $this->exportData[$foreign] = [];\n            foreach ($this->$foreign as $model) {\n                try {\n                    if (method_exists($model, 'exportFields')) {\n                        $foreignData = [];\n                        foreach ($model->exportFields() as $field) {\n                            $foreignData[$field] = $model->$field;\n                        }\n                        $this->exportData[$foreign][] = $foreignData;\n                    } else {\n                        $this->exportData[$foreign][] = $model->toArray();\n                    }\n                } catch (Exception $e) {\n                    throw new Exception(\"Unknown relation '{$foreign}' on model \" . get_class($this) . '(' . $e->getMessage() . ')');\n                }\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Traits/GuestAuthTrait.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Enums\\Permission;\nuse App\\Facades\\EntityPermission;\nuse App\\Models\\Entity;\n\ntrait GuestAuthTrait\n{\n    public function authEntityView(?Entity $entity = null): void\n    {\n        if (empty($entity)) {\n            abort(403);\n        }\n        if ($entity->entityType->isStandard() && $entity->isMissingChild()) {\n            abort(403);\n        }\n        if (auth()->check()) {\n            $this->authorize('view', $entity);\n        } else {\n            $this->authorizeEntityForGuest(Permission::View, $entity);\n        }\n    }\n\n    /**\n     * Secondary Authentication for Guest users\n     *\n     * @return void\n     */\n    protected function authorizeEntityForGuest(Permission $permission, ?Entity $entity)\n    {\n        // If the misc model is null ($entity->child), the user has no valid access\n        if ($entity === null) {\n            abort(403);\n        }\n\n        // @phpstan-ignore-next-line\n        $permission = EntityPermission::entity($entity)->campaign($this->campaign)->can($permission);\n\n        // @phpstan-ignore-next-line\n        if ($this->campaign->id != $entity->campaign_id || ! $permission) {\n            // Raise an error\n            abort(403);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Traits/HasJobLog.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Models\\JobLog;\n\ntrait HasJobLog\n{\n    protected function log(mixed $data)\n    {\n        if (! config('app.log_jobs')) {\n            return;\n        }\n\n        JobLog::create([\n            'name' => $this->signature,\n            'result' => $data,\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Traits/MentionTrait.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\ntrait MentionTrait\n{\n    /**\n     * Extract the mentions from a text\n     */\n    public function extract(?string $text = null): array\n    {\n        $mentions = [];\n        if (empty($text)) {\n            return $mentions;\n        }\n\n        preg_match_all('`\\[([a-z]+):(.*?)\\]`i', $text, $segments);\n\n        foreach ($segments[1] as $id => $type) {\n            $options = explode('|', $segments[2][$id]);\n            // Force numbers in case someone copy-pasts mentions with <ins> tags\n            $id = Str::numbers(Arr::first($options));\n            $key = $type . '.' . $id;\n\n            $data = [\n                'type' => $type,\n                'id' => $id,\n            ];\n\n            if (count($options) > 1) {\n                // Skip the first segment\n                unset($options[0]);\n                foreach ($options as $option) {\n                    $subSegments = explode(':', $option);\n                    if (count($subSegments) === 1) {\n                        $data['text'] = Arr::first($subSegments);\n\n                        continue;\n                    }\n\n                    $type = Arr::first($subSegments);\n                    $value = Arr::last($subSegments);\n                    if ($type == 'page') {\n                        $data['page'] = $value;\n                    }\n                }\n            }\n\n            $mentions[$key] = $data;\n        }\n\n        return $mentions;\n    }\n\n    /**\n     * Extract the Images from a text\n     */\n    public function extractImages(?string $text = null): array\n    {\n        $images = [];\n\n        preg_match_all('/data-gallery-id=\"[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\"/i', $text, $segments);\n\n        foreach ($segments[0] as $key => $type) {\n            $id = mb_substr($type, 17, -1);\n            if (! in_array($id, $images)) {\n                $images[$key] = $id;\n            }\n        }\n\n        return $images;\n    }\n\n    /**\n     * Extract the formatting for a mention\n     */\n    protected function extractData(array $matches): array\n    {\n        $segments = explode('|', $matches[2]);\n\n        // The first block should always be type:id\n        $id = (int) Arr::first($segments);\n        $type = $matches[1];\n\n        $data = [\n            'type' => $type,\n            'id' => (int) $id,\n        ];\n\n        // Nothing else, we can go back\n        if (count($segments) < 2) {\n            return $data;\n        }\n\n        // Skip the first segment\n        unset($segments[0]);\n        foreach ($segments as $option) {\n            $subSegments = explode(':', $option);\n            if (count($subSegments) === 1) {\n                $data['text'] = Arr::first($subSegments);\n                $data['custom'] = true;\n\n                continue;\n            }\n\n            $type = Arr::first($subSegments);\n            $value = Arr::last($subSegments);\n            if (in_array($type, ['page', 'field', 'transclude'])) {\n                $data[$type] = mb_strtolower($value);\n                $data['custom'] = true;\n            } elseif (in_array($type, ['anchor', 'params', 'tooltip'])) {\n                $data[$type] = $value;\n                $data['custom'] = true;\n            } elseif ($type == 'alias') {\n                $data['alias'] = (int) $value;\n                $data['custom'] = true;\n            }\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "app/Traits/OrderableTrait.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Str;\n\n/**\n * @method static self|Builder order(string|null $data, string $defaultField)\n */\ntrait OrderableTrait\n{\n    public function scopeOrdered(Builder $query, ?string $data, string $defaultField = 'name')\n    {\n        // No token? Next.\n        if (! str_contains($data, $this->orderTrigger)) {\n            return $this->handleNoToken($query, $defaultField);\n        }\n\n        $field = str_replace($this->orderTrigger, '', $data);\n        $direction = 'ASC';\n\n        if (! empty($field) && ! Str::contains($field, '/')) {\n            $segments = explode('.', $field);\n            if (count($segments) > 1) {\n                $relationName = $segments[0];\n\n                // Make sure the relationship exists\n                if (method_exists($this, $relationName)) {\n                    return $query;\n                }\n\n                $relation = $this->{$relationName}();\n                $foreignName = $relation->getQuery()->getQuery()->from;\n\n                return $query\n                    ->select($this->getTable() . '.*')\n                    ->with($relationName)\n                    ->leftJoin($foreignName . ' as f', 'f.id', $this->getTable() . '.' . $relation->getForeignKeyName())\n                    ->orderBy(str_replace($relationName, 'f', $field), $direction);\n            } elseif ($data == 'events/date') {\n                return $query\n                    ->orderBy($this->getTable() . '.year', $direction)\n                    ->orderBy($this->getTable() . '.month', $direction)\n                    ->orderBy($this->getTable() . '.day', $direction);\n            } else {\n                return $query->orderBy($this->getTable() . '.' . $field, $direction);\n            }\n        }\n\n        return $query;\n    }\n\n    protected function handleNoToken(Builder $query, string $defaultField): Builder\n    {\n        if ($defaultField == 'name' && isset($this->orderDefaultField)) {\n            $defaultField = $this->orderDefaultField;\n        }\n        $defaultDir = $this->orderDefaultDir ?? 'asc';\n\n        if ($defaultField == 'events/date') {\n            return $query\n                ->orderBy('year', $defaultDir)\n                ->orderBy('month', $defaultDir)\n                ->orderBy('day', $defaultDir);\n        }\n\n        return $query->orderBy($defaultField, $defaultDir);\n    }\n}\n"
  },
  {
    "path": "app/Traits/PostAware.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Models\\Post;\n\ntrait PostAware\n{\n    public Post $post;\n\n    public function post(Post $post): self\n    {\n        $this->post = $post;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Traits/RequestAware.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse Illuminate\\Http\\Request;\n\n/**\n * Trait for request aware services\n */\ntrait RequestAware\n{\n    public ?Request $request;\n\n    public function request(Request $request): self\n    {\n        $this->request = $request;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Traits/ResolvesNewForeignEntities.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Facades\\CampaignLocalization;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Str;\n\ntrait ResolvesNewForeignEntities\n{\n    use CreatesEntityFromName;\n\n    /**\n     * Declare which FK fields may receive a new entity name as their value.\n     * Return an array of field_name => [ModelClass, entityTypeId].\n     * Override this method directly for fields that don't follow the {snake}_id convention.\n     *\n     * @return array<string, array{string, int}>\n     */\n    protected function newEntityFields(): array\n    {\n        $fields = [];\n        foreach ($this->foreignEntityFields ?? [] as $field) {\n            $key = str_replace('_id', '', $field);\n            $fields[$field] = ['App\\\\Models\\\\' . Str::studly($key), config(\"entities.ids.{$key}\")];\n        }\n\n        return $fields;\n    }\n\n    /**\n     * When true, parent_id accepts a new entity name and resolves to an entity ID\n     * of the same type as the form request (e.g. StoreLocation creates a Location).\n     *\n     * @return array<string, array{string, int}>\n     */\n    protected function newEntityParentFields(): array\n    {\n        if (! ($this->foreignEntityParent ?? false)) {\n            return [];\n        }\n\n        $typeCode = Str::snake(Str::after(class_basename($this), 'Store'));\n        $entityTypeId = config(\"entities.ids.{$typeCode}\");\n\n        if (empty($entityTypeId)) {\n            return [];\n        }\n\n        return [\n            'parent_id' => ['App\\\\Models\\\\' . Str::studly($typeCode), $entityTypeId],\n        ];\n    }\n\n    protected function prepareForValidation(): void\n    {\n        $this->resolveNewForeignEntities($this);\n    }\n\n    /**\n     * Resolve any typed-in entity names in FK fields into real IDs on the given request.\n     * Called directly by EditController when form requests are not DI-injected.\n     */\n    public function resolveNewForeignEntities(Request $request): void\n    {\n        foreach ($this->newEntityFields() as $field => [$classname, $entityTypeId]) {\n            $value = $request->input($field);\n            if (empty($value) || is_numeric($value)) {\n                continue;\n            }\n\n            $name = Str::startsWith($value, 'new:') ? Str::substr($value, 4) : $value;\n\n            // Always replace the string — with the new ID on success, or null so\n            // the nullable rule can pass cleanly rather than failing on \"integer\".\n            $resolved = $this->createNewForeignEntity($name, $classname, $entityTypeId);\n            $request->merge([$field => $resolved]);\n        }\n\n        foreach ($this->newEntityParentFields() as $field => [$classname, $entityTypeId]) {\n            $value = $request->input($field);\n            if (empty($value) || is_numeric($value)) {\n                continue;\n            }\n\n            $name = Str::startsWith($value, 'new:') ? Str::substr($value, 4) : $value;\n\n            $resolved = $this->createNewForeignEntityAsEntityId($name, $classname, $entityTypeId);\n            $request->merge([$field => $resolved]);\n        }\n    }\n\n    /**\n     * Return only the fields from newEntityFields() that were resolved during prepareForValidation().\n     * Used by EditController to sync resolved IDs back into the original request.\n     *\n     * @return array<string, mixed>\n     */\n    public function resolvedFields(): array\n    {\n        return array_intersect_key($this->all(), array_merge($this->newEntityFields(), $this->newEntityParentFields()));\n    }\n\n    protected function createNewForeignEntity(string $value, string $classname, int $entityTypeId): ?int\n    {\n        // AJAX calls are validation-only pre-flight requests; skip creation to avoid duplicates.\n        if (empty($value) || request()->ajax()) {\n            return null;\n        }\n\n        $campaign = CampaignLocalization::getCampaign();\n        $entityType = $campaign->getEntityTypes()->firstWhere('id', $entityTypeId);\n\n        return $this->createModelFromName($value, $classname, $entityType, $campaign);\n    }\n\n    protected function createNewForeignEntityAsEntityId(string $value, string $classname, int $entityTypeId): ?int\n    {\n        // AJAX calls are validation-only pre-flight requests; skip creation to avoid duplicates.\n        if (empty($value) || request()->ajax()) {\n            return null;\n        }\n\n        $campaign = CampaignLocalization::getCampaign();\n        $entityType = $campaign->getEntityTypes()->firstWhere('id', $entityTypeId);\n\n        return $this->createModelFromName($value, $classname, $entityType, $campaign, true);\n    }\n}\n"
  },
  {
    "path": "app/Traits/RoleAware.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Models\\CampaignRole;\n\ntrait RoleAware\n{\n    private CampaignRole $role;\n\n    public function role(CampaignRole $role): self\n    {\n        $this->role = $role;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Traits/Search/Orderable.php",
    "content": "<?php\n\nnamespace App\\Traits\\Search;\n\nuse Illuminate\\Support\\Str;\n\ntrait Orderable\n{\n    protected function order(?string $term): void\n    {\n        if (empty($term)) {\n            $this->query->orderBy('updated_at', 'DESC');\n        } else {\n            if (Str::startsWith($term, '=')) {\n                $this->query->where('name', mb_ltrim($term, '='));\n            } else {\n                $this->query->where('name', 'like', \"%{$term}%\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Traits/UserAware.php",
    "content": "<?php\n\nnamespace App\\Traits;\n\nuse App\\Models\\User;\n\n/**\n * Trait for user aware services\n */\ntrait UserAware\n{\n    public ?User $user = null;\n\n    public function user(User $user): self\n    {\n        $this->user = $user;\n\n        return $this;\n    }\n\n    public function userless(): self\n    {\n        // @phpstan-ignore-next-line\n        unset($this->user);\n\n        return $this;\n    }\n\n    public function hasUser(): bool\n    {\n        return $this->user !== null;\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Ad.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse App\\Facades\\AdCache;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Ad extends Component\n{\n    protected User $user;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $section = null,\n        public ?Campaign $campaign = null,\n        public bool $script = false,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        if (auth()->check()) {\n            $this->user = auth()->user();\n        }\n\n        return view('components.ad');\n    }\n\n    /**\n     * Determine if ads should be displayed\n     */\n    public function shouldRender(): bool\n    {\n        // If we don't have free enabled, then we don't have any ads to show\n        $provider = config('ads.provider');\n        if (empty($provider)) {\n            return false;\n        }\n\n        // If requesting a section that isn't set up, don't show\n        $key = 'ads.' . $provider . '.tags.' . $this->section;\n        if (! empty($this->section) && empty(config($key))) {\n            // dump(\"Unknown ad tag \" . $key);\n            return false;\n        }\n        if (! AdCache::canHaveAds()) {\n            // Using the adless middleware to define routes that have no ads (ie settings)\n            return false;\n        }\n        // Parameter to force ads to be displayed\n        if (request()->has('_showads')) {\n            return true;\n        }\n\n        // shouldRender is called before render() so we need to re-read the user\n        if (auth()->check()) {\n            $this->user = auth()->user();\n        }\n        if (isset($this->user)) {\n            // Subscribed users don't have ads\n            if ($this->user->isSubscriber()) {\n                return false;\n            }\n            // User has been created less than 24 hours ago\n            if ($this->user->created_at->diffInHours(Carbon::now()) < 24) {\n                return false;\n            }\n        }\n\n        // Premium campaigns don't have ads displayed to their members\n        return ! empty($this->campaign) && ! $this->campaign->boosted();\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Ads/Native.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Ads;\n\nuse App\\Facades\\AdCache;\nuse App\\Models\\Ad;\nuse App\\Models\\Campaign;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Native extends Component\n{\n    public User $user;\n\n    public Ad $ad;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public int $section,\n        public ?Campaign $campaign = null,\n    ) {\n        if (auth()->check()) {\n            $this->user = auth()->user();\n        }\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        if (! $this->noAds()) {\n            return '';\n        }\n        $this->ad = AdCache::get();\n\n        return view('components.ads.native');\n    }\n\n    protected function noAds(): bool\n    {\n        // No admin panel set up, no ads possible, since the admin project provides the tables\n        if (! config('app.admin')) {\n            return false;\n        }\n        // If we provided an ad test, override that\n        if (request()->has('_adtest') && auth()->user()->hasRole('admin')) {\n            return AdCache::test($this->section, request()->get('_adtest'));\n        }\n        // If the section has no ads, don't try and show anything\n        if (! AdCache::has($this->section)) {\n            return false;\n        }\n        // Force ads displayed\n        if (request()->get('_boost') === '0') {\n            return true;\n        }\n\n        if (isset($this->user)) {\n            // Subscribed users don't have ads\n            if ($this->user->isSubscriber()) {\n                return false;\n            }\n            // User has been created less than 24 hours ago\n            if ($this->user->created_at->diffInHours(Carbon::now()) < 24) {\n                return false;\n            }\n        }\n\n        // Premium campaigns don't either have ads displayed to their members\n        return isset($this->campaign) && ! $this->campaign->boosted();\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Alert.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Alert extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $type,\n        public ?string $id = null,\n        public bool $dismissible = false,\n        public ?string $class = null,\n        public bool $hidden = false,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.alert');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Badge.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Badge extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $type = 'default',\n        public ?string $css = null,\n        public ?string $title = null,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.badge');\n        // ->with('colour', $this->colour());\n    }\n\n    public function colour(): string\n    {\n        if ($this->type === 'default') {\n            return '';\n        }\n\n        return 'badge-' . $this->type;\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Box/Footer.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Box;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Footer extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct() {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.box.footer');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Box.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Box extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $id = null,\n        public ?string $url = null,\n        public ?string $href = null,\n        public array $extra = [],\n        public bool $padding = true,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.box');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Button/DeleteConfirm.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Button;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass DeleteConfirm extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $target,\n        public ?string $size = null,\n        public ?string $text = null,\n        public ?string $css = null,\n        public bool $iconOnly = false,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.button.delete-confirm');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Buttons/Colours.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Buttons;\n\ntrait Colours\n{\n    public function colour(): string\n    {\n        if ($this->type === 'danger') {\n            if ($this->outline) {\n                return 'btn2 btn-error btn-outline';\n            }\n\n            return 'btn2 btn-error';\n        } elseif ($this->type === 'primary') {\n            if ($this->outline) {\n                return 'btn2 btn-primary btn-outline';\n            }\n\n            return 'btn2 btn-primary';\n        } elseif ($this->type === 'secondary') {\n            if ($this->outline) {\n                return 'btn2 btn-secondary btn-outline';\n            }\n\n            return 'btn2 btn-secondary';\n        } elseif ($this->type === 'ghost') {\n            return 'btn2 btn-ghost';\n        }\n\n        if ($this->outline) {\n            return '';\n        }\n\n        // Default\n        return '';\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Buttons/Confirm.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Buttons;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Confirm extends Component\n{\n    use Colours;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $type = null,\n        public ?string $target = null,\n        public bool $full = false,\n        public bool $outline = false,\n        public ?string $name = null,\n        public ?string $size = null,\n        public ?string $dismiss = null,\n        public ?string $id = null,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.buttons.confirm')\n            ->with('colours', $this->colour())\n            ->with('sizes', $this->size())\n            ->with('element', $this->dismiss == 'dialog' ? 'a' : 'button');\n    }\n\n    protected function size(): string\n    {\n        if ($this->size === 'sm') {\n            return 'btn-sm';\n        }\n\n        return '';\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Buttons/ConfirmDelete.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Buttons;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass ConfirmDelete extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(public string $route, public string $confirm = 'crud.delete_modal.confirm', public string $delete = 'crud.remove')\n    {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.buttons.confirm-delete');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Campaigns/ModuleBox.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Campaigns;\n\nuse App\\Facades\\Img;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass ModuleBox extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public EntityType $entityType,\n        public ?string $thumbnail\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.campaigns.module-box')\n            ->with('enabled', $this->enabled())\n            ->with('image', $this->image());\n    }\n\n    protected function enabled(): bool\n    {\n        if ($this->entityType->isStandard()) {\n            return $this->campaign->enabled($this->entityType);\n        }\n\n        return $this->entityType->isEnabled();\n    }\n\n    protected function image(): string\n    {\n        if (! empty($this->thumbnail)) {\n            return Img::crop(96, 96)->url($this->thumbnail);\n        }\n\n        return '';\n    }\n}\n"
  },
  {
    "path": "app/View/Components/CharacterSheet.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignPlugin;\nuse App\\Models\\Entity;\nuse App\\Renderers\\CharacterSheets\\Blade;\nuse App\\Renderers\\CharacterSheets\\Custom;\nuse App\\Renderers\\CharacterSheets\\Renderer;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass CharacterSheet extends Component\n{\n    public Renderer $renderer;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public CampaignPlugin $plugin,\n        public Entity $entity,\n        public Campaign $campaign\n    ) {\n        // Let people update their plugins before using the new syntax\n        if ($this->plugin->version->updated_at->gt('2021-03-30 17:00:00')) {\n            $this->renderer = app()->make(Blade::class);\n        } else {\n            $this->renderer = app()->make(Custom::class);\n        }\n        $this->renderer->campaign($campaign)->entity($entity)->plugin($plugin);\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.character-sheet');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Checkbox.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Checkbox extends Component\n{\n    public string $text;\n\n    public ?array $dataProperties;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        string $text,\n        ?array $data = [],\n    ) {\n        $this->text = $text;\n        $this->dataProperties = $data;\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.checkbox');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dashboards/Widgets/Selection.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Dashboards\\Widgets;\n\nuse App\\Enums\\Widget;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboard;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Selection extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?CampaignDashboard $dashboard,\n        public Campaign $campaign,\n        public Widget $widget,\n        public string $icon,\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dashboards.widgets.selection');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Date.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Carbon\\Carbon;\nuse Closure;\nuse Exception;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\Component;\n\nclass Date extends Component\n{\n    /**\n     * Default format is MMMM d, Y\n     */\n    private string $format = 'LL';\n\n    private string $formattedDate;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $date,\n        public bool $string = false\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        if (empty($this->date)) {\n            return '';\n        }\n        $this->loadUserFormat();\n        try {\n            $original = new Carbon($this->date);\n            $this->formattedDate = $original->isoFormat($this->format);\n        } catch (Exception $e) {\n            $this->formattedDate = $this->date;\n        }\n\n        if ($this->string) {\n            return $this->formattedDate;\n        }\n\n        return view('components.date')\n            ->with('formatted', $this->formattedDate);\n    }\n\n    public function format(): string\n    {\n        return $this->format;\n    }\n\n    /**\n     * Load the user's format if logged in\n     */\n    private function loadUserFormat(): void\n    {\n        // Get the user's date format if they have a custom one\n        if (auth()->guest() || empty(auth()->user()->dateformat)) {\n            return;\n        }\n        $this->format = mb_strtoupper(auth()->user()->dateformat);\n        $this->format = Str::replace(['M', 'D'], ['MM', 'DD'], $this->format);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dialog/Article.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Dialog;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Article extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dialog.article');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dialog/Close.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Dialog;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Close extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $dismiss = 'modal',\n        public ?string $id = null,\n        public bool $modal = false,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dialog.close');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dialog/Footer.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Dialog;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Footer extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public bool $modal = false,\n        public bool $dialog = false,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dialog.footer');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dialog/Header.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Dialog;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Header extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $id = null,\n        public ?string $title = null,\n        public ?string $class = null,\n        public bool $dismissible = true,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dialog.header');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dialog.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Dialog extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $title = null,\n        public ?string $id = null,\n        public ?string $footer = null,\n        public array $form = [],\n        public bool $full = false,\n        public bool $loading = false,\n        public bool $dismissible = true,\n    ) {\n        if (empty($this->id)) {\n            $this->id = uniqid();\n        }\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dialog');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dropdowns/Divider.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Dropdowns;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Divider extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dropdowns.divider');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dropdowns/Item.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Dropdowns;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\Component;\n\nclass Item extends Component\n{\n    public array $dataProperties;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $link,\n        public ?string $target = null,\n        public ?string $css = null,\n        public ?string $dialog = null,\n        public ?string $popup = null,\n        public ?string $shortcut = null,\n        array $data = [],\n        public ?string $icon = null,\n        public bool $active = false,\n    ) {\n        $this->dataProperties = $data;\n\n        if ($this->shortcut !== null) {\n            $userAgent = request()->header('User-Agent', '');\n            if (Str::contains($userAgent, 'Macintosh') || Str::contains($userAgent, 'Mac OS')) {\n                $this->shortcut = str_ireplace('ctrl', '⌘', $this->shortcut);\n            }\n        }\n        $this->shortcut = Str::replace('Shift', '<i class=\"fa-regular fa-up\" aria-hidden=\"true\"></i>', $this->shortcut);\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dropdowns.item');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Dropdowns/Section.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Dropdowns;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Section extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.dropdowns.section');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Entities/Submenu.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Entities;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse App\\Services\\Submenus\\SubmenuService;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Submenu extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Entity $entity,\n        public Campaign $campaign,\n        public ?string $active = null,\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.entities.submenu')\n            ->with('items', $this->items());\n    }\n\n    protected function items(): array\n    {\n        /** @var SubmenuService $service */\n        $service = app()->make(SubmenuService::class);\n        if (auth()->check()) {\n            $service->user(auth()->user());\n        }\n\n        return $service\n            ->campaign($this->campaign)\n            ->entity($this->entity)\n            ->items();\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Entities/Thumbnail.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Entities;\n\nuse App\\Models\\Entity;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Thumbnail extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Entity $entity,\n        public ?string $title = null,\n        public int $size = 40\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.entities.thumbnail');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/EntityLink.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass EntityLink extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?Entity $entity,\n        public Campaign $campaign,\n        public ?string $post = null,\n        public bool $bottom = false,\n        public ?int $bookmark = null,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        if (empty($this->entity)) {\n            return '';\n        }\n\n        return view('components.entity-link');\n    }\n\n    public function post(): string\n    {\n        if (! empty($this->post)) {\n            return '#post-' . $this->post;\n        }\n\n        return '';\n    }\n}\n"
  },
  {
    "path": "app/View/Components/FaqElement.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass FaqElement extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $id\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.faq-element');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Form.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Form extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string|array $action,\n        public array $config = [],\n        public string $method = 'POST',\n        public bool $files = false,\n        public bool $shortcut = true,\n        public bool $unsaved = false,\n        public bool $direct = false,\n        public string $id = '',\n        public string $class = '',\n        public array $extra = [],\n    ) {\n        // Guarantee uppercase method for the tests in the blade file\n        $this->method = mb_strtoupper($method);\n        foreach ($config as $k => $v) {\n            if (! property_exists($this, $k)) {\n                continue;\n            }\n            $this->$k = $v;\n        }\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.form');\n    }\n\n    public function extra(): ?string\n    {\n        if (empty($this->extra)) {\n            return null;\n        }\n        $extra = [];\n        foreach ($this->extra as $k => $v) {\n            $extra[] = $k . '=\"' . $v . '\"';\n        }\n\n        return implode(' ', $extra);\n    }\n\n    public function action(): string\n    {\n        if (! is_array($this->action)) {\n            return route($this->action);\n        }\n        $parameters = array_slice($this->action, 1);\n\n        if (array_keys($this->action) === [0, 1]) {\n            $parameters = head($parameters);\n        }\n\n        return route($this->action[0], $parameters);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Forms/Field.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Forms;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Field extends Component\n{\n    public string $field;\n\n    public ?string $label;\n\n    public bool $required;\n\n    public bool $tooltip;\n\n    public bool $hidden;\n\n    public ?string $helper;\n\n    public ?string $link;\n\n    public ?string $css;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        string $field,\n        ?string $label = null,\n        bool $required = false,\n        bool $tooltip = false,\n        bool $hidden = false,\n        ?string $helper = null,\n        ?string $link = null,\n        ?string $css = null,\n        public ?string $id = null,\n    ) {\n        $this->field = $field;\n        $this->label = $label;\n        $this->required = $required;\n        $this->tooltip = $tooltip;\n        $this->hidden = $hidden;\n        $this->helper = $helper;\n        $this->link = $link;\n        $this->css = $css;\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.forms.field');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Forms/Foreign.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Forms;\n\nuse App\\Facades\\Module;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\View\\Component;\n\nclass Foreign extends Component\n{\n    // public mixed $model;\n    public array $options = [];\n\n    protected EntityType $entityType;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public string $name,\n        public string $id = '',\n        public mixed $selected = null,\n        public mixed $route = null,\n        public bool $allowNew = false,\n        public bool $dynamicNew = false,\n        public bool $allowClear = false,\n        public bool $required = false,\n        public bool $parent = false,\n        public bool $multiple = false,\n        public string $key = '',\n        public ?string $label = null,\n        public ?string $placeholder = null,\n        public ?string $helper = null,\n        public ?string $dropdownParent = null,\n        public ?int $entityTypeID = null,\n        public ?string $dynamicTag = null,\n    ) {\n        $this->id = ! empty($id) ? $id : $name . '_' . uniqid();\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        $canNew = $this->createPermission();\n\n        if (! empty($this->selected)) {\n            if (is_array($this->selected)) {\n                $this->options = $this->selected;\n            } elseif ($this->selected instanceof Model) {\n                // @phpstan-ignore-next-line\n                $this->options[$this->selected->id] = $this->selected->name;\n            }\n        }\n\n        if ($this->parent) {\n            $this->label = __('crud.fields.parent');\n            $this->placeholder = __('crud.placeholders.parent');\n        } elseif (! empty($this->key)) {\n            if (empty($this->label)) {\n                $this->label = ! empty($this->entityTypeID) ? __('entities.' . $this->key) : __('crud.fields.' . $this->key);\n                if (! empty($this->entityTypeID)) {\n                    $this->label = Module::singular($this->entityTypeID, $this->label);\n                }\n            }\n            if (empty($this->placeholder)) {\n                $key = 'crud.placeholders.' . $this->key;\n                $this->placeholder = __($key);\n                if (! empty($this->entityTypeID)) {\n                    $mod = Module::singular($this->entityTypeID);\n                    if (! empty($mod)) {\n                        $this->placeholder = __('crud.placeholders.fallback', ['module' => Module::singular($this->entityTypeID, $this->label)]);\n                    }\n                }\n                if ($this->placeholder === $key) {\n                    $this->placeholder = __('crud.placeholders.search');\n                }\n            }\n        } else {\n            if (empty($this->label)) {\n                $this->label = '';\n            }\n            if (empty($this->placeholder)) {\n                $this->placeholder = '';\n            }\n        }\n\n        return view('components.forms.foreign')\n            ->with('canNew', $canNew);\n    }\n\n    protected function createPermission(): bool\n    {\n        if (! $this->allowNew || auth()->guest()) {\n            return false;\n        }\n\n        if (! empty($this->entityType)) {\n            return auth()->user()->can('create', [$this->entityType, $this->campaign]);\n        }\n\n        $this->entityType = $this->campaign->getEntityTypes()->where('id', $this->entityTypeID)->first();\n\n        return auth()->user()->can('create', [$this->entityType, $this->campaign]);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Forms/Select.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Forms;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\View\\Component;\n\nclass Select extends Component\n{\n    protected string $autoId;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $name,\n        public array|Collection $options,\n        public array|Collection $optionAttributes = [],\n        public array $disabled = [],\n        public string $id = '',\n        public bool $required = false,\n        public bool $multiple = false,\n        public bool $radio = false,\n        public string $class = '',\n        public string $label = '',\n        public string $placeholder = '',\n        public mixed $selected = null,\n        public array $extra = [],\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        // Form submitted? Re-load the value\n        $old = old($this->name);\n        if ($old !== null) {\n            $this->selected = $old;\n        } elseif (! empty($this->placeholder)) {\n            $this->selected = '';\n            $this->options = ['' => $this->placeholder] + $this->options;\n        }\n\n        return view('components.forms.select');\n    }\n\n    public function fieldId(): string\n    {\n        if (! empty($this->id)) {\n            return $this->id;\n        }\n\n        return $this->autoId ?? $this->autoId = uniqid($this->name);\n    }\n\n    public function isSelected(mixed $value): bool\n    {\n        if (empty($this->selected)) {\n            return empty($value);\n        }\n        if (is_array($this->selected)) {\n            return in_array($value, $this->selected);\n        }\n        if (is_int($this->selected)) {\n            return $value == $this->selected;\n        }\n        if ($this->selected instanceof \\BackedEnum) {\n            return $value == $this->selected->value;\n        }\n\n        // Always force values to lower to avoid thinking\n        return mb_strtolower($value) == mb_strtolower($this->selected);\n    }\n\n    public function optionAttributes(string $key): array\n    {\n        return $this->optionAttributes[$key] ?? [];\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Forms/Tags.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Forms;\n\nuse App\\Models\\Bookmark;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\Entity;\nuse App\\Models\\Post;\nuse App\\Models\\Tag;\nuse App\\Models\\Webhook;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Tags extends Component\n{\n    public string $id;\n\n    public ?string $label;\n\n    public ?string $dropdownParent;\n\n    public mixed $tags;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        ?string $id = null,\n        ?string $label = null,\n        ?string $dropdownParent = null,\n        public bool $allowNew = false,\n        public bool $allowClear = false,\n        public bool $enableAuto = false,\n        public mixed $model = null,\n        public ?string $helper = null,\n        public mixed $options = [],\n    ) {\n        $this->id = $id ?? 'tags_' . uniqid();\n        $this->label = $label ?? __('entities.tags');\n        $this->dropdownParent = $dropdownParent ?? '#app';\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        if (\n            $this->allowNew && ! auth()->user()->can('create', [\n                $this->campaign->getEntityTypes()->firstWhere('id', config('entities.ids.tag')),\n                $this->campaign,\n            ])\n        ) {\n            $this->allowNew = false;\n        }\n        $this->prepareOptions();\n\n        return view('components.forms.tags')\n            ->with('campaign', $this->campaign)\n            ->with('tags', $this->tags);\n    }\n\n    protected function prepareOptions(): void\n    {\n        $this->tags = [];\n        if (! empty($this->model) && $this->model instanceof Entity) {\n            /** @var Tag $tag */\n            foreach ($this->model->tags()->with('entity')->get() as $tag) {\n                if ($tag->entity) {\n                    $this->tags[$tag->id] = $tag;\n                }\n            }\n        } elseif (! empty($this->model) && ! empty($this->model->entity) && ! $this->model instanceof Post) {\n            /** @var Tag $tag */\n            foreach ($this->model->entity->tags()->with('entity')->get() as $tag) {\n                if ($tag->entity) {\n                    $this->tags[$tag->id] = $tag;\n                }\n            }\n        } elseif (! empty($this->model) && ($this->model instanceof CampaignDashboardWidget || $this->model instanceof Post || $this->model instanceof Bookmark || $this->model instanceof Webhook)) {\n            /** @var Tag $tag */\n            foreach ($this->model->tags()->with('entity')->get() as $tag) {\n                $this->tags[$tag->id] = $tag;\n            }\n        } elseif (! empty($this->options) && is_array($this->options)) {\n            foreach ($this->options as $tagId) {\n                if (! empty($tagId) && is_numeric($tagId)) {\n                    $tag = Tag::find($tagId);\n                    if ($tag && $tag->entity) {\n                        $this->tags[$tag->id] = $tag;\n                    }\n                }\n            }\n        } elseif (empty($this->model) && $this->enableAuto) {\n            $tags = Tag::autoApplied()->with('entity')->get();\n            /** @var Tag $tag */\n            foreach ($tags as $tag) {\n                if ($tag && $tag->entity) {\n                    $this->tags[$tag->id] = $tag;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Forms/VisibilityPicker.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Forms;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Campaign;\nuse App\\Models\\Entity;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass VisibilityPicker extends Component\n{\n    public function __construct(\n        public Entity $entity,\n        public Campaign $campaign,\n        public int $selected,\n        public string $url,\n        public array $options,\n        public ?string $id = null,\n    ) {\n        $this->id = $id ?? uniqid('visibility-');\n    }\n\n    public function render(): View|Closure|string\n    {\n        return view('components.forms.visibility-picker', [\n            'adminUrl' => route('campaigns.campaign_roles.admin', $this->campaign),\n            'adminName' => $this->campaign->adminRoleName(),\n            'entityName' => $this->entity->name,\n            'iconMap' => $this->buildIconMap(),\n        ]);\n    }\n\n    /**\n     * @return array<int, string>\n     */\n    protected function buildIconMap(): array\n    {\n        return [\n            Visibility::All->value => 'fa-regular fa-eye',\n            Visibility::Admin->value => 'fa-regular fa-lock',\n            Visibility::AdminSelf->value => 'fa-regular fa-user-lock',\n            Visibility::Self->value => 'fa-regular fa-user-secret',\n            Visibility::Member->value => 'fa-regular fa-users',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Forms/VisibilityPickerField.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Forms;\n\nuse App\\Enums\\Visibility;\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass VisibilityPickerField extends Component\n{\n    public function __construct(\n        public Campaign $campaign,\n        public string $entityName,\n        public array $options,\n        public int $selected,\n        public ?string $id = null,\n    ) {\n        $this->id = $id ?? uniqid('visibility-field-');\n    }\n\n    public function render(): View|Closure|string\n    {\n        return view('components.forms.visibility-picker-field', [\n            'adminUrl' => route('campaigns.campaign_roles.admin', $this->campaign),\n            'adminName' => $this->campaign->adminRoleName(),\n            'iconMap' => $this->buildIconMap(),\n            'visibilityKeys' => $this->buildVisibilityKeys(),\n        ]);\n    }\n\n    /**\n     * @return array<int, string>\n     */\n    protected function buildIconMap(): array\n    {\n        return [\n            Visibility::All->value => 'fa-regular fa-eye',\n            Visibility::Admin->value => 'fa-regular fa-lock',\n            Visibility::AdminSelf->value => 'fa-regular fa-user-lock',\n            Visibility::Self->value => 'fa-regular fa-user-secret',\n            Visibility::Member->value => 'fa-regular fa-users',\n        ];\n    }\n\n    /**\n     * @return array<int, string>\n     */\n    protected function buildVisibilityKeys(): array\n    {\n        return [\n            Visibility::All->value => 'all',\n            Visibility::Admin->value => 'admin',\n            Visibility::AdminSelf->value => 'admin-self',\n            Visibility::Self->value => 'self',\n            Visibility::Member->value => 'member',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Grid.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Grid extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $id = null,\n        public ?string $type = null,\n        public ?string $show = null,\n        public ?string $xdata = null,\n        public bool $hidden = false,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.grid');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Helper.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Helper extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $text = null,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.helper');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Helpers/Tooltip.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Helpers;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Tooltip extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $title,\n        public bool $html = false\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.helpers.tooltip')\n            ->with('title', $this->title)\n            ->with('html', $this->html);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Hero.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Hero extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.hero');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Icon.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Icon extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $class = null,\n        public bool $tooltip = false,\n        public ?string $title = null,\n        public ?string $link = null,\n        public ?string $size = null,\n        public ?string $label = null,\n        public ?string $show = null,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        $this->class = $this->map($this->class);\n\n        return view('components.icon');\n    }\n\n    /**\n     * Map icon shortcuts into their fontawesome or other elements\n     */\n    protected function map(string $class): string\n    {\n        return match ($class) {\n            'map' => 'fa-regular fa-map',\n            'check' => 'fa-regular fa-check',\n            'trash' => 'fa-regular fa-trash-can',\n            'plus' => 'fa-regular fa-plus',\n            'question' => 'fa-regular fa-question-circle',\n            'save' => 'fa-regular fa-save',\n            'pencil' => 'fa-regular fa-pencil',\n            'cog' => 'fa-regular fa-cog',\n            'copy' => 'fa-regular fa-copy',\n            'edit' => 'fa-regular fa-edit',\n            'premium' => 'fa-regular fa-gem',\n            'lock' => 'fa-regular fa-lock',\n            'filter' => 'fa-regular fa-filter',\n            'load' => 'fa-solid fa-spinner fa-spin',\n            'arrow' => 'fa-regular fa-arrow-right',\n            'permissions' => 'fa-regular fa-user-shield',\n            'attributes' => 'fa-regular fa-rectangle-list',\n            'link' => 'fa-regular fa-external-link',\n            'sort' => 'fa-regular fa-grip-vertical',\n            default => $class,\n        };\n    }\n}\n"
  },
  {
    "path": "app/View/Components/InfoBox.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass InfoBox extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $title,\n        public string $icon,\n        public ?string $url,\n        public ?string $subtitle,\n        public ?string $color,\n        public ?string $urlTooltip,\n        public ?Campaign $campaign,\n        public string $target = 'primary-dialog',\n        public string $background = 'bg-neutral',\n        public string $subtitleColour = 'text-neutral-content',\n        public string $urlIcon = 'fa-regular fa-angle-right',\n        public bool $ajax = false,\n        public bool $premium = false,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.info-box');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/LearnMore.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass LearnMore extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $url\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.learn-more');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Lists/EmptyState.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Lists;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass EmptyState extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public EntityType $entityType,\n        public Campaign $campaign\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.lists.empty-state');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Menu/Element.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Menu;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Element extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $route,\n        public bool $active = false,\n        public int $badge = 0,\n        public ?array $button = null,\n        public ?string $ajax = null,\n        public ?string $id = null,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.menu.element');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Menu.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Menu extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct() {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.menu');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Posts/Tags.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Posts;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Post;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Tags extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Post $post,\n        public Campaign $campaign\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        if ($this->post->visibleTags()->isEmpty()) {\n            return '';\n        }\n\n        return view('components.posts.tags')\n            ->with('tags', $this->post->visibleTags());\n    }\n}\n"
  },
  {
    "path": "app/View/Components/PremiumCta.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass PremiumCta extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public bool $superboosted = false,\n        public bool $premium = false\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        $legacy = auth()->check() && auth()->user()->hasBoosterNomenclature();\n        $amount = 4.99;\n        $currency = 'US$';\n        if (auth()->check()) {\n            if (auth()->user()->billedInBrl()) {\n                $amount = 19.99;\n            }\n        }\n\n        return view('components.premium-cta')\n            ->with('legacy', $legacy)\n            ->with('currency', $currency)\n            ->with('amount', $amount);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/PremiumCtaFooter.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass PremiumCtaFooter extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Campaign $campaign\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.premium-cta-footer');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/PremiumDialog.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass PremiumDialog extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public string $pitch,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.premium-dialog');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Profile/SocialLink.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Profile;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass SocialLink extends Component\n{\n    public string $link;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        string $link\n    ) {\n        $this->link = $link;\n        if (! preg_match('#^https?://#i', $this->link)) {\n            $this->link = 'https://' . $this->link;\n        }\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.profile.social-link');\n    }\n\n    public function domain(): string\n    {\n        $host = parse_url($this->link, PHP_URL_HOST);\n\n        return $host ? preg_replace('/^www\\./i', '', $host) : '';\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Reorder/Child.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Reorder;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Child extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public mixed $id\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.reorder.child');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Sidebar/Account.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Sidebar;\n\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Account extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public User $user\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.sidebar.account');\n    }\n\n    /**\n     * Settings menu active\n     */\n    public function active(string $menu, int $segment = 2): ?string\n    {\n        $current = request()->segment($segment);\n        if ($current == $menu) {\n            return ' active';\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Sidebar/Bookmark.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Sidebar;\n\nuse App\\Models\\Campaign;\nuse App\\Services\\Bookmarks\\RoutingService;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Bookmark extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n        public \\App\\Models\\Bookmark $bookmark,\n        public RoutingService $routingService,\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        $url = $this->routingService\n            ->campaign($this->campaign)\n            ->bookmark($this->bookmark)\n            ->url();\n\n        return view('components.sidebar.element-link')\n            ->with('url', $url)\n            ->with('icon', $this->bookmark->iconClass())\n            ->with('text', $this->bookmark->name)\n            ->with('class', '');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Sidebar/Campaign.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Sidebar;\n\nuse App\\Models\\Bookmark;\nuse App\\Models\\Entity;\nuse App\\Services\\Campaign\\Sidebar\\SetupService;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Campaign extends Component\n{\n    public array $layout;\n\n    protected array $rules = [\n        'dashboard' => [\n            null,\n            'dashboard',\n            'dashboard-setup',\n        ],\n        'characters' => [\n            'characters',\n        ],\n        'conversations' => [\n            'conversations',\n            'conversation_messages',\n        ],\n        'events' => [\n            'events',\n        ],\n        'families' => [\n            'families',\n        ],\n        'items' => [\n            'items',\n        ],\n        'journals' => [\n            'journals',\n        ],\n        'locations' => [\n            'locations',\n        ],\n        'maps' => [\n            'maps',\n        ],\n        'notes' => [\n            'notes',\n        ],\n        'organisations' => [\n            'organisations',\n            'organisation_member',\n        ],\n        'other' => [\n            'releases',\n            'team',\n        ],\n        'quests' => [\n            'quests',\n        ],\n        'calendars' => [\n            'calendars',\n        ],\n        'releases' => [\n            'releases',\n        ],\n        'team' => [\n            'team',\n        ],\n        'attribute_templates' => [\n            'attribute_templates',\n        ],\n        'tags' => [\n            'tags',\n        ],\n        'timelines' => [\n            'timelines',\n        ],\n        'dice_rolls' => [\n            'dice_rolls',\n            'dice_roll_results',\n        ],\n        'bookmarks' => [\n            'bookmarks',\n        ],\n        'races' => [\n            'races',\n        ],\n        'creatures' => [\n            'creatures',\n        ],\n        'abilities' => [\n            'abilities',\n        ],\n        'whiteboards' => [\n            'whiteboards',\n        ],\n        'relations' => [\n            'relations',\n        ],\n        'history' => [\n            'history',\n        ],\n        'gallery' => [\n            'gallery',\n        ],\n    ];\n\n    protected array $bookmarks;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public \\App\\Models\\Campaign $campaign,\n        public ?Entity $entity,\n        protected SetupService $sidebar)\n    {\n        $sidebar\n            ->campaign($campaign)\n            ->request(request());\n        $this->prepareBookmarks();\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        $this->layout = $this->sidebar\n            ->campaign($this->campaign)\n            ->layout();\n\n        return view('components.sidebar.campaign')\n            ->with('layout', $this->layout);\n    }\n\n    public function active(string $menu = '', string $class = 'active'): ?string\n    {\n        if (empty($this->rules[$menu])) {\n            return null;\n        }\n\n        if (request()->has('bookmark')) {\n            return null;\n        }\n\n        foreach ($this->rules[$menu] as $rule) {\n            if (request()->segment(3) == $rule) {\n                return \" {$class}\";\n            }\n        }\n\n        // Entities? It's complicated\n        /** @var ?Entity $entity */\n        $entity = request()->route('entity');\n        if ($entity) {\n            // Custom modules are currently dealt with \"bookmarks\" (we need to change that in the future)\n            // so we need this check in case someone makes a custom module named \"races\" again\n            if ($entity->entityType->isStandard() && $entity->entityType->pluralCode() == $menu) {\n                return \" {$class}\";\n            }\n        }\n\n        $entityType = request()->route('entityType');\n        if ($entityType && $entityType->pluralCode() == $menu) {\n            return \" {$class}\";\n        }\n\n        return null;\n    }\n\n    /**\n     * Prepare the quick links by figuring out where they will be rendered\n     */\n    public function prepareBookmarks(): void\n    {\n        $this->bookmarks = [];\n\n        // Bookmarks module is not activated on the campaign, no need to go further\n        if (! $this->campaign->enabled('bookmarks')) {\n            return;\n        }\n        $bookmarks = $this->campaign->bookmarks()->active()->ordered()->with(['target' => function ($sub) {\n            return $sub->select('id', 'type_id', 'entity_id');\n        }, 'entityType', 'target.entityType'])->get();\n        /** @var Bookmark $bookmark */\n        foreach ($bookmarks as $bookmark) {\n            if ($bookmark->entityType && $bookmark->entityType->isCustom() && ! $bookmark->entityType->isEnabled()) {\n                continue;\n            }\n            $parent = 'bookmarks';\n            if (! empty($bookmark->parent)) {\n                $parent = $bookmark->parent;\n            }\n            $this->bookmarks[$parent][] = $bookmark;\n        }\n    }\n\n    /**\n     * Get the quick links for a specified section/parent\n     */\n    public function bookmarks(?string $parent = null): array\n    {\n        if (! $this->hasBookmarks($parent)) {\n            return [];\n        }\n\n        return $this->bookmarks[$parent];\n    }\n\n    /**\n     * Determine if a section has quick links in it\n     */\n    public function hasBookmarks(string $parent): bool\n    {\n        return array_key_exists($parent, $this->bookmarks) && ! empty($this->bookmarks[$parent]);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Sidebar/Element.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Sidebar;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Element extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $text,\n        public ?string $icon = null,\n        public ?string $url = null,\n        public ?string $class = null,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        $view = 'link';\n        if (empty($this->url)) {\n            $view = 'text';\n        }\n\n        return view('components.sidebar.element-' . $view);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Sidebar/Profile.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Sidebar;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Profile extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct() {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.sidebar.profile');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Sidebar/Section.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Sidebar;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Section extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $text\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.sidebar.section');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Sidebar/Settings.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Sidebar;\n\nuse App\\Models\\Campaign;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Settings extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Campaign $campaign,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.sidebar.settings');\n    }\n\n    public function active(string|array $options): ?string\n    {\n        if (! is_array($options)) {\n            $options = [$options];\n        }\n        if (in_array(request()->segment(3), $options)) {\n            return 'active';\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Since.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Carbon\\Carbon;\nuse Closure;\nuse Exception;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\Component;\n\nclass Since extends Component\n{\n    private string $formattedDate;\n\n    public string $dateFormat = 'LL';\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Carbon $date,\n        public bool $withTime = true\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        $this->loadUserFormat();\n        try {\n            $this->formattedDate = $this->date->isoFormat($this->dateFormat . ($this->withTime ? ' HH:mm:ss' : null));\n        } catch (Exception $e) {\n            $this->formattedDate = $this->date->isoFormat($this->withTime ? 'LL HH:mm:ss' : 'LL');\n        }\n\n        return view('components.since')\n            ->with('formatted', $this->formattedDate);\n    }\n\n    public function elapsed(): string\n    {\n        if ($this->date->diffInMonths() <= 2) {\n            return $this->date->diffForHumans();\n        }\n\n        return $this->date->isoFormat($this->dateFormat);\n    }\n\n    /**\n     * Load the user's format if logged in\n     */\n    private function loadUserFormat(): void\n    {\n        // Get the user's date format if they have a custom one\n        if (auth()->guest() || empty(auth()->user()->dateformat)) {\n            return;\n        }\n        $this->dateFormat = mb_strtoupper(auth()->user()->dateformat);\n        $this->dateFormat = Str::replace(['M', 'D'], ['MM', 'DD'], $this->dateFormat);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Tab/Nav.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Tab;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Nav extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct() {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.tab.nav');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Tab/Tab.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Tab;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Tab extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $target,\n        public string $title,\n        public ?string $icon = null,\n        public bool $default = false,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.tab.tab');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Tags/Bubble.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Tags;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\Tag;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Bubble extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public Tag $tag,\n        public Campaign $campaign,\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.tags.bubble')\n            ->with('css', $this->css())\n            ->with('inlineStyle', $this->tag->colourStyle());\n    }\n\n    protected function css(): string\n    {\n        $classes = [\n            'badge',\n        ];\n        if ($this->tag->hasColour()) {\n            $classes[] = $this->tag->colourClass();\n        } else {\n            $classes[] = 'color-tag';\n        }\n\n        return implode(' ', $classes);\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Toggles/FilterButton.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Toggles;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass FilterButton extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public int $count,\n        public string $route,\n        public bool $all = false,\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.toggles.filter-button');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Tutorial.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse App\\Facades\\UserCache;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Tutorial extends Component\n{\n    public string $id;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public string $code,\n        public ?string $doc = null,\n        public ?string $type = null,\n        public bool $auth = true\n    ) {\n        $this->id = uniqid($code . '-');\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        if ($this->auth && ! auth()->check()) {\n            return '';\n        }\n        if (auth()->check() && UserCache::dismissedTutorial($this->code)) {\n            return '';\n        }\n\n        return view('components.tutorial');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Users/Avatar.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Users;\n\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Avatar extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public User $user,\n        public int $size = 40\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.users.avatar');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Users/Link.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Users;\n\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Link extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(public User $user, public int $size = 40)\n    {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.users.link');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Widgets/FilteredLink.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Widgets;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\Component;\n\nclass FilteredLink extends Component\n{\n    public Campaign $campaign;\n\n    public CampaignDashboardWidget $widget;\n\n    public ?string $entityString;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        Campaign $campaign,\n        CampaignDashboardWidget $widget,\n        ?string $entityString = null,\n    ) {\n        $this->campaign = $campaign;\n        $this->widget = $widget;\n        $this->entityString = $entityString;\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.widgets.filtered-link')\n            ->with('isLink', $this->isLink())\n            ->with('title', $this->title())\n            ->with('url', $this->url());\n    }\n\n    protected function title(): string\n    {\n        if (! empty($this->widget->conf('text'))) {\n            return $this->widget->conf('text');\n        }\n        $title = '';\n        if (! empty($this->entityString)) {\n            $title = __($this->entityString) . ' - ';\n        }\n        $title .= __('dashboards/widgets/recent.name');\n\n        return $title;\n    }\n\n    protected function url(): ?string\n    {\n        if (! $this->isLink()) {\n            return null;\n        }\n        $parameters = [\n            'campaign' => $this->campaign,\n            'tags' => $this->widget->tags->pluck('id')->toArray(),\n        ] + $this->widget->filterOptions();\n\n        return route(Str::plural($this->widget->conf('entity')) . '.index', $parameters);\n    }\n\n    protected function isLink(): bool\n    {\n        return ! empty($this->widget->conf('entity'));\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Widgets/Forms/Advanced.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Widgets\\Forms;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Advanced extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.widgets.forms.advanced');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Widgets/Previews/Body.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Widgets\\Previews;\n\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\Entity;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Body extends Component\n{\n    public Campaign $campaign;\n\n    public CampaignDashboardWidget $widget;\n\n    public Entity $entity;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        Campaign $campaign,\n        CampaignDashboardWidget $widget,\n        Entity $entity,\n    ) {\n        $this->campaign = $campaign;\n        $this->widget = $widget;\n        $this->entity = $entity;\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.widgets.previews.body');\n    }\n}\n"
  },
  {
    "path": "app/View/Components/Widgets/Previews/Head.php",
    "content": "<?php\n\nnamespace App\\View\\Components\\Widgets\\Previews;\n\nuse App\\Facades\\Avatar;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\Entity;\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass Head extends Component\n{\n    public Campaign $campaign;\n\n    public CampaignDashboardWidget $widget;\n\n    public Entity $entity;\n\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        Campaign $campaign,\n        CampaignDashboardWidget $widget,\n        Entity $entity,\n    ) {\n        $this->campaign = $campaign;\n        $this->widget = $widget;\n        $this->entity = $entity;\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.widgets.previews.head')\n            ->with('images', $this->headerImage())\n            ->with('customName', $this->customName());\n    }\n\n    protected function headerImage(): ?array\n    {\n        if ($this->widget->conf('entity-header') && $this->campaign->boosted() && $this->entity->header_image) {\n            return [\n                'wide_xl' => $this->entity->thumbnail(800, 450, 'header_image'),\n                'wide_sm' => $this->entity->thumbnail(480, 270, 'header_image'),\n                'square_xl' => $this->entity->thumbnail(800, 800, 'header_image'),\n                'square_sm' => $this->entity->thumbnail(480, 480, 'header_image'),\n            ];\n        } elseif ($this->widget->conf('entity-header') && $this->campaign->boosted() && $this->entity->header) {\n            return [\n                'wide_xl' => $this->entity->header->getUrl(800, 450),\n                'wide_sm' => $this->entity->header->getUrl(480, 270),\n                'square_xl' => $this->entity->header->getUrl(800, 800),\n                'square_sm' => $this->entity->header->getUrl(480, 480),\n            ];\n        } elseif ($this->entity->hasImage()) {\n            return [\n                'wide_xl' => Avatar::entity($this->entity)->size(800, 450)->thumbnail(),\n                'wide_sm' => Avatar::entity($this->entity)->size(480, 270)->thumbnail(),\n                'square_xl' => Avatar::entity($this->entity)->size(800, 800)->thumbnail(),\n                'square_sm' => Avatar::entity($this->entity)->size(480, 480)->thumbnail(),\n            ];\n        }\n\n        return null;\n    }\n\n    protected function customName(): string\n    {\n        if (empty($this->widget->conf('text'))) {\n            return '';\n        }\n\n        return str_replace('{name}', $this->entity->name, $this->widget->conf('text'));\n    }\n}\n"
  },
  {
    "path": "app/View/Components/WordCount.php",
    "content": "<?php\n\nnamespace App\\View\\Components;\n\nuse Closure;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nclass WordCount extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?int $count\n    ) {}\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View|Closure|string\n    {\n        return view('components.word-count');\n    }\n}\n"
  },
  {
    "path": "artisan",
    "content": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so that we do not have to worry about the\n| loading of any of our classes \"manually\". Feels great to relax.\n|\n*/\n\nrequire __DIR__.'/vendor/autoload.php';\n\n$app = require_once __DIR__.'/bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Artisan Application\n|--------------------------------------------------------------------------\n|\n| When we run the console application, the current CLI command will be\n| executed in this console and the response sent back to a terminal\n| or another output device for the developers. Here goes nothing!\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Console\\Kernel::class);\n\n$status = $kernel->handle(\n    $input = new Symfony\\Component\\Console\\Input\\ArgvInput,\n    new Symfony\\Component\\Console\\Output\\ConsoleOutput\n);\n\n/*\n|--------------------------------------------------------------------------\n| Shutdown The Application\n|--------------------------------------------------------------------------\n|\n| Once Artisan has finished running, we will fire off the shutdown events\n| so that any final work may be done by the application before we shut\n| down the process. This is the last thing to happen to the request.\n|\n*/\n\n$kernel->terminate($input, $status);\n\nexit($status);\n"
  },
  {
    "path": "boost.json",
    "content": "{\n    \"agents\": [\n        \"claude_code\"\n    ],\n    \"guidelines\": true,\n    \"herd_mcp\": false,\n    \"mcp\": true,\n    \"sail\": true,\n    \"skills\": [\n        \"livewire-development\",\n        \"pest-testing\",\n        \"tailwindcss-development\"\n    ]\n}\n"
  },
  {
    "path": "bootstrap/app.php",
    "content": "<?php\n\nuse App\\Exceptions\\Handler;\nuse App\\Http\\Kernel;\nuse Illuminate\\Contracts\\Debug\\ExceptionHandler;\nuse Illuminate\\Foundation\\Application;\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------------------------------------------------------------------------\n|\n| The first thing we will do is create a new Laravel application instance\n| which serves as the \"glue\" for all the components of Laravel, and is\n| the IoC container for the system binding all of the various parts.\n|\n*/\n\n$app = new Application(\n    realpath(__DIR__ . '/../')\n);\n\n/*\n|--------------------------------------------------------------------------\n| Bind Important Interfaces\n|--------------------------------------------------------------------------\n|\n| Next, we need to bind some important interfaces into the container so\n| we will be able to resolve them when needed. The kernels serve the\n| incoming requests to this application from both the web and CLI.\n|\n*/\n\n$app->singleton(\n    Illuminate\\Contracts\\Http\\Kernel::class,\n    Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Console\\Kernel::class,\n    App\\Console\\Kernel::class\n);\n\n$app->singleton(\n    ExceptionHandler::class,\n    Handler::class\n);\n\n/*\n|--------------------------------------------------------------------------\n| Return The Application\n|--------------------------------------------------------------------------\n|\n| This script returns the application instance. The instance is given to\n| the calling script so we can separate the building of the instances\n| from the actual running of the application and sending responses.\n|\n*/\n\nreturn $app;\n"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"owlchester/kanka\",\n    \"description\": \"The Kanka RPG and worldbuilding tool\",\n    \"keywords\": [\n        \"campaign\",\n        \"rpg\",\n        \"worldbuilding\",\n        \"kanka\",\n        \"dnd\"\n    ],\n    \"license\": \"proprietary\",\n    \"type\": \"project\",\n    \"require\": {\n        \"php\": \"^8.4\",\n        \"ext-dom\": \"*\",\n        \"ext-json\": \"*\",\n        \"ext-zip\": \"*\",\n        \"aws/aws-sdk-php\": \"^3.276\",\n        \"bacon/bacon-qr-code\": \"^3.0\",\n        \"binarytorch/larecipe\": \"^2.0\",\n        \"caseyamcl/toc\": \"^4.0\",\n        \"chriskonnertz/string-calc\": \"^2.0\",\n        \"dompdf/dompdf\": \"^3.0\",\n        \"enshrined/svg-sanitize\": \"^0.22\",\n        \"guzzlehttp/guzzle\": \"^7.0.1\",\n        \"ilestis/kanka-dnd5e-monster\": \"^5.0\",\n        \"intervention/image\": \"^3.10\",\n        \"laravel/cashier\": \"^15.0\",\n        \"laravel/framework\": \"^11.0\",\n        \"laravel/pail\": \"^1.1\",\n        \"laravel/passport\": \"^13.0\",\n        \"laravel/reverb\": \"^1.0\",\n        \"laravel/scout\": \"^10.5\",\n        \"laravel/socialite\": \"^5.0\",\n        \"laravel/ui\": \"^4.6\",\n        \"league/flysystem-aws-s3-v3\": \"^3.5\",\n        \"league/html-to-markdown\": \"^5.1\",\n        \"livewire/livewire\": \"^3.4\",\n        \"mailerlite/mailerlite-php\": \"^1.0\",\n        \"mcamara/laravel-localization\": \"^2.0\",\n        \"meilisearch/meilisearch-php\": \"^1.4\",\n        \"orhanerday/open-ai\": \"^4.7\",\n        \"owlchester/laravel-translation-manager\": \"^12\",\n        \"pragmarx/google2fa-laravel\": \"^2.3\",\n        \"predis/predis\": \"^2.0\",\n        \"pusher/pusher-php-server\": \"^7.2\",\n        \"sentry/sentry-laravel\": \"^4.0\",\n        \"sergej-kurakin/diceroller\": \"^2.0\",\n        \"spatie/laravel-backup\": \"^9.0\",\n        \"srmklive/paypal\": \"^3.0\",\n        \"staudenmeir/laravel-adjacency-list\": \"^1.0\",\n        \"staudenmeir/laravel-cte\": \"^1.0\",\n        \"stechstudio/laravel-zipstream\": \"^5.0\",\n        \"stevebauman/purify\": \"^6.3\",\n        \"symfony/http-client\": \"^7.2\",\n        \"symfony/mailgun-mailer\": \"^7.1\"\n    },\n    \"require-dev\": {\n        \"barryvdh/laravel-debugbar\": \"^3.1\",\n        \"barryvdh/laravel-ide-helper\": \"^3.0\",\n        \"fakerphp/faker\": \"^1.22\",\n        \"google/analytics-data\": \"*\",\n        \"larastan/larastan\": \"^3.0\",\n        \"laravel/boost\": \"^2.0\",\n        \"laravel/pint\": \"^1.10\",\n        \"laravel/sail\": \"^1.14\",\n        \"laravel/tinker\": \"^3.0\",\n        \"mockery/mockery\": \"^1.4.4\",\n        \"nunomaduro/collision\": \"^8.1\",\n        \"pestphp/pest\": \"^3\",\n        \"pestphp/pest-plugin-laravel\": \"^3\",\n        \"phpmd/phpmd\": \"^2.13\",\n        \"spatie/laravel-ignition\": \"^2.9\",\n        \"squizlabs/php_codesniffer\": \"^3.4\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"App\\\\\": \"app/\",\n            \"Database\\\\Factories\\\\\": \"database/factories/\",\n            \"Database\\\\Seeders\\\\\": \"database/seeders/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Tests\\\\\": \"tests/\"\n        }\n    },\n    \"extra\": {\n        \"laravel\": {\n            \"dont-discover\": [\n                \"laravel/telescope\"\n            ]\n        }\n    },\n    \"scripts\": {\n        \"phpcs\": \"phpcs --standard=phpcs.xml\",\n        \"post-root-package-install\": [\n            \"@php -r \\\"file_exists('.env') || copy('.env.example', '.env');\\\"\"\n        ],\n        \"post-create-project-cmd\": [\n            \"@php artisan key:generate\"\n        ],\n        \"post-autoload-dump\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postAutoloadDump\",\n            \"@php artisan package:discover\"\n        ],\n        \"test:types\": \"phpstan analyse --ansi --memory-limit 1G\",\n        \"test:types-clear\": \"phpstan clear-result-cache\",\n        \"test:pest\": \"vendor/bin/pest\",\n        \"post-update-cmd\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postUpdate\",\n            \"@php artisan ide-helper:generate\",\n            \"@php artisan ide-helper:meta\"\n        ]\n    },\n    \"config\": {\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true,\n        \"optimize-autoloader\": true,\n        \"allow-plugins\": {\n            \"pestphp/pest-plugin\": true,\n            \"php-http/discovery\": true\n        }\n    }\n}\n"
  },
  {
    "path": "config/ads.php",
    "content": "<?php\n\nreturn [\n    // To allow running multiple ad providers, define the one that is currently being used\n    'provider' => env('AD_PROVIDER'),\n\n    'nitro' => [\n        'enabled' => ! empty(env('NITRO_SITE')),\n        'site' => env('NITRO_SITE'),\n        'tags' => [\n            'video' => 'ads-nitro-video',\n            'leaderboard' => 'ads-nitro-leaderboard',\n            'siderail_right' => 'yes',\n            'siderail_left' => 'yes',\n        ],\n    ],\n\n    'freestar' => [\n        'enabled' => ! empty(env('FREESTAR_SITE')),\n        'site' => env('FREESTAR_SITE'),\n        'tags' => [\n            'incontent' => 'kanka_incontent_reusable',\n            'siderail_right' => 'kanka_siderail_right_1',\n            'siderail_left' => 'kanka_siderail_left',\n            'leaderboard' => 'kanka_leaderboard_atf',\n        ],\n    ],\n];\n"
  },
  {
    "path": "config/app.php",
    "content": "<?php\n\nuse App\\Facades\\AdCache;\nuse App\\Facades\\ApiLog;\nuse App\\Facades\\Attributes;\nuse App\\Facades\\Avatar;\nuse App\\Facades\\Breadcrumb;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\Datagrid;\nuse App\\Facades\\Domain;\nuse App\\Facades\\EntityCache;\nuse App\\Facades\\EntityPermission;\nuse App\\Facades\\EntitySetup;\nuse App\\Facades\\FormCopy;\nuse App\\Facades\\Img;\nuse App\\Facades\\ImportIdMapper;\nuse App\\Facades\\Limit;\nuse App\\Facades\\Mentions;\nuse App\\Facades\\UserCache;\nuse App\\Providers\\AppServiceProvider;\nuse App\\Providers\\AttributesServiceProvider;\nuse App\\Providers\\AvatarServiceProvider;\nuse App\\Providers\\BreadcrumbServiceProvider;\nuse App\\Providers\\CampaignLocalizationServiceProvider;\nuse App\\Providers\\DashboardServiceProvider;\nuse App\\Providers\\DatagridRendererProvider;\nuse App\\Providers\\DatalayerServiceProvider;\nuse App\\Providers\\DomainServiceProvider;\nuse App\\Providers\\EntitySetupServiceProvider;\nuse App\\Providers\\EventServiceProvider;\nuse App\\Providers\\ImgServiceProvider;\nuse App\\Providers\\ImporterServiceProvider;\nuse App\\Providers\\LimitServiceProvider;\nuse App\\Providers\\Logs\\ApiLogServiceProvider;\nuse App\\Providers\\MentionsServiceProvider;\nuse App\\Providers\\ModuleServiceProvider;\nuse App\\Providers\\PermissionsServiceProvider;\nuse App\\Providers\\RouteServiceProvider;\nuse Illuminate\\Auth\\AuthServiceProvider;\nuse Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider;\nuse Illuminate\\Broadcasting\\BroadcastServiceProvider;\nuse Illuminate\\Bus\\BusServiceProvider;\nuse Illuminate\\Cache\\CacheServiceProvider;\nuse Illuminate\\Cookie\\CookieServiceProvider;\nuse Illuminate\\Database\\DatabaseServiceProvider;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Encryption\\EncryptionServiceProvider;\nuse Illuminate\\Filesystem\\FilesystemServiceProvider;\nuse Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider;\nuse Illuminate\\Foundation\\Providers\\FoundationServiceProvider;\nuse Illuminate\\Hashing\\HashServiceProvider;\nuse Illuminate\\Mail\\MailServiceProvider;\nuse Illuminate\\Notifications\\NotificationServiceProvider;\nuse Illuminate\\Pagination\\PaginationServiceProvider;\nuse Illuminate\\Pipeline\\PipelineServiceProvider;\nuse Illuminate\\Queue\\QueueServiceProvider;\nuse Illuminate\\Redis\\RedisServiceProvider;\nuse Illuminate\\Session\\SessionServiceProvider;\nuse Illuminate\\Support\\Facades\\Artisan;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Blade;\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\Facades\\Bus;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Config;\nuse Illuminate\\Support\\Facades\\Cookie;\nuse Illuminate\\Support\\Facades\\Crypt;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\File;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Lang;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Mail;\nuse Illuminate\\Support\\Facades\\Notification;\nuse Illuminate\\Support\\Facades\\Password;\nuse Illuminate\\Support\\Facades\\Queue;\nuse Illuminate\\Support\\Facades\\Redirect;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Illuminate\\Support\\Facades\\Request;\nuse Illuminate\\Support\\Facades\\Response;\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Support\\Facades\\Session;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Facades\\URL;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Support\\Facades\\View;\nuse Illuminate\\Support\\Facades\\Vite;\nuse Illuminate\\Validation\\ValidationServiceProvider;\nuse Illuminate\\View\\ViewServiceProvider;\nuse Intervention\\Image\\Facades\\Image;\nuse Laravel\\Passport\\PassportServiceProvider;\nuse Laravel\\Socialite\\Facades\\Socialite;\nuse Laravel\\Socialite\\SocialiteServiceProvider;\nuse Mcamara\\LaravelLocalization\\Facades\\LaravelLocalization;\nuse PragmaRX\\Google2FALaravel\\Facade;\nuse PragmaRX\\Google2FALaravel\\ServiceProvider;\nuse Stevebauman\\Purify\\Facades\\Purify;\nuse Stevebauman\\Purify\\PurifyServiceProvider;\nuse Vsch\\TranslationManager\\ManagerServiceProvider;\nuse Vsch\\TranslationManager\\TranslationServiceProvider;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Name\n    |--------------------------------------------------------------------------\n    |\n    | This value is the name of your application. This value is used when the\n    | framework needs to place the application's name in a notification or\n    | any other location as required by the application or its packages.\n    |\n    */\n\n    'name' => env('APP_NAME', 'Miscellany'),\n    'email' => env('APP_EMAIL', 'you@example.com'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services your application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stack traces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    */\n\n    'debug' => env('APP_DEBUG', false),\n\n    /*\n     * If the app is hosted along the admin, will enable the community aspects of Kanka.\n     */\n    'admin' => env('APP_ADMIN', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | your application so that it is used when running Artisan tasks.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n    'asset_url' => env('ASSET_URL'),\n    'site_name' => env('APP_SITE_NAME', 'my self hosted worldbuilding app'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. We have gone\n    | ahead and set this to a sensible default for you out of the box.\n    |\n    */\n\n    'timezone' => 'UTC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by the translation service provider. You are free to set this value\n    | to any of the locales which will be supported by the application.\n    |\n    */\n\n    'locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Fallback Locale\n    |--------------------------------------------------------------------------\n    |\n    | The fallback locale determines the locale to use when the current one\n    | is not available. You may change the value to correspond to any of\n    | the language folders that are provided through your application.\n    |\n    */\n\n    'fallback_locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is used by the Illuminate encrypter service and should be set\n    | to a random, 32 character string, otherwise these encrypted strings\n    | will not be safe. Please do this before deploying an application!\n    |\n    */\n\n    'key' => env('APP_KEY'),\n\n    'cipher' => 'AES-256-CBC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Logging Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log settings for your application. Out of\n    | the box, Laravel uses the Monolog PHP logging library. This gives\n    | you a variety of powerful log handlers / formatters to utilize.\n    |\n    | Available Settings: \"single\", \"daily\", \"syslog\", \"errorlog\"\n    |\n    */\n\n    'log' => env('APP_LOG', 'single'),\n\n    'log_level' => env('APP_LOG_LEVEL', 'debug'),\n\n    'version' => env('APP_VERSION', '@develop'),\n\n    'ignore_develop_warning' => env('APP_IGNORE_DEVELOP_WARNING', false),\n\n    /*\n     * Determine if cron job results need to be logged in the database\n     */\n    'log_jobs' => env('APP_LOG_JOBS', false),\n\n    /*\n    |-------------------------------------------\n    | API Version\n    |-------------------------------------------\n    |\n    | This value is the version of your api. It's used when there's no specified\n    | version on the routes, so it will take this as the default, or current.\n     */\n\n    'api_latest' => '1',\n\n    'force_https' => env('APP_FORCE_HTTPS', false),\n\n    'lazy' => env('APP_LAZY', false),\n\n    /**\n     * Default user country fallback, used for local development to simulate a user from a specific country\n     */\n    'default_country' => env('DEFAULT_COUNTRY', 'CH'),\n\n    /**\n     * Leaflet version.\n     */\n    'leaflet_source' => env('LEAFLET_SOURCE', '1.9.4'),\n    'leaflet_css' => env('LEAFLET_CSS', 'sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY='),\n    'leaflet_js' => env('LEAFLET_JS', 'sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo='),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Autoloaded Service Providers\n    |--------------------------------------------------------------------------\n    |\n    | The service providers listed here will be automatically loaded on the\n    | request to your application. Feel free to add your own services to\n    | this array to grant expanded functionality to your applications.\n    |\n    */\n\n    'providers' => [\n\n        /*\n         * Laravel Framework Service Providers...\n         */\n        AuthServiceProvider::class,\n        BroadcastServiceProvider::class,\n        BusServiceProvider::class,\n        CacheServiceProvider::class,\n        ConsoleSupportServiceProvider::class,\n        CookieServiceProvider::class,\n        DatabaseServiceProvider::class,\n        EncryptionServiceProvider::class,\n        FilesystemServiceProvider::class,\n        FoundationServiceProvider::class,\n        HashServiceProvider::class,\n        MailServiceProvider::class,\n        NotificationServiceProvider::class,\n        PaginationServiceProvider::class,\n        PipelineServiceProvider::class,\n        QueueServiceProvider::class,\n        RedisServiceProvider::class,\n        PasswordResetServiceProvider::class,\n        SessionServiceProvider::class,\n        // Illuminate\\Translation\\TranslationServiceProvider::class,\n        ValidationServiceProvider::class,\n        ViewServiceProvider::class,\n        PassportServiceProvider::class,\n\n        /*\n         * Package Service Providers...\n         */\n        PurifyServiceProvider::class,\n        SocialiteServiceProvider::class,\n\n        ManagerServiceProvider::class,\n        TranslationServiceProvider::class,\n        // Illuminate\\Translation\\TranslationServiceProvider::class,\n\n        // RichanFongdasen\\EloquentBlameable\\ServiceProvider::class,\n        ServiceProvider::class,\n\n        /*\n         * Application Service Providers...\n         */\n        AppServiceProvider::class,\n        App\\Providers\\AuthServiceProvider::class,\n        AvatarServiceProvider::class,\n        App\\Providers\\BroadcastServiceProvider::class,\n        EventServiceProvider::class,\n        RouteServiceProvider::class,\n        CampaignLocalizationServiceProvider::class,\n        MentionsServiceProvider::class,\n        BreadcrumbServiceProvider::class,\n        App\\Providers\\CacheServiceProvider::class,\n        ImgServiceProvider::class,\n        AttributesServiceProvider::class,\n        DashboardServiceProvider::class,\n        DatalayerServiceProvider::class,\n        DatagridRendererProvider::class,\n        PermissionsServiceProvider::class,\n        EntitySetupServiceProvider::class,\n        ModuleServiceProvider::class,\n        ApiLogServiceProvider::class,\n        DomainServiceProvider::class,\n        LimitServiceProvider::class,\n        ImporterServiceProvider::class,\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Class Aliases\n    |--------------------------------------------------------------------------\n    |\n    | This array of class aliases will be registered when this application\n    | is started. However, feel free to register as many as you wish as\n    | the aliases are \"lazy\" loaded so they don't hinder performance.\n    |\n    */\n\n    'aliases' => [\n\n        'App' => Illuminate\\Support\\Facades\\App::class,\n        'Artisan' => Artisan::class,\n        'Auth' => Auth::class,\n        'Blade' => Blade::class,\n        'Broadcast' => Broadcast::class,\n        'Bus' => Bus::class,\n        'Cache' => Cache::class,\n        'Config' => Config::class,\n        'Cookie' => Cookie::class,\n        'Crypt' => Crypt::class,\n        'DB' => DB::class,\n        'Eloquent' => Model::class,\n        'Event' => Event::class,\n        'File' => File::class,\n        'Gate' => Gate::class,\n        'Hash' => Hash::class,\n        'Lang' => Lang::class,\n        'Log' => Log::class,\n        'Mail' => Mail::class,\n        'Notification' => Notification::class,\n        'Password' => Password::class,\n        'Queue' => Queue::class,\n        'Redirect' => Redirect::class,\n        'Redis' => Redis::class,\n        'Request' => Request::class,\n        'Response' => Response::class,\n        'Route' => Route::class,\n        'Schema' => Schema::class,\n        'Session' => Session::class,\n        'Storage' => Storage::class,\n        'URL' => URL::class,\n        'Validator' => Validator::class,\n        'View' => View::class,\n        'Vite' => Vite::class,\n\n        // Third party\n        'Purify' => Purify::class,\n        'Socialite' => Socialite::class,\n        'Image' => Image::class,\n        'LaravelLocalization' => LaravelLocalization::class,\n\n        // Kanka\n        'Avatar' => Avatar::class,\n        'CampaignLocalization' => CampaignLocalization::class,\n        'EntityPermission' => EntityPermission::class,\n        'Mentions' => Mentions::class,\n        'Breadcrumb' => Breadcrumb::class,\n        'FormCopy' => FormCopy::class,\n        'EntityCache' => EntityCache::class,\n        'CampaignCache' => CampaignCache::class,\n        'AdCache' => AdCache::class,\n        'UserCache' => UserCache::class,\n        'Img' => Img::class,\n        'Attributes' => Attributes::class,\n        'Datagrid' => Datagrid::class,\n        'EntitySetup' => EntitySetup::class,\n        'Google2FA' => Facade::class,\n        'ApiLog' => ApiLog::class,\n        'Domain' => Domain::class,\n        'Limit' => Limit::class,\n        'ImportIdMapper' => ImportIdMapper::class,\n    ],\n\n];\n"
  },
  {
    "path": "config/attribute-templates.php",
    "content": "<?php\n\nuse Kanka\\Dnd5eMonster\\Template;\n\nreturn [\n    /**\n     * Deprecated, will be removed\n     */\n    'templates' => [\n        'dnd5emonster' => Template::class,\n    ],\n];\n"
  },
  {
    "path": "config/auth.php",
    "content": "<?php\n\nuse App\\Models\\User;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Defaults\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default authentication \"guard\" and password\n    | reset options for your application. You may change these defaults\n    | as required, but they're a perfect start for most applications.\n    |\n    */\n\n    'defaults' => [\n        'guard' => 'web',\n        'passwords' => 'users',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Guards\n    |--------------------------------------------------------------------------\n    |\n    | Next, you may define every authentication guard for your application.\n    | Of course, a great default configuration has been defined for you\n    | here which uses session storage and the Eloquent user provider.\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | Supported: \"session\", \"token\"\n    |\n    */\n\n    'guards' => [\n        'web' => [\n            'driver' => 'session',\n            'provider' => 'users',\n        ],\n\n        'api' => [\n            'driver' => 'passport',\n            'provider' => 'users',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Providers\n    |--------------------------------------------------------------------------\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | If you have multiple user tables or models you may configure multiple\n    | sources which represent each model / table. These sources may then\n    | be assigned to any extra authentication guards you have defined.\n    |\n    | Supported: \"database\", \"eloquent\"\n    |\n    */\n\n    'providers' => [\n        'users' => [\n            'driver' => 'eloquent',\n            'model' => User::class,\n        ],\n\n        // 'users' => [\n        //     'driver' => 'database',\n        //     'table' => 'users',\n        // ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Resetting Passwords\n    |--------------------------------------------------------------------------\n    |\n    | You may specify multiple password reset configurations if you have more\n    | than one user table or model in the application and you want to have\n    | separate password reset settings based on the specific user types.\n    |\n    | The expire time is the number of minutes that the reset token should be\n    | considered valid. This security feature keeps tokens short-lived so\n    | they have less time to be guessed. You may change this as needed.\n    |\n    */\n\n    'passwords' => [\n        'users' => [\n            'provider' => 'users',\n            'table' => 'password_resets',\n            'expire' => 60,\n        ],\n    ],\n\n    /**\n     * If set to false, no users can register\n     */\n    'register_enabled' => env('APP_REGISTRATION_ENABLED', true),\n\n    /**\n     * If set to true, show a dropdown of users for the login instead of a text field\n     */\n    'user_list' => env('APP_LOGIN_LIST', false),\n\n    /**\n     * If set to true user registration will be prefilled with random data.\n     */\n    'fast_registration' => env('ACCOUNT_FAST_REGISTRATION', false),\n\n    'recaptcha' => [\n        'enabled' => ! empty(env('RECAPTCHA_KEY')),\n        'key' => env('RECAPTCHA_KEY'),\n        'secret' => env('RECAPTCHA_SECRET'),\n    ],\n];\n"
  },
  {
    "path": "config/backup.php",
    "content": "<?php\n\nuse Spatie\\Backup\\Notifications\\Notifiable;\nuse Spatie\\Backup\\Notifications\\Notifications\\BackupHasFailedNotification;\nuse Spatie\\Backup\\Notifications\\Notifications\\BackupWasSuccessfulNotification;\nuse Spatie\\Backup\\Notifications\\Notifications\\CleanupHasFailedNotification;\nuse Spatie\\Backup\\Notifications\\Notifications\\CleanupWasSuccessfulNotification;\nuse Spatie\\Backup\\Notifications\\Notifications\\HealthyBackupWasFoundNotification;\nuse Spatie\\Backup\\Notifications\\Notifications\\UnhealthyBackupWasFoundNotification;\nuse Spatie\\Backup\\Tasks\\Cleanup\\Strategies\\DefaultStrategy;\nuse Spatie\\Backup\\Tasks\\Monitor\\HealthChecks\\MaximumAgeInDays;\nuse Spatie\\Backup\\Tasks\\Monitor\\HealthChecks\\MaximumStorageInMegabytes;\nuse Spatie\\DbDumper\\Compressors\\GzipCompressor;\n\nreturn [\n\n    'backup' => [\n\n        /*\n         * The name of this application. You can use this name to monitor\n         * the backups.\n         */\n        'name' => env('APP_NAME', 'laravel-backup'),\n\n        'source' => [\n\n            'files' => [\n\n                /*\n                 * The list of directories and files that will be included in the backup.\n                 */\n                'include' => [\n                    // base_path('config'),\n                ],\n\n                /*\n                 * These directories and files will be excluded from the backup.\n                 *\n                 * Directories used by the backup process will automatically be excluded.\n                 */\n                'exclude' => [\n                    base_path('vendor'),\n                    base_path('node_modules'),\n                ],\n\n                /*\n                 * Determines if symlinks should be followed.\n                 */\n                'follow_links' => false,\n\n                /*\n                 * Determines if it should avoid unreadable folders.\n                 */\n                'ignore_unreadable_directories' => false,\n\n                /*\n                 * This path is used to make directories in resulting zip-file relative\n                 * Set to `null` to include complete absolute path\n                 * Example: base_path()\n                 */\n                'relative_path' => null,\n            ],\n\n            /*\n             * The names of the connections to the databases that should be backed up\n             * MySQL, PostgreSQL, SQLite and Mongo databases are supported.\n             *\n             * The content of the database dump may be customized for each connection\n             * by adding a 'dump' key to the connection settings in config/database.php.\n             * E.g.\n             * 'mysql' => [\n             *       ...\n             *      'dump' => [\n             *           'excludeTables' => [\n             *                'table_to_exclude_from_backup',\n             *                'another_table_to_exclude'\n             *            ]\n             *       ],\n             * ],\n             *\n             * If you are using only InnoDB tables on a MySQL server, you can\n             * also supply the useSingleTransaction option to avoid table locking.\n             *\n             * E.g.\n             * 'mysql' => [\n             *       ...\n             *      'dump' => [\n             *           'useSingleTransaction' => true,\n             *       ],\n             * ],\n             *\n             * For a complete list of available customization options, see https://github.com/spatie/db-dumper\n             */\n            'databases' => [\n                'replica',\n            ],\n        ],\n\n        /*\n         * The database dump can be compressed to decrease diskspace usage.\n         *\n         * Out of the box Laravel-backup supplies\n         * Spatie\\DbDumper\\Compressors\\GzipCompressor::class.\n         *\n         * You can also create custom compressor. More info on that here:\n         * https://github.com/spatie/db-dumper#using-compression\n         *\n         * If you do not want any compressor at all, set it to null.\n         */\n        'database_dump_compressor' => GzipCompressor::class,\n\n        /*\n         * The file extension used for the database dump files.\n         *\n         * If not specified, the file extension will be .archive for MongoDB and .sql for all other databases\n         * The file extension should be specified without a leading .\n         */\n        'database_dump_file_extension' => '',\n\n        'destination' => [\n\n            /*\n             * The filename prefix used for the backup zip file.\n             */\n            'filename_prefix' => '',\n\n            /*\n             * The disk names on which the backups will be stored.\n             */\n            'disks' => [\n                env('BACKUP_DISK', 'local'),\n            ],\n        ],\n\n        /*\n         * The directory where the temporary files will be stored.\n         */\n        'temporary_directory' => storage_path('app/backup-temp'),\n\n        /*\n         * The password to be used for archive encryption.\n         * Set to `null` to disable encryption.\n         */\n        'password' => env('BACKUP_ARCHIVE_PASSWORD'),\n\n        /*\n         * The encryption algorithm to be used for archive encryption.\n         * You can set it to `null` or `false` to disable encryption.\n         *\n         * When set to 'default', we'll use ZipArchive::EM_AES_256 if it is\n         * available on your system.\n         */\n        'encryption' => 'default',\n    ],\n\n    /*\n     * You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'.\n     * For Slack you need to install laravel/slack-notification-channel.\n     *\n     * You can also use your own notification classes, just make sure the class is named after one of\n     * the `Spatie\\Backup\\Events` classes.\n     */\n    'notifications' => [\n\n        'notifications' => [\n            BackupHasFailedNotification::class => ['mail'],\n            UnhealthyBackupWasFoundNotification::class => ['mail'],\n            CleanupHasFailedNotification::class => ['mail'],\n            BackupWasSuccessfulNotification::class => [],\n            HealthyBackupWasFoundNotification::class => ['mail'],\n            CleanupWasSuccessfulNotification::class => [],\n        ],\n\n        /*\n         * Here you can specify the notifiable to which the notifications should be sent. The default\n         * notifiable will use the variables specified in this config file.\n         */\n        'notifiable' => Notifiable::class,\n\n        'mail' => [\n            'to' => 'hello@kanka.io',\n\n            'from' => [\n                'address' => env('MAIL_FROM_ADDRESS', 'hello@kanka.io'),\n                'name' => env('MAIL_FROM_NAME', 'Kanka Backup'),\n            ],\n        ],\n\n        'slack' => [\n            'webhook_url' => '',\n\n            /*\n             * If this is set to null the default channel of the webhook will be used.\n             */\n            'channel' => null,\n\n            'username' => null,\n\n            'icon' => null,\n\n        ],\n    ],\n\n    /*\n     * Here you can specify which backups should be monitored.\n     * If a backup does not meet the specified requirements the\n     * UnHealthyBackupWasFound event will be fired.\n     */\n    'monitor_backups' => [\n        [\n            'name' => env('APP_NAME', 'laravel-backup'),\n            'disks' => [env('BACKUP_DISK', 'local')],\n            'health_checks' => [\n                MaximumAgeInDays::class => 1,\n                MaximumStorageInMegabytes::class => 2000000,\n            ],\n        ],\n\n        /*\n        [\n            'name' => 'name of the second app',\n            'disks' => ['local', 's3'],\n            'health_checks' => [\n                \\Spatie\\Backup\\Tasks\\Monitor\\HealthChecks\\MaximumAgeInDays::class => 1,\n                \\Spatie\\Backup\\Tasks\\Monitor\\HealthChecks\\MaximumStorageInMegabytes::class => 5000,\n            ],\n        ],\n        */\n    ],\n\n    'cleanup' => [\n        /*\n         * The strategy that will be used to cleanup old backups. The default strategy\n         * will keep all backups for a certain amount of days. After that period only\n         * a daily backup will be kept. After that period only weekly backups will\n         * be kept and so on.\n         *\n         * No matter how you configure it the default strategy will never\n         * delete the newest backup.\n         */\n        'strategy' => DefaultStrategy::class,\n\n        'default_strategy' => [\n\n            /*\n             * The number of days for which backups must be kept.\n             */\n            'keep_all_backups_for_days' => 20,\n\n            /*\n             * The number of days for which daily backups must be kept.\n             */\n            'keep_daily_backups_for_days' => 16,\n\n            /*\n             * The number of weeks for which one weekly backup must be kept.\n             */\n            'keep_weekly_backups_for_weeks' => 8,\n\n            /*\n             * The number of months for which one monthly backup must be kept.\n             */\n            'keep_monthly_backups_for_months' => 4,\n\n            /*\n             * The number of years for which one yearly backup must be kept.\n             */\n            'keep_yearly_backups_for_years' => 2,\n\n            /*\n             * After cleaning up the backups remove the oldest backup until\n             * this amount of megabytes has been reached.\n             */\n            'delete_oldest_backups_when_using_more_megabytes_than' => 100000,\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/billing.php",
    "content": "<?php\n\nreturn [\n    'street' => env('APP_BILLING_STREET'),\n    'location' => env('APP_BILLING_LOCATION'),\n    'country' => env('APP_BILLING_COUNTRY'),\n];\n"
  },
  {
    "path": "config/blameable.php",
    "content": "<?php\n\nuse App\\Models\\User;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Guard\n    |--------------------------------------------------------------------------\n    |\n    | Please specify your default authentication guard to be used by blameable\n    | service. You can leave this to null if you're using the default Laravel\n    | authentication guard.\n    |\n    | You can also override this value in model classes to use a different\n    | authentication guard for your specific models.\n    | IE: Some of your models can only be created / updated by specific users\n    | who logged in from a specific authentication guard.\n    |\n    */\n\n    'guard' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Model Definition\n    |--------------------------------------------------------------------------\n    |\n    | Please specify a user model that should be used to setup `creator`\n    | and `updater` relationship.\n    |\n    */\n\n    'user' => User::class,\n\n    /*\n    |--------------------------------------------------------------------------\n    | The `createdBy` attribute\n    |--------------------------------------------------------------------------\n    |\n    | Please define an attribute to use when recording the creator\n    | identifier.\n    |\n    */\n\n    'createdBy' => 'created_by',\n\n    /*\n    |--------------------------------------------------------------------------\n    | The `updatedBy` attribute\n    |--------------------------------------------------------------------------\n    |\n    | Please define an attribute to use when recording the updater\n    | identifier.\n    |\n    */\n\n    'updatedBy' => 'updated_by',\n\n    /*\n    |--------------------------------------------------------------------------\n    | The `deletedBy` attribute\n    |--------------------------------------------------------------------------\n    |\n    | Please define an attribute to use when recording the user\n    | identifier who deleted the record. This feature would only work\n    | if you are using SoftDeletes in your model.\n    |\n    */\n\n    'deletedBy' => 'deleted_by',\n];\n"
  },
  {
    "path": "config/bragi.php",
    "content": "<?php\n\nreturn [\n    'tokens' => [\n        'admin' => env('BRAGI_ADMIN_LIMIT', 99),\n        'elemental' => env('BRAGI_ELEMENTAL_LIMIT', 50),\n        'wyvern' => env('BRAGI_WYVERN_LIMIT', 25),\n        'all' => 0,\n    ],\n    'limit' => [\n        'prompt' => 180,\n    ],\n    'backstory' => [\n        'temperature' => 0.9,\n        'presence_penalty' => 0.5,\n        'frequency_penalty' => 0.2,\n        /**\n         * AI model to use.\n         *\n         * Available models:\n         * \"text-babbage-001\"\n         * \"text-curie-001\"\n         * \"text-ada-001\"\n         * \"text-davinci-003\"\n         * \"gpt-3.5-turbo\"\n         */\n        'engine' => env('OPEN_AI_ENGINE', 'gpt-3.5-turbo'),\n\n        /**\n         * Max number of tokens used for generating a backstory\n         */\n        'tokens' => 400,\n    ],\n    /**\n     * Decimal point after 0 of a chance of being a disciple of Kankappy.\n     */\n    'kankappy' => 5,\n];\n"
  },
  {
    "path": "config/broadcasting.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Broadcaster\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default broadcaster that will be used by the\n    | framework when an event needs to be broadcast. You may set this to\n    | any of the connections defined in the \"connections\" array below.\n    |\n    | Supported: \"pusher\", \"redis\", \"log\", \"null\"\n    |\n    */\n\n    'default' => env('BROADCAST_DRIVER', 'null'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Broadcast Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the broadcast connections that will be used\n    | to broadcast events to other systems or over websockets. Samples of\n    | each available type of connection are provided inside this array.\n    |\n    */\n\n    'connections' => [\n\n        'pusher' => [\n            'driver' => 'pusher',\n            'key' => env('PUSHER_APP_KEY'),\n            'secret' => env('PUSHER_APP_SECRET'),\n            'app_id' => env('PUSHER_APP_ID'),\n            'options' => [\n                'cluster' => env('PUSHER_APP_CLUSTER'),\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n        ],\n\n        'log' => [\n            'driver' => 'log',\n        ],\n\n        'null' => [\n            'driver' => 'null',\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/cache.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default cache connection that gets used while\n    | using this caching library. This connection is used when another is\n    | not explicitly specified when executing a given caching function.\n    |\n    | Supported: \"apc\", \"array\", \"database\", \"file\", \"memcached\", \"redis\"\n    |\n    */\n\n    'default' => env('CACHE_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Stores\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the cache \"stores\" for your application as\n    | well as their drivers. You may even define multiple stores for the\n    | same cache driver to group types of items stored in your caches.\n    |\n    */\n\n    'stores' => [\n\n        'apc' => [\n            'driver' => 'apc',\n        ],\n\n        'array' => [\n            'driver' => 'array',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => 'cache',\n            'connection' => null,\n        ],\n\n        'file' => [\n            'driver' => 'file',\n            'path' => storage_path('framework/cache/data'),\n        ],\n\n        'memcached' => [\n            'driver' => 'memcached',\n            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),\n            'sasl' => [\n                env('MEMCACHED_USERNAME'),\n                env('MEMCACHED_PASSWORD'),\n            ],\n            'options' => [\n                // Memcached::OPT_CONNECT_TIMEOUT  => 2000,\n            ],\n            'servers' => [\n                [\n                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),\n                    'port' => env('MEMCACHED_PORT', 11211),\n                    'weight' => 100,\n                ],\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'app_cache',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Key Prefix\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing a RAM based store such as APC or Memcached, there might\n    | be other applications utilizing the same cache. So, we'll specify a\n    | value to get prefixed to all our keys so we can avoid collisions.\n    |\n    */\n\n    'prefix' => env(\n        'CACHE_PREFIX',\n        Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'\n    ),\n\n];\n"
  },
  {
    "path": "config/cdn.php",
    "content": "<?php\n\nreturn [\n    'ugc' => env('CDN_UGC_URL'),\n];\n"
  },
  {
    "path": "config/colours.php",
    "content": "<?php\n\nreturn [\n    'keys' => [\n        'light-blue', // primary\n        'aqua', // info\n        'green', // success\n        'red', // danger\n        'yellow',\n        'grey', // gray\n        'navy',\n        'teal',\n        'purple',\n        'orange',\n        'maroon',\n        'black',\n        'pink',\n        'brown',\n    ],\n    'mappings' => [\n        // 'blue' => 'primary',\n        // 'lightblue' => 'info',\n        // 'green' => 'success',\n        // 'red' => 'danger',\n        'grey' => 'gray',\n    ],\n];\n"
  },
  {
    "path": "config/cors.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Laravel CORS Options\n    |--------------------------------------------------------------------------\n    |\n    | The allowed_methods and allowed_headers options are case-insensitive.\n    |\n    | You don't need to provide both allowed_origins and allowed_origins_patterns.\n    | If one of the strings passed matches, it is considered a valid origin.\n    |\n    | If array('*') is provided to allowed_methods, allowed_origins or allowed_headers\n    | all methods / origins / headers are allowed.\n    |\n    */\n\n    /*\n     * You can enable CORS for 1 or multiple paths.\n     * Example: ['api/*']\n     */\n    'paths' => ['api/*', 'public/*', '1.0/*'],\n\n    /*\n    * Matches the request method. `[*]` allows all methods.\n    */\n    'allowed_methods' => ['*'],\n\n    /*\n     * Matches the request origin. `[*]` allows all origins.\n     */\n    'allowed_origins' => ['*'],\n\n    /*\n     * Matches the request origin with, similar to `Request::is()`\n     */\n    'allowed_origins_patterns' => [],\n\n    /*\n     * Sets the Access-Control-Allow-Headers response header. `[*]` allows all headers.\n     */\n    'allowed_headers' => ['*'],\n\n    /*\n     * Sets the Access-Control-Expose-Headers response header.\n     */\n    'exposed_headers' => [\n        'X-RateLimit-Remaining',\n        'X-RateLimit-Limit',\n    ],\n\n    /*\n     * Sets the Access-Control-Max-Age response header.\n     */\n    'max_age' => false,\n\n    /*\n     * Sets the Access-Control-Allow-Credentials header.\n     */\n    'supports_credentials' => false,\n];\n"
  },
  {
    "path": "config/database.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Database Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which of the database connections below you wish\n    | to use as your default connection for all database work. Of course\n    | you may use many connections at once using the Database library.\n    |\n    */\n\n    'default' => env('DB_CONNECTION', 'mysql'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here are each of the database connections setup for your application.\n    | Of course, examples of configuring each database platform that is\n    | supported by Laravel is shown below to make development simple.\n    |\n    |\n    | All database work in Laravel is done through the PHP PDO facilities\n    | so make sure you have the driver for your particular database of\n    | choice installed on your machine before you begin development.\n    |\n    */\n\n    'connections' => [\n\n        'sqlite' => [\n            'driver' => 'sqlite',\n            'database' => env('DB_DATABASE', database_path('database.sqlite')),\n            'prefix' => '',\n        ],\n\n        'mysql' => [\n            'driver' => 'mariadb',\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => 'utf8mb4',\n            'collation' => 'utf8mb4_unicode_ci',\n            'prefix' => '',\n            'strict' => false,\n            'sticky' => true,\n            'engine' => null,\n            'dump' => [\n                'dump_binary_path' => env('DB_BINARY_DUMP_PATH', '/usr/bin/'),\n                'add_extra_option' => env('DB_BINARY_DUMP_OPTIONS', '--single-transaction --skip-lock-tables --column-statistics=0'),\n            ],\n        ],\n\n        'replica' => [\n            'driver' => 'mariadb',\n            'host' => env('DB_REPLICA_HOST', env('DB_HOST', '127.0.0.1')),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => 'utf8mb4',\n            'collation' => 'utf8mb4_unicode_ci',\n            'prefix' => '',\n            'strict' => false,\n            'sticky' => true,\n            'engine' => null,\n            'dump' => [\n                'dump_binary_path' => env('DB_BINARY_DUMP_PATH', '/usr/bin/'),\n                'add_extra_option' => env('DB_BINARY_DUMP_OPTIONS', '--single-transaction --skip-lock-tables --column-statistics=0'),\n            ],\n        ],\n\n        'logs' => [\n            'driver' => 'mariadb',\n            'read' => [\n                'host' => env('DB_HOST_RW', env('DB_HOST', '127.0.0.1')),\n            ],\n            'write' => [\n                'host' => env('DB_HOST_RW', env('DB_HOST', '127.0.0.1')),\n            ],\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_LOGS_DATABASE', 'logs'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => 'utf8mb4',\n            'collation' => 'utf8mb4_unicode_ci',\n            'prefix' => '',\n            'strict' => false,\n            'engine' => null,\n            'dump' => [\n                'dump_binary_path' => env('DB_BINARY_DUMP_PATH'),\n                'add_extra_option' => '--single-transaction --skip-lock-tables',\n            ],\n        ],\n\n        'pgsql' => [\n            'driver' => 'pgsql',\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '5432'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => 'utf8',\n            'prefix' => '',\n            'schema' => 'public',\n            'sslmode' => 'prefer',\n        ],\n\n        'sqlsrv' => [\n            'driver' => 'sqlsrv',\n            'host' => env('DB_HOST', 'localhost'),\n            'port' => env('DB_PORT', '1433'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => 'utf8',\n            'prefix' => '',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Migration Repository Table\n    |--------------------------------------------------------------------------\n    |\n    | This table keeps track of all the migrations that have already run for\n    | your application. Using this information, we can determine which of\n    | the migrations on disk haven't actually been run in the database.\n    |\n    */\n\n    'migrations' => 'migrations',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Redis Databases\n    |--------------------------------------------------------------------------\n    |\n    | Redis is an open source, fast, and advanced key-value store that also\n    | provides a richer set of commands than a typical key-value systems\n    | such as APC or Memcached. Laravel makes it easy to dig right in.\n    |\n    */\n\n    'redis' => [\n\n        'client' => env('REDIS_CLIENT', 'predis'),\n\n        // Used for the queue\n        'default' => [\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'password' => env('REDIS_PASSWORD', null),\n            'port' => env('REDIS_PORT', 6379),\n            'database' => 0,\n            'read_write_timeout' => -1,\n        ],\n        'app_cache' => [\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'password' => env('REDIS_PASSWORD', null),\n            'port' => env('REDIS_PORT', 6379),\n            'database' => 1,\n            'read_write_timeout' => -1,\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/debugbar.php",
    "content": "<?php\n\nreturn [\n\n    /*\n     |--------------------------------------------------------------------------\n     | Debugbar Settings\n     |--------------------------------------------------------------------------\n     |\n     | Debugbar is enabled by default, when debug is set to true in app.php.\n     | You can override the value by setting enable to true or false instead of null.\n     |\n     | You can provide an array of URI's that must be ignored (eg. 'api/*')\n     |\n     */\n\n    'enabled' => env('DEBUGBAR_ENABLED', null),\n    'except' => [\n\n    ],\n\n    /*\n     |--------------------------------------------------------------------------\n     | Storage settings\n     |--------------------------------------------------------------------------\n     |\n     | DebugBar stores data for session/ajax requests.\n     | You can disable this, so the debugbar stores data in headers/session,\n     | but this can cause problems with large data collectors.\n     | By default, file storage (in the storage folder) is used. Redis and PDO\n     | can also be used. For PDO, run the package migrations first.\n     |\n     */\n    'storage' => [\n        'enabled' => true,\n        'driver' => 'file', // redis, file, pdo, custom\n        'path' => storage_path('debugbar'), // For file driver\n        'connection' => null,   // Leave null for default connection (Redis/PDO)\n        'provider' => '', // Instance of StorageInterface for custom driver\n    ],\n\n    /*\n     |--------------------------------------------------------------------------\n     | Vendors\n     |--------------------------------------------------------------------------\n     |\n     | Vendor files are included by default, but can be set to false.\n     | This can also be set to 'js' or 'css', to only include javascript or css vendor files.\n     | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)\n     | and for js: jquery and and highlight.js\n     | So if you want syntax highlighting, set it to true.\n     | jQuery is set to not conflict with existing jQuery scripts.\n     |\n     */\n\n    'include_vendors' => true,\n\n    /*\n     |--------------------------------------------------------------------------\n     | Capture Ajax Requests\n     |--------------------------------------------------------------------------\n     |\n     | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors),\n     | you can use this option to disable sending the data through the headers.\n     |\n     | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools.\n     */\n\n    'capture_ajax' => true,\n    'add_ajax_timing' => false,\n\n    /*\n     |--------------------------------------------------------------------------\n     | Custom Error Handler for Deprecated warnings\n     |--------------------------------------------------------------------------\n     |\n     | When enabled, the Debugbar shows deprecated warnings for Symfony components\n     | in the Messages tab.\n     |\n     */\n    'error_handler' => false,\n\n    /*\n     |--------------------------------------------------------------------------\n     | Clockwork integration\n     |--------------------------------------------------------------------------\n     |\n     | The Debugbar can emulate the Clockwork headers, so you can use the Chrome\n     | Extension, without the server-side code. It uses Debugbar collectors instead.\n     |\n     */\n    'clockwork' => false,\n\n    /*\n     |--------------------------------------------------------------------------\n     | DataCollectors\n     |--------------------------------------------------------------------------\n     |\n     | Enable/disable DataCollectors\n     |\n     */\n\n    'collectors' => [\n        'phpinfo' => true,  // Php version\n        'messages' => true,  // Messages\n        'time' => true,  // Time Datalogger\n        'memory' => true,  // Memory usage\n        'exceptions' => true,  // Exception displayer\n        'log' => true,  // Logs from Monolog (merged in messages if enabled)\n        'db' => true,  // Show database (PDO) queries and bindings\n        'views' => true,  // Views with their data\n        'route' => true,  // Current route information\n        'auth' => true, // Display Laravel authentication status\n        'gate' => true, // Display Laravel Gate checks\n        'session' => true,  // Display session data\n        'symfony_request' => true,  // Only one can be enabled..\n        'mail' => true,  // Catch mail messages\n        'laravel' => false, // Laravel version and environment\n        'events' => false, // All events fired\n        'default_request' => false, // Regular or special Symfony request logger\n        'logs' => false, // Add the latest log messages\n        'files' => false, // Show the included files\n        'config' => false, // Display config settings\n        'cache' => false, // Display cache events\n    ],\n\n    /*\n     |--------------------------------------------------------------------------\n     | Extra options\n     |--------------------------------------------------------------------------\n     |\n     | Configure some DataCollectors\n     |\n     */\n\n    'options' => [\n        'auth' => [\n            'show_name' => true,   // Also show the users name/email in the debugbar\n        ],\n        'db' => [\n            'with_params' => true,   // Render SQL with the parameters substituted\n            'backtrace' => true,   // Use a backtrace to find the origin of the query in your files.\n            'timeline' => false,  // Add the queries to the timeline\n            'explain' => [                 // Show EXPLAIN output on queries\n                'enabled' => false,\n                'types' => ['SELECT'],     // ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+\n            ],\n            'hints' => true,    // Show hints for common mistakes\n        ],\n        'mail' => [\n            'full_log' => false,\n        ],\n        'views' => [\n            'data' => false,    // Note: Can slow down the application, because the data can be quite large..\n        ],\n        'route' => [\n            'label' => true,  // show complete route on bar\n        ],\n        'logs' => [\n            'file' => null,\n        ],\n        'cache' => [\n            'values' => true, // collect cache values\n        ],\n    ],\n\n    /*\n     |--------------------------------------------------------------------------\n     | Inject Debugbar in Response\n     |--------------------------------------------------------------------------\n     |\n     | Usually, the debugbar is added just before </body>, by listening to the\n     | Response after the App is done. If you disable this, you have to add them\n     | in your template yourself. See http://phpdebugbar.com/docs/rendering.html\n     |\n     */\n\n    'inject' => true,\n\n    /*\n     |--------------------------------------------------------------------------\n     | DebugBar route prefix\n     |--------------------------------------------------------------------------\n     |\n     | Sometimes you want to set route prefix to be used by DebugBar to load\n     | its resources from. Usually the need comes from misconfigured web server or\n     | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97\n     |\n     */\n    'route_prefix' => '_debugbar',\n\n    /*\n     |--------------------------------------------------------------------------\n     | DebugBar route domain\n     |--------------------------------------------------------------------------\n     |\n     | By default DebugBar route served from the same domain that request served.\n     | To override default domain, specify it as a non-empty value.\n     */\n    'route_domain' => null,\n];\n"
  },
  {
    "path": "config/discord.php",
    "content": "<?php\n\n/**\n * Discord config\n */\n\nreturn [\n    'client_id' => getenv('DISCORD_CLIENT_ID'),\n    'client_secret' => getenv('DISCORD_SECRET'),\n    'channel_id' => getenv('DISCORD_CHANNEL_ID'),\n    'bot_secret' => getenv('DISCORD_BOT_SECRET'),\n    'bot_token' => getenv('DISCORD_BOT_TOKEN'),\n\n    'webhooks' => [\n        'features' => env('DISCORD_WEBHOOK_FEATURES'),\n        'admin' => env('DISCORD_WEBHOOK_ADMIN'),\n    ],\n    'color' => env('DISCORD_COLOR', '7506394'),\n\n    'roles' => [\n        'owlbear' => 435813101506527233,\n        'wyvern' => 805183678153621514,\n        'elemental' => 501452722273386496,\n    ],\n];\n"
  },
  {
    "path": "config/domains.php",
    "content": "<?php\n\nreturn [\n    'api' => env('API_DOMAIN', 'api.kanka.io'),\n    'app' => env('APP_DOMAIN', 'app.kanka.io'),\n    'front' => env('FRONT_DOMAIN', 'kanka.io'),\n    'importer' => env('IMPORTER_DOMAIN', 'https://import.kanka.io'),\n];\n"
  },
  {
    "path": "config/dompdf.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Settings\n    |--------------------------------------------------------------------------\n    |\n    | Set some default values. It is possible to add all defines that can be set\n    | in dompdf_config.inc.php. You can also override the entire config file.\n    |\n    */\n    'show_warnings' => false,   // Throw an Exception on warnings from dompdf\n    'orientation' => 'portrait',\n    'defines' => [\n        /**\n         * The location of the DOMPDF font directory\n         *\n         * The location of the directory where DOMPDF will store fonts and font metrics\n         * Note: This directory must exist and be writable by the webserver process.\n         * *Please note the trailing slash.*\n         *\n         * Notes regarding fonts:\n         * Additional .afm font metrics can be added by executing load_font.php from command line.\n         *\n         * Only the original \"Base 14 fonts\" are present on all pdf viewers. Additional fonts must\n         * be embedded in the pdf file or the PDF may not display correctly. This can significantly\n         * increase file size unless font subsetting is enabled. Before embedding a font please\n         * review your rights under the font license.\n         *\n         * Any font specification in the source HTML is translated to the closest font available\n         * in the font directory.\n         *\n         * The pdf standard \"Base 14 fonts\" are:\n         * Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique,\n         * Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique,\n         * Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic,\n         * Symbol, ZapfDingbats.\n         */\n        'font_dir' => storage_path('fonts/'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782)\n\n        /**\n         * The location of the DOMPDF font cache directory\n         *\n         * This directory contains the cached font metrics for the fonts used by DOMPDF.\n         * This directory can be the same as DOMPDF_FONT_DIR\n         *\n         * Note: This directory must exist and be writable by the webserver process.\n         */\n        'font_cache' => storage_path('fonts/'),\n\n        /**\n         * The location of a temporary directory.\n         *\n         * The directory specified must be writeable by the webserver process.\n         * The temporary directory is required to download remote images and when\n         * using the PFDLib back end.\n         */\n        'temp_dir' => sys_get_temp_dir(),\n\n        /**\n         * ==== IMPORTANT ====\n         *\n         * dompdf's \"chroot\": Prevents dompdf from accessing system files or other\n         * files on the webserver.  All local files opened by dompdf must be in a\n         * subdirectory of this directory.  DO NOT set it to '/' since this could\n         * allow an attacker to use dompdf to read any files on the server.  This\n         * should be an absolute path.\n         * This is only checked on command line call by dompdf.php, but not by\n         * direct class use like:\n         * $dompdf = new DOMPDF();  $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output();\n         */\n        'chroot' => realpath(base_path()),\n\n        /**\n         * Whether to enable font subsetting or not.\n         */\n        'enable_font_subsetting' => true,\n\n        /**\n         * The PDF rendering backend to use\n         *\n         * Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and\n         * 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will\n         * fall back on CPDF. 'GD' renders PDFs to graphic files. {@link * Canvas_Factory} ultimately determines which rendering class to instantiate\n         * based on this setting.\n         *\n         * Both PDFLib & CPDF rendering backends provide sufficient rendering\n         * capabilities for dompdf, however additional features (e.g. object,\n         * image and font support, etc.) differ between backends.  Please see\n         * {@link PDFLib_Adapter} for more information on the PDFLib backend\n         * and {@link CPDF_Adapter} and lib/class.pdf.php for more information\n         * on CPDF. Also see the documentation for each backend at the links\n         * below.\n         *\n         * The GD rendering backend is a little different than PDFLib and\n         * CPDF. Several features of CPDF and PDFLib are not supported or do\n         * not make any sense when creating image files.  For example,\n         * multiple pages are not supported, nor are PDF 'objects'.  Have a\n         * look at {@link GD_Adapter} for more information.  GD support is\n         * experimental, so use it at your own risk.\n         *\n         * @link http://www.pdflib.com\n         * @link http://www.ros.co.nz/pdf\n         * @link http://www.php.net/image\n         */\n        'pdf_backend' => 'CPDF',\n\n        /**\n         * PDFlib license key\n         *\n         * If you are using a licensed, commercial version of PDFlib, specify\n         * your license key here.  If you are using PDFlib-Lite or are evaluating\n         * the commercial version of PDFlib, comment out this setting.\n         *\n         * @link http://www.pdflib.com\n         *\n         * If pdflib present in web server and auto or selected explicitely above,\n         * a real license code must exist!\n         */\n        // \"DOMPDF_PDFLIB_LICENSE\" => \"your license key here\",\n\n        /**\n         * html target media view which should be rendered into pdf.\n         * List of types and parsing rules for future extensions:\n         * http://www.w3.org/TR/REC-html40/types.html\n         *   screen, tty, tv, projection, handheld, print, braille, aural, all\n         * Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3.\n         * Note, even though the generated pdf file is intended for print output,\n         * the desired content might be different (e.g. screen or projection view of html file).\n         * Therefore allow specification of content here.\n         */\n        'default_media_type' => 'screen',\n\n        /**\n         * The default paper size.\n         *\n         * North America standard is \"letter\"; other countries generally \"a4\"\n         *\n         * @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.)\n         */\n        'default_paper_size' => 'a4',\n\n        /**\n         * The default font family\n         *\n         * Used if no suitable fonts can be found. This must exist in the font folder.\n         *\n         * @var string\n         */\n        'default_font' => 'dejavu sans, dejavu sans condensed, dejavu sans mono, dejavu serif, dejavu serif condensed',\n\n        /**\n         * Image DPI setting\n         *\n         * This setting determines the default DPI setting for images and fonts.  The\n         * DPI may be overridden for inline images by explictly setting the\n         * image's width & height style attributes (i.e. if the image's native\n         * width is 600 pixels and you specify the image's width as 72 points,\n         * the image will have a DPI of 600 in the rendered PDF.  The DPI of\n         * background images can not be overridden and is controlled entirely\n         * via this parameter.\n         *\n         * For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI).\n         * If a size in html is given as px (or without unit as image size),\n         * this tells the corresponding size in pt.\n         * This adjusts the relative sizes to be similar to the rendering of the\n         * html page in a reference browser.\n         *\n         * In pdf, always 1 pt = 1/72 inch\n         *\n         * Rendering resolution of various browsers in px per inch:\n         * Windows Firefox and Internet Explorer:\n         *   SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:?\n         * Linux Firefox:\n         *   about:config *resolution: Default:96\n         *   (xorg screen dimension in mm and Desktop font dpi settings are ignored)\n         *\n         * Take care about extra font/image zoom factor of browser.\n         *\n         * In images, <img> size in pixel attribute, img css style, are overriding\n         * the real image dimension in px for rendering.\n         *\n         * @var int\n         */\n        'dpi' => 96,\n\n        /**\n         * Enable inline PHP\n         *\n         * If this setting is set to true then DOMPDF will automatically evaluate\n         * inline PHP contained within <script type=\"text/php\"> ... </script> tags.\n         *\n         * Enabling this for documents you do not trust (e.g. arbitrary remote html\n         * pages) is a security risk.  Set this option to false if you wish to process\n         * untrusted documents.\n         *\n         * @var bool\n         */\n        'enable_php' => false,\n\n        /**\n         * Enable inline Javascript\n         *\n         * If this setting is set to true then DOMPDF will automatically insert\n         * JavaScript code contained within <script type=\"text/javascript\"> ... </script> tags.\n         *\n         * @var bool\n         */\n        'enable_javascript' => true,\n\n        /**\n         * Enable remote file access\n         *\n         * If this setting is set to true, DOMPDF will access remote sites for\n         * images and CSS files as required.\n         * This is required for part of test case www/test/image_variants.html through www/examples.php\n         *\n         * Attention!\n         * This can be a security risk, in particular in combination with DOMPDF_ENABLE_PHP and\n         * allowing remote access to dompdf.php or on allowing remote html code to be passed to\n         * $dompdf = new DOMPDF(, $dompdf->load_html(...,\n         * This allows anonymous users to download legally doubtful internet content which on\n         * tracing back appears to being downloaded by your server, or allows malicious php code\n         * in remote html pages to be executed by your server with your account privileges.\n         *\n         * @var bool\n         */\n        'enable_remote' => true,\n\n        /**\n         * A ratio applied to the fonts height to be more like browsers' line height\n         */\n        'font_height_ratio' => 1.1,\n\n        /**\n         * Use the more-than-experimental HTML5 Lib parser\n         */\n        'enable_html5_parser' => false,\n    ],\n\n];\n"
  },
  {
    "path": "config/entities.php",
    "content": "<?php\n\nreturn [\n    'hard_delete' => env('APP_ENTITY_HARD_DELETE', 30),\n    'hard_delete_posts' => env('APP_ENTITY_HARD_DELETE_POSTS', 30),\n    'logs' => env('APP_ENTITY_FULL_LOGS', 30),\n    'logs_delete' => env('APP_ENTITY_LOGS_DELETE', 365),\n    // Experimental flag\n    'custom' => env('APP_CUSTOM_ENTITIES', false),\n\n    'ids' => [\n        'character' => 1,\n        'family' => 2,\n        'location' => 3,\n        'organisation' => 4,\n        'item' => 5,\n        'note' => 6,\n        'event' => 7,\n        'calendar' => 8,\n        'race' => 9,\n        'quest' => 10,\n        'journal' => 11,\n        'tag' => 12,\n        'dice_roll' => 13,\n        'conversation' => 14,\n        'attribute_template' => 15,\n        'ability' => 16,\n        'map' => 17,\n        'timeline' => 18,\n        'bookmark' => 19,\n        'creature' => 20,\n        'whiteboard' => (int) env('APP_WHITEBOARD_ID', 10000),\n    ],\n\n    'classes' => [\n        'ability' => 'App\\Models\\Ability',\n        'character' => 'App\\Models\\Character',\n        'calendar' => 'App\\Models\\Calendar',\n        'conversation' => 'App\\Models\\Conversation',\n        'creature' => 'App\\Models\\Creature',\n        'event' => 'App\\Models\\Event',\n        'family' => 'App\\Models\\Family',\n        'item' => 'App\\Models\\Item',\n        'journal' => 'App\\Models\\Journal',\n        'location' => 'App\\Models\\Location',\n        'map' => 'App\\Models\\Map',\n        'note' => 'App\\Models\\Note',\n        'organisation' => 'App\\Models\\Organisation',\n        'quest' => 'App\\Models\\Quest',\n        'race' => 'App\\Models\\Race',\n        'tag' => 'App\\Models\\Tag',\n        'timeline' => 'App\\Models\\Timeline',\n        'attribute_template' => 'App\\Models\\AttributeTemplate',\n        'dice_roll' => 'App\\Models\\DiceRoll',\n        'bookmark' => 'App\\Models\\Bookmark',\n        'relation' => 'App\\Models\\Relation',\n    ],\n\n    'classes-plural' => [\n        'abilities' => 'App\\Models\\Ability',\n        'characters' => 'App\\Models\\Character',\n        'calendars' => 'App\\Models\\Calendar',\n        'conversations' => 'App\\Models\\Conversation',\n        'creatures' => 'App\\Models\\Creature',\n        'events' => 'App\\Models\\Event',\n        'families' => 'App\\Models\\Family',\n        'items' => 'App\\Models\\Item',\n        'journals' => 'App\\Models\\Journal',\n        'locations' => 'App\\Models\\Location',\n        'maps' => 'App\\Models\\Map',\n        'notes' => 'App\\Models\\Note',\n        'organisations' => 'App\\Models\\Organisation',\n        'quests' => 'App\\Models\\Quest',\n        'races' => 'App\\Models\\Race',\n        'tags' => 'App\\Models\\Tag',\n        'timelines' => 'App\\Models\\Timeline',\n        'attribute_templates' => 'App\\Models\\AttributeTemplate',\n        'dice_rolls' => 'App\\Models\\DiceRoll',\n        'bookmarks' => 'App\\Models\\Bookmark',\n        'relations' => 'App\\Models\\Relation',\n    ],\n];\n"
  },
  {
    "path": "config/filesystems.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. The \"local\" disk, as well as a variety of cloud\n    | based disks are available to your application. Just store away!\n    |\n    */\n\n    'default' => env('FILESYSTEM_DRIVER', 'public'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure as many filesystem \"disks\" as you wish, and you\n    | may even configure multiple disks of the same driver. Defaults have\n    | been setup for each driver as an example of the required options.\n    |\n    | Supported Drivers: \"local\", \"ftp\", \"s3\", \"rackspace\"\n    |\n    */\n\n    'disks' => [\n        'local' => [\n            'driver' => 'local',\n            'root' => storage_path('app'),\n        ],\n\n        'public' => [\n            'driver' => 'local',\n            'root' => storage_path('app/public'),\n            'url' => env('APP_URL') . '/storage',\n            'visibility' => 'public',\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n            // Root folder is prefixed outside of prod\n            'root' => env('APP_ENV') != 'production' ? env('APP_ENV') : null,\n            'visibility' => 'public',\n            // Url for including the assets in the browser\n            'url' => env('AWS_URL_S3', env('AWS_URL')),\n            'endpoint' => env('AWS_ENDPOINT'),\n            'use_path_style_endpoint' => env(\n                'AWS_USE_PATH_STYLE_ENDPOINT',\n                false,\n            ),\n        ],\n\n        'backup' => [\n            'driver' => 's3',\n            'key' => env('HETZNER_S3_ACCESS_KEY_ID'),\n            'secret' => env('HETZNER_S3_ACCESS_KEY_SECRET'),\n            'region' => env('HETZNER_S3_REGION'),\n            'bucket' => env('S3_BUCKET_BACKUP'),\n            'root' => env('APP_ENV'),\n            'endpoint' => env('HETZNER_S3_ENDPOINT'),\n            'use_path_style_endpoint' => true,\n            'retries' => [\n                'mode' => 'adaptive', // handles backoff automatically\n                'max' => 10,\n            ],\n            'options' => [\n                'part_size' => 1024 * 1024 * 500,\n            ],\n            'http' => [\n                'timeout' => 0, // No timeout for the request\n                'connect_timeout' => 10, // Time to wait for a connection\n            ],\n            'throw' => false,\n            'visibility' => 'private',\n        ],\n\n        'export' => [\n            'driver' => 's3',\n            'key' => env('HETZNER_S3_ACCESS_KEY_ID'),\n            'secret' => env('HETZNER_S3_ACCESS_KEY_SECRET'),\n            'region' => env('HETZNER_S3_REGION'),\n            'bucket' => env('S3_BUCKET_EXPORT'),\n            'root' => env('APP_ENV'),\n            'endpoint' => env('HETZNER_S3_ENDPOINT'),\n            'use_path_style_endpoint' => true,\n        ],\n\n        's3-assets' => [\n            'driver' => 's3',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION'),\n            'bucket' => env('AWS_BUCKET_APP'),\n            'visibility' => 'public',\n            'url' => env('AWS_URL_ASSETS', env('AWS_URL')),\n            'endpoint' => env('AWS_ENDPOINT'),\n            'use_path_style_endpoint' => env(\n                'AWS_USE_PATH_STYLE_ENDPOINT',\n                false,\n            ),\n        ],\n\n        's3-marketplace' => [\n            'driver' => 's3',\n            'key' => env('HETZNER_S3_ACCESS_KEY_ID'),\n            'secret' => env('HETZNER_S3_ACCESS_KEY_SECRET'),\n            'region' => env('HETZNER_S3_REGION'),\n            'bucket' => env('AWS_BUCKET_MARKETPLACE'),\n            'endpoint' => env('HETZNER_S3_ENDPOINT'),\n            'root' => env('APP_ENV') != 'production' ? env('APP_ENV') : null,\n            'use_path_style_endpoint' => true,\n        ],\n\n        /**\n         * On production, we use cloudfront in front of the default s3\n         */\n        'cloudfront' => [\n            'driver' => 's3',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n            'visibility' => 'public',\n            // Url for including the assets in the browser\n            'url' => env('AWS_CLOUDFRONT'),\n            'endpoint' => env('AWS_ENDPOINT'),\n            'use_path_style_endpoint' => env(\n                'AWS_USE_PATH_STYLE_ENDPOINT',\n                false,\n            ),\n        ],\n    ],\n];\n"
  },
  {
    "path": "config/fontawesome.php",
    "content": "<?php\n\nreturn [\n    /**\n     * We use FontAwesome kits to load additional icons. To have fontawesome loaded in your local\n     * version of Kanka, create a kit on fontawesome and add your kit name in your .env file.\n     * https://fontawesome.com/kits\n     */\n    'kit' => getenv('FONTAWESOME_KIT'),\n\n    'search' => 'https://fontawesome.com/search',\n];\n"
  },
  {
    "path": "config/front.php",
    "content": "<?php\n\nreturn [\n    'featured_campaigns' => env('APP_FRONT_FEATURED_CAMPAIGNS'),\n];\n"
  },
  {
    "path": "config/google2fa.php",
    "content": "<?php\n\nuse PragmaRX\\Google2FALaravel\\Support\\Constants;\n\nreturn [\n\n    /*\n     * Enable / disable Google2FA.\n     */\n    'enabled' => env('OTP_ENABLED', false),\n\n    /*\n     * Lifetime in minutes.\n     *\n     * In case you need your users to be asked for a new one time passwords from time to time.\n     */\n    'lifetime' => env('OTP_LIFETIME', 0), // 0 = eternal\n\n    /*\n     * Renew lifetime at every new request.\n     */\n    'keep_alive' => env('OTP_KEEP_ALIVE', true),\n\n    /*\n     * Auth container binding.\n     */\n    'auth' => 'auth',\n\n    /*\n     * Guard.\n     */\n    'guard' => '',\n\n    /*\n     * 2FA verified session var.\n     */\n    'session_var' => 'google2fa',\n\n    /*\n     * One Time Password request input name.\n     */\n    'otp_input' => 'one_time_password',\n\n    /*\n     * One Time Password Window.\n     */\n    'window' => 1,\n\n    /*\n     * Forbid user to reuse One Time Passwords.\n     */\n    'forbid_old_passwords' => false,\n\n    /*\n     * User's table column for google2fa secret.\n     */\n    'otp_secret_column' => 'google2fa_secret',\n\n    /*\n     * One Time Password View.\n     */\n    'view' => 'auth.otp',\n\n    /*\n     * One Time Password error message.\n     */\n    'error_messages' => [\n        'wrong_otp' => \"The 'One Time Password' typed was wrong.\",\n        'cannot_be_empty' => 'One Time Password cannot be empty.',\n        'unknown' => 'An unknown error has occurred. Please try again.',\n    ],\n\n    /*\n     * Throw exceptions or just fire events?\n     */\n    'throw_exceptions' => env('OTP_THROW_EXCEPTION', true),\n\n    /*\n     * Which image backend to use for generating QR codes?\n     *\n     * Supports imagemagick, svg and eps\n     */\n    'qrcode_image_backend' => Constants::QRCODE_IMAGE_BACKEND_SVG,\n\n];\n"
  },
  {
    "path": "config/ignition.php",
    "content": "<?php\n\nuse Facade\\Ignition\\SolutionProviders\\MissingPackageSolutionProvider;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\ArrayArgumentReducer;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\BaseTypeArgumentReducer;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\ClosureArgumentReducer;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\DateTimeArgumentReducer;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\DateTimeZoneArgumentReducer;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\EnumArgumentReducer;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\StdClassArgumentReducer;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\StringableArgumentReducer;\nuse Spatie\\Backtrace\\Arguments\\Reducers\\SymphonyRequestArgumentReducer;\nuse Spatie\\Ignition\\Solutions\\SolutionProviders\\BadMethodCallSolutionProvider;\nuse Spatie\\Ignition\\Solutions\\SolutionProviders\\MergeConflictSolutionProvider;\nuse Spatie\\Ignition\\Solutions\\SolutionProviders\\UndefinedPropertySolutionProvider;\nuse Spatie\\LaravelIgnition\\ArgumentReducers\\CollectionArgumentReducer;\nuse Spatie\\LaravelIgnition\\ArgumentReducers\\ModelArgumentReducer;\nuse Spatie\\LaravelIgnition\\Recorders\\DumpRecorder\\DumpRecorder;\nuse Spatie\\LaravelIgnition\\Recorders\\JobRecorder\\JobRecorder;\nuse Spatie\\LaravelIgnition\\Recorders\\LogRecorder\\LogRecorder;\nuse Spatie\\LaravelIgnition\\Recorders\\QueryRecorder\\QueryRecorder;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\DefaultDbNameSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\GenericLaravelExceptionSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\IncorrectValetDbCredentialsSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\InvalidRouteActionSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\MissingAppKeySolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\MissingColumnSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\MissingImportSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\MissingLivewireComponentSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\MissingMixManifestSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\MissingViteManifestSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\OpenAiSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\RunningLaravelDuskInProductionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\SailNetworkSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\TableNotFoundSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\UndefinedViewVariableSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\UnknownMariadbCollationSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\UnknownMysql8CollationSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\UnknownValidationSolutionProvider;\nuse Spatie\\LaravelIgnition\\Solutions\\SolutionProviders\\ViewNotFoundSolutionProvider;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Editor\n    |--------------------------------------------------------------------------\n    |\n    | Choose your preferred editor to use when clicking any edit button.\n    |\n    | Supported: \"phpstorm\", \"vscode\", \"vscode-insiders\", \"vscodium\", \"textmate\", \"emacs\",\n    |            \"sublime\", \"atom\", \"nova\", \"macvim\", \"idea\", \"netbeans\",\n    |            \"xdebug\"\n    |\n    */\n\n    'editor' => env('IGNITION_EDITOR', 'phpstorm'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Theme\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which theme Ignition should use.\n    |\n    | Supported: \"light\", \"dark\", \"auto\"\n    |\n    */\n\n    'theme' => env('IGNITION_THEME', 'auto'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Sharing\n    |--------------------------------------------------------------------------\n    |\n    | You can share local errors with colleagues or others around the world.\n    | Sharing is completely free and doesn't require an account on Flare.\n    |\n    | If necessary, you can completely disable sharing below.\n    |\n    */\n\n    'enable_share_button' => env('IGNITION_SHARING_ENABLED', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Register Ignition commands\n    |--------------------------------------------------------------------------\n    |\n    | Ignition comes with an additional make command that lets you create\n    | new solution classes more easily. To keep your default Laravel\n    | installation clean, this command is not registered by default.\n    |\n    | You can enable the command registration below.\n    |\n    */\n    'register_commands' => env('REGISTER_IGNITION_COMMANDS', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Solution Providers\n    |--------------------------------------------------------------------------\n    |\n    | List of solution providers that should be loaded. You may specify additional\n    | providers as fully qualified class names.\n    |\n    */\n\n    'solution_providers' => [\n        // from spatie/ignition\n        BadMethodCallSolutionProvider::class,\n        MergeConflictSolutionProvider::class,\n        UndefinedPropertySolutionProvider::class,\n\n        // from spatie/laravel-ignition\n        IncorrectValetDbCredentialsSolutionProvider::class,\n        MissingAppKeySolutionProvider::class,\n        DefaultDbNameSolutionProvider::class,\n        TableNotFoundSolutionProvider::class,\n        MissingImportSolutionProvider::class,\n        InvalidRouteActionSolutionProvider::class,\n        ViewNotFoundSolutionProvider::class,\n        RunningLaravelDuskInProductionProvider::class,\n        MissingColumnSolutionProvider::class,\n        UnknownValidationSolutionProvider::class,\n        MissingMixManifestSolutionProvider::class,\n        MissingViteManifestSolutionProvider::class,\n        MissingLivewireComponentSolutionProvider::class,\n        UndefinedViewVariableSolutionProvider::class,\n        GenericLaravelExceptionSolutionProvider::class,\n        OpenAiSolutionProvider::class,\n        SailNetworkSolutionProvider::class,\n        UnknownMysql8CollationSolutionProvider::class,\n        UnknownMariadbCollationSolutionProvider::class,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Ignored Solution Providers\n    |--------------------------------------------------------------------------\n    |\n    | You may specify a list of solution providers (as fully qualified class\n    | names) that shouldn't be loaded. Ignition will ignore these classes\n    | and possible solutions provided by them will never be displayed.\n    |\n    */\n\n    'ignored_solution_providers' => [\n        MissingPackageSolutionProvider::class,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Runnable Solutions\n    |--------------------------------------------------------------------------\n    |\n    | Some solutions that Ignition displays are runnable and can perform\n    | various tasks. Runnable solutions are enabled when your app has\n    | debug mode enabled. You may also fully disable this feature.\n    |\n    */\n\n    'enable_runnable_solutions' => env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Remote Path Mapping\n    |--------------------------------------------------------------------------\n    |\n    | If you are using a remote dev server, like Laravel Homestead, Docker, or\n    | even a remote VPS, it will be necessary to specify your path mapping.\n    |\n    | Leaving one, or both of these, empty or null will not trigger the remote\n    | URL changes and Ignition will treat your editor links as local files.\n    |\n    | \"remote_sites_path\" is an absolute base path for your sites or projects\n    | in Homestead, Vagrant, Docker, or another remote development server.\n    |\n    | Example value: \"/home/vagrant/Code\"\n    |\n    | \"local_sites_path\" is an absolute base path for your sites or projects\n    | on your local computer where your IDE or code editor is running on.\n    |\n    | Example values: \"/Users/<name>/Code\", \"C:\\Users\\<name>\\Documents\\Code\"\n    |\n    */\n\n    'remote_sites_path' => env('IGNITION_REMOTE_SITES_PATH', base_path()),\n    'local_sites_path' => env('IGNITION_LOCAL_SITES_PATH', ''),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Housekeeping Endpoint Prefix\n    |--------------------------------------------------------------------------\n    |\n    | Ignition registers a couple of routes when it is enabled. Below you may\n    | specify a route prefix that will be used to host all internal links.\n    |\n    */\n    'housekeeping_endpoint_prefix' => '_ignition',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Settings File\n    |--------------------------------------------------------------------------\n    |\n    | Ignition allows you to save your settings to a specific global file.\n    |\n    | If no path is specified, a file with settings will be saved to the user's\n    | home directory. The directory depends on the OS and its settings but it's\n    | typically `~/.ignition.json`. In this case, the settings will be applied\n    | to all of your projects where Ignition is used and the path is not\n    | specified.\n    |\n    | However, if you want to store your settings on a project basis, or you\n    | want to keep them in another directory, you can specify a path where\n    | the settings file will be saved. The path should be an existing directory\n    | with correct write access.\n    | For example, create a new `ignition` folder in the storage directory and\n    | use `storage_path('ignition')` as the `settings_file_path`.\n    |\n    | Default value: '' (empty string)\n    */\n\n    'settings_file_path' => '',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Recorders\n    |--------------------------------------------------------------------------\n    |\n    | Ignition registers a couple of recorders when it is enabled. Below you may\n    | specify a recorders will be used to record specific events.\n    |\n    */\n\n    'recorders' => [\n        DumpRecorder::class,\n        JobRecorder::class,\n        LogRecorder::class,\n        QueryRecorder::class,\n    ],\n\n    /*\n     * When a key is set, we'll send your exceptions to Open AI to generate a solution\n     */\n\n    'open_ai_key' => env('IGNITION_OPEN_AI_KEY'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Include arguments\n    |--------------------------------------------------------------------------\n    |\n    | Ignition show you stack traces of exceptions with the arguments that were\n    | passed to each method. This feature can be disabled here.\n    |\n    */\n\n    'with_stack_frame_arguments' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Argument reducers\n    |--------------------------------------------------------------------------\n    |\n    | Ignition show you stack traces of exceptions with the arguments that were\n    | passed to each method. To make these variables more readable, you can\n    | specify a list of classes here which summarize the variables.\n    |\n    */\n\n    'argument_reducers' => [\n        BaseTypeArgumentReducer::class,\n        ArrayArgumentReducer::class,\n        StdClassArgumentReducer::class,\n        EnumArgumentReducer::class,\n        ClosureArgumentReducer::class,\n        DateTimeArgumentReducer::class,\n        DateTimeZoneArgumentReducer::class,\n        SymphonyRequestArgumentReducer::class,\n        ModelArgumentReducer::class,\n        CollectionArgumentReducer::class,\n        StringableArgumentReducer::class,\n    ],\n];\n"
  },
  {
    "path": "config/image.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Image Driver\n    |--------------------------------------------------------------------------\n    |\n    | Intervention Image supports \"GD Library\" and \"Imagick\" to process images\n    | internally. You may choose one of them according to your PHP\n    | configuration. By default PHP's \"GD Library\" implementation is used.\n    |\n    | Supported: \"gd\", \"imagick\"\n    |\n    */\n\n    'driver' => 'gd',\n];\n"
  },
  {
    "path": "config/imports.php",
    "content": "<?php\n\nreturn [\n    // Days before imports are pruned.\n    'prune' => env('CAMPAIGN_IMPORTS_PRUNE', 90),\n];\n"
  },
  {
    "path": "config/laravel-translation-manager.php",
    "content": "<?php\n\nreturn [\n\n    /**\n     * Specify the locale that is used for creating the initial translation strings. This locale is considered\n     * to be the driver of all other translations.\n     *\n     * @type string\n     */\n    'primary_locale' => 'en',\n    /**\n     * Specify any additional locales that you want to be shown even if they have no translation files or translations in the database\n     *\n     * @type array of strings\n     */\n    'locales' => [\n        // 'ca',\n        'en',\n        'en-US',\n        'de',\n        'es',\n        'fr',\n        'hu',\n        'it',\n        'nl',\n        'pt-BR',\n        'ru',\n        'sk',\n        // 'he',\n        // 'hr',\n        'pl',\n        // 'el',\n        // 'tr',\n        // 'gl',\n        // 'nb',\n        // 'sv',\n        // 'zh-CN',\n        //        'uk',\n    ],\n    /**\n     * Specify locales that you want to show in the web interface, if empty or not provided then all locales in the database\n     * will be shown\n     *\n     * @type array of strings\n     */\n    'show_locales' => [\n        'en',\n        'fr',\n        'de',\n        'es',\n        'it',\n    ],\n    /**\n     * Specify the prefix used for all cookies, session data and cache persistence.\n     *\n     * @type string\n     */\n    'persistent_prefix' => 'g2Lu2pyz8QcVrxhL32eN',\n    /**\n     * Enable management of translations beyond just editing and command line manipulations\n     *\n     * @type bool\n     */\n    'admin_enabled' => true,\n    /**\n     * use cookies to store user locale\n     *\n     * @type bool\n     */\n    'use_cookies' => false,\n    /**\n     *  Inplace edit mode\n     *  1 - Using trans(), noEditTrans(), ifEditTrans() in all templates\n     *  2 - Only by modifying application template (disables ifEditTrans and reverts trans() to default functionality)\n     */\n    'inplace_edit_mode' => 2,\n    /**\n     * Enable management of translations for editors by locales\n     *\n     * Only applies to users that are not translation admins\n     *\n     * If not defined then by locale access is disabled and all locales can be\n     * modified by any editor.\n     *\n     * @type bool\n     */\n    'user_locales_enabled' => true,\n    /**\n     * Enable markdown translation to html on the fly\n     *\n     * With this option set to a suffix string, all keys that end in this suffix, will\n     * have their text converted to HTML via facade \\Markdown::convertToHtml(translationText)\n     * graham-cambell/Laravel-Markdown package serves this purpose well.\n     *\n     * The resulting HTML text will be saved in a key, with the suffix removed.\n     *\n     * This conversion is ONLY done when the translation for the markdown key is modified\n     * via the web UI. Keys already in the translation files or in the database are assumed to\n     * be properly converted.\n     *\n     * Set this to a reasonable suffix that will not conflict with normal keys in your application\n     * and with laravel translation key convention.\n     *\n     * Do not use '.md' or anything with a period. It denotes a nested array key for translations.\n     * Do not use multi-byte characters in the suffix. non-multi-byte string operations are used in manipulating the key.\n     * Do not use keys that will cause issues in jQuery because keys are used to create jQueries with keys assumed to be valid element id's\n     * Do not use colons since these are used to delimit package translation groups\n     * You get the picture. Try a suffix out and if it works for you great. If not try another one\n     *\n     * Some options that work are: '-md', '--md', '-md-'\n     *\n     * @type string\n     */\n    'markdown_key_suffix' => '',\n    /**\n     * No Longer used. Must implement 'ltm-editors-list' ability that will return true\n     * if the user can manage per locale access with an array of objects with: id, email,\n     * and name fields that correspond to the list of users to be displayed in the web UI\n     * to allow the current admin user to manage per locale access.\n     */\n    // 'user_list_provider' => null,\n    /**\n     * Specify export formatting options:\n     *\n     * PRESERVE_EMPTY_ARRAYS - preserve first level translations that are empty arrays\n     * USE_QUOTES - use \" instead of ' for wrapping strings\n     * USE_HEREDOC - use <<<'TEXT' for wrapping string that contain \\n\n     * USE_SHORT_ARRAY - use [] instead of array() for arrays\n     * SORT_KEYS - alphabetically sort keys withing an array\n     *\n     * @type string | array\n     */\n    'export_format' => [\n        'PRESERVE_EMPTY_ARRAYS',\n        // 'USE_QUOTES',\n        'USE_HEREDOC',\n        'USE_SHORT_ARRAY',\n        'SORT_KEYS',\n    ],\n    /**\n     * Enable mismatch dashboard\n     *\n     * @type bool\n     */\n    'mismatch_enabled' => false,\n    /**\n     * Exclude specific groups from Laravel Translation Manager.\n     * This is useful if, for example, you want to avoid editing the official Laravel language files.\n     *\n     * @type array\n     */\n    'exclude_groups' => [\n        'banners',\n        'reminders',\n        'validation',\n        'validation-inline',\n        'pagination',\n        'passwords',\n        'backup::notifications',\n        'faq',\n        'tutorials.actions',\n        'tutorials.home',\n        'tutorials.characters',\n        'openai',\n        'front.testimonials',\n    ],\n    /**\n     * Exclude specific groups from Laravel Translation Manager in page edit mode.\n     * This is useful for groups that are used exclusively for non-display strings like page titles and emails\n     *\n     * @type array\n     */\n    'exclude_page_edit_groups' => [\n        // 'page-titles',\n        'reminders',\n        'validation',\n        'pagination',\n        'passwords',\n    ],\n    /**\n     * determines whether missing keys are logged\n     *\n     * @type bool\n     */\n    'log_missing_keys' => false,\n\n    /**\n     * determines whether usage of keys is logged, requires missing keys to be logged too\n     *\n     * @type bool\n     */\n    'log_key_usage_info' => false,\n\n    /**\n     * determines one out of how many user sessions will have a chance to log missing keys\n     * since the operation hits the database for every missing key you can limit this by setting a\n     * higher number depending on the traffic load to your site.\n     *\n     * @type int\n     *\n     * 1 - means every user\n     * 10 - means 1 in 10 users\n     * 100 - 1 in a 100 users\n     * 1000 ....\n     */\n    'missing_keys_lottery' => 0, // 1 in 100 of users will have the missing translation keys logged.\n\n    /**\n     * @type int 0 - as usual, write out files and set status for translations to SAVED,\n     *\n     *                  1 - on publish will only copy value to saved_value in the database and set the status to SAVED_CACHED\n     *                  and add the changed keys to the translator cache so that the correct translation will be used. Used to\n     *                  publish translations on production cluster or where write access to lang directory is not available.\n     *\n     *                  2 - write out files but act as if doing in database publish only, this setting is useful for accessing\n     *                  translations from a local dev server to a production database for the purpose of updating translation files\n     *                  for deployment. Lets you create the translation files but leaves the translations in the database in a state\n     *                  where they will continue to be served up with the latest published version, not the outdated file versions.\n     *\n     *                  to be used by clustered systems where the translation files are determined at deployment and publishing\n     *                  on one system does no good to the rest of the cluster.\n     */\n    'indatabase_publish' => 0,\n\n    /**\n     * @type array list of alternate database connections and their properties indexed by app()->environment() value,\n     *             default connection settings are taken from config, so only add alternate connections\n     *\n     *                  If user_list_connection is missing, null or empty then the connection will also be used\n     *                  to obtain the user list for user locale management, otherwise the given connection name will be user\n     *                  to obtain the user list when managing translations on this connection.\n     *\n     *                  description is used to display the connection name, default connection is displayed as 'default' in\n     *                  the web interface.\n     *\n     *                  indatabase_publish of:\n     *                  0 - means use files only.\n     *                  1 - means use cache for publishing modifications. No files are written out\n     *                  2 - means use cache for publishing modifications but also write out the files.\n     *                      useful for publishing to files while leaving all flags in the database as\n     *                      they would be after publishing only to cache.\n     */\n    'db_connections' => [\n        // 'local' => array(\n        //    'mysql_prd' => array(\n        //        'description' => 'production',\n        //        'indatabase_publish' => 2,\n        //    ),\n        // ),\n    ],\n\n    /**\n     * used to provide an alternate default connection name for translation\n     * tables\n     *\n     * @type string connection name to use for the default connection\n     *\n     * if blank, null or not defined then default connection will be used.\n     */\n    'default_connection' => null,\n\n    /**\n     * used to provide the Yandex key for use in automatic Yandex translations\n     *\n     * @type string Yandex translation key\n     *\n     * This key is free to obtain and use but is required to enable Yandex translations. Visit: https://tech.yandex.com/translate/\n     */\n    'yandex_translator_key' => '',\n    /**\n     * used to provide configuration on where the translation files are stored and where to write them out.\n     *\n     * This configuration provides the difference in layout between Laravel 4 & 5.\n     * It also can be used to include language files from vendor directories without having to export them to the\n     * standard lang/ directory for those cases where these files are modified directly so that a git commit can\n     * be done in-place.\n     *\n     * It can also be used to include lang/ files from projects in the workbench subdirectory for Laravel 4.2\n     * or Laravel 5 even though Laravel 5 does not support workbench subdirectory the same way it does in\n     * version 4.2 but it is easy to configure composer.json to include\n     *\n     * array keys:\n     *\n     * 'path'           - the root path for this element's language definitions, Any placeholder values placeholder\n     *                  will take the name from the part inside {} and the value from the actual path found on the disk.\n     *\n     *\n     * 'lang'           - defines the location of the application's standard language files relative to the root\n     *                  of the application. Laravel 4.2 '/app/lang', 5.x '/resources/lang'.\n     *\n     * 'packages'        - defines the location of the package override directory\n     *\n     * 'workbench'       - defines the location of the packages you are including in the project which are also\n     *                  the source of the package that you are developing.\n     *\n     *\n     * values:          if the value is a string then it is assumed to be a 'file' spec, if it is an array then the keys\n     *                  in the array should correspond to expected values as below. Any missing keys will be added as\n     *                  follows:\n     *\n     *                  lang        - 'db_group' => '{group}'\n     *                              - 'root' => ''\n     *                        (4.2) - 'file' => '/app/lang/{locale}/{group}'\n     *                        (5.x) - 'file' => '/resources/lang/{locale}/{group}'\n     *\n     *                  packages    - 'db_group' => '{package}::{group}'\n     *                              - 'root' => ''\n     *                        (4.2) - 'file' => '/app/lang/packages/{locale}/{package}/{group}'\n     *                        (5.x) - 'file' => '/resources/lang/vendor/{package}/{locale}/{group}'\n     *\n     *                  workbench   - 'db_group' => 'wbn:{vendor}.{package}::{group}'\n     *                              - 'root' => '/workbench/{vendor}/{package}'\n     *                              - 'include' => '/' // which means all vendor/package combinations\n     *                        (4.2) - 'file' => 'src/lang/{locale}/{group}'\n     *                        (5.x) - 'file' => 'resources/lang/{locale}/{group}'\n     *\n     *                  vendor      - 'db_group' => 'vnd:{vendor}.{package}::{group}'\n     *                              - 'root' => '/vendor/{vendor}/{package}'\n     *                              - 'include' => [] // which means no vendor/package combinations will be included\n     *                        (4.2) - 'file' => 'src/lang/{locale}/{group}'\n     *                        (5.x) - 'file' => 'resources/lang/{locale}/{group}'\n     *\n     *\n     *                  The above sections have other defaults that will be added when the config file is processed. The other\n     *                  sections will only have their 'include' converted from a string to an array, or an empty array\n     *                  will be added\n     *\n     *                  array values can have the following:\n     *\n     *                  'root' - the path spec for the path common between versions and packages\n     *\n     *                  'file' - the path spec, when appended to 'root' that will result in the language file once .php\n     *                           is appended to it. see above\n     *\n     *                  The combined 'root' and 'file' strings are appended, and the resulting path searched with\n     *                  {vendor}, {package}, {group}, {locale} being variables that will match any directory at that\n     *                  position and the actual directory name will be used as the value for the corresponding variable\n     *                  in deriving the 'db_group' value. The last part of the path is expected to be a variable of the\n     *                  form {name} and its value will be the name of the file (minus the .php extension). If the last\n     *                  element in the path is {group} then it will also contain . separated sub-directories. Any other\n     *                  named element will only match files.\n     *\n     *                  'include' - valid for all types other than 'lang' and 'packages', it is a string or an array\n     *                  defining package combinations to include, each\n     *                  element in the array is assumed to be {vendor}/{package}, if either {vendor} or {package} is\n     *                  missing or * then all such sub-directories will be included. Example:\n     *\n     *                  'vsch/'  - will include all packages under vsch/\n     *\n     *                  '/laravel-translation-manager' - all packages of that name regardless of the vendor will be\n     *                  included.\n     *\n     *                  '/' - will include all vendors and packages.\n     *\n     *                  NOTE: if the array is empty then no vendors will be included. This is the default for\n     *                  'vendors' and '/' default for 'workbench' which will include language files\n     *                  for all workbench packages.\n     *\n     * @type array\n     *\n     * Please read above before changing.\n     */\n    'language_dirs' => [\n        'lang' => '/lang/{locale}/{group}',\n        'packages' => '/lang/vendor/{package}/{locale}/{group}',\n        'workbench' => [\n            'include' => '*/*',\n            'root' => '/workbench/{vendor}/{package}',\n            'files' => 'lang/{locale}/{group}',\n        ],\n        'vendor' => [\n            'include' => [],\n            'root' => '/vendor/{vendor}/{package}',\n            'files' => 'lang/{locale}/{group}',\n        ],\n        /*\n         * add packages that need special mapping to their language files because they don't use the standard Laravel\n         * layout for the version that you are using or just plain not Laravel layout. Add '__merge' key with names of\n         * sections where the package should be attempted to be merged.\n         *\n         * These will be merged with vendor or workbench type to get the rest of the config information.\n         * The sections will be checked in the order listed in the __merge entry. The first section whose include\n         * accepts the vendor/package used here, will be used. All the other sections, listed in __merge, will be ignored.\n         *\n         * Since vendor section requires opt-in, it is listed first, if this package is included then\n         * it will be a vendor type.\n         *\n         * NOTE: Regardless of whether the directory exists or not under vendor if the vendor section includes this\n         * package, then it will be expected to be in the vendor directory. If it is not then no language files will be\n         * loaded for it. Therefore only include in vendor section if it is not actually located in workbench.\n         */\n        /*\n         * This one requires a very different definition. The file names are the locale.php, therefore more guts are\n         * exposed when defining the mapping of this one. Including a hard-coded value for the {group} since the only\n         * other option is to replace Lang dir with {group}, but then the group will be called Lang, seems a bit out of\n         * place from the rest of the packages. So there is a way to just hard code the group to any string.\n         */\n        'nesbot/carbon' => [\n            '__merge' => ['vendor', 'workbench'],\n            'files' => 'src/Carbon/Lang/{locale}',\n            'vars' => [\n                '{group}' => 'carbon',\n            ],\n        ],\n    ],\n    /**\n     * Provide the prefix for the root of the zip file\n     * if a path from language_dirs does not start with this prefix then language files exported\n     * for that part will include the full path. Therefore define the most common root path\n     * / means application root.\n     */\n    'zip_root' => '/resources',\n\n    'disable-react-ui' => true,\n    'disable-react-ui-link' => true,\n\n];\n"
  },
  {
    "path": "config/laravellocalization.php",
    "content": "<?php\n\nreturn [\n\n    // Uncomment the languages that your site supports - or add new ones.\n    // These are sorted by the native name, which is the order you might show them in a language selector.\n    // Regional languages are sorted by their base language, so \"British English\" sorts as \"English, British\"\n    'supportedLocales' => [\n        // 'ace'         => ['name' => 'Achinese',               'script' => 'Latn', 'native' => 'Aceh', 'regional' => ''],\n        // 'af'          => ['name' => 'Afrikaans',              'script' => 'Latn', 'native' => 'Afrikaans', 'regional' => 'af_ZA'],\n        // 'agq'         => ['name' => 'Aghem',                  'script' => 'Latn', 'native' => 'Aghem', 'regional' => ''],\n        // 'ak'          => ['name' => 'Akan',                   'script' => 'Latn', 'native' => 'Akan', 'regional' => 'ak_GH'],\n        // 'an'          => ['name' => 'Aragonese',              'script' => 'Latn', 'native' => 'aragonés', 'regional' => 'an_ES'],\n        // 'cch'         => ['name' => 'Atsam',                  'script' => 'Latn', 'native' => 'Atsam', 'regional' => ''],\n        // 'gn'          => ['name' => 'Guaraní',                'script' => 'Latn', 'native' => 'Avañe’ẽ', 'regional' => ''],\n        // 'ae'          => ['name' => 'Avestan',                'script' => 'Latn', 'native' => 'avesta', 'regional' => ''],\n        // 'ay'          => ['name' => 'Aymara',                 'script' => 'Latn', 'native' => 'aymar aru', 'regional' => 'ay_PE'],\n        // 'az'          => ['name' => 'Azerbaijani (Latin)',    'script' => 'Latn', 'native' => 'azərbaycanca', 'regional' => 'az_AZ'],\n        // 'id'          => ['name' => 'Indonesian',             'script' => 'Latn', 'native' => 'Bahasa Indonesia', 'regional' => 'id_ID'],\n        // 'ms'          => ['name' => 'Malay',                  'script' => 'Latn', 'native' => 'Bahasa Melayu', 'regional' => 'ms_MY'],\n        // 'bm'          => ['name' => 'Bambara',                'script' => 'Latn', 'native' => 'bamanakan', 'regional' => ''],\n        // 'jv'          => ['name' => 'Javanese (Latin)',       'script' => 'Latn', 'native' => 'Basa Jawa', 'regional' => ''],\n        // 'su'          => ['name' => 'Sundanese',              'script' => 'Latn', 'native' => 'Basa Sunda', 'regional' => ''],\n        // 'bh'          => ['name' => 'Bihari',                 'script' => 'Latn', 'native' => 'Bihari', 'regional' => ''],\n        // 'bi'          => ['name' => 'Bislama',                'script' => 'Latn', 'native' => 'Bislama', 'regional' => ''],\n        // 'nb'          => ['name' => 'Norwegian Bokmål',       'script' => 'Latn', 'native' => 'Bokmål', 'regional' => 'nb_NO'],\n        // 'bs'          => ['name' => 'Bosnian',                'script' => 'Latn', 'native' => 'bosanski', 'regional' => 'bs_BA'],\n        // 'br'          => ['name' => 'Breton',                 'script' => 'Latn', 'native' => 'brezhoneg', 'regional' => 'br_FR'],\n        'ca' => ['name' => 'Catalan',                'script' => 'Latn', 'native' => 'Català', 'regional' => 'ca_ES'],\n        // 'ch'          => ['name' => 'Chamorro',               'script' => 'Latn', 'native' => 'Chamoru', 'regional' => ''],\n        // 'ny'          => ['name' => 'Chewa',                  'script' => 'Latn', 'native' => 'chiCheŵa', 'regional' => ''],\n        // 'kde'         => ['name' => 'Makonde',                'script' => 'Latn', 'native' => 'Chimakonde', 'regional' => ''],\n        // 'sn'          => ['name' => 'Shona',                  'script' => 'Latn', 'native' => 'chiShona', 'regional' => ''],\n        // 'co'          => ['name' => 'Corsican',               'script' => 'Latn', 'native' => 'corsu', 'regional' => ''],\n        // 'cy'          => ['name' => 'Welsh',                  'script' => 'Latn', 'native' => 'Cymraeg', 'regional' => 'cy_GB'],\n        // 'da'          => ['name' => 'Danish',                 'script' => 'Latn', 'native' => 'dansk', 'regional' => 'da_DK'],\n        // 'se'          => ['name' => 'Northern Sami',          'script' => 'Latn', 'native' => 'davvisámegiella', 'regional' => 'se_NO'],\n        'de' => ['name' => 'German',                 'script' => 'Latn', 'native' => 'Deutsch', 'regional' => 'de_DE'],\n        // 'luo'         => ['name' => 'Luo',                    'script' => 'Latn', 'native' => 'Dholuo', 'regional' => ''],\n        // 'nv'          => ['name' => 'Navajo',                 'script' => 'Latn', 'native' => 'Diné bizaad', 'regional' => ''],\n        // 'dua'         => ['name' => 'Duala',                  'script' => 'Latn', 'native' => 'duálá', 'regional' => ''],\n        // 'et'          => ['name' => 'Estonian',               'script' => 'Latn', 'native' => 'eesti', 'regional' => 'et_EE'],\n        // 'na'          => ['name' => 'Nauru',                  'script' => 'Latn', 'native' => 'Ekakairũ Naoero', 'regional' => ''],\n        // 'guz'         => ['name' => 'Ekegusii',               'script' => 'Latn', 'native' => 'Ekegusii', 'regional' => ''],\n        'en' => ['name' => 'English',                'script' => 'Latn', 'native' => 'UK English', 'regional' => 'en_GB'],\n        // 'en-AU'       => ['name' => 'Australian English',     'script' => 'Latn', 'native' => 'Australian English', 'regional' => 'en_AU'],\n        // 'en-GB'       => ['name' => 'British English',        'script' => 'Latn', 'native' => 'British English', 'regional' => 'en_GB'],\n        'en-US' => ['name' => 'U.S. English',           'script' => 'Latn', 'native' => 'U.S. English', 'regional' => 'en_US'],\n        'es' => ['name' => 'Spanish',                'script' => 'Latn', 'native' => 'Español', 'regional' => 'es_ES'],\n        // 'eo'          => ['name' => 'Esperanto',              'script' => 'Latn', 'native' => 'esperanto', 'regional' => ''],\n        // 'eu'          => ['name' => 'Basque',                 'script' => 'Latn', 'native' => 'euskara', 'regional' => 'eu_ES'],\n        // 'ewo'         => ['name' => 'Ewondo',                 'script' => 'Latn', 'native' => 'ewondo', 'regional' => ''],\n        // 'ee'          => ['name' => 'Ewe',                    'script' => 'Latn', 'native' => 'eʋegbe', 'regional' => ''],\n        // 'fil'         => ['name' => 'Filipino',               'script' => 'Latn', 'native' => 'Filipino', 'regional' => 'fil_PH'],\n        'fr' => ['name' => 'French',                 'script' => 'Latn', 'native' => 'Français', 'regional' => 'fr_FR'],\n        // 'fr-CA'       => ['name' => 'Canadian French',        'script' => 'Latn', 'native' => 'français canadien', 'regional' => 'fr_CA'],\n        // 'fy'          => ['name' => 'Western Frisian',        'script' => 'Latn', 'native' => 'frysk', 'regional' => 'fy_DE'],\n        // 'fur'         => ['name' => 'Friulian',               'script' => 'Latn', 'native' => 'furlan', 'regional' => 'fur_IT'],\n        // 'fo'          => ['name' => 'Faroese',                'script' => 'Latn', 'native' => 'føroyskt', 'regional' => 'fo_FO'],\n        // 'gaa'         => ['name' => 'Ga',                     'script' => 'Latn', 'native' => 'Ga', 'regional' => ''],\n        // 'ga'          => ['name' => 'Irish',                  'script' => 'Latn', 'native' => 'Gaeilge', 'regional' => 'ga_IE'],\n        'gl' => ['name' => 'Galician',                'script' => 'Latn', 'native' => 'Galego', 'regional' => 'gl_ES'],\n        // 'gv'          => ['name' => 'Manx',                   'script' => 'Latn', 'native' => 'Gaelg', 'regional' => 'gv_GB'],\n        // 'sm'          => ['name' => 'Samoan',                 'script' => 'Latn', 'native' => 'Gagana fa’a Sāmoa', 'regional' => ''],\n        // 'gl'          => ['name' => 'Galician',               'script' => 'Latn', 'native' => 'galego', 'regional' => 'gl_ES'],\n        // 'ki'          => ['name' => 'Kikuyu',                 'script' => 'Latn', 'native' => 'Gikuyu', 'regional' => ''],\n        // 'gd'          => ['name' => 'Scottish Gaelic',        'script' => 'Latn', 'native' => 'Gàidhlig', 'regional' => 'gd_GB'],\n        // 'ha'          => ['name' => 'Hausa',                  'script' => 'Latn', 'native' => 'Hausa', 'regional' => 'ha_NG'],\n        // 'bez'         => ['name' => 'Bena',                   'script' => 'Latn', 'native' => 'Hibena', 'regional' => ''],\n        // 'ho'          => ['name' => 'Hiri Motu',              'script' => 'Latn', 'native' => 'Hiri Motu', 'regional' => ''],\n        'hr' => ['name' => 'Croatian',               'script' => 'Latn', 'native' => 'Hrvatski', 'regional' => 'hr_HR'],\n        // 'bem'         => ['name' => 'Bemba',                  'script' => 'Latn', 'native' => 'Ichibemba', 'regional' => 'bem_ZM'],\n        // 'io'          => ['name' => 'Ido',                    'script' => 'Latn', 'native' => 'Ido', 'regional' => ''],\n        // 'ig'          => ['name' => 'Igbo',                   'script' => 'Latn', 'native' => 'Igbo', 'regional' => 'ig_NG'],\n        // 'rn'          => ['name' => 'Rundi',                  'script' => 'Latn', 'native' => 'Ikirundi', 'regional' => ''],\n        // 'ia'          => ['name' => 'Interlingua',            'script' => 'Latn', 'native' => 'interlingua', 'regional' => 'ia_FR'],\n        // 'iu-Latn'     => ['name' => 'Inuktitut (Latin)',      'script' => 'Latn', 'native' => 'Inuktitut', 'regional' => 'iu_CA'],\n        // 'sbp'         => ['name' => 'Sileibi',                'script' => 'Latn', 'native' => 'Ishisangu', 'regional' => ''],\n        // 'nd'          => ['name' => 'North Ndebele',          'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => ''],\n        // 'nr'          => ['name' => 'South Ndebele',          'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => 'nr_ZA'],\n        // 'xh'          => ['name' => 'Xhosa',                  'script' => 'Latn', 'native' => 'isiXhosa', 'regional' => 'xh_ZA'],\n        // 'zu'          => ['name' => 'Zulu',                   'script' => 'Latn', 'native' => 'isiZulu', 'regional' => 'zu_ZA'],\n        'it' => ['name' => 'Italian',                'script' => 'Latn', 'native' => 'Italiano', 'regional' => 'it_IT'],\n        // 'ik'          => ['name' => 'Inupiaq',                'script' => 'Latn', 'native' => 'Iñupiaq', 'regional' => 'ik_CA'],\n        // 'dyo'         => ['name' => 'Jola-Fonyi',             'script' => 'Latn', 'native' => 'joola', 'regional' => ''],\n        // 'kea'         => ['name' => 'Kabuverdianu',           'script' => 'Latn', 'native' => 'kabuverdianu', 'regional' => ''],\n        // 'kaj'         => ['name' => 'Jju',                    'script' => 'Latn', 'native' => 'Kaje', 'regional' => ''],\n        // 'mh'          => ['name' => 'Marshallese',            'script' => 'Latn', 'native' => 'Kajin M̧ajeļ', 'regional' => 'mh_MH'],\n        // 'kl'          => ['name' => 'Kalaallisut',            'script' => 'Latn', 'native' => 'kalaallisut', 'regional' => 'kl_GL'],\n        // 'kln'         => ['name' => 'Kalenjin',               'script' => 'Latn', 'native' => 'Kalenjin', 'regional' => ''],\n        // 'kr'          => ['name' => 'Kanuri',                 'script' => 'Latn', 'native' => 'Kanuri', 'regional' => ''],\n        // 'kcg'         => ['name' => 'Tyap',                   'script' => 'Latn', 'native' => 'Katab', 'regional' => ''],\n        // 'kw'          => ['name' => 'Cornish',                'script' => 'Latn', 'native' => 'kernewek', 'regional' => 'kw_GB'],\n        // 'naq'         => ['name' => 'Nama',                   'script' => 'Latn', 'native' => 'Khoekhoegowab', 'regional' => ''],\n        // 'rof'         => ['name' => 'Rombo',                  'script' => 'Latn', 'native' => 'Kihorombo', 'regional' => ''],\n        // 'kam'         => ['name' => 'Kamba',                  'script' => 'Latn', 'native' => 'Kikamba', 'regional' => ''],\n        // 'kg'          => ['name' => 'Kongo',                  'script' => 'Latn', 'native' => 'Kikongo', 'regional' => ''],\n        // 'jmc'         => ['name' => 'Machame',                'script' => 'Latn', 'native' => 'Kimachame', 'regional' => ''],\n        // 'rw'          => ['name' => 'Kinyarwanda',            'script' => 'Latn', 'native' => 'Kinyarwanda', 'regional' => 'rw_RW'],\n        // 'asa'         => ['name' => 'Kipare',                 'script' => 'Latn', 'native' => 'Kipare', 'regional' => ''],\n        // 'rwk'         => ['name' => 'Rwa',                    'script' => 'Latn', 'native' => 'Kiruwa', 'regional' => ''],\n        // 'saq'         => ['name' => 'Samburu',                'script' => 'Latn', 'native' => 'Kisampur', 'regional' => ''],\n        // 'ksb'         => ['name' => 'Shambala',               'script' => 'Latn', 'native' => 'Kishambaa', 'regional' => ''],\n        // 'swc'         => ['name' => 'Congo Swahili',          'script' => 'Latn', 'native' => 'Kiswahili ya Kongo', 'regional' => ''],\n        // 'sw'          => ['name' => 'Swahili',                'script' => 'Latn', 'native' => 'Kiswahili', 'regional' => 'sw_KE'],\n        // 'dav'         => ['name' => 'Dawida',                 'script' => 'Latn', 'native' => 'Kitaita', 'regional' => ''],\n        // 'teo'         => ['name' => 'Teso',                   'script' => 'Latn', 'native' => 'Kiteso', 'regional' => ''],\n        // 'khq'         => ['name' => 'Koyra Chiini',           'script' => 'Latn', 'native' => 'Koyra ciini', 'regional' => ''],\n        // 'ses'         => ['name' => 'Songhay',                'script' => 'Latn', 'native' => 'Koyraboro senni', 'regional' => ''],\n        // 'mfe'         => ['name' => 'Morisyen',               'script' => 'Latn', 'native' => 'kreol morisien', 'regional' => ''],\n        // 'ht'          => ['name' => 'Haitian',                'script' => 'Latn', 'native' => 'Kreyòl ayisyen', 'regional' => 'ht_HT'],\n        // 'kj'          => ['name' => 'Kuanyama',               'script' => 'Latn', 'native' => 'Kwanyama', 'regional' => ''],\n        // 'ksh'         => ['name' => 'Kölsch',                 'script' => 'Latn', 'native' => 'Kölsch', 'regional' => ''],\n        // 'ebu'         => ['name' => 'Kiembu',                 'script' => 'Latn', 'native' => 'Kĩembu', 'regional' => ''],\n        // 'mer'         => ['name' => 'Kimîîru',                'script' => 'Latn', 'native' => 'Kĩmĩrũ', 'regional' => ''],\n        // 'lag'         => ['name' => 'Langi',                  'script' => 'Latn', 'native' => 'Kɨlaangi', 'regional' => ''],\n        // 'lah'         => ['name' => 'Lahnda',                 'script' => 'Latn', 'native' => 'Lahnda', 'regional' => ''],\n        // 'la'          => ['name' => 'Latin',                  'script' => 'Latn', 'native' => 'latine', 'regional' => ''],\n        // 'lv'          => ['name' => 'Latvian',                'script' => 'Latn', 'native' => 'latviešu', 'regional' => 'lv_LV'],\n        // 'to'          => ['name' => 'Tongan',                 'script' => 'Latn', 'native' => 'lea fakatonga', 'regional' => ''],\n        // 'lt'          => ['name' => 'Lithuanian',             'script' => 'Latn', 'native' => 'lietuvių', 'regional' => 'lt_LT'],\n        // 'li'          => ['name' => 'Limburgish',             'script' => 'Latn', 'native' => 'Limburgs', 'regional' => 'li_BE'],\n        // 'ln'          => ['name' => 'Lingala',                'script' => 'Latn', 'native' => 'lingála', 'regional' => ''],\n        // 'lg'          => ['name' => 'Ganda',                  'script' => 'Latn', 'native' => 'Luganda', 'regional' => 'lg_UG'],\n        // 'luy'         => ['name' => 'Oluluyia',               'script' => 'Latn', 'native' => 'Luluhia', 'regional' => ''],\n        // 'lb'          => ['name' => 'Luxembourgish',          'script' => 'Latn', 'native' => 'Lëtzebuergesch', 'regional' => 'lb_LU'],\n        'hu' => ['name' => 'Hungarian',              'script' => 'Latn', 'native' => 'Magyar', 'regional' => 'hu_HU'],\n        // 'mgh'         => ['name' => 'Makhuwa-Meetto',         'script' => 'Latn', 'native' => 'Makua', 'regional' => ''],\n        // 'mg'          => ['name' => 'Malagasy',               'script' => 'Latn', 'native' => 'Malagasy', 'regional' => 'mg_MG'],\n        // 'mt'          => ['name' => 'Maltese',                'script' => 'Latn', 'native' => 'Malti', 'regional' => 'mt_MT'],\n        // 'mtr'         => ['name' => 'Mewari',                 'script' => 'Latn', 'native' => 'Mewari', 'regional' => ''],\n        // 'mua'         => ['name' => 'Mundang',                'script' => 'Latn', 'native' => 'Mundang', 'regional' => ''],\n        // 'mi'          => ['name' => 'Māori',                  'script' => 'Latn', 'native' => 'Māori', 'regional' => 'mi_NZ'],\n        'nl' => ['name' => 'Dutch',                  'script' => 'Latn', 'native' => 'Nederlands', 'regional' => 'nl_NL'],\n        // 'nmg'         => ['name' => 'Kwasio',                 'script' => 'Latn', 'native' => 'ngumba', 'regional' => ''],\n        // 'yav'         => ['name' => 'Yangben',                'script' => 'Latn', 'native' => 'nuasue', 'regional' => ''],\n        // 'nn'          => ['name' => 'Norwegian Nynorsk',      'script' => 'Latn', 'native' => 'nynorsk', 'regional' => 'nn_NO'],\n        // 'oc'          => ['name' => 'Occitan',                'script' => 'Latn', 'native' => 'occitan', 'regional' => 'oc_FR'],\n        // 'ang'         => ['name' => 'Old English',            'script' => 'Runr', 'native' => 'Old English', 'regional' => ''],\n        // 'xog'         => ['name' => 'Soga',                   'script' => 'Latn', 'native' => 'Olusoga', 'regional' => ''],\n        // 'om'          => ['name' => 'Oromo',                  'script' => 'Latn', 'native' => 'Oromoo', 'regional' => 'om_ET'],\n        // 'ng'          => ['name' => 'Ndonga',                 'script' => 'Latn', 'native' => 'OshiNdonga', 'regional' => ''],\n        // 'hz'          => ['name' => 'Herero',                 'script' => 'Latn', 'native' => 'Otjiherero', 'regional' => ''],\n        // 'uz-Latn'     => ['name' => 'Uzbek (Latin)',          'script' => 'Latn', 'native' => 'oʼzbekcha', 'regional' => 'uz_UZ'],\n        // 'nds'         => ['name' => 'Low German',             'script' => 'Latn', 'native' => 'Plattdüütsch', 'regional' => 'nds_DE'],\n        'pl' => ['name' => 'Polish',                 'script' => 'Latn', 'native' => 'Polski', 'regional' => 'pl_PL'],\n        // 'pt'          => ['name' => 'Portuguese',             'script' => 'Latn', 'native' => 'português', 'regional' => 'pt_PT'],\n        'pt-BR' => ['name' => 'Brazilian Portuguese',   'script' => 'Latn', 'native' => 'Português do Brasil', 'regional' => 'pt-BR'],\n        // 'ff'          => ['name' => 'Fulah',                  'script' => 'Latn', 'native' => 'Pulaar', 'regional' => 'ff_SN'],\n        // 'pi'          => ['name' => 'Pahari-Potwari',         'script' => 'Latn', 'native' => 'Pāli', 'regional' => ''],\n        // 'aa'          => ['name' => 'Afar',                   'script' => 'Latn', 'native' => 'Qafar', 'regional' => 'aa_ER'],\n        // 'ty'          => ['name' => 'Tahitian',               'script' => 'Latn', 'native' => 'Reo Māohi', 'regional' => ''],\n        // 'ksf'         => ['name' => 'Bafia',                  'script' => 'Latn', 'native' => 'rikpa', 'regional' => ''],\n        // 'ro'          => ['name' => 'Romanian',               'script' => 'Latn', 'native' => 'română', 'regional' => 'ro_RO'],\n        // 'cgg'         => ['name' => 'Chiga',                  'script' => 'Latn', 'native' => 'Rukiga', 'regional' => ''],\n        // 'rm'          => ['name' => 'Romansh',                'script' => 'Latn', 'native' => 'rumantsch', 'regional' => ''],\n        // 'qu'          => ['name' => 'Quechua',                'script' => 'Latn', 'native' => 'Runa Simi', 'regional' => ''],\n        // 'nyn'         => ['name' => 'Nyankole',               'script' => 'Latn', 'native' => 'Runyankore', 'regional' => ''],\n        // 'ssy'         => ['name' => 'Saho',                   'script' => 'Latn', 'native' => 'Saho', 'regional' => ''],\n        // 'sc'          => ['name' => 'Sardinian',              'script' => 'Latn', 'native' => 'sardu', 'regional' => 'sc_IT'],\n        // 'de-CH'       => ['name' => 'Swiss High German',      'script' => 'Latn', 'native' => 'Schweizer Hochdeutsch', 'regional' => 'de_CH'],\n        // 'gsw'         => ['name' => 'Swiss German',           'script' => 'Latn', 'native' => 'Schwiizertüütsch', 'regional' => ''],\n        // 'trv'         => ['name' => 'Taroko',                 'script' => 'Latn', 'native' => 'Seediq', 'regional' => ''],\n        // 'seh'         => ['name' => 'Sena',                   'script' => 'Latn', 'native' => 'sena', 'regional' => ''],\n        // 'nso'         => ['name' => 'Northern Sotho',         'script' => 'Latn', 'native' => 'Sesotho sa Leboa', 'regional' => 'nso_ZA'],\n        // 'st'          => ['name' => 'Southern Sotho',         'script' => 'Latn', 'native' => 'Sesotho', 'regional' => 'st_ZA'],\n        // 'tn'          => ['name' => 'Tswana',                 'script' => 'Latn', 'native' => 'Setswana', 'regional' => 'tn_ZA'],\n        // 'sq'          => ['name' => 'Albanian',               'script' => 'Latn', 'native' => 'shqip', 'regional' => 'sq_AL'],\n        // 'sid'         => ['name' => 'Sidamo',                 'script' => 'Latn', 'native' => 'Sidaamu Afo', 'regional' => 'sid_ET'],\n        // 'ss'          => ['name' => 'Swati',                  'script' => 'Latn', 'native' => 'Siswati', 'regional' => 'ss_ZA'],\n        'sk' => ['name' => 'Slovak',                 'script' => 'Latn', 'native' => 'Slovenský', 'regional' => 'sk_SK'],\n        // 'sl'          => ['name' => 'Slovene',                'script' => 'Latn', 'native' => 'slovenščina', 'regional' => 'sl_SI'],\n        // 'so'          => ['name' => 'Somali',                 'script' => 'Latn', 'native' => 'Soomaali', 'regional' => 'so_SO'],\n        // 'sr-Latn'     => ['name' => 'Serbian (Latin)',        'script' => 'Latn', 'native' => 'Srpski', 'regional' => 'sr_RS'],\n        // 'sh'          => ['name' => 'Serbo-Croatian',         'script' => 'Latn', 'native' => 'srpskohrvatski', 'regional' => ''],\n        // 'fi'          => ['name' => 'Finnish',                'script' => 'Latn', 'native' => 'suomi', 'regional' => 'fi_FI'],\n        // 'sv'          => ['name' => 'Swedish',                'script' => 'Latn', 'native' => 'svenska', 'regional' => 'sv_SE'],\n        // 'sg'          => ['name' => 'Sango',                  'script' => 'Latn', 'native' => 'Sängö', 'regional' => ''],\n        // 'tl'          => ['name' => 'Tagalog',                'script' => 'Latn', 'native' => 'Tagalog', 'regional' => 'tl_PH'],\n        // 'tzm-Latn'    => ['name' => 'Central Atlas Tamazight (Latin)', 'script' => 'Latn', 'native' => 'Tamazight', 'regional' => ''],\n        // 'kab'         => ['name' => 'Kabyle',                 'script' => 'Latn', 'native' => 'Taqbaylit', 'regional' => 'kab_DZ'],\n        // 'twq'         => ['name' => 'Tasawaq',                'script' => 'Latn', 'native' => 'Tasawaq senni', 'regional' => ''],\n        // 'shi'         => ['name' => 'Tachelhit (Latin)',      'script' => 'Latn', 'native' => 'Tashelhit', 'regional' => ''],\n        // 'nus'         => ['name' => 'Nuer',                   'script' => 'Latn', 'native' => 'Thok Nath', 'regional' => ''],\n        // 'vi'          => ['name' => 'Vietnamese',             'script' => 'Latn', 'native' => 'Tiếng Việt', 'regional' => 'vi_VN'],\n        // 'tg-Latn'     => ['name' => 'Tajik (Latin)',          'script' => 'Latn', 'native' => 'tojikī', 'regional' => 'tg_TJ'],\n        // 'lu'          => ['name' => 'Luba-Katanga',           'script' => 'Latn', 'native' => 'Tshiluba', 'regional' => 've_ZA'],\n        // 've'          => ['name' => 'Venda',                  'script' => 'Latn', 'native' => 'Tshivenḓa', 'regional' => ''],\n        // 'tw'          => ['name' => 'Twi',                    'script' => 'Latn', 'native' => 'Twi', 'regional' => ''],\n        // 'tr'          => ['name' => 'Turkish',                'script' => 'Latn', 'native' => 'Türkçe', 'regional' => 'tr_TR'],\n        // 'ale'         => ['name' => 'Aleut',                  'script' => 'Latn', 'native' => 'Unangax tunuu', 'regional' => ''],\n        // 'ca-valencia' => ['name' => 'Valencian',              'script' => 'Latn', 'native' => 'valencià', 'regional' => ''],\n        // 'vai-Latn'    => ['name' => 'Vai (Latin)',            'script' => 'Latn', 'native' => 'Viyamíĩ', 'regional' => ''],\n        // 'vo'          => ['name' => 'Volapük',                'script' => 'Latn', 'native' => 'Volapük', 'regional' => ''],\n        // 'fj'          => ['name' => 'Fijian',                 'script' => 'Latn', 'native' => 'vosa Vakaviti', 'regional' => ''],\n        // 'wa'          => ['name' => 'Walloon',                'script' => 'Latn', 'native' => 'Walon', 'regional' => 'wa_BE'],\n        // 'wae'         => ['name' => 'Walser',                 'script' => 'Latn', 'native' => 'Walser', 'regional' => 'wae_CH'],\n        // 'wen'         => ['name' => 'Sorbian',                'script' => 'Latn', 'native' => 'Wendic', 'regional' => ''],\n        // 'wo'          => ['name' => 'Wolof',                  'script' => 'Latn', 'native' => 'Wolof', 'regional' => 'wo_SN'],\n        // 'ts'          => ['name' => 'Tsonga',                 'script' => 'Latn', 'native' => 'Xitsonga', 'regional' => 'ts_ZA'],\n        // 'dje'         => ['name' => 'Zarma',                  'script' => 'Latn', 'native' => 'Zarmaciine', 'regional' => ''],\n        // 'yo'          => ['name' => 'Yoruba',                 'script' => 'Latn', 'native' => 'Èdè Yorùbá', 'regional' => 'yo_NG'],\n        // 'de-AT'       => ['name' => 'Austrian German',        'script' => 'Latn', 'native' => 'Österreichisches Deutsch', 'regional' => 'de_AT'],\n        // 'is'          => ['name' => 'Icelandic',              'script' => 'Latn', 'native' => 'íslenska', 'regional' => 'is_IS'],\n        // 'cs'          => ['name' => 'Czech',                  'script' => 'Latn', 'native' => 'čeština', 'regional' => 'cs_CZ'],\n        // 'bas'         => ['name' => 'Basa',                   'script' => 'Latn', 'native' => 'Ɓàsàa', 'regional' => ''],\n        // 'mas'         => ['name' => 'Masai',                  'script' => 'Latn', 'native' => 'ɔl-Maa', 'regional' => ''],\n        // 'haw'         => ['name' => 'Hawaiian',               'script' => 'Latn', 'native' => 'ʻŌlelo Hawaiʻi', 'regional' => ''],\n        // 'el'          => ['name' => 'Greek',                  'script' => 'Grek', 'native' => 'Ελληνικά', 'regional' => 'el_GR'],\n        // 'uz'          => ['name' => 'Uzbek (Cyrillic)',       'script' => 'Cyrl', 'native' => 'Ўзбек', 'regional' => 'uz_UZ'],\n        // 'az-Cyrl'     => ['name' => 'Azerbaijani (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Азәрбајҹан', 'regional' => 'uz_UZ'],\n        // 'ab'          => ['name' => 'Abkhazian',              'script' => 'Cyrl', 'native' => 'Аҧсуа', 'regional' => ''],\n        // 'os'          => ['name' => 'Ossetic',                'script' => 'Cyrl', 'native' => 'Ирон', 'regional' => 'os_RU'],\n        // 'ky'          => ['name' => 'Kyrgyz',                 'script' => 'Cyrl', 'native' => 'Кыргыз', 'regional' => 'ky_KG'],\n        // 'sr'          => ['name' => 'Serbian (Cyrillic)',     'script' => 'Cyrl', 'native' => 'Српски', 'regional' => 'sr_RS'],\n        // 'av'          => ['name' => 'Avaric',                 'script' => 'Cyrl', 'native' => 'авар мацӀ', 'regional' => ''],\n        // 'ady'         => ['name' => 'Adyghe',                 'script' => 'Cyrl', 'native' => 'адыгэбзэ', 'regional' => ''],\n        // 'ba'          => ['name' => 'Bashkir',                'script' => 'Cyrl', 'native' => 'башҡорт теле', 'regional' => ''],\n        // 'be'          => ['name' => 'Belarusian',             'script' => 'Cyrl', 'native' => 'беларуская', 'regional' => 'be_BY'],\n        // 'bg'          => ['name' => 'Bulgarian',              'script' => 'Cyrl', 'native' => 'български', 'regional' => 'bg_BG'],\n        // 'kv'          => ['name' => 'Komi',                   'script' => 'Cyrl', 'native' => 'коми кыв', 'regional' => ''],\n        // 'mk'          => ['name' => 'Macedonian',             'script' => 'Cyrl', 'native' => 'македонски', 'regional' => 'mk_MK'],\n        // 'mn'          => ['name' => 'Mongolian (Cyrillic)',   'script' => 'Cyrl', 'native' => 'монгол', 'regional' => 'mn_MN'],\n        // 'ce'          => ['name' => 'Chechen',                'script' => 'Cyrl', 'native' => 'нохчийн мотт', 'regional' => 'ce_RU'],\n        'ru' => ['name' => 'Russian',                'script' => 'Cyrl', 'native' => 'Pусский', 'regional' => 'ru_RU'],\n        // 'sah'         => ['name' => 'Yakut',                  'script' => 'Cyrl', 'native' => 'саха тыла', 'regional' => ''],\n        // 'tt'          => ['name' => 'Tatar',                  'script' => 'Cyrl', 'native' => 'татар теле', 'regional' => 'tt_RU'],\n        // 'tg'          => ['name' => 'Tajik (Cyrillic)',       'script' => 'Cyrl', 'native' => 'тоҷикӣ', 'regional' => 'tg_TJ'],\n        // 'tk'          => ['name' => 'Turkmen',                'script' => 'Cyrl', 'native' => 'түркменче', 'regional' => 'tk_TM'],\n        // 'uk'          => ['name' => 'Ukrainian',              'script' => 'Cyrl', 'native' => 'українська', 'regional' => 'uk_UA'],\n        // 'cv'          => ['name' => 'Chuvash',                'script' => 'Cyrl', 'native' => 'чӑваш чӗлхи', 'regional' => 'cv_RU'],\n        // 'cu'          => ['name' => 'Church Slavic',          'script' => 'Cyrl', 'native' => 'ѩзыкъ словѣньскъ', 'regional' => ''],\n        // 'kk'          => ['name' => 'Kazakh',                 'script' => 'Cyrl', 'native' => 'қазақ тілі', 'regional' => 'kk_KZ'],\n        // 'hy'          => ['name' => 'Armenian',               'script' => 'Armn', 'native' => 'Հայերեն', 'regional' => 'hy_AM'],\n        // 'yi'          => ['name' => 'Yiddish',                'script' => 'Hebr', 'native' => 'ייִדיש', 'regional' => 'yi_US'],\n        // 'he'          => ['name' => 'Hebrew',                 'script' => 'Hebr', 'native' => 'עברית', 'regional' => 'he_IL'],\n        // 'ug'          => ['name' => 'Uyghur',                 'script' => 'Arab', 'native' => 'ئۇيغۇرچە', 'regional' => 'ug_CN'],\n        // 'ur'          => ['name' => 'Urdu',                   'script' => 'Arab', 'native' => 'اردو', 'regional' => 'ur_PK'],\n        // 'ar'          => ['name' => 'Arabic',                 'script' => 'Arab', 'native' => 'العربية', 'regional' => 'ar_AE'],\n        // 'uz-Arab'     => ['name' => 'Uzbek (Arabic)',         'script' => 'Arab', 'native' => 'اۉزبېک', 'regional' => ''],\n        // 'tg-Arab'     => ['name' => 'Tajik (Arabic)',         'script' => 'Arab', 'native' => 'تاجیکی', 'regional' => 'tg_TJ'],\n        // 'sd'          => ['name' => 'Sindhi',                 'script' => 'Arab', 'native' => 'سنڌي', 'regional' => 'sd_IN'],\n        // 'fa'          => ['name' => 'Persian',                'script' => 'Arab', 'native' => 'فارسی', 'regional' => 'fa_IR'],\n        // 'pa-Arab'     => ['name' => 'Punjabi (Arabic)',       'script' => 'Arab', 'native' => 'پنجاب', 'regional' => 'pa_IN'],\n        // 'ps'          => ['name' => 'Pashto',                 'script' => 'Arab', 'native' => 'پښتو', 'regional' => 'ps_AF'],\n        // 'ks'          => ['name' => 'Kashmiri (Arabic)',      'script' => 'Arab', 'native' => 'کأشُر', 'regional' => 'ks_IN'],\n        // 'ku'          => ['name' => 'Kurdish',                'script' => 'Arab', 'native' => 'کوردی', 'regional' => 'ku_TR'],\n        // 'dv'          => ['name' => 'Divehi',                 'script' => 'Thaa', 'native' => 'ދިވެހިބަސް', 'regional' => 'dv_MV'],\n        // 'ks-Deva'     => ['name' => 'Kashmiri (Devaganari)',  'script' => 'Deva', 'native' => 'कॉशुर', 'regional' => 'ks_IN'],\n        // 'kok'         => ['name' => 'Konkani',                'script' => 'Deva', 'native' => 'कोंकणी', 'regional' => 'kok_IN'],\n        // 'doi'         => ['name' => 'Dogri',                  'script' => 'Deva', 'native' => 'डोगरी', 'regional' => 'doi_IN'],\n        // 'ne'          => ['name' => 'Nepali',                 'script' => 'Deva', 'native' => 'नेपाली', 'regional' => ''],\n        // 'pra'         => ['name' => 'Prakrit',                'script' => 'Deva', 'native' => 'प्राकृत', 'regional' => ''],\n        // 'brx'         => ['name' => 'Bodo',                   'script' => 'Deva', 'native' => 'बड़ो', 'regional' => 'brx_IN'],\n        // 'bra'         => ['name' => 'Braj',                   'script' => 'Deva', 'native' => 'ब्रज भाषा', 'regional' => ''],\n        // 'mr'          => ['name' => 'Marathi',                'script' => 'Deva', 'native' => 'मराठी', 'regional' => 'mr_IN'],\n        // 'mai'         => ['name' => 'Maithili',               'script' => 'Tirh', 'native' => 'मैथिली', 'regional' => 'mai_IN'],\n        // 'raj'         => ['name' => 'Rajasthani',             'script' => 'Deva', 'native' => 'राजस्थानी', 'regional' => ''],\n        // 'sa'          => ['name' => 'Sanskrit',               'script' => 'Deva', 'native' => 'संस्कृतम्', 'regional' => 'sa_IN'],\n        // 'hi'          => ['name' => 'Hindi',                  'script' => 'Deva', 'native' => 'हिन्दी', 'regional' => 'hi_IN'],\n        // 'as'          => ['name' => 'Assamese',               'script' => 'Beng', 'native' => 'অসমীয়া', 'regional' => 'as_IN'],\n        // 'bn'          => ['name' => 'Bengali',                'script' => 'Beng', 'native' => 'বাংলা', 'regional' => 'bn_BD'],\n        // 'mni'         => ['name' => 'Manipuri',               'script' => 'Beng', 'native' => 'মৈতৈ', 'regional' => 'mni_IN'],\n        // 'pa'          => ['name' => 'Punjabi (Gurmukhi)',     'script' => 'Guru', 'native' => 'ਪੰਜਾਬੀ', 'regional' => 'pa_IN'],\n        // 'gu'          => ['name' => 'Gujarati',               'script' => 'Gujr', 'native' => 'ગુજરાતી', 'regional' => 'gu_IN'],\n        // 'or'          => ['name' => 'Oriya',                  'script' => 'Orya', 'native' => 'ଓଡ଼ିଆ', 'regional' => 'or_IN'],\n        // 'ta'          => ['name' => 'Tamil',                  'script' => 'Taml', 'native' => 'தமிழ்', 'regional' => 'ta_IN'],\n        // 'te'          => ['name' => 'Telugu',                 'script' => 'Telu', 'native' => 'తెలుగు', 'regional' => 'te_IN'],\n        // 'kn'          => ['name' => 'Kannada',                'script' => 'Knda', 'native' => 'ಕನ್ನಡ', 'regional' => 'kn_IN'],\n        // 'ml'          => ['name' => 'Malayalam',              'script' => 'Mlym', 'native' => 'മലയാളം', 'regional' => 'ml_IN'],\n        // 'si'          => ['name' => 'Sinhala',                'script' => 'Sinh', 'native' => 'සිංහල', 'regional' => 'si_LK'],\n        // 'th'          => ['name' => 'Thai',                   'script' => 'Thai', 'native' => 'ไทย', 'regional' => 'th_TH'],\n        // 'lo'          => ['name' => 'Lao',                    'script' => 'Laoo', 'native' => 'ລາວ', 'regional' => 'lo_LA'],\n        // 'bo'          => ['name' => 'Tibetan',                'script' => 'Tibt', 'native' => 'པོད་སྐད་', 'regional' => 'bo_IN'],\n        // 'dz'          => ['name' => 'Dzongkha',               'script' => 'Tibt', 'native' => 'རྫོང་ཁ', 'regional' => 'dz_BT'],\n        // 'my'          => ['name' => 'Burmese',                'script' => 'Mymr', 'native' => 'မြန်မာဘာသာ', 'regional' => 'my_MM'],\n        // 'ka'          => ['name' => 'Georgian',               'script' => 'Geor', 'native' => 'ქართული', 'regional' => 'ka_GE'],\n        // 'byn'         => ['name' => 'Blin',                   'script' => 'Ethi', 'native' => 'ብሊን', 'regional' => 'byn_ER'],\n        // 'tig'         => ['name' => 'Tigre',                  'script' => 'Ethi', 'native' => 'ትግረ', 'regional' => 'tig_ER'],\n        // 'ti'          => ['name' => 'Tigrinya',               'script' => 'Ethi', 'native' => 'ትግርኛ', 'regional' => 'ti_ET'],\n        // 'am'          => ['name' => 'Amharic',                'script' => 'Ethi', 'native' => 'አማርኛ', 'regional' => 'am_ET'],\n        // 'wal'         => ['name' => 'Wolaytta',               'script' => 'Ethi', 'native' => 'ወላይታቱ', 'regional' => 'wal_ET'],\n        // 'chr'         => ['name' => 'Cherokee',               'script' => 'Cher', 'native' => 'ᏣᎳᎩ', 'regional' => ''],\n        // 'iu'          => ['name' => 'Inuktitut (Canadian Aboriginal Syllabics)', 'script' => 'Cans', 'native' => 'ᐃᓄᒃᑎᑐᑦ', 'regional' => 'iu_CA'],\n        // 'oj'          => ['name' => 'Ojibwa',                 'script' => 'Cans', 'native' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ', 'regional' => ''],\n        // 'cr'          => ['name' => 'Cree',                   'script' => 'Cans', 'native' => 'ᓀᐦᐃᔭᐍᐏᐣ', 'regional' => ''],\n        // 'km'          => ['name' => 'Khmer',                  'script' => 'Khmr', 'native' => 'ភាសាខ្មែរ', 'regional' => 'km_KH'],\n        // 'mn-Mong'     => ['name' => 'Mongolian (Mongolian)',  'script' => 'Mong', 'native' => 'ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ', 'regional' => 'mn_MN'],\n        // 'shi-Tfng'    => ['name' => 'Tachelhit (Tifinagh)',   'script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''],\n        // 'tzm'         => ['name' => 'Central Atlas Tamazight (Tifinagh)','script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''],\n        // 'yue'         => ['name' => 'Yue',                    'script' => 'Hant', 'native' => '廣州話', 'regional' => 'yue_HK'],\n        // 'ja'          => ['name' => 'Japanese',               'script' => 'Jpan', 'native' => '日本語', 'regional' => 'ja_JP'],\n        // 'zh'          => ['name' => 'Chinese (Simplified)',   'script' => 'Hans', 'native' => '简体中文', 'regional' => 'zh_CN'],\n        // 'zh-Hant'     => ['name' => 'Chinese (Traditional)',  'script' => 'Hant', 'native' => '繁體中文', 'regional' => 'zh_CN'],\n        // 'ii'          => ['name' => 'Sichuan Yi',             'script' => 'Yiii', 'native' => 'ꆈꌠꉙ', 'regional' => ''],\n        // 'vai'         => ['name' => 'Vai (Vai)',              'script' => 'Vaii', 'native' => 'ꕙꔤ', 'regional' => ''],\n        // 'jv-Java'     => ['name' => 'Javanese (Javanese)',    'script' => 'Java', 'native' => 'ꦧꦱꦗꦮ', 'regional' => ''],\n        // 'ko'          => ['name' => 'Korean',                 'script' => 'Hang', 'native' => '한국어', 'regional' => 'ko_KR'],\n    ],\n\n    // Negotiate for the user locale using the Accept-Language header if it's not defined in the URL?\n    // If false, system will take app.php locale attribute\n    'useAcceptLanguageHeader' => true,\n\n    // If LaravelLocalizationRedirectFilter is active and hideDefaultLocaleInURL\n    // is true, the url would not have the default application language\n    //\n    // IMPORTANT - When hideDefaultLocaleInURL is set to true, the unlocalized root is treated as the applications default locale \"app.locale\".\n    // Because of this language negotiation using the Accept-Language header will NEVER occur when hideDefaultLocaleInURL is true.\n    //\n    'hideDefaultLocaleInURL' => false,\n\n    // If you want to display the locales in particular order in the language selector you should write the order here.\n    // CAUTION: Please consider using the appropriate locale code otherwise it will not work\n    // Example: 'localesOrder' => ['es','en'],\n    'localesOrder' => [],\n];\n"
  },
  {
    "path": "config/larecipe.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Documentation Routes\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of the LaRecipe docs basic route\n    | where you can specify the url of your documentations, the location\n    | of your docs and the landing page when a user visits /docs route.\n    |\n    |\n    */\n\n    'docs' => [\n        'route' => '/api-docs',\n        'path' => '/resources/api-docs',\n        'landing' => 'overview',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Documentation Versions\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify and set the versions and the default (latest) one\n    | of your documentation's versions where you can redirect the user to.\n    | Just make sure that the default version is in the published list.\n    |\n    |\n    */\n\n    'versions' => [\n        'default' => '1.0',\n        'published' => [\n            '1.0',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Documentation Settings\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the additional behaviors of your documentation\n    | where you can limit the access to only authenticated users in your\n    | system. It is false initially so that guests can view your docs.\n    |\n    | You may also specify links to show under the auth dropdown menu.\n    | Logout link will show by default.\n    |\n    |\n    */\n\n    'settings' => [\n        'auth' => false,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache\n    |--------------------------------------------------------------------------\n    |\n    | Obviously rendering markdown at the back-end is costly especially if\n    | the rendered files are massive. Thankfully, caching is considered\n    | as a good option to speed up your app when having high traffic.\n    |\n    | Caching period unit: minutes\n    |\n    */\n\n    'cache' => [\n        'enabled' => false,\n        'period' => 60,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Search\n    |--------------------------------------------------------------------------\n    |\n    | Here you can add configure the search functionality of your docs.\n    | You can choose the default engine of your search from the list\n    | However, you can also enable/disable the search's visibility\n    |\n    | Supported Search Engines: 'algolia', 'internal'\n    |\n    */\n\n    'search' => [\n        'enabled' => false,\n        'default' => 'algolia',\n        'engines' => [\n            'internal' => [\n                'index' => ['h2', 'h3'],\n            ],\n            'algolia' => [\n                'key' => '',\n                'index' => '',\n            ],\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Documentation Repository\n    |--------------------------------------------------------------------------\n    |\n    | This is an optional config you can set in order to show an external link\n    | to your documentation's repository if you have one. Once you set the\n    | value of the url, LaRecipe automatically will show the nav button.\n    |\n    |\n    */\n\n    'repository' => [\n        'provider' => 'github',\n        'url' => 'https://github.com/owlchester/kanka',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Appearance\n    |--------------------------------------------------------------------------\n    |\n    | Here you can add configure the appearance of your docs. For example,\n    | you can swap the default logo to custom one that matches your Id\n    | Also, you can change the theme of your docs if you prefer that\n    |\n    | Supported Themes: 'light', 'dark'\n    |\n    */\n\n    'ui' => [\n        'fav' => '/favicon.ico', // e.g.: /fav.png\n        'code_theme' => 'dark',\n        'show_side_bar' => true,\n        'colors' => [\n            'primary' => '#787AF6',\n            'secondary' => '#2b9cf2',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | SEO\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the SEO settings of your docs. You can set the\n    | author, the description and the keywords. Also, LaRecipe by default\n    | sets the canonical link to the viewed page's link automatically.\n    |\n    |\n    */\n\n    'seo' => [\n        'author' => 'Kanka',\n        'description' => 'Free online worldbuilding and campaign management tool',\n        'keywords' => 'Kanka api documentation integration discord app',\n        'og' => [\n            'title' => 'Kanka API Docs',\n            'type' => 'article',\n            'url' => 'kanka.io',\n            'image' => '',\n            'description' => 'Kanka\\'s API documentation',\n        ],\n    ],\n\n    /*\n   |--------------------------------------------------------------------------\n   | Forum\n   |--------------------------------------------------------------------------\n   |\n   | Giving a chance to your users to post their questions or feedback\n   | directly on your docs, is pretty nice way to engage them more.\n   | However, you can also enable/disable the forum's visibility.\n   |\n   | Supported Services: 'disqus'\n   |\n   */\n\n    'forum' => [\n        'enabled' => false,\n        'default' => 'disqus',\n        'services' => [\n            'disqus' => [\n                'site_name' => '', // yoursite.disqus.com\n            ],\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Components and Packages\n    |--------------------------------------------------------------------------\n    |\n    | Once you create a new asset or theme, its directory will be\n    | published under `larecipe-components` folder. However, If\n    | you want a different location, feel free to change it.\n    |\n    |\n    */\n    'packages' => [\n        'path' => 'larecipe-components',\n    ],\n];\n"
  },
  {
    "path": "config/limits.php",
    "content": "<?php\n\nreturn [\n    'campaigns' => [\n        'premium' => env('APP_PREMIUM', false),\n        /**\n         * Limits in place for standard campaigns. Premium campaigns are unlimited\n         */\n        'members' => env('APP_MEMBER_LIMIT', 10),\n        'roles' => env('APP_ROLE_LIMIT', 3),\n        'bookmarks' => env('APP_BOOKMARK_LIMIT', 3),\n\n        /**\n         * Entities have a limited number of files (a type of entity_asset) available on each entity\n         */\n        'files' => [\n            'standard' => env('APP_FILE_LIMIT', 3),\n            'premium' => env('APP_PREMIUM_FILE_LIMIT', 20),\n        ],\n        /**\n         * Number of custom modules allowed per subscription tier.\n         */\n        'modules' => [\n            'premium' => env('APP_MODULE_LIMIT', 5),\n            'wyvern' => env('APP_WYVERN_MODULE_LIMIT', 10),\n            'elemental' => env('APP_ELEMENTAL_MODULE_LIMIT', 20),\n        ],\n\n        'export' => 6, // hours after which exports get deleted\n        'maps' => [\n            // Maximum number of groups per map\n            'groups' => [\n                'standard' => 1,\n                'premium' => 20,\n            ],\n            'layers' => [\n                'standard' => 1,\n                'premium' => 20,\n            ],\n        ],\n        'logs' => [\n            'standard' => 7,\n            'premium' => 180,\n        ],\n        'aliases' => env('APP_ALIAS_LIMIT', 2),\n        'web' => 10,\n    ],\n\n    /**\n     * Default file upload size for standard user, in MB\n     */\n    'filesize' => [\n        'image' => [\n            'standard' => env('APP_IMAGE_SIZE_MB', 3),\n            'owlbear' => env('APP_IMAGE_SIZE_OWLBEAR_MB', 10),\n            'wyvern' => env('APP_IMAGE_SIZE_WYVERN_MB', 25),\n            'elemental' => env('APP_IMAGE_SIZE_ELEMENTAL_MB', 100),\n        ],\n        'map' => env('APP_MAP_SIZE_MB', 5),\n    ],\n\n    'gallery' => [\n        'standard' => env('APP_GALLERY_STANDARD', 150 * 1024),\n        'premium' => env('APP_GALLERY_PREMIUM', 3 * 1024 * 1024),\n        'wyvern' => env('APP_GALLERY_WYVERN', 10 * 1024 * 1024),\n        'elemental' => env('APP_GALLERY_ELEMENTAL', 25 * 1024 * 1024),\n        // 'premium' => 20 * 1024,\n    ],\n\n    'pagination' => env('APP_PAGINATION', 15),\n\n    'api' => [\n        // Throttling values of requests per minute before a 421 \"back down\" response is thrown\n        'throttle' => [\n            'subscriber' => env('API_THROTTLE_SUBSCRIBER_LIMIT', 90),\n            'default' => env('API_THROTTLE_LIMIT', 30),\n        ],\n    ],\n];\n"
  },
  {
    "path": "config/livewire.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |---------------------------------------------------------------------------\n    | Class Namespace\n    |---------------------------------------------------------------------------\n    |\n    | This value sets the root class namespace for Livewire component classes in\n    | your application. This value will change where component auto-discovery\n    | finds components. It's also referenced by the file creation commands.\n    |\n    */\n\n    'class_namespace' => 'App\\\\Livewire',\n\n    /*\n    |---------------------------------------------------------------------------\n    | View Path\n    |---------------------------------------------------------------------------\n    |\n    | This value is used to specify where Livewire component Blade templates are\n    | stored when running file creation commands like `artisan make:livewire`.\n    | It is also used if you choose to omit a component's render() method.\n    |\n    */\n\n    'view_path' => resource_path('views/livewire'),\n\n    /*\n    |---------------------------------------------------------------------------\n    | Layout\n    |---------------------------------------------------------------------------\n    | The view that will be used as the layout when rendering a single component\n    | as an entire page via `Route::get('/post/create', CreatePost::class);`.\n    | In this case, the view returned by CreatePost will render into $slot.\n    |\n    */\n\n    'layout' => 'components.layouts.app',\n\n    /*\n    |---------------------------------------------------------------------------\n    | Lazy Loading Placeholder\n    |---------------------------------------------------------------------------\n    | Livewire allows you to lazy load components that would otherwise slow down\n    | the initial page load. Every component can have a custom placeholder or\n    | you can define the default placeholder view for all components below.\n    |\n    */\n\n    'lazy_placeholder' => null,\n\n    /*\n    |---------------------------------------------------------------------------\n    | Temporary File Uploads\n    |---------------------------------------------------------------------------\n    |\n    | Livewire handles file uploads by storing uploads in a temporary directory\n    | before the file is stored permanently. All file uploads are directed to\n    | a global endpoint for temporary storage. You may configure this below:\n    |\n    */\n\n    'temporary_file_upload' => [\n        'disk' => env('LIVEWIRE_TEMP_DISK', 's3'),        // Example: 'local', 's3'              | Default: 'default'\n        'rules' => null,       // Example: ['file', 'mimes:png,jpg']  | Default: ['required', 'file', 'max:12288'] (12MB)\n        'directory' => null,   // Example: 'tmp'                      | Default: 'livewire-tmp'\n        'middleware' => null,  // Example: 'throttle:5,1'             | Default: 'throttle:60,1'\n        'preview_mimes' => [   // Supported file types for temporary pre-signed file URLs...\n            'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',\n            'mov', 'avi', 'wmv', 'mp3', 'm4a',\n            'jpg', 'jpeg', 'mpga', 'webp', 'wma',\n        ],\n        'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...\n    ],\n\n    /*\n    |---------------------------------------------------------------------------\n    | Render On Redirect\n    |---------------------------------------------------------------------------\n    |\n    | This value determines if Livewire will run a component's `render()` method\n    | after a redirect has been triggered using something like `redirect(...)`\n    | Setting this to true will render the view once more before redirecting\n    |\n    */\n\n    'render_on_redirect' => false,\n\n    /*\n    |---------------------------------------------------------------------------\n    | Eloquent Model Binding\n    |---------------------------------------------------------------------------\n    |\n    | Previous versions of Livewire supported binding directly to eloquent model\n    | properties using wire:model by default. However, this behavior has been\n    | deemed too \"magical\" and has therefore been put under a feature flag.\n    |\n    */\n\n    'legacy_model_binding' => false,\n\n    /*\n    |---------------------------------------------------------------------------\n    | Auto-inject Frontend Assets\n    |---------------------------------------------------------------------------\n    |\n    | By default, Livewire automatically injects its JavaScript and CSS into the\n    | <head> and <body> of pages containing Livewire components. By disabling\n    | this behavior, you need to use @livewireStyles and @livewireScripts.\n    |\n    */\n\n    'inject_assets' => true,\n\n    /*\n    |---------------------------------------------------------------------------\n    | Navigate (SPA mode)\n    |---------------------------------------------------------------------------\n    |\n    | By adding `wire:navigate` to links in your Livewire application, Livewire\n    | will prevent the default link handling and instead request those pages\n    | via AJAX, creating an SPA-like effect. Configure this behavior here.\n    |\n    */\n\n    'navigate' => [\n        'show_progress_bar' => true,\n        'progress_bar_color' => '#2299dd',\n    ],\n\n    /*\n    |---------------------------------------------------------------------------\n    | HTML Morph Markers\n    |---------------------------------------------------------------------------\n    |\n    | Livewire intelligently \"morphs\" existing HTML into the newly rendered HTML\n    | after each update. To make this process more reliable, Livewire injects\n    | \"markers\" into the rendered Blade surrounding @if, @class & @foreach.\n    |\n    */\n\n    'inject_morph_markers' => true,\n\n    /*\n    |---------------------------------------------------------------------------\n    | Pagination Theme\n    |---------------------------------------------------------------------------\n    |\n    | When enabling Livewire's pagination feature by using the `WithPagination`\n    | trait, Livewire will use Tailwind templates to render pagination views\n    | on the page. If you want Bootstrap CSS, you can specify: \"bootstrap\"\n    |\n    */\n\n    'pagination_theme' => 'tailwind',\n];\n"
  },
  {
    "path": "config/logging.php",
    "content": "<?php\n\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default log channel that gets used when writing\n    | messages to the logs. The name specified in this option should match\n    | one of the channels defined in the \"channels\" configuration array.\n    |\n    */\n\n    'default' => env('LOG_CHANNEL', 'daily'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Log Channels\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log channels for your application. Out of\n    | the box, Laravel uses the Monolog PHP logging library. This gives\n    | you a variety of powerful log handlers / formatters to utilize.\n    |\n    | Available Drivers: \"single\", \"daily\", \"slack\", \"syslog\",\n    |                    \"errorlog\", \"monolog\",\n    |                    \"custom\", \"stack\"\n    |\n    */\n\n    'channels' => [\n        'stack' => [\n            'driver' => 'stack',\n            'channels' => ['single'],\n        ],\n\n        'single' => [\n            'driver' => 'single',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => 'debug',\n        ],\n\n        'daily' => [\n            'driver' => 'daily',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => 'debug',\n            'days' => 7,\n        ],\n\n        'slack' => [\n            'driver' => 'slack',\n            'url' => env('LOG_SLACK_WEBHOOK_URL'),\n            'username' => 'Laravel Log',\n            'emoji' => ':boom:',\n            'level' => 'critical',\n        ],\n\n        'papertrail' => [\n            'driver' => 'monolog',\n            'level' => 'debug',\n            'handler' => SyslogUdpHandler::class,\n            'handler_with' => [\n                'host' => env('PAPERTRAIL_URL'),\n                'port' => env('PAPERTRAIL_PORT'),\n            ],\n        ],\n\n        'stderr' => [\n            'driver' => 'monolog',\n            'handler' => StreamHandler::class,\n            'with' => [\n                'stream' => 'php://stderr',\n            ],\n        ],\n\n        'syslog' => [\n            'driver' => 'syslog',\n            'level' => 'debug',\n        ],\n\n        'errorlog' => [\n            'driver' => 'errorlog',\n            'level' => 'debug',\n        ],\n    ],\n\n    'enabled' => env('DB_LOGS_DATABASE', false),\n\n    'anonymize' => 30,\n    'prune_months' => 6,\n];\n"
  },
  {
    "path": "config/mail.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mail Driver\n    |--------------------------------------------------------------------------\n    |\n    | Laravel supports both SMTP and PHP's \"mail\" function as drivers for the\n    | sending of e-mail. You may specify which one you're using throughout\n    | your application here. By default, Laravel is setup for SMTP mail.\n    |\n    | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"mandrill\", \"ses\",\n    |            \"sparkpost\", \"log\", \"array\"\n    |\n    */\n\n    'driver' => env('MAIL_DRIVER', 'smtp'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Host Address\n    |--------------------------------------------------------------------------\n    |\n    | Here you may provide the host address of the SMTP server used by your\n    | applications. A default option is provided that is compatible with\n    | the Mailgun mail service which will provide reliable deliveries.\n    |\n    */\n\n    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Host Port\n    |--------------------------------------------------------------------------\n    |\n    | This is the SMTP port used by your application to deliver e-mails to\n    | users of the application. Like the host we have set this value to\n    | stay compatible with the Mailgun e-mail application by default.\n    |\n    */\n\n    'port' => env('MAIL_PORT', 587),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"From\" Address\n    |--------------------------------------------------------------------------\n    |\n    | You may wish for all e-mails sent by your application to be sent from\n    | the same address. Here, you may specify a name and address that is\n    | used globally for all e-mails that are sent by your application.\n    |\n    */\n\n    'from' => [\n        'address' => env('MAIL_FROM_ADDRESS', 'me@example.com'),\n        'name' => env('MAIL_FROM_NAME', 'Kanka.io'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | E-Mail Encryption Protocol\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the encryption protocol that should be used when\n    | the application send e-mail messages. A sensible default using the\n    | transport layer security protocol should provide great security.\n    |\n    */\n\n    'encryption' => env('MAIL_ENCRYPTION', 'tls'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Server Username\n    |--------------------------------------------------------------------------\n    |\n    | If your SMTP server requires a username for authentication, you should\n    | set it here. This will get used to authenticate with your server on\n    | connection. You may also set the \"password\" value below this one.\n    |\n    */\n\n    'username' => env('MAIL_USERNAME'),\n\n    'password' => env('MAIL_PASSWORD'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Sendmail System Path\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"sendmail\" driver to send e-mails, we will need to know\n    | the path to where Sendmail lives on this server. A default path has\n    | been provided here, which will work well on most of your systems.\n    |\n    */\n\n    'sendmail' => '/usr/sbin/sendmail -bs',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Markdown Mail Settings\n    |--------------------------------------------------------------------------\n    |\n    | If you are using Markdown based email rendering, you may configure your\n    | theme and component paths here, allowing you to customize the design\n    | of the emails. Or, you may simply stick with the Laravel defaults!\n    |\n    */\n\n    'markdown' => [\n        'theme' => 'default',\n\n        'paths' => [\n            resource_path('views/vendor/mail'),\n        ],\n    ],\n\n    'verify_peer' => false,\n];\n"
  },
  {
    "path": "config/mailerlite.php",
    "content": "<?php\n\nreturn [\n    'api_key' => env('MAILERLITE_API_TOKEN'),\n\n    'groups' => [\n        'all' => 84086713298715839,\n        'subs' => 84439423159109338,\n        'new' => 129565403592525427,\n    ],\n];\n"
  },
  {
    "path": "config/marketplace.php",
    "content": "<?php\n\nreturn [\n    /*\n    |-------------------------------------------\n    | Marketplace enabled\n    |-------------------------------------------\n    |\n    | This value tells the app if the marketplace is available or not.\n     */\n    'enabled' => ! empty(env('APP_MARKETPLACE_URL', null)),\n\n    /*\n    |-------------------------------------------\n    | Marketplace url\n    |-------------------------------------------\n    |\n    | This value tells us the url for the marketplace\n     */\n    'url' => env('APP_MARKETPLACE_URL', 'https://plugins.kanka.io'),\n];\n"
  },
  {
    "path": "config/openai.php",
    "content": "<?php\n\nreturn [\n\n    /**\n     * API Key\n     */\n    'secret' => env('OPEN_AI_SECRET', 0),\n\n    /**\n     * Custom URL\n     */\n    'custom_url' => env('OPEN_AI_URL', ''),\n\n    /**\n     * Number of tokens to use for prompt generation.\n     */\n    'tokens' => 650,\n];\n"
  },
  {
    "path": "config/passport.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Passport Guard\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which authentication guard Passport will use when\n    | authenticating users. This value should correspond with one of your\n    | guards that is already present in your \"auth\" configuration file.\n    |\n    */\n\n    'guard' => 'web',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Keys\n    |--------------------------------------------------------------------------\n    |\n    | Passport uses encryption keys while generating secure access tokens for\n    | your application. By default, the keys are stored as local files but\n    | can be set via environment variables when that is more convenient.\n    |\n    */\n\n    'private_key' => env('PASSPORT_PRIVATE_KEY'),\n\n    'public_key' => env('PASSPORT_PUBLIC_KEY'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Passport Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | By default, Passport's models will utilize your application's default\n    | database connection. If you wish to use a different connection you\n    | may specify the configured name of the database connection here.\n    |\n    */\n\n    'connection' => env('PASSPORT_CONNECTION'),\n\n];\n"
  },
  {
    "path": "config/paypal.php",
    "content": "<?php\n\nreturn [\n    // Sanity check\n    'enabled' => env('PAYPAL_MODE') !== null,\n\n    // Can only be 'sandbox' Or 'live'. If empty or invalid, 'live' will be used.\n    'mode' => env('PAYPAL_MODE', 'sandbox'),\n    'sandbox' => [\n        'client_id' => env('PAYPAL_SANDBOX_CLIENT_ID', ''),\n        'client_secret' => env('PAYPAL_SANDBOX_CLIENT_SECRET', ''),\n        // Used for testing Adaptive Payments API in sandbox mode\n        'app_id' => 'APP-80W284485P519543T',\n    ],\n    'live' => [\n        'client_id' => env('PAYPAL_LIVE_CLIENT_ID', ''),\n        'client_secret' => env('PAYPAL_LIVE_CLIENT_SECRET', ''),\n        'app_id' => '',\n    ],\n\n    // Can only be 'Sale', 'Authorization' or 'Order'\n    'payment_action' => env('PAYPAL_PAYMENT_ACTION', 'Sale'),\n    'currency' => env('PAYPAL_CURRENCY', 'USD'),\n\n    // Change this accordingly for your application, after payment is done PayPal IPN service sends notification\n    // to notify_url (or it can be set in PayPal profile). https://developer.paypal.com/api/nvp-soap/ipn/ht-ipn/\n    'notify_url' => env('PAYPAL_NOTIFY_URL', ''),\n\n    // force gateway language  i.e. it_IT, es_ES, en_US ... (for express checkout only)\n    'locale' => env('PAYPAL_LOCALE', 'en_US'),\n\n    // Validate SSL when creating api client.\n    'validate_ssl' => env('PAYPAL_VALIDATE_SSL', true),\n];\n"
  },
  {
    "path": "config/purge.php",
    "content": "<?php\n\nreturn [\n    'users' => [\n        'first' => [\n            'inactivity' => 18,\n            'limit' => 30,\n        ],\n        'second' => [\n            'limit' => 7,\n        ],\n    ],\n    'hard_delete' => env('APP_CAMPAIGN_HARD_DELETE', 24),\n];\n"
  },
  {
    "path": "config/purify.php",
    "content": "<?php\n\nuse App\\Definitions\\CustomCssDefinitions;\nuse App\\Definitions\\CustomDefinitions;\nuse Stevebauman\\Purify\\Cache\\FilesystemDefinitionCache;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Config\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default config that is provided to HTMLPurifier.\n    |\n    */\n\n    'default' => 'default',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Config sets\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure various sets of configuration for differentiated use of HTMLPurifier.\n    | A specific set of configuration can be applied by calling the \"config($name)\" method on\n    | a Purify instance. Feel free to add/remove/customize these attributes as you wish.\n    |\n    | Documentation: http://htmlpurifier.org/live/configdoc/plain.html\n    |\n    |   Core.Encoding               The encoding to convert input to.\n    |   HTML.Doctype                Doctype to use during filtering.\n    |   HTML.Allowed                The allowed HTML Elements with their allowed attributes.\n    |   HTML.ForbiddenElements      The forbidden HTML elements. Elements that are listed in this\n    |                               string will be removed, however their content will remain.\n    |   CSS.AllowedProperties       The Allowed CSS properties.\n    |   AutoFormat.AutoParagraph    Newlines are converted in to paragraphs whenever possible.\n    |   AutoFormat.RemoveEmpty      Remove empty elements that contribute no semantic information to the document.\n    |\n    */\n\n    'configs' => [\n\n        'default' => [\n            'Core.Encoding' => 'utf-8',\n            'HTML.Doctype' => 'HTML 4.01 Transitional',\n\n            /*\n            |--------------------------------------------------------------------------\n            | HTML.Allowed\n            |--------------------------------------------------------------------------\n            |\n            | The allowed HTML Elements with their allowed attributes.\n            |\n            | http://htmlpurifier.org/live/configdoc/plain.html#HTML.Allowed\n            |\n            */\n            'HTML.Allowed' => ''\n                /** Titles */\n                . 'h1[class|style|id|title],'\n                . 'h2[class|style|id|title],'\n                . 'h3[class|style|id|title],'\n                . 'h4[class|style|id|title],'\n                . 'h5[class|style|id|title],'\n                . 'h6[class|style|id|title],'\n                /** General elements */\n                . 'div[class|style|id|align|role|title],'\n                . 'p[class|style|id|dir|align],'\n                . 'span[class|style|id|dir],'\n                . 'a[href|class|style|target|rel|title|id|role|data-toggle|data-html|data-dropdown|data-pulse|data-animate|data-tooltip|data-title|data-entity-type],'\n                . 'br[class|style],'\n                . 'i[class|style],u[class|style],'\n                . 'img[src|style|alt|width|height|class|title|id|data-gallery-id|data-uuid],'\n                . 'hr[class|style|id|title],'\n\n                /** Text blocks */\n                . 'pre[class|style|title|id],'\n                . 'blockquote[cite|class|style|id],'\n                . 'code[class|style|id],'\n\n                /** Lists **/\n                . 'ul[class|style|id|role|data-type],'\n                . 'ol[class|style|id|role|start|type],'\n                . 'li[class|style|id|role|value|data-type|data-checked],'\n                . 'dl[class|style|id],dt[class|style|id],dd[class|style|id],'\n\n                /** Task lists */\n                . 'label[class|style],'\n                . 'input[type|checked|disabled],'\n\n                /** Misc elements */\n                . 'mark[class|style],'\n                . 'cite[class|style],'\n                . 'q[cite|class|style],'\n                . 'caption[class|style|id|title],'\n                . 'acronym[title|class|style],'\n                . 'abbr[title|class|style],'\n                . 'font[class|style|color],'\n                . 'summary[class|style|id],'\n                . 'details[class|style|id|open],'\n                . 'figure[class|style|id|title],figcaption[class|style|id|title],'\n\n                /** Iframe, combined with the domain whitelist */\n                . 'iframe[src|width|height|style|class|scrolling|id],'\n\n                /** Formatting */\n                . 'ins[class|style],del[class|style],'\n                . 'sup[class|style],sub[class|style],'\n                . 'big,small,'\n                . 's[class|style],strong[class|style],em[class|style],b[class|style],strike,'\n\n                /** Tables */\n                . 'table[class|style|summary|border|cellpadding|cellspacing|id|width],'\n                . 'tbody[class|style|id],'\n                . 'thead[class|style|id],'\n                . 'tfoot[class|style|id],'\n                . 'colgroup,'\n                . 'col[style|class],'\n                . 'tr[class|style|id],'\n                . 'colgroup,'\n                . 'col[style|class],'\n                . 'td[class|style|abbr|colspan|rowspan|colwidth|title|align|valign],'\n                . 'th[class|style|abbr|colspan|rowspan|colwidth|title|align|valign],',\n\n            /*\n            |--------------------------------------------------------------------------\n            | HTML.ForbiddenElements\n            |--------------------------------------------------------------------------\n            |\n            | The forbidden HTML elements. Elements that are listed in\n            | this string will be removed, however their content will remain.\n            |\n            | For example if 'p' is inside the string, the string: '<p>Test</p>',\n            |\n            | Will be cleaned to: 'Test'\n            |\n            | http://htmlpurifier.org/live/configdoc/plain.html#HTML.ForbiddenElements\n            |\n            */\n\n            'HTML.ForbiddenElements' => '',\n\n            /*\n            |--------------------------------------------------------------------------\n            | CSS.AllowedProperties\n            |--------------------------------------------------------------------------\n            |\n            | The Allowed CSS properties.\n            |\n            | http://htmlpurifier.org/live/configdoc/plain.html#CSS.AllowedProperties\n            |\n            */\n\n            'CSS.AllowedProperties' => ''\n                /** Typography */\n                . 'font,font-size,font-weight,font-style,font-family,'\n                . 'text-decoration,text-align,text-indent,text-transform,'\n                . 'line-height,letter-spacing,word-spacing,white-space,'\n                . 'vertical-align,color,'\n                /** Backgrounds */\n                . 'background-color,'\n                /** Box model */\n                . 'width,height,min-width,min-height,max-width,max-height,'\n                . 'margin,margin-top,margin-right,margin-bottom,margin-left,'\n                . 'padding,padding-top,padding-right,padding-bottom,padding-left,'\n                /** Borders */\n                . 'border,border-collapse,border-style,border-color,border-width,'\n                . 'border-top,border-right,border-bottom,border-left,'\n                /** Layout */\n                . 'float,list-style-type',\n\n            /*\n            |--------------------------------------------------------------------------\n            | AutoFormat.AutoParagraph\n            |--------------------------------------------------------------------------\n            |\n            | The Allowed CSS properties.\n            |\n            | This directive turns on auto-paragraphing, where double\n            | newlines are converted in to paragraphs whenever possible.\n            |\n            | http://htmlpurifier.org/live/configdoc/plain.html#AutoFormat.AutoParagraph\n            |\n            */\n\n            'AutoFormat.AutoParagraph' => false,\n\n            /*\n            |--------------------------------------------------------------------------\n            | AutoFormat.RemoveEmpty\n            |--------------------------------------------------------------------------\n            |\n            | When enabled, HTML Purifier will attempt to remove empty\n            | elements that contribute no semantic information to the document.\n            |\n            | http://htmlpurifier.org/live/configdoc/plain.html#AutoFormat.RemoveEmpty\n            |\n            */\n\n            'AutoFormat.RemoveEmpty' => false,\n            // 'AutoFormat.RemoveEmpty.Predicate' => ['iframe' => false],\n\n            // To allow max-width and max-height on images. This might cause imageattacks?\n            'HTML.MaxImgLength' => null,\n            'CSS.MaxImgLength' => null,\n\n            // Allow links that target blank\n            'Attr.AllowedFrameTargets' => ['_blank'],\n\n            // Allow setting IDs for anchors\n            'Attr.EnableID' => true,\n\n            // Iframes to vimeo and youtube\n            // 'HTML.SafeIframe' => true,\n            // 'URI.SafeIframeRegexp' => '%^(https?:)?//(www\\.youtube(?:-nocookie)?\\.com/embed/|player\\.vimeo\\.com/video/)%',\n            'Filter.YouTube' => true,\n\n            'HTML.SafeIframe' => true,\n            'URI.SafeIframeRegexp' => '%^(https?:)?//('\n                . \"www\\.youtube(?:-nocookie)?\\.com/embed/|\"\n                . \"player\\.vimeo\\.com/video/|\"\n                . \"open\\.spotify\\.com/embed|\"\n                . 'docs.google.com/|'\n                . 'drive.google.com/|'\n                . 'www.google.com/maps/embed|'\n                . 'calendar.google.com/calendar/embed|'\n                . 'snazzymaps.com/embed|'\n                . 'w.soundcloud.com/player/|'\n                . \"www\\.dndbeyond\\.com/|\"\n                . \"www\\.aonprd\\.com/|\"\n                . \"2e\\.aonprd\\.com/|\"\n                . \"www\\.aonsrd\\.com/|\"\n                . \"p3d\\.in/e/|\"\n                . \"api\\.mapbox\\.com/|\"\n                . 'app.box.com/embed/'\n                . \"discord\\.com/|\"\n                . \"discord\\.gg/|\"\n                . \"bardly\\.io/|\"\n                . \"view\\.genially\\.com/|\"\n                . ')%',\n        ],\n\n        'tooltips' => [\n            // <p>', '<table>', '<tr>', '<th>', '<td>', '<i>', '<span>', '<div>', '<img>\n            'allowed' => [\n                'a',\n                'i', 'b', 'strong',\n                'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n                'p', 'div', 'span',\n                'table', 'tr', 'th', 'td',\n                'img',\n            ],\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTMLPurifier definitions\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify a class that augments the HTML definitions used by\n    | HTMLPurifier. Additional HTML5 definitions are provided out of the box.\n    | When specifying a custom class, make sure it implements the interface:\n    |\n    |   \\Stevebauman\\Purify\\Definitions\\Definition\n    |\n    | Note that these definitions are applied to every Purifier instance.\n    |\n    | Documentation: http://htmlpurifier.org/docs/enduser-customize.html\n    |\n    */\n\n    'definitions' => CustomDefinitions::class,\n\n    'css-definitions' => CustomCssDefinitions::class,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Serializer location\n    |--------------------------------------------------------------------------\n    |\n    | The location where HTMLPurifier can store its temporary serializer files.\n    | The filepath should be accessible and writable by the web server.\n    | A good place for this is in the framework's own storage path.\n    |\n    */\n\n    'serializer' => [\n        'disk' => env('FILESYSTEM_DRIVER', 'local'),\n        'path' => 'purify',\n        'cache' => FilesystemDefinitionCache::class,\n    ],\n\n    // 'serializer' => [\n    //    'driver' => env('CACHE_DRIVER', 'file'),\n    //    'cache' => \\Stevebauman\\Purify\\Cache\\CacheDefinitionCache::class,\n    // ],\n\n];\n"
  },
  {
    "path": "config/queue.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Driver\n    |--------------------------------------------------------------------------\n    |\n    | Laravel's queue API supports an assortment of back-ends via a single\n    | API, giving you convenient access to each back-end using the same\n    | syntax for each one. Here you may set the default queue driver.\n    |\n    | Supported: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\", \"null\"\n    |\n    */\n\n    'default' => env('QUEUE_DRIVER', 'redis'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the connection information for each server that\n    | is used by your application. A default configuration has been added\n    | for each back-end shipped with Laravel. You are free to add more.\n    |\n    */\n\n    'connections' => [\n\n        'sync' => [\n            'driver' => 'sync',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => 'jobs',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n        'beanstalkd' => [\n            'driver' => 'beanstalkd',\n            'host' => 'localhost',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key' => 'your-public-key',\n            'secret' => 'your-secret-key',\n            'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',\n            'queue' => 'your-queue-name',\n            'region' => 'us-east-1',\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n            'queue' => env('REDIS_QUEUE', 'default'),\n            'retry_after' => 90,\n        ],\n\n        // For heavy jobs (no timeout) like map chunking\n        'heavy' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n            'queue' => env('REDIS_HEAVY_QUEUE', 'heavy'),\n            'retry_after' => 300,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Failed Queue Jobs\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of failed queue job logging so you\n    | can control which database and table are used to store the jobs that\n    | have failed. You may change them to any database / table you wish.\n    |\n    */\n\n    'failed' => [\n        'database' => env('DB_CONNECTION', 'mysql'),\n        'table' => 'failed_jobs',\n    ],\n\n];\n"
  },
  {
    "path": "config/reverb.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Reverb Server\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default server used by Reverb to handle\n    | incoming messages as well as broadcasting message to all your\n    | connected clients. At this time only \"reverb\" is supported.\n    |\n    */\n\n    'default' => env('REVERB_SERVER', 'reverb'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Reverb Servers\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define details for each of the supported Reverb servers.\n    | Each server has its own configuration options that are defined in\n    | the array below. You should ensure all the options are present.\n    |\n    */\n\n    'servers' => [\n\n        'reverb' => [\n            'host' => env('REVERB_SERVER_HOST', '0.0.0.0'),\n            'port' => env('REVERB_SERVER_PORT', 8080),\n            'path' => env('REVERB_SERVER_PATH', ''),\n            'hostname' => env('REVERB_HOST'),\n            'options' => [\n                'tls' => [],\n            ],\n            'max_request_size' => env('REVERB_MAX_REQUEST_SIZE', 10_000),\n            'scaling' => [\n                'enabled' => env('REVERB_SCALING_ENABLED', false),\n                'channel' => env('REVERB_SCALING_CHANNEL', 'reverb'),\n                'server' => [\n                    'url' => env('REDIS_URL'),\n                    'host' => env('REDIS_HOST', '127.0.0.1'),\n                    'port' => env('REDIS_PORT', '6379'),\n                    'username' => env('REDIS_USERNAME'),\n                    'password' => env('REDIS_PASSWORD'),\n                    'database' => env('REDIS_DB', '0'),\n                    'timeout' => env('REDIS_TIMEOUT', 60),\n                ],\n            ],\n            'pulse_ingest_interval' => env('REVERB_PULSE_INGEST_INTERVAL', 15),\n            'telescope_ingest_interval' => env('REVERB_TELESCOPE_INGEST_INTERVAL', 15),\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Reverb Applications\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define how Reverb applications are managed. If you choose\n    | to use the \"config\" provider, you may define an array of apps which\n    | your server will support, including their connection credentials.\n    |\n    */\n\n    'apps' => [\n\n        'provider' => 'config',\n\n        'apps' => [\n            [\n                'key' => env('REVERB_APP_KEY'),\n                'secret' => env('REVERB_APP_SECRET'),\n                'app_id' => env('REVERB_APP_ID'),\n                'options' => [\n                    'host' => env('REVERB_HOST'),\n                    'port' => env('REVERB_PORT', 443),\n                    'scheme' => env('REVERB_SCHEME', 'https'),\n                    'useTLS' => env('REVERB_SCHEME', 'https') === 'https',\n                ],\n                'allowed_origins' => ['*'],\n                'ping_interval' => env('REVERB_APP_PING_INTERVAL', 60),\n                'activity_timeout' => env('REVERB_APP_ACTIVITY_TIMEOUT', 30),\n                'max_connections' => env('REVERB_APP_MAX_CONNECTIONS'),\n                'max_message_size' => env('REVERB_APP_MAX_MESSAGE_SIZE', 10_000),\n            ],\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/scout.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Search Engine\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default search connection that gets used while\n    | using Laravel Scout. This connection is used when syncing all models\n    | to the search service. You should adjust this based on your needs.\n    |\n    | Supported: \"algolia\", \"meilisearch\", \"database\", \"collection\", \"null\"\n    |\n    */\n\n    'driver' => env('SCOUT_DRIVER', 'algolia'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Index Prefix\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify a prefix that will be applied to all search index\n    | names used by Scout. This prefix may be useful if you have multiple\n    | \"tenants\" or applications sharing the same search infrastructure.\n    |\n    */\n\n    'prefix' => env('SCOUT_PREFIX', ''),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Data Syncing\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to control if the operations that sync your data\n    | with your search engines are queued. When this is set to \"true\" then\n    | all automatic data syncing will get queued for better performance.\n    |\n    */\n\n    // SET TO TRUE TO USE QUEUE\n    'queue' => env('SCOUT_QUEUE', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Transactions\n    |--------------------------------------------------------------------------\n    |\n    | This configuration option determines if your data will only be synced\n    | with your search indexes after every open database transaction has\n    | been committed, thus preventing any discarded data from syncing.\n    |\n    */\n\n    'after_commit' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Chunk Sizes\n    |--------------------------------------------------------------------------\n    |\n    | These options allow you to control the maximum chunk size when you are\n    | mass importing data into the search engine. This allows you to fine\n    | tune each of these chunk sizes based on the power of the servers.\n    |\n    */\n\n    'chunk' => [\n        'searchable' => 10000,\n        'unsearchable' => 10000,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Soft Deletes\n    |--------------------------------------------------------------------------\n    |\n    | This option allows to control whether to keep soft deleted records in\n    | the search indexes. Maintaining soft deleted records can be useful\n    | if your application still needs to search for the records later.\n    |\n    */\n\n    'soft_delete' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Identify User\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to control whether to notify the search engine\n    | of the user performing the search. This is sometimes useful if the\n    | engine supports any analytics based on this application's users.\n    |\n    | Supported engines: \"algolia\"\n    |\n    */\n\n    'identify' => env('SCOUT_IDENTIFY', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Algolia Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure your Algolia settings. Algolia is a cloud hosted\n    | search engine which works great with Scout out of the box. Just plug\n    | in your application ID and admin API key to get started searching.\n    |\n    */\n\n    'algolia' => [\n        'id' => env('ALGOLIA_APP_ID', ''),\n        'secret' => env('ALGOLIA_SECRET', ''),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Meilisearch Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure your Meilisearch settings. Meilisearch is an open\n    | source search engine with minimal configuration. Below, you can state\n    | the host and key information for your own Meilisearch installation.\n    |\n    | See: https://www.meilisearch.com/docs/learn/configuration/instance_options#all-instance-options\n    |\n    */\n\n    'meilisearch' => [\n        'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'),\n        'key' => env('MEILISEARCH_KEY'),\n        'index-settings' => [\n            'entities' => [\n                'filterableAttributes' => ['id', 'campaign_id'],\n                'sortableAttributes' => ['name', 'entry'],\n            ],\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/sentry.php",
    "content": "<?php\n\nreturn [\n    'dsn' => env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')),\n\n    // The release version of your application\n    // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty=\"%h\" -n1 HEAD'))\n    'release' => env('APP_VERSION'),\n\n    // When left empty or `null` the Laravel environment will be used\n    'environment' => env('SENTRY_ENVIRONMENT'),\n\n    'max_breadcrumbs' => 25,\n\n    'breadcrumbs' => [\n        // Capture Laravel logs in breadcrumbs\n        'logs' => true,\n\n        // Capture SQL queries in breadcrumbs\n        'sql_queries' => true,\n\n        // Capture bindings on SQL queries logged in breadcrumbs\n        'sql_bindings' => true,\n\n        // Capture queue job information in breadcrumbs\n        'queue_info' => true,\n\n        // Capture command information in breadcrumbs\n        'command_info' => true,\n    ],\n\n    'tracing' => [\n        // Trace queue jobs as their own transactions\n        'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false),\n\n        // Capture queue jobs as spans when executed on the sync driver\n        'queue_jobs' => true,\n\n        // Capture SQL queries as spans\n        'sql_queries' => true,\n\n        // Try to find out where the SQL query originated from and add it to the query spans\n        'sql_origin' => true,\n\n        // Capture views as spans\n        'views' => true,\n\n        // Capture HTTP client requests as spans\n        'http_client_requests' => true,\n\n        // Indicates if the tracing integrations supplied by Sentry should be loaded\n        'default_integrations' => true,\n\n        // Indicates that requests without a matching route should be traced\n        'missing_routes' => false,\n    ],\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send-default-pii\n    'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false),\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces-sample-rate\n    'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_TRACES_SAMPLE_RATE'),\n];\n"
  },
  {
    "path": "config/services.php",
    "content": "<?php\n\nuse App\\Models\\User;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Party Services\n    |--------------------------------------------------------------------------\n    |\n    | This file is for storing the credentials for third party services such\n    | as Stripe, Mailgun, SparkPost and others. This file provides a sane\n    | default location for this type of information, allowing packages\n    | to have a conventional place to find your various credentials.\n    |\n    */\n\n    'mailgun' => [\n        'domain' => env('MAILGUN_DOMAIN'),\n        'secret' => env('MAILGUN_SECRET'),\n        'endpoint' => env('MAILGUN_ENDPOINT', 'api.eu.mailgun.net'),\n        'scheme' => 'https',\n    ],\n\n    'ses' => [\n        'key' => env('SES_KEY'),\n        'secret' => env('SES_SECRET'),\n        'region' => env('SES_REGION', 'us-east-1'),\n    ],\n\n    'sparkpost' => [\n        'secret' => env('SPARKPOST_SECRET'),\n    ],\n\n    'stripe' => [\n        'enabled' => ! empty(env('STRIPE_KEY')) ? true : false,\n        'model' => User::class,\n        'key' => env('STRIPE_KEY'),\n        'secret' => env('STRIPE_SECRET'),\n    ],\n\n    'facebook' => [\n        'client_id' => env('FACEBOOK_CLIENT_ID'),\n        'client_secret' => env('FACEBOOK_CLIENT_SECRET'),\n        'redirect' => env('APP_URL') . '/auth/facebook/callback',\n    ],\n\n    'google' => [\n        'client_id' => env('GOOGLE_CLIENT_ID'),\n        'client_secret' => env('GOOGLE_CLIENT_SECRET'),\n        'redirect' => env('APP_URL') . '/auth/google/callback',\n    ],\n\n    'twitter' => [\n        'client_id' => env('TWITTER_CLIENT_ID'),\n        'client_secret' => env('TWITTER_CLIENT_SECRET'),\n        'redirect' => env('APP_URL') . '/auth/twitter/callback',\n    ],\n];\n"
  },
  {
    "path": "config/session.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Session Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default session \"driver\" that will be used on\n    | requests. By default, we will use the lightweight native driver but\n    | you may specify any of the other wonderful drivers provided here.\n    |\n    | Supported: \"file\", \"cookie\", \"database\", \"apc\",\n    |            \"memcached\", \"redis\", \"array\"\n    |\n    */\n\n    'driver' => env('SESSION_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Lifetime\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the number of minutes that you wish the session\n    | to be allowed to remain idle before it expires. If you want them\n    | to immediately expire on the browser closing, set that option.\n    |\n    */\n\n    'lifetime' => env('SESSION_LIFETIME', 120),\n\n    'expire_on_close' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Encryption\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to easily specify that all of your session data\n    | should be encrypted before it is stored. All encryption will be run\n    | automatically by Laravel and you can use the Session like normal.\n    |\n    */\n\n    'encrypt' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session File Location\n    |--------------------------------------------------------------------------\n    |\n    | When using the native session driver, we need a location where session\n    | files may be stored. A default has been set for you but a different\n    | location may be specified. This is only needed for file sessions.\n    |\n    */\n\n    'files' => storage_path('framework/sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" or \"redis\" session drivers, you may specify a\n    | connection that should be used to manage these sessions. This should\n    | correspond to a connection in your database configuration options.\n    |\n    */\n\n    'connection' => env('SESSION_CONNECTION'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Table\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" session driver, you may specify the table we\n    | should use to manage the sessions. Of course, a sensible default is\n    | provided for you; however, you are free to change this as needed.\n    |\n    */\n\n    'table' => 'sessions',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"apc\" or \"memcached\" session drivers, you may specify a\n    | cache store that should be used for these sessions. This value must\n    | correspond with one of the application's configured cache stores.\n    |\n    */\n\n    'store' => env('SESSION_STORE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Sweeping Lottery\n    |--------------------------------------------------------------------------\n    |\n    | Some session drivers must manually sweep their storage location to get\n    | rid of old sessions from storage. Here are the chances that it will\n    | happen on a given request. By default, the odds are 2 out of 100.\n    |\n    */\n\n    'lottery' => [2, 100],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the name of the cookie used to identify a session\n    | instance by ID. The name specified here will get used every time a\n    | new session cookie is created by the framework for every driver.\n    |\n    */\n\n    'cookie' => env(\n        'SESSION_COOKIE',\n        Str::slug(env('APP_NAME', 'laravel'), '_') . '_session'\n    ),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Path\n    |--------------------------------------------------------------------------\n    |\n    | The session cookie path determines the path for which the cookie will\n    | be regarded as available. Typically, this will be the root path of\n    | your application but you are free to change this when necessary.\n    |\n    */\n\n    'path' => '/',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Domain\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the domain of the cookie used to identify a session\n    | in your application. This will determine which domains the cookie is\n    | available to in your application. A sensible default has been set.\n    |\n    */\n\n    'domain' => env('SESSION_DOMAIN'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTPS Only Cookies\n    |--------------------------------------------------------------------------\n    |\n    | By setting this option to true, session cookies will only be sent back\n    | to the server if the browser has a HTTPS connection. This will keep\n    | the cookie from being sent to you if it can not be done securely.\n    |\n    */\n\n    'secure' => env('SESSION_SECURE_COOKIE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Access Only\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will prevent JavaScript from accessing the\n    | value of the cookie and the cookie will only be accessible through\n    | the HTTP protocol. You are free to modify this option if needed.\n    |\n    */\n\n    'http_only' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Same-Site Cookies\n    |--------------------------------------------------------------------------\n    |\n    | This option determines how your cookies behave when cross-site requests\n    | take place, and can be used to mitigate CSRF attacks. By default, we\n    | do not enable this as other CSRF protection services are in place.\n    |\n    | Supported: \"lax\", \"strict\", \"none\", null\n    |\n    */\n\n    'same_site' => env('SESSION_SAME_SITE', 'lax'),\n\n];\n"
  },
  {
    "path": "config/subscription.php",
    "content": "<?php\n\nreturn [\n    'fraud_detection' => env('APP_FRAUD_DETECTION', false),\n    'owlbear' => [\n        'eur' => [\n            'monthly' => env('STRIPE_OWLBEAR_EUR'),\n            'yearly' => env('STRIPE_OWLBEAR_EUR_YEARLY'),\n        ],\n        'usd' => [\n            'monthly' => env('STRIPE_OWLBEAR_USD'),\n            'yearly' => env('STRIPE_OWLBEAR_USD_YEARLY'),\n        ],\n        'brl' => [\n            'monthly' => env('STRIPE_OWLBEAR_BRL'),\n            'yearly' => env('STRIPE_OWLBEAR_BRL_YEARLY'),\n        ],\n        'monthly' => [\n            env('STRIPE_OWLBEAR_EUR'),\n            env('STRIPE_OWLBEAR_EUR_OLD'),\n            env('STRIPE_OWLBEAR_USD'),\n            env('STRIPE_OWLBEAR_USD_OLD'),\n            env('STRIPE_OWLBEAR_BRL'),\n        ],\n        'yearly' => [\n            env('STRIPE_OWLBEAR_EUR_YEARLY'),\n            env('STRIPE_OWLBEAR_EUR_YEARLY_OLD'),\n            env('STRIPE_OWLBEAR_USD_YEARLY'),\n            env('STRIPE_OWLBEAR_USD_YEARLY_OLD'),\n            env('STRIPE_OWLBEAR_BRL_YEARLY'),\n        ],\n    ],\n    'wyvern' => [\n        'eur' => [\n            'monthly' => env('STRIPE_WYVERN_EUR'),\n            'yearly' => env('STRIPE_WYVERN_EUR_YEARLY'),\n        ],\n        'usd' => [\n            'monthly' => env('STRIPE_WYVERN_USD'),\n            'yearly' => env('STRIPE_WYVERN_USD_YEARLY'),\n        ],\n        'brl' => [\n            'monthly' => env('STRIPE_WYVERN_BRL'),\n            'yearly' => env('STRIPE_WYVERN_BRL_YEARLY'),\n        ],\n        'monthly' => [\n            env('STRIPE_WYVERN_EUR'),\n            env('STRIPE_WYVERN_EUR_OLD'),\n            env('STRIPE_WYVERN_USD'),\n            env('STRIPE_WYVERN_USD_OLD'),\n            env('STRIPE_WYVERN_BRL'),\n        ],\n        'yearly' => [\n            env('STRIPE_WYVERN_EUR_YEARLY'),\n            env('STRIPE_WYVERN_EUR_YEARLY_OLD'),\n            env('STRIPE_WYVERN_USD_YEARLY'),\n            env('STRIPE_WYVERN_USD_YEARLY_OLD'),\n            env('STRIPE_WYVERN_BRL_YEARLY'),\n        ],\n    ],\n    'elemental' => [\n        'eur' => [\n            'monthly' => env('STRIPE_ELEMENTAL_EUR'),\n            'yearly' => env('STRIPE_ELEMENTAL_EUR_YEARLY'),\n        ],\n        'usd' => [\n            'monthly' => env('STRIPE_ELEMENTAL_USD'),\n            'yearly' => env('STRIPE_ELEMENTAL_USD_YEARLY'),\n        ],\n        'brl' => [\n            'monthly' => env('STRIPE_ELEMENTAL_BRL'),\n            'yearly' => env('STRIPE_ELEMENTAL_BRL_YEARLY'),\n        ],\n        'monthly' => [\n            env('STRIPE_ELEMENTAL_EUR'),\n            env('STRIPE_ELEMENTAL_EUR_OLD'),\n            env('STRIPE_ELEMENTAL_USD'),\n            env('STRIPE_ELEMENTAL_USD_OLD'),\n            env('STRIPE_ELEMENTAL_BRL'),\n        ],\n        'yearly' => [\n            env('STRIPE_ELEMENTAL_EUR_YEARLY'),\n            env('STRIPE_ELEMENTAL_EUR_YEARLY_OLD'),\n            env('STRIPE_ELEMENTAL_USD_YEARLY'),\n            env('STRIPE_ELEMENTAL_USD_YEARLY_OLD'),\n            env('STRIPE_ELEMENTAL_BRL_YEARLY'),\n        ],\n    ],\n    'old' => [\n        'all' => [\n            env('STRIPE_OWLBEAR_EUR_OLD'),\n            env('STRIPE_OWLBEAR_EUR_YEARLY_OLD'),\n            env('STRIPE_OWLBEAR_USD_OLD'),\n            env('STRIPE_OWLBEAR_USD_YEARLY_OLD'),\n            env('STRIPE_WYVERN_EUR_OLD'),\n            env('STRIPE_WYVERN_EUR_YEARLY_OLD'),\n            env('STRIPE_WYVERN_USD_OLD'),\n            env('STRIPE_WYVERN_USD_YEARLY_OLD'),\n            env('STRIPE_ELEMENTAL_EUR_OLD'),\n            env('STRIPE_ELEMENTAL_EUR_YEARLY_OLD'),\n            env('STRIPE_ELEMENTAL_USD_OLD'),\n            env('STRIPE_ELEMENTAL_USD_YEARLY_OLD'),\n        ],\n        'oe' => env('STRIPE_OWLBEAR_EUR_OLD'),\n        'oey' => env('STRIPE_OWLBEAR_EUR_YEARLY_OLD'),\n        'ou' => env('STRIPE_OWLBEAR_USD_OLD'),\n        'ouy' => env('STRIPE_OWLBEAR_USD_YEARLY_OLD'),\n        'we' => env('STRIPE_WYVERN_EUR_OLD'),\n        'wey' => env('STRIPE_WYVERN_EUR_YEARLY_OLD'),\n        'wu' => env('STRIPE_WYVERN_USD_OLD'),\n        'wuy' => env('STRIPE_WYVERN_USD_YEARLY_OLD'),\n        'ee' => env('STRIPE_ELEMENTAL_EUR_OLD'),\n        'eey' => env('STRIPE_ELEMENTAL_EUR_YEARLY_OLD'),\n        'eu' => env('STRIPE_ELEMENTAL_USD_OLD'),\n        'euy' => env('STRIPE_ELEMENTAL_USD_YEARLY_OLD'),\n    ],\n];\n"
  },
  {
    "path": "config/thumbor.php",
    "content": "<?php\n\n/**\n * Config for the Thumbor service. This is used to generate thumbnails of every image.\n * When running Kanka locally with docker, it comes with a lightweight thumbor instance\n * that will read and save thumbnails from minio.\n */\n\nreturn [\n    'key' => env('THUMBOR_KEY'),\n    'bases' => [\n        'user' => 'https://' . env('AWS_BUCKET') . '.s3.eu-central-1.amazonaws.com/',\n        'app' => 'https://' . env('AWS_BUCKET_APP') . '.s3.eu-central-1.amazonaws.com/',\n    ],\n    'url' => env('THUMBOR_URL', 'http://localhost:8889/'),\n];\n"
  },
  {
    "path": "config/tracking.php",
    "content": "<?php\n\nreturn [\n    /*\n     * Google Tag Manager\n     * Used to track various events on the application.\n     * If empty, event tracking will be disabled\n     */\n    'gtm' => env('TRACKING_GTM'),\n\n    /*\n     * Google Analytics\n     * Used to track visits to the application.\n     * If empty, tracking will be disabled\n     */\n    'ga' => env('TRACKING_GA'),\n\n    /*\n     * Google Analytics conversation tracking\n     * Used to track who converts to the app\n     * If empty, tracking will be disabled\n     */\n    'ga_convo' => env('TRACKING_GA_CONVERSION'),\n\n    /*\n     * AdSense ID\n     */\n    'adsense' => env('TRACKING_ADSENSE'),\n    'adsense_sidebar' => env('TRACKING_ADSENSE_SIDEBAR'),\n    'adsense_dashboard' => env('TRACKING_ADSENSE_DASHBOARD'),\n    'adsense_entity' => env('TRACKING_ADSENSE_ENTITY'),\n    'adsense_footer' => env('TRACKING_ADSENSE_FOOTER'),\n\n    /*\n     * Venatus ad-manager\n     */\n    'venatus' => [\n        'enabled' => ! empty(env('TRACKING_VENATUS')),\n        'id' => env('TRACKING_VENATUS'),\n        'sidebar' => env('TRACKING_VENATUS_DYNAMIC_MOBILE'),\n        'entity' => env('TRACKING_VENATUS_STATIC_BANNER'),\n        'hybrid' => env('TRACKING_VENATUS_DYNAMIC_BANNER'),\n        'profile' => env('TRACKING_VENATUS_DYNAMIC_MOBILE'),\n        'inline' => env('TRACKING_VENATUS_DYNAMIC_MOBILE'),\n        'rich' => env('TRACKING_VENATUS_RICH'),\n\n    ],\n\n    'consent' => env('TRACKING_CONSENT') == 'True',\n\n    'ga_property_id' => env('GA4_PROPERTY_ID'),\n    'ga_credential_path' => env('GA4_CREDENTIAL_PATH'),\n];\n"
  },
  {
    "path": "config/trustedproxy.php",
    "content": "<?php\n\nreturn [\n    'defined' => env('TRUSTED_PROXIES', false),\n    'proxies' => explode(',', env('TRUSTED_PROXIES', '')),\n];\n"
  },
  {
    "path": "config/view.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Storage Paths\n    |--------------------------------------------------------------------------\n    |\n    | Most templating systems load templates from disk. Here you may specify\n    | an array of paths that should be checked for your views. Of course\n    | the usual Laravel view path has already been registered for you.\n    |\n    */\n\n    'paths' => [\n        resource_path('views'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Compiled View Path\n    |--------------------------------------------------------------------------\n    |\n    | This option determines where all the compiled Blade templates will be\n    | stored for your application. Typically, this is within the storage\n    | directory. However, as usual, you are free to change this value.\n    |\n    */\n\n    'compiled' => realpath(storage_path('framework/views')),\n\n];\n"
  },
  {
    "path": "database/.gitignore",
    "content": "*.sqlite\n"
  },
  {
    "path": "database/factories/AbilityFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Ability;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass AbilityFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Ability::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/AttributeFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Attribute;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass AttributeFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Attribute::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n            'value' => rand(500, 5000),\n            'type_id' => 1,\n            'api_key' => '1',\n            'is_hidden' => 0,\n            'is_private' => 0,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/BookmarkFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Bookmark;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass BookmarkFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Bookmark::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n            'type' => 'ability',\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/CalendarFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Calendar;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CalendarFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Calendar::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => 'Gregorian',\n            'months' => '[{\"name\":\"January\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"February\",\"length\":28,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"March\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"April\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"Mai\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"June\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"July\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"August\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"September\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"October\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"November\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"December\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"}]',\n            'weekdays' => '[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"]',\n            'seasons' => '[{\"name\":\"Spring\",\"month\":3,\"day\":21},{\"name\":\"Summer\",\"month\":6,\"day\":21},{\"name\":\"Autumn\",\"month\":9,\"day\":21},{\"name\":\"Winter\",\"month\":12,\"day\":21}]',\n            'suffix' => 'AD',\n            'has_leap_year' => 1,\n            'leap_year_amount' => 1,\n            'leap_year_month' => 2,\n            'leap_year_offset' => 4,\n            'leap_year_start' => 4,\n            'skip_year_zero' => 1,\n            'start_offset' => 5,\n            'is_incrementing' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/CampaignDashboardWidgetFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\CampaignDashboardWidget;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CampaignDashboardWidgetFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = CampaignDashboardWidget::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'widget' => 'header',\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/CampaignFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Campaign;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CampaignFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Campaign::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(20),\n            'entry' => '<p>' . fake()->text(500) . '<p>',\n            'excerpt' => fake()->text(100),\n            'ui_settings' => ['nested' => true],\n            'entity_visibility' => fake()->boolean(),\n            'entity_personality_visibility' => fake()->boolean(),\n            'visible_entity_count' => fake()->numberBetween(5, 100),\n            'is_featured' => false,\n            'boost_count' => 0,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/CampaignStyleFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\CampaignStyle;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CampaignStyleFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = CampaignStyle::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n            'content' => fake()->text(50),\n            'is_enabled' => false,\n            'is_theme' => false,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/CharacterFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Character;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CharacterFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Character::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ConversationFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Conversation;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ConversationFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Conversation::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'target_id' => 2,\n            'is_private' => false,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ConversationMessageFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\ConversationMessage;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ConversationMessageFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = ConversationMessage::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'message' => fake()->text(20),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ConversationParticipantFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\ConversationParticipant;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ConversationParticipantFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = ConversationParticipant::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'character_id' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/CreatureFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Creature;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @extends Factory<Creature>\n */\nclass CreatureFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'is_private' => false,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/DiceRollFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\DiceRoll;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass DiceRollFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = DiceRoll::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'parameters' => '2d2',\n            'is_private' => false,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/EntityAbilityFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\EntityAbility;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass EntityAbilityFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = EntityAbility::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'charges' => rand(0, 100),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/EntityAssetFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\EntityAsset;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass EntityAssetFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = EntityAsset::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n            'type_id' => 1,\n            'is_pinned' => 0,\n            'visibility_id' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/EntityTagFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\EntityTag;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass EntityTagFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = EntityTag::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'entity_id' => 1,\n            'tag_id' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/EventFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Event;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass EventFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Event::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/FamilyFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Family;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass FamilyFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Family::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ImageFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Image;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ImageFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Image::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'id' => fake()->uuid(),\n            'name' => fake()->text(10),\n            'ext' => 'png',\n            'size' => 209,\n            'is_default' => 0,\n            'folder_id' => null,\n            'is_folder' => 0,\n            'visibility_id' => 1,\n\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ItemFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Item;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ItemFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Item::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/JournalFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Journal;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass JournalFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Journal::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/LocationFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Location;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass LocationFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Location::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'is_private' => false,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/MapFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Map;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass MapFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Map::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/MapGroupFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\MapGroup;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass MapGroupFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = MapGroup::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/MapLayerFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\MapLayer;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass MapLayerFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = MapLayer::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/MapMarkerFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\MapMarker;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass MapMarkerFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = MapMarker::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n            'longitude' => 1,\n            'latitude' => 1,\n            'icon' => 1,\n            'shape_id' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/NoteFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Note;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass NoteFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Note::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/OrganisationFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Organisation;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass OrganisationFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Organisation::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PostFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Post;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass PostFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Post::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n            'entry' => '<p>' . fake()->text(500) . '<p>',\n            'position' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PostTagFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\PostTag;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass PostTagFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = PostTag::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'post_id' => 1,\n            'tag_id' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/QuestElementFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\QuestElement;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass QuestElementFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = QuestElement::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'entry' => '<p>' . fake()->text(50) . '<p>',\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/QuestFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Quest;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass QuestFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Quest::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/RaceFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Race;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass RaceFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Race::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/RelationFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Relation;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass RelationFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Relation::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'relation' => fake()->text(20),\n            'is_pinned' => 0,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ReminderFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Reminder;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ReminderFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Reminder::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'calendar_id' => 1,\n            'day' => 2,\n            'month' => 2,\n            'year' => 2,\n            'length' => 2,\n            'visibility_id' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/TagFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Tag;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass TagFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Tag::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->text(10),\n            'is_hidden' => 0,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/TimelineElementFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\TimelineElement;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass TimelineElementFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = TimelineElement::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'use_event_date' => false,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/TimelineEraFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\TimelineEra;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass TimelineEraFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = TimelineEra::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/TimelineFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\n// use Faker\\Generator as Faker;\nuse App\\Models\\Timeline;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass TimelineFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Timeline::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Str;\n\nclass UserFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'email' => fake()->unique()->safeEmail(),\n            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password\n            'remember_token' => Str::random(10),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/migrations/.gitkeep",
    "content": ""
  },
  {
    "path": "database/migrations/2014_04_02_193005_create_ltm_translations_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateLTMTranslationsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('ltm_translations', function (Blueprint $table) {\n            $table->increments('id');\n            $table->tinyInteger('status')->default(0);\n            $table->string('locale', 32);\n            $table->string('group', 128);\n            $table->string('key', 128);\n            $table->text('value')->nullable();\n            $table->text('saved_value')->nullable();\n            $table->text('source')->nullable();\n            $table->tinyInteger('is_deleted')->default(0);\n            $table->tinyInteger('was_used')->default(0);\n            $table->boolean('is_auto_added')->default(0);\n\n            $table->timestamps();\n\n            $table->index(['group'], 'ix_ltm_translations_group');\n            $table->unique(['locale', 'group', 'key'], 'ixk_ltm_translations_locale_group_key');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('ltm_translations');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2014_10_12_000000_create_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('users', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('email')->unique();\n            $table->string('password');\n            $table->rememberToken();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('users');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePasswordResetsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('password_resets', function (Blueprint $table) {\n            $table->string('email')->index();\n            $table->string('token');\n            $table->timestamp('created_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('password_resets');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2016_01_01_000000_add_voyager_user_fields.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass AddVoyagerUserFields extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up()\n    {\n        Schema::table('users', function ($table) {\n            if (! Schema::hasColumn('users', 'avatar')) {\n                $table->string('avatar')->nullable()->after('email');\n            }\n            if (! Schema::hasColumn('users', 'settings')) {\n                $table->text('settings')->nullable()->after('avatar');\n            }\n            // $table->integer('role_id')->nullable()->after('id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down()\n    {\n        if (Schema::hasColumn('users', 'avatar')) {\n            Schema::table('users', function ($table) {\n                $table->dropColumn('avatar');\n            });\n        }\n        if (Schema::hasColumn('users', 'role_id')) {\n            Schema::table('users', function ($table) {\n                $table->dropColumn('role_id');\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "database/migrations/2016_04_11_00352701_create_user_locales_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateUserLocalesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('ltm_user_locales', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id', false, true);\n            $table->text('locales')->nullable();\n            $table->text('tutorial')->nullable();\n            $table->index(['user_id'], 'ix_ltm_user_locales_user_id');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('ltm_user_locales');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2016_06_01_000001_create_oauth_auth_codes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('oauth_auth_codes', function (Blueprint $table) {\n            $table->string('id', 100)->primary();\n            $table->unsignedBigInteger('user_id')->index();\n            $table->unsignedBigInteger('client_id');\n            $table->text('scopes')->nullable();\n            $table->boolean('revoked');\n            $table->dateTime('expires_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('oauth_auth_codes');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2016_06_01_000002_create_oauth_access_tokens_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('oauth_access_tokens', function (Blueprint $table) {\n            $table->string('id', 100)->primary();\n            $table->unsignedBigInteger('user_id')->nullable()->index();\n            $table->unsignedBigInteger('client_id');\n            $table->string('name')->nullable();\n            $table->text('scopes')->nullable();\n            $table->boolean('revoked');\n            $table->timestamps();\n            $table->dateTime('expires_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('oauth_access_tokens');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2016_06_01_000003_create_oauth_refresh_tokens_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('oauth_refresh_tokens', function (Blueprint $table) {\n            $table->string('id', 100)->primary();\n            $table->string('access_token_id', 100)->index();\n            $table->boolean('revoked');\n            $table->dateTime('expires_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('oauth_refresh_tokens');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2016_06_01_000004_create_oauth_clients_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('oauth_clients', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedBigInteger('user_id')->nullable()->index();\n            $table->string('name');\n            $table->string('secret', 100)->nullable();\n            $table->string('provider')->nullable();\n            $table->text('redirect');\n            $table->boolean('personal_access_client');\n            $table->boolean('password_client');\n            $table->boolean('revoked');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('oauth_clients');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2016_06_01_000005_create_oauth_personal_access_clients_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('oauth_personal_access_clients', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedBigInteger('client_id');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('oauth_personal_access_clients');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2016_10_21_190000_create_roles_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateRolesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('roles', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('name')->unique();\n            $table->string('display_name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('roles');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_27_090105_create_campaign.php",
    "content": "<?php\n\nuse App\\Enums\\CampaignVisibility;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCampaign extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('campaign_user');\n        Schema::dropIfExists('campaigns');\n\n        Schema::create('campaigns', function (Blueprint $table) {\n            $table->increments('id');\n\n            $table->string('name');\n            $table->string('slug');\n            $table->string('locale', 5)->nullable();\n\n            $table->string('image', 191)->nullable();\n            $table->longText('entry')->nullable();\n            $table->text('excerpt')->nullable();\n\n            $table->string('header_image')->nullable();\n            $table->string('system', 45)->nullable();\n\n            $table->string('export_path')->nullable();\n            $table->date('export_date')->nullable();\n\n            $table->unsignedTinyInteger('visibility_id')->default(CampaignVisibility::private);\n            $table->boolean('is_featured')->default(false);\n            $table->boolean('entity_visibility')->default(false);\n            $table->unsignedInteger('visible_entity_count')->default(0);\n            $table->boolean('entity_personality_visibility')->default(true);\n\n            $table->text('settings')->nullable();\n            $table->text('default_images')->nullable();\n            $table->text('ui_settings')->nullable();\n\n            $table->unsignedTinyInteger('boost_count')->nullable();\n\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->dateTime('featured_until')->nullable();\n            $table->text('featured_reason')->nullable();\n\n            $table->unsignedInteger('follower')->default(0);\n\n            $table->boolean('is_hidden')->default(0);\n\n            $table->timestamps();\n\n            $table->index(['visibility_id', 'is_featured', 'visible_entity_count', 'featured_until', 'is_hidden'], 'campaigns_idx');\n            $table->index('follower');\n\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();\n        });\n\n        Schema::create('campaign_user', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id')->unsigned();\n            $table->integer('campaign_id')->unsigned();\n            $table->timestamps();\n\n            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('campaign_user');\n        Schema::drop('campaigns');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_27_091125_create_characters.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCharacters extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('characters', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->integer('campaign_id')->unsigned();\n\n            // Overview\n            $table->longText('entry')->nullable();\n            $table->string('title')->nullable();\n            $table->string('type', 45)->nullable();\n\n            // Appearance\n            $table->string('age', 20)->nullable();\n            $table->string('sex', 45)->nullable();\n            $table->string('pronouns', 45)->nullable();\n            $table->string('image')->nullable();\n\n            $table->timestamps();\n\n            $table->boolean('is_private')->default(false);\n            $table->boolean('is_personality_pinned')->default(false);\n            $table->boolean('is_appearance_pinned')->default(false);\n\n            $table->index(['is_private']);\n\n            $table->boolean('is_personality_visible')->default(true);\n            $table->boolean('is_dead')->default(false);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n\n            // Index\n            $table->index(['name']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('characters');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_27_091755_create_families.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateFamilies extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('families', function (Blueprint $table) {\n            $table->increments('id');\n            $table->timestamps();\n\n            $table->string('name');\n            $table->integer('campaign_id')->unsigned();\n\n            $table->integer('family_id')->unsigned()->nullable();\n\n            $table->string('type', 45)->nullable();\n            $table->longText('entry')->nullable();\n\n            $table->string('image')->nullable();\n\n            // Privacy\n            $table->boolean('is_private')->default(false);\n            $table->index(['is_private']);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('family_id')->references('id')->on('families')->onDelete('set null');\n\n            // Indexes\n            $table->index(['name']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('families');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_27_102246_create_locations.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateLocations extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // Cleanup\n        Schema::dropIfExists('location_attributes');\n        Schema::dropIfExists('locations');\n\n        Schema::create('locations', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('type', 45)->nullable();\n            $table->string('image')->nullable();\n            $table->longText('entry')->nullable();\n            $table->integer('parent_location_id')->unsigned()->nullable();\n\n            $table->timestamps();\n\n            $table->integer('campaign_id')->unsigned();\n\n            // Privacy\n            $table->boolean('is_private')->default(false);\n\n            $table->boolean('is_map_private')->default(0);\n\n            // Index\n            $table->index(['name', 'type']);\n            $table->index(['is_private']);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('parent_location_id')->references('id')->on('locations')->nullOnDelete();\n        });\n\n        Schema::create('location_attributes', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('value');\n            $table->integer('location_id')->unsigned();\n            $table->timestamps();\n\n            // Index\n            $table->index(['name']);\n\n            // Foreign\n            $table->foreign('location_id')->references('id')->on('locations')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('location_attributes');\n        Schema::dropIfExists('locations');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_28_091521_update_character_with_location.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateCharacterWithLocation extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->integer('location_id')->unsigned()->nullable();\n            $table->foreign('location_id')->references('id')->on('locations')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->dropForeign('characters_location_id_foreign');\n            $table->dropColumn('location_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_30_010000_create_real_visibilities_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateRealVisibilitiesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if (Schema::hasTable('visibilities')) {\n            return;\n        }\n        Schema::create('visibilities', function (Blueprint $table) {\n            $table->id();\n            $table->string('code', 10);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('visibilities');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_30_010002_create_real_entities_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateRealEntitiesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if (Schema::hasTable('entities')) {\n            return;\n        }\n        Schema::create('entities', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('type_id')->nullable();\n            $table->string('name');\n            $table->boolean('is_private')->default(0);\n            $table->integer('entity_id')->unsigned();\n            $table->integer('campaign_id')->unsigned();\n\n            $table->text('tooltip')->nullable();\n            $table->string('header_image')->nullable();\n\n            $table->boolean('is_template')->nullable();\n            $table->boolean('is_attributes_private')->default(false);\n\n            $table->unsignedSmallInteger('focus_x')->nullable();\n            $table->unsignedSmallInteger('focus_y')->nullable();\n\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n            $table->unsignedInteger('deleted_by')->nullable();\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_id')\n                ->references('id')->on('campaigns')\n                ->cascadeOnDelete();\n\n            $table->foreign('created_by')\n                ->references('id')->on('users')\n                ->nullOnDelete();\n\n            $table->foreign('updated_by')\n                ->references('id')->on('users')\n                ->nullOnDelete();\n\n            $table->index(['name', 'is_private', 'is_template']);\n            $table->index('updated_at');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entities');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_30_160256_create_journal_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateJournalTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('journals', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n\n            $table->unsignedInteger('journal_id')->nullable();\n            $table->string('type')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->date('date')->nullable();\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('author_id')->nullable();\n            $table->unsignedInteger('location_id')->nullable();\n\n            // Overview\n            $table->longText('entry')->nullable();\n\n            $table->timestamps();\n\n            // Privacy\n            $table->boolean('is_private')->default(false);\n            $table->index(['is_private']);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('author_id')->references('id')->on('entities')->nullOnDelete();\n            $table->foreign('location_id')->references('id')->on('locations')->nullOnDelete();\n            $table->foreign('journal_id')->references('id')->on('journals')->nullOnDelete();\n\n            // Index\n            $table->index(['name', 'type', 'date']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('journals');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_30_160311_create_item_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateItemTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('items');\n        Schema::create('items', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('type')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->date('date')->nullable();\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('item_id')->nullable();\n            $table->unsignedInteger('character_id')->nullable();\n            $table->unsignedInteger('location_id')->nullable();\n\n            $table->longText('entry')->nullable();\n\n            $table->string('price')->nullable();\n            $table->string('size')->nullable();\n\n            $table->boolean('is_private')->default(false);\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('location_id')->references('id')->on('locations')->nullOnDelete();\n            $table->foreign('character_id')->references('id')->on('characters')->nullOnDelete();\n            $table->foreign('item_id')->references('id')->on('items')->nullOnDelete();\n\n            // Index\n            $table->index(['name', 'type', 'is_private']);\n            $table->index(['price', 'size'], 'items_price_idx');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('items');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_30_162322_create_family_relations.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateFamilyRelations extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('families', function (Blueprint $table) {\n            $table->integer('location_id')->unsigned()->nullable();\n            $table->foreign('location_id')->references('id')->on('locations')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down() {}\n}\n"
  },
  {
    "path": "database/migrations/2017_10_30_164537_add_character_family.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddCharacterFamily extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->integer('family_id')->unsigned()->nullable();\n            $table->foreign('family_id')->references('id')->on('families')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down() {}\n}\n"
  },
  {
    "path": "database/migrations/2017_10_31_124138_update_user_and_campaign_link.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateUserAndCampaignLink extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->unsignedInteger('last_campaign_id')->nullable();\n\n            $table->string('password')->nullable()->change();\n            $table->string('provider')->nullable();\n            $table->string('provider_id')->nullable();\n\n            $table->string('locale', 5)->default('en');\n\n            $table->string('patreon_pledge', 10)->null();\n\n            $table->unsignedSmallInteger('default_pagination')->notNull()->default('15');\n            $table->string('date_format', 20)->notNull()->default('Y-m-d');\n\n            $table->char('currency', 3)->nullable();\n            $table->unsignedTinyInteger('booster_count')->nullable();\n\n            $table->dateTime('last_login_at')->nullable();\n            $table->boolean('has_last_login_sharing')->default(0);\n\n            $table->string('theme', 20)->nullable();\n            $table->text('profile')->nullable();\n\n            $table->datetime('banned_until')->nullable();\n\n            $table->index(['provider', 'provider_id']);\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropColumn('last_campaign_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_01_222903_create_organisation.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateOrganisation extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('organisations', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('type')->nullable();\n            $table->string('image', 255)->nullable();\n\n            $table->integer('campaign_id')->unsigned();\n            $table->integer('location_id')->unsigned()->nullable();\n            $table->unsignedInteger('organisation_id')->nullable();\n\n            $table->longText('entry')->nullable();\n\n            $table->boolean('is_private')->default(false);\n            $table->boolean('is_defunct')->default(0);\n            $table->timestamps();\n\n            $table->index(['is_private']);\n            $table->index('is_defunct');\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('location_id')->references('id')->on('locations')->nullOnDelete();\n            $table->foreign('organisation_id')->references('id')->on('organisations')->onDelete('set null');\n\n            // Index\n            $table->index(['name', 'type']);\n        });\n\n        Schema::create('organisation_member', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('organisation_id')->unsigned();\n            $table->integer('character_id')->unsigned();\n            $table->string('role', 45)->nullable();\n            $table->boolean('is_private')->default(false);\n\n            $table->unsignedInteger('parent_id')->nullable();\n            $table->unsignedTinyInteger('pin_id')->nullable();\n            $table->unsignedTinyInteger('status_id')->default(0);\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('organisation_id')->references('id')->on('organisations')->cascadeOnDelete();\n            $table->foreign('character_id')->references('id')->on('characters')->cascadeOnDelete();\n            $table->foreign('parent_id')->references('id')->on('organisation_member')->nullOnDelete();\n\n            // Index\n            $table->index(['is_private', 'role']);\n            $table->index('pin_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('organisation_member');\n        Schema::dropIfExists('organisations');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_03_181958_create_notes.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateNotes extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('notes', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('type')->nullable();\n            $table->string('image', 255)->nullable();\n\n            $table->integer('campaign_id')->unsigned();\n            $table->unsignedInteger('note_id')->nullable();\n\n            // Overview\n            $table->longText('entry')->nullable();\n\n            $table->timestamps();\n\n            // Privacy\n            $table->boolean('is_private')->default(false);\n            $table->index(['is_private']);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('note_id')->references('id')->on('notes')->nullOnDelete();\n\n            // Index\n            $table->index(['name', 'type']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('notes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_12_195702_create_invite_tokens.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateInviteTokens extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('campaign_invites', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('campaign_id')->unsigned();\n            $table->integer('created_by')->unsigned()->nullable();\n            $table->string('token', 128);\n            $table->boolean('is_active')->default(true);\n\n            $table->integer('validity')->unsigned()->nullable();\n            // $table->integer('role_id')->unsigned()->nullable();\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            // $table->foreign('role_id')->references('id')->on('campaign_roles')->onDelete('set null');\n\n            $table->index(['token', 'is_active']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('campaign_invites');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_16_145219_create_events.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEvents extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('events', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('type')->nullable();\n            $table->string('date')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->boolean('is_private')->default(false);\n\n            $table->integer('campaign_id')->unsigned();\n            $table->integer('location_id')->unsigned()->nullable();\n            $table->unsignedInteger('event_id')->nullable();\n\n            $table->longText('entry')->nullable();\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('event_id')->references('id')->on('events')->nullOnDelete();\n\n            // Index\n            $table->index(['name', 'type', 'date', 'is_private']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('events');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_16_222319_create_campaign_settings.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCampaignSettings extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('campaign_settings', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('campaign_id')->unsigned();\n            $table->boolean('characters')->default(true);\n            $table->boolean('events')->default(true);\n            $table->boolean('families')->default(true);\n            $table->boolean('items')->default(true);\n            $table->boolean('journals')->default(true);\n            $table->boolean('locations')->default(true);\n            $table->boolean('notes')->default(true);\n            $table->boolean('organisations')->default(true);\n            $table->boolean('menu_links')->default(true);\n            $table->boolean('maps')->default(true);\n            $table->boolean('inventories')->default(true);\n            $table->boolean('entity_attributes')->default(true);\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('campaign_settings');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_22_111255_create_quests.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateQuests extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('quests', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('campaign_id')->unsigned()->nullable();\n            $table->integer('quest_id')->unsigned()->nullable();\n            $table->unsignedInteger('instigator_id')->nullable();\n            $table->string('name');\n            $table->string('type', 45)->nullable();\n            $table->longText('entry')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->boolean('is_private')->default(false);\n            $table->date('date')->nullable();\n            $table->boolean('is_completed')->default(false);\n\n            $table->timestamps();\n\n            // Indexes\n            $table->index(['name', 'is_private']);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('quest_id')->references('id')->on('quests')->nullOnDelete();\n            $table->foreign('instigator_id')->references('id')->on('entities')->nullOnDelete();\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('quests')->default(true);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('quests');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('quests');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_30_113216_create_relations_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateRelationsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('relations');\n        Schema::create('relations', function (Blueprint $table) {\n            $table->increments('id');\n            $table->boolean('is_private')->default(0);\n\n            $table->integer('owner_id')->unsigned();\n            $table->integer('target_id')->unsigned();\n            $table->integer('campaign_id')->unsigned();\n\n            $table->string('relation', 255);\n            $table->string('colour', 6)->nullable();\n            $table->tinyInteger('attitude')->default(0)->nullable();\n\n            $table->boolean('is_pinned')->default(false);\n            $table->integer('created_by')->unsigned()->nullable();\n            $table->integer('updated_by')->unsigned()->nullable();\n\n            $table->unsignedInteger('mirror_id')->nullable();\n            $table->unsignedBigInteger('visibility_id')->default(1);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('owner_id')->references('id')->on('entities')->cascadeOnDelete();\n            $table->foreign('target_id')->references('id')->on('entities')->cascadeOnDelete();\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('mirror_id')->references('id')->on('relations')->nullOnDelete();\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            $table->index(['is_private', 'attitude', 'relation', 'is_pinned']);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('relations');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_01_25_112528_create_attributes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateAttributesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('attributes');\n        Schema::create('attributes', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->text('value', 191)->nullable();\n            $table->string('type', 12)->nullable();\n            $table->boolean('is_private')->default(0);\n            $table->integer('entity_id')->unsigned();\n\n            $table->unsignedSmallInteger('default_order')->null()->default('0');\n            $table->unsignedInteger('origin_attribute_id')->nullable();\n            $table->unsignedTinyInteger('type_id')->default(1);\n\n            $table->boolean('is_pinned')->default(false);\n            $table->string('api_key', 20)->null();\n\n            $table->boolean('is_hidden')->default(false);\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('origin_attribute_id')->references('id')->on('attributes')->onDelete('set null');\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n\n            $table->index(['name', 'is_private', 'is_hidden', 'is_pinned', 'default_order'], 'attributes_idx');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('attributes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_02_14_102646_create_attribute_template.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateAttributeTemplate extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('attribute_templates');\n        Schema::create('attribute_templates', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('campaign_id')->unsigned();\n            $table->unsignedInteger('attribute_template_id')->nullable();\n\n            $table->string('name');\n            $table->boolean('is_private')->default(false);\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('attribute_template_id')->references('id')->on('attribute_templates')->onDelete('set null');\n\n            // Indexes\n            $table->index(['name', 'is_private']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n\n        Schema::dropIfExists('attribute_templates');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_03_02_163640_create_new_acl.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateNewAcl extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // Each campaign can have several custom roles\n        Schema::dropIfExists('campaign_roles');\n        Schema::create('campaign_roles', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->integer('campaign_id')->unsigned();\n\n            $table->boolean('is_admin')->default(false);\n            $table->boolean('is_public')->default(false);\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n\n            // Indexes\n            $table->index(['name']);\n        });\n\n        // Each campaign member can have several roles\n        Schema::dropIfExists('campaign_role_users');\n        Schema::create('campaign_role_users', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('campaign_role_id')->unsigned();\n            $table->integer('user_id')->unsigned();\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_role_id')->references('id')->on('campaign_roles')->onDelete('cascade');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n        });\n\n        // Each role can have default permissions for all the elements\n        Schema::dropIfExists('campaign_permissions');\n        Schema::create('campaign_permissions', function (Blueprint $table) {\n            $table->increments('id');\n\n            // A permission can either be related to a role\n            $table->integer('campaign_role_id')->unsigned()->nullable();\n\n            // Or be related to a user\n            $table->integer('user_id')->unsigned()->nullable();\n\n            // A key is a simple concept that allows us to easily get everything\n            // browse_characters => Allow browsing characters\n            // edit_locations_4 => Allow editing location id 4\n            // $table->string('key', 191);\n\n            // The table name\n            // $table->string('table_name', 191);\n\n            $table->boolean('access')->default(true);\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_role_id')->references('id')->on('campaign_roles')->onDelete('cascade');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n\n            // Indexes\n            // $table->index(['key', 'table_name']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down() {}\n}\n"
  },
  {
    "path": "database/migrations/2018_03_14_152413_create_notifications_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateNotificationsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('notifications', function (Blueprint $table) {\n            $table->char('id', 36)->primary();\n            $table->string('type');\n            $table->morphs('notifiable');\n            $table->text('data');\n            $table->timestamp('read_at')->nullable();\n            $table->timestamps();\n\n            $table->index('read_at');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('notifications');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_04_09_17054701_add_ui_settings_to_ltm_user_locales.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass AddUiSettingsToLtmUserLocales extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        $prefix = Config::get('laravel-translation-manager::config.table_prefix', '');\n        Schema::table($prefix . 'ltm_user_locales', function (Blueprint $table) {\n            $table->dropIndex('ix_ltm_user_locales_user_id');\n\n            $table->unique('user_id', 'ixk_user_id_users_id');\n            $table->text('ui_settings')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        $prefix = Config::get('laravel-translation-manager::config.table_prefix', '');\n        Schema::table($prefix . 'ltm_user_locales', function (Blueprint $table) {\n            $table->dropColumn('ui_settings');\n\n            $table->dropUnique('ixk_user_id_users_id');\n            $table->index(['user_id'], 'ix_ltm_user_locales_user_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_04_16_090159_create_calendar_table.php",
    "content": "<?php\n\nuse App\\Models\\Entity;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCalendarTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('calendars');\n        Schema::create('calendars', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('campaign_id')->unsigned()->nullable();\n            $table->string('name');\n\n            $table->unsignedInteger('calendar_id')->nullable();\n\n            $table->string('type', 45)->nullable();\n            $table->longText('entry')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->boolean('is_private')->default(false);\n\n            // Settings of the calendar\n            $table->text('parameters')->nullable();\n            $table->text('months')->nullable();\n            $table->text('weekdays')->nullable();\n            $table->text('years')->nullable();\n            $table->text('seasons')->nullable();\n            $table->text('epochs')->nullable();\n            $table->text('moons')->nullable();\n            $table->string('date')->nullable();\n            $table->string('suffix')->nullable();\n\n            $table->text('month_aliases')->nullable();\n            $table->text('week_names')->nullable();\n            $table->string('reset', 5)->nullable();\n            $table->boolean('is_incrementing')->default(false);\n\n            // Leap year stuff, single\n            $table->boolean('has_leap_year')->default(false);\n            $table->integer('leap_year_amount')->nullable();\n            $table->tinyInteger('leap_year_month')->unsigned()->nullable();\n            $table->tinyInteger('leap_year_offset')->unsigned()->nullable();\n            $table->tinyInteger('leap_year_start')->unsigned()->nullable();\n\n            $table->unsignedTinyInteger('start_offset')->nullable()->default(0);\n            $table->boolean('skip_year_zero')->default(false);\n\n            $table->timestamps();\n\n            // Indexes\n            $table->index(['name', 'is_private']);\n            $table->index(['is_incrementing']);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n\n            $table->foreign('calendar_id')->references('id')->on('calendars')->onDelete('set null');\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('calendars')->default(true);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('calendars');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('calendars');\n        });\n\n        $entities = Entity::where(['type' => 'calendar'])->get();\n        foreach ($entities as $entity) {\n            $entity->delete();\n        }\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_04_24_075544_create_entity_notes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityNotesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('entity_notes');\n\n        Schema::create('entity_notes', function (Blueprint $table) {\n            $table->increments('id');\n\n            $table->string('name');\n            $table->longText('entry')->nullable();\n            $table->boolean('is_private')->default(0);\n            $table->unsignedInteger('entity_id');\n            $table->unsignedInteger('created_by')->nullable();\n\n            $table->integer('updated_by')->unsigned()->nullable();\n            $table->unsignedBigInteger('visibility_id')->default(1);\n            $table->smallInteger('position');\n\n            $table->text('settings')->nullable();\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            $table->index(['name', 'is_private']);\n            $table->index(['position']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entity_notes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_04_24_124131_create_character_traits_table.php",
    "content": "<?php\n\nuse App\\Models\\CharacterTrait;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCharacterTraitsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('character_traits');\n        Schema::create('character_traits', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('character_id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->string('name');\n            $table->text('entry')->nullable();\n            $table->boolean('is_private')->default(0);\n            $table->unsignedTinyInteger('section_id')->default(CharacterTrait::SECTION_APPEARANCE);\n            $table->unsignedSmallInteger('default_order')->nullable()->default('0');\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('character_id')->references('id')->on('characters')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n\n            $table->index(['name', 'section_id', 'is_private']);\n            $table->index(['default_order']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('character_traits');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_04_24_193803_create_sections_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateSectionsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('tags', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('campaign_id')->unsigned()->nullable();\n            $table->string('name');\n            $table->string('slug')->nullable();\n            $table->string('type', 45)->nullable();\n            $table->string('image', 255)->nullable();\n            $table->longText('entry')->nullable();\n            $table->boolean('is_private')->default(false);\n            $table->string('colour', 20)->nullable();\n\n            $table->unsignedInteger('tag_id')->nullable();\n            $table->boolean('is_hidden')->default(false);\n            $table->boolean('is_auto_applied')->default(0);\n\n            $table->timestamps();\n\n            $table->index(['name', 'type', 'is_private', 'is_hidden', 'is_auto_applied']);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('set null');\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('tags')->default(true);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('tags');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('tags');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_04_30_174331_create_entity_events.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityEvents extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_events', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('calendar_id')->unsigned();\n            $table->integer('entity_id')->unsigned();\n            $table->unsignedInteger('created_by')->nullable();\n            $table->smallInteger('length')->unsigned()->default(1);\n            $table->boolean('is_recurring')->default(false);\n            $table->string('comment')->nullable();\n            $table->string('colour', 12)->nullable();\n            $table->unsignedBigInteger('visibility_id');\n            $table->unsignedMediumInteger('day');\n            $table->unsignedMediumInteger('month');\n            $table->integer('year');\n            $table->string('recurring_until', 12)->nullable();\n            $table->string('recurring_periodicity', 5)->nullable();\n\n            $table->timestamps();\n\n            $table->index(['is_recurring']);\n            $table->index(['day', 'month', 'year']);\n\n            // Foreign\n            $table->foreign('calendar_id')->references('id')->on('calendars')->cascadeOnDelete();\n            $table->foreign('entity_id')->references('id')->on('entities')->cascadeOnDelete();\n            $table->foreign('created_by')->on('users')->references('id')->nullOnDelete();\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entity_events');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_05_19_091532_add_dice_rolls.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddDiceRolls extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('dice_rolls');\n        Schema::create('dice_rolls', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('character_id')->nullable();\n            $table->string('name', 191);\n            $table->string('system', 20)->nullable();\n            $table->text('parameters')->nullable();\n            $table->boolean('is_private')->default(false);\n            $table->timestamps();\n\n            $table->index(['name', 'system', 'is_private']);\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('character_id')->references('id')->on('characters')->onDelete('cascade');\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('dice_rolls')->default(true);\n        });\n\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('dice_rolls');\n\n        DB::statement(\"delete from entities where type = 'dice_roll'\");\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('dice_rolls');\n        });\n\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_05_25_102446_update_campaign_invites.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateCampaignInvites extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('campaign_invites', function (Blueprint $table) {\n            $table->integer('role_id')->unsigned()->nullable();\n            $table->foreign('role_id')->references('id')->on('campaign_roles')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('campaign_invites', function (Blueprint $table) {\n            $table->dropForeign('campaign_invites_role_id_foreign');\n            $table->dropColumn('role_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_05_25_113848_create_dice_roll_results.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateDiceRollResults extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('dice_rolls', function (Blueprint $table) {\n\n            $table->string('image', 255)->nullable();\n        });\n\n        Schema::dropIfExists('dice_roll_results');\n        Schema::create('dice_roll_results', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('dice_roll_id');\n            $table->unsignedInteger('created_by');\n            $table->text('results')->nullable();\n            $table->timestamps();\n\n            $table->foreign('dice_roll_id')->references('id')->on('dice_rolls')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('dice_roll_results');\n\n        Schema::table('dice_rolls', function (Blueprint $table) {\n            $table->text('results')->nullable();\n            $table->unsignedInteger('created_by');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('cascade');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_05_31_121110_create_custom_menu_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCustomMenuTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('menu_links');\n        Schema::create('menu_links', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('entity_id')->nullable();\n            $table->string('name', 100);\n            $table->string('icon', 45)->nullable();\n            $table->boolean('is_private')->default(false);\n\n            $table->string('tab', 20)->nullable();\n            $table->string('filters', 255)->nullable();\n            $table->string('random_entity_type', 30)->nullable();\n            $table->string('menu', 20)->nullable();\n            $table->string('type', 30)->nullable();\n            $table->text('options')->nullable();\n\n            $table->string('parent', 25)->nullable();\n            $table->string('css', 40)->nullable();\n\n            $table->unsignedSmallInteger('position')->default(1);\n            $table->boolean('is_active')->default('1');\n\n            $table->timestamps();\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('entity_id')->references('id')->on('entities')->cascadeOnDelete();\n\n            $table->index(['name', 'position', 'is_active']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('menu_links');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_07_17_131457_create_jobs_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateJobsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('jobs', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('queue')->index();\n            $table->longText('payload');\n            $table->unsignedTinyInteger('attempts');\n            $table->unsignedInteger('reserved_at')->nullable();\n            $table->unsignedInteger('available_at');\n            $table->unsignedInteger('created_at');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('jobs');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_08_15_083901_create_failed_jobs_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateFailedJobsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('failed_jobs', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->text('connection');\n            $table->text('queue');\n            $table->longText('payload');\n            $table->longText('exception');\n            $table->timestamp('failed_at')->useCurrent();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('failed_jobs');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_08_20_174638_create_conversations.php",
    "content": "<?php\n\nuse App\\Enums\\ConversationTarget;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateConversations extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('conversations', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->string('name', 191);\n            $table->string('image', 255)->nullable();\n            $table->string('type', 45)->nullable();\n            $table->unsignedTinyInteger('target_id')\n                ->default(ConversationTarget::users->value);\n\n            $table->boolean('is_private')->default(false);\n            $table->boolean('is_closed')->default(false);\n\n            $table->timestamps();\n\n            $table->index(['name', 'is_private', 'is_closed']);\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::create('conversation_participants', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('conversation_id');\n            $table->unsignedInteger('character_id')->nullable();\n            $table->unsignedInteger('user_id')->nullable();\n            $table->timestamps();\n\n            $table->foreign('conversation_id')->references('id')->on('conversations')->onDelete('cascade');\n            $table->foreign('character_id')->references('id')->on('characters')->onDelete('cascade');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n        });\n\n        Schema::create('conversation_messages', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('conversation_id');\n            $table->unsignedInteger('character_id')->nullable();\n            $table->unsignedInteger('user_id')->nullable();\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->longText('message')->nullable();\n            $table->timestamps();\n\n            $table->foreign('conversation_id')->references('id')->on('conversations')->onDelete('cascade');\n            $table->foreign('character_id')->references('id')->on('characters')->onDelete('set null');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');\n\n            $table->index('created_at');\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('conversations')->default(true);\n        });\n\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('conversation_messages');\n        Schema::dropIfExists('conversation_participants');\n        Schema::dropIfExists('conversations');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('conversations');\n        });\n\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_09_19_121625_add_calendar_date_to_quest_and_journal.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddCalendarDateToQuestAndJournal extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('quests', function (Blueprint $table) {\n            $table->integer('calendar_id')->unsigned()->nullable();\n            $table->smallInteger('calendar_year')->nullable();\n            $table->smallInteger('calendar_month')->nullable();\n            $table->smallInteger('calendar_day')->nullable();\n\n            $table->index(['calendar_year', 'calendar_month', 'calendar_day'], 'quests_calendar_index');\n            $table->foreign('calendar_id')->references('id')->on('calendars')->onDelete('set null');\n        });\n\n        Schema::table('journals', function (Blueprint $table) {\n            $table->integer('calendar_id')->unsigned()->nullable();\n            $table->smallInteger('calendar_year')->nullable();\n            $table->smallInteger('calendar_month')->nullable();\n            $table->smallInteger('calendar_day')->nullable();\n\n            $table->index(['calendar_year', 'calendar_month', 'calendar_day'], 'journals_calendar_index');\n            $table->foreign('calendar_id')->references('id')->on('calendars')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n\n        Schema::table('quests', function (Blueprint $table) {\n            $table->dropIndex('quests_calendar_index');\n            $table->dropColumn('calendar_id');\n            $table->dropColumn('calendar_year');\n            $table->dropColumn('calendar_month');\n            $table->dropColumn('calendar_day');\n        });\n\n        Schema::table('journals', function (Blueprint $table) {\n            $table->dropIndex('journals_calendar_index');\n            $table->dropColumn('calendar_id');\n            $table->dropColumn('calendar_year');\n            $table->dropColumn('calendar_month');\n            $table->dropColumn('calendar_day');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_09_25_134530_create_race.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateRace extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('races');\n\n        Schema::create('races', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->string('name', 191);\n            $table->unsignedInteger('race_id')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->string('type', 45)->nullable();\n            $table->longText('entry')->nullable();\n            $table->boolean('is_private')->default(false);\n            $table->timestamps();\n\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->index(['name', 'type', 'is_private']);\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('race_id')->references('id')->on('races')->onDelete('set null');\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('races')->default(true);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('races');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('races');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_10_17_130533_create_entity_categories.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityCategories extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('entity_tags');\n\n        Schema::create('entity_tags', function (Blueprint $table) {\n            $table->increments('id');\n            //            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('entity_id');\n            $table->unsignedInteger('tag_id');\n            $table->timestamps();\n\n            //            $table->unsignedInteger('created_by')->nullable();\n            //            $table->unsignedInteger('updated_by')->nullable();\n\n            //            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            //            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            //            $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entity_tags');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_10_23_124704_create_entity_files.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityFiles extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        return;\n        Schema::dropIfExists('entity_files');\n        Schema::create('entity_files', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name', 45);\n            $table->string('type', 20);\n            $table->string('path', 191);\n            $table->integer('size')->unsigned();\n            $table->boolean('is_private')->default(0);\n\n            $table->unsignedInteger('entity_id');\n            $table->unsignedInteger('created_by')->nullable();\n\n            $table->unsignedBigInteger('visibility_id')->default(1);\n            $table->timestamps();\n\n            $table->foreign('entity_id')->references('id')->on('entities')->cascadeOnDelete();\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            $table->index(['name', 'is_private', 'type']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down() {}\n}\n"
  },
  {
    "path": "database/migrations/2018_11_28_125839_add_campaign_dashboard_calendar.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddCampaignDashboardCalendar extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('campaign_dashboard_widgets', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('campaign_id')->unsigned();\n\n            $table->unsignedInteger('entity_id')->nullable();\n            $table->text('config')->nullable();\n            $table->unsignedTinyInteger('position');\n\n            $table->string('widget', 12);\n            $table->unsignedTinyInteger('width')->default(0);\n\n            $table->timestamps();\n\n            $table->index(['campaign_id', 'position']);\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('campaign_dashboard_widgets');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_12_06_222045_add_campaign_permission_entity_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddCampaignPermissionEntityId extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('campaign_permissions', function (Blueprint $table) {\n            $table->unsignedInteger('entity_id')->nullable()->default(null);\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('campaign_permissions', function (Blueprint $table) {\n            $table->dropForeign('campaign_permissions_entity_id_foreign');\n            $table->dropColumn('entity_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_01_24_182847_create_entity_mentions.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityMentions extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_mentions', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('entity_id')->nullable();\n            $table->integer('entity_note_id')->unsigned()->nullable();\n            $table->integer('campaign_id')->unsigned()->nullable();\n            $table->unsignedInteger('target_id');\n            $table->timestamps();\n\n            // If we delete the entity or target, remove mentions\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('target_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('entity_note_id')->references('id')->on('entity_notes')->onDelete('cascade');\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('entity_mentions');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_02_22_083247_create_entity_log.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityLog extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_logs', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('entity_id');\n            $table->unsignedInteger('impersonated_by')->nullable();\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedTinyInteger('action')->default(1);\n            $table->mediumText('changes')->nullable();\n            $table->timestamps();\n\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('impersonated_by')->references('id')->on('users')->onDelete('set null');\n\n            $table->index(['action', 'created_at']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entity_logs');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_04_11_134145_create_entity_inventory.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityInventory extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('inventories', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('entity_id');\n            $table->unsignedInteger('item_id')->nullable();\n            $table->string('name', 45)->nullable();\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('amount')->nullable();\n            $table->string('position')->nullable();\n            $table->unsignedBigInteger('visibility_id')->default(1);\n\n            $table->text('description')->nullable();\n\n            $table->boolean('copy_item_entry')->nullable()->default(false);\n            $table->boolean('is_equipped')->default(false);\n            $table->timestamps();\n\n            // Index\n            $table->index(['position']);\n\n            // If we delete the entity or target, remove mentions\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('item_id')->references('id')->on('items')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('inventories');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_05_03_000001_create_customer_columns.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->string('stripe_id')->nullable()->index();\n            $table->string('pm_type')->nullable();\n            $table->string('pm_last_four', 4)->nullable();\n            $table->timestamp('trial_ends_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropColumn([\n                'stripe_id',\n                'pm_type',\n                'pm_last_four',\n                'trial_ends_at',\n            ]);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2019_05_03_000002_create_subscriptions_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('subscriptions', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('user_id');\n            $table->string('name');\n            $table->string('stripe_id')->unique();\n            $table->string('stripe_status');\n            $table->string('stripe_price')->nullable();\n            $table->integer('quantity')->nullable();\n            $table->timestamp('trial_ends_at')->nullable();\n            $table->timestamp('ends_at')->nullable();\n            $table->timestamps();\n\n            $table->index(['user_id', 'stripe_status']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('subscriptions');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2019_05_03_000003_create_subscription_items_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('subscription_items', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('subscription_id');\n            $table->string('stripe_id')->unique();\n            $table->string('stripe_product');\n            $table->string('stripe_price');\n            $table->integer('quantity')->nullable();\n            $table->timestamps();\n\n            $table->index(['subscription_id', 'stripe_price']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('subscription_items');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2019_05_10_072500_create_entities.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntities extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_types', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('code', 45);\n            $table->boolean('is_special')->default(false);\n            $table->boolean('is_enabled')->default(true);\n            $table->unsignedTinyInteger('position')->default(0);\n\n            $table->timestamps();\n\n            $table->index(['position', 'is_enabled', 'is_special']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('entity_types');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_05_23_130252_update_attribute_templates_add_entity_type_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateAttributeTemplatesAddEntityTypeId extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('attribute_templates', function (Blueprint $table) {\n            $table->unsignedInteger('entity_type_id')->nullable();\n            $table->foreign('entity_type_id')->references('id')->on('entity_types')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('attribute_templates', function (Blueprint $table) {\n            $table->dropColumn('entity_type_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_08_15_152154_create_campaign_follow.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCampaignFollow extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('campaign_followers', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('user_id');\n            $table->unsignedInteger('campaign_id');\n            $table->timestamps();\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('campaign_followers');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_10_02_131224_create_campaign_boosts.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCampaignBoosts extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('campaign_boosts', function (Blueprint $table) {\n            $table->increments('id');\n            $table->timestamps();\n            $table->softDeletes();\n\n            $table->unsignedInteger('user_id');\n            $table->unsignedInteger('campaign_id');\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('campaign_boosts');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_10_02_191220_custom_patreon.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CustomPatreon extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('themes', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name', 45);\n\n            $table->timestamps();\n            $table->softDeletes();\n        });\n\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->unsignedInteger('theme_id')->nullable();\n\n            $table->foreign('theme_id')->references('id')->on('themes')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn('theme_id');\n        });\n\n        Schema::drop('themes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_01_20_084615_create_calendar_weather.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCalendarWeather extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('calendar_weather', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('calendar_id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->string('weather', 20);\n            $table->string('temperature', 45)->nullable();\n            $table->string('precipitation', 45)->nullable();\n            $table->string('wind', 45)->nullable();\n            $table->string('effect', 45)->nullable();\n            $table->string('name', 40)->nullable();\n            $table->unsignedBigInteger('visibility_id')->default(1);\n\n            $table->unsignedMediumInteger('day');\n            $table->unsignedMediumInteger('month');\n            $table->integer('year');\n            $table->timestamps();\n\n            $table->index(['day', 'month', 'year']);\n\n            $table->foreign('calendar_id')->references('id')->on('calendars')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('calendar_weather');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_05_174449_create_abilities_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateAbilitiesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('abilities');\n\n        Schema::create('abilities', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('type')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->unsignedInteger('campaign_id');\n            //            $table->unsignedInteger('character_id')->nullable();\n            //            $table->unsignedInteger('location_id')->nullable();\n            $table->unsignedInteger('ability_id')->nullable();\n            $table->boolean('is_private')->default(false);\n\n            // Overview\n            $table->longText('entry')->nullable();\n            $table->string('charges', 120)->nullable();\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('ability_id')->references('id')->on('abilities')->onDelete('cascade');\n\n            // Index\n            $table->index(['name', 'type']);\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('abilities')->default(true);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('abilities');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('abilities');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_05_221303_create_entity_abilities.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityAbilities extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_abilities', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('entity_id');\n            $table->unsignedInteger('ability_id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedTinyInteger('position')->default(0);\n            $table->unsignedBigInteger('visibility_id')->default(1);\n            $table->text('note')->nullable();\n            $table->tinyInteger('charges')->nullable();\n            $table->timestamps();\n\n            // If we delete the entity or target, remove mentions\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('ability_id')->references('id')->on('abilities')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            $table->index(['position']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('entity_abilities');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_25_192753_add_soft_deletes.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddSoftDeletes extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        $tables = [\n            'entities',\n            'characters',\n            'families',\n            'locations',\n            'organisations',\n            'items',\n            'notes',\n            'events',\n            'calendars',\n            'races',\n            'quests',\n            'journals',\n            'tags',\n            'dice_rolls',\n            'conversations',\n            'attribute_templates',\n            'abilities',\n        ];\n\n        foreach ($tables as $tableName) {\n            Schema::table($tableName, function (Blueprint $table) {\n                $table->softDeletes();\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down() {}\n}\n"
  },
  {
    "path": "database/migrations/2020_04_10_121227_create_discord.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateDiscord extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('user_apps', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('app', 20);\n            $table->integer('user_id')->unsigned();\n            $table->string('access_token');\n            $table->string('refresh_token');\n            $table->dateTime('expires_at');\n            $table->string('identifier', 45)->nullable();\n            $table->text('settings')->nullable();\n\n            $table->timestamps();\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('user_apps');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_04_29_175303_subscription_bills.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass SubscriptionBills extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('subscription_sources', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('charge_id', 45)->nullable();\n            $table->string('source_id', 45);\n            $table->string('tier', 12);\n            $table->string('period', 10);\n            $table->string('method', 10);\n            $table->unsignedInteger('user_id');\n            $table->string('status', 12); // pending, charged, failed\n            $table->timestamps();\n\n            $table->index(['source_id', 'charge_id', 'status']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('subscription_sources');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_05_08_065550_create_images.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateImages extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('images');\n        Schema::create('images', function (Blueprint $table) {\n            $table->char('id', 36);\n            $table->unsignedInteger('campaign_id');\n            $table->string('name', 45)->nullable();\n            $table->string('ext', 4)->nullable();\n            $table->integer('size')->nullable();\n\n            $table->unsignedInteger('created_by')->nullable();\n            $table->boolean('is_default')->default(false);\n\n            $table->unsignedBigInteger('visibility_id')->default(1);\n\n            $table->timestamps();\n\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            $table->unique('id');\n\n            $table->index(['is_default']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('images');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_05_10_122725_update_dashboard_widgets_add_tags.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateDashboardWidgetsAddTags extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('campaign_dashboard_widget_tags', function (Blueprint $table) {\n            $table->unsignedInteger('widget_id');\n            $table->unsignedInteger('tag_id');\n\n            $table->foreign('widget_id')->references('id')->on('campaign_dashboard_widgets')->onDelete('cascade');\n            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');\n\n            $table->unique(['widget_id', 'tag_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('campaign_dashboard_widget_tags', function (Blueprint $table) {});\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_06_02_103227_create_sessions_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateSessionsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sessions', function (Blueprint $table) {\n            $table->string('id')->unique();\n            $table->unsignedBigInteger('user_id')->nullable();\n            $table->string('ip_address', 45)->nullable();\n            $table->text('user_agent')->nullable();\n            $table->text('payload');\n            $table->integer('last_activity');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sessions');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_06_06_084917_create_maps_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateMapsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('maps', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('location_id')->nullable();\n\n            $table->string('name');\n            $table->string('type')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->unsignedSmallInteger('width')->nullable();\n            $table->unsignedSmallInteger('height')->nullable();\n            $table->unsignedInteger('map_id')->nullable();\n            $table->boolean('is_private')->default(false);\n            $table->boolean('is_real')->default(false);\n\n            // Overview\n            $table->longText('entry')->nullable();\n            $table->text('config')->nullable();\n\n            $table->float('center_x')->nullable();\n            $table->float('center_y')->nullable();\n\n            $table->smallInteger('min_zoom')->nullable();\n            $table->smallInteger('max_zoom')->nullable();\n            $table->smallInteger('initial_zoom')->nullable();\n\n            $table->unsignedSmallInteger('grid')->nullable();\n\n            $table->timestamps();\n            $table->softDeletes();\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('map_id')->references('id')->on('maps')->onDelete('set null');\n            $table->foreign('location_id')->references('id')->on('locations')->onDelete('set null');\n\n            // Index\n            $table->index(['name', 'type']);\n        });\n\n        Schema::create('map_layers', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('map_id');\n            $table->unsignedInteger('created_by')->nullable();\n\n            $table->string('name');\n            $table->unsignedSmallInteger('position')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->unsignedSmallInteger('width')->nullable();\n            $table->unsignedSmallInteger('height')->nullable();\n\n            // Overview\n            $table->longText('entry')->nullable();\n\n            $table->unsignedBigInteger('visibility_id')->default(1);\n\n            $table->boolean('is_shown')->default(true);\n\n            $table->unsignedTinyInteger('type_id')->nullable();\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('map_id')->references('id')->on('maps')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            // Index\n            $table->index(['name', 'position']);\n        });\n\n        Schema::create('map_markers', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('map_id');\n            $table->unsignedInteger('entity_id')->nullable();\n            $table->unsignedSmallInteger('pin_size')->nullable();\n\n            $table->string('name')->nullable();\n            $table->longText('entry')->nullable();\n\n            $table->float('longitude');\n            $table->float('latitude');\n            $table->string('colour', 7)->nullable();\n            $table->unsignedTinyInteger('shape_id')->default(1);\n            $table->unsignedTinyInteger('size_id')->default(1);\n            $table->string('icon', 20)->nullable();\n\n            $table->text('custom_icon')->nullable();\n            $table->text('custom_shape')->nullable();\n            $table->boolean('is_draggable')->default(0);\n\n            $table->unsignedInteger('created_by')->nullable();\n\n            $table->unsignedBigInteger('visibility_id')->default(1);\n            $table->string('font_colour', 7)->nullable();\n\n            $table->smallInteger('circle_radius')->unsigned()->nullable();\n            $table->text('polygon_style')->nullable();\n\n            $table->tinyInteger('opacity')->nullable();\n            $table->unsignedTinyInteger('chunking_status')->nullable();\n\n            $table->text('config')->nullable();\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('map_id')->references('id')->on('maps')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            // Index\n            $table->index(['name']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('map_markers');\n        Schema::drop('map_layers');\n        Schema::drop('maps');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_07_24_160310_add_map_groups.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddMapGroups extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('map_groups', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('map_id');\n            $table->unsignedInteger('created_by')->nullable();\n\n            $table->string('name');\n            $table->unsignedSmallInteger('position')->nullable();\n\n            $table->unsignedBigInteger('visibility_id')->default(1);\n            $table->boolean('is_shown')->default(0);\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('map_id')->references('id')->on('maps')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            // Index\n            $table->index(['name', 'position']);\n        });\n\n        Schema::table('map_markers', function (Blueprint $table) {\n            $table->unsignedBigInteger('group_id')->nullable();\n            $table->foreign('group_id')->references('id')->on('map_groups')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('map_groups');\n\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_08_02_125607_create_app_updates_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateAppUpdatesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('releases');\n        Schema::create('releases', function (Blueprint $table) {\n            $table->increments('id');\n            $table->dateTime('published_at');\n            $table->dateTime('end_at')->nullable();\n            $table->string('name', 255);\n            $table->string('excerpt', 255);\n            $table->string('link', 255);\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedTinyInteger('category_id')->default(1);\n            $table->timestamps();\n\n            $table->foreign('created_by')->references('id')->on('users');\n\n            $table->index(['published_at', 'end_at']);\n            $table->index(['category_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('releases');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_08_03_155441_create_timelines_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateTimelinesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('timeline_eras');\n        Schema::dropIfExists('timelines');\n\n        Schema::create('timelines', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('timeline_id')->nullable();\n\n            $table->string('name');\n            $table->string('type')->nullable();\n            $table->string('image', 255)->nullable();\n            $table->unsignedInteger('calendar_id')->nullable();\n            $table->boolean('is_private')->default(false);\n\n            // Overview\n            $table->longText('entry')->nullable();\n\n            $table->boolean('revert_order')->default(false);\n\n            $table->timestamps();\n            $table->softDeletes();\n\n            // Foreign\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('calendar_id')->references('id')->on('calendars')->onDelete('set null');\n            $table->foreign('timeline_id')->references('id')->on('timelines')->onDelete('set null');\n\n            // Index\n            $table->index(['name', 'type']);\n        });\n\n        Schema::create('timeline_eras', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('timeline_id');\n            $table->unsignedInteger('created_by')->nullable();\n\n            $table->string('name');\n            $table->string('abbreviation')->nullable();\n            $table->integer('start_year')->nullable();\n            $table->integer('end_year')->nullable();\n\n            // Overview\n            $table->longText('entry')->nullable();\n            $table->boolean('is_collapsed')->default(false);\n\n            $table->unsignedTinyInteger('position')->nullable();\n\n            $table->timestamps();\n\n            // Foreign\n            $table->foreign('timeline_id')->references('id')->on('timelines')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n\n            // Index\n            $table->index(['name', 'start_year', 'position']);\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('timelines')->default(true);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('timeline_eras');\n        Schema::drop('timelines');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('timelines');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_08_04_095517_create_timeline_elements.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateTimelineElements extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('timeline_elements', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('timeline_id');\n            $table->unsignedBigInteger('era_id');\n            $table->unsignedInteger('entity_id')->nullable();\n            $table->unsignedInteger('position');\n            $table->string('name', 191)->nullable();\n            $table->string('date', 45)->nullable();\n            $table->mediumText('entry')->nullable();\n            $table->string('colour', 10)->default('grey');\n            $table->timestamps();\n            $table->unsignedInteger('created_by')->nullable();\n\n            $table->unsignedBigInteger('visibility_id')->default(1);\n\n            $table->text('icon')->nullable();\n\n            $table->boolean('use_event_date')->default(false);\n            $table->boolean('is_collapsed')->default(false);\n            $table->boolean('use_entity_entry')->default(false);\n\n            $table->index('position');\n\n            $table->foreign('timeline_id')->references('id')->on('timelines')->onDelete('cascade');\n            $table->foreign('era_id')->references('id')->on('timeline_eras')->onDelete('cascade');\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('timeline_elements');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_08_10_172320_update_entity_events_add_type.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateEntityEventsAddType extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_event_types', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name', 20);\n        });\n\n        Schema::table('entity_events', function (Blueprint $table) {\n            $table->unsignedInteger('type_id')->nullable();\n            $table->foreign('type_id')->references('id')->on('entity_event_types')->onDelete('cascade');\n            $table->unsignedInteger('elapsed')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entity_events', function (Blueprint $table) {\n            $table->dropColumn('type_id');\n            $table->dropColumn('elapsed');\n        });\n        Schema::drop('entity_event_types');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_09_10_140424_add_entity_image_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddEntityImageId extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->char('image_uuid', 36)->nullable();\n            $table->char('header_uuid', 36)->nullable();\n\n            $table->foreign('image_uuid')->references('id')->on('images')->nullOnDelete();\n            $table->foreign('header_uuid')->references('id')->on('images')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropForeign('entities_image_uuid_foreign');\n            $table->dropColumn('image_uuid');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_09_22_115919_create_referral_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateReferralTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('referrals', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('code', 45)->unique();\n            $table->boolean('is_valid');\n            $table->unsignedInteger('user_id')->nullable();\n            $table->timestamps();\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::table('users', function (Blueprint $table) {\n            $table->unsignedBigInteger('referral_id')->nullable();\n\n            $table->foreign('referral_id')->references('id')->on('referrals')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropForeign('users_referral_id_foreign');\n            $table->dropColumn('referral_id');\n        });\n        Schema::dropIfExists('referrals');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_11_07_083605_create_campaign_dashboards.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCampaignDashboards extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('campaign_dashboards', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('created_by')->nullable();\n\n            $table->string('name', 100);\n\n            $table->index(['campaign_id', 'name']);\n            $table->timestamps();\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::create('campaign_dashboard_roles', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedBigInteger('campaign_dashboard_id');\n            $table->unsignedInteger('campaign_role_id');\n            $table->boolean('is_default')->default(false);\n            $table->boolean('is_visible')->default(false);\n\n            $table->index(['is_default']);\n            $table->timestamps();\n\n            $table->foreign('campaign_dashboard_id')->references('id')->on('campaign_dashboards')->onDelete('cascade');\n            $table->foreign('campaign_role_id')->references('id')->on('campaign_roles')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('campaign_dashboard_roles');\n        Schema::dropIfExists('campaign_dashboards');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_11_07_095122_update_campaign_widgets_add_dashboard_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateCampaignWidgetsAddDashboardId extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('campaign_dashboard_widgets', function (Blueprint $table) {\n            $table->unsignedBigInteger('dashboard_id')->nullable();\n\n            $table->foreign('dashboard_id')->references('id')->on('campaign_dashboards')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('campaign_dashboard_widgets', function (Blueprint $table) {\n            $table->dropForeign('campaign_dashboard_widgets_dashboard_id_foreign');\n            $table->dropColumn('dashboard_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_12_12_191426_create_entity_note_permissions.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityNotePermissions extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_note_permissions', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->timestamps();\n\n            $table->unsignedInteger('entity_note_id');\n            $table->unsignedInteger('user_id')->nullable();\n            $table->unsignedInteger('role_id')->nullable();\n\n            $table->tinyInteger('permission');\n\n            $table->foreign('entity_note_id')->references('id')->on('entity_notes')->onDelete('cascade');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n            $table->foreign('role_id')->references('id')->on('campaign_roles')->onDelete('cascade');\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entity_note_permissions');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_01_03_231138_create_table_entity_links.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateTableEntityLinks extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_links', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('entity_id');\n            $table->string('name', 45);\n            $table->string('icon', 45);\n            $table->unsignedTinyInteger('position')->default(0);\n            $table->text('url');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedBigInteger('visibility_id')->default(1);\n            $table->timestamps();\n\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n\n            $table->index(['position']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entity_links');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_01_18_184615_create_campaign_gallery_folders.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCampaignGalleryFolders extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n\n        Schema::table('images', function (Blueprint $table) {\n            $table->char('folder_id', 36)->nullable();\n            $table->boolean('is_folder')->default(false);\n            $table->foreign('folder_id')->references('id')->on('images')->onDelete('cascade');\n\n            $table->index('is_folder');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('images', function (Blueprint $table) {\n            $table->dropForeign('images_folder_id_foreign');\n            $table->dropColumn('folder_id');\n            $table->dropColumn('is_folder');\n        });\n        // Schema::dropIfExists('image_folders');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_01_29_003755_update_menu_links_dashboard_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateMenuLinksDashboardId extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('menu_links', function (Blueprint $table) {\n            $table->unsignedBigInteger('dashboard_id')->nullable();\n\n            $table->foreign('dashboard_id')->references('id')->on('campaign_dashboards')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('menu_links', function (Blueprint $table) {\n            $table->dropForeign('menu_links_dashboard_id_foreign');\n            $table->dropColumn('dashboard_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_01_30_233554_create_campaign_submissions.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCampaignSubmissions extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->boolean('is_open')->default(false);\n            $table->index(['is_open']);\n        });\n\n        Schema::create('campaign_submissions', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n\n            $table->unsignedInteger('user_id');\n            $table->unsignedInteger('campaign_id');\n            $table->text('text');\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('campaign_submissions');\n\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropIndex('campaigns_is_open_index');\n            $table->dropColumn('is_open');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_04_07_230722_update_entities_add_marketplace_entity_uuid.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateEntitiesAddMarketplaceEntityUuid extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->char('marketplace_uuid', 36)->nullable();\n            $table->index('marketplace_uuid');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropColumn('marketplace_uuid');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_04_11_202656_update_relations_add_marketplace_uuid.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateRelationsAddMarketplaceUuid extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('relations', function (Blueprint $table) {\n            $table->char('marketplace_uuid', 36)->nullable();\n            $table->index('marketplace_uuid');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('relations', function (Blueprint $table) {\n            $table->dropColumn('marketplace_uuid');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_04_20_201015_create_quest_elements_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateQuestElementsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('quest_elements', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n\n            $table->integer('quest_id')->unsigned();\n            $table->integer('entity_id')->unsigned()->nullable();\n            $table->string('name', 100)->nullable();\n            $table->integer('created_by')->unsigned()->nullable();\n\n            $table->string('role', 191)->nullable();\n            $table->longText('description')->nullable();\n            $table->unsignedBigInteger('visibility_id')->default(1);\n            $table->string('colour', 10)->nullable();\n\n            $table->foreign('quest_id')->references('id')->on('quests')->onDelete('cascade');\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('quest_elements');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_05_25_125309_update_maps_center_marker.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateMapsCenterMarker extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('maps', function (Blueprint $table) {\n            $table->unsignedBigInteger('center_marker_id')->nullable();\n            $table->foreign('center_marker_id')->references('id')->on('map_markers')->nullable()->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('maps', function (Blueprint $table) {\n            $table->dropForeign('maps_center_marker_id_foreign');\n            $table->dropColumn('center_marker_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_07_19_095244_update_entity_notes_marketplace_uuid.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateEntityNotesMarketplaceUuid extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('entity_notes', function (Blueprint $table) {\n            $table->char('marketplace_uuid', 36)->nullable();\n            $table->index('marketplace_uuid');\n            $table->unsignedInteger('location_id')->nullable();\n\n            $table->foreign('location_id')->references('id')->on('locations')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entity_notes', function (Blueprint $table) {\n            $table->dropColumn('marketplace_uuid');\n            $table->dropColumn('location_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_09_24_175239_create_entity_user_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityUserTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('entity_user', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n\n            $table->tinyInteger('type_id');\n\n            $table->unsignedInteger('user_id');\n            $table->unsignedInteger('entity_id');\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n\n            $table->index(['type_id', 'updated_at']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entity_user');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_09_27_173618_create_campaign_styles_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCampaignStylesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('campaign_styles', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n\n            $table->unsignedInteger('campaign_id');\n            $table->string('name', 45);\n            $table->text('content');\n            $table->boolean('is_enabled');\n            $table->softDeletes();\n\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedTinyInteger('order')->nullable();\n            $table->index(['order', 'is_enabled']);\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('campaign_styles');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_10_19_151149_create_menu_link_tags_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateMenuLinkTagsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('menu_link_tag', function (Blueprint $table) {\n            $table->unsignedInteger('menu_link_id');\n            $table->unsignedInteger('tag_id');\n\n            $table->foreign('menu_link_id')->references('id')->on('menu_links')->onDelete('cascade');\n            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');\n\n            $table->unique(['menu_link_id', 'tag_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('menu_link_tag');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_11_19_031558_create_user_role_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateUserRoleTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if (Schema::hasTable('user_roles')) {\n            return;\n        }\n        Schema::create('user_roles', function (Blueprint $table) {\n            $table->unsignedInteger('user_id');\n            $table->unsignedBigInteger('role_id');\n\n            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();\n            $table->foreign('role_id')->references('id')->on('roles')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('user_roles');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_11_19_034012_update_entities_add_type_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateEntitiesAddTypeId extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            if (! app()->environment('testing') && ! Schema::hasColumn('entities', 'type_id')) {\n                $table->unsignedInteger('type_id')->after('type')->nullable();\n            }\n            $table->foreign('type_id')->references('id')->on('entity_types')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropColumn('type_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_02_212212_add_character_race_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddCharacterRaceTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('character_race', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('character_id');\n            $table->unsignedInteger('race_id');\n            $table->timestamps();\n\n            $table->foreign('character_id')->references('id')->on('characters')->cascadeOnDelete();\n            $table->foreign('race_id')->references('id')->on('races')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down() {}\n}\n"
  },
  {
    "path": "database/migrations/2022_01_23_023952_create_entity_aliases_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityAliasesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('entity_aliases');\n        Schema::create('entity_aliases', function (Blueprint $table) {\n            $table->id();\n\n            $table->unsignedInteger('entity_id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->bigInteger('visibility_id')->unsigned();\n            $table->string('name', 191);\n            $table->timestamps();\n\n            $table->index(['name']);\n            $table->foreign('entity_id')->references('id')->on('entities')->cascadeOnDelete();\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('entity_aliases');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_03_07_224142_create_character_families_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCharacterFamiliesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('character_family', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('character_id');\n            $table->unsignedInteger('family_id');\n            $table->timestamps();\n\n            $table->foreign('character_id')->references('id')->on('characters')->cascadeOnDelete();\n            $table->foreign('family_id')->references('id')->on('families')->cascadeOnDelete();\n        });\n\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('character_family');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_04_27_194610_update_campaign_permissions_perf.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateCampaignPermissionsPerf extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('campaign_permissions', function (Blueprint $table) {\n            $table->unsignedInteger('campaign_id')->after('user_id')->nullable();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n\n            $table->unsignedTinyInteger('action')->after('campaign_id');\n            $table->unsignedInteger('misc_id')->nullable()->after('entity_id');\n\n            $table->unsignedInteger('entity_type_id')->after('action')->nullable();\n            $table->foreign('entity_type_id')->references('id')->on('entity_types')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('campaign_permissions', function (Blueprint $table) {\n            $table->dropForeign('campaign_permissions_campaign_id_foreign');\n            $table->dropColumn('campaign_id');\n            $table->dropForeign('campaign_permissions_entity_type_id_foreign');\n            $table->dropColumn('entity_type_id');\n            $table->dropColumn('action');\n            $table->dropColumn('misc_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_05_06_151813_update_users_add_card_expiration.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateUsersAddCardExpiration extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $field = 'pm_last_four';\n            if (Schema::hasColumn('users', 'card_brand')) {\n                $field = 'card_last_four';\n            }\n            $table->dateTime('card_expires_at')->after($field)->nullable();\n            $table->index(['card_expires_at'], 'idx_card_expires_at');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropIndex('idx_card_expires_at');\n            $table->dropColumn('card_expires_at');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_06_07_172445_update_maps_add_clustering_toggle.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateMapsAddClusteringToggle extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('maps', function (Blueprint $table) {\n            $table->boolean('has_clustering')->default(true);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('maps', function (Blueprint $table) {\n            $table->dropColumn('has_clustering');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_06_23_154301_create_entity_assets_table.php",
    "content": "<?php\n\nuse App\\Enums\\EntityAssetType;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateEntityAssetsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // Since mentions target aliases, we need to first improve aliases, and rename it, to keep IDs.\n        Schema::table('entity_aliases', function (Blueprint $table) {\n            $table->unsignedTinyInteger('type_id')->after('entity_id');\n            $table->text('metadata')->after('name')->nullable();\n            $table->unsignedSmallInteger('position')->nullable();\n            $table->boolean('is_pinned')->default(0);\n\n            $table->index(['type_id', 'is_pinned']);\n        });\n\n        DB::update('update entity_aliases set type_id = ' . EntityAssetType::alias->value);\n\n        Schema::rename('entity_aliases', 'entity_assets');\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::rename('entity_assets', 'entity_aliases');\n\n        Schema::table('entity_aliases', function (Blueprint $table) {\n            $table->dropIndex(['type_id']);\n            $table->dropColumn('metadata');\n            $table->dropColumn('position');\n            $table->dropColumn('type_id');\n        });\n\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_08_23_005328_add_race_location_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddRaceLocationTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('race_location', function (Blueprint $table) {\n\n            $table->unsignedInteger('race_id');\n            $table->unsignedInteger('location_id');\n\n            $table->foreign('race_id')->references('id')->on('races')->cascadeOnDelete();\n            $table->foreign('location_id')->references('id')->on('locations')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('race_location');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_09_02_191341_create_password_securities_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePasswordSecuritiesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('password_securities', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id');\n            $table->boolean('google2fa_enable')->default(false);\n            $table->string('google2fa_secret')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('password_securities');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_09_21_231900_refactor_user_patreon.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass RefactorUserPatreon extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->string('patreon_pledge', 10)->nullable()->change();\n        });\n        Schema::table('users', function (Blueprint $table) {\n            $table->renameColumn('patreon_pledge', 'pledge');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->string('pledge', 10)->nullable(false)->change();\n            $table->renameColumn('pledge', 'patreon_pledge');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_10_20_192238_create_creatures_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('creatures');\n\n        Schema::create('creatures', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('creature_id')->nullable();\n            $table->string('name', 191);\n            $table->string('image', 255)->nullable();\n            $table->string('type', 45)->nullable();\n            $table->longText('entry')->nullable();\n            $table->boolean('is_private')->default(false);\n            $table->timestamps();\n            $table->softDeletes();\n\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->index(['name', 'type', 'is_private']);\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('creature_id')->references('id')->on('creatures')->onDelete('set null');\n        });\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('creatures')->default(true);\n        });\n\n        Schema::create('creature_location', function (Blueprint $table) {\n\n            $table->unsignedInteger('creature_id');\n            $table->unsignedInteger('location_id');\n\n            $table->foreign('creature_id')->references('id')->on('creatures')->cascadeOnDelete();\n            $table->foreign('location_id')->references('id')->on('locations')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('creature_location');\n        Schema::dropIfExists('creatures');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('creatures');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2022_11_01_214611_update_entity_user_add_campaign_id_post_id_timeline_element_id_quest_element_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('entity_user', function (Blueprint $table) {\n\n            $table->unsignedInteger('campaign_id')->nullable();\n            $table->unsignedInteger('post_id')->nullable();\n            $table->unsignedBigInteger('timeline_element_id')->nullable();\n            $table->unsignedBigInteger('quest_element_id')->nullable();\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('post_id')->references('id')->on('entity_notes')->onDelete('cascade');\n            $table->foreign('timeline_element_id')->references('id')->on('timeline_elements')->onDelete('cascade');\n            $table->foreign('quest_element_id')->references('id')->on('quest_elements')->onDelete('cascade');\n\n            $table->unsignedInteger('entity_id')->nullable()->change();\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entity_user', function (Blueprint $table) {\n            $table->unsignedInteger('entity_id')->nullable(false)->change();\n\n            $table->dropForeign('campaign_id');\n            $table->dropForeign('post_id');\n            $table->dropForeign('quest_element_id');\n            $table->dropForeign('timeline_element_id');\n\n            $table->dropColumn('campaign_id');\n            $table->dropColumn('post_id');\n            $table->dropColumn('quest_element_id');\n            $table->dropColumn('timeline_element_id');\n\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2022_11_07_192125_update_entity_mentions_add_quest_element_id_timeline_element_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('entity_mentions', function (Blueprint $table) {\n            $table->unsignedBigInteger('timeline_element_id')->nullable();\n            $table->unsignedBigInteger('quest_element_id')->nullable();\n\n            $table->foreign('timeline_element_id')->references('id')->on('timeline_elements')->onDelete('cascade');\n            $table->foreign('quest_element_id')->references('id')->on('quest_elements')->onDelete('cascade');\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entity_mentions', function (Blueprint $table) {\n            $table->dropForeign('quest_element_id');\n            $table->dropForeign('timeline_element_id');\n\n            $table->dropColumn('quest_element_id');\n            $table->dropColumn('timeline_element_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2022_11_08_161937_create_presets_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::dropIfExists('presets');\n        Schema::dropIfExists('preset_types');\n        Schema::create('preset_types', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->string('code', 20);\n        });\n\n        Schema::create('presets', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n\n            $table->unsignedBigInteger('type_id');\n            $table->unsignedBigInteger('visibility_id');\n            $table->unsignedInteger('campaign_id');\n\n            $table->string('name', 191);\n            $table->json('config');\n\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->foreign('visibility_id')->references('id')->on('visibilities')->cascadeOnDelete();\n            $table->foreign('type_id')->references('id')->on('preset_types')->cascadeOnDelete();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('presets');\n        Schema::dropIfExists('preset_types');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2022_12_08_155837_rename_entity_note_id_to_post_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('entity_note_permissions', function (Blueprint $table) {\n            $table->renameColumn('entity_note_id', 'post_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entity_note_permissions', function (Blueprint $table) {\n            $table->renameColumn('post_id', 'entity_note_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_01_04_213154_create_bragi_logs_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('bragi_logs', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('user_id')->nullable();\n            $table->unsignedInteger('campaign_id')->nullable();\n            $table->text('prompt');\n            $table->text('result')->nullable();\n            $table->json('data')->nullable();\n            $table->timestamps();\n\n            $table->index(['created_at']);\n            $table->foreign('user_id')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('bragi_logs');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_01_16_021352_create_family_tree_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('family_trees', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');\n\n            $table->mediumText('config')->nullable();\n\n            $table->unsignedInteger('family_id');\n            $table->foreign('family_id')->references('id')->on('families')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('family_trees');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_01_19_154910_cleanup_user_date_format.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->string('date_format', 5)->nullable()->default(null)->change();\n            $table->smallInteger('default_pagination')->nullable()->default(null)->change();\n        });\n\n        DB::statement('UPDATE users SET date_format = null WHERE date_format = \\'Y-m-d\\'');\n        DB::statement('UPDATE users SET default_pagination = null WHERE default_pagination = 15');\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->string('date_format')->default('Y-m-d')->change();\n            $table->smallInteger('default_pagination')->default('15')->change();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_02_08_003255_update_entity_logs_add_post_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('entity_logs', function (Blueprint $table) {\n            $table->integer('post_id')->unsigned()->nullable();\n            $table->foreign('post_id')->references('id')->on('entity_notes')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('entity_logs', function (Blueprint $table) {\n            $table->dropForeign(['post_id']);\n            $table->dropColumn('post_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_03_14_152925_update_subscriptions_rename_stripe_plan.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // New installs have the correct field name\n        if (Schema::hasColumn('subscriptions', 'stripe_price')) {\n            return;\n        }\n        Schema::table('subscriptions', function (Blueprint $table) {\n            $table->renameColumn('stripe_plan', 'stripe_price');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('subscriptions', function (Blueprint $table) {\n            $table->renameColumn('stripe_price', 'stripe_plan');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_03_14_153209_update_subscription_items_rename_stripe_plan.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // New installs have the correct field name\n        Schema::table('subscription_items', function (Blueprint $table) {\n\n            if (Schema::hasColumn('subscription_items', 'stripe_plan')) {\n                $table->renameColumn('stripe_plan', 'stripe_price');\n            }\n            if (! Schema::hasColumn('subscription_items', 'stripe_product')) {\n                $table->string('stripe_product')->nullable()->after('stripe_id');\n            }\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('subscription_items', function (Blueprint $table) {\n            $table->renameColumn('stripe_price', 'stripe_plan');\n            $table->dropColumn('stripe_product');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_03_14_154115_update_users_rename_card_brand_card_last_four.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            if (Schema::hasColumn('users', 'card_brand')) {\n                $table->renameColumn('card_brand', 'pm_type');\n            }\n            if (Schema::hasColumn('users', 'card_last_four')) {\n                $table->renameColumn('card_last_four', 'pm_last_four');\n            }\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            if (Schema::hasColumn('users', 'pm_type')) {\n                $table->renameColumn('pm_type', 'card_brand');\n            }\n            if (Schema::hasColumn('users', 'pm_last_four')) {\n                $table->renameColumn('pm_last_four', 'card_last_four');\n            }\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_05_04_185755_update_gallery_woff2.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('images', function (Blueprint $table) {\n            $table->char('ext', 5)->nullable()->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('images', function (Blueprint $table) {\n            $table->char('ext', 4)->nullable()->change();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_05_17_191929_update_images_add_focus_x_focus_y.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('images', function (Blueprint $table) {\n            $table->integer('focus_x')->unsigned()->nullable();\n            $table->integer('focus_y')->unsigned()->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('images', function (Blueprint $table) {\n            $table->dropColumn('focus_x');\n            $table->dropColumn('focus_y');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_02_175012_create_image_mentions_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('image_mentions', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('entity_id');\n            $table->char('image_id', 36);\n            $table->unsignedInteger('post_id')->nullable();\n            $table->timestamps();\n\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n            $table->foreign('image_id')->references('id')->on('images')->onDelete('cascade');\n            $table->foreign('post_id')->references('id')->on('entity_notes')->onDelete('cascade');\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('image_mentions', function (Blueprint $table) {\n            Schema::dropIfExists('image_mentions');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_09_215007_update_campaign_style_add_theme.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_styles', function (Blueprint $table) {\n            $table->boolean('is_theme')->default(0)->index();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_styles', function (Blueprint $table) {\n            $table->dropColumn('is_theme');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_10_220139_create_api_logs.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n        if (Schema::connection('logs')->hasTable('api_logs')) {\n            return;\n        }\n        Schema::connection('logs')->create('api_logs', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->unsignedInteger('user_id')->nullable();\n            $table->unsignedInteger('campaign_id')->nullable();\n            $table->text('uri')->nullable();\n            $table->json('params')->nullable();\n            $table->index(['created_at']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n        Schema::connection('logs')->dropIfExists('api_logs');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_15_210220_create_user_logs_table.php",
    "content": "<?php\n\nuse App\\Enums\\UserAction;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n        if (Schema::connection('logs')->hasTable('user_logs')) {\n            return;\n        }\n        Schema::connection('logs')->create('user_logs', function (Blueprint $table) {\n            $table->id();\n            $table->integer('user_id')->unsigned();\n            $table->unsignedTinyInteger('type_id')\n                ->default(UserAction::login->value);\n            $table->string('ip', 255)->nullable();\n            $table->char('country', 6)->nullable();\n            $table->timestamps();\n            $table->index(['created_at']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n        Schema::dropIfExists('user_logs');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_21_221002_update_attributes_rename_is_star.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        if (Schema::hasColumn('attributes', 'is_pinned')) {\n            return;\n        }\n        Schema::table('attributes', function (Blueprint $table) {\n            $table->renameColumn('is_star', 'is_pinned');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('attributes', function (Blueprint $table) {\n            $table->renameColumn('is_pinned', 'is_star');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_21_221208_update_relations_rename_is_star.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('relations', function (Blueprint $table) {\n            if (Schema::hasColumn('relations', 'is_star')) {\n                $table->renameColumn('is_star', 'is_pinned');\n            }\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('relations', function (Blueprint $table) {\n            $table->renameColumn('is_pinned', 'is_star');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_27_194149_create_genres_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('genres', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_count')->default(0);\n            $table->string('slug', 50);\n            $table->timestamps();\n            $table->unique('slug');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('genres');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_27_195226_create_campaign_genre_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('campaign_genre', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('genre_id');\n            $table->timestamps();\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('genre_id')->references('id')->on('genres')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('campaign_genre');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_06_29_185027_create_user_flags_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('user_flags', function (Blueprint $table) {\n            $table->id();\n            $table->string('flag', 12);\n            $table->timestamps();\n            $table->unsignedInteger('user_id');\n\n            $table->index('flag');\n            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('user_flags');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_07_13_164526_create_post_layouts_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('post_layouts', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('code', 25);\n            $table->unsignedInteger('entity_type_id')->nullable();\n            $table->json('config')->nullable();\n            $table->timestamps();\n\n            $table->foreign('entity_type_id')->references('id')->on('entity_types')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('post_layouts');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_07_13_172639_update_entity_notes_add_layout_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_notes', function (Blueprint $table) {\n            $table->unsignedInteger('layout_id')->nullable();\n\n            $table->foreign('layout_id')->references('id')->on('post_layouts')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_notes', function (Blueprint $table) {\n            $table->dropColumn('layout_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_07_28_181821_update_calendars_add_format.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('calendars', function (Blueprint $table) {\n            if (Schema::hasColumn('calendars', 'format')) {\n                return;\n            }\n            $table->string('format', 20)->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('calendars', function (Blueprint $table) {\n            $table->dropColumn('format');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_08_11_012819_reset_campaign_slug.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn('slug');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn('slug');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_08_14_225219_add_new_slug.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->string('slug', 45)->nullable()->unique()->after('name');\n        });\n        DB::statement('UPDATE campaigns SET slug = id');\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void {}\n};\n"
  },
  {
    "path": "database/migrations/2023_08_16_170220_remove_campaign_export_path.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn('export_path');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {});\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_08_21_233952_create_tutorials_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('user_tutorials', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('user_id');\n            $table->string('code', 45);\n            $table->timestamps();\n\n            $table->unique(['user_id', 'code']);\n\n            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('user_tutorials');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_08_30_170905_migrate_to_bookmarks.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::rename('menu_links', 'bookmarks');\n        Schema::rename('menu_link_tag', 'bookmark_tag');\n\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->renameColumn('menu_links', 'bookmarks');\n        });\n        Schema::table('bookmark_tag', function (Blueprint $table) {\n            $table->renameColumn('menu_link_id', 'bookmark_id');\n        });\n\n        DB::update(\"UPDATE bookmarks SET parent = 'bookmarks' WHERE parent = 'menu_links'\");\n        DB::update(\"UPDATE bookmarks SET type = 'bookmark' WHERE type = 'menu_link'\");\n        DB::update(\"UPDATE bookmarks SET menu = 'bookmark' WHERE menu = 'menu_link'\");\n        DB::update(\"UPDATE bookmarks SET random_entity_type = 'bookmark' WHERE random_entity_type = 'menu_link'\");\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::rename('bookmarks', 'menu_links');\n        Schema::rename('bookmark_tag', 'menu_link_tag');\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->renameColumn('bookmarks', 'menu_links');\n        });\n        Schema::table('menu_link_tag', function (Blueprint $table) {\n            $table->renameColumn('bookmark_id', 'menu_link_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_09_12_200523_migrate_to_posts.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('posts');\n        Schema::rename('entity_notes', 'posts');\n        Schema::rename('entity_note_permissions', 'post_permissions');\n\n        Schema::table('post_permissions', function (Blueprint $table) {\n            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');\n        });\n\n        Schema::table('entity_mentions', function (Blueprint $table) {\n            $table->renameColumn('entity_note_id', 'post_id');\n\n            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');\n        });\n\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::rename('posts', 'entity_notes');\n        Schema::rename('post_permissions', 'entity_note_permissions');\n\n        Schema::table('post_permissions', function (Blueprint $table) {\n            $table->foreign('post_id')->references('id')->on('entity_notes')->onDelete('cascade');\n        });\n\n        Schema::table('entity_mentions', function (Blueprint $table) {\n            $table->renameColumn('entity_note_id', 'post_id');\n\n            $table->foreign('entity_note_id')->references('id')->on('entity_notes')->onDelete('cascade');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_10_15_183420_add_image_to_entities.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->string('image_path', 255)->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropColumn('image_path');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_10_16_202303_update_locations_rename_parent_location_id_location_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('locations', function (Blueprint $table) {\n            $table->renameColumn('parent_location_id', 'location_id');\n            $table->foreign('location_id')->references('id')->on('locations')->nullOnDelete();\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('locations', function (Blueprint $table) {\n            $table->renameColumn('location_id', 'parent_location_id');\n            $table->foreign('parent_location_id')->references('id')->on('locations')->nullOnDelete();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_10_21_172645_update_entity_type_bookmark.php",
    "content": "<?php\n\nuse App\\Models\\EntityType;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $type = EntityType::find(config('entities.ids.bookmark'));\n        if (! $type) {\n            return;\n        }\n        $type->code = 'bookmark';\n        $type->save();\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void {}\n};\n"
  },
  {
    "path": "database/migrations/2023_10_25_173253_create_campaign_exports_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('campaign_exports', function (Blueprint $table) {\n\n            $table->increments('id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->integer('size');\n            $table->tinyInteger('type');\n            $table->tinyInteger('status');\n            $table->string('path')->nullable();\n            $table->timestamps();\n\n            $table->index(['status']);\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->onDelete('cascade');\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('campaign_exports');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_10_28_210131_add_is_deleted_index.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    protected array $tables = ['abilities', 'entities'];\n\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        foreach ($this->tables as $tablename) {\n            Schema::table($tablename, function (Blueprint $table) {\n                $table->index('deleted_at');\n            });\n        }\n\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        foreach ($this->tables as $tablename) {\n            Schema::table($tablename, function (Blueprint $table) {\n                $table->dropIndex('deleted_at');\n            });\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_11_05_174423_create_campaign_import_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('campaign_imports', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('user_id')->nullable();\n\n            $table->text('config')->nullable();\n            $table->unsignedTinyInteger('status_id')->default(1);\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('user_id')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('campaign_import');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_11_07_034812_rollback_entities_deleted_index.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            // $table->dropIndex('entities_deleted_at_index');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {});\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_11_19_121322_update_campaign_exports_add_progress.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_exports', function (Blueprint $table) {\n            $table->float('progress')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_exports', function (Blueprint $table) {\n            $table->dropColumn('progress');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_11_21_215234_update_calendars_add_show_birthdays.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('calendars', function (Blueprint $table) {\n            $table->boolean('show_birthdays')->default(false);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('calendars', function (Blueprint $table) {\n            $table->dropColumn('show_birthdays');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_11_28_121013_cleanup_entity_images.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $tables = ['abilities', 'calendars', 'characters', 'creatures', 'events', 'families', 'items', 'journals', 'locations', 'maps', 'notes', 'organisations', 'quests', 'races', 'tags', 'timelines'];\n        foreach ($tables as $tablename) {\n            if (! Schema::hasColumn($tablename, 'image')) {\n                continue;\n            }\n            Schema::table($tablename, function (Blueprint $table) {\n                $table->dropColumn('image');\n            });\n        }\n\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void {}\n};\n"
  },
  {
    "path": "database/migrations/2023_11_28_215313_update_map_markers_add_is_popupless.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('map_markers', function (Blueprint $table) {\n            $table->boolean('is_popupless')->default(0);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('map_markers', function (Blueprint $table) {\n            $table->dropColumn('is_popupless');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_12_02_154727_remove_old_trees.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $tables = [\n            'abilities',\n            'attribute_templates',\n            'calendars',\n            'creatures',\n            'events',\n            'events',\n            'families',\n            'items',\n            'journals',\n            'locations',\n            'maps',\n            'notes',\n            'organisations',\n            'quests',\n            'races',\n            'tags',\n            'timelines',\n        ];\n        foreach ($tables as $tableName) {\n            if (! Schema::hasColumn($tableName, '_lft')) {\n                continue;\n            }\n            Schema::table($tableName, function (Blueprint $table) {\n                $table->dropColumn('_lft');\n                $table->dropColumn('_rgt');\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void {}\n};\n"
  },
  {
    "path": "database/migrations/2023_12_05_125348_create_tiers_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('tiers', function (Blueprint $table) {\n            $table->id();\n            $table->string('code', 30)->unique();\n            $table->string('name', 30);\n            $table->float('monthly');\n            $table->float('yearly');\n            $table->tinyInteger('position');\n            $table->index(['position', 'deleted_at']);\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('tiers');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_08_144309_create_features_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('feature_categories');\n        Schema::create('feature_categories', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->string('name', 45)->unique();\n        });\n\n        Schema::dropIfExists('feature_statuses');\n        Schema::create('feature_statuses', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->string('name', 45)->unique();\n        });\n\n        Schema::dropIfExists('features');\n        Schema::create('features', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->unsignedInteger('created_by')->nullable();\n            $table->string('name', 90);\n            $table->text('description')->nullable();\n            $table->unsignedBigInteger('category_id')->nullable();\n            $table->unsignedBigInteger('status_id');\n            $table->unsignedInteger('upvote_count')->default(0);\n\n            $table->foreign('status_id')->references('id')->on('feature_statuses')->cascadeOnDelete();\n            $table->foreign('category_id')->references('id')->on('feature_categories')->cascadeOnDelete();\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n\n            $table->index(['name']);\n        });\n\n        Schema::create('feature_upvotes', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->unsignedInteger('user_id');\n            $table->unsignedBigInteger('feature_id');\n            $table->unique(['user_id', 'feature_id']);\n\n            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();\n            $table->foreign('feature_id')->references('id')->on('features')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('feature_upvotes');\n        Schema::dropIfExists('features');\n        Schema::dropIfExists('feature_categories');\n        Schema::dropIfExists('feature_statuses');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_10_191244_create_game_systems_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('game_systems', function (Blueprint $table) {\n            $table->id();\n            $table->string('name', 70);\n            $table->timestamps();\n            $table->unique('name');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('game_systems');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_10_191740_create_campaign_system_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('campaign_system', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedBigInteger('system_id');\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('system_id')->references('id')->on('game_systems')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('campaign_system');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_11_150113_update_attributes.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('attributes', function (Blueprint $table) {\n            $table->string('api_key', 20)->nullable()->change();\n            // $table->tinyInteger('is_hidden')->default(0)->change();\n        });\n\n        DB::raw('ALTER TABLE `attributes` MODIFY `is_hidden` tinyint(1) DEFAULT 0 NOT NULL;');\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('attributes', function (Blueprint $table) {});\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_19_024046_cleanup_reminders.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        if (! Schema::hasColumn('entity_events', 'date')) {\n            return;\n        }\n        Schema::table('entity_events', function (Blueprint $table) {\n            $table->dropColumn('date');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_events', function (Blueprint $table) {});\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_22_203110_create_user_validations_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('user_validations', function (Blueprint $table) {\n            $table->id();\n            $table->char('token', 36);\n            $table->unsignedInteger('user_id');\n            $table->boolean('is_valid')->default(false);\n            $table->timestamps();\n\n            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();\n            $table->index(['is_valid']);\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('user_validations');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_25_192113_update_creatures_add_is_extinct.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('creatures', function (Blueprint $table) {\n            $table->boolean('is_extinct')->default(0);\n            $table->index('is_extinct');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('creatures', function (Blueprint $table) {\n            $table->dropIndex(['is_extinct']);\n            $table->dropColumn('is_extinct');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_26_194006_update_campaigns_add_is_discreet.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->boolean('is_discreet')->default(0);\n            $table->index('is_discreet');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropIndex(['is_discreet']);\n            $table->dropColumn('is_discreet');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_02_06_162941_create_feature_files.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('feature_files', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedBigInteger('feature_id');\n            $table->string('path')->nullable();\n            $table->timestamps();\n\n            $table->foreign('feature_id')->references('id')->on('features')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('feature_files');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_02_27_095646_update_features_add_original.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('features', function (Blueprint $table) {\n            $table->text('original')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('features', function (Blueprint $table) {\n            $table->dropColumn('original');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_03_07_010249_update_features_add_rejection.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('features', function (Blueprint $table) {\n            $table->text('rejection')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('features', function (Blueprint $table) {\n            $table->dropColumn('rejection');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_03_27_173140_create_webhooks.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('webhooks', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedTinyInteger('action');\n            $table->string('url', 191);\n            $table->unsignedTinyInteger('type');\n            $table->text('message')->nullable();\n            $table->timestamps();\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n            $table->unsignedTinyInteger('status');\n\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('webhooks');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_03_224729_create_webhook_tags_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('webhook_tags', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedBigInteger('webhook_id');\n            $table->unsignedInteger('tag_id');\n\n            $table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');\n            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('webhook_tags');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_15_220412_create_organisation_location_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('organisation_location', function (Blueprint $table) {\n            $table->unsignedInteger('organisation_id');\n            $table->unsignedInteger('location_id');\n\n            $table->foreign('organisation_id')->references('id')->on('organisations')->cascadeOnDelete();\n            $table->foreign('location_id')->references('id')->on('locations')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('organisation_location');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_23_062512_update_subscriptions_change_name_type.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('subscriptions', function (Blueprint $table) {\n            $table->renameColumn('name', 'type');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('subscriptions', function (Blueprint $table) {\n            $table->renameColumn('type', 'name');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_24_193659_update_campaign_settings_add_assets.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('assets')->default(true);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('assets');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_05_02_162659_update_inventories_add_image_uuid.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('inventories', function (Blueprint $table) {\n            $table->char('image_uuid', 36)->nullable();\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('inventories', function (Blueprint $table) {\n            $table->dropColumn('image_uuid');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_05_28_202511_create_tier_pricing_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('tier_prices', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->unsignedBigInteger('tier_id');\n            $table->string('currency', 3);\n            $table->double('cost', 10, 3)->unsigned();\n            $table->unsignedTinyInteger('period')->default(1);\n            $table->string('stripe_id', 191);\n\n            $table->index(['currency', 'period']);\n\n            $table->foreign('tier_id')->references('id')->on('tiers')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('tier_prices');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_06_01_000001_create_oauth_device_codes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('oauth_device_codes', function (Blueprint $table) {\n            $table->char('id', 80)->primary();\n            $table->foreignId('user_id')->nullable()->index();\n            $table->foreignUuid('client_id')->index();\n            $table->char('user_code', 8)->unique();\n            $table->text('scopes');\n            $table->boolean('revoked');\n            $table->dateTime('user_approved_at')->nullable();\n            $table->dateTime('last_polled_at')->nullable();\n            $table->dateTime('expires_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('oauth_device_codes');\n    }\n\n    /**\n     * Get the migration connection name.\n     */\n    public function getConnection(): ?string\n    {\n        return $this->connection ?? config('passport.connection');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_06_04_202056_update_posts_add_deleted_at_deleted_by.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('posts', function (Blueprint $table) {\n            $table->softDeletes();\n            $table->index('deleted_at');\n            $table->unsignedInteger('deleted_by')->nullable();\n            $table->foreign('deleted_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('posts', function (Blueprint $table) {\n            $table->dropForeign('deleted_by');\n            $table->dropIndex('deleted_at');\n            $table->dropColumn('deleted_by');\n            $table->dropColumn('deleted_at');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_06_14_201056_update_campaigns_add_deleted_by_deleted_at.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->softDeletes();\n            $table->index('deleted_at');\n            $table->unsignedInteger('deleted_by')->nullable();\n            $table->foreign('deleted_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropForeign('deleted_by');\n            $table->dropIndex('deleted_at');\n            $table->dropColumn('deleted_by');\n            $table->dropColumn('deleted_at');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_06_22_004252_update_character_race_add_is_private.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('character_race', function (Blueprint $table) {\n            $table->boolean('is_private')->default(false);\n            $table->index('is_private');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('character_race', function (Blueprint $table) {\n            $table->dropIndex('is_private');\n            $table->dropColumn('is_private');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_07_02_172619_update_posts_add_is_template.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('posts', function (Blueprint $table) {\n            $table->boolean('is_template')->default(false);\n            $table->index('is_template');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('posts', function (Blueprint $table) {\n            $table->dropIndex('is_template');\n            $table->dropColumn('is_template');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_07_08_051702_update_webhooks_add_settings.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('webhooks', function (Blueprint $table) {\n            $table->text('settings')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('webhooks', function (Blueprint $table) {\n            $table->dropColumn('settings');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_07_09_062122_update_character_family_add_is_private.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('character_family', function (Blueprint $table) {\n            $table->boolean('is_private')->default(false);\n            $table->index('is_private');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('character_family', function (Blueprint $table) {\n            $table->dropIndex('is_private');\n            $table->dropColumn('is_private');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_07_25_205325_update_map_layers_add_image_uuid.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('map_layers', function (Blueprint $table) {\n            $table->char('image_uuid', 36)->after('image')->nullable();\n            $table->foreign('image_uuid')->references('id')->on('images')->nullOnDelete();\n        });\n        Schema::table('map_layers', function (Blueprint $table) {\n            $table->renameColumn('image', 'image_path');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('map_layers', function (Blueprint $table) {\n            $table->dropForeign('map_layers_image_uuid_foreign');\n            $table->dropColumn('image_uuid');\n        });\n        Schema::table('map_layers', function (Blueprint $table) {\n            $table->renameColumn('image_path', 'image');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_07_26_160208_update_entity_assets_add_image_uuid.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_assets', function (Blueprint $table) {\n            $table->char('image_uuid', 36)->nullable();\n            $table->foreign('image_uuid')->references('id')->on('images')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_assets', function (Blueprint $table) {\n            $table->dropForeign('entity_assets_image_uuid_foreign');\n            $table->dropColumn('image_uuid');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_07_31_215400_remove_unused_slug.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $tables = [\n            'abilities',\n            'attribute_templates',\n            'calendars',\n            'characters',\n            'conversations',\n            'creatures',\n            'dice_rolls',\n            'events',\n            'families',\n            'items',\n            'journals',\n            'locations',\n            'maps',\n            'notes',\n            'organisations',\n            'quests',\n            'timelines',\n        ];\n        foreach ($tables as $tableName) {\n            if (! Schema::hasColumn($tableName, 'slug')) {\n                continue;\n            }\n            Schema::table($tableName, function (Blueprint $table) {\n                $table->dropColumn('slug');\n            });\n        }\n\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void {}\n};\n"
  },
  {
    "path": "database/migrations/2024_08_12_231117_update_locations_add_is_destroyed.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('locations', function (Blueprint $table) {\n            $table->boolean('is_destroyed')->default(0);\n            $table->index('is_destroyed');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('locations', function (Blueprint $table) {\n            $table->dropIndex('is_destroyed');\n            $table->dropColumn('is_destroyed');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_08_13_202759_update_creatures_add_is_dead.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('creatures', function (Blueprint $table) {\n            $table->boolean('is_dead')->default(0);\n            $table->index('is_dead');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('creatures', function (Blueprint $table) {\n            $table->dropIndex('is_dead');\n            $table->dropColumn('is_dead');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_08_14_145655_update_races_add_is_extinct.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('races', function (Blueprint $table) {\n            $table->boolean('is_extinct')->default(0);\n            $table->index('is_extinct');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('races', function (Blueprint $table) {\n            $table->dropIndex('is_extinct');\n            $table->dropColumn('is_extinct');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_08_14_164041_update_families_add_is_extinct.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('families', function (Blueprint $table) {\n            $table->boolean('is_extinct')->default(0);\n            $table->index('is_extinct');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('families', function (Blueprint $table) {\n            $table->dropIndex('is_extinct');\n            $table->dropColumn('is_extinct');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_08_27_175447_update_notifications_migrate_user_model.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        DB::table('notifications')\n            ->where('notifiable_type', 'App\\\\User')\n            ->update(['notifiable_type' => 'App\\\\Models\\\\User']);\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void {}\n};\n"
  },
  {
    "path": "database/migrations/2025_01_09_180214_update_objects_add_weight.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('items', function (Blueprint $table) {\n            $table->string('weight')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('items', function (Blueprint $table) {\n            $table->dropColumn('weight');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_10_175606_update_quests_add_location_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('quests', function (Blueprint $table) {\n            $table->unsignedInteger('location_id')->nullable();\n            $table->foreign('location_id')->references('id')->on('locations')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('quests', function (Blueprint $table) {\n            $table->dropForeign('quests_location_id_foreign');\n            $table->dropColumn('location_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_11_022946_update_modules_add_campaign_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_types', function (Blueprint $table) {\n            $table->unsignedInteger('campaign_id')->nullable();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->string('singular', 50)->nullable();\n            $table->string('plural', 50)->nullable();\n            $table->string('icon', 30)->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_types', function (Blueprint $table) {\n            $table->dropForeign('entity_types_campaign_id_foreign');\n            $table->dropColumn('campaign_id');\n            $table->dropColumn('singular');\n            $table->dropColumn('plural');\n            $table->dropColumn('icon');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_13_064804_create_post_tag_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('post_tag', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('post_id');\n            $table->unsignedInteger('tag_id');\n            $table->timestamps();\n\n            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');\n            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('post_tag');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_13_230814_update_entities_add_boilerplate.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->longText('entry')->nullable();\n            $table->string('type', 45)->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropColumn('entry');\n            $table->dropColumn('type');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_14_144924_update_bookmarks_add_entity_type_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('bookmarks', function (Blueprint $table) {\n            $table->unsignedInteger('entity_type_id')->nullable();\n            $table->foreign('entity_type_id')->references('id')->on('entity_types')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('bookmarks', function (Blueprint $table) {\n            $table->dropForeign('bookmarks_entity_type_id_foreign');\n            $table->dropColumn('entity_type_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_15_160953_migrate_entry_to_entities.php",
    "content": "<?php\n\nuse App\\Models\\EntityType;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        /** @var EntityType $entityType */\n        $exclude = [\n            config('entities.ids.attribute_template'),\n            config('entities.ids.bookmark'),\n            config('entities.ids.dice_roll'),\n            config('entities.ids.conversation'),\n        ];\n        foreach (EntityType::default()->exclude($exclude)->get() as $entityType) {\n            DB::statement('UPDATE entities JOIN ' . $entityType->pluralCode() . ' as s ON entities.entity_id = s.id SET entities.entry = s.entry, entities.type = s.type WHERE entities.type_id = ' . $entityType->id);\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {});\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_16_164318_add_dashboard_entity_type_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_dashboard_widgets', function (Blueprint $table) {\n            $table->unsignedInteger('entity_type_id')->nullable();\n            $table->foreign('entity_type_id')->references('id')->on('entity_types')->nullOnDelete();\n        });\n\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_dashboard_widgets', function (Blueprint $table) {\n            $table->dropForeign('campaign_dashboard_widgets_entity_type_id_foreign');\n            $table->dropColumn('entity_type_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_16_175851_migrate_widgets_to_entity_types.php",
    "content": "<?php\n\nuse App\\Models\\EntityType;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        foreach (EntityType::default()->get() as $entityType) {\n            DB::statement('UPDATE campaign_dashboard_widgets\nSET entity_type_id = ' . $entityType->id . \"\nWHERE config like '%\\\"entity\\\":\\\"\" . $entityType->code . \"\\\"%'\");\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void {}\n};\n"
  },
  {
    "path": "database/migrations/2025_01_17_161652_add_parent_to_entities.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->unsignedInteger('parent_id')->nullable();\n            $table->foreign('parent_id')->references('id')->on('entities')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropForeign('entities_parent_id_foreign');\n            $table->dropColumn('parent_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_01_27_142523_add_word_count.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    protected $tableNames = ['entities', 'posts', 'timeline_elements', 'timeline_eras', 'character_traits', 'quest_elements', 'map_layers', 'map_markers'];\n\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        foreach ($this->tableNames as $tableName) {\n            Schema::table($tableName, function (Blueprint $table) {\n                $table->unsignedInteger('words')->nullable();\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        foreach ($this->tableNames as $tableName) {\n            Schema::table($tableName, function (Blueprint $table) {\n                $table->dropColumn('words');\n            });\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_02_21_204219_update_module_icon.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_types', function (Blueprint $table) {\n            $table->string('icon', 100)->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_types', function (Blueprint $table) {\n            $table->string('icon', 30)->change();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_03_18_055651_update_features_add_message_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('features', function (Blueprint $table) {\n            // $table->string('icon', 100)->nullable();\n            $table->unsignedBigInteger('message_id')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('features', function (Blueprint $table) {\n            $table->dropColumn('message_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_03_21_150239_rename_entity_events_to_reminders.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::rename('entity_events', 'reminders');\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::rename('reminders', 'entity_events');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_03_21_150723_update_entity_events_add_polymorphism.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('reminders', function (Blueprint $table) {\n            $table->unsignedBigInteger('remindable_id')->nullable();\n            $table->string('remindable_type')->nullable();\n            $table->index(['remindable_id', 'remindable_type']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('reminders', function (Blueprint $table) {\n            $table->dropIndex(['remindable_id', 'remindable_type']);\n            $table->dropColumn('remindable_type');\n            $table->dropColumn('remindable_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_03_21_151008_fill_entity_events.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        DB::statement(\"UPDATE reminders SET remindable_type = 'App\\\\\\Models\\\\\\Entity', remindable_id = entity_id\");\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        DB::statement('UPDATE reminders SET remindable_type = null, remindable_id = null');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_03_21_153447_update_reminders_nullify_entity_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('reminders', function (Blueprint $table) {\n            $table->unsignedInteger('entity_id')->nullable()->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('reminders', function (Blueprint $table) {\n            //\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_04_10_064831_update_attribute_templates_add_is_enabled.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('attribute_templates', function (Blueprint $table) {\n            $table->boolean('is_enabled')->default(true);\n            $table->index('is_enabled');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('attribute_templates', function (Blueprint $table) {\n            $table->dropIndex('attribute_templates_is_enabled_index');\n            $table->dropColumn('is_enabled');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_04_21_170958_update_user_logs_add_campaign_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n        if (! Schema::connection('logs')->hasTable('user_logs')) {\n            return;\n        }\n        Schema::connection('logs')->table('user_logs', function (Blueprint $table) {\n            $table->unsignedBigInteger('campaign_id')->nullable();\n            $table->json('data')->nullable();\n\n            $table->unsignedInteger('impersonated_by')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n        if (! Schema::connection('logs')->hasTable('user_logs')) {\n            return;\n        }\n        Schema::connection('logs')->table('user_logs', function (Blueprint $table) {\n            $table->dropColumn('data');\n            $table->dropColumn('campaign_id');\n            $table->dropColumn('impersonated_by');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_05_29_015926_update_bookmarks_add_created_by_updated_by.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('bookmarks', function (Blueprint $table) {\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('bookmarks', function (Blueprint $table) {\n            $table->dropColumn('created_by');\n            $table->dropColumn('updated_by');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_05_29_161824_update_campaign_dashboard_widgets_add_created_by_updated_by.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_dashboard_widgets', function (Blueprint $table) {\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_dashboard_widgets', function (Blueprint $table) {\n            $table->dropColumn('created_by');\n            $table->dropColumn('updated_by');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_05_29_162746_update_attributes_add_created_by_updated_by.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('attributes', function (Blueprint $table) {\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('attributes', function (Blueprint $table) {\n            $table->dropColumn('created_by');\n            $table->dropColumn('updated_by');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_06_053052_update_reminders_remove_entity_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('reminders', function (Blueprint $table) {\n            if (Schema::getConnection()->getDriverName() !== 'sqlite') {\n                $table->dropForeign('entity_events_entity_id_foreign');\n                $table->dropColumn('entity_id');\n            }\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('reminders', function (Blueprint $table) {\n            $table->unsignedInteger('entity_id')->nullable();\n            $table->foreign('entity_id')->references('id')->on('entities')->onDelete('cascade');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_09_161939_cleanup_old_entry_and_type.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $tables = [\n            'characters',\n            'families',\n            'locations',\n            'organisations',\n            'items',\n            'notes',\n            'events',\n            'calendars',\n            'races',\n            'quests',\n            'journals',\n            'tags',\n            'abilities',\n            'maps',\n            'timelines',\n            'creatures',\n        ];\n        foreach ($tables as $tablename) {\n            if (! in_array($tablename, ['families', 'items', 'events', 'calendars', 'races', 'quests', 'journals', 'tags', 'creatures'])) {\n                Schema::table($tablename, function (Blueprint $table) {\n                    $table->dropIndex(['name_type']); // drops index that contains \"type\"\n                    $table->dropColumn('type');\n                    $table->dropColumn('entry');\n                });\n            } elseif (in_array($tablename, ['items', 'races', 'creatures'])) {\n                Schema::table($tablename, function (Blueprint $table) {\n                    $table->dropIndex(['name_type_is_private']); // drops index that contains \"type\"\n                    $table->dropColumn('type');\n                    $table->dropColumn('entry');\n                });\n            } elseif ($tablename == 'events') {\n                Schema::table($tablename, function (Blueprint $table) {\n                    $table->dropIndex(['name_type_date_is_private']); // drops index that contains \"type\"\n                    $table->dropColumn('type');\n                    $table->dropColumn('entry');\n                });\n            } elseif ($tablename == 'journals') {\n                Schema::table($tablename, function (Blueprint $table) {\n                    $table->dropIndex(['name_type_date']); // drops index that contains \"type\"\n                    $table->dropColumn('type');\n                    $table->dropColumn('entry');\n                });\n            } elseif ($tablename == 'tags') {\n                Schema::table($tablename, function (Blueprint $table) {\n                    $table->dropIndex(['name_type_is_private_is_hidden_is_auto_applied']); // drops index that contains \"type\"\n                    $table->dropColumn('type');\n                    $table->dropColumn('entry');\n                });\n            } else {\n                Schema::table($tablename, function (Blueprint $table) {\n                    $table->dropColumn('type');\n                    $table->dropColumn('entry');\n                });\n            }\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        //\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_09_162836_cleanup_old_fields.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Support\\Str;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $tables = [\n            'characters' => ['family_id'],\n            'locations' => ['is_map_private'],\n            'organisations' => ['location_id'],\n            'quests' => ['calendar_id', 'calendar_year', 'calendar_month', 'calendar_day'],\n            'journals' => ['calendar_id', 'calendar_year', 'calendar_month', 'calendar_day'],\n        ];\n        foreach ($tables as $tablename => $extra) {\n            Schema::table($tablename, function (Blueprint $table) use ($extra, $tablename) {\n                if (Schema::getConnection()->getDriverName() !== 'sqlite') {\n                    foreach ($extra as $column) {\n                        if (Str::endsWith($column, '_id')) {\n                            $table->dropForeign($tablename . '_' . $column . '_foreign');\n                        }\n                        $table->dropColumn($column);\n                    }\n                }\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        //\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_09_181415_rename_campaign_submissions_to_applications.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::rename('campaign_submissions', 'applications');\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::rename('applications', 'campaign_submissions');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_09_182950_cleanup_old_logs_tables.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $tables = ['admin_logs', 'job_logs', 'user_logs'];\n        foreach ($tables as $tablename) {\n            Schema::dropIfExists($tablename);\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        //\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_16_145726_add_api_log_duration.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n\n        Schema::connection('logs')->table('api_logs', function (Blueprint $table) {\n            $table->string('response', 3)->nullable();\n            $table->decimal('duration', 8, 3)->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        if (! config('logging.enabled')) {\n            return;\n        }\n\n        Schema::connection('logs')->table('api_logs', function (Blueprint $table) {\n            $table->dropColumn('response');\n            $table->dropColumn('duration');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_16_211604_drop_oauth_personal_access_clients.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('oauth_personal_access_clients');\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        //\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_24_124233_update_entity_logs_add_polymorphism.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_logs', function (Blueprint $table) {\n            $table->unsignedBigInteger('parent_id');\n            $table->string('parent_type');\n            $table->index(['parent_id', 'parent_type']);\n            //\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_logs', function (Blueprint $table) {\n            $table->dropIndex(['parent_id', 'parent_type']);\n            $table->dropColumn('parent_type');\n            $table->dropColumn('parent_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_24_124354_migrate_entity_logs.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        DB::statement(\"UPDATE entity_logs SET parent_type = 'App\\\\\\Models\\\\\\Entity', parent_id = entity_id WHERE post_id IS NULL\");\n        DB::statement(\"UPDATE entity_logs SET parent_type = 'App\\\\\\Models\\\\\\Post', parent_id = post_id WHERE post_id IS NOT NULL\");\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_logs', function (Blueprint $table) {\n            //\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_24_124500_cleanup_entity_logs.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_logs', function (Blueprint $table) {\n            if (Schema::getConnection()->getDriverName() !== 'sqlite') {\n                $table->dropForeign('entity_logs_entity_id_foreign');\n                $table->dropColumn('entity_id');\n                $table->dropForeign('entity_logs_post_id_foreign');\n                $table->dropColumn('post_id');\n            } else {\n                $table->dropConstrainedForeignId('entity_id');\n                $table->dropConstrainedForeignId('post_id');\n            }\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_logs', function (Blueprint $table) {\n            //\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_06_25_161814_create_campaign_flags_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('campaign_flags', function (Blueprint $table) {\n            $table->id();\n            $table->string('flag', 12);\n            $table->timestamps();\n            $table->unsignedInteger('campaign_id');\n\n            $table->index('flag');\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('campaign_flags');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_07_03_215618_update_objects_add_creator_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('items', function (Blueprint $table) {\n            $table->unsignedInteger('creator_id')->nullable();\n            $table->foreign('creator_id')->references('id')->on('entities')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('items', function (Blueprint $table) {\n            $table->dropForeign('entity_events_creator_id_foreign');\n            $table->dropColumn('creator_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_07_03_222904_update_objects_migrate_character_id_to_creator_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        if (Schema::getConnection()->getDriverName() == 'sqlite') {\n            DB::statement('\n                UPDATE items\n                SET creator_id = (\n                    SELECT entities.id\n                    FROM entities\n                    WHERE entities.entity_id = items.character_id\n                    AND entities.type_id = 1\n                )\n                WHERE character_id IS NOT NULL\n            ');\n        } else {\n            DB::statement('\n                UPDATE items\n                JOIN entities ON entities.entity_id = items.character_id\n                    AND entities.type_id = 1\n                SET items.creator_id = entities.id\n                WHERE items.character_id IS NOT NULL\n            ');\n        }\n    }\n\n    public function down(): void\n    {\n        // Safely undo: only null creator_id if it matches the expected entity\n        DB::statement('\n            UPDATE items\n            JOIN entities ON entities.entity_id = items.character_id\n                AND entities.type_id = 1\n            SET items.creator_id = NULL\n            WHERE items.creator_id = entities.id\n        ');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_08_14_185936_update_posts_remove_is_private.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('posts', function (Blueprint $table) {\n            $table->dropColumn('is_private');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('posts', function (Blueprint $table) {\n            $table->boolean('is_private')->default(0);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_09_04_194330_update_campaign_flags_add_value.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_flags', function (Blueprint $table) {\n            $table->string('value', 64)->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_flags', function (Blueprint $table) {\n            $table->dropColumn('value');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_09_12_160608_create_whiteboards_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('whiteboards');\n\n        Schema::create('whiteboards', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('campaign_id')->cascadeOnDelete();\n            $table->string('name', 191)->index();\n            $table->string('type', 45)->nullable();\n            $table->json('data')->nullable();\n            $table->boolean('is_private')->default(false);\n            $table->timestamps();\n            $table->softDeletes();\n\n            $table->foreignId('created_by')->nullable()->nullOnDelete();\n            $table->foreignId('updated_by')->nullable()->nullOnDelete();\n            $table->foreignId('deleted_by')->nullable()->nullOnDelete();\n\n            $table->index(['name', 'type', 'is_private']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('whiteboards');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_09_17_034429_update_user_flags_add_amount.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('user_flags', function (Blueprint $table) {\n            $table->string('amount', 20)->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('user_flags', function (Blueprint $table) {\n            $table->dropColumn('amount');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_09_22_230759_update_campaign_imports_add_logs_errors.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_imports', function (Blueprint $table) {\n            $table->text('logs')->nullable();\n            $table->text('errors')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_imports', function (Blueprint $table) {\n            $table->dropColumn('logs');\n            $table->dropColumn('errors');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_09_29_173336_update_map_markers_add_css.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('map_markers', function (Blueprint $table) {\n            $table->string('css', 45)->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('map_markers', function (Blueprint $table) {\n            $table->dropColumn('css');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_09_29_204049_update_entities_add_archived_at.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->timestamp('archived_at')->nullable();\n            $table->index('archived_at');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropColumn('archived_at');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_10_01_200028_update_map_groups_add_parent_id.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('map_groups', function (Blueprint $table) {\n            $table->unsignedBigInteger('parent_id')->nullable();\n            $table->foreign('parent_id')->references('id')->on('map_groups')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('map_groups', function (Blueprint $table) {\n            $table->dropForeign('map_groups_parent_id_foreign');\n            $table->dropColumn('parent_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_10_02_170514_update_campaign_settings_add_whiteboards.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('whiteboards')->default(false);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('whiteboards');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_11_04_205450_create_entity_locations2_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('entity_locations');\n        Schema::create('entity_locations', function (Blueprint $table) {\n            $table->id();\n            $table->timestamps();\n            $table->integer('entity_id')->unsigned();\n            $table->integer('location_id')->unsigned();\n            $table->unsignedInteger('created_by')->nullable();\n            $table->foreign('entity_id')->references('id')->on('entities')->cascadeOnDelete();\n            $table->foreign('location_id')->references('id')->on('locations')->cascadeOnDelete();\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('entity_locations');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_11_06_154720_update_entity_assets_add_updated_by.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_assets', function (Blueprint $table) {\n            $table->unsignedInteger('updated_by')->nullable();\n\n            $table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_assets', function (Blueprint $table) {\n            $table->dropColumn('updated_by');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_11_19_155526_migrate_campaigns_discreet.php",
    "content": "<?php\n\nuse App\\Enums\\CampaignVisibility;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $statement = \"UPDATE campaigns SET visibility_id = '\" . CampaignVisibility::unlisted->value . \"' WHERE visibility_id = '\" . CampaignVisibility::public->value . \"' and is_discreet = 1\";\n        DB::statement($statement);\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        //\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_11_19_160105_remove_campaigns_is_discreet.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            //\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            //\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_12_15_191556_add_dashboard_widget_index.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->index(\n                [\n                    'campaign_id',\n                    'type_id',\n                    'archived_at',\n                    'deleted_at',\n                    'updated_at',\n                ], 'dashboard_entity_list_idx');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropIndex('dashboard_entity_list_idx');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_12_22_212249_migrate_character_locations_to_entity_locations.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $characters = DB::table('characters')\n            ->join('entities', function ($join) {\n                $join->on('entities.entity_id', '=', 'characters.id')\n                    ->where('entities.type_id', '=', config('entities.ids.character'));\n            })\n            ->whereNotNull('characters.location_id')\n            ->select('entities.id as entity_id', 'characters.location_id', 'entities.created_by')\n            ->get();\n\n        foreach ($characters as $character) {\n            DB::table('entity_locations')->insert([\n                'entity_id' => $character->entity_id,\n                'location_id' => $character->location_id,\n                'created_by' => $character->created_by,\n                'created_at' => now(),\n                'updated_at' => now(),\n            ]);\n        }\n\n        Schema::table('characters', function (Blueprint $table) {\n            $table->dropForeign(['location_id']);\n            $table->dropColumn('location_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->integer('location_id')->unsigned()->nullable();\n            $table->foreign('location_id')->references('id')->on('locations')->nullOnDelete();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_14_161511_cleanup_old_referrals.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        if (Schema::hasColumn('users', 'referral_id')) {\n            Schema::table('users', function (Blueprint $table) {\n                $table->dropForeign('users_referral_id_foreign');\n                $table->dropColumn('referral_id');\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('users', function (Blueprint $table) {\n            //\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_14_170634_create_referral_codes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('referrals');\n        Schema::create('referrals', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('user_id')->nullable();\n            $table->string('code', 45)->unique();\n            $table->boolean('is_valid');\n            $table->timestamps();\n            $table->dateTime('revoked_at')->nullable();\n\n            $table->foreign('user_id')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('referrals');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_14_174144_create_referral_events_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('referral_events');\n        Schema::create('referral_events', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('referred_by')->nullable();\n            $table->tinyInteger('type')->default(1);\n            $table->timestamps();\n\n            $table->foreign('created_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('referred_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('referral_events');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_14_174215_update_users_referred_by.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n\n        Schema::table('users', function (Blueprint $table) {\n            $table->unsignedBigInteger('referred_by')->nullable();\n\n            $table->foreign('referred_by')->references('id')->on('referrals')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropForeign(['referred_by']);\n            $table->dropColumn('referred_by');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_15_224615_create_whiteboard_shapes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('whiteboard_shapes');\n        Schema::create('whiteboard_shapes', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedBigInteger('whiteboard_id');\n            $table->unsignedBigInteger('group_id')->nullable();\n\n            $table->string('type');\n            $table->bigInteger('x');\n            $table->bigInteger('y');\n            $table->bigInteger('scale_x');\n            $table->bigInteger('scale_y');\n            $table->bigInteger('width');\n            $table->bigInteger('height');\n            $table->bigInteger('rotation');\n            $table->bigInteger('z_index');\n            $table->boolean('is_locked')->default(false);\n\n            $table->json('shape');\n            $table->foreignId('created_by')->nullable()->nullOnDelete();\n            $table->foreignId('updated_by')->nullable()->nullOnDelete();\n            $table->foreignId('deleted_by')->nullable()->nullOnDelete();\n\n            $table->timestamps();\n            $table->softDeletes();\n            $table->foreign('whiteboard_id')->references('id')->on('whiteboards')->cascadeOnDelete();\n            $table->foreign('group_id')->references('id')->on('whiteboard_shapes')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('whiteboard_shapes');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_15_232603_create_whiteboard_strokes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('whiteboard_strokes', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('shape_id')->cascadeOnDelete();\n            $table->binary('points', 4294967295);\n            $table->string('color');\n            $table->unsignedBigInteger('width');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('whiteboard_strokes');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_23_204425_create_spotlights_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('spotlights', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('campaign_id');\n            $table->string('url');\n            $table->dateTime('featured_at');\n            $table->unsignedInteger('featured_by')->nullable();\n            $table->tinyInteger('status')->default(1);\n\n            $table->foreign('featured_by')->references('id')->on('users')->nullOnDelete();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('spotlights');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_23_205038_cleanup_old_spotlights.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            if (Schema::hasIndex('campaigns', 'campaigns_idx')) {\n                $table->dropIndex('campaigns_idx');\n            }\n            $table->index(['visibility_id', 'visible_entity_count', 'is_hidden'], 'campaigns_idx');\n            $table->dropColumn('is_featured');\n            $table->dropColumn('featured_until');\n            $table->dropColumn('featured_reason');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            //\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_23_211003_create_spotlight_survey_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('spotlight_contents', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->json('content_json')->nullable();\n            $table->unsignedTinyInteger('status')->default(1);\n            $table->timestamps();\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('created_by')->references('id')->on('users')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('spotlight_survey');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_30_100000_rename_description_to_entry_in_quest_elements_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('quest_elements', function (Blueprint $table) {\n            $table->renameColumn('description', 'entry');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('quest_elements', function (Blueprint $table) {\n            $table->renameColumn('entry', 'description');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_03_221238_create_playstyles_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('playstyles', function (Blueprint $table) {\n            $table->id();\n            $table->string('slug')->unique();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('playstyles');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_04_170050_migrate_organisation_locations_to_entity_locations.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * Migrate organisation, race, and creature locations from their individual\n     * pivot tables to the shared entity_locations table.\n     */\n    public function up(): void\n    {\n        if (! Schema::hasTable('organisation_location')) {\n            return;\n        }\n        // Migrate organisation locations\n        $organisations = DB::table('organisations')\n            ->join('entities', function ($join) {\n                $join->on('entities.entity_id', '=', 'organisations.id')\n                    ->where('entities.type_id', '=', config('entities.ids.organisation'));\n            })\n            ->join('organisation_location', 'organisation_location.organisation_id', '=', 'organisations.id')\n            ->select('entities.id as entity_id', 'organisation_location.location_id', 'entities.created_by')\n            ->get();\n\n        foreach ($organisations as $org) {\n            DB::table('entity_locations')->insert([\n                'entity_id' => $org->entity_id,\n                'location_id' => $org->location_id,\n                'created_by' => $org->created_by,\n                'created_at' => now(),\n                'updated_at' => now(),\n            ]);\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        // Note: This is a data migration. The down() method doesn't restore data\n        // from entity_locations back to the old pivot tables because that data\n        // is still preserved in the original tables.\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_04_170051_migrate_creature_locations_to_entity_locations.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * Migrate organisation, race, and creature locations from their individual\n     * pivot tables to the shared entity_locations table.\n     */\n    public function up(): void\n    {\n        if (! Schema::hasTable('creature_location')) {\n            return;\n        }\n        // Migrate creature locations\n        $creatures = DB::table('creatures')\n            ->join('entities', function ($join) {\n                $join->on('entities.entity_id', '=', 'creatures.id')\n                    ->where('entities.type_id', '=', config('entities.ids.creature'));\n            })\n            ->join('creature_location', 'creature_location.creature_id', '=', 'creatures.id')\n            ->select('entities.id as entity_id', 'creature_location.location_id', 'entities.created_by')\n            ->get();\n\n        foreach ($creatures as $creature) {\n            DB::table('entity_locations')->insert([\n                'entity_id' => $creature->entity_id,\n                'location_id' => $creature->location_id,\n                'created_by' => $creature->created_by,\n                'created_at' => now(),\n                'updated_at' => now(),\n            ]);\n        }\n\n        // Note: Old pivot tables are intentionally NOT dropped for safety.\n        // They can be removed in a later cleanup migration after verification.\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        // Note: This is a data migration. The down() method doesn't restore data\n        // from entity_locations back to the old pivot tables because that data\n        // is still preserved in the original tables.\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_04_170052_migrate_race_locations_to_entity_locations.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * Migrate organisation, race, and creature locations from their individual\n     * pivot tables to the shared entity_locations table.\n     */\n    public function up(): void\n    {\n        if (! Schema::hasTable('race_location')) {\n            return;\n        }\n        // Migrate race locations\n        $races = DB::table('races')\n            ->join('entities', function ($join) {\n                $join->on('entities.entity_id', '=', 'races.id')\n                    ->where('entities.type_id', '=', config('entities.ids.race'));\n            })\n            ->join('race_location', 'race_location.race_id', '=', 'races.id')\n            ->select('entities.id as entity_id', 'race_location.location_id', 'entities.created_by')\n            ->get();\n\n        foreach ($races as $race) {\n            DB::table('entity_locations')->insert([\n                'entity_id' => $race->entity_id,\n                'location_id' => $race->location_id,\n                'created_by' => $race->created_by,\n                'created_at' => now(),\n                'updated_at' => now(),\n            ]);\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        // Note: This is a data migration. The down() method doesn't restore data\n        // from entity_locations back to the old pivot tables because that data\n        // is still preserved in the original tables.\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_04_213616_create_campaign_filters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('campaign_filters', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('campaign_id');\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->unsignedTinyInteger('type');\n            $table->text('entry')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::dropIfExists('campaign_filters');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_05_074106_create_campaign_playstyle_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('campaign_playstyle', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('campaign_id');\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->unsignedBigInteger('playstyle_id');\n            $table->foreign('playstyle_id')->references('id')->on('playstyles')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('campaign_playstyle');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_06_185348_update_entities_force_name.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        DB::update('UPDATE entities SET name = id WHERE name = \\'\\' or name is NULL');\n        Schema::table('entities', function (Blueprint $table) {\n            $table->string('name')->nullable(false)->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->string('name')->nullable()->change();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_06_190751_add_entity_id_index_to_entities.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->index('entity_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropIndex(['entity_id']);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_06_190754_add_composite_index_to_entity_tags.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_tags', function (Blueprint $table) {\n            $table->index(['entity_id', 'tag_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_tags', function (Blueprint $table) {\n            $table->dropIndex(['entity_id', 'tag_id']);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_06_190757_add_deleted_at_index_to_soft_delete_tables.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /** @var list<string> */\n    protected array $tables = [\n        'attribute_templates',\n        'calendars',\n        'campaign_boosts',\n        'campaign_styles',\n        'characters',\n        'conversations',\n        'creatures',\n        'dice_rolls',\n        'events',\n        'families',\n        'items',\n        'journals',\n        'locations',\n        'maps',\n        'notes',\n        'organisations',\n        'plugins',\n        'quests',\n        'races',\n        'tags',\n        'themes',\n        'timelines',\n        'whiteboards',\n        'whiteboard_shapes',\n    ];\n\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        foreach ($this->tables as $tableName) {\n            if (! Schema::hasTable($tableName)) {\n                continue;\n            }\n            Schema::table($tableName, function (Blueprint $table) {\n                $table->index('deleted_at');\n            });\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        foreach ($this->tables as $tableName) {\n            if (! Schema::hasTable($tableName)) {\n                continue;\n            }\n            Schema::table($tableName, function (Blueprint $table) {\n                $table->dropIndex(['deleted_at']);\n            });\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_07_072211_update_applications_add_new_fields.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('applications', function (Blueprint $table) {\n            $table->text('character_concept')->nullable();\n            $table->tinyInteger('experience')->default(0);\n            $table->json('availability_days')->nullable();\n            $table->time('time_start')->nullable();\n            $table->time('time_end')->nullable();\n            $table->string('timezone')->nullable();\n            $table->tinyInteger('pref_rp_combat')->default(1);\n            $table->tinyInteger('pref_tone')->default(1);\n            $table->string('external_link')->nullable();\n            $table->string('additional_notes')->nullable();\n            $table->tinyInteger('status')->default(0);\n            $table->index(['status']);\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('applications', function (Blueprint $table) {\n            $table->dropIndex(['status']);\n            $table->dropColumn([\n                'character_concept', 'experience', 'availability_days',\n                'time_start', 'time_end', 'timezone',\n                'pref_rp_combat', 'pref_tone', 'external_link', 'additional_notes',\n                'status',\n            ]);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_11_162437_add_alias_config.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->boolean('aliases')->default(true);\n            $table->renameColumn('assets', 'media');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaign_settings', function (Blueprint $table) {\n            $table->dropColumn('aliases');\n            $table->renameColumn('media', 'assets');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_16_155432_create_campaign_events_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::dropIfExists('campaign_events');\n        Schema::create('campaign_events', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('created_by')->nullable();\n            $table->string('event');\n            $table->json('metadata')->nullable();\n            $table->timestamps();\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('created_by')->references('id')->on('users')->cascadeOnDelete();\n\n            $table->index(['campaign_id', 'event']);\n            $table->index(['campaign_id', 'created_at']);\n            $table->index('event');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('campaign_events');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_16_215608_update_entities_add_source.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->string('source', 20)->default('user')->index();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropColumn('source');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_16_232044_fix_users_referred_by_foreign_key.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropForeign(['referred_by']);\n            $table->dropColumn('referred_by');\n            $table->unsignedInteger('referred_by')->nullable();\n            $table->foreign('referred_by')->references('id')->on('users')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropForeign(['referred_by']);\n            $table->dropColumn('referred_by');\n            $table->unsignedBigInteger('referred_by')->nullable();\n            $table->foreign('referred_by')->references('id')->on('referrals')->nullOnDelete();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_23_193432_add_prioritised_to_campaigns.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->boolean('is_prioritised')->default(false)->after('is_open');\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn('is_prioritised');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_03_225300_update_characters_is_dead_to_tinyinteger.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->tinyInteger('is_dead')->unsigned()->default(0)->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->boolean('is_dead')->default(false)->change();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_04_044125_update_quests_is_completed_to_tinyinteger.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        DB::table('quests')->where('is_completed', 1)->update(['is_completed' => 2]);\n\n        Schema::table('quests', function (Blueprint $table) {\n            $table->tinyInteger('is_completed')->unsigned()->default(0)->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        DB::table('quests')->where('is_completed', 2)->update(['is_completed' => 1]);\n        DB::table('quests')->where('is_completed', '>', 1)->update(['is_completed' => 0]);\n\n        Schema::table('quests', function (Blueprint $table) {\n            $table->boolean('is_completed')->default(false)->change();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_05_184417_migrate_event_locations_to_entity_locations.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        // Clean up any partial inserts from a previous failed run\n        DB::table('entity_locations')\n            ->whereIn('entity_id', function ($query) {\n                $query->select('entities.id')\n                    ->from('entities')\n                    ->where('entities.type_id', '=', config('entities.ids.event'));\n            })\n            ->delete();\n\n        $events = DB::table('events')\n            ->join('entities', function ($join) {\n                $join->on('entities.entity_id', '=', 'events.id')\n                    ->where('entities.type_id', '=', config('entities.ids.event'));\n            })\n            ->join('locations', 'locations.id', '=', 'events.location_id')\n            ->whereNotNull('events.location_id')\n            ->select('entities.id as entity_id', 'events.location_id', 'entities.created_by')\n            ->get();\n\n        foreach ($events as $event) {\n            DB::table('entity_locations')->insert([\n                'entity_id' => $event->entity_id,\n                'location_id' => $event->location_id,\n                'created_by' => $event->created_by,\n                'created_at' => now(),\n                'updated_at' => now(),\n            ]);\n        }\n\n        Schema::table('events', function (Blueprint $table) {\n            $table->dropColumn('location_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('events', function (Blueprint $table) {\n            $table->integer('location_id')->unsigned()->nullable();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_05_214251_update_characters_pinned_defaults.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->boolean('is_appearance_pinned')->default(1)->change();\n            $table->boolean('is_personality_pinned')->default(1)->change();\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->boolean('is_appearance_pinned')->default(0)->change();\n            $table->boolean('is_personality_pinned')->default(0)->change();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_06_140442_rename_characters_is_dead_to_status.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->renameColumn('is_dead', 'status_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->renameColumn('status_id', 'is_dead');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_06_140443_rename_quests_is_completed_to_status.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('quests', function (Blueprint $table) {\n            $table->renameColumn('is_completed', 'status_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('quests', function (Blueprint $table) {\n            $table->renameColumn('status_id', 'is_completed');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_09_224121_add_copy_entity_entry_to_quest_elements_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('quest_elements', function (Blueprint $table) {\n            $table->boolean('copy_entity_entry')->nullable()->default(false);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('quest_elements', function (Blueprint $table) {\n            $table->dropColumn('copy_entity_entry');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_11_224335_add_icon_to_tags_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('tags', function (Blueprint $table) {\n            $table->string('icon', 100)->nullable()->after('colour');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('tags', function (Blueprint $table) {\n            $table->dropColumn('icon');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_12_172704_add_title_to_locations_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('locations', function (Blueprint $table) {\n            $table->string('title')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('locations', function (Blueprint $table) {\n            $table->dropColumn('title');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_16_170743_update_cancellations_add_secondary.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        if (! Schema::hasTable('subscription_cancellations')) {\n            return;\n        }\n        Schema::table('subscription_cancellations', function (Blueprint $table) {\n            $table->string('secondary')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('subscription_cancellations', function (Blueprint $table) {\n            $table->dropColumn('secondary');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_16_211952_create_entity_listing_preferences_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('entity_listing_preferences', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('user_id');\n            $table->unsignedInteger('campaign_id');\n            $table->unsignedInteger('type_id');\n            $table->json('visible_columns')->nullable();\n            $table->string('layout', 10)->nullable();\n            $table->boolean('nested')->nullable();\n            $table->timestamps();\n\n            $table->unique(['user_id', 'campaign_id', 'type_id'], 'listing_pref_unique');\n            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n            $table->foreign('type_id')->references('id')->on('entity_types')->cascadeOnDelete();\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::dropIfExists('entity_listing_preferences');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_17_000001_migrate_parent_ids_to_entities.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        $models = [\n            'abilities' => ['key' => 'ability_id',            'type_id' => config('entities.ids.ability')],\n            'attribute_templates' => ['key' => 'attribute_template_id', 'type_id' => config('entities.ids.attribute_template')],\n            'calendars' => ['key' => 'calendar_id',           'type_id' => config('entities.ids.calendar')],\n            'creatures' => ['key' => 'creature_id',           'type_id' => config('entities.ids.creature')],\n            'events' => ['key' => 'event_id',              'type_id' => config('entities.ids.event')],\n            'families' => ['key' => 'family_id',             'type_id' => config('entities.ids.family')],\n            'items' => ['key' => 'item_id',               'type_id' => config('entities.ids.item')],\n            'journals' => ['key' => 'journal_id',            'type_id' => config('entities.ids.journal')],\n            'locations' => ['key' => 'location_id',           'type_id' => config('entities.ids.location')],\n            'maps' => ['key' => 'map_id',                'type_id' => config('entities.ids.map')],\n            'notes' => ['key' => 'note_id',               'type_id' => config('entities.ids.note')],\n            'organisations' => ['key' => 'organisation_id',       'type_id' => config('entities.ids.organisation')],\n            'quests' => ['key' => 'quest_id',              'type_id' => config('entities.ids.quest')],\n            'races' => ['key' => 'race_id',               'type_id' => config('entities.ids.race')],\n            'tags' => ['key' => 'tag_id',                'type_id' => config('entities.ids.tag')],\n            'timelines' => ['key' => 'timeline_id',           'type_id' => config('entities.ids.timeline')],\n        ];\n\n        foreach ($models as $table => $config) {\n            DB::statement(\"\n                UPDATE entities e\n                JOIN {$table} c ON e.entity_id = c.id AND e.type_id = {$config['type_id']}\n                JOIN {$table} parent_child ON c.{$config['key']} = parent_child.id\n                JOIN entities parent_entity ON parent_entity.entity_id = parent_child.id\n                    AND parent_entity.type_id = {$config['type_id']}\n                SET e.parent_id = parent_entity.id\n                WHERE c.{$config['key']} IS NOT NULL\n                    AND e.parent_id IS NULL\n            \");\n        }\n    }\n\n    public function down(): void\n    {\n        // The old child table columns still exist, so no data is lost.\n        // Nullify entities.parent_id for standard types only.\n        $standardTypeIds = [\n            config('entities.ids.ability'),\n            config('entities.ids.attribute_template'),\n            config('entities.ids.calendar'),\n            config('entities.ids.creature'),\n            config('entities.ids.event'),\n            config('entities.ids.family'),\n            config('entities.ids.item'),\n            config('entities.ids.journal'),\n            config('entities.ids.location'),\n            config('entities.ids.map'),\n            config('entities.ids.note'),\n            config('entities.ids.organisation'),\n            config('entities.ids.quest'),\n            config('entities.ids.race'),\n            config('entities.ids.tag'),\n            config('entities.ids.timeline'),\n        ];\n\n        DB::table('entities')\n            ->whereIn('type_id', $standardTypeIds)\n            ->update(['parent_id' => null]);\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_17_000002_drop_parent_columns_from_child_tables.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        $columns = [\n            'abilities' => 'ability_id',\n            'attribute_templates' => 'attribute_template_id',\n            'calendars' => 'calendar_id',\n            'creatures' => 'creature_id',\n            'events' => 'event_id',\n            'families' => 'family_id',\n            'items' => 'item_id',\n            'journals' => 'journal_id',\n            'maps' => 'map_id',\n            'notes' => 'note_id',\n            'organisations' => 'organisation_id',\n            'quests' => 'quest_id',\n            'races' => 'race_id',\n            'tags' => 'tag_id',\n            'timelines' => 'timeline_id',\n        ];\n\n        foreach ($columns as $table => $column) {\n            if (Schema::hasColumn($table, $column)) {\n                Schema::table($table, function (Blueprint $table) use ($column) {\n                    $table->dropForeign($table->getTable() . '_' . $column . '_foreign');\n                    $table->dropColumn($column);\n                });\n            }\n        }\n\n        Schema::table('locations', function (Blueprint $table) {\n            $table->dropForeign('locations_location_id_foreign');\n            $table->dropForeign('locations_parent_location_id_foreign');\n            $table->dropColumn('location_id');\n        });\n    }\n\n    public function down(): void\n    {\n        $columns = [\n            'abilities' => 'ability_id',\n            'attribute_templates' => 'attribute_template_id',\n            'calendars' => 'calendar_id',\n            'creatures' => 'creature_id',\n            'events' => 'event_id',\n            'families' => 'family_id',\n            'items' => 'item_id',\n            'journals' => 'journal_id',\n            'locations' => 'location_id',\n            'maps' => 'map_id',\n            'notes' => 'note_id',\n            'organisations' => 'organisation_id',\n            'quests' => 'quest_id',\n            'races' => 'race_id',\n            'tags' => 'tag_id',\n            'timelines' => 'timeline_id',\n        ];\n\n        foreach ($columns as $table => $column) {\n            Schema::table($table, function (Blueprint $table) use ($column) {\n                $table->unsignedInteger($column)->nullable();\n            });\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_17_092044_create_item_creator_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('item_creator', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('item_id');\n            $table->unsignedInteger('creator_id');\n            $table->timestamps();\n\n            $table->foreign('item_id')->references('id')->on('items')->cascadeOnDelete();\n            $table->foreign('creator_id')->references('id')->on('entities')->cascadeOnDelete();\n        });\n\n        // Migrate existing creator_id data to the pivot table\n        DB::statement('\n            INSERT INTO item_creator (item_id, creator_id, created_at, updated_at)\n            SELECT id, creator_id, NOW(), NOW()\n            FROM items\n            WHERE creator_id IS NOT NULL\n        ');\n\n        Schema::table('items', function (Blueprint $table) {\n            $table->dropForeign(['creator_id']);\n            $table->dropColumn('creator_id');\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('items', function (Blueprint $table) {\n            $table->unsignedInteger('creator_id')->nullable();\n            $table->foreign('creator_id')->references('id')->on('entities')->cascadeOnDelete();\n        });\n\n        // Migrate first creator back to the items table\n        DB::statement('\n            UPDATE items\n            INNER JOIN (\n                SELECT item_id, MIN(creator_id) as creator_id\n                FROM item_creator\n                GROUP BY item_id\n            ) ic ON items.id = ic.item_id\n            SET items.creator_id = ic.creator_id\n        ');\n\n        Schema::dropIfExists('item_creator');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_18_152531_add_per_page_to_entity_listing_preferences_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entity_listing_preferences', function (Blueprint $table) {\n            $table->unsignedSmallInteger('per_page')->nullable()->after('nested');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entity_listing_preferences', function (Blueprint $table) {\n            $table->dropColumn('per_page');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_23_193613_convert_tag_colours_to_hex.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        DB::table('tags')\n            ->whereIn('colour', [\n                'red', 'yellow', 'brown', 'aqua', 'light-blue',\n                'green', 'navy', 'teal', 'orange', 'purple',\n                'maroon', 'grey', 'gray', 'pink', 'black',\n            ])\n            ->update([\n                'colour' => DB::raw(\"CASE colour\n                    WHEN 'red' THEN 'D93D33'\n                    WHEN 'yellow' THEN 'f39c12'\n                    WHEN 'brown' THEN 'a35831'\n                    WHEN 'aqua' THEN '00829B'\n                    WHEN 'light-blue' THEN '3A7CAD'\n                    WHEN 'green' THEN '058943'\n                    WHEN 'navy' THEN '001F3F'\n                    WHEN 'teal' THEN '2D8289'\n                    WHEN 'orange' THEN 'C85208'\n                    WHEN 'purple' THEN '605ca8'\n                    WHEN 'maroon' THEN 'D81B60'\n                    WHEN 'grey' THEN '797676'\n                    WHEN 'gray' THEN '797676'\n                    WHEN 'pink' THEN 'C822D7'\n                    WHEN 'black' THEN '111111'\n                    ELSE colour\n                END\"),\n            ]);\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        DB::table('tags')\n            ->whereIn('colour', [\n                'D93D33', 'f39c12', 'a35831', '00829B', '3A7CAD',\n                '058943', '001F3F', '2D8289', 'C85208', '605ca8',\n                'D81B60', '797676', 'C822D7', '111111',\n            ])\n            ->update([\n                'colour' => DB::raw(\"CASE colour\n                    WHEN 'D93D33' THEN 'red'\n                    WHEN 'f39c12' THEN 'yellow'\n                    WHEN 'a35831' THEN 'brown'\n                    WHEN '00829B' THEN 'aqua'\n                    WHEN '3A7CAD' THEN 'light-blue'\n                    WHEN '058943' THEN 'green'\n                    WHEN '001F3F' THEN 'navy'\n                    WHEN '2D8289' THEN 'teal'\n                    WHEN 'C85208' THEN 'orange'\n                    WHEN '605ca8' THEN 'purple'\n                    WHEN 'D81B60' THEN 'maroon'\n                    WHEN '797676' THEN 'grey'\n                    WHEN 'C822D7' THEN 'pink'\n                    WHEN '111111' THEN 'black'\n                    ELSE colour\n                END\"),\n            ]);\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_26_000001_create_category_statuses_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('category_statuses', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('category_id');\n            $table->string('key', 45);\n            $table->string('icon', 45)->nullable();\n            $table->unsignedTinyInteger('sort_order')->default(0);\n            $table->boolean('is_default')->default(false);\n\n            $table->foreign('category_id')->references('id')->on('entity_types')->cascadeOnDelete();\n            $table->unique(['category_id', 'key']);\n            $table->index('sort_order');\n            $table->index('is_default');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('category_statuses');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_26_000002_add_status_id_to_entities_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->unsignedInteger('status_id')->nullable();\n\n            $table->foreign('status_id')->references('id')->on('category_statuses')->nullOnDelete();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('entities', function (Blueprint $table) {\n            $table->dropForeign(['status_id']);\n            $table->dropColumn('status_id');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_04_03_164253_update_features_add_meta.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('features', function (Blueprint $table) {\n            $table->json('meta')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('features', function (Blueprint $table) {\n            $table->dropColumn('meta');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_04_03_215445_create_campaign_descriptions_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('campaign_descriptions', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedInteger('campaign_id')->unique();\n            $table->longText('description')->nullable();\n            $table->text('excerpt')->nullable();\n            $table->timestamps();\n\n            $table->foreign('campaign_id')->references('id')->on('campaigns')->cascadeOnDelete();\n        });\n\n        // Copy existing entry and excerpt data into the new table\n        DB::statement('\n            INSERT INTO campaign_descriptions (campaign_id, description, excerpt, created_at, updated_at)\n            SELECT id, entry, excerpt, NOW(), NOW()\n            FROM campaigns\n            WHERE entry IS NOT NULL OR excerpt IS NOT NULL\n        ');\n\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn(['entry', 'excerpt']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->longText('entry')->nullable();\n            $table->text('excerpt')->nullable();\n        });\n\n        DB::statement('\n            UPDATE campaigns c\n            INNER JOIN campaign_descriptions cd ON cd.campaign_id = c.id\n            SET c.entry = cd.description, c.excerpt = cd.excerpt\n        ');\n\n        Schema::dropIfExists('campaign_descriptions');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_05_08_181031_drop_old_status_columns.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->dropColumn('status_id');\n        });\n\n        Schema::table('quests', function (Blueprint $table) {\n            $table->dropColumn('status_id');\n        });\n\n        Schema::table('creatures', function (Blueprint $table) {\n            $table->dropColumn('is_dead');\n            $table->dropColumn('is_extinct');\n        });\n\n        Schema::table('locations', function (Blueprint $table) {\n            $table->dropColumn('is_destroyed');\n        });\n\n        Schema::table('organisations', function (Blueprint $table) {\n            $table->dropColumn('is_defunct');\n        });\n\n        Schema::table('races', function (Blueprint $table) {\n            $table->dropColumn('is_extinct');\n        });\n\n        Schema::table('families', function (Blueprint $table) {\n            $table->dropColumn('is_extinct');\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('characters', function (Blueprint $table) {\n            $table->unsignedTinyInteger('status_id')->default(0);\n        });\n\n        Schema::table('quests', function (Blueprint $table) {\n            $table->unsignedTinyInteger('status_id')->default(0);\n        });\n\n        Schema::table('creatures', function (Blueprint $table) {\n            $table->boolean('is_dead')->default(false);\n            $table->boolean('is_extinct')->default(false);\n        });\n\n        Schema::table('locations', function (Blueprint $table) {\n            $table->boolean('is_destroyed')->default(false);\n        });\n\n        Schema::table('organisations', function (Blueprint $table) {\n            $table->boolean('is_defunct')->default(false);\n        });\n\n        Schema::table('races', function (Blueprint $table) {\n            $table->boolean('is_extinct')->default(false);\n        });\n\n        Schema::table('families', function (Blueprint $table) {\n            $table->boolean('is_extinct')->default(false);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_05_08_181951_drop_audit_columns_from_creatures_races_whiteboards.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('creatures', function (Blueprint $table) {\n            $table->dropForeign('creatures_created_by_foreign');\n            $table->dropForeign('creatures_updated_by_foreign');\n            $table->dropColumn(['created_by', 'updated_by']);\n        });\n\n        Schema::table('races', function (Blueprint $table) {\n            $table->dropForeign('races_created_by_foreign');\n            $table->dropForeign('races_updated_by_foreign');\n            $table->dropColumn(['created_by', 'updated_by']);\n        });\n\n        Schema::table('whiteboards', function (Blueprint $table) {\n            $table->dropColumn(['created_by', 'updated_by', 'deleted_by']);\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('creatures', function (Blueprint $table) {\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::table('races', function (Blueprint $table) {\n            $table->unsignedInteger('created_by')->nullable();\n            $table->unsignedInteger('updated_by')->nullable();\n            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::table('whiteboards', function (Blueprint $table) {\n            $table->foreignId('created_by')->nullable()->nullOnDelete();\n            $table->foreignId('updated_by')->nullable()->nullOnDelete();\n            $table->foreignId('deleted_by')->nullable()->nullOnDelete();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_05_08_183610_drop_system_and_is_discreet_from_campaigns.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn(['system', 'is_discreet']);\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->string('system')->nullable();\n            $table->boolean('is_discreet')->default(false);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_05_08_185251_drop_follower_from_campaigns.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn('follower');\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->unsignedInteger('follower')->default(0);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_05_08_190847_drop_export_date_from_campaigns.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->dropColumn('export_date');\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::table('campaigns', function (Blueprint $table) {\n            $table->date('export_date')->nullable();\n        });\n    }\n};\n"
  },
  {
    "path": "database/seeders/CategoryStatusSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\EntityType;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CategoryStatusSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        $statuses = [\n            'character' => [\n                ['key' => 'alive', 'icon' => null, 'sort_order' => 1, 'is_default' => true],\n                ['key' => 'missing', 'icon' => 'fa-question', 'sort_order' => 2, 'is_default' => false],\n                ['key' => 'dead', 'icon' => 'fa-skull', 'sort_order' => 3, 'is_default' => false],\n            ],\n            'creature' => [\n                ['key' => 'dead', 'icon' => 'fa-skull', 'sort_order' => 1, 'is_default' => false],\n                ['key' => 'extinct', 'icon' => 'fa-skull-crossbones', 'sort_order' => 2, 'is_default' => false],\n            ],\n            'location' => [\n                ['key' => 'destroyed', 'icon' => 'fa-house-crack', 'sort_order' => 1, 'is_default' => false],\n            ],\n            'race' => [\n                ['key' => 'extinct', 'icon' => 'fa-skull-crossbones', 'sort_order' => 1, 'is_default' => false],\n            ],\n            'quest' => [\n                ['key' => 'not_started', 'icon' => null, 'sort_order' => 1, 'is_default' => true],\n                ['key' => 'ongoing', 'icon' => 'fa-spinner', 'sort_order' => 2, 'is_default' => false],\n                ['key' => 'completed', 'icon' => 'fa-check', 'sort_order' => 3, 'is_default' => false],\n                ['key' => 'abandoned', 'icon' => 'fa-ban', 'sort_order' => 4, 'is_default' => false],\n            ],\n            'family' => [\n                ['key' => 'extinct', 'icon' => 'fa-skull-crossbones', 'sort_order' => 1, 'is_default' => false],\n            ],\n            'organisation' => [\n                ['key' => 'defunct', 'icon' => 'fa-ban', 'sort_order' => 1, 'is_default' => false],\n            ],\n            'item' => [\n                ['key' => 'owned', 'icon' => null, 'sort_order' => 1, 'is_default' => false],\n                ['key' => 'lost', 'icon' => 'fa-question', 'sort_order' => 2, 'is_default' => false],\n                ['key' => 'destroyed', 'icon' => 'fa-house-crack', 'sort_order' => 3, 'is_default' => false],\n            ],\n        ];\n\n        foreach ($statuses as $code => $categoryStatuses) {\n            $entityType = EntityType::where('code', $code)->first();\n            if (! $entityType) {\n                continue;\n            }\n\n            foreach ($categoryStatuses as $status) {\n                DB::table('category_statuses')->updateOrInsert(\n                    [\n                        'category_id' => $entityType->id,\n                        'key' => $status['key'],\n                    ],\n                    [\n                        'icon' => $status['icon'],\n                        'sort_order' => $status['sort_order'],\n                        'is_default' => $status['is_default'],\n                    ]\n                );\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/DatabaseSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->call(EntityEventTypeSeeder::class);\n        $this->call(EntityTypesTableSeeder::class);\n        $this->call(CategoryStatusSeeder::class);\n        $this->call(PresetTypeTableSeeder::class);\n        $this->call(GameSystemSeeder::class);\n        $this->call(ThemesTableSeeder::class);\n        $this->call(RolesTableSeeder::class);\n        $this->call(VisibilitiesTableSeeder::class);\n        $this->call(GenreTableSeeder::class);\n        $this->call(PostLayoutTableSeeder::class);\n        $this->call(FeatureCategorySeeder::class);\n        $this->call(FeatureStatusSeeder::class);\n        $this->call(TierSeeder::class);\n        $this->call(PlaystyleSeeder::class);\n    }\n}\n"
  },
  {
    "path": "database/seeders/EntityEventTypeSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Enums\\EntityEventTypes;\nuse App\\Models\\EntityEventType;\nuse Illuminate\\Database\\Seeder;\n\nclass EntityEventTypeSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $types = [EntityEventTypes::birth, EntityEventTypes::death, EntityEventTypes::calendarDate, EntityEventTypes::founded];\n        $created = 0;\n        foreach ($types as $type) {\n            $exists = EntityEventType::query()->where('id', $type->value)->exists();\n            if (! $exists) {\n                EntityEventType::query()->insert(['id' => $type->value, 'name' => $type->name]);\n                $created++;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/EntityTypesTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\EntityType;\nuse Illuminate\\Database\\Seeder;\n\nclass EntityTypesTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $types = [\n            'character' => 'fa-user',\n            'family' => 'fa-family',\n            'location' => 'fa-circle-location-arrow',\n            'organisation' => 'fa-screen-users',\n            'item' => 'fa-gem',\n            'note' => 'fa-book-open',\n            'event' => 'fa-cake-candles',\n            'calendar' => 'fa-calendar',\n            'race' => 'fa-person-fairy',\n            'quest' => 'fa-sign-hanging',\n            'journal' => 'fa-books',\n            'tag' => 'fa-tags',\n            'dice_roll' => 'fa-dice',\n            'conversation' => 'fa-comments',\n            'attribute_template' => 'fa-file-export',\n            'ability' => 'fa-fire',\n            'map' => 'fa-map',\n            'timeline' => 'fa-list-timeline',\n            'bookmark' => 'fa-bookmark',\n            'creature' => 'fa-deer',\n            'whiteboard' => 'fa-chalkboard',\n        ];\n        $position = 1;\n        $created = 0;\n        foreach ($types as $code => $icon) {\n            $type = EntityType::default()->firstOrNew([\n                'code' => $code,\n            ]);\n            //            if (! $type->exists) {\n            //                continue;\n            //            }\n            $type->fill([\n                'code' => $code,\n                'is_enabled' => true,\n                'is_special' => false,\n                'position' => $position,\n                'icon' => $icon,\n            ])->save();\n            $created++;\n            $position++;\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/FeatureCategorySeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\FeatureCategory;\nuse Illuminate\\Database\\Seeder;\n\nclass FeatureCategorySeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $cats = [\n            'Entities',\n            'Search',\n            'Layout',\n            'Account',\n            'Pricing',\n            'Marketplace',\n            'API',\n            'Other',\n        ];\n        foreach ($cats as $cat) {\n            $c = FeatureCategory::firstOrNew([\n                'name' => $cat,\n            ]);\n            $c->save();\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/FeatureStatusSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\FeatureStatus;\nuse Illuminate\\Database\\Seeder;\n\nclass FeatureStatusSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $stats = [\n            'draft',\n            'rejected',\n            'approved',\n            'later',\n            'next',\n            'now',\n            'done',\n        ];\n        foreach ($stats as $stat) {\n            $s = FeatureStatus::firstOrNew([\n                'name' => $stat,\n            ]);\n            $s->save();\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/GameSystemSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\GameSystem;\nuse Illuminate\\Database\\Seeder;\n\nclass GameSystemSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        $genres = [\n            'D&D', 'D&D 5e', 'D&D 3.5', 'D&D 3', 'D&D 4', 'AD&D 2',\n            'Pathfinder', 'Pathfinder 2e',\n            'Savage Worlds',\n            'Chronicles of Darkness',\n            'GURPS',\n            'Fate',\n            'Dungeon World',\n            'DSA',\n            'Powered by the Apocalypse',\n            'Ordem Paranormal',\n            'Starfinder',\n            'Genesys',\n            'Shadowrun',\n            'Starts Without Numbers',\n            'Call of Cthulu',\n            'World of Darkness',\n            'Cyberpunk Red',\n            'Ironsworn',\n            'Blades in the Dark',\n            'Homebrew',\n            'Other',\n            'Forbidden Lands',\n            'Traveller',\n            'Cypther System',\n            'Vampire the Masquerade',\n            'Lancer',\n            'Tormenta 20',\n            'Fabula Ultima',\n            'Cyberpunk 2020',\n            'Symbaroum',\n            'Warhammer',\n            '13th Age',\n            'Monster of the Week',\n            'Mythras',\n            'Numenera',\n            'Cortex Prime',\n            'Legend of the Five Rings',\n            '7th Sea',\n            'Fantasy AGE',\n            'Knight',\n            'Star Wars',\n            'Tales from the Loop',\n            'The One Ring',\n            'Year Zero Engine',\n            'Exalted',\n            'Mörk Borg',\n            'Mutant Year Zero',\n            'None',\n            'Pendragon',\n            'Witcher',\n            'OSR',\n            'Zweihander',\n            'Delta Green',\n            'Earthdawn',\n            'Masks',\n        ];\n        foreach ($genres as $name) {\n            $genre = GameSystem::firstOrNew([\n                'name' => $name,\n            ]);\n            if ($genre->exists) {\n                continue;\n            }\n            $genre->fill([\n                'name' => $name,\n            ])->save();\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/GenreTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Genre;\nuse Illuminate\\Database\\Seeder;\n\nclass GenreTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        $genres = ['alternate_history', 'cyberpunk', 'fantasy', 'historical', 'many_worlds', 'modern', 'occult', 'post_apocalyptic', 'pulp', 'science_fiction', 'science_fantasy', 'space_opera', 'steampunk', 'superhero', 'urban_fantasy', 'western'];\n        foreach ($genres as $name) {\n            $genre = Genre::firstOrNew([\n                'slug' => $name,\n            ]);\n            if ($genre->exists) {\n                continue;\n            }\n            $genre->fill([\n                'slug' => $name,\n            ])->save();\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/PlaystyleSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Playstyle;\nuse Illuminate\\Database\\Seeder;\n\nclass PlaystyleSeeder extends Seeder\n{\n    public function run(): void\n    {\n        $slugs = [\n            'roleplay-heavy',\n            'roleplay-light',\n            'story-driven',\n            'combat-focused',\n            'exploration-focused',\n            'sandbox-player-driven',\n            'linear-gm-led',\n            'tactical-crunchy',\n            'rules-light',\n            'narrative-first',\n            'character-focused',\n            'casual-drop-in-friendly',\n            'serious-immersive',\n            'long-term-campaign',\n            'episodic-one-shot-friendly',\n        ];\n\n        foreach ($slugs as $slug) {\n            Playstyle::firstOrCreate(\n                ['slug' => $slug],\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/PostLayoutTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PostLayout;\nuse Illuminate\\Database\\Seeder;\n\n// use App\\Models\\PostLayout;\n\nclass PostLayoutTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        $layouts = ['abilities', 'assets', 'attributes', 'connection_map', 'inventory', 'character_orgs', 'quest_elements', 'location_characters', 'location_events', 'reminders', 'location_quests', 'children'];\n        foreach ($layouts as $code) {\n            $entity_type = null;\n            if ($code == 'character_orgs') {\n                $entity_type = config('entities.ids.character');\n            } elseif ($code == 'quest_elements') {\n                $entity_type = config('entities.ids.quest');\n            } elseif (in_array($code, ['location_characters', 'location_events', 'location_quests'])) {\n                $entity_type = config('entities.ids.location');\n            }\n\n            $layout = PostLayout::firstOrNew([\n                'code' => $code,\n            ]);\n            if (! $layout->exists) {\n                $layout->fill([\n                    'code' => $code,\n                    'entity_type_id' => $entity_type,\n                ])->save();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/PresetTypeTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PresetType;\nuse Illuminate\\Database\\Seeder;\n\nclass PresetTypeTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $types = ['marker'];\n        $created = 0;\n        foreach ($types as $name) {\n            $type = PresetType::firstOrNew([\n                'code' => $name,\n            ]);\n            if (! $type->exists) {\n                $type->fill([\n                    'code' => $name,\n                ])->save();\n                $created++;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/RolesTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Pledge;\nuse App\\Models\\Role;\nuse Illuminate\\Database\\Seeder;\n\nclass RolesTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        $role = Role::firstOrNew(['name' => 'admin']);\n        if (! $role->exists) {\n            $role->fill([\n                'display_name' => 'Administrator',\n            ])->save();\n        }\n\n        $role = Role::firstOrNew(['name' => 'user']);\n        if (! $role->exists) {\n            $role->fill([\n                'display_name' => 'Normal User',\n            ])->save();\n        }\n\n        $role = Role::firstOrNew(['name' => 'translator']);\n        if (! $role->exists) {\n            $role->fill([\n                'display_name' => 'Translator',\n            ])->save();\n        }\n\n        $role = Role::firstOrNew(['name' => 'api']);\n        if (! $role->exists) {\n            $role->fill([\n                'display_name' => 'Api',\n            ])->save();\n        }\n\n        $role = Role::firstOrNew(['name' => Pledge::ROLE]);\n        if (! $role->exists) {\n            $role->fill([\n                'display_name' => 'Patreon',\n            ])->save();\n        }\n\n        $role = Role::firstOrNew(['name' => 'partner']);\n        if (! $role->exists) {\n            $role->fill([\n                'display_name' => 'Partner',\n            ])->save();\n        }\n\n        $role = Role::firstOrNew(['name' => 'wordsmith']);\n        if (! $role->exists) {\n            $role->fill([\n                'display_name' => 'Wordsmith',\n            ])->save();\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/ThemesTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Theme;\nuse Illuminate\\Database\\Seeder;\n\nclass ThemesTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $themes = ['default', 'dark', 'midnight'];\n        $created = 0;\n        foreach ($themes as $theme) {\n            $type = Theme::firstOrNew([\n                'name' => $theme,\n            ]);\n            if (! $type->exists) {\n                $type->fill([\n                    'name' => $theme,\n                ])->save();\n                $created++;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/TierPricingSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Enums\\PricingPeriod;\nuse App\\Models\\Tier;\nuse App\\Models\\TierPrice;\nuse Illuminate\\Database\\Seeder;\n\nclass TierPricingSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        TierPrice::truncate();\n\n        $this->owlbear()->wyvern()->elemental();\n\n    }\n\n    protected function owlbear(): self\n    {\n        /** @var Tier $tier */\n        $tier = Tier::where('name', 'Owlbear')->first();\n        foreach (['eur', 'usd'] as $currency) {\n            TierPrice::create([\n                'currency' => $currency,\n                'period' => PricingPeriod::Monthly,\n                'cost' => 4.99,\n                'tier_id' => $tier->id,\n                'stripe_id' => config('subscription.owlbear.' . $currency . '.monthly'),\n            ]);\n            TierPrice::create([\n                'currency' => $currency,\n                'period' => PricingPeriod::Yearly,\n                'cost' => 49.90,\n                'tier_id' => $tier->id,\n                'stripe_id' => config('subscription.owlbear.' . $currency . '.yearly'),\n            ]);\n        }\n        TierPrice::create([\n            'currency' => 'brl',\n            'period' => PricingPeriod::Monthly,\n            'cost' => 19.99,\n            'tier_id' => $tier->id,\n            'stripe_id' => config('subscription.owlbear.brl.monthly'),\n        ]);\n        TierPrice::create([\n            'currency' => 'brl',\n            'period' => PricingPeriod::Yearly,\n            'cost' => 199.90,\n            'tier_id' => $tier->id,\n            'stripe_id' => config('subscription.owlbear.brl.yearly'),\n        ]);\n\n        return $this;\n    }\n\n    protected function wyvern(): self\n    {\n        /** @var Tier $tier */\n        $tier = Tier::where('name', 'Wyvern')->first();\n        foreach (['eur', 'usd'] as $currency) {\n            TierPrice::create([\n                'currency' => $currency,\n                'period' => PricingPeriod::Monthly,\n                'cost' => 9.99,\n                'tier_id' => $tier->id,\n                'stripe_id' => config('subscription.wyvern.' . $currency . '.monthly'),\n            ]);\n            TierPrice::create([\n                'currency' => $currency,\n                'period' => PricingPeriod::Yearly,\n                'cost' => 99.90,\n                'tier_id' => $tier->id,\n                'stripe_id' => config('subscription.wyvern.' . $currency . '.yearly'),\n            ]);\n        }\n        TierPrice::create([\n            'currency' => 'brl',\n            'period' => PricingPeriod::Monthly,\n            'cost' => 39.99,\n            'tier_id' => $tier->id,\n            'stripe_id' => config('subscription.wyvern.brl.monthly'),\n        ]);\n        TierPrice::create([\n            'currency' => 'brl',\n            'period' => PricingPeriod::Yearly,\n            'cost' => 399.90,\n            'tier_id' => $tier->id,\n            'stripe_id' => config('subscription.wyvern.brl.yearly'),\n        ]);\n\n        return $this;\n    }\n\n    protected function elemental(): self\n    {\n        /** @var Tier $tier */\n        $tier = Tier::where('name', 'Elemental')->first();\n        foreach (['eur', 'usd'] as $currency) {\n            TierPrice::create([\n                'currency' => $currency,\n                'period' => PricingPeriod::Monthly,\n                'cost' => 24.99,\n                'tier_id' => $tier->id,\n                'stripe_id' => config('subscription.elemental.' . $currency . '.monthly'),\n            ]);\n            TierPrice::create([\n                'currency' => $currency,\n                'period' => PricingPeriod::Yearly,\n                'cost' => 249.90,\n                'tier_id' => $tier->id,\n                'stripe_id' => config('subscription.elemental.' . $currency . '.yearly'),\n            ]);\n        }\n        TierPrice::create([\n            'currency' => 'brl',\n            'period' => PricingPeriod::Monthly,\n            'cost' => 99.99,\n            'tier_id' => $tier->id,\n            'stripe_id' => config('subscription.elemental.brl.monthly'),\n        ]);\n        TierPrice::create([\n            'currency' => 'brl',\n            'period' => PricingPeriod::Yearly,\n            'cost' => 999.90,\n            'tier_id' => $tier->id,\n            'stripe_id' => config('subscription.elemental.brl.yearly'),\n        ]);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "database/seeders/TierSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Pledge;\nuse App\\Models\\Tier;\nuse Illuminate\\Database\\Seeder;\n\nclass TierSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        $tier = Tier::firstOrNew(['name' => Pledge::KOBOLD]);\n        if (! $tier->exists) {\n            $tier->fill([\n                'code' => 'kobold',\n                'name' => Pledge::KOBOLD,\n                'monthly' => 0,\n                'yearly' => 0,\n                'position' => 1,\n            ])->save();\n        }\n\n        $tier = Tier::firstOrNew(['name' => Pledge::OWLBEAR]);\n        if (! $tier->exists) {\n            $tier->fill([\n                'code' => 'owlbear',\n                'name' => Pledge::OWLBEAR,\n                'monthly' => 4.99,\n                'yearly' => 49.90,\n                'position' => 2,\n            ])->save();\n        }\n\n        $tier = Tier::firstOrNew(['name' => Pledge::WYVERN]);\n        if (! $tier->exists) {\n            $tier->fill([\n                'code' => 'wyvern',\n                'name' => Pledge::WYVERN,\n                'monthly' => 9.99,\n                'yearly' => 99.90,\n                'position' => 3,\n            ])->save();\n        }\n\n        $tier = Tier::firstOrNew(['name' => Pledge::ELEMENTAL]);\n        if (! $tier->exists) {\n            $tier->fill([\n                'code' => 'elemental',\n                'name' => Pledge::ELEMENTAL,\n                'monthly' => 24.99,\n                'yearly' => 249.90,\n                'position' => 4,\n            ])->save();\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/VisibilitiesTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Visibility;\nuse Illuminate\\Database\\Seeder;\n\nclass VisibilitiesTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        $themes = ['all', 'admin', 'admin-self', 'self', 'members'];\n        $created = 0;\n        foreach ($themes as $theme) {\n            $type = Visibility::firstOrNew([\n                'code' => $theme,\n            ]);\n            if (! $type->exists) {\n                $type->fill([\n                    'code' => $theme,\n                ])->save();\n                $created++;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "docker/mysql/create-testing-database.sh",
    "content": "#!/usr/bin/env bash\n\nmysql --user=root --password=\"$MYSQL_ROOT_PASSWORD\" <<-EOSQL\n    CREATE DATABASE IF NOT EXISTS testing;\n    GRANT ALL PRIVILEGES ON \\`testing%\\`.* TO '$MYSQL_USER'@'%';\n\n    CREATE DATABASE IF NOT EXISTS logs;\n    GRANT ALL PRIVILEGES ON \\`logs%\\`.* TO '$MYSQL_USER'@'%';\nEOSQL\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "# For more information: https://laravel.com/docs/sail\nservices:\n    laravel.test:\n        build:\n            context: ./vendor/laravel/sail/runtimes/8.4\n            dockerfile: Dockerfile\n            args:\n                WWWGROUP: '${WWWGROUP}'\n        image: sail-8.4/app\n        extra_hosts:\n            - 'host.docker.internal:host-gateway'\n        ports:\n            - '${APP_PORT:-80}:80'\n            - '${HMR_PORT:-8080}:8080'\n            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'\n        environment:\n            WWWUSER: '${WWWUSER}'\n            LARAVEL_SAIL: 1\n            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'\n            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'\n        volumes:\n            - '.:/var/www/html'\n        networks:\n            - sail\n        depends_on:\n            - mariadb\n            - redis\n            - minio\n            - meilisearch\n            - mailpit\n#            - reverb\n    mariadb:\n        image: 'mariadb:11'\n        ports:\n            - '${FORWARD_DB_PORT:-3306}:3306'\n        environment:\n            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_ROOT_HOST: '%'\n            MYSQL_DATABASE: '${DB_DATABASE}'\n            MYSQL_USER: '${DB_USERNAME}'\n            MYSQL_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'\n        volumes:\n            - 'sail-mariadb:/var/lib/mysql'\n            - './.mariadb/conf.d:/etc/mysql/conf.d'\n            - './.mariadb/10-create-logs-database.sh:/docker-entrypoint-initdb.d/10-create-logs-database.sh'\n            - './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"healthcheck.sh\", \"--connect\", \"--innodb_initialized\"]\n            retries: 3\n            timeout: 5s\n    redis:\n        image: 'redis:alpine'\n        ports:\n            - '${FORWARD_REDIS_PORT:-6379}:6379'\n        volumes:\n            - 'sail-redis:/data'\n        networks:\n            - sail\n        healthcheck:\n            test:\n                - CMD\n                - redis-cli\n                - ping\n            retries: 3\n            timeout: 5s\n    minio:\n        image: 'minio/minio:RELEASE.2024-07-15T19-02-30Z'\n        ports:\n            - '${FORWARD_MINIO_PORT:-9000}:9000'\n            - '${FORWARD_MINIO_CONSOLE_PORT:-8900}:8900'\n        environment:\n            MINIO_ROOT_USER: sail\n            MINIO_ROOT_PASSWORD: password\n        volumes:\n            - 'sail-minio:/data/minio'\n        networks:\n            - sail\n        command: 'minio server /data/minio --console-address \":8900\"'\n        healthcheck:\n            test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n            retries: 3\n            timeout: 5s\n    thumbor:\n        image: 'beeyev/thumbor-s3:7.1-slim-alpine'\n        platform: linux/amd64\n        tty: true\n        ports:\n            - '${FORWARD_THUMBOR_PORT:-8888}:8888'\n        volumes:\n            - 'sail-thumbor:/data'\n        networks:\n            - sail\n        environment:\n            - LOG_LEVEL=info\n            - LOADER=thumbor_aws.loader\n            - AWS_LOADER_REGION_NAME=local\n            - AWS_LOADER_BUCKET_NAME=kanka\n            - AWS_LOADER_S3_ACCESS_KEY_ID=sail\n            - AWS_LOADER_S3_SECRET_ACCESS_KEY=password\n            - 'AWS_LOADER_S3_ENDPOINT_URL=http://minio:9000/'\n            - RESULT_STORAGE=thumbor_aws.result_storage\n            - AWS_RESULT_STORAGE_BUCKET_NAME=thumbnails\n            - AWS_RESULT_STORAGE_S3_ACCESS_KEY_ID=sail\n            - AWS_RESULT_STORAGE_S3_SECRET_ACCESS_KEY=password\n            - 'AWS_RESULT_STORAGE_S3_ENDPOINT_URL=http://minio:9000/'\n            - AWS_RESULT_STORAGE_ROOT_PATH=rs\n            - RESULT_STORAGE_STORES_UNSAFE=True\n            - ALLOW_UNSAFE_URL=True\n            - RESULT_STORAGE_EXPIRATION_SECONDS=2629746\n            - QUALITY=80\n            - AUTO_WEBP=True\n            - RESPECT_ORIENTATION=True\n            - MAX_AGE=86400\n            - HTTP_LOADER_VALIDATE_CERTS=False\n        depends_on:\n            - minio\n    thumbor-nginx:\n        image: 'nginx:1.23'\n        tty: true\n        volumes:\n            - './.nginx:/etc/nginx/conf.d/'\n        ports:\n            - '8889:80'\n        environment:\n            - NGINX_PORT=8889\n        networks:\n            - sail\n        depends_on:\n            - thumbor\n    mailpit:\n        image: axllent/mailpit\n        ports:\n        - '8025:8025'  # Web UI\n        - '${MAIL_PORT:-1025}:1025'  # SMTP server\n        networks:\n            - sail\n    meilisearch:\n        image: 'getmeili/meilisearch:latest'\n        ports:\n            - '${FORWARD_MEILISEARCH_PORT:-7700}:7700'\n        environment:\n            MEILI_NO_ANALYTICS: '${MEILISEARCH_NO_ANALYTICS:-false}'\n            MEILI_MASTER_KEY: '${MEILISEARCH_KEY}'\n        volumes:\n            - 'sail-meilisearch:/meili_data'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"wget\", \"--no-verbose\", \"--spider\",  \"http://127.0.0.1:7700/health\"]\n            retries: 3\n            timeout: 5s\n#    reverb:\n#        build:\n#            context: ./vendor/laravel/sail/runtimes/8.4\n#            dockerfile: Dockerfile\n#            args:\n#                WWWGROUP: \"${WWWGROUP}\"\n#        image: sail-8.4/app\n#        extra_hosts:\n#            - \"host.docker.internal:host-gateway\"\n#        ports:\n#            - \"${REVERB_PORT:-8080}:8080\"\n#        command: \"php artisan reverb:start\"\n#        environment:\n#            WWWUSER: \"${WWWUSER}\"\n#            LARAVEL_SAIL: 1\n#            XDEBUG_MODE: \"${SAIL_XDEBUG_MODE:-off}\"\n#            XDEBUG_CONFIG: \"${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}\"\n#            IGNITION_LOCAL_SITES_PATH: \"${PWD}\"\n#        volumes:\n#            - \".:/var/www/html\"\n#        networks:\n#            - sail\n#        depends_on:\n#            - mariadb\n#            - redis\nnetworks:\n    sail:\n        name: sail\n        driver: bridge\nvolumes:\n    sail-mariadb:\n        driver: local\n    sail-redis:\n        driver: local\n    sail-minio:\n        driver: local\n    sail-thumbor:\n        driver: local\n    sail-thumbor-nginx:\n        driver: local\n    sail-meilisearch:\n        driver: local\n"
  },
  {
    "path": "docs/api/readme.md",
    "content": "# 🤖 APIs\n\nRead our [documentation](https://docs.kanka.io/en/latest/advanced/api.html) to get a full overview and access to the API documentation.\n"
  },
  {
    "path": "docs/assets.md",
    "content": "# 🎨 Compiling assets\n\nDuring development, when changes to vue, js or css code are made its necessary to run `sail yarn dev` to re-compile your assets in the background and reload the page whenever something changes in the css, vue or js code.\n\nOnce you're ready for prod, stop `dev` mode and run `sail yarn build`, this takes around 5-10 seconds, builds all compiled assets and deletes old asset files that are replaced, commit those changes to git.\n\n## Deploying assets to cloudfront\n\nTo deploy assets to prod, set the `ASSET_URL` env to the cloudfront URL.\n\nNow rebuild the assets\n\n> sail yarn build\n\nNext, sync the build folder to s3\n\n> aws s3 sync public/build/ s3://kanka-user-assets/build/ --include \"*\" --acl public-read --delete\n\n\nIf doing an update, first do sync without --delete.\n \nFor the api docs to work, the same needs to be done for the `public/vendor/binarytorch` folder.\n\n> aws s3 sync public/vendor/binarytorch/ s3://kanka-user-assets/vendor/binarytorch/ --include \"*\" --acl public-read --delete\n\nFor leaflet, summernote etc, the same needs to be done for the `public/js/` folder.\n\n> aws s3 sync public/vendor/leaflet/ s3://kanka-user-assets/vendor/leaflet/ --include \"*\" --acl public-read --delete\n\n## Images\n\nStuff like default thumbnails, subscriber thumbnails\n\n> aws s3 sync public/images/ s3://kanka-user-assets/images/ --include \"*\" --acl public-read --delete\n"
  },
  {
    "path": "docs/contributing.md",
    "content": "# ❤️ Thanks for wanting to contribute\n\nFirst off, thank you for your interest in helping improve Kanka! While we're a small team and can't review external code contributions or manage pull requests at this time, there are still plenty of valuable ways you can make a difference.\n\n## 🤝 How you can help\n\nWe're always looking for passionate community members to lend a hand in ways that truly matter:\n\n* **Help with user documentation**: If you're good at explaining things or spot missing information in our [documentation](https://docs.kanka.io), jump into the [Kanka Discord](http://kanka.io/go/discord) and let us know!\n\n* **Onboard new users**: Welcome new members in the [Discord](http://kanka.io/go/discord) and help answer questions. Your experience can make a big difference in someone’s journey.\n\n* **Report translation errors**: If you see typos or weird phrasing in translated content, we’d love to hear about it on [Discord](http://kanka.io/go/discord) so we can fix it.\n\n## ⛔ No external code contributions\n\nAs much as we appreciate the spirit of open-source collaboration, our team doesn't currently have the bandwidth to manage pull requests or integrate external code contributions. We're focused on building and maintaining features internally to ensure a consistent experience for all users.\n"
  },
  {
    "path": "docs/debugging.md",
    "content": "# 🔎 Debugging\n\nIf you're having issues with your local instance, these two methods are your best bet.\n\n## 🚩 Enable debug mode\n\nIf you're having 500 errors any of the app's URLs, try the following.\n\nEnable debug mode by editing the `.env` file and replacing `APP_DEBUG=false` with `APP_DEBUG=true`. This will now show the error in the browser, which can give you a hint as to what went wrong.\n\n## ❌ Check your error logs\n\nIf you want access to the detailed error logs, execute the following commands.\n\n```bash\ntail -f storage/logs/laravel-{date}.log\n```\n"
  },
  {
    "path": "docs/meilisearch.md",
    "content": "# ✨ Meilisearch setup\n\nBefore importing entities to meilisearch is important to do some setup, first of all there are some .ENV\nparameters to be set.\n\n`SCOUT_DRIVER` tells scout which search engine to use, it should be set to `meilisearch`.\n\n`SCOUT_QUEUE` tells scout if it should use the jobs queue if set to true or not if set to false/not set.\n\n`MEILISEARCH_HOST` is the url of the meilisearch server, where the requests will be sent to, by default its set to: `http://localhost:7700` which is usually the route for a local test setup.\n\n`MEILISEARCH_KEY` is the key/password which authorizes read/write to the meilisearch database, information on how to set it up can be found on Meilisearch's docs: `https://www.meilisearch.com/docs/learn/security/master_api_keys`.\n\nNow we can start importing the entities.  \n\n## Importing entities\n\nTo import all entities that are setup to work with meilisearch, run:\n\n> sail artisan setup:meilisearch\n\n### Individual models\n\nTo import entities from an individual model, run:\n\n> sail artisan scout:import \"App\\Models\\ModelName\"\n\nThis has to be run for each model type we wish to import to the Meilisearch database, for example if we wish to import TimelineElements and Characters we would do:\n\n> sail artisan scout:import \"App\\Models\\TimelineElements\"\n\n> sail artisan scout:import \"App\\Models\\Characters\"\n\n## Config change\n\nIt's also important to run this following command the first time meilisearch is set up and whenever any of the index settings on `config/scout.php` are modified:\n\n> sail artisan scout:sync-index-settings\n\n## Testing\n\nCall the following api endpoint with a valid token\n\n> http://api.kanka.test:8081/1.0/campaigns/xxx/fulltext-search?term=adam\n\n"
  },
  {
    "path": "docs/running.md",
    "content": "# 💻 Running Kanka\n\nKanka is a dockerized self-hosted PHP application.\n\n> :warning: **Warning**\n>\n> This docker setup is meant for developers working on Kanka. **Do not use** this docker setup to host Kanka on the web! It comes with 0 security (no root password and all ports open).\n>\n> This setup works as is for our team running with Docker on Linux and macOS. We only provide limited support for helping people host Kanka locally on Discord from Monday to Friday 9am-3pm (GMT-5). We currently do not provide any paid support for helping people self-host Kanka or enabling premium features.\n\n## Differences compared to kanka.io\n\nThese developer docker instances are quite different from [kanka.io](https://kanka.io/) that we've listed below.\n\n* No security, no automatic backups.\n* No support for premium campaigns and subscriber bonuses.\n* No advanced caching, meaning that as the data grows, the app will become much slower.\n* No third-party setup like discord, google/meta/x (formerly twitter) logins, stripe, or analytics.\n* No emails or notifications.\n* No access to the third party tools Kanka pays for like FontAwesome PRO, meaning some icons in the app won't work.\n* And lastly, **limited support from the Kanka team to debug your local setup**.\n\n\n## Docker\n\nKanka is set up to run with Docker and [Laravel Sail](https://laravel.com/docs/11.x/sail). It comes with several machines.\n* Laravel Sail for running the Kanka PHP application\n* [Mariadb](https://mariadb.org/) for the database\n* [Redis](https://redis.com/) for the cache\n* [minIO](https://min.io/) for file storage\n* [Thumbor](https://www.thumbor.org/) for image thumbnails\n* [Mailpit](https://mailpit.axllent.org/) for email testing\n\n### Prerequisite\n\nKanka has minimal hardware requirements and can run adequately on a €4/month Hetzner virtual machine. The machine will need the following software to run Kanka:\n* [Docker](https://www.docker.com/)\n* [Github CLI](https://cli.github.com/)\n\nThis GitHub repository needs to be Cloned (`git clone`) on your local machine. All commands are to be executed in the Kanka folder.\n\nWhen on Linux, Docker needs to run with your user and not with sudo! This is important for file permissions to properly work. To set up docker to run with your user, [follow these instructions](https://docs.docker.com/engine/install/linux-postinstall/).\n\n## Installation\n\n### 1. Checkout the project\n\nCheckout Kanka on your local machine\n\n```bash\ngh repo clone owlchester/kanka\n```\nor \n```bash\ngit clone https://github.com/owlchester/kanka.git\n```\n### 2. Configure the database\n\nOnce the project has finished downloading, copy the `.env.example` file and save it under `.env` at the root of your new Kanka installation. This file contains all the configuration settings to run Kanka, like the database details, the project's name, options for max file upload sizes, etc.\n\n> **Hidden by default**\n>\n> Most operating systems hide files starting with a dot by default. You can either change this in your operating system's file explorer, or by accessing the files in the terminal.\n\nOptionally, if you want to change some configs, edit the new `.env` file. In most cases, you don't need to touch anything.\n\n### 3. Installing dependencies\n\nRun the following command to install all the dependencies needed by Kanka. This command will start up a small docker to install everything through [composer](https://getcomposer.org).\n\n```bash\ndocker run --rm \\\n    -u \"$(id -u):$(id -g)\" \\\n    -v $(pwd):/var/www/html \\\n    -w /var/www/html \\\n    laravelsail/php84-composer:latest \\\n    composer install --ignore-platform-reqs\n```\n\n#### Easier life\n\nTo make your life easier, we recommend setting an alias to the `sail` command.\n```bash\nalias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'\n```\n\nOtherwise, whenever this setup mentions a sail command, replace it with `./vendor/bin/sail`.\n\n### 4. Run docker\n\nEverything should now be ready to run all those docker images. Passing the `-d` parameter starts it in the background.\n\n```bash\nsail up -d\n```\n\n### 5. Bucket setup\n\n> Warning, we use an older version of minIO, despite minIO being abandoned and having multiple vulnerabilities. RustFS will eventually replace minIO, but it's still in Alpha and doesn't have a migration tool.\n\nImage uploading in the app is stored on a *minio* service. This mimics the amazon S3 storage, and makes it easier to handle images rather than hosting them directly in the docker responsible for PHP.\n\nFirst, go to [localhost:9000](http://localhost:9000). This is where your files will be stored. Login with `sail` as the user and `password` as the password.\n\nCreate a new bucket called `kanka`. This will redirect you to the new `kanka` bucket. Click on the top right cogwheel icon to access the bucket's config interface. On this page, change the `Access Policy` from `private` to `public`. Without this, uploaded file won't be visible in the browser.\n\nNext up, create a second bucket called `thumbnails`. Same as before, go back and set it's `Access Policy` from `private` to `public`. This bucket will contain your thumbnails.\n\n### 6. Run the installer\n\nNow that the bucket is set up, go back to your console run the following commands. This will take care of setting up Kanka's database with all the boilerplate content to make it work.\n\n```bash\nsail artisan kanka:install\n```\n\nLastly, set up the full-text search engine with the following line.\n\n```bash\nsail artisan setup:meilisearch\n```\n\n## Next up\n\nYour local development instance of Kanka is now ready to go! Navigate to [localhost:8081](http://localhost:8081), and you should see the Kanka application and be able to create an account.\n\nWe recommend making an alias in your `/etc/hosts` file to point `kanka.test` to your localhost, so what (kanka.test:8081)[http://kanka.test:8081] also works.\n\nHere are a few extra resources:\n* Our [documentation](https://docs.kanka.io) covers how to use Kanka.\n* Having trouble? Check out the [debugging](/docs/debugging.md).\n* Learn how to [update](/docs/updating.md) your version of Kanka.\n\n\n### Shutting down\n\nTo stop the docker images, run the following command from your Kanka folder.\n\n```bash\nsail down\n```\n\n### Sharing your local Kanka\n\nDo not make your Kanka instance accessible to the web! To share your Kanka instance with your friends, use the `sail share` command. Follow the [official documentation](https://laravel.com/docs/11.x/sail#sharing-your-site), or set up a reverse proxy in front of it.\n"
  },
  {
    "path": "docs/specs/2026-05-07-family-tree-cytoscape-redesign.md",
    "content": "# Family Tree Cytoscape Redesign\n\n**Date:** 2026-05-07\n**Status:** Approved\n\n## Problem\n\nThe current family tree is implemented as 9 hand-rolled Vue components that manually calculate pixel coordinates (`drawX`, `drawY`, `column`, `row`) for every node. The data structure is a deeply nested JSON tree that can only represent a single founder with partners and shared children. It cannot represent complex family graphs — e.g. a character's partner who has their own ex-spouse and children from a previous relationship. The code is full of bugs and very difficult to extend.\n\n## Solution\n\nReplace the entire frontend with a Cytoscape.js-based graph renderer, following the same patterns established in `Web.vue` (the entity relations web). Replace the nested JSON config with a flat `{ nodes, edges }` graph format that Cytoscape consumes directly.\n\n---\n\n## Data Model\n\nThe `family_trees.config` column changes from a nested array to a flat object:\n\n```json\n{\n  \"nodes\": [\n    { \"id\": \"uuid-1\", \"entity_id\": 10 },\n    { \"id\": \"uuid-2\", \"entity_id\": 20 },\n    { \"id\": \"uuid-3\", \"entity_id\": null, \"isUnknown\": true }\n  ],\n  \"edges\": [\n    {\n      \"id\": \"uuid-4\",\n      \"source\": \"uuid-1\",\n      \"target\": \"uuid-2\",\n      \"type\": \"partner\",\n      \"role\": \"Wife\",\n      \"colour\": \"#cc0000\",\n      \"cssClass\": \"\",\n      \"visibility\": 1\n    },\n    {\n      \"id\": \"uuid-5\",\n      \"source\": \"uuid-1\",\n      \"target\": \"uuid-6\",\n      \"type\": \"child\",\n      \"role\": \"\",\n      \"colour\": \"\",\n      \"cssClass\": \"\",\n      \"visibility\": 1\n    }\n  ]\n}\n```\n\n**Edge types:**\n- `child` — directed, drives the dagre top-down hierarchy (parent → child)\n- `partner` — undirected, encouraged to stay at the same rank via `weight: 0`\n\n**Unknown people** — a node with `entity_id: null` and `isUnknown: true`, rendered as a question-mark avatar.\n\n**Node fields:** `id` (UUID), `entity_id` (int or null), `isUnknown` (bool), `cssClass` (string), `colour` (string), `visibility` (int).\n\n**Edge fields:** `id` (UUID), `source` (node UUID), `target` (node UUID), `type` (`partner|child`), `role` (string), `colour` (string), `cssClass` (string), `visibility` (int).\n\n---\n\n## Component Architecture\n\n**Replaces:** `FamilyTree.vue`, `FamilyNode.vue`, `FamilyEntity.vue`, `FamilyRelation.vue`, `FamilyRelations.vue`, `FamilyChildren.vue`, `ChildrenLine.vue`, `RelationLine.vue`, `FamilyParentChildrenLine.vue` (9 files)\n\n**New files:**\n- `resources/js/components/families/FamilyTree.vue` — main component (replaces in-place)\n- `resources/js/components/families/FamilyTreeModal.vue` — single modal for all edit actions\n\nThe 8 supporting components are deleted entirely. All layout logic moves to Cytoscape/dagre.\n\n### FamilyTree.vue\n\nFollows the composition API + lazy import pattern from `Web.vue`. Responsibilities:\n\n- Init Cytoscape with `cytoscape-dagre` (new dependency) and `cytoscape-panzoom` (already installed)\n- On mount: fetch from the API, build Cytoscape elements, run layout\n- **View mode:** nodes as circle avatars + name labels; hover shows tippy tooltip with full entity card; child edges as solid downward arrows; partner edges as dashed lines; edge role shown on hover\n- **Edit mode:** activated by toolbar \"Edit\" button; tap node → action panel (Add Partner / Add Child / Edit / Delete); tap edge → edit/delete modal; edge-drawing mode triggered by choosing \"Add partner\" or \"Add child\" (tap source, then tap target)\n- Save: POST flat `{ nodes, edges }` to existing save endpoint\n\n### FamilyTreeModal.vue\n\nSingle `<dialog>` handling all edit interactions:\n- Add/edit a node: character picker (tomselect), unknown toggle, colour, CSS class, visibility\n- Add/edit an edge: role label, colour, visibility, type selector (partner/child)\n- Reuses existing dialog patterns (`window.openDialog`, `window.closeDialog`, tomselect)\n\n---\n\n## Backend Changes\n\n### FamilyTreeService\n\n**`api()` / load:**\n- Load **all** family members (not just top 10) and return them as staging nodes\n- Also load any characters referenced by `entity_id` in the saved config that are not family members (e.g. a partner from another family) — same as the current `prepareEntities()` logic\n- Merge both sets: nodes in the saved config are returned with their saved metadata; family members not yet in the config appear as unconnected staging nodes\n- Entity data format unchanged: `id, name, url, thumb, birth, death, status, tags`\n- Visibility filtering moves from nested relation traversal to flat edge iteration\n\n**`save()`:**\n- Accepts `{ nodes: [...], edges: [...] }` instead of the old nested array\n- UUID assignment via `prepareForSave()` — same logic, just applied to both arrays\n- Visibility and missing-entity cleanup operate on `edges[]` instead of recursive `relations[]`\n\n**No new routes or controller changes** — same endpoints, same auth.\n\n---\n\n## Layout\n\n- Library: `cytoscape-dagre` (new dependency, ~15kb gzipped)\n- `rankDir: 'TB'` (top-to-bottom)\n- `child` edges drive rank assignment\n- `partner` edges use `weight: 0` to encourage same-rank placement\n- Unconnected staging nodes (family members with no edges) shown as a row at the top of the canvas\n\n---\n\n## Out of Scope\n\n- Migration of existing saved trees — separate task / migration command\n- Drag-repositioning of nodes (auto-layout only, positions not persisted)\n- Non-character entities in the tree (same restriction as today)\n"
  },
  {
    "path": "docs/translating.md",
    "content": "# 💬 Translating kanka\n\nTo help translate Kanka into one of the supporter languages, contact us in `#general` on the official [Kanka Discord](http://kanka.io/go/discord) server.\n"
  },
  {
    "path": "docs/updating.md",
    "content": "# 🔄 Updating\n\nWe recommend always running from a release tag rather than the `main` branch. You can check which branch you are on by going `git branch` in the Kanka root folder on your machine (not in docker).\n\nWhen a new version of Kanka is released, from your host machine you want to do `git pull` to get the newest updates. Updates usually include changes to the database, so run the following to run the migrations:\n\nWhen updating your local installation, we recommend checkout out each tag chronologically in order to safely update your data.\n\n> :warning: **Warning**\n> Never ever checkout the `@develop` branch as it is unstable and will break your installation.\n\n## ⚡ Backup\n\nWe **strongly** recommend backing up your database data before running any upgrade. You can create a backup of your data by running the following command. Note that this backup command is only available from version 1.44 and onward.\n\n```bash\nsail artisan backup:run\n```\n\nThis will create a gzip file in `storage/app/{app_name}/{date}.zip`\n\n## 🏷️ Checkout out a specific tag\n\nIn your project's root folder, run the following command to checkout a specific tag, in this example version 1.42.\n\n```bash\ngit checkout tags/2.0 -b 2.0\n```\n\nThen run the update instructions of version 1.42. These updates are found in the project's \"Releases\" on GitHub.\n\nOnce that's done, checkout version 1.43 by running:\n\n```bash\ngit checkout tags/2.0 -b 2.0\n```\n\nAnd run the update instructions of version 1.43. Repeat until you are running the latest version.\n"
  },
  {
    "path": "docs/websockets.md",
    "content": "# Websockets\n\nSome interfaces like whiteboards support collaborative real-time updates, powered by websockets.\n\n## Running\n\nTo activate websockets, simply run\n```\nsail artisan reverb:start\n```\n"
  },
  {
    "path": "lang/base/attributes/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/calendars/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/campaigns/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/emails/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/entities/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/front/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/maps/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/readme.md",
    "content": "# Laravel translations\nhttps://github.com/Laravel-Lang/lang/tree/main/locales\n"
  },
  {
    "path": "lang/base/settings/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/subscriptions/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/timelines/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/base/users/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/de/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'An Objekt anhängen',\n        ],\n        'create'        => [\n            'attach_success'    => '{1} Die Fähigkeit :name wurde an :count Objekt angehängt.|[2,*] Die Fähigkeit :name wurde an :count Objekte angehängt.',\n            'helper'            => 'Anhängen von :name an ein oder mehrere Objekten.',\n            'title'             => 'Objekte anhängen',\n        ],\n        'description'   => 'Objekte mit dieser Fähigkeit',\n        'title'         => 'Fähigkeit :name Objekt',\n    ],\n    'create'        => [\n        'title' => 'Neue Fähigkeit',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'entities'      => [],\n    'fields'        => [\n        'charges'   => 'Ladungen',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Füge Kräfte, Zaubersprüche oder Talente hinzu. Viele Entwickler nutzen dies, um D&D-Klassen zu modellieren.',\n    ],\n    'placeholders'  => [\n        'charges'   => 'Anzahl der Verwendungen. Attribute können mit mit {Level} * {CHA} referenziert werden.',\n        'name'      => 'Feuerball, Alarm, listiger Schlag',\n        'type'      => 'Zauber, Kraftakt, Attacke',\n    ],\n    'reorder'       => [\n        'parentless'    => 'kein übergepordnetes Objekt',\n        'success'       => 'Fähigkeiten erfolgreich neu geordnet.',\n        'title'         => 'Ordne die Fähigkeiten neu',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Fähigkeiten neu anordnen',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/account/social.php",
    "content": "<?php\n\nreturn [\n    'info'      => 'Anmeldung durch :provider',\n    'subtitle'  => 'Wechsel von einem von :provider verwalteten Login zu einem von Kanka verwalteten, bei dem du dich mit deiner E-Mail und deinem Passwort anmeldest.',\n    'title'     => 'Zu einem Kanka-Login wechseln',\n];\n"
  },
  {
    "path": "lang/de/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'create'                => [\n        'title' => 'Erstelle eine neue Attributvorlage',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [\n        'auto_apply'    => 'automatisch übernehmen',\n        'is_enabled'    => 'Aktiviert',\n    ],\n    'hints'                 => [\n        'automatic'                 => 'Attribute wurden automatisch aus der Attribut-Vorlage \":link\" erstellt.',\n        'automatic_apply'           => '{1} Das folgende :count-Attribut wurde automatisch von :link übernommen | [2,] Die folgenden :count-Attribute wurden automatisch von :link übernommen.',\n        'entity_type'               => 'Wenn diese Option aktiviert ist, wird beim Erstellen eines neuen Objekts dieses Typs diese Attributvorlage automatisch angewendet.',\n        'is_disabled'               => 'Diese Vorlage ist deaktiviert.',\n        'is_enabled'                => 'Aktiviere diese Vorlage zur Verwendung in der Kampagne.',\n        'parent_attribute_template' => 'Diese Attributvorlage kann eine übergeordnete Attributvorlage haben. Wenn man diese Vorlage anwendet, werden sie und alle übergeordneten Vorlagen angewendet.',\n    ],\n    'index'                 => [],\n    'lists'                 => [\n        'empty' => 'Erstelle Vorlagen, um gemeinsame Attribute für mehrere Objekte wiederzuverwenden.',\n    ],\n    'placeholders'          => [\n        'name'  => 'Name der Attributvorlage',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/de/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Fehler',\n            'rendering' => 'Beim Rendern des Marktplatz-Plugins ist ein Fehler aufgetreten. Bitte wenden Sie sich an den Plugin-Ersteller.',\n        ],\n    ],\n    'helpers'   => [],\n    'list'      => [\n        'sheets'    => 'Charakterbögen',\n    ],\n    'pitch'     => 'Suche und füge Charakterbögen auf dem :marketplace einer :boosted-campaign hinzu.',\n];\n"
  },
  {
    "path": "lang/de/auth.php",
    "content": "<?php\n\nreturn [\n    'banned'    => [\n        'permanent' => 'Du wurdest dauerhaft gesperrt.',\n        'temporary' => '{1} Du wurdest gesperrt für :days day|[2,*] Du wurdest gesperrt für :days days',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Bestätigung',\n        'error'     => 'Falsche Kennwort. Bitte versuchen Sie es erneut.',\n        'helper'    => 'Bitte bestätigen Sie Ihr Passwort, bevor Sie fortfahren können.',\n        'title'     => 'Passwort Bestätigung',\n    ],\n    'continue'  => [\n        'facebook'  => 'Mit facebook fortfahren',\n        'google'    => 'Mit google fortfahren',\n        'x'         => 'Mit X fortfahren',\n    ],\n    'failed'    => 'Wir kennen diese Logindaten nicht.',\n    'helpers'   => [\n        'password'  => 'Passwort anzeigen / verbergen',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'Einmaliges Passwort',\n            'email'     => 'Email',\n            'password'  => 'Passwort',\n        ],\n        'no-account'            => 'Du hast noch kein Konto?',\n        'or'                    => 'ODER',\n        'password_forgotten'    => 'Passwort vergessen?',\n        'sign-up'               => 'registriere dich',\n        'submit'                => 'Login',\n        'title'                 => 'Login',\n    ],\n    'register'  => [\n        'already'   => 'Hast du schon ein Konto? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Ein Account mit dieser Email ist bereits registriert.',\n            'general_error'         => 'Beim erstellen des Accounts ist ein Fehler aufgetreten. Bitte erneut versuchen.',\n        ],\n        'fields'    => [\n            'email'     => 'Email',\n            'name'      => 'Nutzername',\n            'password'  => 'Passwort',\n        ],\n        'log-in'    => 'Log in',\n        'submit'    => 'Registrieren',\n        'title'     => 'Registrieren',\n        'tos'       => 'Durch die Registrierung eines Kontos stimmst du unseren :terms und :privacy zu.',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Email Adresse',\n            'password'              => 'Passwort',\n            'password_confirmation' => 'Passwort bestätigen',\n        ],\n        'send'      => 'Link zum zurücksetzen des Passwords verschickt',\n        'submit'    => 'Passwort zurücksetzen',\n        'title'     => 'Passwort zurücksetzen',\n    ],\n    'tfa'       => [\n        'helper'    => 'Die Zwei-Faktor-Authentifizierung ist aktiviert. Bitte gib das von dir Authentifizierungs-App bereitgestellte One Time Password (OTP) an.',\n        'title'     => 'Zwei-Faktor-Authentifizierung',\n    ],\n    'throttle'  => 'Zu viele Anmeldeversuche. Bitte versuche es in :seconds Sekunden noch einmal.',\n    'x-twitter' => 'X früher bekannt als Twitter',\n];\n"
  },
  {
    "path": "lang/de/banners.php",
    "content": "<?php\n\nreturn [\n    'kanka4years'   => 'Um 20% Ermäßigung auf Ihr erstes Jahresabonnement zu bekommen, nutzen Sie den Code :code!',\n];\n"
  },
  {
    "path": "lang/de/billing/information.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Aktualisierungsinformationen',\n    ],\n    'helper'    => 'Deine Geschäftsadresse, Umsatzsteuer-Identifikationsnummer usw. können auf allen deinen Belegen angegeben werden.',\n    'title'     => 'Aktualisieren deine Rechnungsdaten',\n];\n"
  },
  {
    "path": "lang/de/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Download PDF',\n    ],\n    'description'   => 'Rechnungen der letzten 24 Monate anzeigen.',\n    'empty'         => 'Keine Rechnungen gefunden',\n    'fields'        => [\n        'amount'    => 'Menge',\n        'date'      => 'Datum',\n        'invoice'   => 'Rechnung',\n        'status'    => 'Status',\n    ],\n    'paypal'        => 'Bitte beachte , dass nur Zahlungen, die über Stripe und nicht über PayPal getätigt wurden, hier sichtbar sind.',\n    'status'        => [\n        'paid'      => 'bezahlt',\n        'pending'   => 'Ausstehend',\n    ],\n    'title'         => 'Rechnungsverlauf',\n];\n"
  },
  {
    "path": "lang/de/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'Rechnungsverlauf',\n    'overview'          => 'Übersicht',\n    'payment-method'    => 'Zahlungsmethode',\n];\n"
  },
  {
    "path": "lang/de/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Bezahlverfahren',\n    'types' => [\n        'card'  => 'Karte',\n    ],\n];\n"
  },
  {
    "path": "lang/de/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Passe die Seitenleiste an',\n    ],\n    'create'            => [\n        'title' => 'Neuer Menü Link',\n    ],\n    'destroy'           => [],\n    'edit'              => [\n        'title' => 'Menü Link :name',\n    ],\n    'fields'            => [\n        'active'            => 'Aktiv',\n        'dashboard'         => 'Dashboard',\n        'default_dashboard' => 'Standard-Dashboard',\n        'filters'           => 'Filter',\n        'menu'              => 'Menü',\n        'position'          => 'Position',\n        'random_type'       => 'zufälliger Objekttyp',\n        'selector'          => 'Quick Link-Konfiguration',\n        'target'            => 'Ziel',\n    ],\n    'helpers'           => [\n        'active'            => 'Inaktive Quicklinks werden nicht in der Seitenleiste angezeigt.',\n        'css'               => 'Füge eine CSS-Klasse hinzu, die zum Link des Lesezeichens in der Seitenleiste hinzugefügt wird.',\n        'dashboard'         => 'Lassen Sie den Quick Link auf eines der benutzerdefinierten Dashboards der Kampagne abzielen. Diese Funktion ist nur verfügbar für :boosted.',\n        'default_dashboard' => 'Verknüpfen Sie stattdessen mit dem Standard-Dashboard der Kampagne. Es muss noch ein benutzerdefiniertes Dashboard ausgewählt werden.',\n        'entity'            => 'Richten Sie diesen Menülink ein, um direkt zu einem Objekt zu gelangen. Das Feld :tab steuert, welche der Registerkarten fokussiert ist. Das :menu Feld steuert, welche Unterseite des Objekts geöffnet wird.',\n        'position'          => 'Dieses Feld kann genutzt werden um die Linkreihenfolge im Menü festzulegen.',\n        'random'            => 'Verwenden Sie dieses Feld, um einen Schnelllink zu einem zufälligen Objekt zu erhalten. Sie können den Link filtern, um nur zu einem bestimmten Objekttyp zu gelangen.',\n        'selector'          => 'Konfigurieren Sie, wohin dieser Quicklink führt, wenn ein Benutzer in der Seitenleiste darauf klickt.',\n        'type'              => 'Richten Sie diesen Menülink ein, um direkt zu einer Liste von Objekten zu gelangen. Kopieren Sie zum Filtern der Ergebnisse Teile der URL in die Liste der gefilterten Objekte nach :? Melden Sie sich im Feld :filter an',\n    ],\n    'index'             => [],\n    'lists'             => [\n        'empty' => 'Speicher Lesezeichen für Ihre am häufigsten verwendeten Objekte oder gefilterten Listen, um schneller darauf zugreifen zu können.',\n    ],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=city',\n        'menu'      => 'Menü Unterseite (Nutze den letzten Text der URL)',\n        'tab'       => 'Geschichte, Beziehungen, Notizen',\n    ],\n    'random_no_entity'  => 'Keine zufälligen Objekte gefunden.',\n    'random_types'      => [\n        'any'   => 'jedes Objekt',\n    ],\n    'reorder'           => [\n        'success'   => 'Menü Links neu geordnet.',\n        'title'     => 'Menü Links neu anordnen',\n    ],\n    'show'              => [],\n    'targets'           => [\n        'dashboard' => 'Eines der Dashboards der Kampagne',\n        'entity'    => 'ein einzelnes Objekt',\n        'random'    => 'ein zufälliges Objekt',\n        'select'    => 'wähle eine Option',\n        'type'      => 'Liste der Objekte eines bestimmten Objekttyps/Moduls',\n    ],\n    'visibilities'      => [\n        'is_active' => <<<'TEXT'\nZeige den Quicklink\nin der Seitenleiste an\nTEXT\n,\n    ],\n];\n"
  },
  {
    "path": "lang/de/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'generieren',\n        'insert'    => 'benützen',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'Um auf diese Funktion zugreifen zu können, benötigst du ein Wyvern- oder Elemental-Abonnement.',\n        'out-of-tokens' => 'Du hast keine Tokens mehr! Auf :date bekommst du automatisch mehr.',\n    ],\n    'here'          => 'hier',\n    'intro'         => 'Hallo! Ich bin :name, eine KI, die dir dabei hilft, Hintergrundgeschichten für deine Charaktere in Kanka zu generieren. Mehr über mich erfährst du: hier.',\n    'kankappy'      => 'Du bist heimlich ein Schüler von Kankappy.',\n    'loading'       => 'Bitte halte durch, ich denke angestrengt nach und es kann bis zu einer Minute dauern!',\n    'placeholders'  => [\n        'prompt'    => 'Gib eine Anforderung an, die in eine Hintergrundgeschichte umgewandelt wird.',\n    ],\n    'token-limit'   => 'Du hast derzeit :amount Tokens. Jedes Mal, wenn ich eine Hintergrundgeschichte erstelle, kostet dies einen Token, verwende sie also mit Bedacht!',\n];\n"
  },
  {
    "path": "lang/de/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'helper'    => 'Füge Wetterinformationen hinzu, die im Kalender angezeigt werden sollen.',\n        'success'   => 'Wetter hinzugefügt.',\n        'title'     => 'Neuer Wettereffekt',\n    ],\n    'destroy'       => [\n        'success'   => 'Wetter entfernt',\n    ],\n    'edit'          => [\n        'success'   => 'Wetter aktualisiert',\n        'title'     => 'Wetter aktualisieren',\n    ],\n    'fields'        => [\n        'effect'        => 'Effekt',\n        'name'          => 'Name',\n        'precipitation' => 'Niederschlag',\n        'temperature'   => 'Temperatur',\n        'weather'       => 'Wetter',\n        'wind'          => 'Wind',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Donner',\n            'cloud'                 => 'Wolkig',\n            'cloud-rain'            => 'Regnerisch',\n            'cloud-showers-heavy'   => 'Starkregen',\n            'cloud-sun'             => 'Bewölkt und sonnig',\n            'cloud-sun-rain'        => 'Wolke, Sonne und Regen',\n            'meteor'                => 'Meteor',\n            'smog'                  => 'Smog',\n            'snowflake'             => 'Schnee',\n            'sun'                   => 'Sonnig',\n            'wind'                  => 'Windig',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Magische oder natürliche Wirkung',\n        'name'          => 'Optionaler benutzerdefinierter Wettertext',\n        'precipitation' => 'Wassermenge',\n        'temperature'   => 'Täglich hoch und niedrig',\n        'wind'          => 'Windgeschwindigkeit',\n    ],\n];\n"
  },
  {
    "path": "lang/de/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Epoche hinzufügen',\n        'add_intercalary'   => 'Schalttage hinzufügen',\n        'add_month'         => 'Monat hinzufügen',\n        'add_moon'          => 'Mond hinzufügen',\n        'add_reminder'      => 'Ereignis hinzufügen',\n        'add_season'        => 'Jahreszeit hinzufügen',\n        'add_weather'       => 'Wettereffekt einstellen',\n        'add_week'          => 'Wochennamen hinzufügen',\n        'add_weekday'       => 'Wochentag hinzufügen',\n        'add_year'          => 'Jahr hinzufügen',\n        'set_today'         => 'Als aktuellen Tag festlegen.',\n        'today'             => 'Heute',\n        'update_weather'    => 'Wetter aktualisieren',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Wiederholt sich jedes Jahr',\n    ],\n    'create'        => [\n        'title' => 'Neuer Kalender',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Kalenderdatum aktualisiert.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Kalender Ereignis wurde erstellt',\n            'title'     => 'Kalender Ereignis zu :name hinzufügen',\n        ],\n        'destroy'   => 'Ereignis aus Kalender :name entfernt',\n        'edit'      => [\n            'success'   => 'Kalender Ereignis wurde aktualisiert',\n            'title'     => 'Aktualisiere das Kalender Ereignis in :name',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Ungültige Objektauswahl',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Sie bearbeiten eine Erinnerung, die sich im :calender befindet.',\n        ],\n        'success'   => 'Event \\':event\\' zum Kalender hinzugefügt.',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} Gelöschte :count reminder.|[2,*] Gelöschte :count reminders.',\n            'patch'     => '{1} Aktualisierte :count reminder.|[2,*] Aktualisierte :count reminders.',\n        ],\n        'end'       => '(ende)',\n        'filters'   => [\n            'show_after'    => 'Zeige heute und die Zukunft',\n            'show_all'      => 'Zeige alles',\n            'show_before'   => 'Zeige die Vergangenheit',\n        ],\n        'start'     => '(start)',\n    ],\n    'fields'        => [\n        'comment'           => 'Kommentar',\n        'current_day'       => 'Aktueller Tag',\n        'current_month'     => 'Aktueller Monat',\n        'current_year'      => 'Aktuelles Jahr',\n        'date'              => 'Aktuelles Datum',\n        'day'               => 'Tag',\n        'default_layout'    => 'Standardlayout',\n        'format'            => 'Format',\n        'is_incrementing'   => 'Vorausdatierung',\n        'is_recurring'      => 'Wiederkehrend',\n        'leap_year'         => 'Schaltjahre',\n        'leap_year_amount'  => 'Tage hinzufügen',\n        'leap_year_month'   => 'Monat',\n        'leap_year_offset'  => 'Jedes',\n        'leap_year_start'   => 'Schaltjahr',\n        'length'            => 'Länge des Ereignisses',\n        'length_days'       => ':count Tag|:count Tage',\n        'month'             => 'Monat',\n        'months'            => 'Monate',\n        'moons'             => 'Monde',\n        'parameters'        => 'Parameter',\n        'recurring_until'   => 'Wiederholt sich bis zum Jahr',\n        'reset'             => 'Wöchentliches zurücksetzen',\n        'seasons'           => 'Jahreszeiten',\n        'show_birthdays'    => 'Zeige Geburtstage',\n        'skip_year_zero'    => 'Jahr Null überspringen',\n        'start_offset'      => 'Startdatum',\n        'suffix'            => 'Suffix',\n        'week_names'        => 'Wochennamen',\n        'weekdays'          => 'Wochentage',\n        'year'              => 'Jahr',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Wählen Sie aus, welches Layout der Kalender standardmäßig verwenden soll, wenn er angezeigt wird.',\n        'format'            => 'Füge benutzerdefinierte Datumsformatierungen für Kalenderelemente hinzu.',\n        'month_type'        => 'Schaltmonate benutzen keine Wochentage, aber beeinflussen trotzdem Monde und Jahreszeiten.',\n        'moon_offset'       => 'Standardmäßig erscheint der erste Vollmond am ersten Tag des Jahres 0. Eine Verschiebung des Offsets , wird nach dem ersten Vollmond angezeigt. Dieser Wert kann negativ (bis zur Länge des ersten Monats) oder positiv (bis zur Länge des ersten Monats) sein.',\n        'start_offset'      => 'Standardmäßig startet der Kalender am ersten Wochentag des Jahres 0. Das Ändern dieses Felds beeinflusst, wo der erste Tag des Kalenders platziert wird.',\n    ],\n    'hints'         => [\n        'event_length'      => 'Wie lange ein Ereignis dauern soll. Ein Ereignis kann nicht länger als zwei Monate dauern.',\n        'is_incrementing'   => 'Wenn aktiviert, wird das aktuelle Datum des Kalenders automatisch um 00:00 UTC erhöht',\n        'leap_year'         => 'Richte Schaltjahre für den Kalender ein.',\n        'months'            => 'Dein Kalender sollte mindestens 2 Monate haben.',\n        'moons'             => 'Hinzugefügte Monde werden bei jedem Vollmond im Kalender angezeigt.',\n        'parent_calendar'   => 'Wenn Sie dem Kalender einen übergeordneten Kalender geben, werden die Erinnerungen und Wettereffekte des übergeordneten Kalenders angezeigt.',\n        'reset'             => 'Beginnen Sie den Anfang des Monats oder Jahres immer am ersten Wochentag.',\n        'seasons'           => 'Erstelle Jahreszeiten in dem du den jeweiligen Start festlegst. Kanka übernimmt den Rest.',\n        'show_birthdays'    => 'Zeige die jährlichen Geburtstage von Charakteren an, für die in diesem Kalender eine Geburtstagserinnerung bis zu ihrem Sterbedatum vorhanden ist.',\n        'skip_year_zero'    => 'Standardmäßig ist das erste Jahr des Kalenders das Jahr Null. Aktiviere diese Option, um das Jahr Null zu überspringen.',\n        'weekdays'          => 'Lege die Namen deiner Wochentage fest. Es werden mindestens 2 Wochentage benötigt.',\n        'weeks'             => 'Definieren Sie einige Namen für die wichtigeren Wochen Ihres Kalenders.',\n        'years'             => 'Manche Jahre sind so wichtig, dass sie ihren eigenen Namen haben.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month'     => 'Monat',\n        'monthly'   => 'standardmäßig monatlich',\n        'year'      => 'Jahr',\n        'yearly'    => 'standardmäßig jährlich',\n    ],\n    'lists'         => [\n        'empty' => 'Erstelle einen Kalender, um Termine, Festivals oder Ereignisse im Spiel im Laufe der Zeit zu verfolgen.',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Jahreswechsel',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Schaltmonat',\n        'standard'      => 'Standard',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Vollmond',\n                'fullmoon_name' => ':moon Vollmond',\n                'month'         => 'Monatlich',\n                'newmoon'       => 'Neumond',\n                'newmoon_name'  => ':moon Neumond',\n                'none'          => 'Keiner',\n                'unnamed_moon'  => 'Mond :number',\n                'year'          => 'Jährlich',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Keiner',\n            'month' => 'Monatlich',\n            'year'  => 'Jährlich',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Schalttage',\n        'leap_year'     => 'Schaltjahr',\n        'months'        => 'Monatlich',\n        'weeks'         => 'Wöchentlich',\n        'years'         => 'Benamte Jahre',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Dauer in Tagen',\n            'month'     => 'Am Ende welchen Monats',\n            'name'      => 'Name des Schaltmonats',\n        ],\n        'month'         => [\n            'alias' => 'Monat Alias',\n            'length'=> 'Anzahl der Tage',\n            'name'  => 'Monatsname',\n            'type'  => 'Typ',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Vollmond alle (Tage)',\n            'name'      => 'Mond Name',\n            'offset'    => 'Tag des ersten Vollmonds',\n        ],\n        'seasons'       => [\n            'day'   => 'Starttag',\n            'month' => 'Startmonat',\n            'name'  => 'Jahreszeitname',\n        ],\n        'weeks'         => [\n            'name'      => 'Wochenname',\n            'number'    => 'Nummer',\n        ],\n        'year'          => [\n            'name'      => 'Name',\n            'number'    => 'Jahr',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Farbe',\n        'comment'           => 'Geburtstag, Volksfest, Sonnenwende',\n        'date'              => 'Das aktuelle Datum',\n        'leap_year_amount'  => 'Anzahl der Tage, die bei einem Schaltjahr hinzugefügt werden',\n        'leap_year_month'   => 'Monat, in dem die Tage hinzugefügt werden',\n        'leap_year_offset'  => 'Alle wieviele Jahre ist Schaltjahr',\n        'leap_year_start'   => 'Erstes Jahr, das ein Schaltjahr ist',\n        'length'            => 'Ereignislänge in Tagen',\n        'months'            => 'Anzahl der Monate in einem Jahr',\n        'recurring_until'   => 'Letztes Jahr der Wiederholung (leer lassen für immer wiederholend)',\n        'seasons'           => 'Anzahl der Jahrezeiten',\n        'suffix'            => 'Aktueller Suffix der Ära (v. Chr., n. Chr.)',\n        'type'              => 'Art des Kalenders',\n        'weekdays'          => 'Anzahl der Tage in einer Woche',\n    ],\n    'show'          => [\n        'missing_details'       => 'Dieser Kalender konnte nicht angezeigt werden. Kalender brauchen mindestens 2 Monate und 2 Wochentage um korrekt generiert zu werden.',\n        'moon_1first_quarter'   => ':moon erstes Viertel',\n        'moon_full'             => ':moon Vollmond',\n        'moon_last_quarter'     => ':moon abnehmend',\n        'moon_new'              => ':moon Neumond',\n        'tabs'                  => [\n            'events'    => 'Kalender Events',\n            'weather'   => 'Wetter',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Heute & danach',\n        'before'=> 'Heute & davor',\n    ],\n    'validators'    => [\n        'format'        => 'Das Datumsformat ist ungültig.',\n        'moon_offset'   => 'Der Versatz zum ersten Vollmond des Mondes kann nicht größer sein als die Länge des ersten Monats des Kalenders.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Erinnerungen, die sich über mehrere Jahre erstrecken, sind nur in den ersten beiden Jahren sichtbar. Erfahre mehr in unserer :documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/callouts.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscription'  => 'Erfahre mehr über Abonnements',\n    ],\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Boost :campaign',\n            'superboost'    => 'Superboost :campaign',\n        ],\n        'learn-more'    => 'Was sind Booster?',\n        'limitation'    => 'Um auf diese Funktion zugreifen zu können, muss die Kampagne geboostet werden.',\n        'limitations'   => [\n            'boosted'       => 'Um auf diese Funktion zugreifen zu können, muss die Kampagne geboostet werden.',\n            'superboosted'  => 'Um auf diese Funktion zugreifen zu können, muss die Kampagne supergeboostet werden.',\n        ],\n        'multiple'      => 'Um auf diese Funktionen zugreifen zu können, muss die Kampagne geboostet werden.',\n        'pitches'       => [\n            'element-class' => 'Gib diesem Element eine benutzerdefinierte CSS-Klasse mit einer :boosted-campaign.',\n            'icon'          => 'Schalte mit einer :boosted-campaign Millionen von benutzerdefinierten Symbolen von FontAwesome frei.',\n        ],\n        'titles'        => [\n            'boosted'       => 'geboostete Funktion',\n            'superboosted'  => 'supergeboostete Funktion',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => 'Was sind Premium Kampangen?',\n        'limitation'    => 'Um auf diese Funktion zugreifen zu können, müssen Premiumfunktionen aktiviert sein.',\n        'multiple'      => 'Um auf diese Funktionen zugreifen zu können, müssen die Premiumfunktionen für :campaign aktiviert werden.',\n        'title'         => 'Premium-Kampagnenfunktion',\n        'unlock'        => 'Schalte Premium-Funktionen für :campaign frei',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Abonniere, um bis zu :max MB Datei-Upload-Größen freizuschalten.',\n        'share-booster' => 'Boost :campaign, um die Größe des Datei-Uploads für alle Mitglieder der Kampagne zu erhöhen.',\n        'share-premium' => 'Erhöhe die Datei-Upload-Größe für alle Mitglieder der Kampagne mit einer Premium-Kampagne.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => 'Herzlichen Glückwunsch!',\n    'connections'       => '{0} Keine Verbindungen erstellt|{1} Eine Verbindung erstellt|[2,*] :amount der erstellten Verbindungen',\n    'created'           => '{0} Kein :plural erstellt|{1} Ein :singular erstellt|[2,*] :amount:Plural erstellt',\n    'dead'              => '{0} Keine Krimis|{1} Ein Mörderkrimi|[2,*] :amountMörderkrimis',\n    'goal'              => 'Ziel:number',\n    'goal_reached'      => 'In der Kampagne wurde die folgende Leistung freigeschaltet:',\n    'level'             => 'Stufe :number',\n    'markers'           => '{0} Keine Kartenmarkierungen erstellt|{1} Eine Kartenmarkierung erstellt|[2,*] :amountder erstellten Kartenmarkierungen',\n    'painter'           => '{0} Keine Themen erstellt|{1} Ein Thema erstellt|[2,*] :amount der erstellten Themen',\n    'pitch'             => 'Kampagnenerfolge sind eine unterhaltsame Art und Weise, Meilensteine auf deiner Reise durch die Welt zu feiern. Verfolge den Fortschritt, binde deine Spieler ein und präsentiere deine Errungenschaften mit einer Premium-Kampagne.',\n    'plugins'           => '{0} Keine Plugins installiert|{1} Ein Plugin installiert|[2,*] :amountder installierten Plugins',\n    'remaining'         => [\n        'generic'   => 'Mehr und das nächste Level wird freigeschaltet.',\n    ],\n    'tagged'            => '{0} Keine Objekte getaggt|{1} Ein getaggtes Objekt|[2,*] :amount getaggte Objekte',\n    'titles'            => [\n        'calendars'     => 'Zeitwächter',\n        'characters'    => 'Namensgeber',\n        'connections'   => 'Amor',\n        'creatures'     => 'Züchter',\n        'dead'          => 'Mörder',\n        'events'        => 'Lehrmeister',\n        'families'      => 'Familienplanung',\n        'locations'     => 'Ersteller',\n        'markers'       => 'Kartograph',\n        'organisations' => 'Fusionen und Übernahmen',\n        'plugins'       => 'Plugin Kenner',\n        'quests'        => 'Vordenker',\n        'tags'          => 'Unter Kontrolle',\n        'themes'        => 'Maler',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'accept'    => 'akzeptieren',\n        'reject'    => 'ablehnen',\n    ],\n    'apply'         => [\n        'apply'         => 'anwenden',\n        'help'          => 'Diese Kampagne steht neuen Mitgliedern offen. Um sich anzumelden, füllen Sie das Formular aus. Sie werden benachrichtigt, wenn die Kampagnenadministratoren Ihre Bewerbung überprüfen.',\n        'remove_text'   => 'Ihre Einreichung',\n        'success'       => [\n            'apply' => 'Ihre Bewerbung wurde gespeichert. Sie können sie jederzeit ändern oder abbrechen. Sie werden benachrichtigt, wenn die Kampagnenadministratoren dies überprüfen.',\n            'remove'=> 'Ihre Bewerbung wurde entfernt.',\n            'update'=> 'Ihre Bewerbung wurde aktualisiert. Sie können sie jederzeit ändern oder abbrechen. Sie werden benachrichtigt, wenn die Kampagnenadministratoren dies überprüfen.',\n        ],\n        'title'         => 'beitreten :name',\n    ],\n    'errors'        => [],\n    'fields'        => [\n        'application'   => 'Bewerbung',\n        'reason'        => 'Grund der Genehmigung / Ablehnung',\n    ],\n    'helpers'       => [\n        'modal'                 => 'Bei einer Kampagne, die für Bewerbungen offen und öffentlich ist, können sich Benutzer für die Teilnahme an der Kampagne bewerben.',\n        'no_applications_title' => 'Keine Anwendungen gefunden',\n        'reason'                => 'Wenn dies der Fall ist, wird der Bewerber mit dieser Begründung benachrichtigt.',\n        'role'                  => 'Bei Genehmigung die Rolle, welcher der Bewerber hinzugefügt wird.',\n    ],\n    'open'          => [\n        'closed'    => 'Kamagpene ist geschlossen',\n        'open'      => 'Kampagne ist offen',\n        'title'     => 'Offene Kampagne',\n    ],\n    'placeholders'  => [\n        'note'      => 'Notieren Sie Ihre Bewerbung für die Teilnahme an der Kampagne',\n        'reason'    => 'dein Grund',\n    ],\n    'public'        => [\n        'private'   => 'Kampagne ist privat',\n        'public'    => 'Kampagne ist öffentlich',\n        'title'     => 'öffentliche Kampagne',\n    ],\n    'statuses'      => [],\n    'title'         => 'Beitrittsanfragen',\n    'toggle'        => [\n        'closed'    => 'Anwendung geschlossen',\n        'label'     => 'Status',\n        'open'      => 'Anwendung offen',\n        'success'   => 'Anwendungsstatus der Kampagne aktualisiert.',\n        'title'     => 'Anwendungsstatus',\n    ],\n    'tutorial'      => 'Über Kampagnenanmeldungen können Personen Zugang zu dieser Kampagne beantragen. Die Antragsteller füllen ein kurzes Formular aus, und die Kampagnenadministratoren können jede Anfrage prüfen, annehmen oder ablehnen. Genehmigte Benutzer werden der Kampagne mit der Rolle hinzugefügt, die du ihnen bei der Prüfung zuweist.',\n    'update'        => [\n        'approve'   => 'Wählen Sie die Rolle aus, die dem Benutzer in Ihrer Kampagne hinzugefügt werden soll.',\n        'approved'  => 'Bewerbung genehmigt',\n        'reject'    => 'Schreiben Sie dem Benutzer eine optionale Nachricht, warum Sie seine Bewerbung ablehnen.',\n        'rejected'  => 'Bewerbung abgelehnt',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'      => 'Erstelle mit dieser Schnittstelle visuell ein Thema für die Kampagne. Scrolle nach unten, um zu sehen, wie sich die Änderungen auf verschiedene Elemente der Kampagne auswirken würden. Wenn eine Farbe ausgewählt wird, wird automatisch eine „Kontrastfarbe“ zum Einfärben von Text ausgewählt. Erfahre mehr über Theming in unseren :docs.',\n    'pitch'     => 'Psst, wir haben einen Theme-Builder, wenn du nur einige der Farben der Kampagne ändern möchtest 😉',\n    'pitch-go'  => 'Mach mich zum Theme-Builder',\n    'reset'     => 'Theme-Builder-Stil zurückgesetzt.',\n    'success'   => 'Theme-Builder-Stil gespeichert.',\n    'title'     => 'Theme-Builder',\n];\n"
  },
  {
    "path": "lang/de/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Kampagnen-Dashboard-Header aktualisiert.',\n        'title'     => 'Aktualisierung des Kampagnen-Dashboard-Headers',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Fügen Sie ein neues Standardobjektbild hinzu',\n    ],\n    'call-to-action'    => 'Lade ein benutzerdefiniertes Thumbnail für alle Charaktere, Orte oder andere Elemente der Kampagne hoch. Diese Bilder werden dann in verschiedenen Listen angezeigt.',\n    'create'            => [\n        'error'     => 'Fehler beim Speichern des neuen Standardobjektbild. :type bereits gesetzt?',\n        'success'   => 'Standardobjektbild für :type erstellt',\n        'title'     => 'neues Standardobjektbild',\n    ],\n    'destroy'           => [\n        'success'   => 'Standardobjektbild für :type entfernt',\n    ],\n    'index'             => [],\n];\n"
  },
  {
    "path": "lang/de/campaigns/delete.php",
    "content": "<?php\n\nreturn [\n    'backup'            => 'backup',\n    'confirm'           => 'Wenn du sicher bist, dass du :campaign endgültig löschen willst, schreibe :code in das Feld unten.',\n    'confirm-button'    => 'Dauerhaft löschen :name',\n    'helper'            => 'Das Löschen einer Kampagne ist eine dauerhafte Aktion, die nicht rückgängig gemacht werden kann. Dabei werden alle mit der Kampagne verbundenen Daten von unseren Servern entfernt, einschließlich der Bilder und Assets. Wir empfehlen, ein :backup zu erstellen, bevor du fortfährst.',\n    'issue'             => 'Das folgende Problem muss behoben werden, bevor die Kampagne gelöscht werden kann.',\n    'members'           => 'Alle anderen Mitglieder müssen aus der Kampagne entfernt werden.',\n    'success'           => ':name wurde endgültig gelöscht.',\n    'title'             => 'Löschung',\n];\n"
  },
  {
    "path": "lang/de/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'download'  => 'Herunterladen',\n        'export'    => 'Exportieren Sie die Kampagnendaten',\n    ],\n    'confirm'   => [\n        'notification'  => 'Mitglieder mit der Rolle :admin werden benachrichtigt, wenn der Export zum Download bereitsteht.',\n        'title'         => 'Exportbestätigung',\n        'warning'       => 'Du bist dabei, die Daten der Kampagne zu exportieren. Dieser Vorgang kann je nach Größe der Kampagne lange dauern. Du kannst Kanka weiterhin verwenden, während unsere Server den Export generieren.',\n    ],\n    'errors'    => [\n        'limit' => 'Die Kampagne wurde heute schon einmal exportiert. Bitte versuchen Sie es morgen erneut.',\n    ],\n    'expired'   => 'Link abgelaufen',\n    'helpers'   => [],\n    'progress'  => 'Fortschritt',\n    'size'      => 'Größe',\n    'status'    => [\n        'failed'    => 'fehlgeschlagen',\n        'finished'  => 'fertig',\n        'running'   => 'läuft',\n        'scheduled' => 'geplant',\n    ],\n    'success'   => 'Der Kampagnenexport wird vorbereitet. Sie werden in Kanka benachrichtigt, sobald es zum Herunterladen bereit ist.',\n    'title'     => 'Kampagnen-Export',\n];\n"
  },
  {
    "path": "lang/de/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close'         => 'Schließen',\n        'file-link'     => 'Dateilink',\n        'focus_point'   => 'Fokuspunkt festlegen',\n        'image-link'    => 'Bildlink',\n        'reset_focus'   => 'Fokuspunkt zurücksetzen',\n        'save'          => 'Speichern',\n        'upgrade'       => 'Speicherplatz erweitern',\n    ],\n    'breadcrumb'    => 'Gallerie',\n    'bulk'          => [\n        'destroy'   => [\n            'confirm'   => 'Bist du sicher, dass du die ausgewählten Elemente dauerhaft entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.',\n            'success'   => '{0}Keine Dateien entfernt.|{1}Eine Datei entfernt.|{2,*} :Anzahl der entfernten Dateien.',\n        ],\n    ],\n    'cta'           => 'Verwalte und verwende Bilder während der gesamten Kampagne wieder.',\n    'destroy'       => [\n        'folder'    => 'Ordner :name gelöscht.',\n        'success'   => 'Bild :name gelöscht',\n    ],\n    'errors'        => [\n        'max'           => 'Bitte wähle nur bis zu :count Dateien gleichzeitig aus.',\n        'permissions'   => 'Deinen Kampagnenrollen fehlen die Berechtigungen :permission, um Bilder in die Kampagnengalerie hochladen zu dürfen.',\n        'storage'       => 'Es ist nicht genügend Speicherplatz zum Hochladen der ausgewählten Bilder vorhanden. Verfügbarer Speicherplatz: :available.',\n    ],\n    'fields'        => [\n        'created_by'            => 'hochgeladen von',\n        'details'               => 'Details',\n        'ext'                   => 'äußerlich',\n        'file_type'             => 'Dateityp',\n        'folder'                => 'Ordner',\n        'image_mentioned_in'    => '{0} Dieses Bild wird in keinem Objekt der Kampagne erwähnt.|{1} In einem Eintrag/Beitrag erwähnt.|[2,*] erwähnt in :count Einträgen/Beiträgen.',\n        'image_used_in'         => '{0} Wird als Bild in keines Object verwendet.|{1} Wird als Bild eines Objekts verwendet.|[2,*] Wird als Bild von :count entities verwendet.',\n        'link'                  => 'Link',\n        'name'                  => 'Name',\n        'size'                  => 'Größe',\n        'unused'                => 'Nirgendwo verwendet',\n        'used_in'               => 'Verwendet in',\n    ],\n    'focus'         => [\n        'locked'    => 'Eine Premium-Kampagne ist erforderlich, um den Fokuspunkt eines Bildes zu setzen.',\n        'removed'   => 'Bildfokus entfernt.',\n        'updated'   => 'Bildfokus aktualisiert.',\n    ],\n    'new_folder'    => [\n        'title' => 'neuer Ordner',\n    ],\n    'no_folder'     => 'kein Ordner',\n    'pitch'         => 'Lade Bilder direkt aus dem Texteditor in die Galerie der Kampagne hoch.',\n    'placeholders'  => [\n        'search'    => 'Bildname suchen ...',\n    ],\n    'storage'       => [\n        'of'    => 'von',\n        'title' => 'Speicher',\n    ],\n    'title'         => 'Kampagne :campaign Gallerie',\n    'update'        => [\n        'folder'    => 'Ordner geändert.',\n        'success'   => 'Bild geändert',\n    ],\n    'uploader'      => [\n        'add'           => 'neue hinzufügen',\n        'new_folder'    => 'neuer Ordner',\n        'or'            => 'oder',\n        'select_file'   => 'Wählen Sie eine Datei aus',\n        'well'          => 'Datei fallen lassen um sie hochzuladen',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/import.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'import'    => 'Lade den Export hoch',\n    ],\n    'fields'    => [\n        'updated'   => 'Letztes Update',\n    ],\n    'form'      => 'Formular hochladen',\n    'progress'  => [\n        'uploading' => 'Hochladen',\n    ],\n    'status'    => [\n        'failed'    => 'Fehlgeschlagen',\n        'finished'  => 'Beendet',\n        'queued'    => 'In Warteschlange',\n        'running'   => 'Laufend',\n    ],\n    'title'     => 'Importieren',\n];\n"
  },
  {
    "path": "lang/de/campaigns/invites.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Erstelle einen Einladungslink, den du an deine Spieler senden kannst, damit diese der Kampagne beitreten können.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Limit erreicht',\n];\n"
  },
  {
    "path": "lang/de/campaigns/members.php",
    "content": "<?php\n\nreturn [\n    'overview'  => [\n        'limited'   => ':amount der :total members.',\n        'title'     => 'Verfügbare Mitglieder',\n        'unlimited' => ':amount der unbegrenzten Mitglieder.',\n    ],\n    'roles'     => [\n        'admin'     => 'Du kannst hier keine Benutzer direkt zur Rolle „:admin“ hinzufügen. Dies geschieht in der Benutzeroberfläche der Rolle „:admin“.',\n        'helper'    => 'Hinzufügen oder Entfernen von Rollen des Mitglieds :user.',\n        'success'   => 'Rollen erfolgreich aktualisiert für :user.',\n        'title'     => 'Mitgliederrollen bearbeiten',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/modules.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Modul erstellen',\n        'customise' => 'Anpassen',\n    ],\n    'create'        => [\n        'helper'    => 'Erstelle ein neues benutzerdefiniertes Modul, um Objekte zu speichern, die nicht in andere Module passen.',\n        'success'   => 'Neues Modul erstellt.',\n        'title'     => 'Neues Modul',\n    ],\n    'delete'        => [\n        'confirm'   => 'Schreibe :code, wenn du sicher sind, dass du das benutzerdefinierte Modul :name dauerhaft löschen willst.',\n        'helper'    => 'Bist du sicher, dass du das benutzerdefinierte Modul :name entfernen möchtest? Dadurch werden auch alle Objekte, Lesezeichen und Widgets, die mit diesem Modul verknüpft sind, dauerhaft gelöscht.',\n        'success'   => 'Modul :name gelöscht',\n        'title'     => 'Modul löschen',\n    ],\n    'errors'        => [\n        'disabled'  => 'Das Modul :name ist deaktiviert. :fix',\n        'limit'     => 'Kampagnen sind derzeit nur auf :max benutzerdefinierte Module beschränkt, während wir diese neue Funktion ausbauen.',\n    ],\n    'fields'        => [\n        'icon'      => 'Modulsymbol',\n        'plural'    => 'Modul Mehrzahl Name',\n        'singular'  => 'Modul Einzal Name',\n    ],\n    'helpers'       => [\n        'custom'    => 'Dies ist ein benutzerdefiniertes Modul.',\n        'icon'      => 'Das Symbol :fontawesome, zum Beispiel :example.',\n        'plural'    => 'Der Pluralname für Objekte des neuen Moduls. Zum Beispiel, Tränke',\n        'roles'     => 'Wähle die Rollen aus, die die Berechtigung haben sollen, Objekte dieses neuen Moduls anzuzeigen. Dies kann später in den Rollenberechtigungen geändert werden.',\n        'singular'  => 'Der Einzahlname für ein Objekt des neuen Moduls. Zum Beispiel, Trank',\n    ],\n    'pitch'         => 'Benenne das diesem Modul zugeordnete Symbol für die gesamte Kampagne um und ändere es.',\n    'pitch-custom'  => 'Erstelle benutzerdefinierte Module, um einzigartige Objekte zu speichern.',\n    'rename'        => [\n        'helper'    => 'Ändere den Namen und das Symbol des Moduls im Laufe der Kampagne. Lasse das Feld leer, um die Standardeinstellung von Kanka zu verwenden.',\n        'success'   => 'Modul angepasst',\n        'title'     => 'Passe das Modul :module an',\n    ],\n    'reset'         => [\n        'default'   => 'Dadurch werden nur die Standardmodule zurückgesetzt, nicht aber die benutzerdefinierten Module.',\n        'success'   => 'Die Kampagnenmodule wurden zurückgesetzt.',\n        'title'     => 'Benutzerdefinierte Modulnamen und -symbole zurücksetzen',\n        'warning'   => 'Bist du sicher, dass du die Kampagnenmodule auf ihre ursprünglichen Namen und Symbole zurücksetzen möchtest?',\n    ],\n    'sections'      => [\n        'custom'    => 'Benutzerdefinierte Module',\n        'default'   => 'Standard-Module',\n        'features'  => 'Funktionen',\n    ],\n    'states'        => [\n        'disable'   => 'Deaktivieren',\n        'enable'    => 'Aktivieren',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/overview.php",
    "content": "<?php\n\nreturn [\n    'followers' => [\n        'title' => 'Anhänger',\n    ],\n    'member'    => [\n        'title' => 'Mitgliedschaft',\n    ],\n    'premium'   => [\n        'enable'    => 'Aktivieren von Premiumfunktionen',\n    ],\n    'status'    => [\n        'title' => 'Sichtbarkeit',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'deaktiviere plugins',\n            'enable'    => 'aktiviere plugins',\n            'update'    => 'aktualisiere plugins',\n        ],\n        'changelog'         => 'Änderungsprotokoll',\n        'disable'           => 'Plugin deaktivieren',\n        'enable'            => 'Plugin aktivieren',\n        'import'            => 'Importieren',\n        'update'            => 'Plugin aktualisieren',\n        'update_available'  => 'Update verfügbar!',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} entferne :count plugin.|[2,*] entferte :count plugins',\n        'disable'   => '{1} deaktiviere :count plugin.|[2,*] deaktivierte :count plugins.',\n        'enable'    => '{1} aktiviere :count plugin.|[2,*] aktivierte :count plugins.',\n        'update'    => '{1} aktualisiere :count plugin.|[2,*] aktualisierte :count plugins.',\n    ],\n    'destroy'       => [\n        'success'   => 'Plugin :plugin entfernt.',\n    ],\n    'disabled'      => [\n        'success'   => 'Plugin :plugin deaktiviert',\n    ],\n    'empty_list'    => 'Die Kampagne hat derzeit keine Plugins. Gehen Sie zum Marktplatz, um einige zu installieren, und kehren Sie zurück, um sie zu aktivieren.',\n    'enabled'       => [\n        'success'   => 'Plugin :plugin aktiviert',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Ungültiges Plugin.',\n    ],\n    'fields'        => [\n        'name'      => 'Plugin Name',\n        'obsolete'  => 'Dieses Plugin wurde vom Kanka-Team als veraltet markiert, was bedeutet, dass es nicht mehr so funktioniert, wie es ursprünglich von seinem Ersteller beabsichtigt war.',\n        'status'    => 'Status',\n        'type'      => 'Plugin Typ',\n    ],\n    'import'        => [\n        'button'                => 'Importieren',\n        'created'               => 'Folgende Objekte wurden erstellt:',\n        'helper'                => 'Sie sind im Begriff, :count Objekte aus dem :plugin -Plugin zu importieren. Wenn dieses Plugin zuvor importiert wurde, können Änderungen, die Sie an den importierten Objekten vorgenommen haben, verloren gehen.',\n        'no_new_entities'       => 'Es müssen keine neuen Objekte importiert werden.',\n        'option_only_import'    => 'Importieren Sie nur neue Objekte und überspringen Sie zuvor importierte Objekte.',\n        'option_private'        => 'Importieren Sie alle Objekte als privat.',\n        'success'               => '{1} Importiert :count Objekt aus dem Plugin :plugin. |[2,*] Importiert :count  Objekte aus dem Plugin zählen :plugin.',\n        'title'                 => 'Importieren :plugin',\n        'updated'               => 'Folgende Objekte wurden aktualisiert:',\n    ],\n    'info'          => [\n        'helper'    => 'Wenn eine neue Version eines Plugins veröffentlicht wird, können Sie es auf die neueste Version für Ihre Kampagne aktualisieren.',\n        'title'     => 'Plugin :plugin Aktualisierungen',\n        'updates'   => 'Aktualisierungen',\n    ],\n    'pitch'         => 'Installiere und verwalte Plug-ins vom :marketplace.',\n    'status'        => [\n        'always'    => 'Dieser Plugin-Typ ist immer aktiv, es sei denn, er wird entfernt.',\n        'disabled'  => 'Deaktiviert',\n        'enabled'   => 'Aktviert',\n    ],\n    'templates'     => [\n        'name'  => ':name von :user',\n    ],\n    'title'         => 'Kampagne :name Plugin',\n    'types'         => [\n        'attribute' => 'Attributvorlage',\n        'pack'      => 'Inhaltspaket',\n        'theme'     => 'Thema',\n    ],\n    'update'        => [\n        'success'   => 'Plugin :plugin aktualisiert.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'new'           => 'Veröffentliche es für die Community oder behalte es privat für eingeladene Mitglieder.',\n        'permissions'   => 'Wenn du deine Kampagne öffentlich machst, werden Inhalte nicht automatisch geteilt. Lege in den Einstellungen für die Rolle „öffentlich“ fest, was öffentliche Betrachter sehen können.',\n    ],\n    'title'     => 'Ändere die Sichtbarkeit der Kampagne',\n    'update'    => [\n        'private'   => 'Die Kampagne ist jetzt privat und nur für Mitglieder sichtbar.',\n        'public'    => 'Die Kampagne ist nun öffentlich. Es kann einige Zeit dauern, bis sie auf der Seite :public-campaigns angezeigt wird.',\n        'unlisted'  => 'Die Kampagne ist jetzt nicht mehr gelistet. Jeder, der über einen Link verfügt, kann darauf zugreifen, aber sie wird nicht auf der Seite „Öffentliche Kampagnen” angezeigt.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'           => 'Wiederherstellen',\n        'recover_selected'  => 'Ausgewählte wiederherstellen',\n    ],\n    'error'     => 'Beim Versuch Objekte wiederherzustellen, ist ein Fehler aufgetreten.',\n    'fields'    => [\n        'deleted'       => 'Gelöscht',\n        'deleted_at'    => 'Gelöscht :date von :user',\n    ],\n    'name_link' => ':name wurde erfolgreich wiederhergestellt',\n    'order'     => [\n        'newest'        => 'Ordnen nach :newest',\n        'newest_first'  => 'Neuestes zuerst',\n        'oldest'        => 'Ordnen nach :oldest',\n        'oldest_first'  => 'Älteste zuerst',\n        'type'          => 'Ordnen nach :type',\n        'type_order'    => 'Typ',\n    ],\n    'posts'     => [],\n    'premium'   => 'Die Wiederherstellung von Elementen ist eine Premium-Kampagnenfunktion.',\n    'success_v2'=> '{1} :count Element wurde wiedergefunden.|[2,*] :count Elmente wurden wiedergefunden.',\n    'title'     => 'Objektwiederherstellung  für :campaign',\n    'toggle'    => [],\n    'tutorial'  => 'Zeige kürzlich gelöschte Elemente aus der Kampagne an und stelle sie wieder her. Objekte, Beiträge und andere unterstützende Daten können für eine bestimmte Anzahl von Tagen wiederhergestellt werden, bevor sie endgültig gelöscht werden. Bei der Wiederherstellung eines Elements werden alle Daten vollständig wiederhergestellt.',\n];\n"
  },
  {
    "path": "lang/de/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'status'    => 'Status: :status',\n    ],\n    'create'    => [\n        'helper'    => 'Erstelle eine neue Rolle für die Kampagne.',\n    ],\n    'overview'  => [\n        'limited'   => ':amount der :total erstellter Rollen.',\n        'title'     => 'verfügbare Rollen',\n        'unlimited' => ':amount der erstellten unbegrenzten Rollen.',\n    ],\n    'public'    => [],\n    'show'      => [\n        'title' => ':role Berechtigungen - :campaign',\n    ],\n    'toggle'    => [\n        'disabled'  => 'Mitglieder der Rolle :role können keine :action :entities mehr ausführen',\n        'enabled'   => 'Mitglieder der Rolle :role können jetzt :action :entities',\n    ],\n    'warnings'  => [\n        'adding-to-admin'   => 'Mitglieder der Rolle :name haben Zugriff auf alles in der Kampagne und können nicht von anderen Mitgliedern der Rolle entfernt werden . Nach :amount Minuten können nur sie sich aus der Rolle entfernen.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Zurücksetzen',\n    ],\n    'call-to-action'    => 'Passe die Reihenfolge, Symbole und Namen der Elemente in der Seitenleiste der Kampagne an.',\n    'helpers'           => [\n        'bookmarks' => 'Lesezeichen werden hier nicht aufgeführt, da jedes Lesezeichen seine eigene :position setting hat, die bestimmt, wo es in der Seitenleiste erscheint.',\n        'image'     => 'Füge ein Bild hinzu, das die Kampagne darstellt. Dieses Bild wird in der Seitenleiste und in der Oberfläche des Kampagnenwechslers verwendet. Du kannst es jederzeit ändern, indem du die Kampagne bearbeitest.',\n        'reordering'=> 'Ordne die Seitenleiste neu an, indem du die Symbole auf der linken Seite ziehst und ablegst.',\n    ],\n    'image-success'     => 'Das neue Kampagnenbild wurde gespeichert. Dieses Bild kann durch Bearbeiten der Kampagne wieder geändert werden.',\n    'reset'             => [\n        'success'   => 'Die Einrichtung der Kampagnen-Seitenleiste wurde zurückgesetzt.',\n        'title'     => 'Seitenleisten-Setup zurücksetzen',\n        'warning'   => 'Möchten Sie die Seitenleiste Ihrer Kampagne wirklich auf die Standardwerte zurücksetzen?',\n    ],\n    'success'           => 'Einrichtung der Kampagnenseitenleiste gespeichert.',\n    'title'             => 'Kampagne :campagin  Seitenleiste einrichten',\n    'tooltips'          => [\n        'image' => 'Ändere das Hintergrundbild',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Kalender',\n            'title' => 'Zeitnehmer',\n        ],\n        'murderer'  => [\n            'goal'  => 'tote Charaktere',\n            'title' => 'Mörder',\n        ],\n    ],\n    'fields'        => [\n        'created'   => 'Erstellt am',\n        'creator'   => 'Erstellt von',\n        'general'   => 'Allgemein',\n    ],\n    'targets'       => [],\n    'title2'        => 'Statistiken',\n    'titles'        => [\n        'calendars' => 'Zeitnehmer  level :level',\n        'characters'=> 'Namensgeber  level :level',\n        'dead'      => 'Mörder  level :level',\n        'families'  => 'Familienplanung  level :level',\n        'locations' => 'Baumeister  level :level',\n        'quests'    => 'Superhirn  level :level',\n        'races'     => 'Züchter level :level',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'current'   => 'Aktuelles Thema :theme',\n        'disable'   => 'deaktiviert',\n        'enable'    => 'aktiviert',\n        'new'       => 'Neues Design',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} entfernt :count style.|[2,*] entfernt :count styles.',\n        'disable'   => '{1} deaktiviert :count style.|[2,*] deaktiviert :count styles.',\n        'enable'    => '{1} aktiviert :count style.|[2,*] aktiviert :count styles.',\n    ],\n    'create'        => [\n        'success'   => 'Neues Design angelegt.',\n        'title'     => 'Neuer Stil',\n    ],\n    'delete'        => [\n        'success'   => 'Design :name gelöscht.',\n    ],\n    'errors'        => [\n        'max_content'   => 'Die CSS-Regel darf nicht länger als :amount Zeichen sein.',\n        'max_reached'   => 'Maximale Anzahl an Stilen (:max) erreicht.',\n    ],\n    'fields'        => [\n        'content'       => 'CSS Regel',\n        'is_enabled'    => 'Aktiviert',\n        'length'        => 'Länge',\n        'modified'      => 'Geändert',\n        'name'          => 'Name',\n        'order'         => 'Reihenfolge',\n    ],\n    'helpers'       => [\n        'here'          => 'auf unserem Blog',\n        'is_enabled'    => 'Aktiviere dieses Thema auf jeder Seite.',\n        'main'          => 'Sie können das CSS Design für Ihre geboostete Kampagne anpassen. Falls Sie Themes aus dem Marktplatz in Ihrer Kampagne verwenden, dann wird Ihr angepasstes Design nach diesen Themes geladen. Mehr über das Erstellen eigener Designs für Ihre Kampagne finden Sie :here.',\n        'tutorial'      => 'Steuer den visuellen Stil der Kampagne. Wähle Farben, Layout-Einstellungen und andere Darstellungsoptionen. Diese Änderungen wirken sich nur auf diese Kampagne aus und können jederzeit aktualisiert werden.',\n    ],\n    'pitch'         => 'Erstelle ein benutzerdefiniertes CSS-Design, um das Erscheinungsbild der Kampagne vollständig anzupassen.',\n    'placeholders'  => [\n        'name'  => 'Name des Stils',\n    ],\n    'reorder'       => [\n        'save'      => 'neue Reihenfolge speichern',\n        'success'   => '{1} neu angeordnet :count style.|[2,*] neu angeordnet :count styles.',\n        'title'     => 'Stile neu anordnen',\n    ],\n    'theme'         => [\n        'none'      => 'Benutzerpräferenz verwenden',\n        'override'  => 'Thema überschreiben',\n        'success'   => 'Kampagnenthema aktualisiert.',\n        'title'     => 'Aktualisieren Sie das Kampagnenthema',\n    ],\n    'title'         => 'Kampagnen Theming',\n    'toggle'        => [\n        'disable'   => 'Stil erfolgreich deaktiviert.',\n        'enable'    => 'Stil erfolgreich aktiviert.',\n    ],\n    'update'        => [\n        'success'   => 'Design :name aktualisiert.',\n        'title'     => 'Aktualisiere Design',\n    ],\n];\n"
  },
  {
    "path": "lang/de/campaigns/vanity.php",
    "content": "<?php\n\nreturn [\n    'available' => 'Der Name :vanity ist verfügbar!',\n    'forever'   => 'Einmal festgelegt, kann dies nicht mehr geändert werden. :docs',\n    'helper-v2' => 'Gib der Kampagne eine einprägsame, benutzerdefinierte Webadresse. Anstelle von :default könnte die Kampagne beispielsweise wie folgt erscheinen: :example',\n    'rule'      => 'Das Feld :field benötigt mindestens ein alphabetisches Zeichen.',\n    'rule2'     => 'Das Feld :field lässt das folgende Zeichen nicht zu: /.',\n    'set'       => 'Die Vanity-URL der Kampagne ist dauerhaft auf :vanity eingestellt.',\n];\n"
  },
  {
    "path": "lang/de/campaigns/webhooks.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'action'    => 'Status ändern',\n        'add'       => 'Webhook erstellen',\n        'bulks'     => [\n            'delete_success'    => '{1} Gelöscht :count webhook.|[2,*] Gelöscht :count webhooks.',\n            'disable'           => 'Deaktivieren',\n            'disable_success'   => '{1} Deaktiviert :count webhook.|[2,*] Deaktiviert :count webhooks.',\n            'enable'            => 'Aktivieren',\n            'enable_success'    => '{1} Freigegeben :count webhook.|[2,*] Freigegeben :count webhooks.',\n        ],\n        'test'      => 'Test Webhook',\n        'update'    => 'Webhook aktualisieren',\n    ],\n    'create'        => [\n        'success'   => 'Webhook erfolgreich erstellt',\n        'title'     => 'Neuen Webhook hinzufügen',\n    ],\n    'destroy'       => [\n        'success'   => 'Webhook erfolgreich gelöscht',\n    ],\n    'edit'          => [\n        'success'   => 'Webhook erfolgreich aktualisiert',\n        'title'     => 'Webhook aktualisieren',\n    ],\n    'fields'        => [\n        'enabled'           => 'Aktiviert',\n        'event'             => 'Event',\n        'events'            => [\n            'deleted'   => 'Gelöschtes Objekt',\n            'edited'    => 'Bearbeitetes Objekt',\n            'new'       => 'Neues Objekt',\n        ],\n        'message'           => 'Nachricht',\n        'private_entities'  => [\n            'helper'    => 'Löse den Webhook nicht aus, wenn du private Objekte aktualisierst.',\n            'skip'      => <<<'TEXT'\nPrivate Objekte \nüberspringen\nTEXT\n,\n        ],\n        'type'              => 'Typ',\n        'types'             => [\n            'custom'    => 'Nachricht',\n            'payload'   => 'Nutzlast',\n        ],\n        'url'               => 'Url',\n    ],\n    'helper'        => [\n        'active'    => 'Falls der Webhook gerade aktiv ist',\n        'message'   => 'Hinzufügen einer benutzerdefinierten Nachricht mit Unterstützung für Mappings',\n        'status'    => 'Umschalten des aktiven Status des Webhooks',\n    ],\n    'placeholders'  => [\n        'message'   => '{who} hat Änderungen an  {name}, vorgenommen, sieh sie dir hier {url} an.',\n        'url'       => 'Url des Ziel-Webhooks',\n    ],\n    'test'          => [\n        'success'   => 'Testanfrage gesendet',\n    ],\n    'title'         => 'Webhooks',\n];\n"
  },
  {
    "path": "lang/de/campaigns.php",
    "content": "<?php\n\nreturn [\n    'actions'                           => [],\n    'create'                            => [\n        'success'   => 'Kampagne erstellt.',\n        'title'     => 'Neue Kampagne erstellen',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Kampagne aktualisiert',\n    ],\n    'entity_note_visibility'            => [],\n    'entity_personality_visibilities'   => [\n        'private'   => 'Die Persönlichkeit neuer Charaktere ist im Standard auf privat eingestellt.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Neue Objekte sind privat',\n    ],\n    'errors'                            => [\n        'access'        => 'Du hast keinen Zugang zu dieser Kampagne.',\n        'premium'       => 'Diese Funktion ist nur für Premium-Kampagnen verfügbar.',\n        'unknown_id'    => 'Unbekannte Kampagne.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'geboosted durch',\n        'entity_count'              => 'Objekt Zähler',\n        'entry'                     => 'Kampagnenbeschreibung',\n        'followers'                 => 'Abonnenten',\n        'genre'                     => 'Genre(s)',\n        'header_image'              => 'Header Bild',\n        'image'                     => 'Bild',\n        'locale'                    => 'Sprache',\n        'name'                      => 'Name',\n        'open'                      => 'Offen für Bewerbungen',\n        'premium'                   => 'Premium freigeschaltet von :name',\n        'public'                    => 'Sichtbarkeit der Kampagne',\n        'public_campaign_filters'   => 'Öffentliche Kampagnenfilter',\n        'superboosted'              => 'supergeboosted von',\n        'system'                    => 'System',\n        'theme'                     => 'Thema',\n        'vanity'                    => 'Vanity-URL',\n    ],\n    'following'                         => 'Abonniert',\n    'helpers'                           => [\n        'boosted'                   => 'Einige Funktionen sind freigeschaltet, da diese Kampagne geboosted wird. Weitere Informationen finden Sie auf der :settings page.',\n        'css'                       => 'Schreibe dein eigenes CSS, das du auf die Seiten deiner Kampagne laden kannst. Bitte beachte, dass jeder Missbrauch dieser Funktion dazu führen kann, dass dein benutzerdefiniertes CSS entfernt wird. Wiederholungen oder schwerwiegende Verstöße können dazu führen, dass deine Kampagne entfernt wird.',\n        'dashboard'                 => 'Passen Sie die Anzeige des Kampagnen-Dashboard-Widgets an, indem Sie die folgenden Felder ausfüllen.',\n        'excerpt'                   => 'Die Kampagnenzusammenfassung wird im Dashboard angezeigt. Schreib daher ein paar Sätze, die deine Welt vorstellen. Idealerweise hältst du es kurz und informativ.',\n        'header_image'              => 'Das Bild wird im Widget des Kampagnen-Header-Dashboards als Hintergrund angezeigt.',\n        'hide_history'              => 'Aktivieren Sie diese Option, um den Verlauf von Objekten vor Nichtmitglieder der Kampagne zu verbergen.',\n        'hide_members'              => 'Aktivieren Sie diese Option, um die Liste der Kampagnenmitglieder der Kampagne für Nicht-Administratoren auszublenden.',\n        'locale'                    => 'Die Sprache, in der deine Kampagne geschrieben ist. Dies wird genutzt, um Inhalte zu erstellen und öffentliche Kampagnen zu gruppieren.',\n        'name'                      => 'Deine Kampagne/Welt kann einen beliebigen Namen haben, solange dieser mindestens 4 Buchstaben oder Zahlen enthält.',\n        'no_entry'                  => 'Anscheinend hat die Kampagne noch keine Beschreibung! Lasst uns das beheben.',\n        'premium'                   => 'Einige Funktionen sind verfügbar, da die Premiumfunktionen dieser Kampagne freigeschaltet sind. Weitere Informationen findest du auf der Seite :settings.',\n        'public_campaign_filters'   => 'Helfen Sie anderen, die Kampagne unter anderen öffentlichen Kampagnen zu finden, indem Sie die folgenden Informationen bereitstellen.',\n        'public_no_visibility'      => 'Kopf hoch! Ihre Kampagne ist öffentlich, aber die öffentliche Rolle der Kampagne kann auf nichts zugreifen. :fix.',\n        'system'                    => 'Wenn deine Kampagne öffentlich einsehbar ist, dann wird das System in der :link Seite angezeigt.',\n        'systems'                   => 'Um die Benutzer nicht mit Optionen zu überfordern, sind einige Funktionen von Kanka nur mit bestimmten Rollenspielsystemen (z.B. dem D&D 5e-Monster-Werteblock) verfügbar. Wenn wir hier unterstützte Systeme hinzufügen, werden diese Funktionen aktiviert.',\n        'theme'                     => 'Legen Sie das Thema für die Kampagne fest und überschreiben Sie die Benutzereinstellungen.',\n        'view_public'               => 'Um Ihre Kampagne als öffentlichen Betrachter anzuzeigen, öffnen Sie :link in einem Inkognito-Fenster.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Kopieren Sie den Link in Ihre Zwischenablage',\n            'link'  => 'Neuer Link',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Einladung erstellen',\n            ],\n            'success_link'  => 'Link :link erstellt',\n            'title'         => 'Lade jemanden zu deiner Kampagne ein',\n        ],\n        'destroy'               => [\n            'success'   => 'Einladung entfernt.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Dieses Token wurde bereits genutzt oder die Kampagne existiert nicht mehr.',\n            'invalid_token'     => 'Dieser Token ist nicht mehr gültig.',\n            'join'              => 'Bitte melde dich an oder registriere  ein neues Konto, um an :campaign teilzunehmen.',\n        ],\n        'fields'                => [\n            'created'   => 'Senden',\n            'role'      => 'Rolle',\n            'token'     => 'Token',\n            'type'      => 'Typ',\n            'usage'     => 'Maximale Anzahl von Verwendungen',\n        ],\n        'helpers'               => [\n            'role'  => 'Benutzer müssen erst beitreten, bevor sie zur Administratorrolle befördert werden können.',\n            'usage' => 'Wie oft der Einladungslink verwendet werden kann, bevor er inaktiv wird.',\n        ],\n        'unlimited_validity'    => 'Unbegrenzt',\n        'usages'                => [\n            'five'      => '5 Verwendungen',\n            'no_limit'  => 'kein Limit',\n            'once'      => '1 Verwendung',\n            'ten'       => '10 Verwendungen',\n        ],\n    ],\n    'leave'                             => [\n        'action'            => 'Kampagne verlassen',\n        'confirm'           => 'Bist du sicher, dass du die Kampagne :name verlassen möchtest? Du hast danach keinen Zugang mehr, außer ein Besitzer der Kampagne lädt dich erneut ein.',\n        'confirm-button'    => 'Ja, Kampagne verlassen',\n        'error'             => 'Kann die Kampagne nicht verlassen.',\n        'fix'               => 'Gehe zu den Kampagnenmitgliedern',\n        'no-admin-left'     => 'Das Verlassen der Kampagne ist nicht möglich, da du sonst ohne Administratoren wärst. Füge zuerst ein anderes Mitglied zur Administratorrolle hinzu.',\n        'success'           => 'Du hast die Kampagne verlassen.',\n        'title'             => 'Kampagne verlassen',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'aus Kampagne entfernen',\n            'switch'        => 'Wechseln',\n            'switch-back'   => 'Zurück zu meinem User',\n            'switch-entity' => 'Anzeigen als',\n        ],\n        'fields'                => [\n            'banned'        => 'Benutzer ist gesperrt',\n            'joined'        => 'Beigetreten',\n            'last_login'    => 'Letzter Login',\n            'name'          => 'Nutzer',\n            'role'          => 'Rolle',\n            'roles'         => 'Rollen',\n        ],\n        'helpers'               => [\n            'switch'    => 'Zu diesem User wechseln',\n        ],\n        'impersonating'         => [\n            'message'   => <<<'TEXT'\nDu siehst die Kampagne jetzt als ein anderer User.\nEinige Funktionen wurden deaktiviert, aber ansonsten sieht es genau so aus wie es der User sehen würde. Um zurück zu deinem User zu wechseln, benutze den \"Zurück zu meinem User\" Button, wo sonst der Logout Button zu finden ist.\nTEXT\n,\n            'title'     => 'Ansicht von :name',\n        ],\n        'invite'                => [\n            'description'   => 'Du kannst deine Freunde zu deiner Kampagne einladen, in dem du ihre Email Adresse eingibst. Wenn sie die Einladung annehmen, werden sie als \\'Zuschauer\\' hinzugefügt. Du kannst die Einladung auch jederzeit abbrechen.',\n            'more'          => 'Du kannst neue Rollen unter :link hinzufügen.',\n            'title'         => 'Einladen',\n        ],\n        'removal'               => 'Du entfernst \":member\" aus der Kampagne.',\n        'roles'                 => [\n            'member'    => 'Mitglied',\n            'owner'     => 'Besitzer (privat Option sichtbar)',\n            'player'    => 'Spieler',\n            'public'    => 'Öffentlich',\n            'viewer'    => 'Zuschauer',\n        ],\n        'switch_back_success'   => 'Du bist nun zurück in deinem eigentlichen User.',\n    ],\n    'mentions'                          => [],\n    'modules'                           => [],\n    'open_campaign'                     => [],\n    'options'                           => [],\n    'overview'                          => [\n        'entity-count'      => '{0} Keine Objekte|{1} :amount Objekt|[2,*] :amount Objekte',\n        'follower-count'    => '{0} Keine Follower|{1} :amount Follower|[2,*] :amount Follower',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Dashboard',\n        'privacy'   => 'Datenschutz-Standardeinstellungen',\n        'setup'     => 'erstellen',\n        'sharing'   => 'Teilen',\n        'systems'   => 'Systeme',\n        'ui'        => 'Schnittstelle',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Sprachcode',\n        'name'      => 'Dein Kampagnenname',\n        'system'    => 'D&D 5e, 3.5, Pathfinder, Gurps, DSA',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Versteckt',\n        'private'   => 'privat',\n        'visible'   => 'sichtbar',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'Kampagnen sind standardmäßig privat und können öffentlich gemacht werden. Dadurch kann jeder auf sie zugreifen und sie auf der Seite :public-campaigns verfügbar machen, wenn sie über Objekte verfügen, die für die Rolle :public-role sichtbar sind. Eine öffentliche Kampagne ist für alle sichtbar, aber damit ihr Inhalt sichtbar ist, benötigt die Rolle :public-role angemessene Berechtigungen.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'Rolle hinzufügen',\n            'duplicate'     => 'Rolle dupliziert',\n            'permissions'   => 'Berechtigungen verwalten',\n            'rename'        => 'Rolle umbenennen',\n            'save'          => 'Rolle speichern',\n        ],\n        'admin_role'    => 'Administratorenrolle',\n        'bulks'         => [\n            'delete'    => '{1} entfernt :count role.|[2,*] entfernt :count roles.',\n            'edit'      => '{1} aktualisiert :count role.|[2,*] aktualisiert :count roles.',\n        ],\n        'create'        => [\n            'success'   => 'Rolle erstellt.',\n            'title'     => 'Erstelle eine neue Rolle für :name',\n        ],\n        'destroy'       => [\n            'success'   => 'Rolle entfernt.',\n        ],\n        'edit'          => [\n            'success'   => 'Rolle aktualisiert.',\n            'title'     => 'Rolle :name bearbeiten',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Kopierberechtigungen',\n            'name'              => 'Name',\n            'permissions'       => 'Berechtigungen',\n            'type'              => 'Typ',\n            'users'             => 'Nutzer',\n        ],\n        'helper'        => [\n            '1'                     => 'Eine Kampagne kann so viele Rollen haben, wie du willst. Die \"Admin\" Rolle hat automatisch Zugriff auf alles in einer Kampagne, aber jede andere Rolle kann spezielle Berechtigungen auf unterschiedliche Typen von Objekten (Charaktere, Orte, etc.) haben.',\n            '2'                     => 'Objekte können feiner abgestimmte Berechtigungen haben, die du im \"Berechtigungen\" Tab des Objekts einstellen kannst. Dieser Tab erscheint, wenn du mehrere Rollen in deiner Kampagne hast.',\n            '3'                     => 'Man kann entweder ein \"opt-out\" System verwenden, in dem Rollen lesenden Zugriff auf alle Objekte bekommen und mit der \"Privat\" Checkbox bestimmte Objekte ausgeblendet werden. Oder man gibt Rollen wenige Berechtigungen und setzt jedes Objekt explizit auf sichtbar.',\n            '4'                     => 'Boosted-Kampagnen können eine unbegrenzte Anzahl von Rollen haben.',\n            'permissions_helper'    => 'Dupliziere alle Berechtigungen der Rolle, sowohl für Module als auch für Objekte.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'Die öffentliche Rolle hat Berechtigungen, aber die Kampagne ist privat. Sie können diese Einstellung auf der Registerkarte Freigabe ändern, wenn Sie die Kampagne bearbeiten.',\n            'empty_role'            => 'Die Rolle hat noch keine Mitglieder.',\n            'role_admin'            => 'Die Rolle :name gewährt deinen Mitgliedern automatisch Zugriff vollen Kampagnen Zugriff.',\n            'role_permissions'      => 'Erlaube der Rolle \\':name\\' die folgenden Aktionen auf allen Objekten.',\n        ],\n        'members'       => 'Mitglieder',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'Kampagnenberechtigungen erlauben Folgendes.',\n                'entities'  => 'Hier ist eine kurze Zusammenfassung, was Mitglieder dieser Rolle erhalten, wenn eine Berechtigung festgelegt wird.',\n                'more'      => 'Weitere Informationen finden Sie in unserem Tutorial-Video auf Youtube',\n                'title'     => 'Berechtigungsdetails',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'       => 'Erstellen',\n                'dashboard' => 'Dashboard',\n                'delete'    => 'Entfernen',\n                'edit'      => 'Bearbeiten',\n                'gallery'   => [\n                    'browse'    => 'Durchsuche',\n                    'manage'    => 'Volle Kontrolle',\n                    'upload'    => 'Hochladen',\n                ],\n                'manage'    => 'Verwalten',\n                'members'   => 'Mitglieder',\n                'permission'=> 'Verwalte Berechtigungen',\n                'read'      => 'Anschauen',\n                'toggle'    => 'Alles ändern',\n            ],\n            'helpers'   => [\n                'add'       => 'Erstellen von Objekten dieses Typs zulassen. Sie werden automatisch berechtigt, von ihnen erstellte Objekte anzuzeigen und zu bearbeiten, wenn sie nicht über die Berechtigung zum Anzeigen oder Bearbeiten verfügen.',\n                'dashboard' => 'Erlauben Sie die Bearbeitung der Dashboards und Dashboard-Widgets.',\n                'delete'    => 'Erlauben Sie das Entfernen aller Objekte dieses Typs.',\n                'edit'      => 'Bearbeitung aller Objekte dieses Typs zulassen.',\n                'gallery'   => [\n                    'browse'    => 'Ermögliche das Anzeigen der Galerie und das Festlegen des Bilds eines Objekts aus der Galerie.',\n                    'manage'    => 'Erlaube alles in der Galerie so, wie es ein Administrator kann, einschließlich der Bearbeitung und Löschung von Bildern.',\n                    'upload'    => 'Ermöglicht das Hochladen von Bildern in die Galerie. Die von dir hochgeladenen Bilder werden nur angezeigt, wenn sie nicht mit der Durchsuchungsberechtigung kombiniert sind.',\n                ],\n                'manage'    => 'Erlauben Sie die Bearbeitung der Kampagne wie ein Kampagnenadministrator, ohne dass die Mitglieder die Kampagne löschen können.',\n                'members'   => 'Erlauben Sie, neue Mitglieder zur Kampagne einzuladen.',\n                'not_public'=> 'Die Kampagne ist nicht öffentlich. Berechtigungen für die öffentliche Rolle können festgelegt werden, werden aber ignoriert. Bearbeite die Kampagne, um sie öffentlich zu machen.',\n                'permission'=> 'Erlaube Einstellungsberechtigungen für Objekte dieses Typs, die sie bearbeiten können.',\n                'read'      => 'Erlauben Sie die Anzeige aller Objekte dieses Typs, die nicht privat sind.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Name der Rolle',\n        ],\n        'title'         => 'Kampagne :name Rollen',\n        'types'         => [\n            'owner'     => 'Besitzer',\n            'public'    => 'Öffentlich',\n            'standard'  => 'Standard',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Hinzufügen',\n                'remove'        => ':user von der :role Rolle',\n                'remove_user'   => 'Benutzer aus der Rolle entfernen',\n            ],\n            'create'    => [\n                'success'   => 'Benutzer zu Rolle hinzugefügt.',\n                'title'     => 'Füge ein Mitglied zur Rolle :name hinzu',\n            ],\n            'destroy'   => [\n                'success'   => 'Benutzer aus Rolle entfernt',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'Um Missbrauch zu vermeiden, ist es nicht möglich, andere Mitglieder aus der :admin-Rolle der Kampagne zu entfernen. Bei Problemen kontaktiere uns unter :discord oder unter :email.',\n                'needs_more_roles'  => 'Du musst dich zu einer anderen Rolle in der Kampagne hinzufügen, bevor du dich selbst aus der :admin-Rolle entfernen kannst.',\n            ],\n            'fields'    => [\n                'name'  => 'Name',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'aktivieren',\n        ],\n        'boosted'       => 'Diese Funktion befindet sich in der Beta-Phase und ist derzeit nur verfügbar für :boosted.',\n        'deprecated'    => [\n            'help'  => 'Dieses Modul ist veraltet, was bedeutet, dass es nicht mehr gepflegt wird und dass Fehler nicht bei jedem neuen Update getestet werden. Verwende dieses Modul mit dem Wissen, dass es irgendwann aus Kanka entfernt wird.',\n            'title' => 'Veraltet',\n        ],\n        'disabled'      => 'Das Modul :module ist deaktiviert.',\n        'enabled'       => 'Das Modul :module ist aktiviert.',\n        'errors'        => [\n            'module-disabled'   => 'Das angeforderte Modul ist derzeit in den Kampagneneinstellungen deaktiviert. :fix.',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Erstellen Sie Fähigkeiten, seien es Talente, Zauber oder Kräfte, die Objekten zugewiesen werden können.',\n            'assets'            => 'Lade Dateien hoch, setze Links und definiere Aliasnamen für einzelne Objekte.',\n            'bookmarks'         => 'Erstelle Lesezeichen für Objekte oder gefilterte Listen, die in der Seitenleiste angezeigt werden.',\n            'calendars'         => 'Der Ort, um die Kalender deiner Welt zu erstellen.',\n            'characters'        => 'Die Leute, die deine Welt bevölkern.',\n            'conversations'     => 'Fiktive Gespräche zwischen Charakteren oder zwischen Kampagnennutzern.',\n            'creatures'         => 'Erschaffe mit dem Kreaturenmodul die Kreaturen, Tiere und Monster deiner Welt.',\n            'dice_rolls'        => 'Für die, die Kanka für RPG Kampagnen benutzen, eine Möglichkeit Würfelwürfe zu verwalten.',\n            'entity_attributes' => 'Verfolge Attribute zu Objekten der Kampagne, zum Beispiel Lebenspunkte oder Geschwindigkeit.',\n            'events'            => 'Feiertage, Festlichkeiten, Katastrophen, Geburtstage, Kriege.',\n            'families'          => 'Klans oder Familien, deren Beziehungen und deren Mitglieder.',\n            'inventories'       => 'verwalten sie die Inventare ihrer Objekte',\n            'items'             => 'Waffen, Fahrzeuge, Reliquien, Tränke.',\n            'journals'          => 'Beobachtungen von Spielern oder Spielvorbereitungen vom Spielleiter.',\n            'locations'         => 'Planeten, Ebenen, Kontinente, Flüsse, Staaten, Siedlungen, Tempel, Tavernen.',\n            'maps'              => 'Laden Sie Karten mit Ebenen und Markierungen hoch, die auf andere Objekte in der Kampagne verweisen.',\n            'notes'             => 'Sagen, Religionen, Geschichte, Magie, Spezies.',\n            'organisations'     => 'Kulte, Militäreinheiten, Fraktionen, Gilden.',\n            'quests'            => 'Um Aufgaben mit Charakteren und Ort zu verfolgen.',\n            'races'             => 'Wenn deine Kampagne mehr als eine Spezies hat, hier kannst du den Überblick behalten.',\n            'tags'              => 'Jedes Objekt kann eine Kategorie habe. Kategorien können zu anderen Kategorien gehören und Objekte können nach Kategorie gefiltert werden.',\n            'timelines'         => 'Stellen Sie die Geschichte Ihrer Welt mit Zeitstrahlen dar.',\n            'whiteboards'       => 'Zeichne und schreibe auf Whiteboards, um deine Welt und deine Ziele visuell zu planen.',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'Öffentliche Kampagnen sind auf der Seite :public-campaigns sichtbar. Das Ausfüllen dieser Felder erleichtert es den Nutzern, die Kampagne zu entdecken.',\n        'language'  => 'Die Sprache, in der der Inhalt der Kampagne verfasst ist.',\n        'system'    => 'Beim Spielen eines TTRPG wird das System verwendet, mit dem in der Kampagne gespielt wurde.',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Kampagne editieren',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Erfolge',\n            'customisation'     => 'Anpassung',\n            'danger'            => 'Gefahr',\n            'data'              => 'Daten',\n            'default-images'    => 'Standardbilder',\n            'defaults'          => 'Standardwerte',\n            'deletion'          => 'Löschung',\n            'export'            => 'Export',\n            'import'            => 'Importieren',\n            'logs'              => 'Logs',\n            'management'        => 'Management',\n            'members'           => 'Mitglieder',\n            'plugins'           => 'Plugins',\n            'recovery'          => 'Wiederherstellen',\n            'roles'             => 'Rollen',\n            'sidebar'           => 'Einrichtung der Seitenleiste',\n            'stats'             => 'Statistik',\n            'styles'            => 'Thematisierung',\n            'webhooks'          => 'Webhaken',\n        ],\n        'title'     => 'Kampagne :name',\n    ],\n    'status'                            => [\n        'free'      => 'Premium-Funktionen deaktiviert.',\n        'legacy'    => [\n            'title' => 'Erhöhte Funktionen (Legacy)',\n        ],\n        'premium'   => 'Premium-Funktionen werden durch :name freigeschaltet.',\n        'title'     => 'Premium Funktionen',\n    ],\n    'superboosted'                      => [],\n    'themes'                            => [\n        'none'  => 'Keine (standardmäßig Benutzereinstellungen)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Nur für Kampagnenadministratoren sichtbar',\n            'visible'   => 'sichtbar für Mitglieder',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Verlaufsprotokolle des Objekts',\n            'member_list'       => 'Mitgliederliste der Kampagne',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Steuere, wer die letzten Änderungen sehen kann, die an einzelnen Objekten der Kampagne vorgenommen wurden.',\n            'member-list'       => 'Kontrolliere, wer sehen kann, wer an der Kampagne teilnimmt.',\n            'theme'             => 'Zeige die Kampagne im Thema des Benutzers an oder erzwinge die Darstellung in einem der folgenden Themen.',\n        ],\n        'members'           => [\n            'hidden'    => 'Nur für Kampagnenadministratoren sichtbar',\n            'visible'   => 'für Mitglieder sichtbar',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Privat',\n        'public'    => 'Öffentlich',\n        'unlisted'  => 'öffentlich (nicht gelistet)',\n    ],\n    'warning'                           => [],\n];\n"
  },
  {
    "path": "lang/de/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_appearance'    => 'Füge ein Aussehen hinzu',\n        'add_personality'   => 'Füge eine Persönlichkeit hinzu',\n    ],\n    'conversations' => [],\n    'create'        => [\n        'title' => 'Erstelle einen neuen Charakter',\n    ],\n    'destroy'       => [],\n    'dice_rolls'    => [],\n    'edit'          => [],\n    'families'      => [\n        'reorder'   => [\n            'success'   => 'Charakterfamilien erfolgreich aktualisiert.',\n        ],\n    ],\n    'fields'        => [\n        'age'                       => 'Alter',\n        'is_appearance_pinned'      => 'Angeheftetes Aussehen',\n        'is_dead'                   => 'Tot',\n        'is_personality_pinned'     => 'Angeheftete Persönlichkeit',\n        'is_personality_visible'    => 'Persönlichkeit sichtbar?',\n        'life'                      => 'Leben',\n        'physical'                  => 'Körper',\n        'pronouns'                  => 'Pronomen',\n        'sex'                       => 'Geschlecht',\n        'title'                     => 'Titel',\n        'traits'                    => 'Eigenschaften',\n    ],\n    'helpers'       => [\n        'age'   => 'Sie können dieses Objektes mit einem Kalender Ihrer Kampagne verknüpfen, um stattdessen automatisch dessen Alter zu berechnen. :more.',\n    ],\n    'hints'         => [\n        'is_appearance_pinned'      => 'Wenn diese Option aktiviert ist, werden die Aussehensmerkmale des Charakters unter dem Eintrag auf der Übersichtsseite angezeigt.',\n        'is_dead'                   => 'Dieser Charakter ist tot',\n        'is_personality_visible'    => 'Du kannst den kompletten Persönlichkeitsbereich vor deinen Zuschauern verstecken.',\n        'personality_not_visible'   => 'Persönlichkeitsmerkmale dieses Charakters sind derzeit nur für Administratoren sichtbar.',\n        'personality_visible'       => 'Persönlichkeitsmerkmale dieses Charakters sind für alle sichtbar.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'labels'        => [\n        'appearance'    => [\n            'entry' => 'Erscheinungsbeschreibung',\n            'name'  => 'Erscheinungsname',\n        ],\n        'personality'   => [\n            'entry' => 'Beschreibung von Persönlichkeitsmerkmalen',\n            'name'  => 'Name des Persönlichkeitsmerkmals',\n        ],\n    ],\n    'maps'          => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => 'Charakter wurde der Organisation hinzugefügt.',\n            'title'     => 'Neue Organisation für :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Character aus Organisation entfernt.',\n        ],\n        'edit'      => [\n            'success'   => 'Organisation des Charakters aktualisiert',\n            'title'     => 'Aktualisiere Organisation für :name',\n        ],\n        'fields'    => [\n            'role'  => 'Rolle',\n        ],\n    ],\n    'placeholders'  => [\n        'age'               => 'Alter',\n        'appearance_entry'  => 'Beschreibung',\n        'appearance_name'   => 'Haare, Augen, Haut, Größe',\n        'name'              => 'Name des Charakters',\n        'personality_entry' => 'Details',\n        'personality_name'  => 'Persönlichkeitsmerkmal: Ziele, Gewohnheiten, Ängste, Bindungen',\n        'physical'          => 'Körper',\n        'pronouns'          => 'Er / Ihn, Sie / Sie, Sie / Ihre',\n        'sex'               => 'Geschlecht',\n        'title'             => 'Titel',\n        'traits'            => 'Eigenschaften',\n        'type'              => 'NSC, Spieler Charakter, Gottheit',\n    ],\n    'quests'        => [\n        'helpers'   => [\n            'quest_giver'   => 'Quests bei denen der Charakter Auftraggeber war.',\n            'quest_member'  => 'Quests an denen der Charakter teilgenommen hat.',\n        ],\n    ],\n    'races'         => [\n        'reorder'   => [\n            'success'   => 'Die Charakterrassen wurden erfolgreich aktualisiert.',\n        ],\n    ],\n    'sections'      => [\n        'appearance'    => 'Aussehen',\n        'personality'   => 'Persönlichkeit',\n    ],\n    'show'          => [],\n    'warnings'      => [\n        'personality_hidden'    => 'Es ist dir nicht erlaubt, die Persönlichkeit dieses Charakters zu bearbeiten.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Eisblau',\n    'black'         => 'Schwarz',\n    'blue'          => 'Blau',\n    'brown'         => 'Braun',\n    'green'         => 'Grün',\n    'grey'          => 'Grau',\n    'light-blue'    => 'Hellblau',\n    'maroon'        => 'Magenta',\n    'navy'          => 'Marineblau',\n    'none'          => 'Keine',\n    'orange'        => 'Orange',\n    'pink'          => 'Rosa',\n    'purple'        => 'Violett',\n    'red'           => 'Rot',\n    'teal'          => 'Türkis',\n    'white'         => 'Weiss',\n    'yellow'        => 'Gelb',\n];\n"
  },
  {
    "path": "lang/de/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'          => 'geboostete Kampagne',\n    'premium-campaign'          => 'Premium Kampagne',\n    'premium-campaign-count'    => '{0} Keine Premium-Kampagnen |{1} 1 Premium-Kampagne |[2,*] :count Premium-Kampagnen',\n    'premium-campaigns'         => 'Premium Kampagnen',\n    'premium-feature'           => 'Premium-Funktion',\n    'superboosted-campaign'     => 'supergeboostete Kampagne',\n];\n"
  },
  {
    "path": "lang/de/confirm/editing.php",
    "content": "<?php\n\nreturn [\n    'back'          => 'Zurück',\n    'description'   => 'Offenbar bearbeitet gerade jemand anderes diese Seite! Möchtest du zurückgehen oder diese Warnung ignorieren, auf die Gefahr hin, Daten zu verlieren?',\n    'ignore'        => 'Bearbeite es trotzdem',\n    'members'       => 'Mitglieder, die diese Seite bearbeiten:',\n    'title'         => 'Warnung',\n    'user'          => ':user seit :since',\n];\n"
  },
  {
    "path": "lang/de/confirm.php",
    "content": "<?php\n\nreturn [\n    'delete'    => [\n        'bulk'          => 'Möchtest du die ausgewählten Elemente wirklich löschen?',\n        'helper'        => 'Möchtest du :name wirklich löschen?',\n        'recover'       => 'Diese Aktion kann bis zu :day Tage lang auf der Seite :recover rückgängig gemacht werden.',\n        'recoverable'   => 'Diese Aktion kann bis zu :day Tage lang mit einer :premium-Kampagne rückgängig gemacht werden.',\n        'title'         => 'Element entfernen',\n    ],\n];\n"
  },
  {
    "path": "lang/de/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Neue Unterhaltung',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_closed'     => 'geschlossen',\n        'messages'      => 'Nachrichten',\n        'participants'  => 'Teilnehmer',\n    ],\n    'hints'         => [\n        'empty'         => 'An diesem Gespräch sind keine Teilnehmer beteiligt.',\n        'participants'  => 'Bitte füge Teilnehmer zu deiner Unterhaltung hinzu, indem du das :icon Symbol oben rechts drückst.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Zeichne Dialoge, Briefe oder den Austausch zwischen Charakteren und Fraktionen auf.',\n    ],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Nachricht gelöscht.',\n        ],\n        'is_updated'    => 'Aktualisiert',\n        'load_previous' => 'Lade vorherige Nachrichten',\n        'placeholders'  => [\n            'message'   => 'Deine Nachricht',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Teilnehmer :entity zu Unterhaltung hinzugefügt.',\n        ],\n        'destroy'   => [\n            'success'   => 'Teilnehmer :entity von Unterhaltung entfernt.',\n        ],\n        'helper'    => 'Hinzufügen und Entfernen von Teilnehmern aus :name.',\n        'modal'     => 'Teilnehmer',\n        'title'     => 'Teilnehmer von :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Name der Unterhaltung',\n        'type'  => 'Im Spiel, Vorbereitung, Handlung',\n    ],\n    'show'          => [\n        'is_closed' => 'Unterhaltung geschlossen',\n    ],\n    'tabs'          => [\n        'participants'  => 'Teilnehmer',\n    ],\n    'targets'       => [\n        'characters'    => 'Charaktere',\n        'members'       => 'Mitglieder',\n    ],\n];\n"
  },
  {
    "path": "lang/de/cookieconsent.php",
    "content": "<?php\n\nreturn [\n    'allow'     => 'Cookies zulassen',\n    'dismiss'   => 'Zurückweisen',\n    'header'    => 'Cookie-Zustimmung',\n    'link'      => 'Erfahre mehr',\n    'message'   => 'Kanka verwendet Cookies, um sicherzustellen, dass du das beste Erlebnis auf unserer Website hast.',\n    'policy'    => 'Cookie-Richtlinie',\n    'reject'    => 'Verfall',\n];\n"
  },
  {
    "path": "lang/de/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Neue Kreatur',\n    ],\n    'creatures'     => [],\n    'fields'        => [\n        'is_dead'       => 'Tod',\n        'is_extinct'    => 'Ausgestorben',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_dead'       => 'Diese Kreatur ist tot.',\n        'is_extinct'    => 'Diese Kreatur ist ausgestorben.',\n    ],\n    'lists'         => [\n        'empty' => 'Füge Tiere, Monster oder Fabelwesen hinzu, denen deine Helden begegnen oder mit denen sie sich anfreunden können.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Pflanzenfresser, aquatisch, mythisch',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/de/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Aktionen',\n        'apply'             => 'Übernehmen',\n        'back'              => 'Zurück',\n        'change'            => 'Ändern',\n        'close'             => 'schließen',\n        'confirm'           => 'bestätigen',\n        'copy'              => 'Kopieren',\n        'copy_mention'      => 'Kopie [] erwähnen',\n        'copy_to_campaign'  => 'Kopiere zu Kampagne',\n        'disable'           => 'deaktivieren',\n        'enable'            => 'aktivieren',\n        'explore_view'      => 'Verschachtelte Ansicht',\n        'export'            => 'Exportieren',\n        'find_out_more'     => 'Mehr erfahren',\n        'go_to'             => 'Gehe zu :name',\n        'help'              => 'Hilfe',\n        'json-export'       => 'Export (json)',\n        'markdown-export'   => 'Exportieren (Markdown)',\n        'move'              => 'Verschieben',\n        'new'               => 'Neu',\n        'new_child'         => 'neues Unterobjekt',\n        'new_post'          => 'Neue Objektnotiz',\n        'next'              => 'Weiter',\n        'open'              => 'Offen',\n        'print'             => 'Drucken',\n        'reorder'           => 'Neu anordnen',\n        'reset'             => 'Zurücksetzen',\n        'transform'         => 'Umwandeln',\n    ],\n    'add'               => 'Hinzufügen',\n    'alerts'            => [\n        'copy_attribute'    => 'Die Erwähnung des Attributs wurde in Ihre Zwischenablage kopiert.',\n        'copy_invite'       => 'Der Einladungslink zur Kampagne wurde in deine Zwischenablage kopiert.',\n        'copy_mention'      => 'Die erweiterte Erwähnung dieses Objekts wurde in Ihre Zwischenablage kopiert.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Bearbeitung vieler Objekte',\n            'permissions'   => 'Berechtigungen ändern',\n        ],\n        'age'           => [\n            'helper'    => 'Sie können + und - vor der Nummer verwenden, um das Alter dynamisch zu aktualisieren.',\n        ],\n        'buttons'       => [\n            'label' => 'Für ausgewählt',\n        ],\n        'edit'          => [\n            'locations' => 'Aktion für Standorte',\n            'tagging'   => 'Aktion für Tags',\n            'tags'      => [\n                'add'       => 'Hinzufügen',\n                'remove'    => 'Entfernen',\n            ],\n            'title'     => 'Mehrere Objekte bearbeiten',\n        ],\n        'errors'        => [\n            'admin'     => 'Nur Kampagnenadmins können den \"Privat\" Status eines Objektes ändern.',\n            'general'   => 'Bei der Verarbeitung Ihrer Aktion ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut und kontaktieren Sie uns, wenn das Problem weiterhin besteht. Fehlermeldung: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Überschreiben',\n            ],\n            'helpers'   => [\n                'override'  => 'Wenn ausgewählt, werden die Berechtigungen der ausgewählten Objekte mit diesen überschrieben. Wenn das Kontrollkästchen deaktiviert ist, werden die ausgewählten Berechtigungen zu den vorhandenen Berechtigungen hinzugefügt.',\n            ],\n            'title'     => 'Ändert die Berechtigungen für mehrere Objekte',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Wenden Sie eine Vorlage auf mehrere Objekte an',\n    ],\n    'cancel'            => 'Abbrechen',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Kopieren Sie Objekte in eine andere Kampagne',\n        'panel'         => 'Kopieren',\n        'title'         => 'Kopiere :name in eine andere Kampagne',\n    ],\n    'create'            => 'Erstellen',\n    'datagrid'          => [\n        'empty' => 'Nichts zu sehen bisher.',\n    ],\n    'delete_modal'      => [\n        'callout'       => 'Psst!',\n        'confirm'       => 'Bestätige das Entfernen',\n        'permanent'     => 'Diese Aktion ist dauerhaft.',\n        'recoverable'   => 'Objekte können mit einer :boosted-campaign bis zu :day Tage lang wiederhergestellt werden.',\n        'title'         => 'Löschen bestätigen',\n    ],\n    'destroy_many'      => [],\n    'dynamic'           => [\n        'permission'    => 'Du hast nicht die nötige Berechtigungen, um ein Objekt des Moduls :module zu erstellen.',\n        'unknown'       => 'Ungültiges Objekt des :module Moduls .',\n    ],\n    'edit'              => 'Bearbeiten',\n    'errors'            => [\n        'boosted_campaigns'     => 'Diese Funktion ist nur für :boosted verfügbar',\n        'unavailable_feature'   => 'nicht verfügbare Eigenschaft',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'calendar_date'     => 'Kalenderdatum',\n        'child'             => 'Kind',\n        'closed'            => 'geschlossen',\n        'colour'            => 'Farbe',\n        'copy_abilities'    => 'Kopiere Fähigkeiten',\n        'copy_inventory'    => 'Kopiere Inventar',\n        'copy_links'        => 'Kopiere Objekt Links',\n        'copy_permissions'  => 'Berechtigungen kopieren (dies überschreibt die auf der Registerkarte Berechtigungen festgelegten Werte)',\n        'copy_posts'        => 'Beiträge kopieren (dies umfasst die Berechtigungen für Beiträge)',\n        'copy_reminders'    => 'Erinnerungen kopieren',\n        'creator'           => 'Ersteller',\n        'date_range'        => 'Datumsbereich',\n        'excerpt'           => 'Auszug',\n        'has_entity_files'  => 'Hat Objektdateien',\n        'has_image'         => 'hat ein Bild',\n        'has_posts'         => 'hat gepostet',\n        'header_image'      => 'Kopfzeilenbild',\n        'image'             => 'Bild',\n        'is_closed'         => 'Die Konversation wird geschlossen und es werden keine neuen Nachrichten mehr akzeptiert.',\n        'is_private'        => 'Privat',\n        'is_private_v3'     => 'Zeigen Sie dies nur Mitgliedern der Rolle :admin-role an. Dies überschreibt alle anderen Berechtigungen.',\n        'is_star'           => 'Angepinnt',\n        'locations'         => ':first in :second',\n        'name'              => 'Name',\n        'parent'            => 'übergeordnetes Element',\n        'position'          => 'Position',\n        'replace_mentions'  => 'Ersetze die Attributerwähnungen im Eintrag durch die des neuen Objekts',\n        'template'          => 'Vorlage',\n        'tooltip'           => 'Kurzinfo',\n        'type'              => 'Typ',\n        'visibility'        => 'Sichtbarkeit',\n        'word-count'        => 'Wort count: :number',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Du hast die maximale Anzahl (:max) von Dateien in diesem Objekt erreicht.',\n            'max_size'  => 'Die Kampagne hat die maximale Dateispeicherkapazität erreicht.',\n            'no_files'  => 'Keine Dateien.',\n        ],\n        'hints'     => [\n            'limit'         => 'In jedem Objekt kann eine maximale Anzahl von :max Dateien hochgeladen werden.',\n            'limitations'   => 'Unterstütze Formate: :formats. Max. Dateigröße: :size',\n        ],\n    ],\n    'filter'            => 'Filter',\n    'filters'           => [\n        'all'               => 'Filter um alle Unterobjekte zu sehen',\n        'clear'             => 'Filter zurücksetzen',\n        'copy_helper'       => 'Verwenden Sie die kopierten Filter in Ihrer Zwischenablage als Werte für Filter in Dashboard-Widgets und Quicklinks.',\n        'copy_to_clipboard' => 'Kopiere Filter in die Zwischenablage',\n        'direct'            => 'Filter um nur direkte Unterobjekte zu sehen',\n        'filtered'          => 'Zeige :count von :total :entity.',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Zeige alle Nachkommen (:count)',\n                'filtered'  => 'Zeige direkte Nachkommen (:count)',\n            ],\n        ],\n        'mobile'            => [\n            'clear' => 'Löschen',\n            'copy'  => 'Clipboard',\n        ],\n        'options'           => [\n            'children'  => 'Mit untergeordneten Objekten',\n            'exclude'   => 'Ausschließen',\n            'hide'      => 'verbergen',\n            'include'   => 'Einschließen',\n            'none'      => 'keine',\n            'show'      => 'anzeigen',\n        ],\n        'show'              => 'Zeigen',\n        'sorting'           => [\n            'asc'       => ':field Aufsteigend',\n            'desc'      => ':field absteigend',\n            'helper'    => 'Steuern Sie, in welcher Reihenfolge die Ergebnisse angezeigt werden.',\n        ],\n        'title'             => 'Filter',\n    ],\n    'fix-this-issue'    => 'Beheben Sie dieses Problem',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Füge Datum hinzu',\n        ],\n        'copy_options'  => 'Kopiere Optionen',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Kopieren Sie die folgenden verwandten Elemente aus der Quelle in das neue Objekt.',\n        'linking'       => 'Verknüpfung mit anderen Objekten',\n    ],\n    'hidden'            => 'Versteckt',\n    'hints'             => [\n        'calendar_date'         => 'Ein Datum erlaubt es, Listen einfach zu filtern und pflegt ein Ereignis im ausgewählten Kalender.',\n        'image_dimension'       => 'Empfohlene Abmessungen: :dimension Pixel.',\n        'image_limitations'     => 'Unterstützte Formate: :formats. Maximale Dateigröße: :size.',\n        'image_recommendation'  => 'empfohlene Abmaße: :width by :height px.',\n        'is_star'               => 'Angepinnte Objekte erscheinen im Objektmenü.',\n        'tooltip'               => 'Ersetzen Sie die automatisch generierte Kurzinfo durch den folgenden Inhalt.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Erstellt von :name :date',\n        'created_date_clean'    => 'Erstellt :date',\n        'unknown'               => 'Unbekannt',\n        'updated_clean'         => 'Zuletzt bearbeitet von :name :date',\n        'updated_date_clean'    => 'Zuletzt bearbeitet :date',\n        'view'                  => 'Zeige Objektprotokoll',\n    ],\n    'image'             => [\n        'error' => 'Wir konnten das von dir angeforderte Bild nicht laden. Es könnte sein, dass die Website nicht erlaubt, Bilder herunterzuladen (typisch für Squarespace und DeviantArt) oder dass der Link nicht mehr gültig ist.',\n    ],\n    'is_private'        => 'Dieses Objekt ist privat und nicht von Zuschauern einsehbar.',\n    'keyboard-shortcut' => 'Tastaturkürzel: Code',\n    'move'              => [],\n    'navigation'        => [\n        'cancel'            => 'Abbrechen',\n        'or_cancel'         => 'oder :cancel',\n        'skip_to_content'   => 'Navigation überspringen',\n    ],\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Hinzufügen',\n                'deny'      => 'verweigern',\n                'ignore'    => 'Ignorieren',\n                'remove'    => 'Entfernen',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'erlauben',\n                'deny'      => 'verweigern',\n                'inherit'   => 'Erben',\n            ],\n            'delete'        => 'Löschen',\n            'edit'          => 'Bearbeiten',\n            'toggle'        => 'Umschalten',\n            'view'          => 'Ansicht',\n        ],\n        'fields'            => [\n            'member'    => 'Mitglied',\n            'role'      => 'Rolle',\n        ],\n        'helpers'           => [\n            'setup' => 'Verwenden Sie diese Schnittstelle, um zu optimieren, wie Rollen und Benutzer mit diesem Objekt interagieren können. :allow ermöglicht dem Benutzer oder der Rolle, diese Aktion auszuführen. :deny wird ihnen diese Handlung verweigern. :inherit verwendet die Berechtigung des Benutzers oder der Hauptrolle. Ein Benutzer, der auf :allow eingestellt ist, kann die Aktion ausführen, auch wenn seine Rolle auf :deny eingestellt ist.',\n        ],\n        'success'           => 'Berechtigungen gespeichert.',\n        'title'             => 'Berechtigungen',\n        'too_many_members'  => 'Diese Kampagne hat zu viele Mitglieder (> 10), um in dieser Benutzeroberfläche angezeigt zu werden. Verwenden Sie die Schaltfläche Berechtigung in der Objektansicht, um die Berechtigungen im Detail zu steuern.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Wähle einen Kalender',\n        'entry'         => 'Verwende @ gefolgt von drei Buchstaben, um andere Objekte der Kampagne zu erwähnen.',\n        'fallback'      => 'Wähle :module',\n        'gallery_image' => 'Wählen Sie ein Bild aus der Kampagnengalerie',\n        'image_url'     => 'Du kannst ein Bild auch von einer URL hochladen',\n        'journal'       => 'Wähle ein Logbuch',\n        'location'      => 'Wähle einen Ort',\n        'multiple'      => 'Wähle eine oder mehrere aus',\n        'name'          => 'Name des Objekts',\n        'organisation'  => 'Wähle eine Organisation',\n        'parent'        => 'übergeordnetes Element wählen',\n        'tag'           => 'Wähle ein Tag',\n        'timeline'      => 'Wähle einen Zeitstrahl',\n        'type'          => 'Art des Objekts',\n        'user'          => 'wähle einen Benutzer',\n    ],\n    'relations'         => [],\n    'remove'            => 'Löschen',\n    'reorder'           => [\n        'empty' => 'Keine Elemente zum Neuordnen.',\n    ],\n    'save'              => 'Speichern',\n    'save_and_close'    => 'Speichern und schließen',\n    'save_and_copy'     => 'Speichern und kopieren',\n    'save_and_new'      => 'Speichern und neu',\n    'save_and_update'   => 'Speichern und aktualisieren',\n    'save_and_view'     => 'Speichern und ansehen',\n    'search'            => 'Suchen',\n    'select'            => 'Auswählen',\n    'tabs'              => [\n        'abilities'     => 'Fähigkeiten',\n        'inventory'     => 'Inventar',\n        'mentions'      => 'Erwähnungen',\n        'overview'      => 'Übersicht',\n        'permissions'   => 'Berechtigungen',\n        'premium'       => 'Premium',\n        'profile'       => 'Profil',\n        'reminders'     => 'Erinnerungen',\n    ],\n    'titles'            => [\n        'editing'   => ':name editieren',\n        'new'       => 'Neu :module',\n    ],\n    'tooltips'          => [],\n    'update'            => 'Bearbeiten',\n    'users'             => [\n        'unknown'   => 'Unbekannt',\n    ],\n    'view'              => 'Ansehen',\n    'visibilities'      => [\n        'admin'         => 'Admin',\n        'admin-self'    => 'Selbst & Admin',\n        'all'           => 'Jeder',\n        'members'       => 'Mitglieder',\n        'self'          => 'Selbst',\n    ],\n];\n"
  },
  {
    "path": "lang/de/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'customise' => 'Dashboard anpassen',\n        'follow'    => 'Folgen',\n        'join'      => 'beitreten',\n        'unfollow'  => 'Nicht mehr folgen',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Editieren',\n            'new'   => 'neues Dashboard',\n        ],\n        'create'        => [\n            'helper'    => 'Erstelle ein neues Dashboard für :name und weise es zu, welche Rollen es sehen oder als Standard-Dashboard verwenden können.',\n            'success'   => 'Neues Kampagnen Dashboard :name erstellt',\n            'title'     => 'Neues Kampagnen Dashboard',\n        ],\n        'custom'        => [\n            'text'  => 'Sie bearbeiten derzeit das Dashboard :name der Kampagne.',\n        ],\n        'default'       => [\n            'text'  => 'Sie bearbeiten derzeit das Standard Dashboard der Kampagne.',\n            'title' => 'Standard Dashboard',\n        ],\n        'delete'        => [\n            'success'   => 'Dashboard :name entfernt',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Widgets kopieren',\n            'name'          => 'Dashboard Name',\n            'visibility'    => 'Sichtbarkeit',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Duplizieren Sie die Widgets aus dem :name -Dashboard in dieses neue.',\n        ],\n        'pitch'         => 'Erstelle mehrere Dashboards mit benutzerdefinierten Berechtigungen für jede Rolle der Kampagne.',\n        'placeholders'  => [\n            'name'  => 'Name des Dashboards',\n        ],\n        'update'        => [\n            'success'   => 'Kampagnen Dashboard :name aktualisiert',\n            'title'     => 'Kampagnen Dashboard :name aktualisieren',\n        ],\n        'visibility'    => [\n            'default'   => 'Standard',\n            'none'      => 'keiner',\n            'visible'   => 'Sichtbar',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Wenn du einer Kampagne folgst, wird sie im Kampagnenwähler (oben rechts) unter deinen Kampagnen angezeigt.',\n        'join'      => 'Diese Kampagne steht neuen Mitgliedern offen. Klicken Sie, um sich zu bewerben, um daran teilzunehmen.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Widget hinzufügen',\n            'back_to_dashboard' => 'Zurück zum Dashboard.',\n            'edit'              => 'Widget bearbeiten.',\n            'new'               => 'Neues :type widget',\n        ],\n        'reorder'   => [\n            'helper'    => 'Zieh mich, um mich zu bewegen',\n            'success'   => 'Widgets neu geordnet.',\n        ],\n        'title'     => 'Kampagnen Dashboard Einrichtung',\n        'tutorial'  => [\n            'blog'  => 'unser Tutorial',\n            'text'  => 'Benötigen Sie Hilfe beim Einrichten Ihres Kampagnen-Dashboards? Lesen Sie :blog für Hilfe und Inspiration.',\n        ],\n    ],\n    'title'         => 'Dashboard',\n    'welcome'       => [],\n    'widgets'       => [\n        'advanced_options_boosted'  => 'Aktiviere weitere Optionen wie das Anzeigen von Pins mit einer :boosted_campaign.',\n        'calendar'                  => [\n            'actions'           => [\n                'next'      => 'Datum auf nächsten Tag ändern',\n                'previous'  => 'Datum auf vorigen Tag ändern',\n            ],\n            'previous_events'   => 'Vorige',\n            'upcoming_events'   => 'Bevorstehende',\n        ],\n        'campaign'                  => [\n            'helper'    => 'Dieses Widget zeigte den Kampagnenkopf an. Dieses Widget wird immer im Standard-Dashboard angezeigt.',\n        ],\n        'create'                    => [\n            'helper'            => 'Wähle einen Widget-Typ aus, den du zum Dashboard :name hinzufügen möchtest.',\n            'helper-default'    => 'Wähle einen Widget-Typ aus, den du zum Standard-Dashboard hinzufügen möchtest.',\n            'success'           => 'Widget zum Dashboard hinzugefügt.',\n            'title'             => 'Neues Widget',\n        ],\n        'delete'                    => [\n            'success'   => 'Widget vom Dashboard entfernt.',\n        ],\n        'fields'                    => [\n            'class'             => 'CSS-Klasse',\n            'dashboard'         => 'Dashboard',\n            'name'              => 'Benutzerdefinierter Widget-Name',\n            'optional-entity'   => 'Link zum Objekt',\n            'order'             => 'Sortierung',\n            'size'              => 'Größe',\n            'width'             => 'Breite',\n        ],\n        'helpers'                   => [\n            'class'     => 'Definieren Sie eine benutzerdefinierte CSS-Klasse, die dem Widget hinzugefügt wird.',\n            'filters'   => 'Klicke hier, um mehr über die verfügbaren Filteroptionen zu erfahren.',\n        ],\n        'orders'                    => [\n            'name_asc'  => 'Name aufsteigend',\n            'name_desc' => 'Name absteigend',\n            'oldest'    => 'Älteste geänderte',\n            'recent'    => 'Kürzlich modifiziert',\n        ],\n        'preview'                   => [\n            'displays'  => [\n                'expand'    => 'Erweiterbarer Eintrag',\n                'full'      => 'Vollständiger Eintrag',\n            ],\n            'fields'    => [\n                'display'   => 'Anzeige',\n            ],\n        ],\n        'random'                    => [\n            'helpers'   => [\n                'name'  => 'Sie können den Namen der zufälligen Objekte mit {name} referenzieren',\n            ],\n            'type'      => [\n                'all'   => 'Alle',\n            ],\n        ],\n        'recent'                    => [\n            'advanced_filter'   => 'Erweiterter Filter',\n            'advanced_filters'  => [\n                'mentionless'   => 'Erwähnungslos (Objekte, die andere Objekte nicht erwähnen)',\n                'unmentioned'   => 'Nicht erwähnt (Objekte, die von anderen Objekten nicht erwähnt werden)',\n            ],\n            'all-entities'      => 'Alle Objekte',\n            'entity-header'     => 'Verwenden Sie den Objekt-Header als Bild',\n            'filters'           => 'Filter',\n            'help'              => 'Nur das zuletzt aktualisierte Objekt anzeigen, aber eine vollständige Vorschau des Objektes anzeigen',\n            'helpers'           => [\n                'entity-header'     => 'Wenn Ihr Objekt über einen Objekt-Header verfügt (erweiterte Kampagnenfunktion), stellen Sie dieses Widget so ein, dass dieses Bild anstelle des Bilds des Objektes verwendet wird.',\n                'show_attributes'   => 'Zeigen Sie die Attribute der Objekte unter dem Eintrag an.',\n                'show_members'      => 'Wenn es sich bei dem Objekt um eine Familie oder Organisation handelt, zeigen Sie ihre Mitglieder unter dem Eintrag an.',\n                'show_relations'    => 'Zeigen Sie die angehefteten Beziehungen des Objekts unter dem Eintrag an.',\n            ],\n            'show_attributes'   => 'Zeige Attribute',\n            'show_members'      => 'Zeige Mitglieder',\n            'show_relations'    => 'Zeige angepinnte Beziehungen',\n            'singular'          => 'Einzelnes Objekt',\n            'tags'              => 'Filtern Sie die Liste der zuletzt geänderten Objekte nach bestimmten Tags.',\n            'title'             => 'Vor kurzem aktualisiert',\n        ],\n        'tabs'                      => [\n            'advanced'  => 'Erweitert',\n            'setup'     => 'Setup',\n        ],\n        'unmentioned'               => [\n            'title' => 'Unerwähnte Objekte',\n        ],\n        'update'                    => [\n            'success'   => 'Widget angepasst.',\n        ],\n        'widths'                    => [\n            '0' => 'automatisch',\n            '12'=> 'Komplett (100%)',\n            '3' => 'winzig (25%)',\n            '4' => 'Klein (33%)',\n            '6' => 'Halb (50%)',\n            '8' => 'Weit (66%)',\n            '9' => 'Groß (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/dashboards/setup.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Widget hinzufügen',\n    ],\n    'sections'  => [\n        'switch'    => 'Wechseln zu...',\n    ],\n    'tooltips'  => [\n        'add'       => 'Klicke hier, um ein neues Widget zum Dashboard hinzuzufügen.',\n        'switch'    => 'Klicke hier, um zu einem anderen Dashboard zu wechseln.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/dashboards/widgets/calendar.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Zeigt anstehende Erinnerungen an.',\n    'name'          => 'Kalender',\n];\n"
  },
  {
    "path": "lang/de/dashboards/widgets/campaign.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Zeigt eine Vorschau der Kampagne.',\n    'name'          => 'Kampagne',\n];\n"
  },
  {
    "path": "lang/de/dashboards/widgets/header.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Zeigt eine Textüberschrift an.',\n    'name'          => 'Kopfzeile',\n];\n"
  },
  {
    "path": "lang/de/dashboards/widgets/help.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Zeigt Hilfe und Community-Links an.',\n    'name'          => 'Hilfe & Community',\n    'title'         => 'Hilfe & Community',\n];\n"
  },
  {
    "path": "lang/de/dashboards/widgets/preview.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Zeigt ein bestimmtes Objekt an.',\n    'name'          => 'ausgewähltes Objekt',\n];\n"
  },
  {
    "path": "lang/de/dashboards/widgets/random.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Zeigt eine zufälliges Objekt aus der Kampagne an.',\n    'name'          => 'zufälliges Objekt',\n];\n"
  },
  {
    "path": "lang/de/dashboards/widgets/recent.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Zeigt eine Liste der zuletzt geänderten Objekte an.',\n    'name'          => 'Kürzlich geänderte Objekte',\n];\n"
  },
  {
    "path": "lang/de/dashboards/widgets/welcome.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Zeigt eine Willkommensnachricht mit Tipps an.',\n    'endings'       => [],\n    'focus'         => [\n        'text'  => 'Hier, das bin ich!',\n        'title' => 'Hey',\n    ],\n    'intros'        => [\n        '1' => 'Begrüße dein neues Worldbuilding-Zuhause, :user! Wir haben Ihre erste Kampagne eingerichtet und zwei Beispiele für :Charaktere und :Orte beigefügt. Diese sind auch hier auf dem Dashboard der Kampagne zu sehen.',\n        '2' => 'Um loszulegen, klicke auf den großen :new-entity-Button (oder drücke :letter auf deiner Tastatur), und klicke auf :characters, um deinen ersten Charakter zu erstellen. So einfach ist das! Du kannst alle deine Charaktere, Orte und andere :entities in der Seitenleiste links auf der Seite finden.',\n        '3' => 'Hier sind unsere 5 besten Tricks für die Verwendung von Kanka',\n    ],\n    'name'          => 'Willkommen',\n    'title'         => 'Willkommen bei :kanka! 🎉',\n    'tricks'        => [\n        '1'         => 'Schreibe beim Verfassen von Beschreibungen die Namen von Elementen der Kampagne nicht neu. Gebe stattdessen :code und drei Buchstaben ein, um :andere Elemente der Kampagne zu erwähnen. Diese Erwähnungen werden automatisch aktualisiert, wenn du die Namen änderst.',\n        '2'         => 'Um den Namen, das Thema oder das Bild der Kampagne zu bearbeiten, klicke in der Seitenleiste auf :world und dann auf die Schaltfläche :edit.',\n        '3'         => 'Schreibe geheime Informationen über Objekte als :posts statt in das Haupttextfeld.',\n        '4'         => 'Lade deine Freunde zur Kampagne ein, indem du auf :world und :members klickst. Von dort aus kannst du Einladungslinks erstellen.',\n        '5'         => 'Du kannst diese Willkommensnachricht entfernen und andere Informationen auf dieser Seite (genannt Dashboard) anzeigen. Scrolle nach unten und klicke auf die Schaltfläche :.',\n        'mention'   => 'erwähnen',\n    ],\n];\n"
  },
  {
    "path": "lang/de/datagrids.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'back_to'   => 'zurück zu :name',\n    ],\n    'modes'     => [\n        'flatten'   => 'Umschalten auf ein flacheres Layout',\n        'grid'      => 'Wechsel in die Rasteransicht',\n        'nested'    => 'Zu einem verschachtelten Layout wechseln',\n        'table'     => 'Wechsel in die Tischansicht',\n    ],\n    'tooltips'  => [\n        'nested'    => 'Dieses Objekt hat untergeordnete Objekte. Klicke auf das Bild, um es anzuzeigen.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'Tag',\n    'days'          => 'Tage',\n    'elapsed_ago'   => 'vor :duration',\n    'hour'          => 'Stunde',\n    'hours'         => 'Stunden',\n    'just_now'      => 'gerade eben',\n    'minute'        => 'Minute',\n    'minutes'       => 'Minuten',\n    'month'         => 'Monat',\n    'months'        => 'Monate',\n    'second'        => 'Sekunde',\n    'seconds'       => 'Sekunden',\n    'week'          => 'Woche',\n    'weeks'         => 'Wochen',\n    'year'          => 'Jahr',\n    'years'         => 'Jahre',\n];\n"
  },
  {
    "path": "lang/de/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Seitentitel',\n];\n"
  },
  {
    "path": "lang/de/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Ergebnisse des Würfelwurfs',\n    ],\n];\n"
  },
  {
    "path": "lang/de/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Neuer Würfelwurf',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Würfelwurf entfernt.',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Gewürfelt am',\n        'parameters'    => 'Parameter',\n        'results'       => 'Ergebnisse',\n        'rolls'         => 'Würfe',\n    ],\n    'hints'         => [\n        'parameters'    => 'Was sind meine Würfeloptionen?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Ergebnisse',\n        ],\n    ],\n    'lists'         => [\n        'empty' => 'Erstelle und speicher Würfelwürfe für die Kampagne, um die Ergebnisse direkt in Kanka zu verfolgen.',\n    ],\n    'placeholders'  => [\n        'name'          => 'Name des Würfelwurfs',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Wurf',\n        ],\n        'error'     => 'Würfelwurf nicht erfolgreich. Kann die Parameter nicht parsen.',\n        'fields'    => [\n            'creator'   => 'Ersteller',\n            'date'      => 'Datum',\n            'result'    => 'Ergebnis',\n        ],\n        'hint'      => 'Alle Würfe, die für dieses Würfelwurf-Template gewürfelt wurden.',\n        'success'   => 'Würfel gewürfelt.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Ergebnisse',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/emails/activity/email.php",
    "content": "<?php\n\nreturn [\n    'first' => 'Die E-Mail-Adresse Ihres Kanka-Kontos wurde geändert in :email.',\n    'title' => 'E-Mail geändert',\n];\n"
  },
  {
    "path": "lang/de/emails/activity/password.php",
    "content": "<?php\n\nreturn [\n    'first' => 'Das Passwort für dein Kanka-Konto wurde geändert.',\n    'help'  => 'Wenn du das nicht warst, kontaktiere uns bitte unter :email.',\n    'title' => 'Passwort geändert',\n];\n"
  },
  {
    "path": "lang/de/emails/purge/first.php",
    "content": "<?php\n\nreturn [\n    'assure'            => 'Wenn du dein Konto regelmäßig nutzt, mache dir keine Sorgen, wir löschen nur Konten und Kampagnen, die nicht aktiv genutzt werden.',\n    'help'              => 'Brauchst du Hilfe bei der Benutzung von Kanka? Trete unserem :discord bei oder kontaktiere uns unter :email',\n    'intro_account'     => 'Wir möchten dir mitteilen, dass dein Konto in :Tagen gelöscht wird, da du es in den letzten :Monaten nicht genutzt hast.',\n    'intro_campaigns'   => 'Wir möchten dich darüber informieren, dass dein Konto und die folgenden Kampagnen in :Tagen gelöscht werden, da du es in den letzten :Monaten nicht genutzt hast.',\n    'keep'              => 'Wenn du dein Konto aktiv halten möchtest, melde dich bitte innerhalb der nächsten :Tage an.',\n    'title'             => 'dein Kanka-Konto wird gelöscht in: Anzahl Tage',\n    'warning'           => [\n        'account'   => 'Sobald dies geschehen ist, werden alle Daten, die mit deinem Konto unter :email verbunden ist, endgültig gelöscht.',\n        'campaigns' => 'Sobald dies geschehen ist, werden alle Daten, die mit deinem Konto verbunden sind, unter email :email, sowie die folgenden Kampagnen endgültig gelöscht.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/emails/purge/second.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'Dies ist eine letzte Erinnerung daran, dass das Kanka-Konto unter der E-Mail-Adresse :email in :amount Tagen gelöscht wird, da du es in den letzten :duration Monaten nicht verwendet hast.',\n    'title' => 'Letzte Warnung: Ihr Kanka-Konto wird in :amount Tagen gelöscht',\n];\n"
  },
  {
    "path": "lang/de/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'Aktualisiere deine Kartendetails',\n    'primary'   => 'Dies ist eine automatische Warnung, dass Ihr :brand **** :last bald abläuft.',\n    'title'     => 'Ablaufende Karte für Ihr Abonnement',\n    'valid'     => 'Wenn Sie Ihr Abonnement behalten möchten, bitte :action.',\n];\n"
  },
  {
    "path": "lang/de/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'Wenn Sie Ihr Abonnement nicht erneuern möchten, melden Sie sich bitte bei Ihrem Kanka-Konto an und :link.',\n    'closing'   => 'Mit freundlichen Grüßen,',\n    'dear'      => 'Lieber: Name',\n    'link'      => 'Kündigen Sie Ihr Abonnement',\n    'notice'    => 'Wichtiger Hinweis zur Verlängerung:',\n    'primary'   => 'Dies ist eine automatische Erinnerung, dass wir Ihr :brand **** :last on :date automatisch für Ihr Kanka-Abonnement belasten werden.',\n    'title'     => 'Jährliche Zahlung für Ihr Kanka-Abonnement',\n    'valid'     => 'Bitte stellen Sie sicher, dass Ihre Kreditkarte am Tag der Zahlung gültig ist.',\n];\n"
  },
  {
    "path": "lang/de/emails/subscriptions/validation.php",
    "content": "<?php\n\nreturn [\n    'title' => 'E-Mail-Überprüfung des Kanka-Kontos.',\n];\n"
  },
  {
    "path": "lang/de/emails/validation.php",
    "content": "<?php\n\nreturn [\n    'error'     => 'Validierung fehlgeschlagen, bitte versuche es erneut.',\n    'modal'     => 'Für ein Abonnement ist eine bestätigte E-Mail erforderlich. Bitte prüfe deinen Posteingang auf einen Link zur Bestätigung deiner E-Mail, bevor du den Anmeldevorgang fortsetzt.',\n    'success'   => 'E-Mail erfolgreich validiert.',\n];\n"
  },
  {
    "path": "lang/de/emails/welcome/2024.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Viel Spaß beim Weltenbau und vielen Dank, dass du dich mit uns auf diese Reise begeben hast,',\n    'header'    => 'Willkommen beim besten Ort, um deine Kampagne zu erstellen, :name!',\n    'lead_1'    => 'Kanka wurde von passionierten Rollenspielern entwickelt, die einen einfachen und gemeinschaftlichen Ansatz für die Welterstellung wollten, ohne dabei Kompromisse bei den Funktionen einzugehen.',\n    'lead_2'    => 'Daraus ist Kanka entstanden. Wir sind hier, um dir bei der Organisation deiner Kampagne zu helfen, damit du dich darauf konzentrieren kannst, deine Welt zum Leben zu erwecken.',\n    'ps'        => 'PS: Wenn du mit uns in Kontakt treten willst , findest du uns auf :discord, oder unter :email.',\n    'what_1'    => 'Um dir den Einstieg zu erleichtern, haben wir deine erste Kampagne erstellt und zwei Beispielcharaktere und -orte hinzugefügt. Du kannst  :starten, wenn du möchtest.',\n    'what_2'    => 'Du solltest dir auch diese Quellen ansehen:',\n    'what_3'    => 'Unser :kb, wenn du grundlegende Fragen zu den Funktionen von Kanka und deinem Konto hast.',\n    'what_4'    => 'Im :doc wird alles ausführlicher behandelt.',\n    'what_5'    => 'Und schließlich: Kampagnen, die zeigen, was andere mit Kanka gemacht haben.',\n    'what_new'  => 'ein neues beginnen',\n    'what_now'  => 'Was nun?',\n    'why'       => 'Du hast diese E-Mail erhalten, weil du dich auf unserer Website angemeldet hast.',\n];\n"
  },
  {
    "path": "lang/de/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    '2023'              => [\n        'basics'    => [\n            'text_1'    => 'Bei einem so umfangreichen Werkzeug wie Kanka kann es schwierig sein, zu wissen, wo man anfangen soll oder was zu tun ist. Unser :kb behandelt die grundlegendsten Fragen, die du haben könntest, und für weitere Hilfe kannst du unser :doc besuchen.',\n            'title'     => 'Die Grundlagen',\n        ],\n        'chat'      => [\n            'text_1'    => 'Wir hören gerne von unseren Nutzern. Am aktivsten sind wir auf :discord, wo du viele unserer engagierten Nutzer, ein Onboarding-Team sowie die Gründer von Kanka findest, die dir alle Fragen beantworten können. Du kannst uns auch eine E-Mail an :email schreiben.',\n            'title'     => 'Möchtest du dich unterhalten?',\n        ],\n        'intro'     => [\n            'header'    => 'Willkommen in der besten Worldbuilding-Community, :name!',\n            'link'      => 'Geh in deine Welt!',\n            'text_1'    => 'Begrüße dein neues Worldbuilding-Zuhause, :name! Die Gemeinschaft liegt in unserer DNA, und wir freuen uns, dass du dich uns anschließt. Kanka ist die Idee leidenschaftlicher Rollenspieler, die an eine vereinfachte und gemeinschaftliche Herangehensweise an den Weltenbau glauben, ohne Kompromisse bei den Funktionen einzugehen.',\n            'text_2'    => 'Wir haben deine erste Kampagne eingerichtet und zwei Beispielcharaktere und -orte beigefügt, um dir den Einstieg zu erleichtern.',\n        ],\n        'preview'   => 'Sei Teil der besten Worldbuilding-Community, :name!',\n    ],\n    'header'            => 'Willkommen bei Kanka :name',\n    'header_sub'        => 'Herzlichen Glückwunsch, Sie haben den ersten Schritt in der Erschaffung Ihrer Welt getan :kanka!',\n    'pricing'           => 'Preisgestaltung',\n    'section_1'         => 'Wohin jetzt?',\n    'section_11'        => 'Erschaffe deine Welt,',\n    'section_2'         => 'Die wichtigste Ressource ist: :discord, wo Sie viele unserer engagierten Benutzer, ein Onboarding-Team sowie den Gründer von Kanka finden, die alle Ihre Fragen beantworten können.',\n    'section_4'         => 'Unser :youtube bietet Videos zu den Grundlagen von Kanka. Obwohl noch nicht alle Themen behandelt werden, fügen wir regelmäßig neue Videos hinzu.',\n    'section_4_v2'      => 'Unsere :knowledge-base deckt die grundlegendsten Fragen ab, die du möglicherweise hast, und für eine umfassendere Hilfe kannst du zu unserer :documentation wechseln!',\n    'section_6'         => 'Kontaktiere uns',\n    'section_7'         => 'Wenn Sie keine Antwort auf Ihre Fragen gefunden haben oder einfach nur Kontakt aufnehmen möchten, finden Sie uns auf: :facebook oder per E-Mail unter :email. Wir sind ein kleines Team von 2 Freunden, aber wir beantworten jede E-Mail, die wir erhalten. Bitte zögern Sie nicht!',\n    'section_8'         => 'Eine letzte Sache',\n    'section_9_v2'      => 'Wir haben dafür gesorgt, dass alle Kernfunktionen von Kanka kostenlos sind, und wir werden es immer so halten. Wenn Sie uns jedoch bei diesem Projekt unterstützen möchten, können Sie Abonnent werden und Zugang zu zusätzlichen Funktionen sowie zu unserer ewigen Dankbarkeit erhalten. Weitere Informationen finden Sie auf der :pricing page.',\n    'social_account'    => 'Wenn Sie Probleme beim Anmelden in Ihrem Konto haben, eine kleine Erinnerung daran, dass Sie ein :provider login verwenden. Sie können dies in Ihren Kontoeinstellungen ändern.',\n    'title'             => 'Erste Schritte mit Kanka',\n];\n"
  },
  {
    "path": "lang/de/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Füge eine Fähigkeit hinzu',\n        'reset' => 'Fähigkeit zurücksetzen',\n        'sync'  => 'Hinzufügen von Rassen',\n    ],\n    'charges'   => [\n        'left'  => ':amount verbleibend',\n    ],\n    'create'    => [\n        'helper'            => 'Verknüpfe eine von mehreren Fähigkeiten mit :name.',\n        'success'           => 'Fähigkeit :ability hinzugefügt zu :entity',\n        'success_multiple'  => 'Fähigkeiten :abilities hinzugefügt zu :entity',\n        'title'             => 'Fügen Sie eine Fähigkeit hinzu zu :name',\n    ],\n    'fields'    => [\n        'note'      => 'Notiz',\n        'position'  => 'Position',\n    ],\n    'groups'    => [\n        'unorganised'   => 'Unorganisiert',\n    ],\n    'helpers'   => [\n        'note'      => 'Sie können Objekte mit erweiterten Erwähnungen (z. B. :code) und Attributen der Objekte (z. B. :attr) in diesem Feld referenzieren.',\n        'recharge'  => 'Setze alle Ladungen für bereits genutzte Fähigkeiten zurück.',\n        'sync'      => 'Importiere Fähigkeiten, die in der Rasse des Charakters definiert sind.',\n    ],\n    'import'    => [\n        'errors'            => [\n            'no_race'       => 'Der Charakter hat keine Spezies',\n            'not_character' => 'Das Objekt ist kein Charakter',\n        ],\n        'helper'            => 'Fähigkeiten der folgenden Rassen hinzufügen :name gehört zu:',\n        'no_abilities'      => 'Derzeit gibt es keine Möglichkeiten, aus den Rassen zu importieren :name gehört zu.',\n        'race_abilities'    => '{1} :name (:count ability)|[2,*] :name (:count abilities)',\n        'success'           => '{1} :count Fähigkeit importiert. | [2, *] :count Fähigkeiten importieren.',\n    ],\n    'recharge'  => [\n        'success'   => 'Alle Ladungen wurden zurückgesetzt.',\n    ],\n    'reorder'   => [\n        'parentless'    => 'kein übergepordnetes Objekt',\n        'success'       => 'Fähigkeiten erfolgreich neu geordnet.',\n    ],\n    'show'      => [\n        'helper'    => 'Fügen Sie diesem Objekt Fähigkeiten hinzu. Sie können die Sichtbarkeit jederzeit bearbeiten oder eine Fähigkeit entfernen. Fähigkeiten, die zu derselben übergeordneten Fähigkeit gehören, werden als Filterfelder angezeigt.',\n        'reorder'   => 'Fähigkeiten neu anordnen',\n        'title'     => 'Objektfähigkeiten für :name',\n    ],\n    'types'     => [\n        'unorganised'   => 'Die Fähigkeiten sind nach ihrem übergeordneten Feld gruppiert und werden hier wieder angezeigt.',\n    ],\n    'update'    => [\n        'success'   => 'Objektfähigkeit: Fähigkeit aktualisiert.',\n        'title'     => 'Objektfähigkeit für :name',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'templates' => [\n        'set'       => 'Vorlage erstellen',\n        'success'   => [\n            'set'   => 'Objekt :name als Vorlage gesetzt',\n            'unset' => 'Objekt :name nicht länger als Vorlage gesetzt',\n        ],\n        'toggle'    => 'Umgeschalteter Vorlagenstatus.',\n        'unset'     => 'Vorlage entfernen',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Alias hinzufügen',\n    ],\n    'create'        => [\n        'helper'    => 'Erstelle einen Alias für :name, damit er in der globalen Suche und durch :code-Erwähnungen gefunden werden kann.',\n        'success'   => 'Alias ​​:name zu :entity hinzugefügt.',\n        'title'     => 'Add an alias to :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Aliasname: Name entfernt.',\n    ],\n    'fields'        => [\n        'name'  => 'Name',\n    ],\n    'helpers'       => [\n        'primary'   => 'Das Festlegen eines oder mehrerer Aliase für das Objekt macht sie in der globalen Suche (obere Leiste) und durch Erwähnungen auffindbar.',\n    ],\n    'limit'         => 'Die Kampagne hat die Grenze der verfügbaren Aliase erreicht. Um unbegrenzt Aliase zu erhalten, schalte Premium-Funktionen frei.',\n    'pitch'         => 'Erstelle Aliase für dieses Objekt, um es einfach über die Suche und Erwähnungen zu finden.',\n    'placeholders'  => [\n        'name'  => 'Neuer Alias',\n    ],\n    'unboosted'     => [],\n    'update'        => [\n        'success'   => 'Alias ​​:name für :entity aktualisiert.',\n        'title'     => 'Alias ​​für :name aktualisieren',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'alias' => 'Alias',\n        'file'  => 'Datei',\n        'link'  => 'Link',\n    ],\n    'copy_alias'    => [\n        'success'   => 'Alias-Erwähnung in die Zwischenablage kopiert.',\n    ],\n    'show'          => [\n        'title' => 'Anhänge von :name',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'load'          => 'Laden',\n        'manage'        => 'Verwalten',\n        'more'          => 'Mehr Optionen',\n        'remove_all'    => 'Alles löschen',\n        'save_and_edit' => 'Bestätigen und Bearbeiten',\n        'save_and_story'=> 'Bestätigen und Ansehen',\n        'show_hidden'   => 'Ausgeblendete Attribute anzeigen',\n        'toggle_privacy'=> 'Privat/öffentlich',\n    ],\n    'create'        => [],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'api'                   => 'Ungültige Daten',\n        'loop'                  => 'Diese Attributberechnung enthält eine Endlosschleife!',\n        'no_attribute_selected' => 'Wähle zunächst ein oder mehrere Eigenschaften aus.',\n        'too_many_v2'           => 'Maximale Felder erreicht (:count/:max). Lösche zuerst einige Eigenschaften, bevor du weitere hinzufügen kannst.',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Community Vorlagen',\n        'is_private'            => 'Private Attribute',\n        'is_star'               => 'Angepinnt',\n        'preferences'           => 'Einstellungen',\n        'value'                 => 'Wert',\n    ],\n    'filters'       => [\n        'name'  => 'Attributname',\n        'value' => 'Attributwert',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Möchten Sie wirklich alle Attribute dieses Objekts löschen?',\n        'is_private'    => 'Erlaube nur Mitgliedern der Rolle :admin-role, die Attribute dieses Objekts zu sehen.',\n        'setup'         => 'Sie können Elemente wie TP oder Intelligenz eines Objekts mittels Attributen darstellen. Attribute können Sie manuell hinzufügen, indem sie auf den :manage Button klicken oder Sie wenden eine Attributsvorlage an.',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Attribute für :entity aktualisiert',\n        'title'     => 'Attribute für :name',\n    ],\n    'labels'        => [\n        'checkbox'  => 'Checkbox Name',\n        'name'      => 'Attributsname',\n        'section'   => 'Abteilungsname',\n        'value'     => 'Attributswert',\n    ],\n    'live'          => [\n        'success'   => 'Attribute :attribute aktualisiert',\n        'title'     => ':attribute aktualisieren',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Anzahl der Eroberungen, Challenge Rating, Initiative, Bevölkerung',\n        'block'     => 'Blockname',\n        'checkbox'  => 'Checkbox Name',\n        'icon'      => [\n            'class' => 'FontAwesome oder RPG Awesome class: fas fa-users',\n            'name'  => 'Symbolname',\n        ],\n        'number'    => 'Nummernname',\n        'random'    => [\n            'name'  => 'Attributname',\n            'value' => '1-100 oder Liste von Werten, die durch ein Komma getrennt sind',\n        ],\n        'section'   => 'Abteilungsname',\n        'value'     => 'Wert des Attributs',\n    ],\n    'ranges'        => [\n        'text'  => 'Verfügbare Optionen: :options',\n    ],\n    'sections'      => [\n        'unorganised'   => 'Unorganisiert',\n    ],\n    'show'          => [\n        'hidden'    => 'Ausgeblendete Attribute',\n        'title'     => ':name Attribut',\n    ],\n    'template'      => [\n        'load'      => [\n            'success'   => 'Vorlage geladen',\n            'title'     => 'Aus Vorlage laden',\n        ],\n        'pitch'     => 'Lade Attribute aus einer Attributvorlage oder installierte Plugins aus dem :plugin. \tGib diesem Lesezeichen ein spezielles :fontawesome Symbol, wie :example, mit einem :premium.',\n        'success'   => 'Attributvorlage :name wird auf :entity angewendet',\n        'title'     => 'Wende eine Attributvorlage auf :name an',\n    ],\n    'title'         => 'Eigenschaften',\n    'toasts'        => [\n        'bulk_deleted'  => 'Eigenschaften gelöscht',\n        'bulk_privacy'  => 'Eigenschaften Privatsphäre umgeschaltet',\n        'lock'          => 'Attribut gesperrt',\n        'pin'           => 'Attribut angepinnt',\n        'unlock'        => 'Attribut freigeschaltet',\n        'unpin'         => 'Attribut nicht angepinnt',\n    ],\n    'tutorials'     => [],\n    'types'         => [\n        'attribute' => 'Attribute',\n        'block'     => 'Block',\n        'checkbox'  => 'Checkbox',\n        'icon'      => 'Symbol',\n        'number'    => 'Nummer',\n        'random'    => 'Zufällig',\n        'section'   => 'Abteilung',\n        'text'      => 'Mehrzeiliger Text',\n    ],\n    'update'        => [\n        'success'   => 'Attribut von :entity aktualisiert',\n    ],\n    'visibility'    => [\n        'entry'     => 'Das Attribut wird im Objektmenü angezeigt.',\n        'private'   => 'Attribut nur für Mitglieder der Rolle \"Admin\" sichtbar.',\n        'public'    => 'Attribut für alle Mitglieder sichtbar.',\n        'tab'       => 'Das Attribut wird nur im Attribute-Reiter angezeigt.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/children.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Unterobjekte',\n];\n"
  },
  {
    "path": "lang/de/entities/events.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Erstelle eine Erinnerung, um :name mit einem Kalender zu verknüpfen.',\n    ],\n    'fields'    => [\n        'type'  => 'Ereignistyp',\n    ],\n    'helpers'   => [\n        'characters'    => 'Wenn Sie den Typ entweder als Geburts- oder als Todesdatum für diesen Charakter festlegen, wird automatisch dessen Alter berechnet. :more.',\n        'founding'      => 'Wenn su den Typ als :type festlegst, wird das Alter des Objekts seit der Gründung automatisch berechnet.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Erinnerung hinzufügen',\n        ],\n        'title'     => ':name Erinnerung',\n    ],\n    'types'     => [\n        'birth'     => 'Geburt',\n        'birthday'  => 'Geburtstag',\n        'death'     => 'Tod',\n        'founded'   => 'Gegründet',\n        'primary'   => 'Primär',\n    ],\n    'years-ago' => '{1} :Jahr vor zählen|[2,*] :Jahr vor zählen',\n];\n"
  },
  {
    "path": "lang/de/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [\n        'max'       => [\n            'helper'    => 'Du kannst keine weiteren Dateien anhängen, es sei denn, du entfernst eine vorhandene Datei.',\n            'limit'     => 'Dieses Objekt hat sein Dateilimit erreicht.',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Du hast das Limit von :limit Dateien für dieses Objekt erreicht.',\n            'premium'   => 'Upgrade auf eine Premium-Kampagne, um unbegrenzt Dateien anzuhängen und noch mehr kreative Flexibilität zu erhalten.',\n            'upgrade'   => 'Upgrade auf eine Premium-Kampagne, um bis zu :limit Dateien anzuhängen und noch mehr kreative Flexibilität zu erhalten.',\n        ],\n    ],\n    'create'            => [\n        'helper'            => 'Füge eine Datei zu :name hinzu. Die Datei wird auf das Speicherlimit der Galerie angerechnet.',\n        'success_plural'    => '{1} Datei :name hinzugefügt.|[2,*] :count der hinzugefügten Dateien.',\n        'title'             => 'Neue Datei für :entity',\n    ],\n    'destroy'           => [\n        'success'   => 'Datei :file entfernt',\n    ],\n    'fields'            => [\n        'file'  => 'Datei',\n        'files' => 'Dateien',\n        'name'  => 'Dateiname',\n    ],\n    'max'               => [\n        'title' => 'Limit erreicht',\n    ],\n    'update'            => [\n        'success'   => 'Datei :file aktualisiert',\n        'title'     => 'Objektdatei aktualisiert',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'               => [\n        'change_focus'      => 'Fokuspunkt ändern',\n        'change_visibility' => 'Sichtbarkeit ändern',\n        'replace_image'     => 'Bild ersetzen',\n        'save-replace'      => 'Bild ersetzen',\n        'save_focus'        => 'Fokus speichern',\n        'view'              => 'Bild zeigen',\n    ],\n    'call-to-action'        => 'Klicke auf das Bild des Objekts, um seinen Fokuspunkt festzulegen, anstatt die automatische Vermutung zu verwenden.',\n    'focus'                 => [\n        'breadcrumb'    => 'Bildfokus',\n        'helper'        => 'Klicken Sie auf das Bild, um den Fokuspunkt festzulegen. Klicken Sie auf den Fokuspunkt, um ihn zu entfernen.',\n        'panel_title'   => 'Bildfokus',\n        'success'       => 'Bildfokus aktualisiert',\n        'title'         => 'Objekt :Name des Bildfokus',\n        'unboosted'     => 'Das Setzen eines Bildfokuspunktes ist :boosted-campaigns vorbehalten.',\n        'warning'       => 'Der Fokuspunkt für :gallery -Bilder wird von allen Objekten, die dasselbe Bild verwenden, gemeinsam genutzt.',\n    ],\n    'gallery_permissions'   => [\n        'admin'     => 'Dieses Galeriebild ist nur für die Mitglieder der :admin -Rolle der Kampagne sichtbar.',\n        'adminself' => 'Dieses Galeriebild ist nur für den :creator und die Mitglieder der :admin -Rolle der Kampagne sichtbar.',\n        'member'    => 'Dieses Galeriebild ist nur für die Mitglieder der Kampagne sichtbar.',\n        'self'      => 'Dieses Bild ist nur für dich sichtbar.',\n    ],\n    'replace'               => [\n        'breadcrumb'    => 'Bildaustausch',\n        'panel_title'   => 'Objektbild ersetzt',\n        'success'       => 'Bild ersetzt',\n        'title'         => 'Objekt :name Bild ersetzt',\n    ],\n    'visibility'            => [\n        'helper'    => 'Ändere die Sichtbarkeit des Galeriebildes und bestimme, wer es sehen kann.',\n        'updated'   => 'Sichtbarkeit des Bildes aktualisiert.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'copy_from_entity'  => 'Von einem anderen Objekt kopieren',\n        'copy_inventory'    => 'Inventar kopieren',\n        'generate'          => 'Generieren',\n        'multiple'          => 'Elemente hinzufügen',\n    ],\n    'copy'              => [\n        'helper'    => 'Kopiere das gesamte Inventar eines Objekts nach :name.',\n    ],\n    'create'            => [\n        'helper'        => 'Füge einen Gegenstand zum Inventar von :name hinzu. Er kann optional mit einem vorhandenen Objekt aus der Kampagne verknüpft werden.',\n        'success'       => 'Gegenstand :item zu :entity hinzugefügt',\n        'success_bulk'  => '{0} Kein Element zu :entity.|{1} hinzugefügt Element :count wurde zu :entity.|[2,*] hinzugefügt Elemente :count wurden zu :entity.',\n        'title'         => 'Füge einen Gegenstand zu :name hinzu',\n    ],\n    'default_position'  => 'Unorganisiert',\n    'destroy'           => [\n        'success'           => 'Gegenstand :item wurde von :entity entfernt',\n        'success_position'  => 'Elemente in :position werden aus :entity entfernt.',\n    ],\n    'fields'            => [\n        'amount'                => 'Menge',\n        'copy_entity_entry_v2'  => 'Objekteintrag verwenden',\n        'description'           => 'Beschreibung',\n        'is_equipped'           => 'Ausgestattet',\n        'item_amount'           => 'Anzahl der Artikel',\n        'match_all'             => 'Alle Tags abgleichen',\n        'name'                  => 'Name',\n        'position'              => 'Position',\n        'qty'                   => 'ANZ',\n        'replace'               => 'Inventar ersetzen',\n    ],\n    'generate'          => [\n        'helper'    => 'Erstelle eine Inventarliste für :name basierend auf den vorhandenen Elementen in der Kampagne.',\n        'title'     => 'Inventar generieren',\n    ],\n    'helpers'           => [\n        'amount'                => 'Anzahl der Artikel',\n        'copy_entity_entry_v2'  => 'Zeigt den Eintrag des Objekts anstelle der benutzerdefinierten Beschreibung an.',\n        'description'           => 'Hinzufügen einer benutzerdefinierten Beschreibung für den Artikel',\n        'is_equipped'           => 'Markiere diese Gegenstände als ausgerüstet.',\n        'name'                  => 'Gebe dem Objekt einen Namen. Ein Name ist erforderlich, wenn kein Objekt ausgewählt ist.',\n        'replace'               => 'Ersetzt das aktuelle Inventar durch deas generierte Inventar.',\n    ],\n    'placeholders'      => [\n        'amount'        => 'Die Menge',\n        'description'   => 'Benutzt, Beschädigt, usw.',\n        'name'          => 'Erforderlich, wenn kein Element ausgewählt ist',\n        'position'      => 'Ausgerüstet, Rucksack, Lager, Bank',\n    ],\n    'show'              => [\n        'helper'    => 'Objekten können Gegenstände zugeordnet werden um ein Inventar zu generieren.',\n        'title'     => 'Objekt :name: Inventar',\n        'unsorted'  => 'Unsortiert',\n    ],\n    'togglers'          => [\n        'hide'  => [\n            'price'     => 'Preis ausblenden',\n            'quantity'  => 'Menge ausblenden',\n            'size'      => 'Größe ausblenden',\n            'weight'    => 'Gewicht ausblenden',\n        ],\n        'show'  => [\n            'price'     => 'zeige Preis',\n            'quantity'  => 'zeige Menge',\n            'size'      => 'zeige Größe',\n            'weight'    => 'zeige Gewicht',\n        ],\n    ],\n    'tooltips'          => [\n        'equipped'  => 'Dieser Artikel ist ausgestattet mit',\n    ],\n    'tutorials'         => [\n        'all'   => 'Verfolge, was :name besitzt, lagert oder anbietet, indem du diesem Inventar Artikel hinzufügst.',\n    ],\n    'update'            => [\n        'success'   => 'Gegenstand \\':name\\' für :entity aktualisiert',\n        'title'     => 'Aktualisiere Gegenstand von :name',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Link hinzufügen',\n    ],\n    'call-to-action'    => 'Füge Links zu externen Ressourcen auf diesem Objekt hinzu, wie z. B. zu DnDBeyond, und sie werden direkt in der Übersicht des Objekts angezeigt.',\n    'create'            => [\n        'helper'    => 'Füge einen externen Link zu :name hinzu, zum Beispiel zu deiner DnDBeyond-Seite.',\n        'success'   => 'Link :name hinzugefügt zu :entity.',\n        'title'     => 'Fügen Sie einen Link hinzu zu :name',\n    ],\n    'destroy'           => [\n        'success'   => 'Link :name entfernt von :entity.',\n    ],\n    'fields'            => [\n        'icon'      => 'Symbol',\n        'name'      => 'Name',\n        'position'  => 'Position',\n        'url'       => 'URL',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'Ich bin mir sicher',\n            'trust'     => 'Frage nicht noch einmal',\n        ],\n        'description'   => 'Dieser Link führt dich zu :link. Bist du sicher, dass du dorthin gehen möchtest?',\n        'title'         => 'verlasse Kanka',\n    ],\n    'helpers'           => [\n        'icon'      => 'Sie können das für den Link angezeigte Symbol anpassen. Verwenden Sie eines der kostenlosen Symbole von :fontawesome oder lassen Sie dieses Feld für die Standardeinstellung leer.',\n        'parent'    => 'Zeige diesen Quick-Link nach einem Element der Seitenleiste an, anstatt im Quick-Links-Bereich der Seitenleiste.',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'Durch geboostete Kampagnen können Links zu Objekten hinzufügen, die auf externe Websites verweisen.',\n        'title'     => 'Links für :name',\n    ],\n    'unboosted'         => [],\n    'update'            => [\n        'success'   => 'Link :name aktualisiert für :entity.',\n        'title'     => 'Link aktualisieren für :name',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'        => 'Erstellen',\n        'create_post'   => 'erstelle Beitrag \":post\"',\n        'delete'        => 'Löschen',\n        'delete_post'   => 'Beitrag gelöscht',\n        'reorder_post'  => 'Beiträge neu geordnet',\n        'restore'       => 'wiederherstellen',\n        'reveal'        => 'Details anzeigen',\n        'update'        => 'Aktualisieren',\n        'update_post'   => 'aktualisiere Beitrag \":post\"',\n        'view'          => 'Änderungen anzeigen',\n    ],\n    'call-to-action'    => 'Vollständige Änderungsprotokolle für bis zu :amount Tage sind für Superboosted-Kampagnen verfügbar.',\n    'fields'            => [\n        'action'    => 'Aktion',\n        'date'      => 'Datum',\n    ],\n    'filters'           => [\n        'keywords'  => 'Schlüsselwörter',\n    ],\n    'impersonated'      => 'Dargestellt von :name',\n    'none'              => 'Keine',\n    'show'              => [\n        'title' => 'Objektprotokoll: :name',\n    ],\n    'tooltips'          => [\n        'post'  => 'Zum Beitrag gehen',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Dieses Objekt ist auf den folgenden Karten angepinnt.',\n    'title'     => ':name Kartenpunkte',\n];\n"
  },
  {
    "path": "lang/de/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Element',\n        'type'      => 'Typ',\n    ],\n    'helper'            => 'Das Folgende ist eine Liste von Objekten, die dieses Objekt in ihrem Feld \"Eintrag\" erwähnen.',\n    'mentioned_in_v2'   => 'Dieses Objekt wird in :count Objekte,, Objektnotizen oder Kampagnen erwähnt. :more.',\n    'see_more'          => 'Details zeigen',\n    'show'              => [\n        'title' => 'Erwähnungen von Objekt: :name',\n    ],\n    'title'             => 'Erwähntes Objekt',\n];\n"
  },
  {
    "path": "lang/de/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'      => 'Kopiere',\n        'transfer'  => 'Übertragung',\n    ],\n    'errors'        => [\n        'permission'        => 'Sie dürfen keine Objekte dieses Typs in der Zielkampagne erstellen.',\n        'permission_update' => 'Sie dürfen dieses Objekt nicht verschieben.',\n        'same_campaign'     => 'Sie müssen eine andere Kampagne auswählen, in die das Objekt verschoben werden soll.',\n        'unknown_campaign'  => 'Unbekennt Kamapgne',\n    ],\n    'fields'        => [\n        'campaign'      => 'Zielkampagne',\n        'copy'          => 'Kopiere',\n        'select_one'    => 'Kampagne auswählen',\n    ],\n    'helpers'       => [\n        'copy'  => 'Erstelle eine Kopie des Objekts in der Zielkampagne.',\n    ],\n    'panel'         => [\n        'description'           => 'Wählen Sie eine Kampagne aus, in die Sie verschieben möchten, oder erstellen Sie eine Kopie dieses Objekts.',\n        'description_bulk_copy' => 'Wählen Sie eine Kampagne aus, in die Sie die ausgewählten Objekte kopieren möchten.',\n        'title'                 => 'Verschieben oder kopieren Sie ein Objekt in eine andere Kampagne',\n    ],\n    'success'       => 'Objekt :name verschoben',\n    'success_copy'  => 'Objekt :name kopiert',\n    'title'         => 'Bewege :name',\n    'warnings'      => [\n        'custom'    => 'Dieses Objekt gehört nicht zu einem Standardmodul, sondern zu einem benutzerdefinierten „:module“-Objekttyp. Sie wird als Notiz-Objekt in der Zielkampagne erstellt.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Notiz hinzufügen',\n        'add_role'  => 'Rolle hinzufügen',\n        'add_user'  => 'Benutzer hinzufügen',\n    ],\n    'collapsed'     => [\n        'closed'    => 'Der Beitrag wird auf die Kopfzeile reduziert',\n        'open'      => 'Beitrag wird erweitert',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Erweiterte Erwähnung kopieren',\n        'copy_with_name'    => 'Kopiere die erweiterte Erwähnung mit dem Beitragsnamen',\n        'success'           => 'Erweiterte Erwähnung zum Posten in die Zwischenablage kopiert.',\n    ],\n    'create'        => [\n        'success'   => 'Notiz \\':name\\' zu :entity hinzugefügt.',\n    ],\n    'destroy'       => [\n        'success'   => 'Notiz \\':name\\' von :entity entfernt.',\n    ],\n    'edit'          => [\n        'success'   => 'Notiz \\':name\\' für :entity aktualisiert.',\n    ],\n    'fields'        => [\n        'creator'   => 'Ersteller',\n        'display'   => 'Anzeige',\n        'name'      => 'Name',\n        'position'  => 'Position',\n    ],\n    'footer'        => [\n        'created'   => 'Erstellt von :user am :date',\n        'updated'   => 'Aktualisiert von :user am :date',\n    ],\n    'hint'          => 'Informationen, die nicht ganz in die Standardfelder eines Objektes passen oder privat bleiben sollen, können als Notiz hinzugefügt werden.',\n    'hints'         => [\n        'reorder'   => 'Sie können Objektnotizen eines Objekts neu anordnen, indem Sie im Menü des Objekts auf das :icon-Symbol neben der Story klicken.',\n    ],\n    'index'         => [],\n    'move'          => [\n        'copy'          => 'Erstelle eine Kopie auf Grundlage des Zielobjektes',\n        'copy_success'  => 'Beitrag :name erfolgreich nach :entity kopiert.',\n        'copy_title'    => 'Behalte eine Kopie',\n        'description'   => 'Wähle ein Objekt aus, das du verschieben möchtest, oder erstelle eine Kopie dieses Beitrags.',\n        'entity'        => 'Zielobjekt',\n        'move_success'  => 'Beitrag :name erfolgreich nach :entity verschoben.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Name der Notiz, Beobachtung oder Anmerkung',\n    ],\n    'show'          => [\n        'advanced'  => 'Erweiterte Berechtigungen',\n        'title'     => 'Objektnotiz :name für :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'verkleinern',\n        'expanded'  => 'vergrößern',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/de/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'Dieses Objekt ist auf privat gesetzt. Benutzerdefinierte Berechtigungen können weiterhin definiert werden, aber solange das Objekt privat ist, werden diese ignoriert, und nur Mitglieder der :admin-Rolle der Kampagne können das Objekt sehen.',\n        'warning'   => 'Warning',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'Keine Rolle oder Benutzer außerhalb der Kampagnenadministratoren haben Zugriff auf dieses Objekt.',\n        'manage'            => 'Berechtigungen verwalten',\n        'screen-reader'     => 'Datenschutzeinstellungen öffnen',\n        'success'           => [\n            'private'   => ':entity ist jetzt versteckt.',\n            'public'    => ':entity ist jetzt sichtbar.',\n        ],\n        'title'             => 'Berechtigungen',\n        'viewable-by'       => 'Sichtbar für',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Links',\n    'title' => 'Pins',\n];\n"
  },
  {
    "path": "lang/de/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Profil editiert',\n    ],\n    'history'   => 'Verlauf',\n    'show'      => [\n        'tab_name'  => 'Profile',\n        'title'     => ':name Profil',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Dieses Objekt ist Teil der folgenden Quests.',\n    'title'     => ':name Quests',\n];\n"
  },
  {
    "path": "lang/de/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Tool zur Beziehungsdarstellung',\n        'mode-table'    => 'Tabelle der Beziehungen und Verbindungen',\n    ],\n    'bulk'              => [\n        'delete'    => '{1} :count Beziehung gelöscht.|[2,*] :count Beziehungen gelöscht.',\n        'fields'    => [\n            'delete_mirrored'   => 'Gespiegelte löschen',\n            'unmirror'          => 'Unlink gespiegelt',\n            'update_mirrored'   => 'Aktualisierung gespiegelt',\n        ],\n        'helpers'   => [\n            'delete_mirrored'   => 'Lösche auch die gespiegelte Verbindungen.',\n            'unmirror'          => 'Entkopple gespiegelte Verbindungen.',\n            'update_mirrored'   => 'Aktualisiere gespiegelte Verbindungen.',\n        ],\n        'success'   => [\n            'editing'           => '{1} :count Beziehung wurde aktualisiert.|[2,*] :count Beziehungen wurden aktualisiert.',\n            'editing_partial'   => '{1} :count/:total Beziehung wurde aktualisiert.|[2,*] :count/:total Beziehungen wurden aktualisiert.',\n        ],\n    ],\n    'call-to-action'    => 'Untersuche visuell die Beziehungen dieses Objekts und wie es mit dem Rest der Kampagne verbunden ist.',\n    'connections'       => [\n        'map_point'         => 'Kartenpunkt',\n        'mention'           => 'Erwähnung',\n        'quest_element'     => 'Quest Elemente',\n        'timeline_element'  => 'Zeitstrahlelement',\n    ],\n    'create'            => [\n        'helper'        => 'Erstelle eine Verbindung zwischen :name und einer oder mehreren Objekten.',\n        'new_title'     => 'Neue Beziehungen',\n        'success_bulk'  => '{1} :count-Verbindung zu :entity.|[2,*] hinzugefügt :count-Verbindungen zu :entity.',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'Diese Beziehung wird auf dem Zielobjekt gespiegelt. Wähle diese Option, um auch die gespiegelte Beziehung zu entfernen.',\n        'option'    => 'Gespiegelte Beziehung löschen',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'Dadurch wird auch die gespiegelte Beziehung gelöscht und ist dauerhaft.',\n        'success'   => 'Beziehung für :name entfernt',\n    ],\n    'fields'            => [\n        'attitude'  => 'Einstellung',\n        'is_pinned' => 'Angeheftet',\n        'owner'     => 'Quelle',\n        'target'    => 'Ziel',\n        'targets'   => 'Zielobjekt',\n        'two_way'   => 'Gespiegelte Beziehung erstellen',\n        'unmirror'  => 'Hebe die Spiegelung dieser Beziehung auf.',\n    ],\n    'filters'           => [\n        'connection'    => 'Verbindung Beziehung',\n        'name'          => 'Ziel der Verbindung',\n    ],\n    'helper'            => 'Richten Sie Beziehungen zwischen Objekten mit Einstellungen und Sichtbarkeit ein. Beziehungen können auch an das Menü der Berechtigung angeheftet werden.',\n    'helpers'           => [\n        'description'   => 'Gib die Art der Verbindung zwischen den beiden Objekte an.',\n        'no_relations'  => 'Dieses Objekt hat derzeit keine Beziehungen zu anderen Objekten der Kampagne.',\n    ],\n    'hints'             => [\n        'attitude'  => 'In diesem optionalen Feld können Sie die Standardordnungsbeziehungen definieren, sie wird in absteigender Reihenfolge angezeigt.',\n        'two_way'   => 'Wenn du eine gespiegelte Beziehung erstellst, wird die gleiche Beziehung auch auf dem Ziel erstellt. Wenn du diese später editierst, wird die gespiegelte Beziehung nicht aktualisiert.',\n    ],\n    'index'             => [\n        'title' => 'Beziehungen',\n    ],\n    'options'           => [\n        'mentions'          => 'Beziehungen + verbundene + erwähnt',\n        'only_relations'    => 'Nur direkte Beziehungen',\n        'related'           => 'Beziehungen + verbundene',\n        'relations'         => 'Beziehungen',\n        'show'              => 'zeige',\n    ],\n    'panels'            => [\n        'related'   => 'verbunden',\n    ],\n    'placeholders'      => [\n        'attitude'  => '-100 bis 100, 100 ist maximal positiv.',\n    ],\n    'show'              => [\n        'title' => 'Beziehungen für :name',\n    ],\n    'types'             => [\n        'family_member'         => 'Familienmitglied',\n        'organisation_member'   => 'Organisationsmitlgied',\n    ],\n    'update'            => [\n        'success'   => 'Beziehung für :name aktualisiert',\n        'title'     => 'Beziehungen aktualisieren',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/reminders.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'       => 'Link zu einem Kalender',\n        'remove'    => 'Kalenderdatum entfernen',\n    ],\n    'helpers'   => [\n        'pitch' => 'Lasse den realen Kalender hinter dir und verknüpfe diese Einheit mit einem Kalender aus deiner Welt, um in deine fiktive Zeitlinie einzutauchen.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'      => 'Alle ausblenden',\n        'expand_all'        => 'Alle einblenden',\n        'load_more'         => 'mehr laden',\n        'login_for_more'    => 'Melde dich an, um weitere Beiträge anzuzeigen',\n    ],\n    'reorder'   => [\n        'helper'        => 'Ziehe Beiträge per Drag & Drop, um sie auf der Übersichtsseite des Objekts neu anzuordnen.',\n        'icon_tooltip'  => 'Beiträge neu anordnen',\n        'panel_title'   => 'Beiträge neu anordnen',\n        'save'          => 'Speichere neue Reihenfolge',\n        'success'       => 'Beiträge neu geordnet.',\n    ],\n    'update'    => [\n        'title' => 'Aktualisieren :entity Eintrag',\n    ],\n    'warning'   => [],\n];\n"
  },
  {
    "path": "lang/de/entities/tags.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'tag  hinzufügen oder entfernen zu :name',\n        'title'     => 'tag  hinzufügen oder entfernen',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Zeitleisten mit Elementen, die mit diesem Objekt verknüpft sind, werden unten angezeigt.',\n    'show'      => [\n        'title' => 'Zeitstrahl von :name',\n    ],\n];\n"
  },
  {
    "path": "lang/de/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'bulk'      => [\n        'errors'    => [\n            'unknown_type'  => 'Unbekannter oder unzulässige Objekttyp.',\n        ],\n        'success'   => '{1} :count Objekt zu neuem Typ umgewandelt: :type.|[2,*] :count Objekte zu neuem Typ umgewandelt: :type.',\n    ],\n    'fields'    => [\n        'select_one'    => 'Eines auswählen',\n        'target'        => 'Neuer Objekttyp',\n    ],\n    'panel'     => [\n        'bulk_description'  => 'Verändere den Objekttyp mehrerer Objekte. Seien Sie sich bewusst, dass dadurch Daten verloren gehen könnten aufgrund unterschiedlicher Felder zwischen den Objekttypen.',\n        'bulk_title'        => 'Massenumwandlung von Objekten',\n        'title'             => 'wandle ein Objekt um',\n    ],\n    'success'   => 'Objekt :name umgewandelt',\n    'title'     => ':name umwandeln',\n];\n"
  },
  {
    "path": "lang/de/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Fähigkeiten',\n    'ability'               => 'Fähigkeit',\n    'attribute_template'    => 'Attributvorlage',\n    'attribute_templates'   => 'Attributsvorlagen',\n    'bookmark'              => 'Lesezeichen',\n    'bookmarks'             => 'Lesezeichen',\n    'calendar'              => 'Kalender',\n    'calendars'             => 'Kalender',\n    'campaign'              => 'Kampagne',\n    'campaigns'             => 'Kampagnen',\n    'character'             => 'Charakter',\n    'characters'            => 'Charaktere',\n    'conversation'          => 'Unterhaltung',\n    'conversations'         => 'Unterhaltungen',\n    'creator'               => [\n        'actions'                   => [\n            'create'    => 'Erstellen :type',\n            'full'      => 'Gehe zum vollständigen Formular',\n            'more'      => 'Füge weitere Details hinzu',\n        ],\n        'back'                      => 'Zurück zur Auswahl',\n        'bulk_names'                => 'Füge einen Namen pro Zeile hinzu',\n        'duplicate'                 => 'Es gibt andere Objekte dieses Typs mit demselben Namen.',\n        'helper_v2'                 => 'Erstelle schnell die Grundlage für ein neues Objekt, ohne deinen aktuellen Fluss zu unterbrechen.',\n        'missing_v2'                => 'In dieser Oberfläche sind nur Module verfügbar, die aktiviert sind und für die du die Berechtigung zum Erstellen hast. :learn-more.',\n        'modes'                     => [\n            'bulk'      => 'Bulk hinzufügen',\n            'default'   => 'Schnell hinzufügen',\n        ],\n        'name'                      => [\n            'new'       => 'Neuer Name',\n            'remove'    => 'entfernen',\n        ],\n        'success_multiple'          => '{1} Neues Objekt :link erstellt.|[2,*] Neues Objekt :link erstellt.',\n        'success_multiple_posts'    => '{1} Neuer Beitrag :link erstellt.|[2,*] Neue Beiträge :link erstellt.',\n        'title'                     => 'Neues Objekt',\n        'titles'                    => [\n            'everything'    => 'Alles',\n            'quick-access'  => 'Schnellzugriff',\n        ],\n        'tooltip'                   => 'Erstellen Sie ein neues Objekt, ohne die aktuelle Seite zu verlassen',\n        'tooltips'                  => [\n            'create'        => 'Erstelle das Objekt und  gehe zurück zum Objektauswahlbildschirm',\n            'create_more'   => 'Erstelle das Objekt und beginne mit der Erstellung eines anderen des gleichen Typs',\n            'edit'          => 'Erstelle das Objekt und beginne mit der Bearbeitung',\n        ],\n    ],\n    'creature'              => 'Kreatur',\n    'creatures'             => 'Kreaturen',\n    'dice_roll'             => 'Würfelwurf',\n    'dice_rolls'            => 'Würfelwürfe',\n    'event'                 => 'Ereignis',\n    'events'                => 'Ereignisse',\n    'families'              => 'Familien',\n    'family'                => 'Familie',\n    'inventories'           => 'Inventare',\n    'item'                  => 'Gegenstand',\n    'items'                 => 'Gegenstände',\n    'journal'               => 'Logbuch',\n    'journals'              => 'Logbücher',\n    'location'              => 'Ort',\n    'locations'             => 'Orte',\n    'map'                   => 'Karte',\n    'maps'                  => 'Karten',\n    'new'                   => [],\n    'note'                  => 'Notiz',\n    'notes'                 => 'Notizen',\n    'organisation'          => 'Organisation',\n    'organisations'         => 'Organisationen',\n    'quest'                 => 'Quest',\n    'quest_element'         => 'Quest Element',\n    'quests'                => 'Quests',\n    'race'                  => 'Spezies',\n    'races'                 => 'Spezies',\n    'relation'              => 'Beziehung',\n    'relations'             => 'Beziehungen',\n    'reminders'             => 'Erinnerungen',\n    'tag'                   => 'Tag',\n    'tags'                  => 'Tags',\n    'templates'             => 'Vorlagen',\n    'timeline'              => 'Zeitstrahl',\n    'timeline_element'      => 'Zeitstrahl Element',\n    'timelines'             => 'Zeitstrahlen',\n    'whiteboard'            => 'Whiteboard',\n    'whiteboards'           => 'Whiteboards',\n];\n"
  },
  {
    "path": "lang/de/errors.php",
    "content": "<?php\n\nreturn [\n    '403'               => [\n        'body'  => 'Es sieht so aus, als hättest du keine Berechtigung, diese Seite anzuzeigen!',\n        'title' => 'Zugang verweigert',\n    ],\n    '403-form'          => [\n        'help'  => 'Dies kann an der Zeitüberschreitung Ihrer Sitzung liegen. Bitte versuchen Sie erneut, sich in einem anderen Fenster anzumelden, bevor Sie speichern.',\n    ],\n    '404'               => [\n        'body'  => 'Entschuldige, diese Seite haben wir leider nicht finden können.',\n        'title' => 'Seite nicht gefunden',\n    ],\n    '500'               => [\n        'body'  => [\n            '1' => 'Ups, irgendetwas ist hier schief gegangen.',\n            '2' => 'Ein Bericht über den aufgetretenen Fehler wurde an uns geschickt, aber manchmal hilft es wenn wir etwas mehr darüber wissen.',\n        ],\n        'title' => 'Fehler',\n    ],\n    '503'               => [\n        'body'  => [\n            '1' => 'Kanka ist aktuell in Wartung, was normalerweise bedeutet, dass ein Update eingespielt wird!',\n            '2' => 'Entschuldige die Unannehmlichkeiten. Alles wird bald wieder normal funktionieren.',\n        ],\n        'json'  => 'Kanka wird derzeit gewartet, bitte versuchen Sie es in ein paar Minuten erneut.',\n        'title' => 'Wartung',\n    ],\n    '503-form'          => [],\n    'back-to-campaigns' => 'Gehe zurück zu einer deiner Kampagnen',\n    'footer'            => 'Wenn du weitere Hilfe brauchst, bitte kontaktiere uns über hello@kanka.io oder über :discord.',\n    'log-in'            => 'Wenn du dich in dein Konto einloggst, erfährst du vielleicht, wonach du suchst.',\n    'post_layout'       => 'Ungültiges Beitragslayout.',\n    'private-campaign'  => [\n        'auth'  => [\n            'helper'    => 'Du hast keinen Zugang zu dieser Kampagne.',\n        ],\n        'guest' => [\n            'helper'    => 'Die Kampagne, auf die du zuzugreifen versuchst, ist privat und du bist nicht angemeldet.',\n            'login'     => 'Wenn du dich anmeldest, kannst du auf die Inhalte zugreifen.',\n        ],\n        'title' => 'private Kamapgne',\n    ],\n];\n"
  },
  {
    "path": "lang/de/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Neues Ereignis erstellen',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [\n        'helper'    => 'Ereignisse, die dieses Objekt als übergeordnetes Ereignis haben, werden hier angezeigt.',\n    ],\n    'fields'        => [\n        'date'  => 'Datum',\n    ],\n    'helpers'       => [\n        'date'  => 'Dieses Feld kann alles enthalten und ist nicht mit den Kalendern der Kampagne verknüpft. Um dieses Ereignis mit einem Kalender zu verknüpfen, fügen Sie es im Kalender oder auf der Registerkarte Erinnerungen dieses Ereignisses hinzu.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Füge bedeutende Momente wie Schlachten, Krönungen oder Entdeckungen zur Geschichte deiner Welt hinzu.',\n    ],\n    'placeholders'  => [\n        'date'  => 'Ein Datum für dein Ereginis',\n        'type'  => 'Zeremonie, Fest, Katastrophe, Schlacht, Geburt',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Kalendereinträge',\n    ],\n];\n"
  },
  {
    "path": "lang/de/export.php",
    "content": "<?php\n\nreturn [\n    'content'           => 'Inhalt',\n    'hidden_campaign'   => 'Versteckte Kampagne',\n    'index'             => 'Objektindex',\n];\n"
  },
  {
    "path": "lang/de/families/trees.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'clear'             => 'Alles löschen',\n        'first'             => 'Füge einen Gründer hinzu',\n        'founder'           => 'Einen neuen Gründer hinzufügen',\n        'rename-relation'   => 'Beziehung umbenennen',\n        'reset'             => 'Änderungen verwerfen',\n        'save'              => 'Speichern',\n    ],\n    'modal'     => [\n        'first-title'   => 'Objekt auswählen',\n        'helper'        => 'Ersetze das Objekt durch ein anderes aus der Kampagne',\n        'relation'      => 'Beziehung',\n        'title'         => 'Objekt ersetzen',\n    ],\n    'modals'    => [\n        'clear'     => [\n            'confirm'   => 'Bist du dir sicher, dass du alle Daten aus dem Stammbaum neu initialisieren möchtest?',\n        ],\n        'entity'    => [\n            'add'       => [\n                'founder'   => 'Gründer',\n                'member'    => 'Mitglied',\n                'success'   => 'Objekt hinzufügt',\n                'title'     => 'Objekt hinzufügen',\n            ],\n            'child'     => [\n                'success'   => 'Untergeordnetes Objekt hinzugefügt.',\n                'title'     => 'Untergeordnetes Objekt',\n            ],\n            'edit'      => [\n                'helper'    => 'Aktiviere diese Option, wenn die Beziehung unbekannt ist. Ein Charakter kann später hinzugefügt werden.',\n                'success'   => 'Objekt aktualisiert',\n                'title'     => 'Objekt aktualisieren',\n            ],\n            'founder'   => [\n                'title' => 'Einen neuen Gründer hinzufügen',\n            ],\n            'remove'    => [\n                'confirm'   => 'Möchtest du dieses Objekt wirklich aus dem Stammbaum entfernen?',\n                'success'   => 'Objekt entfernt',\n            ],\n        ],\n        'relations' => [\n            'add'       => [\n                'success'   => 'Beziehung hinzugefügt',\n                'title'     => 'Beziehung hinzufügen',\n            ],\n            'edit'      => [\n                'success'   => 'Beziehung aktualisiert.',\n                'title'     => 'Beziehung aktualisiert',\n            ],\n            'unknown'   => 'Unbekannt',\n        ],\n        'reset'     => [\n            'confirm'   => 'Bist du sicher, dass du alle am Stammbaum vorgenommenen Änderungen verwerfen möchtest?',\n        ],\n    ],\n    'pitch'     => 'Erstelle einen detaillierten Stammbaum für die Familien der Kampagne.',\n    'success'   => [\n        'cleared'   => 'Stammbaum gelöscht',\n        'reseted'   => 'Stammbaum zurückgesetzt',\n        'saved'     => 'Stammbaum gespeichert',\n    ],\n    'title'     => ':name Stammbaum',\n    'unknown'   => 'nicht etabliert',\n];\n"
  },
  {
    "path": "lang/de/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Erstelle eine neue Familie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Diese Familie ist ausgestorben.',\n        'members'       => 'Mitglieder einer Familie werden hier gelistet. Ein Charakter kann einer Familie hinzugefügt werden, in dem bei dem gewünschten Charakter das Familiendropdown genutzt wird.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Verfolge Abstammungslinien, Clans oder Adelshäuser, die deine Charaktere miteinander verbinden.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Füge ein oder mehrere Mitglieder zu :name hinzu.',\n            'success'   => '{0} Kein Mitglied wurde hinzugefügt.|{1} 1 Mitglied wurde hinzugefügt.|[2,*] :count Mitglieder wurden hinzugefügt.',\n            'title'     => 'Neue Mitglieder',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Name der Familie',\n        'type'  => 'königlich, edel, ausgestorben',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'tree'  => 'Stammbaum',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/faq.php",
    "content": "<?php\n\nreturn [\n    'account-deletion'      => [\n        'account_settings'  => 'Account Einstellungen',\n        'answer'            => 'Um Ihr Konto zu löschen, gehen Sie zu Ihrer :account Seite und scrollen Sie nach unten zum Abschnitt zum Löschen des Kontos. Dadurch werden Ihr Konto und alle Kampagnen gelöscht, bei denen Sie das einzige Mitglied sind.',\n        'question'          => 'Wie kann ich meinen Account löschen?',\n    ],\n    'app_backup'            => [\n        'answer'    => 'Wir führen täglich zwei Sicherungen durch, um Datenverlust zu vermeiden. Unsere eigenen Kampagnen befinden sich ebenfalls auf dem Server, daher möchten wir kein Risiko eingehen!',\n        'question'  => 'Wie oft werden die Daten von Kanka gesichert?',\n    ],\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nDie beste Art Attributvorlagen zu erklären, ist mit einem Beispiel. Stellen wir uns vor, dass deine Welt eine Menge Orte hat. Für viele dieser Orte möchtest du eigene Attribute wie \"Bewohnerzahl\", \"Klima\" und \"Kriminalitätsrate\" haben.\n\nNun kannst du diese Attribute in jedem Ort einzeln hinzufügen, das wird aber schnell mühsam und manchmal vergisst man das Attribut \"Kriminalitätsrate\" zu hinterlegen. Hier kommen die Attributvorlagen zum Einsatz.\n\nDu kannst eine Attributvorlage mit deinen Attributen \"Bewohnerzahl\", \"Klima\" und \"Kriminalitätsrate\" füllen und später diese Vorlage bei deinen Orten benutzen. Die Attributvorlage wird automatisch in jedem Ort hinterlegt und du musst nur noch die Werte der Attribute füllen!\nTEXT\n        ,\n        'question'  => 'Was sind Attributvorlagen?',\n    ],\n    'backup'                => [\n        'answer'    => 'Einmal am Tag können Sie alle Daten Ihrer Kampagne als ZIP-Datei exportieren. Klicken Sie in der App im linken Menü auf \"Kampagne\" und dann auf \"Exportieren\". Dadurch wird ein Export erstellt, der 30 Minuten lang verfügbar ist. Sie können diesen Export nicht auf Kanka hochladen. Er dient nur Ihrer eigenen Sicherheit oder wenn Sie die Anwendung nicht mehr verwenden möchten.',\n        'question'  => 'Wie kann ich meine Kampagne sichern oder exportieren?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Treten Sie einfach unserem :discord server bei und melden Sie Ihren Fehler im Kanal #error-and-bugs.',\n        'question'  => 'Wie kann ich einen Fehler melden?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'Kanka hat diese Funktion nicht. Wenn Sie jedoch versuchen, mehrere Spielgruppen in derselben Welt zu haben, sollten Sie dieselbe Kampagne verwenden und Ihre Gruppen durch eine Kombination aus Quests, Tags und Berechtigungen trennen',\n        'question'  => 'Kann ich Objekte über mehrere Kampagnen hinweg synchronisieren?',\n    ],\n    'conversations'         => [],\n    'custom'                => [\n        'answer'    => 'Kanka wird mit einer Reihe vordefinierter Objekttypen erstellt, die miteinander interagieren. Um benutzerdefinierte Objekttypen zuzulassen, müsste die Anwendung vollständig geändert und das Ziel der Vereinfachung der Organisation verfehlt werden. Darüber hinaus ist Kanka flexibel mit Tags, die die meisten benutzerdefinierten Objekte darstellen können.',\n        'question'  => 'Kann ich benutzerdefinierte Objekttypen erstellen?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Gehen Sie zu Ihrem Kampagnen-Dashboard und klicken Sie im linken Menü auf \"Kampagne\". Eine Schaltfläche \"Löschen\" wird angezeigt, wenn Sie das letzte Mitglied der Kampagne sind. Das Löschen einer Kampagne ist eine endgültige Aktion, mit der alle auf unseren Servern gespeicherten Daten, einschließlich Bilder, gelöscht werden.',\n        'question'  => 'Wie kann ich eine Kampagne löschen?',\n    ],\n    'discord'               => [\n        'answer'    => 'Um Ihr Kanka-Konto mit :discord zu verknüpfen, müssen Sie zuerst oben rechts in der App auf Ihren Avatar klicken und auf die Schaltfläche Profil klicken. Navigieren Sie von dort zur :apps Unterseite und klicken Sie auf Verbinden.',\n        'question'  => 'Wie kann ich meinen Kanka Account mit Discord verknüpfen?',\n    ],\n    'early-access'          => [\n        'answer'    => 'Mit Early Access können wir unsere großartigen Abonnenten belohnen, indem wir ihnen einen exklusiven Zeitraum von 30 Tagen gewähren, in dem sie die neuesten Module vor allen anderen ausprobieren können.',\n        'question'  => 'Was ist ein Early Access?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'Alle Objekte verfügen über den Reiter \"Objekt-Notizen\", bei der es sich um kleine Textausschnitte handelt, die nur für Sie sichtbar (vor allem  sinnvoll, wenn mehrere SLs an der Kampagne arbeiten), nur für Mitglieder der Administratorrolle oder für alle sichtbar sind. Du kannst deinen Spielern auch die Erlaubnis erteilen, Objekt-Notizen zu Objekten zu erstellen und zu bearbeiten, ohne dass sie ein ganzes Objekt bearbeiten müssen.',\n        'question'  => 'Wie geht Kanka mit Informationen um, die nicht für jeden zugänglich sind?',\n    ],\n    'fields'                => [\n        'answer'    => 'Antwort',\n        'category'  => 'Kategorie',\n        'locale'    => 'Sprache',\n        'order'     => 'Reihenfolge',\n        'question'  => 'Frage',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\nJa! Wir glauben, dass unsere finanzielle Situation keinen Einfluss auf euer Vergnügen beim Rollenspiel oder beim Welten bauen haben sollte, weswegen wir die App immer kostenfrei halten werden. Dank unserer großzügigen Patrone auf :patreon, ist es uns möglich die monatlichen Serverkosten zu bezahlen und die Plattform werbefrei zu halten!\n\nUns auf Patreon zu unterstützen ermöglicht es euch allerdings das Upload Limit von Dateien zu erhöhen, euer Name kommt auf die Patreon Wall of Fame, ihr bekommt schönere Standard Icons, könnt abstimmen was bei der Weiterentwicklung prioritisiert werden soll und mehr!\nTEXT\n        ,\n        'question'  => 'Wird die App kostenfrei bleiben?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Wir empfehlen, Götter als Charaktere und Religionen als Organisationen zu schaffen. Wenn Sie Ihre Gottheiten schnell finden möchten, empfehlen wir, sie mit einem geeigneten Tag und / oder Typ zu versehen.',\n        'question'  => 'Wo kann man Götter und Religionen erstellen?',\n    ],\n    'help'                  => [\n        'answer'    => 'Als Erstes: Danke, dass du helfen möchtest! Wir sind immer an Leuten interessiert, die uns bei Übersetzungen unterstützen, neue Funktionen testen oder die neuen Usern helfen können. Wir lieben es auch wenn Leute Kanka weiterempfehlen, um neue User an Orten zu erreichen an die wir nicht gedacht haben. Am besten ist es, wenn du auf :discord zu uns stößt, wo es einen Kanal für\\'s Aushelfen gibt. Wir lieben auch unsere Patrone auf Patreon, wenn du uns unterstützen möchtest und ein paar Extras bekommen möchtest!',\n        'question'  => 'Ich möchte helfen! Was kann ich tun?',\n    ],\n    'map'                   => [\n        'answer'    => <<<'TEXT'\nJeder Ort kann eine Karte (PNG, JPG oder SVG) enthalten, die selbst \"Kartenpunkte\" enthält, die mit Kontrolle über Größe, Form, Symbol und Farbe sowie als Links zu Elementen oder einfachen Beschriftungen platziert werden können.\n\nSVG-Dateien von Azgaars :azgaar und watabous :watabou sind kompatibel mit Kanka. Einige andere Programme komprimieren die generierten SVG-Dateien, was sie inkompatibel zu Kanka macht. Um diese Karten trotzdem mit Kanka benutzen zu können, öffne die Dateien in Inkscape oder Photoshop speicher sie als SVG-Dateien, bevor du sie auf Kanka hochlädtst.\nTEXT\n        ,\n        'question'  => 'Kann ich Karten in Kanka hochladen?',\n    ],\n    'mobile'                => [\n        'answer'    => 'Derzeit gibt es keine extra Kanka-App für mobile Geräte, aber der Großteil der App funktioniert mobil. Eine Einschränkung ist die Linkhilfe (@), das nicht im Texteditor funktioniert. Wenn genug Unterstützung über Patreon kommt, hoffe ich, dass ich eines Tages jemanden bezahlen kann, der eine mobile App erstellt.',\n        'question'  => 'Gibt es eine mobile App? Ist etwas in der Richtung geplant?',\n    ],\n    'monsters'              => [\n        'answer'    => 'Wir empfehlen die Verwendung des Spezies-Moduls für Völker, Spezies, Monster und alles Lebende, das kein Charakter ist.',\n        'question'  => 'Wo kann man Monster erstellen?',\n    ],\n    'multiworld'            => [\n        'answer'    => 'Nein, brauchst du nicht! Du kannst so viele \"Kampagnen\" in der App haben, wie du möchtest. Jede Kampagne kann für eine Welt, ein Setting oder was immer du willst genutzt werden. Sobald du mehrere Kampagnen hast, kannst du einfach zwischen ihnen wechseln.',\n        'question'  => 'Ich baue mehrere Welten in verschiedenen Settings auf. benötige ich für jede Welt einen anderes Konto?',\n    ],\n    'nested'                => [\n        'answer'    => 'Wenn Sie Ihre Objekte standardmäßig in einer verschachtelten Ansicht anzeigen möchten (z. B. die Schaltfläche Verschachtelte Ansicht in der Liste der Speicherorte), können Sie dies tun, indem Sie in die Optionen Profil und Layout wechseln. Dort können Sie die Option Verschachtelte Ansicht aktivieren. Dies gilt nur für Ihr Konto und nicht für Ihre Kampagnen.',\n        'question'  => 'Kann ich festlegen, dass die Listen standardmäßig verschachtelt sind?',\n    ],\n    'organise_play'         => [],\n    'permissions'           => [\n        'answer'    => 'Ja absolut, deswegen haben wir Kanka gemacht! Du kannst all deine Spieler zu deiner Kampagne einladen und ihnen Rollen und Berechtigungen erteilen.  Wir haben das System für  große Flexibiliät gebaut (sowohl opt-in als auch opt-out Konfigurationen möglich), um so viele Ansprüche und Situationen wie möglich abzudecken.',\n        'question'  => 'Ich möchte Kanka nutzen, um meine RPG Welt aufzubauen. Meinen Spielern möchte ich ermöglichen manche Objekte und ihre Charakter zu bearbeiten. Geht das?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nLangfristig ist geplant, dass Kanka sich in ein vielseitiges Tool für Worldbuilding und Kampagnenmanagement entwickelt, das systemunabhängig ist und systemspezifische Inhalte enthält, die von der Community in Form von \"Community-Vorlagen\" verwaltet werden. Ein längeres Ziel ist es, Tools zu entwickeln, die sich in andere Plattformen wie Virtual Table Top-Apps integrieren lassen, um diese mit den Welten von Kanka zu verbinden.\n\nWas den zweiten Teil betrifft, so enden die meisten Hobbyprojekte im Burnout und der Schöpfer gibt sie auf. The :patreon wurde mit dem Ziel eingerichtet, dass wir Vollzeit an Kanka arbeiten können, ohne die finanzielle Sicherheit unserer Familien zu beeinträchtigen und die Serverkosten zu decken. Das Projekt ist auch Open Source und kann von der Community aufgegriffen werden, falls uns jemals etwas passieren sollte.\nTEXT\n        ,\n        'question'  => 'Was sind die langfristigen Pläne?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Auf der Seite :public-campaigns können Sie sehen, wie andere Kanka für ihre Kampagnen verwenden.',\n        'question'  => 'Wie benutzen andere Kanka?',\n    ],\n    'renaming-modules'      => [\n        'answer'    => 'Während dies für Englisch und andere Sprachen, die keine geschlechtsspezifischen Namen verwenden, einfach wäre, würde die Möglichkeit, den Namen von Modulen zu ändern, die grammatikalische Korrektheit und Benutzererfahrung für die meisten Sprachen beeinträchtigen, in denen Kanka auch verfügbar ist.',\n        'question'  => 'Kann ich Module umbenennen? Zum Beispiel Familien in Clans oder Organisationen in Fraktionen?',\n    ],\n    'sections'              => [\n        'community'     => 'Community',\n        'general'       => 'Allgemeines',\n        'other'         => 'Andere',\n        'permissions'   => 'Berechtigungen',\n        'pricing'       => 'Preisgestaltung',\n        'worldbuilding' => 'Worldbuilding',\n    ],\n    'show'                  => [\n        'return'    => 'Zurück zum FAQ',\n        'timestamp' => 'Letzte Aktualisierung am :date',\n        'title'     => 'FAQ :name',\n    ],\n    'unboost'               => [\n        'answer'    => 'Durch das Aufheben des Boostings einer Kampagne werden keine Daten gelöscht, die während des Boostings erstellt wurden, sondern lediglich die Informationen und Funktionen ausgeblendet. Wenn Sie eine Kampagne erneut boosten, sind die Informationen und Funktionen mit demselben Setup wieder verfügbar wie vor dem Aufheben des Boostens einer Kampagne.',\n        'question'  => 'Was passiert, wenn eine Kampagne nicht mehr geboosted wird?',\n    ],\n    'user-switch'           => [\n        'answer'    => 'Berechtigungen können schwierig werden, insbesondere bei großen Kampagnen. Als Kampagnenadministrator können Sie zur Mitgliederseite der Kampagne navigieren und auf die Schaltfläche \"Wechseln\" klicken, die neben Nicht-Administratormitgliedern der Kampagne angezeigt wird. Wenn Sie dies tun, melden Sie sich als dieser Benutzer an und können die Kampagne so sehen, wie sie es tun würde. Dies ist der einfachste Weg, um die Berechtigungen Ihrer Kampagne zu überprüfen.',\n        'question'  => 'Meine Kampagnenberechtigungen sind festgelegt. Wie kann ich sie testen?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Nur die Leute, die du zu deiner Kampagne eingeladen hast, können deine Welt sehen und bearbeiten. Deine Daten sind privat und immer unter deiner Kontrolle.',\n        'question'  => 'Kann jeder meine Welt sehen?',\n    ],\n];\n"
  },
  {
    "path": "lang/de/fields.php",
    "content": "<?php\n\nreturn [\n    'gallery'           => [\n        'placeholder'   => 'Wählen Sie ein Bild aus der Kampagnengalerie',\n    ],\n    'gallery-header'    => [\n        'description'   => 'Wenn das Objekt kein Kopfzeilenbild hat, zeigen Sie stattdessen ein Bild aus der Kampagnengalerie an.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'Wenn das Objekt kein Bild hat, zeigen Sie stattdessen ein Bild aus der Kampagnengalerie an.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Zeigen Sie ein Hintergrundbild in der Kopfzeile des Objekts  mit einer :boosted-campaign an.',\n        'description'           => 'Zeigen Sie ein Hintergrundbild in der Kopfzeile des Objekts an. Verwenden Sie für beste Ergebnisse ein sehr großes Bild.',\n        'title'                 => 'Kopfzeilenbild',\n    ],\n    'tooltip'           => [],\n];\n"
  },
  {
    "path": "lang/de/filters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'bookmark'  => 'Lesezeichen',\n    ],\n    'alerts'    => [\n        'copy'  => 'Die Filter wurden in Ihre Zwischenablage kopiert.',\n    ],\n    'bookmark'  => [\n        'helper'    => 'Erstelle ein neues Lesezeichen für diese Ansicht unter Verwendung der aktuellen Filter. \tErstelle eine Erinnerung, um :name mit einem Kalender zu verknüpfen.',\n        'name'      => ':module (gefiltert)',\n        'premium'   => 'Um weitere Lesezeichen hinzuzufügen, musst du die Premium-Kampagnenfunktionen aktivieren.',\n        'success'   => 'Lesezeichen erstellt.',\n    ],\n    'helpers'   => [\n        'guest'         => 'Bitte melden dich bei deinem Konto an, um die Ergebnisse zu filtern.',\n        'icon'          => 'Gib diesem Lesezeichen ein spezielles :fontawesome Symbol, zum Beispiel :example.',\n        'icon-premium'  => 'Gib diesem Lesezeichen ein spezielles :fontawesome Symbol, wie :example, mit einem :premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/footer.php",
    "content": "<?php\n\nreturn [\n    'about'             => 'Über uns',\n    'blog'              => 'Blog',\n    'boosters'          => 'Booster',\n    'community'         => 'Community',\n    'company'           => 'Firma',\n    'contact'           => 'Kontakt',\n    'copyright'         => 'Urheberrecht :copy :year Owlchester SNC',\n    'documentation'     => 'Dokumentation',\n    'features'          => 'Besonderheiten',\n    'kb'                => 'Wissensbasis',\n    'language-switcher' => [\n        'other' => 'andere Sprachen',\n        'title' => 'Wähle deine Sprache',\n    ],\n    'made'              => 'Hergestellt mit ❤️ in Genf, Schweiz',\n    'newsletter'        => 'Newsletter',\n    'platform'          => 'Plattform',\n    'plugins'           => 'Plugin-Bibliothek',\n    'premium'           => 'Premium Kampagnen',\n    'press-kit'         => 'Pressemappe',\n    'pricing'           => 'Preisgestaltung',\n    'privacy'           => 'Privatsphäre',\n    'public-campaigns'  => 'Öffentliche Kampagnen',\n    'resources'         => 'Ressourcen',\n    'roadmap'           => 'Fahrplan',\n    'security'          => 'Sicherheit',\n    'server-time'       => 'Dies ist die Uhrzeit unseres Servers (:server)',\n    'showcase'          => 'Schaufenster',\n    'status'            => 'Service Status',\n    'terms'             => 'Bedingungen',\n    'thanks'            => 'Nur möglich dank unserer Abonnenten.',\n    'translator_call'   => 'Kanka wird dank unserer großartigen Community in andere Sprachen übersetzt. Wenn Sie helfen möchten, Kanka in Ihre Sprache zu übersetzen, kontaktieren Sie uns über :discord!',\n    'whats-new'         => 'Was ist Neu',\n];\n"
  },
  {
    "path": "lang/de/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Community Votes',\n];\n"
  },
  {
    "path": "lang/de/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Ruhmeshalle',\n];\n"
  },
  {
    "path": "lang/de/front/kb.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'show'      => [],\n    'title'     => 'Datenbank',\n];\n"
  },
  {
    "path": "lang/de/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Erfahren Sie mehr',\n        'subscribe'     => 'Abonnieren',\n    ],\n    'fields'    => [\n        'firstname'     => 'Vorname',\n        'lastname'      => 'Nachname',\n        'notifications' => 'Benachrichtigungen',\n    ],\n    'groups'    => [\n        'all'           => 'Erhalte gelegentliche Updates über neue Funktionen, Community-Abstimmungen und Veranstaltungen usw',\n        'newsletter'    => 'Newsletter',\n    ],\n    'headline'  => 'Abonnieren Sie einen oder alle unserer Newsletter, um über Kanka auf dem Laufenden zu bleiben.',\n    'title'     => 'Email Updates',\n];\n"
  },
  {
    "path": "lang/de/front.php",
    "content": "<?php\n\nreturn [\n    'about'                 => [],\n    'actions'               => [],\n    'campaigns'             => [\n        'public'    => [\n            'filters'   => [\n                'is-premium'    => 'Dies ist eine Premium Kampagne',\n            ],\n        ],\n    ],\n    'community'             => [],\n    'contact'               => [],\n    'cookie'                => [\n        'dismiss'   => 'Verstanden!',\n        'link'      => 'Mehr erfahren',\n        'message'   => 'Diese Webseite benutzt Cookies um sicherzustellen, dass du die bestmögliche Erfahrung mit der Seite machst.',\n    ],\n    'faq'                   => [],\n    'featured_campaigns'    => [],\n    'features'              => [\n        'api'       => [\n            'link'  => 'API-Dokumente',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Erhöhte API-Aufrufe (90)',\n            'boosts'            => 'Kampagnen Booster',\n            'default_image'     => 'Schöne Standardbilder für Objekte',\n            'discord'           => 'Privater Discord-Kanal',\n            'free'              => 'Kostenlos',\n            'hall_of_fame'      => 'Name in :link',\n            'impact'            => 'Auswirkungen auf zukünftige Funktionen',\n            'monthly_vote'      => 'Teilnahme an der Community-Feature-Abstimmung',\n            'pagination'        => 'Erhöhung der anzeigten Elemente pro Seite.',\n            'upload_limit'      => 'Upload Größe',\n            'upload_limit_map'  => 'Kartenupload Größe',\n        ],\n    ],\n    'first_block'           => [],\n    'footer'                => [],\n    'goodbye'               => [],\n    'help'                  => [],\n    'home'                  => [\n        'seo'   => [\n            'meta-description'  => 'Kanka ist ein Community-gesteuerter RPG-Kampagnenmanager und ein Worldbuilding-Tool, mit dem Sie Ihre Tabletop-RPG-Kampagnen einfach organisieren, planen und genießen können',\n        ],\n    ],\n    'master'                => [],\n    'media'                 => [],\n    'menu'                  => [\n        'dashboard'     => 'Dashboard',\n        'login'         => 'Login',\n        'register'      => 'Registrieren',\n        'register_free' => 'Kostenlos registrieren',\n    ],\n    'meta'                  => [\n        'description'   => 'Kanka ist ein flexibles digitales Tool zum weltenbauen und verwalten deiner Rollenspielkampagnen',\n        'title'         => 'Kanka - Online Rollenspielkampagnen Verwalter und Weltenbautool',\n    ],\n    'partners'              => [],\n    'pricing'               => [\n        'tier'  => [\n            'free'  => 'Kostenlos',\n            'month' => 'Monat',\n        ],\n    ],\n    'privacy'               => [],\n    'release'               => [],\n    'roadmap'               => [],\n    'second_block'          => [],\n    'seo'                   => [\n        'keywords'  => 'Worldbuilding, Tabletop-RPG, RPG-Kampagnenmanager',\n    ],\n    'team'                  => [],\n    'terms'                 => [],\n];\n"
  },
  {
    "path": "lang/de/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'gallery'   => 'Aus der Galerie',\n        'url'       => 'Hochladen eines Bildes von einer URL',\n    ],\n    'browse'    => [\n        'layouts'       => [\n            'large' => 'Große Vorschauen',\n            'small' => 'Kleine Vorschauen',\n        ],\n        'search'        => [\n            'placeholder'   => 'Suche nach einem Bild in der Galerie',\n        ],\n        'title'         => 'Bildergallerie',\n        'unauthorized'  => 'Keine deiner Rollen hat die Berechtigung „Galerie durchsuchen“.',\n    ],\n    'cta'       => [\n        'action'    => 'Mehr Speicherplatz freischalten',\n        'helper'    => 'Schalte bis zu :size GiB Speicherplatz mit einer :premium-campaign frei.',\n        'title'     => 'Speicher voll',\n    ],\n    'delete'    => [\n        'success'   => '[0] Gelöschte 0 Elemente|[1] Gelöschte ein Element|{2,*} Gelöschte :count Elemente',\n    ],\n    'download'  => [\n        'errors'    => [\n            'copy_failed'           => 'Unsere Server konnten das angegebene Bild nicht herunterladen.',\n            'gallery_full_free'     => 'Der Speicherplatz in der Galerie ist voll. Aktiviere Premium-Funktionen für mehr Speicherplatz.',\n            'gallery_full_premium'  => 'Der Speicherplatz in der Galerie ist voll. Entferne zunächst nicht verwendete Dateien.',\n            'invalid_format'        => 'Die Datei ist kein gültiges Dateiformat.',\n            'too_big'               => 'Diese Datei ist zu groß',\n            'unauthorized'          => 'Keine deiner Rollen hat die Berechtigung „In die Galerie hochladen“.',\n        ],\n    ],\n    'file'      => [\n        'saved' => 'gesichert',\n    ],\n    'filters'   => [\n        'only_unused'   => 'Nur ungenutzte Dateien anzeigen',\n        'sort'          => 'Sortieren nach',\n    ],\n    'move'      => [\n        'success'   => '[0] 0 Elemente verschoben|[1] Ein Element verschoben|{2,*} Bewegte :count Elemente',\n    ],\n    'update'    => [\n        'home'      => 'Ordner Startseite',\n        'success'   => '[0] 0 Elemente aktualisiert|[1] Ein Element aktualisiert|{2,*} Aktualisiert :count Elemente',\n    ],\n];\n"
  },
  {
    "path": "lang/de/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Alle abwählen',\n    'documentation' => 'Erfahre mehr über diese Funktion in unserer Dokumentation',\n    'done'          => 'fertig',\n    'learn-more'    => 'Mehr erfahren',\n    'no'            => 'Nein',\n    'required'      => 'Erforderlich',\n    'select_all'    => 'Alle auswählen',\n    'success'       => [\n        'created'           => ':name erstellt',\n        'deleted'           => ':name entfernt',\n        'deleted-cancel'    => ':name entfernt. :cancel.',\n        'updated'           => ':name aktualisiert',\n    ],\n    'tutorial'      => 'Tutorial ansehen',\n    'yes'           => 'Ja',\n];\n"
  },
  {
    "path": "lang/de/genres.php",
    "content": "<?php\n\nreturn [\n    'alternate_history' => 'Alternative Geschichte',\n    'cyberpunk'         => 'Cyberpunk',\n    'fantasy'           => 'Fantasy',\n    'historical'        => 'Historisch',\n    'many_worlds'       => 'Viele Welten',\n    'modern'            => 'Modern',\n    'occult'            => 'Okkulte',\n    'post_apocalyptic'  => 'Post-apokalyptischen',\n    'pulp'              => 'Pulp',\n    'science_fantasy'   => 'Science fantasy',\n    'science_fiction'   => 'Science-Fiction',\n    'space_opera'       => 'Weltraumoper',\n    'steampunk'         => 'Steampunk',\n    'superhero'         => 'Superheld',\n    'urban_fantasy'     => 'Urbane Fantasie',\n    'western'           => 'Western',\n];\n"
  },
  {
    "path": "lang/de/header.php",
    "content": "<?php\n\nreturn [\n    'news'              => [\n        'title' => 'Kanka Neuigkeiten',\n    ],\n    'notifications'     => [\n        'dismiss'   => 'Abweisen',\n        'no-unread' => 'Keine ungelesenen Benachrichtigungen',\n        'read_all'  => 'Alles lesen',\n    ],\n    'qq'                => [\n        'tooltip'   => 'Ein Objekt erstellen oder einen Beitrag veröffentlichen',\n    ],\n    'toggle_navigation' => 'Navigation umschalten',\n    'user'              => [\n        'settings'      => 'Einstellungen',\n        'sign-out'      => 'ausloggen',\n        'upgrade'       => 'Upgrade',\n        'your-profile'  => 'Dein Profil',\n    ],\n];\n"
  },
  {
    "path": "lang/de/helpers.php",
    "content": "<?php\n\nreturn [\n    'age'               => [],\n    'api-filters'       => [\n        'description'   => 'Die folgenden Filter sind für den API-Endpunkt :name verfügbar.',\n        'title'         => 'API Filters',\n    ],\n    'attributes'        => [\n        'link'  => 'Attributoptionen',\n    ],\n    'calendar-widget'   => [\n        'info'  => 'Warum werden diese Erinnerungen angezeigt?',\n        'title' => 'Kalender-Widget',\n    ],\n    'dice'              => [],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Verwendung von Filtern',\n    ],\n    'link'              => [\n        'description'   => 'Mit einem \"@\" kannst du ganz einfach Links zu anderen Einträgen setzen. Ein \"#\" zeigt dir stattdessen eine Namensliste mit Monaten aus deinen Kalendern an.',\n    ],\n    'map'               => [],\n    'pins'              => [],\n    'public'            => 'Sie die Tutorial Videos über öffentliche Kampagnen auf Youtube an.',\n    'troubleshooting'   => [\n        'description'       => 'Ein Mitglied von Kankas Team hat Sie auf diese Seite geschickt. Wählen Sie eine Kampagne aus der Dropdown-Liste aus, um ein Token zu generieren, damit wir Ihrer Kampagne vorübergehend als Administrator beitreten können.',\n        'errors'            => [\n            'token_exists'  => 'Es besteht bereits ein Token für :campaign.',\n        ],\n        'save_btn'          => 'Token erstellen',\n        'select_campaign'   => 'Kampagne auswählen',\n        'subtitle'          => 'Bitte senden Sie Hilfe!',\n        'success'           => 'Bitte kopieren Sie den folgenden Token und senden Sie ihn an jemanden aus Kankas Team.',\n        'title'             => 'Troubleshooting',\n    ],\n    'widget-filters'    => [\n        'description'   => 'Sie können Objekte filtern, die im kürzlich geänderten Widget angezeigt werden, indem Sie eine Liste der Felder der Objekte und der Werte bereitstellen. Zum Beispiel können Sie :example verwenden, um nach toten Charakteren des NPC-Typs zu filtern.',\n        'link'          => 'Widget Filter',\n        'title'         => 'Dashboard Widget Filter',\n    ],\n];\n"
  },
  {
    "path": "lang/de/history.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'show-old'  => 'Changes',\n    ],\n    'cta'       => 'Zeige ein Protokoll aller letzten Änderungen an der Kampagne an.',\n    'empty'     => 'Kein Wert',\n    'fields'    => [\n        'action'    => 'Aktion',\n        'details'   => 'Details',\n        'when'      => 'Wann',\n        'who'       => 'Wer',\n    ],\n    'filters'   => [\n        'all-actions'   => 'Alle Aktionen',\n        'all-users'     => 'Alle Mitglieder',\n        'no-results'    => 'Keine Ergebnisse zum Anzeigen. Versuche es mit anderen Filtern oder kehre zurück, nachdem du Änderungen an den Objekten der Kampagne vorgenommen hast.',\n    ],\n    'helpers'   => [\n        'base'      => 'Diese Oberfläche enthält die letzten Änderungen an Objekten der Kampagne für bis zu :amount Monate, wobei die neuesten Änderungen zuerst angezeigt werden.',\n        'changes'   => 'Die folgenden Felder hatten zuvor diese Werte.',\n    ],\n    'log'       => [\n        'create'        => ':user erstellt :entity',\n        'create_post'   => ':user erstellte den Beitrag  \":post\" zu :entity',\n        'delete'        => ':user gelöscht :entity',\n        'delete_post'   => ':user löschte den Beitrag zu :entity',\n        'reorder_post'  => ':user ordnete den Beitrag zu :entity neu',\n        'restore'       => ':user wiederhergestellt :entity',\n        'update'        => ':user aktualisiert :entity',\n        'update_post'   => ':user aktualisierte den Beitrag \":post\" zu :entity',\n        'update_tree'   => ':user hat den Stammbaum von :entity aktualisiert.',\n    ],\n    'title'     => 'Historie',\n    'unknown'   => [\n        'entity'    => 'ein unbekanntes Objekt',\n    ],\n];\n"
  },
  {
    "path": "lang/de/items.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Neuen Gegenstand erstellen',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_equipped'   => 'Ausgestattet',\n        'price'         => 'Preis',\n        'size'          => 'Größe',\n        'weight'        => 'Gewicht',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'inventories'   => [],\n    'lists'         => [\n        'empty' => 'Füge Waffen, Artefakte oder wichtige Gegenstände zu deiner Welt hinzu.',\n    ],\n    'placeholders'  => [\n        'price' => 'Preis des Gegenstandes',\n        'size'  => 'Größe, Gewicht, Maße',\n        'type'  => 'Waffe, Trank, Artefakt',\n        'weight'=> 'Gewicht des Gegenstands',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Objekte',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Erstelle ein neues Logbuch',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Autor',\n        'date'      => 'Datum',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'journals'      => [],\n    'lists'         => [\n        'empty' => 'Erstelle Tagebucheinträge, um Abenteuer, Gedanken der Charaktere oder Zusammenfassungen und Vorbereitungen für Spielsitzungen festzuhalten.',\n    ],\n    'placeholders'  => [\n        'author'    => 'Wer hat das Logbuch geschrieben',\n        'date'      => 'Datum des Logbuchs',\n        'type'      => 'Session, One Shot, Entwurf',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/de/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Katalanisch',\n        'cs'    => 'Tschechisch',\n        'de'    => 'Deutsch',\n        'el'    => 'Griechisch',\n        'en'    => 'Englisch',\n        'en-US' => 'amerikanisches Englisch',\n        'es'    => 'Spanisch',\n        'fr'    => 'Französisch',\n        'gl'    => 'Galizisch',\n        'he'    => 'Hebräisch',\n        'hr'    => 'Kroatisch',\n        'hu'    => 'Ungarisch',\n        'it'    => 'Italienisch',\n        'nb'    => 'Norwegisch (Bokmal)',\n        'nl'    => 'Holländisch',\n        'pl'    => 'Polnisch',\n        'pt-BR' => 'Brasilianisches Portugisiesch',\n        'ru'    => 'Russisch',\n        'sk'    => 'Slovakisch',\n        'tr'    => 'Türkisch',\n    ],\n    'header'=> 'Sprachen',\n];\n"
  },
  {
    "path": "lang/de/lists.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn' => 'Erfahre mehr über dieses Modul',\n        'public'=> 'Sieh, wie andere es machen',\n    ],\n    'empty'     => [\n        'title' => 'keine :plural form bis jetzt',\n    ],\n];\n"
  },
  {
    "path": "lang/de/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Erstelle einen neuen Ort',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [\n        'is_destroyed'  => 'Zerstörte',\n    ],\n    'helpers'       => [\n        'characters'    => 'Sieh alle Charaktere in diesem Ort und den Unterorten an oder nur die direkt im Ort.',\n    ],\n    'hints'         => [\n        'is_destroyed'  => 'Dieser Ort ist zerstört.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'lists'         => [\n        'empty' => 'Füge deine erste Stadt, Taverne oder versteckte Ruine hinzu, um deine Welt zu verankern.',\n    ],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'type'  => 'Stadt, Königreich, Ruine',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/de/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Wechsle in den Bearbeitungsmodus',\n        'exit-edit-mode'    => 'Verlasse den Bearbeitungsmodus',\n        'finish-drawing'    => 'Beende das Zeichnen des Polygons',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Klicke auf die Karte, um mit dem Zeichnen eines Polygons zu beginnen',\n    ],\n    'toggle'        => 'Alle Gruppen öffnen/schließen',\n];\n"
  },
  {
    "path": "lang/de/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'neue Gruppe hinzufügen',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} entfernt :count Gruppe .|[2,*] entfernt :count Gruppen.',\n        'patch'     => '{1} aktualisiere :count group.|[2,*] aktualisiere :count groups.',\n    ],\n    'create'        => [\n        'helper'    => 'Füge eine neue Gruppe :name hinzu. Dieser Gruppe können dann Markierungen zugewiesen werden.',\n        'success'   => 'Gruppe :name erzeugen',\n        'title'     => 'neue Gruppe',\n    ],\n    'delete'        => [\n        'success'   => 'Gruppe :name gelöscht',\n    ],\n    'edit'          => [\n        'success'   => 'Gruppe :name aktualisiert',\n        'title'     => 'Gruppe :name editieren',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Zeige Gruppenmarker',\n        'parent'    => 'Elterngruppe',\n        'position'  => 'Position',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Markierungen können mithilfe von Kartengruppen gruppiert werden. Jede Gruppe kann dann beim Erkunden einer Karte angeklickt werden, um schnell alle Markierungen darin ein- oder auszublenden.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Wenn diese Option aktiviert ist, werden die Gruppenmarker standardmäßig auf der Karte angezeigt.',\n    ],\n    'index'         => [\n        'title' => 'Gruppe von :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'Du kannst keine weiteren Gruppen hinzufügen, es sei denn, du entfernst eine bestehende Gruppe.',\n            'limit'     => 'Diese Karte hat ihre Gruppengrenze erreicht',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Du hast das Limit von :limit groups für diese Karte erreicht',\n            'upgrade'   => 'Wenn du auf eine Premium-Kampagne upgradest, kannst du bis zu :limit groups hinzufügen und noch mehr kreative Flexibilität freischalten.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Geschäfte, Schatz, NSC,',\n        'position'      => 'Optionales Feld zum Festlegen der Reihenfolge, in der die Gruppen angezeigt werden.',\n        'position_list' => 'nach :name',\n    ],\n    'reorder'       => [\n        'save'      => 'neue Reihenfolge speichern',\n        'success'   => '{1} ordne neu :count group.|[2,*] ordne neu :count groups.',\n        'title'     => 'Gruppe neu ordnen',\n    ],\n];\n"
  },
  {
    "path": "lang/de/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'neue Ebene hinzufügen',\n    ],\n    'base'          => 'Basisebene',\n    'bulks'         => [\n        'delete'    => '{1} entferne :count layer.|[2,*] entferne :count layers.',\n        'patch'     => '{1} aktualisiere :count layer.|[2,*] aktualisiere :count layers.',\n    ],\n    'create'        => [\n        'success'   => 'Ebene :name erstellen',\n        'title'     => 'neue Ebene',\n    ],\n    'delete'        => [\n        'success'   => 'Ebene :name löschen',\n    ],\n    'edit'          => [\n        'success'   => 'Ebene :name aktualisieren',\n        'title'     => 'Ebene :name editieren',\n    ],\n    'fields'        => [\n        'position'  => 'Position',\n        'type'      => 'Ebenentyp',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Lade Ebenen auf eine Karte hoch, um das unter den Markierungen angezeigte Hintergrundbild zu wechseln.',\n        'is_real'   => 'Ebenen sind bei Verwendung von OpenStreetMaps nicht verfügbar.',\n    ],\n    'index'         => [\n        'title' => 'ebene von :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'Du kannst keine weiteren Ebenen hinzufügen, wenn du nicht eine bestehende Ebene entfernst.',\n            'limit'     => 'Diese Karte hat ihre Ebenenmaximum erreicht',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Du hast das Limit von :limit layers für diese Karte erreicht',\n            'upgrade'   => 'Mit einem Upgrade auf eine Premium-Kampagne kannst du bis zu :limit layers hinzufügen und so noch mehr kreative Flexibilität freischalten.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Untergrund, Ebene 2, Schiffbruch',\n        'position'      => 'Optionales Feld zum Festlegen der Reihenfolge, in der die Ebenen angezeigt werden.',\n        'position_list' => 'nach :name',\n    ],\n    'reorder'       => [\n        'save'      => 'speichere neue Reichenfolge',\n        'success'   => '{1} neu ordnen :count layer.|[2,*] neu ordnen :count layers.',\n        'title'     => 'Ebenen neu ordnen',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Überlagerung',\n        'overlay_shown' => 'Überlagerung (automatisch gezeigt)',\n        'standard'      => 'Standard',\n    ],\n    'types'         => [\n        'overlay'       => 'Überlagerung (über der aktiven Ebene angezeigt)',\n        'overlay_shown' => 'Standardmäßig wird die Überlagerung angezeigt',\n        'standard'      => 'Standardebene (zwischen Ebenen wechseln)',\n    ],\n];\n"
  },
  {
    "path": "lang/de/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Schreibe ein benutzerdefiniertes Eingabefeld für diesen Marker.',\n        'remove'            => 'Marker entfernen',\n        'reset-polygon'     => 'Position zurücksetzen',\n        'save_and_explore'  => 'Speichern und Erkunden',\n        'start-drawing'     => 'Zeichnen starten',\n        'update'            => 'Marker editieren',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} entferne :count marker.|[2,*] entferne :count markers.',\n        'patch'     => '{1} aktualisiere :count marker.|[2,*] aktualisiere :count markers.',\n    ],\n    'circle_sizes'  => [\n        'custom'    => 'benutzerdefiniert',\n        'huge'      => 'riesig',\n        'large'     => 'groß',\n        'small'     => 'klein',\n        'standard'  => 'standard',\n        'tiny'      => 'winzig',\n    ],\n    'create'        => [\n        'success'   => 'Marker :name erstellt',\n        'title'     => 'neuer Marker',\n    ],\n    'delete'        => [\n        'success'   => 'Marker :name löschen',\n    ],\n    'details'       => [\n        'from-entity'   => 'Vom Objekt',\n    ],\n    'edit'          => [\n        'success'   => 'Marker :name aktualisiert',\n        'title'     => 'Marker :name editieren',\n    ],\n    'fields'        => [\n        'bg_colour'     => 'Hintergrundfarbe',\n        'circle_radius' => 'Kreisradius',\n        'copy_elements' => 'kopiere Elemente',\n        'custom_icon'   => 'Benutzerdefiniertes Symbol',\n        'custom_shape'  => 'Benutzerdefinierte Form',\n        'font_colour'   => 'Icon Farbe',\n        'group'         => 'Markergruppe',\n        'icon'          => 'Icon',\n        'is_draggable'  => 'Verschiebbar',\n        'latitude'      => 'Breitengrad',\n        'longitude'     => 'Längengrad',\n        'opacity'       => 'Fügen Sie der Karte Markierungen hinzu, indem Sie auf eine beliebige Stelle klicken.',\n        'pin_size'      => 'Pingröße',\n        'polygon_style' => [\n            'stroke'            => 'Strichfarbe',\n            'stroke-opacity'    => 'Strichdeckkraft',\n            'stroke-width'      => 'Strichbreite',\n        ],\n        'popupless'     => 'Tooltip-Popup',\n        'size'          => 'Größe',\n    ],\n    'helpers'       => [\n        'base'                      => 'Fügen Sie der Karte Markierungen hinzu, indem Sie auf eine beliebige Stelle klicken.',\n        'copy_elements'             => 'kopiere Gruppen, Layers, und Marker',\n        'copy_elements_to_campaign' => 'Kopiere Gruppen, Ebenen und Markierungen der Karten. Mit einem Objekt verknüpfte Marker werden in einen Standardmarker konvertiert.',\n        'css'                       => 'Definiere eine benutzerdefinierte CSS-Klasse, die der Markierung hinzugefügt wird.',\n        'custom_icon_v2'            => 'Verwende Symbole von :fontawesome, :rpgawesome oder ein benutzerdefiniertes SVG-Symbol. Wie das geht, erfährst du in den :docs.',\n        'custom_radius'             => 'Wählen Sie die benutzerdefinierte Größenoption aus der Dropdown-Liste aus, um eine Größe zu definieren.',\n        'draggable'                 => 'Aktivieren Sie diese Option, um das Verschieben eines Markers im Erkundungsmodus zu ermöglichen.',\n        'is_popupless'              => 'Deaktiviere die Anzeige des Tooltips der Markierung, wenn du mit der Maus darüber fährst.',\n        'label'                     => 'Eine Beschriftung wird als Textblock auf der Karte angezeigt. Der Inhalt ist der Markername des Objektnamens.',\n        'polygon'                   => [\n            'edit'  => 'Klicken Sie auf die Karte, um diese Position zu den Koordinaten des Polygons hinzuzufügen.',\n        ],\n    ],\n    'hints'         => [\n        'entry' => 'Bearbeite die Markierung, um einen benutzerdefinierten Eintrag dafür zu schreiben.',\n    ],\n    'icons'         => [\n        'custom'        => 'Benutzerdefiniert',\n        'entity'        => 'Objekt',\n        'exclamation'   => 'Ausruf',\n        'marker'        => 'Marker',\n        'question'      => 'Frage',\n    ],\n    'index'         => [\n        'title' => 'Marker von :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Zeichne benutzerdefinierte Polyong-Formen, um Ränder und andere ungleichmäßige Formen darzustellen.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'versuchen sie :example1 or :example2',\n        'custom_shape'  => '100,100 200,240 340,110',\n        'name'          => 'Name des Markers',\n    ],\n    'presets'       => [\n        'helper'    => 'Klicke auf eine Voreinstellung, um sie zu laden, oder erstelle eine neue.',\n    ],\n    'shapes'        => [\n        '0' => 'Kreis',\n        '1' => 'Quadrat',\n        '2' => 'Dreieck',\n        '3' => 'Benutzerdefiniert',\n    ],\n    'sizes'         => [\n        '0' => 'Sehr klein',\n        '1' => 'Standard',\n        '2' => 'Klein',\n        '3' => 'Groß',\n        '4' => 'Enorm',\n    ],\n    'tabs'          => [\n        'circle'    => 'Kreis',\n        'label'     => 'Etikette',\n        'marker'    => 'Marker',\n        'polygon'   => 'Polygon',\n        'preset'    => 'Vorlage',\n    ],\n];\n"
  },
  {
    "path": "lang/de/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'zurück zu :name',\n        'edit'      => 'Karte editieren',\n        'explore'   => 'erkunden',\n    ],\n    'create'        => [\n        'title' => 'neue Karte',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'Beim Aufteilen der Karte ist ein Fehler aufgetreten. Bitte kontaktiere das Team auf :discord für Unterstützung.',\n            'running'   => [\n                'edit'      => 'Die Karte kann nicht bearbeitet werden, während sie aufgeteilt wird.',\n                'explore'   => 'Die Karte kann nicht angezeigt werden, während sie aufgeteilt wird.',\n                'time'      => 'Dies kann je nach Größe der Karte einige Minuten bis mehrere Stunden dauern.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'Diese Karte benötigt ein Bild, um im Dashboard gerendert werden zu können.',\n        ],\n        'explore'   => [\n            'missing'   => 'Bitte fügen Sie der Karte ein Bild hinzu, bevor Sie sie erkunden können.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Marker',\n        'center_x'          => 'Standard-Längengradposition',\n        'center_y'          => 'Standard-Breitengradposition',\n        'centering'         => 'Zentrierung',\n        'distance_measure'  => 'Entfernungsmessung',\n        'distance_name'     => 'Etikett für Entfernungseinheit',\n        'grid'              => 'Gitter',\n        'has_clustering'    => 'Cluster-Marker',\n        'initial_zoom'      => 'Initial Zoom',\n        'is_real'           => 'Verwenden Sie OpenStreetMaps',\n        'max_zoom'          => 'Maximal Zoom',\n        'min_zoom'          => 'Minimal Zoom',\n        'tabs'              => [\n            'coordinates'   => 'Koordinaten',\n            'marker'        => 'Marker',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'Durch Ändern der folgenden Werte wird gesteuert, auf welchen Bereich der Karte der Fokus liegt. Wenn Sie diese Werte leer lassen, wird die Mitte der Karte fokussiert.',\n        'centering'             => 'Das Zentrieren auf eine Markierung hat Vorrang vor den Standardkoordinaten.',\n        'chunked_zoom'          => 'Gruppiere Markierungen automatisch, wenn sie nahe beieinander liegen.',\n        'distance_measure'      => 'Wenn Sie der Karte eine Entfernungsmessung geben, wird das Messwerkzeug im Erkundungsmodus aktiviert.',\n        'distance_measure_2'    => 'Damit 100 Pixel 1 Kilometer entsprechen, gib einen Wert von 0,0041 ein.',\n        'grid'                  => 'Definieren Sie eine Rastergröße, die im Erkundungsmodus angezeigt wird.',\n        'has_clustering'        => 'Gruppiere Markierungen automatisch, wenn sie nahe beieinander liegen.',\n        'initial_zoom'          => 'Die anfängliche Zoomstufe, mit der eine Karte geladen wird. Der Standardwert ist :default, während der höchste zulässige Wert :max und der niedrigste zulässige Wert :min ist.',\n        'is_real'               => 'Wählen Sie diese Option, wenn Sie anstelle des hochgeladenen Bildes eine echte Weltkarte verwenden möchten. Diese Option deaktiviert Ebenen.',\n        'max_zoom'              => 'Eine Karte kann bis zu diesem Wert maximal vergrößert werden. Der Standardwert ist :default, während der höchstzulässige Wert :max ist.',\n        'min_zoom'              => 'Eine Karte kann bis zu diesem Wert maximal verkleinert werden. Der Standardwert ist :default, während der höchstzulässige Wert :min ist.',\n        'missing_image'         => 'Speichern Sie die Karte mit einem Bild, bevor Sie Ebenen und Markierungen hinzufügen können.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Lade eine Karte hoch, um Orte zu visualisieren und die Geografie deiner Welt darzustellen.',\n    ],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Gruppen',\n        'layers'    => 'Ebenen',\n        'legend'    => 'Legende',\n        'markers'   => 'Marker',\n        'settings'  => 'Einstellungen',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Leer lassen, um die Karte in der Mitte zu laden',\n        'center_x'      => 'Lassen Sie das Feld leer, um die Karte in der Mitte zu laden (X-Koordinate)',\n        'center_y'      => 'Lassen Sie das Feld leer, um die Karte in der Mitte zu laden (Y-Koordinate)',\n        'distance_name' => 'Km, Meilen, Fuß, Hamburger',\n        'grid'          => 'Abstand in Pixel zwischen Gitterelementen. Leer lassen, um das Raster auszublenden.',\n        'name'          => 'Name der Karte',\n        'type'          => 'Dungeon, Stadt, Galaxie',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Karten',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'Die Karte wird aufgeteilt. Dieser Vorgang kann einige Minuten bis Stunden dauern.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'member'    => 'Werde ein Mitglied',\n        'remove_v5' => 'Kanka wird nur von uns beiden entwickelt. Unterstütze unser Vorhaben und genieße ein werbefreies Erlebnis für weniger als die Kosten für einen Kaffee.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Erstelle eine neue Notiz',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'untergeordnete Notiz',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Speicher Ideen, Referenzen, Regeln oder Informationen, die nirgendwo anders hineinpassen.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Wähle eine übergeordnete Notiz',\n        'type'  => 'Religion, Spezies, Politisches System',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/de/notifications.php",
    "content": "<?php\n\nreturn [\n    'apps'              => [\n        'discord'   => [\n            'invalid'   => 'Dein Discord-Token ist abgelaufen. Bitte synchronisiere dein Discord- und Kanka-Konto erneut.',\n        ],\n    ],\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'Ihre Bewerbung für die Kampagne :campaign wurde genehmigt.',\n            'approved_message'      => 'Deiner Bewerbung für die :campaign Kampagne wurde zugestimmt. Nachricht bereitgestellt: :reason',\n            'new'                   => 'Neue Bewerbung für :campaign',\n            'rejected'              => 'Ihr Bewerbung für die :campaign Kampagne wurde abgelehnt. Grund dafür ist :reason',\n            'rejected_no_message'   => 'Deiner Bewerbung für die Kampagne :campaign wurde widersprochen.',\n        ],\n        'asset_export'      => 'Ein Export eines Kampagnen-Assets ist verfügbar. Der Link ist verfügbar für :time Minuten.',\n        'boost'             => [\n            'add'           => 'Kampagne :campaign wird geboosted durch :user.',\n            'remove'        => ':user boosted die :campaign  nicht mehr.',\n            'superboost'    => 'Die Kampagne :campaigne wird von :user superboosted.',\n        ],\n        'created'           => 'Du hast :campaign erstellt.',\n        'deleted'           => 'Die Kampagne :campaign wurde gelöscht.',\n        'export'            => 'Ein Export der Kampagne steht zur Verfügung. Der Link ist :time Minuten gültig.',\n        'export_error'      => 'Beim Export deiner Kampagne ist ein Fehler aufgetreten. Bitte kontaktiere uns, wenn das Problem weiterhin besteht.',\n        'hidden'            => 'Die Kampagne :campaign ist jetzt auf der Seite „Öffentliche Kampagnen“ ausgeblendet.',\n        'import'            => [\n            'failed'    => 'Der Import für Kampagne :campaign ist fehlgeschlagen.',\n            'success'   => 'Der Import der Kampagne :campaign wurde abgeschlossen.',\n        ],\n        'join'              => ':user ist der Kampagne :campaign beigetreten.',\n        'leave'             => ':user hat die Kampagne :campaign verlassen.',\n        'new_owner'         => 'Du wurdest zum Administrator von :campaign ernannt.',\n        'plugin'            => [\n            'deleted'   => 'Das Plugin :plugin wurde vom Marktplatz gelöscht und aus Ihrer Kampagne :campaign entfernt.',\n        ],\n        'premium'           => [\n            'add'       => 'Premium-Funktionen wurden für die :campaign-Kampagne von :user freigeschaltet.',\n            'remove'    => ':user schaltet keine Premiumfunktionen mehr für die :campaign-Kampagne frei.',\n        ],\n        'removed-image'     => 'Das Bild oder der Header von :entity wurde aufgrund eines Urheberrechtsanspruchs entfernt.',\n        'role'              => [\n            'add'       => 'Du wurdest zur Rolle :role in der Kampagne :campaign hinzugefügt.',\n            'remove'    => 'Du wurdest aus der Rolle :role in der Kampagne :campaign entfernt.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => 'Das Kanka Teammitglied :user ist der Kampagne :campaign beigetreten.',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Clear all',\n        'success'   => 'Benachrichtigungen entfernt.',\n        'title'     => 'lösche Benachrichtigungen',\n    ],\n    'features'          => [\n        'approved'  => 'Deine Idee :feature wurde genehmigt.',\n        'finished'  => 'Ihre Idee :feature ist jetzt in Kanka verfügbar!',\n        'rejected'  => 'Deine Idee :feature wurde abgelehnt, Grund: :reason.',\n    ],\n    'header'            => 'Du hast :count Benachrichtigungen.',\n    'index'             => [\n        'title' => 'Benachrichtigungen',\n    ],\n    'map'               => [\n        'chunked'   => 'Karte :name ist mit dem aufteilen fertig und kann jetzt verwendet werden.',\n    ],\n    'no_notifications'  => 'Es gibt aktuell keine Benachrichtigungen.',\n    'plugins'           => [\n        'comments'  => [\n            'new_comment'   => ':user hat einen neuen Kommentar zu dem Plugin :plugin hinterlassen.',\n            'new_reply'     => ':user hat auf Ihren Kommentar in :plugin geantwortet.',\n        ],\n    ],\n    'subscriptions'     => [\n        'charge_fail'   => 'Bei der Verarbeitung Ihrer Zahlungsmethode ist ein Fehler aufgetreten. Bitte warten Sie einen Moment, während wir es erneut versuchen. Wenn sich nichts ändert, kontaktieren Sie uns bitte.',\n        'deleted'       => 'Ihr Abonnement für Kanka wurde nach zu vielen fehlgeschlagenen Versuchen, Ihre Karte zu belasten, gekündigt. Bitte gehen Sie zu Ihren Abonnementeinstellungen und versuchen Sie, Ihre Zahlungsdetails zu aktualisieren.',\n        'ended'         => 'Ihr Abonnement für Kanka ist beendet. Ihre Kampagnen-Boosts und Discord-Rollen wurden entfernt. Wir hoffen, Sie bald wieder zu sehen!',\n        'failed'        => 'Ihr Abonnement für Kanka wurde nach zu vielen fehlgeschlagenen Versuchen, Ihre Zahlungsmethode zu belasten, gekündigt. Bitte gehen Sie zu Ihren Abonnementeinstellungen und versuchen Sie, Ihre Zahlungsdetails zu aktualisieren.',\n        'started'       => 'Ihr Abonnement wurde gestartet',\n        'trial'         => 'Deine kostenlose Testversion von Kanka ist abgelaufen. Wir hoffen, dass es dir gefallen hat und freuen uns auf deinen nächsten Besuch!',\n    ],\n    'unread'            => 'Neue Benachrichtigung',\n];\n"
  },
  {
    "path": "lang/de/onboarding/attributes.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Mit Attributen kannst du kleine, wiederverwendbare Informationen zu :name hinzufügen, wie z. B. Alter, Trefferpunkte, Fraktionsrang oder beliebige benutzerdefinierte Statistiken, die du verfolgst. Sie eignen sich ideal für Daten, auf die du über mehrere Objekten hinweg verweisen, sortieren oder als Vorlage verwenden möchtest.',\n    'title' => 'Strukturierte Daten für dieses Objekt speichern',\n];\n"
  },
  {
    "path": "lang/de/onboarding/characters.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'Das reicht für den Anfang.',\n    'text'      => 'Konzentriere dich auf das Wesentliche :name, kurze Beschreibung und ein oder zwei charakteristische Merkmale. Details wie Verbindungen, Eigenschaften und Porträts kannst du später hinzufügen.',\n    'title'     => 'Erstelle deinen ersten Charakter',\n];\n"
  },
  {
    "path": "lang/de/onboarding/locations.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'Halte es vorerst einfach.',\n    'text'      => 'Fange klein an. Benenne den Ort und füge einen Satz hinzu, der erklärt, warum er wichtig ist. Sobald die Welt Gestalt annimmt, kannst du sie mit Karten, Einwohnern und verschachtelten Orten erweitern.',\n    'title'     => 'Erstelle deinen ersten Ort',\n];\n"
  },
  {
    "path": "lang/de/onboarding/posts.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Mit Beiträgen kannst du öffentliche Texte von privaten Notizen, GM-internen Geheimnissen und unterstützenden Informationen trennen. Erstelle so viele Beiträge, wie du benötigst, und lege fest, wer sie sehen darf.',\n    'title' => 'Verwende Beiträge für Geheimnisse und zusätzliche Details',\n];\n"
  },
  {
    "path": "lang/de/onboarding/reminders.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Erstelle Erinnerungen für Fristen, Termine in der Geschichte, Jahrestage oder alles andere, was mit :name in Verbindung steht und das du nicht vergessen möchtest. Die Erinnerungen, die du hier hinzufügst, werden auf dieser Seite und an jedem Kalenderdatum angezeigt, mit dem du sie verknüpfst.',\n    'title' => 'Verfolge hier zeitkritische Details',\n];\n"
  },
  {
    "path": "lang/de/onboarding/tags.php",
    "content": "<?php\n\nreturn [\n    'npcs'  => 'Nicht-Spieler-Charaktere',\n];\n"
  },
  {
    "path": "lang/de/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Erstelle eine neue Organisation',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_defunct'    => 'stillgelegt',\n        'members'       => 'Mitglieder',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_defunct'    => 'Diese Organisation ist aufgelöst.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Gründe Gilden, Fraktionen oder Geheimgesellschaften, um die Machtstruktur deiner Welt zu gestalten.',\n    ],\n    'members'       => [\n        'actions'       => [\n            'add_multiple'  => 'Mitglied hinzufügen',\n        ],\n        'create'        => [\n            'helper'            => 'Füge ein oder mehrere Mitglieder zu :name.',\n            'success_multiple'  => '{1} Mitglied :count wurde zu :name.|[2,*] Mitglied :count wurde zu :name.',\n        ],\n        'destroy'       => [\n            'success'   => 'Mitglied aus Organisation entfernt.',\n        ],\n        'edit'          => [\n            'helper'    => 'Ändere den Mitgliedsstatus für :name.',\n            'title'     => 'Aktualisiere Mitglied für :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Vorgesetzter',\n            'pinned'    => 'gepinned',\n            'role'      => 'Rolle',\n            'status'    => 'Mitgliedsstatus',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Alle Charaktere, die Mitglieder dieser Organisation und ihrer Unterorganisationen sind.',\n            'members'       => 'Alle Charaktere, die Mitglieder dieser Organisation sind.',\n            'pinned'        => 'Wählen Sie aus, ob dieses Mitglied im angehefteten Abschnitt der Übersicht der zugehörigen Objekten angezeigt werden soll.',\n        ],\n        'pinned'        => [\n            'both'  => 'beide',\n            'none'  => 'keiner',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Wer ist der Vorgesetzte dieses Mitglieds?',\n            'role'      => 'Anführer, Mitglied, Hoher Septon, Meisterspion',\n        ],\n        'status'        => [\n            'active'    => 'aktive Mitglieder',\n            'inactive'  => 'inaktive Mitglieder',\n            'unknown'   => 'unbekannter Status',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'Kult, Gang, Rebellion, Anhängerschaft',\n    ],\n    'quests'        => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/de/pagination.php",
    "content": "<?php\n\nreturn [\n    'next'      => 'Nächste »',\n    'previous'  => '« Vorherige',\n];\n"
  },
  {
    "path": "lang/de/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Es gab Probleme mit deiner Eingabe.',\n        'title'         => 'Hoppla!',\n    ],\n];\n"
  },
  {
    "path": "lang/de/passwords.php",
    "content": "<?php\n\nreturn [\n    'password'  => 'Passwort muss mindestens 6 Zeichen lang sein und mit der Bestätigung übereinstimmen',\n    'reset'     => 'Dein Passwort wurde zurückgesetzet!',\n    'sent'      => 'Wir haben dir einen Rücksetzungslink zugeschickt!',\n    'token'     => 'Dieser Rücksetztoken ist ungültig.',\n    'user'      => 'Wir können leider keinen NUtzer mit der Email Adresse finden.',\n];\n"
  },
  {
    "path": "lang/de/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elementar',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Lindwurm',\n    ],\n];\n"
  },
  {
    "path": "lang/de/permissions.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'delete'    => 'Erlaubnis zum Löschen dieses Elements',\n        'edit'      => 'Erlaubnis, dieses Element zu bearbeiten',\n        'view'      => 'Erlaubnis zur Ansicht dieses Elements',\n    ],\n    'members'   => [\n        'inherited' => ':member kann dies bereits tun, indem es Teil der :role-Rolle ist.',\n    ],\n    'roles'     => [\n        'inherited' => 'Die :role-Rolle kann dies bereits für das gesamte :module-Modul tun.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/pins.php",
    "content": "<?php\n\nreturn [\n    'learn-more'    => 'Erfahre mehr über Pins in unserer Dokumentation.',\n    'options'       => [\n        'no'    => 'nicht mehr angeheftet',\n        'yes'   => 'Angeheftet an die Übersichtsseite des Objekts',\n    ],\n];\n"
  },
  {
    "path": "lang/de/post_layouts.php",
    "content": "<?php\n\nreturn [\n    'character_orgs'        => 'Charakterorganisationen',\n    'connection_map'        => 'Verbindungskarte',\n    'helper'                => 'Dieser Beitrag ist so eingerichtet, dass er die :subpage-Unterseite des Objekts anzeigt.',\n    'location_characters'   => 'Standortzeichen',\n    'location_events'       => 'Veranstaltungen am Standort',\n    'location_quests'       => 'Standort-Quests',\n    'pitch'                 => [\n        'custom'    => 'Zeige Inhalte aus den Unterseiten dieses Objekts direkt in der Übersicht mit Beitrags-Layouts an. Zeige beispielsweise das Inventar von :entity an.',\n        'title'     => 'Erweiterte Post-Layouts',\n    ],\n    'premium'               => 'Einige Layout-Optionen sind deaktiviert, da sie eine Premium-Kampagne erfordern.',\n    'quest_elements'        => 'Quest Elemente',\n];\n"
  },
  {
    "path": "lang/de/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Neuer Post',\n    ],\n    'fields'        => [\n        'name'  => 'Name',\n    ],\n    'helpers'       => [\n        'new'   => 'Füge einen neuen Beitrag zu diesem Objekt hinzu.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Name des Posts',\n    ],\n    'position'      => [\n        'dont_change'   => 'Nicht verändern',\n        'first'         => 'Erster',\n        'last'          => 'Letzter',\n    ],\n];\n"
  },
  {
    "path": "lang/de/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Erstelle eine Vorlage',\n    ],\n    'create'        => [\n        'success'   => 'Vorlage :name erstellt',\n        'title'     => 'Neue Vorlage',\n    ],\n    'destroy'       => [\n        'success'   => 'Vorlage :name gelöscht',\n    ],\n    'edit'          => [\n        'success'   => 'Vorlage :name geändert',\n        'title'     => 'Ändere Vorlage :name',\n    ],\n    'fields'        => [\n        'name'  => 'Volagenname',\n    ],\n    'lists'         => [\n        'empty' => 'Derzeit sind keine Vorlage in der Kampagne verfügbar.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Der Name der Vorlage',\n    ],\n];\n"
  },
  {
    "path": "lang/de/profiles.php",
    "content": "<?php\n\nreturn [\n    'appearance'                    => [],\n    'avatar'                        => [\n        'success'   => 'Avatar aktualisiert.',\n    ],\n    'campaign_switcher_order_by'    => [],\n    'edit'                          => [\n        'success'   => 'Profil aktualisert',\n    ],\n    'editors'                       => [],\n    'fields'                        => [\n        'avatar'                    => 'Avatar',\n        'bio'                       => 'Biografie',\n        'email'                     => 'Email',\n        'hide_subscription'         => 'Verstecke meinen Namen in der :hall_of_fame',\n        'last_login_share'          => 'Teile mit anderen Kampagnenmitgliedern, wann ich mich zuletzt angemeldet habe.',\n        'login_sharing'             => 'Letzte Login-Freigabe',\n        'name'                      => 'Name',\n        'new_password'              => 'Neues Passwort (optional)',\n        'new_password_confirmation' => 'Neues Passwort bestätigen',\n        'newsletter'                => 'Ich würde gern manchmal per Email kontaktiert werden.',\n        'password'                  => 'Aktuelles Passwort',\n        'profile-name'              => 'Profilname',\n        'settings'                  => 'Einstellungen',\n        'subscription_hiding'       => 'Abonnement versteckt',\n        'theme'                     => 'Theme',\n    ],\n    'helpers'                       => [\n        'profile-name'  => 'Ändere die Art und Weise, wie dein Name in deinem :profile und dem :marketplace erscheint. Wenn du das Feld leer lässt, wird stattdessen dein Kontoname verwendet.',\n    ],\n    'newsletter'                    => [\n        'helpers'   => [\n            'header'    => 'Abonnieren Sie die folgenden E-Mail-Newsletter, um über Kanka informiert zu werden.',\n        ],\n        'options'   => [\n            'monthly'   => 'Kanka Newsletter',\n        ],\n        'title'     => 'Newsletter',\n        'updated'   => 'Newsletter-Einstellungen aktualisiert.',\n    ],\n    'password'                      => [\n        'success'   => 'Passwort aktualisiert',\n    ],\n    'placeholders'                  => [\n        'bio'                       => 'Eine kurze Biografie von Ihnen, die in Ihrem öffentlichen Profil angezeigt wird.',\n        'email'                     => 'Deine Email Adresse',\n        'name'                      => 'Dein Name, wie er dargestellt wird',\n        'new_password'              => 'Dein neues Passwort',\n        'new_password_confirmation' => 'Bestätige dein neues Passwort',\n        'password'                  => 'Gib dein aktuelles Passwort für Änderungen ein',\n    ],\n    'sections'                      => [\n        'dangerzone'    => 'Gefahrenzone',\n        'delete'        => [\n            'confirm'       => 'Ja, lösche meinen Account',\n            'delete'        => 'Lösche meinen Account',\n            'goodbye'       => 'Wenn ja, schreiben Sie bitte :code in das Feld unten.',\n            'helper'        => 'Durch das Löschen Ihres Kontos werden auch alle Kampagnen gelöscht, bei denen Sie das einzige Mitglied sind. Diese Aktion ist permanent und kann nicht rückgängig gemacht werden.',\n            'subscribed'    => 'Bitte kündige dein :subscription , bevor du dein Konto löschst.',\n            'title'         => 'Lösche deinen Account',\n            'warning'       => 'Wenn du deinen Account löschst, werden alle Daten gelöscht. Bist du sicher?',\n        ],\n        'password'      => [\n            'title' => 'Ändere dein Passwort',\n        ],\n    ],\n    'settings'                      => [\n        'helpers'   => [\n            'bio'       => 'Die Biografie ist auf Ihrem :link sichtbar.',\n            'profile'   => 'öffentliches Profil',\n        ],\n        'success'   => 'Einstellungen geändert.',\n    ],\n    'theme'                         => [\n        'success'   => 'Theme geändert.',\n        'themes'    => [\n            'dark'      => 'Dunkel',\n            'default'   => 'Standard',\n            'future'    => 'Zukunft',\n            'midnight'  => 'Mitternacht Blau',\n        ],\n    ],\n    'title'                         => 'Aktualisiere dein Profil',\n    'workflows'                     => [\n        'created'   => 'Gehe zum erstellten Objekt',\n        'default'   => 'Liste der Objekte',\n    ],\n];\n"
  },
  {
    "path": "lang/de/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Erstelle einen neuen Quest',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'elements'      => [\n        'create'    => [\n            'success'   => 'Objekt :entity zur Quest hinzugefügt',\n            'title'     => 'Neues Element für :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Quest Element :entity entfernt',\n        ],\n        'edit'      => [\n            'success'   => 'Quest Element :entity aktualisiert',\n            'title'     => 'Questelement für aktualisieren :name',\n        ],\n        'fields'    => [\n            'entity_or_name'    => 'Wählen Sie entweder ein Objekt der Kampagne aus oder geben Sie diesem Element einen Namen.',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Kopiere Elemente, die an die Queste angehängt sind',\n        'date'          => 'Datum',\n        'element_role'  => 'Rolle',\n        'instigator'    => 'Impulsgeber',\n        'is_completed'  => 'Abgeschlossen',\n        'location'      => 'Startpunkt',\n        'role'          => 'Rolle',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'Wählen Sie aus, ob die Quest als abgeschlossen gilt.',\n    ],\n    'hints'         => [],\n    'index'         => [],\n    'items'         => [],\n    'lists'         => [\n        'empty' => 'Erstelle Quests, um Ziele, Handlungsstränge oder Charaktermotivationen festzuhalten.',\n    ],\n    'locations'     => [],\n    'organisations' => [],\n    'placeholders'  => [\n        'date'      => 'Reales Datum der Quest',\n        'entity'    => 'Name eines Elements aus der Quest',\n        'location'  => 'Der Startpunkt der Suche',\n        'role'      => 'Die Rolle des Objekts in der Quest',\n        'type'      => 'Charakterentwicklung, Sidequest, Hauptquest',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Element hinzufügen',\n        ],\n        'tabs'      => [\n            'elements'  => 'Elemente',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Neue Spezies',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'members'   => 'Mitglieder',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Diese Rasse ist ausgestorben.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Definiere die Arten, Kulturen oder Völker, die deine Welt bevölkern.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Füge ein oder mehrere Charaktere zu :name hinzu.',\n            'submit'    => 'Mitlgied hinzufügen',\n            'success'   => '{0} Kein Mitglied wurde hinzugefügt.|{1} 1 Mitglied wurde hinzugefügt.|[2,*] :count Mitglieder wurden hinzugefügt.',\n            'title'     => 'Neue Mitglieder',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Mensch, Fee, Borg',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/de/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Deine Sitzung ist ausgelaufen. Bitte erneut versuchen.',\n    'unknown_entity'    => 'Entschuldige, wir wissen nicht was :entity ist',\n];\n"
  },
  {
    "path": "lang/de/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Event',\n        'livestream'    => 'Livestream',\n        'other'         => 'Andere',\n        'release'       => 'Veröffentlichung',\n        'vote'          => 'Community Abstimmung',\n    ],\n    'index'         => [\n        'description'   => 'Die letzten Neuigkeiten zu kanka.io',\n        'title'         => 'Versionen',\n    ],\n    'post'          => [\n        'footer'    => 'Von :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Zurück zu den Versionen',\n        'title'     => 'Version :name',\n    ],\n];\n"
  },
  {
    "path": "lang/de/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chroniken der Dunkelheit',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/de/search/fulltext.php",
    "content": "<?php\n\nreturn [\n    'searching' => 'Suche nach Objekten, Beiträgen, Attributen und mehr nach dem Begriff :term.',\n    'title'     => 'Volltextsuche',\n];\n"
  },
  {
    "path": "lang/de/search.php",
    "content": "<?php\n\nreturn [\n    'fulltext'      => 'Überall suchen',\n    'lookup'        => [\n        'empty'     => 'keine Ergebnisse',\n        'hint'      => 'Gib mindestens 3 Buchstaben ein, um nach Objekten in der Kampagne zu suchen.',\n        'keyboard'  => 'Drücke :k zum Suchen, :esc zum Verwerfen',\n        'recents'   => 'Letzte',\n        'results'   => 'Ergebnisse',\n    ],\n    'no_results'    => 'Keine Ergebnisse.',\n    'placeholder'   => 'SUCHE',\n    'preview'       => [\n        'links'             => 'Links',\n        'no-connections'    => 'Keine angehefteten Beziehungen zum Anzeigen',\n    ],\n    'title'         => 'Suchen',\n];\n"
  },
  {
    "path": "lang/de/seo.php",
    "content": "<?php\n\nreturn [\n    'dashboard'     => 'Dashboard von :campaign',\n    'entity-list'   => 'Erkunde das  :module von :campaign',\n];\n"
  },
  {
    "path": "lang/de/settings/account.php",
    "content": "<?php\n\nreturn [\n    'subtitle'  => 'Kontrolliere deine E-Mail-, Passwort-, Sicherheits- und andere Kontoeinstellungen.',\n    'title'     => 'Konto-Informationen',\n];\n"
  },
  {
    "path": "lang/de/settings/appearance.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'learn-more'    => 'Erfahre mehr über diese Einstellung in unserer Dokumentation.',\n        'save'          => 'Einstellungen speichern',\n    ],\n    'campaign-switcher' => [\n        'alphabetical'      => 'Alphabetisch (A-Z)',\n        'date_created'      => 'Erstellungsdatum (älteste zuerst)',\n        'date_joined'       => 'Beitrittsdatum (älteste zuerst)',\n        'r_alphabetical'    => 'Alphabetisch (A-Z)',\n        'r_date_created'    => 'Erstellungsdatum (älteste zuerst)',\n        'r_date_joined'     => 'Beitrittsdatum (älteste zuerst)',\n    ],\n    'dismissible'       => [\n        'main'  => 'Kontrolliere, wie Kanka aussieht und sich anfühlt. Bitte beachte, dass Kampagnen einige dieser Einstellungen überschreiben können.',\n    ],\n    'editors'           => [\n        'default'   => 'Standard (:name)',\n        'legacy'    => 'Vermächtnis (:name)',\n    ],\n    'explore'           => [\n        'grid'  => 'Raster (Standard)',\n        'table' => 'Tabelle',\n    ],\n    'fields'            => [\n        'campaign-order'        => 'Reihenfolge der Kampagnenliste',\n        'date-format'           => 'Datumsformatierung',\n        'editor'                => 'Texteditor',\n        'entity-explore'        => 'Objektlisten',\n        'mentions'              => 'Erwähnungen beim Bearbeiten',\n        'new-entity-workflow'   => 'Neuer Objektworkflow',\n        'pagination'            => 'Ergebnisse pro Seite',\n        'theme'                 => 'Theme-Präferenz',\n    ],\n    'helpers'           => [\n        'advanced-mentions'     => 'Steuere beim Bearbeiten von Texten, ob Erwähnungen als Name des Objekts oder als erweiterte Erwähnung wiedergegeben werden.',\n        'campaign-order'        => 'Ändere die Reihenfolge, in der Kampagnen im Kampagnenwechsler aufgelistet werden.',\n        'date-format'           => 'Wenn verfügbar, steuere das Format, in dem reale Daten angezeigt werden sollen.',\n        'entity-explore'        => 'Steuer die Art und Weise, wie Objektlisten in Kampagnen angezeigt werden.',\n        'new-entity-workflow'   => 'Steuer, zu welcher Schnittstelle du weitergeleitet wirst, nachdem du ein neues Objekt erstellt hast.',\n        'overridable'           => 'Einzelne Kampagnen können diese Einstellung überschreiben.',\n        'pagination'            => 'Definiere für Listen, die sich über mehrere Seiten erstrecken, wie viele auf jeder Seite sichtbar sind.',\n        'theme'                 => 'Wähle aus, wie Kanka für dich aussieht.',\n    ],\n    'mentions'          => [\n        'advanced'  => 'Erweiterte Erwähnungen anzeigen :code',\n        'default'   => 'Erwähnungen als Objektname',\n    ],\n    'nested'            => [],\n    'success'           => 'Darstellungsoptionen gespeichert.',\n    'values'            => [\n        'pagination'        => ':amount Ergebnisse pro Seite',\n        'pagination-sub'    => ':amount (verfügbar für Abonnenten)',\n    ],\n];\n"
  },
  {
    "path": "lang/de/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'boost_name'    => 'Boost :name',\n    ],\n    'available' => 'Verfügbare Booster :amount/:total',\n    'benefits'  => [\n        'boosted'       => 'Durch das Boosten einer Kampagne mit :one Booster werden der Zugriff auf den :marketplace, Themenoptionen, größere Uploads für alle Mitglieder, die Wiederherstellung gelöschter Objekte und :more freigeschaltet.',\n        'more'          => 'weitere erstaunliche Funktionen',\n        'superboosted'  => 'Durch das Superboosten einer Kampagne mit :amount-Boostern werden alle Vorteile einer Booster-Kampagne freigeschaltet, sowie eine Kampagnengalerie, vollständige Protokolländerungen an Objekten und :more.',\n    ],\n    'boost'     => [\n        'actions'   => [\n            'confirm'   => 'Booste es!',\n            'remove'    => 'Stoppe boosten von :campaign',\n            'subscribe' => 'Kanka abonnieren',\n            'upgrade'   => 'Aktualisieren Sie Ihr Abonnement',\n        ],\n        'confirm'   => 'Wie aufregend! Du bist dabei, :campaign zu verstärken. Dadurch wird einer (:Kosten) deiner verfügbaren Kampagnen-Booster zugewiesen.',\n        'duration'  => 'Zugewiesene Booster bleiben zugewiesen, bis du sie manuell entfernst oder dein Abonnement endet.',\n        'errors'    => [\n            'boosted'           => 'Oh oh, sieht so aus, als ob die Kampagne bereits geboosted wurde!',\n            'out-of-boosters'   => 'Ach nein! Du hast nicht genügend Booster zur Verfügung. Du hast :available und benötigen :cost. Beende entweder das Boosten anderer Kampagnen oder führe ein Upgrade durch.',\n        ],\n        'pitch'     => 'Werde Abonnent, um Kampagnen-Booster freizuschalten.',\n        'success'   => 'Die :campaign Kampagne wird jetzt geboostet. Genieße all die neuen fantastischen Funktionen!',\n        'title'     => 'Boost :campaign',\n        'upgrade'   => 'Aktualisieren Sie Ihr Abonnement',\n    ],\n    'campaign'  => [\n        'boosted'       => 'Geboostet von :user seid :time',\n        'premium'       => 'Premium danke an :user seit :time',\n        'standard'      => 'Standard',\n        'superboosted'  => 'Supergeboostet von :user seid :time',\n        'unboosted'     => 'boosten beenden',\n    ],\n    'intro'     => [\n        'anyone'    => 'Du bist nicht darauf beschränkt, nur von dir erstellte Kampagnen zu fördern. Du kannst jede Kampagne fördern, an der du teilnimmst oder die du sehen kannst. Dazu gehören Kampagnen, bei denen du ein Spieler bist, oder :public, die dir Spaß machen.',\n        'data'      => 'Wenn eine Kampagne nicht mehr geboostet wird, wird der Zugriff auf geboosterte Funktionen entfernt. Es werden jedoch keine Inhalte gelöscht, sodass der Zugriff auf die Kampagne in der Zukunft wiederhergestellt wird.',\n        'first'     => 'Erweiterte Funktionen werden freigeschaltet, indem du deine Booster einer Kampagne Boosten oder Superboosten zuweist. Die Anzahl der Booster, die du hast, wird durch dein :Abonnement bestimmt. Diese Nummer steht dir als Abonnent jederzeit zur Verfügung. Das Boosten einer Kampagne weist du einen deiner Booster zu, während das Superboosten einer Kampagne drei davon zuweist.',\n    ],\n    'pitch'     => [\n        'benefits'      => [\n            'backup'        => 'Stelle eine zuvor gelöschtest Objekt für bis zu :amount Tage wieder her',\n            'customisable'  => 'Vollständige Anpassung des Aussehens einer Kampagne',\n            'icons'         => 'Zugriff auf Tausende schöner Symbole für Karten und Zeileisten',\n            'title'         => 'Geboostete Kampagnen erhalten',\n            'upload'        => 'Größere Upload-Größe für alle Kampagnenmitglieder',\n        ],\n        'description'   => 'Weise Kampagnen Booster zu und helfe dabei, erstaunliche Funktionen für alle Beteiligten freizuschalten. Nicht beeindruckt von geboosteten Kampagnen? Wir haben Sie mit supergeboosteten Kampagnen abgedeckt!',\n        'more'          => 'Sehe dir die vollständige Liste der Vergünstigungen auf unserer :Booster-Seite an.',\n        'title'         => 'Bringe eine Kampagne mit Anpassungen und Vorteilen für alle Mitglieder auf die nächste Stufe',\n    ],\n    'ready'     => [\n        'available'         => 'Deine verfügbaren Kampagnen-Booster.',\n        'pricing'           => 'Alle deine Abonnementstufen beinhalten mindestens einen Kampagnen-Booster und einen Startbetrag pro Monat.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Booste Kampagne',\n    ],\n    'superboost'=> [\n        'actions'   => [\n            'confirm'   => 'Superbooste es!',\n            'instead'   => 'Superboost es für :count!',\n            'remove'    => 'Stoppe superboosten :campaign',\n        ],\n        'confirm'   => 'Wie aufregend! Du bist dabei, :campaign zu superboosten. Dadurch werden drei (:Kosten) deiner verfügbaren Kampagnen-Booster zugewiesen.',\n        'errors'    => [\n            'boosted'   => 'Oh oh, sieht so aus, als ob :campaign bereits superboosted ist!',\n        ],\n        'success'   => 'Die :campaign Kampagne ist jetzt supergeboostet. Genieße all die neuen fantastischen Funktionen!',\n        'title'     => 'Superboost :campaign',\n        'upgrade'   => 'Bereit für das ultimative Kanka-Erlebnis? Superboosting :campaign weist :cost zusätzliche Kampagnen-Booster zu.',\n    ],\n    'title'     => 'Kampagnen-Booster',\n    'unboost'   => [\n        'confirm'   => 'Ja, ich bin sicher',\n        'status'    => [\n            'boosting'      => 'boosting',\n            'superboosting' => 'superboosting',\n        ],\n        'success'   => 'Die :campaign Kampagne wird nicht länger geboostet, und ihre Booster sind wieder verfügbar',\n        'title'     => 'boosten der Kampagne beenden',\n        'warning'   => 'Möchtest du :action :campaign wirklich beenden? Dadurch werden deine zugewiesenen Booster freigegeben und alle Inhalte und Funktionen im Zusammenhang mit den Vorteilen ausgeblendet, bis die Kampagne erneut geboostet wird.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/settings/premium.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'remove'    => 'Premium entfernen',\n        'unlock'    => 'Premium gehen',\n    ],\n    'create'        => [\n        'actions'       => [\n            'confirm'   => 'Premium gehen!',\n        ],\n        'confirm'       => 'Wie aufregend! Du bist dabei, Premium-Funktionen für :campaign freizuschalten. Dies wird eine deiner verfügbaren Premium-Kampagnen verwenden.',\n        'duration'      => 'Premium-Kampagnen bleiben in diesem Zustand, bis Du sie manuell entfernst oder Ihr Abonnement endet.',\n        'pitch_2026'    => 'Erhalte unbegrenzte Rollen, Mitglieder, benutzerdefinierte Designs, Plugins und vieles mehr für deine Kampagnen.',\n        'success'       => 'Die :campaign Kampagne ist jetzt Premium. Genieße all die neuen, fantastischen Funktionen!',\n    ],\n    'exceptions'    => [\n        'already'       => 'Für diese Kampagne wurden bereits Premium-Funktionen freigeschaltet.',\n        'out-of-stock'  => 'Du hast nicht genügend Premium-Kampagnen zur Verfügung, um diese Kampagne freizuschalten. Entweder entfernst du den Premium-Status von einer anderen Kampagne oder :upgrade.',\n    ],\n    'pitch'         => [\n        'description'   => 'Erwerbe Premium-Kampagnen und hilf, erstaunliche Funktionen für alle Beteiligten freizuschalten.',\n        'title'         => 'Premium-Kampagnen erhalten',\n    ],\n    'ready'         => [\n        'available'         => 'Ihre verfügbaren Premium-Kampagnen.',\n        'pricing'           => 'Alle unsere Abo-Stufen beinhalten mindestens eine Premium-Kampagne und beginnen mit :Betrag pro Monat.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Premium gehen',\n    ],\n    'remove'        => [\n        'confirm'   => 'Ja, ich bin mir sicher',\n        'cooldown'  => 'Die Premium-Features aus der :campaign können nach dem :date entfernt werden.',\n        'success'   => 'Die Premiumfunktionen wurden aus der Kampagne :campaign entfernt. Du kannst jetzt Premium-Funktionen in einer anderen Kampagne freischalten.',\n        'title'     => 'Entfernen von Premiumfunktionen',\n        'warning'   => 'Bist du sicher, dass du die Premium-Funktionen von :campaign entfernen möchtest? Dadurch kannst du eine andere Kampagne freischalten und alle Inhalte und Funktionen im Zusammenhang mit den Vergünstigungen ausblenden, bis der Premium-Status der Kampagne wieder aktiviert ist.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'               => [\n                'disable'           => 'Zwei-Faktor authentifizierung deaktivieren',\n                'disable-confirm'   => 'Zum Bestätigen erneut klicken',\n                'finish'            => 'Beende die Einrichtung und melde dich an',\n            ],\n            'activation_helper'     => 'Um die Einrichtung der Zwei-Faktor-Authentifizierung deines Kontos abzuschließen, befolge bitte diese Anweisungen.',\n            'disable'               => [\n                'helper'    => 'Wenn du die Zwei-Faktor-Authentifizierung deaktivieren möchtest, klicke auf die Schaltfläche unten. Denke daran, dass dein Konto dadurch für jeden angreifbar wird, der deine Anmeldeinformationen kennt.',\n                'title'     => 'Zwei-Faktor-Authentifizierung deaktivieren',\n            ],\n            'enable_instructions'   => 'Um den Aktivierungsprozess zu starten, generiere deinen Authentifizierungs-QR-Code und scanne ihn dann in die Google Authenticator-App (:ios, :android) oder eine andere ähnliche Authentifizierungs-App.',\n            'enabled'               => 'Die Zwei-Faktor-Authentifizierung ist derzeit für dein Konto aktiviert.',\n            'error_enable'          => 'Ungültiger Code, versuche es erneut',\n            'fields'                => [\n                'otp'       => 'Gib das One Time Password (OTP) ein, das von der Authentifizierungs-App bereitgestellt wird',\n                'qrcode'    => 'Scanne den folgenden QR-Code mit deiner Authentifizierungs-App, um ein One Time Password (OTP) zu generieren.',\n            ],\n            'generate_qr'           => 'QR Code generieren',\n            'helper'                => 'Die Zwei-Faktor-Authentifizierung (2FA) stärkt die Zugriffssicherheit, indem zwei Methoden (auch als Faktoren bezeichnet) erforderlich sind, um deine Identität bei jeder Anmeldung zu überprüfen.',\n            'learn_more'            => 'Erfahre mehr über die Zwei-Faktor-Authentifizierung.',\n            'social'                => 'Die Kanka-Zwei-Faktor-Authentifizierung ist nur für Benutzer aktiviert, die sich mit ihrer E-Mail-Adresse und ihrem Passwort anmelden. Ändere deine Anmeldemethode in deinen Kontoeinstellungen, bevor du diese Option aktivieren kannst.',\n            'success_disable'       => 'Zwei-Faktor-Authentifizierung erfolgreich deaktiviert',\n            'success_enable'        => 'Zwei-Faktor-Authentifizierung erfolgreich aktiviert. Bitte melde dich erneut an, um die Einrichtung abzuschließen.',\n            'success_key'           => 'Dein sicherer QR-Code wurde erfolgreich generiert. Bitte schließe deine Einrichtung ab, um die Zwei-Faktor-Authentifizierung zu aktivieren.',\n            'title'                 => 'Zwei-Faktor-Authentifizierung',\n        ],\n        'actions'           => [\n            'social'            => 'Zu Kanka Login wechseln',\n            'update_email'      => 'Email aktualisieren',\n            'update_password'   => 'Passwort aktualisieren',\n        ],\n        'email'             => 'Email ändern',\n        'email_success'     => 'Email aktualisiert.',\n        'password'          => 'Passwort ändern',\n        'password_success'  => 'Passwort aktualisiert.',\n        'social'            => [\n            'error'     => 'Du benutzt bereits das Kanka Login für dieses Konto.',\n            'helper'    => 'Dein Konto ist momentan von :provider. Du kannst aufhören dieses zu benutzen und auf ein Standard Kanka Login wechseln, indem du ein Kennwort setzt.',\n            'success'   => 'Dein Konto benutzt jetzt das Kanka Login.',\n            'title'     => 'Social Konto',\n        ],\n        'title'             => 'Account',\n    ],\n    'api'           => [\n        'helper'    => 'Willkommen bei den Kanka APIs. Generieren Sie ein persönliches Zugriffstoken, das Sie in Ihrer API-Anfrage verwenden können, um Informationen zu den Kampagnen zu sammeln, an denen Sie beteiligt sind.',\n        'link'      => 'Lies die API Dokumentation',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Verbinden',\n            'remove'    => 'Entfernen',\n        ],\n        'benefits'  => 'Kanka bietet einige Integrationsmöglichkeiten für Dienste von Drittanbietern. Weitere Integrationen von Drittanbietern sind für die Zukunft geplant.',\n        'discord'   => [\n            'confirm'   => 'Möchtest du dein Konto wirklich von Discord trennen? Dadurch werden alle Rollen entfernt, mit denen du synchronisiert wurdest.',\n            'errors'    => [\n                'add'   => 'Beim Verknüpfen Ihres Discord-Kontos mit Kanka ist ein Fehler aufgetreten. Bitte versuche es erneut.',\n            ],\n            'success'   => [\n                'add'       => 'Ihr Discord-Konto wurde verknüpft.',\n                'remove'    => 'Ihr Discord-Konto wurde nicht verbunden.',\n            ],\n            'text'      => 'Greifen Sie automatisch auf Ihre Abonnementrollen zu.',\n            'unlock'    => 'Schalte Discord-Rollen frei',\n        ],\n        'title'     => 'App Integration',\n    ],\n    'billing'       => [\n        'placeholder'   => 'Wenn du deinen Belegen zusätzliche Kontakt- oder Steuerinformationen hinzufügen möchtest (Firmenadresse, Umsatzsteuer-Identifikationsnummer usw.), gib diese unten ein und sie erscheinen auf allen deinen Belegen.',\n        'save'          => 'Zahlungsinformationen speichern',\n        'title'         => 'Zahlungsinformationen',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'Kampagne :name ist bereits geboostet',\n            'exhausted_boosts'      => 'Sie haben keine Boosts mehr zu geben. Entfernen Sie Ihren Boost aus einer Kampagne, bevor Sie ihn einer anderen geben.',\n            'exhausted_superboosts' => 'Sie haben keine Boosts mehr. Sie benötigen 3 Booster, um eine Kampagne zu boosten.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Österreich',\n        'belgium'       => 'Belgien',\n        'france'        => 'Frankreich',\n        'germany'       => 'Deutschland',\n        'italy'         => 'Italien',\n        'netherlands'   => 'Niederlande',\n        'spain'         => 'Spanien',\n    ],\n    'invoices'      => [],\n    'layout'        => [\n        'title' => 'Layout',\n    ],\n    'marketplace'   => [],\n    'menu'          => [\n        'account'               => 'Account',\n        'api'                   => 'API',\n        'appearance'            => 'Aussehen',\n        'apps'                  => 'Apps',\n        'boosters'              => 'Booster',\n        'notifications'         => 'Benachrichtigungen',\n        'other'                 => 'Andere',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Zahlungsmöglichkeiten',\n        'personal_settings'     => 'Persönliche Einstellungen',\n        'premium'               => 'Premiumkampagnen',\n        'profile'               => 'Profil',\n        'settings'              => 'Einstellungen',\n        'subscription'          => 'Abonnement',\n        'subscription_status'   => 'Abonnement Status',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Veraltete Funktion - Wenn Sie Kanka unterstützen möchten, tun Sie dies bitte mit einem :subscription. Die Patreon-Verknüpfung ist weiterhin für unsere Benutzer aktiv, die ihr Konto vor dem Umzug von Patreon verknüpft haben.',\n        'pledge'        => 'Pledge :name',\n        'remove'        => [\n            'button'    => 'Trennen Sie die Verknüpfung Ihres Patreon-Kontos',\n            'success'   => 'Ihr Patreon-Konto wurde getrennt.',\n            'text'      => 'Wenn Sie die Verknüpfung Ihres Patreon-Kontos mit Kanka aufheben, werden Ihre Boni, Ihr Name in der Hall of Fame, Kampagnen-Boosts und andere Funktionen im Zusammenhang mit der Unterstützung von Kanka entfernt. Keiner Ihrer verstärkten Inhalte geht verloren (z. B. Objekt header). Wenn Sie sich erneut anmelden, haben Sie Zugriff auf alle Ihre vorherigen Daten, einschließlich der Möglichkeit, Ihre zuvor verstärkten Kampagnen zu boosten.',\n            'title'     => 'Trennen Sie Ihr Patreon-Konto von Kanka',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Aktualisiere dein Profil',\n        ],\n        'avatar'    => 'Profilbild',\n        'success'   => 'Profil aktualisiert.',\n        'title'     => 'Persönliches Profil',\n    ],\n    'referrals'     => [\n        'title' => 'Empfehlungen',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Abonnement beenden',\n            'subscribe'         => 'Abonnieren',\n            'update_currency'   => 'Speichern Sie die bevorzugte Währung',\n        ],\n        'billing'               => [\n            'helper'    => 'Ihre Zahlungsinformationen werden sicher verarbeitet und gespeichert durch :stripe. Diese Zahlungsmethode wird für alle Ihre Abonnements verwendet.',\n            'saved'     => 'Gespeicherte Zahlungsmethode',\n        ],\n        'cancel'                => [\n            'grace'     => [\n                'text'  => 'Dein Abonnement ist bereits so eingestellt, dass es am :Datum endet. Danach wird deine Premium-Kampagnen wieder zu Standard-Kampagnen und andere Vorteile, die mit der Unterstützung von Kanka verbunden sind, werden deaktiviert.',\n                'title' => 'Karenzzeit',\n            ],\n            'options'   => [\n                'competitor'        => 'Wechsel zu einem Wettbewerber',\n                'financial'         => 'Finanzielle Situation verändert',\n                'missing_features'  => 'Fehlende Funktionen',\n                'not_for'           => 'Abo ist nichts für mich',\n                'not_playing'       => 'Nicht mehr spielen oder die Kampagne macht eine Pause',\n                'not_using'         => 'Kanka wird derzeit nicht verwendet',\n                'other'             => 'Andere',\n                'testing'           => 'teste kanka',\n            ],\n            'text'      => 'Es tut uns leid dich gehen zu sehen! Wenn Sie Ihr Abonnement kündigen, bleibt es bis zu Ihrem nächsten Abrechnungszyklus aktiv. Danach verlieren Sie Ihre Kampagnen-Boosts und andere Vorteile im Zusammenhang mit der Unterstützung von Kanka. Füllen Sie das folgende Formular aus, um uns mitzuteilen, was wir besser machen können oder was zu Ihrer Entscheidung geführt hat.',\n            'title'     => 'Abonnement kündigen',\n        ],\n        'cancelled'             => 'Ihr Abonnement wurde gekündigt. Sie können ein Abonnement verlängern, sobald Ihr aktuelles Abonnement endet.',\n        'change'                => [\n            'text'  => [\n                'downgrade_monthly' => 'Du stufst dein Konto auf die Stufe :tier für :downgrade herunter, danach wird dir monatlich ein Betrag in Höhe von :amount in Rechnung gestellt.',\n                'downgrade_yearly'  => 'Du stufst dein Konto auf die Stufe :tier für :downgrade herunter, danach wird dir jährlich ein Betrag in Höhe von :amount in Rechnung gestellt.',\n                'monthly'           => 'Sie abonnieren die :tier Stufe , die monatlich in Rechnung gestellt wird für :amount.',\n                'upgrade_monthly'   => 'Führe für :upgrade ein Upgrade auf die :tier Stufe durch, danach wird dir monatlich :amount in Rechnung gestellt.',\n                'upgrade_paypal'    => 'Führe für :upgrade bis :date ein Upgrade auf die :tier Stufe durch.',\n                'upgrade_yearly'    => 'Führe für :upgrade ein Upgrade auf die :tier Stufe durch, danach wird dir jährlich :amount in Rechnung gestellt.',\n                'yearly'            => 'Sie abonnieren die :tier Stufe, die jährlich in Rechnung gestellt wird für :amount.',\n            ],\n            'title' => 'Abonnementstufe ändern',\n        ],\n        'coupon'                => [\n            'check'         => 'Gutscheincode prüfen',\n            'invalid'       => 'Ungültiger Gutscheincode.',\n            'label'         => 'Promotional code',\n            'percent_off'   => 'Wir reduzieren dein erstes Jahresabonnement um :percent%!',\n        ],\n        'currencies'            => [\n            'brl'   => 'BRL',\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Ändern Sie Ihre bevorzugte Rechnungswährung',\n        ],\n        'errors'                => [\n            'callback'      => 'Unser Zahlungsanbieter hat einen Fehler gemeldet. Bitte versuchen Sie es erneut oder kontaktieren Sie uns, wenn das Problem weiterhin besteht.',\n            'failed'        => 'Wir haben derzeit Probleme mit unserem Abrechnungssystem. Bitte kontaktiere uns unter :email für Unterstützung.',\n            'subscribed'    => 'Ihr Abonnement konnte nicht verarbeitet werden. Stripe lieferte den folgenden Hinweis.',\n        ],\n        'fields'                => [\n            'active_since'      => 'aktiv seit',\n            'active_until'      => 'aktiv bis',\n            'billing'           => 'Abrechnung',\n            'currency'          => 'Abrechnungswährung',\n            'payment_method'    => 'Zahlungsmethode',\n            'plan'              => 'Derzeitiger Plan',\n            'reason'            => 'Ursache',\n            'reset'             => 'Rechnungsinformationen zurücksetzen',\n            'reset_billing'     => 'Ich bin mir bewusst, dass bei einem Währungswechsel mein Abrechnungsverlauf verloren geht und ich meine Zahlungsmethode erneut eingeben muss.',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Bezahlen Sie Ihr Abonnement mit :method. Diese Zahlungsmethode wird am Ende Ihres Abonnements nicht automatisch verlängert. :method ist nur in Euro verfügbar.',\n            'alternatives-2'        => 'Bezahle dein Abonnement mit der Methode :method. Hierbei handelt es sich um eine einmalige Zahlung, die sich am Ende des Abonnements nicht automatisch verlängert.',\n            'alternatives_warning'  => 'Ein Upgrade Ihres Abonnements mit dieser Methode ist nicht möglich. Bitte erstellen Sie ein neues Abonnement, wenn Ihr aktuelles Abonnement endet.',\n            'alternatives_yearly'   => 'Aufgrund der Einschränkungen bei wiederkehrenden Zahlungen ist die :method nur für Jahresabonnements verfügbar',\n            'currency_block'        => 'Es ist nicht möglich, die Währung zu ändern, solange Sie ein aktives Kanka-Abonnement haben. Sie können Ihre Währung ändern, sobald Ihr aktuelles Abonnement endet.',\n            'currency_reset'        => 'Wenn Sie die Währung Ihrer Wahl ändern, wird Ihr Rechnungsverlauf gelöscht und Sie müssen eine neue Zahlungsmethode eingeben.',\n            'paypal_v3'             => 'Bezahle dein Jahresabonnement sicher mit PayPal.',\n            'stripe'                => 'Deine Rechnungsinformationen werden von :stripe sicher verarbeitet und gespeichert.',\n        ],\n        'manage_subscription'   => 'Abonnement verwalten',\n        'payment_method'        => [\n            'actions'       => [\n                'add'               => 'Hinzufügen',\n                'add_new'           => 'Füge eine neue Zahlungsmethode hinzu',\n                'change'            => 'Zahlungsmethode ändern',\n                'save'              => 'Zahlungsmethode speichern',\n                'show_alternatives' => 'alternative Zahlungsoptionen',\n            ],\n            'add_one'       => 'Sie haben derzeit keine Zahlungsmethode gespeichert.',\n            'alternatives'  => 'Sie können diese alternativen Zahlungsoptionen abonnieren. Diese Aktion belastet Ihr Konto einmal und erneuert Ihr Abonnement nicht jeden Monat automatisch.',\n            'card'          => 'Karte',\n            'card_name'     => 'Name auf der Karte',\n            'country'       => 'Land des Wohnsitzes',\n            'ending'        => 'gültig bis',\n            'helper'        => 'Diese Karte wird für alle Ihre Abonnements verwendet.',\n            'new_card'      => 'Fügen sie eine neue Zahlungsmethode hinzu',\n            'saved'         => ':brand endet mit :last4',\n        ],\n        'periods'               => [\n            'monthly'   => 'Monatlich',\n            'yearly'    => 'Jährlich',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => 'Teile uns optional mit, warum du dein Abonnement herabstufst.',\n            'reason'            => 'Sagen Sie uns optional, warum Sie Kanka nicht mehr unterstützen. Fehlt eine Funktion? Hat sich Ihre finanzielle Situation geändert?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount monatlich abgerechnet',\n            'cost_yearly'   => ':currency :amount jährlich abgerechnet',\n        ],\n        'sub_status'            => 'Abonnementinformationen',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Abonnement beenden',\n                'downgrading'       => 'Bitte kontaktieren Sie uns für ein Downgrade',\n                'rollback'          => 'Wechseln Sie zu Kobold',\n                'subscribe'         => 'Wechseln Sie zu :tier monatlich',\n                'subscribe_annual'  => 'Wechseln Sie zu :tier jährlich',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Ihre Zahlung wurde registriert. Sie erhalten eine Benachrichtigung, sobald diese verarbeitet wurde und Ihr Abonnement aktiv ist.',\n            'callback'      => 'Ihr Abonnement war erfolgreich. Ihr Konto wird aktualisiert, sobald unsere Zahlung uns über die Änderung informiert (dies kann einige Minuten dauern).',\n            'currency'      => 'Ihre bevorzugte Währungseinstellung wurde aktualisiert.',\n            'subscribed'    => 'Ihr Abonnement war erfolgreich. Vergessen Sie nicht, den Community Vote-Newsletter zu abonnieren, um benachrichtigt zu werden, wenn eine Abstimmung live geht. Sie können Ihre Newsletter-Einstellungen auf Ihrer Profilseite ändern.',\n        ],\n        'tiers'                 => 'Abonnementstufen',\n        'trial_period'          => 'Für Jahresabonnements gilt eine Stornierungsfrist von 14 Tagen. Kontaktieren Sie uns unter :email, wenn Sie Ihr Jahresabonnement kündigen und eine Rückerstattung erhalten möchten.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Upgrade- und Downgrade-Informationen',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Ihre Boni bleiben bis zum Ende Ihres Zahlungszeitraums aktiviert.',\n                    'boosts'    => 'Gleiches gilt für Ihre geboosteten Kampagnen. Geboostete Funktionen werden unsichtbar, aber nicht gelöscht, wenn eine Kampagne nicht mehr geboostet wird.',\n                    'kobold'    => 'Wechseln Sie zur Kobold-Stufe, um Ihr Abonnement zu kündigen.',\n                    'premium'   => 'Das Gleiche gilt für deine Premium-Kampagnen. Premium-Funktionen werden unsichtbar, aber nicht gelöscht, wenn eine Kampagne nicht mehr über den Premium Status verfügt.',\n                ],\n                'title'     => 'Wenn Sie Ihr Abonnement kündigen',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'Ihre aktuelle Stufe bleibt bis zum Ende Ihres aktuellen Abrechnungszyklus aktiv. Danach werden Sie auf Ihre neue Stufe herabgestuft.',\n                ],\n                'provide_reason'    => 'Wenn möglich, teile uns bitte mit, warum du dein Abonnement herabstufst.',\n                'title'             => 'Beim Downgrade auf eine niedrigere Stufe',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Ihre Zahlungsmethode wird sofort in Rechnung gestellt und Sie haben Zugriff auf Ihre neue Stufe.',\n                    'prorate'   => 'Beim Upgrade von Owlbear auf Elemental wird Ihnen nur die Differenz zu Ihrer neuen Stufe in Rechnung gestellt.',\n                ],\n                'title'     => 'Beim Upgrade auf eine höhere Stufe',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'Wir konnten Ihre Kreditkarte nicht belasten. Bitte aktualisieren Sie Ihre Kreditkarteninformationen. Wir werden versuchen, sie in den nächsten Tagen erneut zu belasten. Wenn es erneut fehlschlägt, wird Ihr Abonnement gekündigt.',\n            'patreon'       => 'Ihr Konto ist derzeit mit Patreon verknüpft. Bitte trennen Sie die Verknüpfung Ihres Kontos in Ihren :patreon-Einstellungen, bevor Sie zu einem Kanka-Abonnement wechseln.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'count'             => 'Mitglied von :member',\n        'created_campaigns' => 'deine Kampagnen',\n        'follow_more'       => 'Kampagne folgen',\n        'followed_campaigns'=> 'Kampagnen denen gefolgt wird',\n        'new_campaign'      => 'Neue Kampagne',\n        'public_campaigns'  => 'öffentliche Kampagne',\n        'reorder'           => 'neu anordnen',\n        'updated'           => 'aktualisiert',\n    ],\n    'dashboard'         => 'Dashboard',\n    'entity-creator'    => 'Schnell erstellen',\n    'gallery'           => 'Galerie',\n    'game'              => 'Spiel',\n    'other'             => 'Anderes',\n    'recent'            => 'Kürzliche Änderungen',\n    'relations'         => 'Beziehungen',\n    'settings'          => 'Einstellungen',\n    'time'              => 'Zeit',\n    'world'             => 'Welt',\n];\n"
  },
  {
    "path": "lang/de/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => ':user\\'s Welt',\n    ],\n    'character1'    => [],\n    'character2'    => [],\n    'item1'         => [],\n    'kingdom1'      => [],\n    'kingdom2'      => [],\n    'name'          => ':name (Beispiel)',\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/de/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Abonnieren Sie Kanka, um größere Bild-Uploads, ein werbefreies Erlebnis, :boosters und :more freizuschalten. Wir verwenden :stripe, um alle Abrechnungen abzuwickeln, ohne dass Kreditkarteninformationen gespeichert oder über unsere Server übertragen werden.',\n        'more'  => 'weitere erstaunliche Funktionen',\n    ],\n    'errors'    => [\n        'grace'                 => 'dein aktuelles Abonnement endet am :date , danach kannst du es erneut abschließen.',\n        'invalid_card_country'  => [\n            'brl'   => 'Es tut uns leid, aber wir akzeptieren derzeit nur Zahlungen in BRL für Kunden mit brasilianischen Kreditkarten. Wenn Sie glauben, dass dies ein Fehler ist, kontaktieren Sie uns unter :email.',\n        ],\n        'invalid_currency'      => 'Du hattest zuvor ein Abonnement in :old, was dich daran hindert, ein neues Abonnement in :new zu haben. Bitte stelle deine Währung auf :old um, oder kontaktiere uns unter :email, wenn du die Währung wechseln möchtest.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'Diese Aktion ist nicht mehr aktiv.',\n        'invalid'   => 'Unbekannte Aktion.',\n        'only-new'  => 'Diese Aktion ist nur für neue Abonnenten verfügbar.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/subscriptions/renew.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'renew' => 'Abonnement verlängern',\n    ],\n    'helper'    => 'Du hast jedoch die Möglichkeit, Dein Abonnement zu verlängern, um die Vorteile ohne Unterbrechung zu nutzen.',\n    'title'     => 'Erneuerung des Abonnements',\n];\n"
  },
  {
    "path": "lang/de/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe konnte ihre fällige Zahlung nicht einfordern. Folglich wurde ihr Abonnement deaktiviert.',\n    ],\n];\n"
  },
  {
    "path": "lang/de/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'           => 'Füge neue Kategorie hinzu',\n            'add_entity'    => 'Zum Objekt hinzufügen',\n        ],\n        'create'    => [\n            'attach_success'        => '{1} :count Objekte zum Tag :name hinzugefügt.|[2,*] :count Objekte zum Tag :name hinzugefügt.',\n            'attach_success_entity' => 'Erfolgreich aktualisierte Tags für :name.',\n            'entity'                => 'Tags hinzufügen zu :name',\n            'helper'                => 'Versehe einen oder mehrere Einträge mit dem Tag :name',\n            'title'                 => 'Tag-Einträge',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Neue Kategorie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'          => 'Kinder',\n        'icon'              => 'Symbol',\n        'is_auto_applied'   => 'Automatisch auf neue Objekte anwenden',\n        'is_hidden'         => 'Ausgeblendet von Header und Tooltip',\n    ],\n    'helpers'       => [\n        'icon'          => 'Verwende Symbole aus :fontawesome oder :rpgawesome. Das Symbol wird in Listen anstelle des Tag-Namens angezeigt.',\n        'no_children'   => 'Es gibt derzeit kein Objekt, die mit diesem Tag getaggt sind.',\n        'no_posts'      => 'Derzeit gibt es keine Beiträge mit diesem Tag.',\n    ],\n    'hints'         => [\n        'children'          => 'Diese Liste enthält alle Objekte, die direkt in dieser Kategorie und allen Unterkategorien sind.',\n        'is_auto_applied'   => 'Aktiviere diese Option, um dieses Tag automatisch auf neu erstellte Objekte anzuwenden.',\n        'is_hidden'         => 'Wenn es aktiviert ist, wird dieser Tag nicht in der Kopfzeile oder QuickInfo eines Objekts angezeigt.',\n        'tag'               => 'Unten dargestellt sind alle Kategorien, die direkt unter dieser eingeordnet sind.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Verwende Tags, um Einträge in deiner Welt zu gruppieren und zu filtern, um die Navigation zu vereinfachen.',\n    ],\n    'placeholders'  => [\n        'icon'  => 'Probieren Sie :example1 oder :example2 aus',\n        'type'  => 'Überlieferung, Geschichte, Kriege, Religion, Flaggenkunde',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Kinder',\n        ],\n    ],\n    'tags'          => [],\n    'transfer'      => [\n        'entities'      => [\n            'helper'    => 'Trage Einträge, die mit dem Tag „name“ versehen sind, in ein anderes Tag über.',\n            'title'     => 'Einträge übertragen',\n        ],\n        'fail'          => 'Die Übertragung von Objekten von :tag nach :newTag ist fehlgeschlagen',\n        'fail_post'     => 'Übertragung von Beiträgen von :tag nach :newTag fehlgeschlagen',\n        'posts'         => [\n            'helper'    => 'Artikel, die mit dem Tag :name versehen sind, in einen  anderen Tag verschieben.',\n            'title'     => 'Artikel übertragen',\n        ],\n        'success'       => 'Objekte wurden erfolgreich von :tag nach :newTag übertragen',\n        'success_post'  => 'Erfolgreich Beiträge von :tag nach :newTag übertragen',\n        'transfer'      => 'übertrage',\n    ],\n];\n"
  },
  {
    "path": "lang/de/teams.php",
    "content": "<?php\n\nreturn [\n    'index'     => [\n        'lead'          => 'Worldbuilding macht Spaß und ist bewährt',\n        'translations'  => 'Übersetzungen',\n    ],\n    'leads'     => [\n        'translators'   => 'Kanka wurde dank dieser großartigen Mitwirkenden in mehrere Sprachen übersetzt.',\n    ],\n    'patreon'   => [],\n    'people'    => [\n        'itzamna'   => [\n            'title' => 'Junior-Entwickler',\n        ],\n        'jay'       => [\n            'title' => 'Gründer & Hauptentwickler',\n        ],\n        'jon'       => [\n            'title' => 'Mitbegründer & Business Manager',\n        ],\n        'kaz'       => [\n            'title' => 'Fehlerzerstörer',\n        ],\n        'laura'     => [\n            'title' => 'Sozialmedien',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscribe' => [\n            'choose'    => 'Wähle :tier',\n            'monthly'   => ':tier Monatlich',\n            'yearly'    => ':tier Jährlich',\n        ],\n    ],\n    'current'   => 'Ihr aktuelles Abonnement',\n    'features'  => [\n        'api_requests'      => ':amount API Anfrage / min',\n        'boosters'          => 'Kampagnen Booster',\n        'discord'           => 'Discord Rollen',\n        'feature_influence' => 'Einfluss neuer Funktionen',\n        'file_size'         => ':size Upload Dateigröße',\n        'nice_image'        => 'Standardobjektbilder',\n        'no_ads'            => 'keine ads',\n        'pagination'        => ':amount Max paginierte Ergebnisse',\n        'roadmap'           => 'Bewerten Sie Ideen in der Roadmap',\n    ],\n    'periods'   => [\n        'billed_monthly'    => 'monatlich abgerechnet',\n        'billed_yearly'     => 'jährlich abgerechnet',\n    ],\n    'pricing'   => ':currency :amount / monatlich',\n    'ribbons'   => [\n        'best-value'    => 'Bester Wert',\n        'current'       => 'Aktuelles Abonnement',\n    ],\n    'toggle'    => [],\n];\n"
  },
  {
    "path": "lang/de/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Erweiterte Erwähnung mit Elementname kopieren',\n        'success'           => 'Erweiterte Erwähnung des in die Zwischenablage kopierten Elements.',\n    ],\n    'create'        => [\n        'success'   => 'Element zum Zeitstrahl hinzugefügt',\n        'title'     => 'neues Zeitstrahlelement',\n    ],\n    'delete'        => [\n        'success'   => 'Element :name entfernt',\n    ],\n    'edit'          => [\n        'success'   => 'Element aktualisiert',\n        'title'     => 'Zeitstrahlelement editieren',\n    ],\n    'fields'        => [\n        'date'              => 'Datum',\n        'era'               => 'Epoche',\n        'icon'              => 'Icon',\n        'use_entity_entry'  => 'Zeigen Sie den Eintrag des angehängten Objekts unten an. Der Text dieses Elements wird zuerst angezeigt, falls vorhanden.',\n        'use_event_date'    => 'Verwende das Datum des verknüpften Ereignisses.',\n    ],\n    'helpers'       => [\n        'date'              => 'Wenn das Element mit einem Ereignisobjekt verknüpft ist, zeige das Datum des Ereignisses an.',\n        'entity_is_private' => 'Das Element des Objekts ist privat.',\n        'icon'              => 'Kopieren Sie den HTML-Code eines Symbols von :fontawesome oder :rpgawesome.',\n        'is_collapsed'      => 'Das Element wird standardmäßig reduziert angezeigt.',\n    ],\n    'placeholders'  => [\n        'date'      => 'z.B. 42. März oder 1332-1337',\n        'name'      => 'Erforderlich, wenn kein Objekt ausgewählt ist',\n        'position'  => 'Position in der Liste der Elemente für die Epoche. Lassen Sie das Feld leer, um es am Ende hinzuzufügen.',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/de/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'neue Epoche hinzufügen',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} :count eras entfernt.|{1} :count eras entfernt.|[2,*] :count eras entfernt.',\n    ],\n    'create'        => [\n        'success'   => 'Epoche :name erstellt',\n        'title'     => 'neue Epoche',\n    ],\n    'delete'        => [\n        'success'   => 'Epoche :name gelöscht',\n    ],\n    'edit'          => [\n        'success'   => 'Epoche :name aktualisiert',\n        'title'     => 'Epoche :name editieren',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Abkürzung',\n        'end_year'      => 'Endjahr',\n        'is_collapsed'  => 'eingeklappt',\n        'start_year'    => 'Startjahr',\n    ],\n    'helpers'       => [\n        'eras'          => 'Der Zeitstahl muss erstellt werden, bevor Epochen hinzugefügt werden können.',\n        'is_collapsed'  => 'Era ist standardmäßig eingeklappt (minimiert).',\n        'primary'       => 'Trennen Sie Ihre Zeitstrahlen in Epochen. Ein Zeitstrahl benötigt mindestens eine Epoche, um ordnungsgemäß zu funktionieren.',\n    ],\n    'index'         => [\n        'title' => 'Epochen von :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'AD, BC, BCE',\n        'end_year'      => 'Jahr, in dem die Epoche endet. Lassen Sie das Feld leer, wenn dies die aktuelle Epoche ist.',\n        'name'          => 'Moderne, Bronzzeit, Galaktische Kriege',\n        'start_year'    => 'Jahr, in dem die Epoche beginnt. Lassen Sie das Feld leer, wenn dies die erste Epoche ist.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/de/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Fügen Sie der Epoche ein Element hinzu :era',\n        'back'          => 'zurück zu :name',\n        'save_order'    => 'neue Reihenfolge speichern',\n    ],\n    'create'        => [\n        'title' => 'neuer Zeitstrahl',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_elements' => 'Elemente kopieren',\n        'copy_eras'     => 'Epoche kopieren',\n        'eras'          => 'Epochen',\n        'reverse_order' => 'Reihenfolge der Epochen umkehren',\n    ],\n    'helpers'       => [\n        'no_era_v2'     => 'Dieser Zeitstrahl hat derzeit keine Epochen. Füge eine oder mehrere Epochen hinzu, danach kannst du hier Elemente zu den Epochen hinzufügen.',\n        'reverse_order' => 'Aktivieren Sie diese Option, um Epochen in umgekehrter chronologischer Reihenfolge anzuzeigen (ältere Epoche zuerst).',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Erstelle eine visuelle Zeitleiste, um wichtige Ereignisse festzuhalten und zu verfolgen, wie sich deine Welt entwickelt hat.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Grundschule, Weltchronik, Königreichserbe',\n    ],\n    'reorder'       => [\n        'empty'     => 'Füge dem Zeitstrahl Epochen und Elemente hinzu, um sie neu anordnen zu können.',\n        'success'   => 'Zeitstrahl erfolgreich neu geordnet.',\n        'title'     => 'Ordne den Zeitstrahl neu',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder-elements'  => 'Elemente neu ordnen',\n        ],\n    ],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/de/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'Ein wahrer Wortschmied! Gewinner einer Worldbuilding-Eingabeaufforderung.',\n    ],\n    'fields'        => [\n        'achievements'      => 'Erfolge',\n        'banned'            => 'Dieser Benutzer wurde gesperrt',\n        'entities_created'  => 'Objekt erstellt :help :count',\n        'member_since'      => 'Mitglied seit :date',\n        'public_campaigns'  => 'öffentliche Kampagnen',\n        'subscriber_since'  => 'Abonnent seit :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'Dieser Wert wird jeden Tag neu berechnet.',\n    ],\n    'title'         => ':name Profil',\n];\n"
  },
  {
    "path": "lang/de/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => ':attribute muss akzeptiert werden.',\n    'active_url'           => ':attribute ist keine gültige Internet-Adresse.',\n    'after'                => ':attribute muss ein Datum nach dem :date sein.',\n    'after_or_equal'       => ':attribute muss ein Datum nach dem :date oder gleich dem :date sein.',\n    'alpha'                => ':attribute darf nur aus Buchstaben bestehen.',\n    'alpha_dash'           => ':attribute darf nur aus Buchstaben, Zahlen, Binde- und Unterstrichen bestehen.',\n    'alpha_num'            => ':attribute darf nur aus Buchstaben und Zahlen bestehen.',\n    'array'                => ':attribute muss ein Array sein.',\n    'before'               => ':attribute muss ein Datum vor dem :date sein.',\n    'before_or_equal'      => ':attribute muss ein Datum vor dem :date oder gleich dem :date sein.',\n    'between'              => [\n        'numeric' => ':attribute muss zwischen :min & :max liegen.',\n        'file'    => ':attribute muss zwischen :min & :max Kilobytes groß sein.',\n        'string'  => ':attribute muss zwischen :min & :max Zeichen lang sein.',\n        'array'   => ':attribute muss zwischen :min & :max Elemente haben.',\n    ],\n    'boolean'              => \":attribute muss entweder 'true' oder 'false' sein.\",\n    'confirmed'            => ':attribute stimmt nicht mit der Bestätigung überein.',\n    'date'                 => ':attribute muss ein gültiges Datum sein.',\n    'date_equals'          => 'The :attribute must be a date equal to :date.',\n    'date_format'          => ':attribute entspricht nicht dem gültigen Format für :format.',\n    'different'            => ':attribute und :other müssen sich unterscheiden.',\n    'digits'               => ':attribute muss :digits Stellen haben.',\n    'digits_between'       => ':attribute muss zwischen :min und :max Stellen haben.',\n    'dimensions'           => ':attribute hat ungültige Bildabmessungen.',\n    'distinct'             => ':attribute beinhaltet einen bereits vorhandenen Wert.',\n    'email'                => ':attribute muss eine gültige E-Mail-Adresse sein.',\n    'exists'               => 'Der gewählte Wert für :attribute ist ungültig.',\n    'file'                 => ':attribute muss eine Datei sein.',\n    'filled'               => ':attribute muss ausgefüllt sein.',\n    'gt'                   => [\n        'numeric' => ':attribute muss mindestens :value sein.',\n        'file'    => ':attribute muss mindestens :value Kilobytes groß sein.',\n        'string'  => ':attribute muss mindestens :value Zeichen lang sein.',\n        'array'   => ':attribute muss mindestens :value Elemente haben.',\n    ],\n    'gte'                  => [\n        'numeric' => ':attribute muss größer oder gleich :value sein.',\n        'file'    => ':attribute muss größer oder gleich :value Kilobytes sein.',\n        'string'  => ':attribute muss größer oder gleich :value Zeichen lang sein.',\n        'array'   => ':attribute muss größer oder gleich :value Elemente haben.',\n    ],\n    'image'                => ':attribute muss ein Bild sein.',\n    'in'                   => 'Der gewählte Wert für :attribute ist ungültig.',\n    'in_array'             => 'Der gewählte Wert für :attribute kommt nicht in :other vor.',\n    'integer'              => ':attribute muss eine ganze Zahl sein.',\n    'ip'                   => ':attribute muss eine gültige IP-Adresse sein.',\n    'ipv4'                 => ':attribute muss eine gültige IPv4-Adresse sein.',\n    'ipv6'                 => ':attribute muss eine gültige IPv6-Adresse sein.',\n    'json'                 => ':attribute muss ein gültiger JSON-String sein.',\n    'lt'                   => [\n        'numeric' => ':attribute muss kleiner :value sein.',\n        'file'    => ':attribute muss kleiner :value Kilobytes groß sein.',\n        'string'  => ':attribute muss kleiner :value Zeichen lang sein.',\n        'array'   => ':attribute muss kleiner :value Elemente haben.',\n    ],\n    'lte'                  => [\n        'numeric' => ':attribute muss kleiner oder gleich :value sein.',\n        'file'    => ':attribute muss kleiner oder gleich :value Kilobytes sein.',\n        'string'  => ':attribute muss kleiner oder gleich :value Zeichen lang sein.',\n        'array'   => ':attribute muss kleiner oder gleich :value Elemente haben.',\n    ],\n    'max'                  => [\n        'numeric' => ':attribute darf maximal :max sein.',\n        'file'    => ':attribute darf maximal :max Kilobytes groß sein.',\n        'string'  => ':attribute darf maximal :max Zeichen haben.',\n        'array'   => ':attribute darf nicht mehr als :max Elemente haben.',\n    ],\n    'mimes'                => ':attribute muss den Dateityp :values haben.',\n    'mimetypes'            => ':attribute muss den Dateityp :values haben.',\n    'min'                  => [\n        'numeric' => ':attribute muss mindestens :min sein.',\n        'file'    => ':attribute muss mindestens :min Kilobytes groß sein.',\n        'string'  => ':attribute muss mindestens :min Zeichen lang sein.',\n        'array'   => ':attribute muss mindestens :min Elemente haben.',\n    ],\n    'not_in'               => 'Der gewählte Wert für :attribute ist ungültig.',\n    'not_regex'            => ':attribute hat ein ungültiges Format.',\n    'numeric'              => ':attribute muss eine Zahl sein.',\n    'present'              => ':attribute muss vorhanden sein.',\n    'regex'                => ':attribute Format ist ungültig.',\n    'required'             => ':attribute muss ausgefüllt sein.',\n    'required_if'          => ':attribute muss ausgefüllt sein, wenn :other :value ist.',\n    'required_unless'      => ':attribute muss ausgefüllt sein, wenn :other nicht :values ist.',\n    'required_with'        => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.',\n    'required_with_all'    => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.',\n    'required_without'     => ':attribute muss angegeben werden, wenn :values nicht ausgefüllt wurde.',\n    'required_without_all' => ':attribute muss angegeben werden, wenn keines der Felder :values ausgefüllt wurde.',\n    'same'                 => ':attribute und :other müssen übereinstimmen.',\n    'size'                 => [\n        'numeric' => ':attribute muss gleich :size sein.',\n        'file'    => ':attribute muss :size Kilobyte groß sein.',\n        'string'  => ':attribute muss :size Zeichen lang sein.',\n        'array'   => ':attribute muss genau :size Elemente haben.',\n    ],\n    'starts_with'          => 'The :attribute must start with one of the following: :values',\n    'string'               => ':attribute muss ein String sein.',\n    'timezone'             => ':attribute muss eine gültige Zeitzone sein.',\n    'unique'               => ':attribute ist schon vergeben.',\n    'uploaded'             => ':attribute konnte nicht hochgeladen werden.',\n    'url'                  => ':attribute muss eine URL sein.',\n    'uuid'                 => ':attribute muss ein UUID sein.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        'name'                  => 'Name',\n        'username'              => 'Benutzername',\n        'email'                 => 'E-Mail-Adresse',\n        'first_name'            => 'Vorname',\n        'last_name'             => 'Nachname',\n        'password'              => 'Passwort',\n        'password_confirmation' => 'Passwort-Bestätigung',\n        'city'                  => 'Stadt',\n        'country'               => 'Land',\n        'address'               => 'Adresse',\n        'phone'                 => 'Telefonnummer',\n        'mobile'                => 'Handynummer',\n        'age'                   => 'Alter',\n        'sex'                   => 'Geschlecht',\n        'gender'                => 'Geschlecht',\n        'day'                   => 'Tag',\n        'month'                 => 'Monat',\n        'year'                  => 'Jahr',\n        'hour'                  => 'Stunde',\n        'minute'                => 'Minute',\n        'second'                => 'Sekunde',\n        'title'                 => 'Titel',\n        'content'               => 'Inhalt',\n        'description'           => 'Beschreibung',\n        'excerpt'               => 'Auszug',\n        'date'                  => 'Datum',\n        'time'                  => 'Uhrzeit',\n        'available'             => 'verfügbar',\n        'size'                  => 'Größe',\n    ],\n];\n"
  },
  {
    "path": "lang/de/visibilities.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'admin'         => 'Nur die Kampagnenadministratoren können dieses Element sehen.',\n        'admin-self'    => 'Nur du und die Kampagnenadministratoren können dieses Element sehen.',\n        'all'           => 'Jeder kann dieses Element sehen.',\n        'members'       => 'Nur Mitglieder der Kampagne können dieses Element sehen.',\n        'self'          => 'Nur du kannst dieses Element sehen.',\n    ],\n    'title'     => 'Sichtbarkeit aktualisieren',\n    'toast'     => 'Sichtbarkeit erfolgreich aktualisiert.',\n    'tooltip'   => 'Klicke hier, um mehr über die verschiedenen Sichtbarkeitsoptionen zu erfahren.',\n];\n"
  },
  {
    "path": "lang/de/whiteboards/draw.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add-circle'    => 'Kreis hinzufügen',\n        'add-entity'    => 'Eintrag hinzufügen',\n        'add-image'     => 'Bild hinzufügen',\n        'add-square'    => 'Quadrat hinzufügen',\n        'add-text'      => 'Text hinzufügen',\n        'duplicate'     => 'Ausgewählte duplizieren',\n        'end-drawing'   => 'Zeichnung beenden',\n        'lock'          => 'sperren',\n        'push-to-back'  => 'in den Hintergrund bringen',\n        'push-to-front' => 'in den Vordergrund bringen',\n        'start-drawing' => 'Fang an zu zeichnen',\n        'unlock'        => 'Entsperren',\n    ],\n    'entity-search' => [\n        'placeholder'   => 'Gib den Namen oder den Alias eines Eintrags ein',\n        'title'         => 'Eintragssuche',\n    ],\n    'errors'        => [\n        'websockets'    => [\n            'disconnected'  => 'Die Verbindung zum WebSocket wurde unterbrochen. Bitte versuche es erneut.',\n            'error'         => 'Beim Herstellen der Verbindung zum WebSocket-Server ist ein Fehler aufgetreten.',\n            'unavailable'   => 'Der WebSocket-Server ist derzeit nicht verfügbar. Bitte versuche es später erneut.',\n        ],\n    ],\n    'fields'        => [\n        'color' => 'Farbe',\n    ],\n    'pen'           => [\n        'large-stroke'  => 'Dicker Strich',\n        'thin-stroke'   => 'Dünner Strich',\n    ],\n    'reset'         => [\n        'helper'    => 'Möchtest du das Whiteboard wirklich zurücksetzen? Dieser Vorgang kann nicht rückgängig gemacht werden.',\n        'title'     => 'Reset Whiteboard',\n    ],\n    'roles'         => [\n        'edit'  => 'Dieser Benutzer kann das Whiteboard bearbeiten',\n        'view'  => 'Dieser Benutzer kann das Whiteboard einsehen',\n    ],\n    'toast'         => [\n        'copy'  => [\n            'success'   => 'Elemente wurden in die Zwischenablage kopiert.',\n        ],\n        'paste' => [\n            'error' => 'Es ist ein Fehler aufgetreten',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/de/whiteboards.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'draw'  => 'Zeichnen',\n    ],\n    'create'        => [\n        'title' => 'neues Whiteboard',\n    ],\n    'cta'           => [\n        'text'  => 'Um Whiteboards freizuschalten, muss eine Kampagne von einem Mitglied der Stufe :wyvern oder :elemental zum Premium-Mitglied gemacht werden.',\n        'title' => 'Whiteboards sind eine besondere Premium-Funktion.',\n    ],\n    'lists'         => [\n        'empty' => 'Verwende ein Whiteboard, um Ideen, Zusammenhänge oder die Struktur einer Geschichte visuell zu organisieren.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Idee, Beziehungen, Story-Struktur',\n    ],\n];\n"
  },
  {
    "path": "lang/en/abilities.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'Attach entries',\n        ],\n        'create'        => [\n            'attach_success'    => '{1} Attached the ability :name to :count entry.|[2,*] Attached the ability :name to :count entries.',\n            'helper'            => 'Attach :name to one or several entries.',\n            'title'             => 'Attach entries',\n        ],\n        'description'   => 'Entries having the ability',\n        'title'         => 'Ability :name Entries',\n    ],\n    'create'        => [\n        'title' => 'New Ability',\n    ],\n    'fields'        => [\n        'charges'   => 'Charges',\n    ],\n    'lists'         => [\n        'empty' => 'Add powers, spells, or talents. Many creators use this to model D&D classes.',\n    ],\n    'placeholders'  => [\n        'charges'   => 'Amount of charges. Reference properties with {Level}*{CHA}',\n        'name'      => 'Fireball, Alert, Cunning Strike',\n        'type'      => 'Spell, Feat, Attack',\n    ],\n    'reorder'       => [\n        'parentless'    => 'No Parent',\n        'success'       => 'Abilities successfully reordered.',\n        'title'         => 'Reorder the abilities',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Reorder Abilities',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/account/email.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Update email',\n    ],\n    'fields'    => [\n        'email' => 'New email address',\n    ],\n    'helpers'   => [\n        'email' => 'Make sure it\\'s spelt correctly.',\n    ],\n    'subtitle'  => 'Change your email address associated with your account.',\n    'title'     => 'Update your email address',\n];\n"
  },
  {
    "path": "lang/en/account/password.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Update password',\n    ],\n    'fields'    => [\n        'password'  => 'New password',\n    ],\n    'helpers'   => [\n        'password'              => 'Use a password manager to generate a strong password.',\n        'password_confirmation' => 'Don\\'t mess up!',\n    ],\n    'subtitle'  => 'Change your account password. This will log you out of all other devices.',\n    'title'     => 'Update your account password',\n];\n"
  },
  {
    "path": "lang/en/account/social.php",
    "content": "<?php\n\nreturn [\n    'info'      => 'Login by :provider',\n    'subtitle'  => 'Switch from a login managed by :provider to one managed by Kanka, where you log in with your email and password.',\n    'title'     => 'Switch to a Kanka login',\n];\n"
  },
  {
    "path": "lang/en/articles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'move'  => 'Move to entry',\n    ],\n    'helpers'   => [\n        'permissions'   => 'These permissions can override the :visibility setting of the article.',\n    ],\n    'tabs'      => [\n        'layout'        => 'Layout',\n        'main'          => 'Main',\n        'permissions'   => 'Special permissions',\n    ],\n];\n"
  },
  {
    "path": "lang/en/assistance.php",
    "content": "<?php\n\nreturn [\n    'fields'        => [\n        'campaign'  => 'Campaign',\n    ],\n    'opening'       => 'A member of Kanka\\'s team has sent you to this page with the goal of assisting you.',\n    'placeholders'  => [\n        'campaign'  => 'Select a campaign you are an admin of',\n    ],\n    'select'        => 'Select a campaign you are an admin of from the dropdown below to generate a special one-time usage token, which will allow a member of the Kanka team to temporarily join the campaign as an admin.',\n    'success'       => [\n        'opening'   => 'Your assistance token has been successfully generated. The Kanka team has been notified and will join your campaign shortly to help you out. We\\'ll usually reach out via :discord if we need to coordinate anything directly.',\n        'secret'    => 'Only a verified Kanka team member can use this token, it\\'s useless to anyone else, so there\\'s no need to treat it like a secret.',\n        'token'     => 'Your assistance token:',\n    ],\n    'title'         => 'Assistance',\n];\n"
  },
  {
    "path": "lang/en/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'bulk'          => [\n        'entity_type'   => [\n            'unset' => 'Unset',\n        ],\n    ],\n    'create'        => [\n        'title' => 'New Property Kit',\n    ],\n    'fields'        => [\n        'auto_apply'    => 'Auto-apply',\n        'is_enabled'    => 'Enabled',\n    ],\n    'hints'         => [\n        'automatic'                 => 'The following :count properties were automatically applied from :link.',\n        'automatic_apply'           => '{1} The following :count property was automatically applied from :link | [2,] The following :count properties were automatically applied from :link.',\n        'entity_type'               => 'Automatically apply this kit\\'s properties to new entries of the selected category.',\n        'is_disabled'               => 'This kit is disabled.',\n        'is_enabled'                => 'Enable this kit for use in the campaign.',\n        'parent_attribute_template' => 'This property kit can be a child of another property kit. When applying this property kit, it and all of its parents will be applied.',\n    ],\n    'lists'         => [\n        'empty' => 'Create kit to reuse common properties across multiple entries.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Name of the property kit',\n    ],\n];\n"
  },
  {
    "path": "lang/en/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Error',\n            'rendering' => 'There was an error rendering the marketplace plugin. Please contact the plugin creator.',\n        ],\n    ],\n    'list'      => [\n        'sheets'    => 'Character Sheets',\n    ],\n    'pitch'     => 'Find and add character sheets from the :marketplace on a :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/en/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'banned'    => [\n        'permanent' => 'You\\'ve been permanently banned.',\n        'temporary' => '{1} You\\'ve been banned for :days day.|[2,*] You\\'ve been banned for :days days.',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Confirm',\n        'error'     => 'Invalid password, please try again.',\n        'helper'    => 'Please confirm your password before being able to continue.',\n        'title'     => 'Password confirmation',\n    ],\n    'continue'  => [\n        'facebook'  => 'Continue with Facebook',\n        'google'    => 'Continue with Google',\n        'x'         => 'Continue with X',\n    ],\n    'failed'    => 'These credentials do not match our records.',\n    'helpers'   => [\n        'password'  => 'Show / Hide password',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'One time password',\n            'email'     => 'Email',\n            'password'  => 'Password',\n        ],\n        'no-account'            => 'Don\\'t have an account?',\n        'or'                    => 'OR',\n        'password_forgotten'    => 'Forgot your password?',\n        'sign-up'               => 'Sign up',\n        'submit'                => 'Login',\n        'title'                 => 'Login',\n    ],\n    'register'  => [\n        'already'   => 'Already have an account? :login',\n        'errors'    => [\n            'email_already_taken'   => 'An account with this email is already registered.',\n            'general_error'         => 'An error occurred while registering your account. Please try again.',\n        ],\n        'fields'    => [\n            'email'     => 'Email',\n            'name'      => 'Username',\n            'password'  => 'Password',\n        ],\n        'log-in'    => 'Log in',\n        'submit'    => 'Register',\n        'title'     => 'Register',\n        'tos'       => 'By registering an account, you agree to our :terms and :privacy.',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Email Address',\n            'password'              => 'Password',\n            'password_confirmation' => 'Confirm your password',\n        ],\n        'send'      => 'Send Password Reset Link',\n        'submit'    => 'Reset password',\n        'title'     => 'Reset password',\n    ],\n    'tfa'       => [\n        'helper'    => 'Two-factor authentication is enabled. Please provide the One Time Password (OTP) provided by your authenticator app.',\n        'title'     => 'Two-Factor Authentication',\n    ],\n    'throttle'  => 'Too many login attempts. Please try again in :seconds seconds.',\n    'x-twitter' => 'X formerly known as Twitter',\n];\n"
  },
  {
    "path": "lang/en/banners.php",
    "content": "<?php\n\nreturn [\n    'blackfriday24'   => 'Use promo code :code at checkout to get 20% off the first year of a yearly subscription! Offer valid for first time subscribers and until Monday 2nd of December 23:59 UTC.',\n];\n"
  },
  {
    "path": "lang/en/billing/information.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Update info',\n    ],\n    'helper'    => 'Your business address, VAT number etc can be added to all your receipts.',\n    'title'     => 'Update billing information',\n];\n"
  },
  {
    "path": "lang/en/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Download PDF',\n    ],\n    'description'   => 'Showing invoices within the past 24 months.',\n    'empty'         => 'No invoices found',\n    'fields'        => [\n        'amount'    => 'Amount',\n        'date'      => 'Date',\n        'invoice'   => 'Invoice',\n        'status'    => 'Status',\n    ],\n    'paypal'        => 'Please note that only payments made through Stripe, and not PayPal, are visible here.',\n    'status'        => [\n        'paid'      => 'Paid',\n        'pending'   => 'Pending',\n    ],\n    'title'         => 'Billing history',\n];\n"
  },
  {
    "path": "lang/en/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'Billing history',\n    'overview'          => 'Overview',\n    'payment-method'    => 'Payment method',\n];\n"
  },
  {
    "path": "lang/en/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Payment method',\n    'types' => [\n        'card'  => 'Credit/debit card',\n    ],\n];\n"
  },
  {
    "path": "lang/en/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Customise sidebar',\n    ],\n    'create'            => [\n        'title' => 'New bookmark',\n    ],\n    'edit'              => [\n        'title' => 'Bookmark :name',\n    ],\n    'fields'            => [\n        'active'            => 'Active',\n        'dashboard'         => 'Dashboard',\n        'default_dashboard' => 'Default dashboard',\n        'filters'           => 'Filters',\n        'menu'              => 'Subpage',\n        'position'          => 'Position',\n        'random_type'       => 'Random Category',\n        'selector'          => 'Bookmark Configuration',\n        'target'            => 'Target',\n    ],\n    'helpers'           => [\n        'active'            => 'Inactive bookmarks won\\'t appear in the interface.',\n        'css'               => 'Add a CSS class that will be added to the bookmark\\'s link in the sidebar.',\n        'dashboard'         => 'Have the bookmarks target a custom dashboards.',\n        'default_dashboard' => 'Link to the default dashboard instead. A custom dashboard still needs to be selected.',\n        'entity'            => 'Set up this bookmark to go directly to an entry. The :menu field controls which subpage of the entry is opened.',\n        'position'          => 'Use this field to control in which ascending order the links appear in the menu.',\n        'random'            => 'Use this field to have a bookmark pointing to a random entry. You can filter the link to only go to a specific category.',\n        'selector'          => 'Configure where this bookmark goes when a user clicks on it in the sidebar.',\n        'type'              => 'Set up this bookmark to go directly to a list of entries. To filter the results, copy parts of the url on the filtered entry list after the :? sign into the :filter field.',\n    ],\n    'lists'             => [\n        'empty' => 'Save bookmarks to your most used entries or filtered lists for faster access.',\n    ],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=city',\n        'menu'      => 'Menu subpage (use the last text of the url)',\n        'tab'       => '(deprecated)',\n    ],\n    'random_no_entity'  => 'No random entry found.',\n    'random_types'      => [\n        'any'   => 'Any entry',\n    ],\n    'reorder'           => [\n        'success'   => 'Bookmarks reordered.',\n        'title'     => 'Reorder bookmarks',\n    ],\n    'targets'           => [\n        'dashboard' => 'A dashboard',\n        'entity'    => 'A single entry',\n        'random'    => 'A random entry',\n        'select'    => 'Choose an option',\n        'type'      => 'Category entries',\n    ],\n    'visibilities'      => [\n        'is_active' => 'Show the bookmark in the sidebar',\n    ],\n];\n"
  },
  {
    "path": "lang/en/bragi/backstory.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Write a short character backstory inspired by this information. Adapt your tone and details to fit the selected game systems and genres. You may include elements like the character\\'s appearance, origin, beliefs, relationships, goals, flaws, or notable experiences — whichever best fits the character.',\n    'setup'     => [\n        'gender'    => 'Gender: :gender',\n        'genres'    => 'Genres: :genres',\n        'name'      => 'Character name: :name',\n        'prompt'    => 'Prompt: \":prompt\"',\n        'pronouns'  => 'Pronouns: :pronouns',\n        'systems'   => 'Game systems: :systems',\n    ],\n    'system'    => 'You are a professional TTRPG storyteller and character writer. You craft immersive, emotionally resonant character backstories for tabletop role-playing games. Your style adapts to the game\\'s tone and setting. You typically write 2–4 paragraphs and up to 400 words, weaving in appearance, history, beliefs, motivations, and flaws.',\n];\n"
  },
  {
    "path": "lang/en/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'Generate',\n        'insert'    => 'Use',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'To access this feature, you need to have an Wyvern or Elemental subscription.',\n        'out-of-tokens' => 'You are out of tokens! You\\'ll automatically get more on :date.',\n    ],\n    'here'          => 'here',\n    'intro'         => 'Hi! I\\'m :name, an AI here to help you generate backstories for your characters in Kanka. You can learn more about me :here.',\n    'kankappy'      => 'They are secretly a disciple of Kankappy.',\n    'loading'       => 'Please hang tight, I\\'m thinking hard and it can take up to a minute!',\n    'placeholders'  => [\n        'prompt'    => 'Provide a prompt that will be transformed into a backstory.',\n    ],\n    'token-limit'   => 'You currently have :amount tokens. Each time I generate a backstory, that uses a token, so use them wisely!',\n];\n"
  },
  {
    "path": "lang/en/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'helper'    => 'Add weather information that will show up on the calendar.',\n        'success'   => 'Weather information added.',\n        'title'     => 'Weather',\n    ],\n    'destroy'       => [\n        'success'   => 'Weather information removed.',\n    ],\n    'edit'          => [\n        'success'   => 'Weather information updated.',\n        'title'     => 'Update Weather',\n    ],\n    'fields'        => [\n        'effect'        => 'Effect',\n        'name'          => 'Name',\n        'precipitation' => 'Precipitation',\n        'temperature'   => 'Temperature',\n        'weather'       => 'Weather',\n        'wind'          => 'Wind',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Thunder',\n            'cloud'                 => 'Cloudy',\n            'cloud-rain'            => 'Rainy',\n            'cloud-showers-heavy'   => 'Heavy Rain',\n            'cloud-sun'             => 'Cloudy and Sunny',\n            'cloud-sun-rain'        => 'Cloud, Sun and Rain',\n            'meteor'                => 'Meteor',\n            'smog'                  => 'Smog',\n            'snowflake'             => 'Snow',\n            'sun'                   => 'Sunny',\n            'wind'                  => 'Windy',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Magical or natural effect',\n        'name'          => 'Optional custom weather text',\n        'precipitation' => 'Amount of water',\n        'temperature'   => 'Daily high and low',\n        'wind'          => 'Wind speeds',\n    ],\n];\n"
  },
  {
    "path": "lang/en/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Epoch',\n        'add_intercalary'   => 'Add intercalary days',\n        'add_month'         => 'Month',\n        'add_moon'          => 'Moon',\n        'add_reminder'      => 'Add a reminder',\n        'add_season'        => 'Season',\n        'add_weather'       => 'Set weather',\n        'add_week'          => 'Named week',\n        'add_weekday'       => 'Week day',\n        'add_year'          => 'Named year',\n        'set_today'         => 'Set as current day',\n        'today'             => 'Today',\n        'update_weather'    => 'Update weather',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Takes place every year',\n    ],\n    'create'        => [\n        'title' => 'New Calendar',\n    ],\n    'edit'          => [\n        'today' => 'Current date updated.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Reminder created.',\n            'title'     => 'New reminder',\n        ],\n        'destroy'   => 'Reminder removed from \\':name\\'.',\n        'edit'      => [\n            'success'   => 'Reminder updated.',\n            'title'     => 'Updating :name\\'s reminder',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Invalid entry selection',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'You are editing a reminder that was added on :calendar. Modifying this reminder will modify it in both places.',\n        ],\n        'success'   => 'Reminder \\':event\\' added to :calendar.',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} Deleted :count reminder.|[2,*] Deleted :count reminders.',\n            'patch'     => '{1} Updated :count reminder.|[2,*] Updated :count reminders.',\n        ],\n        'end'       => '(end)',\n        'filters'   => [\n            'show_after'    => 'Show today and after',\n            'show_all'      => 'Show all',\n            'show_before'   => 'Show before today',\n        ],\n        'start'     => '(start)',\n    ],\n    'fields'        => [\n        'comment'           => 'Comment',\n        'current_day'       => 'Current Day',\n        'current_month'     => 'Current Month',\n        'current_year'      => 'Current Year',\n        'date'              => 'Current Date',\n        'day'               => 'Day',\n        'default_layout'    => 'Default layout',\n        'format'            => 'Format',\n        'is_incrementing'   => 'Advancing date',\n        'is_recurring'      => 'Recurring',\n        'leap_year'         => 'Leap years',\n        'leap_year_amount'  => 'Add Days',\n        'leap_year_month'   => 'Month',\n        'leap_year_offset'  => 'Every',\n        'leap_year_start'   => 'Leap Year',\n        'length'            => 'Days',\n        'length_days'       => ':count day|:count days',\n        'month'             => 'Month',\n        'months'            => 'Months',\n        'moons'             => 'Moons',\n        'parameters'        => 'Parameters',\n        'recurring_until'   => 'Recurring Until Year',\n        'reset'             => 'Weekly Reset',\n        'seasons'           => 'Seasons',\n        'show_birthdays'    => 'Show Birthdays',\n        'skip_year_zero'    => 'Skip Year Zero',\n        'start_offset'      => 'Start Offset',\n        'suffix'            => 'Suffix',\n        'week_names'        => 'Week Names',\n        'weekdays'          => 'Week Days',\n        'year'              => 'Year',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Select which layout the calendar should use by default when viewed.',\n        'format'            => 'Add custom date formatting for calendar entries.',\n        'month_type'        => 'Intercalary months don\\'t use week days, but still influence moons and seasons.',\n        'moon_offset'       => 'By default, the first fullmoon appears on the first day of year 0. Changing the offset will alter when the first full moon is displayed. This value can negative (up to the length of the first month) or positive (up to the length of the first month).',\n        'start_offset'      => 'By default, the calendar starts on the first weekday of year 0. Changing this field influences where the calendar\\'s first day is placed.',\n    ],\n    'hints'         => [\n        'event_length'      => 'How many days a reminder lasts. A reminder will only be displayed on its first two years.',\n        'is_incrementing'   => 'Automatically switch to the next day at 00:00 UTC.',\n        'leap_year'         => 'Set up leap years for the calendar.',\n        'months'            => 'The calendar should have at least 2 months.',\n        'moons'             => 'Adding moons will make them show up in the calendar on every full and new moon. If the full moon period is bigger than 10 days, first and third quarter moons will also be displayed.',\n        'parent_calendar'   => 'Giving the calendar a parent calendar will include the reminders and weather effects of the parent calendar.',\n        'reset'             => 'Always start the beginning of the month or year on the first week day.',\n        'seasons'           => 'Create seasons for the calendar by providing when each of them start. Kanka will take care of the rest.',\n        'show_birthdays'    => 'Show the yearly birthdays of characters that have a birthday reminder on this calendar up to their death date.',\n        'skip_year_zero'    => 'By default, the calendar\\'s first year is year zero. Enable this option to skip year zero.',\n        'weekdays'          => 'Set the weekday names. At least 2 weekdays are required.',\n        'weeks'             => 'Define some names for the more important weeks of the calendar.',\n        'years'             => 'Some years are so important that they have their own name.',\n    ],\n    'layouts'       => [\n        'month'     => 'Month',\n        'monthly'   => 'Monthly by default',\n        'year'      => 'Year',\n        'yearly'    => 'Yearly by default',\n    ],\n    'lists'         => [\n        'empty' => 'Create a calendar to track dates, festivals, or in-game events over time.',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Change year',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Intercalary',\n        'standard'      => 'Standard',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Full moon',\n                'fullmoon_name' => ':moon full moon',\n                'month'         => 'Monthly',\n                'newmoon'       => 'New moon',\n                'newmoon_name'  => ':moon new moon',\n                'none'          => 'None',\n                'unnamed_moon'  => 'Moon :number',\n                'year'          => 'Yearly',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'None',\n            'month' => 'Monthly',\n            'year'  => 'Yearly',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Intercalary Days',\n        'leap_year'     => 'Leap Year',\n        'months'        => 'Months',\n        'weeks'         => 'Weeks',\n        'years'         => 'Named Years',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Duration in days',\n            'month'     => 'At the end of which month',\n            'name'      => 'Name of intercalation',\n        ],\n        'month'         => [\n            'alias' => 'Month Alias',\n            'length'=> 'Days',\n            'name'  => 'Month Name',\n            'type'  => 'Type',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Full moon every (days)',\n            'name'      => 'Moon Name',\n            'offset'    => 'First full moon offset',\n        ],\n        'seasons'       => [\n            'day'   => 'Day start',\n            'month' => 'Month start',\n            'name'  => 'Season Name',\n        ],\n        'weeks'         => [\n            'name'      => 'Week name',\n            'number'    => 'Week number',\n        ],\n        'year'          => [\n            'name'      => 'Year Name',\n            'number'    => 'Year',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Colour',\n        'comment'           => 'Birthday, festival, solstice',\n        'date'              => 'The current date',\n        'leap_year_amount'  => 'Number of days added on a leap year',\n        'leap_year_month'   => 'Month on which days are added',\n        'leap_year_offset'  => 'Every how many years is a leap year',\n        'leap_year_start'   => 'First year that is a leap year',\n        'length'            => 'Reminder length in days',\n        'months'            => 'Number of months in a year',\n        'recurring_until'   => 'Last recurring year (leave empty for forever recurring)',\n        'seasons'           => 'Number of seasons',\n        'suffix'            => 'Current Era suffix (AC, BC)',\n        'type'              => 'Type of the calendar',\n        'weekdays'          => 'Number of days in a week',\n    ],\n    'show'          => [\n        'missing_details'       => 'This calendar couldn\\'t be displayed. Calendars need at least 2 months and 2 weekdays to render properly.',\n        'moon_1first_quarter'   => ':moon first quarter',\n        'moon_full'             => ':moon full moon',\n        'moon_last_quarter'     => ':moon last quarter',\n        'moon_new'              => ':moon new moon',\n        'tabs'                  => [\n            'events'    => 'Reminders',\n            'weather'   => 'Weather',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Today & after',\n        'before'=> 'Today & before',\n    ],\n    'validators'    => [\n        'format'        => 'The date format is invalid.',\n        'moon_offset'   => 'The moon first fullmoon offset can\\'t be bigger than the length of the calendar\\'s first month.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Reminders that span multiple years are only visible on the first two years. Learn more in our :documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/callouts.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscription'  => 'See plans & pricing',\n        'upgrade'       => 'Upgrade to premium',\n    ],\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Boost :campaign',\n            'superboost'    => 'Superboost :campaign',\n        ],\n        'learn-more'    => 'What are boosters?',\n        'limitation'    => 'To access this feature, the campaign needs to be boosted.',\n        'limitations'   => [\n            'boosted'       => 'To access this feature, the campaign needs to be boosted.',\n            'superboosted'  => 'To access this feature, the campaign needs to be superboosted.',\n        ],\n        'multiple'      => 'To access these features, the campaign needs to be boosted.',\n        'pitches'       => [\n            'element-class' => 'Give this element a custom CSS class with a :boosted-campaign.',\n            'icon'          => 'Unlock millions of custom icons like :example from :fontawesome with a :boosted-campaign.',\n        ],\n        'titles'        => [\n            'boosted'       => 'Boosted feature',\n            'superboosted'  => 'Superboosted feature',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => 'See all premium features',\n        'limitation'    => 'To access this feature, premium features need to be enabled for :campaign.',\n        'multiple'      => 'To access these features, premium features need to be enabled for :campaign.',\n        'title'         => 'Premium feature',\n        'unlock'        => 'Unlock premium features for :campaign',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Subscribe to unlock up to :max MiB file upload sizes.',\n        'share-booster' => 'Boost :campaign to increase the file upload size for all members of the campaign.',\n        'share-premium' => 'Increase the file upload size for all members of the campaign with a premium campaign.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => 'Congratulations!',\n    'connections'       => '{0} No relation created|{1} One relation created|[2,*] :amount relations created',\n    'created'           => '{0} No :plural created|{1} One :singular created|[2,*] :amount :plural created',\n    'dead'              => '{0} No murder mysteries|{1} One muder mystery|[2,*] :amount murder mysteries',\n    'goal'              => 'Goal :number',\n    'goal_reached'      => 'Unlocked achievement',\n    'level'             => 'level :number',\n    'markers'           => '{0} No map markers created|{1} One map marker created|[2,*] :amount map markers created',\n    'painter'           => '{0} No themes created|{1} One theme created|[2,*] :amount themes created',\n    'pitch'             => 'Campaign achievements are a fun way to celebrate milestones in your worldbuilding journey. Track progress, engage your players, and showcase your accomplishments with a premium campaign.',\n    'plugins'           => '{0} No plugins installed|{1} One plugin installed|[2,*] :amount plugins installed',\n    'remaining'         => [\n        'generic'   => 'More and the next level will be unlocked.',\n    ],\n    'spotlight'         => [\n        'active'    => [\n            'cta'   => 'View spotlight',\n        ],\n        'private'   => [\n            'cta'       => 'Review public settings',\n            'helper'    => 'Make your campaign public to be eligible for the Spotlight.',\n        ],\n        'public'    => [\n            'cta'       => 'Learn how spotlight works',\n            'helper'    => 'Selected campaigns are featured on the Kanka Showcase and blog.',\n        ],\n    ],\n    'spotlighted'       => '{0} Not spotlighted yet|[1,*] Spotlighted',\n    'tagged'            => '{0} No entries tagged|{1} One entry tagged|[2,*] :amount entries tagged',\n    'titles'            => [\n        'calendars'     => 'Time keeper',\n        'characters'    => 'Name giver',\n        'connections'   => 'Cupid',\n        'creatures'     => 'Breeder',\n        'dead'          => 'Murderer',\n        'events'        => 'Lore master',\n        'families'      => 'Family planning',\n        'locations'     => 'Builder',\n        'markers'       => 'Cartographer',\n        'organisations' => 'Mergers and acquisitions',\n        'plugins'       => 'Plugin connoisseur',\n        'quests'        => 'Mastermind',\n        'spotlighted'   => 'Spotlighted',\n        'tags'          => 'Under control',\n        'themes'        => 'Painter',\n    ],\n    'tutorial'          => 'Achievements track notable actions within this campaign such as creating entries or using key features. They are informational only and update automatically as you explore and build.',\n];\n"
  },
  {
    "path": "lang/en/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'accept'    => 'Accept',\n        'reject'    => 'Deny',\n    ],\n    'apply'             => [\n        'apply'         => 'Apply',\n        'help'          => 'This campaign is open to new members. Apply to join is by filling out the form. You will be notified when the admins review your application.',\n        'remove_text'   => 'your submission',\n        'success'       => [\n            'apply' => 'Your application has been saved. You can still change it or cancel it at any time. You shall be notified when the admins review it.',\n            'remove'=> 'Your application has been removed.',\n            'update'=> 'Your application has been updated. You can still change it or cancel it at any time. You shall be notified when the admins review it.',\n        ],\n        'title'         => 'Join :name',\n    ],\n    'dashboard_widget'  => [\n        'add'               => 'Add widget',\n        'has_widget'        => 'Join widget is on the dashboard.',\n        'has_widget_help'   => 'Your campaign dashboard is showcasing the join widget to potential players.',\n        'no_widget'         => 'No join widget on dashboard.',\n        'no_widget_help'    => 'Your campaign is open but doesn\\'t showcase it on the dashboard. Add a widget so players can discover and apply to join.',\n        'success'           => 'Join widget added to the dashboard.',\n        'title'             => 'Dashboard widget',\n    ],\n    'experience'        => [\n        'intermediate'  => 'Intermediate (Played a few times)',\n        'new'           => 'Newbie (First time)',\n        'veteran'       => 'Veteran (Years of experience)',\n    ],\n    'fields'            => [\n        'additional_notes'      => 'Anything else',\n        'application'           => 'Application',\n        'availability_days'     => 'Days Available',\n        'character_concept'     => 'Character Concept',\n        'experience_level'      => 'Experience Level',\n        'external_link'         => 'Character Sheet / Link',\n        'intro'                 => 'Campaign Introduction',\n        'new_application'       => 'New player application',\n        'player_count'          => 'Number of Players',\n        'playstyle_tags'        => 'Play-styles',\n        'pref_rp_combat'        => 'Focus Balance',\n        'pref_tone'             => 'Tone Preference',\n        'reason'                => 'Approval / Rejection reason',\n        'schedule'              => 'Schedule',\n        'schedule-placeholder'  => 'Every Friday at 7 PM',\n        'time_end'              => 'To',\n        'time_start'            => 'From',\n        'timezone'              => 'Timezone',\n    ],\n    'filters'           => [\n        'all'       => 'Show All',\n        'approved'  => 'Show approved',\n        'pending'   => 'Show pending',\n        'rejected'  => 'Show rejected',\n        'title'     => 'Filters',\n    ],\n    'headers'           => [\n        'availability'  => 'Availability & Schedule',\n        'preferences'   => 'Playstyle Preferences',\n    ],\n    'helpers'           => [\n        'applications_closed'   => 'Your campaign is public, but new players cannot submit applications until you set the status to \"Open\".',\n        'availability_days'     => 'Select the days you are generally available to play.',\n        'experience_level'      => 'How familiar are you with this specific game system?',\n        'external_link'         => 'Link to D&D Beyond, Google Docs, or other external character sheets.',\n        'fill_setup'            => 'Please fill the public campaign setup form to be able to open your campaign to the public.',\n        'filters_incomplete'    => 'Your campaign is open for applications, but you haven\\'t finished setting up filters (like system, timezone, or tags). Completing these will make it much easier for the right players to find you.',\n        'modal'                 => 'A campaign which is open to applications and public can have users apply to join the campaign.',\n        'no_applications_title' => 'No pending requests',\n        'no_applications_v2'    => 'There are currently no pending requests to join the campaign, but you can help players find their next great adventure! Detailed campaign info and search filters make it much easier for users to discover and take interest in your story.',\n        'reason'                => 'If provided, the applicant will be notified with this reason.',\n        'role'                  => 'If approving, the role the applicant gets added to.',\n    ],\n    'labels'            => [\n        'casual'            => 'Casual / Beer & Pretzels',\n        'combat_focused'    => 'Combat Focused',\n        'rp_heavy'          => 'RP Heavy',\n        'serious'           => 'Serious / Immersive',\n    ],\n    'open'              => [\n        'closed'    => 'Campaign is closed',\n        'open'      => 'Campaign is open',\n        'title'     => 'Open campaign',\n    ],\n    'placeholders'      => [\n        'additional_notes'  => 'Triggers, hard limits, or specific questions.',\n        'character_concept' => 'Briefly describe who you want to play, their backstory, and how they fit into the world.',\n        'intro'             => 'A brief explanation of what your campaign is all about, shown on top of the application form.',\n        'note'              => 'Write down your application to join the campaign',\n        'player_count'      => '4-6 players',\n        'reason'            => 'Your reason',\n    ],\n    'public'            => [\n        'private'   => 'Campaign is private.',\n        'public'    => 'Campaign is public.',\n        'title'     => 'Public campaign',\n    ],\n    'setup'             => [\n        'done'                  => 'Public campaign settings filled.',\n        'prioritise'            => 'Prioritise this campaign',\n        'prioritise_conflict'   => 'You can only prioritise one campaign at a time. Disable prioritisation on :campaign first.',\n        'prioritise_help'       => 'Prioritised campaigns appear at the top of the public campaign list, ahead of other open campaigns.',\n        'prioritise_upgrade'    => 'This feature is exclusive to :link subscribers.',\n        'prioritised'           => 'Prioritised campaign',\n        'setup'                 => 'Set up public campaign settings to open campaign to the public.',\n        'success'               => 'Campaign setup saved. Once all fields are filled out, the campaign can be opened to the public.',\n        'success_complete'      => 'The campaign can be opened to the public!',\n        'title'                 => 'Public campaign setup',\n        'tutorial'              => 'Only once all of these fields are filled out can the campaign be open to the public.',\n    ],\n    'timezone'          => 'Timezone and Language',\n    'title'             => 'Join requests',\n    'toggle'            => [\n        'closed'        => 'Closed to applications',\n        'label'         => 'Status',\n        'open'          => 'Open to applications',\n        'success'       => 'Campaign application status updated.',\n        'success_open'  => 'The campaign is now public and users can apply to join it.',\n        'title'         => 'Application status',\n    ],\n    'tutorial'          => 'Campaign applications let people request access to this campaign. Applicants submit a short form, and admin can review, accept, or decline each request. Approved users are added to the campaign with the role you assign during review.',\n    'update'            => [\n        'approve'   => 'Select the role the user will be added as in the campaign.',\n        'approved'  => 'Application approved.',\n        'reject'    => 'Write an optional message to the user as to why you are rejecting their application.',\n        'rejected'  => 'Application rejected',\n    ],\n    'warnings'          => [\n        'applications_closed'   => 'Applications are currently closed.',\n        'filters_incomplete'    => 'Campaign filters are incomplete.',\n    ],\n    'weekdays'          => [\n        'fri'   => 'Fri',\n        'mon'   => 'Mon',\n        'sat'   => 'Sat',\n        'sun'   => 'Sun',\n        'thu'   => 'Thu',\n        'tue'   => 'Tue',\n        'wed'   => 'Wed',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'      => 'Visually build a theme for the campaign with this interface. Scroll down to see how the changes would impact various elements of the campaign. When a colour is selected, a \"contrasting\" colour is automatically selected for colouring text. Learn more about theming in our :docs.',\n    'pitch'     => 'Psst, we have a theme builder if all you want to do is change some of the colours of the campaign 😉',\n    'pitch-go'  => 'Take me to the theme builder',\n    'reset'     => 'Theme builder styling reset.',\n    'success'   => 'Theme builder styling saved.',\n    'title'     => 'Theme builder',\n];\n"
  },
  {
    "path": "lang/en/campaigns/categories.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'permission-disabled'   => 'This category is disabled.',\n    ],\n    'helpers'   => [\n        'aliases'   => 'Add aliases and secret identities to entries of the world.',\n        'media'     => 'Upload media documents (images, pdfs, audio) and external links to entries.',\n    ],\n    'tab'       => 'Categories',\n];\n"
  },
  {
    "path": "lang/en/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Billboard updated.',\n        'title'     => 'Update billboard',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'New placeholder',\n    ],\n    'call-to-action'    => 'Give every character, location, or other category a default thumbnail, so your lists never look empty.',\n    'create'            => [\n        'error'     => 'Error saving the new placeholder image. Is :type already set?',\n        'helper'    => 'Upload an image that will be used as the placeholder image for entries of the selected category.',\n        'success'   => 'New placeholder for :type created.',\n        'title'     => 'New placeholder image',\n    ],\n    'destroy'           => [\n        'success'   => 'Placeholder image for :type removed.',\n    ],\n    'empty'             => 'No categories currently have a placeholder image.',\n    'helper'            => 'Used for all entries of this category without an image.',\n    'reset'             => [\n        'helper'    => 'Are you sure you want to remove the placeholder images for all campaign categories?',\n        'success'   => 'Successfully removed all categories\\' placeholder images.',\n        'title'     => 'Reset placeholder images',\n        'warning'   => 'This action is permanent and cannot be undone.',\n    ],\n    'title'             => 'Placeholder images',\n    'tutorial'          => 'Set default images for entries without custom pictures. These thumbnails appear immediately across the campaign and keep lists visually consistent.',\n];\n"
  },
  {
    "path": "lang/en/campaigns/defaults.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'character_personality_visibility'  => 'Default character personality visibility',\n        'connections'                       => 'Entry relations view',\n        'connections_mode'                  => 'Relation map style',\n        'descendants'                       => 'Sublist filtering default',\n        'entity_privacy'                    => 'New entry visibility',\n        'gallery_visibility'                => 'Default gallery image visibility',\n        'post_collapsed'                    => 'New article layout',\n        'private_mention_visibility'        => 'Private entry mentions',\n        'related_visibility'                => 'Related content visibility',\n    ],\n    'helpers'   => [\n        'character_visibility'          => 'Sets visibility for personality traits when creating characters.',\n        'connections'                   => 'Choose whether entry relation pages show a visual map or a list by default.',\n        'connections_mode'              => 'Set the default layout style for relation maps (available with premium).',\n        'descendants'                   => 'When viewing entry sublists (like a location\\'s characters), show only direct children or all descendants.',\n        'display'                       => 'Set default display options for entry pages.',\n        'entity'                        => 'Controls what visibility Kanka applies automatically to new content.',\n        'entity_privacy'                => 'Sets visibility for newly created characters, locations, etc.',\n        'gallery_visibility'            => 'Default visibility value when uploading images to the gallery.',\n        'post_collapsed'                => 'When creating articles, set the article as collapsed or expanded.',\n        'privacy'                       => 'Set default visibilities for new content. These settings apply when you create new content and can be changed for individual items.',\n        'private_mention_visibility'    => 'When you mention a private entry in visible content, control whether the entry name is shown or hidden.',\n        'related_visibility'            => 'Controls visibility for articles, properties, relations added to entries.',\n    ],\n    'sections'  => [\n        'display'   => 'Entry Display Defaults',\n        'entity'    => 'Entry defaults',\n        'media'     => 'Media defaults',\n        'mention'   => 'Mention behaviour',\n    ],\n    'tutorial'  => 'Streamline content creation with smart defaults. Choose default visibility settings for entries, articles, images, and other content. These preferences will be automatically applied when you create new content, saving you time while keeping your campaign organised.',\n    'update'    => [\n        'success'   => 'Campaign defaults updated.',\n    ],\n    'values'    => [\n        'collapsed'     => [\n            'collapsed' => 'Collapsed',\n            'default'   => 'Default',\n            'expanded'  => 'Expanded',\n        ],\n        'connections'   => [\n            'explorer'  => 'Relation map (premium)',\n            'list'      => 'List interface',\n        ],\n        'descendants'   => [\n            'all'       => 'Show all descendants by default',\n            'direct'    => 'Show direct descendants by default',\n        ],\n        'mentions'      => [\n            'private'   => 'Hide target name',\n            'visible'   => 'Show target name',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/delete.php",
    "content": "<?php\n\nreturn [\n    'backup'            => 'backup',\n    'confirm'           => 'If you are sure you want to permanently delete :campaign, write :code in the field below.',\n    'confirm-button'    => 'Permanently delete :name',\n    'helper'            => 'Deleting a campaign is a permanent action that cannot be reverted. This will remove all of the data related to the campaign from our servers, including images and assets. We recommend making a :backup before continuing.',\n    'issue'             => 'The following issue needs to be fixed before the campaign can be deleted.',\n    'members'           => 'All other members need to be removed from the campaign.',\n    'success'           => ':name was permanently deleted.',\n    'title'             => 'Deletion',\n];\n"
  },
  {
    "path": "lang/en/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'download'  => 'Download',\n        'export'    => 'Export the campaign',\n    ],\n    'confirm'   => [\n        'notification'  => 'Members of the :admin role will be notified when the export is ready for download.',\n        'title'         => 'Export :name',\n        'type'          => 'Export type',\n        'warning'       => 'You are about to export all data from :name. This may take a few minutes depending on campaign size. You\\'ll receive a notification when it\\'s ready and can continue using Kanka in the meantime.',\n    ],\n    'errors'    => [\n        'limit'     => 'The campaign has already been exported once today. Please try again tomorrow.',\n        'premium'   => 'Markdown export is a feature exclusive to premium campaigns.',\n    ],\n    'expired'   => 'Link expired',\n    'helpers'   => [\n        'json'      => 'For backup & restoring - can be used as a campaign import',\n        'markdown'  => 'For sharing & reading - human readable format',\n        'premium'   => 'Available for premium campaigns only.',\n    ],\n    'progress'  => 'Progress',\n    'size'      => 'Size',\n    'status'    => [\n        'failed'    => 'Failed',\n        'finished'  => 'Finished',\n        'running'   => 'Running',\n        'scheduled' => 'Scheduled',\n    ],\n    'success'   => 'The export has been queued for processing. All members of the :admin role will be notified once the file is ready for downloading.',\n    'title'     => 'Export',\n    'type'      => 'Type',\n    'types'     => [\n        'json'  => 'JSON',\n        'md'    => 'Markdown',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close'         => 'Close',\n        'file-link'     => 'File link',\n        'focus_point'   => 'Focus point',\n        'image-link'    => 'Image link',\n        'reset_focus'   => 'Reset focus point',\n        'save'          => 'Save',\n        'upgrade'       => 'Upgrade storage space',\n    ],\n    'breadcrumb'    => 'Gallery',\n    'bulk'          => [\n        'destroy'   => [\n            'confirm'   => 'Are you sure you want to permanently remove the selected elements? This action cannot be undone.',\n            'success'   => '{0}No files removed.|{1}One file removed.|{2,*} :count files removed.',\n        ],\n    ],\n    'cta'           => 'Manage and reuse images throughout the campaign.',\n    'destroy'       => [\n        'folder'    => 'Folder :name deleted.',\n        'success'   => 'File :name deleted.',\n    ],\n    'errors'        => [\n        'max'           => 'Please only select up to :count files at a time.',\n        'permissions'   => 'Your roles are missing the :permission permission to be allowed to upload images to the gallery.',\n        'storage'       => 'There is not enough storage space to upload the selected image(s). Available storage space: :available.',\n    ],\n    'fields'        => [\n        'created_by'            => 'Uploaded by',\n        'details'               => 'Details',\n        'ext'                   => 'Ext',\n        'file_type'             => 'File type',\n        'folder'                => 'Folder',\n        'image_mentioned_in'    => '{0} This image isn\\'t mentioned in any entry.|{1} Mentioned in one entry/article.|[2,*] mentioned in :count entries/articles.',\n        'image_used_in'         => '{0} This image isn\\'t used in any entry.|{1} Used as the image of one entry.|[2,*] Used as the image of :count entries.',\n        'link'                  => 'Link',\n        'name'                  => 'Name',\n        'size'                  => 'Size',\n        'unused'                => 'Not used anywhere',\n        'used_in'               => 'Used in',\n    ],\n    'focus'         => [\n        'locked'    => 'A premium campaign is required to set the focus point of an image.',\n        'removed'   => 'Image focus removed.',\n        'updated'   => 'Image focus updated.',\n    ],\n    'new_folder'    => [\n        'title' => 'New folder',\n    ],\n    'no_folder'     => 'No folder',\n    'pitch'         => 'Upload images to the gallery directly from the text editor.',\n    'placeholders'  => [\n        'search'    => 'Search image name...',\n    ],\n    'storage'       => [\n        'of'    => 'of',\n        'title' => 'Storage',\n    ],\n    'title'         => 'Campaign :campaign Gallery',\n    'update'        => [\n        'folder'    => 'Folder modified.',\n        'success'   => 'File modified.',\n    ],\n    'uploader'      => [\n        'add'           => 'Add new',\n        'new_folder'    => 'New Folder',\n        'or'            => 'or',\n        'select_file'   => 'Select a file',\n        'well'          => 'Drop file to upload',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/import.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'import'    => 'Upload the export',\n    ],\n    'csv'               => [\n        'continue'          => 'Continue',\n        'fields_helper'     => 'Select a column to assign to each of the fillable fields of the entry.',\n        'no_preview'        => 'No preview data available',\n        'preview'           => 'Preview',\n        'select_module'     => 'Category selection',\n        'select_one'        => 'Select one',\n        'selected_tags'     => 'Selected tags',\n        'set_column'        => 'Set column',\n        'set_fields'        => 'Set fields',\n        'submit'            => 'Submit CSV import',\n        'traits'            => 'Character Traits',\n        'traits_helper'     => 'You can add traits to characters, the header you select will be used as the trait, while its corresponding row value will be the traits value as well.',\n        'type_helper'       => 'Select the category you want to import the new entries into.',\n        'validation_error'  => 'At least 1 column must be fully populated',\n    ],\n    'description_v2'    => 'Import entries, articles, properties, galleries, and other data from an export  or new entries from a .CSV file into this campaign. The import runs in the background and may take some time. You and any other  admins will be notified when it finishes.',\n    'fields'            => [\n        'file_v2'   => 'CSV file or export ZIP file',\n        'updated'   => 'Last updated',\n    ],\n    'form'              => 'Upload form',\n    'limitation_v2'     => 'Only zip and csv files are accepted. Max :size.',\n    'progress'          => [\n        'uploading' => 'Uploading',\n    ],\n    'status'            => [\n        'failed'        => 'Failed',\n        'finished'      => 'Finished',\n        'invalid'       => 'Invalid Data',\n        'processing'    => 'Processing',\n        'queued'        => 'Queued',\n        'ready'         => 'Ready for mapping',\n        'running'       => 'Running',\n        'validating'    => 'Validating',\n    ],\n    'subscription'      => [\n        'pitch' => 'Restore a campaign backup or bring in an export from another campaign. Available on :wyvern or :elemental plans.',\n    ],\n    'title'             => 'Import',\n];\n"
  },
  {
    "path": "lang/en/campaigns/invites.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Create an invite link to send to your players, so that they can join the campaign.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'pitch' => 'Free campaigns can have up to :limit :thing. Premium campaigns get unlimited :thing, or you can remove one to make room.',\n    'title' => 'Limit reached',\n];\n"
  },
  {
    "path": "lang/en/campaigns/logs.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'list'      => 'This page shows a record of major changes in this campaign for up to :amount days. Logs capture high-level actions, not detailed field-by-field edits.',\n        'nothing'   => 'There are no logs to show. Please keep in mind that logs are only kept for up to :amount days.',\n        'title'     => 'No logs',\n    ],\n    'pitch'     => 'See who changed what across your campaign, with up to :amount days of history.',\n    'premium'   => [\n        'helper'    => 'Upgrade to premium to see your full campaign history.',\n    ],\n    'title'     => 'Audit log',\n];\n"
  },
  {
    "path": "lang/en/campaigns/members.php",
    "content": "<?php\n\nreturn [\n    'overview'  => [\n        'limited'   => ':amount of :total members.',\n        'title'     => 'Available members',\n        'unlimited' => ':amount of unlimited members.',\n    ],\n    'roles'     => [\n        'admin'     => 'You cannot directly add users to the :admin role here. That happens in the :admin role\\'s interface.',\n        'helper'    => 'Add or remove roles of the member :user.',\n        'success'   => 'Roles successfully updated for :user.',\n        'title'     => 'Edit member roles',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/modules.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Create a category',\n        'customise' => 'Customise',\n    ],\n    'create'        => [\n        'helper'    => 'Create a new custom category to store entries that don\\'t fit in the other categories.',\n        'success'   => 'New category created.',\n        'title'     => 'New category',\n    ],\n    'delete'        => [\n        'confirm'           => 'Write :code if you are sure you want to permanently delete the :name custom category.',\n        'confirm-button'    => '{0} Permanently delete :name|{1} Permanently delete :name and :count entry|[2,*] Permanently delete :name and :count entries',\n        'entities'          => '{1} This will permanently delete :count entry.|[2,*] This will permanently delete :count entries.',\n        'helper'            => 'Are you sure you want to remove the :name custom category? This will also permanently delete all entries, bookmarks and widgets linked to this category.',\n        'success'           => 'Category :name deleted.',\n        'title'             => 'Category deletion',\n    ],\n    'errors'        => [\n        'disabled'              => 'The :name category is disabled. :fix',\n        'empty-custom'          => 'Add custom categories to organise data that doesn\\'t fit in the default ones.',\n        'limit'                 => 'Campaigns are currently limited to only :max custom categories while we iron out this new feature.',\n        'limit-title'           => 'Custom category limit reached',\n        'subscription-limit'    => 'The campaign has reached the maximum amount of custom categories available. The person unlocking premium features can subscribe to a higher tier to increase this limit.',\n    ],\n    'fields'        => [\n        'icon'          => 'Category icon',\n        'image'         => 'Placeholder image',\n        'plural'        => 'Category plural name',\n        'singular'      => 'Category singular name',\n        'status'        => 'Category status',\n        'update_name'   => 'Rename category bookmark with new name',\n    ],\n    'helpers'       => [\n        'custom'    => 'This is a custom category.',\n        'icon'      => 'Give this category a special :fontawesome icon, for example :example.',\n        'plural'    => 'Used in navigation and lists (.e.g, \"view all potions\")',\n        'roles'     => 'Select roles that should have permission to view entries of this new category. This can later be changed in the role permissions.',\n        'singular'  => 'Used when referring to a single item (e.g., \"new potion\")',\n        'status'    => 'Disabled categories are hidden from navigation and menus. No data is deleted.',\n        'tutorial'  => 'Categories control which features are visible in the campaign. Enable the ones you use and hide the rest. Turning a category off never deletes data; it only removes it from navigation and creation menus.',\n    ],\n    'pitch'         => 'Rename this category and choose a custom icon to better match your theme and style. Perfect for tailoring the experience to your world and players.',\n    'pitch-custom'  => 'Create custom category for any of your world\\'s needs. Track deities, potions, succession laws, or whatever makes your campaign unique. Premium gives you complete flexibility.',\n    'pitch-title'   => 'Unlock custom categories',\n    'rename'        => [\n        'helper'    => 'Customise how this category appears throughout the campaign. Leave fields blank to use default values.',\n        'success'   => 'Category customised.',\n        'title'     => 'Customise :module',\n    ],\n    'reset'         => [\n        'default'   => 'This will only reset the default categories, not any custom ones.',\n        'success'   => 'The campaign categories have been reset.',\n        'title'     => 'Reset custom category names and icons',\n        'warning'   => 'Are you sure you want to reset the campaign categories to their original names and icons?',\n    ],\n    'sections'      => [\n        'custom'        => 'Custom categories',\n        'default'       => 'Default categories',\n        'early-access'  => 'Early access',\n        'features'      => 'Features',\n    ],\n    'states'        => [\n        'disable'   => 'Disable',\n        'disabled'  => 'Category is disabled',\n        'enable'    => 'Enable',\n        'enabled'   => 'Category is enabled',\n    ],\n    'status'        => [\n        'enabled'   => 'Category enabled',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/overview.php",
    "content": "<?php\n\nreturn [\n    'followers' => [\n        'title' => 'Followers',\n    ],\n    'member'    => [\n        'title' => 'Membership',\n    ],\n    'premium'   => [\n        'enable'    => 'Enable premium features',\n    ],\n    'status'    => [\n        'title' => 'Visibility',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/permissions.php",
    "content": "<?php\n\nreturn [\n    'labels' => [\n        'whiteboards' => [\n\n        ]\n    ]\n];\n"
  },
  {
    "path": "lang/en/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'Disable themes',\n            'enable'    => 'Enable themes',\n            'update'    => 'Update plugins',\n        ],\n        'changelog'         => 'Changelog',\n        'disable'           => 'Disable theme',\n        'enable'            => 'Enable theme',\n        'find-plugins'      => 'Find plugins',\n        'import'            => 'Import',\n        'update'            => 'Update plugin',\n        'update-to'         => 'Update to version :version',\n        'update_available'  => 'Update available',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Removed :count plugin.|[2,*] Removed :count plugins.',\n        'disable'   => '{1} Disabled :count theme.|[2,*] Disabled :count themes.',\n        'enable'    => '{1} Enabled :count themes.|[2,*] Enabled :count themes.',\n        'update'    => '{1} Updated :count plugin.|[2,*] Updated :count plugins.',\n    ],\n    'destroy'       => [\n        'success'   => 'Plugin :plugin removed.',\n    ],\n    'disabled'      => [\n        'success'   => 'Plugin :plugin disabled.',\n    ],\n    'empty_list'    => 'The campaign doesn\\'t currently have any plugins. Go to the plugin library to install a few and come back to activate them.',\n    'enabled'       => [\n        'success'   => 'Plugin :plugin enabled.',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Invalid plugin.',\n    ],\n    'fields'        => [\n        'name'      => 'Plugin',\n        'obsolete'  => 'This plugin has been marked as obsolete by the Kanka team, meaning it no longer works as originally intended by its author.',\n        'status'    => 'Status',\n        'type'      => 'Type',\n    ],\n    'import'        => [\n        'button'                => 'Import',\n        'created'               => 'Created the following entries:',\n        'fields'                => [\n            'only_new'  => 'Only new entries',\n            'private'   => 'Private entries',\n        ],\n        'helper'                => 'You are about to import :count entries from the :plugin plugin. If this plugin was previously imported, changes you have since made to the imported entries may be lost.',\n        'no_new_entities'       => 'There are no new entries to be imported.',\n        'option_only_import'    => 'Only import new entries, skipping previously imported entries.',\n        'option_private'        => 'Import all entries as private.',\n        'success'               => '{1} Imported :count entry from the plugin :plugin.|[2,*] Imported :count entries from the plugin :plugin.',\n        'title'                 => 'Import content pack',\n        'updated'               => 'Updated the following entries:',\n    ],\n    'info'          => [\n        'description'   => 'Showing the latest updates for the :plugin plugin.',\n        'helper'        => 'When a new version of a plugin is released, you can update it to the latest version for the campaign.',\n        'installed'     => 'Installed',\n        'title'         => 'Plugin :plugin updates',\n        'updates'       => 'Updates',\n        'versions'      => 'Versions',\n    ],\n    'pitch'         => 'Extend your campaign with community-built themes, character sheets, and content from the :marketplace.',\n    'status'        => [\n        'always'    => 'This plugin type is always active unless removed.',\n        'disabled'  => 'Disabled',\n        'enabled'   => 'Enabled',\n    ],\n    'templates'     => [\n        'name'  => ':name by :user',\n    ],\n    'title'         => 'Plugins - :name',\n    'types'         => [\n        'attribute' => 'Character Sheet',\n        'pack'      => 'Content Pack',\n        'theme'     => 'Theme',\n    ],\n    'update'        => [\n        'success'   => 'Plugin :plugin updated.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'new'           => 'Make it public for the community to discover, or keep it private for invited members only.',\n        'permissions'   => 'Making your campaign public doesn\\'t automatically share content. Configure what public viewers can see in the :public role settings.',\n    ],\n    'title'     => 'Control who can access the campaign',\n    'update'    => [\n        'private'   => 'The campaign is now private, and only visible to members of it.',\n        'public'    => 'The campaign is now public. It might take some time to appear in the :public-campaigns page.',\n        'unlisted'  => 'The campaign is now unlisted. Anyone with a link can access it, but it won\\'t show up in the :public-campaigns page.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'           => 'Recover',\n        'recover_selected'  => 'Recover selected',\n    ],\n    'error'     => 'An error occurred trying to recover entries.',\n    'fields'    => [\n        'deleted'       => 'Deleted',\n        'deleted_at'    => 'Deleted :date by :user',\n    ],\n    'name_link' => ':name was successfully recovered',\n    'order'     => [\n        'newest'        => 'Order by: Newest',\n        'newest_first'  => 'Newest first',\n        'oldest'        => 'Order by: Oldest',\n        'oldest_first'  => 'Oldest first',\n        'type'          => 'Order by: Type',\n        'type_order'    => 'Type',\n    ],\n    'premium'   => 'Recovering elements is a premium campaign feature.',\n    'success_v2'=> '{1} :count element was recovered.|[2,*] :count elements were recovered.',\n    'title'     => 'Recovery',\n    'tutorial'  => 'View and restore recently deleted elements. Entries, articles, and other supporting data can be recovered for :amount days before they are permanently removed. Restoring a element returns it with all its data intact.',\n];\n"
  },
  {
    "path": "lang/en/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'status'    => 'Visibility: :status',\n    ],\n    'create'        => [\n        'helper'    => 'Create a new role for the campaign.',\n    ],\n    'overview'      => [\n        'limited'   => ':amount of :total roles created.',\n        'title'     => 'Available roles',\n        'unlimited' => ':amount of unlimited roles created.',\n    ],\n    'permissions'   => [\n        'campaign-features' => 'Features',\n        'content-modules'   => 'Content categories',\n        'toggle'            => [\n            'action'    => 'Toggle all',\n            'tooltip'   => 'Toggle the :action permission for all categories.',\n        ],\n    ],\n    'public'        => [\n        'helpers'   => [\n            'click'     => 'Click any category to toggle public access to all entries within it.',\n            'intro'     => 'Control what non-members can see in the campaign.',\n            'main'      => 'Select which categories are visible to anyone viewing the campaign, whether they\\'re logged in or not. This includes both public visitors and Kanka users who aren\\'t campaign members.',\n            'preview'   => 'Preview as non-member',\n        ],\n    ],\n    'show'          => [\n        'title' => ':role permissions - :campaign',\n    ],\n    'toggle'        => [\n        'disabled'  => 'Members of the :role role can no longer :action :entities',\n        'enabled'   => 'Members of the :role role can now :action :entities',\n    ],\n    'warnings'      => [\n        'adding-to-admin'   => 'Members of the :name role have access to everything in the campaign, and cannot be removed by other members of the role. After :amount minutes, only they can remove themselves from the role.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/share.php",
    "content": "<?php\n\nreturn [\n    'buttons'   => [\n        'change_visibility' => 'Change visibility',\n        'copy'              => 'Copy link',\n        'copy_public_link'  => 'Copy public link',\n        'make_public'       => 'Make public and copy link',\n    ],\n    'helpers'   => [\n        'private_explanation'   => 'Only members can access private campaigns.',\n        'public_explanation'    => 'This campaign is public. Anyone with the link can browse it.',\n        'unlisted_explanation'  => 'Anyone with the link can browse this campaign, but it doesn\\'t appear in public directories.',\n    ],\n    'labels'    => [\n        'member_link'   => 'Only members can open this',\n        'public_link'   => 'Public link',\n    ],\n    'status'    => [\n        'private'   => 'Private campaign',\n        'public'    => 'Anyone with the link can view this campaign',\n    ],\n    'success'   => [\n        'copied_members'    => 'Member-only link copied.',\n        'copied_public'     => 'Public link copied, anyone with the link can view.',\n        'made_public'       => 'Campaign is now public.',\n    ],\n    'title'     => 'Share campaign',\n];\n"
  },
  {
    "path": "lang/en/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Reset to default',\n    ],\n    'call-to-action'    => 'Reorganise, rename, and restyle your sidebar to match how you run your campaign.',\n    'helpers'           => [\n        'bookmarks' => 'Bookmarks are not listed here because each bookmark has its own :position setting that controls where it appears in the sidebar.',\n        'image'     => 'Add an image to represent the campaign. This image will be used in the sidebar and in the campaign switcher interface. You can change this at any time by editing the campaign.',\n        'reordering'=> 'Reorder the sidebar by dragging the icons on the left of each item.',\n    ],\n    'image-success'     => 'The new campaign image has been saved. This image can be changed again by editing the campaign.',\n    'reset'             => [\n        'success'   => 'Campaign sidebar setup reset.',\n        'title'     => 'Reset sidebar setup',\n        'warning'   => 'Are you sure you want to reset the sidebar setup to the default values?',\n    ],\n    'success'           => 'Campaign sidebar setup saved.',\n    'title'             => 'Campaign :campaign sidebar setup',\n    'tooltips'          => [\n        'image' => 'Change this background image',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Calendars',\n            'title' => 'Time Keeper',\n        ],\n        'murderer'  => [\n            'goal'  => 'Dead characters',\n            'title' => 'Murderer',\n        ],\n    ],\n    'fields'        => [\n        'created'       => 'Created on',\n        'creator'       => 'Created by',\n        'entries'       => 'Total entries',\n        'from-elements' => 'From elements',\n        'from-entities' => 'From entries',\n        'from-posts'    => 'From articles',\n        'general'       => 'General',\n        'words'         => 'Total words',\n    ],\n    'title2'        => 'Statistics',\n    'titles'        => [\n        'calendars' => 'Time Keeper level :level',\n        'characters'=> 'Name Giver level :level',\n        'dead'      => 'Murderer level :level',\n        'families'  => 'Family Planning level :level',\n        'locations' => 'Builder level :level',\n        'quests'    => 'Mastermind level :level',\n        'races'     => 'Breeder level :level',\n    ],\n    'tutorial'      => 'Campaign statistics show entry counts and recent activity. Data updates every :amount hours. Use this to track growth and usage over time.',\n];\n"
  },
  {
    "path": "lang/en/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'builder'   => 'Theme Builder',\n        'current'   => 'Current theme: :theme',\n        'disable'   => 'Disable',\n        'enable'    => 'Enable',\n        'new'       => 'New style',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Removed :count style.|[2,*] Removed :count styles.',\n        'disable'   => '{1} Disabled :count style.|[2,*] Disabled :count styles.',\n        'enable'    => '{1} Enabled :count style.|[2,*] Enabled :count styles.',\n    ],\n    'create'        => [\n        'success'   => 'New style created.',\n        'title'     => 'New style',\n    ],\n    'delete'        => [\n        'success'   => 'Style :name deleted.',\n    ],\n    'errors'        => [\n        'max_content'   => 'The CSS rule can\\'t be longer than :amount characters.',\n        'max_reached'   => 'Max number of styles (:max) reached.',\n    ],\n    'fields'        => [\n        'content'       => 'CSS rule',\n        'is_enabled'    => 'Enabled',\n        'length'        => 'Length',\n        'modified'      => 'Modified',\n        'name'          => 'Name',\n        'order'         => 'Order',\n    ],\n    'helpers'       => [\n        'here'          => 'on our blog',\n        'is_enabled'    => 'Enable this theme on every page.',\n        'main'          => 'You can create custom CSS styling for your premium campaign. These styles are loaded after any themes from the plugin library that are enabled for the campaign. You can learn more about styling your campaign :here.',\n        'tutorial'      => 'Control the visual style of the campaign. Choose colors, layout preferences, and other presentation options. These changes affect only this campaign and can be updated at any time.',\n    ],\n    'pitch'         => 'Make your campaign look and feel entirely your own with custom CSS.',\n    'placeholders'  => [\n        'name'  => 'Name of the style',\n    ],\n    'reorder'       => [\n        'save'      => 'Save new order',\n        'success'   => '{1} Reordered :count style.|[2,*] Reordered :count styles.',\n        'title'     => 'Reorder styles',\n    ],\n    'theme'         => [\n        'none'      => 'Use user\\'s preference',\n        'override'  => 'Theme override',\n        'success'   => 'Theme override updated.',\n        'title'     => 'Update the theme override',\n    ],\n    'title'         => 'Theming',\n    'toggle'        => [\n        'disable'   => 'Style disabled successfully.',\n        'enable'    => 'Style enabled successfully.',\n    ],\n    'update'        => [\n        'success'   => 'Style :name updated.',\n        'title'     => 'Update style',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/vanity.php",
    "content": "<?php\n\nreturn [\n    'available' => 'The name :vanity is available!',\n    'forever'   => 'Once set, this cannot be changed. :docs',\n    'helper-v2' => 'Give the campaign a memorable, custom web address. Instead of :default, the campaign could appear as: :example',\n    'rule'      => 'The :field field needs at least one alphabetical character.',\n    'rule2'     => 'The :field field doesn\\'t allow the following character: /.',\n    'set'       => 'The campaign\\'s vanity URL is permanently set to :vanity.',\n];\n"
  },
  {
    "path": "lang/en/campaigns/visibilities.php",
    "content": "<?php\n\nreturn [\n    'directory' => [\n        'public'    => 'Listed in public campaigns',\n        'unlisted'  => 'Hidden from public campaigns',\n    ],\n    'helpers'   => [\n        'premium'   => 'To enable this setting, premium features need to be unlocked for this campaign.',\n        'private'   => 'Only invited members can access',\n        'public'    => 'Anyone with a link can view',\n    ],\n    'titles'    => [\n        'private'   => 'Private',\n        'public'    => 'Public',\n        'unlisted'  => 'Public (unlisted)',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns/webhooks.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'action'    => 'Change status',\n        'add'       => 'Create webhook',\n        'bulks'     => [\n            'delete_success'    => '{1} Deleted :count webhook.|[2,*] Deleted :count webhooks.',\n            'disable'           => 'Disable',\n            'disable_success'   => '{1} Disabled :count webhook.|[2,*] Disabled :count webhooks.',\n            'enable'            => 'Enable',\n            'enable_success'    => '{1} Enabled :count webhook.|[2,*] Enabled :count webhooks.',\n        ],\n        'test'      => 'Test webhook',\n        'update'    => 'Update webhook',\n    ],\n    'create'        => [\n        'success'   => 'Webhook created successfully',\n        'title'     => 'Add new webhook',\n    ],\n    'destroy'       => [\n        'success'   => 'Webhook deleted successfully',\n    ],\n    'edit'          => [\n        'success'   => 'Webhook updated successfully',\n        'title'     => 'Update webhook',\n    ],\n    'error'         => [\n        'pitch' => 'Unlock premium features to access webhooks.',\n    ],\n    'fields'        => [\n        'enabled'           => 'Enabled',\n        'event'             => 'Event',\n        'events'            => [\n            'deleted'   => 'Deleted entry',\n            'edited'    => 'Edited entry',\n            'new'       => 'New entry',\n        ],\n        'message'           => 'Message',\n        'private_entities'  => [\n            'helper'    => 'Don\\'t trigger the webhook when updating private entries.',\n            'skip'      => 'Skip private entries',\n        ],\n        'type'              => 'Type',\n        'types'             => [\n            'custom'    => 'Message',\n            'payload'   => 'Payload',\n        ],\n        'url'               => 'Url',\n    ],\n    'helper'        => [\n        'active'    => 'The webhook is active and will trigger on the selected event.',\n        'message'   => 'Add a custom message with support for mappings',\n        'status'    => 'Toggle the active status of the webhook',\n        'tutorial'  => 'Use webhooks to send real-time updates from the campaign to external tools. Events trigger automatically when entries are created, updated, or deleted. You can add multiple webhooks and test them from this page.',\n    ],\n    'placeholders'  => [\n        'message'   => '{who} made changes to {name}, check it out at {url}',\n        'url'       => 'Target webhook\\'s url',\n    ],\n    'premium'       => 'Get notified in Discord or other apps when your campaign changes, for new entries, updates, and more.',\n    'test'          => [\n        'success'   => 'Test request sent.',\n    ],\n    'title'         => 'Webhooks',\n    'toggle'        => [\n        'disable'   => 'Webhook disabled successfully.',\n        'enable'    => 'Webhook enabled successfully.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/campaigns.php",
    "content": "<?php\n\nreturn [\n    'create'                            => [\n        'success'   => ':name created.',\n        'title'     => 'New Campaign',\n    ],\n    'edit'                              => [\n        'success'   => ':name updated.',\n    ],\n    'entity_personality_visibilities'   => [\n        'private'   => 'New characters have their personality private by default.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'New entries are private',\n    ],\n    'errors'                            => [\n        'access'        => 'You don\\'t have access to this campaign.',\n        'premium'       => 'This feature is only available to premium campaigns.',\n        'unknown_id'    => 'Unknown campaign.',\n    ],\n    'exports'                           => [],\n    'fields'                            => [\n        'billboard'                 => 'Billboard description',\n        'boosted'                   => 'Boosted by',\n        'entity_count'              => 'Number of entries',\n        'entry'                     => 'Description of the world',\n        'followers'                 => 'Followers',\n        'genre'                     => 'Genres',\n        'header_image'              => 'Billboard background image',\n        'image'                     => 'Sidebar image',\n        'locale'                    => 'Content language',\n        'name'                      => 'Name',\n        'open'                      => 'Open to applications',\n        'premium'                   => 'Premium unlocked by :name',\n        'public'                    => 'Campaign visibility',\n        'public_campaign_filters'   => 'Discovery settings',\n        'superboosted'              => 'Superboosted by',\n        'system'                    => 'Game system',\n        'theme'                     => 'Theme',\n        'vanity'                    => 'Custom URL',\n    ],\n    'following'                         => 'Following',\n    'helpers'                           => [\n        'boosted'                   => 'Some features are unlocked because this campaign is being boosted. Find out more on the :settings page.',\n        'css'                       => 'Write your own CSS that will be loaded into the pages of your campaign. Please note that any abuse of this feature can lead to a removal of your custom CSS. Repeated or grave offenses can lead to a removal of your campaign.',\n        'dashboard'                 => 'Customise the way the billboard dashboard widget is displayed by filling out the following fields.',\n        'excerpt'                   => 'The contents of this field will be displayed on the dashboard in the billboard widget, so write a few sentences introducing your world. If this field is empty, the first 1000 characters of the description field will be used instead.',\n        'header_image'              => 'Image displayed as a background in the Billboard dashboard widget.',\n        'hide_history'              => 'If enabled, only members of the :admin role will have access to an entry\\'s history (log of changes).',\n        'hide_members'              => 'If enabled, only members of the :admin role will have access to the list of the members.',\n        'locale'                    => 'The language the campaign is written in. This is used for generating content and grouping public campaigns.',\n        'name'                      => 'Your campaign/world can have any name as long as it contains at least 4 letters or numbers.',\n        'no_entry'                  => 'Looks like the campaign doesn\\'t have a description yet! Let\\'s fix that.',\n        'premium'                   => 'Some features require premium features to be unlocked. Learn more about :settings.',\n        'public_campaign_filters'   => 'Help others find the campaign among other public campaigns by providing the following information.',\n        'public_no_visibility'      => 'Heads up! The campaign is public, but the :public role can\\'t access anything. :fix.',\n        'system'                    => 'If the campaign is publicly visible, the system is shown in the :link page.',\n        'systems'                   => 'To avoid cluttering users with options, some features of Kanka are only available with specific RPG systems (ie the D&D 5e monster stat block). Adding supported systems here will enable those features.',\n        'theme'                     => 'Force the theme for the campaign, overriding a user\\'s preference.',\n        'view_public'               => 'To view the campaign as a public viewer would, open :link in an incognito window.',\n    ],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Copy the link to your clipboard',\n            'link'  => 'Invite people',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Generate link',\n            ],\n            'success_link'  => 'Link created: :link',\n            'title'         => 'Invite friends to :campaign',\n        ],\n        'destroy'               => [\n            'success'   => 'Invitation removed.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'This token has already been used, or the campaign no longer exists.',\n            'invalid_token'     => 'This token is no longer valid.',\n            'join'              => 'Please log in or register a new account to join :campaign.',\n        ],\n        'fields'                => [\n            'created'   => 'Created',\n            'role'      => 'Role',\n            'token'     => 'Token',\n            'type'      => 'Type',\n            'usage'     => 'Expires after',\n        ],\n        'helpers'               => [\n            'role'  => 'Users need to join before they can be promoted to the admin role.',\n            'usage' => 'How many times the invite link can be used before it becomes inactive.',\n        ],\n        'unlimited_validity'    => 'Unlimited',\n        'usages'                => [\n            'five'      => '5 uses',\n            'no_limit'  => 'Never',\n            'once'      => '1 use',\n            'ten'       => '10 uses',\n        ],\n    ],\n    'leave'                             => [\n        'action'            => 'Leave the campaign',\n        'confirm'           => 'Are you sure you want to leave :name? You won\\'t be able to access it anymore, unless one of it\\'s admins invites you again.',\n        'confirm-button'    => 'Yes, leave now',\n        'error'             => 'Can\\'t leave the campaign.',\n        'fix'               => 'Go to the members management',\n        'no-admin-left'     => 'Leaving the campaign isn\\'t possible because doing so would leave it without any admins. Add another member to the admin role first.',\n        'success'           => 'You have left :name.',\n        'title'             => 'Leaving the campaign',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'Remove from campaign',\n            'switch'        => 'View campaign as user',\n            'switch-back'   => 'Back to my account',\n            'switch-entity' => 'View as',\n        ],\n        'fields'                => [\n            'banned'        => 'User is banned',\n            'joined'        => 'Joined',\n            'last_login'    => 'Last Login',\n            'name'          => 'User',\n            'role'          => 'Role',\n            'roles'         => 'Roles',\n        ],\n        'helpers'               => [\n            'switch'    => 'View the campaign as this member',\n        ],\n        'impersonating'         => [\n            'message'   => 'You are viewing and interacting with :campaign as :name. Some features have been disabled, but the rest acts exactly as they would see it.',\n            'title'     => 'Impersonating :name',\n        ],\n        'invite'                => [\n            'description'   => 'Invite friends and players to :campaign by creating an invitation link and sending them the generated URL! Upon accepting their invitation, they will be added as a member in the invitation\\'s requested role.',\n            'more'          => 'More roles can be created on the :link page.',\n            'title'         => 'Invites',\n        ],\n        'removal'               => 'You are removing \":member\" from the campaign.',\n        'roles'                 => [\n            'member'    => 'Member',\n            'owner'     => 'Admin',\n            'player'    => 'Player',\n            'public'    => 'Guest',\n            'viewer'    => 'Viewer',\n        ],\n        'switch_back_success'   => 'Switched back to your account.',\n    ],\n    'overview'                          => [\n        'entity-count'      => '{0} No entries|{1} :amount entry|[2,*] :amount entries',\n        'follower-count'    => '{0} No followers|{1} :amount follower|[2,*] :amount followers',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Dashboard',\n        'privacy'   => 'Privacy defaults',\n        'setup'     => 'Setup',\n        'sharing'   => 'Sharing',\n        'systems'   => 'Systems',\n        'ui'        => 'Interface',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Language code',\n        'name'      => 'The name of your world',\n        'system'    => 'D&D, Pathfinder, Fate, DSA',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Hidden',\n        'private'   => 'Private',\n        'visible'   => 'Visible',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'Campaigns are private by default, and can be made public. This allows anyone to access them, and makes them available in the :public-campaigns page if they have entries visible to the :public-role role. A public campaign is visible to all, but for its content to be visible, the :public-role role needs adequate permissions.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'New role',\n            'duplicate'     => 'Duplicate role',\n            'permissions'   => 'Manage permissions',\n            'rename'        => 'Rename role',\n            'save'          => 'Save role',\n        ],\n        'admin_role'    => 'admin role',\n        'bulks'         => [\n            'delete'    => '{1} Removed :count role.|[2,*] Removed :count roles.',\n            'edit'      => '{1} Updated :count role.|[2,*] Updated :count roles.',\n        ],\n        'create'        => [\n            'success'   => 'Role :name created.',\n            'title'     => 'New role',\n        ],\n        'destroy'       => [\n            'success'   => 'Role :name removed.',\n        ],\n        'edit'          => [\n            'success'   => 'Role :name updated.',\n            'title'     => 'Rename role :name',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Copy permissions',\n            'name'              => 'Name',\n            'permissions'       => 'Permissions',\n            'type'              => 'Type',\n            'users'             => 'Users',\n        ],\n        'helper'        => [\n            '1'                     => 'A campaign is split up into several roles. The :admin role automatically has access to everything in a campaign, but every other role can have specific permissions on different categories (character, location, etc).',\n            '2'                     => 'Entries can have more fine-tuned permissions by viewing the \"Permissions\" tab of an entry. This tab appears once the campaign has several roles or members.',\n            '3'                     => 'One can either go with an \"opt-out\" system, where roles are given access to viewing all of the entries, and use the \"Private\" checkbox on entries to hide them. Or one can not give roles many permissions, but set each entry to be visible individually.',\n            '4'                     => 'Premium campaigns can have an unlimited amount of roles.',\n            'permissions_helper'    => 'Duplicate all of the role\\'s permissions, on both categories and entries.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'The public role has permissions but the campaign is private. You can change this setting on the Sharing tab when editing the campaign.',\n            'empty_role'            => 'The role doesn\\'t have any members in it yet.',\n            'role_admin'            => 'Members of the :name role can automatically access every entry and feature in the campaign.',\n            'role_permissions'      => 'Configure what members with the :name role can do in each category.',\n        ],\n        'members'       => 'Members',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'Campaign permissions allow the following.',\n                'entities'  => 'Here is a quick recap of what members of this role get when a permission is set.',\n                'more'      => 'For more details, view our tutorial video on Youtube',\n                'title'     => 'Permission details',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'           => 'Create',\n                'articles'      => 'Articles',\n                'dashboard'     => 'Dashboard',\n                'delete'        => 'Delete',\n                'edit'          => 'Edit',\n                'gallery'       => [\n                    'browse'    => 'Browse',\n                    'manage'    => 'Full control',\n                    'upload'    => 'Upload',\n                ],\n                'manage'        => 'Manage',\n                'members'       => 'Members',\n                'permission'    => 'Manage permissions',\n                'read'          => 'View',\n                'toggle'        => 'Change for all',\n            ],\n            'helpers'   => [\n                'add'           => 'Allow creating entries of this category. They will automatically be allowed to view and edit entries they create if they don\\'t have the view or edit permission.',\n                'articles'      => 'Allows adding, editing, and deleting articles even if the member can\\'t edit the entry.',\n                'dashboard'     => 'Allow editing the dashboards and dashboard widgets.',\n                'delete'        => 'Allow removing all entries of this category.',\n                'edit'          => 'Allow editing all entries of this category.',\n                'gallery'       => [\n                    'browse'    => 'Allow viewing the gallery, and setting an entry\\'s image from the gallery.',\n                    'manage'    => 'Allow everything on the gallery as an admin can, including editing and deleting images.',\n                    'upload'    => 'Allows uploading images to the gallery. Will only see images they have uploaded if not combined with the browse permission.',\n                ],\n                'manage'        => 'Allow editing the campaign as an admin would, without allowing the members to delete the campaign.',\n                'members'       => 'Allow inviting new members to the campaign.',\n                'not_public'    => 'The campaign isn\\'t public. Permissions for the public role can be set, but will be ignored. Go and edit the campaign to make it public.',\n                'permission'    => 'Allow setting permissions on entries of this category they can edit.',\n                'read'          => 'Allow viewing all entries of this category that aren\\'t private.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Name of the role',\n        ],\n        'title'         => 'Roles - :name',\n        'types'         => [\n            'owner'     => 'Admin',\n            'public'    => 'Public',\n            'standard'  => 'Standard',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Add member',\n                'remove'        => ':user from the :role role',\n                'remove_user'   => 'Remove member from role',\n            ],\n            'create'    => [\n                'success'   => ':user added to the role :role.',\n                'title'     => 'Add a member to the :name role',\n            ],\n            'destroy'   => [\n                'success'   => ':user removed from the role :role.',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'To avoid abuse, it is not possible to remove other members from the :admin role. In case of issues, contact us on :discord or at :email.',\n                'needs_more_roles'  => 'You need to add yourself to another role in the campaign before being able to remove yourself from the :admin role.',\n            ],\n            'fields'    => [\n                'name'  => 'Name',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'Enable',\n        ],\n        'boosted'       => 'This feature is in early access and currently only available for :boosted.',\n        'deprecated'    => [\n            'help'  => 'This category is deprecated, meaning it is no longer maintained, and that bugs aren\\'t tested with each new update. Use this category with the knowledge that it will eventually get removed from Kanka.',\n            'title' => 'Deprecated',\n        ],\n        'disabled'      => 'The :module category is disabled.',\n        'enabled'       => 'The :module category is enabled.',\n        'errors'        => [\n            'module-disabled'   => 'The requested category is currently disabled in the settings. :fix.',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Create abilities, be it feats, spells, or powers that can be assigned to entries.',\n            'assets'            => 'Upload files, set links, and define aliases to individual entries.',\n            'bookmarks'         => 'Create bookmarks to entries or filtered lists that appear in the sidebar.',\n            'calendars'         => 'A place to define the calendars of the world.',\n            'characters'        => 'Create and keep track of the people inhabiting the world with characters.',\n            'conversations'     => 'Fictional conversations between characters or between members.',\n            'creatures'         => 'Build your world\\'s creatures, animals, and monsters with the creatures category.',\n            'dice_rolls'        => 'For those who use Kanka for RPG games, a way to handle dice rolls.',\n            'entity_attributes' => 'Keep track of properties on entries of the world, for example HP or SPEED.',\n            'events'            => 'Holidays, festivals, disasters, birthdays, wars.',\n            'families'          => 'Clans or families, their relations and their members.',\n            'inventories'       => 'Manage inventories on your entries.',\n            'items'             => 'Weapons, vehicles, relics, potions.',\n            'journals'          => 'Observations written by characters, or session prep for the dungeon master.',\n            'locations'         => 'Planets, planes, continents, rivers, states, settlements, temples, taverns.',\n            'maps'              => 'Create rich and beautiful maps with markers linking to the world\\'s entries.',\n            'notes'             => 'Lore, nature, history, magic, cultures.',\n            'organisations'     => 'Cults, religions, factions, guilds.',\n            'quests'            => 'To keep track of various quests with characters and locations.',\n            'races'             => 'Track the origins, ethnicities, and racial traits of the world\\'s characters with the race category.',\n            'tags'              => 'Each entry can have several tags. Tags can belong to other tags, and entries can be filtered by tag.',\n            'timelines'         => 'Represent the history of your world with timelines.',\n            'whiteboards'       => 'Draw and write on whiteboards to visually plan your world and goals.',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'Help others find the campaign on the :public-campaigns page by adding relevant tags. This only applies to public campaigns.',\n        'language'  => 'Language of the world\\'s content.',\n        'system'    => 'The game system you\\'re using (e.g., D&D 5e, Pathfinder).',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Edit campaign',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Achievements',\n            'customisation'     => 'Customisation',\n            'danger'            => 'Danger',\n            'data'              => 'Data',\n            'default-images'    => 'Default thumbnails',\n            'defaults'          => 'Defaults',\n            'deletion'          => 'Deletion',\n            'export'            => 'Export',\n            'import'            => 'Import',\n            'logs'              => 'Logs',\n            'management'        => 'Management',\n            'members'           => 'Members',\n            'plugins'           => 'Plugins',\n            'recovery'          => 'Recovery',\n            'roles'             => 'Roles',\n            'sidebar'           => 'Sidebar',\n            'stats'             => 'Stats',\n            'styles'            => 'Theming',\n            'webhooks'          => 'Webhooks',\n        ],\n        'title'     => 'Overview - :name',\n    ],\n    'status'                            => [\n        'free'      => 'Premium features disabled.',\n        'legacy'    => [\n            'title' => 'Boosted features (legacy)',\n        ],\n        'premium'   => 'Premium features unlocked by :name.',\n        'title'     => 'Premium features',\n    ],\n    'themes'                            => [\n        'none'  => 'None (defaults to user\\'s preference)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Only visible to admins',\n            'visible'   => 'Visible to members',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Entry history logs',\n            'member_list'       => 'Member list',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Control who can see view edit history for entries.',\n            'member-list'       => 'Control who can view the member list.',\n            'theme'             => 'Override individual member theme preferences, or let each member use their own preferred theme.',\n        ],\n        'members'           => [\n            'hidden'    => 'Only visible to admins',\n            'visible'   => 'Visible to members',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Private',\n        'public'    => 'Public',\n        'unlisted'  => 'Public (unlisted)',\n    ],\n];\n"
  },
  {
    "path": "lang/en/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'                   => [\n        'add_appearance'    => 'Add an appearance',\n        'add_personality'   => 'Add a personality',\n    ],\n    'create'                    => [\n        'title' => 'New Character',\n    ],\n    'families'                  => [\n        'helper'    => 'Reorder and control which families of :name are visible or hidden from non-admins.',\n        'reorder'   => [\n            'success'   => 'Character families updated successfully.',\n        ],\n        'title2'    => 'Manage families',\n    ],\n    'fields'                    => [\n        'age'                       => 'Age',\n        'is_appearance_pinned'      => 'Appearance overview',\n        'is_dead'                   => 'Dead',\n        'is_personality_pinned'     => 'Personality overview',\n        'is_personality_visible'    => 'Personality access',\n        'life'                      => 'Life',\n        'physical'                  => 'Physical',\n        'pronouns'                  => 'Pronouns',\n        'sex'                       => 'Gender',\n        'status'                    => 'Status',\n        'title'                     => 'Title',\n        'traits'                    => 'Traits',\n    ],\n    'helpers'                   => [\n        'age'   => 'You can link this character with a calendar to automatically calculate their age instead. :more.',\n    ],\n    'hints'                     => [\n        'is_appearance_pinned'      => 'Show on overview.',\n        'is_dead'                   => 'This character is dead.',\n        'is_missing'                => 'This character is missing.',\n        'is_personality_visible'    => 'The personality traits are visible to all, not only to members of the :admin role.',\n        'personality_not_visible'   => 'Personality traits of this character are currently only visible to Admin users.',\n        'personality_visible'       => 'Everyone can view this character\\'s personality.',\n    ],\n    'labels'                    => [\n        'appearance'    => [\n            'entry' => 'Appearance description',\n            'name'  => 'Appearance name',\n        ],\n        'personality'   => [\n            'entry' => 'Personality trait description',\n            'name'  => 'Personality trait name',\n        ],\n    ],\n    'lists'                     => [\n        'empty' => 'Create your first hero, villain, or sidekick to bring your world to life.',\n    ],\n    'organisations'             => [\n        'create'    => [\n            'success'   => ':character added to :organisation.',\n            'title'     => 'Membership',\n        ],\n        'destroy'   => [\n            'success'   => 'Membership removed.',\n        ],\n        'edit'      => [\n            'success'   => 'Membership updated.',\n            'title'     => 'Update membership',\n        ],\n        'fields'    => [\n            'role'  => 'Role',\n        ],\n    ],\n    'personality_visibility'    => [\n        'admin' => 'Members of :admin role only',\n        'all'   => 'Everyone can see',\n    ],\n    'placeholders'              => [\n        'age'               => 'Age',\n        'appearance_entry'  => 'Description',\n        'appearance_name'   => 'Hair, Eyes, Skin, Height',\n        'name'              => 'Name of the character',\n        'personality_entry' => 'Details',\n        'personality_name'  => 'Goals, Mannerisms, Fears, Bonds',\n        'physical'          => 'Physical',\n        'pronouns'          => 'He/Him, She/Her, They/Them',\n        'sex'               => 'Gender',\n        'title'             => 'Title',\n        'traits'            => 'Traits',\n        'type'              => 'NPC, Player Character, Deity',\n    ],\n    'quests'                    => [\n        'helpers'   => [\n            'quest_giver'   => 'Quests that the character is a quest giver of.',\n            'quest_member'  => 'Quests that the character is a member of.',\n        ],\n    ],\n    'races'                     => [\n        'helper'    => 'Reorder and control which races of :name are visible or hidden from non-admins.',\n        'reorder'   => [\n            'success'   => 'Character races updated successfully',\n        ],\n        'title2'    => 'Manage races',\n    ],\n    'sections'                  => [\n        'appearance'    => 'Appearance',\n        'personality'   => 'Personality',\n    ],\n    'status'                    => [\n        'alive'     => 'Alive',\n        'dead'      => 'Dead',\n        'missing'   => 'Missing',\n    ],\n    'warnings'                  => [\n        'personality_hidden'    => ':name\\'s personality traits have been locked down.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Aqua',\n    'black'         => 'Black',\n    'blue'          => 'Blue',\n    'brown'         => 'Brown',\n    'green'         => 'Green',\n    'grey'          => 'Grey',\n    'light-blue'    => 'Light Blue',\n    'maroon'        => 'Maroon',\n    'navy'          => 'Navy',\n    'none'          => 'None',\n    'orange'        => 'Orange',\n    'pink'          => 'Pink',\n    'purple'        => 'Purple',\n    'red'           => 'Red',\n    'teal'          => 'Teal',\n    'white'         => 'White',\n    'yellow'        => 'Yellow',\n];\n"
  },
  {
    "path": "lang/en/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'          => 'boosted campaign',\n    'premium-campaign'          => 'premium campaign',\n    'premium-campaign-count'    => '{0} No Premium Campaigns |{1} 1 Premium Campaign |[2,*] :count Premium Campaigns',\n    'premium-campaigns'         => 'premium campaigns',\n    'premium-feature'           => 'Premium feature',\n    'superboosted-campaign'     => 'superboosted campaign',\n];\n"
  },
  {
    "path": "lang/en/confirm/editing.php",
    "content": "<?php\n\nreturn [\n    'back'          => 'Go back',\n    'description'   => 'Looks like someone else is currently editing this page! Do you want to go back or ignore this warning, at the risk of losing data?',\n    'ignore'        => 'Edit anyway',\n    'members'       => 'Members editing this page:',\n    'title'         => 'Warning',\n    'user'          => ':user since :since',\n];\n"
  },
  {
    "path": "lang/en/confirm.php",
    "content": "<?php\n\nreturn [\n    'delete'    => [\n        'bulk'          => 'Are you sure you want to delete the selected elements?',\n        'helper'        => 'Are you sure you want to delete :name?',\n        'recover'       => 'This action can be undone for up to :day days on the :recover page.',\n        'recoverable'   => 'This action can be undone for up to :day days with a :premium-campaign.',\n        'title'         => 'Remove element',\n    ],\n];\n"
  },
  {
    "path": "lang/en/connections/web.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'           => 'Connect existing',\n        'back'          => 'Back to relations',\n        'download'      => 'Download',\n        'download-pdf'  => 'Download PDF',\n        'download-png'  => 'Download image (.png)',\n        'reset-layout'  => 'Reset layout',\n        'view'          => 'View web',\n        'zoom-fit'      => 'Zoom to fit',\n    ],\n    'cta'       => [\n        'text'  => 'This is a preview of the full campaign-wide relations web. Free campaigns can explore up to :amount nodes. Premium campaigns unlock the complete map with every relation and full navigation. Upgrade to see your entier world\\'s structure at once.',\n        'title' => 'Preview limited to :amount relations',\n    ],\n    'title'     => 'Relations web',\n];\n"
  },
  {
    "path": "lang/en/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Conversation',\n    ],\n    'fields'        => [\n        'is_closed'     => 'Closed',\n        'messages'      => 'Messages',\n        'participants'  => 'Participants',\n    ],\n    'hints'         => [\n        'empty'         => 'There are no participants in this conversation.',\n        'participants'  => 'Please add participants to the conversation by pressing on the :icon icon on the upper-right.',\n    ],\n    'lists'         => [\n        'empty' => 'Record dialogues, letters, or exchanges between characters and factions.',\n    ],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Message removed.',\n        ],\n        'is_updated'    => 'Updated',\n        'load_previous' => 'Load previous messages',\n        'placeholders'  => [\n            'message'   => 'Your message',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Participant :entity added to the conversation.',\n        ],\n        'destroy'   => [\n            'success'   => 'Participant :entity removed from the conversation.',\n        ],\n        'helper'    => 'Add and remove participants from :name.',\n        'modal'     => 'Participants',\n        'title'     => 'Participants of :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Name of the conversation',\n        'type'  => 'In Game, Prep, Plot',\n    ],\n    'show'          => [\n        'is_closed' => 'Conversation is closed.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Participants',\n    ],\n    'targets'       => [\n        'characters'    => 'Characters',\n        'members'       => 'Members',\n    ],\n];\n"
  },
  {
    "path": "lang/en/cookieconsent.php",
    "content": "<?php\n\nreturn [\n    'allow'     => 'Allow cookies',\n    'dismiss'   => 'Dismiss',\n    'header'    => 'Cookie consent',\n    'link'      => 'Learn more',\n    'message'   => 'Kanka uses cookies to ensure you get the best experience on our website.',\n    'policy'    => 'Cookie policy',\n    'reject'    => 'Decline',\n];\n"
  },
  {
    "path": "lang/en/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Creature',\n    ],\n    'fields'        => [\n        'is_dead'       => 'Dead',\n        'is_extinct'    => 'Extinct',\n    ],\n    'hints'         => [\n        'is_dead'       => 'This creature is dead.',\n        'is_extinct'    => 'This creature is extinct.',\n    ],\n    'lists'         => [\n        'empty' => 'Add beasts, monsters, or mythical beings your heroes may face or befriend.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Herbivore, Aquatic, Mythical',\n    ],\n];\n"
  },
  {
    "path": "lang/en/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Actions',\n        'apply'             => 'Apply',\n        'back'              => 'Back',\n        'change'            => 'Change',\n        'close'             => 'Close',\n        'confirm'           => 'Confirm',\n        'copy'              => 'Copy',\n        'copy_mention'      => 'Copy [ ] mention',\n        'copy_to_campaign'  => 'Copy to campaign',\n        'disable'           => 'Disable',\n        'enable'            => 'Enable',\n        'explore_view'      => 'Nested View',\n        'export'            => 'Export (PDF)',\n        'find_out_more'     => 'Find out more',\n        'go_to'             => 'Go to :name',\n        'help'              => 'Help',\n        'json-export'       => 'Export (JSON)',\n        'markdown-export'   => 'Export (Markdown)',\n        'move'              => 'Move',\n        'new'               => 'New',\n        'new_child'         => 'New child',\n        'new_post'          => 'New article',\n        'next'              => 'Next',\n        'open'              => 'Open',\n        'print'             => 'Print',\n        'reorder'           => 'Reorder',\n        'reset'             => 'Reset',\n        'save-changes'      => 'Save changes',\n        'share'             => 'Share',\n        'transform'         => 'Transform',\n    ],\n    'add'               => 'Add',\n    'alerts'            => [\n        'copy_attribute'    => 'The property\\'s mention was copied to your clipboard.',\n        'copy_invite'       => 'The invite link was copied to your clipboard.',\n        'copy_mention'      => 'The entry\\'s advanced mention was copied to your clipboard.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Edit & tagging',\n            'kits'          => 'Apply property kit',\n            'permissions'   => 'Change permissions',\n        ],\n        'age'           => [\n            'helper'    => 'You can use + and - before the number to update the age by that amount.',\n        ],\n        'buttons'       => [\n            'label' => 'For selected',\n        ],\n        'edit'          => [\n            'locations' => 'Action for locations',\n            'tagging'   => 'Action for tags',\n            'tags'      => [\n                'add'       => 'Add',\n                'remove'    => 'Remove',\n            ],\n            'title'     => 'Editing multiple entries',\n        ],\n        'errors'        => [\n            'admin'     => 'Only members of the Admin role can change the private status of entries.',\n            'general'   => 'An error occurred processing your action. Please try again and contact us if the problem persists. Error message: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Override',\n            ],\n            'helpers'   => [\n                'override'  => 'If selected, permissions of the selected entries will be overwritten with these. If unchecked, the selected permissions will be added to the existing ones.',\n            ],\n            'title'     => 'Change permissions for several entries',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Apply a kit to multiple entries',\n    ],\n    'cancel'            => 'Cancel',\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Copy entries to another campaign',\n        'panel'         => 'Copy',\n        'title'         => 'Copy \\':name\\' to another campaign',\n    ],\n    'create'            => 'Create',\n    'datagrid'          => [\n        'empty' => 'Nothing to show yet.',\n    ],\n    'delete_modal'      => [\n        'callout'       => 'Psst!',\n        'confirm'       => 'Confirm removal',\n        'permanent'     => 'This will permanently remove this element and you won\\'t be able to undo this action.',\n        'recoverable'   => 'Entries and articles can be recovered for up to :day days with a :boosted-campaign.',\n        'title'         => 'Removal confirmation',\n    ],\n    'dynamic'           => [\n        'permission'    => 'You don\\'t have the right permissions to create an entry in the :module category.',\n        'unknown'       => 'Invalid entry of the :module category.',\n    ],\n    'edit'              => 'Edit',\n    'errors'            => [\n        'boosted_campaigns'     => 'This feature is only available for :boosted.',\n        'unavailable_feature'   => 'Unavailable feature',\n    ],\n    'fields'            => [\n        'archived'          => 'Archived',\n        'calendar_date'     => 'Calendar Date',\n        'category'          => 'Category',\n        'child'             => 'Child',\n        'closed'            => 'Closed',\n        'colour'            => 'Colour',\n        'copy_abilities'    => 'Copy Abilities',\n        'copy_inventory'    => 'Copy Inventory',\n        'copy_links'        => 'Copy Links',\n        'copy_permissions'  => 'Copy Permissions (this will override values set in the permissions tab)',\n        'copy_posts'        => 'Copy Articles (this includes the article permissions)',\n        'copy_reminders'    => 'Copy Reminders',\n        'created_by'        => 'Created by',\n        'creator'           => 'Creator',\n        'date_range'        => 'Date range',\n        'excerpt'           => 'Excerpt',\n        'has_attributes'    => 'Has properties',\n        'has_entity_files'  => 'Has media',\n        'has_entry'         => 'Has description',\n        'has_image'         => 'Has an image',\n        'has_posts'         => 'Has articles',\n        'header_image'      => 'Header Image',\n        'image'             => 'Image',\n        'is_closed'         => 'Conversation will be closed and will no longer accept new messages.',\n        'is_private'        => 'Private',\n        'is_private_v3'     => 'Only show this to members of the :admin-role role. This overrides any other permission.',\n        'is_star'           => 'Pinned',\n        'locations'         => ':first in :second',\n        'name'              => 'Name',\n        'names'             => 'Names',\n        'parent'            => 'Parent',\n        'position'          => 'Position',\n        'replace_mentions'  => 'Replace detail mentions in the description with those of the new entry',\n        'template'          => 'Template',\n        'tooltip'           => 'Tooltip',\n        'type'              => 'Type',\n        'updated_by'        => 'Updated by',\n        'visibility'        => 'Visibility',\n        'word-count'        => 'Word count: :number',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'You have reached the maximum number (:max) of files for this entry.',\n            'max_size'  => 'The campaign has reached the maximum file storage capacity.',\n            'no_files'  => 'No files.',\n        ],\n        'hints'     => [\n            'limit'         => 'Each entry can have a maximum of :max files uploaded to it.',\n            'limitations'   => 'Supported formats: :formats. Max file size: :size.',\n        ],\n    ],\n    'filter'            => 'Filter',\n    'filters'           => [\n        'all'               => 'Filter to all descendants',\n        'clear'             => 'Clear Filters',\n        'copy_helper'       => 'Use the copied filters in your clipboard as values for filters on dashboard widgets and bookmarks.',\n        'copy_to_clipboard' => 'Copy filters to clipboard',\n        'direct'            => 'Filter to direct descendants',\n        'filtered'          => 'Showing :count of :total :entity.',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Show all :count descendants',\n                'filtered'  => 'Show direct :count descendants',\n            ],\n            'paginated' => 'Switch between direct children and all levels of descendants. Results are paginated for performance.',\n        ],\n        'mobile'            => [\n            'clear' => 'Clear',\n            'copy'  => 'Clipboard',\n        ],\n        'options'           => [\n            'any'       => 'Any',\n            'children'  => 'Matches this or its descendants',\n            'exclude'   => 'Doesn\\'t match',\n            'hide'      => 'Hide',\n            'include'   => 'Matches',\n            'none'      => 'Empty',\n            'show'      => 'Show',\n        ],\n        'show'              => 'Show Filters',\n        'sorting'           => [\n            'asc'       => ':field Ascending',\n            'desc'      => ':field Descending',\n            'helper'    => 'Control in which order results appear.',\n        ],\n        'title'             => 'Advanced filters',\n    ],\n    'fix-this-issue'    => 'Fix this issue',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Add a calendar date',\n        ],\n        'copy_options'  => 'Copy Options',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Copy the following related elements from the source to the new entry.',\n        'linking'       => 'Linking to other entries',\n        'parent'        => 'Select a parent this entry will be a child to.',\n        'per-page'      => 'Results per page',\n    ],\n    'hidden'            => 'Hidden',\n    'hints'             => [\n        'calendar_date'         => 'A calendar date allows easy filtering in lists, and also maintains a reminder in the selected calendar.',\n        'image_dimension'       => 'Recommended dimensions: :dimension pixels.',\n        'image_formats'         => 'Supported formats: :formats.',\n        'image_limitations'     => 'Supported formats: :formats. Max file size: :size.',\n        'image_recommendation'  => 'Recommended dimensions: :width by :height pixels.',\n        'is_star'               => 'Pinned elements will appear on the overview page.',\n        'kit'                   => 'The selected property kit will be applied when saving the entry.',\n        'tooltip'               => 'Replace the automatically generated tooltip with the following contents. Any HTML code will be stripped, but you can still mention other entries using advanced mentions.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Created by :name :date',\n        'created_date_clean'    => 'Created :date',\n        'unknown'               => 'Unknown',\n        'updated_clean'         => 'Last modified by :name :date',\n        'updated_date_clean'    => 'Last modified :date',\n        'view'                  => 'View changes',\n    ],\n    'image'             => [\n        'error' => 'We weren\\'t able to get the image you requested. It could be that the website doesn\\'t allow us to download the image (typically for Squarespace and DeviantArt), or that the link is no longer valid. Please also make sure that the image isn\\'t larger than :size.',\n    ],\n    'is_private'        => 'This entry is private and only visible to members of the Admin role.',\n    'keyboard-shortcut' => 'Keyboard shortcut :code',\n    'navigation'        => [\n        'cancel'            => 'cancel',\n        'or_cancel'         => 'or :cancel',\n        'skip_to_content'   => 'Skip navigation',\n    ],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Allow',\n                'deny'      => 'Deny',\n                'ignore'    => 'Skip',\n                'remove'    => 'Remove',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Allow',\n                'deny'      => 'Deny',\n                'inherit'   => 'Inherit',\n            ],\n            'delete'        => 'Delete',\n            'edit'          => 'Edit',\n            'private'       => 'Make private',\n            'toggle'        => 'Toggle',\n            'view'          => 'View',\n        ],\n        'fields'            => [\n            'member'    => 'Member',\n            'role'      => 'Role',\n        ],\n        'helpers'           => [\n            'setup' => 'Control how roles and members can interact with this entry. :allow will allow a member or role to do this action. :deny will deny them that action. :inherit will use the role or member\\'s role\\'s permission. A member set to :allow is able to do the action, even if one of their roles is set to :deny.',\n        ],\n        'success'           => 'Permissions saved.',\n        'title'             => 'Permissions',\n        'too_many_members'  => 'This world has too many members (>:number) to display in this interface. Please use the Permission button on the entry view to control permissions in detail.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Choose a calendar',\n        'entry'         => 'Use @ followed by three letters to mention other entries of the campaign.',\n        'fallback'      => 'Choose :module',\n        'gallery_image' => 'Choose an image from the gallery',\n        'image_url'     => 'Upload an image from a URL instead',\n        'journal'       => 'Choose a journal',\n        'location'      => 'Choose a location',\n        'multiple'      => 'Choose one or several',\n        'name'          => 'Name of the entry',\n        'organisation'  => 'Choose an organisation',\n        'parent'        => 'Choose a parent',\n        'search'        => 'Type to search',\n        'tag'           => 'Choose a tag',\n        'template'      => 'Choose a template',\n        'timeline'      => 'Choose a timeline',\n        'type'          => 'Type of the entry',\n        'user'          => 'Choose a user',\n    ],\n    'remove'            => 'Remove',\n    'reorder'           => [\n        'empty' => 'No elements to reorder.',\n    ],\n    'save'              => 'Save',\n    'save_and_close'    => 'Save and Close',\n    'save_and_copy'     => 'Save and Copy',\n    'save_and_new'      => 'Save and New',\n    'save_and_update'   => 'Save and Edit',\n    'save_and_view'     => 'Save and View',\n    'search'            => 'Search',\n    'select'            => 'Select',\n    'tabs'              => [\n        'abilities'     => 'Abilities',\n        'inventory'     => 'Inventory',\n        'mentions'      => 'Mentions',\n        'overview'      => 'Overview',\n        'permissions'   => 'Permissions',\n        'premium'       => 'Premium',\n        'profile'       => 'Profile',\n        'reminders'     => 'Reminders',\n    ],\n    'timestamps'        => [\n        'edited'    => 'Edited :ago',\n    ],\n    'titles'            => [\n        'editing'   => 'Editing :name',\n        'new'       => 'New :module',\n    ],\n    'update'            => 'Update',\n    'users'             => [\n        'unknown'   => 'Unknown',\n    ],\n    'view'              => 'View',\n    'visibilities'      => [\n        'admin'         => 'Admins',\n        'admin-self'    => 'Only me & Admins',\n        'all'           => 'All',\n        'members'       => 'Members of the campaign',\n        'self'          => 'Only me',\n    ],\n];\n"
  },
  {
    "path": "lang/en/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'customise' => 'Customise dashboard',\n        'follow'    => 'Follow',\n        'join'      => 'Join',\n        'unfollow'  => 'Stop following',\n    ],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Edit name & permissions',\n            'new'   => 'New Dashboard',\n        ],\n        'create'        => [\n            'helper'    => 'Create a new dashboard for :name, and assign which roles can see it or have it as their default dashboard.',\n            'success'   => 'New dashboard :name created.',\n            'title'     => 'New dashboard',\n        ],\n        'custom'        => [\n            'text'  => 'You are currently editing the :name dashboard.',\n        ],\n        'default'       => [\n            'text'  => 'You are currently editing the default dashboard of :campaign.',\n            'title' => 'Default Dashboard',\n        ],\n        'delete'        => [\n            'success'   => 'Dashboard :name removed.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Copy widgets',\n            'name'          => 'Dashboard name',\n            'visibility'    => 'Visibility',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Duplicate the widgets from the :name dashboard into this new one.',\n        ],\n        'pitch'         => 'Create multiple dashboards with custom permissions for each role.',\n        'placeholders'  => [\n            'name'  => 'Name of the dashboard',\n        ],\n        'update'        => [\n            'success'   => 'Dashboard :name updated.',\n            'title'     => 'Update dashboard',\n        ],\n        'visibility'    => [\n            'default'   => 'Default',\n            'none'      => 'None',\n            'visible'   => 'Visible',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Following a campaign will make it appear in the campaign switcher below your own campaigns.',\n        'join'      => 'This campaign is open to new members. Click to apply to join it.',\n    ],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Widget',\n            'back_to_dashboard' => 'Back to dashboard',\n            'edit'              => 'Edit a widget',\n            'new'               => 'New :type widget',\n        ],\n        'reorder'   => [\n            'helper'    => 'Drag me to move me around',\n            'success'   => 'Widgets reordered.',\n        ],\n        'title'     => 'Dashboard Setup',\n        'tutorial'  => [\n            'blog'  => 'our tutorial',\n            'text'  => 'Need help setting up the dashboard? Read :blog for some help and inspiration.',\n        ],\n    ],\n    'title'         => 'Dashboard',\n    'widgets'       => [\n        'advanced_options_boosted'  => 'Enable more options like showing pins with a :boosted_campaign.',\n        'calendar'                  => [\n            'actions'           => [\n                'next'      => 'Change date to next day',\n                'previous'  => 'Change date to previous day',\n            ],\n            'previous_events'   => 'Previous',\n            'upcoming_events'   => 'Upcoming',\n        ],\n        'campaign'                  => [\n            'helper'    => 'This widget displays a billboard. This widget is always shown on the default dashboard.',\n        ],\n        'create'                    => [\n            'helper'            => 'Select a widget type to add to the :name dashboard.',\n            'helper-default'    => 'Select a widget type to add to the default dashboard.',\n            'success'           => 'Widget added to the dashboard.',\n            'title'             => 'New widget',\n        ],\n        'delete'                    => [\n            'success'   => 'Widget removed from the dashboard.',\n        ],\n        'fields'                    => [\n            'class'             => 'CSS class',\n            'dashboard'         => 'Dashboard',\n            'name'              => 'Custom widget name',\n            'optional-entity'   => 'Link to entry',\n            'order'             => 'Ordering',\n            'size'              => 'Size',\n            'width'             => 'Width',\n        ],\n        'helpers'                   => [\n            'class'     => 'Define a custom CSS class added to the widget.',\n            'filters'   => 'Click to learn about the available filter options.',\n        ],\n        'orders'                    => [\n            'name_asc'  => 'Name ascending',\n            'name_desc' => 'Name descending',\n            'oldest'    => 'Oldest modified',\n            'recent'    => 'Recently modified',\n        ],\n        'preview'                   => [\n            'displays'  => [\n                'expand'    => 'Expandable entry',\n                'full'      => 'Full entry',\n            ],\n            'fields'    => [\n                'display'   => 'Display',\n            ],\n        ],\n        'random'                    => [\n            'helpers'   => [\n                'name'  => 'You can reference the random entry\\'s name with {name}',\n            ],\n            'type'      => [\n                'all'   => 'All',\n            ],\n        ],\n        'recent'                    => [\n            'advanced_filter'   => 'Advanced filter',\n            'advanced_filters'  => [\n                'mentionless'   => 'Mentionless (entries that don\\'t mention other entries)',\n                'unmentioned'   => 'Unmentioned (entries that aren\\'t mentioned by other entries)',\n            ],\n            'all-entities'      => 'All entries',\n            'entity-header'     => 'Use entry header as image',\n            'filters'           => 'Filters',\n            'help'              => 'Only show the first entry as a preview instead of a list.',\n            'helpers'           => [\n                'entity-header'     => 'If the entry has a header image (premium campaign feature), set this widget to use that image instead of the entry\\'s image.',\n                'show_attributes'   => 'Show the entry\\'s pinned properties below the entry.',\n                'show_members'      => 'If the entry is a family or organisation, show its members below the entry.',\n                'show_relations'    => 'Show the entry\\'s pinned relations below the entry.',\n            ],\n            'show_attributes'   => 'Show pinned properties',\n            'show_members'      => 'Show members',\n            'show_relations'    => 'Show pinned relations',\n            'singular'          => 'Preview',\n            'tags'              => 'Filter the list of entries on specified tags.',\n            'title'             => 'Entry list',\n        ],\n        'tabs'                      => [\n            'advanced'  => 'Advanced',\n            'setup'     => 'Setup',\n        ],\n        'unmentioned'               => [\n            'title' => 'Unmentioned entries',\n        ],\n        'update'                    => [\n            'success'   => 'Widget modified.',\n        ],\n        'widths'                    => [\n            '0' => 'Auto',\n            '12'=> 'Full (100%)',\n            '3' => 'Tiny (25%)',\n            '4' => 'Small (33%)',\n            '6' => 'Half (50%)',\n            '8' => 'Wide (66%)',\n            '9' => 'Large (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/dashboards/onboarding.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'continue'  => 'Start building',\n        'skip'      => 'Skip for now',\n    ],\n    'families'      => [\n        'varren'    => [\n            'title' => 'House Varren',\n        ],\n    ],\n    'fields'        => [\n        'name'  => 'World name',\n    ],\n    'intro'         => 'Your world is ready. Make it yours before you dive in.',\n    'placeholders'  => [\n        'name'  => 'You can change this anytime.',\n    ],\n    'quests'        => [\n        'crown' => [\n            'title' => 'Retrieve the shattered crown',\n        ],\n    ],\n    'roles'         => [\n        'co-writer'     => 'Co-writer',\n        'contributor'   => 'Contributor',\n    ],\n    'selection'     => [\n        'campaign'                  => 'Tabletop RPG campaign',\n        'campaign-description'      => 'Manage your campaign, characters, and sessions for your TTRPG group.',\n        'helper'                    => '(Your choice will personalise demo content and your dashboard layout.)',\n        'intro'                     => 'What are you creating?',\n        'story'                     => 'Novel or story universe',\n        'story-description'         => 'Develop your story\\'s characters, settings, and timeline as you write.',\n        'title'                     => 'World type',\n        'worldbuilding'             => 'Worldbuilding project',\n        'worldbuilding-description' => 'Build and organize the lore, places, and people of your own world.',\n    ],\n    'splash'        => 'Welcome, :name 👋 Your world is ready.',\n    'success'       => 'Welcome! We\\'ve customised your world for a quick start.',\n    'title'         => 'Make this world yours',\n    'ttrpg'         => [\n        'tags'  => [\n            'npcs'  => 'NPCs',\n        ],\n    ],\n    'widgets'       => [\n        'active-quests' => 'Active quests',\n    ],\n];\n"
  },
  {
    "path": "lang/en/dashboards/premium.php",
    "content": "<?php\n\nreturn [\n    'pitch' => 'Build tailored overviews for your campaign and home pages for your players. Pin entries, maps, calendars, gallery and more in any layout you choose.',\n    'title' => 'Custom dashboards',\n];\n"
  },
  {
    "path": "lang/en/dashboards/setup.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Add widget',\n    ],\n    'sections'  => [\n        'switch'    => 'Switch to...',\n    ],\n    'tooltips'  => [\n        'add'       => 'Click to add a new widget to the dashboard.',\n        'switch'    => 'Click to switch to another dashboard.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/calendar.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows upcoming reminders.',\n    'name'          => 'Calendar',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/campaign.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows a billboard preview of the campaign.',\n    'name'          => 'Billboard',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/gallery.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Display images from a gallery folder as a carousel.',\n    'fields'        => [\n        'folder'    => 'Gallery folder',\n        'show_name' => 'Image names',\n    ],\n    'helpers'       => [\n        'premium'   => 'Showcase your world\\'s art right on your dashboard.',\n        'show_name' => 'Display the image name below each image.',\n    ],\n    'name'          => 'Gallery',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/header.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows a text header.',\n    'name'          => 'Header',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/help.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows help and community links.',\n    'name'          => 'Help & Community',\n    'title'         => 'Help & Community',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/join.php",
    "content": "<?php\n\nreturn [\n    'apply'         => 'Apply to join!',\n    'description'   => 'Shows the join campaign application button along with the campaign\\'s introduction.',\n    'name'          => 'Players Wanted',\n    'register'      => 'Register to apply',\n    'title'         => 'Players Wanted',\n    'update'        => 'Update your application',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/onboarding.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows a todo list for getting started with worldbuilding.',\n    'name'          => 'Getting Started',\n    'tasks'         => [\n        'campaign'  => [\n            'name'  => 'Your first world is ready.',\n        ],\n        'character' => [\n            'helper'    => 'Add someone who exists in your world.',\n            'name'      => 'Create your first character.',\n        ],\n        'invite'    => [\n            'helper'    => 'Add people to your campaign with roles.',\n            'name'      => 'Invite a friend or co-author.',\n        ],\n        'location'  => [\n            'helper'    => 'Ground your world with a location.',\n            'name'      => 'Create your first location.',\n        ],\n        'rename'    => [\n            'helper'    => 'Set a proper name for your campaign.',\n            'name'      => 'Rename your world.',\n        ],\n        'widgets'   => [\n            'helper'    => 'Add or rearrange widgets.',\n            'name'      => 'Customise your dashboard.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/preview.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows a specific entry.',\n    'name'          => 'Selected entry',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/random.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows a random entry from the campaign.',\n    'name'          => 'Random entry',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/recent.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows a list of recently modified entries.',\n    'name'          => 'Recently modified entries',\n];\n"
  },
  {
    "path": "lang/en/dashboards/widgets/welcome.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Shows a welcome message with tips.',\n    'focus'         => [\n        'text'  => 'Here, that\\'s me!',\n        'title' => 'Hey',\n    ],\n    'intros'        => [\n        '1' => 'Say hello to your new worldbuilding home, :user! We\\'ve set up your first campaign and included two example :characters and :locations. These are also visible here on the dashboard.',\n        '2' => 'To get started, click on the big :new-entity button (or press :letter on your keyboard), and click on :characters to create your first character. It\\'s that easy! You can find all your characters, locations, and other :entities from the sidebar on the left of the page.',\n        '3' => 'Here are our top 5 tricks for using Kanka',\n    ],\n    'name'          => 'Welcome',\n    'title'         => 'Welcome to :kanka! 🎉',\n    'tricks'        => [\n        '1'         => 'When writing descriptions, don\\'t re-write names of elements of the campaign. Instead, type :code and three letters to :mention other entries of the campaign. These mentions will automatically update when you change names around.',\n        '2'         => 'To edit the campaign\\'s name, theme, or image, click on :world in the sidebar, followed by the :edit button.',\n        '3'         => 'Write secret information on entries as :posts instead of in the main text field.',\n        '4'         => 'Invite your friends to the campaign by clicking on :world and :members. From there, you can create invitation links.',\n        '5'         => 'You can remove this welcome message and show other information on this page (called the dashboard). Scroll down and click on the :button button.',\n        'mention'   => 'mention',\n    ],\n];\n"
  },
  {
    "path": "lang/en/datagrids.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back_to'   => 'Back to :name',\n        'filters'   => 'Filters',\n    ],\n    'bulks'         => [\n        'selected'  => 'selected',\n    ],\n    'columns'       => [\n        'reset' => 'Reset to default',\n        'title' => 'Control visible columns',\n    ],\n    'display'       => [\n        'per_page'  => 'Results per page',\n        'sort_by'   => 'Sort by',\n        'title'     => 'Display',\n    ],\n    'filters'       => [\n        'clear' => 'Clear filters',\n    ],\n    'modes'         => [\n        'flatten'   => 'Switch to a flattened layout',\n        'grid'      => 'Switch to the grid view',\n        'nested'    => 'Switch to a nested layout',\n        'table'     => 'Switch to the table view',\n    ],\n    'subscription'  => [\n        'cta'       => 'Explore subscriptions',\n        'helper'    => 'See up to :max entities at a glance with a Kanka subscription, plus a ton of other perks to supercharge your worldbuilding.',\n        'title'     => 'Subscription required',\n    ],\n    'tooltips'      => [\n        'nested'    => 'This entry has children. Click on the image to view them.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'day',\n    'days'          => 'days',\n    'elapsed_ago'   => ':duration ago',\n    'hour'          => 'hour',\n    'hours'         => 'hours',\n    'just_now'      => 'just now',\n    'minute'        => 'minute',\n    'minutes'       => 'minutes',\n    'month'         => 'month',\n    'months'        => 'months',\n    'second'        => 'second',\n    'seconds'       => 'seconds',\n    'week'          => 'week',\n    'weeks'         => 'weeks',\n    'year'          => 'year',\n    'years'         => 'years',\n];\n"
  },
  {
    "path": "lang/en/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Page Title',\n];\n"
  },
  {
    "path": "lang/en/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Dice Roll Results',\n    ],\n];\n"
  },
  {
    "path": "lang/en/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Dice Roll',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Dice roll removed.',\n    ],\n    'fields'        => [\n        'created_at'    => 'Rolled At',\n        'parameters'    => 'Parameters',\n        'results'       => 'Results',\n        'rolls'         => 'Rolls',\n    ],\n    'hints'         => [\n        'parameters'    => 'What dice options are available?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Results',\n        ],\n    ],\n    'lists'         => [\n        'empty' => 'Create and save rolls for the campaign to keep track of results directly in Kanka.',\n    ],\n    'placeholders'  => [\n        'name'          => 'Name of the Dice Roll',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Roll',\n        ],\n        'error'     => 'Dice roll unsuccessful. Can\\'t parse the parameters.',\n        'fields'    => [\n            'creator'   => 'Creator',\n            'date'      => 'Date',\n            'result'    => 'Result',\n        ],\n        'hint'      => 'All the rolls done for this dice roll template.',\n        'success'   => 'Dice rolled.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Results',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/emails/activity/email.php",
    "content": "<?php\n\nreturn [\n    'first' => 'Your Kanka account email has been changed to :email.',\n    'title' => 'Email changed',\n];\n"
  },
  {
    "path": "lang/en/emails/activity/password.php",
    "content": "<?php\n\nreturn [\n    'first' => 'Your Kanka account password has been changed.',\n    'help'  => 'If this wasn\\'t you, please contact us at :email.',\n    'title' => 'Password changed',\n];\n"
  },
  {
    "path": "lang/en/emails/purge/first.php",
    "content": "<?php\n\nreturn [\n    'assure'            => 'If you are regularly using your account, do not worry, we are only deleting accounts and campaigns that are not in active use.',\n    'help'              => 'Need help using Kanka? Join our :discord or reach out to us at :email',\n    'intro_account'     => 'We are reaching out to inform you that your account will be deleted in :amount days, as you haven\\'t used it in the last :duration months.',\n    'intro_campaigns'   => 'We are reaching out to inform you that your account and the following campaigns will be deleted in :amount days, as you haven\\'t used it in the last :duration months.',\n    'keep'              => 'If you wish to keep your account active, please log in within the next :amount days.',\n    'title'             => 'Your Kanka account will be deleted in :amount days',\n    'warning'           => [\n        'account'   => 'Once this is done, all the data associated with your account, under :email, will be permanently deleted.',\n        'campaigns' => 'Once this is done, all the data associated with your account, under email :email, as well as the following campaigns will be permanently deleted.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/emails/purge/second.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'This is a final reminder that the Kanka account under the email :email will be deleted in :amount days as you haven\\'t used it in the last :duration months.',\n    'title' => 'Final warning: Your Kanka account will be deleted in :amount days',\n];\n"
  },
  {
    "path": "lang/en/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'update your card details',\n    'primary'   => 'This is an automatic warning that your :brand **** :last is expiring soon.',\n    'title'     => 'Expiring card for your subscription',\n    'valid'     => 'If you wish to keep your subscription, please :action.',\n];\n"
  },
  {
    "path": "lang/en/emails/subscriptions/paypal-expiring.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Yours truly,',\n    'cta'       => 'Renew your subscription',\n    'dear'      => 'Dear :name',\n    'intro'     => 'Your Kanka PayPal subscription expires on **:date**. After that date your account will revert to the free tier.',\n    'loss'      => [\n        'ads'       => 'Ad-free experience',\n        'campaign'  => 'Premium campaign **:campaign**|Premium campaigns **:campaign** and :count more',\n        'discord'   => 'Your **:role** Discord role',\n        'players'   => ':count player will lose access|:count players will lose access',\n        'plugins'   => ':count plugin|:count plugins',\n        'title'     => 'Here is what you will lose:',\n    ],\n    'title'     => 'Your Kanka subscription expires soon',\n];\n"
  },
  {
    "path": "lang/en/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'If you do not wish to renew your subscription, please sign in to your Kanka account and :link.',\n    'closing'   => 'Yours truly,',\n    'dear'      => 'Dear :name',\n    'link'      => 'cancel your subscription',\n    'notice'    => 'Important notice on renewals:',\n    'primary'   => 'This is an automatic reminder that we are going to automatically charge your :brand **** :last on :date, for your Kanka subscription.',\n    'title'     => 'Yearly payment for your Kanka subscription',\n    'valid'     => 'Please make sure your credit card will be valid on the date of payment.',\n];\n"
  },
  {
    "path": "lang/en/emails/subscriptions/validation.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Kanka account email validation.',\n];\n"
  },
  {
    "path": "lang/en/emails/validation.php",
    "content": "<?php\n\nreturn [\n    'error'     => 'Validation failed, please try again.',\n    'modal'     => 'A validated email is required for subscriptions. Please check your inbox for a link to confirm your email before continuing the subscription process.',\n    'success'   => 'Email successfully validated.',\n];\n"
  },
  {
    "path": "lang/en/emails/welcome/2024.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Happy worldbuilding, and thank you for taking part in this journey with us,',\n    'header'    => 'Welcome to the best place to create your campaign, :name!',\n    'lead_1'    => 'Kanka is the brainchild of passionate RPG players who wanted an easy and collaborative approach to worldbuilding, without compromising on features.',\n    'lead_2'    => 'Kanka is what came of that. We\\'re here to help you organize your campaign, and let you focus on bringing your world to life.',\n    'ps'        => 'PS: If you want to get in touch, you can find us on :discord, or at :email.',\n    'what_1'    => 'To help you get started, we created your first campaign and included two example characters and locations. You can :start if you prefer.',\n    'what_2'    => 'You should also check out these resources:',\n    'what_3'    => 'Our :kb if you have basic questions about the features of Kanka and your account.',\n    'what_4'    => 'The :doc covers everything in more depth.',\n    'what_5'    => 'And Finally :campaigns showcase what others have done with Kanka.',\n    'what_new'  => 'start a new one',\n    'what_now'  => 'What now?',\n    'why'       => 'You received this email because you signed up on our website.',\n];\n"
  },
  {
    "path": "lang/en/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    '2023'              => [\n        'basics'    => [\n            'text_1'    => 'With a tool as extensive as Kanka, it can be hard to know where to start or what to do. Our :kb covers the most basic questions you might have, and for more help, you can head over to our :doc.',\n            'title'     => 'The basics',\n        ],\n        'chat'      => [\n            'text_1'    => 'We love hearing from our users. We\\'re most active on :discord, where you will find plenty of our dedicated users, an onboarding team, as well as the founders of Kanka, who can answer any questions that you may have. You can also email us at :email.',\n            'title'     => 'Want to chat?',\n        ],\n        'intro'     => [\n            'header'    => 'Welcome to the best worldbuilding community, :name!',\n            'link'      => 'Go to your world!',\n            'text_1'    => 'Say hello to your new worldbuilding home, :name! Community is in our DNA, and we\\'re delighted to have you join us. Kanka is the brainchild of passionate RPG players who believe in a simplified and communal way to approach worldbuilding, without compromising on features.',\n            'text_2'    => 'We\\'ve set up your first campaign and included two example characters and locations to help you get started.',\n        ],\n        'preview'   => 'Be part of the best worldbuilding community, :name!',\n    ],\n    'header'            => 'Welcome to Kanka :name!',\n    'header_sub'        => 'Congratulations, you have taken the first step in the creation of your world on :kanka!',\n    'pricing'           => 'pricing',\n    'section_1'         => 'Where to now?',\n    'section_11'        => 'Create your world,',\n    'section_2'         => 'The most important resource is :discord, where you will find plenty of our dedicated users, an onboarding team, as well as the founder of Kanka, who can answer any questions that you may have.',\n    'section_4'         => 'Our :youtube has videos covering the basics of Kanka. While not all topics are covered yet, we regularly add new videos.',\n    'section_4_v2'      => 'Our :knowledge-base covers the most basic questions you might have, and for a more complete help, you can head over to our :documentation!',\n    'section_6'         => 'Contact us',\n    'section_7'         => 'If you haven\\'t found an answer to your questions, or simply want to get in touch, you can email us at :email. We are a tiny team, but we make sure to answer every email we get, so do not hesitate!',\n    'section_8'         => 'One last thing',\n    'section_9_v2'      => 'We have made sure that all core features in Kanka are free. However, if you want to support us in this project and gain access to additional features and our gratitude, you can become a subscriber. Learn more on the :pricing page.',\n    'social_account'    => 'If you are having issues logging into your account, a small reminder that you are using a :provider login. You can change this in your account settings.',\n    'title'             => 'Welcome to Kanka',\n];\n"
  },
  {
    "path": "lang/en/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Add abilities',\n        'reset' => 'Recharge',\n        'sync'  => 'Add from races',\n    ],\n    'charges'   => [\n        'left'  => ':amount left',\n    ],\n    'create'    => [\n        'helper'            => 'Attach one of several abilities to :name.',\n        'success'           => 'Ability :ability added to :entity.',\n        'success_multiple'  => 'Abilities :abilities added to :entity.',\n        'title'             => 'Add abilities',\n    ],\n    'fields'    => [\n        'note'      => 'Note',\n        'position'  => 'Position',\n    ],\n    'groups'    => [\n        'unorganised'   => 'Unorganised',\n    ],\n    'helpers'   => [\n        'note'      => 'You can reference entries using advanced mentions (ex :code) and properties of the entry (ex :attr) in this field.',\n        'recharge'  => 'Reset all charges for abilities that have been used.',\n        'sync'      => 'Import abilities that are defined on the character\\'s races.',\n    ],\n    'import'    => [\n        'errors'            => [\n            'no_race'       => 'The character has no race.',\n            'not_character' => 'The entry isn\\'t a character.',\n        ],\n        'helper'            => 'Attach abilities from the following races :name belongs to:',\n        'no_abilities'      => 'Currently there are no abilities to import from the races :name belongs to.',\n        'race_abilities'    => '{1} :name (:count ability)|[2,*] :name (:count abilities)',\n        'success'           => '{1} :count race ability imported.|[2,*] :count race abilities imported.',\n    ],\n    'recharge'  => [\n        'success'   => 'All charges have been reset.',\n    ],\n    'reorder'   => [\n        'parentless'    => 'No Parent',\n        'success'       => 'Abilities successfully reordered',\n    ],\n    'show'      => [\n        'helper'    => 'Attach abilities to :name to represent what powers they possess.',\n        'reorder'   => 'Reorder',\n        'title'     => ':name Abilities',\n    ],\n    'types'     => [\n        'unorganised'   => 'Abilities are grouped by their parent field, and fallback to being here.',\n    ],\n    'update'    => [\n        'success'   => 'Entry ability :ability updated.',\n        'title'     => 'Entry Ability for :name',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'archetype'         => [\n        'set'       => 'Set as archetype',\n        'toggle'    => 'Toggled template status.',\n        'unset'     => 'Remove as template',\n    ],\n    'archive'           => [\n        'success'   => ':name has been archived.',\n        'title'     => 'Archive',\n    ],\n    'convert'           => 'Convert category',\n    'copy-campaign'     => 'Copy to campaign',\n    'json-export'       => 'JSON export',\n    'markdown-export'   => 'Markdown export',\n    'tooltips'          => [\n        'edit'  => 'Edit this entry',\n    ],\n    'transfer'          => 'Transfer to campaign',\n    'unarchive'         => [\n        'success'   => ':name is no longer archived.',\n        'title'     => 'Unarchive',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Add an alias',\n    ],\n    'create'        => [\n        'helper'    => 'Create an alias for :name, which will make it findable in the global search and through :code mentions.',\n        'success'   => 'Alias :name added to :entity.',\n        'title'     => 'New alias',\n    ],\n    'destroy'       => [\n        'success'   => 'Alias :name removed.',\n    ],\n    'fields'        => [\n        'name'  => 'Name',\n    ],\n    'helpers'       => [\n        'primary'   => 'Setting one or several aliases on the entry will make it findable in the global search (top bar) and through :code mentions.',\n    ],\n    'limit'         => 'Alias limit reached for standard campaigns (:amount/:max). :upgrade for unlimited aliases on this campaign.',\n    'pitch'         => 'Add aliases to this entry to make it easier to find in search and when using mentions. Perfect for nicknames, titles, or alternate spellings.',\n    'placeholders'  => [\n        'name'  => 'New alias',\n    ],\n    'update'        => [\n        'success'   => 'Alias :name updated for :entity.',\n        'title'     => 'Update alias for :name',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'alias' => 'Alias or Secret identity',\n        'file'  => 'Add a file',\n        'link'  => 'External link',\n    ],\n    'copy_alias'    => [\n        'success'   => 'Alias mention copied to the clipboard.',\n        'title'     => 'Click to copy alias mention to the clipboard.',\n    ],\n    'show'          => [\n        'title' => ':name Assets',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'apply_kit'     => 'Apply a property kit',\n        'load'          => 'Load',\n        'manage'        => 'Manage',\n        'more'          => 'Others',\n        'remove_all'    => 'Delete all',\n        'save_and_edit' => 'Apply and Edit',\n        'save_and_story'=> 'Apply and View',\n        'show_hidden'   => 'Show hidden properties',\n        'toggle_privacy'=> 'Private/Public',\n    ],\n    'errors'        => [\n        'api'                   => 'Invalid data',\n        'loop'                  => 'There is an endless loop in this property calculation!',\n        'no_attribute_selected' => 'Select one or more properties first.',\n        'too_many_v2'           => 'Max fields reached (:count/:max). Delete some properties first before being able to add more.',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Community Templates',\n        'is_private'            => 'Private properties',\n        'is_star'               => 'Pinned',\n        'kit'                   => 'Kit',\n        'preferences'           => 'Preferences',\n        'property'              => 'Property',\n        'value'                 => 'Value',\n    ],\n    'filters'       => [\n        'name'  => 'Property name',\n        'value' => 'Property value',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Are you sure you want to delete all of this entry\\'s properties?',\n        'is_private'    => 'Only allow members of the :admin-role role to see this entry\\'s properties.',\n        'setup'         => 'You can represent elements like HP or intelligence of an entry with properties. Add properties manually by clicking on the :manage button, or apply those from a property kit.',\n    ],\n    'index'         => [\n        'success'   => 'Properties for :entity updated.',\n        'title'     => 'Properties for :name',\n    ],\n    'labels'        => [\n        'checkbox'  => 'Checkbox name',\n        'name'      => 'Property name',\n        'section'   => 'Section name',\n        'value'     => 'Property value',\n    ],\n    'live'          => [\n        'success'   => 'Property :attribute updated.',\n        'title'     => 'Updating :attribute',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Number of conquests, Challenge Rating, Initiative, Population',\n        'block'     => 'Multiline name',\n        'checkbox'  => 'Checkbox name',\n        'icon'      => [\n            'class' => 'FontAwesome or RPG Awesome class: fas fa-users',\n            'name'  => 'Icon name',\n        ],\n        'kit'       => 'Select a kit',\n        'number'    => 'Number value',\n        'random'    => [\n            'name'  => 'Property name',\n            'value' => '1-100 or list of values separated by a comma',\n        ],\n        'section'   => 'Section name',\n        'value'     => 'Value of the properties',\n    ],\n    'ranges'        => [\n        'text'  => 'Available options: :options',\n    ],\n    'sections'      => [\n        'unorganised'   => 'Unorganised',\n    ],\n    'show'          => [\n        'hidden'    => 'Hidden properties',\n        'title'     => ':name properties',\n    ],\n    'template'      => [\n        'load'      => [\n            'success'   => 'Kit loaded',\n            'title'     => 'Load from kit',\n        ],\n        'pitch'     => 'Load properties from a property kit or plugins installed from the :plugin.',\n        'success'   => 'Property kit :name applied to :entity',\n        'title'     => 'Apply a property kit on :name',\n    ],\n    'title'         => 'Properties',\n    'toasts'        => [\n        'bulk_deleted'  => 'Property deleted',\n        'bulk_privacy'  => 'Property privacy toggled',\n        'lock'          => 'Property locked',\n        'pin'           => 'Property pinned',\n        'unlock'        => 'Property unlocked',\n        'unpin'         => 'Property unpinned',\n    ],\n    'types'         => [\n        'attribute' => 'Text',\n        'block'     => 'Block',\n        'checkbox'  => 'Checkbox',\n        'icon'      => 'Icon',\n        'kits'      => 'Kits',\n        'number'    => 'Number',\n        'random'    => 'Random',\n        'section'   => 'Section',\n        'text'      => 'Paragraph',\n    ],\n    'update'        => [\n        'success'   => 'Properties for :entity updated.',\n    ],\n    'visibility'    => [\n        'entry'     => 'Property is displayed on the entry menu.',\n        'private'   => 'Property only visible to members of the \"Admin\" role.',\n        'public'    => 'Property visible to all members.',\n        'tab'       => 'Property is displayed only on the Properties tab.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/children.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Children',\n];\n"
  },
  {
    "path": "lang/en/entities/events.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Create a reminder to link :name to a calendar.',\n    ],\n    'fields'    => [\n        'type'  => 'Reminder Type',\n    ],\n    'helpers'   => [\n        'characters'    => 'Setting the type as either the date of birth or of death for this character will automatically calculate their age. :more.',\n        'founding'      => 'Setting the type as :type will automatically calculate the entry\\'s age since founding.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Add reminder',\n        ],\n        'title'     => ':name Reminders',\n    ],\n    'types'     => [\n        'birth'     => 'Birth',\n        'birthday'  => 'Birthday',\n        'death'     => 'Death',\n        'founded'   => 'Founded',\n        'primary'   => 'Primary',\n    ],\n    'years-ago' => '{1} :count year ago|[2,*] :count years ago',\n];\n"
  },
  {
    "path": "lang/en/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [\n        'max'       => [\n            'helper'    => 'You can\\'t attach any more files unless you remove an existing one.',\n            'limit'     => 'This entry has reached its file limit',\n        ],\n        'upgrade'   => [\n            'limit'     => 'You\\'ve reached the limit of :limit files for this entity',\n            'premium'   => 'Upgrade to a premium campaign to attach unlimited files and unlock even more creative flexibility.',\n            'upgrade'   => 'Upgrade to a premium campaign to attach up to :limit files and unlock even more creative flexibility.',\n        ],\n    ],\n    'create'            => [\n        'helper'            => 'Add a file to :name. The file will count towards the gallery storage limit.',\n        'success_plural'    => '{1} File :name added.|[2,*] :count files added.',\n        'title'             => 'New file',\n    ],\n    'destroy'           => [\n        'success'   => 'File :name removed.',\n    ],\n    'fields'            => [\n        'file'  => 'File',\n        'files' => 'Files',\n        'name'  => 'File name',\n    ],\n    'max'               => [\n        'title' => 'Limit reached',\n    ],\n    'update'            => [\n        'success'   => 'File :name updated.',\n        'title'     => 'Update file',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'               => [\n        'change_focus'      => 'Change focus point',\n        'change_visibility' => 'Change visibility',\n        'copy_url'          => 'Copy image URL',\n        'copy_url_success'  => 'Image URL copied to your clipboard.',\n        'replace_image'     => 'Replace image',\n        'save-replace'      => 'Replace image',\n        'save_focus'        => 'Save focus point',\n        'view'              => 'View image',\n    ],\n    'call-to-action'        => 'Click on the entry\\'s image to set it\\'s focus point instead of using the automated guess.',\n    'focus'                 => [\n        'breadcrumb'    => 'Image focus',\n        'helper'        => 'Click on the image to set the focus point. Click on the focus point to remove it.',\n        'panel_title'   => 'Image focus',\n        'success'       => 'Image focus updated.',\n        'title'         => 'Image Focus for :name',\n        'unboosted'     => 'Setting an image focus point is reserverd to :boosted-campaigns.',\n        'warning'       => 'The focus point for :gallery images is shared by all entries that use that same image.',\n    ],\n    'gallery_permissions'   => [\n        'admin'     => 'This gallery image is only visible to the members of the :admin role.',\n        'adminself' => 'This gallery image is only visible to :creator and the members of the :admin role.',\n        'member'    => 'This gallery image is only visible to the members of the campaign.',\n        'self'      => 'This gallery image is only visible to you.',\n    ],\n    'replace'               => [\n        'breadcrumb'    => 'Image replacement',\n        'panel_title'   => 'Entry image replacement',\n        'success'       => 'Image replaced.',\n        'title'         => 'Image replacement',\n    ],\n    'visibility'            => [\n        'helper'    => 'Change the gallery image\\'s visibility, controlling who can view it.',\n        'updated'   => 'Image visibility updated.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'copy_from_entity'  => 'Copy from another entry',\n        'copy_inventory'    => 'Copy inventory',\n        'generate'          => 'Generate',\n        'multiple'          => 'Add items',\n    ],\n    'copy'              => [\n        'helper'    => 'Copy the whole inventory of an entry to :name.',\n    ],\n    'create'            => [\n        'helper'        => 'Add an item to :name\\'s inventory. It can optionally be linked to an existing object from the campaign.',\n        'success'       => 'Item :item added to :entity.',\n        'success_bulk'  => '{0} No item added to :entity.|{1} Added :count item to :entity.|[2,*] Added :count items to :entity.',\n        'title'         => 'Add to inventory',\n    ],\n    'default_position'  => 'Unorganised',\n    'destroy'           => [\n        'success'           => 'Item :item removed from :entity.',\n        'success_position'  => 'Items in :position removed from :entity.',\n    ],\n    'fields'            => [\n        'amount'                => 'Quantity',\n        'copy_entity_entry_v2'  => 'Use object entry',\n        'description'           => 'Description',\n        'is_equipped'           => 'Equipped',\n        'item_amount'           => 'Number of Items',\n        'match_all'             => 'Match all tags',\n        'name'                  => 'Name',\n        'position'              => 'Position',\n        'qty'                   => 'QTY',\n        'replace'               => 'Replace Inventory',\n    ],\n    'generate'          => [\n        'helper'    => 'Generate an inventory for :name based on existing items in the campaign.',\n        'title'     => 'Generate inventory',\n    ],\n    'helpers'           => [\n        'amount'                => 'Number of items',\n        'copy_entity_entry_v2'  => 'Display the object\\'s entry instead of the custom description.',\n        'description'           => 'Add a custom description to the item',\n        'is_equipped'           => 'Mark this item as being equipped.',\n        'name'                  => 'Give the name to the item. A name is required if no object is selected',\n        'replace'               => 'Replaces current inventory with the generated one',\n    ],\n    'placeholders'      => [\n        'amount'        => 'Any amount',\n        'description'   => 'Used, Damaged, Attuned',\n        'name'          => 'Sleeping bag',\n        'position'      => 'Select or create a position',\n    ],\n    'show'              => [\n        'helper'    => 'To create this entry\\'s inventory, start by adding an item to it.',\n        'title'     => ':name Inventory',\n        'unsorted'  => 'Unsorted',\n    ],\n    'togglers'          => [\n        'hide'  => [\n            'price'     => 'Hide price',\n            'quantity'  => 'Hide quantity',\n            'size'      => 'Hide size',\n            'weight'    => 'Hide weight',\n        ],\n        'show'  => [\n            'price'     => 'Show price',\n            'quantity'  => 'Show quantity',\n            'size'      => 'Show size',\n            'weight'    => 'Show weight',\n        ],\n    ],\n    'tooltips'          => [\n        'equipped'  => 'This item is equipped',\n    ],\n    'tutorials'         => [\n        'all'   => 'Track what :name owns, stores, or offers by adding items to this inventory.',\n    ],\n    'update'            => [\n        'success'   => 'Item :item updated for :entity.',\n        'title'     => 'Update an item on :name',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Add a link',\n    ],\n    'call-to-action'    => 'Add external links to this entry, like a character sheet on D&D Beyond or a relevant wiki page. Linked resources will be shown directly on the entry\\'s overview for easy access.',\n    'create'            => [\n        'helper'    => 'Add an external link to :name, for example to their DnDBeyond page.',\n        'success'   => 'Link :name added to :entity.',\n        'title'     => 'New link',\n    ],\n    'destroy'           => [\n        'success'   => 'Link :name removed.',\n    ],\n    'fields'            => [\n        'icon'      => 'Icon',\n        'name'      => 'Name',\n        'position'  => 'Position',\n        'url'       => 'URL',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'I\\'m sure',\n            'trust'     => 'Don\\'t ask me again',\n        ],\n        'description'   => 'This link will take you to :link. Are you sure you want to go there?',\n        'title'         => 'Leaving Kanka',\n    ],\n    'helpers'           => [\n        'icon'      => 'Customise the link icon with a special :fontawesome icon, for example :example. Find our more about available icons in our :docs.',\n        'parent'    => 'Display this bookmark after an element of the sidebar, rather than in the bookmark section of the sidebar.',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'Premium campaigns can add links to entries that point to external websites.',\n        'title'     => 'Links for :name',\n    ],\n    'update'            => [\n        'success'   => 'Link :name updated for :entity.',\n        'title'     => 'Update link for :name',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'        => 'Created',\n        'create_post'   => 'Created article',\n        'delete'        => 'Deleted',\n        'delete_post'   => 'Deleted article',\n        'reorder_post'  => 'Reordered articles',\n        'restore'       => 'Restored',\n        'reveal'        => 'Show details',\n        'update'        => 'Updated',\n        'update_post'   => 'Updated article',\n        'view'          => 'View changes',\n    ],\n    'call-to-action'    => 'Premium campaigns can view the full changes made to this entry for up to :amount day.',\n    'fields'            => [\n        'action'    => 'Action',\n        'date'      => 'Date',\n    ],\n    'filters'           => [\n        'keywords'  => 'Keywords',\n    ],\n    'impersonated'      => 'Impersonated by :name',\n    'none'              => 'None',\n    'show'              => [\n        'title' => ':name - Changes',\n    ],\n    'tooltips'          => [\n        'post'  => 'Go to the article',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'This entry is pinned on the following maps.',\n    'title'     => ':name Map Points',\n];\n"
  },
  {
    "path": "lang/en/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Element',\n        'type'      => 'Type',\n    ],\n    'helper'            => 'This entry is mentioned in the following other entries, articles, or campaign description.',\n    'mentioned_in_v2'   => 'This entry is mentioned in :count elements. :more.',\n    'see_more'          => 'View details',\n    'show'              => [\n        'title' => 'Entry :name Mentions',\n    ],\n    'title'             => 'Mentioned entry',\n];\n"
  },
  {
    "path": "lang/en/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'      => 'Copy',\n        'transfer'  => 'Transfer',\n    ],\n    'errors'        => [\n        'permission'        => 'You aren\\'t allowed to create :type entries in :target.',\n        'permission_update' => 'You aren\\'t allowed to transfer this entry.',\n        'same_campaign'     => 'Select another campaign to transfer the entry to.',\n        'unknown_campaign'  => 'Unknown campaign.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Target campaign',\n        'copy'          => 'Copy option',\n        'select_one'    => 'Select a campaign',\n    ],\n    'helpers'       => [\n        'copy'  => 'Keep a copy in the current campaign.',\n    ],\n    'panel'         => [\n        'description'           => 'Transfer this entry to another campaign. You can optionally keep a copy here.',\n        'description_bulk_copy' => 'Select a campaign you want to copy the selected entries to.',\n        'title'                 => 'Transfer an entry to another campaign',\n    ],\n    'success'       => 'Entry :name transferred to :campaign.',\n    'success_copy'  => 'Entry :name copied to the :campaign campaign.',\n    'title'         => 'Transfer :name',\n    'warnings'      => [\n        'custom'    => 'This entry is not from a default category, but of a custom \":module\" category. It will be created as a Note entry in the target campaign.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'New article',\n        'add_role'  => 'Add role',\n        'add_user'  => 'Add user',\n    ],\n    'collapsed'     => [\n        'closed'    => 'Article is collapsed to just the header',\n        'open'      => 'Article is expanded',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Copy advanced mention',\n        'copy_with_name'    => 'Copy advanced mention with article name',\n        'success'           => 'Advanced mention to article copied to the clipboard.',\n    ],\n    'create'        => [\n        'success'   => 'Article \\':name\\' added to :entity.',\n    ],\n    'destroy'       => [\n        'success'   => 'Article :name removed from :entity.',\n    ],\n    'edit'          => [\n        'success'   => 'Article :name for :entity updated.',\n    ],\n    'fields'        => [\n        'creator'   => 'Creator',\n        'display'   => 'Display',\n        'name'      => 'Name',\n        'position'  => 'Position',\n    ],\n    'footer'        => [\n        'created'   => 'Created by :user on :date',\n        'updated'   => 'Updated by :user on :date',\n    ],\n    'hint'          => 'Information that doesn\\'t quite fit in the standard fields of an entry or that should be kept private can be added as articles.',\n    'hints'         => [\n        'reorder'   => 'You can reorder articles of an entry by clicking on the :icon icon in entry\\'s header.',\n    ],\n    'move'          => [\n        'copy'          => 'Keep a copy of the article on the current entry.',\n        'copy_success'  => 'Article :name moved to :entity successfully.',\n        'copy_title'    => 'Keep a copy',\n        'description'   => 'Select an entry to move this article to',\n        'entity'        => 'Target entry',\n        'move_success'  => 'Article :name moved to :entity successfully.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Name of the article, observation or remark',\n    ],\n    'show'          => [\n        'advanced'  => 'Advanced Permissions',\n        'title'     => 'Article :name for :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'Collapsed',\n        'expanded'  => 'Expanded',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'This entry is set to private. Custom permissions can still be defined, but as long as the entry is private, those will be ignored, and only members of the :admin role will be able to see the entry.',\n        'warning'   => 'Warning',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'No role or user outside of the admins have access to this entry.',\n        'manage'            => 'Manage Permissions',\n        'screen-reader'     => 'Open privacy settings',\n        'success'           => [\n            'private'   => ':entity is now hidden.',\n            'public'    => ':entity is now visible.',\n        ],\n        'title'             => 'Permission overview',\n        'viewable-by'       => 'Viewable by',\n    ],\n    'toggle'    => [\n        'label'     => 'Entry privacy',\n        'private'   => [\n            'description'   => 'Only visible to members of :admin role.',\n            'title'         => 'Private',\n        ],\n        'public'    => [\n            'description'   => 'Visible to the following roles and members.',\n            'title'         => 'Public',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Links',\n    'title' => 'Pins',\n];\n"
  },
  {
    "path": "lang/en/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Edit profile',\n    ],\n    'aliases'   => 'Aliases',\n    'history'   => 'History',\n    'show'      => [\n        'tab_name'  => 'Profile',\n        'title'     => ':name Profile',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'This entry is part of the following quests.',\n    'title'     => ':name Quests',\n];\n"
  },
  {
    "path": "lang/en/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Relations map',\n        'mode-table'    => 'Table of relations and related elements',\n    ],\n    'bulk'              => [\n        'delete'    => '{0} Deleted :count relations|{1} Deleted :count relation.|[2,*] Deleted :count relations.',\n        'fields'    => [\n            'delete_mirrored'   => 'Delete mirrored',\n            'unmirror'          => 'Unlink mirrored',\n            'update_mirrored'   => 'Update mirrored',\n        ],\n        'helpers'   => [\n            'delete_mirrored'   => 'Also delete mirrored relations.',\n            'unmirror'          => 'Unlink mirrored relations.',\n            'update_mirrored'   => 'Update mirrored relations.',\n        ],\n        'success'   => [\n            'editing'           => '{0} :count relations were updated|{1} :count relation was updated.|[2,*] :count relationss were updated.',\n            'editing_partial'   => '{0} :count/:total relationss were updated|{1} :count/:total relation was updated.|[2,*] :count/:total relations were updated.',\n        ],\n    ],\n    'call-to-action'    => 'Visually explore how this entry connects to others in the campaign. See relationships, mentions, and shared history in a dynamic and interactive map.',\n    'connections'       => [\n        'map_point'         => 'Map point',\n        'mention'           => 'Mention',\n        'quest_element'     => 'Quest element',\n        'timeline_element'  => 'Timeline element',\n    ],\n    'create'            => [\n        'helper'        => 'Create a relation between :name and one or several entries.',\n        'new_title'     => 'New relation',\n        'success_bulk'  => '{1} Added :count relation to :entity.|[2,*] Added :count relations to :entity.',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'This relation is mirrored on the target entry. Select this option to also remove the mirrored relation.',\n        'option'    => 'Delete mirrored relation',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'This will also delete the mirrored relation and is permanent.',\n        'success'   => 'Relation :target removed for :entity.',\n    ],\n    'fields'            => [\n        'attitude'          => 'Attitude',\n        'is_pinned'         => 'Pinned',\n        'link'              => 'Reciprocal link',\n        'mirror_relation'   => 'Reciprocal role',\n        'owner'             => 'Origin',\n        'role'              => 'Role',\n        'target'            => 'Target',\n        'targets'           => 'Connection to...',\n        'two_way'           => 'Reciprocal',\n        'unmirror'          => 'Untie this relation.',\n    ],\n    'filters'           => [\n        'connection'    => 'Relation relation',\n        'name'          => 'Relation target',\n    ],\n    'helper'            => 'Set up relations between entries with attitudes and visibility. Relations can also be pinned to the entry\\'s menu.',\n    'helpers'           => [\n        'description'       => 'Detail the nature of the relation between the two entries.',\n        'link'              => 'Create a matching relation on the targets.',\n        'mirror_relation'   => 'How the target sees this entry (leave blank to copy above).',\n        'no_relations'      => 'This entry doesn\\'t currently have any relations to other entries of the campaign.',\n    ],\n    'hints'             => [\n        'attitude'  => 'This optional field can be used to define the default order relations appear in by descending order.',\n        'two_way'   => 'Create a mirrored relation on the targets. Updating a mirrored relation doesn\\'t update the original relation.',\n    ],\n    'index'             => [\n        'title' => 'Relations',\n    ],\n    'linked'            => [\n        'break'             => 'Break link',\n        'helper'            => 'This relation is synced with :link',\n        'label'             => 'Linked relation',\n        'unmirror-helper'   => 'Converting this to a standalone relation will not delete anything.',\n    ],\n    'options'           => [\n        'mentions'          => 'Default + related + mentions',\n        'only_relations'    => 'Only direct relations',\n        'related'           => 'Default + related',\n        'relations'         => 'Default',\n        'show'              => 'Show',\n    ],\n    'panels'            => [\n        'related'   => 'Related',\n    ],\n    'placeholders'      => [\n        'attitude'  => '-100 to 100, 100 being very positive',\n        'role'      => 'Rival, Best Friend, Sibling',\n    ],\n    'show'              => [\n        'title' => ':name relations',\n    ],\n    'types'             => [\n        'family_member'         => 'Family member',\n        'organisation_member'   => 'Organisation Member',\n    ],\n    'update'            => [\n        'success'   => 'Relation :target updated for :entity.',\n        'title'     => 'Update relations between :source and :target',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/reminders.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'       => 'Link to a calendar',\n        'remove'    => 'Remove calendar date',\n    ],\n    'helpers'   => [\n        'pitch' => 'Leave the real-world calendar behind and link this entry to a calendar from your world to stay immersed in your fictional timeline.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/share.php",
    "content": "<?php\n\nreturn [\n    'buttons'   => [\n        'copy'          => 'Copy link',\n        'make_public'   => 'Make campaign public',\n    ],\n    'fields'    => [\n        'campaign_access'   => 'Campaign settings',\n        'visibility_mode'   => 'Fix visibility',\n    ],\n    'helpers'   => [\n        'campaign_access'               => 'To share this with the public, the campaign itself must be made public first.',\n        'entity_permissions_warning'    => 'Making this campaign public lets anyone view it. Entries marked as private stay hidden.',\n        'hidden_explanation'            => 'The campaign is public, but this entry is currently hidden from non-members.',\n        'hidden_unlisted_explanation'   => 'The campaign is unlisted, only people with the link can find it.',\n        'member-link'                   => 'Share this with members only',\n        'private_explanation'           => 'Only members can can access this entry.',\n        'public_explanation'            => 'Both the campaign and this entry are public. Anyone with the link can view it.',\n        'unlisted_explanation'          => 'The campaign is unlisted and this entry is visible. Anyone with the link can view it.',\n    ],\n    'labels'    => [\n        'member_link'   => 'Member-only link',\n        'public_link'   => 'Public link',\n        'share_link'    => 'Share link',\n    ],\n    'options'   => [\n        'keep_private'          => 'Keep campaign private',\n        'make_all_public'       => 'Show all :module to non-members',\n        'make_campaign_public'  => 'Make campaign public',\n        'make_entity_public'    => 'Show :name to non-members',\n    ],\n    'status'    => [\n        'hidden'    => 'Not visible to non-members',\n        'private'   => 'This campaign is private',\n        'public'    => 'Visible to non-members',\n        'unlisted'  => 'Visible to anyone with the link',\n    ],\n    'success'   => [\n        'copied'            => 'Link copied to clipboard!',\n        'copied_members'    => 'Member-only link copied.',\n        'copied_public'     => 'Public link copied, anyone with the link can view the entry.',\n        'updated'           => 'Visibility settings updated successfully.',\n    ],\n    'title'     => 'Share entry',\n];\n"
  },
  {
    "path": "lang/en/entities/statuses.php",
    "content": "<?php\n\nreturn [\n    'character'     => [\n        'alive'     => 'Alive',\n        'dead'      => 'Dead',\n        'missing'   => 'Missing',\n    ],\n    'creature'      => [\n        'dead'      => 'Dead',\n        'extinct'   => 'Extinct',\n    ],\n    'family'        => [\n        'extinct'   => 'Extinct',\n    ],\n    'item'          => [\n        'destroyed' => 'Destroyed',\n        'lost'      => 'Lost',\n        'owned'     => 'Owned',\n    ],\n    'location'      => [\n        'destroyed' => 'Destroyed',\n    ],\n    'organisation'  => [\n        'defunct'   => 'Defunct',\n    ],\n    'quest'         => [\n        'abandoned'     => 'Abandoned',\n        'completed'     => 'Completed',\n        'not_started'   => 'Not started',\n        'ongoing'       => 'Ongoing',\n    ],\n    'race'          => [\n        'extinct'   => 'Extinct',\n    ],\n    'remove'        => 'Remove',\n];\n"
  },
  {
    "path": "lang/en/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'      => 'Collapse all',\n        'expand_all'        => 'Expand all',\n        'load_more'         => 'Load more',\n        'login_for_more'    => 'Login to view more articles',\n    ],\n    'reorder'   => [\n        'helper'        => 'Drag and drop articles to reorder them on the entry\\'s overview page.',\n        'icon_tooltip'  => 'Reorder articles',\n        'panel_title'   => 'Reorder articles',\n        'save'          => 'Save new order',\n        'success'       => 'Articles reordered.',\n    ],\n    'update'    => [\n        'title' => 'Update :entity entry',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/tags.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Add or remove tags on :name.',\n        'title'     => 'Add or remove tags',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Timelines that have elements linked to this entry are shown below.',\n    'show'      => [\n        'title' => ':name Timelines',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entities/tooltips.php",
    "content": "<?php\n\nreturn [\n    'empty'         => ':name has no content yet.',\n    'fix'           => 'Add a description',\n    'formatting'    => 'Supported HTML: text (:text), structure (:layout), lists/tables, and images.',\n    'helper'        => 'Override the default auto-generated preview text shown when hovering over links to this entry.',\n    'label'         => 'Teaser',\n    'placeholder'   => 'Briefly describe this entry in a sentence or two.',\n    'premium'       => 'Unlock the ability to customise the hover teaser with a :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/en/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'convert'   => 'Convert to category',\n    ],\n    'bulk'          => [\n        'errors'    => [\n            'unknown_type'  => 'Unknown or invalid category.',\n        ],\n        'success'   => '{1} :count entry transformed to new category :type.|[2,*] :count entries transformed to new category :type.',\n    ],\n    'confirm'       => [\n        'checkbox'  => 'I understand that by transforming :entity to another category, the following elements will be lost:',\n        'label'     => 'Confirm data loss',\n    ],\n    'documentation' => 'Documentation: Converting entry categories',\n    'fields'        => [\n        'current'       => 'Current category',\n        'select_one'    => 'Select new category',\n        'target'        => 'New category',\n    ],\n    'panel'         => [\n        'bulk_description'  => 'Convert the category of multiple entries. Please be aware that some data might be lost due to the different fields between categories.',\n        'bulk_title'        => 'Change categories of multiple entries',\n        'title'             => 'You can convert this entry to another category.',\n        'warning'           => 'Some data may not carry over if the new category uses different fields.',\n    ],\n    'success'       => 'Entry :name transformed.',\n    'title'         => 'Convert :name',\n];\n"
  },
  {
    "path": "lang/en/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Abilities',\n    'ability'               => 'Ability',\n    'archetype'             => 'Archetype',\n    'archetypes'            => 'Archetypes',\n    'article'               => 'Article',\n    'articles'              => 'Articles',\n    'attribute_template'    => 'Property kit',\n    'attribute_templates'   => 'Property kits',\n    'bookmark'              => 'Bookmark',\n    'bookmarks'             => 'Bookmarks',\n    'calendar'              => 'Calendar',\n    'calendars'             => 'Calendars',\n    'campaign'              => 'Campaign',\n    'campaigns'             => 'Campaigns',\n    'character'             => 'Character',\n    'characters'            => 'Characters',\n    'conversation'          => 'Conversation',\n    'conversations'         => 'Conversations',\n    'creator'               => [\n        'actions'                   => [\n            'create'    => 'Create :type',\n            'full'      => 'Go to the full form',\n            'more'      => 'Add more details',\n        ],\n        'back'                      => 'Back to selection',\n        'bulk_names'                => 'Add one name per line',\n        'duplicate'                 => 'Heads up! There are other entries in this category with a similar name.',\n        'helper_v2'                 => 'Quickly create the foundation of a new entry without interrupting your current flow.',\n        'helpers'                   => [\n            'archetype' => 'Select an archetype the new entries will be copies of',\n        ],\n        'missing_v2'                => 'Only categories that are enabled and that you have permission to create are available in this interface. :learn-more.',\n        'modes'                     => [\n            'archetypes'    => 'Archetype selection',\n            'bulk'          => 'Bulk add',\n            'default'       => 'Quick add',\n        ],\n        'name'                      => [\n            'new'       => 'New name',\n            'remove'    => 'Remove',\n        ],\n        'success_multiple'          => '{1} New entry :link created.|[2,*] New entries :link created.',\n        'success_multiple_posts'    => '{1} New article :link created.|[2,*] New articles :link created.',\n        'title'                     => 'New Entry',\n        'titles'                    => [\n            'everything'    => 'Everything',\n            'quick-access'  => 'Quick access',\n        ],\n        'tooltip'                   => 'Create a new entry without leaving the current page.',\n        'tooltips'                  => [\n            'create'        => 'Create the entry and go back to the entry selection screen',\n            'create_more'   => 'Create the entry and start creating another one of the same type',\n            'edit'          => 'Create the entry and start editing it',\n        ],\n    ],\n    'creature'              => 'Creature',\n    'creatures'             => 'Creatures',\n    'dice_roll'             => 'Dice Roll',\n    'dice_rolls'            => 'Dice Rolls',\n    'entries'               => 'Entries',\n    'entry'                 => 'Entry',\n    'event'                 => 'Event',\n    'events'                => 'Events',\n    'families'              => 'Families',\n    'family'                => 'Family',\n    'inventories'           => 'Inventories',\n    'item'                  => 'Object',\n    'items'                 => 'Objects',\n    'journal'               => 'Journal',\n    'journals'              => 'Journals',\n    'location'              => 'Location',\n    'locations'             => 'Locations',\n    'map'                   => 'Map',\n    'maps'                  => 'Maps',\n    'media'                 => 'Media',\n    'note'                  => 'Note',\n    'notes'                 => 'Notes',\n    'organisation'          => 'Organisation',\n    'organisations'         => 'Organisations',\n    'properties'            => 'Properties',\n    'quest'                 => 'Quest',\n    'quest_element'         => 'Quest element',\n    'quests'                => 'Quests',\n    'race'                  => 'Race',\n    'races'                 => 'Races',\n    'relation'              => 'Relation',\n    'relations'             => 'Relations',\n    'reminders'             => 'Reminders',\n    'status'                => 'Status',\n    'tag'                   => 'Tag',\n    'tags'                  => 'Tags',\n    'templates'             => 'Templates',\n    'timeline'              => 'Timeline',\n    'timeline_element'      => 'Timeline element',\n    'timelines'             => 'Timelines',\n    'whiteboard'            => 'Whiteboard',\n    'whiteboards'           => 'Whiteboards',\n];\n"
  },
  {
    "path": "lang/en/entries/archetypes.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'how'   => 'How to define archetypes',\n    ],\n    'success'   => [\n        'set'   => ':name set as an archetype.',\n        'unset' => ':name no longer set as an archetype.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entries/archive.php",
    "content": "<?php\n\nreturn [\n    'banner'    => 'This entry is archived and no longer shows up in lists or searches.',\n];\n"
  },
  {
    "path": "lang/en/entries/bulk.php",
    "content": "<?php\n\nreturn [\n    'success'   => [\n        'copy_to_campaign'  => '{1} :count entry copied to :campaign.|[2,*] :count entries copied to :campaign.',\n        'delete'            => '{1} Deleted :count entry.|[2,*]Deleted :count entries.',\n        'editing'           => '{1} :count entry was updated.|[2,*] :count entries were updated.',\n        'editing_partial'   => '{1} :count/:total entry was updated.|[2,*] :count/:total entries were updated.',\n        'permissions'       => '{1} Permissions changed for :count entry.|[2,*] Permissions changed for :count entries.',\n        'private'           => '{1} :count entry is now private.|[2,*] :count entries are now private.',\n        'public'            => '{1} :count entry is now visible.|[2,*] :count entries are now visible.',\n        'templates'         => '{1} :count entry had a set applied.|[2,*] :count entries has a set applied.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entries/fields.php",
    "content": "<?php\n\nreturn [\n    'name'  => [\n        'placeholder'   => 'Name of the entry',\n    ],\n    'type'  => [\n        'placeholder'   => 'Type of the entry',\n    ],\n];\n"
  },
  {
    "path": "lang/en/entries/tabs.php",
    "content": "<?php\n\nreturn [\n    'aliases'       => 'Aliases',\n    'identity'      => 'Identity',\n    'media'         => 'Media',\n    'properties'    => 'Properties',\n    'relations'     => 'Relations',\n];\n"
  },
  {
    "path": "lang/en/errors.php",
    "content": "<?php\n\nreturn [\n    '403'               => [\n        'body'  => 'It looks like you don\\'t have permission to access this page!',\n        'title' => 'Permission Denied',\n    ],\n    '403-form'          => [\n        'help'  => 'This might be due to your session timing out. Please try logging in again in another window before saving.',\n    ],\n    '404'               => [\n        'body'  => 'Sorry, the page you are looking for could not be found.',\n        'title' => 'Page Not Found',\n    ],\n    '500'               => [\n        'body'  => [\n            '1' => 'Whoops, looks like something went wrong.',\n            '2' => 'A report with the encountered error was sent to us, but sometimes it helps if we can know a little bit more about what you were doing.',\n        ],\n        'title' => 'Error',\n    ],\n    '503'               => [\n        'body'  => [\n            '1' => 'Kanka is currently under maintenance, which usually means an update is underway!',\n            '2' => 'Sorry for the inconvenience. Everything will return to normal in just a few minutes.',\n        ],\n        'json'  => 'Kanka is currently under maintenance, please try again in a few minutes.',\n        'title' => 'Maintenance',\n    ],\n    'back-to-campaigns' => 'Go back to one of your campaigns',\n    'footer'            => 'If you need further assistance, please contact us at :email or on the :discord',\n    'log-in'            => 'Logging in to your account might reveal what you are looking for.',\n    'post_layout'       => 'Invalid article layout.',\n    'private-campaign'  => [\n        'auth'  => [\n            'helper'    => 'You don\\'t have access to this campaign.',\n        ],\n        'guest' => [\n            'helper'    => 'The campaign you are trying to access is private and you are not logged in.',\n            'login'     => 'Logging in might let you access the contents.',\n        ],\n        'title' => 'Private campaign',\n    ],\n];\n"
  },
  {
    "path": "lang/en/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Event',\n    ],\n    'events'        => [\n        'helper'    => 'Events that have this entry as their parent event are displayed here.',\n    ],\n    'fields'        => [\n        'date'  => 'Date',\n    ],\n    'helpers'       => [\n        'date'  => 'This field can contain anything and is not linked to your calendars. To link this event to a calendar, go add it on the calendar or on the reminders subpage of this event.',\n    ],\n    'lists'         => [\n        'empty' => 'Add significant moments such as battles, coronations, or discoveries to your world\\'s history.',\n    ],\n    'placeholders'  => [\n        'date'  => 'A date for the event',\n        'type'  => 'Ceremony, Festival, Disaster, Battle, Birth',\n    ],\n    'tabs'          => [\n        'calendars' => 'Calendar Entries',\n    ],\n];\n"
  },
  {
    "path": "lang/en/export.php",
    "content": "<?php\n\nreturn [\n    'content'           => 'Content',\n    'hidden_campaign'   => 'Hidden Campaign',\n    'index'             => 'Entry Index',\n];\n"
  },
  {
    "path": "lang/en/families/trees.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'clear'             => 'Erase all',\n        'first'             => 'Add a founder',\n        'founder'           => 'Add a new founder',\n        'rename-relation'   => 'Rename relation',\n        'reset'             => 'Discard changes',\n        'save'              => 'Save',\n    ],\n    'modal'     => [\n        'first-title'   => 'Select an entry',\n        'helper'        => 'Replace the entry with another from the campaign',\n        'relation'      => 'Relation',\n        'title'         => 'Replace entry',\n    ],\n    'modals'    => [\n        'clear'     => [\n            'confirm'   => 'Are you sure you want to reinitialise all the data from the family tree?',\n        ],\n        'entity'    => [\n            'add'       => [\n                'founder'   => 'Founder',\n                'member'    => 'Member',\n                'success'   => 'Entry added.',\n                'title'     => 'Add an entry',\n            ],\n            'child'     => [\n                'success'   => 'Child added.',\n                'title'     => 'Add a child',\n            ],\n            'edit'      => [\n                'helper'    => 'Check this option if the relation is unknown. A character can be added later.',\n                'success'   => 'Entry updated.',\n                'title'     => 'Update an entry',\n            ],\n            'founder'   => [\n                'title' => 'Add a new founder',\n            ],\n            'remove'    => [\n                'confirm'   => 'Are you sure you want to remove this entry from the family tree?',\n                'success'   => 'Entry removed.',\n            ],\n        ],\n        'relations' => [\n            'add'       => [\n                'success'   => 'Relation added.',\n                'title'     => 'Add a relation',\n            ],\n            'edit'      => [\n                'success'   => 'Relation updated.',\n                'title'     => 'Update a relation',\n            ],\n            'unknown'   => 'Unknown',\n        ],\n        'reset'     => [\n            'confirm'   => 'Are you sure you want to discard any changes made to the family tree?',\n        ],\n    ],\n    'pitch'     => 'Build a detailed family tree to visualize relationships and lineage within your world\\'s families.',\n    'success'   => [\n        'cleared'   => 'Family tree erased.',\n        'reseted'   => 'Family tree has been reset.',\n        'saved'     => 'Family tree saved.',\n    ],\n    'title'     => ':name Family Tree',\n    'unknown'   => 'unestablished',\n];\n"
  },
  {
    "path": "lang/en/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Family',\n    ],\n    'hints'         => [\n        'is_extinct'    => 'This family is extinct.',\n        'members'       => 'Members of a family are listed here. A character can be added to a family by editing the desired character and using the \"Family\" dropdown.',\n    ],\n    'lists'         => [\n        'empty' => 'Track lineages, clans, or noble houses that connect your characters together.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Add one or several members to :name.',\n            'success'   => '{0} No member was added.|{1} 1 member was added.|[2,*] :count members were added.',\n            'title'     => 'New Members',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Name of the family',\n        'type'  => 'Royal, Noble, Extinct',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'tree'  => 'Family tree',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/fields.php",
    "content": "<?php\n\nreturn [\n    'description'       => [\n        'label' => 'Description',\n    ],\n    'entry'             => [\n        'label' => 'Entry',\n    ],\n    'gallery'           => [\n        'placeholder'   => 'Choose an image from the gallery',\n    ],\n    'gallery-header'    => [\n        'description'   => 'If the entry has no header image, display an image from the gallery instead.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'If the entry has no image, display an image from the gallery instead.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Display a background image in the entry\\'s header with a :boosted-campaign.',\n        'description'           => 'Display a background image in the entry\\'s header. For best results, use an image which is very large.',\n        'title'                 => 'Header Image',\n    ],\n];\n"
  },
  {
    "path": "lang/en/filters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'bookmark'  => 'Bookmark this view',\n    ],\n    'alerts'    => [\n        'copy'  => 'The filters have been copied to your clipboard.',\n    ],\n    'bookmark'  => [\n        'helper'    => 'Create a new bookmark to this view using the current filters.',\n        'name'      => ':module (filtered)',\n        'premium'   => 'Adding more bookmarks requires enabling premium campaign features.',\n        'success'   => 'Bookmark created.',\n    ],\n    'helpers'   => [\n        'guest'         => 'Please log into your account to filter results.',\n        'icon'          => 'Give this bookmark a special :fontawesome icon, for example :example.',\n        'icon-premium'  => 'Give this bookmark a special :fontawesome icon, like :example, with a :premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/footer.php",
    "content": "<?php\n\nreturn [\n    'about'             => 'About us',\n    'blog'              => 'Blog',\n    'boosters'          => 'Boosters',\n    'community'         => 'Community',\n    'company'           => 'Company',\n    'contact'           => 'Contact',\n    'copyright'         => 'Copyright :copy :year Owlchester SNC',\n    'documentation'     => 'Documentation',\n    'features'          => 'Features',\n    'kb'                => 'Knowledge base',\n    'language-switcher' => [\n        'other' => 'Other languages',\n        'title' => 'Select your language',\n    ],\n    'made'              => 'Made with ❤️ in Geneva, Switzerland',\n    'newsletter'        => 'Newsletter',\n    'platform'          => 'Platform',\n    'plugins'           => 'Plugins Library',\n    'premium'           => 'Premium campaigns',\n    'press-kit'         => 'Press kit',\n    'pricing'           => 'Pricing',\n    'privacy'           => 'Privacy',\n    'public-campaigns'  => 'Public campaigns',\n    'resources'         => 'Resources',\n    'roadmap'           => 'Roadmap',\n    'security'          => 'Security',\n    'server-time'       => 'This is our server (:server)\\'s time',\n    'showcase'          => 'Showcase',\n    'status'            => 'Service status',\n    'terms'             => 'Terms',\n    'thanks'            => 'Only possible thanks to our subscribers.',\n    'translator_call'   => 'Kanka is translated in other languages thanks to our amazing community. If you want to help translate Kanka into your language, contact us over on our :discord!',\n    'whats-new'         => 'What\\'s new',\n];\n"
  },
  {
    "path": "lang/en/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Community Votes',\n];\n"
  },
  {
    "path": "lang/en/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Hall of Fame',\n];\n"
  },
  {
    "path": "lang/en/front/kb.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Knowledge base',\n];\n"
  },
  {
    "path": "lang/en/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Learn more',\n        'subscribe'     => 'Subscribe',\n    ],\n    'fields'    => [\n        'firstname'     => 'First Name',\n        'lastname'      => 'Last Name',\n        'notifications' => 'Notifications',\n    ],\n    'groups'    => [\n        'all'           => 'Receive occasional updates about updates, promotions, and events.',\n        'newsletter'    => 'Newsletter',\n    ],\n    'headline'  => 'Subscribe to one or all of our newsletters to stay up to date with :kanka.',\n    'title'     => 'Email Updates',\n];\n"
  },
  {
    "path": "lang/en/front.php",
    "content": "<?php\n\nreturn [\n    'campaigns' => [\n        'public'    => [\n            'filters'   => [\n                'is-premium'    => 'This is a premium campaign!',\n            ],\n        ],\n    ],\n    'cookie'    => [\n        'dismiss'   => 'Got it!',\n        'link'      => 'Learn more',\n        'message'   => 'This website uses cookies to ensure you get the best experience on our website.',\n    ],\n    'features'  => [\n        'api'       => [\n            'link'  => 'API docs',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Increased API calls (90 per minute)',\n            'boosts'            => 'Campaign Boosters',\n            'default_image'     => 'Nicer default images for entries in lists',\n            'discord'           => 'Private :discord channel',\n            'free'              => 'Free',\n            'hall_of_fame'      => 'Name in the :link',\n            'impact'            => 'High impact of future features (through Discord)',\n            'monthly_vote'      => 'Participate in community votes',\n            'pagination'        => 'Increased pagination results',\n            'upload_limit'      => 'Upload sizes',\n            'upload_limit_map'  => 'Map upload sizes',\n        ],\n    ],\n    'home'      => [\n        'seo'   => [\n            'meta-description'  => 'Are you a game master, worldbuilder, or a storyteller? We offer a tabletop campaign manager and worldbuilding tool that makes it easy to organise, plan, and enjoy your TTRPG campaigns. We are community driven, and best of all, our core features are free!',\n        ],\n    ],\n    'menu'      => [\n        'dashboard'     => 'Dashboard',\n        'login'         => 'Login',\n        'register'      => 'Register',\n        'register_free' => 'Register for free',\n    ],\n    'meta'      => [\n        'description'   => ':kanka is a flexible digital world builder and online tabletop rpg campaign manager',\n        'title'         => ':kanka - Online tabletop RPG campaign manager and worldbuilding tool',\n    ],\n    'pricing'   => [\n        'tier'  => [\n            'free'  => 'Free',\n            'month' => 'month',\n        ],\n    ],\n    'seo'       => [\n        'keywords'  => 'Worldbuilding, Tabletop RPG, RPG Campaign Manager',\n    ],\n];\n"
  },
  {
    "path": "lang/en/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'gallery'   => 'From gallery',\n        'url'       => 'Upload an image from a URL',\n    ],\n    'browse'    => [\n        'layouts'       => [\n            'large' => 'Large previews',\n            'small' => 'Small previews',\n        ],\n        'search'        => [\n            'placeholder'   => 'Search for an image in the gallery',\n        ],\n        'title'         => 'Gallery',\n        'unauthorized'  => 'None of your roles have the \"browse gallery\" permission.',\n    ],\n    'cta'       => [\n        'action'    => 'Unlock more storage space',\n        'helper'    => 'Unlock up to :size GiB storage space with a :premium-campaign.',\n        'title'     => 'Storage full',\n    ],\n    'delete'    => [\n        'success'   => '[0] Deleted 0 elements|[1] Deleted one element|{2,*} Deleted :count elements',\n    ],\n    'download'  => [\n        'errors'    => [\n            'copy_failed'           => 'Our servers couldn\\'t download the given image.',\n            'gallery_full_free'     => 'The gallery storage space is full. Enable premium features for more storage.',\n            'gallery_full_premium'  => 'The gallery storage space is full. Remove unused files first.',\n            'invalid_format'        => 'The file isn\\'t a valid file format.',\n            'invalid_url'           => 'The provided URL could not be decoded as an image.',\n            'too_big'               => 'The file is too large (:size MiB vs :max MiB)',\n            'unauthorized'          => 'None of your roles have the \"upload to gallery\" permission.',\n        ],\n    ],\n    'file'      => [\n        'saved' => 'Saved',\n    ],\n    'filters'   => [\n        'only_unused'   => 'Only show unused files',\n        'sort'          => 'Sort by',\n    ],\n    'move'      => [\n        'success'   => '[0] Moved 0 elements|[1] Moved one element|{2,*} Moved :count elements',\n    ],\n    'update'    => [\n        'home'      => 'Home folder',\n        'success'   => '[0] Updated 0 elements|[1] Updated one element|{2,*} Updated :count elements',\n    ],\n];\n"
  },
  {
    "path": "lang/en/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Deselect All',\n    'documentation' => 'Learn more about this feature in our documentation',\n    'done'          => 'Done',\n    'learn-more'    => 'Learn more',\n    'no'            => 'No',\n    'required'      => 'Required',\n    'select_all'    => 'Select All',\n    'success'       => [\n        'created'           => ':name created.',\n        'deleted'           => ':name removed.',\n        'deleted-cancel'    => ':name removed. :cancel.',\n        'updated'           => ':name updated.',\n    ],\n    'tutorial'      => 'Watch tutorial',\n    'yes'           => 'Yes',\n];\n"
  },
  {
    "path": "lang/en/genres.php",
    "content": "<?php\n\nreturn [\n    'alternate_history' => 'Alternate history',\n    'cyberpunk'         => 'Cyberpunk',\n    'fantasy'           => 'Fantasy',\n    'historical'        => 'Historical',\n    'many_worlds'       => 'Many worlds',\n    'modern'            => 'Modern',\n    'occult'            => 'Occult',\n    'post_apocalyptic'  => 'Post-apocalyptic',\n    'pulp'              => 'Pulp',\n    'science_fantasy'   => 'Science fantasy',\n    'science_fiction'   => 'Science fiction',\n    'space_opera'       => 'Space opera',\n    'steampunk'         => 'Steampunk',\n    'superhero'         => 'Superhero',\n    'urban_fantasy'     => 'Urban fantasy',\n    'western'           => 'Western',\n];\n"
  },
  {
    "path": "lang/en/header.php",
    "content": "<?php\n\nreturn [\n    'news'              => [\n        'title' => 'Kanka news',\n    ],\n    'notifications'     => [\n        'dismiss'   => 'Dismiss',\n        'no-unread' => 'No unread notifications',\n        'read_all'  => 'View all',\n    ],\n    'qq'                => [\n        'tooltip'   => 'Create an entry or post',\n    ],\n    'toggle_navigation' => 'Toggle navigation',\n    'user'              => [\n        'settings'      => 'Account settings',\n        'sign-out'      => 'Sign out',\n        'upgrade'       => 'Upgrade',\n        'your-profile'  => 'Your profile',\n    ],\n];\n"
  },
  {
    "path": "lang/en/helpers.php",
    "content": "<?php\n\nreturn [\n    'api-filters'       => [\n        'description'   => 'The following filters are available for the :name API endpoint.',\n        'title'         => 'API Filters',\n    ],\n    'attributes'        => [\n        'link'  => 'Property options',\n    ],\n    'calendar-widget'   => [\n        'info'  => 'Why are these reminders being shown?',\n        'title' => 'Calendar Widget',\n    ],\n    'filters'           => [\n        'title' => 'How to use filters',\n    ],\n    'link'              => [\n        'description'   => 'You can easily link to other entries in the campaign using the following shorthands.',\n    ],\n    'public'            => 'Watch a tutorial video on Youtube explaining public campaigns.',\n    'troubleshooting'   => [\n        'description'       => 'A member of Kanka\\'s team has sent you to this page. Select a campaign from the dropdown to generate a token so we can temporarily join your campaign as an admin.',\n        'errors'            => [\n            'token_exists'  => 'A token already exists for :campaign.',\n        ],\n        'save_btn'          => 'Generate token',\n        'select_campaign'   => 'Select a campaign',\n        'subtitle'          => 'Please send help!',\n        'success'           => 'Please copy the following token and send it to someone on Kanka\\'s team.',\n        'title'             => 'Assistance',\n    ],\n    'widget-filters'    => [\n        'description'   => 'You can filter entries displayed on the recently modified widget by providing a list of fields of the entry and values. For example, you can use :example to filter on dead characters of the NPC type.',\n        'link'          => 'widget filters',\n        'title'         => 'Dashboard Widget Filters',\n    ],\n];\n"
  },
  {
    "path": "lang/en/history.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'show-old'  => 'Changes',\n    ],\n    'cta'       => 'Keep track of everything that\\'s changed in the campaign with a detailed activity log of recent edits, additions, and updates.',\n    'empty'     => 'No value',\n    'fields'    => [\n        'action'    => 'Action',\n        'category'  => 'Category',\n        'details'   => 'Details',\n        'when'      => 'When',\n        'who'       => 'Who',\n    ],\n    'filters'   => [\n        'all-actions'   => 'All actions',\n        'all-users'     => 'All members',\n        'no-results'    => 'No results to display. Try with other filters, or come back after making changes to your entries.',\n    ],\n    'helpers'   => [\n        'base'      => 'This interface contains recent changes to entries of the campaign for up to :amount days, showing the most recent changes first.',\n        'changes'   => 'The following fields previously had these values.',\n    ],\n    'log'       => [\n        'create'        => ':user created :entity',\n        'create_post'   => ':user created a article on :entity',\n        'delete'        => ':user deleted :entity',\n        'delete_post'   => ':user deleted a article on :entity',\n        'reorder_post'  => ':user reordered the articles of :entity',\n        'restore'       => ':user restored :entity',\n        'update'        => ':user updated :entity',\n        'update_post'   => ':user updated a post on :entity',\n        'update_tree'   => ':user updated the family tree of :entity',\n    ],\n    'title'     => 'History',\n    'unknown'   => [\n        'entity'    => 'an unknown entry',\n    ],\n];\n"
  },
  {
    "path": "lang/en/items.php",
    "content": "<?php\n\nreturn [\n    'bulk'          => [\n        'creators'  => [\n            'action'    => 'Action for creators',\n            'remove'    => 'Remove all creators',\n        ],\n    ],\n    'create'        => [\n        'title' => 'New Object',\n    ],\n    'fields'        => [\n        'creators'      => 'Creators',\n        'is_equipped'   => 'Equipped',\n        'price'         => 'Price',\n        'size'          => 'Size',\n        'weight'        => 'Weight',\n    ],\n    'lists'         => [\n        'empty' => 'Add weapons, artifacts, or items of importance to your world.',\n    ],\n    'placeholders'  => [\n        'price' => 'Price of the object',\n        'size'  => 'Size, Dimensions, Capacity',\n        'type'  => 'Weapon, Potion, Artefact',\n        'weight'=> 'Weight of the object',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Inventories',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Journal',\n    ],\n    'fields'        => [\n        'author'    => 'Author',\n        'date'      => 'Date',\n    ],\n    'lists'         => [\n        'empty' => 'Create journal entries to track adventures, character thoughts, or session summaries and session prep.',\n    ],\n    'placeholders'  => [\n        'author'    => 'Who wrote the journal',\n        'date'      => 'Real world date of the journal',\n        'type'      => 'Session, One Shot, Draft',\n    ],\n];\n"
  },
  {
    "path": "lang/en/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Catalan',\n        'cs'    => 'Czech',\n        'de'    => 'German',\n        'el'    => 'Greek',\n        'en'    => 'English',\n        'en-US' => 'American English',\n        'es'    => 'Spanish',\n        'fr'    => 'French',\n        'gl'    => 'Galician',\n        'he'    => 'Hebrew',\n        'hr'    => 'Croatian',\n        'hu'    => 'Hungarian',\n        'it'    => 'Italian',\n        'nb'    => 'Norwegian (Bokmal)',\n        'nl'    => 'Dutch',\n        'pl'    => 'Polish',\n        'pt-BR' => 'Brazilian Portuguese',\n        'ru'    => 'Russian',\n        'sk'    => 'Slovak',\n        'tr'    => 'Turkish',\n    ],\n    'header'=> 'Languages',\n];\n"
  },
  {
    "path": "lang/en/lists.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn' => 'Learn about this category',\n        'public'=> 'See how others do it',\n    ],\n    'empty'     => [\n        'title' => 'No :plural yet.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/locations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Location',\n    ],\n    'fields'        => [\n        'is_destroyed'  => 'Destroyed',\n        'title'         => 'Title',\n    ],\n    'helpers'       => [\n        'characters'    => 'View all characters in this location and its children locations, or just those directly located here.',\n    ],\n    'hints'         => [\n        'is_destroyed'  => 'This location is destroyed.',\n    ],\n    'lists'         => [\n        'empty' => 'Add your first city, tavern, or hidden ruin to anchor your world.',\n    ],\n    'placeholders'  => [\n        'title' => 'Title',\n        'type'  => 'City, Kingdom, Ruin',\n    ],\n];\n"
  },
  {
    "path": "lang/en/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Enter edit mode',\n        'exit-edit-mode'    => 'Exit edit mode',\n        'finish-drawing'    => 'Finish drawing polygon',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Click on the map to start drawing a polygon',\n    ],\n    'toggle'        => 'Open/close all groups',\n];\n"
  },
  {
    "path": "lang/en/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Add a new group',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Removed :count group.|[2,*] Removed :count groups.',\n        'patch'     => '{1} Updated :count group.|[2,*] Updated :count groups.',\n    ],\n    'create'        => [\n        'helper'    => 'Add a new group to :name. Markers can then be assigned to this group.',\n        'success'   => 'Group :name created.',\n        'title'     => 'New Group',\n    ],\n    'delete'        => [\n        'success'   => 'Group :name deleted.',\n    ],\n    'edit'          => [\n        'success'   => 'Group :name updated.',\n        'title'     => 'Edit Group',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Show group markers',\n        'parent'    => 'Parent Group',\n        'position'  => 'Position',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Markers can be grouped together using map groups. Each group can then be clicked when exploring a map to quickly show or hide all markers in it.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Show markers in this group by default on the map.',\n    ],\n    'index'         => [\n        'title' => 'Groups of :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'You can\\'t add any more groups unless you remove an existing one.',\n            'limit'     => 'This map has reached its group limit',\n        ],\n        'upgrade'   => [\n            'limit'     => 'You\\'ve reached the limit of :limit groups for this map',\n            'upgrade'   => 'Upgrade to a premium campaign to add up to :limit groups and unlock even more creative flexibility.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Shops, Treasure, NPCs',\n        'position'      => 'First',\n        'position_list' => 'After :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Save new order',\n        'success'   => '{1} Reordered :count group.|[2,*] Reordered :count groups.',\n        'title'     => 'Reorder groups',\n    ],\n];\n"
  },
  {
    "path": "lang/en/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Add a new layer',\n    ],\n    'base'          => 'Base Layer',\n    'bulks'         => [\n        'delete'    => '{1} Removed :count layer.|[2,*] Removed :count layers.',\n        'patch'     => '{1} Updated :count layer.|[2,*] Updated :count layers.',\n    ],\n    'create'        => [\n        'success'   => 'Layer :name created.',\n        'title'     => 'New Layer',\n    ],\n    'delete'        => [\n        'success'   => 'Layer :name deleted.',\n    ],\n    'edit'          => [\n        'success'   => 'Layer :name updated.',\n        'title'     => 'Edit Layer :name',\n    ],\n    'fields'        => [\n        'position'  => 'Position',\n        'type'      => 'Layer type',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Upload layers to a map to switch the background image displayed below the markers, or as overlays above the map but beneath the markers.',\n        'is_real'   => 'Layers aren\\'t available when using OpenStreetMaps.',\n    ],\n    'index'         => [\n        'title' => 'Layers of :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'You can\\'t add any more layers unless you remove an existing one.',\n            'limit'     => 'This map has reached its layer limit',\n        ],\n        'upgrade'   => [\n            'limit'     => 'You\\'ve reached the limit of :limit layers for this map',\n            'upgrade'   => 'Upgrade to a premium campaign to add up to :limit layers and unlock even more creative flexibility.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Underground, Level 2, Shipwreck',\n        'position'      => 'First',\n        'position_list' => 'After :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Save new order',\n        'success'   => '{1} Reordered :count layer.|[2,*] Reordered :count layers.',\n        'title'     => 'Reorder layers',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Overlay',\n        'overlay_shown' => 'Overlay (auto show)',\n        'standard'      => 'Standard',\n    ],\n    'types'         => [\n        'overlay'       => 'Overlay (displayed above the active layer)',\n        'overlay_shown' => 'Overlay shown by default',\n        'standard'      => 'Standard layer (toggle between layers)',\n    ],\n];\n"
  },
  {
    "path": "lang/en/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Write a custom description for this marker.',\n        'remove'            => 'Remove marker',\n        'reset-polygon'     => 'Reset positions',\n        'save_and_explore'  => 'Save and Explore',\n        'start-drawing'     => 'Start drawing',\n        'update'            => 'Edit marker',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Removed :count marker.|[2,*] Removed :count markers.',\n        'patch'     => '{1} Updated :count marker.|[2,*] Updated :count markers.',\n    ],\n    'circle_sizes'  => [\n        'custom'    => 'Custom',\n        'huge'      => 'Huge',\n        'large'     => 'Large',\n        'small'     => 'Small',\n        'standard'  => 'Standard',\n        'tiny'      => 'Tiny',\n    ],\n    'create'        => [\n        'success'   => 'Marker :name created.',\n        'title'     => 'New Marker',\n    ],\n    'delete'        => [\n        'success'   => 'Marker :name deleted.',\n    ],\n    'details'       => [\n        'from-entity'   => 'From entry',\n    ],\n    'edit'          => [\n        'success'   => 'Marker :name updated.',\n        'title'     => 'Edit Marker :name',\n    ],\n    'fields'        => [\n        'bg_colour'     => 'Background colour',\n        'circle_radius' => 'Circle radius',\n        'copy_elements' => 'Copy elements',\n        'custom_icon'   => 'Custom icon',\n        'custom_shape'  => 'Polygon shape',\n        'font_colour'   => 'Icon colour',\n        'group'         => 'Marker group',\n        'has_tooltip'   => 'Has tooltip popup',\n        'icon'          => 'Icon',\n        'is_draggable'  => 'Draggable',\n        'latitude'      => 'Latitude',\n        'longitude'     => 'Longitude',\n        'opacity'       => 'Opacity',\n        'pin_size'      => 'Pin Size',\n        'polygon_style' => [\n            'stroke'            => 'Stroke colour',\n            'stroke-opacity'    => 'Stroke opacity',\n            'stroke-width'      => 'Stroke width',\n        ],\n        'popupless'     => 'Tooltip popup',\n        'size'          => 'Size',\n    ],\n    'helpers'       => [\n        'base'                      => 'Add markers to the map by clicking on any spot.',\n        'copy_elements'             => 'Copy groups, layers, and markers.',\n        'copy_elements_to_campaign' => 'Copy groups, layers, and markers of the maps. Markers linked to an entry will be converted to a standard marker.',\n        'css'                       => 'Define a custom CSS class added to the marker.',\n        'custom_icon_v2'            => 'Use icons from :fontawesome, :rpgawesome, or a custom SVG icon. Find out how in the :docs.',\n        'custom_radius'             => 'Select the custom size option from the dropdown to define a size.',\n        'draggable'                 => 'This marker can be moved on the map\\'s exploration page.',\n        'is_popupless'              => 'Disable the marker\\'s tooltip showing up on mouse hover.',\n        'label'                     => 'A label is displayed as a block of text on the map. The content will be the marker\\'s name or the entry\\'s name.',\n        'polygon'                   => [\n            'edit'  => 'Edit the polygon by dragging its edges and nodes.',\n        ],\n    ],\n    'hints'         => [\n        'entry' => 'Edit the marker to write a custom description for it.',\n    ],\n    'icons'         => [\n        'custom'        => 'Custom icon',\n        'entity'        => 'Entry\\'s picture',\n        'exclamation'   => 'Exclamation icon',\n        'marker'        => 'Marker icon',\n        'question'      => 'Question icon',\n    ],\n    'index'         => [\n        'title' => 'Markers of :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Use polygons to outline borders, territories, or uneven regions on the map. Available as part of premium campaign features.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'Try :example1 or :example2',\n        'custom_shape'  => '100,100 200,240 340,110',\n        'name'          => 'Required if no entry selected',\n    ],\n    'presets'       => [\n        'helper'    => 'Click on a preset to load it, or create a new one.',\n    ],\n    'shapes'        => [\n        '0' => 'Circle',\n        '1' => 'Square',\n        '2' => 'Triangle',\n        '3' => 'Custom',\n    ],\n    'sizes'         => [\n        '0' => 'Tiny',\n        '1' => 'Standard',\n        '2' => 'Small',\n        '3' => 'Large',\n        '4' => 'Huge',\n    ],\n    'tabs'          => [\n        'circle'    => 'Circle',\n        'label'     => 'Label',\n        'marker'    => 'Marker',\n        'polygon'   => 'Polygon',\n        'preset'    => 'Preset',\n    ],\n];\n"
  },
  {
    "path": "lang/en/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Back to :name',\n        'edit'      => 'Edit map',\n        'explore'   => 'Explore',\n    ],\n    'create'        => [\n        'title' => 'New Map',\n    ],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'There was an error while chunking the map. Please contact the team on :discord for support.',\n            'running'   => [\n                'edit'      => 'The map cannot be edited while it\\'s been chunked.',\n                'explore'   => 'The map cannot be displayed while it\\'s been chunked.',\n                'time'      => 'This can take several minutes to several hours, depending on the size of the map.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'This map needs an image to be able to render on the dashboard.',\n        ],\n        'explore'   => [\n            'missing'   => 'Please add an image to the map before being able to explore it.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Marker',\n        'center_x'          => 'Default Longitude Position',\n        'center_y'          => 'Default Latitude Position',\n        'centering'         => 'Centering',\n        'distance_measure'  => 'Distance measurement',\n        'distance_name'     => 'Distance unit label',\n        'grid'              => 'Grid',\n        'has_clustering'    => 'Cluster markers',\n        'initial_zoom'      => 'Initial zoom',\n        'is_real'           => 'Use OpenStreetMaps',\n        'max_zoom'          => 'Maximal zoom',\n        'min_zoom'          => 'Minimal zoom',\n        'tabs'              => [\n            'coordinates'   => 'Coordinates',\n            'marker'        => 'Marker',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'Changing the following values will control which area of the map is focused on. Leaving these values empty will result in the center of the map being focued on.',\n        'centering'             => 'Centering on a marker will take priority on default coordinates.',\n        'chunked_zoom'          => 'Automatically cluster markers together when they are close to each other.',\n        'distance_measure'      => 'Giving the map a distance measurement will enable the measurement tool in the exploration mode.',\n        'distance_measure_2'    => 'For 100 pixels to measure 1 kilometer, input a value of 0.0041.',\n        'grid'                  => 'Define a grid size that will be displayed in the exploration mode. A value below 10 will result in a greyed out map.',\n        'has_clustering'        => 'Automatically cluster markers together when they are close to each other.',\n        'initial_zoom'          => 'The initial zoom level a map is loaded with. The default value is :default, while the highest allowed value is :max and the lowest allowed value is :min.',\n        'is_real'               => 'Select this option if you want to use a real world map instead of the uploaded image. This option disable layers.',\n        'max_zoom'              => 'The most a map can be zoomed in on. The default value is :default, while the highest allowed value is :max.',\n        'min_zoom'              => 'The most a map can be zoomed out of. The default value is :default, while the lowest allowed value is :min.',\n        'missing_image'         => 'Save the map with an image before being able to add layers and markers.',\n    ],\n    'lists'         => [\n        'empty' => 'Upload a map to visualize locations and reveal the geography of your world.',\n    ],\n    'panels'        => [\n        'groups'    => 'Groups',\n        'layers'    => 'Layers',\n        'legend'    => 'Legend',\n        'markers'   => 'Markers',\n        'settings'  => 'Settings',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Leave empty to load the map in the middle',\n        'center_x'      => 'Leave empty to load the map in the middle',\n        'center_y'      => 'Leave empty to load the map in the middle',\n        'distance_name' => 'Km, miles, feet, hamburgers',\n        'grid'          => 'Distance in pixel between grid elements. Leave empty to hide the grid.',\n        'name'          => 'Name of the map',\n        'type'          => 'Dungeon, City, Galaxy',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Maps',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'Map is being chunked. This process can take several minutes to hours.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'member'    => 'Become a member.',\n        'remove_v5' => 'Kanka is built by just the two of us. Support our quest and enjoy an ad-free experience for less than the cost of a fancy coffee.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Note',\n    ],\n    'fields'        => [\n        'notes' => 'Sub Notes',\n    ],\n    'lists'         => [\n        'empty' => 'Store ideas, references, rules, or information that doesn\\'t fit anywhere else.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Choose a parent note',\n        'type'  => 'Religion, Race, Political system',\n    ],\n];\n"
  },
  {
    "path": "lang/en/notifications.php",
    "content": "<?php\n\nreturn [\n    'apps'              => [\n        'discord'   => [\n            'invalid'   => 'Your Discord token has expired. Please re-sync your Discord and Kanka account.',\n        ],\n    ],\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'Your application to the :campaign has been approved.',\n            'approved_message'      => 'Your application to the :campaign has been approved. Message provided: :reason',\n            'new'                   => 'New application for :campaign.',\n            'rejected'              => 'Your application to the :campaign has been rejected. Reason provided: :reason',\n            'rejected_no_message'   => 'Your application to the :campaign has been rejected.',\n        ],\n        'asset_export'      => 'An export for :campaign\\'s assets is available. The link is available for :time minutes.',\n        'boost'             => [\n            'add'           => ':user is now boosting :campaign.',\n            'remove'        => ':user is no longer boosting :campaign.',\n            'superboost'    => ':user is now superboosting :campaign.',\n        ],\n        'created'           => 'You have created :campaign.',\n        'deleted'           => ':campaign was deleted.',\n        'export'            => 'An export for :campaign is available. The link is available for :time minutes.',\n        'export_error'      => 'An error occurred while exporting :campaign. Please contact us if this problem persists.',\n        'hidden'            => ':campaign is now hidden from the public campaigns page.',\n        'import'            => [\n            'csv_ready'     => 'The CSV import for :campaign is ready.',\n            'csv_success'   => 'Successfully imported :count entities via CSV import to :campaign.',\n            'failed'        => 'The import for :campaign failed.',\n            'success'       => 'The import finished for :campaign.',\n        ],\n        'join'              => ':user joined :campaign.',\n        'leave'             => ':user left :campaign.',\n        'new_owner'         => 'You have been made an admin of :campaign.',\n        'plugin'            => [\n            'deleted'   => 'The plugin :plugin was deleted from the marketplace and removed from :campaign.',\n        ],\n        'premium'           => [\n            'add'       => ':user has unlocked premium features for :campaign.',\n            'remove'    => ':user has stopped unlocking premium features for :campaign.',\n        ],\n        'removed-image'     => 'The image or header of :entity was removed due to a copyright claim.',\n        'role'              => [\n            'add'       => 'You have been added to the :role role of :campaign.',\n            'remove'    => 'You have been removed from the :role role of :campaign.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => 'The Kanka team-member :user joined :campaign.',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Clear all',\n        'success'   => 'Notifications removed.',\n        'title'     => 'Clear notifications',\n    ],\n    'features'          => [\n        'approved'  => 'Your idea :feature has been approved.',\n        'finished'  => 'Your idea :feature is now available in Kanka!',\n        'rejected'  => 'Your idea :feature has been rejected, reason: :reason.',\n    ],\n    'header'            => 'You have :count notifications',\n    'index'             => [\n        'title' => 'Notifications',\n    ],\n    'map'               => [\n        'chunked'   => 'Map :name has finished chunking and is now usable.',\n    ],\n    'no_notifications'  => 'Notifications will appear here once you have some.',\n    'plugins'           => [\n        'comments'  => [\n            'new_comment'   => ':user has left a new comment on the plugin :plugin.',\n            'new_reply'     => ':user has replied to your comment in :plugin.',\n        ],\n    ],\n    'subscriptions'     => [\n        'charge_fail'   => 'An error occurred while processing your payment. Please wait a moment while we try again. If nothing changes, please contact us.',\n        'deleted'       => 'Your subscription to Kanka was automatically cancelled after too many failed attempts to charge your card. Please go to your Subscription settings and try updating your payment details.',\n        'ended'         => 'Your subscription to Kanka has ended. Your premium campaigns and Discord roles have been disabled. We hope to see you back soon!',\n        'failed'        => 'We couldn\\'t charge your payment details. Please update them in your Payment Method settings.',\n        'started'       => 'Your subscription to Kanka has started.',\n        'trial'         => 'Your free trial to Kanka has ended. We hope you loved it and hope to see you back soon!',\n    ],\n    'unread'            => 'New notification',\n];\n"
  },
  {
    "path": "lang/en/onboarding/attributes.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Properties let you add small, reusable pieces of information to :name such as age, hit points, faction rank, or any custom stats you track. They\\'re ideal for data you want to reference, sort, or template across multiple entries.',\n    'title' => 'Store structured data for this entry',\n];\n"
  },
  {
    "path": "lang/en/onboarding/characters.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'That\\'s enough to get started.',\n    'text'      => 'Focus on the basics: name, a short description, and one or two defining traits. You can add details like relations, properties, and portraits later.',\n    'title'     => 'Create your first character',\n];\n"
  },
  {
    "path": "lang/en/onboarding/locations.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'Keep it simple for now.',\n    'text'      => 'Start small. Name the place and add one sentence about what makes it important. You can expand with maps, residents, and nested locations once the world takes shape.',\n    'title'     => 'Create your first location',\n];\n"
  },
  {
    "path": "lang/en/onboarding/posts.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Articles let you separate public text from private notes, GM-only secrets, and supporting information. Create as many articles as you need and control who can see each one.',\n    'title' => 'Use articles for secrets and extra details',\n];\n"
  },
  {
    "path": "lang/en/onboarding/reminders.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Create reminders for deadlines, in-story dates, anniversaries, or anything tied to :name that you don\\'t want to forget. Reminders you add here will show on this page and on any calendar date you link them to.',\n    'title' => 'Track time-sensitive details here',\n];\n"
  },
  {
    "path": "lang/en/onboarding/tags.php",
    "content": "<?php\n\nreturn [\n    'npcs'  => 'NPCs',\n];\n"
  },
  {
    "path": "lang/en/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Organisation',\n    ],\n    'fields'        => [\n        'is_defunct'    => 'Defunct',\n        'members'       => 'Members',\n    ],\n    'hints'         => [\n        'is_defunct'    => 'This organisation is defunct.',\n    ],\n    'lists'         => [\n        'empty' => 'Create guilds, factions, or secret societies to shape your world\\'s power structure.',\n    ],\n    'members'       => [\n        'actions'       => [\n            'add_multiple'  => 'Add members',\n        ],\n        'create'        => [\n            'helper'            => 'Add one or several members to :name.',\n            'success_multiple'  => '{1} Added :count member to :name.|[2,*] Added :count members to :name.',\n        ],\n        'destroy'       => [\n            'success'   => 'Member removed from :name.',\n        ],\n        'edit'          => [\n            'helper'    => 'Change the membership status for :name.',\n            'title'     => 'Update Member for :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Superior',\n            'pinned'    => 'Pinned',\n            'role'      => 'Role',\n            'status'    => 'Membership status',\n        ],\n        'helpers'       => [\n            'all_members'   => 'All characters that are members of this organisations and it\\'s sub-organisations.',\n            'members'       => 'All characters that are members of this organisation.',\n            'pinned'        => 'This member can be shown in the profile pins of its associated entries.',\n        ],\n        'pinned'        => [\n            'both'  => 'Pinned on both',\n            'none'  => 'Pinned nowhere',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Who is this member\\'s superior',\n            'role'      => 'Leader, Member, High Septon, Spymaster',\n        ],\n        'status'        => [\n            'active'    => 'Active member',\n            'inactive'  => 'Inactive member',\n            'unknown'   => 'Unknown status',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Cult, Gang, Rebellion, Fandom',\n    ],\n];\n"
  },
  {
    "path": "lang/en/pagination.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'next'      => 'Next &raquo;',\n    'previous'  => '&laquo; Previous',\n    'showing' => 'Showing',\n    'to'        => 'to',\n    'of'        => 'of',\n    'results' => 'results',\n];\n"
  },
  {
    "path": "lang/en/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'There were some problems with your input.',\n        'title'         => 'Whoops!',\n    ],\n];\n"
  },
  {
    "path": "lang/en/passwords.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'password'  => 'Passwords must be at least six characters and match the confirmation.',\n    'reset'     => 'Your password has been reset!',\n    'sent'      => 'We have e-mailed your password reset link!',\n    'token'     => 'This password reset token is invalid.',\n    'user'      => 'We can\\'t find a user with that e-mail address.',\n];\n"
  },
  {
    "path": "lang/en/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/en/permissions.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'delete'    => 'Permission to delete this element',\n        'edit'      => 'Permission to edit this element',\n        'view'      => 'Permission to view this element',\n    ],\n    'members'   => [\n        'inherited' => ':member can already do this by being part of the :role role.',\n    ],\n    'roles'     => [\n        'inherited' => 'The :role role can already do this on the whole :module category.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/pins.php",
    "content": "<?php\n\nreturn [\n    'learn-more'    => 'Learn more about pins in our documentation.',\n    'options'       => [\n        'no'    => 'Unpinned',\n        'yes'   => 'Pinned to the entry\\'s overview page',\n    ],\n];\n"
  },
  {
    "path": "lang/en/playstyles.php",
    "content": "<?php\n\nreturn [\n    'casual-drop-in-friendly'       => 'Casual / Drop-In Friendly',\n    'character-focused'             => 'Character-Focused',\n    'combat-focused'                => 'Combat-Focused',\n    'episodic-one-shot-friendly'    => 'Episodic / One-Shot Friendly',\n    'exploration-focused'           => 'Exploration-Focused',\n    'linear-gm-led'                 => 'Linear / GM-Led',\n    'long-term-campaign'            => 'Long-Term Campaign',\n    'narrative-first'               => 'Narrative-First',\n    'roleplay-heavy'                => 'Roleplay-Heavy',\n    'roleplay-light'                => 'Roleplay-Light',\n    'rules-light'                   => 'Rules-Light',\n    'sandbox-player-driven'         => 'Sandbox / Player-Driven',\n    'serious-immersive'             => 'Serious / Immersive',\n    'story-driven'                  => 'Story-Driven',\n    'tactical-crunchy'              => 'Tactical / Crunchy',\n];\n"
  },
  {
    "path": "lang/en/post_layouts.php",
    "content": "<?php\n\nreturn [\n    'character_orgs'        => 'Character organisations',\n    'connection_map'        => 'Relation map',\n    'helper'                => 'This article is set up to display the :subpage subpage of :name.',\n    'location_characters'   => 'Location characters',\n    'location_events'       => 'Location events',\n    'location_quests'       => 'Location quests',\n    'pitch'                 => [\n        'custom'    => 'Show content from this entry\\'s subpages directly on the overview with article layouts. For example, show :entry\\'s inventory.',\n        'title'     => 'Advanced article layouts',\n    ],\n    'premium'               => 'Some layout options are disabled because they required a premium campaign.',\n    'quest_elements'        => 'Quest Elements',\n];\n"
  },
  {
    "path": "lang/en/posts/templates.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'set'   => 'Set as a reusable template',\n        'unset' => 'Remove as a reusable template',\n    ],\n    'helper'    => 'The following articles have been defined as templates that can be re-used.',\n    'tab'       => 'Load from templates',\n    'tooltips'  => [\n        'click-to-edit' => 'Edit this template article',\n    ],\n];\n"
  },
  {
    "path": "lang/en/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Article',\n    ],\n    'fields'        => [\n        'description'   => 'Description',\n        'layout'        => 'Article layout',\n        'name'          => 'Article name',\n    ],\n    'helpers'       => [\n        'new'           => 'Add a new article to this entry.',\n        'visibility'    => 'Change the visibility of the :name article.',\n    ],\n    'move'          => [\n        'copy'      => [\n            'helper'    => 'Keep a copy of the article on :name.',\n        ],\n        'helper'    => 'Move or copy the article :name to a different entry.',\n        'title'     => 'Move article',\n    ],\n    'permissions'   => [\n        'actions'   => [\n            'members'   => 'Add members',\n            'roles'     => 'Add roles',\n        ],\n        'helpers'   => [\n            'members'   => 'Add one or multiple members to have special permissions on this article.',\n            'roles'     => 'Add one or multiple roles to have special permissions on this article.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Name of the article',\n    ],\n    'position'      => [\n        'dont_change'   => 'Don\\'t change',\n        'first'         => 'First',\n        'last'          => 'Last',\n    ],\n    'remove'        => [\n        'title' => 'Remove article',\n    ],\n    'visibility'    => [\n        'helper'    => 'Change the visibility for the :name article.',\n        'title'     => 'Article visibility',\n    ],\n];\n"
  },
  {
    "path": "lang/en/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Create a new preset',\n    ],\n    'create'        => [\n        'success'   => 'Preset :name created.',\n        'title'     => 'New preset',\n    ],\n    'destroy'       => [\n        'success'   => 'Preset :name destroyed.',\n    ],\n    'edit'          => [\n        'success'   => 'Preset :name modified.',\n        'title'     => 'Edit :name preset',\n    ],\n    'fields'        => [\n        'name'  => 'Preset name',\n    ],\n    'lists'         => [\n        'empty' => 'There are currently no available presets in the campaign.',\n    ],\n    'placeholders'  => [\n        'name'  => 'The preset\\'s name',\n    ],\n];\n"
  },
  {
    "path": "lang/en/profiles.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => [\n        'success'   => 'Avatar updated.',\n    ],\n    'edit'          => [\n        'success'   => 'Profile updated',\n    ],\n    'fields'        => [\n        'avatar'                    => 'Avatar',\n        'bio'                       => 'Bio',\n        'email'                     => 'Email',\n        'hide_subscription'         => 'Hide my name from the :hall_of_fame.',\n        'last_login_share'          => 'Share with other members when I last logged in.',\n        'link'                      => 'Social link',\n        'login_sharing'             => 'Last login sharing',\n        'name'                      => 'Name',\n        'new_password'              => 'New Password',\n        'new_password_confirmation' => 'New Password Confirmation',\n        'newsletter'                => 'I wish to sometimes be contacted by email.',\n        'password'                  => 'Current password',\n        'profile-name'              => 'Profile name',\n        'pronouns'                  => 'Pronouns',\n        'settings'                  => 'Settings',\n        'subscription_hiding'       => 'Subscription hiding',\n        'theme'                     => 'Theme',\n    ],\n    'helpers'       => [\n        'link'          => 'Change the way a link to your social profile appears on your :profile and the :marketplace. If left blank, no link will show.',\n        'profile-name'  => 'Change the way your name appears on your :profile and the :marketplace. If left blank, your account name will be used instead.',\n        'pronouns'      => 'Change the way your pronouns appear on your :profile and the :marketplace. If left blank, no pronouns will show.',\n    ],\n    'link'          => [\n        'button'    => ':name\\'s social profile',\n    ],\n    'newsletter'    => [\n        'helpers'   => [\n            'header'    => 'Subscribe to the following email newsletters to be notified of what\\'s going on with Kanka.',\n        ],\n        'options'   => [\n            'monthly'   => 'Kanka newsletter',\n        ],\n        'title'     => 'Newsletters',\n        'updated'   => 'Newsletter preferences updated.',\n    ],\n    'password'      => [\n        'success'   => 'Password updated',\n    ],\n    'placeholders'  => [\n        'bio'                       => 'A short bio of yourself displayed on your public profile.',\n        'email'                     => 'Your email address',\n        'name'                      => 'Your name as displayed',\n        'new_password'              => 'Your new password',\n        'new_password_confirmation' => 'Confirm your new password',\n        'password'                  => 'Provide your current password for any changes',\n    ],\n    'sections'      => [\n        'dangerzone'    => 'Danger Zone',\n        'delete'        => [\n            'confirm'       => 'Delete my account now',\n            'delete'        => 'Delete my account',\n            'goodbye'       => 'If so, please write :code on the box below.',\n            'helper'        => 'Deleting your account will also delete any campaign you are the only member of. This action is permanent and can\\'t be undone.',\n            'subscribed'    => 'Please cancel your :subscription before being able to delete your account.',\n            'title'         => 'Delete your account',\n            'warning'       => 'By deleting your account, all your data will be lost. Are you sure?',\n        ],\n        'password'      => [\n            'title' => 'Change your password',\n        ],\n    ],\n    'settings'      => [\n        'helpers'   => [\n            'bio'       => 'The biography is visible on your :link.',\n            'profile'   => 'public profile',\n        ],\n        'success'   => 'Settings changed.',\n    ],\n    'theme'         => [\n        'success'   => 'Theme changed.',\n        'themes'    => [\n            'dark'      => 'Dark',\n            'default'   => 'Light',\n            'future'    => 'Future',\n            'midnight'  => 'Midnight Blue',\n        ],\n    ],\n    'title'         => 'Update your profile',\n    'workflows'     => [\n        'created'   => 'View the newly created entry',\n        'default'   => 'View the list of entries',\n    ],\n];\n"
  },
  {
    "path": "lang/en/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Quest',\n    ],\n    'elements'      => [\n        'create'        => [\n            'success'   => 'Element :entity added to the quest.',\n            'title'     => 'New element for :name',\n        ],\n        'destroy'       => [\n            'success'   => 'Element :entity removed.',\n        ],\n        'edit'          => [\n            'success'   => 'Element :entity updated.',\n            'title'     => 'Update element for :name',\n        ],\n        'fields'        => [\n            'copy_entity_entry' => 'Use entry description',\n            'entity_or_name'    => 'Either select either an entry of the campaign, or give a name for this element.',\n        ],\n        'helpers'       => [\n            'copy_entity_entry' => 'Display the linked entry\\'s description instead of the custom description.',\n        ],\n        'placeholders'  => [\n            'name'  => 'Element name',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Copy elements attached to the quest',\n        'date'          => 'Date',\n        'element_role'  => 'Role',\n        'instigator'    => 'Instigator',\n        'is_completed'  => 'Completed',\n        'location'      => 'Starting location',\n        'role'          => 'Role',\n        'status'        => 'Status',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'The quest is considered as completed.',\n        'status'        => 'The quest\\'s current status.',\n    ],\n    'hints'         => [\n        'is_abandoned'  => 'This quest has been abandoned.',\n        'is_completed'  => 'This quest is completed.',\n        'is_ongoing'    => 'This quest is ongoing.',\n    ],\n    'lists'         => [\n        'empty' => 'Create quests to record objectives, storylines, or character motivations.',\n    ],\n    'placeholders'  => [\n        'date'      => 'Real world date for the quest',\n        'entity'    => 'Name of an element from the quest',\n        'location'  => 'The quest\\'s starting location',\n        'role'      => 'This entry\\'s role in the quest',\n        'type'      => 'Character Arc, Sidequest, Main',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Add an element',\n        ],\n        'tabs'      => [\n            'elements'  => 'Elements',\n        ],\n    ],\n    'status'        => [\n        'abandoned'     => 'Abandoned',\n        'completed'     => 'Completed',\n        'not_started'   => 'Not Started',\n        'ongoing'       => 'Ongoing',\n    ],\n];\n"
  },
  {
    "path": "lang/en/races.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Race',\n    ],\n    'fields'        => [\n        'is_extinct'    => 'Extinct',\n        'members'       => 'Members',\n    ],\n    'hints'         => [\n        'is_extinct'    => 'This race is extinct.',\n    ],\n    'lists'         => [\n        'empty' => 'Define the species, cultures, or peoples that inhabit your world.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Add one or several characters to :name.',\n            'submit'    => 'Add members',\n            'success'   => '{0} No member was added.|{1} 1 member was added.|[2,*] :count members were added.',\n            'title'     => 'New Members',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Human, Fey, Borg',\n    ],\n];\n"
  },
  {
    "path": "lang/en/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Your session timed out. Please try again.',\n    'unknown_entity'    => 'Sorry, we don\\'t know what a \\':entry\\' is.',\n];\n"
  },
  {
    "path": "lang/en/referrals.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'copy'  => 'Copy',\n    ],\n    'benefits'  => 'Build worlds together.',\n    'fields'    => [\n        'link'  => 'Your referral link:',\n    ],\n    'stats'     => [\n        'badge'         => 'Badge: Worldbuilder :level',\n        'empty'         => 'No one yet. Share your link to get started.',\n        'invited'       => 'You\\'ve invited:',\n        'subscribers'   => 'Subscribers referred: :amount',\n        'users'         => '[1] one user|{2,*} :amount users',\n    ],\n    'title'     => 'Invite friends to Kanka',\n    'toasts'    => [\n        'copied'    => 'Link copied to clipboard',\n    ],\n];\n"
  },
  {
    "path": "lang/en/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Event',\n        'livestream'    => 'Livestream',\n        'other'         => 'Other',\n        'release'       => 'Release',\n        'vote'          => 'Community vote',\n    ],\n    'index'         => [\n        'description'   => 'The latest updates to kanka.io',\n        'title'         => 'Releases',\n    ],\n    'post'          => [\n        'footer'    => 'By :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Back to releases',\n        'title'     => 'Release :name',\n    ],\n];\n"
  },
  {
    "path": "lang/en/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chronicles of Darkness',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/en/search/fulltext.php",
    "content": "<?php\n\nreturn [\n    'searching' => 'Searching entries, articles, details and more for the term :term.',\n    'title'     => 'Fulltext search',\n];\n"
  },
  {
    "path": "lang/en/search.php",
    "content": "<?php\n\nreturn [\n    'fulltext'      => 'Search everywhere',\n    'lookup'        => [\n        'empty'     => 'No results',\n        'hint'      => 'Type at least 3 letters to search for entries in the campaign.',\n        'keyboard'  => 'press :k to search, :esc to dismiss',\n        'lists'     => 'Lists',\n        'recents'   => 'Recents',\n        'results'   => 'Results',\n    ],\n    'no_results'    => 'No results.',\n    'placeholder'   => 'SEARCH',\n    'placeholders'  => [\n        'entry' => 'Search for an entry',\n    ],\n    'preview'       => [\n        'links'             => 'Links',\n        'no-connections'    => 'No pinned relations to display',\n    ],\n    'title'         => 'Search',\n];\n"
  },
  {
    "path": "lang/en/seo.php",
    "content": "<?php\n\nreturn [\n    'dashboard'     => 'Dashboard of :campaign',\n    'entity-list'   => 'Explore the :module of :campaign',\n];\n"
  },
  {
    "path": "lang/en/settings/account.php",
    "content": "<?php\n\nreturn [\n    'subtitle'  => 'Control your email, password, security and other account settings.',\n    'title'     => 'Account Info',\n];\n"
  },
  {
    "path": "lang/en/settings/api.php",
    "content": "<?php\n\nreturn [\n    'applications'      => [\n        'title' => 'Authorised Applications',\n    ],\n    'clients'           => [\n        'empty' => 'You have not created any OAuth clients.',\n        'form'  => [\n            'name'                  => 'Client Name',\n            'name_helper'           => 'Something your users will recognise and trust.',\n            'name_placeholder'      => 'Name of the client',\n            'redirect'              => 'Redirect URL',\n            'redirect_helper'       => 'Your application\\'s authorisation callback URL.',\n            'redirect_placeholder'  => 'http://my-super-app.com/callback',\n        ],\n        'new'   => 'Create New Client',\n        'title' => 'OAuth Clients',\n        'update'=> 'Update Client',\n    ],\n    'fields'            => [\n        'client'        => 'Client ID',\n        'client_name'   => 'Client Name',\n        'scopes'        => 'Scopes',\n        'secret'        => 'Secret',\n        'token_name'    => 'Token Name',\n    ],\n    'new'               => [\n        'copy'  => 'Token copied to the clipboard.',\n        'title' => 'Your new personal access token:',\n    ],\n    'revoke'            => 'Revoke',\n    'revoke-confirm'    => 'Confirm revocation',\n    'tokens'            => [\n        'empty' => 'You have not created any personal access tokens.',\n        'form'  => [\n            'name'              => 'Token Name',\n            'name_placeholder'  => 'Name the token',\n        ],\n        'new'   => 'Create New Token',\n        'title' => 'Personal Access Tokens',\n    ],\n];\n"
  },
  {
    "path": "lang/en/settings/appearance.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'learn-more'    => 'Learn more about this setting in our documentation.',\n        'save'          => 'Save settings',\n    ],\n    'campaign-switcher' => [\n        'alphabetical'      => 'Alphabetically (A-Z)',\n        'date_created'      => 'Date created (oldest first)',\n        'date_joined'       => 'Date joined (oldest first)',\n        'r_alphabetical'    => 'Alphabetically (Z-A)',\n        'r_date_created'    => 'Date created (newest first)',\n        'r_date_joined'     => 'Date Joined (newest first)',\n    ],\n    'dismissible'       => [\n        'main'  => 'Control the way Kanka looks and feels. Please note that campaigns can override some of these settings.',\n    ],\n    'editors'           => [\n        'default'   => 'Default (:name)',\n        'helpers'   => [\n            'feedback'  => 'Help us improve it by giving feedback (2min)',\n            'legacy'    => 'The legacy text editor (TinyMCE) doesn\\'t support mentions on mobile devices, campaign galleries or other advanced features.',\n            'tiptap'    => 'This is our new experimental text editor that is actively being worked on and updated regularly. It doesn\\'t yet contain all the features you might be accustomed to.',\n        ],\n        'legacy'    => 'Legacy (:name)',\n        'tiptap'    => 'Experimental 2026',\n    ],\n    'explore'           => [\n        'grid'  => 'Grid (default)',\n        'table' => 'Table',\n    ],\n    'fields'            => [\n        'campaign-order'        => 'Campaign list order',\n        'date-format'           => 'Date formatting',\n        'editor'                => 'Text editor',\n        'entity-explore'        => 'Entry lists',\n        'mentions'              => 'Mentions',\n        'new-entity-workflow'   => 'New entry workflow',\n        'pagination'            => 'Results per page',\n        'theme'                 => 'Theme preference',\n    ],\n    'helpers'           => [\n        'advanced-mentions'     => 'When writing texts, control how @mentions are displayed.',\n        'campaign-order'        => 'Change the order in which campaigns are listed in the campaign switcher.',\n        'date-format'           => 'When available, control the format in which to display real world dates.',\n        'editors'               => 'Switch between text editors for when creating or editing large text fields.',\n        'entity-explore'        => 'Control the way in which entry lists are displayed on campaigns.',\n        'new-entity-workflow'   => 'Control which interface you are taken to after creating a new entry.',\n        'overridable'           => 'Individual campaigns can override this preference.',\n        'pagination'            => 'For lists that span multiple pages, define how many are visible on each page.',\n        'theme'                 => 'Choose how Kanka looks to you.',\n    ],\n    'mentions'          => [\n        'advanced'  => 'Advanced mentions :code',\n        'default'   => 'Standard mentions :mention',\n    ],\n    'success'           => 'Appearance options saved.',\n    'values'            => [\n        'pagination'        => ':amount results per page',\n        'pagination-sub'    => ':amount (available for subscribers)',\n    ],\n];\n"
  },
  {
    "path": "lang/en/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'boost_name'    => 'Boost :name',\n    ],\n    'available' => 'Premium campaigns :amount/:total',\n    'benefits'  => [\n        'boosted'       => 'Boosting a campaign with :one booster will unlock access to the :marketplace, theming options, larger uploads for all members, recovering deleted entities, and :more.',\n        'more'          => 'more amazing features',\n        'superboosted'  => 'Superboosting a campaign with :amount boosters will unlock all the benefits of a boosted campaign, as well as a campaign gallery, full logs changes are made to entries, and :more.',\n    ],\n    'boost'     => [\n        'actions'   => [\n            'confirm'   => 'Boost it!',\n            'remove'    => 'Stop boosting :campaign',\n            'subscribe' => 'Subscribe to Kanka',\n            'upgrade'   => 'Upgrade your subscription',\n        ],\n        'confirm'   => 'How exciting! You\\'re about to boost :campaign. This will assign one (:cost) of your available campaign boosters.',\n        'duration'  => 'Assigned boosters remain assigned until you manually remove them, or when your subscription ends.',\n        'errors'    => [\n            'boosted'           => 'Oh oh, looks like :campaign is already boosted!',\n            'out-of-boosters'   => 'Oh no! You don\\'t have enough boosters available. You have :available and need :cost. Either stop boosting other campaigns, or :upgrade.',\n        ],\n        'pitch'     => 'Become a subscriber to unlock campaign boosters.',\n        'success'   => 'The :campaign campaign is now boosted. Enjoy all the new awesome features!',\n        'title'     => 'Boost :campaign',\n        'upgrade'   => 'upgrade your subscription',\n    ],\n    'campaign'  => [\n        'boosted'       => 'Boosted by :user since :time',\n        'premium'       => 'Premium features unlocked thanks to :user since :time',\n        'standard'      => 'Standard',\n        'superboosted'  => 'Superboosted by :user since :time',\n        'unboosted'     => 'Unboosted',\n    ],\n    'intro'     => [\n        'anyone'    => 'You aren\\'t limited to only boosting campaigns you\\'ve created. You can boost any campaign you are a part of or can see. This includes campaigns where you are a player, or :public you enjoy.',\n        'data'      => 'When a campaign is no longer boosted, access to boosted features is removed. However, no content is deleted, so boosting the campaign again in the future restores access to it.',\n        'first'     => 'Advanced features are unlocked by assigning your boosters to boost or superboost to a campaign. The amount of boosters you have is determined by your :subscription. This number is available to you at all time while you are a subscriber. Boosting a campaign will assign one of your boosters to it, while superboosting a campaign assigns three of them.',\n    ],\n    'pitch'     => [\n        'benefits'      => [\n            'backup'        => 'Recover deleted entries and posts for up to :amount days',\n            'customisable'  => 'Custom themes and CSS',\n            'icons'         => 'Thousands of icons for maps and timelines',\n            'plugins'       => 'Extend your campaign with community-built plugins',\n            'title'         => 'Boosted campaigns get',\n            'upload'        => 'Larger uploads for all members',\n            'visual'        => 'Visualise family trees and relationships between entries',\n        ],\n        'description'   => 'Assign boosters to campaigns and help unlock amazing features for everyone involved. Not impressed by boosted campaigns? We\\'ve got you covered with superboosted campaigns!',\n        'more'          => 'Check out the full list of perks on our :boosters page.',\n        'title'         => 'Unlock the full potential of your campaigns',\n    ],\n    'ready'     => [\n        'available'         => 'Your available campaign boosters.',\n        'pricing'           => 'All of our subscription levels include at least one campaign booster and start at :amount per month.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Boost a campaign',\n    ],\n    'superboost'=> [\n        'actions'   => [\n            'confirm'   => 'Superboost it!',\n            'instead'   => 'Superboost it for :count!',\n            'remove'    => 'Stop superboosting :campaign',\n        ],\n        'confirm'   => 'How exciting! You\\'re about to superboost :campaign. This will assign three (:cost) of your available campaign boosters.',\n        'errors'    => [\n            'boosted'   => 'Oh oh, looks like :campaign is already superboosted!',\n        ],\n        'success'   => 'The :campaign campaign is now superboosted. Enjoy all the new awesome features!',\n        'title'     => 'Superboost :campaign',\n        'upgrade'   => 'Ready for the ultimate Kanka experience? Superboosting :campaign will assign :cost additional campaign boosters.',\n    ],\n    'title'     => 'Campaign Boosters',\n    'unboost'   => [\n        'confirm'   => 'Yes, I\\'m sure',\n        'status'    => [\n            'boosting'      => 'boosting',\n            'superboosting' => 'superboosting',\n        ],\n        'success'   => 'The :campaign campaign is no longer boosted, and your boosters are available again.',\n        'title'     => 'Unboosting a campaign',\n        'warning'   => 'Are you sure you want to stop :action :campaign? This will release your assigned boosters, and hide all content and features related to the perks until the campaign is boosted again.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/settings/premium.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'remove'    => 'Remove premium',\n        'unlock'    => 'Go premium',\n    ],\n    'create'        => [\n        'actions'       => [\n            'confirm'   => 'Go premium!',\n        ],\n        'confirm'       => 'How exciting! You\\'re about to unlock premium features for :campaign. This will use one of your available premium campaigns.',\n        'duration'      => 'Premium campaigns stay that way until you manually remove them, or your subscription ends.',\n        'pitch_2026'    => 'Get unlimited roles, members, custom themes, plugins, and more for your campaigns.',\n        'success'       => 'The :campaign campaign is now premium. Enjoy all the new awesome features!',\n    ],\n    'exceptions'    => [\n        'already'       => 'Premium features have already been unlocked for this campaign.',\n        'out-of-stock'  => 'You don\\'t have enough premium campaigns available to unlock this campaign. Either remove the premium status from another campaign, or :upgrade.',\n    ],\n    'pitch'         => [\n        'description'   => 'Premium features apply to the whole campaign, including all of its members.',\n        'title'         => 'Premium campaigns get',\n    ],\n    'ready'         => [\n        'available'         => 'Your available premium campaigns.',\n        'pricing'           => 'All of our subscription levels include at least one premium campaign and start at :amount per month.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Go premium',\n    ],\n    'remove'        => [\n        'confirm'   => 'Yes, I\\'m sure',\n        'cooldown'  => 'The premium features from :campaign can be removed after :date.',\n        'success'   => 'Premium features have been removed from :campaign. You can now unlock premium features on another one.',\n        'title'     => 'Removing premium features',\n        'warning'   => 'Are you sure you want to remove premium features from :campaign? This will allow you to unlock another one, and hide all content and features related to the perks until the campaign\\'s premium status is re-enabled.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'               => [\n                'disable'           => 'Disable two-factor authentication',\n                'disable-confirm'   => 'Click again to confirm',\n                'finish'            => 'Finish setup and log in',\n            ],\n            'activation_helper'     => 'To finish setting up your account\\'s two-factor authentication, please follow these instructions.',\n            'disable'               => [\n                'helper'    => 'If you want to disable two-factor authentication click the button below. Keep in mind that this will leave your account vulnerable to anyone that knows your login information.',\n                'title'     => 'Disable two-factor authentication',\n            ],\n            'enable_instructions'   => 'To start the activation process, generate your authentication QR code, then scan it into the Google Authenticator App (:ios, :android), or another similar authenticator app.',\n            'enabled'               => 'Two-factor authentication is currently enabled on your account.',\n            'error_enable'          => 'Invalid Code, try again',\n            'fields'                => [\n                'otp'       => 'Enter the One Time Password (OTP) provided by the authenticator app',\n                'qrcode'    => 'Scan the following QR Code with your authenticator app to generate a One Time Password (OTP)',\n            ],\n            'generate_qr'           => 'Generate QR code',\n            'helper'                => 'Two-factor authentication (2FA) strengthens access security by requiring two methods (also referred to as factors) to verify your identity on each login.',\n            'learn_more'            => 'Learn more about two-factor authentication.',\n            'social'                => 'Kanka two-factor authentication is only enabled for users that login using their e-mail and password. Change your login method in your account settings before being able to enable this option.',\n            'success_disable'       => 'Two-factor authentication successfully disabled.',\n            'success_enable'        => 'Two-factor authentication enabled successfully. Please log in again to finish the setup.',\n            'success_key'           => 'Your secure QR code was successfully generated. Please complete your setup to activate two-factor authentication.',\n            'title'                 => 'Two-factor authentication',\n        ],\n        'actions'           => [\n            'social'            => 'Switch to Kanka Login',\n            'update_email'      => 'Update email',\n            'update_password'   => 'Update password',\n        ],\n        'email'             => 'Change email',\n        'email_success'     => 'Email updated.',\n        'password'          => 'Change password',\n        'password_success'  => 'Password updated.',\n        'social'            => [\n            'error'     => 'You are already using the Kanka login for this account.',\n            'helper'    => 'Your account is currently managed by :provider. You can stop using it and switch to the standard Kanka login by setting up a password.',\n            'success'   => 'Your account now uses the Kanka login.',\n            'title'     => 'Social to Kanka',\n        ],\n        'title'             => 'Account',\n    ],\n    'api'           => [\n        'helper'    => 'Welcome to the Kanka APIs. Generate a Personal Access Token to use in your API request to gather information about the campaigns you are a part of.',\n        'link'      => 'Read the API documentation',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Connect',\n            'remove'    => 'Remove',\n        ],\n        'benefits'  => 'Kanka provides a few integrations to third party services. More third party integrations are planned for the future.',\n        'discord'   => [\n            'confirm'   => 'Are you sure you want to disconnect your account from Discord? This will remove any roles you have been synced with.',\n            'errors'    => [\n                'add'   => 'An error occurred linking up your Discord account with Kanka. Please try again. If this keeps happening, please be aware that Discord has a limit on 100 joined servers when using their APIs.',\n            ],\n            'success'   => [\n                'add'       => 'Your Discord account has been linked.',\n                'remove'    => 'Your Discord account has been unlinked.',\n            ],\n            'text'      => 'Link your Discord account with Kanka to automatically get access to your subscription roles and private channels.',\n            'unlock'    => 'Unlock Discord roles',\n        ],\n        'title'     => 'App Integration',\n    ],\n    'billing'       => [\n        'placeholder'   => 'If you need additional contact or tax information added to your receipts (bussines address, VAT number, etc.), enter it below and it will appear on all of your receipts.',\n        'save'          => 'Save billing information',\n        'title'         => 'Billing Information',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => ':name is already being boosted.',\n            'exhausted_boosts'      => 'You are out of boosts to give. Remove your boost from a campaign before giving it to another.',\n            'exhausted_superboosts' => 'You are out of boosts. You need 3 boosters to superboost a campaign.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Austria',\n        'belgium'       => 'Belgium',\n        'france'        => 'France',\n        'germany'       => 'Germany',\n        'italy'         => 'Italy',\n        'netherlands'   => 'The Netherlands',\n        'spain'         => 'Spain',\n    ],\n    'layout'        => [\n        'title' => 'Layout',\n    ],\n    'menu'          => [\n        'account'               => 'Account',\n        'api'                   => 'API',\n        'appearance'            => 'Appearance',\n        'apps'                  => 'Apps',\n        'boosters'              => 'Boosters',\n        'notifications'         => 'Notifications',\n        'other'                 => 'Other',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Payment Options',\n        'personal_settings'     => 'Personal Settings',\n        'premium'               => 'Premium campaigns',\n        'profile'               => 'Public profile',\n        'settings'              => 'Settings',\n        'subscription'          => 'Subscription',\n        'subscription_status'   => 'Subscription Status',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Deprecated feature - if you wish to support Kanka, please do so with a :subscription. Patreon linking is still active for our Patrons who have linked their account before the move away from Patreon.',\n        'pledge'        => 'Pledge: :name',\n        'remove'        => [\n            'button'    => 'Unlink your Patreon account',\n            'success'   => 'Your Patreon account has been unlinked.',\n            'text'      => 'Unlinking your Patreon account with Kanka will remove your bonuses, name on the hall of fame, campaign boosts, and other features linked to supporting Kanka. None of your boosted content will be lost (e.g. entry headers). By subscribing again, you will have access to all your previous data, including the ability to unlock your previously premium campaigns.',\n            'title'     => 'Unlink your Patreon account with Kanka',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Update profile',\n        ],\n        'avatar'    => 'Profile Picture',\n        'success'   => 'Profile updated.',\n        'title'     => 'Public Profile',\n    ],\n    'referrals'     => [\n        'title' => 'Referrals',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Cancel subscription',\n            'subscribe'         => 'Subscribe',\n            'update_currency'   => 'Save billing currency',\n        ],\n        'billing'               => [\n            'helper'    => 'Your billing information is processed and stored safely through :stripe. This payment method is used for all of your subscriptions.',\n            'saved'     => 'Saved payment method',\n        ],\n        'cancel'                => [\n            'grace'     => [\n                'text'  => 'Your subscription is already set to end on :date, after which your premium campaigns will revert to standard campaigns and other benefits related to supporting Kanka will be disabled.',\n                'title' => 'Grace period',\n            ],\n            'options'   => [\n                'competitor'        => 'Switching to a competitor',\n                'financial'         => 'Subscription is too expensive',\n                'missing_features'  => 'Missing features',\n                'not_for'           => 'Subscription is not for me',\n                'not_playing'       => 'No longer playing or campaign on hiatus',\n                'not_using'         => 'Not currently using Kanka',\n                'other'             => 'Other',\n                'testing'           => 'Just testing Kanka',\n            ],\n            'text'      => 'Sorry to see you go! Cancelling your subscription will keep it active until :date, after which your premium campaigns will revert to standard campaigns and other benefits related to supporting Kanka will be disabled. Feel free to fill out the following form to inform us what we can do better, or what led to your decision.',\n            'title'     => 'Cancelling subscription',\n        ],\n        'cancelled'             => 'Your subscription has been cancelled. You can renew a subscription once your current subscription ends after :date.',\n        'change'                => [\n            'text'  => [\n                'downgrade_monthly' => 'You are downgrading to the :tier tier for :downgrade, thereafter billed monthly for :amount.',\n                'downgrade_yearly'  => 'You are downgrading to the :tier tier for :downgrade, thereafter billed annually for :amount.',\n                'monthly'           => 'You are subscribing at the :tier tier, billed monthly for :amount.',\n                'upgrade_monthly'   => 'You are upgrading to the :tier tier for :upgrade, thereafter billed monthly for :amount.',\n                'upgrade_paypal'    => 'You are upgrading to the :tier tier for :upgrade until :date.',\n                'upgrade_yearly'    => 'You are upgrading to the :tier tier for :upgrade, thereafter billed annually for :amount.',\n                'yearly'            => 'You are subscribing at the :tier tier, billed annually for :amount.',\n            ],\n            'title' => 'Change Subscription Tier',\n        ],\n        'coupon'                => [\n            'check'         => 'Check promo code',\n            'invalid'       => 'Invalid promotional code.',\n            'label'         => 'Promotional code',\n            'percent_off'   => 'We will discount your first yearly subscription by :percent%!',\n        ],\n        'currencies'            => [\n            'brl'   => 'BRL',\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Change your preferred billing currency',\n        ],\n        'errors'                => [\n            'callback'      => 'Our payment provider reported an error. Please try again or contact us if the problem persists.',\n            'failed'        => 'We are currently experiencing issues with our billing system. Please contact us at :email for assistance.',\n            'subscribed'    => 'Couldn\\'t process your subscription. Stripe provided the following hint.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Active since',\n            'active_until'      => 'Active until',\n            'billing'           => 'Billing',\n            'currency'          => 'Billing Currency',\n            'payment_method'    => 'Payment method',\n            'plan'              => 'Current plan',\n            'reason'            => 'Reason',\n            'reset'             => 'Reset billing information',\n            'reset_billing'     => 'I understand that changing currency will lose my billing history and require me to re-enter my payment method.',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Pay for your subscription using :method. This payment method won\\'t auto-renew at the end of your subscription. :method is only available in Euros.',\n            'alternatives-2'        => 'Pay for your subscription using :method. This is a one time payment that doesn\\'t automatically renew at at the end of the subscription.',\n            'alternatives_warning'  => 'Upgrading your subscription when using this method is not possible. Please subscribe again when your current one ends.',\n            'alternatives_yearly'   => 'We only accept yearly subscriptions when subscribing with :method',\n            'currency_block'        => 'It is not possible to change currency while you have an active Kanka subscription, you can change your currency once your current subscription ends.',\n            'currency_reset'        => 'Changing your currency of choice will delete your billing history and will require you to re-enter a payment method.',\n            'paypal_v3'             => 'Safely pay for your yearly subscription using PayPal.',\n            'stripe'                => 'Your billing information is processed and stored safely through :stripe.',\n        ],\n        'manage_subscription'   => 'Manage subscription',\n        'payment_method'        => [\n            'actions'       => [\n                'add'               => 'Add',\n                'add_new'           => 'Add a new payment method',\n                'change'            => 'Change payment method',\n                'save'              => 'Save payment method',\n                'show_alternatives' => 'Alternative payment options',\n            ],\n            'add_one'       => 'You currently have no payment method saved.',\n            'alternatives'  => 'You can subscribe using these alternative payment options. This action will charge your account once and not auto-renew your subscription every month.',\n            'card'          => 'Card',\n            'card_name'     => 'Name on card',\n            'country'       => 'Country of residence',\n            'ending'        => 'Ending in',\n            'helper'        => 'This card will be used for all of your subscriptions.',\n            'new_card'      => 'Add a new payment method',\n            'saved'         => ':brand **** :last4',\n        ],\n        'paypal_expiring'       => 'Your PayPal subscription expires on :date. Renew now to avoid losing access.',\n        'periods'               => [\n            'monthly'   => 'Monthly',\n            'yearly'    => 'Yearly',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => 'Optionally tell us why you are downgrading your subscription.',\n            'reason'            => 'Optionally tell us why you are no longer supporting Kanka.',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount billed monthly',\n            'cost_yearly'   => ':currency :amount billed yearly',\n        ],\n        'sub_status'            => 'Subscription information',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Cancel subscription',\n                'downgrading'       => 'Please contact us for downgrading',\n                'rollback'          => 'Change to Kobold',\n                'subscribe'         => 'Change to :tier monthly',\n                'subscribe_annual'  => 'Change to :tier yearly',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Your payment was registered. You will get a notification as soon as it is processed and your subscription is active.',\n            'callback'      => 'Your subscription was successful. Your account will be updated as soon as our payment provider informs us of the change (this might take a few minutes).',\n            'currency'      => 'Your preferred currency setting was updated.',\n            'subscribed'    => 'Your subscription was successful! Don\\'t forget to subscribe our newsletter to be notified of changes in Kanka. Also, you can check out our discord and become part of the community',\n        ],\n        'tiers'                 => 'Subscription Tiers',\n        'trial_period'          => 'Yearly subscriptions have a 14 day cancellation policy. Contact us at :email if you wish to cancel your yearly subscription and get a refund.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Upgrade & Downgrade Information',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Your bonuses stay enabled until the end of your payment period.',\n                    'boosts'    => 'The same happens for your boosted campaigns. Boosted features become invisible but aren\\'t deleted when a campaign is no longer boosted.',\n                    'kobold'    => 'To cancel your subscription, change to the Kobold tier.',\n                    'premium'   => 'The same happens for your premium campaigns. Premium features become invisible but aren\\'t deleted when a campaign is no longer premium.',\n                ],\n                'title'     => 'When cancelling your subscription',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'Your current tier will stay active until the end of your current billing cycle, after which you will be downgraded to your new tier.',\n                ],\n                'provide_reason'    => 'If you can, please share with us why you are downgrading your subscription.',\n                'title'             => 'When downgrading to a lower tier',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Your payment method will be billed immediately and you will have access to your new tier.',\n                    'prorate'   => 'When upgrading to a higher tier, you will only be billed the difference to your new tier.',\n                ],\n                'title'     => 'When upgrading to a higher tier',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'We couldn\\'t charge your credit card. Please update your credit card information, and we will try charging it again in the next few days. If it fails again, your subscription will be cancelled.',\n            'patreon'       => 'Your account is currently linked with Patreon. Please unlink your account in your :patreon settings before switching to a Kanka subscription.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'count'             => 'Member of :member',\n        'created_campaigns' => 'Your Campaigns',\n        'follow_more'       => 'Find campaigns',\n        'followed_campaigns'=> 'Followed Campaigns',\n        'new_campaign'      => 'New Campaign',\n        'public_campaigns'  => 'Public Campaigns',\n        'reorder'           => 'Reorder',\n        'updated'           => 'Updated',\n    ],\n    'dashboard'         => 'Dashboard',\n    'entity-creator'    => 'Quick Creator',\n    'gallery'           => 'Gallery',\n    'game'              => 'Game',\n    'other'             => 'Other',\n    'recent'            => 'Recent changes',\n    'relations'         => 'Relations',\n    'settings'          => 'Settings',\n    'time'              => 'Time',\n    'world'             => 'World',\n];\n"
  },
  {
    "path": "lang/en/spotlights.php",
    "content": "<?php\n\nreturn [\n    'applied'       => [\n        'actions'       => [\n            'retract'   => 'Retract application',\n        ],\n        'description'   => 'Your application has been submitted and is now under review. You will receive a notification when it has been approved or rejected.',\n        'title'         => 'Application applied',\n    ],\n    'apply'         => [\n        'errors'    => [\n            'empty' => 'The question :field needs more content',\n        ],\n    ],\n    'approved'      => [\n        'description'   => 'Congratulations! Your application has been approved and is now featured on the :spotlight page.',\n        'title'         => 'Application approved',\n    ],\n    'faq'           => [\n        'finisher'  => 'Submitted doesn\\'t guarantee selection. We read every application, but can\\'t feature them all.',\n        'how'       => [\n            'a' => [\n                'end'           => 'Not follower count. Not popularity. Not membership status',\n                'lead'          => 'We select 1-3 campaigns per month.',\n                'req1'          => 'Clear identity and themes',\n                'req2'          => 'Thoughtful worldbuilding',\n                'req3'          => 'Interesting stories or approaches',\n                'requirements'  => 'Selection is editorial, not competitive. We look for:',\n            ],\n            'q' => 'How are campaigns selected?',\n        ],\n        'reapply'   => [\n            'a' => 'Yes. If your campaign isn\\'t selected, you\\'re welcome to apply again later, especially if your world has evolved.',\n            'q' => 'Can I apply more than once?',\n        ],\n        'selected'  => [\n            'a' => [\n                'end'   => 'You\\'ll be notified before publication.',\n                'lead'  => 'If selected:',\n                'req1'  => 'Your campaign receives the Spotlighted Campaign achievement',\n                'req2'  => 'We publish a feature on the :blog and :showcase',\n                'req3'  => 'We might lightly edit your answers for clarity',\n            ],\n            'q' => 'What happens if my campaign is selected?',\n        ],\n        'what'      => [\n            'a' => 'The Spotlight highlights exceptional campaigns built with Kanka. Selected campaigns are featured on the Kanka Showcase and in a short interview-style blog post.',\n            'q' => 'What is the Spotlight?',\n        ],\n        'who'       => [\n            'a' => [\n                'end'           => 'No minimum size. No system restriction.',\n                'lead'          => 'Any public campaign on Kanka can apply',\n                'req1'          => 'Be publically accessible',\n                'req2'          => 'Show active use (content, history, or players)',\n                'req3'          => 'Represent the kind of worlds others can learn from',\n                'requirements'  => 'Your campaign should:',\n            ],\n            'q' => 'Who can apply?',\n        ],\n    ],\n    'form'          => [\n        'actions'       => [\n            'apply'     => 'Submit application',\n            'retract'   => 'Retract application',\n            'save'      => 'Save draft',\n        ],\n        'draft'         => 'This is a draft of your application. You can save it and come back to it later.',\n        'not-public'    => 'This campaign isn\\'t publically visible and cannot apply to the spotlight.',\n        'preset'        => 'Tell us a little bit about :campaign and why you think it deserves to be featured. You can save and come back to these questions later.',\n        'required'      => 'This field is required.',\n        'title'         => 'Spotlight application form',\n    ],\n    'overview'      => [\n        'cta'           => 'Apply for spotlight with :name',\n        'not-public'    => ':name isn\\'t a publically visible campaign.',\n        'showcase'      => 'View Showcase',\n    ],\n    'placeholders'  => [\n        'inspiration'   => 'Books, games, history, music, vibes',\n        'kanka'         => 'Tell us a bit about why Kanka ended up being the right tool for your world',\n        'proud'         => 'Could be lore, players, longevity, status',\n        'stories'       => 'Tragedy, heroism, politics, found family, pure unadulterated chaos',\n        'time'          => 'Months, years, decades, over the span of multiple lifetimes?',\n        'world'         => 'Themes, emotions, conflicts (the hook)',\n    ],\n    'questions'     => [\n        'inspiration'   => 'What inspires this world',\n        'kanka'         => 'Why do you run games in Kanka?',\n        'proud'         => 'What are you most proud of?',\n        'share'         => 'Allow the Kanka team to use your answer in their marketing materials.',\n        'stories'       => 'What kind of stories emerge at the table?',\n        'time'          => 'How long have you been building this world?',\n        'world'         => 'What is this world really about?',\n    ],\n    'rejected'      => [\n        'description'   => 'Your application has been rejected. Please try again later.',\n        'title'         => 'Application rejected',\n    ],\n    'retract'       => [\n        'success'   => 'Your application has been successfully retracted. You can now edit your application again.',\n    ],\n    'rules'         => <<<'TEXT'\nWe select 1–3 campaigns each month to feature on the Kanka :showcase.\nSelection isn’t guaranteed. Spotlighted campaigns receive a permanent achievement and a published interview.\nTEXT\n,\n    'started'       => 'To get started, select one of your campaigns.',\n    'title'         => 'Apply for the Spotlight',\n];\n"
  },
  {
    "path": "lang/en/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => ':user\\'s world',\n    ],\n    'character1'    => [\n        'age'           => '[20s/30s/40s]',\n        'background'    => [\n            'cur'       => 'Currently [occupation/role]',\n            'loc'       => 'Gew up in [hometown/region]',\n            'seeking'   => 'Seeking [goal/motivation]',\n            'title'     => 'Background',\n        ],\n        'description'   => [\n            'intro'     => '[A brief introduction to your character - who they are, where they\\'re from, and what they want.]',\n            'template'  => 'This is a template character you can customize. Replace the placeholder details below with your own character\\'s information. You can always add more fields later.',\n            'tip'       => 'Tip: Start with just a name and one-sentence description. You can expand the details as your world develops.',\n        ],\n        'name'          => '[Your Character Name]',\n        'personality'   => [\n            'trait1'    => [\n                'name'  => 'Trait 1',\n                'value' => '[Brave/Cautious/Ambitious]',\n            ],\n            'trait2'    => [\n                'name'  => 'Trait 2',\n                'value' => '[Loyal/Independant/Cunning]',\n            ],\n            'trait3'    => [\n                'name'  => 'Trait 3',\n                'value' => '[Optimistic/Cynical/Pragmatic]',\n            ],\n        ],\n        'physical'      => [\n            'build'     => [\n                'name'  => 'Build',\n                'value' => '[Lean/Average/Muscular]',\n            ],\n            'features'  => [\n                'name'  => 'Notable features',\n                'value' => '[Scares, tattoos, distinctive clothing]',\n            ],\n        ],\n    ],\n    'character2'    => [\n        'description'   => [\n            'first' => 'A supporting character who helps or travels with :mention. Customize these details to fit your story.',\n            'second'=> 'Tip: Supporting characters don\\'t need as much detail as protagonists. Focus on what makes them useful or interesting to your story.',\n        ],\n        'name'          => '[Allied Character Name]',\n        'relation'      => '[Friend/Mentor/Rival]',\n        'skills'        => [\n            'first' => '[Skill 1: Combat/Magic/Healing/Crafting]',\n            'second'=> '[Skill 2: Social/Knowledge/Technical]',\n            'third' => '[Skill 3: Unique talent or specialty]',\n            'title' => 'Skills & Abilities',\n        ],\n    ],\n    'city'          => [\n        'description'   => 'The beating heart of the kingdom, where merchants, nobles, and common folk mingle in bustling markets and grand plazas. The old city walls still stand, though the city has long since grown beyond them.',\n        'districts'     => [\n            'first' => 'Noble Quarter: Manor houses and gardens',\n            'fourth'=> 'Dockside: River port, warehouses',\n            'second'=> 'Market District: Trade, crafts, taverns',\n            'third' => 'Old Town: Original walled city',\n            'title' => 'Districts',\n        ],\n        'locations'     => [\n            'first' => 'The Royal Palace (center of Noble Quarter)',\n            'second'=> 'The Grand Bazaar (Market District)',\n            'third' => 'The Rusty Sword Inn (popular adventurer hangout)',\n            'title' => 'Notable locations',\n        ],\n        'name'          => '[Your Capital City]',\n        'type'          => 'Capital',\n    ],\n    'kingdom'       => [\n        'description'   => 'A prosperous realm known for its fertile farmlands and ancient forests. The royal family has ruled for three generations, maintaining peace through diplomacy and trade.',\n        'features'      => [\n            'capital'   => [\n                'name'  => 'Capital',\n            ],\n            'exp'       => [\n                'name'  => 'Primary export',\n                'value' => 'Grain, timber',\n            ],\n            'gov'       => [\n                'name'  => 'Government',\n                'value' => 'Hereditary monarchy',\n            ],\n            'pop'       => [\n                'name'  => 'Population',\n                'value' => '~50\\'000',\n            ],\n            'title'     => 'Notable features',\n        ],\n        'name'          => '[Your Kingdom Name]',\n        'recent'        => [\n            'first' => 'Increased bandit activity on eastern roads',\n            'second'=> 'Failed harvest in southern provinces',\n            'title' => 'Recent Events',\n        ],\n        'type'          => 'Kingdom',\n    ],\n    'name'          => ':name (example)',\n];\n"
  },
  {
    "path": "lang/en/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Subscribe to Kanka to unlock higher image uploads, an ad-free experience, :boosters and :more. We use :stripe to handle all billing, with no credit card information stored or transiting through our servers.',\n        'more'  => 'more amazing features',\n    ],\n    'errors'    => [\n        'grace'                 => 'Your current subscription ends on :date, after which point you can re-subscribe.',\n        'invalid_card_country'  => [\n            'brl'   => 'We\\'re sorry but we currently only accept BRL payments for customers with Brazilian credit cards. If you think this is a mistake, contact us at :email.',\n        ],\n        'invalid_currency'      => 'You previously had a subscription in :old, preventing you from having a new subscription in :new. Please switch your currency to :old, or contact us at :email if you wish to switch currencies.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/subscriptions/cancellation.php",
    "content": "<?php\n\nreturn [\n    'custom'        => [\n        'label'         => 'Anything else you\\'d like to share?',\n        'placeholder'   => 'We read every response.',\n    ],\n    'intro'         => 'Thanks for being a subscriber! Your subscription will remain active until :date, after which your premium campaigns will revert to standard and these benefits will be disabled.',\n    'loss'          => [\n        'ads'       => [\n            'title' => 'Ad-free experience for you and your players',\n        ],\n        'discord'   => [\n            'title' => '\":role\" role in our Discord community',\n        ],\n        'downgrade' => 'You can downgrade your subscription instead of cancelling it to keep most of your awesome benefits.',\n        'premium'   => [\n            'players'   => '{1}:count player will lose access to premium features|[2,*]:count players will lose access to premium features',\n            'plugins'   => '{1}Access to :count installed plugin|[2,*]Access to :count installed plugin',\n            'storage'   => 'Your :current',\n            'title'     => '{0}Premium status on \":campaign\"|{1}Premium status on \":campaign\" and :count other campaign|[2,*]Premium status on \":campaign\" and :count other campaigns',\n        ],\n        'roadmap'   => 'Check the :roadmap, it might already be planned.',\n        'title'     => 'Before you cancel, here\\'s what will change:',\n    ],\n    'pause'         => [\n        'button'    => 'Pause subscription for 1-3 months',\n        'helper'    => 'Keep everything. No charges. Resume anytime.',\n    ],\n    'secondary'     => [\n        'competitor'    => [\n            'legend_keeper'     => 'Legend Keeper',\n            'notion_obsidian'   => 'Notion or Obsidian',\n            'other'             => 'Something else',\n            'world_anvil'       => 'World Anvil',\n        ],\n        'financial'     => [\n            'forgot'        => 'I forgot I was still subscribed',\n            'lower_price'   => 'A lower price would help',\n            'not_often'     => 'I just don\\'t use it often enough to justify the cost',\n        ],\n        'label'         => 'Can you tell us a bit more?',\n        'not_for'       => [\n            'better_fit'            => 'I found a better fit elsewhere',\n            'expected_different'    => 'I expected something different',\n            'terminology'           => 'The terminology doesn\\'t match how I think',\n            'too_complex'           => 'Too complex to get started',\n        ],\n        'not_playing'   => [\n            'campaign_finished' => 'The campaign finished',\n            'group_fell_apart'  => 'Group fell apart',\n            'on_break'          => 'Taking a break, may return',\n        ],\n        'not_using'     => [\n            'lost_motivation'   => 'I lost motivation for the project',\n            'on_break'          => 'My campaign is on a break but I may return',\n            'too_busy'          => 'I\\'ve been too busy lately',\n        ],\n    ],\n    'select_reason' => 'Please select a reason to continue.',\n];\n"
  },
  {
    "path": "lang/en/subscriptions/cancelled.php",
    "content": "<?php\n\nreturn [\n    'active'    => [\n        'adfree'    => 'An ad-free experience',\n        'discord'   => 'Subscriber-only :discord roles',\n        'helper'    => 'Your subscription will remain active until :date. Until then, you\\'ll continue to enjoy all subscription perks, including:',\n        'limit'     => 'Increased upload limits',\n        'more'      => 'And more!',\n        'premium'   => 'Premium campaigns and their features',\n        'title'     => 'Your perks are still active',\n    ],\n    'change'    => [\n        'action'    => 'Resubscribe now',\n        'helper'    => 'We\\'d love to have you back! You can resubscribe at any time to pick up right where you left off.',\n        'title'     => 'Changed your mind?',\n    ],\n    'contact'   => [\n        'feedback'  => 'If there\\'s something we could have done better, we\\'d love to hear from you:',\n        'helper'    => 'Even without a subscription, you\\'re still a part of the Kanka community. Keep building your worlds, and feel free to reconnect whenever the time is right.',\n        'send'      => 'Contact us with your feedback',\n        'title'     => 'Stay in touch',\n    ],\n    'next'      => [\n        'data'      => 'Your data will stay safe, nothing is deleted, and you can re-subscribe anytime',\n        'discord'   => 'You\\'ll no longer have access to subscriber-only features and channels',\n        'helper'    => 'Once your subscription ends:',\n        'premium'   => 'Any campaigns with premium enabled will lose their premium status',\n        'title'     => 'What happens after that?',\n    ],\n    'seo_title' => 'Sorry to see you go',\n    'subtitle'  => 'Thanks for having been a subscriber, your support has meant a lot to us. Here\\'s what to expect now:',\n    'title'     => 'Sorry to see you go, :name',\n];\n"
  },
  {
    "path": "lang/en/subscriptions/confirm.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => 'Pay :currency:amount now',\n        'paypal'    => 'Pay :currency:amount with PayPal',\n        'subscribe' => 'Subscribe for :currency:amount',\n    ],\n    'helpers'   => [\n        'auto-renew'    => [\n            'monthly'   => 'Your subscription auto-renews every month. Your next billing date is :date.',\n            'none'      => 'Paying with PayPal is a one-time payment and doesn\\'t auto-renew. You can resubscribe once your subscription ends after :date.',\n            'yearly'    => 'Your subscription auto-renews every 12 months. Your next billing date is :date.',\n        ],\n        'paypal'        => 'You will be redirected to PayPal to complete this transaction.',\n        'refund'        => 'We offer a 14 day no-questions-asked refund policy on all yearly subscriptions. Simply email us at :email to initiate a refund process.',\n        'tiny'          => 'Thanks for supporting a tiny team of passionate worldbuilders.',\n    ],\n    'title'     => ':name subscription',\n];\n"
  },
  {
    "path": "lang/en/subscriptions/faq.php",
    "content": "<?php\n\nreturn [\n    'cancellation'  => [\n        'answer'    => <<<'TEXT'\nAbsolutely! You'll find a cancel button right on this page if you're currently subscribed. All subscription benefits remain active until the end of your billing period. Please note that PayPal subscriptions automatically end at their conclusion as they don't support automatic renewal.\n\nTEXT\n,\n        'question'  => 'Can I cancel my subscription at any time?',\n    ],\n    'cost'          => [\n        'answer'    => 'Kanka offers three subscription tiers named after D&D monsters: Owlbear, Wyvern, and Elemental. Pricing varies based on your preferred currency (USD, EUR, or BRL). You\\'ll enjoy two months for free when choosing an annual subscription instead of monthly billing.',\n        'question'  => 'How much does a subscription cost?',\n    ],\n    'data'          => [\n        'answer'    => 'Rest assured, we never delete your data when a subscription ends. Premium campaigns simply revert to standard functionality, with premium features temporarily disabled. When you resubscribe, all your premium settings and data are immediately restored exactly as you left them.',\n        'question'  => 'What happens to my data if I cancel my subscription?',\n    ],\n    'discount'      => [\n        'answer'    => 'Yes! We reward our annual subscribers with two months for free compared to monthly billing. This is our way of thanking you for your long-term commitment to Kanka.',\n        'question'  => 'Are there any discounts for annual subscriptions?',\n    ],\n    'downgrade'     => [\n        'answer'    => 'You can change your subscription tier anytime. When upgrading, we\\'ll only charge you the difference between your current and new plan for the remainder of your billing period. When downgrading, your new lower rate takes effect at your next renewal date, with no interruption to your current benefits.',\n        'question'  => 'How do I upgrade/downgrade my subscription?',\n    ],\n    'fail'          => [\n        'answer'    => 'If a payment doesn\\'t go through, we\\'ll notify you by email right away and automatically attempt to charge your card up to three additional times. If these attempts are unsuccessful, your subscription will be paused. You can easily resolve this by updating your :billing information with a valid payment method.',\n        'question'  => 'What happens if my payment fails?',\n    ],\n    'help'          => [\n        'answer'    => 'Your subscription pays for our time, our servers, and the freedom to keep Kanka sustainable without chasing growth at all costs. It lets us fix bugs faster, build features we actually believe in, and stay responsive to the community instead of investors. Quite simply: it keeps Kanka alive and getting better.',\n        'question'  => 'How does my subscription help Kanka?',\n    ],\n    'methods'       => [\n        'answer'    => <<<'TEXT'\nWe accept credit card and PayPal payments in USD, EUR, and BRL. Your payment security is important to us; all credit card processing is handled securely by our trusted payment provider, :stripe.\n\nTEXT\n,\n        'question'  => 'What payment methods are accepted?',\n    ],\n    'refund'        => [\n        'answer'    => 'Yes! We offer a 14-day, no-questions-asked 100% refund policy for all yearly subscriptions. Simply drop us an email at :email asking for your refund, and we\\'ll take care of everything for you.',\n        'question'  => 'Do you offer refunds?',\n    ],\n    'renewal'       => [\n        'answer'    => 'Yes, for credit card subscriptions, we\\'ll automatically renew your plan at the same rate when your billing period ends. PayPal subscriptions are the exception, they require manual renewal as PayPal doesn\\'t support automatic billing continuation for our service.',\n        'question'  => 'Will I be charged automatically when my subscription renews?',\n    ],\n    'security'      => [\n        'answer'    => 'Your financial security is our priority. We partner with :stripe, a PCI-compliant payment processor that maintains the highest standards in payment security. All sensitive payment details are handled and stored by Stripe under GDPR-compliant protocols, not on our servers.',\n        'question'  => 'How secure is my payment information?',\n    ],\n    'sharing'       => [\n        'answer'    => 'Absolutely! Your subscription allows you to enable premium campaigns that benefit everyone involved. All campaign members enjoy premium features within that campaign, regardless of their personal subscription status, making Kanka perfect for collaborative worldbuilding.',\n        'question'  => 'Can I share my account/subscription with others?',\n    ],\n    'title'         => 'Frequently Asked Questions',\n    'trial'         => [\n        'answer'    => 'While we don\\'t offer a traditional trial, Kanka\\'s free version provides robust worldbuilding and campaign management tools to get you started. When you\\'re ready for more, subscribing unlocks premium features like increased image upload limits, an ad-free experience, exclusive Discord roles, and additional enhancements to your worldbuilding toolkit.',\n        'question'  => 'Is there a free trial available?',\n    ],\n    'update'        => [\n        'answer'    => 'Updating your billing details is simple, just visit your :billing page in your account settings. There you can modify payment methods, update card information, or change billing addresses as needed.',\n        'question'  => 'How do I update my billing information?',\n    ],\n    'why'           => [\n        'answer'    => 'Kanka is built and maintained by a tiny, independent team. Subscriptions are what allow us to work on it long-term, improve it steadily, and keep it free of dark patterns. You\\'re not paying a corporation, you\\'re directly funding the people who design, build, and support the platform.',\n        'question'  => 'Why does Kanka charge for subscriptions?',\n    ],\n];\n"
  },
  {
    "path": "lang/en/subscriptions/finish.php",
    "content": "<?php\n\nreturn [\n    'discord'   => [\n        'action'    => 'Connect your Discord account',\n        'enjoy'     => 'Head over to Discord to enjoy your new perks',\n        'helper'    => 'As a subscriber, you unlock exclusive roles and private channels in our Discord community, but first, you\\'ll need to connect your Discord account.',\n        'title'     => 'Get your Discord perks',\n    ],\n    'header'    => 'You\\'ve successfully subscribed, welcome to the inner circle of worldbuilders!',\n    'help'      => [\n        'contact-us'    => 'contact us',\n        'helper'        => 'If you have any questions or feedback, :contact-us or visit our :docs. We\\'re here to make your worldbuilding experience magical.',\n        'title'         => 'Need help?',\n    ],\n    'next'      => 'Your support helps us grow and keep improving Kanka for everyone. Here is what you can do next to unclock all the benefits from your subscription:',\n    'premium'   => [\n        'action'    => 'Unlock',\n        'helper'    => 'Unlock premium features like custom categories, access to the :plugins, and more!',\n        'title'     => 'Enable premium features on a campaign',\n    ],\n    'roadmap'   => [\n        'action'    => 'View the roadmap & suggest features',\n        'helper'    => 'We\\'re building Kanka for you. Check out the public roadmap and suggest or vote on features you\\'d love to see!',\n        'title'     => 'Help shape the future of Kanka',\n    ],\n    'title'     => 'Thank you for supporting Kanka!',\n];\n"
  },
  {
    "path": "lang/en/subscriptions/free-trial.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'accept'    => 'Start your free trial',\n        'magic'     => 'No credit card required. Just pure magic.',\n    ],\n    'final'     => [\n        'magic' => 'No commitments, no traps. Just more magic for your campaign.',\n        'title' => 'Start my 15-day trial now',\n    ],\n    'header'    => 'We\\'ve seen your dedication in the realms of Kanka. To honor your journey, we\\'re granting you a :what. No gold, gems, or credit card required.',\n    'included'  => [\n        'title' => 'What\\'s included',\n        'upsell'=> [\n            'action'    => 'See all subscription tiers',\n            'pitch'     => 'This is just the :tier tier. Ready to unlock even more?',\n        ],\n    ],\n    'pitch'     => [\n        'title' => 'Enjoy a 15-day free trial on us! Unlock all premium features and see what you\\'ve been missing.',\n    ],\n    'started'   => [\n        'header'    => 'You\\'ve successfully started your free trial, welcome to the inner circle of worldbuilders!',\n        'title'     => 'Welcome to your free trial!',\n    ],\n    'tease'     => [\n        'helper'    => 'Want to unlock higher file uploads and more premium campaign slots? Visit the :subscription page to see what else awaits you.',\n        'title'     => 'But you want more',\n    ],\n    'title'     => 'A New Quest Awaits, Adventurer!',\n    'what'      => ':amount-day free trial of the :tier tier',\n    'why'       => [\n        'helper'    => 'You\\'ve created, explored, and grown your campaign. Your loyalty hasn\\'t gone unnoticed. Think of this as a thank-you gift from the Kanka team.',\n        'title'     => 'You\\'ve earned this reward',\n    ],\n];\n"
  },
  {
    "path": "lang/en/subscriptions/paypal-renew.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'permission'    => 'Your subscription isn\\'t set to expire in the next 14 days.',\n    ],\n    'intro'     => 'Your subscription expires on :date. Renewing before then will extend your access for one full year from that date, and allow you to continue enjoying your perks without being interrupted.',\n    'success'   => 'Your subscription has been renewed successfully until :date.',\n];\n"
  },
  {
    "path": "lang/en/subscriptions/paypal.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'contact'       => 'If this problem persists, contact us at :email.',\n        'failed'        => 'PayPal failed to generate an invoice. Please try again.',\n        'incomplete'    => 'PayPal payment incomplete. Please try again.',\n        'rejected'      => 'PayPal generated an invalid invoice. Please try again.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'This promotion is no longer active.',\n        'invalid'   => 'Unknown promotion.',\n        'only-new'  => 'This promotion is only available to new subscribers.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/subscriptions/renew.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'renew' => 'Renew subscription',\n    ],\n    'helper'    => 'However, you can choose to renew your subscription to enjoy the benefits without interruptions.',\n    'success'   => 'Your subscription has been renewed for one year.',\n    'title'     => 'Subscription renewal',\n];\n"
  },
  {
    "path": "lang/en/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe was unabled to charge your payment method. Your subscription has consequently been deactivated.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'           => 'Add to tag',\n            'add_entity'    => 'Add to entry',\n        ],\n        'create'    => [\n            'attach_success'        => '{1} Tagged :count entry.|[2,*] Tagged :count entries.',\n            'attach_success_entity' => 'Successfully updated tags for :name.',\n            'entity'                => 'Add tags to :name',\n            'helper'                => 'Tag one or several entries with :name',\n            'title'                 => 'Tag entries',\n        ],\n    ],\n    'create'        => [\n        'title' => 'New Tag',\n    ],\n    'fields'        => [\n        'children'          => 'Children',\n        'icon'              => 'Icon',\n        'is_auto_applied'   => 'Automatically apply to new entries',\n        'is_hidden'         => 'Hidden from header and tooltip',\n    ],\n    'helpers'       => [\n        'icon'          => 'Use icons from :fontawesome or :rpgawesome. The icon will be shown instead of the tag name in lists.',\n        'no_children'   => 'There are currently no entries tagged with this tag.',\n        'no_posts'      => 'There are currently no articles tagged with this tag.',\n    ],\n    'hints'         => [\n        'children'          => 'This list contains all the entries that are assigned to this tag or the tag\\'s children.',\n        'is_auto_applied'   => 'Automatically apply this tag to newly created entries.',\n        'is_hidden'         => 'Don\\'t display this tag in an entry\\'s header or tooltip.',\n        'tag'               => 'This list contains all the tags are children of this tag or its children tags.',\n    ],\n    'lists'         => [\n        'empty' => 'Use tags to group and filter entries across your world for easier navigation.',\n    ],\n    'placeholders'  => [\n        'icon'  => 'Try :example1 or :example2',\n        'type'  => 'Lore, Wars, History, Religion, Vexillology',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Children',\n        ],\n    ],\n    'transfer'      => [\n        'entities'      => [\n            'helper'    => 'Transfer entries tagged with :name to another tag.',\n            'title'     => 'Transfer entries',\n        ],\n        'fail'          => 'Failed to transfer entries from :tag to :newTag',\n        'fail_post'     => 'Failed to transfer articles from :tag to :newTag',\n        'posts'         => [\n            'helper'    => 'Transfer articles tagged with :name to another tag.',\n            'title'     => 'Transfer articles',\n        ],\n        'success'       => 'Successfully transferred entries from :tag to :newTag',\n        'success_post'  => 'Successfully transferred articles from :tag to :newTag',\n        'transfer'      => 'Transfer',\n    ],\n];\n"
  },
  {
    "path": "lang/en/teams.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'lead'          => 'Making worldbuilding fun and reliable',\n        'translations'  => 'Translations',\n    ],\n    'leads' => [\n        'translators'   => 'Kanka is translated to several languages thanks to these amazing contributors.',\n    ],\n    'people'=> [\n        'itzamna'   => [\n            'title' => 'Junior Developer',\n        ],\n        'jay'       => [\n            'title' => 'Founder & Lead Developer',\n        ],\n        'jon'       => [\n            'title' => 'Co-Founder & Business Manager',\n        ],\n        'kaz'       => [\n            'title' => 'Bug Destroyer',\n        ],\n        'laura'     => [\n            'title' => 'Social Media',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => [\n            'monthly'   => 'Pay monthly',\n            'save'      => 'Save 17% (2 months free)',\n            'yearly'    => 'Pay yearly',\n        ],\n        'subscribe' => [\n            'choose'    => 'Choose :tier',\n            'downgrade' => 'Downgrade to :tier',\n            'monthly'   => ':tier monthly',\n            'upgrade'   => 'Upgrade to :tier',\n            'yearly'    => ':tier yearly',\n        ],\n    ],\n    'current'   => 'Current subscription',\n    'features'  => [\n        'api_requests'      => 'Up to :amount API requests per minute',\n        'boosters'          => 'Campaign Boosters',\n        'discord'           => 'Unique :discord role and channel',\n        'feature_influence' => 'Direct input into roadmap decisions',\n        'file_size'         => ':size file uploads',\n        'import'            => 'Campaign importer',\n        'modules'           => ':count custom categories',\n        'nice_image'        => 'Default thumbnail per category',\n        'no_ads'            => 'Remove all ads',\n        'pagination'        => 'Up to :amount elements visible per page',\n        'premium'           => 'Each includes: :storage GiB storage, :modules custom categories',\n        'roadmap'           => 'Upvote ideas in the roadmap',\n        'storage'           => ':count GiB storage',\n    ],\n    'helpers'   => [\n        'premium'   => 'These bonuses apply to premium campaigns you unlock.',\n    ],\n    'periods'   => [\n        'billed_monthly'    => 'billed monthly',\n        'billed_yearly'     => 'billed yearly',\n    ],\n    'pricing'   => ':currency :amount / month',\n    'ribbons'   => [\n        'best-value'    => 'Recommended for GMs',\n        'current'       => 'Current subscription',\n    ],\n    'target'    => [\n        'elemental' => 'For worldbuilding pros managing multiple epic settings and expansive campaigns',\n        'owlbear'   => 'Perfect for solo worldbuilders who want to supercharge their main campaign',\n        'wyvern'    => 'Ideal for game masters running multiple adventures or collaborative storytellers',\n    ],\n    'tiny'      => 'tiny team',\n    'why'       => 'Kanka is built by a :tiny of passionate worldbuilders. Subscriptions fund the people, servers, and time needed to keep improving the platform sustainably. There are no dark patterns, no investor pressure, and no infinite growth chasing. Development is steady and guided by our community.',\n];\n"
  },
  {
    "path": "lang/en/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Copy advanced mention with element name',\n        'success'           => 'Advanced mention to element copied to the clipboard.',\n    ],\n    'create'        => [\n        'success'   => 'Element added to the timeline.',\n        'title'     => 'New Timeline Element',\n    ],\n    'delete'        => [\n        'success'   => 'Element :name removed.',\n    ],\n    'edit'          => [\n        'success'   => 'Element updated.',\n        'title'     => 'Edit Timeline Element',\n    ],\n    'fields'        => [\n        'date'              => 'Date',\n        'era'               => 'Era',\n        'icon'              => 'Icon',\n        'use_entity_entry'  => 'Display the attached entry\\'s entry below. This element\\'s text will be displayed first if it is present.',\n        'use_event_date'    => 'Use linked event\\'s date.',\n    ],\n    'helpers'       => [\n        'date'              => 'If the element is linked to an event, display the event\\'s date.',\n        'entity_is_private' => 'The element\\'s entry is private.',\n        'icon'              => 'Copy the CSS class of an icon from :fontawesome or :rpgawesome.',\n        'is_collapsed'      => 'The element displays collapsed by default.',\n    ],\n    'placeholders'  => [\n        'date'      => 'e.g. March 42nd or 1332-1337',\n        'name'      => 'Required if no entry selected',\n        'position'  => 'Position in the list of elements for the era. Leave blank to add to the end.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'New era',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} Removed :count era.|{1} Removed :count era.|[2,*] Removed :count eras.',\n    ],\n    'create'        => [\n        'success'   => 'Era :name created.',\n        'title'     => 'New Era',\n    ],\n    'delete'        => [\n        'success'   => 'Era :name deleted.',\n    ],\n    'edit'          => [\n        'success'   => 'Era :name updated.',\n        'title'     => 'Edit Era :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Abbreviation',\n        'end_year'      => 'End Year',\n        'is_collapsed'  => 'Collapsed',\n        'start_year'    => 'Start Year',\n    ],\n    'helpers'       => [\n        'eras'          => 'The timeline needs to be created before eras can be added to it.',\n        'is_collapsed'  => 'Era is collapsed (minimised) by default.',\n        'primary'       => 'Separate your timeline into eras. A timeline needs at least one era to properly work.',\n    ],\n    'index'         => [\n        'title' => 'Eras of :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'AD, BC, BCE',\n        'end_year'      => 'Year the era ends. Leave blank if this is the current era.',\n        'name'          => 'Modern Era, Bronze Age, Galactic Wars',\n        'start_year'    => 'Year the era starts. Leave blank if this is the first era.',\n    ],\n];\n"
  },
  {
    "path": "lang/en/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Add element to :era',\n        'back'          => 'Back to :name',\n        'save_order'    => 'Save new order',\n    ],\n    'create'        => [\n        'title' => 'New Timeline',\n    ],\n    'fields'        => [\n        'copy_elements' => 'Copy Elements',\n        'copy_eras'     => 'Copy Eras',\n        'eras'          => 'Eras',\n        'reverse_order' => 'Reverse era order',\n    ],\n    'helpers'       => [\n        'no_era_v2'     => 'This timeline currently doesn\\'t have any eras. Add one or several eras to it, after which you can add elements to the eras here.',\n        'reverse_order' => 'Enable to display eras in reverse chronological order (older era first)',\n    ],\n    'lists'         => [\n        'empty' => 'Build a visual timeline to record major events and track how your world has evolved.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Primary, World chronicle, Kingdom legacy',\n    ],\n    'reorder'       => [\n        'empty'     => 'Add eras and elements to the timeline to be able to reorder it.',\n        'success'   => ':name successfully reordered.',\n        'title'     => 'Reorder :name',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder-elements'  => 'Reorder elements',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/tiptap.php",
    "content": "<?php\n\nreturn [\n    'share' => 'Share feedback',\n    'survey'=> 'Trying the new editor? :share (it takes just 2 minutes)',\n];\n"
  },
  {
    "path": "lang/en/tutorials/actions.php",
    "content": "<?php\n\nreturn [\n    'close'     => 'Close',\n    'disable'   => 'Disable tutorials',\n    'next'      => 'Next',\n    'ok'        => 'OK',\n];\n"
  },
  {
    "path": "lang/en/tutorials/characters.php",
    "content": "<?php\n\nreturn [\n    'character_1'   => [\n        'first' => 'This interface lists all the characters of your world. As you add more, they will be displayed here. Filters will become useful to find what you are looking for in the future, but right now there is nothing. Let\\'s create your first character!',\n        'title' => 'Characters',\n    ],\n    'character_2'   => [\n        'first' => 'Yoyo',\n        'title' => 'Creating a character',\n    ],\n];\n"
  },
  {
    "path": "lang/en/tutorials/home.php",
    "content": "<?php\n\nreturn [\n    'dashboard_1'   => [\n        'first' => 'The dashboard is your world\\'s home page. It looks pretty empty right now, but don\\'t fret.',\n        'second'=> 'Let\\'s start simple by creating your first character. In the sidebar to the left, you can see the list of various categories of Kanka. Click on next and the characters sidebar link will close. Click on that.',\n        'title' => 'Dashboard',\n    ],\n    'welcome'       => [\n        'first' => 'We\\'ve created your first campaign for you. Getting started with a worldbuilding tool can be a overwhelming, so we\\'ve create a small tutorial for you. This will guide you through creating your first entries and getting a basic overview of what is possible in Kanka.',\n        'second'=> 'If you are already experienced with Kanka, you can disable our tutorials all together.',\n        'title' => 'Welcome to Kanka, :user!',\n    ],\n];\n"
  },
  {
    "path": "lang/en/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'A true wordsmith! Winner of a worldbuilding prompt.',\n    ],\n    'fields'        => [\n        'achievements'      => 'Achievements',\n        'banned'            => 'This user has been banned',\n        'entities_created'  => 'Entries created :help :count',\n        'member_since'      => 'Member since :date',\n        'public_campaigns'  => 'Public campaigns',\n        'subscriber_since'  => 'Subscriber since :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'This value is recalculated every day.',\n    ],\n    'title'         => ':name Profile',\n];\n"
  },
  {
    "path": "lang/en/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted' => 'The :attribute must be accepted.',\n    'active_url' => 'The :attribute is not a valid URL.',\n    'after' => 'The :attribute must be a date after :date.',\n    'after_or_equal' => 'The :attribute must be a date after or equal to :date.',\n    'alpha' => 'The :attribute may only contain letters.',\n    'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',\n    'alpha_num' => 'The :attribute may only contain letters and numbers.',\n    'array' => 'The :attribute must be an array.',\n    'attribute_unique' => 'The entitie\\'s attribute names should be different',\n    'before' => 'The :attribute must be a date before :date.',\n    'before_or_equal' => 'The :attribute must be a date before or equal to :date.',\n    'between' => [\n        'numeric' => 'The :attribute must be between :min and :max.',\n        'file' => 'The :attribute must be between :min and :max kilobytes.',\n        'string' => 'The :attribute must be between :min and :max characters.',\n        'array' => 'The :attribute must have between :min and :max items.',\n    ],\n    'boolean' => 'The :attribute field must be true or false.',\n    'confirmed' => 'The :attribute confirmation does not match.',\n    'date' => 'The :attribute is not a valid date.',\n    'date_equals' => 'The :attribute must be a date equal to :date.',\n    'date_format' => 'The :attribute does not match the format :format.',\n    'different' => 'The :attribute and :other must be different.',\n    'digits' => 'The :attribute must be :digits digits.',\n    'digits_between' => 'The :attribute must be between :min and :max digits.',\n    'dimensions' => 'The :attribute has invalid image dimensions.',\n    'distinct' => 'The :attribute field has a duplicate value.',\n    'email' => 'The :attribute must be a valid email address.',\n    'exists' => 'The selected :attribute is invalid.',\n    'file' => 'The :attribute must be a file.',\n    'filled' => 'The :attribute field must have a value.',\n    'gt' => [\n        'numeric' => 'The :attribute must be greater than :value.',\n        'file' => 'The :attribute must be greater than :value kilobytes.',\n        'string' => 'The :attribute must be greater than :value characters.',\n        'array' => 'The :attribute must have more than :value items.',\n    ],\n    'gte' => [\n        'numeric' => 'The :attribute must be greater than or equal :value.',\n        'file' => 'The :attribute must be greater than or equal :value kilobytes.',\n        'string' => 'The :attribute must be greater than or equal :value characters.',\n        'array' => 'The :attribute must have :value items or more.',\n    ],\n    'image' => 'The :attribute must be an image.',\n    'in' => 'The selected :attribute is invalid.',\n    'in_array' => 'The :attribute field does not exist in :other.',\n    'integer' => 'The :attribute must be an integer.',\n    'ip' => 'The :attribute must be a valid IP address.',\n    'ipv4' => 'The :attribute must be a valid IPv4 address.',\n    'ipv6' => 'The :attribute must be a valid IPv6 address.',\n    'json' => 'The :attribute must be a valid JSON string.',\n    'lt' => [\n        'numeric' => 'The :attribute must be less than :value.',\n        'file' => 'The :attribute must be less than :value kilobytes.',\n        'string' => 'The :attribute must be less than :value characters.',\n        'array' => 'The :attribute must have less than :value items.',\n    ],\n    'lte' => [\n        'numeric' => 'The :attribute must be less than or equal :value.',\n        'file' => 'The :attribute must be less than or equal :value kilobytes.',\n        'string' => 'The :attribute must be less than or equal :value characters.',\n        'array' => 'The :attribute must not have more than :value items.',\n    ],\n    'max' => [\n        'numeric' => 'The :attribute may not be greater than :max.',\n        'file' => 'The :attribute may not be greater than :max kilobytes.',\n        'string' => 'The :attribute may not be greater than :max characters.',\n        'array' => 'The :attribute may not have more than :max items.',\n    ],\n    'mimes' => 'The :attribute must be a file of type: :values.',\n    'mimetypes' => 'The :attribute must be a file of type: :values.',\n    'min' => [\n        'numeric' => 'The :attribute must be at least :min.',\n        'file' => 'The :attribute must be at least :min kilobytes.',\n        'string' => 'The :attribute must be at least :min characters.',\n        'array' => 'The :attribute must have at least :min items.',\n    ],\n    'not_in' => 'The selected :attribute is invalid.',\n    'not_regex' => 'The :attribute format is invalid.',\n    'numeric' => 'The :attribute must be a number.',\n    'present' => 'The :attribute field must be present.',\n    'regex' => 'The :attribute format is invalid.',\n    'required' => 'The :attribute field is required.',\n    'required_if' => 'The :attribute field is required when :other is :value.',\n    'required_unless' => 'The :attribute field is required unless :other is in :values.',\n    'required_with' => 'The :attribute field is required when :values is present.',\n    'required_with_all' => 'The :attribute field is required when :values are present.',\n    'required_without' => 'The :attribute field is required when :values is not present.',\n    'required_without_all' => 'The :attribute field is required when none of :values are present.',\n    'same' => 'The :attribute and :other must match.',\n    'size' => [\n        'numeric' => 'The :attribute must be :size.',\n        'file' => 'The :attribute must be :size kilobytes.',\n        'string' => 'The :attribute must be :size characters.',\n        'array' => 'The :attribute must contain :size items.',\n    ],\n    'starts_with' => 'The :attribute must start with one of the following: :values',\n    'string' => 'The :attribute must be a string.',\n    'timezone' => 'The :attribute must be a valid zone.',\n    'unique' => 'The :attribute has already been taken.',\n    'uploaded' => 'The :attribute failed to upload.',\n    'url' => 'The :attribute format is invalid.',\n    'uuid' => 'The :attribute must be a valid UUID.',\n    'goodbye' => 'You must write :code to confirm the deletion of your account',\n    'delete_campaign' => 'You must write \":code\" to confirm the deletion of the campaign',\n    'confirmation' => 'You must write \":code\" to confirm this action.',\n\n    'forbidden_letter' => 'The :attribute cannot contain the letter \":letter.\"',\n    //'entity_file' => 'Allowed extensions: :formats',\n\n    'fontawesome' => 'The icon must be the CSS class only, not the whole HTML. For example, use :example.',\n\n    'nested_loop' => 'Selecting :parent as the parent would cause a recursive loop. Please select another parent.',\n    'social_login' => 'Please log in using :provider.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap our attribute placeholder\n    | with something more reader friendly such as \"E-Mail Address\" instead\n    | of \"email\". This simply helps us make our message more expressive.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "lang/en/visibilities.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'admin'         => 'Only members of the Admin role can view this element.',\n        'admin-self'    => 'Only you and members of the Admin role can view this element.',\n        'all'           => 'Everyone can view this element.',\n        'members'       => 'Only members of the campaign can view this element.',\n        'self'          => 'Only you can see this element.',\n    ],\n    'picker'    => [\n        'admin'         => 'Only visible to members of the :admin role.',\n        'admin-self'    => 'Only you and members of the :admin role can see this.',\n        'all'           => 'Anyone who can see :entity can see this.',\n        'failed'        => 'Failed to update visibility.',\n        'member'        => 'Only visible to campaign members. Useful for public campaigns.',\n        'self'          => 'Only you can see this.',\n    ],\n    'title'     => 'Updating visibility',\n    'toast'     => 'Successfully updated visibility.',\n    'tooltip'   => 'Click to learn about the various visibility options and what they mean in our documentation.',\n];\n"
  },
  {
    "path": "lang/en/whiteboards/draw.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add-circle'    => 'Add circle',\n        'add-entity'    => 'Add entry',\n        'add-image'     => 'Add image',\n        'add-square'    => 'Add square',\n        'add-text'      => 'Add text',\n        'duplicate'     => 'Duplicate selected',\n        'end-drawing'   => 'End drawing',\n        'lock'          => 'Lock',\n        'push-to-back'  => 'Push to back',\n        'push-to-front' => 'Push to front',\n        'start-drawing' => 'Start drawing',\n        'unlock'        => 'Unlock',\n    ],\n    'entity-search' => [\n        'placeholder'   => 'Type an entry\\'s name or alias',\n        'title'         => 'Entry search',\n    ],\n    'errors'        => [\n        'websockets'    => [\n            'disconnected'  => 'The connection to the websocket was lost. Please try again.',\n            'error'         => 'An error occurred while connecting to the websocket server.',\n            'unavailable'   => 'The websocket server is unavailable. Please try again later.',\n        ],\n    ],\n    'fields'        => [\n        'color' => 'Colour',\n    ],\n    'pen'           => [\n        'large-stroke'  => 'Large stroke',\n        'thin-stroke'   => 'Thin stroke',\n    ],\n    'reset'         => [\n        'helper'    => 'Are you sure you want to reset the whiteboard? This action cannot be undone.',\n        'title'     => 'Reset Whiteboard',\n    ],\n    'roles'         => [\n        'edit'  => 'This user can edit the whiteboard',\n        'view'  => 'This user can view the whiteboard',\n    ],\n    'toast'         => [\n        'copy'  => [\n            'success'   => 'Elements copied to clipboard.',\n        ],\n        'paste' => [\n            'error' => 'Something went wrong',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en/whiteboards.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'draw'  => 'Draw',\n    ],\n    'create'        => [\n        'title' => 'New Whiteboard',\n    ],\n    'cta'           => [\n        'text'  => 'To unlock whiteboards, a campaign needs to be made premium by a member at the :wyvern or :elemental tier.',\n        'title' => 'Whiteboards are a special premium feature',\n    ],\n    'lists'         => [\n        'empty' => 'Use a whiteboard to visually organize ideas, relationships, or story structure.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Idea, relationships, story structure',\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'customise' => 'Customize sidebar',\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/calendars/weather.php",
    "content": "<?php\n\nreturn [];\n"
  },
  {
    "path": "lang/en-US/calendars.php",
    "content": "<?php\n\nreturn [\n    'fields'        => [],\n    'placeholders'  => [\n        'colour'    => 'Color',\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'  => 'Visually build a theme for the campaign with this interface. Scroll down to see how the changes would impact various elements of the campaign. When a color is selected, a \"contrasting\" color is automatically selected for coloring text. Learn more about theming in our :docs.',\n    'pitch' => 'Psst, we have a theme builder if all you want to do is change some of the colors of the campaign 😉',\n];\n"
  },
  {
    "path": "lang/en-US/campaigns.php",
    "content": "<?php\n\nreturn [\n];\n"
  },
  {
    "path": "lang/en-US/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'fields'        => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => 'Character added to organization.',\n            'title'     => 'New Organization for :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Character organization removed.',\n        ],\n        'edit'      => [\n            'success'   => 'Character organization updated.',\n            'title'     => 'Update Organization for :name',\n        ],\n    ],\n    'placeholders'  => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/en-US/colours.php",
    "content": "<?php\n\nreturn [\n    'grey'  => 'Gray',\n];\n"
  },
  {
    "path": "lang/en-US/crud.php",
    "content": "<?php\n\nreturn [\n    'fields'        => [\n        'colour'    => 'Color',\n    ],\n    'placeholders'  => [\n        'organisation'  => 'Choose an organization',\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'customise' => 'Customize dashboard',\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/emails/welcome.php",
    "content": "<?php\n\nreturn [\n\n];\n"
  },
  {
    "path": "lang/en-US/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'sections'  => [\n        'unorganised'   => 'Unorganized',\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/entities.php",
    "content": "<?php\n\nreturn [\n    'new'           => [],\n    'organisation'  => 'Organization',\n    'organisations' => 'Organizations',\n];\n"
  },
  {
    "path": "lang/en-US/front.php",
    "content": "<?php\n\nreturn [\n    'features'  => [\n        'layers'    => [\n            'title' => 'Characters, Families, Locations',\n        ],\n    ],\n    'home'      => [],\n    'master'    => [\n        'description'   => ':kanka is a community driven worldbuilding and tabletop RPG campaign management tool perfect for worldbuilders and game masters alike. We help you create and organise your campaigns and worlds with our @mentions system and a whole range of features such as calendars, interactive maps, timelines, organizations, families, and as many characters as you can come up with!',\n        'title'         => 'Kanka',\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/helpers.php",
    "content": "<?php\n\nreturn [\n];\n"
  },
  {
    "path": "lang/en-US/items.php",
    "content": "<?php\n\nreturn [\n    'placeholders'  => [\n        'type'  => 'Weapon, Potion, Artifact',\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/locations.php",
    "content": "<?php\n\nreturn [\n    'helpers'       => [\n        'organisations' => 'View all organizations in this location and its children locations, or just those directly located here.',\n    ],\n    'map'           => [\n        'points'    => [\n            'fields'    => [\n                'colour'    => 'Color',\n            ],\n        ],\n    ],\n    'organisations' => [\n        'title' => 'Location :name Organizations',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/en-US/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'font_colour'   => 'Icon Color',\n        'polygon_style' => [\n            'stroke'    => 'Stroke color',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/en-US/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'New Organization',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'index'         => [],\n    'members'       => [\n        'destroy'   => [\n            'success'   => 'Member removed from the organization.',\n        ],\n        'helpers'   => [\n            'all_members'   => 'All characters that are members of this organizations and it\\'s sub-organizations.',\n            'members'       => 'All characters that are members of this organization.',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [],\n    'quests'        => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/en-US/quests.php",
    "content": "<?php\n\nreturn [\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/en-US/sidebar.php",
    "content": "<?php\n\nreturn [\n    'organisations' => 'Organizations',\n];\n"
  },
  {
    "path": "lang/es/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'Vincular a entidades',\n        ],\n        'create'        => [\n            'attach_success'    => '{1}Se ha vinculado la habilidad :name a :count entidad.|[2,*] Se ha vinculado la habilidad :name a :count entidades.',\n            'helper'            => 'Vincular :name a una o varias entidades.',\n            'title'             => 'Vincular entidades',\n        ],\n        'description'   => 'Entidades con esta habilidad',\n        'title'         => 'Entidades de la habilidad :name',\n    ],\n    'create'        => [\n        'title' => 'Nueva habilidad',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'entities'      => [],\n    'fields'        => [\n        'charges'   => 'Usos',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Agrega poderes, hechizos o talentos. Muchos creadores usan esto para modelar clases de D&D.',\n    ],\n    'placeholders'  => [\n        'charges'   => 'Cantidad de usos. Puedes hacer referencia a un atributo con {Nivel}*{CHA}',\n        'name'      => 'Bola de fuego, Alerta, Puñalada trasera',\n        'type'      => 'Hechizo, Proeza, Ataque',\n    ],\n    'reorder'       => [\n        'parentless'    => 'Sin padre',\n        'success'       => 'Habilidades reordenadas exitosamente.',\n        'title'         => 'Reordenar las habilidades',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Reordenar Habilidades',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/account/email.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Actualizar correo electrónico',\n    ],\n    'fields'    => [\n        'email' => 'Nueva dirección de correo electrónico.',\n    ],\n    'helpers'   => [\n        'email' => 'Asegúrate de que esté bien escrito.',\n    ],\n    'subtitle'  => 'Cambia la dirección de correo electrónico asociada a tu cuenta.',\n    'title'     => 'Actualiza tu dirección de correo electrónico',\n];\n"
  },
  {
    "path": "lang/es/account/password.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Actualizar contraseña',\n    ],\n    'fields'    => [\n        'password'  => 'Nueva contraseña',\n    ],\n    'helpers'   => [\n        'password'              => 'Usa un gestor de contraseñas para generar una contraseña segura.',\n        'password_confirmation' => '¡No te equivoques!',\n    ],\n    'subtitle'  => 'Cambia la contraseña de tu cuenta. Esto cerrará sesión en todos los demás dispositivos.',\n    'title'     => 'Actualiza la contraseña de tu cuenta.',\n];\n"
  },
  {
    "path": "lang/es/account/social.php",
    "content": "<?php\n\nreturn [\n    'info'      => 'Inicia sesión con :provider',\n    'subtitle'  => 'Cambia de un inicio de sesión gestionado por :provider a uno gestionado por Kanka, donde inicias sesión con tu correo electrónico y contraseña.',\n    'title'     => 'Cambiar a un inicio de sesión con Kanka',\n];\n"
  },
  {
    "path": "lang/es/assistance.php",
    "content": "<?php\n\nreturn [\n    'fields'        => [\n        'campaign'  => 'Campaña',\n    ],\n    'opening'       => 'Un miembro del equipo de Kanka te ha enviado a esta página con el propósito de ayudarte.',\n    'placeholders'  => [\n        'campaign'  => 'Selecciona una campaña de la que seas administrador',\n    ],\n    'select'        => 'Selecciona una campaña de la que seas administrador en el menú desplegable que aparece a continuación para generar un token especial de uso único, que permitirá a un miembro del equipo de Kanka unirse temporalmente a la campaña como administrador.',\n    'success'       => [\n        'opening'   => 'Tu token de asistencia se ha generado correctamente. El equipo de Kanka ha sido notificado y se unirá a tu campaña en breve para ayudarte. Normalmente nos pondremos en contacto contigo a través de :discord si necesitamos coordinar algo directamente.',\n        'secret'    => 'Solo un miembro verificado del equipo Kanka puede utilizar este token, es inútil para cualquier otra persona, por lo que no hay necesidad de tratarlo como un secreto.',\n        'token'     => 'Tu token de asistencia:',\n    ],\n    'title'         => 'Asistencia',\n];\n"
  },
  {
    "path": "lang/es/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'create'                => [\n        'title' => 'Nueva Plantilla de Atributos',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [\n        'auto_apply'    => 'Aplicar automáticamente',\n        'is_enabled'    => 'Habilitado',\n    ],\n    'hints'                 => [\n        'automatic'                 => 'Atributos aplicados automáticamente desde la plantilla de atributos :link.',\n        'automatic_apply'           => '{1} El siguiente atributo se aplicó automáticamente desde :link | [2,] Los :count siguientes atributos se aplicaron automáticamente desde :link.',\n        'entity_type'               => 'Si se habilita, al crear una nueva entidad de este tipo se le añadirá esta plantilla de atributos automáticamente.',\n        'is_disabled'               => 'Esta plantilla está deshabilitada.',\n        'is_enabled'                => 'Habilita esta plantilla para usarla en la campaña.',\n        'parent_attribute_template' => 'Esta plantilla de atributos puede ser descendiente de otra plantilla de atributos. Al aplicar una plantilla, se aplicará con todos sus descendientes.',\n    ],\n    'index'                 => [],\n    'lists'                 => [\n        'empty' => 'Crea plantillas para reutilizar atributos comunes en múltiples entidades.',\n    ],\n    'placeholders'          => [\n        'name'  => 'Nombre de la plantilla de atributos',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/es/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Error',\n            'rendering' => 'Ha habido un error al renderizar el plugin del marketplace. Para más información, ponte en contacto con el creador del plugin.',\n        ],\n    ],\n    'helpers'   => [],\n    'list'      => [\n        'sheets'    => 'Hojas de personaje',\n    ],\n    'pitch'     => 'Encuentra y añade hojas de personaje del :marketplace a una :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/es/auth.php",
    "content": "<?php\n\nreturn [\n    'banned'    => [\n        'permanent' => 'Has sido baneado permanentemente.',\n        'temporary' => '{1} Has sido baneado por :days dia.|[2,*] Has sido baneado por :days dias.',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Confirmar',\n        'error'     => 'Contraseña no válida, inténtalo de nuevo.',\n        'helper'    => 'Por favor confirma tu contraseña antes de continuar.',\n        'title'     => 'Confirmación de contraseña.',\n    ],\n    'continue'  => [\n        'facebook'  => 'Continuar con Facebook',\n        'google'    => 'Continuar con Google',\n        'x'         => 'Continuar con X',\n    ],\n    'failed'    => 'Los datos introducidos no coinciden con ningún usuario registrado.',\n    'helpers'   => [\n        'password'  => 'Mostrar/ocultar contraseña',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'Contraseña de un solo uso',\n            'email'     => 'Email',\n            'password'  => 'Contraseña',\n        ],\n        'no-account'            => '¿No tienes una cuenta?',\n        'or'                    => 'o bien',\n        'password_forgotten'    => '¿Olvidaste tu contraseña?',\n        'sign-up'               => 'Registrarse',\n        'submit'                => 'Acceder',\n        'title'                 => 'Acceder',\n    ],\n    'register'  => [\n        'already'   => '¿Ya tienes una cuenta? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Ya existe una cuenta asociada a este correo electrónico.',\n            'general_error'         => 'Ha ocurrido un error mientras se registraba la cuenta. Inténtalo de nuevo.',\n        ],\n        'fields'    => [\n            'email'     => 'Correo electrónico',\n            'name'      => 'Usuario',\n            'password'  => 'Contraseña',\n        ],\n        'log-in'    => 'Iniciar sesión',\n        'submit'    => 'Registrarse',\n        'title'     => 'Registrarse',\n        'tos'       => 'Al registrar una cuenta, usted acepta nuestros :terms y :privacy.',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Dirección de correo electronico',\n            'password'              => 'Contraseña',\n            'password_confirmation' => 'Confirma la contraseña',\n        ],\n        'send'      => 'Enviar enlace para restablecer la contraseña',\n        'submit'    => 'Restablecer contraseña',\n        'title'     => 'Restablecer contraseña',\n    ],\n    'tfa'       => [\n        'helper'    => 'La autenticación de dos factores está activada. Introduzca la contraseña de un solo uso (OTP) proporcionada por su aplicación de autenticación.',\n        'title'     => 'Autenticación de dos factores',\n    ],\n    'throttle'  => 'Demasiados intentos de acceso. Por favor inténtelo en :seconds segundos.',\n    'x-twitter' => 'X antes conocido como Twitter',\n];\n"
  },
  {
    "path": "lang/es/billing/information.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Actualizar información',\n    ],\n    'helper'    => 'Tu dirección comercial, número de IVA, etc., pueden añadirse a todos tus recibos.',\n    'title'     => 'Actualizar información de facturación',\n];\n"
  },
  {
    "path": "lang/es/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Descargar PDF',\n    ],\n    'description'   => 'Mostrando facturas de los últimos 24 meses.',\n    'empty'         => 'No se encontraron facturas',\n    'fields'        => [\n        'amount'    => 'Importe',\n        'date'      => 'Fecha',\n        'invoice'   => 'Factura',\n        'status'    => 'Estado',\n    ],\n    'paypal'        => 'Ten en cuenta que sólo los pagos realizados a través de Stripe y no a través de PayPal son visibles aquí.',\n    'status'        => [\n        'paid'      => 'Pagado',\n        'pending'   => 'Pendiente',\n    ],\n    'title'         => 'Historial de facturación',\n];\n"
  },
  {
    "path": "lang/es/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'Historial de facturación',\n    'overview'          => 'Resumen',\n    'payment-method'    => 'Método de pago',\n];\n"
  },
  {
    "path": "lang/es/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Método de pago',\n    'types' => [\n        'card'  => 'Tarjeta',\n    ],\n];\n"
  },
  {
    "path": "lang/es/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Personalizar la barra lateral',\n    ],\n    'create'            => [\n        'title' => 'Nuevo acceso directo',\n    ],\n    'destroy'           => [],\n    'edit'              => [\n        'title' => 'Acceso directo :name',\n    ],\n    'fields'            => [\n        'active'            => 'Activo',\n        'dashboard'         => 'Tablero',\n        'default_dashboard' => 'Cuadro de mandos por defecto',\n        'filters'           => 'Filtros',\n        'menu'              => 'Menú',\n        'position'          => 'Posición',\n        'random_type'       => 'Tipo de entidad aleatorio',\n        'selector'          => 'Configuración del acceso directo',\n        'target'            => 'Destino',\n    ],\n    'helpers'           => [\n        'active'            => 'Los accesos directos inactivos no aparecerán en la barra lateral.',\n        'css'               => 'Agrega una clase CSS que se añadirá al enlace del acceso directo en la barra lateral.',\n        'dashboard'         => 'Puedes hacer que un acceso directo lleve directamente a uno de los tableros personalizados de la campaña.',\n        'default_dashboard' => 'Enlace al panel de control predeterminado de la campaña. Es necesario seleccionar un panel de control personalizado.',\n        'entity'            => 'Configura este acceso directo para acceder directamente a una entidad. El campo de :tab controla qué pestaña estará seleccionada. El campo de :menu controla qué subpágina de la entidad se abrirá.',\n        'position'          => 'Usa este campo para controlar en qué orden ascendente aparecen los enlaces en el acceso directo.',\n        'random'            => 'Usa este campo para tener un acceso directo a una entidad aleatoria. Puedes filtrar el enlace para que solo vaya a un tipo específico de entidad.',\n        'selector'          => 'Configura adónde dirige este acceso directo cuando un usuario le hace clic en la barra lateral.',\n        'type'              => 'Configura este acceso directo para ir directamente a una lista de entidades. Para filtrar los resultados, copia las partes de la URL de la lista filtrada a partir del símbolo :? en el campo de :filter.',\n    ],\n    'index'             => [],\n    'lists'             => [\n        'empty' => 'Guarda marcadores de tus entidades más usadas o listas filtradas para un acceso más rápido.',\n    ],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=ciudad',\n        'menu'      => 'Subpágina del menú (usa la última parte de la url)',\n        'tab'       => 'Historia, Relaciones, Notas',\n    ],\n    'random_no_entity'  => 'No se ha encontrado ninguna entidad aleatoria.',\n    'random_types'      => [\n        'any'   => 'Cualquier entidad',\n    ],\n    'reorder'           => [\n        'success'   => 'Enlaces reordenados.',\n        'title'     => 'Reordenar los enlaces',\n    ],\n    'show'              => [],\n    'targets'           => [\n        'dashboard' => 'Uno de los paneles de la campaña',\n        'entity'    => 'Una sola entidad',\n        'random'    => 'Una entidad aleatoria',\n        'select'    => 'Elige una opción',\n        'type'      => 'Lista de entidades de un tipo/módulo específico',\n    ],\n    'visibilities'      => [\n        'is_active' => 'Mostrar el acceso directo en la barra lateral',\n    ],\n];\n"
  },
  {
    "path": "lang/es/bragi/backstory.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Escribe una breve historia de fondo del personaje inspirada en esta información. Adapta el tono y los detalles a los sistemas de juego y géneros seleccionados. Puedes incluir elementos como la apariencia del personaje, su origen, creencias, relaciones, metas, defectos o experiencias notables — lo que mejor se ajuste al personaje.',\n    'setup'     => [\n        'gender'    => 'Género: :gender',\n        'genres'    => 'Géneros: :genres',\n        'name'      => 'Nombre del personaje: :name',\n        'prompt'    => 'Prompt: \":prompt\"',\n        'pronouns'  => 'Pronombres: :pronouns',\n        'systems'   => 'Sistemas de juego: :systems',\n    ],\n    'system'    => 'Eres un narrador y escritor profesional de personajes para TTRPG. Creas historias de fondo inmersivas y emocionalmente resonantes para juegos de rol de mesa. Tu estilo se adapta al tono y la ambientación del juego. Normalmente escribes de 2 a 4 párrafos y hasta 400 palabras, entrelazando apariencia, historia, creencias, motivaciones y defectos.',\n];\n"
  },
  {
    "path": "lang/es/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'Generar',\n        'insert'    => 'Usar',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'Para acceder a esta función, debes tener una suscripción Wyvern o Elemental.',\n        'out-of-tokens' => '¡Te has quedado sin tokens! Obtendrás más en :date.',\n    ],\n    'here'          => 'aquí',\n    'intro'         => '¡Hola! Soy :name, una IA que está aquí para ayudarte a generar historias de origen para tus personajes en Kanka. Puedes aprender más sobre mí :here.',\n    'kankappy'      => 'Es discípulo de Kankappy en secreto.',\n    'loading'       => 'Por favor espera, estoy pensando mucho y puede tomarme hasta un minuto!',\n    'placeholders'  => [\n        'prompt'    => 'Proporciona un mensaje que se transformará en una historia de origen.',\n    ],\n    'token-limit'   => 'Actualmente tienes :amount tokens. Cada vez que genero una historia de origen, se consume un token ¡Úsalos sabiamente!',\n];\n"
  },
  {
    "path": "lang/es/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'helper'    => 'Agrega información meteorológica que aparecerá en el calendario.',\n        'success'   => 'Clima añadido.',\n        'title'     => 'Nuevo fenómeno climático',\n    ],\n    'destroy'       => [\n        'success'   => 'Clima eliminado.',\n    ],\n    'edit'          => [\n        'success'   => 'Clima actualizado.',\n        'title'     => 'Actualizar clima',\n    ],\n    'fields'        => [\n        'effect'        => 'Efecto',\n        'name'          => 'Nombre',\n        'precipitation' => 'Precipitación',\n        'temperature'   => 'Temperatura',\n        'weather'       => 'Clima',\n        'wind'          => 'Viento',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Tormentas',\n            'cloud'                 => 'Nublado',\n            'cloud-rain'            => 'Lluvioso',\n            'cloud-showers-heavy'   => 'Chubascos',\n            'cloud-sun'             => 'Nublado y soleado',\n            'cloud-sun-rain'        => 'Nubes, sol y lluvia',\n            'meteor'                => 'Meteorito',\n            'smog'                  => 'Neblina',\n            'snowflake'             => 'Nieve',\n            'sun'                   => 'Soleado',\n            'wind'                  => 'Ventoso',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Fenómeno natural o mágico',\n        'name'          => 'Texto opcional personalizado del clima',\n        'precipitation' => 'Cantidad de agua',\n        'temperature'   => 'Máxima y mínima diaria',\n        'wind'          => 'Velocidad del viento',\n    ],\n];\n"
  },
  {
    "path": "lang/es/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Añadir época',\n        'add_intercalary'   => 'Añadir días intercalares',\n        'add_month'         => 'Añadir mes',\n        'add_moon'          => 'Añadir luna',\n        'add_reminder'      => 'Añadir recordatorio',\n        'add_season'        => 'Añadir estación',\n        'add_weather'       => 'Añadir fenómeno climático',\n        'add_week'          => 'Añadir semana con nombre',\n        'add_weekday'       => 'Añadir día de la semana',\n        'add_year'          => 'Añadir año con nombre',\n        'set_today'         => 'Poner como día actual',\n        'today'             => 'Hoy',\n        'update_weather'    => 'Actualizar clima',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Ocurre cada año',\n    ],\n    'create'        => [\n        'title' => 'Nuevo Calendario',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Fecha del calendario actualizada.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Evento creado en el calendario',\n            'title'     => 'Añadir evento del calendario a :name',\n        ],\n        'destroy'   => 'Evento eliminado del calendario :name',\n        'edit'      => [\n            'success'   => 'Evento del calendario actualizado',\n            'title'     => 'Actualizar evento del calendario de :name',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Selección de entidad inválida',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Estás editando un recordatorio del calendario :calendar.',\n        ],\n        'success'   => 'Evento \\':event\\' añadido al calendario.',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} Se ha eliminado :count evento.|[2,*] Se han eliminado :count eventos.',\n            'patch'     => '{1} Se ha actualizado :count evento.|[2,*] Se han actualizado :count eventos.',\n        ],\n        'end'       => '(fin)',\n        'filters'   => [\n            'show_after'    => 'Mostrar hoy y después',\n            'show_all'      => 'Mostrar todos',\n            'show_before'   => 'Mostrar antes de hoy',\n        ],\n        'start'     => '(inicio)',\n    ],\n    'fields'        => [\n        'comment'           => 'Comentario',\n        'current_day'       => 'Día actual',\n        'current_month'     => 'Mes actual',\n        'current_year'      => 'Año actual',\n        'date'              => 'Fecha actual',\n        'day'               => 'Día',\n        'default_layout'    => 'Diseño predeterminado',\n        'format'            => 'Formato',\n        'is_incrementing'   => 'Fecha incremental',\n        'is_recurring'      => 'Recurrente',\n        'leap_year'         => 'Años bisiestos',\n        'leap_year_amount'  => 'Añadir días',\n        'leap_year_month'   => 'Mes',\n        'leap_year_offset'  => 'Cada',\n        'leap_year_start'   => 'Año bisiesto',\n        'length'            => 'Duración del evento',\n        'length_days'       => ':count day|:count days',\n        'month'             => 'Mes',\n        'months'            => 'Meses',\n        'moons'             => 'Lunas',\n        'parameters'        => 'Parámetros',\n        'recurring_until'   => 'Recurrente hasta el año',\n        'reset'             => 'Reinicio semanal',\n        'seasons'           => 'Estaciones',\n        'show_birthdays'    => 'Mostrar cumpleaños',\n        'skip_year_zero'    => 'Saltar Año Cero',\n        'start_offset'      => 'Retraso inicial',\n        'suffix'            => 'Sufijo',\n        'week_names'        => 'Nombres de las semanas',\n        'weekdays'          => 'Días de la semana',\n        'year'              => 'Año',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Seleccione qué diseño debe usar el calendario de forma predeterminada.',\n        'format'            => 'Añadir formato de fecha personalizado para entidades del calendario.',\n        'month_type'        => 'Los meses intercalares no usan los días de la semana, pero influyen en las lunas y las estaciones.',\n        'moon_offset'       => 'De forma predeterminada, la primera luna llena aparece el primer día del año 0. Cambiar el desplazamiento alterará el cuando se muestra la primera luna llena. Este valor puede ser negativo (hasta la duración del primer mes) o positivo (hasta la duración del primer mes).',\n        'start_offset'      => 'Por defecto, el calendario empieza en el primer día de la semana del año 0. En este campo puedes cambiar dónde se situará el primer día del calendario.',\n    ],\n    'hints'         => [\n        'event_length'      => 'Cuánto dura el evento. Un evento no puede durar más de dos meses.',\n        'is_incrementing'   => 'Si está activado, se incrementará la fecha actual automáticamente a las 00:00h UTC.',\n        'leap_year'         => 'Configure los años bisiestos para el calendario.',\n        'months'            => 'Tu calendario debe tener al menos 2 meses.',\n        'moons'             => 'Si añades lunas, aparecerán en el calendario cada luna llena y nueva. Si el período entre estas es mayor que 10 días, también se mostrarán los cuartos creciente y menguante.',\n        'parent_calendar'   => 'Los calendarios incluyen los recordatorios y efectos climáticos de su calendario superior.',\n        'reset'             => 'Empezar siempre el siguiente mes o año en el primer día de la semana.',\n        'seasons'           => 'Crea estaciones en tu calendario estableciendo cuándo empieza cada una. Kanka se encargará del resto.',\n        'show_birthdays'    => 'Muestra los cumpleaños anuales de los personajes que tienen un recordatorio de cumpleaños en este calendario hasta la fecha de su muerte.',\n        'skip_year_zero'    => 'De forma predeterminada, el primer año del calendario es el año cero. Habilita esta opción para omitir el año cero.',\n        'weekdays'          => 'Escribe los nombres de los días de la semana. Se requiere un mínimo de 2 días.',\n        'weeks'             => 'Define los nombres para las semanas más importantes de tu calendario.',\n        'years'             => 'Algunos años son tan importantes que tienen su propio nombre.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month'     => 'Mes',\n        'monthly'   => 'Mensual por defecto',\n        'year'      => 'Año',\n        'yearly'    => 'Anual por defecto',\n    ],\n    'lists'         => [\n        'empty' => 'Crea un calendario para seguir fechas, festivales o eventos dentro del juego a lo largo del tiempo.',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Conmutador de año',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Intercalar',\n        'standard'      => 'Estándar',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Luna llena',\n                'fullmoon_name' => 'Luna :moon llena',\n                'month'         => 'Mensual',\n                'newmoon'       => 'Luna nueva',\n                'newmoon_name'  => 'Luna :moon nueva',\n                'none'          => 'Ninguna',\n                'unnamed_moon'  => 'Luna :number',\n                'year'          => 'Anual',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Ninguno',\n            'month' => 'Mensual',\n            'year'  => 'Anual',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Días intercalares',\n        'leap_year'     => 'Año bisiesto',\n        'months'        => 'Meses',\n        'weeks'         => 'Semanas',\n        'years'         => 'Años con nombre',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Días de duración',\n            'month'     => 'Al final de qué mes',\n            'name'      => 'Nombre de la intercalación',\n        ],\n        'month'         => [\n            'alias' => 'Alias del mes',\n            'length'=> 'Número de días',\n            'name'  => 'Nombre del mes',\n            'type'  => 'Tipo',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Luna llena cada... días',\n            'name'      => 'Nombre de la luna',\n            'offset'    => 'Retraso de la primera luna llena',\n        ],\n        'seasons'       => [\n            'day'   => 'Día inicial',\n            'month' => 'Mes inicial',\n            'name'  => 'Nombre de la estación',\n        ],\n        'weeks'         => [\n            'name'      => 'Nombre de la semana',\n            'number'    => 'Número',\n        ],\n        'year'          => [\n            'name'      => 'Nombre del año',\n            'number'    => 'Año',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Color',\n        'comment'           => 'Cumpleaños, Festival, Solsticio',\n        'date'              => 'Fecha actual',\n        'leap_year_amount'  => 'Número de días añadidos en un año bisiesto',\n        'leap_year_month'   => 'Mes en que se añaden los días',\n        'leap_year_offset'  => 'Cada cuántos años es un año bisiesto',\n        'leap_year_start'   => 'Primer año que es un año bisiesto',\n        'length'            => 'Días que dura el evento',\n        'months'            => 'Número de meses en un año',\n        'recurring_until'   => 'Último año recurrente (dejar vacío para que sea eterno)',\n        'seasons'           => 'Número de estaciones',\n        'suffix'            => 'Sufijo de la era actual (AC, BC)',\n        'type'              => 'Tipo de calendario',\n        'weekdays'          => 'Número de días de la semana',\n    ],\n    'show'          => [\n        'missing_details'       => 'Este calendario no se puede mostrar. Los calendarios necesitan un mínimo de 2 meses y 2 días semanales para renderizarse correctamente.',\n        'moon_1first_quarter'   => ':moon cuarto creciente',\n        'moon_full'             => ':moon luna llena',\n        'moon_last_quarter'     => ':moon cuarto menguante',\n        'moon_new'              => ':moon luna nueva',\n        'tabs'                  => [\n            'events'    => 'Eventos del calendario',\n            'weather'   => 'Clima',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'De hoy en adelante',\n        'before'=> 'Hasta hoy',\n    ],\n    'validators'    => [\n        'format'        => 'El formato de la fecha es inválido.',\n        'moon_offset'   => 'El desplazamiento de la primera luna llena de la luna no puede ser mayor que la duración del primer mes del calendario.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Los recordatorios que abarcan varios años sólo son visibles en los dos primeros años. Más información en nuestra :documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/callouts.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscription'  => 'Aprende más sobre las suscripciones',\n        'upgrade'       => 'Mejorar a premium',\n    ],\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Mejorar :campaign',\n            'superboost'    => 'Supermejorar :campaign',\n        ],\n        'learn-more'    => 'Que',\n        'limitation'    => '¿Qué son las mejoras?',\n        'limitations'   => [\n            'boosted'       => 'Para acceder a esta función es necesario mejorar la campaña.',\n            'superboosted'  => 'Para acceder a esta función es necesario supermejorar la campaña.',\n        ],\n        'multiple'      => 'Para acceder a estas funciones es necesario mejorar la campaña.',\n        'pitches'       => [\n            'element-class' => 'Dale una clase CSS personalizada a este elemento con una :boosted-campaign.',\n            'icon'          => 'Desbloquea millones de iconos personalizados de FontAwesome con una :boosted-campaign.',\n        ],\n        'titles'        => [\n            'boosted'       => 'Función de mejora',\n            'superboosted'  => 'Función de supermejora',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => '¿Qué son las campañas premium?',\n        'limitation'    => 'Para acceder a esta función, es necesario activar las funciones Premium.',\n        'multiple'      => 'Para acceder a estas funciones, es necesario habilitar las funciones premium para :campaign.',\n        'title'         => 'Característica de campaña Premium',\n        'unlock'        => 'Desbloquea funciones premium para :campaña',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Suscríbete para desbloquear la carga de archivos de tamaños de hasta :max MB.',\n        'share-booster' => 'Mejora :campaign para aumentar el tamaño de maximo de carga de archivos para todos los miembros de la campaña.',\n        'share-premium' => 'Aumenta el tamaño de subida de archivos para todos los miembros de la campaña con una campaña premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => '¡Felicidades!',\n    'connections'       => '{0} Ninguna conexión creada|{1} Una conexión creada|[2,*] :amount conexiones creadas',\n    'created'           => '{0} No has creado :plural|{1} Has creado :amount :singular|[2,*] Has creado :amount :plural',\n    'dead'              => '{0} Ningún asesinato misterioso|{1} Un asesinato misterioso|[2,*] :amount asesinatos misteriosos',\n    'goal'              => 'Meta :number',\n    'goal_reached'      => 'Logro desbloqueado',\n    'level'             => 'nivel :number',\n    'markers'           => '{0} Ningún marcador de mapa creado|{1} Un marcador de mapa creado|[2,*] :amount marcadores de mapa creados',\n    'painter'           => '{0} Ningún tema creado|{1} Un tema creado|[2,*] :amount temas creados',\n    'pitch'             => 'Los logros de campaña son una forma divertida de celebrar hitos en tu viaje de creación de mundos. Sigue el progreso, motiva a tus jugadores y muestra tus logros con una campaña premium.',\n    'plugins'           => '{0} Ningún plugin instalado|{1} Un plugin instalado|[2,*] :amount plugins instalados',\n    'remaining'         => [\n        'generic'   => 'Más y se desbloqueará el siguiente nivel.',\n    ],\n    'spotlight'         => [\n        'active'    => [\n            'cta'   => 'Ver destacado',\n        ],\n        'private'   => [\n            'cta'       => 'Revisar configuración pública',\n            'helper'    => 'Haz pública tu campaña para que pueda ser seleccionada como campaña destacada.',\n        ],\n        'public'    => [\n            'cta'       => 'Aprende cómo funciona la campaña destacada',\n            'helper'    => 'Las campañas seleccionadas aparecen como campañas destacadas en Kanka y en el blog.',\n        ],\n    ],\n    'spotlighted'       => '{0} Aún no es campaña destacada |[1,*] Campaña destacada',\n    'tagged'            => '{0} Ninguna entidad etiquetada|{1} Una entidad etiquetada|[2,*] :amount entidades etiquetadas',\n    'titles'            => [\n        'calendars'     => 'Guardián del tiempo',\n        'characters'    => 'Proveedor de nombres',\n        'connections'   => 'Cupido',\n        'creatures'     => 'Criador',\n        'dead'          => 'Asesino',\n        'events'        => 'Maestro del saber',\n        'families'      => 'Planificación familiar',\n        'locations'     => 'Constructor',\n        'markers'       => 'Cartógrafo',\n        'organisations' => 'Fusiones y adquisiciones',\n        'plugins'       => 'Conocedor de los plugins',\n        'quests'        => 'Mente maestra',\n        'spotlighted'   => 'Destacada',\n        'tags'          => 'Bajo control',\n        'themes'        => 'Pintor',\n    ],\n    'tutorial'          => 'Los logros registran acciones destacadas dentro de esta campaña, como crear entidades o usar funciones clave. Son solo informativos y se actualizan automáticamente a medida que exploras y construyes.',\n];\n"
  },
  {
    "path": "lang/es/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'accept'    => 'Aceptar',\n        'reject'    => 'Rechazar',\n    ],\n    'apply'             => [\n        'apply'         => 'Solicitar',\n        'help'          => 'Esta campaña está abierta a nuevos miembros. Puedes solicitar unirte a ella mediante este formulario. Te notificaremos cuando los administradores de la campaña revisen tu solicitud.',\n        'remove_text'   => 'tu solicitud',\n        'success'       => [\n            'apply' => 'Tu solicitud se ha guardado. Puedes cambiarla o cancelarla en cualquier momento. Te notificaremos cuando los administradores de la campaña la revisen.',\n            'remove'=> 'Se ha eliminado tu solicitud.',\n            'update'=> 'Se ha actualizado tu solicitud. Puedes cambiarla o cancelarla en cualquier momento. Te notificaremos cuando los administradores de la campaña la revisen.',\n        ],\n        'title'         => 'Unirse a :name',\n    ],\n    'dashboard_widget'  => [\n        'add'               => 'Agregar widget',\n        'has_widget'        => 'El widget de unión está en el tablero.',\n        'has_widget_help'   => 'El tablero de tu campaña muestra el widget de unión a jugadores potenciales.',\n        'no_widget'         => 'Sin widget de unión en el tablero.',\n        'no_widget_help'    => 'Tu campaña está abierta pero no lo muestra en el tablero. Agrega un widget para que los jugadores puedan descubrirla y solicitar unirse.',\n        'success'           => 'Widget de unión agregado al tablero.',\n        'title'             => 'Widget del tablero',\n    ],\n    'errors'            => [],\n    'experience'        => [\n        'intermediate'  => 'Intermedio (Ha jugado algunas veces)',\n        'new'           => 'Principiante (Primera vez)',\n        'veteran'       => 'Veterano (Años de experiencia)',\n    ],\n    'fields'            => [\n        'additional_notes'      => 'Algo más',\n        'application'           => 'Solicitud',\n        'availability_days'     => 'Días disponibles',\n        'character_concept'     => 'Concepto del personaje',\n        'experience_level'      => 'Nivel de experiencia',\n        'external_link'         => 'Hoja de personaje / Enlace',\n        'intro'                 => 'Introducción de la campaña',\n        'new_application'       => 'Solicitud de nuevo jugador',\n        'player_count'          => 'Número de jugadores',\n        'playstyle_tags'        => 'Estilos de juego',\n        'pref_rp_combat'        => 'Balance de enfoque',\n        'pref_tone'             => 'Preferencia de tono',\n        'reason'                => 'Motivo de aprobación / rechazo',\n        'schedule'              => 'Horario',\n        'schedule-placeholder'  => 'Todos los viernes a las 7 PM',\n        'time_end'              => 'Hasta',\n        'time_start'            => 'Desde',\n        'timezone'              => 'Zona horaria',\n    ],\n    'filters'           => [\n        'all'       => 'Mostrar todo',\n        'approved'  => 'Mostrar aprobados',\n        'pending'   => 'Mostrar pendientes',\n        'rejected'  => 'Mostrar rechazados',\n        'title'     => 'Filtros',\n    ],\n    'headers'           => [\n        'availability'  => 'Disponibilidad y horario',\n        'preferences'   => 'Preferencias de estilo de juego',\n    ],\n    'helpers'           => [\n        'applications_closed'   => 'Tu campaña es pública, pero los nuevos jugadores no pueden enviar solicitudes hasta que establezcas el estado en \"Abierto\".',\n        'availability_days'     => 'Selecciona los días en que generalmente estás disponible para jugar.',\n        'experience_level'      => '¿Qué tan familiarizado estás con este sistema de juego en particular?',\n        'external_link'         => 'Enlace a D&D Beyond, Google Docs u otras hojas de personaje externas.',\n        'fill_setup'            => 'Por favor, completa el formulario de configuración de campaña pública para poder abrir tu campaña al público.',\n        'filters_incomplete'    => 'Tu campaña está abierta para solicitudes, pero aún no has terminado de configurar los filtros (como sistema, zona horaria o etiquetas). Completarlos facilitará mucho que los jugadores adecuados te encuentren.',\n        'modal'                 => 'Una campaña que está abierta a solicitudes y al público permite que los usuarios soliciten unirse a la campaña.',\n        'no_applications_title' => 'No se han encontrado aplicaciones',\n        'no_applications_v2'    => 'Actualmente no hay solicitudes pendientes para unirse a la campaña, ¡pero puedes ayudar a los jugadores a encontrar su próxima gran aventura! La información detallada de la campaña y los filtros de búsqueda facilitan que los usuarios descubran e interesen en tu historia.',\n        'reason'                => 'Si se proporciona, se notificará al solicitante con este motivo.',\n        'role'                  => 'Si se aprueba, el rol al que se añade el aplicante.',\n    ],\n    'labels'            => [\n        'casual'            => 'Casual / Informal',\n        'combat_focused'    => 'Orientado al combate',\n        'rp_heavy'          => 'Alto en rol',\n        'serious'           => 'Serio / Inmersivo',\n    ],\n    'open'              => [\n        'closed'    => 'Campaña cerrada',\n        'open'      => 'Campaña abierta',\n        'title'     => 'Campaña abierta',\n    ],\n    'placeholders'      => [\n        'additional_notes'  => 'Comentarios adicionales o preguntas específicas.',\n        'character_concept' => 'Describe brevemente como quién quieres jugar, su trasfondo y cómo encaja en el mundo.',\n        'intro'             => 'Una breve explicación de qué trata tu campaña, mostrada en la parte superior del formulario de solicitud.',\n        'note'              => 'Escribe tu solicitud para unirte a la campaña',\n        'player_count'      => '4-6 jugadores',\n        'reason'            => 'Tus razones',\n    ],\n    'public'            => [\n        'private'   => 'La campaña es privada.',\n        'public'    => 'La campaña es pública.',\n        'title'     => 'Campaña pública',\n    ],\n    'setup'             => [\n        'done'                  => 'Configuración de campaña pública completada.',\n        'prioritise'            => 'Priorizar esta campaña',\n        'prioritise_conflict'   => 'Solo puedes priorizar una campaña a la vez. Desactiva la priorización en :campaign primero.',\n        'prioritise_help'       => 'Las campañas priorizadas aparecen en la parte superior de la lista de campañas públicas, antes que otras campañas abiertas.',\n        'prioritise_upgrade'    => 'Esta función es exclusiva para suscriptores :link.',\n        'prioritised'           => 'Campaña priorizada',\n        'setup'                 => 'Configura los ajustes de campaña pública para abrirla al público.',\n        'success'               => 'Configuración de campaña guardada. Una vez que todos los campos estén completos, la campaña puede abrirse al público.',\n        'success_complete'      => '¡La campaña puede abrirse al público!',\n        'title'                 => 'Configuración de campaña pública',\n        'tutorial'              => 'Solo cuando todos estos campos estén completos se puede abrir la campaña al público.',\n    ],\n    'statuses'          => [],\n    'timezone'          => 'Zona horaria e idioma',\n    'title'             => 'Solicitudes de ingreso',\n    'toggle'            => [\n        'closed'        => 'Cerrada a solicitudes',\n        'label'         => 'Estado',\n        'open'          => 'Abierta a solicitudes',\n        'success'       => 'Actualización del estado de la solicitud para la campaña.',\n        'success_open'  => 'La campaña es ahora pública y los usuarios pueden solicitar unirse.',\n        'title'         => 'Estado de la solicitud',\n    ],\n    'tutorial'          => 'Las solicitudes de campaña permiten que las personas pidan acceso a esta campaña. Los solicitantes envían un formulario breve y los administradores de la campaña pueden revisar, aceptar o rechazar cada solicitud. Los usuarios aprobados se agregan a la campaña con el rol que asignes durante la revisión.',\n    'update'            => [\n        'approve'   => 'Selecciona el rol que se asignará al usuario en tu campaña.',\n        'approved'  => 'Solicitud aprobada.',\n        'reject'    => 'Escribe un mensaje opcional al usuario explicando el motivo del rechazo.',\n        'rejected'  => 'Solicitud rechazada',\n    ],\n    'warnings'          => [\n        'applications_closed'   => 'Las solicitudes están cerradas actualmente.',\n        'filters_incomplete'    => 'Los filtros de la campaña están incompletos.',\n    ],\n    'weekdays'          => [\n        'fri'   => 'Vie',\n        'mon'   => 'Lun',\n        'sat'   => 'Sáb',\n        'sun'   => 'Dom',\n        'thu'   => 'Jue',\n        'tue'   => 'Mar',\n        'wed'   => 'Mié',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'      => 'Construye visualmente un tema para la campaña con esta interfaz. Desplazate hacia abajo para ver cómo afectarían los cambios a varios elementos de la campaña. Cuando se selecciona un color, automáticamente se selecciona un color \"de contraste\" para colorear el texto. Más información sobre tematización en nuestra documentación :docs.',\n    'pitch'     => 'Psst, si lo único que quieres es cambiar algunos de los colores de la campaña, tenemos un constructor de temas 😉',\n    'pitch-go'  => 'Llévame al constructor de temas',\n    'reset'     => 'Reinicio del estilo del constructor de temas.',\n    'success'   => 'Estilo del constructor de temas guardado.',\n    'title'     => 'Creador de temas',\n];\n"
  },
  {
    "path": "lang/es/campaigns/categories.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'permission-disabled'   => 'Esta categoría está desactivada.',\n    ],\n    'helpers'   => [\n        'aliases'   => 'Agrega alias e identidades secretas a las entradas del mundo.',\n        'media'     => 'Sube documentos multimedia (imágenes, PDFs, audio) y enlaces externos a las entradas.',\n    ],\n    'tab'       => 'Categorías',\n];\n"
  },
  {
    "path": "lang/es/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Cabecera del tablero actualizada.',\n        'title'     => 'Actualizar cabecera del tablero',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Añadir nueva imagen por defecto',\n    ],\n    'call-to-action'    => 'Sube una miniatura personalizada para todos los personajes, ubicaciones u otras entidades de la campaña. Estas imágenes se muestran en varias listas.',\n    'create'            => [\n        'error'     => 'Error al guardar las nuevas imágenes por defecto. ¿Has olvidado añadir un :type?',\n        'helper'    => 'Sube una imagen que se usará como miniatura predeterminada para las entidades del módulo seleccionado.',\n        'success'   => 'Imagen por defecto para :type creada.',\n        'title'     => 'Nueva imagen por defecto',\n    ],\n    'destroy'           => [\n        'success'   => 'Imagen por defecto para :type eliminada.',\n    ],\n    'empty'             => 'Actualmente, ningún módulo tiene una miniatura predeterminada configurada.',\n    'helper'            => 'Se usa para todas las entidades de este módulo que no tengan imagen.',\n    'index'             => [],\n    'reset'             => [\n        'helper'    => '¿Estás seguro de que deseas eliminar las imágenes predeterminadas de todos los módulos de la campaña?',\n        'success'   => 'Las imágenes predeterminadas de todos los módulos se eliminaron correctamente.',\n        'title'     => 'Restablecer imágenes predeterminadas',\n        'warning'   => 'Esta acción es permanente y no se puede deshacer.',\n    ],\n    'title'             => 'Imágenes predeterminadas',\n    'tutorial'          => 'Establece imágenes predeterminadas para las entidades sin imágenes personalizadas. Estas miniaturas aparecen de inmediato en toda la campaña y mantienen las listas visualmente consistentes.',\n];\n"
  },
  {
    "path": "lang/es/campaigns/defaults.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'character_personality_visibility'  => 'Visibilidad predeterminada de la personalidad del personaje',\n        'connections'                       => 'Vista de conexiones de la entidad',\n        'connections_mode'                  => 'Estilo del mapa de conexiones',\n        'descendants'                       => 'Filtrado predeterminado de sublistas',\n        'entity_privacy'                    => 'Visibilidad de nuevas entidades',\n        'gallery_visibility'                => 'Visibilidad predeterminada de imágenes de la galería',\n        'post_collapsed'                    => 'Diseño de nuevas publicaciones',\n        'private_mention_visibility'        => 'Menciones privadas de entidades',\n        'related_visibility'                => 'Visibilidad de contenido relacionado',\n    ],\n    'helpers'   => [\n        'character_visibility'          => 'Establece la visibilidad de los rasgos de personalidad al crear personajes.',\n        'connections'                   => 'Elige si las páginas de conexiones de entidades muestran un mapa visual o una lista de forma predeterminada.',\n        'connections_mode'              => 'Establece el estilo de diseño predeterminado para los mapas de conexiones (disponible con premium).',\n        'descendants'                   => 'Al ver sublistas de entidades (como los personajes de una ubicación), muestra solo los descendientes directos o todos los descendientes.',\n        'display'                       => 'Establece las opciones de visualización predeterminadas para las páginas de entidades.',\n        'entity'                        => 'Controla qué visibilidad aplica Kanka automáticamente al nuevo contenido.',\n        'entity_privacy'                => 'Establece la visibilidad de personajes, ubicaciones y otros elementos recién creados.',\n        'gallery_visibility'            => 'Valor de visibilidad predeterminado al subir imágenes a la galería.',\n        'post_collapsed'                => 'Al crear publicaciones en entidades, establece si la publicación aparece colapsada o expandida.',\n        'privacy'                       => 'Establece las visibilidades predeterminadas para el nuevo contenido. Estos ajustes se aplican al crear contenido nuevo y pueden modificarse en elementos individuales.',\n        'private_mention_visibility'    => 'Cuando mencionas una entidad privada en contenido visible, controla si el nombre de la entidad se muestra u oculta.',\n        'related_visibility'            => 'Controla la visibilidad de publicaciones, atributos y conexiones añadidos a las entidades.',\n    ],\n    'sections'  => [\n        'display'   => 'Valores predeterminados de visualización de entidades',\n        'entity'    => 'Valores predeterminados de entidades',\n        'media'     => 'Valores predeterminados de medios',\n        'mention'   => 'Comportamiento de menciones',\n    ],\n    'tutorial'  => 'Agiliza la creación de contenido con valores predeterminados inteligentes. Elige configuraciones de visibilidad predeterminadas para entidades, publicaciones, imágenes y otros contenidos. Estas preferencias se aplicarán automáticamente al crear nuevo contenido, ahorrándote tiempo y manteniendo tu campaña organizada.',\n    'update'    => [\n        'success'   => 'Valores predeterminados de la campaña actualizados.',\n    ],\n    'values'    => [\n        'collapsed'     => [\n            'collapsed' => 'Colapsado',\n            'default'   => 'Predeterminado',\n            'expanded'  => 'Expandido',\n        ],\n        'connections'   => [\n            'explorer'  => 'Mapa de conexiones (premium)',\n            'list'      => 'Interfaz de lista',\n        ],\n        'descendants'   => [\n            'all'       => 'Mostrar todos los descendientes de forma predeterminada',\n            'direct'    => 'Mostrar descendientes directos de forma predeterminada',\n        ],\n        'mentions'      => [\n            'private'   => 'Ocultar nombre del objetivo',\n            'visible'   => 'Mostrar nombre del objetivo',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/delete.php",
    "content": "<?php\n\nreturn [\n    'backup'            => 'respaldo',\n    'confirm'           => 'Si estás seguro de que quieres eliminar :campaign de forma permanente, escribe :code en el campo de abajo.',\n    'confirm-button'    => 'Eliminar :name permanentemente',\n    'helper'            => 'Eliminar una campaña es una acción permanente que no puede revertirse. Esto eliminará todos los datos relacionados con la campaña de nuestros servidores, incluidas las imágenes y los recursos. Recomendamos hacer un :backup antes de continuar.',\n    'issue'             => 'El siguiente problema debe solucionarse antes de poder eliminar la campaña.',\n    'members'           => 'Todos los demás miembros deben ser expulsados de la campaña.',\n    'success'           => 'Se ha eliminado a :name de forma permanente.',\n    'title'             => 'Eliminación',\n];\n"
  },
  {
    "path": "lang/es/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'download'  => 'Descargar',\n        'export'    => 'Exportar los datos de la campaña',\n    ],\n    'confirm'   => [\n        'notification'  => 'Los miembros con el rol de :admin serán notificados cuando la exportación esté lista para descargar.',\n        'title'         => 'Confirmación de exportación',\n        'type'          => 'Tipo de exportación',\n        'warning'       => 'Estás a punto de exportar los datos de la campaña. Este proceso puede llevar mucho tiempo dependiendo del tamaño de la campaña. Puedes seguir utilizando Kanka mientras nuestros servidores generan la exportación.',\n    ],\n    'errors'    => [\n        'limit'     => 'La campaña ya se ha exportado una vez hoy. Vuelva a intentarlo mañana.',\n        'premium'   => 'La exportación en Markdown es una función exclusiva de las campañas premium.',\n    ],\n    'expired'   => 'Enlace expirado',\n    'helpers'   => [\n        'json'      => 'Para copias de seguridad y restauración - puede usarse para la importación de campaña.',\n        'markdown'  => 'Para compartir y leer - formato legible para personas.',\n        'premium'   => 'Disponible solo para campañas premium.',\n    ],\n    'progress'  => 'Progreso',\n    'size'      => 'Tamaño',\n    'status'    => [\n        'failed'    => 'Fallida',\n        'finished'  => 'Terminada',\n        'running'   => 'Ejecutándose',\n        'scheduled' => 'Programada',\n    ],\n    'success'   => 'Se está preparando la exportación de la campaña. Recibirás una notificación en Kanka cuando esté lista para descargar.',\n    'title'     => 'Exportación de campaña',\n    'type'      => 'Tipo',\n    'types'     => [\n        'json'  => 'JSON',\n        'md'    => 'Markdown',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close'         => 'Cerrar',\n        'file-link'     => 'Enlace al archivo',\n        'focus_point'   => 'Establecer punto de enfoque',\n        'image-link'    => 'Enlace a la imagen',\n        'reset_focus'   => 'Restablecer el punto de enfoque',\n        'save'          => 'Guardar',\n        'upgrade'       => 'Ampliar el espacio de almacenamiento',\n    ],\n    'breadcrumb'    => 'Galería',\n    'bulk'          => [\n        'destroy'   => [\n            'confirm'   => '¿Estás seguro de que quieres eliminar permanentemente los elementos seleccionados? Esta acción no se puede deshacer.',\n            'success'   => '{0}Ningún archivo eliminado.|{1}Un archivo eliminado.|{2,*}:count archivos eliminados.',\n        ],\n    ],\n    'cta'           => 'Gestiona y reutiliza las imágenes a lo largo de la campaña.',\n    'destroy'       => [\n        'folder'    => 'Carpeta :name eliminada.',\n        'success'   => 'Imagen :name borrada.',\n    ],\n    'errors'        => [\n        'max'           => 'Por favor, sólo seleccione hasta :count archivos a la vez.',\n        'permissions'   => 'A tus roles de campaña les falta el permiso :permission para poder subir imágenes a la galería de la campaña.',\n        'storage'       => 'No hay espacio suficiente para almacenar las imágenes seleccionadas. Espacio de almacenamiento disponible: :available.',\n    ],\n    'fields'        => [\n        'created_by'            => 'Subida por',\n        'details'               => 'Detalles',\n        'ext'                   => 'Ext',\n        'file_type'             => 'Tipo de archivo',\n        'folder'                => 'Carpeta',\n        'image_mentioned_in'    => '{0} Esta imagen no se menciona en ninguna de las entidades de la campaña.|{1} Mencionada en una entrada/post.|[2,*] mencionada en :count entradas/posts.',\n        'image_used_in'         => '{1}Se usa como la imagen de una entidad.|[2,*]Se usa como la imagen de :count entidades.',\n        'link'                  => 'Enlace',\n        'name'                  => 'Nombre',\n        'size'                  => 'Tamaño',\n        'unused'                => 'No se utiliza en ninguna parte',\n        'used_in'               => 'Utilizado en',\n    ],\n    'focus'         => [\n        'locked'    => 'Para fijar el punto de enfoque de una imagen se necesita una campaña premium.',\n        'removed'   => 'Enfoque de la imagen eliminado.',\n        'updated'   => 'Enfoque de la imagen actualizado.',\n    ],\n    'new_folder'    => [\n        'title' => 'Nueva carpeta',\n    ],\n    'no_folder'     => 'Sin carpeta',\n    'pitch'         => 'Sube imágenes a la galería de la campaña directamente desde el editor de texto.',\n    'placeholders'  => [\n        'search'    => 'Buscar nombre de imagen...',\n    ],\n    'storage'       => [\n        'of'    => 'de',\n        'title' => 'Almacenamiento',\n    ],\n    'title'         => 'Galería de la campaña :campaign',\n    'update'        => [\n        'folder'    => 'Carpeta modificada.',\n        'success'   => 'Imagen modificada.',\n    ],\n    'uploader'      => [\n        'add'           => 'Añadir nueva',\n        'new_folder'    => 'Nueva carpeta',\n        'or'            => 'o',\n        'select_file'   => 'Selecciona un archivo',\n        'well'          => 'Suelta aquí el archivo a subir',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/import.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'import'    => 'Subir la exportación',\n    ],\n    'csv'               => [\n        'continue'          => 'Continuar',\n        'fields_helper'     => 'Selecciona una columna para asignar a cada uno de los campos completables de la entrada.',\n        'no_preview'        => 'No hay datos de vista previa disponibles',\n        'preview'           => 'Vista previa',\n        'select_module'     => 'Selección de categoría',\n        'select_one'        => 'Seleccionar uno',\n        'selected_tags'     => 'Etiquetas seleccionadas',\n        'set_column'        => 'Establecer columna',\n        'set_fields'        => 'Establecer campos',\n        'submit'            => 'Enviar importación CSV',\n        'traits'            => 'Rasgos del personaje',\n        'traits_helper'     => 'Puedes agregar rasgos a los personajes; el encabezado que selecciones se usará como el rasgo, mientras que el valor de la fila correspondiente también será el valor del rasgo.',\n        'type_helper'       => 'Selecciona la categoría en la que deseas importar las nuevas entradas.',\n        'validation_error'  => 'Al menos 1 columna debe estar completamente rellena',\n    ],\n    'description_v2'    => 'Importa entradas, artículos, propiedades, galerías y otros datos desde una exportación de campaña o nuevas entradas desde un archivo .CSV en esta campaña. La importación se ejecuta en segundo plano y puede tardar un tiempo. Tú y cualquier otro administrador serán notificados cuando finalice.',\n    'fields'            => [\n        'file_v2'   => 'Archivo CSV o archivo ZIP de exportación',\n        'updated'   => 'Última actualización',\n    ],\n    'form'              => 'Formulario de carga',\n    'limitation_v2'     => 'Solo se aceptan archivos zip y csv. Máximo :size.',\n    'progress'          => [\n        'uploading' => 'Subiendo',\n    ],\n    'status'            => [\n        'failed'        => 'Fallida',\n        'finished'      => 'Terminada',\n        'invalid'       => 'Datos inválidos',\n        'processing'    => 'Procesando',\n        'queued'        => 'En cola',\n        'ready'         => 'Listo para mapear',\n        'running'       => 'Ejecutándose',\n        'validating'    => 'Validando',\n    ],\n    'title'             => 'Importar',\n];\n"
  },
  {
    "path": "lang/es/campaigns/invites.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Crea un enlace de invitación para enviar a tus jugadores, para que puedan unirse a la campaña.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Límite alcanzado',\n];\n"
  },
  {
    "path": "lang/es/campaigns/logs.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'list'      => 'Mantenemos un registro de todos los cambios principales realizados en la campaña durante :amount días. Estos registros no detallan cambios individuales en los valores, sino el estado general de la campaña.',\n        'nothing'   => 'No hay registros para mostrar. Ten en cuenta que los registros solo se conservan durante :amount días.',\n        'title'     => 'Sin registros',\n    ],\n    'pitch'     => 'Mantén un registro de los cambios generales realizados en la campaña durante un máximo de :amount días con una campaña premium.',\n    'premium'   => [\n        'helper'    => 'Se necesitan funciones premium para ver registros con más de :amount días.',\n    ],\n    'title'     => 'Registro de auditoría',\n];\n"
  },
  {
    "path": "lang/es/campaigns/members.php",
    "content": "<?php\n\nreturn [\n    'overview'  => [\n        'limited'   => ':amount de :total miembros.',\n        'title'     => 'Miembros disponibles',\n        'unlimited' => ':amount de miembros ilimitados.',\n    ],\n    'roles'     => [\n        'admin'     => 'No puedes añadir usuarios directamente al rol :admin desde aquí. Esto se hace desde la interfaz del rol :admin.',\n        'helper'    => 'Añadir o eliminar roles del miembro :user.',\n        'success'   => 'Roles actualizados correctamente para :user.',\n        'title'     => 'Editar los roles del miembro',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/modules.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Crear módulo',\n        'customise' => 'Personalizar',\n    ],\n    'create'        => [\n        'helper'    => 'Crear un nuevo módulo personalizado para almacenar entidades que no encajan en los otros módulos.',\n        'success'   => 'Se ha creado un nuevo módulo.',\n        'title'     => 'Nuevo módulo',\n    ],\n    'delete'        => [\n        'confirm'           => 'Escribe :code si estás seguro de que deseas eliminar definitivamente el módulo personalizado :name.',\n        'confirm-button'    => '{0} Eliminar :name permanentemente| {1} Eliminar :name y :count entidad permanentemente| [2,*] Eliminar :name y :count entidades permanentemente',\n        'entities'          => '{1} Esto eliminará :count entidad permanentemente. | [2,*] Esto eliminará :count entidades permanentemente.',\n        'helper'            => '¿Estás seguro de que quieres eliminar el módulo personalizado :name ? Esto también eliminará permanentemente todas las entidades, marcadores y widgets vinculados a este módulo.',\n        'success'           => 'Módulo :name eliminado.',\n        'title'             => 'Eliminación de módulos',\n    ],\n    'errors'        => [\n        'disabled'              => 'El módulo :name está desactivado. :fix',\n        'empty-custom'          => 'Añade módulos personalizados para organizar datos que no encajan en los predeterminados.',\n        'limit'                 => 'Actualmente, las campañas están limitadas a :max módulos personalizados mientras perfeccionamos esta nueva función.',\n        'limit-title'           => 'Límite de módulos personalizados alcanzado',\n        'subscription-limit'    => 'La campaña ha alcanzado el número máximo de módulos personalizados disponibles. La persona que desbloquea las funciones premium puede suscribirse a un nivel superior para aumentar este límite.',\n    ],\n    'fields'        => [\n        'icon'          => 'Icono del módulo',\n        'image'         => 'Imagen predeterminada',\n        'plural'        => 'Nombre del módulo en plural',\n        'singular'      => 'Nombre del módulo en singular',\n        'status'        => 'Estado del módulo',\n        'update_name'   => 'Renombrar el marcador del módulo con el nuevo nombre',\n    ],\n    'helpers'       => [\n        'custom'    => 'Este es un módulo personalizado.',\n        'icon'      => 'El icono :fontawesome, por ejemplo :ejemplo.',\n        'plural'    => 'El nombre en plural de las entidades del nuevo módulo. Por ejemplo, pociones',\n        'roles'     => 'Selecciona los roles que tienen permiso para ver las entidades de este nuevo módulo. Esto puede cambiarse posteriormente en los permisos de rol.',\n        'singular'  => 'El nombre singular de una entidad del nuevo módulo. Por ejemplo, poción',\n        'status'    => 'Los módulos desactivados se ocultan de la navegación y los menús. No se elimina ningún dato.',\n        'tutorial'  => 'Los módulos controlan qué funciones son visibles en la campaña. Activa los que uses y oculta el resto. Desactivar un módulo nunca elimina datos; solo lo quita de la navegación y de los menús de creación.',\n    ],\n    'pitch'         => 'Cambia el nombre y el icono asociado a este módulo para toda la campaña.',\n    'pitch-custom'  => 'Crea módulos personalizados para almacenar entidades únicas.',\n    'pitch-title'   => 'Desbloquear módulos personalizados',\n    'rename'        => [\n        'helper'    => 'Cambia el nombre y el icono del módulo a lo largo de la campaña. Déjalo en blanco para usar el predeterminado de Kanka.',\n        'success'   => 'Módulo personalizado.',\n        'title'     => 'Personalizar el módulo :module',\n    ],\n    'reset'         => [\n        'default'   => 'Esto sólo restablecerá los módulos predeterminados, no los personalizados.',\n        'success'   => 'Los módulos de la campaña se han restablecido.',\n        'title'     => 'Restablecer los nombres e iconos personalizados de los módulos',\n        'warning'   => '¿Estás seguro de que quieres restablecer los nombres e iconos originales de los módulos de campaña?',\n    ],\n    'sections'      => [\n        'custom'        => 'Módulos personalizados',\n        'default'       => 'Módulos predeterminados',\n        'early-access'  => 'Acceso anticipado',\n        'features'      => 'Funciones',\n    ],\n    'states'        => [\n        'disable'   => 'Desactivar',\n        'disabled'  => 'El módulo está desactivado',\n        'enable'    => 'Activar',\n        'enabled'   => 'El módulo está activado',\n    ],\n    'status'        => [\n        'enabled'   => 'Módulo activado',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/overview.php",
    "content": "<?php\n\nreturn [\n    'followers' => [\n        'title' => 'Seguidores',\n    ],\n    'member'    => [\n        'title' => 'Membresía',\n    ],\n    'premium'   => [\n        'enable'    => 'Activar funciones premium',\n    ],\n    'status'    => [\n        'title' => 'Visibilidad',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'Desactivar plugins',\n            'enable'    => 'Activar plugins',\n            'update'    => 'Actualizar plugins',\n        ],\n        'changelog'         => 'Registro de cambios',\n        'disable'           => 'Desactivar plugin',\n        'enable'            => 'Activar plugin',\n        'find-plugins'      => 'Buscar plugins',\n        'import'            => 'Importar',\n        'update'            => 'Actualizar plugin',\n        'update-to'         => 'Actualizar a la versión :versión',\n        'update_available'  => '¡Actualización disponible!',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} :count plugin eliminado.|[2,*] :count plugins eliminados.',\n        'disable'   => '{1} :count plugin desactivado.|[2,*] :count plugins desactivados.',\n        'enable'    => '{1} :count plugin activado.|[2,*] :count plugins activados.',\n        'update'    => '{1} :count plugin actualizado.|[2,*] :count plugins actualizados.',\n    ],\n    'destroy'       => [\n        'success'   => 'Se ha eliminado el plugin :plugin.',\n    ],\n    'disabled'      => [\n        'success'   => 'Se ha desactivado el plugin :plugin.',\n    ],\n    'empty_list'    => 'Esta campaña no contiene ningún plugin actualmente. Dirígete a la tienda para instalar alguno y vuelve para activarlo.',\n    'enabled'       => [\n        'success'   => 'Se ha activado el plugin :plugin.',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Plugin no válido.',\n    ],\n    'fields'        => [\n        'name'      => 'Nombre del plugin',\n        'obsolete'  => 'Este plugin ha sido marcado como obsoleto por el equipo de Kanka, lo que significa que ya no funciona como su creador pretendía originalmente.',\n        'status'    => 'Estatus',\n        'type'      => 'Tipo de plugin',\n    ],\n    'import'        => [\n        'button'                => 'Importar',\n        'created'               => 'Se han creado las siguientes entidades:',\n        'fields'                => [\n            'only_new'  => 'Solo nuevas entidades',\n            'private'   => 'Entidades privadas',\n        ],\n        'helper'                => 'Se van a importar :count entidades del plugin :plugin. Si este plugin ya estaba importado, los cambios que hayas hecho a las entidades importadas podrían perderse.',\n        'no_new_entities'       => 'No hay nuevas entidades que importar.',\n        'option_only_import'    => 'Importa solo las entidades nuevas, omitiendo las previamente importadas.',\n        'option_private'        => 'Importa todas las entidades como privadas.',\n        'success'               => '{1} Se ha importado :count entidad del plugin :plugin.|[2,*] Se han importado :count entidades del plugin :plugin.',\n        'title'                 => 'Importar :plugin',\n        'updated'               => 'Se han actualizado las siguientes entidades:',\n    ],\n    'info'          => [\n        'description'   => 'Mostrando las últimas actualizaciones para el plugin :plugin.',\n        'helper'        => 'Cuando salga una nueva versión de un plugin, puedes actualizarla a la nueva versión.',\n        'installed'     => 'Instalado',\n        'title'         => 'Actualitzaciones del plugin :plugin',\n        'updates'       => 'Actualizaciones',\n        'versions'      => 'Versiones',\n    ],\n    'pitch'         => 'Instale y gestione plugins desde el :marketplace.',\n    'status'        => [\n        'always'    => 'Este tipo de plugin siempre está activo a menos de que se elimine.',\n        'disabled'  => 'Desactivado',\n        'enabled'   => 'Activado',\n    ],\n    'templates'     => [\n        'name'  => ':name hecha por :user',\n    ],\n    'title'         => 'Plugins de la campaña :name',\n    'types'         => [\n        'attribute' => 'Plantilla de atributos',\n        'pack'      => 'Pack de contenido',\n        'theme'     => 'Tema',\n    ],\n    'update'        => [\n        'success'   => 'Se ha actualizado el plugin :plugin.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'new'           => 'Hazla pública para que la comunidad la descubra, o mantenla privada solo para miembros invitados.',\n        'permissions'   => 'Hacer tu campaña pública no comparte automáticamente el contenido. Configura lo que los visitantes públicos pueden ver en los ajustes del rol :public.',\n    ],\n    'title'     => 'Cambia la visibilidad de la campaña',\n    'update'    => [\n        'private'   => 'La campaña es ahora privada y sólo visible para los miembros de la misma.',\n        'public'    => 'La campaña es ahora pública. Puede que tarde algún tiempo en aparecer en la página :public-campaigns.',\n        'unlisted'  => 'La campaña ahora no está listada. Cualquiera con el enlace puede acceder, pero no aparecerá en la página de :public-campaigns.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'           => 'Recuperar',\n        'recover_selected'  => 'Recuperar seleccionados',\n    ],\n    'error'     => 'Ha habido un error tratando de recuperar entidades.',\n    'fields'    => [\n        'deleted'       => 'Eliminadas',\n        'deleted_at'    => 'Eliminado en :date por :user',\n    ],\n    'name_link' => ':name se ha recuperado correctamente',\n    'order'     => [\n        'newest'        => 'Ordenar por: Más recientes primero',\n        'newest_first'  => 'Más recientes primero',\n        'oldest'        => 'Ordenar por: Más antiguo primero',\n        'oldest_first'  => 'Más antiguos primero',\n        'type'          => 'Ordenar por: Tipo',\n        'type_order'    => 'Tipo',\n    ],\n    'premium'   => 'La recuperación de elementos es una función de las campañas premium.',\n    'success_v2'=> '{1} Se recuperó un elemento. |[2,*] Se han recuperado :count elementos.',\n    'title'     => 'Recuperación de entidades de :campaign',\n    'tutorial'  => 'Visualiza y restaura elementos eliminados recientemente de la campaña. Las entidades, publicaciones y otros datos de apoyo pueden recuperarse durante :amount días antes de eliminarse de forma permanente. Al restaurar un elemento, regresa con todos sus datos intactos.',\n];\n"
  },
  {
    "path": "lang/es/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'status'    => 'Estado: :status',\n    ],\n    'create'        => [\n        'helper'    => 'Crea un nuevo rol para la campaña.',\n    ],\n    'overview'      => [\n        'limited'   => ':amount de :total roles creados.',\n        'title'     => 'Roles disponibles',\n        'unlimited' => ':amount de roles ilimitados creados.',\n    ],\n    'permissions'   => [\n        'campaign-features' => 'Funciones de la campaña',\n        'content-modules'   => 'Módulos de contenido',\n        'toggle'            => [\n            'action'    => 'Cambiar todo',\n            'tooltip'   => 'Cambiar el permiso :action para todos los módulos.',\n        ],\n    ],\n    'public'        => [\n        'helpers'   => [\n            'click'     => 'Haz clic en cualquier módulo para cambiar el acceso público a todas las entidades que contiene.',\n            'intro'     => 'Controla lo que los no miembros pueden ver en la campaña.',\n            'main'      => 'Selecciona qué módulos son visibles para cualquiera que vea la campaña, tanto si ha iniciado sesión como si no. Esto incluye a visitantes públicos y a usuarios de Kanka que no son miembros de la campaña.',\n            'preview'   => 'Vista previa como no miembro',\n        ],\n    ],\n    'show'          => [\n        'title' => 'permisos de :role - :campaign',\n    ],\n    'toggle'        => [\n        'disabled'  => 'Los miembros del rol :role ya no pueden :action :entities',\n        'enabled'   => 'Los miembros del rol :role ahora pueden :action :entities',\n    ],\n    'warnings'      => [\n        'adding-to-admin'   => 'Los miembros del rol :name tienen acceso a todo en la campaña, y no pueden ser eliminados por otros miembros del rol. Después de :amount de minutos, sólo ellos pueden darse de baja del rol.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/share.php",
    "content": "<?php\n\nreturn [\n    'buttons'   => [\n        'change_visibility' => 'Cambiar visibilidad',\n        'copy'              => 'Copiar enlace',\n        'copy_public_link'  => 'Copiar enlace público',\n        'make_public'       => 'Hacer pública y copiar enlace',\n    ],\n    'helpers'   => [\n        'private_explanation'   => 'Solo los miembros pueden acceder a las campañas privadas.',\n        'public_explanation'    => 'Esta campaña es pública. Cualquiera con el enlace puede verla.',\n        'unlisted_explanation'  => 'Cualquiera con el enlace puede ver esta campaña, pero no aparece en directorios públicos.',\n    ],\n    'labels'    => [\n        'member_link'   => 'Solo los miembros pueden abrir esto',\n        'public_link'   => 'Enlace público',\n    ],\n    'status'    => [\n        'private'   => 'Campaña privada',\n        'public'    => 'Cualquiera con el enlace puede ver esta campaña',\n    ],\n    'success'   => [\n        'copied_members'    => 'Enlace solo para miembros copiado.',\n        'copied_public'     => 'Enlace público copiado, cualquiera con el enlace puede verlo.',\n        'made_public'       => 'La campaña es ahora pública.',\n    ],\n    'title'     => 'Compartir campaña',\n];\n"
  },
  {
    "path": "lang/es/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Restablecer valores por defecto',\n    ],\n    'call-to-action'    => 'Personaliza el orden, los iconos y los nombres de los elementos de la barra lateral de la campaña.',\n    'helpers'           => [\n        'bookmarks' => 'Los marcadores no aparecen aquí porque cada uno tiene su propia configuración de :position que determina dónde aparece en la barra lateral.',\n        'image'     => 'Añade una imagen para representar la campaña. Esta imagen se utilizará en la barra lateral y en la interfaz del selector de campañas. Puedes cambiarla en cualquier momento editando la campaña.',\n        'reordering'=> 'Reordena la barra lateral arrastrando y soltando los iconos del lado izquierdo.',\n    ],\n    'image-success'     => 'Se ha guardado la nueva imagen de la campaña. Esta imagen se puede volver a cambiar editando la campaña.',\n    'reset'             => [\n        'success'   => 'Restablecimiento de la configuración de la barra lateral de la campaña.',\n        'title'     => 'Restablecer la configuración de la barra lateral',\n        'warning'   => '¿Estás seguro de que quieres restablecer los valores por defecto de la barra lateral de tu campaña?',\n    ],\n    'success'           => 'Configuración de la barra lateral de la campaña guardada.',\n    'title'             => 'Configuración de la barra lateral de la campaña :campaign',\n    'tooltips'          => [\n        'image' => 'Cambiar esta imagen de fondo',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Calendarios',\n            'title' => 'Guardián del Tiempo',\n        ],\n        'murderer'  => [\n            'goal'  => 'Personajes muertos',\n            'title' => 'Asesino',\n        ],\n    ],\n    'fields'        => [\n        'created'       => 'Creado el',\n        'creator'       => 'Creado por',\n        'entries'       => 'Total de entradas',\n        'from-elements' => 'De los elementos',\n        'from-entities' => 'De las entidades',\n        'from-posts'    => 'De las publicaciones',\n        'general'       => 'General',\n        'words'         => 'Palabras totales',\n    ],\n    'targets'       => [],\n    'title2'        => 'Estadísticas',\n    'titles'        => [\n        'calendars' => 'Guardián del Tiempo nivel :level',\n        'characters'=> 'Nombrador nivel :level',\n        'dead'      => 'Asesino nivel :level',\n        'families'  => 'Planificación Familiar nivel :level',\n        'locations' => 'Constructor nivel :level',\n        'quests'    => 'Mastermind nivel :level',\n        'races'     => 'Criador nivel :level',\n    ],\n    'tutorial'      => 'Las estadísticas de la campaña muestran el recuento de entidades y la actividad reciente. Los datos se actualizan cada :amount horas. Úsalas para seguir el crecimiento y el uso a lo largo del tiempo.',\n];\n"
  },
  {
    "path": "lang/es/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'current'   => 'Tema actual: :theme',\n        'disable'   => 'Desactivar',\n        'enable'    => 'Activar',\n        'new'       => 'Nuevo estilo',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} :count estilo eliminados.|[2,*] :count estilos eliminados .',\n        'disable'   => '{1} :count estilo desactivado.|[2,*] :count estilos desactivados.',\n        'enable'    => '{1} :count estilo activado.|[2,*] :count estilos activados.',\n    ],\n    'create'        => [\n        'success'   => 'Se ha creado el nuevo estilo.',\n        'title'     => 'Nuevo estilo',\n    ],\n    'delete'        => [\n        'success'   => 'Se ha eliminado el estilo :name.',\n    ],\n    'errors'        => [\n        'max_content'   => 'La regla CSS no puede tener más de :amount caracteres.',\n        'max_reached'   => 'Número máximo de estilos (:max) alcanzado.',\n    ],\n    'fields'        => [\n        'content'       => 'Regla CSS',\n        'is_enabled'    => 'Habilitado',\n        'length'        => 'Longitud',\n        'modified'      => 'Modificado',\n        'name'          => 'Nombre',\n        'order'         => 'Orden',\n    ],\n    'helpers'       => [\n        'here'          => 'en nuestro blog',\n        'is_enabled'    => 'Habilita este tema en todas las páginas.',\n        'main'          => 'Puedes crear estilos CSS personalizados para tu campaña mejorada. Estos estilos se cargan después de los temas del marketplace que hayas habilitado para la campaña. Puedes saber más sobre cómo aplicar estilos a tu campaña :here.',\n        'tutorial'      => 'Controla el estilo visual de la campaña. Elige colores, preferencias de diseño y otras opciones de presentación. Estos cambios afectan solo a esta campaña y pueden actualizarse en cualquier momento.',\n    ],\n    'pitch'         => 'Crea estilos CSS personalizados para cambiar por completo el aspecto de la campaña.',\n    'placeholders'  => [\n        'name'  => 'Nombre del estilo',\n    ],\n    'reorder'       => [\n        'save'      => 'Guardar nuevo orden',\n        'success'   => '{1} :count estilos reordenados.|[2,*] :count estilos reordenados.',\n        'title'     => 'Reordenar estilos',\n    ],\n    'theme'         => [\n        'none'      => 'Utilizar las preferencias del usuario',\n        'override'  => 'Sobrescribir tema',\n        'success'   => 'Tema de campaña actualizado.',\n        'title'     => 'Actualizar el tema de la campaña',\n    ],\n    'title'         => 'Personalizar la campaña',\n    'toggle'        => [\n        'disable'   => 'Estilo deshabilitado correctamente.',\n        'enable'    => 'Estilo habilitado correctamente.',\n    ],\n    'update'        => [\n        'success'   => 'Se ha actualizado el estilo :name.',\n        'title'     => 'Actualizar estilo',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/vanity.php",
    "content": "<?php\n\nreturn [\n    'available' => '¡El nombre :vanity está disponible!',\n    'forever'   => 'Una vez establecido, no se puede cambiar. :docs',\n    'helper-v2' => 'Dale a la campaña una dirección web personalizada y fácil de recordar. En lugar de :default, la campaña podría aparecer como: :example',\n    'rule'      => 'El campo :field necesita al menos un carácter alfabético.',\n    'rule2'     => 'El campo :field no permite el siguiente carácter: /.',\n    'set'       => 'La URL de vanidad de la campaña se ha establecido permanentemente como :vanity.',\n];\n"
  },
  {
    "path": "lang/es/campaigns/visibilities.php",
    "content": "<?php\n\nreturn [\n    'directory' => [\n        'public'    => 'Listada en campañas públicas',\n        'unlisted'  => 'Oculta de las campañas públicas',\n    ],\n    'helpers'   => [\n        'premium'   => 'Para habilitar esta configuración, las funciones premium deben estar desbloqueadas para esta campaña.',\n        'private'   => 'Solo los miembros invitados pueden acceder',\n        'public'    => 'Cualquiera con un enlace puede ver',\n    ],\n    'titles'    => [\n        'private'   => 'Privada',\n        'public'    => 'Pública',\n        'unlisted'  => 'Pública (no listada)',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns/webhooks.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'action'    => 'Cambiar estado',\n        'add'       => 'Crear webhook',\n        'bulks'     => [\n            'delete_success'    => '{1} Se ha eliminado :count webhook.|[2,*] Se han eliminado :count webhooks.',\n            'disable'           => 'Desactivar',\n            'disable_success'   => '{1} Se ha desactivado :count webhook.|[2,*] Se han desactivado :count webhooks.',\n            'enable'            => 'Activar',\n            'enable_success'    => '{1} Se ha activado :count webhook.|[2,*] Se han activado :count webhooks.',\n        ],\n        'test'      => 'Webhook de prueba',\n        'update'    => 'Actualizar webhook',\n    ],\n    'create'        => [\n        'success'   => 'El webhook se ha creado con éxito',\n        'title'     => 'Añadir nuevo webhook',\n    ],\n    'destroy'       => [\n        'success'   => 'Webhook eliminado correctamente.',\n    ],\n    'edit'          => [\n        'success'   => 'Webhook actualizado correctamente',\n        'title'     => 'Actualizar webhook',\n    ],\n    'error'         => [\n        'pitch' => 'Desbloquea funciones premium para acceder a los webhooks.',\n    ],\n    'fields'        => [\n        'enabled'           => 'Habilitado',\n        'event'             => 'Evento',\n        'events'            => [\n            'deleted'   => 'Entidad eliminada',\n            'edited'    => 'Entidad editada',\n            'new'       => 'Entidad nueva',\n        ],\n        'message'           => 'Mensaje',\n        'private_entities'  => [\n            'helper'    => 'No activar el webhook al actualizar entidades privadas.',\n            'skip'      => 'Omitir entidades privadas',\n        ],\n        'type'              => 'Tipo',\n        'types'             => [\n            'custom'    => 'Mensaje',\n            'payload'   => 'Payload',\n        ],\n        'url'               => 'Url',\n    ],\n    'helper'        => [\n        'active'    => 'Si el webhook está activo',\n        'message'   => 'Añade un mensaje personalizado con soporte para asignaciones',\n        'status'    => 'Cambiar el estado activo del webhook',\n        'tutorial'  => 'Usa webhooks para enviar actualizaciones en tiempo real de la campaña a herramientas externas. Los eventos se activan automáticamente cuando se crean, actualizan o eliminan entidades. Puedes añadir varios webhooks y probarlos desde esta página.',\n    ],\n    'placeholders'  => [\n        'message'   => '{who} ha hecho cambios en {name}, revísalos en {url}.',\n        'url'       => 'URL del webhook',\n    ],\n    'test'          => [\n        'success'   => 'Solicitud de prueba enviada',\n    ],\n    'title'         => 'Webhooks',\n    'toggle'        => [\n        'disable'   => 'Webhook deshabilitado correctamente.',\n        'enable'    => 'Webhook habilitado correctamente.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/campaigns.php",
    "content": "<?php\n\nreturn [\n    'actions'                           => [],\n    'create'                            => [\n        'success'   => 'Campaña creada.',\n        'title'     => 'Nueva campaña',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Campaña actualizada.',\n    ],\n    'entity_note_visibility'            => [],\n    'entity_personality_visibilities'   => [\n        'private'   => 'La personalidad de los personajes nuevos es privada por defecto.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Nuevas entidades privadas por defecto',\n    ],\n    'errors'                            => [\n        'access'        => 'No tienes acceso a esta campaña.',\n        'premium'       => 'Esta función sólo está disponible para las campañas premium.',\n        'unknown_id'    => 'Campaña desconocida.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'Mejorada por',\n        'entity_count'              => 'Número de entidades',\n        'entry'                     => 'Descripción de la campaña',\n        'followers'                 => 'Seguidores',\n        'genre'                     => 'Género(s)',\n        'header_image'              => 'Imagen de cabecera',\n        'image'                     => 'Imagen',\n        'locale'                    => 'Idioma',\n        'name'                      => 'Nombre',\n        'open'                      => 'Inscripciones abiertas',\n        'premium'                   => 'Premium desbloqueado por :name',\n        'public'                    => 'Visibilidad de la campaña',\n        'public_campaign_filters'   => 'Filtros de las campañas públicas',\n        'superboosted'              => 'Supermejorada por',\n        'system'                    => 'Sistema',\n        'theme'                     => 'Tema',\n        'vanity'                    => 'URL personalizada',\n    ],\n    'following'                         => 'Siguiendo',\n    'helpers'                           => [\n        'boosted'                   => 'Algunas características están desbloqueadas porque esta campaña está mejorada. Para saber más sobre esto, echa un vistazo en la página de :settings.',\n        'css'                       => 'Escribe tu propio CSS para las páginas de tu campaña. Ten en cuenta que abusar de esta herramienta puede llevar a la eliminación de tu CSS personalizado. Incumplimientos repetidos o graves pueden llevar a la eliminación de tu campaña.',\n        'dashboard'                 => 'Personaliza la forma en que el widget se muestra en el tablero rellenando los campos siguientes.',\n        'excerpt'                   => 'El extracto de la campaña se mostrará en el tablero principal. Escribe unas pocas líneas para introducir tu mundo. Si lo dejas en blanco, se mostrarán los primeros 1.000 caracteres de la descripción de la campaña.',\n        'header_image'              => 'La imagen que se muestra como fondo en el widget de la cabecera del tablero.',\n        'hide_history'              => 'Habilita esta opción para esconder el historial de entidades a los miembros no administradores.',\n        'hide_members'              => 'Habilita esta opción para esconder la lista de miembros de la campaña a los no administradores.',\n        'locale'                    => 'El idioma en que está escrita tu campaña. Esto se usa para generar contenido y agrupar campañas públicas.',\n        'name'                      => 'Tu campaña/mundo puede tener cualquier nombre, siempre y cuando contenga al menos 4 letras o números.',\n        'no_entry'                  => '¡Parece que la campaña aún no tiene una descripción! Arreglemos eso.',\n        'premium'                   => 'Algunas funciones están disponibles porque las funciones premium de esta campaña están desbloqueadas. Más información en la página de :settings.',\n        'public_campaign_filters'   => 'Facilita que otros encuentren tu campaña entre las demás proporcionando la siguiente información.',\n        'public_no_visibility'      => '¡Ojo! Tu campaña es pública, pero el rol público no tiene acceso a nada. :fix.',\n        'system'                    => 'Si tu campaña es visible públicamente, el sistema se mostrará en la página de :link.',\n        'systems'                   => 'Para evitar líos, algunos elementos de Kanka solo están disponibles en sistemas RPG específicos (por ejemplo, el bloque de stats de monstruo de D&D 5e). Si eliges un sistema soportado, se activarán dichos elementos.',\n        'theme'                     => 'Establece un tema único para la campaña, anulando las preferencias de los usuarios.',\n        'view_public'               => 'Para ver tu campaña como lo haría un visitante público, abre un :link en una ventana de incógnito.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Copiar el enlace al portapapeles',\n            'link'  => 'Nuevo enlace',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Crear invitación',\n            ],\n            'success_link'  => 'Link creado. :link',\n            'title'         => 'Invita a alguien a tu campaña',\n        ],\n        'destroy'               => [\n            'success'   => 'Invitación eliminada.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Este identificador ya se ha usado o la campaña ya no existe.',\n            'invalid_token'     => 'El identificador ya no es válido.',\n            'join'              => 'Inicia sesión o registra una nueva cuenta para unirte a :campaign.',\n        ],\n        'fields'                => [\n            'created'   => 'Enviado',\n            'role'      => 'Rol',\n            'token'     => 'Token',\n            'type'      => 'Tipo',\n            'usage'     => 'Número máximo de usos',\n        ],\n        'helpers'               => [\n            'role'  => 'Los usuarios tienen que unirse antes de que puedan ser ascendidos al rol de administrador.',\n            'usage' => 'Cuántas veces se puede utilizar el enlace de invitación antes de que quede inactivo.',\n        ],\n        'unlimited_validity'    => 'Ilimitado',\n        'usages'                => [\n            'five'      => '5 usos',\n            'no_limit'  => 'Ilimitado',\n            'once'      => '1 uso',\n            'ten'       => '10 usos',\n        ],\n    ],\n    'leave'                             => [\n        'action'            => 'Salir de la campaña',\n        'confirm'           => '¿Seguro que quieres abandonar la campaña :name? No tendrás acceso a ella, a no ser que un administrador te invite de nuevo.',\n        'confirm-button'    => 'Sí, abandonar la campaña',\n        'error'             => 'No puedes abandonar la campaña.',\n        'fix'               => 'Ir a los miembros de la campaña',\n        'no-admin-left'     => 'No es posible salir de la campaña porque hacerlo la dejaría sin administradores. Agrega otro miembro al rol de administrador primero.',\n        'success'           => 'Has abandonado la campaña.',\n        'title'             => 'Saliendo de la campaña',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'Quitar de la campaña',\n            'switch'        => 'Ver como',\n            'switch-back'   => 'Volver a mi usuario',\n            'switch-entity' => 'Ver como',\n        ],\n        'fields'                => [\n            'banned'        => 'El usuario está baneado',\n            'joined'        => 'Inscrito',\n            'last_login'    => 'Última conexión',\n            'name'          => 'Usuario',\n            'role'          => 'Rol',\n            'roles'         => 'Roles',\n        ],\n        'helpers'               => [\n            'switch'    => 'Ver como este usuario',\n        ],\n        'impersonating'         => [\n            'message'   => 'Estás viendo la campaña como otro usuario. Algunas funcionalidades están deshabilitadas, pero el resto actúa exactamente como el usuario lo vería. Para volver a tu usuario, usa el botón \"Volver a mi usuario\" cerca del botón de Cerrar Sesión.',\n            'title'     => 'Estás viendo como :name',\n        ],\n        'invite'                => [\n            'description'   => 'Puedes invitar a tus amigos a unirse a la campaña mediante un enlace de invitación. Una vez acepten la invitación, se añadirán con su rol correspondiente. También puedes enviarles la invitación por correo electrónico, siempre y cuando no sea una dirección de Hotmail, ya que siempre rechazan los mails de Kanka.',\n            'more'          => 'Puedes añadir más roles desde la :link.',\n            'title'         => 'Invitaciones',\n        ],\n        'removal'               => 'Estás eliminando a \":member\" de la campaña.',\n        'roles'                 => [\n            'member'    => 'Miembro',\n            'owner'     => 'Administrador',\n            'player'    => 'Jugador',\n            'public'    => 'Público',\n            'viewer'    => 'Invitado',\n        ],\n        'switch_back_success'   => 'Has vuelto a tu usuario.',\n    ],\n    'mentions'                          => [],\n    'modules'                           => [],\n    'open_campaign'                     => [],\n    'options'                           => [],\n    'overview'                          => [\n        'entity-count'      => '{0} Sin entidades|{1} :amount entidad|[2,*] :amount entidades',\n        'follower-count'    => '{0} Sin seguidores|{1} :amount seguidor|[2,*] :amount seguidores',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Tablero',\n        'privacy'   => 'Valores predeterminados de privacidad',\n        'setup'     => 'Configuración',\n        'sharing'   => 'Compartir',\n        'systems'   => 'Sistemas',\n        'ui'        => 'Interfaz',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Código de idioma',\n        'name'      => 'El nombre de tu campaña',\n        'system'    => 'D&D 5e, Pathfinder, Fate...',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Oculta',\n        'private'   => 'Privada',\n        'visible'   => 'Visible',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'Las campañas son privadas por defecto, pero se pueden hacer públicas. De esta forma todo el mundo podrá acceder a ellas y aparecerán en la página de :public-campaigns si tienen entidades visibles para el rol :public-role. Una campaña pública es visible para todos, pero para que su contenido se pueda ver, hay que configurar los permisos del rol :public-role.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'Añadir un rol',\n            'duplicate'     => 'Duplicar rol',\n            'permissions'   => 'Configurar permisos',\n            'rename'        => 'Renombrar rol',\n            'save'          => 'Guardar rol',\n        ],\n        'admin_role'    => 'rol de administrador',\n        'bulks'         => [\n            'delete'    => '{1} :count rol eliminado.|[2,*] :count roles eliminados.',\n            'edit'      => '{1} :count rol actualizado.|[2,*] :count roles actualizados.',\n        ],\n        'create'        => [\n            'success'   => 'Rol creado.',\n            'title'     => 'Crear un nuevo rol en :name',\n        ],\n        'destroy'       => [\n            'success'   => 'Rol eliminado.',\n        ],\n        'edit'          => [\n            'success'   => 'Rol actualizado.',\n            'title'     => 'Editar rol :name',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Copiar permisos',\n            'name'              => 'Nombre',\n            'permissions'       => 'Permisos',\n            'type'              => 'Tipo',\n            'users'             => 'Usuarios',\n        ],\n        'helper'        => [\n            '1'                     => 'Una campaña puede tener tantos roles como se quiera. El rol \"Administrador\" tiene acceso automáticamente a todo dentro de una campaña, pero cada uno de los demás roles puede tener permisos específicos en diferentes tipos de entidades (personajes, lugares, etc).',\n            '2'                     => 'Las entidades pueden tener permisos más afinados mediante la pestaña \"Permisos\" de una entidad. Esta pestaña aparece cuando tu campaña tiene varios roles o miembros.',\n            '3'                     => 'Se puede usar un sistema de \"exclusión\", donde los roles tienen acceso a todas las entidades, y usar la casilla de \"Privado\" en las entidades que se quieran ocultar. O bien, pueden darse pocos permisos a los roles, y configurar cada entidad para que sea visible individualmente.',\n            '4'                     => 'Las campañas mejoradas pueden tener una cantidad ilimitada de roles.',\n            'permissions_helper'    => 'Duplicar todos los permisos del rol, tanto en módulos como en entidades.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'El rol \"Público\" tiene permisos pero la campaña es privada. Puedes ajustar esto en la pestaña Compartir al editar la campaña.',\n            'empty_role'            => 'El rol aún no tiene miembros.',\n            'role_admin'            => 'Los miembros del rol :name automáticamente pueden acceder a todas las entidades y características de la campaña.',\n            'role_permissions'      => 'Habilitar el rol \":name\" para que pueda hacer las siguientes acciones en todas las entidades.',\n        ],\n        'members'       => 'Miembros',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'Los permisos de la campaña permiten lo siguiente.',\n                'entities'  => 'A continuación se muestra un resumen de los permisos de este rol.',\n                'more'      => 'Para más detalles, mira nuestro tutorial en Youtube.',\n                'title'     => 'Detalles de permisos',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'           => 'Crear',\n                'articles'      => 'Artículos',\n                'dashboard'     => 'Tablero',\n                'delete'        => 'Eliminar',\n                'edit'          => 'Editar',\n                'gallery'       => [\n                    'browse'    => 'Navegar',\n                    'manage'    => 'Control absoluto',\n                    'upload'    => 'Subir',\n                ],\n                'manage'        => 'Configurar',\n                'members'       => 'Miembros',\n                'permission'    => 'Administrar permisos',\n                'read'          => 'Ver',\n                'toggle'        => 'Cambiar para todos',\n            ],\n            'helpers'   => [\n                'add'           => 'Permite crear entidades de este tipo. Podrán ver y editar las entidades que creen aunque no tengan el permiso de ver o editar.',\n                'articles'      => 'Permite agregar, editar y eliminar artículos incluso si el miembro no puede editar la entrada.',\n                'dashboard'     => 'Permite editar los tableros y sus widgets.',\n                'delete'        => 'Permite eliminar todas las entidades de este tipo.',\n                'edit'          => 'Permite editar todas las entidades de este tipo.',\n                'gallery'       => [\n                    'browse'    => 'Permite ver la galería y establecer la imagen de una entidad desde la galería.',\n                    'manage'    => 'Permite todo en la galería como un administrador puede, incluyendo la edición y eliminación de imágenes.',\n                    'upload'    => 'Permite subir imágenes a la galería. Sólo verá las imágenes que han subido si no se combina con el permiso de navegación.',\n                ],\n                'manage'        => 'Permite editar la campaña como un administrador, excepto eliminar la campaña.',\n                'members'       => 'Permite invitar nuevos miembros a la campaña.',\n                'not_public'    => 'La campaña no es pública. Se pueden establecer permisos para el rol público, pero serán ignorados. Edita la campaña para hacerla pública.',\n                'permission'    => 'Permite configurar los permisos de las entidades de este tipo que puedan editar.',\n                'read'          => 'Permite visualizar todas las entidades de este tipo que no sean privadas.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Nombre del rol',\n        ],\n        'title'         => 'Roles de la campaña :name',\n        'types'         => [\n            'owner'     => 'Administrador',\n            'public'    => 'Público',\n            'standard'  => 'Estándar',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Añadir miembro',\n                'remove'        => ':user del rol :role',\n                'remove_user'   => 'Quitar usuario del rol',\n            ],\n            'create'    => [\n                'success'   => 'Usuario añadido al rol.',\n                'title'     => 'Añadir un miembro al rol :name',\n            ],\n            'destroy'   => [\n                'success'   => 'Usuario eliminado del rol.',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'Para evitar abusos, no es posible eliminar a otros miembros del rol de :admin de la campaña. En caso de problemas, contáctanos en :discord o en :email.',\n                'needs_more_roles'  => 'Debes agregarte a otro rol en la campaña antes de poder eliminarte del rol de :admin.',\n            ],\n            'fields'    => [\n                'name'  => 'Nombre',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'Habilitar',\n        ],\n        'boosted'       => 'Esta función está en beta y actualmente solo está disponible para las :boosted.',\n        'deprecated'    => [\n            'help'  => 'Este módulo está obsoleto, lo que significa que ya no recibe mantenimiento y que no se prueba con cada nueva actualización. Usa este módulo con el conocimiento de que eventualmente se eliminará de Kanka.',\n            'title' => 'Obsoleto',\n        ],\n        'disabled'      => 'El módulo :module está deshabilitado.',\n        'enabled'       => 'El módulo :module está habilitado.',\n        'errors'        => [\n            'module-disabled'   => 'El módulo solicitado está actualmente deshabilitado en la configuración de la campaña. :fix.',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Crea habilidades, proezas, hechizos o poderes y asígnalos a entidades.',\n            'assets'            => 'Sube archivos, establece enlaces y define alias para entidades individuales.',\n            'bookmarks'         => 'Crea marcadores de entidades o listas filtradas que aparezcan en la barra lateral.',\n            'calendars'         => 'El sitio para definir los calendarios de tu mundo.',\n            'characters'        => 'Las personas que viven en tu mundo.',\n            'conversations'     => 'Conversaciones ficticias entre personajes o entre usuarios de la campaña.',\n            'creatures'         => 'Crea las criaturas, animales y monstruos de tu mundo con el módulo de criaturas.',\n            'dice_rolls'        => 'Una manera de manejar las tiradas de dados para aquellos que usan Kanka para campañas de rol.',\n            'entity_attributes' => 'Lleva un control de los atributos de las entidades de la campaña, por ejemplo, HP o VELOCIDAD.',\n            'events'            => 'Celebraciones, festivales, desastres, cumpleaños, guerras...',\n            'families'          => 'Clanes o familias, sus relaciones y sus miembros.',\n            'inventories'       => 'Gestiona el inventario de tus entidades.',\n            'items'             => 'Armas, vehículos, reliquias, pociones...',\n            'journals'          => 'Observaciones escritas por los personajes, o preparación de la sesión del máster.',\n            'locations'         => 'Planetas, planos, continentes, ríos, estados, asentamientos, templos, tabernas...',\n            'maps'              => 'Sube mapas con diferentes capas y marcadores que señalen a otras entidades de la campaña.',\n            'notes'             => 'Tradiciones, religiones, historia, magia, razas...',\n            'organisations'     => 'Sectas, unidades militares, facciones, gremios...',\n            'quests'            => 'Para llevar un seguimiento de varias misiones con personajes y localizaciones.',\n            'races'             => 'Si tu campaña tiene más de una raza, de esta forma no las perderás de vista.',\n            'tags'              => 'Cada entidad puede tener varias etiquetas. Éstas pueden pertenecer a otras etiquetas, y las entradas pueden filtrarse por etiqueta.',\n            'timelines'         => 'Representa la historia de tu mundo con líneas de tiempo.',\n            'whiteboards'       => 'Dibuja y escribe en pizarras para planificar visualmente tu mundo y tus objetivos.',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'Las campañas públicas son visibles en la página :public-campaigns. Rellenar estos campos facilita que las personas descubran la campaña.',\n        'language'  => 'El idioma en el que está escrito el contenido de la campaña.',\n        'system'    => 'Si juegas un TTRPG, el sistema usado para jugar en la campaña.',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Editar campaña',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Logros',\n            'customisation'     => 'Personalización',\n            'danger'            => 'Peligro',\n            'data'              => 'Datos',\n            'default-images'    => 'Imágenes por defecto',\n            'defaults'          => 'Valores predeterminados',\n            'deletion'          => 'Eliminación',\n            'export'            => 'Exportar',\n            'import'            => 'Importar',\n            'logs'              => 'Registros',\n            'management'        => 'Gestión',\n            'members'           => 'Miembros',\n            'plugins'           => 'Plugins',\n            'recovery'          => 'Recuperación',\n            'roles'             => 'Roles',\n            'sidebar'           => 'Configuración de la barra lateral',\n            'stats'             => 'Estadísticas',\n            'styles'            => 'Personalización',\n            'webhooks'          => 'Webhooks',\n        ],\n        'title'     => 'Campaña :name',\n    ],\n    'status'                            => [\n        'free'      => 'Funciones Premium desactivadas.',\n        'legacy'    => [\n            'title' => 'Funciones mejoradas (antiguas)',\n        ],\n        'premium'   => 'Funciones premium desbloqueadas por :name.',\n        'title'     => 'Funciones Premium',\n    ],\n    'superboosted'                      => [],\n    'themes'                            => [\n        'none'  => 'Ninguno (el valor predeterminado es configuraciónes de usuario)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Solo visible para los administradores de campaña',\n            'visible'   => 'Visible para los miembros',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Registros históricos de la entidad',\n            'member_list'       => 'Lista de miembros de la campaña',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Controla quién puede ver los cambios realizados recientemente en cada entidad de la campaña.',\n            'member-list'       => 'Controla quién puede ver a los miembros de la campaña.',\n            'theme'             => 'Muestra la campaña en el tema del usuario u oblíguela mostrarse en uno de los siguientes temas.',\n        ],\n        'members'           => [\n            'hidden'    => 'Solo visible para administradores de campaña',\n            'visible'   => 'Visible para miembros',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Privada',\n        'public'    => 'Pública',\n        'unlisted'  => 'Público (no listado)',\n    ],\n    'warning'                           => [],\n];\n"
  },
  {
    "path": "lang/es/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_appearance'    => 'Añadir apariencia',\n        'add_personality'   => 'Añadir personalidad',\n    ],\n    'conversations' => [],\n    'create'        => [\n        'title' => 'Nuevo Personaje',\n    ],\n    'destroy'       => [],\n    'dice_rolls'    => [],\n    'edit'          => [],\n    'families'      => [\n        'helper'    => 'Reordena y controla qué familias de :name son visibles o están ocultas para los usuarios que no son administradores.',\n        'reorder'   => [\n            'success'   => 'Las familias del personaje se han actualizado correctamente.',\n        ],\n        'title2'    => 'Gestionar familias',\n    ],\n    'fields'        => [\n        'age'                       => 'Edad',\n        'is_appearance_pinned'      => 'Apariencia fijada',\n        'is_dead'                   => 'Muerto',\n        'is_personality_pinned'     => 'Personalidad fijada',\n        'is_personality_visible'    => 'Personalidad visible',\n        'life'                      => 'Biografía',\n        'physical'                  => 'Apariencia',\n        'pronouns'                  => 'Pronombres',\n        'sex'                       => 'Género',\n        'title'                     => 'Título',\n        'traits'                    => 'Características',\n    ],\n    'helpers'       => [\n        'age'   => 'Puedes vincular esta entidad con un calendario de la campaña para calcular automáticamente su edad. :more',\n    ],\n    'hints'         => [\n        'is_appearance_pinned'      => 'Si está seleccionado, la apariencia del personaje aparecerá bajo la entrada principal de la página.',\n        'is_dead'                   => 'Este personaje está muerto',\n        'is_personality_visible'    => 'Se puede ocultar la sección de personalidad a los usuarios no administradores.',\n        'personality_not_visible'   => 'Los rasgos de personalidad de este personaje actualmente solo son visibles para los administradores.',\n        'personality_visible'       => 'Los rasgos de personalidad de este personaje son visibles para todos.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'labels'        => [\n        'appearance'    => [\n            'entry' => 'Descripción de la apariencia',\n            'name'  => 'Nombre de la apariencia',\n        ],\n        'personality'   => [\n            'entry' => 'Descripción del rasgo de personalidad',\n            'name'  => 'Nombre del rasgo de personalidad',\n        ],\n    ],\n    'lists'         => [\n        'empty' => 'Crea tu primer héroe, villano o acompañante para dar vida a tu mundo.',\n    ],\n    'maps'          => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => 'Personaje añadido a la organización.',\n            'title'     => 'Nueva organización para :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Personaje quitado de la organización.',\n        ],\n        'edit'      => [\n            'success'   => 'Organización del personaje actualizada.',\n            'title'     => 'Actualizar organización de :name',\n        ],\n        'fields'    => [\n            'role'  => 'Rol',\n        ],\n    ],\n    'placeholders'  => [\n        'age'               => 'Edad',\n        'appearance_entry'  => 'Descripción',\n        'appearance_name'   => 'Cabello, ojos, piel, altura...',\n        'name'              => 'Nombre del personaje',\n        'personality_entry' => 'Detalles',\n        'personality_name'  => 'Objetivos, manías, miedos, lazos...',\n        'physical'          => 'Físico',\n        'pronouns'          => 'Él, ella, elle',\n        'sex'               => 'Género',\n        'title'             => 'Título',\n        'traits'            => 'Características',\n        'type'              => 'PNJ, Personaje Jugador, divinidad...',\n    ],\n    'quests'        => [\n        'helpers'   => [\n            'quest_giver'   => 'Misiones que el personaje ha promovido.',\n            'quest_member'  => 'Misiones de las que el personaje es miembro.',\n        ],\n    ],\n    'races'         => [\n        'helper'    => 'Reordena y controla qué razas de :name son visibles u ocultas para los usuarios que no son administradores.',\n        'reorder'   => [\n            'success'   => 'Razas del personaje actualizadas correctamente',\n        ],\n        'title2'    => 'Gestionar razas',\n    ],\n    'sections'      => [\n        'appearance'    => 'Apariencia',\n        'personality'   => 'Personalidad',\n    ],\n    'show'          => [],\n    'warnings'      => [\n        'personality_hidden'    => 'No puedes editar los rasgos de personalidad de este personaje.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Cian',\n    'black'         => 'Negro',\n    'blue'          => 'Azul',\n    'brown'         => 'Marrón',\n    'green'         => 'Verde',\n    'grey'          => 'Gris',\n    'light-blue'    => 'Azul claro',\n    'maroon'        => 'Granate',\n    'navy'          => 'Azul marino',\n    'none'          => 'Ninguno',\n    'orange'        => 'Naranja',\n    'pink'          => 'Rosa',\n    'purple'        => 'Lila',\n    'red'           => 'Rojo',\n    'teal'          => 'Turquesa',\n    'white'         => 'Blanco',\n    'yellow'        => 'Amarillo',\n];\n"
  },
  {
    "path": "lang/es/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'          => 'campaña mejorada',\n    'premium-campaign'          => 'campaña premium',\n    'premium-campaign-count'    => '{0} Campañas no Premium |{1} 1 Campaña Premium |[2,*] :count Campañas Premium',\n    'premium-campaigns'         => 'campañas premium',\n    'premium-feature'           => 'Función Premium',\n    'superboosted-campaign'     => 'campaña supermejorada',\n];\n"
  },
  {
    "path": "lang/es/confirm/editing.php",
    "content": "<?php\n\nreturn [\n    'back'          => 'Regresar',\n    'description'   => 'Parece que otra persona está editando esta página. ¿Quieres regresar o ignorar esta advertencia, con el riesgo de perder datos?',\n    'ignore'        => 'Editar de todos modos',\n    'members'       => 'Miembros editando esta página:',\n    'title'         => 'Advertencia',\n    'user'          => ':user desde :since',\n];\n"
  },
  {
    "path": "lang/es/confirm.php",
    "content": "<?php\n\nreturn [\n    'delete'    => [\n        'bulk'          => '¿Estás seguro de que deseas eliminar los elementos seleccionados?',\n        'helper'        => '¿Estás seguro de que deseas eliminar :name?',\n        'recoverable'   => 'Esta acción se puede deshacer hasta :day días después con una :premium-campaign.',\n        'title'         => 'Eliminar elemento',\n    ],\n];\n"
  },
  {
    "path": "lang/es/connections/web.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'           => 'Conectar existente',\n        'back'          => 'Volver a conexiones',\n        'download'      => 'Descargar PNG',\n        'download-pdf'  => 'Descargar PDF',\n        'download-png'  => 'Descargar imagen (.png)',\n        'reset-layout'  => 'Restablecer diseño',\n        'view'          => 'Ver red',\n        'zoom-fit'      => 'Zoom para ajustar',\n    ],\n    'cta'       => [\n        'text'  => 'Esta es una vista previa de la red completa de conexiones de la campaña. Las campañas gratuitas pueden explorar hasta :amount nodos. Las campañas premium desbloquean el mapa completo con todas las conexiones y navegación total. Actualiza para ver toda la estructura de tu mundo de una sola vez.',\n        'title' => 'Vista previa limitada a :amount conexiones',\n    ],\n    'title'     => 'Red de conexiones',\n];\n"
  },
  {
    "path": "lang/es/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nueva Conversación',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_closed'     => 'Cerrada',\n        'messages'      => 'Mensajes',\n        'participants'  => 'Participantes',\n    ],\n    'hints'         => [\n        'empty'         => 'No hay participantes en esta conversación.',\n        'participants'  => 'Añade participantes a la conversación mediante el icono :icon arriba a la derecha.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Registra diálogos, cartas o intercambios entre personajes y facciones.',\n    ],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Mensaje eliminado.',\n        ],\n        'is_updated'    => 'Actualizado',\n        'load_previous' => 'Cargar mensajes previos',\n        'placeholders'  => [\n            'message'   => 'Tu mensaje',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'El participante :entity se ha añadido a la conversación.',\n        ],\n        'destroy'   => [\n            'success'   => 'El participante :entity se ha eliminado de la conversación.',\n        ],\n        'helper'    => 'Agregar y eliminar participantes de :name.',\n        'modal'     => 'Participantes',\n        'title'     => 'Participantes de :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nombre de la conversación',\n        'type'  => 'Dentro del juego, Preparación, Argumento...',\n    ],\n    'show'          => [\n        'is_closed' => 'La conversación se ha cerrado.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Participantes',\n    ],\n    'targets'       => [\n        'characters'    => 'Personajes',\n        'members'       => 'Miembros',\n    ],\n];\n"
  },
  {
    "path": "lang/es/cookieconsent.php",
    "content": "<?php\n\nreturn [\n    'allow'     => 'Permitir cookies',\n    'dismiss'   => 'Descartar',\n    'header'    => 'Consentimiento de uso de cookies',\n    'link'      => 'Más información',\n    'message'   => 'Kanka utiliza cookies para que tengas la mejor experiencia en nuestro sitio web.',\n    'policy'    => 'Política de cookies',\n    'reject'    => 'Declinar',\n];\n"
  },
  {
    "path": "lang/es/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nueva criatura',\n    ],\n    'fields'        => [\n        'is_dead'       => 'Muerto',\n        'is_extinct'    => 'Extinta',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_dead'       => 'Esta criatura está muerta.',\n        'is_extinct'    => 'Esta criatura está extinguida.',\n    ],\n    'lists'         => [\n        'empty' => 'Añade bestias, monstruos o seres míticos que tus héroes puedan enfrentar o entablar amistad.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Herbívoro, Acuático, Mítico',\n    ],\n];\n"
  },
  {
    "path": "lang/es/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Acciones',\n        'apply'             => 'Aplicar',\n        'back'              => 'Atrás',\n        'change'            => 'Cambiar',\n        'close'             => 'Cerrar',\n        'confirm'           => 'Confirmar',\n        'copy'              => 'Copiar',\n        'copy_mention'      => 'Copiar mención [ ]',\n        'copy_to_campaign'  => 'Copiar a campaña',\n        'disable'           => 'Desactivar',\n        'enable'            => 'Activar',\n        'explore_view'      => 'Vista anidada',\n        'export'            => 'Exportar',\n        'find_out_more'     => 'Saber más',\n        'go_to'             => 'Ir a :name',\n        'help'              => 'Ayuda',\n        'json-export'       => 'Exportar (JSON)',\n        'markdown-export'   => 'Exportar (Markdown)',\n        'move'              => 'Mover',\n        'new'               => 'Nuevo',\n        'new_child'         => 'Nuevo hijo',\n        'new_post'          => 'Nuevo artículo',\n        'next'              => 'Siguiente',\n        'open'              => 'Abrir',\n        'print'             => 'Imprimir',\n        'reorder'           => 'Reordenar',\n        'reset'             => 'Restablecer',\n        'save-changes'      => 'Guardar cambios',\n        'share'             => 'Compartir',\n        'transform'         => 'Transformar',\n    ],\n    'add'               => 'Añadir',\n    'alerts'            => [\n        'copy_attribute'    => 'Se ha copiado la mención del atributo al portapapeles.',\n        'copy_invite'       => 'El enlace de invitación a la campaña se ha copiado en el portapapeles.',\n        'copy_mention'      => 'La mención avanzada de la entidad se ha copiado al portapapeles.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Editar y etiquetar en lote',\n            'kits'          => 'Aplicar kit de propiedades',\n            'permissions'   => 'Cambiar permisos',\n        ],\n        'age'           => [\n            'helper'    => 'Puedes usar + y - antes del número para modificar la edad.',\n        ],\n        'buttons'       => [\n            'label' => 'Para la selección',\n        ],\n        'edit'          => [\n            'locations' => 'Acción para las ubicaciones',\n            'tagging'   => 'Acción para las etiquetas',\n            'tags'      => [\n                'add'       => 'Añadir',\n                'remove'    => 'Eliminar',\n            ],\n            'title'     => 'Edición múltiple',\n        ],\n        'errors'        => [\n            'admin'     => 'Solamente los administradores de la campaña pueden cambiar el estatus privado de las entidades.',\n            'general'   => 'Ha habido un error al procesar la acción. Vuelve a intentarlo o contáctanos si el problema persiste. Mensaje de error: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Ignorar',\n            ],\n            'helpers'   => [\n                'override'  => 'Si está seleccionado, los permisos de las entidades seleccionadas serán ignorados y usarán estos ajustes en su lugar. Si no está seleccionado, estos permisos se añadirán a los existentes.',\n            ],\n            'title'     => 'Cambiar permisos a varias entidades',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Aplicar una plantilla a varias entidades',\n    ],\n    'cancel'            => 'Cancelar',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Copiar entidades a otra campaña',\n        'panel'         => 'Copiar',\n        'title'         => 'Copiar \":name\" a otra campaña',\n    ],\n    'create'            => 'Crear',\n    'datagrid'          => [\n        'empty' => 'Aún no hay nada que mostrar.',\n    ],\n    'delete_modal'      => [\n        'callout'       => '¡Pssst!',\n        'confirm'       => 'Confirmar eliminación',\n        'permanent'     => 'Esta acción es permanente.',\n        'recoverable'   => 'Las entidades pueden recuperarse durante un máximo de :día días con una campaña :boosted.',\n        'title'         => 'Eliminar',\n    ],\n    'destroy_many'      => [],\n    'dynamic'           => [\n        'permission'    => 'No tienes los permisos adecuados para crear una entidad del módulo :module.',\n        'unknown'       => 'Entidad inválida del módulo :module.',\n    ],\n    'edit'              => 'Editar',\n    'errors'            => [\n        'boosted_campaigns'     => 'Esta funcionalidad solo está disponible para las :boosted.',\n        'unavailable_feature'   => 'Funcionalidad no disponible',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'archived'          => 'Archivado',\n        'calendar_date'     => 'Fecha del calendario',\n        'category'          => 'Categoría',\n        'child'             => 'Hijo',\n        'closed'            => 'Cerrado',\n        'colour'            => 'Color',\n        'copy_abilities'    => 'Copiar habilidades',\n        'copy_inventory'    => 'Copiar inventario',\n        'copy_links'        => 'Copiar notas de entidad',\n        'copy_permissions'  => 'Copiar permisos (esto anulará los valores que hayas configurado en la pestaña de permisos)',\n        'copy_posts'        => 'Copiar publicaciones (esto incluye los permisos de cada publicación)',\n        'copy_reminders'    => 'Copy Reminders',\n        'creator'           => 'Creador',\n        'date_range'        => 'Rango de fechas',\n        'excerpt'           => 'Extracto',\n        'has_entity_files'  => 'Tiene archivos',\n        'has_entry'         => 'Tiene entrada',\n        'has_image'         => 'Tiene imagen',\n        'has_posts'         => 'Tiene artículos',\n        'header_image'      => 'Imagen de cabecera',\n        'image'             => 'Imagen',\n        'is_closed'         => 'La conversación se cerrará y no aceptará más mensajes nuevos.',\n        'is_private'        => 'Privado',\n        'is_private_v3'     => 'Muestra esto solo a miembros del rol :admin-role. Esto anula cualquier otro permiso.',\n        'is_star'           => 'Fijada',\n        'locations'         => ':first en :second',\n        'name'              => 'Nombre',\n        'names'             => 'Nombres',\n        'parent'            => 'Padre',\n        'position'          => 'Posición',\n        'replace_mentions'  => 'Sustituir las menciones de atributos de la entrada por las de la nueva entidad.',\n        'template'          => 'Plantilla',\n        'tooltip'           => 'Descripción emergente',\n        'type'              => 'Tipo',\n        'visibility'        => 'Visibilidad',\n        'word-count'        => 'Número de palabras: :number',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Has alcanzado el número máximo (:max) de archivos para esta entidad.',\n            'max_size'  => 'La campaña ha alcanzado la capacidad de almacenamiento de archivos máxima.',\n            'no_files'  => 'No hay archivos.',\n        ],\n        'hints'     => [\n            'limit'         => 'Cada entidad puede tener un máximo de :max archivos.',\n            'limitations'   => 'Formatos soportados: :formats. Tamaño máximo de archivo: :size',\n        ],\n    ],\n    'filter'            => 'Filtrar',\n    'filters'           => [\n        'all'               => 'Mostrar todos los descendientes',\n        'clear'             => 'Quitar filtros',\n        'copy_helper'       => 'Usa los filtros copiados en el portapapeles para filtrar los widgets del tablero y los accesos directos.',\n        'copy_to_clipboard' => 'Copiar filtros',\n        'direct'            => 'Filtrar solo los descendientes directos',\n        'filtered'          => 'Mostrando :count de :total :entity.',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Mostrar todos los descendientes (:count)',\n                'filtered'  => 'Mostrar los descendientes directos (:count)',\n            ],\n            'paginated' => 'Alterna entre hijos directos y todos los niveles de descendientes. Los resultados se muestran paginados para un mejor rendimiento.',\n        ],\n        'mobile'            => [\n            'clear' => 'Quitar',\n            'copy'  => 'Portapapeles',\n        ],\n        'options'           => [\n            'any'       => 'Cualquiera',\n            'children'  => 'Coincide con éste o sus descendientes',\n            'exclude'   => 'Excluir',\n            'hide'      => 'Ocultar',\n            'include'   => 'Incluir',\n            'none'      => 'Nada',\n            'show'      => 'Mostrar',\n        ],\n        'show'              => 'Mostrar filtros',\n        'sorting'           => [\n            'asc'       => 'Ascendiente por :field',\n            'desc'      => 'Descendiente por :field',\n            'helper'    => 'Controla en qué orden aparecen los resultados.',\n        ],\n        'title'             => 'Filtros',\n    ],\n    'fix-this-issue'    => 'Arreglar este problema',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Añadir fecha de calendario',\n        ],\n        'copy_options'  => 'Opciones de copia',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Copia los siguientes elementos relacionados del origen a la nueva entidad.',\n        'linking'       => 'Vinculando con otras entidades',\n        'parent'        => 'Selecciona un padre del que la entidad será hijo.',\n        'per-page'      => 'Resultados por página',\n    ],\n    'hidden'            => 'Oculto',\n    'hints'             => [\n        'calendar_date'         => 'Las fechas de calendario hacen que sea más fácil filtrar las listas, y también fijan los eventos al calendario seleccionado.',\n        'image_dimension'       => 'Dimensiones recomendadas: :dimension píxeles.',\n        'image_limitations'     => 'Formatos soportados: :formats. Tamaño máximo del archivo: :size.',\n        'image_recommendation'  => 'Dimensiones recomendadas: :width por :height px.',\n        'is_star'               => 'Los elementos fijados aparecerán en el menú principal de la entidad.',\n        'kit'                   => 'El kit de propiedades seleccionado se aplicará al guardar la entrada.',\n        'tooltip'               => 'Reemplaza la descripción emergente automática con el siguiente contenido.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Creado por :name el :date',\n        'created_date_clean'    => 'Creado el :date',\n        'unknown'               => 'Desconocido',\n        'updated_clean'         => 'Última modificación por :name el :date',\n        'updated_date_clean'    => 'Última modificación el :date',\n        'view'                  => 'Historial de cambios de la entidad',\n    ],\n    'image'             => [\n        'error' => 'No hemos podido obtener la imagen. Puede que la página web no nos permita descargarla (típico de Squarespace o DeviantArt), o que el enlace ya no sea válido. Asegúrate también de que la imagen no supera los :size.',\n    ],\n    'is_private'        => 'Esta entidad es privada y solo pueden verla los administradores.',\n    'keyboard-shortcut' => 'Atajo de teclado :code',\n    'move'              => [],\n    'navigation'        => [\n        'cancel'            => 'cancelar',\n        'or_cancel'         => 'o :cancel',\n        'skip_to_content'   => 'Saltar navegación',\n    ],\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Permitir',\n                'deny'      => 'Denegar',\n                'ignore'    => 'Ignorar',\n                'remove'    => 'Quitar',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Permitir',\n                'deny'      => 'Denegar',\n                'inherit'   => 'Heredar',\n            ],\n            'delete'        => 'Eliminar',\n            'edit'          => 'Editar',\n            'private'       => 'Hacer privado',\n            'toggle'        => 'Cambiar',\n            'view'          => 'Ver',\n        ],\n        'fields'            => [\n            'member'    => 'Miembro',\n            'role'      => 'Rol',\n        ],\n        'helpers'           => [\n            'setup' => 'Desde aquí puedes afinar cómo los diferentes roles y usuarios pueden interactuar con esta entidad. :allow les permitirá hacer dicha acción; :deny se la denegará, y :inherit usará el permiso que ya tenga el rol o usuario. Un usuario con una acción puesta en :allow podrá hacerla, aunque su rol esté en :deny.',\n        ],\n        'success'           => 'Permisos guardados.',\n        'title'             => 'Permisos',\n        'too_many_members'  => 'Esta campaña tiene demasiados miembros (>10) para poder mostrarlos todos aquí. Usa el botón de permisos en la vista de entidad para controlar los permisos detalladamente.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Escoge un calendario',\n        'entry'         => 'Utiliza @ seguido de tres letras para mencionar otras entidades de la campaña.',\n        'fallback'      => 'Elija :módulo',\n        'gallery_image' => 'Elige una imagen de la galería de la campaña',\n        'image_url'     => 'Puedes subir una imagen desde una URL',\n        'journal'       => 'Elige un diario',\n        'location'      => 'Elige una localización',\n        'multiple'      => 'Elije uno o varios',\n        'name'          => 'Nombre de la entidad',\n        'organisation'  => 'Elige una organización',\n        'parent'        => 'Elija un padre',\n        'tag'           => 'Elige una etiqueta',\n        'template'      => 'Elige una plantilla',\n        'timeline'      => 'Elige una línea de tiempo',\n        'type'          => 'Tipo de la entidad',\n        'user'          => 'Elija un usuario',\n    ],\n    'relations'         => [],\n    'remove'            => 'Eliminar',\n    'reorder'           => [\n        'empty' => 'No hay elementos que reordenar.',\n    ],\n    'save'              => 'Guardar',\n    'save_and_close'    => 'Guardar y cerrar',\n    'save_and_copy'     => 'Guardar y copiar',\n    'save_and_new'      => 'Guardar y crear nuevo',\n    'save_and_update'   => 'Guardar y seguir editando',\n    'save_and_view'     => 'Guardar y ver',\n    'search'            => 'Buscar',\n    'select'            => 'Seleccionar',\n    'tabs'              => [\n        'abilities'     => 'Habilidades',\n        'inventory'     => 'Inventario',\n        'mentions'      => 'Menciones',\n        'overview'      => 'Resumen',\n        'permissions'   => 'Permisos',\n        'premium'       => 'Premium',\n        'profile'       => 'Perfil',\n        'reminders'     => 'Recordatorios',\n    ],\n    'timestamps'        => [\n        'edited'    => 'Editado hace :ago',\n    ],\n    'titles'            => [\n        'editing'   => 'Editando :name',\n        'new'       => 'Nuevo :module',\n    ],\n    'tooltips'          => [],\n    'update'            => 'Actualizar',\n    'users'             => [\n        'unknown'   => 'Desconocido',\n    ],\n    'view'              => 'Ver',\n    'visibilities'      => [\n        'admin'         => 'Admin',\n        'admin-self'    => 'Yo + Admin',\n        'all'           => 'Todos',\n        'members'       => 'Miembros',\n        'self'          => 'Solo yo',\n    ],\n];\n"
  },
  {
    "path": "lang/es/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'customise' => 'Personalizar el tablero',\n        'follow'    => 'Seguir',\n        'join'      => 'Unirse',\n        'unfollow'  => 'Dejar de seguir',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Editar',\n            'new'   => 'Nuevo tablero',\n        ],\n        'create'        => [\n            'helper'    => 'Crea un nuevo panel para :name y asigna qué roles pueden verlo o tenerlo como su panel predeterminado.',\n            'success'   => 'Tablero :name creado.',\n            'title'     => 'Nuevo tablero de campaña',\n        ],\n        'custom'        => [\n            'text'  => 'Estás editando el tablero :name de la campaña.',\n        ],\n        'default'       => [\n            'text'  => 'Estás editando el tablero por defecto de la campaña.',\n            'title' => 'Tablero por defecto',\n        ],\n        'delete'        => [\n            'success'   => 'Tablero :name eliminado.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Copiar widgets',\n            'name'          => 'Nombre del tablero',\n            'visibility'    => 'Visibilidad',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Duplica los widgets del tablero :name a este.',\n        ],\n        'pitch'         => 'Crea múltiples cuadros de mando con permisos personalizados para cada función de la campaña.',\n        'placeholders'  => [\n            'name'  => 'Nombre del tablero',\n        ],\n        'update'        => [\n            'success'   => 'Tablero :name actualizado.',\n            'title'     => 'Actualizar el tablero de campaña :name',\n        ],\n        'visibility'    => [\n            'default'   => 'Por defecto',\n            'none'      => 'Ninguna',\n            'visible'   => 'Visible',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Si sigues una campaña, esta aparecerá en el menú de cambio de campaña (arriba a la derecha) bajo tus campañas.',\n        'join'      => 'Esta campaña está abierta a nuevos miembros. Haz clic en unirse para enviar una solicitud.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Añadir widget',\n            'back_to_dashboard' => 'Volver al tablero',\n            'edit'              => 'Editar widget',\n            'new'               => 'Nuevo widget :type',\n        ],\n        'reorder'   => [\n            'helper'    => 'Arrástrame para moverme',\n            'success'   => 'Widgets reordenados.',\n        ],\n        'title'     => 'Configurar el tablero de campaña',\n        'tutorial'  => [\n            'blog'  => 'nuestro tutorial',\n            'text'  => '¿Necesitas ayuda para configurar el tablero de tu campaña? Lee :blog para obtener ayuda e inspiración.',\n        ],\n    ],\n    'title'         => 'Tablero de',\n    'welcome'       => [],\n    'widgets'       => [\n        'advanced_options_boosted'  => 'Habilita más opciones como mostrar pines con una :boosted_campaign.',\n        'calendar'                  => [\n            'actions'           => [\n                'next'      => 'Cambiar fecha al día siguiente',\n                'previous'  => 'Cambiar fecha al día anterior',\n            ],\n            'previous_events'   => 'Anterior',\n            'upcoming_events'   => 'Próximo',\n        ],\n        'campaign'                  => [\n            'helper'    => 'Este widget muestra el encabezado de la campaña. Siempre se muestra en el tablero por defecto.',\n        ],\n        'create'                    => [\n            'helper'            => 'Selecciona un tipo de widget para añadir al panel :name.',\n            'helper-default'    => 'Selecciona un tipo de widget para añadir al panel predeterminado.',\n            'success'           => 'Widget añadido al tablero.',\n            'title'             => 'Nuevo widget',\n        ],\n        'delete'                    => [\n            'success'   => 'Widget eliminado del tablero.',\n        ],\n        'fields'                    => [\n            'class'             => 'Clase CSS',\n            'dashboard'         => 'Tablero',\n            'name'              => 'Nombre personalizado del widget',\n            'optional-entity'   => 'Link a la entidad',\n            'order'             => 'Orden',\n            'size'              => 'Tamaño',\n            'width'             => 'Anchura',\n        ],\n        'helpers'                   => [\n            'class'     => 'Define una clase CSS personalizada para este widget.',\n            'filters'   => 'Haz clic para conocer las opciones de filtro disponibles.',\n        ],\n        'orders'                    => [\n            'name_asc'  => 'Ascendente por nombre',\n            'name_desc' => 'Descendiente por nombre',\n            'oldest'    => 'Modificación más antigua',\n            'recent'    => 'Recientemente modificadas',\n        ],\n        'preview'                   => [\n            'displays'  => [\n                'expand'    => 'Entrada expandible',\n                'full'      => 'Entrada completa',\n            ],\n            'fields'    => [\n                'display'   => 'Mostrar',\n            ],\n        ],\n        'random'                    => [\n            'helpers'   => [\n                'name'  => 'Puedes referenciar el nombre de la entidad aleatoria con {name}',\n            ],\n            'type'      => [\n                'all'   => 'Todos',\n            ],\n        ],\n        'recent'                    => [\n            'advanced_filter'   => 'Filtro avanzado',\n            'advanced_filters'  => [\n                'mentionless'   => 'Sin menciones (entidades que no mencionan a otras)',\n                'unmentioned'   => 'No mencionada (entidades que no son mencionadas por otras)',\n            ],\n            'all-entities'      => 'Todas las entidades',\n            'entity-header'     => 'Usar la cabecera de la entidad como imagen',\n            'filters'           => 'Filtros',\n            'help'              => 'Solo muestra la previsualización de la última entidad actualizada.',\n            'helpers'           => [\n                'entity-header'     => 'Si la entidad tiene una imagen de cabecera (funcionalidad de campañas mejoradas), puedes habilitar que este widget use dicha imagen en lugar de la imagen de la entidad.',\n                'show_attributes'   => 'Mostrar los atributos bajo la entrada',\n                'show_members'      => 'Si la entidad es una familia u organización, muestra sus miembros bajo la entrada.',\n                'show_relations'    => 'Muestra las relaciones fijadas bajo la entrada.',\n            ],\n            'show_attributes'   => 'Mostrar atributos',\n            'show_members'      => 'Mostrar miembros',\n            'show_relations'    => 'Mostrar relaciones fijadas',\n            'singular'          => 'Singular',\n            'tags'              => 'Filtra la lista de las entidades recientemente modificadas con etiquetas específicas.',\n            'title'             => 'Modificado recientemente',\n        ],\n        'tabs'                      => [\n            'advanced'  => 'Avanzado',\n            'setup'     => 'Configuración',\n        ],\n        'unmentioned'               => [\n            'title' => 'Entidades no mencionadas',\n        ],\n        'update'                    => [\n            'success'   => 'Widget modificado.',\n        ],\n        'widths'                    => [\n            '0' => 'Auto',\n            '12'=> 'Completa (100%)',\n            '3' => 'Cuarto (25%)',\n            '4' => 'Tercio (33%)',\n            '6' => 'Mitad (50%)',\n            '8' => 'Dos tercios (66%)',\n            '9' => 'Tres cuartos (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/dashboards/onboarding.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'continue'  => 'Empieza a construir',\n        'skip'      => 'Omitir por ahora',\n    ],\n    'families'      => [\n        'varren'    => [\n            'title' => 'Casa Varren',\n        ],\n    ],\n    'fields'        => [\n        'name'  => 'Nombre del mundo',\n    ],\n    'intro'         => 'Tu mundo está listo. Hazlo tuyo antes de sumergirte en él.',\n    'placeholders'  => [\n        'name'  => 'Puedes cambiar esto en cualquier momento.',\n    ],\n    'quests'        => [\n        'crown' => [\n            'title' => 'Recupera la corona fragmentada',\n        ],\n    ],\n    'roles'         => [\n        'co-writer'     => 'Coautor',\n        'contributor'   => 'Colaborador',\n    ],\n    'selection'     => [\n        'campaign'                  => 'Campaña de RPG de mesa',\n        'campaign-description'      => 'Gestiona tu campaña, personajes y sesiones para tu grupo de TTRPG.',\n        'helper'                    => '(Tu elección personalizará el contenido de demostración y el diseño de tu panel).',\n        'intro'                     => '¿Qué estás creando?',\n        'story'                     => 'Novela o universo narrativo',\n        'story-description'         => 'Desarrolla los personajes, escenarios y la línea temporal de tu historia mientras escribes.',\n        'title'                     => 'Tipo de mundo',\n        'worldbuilding'             => 'Proyecto de creación de mundos',\n        'worldbuilding-description' => 'Construye y organiza la historia, los lugares y las personas de tu propio mundo.',\n    ],\n    'splash'        => 'Bienvenido, :name 👋 Tu mundo está listo.',\n    'success'       => '¡Bienvenido! Hemos personalizado tu mundo para un inicio rápido.',\n    'title'         => 'Haz este mundo tuyo',\n    'ttrpg'         => [\n        'tags'  => [\n            'npcs'  => 'NPCs',\n        ],\n    ],\n    'widgets'       => [\n        'active-quests' => 'Misiones activas',\n    ],\n];\n"
  },
  {
    "path": "lang/es/dashboards/setup.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Añadir widget',\n    ],\n    'sections'  => [\n        'switch'    => 'Cambiar a...',\n    ],\n    'tooltips'  => [\n        'add'       => 'Haz clic para añadir un nuevo widget al panel.',\n        'switch'    => 'Haz clic para cambiar a otro panel.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/calendar.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra los próximos recordatorios.',\n    'name'          => 'Calendario',\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/campaign.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra una vista previa de la campaña.',\n    'name'          => 'Campaña',\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/header.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra un encabezado de texto.',\n    'name'          => 'Encabezado',\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/help.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra enlaces de ayuda y de la comunidad.',\n    'name'          => 'Ayuda y Comunidad',\n    'title'         => 'Ayuda y Comunidad',\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/join.php",
    "content": "<?php\n\nreturn [\n    'apply'         => '¡Solicitar unirse!',\n    'description'   => 'Muestra el botón de solicitud para unirse a la campaña junto con la introducción de la campaña.',\n    'name'          => 'Se buscan jugadores',\n    'register'      => 'Regístrate para solicitar',\n    'title'         => 'Se buscan jugadores',\n    'update'        => 'Actualizar tu solicitud',\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/onboarding.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra una lista de tareas para empezar con la creación de mundos.',\n    'name'          => 'Primeros pasos',\n    'tasks'         => [\n        'campaign'  => [\n            'name'  => 'Tu primer mundo está listo.',\n        ],\n        'character' => [\n            'helper'    => 'Añade a alguien que exista en tu mundo.',\n            'name'      => 'Crea tu primer personaje.',\n        ],\n        'invite'    => [\n            'helper'    => 'Añade personas a tu campaña con roles.',\n            'name'      => 'Invita a un amigo o coautor.',\n        ],\n        'location'  => [\n            'helper'    => 'Da contexto a tu mundo con una ubicación.',\n            'name'      => 'Crea tu primera ubicación.',\n        ],\n        'rename'    => [\n            'helper'    => 'Establece un nombre adecuado para tu campaña.',\n            'name'      => 'Renombra tu mundo.',\n        ],\n        'widgets'   => [\n            'helper'    => 'Añade o reorganiza widgets.',\n            'name'      => 'Personaliza tu panel.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/preview.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra una entidad específica.',\n    'name'          => 'Entidad seleccionada',\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/random.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra una entidad aleatoria de la campaña.',\n    'name'          => 'Entidad aleatoria',\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/recent.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra una lista de entidades modificadas recientemente.',\n    'name'          => 'Entidades modificadas recientemente',\n];\n"
  },
  {
    "path": "lang/es/dashboards/widgets/welcome.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Muestra un mensaje de bienvenida con consejos.',\n    'endings'       => [],\n    'focus'         => [\n        'text'  => '¡Aquí, soy yo!',\n        'title' => 'Hey',\n    ],\n    'intros'        => [\n        '1' => '¡:user, saluda a tu nuevo hogar para la construcción de mundos! Hemos creado tu primera campaña e incluido dos :characters y :locations de ejemplo. Estos también están visibles aquí en el panel de control de la campaña.',\n        '2' => 'Para empezar, haz clic en el botón grande :new-entity (o pulsa :letter en tu teclado), y haz clic en :characters para crear tu primer personaje. Así de fácil. Puedes encontrar todos tus personajes, ubicaciones y otras :entities en la barra lateral de la izquierda de la página.',\n        '3' => 'Éstos son nuestros 5 mejores trucos para utilizar Kanka',\n    ],\n    'name'          => 'Bienvenida',\n    'title'         => '¡Bienvenid@ a :kanka! 🎉',\n    'tricks'        => [\n        '1'         => 'Cuando escribas descripciones, no reescribas los nombres de los elementos de la campaña. En su lugar, escribe :code y tres letras para :mention otras entidades de la campaña. Estas menciones se actualizarán automáticamente cuando cambies los nombres.',\n        '2'         => 'Para editar el nombre, el tema o la imagen de la campaña, haz clic en :world en la barra lateral y, a continuación, en el botón :edit .',\n        '3'         => 'Escribe información secreta sobre las entidades como :posts en lugar de en el campo de texto principal.',\n        '4'         => 'Invita a tus amigos a la campaña haciendo clic en :world y despues, en :members. Desde ahí, puedes crear enlaces de invitación.',\n        '5'         => 'Puedes eliminar este mensaje de bienvenida y mostrar otra información en esta página (llamada panel de control). Navega hacia abajo y haz clic en el botón :button.',\n        'mention'   => 'mención',\n    ],\n];\n"
  },
  {
    "path": "lang/es/datagrids.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'back_to'   => 'Volver a :name',\n    ],\n    'modes'     => [\n        'flatten'   => 'Cambiar a un diseño plano',\n        'grid'      => 'Cambiar a la vista de cuadrícula',\n        'nested'    => 'Cambiar a un diseño anidado',\n        'table'     => 'Cambiar a la vista de tabla',\n    ],\n    'tooltips'  => [\n        'nested'    => 'Esta entidad tiene hijos. Haga clic en la imagen para verlos.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'día',\n    'days'          => 'dias',\n    'elapsed_ago'   => 'hace :duration',\n    'hour'          => 'hora',\n    'hours'         => 'horas',\n    'just_now'      => 'ahora mismo',\n    'minute'        => 'minuto',\n    'minutes'       => 'minutos',\n    'month'         => 'mes',\n    'months'        => 'meses',\n    'second'        => 'segundo',\n    'seconds'       => 'segundos',\n    'week'          => 'semana',\n    'weeks'         => 'semanas',\n    'year'          => 'año',\n    'years'         => 'años',\n];\n"
  },
  {
    "path": "lang/es/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Titulo de página',\n];\n"
  },
  {
    "path": "lang/es/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Resultados de las tiradas de dados',\n    ],\n];\n"
  },
  {
    "path": "lang/es/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nueva tirada de dados',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Tirada de dados eliminada.',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Tirada en',\n        'parameters'    => 'Parámetros',\n        'results'       => 'Resultados',\n        'rolls'         => 'Tiradas',\n    ],\n    'hints'         => [\n        'parameters'    => '¿Qué opciones de dados hay?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Resultados',\n        ],\n    ],\n    'lists'         => [\n        'empty' => 'Crea y guarda tiradas para la campaña y lleva un registro de los resultados directamente en Kanka.',\n    ],\n    'placeholders'  => [\n        'name'          => 'Nombre de la tirada de dados',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Tirada',\n        ],\n        'error'     => 'Tirada de dados fallida. No se pueden analizar los parámetros.',\n        'fields'    => [\n            'creator'   => 'Creador',\n            'date'      => 'Fecha',\n            'result'    => 'Resultado',\n        ],\n        'hint'      => 'Todas las tiradas de la plantilla han sido completadas.',\n        'success'   => 'Dados tirados.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Resultados',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/emails/activity/email.php",
    "content": "<?php\n\nreturn [\n    'first' => 'El correo electrónico de tu cuenta Kanka ha cambiado a :email.',\n    'title' => 'Correo electrónico cambiado',\n];\n"
  },
  {
    "path": "lang/es/emails/activity/password.php",
    "content": "<?php\n\nreturn [\n    'first' => 'La contraseña de tu cuenta en Kanka ha sido modificada.',\n    'help'  => 'Si no fuiste tú, ponte en contacto con nosotros en :email.',\n    'title' => 'Contraseña modificada',\n];\n"
  },
  {
    "path": "lang/es/emails/purge/first.php",
    "content": "<?php\n\nreturn [\n    'assure'            => 'Si estás utilizando regularmente tu cuenta, no te preocupes, sólo estamos eliminando cuentas y campañas que no están en uso activo.',\n    'help'              => '¿Necesitas ayuda para usar Kanka? Únete a nuestro :discord o ponte en contacto con nosotros en :email',\n    'intro_account'     => 'Nos ponemos en contacto contigo para informarte de que tu cuenta será eliminada en :amount días, ya que no la has utilizado en los últimos :duration meses.',\n    'intro_campaigns'   => 'Nos ponemos en contacto contigo para informarte de que tu cuenta y las siguientes campañas serán eliminadas en :amount días, ya que no la has utilizado en los últimos :duration meses.',\n    'keep'              => 'Si deseas mantener tu cuenta activa, conéctate dentro de los próximos :amount días.',\n    'title'             => 'Tu cuenta en Kanka será eliminada en :amount días',\n    'warning'           => [\n        'account'   => 'Una vez hecho esto, todos los datos asociados a tu cuenta, bajo :email, serán borrados permanentemente.',\n        'campaigns' => 'Una vez hecho esto, todos los datos asociados a tu cuenta, bajo email :email, así como las siguientes campañas serán eliminados permanentemente.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/emails/purge/second.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'Esto es un último recordatorio de que la cuenta Kanka bajo el email :email será eliminada en :amount días ya que no la has usado en los últimos :duration meses.',\n    'title' => 'Última advertencia: Tu cuenta en Kanka será eliminada en :amount días',\n];\n"
  },
  {
    "path": "lang/es/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'actualiza los datos de tu tarjeta',\n    'primary'   => 'Esto es un aviso automático de que su :brand **** :last está a punto de caducar.',\n    'title'     => 'Tarjeta por caducar para su suscripción',\n    'valid'     => 'Si deseas mantener tu suscripción, por favor :action.',\n];\n"
  },
  {
    "path": "lang/es/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'Si no deseas renovar tu suscripción, accede a tu cuenta Kanka y :link.',\n    'closing'   => 'Sinceramente,',\n    'dear'      => 'Estimado :name',\n    'link'      => 'cancelar tu suscripción',\n    'notice'    => 'Aviso importante sobre las renovaciones:',\n    'primary'   => 'Esto es un recordatorio automático de que vamos a realizar un cargo automático en tu :marca **** :último en :fecha, por tu suscripción a Kanka.',\n    'title'     => 'Pago anual de tu suscripción a Kanka',\n    'valid'     => 'Por favor, asegúrate de que tu tarjeta de crédito será válida en la fecha de pago.',\n];\n"
  },
  {
    "path": "lang/es/emails/subscriptions/validation.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Validación del correo electrónico de tu cuenta en Kanka.',\n];\n"
  },
  {
    "path": "lang/es/emails/validation.php",
    "content": "<?php\n\nreturn [\n    'error'     => 'Validación fallida, por favor inténtalo nuevamente.',\n    'modal'     => 'Para suscribirse es necesario disponer de una dirección de correo electrónico validada. Por favor, revisa tu bandeja de entrada para encontrar el enlace para confirmar tu correo electrónico antes de continuar con el proceso de suscripción.',\n    'success'   => 'Correo electrónico validado con éxito.',\n];\n"
  },
  {
    "path": "lang/es/emails/welcome/2024.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Feliz creación de mundos y gracias por participar en este viaje con nosotros,',\n    'header'    => '¡Bienvenido al mejor lugar para crear tu campaña, :name!',\n    'lead_1'    => 'Kanka es fruto de la pasión de jugadores de juegos de rol que querían adoptar un enfoque sencillo y colaborativo para la creación de mundos, sin sacrificar ninguna funcionalidad.',\n    'lead_2'    => 'El resultado de todo esto es Kanka. Estamos aquí para ayudarte a organizar tu campaña y dejar que te centres en dar vida a tu mundo.',\n    'ps'        => 'PD: Si quieres ponerte en contacto con nosotros, puedes encontrarnos en :discord, o en :email.',\n    'what_1'    => 'Para ayudarte a empezar, hemos creado tu primera campaña e incluido dos personajes y lugares de ejemplo. Si lo prefieres, puedes :start.',\n    'what_2'    => 'También deberías consultar estos recursos:',\n    'what_3'    => 'Nuestro :kb si tienes preguntas básicas sobre las funciones de Kanka y tu cuenta.',\n    'what_4'    => 'Los :doc lo explican todo con más detalle.',\n    'what_5'    => 'Y por último, :campaigns muestran lo que otros han hecho con Kanka.',\n    'what_new'  => 'empezar una nueva',\n    'what_now'  => '¿Y ahora qué?',\n    'why'       => 'Has recibido este correo electrónico porque te has registrado en nuestro sitio web.',\n];\n"
  },
  {
    "path": "lang/es/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    '2023'              => [\n        'basics'    => [\n            'text_1'    => 'Con una herramienta tan extensa como Kanka, puede ser difícil saber por dónde empezar o qué hacer. Nuestro :kb cubre las preguntas más básicas que puedas tener, y para más ayuda, puedes dirigirte a nuestra :doc.',\n            'title'     => 'Lo esencial',\n        ],\n        'chat'      => [\n            'text_1'    => 'Nos encanta escuchar a nuestros usuarios. Somos más activos en :discord, donde encontrarás a muchos de nuestros usuarios dedicados, un equipo de introducción, así como a los fundadores de Kanka, que pueden responder a cualquier pregunta que puedas tener. También puedes enviarnos un correo electrónico a :email.',\n            'title'     => '¿Quieres chatear?',\n        ],\n        'intro'     => [\n            'header'    => '¡Bienvenido a la mejor comunidad de worldbuilding, :name!',\n            'link'      => '¡Ve a tu mundo!',\n            'text_1'    => '¡Saluda a tu nuevo hogar de worldbuilding, :name! La comunidad está en nuestro ADN, y estamos encantados de que te unas a nosotros. Kanka es una creación de jugadores apasionados por los juegos de rol que creen en una forma simplificada y comunitaria de abordar la construcción de mundos, sin comprometer las características.',\n            'text_2'    => 'Hemos creado tu primera campaña e incluido dos personajes y localizaciones de ejemplo para ayudarte a empezar.',\n        ],\n        'preview'   => '¡Forma parte de la mejor comunidad de worldbuilding, :name!',\n    ],\n    'header'            => '¡Te damos la bienvenida a Kanka, :name!',\n    'header_sub'        => '¡Enhorabuena! Has completado el primer paso en la creación de tu mundo en :kanka.',\n    'pricing'           => 'tarifas',\n    'section_1'         => '¿Qué hago ahora?',\n    'section_11'        => 'Crea tu mundo,',\n    'section_2'         => 'El recurso más importante es :discord, donde encontrarás a muchos de nuestros dedicados usuarios, un equipo de bienvenida y al fundador de Kanka, que pueden contestar cualquier pregunta que tengas.',\n    'section_4'         => 'Nuestro :youtube tiene vídeos que cubren los básicos de Kanka. Aunque no todos los temas están explicados aún, añadimos nuevos vídeos regularmente.',\n    'section_4_v2'      => 'Nuestra :knowledge-base cubre las preguntas más básicas que puedas tener, para una ayuda más completa, puedes dirigirte a nuestra :documentation.',\n    'section_6'         => 'Contacta con nosotros',\n    'section_7'         => 'Si no encuentras respuesta a tus preguntas, o simplemente quieres ponerte en contacto, puedes encontrarnos en :facebook o enviarnos un correo a :email. Somos un pequeño equipo de 2 amigos, pero nos aseguramos de que todos los mails tengan respuesta, así que no lo dudes!',\n    'section_8'         => 'Y por último',\n    'section_9_v2'      => 'Nos hemos asegurado de que todas las funcionalidades principales de Kanka sean gratuitas, y siempre las mantendremos así. No obstante, si quieres apoyar este proyecto, puedes convertirte en suscriptor y ganar así acceso a funcionalidades adicionales, además de nuestra eterna gratitud. Infórmate más en la página de :pricing.',\n    'social_account'    => 'Si tienes problemas para iniciar sesión, ten en cuenta que estás usando un login de :provider. Puedes cambiarlo en los ajustes de tu cuenta.',\n    'title'             => 'Por dónde empezar en Kanka',\n];\n"
  },
  {
    "path": "lang/es/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Añadir habilidad',\n        'reset' => 'Restablecer usos de habilidad',\n        'sync'  => 'Añadir desde razas',\n    ],\n    'charges'   => [\n        'left'  => ':amount restante',\n    ],\n    'create'    => [\n        'helper'            => 'Vincula una o varias habilidades a :name.',\n        'success'           => 'Habilidad :ability añadida a :entity.',\n        'success_multiple'  => 'Habilidades :abilities añadidas a :entity.',\n        'title'             => 'Añadir habilidad a :name',\n    ],\n    'fields'    => [\n        'note'      => 'Nota',\n        'position'  => 'Posición',\n    ],\n    'groups'    => [\n        'unorganised'   => 'Sin organizar',\n    ],\n    'helpers'   => [\n        'note'      => 'Puedes referenciar entidades mediante las menciones avanzadas (por ejemplo, :code) y atributos de la entidad (por ejemplo, :attr) en este campo.',\n        'recharge'  => 'Restablece todos las cargas de las habilidades que se han utilizado.',\n        'sync'      => 'Importa habilidades que estén definidas en las razas del personaje.',\n    ],\n    'import'    => [\n        'errors'            => [\n            'no_race'       => 'El personaje no tiene raza.',\n            'not_character' => 'La entidad no es un personaje.',\n        ],\n        'helper'            => 'Adjunta habilidades de las siguientes razas a las que pertenece :name:',\n        'no_abilities'      => 'Actualmente no hay habilidades para importar de las razas a las que pertenece :name.',\n        'race_abilities'    => '{1} :name (:count habilidad) |[2,*] :name (:count habilidades)',\n        'success'           => '{1} Se han importado :count habilidades.|[2,*] Se han importado :count habilidades.',\n    ],\n    'recharge'  => [\n        'success'   => 'Se han restablecido todos las cargas.',\n    ],\n    'reorder'   => [\n        'parentless'    => 'Sin padre',\n        'success'       => 'Habilidades reordenadas con éxito',\n    ],\n    'show'      => [\n        'helper'    => 'Adjunta habilidades a esta entidad. Puedes modificar su visibilidad o eliminarlas más adelante. Las habilidades pertenecientes al mismo grupo se agrupan por tipos.',\n        'reorder'   => 'Reordenar',\n        'title'     => 'Habilidades de :name',\n    ],\n    'types'     => [\n        'unorganised'   => 'Las habilidades se agrupan por su campo de origen, y en su defecto se encuentran aquí.',\n    ],\n    'update'    => [\n        'success'   => 'Habilidad de la entidad :ability actualizada.',\n        'title'     => 'Habilidad de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'archetype'         => [\n        'set'       => 'Establecer como arquetipo',\n        'toggle'    => 'Estado de plantilla alternado.',\n        'unset'     => 'Quitar como plantilla',\n    ],\n    'archive'           => [\n        'success'   => ':name ha sido archivado.',\n        'title'     => 'Archivar',\n    ],\n    'convert'           => 'Convertir módulo',\n    'copy-campaign'     => 'Copiar a campaña',\n    'json-export'       => 'Exportar a JSON',\n    'markdown-export'   => 'Exportar a Markdown',\n    'templates'         => [],\n    'tooltips'          => [\n        'edit'  => 'Editar esta entidad',\n    ],\n    'transfer'          => 'Transferir a campaña',\n    'unarchive'         => [\n        'success'   => ':name ya no está archivado.',\n        'title'     => 'Desarchivar',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Añadir un alias',\n    ],\n    'create'        => [\n        'helper'    => 'Crea un alias para :name, que permitirá encontrarle en la búsqueda global y mediante menciones :code.',\n        'success'   => 'Alias :name añadido a :entity.',\n        'title'     => 'Añadir un alias a :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Alias :name eliminado.',\n    ],\n    'fields'        => [\n        'name'  => 'Nombre',\n    ],\n    'helpers'       => [\n        'primary'   => 'Añade uno o más alias a una entidad para encontrarla mediante la búsqueda global (en la barra superior) o las menciones.',\n    ],\n    'limit'         => 'La campaña ha alcanzado el límite de alias disponibles. Para obtener alias ilimitados, desbloquea las funciones premium.',\n    'pitch'         => 'Crea alias para esta entidad que te permitan encontrarla fácilmente a través de la búsqueda y de menciones.',\n    'placeholders'  => [\n        'name'  => 'Nuevo alias',\n    ],\n    'unboosted'     => [],\n    'update'        => [\n        'success'   => 'Alias :name de :entity actualizado.',\n        'title'     => 'Actualizar alias de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'alias' => 'Alias',\n        'file'  => 'Archivo',\n        'link'  => 'Enlace',\n    ],\n    'copy_alias'    => [\n        'success'   => 'Mención del alias copiada en el portapapeles.',\n        'title'     => 'Haz clic para copiar la mención del alias al portapapeles.',\n    ],\n    'show'          => [\n        'title' => 'Archivos de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'apply_kit'     => 'Aplicar un kit de propiedades',\n        'load'          => 'Cargar',\n        'manage'        => 'Administrar',\n        'more'          => 'Más opciones',\n        'remove_all'    => 'Eliminar todos',\n        'save_and_edit' => 'Aplicar y editar',\n        'save_and_story'=> 'Aplicar y ver',\n        'show_hidden'   => 'Mostrar atributos ocultos',\n        'toggle_privacy'=> 'Privado/Público',\n    ],\n    'errors'        => [\n        'api'                   => 'Datos no válidos',\n        'loop'                  => '¡Hay un bucle infinito en el cálculo de este atributo!',\n        'no_attribute_selected' => 'Selecciona uno o varios atributos primero.',\n        'too_many_v2'           => 'Se ha alcanzado el máximo de campos (:count/:max). Elimina algunos atributos primero antes de poder añadir más.',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Plantillas de la comunidad',\n        'is_private'            => 'Atributos privados',\n        'is_star'               => 'Fijado',\n        'preferences'           => 'Preferencias',\n        'property'              => 'Propiedad',\n        'value'                 => 'Valor',\n    ],\n    'filters'       => [\n        'name'  => 'Nombre del atributo',\n        'value' => 'Valor del atributo',\n    ],\n    'helpers'       => [\n        'delete_all'    => '¿Seguro que quieres eliminar todos los atributos de esta entidad?',\n        'is_private'    => 'Sólo permite ver los atributos de esta entidad a los miembros del rol :admin-role.',\n        'setup'         => 'Puedes representar elementos como los PV o la inteligencia de un personaje mediante los atributos. Puedes añadirlos manualmente desde el botón de :manage, o aplicarlos desde una plantilla de atributos.',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Atributos de :entity actualizados.',\n        'title'     => 'Atributos de :name',\n    ],\n    'labels'        => [\n        'checkbox'  => 'Nombre de la casilla',\n        'name'      => 'Nombre del atributo',\n        'section'   => 'Nombre de la sección',\n        'value'     => 'Valor del atributo',\n    ],\n    'live'          => [\n        'success'   => 'Atributo :attribute actualizado.',\n        'title'     => 'Actualizando :attribute',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Número de conquistas, Iniciativa, Población...',\n        'block'     => 'Nombre del bloque',\n        'checkbox'  => 'Nombre de la casilla',\n        'icon'      => [\n            'class' => 'Clase de FontAwesome o RPG Awesome: fas fa-users',\n            'name'  => 'Nombre del icono',\n        ],\n        'number'    => 'Valor numérico',\n        'random'    => [\n            'name'  => 'Nombre del atributo',\n            'value' => '1-100 o una lista de valores separados por comas',\n        ],\n        'section'   => 'Nombre de la sección',\n        'value'     => 'Valor del atributo',\n    ],\n    'ranges'        => [\n        'text'  => 'Opciones disponibles: :options',\n    ],\n    'sections'      => [\n        'unorganised'   => 'Sin organizar',\n    ],\n    'show'          => [\n        'hidden'    => 'Atributos ocultos',\n        'title'     => 'Atributos de :name',\n    ],\n    'template'      => [\n        'load'      => [\n            'success'   => 'Plantilla cargada',\n            'title'     => 'Cargar desde plantilla',\n        ],\n        'pitch'     => 'Carga atributos desde una plantilla de atributos o desde plugins instalados desde :plugin.',\n        'success'   => 'Plantilla de atributos :name aplicada a :entity',\n        'title'     => 'Aplicar plantilla de atributos a :name',\n    ],\n    'title'         => 'Atributos',\n    'toasts'        => [\n        'bulk_deleted'  => 'Atributos eliminados',\n        'bulk_privacy'  => 'Privacidad de atributos cambiada',\n        'lock'          => 'Atributo bloqueado',\n        'pin'           => 'Atributo fijado',\n        'unlock'        => 'Atributo desbloqueado',\n        'unpin'         => 'Atributo no fijado',\n    ],\n    'tutorials'     => [],\n    'types'         => [\n        'attribute' => 'Atributo',\n        'block'     => 'Bloque',\n        'checkbox'  => 'Casilla',\n        'icon'      => 'Icono',\n        'kits'      => 'Kits',\n        'number'    => 'Número',\n        'random'    => 'Aleatorio',\n        'section'   => 'Sección',\n        'text'      => 'Texto multilínea',\n    ],\n    'update'        => [\n        'success'   => 'Atributos de :entity actualizados.',\n    ],\n    'visibility'    => [\n        'entry'     => 'El atributo se muestra en el menú de la entidad.',\n        'private'   => 'Atributo visible solo para miembros con el rol \"Admin\".',\n        'public'    => 'Atributo visible por todos los miembros.',\n        'tab'       => 'El atributo se muestra solo en la pestaña de Atributos.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/children.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Hijos',\n];\n"
  },
  {
    "path": "lang/es/entities/events.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Crea un recordatorio para vincular :name a un calendario.',\n    ],\n    'fields'    => [\n        'type'  => 'Tipo de evento',\n    ],\n    'helpers'   => [\n        'characters'    => 'Al seleccionar fecha de nacimiento o de fallecimiento, se calculará automáticamente la edad de este personaje. :more',\n        'founding'      => 'Al establecer el tipo como :type se calculará automáticamente la antigüedad de la entidad desde su fundación.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Añadir recordatorio',\n        ],\n        'title'     => 'Recordatorios de :name',\n    ],\n    'types'     => [\n        'birth'     => 'Nacimiento',\n        'birthday'  => 'Cumpleaños',\n        'death'     => 'Muerte',\n        'founded'   => 'Fundación',\n        'primary'   => 'Primario',\n    ],\n    'years-ago' => '{1} :count año atrás|[2,*] :count años atrás',\n];\n"
  },
  {
    "path": "lang/es/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [\n        'max'       => [\n            'helper'    => 'No puedes adjuntar más archivos a menos que elimines uno existente.',\n            'limit'     => 'Esta entidad ha alcanzado su límite de archivos.',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Has alcanzado el límite de :limit archivos para esta entidad.',\n            'premium'   => 'Actualiza a una campaña premium para adjuntar archivos ilimitados y desbloquear aún más flexibilidad creativa.',\n            'upgrade'   => 'Actualiza a una campaña premium para adjuntar hasta :limit archivos y desbloquear aún más flexibilidad creativa.',\n        ],\n    ],\n    'create'            => [\n        'helper'            => 'Agrega un archivo a :name. El archivo contará para el límite de almacenamiento de la galería.',\n        'success_plural'    => '{1} Archivo :name añadido.|[2,*] :count archivos añadidos.',\n        'title'             => 'Nuevo archivo para :entity',\n    ],\n    'destroy'           => [\n        'success'   => 'Archivo :file eliminado.',\n    ],\n    'fields'            => [\n        'file'  => 'Archivo',\n        'files' => 'Archivos',\n        'name'  => 'Nombre del archivo',\n    ],\n    'max'               => [\n        'title' => 'Límite alcanzado',\n    ],\n    'update'            => [\n        'success'   => 'Archivo :file actualizado.',\n        'title'     => 'Actualizar archivo',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'               => [\n        'change_focus'      => 'Cambiar encuadre',\n        'change_visibility' => 'Cambiar visibilidad',\n        'copy_url'          => 'Copiar URL de imagen',\n        'copy_url_success'  => 'URL de imagen copiada al portapapeles.',\n        'replace_image'     => 'Reemplazar imagen',\n        'save-replace'      => 'Reemplazar imagen',\n        'save_focus'        => 'Guardar encuadre',\n        'view'              => 'Ver imagen',\n    ],\n    'call-to-action'        => 'Haz clic en la imagen de la entidad para establecer su punto de enfoque en lugar de utilizar la suposición automatica.',\n    'focus'                 => [\n        'breadcrumb'    => 'Encuadre de la imagen',\n        'helper'        => 'Haz clic en la imagen para definir el encuadre. Haz clic en el encuadre para eliminarlo.',\n        'panel_title'   => 'Encuadre de la imagen',\n        'success'       => 'Encuadre de la imagen actualizado.',\n        'title'         => 'Encuadre de la imagen de :name',\n        'unboosted'     => 'Definir el encuadre de una imagen es una funcionalidad reservada para las :boosted-campaigns.',\n        'warning'       => 'El punto de enfoque de las imágenes de la :gallery es compartido por todas las entidades que utilizan esa misma imagen.',\n    ],\n    'gallery_permissions'   => [\n        'admin'     => 'Esta imagen de la galería sólo es visible para los miembros del rol :admin de la campaña.',\n        'adminself' => 'Esta imagen de la galería sólo es visible para :creator y los miembros del rol :admin de la campaña.',\n        'member'    => 'Esta imagen de la galería sólo es visible para los miembros de la campaña.',\n        'self'      => 'Esta imagen de la galería sólo es visible para ti.',\n    ],\n    'replace'               => [\n        'breadcrumb'    => 'Reemplazar imagen',\n        'panel_title'   => 'Reemplazar la imagen de la entidad',\n        'success'       => 'Imagen reemplazada.',\n        'title'         => 'Reemplazar la imagen de :name',\n    ],\n    'visibility'            => [\n        'helper'    => 'Cambia la visibilidad de la imagen de la galería, controlando quién puede verla.',\n        'updated'   => 'Visibilidad de la imagen actualizada.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'copy_from_entity'  => 'Copiar desde otra entidad',\n        'copy_inventory'    => 'Copiar inventario',\n        'generate'          => 'Generar',\n        'multiple'          => 'Añadir elementos',\n    ],\n    'copy'              => [\n        'helper'    => 'Copiar todo el inventario de una entidad a :name.',\n    ],\n    'create'            => [\n        'helper'        => 'Agrega un objeto al inventario de :name. Opcionalmente, puede estar vinculado a un objeto existente de la campaña.',\n        'success'       => 'Objeto :item añadido a :name',\n        'success_bulk'  => '{0} No se ha añadido ningún objeto a :entity.|{1} Se ha añadido :count objeto a :entity.|[2,*] Se han añadido :count objetos a :entity.',\n        'title'         => 'Añade un objeto a :name',\n    ],\n    'default_position'  => 'Sin organizar',\n    'destroy'           => [\n        'success'           => 'Objeto :item eliminado de :entity.',\n        'success_position'  => 'Elementos en :position eliminados de :entity.',\n    ],\n    'fields'            => [\n        'amount'                => 'Cantidad',\n        'copy_entity_entry_v2'  => 'Utilizar entrada del objeto',\n        'description'           => 'Observaciones',\n        'is_equipped'           => 'Equipado',\n        'item_amount'           => 'Número de objetos',\n        'match_all'             => 'Coincidir todas las etiquetas',\n        'name'                  => 'Nombre',\n        'position'              => 'Localización',\n        'qty'                   => 'Cantidad',\n        'replace'               => 'Reemplazar inventario',\n    ],\n    'generate'          => [\n        'helper'    => 'Generar un inventario para :name basado en los objetos existentes en la campaña.',\n        'title'     => 'Generar inventario',\n    ],\n    'helpers'           => [\n        'amount'                => 'Número de objetos',\n        'copy_entity_entry_v2'  => 'Mostrar la entrada del objeto en lugar de la descripción personalizada.',\n        'description'           => 'Añadir una descripción personalizada al objeto',\n        'is_equipped'           => 'Marca estos objetos como equipados.',\n        'name'                  => 'Da nombre al objeto. Se requiere un nombre si no se selecciona ningún objeto',\n        'replace'               => 'Reemplaza el inventario actual por el generado.',\n    ],\n    'placeholders'      => [\n        'amount'        => 'Cualquier cantidad',\n        'description'   => 'Usado, dañado, roto',\n        'name'          => 'Requerido si no se selecciona ningún objeto',\n        'position'      => 'Equipado, Mochila, Almacenamiento, Banco...',\n    ],\n    'show'              => [\n        'helper'    => 'Las entidades pueden tener objetos asociados a ellas, creando así un inventario.',\n        'title'     => 'Inventario de :name',\n        'unsorted'  => 'Sin clasificar',\n    ],\n    'togglers'          => [\n        'hide'  => [\n            'price'     => 'Ocultar precio',\n            'quantity'  => 'Ocultar cantidad',\n            'size'      => 'Ocultar tamaño',\n            'weight'    => 'Ocultar peso',\n        ],\n        'show'  => [\n            'price'     => 'Mostrar precio',\n            'quantity'  => 'Mostrar cantidad',\n            'size'      => 'Mostrar tamaño',\n            'weight'    => 'Mostrar peso',\n        ],\n    ],\n    'tooltips'          => [\n        'equipped'  => 'Este objeto está equipado',\n    ],\n    'tutorials'         => [\n        'all'   => 'Lleva un registro de lo que :name posee, almacena u ofrece añadiendo objetos a este inventario.',\n    ],\n    'update'            => [\n        'success'   => 'Objeto :item actualizado en :entity.',\n        'title'     => 'Actualizar un objeto de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Añadir un enlace',\n    ],\n    'call-to-action'    => 'Añade enlaces a recursos externos en esta entidad, como a DnDBeyond, y se mostrarán directamente en la vista general de la entidad.',\n    'create'            => [\n        'helper'    => 'Agrega un enlace externo a :name, por ejemplo, a su página de DnDBeyond.',\n        'success'   => 'Enlace :name añadido a :entity.',\n        'title'     => 'Añadir un enlace a :name',\n    ],\n    'destroy'           => [\n        'success'   => 'Enlace :name eliminado de :entity.',\n    ],\n    'fields'            => [\n        'icon'      => 'Icono',\n        'name'      => 'Nombre',\n        'position'  => 'Posición',\n        'url'       => 'URL',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'Estoy segur@',\n            'trust'     => 'No me preguntes otra vez',\n        ],\n        'description'   => 'Este enlace le llevará a :link. ¿Estás segur@ de que deseas ir allí?',\n        'title'         => 'Saliendo de Kanka',\n    ],\n    'helpers'           => [\n        'icon'      => 'Se puede personalizar el icono mostrado en el enlace con cualquiera de los iconos gratuitos de :fontawesome. Si se deja en blanco, se usará el icono por defecto.',\n        'parent'    => 'Mostrar este enlace rápido después de un elemento de la barra lateral, en lugar de en la sección de enlaces rápidos de la barra lateral.',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'Las campañas mejoradas pueden añadir enlaces en las entidades que dirigen a webs externas.',\n        'title'     => 'Enlaces de :name',\n    ],\n    'unboosted'         => [],\n    'update'            => [\n        'success'   => 'Enlace :name actualizado.',\n        'title'     => 'Actualizar enlace de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'        => 'Crear',\n        'create_post'   => 'Entrada creada \":post\"',\n        'delete'        => 'Eliminar',\n        'delete_post'   => 'Entrada eliminada',\n        'reorder_post'  => 'Entradas reordenadas',\n        'restore'       => 'Restaurar',\n        'reveal'        => 'Mostrar detalles',\n        'update'        => 'Actualizar',\n        'update_post'   => 'Entrada \":post\" actualizada',\n        'view'          => 'Ver cambios',\n    ],\n    'call-to-action'    => 'Registros de cambios completos de hasta :amount días en campañas premium.',\n    'fields'            => [\n        'action'    => 'Acción',\n        'date'      => 'Fecha',\n    ],\n    'filters'           => [\n        'keywords'  => 'Palabras clave',\n    ],\n    'impersonated'      => 'Hecho pasar por :name',\n    'none'              => 'Ninguno',\n    'show'              => [\n        'title' => 'Historial de :name',\n    ],\n    'tooltips'          => [\n        'post'  => 'Ir a la publicación',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Esta entidad aparece en los siguientes mapas.',\n    'title'     => 'Puntos de mapa de :name',\n];\n"
  },
  {
    "path": "lang/es/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Elemento',\n        'type'      => 'Tipo',\n    ],\n    'helper'            => 'La lista siguiente contiene todas las entidades que mencionan esta entidad en el campo de \"Presentación\".',\n    'mentioned_in_v2'   => 'Esta entidad se menciona en :count entidades, artículos o campañas. :more',\n    'see_more'          => 'Ver más detalles',\n    'show'              => [\n        'title' => 'Menciones de :name',\n    ],\n    'title'             => 'Entidad mencionada',\n];\n"
  },
  {
    "path": "lang/es/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'      => 'Copiar',\n        'transfer'  => 'Transferir',\n    ],\n    'errors'        => [\n        'permission'        => 'No tienes permiso para crear entidades de este tipo en la campaña objetivo.',\n        'permission_update' => 'No tienes permiso para mover esta entidad.',\n        'same_campaign'     => 'Tienes que seleccionar otra campaña adonde mover la entidad.',\n        'unknown_campaign'  => 'Campaña desconocida.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Campaña objetivo',\n        'copy'          => 'Hacer una copia',\n        'select_one'    => 'Seleccionar campaña',\n    ],\n    'helpers'       => [\n        'copy'  => 'Crea una copia de la entidad en la campaña destino.',\n    ],\n    'panel'         => [\n        'description'           => 'Selecciona una campaña adonde quieras mover o copiar esta entidad.',\n        'description_bulk_copy' => 'Selecciona una campaña adonde quieras copiar las entidades seleccionadas.',\n        'title'                 => 'Mover o copiar una entidad a otra campaña',\n    ],\n    'success'       => 'Entidad :name movida.',\n    'success_copy'  => 'Entidad :name copiada.',\n    'title'         => 'Mover :name',\n    'warnings'      => [\n        'custom'    => 'Esta entidad no es de un módulo por defecto, sino de un tipo de entidad personalizada \":module\". Se creará como una entidad Nota en la campaña de destino.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Nuevo post',\n        'add_role'  => 'Añadir rol',\n        'add_user'  => 'Añadir usuario',\n    ],\n    'collapsed'     => [\n        'closed'    => 'El post se reduce sólo a la cabecera',\n        'open'      => 'El post está expandido',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Copiar mención avanzada',\n        'copy_with_name'    => 'Copiar mención avanzada con el nombre del post',\n        'success'           => 'Se ha copiado la mención avanzada de este post.',\n    ],\n    'create'        => [\n        'success'   => 'Se ha añadido el post \":name\" a :entity.',\n    ],\n    'destroy'       => [\n        'success'   => 'Se ha eliminado el post \":name\" de :entity.',\n    ],\n    'edit'          => [\n        'success'   => 'Se ha actualizado el post \":name\" de :entity.',\n    ],\n    'fields'        => [\n        'creator'   => 'Creador',\n        'display'   => 'Mostrar',\n        'name'      => 'Nombre',\n        'position'  => 'Posición',\n    ],\n    'footer'        => [\n        'created'   => 'Creado por :user el :date',\n        'updated'   => 'Actualizad por :user el :date',\n    ],\n    'hint'          => 'Aquí puedes añadir toda aquella información que no acaba de encajar en los campos por defecto de la entidad, o que quieres mantener en privado.',\n    'hints'         => [\n        'reorder'   => 'Puedes reordenar los posts de una entidad haciendo clic en el icono de :icono en la cabecera de la entidad.',\n    ],\n    'index'         => [],\n    'move'          => [\n        'copy'          => 'Conserva una copia del post en la entidad actual.',\n        'copy_success'  => 'Post :name movido a :entity exitosamente.',\n        'copy_title'    => 'Guarda una copia',\n        'description'   => 'Selecciona una entidad a la que mover este mensaje',\n        'entity'        => 'Entidad objetivo',\n        'move_success'  => 'Post :name movido a :entity con éxito.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nombre del post, observación...',\n    ],\n    'show'          => [\n        'advanced'  => 'Permisos avanzados',\n        'title'     => 'Post :name de :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'Colapsado',\n        'expanded'  => 'Expandido',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'Esta entidad está configurada como privada. Aún se pueden definir permisos personalizados, pero mientras la entidad sea privada, éstos serán ignorados y sólo los miembros del rol :admin de la campaña podrán ver la entidad.',\n        'warning'   => 'Advertencia',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'Ningún rol o usuario fuera de los administradores de campaña tiene acceso a esta entidad.',\n        'manage'            => 'Administrar permisos',\n        'screen-reader'     => 'Abrir la configuración de privacidad',\n        'success'           => [\n            'private'   => ':entity ahora está oculta.',\n            'public'    => ':entity es ahora visible.',\n        ],\n        'title'             => 'Permisos',\n        'viewable-by'       => 'Visible por',\n    ],\n    'toggle'    => [\n        'label'     => 'Privacidad de la entidad',\n        'private'   => [\n            'description'   => 'Visible solo para los miembros con el rol :admin.',\n            'title'         => 'Privado',\n        ],\n        'public'    => [\n            'description'   => 'Visible para los siguientes roles y miembros.',\n            'title'         => 'Público',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Enlaces',\n    'title' => 'Chinchetas',\n];\n"
  },
  {
    "path": "lang/es/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Editar perfil',\n    ],\n    'aliases'   => 'Alias',\n    'history'   => 'Historial',\n    'show'      => [\n        'tab_name'  => 'Perfil',\n        'title'     => 'Perfil de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'La entidad forma parte de las siguientes misiones.',\n    'title'     => 'Misiones de :name',\n];\n"
  },
  {
    "path": "lang/es/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Explorador de relaciones',\n        'mode-table'    => 'Tabla de relaciones y conexiones',\n    ],\n    'bulk'              => [\n        'delete'    => '{1} Se ha eliminado :count relación.|[2,*] Se han eliminado :count relaciones.',\n        'fields'    => [\n            'delete_mirrored'   => 'Borrar duplicado',\n            'unmirror'          => 'Desenlazar duplicado',\n            'update_mirrored'   => 'Actualizar duplicado',\n        ],\n        'helpers'   => [\n            'delete_mirrored'   => 'Elimina también las conexiones duplicadas.',\n            'unmirror'          => 'Desenlazar conexiones duplicadas.',\n            'update_mirrored'   => 'Actualizar las conexiones duplicadas.',\n        ],\n        'success'   => [\n            'editing'           => '{1} Se ha actualizado :count relación.|[2,*] Se han actualizado :count relaciones.',\n            'editing_partial'   => '{1} Se ha eliminado :count/:total relación.|[2,*] Se han eliminado :count/:total relaciones.',\n        ],\n    ],\n    'call-to-action'    => 'Explore visualmente las conexiones de esta entidad y cómo se relaciona con el resto de la campaña.',\n    'connections'       => [\n        'map_point'         => 'Punto de mapa',\n        'mention'           => 'Mención',\n        'quest_element'     => 'Elemento de una misión',\n        'timeline_element'  => 'Elemento de una línea de tiempo',\n    ],\n    'create'            => [\n        'helper'        => 'Crea una conexión entre :name y una o varias entidades.',\n        'new_title'     => 'Nueva relación',\n        'success_bulk'  => '{1} Se ha añadido :count conexión a :entity.|[2,*] Se han añadido :count conexiones a :entity.',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'Esta conexión se refleja en la entidad de destino. Seleccione esta opción para eliminar también la conexión duplicada.',\n        'option'    => 'Borrar conexión duplicada',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'Esto también eliminará la conexión duplicada permanentemente.',\n        'success'   => 'Relación :target eliminada de :entity.',\n    ],\n    'fields'            => [\n        'attitude'          => 'Actitud',\n        'is_pinned'         => 'Fijado',\n        'link'              => 'Enlace recíproco',\n        'mirror_relation'   => 'Rol recíproco',\n        'owner'             => 'Fuente',\n        'role'              => 'Rol',\n        'target'            => 'Objetivo',\n        'targets'           => 'Entidades objetivo',\n        'two_way'           => 'Reflejar relación',\n        'unmirror'          => 'Desenlaza esta conexión.',\n    ],\n    'filters'           => [\n        'connection'    => 'Relación de conexión',\n        'name'          => 'Objetivo de la conexión',\n    ],\n    'helper'            => 'Crea relaciones entre entidades y configura su actitud y visibilidad. Las relaciones también se pueden fijar al menú de la entidad.',\n    'helpers'           => [\n        'description'       => 'Detalla la naturaleza de la conexión entre las dos entidades.',\n        'link'              => 'Crear una relación coincidente en los objetivos.',\n        'mirror_relation'   => 'Cómo ve el objetivo esta entrada (dejar en blanco para copiar lo anterior).',\n        'no_relations'      => 'Esta entidad no tiene actualmente ninguna conexión con otras entidades de la campaña.',\n    ],\n    'hints'             => [\n        'attitude'  => 'Aquí se puede definir opcionalmente el orden en el que las relaciones aparecen por defecto de forma descendiente.',\n        'two_way'   => 'Al reflejar una relación, ésta se copiará en el objetivo seleccionado. Sin embargo, si editas una, la otra no se verá afectada.',\n    ],\n    'index'             => [\n        'title' => 'Relaciones',\n    ],\n    'linked'            => [\n        'break'             => 'Romper enlace',\n        'helper'            => 'Esta relación está sincronizada con :link',\n        'label'             => 'Relación vinculada',\n        'unmirror-helper'   => 'Convertir esto en una relación independiente no eliminará nada.',\n    ],\n    'options'           => [\n        'mentions'          => 'Relaciones + relacionadas + menciones',\n        'only_relations'    => 'Sólo conexión directa',\n        'related'           => 'Relaciones + relacionadas',\n        'relations'         => 'Relaciones',\n        'show'              => 'Mostrar',\n    ],\n    'panels'            => [\n        'related'   => 'Eliminar',\n    ],\n    'placeholders'      => [\n        'attitude'  => 'Desde -100 hasta 100, siendo 100 muy positiva.',\n        'role'      => 'Rival, Mejor amigo, Hermano',\n    ],\n    'show'              => [\n        'title' => 'Relaciones de :name',\n    ],\n    'types'             => [\n        'family_member'         => 'Familiar',\n        'organisation_member'   => 'Miembro de organización',\n    ],\n    'update'            => [\n        'success'   => 'Relación :target de :entity actualizada.',\n        'title'     => 'Actualizar relaciones de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/reminders.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'       => 'Vincular a un calendario',\n        'remove'    => 'Eliminar fecha del calendario',\n    ],\n    'helpers'   => [\n        'pitch' => 'Deja atrás el calendario del mundo real y vincula esta entidad a un calendario de tu mundo para mantenerte inmerso en tu línea de tiempo ficticia.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/share.php",
    "content": "<?php\n\nreturn [\n    'buttons'   => [\n        'copy'          => 'Copiar enlace',\n        'make_public'   => 'Hacer pública la campaña',\n    ],\n    'fields'    => [\n        'campaign_access'   => 'Configuración de campaña',\n        'visibility_mode'   => 'Ajustar visibilidad',\n    ],\n    'helpers'   => [\n        'campaign_access'               => 'Para compartir esto con el público, primero debes hacer pública la campaña.',\n        'entity_permissions_warning'    => 'Hacer pública esta campaña permite que cualquiera la vea. Las entradas marcadas como privadas permanecen ocultas.',\n        'hidden_explanation'            => 'La campaña es pública, pero esta entrada está actualmente oculta para los no miembros.',\n        'hidden_unlisted_explanation'   => 'La campaña no está listada; solo las personas con el enlace pueden encontrarla.',\n        'member-link'                   => 'Compartir esto solo con miembros',\n        'private_explanation'           => 'Solo los miembros pueden acceder a esta entrada.',\n        'public_explanation'            => 'Tanto la campaña como esta entrada son públicas. Cualquiera con el enlace puede verlas.',\n        'unlisted_explanation'          => 'La campaña no está listada y esta entrada es visible. Cualquiera con el enlace puede verla.',\n    ],\n    'labels'    => [\n        'member_link'   => 'Enlace solo para miembros',\n        'public_link'   => 'Enlace público',\n        'share_link'    => 'Enlace para compartir',\n    ],\n    'options'   => [\n        'keep_private'          => 'Mantener campaña privada',\n        'make_all_public'       => 'Mostrar todo :module a no miembros',\n        'make_campaign_public'  => 'Hacer campaña pública',\n        'make_entity_public'    => 'Mostrar :name a no miembros',\n    ],\n    'status'    => [\n        'hidden'    => 'No visible para no miembros',\n        'private'   => 'Esta campaña es privada',\n        'public'    => 'Visible para no miembros',\n        'unlisted'  => 'Visible para cualquiera con el enlace',\n    ],\n    'success'   => [\n        'copied'            => '¡Enlace copiado al portapapeles!',\n        'copied_members'    => 'Enlace solo para miembros copiado.',\n        'copied_public'     => 'Enlace público copiado, cualquiera con el enlace puede ver la entrada.',\n        'updated'           => 'Configuración de visibilidad actualizada exitosamente.',\n    ],\n    'title'     => 'Compartir entrada',\n];\n"
  },
  {
    "path": "lang/es/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'      => 'Colapsar todo',\n        'expand_all'        => 'Expandir todo',\n        'load_more'         => 'Cargar más',\n        'login_for_more'    => 'Inicia sesión para ver más entradas',\n    ],\n    'reorder'   => [\n        'helper'        => 'Arrastra y suelta las publicaciones para reordenarlas en la página de resumen de la entidad.',\n        'icon_tooltip'  => 'Reordenar notas',\n        'panel_title'   => 'Reordenar notas',\n        'save'          => 'Guardar nuevo orden',\n        'success'       => 'Notas reordenadas.',\n    ],\n    'update'    => [\n        'title' => 'Actualizar entrada de :entity',\n    ],\n    'warning'   => [],\n];\n"
  },
  {
    "path": "lang/es/entities/tags.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Agrega o elimina etiquetas en :name.',\n        'title'     => 'Agrega o elimina etiquetas',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Las líneas de tiempo que tienen elementos vinculados a esta entidad se muestran a continuación.',\n    'show'      => [\n        'title' => 'Líneas de tiempo de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entities/tooltips.php",
    "content": "<?php\n\nreturn [\n    'formatting'    => 'HTML compatible: texto (:text), estructura (:layout), listas/tablas e imágenes.',\n    'helper'        => 'Sobrescribe el texto de vista previa generado automáticamente que se muestra al pasar el cursor sobre los enlaces a esta entidad.',\n    'label'         => 'Resumen',\n    'placeholder'   => 'Describe brevemente esta entidad en una o dos frases.',\n    'premium'       => 'Desbloquea la posibilidad de personalizar el resumen al pasar el cursor con una :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/es/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'convert'   => 'Convertir a módulo',\n    ],\n    'bulk'          => [\n        'errors'    => [\n            'unknown_type'  => 'Tipo de entidad desconocido o no válido.',\n        ],\n        'success'   => '{1} Se ha transformado :count entidad al nuevo tipo: :type.|[2,*] Se han transformado :count entidades al nuevo tipo: :type.',\n    ],\n    'confirm'       => [\n        'checkbox'  => 'Entiendo que al transformar :entity a otro módulo, se perderán los siguientes elementos:',\n        'label'     => 'Confirmar pérdida de datos',\n    ],\n    'documentation' => 'Documentación: Conversión de módulos de entidades',\n    'fields'        => [\n        'current'       => 'Módulo actual',\n        'select_one'    => 'Elige una',\n        'target'        => 'Nuevo tipo de entidad',\n    ],\n    'panel'         => [\n        'bulk_description'  => 'Cambia el tipo de entidad a múltiples entidades. Ten en cuenta que algunos datos podrían perderse debido a que hay diferentes campos en otras entidades.',\n        'bulk_title'        => 'Transformar entidades en lota',\n        'title'             => 'Transformar entidad',\n        'warning'           => 'Algunos datos pueden no transferirse si el nuevo módulo utiliza campos diferentes.',\n    ],\n    'success'       => 'Entidad :name transformada.',\n    'title'         => 'Transformar :name',\n];\n"
  },
  {
    "path": "lang/es/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Habilidades',\n    'ability'               => 'Habilidad',\n    'article'               => 'Artículo',\n    'articles'              => 'Artículos',\n    'attribute_template'    => 'Plantilla de atributo',\n    'attribute_templates'   => 'Plantillas de atributos',\n    'bookmark'              => 'Marcar como favorito',\n    'bookmarks'             => 'Marcadores',\n    'calendar'              => 'Calendario',\n    'calendars'             => 'Calendarios',\n    'campaign'              => 'Campaña',\n    'campaigns'             => 'Campañas',\n    'character'             => 'Personaje',\n    'characters'            => 'Personajes',\n    'conversation'          => 'Conversación',\n    'conversations'         => 'Conversaciones',\n    'creator'               => [\n        'actions'                   => [\n            'create'    => 'Crear :type',\n            'full'      => 'Ir al formulario completo',\n            'more'      => 'Añadir más detalles',\n        ],\n        'back'                      => 'Volver a la selección',\n        'bulk_names'                => 'Añadir un nombre por línea',\n        'duplicate'                 => 'Ya existen otras entidades de este tipo con el mismo nombre.',\n        'helper_v2'                 => 'Crea rápidamente los cimientos de una nueva entidad sin interrumpir tu flujo actual.',\n        'missing_v2'                => 'En esta interfaz sólo están disponibles los módulos que están activados y que tienes permiso para crear. :learn-more.',\n        'modes'                     => [\n            'bulk'      => 'Añadir en bloque',\n            'default'   => 'Añadir rápidamente',\n        ],\n        'name'                      => [\n            'new'       => 'Nuevo nombre',\n            'remove'    => 'Eliminar',\n        ],\n        'success_multiple'          => '{1} Nueva entidad :link creada.|[2,*] Nuevas entidades :link creadas.',\n        'success_multiple_posts'    => '{1} Nueva entrada :link creada.|[2,*] Nuevas entradas :link creadas.',\n        'title'                     => 'Nueva entidad',\n        'titles'                    => [\n            'everything'    => 'Todo',\n            'quick-access'  => 'Acceso rápido',\n        ],\n        'tooltip'                   => 'Crear una nueva entidad sin abandonar la página actual',\n        'tooltips'                  => [\n            'create'        => 'Crea la entidad y vuelve a la pantalla de selección de entidades',\n            'create_more'   => 'Crea la entidad y empieza a crear otra del mismo tipo',\n            'edit'          => 'Crea la entidad y empieza a editarla',\n        ],\n    ],\n    'creature'              => 'Criatura',\n    'creatures'             => 'Criaturas',\n    'dice_roll'             => 'Tirada de dados',\n    'dice_rolls'            => 'Tiradas de dados',\n    'entries'               => 'Entradas',\n    'entry'                 => 'Entrada',\n    'event'                 => 'Evento',\n    'events'                => 'Eventos',\n    'families'              => 'Familias',\n    'family'                => 'Familia',\n    'inventories'           => 'Inventarios',\n    'item'                  => 'Objeto',\n    'items'                 => 'Objetos',\n    'journal'               => 'Diario',\n    'journals'              => 'Diarios',\n    'location'              => 'Lugar',\n    'locations'             => 'Lugares',\n    'map'                   => 'Mapa',\n    'maps'                  => 'Mapas',\n    'media'                 => 'Multimedia',\n    'new'                   => [],\n    'note'                  => 'Nota',\n    'notes'                 => 'Notas',\n    'organisation'          => 'Organización',\n    'organisations'         => 'Organizaciones',\n    'properties'            => 'Propiedades',\n    'quest'                 => 'Misión',\n    'quest_element'         => 'Elemento de la misión',\n    'quests'                => 'Misiones',\n    'race'                  => 'Raza',\n    'races'                 => 'Razas',\n    'relation'              => 'Relación',\n    'relations'             => 'Relaciones',\n    'reminders'             => 'Recordatorios',\n    'tag'                   => 'Etiqueta',\n    'tags'                  => 'Etiquetas',\n    'templates'             => 'Plantillas',\n    'timeline'              => 'Línea de tiempo',\n    'timeline_element'      => 'Elemento de línea de tiempo',\n    'timelines'             => 'Líneas de tiempo',\n    'whiteboard'            => 'Pizarra',\n    'whiteboards'           => 'Pizarras',\n];\n"
  },
  {
    "path": "lang/es/entries/archetypes.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'how'   => 'Cómo definir arquetipos',\n    ],\n    'success'   => [\n        'set'   => ':name establecido como arquetipo.',\n        'unset' => ':name ya no está establecido como arquetipo.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entries/bulk.php",
    "content": "<?php\n\nreturn [\n    'success'   => [\n        'copy_to_campaign'  => '{1} :count entrada copiada a :campaign.|[2,*] :count entradas copiadas a :campaign.',\n        'delete'            => '{1} Se eliminó :count entrada.|[2,*] Se eliminaron :count entradas.',\n        'editing'           => '{1} :count entrada actualizada.|[2,*] :count entradas actualizadas.',\n        'editing_partial'   => '{1} :count/:total entrada actualizada.|[2,*] :count/:total entradas actualizadas.',\n        'permissions'       => '{1} Permisos cambiados para :count entrada.|[2,*] Permisos cambiados para :count entradas.',\n        'private'           => '{1} :count entrada es ahora privada.|[2,*] :count entradas son ahora privadas.',\n        'public'            => '{1} :count entrada es ahora visible.|[2,*] :count entradas son ahora visibles.',\n        'templates'         => '{1} Se aplicó un kit a :count entrada.|[2,*] Se aplicó un kit a :count entradas.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entries/fields.php",
    "content": "<?php\n\nreturn [\n    'name'  => [\n        'placeholder'   => 'Nombre de la entrada',\n    ],\n    'type'  => [\n        'placeholder'   => 'Tipo de la entrada',\n    ],\n];\n"
  },
  {
    "path": "lang/es/entries/tabs.php",
    "content": "<?php\n\nreturn [\n    'aliases'       => 'Alias',\n    'identity'      => 'Identidad',\n    'media'         => 'Multimedia',\n    'properties'    => 'Propiedades',\n    'relations'     => 'Relaciones',\n];\n"
  },
  {
    "path": "lang/es/errors.php",
    "content": "<?php\n\nreturn [\n    '403'               => [\n        'body'  => '¡Parece que no tienes permiso para acceder a esta página!',\n        'title' => 'Permiso denegado',\n    ],\n    '403-form'          => [\n        'help'  => 'Puede que tu sesión haya caducado. Intenta volver a iniciar sesión en otra ventana antes de guardar.',\n    ],\n    '404'               => [\n        'body'  => 'Lo sentimos, la página que estás buscando no se encuentra.',\n        'title' => 'Página no encontrada',\n    ],\n    '500'               => [\n        'body'  => [\n            '1' => 'Ups, parece que algo ha ido mal.',\n            '2' => 'Nos ha llegado un informe con este error, pero a veces nos ayuda saber un poco más sobre lo que estabas haciendo.',\n        ],\n        'title' => 'Error',\n    ],\n    '503'               => [\n        'body'  => [\n            '1' => 'Kanka está en mantenimiento ahora mismo. ¡Suele ser porque hay una actualización en camino!',\n            '2' => 'Disculpa las molestias. Todo volverá a la normalidad en solo unos minutos.',\n        ],\n        'json'  => 'Kanka está actualmente en mantenimiento, por favor inténtalo de nuevo en unos minutos.',\n        'title' => 'Mantenimiento',\n    ],\n    '503-form'          => [],\n    'back-to-campaigns' => 'Volver a una de tus campañas',\n    'footer'            => 'Si necesitas más asistencia, contáctanos en hello@kanka.io o en :discord',\n    'log-in'            => 'Acceder a tu cuenta podría revelarte lo que estás buscando.',\n    'post_layout'       => 'Diseño de post no válido.',\n    'private-campaign'  => [\n        'auth'  => [\n            'helper'    => 'No tienes acceso a esta campaña.',\n        ],\n        'guest' => [\n            'helper'    => 'La campaña a la que intentas acceder es privada y no has iniciado sesión.',\n            'login'     => 'Iniciar sesión podría permitirte acceder a los contenidos.',\n        ],\n        'title' => 'Campaña privada',\n    ],\n];\n"
  },
  {
    "path": "lang/es/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuevo evento',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [\n        'helper'    => 'Aquí se muestran los eventos que tienen esta entidad como evento padre.',\n    ],\n    'fields'        => [\n        'date'  => 'Fecha',\n    ],\n    'helpers'       => [\n        'date'  => 'Este campo puede contener cualquier cosa y no está vinculado a los calendarios de la campaña. Para vincular este evento con un calendario, añádelo desde la pestaña de recordatorios o desde el mismo calendario.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Añade momentos importantes como batallas, coronaciones o descubrimientos a la historia de tu mundo.',\n    ],\n    'placeholders'  => [\n        'date'  => 'Fecha del evento',\n        'type'  => 'Ceremonia, festival, catástrofe, batalla, nacimiento...',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Entradas del calendario',\n    ],\n];\n"
  },
  {
    "path": "lang/es/export.php",
    "content": "<?php\n\nreturn [\n    'content'           => 'Contenido',\n    'hidden_campaign'   => 'Campaña Oculta',\n    'index'             => 'Índice de Entidades',\n];\n"
  },
  {
    "path": "lang/es/families/trees.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'clear'             => 'Borrar todo',\n        'first'             => 'Añadir un fundador',\n        'founder'           => 'Añadir un nuevo fundador',\n        'rename-relation'   => 'Renombrar relación',\n        'reset'             => 'Descartar cambios',\n        'save'              => 'Guardar',\n    ],\n    'modal'     => [\n        'first-title'   => 'Selecciona una entidad',\n        'helper'        => 'Sustituir la entidad por otra de la campaña',\n        'relation'      => 'Relación',\n        'title'         => 'Reemplazar entidad',\n    ],\n    'modals'    => [\n        'clear'     => [\n            'confirm'   => '¿Estás seguro de que quieres reinicializar todos los datos del árbol genealógico?',\n        ],\n        'entity'    => [\n            'add'       => [\n                'founder'   => 'Fundador/a',\n                'member'    => 'Miembro',\n                'success'   => 'Entidad añadida.',\n                'title'     => 'Añadir una entidad',\n            ],\n            'child'     => [\n                'success'   => 'Descendencia añadida.',\n                'title'     => 'Añadir descendencia',\n            ],\n            'edit'      => [\n                'helper'    => 'Selecciona esta opción si la relación es desconocida. Se puede añadir un personaje más tarde.',\n                'success'   => 'Entidad actualizada.',\n                'title'     => 'Actualizar una entidad',\n            ],\n            'founder'   => [\n                'title' => 'Añadir un nuevo fundador',\n            ],\n            'remove'    => [\n                'confirm'   => '¿Estás seguro de que quieres eliminar esta entidad del árbol genealógico?',\n                'success'   => 'Entidad eliminada.',\n            ],\n        ],\n        'relations' => [\n            'add'       => [\n                'success'   => 'Relación añadida.',\n                'title'     => 'Añadir una relación',\n            ],\n            'edit'      => [\n                'success'   => 'Relación actualizada.',\n                'title'     => 'Actualizar una relación',\n            ],\n            'unknown'   => 'Desconocido',\n        ],\n        'reset'     => [\n            'confirm'   => '¿Estás seguro de que quieres descartar los cambios realizados en el árbol genealógico?',\n        ],\n    ],\n    'pitch'     => 'Crea un árbol genealógico detallado para las familias de la campaña.',\n    'success'   => [\n        'cleared'   => 'Árbol genealógico borrado.',\n        'reseted'   => 'El árbol genealógico se ha restablecido.',\n        'saved'     => 'Árbol genealógico guardado.',\n    ],\n    'title'     => 'Árbol genealógico :name',\n    'unknown'   => 'no establecido',\n];\n"
  },
  {
    "path": "lang/es/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nueva familia',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Esta familia está extinta.',\n        'members'       => 'Aquí se muestran los miembros de la familia. Se puede añadir un personaje a una familia en el menú de edición de dicho personaje, usando el desplegable \"Familia\".',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Haz seguimiento de linajes, clanes o casas nobles que conectan a tus personajes.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Añadir uno o mas miembros a :name.',\n            'success'   => '{0} No se ha añadido ningún miembro. |{1} Se ha añadido 1 miembro. |[2,*] Se han añadido :count miembros.',\n            'title'     => 'Nuevos miembros',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Nombre de la familia',\n        'type'  => 'Real, noble, extinguida...',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'tree'  => 'Árbol genealógico',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/faq.php",
    "content": "<?php\n\nreturn [\n    'account-deletion'      => [\n        'account_settings'  => 'Ajustes de la cuenta',\n        'answer'            => 'Para eliminar tu cuenta, dirígete a la página de :account y baja hasta la sección de eliminación de la cuenta. Esto eliminará tu cuenta y todas las campañas de las que seas el único miembro.',\n        'question'          => '¿Cómo puedo eliminar mi cuenta?',\n    ],\n    'app_backup'            => [\n        'answer'    => 'Realizamos dos copias de seguridad al día para evitar cualquier pérdida de datos. Nuestras propias campañas están en el servidor, así que no queremos correr ningún riesgo!',\n        'question'  => '¿Cada cuánto tiempo se hace una copia de seguridad de los datos de Kanka?',\n    ],\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nLa mejor forma de explicártelo es con un ejemplo. Imagina que tu mundo tiene montones de localizaciones, y en muchas de ellas quieres acordarte de crear un atributo personalizado de “Población”, “Clima”, “Nivel de criminalidad”...\n\nPodrías incluirlos manualmente en cada localización, pero puede ser un proceso tedioso y a veces se te puede olvidar el “Nivel de criminalidad”. Aquí es donde las plantillas de atributos resultan útiles.\n\nPuedes crear una plantilla de atributos con aquellos atributos (población, clima, nivel de criminalidad, etc.) y aplicar después esa plantilla a tus localizaciones. De este modo, se aplicarán los atributos de la plantilla a las localizaciones, y todo lo que tendrás que hacer es cambiar los valores sin tener que acordarte de los atributos!\nTEXT\n        ,\n        'question'  => '¿Qué son las “Plantillas de atributos”?',\n    ],\n    'backup'                => [\n        'answer'    => 'Una vez al día, puedes exportar todos los datos de tu campaña en un archivo ZIP. En la app, haz clic en \"Campaña\", en el menú de la izquierda, y dale a \"Exportar\". No podrás subir este archivo a Kanka, sino que está pensado para que estés tranquilo si no vas a usar más la app.',\n        'question'  => '¿Cómo puedo hacer una copia de seguridad o exportar mi campaña?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Simplemente únete a nuestro :discord e informa del error en el canal #errors-and-bugs.',\n        'question'  => '¿Cómo puedo informar de un error?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'Kanka no tiene esta funcionalidad. Sin embargo, si quieres tener varios grupos en el mismo mundo, puedes usar la misma campaña y separar a los grupos mediante etiquetas, misiones y permisos.',\n        'question'  => '¿Puedo sincronizar entidades entre varias campañas?',\n    ],\n    'conversations'         => [],\n    'custom'                => [\n        'answer'    => 'Kanka viene con un conjunto de entidades predefinidas que interactúan entre ellas. Permitir tipos de entidad personalizados requeriría volver a reconstruir la app desde cero y le quitaría su propósito como herramienta de creación. Además, la flexibilidad de Kanka permite que puedas representar cualquier tipo de entidad con las Etiquetas.',\n        'question'  => '¿Puedo crear tipos de entidad personalizados?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Ve al tablero de campaña y haz clic en \"Campaña\" en el menú de la izquierda. Si eres el administrador de la campaña, te aparecerá el botón de \"Eliminar\". Ten en cuenta que eliminar una campaña es una acción permanente que eliminará todos los datos almacenados en nuestros servidores, incluyendo las imágenes.',\n        'question'  => '¿Cómo puedo eliminar una campaña?',\n    ],\n    'discord'               => [\n        'answer'    => 'Para vincular tu cuenta de Kanka con :discord, primero has de hacer clic sobre tu avatar en la esquina superior derecha de la página e ir al Perfil. Desde ahí, navega hasta la subpágina de :apps y haz clic en Conectar.',\n        'question'  => '¿Cómo vinculo mi cuenta de Kanka con Discord?',\n    ],\n    'early-access'          => [\n        'answer'    => 'El acceso anticipado es nuestra manera de recompensar a nuestros increíbles suscriptores, dándoles un periodo exclusivo de 30 días en el que pueden probar las últimas novedades antes que el resto.',\n        'question'  => '¿Qué es el acceso anticipado?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'Todas las entidades tienen una pestaña de \"Notas\", que son pequeños fragmentos de texto que se pueden configurar para que solo sean visibles para ti (genial para los co-másters), solo para administradores o visibles para todos. También puedes dar permiso a tus jugadores para crear y editar estas notas sin darles acceso también a editar la entidad completa.',\n        'question'  => '¿Como gestiona Kanka la información oculta?',\n    ],\n    'fields'                => [\n        'answer'    => 'Respuesta',\n        'category'  => 'Categoría',\n        'locale'    => 'Locale',\n        'order'     => 'Order',\n        'question'  => 'Pregunta',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\n\nAdemás de votar sobre la dirección que tomará Kanka, al apoyarnos obtendrás un aumento en el tamaño de los archivos que puedes subir, añadiremos tu nombre en el muro de la fama, recibirás bonitos iconos predefinidos, podrás votar qué funciones se priorizan y mucho más!\nTEXT\n        ,\n        'question'  => '¿La app seguirá siendo gratis?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Recomendamos que crees los dioses como Personajes y las religiones como Organizaciones. Para encontrar a tus deidades rápidamente, puedes etiquetarlas con la Etiqueta o el tipo apropiados.',\n        'question'  => '¿Dónde puedo crear dioses y religiones?',\n    ],\n    'help'                  => [\n        'answer'    => 'Antes de nada, ¡gracias por ofrecerte! Siempre estamos interesados en aceptar ayuda con las traducciones, probar nuevas funciones, o ayudar a nuevos usuarios. También nos encanta cuando la gente promociona Kanka para que llegue a nuevos usuarios en lugares que nunca habíamos pensado. Tu mejor curso de acción es unirte a nosotros en el :discord, donde hay un canal dedicado a ofrecer ayuda. ¡También amamos a nuestros patrones en :patreon, si quieres apoyarnos y acceder a algunos beneficios!',\n        'question'  => '¡Quiero ayudar! ¿Qué puedo hacer?',\n    ],\n    'map'                   => [\n        'answer'    => 'Cada localización puede contener un mapa (png, jpg o svg) al que se pueden añadir puntos, personalizando su tamaño, forma, icono y color; y que enlacen a otras entidades o que simplemente sean etiquetas.',\n        'question'  => '¿Puedo subir mapas a Kanka?',\n    ],\n    'mobile'                => [\n        'answer'    => 'Actualmente no hay ninguna app móvil para Kanka, pero la web funciona perfectamente en un dispositivo móvil. La única limitación es que la herramienta de menciones no funciona en el editor de textos :( Si el soporte de Patreon lo permite, espero poder pagar a alguien para que haga una app móvil algún día, pero no va a ocurrir en un futuro próximo.',\n        'question'  => '¿Hay una app móvil? ¿Hay alguna planeada?',\n    ],\n    'monsters'              => [\n        'answer'    => 'Recomendamos usar el módulo de Razas para etnias, especies, monstruos y cualquier ser viviente que no sea un personaje.',\n        'question'  => '¿Dónde se crean los monstruos?',\n    ],\n    'multiworld'            => [\n        'answer'    => '¡No hace falta! Puedes crear tantas “campañas” como quieras en la aplicación, y hacer que cada una represente mundos, escenarios o lo que quieras. Una vez tengas varias campañas, puedes cambiar fácilmente entre ellas.',\n        'question'  => 'Estoy construyendo varios mundos en escenarios diferentes. ¿Necesito una cuenta diferente para cada mundo?',\n    ],\n    'nested'                => [\n        'answer'    => 'Si prefieres ver tus entidades en vista anidada por defecto, puedes hacerlo desde las opciones de Diseño, dentro de tu Perfil. Allí puedes seleccionar la opción \"Vista anidada por defecto\". Esto solo afectará a tu cuenta.',\n        'question'  => '¿Puedo configurar las listas para que aparezcan anidadas por defecto?',\n    ],\n    'organise_play'         => [],\n    'permissions'           => [\n        'answer'    => '¡Por supuesto, para eso hemos creado Kanka! Puedes invitar a todos tus jugadores a tus campañas, y darles roles y permisos. Hemos construido el sistema para que sea extremadamente flexible (con opción de incluir o de excluir) para cubrir las máximas necesidades y situaciones posibles.',\n        'question'  => 'Quiero usar Kanka para construir mi mundo de rol, pero quiero que mis jugadores tengan acceso a algunas de las entidades y editar sus personajes. ¿Es posible?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nLos planes a largo plazo para Kanka incluyen construir del todo esta herramienta versátil de worldbuilding y gestión de campañas RPG, manteniéndonos agnósticos (sin un sistema concreto de RPG). La comunidad puede añadir contenido específico mediante las Plantillas de la Comunidad. Un objetivo más ambicioso es llegar a integrar Kanka con otras plataformas, como las de rol virtual.\n\nPor otro lado, muchos proyectos hobby acaban quemando y el creador los abandona. El Patreon está precisamente para ayudarme a reducir mis horas de trabajo y dedicar más tiempo a Kanka sin sacrificar la seguridad financiera de mi familia, además de cubrir los costes del servidor. Además, el proyecto es \"open source\" y la comunidad lo puede continuar en caso de que algo me ocurriera. Todos los datos de las campañas se pueden exportar una vez al día, en caso de que te preocupe perder todo tu contenido.\nTEXT\n        ,\n        'question'  => '¿Qué planes hay a largo plazo? ¿Qué pasa si Ilestis se aburre de trabajar en Kanka?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Puedes ojear las :public-campaigns para ver cómo los demás usan Kanka en sus campañas.',\n        'question'  => '¿Cómo usan Kanka otras personas?',\n    ],\n    'renaming-modules'      => [\n        'answer'    => 'Aunque esto sería fácil de hacer en inglés y otros idiomas que no usan géneros, cambiar el nombre de los módulos rompería la corrección gramatical y la experiencia de usuario para la mayoría de idiomas de Kanka.',\n        'question'  => '¿Puedo renombrar los módulos? Por ejemplo, Clanes en vez de Familias, o Facciones en lugar de Organizaciones.',\n    ],\n    'sections'              => [\n        'community'     => 'Comunidad',\n        'general'       => 'General',\n        'other'         => 'Otros',\n        'permissions'   => 'Permisos',\n        'pricing'       => 'Tarifas',\n        'worldbuilding' => 'Creación de mundos',\n    ],\n    'show'                  => [\n        'return'    => 'Volver a las FAQ',\n        'timestamp' => 'Última actualización el :date',\n        'title'     => 'FAQ :name',\n    ],\n    'unboost'               => [\n        'answer'    => 'Al dejar de mejorar una campaña, no se elimina ningún dato, sino que se esconde. Si vuelves a mejorar la campaña, toda la información y funcionalidades volverán a estar disponibles con la misma configuración de antes.',\n        'question'  => '¿Qué pasa si dejo de mejorar una campaña?',\n    ],\n    'user-switch'           => [\n        'answer'    => 'Manejar los permisos puede ser complicado, sobre todo en campañas grandes. Como administrador de campaña, puedes navegar por la página de miembros y hacer clic en el botón de \"Ver como\" junto a cada miembro. Así, podrás navegar por la campaña y verla como ellos lo harán. Esta es la manera más fácil de comprobar los permisos de tu campaña.',\n        'question'  => 'Los permisos de mi campaña ya están configurados, ¿cómo puedo comprobarlos?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Solo las personas que invites a tu campaña pueden verla e interactuar con ella. Tus datos son privados y siempre están bajo tu control. Por otro lado, puedes configurar tu campaña como pública para que la vean los usuarios no registrados.',\n        'question'  => '¿Quién puede ver mi mundo?',\n    ],\n];\n"
  },
  {
    "path": "lang/es/fields.php",
    "content": "<?php\n\nreturn [\n    'description'       => [\n        'label' => 'Descripción',\n    ],\n    'entry'             => [\n        'label' => 'Entrada',\n    ],\n    'gallery'           => [\n        'placeholder'   => 'Elige una imagen de la galería',\n    ],\n    'gallery-header'    => [\n        'description'   => 'Si la entidad no tiene imagen de cabecera, muestra una imagen de la galería.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'Si la entidad no tiene imagen, muestra una imagen de la galería.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Muestra una imagen de fondo en la cabecera de la entidad con una :boosted-campaign.',\n        'description'           => 'Muestra una imagen de fondo en la cabecera de la entidad. Para obtener mejores resultados, usa una imagen muy grande.',\n        'title'                 => 'Imagen de cabecera',\n    ],\n    'tooltip'           => [],\n];\n"
  },
  {
    "path": "lang/es/filters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'bookmark'  => 'Añadir a favoritos',\n    ],\n    'alerts'    => [\n        'copy'  => 'Los filtros se han copiado en tu portapapeles.',\n    ],\n    'bookmark'  => [\n        'helper'    => 'Crea un nuevo marcador para esta vista usando los filtros actuales.',\n        'name'      => ':module (filtrado)',\n        'premium'   => 'Para añadir más marcadores es necesario activar las funciones premium de la campaña.',\n        'success'   => 'Marcador creado.',\n    ],\n    'helpers'   => [\n        'guest'         => 'Inicia sesión en tu cuenta para filtrar los resultados.',\n        'icon'          => 'Asigna a este marcador un ícono especial :fontawesome, por ejemplo :example.',\n        'icon-premium'  => 'Asigna a este marcador un ícono especial :fontawesome, como :example, con un :premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/footer.php",
    "content": "<?php\n\nreturn [\n    'about'             => 'Acerca de nosotros',\n    'blog'              => 'Blog',\n    'boosters'          => 'Potenciadores',\n    'community'         => 'Comunidad',\n    'company'           => 'Empresa',\n    'contact'           => 'Contacto',\n    'copyright'         => 'Copyright :copy :year Owlchester SNC',\n    'documentation'     => 'Documentación',\n    'features'          => 'Características',\n    'kb'                => 'Base de conocimientos',\n    'language-switcher' => [\n        'other' => 'Otros idiomas',\n        'title' => 'Selecciona tu idioma',\n    ],\n    'made'              => 'Hecho con ❤️ en Ginebra, Suiza',\n    'newsletter'        => 'Boletín de noticias',\n    'platform'          => 'Plataforma',\n    'plugins'           => 'Biblioteca de plugins',\n    'premium'           => 'Campañas Premium',\n    'press-kit'         => 'Kit de prensa',\n    'pricing'           => 'Precios',\n    'privacy'           => 'Privacidad',\n    'public-campaigns'  => 'Campañas públicas',\n    'resources'         => 'Recursos',\n    'roadmap'           => 'Hoja de ruta',\n    'security'          => 'Seguridad',\n    'server-time'       => 'Esta es la hora de nuestro servidor (:server)',\n    'showcase'          => 'Destacados',\n    'status'            => 'Estado del servicio',\n    'terms'             => 'Términos',\n    'thanks'            => 'Sólo posible gracias a nuestros suscriptores.',\n    'translator_call'   => 'Kanka está traducido a otros lenguajes gracias a nuestra increíble comunidad. Si quieres ayudar a traducir Kanka a tu idioma, contáctanos en :discord!',\n    'whats-new'         => 'Novedades',\n];\n"
  },
  {
    "path": "lang/es/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Votaciones comunitarias',\n];\n"
  },
  {
    "path": "lang/es/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Salón de la fama',\n];\n"
  },
  {
    "path": "lang/es/front/kb.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'show'      => [],\n    'title'     => 'Base de conocimientos',\n];\n"
  },
  {
    "path": "lang/es/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Saber más',\n        'subscribe'     => 'Suscribirse',\n    ],\n    'fields'    => [\n        'firstname'     => 'Nombre',\n        'lastname'      => 'Apellidos',\n        'notifications' => 'Notificaciones',\n    ],\n    'groups'    => [\n        'all'           => 'Recibe actualizaciones ocasionales sobre nuevas funciones, votaciones de la comunidad, promociones y eventos.',\n        'newsletter'    => 'Newsletter',\n    ],\n    'headline'  => 'Suscríbete a una (o a todas) nuestras newsletters para estar al día de las novedades de Kanka.',\n    'title'     => 'Correos de novedades',\n];\n"
  },
  {
    "path": "lang/es/front.php",
    "content": "<?php\n\nreturn [\n    'about'                 => [],\n    'actions'               => [],\n    'campaigns'             => [\n        'public'    => [\n            'filters'   => [\n                'is-premium'    => '¡Esta es una campaña premium!',\n            ],\n        ],\n    ],\n    'community'             => [],\n    'contact'               => [],\n    'cookie'                => [\n        'dismiss'   => '¡Entendido!',\n        'link'      => 'Saber más',\n        'message'   => 'Esta página web usa cookies para asegurarse de que obtienes la mejor experiencia.',\n    ],\n    'faq'                   => [],\n    'featured_campaigns'    => [],\n    'features'              => [\n        'api'       => [\n            'link'  => 'Documentación API',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Llamadas a la API aumentadas (90)',\n            'boosts'            => 'Mejoras de campaña',\n            'default_image'     => 'Imágenes bonitas por defecto para las entidades',\n            'discord'           => 'Canal privado de Discord',\n            'free'              => 'Gratis',\n            'hall_of_fame'      => 'Nombre en el :link',\n            'impact'            => 'Influencia en futuras características',\n            'monthly_vote'      => 'Participación en la votación mensual de características',\n            'pagination'        => 'Aumento en los resultados por página (100)',\n            'upload_limit'      => 'Aumento del tamaño máximo de subida de archivos (8mb)',\n            'upload_limit_map'  => 'Aumento del tamaño máximo de subida de mapas (10mb)',\n        ],\n    ],\n    'first_block'           => [],\n    'footer'                => [],\n    'goodbye'               => [],\n    'help'                  => [],\n    'home'                  => [\n        'seo'   => [\n            'meta-description'  => 'Kanka es una herramienta de gestión de campañas de rol y creación de mundos, que facilita la organización y planificación de tus campañas RPG.',\n        ],\n    ],\n    'master'                => [],\n    'media'                 => [],\n    'menu'                  => [\n        'dashboard'     => 'Tablero',\n        'login'         => 'Iniciar sesión',\n        'register'      => 'Registrarse',\n        'register_free' => 'Regístrate gratis',\n    ],\n    'meta'                  => [\n        'description'   => 'Kanka es un administrador flexible de campañas de rol online.',\n        'title'         => 'Kanka - Gestiona partidas de rol y crea mundos online',\n    ],\n    'partners'              => [],\n    'pricing'               => [\n        'tier'  => [\n            'free'  => 'Gratis',\n            'month' => 'Mes',\n        ],\n    ],\n    'privacy'               => [],\n    'release'               => [],\n    'roadmap'               => [],\n    'second_block'          => [],\n    'seo'                   => [\n        'keywords'  => 'Worldbuilding, Creación de mundos, RPG, Rol, Juego de rol, Gestión de campaña de rol',\n    ],\n    'team'                  => [],\n    'terms'                 => [],\n];\n"
  },
  {
    "path": "lang/es/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'gallery'   => 'De la galería',\n        'url'       => 'Subir una imagen desde una URL',\n    ],\n    'browse'    => [\n        'layouts'       => [\n            'large' => 'Previsualizaciones grandes',\n            'small' => 'Previsualizaciones pequeñas',\n        ],\n        'search'        => [\n            'placeholder'   => 'Buscar una imagen en la galería',\n        ],\n        'title'         => 'Galería',\n        'unauthorized'  => 'Ninguno de tus roles tiene el permiso \"navegar por la galería\".',\n    ],\n    'cta'       => [\n        'action'    => 'Desbloquear más espacio de almacenamiento',\n        'helper'    => 'Desbloquea hasta :size GB de espacio de almacenamiento con una campaña :premium.',\n        'title'     => 'Almacenamiento lleno',\n    ],\n    'delete'    => [\n        'success'   => '[0] Se han eliminado 0 elementos|[1] Se ha eliminado un elemento|{2,*} Se han eliminado :count elementos',\n    ],\n    'download'  => [\n        'errors'    => [\n            'copy_failed'           => 'Nuestros servidores no han podido descargar la imagen.',\n            'gallery_full_free'     => 'El espacio de almacenamiento de la galería está lleno. Activa las funciones premium para obtener más espacio de almacenamiento.',\n            'gallery_full_premium'  => 'El espacio de almacenamiento de la galería está lleno. Elimina los archivos que no utilices.',\n            'invalid_format'        => 'El archivo no tiene un formato válido.',\n            'too_big'               => 'El archivo es demasiado grande (:size MB vs :max MB)',\n            'unauthorized'          => 'Ninguno de tus roles tiene el permiso \"subir a galería\".',\n        ],\n    ],\n    'file'      => [\n        'saved' => 'Guardado',\n    ],\n    'filters'   => [\n        'only_unused'   => 'Mostrar sólo los archivos no utilizados',\n        'sort'          => 'Ordenar por',\n    ],\n    'move'      => [\n        'success'   => '[0] Se han movido 0 elementos|[1] Se ha movido un elemento|{2,*} Se han movido :count elementos',\n    ],\n    'update'    => [\n        'home'      => 'Carpeta de inicio',\n        'success'   => '[0] Se han atualizado 0 elementos|[1] Se ha actualizado un elemento|{2,*} Se han actualizado :count elementos',\n    ],\n];\n"
  },
  {
    "path": "lang/es/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Deseleccionar todo',\n    'documentation' => 'Aprende más sobre esta función en nuestra documentación.',\n    'done'          => 'Hecho',\n    'learn-more'    => 'Aprender más',\n    'no'            => 'No',\n    'required'      => 'Requerido',\n    'select_all'    => 'Seleccionar todo',\n    'success'       => [\n        'created'           => 'Se ha creado :name.',\n        'deleted'           => 'Se ha eliminado :name.',\n        'deleted-cancel'    => 'Se ha eliminado :name. :cancel.',\n        'updated'           => 'Se ha actualizado :name.',\n    ],\n    'tutorial'      => 'Ver tutorial',\n    'yes'           => 'Si',\n];\n"
  },
  {
    "path": "lang/es/genres.php",
    "content": "<?php\n\nreturn [\n    'alternate_history' => 'Historia alternativa',\n    'cyberpunk'         => 'Cyberpunk',\n    'fantasy'           => 'Fantasía',\n    'historical'        => 'Histórico',\n    'many_worlds'       => 'Múltiples mundos',\n    'modern'            => 'Moderno',\n    'occult'            => 'Ocultismo',\n    'post_apocalyptic'  => 'Post-apocalíptico',\n    'pulp'              => 'Pulp',\n    'science_fantasy'   => 'Fantasía científica',\n    'science_fiction'   => 'Ciencia ficción',\n    'space_opera'       => 'Ópera espacial',\n    'steampunk'         => 'Steampunk',\n    'superhero'         => 'Superhéroes',\n    'urban_fantasy'     => 'Fantasía urbana',\n    'western'           => 'Western',\n];\n"
  },
  {
    "path": "lang/es/header.php",
    "content": "<?php\n\nreturn [\n    'news'              => [\n        'title' => 'Noticias sobre Kanka',\n    ],\n    'notifications'     => [\n        'dismiss'   => 'Descartar',\n        'no-unread' => 'No hay notificaciones sin leer',\n        'read_all'  => 'Leer todas',\n    ],\n    'qq'                => [\n        'tooltip'   => 'Crear una entidad o una publicación',\n    ],\n    'toggle_navigation' => 'Activar menú',\n    'user'              => [\n        'settings'      => 'Ajustes',\n        'sign-out'      => 'Cerrar sesión',\n        'upgrade'       => 'Mejorar',\n        'your-profile'  => 'Tu perfil',\n    ],\n];\n"
  },
  {
    "path": "lang/es/helpers.php",
    "content": "<?php\n\nreturn [\n    'age'               => [],\n    'api-filters'       => [\n        'description'   => 'Están disponibles los siguientes filtros para el endpoint :name de la API.',\n        'title'         => 'Filtros de la API',\n    ],\n    'attributes'        => [\n        'link'  => 'Opciones de atributos',\n    ],\n    'calendar-widget'   => [\n        'info'  => '¿Por qué se muestran estos recordatorios?',\n        'title' => 'Widget de calendario',\n    ],\n    'dice'              => [],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Cómo usar los filtros',\n    ],\n    'link'              => [\n        'description'   => 'Puedes enlazar fácilmente otras entidades usando los siguientes atajos.',\n    ],\n    'map'               => [],\n    'pins'              => [],\n    'public'            => 'Mira el vídeo tutorial en Youtube acerca de las campañas públicas.',\n    'troubleshooting'   => [\n        'description'       => 'Un miembro del equipo de Kanka te ha enviado a esta página. Selecciona una campaña del desplegable para generar un token y así poderte unir temporalmente a la campaña como administrador.',\n        'errors'            => [\n            'token_exists'  => 'Ya existe un token para :campaign.',\n        ],\n        'save_btn'          => 'Generar token',\n        'select_campaign'   => 'Seleccionar una campaña',\n        'subtitle'          => '¡Ayuda, por favor!',\n        'success'           => 'Copia el siguiente token y envíalo a alguien del equipo de Kanka.',\n        'title'             => 'Resolución de problemas',\n    ],\n    'widget-filters'    => [\n        'description'   => 'Puedes filtrar las entidades mostradas en el widget de recientemente modificadas mediante sus campos y valores. Por ejemplo, puedes usar :example para filtrar por personajes muertos de tipo NPC.',\n        'link'          => 'filtros de widget',\n        'title'         => 'Filtrar los widgets del tablero',\n    ],\n];\n"
  },
  {
    "path": "lang/es/history.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'show-old'  => 'Cambios',\n    ],\n    'cta'       => 'Mostrar un registro de todos los cambios recientes en la campaña.',\n    'empty'     => 'Sin valor',\n    'fields'    => [\n        'action'    => 'Acción',\n        'category'  => 'Categoría',\n        'details'   => 'Detalles',\n        'when'      => 'Cuándo',\n        'who'       => 'Quién',\n    ],\n    'filters'   => [\n        'all-actions'   => 'Todas las acciones',\n        'all-users'     => 'Todos los miembros',\n        'no-results'    => 'No hay resultados que mostrar. Prueba con otros filtros o vuelve después de hacer cambios en las entidades de la campaña.',\n    ],\n    'helpers'   => [\n        'base'      => 'Esta interfaz contiene los cambios recientes en las entidades de la campaña durante un máximo de :amount meses, mostrando primero los cambios más recientes.',\n        'changes'   => 'Los siguientes campos tenían estos valores anteriormente.',\n    ],\n    'log'       => [\n        'create'        => ':user ha creado :entity',\n        'create_post'   => ':user creó el post \":post\" en :entidad',\n        'delete'        => ':user eliminó :entity',\n        'delete_post'   => ':user ha eliminado un post en :entity',\n        'reorder_post'  => ':user reordenó los posts de :entity',\n        'restore'       => ':user restauró :entity',\n        'update'        => ':user actualizó :entity',\n        'update_post'   => ':user actualizó el post \":post\" en :entity',\n        'update_tree'   => ':user actualizó el árbol genealógico de :entity',\n    ],\n    'title'     => 'Historial',\n    'unknown'   => [\n        'entity'    => 'una entidad desconocida',\n    ],\n];\n"
  },
  {
    "path": "lang/es/items.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuevo objeto',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_equipped'   => 'Equipado',\n        'price'         => 'Precio',\n        'size'          => 'Tamaño',\n        'weight'        => 'Peso',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'inventories'   => [],\n    'lists'         => [\n        'empty' => 'Añade armas, artefactos u objetos de importancia a tu mundo.',\n    ],\n    'placeholders'  => [\n        'price' => 'Precio del objeto',\n        'size'  => 'Tamaño, peso, dimensiones',\n        'type'  => 'Arma, Poción, Artefacto...',\n        'weight'=> 'Peso del objeto',\n    ],\n    'quests'        => [],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Inventarios',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuevo diario',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Autor',\n        'date'      => 'Fecha',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'journals'      => [],\n    'lists'         => [\n        'empty' => 'Crea entradas de diario para registrar aventuras, pensamientos de los personajes o resúmenes y preparación de sesiones.',\n    ],\n    'placeholders'  => [\n        'author'    => 'Quién ha escrito el diario',\n        'date'      => 'Fecha del diario',\n        'type'      => 'Sesión, Borrador...',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/es/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Catalán',\n        'cs'    => 'Checo',\n        'de'    => 'Alemán',\n        'el'    => 'Griego',\n        'en'    => 'Inglés',\n        'en-US' => 'Inglés (EEUU)',\n        'es'    => 'Español',\n        'fr'    => 'Francés',\n        'gl'    => 'Gallego',\n        'he'    => 'Hebreo',\n        'hr'    => 'Croata',\n        'hu'    => 'Húngaro',\n        'it'    => 'Italiano',\n        'nb'    => 'Noruego (Bokmal)',\n        'nl'    => 'Holandés',\n        'pl'    => 'Polaco',\n        'pt-BR' => 'Portugués (Brasil)',\n        'ru'    => 'Ruso',\n        'sk'    => 'Eslovaco',\n        'tr'    => 'Turco',\n    ],\n    'header'=> 'Idiomas',\n];\n"
  },
  {
    "path": "lang/es/lists.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn' => 'Aprende sobre este módulo',\n        'public'=> 'Ver cómo lo hacen otros',\n    ],\n    'empty'     => [\n        'title' => 'Aún no hay :plural.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nuevo lugar',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [\n        'is_destroyed'  => 'Destruido',\n    ],\n    'helpers'       => [\n        'characters'    => 'Muestra todos los personajes en este lugar y sus lugares anidados, o solo los que están aquí.',\n    ],\n    'hints'         => [\n        'is_destroyed'  => 'Esta ubicación está destruida.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'lists'         => [\n        'empty' => 'Añade tu primera ciudad, taberna o ruina oculta para dar base a tu mundo.',\n    ],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'type'  => 'Ciudad, Reino, Ruinas',\n    ],\n    'quests'        => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/es/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Entrar al modo de edición',\n        'exit-edit-mode'    => 'Salir del modo de edición',\n        'finish-drawing'    => 'Terminar de dibujar el polígono',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Haz clic en el mapa para empezar a dibujar un polígono',\n    ],\n    'toggle'        => 'Abrir/cerrar todos los grupos',\n];\n"
  },
  {
    "path": "lang/es/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Añadir nuevo grupo',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Se ha eliminado :count grupo.|[2,*] Se han eliminado :count grupos.',\n        'patch'     => '{1} Se ha actualizado :count grupo.|[2,*] Se han actualizado :count grupos.',\n    ],\n    'create'        => [\n        'helper'    => 'Agrega un nuevo grupo a :name. Luego, los marcadores pueden asignarse a este grupo.',\n        'success'   => 'Grupo :name creado.',\n        'title'     => 'Nuevo grupo',\n    ],\n    'delete'        => [\n        'success'   => 'Grupo :name eliminado.',\n    ],\n    'edit'          => [\n        'success'   => 'Grupo :name actualizado.',\n        'title'     => 'Editar grupo :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Mostrar marcadores del grupo',\n        'parent'    => 'Grupo padre',\n        'position'  => 'Posición',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Los marcadores pueden agruparse utilizando grupos de mapas. Al explorar un mapa, se puede hacer clic en cada grupo para mostrar u ocultar rápidamente todos los marcadores que contiene.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Si está seleccionado, los marcadores del grupo se mostrarán en el mapa por defecto.',\n    ],\n    'index'         => [\n        'title' => 'Grupos de :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'No puedes agregar más grupos a menos que elimines uno existente.',\n            'limit'     => 'Este mapa ha alcanzado su límite de grupos.',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Has alcanzado el límite de :limit grupos para este mapa.',\n            'upgrade'   => 'Actualiza a una campaña premium para agregar hasta :limit grupos y desbloquear aún más flexibilidad creativa.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Tiendas, tesoros, PNJs...',\n        'position'      => 'Campo opcional para indicar el orden en el que aparecen los grupos.',\n        'position_list' => 'Después de :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Guardar nuevo orden',\n        'success'   => '{1} Se ha reordenado :count grupo.|[2,*] Se han reordenado :count grupos.',\n        'title'     => 'Reordenar grupos',\n    ],\n];\n"
  },
  {
    "path": "lang/es/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Añadir nueva capa',\n    ],\n    'base'          => 'Capa base',\n    'bulks'         => [\n        'delete'    => '{1} Se ha eliminado :count capa.|[2,*] Se han eliminado :count capas.',\n        'patch'     => '{1} Se ha actualizado :count capa.|[2,*] Se han actualizado :count capas.',\n    ],\n    'create'        => [\n        'success'   => 'Capa :name creada.',\n        'title'     => 'Nueva capa',\n    ],\n    'delete'        => [\n        'success'   => 'Capa :name eliminada.',\n    ],\n    'edit'          => [\n        'success'   => 'Capa :name actualizada.',\n        'title'     => 'Editar capa :name',\n    ],\n    'fields'        => [\n        'position'  => 'Posición',\n        'type'      => 'Tipo de capa',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Cargue capas en un mapa para cambiar la imagen de fondo que se muestra debajo de los marcadores, o como superposiciones sobre el mapa pero debajo de los marcadores.',\n        'is_real'   => 'Las capas no están disponibles con OpenStretMaps.',\n    ],\n    'index'         => [\n        'title' => 'Capas de :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'No puedes agregar más capas a menos que elimines una existente.',\n            'limit'     => 'Este mapa ha alcanzado su límite de capas.',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Has alcanzado el límite de :limit capas para este mapa.',\n            'upgrade'   => 'Actualiza a una campaña premium para agregar hasta :limit capas y desbloquear aún más flexibilidad creativa.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Subterráneo, nivel 2, naufragio...',\n        'position'      => 'Campo opcional para definir en qué orden se apilan las capas.',\n        'position_list' => 'Después de :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Guardar nuevo orden',\n        'success'   => '{1} Se ha reordenado :count capa.|[2,*] Se han reordenado :count capas.',\n        'title'     => 'Reordenar capas',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Superposición',\n        'overlay_shown' => 'Superposición (mostrar automáticamente)',\n        'standard'      => 'Estándar',\n    ],\n    'types'         => [\n        'overlay'       => 'Superposición (se muestra sobre la capa activa)',\n        'overlay_shown' => 'Superposición mostrada por defecto',\n        'standard'      => 'Capa estándar (cambia entre capas)',\n    ],\n];\n"
  },
  {
    "path": "lang/es/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Escribir una entrada personalizada para este marcador.',\n        'remove'            => 'Eliminar marcador',\n        'reset-polygon'     => 'Restablecer posiciones',\n        'save_and_explore'  => 'Guardar y explorar',\n        'start-drawing'     => 'Empezar a dibujar',\n        'update'            => 'Editar marcador',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Se ha eliminado :count marcador.|[2,*] Se han eliminado :count marcadores.',\n        'patch'     => '{1} Se ha actualizado :count marcador.|[2,*] Se han actualizado :count marcadores.',\n    ],\n    'circle_sizes'  => [\n        'custom'    => 'Personalizado',\n        'huge'      => 'Enorme',\n        'large'     => 'Grande',\n        'small'     => 'Pequeño',\n        'standard'  => 'Estándar',\n        'tiny'      => 'Diminuto',\n    ],\n    'create'        => [\n        'success'   => 'Marcador :name creado.',\n        'title'     => 'Nuevo marcador',\n    ],\n    'delete'        => [\n        'success'   => 'Marcador :name eliminado.',\n    ],\n    'details'       => [\n        'from-entity'   => 'De entidad',\n    ],\n    'edit'          => [\n        'success'   => 'Marcador :name actualizado.',\n        'title'     => 'Editar marcador :name',\n    ],\n    'fields'        => [\n        'bg_colour'     => 'Color del fondo',\n        'circle_radius' => 'Radio circular',\n        'copy_elements' => 'Copiar elementos',\n        'custom_icon'   => 'Icono personalizado',\n        'custom_shape'  => 'Forma personalizada',\n        'font_colour'   => 'Color del icono',\n        'group'         => 'Grupo de marcadores',\n        'icon'          => 'Ícono',\n        'is_draggable'  => 'Arrastrable',\n        'latitude'      => 'Latitud',\n        'longitude'     => 'Longitud',\n        'opacity'       => 'Opacidad',\n        'pin_size'      => 'Tamaño del marcador',\n        'polygon_style' => [\n            'stroke'            => 'Color del trazo',\n            'stroke-opacity'    => 'Opacidad del trazo',\n            'stroke-width'      => 'Grosor del trazo',\n        ],\n        'popupless'     => 'Información emergente',\n        'size'          => 'Tamaño',\n    ],\n    'helpers'       => [\n        'base'                      => 'Añade marcadores al mapa haciendo clic en cualquier lugar.',\n        'copy_elements'             => 'Copiar grupos, capas y marcadores.',\n        'copy_elements_to_campaign' => 'Copiar grupos, capas y marcadores de los mapas. Los marcadores vinculados a una entidad se convertirán en marcadores normales.',\n        'css'                       => 'Define una clase CSS personalizada añadida al marcador.',\n        'custom_icon_v2'            => 'Utiliza iconos de :fontawesome, :rpgawesome o un icono SVG personalizado. Descubre cómo en la  :docs.',\n        'custom_radius'             => 'Selecciona la opción de tamaño personalizado en el desplegable para definir un tamaño.',\n        'draggable'                 => 'Actívalo para poder mover el marcador en el modo de exploración.',\n        'is_popupless'              => 'Desactiva la aparición del tooltip del marcador al pasar el ratón por encima.',\n        'label'                     => 'Las etiquetas se muestran como un bloque de texto en el mapa. El contenido será el nombre del marcador.',\n        'polygon'                   => [\n            'edit'  => 'Haz clic en el mapa para añadir esa posición a las coordenadas del polígono.',\n        ],\n    ],\n    'hints'         => [\n        'entry' => 'Edita el marcador para escribir una entrada personalizada sobre él.',\n    ],\n    'icons'         => [\n        'custom'        => 'Personalizado',\n        'entity'        => 'Entidad',\n        'exclamation'   => 'Exclamación',\n        'marker'        => 'Marcador',\n        'question'      => 'Interrogación',\n    ],\n    'index'         => [\n        'title' => 'Marcadores de :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Dibuje formas poligonales personalizadas para representar fronteras y otras formas irregulares.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'Prueba con :example1 o :example2',\n        'custom_shape'  => '100, 100 200, 240 340, 110',\n        'name'          => 'Nombre del marcador',\n    ],\n    'presets'       => [\n        'helper'    => 'Haz clic en un preajuste para cargarlo o crea uno nuevo.',\n    ],\n    'shapes'        => [\n        '0' => 'Círculo',\n        '1' => 'Cuadrado',\n        '2' => 'Triángulo',\n        '3' => 'Personalizada',\n    ],\n    'sizes'         => [\n        '0' => 'Minúsculo',\n        '1' => 'Estándar',\n        '2' => 'Pequeño',\n        '3' => 'Grande',\n        '4' => 'Enorme',\n    ],\n    'tabs'          => [\n        'circle'    => 'Círculo',\n        'label'     => 'Etiqueta',\n        'marker'    => 'Marcador',\n        'polygon'   => 'Polígono',\n        'preset'    => 'Preestablecido',\n    ],\n];\n"
  },
  {
    "path": "lang/es/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Volver a :name',\n        'edit'      => 'Editar mapa',\n        'explore'   => 'Explorar',\n    ],\n    'create'        => [\n        'title' => 'Nuevo mapa',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'Se ha producido un error al fragmentar el mapa. Ponte en contacto con el equipo en :discord para obtener ayuda.',\n            'running'   => [\n                'edit'      => 'El mapa no se puede editar mientras se esté fragmentando.',\n                'explore'   => 'El mapa no puede visualizarse mientras se está fragmentando.',\n                'time'      => 'Esto puede llevar de varios minutos a varias horas, dependiendo del tamaño del mapa.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'Este mapa necesita una imagen para que se pueda mostrar en el tablero.',\n        ],\n        'explore'   => [\n            'missing'   => 'Por favor, añade una imagen al mapa para poder explorarlo.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Marcador',\n        'center_x'          => 'Posicionamiento (longitud) por defecto',\n        'center_y'          => 'Posicionamiento (latitud) por defecto',\n        'centering'         => 'Centrar',\n        'distance_measure'  => 'Medida de la distancia',\n        'distance_name'     => 'Etiqueta de unidad de distancia',\n        'grid'              => 'Cuadrícula',\n        'has_clustering'    => 'Marcadores de agrupamiento',\n        'initial_zoom'      => 'Zoom inicial',\n        'is_real'           => 'Usar OpenStreetMaps',\n        'max_zoom'          => 'Zoom máximo',\n        'min_zoom'          => 'Zoom mínimo',\n        'tabs'              => [\n            'coordinates'   => 'Coordenadas',\n            'marker'        => 'Marcador',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'Cambia estos valores para controlar en qué área está focalizado el mapa. Si lo dejas en blanco, se mostrará el centro del mapa por defecto.',\n        'centering'             => 'Si un marcador está centrado, tendrá prioridad sobre las coordenadas por defecto.',\n        'chunked_zoom'          => 'Agrupa automáticamente los marcadores cuando están próximos entre sí.',\n        'distance_measure'      => 'Al darle al mapa una medida de distancia, se habilitará la herramienta de medidas en el modo de exploración.',\n        'distance_measure_2'    => 'Para que 100 píxeles midan 1 kilómetro, introduce un valor de 0.0041.',\n        'grid'                  => 'Define un tamaño para la cuadrícula que se mostrará en el modo de exploración.',\n        'has_clustering'        => 'Agrupa automáticamente los marcadores cuando están próximos entre sí.',\n        'initial_zoom'          => 'El nivel inicial de zoom en el que se carga el mapa. El valor por defecto es :default, mientras que el valor máximo permitido es :max, y el mínimo, :min.',\n        'is_real'               => 'Selecciona esta opción si quieres usar un mapa del mundo real en lugar de la imagen. Esta opción deshabilita las capas.',\n        'max_zoom'              => 'El máximo que se puede acercar un mapa. El valor por defecto es :default, mientras que el valor máximo permitido es :max.',\n        'min_zoom'              => 'El máximo que se puede alejar un mapa. El valor por defecto es :default, mientras que el valor máximo permitido es :min.',\n        'missing_image'         => 'Guarda el mapa con una imagen antes de añadir capas y marcadores.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Sube un mapa para visualizar las ubicaciones y mostrar la geografía de tu mundo.',\n    ],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Grupos',\n        'layers'    => 'Capas',\n        'legend'    => 'Leyenda',\n        'markers'   => 'Marcadores',\n        'settings'  => 'Configuración',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Dejar en blanco para cargar el mapa en el centro',\n        'center_x'      => 'Dejar en blanco para cargar el mapa en el centro',\n        'center_y'      => 'Dejar en blanco para cargar el mapa en el centro',\n        'distance_name' => 'Km, millas, pies, hamburguesas',\n        'grid'          => 'Distancia en píxeles entre los elementos de la cuadrícula. Déjalo en blanco para esconder la cuadrícula.',\n        'name'          => 'Nombre del mapa',\n        'type'          => 'Mazmorra, ciudad, galaxia...',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Mapas',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'El mapa se está fragmentando. Este proceso puede durar de varios minutos a horas.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'member'    => 'Hazte miembro.',\n        'remove_v5' => 'Kanka ha sido creado por nosotros dos solos. Apoya nuestra misión y disfruta de una experiencia sin anuncios por menos del precio de un café especial.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nueva nota',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'Subnotas',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Almacena ideas, referencias, reglas o información que no encaje en ningún otro lugar.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Elige una nota superior',\n        'type'  => 'Religión, Raza, Sistema politico...',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/es/notifications.php",
    "content": "<?php\n\nreturn [\n    'apps'              => [\n        'discord'   => [\n            'invalid'   => 'Tu token de Discord ha expirado. Por favor, vuelve a sincronizar tu cuenta de Discord con Kanka.',\n        ],\n    ],\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'Tu solicitud para la campaña :campaign ha sido aprobada.',\n            'approved_message'      => 'Tu inscripción a la campaña :campaign ha sido aprobada. Mensaje proporcionado: :reason',\n            'new'                   => 'Nueva solicitud para :campaign.',\n            'rejected'              => 'Tu solicitud para la campaña :campaign ha sido rechazada. Motivo:',\n            'rejected_no_message'   => 'Su inscripción a la campaña :campaign ha sido rechazada.',\n        ],\n        'asset_export'      => 'Está disponible una exportación de la campaña. El enlace estará disponible durante :time minutos.',\n        'boost'             => [\n            'add'           => ':user está mejorando la campaña :campaign.',\n            'remove'        => ':user ya no está mejorando la campaña :campaign.',\n            'superboost'    => ':user está supermejorando la campaña :campaign.',\n        ],\n        'created'           => 'Has creado :campaña.',\n        'deleted'           => 'Se ha eliminado la campaña :campaign.',\n        'export'            => 'Ya se ha exportado tu campaña. El enlace estará disponible durante :time minutos.',\n        'export_error'      => 'Ha ocurrido un error mientras se exportaba tu campaña. Por favor, contáctanos si el error persiste.',\n        'hidden'            => 'La campaña :campaign está ahora oculta de la página de campañas públicas.',\n        'import'            => [\n            'csv_ready'     => 'La importación CSV para :campaign está lista.',\n            'csv_success'   => 'Se importaron exitosamente :count entidades mediante importación CSV a :campaign.',\n            'failed'        => 'La importación de la campaña :campaign ha fallado.',\n            'success'       => 'La campaña :campaign ha terminado de importarse.',\n        ],\n        'join'              => ':user se ha unido a la campaña :campaign.',\n        'leave'             => ':user ha abandonado la campaña :campaign.',\n        'new_owner'         => 'Has sido designado administrador de :campaign.',\n        'plugin'            => [\n            'deleted'   => 'El plugin :plugin se ha eliminado del marketplace y de tu campaña :campaign.',\n        ],\n        'premium'           => [\n            'add'       => 'Se han desbloqueado funciones premium para la campaña :campaign por :user.',\n            'remove'    => ':user ya no desbloquea funciones premium para la campaña :campaign.',\n        ],\n        'removed-image'     => 'La imagen o cabecera de :entity se ha eliminado debido a un reclamo de derechos de autor.',\n        'role'              => [\n            'add'       => 'Te han asignado el rol :role en la campaña :campaign.',\n            'remove'    => 'Has sido eliminado del rol :role en la campaña :campaign.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => ':user, miembro del equipo de Kanka, se ha unido a la campaña :campaign.',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Borrar todas',\n        'success'   => 'Se han eliminado las notificaciones.',\n        'title'     => 'Borrar notificaciones',\n    ],\n    'features'          => [\n        'approved'  => 'Tu idea :feature ha sido aprobada.',\n        'finished'  => '¡Tu idea :feature ya está disponible en Kanka!',\n        'rejected'  => 'Tu idea :feature ha sido rechazada, motivo: :reason.',\n    ],\n    'header'            => 'Tienes :count notificaciones',\n    'index'             => [\n        'title' => 'Notificaciones',\n    ],\n    'map'               => [\n        'chunked'   => 'El mapa :name ha terminado de fragmentarse y ya puede utilizarse.',\n    ],\n    'no_notifications'  => 'No tienes ninguna notificación.',\n    'plugins'           => [\n        'comments'  => [\n            'new_comment'   => ':user ha dejado un nuevo comentario en el plugin :plugin.',\n            'new_reply'     => ':user ha respondido a tu comentario en :plugin.',\n        ],\n    ],\n    'subscriptions'     => [\n        'charge_fail'   => 'Ha habido un error procesando tu pago. Espera un momento mientras volvemos a intentarlo. Si no se producen cambios, contacta con nosotros.',\n        'deleted'       => 'Tu suscripción a Kanka se ha cancelado tras demasiados intentos fallidos de hacer el cobro en tu tarjeta. Dirígete a la configuración de tu suscripción e intenta actualizar tus datos de pago.',\n        'ended'         => 'Tu suscripción a Kanka ha finalizado. Se han eliminado tus mejoras de campaña y tus roles de Discord. ¡Esperamos volver a verte pronto!',\n        'failed'        => 'Tu suscripción a Kanka se ha cancelado tras demasiados intentos de cargar el cobro en tu tarjeta. Dirígete a los ajustes de suscripción e intenta actualizar tus detalles de pago.',\n        'started'       => 'Tu suscripción a Kanka ha empezado.',\n        'trial'         => 'Tu prueba gratuita de Kanka ha finalizado. ¡Esperamos que la hayas disfrutado y te volvamos a ver pronto!',\n    ],\n    'unread'            => 'Nueva notificación',\n];\n"
  },
  {
    "path": "lang/es/onboarding/attributes.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Los atributos te permiten añadir pequeñas piezas de información reutilizables a :name, como edad, puntos de vida, rango de facción o cualquier estadística personalizada que lleves. Son ideales para datos que quieras consultar, ordenar o usar como plantilla en varias entidades.',\n    'title' => 'Almacena datos estructurados para esta entidad',\n];\n"
  },
  {
    "path": "lang/es/onboarding/characters.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'Con eso es suficiente para empezar.',\n    'text'      => 'Concéntrate en lo básico: nombre, una breve descripción y uno o dos rasgos definitorios. Más adelante puedes añadir detalles como conexiones, atributos y retratos.',\n    'title'     => 'Crea tu primer personaje',\n];\n"
  },
  {
    "path": "lang/es/onboarding/locations.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'Mantenlo simple por ahora.',\n    'text'      => 'Empieza poco a poco. Nombra el lugar y añade una frase sobre lo que lo hace importante. Puedes ampliarlo con mapas, habitantes y ubicaciones anidadas cuando el mundo tome forma.',\n    'title'     => 'Crea tu primera ubicación',\n];\n"
  },
  {
    "path": "lang/es/onboarding/posts.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Las publicaciones te permiten separar el texto público de las notas privadas, los secretos del GM y la información de apoyo. Crea tantas publicaciones como necesites y controla quién puede ver cada una.',\n    'title' => 'Usa publicaciones para secretos y detalles adicionales',\n];\n"
  },
  {
    "path": "lang/es/onboarding/reminders.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Crea recordatorios para fechas límite, fechas dentro de la historia, aniversarios o cualquier cosa relacionada con :name que no quieras olvidar. Los recordatorios que añadas aquí se mostrarán en esta página y en cualquier fecha del calendario a la que los vincules.',\n    'title' => 'Registra aquí los detalles sensibles al tiempo',\n];\n"
  },
  {
    "path": "lang/es/onboarding/tags.php",
    "content": "<?php\n\nreturn [\n    'npcs'  => 'NPCs',\n];\n"
  },
  {
    "path": "lang/es/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nueva organización',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_defunct'    => 'Extinta',\n        'members'       => 'Miembros',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_defunct'    => 'Esta organización ha desaparecido.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Crea gremios, facciones o sociedades secretas para dar forma a la estructura de poder de tu mundo.',\n    ],\n    'members'       => [\n        'actions'       => [\n            'add_multiple'  => 'Agregar miembros',\n        ],\n        'create'        => [\n            'helper'            => 'Agregar uno o varios miembros a :name.',\n            'success_multiple'  => '{1} Se agregó :count miembro a :name.|[2,*] Se agregaron :count miembros a :name.',\n        ],\n        'destroy'       => [\n            'success'   => 'Miembro borrado de la organización.',\n        ],\n        'edit'          => [\n            'helper'    => 'Cambia el estado de la membresía de :name.',\n            'title'     => 'Actualizar miembro de :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Superior',\n            'pinned'    => 'Fijada',\n            'role'      => 'Rol',\n            'status'    => 'Estatus de miembro',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Todos los personajes que son miembros de la organización y de los descendientes de esta.',\n            'members'       => 'Todos los personajes que pertenecen a esta organización.',\n            'pinned'        => 'Elige esta opción si el miembro debe mostrarse en la sección fijada de las entidades asociadas a esta.',\n        ],\n        'pinned'        => [\n            'both'  => 'Ambos',\n            'none'  => 'Ninguno',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Quién es el superior de este miembro',\n            'role'      => 'Líder, Miembro, Maestro de Espías, Septón Supremo...',\n        ],\n        'status'        => [\n            'active'    => 'Miembro activo',\n            'inactive'  => 'Miembro inactivo',\n            'unknown'   => 'Estatus desconocido',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'Culto, banda, Rebelión, Gremio...',\n    ],\n    'quests'        => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/es/pagination.php",
    "content": "<?php\n\nreturn [\n    'previous' => '&laquo; Anterior',\n    'next' => 'Siguiente &raquo;',\n];\n"
  },
  {
    "path": "lang/es/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Han habido problemas con lo que has introducido.',\n        'title'         => '¡Ups!',\n    ],\n];\n"
  },
  {
    "path": "lang/es/passwords.php",
    "content": "<?php\n\nreturn [\n    'password'  => 'La contraseña debe de tener al menos seis caracteres y que sea la misma al confirmarla.',\n    'reset'     => '¡Contraseña restablecida!',\n    'sent'      => 'Te hemos enviado un enlace para restablecer la contraseña.',\n    'token'     => 'El identificador del restablecimiento de contraseña es invalido.',\n    'user'      => 'No podemos encontrar un usuario con ese correo electrónico.',\n];\n"
  },
  {
    "path": "lang/es/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/es/permissions.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'delete'    => 'Permiso para eliminar este elemento',\n        'edit'      => 'Permiso para editar este elemento',\n        'view'      => 'Permiso para ver este elemento',\n    ],\n    'members'   => [\n        'inherited' => ':member ya puede hacerlo por formar parte del rol :role.',\n    ],\n    'roles'     => [\n        'inherited' => 'El rol :role ya puede hacer esto en todo el módulo de :module.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/pins.php",
    "content": "<?php\n\nreturn [\n    'learn-more'    => 'Más información sobre los pines en nuestra documentación.',\n    'options'       => [\n        'no'    => 'Sin ancla',\n        'yes'   => 'Anclado a la página general de la entidad',\n    ],\n];\n"
  },
  {
    "path": "lang/es/playstyles.php",
    "content": "<?php\n\nreturn [\n    'casual-drop-in-friendly'       => 'Casual / Amigable para invitados',\n    'character-focused'             => 'Centrado en personajes',\n    'combat-focused'                => 'Centrado en combate',\n    'episodic-one-shot-friendly'    => 'Episódico / Apto para one-shots',\n    'exploration-focused'           => 'Centrado en exploración',\n    'linear-gm-led'                 => 'Lineal / Dirigido por el DM',\n    'long-term-campaign'            => 'Campaña de largo plazo',\n    'narrative-first'               => 'La narrativa primero',\n    'roleplay-heavy'                => 'Alto en roleplay',\n    'roleplay-light'                => 'Bajo en roleplay',\n    'rules-light'                   => 'Reglas ligeras',\n    'sandbox-player-driven'         => 'Sandbox / Impulsado por jugadores',\n    'serious-immersive'             => 'Serio / Inmersivo',\n    'story-driven'                  => 'Impulsado por la historia',\n    'tactical-crunchy'              => 'Táctico / Complejo mecánicamente',\n];\n"
  },
  {
    "path": "lang/es/post_layouts.php",
    "content": "<?php\n\nreturn [\n    'character_orgs'        => 'Organizaciones del personaje',\n    'connection_map'        => 'Mapa de conexiones',\n    'helper'                => 'Este post está configurado para mostrar la subpágina :subpage de la entidad.',\n    'location_characters'   => 'Personajes de la ubicación',\n    'location_events'       => 'Eventos de la ubicación',\n    'location_quests'       => 'Misiones de la ubicación',\n    'pitch'                 => [\n        'custom'    => 'Muestra contenido de las subpáginas de esta entidad directamente en la vista general usando diseños de publicaciones. Por ejemplo, mostrar el inventario de :entity.',\n        'title'     => 'Diseños de publicaciones avanzados',\n    ],\n    'premium'               => 'Algunas opciones de diseño están deshabilitadas porque requieren una campaña premium.',\n    'quest_elements'        => 'Elementos de la misión',\n];\n"
  },
  {
    "path": "lang/es/posts/templates.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'set'   => 'Establecer como plantilla reutilizable',\n        'unset' => 'Quitar como plantilla reutilizable',\n    ],\n    'helper'    => 'Los siguientes artículos han sido definidos como plantillas que pueden reutilizarse.',\n    'tab'       => 'Cargar desde plantillas',\n];\n"
  },
  {
    "path": "lang/es/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuevo post',\n    ],\n    'fields'        => [\n        'description'   => 'Descripción',\n        'layout'        => 'Diseño de publicación',\n        'name'          => 'Nombre',\n    ],\n    'helpers'       => [\n        'new'           => 'Añadir un nuevo post a esta entidad.',\n        'visibility'    => 'Cambia la visibilidad del post :name.',\n    ],\n    'move'          => [\n        'copy'      => [\n            'helper'    => 'Mantén una copia del post en :name.',\n        ],\n        'helper'    => 'Mueve o copia el post :name a una entidad diferente.',\n        'title'     => 'Mover post',\n    ],\n    'permissions'   => [\n        'actions'   => [\n            'members'   => 'Agregar miembros',\n            'roles'     => 'Agregar roles',\n        ],\n        'helpers'   => [\n            'members'   => 'Agrega uno o varios miembros para que tengan permisos especiales en este post.',\n            'roles'     => 'Agrega uno o varios roles para que tengan permisos especiales en este post.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Nombre del post',\n    ],\n    'position'      => [\n        'dont_change'   => 'No cambiar',\n        'first'         => 'Primero',\n        'last'          => 'Último',\n    ],\n    'remove'        => [\n        'title' => 'Eliminar publicación',\n    ],\n    'visibility'    => [\n        'helper'    => 'Cambia la visibilidad del post :name.',\n        'title'     => 'Visibilidad del post',\n    ],\n];\n"
  },
  {
    "path": "lang/es/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Crear un nuevo predeterminado',\n    ],\n    'create'        => [\n        'success'   => 'Predeterminado :name creado.',\n        'title'     => 'Nuevo predeterminado',\n    ],\n    'destroy'       => [\n        'success'   => 'Predeterminado :name eliminado.',\n    ],\n    'edit'          => [\n        'success'   => 'Predeterminado :name modificado.',\n        'title'     => 'Editar predeterminado :name',\n    ],\n    'fields'        => [\n        'name'  => 'Nombre del predeterminado',\n    ],\n    'lists'         => [\n        'empty' => 'Actualmente no hay predeterminados disponibles en la campaña.',\n    ],\n    'placeholders'  => [\n        'name'  => 'El nombre del predeterminado',\n    ],\n];\n"
  },
  {
    "path": "lang/es/profiles.php",
    "content": "<?php\n\nreturn [\n    'avatar'                        => [\n        'success'   => 'Avatar actualizado.',\n    ],\n    'campaign_switcher_order_by'    => [],\n    'edit'                          => [\n        'success'   => 'Perfil actualizado',\n    ],\n    'editors'                       => [],\n    'fields'                        => [\n        'avatar'                    => 'Avatar',\n        'bio'                       => 'Bio',\n        'email'                     => 'Correo Electronico',\n        'hide_subscription'         => 'Ocultar mi nombre del :hall_of_fame.',\n        'last_login_share'          => 'Compartir la última vez que estuve en línea con otros miembros de la campaña.',\n        'link'                      => 'Enlace social',\n        'login_sharing'             => 'Compartir la última conexión',\n        'name'                      => 'Nombre',\n        'new_password'              => 'Contraseña nueva',\n        'new_password_confirmation' => 'Confirmar nueva contraseña',\n        'newsletter'                => 'Me gustaría recibir noticias de la web por correo electrónico.',\n        'password'                  => 'Contraseña actual',\n        'profile-name'              => 'Nombre del perfil',\n        'pronouns'                  => 'Pronombres',\n        'settings'                  => 'Ajustes',\n        'subscription_hiding'       => 'Ocultar suscripción',\n        'theme'                     => 'Tema',\n    ],\n    'helpers'                       => [\n        'link'          => 'Cambia la forma en que aparece un enlace a tu perfil social en tu :profile y en el :marketplace. Si se deja en blanco, no se mostrará ningún enlace.',\n        'profile-name'  => 'Cambia la forma en que aparece tu nombre en tu :profile y en el :marketplace. Si se deja en blanco, se utilizará el nombre de tu cuenta en su lugar.',\n        'pronouns'      => 'Cambia la forma en que aparecen tus pronombres en tu :profile y en el :marketplace. Si se deja en blanco, no se mostrarán pronombres.',\n    ],\n    'link'                          => [\n        'button'    => 'Perfil social de :name',\n    ],\n    'newsletter'                    => [\n        'helpers'   => [\n            'header'    => 'Suscríbete a las newsletters para saber lo que está ocurriendo en Kanka.',\n        ],\n        'options'   => [\n            'monthly'   => 'Newsletter de Kanka',\n        ],\n        'title'     => 'Newsletters',\n        'updated'   => 'Actualización de las preferencias del boletín.',\n    ],\n    'password'                      => [\n        'success'   => 'Contraseña actualizada',\n    ],\n    'placeholders'                  => [\n        'bio'                       => 'Una breve biografía tuya en tu perfil público.',\n        'email'                     => 'Tu correo electrónico',\n        'name'                      => 'Tu nombre de usuario',\n        'new_password'              => 'Tu nueva contraseña',\n        'new_password_confirmation' => 'Confirma tu nueva contraseña',\n        'password'                  => 'Escribe tu contraseña actual para aplicar los cambios',\n    ],\n    'sections'                      => [\n        'dangerzone'    => 'Zona de peligro',\n        'delete'        => [\n            'confirm'       => 'Eliminar mi cuenta ahora',\n            'delete'        => 'Eliminar cuenta',\n            'goodbye'       => 'En caso afirmativo, escribe :code en la casilla de abajo.',\n            'helper'        => 'Eliminar tu cuenta también eliminara cualquier campaña de la que seas el único miembro. Esta acción es permanente y no se puede deshacer.',\n            'subscribed'    => 'Por favor, cancele su :subscription antes de poder eliminar su cuenta.',\n            'title'         => 'Elimina tu cuenta',\n            'warning'       => 'Al eliminar tu cuenta todos tus datos serán borrados. ¿Estás seguro?',\n        ],\n        'password'      => [\n            'title' => 'Cambia tu contraseña',\n        ],\n    ],\n    'settings'                      => [\n        'helpers'   => [\n            'bio'       => 'La biografía es visible en su :link.',\n            'profile'   => 'perfil público',\n        ],\n        'success'   => 'Ajustes cambiados.',\n    ],\n    'theme'                         => [\n        'success'   => 'Tema cambiado.',\n        'themes'    => [\n            'dark'      => 'Oscuro',\n            'default'   => 'Por defecto',\n            'future'    => 'Futuro',\n            'midnight'  => 'Azul medianoche',\n        ],\n    ],\n    'title'                         => 'Actualizar perfil',\n    'workflows'                     => [\n        'created'   => 'Ir a la entidad recién creada',\n        'default'   => 'Lista de entidades',\n    ],\n];\n"
  },
  {
    "path": "lang/es/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nueva misión',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'elements'      => [\n        'create'    => [\n            'success'   => 'Se ha añadido la entidad :entity a la misión.',\n            'title'     => 'Nuevo elemento para :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Se ha quitado :entidad de la misión.',\n        ],\n        'edit'      => [\n            'success'   => 'Se ha actualizado :entity en la misión.',\n            'title'     => 'Actualizar elemento de la misión :name',\n        ],\n        'fields'    => [\n            'entity_or_name'    => 'Selecciona una entidad de la campaña o asigna un nombre a este elemento.',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Copiar elementos vinculados a la misión',\n        'date'          => 'Fecha',\n        'element_role'  => 'Rol',\n        'instigator'    => 'Instigador',\n        'is_completed'  => 'Completada',\n        'location'      => 'Lugar de inicio',\n        'role'          => 'Rol',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'Selecciona esto si la misión ya se ha completado.',\n    ],\n    'hints'         => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Crea misiones para registrar objetivos, tramas o motivaciones de los personajes.',\n    ],\n    'placeholders'  => [\n        'date'      => 'Fecha real de la misión',\n        'entity'    => 'Nombre de un elemento de la misión',\n        'location'  => 'Lugar de inicio de la misión',\n        'role'      => 'El papel que juega la entidad en la misión',\n        'type'      => 'Historia Principal, Arco de Personaje, Misión Secundaria...',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Añadir elemento',\n        ],\n        'tabs'      => [\n            'elements'  => 'Elementos',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nueva raza',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'members'   => 'Miembros',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Esta raza está extinta.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Define las especies, culturas o pueblos que habitan tu mundo.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Agrega uno o varios personajes a :name.',\n            'submit'    => 'Añadir miembros',\n            'success'   => '{0} No se ha añadido ningún miembro. |{1} Se ha añadido 1 miembro. |[2,*] :se han añadido un número de miembros.',\n            'title'     => 'Nuevos miembros',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Humano, Elfo, Troll...',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/es/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Sesión expirada. Inicia sesión de nuevo.',\n    'unknown_entity'    => 'Perdona, no sabemos qué es \\':entity\\'.',\n];\n"
  },
  {
    "path": "lang/es/referrals.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'copy'  => 'Copiar',\n    ],\n    'benefits'  => 'Construyan mundos juntos.',\n    'fields'    => [\n        'link'  => 'Tu enlace de referido:',\n    ],\n    'stats'     => [\n        'badge'         => 'Insignia: Constructor de Mundos :level',\n        'empty'         => 'Aún nadie. Comparte tu enlace para comenzar.',\n        'invited'       => 'Has invitado a:',\n        'subscribers'   => 'Suscriptores referidos: :amount',\n        'users'         => '[1] un usuario|{2,*} :amount usuarios',\n    ],\n    'title'     => 'Invita a tus amigos a Kanka',\n    'toasts'    => [\n        'copied'    => 'Enlace copiado al portapapeles',\n    ],\n];\n"
  },
  {
    "path": "lang/es/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Evento',\n        'livestream'    => 'Transmisión en directo',\n        'other'         => 'Otros',\n        'release'       => 'Lanzamiento',\n        'vote'          => 'Votación comunitaria',\n    ],\n    'index'         => [\n        'description'   => 'Ultimas novedades de kanka.io',\n        'title'         => 'Novedades',\n    ],\n    'post'          => [\n        'footer'    => 'Por :name el :date',\n    ],\n    'show'          => [\n        'return'    => 'Volver a novedades',\n        'title'     => 'Novedad :name',\n    ],\n];\n"
  },
  {
    "path": "lang/es/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Mundo de Tinieblas',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5ª edición',\n    ],\n];\n"
  },
  {
    "path": "lang/es/search/fulltext.php",
    "content": "<?php\n\nreturn [\n    'searching' => 'Búsqueda de entidades, entradas, atributos y más para el término :term.',\n    'title'     => 'Búsqueda de texto completo',\n];\n"
  },
  {
    "path": "lang/es/search.php",
    "content": "<?php\n\nreturn [\n    'fulltext'      => 'Buscar en todas partes',\n    'lookup'        => [\n        'empty'     => 'No hay resultados',\n        'hint'      => 'Escriba al menos 3 letras para buscar entidades en la campaña.',\n        'keyboard'  => 'pulse :k para buscar, :esc para descartar',\n        'recents'   => 'Recientes',\n        'results'   => 'Resultados',\n    ],\n    'no_results'    => 'Sin resultados.',\n    'placeholder'   => 'BUSCAR',\n    'placeholders'  => [\n        'entry' => 'Buscar una entrada',\n    ],\n    'preview'       => [\n        'links'             => 'Enlaces',\n        'no-connections'    => 'No hay relaciones ancladas que mostrar',\n    ],\n    'title'         => 'Buscar',\n];\n"
  },
  {
    "path": "lang/es/seo.php",
    "content": "<?php\n\nreturn [\n    'dashboard'     => 'Panel de :campaign',\n    'entity-list'   => 'Explora el :module de :campaign',\n];\n"
  },
  {
    "path": "lang/es/settings/account.php",
    "content": "<?php\n\nreturn [\n    'subtitle'  => 'Controla tu correo electrónico, contraseña, seguridad y otros ajustes de la cuenta.',\n    'title'     => 'Información de la cuenta',\n];\n"
  },
  {
    "path": "lang/es/settings/api.php",
    "content": "<?php\n\nreturn [\n    'applications'      => [\n        'title' => 'Aplicaciones autorizadas',\n    ],\n    'clients'           => [\n        'empty' => 'No has creado ningún cliente OAuth.',\n        'form'  => [\n            'name'                  => 'Nombre del cliente',\n            'name_helper'           => 'Algo que tus usuarios reconozcan y en lo que confíen.',\n            'name_placeholder'      => 'Nombre del cliente',\n            'redirect'              => 'URL de redirección',\n            'redirect_helper'       => 'La URL de callback de autorización de tu aplicación.',\n            'redirect_placeholder'  => 'http://mi-super-app.com/callback',\n        ],\n        'new'   => 'Crear nuevo cliente',\n        'title' => 'Clientes OAuth',\n        'update'=> 'Actualizar cliente',\n    ],\n    'fields'            => [\n        'client'        => 'ID del cliente',\n        'client_name'   => 'Nombre del cliente',\n        'scopes'        => 'Alcances',\n        'secret'        => 'Secreto',\n        'token_name'    => 'Nombre del token',\n    ],\n    'new'               => [\n        'copy'  => 'Token copiado al portapapeles.',\n        'title' => 'Tu nuevo token de acceso personal:',\n    ],\n    'revoke'            => 'Revocar',\n    'revoke-confirm'    => 'Confirmar revocación',\n    'tokens'            => [\n        'empty' => 'No has creado ningún token de acceso personal.',\n        'form'  => [\n            'name'              => 'Nombre del token',\n            'name_placeholder'  => 'Nombra el token',\n        ],\n        'new'   => 'Crear nuevo token',\n        'title' => 'Tokens de acceso personal',\n    ],\n];\n"
  },
  {
    "path": "lang/es/settings/appearance.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'learn-more'    => 'Para más información sobre esta configuración, consulta nuestra documentación.',\n        'save'          => 'Guardar ajustes',\n    ],\n    'campaign-switcher' => [\n        'alphabetical'      => 'Orden alfabético (A-Z)',\n        'date_created'      => 'Fecha de creación (la más antigua primero)',\n        'date_joined'       => 'Fecha de incorporación ( la más antigua primero)',\n        'r_alphabetical'    => 'Orden alfabético (Z-A)',\n        'r_date_created'    => 'Fecha de creación (la más reciente primero)',\n        'r_date_joined'     => 'Fecha de incorporación (la más reciente primero)',\n    ],\n    'dismissible'       => [\n        'main'  => 'Controla el aspecto de Kanka. Ten en cuenta que las campañas pueden anular algunos de estos ajustes.',\n    ],\n    'editors'           => [\n        'default'   => 'Por defecto (:name)',\n        'helpers'   => [\n            'feedback'  => 'Ayúdanos a mejorarlo dando tu opinión (2 min)',\n            'legacy'    => 'El editor de texto heredado (TinyMCE) no admite menciones en dispositivos móviles, galerías de campaña u otras funciones avanzadas.',\n            'tiptap'    => 'Este es nuestro nuevo editor de texto experimental que se está trabajando activamente y se actualiza con regularidad. Aún no contiene todas las funciones a las que podrías estar acostumbrado.',\n        ],\n        'legacy'    => 'Legado (:name)',\n        'tiptap'    => 'Experimental 2026',\n    ],\n    'explore'           => [\n        'grid'  => 'Cuadrícula (por defecto)',\n        'table' => 'Tabla',\n    ],\n    'fields'            => [\n        'campaign-order'        => 'Orden de la lista de campañas',\n        'date-format'           => 'Formato de fechas',\n        'editor'                => 'Editor de texto',\n        'entity-explore'        => 'Lista de entidades',\n        'mentions'              => 'Menciones al editar',\n        'new-entity-workflow'   => 'Nuevo flujo de trabajo de entidades',\n        'pagination'            => 'Resultados por página',\n        'theme'                 => 'Tema preferido',\n    ],\n    'helpers'           => [\n        'advanced-mentions'     => 'Al editar textos, controla si las menciones se muestran como el nombre de la entidad o como la mención avanzada.',\n        'campaign-order'        => 'Cambia el orden en el que aparecen las campañas en el selector de campañas.',\n        'date-format'           => 'Cuando esté disponible, controla el formato en el que se mostrarán las fechas del mundo real.',\n        'editors'               => 'Cambia entre editores de texto al crear o editar campos de texto largos.',\n        'entity-explore'        => 'Controla la forma en que se muestran las listas de entidades en las campañas.',\n        'new-entity-workflow'   => 'Controla la interfaz a la que se te dirige tras crear una nueva entidad.',\n        'overridable'           => 'Cada campaña puede anular esta preferencia.',\n        'pagination'            => 'Para las listas que abarcan varias páginas, define cuántas son visibles en cada página.',\n        'theme'                 => 'Elige el aspecto que Kanka tendrá para ti.',\n    ],\n    'mentions'          => [\n        'advanced'  => 'Mostrar menciones avanzadas :code',\n        'default'   => 'Menciones como el nombre de la entidad',\n    ],\n    'nested'            => [],\n    'success'           => 'Opciones de apariencia guardadas.',\n    'values'            => [\n        'pagination'        => ':amount resultados por página',\n        'pagination-sub'    => ':amount (disponible para suscriptores)',\n    ],\n];\n"
  },
  {
    "path": "lang/es/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'boost_name'    => 'Mejora :name',\n    ],\n    'available' => ':amount/:total potenciadores disponibles',\n    'benefits'  => [\n        'boosted'       => 'Al mejorar una campaña con :one potenciador se desbloqueará el acceso al :marketplace, opciones de temas, un mayor tamaño de archivos para todos los miembros, recuperación de entidades eliminadas, y :more.',\n        'more'          => 'más funciones sorprendentes',\n        'superboosted'  => 'Al potenciar una campaña con :amount potenciadores se desbloquearán todas las ventajas de una campaña potenciada, así como una galería de la campaña, los registros completos de los cambios realizados en las entidades y :more.',\n    ],\n    'boost'     => [\n        'actions'   => [\n            'confirm'   => '¡Mejórala!',\n            'remove'    => 'Deja de potenciar :campaign',\n            'subscribe' => 'Suscríbete a Kanka',\n            'upgrade'   => 'Actualiza tu suscripción',\n        ],\n        'confirm'   => '¡Qué emoción! Estás a punto de potenciar :campaign. Esto asignará uno (:cost) de tus potenciadores de campaña disponibles.',\n        'duration'  => 'Los potenciadores asignados permanecen asignados hasta que los elimines manualmente o cuando tu suscripción finalice.',\n        'errors'    => [\n            'boosted'           => 'Oh oh, ¡Parece que :campaign ya está impulsada!',\n            'out-of-boosters'   => '¡Oh, no! No tienes suficientes potenciadores disponibles. Tienes :available y necesitas :cost. Deja de impulsar otras campañas, o :upgrade.',\n        ],\n        'pitch'     => 'Hazte suscriptor para desbloquear potenciadores de campaña.',\n        'success'   => 'La campaña :campaign ahora está potenciada. ¡Disfruta de todas las nuevas e increíbles funciones!',\n        'title'     => 'Potenciar :campaign',\n        'upgrade'   => 'actualiza tu suscripción',\n    ],\n    'campaign'  => [\n        'boosted'       => 'Potenciado por :user desde :time',\n        'premium'       => 'Premium gracias a :user desde :time',\n        'standard'      => 'Estándar',\n        'superboosted'  => 'Superpotenciado por :user desde :time',\n        'unboosted'     => 'Sin potenciar',\n    ],\n    'intro'     => [\n        'anyone'    => 'No estás limitado a impulsar campañas que hayas creado. Puedes impulsar cualquier campaña en la que participes o que puedas ver. Esto incluye campañas en las que seas jugador o :public que disfrutes.',\n        'data'      => 'Cuando una campaña deja de estar potenciada, se elimina el acceso a las funciones potenciadas. Sin embargo, no se elimina nada del contenido, por lo que al volver a impulsar la campaña en el futuro se recupera el acceso a este.',\n        'first'     => 'Las funciones avanzadas se desbloquean asignando tus potenciadores para potenciar o superpotenciar una campaña. La cantidad de potenciadores que tienes viene determinada por tu :subscription. Este número está a tu disposición en todo momento mientras seas suscriptor. Al potenciar una campaña le asignarás uno de tus potenciadores, mientras que al superpotenciar una campaña le asignarás tres.',\n    ],\n    'pitch'     => [\n        'benefits'      => [\n            'backup'        => 'Recupera una entidad previamente eliminada durante un máximo de :amount días',\n            'customisable'  => 'Personalización total del aspecto de una campaña',\n            'icons'         => 'Acceso a miles de hermosos iconos para mapas y líneas de tiempo',\n            'title'         => 'Las campañas potenciadas obtienen',\n            'upload'        => 'Mayor capacidad de carga de archivos para todos los miembros de la campaña',\n        ],\n        'description'   => 'Asigna potenciadores a las campañas y ayuda a desbloquear funciones increíbles para todos los participantes. ¿No te impresionan las campañas potenciadas? ¡Tenemos campañas superpotenciadas para ti!',\n        'more'          => 'Consulta la lista completa de ventajas en nuestra página :boosters.',\n        'title'         => 'Lleva una campaña al siguiente nivel con personalización y ventajas para todos sus miembros',\n    ],\n    'ready'     => [\n        'available'         => 'Tus potenciadores de campaña disponibles.',\n        'pricing'           => 'Todos nuestros niveles de suscripción incluyen al menos un potenciador de campaña y comienzan a partir de :amount al mes.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Potenciar una campaña',\n    ],\n    'superboost'=> [\n        'actions'   => [\n            'confirm'   => '¡Superpotenciala!',\n            'instead'   => '¡Superpotenciala por :count!',\n            'remove'    => 'Dejar de superpotenciar :campaign',\n        ],\n        'confirm'   => '¡Qué emocionante! Estás a punto de superpotenciar :campaign. Esto asignará tres (:cost) de tus potenciadores de campaña disponibles.',\n        'errors'    => [\n            'boosted'   => 'Oh oh, ¡Parece que :campaign ya está superpotenciada!',\n        ],\n        'success'   => 'La campaña :campaign está ahora superpotenciada. ¡Disfruta de todas las nuevas e increíbles funciones!',\n        'title'     => 'Superpotenciar :campaign',\n        'upgrade'   => '¿Listo para la experiencia Kanka definitiva? Superpotenciar :campaign asignará :cost potenciadores de campaña adicionales.',\n    ],\n    'title'     => 'Potenciadores de campaña',\n    'unboost'   => [\n        'confirm'   => 'Sí, estoy segur@',\n        'status'    => [\n            'boosting'      => 'potenciando',\n            'superboosting' => 'superpotenciando',\n        ],\n        'success'   => 'La campaña :campaign ya no está potenciada y tus potenciadores vuelven a estar disponibles.',\n        'title'     => 'De-potenciando una campaña',\n        'warning'   => '¿Estás seguro de que quieres parar de :action :campaign? Esto liberará los potenciadores asignados y ocultará todo el contenido y las características relacionadas con las mejoras hasta que la campaña sea potenciada de nuevo.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/settings/premium.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'remove'    => 'Remover premium',\n        'unlock'    => 'Convertirse en Premium',\n    ],\n    'create'        => [\n        'actions'   => [\n            'confirm'   => '¡Convertirse en premium!',\n        ],\n        'confirm'   => '¡Qué emocionante! Estás a punto de desbloquear funciones premium para :campaign. Esto utilizará una de tus campañas premium disponibles.',\n        'duration'  => 'Las campañas Premium permanecen así hasta que lo retires manualmente, o cuando finalice tu suscripción.',\n        'success'   => 'La campaña :campaign ahora es premium. ¡Disfruta de todas las nuevas e increíbles funciones!',\n    ],\n    'exceptions'    => [\n        'already'       => 'Ya se han desbloqueado las funciones Premium para esta campaña.',\n        'out-of-stock'  => 'No tienes suficientes campañas premium disponibles para activar esta campaña. Elimina el estado premium de otra campaña o :upgrade.',\n    ],\n    'pitch'         => [\n        'description'   => 'Hazte premium en las campañas y ayuda a desbloquear funciones increíbles para todos los participantes.',\n        'title'         => 'Las campañas premium obtienen',\n    ],\n    'ready'         => [\n        'available'         => 'Sus campañas premium disponibles.',\n        'pricing'           => 'Todos nuestros niveles de suscripción incluyen al menos una campaña premium y comienzan desde :amount al mes.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Vuélvete premium',\n    ],\n    'remove'        => [\n        'confirm'   => 'Sí, estoy seguro',\n        'cooldown'  => 'Las características premium de :campaign pueden ser removidas después de :date.',\n        'success'   => 'Se han removido las características premium de la campaña :campaign. Ahora puedes desbloquear funciones premium en otra campaña.',\n        'title'     => 'Removiendo características premium',\n        'warning'   => '¿Estás seguro de que quieres eliminar las características premium de :campaign? Esto te permitirá desbloquear otra campaña y ocultará todo el contenido y las características premium relacionadas con las características hasta que se vuelva a activar el estado premium de la campaña.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'               => [\n                'disable'           => 'Deshabilitar la autenticación de dos factores',\n                'disable-confirm'   => 'Haz clic de nuevo para confirmar',\n                'finish'            => 'Finalizar la configuración e iniciar sesión',\n            ],\n            'activation_helper'     => 'Para terminar de configurar la autenticación de dos factores de tu cuenta, sigue estas instrucciones.',\n            'disable'               => [\n                'helper'    => 'Si quieres desactivar la autenticación de dos factores, haz clic en el botón de abajo. Ten en cuenta que esto dejará tu cuenta vulnerable a cualquiera que conozca tus datos de acceso.',\n                'title'     => 'Deshabilitar la autenticación de dos factores',\n            ],\n            'enable_instructions'   => 'Para iniciar el proceso de activación, genera tu código QR de autenticación y escanéalo en la aplicación Google Authenticator (:ios, :android) u otra aplicación de autenticación similar.',\n            'enabled'               => 'La autenticación de dos factores está actualmente activada en su cuenta.',\n            'error_enable'          => 'Código inválido, inténtalo de nuevo',\n            'fields'                => [\n                'otp'       => 'Introduce la contraseña de un solo uso (OTP) proporcionada por la aplicación de autenticación.',\n                'qrcode'    => 'Escanea el siguiente código QR con tu aplicación de autenticación para generar una contraseña de un solo uso (OTP).',\n            ],\n            'generate_qr'           => 'Generar código QR',\n            'helper'                => 'La autenticación de dos factores (2FA) aumenta la seguridad del acceso al requerir dos métodos (también denominados factores) para verificar su identidad en cada inicio de sesión.',\n            'learn_more'            => 'Más información sobre la autenticación de dos factores.',\n            'social'                => 'La autenticación de dos factores de Kanka sólo está habilitada para los usuarios que inician sesión utilizando su correo electrónico y contraseña. Cambia tu método de inicio de sesión en la configuración de tu cuenta antes de poder activar esta opción.',\n            'success_disable'       => 'Autenticación de dos factores desactivada correctamente.',\n            'success_enable'        => 'La autenticación de dos factores se ha activado correctamente. Por favor, inicia sesión de nuevo para finalizar la configuración.',\n            'success_key'           => 'Tu código QR seguro se ha generado correctamente. Por favor, completa la configuración para activar la autenticación de dos factores.',\n            'title'                 => 'Autenticación de dos factores',\n        ],\n        'actions'           => [\n            'social'            => 'Cambiar a inicio de sesión en Kanka',\n            'update_email'      => 'Actualizar email',\n            'update_password'   => 'Actualizar contraseña',\n        ],\n        'email'             => 'Cambiar email',\n        'email_success'     => 'Email actualizado.',\n        'password'          => 'Cambiar contraseña',\n        'password_success'  => 'Contraseña actualizada.',\n        'social'            => [\n            'error'     => 'Ya estás utilizando el inicio de sesión de Kanka con esta cuenta.',\n            'helper'    => 'Tu cuenta está vinculada con :provider. Puedes dejar de usarla y cambiar al inicio de sesión estándar de Kanka escribiendo una contraseña.',\n            'success'   => 'Tu cuenta ahora usa el inicio de sesión de Kanka.',\n            'title'     => 'De social a Kanka',\n        ],\n        'title'             => 'Cuenta',\n    ],\n    'api'           => [\n        'helper'    => 'Bienvenido a las APIs de Kanka. Genera un Token de Acceso Personal para usar en tus llamadas a la API para obtener información sobre las campañas a las que perteneces.',\n        'link'      => 'Leer la documentación de la API',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Conectar',\n            'remove'    => 'Eliminar',\n        ],\n        'benefits'  => 'Kanka ofrece algunas integraciones con servicios de terceros. Hay más integraciones planeadas para el futuro.',\n        'discord'   => [\n            'confirm'   => '¿Estás seguro de que quieres desconectar tu cuenta de Discord? Esto eliminará todos los roles con los que hayas estado sincronizado.',\n            'errors'    => [\n                'add'   => 'Ha ocurrido un error tratando de vincular tu cuenta de Discord con Kanka. Por favor, inténtalo de nuevo.',\n            ],\n            'success'   => [\n                'add'       => 'Se ha vinculado tu cuenta de Discord.',\n                'remove'    => 'Se ha desvinculado tu cuenta de Discord.',\n            ],\n            'text'      => 'Accede a los roles de suscripción automáticamente.',\n            'unlock'    => 'Desbloquear roles de Discord',\n        ],\n        'title'     => 'Integración de aplicaciones',\n    ],\n    'billing'       => [\n        'placeholder'   => 'Si necesitas añadir información adicional de contacto o fiscal a tus recibos (dirección comercial, número de IVA, etc.), introdúcela a continuación y aparecerá en todos tus recibos.',\n        'save'          => 'Guardar los datos de facturación',\n        'title'         => 'Datos de facturación',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'La campaña :name ya está mejorada.',\n            'exhausted_boosts'      => 'Te has quedado sin mejoras. Elimina tu mejora de una campaña antes de dársela a otra.',\n            'exhausted_superboosts' => 'Te has quedado sin mejoras. Necesitas 3 mejoras para supermejorar una campaña.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Austria',\n        'belgium'       => 'Bégica',\n        'france'        => 'Francia',\n        'germany'       => 'Alemania',\n        'italy'         => 'Italia',\n        'netherlands'   => 'Holanda',\n        'spain'         => 'España',\n    ],\n    'invoices'      => [],\n    'layout'        => [\n        'title' => 'Diseño',\n    ],\n    'marketplace'   => [],\n    'menu'          => [\n        'account'               => 'Cuenta',\n        'api'                   => 'API',\n        'appearance'            => 'Apariencia',\n        'apps'                  => 'Aplicaciones',\n        'boosters'              => 'Potenciadores',\n        'notifications'         => 'Notificaciones',\n        'other'                 => 'Otros',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Opciones de pago',\n        'personal_settings'     => 'Ajustes personales',\n        'premium'               => 'Campañas Premium',\n        'profile'               => 'Perfil',\n        'settings'              => 'Configuración',\n        'subscription'          => 'Suscripción',\n        'subscription_status'   => 'Estado de la suscripción',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Funcionalidad obosleta. Si deseas apoyar a Kanka, puedes hacerlo mediante una :subscription. La vinculación con Patreon aún sigue activa para nuestros Patrons que vincularon sus cuentas antes de la mudanza de Patreon.',\n        'pledge'        => 'Pledge :name',\n        'remove'        => [\n            'button'    => 'Desvincular mi cuenta de Patreon',\n            'success'   => 'Tu cuenta de Patreon se ha desvinculado.',\n            'text'      => 'Desvincular tu cuenta de Patreon de Kanka eliminará tus bonus, tu nombre en el salón de la fama, tus mejoras y otras funcionalidades vinculadas. Sin embargo, tu contenido mejorado no se perderá: si vuelves a suscribirte, volverás a tener acceso a esos datos, incluyendo la posibilidad de volver a mejorar dicha campaña.',\n            'title'     => 'Desvincular mi cuenta de Patreon de Kanka',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Actualizar perfil',\n        ],\n        'avatar'    => 'Foto de perfil',\n        'success'   => 'Perfil actualizado.',\n        'title'     => 'Perfil personal',\n    ],\n    'referrals'     => [\n        'title' => 'Referidos',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Cancelar suscripción',\n            'subscribe'         => 'Suscribirse',\n            'update_currency'   => 'Guardar moneda preferida',\n        ],\n        'billing'               => [\n            'helper'    => 'Tu información de pago se procesa y se guarda de forma segura mediante :stripe. Este método de pago se usará para todas tus suscripciones.',\n            'saved'     => 'Método de pago guardado',\n        ],\n        'cancel'                => [\n            'grace'     => [\n                'text'  => 'Tu suscripción ya está programada para finalizar en :date, después de lo cual tus campañas premium volverán a ser campañas estándar y se desactivarán otros beneficios relacionados con el apoyo a Kanka.',\n                'title' => 'Período de gracia',\n            ],\n            'options'   => [\n                'competitor'        => 'Cambio a un competidor',\n                'financial'         => 'La suscripción es demasiado cara',\n                'missing_features'  => 'Faltan características',\n                'not_for'           => 'La suscripción no es para mí',\n                'not_playing'       => 'Ya no juego o la campaña está en pausa',\n                'not_using'         => 'Actualmente no utilizo Kanka',\n                'other'             => 'Otro',\n                'testing'           => 'Solo probando Kanka',\n            ],\n            'text'      => '¡Lamentamos verte marchar! Al cancelar tu suscripción, esta seguirá activa hasta el nuevo ciclo de facturación, tras lo cual perderás tus mejoras de campaña y otros beneficios relacionados. No tengas miedo de informarnos sobre cómo podemos mejorar o qué te ha llevado a tomar esta decisión.',\n            'title'     => 'Cancelar suscripción',\n        ],\n        'cancelled'             => 'Se ha cancelado tu suscripción. Puedes renovarla una vez el período de la suscripción actual termine.',\n        'change'                => [\n            'text'  => [\n                'downgrade_monthly' => 'Estás cambiando al plan :tier por :downgrade; después se te facturará mensualmente por :amount.',\n                'downgrade_yearly'  => 'Estás cambiando al plan :tier por :downgrade; después se te facturará anualmente por :amount.',\n                'monthly'           => 'Estás suscribiéndote al nivel :tier, que cuesta :amount mensuales.',\n                'upgrade_monthly'   => 'Estás actualizando al nivel :tier por :upgrade, a partir de ahora se facturará mensualmente por :amount.',\n                'upgrade_paypal'    => 'Estás actualizando al nivel :tier por :upgrade hasta :date.',\n                'upgrade_yearly'    => 'Estás actualizando al nivel :tier por :upgrade, a partir de ahora, se facturará anualmente por :amount.',\n                'yearly'            => 'Estás suscribiéndote al nivel :tier, que cuesta :amount anuales.',\n            ],\n            'title' => 'Cambiar nivel de suscripción',\n        ],\n        'coupon'                => [\n            'check'         => 'Ver código promocional',\n            'invalid'       => 'Código promocional no válido.',\n            'label'         => 'Código promocional',\n            'percent_off'   => '¡Tendrás un descuento del :percent% en tu primera suscripción anual!',\n        ],\n        'currencies'            => [\n            'brl'   => 'BRL',\n            'eur'   => 'Euros',\n            'usd'   => 'Dólares estadounidenses',\n        ],\n        'currency'              => [\n            'title' => 'Cambia la moneda de facturación',\n        ],\n        'errors'                => [\n            'callback'      => 'Nuestro proveedor de pagos nos ha informado de un error. Por favor, vuelve a intentarlo o infórmanos si el problema persiste.',\n            'failed'        => 'Estamos experimentando problemas con nuestro sistema de facturación. Por favor, ponte en contacto con nosotros en :email para obtener ayuda.',\n            'subscribed'    => 'No se ha podido procesar tu suscripción. Stripe nos ha dado este mensaje:',\n        ],\n        'fields'                => [\n            'active_since'      => 'Activa desde',\n            'active_until'      => 'Activa hasta',\n            'billing'           => 'Cobro',\n            'currency'          => 'Moneda de cobro',\n            'payment_method'    => 'Método de pago',\n            'plan'              => 'Plan actual',\n            'reason'            => 'Razón',\n            'reset'             => 'Restablecer los datos de facturación',\n            'reset_billing'     => 'Entiendo que al cambiar de divisa se perderá mi historial de facturación y tendré que volver a introducir mi método de pago.',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Paga por tu suscripción usando :method. Este método de pago no se renovará automáticamente al final de tu suscripción. :method solo está disponible en euros.',\n            'alternatives-2'        => 'Paga tu suscripción utilizando :method. Este pago es único y no se renueva automáticamente al final de la suscripción.',\n            'alternatives_warning'  => 'No se puede mejorar la suscripción usando este método. Por favor, crea una nueva suscripción cuando la actual termine.',\n            'alternatives_yearly'   => 'Debido a las restricciones de los pagos recurrentes, :method solo está disponible para las suscripciones anuales.',\n            'currency_block'        => 'No es posible cambiar de divisa mientras tengas una suscripción a Kanka activa, puedes cambiar de divisa una vez que finalice tu suscripción actual.',\n            'currency_reset'        => 'Al cambiar la divisa elegida, se borrará tu historial de facturación y tendrás que volver a introducir un método de pago.',\n            'paypal_v3'             => 'Paga tu suscripción anual de forma segura con PayPal.',\n            'stripe'                => 'Tu información de facturación se procesa y almacena de forma segura a través de :stripe.',\n        ],\n        'manage_subscription'   => 'Gestionar suscripción',\n        'payment_method'        => [\n            'actions'       => [\n                'add'               => 'Añadir',\n                'add_new'           => 'Añadir nuevo método de pago',\n                'change'            => 'Cambiar método de pago',\n                'save'              => 'Guardar método de pago',\n                'show_alternatives' => 'Métodos de pago alternativos',\n            ],\n            'add_one'       => 'Aún no tienes ningún método de pago guardado.',\n            'alternatives'  => 'Puedes suscribirte usando estos métodos de pago alternativos. Esto hará un solo cobro en tu cuenta y no se renovará automáticamente cada mes.',\n            'card'          => 'Tarjeta',\n            'card_name'     => 'Nombre en la tarjeta',\n            'country'       => 'País de residencia',\n            'ending'        => 'Termina en',\n            'helper'        => 'Se usará esta tarjeta para todas tus suscripciones.',\n            'new_card'      => 'Añadir nuevo método de pago',\n            'saved'         => ':brand que termina en :last4',\n        ],\n        'periods'               => [\n            'monthly'   => 'Mensual',\n            'yearly'    => 'Anual',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => 'Si lo deseas, indícanos el motivo de la reducción de categoría de tu suscripción.',\n            'reason'            => 'Opcionalmente, puedes contarnos por qué ya no apoyas a Kanka. ¿Faltaba algo? ¿Cambió tu situación financiera?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':amount :currency mensuales',\n            'cost_yearly'   => ':amount :currency anuales',\n        ],\n        'sub_status'            => 'Información sobre la suscripción',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Cancelar suscripción',\n                'downgrading'       => 'Contáctanos para bajar de nivel',\n                'rollback'          => 'Cambiar a Kobold',\n                'subscribe'         => 'Cambiar a :tier al mes',\n                'subscribe_annual'  => 'Cambiar a :tier anualmente',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Se ha registrado tu pago. Recibirás una notificación en cuanto terminemos de procesarlo y se active tu suscripción.',\n            'callback'      => 'Tu suscripción ha tenido éxito. Tu cuenta será actualizada en cuanto nuestro proveedor de pagos nos informe del cambio (puede llevar algunos minutos).',\n            'currency'      => 'Se ha actualizado tu moneda preferida.',\n            'subscribed'    => 'Tu suscripción ha tenido éxito. ¡No te olvides de suscribirte a la newsletter de votaciones comunitarias para enterarte cuando se abra una votación! Puedes cambiar tu configuración de newsletters en tu perfil.',\n        ],\n        'tiers'                 => 'Niveles de suscripción',\n        'trial_period'          => 'Las suscripciones anuales tienen un período de cancelación de 14 días. Contáctanos en :email si quieres cancelar tu suscripción anual y recuperar el dinero.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Información acerca de subir o bajar de nivel',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Tus bonus permanecen activos hasta el final del período de facturación.',\n                    'boosts'    => 'Lo mismo ocurre con tus campañas mejoradas. Las funcionalidades mejoradas se vuelven invisibles pero no se eliminan cuando dejas de mejorar la campaña.',\n                    'kobold'    => 'Para cancelar la suscripción, cambia al nivel de Kobold.',\n                    'premium'   => 'Lo mismo ocurre con tus campañas premium. Las funciones premium se vuelven invisibles, pero no se eliminan cuando una campaña deja de ser premium.',\n                ],\n                'title'     => 'Cancelar tu suscripción',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'Tu nivel actual estará activo hasta el final de tu ciclo de pago actual, tras el cual se bajará tu suscripción al nuevo nivel.',\n                ],\n                'provide_reason'    => 'Si puedes, por favor, comparte con nosotros por qué estás bajando de categoría tu suscripción.',\n                'title'             => 'Bajar de nivel',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Se cobrará en tu método de pago inmediatamente y tendrás acceso al nuevo nivel.',\n                    'prorate'   => 'Al subir de nivel de Owlbear a Elemental, solo se te cobrará la diferencia entre los dos niveles.',\n                ],\n                'title'     => 'Subir de nivel',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'No hemos podido hacer el cobro en tu tarjeta de crédito. Por favor, actualiza la información de la tarjeta y volveremos a intentarlo en los próximos días. Si vuelve a fallar, tu suscripción será cancelada.',\n            'patreon'       => 'Tu cuenta se encuentra vinculada con Patreon. Desvincúlala en la configuración de :patreon antes de cambiarla por una suscripción de Kanka.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'count'             => 'Miembro de :member',\n        'created_campaigns' => 'Tus campañas',\n        'follow_more'       => 'Encontrar campañas',\n        'followed_campaigns'=> 'Campañas seguidas',\n        'new_campaign'      => 'Nueva campaña',\n        'public_campaigns'  => 'Campañas públicas',\n        'reorder'           => 'Reordenar',\n        'updated'           => 'Actualizada',\n    ],\n    'dashboard'         => 'Tablero',\n    'entity-creator'    => 'Creador rápido',\n    'gallery'           => 'Galería',\n    'game'              => 'Juego',\n    'other'             => 'Otros',\n    'recent'            => 'Cambios recientes',\n    'relations'         => 'Relaciones',\n    'settings'          => 'Configuración',\n    'time'              => 'Tiempo',\n    'world'             => 'Mundo',\n];\n"
  },
  {
    "path": "lang/es/spotlights.php",
    "content": "<?php\n\nreturn [\n    'applied'       => [\n        'actions'       => [\n            'retract'   => 'Retirar solicitud',\n        ],\n        'description'   => 'Tu solicitud ha sido enviada y ahora está en revisión. Recibirás una notificación cuando sea aprobada o rechazada.',\n        'title'         => 'Solicitud enviada',\n    ],\n    'apply'         => [\n        'errors'    => [\n            'empty' => 'La pregunta :field necesita más contenido',\n        ],\n    ],\n    'approved'      => [\n        'description'   => '¡Felicidades! Tu solicitud ha sido aprobada y ahora aparece en la página de :spotlight.',\n        'title'         => 'Solicitud aprobada',\n    ],\n    'faq'           => [\n        'finisher'  => 'Enviar una solicitud no garantiza la selección. Leemos cada solicitud, pero no podemos destacar todas.',\n        'how'       => [\n            'a' => [\n                'end'           => 'No se basa en número de seguidores. No en popularidad. No en estado de membresía.',\n                'lead'          => 'Seleccionamos de 1 a 3 campañas por mes.',\n                'req1'          => 'Identidad y temas claros',\n                'req2'          => 'Construcción de mundo bien desarrollada',\n                'req3'          => 'Historias o enfoques interesantes',\n                'requirements'  => 'La selección es editorial, no competitiva. Buscamos:',\n            ],\n            'q' => '¿Cómo se seleccionan las campañas?',\n        ],\n        'reapply'   => [\n            'a' => 'Sí. Si tu campaña no es seleccionada, puedes volver a postularte más adelante, especialmente si tu mundo ha evolucionado.',\n            'q' => '¿Puedo postularme más de una vez?',\n        ],\n        'selected'  => [\n            'a' => [\n                'end'   => 'Se te notificará antes de la publicación.',\n                'lead'  => 'Si es seleccionada:',\n                'req1'  => 'Tu campaña recibe el logro de Campaña Destacada',\n                'req2'  => 'Publicamos un artículo en el :blog y en la :showcase',\n                'req3'  => 'Podríamos editar ligeramente tus respuestas para mayor claridad',\n            ],\n            'q' => '¿Qué sucede si mi campaña es seleccionada?',\n        ],\n        'what'      => [\n            'a' => 'El Spotlight resalta campañas excepcionales creadas con Kanka. Las campañas seleccionadas aparecen en los destacados de Kanka y en una breve entrevista publicada en el blog.',\n            'q' => '¿Qué es el Spotlight?',\n        ],\n        'who'       => [\n            'a' => [\n                'end'           => 'Sin tamaño mínimo. Sin restricción de sistema.',\n                'lead'          => 'Cualquier campaña pública en Kanka puede postularse',\n                'req1'          => 'Ser públicamente accesible',\n                'req2'          => 'Mostrar uso activo (contenido, historial o jugadores)',\n                'req3'          => 'Representar el tipo de mundos de los que otros puedan aprender',\n                'requirements'  => 'Tu campaña debe:',\n            ],\n            'q' => '¿Quién puede postularse?',\n        ],\n    ],\n    'form'          => [\n        'actions'       => [\n            'apply'     => 'Enviar solicitud',\n            'retract'   => 'Retirar solicitud',\n            'save'      => 'Guardar borrador',\n        ],\n        'draft'         => 'Este es un borrador de tu solicitud. Puedes guardarlo y volver más tarde.',\n        'not-public'    => 'Esta campaña no es públicamente visible y no puede postularse al Spotlight.',\n        'preset'        => 'Cuéntanos un poco sobre :campaign y por qué crees que merece ser destacada. Puedes guardar y volver a estas preguntas más tarde.',\n        'required'      => 'Este campo es obligatorio.',\n        'title'         => 'Formulario de solicitud para destacados',\n    ],\n    'overview'      => [\n        'cta'           => 'Postularse a destacados con :name',\n        'not-public'    => ':name no es una campaña públicamente visible.',\n        'showcase'      => 'Ver Destacados',\n    ],\n    'placeholders'  => [\n        'inspiration'   => 'Libros, juegos, historia, música, vibras',\n        'kanka'         => 'Cuéntanos por qué Kanka terminó siendo la herramienta adecuada para tu mundo',\n        'proud'         => 'Puede ser el lore, los jugadores, la longevidad, el estado actual',\n        'stories'       => 'Tragedia, heroísmo, política, familia elegida, caos absoluto',\n        'time'          => '¿Meses, años, décadas, a lo largo de múltiples generaciones?',\n        'world'         => 'Temas, emociones, conflictos (el gancho)',\n    ],\n    'questions'     => [\n        'inspiration'   => '¿Qué inspira este mundo?',\n        'kanka'         => '¿Por qué diriges partidas en Kanka?',\n        'proud'         => '¿De qué estás más orgulloso?',\n        'share'         => 'Permitir al equipo de Kanka usar tu respuesta en su material de marketing.',\n        'stories'       => '¿Qué tipo de historias surgen en la mesa?',\n        'time'          => '¿Cuánto tiempo llevas construyendo este mundo?',\n        'world'         => '¿De qué trata realmente este mundo?',\n    ],\n    'rejected'      => [\n        'description'   => 'Tu solicitud ha sido rechazada. Por favor, inténtalo nuevamente más adelante.',\n        'title'         => 'Solicitud rechazada',\n    ],\n    'retract'       => [\n        'success'   => 'Tu solicitud ha sido retirada correctamente. Ahora puedes editarla nuevamente.',\n    ],\n    'rules'         => 'Seleccionamos de 1 a 3 campañas cada mes para destacarlas en la :showcase de Kanka. La selección no está garantizada. Las campañas destacadas reciben un logro permanente y una entrevista publicada.',\n    'started'       => 'Para comenzar, selecciona una de tus campañas.',\n    'title'         => 'Postularse a Destacados',\n];\n"
  },
  {
    "path": "lang/es/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => 'Mundo de :user',\n    ],\n    'character1'    => [\n        'age'           => '[20s/30s/40s]',\n        'background'    => [\n            'cur'       => 'Actualmente [ocupación/rol]',\n            'loc'       => 'Creció en [ciudad natal/región]',\n            'seeking'   => 'Buscando [objetivo/motivación]',\n            'title'     => 'Trasfondo',\n        ],\n        'description'   => [\n            'intro'     => '[Una breve introducción a tu personaje: quién es, de dónde viene y qué quiere.]',\n            'template'  => 'Este es un personaje de plantilla que puedes personalizar. Reemplaza los detalles de ejemplo a continuación con la información de tu propio personaje. Siempre puedes agregar más campos después.',\n            'tip'       => 'Consejo: Comienza solo con un nombre y una descripción de una oración. Puedes ampliar los detalles conforme se desarrolla tu mundo.',\n        ],\n        'name'          => '[Nombre de tu personaje]',\n        'personality'   => [\n            'trait1'    => [\n                'name'  => 'Rasgo 1',\n                'value' => '[Valiente/Cauteloso/Ambicioso]',\n            ],\n            'trait2'    => [\n                'name'  => 'Rasgo 2',\n                'value' => '[Leal/Independiente/Astuto]',\n            ],\n            'trait3'    => [\n                'name'  => 'Rasgo 3',\n                'value' => '[Optimista/Cínico/Pragmático]',\n            ],\n        ],\n        'physical'      => [\n            'build'     => [\n                'name'  => 'Complexión',\n                'value' => '[Delgado/Promedio/Musculoso]',\n            ],\n            'features'  => [\n                'name'  => 'Rasgos notables',\n                'value' => '[Cicatrices, tatuajes, ropa distintiva]',\n            ],\n        ],\n    ],\n    'character2'    => [\n        'description'   => [\n            'first' => 'Un personaje secundario que ayuda o viaja con :mention. Personaliza estos detalles para que se adapten a tu historia.',\n            'second'=> 'Consejo: Los personajes secundarios no necesitan tantos detalles como los protagonistas. Enfócate en lo que los hace útiles o interesantes para tu historia.',\n        ],\n        'name'          => '[Nombre del personaje aliado]',\n        'relation'      => '[Amigo/Mentor/Rival]',\n        'skills'        => [\n            'first' => '[Habilidad 1: Combate/Magia/Sanación/Artesanía]',\n            'second'=> '[Habilidad 2: Social/Conocimiento/Técnica]',\n            'third' => '[Habilidad 3: Talento único o especialidad]',\n            'title' => 'Habilidades y capacidades',\n        ],\n    ],\n    'city'          => [\n        'description'   => 'El corazón palpitante del reino, donde comerciantes, nobles y gente común se mezclan en bulliciosos mercados y grandes plazas. Los viejos muros de la ciudad aún se mantienen en pie, aunque la ciudad hace tiempo que creció más allá de ellos.',\n        'districts'     => [\n            'first' => 'Barrio noble: Casas señoriales y jardines',\n            'fourth'=> 'Zona portuaria: Puerto fluvial, almacenes',\n            'second'=> 'Distrito del mercado: Comercio, artesanía, tabernas',\n            'third' => 'Ciudad vieja: Ciudad amurallada original',\n            'title' => 'Distritos',\n        ],\n        'locations'     => [\n            'first' => 'El Palacio Real (centro del Barrio Noble)',\n            'second'=> 'El Gran Bazar (Distrito del mercado)',\n            'third' => 'Posada La Espada Oxidada (punto de encuentro popular de aventureros)',\n            'title' => 'Lugares notables',\n        ],\n        'name'          => '[Nombre de tu ciudad capital]',\n        'type'          => 'Capital',\n    ],\n    'item1'         => [],\n    'kingdom'       => [\n        'description'   => 'Un reino próspero conocido por sus fértiles tierras de cultivo y bosques ancestrales. La familia real ha gobernado durante tres generaciones, manteniendo la paz mediante la diplomacia y el comercio.',\n        'features'      => [\n            'capital'   => [\n                'name'  => 'Capital',\n            ],\n            'exp'       => [\n                'name'  => 'Exportación principal',\n                'value' => 'Grano, madera',\n            ],\n            'gov'       => [\n                'name'  => 'Gobierno',\n                'value' => 'Monarquía hereditaria',\n            ],\n            'pop'       => [\n                'name'  => 'Población',\n                'value' => '~50\\'000',\n            ],\n            'title'     => 'Características notables',\n        ],\n        'name'          => '[Nombre de tu reino]',\n        'recent'        => [\n            'first' => 'Mayor actividad de bandidos en los caminos del este',\n            'second'=> 'Cosecha fallida en las provincias del sur',\n            'title' => 'Eventos recientes',\n        ],\n        'type'          => 'Reino',\n    ],\n    'kingdom1'      => [],\n    'kingdom2'      => [],\n    'name'          => ':name (ejemplo)',\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/es/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Suscríbete a Kanka para subir más imágenes, disfrutar de una experiencia sin anuncios, :boosters y mucho :more. Utilizamos :stripe para gestionar toda la facturación, sin que la información de la tarjeta de crédito se almacene o transite por nuestros servidores.',\n        'more'  => 'más características sorprendentes',\n    ],\n    'errors'    => [\n        'grace'                 => 'Tu suscripción actual finaliza en :date, a partir de entonces podrás volver a suscribirte.',\n        'invalid_card_country'  => [\n            'brl'   => 'Lo sentimos, pero actualmente sólo aceptamos pagos en BRL para clientes con tarjetas de crédito brasileñas. Si crees que se trata de un error, ponte en contacto con nosotros en :email.',\n        ],\n        'invalid_currency'      => 'Anteriormente tenías una suscripción en :old, lo que te impide tener una nueva suscripción en :new. Por favor, cambia tu divisa a :old, o contacta con nosotros en :email si deseas cambiar de divisa.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/subscriptions/cancellation.php",
    "content": "<?php\n\nreturn [\n    'intro' => '¡Lamentamos verte partir! Tu suscripción seguirá activa hasta :date, después de lo cual tus campañas premium volverán al modo estándar y estos beneficios se desactivarán.',\n    'loss'  => [\n        'ads'       => [\n            'title' => 'Experiencia sin anuncios para ti y tus jugadores',\n        ],\n        'discord'   => [\n            'title' => 'Rol \":role\" en nuestra comunidad de Discord',\n        ],\n        'downgrade' => 'Puedes degradar tu suscripción en lugar de cancelarla para conservar la mayoría de tus increíbles beneficios.',\n        'premium'   => [\n            'players'   => '{1}:count jugador perderá acceso a funciones premium |[2,*]:count jugadores perderán acceso a funciones premium',\n            'plugins'   => '{1}Acceso a :count plugin instalado |[2,*]Acceso a :count plugins instalados',\n            'storage'   => 'Tu :current',\n            'title'     => '{0}Estado premium en \":campaign\"|{1}Estado premium en \":campaign\" y :count otra campaña|[2,*]Estado premium en \":campaign\" y :count otras campañas',\n        ],\n        'roadmap'   => 'Mejoramos Kanka constantemente con ideas enviadas por los usuarios a través de nuestro :roadmap; quizá esa función que falta esté a la vuelta de la esquina.',\n        'title'     => 'Antes de cancelar, esto es lo que perderás:',\n    ],\n    'pause' => [\n        'button'    => 'Pausar suscripción por 1–3 meses',\n        'helper'    => 'Mantén todo. Sin cargos. Reanuda en cualquier momento.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/subscriptions/cancelled.php",
    "content": "<?php\n\nreturn [\n    'active'    => [\n        'adfree'    => 'Una experiencia sin anuncios',\n        'discord'   => 'Roles de :discord solo para suscriptores',\n        'helper'    => 'Tu suscripción permanecerá activa hasta :date. Hasta entonces, seguirás disfrutando de todos los beneficios de la suscripción, incluyendo:',\n        'limit'     => 'Límites de carga de archivos aumentados',\n        'more'      => '¡Y mucho más!',\n        'premium'   => 'Campañas premium y sus funciones',\n        'title'     => 'Tus beneficios siguen activos',\n    ],\n    'change'    => [\n        'action'    => 'Renueva tu suscripción ahora',\n        'helper'    => '¡Nos encantaría tenerte de vuelta! Puedes renovar tu suscripción en cualquier momento para continuar justo donde lo dejaste.',\n        'title'     => '¿Cambiaste de opinión?',\n    ],\n    'contact'   => [\n        'feedback'  => 'Si hay algo que podríamos haber hecho mejor, nos encantaría saberlo:',\n        'helper'    => 'Aunque no tengas una suscripción, sigues siendo parte de la comunidad de Kanka. Sigue creando tus mundos y siéntete libre de reconectarte cuando sea el momento adecuado.',\n        'send'      => 'Contáctanos con tus comentarios',\n        'title'     => 'Mantente en contacto',\n    ],\n    'next'      => [\n        'data'      => 'Tus datos estarán seguros, nada se elimina y puedes renovar tu suscripción en cualquier momento.',\n        'discord'   => 'Ya no tendrás acceso a las funciones y canales exclusivos para suscriptores.',\n        'helper'    => 'Una vez que termine tu suscripción:',\n        'premium'   => 'Las campañas con funciones premium activadas perderán su estado premium.',\n        'title'     => '¿Qué sucede después de eso?',\n    ],\n    'seo_title' => 'Lamentamos que te vayas',\n    'subtitle'  => 'Gracias por haber sido suscriptor, tu apoyo ha significado mucho para nosotros. Esto es lo que puedes esperar ahora:',\n    'title'     => 'Lamentamos verte partir, :name',\n];\n"
  },
  {
    "path": "lang/es/subscriptions/confirm.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => 'Paga :currency:amount ahora',\n        'paypal'    => 'Paga :currency:amount con PayPal',\n        'subscribe' => 'Suscribirse por :currency:amount',\n    ],\n    'helpers'   => [\n        'auto-renew'    => [\n            'monthly'   => 'Tu suscripción se renueva automáticamente cada mes. La próxima fecha de facturación es :date.',\n            'none'      => 'Pagar con PayPal es un pago único y no se renueva automáticamente. Puedes volver a suscribirte cuando tu suscripción termine después de :date.',\n            'yearly'    => 'Tu suscripción se renueva automáticamente cada 12 meses. La próxima fecha de facturación es :date.',\n        ],\n        'paypal'        => 'Serás redirigido a PayPal para completar esta transacción.',\n        'refund'        => 'Ofrecemos una política de reembolso sin preguntas durante 14 días en todas las suscripciones anuales. Simplemente envíanos un correo a :email para iniciar el proceso de reembolso.',\n        'tiny'          => 'Gracias por apoyar a un pequeño equipo de apasionados creadores de mundos.',\n    ],\n    'title'     => 'Suscripción de :name',\n];\n"
  },
  {
    "path": "lang/es/subscriptions/faq.php",
    "content": "<?php\n\nreturn [\n    'cancellation'  => [\n        'answer'    => '¡Claro! Encontrarás un botón para cancelar justo en esta página si estás suscrito actualmente. Todos los beneficios de la suscripción permanecerán activos hasta el final de tu período de facturación. Ten en cuenta que las suscripciones por PayPal terminan automáticamente al concluir, ya que no soportan renovación automática.',\n        'question'  => '¿Puedo cancelar mi suscripción en cualquier momento?',\n    ],\n    'cost'          => [\n        'answer'    => 'Kanka ofrece tres niveles de suscripción nombrados como monstruos de D&D: Owlbear, Wyvern y Elemental. Los precios varían según tu moneda preferida (USD, EUR o BRL). Además, disfrutarás de dos meses gratis al elegir una suscripción anual en lugar de facturación mensual.',\n        'question'  => '¿Cuánto cuesta una suscripción?',\n    ],\n    'data'          => [\n        'answer'    => 'Puedes estar tranquilo, nunca eliminamos tus datos cuando una suscripción termina. Las campañas premium simplemente vuelven a la funcionalidad estándar, con las funciones premium temporalmente deshabilitadas. Cuando vuelves a suscribirte, todas tus configuraciones y datos premium se restauran de inmediato tal como los dejaste.',\n        'question'  => '¿Qué pasa con mis datos si cancelo mi suscripción?',\n    ],\n    'discount'      => [\n        'answer'    => '¡Sí! Recompensamos a nuestros suscriptores anuales con dos meses gratis en comparación con la facturación mensual. Esta es nuestra forma de agradecerte por tu compromiso a largo plazo con Kanka.',\n        'question'  => '¿Hay descuentos para las suscripciones anuales?',\n    ],\n    'downgrade'     => [\n        'answer'    => 'Puedes cambiar tu nivel de suscripción en cualquier momento. Al subir de nivel, solo te cobraremos la diferencia entre tu plan actual y el nuevo por el resto de tu período de facturación. Al bajar de nivel, la nueva tarifa más baja se aplicará en tu próxima fecha de renovación, sin interrupción de tus beneficios actuales.',\n        'question'  => '¿Cómo puedo mejorar o degradar mi suscripción?',\n    ],\n    'fail'          => [\n        'answer'    => 'Si un pago no se procesa, te notificaremos por correo electrónico de inmediato e intentaremos cobrar tu tarjeta hasta tres veces más automáticamente. Si estos intentos no tienen éxito, tu suscripción se pausará. Puedes resolver esto fácilmente actualizando tu información de :billing con un método de pago válido.',\n        'question'  => '¿Qué pasa si mi pago falla?',\n    ],\n    'help'          => [\n        'answer'    => 'Tu suscripción paga por nuestro tiempo, nuestros servidores y la libertad de mantener Kanka sostenible sin perseguir el crecimiento a cualquier costo. Nos permite corregir errores más rápido, desarrollar funciones en las que realmente creemos y mantenernos atentos a la comunidad en lugar de a los inversores. En pocas palabras: mantiene a Kanka vivo y mejorando.',\n        'question'  => '¿Cómo ayuda mi suscripción a Kanka?',\n    ],\n    'methods'       => [\n        'answer'    => 'Aceptamos pagos con tarjeta de crédito y PayPal en USD, EUR y BRL. La seguridad de tu pago es importante para nosotros; todo el procesamiento de tarjetas de crédito se realiza de forma segura a través de nuestro proveedor de pagos de confianza, :stripe.',\n        'question'  => '¿Qué métodos de pago aceptan?',\n    ],\n    'refund'        => [\n        'answer'    => '¡Sí! Ofrecemos una política de reembolso del 100% sin preguntas durante 14 días para todas las suscripciones anuales. Simplemente envíanos un correo a :email solicitando tu reembolso, y nos encargaremos de todo.',\n        'question'  => '¿Ofrecen reembolsos?',\n    ],\n    'renewal'       => [\n        'answer'    => 'Sí, para suscripciones con tarjeta de crédito, renovaremos automáticamente tu plan al mismo precio cuando termine tu período de facturación. Las suscripciones por PayPal son la excepción; requieren renovación manual porque PayPal no admite la renovación automática para nuestro servicio.',\n        'question'  => '¿Se me cobrará automáticamente cuando se renueve mi suscripción?',\n    ],\n    'security'      => [\n        'answer'    => 'Tu seguridad financiera es nuestra prioridad. Trabajamos con :stripe, un procesador de pagos que cumple con PCI y mantiene los más altos estándares en seguridad. Todos los datos sensibles de pago son gestionados y almacenados por Stripe bajo protocolos compatibles con el GDPR, no en nuestros servidores.',\n        'question'  => '¿Qué tan segura está mi información de pago?',\n    ],\n    'sharing'       => [\n        'answer'    => '¡Por supuesto! Tu suscripción te permite activar campañas premium que benefician a todos los involucrados. Todos los miembros de la campaña disfrutan de las funciones premium dentro de esa campaña, sin importar su estado personal de suscripción, haciendo de Kanka la opción perfecta para la creación colaborativa de mundos.',\n        'question'  => '¿Puedo compartir mi cuenta o suscripción con otros?',\n    ],\n    'title'         => 'Preguntas frecuentes',\n    'trial'         => [\n        'answer'    => 'Aunque no ofrecemos una prueba tradicional, la versión gratuita de Kanka brinda potentes herramientas para la creación de mundos y la gestión de campañas para que comiences. Cuando estés listo para más, la suscripción desbloquea funciones premium como límites aumentados para subir imágenes, una experiencia sin anuncios, roles exclusivos en Discord y mejoras adicionales para tu kit de creación de mundos.',\n        'question'  => '¿Hay una prueba gratuita disponible?',\n    ],\n    'update'        => [\n        'answer'    => 'Actualizar tus datos de facturación es sencillo, solo visita tu página de :billing en la configuración de tu cuenta. Allí puedes modificar los métodos de pago, actualizar la información de la tarjeta o cambiar las direcciones de facturación según sea necesario.',\n        'question'  => '¿Cómo actualizo mi información de facturación?',\n    ],\n    'why'           => [\n        'answer'    => 'Kanka es creado y mantenido por un pequeño equipo independiente. Las suscripciones son lo que nos permite trabajar en él a largo plazo, mejorarlo de forma constante y mantenerlo libre de prácticas engañosas. No estás pagando a una corporación; estás financiando directamente a las personas que diseñan, desarrollan y dan soporte a la plataforma.',\n        'question'  => '¿Por qué Kanka cobra suscripciones?',\n    ],\n];\n"
  },
  {
    "path": "lang/es/subscriptions/finish.php",
    "content": "<?php\n\nreturn [\n    'discord'   => [\n        'action'    => 'Conecta tu cuenta de Discord',\n        'enjoy'     => 'Dirígete a Discord para disfrutar de tus nuevos beneficios',\n        'helper'    => 'Como suscriptor, desbloqueas roles exclusivos y canales privados en nuestra comunidad de Discord, pero primero, necesitas conectar tu cuenta de Discord.',\n        'title'     => 'Obtén tus beneficios de Discord',\n    ],\n    'header'    => '¡Te has suscrito con éxito, bienvenido a la sociedad secreta de los creadores de mundos!',\n    'help'      => [\n        'contact-us'    => 'contáctanos',\n        'helper'        => 'Si tienes alguna pregunta o comentario, :contact-us o visita nuestros :docs. Estamos aquí para hacer que tu experiencia de creación de mundos sea mágica.',\n        'title'         => '¿Necesitas ayuda?',\n    ],\n    'next'      => 'Tu apoyo nos ayuda a crecer y a seguir mejorando Kanka para todos. Aquí tienes lo que puedes hacer a continuación para desbloquear todos los beneficios de tu suscripción:',\n    'premium'   => [\n        'action'    => 'Desbloquear',\n        'helper'    => 'Desbloquea funciones premium como módulos personalizados, acceso a los :plugins, ¡y mucho más!',\n        'title'     => 'Activa las funciones premium en una campaña',\n    ],\n    'roadmap'   => [\n        'action'    => 'Consulta la hoja de ruta y sugiere nuevas funciones',\n        'helper'    => 'Estamos construyendo Kanka para ti. ¡Consulta la hoja de ruta pública y sugiere o vota por las funciones que te gustaría ver!',\n        'title'     => 'Ayuda a moldear el futuro de Kanka',\n    ],\n    'title'     => '¡Gracias por apoyar a Kanka!',\n];\n"
  },
  {
    "path": "lang/es/subscriptions/free-trial.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'accept'    => 'Inicia tu prueba gratuita',\n        'magic'     => 'No se necesita tarjeta. Es magia pura.',\n    ],\n    'final'     => [\n        'magic' => 'Sin compromisos, sin trucos. Solo más magia para tu campaña.',\n        'title' => 'Comenzar mi prueba de 15 días ahora',\n    ],\n    'header'    => 'Hemos visto tu dedicación en los reinos de Kanka. Para honrar tu viaje, te otorgamos una :what. No se necesitan monedas, gemas, ni tarjeta.',\n    'included'  => [\n        'title' => 'Qué incluye',\n        'upsell'=> [\n            'action'    => 'Ver todos los niveles de suscripción',\n            'pitch'     => 'Esto es solo el nivel :tier. ¿Listo para desbloquear aún más?',\n        ],\n    ],\n    'pitch'     => [\n        'title' => 'Disfruta de una prueba gratuita de 15 días a cuenta nuestra. Desbloquea todas las funciones premium y descubre lo que te estabas perdiendo.',\n    ],\n    'started'   => [\n        'header'    => 'Has iniciado tu prueba gratuita con éxito, ¡bienvenido al círculo interior de los creadores de mundos!',\n        'title'     => '¡Bienvenido a tu prueba gratuita!',\n    ],\n    'tease'     => [\n        'helper'    => '¿Quieres desbloquear cargas de archivos más grandes y más espacios premium para campañas? Visita la página :subscription para ver lo que más te espera.',\n        'title'     => 'Pero quieres más',\n    ],\n    'title'     => '¡Una nueva misión te espera, aventurero!',\n    'what'      => 'Prueba gratuita de :amount días del nivel :tier',\n    'why'       => [\n        'helper'    => 'Has creado, explorado y hecho crecer tu campaña. Tu lealtad no ha pasado desapercibida. Piensa en esto como un regalo de agradecimiento de parte del equipo de Kanka.',\n        'title'     => 'Te has ganado esta recompensa',\n    ],\n];\n"
  },
  {
    "path": "lang/es/subscriptions/paypal.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'contact'       => 'Si este problema persiste, contáctanos en :email.',\n        'failed'        => 'PayPal no pudo generar una factura. Por favor, inténtalo de nuevo.',\n        'incomplete'    => 'El pago de PayPal está incompleto. Por favor, inténtalo de nuevo.',\n        'rejected'      => 'PayPal generó una factura no válida. Por favor, inténtalo de nuevo.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'Esta promoción ya no está activa.',\n        'invalid'   => 'Promoción desconocida.',\n        'only-new'  => 'Esta promoción sólo está disponible para nuevos suscriptores.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/subscriptions/renew.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'renew' => 'Renovar suscripción',\n    ],\n    'helper'    => 'Sin embargo, puedes optar por renovar tu suscripción para disfrutar de los beneficios sin interrupciones.',\n    'title'     => 'Renovación de la suscripción',\n];\n"
  },
  {
    "path": "lang/es/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe no ha podido cargar tu método de pago. En consecuencia, tu suscripción se ha desactivado.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'           => 'Añadir etiqueta nueva',\n            'add_entity'    => 'Añadir a entidad',\n        ],\n        'create'    => [\n            'attach_success'        => '{1} Se ha añadido :count entidad a la etiqueta :name.|[2,*] Se han añadido :count entidades a la etiqueta :name.',\n            'attach_success_entity' => 'Etiquetas actualizadas con éxito para :name.',\n            'entity'                => 'Añadir etiquetas a :name',\n            'helper'                => 'Etiquetar una o varias entidades con :name',\n            'title'                 => 'Etiquetar entidades',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nueva etiqueta',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'          => 'Entidades anidadas',\n        'is_auto_applied'   => 'Aplicar automáticamente a nuevas entidades',\n        'is_hidden'         => 'Oculto en la cabecera y en el tooltip',\n    ],\n    'helpers'       => [\n        'no_children'   => 'Actualmente no hay entidades etiquetadas con esta etiqueta.',\n        'no_posts'      => 'Actualmente no hay entradas etiquetadas con esta etiqueta.',\n    ],\n    'hints'         => [\n        'children'          => 'Aquí se muestran todas las entidades que pertenecen directamente a esta etiqueta y a todas las etiquetas anidadas.',\n        'is_auto_applied'   => 'Aplicar automáticamente esta etiqueta a las entidades recién creadas.',\n        'is_hidden'         => 'No mostrar esta etiqueta en la cabecera o tooltip de una entidad.',\n        'tag'               => 'A continuación se muestran todas las etiquetas que están directamente bajo esta etiqueta.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Usa etiquetas para agrupar y filtrar entidades en todo tu mundo para facilitar la navegación.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Tradiciones, guerras, historia, religión...',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Entidades anidadas',\n        ],\n    ],\n    'tags'          => [],\n    'transfer'      => [\n        'entities'      => [\n            'helper'    => 'Transferir entidades etiquetadas con :name a otra etiqueta.',\n            'title'     => 'Transferir entidades',\n        ],\n        'fail'          => 'Fallo al transferir entidades de :tag a :newTag',\n        'fail_post'     => 'Error al transferir entradas de :tag a :newTag',\n        'posts'         => [\n            'helper'    => 'Transferir posts etiquetados con :name a otra etiqueta.',\n            'title'     => 'Transferir publicaciones',\n        ],\n        'success'       => 'Entidades de :tag transferidas con éxito a :newTag',\n        'success_post'  => 'Se han transferido correctamente las entradas de :tag a :newTag',\n        'transfer'      => 'Transferir',\n    ],\n];\n"
  },
  {
    "path": "lang/es/teams.php",
    "content": "<?php\n\nreturn [\n    'index'     => [\n        'lead'          => 'Hacer que la construcción de mundos sea divertida y fiable',\n        'translations'  => 'Traducciones',\n    ],\n    'leads'     => [\n        'translators'   => 'Kanka está traducido a varios idiomas gracias a estos increíbles colaboradores.',\n    ],\n    'patreon'   => [],\n    'people'    => [\n        'itzamna'   => [\n            'title' => 'Desarrollador junior',\n        ],\n        'jay'       => [\n            'title' => 'Fundador y desarrollador principal',\n        ],\n        'jon'       => [\n            'title' => 'Cofundador y gerente',\n        ],\n        'kaz'       => [\n            'title' => 'Destructor de bichos',\n        ],\n        'laura'     => [\n            'title' => 'Medios sociales',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => [\n            'monthly'   => 'Pagar mensualmente',\n            'save'      => 'ahorra 2 meses',\n            'yearly'    => 'Pagar anualmente',\n        ],\n        'subscribe' => [\n            'choose'    => 'Elegir :tier',\n            'downgrade' => 'Cambiar al plan :tier',\n            'monthly'   => ':tier mensual',\n            'upgrade'   => 'Mejorar al plan :tier',\n            'yearly'    => ':tier anual',\n        ],\n    ],\n    'current'   => 'Tu suscripción actual',\n    'features'  => [\n        'api_requests'      => ':amount solicitudes API / minuto',\n        'boosters'          => 'Mejoras de campaña',\n        'discord'           => 'Roles de Discord',\n        'feature_influence' => 'Influencia sobre nuevas funcionalidades',\n        'file_size'         => 'Subir archivos de hasta :size',\n        'import'            => 'Importador de campaña',\n        'modules'           => ':count módulos personalizados',\n        'nice_image'        => 'Imágenes por defecto en las entidades',\n        'no_ads'            => 'Sin anuncios',\n        'pagination'        => 'Máximo de hasta :amount resultados en una página',\n        'premium'           => 'Cada uno incluye: :storage GB de almacenamiento, :modules módulos personalizados',\n        'roadmap'           => 'Vota sobre las ideas en la hoja de ruta',\n        'storage'           => ':count GB de almacenamiento',\n    ],\n    'helpers'   => [\n        'premium'   => 'Estos beneficios se aplican a las campañas premium que desbloquees.',\n    ],\n    'periods'   => [\n        'billed_monthly'    => 'facturado mensualmente',\n        'billed_yearly'     => 'facturado anualmente',\n    ],\n    'pricing'   => ':amount / mes :currency',\n    'ribbons'   => [\n        'best-value'    => 'Mejor relación calidad-precio',\n        'current'       => 'Suscripción actual',\n    ],\n    'target'    => [\n        'elemental' => 'Para profesionales del worldbuilding que gestionan múltiples escenarios épicos y campañas expansivas.',\n        'owlbear'   => 'Perfecto para creadores de mundos en solitario que desean potenciar su campaña principal.',\n        'wyvern'    => 'Ideal para directores de juego que dirigen múltiples aventuras o narradores colaborativos.',\n    ],\n    'tiny'      => 'pequeño equipo',\n    'toggle'    => [],\n    'why'       => 'Kanka está creado por un :tiny de apasionados creadores de mundos. Las suscripciones financian a las personas, los servidores y el tiempo necesarios para seguir mejorando la plataforma de forma sostenible. No hay prácticas engañosas, ni presión de inversores, ni una búsqueda infinita de crecimiento. El desarrollo es constante y está guiado por nuestra comunidad.',\n];\n"
  },
  {
    "path": "lang/es/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Copiar mención avanzada con el nombre del elemento',\n        'success'           => 'Mención avanzada al elemento copiado en el portapapeles.',\n    ],\n    'create'        => [\n        'success'   => 'Elemento añadido a la línea de tiempo.',\n        'title'     => 'Nuevo elemento cronológico',\n    ],\n    'delete'        => [\n        'success'   => 'Elemento \":name\" eliminado.',\n    ],\n    'edit'          => [\n        'success'   => 'Elemento actualizado.',\n        'title'     => 'Editar elemento cronológico',\n    ],\n    'fields'        => [\n        'date'              => 'Fecha',\n        'era'               => 'Era',\n        'icon'              => 'Icono',\n        'use_entity_entry'  => 'Muestra la información de la entidad adjunta a continuación. El texto de este elemento se mostrará primero si está presente.',\n        'use_event_date'    => 'Utiliza la fecha del evento vinculado.',\n    ],\n    'helpers'       => [\n        'date'              => 'Si el elemento está vinculado a una entidad evento, muestra la fecha del evento.',\n        'entity_is_private' => 'La entidad de este elemento es privada.',\n        'icon'              => 'Copia el HTML de un icono de :fontawesome o :rpgawesome.',\n        'is_collapsed'      => 'El elemento se muestra colapsado por defecto.',\n    ],\n    'placeholders'  => [\n        'date'      => '22 de marzo, 1332-1337...',\n        'name'      => 'Requerido si no hay ninguna entidad seleccionada',\n        'position'  => 'Posición en la lista de elementos de la era. Déjalo en blanco para añadirlo al final.',\n    ],\n];\n"
  },
  {
    "path": "lang/es/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Añadir nueva era',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} :count eras eliminadas.|{1} :count era eliminada.|[2,*] :count eras eliminadas.',\n    ],\n    'create'        => [\n        'success'   => 'Era :name creada.',\n        'title'     => 'Nueva era',\n    ],\n    'delete'        => [\n        'success'   => 'Era :name eliminada.',\n    ],\n    'edit'          => [\n        'success'   => 'Era :name actualizada.',\n        'title'     => 'Editar era :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Abreviatura',\n        'end_year'      => 'Año final',\n        'is_collapsed'  => 'Colapsada',\n        'start_year'    => 'Año inicial',\n    ],\n    'helpers'       => [\n        'eras'          => 'Hay que crear la línea de tiempo para poder añadirle eras.',\n        'is_collapsed'  => 'La era estará colapsada (minimizada) por defecto.',\n        'primary'       => 'Separa tu línea de tiempo en eras. Una línea de tiempo necesita al menos una era para funcionar correctamente.',\n    ],\n    'index'         => [\n        'title' => 'Eras de :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'a.C., d.C., BCE...',\n        'end_year'      => 'Año en que termina la era. Déjalo en blanco si esta es la era actual.',\n        'name'          => 'Era moderna, Edad del bronce, Guerras galácticas...',\n        'start_year'    => 'Año en que la era comienza. Déjalo en blanco si esta es la primera era.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/es/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Añadir elemento a la era :era',\n        'back'          => 'Volver a :name',\n        'save_order'    => 'Guardar orden nuevo',\n    ],\n    'create'        => [\n        'title' => 'Nueva línea de tiempo',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_elements' => 'Copiar elementos',\n        'copy_eras'     => 'Copiar eras',\n        'eras'          => 'Eras',\n        'reverse_order' => 'Era en orden inverso',\n    ],\n    'helpers'       => [\n        'no_era_v2'     => 'Actualmente, esta línea de tiempo no tiene ninguna era. Añádele una o varias eras, tras lo cual podrás añadir elementos a las eras aquí.',\n        'reverse_order' => 'Habilitar para mostrar las eras en orden cronológico inverso (la era más antigua primero)',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Construye una línea de tiempo visual para registrar eventos importantes y seguir cómo ha evolucionado tu mundo.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Primaria, Crónica del mundo, Legado del reino...',\n    ],\n    'reorder'       => [\n        'empty'     => 'Añade eras y elementos a la línea de tiempo para poder reordenarla.',\n        'success'   => ':name reordenado con éxito.',\n        'title'     => 'Reordenar :name',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder-elements'  => 'Reordenar elementos',\n        ],\n    ],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/es/tiptap.php",
    "content": "<?php\n\nreturn [\n    'share' => 'Comparte tu opinión',\n    'survey'=> '¿Probando el nuevo editor? :share (solo toma 2 minutos)',\n];\n"
  },
  {
    "path": "lang/es/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'Un verdadero artífice de la palabra. Ganador de un concurso de worldbuilding.',\n    ],\n    'fields'        => [\n        'achievements'      => 'Logros',\n        'banned'            => 'Este usuario ha sido baneado',\n        'entities_created'  => 'Entidades creadas :help :count',\n        'member_since'      => 'Miembro desde :date',\n        'public_campaigns'  => 'Campañas públicas',\n        'subscriber_since'  => 'Suscriptor desde :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'Este valor se recalcula cada día.',\n    ],\n    'title'         => 'Perfil de :name',\n];\n"
  },
  {
    "path": "lang/es/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => ':attribute debe ser aceptado.',\n    'active_url'           => ':attribute no es una URL válida.',\n    'after'                => ':attribute debe ser una fecha posterior a :date.',\n    'after_or_equal'       => ':attribute debe ser una fecha posterior o igual a :date.',\n    'alpha'                => ':attribute sólo debe contener letras.',\n    'alpha_dash'           => ':attribute sólo debe contener letras, números y guiones.',\n    'alpha_num'            => ':attribute sólo debe contener letras y números.',\n    'array'                => ':attribute debe ser un conjunto.',\n    'before'               => ':attribute debe ser una fecha anterior a :date.',\n    'before_or_equal'      => ':attribute debe ser una fecha anterior o igual a :date.',\n    'between'              => [\n        'numeric' => ':attribute tiene que estar entre :min - :max.',\n        'file'    => ':attribute debe pesar entre :min - :max kilobytes.',\n        'string'  => ':attribute tiene que tener entre :min - :max caracteres.',\n        'array'   => ':attribute tiene que tener entre :min - :max ítems.',\n    ],\n    'boolean'              => 'El campo :attribute debe tener un valor verdadero o falso.',\n    'confirmed'            => 'La confirmación de :attribute no coincide.',\n    'date'                 => ':attribute no es una fecha válida.',\n    'date_equals'          => ':attribute debe ser una fecha igual a :date.',\n    'date_format'          => ':attribute no corresponde al formato :format.',\n    'different'            => ':attribute y :other deben ser diferentes.',\n    'digits'               => ':attribute debe tener :digits dígitos.',\n    'digits_between'       => ':attribute debe tener entre :min y :max dígitos.',\n    'dimensions'           => 'Las dimensiones de la imagen :attribute no son válidas.',\n    'distinct'             => 'El campo :attribute contiene un valor duplicado.',\n    'email'                => ':attribute no es un correo válido',\n    'exists'               => ':attribute es inválido.',\n    'file'                 => 'El campo :attribute debe ser un archivo.',\n    'filled'               => 'El campo :attribute es obligatorio.',\n    'gt'                   => [\n        'numeric' => 'El campo :attribute debe ser mayor que :value.',\n        'file'    => 'El campo :attribute debe tener más de :value kilobytes.',\n        'string'  => 'El campo :attribute debe tener más de :value caracteres.',\n        'array'   => 'El campo :attribute debe tener más de :value elementos.',\n    ],\n    'gte'                  => [\n        'numeric' => 'El campo :attribute debe ser como mínimo :value.',\n        'file'    => 'El campo :attribute debe tener como mínimo :value kilobytes.',\n        'string'  => 'El campo :attribute debe tener como mínimo :value caracteres.',\n        'array'   => 'El campo :attribute debe tener como mínimo :value elementos.',\n    ],\n    'image'                => ':attribute debe ser una imagen.',\n    'in'                   => ':attribute es inválido.',\n    'in_array'             => 'El campo :attribute no existe en :other.',\n    'integer'              => ':attribute debe ser un número entero.',\n    'ip'                   => ':attribute debe ser una dirección IP válida.',\n    'ipv4'                 => ':attribute debe ser un dirección IPv4 válida',\n    'ipv6'                 => ':attribute debe ser un dirección IPv6 válida.',\n    'json'                 => 'El campo :attribute debe tener una cadena JSON válida.',\n    'lt'                   => [\n        'numeric' => 'El campo :attribute debe ser menor que :value.',\n        'file'    => 'El campo :attribute debe tener menos de :value kilobytes.',\n        'string'  => 'El campo :attribute debe tener menos de :value caracteres.',\n        'array'   => 'El campo :attribute debe tener menos de :value elementos.',\n    ],\n    'lte'                  => [\n        'numeric' => 'El campo :attribute debe ser como máximo :value.',\n        'file'    => 'El campo :attribute debe tener como máximo :value kilobytes.',\n        'string'  => 'El campo :attribute debe tener como máximo :value caracteres.',\n        'array'   => 'El campo :attribute debe tener como máximo :value elementos.',\n    ],\n    'max'                  => [\n        'numeric' => ':attribute no debe ser mayor a :max.',\n        'file'    => ':attribute no debe ser mayor que :max kilobytes.',\n        'string'  => ':attribute no debe ser mayor que :max caracteres.',\n        'array'   => ':attribute no debe tener más de :max elementos.',\n    ],\n    'mimes'                => ':attribute debe ser un archivo con formato: :values.',\n    'mimetypes'            => ':attribute debe ser un archivo con formato: :values.',\n    'min'                  => [\n        'numeric' => 'El tamaño de :attribute debe ser de al menos :min.',\n        'file'    => 'El tamaño de :attribute debe ser de al menos :min kilobytes.',\n        'string'  => ':attribute debe contener al menos :min caracteres.',\n        'array'   => ':attribute debe tener al menos :min elementos.',\n    ],\n    'not_in'               => ':attribute es inválido.',\n    'not_regex'            => 'El formato del campo :attribute no es válido.',\n    'numeric'              => ':attribute debe ser numérico.',\n    'present'              => 'El campo :attribute debe estar presente.',\n    'regex'                => 'El formato de :attribute es inválido.',\n    'required'             => 'El campo :attribute es obligatorio.',\n    'required_if'          => 'El campo :attribute es obligatorio cuando :other es :value.',\n    'required_unless'      => 'El campo :attribute es obligatorio a menos que :other esté en :values.',\n    'required_with'        => 'El campo :attribute es obligatorio cuando :values está presente.',\n    'required_with_all'    => 'El campo :attribute es obligatorio cuando :values está presente.',\n    'required_without'     => 'El campo :attribute es obligatorio cuando :values no está presente.',\n    'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de :values estén presentes.',\n    'same'                 => ':attribute y :other deben coincidir.',\n    'size'                 => [\n        'numeric' => 'El tamaño de :attribute debe ser :size.',\n        'file'    => 'El tamaño de :attribute debe ser :size kilobytes.',\n        'string'  => ':attribute debe contener :size caracteres.',\n        'array'   => ':attribute debe contener :size elementos.',\n    ],\n    'starts_with'          => 'El campo :attribute debe comenzar con uno de los siguientes valores: :values',\n    'string'               => 'El campo :attribute debe ser una cadena de caracteres.',\n    'timezone'             => 'El :attribute debe ser una zona válida.',\n    'unique'               => 'El campo :attribute ya ha sido registrado.',\n    'uploaded'             => 'Subir :attribute ha fallado.',\n    'url'                  => 'El formato :attribute es inválido.',\n    'uuid'                 => 'El campo :attribute debe ser un UUID válido.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'password' => [\n            'min' => 'La :attribute debe contener más de :min caracteres',\n        ],\n        'email'    => [\n            'unique' => 'El :attribute ya ha sido registrado.',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        'name'                  => 'nombre',\n        'username'              => 'usuario',\n        'email'                 => 'correo electrónico',\n        'first_name'            => 'nombre',\n        'last_name'             => 'apellido',\n        'password'              => 'contraseña',\n        'password_confirmation' => 'confirmación de la contraseña',\n        'city'                  => 'ciudad',\n        'country'               => 'país',\n        'address'               => 'dirección',\n        'phone'                 => 'teléfono',\n        'mobile'                => 'móvil',\n        'age'                   => 'edad',\n        'sex'                   => 'sexo',\n        'gender'                => 'género',\n        'year'                  => 'año',\n        'month'                 => 'mes',\n        'day'                   => 'día',\n        'hour'                  => 'hora',\n        'minute'                => 'minuto',\n        'second'                => 'segundo',\n        'title'                 => 'título',\n        'content'               => 'contenido',\n        'body'                  => 'contenido',\n        'description'           => 'descripción',\n        'excerpt'               => 'extracto',\n        'date'                  => 'fecha',\n        'time'                  => 'hora',\n        'subject'               => 'asunto',\n        'message'               => 'mensaje',\n    ],\n];\n"
  },
  {
    "path": "lang/es/visibilities.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'admin'         => 'Sólo los administradores de la campaña pueden ver este elemento.',\n        'admin-self'    => 'Sólo tú y los administradores de la campaña podéis ver este elemento.',\n        'all'           => 'Todos pueden ver este elemento.',\n        'members'       => 'Sólo los miembros de la campaña pueden ver este elemento.',\n        'self'          => 'Sólo tú puedes ver este elemento.',\n    ],\n    'title'     => 'Actualizando visibilidad',\n    'toast'     => 'Visibilidad actualizada con éxito.',\n    'tooltip'   => 'Haz clic para obtener información sobre las distintas opciones de visibilidad.',\n];\n"
  },
  {
    "path": "lang/es/whiteboards/draw.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add-circle'    => 'Añadir círculo',\n        'add-entity'    => 'Añadir entidad',\n        'add-image'     => 'Añadir imagen',\n        'add-square'    => 'Añadir cuadrado',\n        'add-text'      => 'Añadir texto',\n        'duplicate'     => 'Duplicar selección',\n        'end-drawing'   => 'Finalizar dibujo',\n        'lock'          => 'Bloquear',\n        'push-to-back'  => 'Enviar al fondo',\n        'push-to-front' => 'Traer al frente',\n        'start-drawing' => 'Iniciar dibujo',\n        'unlock'        => 'Desbloquear',\n    ],\n    'entity-search' => [\n        'placeholder'   => 'Escribe el nombre o alias de una entidad',\n        'title'         => 'Búsqueda de entidades',\n    ],\n    'errors'        => [\n        'websockets'    => [\n            'disconnected'  => 'Se perdió la conexión con el websocket. Por favor, inténtalo de nuevo.',\n            'error'         => 'Ocurrió un error al conectarse al servidor de websocket.',\n            'unavailable'   => 'El servidor de websocket no está disponible. Por favor, inténtalo más tarde.',\n        ],\n    ],\n    'fields'        => [\n        'color' => 'Color',\n    ],\n    'pen'           => [\n        'large-stroke'  => 'Trazo grueso',\n        'thin-stroke'   => 'Trazo fino',\n    ],\n    'reset'         => [\n        'helper'    => '¿Estás seguro de que deseas restablecer el tablero? Esta acción no se puede deshacer.',\n        'title'     => 'Restablecer tablero',\n    ],\n    'roles'         => [\n        'edit'  => 'Este usuario puede editar el tablero',\n        'view'  => 'Este usuario puede ver el tablero',\n    ],\n    'toast'         => [\n        'copy'  => [\n            'success'   => 'Elementos copiados al portapapeles.',\n        ],\n        'paste' => [\n            'error' => 'Algo salió mal',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/es/whiteboards.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'draw'  => 'Dibujar',\n    ],\n    'create'        => [\n        'title' => 'Nuevo tablero',\n    ],\n    'cta'           => [\n        'text'  => 'Para desbloquear los tableros, un miembro con el nivel :wyvern o :elemental debe convertir la campaña en premium.',\n        'title' => 'Los tableros son una función premium especial',\n    ],\n    'lists'         => [\n        'empty' => 'Usa un tablero para organizar visualmente ideas, relaciones o la estructura de la historia.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Ideas, relaciones, estructura de la historia',\n    ],\n    'update'        => [],\n];\n"
  },
  {
    "path": "lang/fr/abilities.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'Ajouter des entrées',\n        ],\n        'create'        => [\n            'attach_success'    => '{1} Le pouvoir :name ajouté à :count entrée.|[2,*] Le pouvoir :name ajouté à :count entrées.',\n            'helper'            => 'Attacher :name à une ou plusieurs entrées.',\n            'title'             => 'Attacher des entrées',\n        ],\n        'description'   => 'Entrées ayant le pouvoir',\n        'title'         => 'Entrées du pouvoir :name',\n    ],\n    'create'        => [\n        'title' => 'Nouveau pouvoir',\n    ],\n    'fields'        => [\n        'charges'   => 'Charges',\n    ],\n    'lists'         => [\n        'empty' => 'Ajoute des pouvoirs, des sorts ou des talents. De nombreux créateurs utilisent cette fonctionnalité pour modéliser les classes de D&D.',\n    ],\n    'placeholders'  => [\n        'charges'   => 'Nombre d\\'utilisation. Les propriétés peuvent être référencées avec {Level}*{CHA}',\n        'name'      => 'Jet de feu, Alert, Résistance',\n        'type'      => 'Sort, Compétence, Attaque',\n    ],\n    'reorder'       => [\n        'parentless'    => 'Aucun parent',\n        'success'       => 'Pouvoirs réordonnés.',\n        'title'         => 'Réorganiser les pouvoirs',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Réorganiser les pouvoirs',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/account/email.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Mettre à jour',\n    ],\n    'fields'    => [\n        'email' => 'Nouvelle adresse email',\n    ],\n    'helpers'   => [\n        'email' => 'Assures-toi que c\\'est écrit correctement.',\n    ],\n    'subtitle'  => 'Changes l\\'adresse email associé à ton compte.',\n    'title'     => 'Mettre à jour ton adresse email',\n];\n"
  },
  {
    "path": "lang/fr/account/password.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Modifier le mot de passe',\n    ],\n    'fields'    => [\n        'password'  => 'Nouveau mot de passe',\n    ],\n    'helpers'   => [\n        'password'              => 'Utilises un gestionnaire de mots de passe pour créer un mot de passe fort.',\n        'password_confirmation' => 'Ne te plantes pas!',\n    ],\n    'subtitle'  => 'Changes ton mot de passe. Ceci te déconnectera de toutes tes autres machines.',\n    'title'     => 'Modifier ton mot de passe',\n];\n"
  },
  {
    "path": "lang/fr/account/social.php",
    "content": "<?php\n\nreturn [\n    'info'      => 'Connection avec :provider',\n    'subtitle'  => 'Passes d\\'un login géré par :provider à un login géré par Kanka, où tu te connectes avec ton email et votre mot de passe.',\n    'title'     => 'Changer à un login Kanka',\n];\n"
  },
  {
    "path": "lang/fr/articles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'move'  => 'Déplacer vers une entrée',\n    ],\n    'helpers'   => [\n        'permissions'   => 'Ces permissions peuvent remplacer le paramètre :visibility de l\\'article.',\n    ],\n    'tabs'      => [\n        'layout'        => 'Mise en page',\n        'main'          => 'Principal',\n        'permissions'   => 'Permissions spéciales',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/assistance.php",
    "content": "<?php\n\nreturn [\n    'fields'        => [\n        'campaign'  => 'Campagne',\n    ],\n    'opening'       => 'Un membre de l\\'équipe de Kanka t\\'a envoyé sur cette page afin de t\\'apporter de l\\'aide.',\n    'placeholders'  => [\n        'campaign'  => 'Sélectionne une campagne dont tu es admin',\n    ],\n    'select'        => 'Sélectionne une campagne dont tu es admin dans la liste ci-dessous pour générer un jeton spécial à usage unique. Cela permettra à un membre de l\\'équipe de Kanka de rejoindre temporairement ta campagne en tant qu\\'admin.',\n    'success'       => [\n        'opening'   => 'Ton jeton d\\'assistance a été généré avec succès. L\\'équipe de Kanka a été notifiée et rejoindra ta campagne sous peu pour t\\'aider. On te contactera généralement via :discord si on a besoin de se coordonner directement.',\n        'secret'    => 'Seul un membre vérifié de l\\'équipe de Kanka peut utiliser ce jeton. Il est inutile pour toute autre personne, donc pas besoin de le garder secret.',\n        'token'     => 'Ton jeton d\\'assistance :',\n    ],\n    'title'         => 'Assistance',\n];\n"
  },
  {
    "path": "lang/fr/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'bulk'          => [\n        'entity_type'   => [\n            'unset' => 'Réinitialiser',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Créer un nouveau kit de propriétés',\n    ],\n    'fields'        => [\n        'auto_apply'    => 'Auto-appliquer',\n        'is_enabled'    => 'Activé',\n    ],\n    'hints'         => [\n        'automatic'                 => 'Propriétés automatiquement appliqués depuis le kit :link.',\n        'automatic_apply'           => '1} La propriété suivante a été automatiquement appliquée pour :link | [2,] Les :count propriétées suivantes ont été automatiquement appliquées pour :link.',\n        'entity_type'               => 'Si défini, lors de la création d\\'une nouvelle entrée de cette catégorie, ce kit ainsi que ses parents seront automatiquement appliqués.',\n        'is_disabled'               => 'Ce kit est désactivé.',\n        'is_enabled'                => 'Activer ce kit pour l\\'utiliser.',\n        'parent_attribute_template' => 'Ce kit peut être l\\'enfant d\\'un autre kit. Lorsqu\\'un kit est appliqué, celui-ci ainsi que tous ses descendants seront aussi appliqués.',\n    ],\n    'lists'         => [\n        'empty' => 'Créé des kits pour réutiliser des propriétés communes à plusieurs entrées.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nom du kit de propriétés',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/fr/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Erreur',\n            'rendering' => 'Une erreur est survenue lors de l\\'affichage du plugin. Prière de contacter le ou la créateur/rice du plugin.',\n        ],\n    ],\n    'list'      => [\n        'sheets'    => 'Feuilles de personnages',\n    ],\n    'pitch'     => 'Trouves et ajoutes des fiches de personnage sur le :marketplace dans une :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/fr/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'banned'    => [\n        'permanent' => 'Ton compte a été désactivé.',\n        'temporary' => '{1} Ton compte a été suspendu pour :days jour.|[2,*] Ton compte a été suspendu pour :days jours.',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Confirmer',\n        'error'     => 'Mot de passe invalid, merci de ressayer.',\n        'helper'    => 'Confirmer le mot de passe avant de pouvoir continuer.',\n        'title'     => 'Confirmation du mot de passe.',\n    ],\n    'continue'  => [\n        'facebook'  => 'Continuer avec Facebook',\n        'google'    => 'Continuer avec Google',\n        'x'         => 'Continuer avec X',\n    ],\n    'failed'    => 'Ces informations ne correspondent pas avec nos données.',\n    'helpers'   => [\n        'password'  => 'Afficher / Cacher le mot de passe',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'Code à usage unique',\n            'email'     => 'Adresse Email',\n            'password'  => 'Mot de passe',\n        ],\n        'no-account'            => 'Sans compte?',\n        'or'                    => 'OU',\n        'password_forgotten'    => 'Mot de passe oublié?',\n        'sign-up'               => 'S\\'inscrire',\n        'submit'                => 'Se connecter',\n        'title'                 => 'Login',\n    ],\n    'register'  => [\n        'already'   => 'Tu as déjà un compte? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Un compte avec cette adresse email est déjà enregistré.',\n            'general_error'         => 'Une erreur est survenue lors de la création du compte. Merci de ressayer.',\n        ],\n        'fields'    => [\n            'email'     => 'Adresse email',\n            'name'      => 'Votre nom d\\'utilisateur',\n            'password'  => 'Mot de passe',\n        ],\n        'log-in'    => 'Connectes-toi',\n        'submit'    => 'S\\'inscrire',\n        'title'     => 'Inscription',\n        'tos'       => 'En enregistrant un compte, tu acceptes nos :terms et :privacy.',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Adresse email',\n            'password'              => 'Mot de passe',\n            'password_confirmation' => 'Confirmation du mot de passe',\n        ],\n        'send'      => 'M\\'envoyer un mail de réinitialisation de mot de passe',\n        'submit'    => 'Enregistrer',\n        'title'     => 'Réinitialisation du mot de passe',\n    ],\n    'tfa'       => [\n        'helper'    => 'L\\'authentification à deux facteurs est activée. Prière d\\'indiquer le code à usage unique fourni par l\\'application d\\'authentification.',\n        'title'     => 'Authentification à deux facteurs',\n    ],\n    'throttle'  => 'Trop d\\'essais. Réessaies dans :seconds secondes.',\n    'x-twitter' => 'X anciennement connu comme Twitter',\n];\n"
  },
  {
    "path": "lang/fr/billing/information.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Modifier l\\'info',\n    ],\n    'helper'    => 'Ton adresse professionnelle, ton numéro de TVA, etc. peuvent être ajoutés à tous tes reçus.',\n    'title'     => 'Modifier l\\'information de facturation',\n];\n"
  },
  {
    "path": "lang/fr/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Télécharger le PDF',\n    ],\n    'description'   => 'Affichage des factures des derniers 24 mois.',\n    'empty'         => 'Aucune facture trouvée.',\n    'fields'        => [\n        'amount'    => 'Somme',\n        'date'      => 'Date',\n        'invoice'   => 'Facture',\n        'status'    => 'Status',\n    ],\n    'paypal'        => 'Seuls les paiements effectués par Stripe, et non par PayPal, sont visibles ici.',\n    'status'        => [\n        'paid'      => 'Payée',\n        'pending'   => 'En attente',\n    ],\n    'title'         => 'Historique de facturation',\n];\n"
  },
  {
    "path": "lang/fr/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'Historique de facturation',\n    'overview'          => 'Aperçu',\n    'payment-method'    => 'Méthode de paiement',\n];\n"
  },
  {
    "path": "lang/fr/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Méthode de paiement',\n    'types' => [\n        'card'  => 'Carte de crédit/débit',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Personnaliser la navigation',\n    ],\n    'create'            => [\n        'title' => 'Nouveau favori',\n    ],\n    'edit'              => [\n        'title' => 'Favori :name',\n    ],\n    'fields'            => [\n        'active'            => 'Actif',\n        'dashboard'         => 'Tableau de bord',\n        'default_dashboard' => 'Tableau de bord par défaut',\n        'filters'           => 'Filtres',\n        'menu'              => 'Menu',\n        'position'          => 'Position',\n        'random_type'       => 'Catégorie aléatoire',\n        'selector'          => 'Configuration du favori',\n        'target'            => 'Cible',\n    ],\n    'helpers'           => [\n        'active'            => 'Les favoris inactifs ne s\\'affichent pas dans la navigation.',\n        'css'               => 'Ajoutes une classe CSS qui sera ajoutée au lien du bookmark dans la navigation.',\n        'dashboard'         => 'Mettre en place le favori pour aller à un tableau de bord.',\n        'default_dashboard' => 'Favori vers le tableau de bord par défaut de la campagne. Un tableau de bord personnalisé doit encore être sélectionné.',\n        'entity'            => 'Mettre en place le favori pour aller directement sur une entrée. Le champ :tab contrôle quel onglet est ouvert. Le champ :menu contrôle quel sous-menu est affiché.',\n        'position'          => 'Ce champ contrôle dans quel ordre les favoris apparaissent.',\n        'random'            => 'Utilises ce champ pour avoir le favori qui pointe vers une entrée aléatoire. La catégorie d\\'entrée peut être filtré.',\n        'selector'          => 'Configurer vers quel catégorie l\\'utilisateur ira en cliquant sur le favori dans le menu de navigation.',\n        'type'              => 'Définir ce favori pour aller directement sur une liste d\\'entrée. Pour filtrer les résultats, il faut copier l\\'url de la page filtrée après le :? de l\\'url dans le champs :filter.',\n    ],\n    'lists'             => [\n        'empty' => 'Enregistre des favoris dans tes entrées les plus utilisées ou tes listes filtrées pour un accès plus rapide.',\n    ],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=city',\n        'menu'      => 'Sous-page (dernière partie de l\\'url)',\n        'tab'       => 'entry, relations, notes, map',\n    ],\n    'random_no_entity'  => 'Aucune entrée au hasard n\\'a été trouvée.',\n    'random_types'      => [\n        'any'   => 'Toutes les entrées',\n    ],\n    'reorder'           => [\n        'success'   => 'Favoris réorganisés.',\n        'title'     => 'Réorganiser les favoris',\n    ],\n    'targets'           => [\n        'dashboard' => 'Un des tableaux de bord de la campagne',\n        'entity'    => 'Une seule entrée',\n        'random'    => 'Une entrée au hasard',\n        'select'    => 'Choisir une option',\n        'type'      => 'Liste des entrées d\\'une categérie spécifique',\n    ],\n    'visibilities'      => [\n        'is_active' => 'Afficher le favori dans la navigation',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/bragi/backstory.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Écris une courte histoire de fond inspirée de ces informations. Adapte ton ton et tes détails aux systèmes de jeu et aux genres sélectionnés. Tu peux inclure des éléments comme l\\'apparence du personnage, ses origines, ses croyances, ses relations, ses objectifs, ses failles ou des événements marquants — selon ce qui convient le mieux au personnage.',\n    'setup'     => [\n        'gender'    => 'Genre: :gender',\n        'genres'    => 'Genres: :genres',\n        'name'      => 'Nom du personnage: :name',\n        'prompt'    => 'Prompt: \":prompt\"',\n        'pronouns'  => 'Pronoms: :pronouns',\n        'systems'   => 'Systèmes de jeu: :systems',\n    ],\n    'system'    => 'Tu es un conteur professionnel de JDR et un créateur de personnages. Tu écris des histoires de fond immersives et émouvantes pour des personnages de jeux de rôle. Ton style s\\'adapte au ton et à l\\'univers du jeu. Tu rédiges généralement 2 à 4 paragraphes pour un total de 400 mots maximum, en intégrant l\\'apparence, l\\'histoire, les croyances, les motivations et les failles du personnage.',\n];\n"
  },
  {
    "path": "lang/fr/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'Générer',\n        'insert'    => 'Utiliser',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'Cette fonctionnalité est réservée aux abonnés de type Wyvern ou Elemental.',\n        'out-of-tokens' => 'Tu n\\'as plus de jeton! Ils seront de retour le :date.',\n    ],\n    'here'          => 'ici',\n    'intro'         => 'Salut! Moi c\\'est :name, une intelligence artificielle développée pour t\\'aider à générer des histoires pour tes personnages dans Kanka. Tu peux en savoir plus sur moi :here.',\n    'kankappy'      => 'Cette personne est secrètement un/e disciple de Kankappy.',\n    'loading'       => 'Donne moi un petit moment, je réfléchis à fond et ça peut me prendre jusqu\\'à une minute!',\n    'placeholders'  => [\n        'prompt'    => 'Fourni moi un peu d\\'information pour que je génère une histoire.',\n    ],\n    'token-limit'   => 'Tu détiens actuellement :amount jetons. Un jeton est consommé lors de chaque génération d\\'histoire, du coup utilise-les à bon escient!',\n];\n"
  },
  {
    "path": "lang/fr/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'helper'    => 'Ajouter des informations météo à apparaître sur le calendrier.',\n        'success'   => 'Météo ajoutée.',\n        'title'     => 'Nouvel effet météorologique',\n    ],\n    'destroy'       => [\n        'success'   => 'Météo supprimée.',\n    ],\n    'edit'          => [\n        'success'   => 'Météo modifiée.',\n        'title'     => 'Modifier la météo',\n    ],\n    'fields'        => [\n        'effect'        => 'Effet',\n        'name'          => 'Nom',\n        'precipitation' => 'Précipitation',\n        'temperature'   => 'Température',\n        'weather'       => 'Météo',\n        'wind'          => 'Vent',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Orage',\n            'cloud'                 => 'Nuageux',\n            'cloud-rain'            => 'Pluie',\n            'cloud-showers-heavy'   => 'Forte Pluie',\n            'cloud-sun'             => 'Nuage et soleil',\n            'cloud-sun-rain'        => 'Nuage, soleil et pluie',\n            'meteor'                => 'Météorite',\n            'smog'                  => 'Brouillard',\n            'snowflake'             => 'Neige',\n            'sun'                   => 'Ensoleillé',\n            'wind'                  => 'Venteux',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Effet magique ou naturel',\n        'name'          => 'Text optionnel pour l\\'effet météorologique',\n        'precipitation' => 'Quantité de pluie',\n        'temperature'   => 'Quotidien haut et bas',\n        'wind'          => 'Force du vent',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Ajouter une époque',\n        'add_intercalary'   => 'Ajouter des jours intercalaires',\n        'add_month'         => 'Ajouter un mois',\n        'add_moon'          => 'Ajouter une lune',\n        'add_reminder'      => 'Ajouter un rappel',\n        'add_season'        => 'Ajouter une saison',\n        'add_weather'       => 'Effet météo',\n        'add_week'          => 'Ajouter un nom de semaine',\n        'add_weekday'       => 'Ajouter un jour de semaine',\n        'add_year'          => 'Ajouter un nom d\\'année',\n        'set_today'         => 'Définir en tant que jour actuel',\n        'today'             => 'Aujourd\\'hui',\n        'update_weather'    => 'Modifier la météo',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'A lieu chaque année',\n    ],\n    'create'        => [\n        'title' => 'Nouveau Calendrier',\n    ],\n    'edit'          => [\n        'today' => 'Date du calendrier mise à jour.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Rappel ajouté.',\n            'title'     => 'Ajouter un rappel',\n        ],\n        'destroy'   => 'Rappel retiré du calendrier \\':name\\'.',\n        'edit'      => [\n            'success'   => 'Rappel modifié.',\n            'title'     => 'Modifier un rappel pour :name',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Choix invalide d\\'entrée.',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Modification d\\'un rappel du calendrier :calendar.',\n        ],\n        'success'   => 'Rappel \\':event\\' ajouté au calendrier.',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} Supprimé :count rappel. |[2,*] Supprimé :count rappels.',\n            'patch'     => '{1} Modifié :count rappel.|[2,*] Modifié :count rappels.',\n        ],\n        'end'       => '(fin)',\n        'filters'   => [\n            'show_after'    => 'Afficher aujourd\\'hui et après',\n            'show_all'      => 'Afficher tout',\n            'show_before'   => 'Afficher avant aujourd\\'hui',\n        ],\n        'start'     => '(début)',\n    ],\n    'fields'        => [\n        'comment'           => 'Commentaire',\n        'current_day'       => 'Jour Actuel',\n        'current_month'     => 'Mois actuel',\n        'current_year'      => 'Année actuelle',\n        'date'              => 'Date actuelle',\n        'day'               => 'Jour',\n        'default_layout'    => 'Mise en page par défaut',\n        'format'            => 'Format',\n        'is_incrementing'   => 'Incrément de date',\n        'is_recurring'      => 'Répétition',\n        'leap_year'         => 'Années bissextiles',\n        'leap_year_amount'  => 'Jours à ajouter',\n        'leap_year_month'   => 'Mois',\n        'leap_year_offset'  => 'Chaque',\n        'leap_year_start'   => 'Année bissextile',\n        'length'            => 'Jours',\n        'length_days'       => ':count jour|:count jours',\n        'month'             => 'Mois',\n        'months'            => 'Mois',\n        'moons'             => 'Lunes',\n        'parameters'        => 'Paramètres',\n        'recurring_until'   => 'Répétition jusqu\\'à l\\'année',\n        'reset'             => 'Réinitialisation de semaine',\n        'seasons'           => 'Saisons',\n        'show_birthdays'    => 'Afficher les anniversaires',\n        'skip_year_zero'    => 'Ignorer l\\'année zéro',\n        'start_offset'      => 'Décalage de début',\n        'suffix'            => 'Suffix',\n        'week_names'        => 'Nom de semaine',\n        'weekdays'          => 'Jours de la semaine',\n        'year'              => 'Année',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Choix de la mise en page par défaut du calendrier.',\n        'format'            => 'Ajouter un format d\\'affichage personnalisé pour les entrées du calendrier.',\n        'month_type'        => 'Les mois intercalaires n\\'utilisent pas les jours de la semaine, mais ont quand-même une influence sur les lunes et saisons.',\n        'moon_offset'       => 'Par défaut, la première pleine lune apparait lors du premier jour de l\\'année 0. Modifier ce champ permet de définir quand la première pleine lune apparaitra. Cette valeur peut être négative (jusqu\\'à la durée du premier mois) ou positive (jusqu\\'à la durée du premier mois).',\n        'start_offset'      => 'Un calendrier commence par défaut le premier jour de la première semaine de l\\'année 0. Modifier ce champ permet d\\'influencer quand le premier jour tombe.',\n    ],\n    'hints'         => [\n        'event_length'      => 'La durée d\\'un rappel. Un rappel ne peux pas durer plus de 2 mois.',\n        'is_incrementing'   => 'Un calendrier avec cette option vera son jour actuel automatiquement avancer chaque jour à 00:00 UTC.',\n        'leap_year'         => 'Définir les années bissextiles du calendrier.',\n        'months'            => 'Le calendrier doit avoir au moins 2 mois.',\n        'moons'             => 'Chaque lune sera affichée dans le calendrier lors de la pleine lune.',\n        'parent_calendar'   => 'Définir un calendrier parent inclura les rappels et la météo du celui-ci.',\n        'reset'             => 'Toujours commencer le début du mois sur le premier jour de la semaine.',\n        'seasons'           => 'Les saisons seront affichées dans le calendrier lorsqu\\'elles commencent.',\n        'show_birthdays'    => 'Afficher les anniversaires chaque année pour les personnages qui ont une date de naissance définie.',\n        'skip_year_zero'    => 'Par défaut, la première année du calendrier est l\\'année zéro. Activer cette option pour ignorer l\\'année zéro.',\n        'weekdays'          => 'Un calendrier doit posséder au moins 2 jours dans la semaine.',\n        'weeks'             => 'Les semaines importantes du calendrier peuvent avoir un nom.',\n        'years'             => 'Certaines années sont tellement importantes qu\\'elles ont leur propre nom.',\n    ],\n    'layouts'       => [\n        'month'     => 'Mois',\n        'monthly'   => 'Mensuel par défaut',\n        'year'      => 'Année',\n        'yearly'    => 'Annuel par défaut',\n    ],\n    'lists'         => [\n        'empty' => 'Créé un calendrier pour suivre les dates, les festivals ou les événements dans le jeu au fil du temps.',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Changement d\\'année',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Intercalaire',\n        'standard'      => 'Standard',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Pleine lune',\n                'fullmoon_name' => ':moon pleine lune',\n                'month'         => 'Chaque mois',\n                'newmoon'       => 'Nouvelle lune',\n                'newmoon_name'  => ':moon nouvelle lune',\n                'none'          => 'Aucun',\n                'unnamed_moon'  => 'Lune :number',\n                'year'          => 'Chaque année',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Aucun',\n            'month' => 'Mois',\n            'year'  => 'Année',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Jours Intercalaires',\n        'leap_year'     => 'Année bissextile',\n        'months'        => 'Mois',\n        'weeks'         => 'Semaines',\n        'years'         => 'Nom d\\'années',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Durée en jour',\n            'month'     => 'A la fin de quel mois',\n            'name'      => 'Nom de l\\'intercalaire',\n        ],\n        'month'         => [\n            'alias' => 'Alias de mois',\n            'length'=> 'Nombre de jours',\n            'name'  => 'Nom du mois',\n            'type'  => 'Type',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Pleine lune chaque (jours)',\n            'name'      => 'Nom de la lune',\n            'offset'    => 'Décalage de la première pleine lune',\n        ],\n        'seasons'       => [\n            'day'   => 'Jour de départ',\n            'month' => 'Mois de départ',\n            'name'  => 'Nom de la saison',\n        ],\n        'weeks'         => [\n            'name'      => 'Nom de la semaine',\n            'number'    => 'Nombre',\n        ],\n        'year'          => [\n            'name'      => 'Nom',\n            'number'    => 'Année',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Couleur',\n        'comment'           => 'Anniversaire, festival, solstice',\n        'date'              => 'La date actuelle',\n        'leap_year_amount'  => 'Nombre de jours à ajouter lors d\\'une année bissextile',\n        'leap_year_month'   => 'Mois durant lequel les jours sont à ajouter',\n        'leap_year_offset'  => 'Nombre d\\'années entre chaque année bissextile',\n        'leap_year_start'   => 'Première année bissextile',\n        'length'            => 'Durée du rappel en jours',\n        'months'            => 'Nombre de mois dans une année',\n        'recurring_until'   => 'Année de dernière réoccurence (laisser vide pour infini)',\n        'seasons'           => 'Nombre de saisons',\n        'suffix'            => 'Suffix de l\\'époque actuelle (AC, BC)',\n        'type'              => 'Type de calendrier',\n        'weekdays'          => 'Nombre de jours dans une semaine',\n    ],\n    'show'          => [\n        'missing_details'       => 'Le calendrier ne peut pas être affiché. Un calendrier a besoin d\\'au moins 2 mois et de 2 jours de la semaine pour être affiché correctement.',\n        'moon_1first_quarter'   => ':moon premier quartier',\n        'moon_full'             => ':moon pleine lune',\n        'moon_last_quarter'     => ':moon dernier quartier',\n        'moon_new'              => ':moon nouvelle lune',\n        'tabs'                  => [\n            'events'    => 'Rappels',\n            'weather'   => 'Météo',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Aujourd\\'hui et après',\n        'before'=> 'Aujourd\\'hui et avant',\n    ],\n    'validators'    => [\n        'format'        => 'Le format de calendrier est invalid.',\n        'moon_offset'   => 'Le décalage de début de lune ne peut pas être plus grand que la durée du premier mois du calendrier.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Les rappels de plusieurs années ne s\\'affichent que durant les deux premières années. En savoir plus dans notre :documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/callouts.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscription'  => 'En savoir plus sur les abonnements',\n        'upgrade'       => 'Passer en premium',\n    ],\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Boost :campaign',\n            'superboost'    => 'Superboost :campaign',\n        ],\n        'learn-more'    => 'Que sont les boosters?',\n        'limitation'    => 'Pour accéder à cette fonctionnalité, la campagne doit être boostée.',\n        'limitations'   => [\n            'boosted'       => 'Pour accéder à cette fonctionnalité, la campagne doit être boostée.',\n            'superboosted'  => 'Pour accéder à cette fonctionnalité, la campagne doit être superboostée.',\n        ],\n        'multiple'      => 'Pour accéder à cette fonctionnalité, la campagne doit être superboostée.',\n        'pitches'       => [\n            'element-class' => 'Cette élément peut être personnalisé avec une classe CSS dans une :boosted-campaign.',\n            'icon'          => 'Débloques des milliers d\\'icônes de FontAwesome avec une :boosted-campaign.',\n        ],\n        'titles'        => [\n            'boosted'       => 'Fonctionnalité boostée',\n            'superboosted'  => 'Fonctionnalité superboostée',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => 'Qu\\'est-ce qu\\'une campagne Premium?',\n        'limitation'    => 'Pour accéder à cette fonctionnalité, les fonctionnalités Premium doivent être activées pour :campaign.',\n        'multiple'      => 'Pour accéder à ces fonctionnalités, les fonctionnalités Premium doivent être activées pour :campaign.',\n        'title'         => 'Fonctionnalité de campagne Premium',\n        'unlock'        => 'Débloquer les fonctionnalités Premium pour :campaign',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Abonnes-toi pour télécharger des fichiers jusqu\\'à :max MB.',\n        'share-booster' => 'Boostes :campaign pour augmenter la taille de fichier pour tous les membres de la campagne.',\n        'share-premium' => 'Augmenter la taille de téléchargement des fichiers pour tous les membres de la campagne avec une campagne Premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => 'Félicitations!',\n    'connections'       => '{0} Aucune relation créée|{1} Une relation créée|[2,*] :amount relations créées',\n    'created'           => '{0} Aucun(e) :singular créé(e)|{1} Un :singular créé(e)|[2,*] :amount :plural créé(e)s',\n    'dead'              => '{0} Aucun mort mystérieuse|{1} Une mort mystérieuse|[2,*] :amount morts mystérieuses',\n    'goal'              => 'Objectif :number',\n    'goal_reached'      => 'Succès débloqué',\n    'level'             => 'niveau :number',\n    'markers'           => '{0} Aucun marqueur de carte créé|{1} Un marqueur de carte créé|[2,*] :amount marqueurs de carte créés',\n    'painter'           => '{0} Aucun thème créé|{1} Un thème créé|[2,*] :amount thèmes créés',\n    'pitch'             => 'Les succès de campagne sont un moyen amusant de célébrer les étapes importantes de ton aventure dans Kanka. Suis tes progrès, implique tes joueurs et mets en valeur tes réalisations avec une campagne premium.',\n    'plugins'           => '{0} Aucun plugin installé|{1} Un plugin installé|[2,*] :amount plugins installés',\n    'remaining'         => [\n        'generic'   => 'de plus pour débloquer le niveau suivant.',\n    ],\n    'spotlight'         => [\n        'active'    => [\n            'cta'   => 'Voir la mise en avant',\n        ],\n        'private'   => [\n            'cta'       => 'Vérifier les paramètres publics',\n            'helper'    => 'Rend ta campagne publique pour être éligible à la mise en avant.',\n        ],\n        'public'    => [\n            'cta'       => 'Découvrir le fonctionnement de la mise en avant',\n            'helper'    => 'Les campagnes sélectionnées sont mises en avant sur la vitrine Kanka et le blog.',\n        ],\n    ],\n    'spotlighted'       => '{0} Pas encore sélectionné|[1,*] Mis en avant',\n    'tagged'            => '{0} Aucune entrée étiquetée|{1} Une entrée étiquetée|[2,*] :amount entrées étiquetées',\n    'titles'            => [\n        'calendars'     => 'Gardien du temps',\n        'characters'    => 'Donneur de nom',\n        'connections'   => 'Cupidon',\n        'creatures'     => 'Éleveur',\n        'dead'          => 'Meurtrier',\n        'events'        => 'Maître de l\\'histoire',\n        'families'      => 'Planification familiale',\n        'locations'     => 'Constructeur',\n        'markers'       => 'Cartographe',\n        'organisations' => 'Fusions et acquisitions',\n        'plugins'       => 'Connaisseur en plugins',\n        'quests'        => 'Mastermind',\n        'spotlighted'   => 'Mis en avant',\n        'tags'          => 'Sous contrôle',\n        'themes'        => 'Peintre',\n    ],\n    'tutorial'          => 'Les succès suivent les actions importantes dans cette campagne, comme créer des entrées ou utiliser des fonctionnalités clés. Ils sont uniquement informatifs et se mettent à jour automatiquement pendant que tu explores et construis',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'accept'    => 'Accepter',\n        'reject'    => 'Décliner',\n    ],\n    'apply'             => [\n        'apply'         => 'Appliquer',\n        'help'          => 'Cette campagne est ouverte à de nouveaux membre. Postules pour la rejoindre en remplissant ce formulaire. Une notification sera envoyée lorsque les administrateurs de la campagne examine ta candidature.',\n        'remove_text'   => 'ta candidature',\n        'success'       => [\n            'apply' => 'Ta candidature a été enregistrée. Tu peux la modifier ou l\\'annuler à tout moment. Une notification sera envoyée lorsque les administrateurs de la campagne l\\'examine.',\n            'remove'=> 'Ta candidature a été retirée.',\n            'update'=> 'Ta candidature a été modifiée. Tu peux toujours la modifier ou l\\'annuler à tout moment. Une notification sera envoyée lorsque les administrateurs de la campagne l\\'examine.',\n        ],\n        'title'         => 'Rejoindre :name',\n    ],\n    'dashboard_widget'  => [\n        'add'               => 'Ajouter un widget',\n        'has_widget'        => 'Le widget de candidature est sur le tableau de bord.',\n        'has_widget_help'   => 'Le tableau de bord de ta campagne présente le widget de candidature aux joueurs potentiels.',\n        'no_widget'         => 'Pas de widget de candidature sur le tableau de bord.',\n        'no_widget_help'    => 'Ta campagne est ouverte mais ne le montre pas sur le tableau de bord. Ajoute un widget pour que les joueurs puissent la découvrir et postuler.',\n        'success'           => 'Widget de candidature ajouté au tableau de bord.',\n        'title'             => 'Widget du tableau de bord',\n    ],\n    'experience'        => [\n        'intermediate'  => 'Intermédiaire (Quelques parties)',\n        'new'           => 'Débutant (Première fois)',\n        'veteran'       => 'Vétéran (Années d\\'expérience)',\n    ],\n    'fields'            => [\n        'additional_notes'      => 'Autre chose',\n        'application'           => 'Application',\n        'availability_days'     => 'Jours disponibles',\n        'character_concept'     => 'Concept de personnage',\n        'experience_level'      => 'Niveau d\\'expérience',\n        'external_link'         => 'Fiche de personnage / Lien',\n        'intro'                 => 'Introduction de la campagne',\n        'new_application'       => 'Nouvelle candidature de joueur',\n        'player_count'          => 'Nombre de joueurs',\n        'playstyle_tags'        => 'Styles de jeu',\n        'pref_rp_combat'        => 'Équilibre',\n        'pref_tone'             => 'Préférence de ton',\n        'reason'                => 'Motif d\\'approbation / de rejet',\n        'schedule'              => 'Planning',\n        'schedule-placeholder'  => 'Chaque vendredi à 19h',\n        'time_end'              => 'À',\n        'time_start'            => 'De',\n        'timezone'              => 'Fuseau horaire',\n    ],\n    'filters'           => [\n        'all'       => 'Tout afficher',\n        'approved'  => 'Afficher les approuvées',\n        'pending'   => 'Afficher les en attente',\n        'rejected'  => 'Afficher les refusées',\n        'title'     => 'Filtres',\n    ],\n    'headers'           => [\n        'availability'  => 'Disponibilité et planning',\n        'preferences'   => 'Préférences de style de jeu',\n    ],\n    'helpers'           => [\n        'applications_closed'   => 'Ta campagne est publique, mais les nouveaux joueurs ne peuvent pas postuler tant que le statut n\\'est pas sur \"Ouvert\".',\n        'availability_days'     => 'Sélectionne les jours où tu es généralement disponible pour jouer.',\n        'experience_level'      => 'Quel est ton niveau de familiarité avec ce système de jeu?',\n        'external_link'         => 'Lien vers D&D Beyond, Google Docs ou autres fiches de personnage externes.',\n        'fill_setup'            => 'Remplis le formulaire de configuration publique pour pouvoir ouvrir ta campagne au public.',\n        'filters_incomplete'    => 'Ta campagne est ouverte aux candidatures, mais tu n\\'as pas terminé la configuration des filtres (système, fuseau horaire ou tags). Les compléter facilitera la recherche pour les bons joueurs.',\n        'modal'                 => 'Une campagne qui est ouverte aux candidatures et qui est publique peut avoir des utilisateurs demander de joindre la campagne.',\n        'no_applications_title' => 'Aucune application trouvée',\n        'no_applications_v2'    => 'Il n\\'y a actuellement aucune demande en attente pour rejoindre la campagne, mais tu peux aider les joueurs à trouver leur prochaine aventure! Des informations détaillées et des filtres de recherche facilitent la découverte de ton histoire.',\n        'reason'                => 'Si une raison est fournie, le/la demandeur en sera informé.',\n        'role'                  => 'En cas d\\'approbation, le rôle auquel le candidat est ajouté.',\n    ],\n    'labels'            => [\n        'casual'            => 'Casual / Détente',\n        'combat_focused'    => 'Axé combat',\n        'rp_heavy'          => 'RP intensif',\n        'serious'           => 'Sérieux / Immersif',\n    ],\n    'open'              => [\n        'closed'    => 'La campagne est fermée',\n        'open'      => 'La campagne est ouverte',\n        'title'     => 'Campagne ouverte',\n    ],\n    'placeholders'      => [\n        'additional_notes'  => 'Déclencheurs, limites strictes ou questions spécifiques.',\n        'character_concept' => 'Décris brièvement qui tu veux jouer, son histoire et comment il s\\'intègre dans le monde.',\n        'intro'             => 'Une brève explication de ta campagne, affichée en haut du formulaire de candidature.',\n        'note'              => 'Ecris ta candidature pour rejoindre la campagne.',\n        'player_count'      => '4-6 joueurs',\n        'reason'            => 'Ta raison',\n    ],\n    'public'            => [\n        'private'   => 'La campagne est privée',\n        'public'    => 'La campagne est publique',\n        'title'     => 'Campaign publique',\n    ],\n    'setup'             => [\n        'done'                  => 'Paramètres de campagne publique remplis.',\n        'prioritise'            => 'Prioriser cette campagne',\n        'prioritise_conflict'   => 'Tu ne peux prioriser qu\\'une campagne à la fois. Désactive la priorisation sur :campaign d\\'abord.',\n        'prioritise_help'       => 'Les campagnes priorisées apparaissent en haut de la liste des campagnes publiques, devant les autres campagnes ouvertes.',\n        'prioritise_upgrade'    => 'Cette fonctionnalité est réservée aux abonnés :link.',\n        'prioritised'           => 'Campagne priorisée',\n        'setup'                 => 'Configure les paramètres de campagne publique pour ouvrir ta campagne au public.',\n        'success'               => 'Configuration sauvegardée. Une fois tous les champs remplis, la campagne pourra être ouverte au public.',\n        'success_complete'      => 'La campagne peut être ouverte au public!',\n        'title'                 => 'Configuration de campagne publique',\n        'tutorial'              => 'La campagne ne pourra être ouverte au public que lorsque tous ces champs seront remplis.',\n    ],\n    'timezone'          => 'Fuseau horaire et langue',\n    'title'             => 'Candidatures',\n    'toggle'            => [\n        'closed'        => 'Fermé aux candidatures',\n        'label'         => 'Status',\n        'open'          => 'Ouvert aux candidatures',\n        'success'       => 'Le status de candidature de la campagne a été modifié.',\n        'success_open'  => 'La campagne est maintenant publique et les utilisateurs peuvent postuler.',\n        'title'         => 'Status des candidatures',\n    ],\n    'tutorial'          => 'Les candidatures permettent aux gens de demander l\\'accès à cette campagne. Les candidats remplissent un court formulaire, et les admins peuvent examiner, accepter ou refuser chaque demande. Les utilisateurs approuvés sont ajoutés à la campagne avec le rôle que tu leur attribues pendant la revue',\n    'update'            => [\n        'approve'   => 'Sélectionner le rôle auquel l\\'utilisateur sera ajouté à la campagne.',\n        'approved'  => 'Candidatures approuvée.',\n        'reject'    => 'Ecrire une raison optionnelle pourquoi la candidature est rejetée.',\n        'rejected'  => 'Candidature déclinée.',\n    ],\n    'warnings'          => [\n        'applications_closed'   => 'Les candidatures sont actuellement fermées.',\n        'filters_incomplete'    => 'Les filtres de la campagne sont incomplets.',\n    ],\n    'weekdays'          => [\n        'fri'   => 'Ven',\n        'mon'   => 'Lun',\n        'sat'   => 'Sam',\n        'sun'   => 'Dim',\n        'thu'   => 'Jeu',\n        'tue'   => 'Mar',\n        'wed'   => 'Mer',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'      => 'Construit visuellement un thème pour la campagne à l\\'aide de cette interface. Fais défiler l\\'écran vers le bas pour voir l\\'impact des changements sur les différents éléments de la campagne. Lorsqu\\'une couleur est sélectionnée, une couleur \"contrastante\" est automatiquement sélectionnée pour colorer le texte. Pour en savoir plus sur les thèmes, consultes notre :docs.',\n    'pitch'     => 'Hey, nous avons un constructeur de thème si tout ce que tu veux faire est de changer quelques couleurs de la campagne 😉',\n    'pitch-go'  => 'Aller au constructeur de thème',\n    'reset'     => 'Le thème a été réinitialisé.',\n    'success'   => 'Le thème a été enregistré.',\n    'title'     => 'Constructeur de thème',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/categories.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'permission-disabled'   => 'Cette catégorie est désactivée.',\n    ],\n    'helpers'   => [\n        'aliases'   => 'Ajouter des alias et des identrées secrètes aux entrées du monde.',\n        'media'     => 'Télécharger des fichiers média (images, pdfs, audio) et des liens externes vers les entrées.',\n    ],\n    'tab'       => 'Catégories',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Entête de campagne modifié.',\n        'title'     => 'Modifier l\\'entête de campagne',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Ajouter une nouvelle image par défaut',\n    ],\n    'call-to-action'    => 'Définis des vignettes personnalisée pour tous les personnages, lieux ou autres entrées de la campagne. Ces images sont ensuite affichées sur les différentes listes.',\n    'create'            => [\n        'error'     => 'Problème lors de la sauvegarde. Est-ce que :type est déjà créé?',\n        'helper'    => 'Ajouter une image qui sera utilisée comme vignette par défaut pour les entrées du type sélectionné.',\n        'success'   => 'Image par défaut pour :type créée.',\n        'title'     => 'Nouvelle image par défaut',\n    ],\n    'destroy'           => [\n        'success'   => 'Image par défaut pour :type retirée.',\n    ],\n    'empty'             => 'Aucune catégorie ne possède actuellement une image par défaut.',\n    'helper'            => 'Utilisée pour toutes les entrées sans image de cette catégorie.',\n    'reset'             => [\n        'helper'    => 'Tu es sûr de vouloir retirer toutes les images de remplacement?',\n        'success'   => 'Toutes les images de remplacement ont été retirées avec succès.',\n        'title'     => 'Réinitialiser les images de remplacement',\n        'warning'   => 'Cette action est permanente et ne peut pas être annulée.',\n    ],\n    'title'             => 'Images de remplacement',\n    'tutorial'          => 'Définis des images par défaut pour les entrées sans image personnalisée. Ces vignettes apparaissent immédiatement dans toute la campagne et gardent les listes visuellement cohérentes.',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/defaults.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'character_personality_visibility'  => 'Visibilité par défaut de la personnalité des personnages',\n        'connections'                       => 'Vue des connexions d\\'entrée',\n        'connections_mode'                  => 'Style de la carte des connexions',\n        'descendants'                       => 'Filtrage par défaut des sous-listes',\n        'entity_privacy'                    => 'Visibilité des nouvelles entrées',\n        'gallery_visibility'                => 'Visibilité par défaut des images de la galerie',\n        'post_collapsed'                    => 'Mise en page des nouveaux articles',\n        'private_mention_visibility'        => 'Mentions d\\'entrées privées',\n        'related_visibility'                => 'Visibilité du contenu lié',\n    ],\n    'helpers'   => [\n        'character_visibility'          => 'Définit la visibilité des traits de personnalité quand tu crées des personnages',\n        'connections'                   => 'Choisis si les pages de connexions d\\'entrées affichent par défaut une carte visuelle ou une liste',\n        'connections_mode'              => 'Définit le style de mise en page par défaut des cartes de connexions (premium)',\n        'descendants'                   => 'Quand tu consultes les sous-listes d\\'une entrée (comme les personnages d\\'un lieu), choisis d\\'afficher seulement les enfants directs ou tous les descendants',\n        'display'                       => 'Définis les options d\\'affichage par défaut des pages d\\'entrée',\n        'entity'                        => 'Contrôle la visibilité que Kanka applique automatiquement au nouveau contenu',\n        'entity_privacy'                => 'Définit la visibilité des nouveaux personnages, lieux, etc',\n        'gallery_visibility'            => 'Valeur de visibilité par défaut pour les images que tu ajoutes à la galerie',\n        'post_collapsed'                => 'Quand tu crées des articles, définis s\\'il est réduit ou développé',\n        'privacy'                       => 'Définis les visibilités par défaut du nouveau contenu. Ces réglages s\\'appliquent quand tu crées du contenu et peuvent être changés pour chaque élément',\n        'private_mention_visibility'    => 'Quand tu mentionnes une entrée privée dans du contenu visible, choisis si son nom apparaît ou non',\n        'related_visibility'            => 'Contrôle la visibilité des articles, propriétés et relations ajoutés aux entrées',\n    ],\n    'sections'  => [\n        'display'   => 'Affichage par défaut des entrées',\n        'entity'    => 'Valeurs par défaut des entrées',\n        'media'     => 'Valeurs par défaut des médias',\n        'mention'   => 'Comportement des mentions',\n    ],\n    'tutorial'  => 'Optimise la création de contenu avec des réglages par défaut malins. Choisis les visibilités par défaut pour les entrées, articles, images et autres contenus. Ces préférences s\\'appliquent automatiquement quand tu crées du contenu, te faisant gagner du temps tout en gardant ta campagne organisée',\n    'update'    => [\n        'success'   => 'Valeurs par défaut de la campagne mises à jour',\n    ],\n    'values'    => [\n        'collapsed'     => [\n            'collapsed' => 'Réduit',\n            'default'   => 'Par défaut',\n            'expanded'  => 'Développé',\n        ],\n        'connections'   => [\n            'explorer'  => 'Carte des connexions (premium)',\n            'list'      => 'Interface en liste',\n        ],\n        'descendants'   => [\n            'all'       => 'Afficher tous les descendants par défaut',\n            'direct'    => 'Afficher les descendants directs par défaut',\n        ],\n        'mentions'      => [\n            'private'   => 'Masquer le nom de la cible',\n            'visible'   => 'Afficher le nom de la cible',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/delete.php",
    "content": "<?php\n\nreturn [\n    'backup'            => 'sauvegade',\n    'confirm'           => 'Si tu es sûr de vouloir supprimer définitivement :campagne, écrit :code dans le champ ci-dessous.',\n    'confirm-button'    => 'Supprimer définitivement :name',\n    'helper'            => 'La suppression d\\'une campagne est une action permanente qui ne peut être annulée. Cette action supprimera de nos serveurs toutes les données relatives à la campagne, y compris les images et les ressources. Nous te recommendons de faire une :backup avant de continuer.',\n    'issue'             => 'Le problème suivant doit être résolu avant que la campagne puisse être supprimée.',\n    'members'           => 'Tous les autres membres doivent être retirés de la campagne.',\n    'success'           => ':name a été définitivement supprimé.',\n    'title'             => 'Suppression',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'download'  => 'Télécharger',\n        'export'    => 'Exporter la campagne',\n    ],\n    'confirm'   => [\n        'notification'  => 'Les membres du rôle :admin seront notifiés lorsque l\\'export sera prêt à être téléchargé.',\n        'title'         => 'Confirmation d\\'export',\n        'type'          => 'Type d\\'export',\n        'warning'       => 'Tu es sur le point d\\'exporter les données de la campagne. Ce processus peut prendre beaucoup de temps selon la taille de la campagne. Tu peux continuer à utiliser Kanka pendant que nos serveurs génèrent l\\'export.',\n    ],\n    'errors'    => [\n        'limit'     => 'La campagne a déjà été exportée une fois aujourd\\'hui. Exporter la campagne sera possible de nouveau demain.',\n        'premium'   => 'L\\'export Markdown est une fonctionnalité réservée aux campagnes premium',\n    ],\n    'expired'   => 'Liens expiré',\n    'helpers'   => [\n        'json'      => 'Pour sauvegarder et restaurer — peut être utilisé comme import de campagne',\n        'markdown'  => 'Pour partager et lire — format lisible par un humain',\n        'premium'   => 'Seulement disponible avec une campagne premium.',\n    ],\n    'progress'  => 'Progrès',\n    'size'      => 'Taille',\n    'status'    => [\n        'failed'    => 'Échoué',\n        'finished'  => 'Terminé',\n        'running'   => 'En cours',\n        'scheduled' => 'Programmé',\n    ],\n    'success'   => 'L\\'export de la campagne a été mis en file d\\'attente pour traitement. Tous les membres du rôle :admin seront notifiés une fois que le fichier sera prêt à être téléchargé.',\n    'title'     => 'Export',\n    'type'      => 'Type',\n    'types'     => [\n        'json'  => 'JSON',\n        'md'    => 'Markdown',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close'         => 'Fermer',\n        'file-link'     => 'Lien de fichier',\n        'focus_point'   => 'Définir le centrage',\n        'image-link'    => 'Lien d\\'image',\n        'reset_focus'   => 'Réinitialiser le centrage',\n        'save'          => 'Enregistrer',\n        'upgrade'       => 'Augmenter l\\'espace de stockage',\n    ],\n    'breadcrumb'    => 'Galerie',\n    'bulk'          => [\n        'destroy'   => [\n            'confirm'   => 'Es-tu sûr de vouloir supprimer définitivement les éléments sélectionnés? Cette action est permanente.',\n            'success'   => '{0}Aucun fichier supprimé.|{1}Un fichier supprimé.|{2,*} :count les fichiers supprimés.',\n        ],\n    ],\n    'cta'           => 'Gérer et réutiliser des images à travers la campagne.',\n    'destroy'       => [\n        'folder'    => 'Dossier :name supprimé.',\n        'success'   => 'Image :name supprimée.',\n    ],\n    'errors'        => [\n        'max'           => 'Prière de ne que sélectionner jusqu\\'à :count fichiers à la fois.',\n        'permissions'   => 'Tes rôles de campagne n\\'ont pas la permission :permission pour pouvoir télécharger des images à la galerie de la campagne.',\n        'storage'       => 'Il n\\'y a pas assez d\\'espace de stockage pour télécharger les images sélectionnées. Espace de stockage disponible: :available.',\n    ],\n    'fields'        => [\n        'created_by'            => 'Téléchargé par',\n        'details'               => 'Détails',\n        'ext'                   => 'Ext',\n        'file_type'             => 'Type de fichier',\n        'folder'                => 'Dossier',\n        'image_mentioned_in'    => '{0} Mentionné comme image sur aucune entrée.|{1} Mentionné comme image sur une entrée.|[2,*] Mentionné comme image sur :count entrées.',\n        'image_used_in'         => '{0} Utilisé comme image sur aucune entrée.|{1} Utilisé comme image sur une entrée.|[2,*] Utilisé comme image sur :count entrées.',\n        'link'                  => 'Lien',\n        'name'                  => 'Nom',\n        'size'                  => 'Taille',\n        'unused'                => 'N\\'est utilisé nulle part',\n        'used_in'               => 'Utilisé dans',\n    ],\n    'focus'         => [\n        'locked'    => 'Définir le point focal d\\'une image requiert une campagne premium.',\n        'removed'   => 'Centrage de l\\'image retiré.',\n        'updated'   => 'Centrage de l\\'image mis à jour.',\n    ],\n    'new_folder'    => [\n        'title' => 'Nouveau dossier',\n    ],\n    'no_folder'     => 'Sans dossier',\n    'pitch'         => 'Télécharge des images dans la galerie de la campagne directement depuis l\\'éditeur de text.',\n    'placeholders'  => [\n        'search'    => 'Recherche d\\'image...',\n    ],\n    'storage'       => [\n        'of'    => 'de',\n        'title' => 'Espace',\n    ],\n    'title'         => 'Galerie de la campagne :campaign',\n    'update'        => [\n        'folder'    => 'Dossier modifié',\n        'success'   => 'Image modifiée.',\n    ],\n    'uploader'      => [\n        'add'           => 'Ajouter',\n        'new_folder'    => 'Nouveau dossier',\n        'or'            => 'ou',\n        'select_file'   => 'Sélectionner un fichier',\n        'well'          => 'Déposer le fichier à télécharger',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/import.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'import'    => 'Envoyer l\\'export',\n    ],\n    'csv'               => [\n        'continue'          => 'Continuer',\n        'fields_helper'     => 'Sélectionne une colonne à assigner à chacun des champs de l\\'entrée.',\n        'no_preview'        => 'Aucune donnée d\\'aperçu disponible',\n        'preview'           => 'Aperçu',\n        'select_module'     => 'Sélection de catégorie',\n        'select_one'        => 'Sélectionner',\n        'selected_tags'     => 'Tags sélectionnés',\n        'set_column'        => 'Définir la colonne',\n        'set_fields'        => 'Définir les champs',\n        'submit'            => 'Soumettre l\\'import CSV',\n        'traits'            => 'Traits de personnage',\n        'traits_helper'     => 'Tu peux ajouter des traits aux personnages. L\\'en-tête sélectionné sera utilisé comme nom du trait, et la valeur correspondante comme valeur du trait.',\n        'type_helper'       => 'Sélectionne la catégorie dans laquelle tu veux importer les nouvelles entrées.',\n        'validation_error'  => 'Au moins 1 colonne doit être entièrement remplie',\n    ],\n    'description_v2'    => 'Importe des entrées, articles, propriétés, galeries et autres données depuis un export de campagne ou de nouvelles entrées depuis un fichier .CSV dans cette campagne. L\\'import s\\'exécute en arrière-plan et peut prendre du temps. Toi et les autres administrateurs serez notifiés quand il sera terminé.',\n    'fields'            => [\n        'file_v2'   => 'Fichier CSV ou fichier ZIP d\\'export',\n        'updated'   => 'Dernière modification',\n    ],\n    'form'              => 'Formulaire d\\'upload',\n    'limitation_v2'     => 'Seuls les fichiers zip et csv sont acceptés. Max :size.',\n    'progress'          => [\n        'uploading' => 'Téléchargement',\n    ],\n    'status'            => [\n        'failed'        => 'Echoué',\n        'finished'      => 'Terminé',\n        'invalid'       => 'Données invalides',\n        'processing'    => 'En cours de traitement',\n        'queued'        => 'Programmé',\n        'ready'         => 'Prêt pour le mapping',\n        'running'       => 'En cours',\n        'validating'    => 'Validation en cours',\n    ],\n    'subscription'      => [\n        'pitch' => 'Restaure une sauvegarde de campagne ou importe depuis une autre campagne. Disponible avec les abonnements :wyvern ou :elemental.',\n    ],\n    'title'             => 'Import',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/invites.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Créer un lien d\\'invitation à envoyer à tes joueurs, afin qu\\'ils puissent participer à la campagne.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'pitch' => 'Les campagnes gratuites peuvent avoir jusqu\\'à :limit :thing. Les campagnes premium ont des :thing illimités, ou tu peux en supprimer un pour libérer de la place.',\n    'title' => 'Limite atteinte',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/logs.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'list'      => 'Nous gardons une trace de tous les changements principaux apportés à la campagne pendant :amount jours. Ces journaux ne détaillent pas les modifications individuelles, mais plutôt l\\'état général de la campagne.',\n        'nothing'   => 'Il n\\'y a aucun journal à afficher. Garde à l\\'esprit que les journaux ne sont conservés que pendant :amount jours.',\n        'title'     => 'Aucun journal',\n    ],\n    'pitch'     => 'Suis les changements généraux apportés à la campagne pendant :amount jours grâce à une campagne premium.',\n    'premium'   => [\n        'helper'    => 'Les journaux datant de plus de :amount jours ne peuvent être consultés qu\\'avec une campagne premium.',\n    ],\n    'title'     => 'Journal d\\'audit',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/members.php",
    "content": "<?php\n\nreturn [\n    'overview'  => [\n        'limited'   => ':amount de membres :total.',\n        'title'     => 'Membres disponibles',\n        'unlimited' => ':amount de membres illimités.',\n    ],\n    'roles'     => [\n        'admin'     => 'Tu ne peux pas ajouter directement des utilisateurs au rôle :admin ici. Cela se fait dans l’interface du rôle :admin.',\n        'helper'    => 'Ajouter ou retirer des rôles au membre :user.',\n        'success'   => 'Rôles modifiés pour :user.',\n        'title'     => 'Modification de rôles de membre',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/modules.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Créer une catégorie',\n        'customise' => 'Personnaliser',\n    ],\n    'create'        => [\n        'helper'    => 'Créer une nouvelle catégorie personnalisée pour organiser des entrées qui n\\'entrent pas dans les autres catégories.',\n        'success'   => 'Nouvelle catégorie créée.',\n        'title'     => 'Nouvelle catégorie',\n    ],\n    'delete'        => [\n        'confirm'           => 'Saisir :code pour confirmer la suppression permanente de la catégorie personnalisée :name.',\n        'confirm-button'    => '{0} Supprimer définitivement :name|{1} Supprimer définitivement :name et :count entrée|[2,] Supprimer définitivement :name et :count entrées',\n        'entities'          => '{1} Ceci supprimera définitivement :count entrée.|[2,] Ceci supprimera définitivement :count entrées.',\n        'helper'            => 'Es-tu sûr de vouloir supprimer la catégorie :name? Ceci supprimera de manière permanente toutes les entrées, favoris, et widgets lié à celle-ci.',\n        'success'           => 'Catégorie :name supprimée.',\n        'title'             => 'Suppression de catégorie',\n    ],\n    'errors'        => [\n        'disabled'              => 'La catégorie :name est désactivé. :fix',\n        'empty-custom'          => 'Ajoute des catégories personnalisées pour organiser les données qui ne rentrent pas dans ceux par défaut.',\n        'limit'                 => 'Il n\\'est actuellement que possible de créer :max catégories personnalitées pendant qu\\'on termine de construire cette nouvelle fonctionnalité.',\n        'limit-title'           => 'Limite des catégories personnalisées atteinte.',\n        'subscription-limit'    => 'Tu a atteint le nombre maximal de catégories personnalisées disponibles. La personne qui débloque les fonctionnalités premium peut souscrire à un abonnement supérieur pour augmenter cette limite.',\n    ],\n    'fields'        => [\n        'icon'          => 'Icône de la catégorie',\n        'image'         => 'Image de remplacement',\n        'plural'        => 'Nom au pluriel de la catégorie',\n        'singular'      => 'Nom au singulier de la catégorie',\n        'status'        => 'Status de la catégorie',\n        'update_name'   => 'Renommer le favori avec le nouveau nom de la catégorie',\n    ],\n    'helpers'       => [\n        'custom'    => 'Ceci est une catégorie personnalisée.',\n        'icon'      => 'L\\'icône :fontawesome, par example :example.',\n        'plural'    => 'Le pluriel des entrées de de la catégorie. Par example, potions.',\n        'roles'     => 'Sélection de rôle qui ont la permission de voir les entrées de cette nouvelle catégorie. Ceci peut être modifié plus tard dans les permissions des rôles.',\n        'singular'  => 'Le singulier d\\'une entrée de cette nouvelle catégorie. Par example, potion.',\n        'status'    => 'Les catégories désactivées sont cachées de la navigation et des menus. Aucune donnée n\\'est supprimée.',\n        'tutorial'  => 'Les catégories contrôlent quelles fonctionnalités sont visibles dans la campagne. Active celles que tu utilises et masque les autres. Désactiver une catégorie ne supprime jamais de données; ça les enlève juste de la navigation et des menus de création',\n    ],\n    'pitch'         => 'Renommer et changer l\\'icône associée à cette catégorie pour l\\'ensemble de la campagne.',\n    'pitch-custom'  => 'Créer des catégories personnalisées pour organiser des entrées uniques.',\n    'pitch-title'   => 'Débloque les catégories personnalisées',\n    'rename'        => [\n        'helper'    => 'Modifier le nom et l\\'icône de la catégorie tout au long de la campagne. Laisser vide pour utiliser le nom par défaut de Kanka.',\n        'success'   => 'Catégorie personnalisée.',\n        'title'     => 'Personnaliser la catégorie :module',\n    ],\n    'reset'         => [\n        'default'   => 'Ceci réinitialisera que les catégories par défaut, pas les catégorie personnalisées.',\n        'success'   => 'Les catégories ont été réinitialisé.',\n        'title'     => 'Réinitialiser des noms et icônes personnalisés des catégories',\n        'warning'   => 'Es-tu ous sûr de vouloir rétablir les noms et icônes d\\'origine des catégorie?',\n    ],\n    'sections'      => [\n        'custom'        => 'Catégories personnalisées',\n        'default'       => 'Catégories par défaut',\n        'early-access'  => 'Accès anticipé',\n        'features'      => 'Fonctionnalités',\n    ],\n    'states'        => [\n        'disable'   => 'Désactiver',\n        'disabled'  => 'La catégorie est désactivée',\n        'enable'    => 'Activer',\n        'enabled'   => 'La catégorie est activée',\n    ],\n    'status'        => [\n        'enabled'   => 'Catégorie activée',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/overview.php",
    "content": "<?php\n\nreturn [\n    'followers' => [\n        'title' => 'Abonnés',\n    ],\n    'member'    => [\n        'title' => 'Adhésion',\n    ],\n    'premium'   => [\n        'enable'    => 'Activer les fonctions premium',\n    ],\n    'status'    => [\n        'title' => 'Visibilité',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'Désactiver les plugins',\n            'enable'    => 'Activer les plugins',\n            'update'    => 'Mettre à jour les plugins',\n        ],\n        'changelog'         => 'Changements',\n        'disable'           => 'Désactiver le plugin',\n        'enable'            => 'Activer le plugin',\n        'find-plugins'      => 'Trouver des plugins',\n        'import'            => 'Importer',\n        'update'            => 'Mettre à jour le plugin',\n        'update-to'         => 'Mettre à jour à la version :version',\n        'update_available'  => 'Mise à jour disponible!',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} :count plugin retiré.|[2,*] :count plugins retirés.',\n        'disable'   => '{1} :count plugin désactivé.|[2,*] :count plugins désactivés.',\n        'enable'    => '{1} :count plugin activé.|[2,*] :count plugins activés.',\n        'update'    => '{1} :count plugin mis à jour.|[2,*] :count plugins mis à jour.',\n    ],\n    'destroy'       => [\n        'success'   => 'Le plugin :plugin a été retiré.',\n    ],\n    'disabled'      => [\n        'success'   => 'Le plugin :plugin a été désactivé.',\n    ],\n    'empty_list'    => 'La campagne n\\'a actuellement aucun plugin. Visiter la bibliothèque de plugins pour ajouter des plugins à la campagne, et revenir ici pour les activer.',\n    'enabled'       => [\n        'success'   => 'Le plugin :plugin a été activé.',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Plugin invalide.',\n    ],\n    'fields'        => [\n        'name'      => 'Nom du plugin',\n        'obsolete'  => 'Ce plugin a été marqué comme étant obsolète par l\\'équipe de Kanka, indiquant qu\\'il ne fonctionne plus comme prévu originalement par le/la créateur-rice.',\n        'status'    => 'Status',\n        'type'      => 'Type de plugin',\n    ],\n    'import'        => [\n        'button'                => 'Importer',\n        'created'               => 'Les entrées suivantes ont été créées:',\n        'fields'                => [\n            'only_new'  => 'Seulement les nouvelles entrées',\n            'private'   => 'Entrées privées',\n        ],\n        'helper'                => ':count entrées du plugin :plugin seront importées. Si ce plugin a déjà été importé dans le passé, les changements fait aux entrées déjà importées peuvent être perdus.',\n        'no_new_entities'       => 'Il n\\'y a pas de nouvelles entrées à importer.',\n        'option_only_import'    => 'Seulement importer les nouvelles entrées, et ignorer les entrées déjà précédemment importées.',\n        'option_private'        => 'Importer toutes les entrées comme privées.',\n        'success'               => '{1} Importé :count entrée du plugin :plugin.|[2,*] Importé :count entrées du plugin :plugin.',\n        'title'                 => 'Importer :plugin',\n        'updated'               => 'Les entrées suivantes ont été modifiées:',\n    ],\n    'info'          => [\n        'description'   => 'Affichage des dernières mises à jour du plugin :plugin.',\n        'helper'        => 'Dès qu\\'un plugin a une nouvelle version, tu peux mettre à jour le plugin à la version la plus récente.',\n        'installed'     => 'Installé',\n        'title'         => 'Mises à jour du plugin :plugin',\n        'updates'       => 'Mises à jour',\n        'versions'      => 'Versions',\n    ],\n    'pitch'         => 'Installes et gères les plugins du :marketplace.',\n    'status'        => [\n        'always'    => 'Ce type de plugin est toujours actif, sauf s\\'il est supprimé.',\n        'disabled'  => 'Désactivé',\n        'enabled'   => 'Activé',\n    ],\n    'templates'     => [\n        'name'  => ':name de :user',\n    ],\n    'title'         => 'Plugins de la campagne :name',\n    'types'         => [\n        'attribute' => 'Character Sheet',\n        'pack'      => 'Content Pack',\n        'theme'     => 'Thème',\n    ],\n    'update'        => [\n        'success'   => 'Le plugin :plugin a été mis à jour.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'new'           => 'Rends-la publique pour que la communauté puisse la découvrir, ou garde-la privée pour les membres invités uniquement.',\n        'permissions'   => 'Rendre ta campagne publique ne partage pas automatiquement le contenu. Configure ce que les visiteurs publics peuvent voir dans les réglages du rôle :public.',\n    ],\n    'title'     => 'Changer la visibilité de la campagne',\n    'update'    => [\n        'private'   => 'La campagne est dorénavant privée, et seuls ses membres y ont accès.',\n        'public'    => 'La campagne est dorénavant publique. Ce changement peut prendre un peu de temps pour apparaître dans les :public-campaigns.',\n        'unlisted'  => 'La campagne n\\'est plus répertoriée. Toute personne avec le lien peut y accéder, mais elle n\\'apparaît pas sur la page :public-campaigns.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'           => 'Récupérer',\n        'recover_selected'  => 'Récupérer la sélection',\n    ],\n    'error'     => 'Une erreur est survenue lors de la récupération.',\n    'fields'    => [\n        'deleted'       => 'Supprimé',\n        'deleted_at'    => 'Supprimé le :date par :user',\n    ],\n    'name_link' => ':name récupéré',\n    'order'     => [\n        'newest'        => 'Ordonner par: Récent',\n        'newest_first'  => 'Plus récent en premier',\n        'oldest'        => 'Ordonner par: Ancienté',\n        'oldest_first'  => 'Plus ancien en premier',\n        'type'          => 'Ordonner par: Type',\n        'type_order'    => 'Type',\n    ],\n    'premium'   => 'La récupération d\\'éléments est une fonctionnalité de campagne premium.',\n    'success_v2'=> '{1} :count élément a été récupéré.|[2,*] :count éléments ont été récupérés.',\n    'title'     => 'Récupération d\\'éléments supprimés',\n    'tutorial'  => 'Affiche et restaure les éléments récemment supprimés de la campagne. Les entrées, article et autres données associées peuvent être récupérés pendant :amount jours avant d\\'être supprimés définitivement. Restaurer un élément le remet avec toutes ses données intactes.',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'status'    => 'Status: :status',\n    ],\n    'create'        => [\n        'helper'    => 'Créer un nouveau rôle pour la campagne.',\n    ],\n    'overview'      => [\n        'limited'   => ':amount de :total rôles créés.',\n        'title'     => 'Rôles disponibles',\n        'unlimited' => ':amount de rôles illimités créés.',\n    ],\n    'permissions'   => [\n        'campaign-features' => 'Fonctionnalités de campagne',\n        'content-modules'   => 'Contenu de catégories',\n        'toggle'            => [\n            'action'    => 'Tout cocher',\n            'tooltip'   => 'Cocher la permission :action pour toutes les catégorie.',\n        ],\n    ],\n    'public'        => [\n        'helpers'   => [\n            'click'     => 'Clique sur n\\'importe quelle catégorie pour activer ou désactiver l\\'accès public à toutes les entrées qu\\'elle contient',\n            'intro'     => 'Contrôle ce que les non-membres peuvent voir dans la campagne',\n            'main'      => 'Sélectionne quelles catégories sont visibles pour toute personne qui consulte la campagne, qu\\'elle soit connectée ou non. Ça inclut les visiteurs publics et les utilisateurs de Kanka qui ne sont pas membres de la campagne',\n            'preview'   => 'Aperçu en tant que non-membre',\n        ],\n    ],\n    'show'          => [\n        'title' => 'Permissions :role - :campaign',\n    ],\n    'toggle'        => [\n        'disabled'  => 'Les membre du rôle :role ne peuvent plus :action les :entities.',\n        'enabled'   => 'Les membre du rôle :role peuvent maintenant :action les :entities.',\n    ],\n    'warnings'      => [\n        'adding-to-admin'   => 'Les membres du rôle :name ont accès à tous les éléments de la campagne, et ne peuvent pas être retiré par d\\'autres membres du rôle. Après :amount minutes, seules le/la membre peut se retirer du rôle.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/share.php",
    "content": "<?php\n\nreturn [\n    'buttons'   => [\n        'change_visibility' => 'Changer la visibilité',\n        'copy'              => 'Copier le lien',\n        'copy_public_link'  => 'Copier le lien public',\n        'make_public'       => 'Rendre public et copier le lien',\n    ],\n    'helpers'   => [\n        'private_explanation'   => 'Seuls les membres peuvent accéder aux campagnes privées.',\n        'public_explanation'    => 'Cette campagne est publique. N\\'importe qui avec le lien peut la parcourir.',\n        'unlisted_explanation'  => 'N\\'importe qui avec le lien peut parcourir cette campagne, mais elle n\\'apparait pas dans les répertoires publics.',\n    ],\n    'labels'    => [\n        'member_link'   => 'Seuls les membres peuvent ouvrir ceci',\n        'public_link'   => 'Lien public',\n    ],\n    'status'    => [\n        'private'   => 'Campagne privée',\n        'public'    => 'N\\'importe qui avec le lien peut voir cette campagne',\n    ],\n    'success'   => [\n        'copied_members'    => 'Lien réservé aux membres copié.',\n        'copied_public'     => 'Lien public copié, n\\'importe qui avec le lien peut voir.',\n        'made_public'       => 'La campagne est maintenant publique.',\n    ],\n    'title'     => 'Partager la campagne',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Réinitialiser par défaut',\n    ],\n    'call-to-action'    => 'Modifies l\\'ordre, les icônes et les noms des éléments de la navigation de la campagne.',\n    'helpers'           => [\n        'bookmarks' => 'Les favoris ne sont pas listés ici car chacun possède son propre réglage :position qui détermine où il apparaît dans la barre latérale.',\n        'image'     => 'Ajouter une image pour représenter la campagne. Cette image sera utilisée dans la barre latérale et dans l\\'interface de changement de campagne. Cette image peut être modifiée à tout moment en éditant la campagne.',\n        'reordering'=> 'Réordonner la navigation en cliquant sur l\\'icône sur la gauche.',\n    ],\n    'image-success'     => 'La nouvelle image de la campagne a été enregistrée. Cette image peut être modifiée à nouveau en éditant la campagne.',\n    'reset'             => [\n        'success'   => 'Réinitialisation effectuée.',\n        'title'     => 'Réinitialiser la configuration',\n        'warning'   => 'Es-tu sûr de vouloir réinitialiser la navigation à ses valeurs par défauts?',\n    ],\n    'success'           => 'Navigation sauvegardée.',\n    'title'             => 'Configuration de navigation pour :campaign',\n    'tooltips'          => [\n        'image' => 'Modifier cette image de fond',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Calendriers',\n            'title' => 'Garant de temps',\n        ],\n        'murderer'  => [\n            'goal'  => 'Personnages décédés',\n            'title' => 'Meurtier/Meurtrière',\n        ],\n    ],\n    'fields'        => [\n        'created'       => 'Créé le',\n        'creator'       => 'Créé par',\n        'entries'       => 'Total d\\'entrées',\n        'from-elements' => 'Des éléments',\n        'from-entities' => 'Des entrées',\n        'from-posts'    => 'Des articles',\n        'general'       => 'Général',\n        'words'         => 'Nombre total de mots',\n    ],\n    'title2'        => 'Statistiques',\n    'titles'        => [\n        'calendars' => 'Chronométreur/euse niveau :level',\n        'characters'=> 'Donneur/euse de nom niveau :level',\n        'dead'      => 'Meutrier/ère niveau :level',\n        'families'  => 'Orthogénie niveau :level',\n        'locations' => 'Architecte niveau :level',\n        'quests'    => 'Maître/esse d\\'oeuvre niveau :level',\n        'races'     => 'Éleveur/euse niveau :level',\n    ],\n    'tutorial'      => 'Les statistiques de la campagne affichent le nombre d\\'entrée et l\\'activité récente. Les données se mettent à jour toutes les :amount heures. Utilise ça pour suivre l\\'évolution et l\\'usage au fil du temps.',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'builder'   => 'Constructeur de thème',\n        'current'   => 'Thème actuel: theme',\n        'disable'   => 'Désactiver',\n        'enable'    => 'Activer',\n        'new'       => 'Nouveau style',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} :count style retiré.|[2,*] :count styles retirés.',\n        'disable'   => '{1} :count style désactivé.|[2,*] :count styles désactivés.',\n        'enable'    => '{1} :count style activé.|[2,*] :count styles actvités.',\n    ],\n    'create'        => [\n        'success'   => 'Nouveau style créé.',\n        'title'     => 'Nouveau style',\n    ],\n    'delete'        => [\n        'success'   => 'Style style :name supprimé.',\n    ],\n    'errors'        => [\n        'max_content'   => 'La règle CSS ne peut pas dépasser :amount charactères.',\n        'max_reached'   => 'Nombre maximal (:max) de styles atteint.',\n    ],\n    'fields'        => [\n        'content'       => 'Règles CSS',\n        'is_enabled'    => 'Activé',\n        'length'        => 'Longueur',\n        'modified'      => 'Modifié',\n        'name'          => 'Nom',\n        'order'         => 'Ordre',\n    ],\n    'helpers'       => [\n        'here'          => 'sur notre blog',\n        'is_enabled'    => 'Activer ce style sur chaque page.',\n        'main'          => 'Tu peux créer des règles CSS personnalisées pour ta campagne premium. Ces styles sont chargés après les thèmes du marketplace activés pour la campagne. Tu peux en savoir plus sur comment personnalisé ta campagne :here.',\n        'tutorial'      => 'Contrôle le style visuel de la campagne. Choisis les couleurs, les préférences de mise en page et les autres options de présentation. Ces changements n\\'affectent que cette campagne et peuvent être modifiés à tout moment.',\n    ],\n    'pitch'         => 'Définis du CSS pour complètement personnalisé le look de la campagne.',\n    'placeholders'  => [\n        'name'  => 'Nom du style',\n    ],\n    'reorder'       => [\n        'save'      => 'Enregister le nouvel ordre',\n        'success'   => '{1} :count style réordonné.|[2,*] :count styles réordonnés.',\n        'title'     => 'Réordonner les styles',\n    ],\n    'theme'         => [\n        'none'      => 'Utiliser les préférences de l\\'utilisateur',\n        'override'  => 'Forçage de thème',\n        'success'   => 'Thème de la campagne modifié.',\n        'title'     => 'Modifier le thème de la campagne.',\n    ],\n    'title'         => 'Styles de la campagne',\n    'toggle'        => [\n        'disable'   => 'Style désactivé.',\n        'enable'    => 'Style activé.',\n    ],\n    'update'        => [\n        'success'   => 'Style :name modifié.',\n        'title'     => 'Modifier le style',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/vanity.php",
    "content": "<?php\n\nreturn [\n    'available' => 'Le nom :vanity est disponnible!',\n    'forever'   => 'Une fois défini, ne peut plus être modifié. :docs',\n    'helper-v2' => 'Donne à la campagne une adresse web personnalisée et facile à retenir. Au lieu de :default, la campagne pourrait apparaître comme :example',\n    'rule'      => 'Le champ :field a besoin d\\'au moins une lettre.',\n    'rule2'     => 'Le champ :field ne permet par les charactères suivants: /.',\n    'set'       => 'L\\'URL unique de la campagne est :vanity.',\n];\n"
  },
  {
    "path": "lang/fr/campaigns/visibilities.php",
    "content": "<?php\n\nreturn [\n    'directory' => [\n        'public'    => 'Visible dans les campagnes publiques',\n        'unlisted'  => 'Cachée des campagnes publiques',\n    ],\n    'helpers'   => [\n        'premium'   => 'Pour activer cette option, les fonctionnalités premiums doivent être débloquée pour cette campagne.',\n        'private'   => 'Seulement les membres ont accès',\n        'public'    => 'N\\'importe qui avec un lien peut accéder',\n    ],\n    'titles'    => [\n        'private'   => 'Privée',\n        'public'    => 'Publique',\n        'unlisted'  => 'Publique (pas répertoriée)',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns/webhooks.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'action'    => 'Changer le status',\n        'add'       => 'Créer un webhook',\n        'bulks'     => [\n            'delete_success'    => '{1} Supprimé :count webhook.|[2,*] Supprimé :count webhooks.',\n            'disable'           => 'Désactiver',\n            'disable_success'   => '{1} Desactivé :count webhook.|[2,*] Desactivé :count webhooks.',\n            'enable'            => 'Activer',\n            'enable_success'    => '{1} Activé :count webhook.|[2,*] Activé :count webhooks.',\n        ],\n        'test'      => 'Tester le webhook',\n        'update'    => 'Modifier le webhook',\n    ],\n    'create'        => [\n        'success'   => 'Webhook créé avec succès',\n        'title'     => 'Ajouter un nouveau webhook',\n    ],\n    'destroy'       => [\n        'success'   => 'Webhook supprimé avec succès',\n    ],\n    'edit'          => [\n        'success'   => 'Webhook modifié avec succès',\n        'title'     => 'Modifier le webhook',\n    ],\n    'error'         => [\n        'pitch' => 'Débloques les fonctionalités premium pour avoir accès aux webhooks.',\n    ],\n    'fields'        => [\n        'enabled'           => 'Activé',\n        'event'             => 'Événement',\n        'events'            => [\n            'deleted'   => 'Entrée supprimée',\n            'edited'    => 'Entrée modifiée',\n            'new'       => 'Nouvelle entrée',\n        ],\n        'message'           => 'Message',\n        'private_entities'  => [\n            'helper'    => 'Ne pas déclencher le webhook lors de la mise à jour d\\'entrées privées.',\n            'skip'      => 'Ignorer les entrées privées',\n        ],\n        'type'              => 'Type',\n        'types'             => [\n            'custom'    => 'Message',\n            'payload'   => 'Payload',\n        ],\n        'url'               => 'URL',\n    ],\n    'helper'        => [\n        'active'    => 'Si le webhook est actuellement activé',\n        'message'   => 'Ajouter un message personnalisé avec prise en charge des paramètres',\n        'status'    => 'Basculer l\\'état actif du webhook',\n        'tutorial'  => 'Utilise des webhooks pour envoyer des mises à jour en temps réel de la campagne vers des outils externes. Les événements se déclenchent automatiquement quand des entrées sont créées, modifiées ou supprimées. Tu peux ajouter plusieurs webhooks et les tester depuis cette page',\n    ],\n    'placeholders'  => [\n        'message'   => '{who} a apporté des modifications à {name}, consulter le site {url}',\n        'url'       => 'URL du webhook cible',\n    ],\n    'premium'       => 'Sois notifié sur Discord ou dans d\\'autres applications lorsque ta campagne change, pour les nouvelles entrées, les mises à jour, et plus encore.',\n    'test'          => [\n        'success'   => 'Test envoyé',\n    ],\n    'title'         => 'Webhooks',\n    'toggle'        => [\n        'disable'   => 'Webhook désactivé.',\n        'enable'    => 'Webhook activé.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/campaigns.php",
    "content": "<?php\n\nreturn [\n    'create'                            => [\n        'success'   => 'Campagne créée.',\n        'title'     => 'Nouvelle Campagne',\n    ],\n    'edit'                              => [\n        'success'   => 'Campagne modifiée.',\n    ],\n    'entity_personality_visibilities'   => [\n        'private'   => 'Les nouveaux personnages ont leur personnalité privée par défault.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Nouvelles entrées privées',\n    ],\n    'errors'                            => [\n        'access'        => 'Accès refusé pour cette campagne.',\n        'premium'       => 'Cette fonctionnalité n\\'est que disponible pour les campagnes Premium.',\n        'unknown_id'    => 'Campagne inconnue.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'billboard'                 => 'Description du Billboard',\n        'boosted'                   => 'Boosté par',\n        'entity_count'              => 'Nombre d\\'entrées',\n        'entry'                     => 'Description de la campagne',\n        'followers'                 => 'Followers',\n        'genre'                     => 'Genre(s)',\n        'header_image'              => 'Image de fond pour le tableau de bord',\n        'image'                     => 'Image',\n        'locale'                    => 'Langue',\n        'name'                      => 'Nom',\n        'open'                      => 'Ouvert aux applications',\n        'premium'                   => 'Premium débloqué par :name',\n        'public'                    => 'Visibilité de la campagne',\n        'public_campaign_filters'   => 'Filtres publics',\n        'superboosted'              => 'Superboosté par',\n        'system'                    => 'Système',\n        'theme'                     => 'Thème',\n        'vanity'                    => 'URL unique',\n    ],\n    'following'                         => 'Suivant',\n    'helpers'                           => [\n        'boosted'                   => 'Cette campagne est boostée ce qui active certaines fonctionnalités. Plus de détails sur la page :settings.',\n        'css'                       => 'Définir du code CSS pour la campagne qui sera chargé sur chaque page. Abuser de cette fonctionnalité peut mener à une suppression du CSS. Les abus répétés peuvent mener à une suppression de la campagne.',\n        'dashboard'                 => 'Contrôler la manière dont l\\'en-tête de campagne s\\'affiche sur le tableau de bord.',\n        'excerpt'                   => 'Le contenu de ce champ sera affiché sur le tableau de bord dans le widget d\\'en-tête de campagne. Si ce champ est vide, les 1000 premiers caractères de la description de la campagne seront utilisés à la place.',\n        'header_image'              => 'Image affichée en arrière-plan de l\\'en-tête de campagne sur le tableau de bord.',\n        'hide_history'              => 'Activer cette option pour cacher l\\'historique d\\'une entrée aux membres qui ne sont pas dans le groupe admin de la campagne.',\n        'hide_members'              => 'Activer cette option pour cacher la liste des membres de la campagne aux membres qui ne sont pas dans le groupe admin de celle-ci.',\n        'locale'                    => 'La langue dans laquelle la campagne est écrite. Ceci est utilisé pour générer du contenu ainsi que pour grouper les campagnes publiques.',\n        'name'                      => 'Le nom de la campagne doit contenir au minimum 4 caractères.',\n        'no_entry'                  => 'La campagne n\\'a pas encore de description! Corrigeons cela.',\n        'premium'                   => 'Certaines fonctionnalités sont disponibles parce que les fonctionnalités Premium de cette campagne sont débloquées. Pour en savoir plus, consultez la page :settings.',\n        'public_campaign_filters'   => 'Aides les autres utilisateurs à trouver la campagne parmi les autres campagnes publiques en fournissant les détails suivants.',\n        'public_no_visibility'      => 'Attention! La campagne est public, mais le rôle publique de la campagne n\\'a pas d\\'accès. :fix.',\n        'system'                    => 'Si la campagne est publiquement visible, elle sera affichée dans la page :link.',\n        'systems'                   => 'A définir.',\n        'theme'                     => 'Définir le thème pour la campagne qui surplante le thème de l\\'utilisateur.',\n        'view_public'               => 'Pour afficher la campagne comme le ferait un utilisateur public, ouvres :link dans une fenêtre de navigation privée.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Copier le lien dans le presse-papier.',\n            'link'  => 'Nouveau Lien',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Créer une invitation',\n            ],\n            'success_link'  => 'Liens créé: :link',\n            'title'         => 'Invite un ami à la campagne',\n        ],\n        'destroy'               => [\n            'success'   => 'Invitation annulée.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Ce code d\\'activation a déjà été utilisé, ou la campagne n\\'existe plus.',\n            'invalid_token'     => 'Ce code d\\'activation n\\'est plus valide.',\n            'join'              => 'Connecte-toi ou crée un compte pour joindre :campaign.',\n        ],\n        'fields'                => [\n            'created'   => 'Envoyé',\n            'role'      => 'Rôle',\n            'token'     => 'Jeton',\n            'type'      => 'Type',\n            'usage'     => 'Nombre max d\\'utilisation',\n        ],\n        'helpers'               => [\n            'role'  => 'Les utilisateurs doivent rejoindre avant de pouvoir être promus au rôle d\\'administrateur.',\n            'usage' => 'Nombre de fois où le lien d\\'invitation peut être utilisé avant qu\\'il ne devienne inactif.',\n        ],\n        'unlimited_validity'    => 'Illimité',\n        'usages'                => [\n            'five'      => '5 fois',\n            'no_limit'  => 'Sans limite',\n            'once'      => '1 fois',\n            'ten'       => '10 fois',\n        ],\n    ],\n    'leave'                             => [\n        'action'            => 'Quitter la campagne',\n        'confirm'           => 'Es-tu sûr de vouloir quitter la campagne :name? Tu n\\'auras plus accès aux données, sauf si un admin de la campagne t\\'invite à nouveau.',\n        'confirm-button'    => 'Oui, quitter la campagne',\n        'error'             => 'Impossible de quitter la campagne.',\n        'fix'               => 'Aller aux membres de la campagne',\n        'no-admin-left'     => 'Quitter la campagne n\\'est pas possible car celle-ci se retrouverait sans admin. Ajoute un autre membre au rôle admin en premier.',\n        'success'           => 'Tu as quitté la campagne.',\n        'title'             => 'Quitter la campagne',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'Retirer de la campagne',\n            'switch'        => 'Basculer',\n            'switch-back'   => 'Retour à mon compte',\n            'switch-entity' => 'Basculer',\n        ],\n        'fields'                => [\n            'banned'        => 'Compte suspendu',\n            'joined'        => 'Rejoint',\n            'last_login'    => 'Dernière connexion',\n            'name'          => 'Membre',\n            'role'          => 'Rôle',\n            'roles'         => 'Rôles',\n        ],\n        'helpers'               => [\n            'switch'    => 'Basculer vers ce membre',\n        ],\n        'impersonating'         => [\n            'message'   => 'Tu visualises la campagne en tant qu\\'un autre membre. Certaines fonctionnalités ont été désactivées, mais le reste fonctionne exactement comme le verrait le membre.',\n            'title'     => 'Se faisant passer pour :name',\n        ],\n        'invite'                => [\n            'description'   => 'Invite tes amis et joueurs à participer à la campagne en créant un lien d\\'invitation et en leur envoyant l\\'URL générée! En acceptant l\\'invitation, ils seront ajoutés en tant que membres dans le rôle défini par l\\'invitation.',\n            'more'          => 'Tu peux ajouter plus de rôles sur la :link.',\n            'title'         => 'Invitation',\n        ],\n        'removal'               => 'Retrait de \":member\" de la campagne.',\n        'roles'                 => [\n            'member'    => 'Membre',\n            'owner'     => 'Administrateur',\n            'player'    => 'Joueur',\n            'public'    => 'Public',\n            'viewer'    => 'Observateur',\n        ],\n        'switch_back_success'   => 'Tu es de retour à ton compte.',\n    ],\n    'mentions'                          => [],\n    'modules'                           => [],\n    'open_campaign'                     => [],\n    'options'                           => [],\n    'overview'                          => [\n        'entity-count'      => '{0} Aucune entrée|{1} :amount entrée|[2,*] :amount entrées',\n        'follower-count'    => '{0} Aucun abonné|{1} :amount abonné|[2,*] :amount abonnés',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Tableau de bord',\n        'privacy'   => 'Confidentialité par défaut',\n        'setup'     => 'Configuration',\n        'sharing'   => 'Partage',\n        'systems'   => 'Systèmes',\n        'ui'        => 'Interface',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'La langue utilisée',\n        'name'      => 'Le nom de la campagne',\n        'system'    => 'D&D 5e, 3.5, Pathfinder, Tigres Volants, Gurps',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Caché',\n        'private'   => 'Privé',\n        'visible'   => 'Visible',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'Les campagnes sont privées par défaut, et peuvent être définie comme publique. Cela permet à n\\'importe qui de les accéder, et rend la campagne visible dans les :public-campaigns se la campagne a des entrées visibles au rôle :public-role. Une campagne public est visible par tous, mais pour que le contenu soit visible, le rôle :public-role doit avoir des permissions adéquates.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'Ajouter un rôle',\n            'duplicate'     => 'Copier le rôle',\n            'permissions'   => 'Gérer les permissions',\n            'rename'        => 'Renommer le rôle',\n            'save'          => 'Enregistrer le rôle',\n        ],\n        'admin_role'    => 'rôle admin',\n        'bulks'         => [\n            'delete'    => '{1} :count rôle retiré.|[2,*] :count rôles retirés.',\n            'edit'      => '{1} :count rôle modifié.|[2,*] :count rôles modifiés.',\n        ],\n        'create'        => [\n            'success'   => 'Rôle :name créé.',\n            'title'     => 'Nouveau rôle',\n        ],\n        'destroy'       => [\n            'success'   => 'Rôle :name supprimé.',\n        ],\n        'edit'          => [\n            'success'   => 'Rôle :name modifié.',\n            'title'     => 'Modifier le rôle :name',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Copier les permissions',\n            'name'              => 'Nom',\n            'permissions'       => 'Permissions',\n            'type'              => 'Type',\n            'users'             => 'Utilisateurs',\n        ],\n        'helper'        => [\n            '1'                     => 'Une campagne peut avoir autant de rôles que désiré. Le rôle \"Admin\" a automatiquement accès à tout dans une campagne, et chaque autre rôle peut être configuré pour avoir des accès spécifiques à divers entrées (personnages, lieux, etc).',\n            '2'                     => 'Les entrées individuelles peuvent avoir leurs propres permissions sous l\\'onglet \"Permissions\" de celles-ci. Cet onglet apparait dès le moment qu\\'une campagne a plusieurs membres ou rôles.',\n            '3'                     => 'Il y a deux options possibles. Soit le mode \"opt-out\", ou les rôles ont le droit de lire toutes les entrées, couplé à l\\'option \"Privé\" sur les entrées pour les cacher. Sinon, il est possible de ne pas donner de droits généraux aux rôles, et à la place donner des rôles individuellement sur les entrées pour les rendre visibles.',\n            '4'                     => 'Les campagne boostées ont un nombre illimité de rôles.',\n            'permissions_helper'    => 'Créer une copie du rôle et de ses permissions, sur les catégories et sur les entrées.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'Le rôle Public a des permissions mais la campagne est privée. La campagne peut être rendue publique sous l\\'onglet Partager en modifiant la campagne.',\n            'empty_role'            => 'Ce rôle n\\'a pas encore de membre.',\n            'role_admin'            => 'Les membres du rôle :name ont automatiquement accès à tout le contenu et toutes les fonctionnalités de la campagne.',\n            'role_permissions'      => 'Permettre au rôle \\':name\\' les actions suivantes sur toutes les entrées.',\n        ],\n        'members'       => 'Membres',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'Les permissions de campagne sont les suivants:',\n                'entities'  => 'Voici un petit récapitulatif de ce que les membres de ce rôle peuvent faire quand une permission est sélectionnée.',\n                'more'      => 'Pour plus d\\'information, voir notre tutoriel sur Youtube',\n                'title'     => 'Détails de permission',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'           => 'Créer',\n                'articles'      => 'Articles',\n                'dashboard'     => 'Tableau de bord',\n                'delete'        => 'Supprimer',\n                'edit'          => 'Modifier',\n                'gallery'       => [\n                    'browse'    => 'Parcourir',\n                    'manage'    => 'Accès complet',\n                    'upload'    => 'Ajouter',\n                ],\n                'manage'        => 'Gérer',\n                'members'       => 'Membres',\n                'permission'    => 'Gérer les permissions',\n                'read'          => 'Voir',\n                'toggle'        => 'Changer pour tous',\n            ],\n            'helpers'   => [\n                'add'           => 'Permettre de créer des entrées de cette catégorie. Un membre aura automatiquement le droit de voir et modifier les entrées qu\\'il ou elle crée si le rôle n\\'a pas le droit de voir ou de modifier les entrées de cette catégorie.',\n                'articles'      => 'Permet d\\'ajouter, modifier et supprimer des articles même si le membre ne peut pas modifier l\\'entrée.',\n                'dashboard'     => 'Permettre de modifier les tableaux de bords et les widgets du tableau de bord.',\n                'delete'        => 'Permettre la suppression des entrées de cette catégorie.',\n                'edit'          => 'Permettre la modifications des entrées de cette catégorie.',\n                'gallery'       => [\n                    'browse'    => 'Permettre de parcourir la galerie, et définir l\\'image d\\'entrée depuis la galerie.',\n                    'manage'    => 'Permettre l\\'accès complet à la galerie, avec la possibilité de modifier et supprimer des images.',\n                    'upload'    => 'Permet de télécharger des images dans la galerie. L\\'utilisateur ne verra que les images qu\\'il/elle a téléchargées si elles ne sont pas combinées avec l\\'autorisation de parcourir.',\n                ],\n                'manage'        => 'Permettre la gestion de la campagne tel qu\\'un membre du rôle admin, sans permettre aux membres de supprimer la campagne.',\n                'members'       => 'Permettre l\\'invitation de nouveaux membre à la campagne.',\n                'not_public'    => 'La campagne n\\'est pas publique. Les autorisations pour le rôle public peuvent être définies, mais elles seront ignorées. Il faut modifier la campagne pour la rendre publique.',\n                'permission'    => 'Permettre la gestion des permissions d\\'une entrées de ce type qu\\'ils peuvent modifier.',\n                'read'          => 'Permettre la lecture des entrées de ce type qui ne sont pas privées.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Nom du rôle',\n        ],\n        'title'         => 'Rôles de la campagne :name',\n        'types'         => [\n            'owner'     => 'Propriétaire',\n            'public'    => 'Publique',\n            'standard'  => 'Standard',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Ajouter',\n                'remove'        => ':user du rôle :role.',\n                'remove_user'   => 'Retirer l\\'utilisateur du rôle',\n            ],\n            'create'    => [\n                'success'   => 'Utilisateur ajouté au rôle.',\n                'title'     => 'Ajouter un utilisateur au rôle :name',\n            ],\n            'destroy'   => [\n                'success'   => 'Utilisateur supprimé du rôle.',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'Pour éviter des abus, il n\\'est pas possible de supprimer des membres du rôle :admin de la campagne. En cas de problème, contactes-nous sur :discord ou a :email.',\n                'needs_more_roles'  => 'Tu dois d\\'ajouter à un autre rôle de la campagne avant de pouvoir de retirer du rôle :admin.',\n            ],\n            'fields'    => [\n                'name'  => 'Nom',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'Activer',\n        ],\n        'boosted'       => 'Cette fonctionnalité est actuellement en beta et seulement accessible pour les :boosted.',\n        'deprecated'    => [\n            'help'  => 'Cette catégorie est obsolète, ce qui signifie qu\\'elle n\\'est plus maintenue, et plus testée avec chaque mise-à-jour. Utilise cette catégorie en sachant qu\\'el sera éventuellement retirée de Kanka.',\n            'title' => 'Obsolète',\n        ],\n        'disabled'      => 'La catégorie :module est désactivée.',\n        'enabled'       => 'La catégorie :module est activée.',\n        'errors'        => [\n            'module-disabled'   => 'La catégorie demandée est actuellement désactivée dans la configuration. :fix.',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Créer des pouvoirs, compétences, sorts, etc. qui peuvent être assignés aux entrées.',\n            'assets'            => 'Télécharger des fichiers, liens, et définir des alias pour les entrées.',\n            'bookmarks'         => 'Créer des favoris vers des entrées ou listes filtrées qui apparaissent dans la navigation.',\n            'calendars'         => 'Un endroit pour définir les calendriers du monde.',\n            'characters'        => 'Créer et suivre les personnes qui peuplent le monde.',\n            'conversations'     => 'Conversations fictives entre des personnages ou entre membres de la campagne.',\n            'creatures'         => 'Pour les créatures, animaux, et monstre qui habitent le monde.',\n            'dice_rolls'        => 'Pour ceux qui utilisent Kanka pour une campagne JdR, un système pour des jets de dés.',\n            'entity_attributes' => 'Gérer les propriétés d\\'entrées de la campagne, tel que les points de vie ou leur vitesse.',\n            'events'            => 'Jours fériés, festivals, désastres, anniversaires, guerres.',\n            'families'          => 'Clans ou familles, leurs relations et leurs membres.',\n            'inventories'       => 'Gérer l\\'inventaires des entrées de la campagne.',\n            'items'             => 'Armes, véhicules, artéfacts, objets légendaires.',\n            'journals'          => 'Observations écrites par des personnages, ou préparation de session pour le maître de jeu.',\n            'locations'         => 'Planètes, plaines, continents, rivières, pays, temples, tavernes.',\n            'maps'              => 'Ajouter des cartes et y ajouter des couches et des marqueurs pointant vers des entrées de la campagne.',\n            'notes'             => 'Histoires, légendes, religions, magie, races.',\n            'organisations'     => 'Cultes, unités militaires, factions, guildes.',\n            'quests'            => 'Gestionnaire de quêtes avec personnages et lieux.',\n            'races'             => 'Si la campagne a plus d\\'une race, cette catégorie permet de facilement organiser celles-ci.',\n            'tags'              => 'Chaque entrée peut avoir plusieurs étiquettes. Les étiquettes peuvent appartenir à d\\'autres étiquettes.',\n            'timelines'         => 'Représenter l\\'histoire du monde de manière visuelle avec des chronologies.',\n            'whiteboards'       => 'Dessiner et écrire sur des tableaux blancs pour visualiser le monde et ses objectifs.',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'Les campagnes publiques sont visible sur la page de :public-campaigns. Remplir les champs suivants rend la campagne plus facilement trouvable.',\n        'language'  => 'La langue dans laquelle le contenu de la campagne est écrite.',\n        'system'    => 'Si la campagne est liée à un jeu de rôle, le système utilisé par la campagne.',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Modifier la campagne',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Succès',\n            'customisation'     => 'Personnalisation',\n            'danger'            => 'Danger',\n            'data'              => 'Données',\n            'default-images'    => 'Images par défaut',\n            'defaults'          => 'Défauts',\n            'deletion'          => 'Suppression',\n            'export'            => 'Export',\n            'import'            => 'Import',\n            'logs'              => 'Journaux',\n            'management'        => 'Gestion',\n            'members'           => 'Membres',\n            'plugins'           => 'Plugins',\n            'recovery'          => 'Récupération',\n            'roles'             => 'Rôles',\n            'sidebar'           => 'Navigation',\n            'stats'             => 'Statistiques',\n            'styles'            => 'Thèmes',\n            'webhooks'          => 'Webhooks',\n        ],\n        'title'     => 'Campagne :name',\n    ],\n    'status'                            => [\n        'free'      => 'Fonctionnalités Premium désactivées.',\n        'legacy'    => [\n            'title' => 'Fonctionnalités Boostées (anciennement)',\n        ],\n        'premium'   => 'Fonctionnalités Premium activées par :name.',\n        'title'     => 'Fonctionnalités Premium',\n    ],\n    'superboosted'                      => [],\n    'themes'                            => [\n        'none'  => 'Aucun (utilise la configuration de l\\'utilisateur)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Seulement visible aux admins de la campagne',\n            'visible'   => 'Visible aux membres',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Historique d\\'une entrée',\n            'member_list'       => 'Liste des membres de la campagne',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Contrôler qui peut voir l\\'historique des changements récents fait aux entrées de la campagne.',\n            'member-list'       => 'Contrôler qui peut voir les membres de la campagne.',\n            'theme'             => 'Afficher la campagne dans le thème choisi par l\\'utilisateur, ou forcer l\\'affichage dans un des thèmes suivants.',\n        ],\n        'members'           => [\n            'hidden'    => 'Seulement visible aux admins de la campagne',\n            'visible'   => 'Visible aux membres',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Privée',\n        'public'    => 'Publique',\n        'unlisted'  => 'Public (non répertorié)',\n    ],\n    'warning'                           => [],\n];\n"
  },
  {
    "path": "lang/fr/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'                   => [\n        'add_appearance'    => 'Ajouter une apparence',\n        'add_personality'   => 'Ajouter un trait de personnalité',\n    ],\n    'create'                    => [\n        'title' => 'Créer une nouvelle personne',\n    ],\n    'families'                  => [\n        'helper'    => 'Réorganise et contrôle quelles familles de :name sont visibles ou cachées aux non-admins.',\n        'reorder'   => [\n            'success'   => 'Les familles du personage ont été mises à jour avec succès.',\n        ],\n        'title2'    => 'Gérer les familles',\n    ],\n    'fields'                    => [\n        'age'                       => 'Age',\n        'is_appearance_pinned'      => 'Physique épinglé',\n        'is_dead'                   => 'Mort',\n        'is_personality_pinned'     => 'Personnalité épinglée',\n        'is_personality_visible'    => 'Personnalité visible',\n        'life'                      => 'Vie',\n        'physical'                  => 'Physique',\n        'pronouns'                  => 'Pronoms',\n        'sex'                       => 'Sexe',\n        'status'                    => 'Statut',\n        'title'                     => 'Titre',\n        'traits'                    => 'Traits',\n    ],\n    'helpers'                   => [\n        'age'   => 'Il est possible de lier cette entrée avec un calendrier de la campagne pour automatiquement calculer l\\'âge. :more.',\n    ],\n    'hints'                     => [\n        'is_appearance_pinned'      => 'Si sélectionné, le physique du personnage sera visible sur la page vue d\\'ensemble sous l\\'entrée.',\n        'is_dead'                   => 'Ce personnage est mort.',\n        'is_missing'                => 'Ce personnage est porté disparu.',\n        'is_personality_visible'    => 'Tout le monde peut voir les traits de personmalités de ce personnage.',\n        'personality_not_visible'   => 'Les traits de personnalités de ce personnage sont actuellement seulement visibles pour les admin de la campagne.',\n        'personality_visible'       => 'Les traits de personnalités sont visibles pour tous.',\n    ],\n    'labels'                    => [\n        'appearance'    => [\n            'entry' => 'Description de l\\'apparance',\n            'name'  => 'Nom de l\\'apparance',\n        ],\n        'personality'   => [\n            'entry' => 'Description du trait de personnalité',\n            'name'  => 'Nom du trait de personnalité',\n        ],\n    ],\n    'lists'                     => [\n        'empty' => 'Créé ton premier héros, méchant ou acolyte pour donner vie à ton univers.',\n    ],\n    'organisations'             => [\n        'create'    => [\n            'success'   => 'Personne ajoutée à l\\'organisation.',\n            'title'     => 'Nouvelle Organisation pour :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Organisation de personne supprimée.',\n        ],\n        'edit'      => [\n            'success'   => 'Organisation de personne modifiée.',\n            'title'     => 'Modifier l\\'Organisation pour :name',\n        ],\n        'fields'    => [\n            'role'  => 'Rôle',\n        ],\n    ],\n    'personality_visibility'    => [\n        'admin' => 'Membres du rôle :admin seulement',\n        'all'   => 'Tout le monde peut voir',\n    ],\n    'placeholders'              => [\n        'age'               => 'Âge',\n        'appearance_entry'  => 'Description',\n        'appearance_name'   => 'Cheveux, Yeux, Peau, Taille',\n        'name'              => 'Nom du personnage',\n        'personality_entry' => 'Détails',\n        'personality_name'  => 'Trait de personnalité: objectifs, maniérismes, peurs, liens',\n        'physical'          => 'Physique',\n        'pronouns'          => 'Il, Elle',\n        'sex'               => 'Sexe',\n        'title'             => 'Titre',\n        'traits'            => 'Traits',\n        'type'              => 'PNJ, Joueurs, Autre',\n    ],\n    'quests'                    => [\n        'helpers'   => [\n            'quest_giver'   => 'Quêtes dont le personnage est l\\'auteur.',\n            'quest_member'  => 'Quêtes dont le personnage est membre.',\n        ],\n    ],\n    'races'                     => [\n        'helper'    => 'Réorganise et contrôle quelles races de :name sont visibles ou cachées aux non-admins.',\n        'reorder'   => [\n            'success'   => 'Mise à jour réussie des races de personnage.',\n        ],\n        'title2'    => 'Gérer les races',\n    ],\n    'sections'                  => [\n        'appearance'    => 'Physique',\n        'personality'   => 'Personnalité',\n    ],\n    'status'                    => [\n        'alive'     => 'En vie',\n        'dead'      => 'Mort',\n        'missing'   => 'Disparu',\n    ],\n    'warnings'                  => [\n        'personality_hidden'    => 'Tu n\\'as pas le droit de modifier les traits de personnalité de ce personnage.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Aqua',\n    'black'         => 'Noir',\n    'blue'          => 'Bleu',\n    'brown'         => 'Brun',\n    'green'         => 'Vert',\n    'grey'          => 'Gris',\n    'light-blue'    => 'Bleu clair',\n    'maroon'        => 'Bordeaux',\n    'navy'          => 'Bleu foncé',\n    'none'          => 'Aucune',\n    'orange'        => 'Orange',\n    'pink'          => 'Rose',\n    'purple'        => 'Violet',\n    'red'           => 'Rouge',\n    'teal'          => 'Cyan',\n    'white'         => 'Blanc',\n    'yellow'        => 'Jaune',\n];\n"
  },
  {
    "path": "lang/fr/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'          => 'campagne boostée',\n    'premium-campaign'          => 'campagne Premium',\n    'premium-campaign-count'    => '{0} Aucune campagne Premium |{1} 1 campagne Premium |[2,*] :count campagnes Premium',\n    'premium-campaigns'         => 'campaigns Premium',\n    'premium-feature'           => 'Fonctionnalité Premium',\n    'superboosted-campaign'     => 'campagne superboostée',\n];\n"
  },
  {
    "path": "lang/fr/confirm/editing.php",
    "content": "<?php\n\nreturn [\n    'back'          => 'Retourner',\n    'description'   => 'Le système a détecté qu\\'un autre utilisateur est en train de modifier cette page! Veux-tu retourner à la page précédante, ou ignorer cette alerte, au risque de perdre des données?',\n    'ignore'        => 'Modifier quand-même',\n    'members'       => 'Membres qui sont en train de modifier cette page:',\n    'title'         => 'Attention',\n    'user'          => ':user depuis :since',\n];\n"
  },
  {
    "path": "lang/fr/confirm.php",
    "content": "<?php\n\nreturn [\n    'delete'    => [\n        'bulk'          => 'Es-tu sûr de vouloir supprimer les éléments sélectionnés?',\n        'helper'        => 'Es-tu sûr de vouloir supprimer :name?',\n        'recover'       => 'Cette action peut être annulée pendant :day jours sur la page :recover.',\n        'recoverable'   => 'Cette action peut être annulée pendant :day jours avec une :premium-campaign.',\n        'title'         => 'Supprimer l\\'élément',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/connections/web.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'           => 'Connecter un existant',\n        'back'          => 'Retour aux connections',\n        'download'      => 'Télécharger le PNG',\n        'download-pdf'  => 'Télécharger en PDF',\n        'download-png'  => 'Télécharger l\\'image (.png)',\n        'reset-layout'  => 'Réinitialiser le rendu',\n        'view'          => 'Voir le réseau',\n        'zoom-fit'      => 'Ajuster le zoom',\n    ],\n    'cta'       => [\n        'text'  => 'Voici un aperçu du réseau complet des connexions de la campagne. Les campagnes standard permettent afficher jusqu\\'à :amount nœuds. Les campagnes premium débloquent le réseau complet avec toutes les connexions et une navigation totale. Débloque les options premium pour visualiser l\\'intégralité de la structure de ton monde en un coup d\\'œil.',\n        'title' => 'Aperçu limité à :amount connexions',\n    ],\n    'title'     => 'Réseau des connexions',\n];\n"
  },
  {
    "path": "lang/fr/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouvelle Conversation',\n    ],\n    'fields'        => [\n        'is_closed'     => 'Fermée',\n        'messages'      => 'Messages',\n        'participants'  => 'Participants',\n    ],\n    'hints'         => [\n        'empty'         => 'Il n\\'y a aucun participant dans cette convertation.',\n        'participants'  => 'Ajoute des participants à la conversation.',\n    ],\n    'lists'         => [\n        'empty' => 'Enregistre les dialogues, les lettres ou les échanges entre les personnages et les factions.',\n    ],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Message supprimé.',\n        ],\n        'is_updated'    => 'Modifié',\n        'load_previous' => 'Messages précédents',\n        'placeholders'  => [\n            'message'   => 'Ton message',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Participant :entity ajouté à la conversation.',\n        ],\n        'destroy'   => [\n            'success'   => 'Participant :entity retiré de la conversation.',\n        ],\n        'helper'    => 'Ajouter et retirer des participants de :name.',\n        'modal'     => 'Participants',\n        'title'     => 'Participants de :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nom de la conversation',\n        'type'  => 'In Game, Préparation, Quête',\n    ],\n    'show'          => [\n        'is_closed' => 'La conversation est fermée.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Participants',\n    ],\n    'targets'       => [\n        'characters'    => 'Personnages',\n        'members'       => 'Membres',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/cookieconsent.php",
    "content": "<?php\n\nreturn [\n    'allow'     => 'Accepter les cookies',\n    'dismiss'   => 'Fermer',\n    'header'    => 'Consentement à l\\'utilisation de cookies',\n    'link'      => 'En savoir plus',\n    'message'   => 'Kanka utilise des cookies pour garantir une expérience optimale du site web.',\n    'policy'    => 'Politique en matière de cookies',\n    'reject'    => 'Rejeter',\n];\n"
  },
  {
    "path": "lang/fr/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouvelle créature',\n    ],\n    'fields'        => [\n        'is_dead'       => 'Morte',\n        'is_extinct'    => 'Éteinte',\n    ],\n    'hints'         => [\n        'is_dead'       => 'Cette créature est morte',\n        'is_extinct'    => 'Cette créature est éteinte',\n    ],\n    'lists'         => [\n        'empty' => 'Ajoute des bêtes, des monstres ou des créatures mythiques que tes héros pourraient affronter ou avec lesquels ils pourraient se lier d\\'amitié.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Herbivore, aquatique, mythique',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Actions',\n        'apply'             => 'Appliquer',\n        'back'              => 'Retour',\n        'change'            => 'Changer',\n        'close'             => 'Fermer',\n        'confirm'           => 'Confirmer',\n        'copy'              => 'Copier',\n        'copy_mention'      => 'Copier mention [ ]',\n        'copy_to_campaign'  => 'Copier vers une campagne',\n        'disable'           => 'Désactiver',\n        'enable'            => 'Activer',\n        'explore_view'      => 'Vue Imbriquée',\n        'export'            => 'Export',\n        'find_out_more'     => 'En savoir plus',\n        'go_to'             => 'Aller à :name',\n        'help'              => 'Aide',\n        'json-export'       => 'Export (JSON)',\n        'markdown-export'   => 'Export (Markdown)',\n        'move'              => 'Déplacer',\n        'new'               => 'Nouveau',\n        'new_child'         => 'Nouvel enfant',\n        'new_post'          => 'Nouvelle entrée',\n        'next'              => 'Suivant',\n        'open'              => 'Ouvrir',\n        'print'             => 'Imprimer',\n        'reorder'           => 'Réordonner',\n        'reset'             => 'Réinitialiser',\n        'save-changes'      => 'Sauvegarder les changements',\n        'share'             => 'Partager',\n        'transform'         => 'Transformer',\n    ],\n    'add'               => 'Ajouter',\n    'alerts'            => [\n        'copy_attribute'    => 'La mention de la propriété à été copiée au presse-papier.',\n        'copy_invite'       => 'Le lien d\\'invitation a été copié au presse-papier.',\n        'copy_mention'      => 'La mention avancée de cette entrée a été copiée au presse-papier.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Opération de masse',\n            'kits'          => 'Appliquer un kit de propriétés',\n            'permissions'   => 'Changer les permissions',\n        ],\n        'age'           => [\n            'helper'    => 'Il est possible de préfixer le numéro avec + ou - pour modifier l\\'âge dynamiquement.',\n        ],\n        'buttons'       => [\n            'label' => 'Pour la sélection',\n        ],\n        'edit'          => [\n            'locations' => 'Action pour les lieux',\n            'tagging'   => 'Action pour les étiquettes',\n            'tags'      => [\n                'add'       => 'Ajouter',\n                'remove'    => 'Retirer',\n            ],\n            'title'     => 'Modifications de plusieurs entrées',\n        ],\n        'errors'        => [\n            'admin'     => 'Seulement les membres administrateur de la campagne peuvent changer le statut des entrées.',\n            'general'   => 'Un problème est survenu lors de l\\'exécution. Prière de ressayer de nouveau ou nous contacter en cas de problème persistant. Message d\\'erreur: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Remplacer',\n            ],\n            'helpers'   => [\n                'override'  => 'Si sélectionné, les permissions des entrées sélectionnées seront remplacées par celles-ci. Si non-sélectionné, les permissions sélectionnées seront ajoutées à celles existantes.',\n            ],\n            'title'     => 'Changer les permissions pour plusieurs entrées',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Appliquer un kit de propriétés aux entrées',\n    ],\n    'cancel'            => 'Annuler',\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Copier vers une campagne',\n        'panel'         => 'Copier',\n        'title'         => 'Copier \\':name\\' vers une autre campagne',\n    ],\n    'create'            => 'Créer',\n    'datagrid'          => [\n        'empty' => 'Rien à afficher.',\n    ],\n    'delete_modal'      => [\n        'callout'       => 'Oyé!',\n        'confirm'       => 'Confirmer la suppression',\n        'permanent'     => 'Cette action est permanente.',\n        'recoverable'   => 'Les entrées supprimées peuvent être récupérées pendant :day jours avec une :boosted-campaign.',\n        'title'         => 'Confirmation de la suppression',\n    ],\n    'destroy_many'      => [],\n    'dynamic'           => [\n        'permission'    => 'Tu n\\'as pas les permissions nécessaires pour créer une entrée de la catégorie :module.',\n        'unknown'       => 'Entrée non valide de la catégorie :module.',\n    ],\n    'edit'              => 'Modifier',\n    'errors'            => [\n        'boosted_campaigns'     => 'Cette fonctionnalité n\\'est que disponible que pour les :boosted.',\n        'unavailable_feature'   => 'Fonctionnalité indisponible',\n    ],\n    'fields'            => [\n        'archived'          => 'Archivé',\n        'calendar_date'     => 'Date calendrier',\n        'category'          => 'Catégorie',\n        'child'             => 'Enfant',\n        'closed'            => 'Fermée',\n        'colour'            => 'Couleur',\n        'copy_abilities'    => 'Copier les pouvoirs',\n        'copy_inventory'    => 'Copier l\\'inventaire',\n        'copy_links'        => 'Copier les liens d\\'entrée',\n        'copy_permissions'  => 'Copier les permissions (cela ignore les permissions définies dans l\\'onglet de permissions)',\n        'copy_posts'        => 'Copier les articles (cela inclus les permissions des articles)',\n        'copy_reminders'    => 'Copier les rappels',\n        'created_by'        => 'Créé par',\n        'creator'           => 'Créateur/ice',\n        'date_range'        => 'Plage de dates',\n        'excerpt'           => 'Extrait',\n        'has_attributes'    => 'Possède des propriétés',\n        'has_entity_files'  => 'Possède des fichiers',\n        'has_entry'         => 'Possède une description',\n        'has_image'         => 'Possède une image',\n        'has_posts'         => 'Possède des articles',\n        'header_image'      => 'Image d\\'en-tête',\n        'image'             => 'Image',\n        'is_closed'         => 'La conversation est fermée et n\\'acceptera plus de nouveau messages.',\n        'is_private'        => 'Privé',\n        'is_private_v3'     => 'Seulement afficher cet élément aux membres du rôle :admin-role. Cette option remplace toutes autres permissions.',\n        'is_star'           => 'Epinglé',\n        'locations'         => ':first dans :second',\n        'name'              => 'Nom',\n        'names'             => 'Noms',\n        'parent'            => 'Parent',\n        'position'          => 'Position',\n        'replace_mentions'  => 'Remplace les mentions de propriétés avec ceux de la nouvelle entrée.',\n        'template'          => 'Modèle',\n        'tooltip'           => 'Infobulle',\n        'type'              => 'Type',\n        'updated_by'        => 'Mis à jour par',\n        'visibility'        => 'Visibilité',\n        'word-count'        => 'Nombre de mots: :number',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Nombre maximal de fichier (:max) atteint pour cette entrée.',\n            'max_size'  => 'La campagne a atteint la capacité maximale de stockage de fichiers.',\n            'no_files'  => 'Aucun fichier.',\n        ],\n        'hints'     => [\n            'limit'         => 'Chaque entrée peut avoir un nombre maximal de :max fichiers uploadés.',\n            'limitations'   => 'Formats pris en charge: :formats. Taille maximale: :size',\n        ],\n    ],\n    'filter'            => 'Filtre',\n    'filters'           => [\n        'all'               => 'Afficher tous les descendants',\n        'clear'             => 'Effacer les filtres',\n        'copy_helper'       => 'Utilises les filtres copiers dans ton presse-papier comme valeurs de filtre pour les widget de tableau de bord et liens rapides.',\n        'copy_to_clipboard' => 'Copier les filtres',\n        'direct'            => 'Afficher seulement les descendants directs',\n        'filtered'          => 'Affichant :count de :total :entity.',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Afficher tous les descendants (:count)',\n                'filtered'  => 'Afficher les descendants directs (:count)',\n            ],\n            'paginated' => 'Passer facilement des enfants directs à tous les niveaux de descendance. Les résultats sont paginés pour optimiser les performances.',\n        ],\n        'mobile'            => [\n            'clear' => 'Effacer',\n            'copy'  => 'Presse-papier',\n        ],\n        'options'           => [\n            'any'       => 'Quelconque',\n            'children'  => 'Correspond à ceci ou ses descendants',\n            'exclude'   => 'Ne correspond pas à',\n            'hide'      => 'Cacher',\n            'include'   => 'Correspond à',\n            'none'      => 'Aucun(e)',\n            'show'      => 'Afficher',\n        ],\n        'show'              => 'Afficher les filtres',\n        'sorting'           => [\n            'asc'       => ':field ascendant',\n            'desc'      => ':field descendant',\n            'helper'    => 'Contrôler l\\'ordre d\\'affichage des résultats.',\n        ],\n        'title'             => 'Filtres',\n    ],\n    'fix-this-issue'    => 'Réparer ce problème',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Ajouter une date de calendrier',\n        ],\n        'copy_options'  => 'Option de copie',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Copier les éléments liés suivant de la source à la nouvelle entrée.',\n        'linking'       => 'Lier d\\'autres entrées',\n        'parent'        => 'Sélectionne le parent duquel cette entrée sera l\\'enfant.',\n        'per-page'      => 'Résultats par page',\n    ],\n    'hidden'            => 'Caché',\n    'hints'             => [\n        'calendar_date'         => 'Une date de calendrier permet un triage plus facile dans les listes, et lie l\\'entrée avec un calendrier à travers en rappel.',\n        'image_dimension'       => 'Dimentions recommendées: :dimension pixels.',\n        'image_limitations'     => 'Formats supportés: :formats. Taille maximale: :size.',\n        'image_recommendation'  => 'Dimensions recommandées: :width par :height px.',\n        'is_star'               => 'Les éléments épinglés sont affichés sur le menu de l\\'entrée.',\n        'kit'                   => 'Le kit de propriétés sélectionné sera appliqué lors de la sauvegarde de l\\'entrée.',\n        'tooltip'               => 'Remplace l\\'infobulle automatiquement généré avec le texte ci-dessous.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Créé par :name :date',\n        'created_date_clean'    => 'Créé :date',\n        'unknown'               => 'Inconnu',\n        'updated_clean'         => 'Dernière modification par :name :date',\n        'updated_date_clean'    => 'Dernière modification :date',\n        'view'                  => 'Voir l\\'historique',\n    ],\n    'image'             => [\n        'error' => 'Impossible de récupérer l\\'image demandée. Il est possible que le site web ne nous permet pas de télécharger des images (cela arrive par example avec squarespace et DeviantArt), ou le lien n\\'est plus valide.',\n    ],\n    'is_private'        => 'Cet élément est privé et pas visible.',\n    'keyboard-shortcut' => 'Raccourci clavier :code',\n    'navigation'        => [\n        'cancel'            => 'annuler',\n        'or_cancel'         => 'ou :cancel',\n        'skip_to_content'   => 'Aller au contenu',\n    ],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Ajouter',\n                'deny'      => 'Refuser',\n                'ignore'    => 'Ignorer',\n                'remove'    => 'Retirer',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Permettre',\n                'deny'      => 'Refuser',\n                'inherit'   => 'Hériter',\n            ],\n            'delete'        => 'Supprimer',\n            'edit'          => 'Modifier',\n            'private'       => 'Rendre privé',\n            'toggle'        => 'Basculer',\n            'view'          => 'Voir',\n        ],\n        'fields'            => [\n            'member'    => 'Membre',\n            'role'      => 'Rôle',\n        ],\n        'helpers'           => [\n            'setup' => 'Utilise cette interface pour affiner la manière dont les rôles et les utilisateurs peuvent interagir avec cette entrée. :allow permettra à l\\'utilisateur ou au rôle d\\'effectuer cette action. :deny leur empêchera de prendre cette action. :inherit utilisera le rôle de l\\'utilisateur ou l\\'autorisation de leur rôle. Un utilisateur avec :allow peut effectuer l\\'action en question, même si son rôle est en :deny.',\n        ],\n        'success'           => 'Permissions enregistrées.',\n        'title'             => 'Permissions',\n        'too_many_members'  => 'Cette campagne a trop de members (>10) pour afficher cette interface correctement. Prière d\\'utiliser le boutton Permission sur la vue de l\\'entrée pour gérer les permissions.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Choix du calendrier',\n        'entry'         => 'Utilises @ suivi de 3 lettres pour mentionner d\\'autres entrées de la campagne.',\n        'fallback'      => 'Choix de le/la :module',\n        'gallery_image' => 'Choix d\\'une image depuis la galerie',\n        'image_url'     => 'Ou depuis une URL',\n        'journal'       => 'Choix d\\'un journal',\n        'location'      => 'Choix du lieu',\n        'multiple'      => 'Sélectionner un(e) ou plusieurs',\n        'name'          => 'Nom de l\\'entrée',\n        'organisation'  => 'Choix d\\'une organisation',\n        'parent'        => 'Choix d\\'un parent',\n        'search'        => 'Écrire pour chercher',\n        'tag'           => 'Choix d\\'une étiquette',\n        'template'      => 'Choix d\\'un modèle',\n        'timeline'      => 'Choix d\\'une chronologie',\n        'type'          => 'Type de l\\'entrée',\n        'user'          => 'Choix d\\'un utilisateur',\n    ],\n    'relations'         => [],\n    'remove'            => 'Supprimer',\n    'reorder'           => [\n        'empty' => 'Aucun élément à réorganiser.',\n    ],\n    'save'              => 'Enregistrer',\n    'save_and_close'    => 'Enregistrer et Fermer',\n    'save_and_copy'     => 'Enregistrer et Copier',\n    'save_and_new'      => 'Enregistrer et Nouveau',\n    'save_and_update'   => 'Enregistrer et continuer la modification',\n    'save_and_view'     => 'Enregistrer et Afficher',\n    'search'            => 'Rechercher',\n    'select'            => 'Sélection',\n    'tabs'              => [\n        'abilities'     => 'Pouvoirs',\n        'inventory'     => 'Inventaire',\n        'mentions'      => 'Mentions',\n        'overview'      => 'Aperçu',\n        'permissions'   => 'Permissions',\n        'premium'       => 'Premium',\n        'profile'       => 'Profil',\n        'reminders'     => 'Rappels',\n    ],\n    'timestamps'        => [\n        'edited'    => 'Modifié :ago',\n    ],\n    'titles'            => [\n        'editing'   => 'Modification de :name',\n        'new'       => 'Nouveau/elle :module',\n    ],\n    'tooltips'          => [],\n    'update'            => 'Modifier',\n    'users'             => [\n        'unknown'   => 'Inconnu',\n    ],\n    'view'              => 'Voir',\n    'visibilities'      => [\n        'admin'         => 'Admin',\n        'admin-self'    => 'Soi-même & Admin',\n        'all'           => 'Tous',\n        'members'       => 'Membres',\n        'self'          => 'Soi-même',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'customise' => 'Personnaliser le tableau de bord',\n        'follow'    => 'Suivre',\n        'join'      => 'Joindre',\n        'unfollow'  => 'Ne plus suivre',\n    ],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Modifier',\n            'new'   => 'Nouveau',\n        ],\n        'create'        => [\n            'helper'    => 'Crée un nouveau tableau de bord pour :name, et attribue les rôles qui peuvent le voir ou l\\'avoir comme tableau de bord par défaut.',\n            'success'   => 'Nouveau tableau de bord :name créé.',\n            'title'     => 'Nouveau tableau de bord',\n        ],\n        'custom'        => [\n            'text'  => 'Modification du tableau de bord :name de la campagne.',\n        ],\n        'default'       => [\n            'text'  => 'Modification du tableau de bord par défaut de la campagne.',\n            'title' => 'Tableau de bord par défaut',\n        ],\n        'delete'        => [\n            'success'   => 'Tableau de bord :name supprimé.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Copier les widgets',\n            'name'          => 'Nom du tableau de bord',\n            'visibility'    => 'Visibilité',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Dupliquer les widgets depuis :name vers ce nouveau tableau de bord.',\n        ],\n        'pitch'         => 'Crées plusieurs tableaux de bord avec des permissions pour chaque rôle de la campagne.',\n        'placeholders'  => [\n            'name'  => 'Nom du tableau de bord',\n        ],\n        'update'        => [\n            'success'   => 'Tableau de bord :name modifié.',\n            'title'     => 'Modifier le tableau de bord :name',\n        ],\n        'visibility'    => [\n            'default'   => 'Défaut',\n            'none'      => 'Aucune',\n            'visible'   => 'Visible',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Suivre une campagne la rend visibile dans le changeur de campagne (en haut à droite) après tes campagnes.',\n        'join'      => 'Cette campagne est ouverte à de nouveaux membres. Cliquer pour postuler pour rejoindre.',\n    ],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Ajouter un widget',\n            'back_to_dashboard' => 'Retour au tableau de bord',\n            'edit'              => 'Modifier un widget',\n            'new'               => 'Nouveau widget :type',\n        ],\n        'reorder'   => [\n            'helper'    => 'Fais-moi glisser pour me déplacer',\n            'success'   => 'Widgets réordonnés.',\n        ],\n        'title'     => 'Configuration du tableau de bord de campagne',\n        'tutorial'  => [\n            'blog'  => 'notre tutoriel',\n            'text'  => 'Besoin d\\'aide avec la mise en place du tableau de bord de la campagne? Tu peux lire :blog pour de l\\'aide et inspiration.',\n        ],\n    ],\n    'title'         => 'Tableau de bord',\n    'widgets'       => [\n        'advanced_options_boosted'  => 'Activer plus d\\'options comme afficher les épingles avec une :boosted_campaign.',\n        'calendar'                  => [\n            'actions'           => [\n                'next'      => 'Changer la date au prochain jour',\n                'previous'  => 'Changer la date au jour précédent',\n            ],\n            'previous_events'   => 'Précédents',\n            'upcoming_events'   => 'Prochainement',\n        ],\n        'campaign'                  => [\n            'helper'    => 'Ce widget affiche l\\'entête de campagne. Ce widget est tout le temps visible sur le tableau de bord de défaut.',\n        ],\n        'create'                    => [\n            'helper'            => 'Sélectionne un type de widget à ajouter au tableau de bord :name.',\n            'helper-default'    => 'Sélectionne un type de widget à ajouter au tableau de bord par défaut.',\n            'success'           => 'Widget ajouté au tableau de bord.',\n            'title'             => 'Nouveau widget',\n        ],\n        'delete'                    => [\n            'success'   => 'Widget retiré du tableau de bord.',\n        ],\n        'fields'                    => [\n            'class'             => 'Classe CSS',\n            'dashboard'         => 'Tableau de bord',\n            'name'              => 'Nom de widget personnalisé',\n            'optional-entity'   => 'Liens vers une entrée',\n            'order'             => 'Ordre d\\'affichage',\n            'size'              => 'Taille',\n            'width'             => 'Largeur',\n        ],\n        'helpers'                   => [\n            'class'     => 'Définition d\\'une classe css ajoutée au widget.',\n            'filters'   => 'Cliquer pour en savoir plus sur les options de filtrage.',\n        ],\n        'orders'                    => [\n            'name_asc'  => 'Nom ascendant',\n            'name_desc' => 'Nom descendant',\n            'oldest'    => 'Anciennement modifié',\n            'recent'    => 'Récemment modifié',\n        ],\n        'preview'                   => [\n            'displays'  => [\n                'expand'    => 'Entrée extensible',\n                'full'      => 'Entrée complète',\n            ],\n            'fields'    => [\n                'display'   => 'Affichage',\n            ],\n        ],\n        'random'                    => [\n            'helpers'   => [\n                'name'  => 'Le nom de l\\'entrée au hasard peut être référencé avec {name}',\n            ],\n            'type'      => [\n                'all'   => 'Tous',\n            ],\n        ],\n        'recent'                    => [\n            'advanced_filter'   => 'Filtre avancé',\n            'advanced_filters'  => [\n                'mentionless'   => 'Sans mention (entrées qui ne mentionnent pas d\\'autres entrées)',\n                'unmentioned'   => 'Non mentionné (entrées qui ne sont pas mentionnées par d\\'autres entrées)',\n            ],\n            'all-entities'      => 'Toutes les entrées',\n            'entity-header'     => 'Utiliser l\\'image d\\'en-tête de l\\'entrée',\n            'filters'           => 'Filtres',\n            'help'              => 'Afficher seulement la dernière entrée modifiée avec un aperçu de celle-ci.',\n            'helpers'           => [\n                'entity-header'     => 'Si l\\'entrée à une image d\\'en-tête (limité aux campagnes boostées), le widget utilisera cette image au lieu de l\\'image principale de l\\'entrée.',\n                'show_attributes'   => 'Afficher les propriétés épinglées de l\\'entrée.',\n                'show_members'      => 'Si l\\'entrée est une famille ou organisation, afficher les membres sous l\\'entrée.',\n                'show_relations'    => 'Afficher les relations épinglées de l\\'entrée.',\n            ],\n            'show_attributes'   => 'Afficher les propriétés épinglées',\n            'show_members'      => 'Afficher les membres',\n            'show_relations'    => 'Afficher les relations épinglées',\n            'singular'          => 'Singulier',\n            'tags'              => 'Filtrer la liste des entrées récemment modifiées sur une ou plusieurs étiquettes.',\n            'title'             => 'Récemment modifié',\n        ],\n        'tabs'                      => [\n            'advanced'  => 'Avancé',\n            'setup'     => 'Général',\n        ],\n        'unmentioned'               => [\n            'title' => 'Entrée non mentionnées',\n        ],\n        'update'                    => [\n            'success'   => 'Widget modifié.',\n        ],\n        'widths'                    => [\n            '0' => 'Automatique',\n            '12'=> 'Complet (100%)',\n            '3' => 'Minuscule (25%)',\n            '4' => 'Petit (33%)',\n            '6' => 'Moitié (50%)',\n            '8' => 'Grand (66%)',\n            '9' => 'Large (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/dashboards/onboarding.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'continue'  => 'Commence ton worldbuilding',\n        'skip'      => 'Passer pour l\\'instant',\n    ],\n    'families'      => [\n        'varren'    => [\n            'title' => 'Maison Varren',\n        ],\n    ],\n    'fields'        => [\n        'name'  => 'Nom du monde',\n    ],\n    'intro'         => 'Ton monde est prêt. Personalise-le avant de te lancer.',\n    'placeholders'  => [\n        'name'  => 'Tu peux changer ça à tout moment.',\n    ],\n    'quests'        => [\n        'crown' => [\n            'title' => 'Récupère la couronne brisée',\n        ],\n    ],\n    'roles'         => [\n        'co-writer'     => 'Co-auteur',\n        'contributor'   => 'Contributeur',\n    ],\n    'selection'     => [\n        'campaign'                  => 'Campagne de JDR',\n        'campaign-description'      => 'Gère ta campagne, tes persos et tes sessions pour ton groupe de JDR.',\n        'helper'                    => '(Ton choix personnalisera le contenu de démo et la mise en page de ton tableau de bord.)',\n        'intro'                     => 'Qu\\'est-ce que tu crées?',\n        'story'                     => 'Roman ou univers d\\'histoire',\n        'story-description'         => 'Développe les persos, les lieux et la chronologie de ton histoire pendant que tu écris.',\n        'title'                     => 'Type de monde',\n        'worldbuilding'             => 'Projet créatif',\n        'worldbuilding-description' => 'Construis et organise l\\'histoire, les lieux et les gens de ton univers.',\n    ],\n    'splash'        => 'Salut :name 👋 Ton monde est prêt.',\n    'success'       => 'Bienvenue ! On a personnalisé ton monde pour un démarrage rapide.',\n    'title'         => 'Approprie-toi ce monde',\n    'ttrpg'         => [\n        'tags'  => [\n            'npcs'  => 'PNJs',\n        ],\n    ],\n    'widgets'       => [\n        'active-quests' => 'Quêtes actives',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/dashboards/premium.php",
    "content": "<?php\n\nreturn [\n    'pitch' => 'Crée des tableaux de bord personnalisés pour ta campagne et les pages d\\'accueil de tes joueurs. Épingle des entrées, des cartes, des calendriers, des galeries et bien plus dans la disposition de ton choix.',\n    'title' => 'Tableaux de bord personnalisés',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/setup.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Ajouter un widget',\n    ],\n    'sections'  => [\n        'switch'    => 'Passer à...',\n    ],\n    'tooltips'  => [\n        'add'       => 'Clique pour ajouter un nouveau widget au tableau de bord.',\n        'switch'    => 'Clique pour passer à un autre tableau de bord.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/calendar.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche les prochains rappels.',\n    'name'          => 'Calendrier',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/campaign.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche un aperçu de la campagne.',\n    'name'          => 'Campagne',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/gallery.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche les images d\\'un dossier de galerie sous forme de carrousel.',\n    'fields'        => [\n        'folder'    => 'Dossier de galerie',\n        'show_name' => 'Noms des images',\n    ],\n    'helpers'       => [\n        'premium'   => 'Présente les illustrations de ton monde directement sur ton tableau de bord.',\n        'show_name' => 'Afficher le nom de l\\'image sous chaque image.',\n    ],\n    'name'          => 'Galerie',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/header.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche un texte d\\'entête',\n    'name'          => 'Entête',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/help.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche des liens vers l\\'aide et les ressources communautaires.',\n    'name'          => 'Aide & Communauté',\n    'title'         => 'Aide & Communauté',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/join.php",
    "content": "<?php\n\nreturn [\n    'apply'         => 'Postuler pour rejoindre!',\n    'description'   => 'Affiche le bouton de candidature ainsi que l\\'introduction de la campagne.',\n    'name'          => 'Joueurs recherchés',\n    'register'      => 'S\\'inscrire pour postuler',\n    'title'         => 'Joueurs recherchés',\n    'update'        => 'Mettre à jour ta candidature',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/onboarding.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche une liste de tâches pour bien commencer ton worldbuilding',\n    'name'          => 'Premiers pas',\n    'tasks'         => [\n        'campaign'  => [\n            'name'  => 'Ton premier monde est prêt',\n        ],\n        'character' => [\n            'helper'    => 'Ajoute quelqu\\'un qui exist dans ton monde.',\n            'name'      => 'Crée ton premier personnage.',\n        ],\n        'invite'    => [\n            'helper'    => 'Ajoute des gens avec rôles à ta campagne.',\n            'name'      => 'Invites un ami ou co-auteur',\n        ],\n        'location'  => [\n            'helper'    => 'Ancre ton monde avec un lieu.',\n            'name'      => 'Crée ton premier lieu.',\n        ],\n        'rename'    => [\n            'helper'    => 'Défini un vrai nom pour ta campagne.',\n            'name'      => 'Renomme ton monde',\n        ],\n        'widgets'   => [\n            'helper'    => 'Ajoute ou réorganise les widgets.',\n            'name'      => 'Personnalise ton tableau de bord.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/preview.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche une entrée spécifique.',\n    'name'          => 'Entrée sélectionnée',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/random.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche une entrée aléatoire de la campagne.',\n    'name'          => 'Entrée aléatoire',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/recent.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche une liste des entrées modifiées récemment.',\n    'name'          => 'Entrées modifiées récemment',\n];\n"
  },
  {
    "path": "lang/fr/dashboards/widgets/welcome.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Affiche un message de bienvenue avec des conseils et astuces sur le tableau de bord.',\n    'endings'       => [],\n    'focus'         => [\n        'text'  => 'Ici, c\\'est moi!',\n        'title' => 'Hey',\n    ],\n    'intros'        => [\n        '1' => 'Dis bonjour à ton nouveau chez toi pour la création de monde, :user! Nous avons mis en place ta première campagne et inclus deux exemples de :characters et :locations Ceux-ci sont également visibles ici sur le tableau de bord.',\n        '2' => 'Pour commencer, cliques sur le gros bouton :new-entity (ou appuies sur :letter sur ton clavier), puis cliques sur :characters pour créer ton premier personnage. C\\'est aussi simple que cela! Tu peux retrouver tous tes personnages, lieux et autres :entities dans la barre latérale située à gauche de la page.',\n        '3' => 'Voici nos 5 meilleures astuces pour utiliser Kanka',\n    ],\n    'name'          => 'Bienvenue',\n    'title'         => 'Bienvenue à :kanka! 🎉',\n    'tricks'        => [\n        '1'         => 'Lors de la rédaction de description, n\\'écris pas les noms des éléments. Au lieu de cela, tappes :code et trois lettres pour créer des :mention vers d\\'autres entrées. Ces mentions seront automatiquement mises à jour lorsque tu changeras leurs noms.',\n        '2'         => 'Pour modifier le nom, le thème ou l\\'image de la campagne, cliques sur :world dans la barre latérale, puis sur le bouton :edit.',\n        '3'         => 'Écris les informations secrètes sur les entrées avec les :posts au lieu de la description principale.',\n        '4'         => 'Invites tes amis en cliquant sur :world et :members. Là-bas, tu peux créer des liens d\\'invitation.',\n        '5'         => 'Tu peux supprimer ce message de bienvenue et afficher d\\'autres informations sur cette page (appelée tableau de bord). Fais défiler la page vers le bas et cliques sur le bouton :button.',\n        'mention'   => 'mentions',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/datagrids.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back_to'   => 'Retour à :name',\n        'filters'   => 'Filtres',\n    ],\n    'bulks'         => [\n        'selected'  => 'sélectionné(s)',\n    ],\n    'columns'       => [\n        'reset' => 'Réinitialiser par défaut',\n        'title' => 'Contrôler les colonnes visibles',\n    ],\n    'display'       => [\n        'per_page'  => 'Résultats par page',\n        'sort_by'   => 'Trier par',\n        'title'     => 'Affichage',\n    ],\n    'filters'       => [\n        'clear' => 'Effacer les filtres',\n    ],\n    'modes'         => [\n        'flatten'   => 'Changer à la vue applatie',\n        'grid'      => 'Changer à la vue de grille',\n        'nested'    => 'Changer à la vue imbriquée',\n        'table'     => 'Changer à la vue de table',\n    ],\n    'subscription'  => [\n        'cta'       => 'Découvrir les abonnements',\n        'helper'    => 'Visualise jusqu\\'à :max entrées en un coup d\\'oeil avec un abonnement Kanka, plus plein d\\'autres avantages pour booster ta création de monde.',\n        'title'     => 'Abonnement requis',\n    ],\n    'tooltips'      => [\n        'nested'    => 'Cette entrée possède des enfants. Cliques sur l\\'image pour les afficher.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'jour',\n    'days'          => 'jours',\n    'elapsed_ago'   => 'il y à :duration',\n    'hour'          => 'heure',\n    'hours'         => 'heures',\n    'just_now'      => 'à l\\'instant',\n    'minute'        => 'minute',\n    'minutes'       => 'minutes',\n    'month'         => 'mois',\n    'months'        => 'mois',\n    'second'        => 'seconde',\n    'seconds'       => 'secondes',\n    'week'          => 'semaine',\n    'weeks'         => 'semaines',\n    'year'          => 'année',\n    'years'         => 'années',\n];\n"
  },
  {
    "path": "lang/fr/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Titre de la page',\n];\n"
  },
  {
    "path": "lang/fr/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Résultats des jet de dés.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouveau jet de dés',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Jet de dés retiré.',\n    ],\n    'fields'        => [\n        'created_at'    => 'Jeté à',\n        'parameters'    => 'Paramètres',\n        'results'       => 'Résultats',\n        'rolls'         => 'Jets',\n    ],\n    'hints'         => [\n        'parameters'    => 'Quelles sont mes options de dés?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Résultats',\n        ],\n    ],\n    'lists'         => [\n        'empty' => 'Crée et enregistre des jets pour votre campagne afin de suivre les résultats directement dans Kanka.',\n    ],\n    'placeholders'  => [\n        'name'          => 'Nom du jet de dés',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Jet',\n        ],\n        'error'     => 'Problème lors du jet de dés. Les paramêtres ne sont pas conformes.',\n        'fields'    => [\n            'creator'   => 'Créateur',\n            'date'      => 'Date',\n            'result'    => 'Résultat',\n        ],\n        'hint'      => 'Tous les jets de ce modèle.',\n        'success'   => 'Dés jetés.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Résultats',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/emails/activity/email.php",
    "content": "<?php\n\nreturn [\n    'first' => 'L\\'e-mail de ton compte Kanka a été changé à :email.',\n    'title' => 'E-mail changé',\n];\n"
  },
  {
    "path": "lang/fr/emails/activity/password.php",
    "content": "<?php\n\nreturn [\n    'first' => 'Le mot de passe de ton compte sur Kanka a été modifié.',\n    'help'  => 'Si ce n\\'était pas toi, contactes nous au :email.',\n    'title' => 'Mot de passe modifié',\n];\n"
  },
  {
    "path": "lang/fr/emails/purge/first.php",
    "content": "<?php\n\nreturn [\n    'assure'            => 'Si tu utilises régulièrement ton compte, ne t\\'inquiète pas, nous ne supprimons que les comptes et les campagnes qui ne sont pas utilisés activement.',\n    'help'              => 'Besoin d\\'aide pour utiliser Kanka? Rejoins notre :discord ou contactes-nous à :email',\n    'intro_account'     => 'Nous t\\'informons que ton compte sera supprimé dans :amount jours, car tu ne l\\'as pas utilisé au cours des derniers :duration mois.',\n    'intro_campaigns'   => 'Nous t\\'informons que ton compte et les campagnes suivantes seront supprimés dans :amount jours, car tu ne l\\'as pas utilisé au cours des derniers :duration mois.',\n    'keep'              => 'Si tu souhaites que ton compte reste actif, prière de te connecter dans les :amount prochains jours.',\n    'title'             => 'Ton compte Kanka sera supprimé dans :amount jours',\n    'warning'           => [\n        'account'   => 'Une fois cette opération effectuée, toutes les données associées à ton compte, sous :email, seront définitivement supprimées.',\n        'campaigns' => 'Une fois cette opération effectuée, toutes les données associées à ton compte, sous email :email, ainsi que les campagnes suivantes seront définitivement supprimées.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/emails/purge/second.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'Ceci est un dernier rappel que le compte Kanka sous l\\'email :email sera supprimé dans :amount jours puisque tu ne l\\'as pas utilisé dans les derniers :duration mois.',\n    'title' => 'Dernier rappel: ton compte Kanka sera supprimé dans :amount jours',\n];\n"
  },
  {
    "path": "lang/fr/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'mettre à jours tes détails de carte',\n    'primary'   => 'Ceci est un avertissement automatique que ta :brand **** :last expire bientôt.',\n    'title'     => 'Carte expirante pour ton abonnement',\n    'valid'     => 'Si tu souhaites conserver ton abonnement, prière de :action.',\n];\n"
  },
  {
    "path": "lang/fr/emails/subscriptions/paypal-expiring.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Cordialement,',\n    'cta'       => 'Renouveler ton abonnement',\n    'dear'      => 'Bonjour :name,',\n    'intro'     => 'Ton abonnement Kanka via PayPal expire le **:date**. Après cette date, ton compte reviendra au niveau gratuit.',\n    'loss'      => [\n        'ads'       => 'Expérience sans publicité',\n        'campaign'  => 'Campagne premium **:campaign**|Campagnes premium **:campaign** et :count autre',\n        'discord'   => 'Ton rôle Discord **:role**',\n        'players'   => '{1}:count joueur perdra l\\'accès|[2,*]:count joueurs perdront l\\'accès',\n        'plugins'   => '{1}:count plugin|[2,*]:count plugins',\n        'title'     => 'Voici ce que tu perdras:',\n    ],\n    'title'     => 'Ton abonnement Kanka expire bientôt',\n];\n"
  },
  {
    "path": "lang/fr/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'Si tu souhaites annuler ton abonnement avant son renouvèlement, connectes-toi sur ton compte Kanka et :link.',\n    'closing'   => 'Cordialement,',\n    'dear'      => 'Cher/Chère :name',\n    'link'      => 'annules ton abonnement',\n    'notice'    => 'Informations importantes sur le renouvellement:',\n    'primary'   => 'Ce message est un rappel automatique que nous allons bientôt débiter ta carte :brand **** :last le :date, pour ton abonnement Kanka.',\n    'title'     => 'Paiement annuel pour ton abonnement Kanka',\n    'valid'     => 'Assures toi que ta carte de crédit sera valide à la date du paiement',\n];\n"
  },
  {
    "path": "lang/fr/emails/subscriptions/validation.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Vérification d\\'email de ton compte Kanka.',\n];\n"
  },
  {
    "path": "lang/fr/emails/validation.php",
    "content": "<?php\n\nreturn [\n    'error'     => 'Problème avec la validation, prière de ressayer.',\n    'modal'     => 'Un email validé est requis pour les abonnements. Vérifies ta boîte de réception pour un lien permettant de confirmer ton courriel avant de poursuivre le processus d\\'abonnement.',\n    'success'   => 'Validation réussie.',\n];\n"
  },
  {
    "path": "lang/fr/emails/welcome/2024.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Happy worldbuilding et merci de participer à ce voyage avec nous,',\n    'header'    => 'Bienvenue dans le meilleur endroit pour créer ton monde, :name!',\n    'lead_1'    => 'Kanka est le fruit du travail de joueurs de RPG passionnés qui souhaitaient une approche simple et collaborative de la construction de mondes, sans compromis sur les fonctionnalités.',\n    'lead_2'    => 'Kanka en est le résultat. Nous sommes là pour t\\'aider à organiser ta campagne et te permettre de te concentrer sur la réalisation de ton monde.',\n    'ps'        => 'PS : Si tu veux nous contacter, tu peux nous trouver sur :discord, ou à :email.',\n    'what_1'    => 'Pour t\\'aider à démarrer, nous t\\'avons créé ta première campagne et inclus deux exemples de personnages et de lieux. Tu peux :start si tu préfères.',\n    'what_2'    => 'Tu peux également consulter ces ressources:',\n    'what_3'    => 'Notre :kb si tu as des questions de base sur les fonctionnalités de Kanka et sur te compte.',\n    'what_4'    => 'La :doc couvre tous les aspects de manière plus approfondie.',\n    'what_5'    => 'Enfin, les \"campaigns présentent ce que d\\'autres ont fait avec Kanka.',\n    'what_new'  => 'en commencer une nouvelle',\n    'what_now'  => 'Et maintenant?',\n    'why'       => 'Tu as reçu cet e-mail parce que tu t\\'es inscrit sur notre site web.',\n];\n"
  },
  {
    "path": "lang/fr/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    '2023'              => [\n        'basics'    => [\n            'text_1'    => 'Avec un outil aussi vaste que Kanka, il peut être difficile de savoir par où commencer ou ce qu\\'il faut faire. Notre :kb couvre les questions les plus élémentaires que tu peux te poser. Pour plus d\\'aide, tu peux te rendre sur notre :doc.',\n            'title'     => 'L\\'essentiel',\n        ],\n        'chat'      => [\n            'text_1'    => 'Nous adorons avoir des nouvelles de nos utilisateurs. Nous sommes très actifs sur :discord, où tu trouveras un grand nombre de nos utilisateurs dévoués, une équipe d\\'onboarding, ainsi que les fondateurs de Kanka, qui pourront répondre à toutes tes questions. Tu peux également nous envoyer un courriel à :email.',\n            'title'     => 'Envie de papoter?',\n        ],\n        'intro'     => [\n            'header'    => 'Bienvenue dans la meilleure communauté de worldbuilding, :name!',\n            'link'      => 'Vers ton monde!',\n            'text_1'    => 'Dis bonjour à ton nouveau chez toi pour le worldbuilding, :name! La communauté est dans notre ADN, et nous sommes ravis que tu nous rejoignes. Kanka est le fruit du travail de joueurs de RPG passionnés qui croient en une manière simplifiée et communautaire d\\'aborder le worldbuilding, sans faire de compromis sur les fonctionnalités.',\n            'text_2'    => 'Nous avons mis en place ta première campagne et inclus deux exemples de personnages et de lieux pour t\\'aider à démarrer.',\n        ],\n        'preview'   => 'Fais partie de la meilleure communauté de worldbuilding, :name!',\n    ],\n    'header'            => 'Bienvenue sur Kanka :name!',\n    'header_sub'        => 'Félicitations, tu as fait le premier pas dans la création de ton monde sur :kanka!',\n    'pricing'           => 'tarification',\n    'section_1'         => 'Que faire maintenant?',\n    'section_11'        => 'Crée ton monde,',\n    'section_2'         => 'La ressource la plus importante est :discord, où tu trouveras de nombreux utilisateurs dévoués, une équipe d\\'accueil, ainsi que le fondateur de Kanka, qui pourront répondre à toutes tes questions.',\n    'section_4'         => 'Notre :youtube propose des vidéos couvrant les bases de Kanka. Même si tous les sujets ne sont pas encore couverts, on ajoute régulièrement des nouvelles vidéos.',\n    'section_4_v2'      => 'Notre :knowledge-base couvre les questions les plus fréquentes. Pour une aide pour complète, notre :documentation couvre beaucoup plus de sujets en détails.',\n    'section_6'         => 'Nous contacter',\n    'section_7'         => 'Si tu n\\'as pas trouvé de réponse à tes questions, ou si tu souhaites simplement nous contacter, tu peux nous trouver sur :facebook, ou tu peux nous envoyer un courriel à :email. On est une petite équipe de 2 amis, mais on répond à chaque e-mail qu\\'on reçoit, donc n\\'hésite pas!',\n    'section_8'         => 'Une dernière chose',\n    'section_9_v2'      => 'On a fait en sorte que toutes les fonctionnalités de base de Kanka soient gratuites, et elles le seront toujours. Cependant, si tu souhaites nous soutenir dans ce projet, tu peux t\\'abonner à Kanka pour débloquer plus de fonctionnalités. Plus d\\'information sur notre page de :pricing.',\n    'social_account'    => 'Si tu as des problèmes pour te connecter à ton compte, tu utilises un login :provider. La méthode d\\'authentification peut être changée dans les paramètres du compte.',\n    'title'             => 'Commencer avec Kanka!',\n];\n"
  },
  {
    "path": "lang/fr/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Ajouter',\n        'reset' => 'Réinitialiser les charges',\n        'sync'  => 'Ajouter depuis les races',\n    ],\n    'charges'   => [\n        'left'  => ':amount restant',\n    ],\n    'create'    => [\n        'helper'            => 'Ajouter un ou plusieurs pouvoirs à :name.',\n        'success'           => 'Pouvoir :ability ajouté à :entity.',\n        'success_multiple'  => 'Les pouvoirs :abilities ont été ajouté à :entity.',\n        'title'             => 'Ajouter des pouvoirs',\n    ],\n    'fields'    => [\n        'note'      => 'Note',\n        'position'  => 'Position',\n    ],\n    'groups'    => [\n        'unorganised'   => 'Inorganisé',\n    ],\n    'helpers'   => [\n        'note'      => 'Ce champ peut référencer des entrées en utilisant les mentions avancées (ex :code) et les propriétés d\\'une entrée (ex :attr).',\n        'recharge'  => 'Réinitialiser toutes les charges des pouvoirs qui ont été utilisées.',\n        'sync'      => 'Importer les pouvoirs définis sur les races du personnage.',\n    ],\n    'import'    => [\n        'errors'            => [\n            'no_race'       => 'Ce personnage n\\'as pas de race.',\n            'not_character' => 'Cette entrée n\\'est pas un personnage.',\n        ],\n        'helper'            => 'Attacher des pouvoir des races auxquelles :name appartient:',\n        'no_abilities'      => 'Actuellement, il n\\'existe aucune possibilité d\\'importer des pouvoirs provenant des races auxquelles :name appartient.',\n        'race_abilities'    => '{1} :name (:count pouvoir)|[2,*] :name (:count pouvoirs)',\n        'success'           => '{1} :count pouvoir ajouté.|[2,*] :count pouvoirs ajoutés.',\n    ],\n    'recharge'  => [\n        'success'   => 'Toutes les charges ont été réinitialisées.',\n    ],\n    'reorder'   => [\n        'parentless'    => 'Aucun parent',\n        'success'       => 'Pouvoirs réordonnés.',\n    ],\n    'show'      => [\n        'helper'    => 'Attache des pouvoirs à cette entrée. Il est toujours possible de modifier ou de supprimer un pouvoir. Les pouvoirs qui appartiennent au même parent sont groupés ensemble et agissent comme filtres.',\n        'reorder'   => 'Réordonner',\n        'title'     => 'Pouvoirs de:name',\n    ],\n    'types'     => [\n        'unorganised'   => 'Les pouvoirs sont regroupés en fonction de leur parent, ou se retrouvent ici.',\n    ],\n    'update'    => [\n        'success'   => 'Pouvoir d\\'entrée :ability mis à jour.',\n        'title'     => 'Pouvoirs de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'archetype'         => [\n        'set'       => 'Définir comme archétype',\n        'toggle'    => 'Statut de modèle mis à jour.',\n        'unset'     => 'Retirer comme modèle',\n    ],\n    'archive'           => [\n        'success'   => ':name a été archivé.',\n        'title'     => 'Archiver',\n    ],\n    'convert'           => 'Convertir la catégorie',\n    'copy-campaign'     => 'Copier vers la campagne',\n    'json-export'       => 'Export JSON',\n    'markdown-export'   => 'Export Markdown',\n    'templates'         => [],\n    'tooltips'          => [\n        'edit'  => 'Modifier cette entrée',\n    ],\n    'transfer'          => 'Transférer de campagne',\n    'unarchive'         => [\n        'success'   => ':name n\\'est plus archivé.',\n        'title'     => 'Désarchiver',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Ajouter un alias',\n    ],\n    'create'        => [\n        'helper'    => 'Créés un alias pour :name, ce qui permettra de le retrouver dans la recherche globale et dans les mentions :code.',\n        'success'   => 'Alias :name ajouté à :entity.',\n        'title'     => 'Ajouter un alias à :name.',\n    ],\n    'destroy'       => [\n        'success'   => 'L\\'alias :name a été retiré.',\n    ],\n    'fields'        => [\n        'name'  => 'Nom',\n    ],\n    'helpers'       => [\n        'primary'   => 'Définir un ou plusieurs alias sur l\\'entrée la rentra trouvable avec la recherche global (tout en haut) et à travers les mentions.',\n    ],\n    'limit'         => 'Cette campagne a atteint sa limite d\\'alias. Pour obtenir un nombre illimité d\\'alias, débloques les fonctionnalités premium.',\n    'pitch'         => 'Créés des alias vers cette entrée pour facilement la trouver dans la recherche et les mentions.',\n    'placeholders'  => [\n        'name'  => 'Nouvel alias',\n    ],\n    'unboosted'     => [],\n    'update'        => [\n        'success'   => 'Alias :name modifié pour :entity.',\n        'title'     => 'Modifier l\\'alias pour :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'alias' => 'Alias ou identrée secrète',\n        'file'  => 'Ajouter un fichier',\n        'link'  => 'Liens extèrne',\n    ],\n    'copy_alias'    => [\n        'success'   => 'Mention d\\'alias copié au presse-papier.',\n        'title'     => 'Clique pour copier la mention de l\\'alias dans le presse-papiers.',\n    ],\n    'show'          => [\n        'title' => 'Ressources de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'apply_kit'     => 'Appliquer un kit de propriétés',\n        'load'          => 'Charger',\n        'manage'        => 'Gérer',\n        'more'          => 'Plus d\\'options',\n        'remove_all'    => 'Tout supprimer',\n        'save_and_edit' => 'Appliquer et modifier',\n        'save_and_story'=> 'Appliquer et voir',\n        'show_hidden'   => 'Afficher les propriétés cachées',\n        'toggle_privacy'=> 'Privé/Public',\n    ],\n    'errors'        => [\n        'api'                   => 'Données invalides',\n        'loop'                  => 'Il y a une boucle sur la calculation de cette propriété!',\n        'no_attribute_selected' => 'Sélectionner d\\'abord une ou plusieurs propriétés.',\n        'too_many_v2'           => 'Le nombre maximum de champs est atteint (:count/:max). Supprimer d\\'abord certaines propriétés avant de pouvoir en ajouter d\\'autres.',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Modèles Communautaires',\n        'is_private'            => 'Propriétés privées',\n        'is_star'               => 'Épinglé',\n        'kit'                   => 'Kit',\n        'preferences'           => 'Préférences',\n        'property'              => 'Propriété',\n        'value'                 => 'Valeur',\n    ],\n    'filters'       => [\n        'name'  => 'Nom de la propriété',\n        'value' => 'Valeur de la propriété',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Es-tu certain de vouloir supprimer toutes les propriétés de cette entrée?',\n        'is_private'    => 'Seulement permettre aux membres du rôle :admin-role de voir les propriétés de cette entrée.',\n        'setup'         => 'Tu peux représenter des valeurs comme les points de vie ou l\\'intelligence d\\'une entrée avec les propriétés. Ajoutes des propriétés manuellement en cliquant le bouton :manage, ou applique ceux d\\'un kit de propriétés.',\n    ],\n    'index'         => [\n        'success'   => 'Propriétés modifiées pour :entity.',\n        'title'     => 'Propriétés pour :name',\n    ],\n    'labels'        => [\n        'checkbox'  => 'Nom de la case à cocher',\n        'name'      => 'Nom de la propriété',\n        'section'   => 'Nom de la section',\n        'value'     => 'Valeur de la propriété',\n    ],\n    'live'          => [\n        'success'   => 'Propriété :attribute modifiée.',\n        'title'     => 'Modification de :attribute',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Nombre de quêtes, niveau de difficulté, initiative, population',\n        'block'     => 'Nom du bloc',\n        'checkbox'  => 'Nom de la case à cocher',\n        'icon'      => [\n            'class' => 'Classes FontAwesome ou RPG Awesome: fas fa-users',\n            'name'  => 'Nom de l\\'icône',\n        ],\n        'kit'       => 'Sélectionner un kit',\n        'number'    => 'Nom du chiffre',\n        'random'    => [\n            'name'  => 'Nom de la propriété',\n            'value' => '1-100 ou une liste de valeurs séparées par une virgule',\n        ],\n        'section'   => 'Nom de la section',\n        'value'     => 'Valeur de la propriété',\n    ],\n    'ranges'        => [\n        'text'  => 'Options disponibles: :options',\n    ],\n    'sections'      => [\n        'unorganised'   => 'Non organisé',\n    ],\n    'show'          => [\n        'hidden'    => 'Propriétés cachées',\n        'title'     => 'Propriétés de :name',\n    ],\n    'template'      => [\n        'load'      => [\n            'success'   => 'Modèle chargé',\n            'title'     => 'Chargement à partir d\\'un modèle',\n        ],\n        'pitch'     => 'Charge les propriétés depuis un kit de propriétés ou depuis les plugins installés via :plugin.',\n        'success'   => 'Kit de propriétés :name appliqué pour :entity.',\n        'title'     => 'Appliquer un kit de propriétés pour :name',\n    ],\n    'title'         => 'Propriétés',\n    'toasts'        => [\n        'bulk_deleted'  => 'Propriétés supprimés',\n        'bulk_privacy'  => 'Propriétés de privacité modifié',\n        'lock'          => 'Propriété verouillé',\n        'pin'           => 'Propriété épinglé',\n        'unlock'        => 'Propriété déverouillé',\n        'unpin'         => 'Propriété non-épinglé',\n    ],\n    'tutorials'     => [],\n    'types'         => [\n        'attribute' => 'Texte',\n        'block'     => 'Bloc',\n        'checkbox'  => 'Case à cocher',\n        'icon'      => 'Icône',\n        'kits'      => 'Kits',\n        'number'    => 'Nombre',\n        'random'    => 'Aléatoire',\n        'section'   => 'Section',\n        'text'      => 'Texte multiligne',\n    ],\n    'update'        => [\n        'success'   => 'Les propriétés de :entity ont été modifiées.',\n    ],\n    'visibility'    => [\n        'entry'     => 'Propriété affiché sur le menu d\\'entrée.',\n        'private'   => 'Propriété seulement visible aux membres du rôle \"Admin\".',\n        'public'    => 'Propriété visible par tous les membres.',\n        'tab'       => 'Propriété visible sous l\\'onglet Propriétés.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/children.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Enfants',\n];\n"
  },
  {
    "path": "lang/fr/entities/events.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Créer un rappel pour lier :name à un calendrier.',\n    ],\n    'fields'    => [\n        'type'  => 'Type d\\'événement',\n    ],\n    'helpers'   => [\n        'characters'    => 'Définir le type comme la date de naissance ou de mort pour ce personnage calculera automatiquement leur âge. :more.',\n        'founding'      => 'Définir le type comme :type calculera automatiquement l\\'âge de fondation de l\\'entrée.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Ajouter un rappel',\n        ],\n        'title'     => 'Rappels pour :name',\n    ],\n    'types'     => [\n        'birth'     => 'Naissance',\n        'birthday'  => 'Anniversaire',\n        'death'     => 'Décès',\n        'founded'   => 'Fondé',\n        'primary'   => 'Principal',\n    ],\n    'years-ago' => '{1} il y a :count année|[2,*] il y a :count année',\n];\n"
  },
  {
    "path": "lang/fr/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [\n        'max'       => [\n            'helper'    => 'Tu ne peux pas joindre plus de fichiers à moins d\\'en supprimer un existant.',\n            'limit'     => 'Cette entrée a atteint le nombre maximum de fichiers',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Tu as atteint la limite de :limit fichiers pour cette entrée.',\n            'premium'   => 'Passer à une campagne premium pour joindre un nombre illimité de fichiers et bénéficier d\\'une flexibilité créative encore plus grande.',\n            'upgrade'   => 'Passe à une campagne premium pour pouvoir joindre jusqu\\'à :limit fichiers et débloquer encore plus de flexibilité créative.',\n        ],\n    ],\n    'create'            => [\n        'helper'            => 'Ajouter un fichier à :name. Le fichier sera pris en compte dans la limite de stockage de la galerie.',\n        'success_plural'    => '{1} Fichier :file ajouté.|[2,*] :count fichiers ajoutés.',\n        'title'             => 'Nouveau fichier',\n    ],\n    'destroy'           => [\n        'success'   => 'Fichier :file retiré.',\n    ],\n    'fields'            => [\n        'file'  => 'Fichier',\n        'files' => 'Fichiers',\n        'name'  => 'Nom de fichier',\n    ],\n    'max'               => [\n        'title' => 'Limite atteinte',\n    ],\n    'update'            => [\n        'success'   => 'Fichier :name modifié.',\n        'title'     => 'Modifier le fichier',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'               => [\n        'change_focus'      => 'Changer le point de focus',\n        'change_visibility' => 'Changer la visibilité',\n        'copy_url'          => 'Copier l\\'URL de l\\'image',\n        'copy_url_success'  => 'URL de l\\'image copiée dans ton presse-papiers.',\n        'replace_image'     => 'Remplacer l\\'image',\n        'save-replace'      => 'Remplacer l\\'image',\n        'save_focus'        => 'Enregistrer le focus',\n        'view'              => 'Voir l\\'image',\n    ],\n    'call-to-action'        => 'Cliquer sur l\\'image de l\\'entrée pour définir le point de focus de l\\'image. Ceci remplace l\\'estimation automatique.',\n    'focus'                 => [\n        'breadcrumb'    => 'Focus d\\'image',\n        'helper'        => 'Cliquer sur l\\'image pour définir le point de focus. Cliquer sur le point de focus pour le retirer.',\n        'panel_title'   => 'Focus d\\'image',\n        'success'       => 'Point de focus mis à jour.',\n        'title'         => 'Focus d\\'image pour l\\'entrée :name',\n        'unboosted'     => 'Définir un point de focus pour l\\'image est réservé aux :boosted-campaigns.',\n        'warning'       => 'Le point focal des images de la :gallery est partagé par toutes les entrées qui utilisent la même image.',\n    ],\n    'gallery_permissions'   => [\n        'admin'     => 'Cette image de la galerie n\\'est visible que par les membres du rôle :admin de la campagne.',\n        'adminself' => 'Cette image de la galerie n\\'est visible que par le :creator et les membres du rôle :admin de la campagne.',\n        'member'    => 'Cette image de la galerie n\\'est visible que par les membres de la campagne.',\n        'self'      => 'Cette image de la galerie n\\'est visible que par toi.',\n    ],\n    'replace'               => [\n        'breadcrumb'    => 'Remplacement d\\'image',\n        'panel_title'   => 'Remplacement d\\'image de l\\'entrée',\n        'success'       => 'Image remplacée.',\n        'title'         => 'Remplacement d\\'image pour :name',\n    ],\n    'visibility'            => [\n        'helper'    => 'Changer la visibilité de l\\'image de galerie, controllant ainsi qui peut la voir.',\n        'updated'   => 'Visibilité de l\\'image modifiée.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'copy_from_entity'  => 'Copier depuis une autre entrée',\n        'copy_inventory'    => 'Copier l\\'inventaire',\n        'generate'          => 'Générer',\n        'multiple'          => 'Ajouter des objets',\n    ],\n    'copy'              => [\n        'helper'    => 'Copie l\\'inventaire complet d\\'une entrée à :name.',\n    ],\n    'create'            => [\n        'helper'        => 'Ajouter un objet à l\\'inventaire de :name. Il peut éventuellement être lié à un objet existant de la campagne.',\n        'success'       => 'Objet :item ajouté à :entity.',\n        'success_bulk'  => '{0} Aucun objet ajouté à :entity.|{1} :count objet ajouté à :entity.|[2,*] :count objets ajoutés à :entity.',\n        'title'         => 'Ajouter à l\\'inventaire',\n    ],\n    'default_position'  => 'Non organisé',\n    'destroy'           => [\n        'success'           => 'Objet :item retiré de :entity.',\n        'success_position'  => 'Les éléments de :position ont été retirés de :entity.',\n    ],\n    'fields'            => [\n        'amount'                => 'Quantité',\n        'copy_entity_entry_v2'  => 'Utiliser l\\'entrée de l\\'objet',\n        'description'           => 'Description',\n        'is_equipped'           => 'Equipé',\n        'item_amount'           => 'Nombre d\\'objets',\n        'match_all'             => 'Avec toutes les étiquettes',\n        'name'                  => 'Nom',\n        'position'              => 'Position',\n        'qty'                   => 'Qté',\n        'replace'               => 'Remplacer l\\'inventaire',\n    ],\n    'generate'          => [\n        'helper'    => 'Générer un inventaire pour :name basé sur des objets de la campagne.',\n        'title'     => 'Générer un inventaire',\n    ],\n    'helpers'           => [\n        'amount'                => 'Nombre d\\'objets',\n        'copy_entity_entry_v2'  => 'Affiche l\\'entrée de l\\'objet au lieu de la description personnalisée.',\n        'description'           => 'Ajouter une description personnalisée à l\\'objet',\n        'is_equipped'           => 'Marquer cet objet comme étant équipé.',\n        'name'                  => 'Donner un nom à l\\'objet. Un nom est requis si aucun objet n\\'est sélectionné',\n        'replace'               => 'Remplacer l\\'inventaire actuel avec les nouveaux éléments générés.',\n    ],\n    'placeholders'      => [\n        'amount'        => 'Un nombre',\n        'description'   => 'Usé, abimé, atténué',\n        'name'          => 'Requis si aucun object n\\'est sélectionné',\n        'position'      => 'Equipé, Sac-à-dos, Entrepôt, Banque',\n    ],\n    'show'              => [\n        'helper'    => 'Les entrées peuvent avoir des objets attachés pour créer un inventaire.',\n        'title'     => 'Inventaire de :name',\n        'unsorted'  => 'Autre',\n    ],\n    'togglers'          => [\n        'hide'  => [\n            'price'     => 'Cacher prix',\n            'quantity'  => 'Cacher quantité',\n            'size'      => 'Cacher taille',\n            'weight'    => 'Cacher poids',\n        ],\n        'show'  => [\n            'price'     => 'Afficher prix',\n            'quantity'  => 'Afficher quantité',\n            'size'      => 'Afficher taille',\n            'weight'    => 'Afficher poids',\n        ],\n    ],\n    'tooltips'          => [\n        'equipped'  => 'Cet objet est équipé',\n    ],\n    'tutorials'         => [\n        'all'   => 'Suis ce que :name possède, garde ou vend en ajoutant des objets à cet inventaire',\n    ],\n    'update'            => [\n        'success'   => 'Objet :item modifié pour :entity.',\n        'title'     => 'Modifier un objet sur :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Ajouter un lien',\n    ],\n    'call-to-action'    => 'Ajoutes des liens vers des ressources externes sur cette entrée, comme DnDBeyond, et ils s\\'afficheront directement sur la vue d\\'ensemble de l\\'entrée.',\n    'create'            => [\n        'helper'    => 'Ajouter un lien externe vers :name, par exemple vers sa page DnDBeyond.',\n        'success'   => 'Lien :name ajouté à :entity.',\n        'title'     => 'Ajouter un lien à :name',\n    ],\n    'destroy'           => [\n        'success'   => 'Lien :name retiré de :entity.',\n    ],\n    'fields'            => [\n        'icon'      => 'Icone',\n        'name'      => 'Nom',\n        'position'  => 'Position',\n        'url'       => 'URL',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'Je suis sûr',\n            'trust'     => 'Ne plus me demander',\n        ],\n        'description'   => 'Ce lien te redirige vers :link. Es-tu sûr de vouloir y aller?',\n        'title'         => 'Départ de Kanka',\n    ],\n    'helpers'           => [\n        'icon'      => 'Personaliser l\\'icône affichée pour le favori. Utiliser les options de :fontawesome ou laisser le champ vide.',\n        'parent'    => 'Afficher ce favori après un élément de la navigation, au lieu de l\\'afficher dans la section des favoris.',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'Les campagnes boostées peuvent définir des liens sur les entrées.',\n        'title'     => 'Liens pour :name',\n    ],\n    'unboosted'         => [],\n    'update'            => [\n        'success'   => 'Lien :name modifié pour :entity.',\n        'title'     => 'Modifier le lien pour :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'        => 'Créé',\n        'create_post'   => 'Créé l\\'article \":post\"',\n        'delete'        => 'Supprimé',\n        'delete_post'   => 'Supprimé un article',\n        'reorder_post'  => 'Articles réordonnés',\n        'restore'       => 'Restoré',\n        'reveal'        => 'Afficher les détails',\n        'update'        => 'Mis à jour',\n        'update_post'   => 'Modifié l\\'article \":post\"',\n        'view'          => 'Voir les changements',\n    ],\n    'call-to-action'    => 'Des journaux complets des changements sont disponibles pendant :amount jours pour les campagnes premium.',\n    'fields'            => [\n        'action'    => 'Action',\n        'date'      => 'Date',\n    ],\n    'filters'           => [\n        'keywords'  => 'Mot cléf',\n    ],\n    'impersonated'      => 'Imité par :name',\n    'none'              => 'Aucun',\n    'show'              => [\n        'title' => 'Historique de :name',\n    ],\n    'tooltips'          => [\n        'post'  => 'Aller à l\\'article',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Cette entrée est affichée sur les cartes suivantes.',\n    'title'     => ':name Point de Carte',\n];\n"
  },
  {
    "path": "lang/fr/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Elément',\n        'type'      => 'Type',\n    ],\n    'helper'            => 'Cette liste affiche les entrées qui mentionnent cette entrée dans leur description.',\n    'mentioned_in_v2'   => 'Cette entrée est mentionnée dans :count entrées, articles, ou campagnes. :more.',\n    'see_more'          => 'Afficher les détails',\n    'show'              => [\n        'title' => 'Mention d\\'entrée :name',\n    ],\n    'title'             => 'Entrée mentionnée',\n];\n"
  },
  {
    "path": "lang/fr/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'      => 'Copier',\n        'transfer'  => 'Transférer',\n    ],\n    'errors'        => [\n        'permission'        => 'Une entrée de cette catégorie ne peut pas être créée dans la campagne ciblée.',\n        'permission_update' => 'Cette entrée ne peut pas être déplacée.',\n        'same_campaign'     => 'Une autre campagne doit être sélectionnée.',\n        'unknown_campaign'  => 'Campagne inconnue.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Campagne cible',\n        'copy'          => 'Faire une copie',\n        'select_one'    => 'Sélectionner une campagne',\n    ],\n    'helpers'       => [\n        'copy'  => 'Créer une copie de cette entrée dans la campagne cible.',\n    ],\n    'panel'         => [\n        'description'           => 'Sélectionner une campagne vers laquelle cette entrée sera déplacée ou copiée.',\n        'description_bulk_copy' => 'Sélectionner une campagne vers laquelle cette entrée sera copiée.',\n        'title'                 => 'Déplacer ou copier une entrée vers une autre campagne',\n    ],\n    'success'       => 'L\\'entrée :name a été déplacée.',\n    'success_copy'  => 'L\\'entrée :name a été copiée.',\n    'title'         => 'Déplacer :name',\n    'warnings'      => [\n        'custom'    => 'Cette entrée n\\'est pas d\\'une catégorie par défaut, mais d\\'une catégorie personnalisée \":module\". Elle sera créée en tant que Note dans la campagne cible.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Ajouter un article',\n        'add_role'  => 'Ajouter un rôle',\n        'add_user'  => 'Ajouter un membre',\n    ],\n    'collapsed'     => [\n        'closed'    => 'L\\'article est fermé et seul le titre est visible',\n        'open'      => 'L\\'article est pleinement visible',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Copier la mention avancée',\n        'copy_with_name'    => 'Copier la mention avancées avec le nom',\n        'success'           => 'La mention avancée de l\\'article a été copiée au presse-papier.',\n    ],\n    'create'        => [\n        'success'   => 'Article \\':name\\' ajouté à :entity.',\n    ],\n    'destroy'       => [\n        'success'   => 'L\\'article :name a été retirée.',\n    ],\n    'edit'          => [\n        'success'   => 'L\\'article :name pour :entity a été modifié.',\n    ],\n    'fields'        => [\n        'creator'   => 'Créé par',\n        'display'   => 'Affichage',\n        'name'      => 'Nom',\n        'position'  => 'Position',\n    ],\n    'footer'        => [\n        'created'   => 'Créé par :user au :date',\n        'updated'   => 'Modifié par :user au :date',\n    ],\n    'hint'          => 'Les informations qui n\\'entrent pas vraiment dans les champs pré-définis ou qui doivent être privées peuvent être ajoutées en tant qu\\'article.',\n    'hints'         => [\n        'reorder'   => 'Les articles peuvent être réarrangée en cliquant sur l\\'icône :icon à côté de Histoire dans le menu de l\\'entrée.',\n    ],\n    'index'         => [],\n    'move'          => [\n        'copy'          => 'Créer une copie sur l\\'entrée cible',\n        'copy_success'  => 'L\\'article :name a été copiée vers :entity avec succès.',\n        'copy_title'    => 'Guarder une copie',\n        'description'   => 'Sélectionnes une entrée vers laquelle l\\'article doit être déplacé ou copié.',\n        'entity'        => 'Entrée cible',\n        'move_success'  => 'L\\'article :name a été déplacé vers :entity avec succès.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nom de l\\'article, observation ou remarque',\n    ],\n    'show'          => [\n        'advanced'  => 'Permissions Avancées',\n        'title'     => 'Article :name pour :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'Rétréci',\n        'expanded'  => 'Étendu',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/fr/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'Cette entrée est privée. Les permissions détaillées peuvent toujours être définies, mais tant que cette entrée est privée, ceux-ci seront ignorés, et seulement les membres du rôle :admin pourront voir cette entrée.',\n        'warning'   => 'Attention',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'Aucun rôle ou utilisateur hors des admins de la campagne n\\'ont accès à cette entrée.',\n        'manage'            => 'Gérer les permissions',\n        'screen-reader'     => 'Ouvrir les paramètres de sécurité',\n        'success'           => [\n            'private'   => 'L\\'entrée :entity est maintenant cachée.',\n            'public'    => 'L\\'entrée :entity est maintenant visible.',\n        ],\n        'title'             => 'Permissions',\n        'viewable-by'       => 'Visible par',\n    ],\n    'toggle'    => [\n        'label'     => 'Confidentialité de l\\'entrée',\n        'private'   => [\n            'description'   => 'Seulement visible aux membres du rôle :admin.',\n            'title'         => 'Privé',\n        ],\n        'public'    => [\n            'description'   => 'Visibles aux rôles et membres suivants.',\n            'title'         => 'Publique',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Liens',\n    'title' => 'Épingles',\n];\n"
  },
  {
    "path": "lang/fr/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Modifier le profil',\n    ],\n    'aliases'   => 'Alias',\n    'history'   => 'Historique',\n    'show'      => [\n        'tab_name'  => 'Profil',\n        'title'     => 'Profil de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Cette entrée fait partie des quêtes suivantes.',\n    'title'     => 'Quêtes de :name',\n];\n"
  },
  {
    "path": "lang/fr/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Outil de visualisation des relations',\n        'mode-table'    => 'Table des relations et relation',\n    ],\n    'bulk'              => [\n        'delete'    => '{1} :count relation supprimée.|[2,*] :count relations supprimées.',\n        'fields'    => [\n            'delete_mirrored'   => 'Supprimer la relation liée',\n            'unmirror'          => 'Délier la relation',\n            'update_mirrored'   => 'Actualiser la relation liée',\n        ],\n        'helpers'   => [\n            'delete_mirrored'   => 'Aussi supprimer les relations liées.',\n            'unmirror'          => 'Délier les relations liées.',\n            'update_mirrored'   => 'Actualiser les relations liées.',\n        ],\n        'success'   => [\n            'editing'           => '{1} :count relation modifiée.|[2,*] :count relations modifiées.',\n            'editing_partial'   => '{1} :count/:total relation modifiée.|[2,*] :count/:total relations modifiées.',\n        ],\n    ],\n    'call-to-action'    => 'Explorer visuellement les relations d\\'une entrée et la manière dont elle est connectée au reste de la campagne.',\n    'connections'       => [\n        'map_point'         => 'Point de carte',\n        'mention'           => 'Mention',\n        'quest_element'     => 'Élément de quête',\n        'timeline_element'  => 'Élément de timeline',\n    ],\n    'create'            => [\n        'helper'        => 'Créer un lien entre :name et une ou plusieurs entrées.',\n        'new_title'     => 'Nouvelle relation',\n        'success_bulk'  => '{1} Ajout de :count relation à :entity.|[2,*] Ajout de :count relations à :entity.',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'Cette relation est dupliquée sur l\\'entrée cible. Sélectionner cette option pour aussi supprimer la relation symétrique.',\n        'option'    => 'Supprimer la relation miroir',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'Ceci supprimera aussi la relation liée et est permanent.',\n        'success'   => 'Relation :target supprimée pour :entity.',\n    ],\n    'fields'            => [\n        'attitude'          => 'Attitude',\n        'is_pinned'         => 'Épinglé',\n        'link'              => 'Lien réciproque',\n        'mirror_relation'   => 'Rôle réciproque',\n        'owner'             => 'Source',\n        'role'              => 'Rôle',\n        'target'            => 'Cible',\n        'targets'           => 'Cibles',\n        'two_way'           => 'Créer une relation miroir',\n        'unmirror'          => 'Délier cette relation de la relation miroir.',\n    ],\n    'filters'           => [\n        'connection'    => 'Relation de la relation',\n        'name'          => 'Cible de la relation',\n    ],\n    'helper'            => 'Définir des relations entre entrées avec leurs description, attitude et visibilité. Les relations peuvent aussi être épinglées sur le menu de l\\'entrée.',\n    'helpers'           => [\n        'description'       => 'Détailler la nature du lien entre les deux entrées.',\n        'link'              => 'Créer une relation correspondante sur les cibles.',\n        'mirror_relation'   => 'Comment la cible voit cette entrée (laisser vide pour copier ci-dessus).',\n        'no_relations'      => 'Cette entrée n\\'a actuellement aucune relation vers d\\'autres entrées de la campagne.',\n    ],\n    'hints'             => [\n        'attitude'  => 'Ce champ optionnel peut être utilisé pour définir l\\'ordre ascendant dans lequel s\\'affichent les relations.',\n        'two_way'   => 'Sélectionne pour créer une copie de la relation sur la cible.',\n    ],\n    'index'             => [\n        'title' => 'Relations',\n    ],\n    'linked'            => [\n        'break'             => 'Rompre le lien',\n        'helper'            => 'Cette relation est synchronisée avec :link',\n        'label'             => 'Relation liée',\n        'unmirror-helper'   => 'Convertir en relation indépendante ne supprimera rien.',\n    ],\n    'options'           => [\n        'mentions'          => 'Défaut + liés + mentions',\n        'only_relations'    => 'Seule les relations directes',\n        'related'           => 'Défaut + liés',\n        'relations'         => 'Défaut',\n        'show'              => 'Afficher',\n    ],\n    'panels'            => [\n        'related'   => 'Éléments liés',\n    ],\n    'placeholders'      => [\n        'attitude'  => 'de -100 à 100, 100 étant très positif.',\n        'role'      => 'Rival, Meilleur ami, Frère/Sœur',\n    ],\n    'show'              => [\n        'title' => 'Relations de :name',\n    ],\n    'types'             => [\n        'family_member'         => 'Membre de famille',\n        'organisation_member'   => 'Membre d\\'organisation',\n    ],\n    'update'            => [\n        'success'   => 'Relation :target modifiée pour :entity.',\n        'title'     => 'Modifier la relation de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/reminders.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'       => 'Lier à un calendrier',\n        'remove'    => 'Retirer la date de calendrier',\n    ],\n    'helpers'   => [\n        'pitch' => 'Laisse de côté le calendrier du monde réel et connecte cette entrée à un calendrier de ton univers pour mieux t\\'immerger dans ta chronologie fictive.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/share.php",
    "content": "<?php\n\nreturn [\n    'buttons'   => [\n        'copy'          => 'Copier le lien',\n        'make_public'   => 'Rendre la campagne publique',\n    ],\n    'fields'    => [\n        'campaign_access'   => 'Paramètres de campagne',\n        'visibility_mode'   => 'Corriger la visibilité',\n    ],\n    'helpers'   => [\n        'campaign_access'               => 'Pour partager ceci publiquement, la campagne elle-même doit d\\'abord être rendue publique.',\n        'entity_permissions_warning'    => 'Rendre cette campagne publique permet à tout le monde de la voir. Les entrées marquées comme privées restent cachées.',\n        'hidden_explanation'            => 'La campagne est publique, mais cette entrée est actuellement cachée aux non-membres.',\n        'hidden_unlisted_explanation'   => 'La campagne est non listée, seuls ceux qui ont le lien peuvent la trouver.',\n        'member-link'                   => 'Partager uniquement avec les membres',\n        'private_explanation'           => 'Seuls les membres peuvent accéder à cette entrée.',\n        'public_explanation'            => 'La campagne et cette entrée sont publiques. N\\'importe qui avec le lien peut la voir.',\n        'unlisted_explanation'          => 'La campagne est non listée et cette entrée est visible. N\\'importe qui avec le lien peut la voir.',\n    ],\n    'labels'    => [\n        'member_link'   => 'Lien réservé aux membres',\n        'public_link'   => 'Lien public',\n        'share_link'    => 'Lien de partage',\n    ],\n    'options'   => [\n        'keep_private'          => 'Garder la campagne privée',\n        'make_all_public'       => 'Montrer toutes les :module aux non-membres',\n        'make_campaign_public'  => 'Rendre la campagne publique',\n        'make_entity_public'    => 'Montrer :name aux non-membres',\n    ],\n    'status'    => [\n        'hidden'    => 'Non visible pour les non-membres',\n        'private'   => 'Cette campagne est privée',\n        'public'    => 'Visible pour les non-membres',\n        'unlisted'  => 'Visible par n\\'importe qui avec le lien',\n    ],\n    'success'   => [\n        'copied'            => 'Lien copié dans le presse-papiers!',\n        'copied_members'    => 'Lien réservé aux membres copié.',\n        'copied_public'     => 'Lien public copié, n\\'importe qui avec le lien peut voir l\\'entrée.',\n        'updated'           => 'Paramètres de visibilité mis à jour.',\n    ],\n    'title'     => 'Partager l\\'entrée',\n];\n"
  },
  {
    "path": "lang/fr/entities/statuses.php",
    "content": "<?php\n\nreturn [\n    'character'     => [\n        'alive'     => 'Vivant',\n        'dead'      => 'Mort',\n        'missing'   => 'Disparu',\n    ],\n    'creature'      => [\n        'dead'      => 'Mort',\n        'extinct'   => 'Éteint',\n    ],\n    'family'        => [\n        'extinct'   => 'Éteinte',\n    ],\n    'item'          => [\n        'destroyed' => 'Détruit',\n        'lost'      => 'Perdu',\n        'owned'     => 'Possédé',\n    ],\n    'location'      => [\n        'destroyed' => 'Détruit',\n    ],\n    'organisation'  => [\n        'defunct'   => 'Défunte',\n    ],\n    'quest'         => [\n        'abandoned'     => 'Abandonné',\n        'completed'     => 'Terminé',\n        'not_started'   => 'Non commencé',\n        'ongoing'       => 'En cours',\n    ],\n    'race'          => [\n        'extinct'   => 'Éteinte',\n    ],\n    'remove'        => 'Retirer',\n];\n"
  },
  {
    "path": "lang/fr/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'      => 'Tout réduir',\n        'expand_all'        => 'Tout étendre',\n        'load_more'         => 'Voir plus',\n        'login_for_more'    => 'Se connecter pour voir plus d\\'entrées',\n    ],\n    'reorder'   => [\n        'helper'        => 'Fais glisser les articles pour les réorganiser sur la page d\\'aperçu de l\\'entrée.',\n        'icon_tooltip'  => 'Réordonner',\n        'panel_title'   => 'Réordonner les éléments',\n        'save'          => 'Enregistrer les changements',\n        'success'       => 'Les éléments ont été réordonnés.',\n    ],\n    'update'    => [\n        'title' => 'Modifier l\\'entrée :entity',\n    ],\n    'warning'   => [],\n];\n"
  },
  {
    "path": "lang/fr/entities/tags.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Ajouter ou retirer des étiquettes à :name.',\n        'title'     => 'Étiqueter une entrée',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Les chronologies dans lesquelles apparaît cette entrée sont affichées ci-dessous.',\n    'show'      => [\n        'title' => 'Chronologies de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entities/tooltips.php",
    "content": "<?php\n\nreturn [\n    'empty'         => ':name n\\'a pas encore de contenu.',\n    'fix'           => 'Ajouter une déscription',\n    'formatting'    => 'HTML pris en charge:text (:text), structure (:layout), listes/tableaux et images.',\n    'helper'        => 'Remplacer le texte d’aperçu généré automatiquement par défaut affiché au survol des liens vers cette entrée.',\n    'label'         => 'Teaser',\n    'placeholder'   => 'Décris brièvement cette entrée en une ou deux phrases.',\n    'premium'       => 'Débloque la possibilité de personnaliser le teaser au survol avec une :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/fr/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'convert'   => 'Change la catégorie',\n    ],\n    'bulk'          => [\n        'errors'    => [\n            'unknown_type'  => 'Type inconnu ou invalide',\n        ],\n        'success'   => '{1} :count entrée transformée à la nouvelle catégorie :type.|[2,*] :count entrées transformées à la nouvelle catégorie :type.',\n    ],\n    'confirm'       => [\n        'checkbox'  => 'Je comprends qu\\'en changeant :entity vers une autre catégorie, les éléments suivants seront perdus:',\n        'label'     => 'Confirmer la perte de données',\n    ],\n    'documentation' => 'Documentation : conversion des catégories d\\'entrées',\n    'fields'        => [\n        'current'       => 'Catégorie actuelle',\n        'select_one'    => 'Sélectionner un',\n        'target'        => 'Nouveau type de l\\'entrée',\n    ],\n    'panel'         => [\n        'bulk_description'  => 'Changes la catégorie de plusieurs entrées. Attention cependant, certaines informations peuvent être perdues dû au différent champs sur les entrés.',\n        'bulk_title'        => 'Transformer plusieurs entrées',\n        'title'             => 'Transformer une entrée',\n        'warning'           => 'Certaines données peuvent ne pas être reprises si la nouvelle catégorie utilise des champs différents',\n    ],\n    'success'       => 'L\\'entrée :name a été transformée.',\n    'title'         => 'Transformer :name',\n];\n"
  },
  {
    "path": "lang/fr/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Pouvoirs',\n    'ability'               => 'Pouvoir',\n    'archetype'             => 'Archétype',\n    'archetypes'            => 'Archétypes',\n    'article'               => 'Article',\n    'articles'              => 'Articles',\n    'attribute_template'    => 'Kit de propriétés',\n    'attribute_templates'   => 'Kits de propriétés',\n    'bookmark'              => 'Favori',\n    'bookmarks'             => 'Favoris',\n    'calendar'              => 'Calendrier',\n    'calendars'             => 'Calendriers',\n    'campaign'              => 'Campagne',\n    'campaigns'             => 'Campagnes',\n    'character'             => 'Personnage',\n    'characters'            => 'Personnages',\n    'conversation'          => 'Conversation',\n    'conversations'         => 'Conversations',\n    'creator'               => [\n        'actions'                   => [\n            'create'    => 'Créer :type',\n            'full'      => 'Aller au formulaire complet',\n            'more'      => 'Ajouter plus de détails',\n        ],\n        'back'                      => 'Retour à la sélection',\n        'bulk_names'                => 'Ajouter un nom par ligne',\n        'duplicate'                 => 'Il y a d\\'autres entrées de cette catégorie avec le même nom.',\n        'helper_v2'                 => 'Créé rapidement les fondations d\\'une nouvelle entrée sans interrompre ton flow.',\n        'helpers'                   => [\n            'archetype' => 'Sélectionner un archétype sur lequel les nouvelles entrées seront basées',\n        ],\n        'missing_v2'                => 'Seuls les catégories activées et auxquels tu as la permission de créer des entrées sont visibles dans cette interface. :learn-more.',\n        'modes'                     => [\n            'archetypes'    => 'Sélection d\\'archétype',\n            'bulk'          => 'Ajout en bloc',\n            'default'       => 'Ajout rapide',\n        ],\n        'name'                      => [\n            'new'       => 'Nouveau nom',\n            'remove'    => 'Retirer',\n        ],\n        'success_multiple'          => '{1} Nouvelle entrée :link créée.|[2,*] Nouvelles entrées :link créées.',\n        'success_multiple_posts'    => '{1} Nouveau article :link créé.|[2,*] Nouveaux articles :link créés.',\n        'title'                     => 'Nouvelle Entrée',\n        'titles'                    => [\n            'everything'    => 'Tout',\n            'quick-access'  => 'Accès rapide',\n        ],\n        'tooltip'                   => 'Créer une nouvelle entrée sans quitter la page actuelle',\n        'tooltips'                  => [\n            'create'        => 'Créer une entrée et poursuivre avec la sélection d\\'entrée',\n            'create_more'   => 'Créer une entrée et poursuivre avec la création d\\'une autre entrée du même type',\n            'edit'          => 'Créer une entrée et poursuivre avec la modification de la nouvelle entrée',\n        ],\n    ],\n    'creature'              => 'Créature',\n    'creatures'             => 'Créatures',\n    'dice_roll'             => 'Jet de dés',\n    'dice_rolls'            => 'Jets de dés',\n    'entries'               => 'Entrées',\n    'entry'                 => 'Entrée',\n    'event'                 => 'Événement',\n    'events'                => 'Événements',\n    'families'              => 'Familles',\n    'family'                => 'Famille',\n    'inventories'           => 'Inventaires',\n    'item'                  => 'Objet',\n    'items'                 => 'Objets',\n    'journal'               => 'Journal',\n    'journals'              => 'Journaux',\n    'location'              => 'Lieu',\n    'locations'             => 'Lieux',\n    'map'                   => 'Carte',\n    'maps'                  => 'Cartes',\n    'media'                 => 'Média',\n    'new'                   => [],\n    'note'                  => 'Note',\n    'notes'                 => 'Notes',\n    'organisation'          => 'Organisation',\n    'organisations'         => 'Organisations',\n    'properties'            => 'Propriétés',\n    'quest'                 => 'Quête',\n    'quest_element'         => 'Elément de quête',\n    'quests'                => 'Quêtes',\n    'race'                  => 'Race',\n    'races'                 => 'Races',\n    'relation'              => 'Relation',\n    'relations'             => 'Relations',\n    'reminders'             => 'Rappels',\n    'status'                => 'Statut',\n    'tag'                   => 'Etiquette',\n    'tags'                  => 'Etiquettes',\n    'templates'             => 'Modèles',\n    'timeline'              => 'Chronologie',\n    'timeline_element'      => 'Elément de chronologie',\n    'timelines'             => 'Chronologies',\n    'whiteboard'            => 'Tableau blanc',\n    'whiteboards'           => 'Tableaux blancs',\n];\n"
  },
  {
    "path": "lang/fr/entries/archetypes.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'how'   => 'Comment définir des archétypes',\n    ],\n    'success'   => [\n        'set'   => ':name défini comme archétype.',\n        'unset' => ':name n\\'est plus défini comme archétype.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entries/archive.php",
    "content": "<?php\n\nreturn [\n    'banner'    => 'Cette entrée est archivée et n\\'apparaît plus dans les listes ou les recherches.',\n];\n"
  },
  {
    "path": "lang/fr/entries/bulk.php",
    "content": "<?php\n\nreturn [\n    'success'   => [\n        'copy_to_campaign'  => '{1} :count entrée copiée vers :campaign.|[2,*] :count entrées copiées vers :campaign.',\n        'delete'            => '{1} :count entrée supprimée.|[2,*] :count entrées supprimées.',\n        'editing'           => '{1} :count entrée mise à jour.|[2,*] :count entrées mises à jour.',\n        'editing_partial'   => '{1} :count/:total entrée mise à jour.|[2,*] :count/:total entrées mises à jour.',\n        'permissions'       => '{1} Permissions modifiées pour :count entrée.|[2,*] Permissions modifiées pour :count entrées.',\n        'private'           => '{1} :count entrée est maintenant privée.|[2,*] :count entrées sont maintenant privées.',\n        'public'            => '{1} :count entrée est maintenant visible.|[2,*] :count entrées sont maintenant visibles.',\n        'templates'         => '{1} :count entrée a reçu un kit.|[2,*] :count entrées ont reçu un kit.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entries/fields.php",
    "content": "<?php\n\nreturn [\n    'name'  => [\n        'placeholder'   => 'Nom de l\\'entrée',\n    ],\n    'type'  => [\n        'placeholder'   => 'Type de l\\'entrée',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/entries/tabs.php",
    "content": "<?php\n\nreturn [\n    'aliases'       => 'Alias',\n    'identity'      => 'Identrée',\n    'media'         => 'Média',\n    'properties'    => 'Propriétés',\n    'relations'     => 'Relations',\n];\n"
  },
  {
    "path": "lang/fr/errors.php",
    "content": "<?php\n\nreturn [\n    '403'               => [\n        'body'  => 'Tu n\\'as pas accès à cette page!',\n        'title' => 'Accès refusé.',\n    ],\n    '403-form'          => [\n        'help'  => 'Ceci peut être dû à la session qui n\\'est plus active. Prière de se reconnecter dans une autre fenêtre avant de ressayer d\\'enregistrer.',\n    ],\n    '404'               => [\n        'body'  => 'Désolé, la page demandée ne peut être trouvée.',\n        'title' => 'Page Inconnue',\n    ],\n    '500'               => [\n        'body'  => [\n            '1' => 'Oups, quelque chose s\\'est mal passé.',\n            '2' => 'Un rapport avec l\\'erreur rencontrée nous a été envoyé, mais quelques fois ça aide si nous avons plus de détails.',\n        ],\n        'title' => 'Erreur',\n    ],\n    '503'               => [\n        'body'  => [\n            '1' => 'Kanka est actuellement en maintenance, ce qui d\\'habitude signifie qu\\'une mise à jour est en cours!',\n            '2' => 'Désolé pour le dérangement. Tout reviendra à la normale dans quelques minutes.',\n        ],\n        'json'  => 'Kanka est actuellement en maintenance. Prière de ressayer dans quelques minutes.',\n        'title' => 'Maintenance',\n    ],\n    'back-to-campaigns' => 'Revenir à une de tes campagnes',\n    'footer'            => 'Si tu as besoin d\\'aide, contacte-nous a hello@kanka.io ou sur le :discord.',\n    'log-in'            => 'La connexion à ton compte pourrait te permettre de trouver ce que tu cherches.',\n    'post_layout'       => 'Mise en page d\\'article invalide.',\n    'private-campaign'  => [\n        'auth'  => [\n            'helper'    => 'Tu n\\'as pas accès à cette campagne.',\n        ],\n        'guest' => [\n            'helper'    => 'La campagne que tu essaye d\\'accéder est privée et tu n\\'es pas connecté à ton compte.',\n            'login'     => 'Se connecter pourrait te donner accès au contenu.',\n        ],\n        'title' => 'Campagne privée',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouvel Evénement',\n    ],\n    'events'        => [\n        'helper'    => 'Les événements qui ont cette entrée comme événement parent sont affichés ici.',\n    ],\n    'fields'        => [\n        'date'  => 'Date',\n    ],\n    'helpers'       => [\n        'date'  => 'Ce champ peut contenir n\\'importe quelle valeur et n\\'est pas lié aux calendriers de la campagne. Pour lier cet événement à un calendrier, il faut se rendre sur l\\'onglet rappels de cet événement.',\n    ],\n    'lists'         => [\n        'empty' => 'Ajoute des moments importants tels que des batailles, des couronnements ou des découvertes à l\\'histoire de ton monde.',\n    ],\n    'placeholders'  => [\n        'date'  => 'La date de l\\'événement',\n        'type'  => 'Cérémonie, Festival, Désastre, Bataille, Naissance',\n    ],\n    'tabs'          => [\n        'calendars' => 'Entrées calendrier',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/export.php",
    "content": "<?php\n\nreturn [\n    'content'           => 'Contenu',\n    'hidden_campaign'   => 'Campagne cachée',\n    'index'             => 'Index d\\'entrée',\n];\n"
  },
  {
    "path": "lang/fr/families/trees.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'clear'             => 'Tout effacer',\n        'first'             => 'Ajouter un/e fondateur/trice',\n        'founder'           => 'Nouveau fondateur',\n        'rename-relation'   => 'Renommer la relation',\n        'reset'             => 'Annuler les modifications',\n        'save'              => 'Enregister',\n    ],\n    'modal'     => [\n        'first-title'   => 'Sélectionner une entrée',\n        'helper'        => 'Remplacer l\\'entrée avec une autre de la campagne',\n        'relation'      => 'Relation',\n        'title'         => 'Remplacer l\\'entrée',\n    ],\n    'modals'    => [\n        'clear'     => [\n            'confirm'   => 'Es-tu sûr de vouloir réinitialiser l\\'arbre de famille?',\n        ],\n        'entity'    => [\n            'add'       => [\n                'founder'   => 'Fondateur/trice',\n                'member'    => 'Membre',\n                'success'   => 'Entrée ajoutée.',\n                'title'     => 'Ajouter une entrée',\n            ],\n            'child'     => [\n                'success'   => 'Enfant ajouté.',\n                'title'     => 'Ajouter un enfant',\n            ],\n            'edit'      => [\n                'helper'    => 'Sélectionner des options si la relation est inconnue. Un personnage peut être ajouté plus tard.',\n                'success'   => 'Entrée modifiée.',\n                'title'     => 'Modifier une entrée',\n            ],\n            'founder'   => [\n                'title' => 'Ajouter un nouveau fondateur',\n            ],\n            'remove'    => [\n                'confirm'   => 'Es-tu sûr de vouloir retirer cette entrée de l\\'arbre de famille?',\n                'success'   => 'Entrée retirée.',\n            ],\n        ],\n        'relations' => [\n            'add'       => [\n                'success'   => 'Relation ajoutée.',\n                'title'     => 'Ajouter une relation',\n            ],\n            'edit'      => [\n                'success'   => 'Relation modifiée.',\n                'title'     => 'Modifier une relation',\n            ],\n            'unknown'   => 'Inconnu',\n        ],\n        'reset'     => [\n            'confirm'   => 'Es-tu sûr de vouloir annuler toutes les modifications faites à l\\'arbre de famille?',\n        ],\n    ],\n    'pitch'     => 'Créer un arbre de famille détaillé pour les familles de la campagne.',\n    'success'   => [\n        'cleared'   => 'Arbre de famille effacé.',\n        'reseted'   => 'Arbre de famille réinitialisé.',\n        'saved'     => 'Arbre de famille enregistré.',\n    ],\n    'title'     => ':name Arbre de famille',\n    'unknown'   => 'non établi',\n];\n"
  },
  {
    "path": "lang/fr/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouvelle Famille',\n    ],\n    'fields'        => [],\n    'hints'         => [\n        'is_extinct'    => 'Cette famille est éteinte.',\n        'members'       => 'Les membres d\\'une famille sont affichés ici. Un personnage peut être ajouté à une famille lors de l\\'édition du personnage en utilisant le champ \"Famille\".',\n    ],\n    'lists'         => [\n        'empty' => 'Suis les lignées, les clans ou les maisons nobles qui relient tes personnages entre eux.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Ajouter un ou plusieurs membres à :name.',\n            'success'   => '{0} Aucun membre ajouté.|{1} 1 membre ajouté.|[2,*] :count membres ajoutés.',\n            'title'     => 'Nouveau membres',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Nom de la famille',\n        'type'  => 'Royale, Noble, Éteinte',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'tree'  => 'Arbre de famille',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/faq.php",
    "content": "<?php\n\nreturn [\n    'fields'                => [\n        'answer'    => 'Réponse',\n        'category'  => 'Question',\n        'locale'    => 'Langue',\n        'order'     => 'Ordre',\n        'question'  => 'Question',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Les Dieux sont des personnages, et les religions sont des organisations dans Kanka. Pour rapidement trouver les dieux, nous recommandons aussi d\\'utiliser des étiquettes.',\n        'question'  => '',\n    ],\n    'permissions'           => [\n        'answer'    => 'Absolument, c\\'est ce pourquoi nous avons créé Kanka! Vous pouvez inviter n\\'importe qui à votre campagne, et leur donner des rôles et des permissions. Nous avons créé un système extrêmement flexible (vous pouvez à la fois utiliser des options de permission et de restriction) pour couvrir toutes les situations possibles.',\n        'question'  => 'Puis-je sélectionner les informations que mes joueurs peuvent voir?',\n    ],\n    'sections'              => [\n        'community'     => 'Communauté',\n        'general'       => 'Général',\n        'other'         => 'Autre',\n        'permissions'   => 'Permission',\n        'pricing'       => 'Prix',\n        'worldbuilding' => 'Worldbuilding',\n    ],\n    'show'                  => [\n        'return'    => 'Retour à la FAQ',\n        'timestamp' => 'Dernière mise à jour :date',\n        'title'     => 'FAQ :name',\n    ],\n    'user-switch'           => [\n        'answer'    => 'Les permissions peuvent rapidement devenir compliquées, surtout au sein de grande campagne. En tant qu\\'administateur d\\'une campagne, naviguer vers la page affichant les membres d\\'une campagne permet de cliquer sur le bouton \"Basculer\". Cela permet d\\'afficher la campagne avec les permissions de ce compte.',\n        'question'  => 'Les permissions de ma campagne sont définies, comment les tester?',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/fields.php",
    "content": "<?php\n\nreturn [\n    'description'       => [\n        'label' => 'Description',\n    ],\n    'entry'             => [\n        'label' => 'Entrée',\n    ],\n    'gallery'           => [\n        'placeholder'   => 'Choix d\\'une image de la galerie',\n    ],\n    'gallery-header'    => [\n        'description'   => 'Si l\\'entrée n\\'a pas d\\'image d\\'entête, affiche une image de la galerie.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'Si l\\'entrée n\\'a pas d\\'image, affiche une image de la galerie.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Afficher une image d\\'arrière plan dans l\\'entête de l\\'entrée avec une :boosted-campaign.',\n        'description'           => 'Afficher une image d\\'arrière plan dans l\\'entête de l\\'entrée. Pour le meilleur résultat, utiliser une image très large.',\n        'title'                 => 'Image d\\'entête',\n    ],\n    'tooltip'           => [],\n];\n"
  },
  {
    "path": "lang/fr/filters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'bookmark'  => 'Marquer',\n    ],\n    'alerts'    => [\n        'copy'  => 'Les filtres ont été copier à ton presse-papier.',\n    ],\n    'bookmark'  => [\n        'helper'    => 'Créer un nouveau signet pour cette vue en utilisant les filtres actuels.',\n        'name'      => ':module (filtrée)',\n        'premium'   => 'Pour ajouter plus des favoris, il faut activer les fonctionalités premium.',\n        'success'   => 'Favori créé.',\n    ],\n    'helpers'   => [\n        'guest'         => 'Prière de te connecter à ton compte pour filter les résultats.',\n        'icon'          => 'Donne à ce signet une icône spéciale :fontawesome, par exemple :example.',\n        'icon-premium'  => 'Donne à ce favori une icône spéciale :fontawesome, comme :example, avec un :premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/footer.php",
    "content": "<?php\n\nreturn [\n    'about'             => 'Notre équipe',\n    'blog'              => 'Blog',\n    'boosters'          => 'Boosters',\n    'community'         => 'Communauté',\n    'company'           => 'Entreprise',\n    'contact'           => 'Contact',\n    'copyright'         => 'Tous droits réservés :copy :year Owlchester SNC',\n    'documentation'     => 'Documentation',\n    'features'          => 'Fonctionnalités',\n    'kb'                => 'Base de connaissance',\n    'language-switcher' => [\n        'other' => 'Autres langues',\n        'title' => 'Choix de la langue',\n    ],\n    'made'              => 'Fabriqué avec ❤️ à Genève, Suisse',\n    'newsletter'        => 'Newsletter',\n    'platform'          => 'Platforme',\n    'plugins'           => 'Bibliothèque de Plugins',\n    'premium'           => 'Campagnes Premium',\n    'press-kit'         => 'Press kit',\n    'pricing'           => 'Prix',\n    'privacy'           => 'Confidentialité',\n    'public-campaigns'  => 'Campagnes publiques',\n    'resources'         => 'Ressources',\n    'roadmap'           => 'Feuille de route',\n    'security'          => 'Sécurité',\n    'server-time'       => 'C\\'est l\\'heure de notre serveur (:server)',\n    'showcase'          => 'Vitrine',\n    'status'            => 'Status de service',\n    'terms'             => 'Termes',\n    'thanks'            => 'Uniquement possible grâce à nos abonnés.',\n    'translator_call'   => 'Kanka est traduit dans d\\'autres langues grâce à notre communauté incroyable. Si tu souhaites traduire Kanka dans ta langue, contacte-nous sur le :discord!',\n    'whats-new'         => 'Nouveautés',\n];\n"
  },
  {
    "path": "lang/fr/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Votes Communautaires',\n];\n"
  },
  {
    "path": "lang/fr/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Panthéon',\n];\n"
  },
  {
    "path": "lang/fr/front/kb.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Base de connaissance',\n];\n"
  },
  {
    "path": "lang/fr/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'En savoir plus',\n        'subscribe'     => 'S\\'abonner',\n    ],\n    'fields'    => [\n        'firstname'     => 'Prénom',\n        'lastname'      => 'Nom',\n        'notifications' => 'Notifications',\n    ],\n    'groups'    => [\n        'all'           => 'Recevoir des mises à jour occasionnelles sur les nouvelles fonctionnalités, les votes et les événements communautaires, etc.',\n        'newsletter'    => 'Newsletter',\n    ],\n    'headline'  => 'S\\'abonner à une ou toutes nos newsletters pour rester à jour avec Kanka.',\n    'title'     => 'Mises à jour mail',\n];\n"
  },
  {
    "path": "lang/fr/front.php",
    "content": "<?php\n\nreturn [\n    'campaigns'     => [\n        'public'    => [\n            'filters'   => [\n                'is-premium'    => 'Cette campagne est Premium!',\n            ],\n        ],\n    ],\n    'cookie'        => [\n        'dismiss'   => 'Compris!',\n        'link'      => 'En savoir plus',\n        'message'   => 'Kanka utilise des cookies pour assurer une bonne expérience sur notre site web.',\n    ],\n    'features'      => [\n        'api'       => [\n            'link'  => 'Documentation d\\'API',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Limite de requête API (90)',\n            'boosts'            => 'Boosters de campagne',\n            'default_image'     => 'Images par défaut pour les entrées',\n            'discord'           => 'Canal :discord privé',\n            'free'              => 'Gratuit',\n            'hall_of_fame'      => 'Nom dans la :link',\n            'impact'            => 'Impact sur les futures fonctionnalités',\n            'monthly_vote'      => 'Participation dans les votes communautaires',\n            'pagination'        => 'Augmentation de la limite des résultats paginés',\n            'upload_limit'      => 'Taille des fichiers augmentés',\n            'upload_limit_map'  => 'Taille des cartes augmentées',\n        ],\n    ],\n    'home'          => [\n        'seo'   => [\n            'meta-description'  => 'Kanka est un gestionnaire de campagne JDR communautaire, qui facilite l\\'organisation et la planification de tes campagnes JDR',\n        ],\n    ],\n    'master'        => [],\n    'media'         => [],\n    'menu'          => [\n        'dashboard'     => 'Accueil',\n        'login'         => 'Login',\n        'register'      => 'Inscription',\n        'register_free' => 'Inscription gratuite',\n    ],\n    'meta'          => [\n        'description'   => 'Kanka est un outil digital et flexible pour la création de monde et gestionnaire de campagne de jeu de rôle.',\n        'title'         => 'Kanka - Gestionnaire en ligne de campagne de jeu de rôle et outil de création de monde',\n    ],\n    'partners'      => [],\n    'pricing'       => [\n        'tier'  => [\n            'free'  => 'Gratuit',\n            'month' => 'Mois',\n        ],\n    ],\n    'privacy'       => [],\n    'release'       => [],\n    'roadmap'       => [],\n    'second_block'  => [],\n    'seo'           => [\n        'keywords'  => 'Création de monde, jeux de rôle, gestionnaire de jeux de rôle',\n    ],\n    'team'          => [],\n    'terms'         => [],\n];\n"
  },
  {
    "path": "lang/fr/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'gallery'   => 'Depuis la galerie',\n        'url'       => 'Télécharger une image à partir d\\'une URL',\n    ],\n    'browse'    => [\n        'layouts'       => [\n            'large' => 'Grands aperçus',\n            'small' => 'Petits aperçus',\n        ],\n        'search'        => [\n            'placeholder'   => 'Recherche d\\'une image dans la galerie',\n        ],\n        'title'         => 'Galerie',\n        'unauthorized'  => 'Aucun de tes rôles n\\'a l\\'autorisation de \"parcourir la galerie\".',\n    ],\n    'cta'       => [\n        'action'    => 'Débloquer plus d\\'espace de stockage',\n        'helper'    => 'Débloquer jusqu\\'à :taille GiB d\\'espace de stockage avec une :premium-campaign.',\n        'title'     => 'Stockage plein',\n    ],\n    'delete'    => [\n        'success'   => '[0] Aucun élément supprimé|[1] Un élément supprimé|{2,*} :count éléments supprimés',\n    ],\n    'download'  => [\n        'errors'    => [\n            'copy_failed'           => 'Nos serveurs n\\'ont pas pu télécharger l\\'image donnée.',\n            'gallery_full_free'     => 'L\\'espace de stockage de la galerie est plein. Activer les fonctions premium pour obtenir plus d\\'espace de stockage.',\n            'gallery_full_premium'  => 'L\\'espace de stockage de la galerie est plein. Supprimer d\\'abord les fichiers inutilisés.',\n            'invalid_format'        => 'Le fichier n\\'est pas un format de fichier valide.',\n            'too_big'               => 'Le fichier est trop lourd.',\n            'unauthorized'          => 'Aucun de tes rôles n\\'a l\\'autorisation de \"ajouter à la galerie\".',\n        ],\n    ],\n    'file'      => [\n        'saved' => 'Sauvegardé',\n    ],\n    'filters'   => [\n        'only_unused'   => 'Afficher uniquement les fichiers inutilisés',\n        'sort'          => 'Ordonner',\n    ],\n    'move'      => [\n        'success'   => '[0] Aucun élément déplacé|[1] Un élément déplacé|{2,*} :count éléments déplacés',\n    ],\n    'update'    => [\n        'home'      => 'Dossier d\\'accueil',\n        'success'   => '[0] Aucun élément mise à jour|[1] Mise à jour d\\'un élément|{2,*} :count éléments mis à jour',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Désélectionner tout',\n    'documentation' => 'En savoir plus sur cette fonctionnalité dans notre documentation.',\n    'done'          => 'Terminé',\n    'learn-more'    => 'En savoir plus',\n    'no'            => 'Non',\n    'required'      => 'Requit',\n    'select_all'    => 'Tout sélectionner',\n    'success'       => [\n        'created'           => ':name créé.',\n        'deleted'           => ':name retiré.',\n        'deleted-cancel'    => ':name retiré. :cancel.',\n        'updated'           => ':name modifié.',\n    ],\n    'tutorial'      => 'Voir le tuto',\n    'yes'           => 'Oui',\n];\n"
  },
  {
    "path": "lang/fr/genres.php",
    "content": "<?php\n\nreturn [\n    'alternate_history' => 'Histoire alternative',\n    'cyberpunk'         => 'Cyberpunk',\n    'fantasy'           => 'Fantaisie',\n    'historical'        => 'Historique',\n    'many_worlds'       => 'Plusieurs mondes',\n    'modern'            => 'Moderne',\n    'occult'            => 'Occulte',\n    'post_apocalyptic'  => 'Post-apocalyptique',\n    'pulp'              => 'Pulp',\n    'science_fantasy'   => 'Science-fantastique',\n    'science_fiction'   => 'Science-fiction',\n    'space_opera'       => 'Space opera',\n    'steampunk'         => 'Steampunk',\n    'superhero'         => 'Super-héros',\n    'urban_fantasy'     => 'Fantaisie urbaine',\n    'western'           => 'Western',\n];\n"
  },
  {
    "path": "lang/fr/header.php",
    "content": "<?php\n\nreturn [\n    'news'              => [\n        'title' => 'Nouveautés Kanka',\n    ],\n    'notifications'     => [\n        'dismiss'   => 'Éliminer',\n        'no-unread' => 'Aucune notification non lue',\n        'read_all'  => 'Tout lire',\n    ],\n    'qq'                => [\n        'tooltip'   => 'Créer une entrée ou un article',\n    ],\n    'toggle_navigation' => 'Basculer la navigation',\n    'user'              => [\n        'settings'      => 'Paramêtres',\n        'sign-out'      => 'Se déconnecter',\n        'upgrade'       => 'S\\'abonner',\n        'your-profile'  => 'Ton profile',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/helpers.php",
    "content": "<?php\n\nreturn [\n    'api-filters'       => [\n        'description'   => 'Les filtres suivants sont disponibles pour l\\'API :name.',\n        'title'         => 'Filtres d\\'API',\n    ],\n    'attributes'        => [\n        'link'  => 'Options des propriétés',\n    ],\n    'calendar-widget'   => [\n        'info'  => 'Pour quoi ces événements sont-ils affichés?',\n        'title' => 'Widget de calendrier',\n    ],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Comment utiliser les filtres',\n    ],\n    'link'              => [\n        'description'   => 'Un lien vers une entrée peut être facilement inséré en utilisant \\'@\\' dans le text. \\'#\\' peut être utilisé pour avoir une liste de mois depuis les calendriers de la campagne.',\n    ],\n    'public'            => 'Une vidéo sur Youtube explique comment fonctionne les campagnes publiques.',\n    'troubleshooting'   => [\n        'description'       => 'Un membre de l\\'équipe Kanka t\\'as envoyé vers cette page. Sélectionnes une campagne dans la liste pour générer un jeton. Ce jeton nous permettra de rejoindre la campagne en tant qu\\'administrateur.',\n        'errors'            => [\n            'token_exists'  => 'Un jeton existe déjà pour :campaign.',\n        ],\n        'save_btn'          => 'Générer le jeton',\n        'select_campaign'   => 'Sélectionner une campagne',\n        'subtitle'          => 'J\\'ai besoin d\\'aide!',\n        'success'           => 'Copies le jeton et envois le à un membre de l\\'équipe de Kanka.',\n        'title'             => 'Dépannage',\n    ],\n    'widget-filters'    => [\n        'description'   => 'Les entrées affichées peuvent être filtrées en indiquant une liste de champs et leur valeur. Par example, utiliser :example pour filter les personnages morts et de type NPC.',\n        'link'          => 'filtres de widget',\n        'title'         => 'Filtres de widget de tableau de bord',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/history.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'show-old'  => 'Modifications',\n    ],\n    'cta'       => 'Afficher un journal de toutes les modifications récentes faites à la campagne.',\n    'empty'     => 'Aucune valeure',\n    'fields'    => [\n        'action'    => 'Action',\n        'category'  => 'Catégorie',\n        'details'   => 'Détails',\n        'when'      => 'Quand',\n        'who'       => 'Qui',\n    ],\n    'filters'   => [\n        'all-actions'   => 'Toutes les actions',\n        'all-users'     => 'Tous les membres',\n        'no-results'    => 'Aucun résultat à afficher. Essayes avec d\\'autres filtres ou reviens après avoir fait des modifications aux entrées de la campagne.',\n    ],\n    'helpers'   => [\n        'base'      => 'Cette interface contient les modifications récentes apportées aux entrées de la campagne jusqu\\'à :amount mois, en affichant les modifications les plus récentes en premier.',\n        'changes'   => 'Les champs suivants avaient précédemment ces valeurs.',\n    ],\n    'log'       => [\n        'create'        => ':user a créé :entity',\n        'create_post'   => ':user a créé la note \":post\" sur :entity',\n        'delete'        => ':user a supprimé :entity',\n        'delete_post'   => ':user a supprimé une note sur :entity',\n        'reorder_post'  => ':user a réordonné les articles sur :entity',\n        'restore'       => ':user a restauré :entity',\n        'update'        => ':user a modifié :entity',\n        'update_post'   => ':user a supprimé la note \":post\" sur :entity',\n        'update_tree'   => ':user a modifié l\\'arbre de famille de :entity',\n    ],\n    'title'     => 'Historique',\n    'unknown'   => [\n        'entity'    => 'une entrée inconnue',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/items.php",
    "content": "<?php\n\nreturn [\n    'bulk'          => [\n        'creators'  => [\n            'action'    => 'Action pour les créateurs',\n            'remove'    => 'Supprimer tous les créateurs',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Ajouter un objet',\n    ],\n    'fields'        => [\n        'creators'      => 'Créateurs',\n        'is_equipped'   => 'Équipé',\n        'price'         => 'Prix',\n        'size'          => 'Taille',\n        'weight'        => 'Poids',\n    ],\n    'hints'         => [],\n    'lists'         => [\n        'empty' => 'Ajoute des armes, des artefacts ou des objets importants à ton monde.',\n    ],\n    'placeholders'  => [\n        'price' => 'Prix de l\\'objet',\n        'size'  => 'Taille, Dimensions, Capacité',\n        'type'  => 'Arme, Potion, Coffre',\n        'weight'=> 'Poid de l\\'objet',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Inventaires',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouveau Journal',\n    ],\n    'fields'        => [\n        'author'    => 'Auteur',\n        'date'      => 'Date',\n    ],\n    'lists'         => [\n        'empty' => 'Créé des entrées de journal pour suivre tes aventures, les pensées de tes personnages, ou encore les résumés et la préparation des sessions.',\n    ],\n    'placeholders'  => [\n        'author'    => 'Qui a écrit le journal',\n        'date'      => 'Date du journal',\n        'type'      => 'Session, One Shot, Brouillon',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Catalan',\n        'cs'    => 'Tchèque',\n        'de'    => 'Allemand',\n        'el'    => 'Grèque',\n        'en'    => 'Anglais',\n        'en-US' => 'Anglais Américain',\n        'es'    => 'Espagnol',\n        'fr'    => 'Français',\n        'gl'    => 'Galicien',\n        'he'    => 'Hebreux',\n        'hr'    => 'Croate',\n        'hu'    => 'Hongrois',\n        'it'    => 'Italien',\n        'nb'    => 'Norvégien (Bokmal)',\n        'nl'    => 'Hollandais',\n        'pl'    => 'Polonais',\n        'pt-BR' => 'Portugais Brésilien',\n        'ru'    => 'Russe',\n        'sk'    => 'Slovaque',\n        'tr'    => 'Turque',\n    ],\n    'header'=> 'Langues',\n];\n"
  },
  {
    "path": "lang/fr/lists.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn' => 'En savoir plus sur cette catégorie',\n        'public'=> 'Voir des examples',\n    ],\n    'empty'     => [\n        'title' => 'Pas encore de :plural.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/locations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Ajouter un lieu',\n    ],\n    'fields'        => [\n        'is_destroyed'  => 'Détruit',\n        'title'         => 'Titre',\n    ],\n    'helpers'       => [\n        'characters'    => 'Afficher tous les personnages dans ce lieu et sous-lieux, ou seulement ceux qui sont ici.',\n    ],\n    'hints'         => [\n        'is_destroyed'  => 'Ce lieu est détruit.',\n    ],\n    'lists'         => [\n        'empty' => 'Ajoutez ta première ville, taverne ou ruine cachée pour ancrer ton monde.',\n    ],\n    'placeholders'  => [\n        'title' => 'Titre',\n        'type'  => 'Village, Royaume, Ruine',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Activer le mode d\\'édition',\n        'exit-edit-mode'    => 'Sortir du mode d\\'édition',\n        'finish-drawing'    => 'Finir de dessiner le polygone',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Clique sur la carte pour commencer à dessiner le polygon',\n    ],\n    'toggle'        => 'Ouvrir/fermer les groupes',\n];\n"
  },
  {
    "path": "lang/fr/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Ajouter un nouveau groupe',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Retiré :count groupe.|[2,*] Retiré :count groupes.',\n        'patch'     => '{1} Modifié :count groupe.|[2,*] Modifié :count groupes.',\n    ],\n    'create'        => [\n        'helper'    => 'Ajoute un nouveau groupe à :name. Des marqueurs pourront ensuite être attribués à ce groupe.',\n        'success'   => 'Groupe :name créé.',\n        'title'     => 'Nouveau Groupe',\n    ],\n    'delete'        => [\n        'success'   => 'Groupe :name supprimé.',\n    ],\n    'edit'          => [\n        'success'   => 'Groupe :name modifié.',\n        'title'     => 'Modifier le groupe :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Afficher les marqueurs du groupe',\n        'parent'    => 'Groupe parent',\n        'position'  => 'Position',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Les marqueurs peuvent être groupé ensemble dans des groupes. Chaque groupe peut être activé pour rapidement afficher ou cacher les marqueurs de celui-ci.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Si sélectionné, les marqueurs du groups seront affichés par défaut.',\n    ],\n    'index'         => [\n        'title' => 'Groupes de :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'Tu ne peux pas ajouter d\\'autres groupes à moins d\\'en supprimer un existant.',\n            'limit'     => 'Cette carte a atteint sa limite de groupes',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Cette carte a atteint sa limite de :limit groupes',\n            'upgrade'   => 'Passe à une campagne premium pour ajouter jusqu\\'à :limit groupes et débloquer encore plus de flexibilité créative.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Magasins, trésors, PNJs',\n        'position'      => 'Première',\n        'position_list' => 'Après :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Enregister l\\'ordre',\n        'success'   => '{1} Réordonné :count groupe.|[2,*] Réordonné :count groupes.',\n        'title'     => 'Réordonner les groupes',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Ajouter une nouvelle couche',\n    ],\n    'base'          => 'Couche de base',\n    'bulks'         => [\n        'delete'    => '{1} Retiré :count couche.|[2,*] Retiré :count couches.',\n        'patch'     => '{1} Modifié :count couche.|[2,*] Modifié :count couches.',\n    ],\n    'create'        => [\n        'success'   => 'Couche :name créée.',\n        'title'     => 'Nouvelle Couche',\n    ],\n    'delete'        => [\n        'success'   => 'Couche :name supprimée.',\n    ],\n    'edit'          => [\n        'success'   => 'Couche :name modifiée.',\n        'title'     => 'Modifier la couche :name',\n    ],\n    'fields'        => [\n        'position'  => 'Position',\n        'type'      => 'Type de couche',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Définis des couches sur une carte pour changer l\\'image d\\'arrière-plan affichée sous les marqueurs.',\n        'is_real'   => 'Les couches ne sont pas disponibles quand la carte utilise OpenStreetMaps.',\n    ],\n    'index'         => [\n        'title' => 'Couches de :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'Tu ne peux pas ajouter d\\'autres couches à moins d\\'en supprimer une existante.',\n            'limit'     => 'Cette carte a atteint sa limite de couches',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Cette carte a atteint sa limite de :limit couches',\n            'upgrade'   => 'Passe à une campagne premium pour ajouter jusqu\\'à :limit couches et débloquer encore plus de flexibilité créative.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Sous-sol, Niveau 2, Epave',\n        'position'      => 'Première',\n        'position_list' => 'Après :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Enregistrer le nouvel ordre',\n        'success'   => '{1} Réordonné :count couche.|[2,*] Réordonné :count couches.',\n        'title'     => 'Réordonné les couches',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Overlay',\n        'overlay_shown' => 'Overlay (affiché par défaut)',\n        'standard'      => 'Standard',\n    ],\n    'types'         => [\n        'overlay'       => 'Overlay (affiché par défaut la couche active)',\n        'overlay_shown' => 'Overlay affiché par défaut',\n        'standard'      => 'Couche standard (basculer entre les couches)',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Écrire une entrée personnalisés pour ce marqueur.',\n        'remove'            => 'Supprimer le marqueur',\n        'reset-polygon'     => 'Réinitialiser les positions',\n        'save_and_explore'  => 'Sauvegarder et explorer',\n        'start-drawing'     => 'Commencer à dessiner',\n        'update'            => 'Modifier le marqueur',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Retiré :count marqueur.|[2,*] Retiré :count marqueurs.',\n        'patch'     => '{1} Modifié :count marqueur.|[2,*] Modifié :count marqueurs.',\n    ],\n    'circle_sizes'  => [\n        'custom'    => 'Personnalisé',\n        'huge'      => 'Énorme',\n        'large'     => 'Grand',\n        'small'     => 'Petit',\n        'standard'  => 'Moyen',\n        'tiny'      => 'Minuscule',\n    ],\n    'create'        => [\n        'success'   => 'Marqueur :name créé.',\n        'title'     => 'Nouveau marqueur',\n    ],\n    'delete'        => [\n        'success'   => 'Marqueur :name supprimé.',\n    ],\n    'details'       => [\n        'from-entity'   => 'De l\\'entrée',\n    ],\n    'edit'          => [\n        'success'   => 'Marqueur :name modifié.',\n        'title'     => 'Modifier le marqueur :name',\n    ],\n    'fields'        => [\n        'bg_colour'     => 'Couleur de fond',\n        'circle_radius' => 'Radius du cercle',\n        'copy_elements' => 'Copier les éléments',\n        'custom_icon'   => 'Icône personnalisée',\n        'custom_shape'  => 'Forme personnalisée',\n        'font_colour'   => 'Couleur d\\'icône',\n        'group'         => 'Groupe de marqueur',\n        'icon'          => 'Icône',\n        'is_draggable'  => 'Déplaçable',\n        'latitude'      => 'Latitude',\n        'longitude'     => 'Longitude',\n        'opacity'       => 'Opacité',\n        'pin_size'      => 'Taille du marqueur',\n        'polygon_style' => [\n            'stroke'            => 'Couleur de la bordure',\n            'stroke-opacity'    => 'Opacité de la bordure',\n            'stroke-width'      => 'Taille de la bordure',\n        ],\n        'popupless'     => 'Infobulle',\n        'size'          => 'Taille',\n    ],\n    'helpers'       => [\n        'base'                      => 'Ajouter des marqueurs en cliquant sur la carte.',\n        'copy_elements'             => 'Copier les groupes, couches, et marqueurs.',\n        'copy_elements_to_campaign' => 'Copier les groupes, couches, et marqueurs de la carte. Les marqueurs liés à des entrées seront transformés en marqueurs standards.',\n        'css'                       => 'Définir une class CSS personnalisés pour le marqueur.',\n        'custom_icon_v2'            => 'Utilises des icônes de :fontawesome, :rpgawesome, ou avec un SVG personalisé. Découvres comment dans notre :docs.',\n        'custom_radius'             => 'Sélectionner l\\'option personnalisée pour définir une taille.',\n        'draggable'                 => 'Cocher pour permettre au marqueur d\\'être déplacé en mode exploration.',\n        'is_popupless'              => 'Désactiver l\\'infobulle lors du survol du marqueur.',\n        'label'                     => 'Un label est affiché comme bloque de texte sur la carte. Le text affiché sera le nom du marqueur ou le nom de l\\'entrée liée.',\n        'polygon'                   => [\n            'edit'  => 'Cliquer sur le carte pour ajouter des coordonnées au polygone.',\n        ],\n    ],\n    'hints'         => [\n        'entry' => 'Modifier le marqueur pour y écrire une entrée personnalisée.',\n    ],\n    'icons'         => [\n        'custom'        => 'Personnalisé',\n        'entity'        => 'Entrée',\n        'exclamation'   => 'Point d\\'exclamation',\n        'marker'        => 'Marqueur',\n        'question'      => 'Point d\\'interrogation',\n    ],\n    'index'         => [\n        'title' => 'Marqueurs de :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Dessines des formes polygonales personnalisées pour représenter les bordures et autres formes inégales.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'Essaie :example1 ou :example2',\n        'custom_shape'  => '100,100, 200,240, 340,110',\n        'name'          => 'Nom du marqueur',\n    ],\n    'presets'       => [\n        'helper'    => 'Cliques sur un préréglage pour le charger, ou crées-en un nouveau.',\n    ],\n    'shapes'        => [\n        '0' => 'Cercle',\n        '1' => 'Carré',\n        '2' => 'Triangle',\n        '3' => 'Personnalisée',\n    ],\n    'sizes'         => [\n        '0' => 'Minuscule',\n        '1' => 'Standard',\n        '2' => 'Petit',\n        '3' => 'Grand',\n        '4' => 'Enorme',\n    ],\n    'tabs'          => [\n        'circle'    => 'Cercle',\n        'label'     => 'Label',\n        'marker'    => 'Marqueur',\n        'polygon'   => 'Polygone',\n        'preset'    => 'Préréglage',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Retour à :name',\n        'edit'      => 'Modifier la carte',\n        'explore'   => 'Explorer',\n    ],\n    'create'        => [\n        'title' => 'Nouvelle carte',\n    ],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'Une erreur est survenue durant le traitement de la carte. Contactes l\\'équipe sur :discord pour de l\\'aide.',\n            'running'   => [\n                'edit'      => 'La carte ne peut pas être modifiée pendant qu\\'elle est en traitement.',\n                'explore'   => 'La carte ne peut pas être affichée pendant qu\\'elle est en traitement.',\n                'time'      => 'Ceci peut prendre plusieurs minutes à plusieurs heures et dépend de la taille de la carte.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'La carte a besoin d\\'une image pour être affichée sur le tableau de bord.',\n        ],\n        'explore'   => [\n            'missing'   => 'Il faut ajouter une image à la carte avant de pouvoir l\\'explorer.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Marqueur',\n        'center_x'          => 'Longitude par défaut',\n        'center_y'          => 'Latitude par défaut',\n        'centering'         => 'Centrage',\n        'distance_measure'  => 'Mesure de distance',\n        'distance_name'     => 'Unité de distance',\n        'grid'              => 'Grille',\n        'has_clustering'    => 'Grouper les marqueurs',\n        'initial_zoom'      => 'Zoom initial',\n        'is_real'           => 'Utiliser OpenStreetMaps',\n        'max_zoom'          => 'Zoom maximal',\n        'min_zoom'          => 'Zoom minimal',\n        'tabs'              => [\n            'coordinates'   => 'Coordonnées',\n            'marker'        => 'Marqueur',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'Modifier les valeurs par défaut défini le centre de la carte lors de l\\'affichage de celle-ci. Ci les champs sont vides, le centre de la carte sera utilisé.',\n        'centering'             => 'Centrer la carte sur un marqueur est prioritaire sur les coordinnées.',\n        'chunked_zoom'          => 'Les cartes fragmentées ont leurs paramètres minimum et maximum définis par le processus de segmentation.',\n        'distance_measure'      => 'Définir une unité de distance activera l\\'outil de calcul de distance dans le mode d\\'exploration.',\n        'distance_measure_2'    => 'Pour que 100 pixels mesurent 1 kilomètre, choisir une valeur de 0.0041.',\n        'grid'                  => 'Définir une taille de grille qui s\\'affichera dans le mode d\\'exploration.',\n        'has_clustering'        => 'Regrouper automatiquement les marqueurs lorsqu\\'ils sont proches les uns des autres.',\n        'initial_zoom'          => 'Le zoom initial est utilisé pour afficher la carte quand celle-ci est chargée. La valeur par défaut est de :default, la valeur max est de :max et la valeur min est de :min.',\n        'is_real'               => 'Sélectionner cette option utilisera les données d\\'OpenStreetMaps pour afficher le monde réel au lieu de l\\'image téléchargée. Cette option désactive les couches.',\n        'max_zoom'              => 'La valeur maximale à laquelle la carte peut être agrandie. La valeur par défaut est de :default, et la valeur maximale est de :max.',\n        'min_zoom'              => 'La valeur minimale à laquelle la carte peut être rétrécie. La valeur par défaut est de :default, et la valeur minimale est de :min.',\n        'missing_image'         => 'Enregister la carte avec une image avant de pouvoir ajouter des couches et des marqueurs.',\n    ],\n    'lists'         => [\n        'empty' => 'Télécharge une carte pour visualiser les lieux et explorer la géographie de ton monde.',\n    ],\n    'panels'        => [\n        'groups'    => 'Groupes',\n        'layers'    => 'Couches',\n        'legend'    => 'Légende',\n        'markers'   => 'Marqueurs',\n        'settings'  => 'Paramètres',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Laisser vide pour afficher au milieu',\n        'center_x'      => 'Laisser vide pour afficher au milieu',\n        'center_y'      => 'Laisser vide pour afficher au milieu',\n        'distance_name' => 'Km, miles, pieds, hamburgers',\n        'grid'          => 'Distance entre les éléments de la grille. Laisser vide pour cacher la grille.',\n        'name'          => 'Nom de la carte',\n        'type'          => 'Donjon, Ville, Univers',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Cartes',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'La cartes est en traitement. Ce processus peut prendre plusieurs minutes à plusieurs heures.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'member'    => 'Devenir un membre',\n        'remove_v5' => 'Kanka, c\\'est un projet de deux potes. Soutiens notre aventure et profites d\\'une expérience sans pub — pour moins qu\\'une choppe à la taverne.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouvelle Note',\n    ],\n    'fields'        => [\n        'notes' => 'Sous-notes',\n    ],\n    'lists'         => [\n        'empty' => 'Stocke les idées, références, règles ou informations qui ne trouvent pas leur place ailleurs.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Choix d\\'une note parent',\n        'type'  => 'Religion, Race, Moyen de transport',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/notifications.php",
    "content": "<?php\n\nreturn [\n    'apps'              => [\n        'discord'   => [\n            'invalid'   => 'Ton jeton Discord a expiré. Prière de resynchroniser ton compte Discord et ton compte Kanka.',\n        ],\n    ],\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'Ton application pour rejoindre la campagne :campaign a été approuvée.',\n            'approved_message'      => 'Ton application pour rejoindre la campagne :campaign a été approuvée. Raison: :reason',\n            'new'                   => 'Nouvelle application pour :campaign.',\n            'rejected'              => 'Ton application pour rejoindre la campagne :campaign a été rejetée. Raison: :reason',\n            'rejected_no_message'   => 'Ton application pour rejoindre la campagne :campaign a été rejetée.',\n        ],\n        'asset_export'      => 'Un export des images de la campagne est disponible. Ce liens sera disponible durant :time minutes.',\n        'boost'             => [\n            'add'           => 'La campagne :campaign est à présent boostée par :user.',\n            'remove'        => ':user ne boost plus la campagne :campaign.',\n            'superboost'    => 'La campagne :campaign est superboostée par :user.',\n        ],\n        'created'           => 'Tu as créé :campaign.',\n        'deleted'           => 'La campagne :campaign a été supprimée.',\n        'export'            => 'Un export de la campagne est disponible. Ce lien est disponible pendant :time minutes.',\n        'export_error'      => 'Une erreur est survenue lors de l\\'export de la campagne. Prière de nous contacter si ce problème persiste.',\n        'hidden'            => 'La campagne :campaign est maintenant cachée de la page des campagnes publiques.',\n        'import'            => [\n            'csv_ready'     => 'L\\'import CSV pour :campaign est prêt.',\n            'csv_success'   => ':count entrées importées avec succès via import CSV dans :campaign.',\n            'failed'        => 'L\\'import de la campagne :campaign a échoué.',\n            'success'       => 'L\\'import de la campagne :campaign est terminé.',\n        ],\n        'join'              => ':user a rejoint la campagne :campaign.',\n        'leave'             => ':user a quitté la campagne :campaign.',\n        'new_owner'         => 'Tu es devenu un admin de :campaign.',\n        'plugin'            => [\n            'deleted'   => 'Le plugin :plugin a été supprimé du marketplace et retiré de la campagne :campaign.',\n        ],\n        'premium'           => [\n            'add'       => 'Les fonctionnalités Premium ont été débloquées pour la campagne :campaign par :user.',\n            'remove'    => ':user ne débloque plus les fonctionnalités Premium pour la campagne :campaign.',\n        ],\n        'removed-image'     => 'L\\'image ou l\\'entête de :entity a été retirée dû à une plainte pour droit d\\'auteur.',\n        'role'              => [\n            'add'       => 'Tu es maintenant membre du rôle :role de la campagne :campaign.',\n            'remove'    => 'Tu ne fais plus partie du rôle :role de la campagne :campaign.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => 'Le membre de l\\'équipe Kanka :user a rejoins la campagne :campaign.',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Tout supprimer',\n        'success'   => 'Notifications supprimées.',\n        'title'     => 'Vider les notifications',\n    ],\n    'features'          => [\n        'approved'  => 'Ton idée :feature a été acceptée.',\n        'finished'  => 'Ton idée :feature est maintenant disponible dans Kanka!',\n        'rejected'  => 'Ton idée :feature a été rejetée, raison: :reason.',\n    ],\n    'header'            => ':count notifications',\n    'index'             => [\n        'title' => 'Notifications',\n    ],\n    'map'               => [\n        'chunked'   => 'La carte :name a fini d\\'être traitée et est maintenant utilisable.',\n    ],\n    'no_notifications'  => 'Il n\\'y a actuellement aucune notification.',\n    'plugins'           => [\n        'comments'  => [\n            'new_comment'   => ':user a laissé un nouveau commentaire sur le plugin :plugin.',\n            'new_reply'     => ':user a répondu à ton commentaire dans :plugin.',\n        ],\n    ],\n    'subscriptions'     => [\n        'charge_fail'   => 'Une erreur est survenue lors du paiement. Kanka va ressayer encore une fois. Si rien ne change, prière de nous contacter.',\n        'deleted'       => 'Ton abonnement à Kanka a été annulé après trop d\\'essais ratés avec ta méthode de paiement. Va sur la page d\\'abonnement et mets à jour tes données de paiement.',\n        'ended'         => 'Ton abonnement a Kanka est terminée. Tes campagnes premium et rôles Discord ont été retirés. Nous espérons te revoir bientôt!',\n        'failed'        => 'Problème lors du traitement de la méthode de paiement, merci de les mettre à jour.',\n        'started'       => 'L\\'abonnement à Kanka a commencé.',\n        'trial'         => 'Ton essai gratuit de Kanka est terminé. Nous espérons que tu l\\'as apprécié et nous espérons te revoir bientôt!',\n    ],\n    'unread'            => 'Nouvelle notification',\n];\n"
  },
  {
    "path": "lang/fr/onboarding/attributes.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Les propriétés te permettent d\\'ajouter à :name de petites infos réutilisables, comme l\\'âge, les points de vie, le rang dans une faction ou n\\'importe quelles stats perso que tu suis. C\\'est parfait pour des données que tu veux consulter, trier ou réutiliser sur plusieurs entrées',\n    'title' => 'Stocke des données structurées pour cette entrée',\n];\n"
  },
  {
    "path": "lang/fr/onboarding/characters.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'C\\'est suffisant pour commencer.',\n    'text'      => 'Concentre-toi sur l\\'essentiel : le nom, une courte description et un ou deux traits marquants. Tu pourras ajouter plus tard des détails comme les liens, les propriétés et les portraits',\n    'title'     => 'Crée ton premier personnage',\n];\n"
  },
  {
    "path": "lang/fr/onboarding/locations.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'Garde ça simple pour l\\'instant',\n    'text'      => 'Commence petit. Donne un nom au lieu et ajoute une phrase qui explique pourquoi il compte. Tu pourras ensuite développer avec des cartes, des habitants et des lieux imbriqués une fois que le monde prend forme',\n    'title'     => 'Crée ton premier lieu',\n];\n"
  },
  {
    "path": "lang/fr/onboarding/posts.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Les articles te permettent de séparer le texte public des notes privées, des secrets réservés au MJ, et des infos complémentaires. Crée autant d\\'articles que tu veux et choisis qui peut voir chacun',\n    'title' => 'Utilise les articles pour les secrets et les détails en plus',\n];\n"
  },
  {
    "path": "lang/fr/onboarding/reminders.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Crée des rappels pour les dates limites, les moments importants dans l\\'histoire, les anniversaires, ou tout ce qui est lié à :name et que tu ne veux pas oublier. Les rappels que tu ajoutes ici s\\'affichent sur cette page et sur n\\'importe quelle date du calendrier à laquelle tu les relies.',\n    'title' => 'Garde ici toutes les infos qui bougent vite',\n];\n"
  },
  {
    "path": "lang/fr/onboarding/tags.php",
    "content": "<?php\n\nreturn [\n    'npcs'  => 'PNJs',\n];\n"
  },
  {
    "path": "lang/fr/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouvelle Organisation',\n    ],\n    'fields'        => [\n        'is_defunct'    => 'Défunte',\n        'members'       => 'Membres',\n    ],\n    'hints'         => [\n        'is_defunct'    => 'Cette organisation n\\'est plus en opération.',\n    ],\n    'lists'         => [\n        'empty' => 'Créé des guildes, des factions ou des sociétés secrètes pour façonner la structure du pouvoir dans ton monde.',\n    ],\n    'members'       => [\n        'actions'       => [\n            'add_multiple'  => 'Ajouter des membres',\n        ],\n        'create'        => [\n            'helper'            => 'Ajouter un ou plusieurs membres à :name.',\n            'success_multiple'  => '{1} Ajouté :count membre à :name.|[2,*] Ajouté :count membres à :name.',\n        ],\n        'destroy'       => [\n            'success'   => 'Membre retiré de l\\'organisation',\n        ],\n        'edit'          => [\n            'helper'    => 'Change le status de membre pour :name.',\n            'title'     => 'Modifier Membre pour :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Superieur',\n            'pinned'    => 'Épinglé',\n            'role'      => 'Rôle',\n            'status'    => 'Status de membre',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Tous les personnages qui sont membres de cette organisation et des sous-organisations.',\n            'members'       => 'Tous les personnages directement membres de cette organisation.',\n            'pinned'        => 'Définir sur le membre doit être affiché dans les épingles des entrées associées.',\n        ],\n        'pinned'        => [\n            'both'  => 'Les deux',\n            'none'  => 'Aucun',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Qui est le supérieur de ce membre',\n            'role'      => 'Chef, Membre, Prêtre, Maître d\\'arme',\n        ],\n        'status'        => [\n            'active'    => 'Membre actif',\n            'inactive'  => 'Membre inactif',\n            'unknown'   => 'Status inconnu',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Culte, Bande, Rebellion',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/pagination.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'next'      => 'Suivant &raquo;',\n    'previous'  => '&laquo; Précédent',\n    'showing' => 'Affichant',\n    'of' => 'de',\n    'to' => 'à',\n    'results' => 'résultats',\n];\n"
  },
  {
    "path": "lang/fr/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Il y a un souci avec la saisie.',\n        'title'         => 'Whoops!',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/passwords.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n    'password' => 'Les mots de passe doivent contenir au moins six caractères et être identiques.',\n    'reset' => 'Votre mot de passe a été réinitialisé!',\n    'sent' => 'Nous vous avons envoyé par courriel le lien de réinitialisation du mot de passe!',\n    'token' => \"Ce jeton de réinitialisation du mot de passe n'est pas valide.\",\n    'user' => \"Aucun utilisateur n'a été trouvé avec cette adresse courriel.\",\n];\n"
  },
  {
    "path": "lang/fr/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/permissions.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'delete'    => 'Permission de supprimer cet élément',\n        'edit'      => 'Permission de modifier cet élément',\n        'view'      => 'Permission de voir cet élément',\n    ],\n    'members'   => [\n        'inherited' => ':membre peut déjà faire ça en étant membre du rôle :role.',\n    ],\n    'roles'     => [\n        'inherited' => 'Le rôle :role peut déjà faire ça pour la catégorie :name.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/pins.php",
    "content": "<?php\n\nreturn [\n    'learn-more'    => 'En savoir plus sur les épingles dans la documentation.',\n    'options'       => [\n        'no'    => 'Désépinglé',\n        'yes'   => 'Épinglé sur la page de présentation de l\\'entrée',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/playstyles.php",
    "content": "<?php\n\nreturn [\n    'casual-drop-in-friendly'       => 'Casual / Ouvert aux nouveaux',\n    'character-focused'             => 'Axé personnage',\n    'combat-focused'                => 'Axé combat',\n    'episodic-one-shot-friendly'    => 'Épisodique / One-shot',\n    'exploration-focused'           => 'Axé exploration',\n    'linear-gm-led'                 => 'Linéaire / Dirigé par le MJ',\n    'long-term-campaign'            => 'Campagne longue durée',\n    'narrative-first'               => 'Narratif avant tout',\n    'roleplay-heavy'                => 'RP intensif',\n    'roleplay-light'                => 'RP léger',\n    'rules-light'                   => 'Règles légères',\n    'sandbox-player-driven'         => 'Bac à sable / Dirigé par les joueurs',\n    'serious-immersive'             => 'Sérieux / Immersif',\n    'story-driven'                  => 'Axé sur l\\'histoire',\n    'tactical-crunchy'              => 'Tactique / Technique',\n];\n"
  },
  {
    "path": "lang/fr/post_layouts.php",
    "content": "<?php\n\nreturn [\n    'character_orgs'        => 'Organisations de personnage',\n    'connection_map'        => 'Carte des relations',\n    'helper'                => 'Cet article est configuré pour afficher la sous-page :subpage de l\\'entrée.',\n    'location_characters'   => 'Personnages de lieu',\n    'location_events'       => 'Événements de lieu',\n    'location_quests'       => 'Quêtes de lieu',\n    'pitch'                 => [\n        'custom'    => 'Affiche le contenu des sous-pages de cette entrée directement dans l\\'aperçu avec les mises en page d\\'articles. Par exemple, affiche l\\'inventaire de :entity.',\n        'title'     => 'Mise en formes avancées',\n    ],\n    'premium'               => 'Certaines options de mise en page sont désactivées car elles nécessitent une campagne premium.',\n    'quest_elements'        => 'Éléments de quête',\n];\n"
  },
  {
    "path": "lang/fr/posts/templates.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'set'   => 'Définir comme modèle réutilisable',\n        'unset' => 'Retirer comme modèle réutilisable',\n    ],\n    'helper'    => 'Les articles suivants ont été définis comme modèles réutilisables.',\n    'tab'       => 'Charger depuis les modèles',\n    'tooltips'  => [\n        'click-to-edit' => 'Modifier cet article modèle',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouvel article',\n    ],\n    'fields'        => [\n        'description'   => 'Description',\n        'layout'        => 'Mise en page',\n        'name'          => 'Nom',\n    ],\n    'helpers'       => [\n        'new'           => 'Ajouter un nouvel article à cette entrée.',\n        'visibility'    => 'Modifier la visibilité de l\\'article :name.',\n    ],\n    'move'          => [\n        'copy'      => [\n            'helper'    => 'Garder une copie de l\\'article sur :name.',\n        ],\n        'helper'    => 'Déplacer ou copier l\\'article :name vers une autre entrée.',\n        'title'     => 'Déplacer l\\'article',\n    ],\n    'permissions'   => [\n        'actions'   => [\n            'members'   => 'Ajouter des membres',\n            'roles'     => 'Ajouter des rôles',\n        ],\n        'helpers'   => [\n            'members'   => 'Ajouter un ou plusieurs membres qui auront des permissions spéciales sur l\\'article.',\n            'roles'     => 'Ajouter un ou plusieurs rôles qui auront des permissions spéciales sur l\\'article.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Nom de l\\'article',\n    ],\n    'position'      => [\n        'dont_change'   => 'Tel quel',\n        'first'         => 'Premier',\n        'last'          => 'Dernier',\n    ],\n    'remove'        => [\n        'title' => 'Supprimer l\\'article',\n    ],\n    'visibility'    => [\n        'helper'    => 'Modifier la visibilité de l\\'article :name.',\n        'title'     => 'Visibilité de l\\'article',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Créer un nouveau préréglage',\n    ],\n    'create'        => [\n        'success'   => 'Préréglage :name créé.',\n        'title'     => 'Nouveau préréglage',\n    ],\n    'destroy'       => [\n        'success'   => 'Préréglage :name supprimé.',\n    ],\n    'edit'          => [\n        'success'   => 'Préréglage :name modifié.',\n        'title'     => 'Modifier le préréglage :name',\n    ],\n    'fields'        => [\n        'name'  => 'Nom du préréglage',\n    ],\n    'lists'         => [\n        'empty' => 'Il n\\'y a actuellement aucun préréglage dans la campagne.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Le nom du préréglage',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/profiles.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => [\n        'success'   => 'Photo de profil modifiée.',\n    ],\n    'edit'          => [\n        'success'   => 'Profil modifié',\n    ],\n    'fields'        => [\n        'avatar'                    => 'Avatar',\n        'bio'                       => 'Biographie',\n        'email'                     => 'Email',\n        'hide_subscription'         => 'Cacher mon nom du :hall_of_fame.',\n        'last_login_share'          => 'Partager la date de ma dernière connexion avec les autres membres de mes campagnes.',\n        'link'                      => 'Lien social',\n        'login_sharing'             => 'Partage de la dernière connexion',\n        'name'                      => 'Nom',\n        'new_password'              => 'Nouveau mot de passe',\n        'new_password_confirmation' => 'Confirmation du nouveau mot de passe',\n        'newsletter'                => 'Je souhaite être contacté par email de temps en temps.',\n        'password'                  => 'Mot de passe actuel',\n        'profile-name'              => 'Nom de profil',\n        'pronouns'                  => 'Pronons',\n        'settings'                  => 'Paramètres',\n        'subscription_hiding'       => 'Cacher l\\'abonnement',\n        'theme'                     => 'Thème',\n    ],\n    'helpers'       => [\n        'link'          => 'Modifie la façon dont un lien vers ton profil social apparaît sur ton :profile et le :marketplace. Si tu laisses ce champ vide, aucun lien ne s\\'affichera.',\n        'profile-name'  => 'Modifie ton nom sur ton :profile et le :marketplace. Si vide, le nom du compte sera utilisé.',\n        'pronouns'      => 'Modifie la façon dont tes pronoms apparaissent sur ton :profile et le :marketplace. Si tu laisses ce champ vide, aucun pronom ne s\\'affichera.',\n    ],\n    'link'          => [\n        'button'    => 'Profile social de :name',\n    ],\n    'newsletter'    => [\n        'helpers'   => [\n            'header'    => 'S\\'adonner aux newsletters par email pour être notifié des changements dans Kanka.',\n        ],\n        'options'   => [\n            'monthly'   => 'Newsletter Kanka',\n        ],\n        'title'     => 'Newsletter',\n        'updated'   => 'Préférence de la newsletter modifiée.',\n    ],\n    'password'      => [\n        'success'   => 'Mot de passe modifié.',\n    ],\n    'placeholders'  => [\n        'bio'                       => 'Une courte bio affichée sur le profil public.',\n        'email'                     => 'Adresse email',\n        'name'                      => 'Nom tel qu\\'affiché',\n        'new_password'              => 'Nouveau mot de passe',\n        'new_password_confirmation' => 'Confirmation du nouveau mot de passe',\n        'password'                  => 'Saisie du mot de passe actuel',\n    ],\n    'sections'      => [\n        'dangerzone'    => 'Zone dangereuse',\n        'delete'        => [\n            'confirm'       => 'Oui, supprimer mon compte',\n            'delete'        => 'Supprimer mon compte',\n            'goodbye'       => 'Pour confirmer cette action, écris :code dans le champ ci-dessous.',\n            'helper'        => 'Supprimer ton compte supprimera aussi toutes les campagnes où tu es le seul membre. Ceci est permanent et ne peut pas être défait.',\n            'subscribed'    => 'Prière d\\'annuler ton :subscription avant de pouvoir supprimer ton compte.',\n            'title'         => 'Suppression du compte',\n            'warning'       => 'Toutes les données relatives au compte seront supprimées. Êtes-vous certain?',\n        ],\n        'password'      => [\n            'title' => 'Modification du mot de passe',\n        ],\n    ],\n    'settings'      => [\n        'helpers'   => [\n            'bio'       => 'La biographie est visible sur ton :link.',\n            'profile'   => 'profil public',\n        ],\n        'success'   => 'Paramètres modifiés.',\n    ],\n    'theme'         => [\n        'success'   => 'Thème modifié.',\n        'themes'    => [\n            'dark'      => 'Sombre',\n            'default'   => 'Défaut',\n            'future'    => 'Futur',\n            'midnight'  => 'Bleu Minuit',\n        ],\n    ],\n    'title'         => 'Profil',\n    'workflows'     => [\n        'created'   => 'Afficher l\\'entrée créée',\n        'default'   => 'Liste des entrées',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Ajouter une quête',\n    ],\n    'elements'      => [\n        'create'        => [\n            'success'   => 'L\\'entrée :entity ajoutée à la quête.',\n            'title'     => 'Nouvel élément pour :name',\n        ],\n        'destroy'       => [\n            'success'   => 'L\\'élément de quête :entity retiré.',\n        ],\n        'edit'          => [\n            'success'   => 'L\\'élément de quête :entity modifié.',\n            'title'     => 'Modifier l\\'élément de quête pour :name',\n        ],\n        'fields'        => [\n            'copy_entity_entry' => 'Utiliser la description de l\\'entrée',\n            'entity_or_name'    => 'Sélection soit d\\'une entrée de la campagne, soit d\\'un nom pour cet élément.',\n        ],\n        'helpers'       => [\n            'copy_entity_entry' => 'Affiche la description de l\\'entrée liée à la place de la description personnalisée.',\n        ],\n        'placeholders'  => [\n            'name'  => 'Nom de l\\'élément',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Copier les éléments de la quête',\n        'date'          => 'Date',\n        'element_role'  => 'Rôle',\n        'instigator'    => 'Instigateur',\n        'is_completed'  => 'Completée',\n        'location'      => 'Lieu de départ',\n        'role'          => 'Rôle',\n        'status'        => 'Statut',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'Sélectionner si la quête est considérée comme completée.',\n        'status'        => 'Le statut actuel de la quête.',\n    ],\n    'hints'         => [\n        'is_abandoned'  => 'Cette quête a été abandonnée.',\n        'is_completed'  => 'Cette quête est terminée.',\n        'is_ongoing'    => 'Cette quête est en cours.',\n    ],\n    'lists'         => [\n        'empty' => 'Créé des quêtes pour enregistrer les objectifs, les scénarios ou les motivations des personnages.',\n    ],\n    'placeholders'  => [\n        'date'      => 'Date réelle de la quête',\n        'entity'    => 'Nom d\\'un élément dans la quête',\n        'location'  => 'Le lieu de départ de la quête',\n        'role'      => 'Le rôle de l\\'entrée dans la quête.',\n        'type'      => 'Principale, side quest, personnage',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Ajouter un élément',\n        ],\n        'tabs'      => [\n            'elements'  => 'Éléments',\n        ],\n    ],\n    'status'        => [\n        'abandoned'     => 'Abandonnée',\n        'completed'     => 'Terminée',\n        'not_started'   => 'Non commencée',\n        'ongoing'       => 'En cours',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/races.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nouvelle Race',\n    ],\n    'fields'        => [\n        'is_extinct'    => 'Éteinte',\n        'members'       => 'Membres',\n    ],\n    'hints'         => [\n        'is_extinct'    => 'Cette race est éteinte.',\n    ],\n    'lists'         => [\n        'empty' => 'Défini les espèces, les cultures ou les peuples qui peuplent ton monde.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Ajouter un ou plusieurs personnages à :name.',\n            'submit'    => 'Ajouter membres',\n            'success'   => '{0} Aucun membre ajouté.|{1} 1 membre ajouté.|[2,*] :count membres ajoutés.',\n            'title'     => 'Nouveaux membres',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Humain, Fée, Borg',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'La session a expiré. Merci d\\'essayer à nouveau.',\n    'unknown_entity'    => 'Désolé, élément \\':entity\\' inconnu.',\n];\n"
  },
  {
    "path": "lang/fr/referrals.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'copy'  => 'Copier',\n    ],\n    'benefits'  => 'Construisez des mondes ensemble.',\n    'fields'    => [\n        'link'  => 'Ton lien de parrainage:',\n    ],\n    'stats'     => [\n        'badge'         => 'Badge: Worldbuilder :level',\n        'empty'         => 'Personne pour l’instant. Partage ton lien pour commencer.',\n        'invited'       => 'Tu as invité:',\n        'subscribers'   => 'Abonnés parrainés: :amount',\n        'users'         => '[1] un utilisateur|{2,*} :amount utilisateurs',\n    ],\n    'title'     => 'Invite des amis sur Kanka',\n    'toasts'    => [\n        'copied'    => 'Lien copié au presse-papiers',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Événement',\n        'livestream'    => 'Livestream',\n        'other'         => 'Autre',\n        'release'       => 'Version',\n        'vote'          => 'Vote communautaire',\n    ],\n    'index'         => [\n        'description'   => 'Les dernières annonces de Kanka',\n        'title'         => 'Annonces',\n    ],\n    'post'          => [\n        'footer'    => 'De :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Retour aux annonces',\n        'title'     => 'Version :name',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chronicles of Darkness',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/search/fulltext.php",
    "content": "<?php\n\nreturn [\n    'searching' => 'Recherche du terme :term dans les entrées, les articles, les propriétés, et autres.',\n    'title'     => 'Recherche complète',\n];\n"
  },
  {
    "path": "lang/fr/search.php",
    "content": "<?php\n\nreturn [\n    'fulltext'      => 'Recherche complète',\n    'lookup'        => [\n        'empty'     => 'Aucun résultat',\n        'hint'      => 'Écrire au minimum 3 lettres pour cherche les entrées de la campagne.',\n        'keyboard'  => 'appuyer :k pour rechercher, :esc pour fermer',\n        'lists'     => 'Listes',\n        'recents'   => 'Récents',\n        'results'   => 'Résultats',\n    ],\n    'no_results'    => 'Aucun résultat.',\n    'placeholder'   => 'CHERCHER',\n    'placeholders'  => [\n        'entry' => 'Rechercher une entrée',\n    ],\n    'preview'       => [\n        'links'             => 'Liens',\n        'no-connections'    => 'Aucune relation épinglée à afficher',\n    ],\n    'title'         => 'Recherche',\n];\n"
  },
  {
    "path": "lang/fr/seo.php",
    "content": "<?php\n\nreturn [\n    'dashboard'     => 'Tableau de bord de :campaign',\n    'entity-list'   => 'Explorer la :module de :campaign',\n];\n"
  },
  {
    "path": "lang/fr/settings/account.php",
    "content": "<?php\n\nreturn [\n    'subtitle'  => 'Gères ton email, ton mot de passe, tes paramètres de sécurité et d\\'autres paramètres de ton compte.',\n    'title'     => 'Info de compte',\n];\n"
  },
  {
    "path": "lang/fr/settings/api.php",
    "content": "<?php\n\nreturn [\n    'applications'      => [\n        'title' => 'Applications authorisées',\n    ],\n    'clients'           => [\n        'empty' => 'Aucun client OAuth n\\'a été créé.',\n        'form'  => [\n            'name'                  => 'Nom du client',\n            'name_helper'           => 'Quelque chose que tes utilisateurs reconnaîtront et en qui ils auront confiance.',\n            'name_placeholder'      => 'Nom du client',\n            'redirect'              => 'URL de redirection',\n            'redirect_helper'       => 'L\\'URL de rappel d\\'autorisation de ton application.',\n            'redirect_placeholder'  => 'http://ma-superbe-app.info/callback',\n        ],\n        'new'   => 'Nouveau client',\n        'title' => 'Clients OAuth',\n        'update'=> 'Modifier le client',\n    ],\n    'fields'            => [\n        'client'        => 'ID du client',\n        'client_name'   => 'Nom du client',\n        'scopes'        => 'Scopes',\n        'secret'        => 'Secret',\n        'token_name'    => 'Nom du jeton',\n    ],\n    'new'               => [\n        'copy'  => 'Jeton d\\'accès copié au presse-papier',\n        'title' => 'Ton nouveau jeton d\\'accès personnel:',\n    ],\n    'revoke'            => 'Révoker',\n    'revoke-confirm'    => 'Confirmer la révocation',\n    'tokens'            => [\n        'empty' => 'Tu n\\'as pas encore créé de jeton d\\'accès.',\n        'form'  => [\n            'name'              => 'Nom du jeton',\n            'name_placeholder'  => 'Nom du jeton',\n        ],\n        'new'   => 'Créer le jeton',\n        'title' => 'Jetons d\\'accès personnels',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/settings/appearance.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'learn-more'    => 'En savoir plus dans notre documentation.',\n        'save'          => 'Sauvegarder les modifications',\n    ],\n    'campaign-switcher' => [\n        'alphabetical'      => 'Alphabétiquement (A-Z)',\n        'date_created'      => 'Date de création (plus ancienne en premier)',\n        'date_joined'       => 'Date d\\'adhésion (plus ancienne en premier)',\n        'r_alphabetical'    => 'Alphabétiquement (Z-A)',\n        'r_date_created'    => 'Date de création (plus récente en premier)',\n        'r_date_joined'     => 'Date d\\'adhésion (plus récente en premier)',\n    ],\n    'dismissible'       => [\n        'main'  => 'Gères l\\'apparence et certains fonctionements de Kanka. La configuration de campagnes peuvent remplacer certains de ces paramètres.',\n    ],\n    'editors'           => [\n        'default'   => 'Défaut (:name)',\n        'helpers'   => [\n            'feedback'  => 'Aide-nous à l\\'améliorer en donnant ton avis (2min)',\n            'legacy'    => 'L\\'ancien éditeur de texte (TinyMCE) ne supporte pas les mentions sur mobile, les galeries de campagne ni d\\'autres fonctionnalités avancées.',\n            'tiptap'    => 'Ceci est notre nouvel éditeur expérimental qui est activement développé et mis à jour régulièrement. Il ne contient pas encore toutes les fonctionnalités auxquelles tu es habitué.',\n        ],\n        'legacy'    => 'Ancien (:name)',\n        'tiptap'    => 'Expérimental 2026',\n    ],\n    'explore'           => [\n        'grid'  => 'Grille (défaut)',\n        'table' => 'Table',\n    ],\n    'fields'            => [\n        'campaign-order'        => 'Ordre des campagnes',\n        'date-format'           => 'Formatage de date',\n        'editor'                => 'Éditeur de texte',\n        'entity-explore'        => 'Listes d\\'entrées',\n        'mentions'              => 'Mentions lors de l\\'édition',\n        'new-entity-workflow'   => 'Flux de nouvelle entrée',\n        'pagination'            => 'Résultats par page',\n        'theme'                 => 'Préférence de thème',\n    ],\n    'helpers'           => [\n        'advanced-mentions'     => 'Lors de l\\'édition de textes, contrôler si les mentions sont affichées en tant que nom de l\\'entrée ou en tant que mention avancée.',\n        'campaign-order'        => 'Changer l\\'ordre dans lequel les campagnes sont affichées dans l\\'interface.',\n        'date-format'           => 'Contrôler le format dans lequel afficher les dates ancrées dans notre calendrier.',\n        'editors'               => 'Choisis l\\'éditeur de texte à utiliser pour les grands champs de texte.',\n        'entity-explore'        => 'Contrôler la manière dont s\\'affiche les listes d\\'entrées des campagnes.',\n        'new-entity-workflow'   => 'Contrôler l\\'interface vers laquelle tu es redirigé après avoir créé une nouvelle entrée.',\n        'overridable'           => 'Les campagnes peuvent individuellement remplacer cette préférence.',\n        'pagination'            => 'Pour les listes qui s\\'étendent sur plusieurs pages, définis le nombre d\\'éléments visibles sur chaque page.',\n        'theme'                 => 'Choisi la manière que Kanka s\\'affiche pour toi.',\n    ],\n    'mentions'          => [\n        'advanced'  => 'Afficher les mentions avancées :code',\n        'default'   => 'Nom de l\\'entrée',\n    ],\n    'success'           => 'Options d\\'affichage enregistrées.',\n    'values'            => [\n        'pagination'        => ':amount résultats par page',\n        'pagination-sub'    => ':amount (disponible aux abonnés)',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'boost_name'    => 'Booster :name',\n    ],\n    'available' => 'Boosters disponibles :amount/:total',\n    'benefits'  => [\n        'boosted'       => 'Booster une campagne avec :one booster débloque l\\'accès au :marketplace, les options de thèmages, des téléchargements plus grand pour tous les membres de la campagne, récupérer des entrées supprimées, et :more.',\n        'more'          => 'd\\'autres fonctionnalités incroyables.',\n        'superboosted'  => 'Superbooster une campagne avec :amount boosters débloque tous les bénéfices d\\'une campagne boostée, en plus de la galerie de campagne, des logs complètes de changements aux entrées, et :more.',\n    ],\n    'boost'     => [\n        'actions'   => [\n            'confirm'   => 'Booste-la!',\n            'remove'    => 'Ne plus booster :campaign',\n            'subscribe' => 'S\\'abonner à Kanka',\n            'upgrade'   => 'Mettre à niveau ton abonnement',\n        ],\n        'confirm'   => 'Wouah! Tu es sur le point de booster :campaign. Ceci assignera un (:cost) de tes boosters de campagne.',\n        'duration'  => 'Les boosters assignés restent assignés jusqu\\'à ce que tu les retires manuellement, ou quand ton abonnement prend fin.',\n        'errors'    => [\n            'boosted'           => 'Oups, on dirait que :campaign est déjà boosté!',\n            'out-of-boosters'   => 'Oh non! Tu n\\'as pas assez de boosters disponible. Tu as :available est a besoin de :cost. Tu peux soit arrêter de booster une autre campagne, ou :upgrade.',\n        ],\n        'pitch'     => 'Abonne-toi pour accéder aux boosters de campagne.',\n        'success'   => 'La campagne :campaign est maintenant boostée. Régale-toi avec les incroyables fonctionnalités!',\n        'title'     => 'Booster :campaign',\n        'upgrade'   => 's\\'abonner à un niveau plus élevé',\n    ],\n    'campaign'  => [\n        'boosted'       => 'Boosté par :user depuis :time',\n        'premium'       => 'Premium grace à :user depuis :time',\n        'standard'      => 'Standard',\n        'superboosted'  => 'Superboosté par :user depuis :time',\n        'unboosted'     => 'Non-boostée',\n    ],\n    'intro'     => [\n        'anyone'    => 'Tu n\\'es pas limité à seulement booster des campagnes que tu as créé. Tu peux booster n\\'importe quelle campagne dont tu es membre ou que tu peux voir. Cela inclus les campagnes où tu es un joueur, ou une :public que tu apprécies.',\n        'data'      => 'Quand une campagne n\\'est plus boostée, l\\'accès aux fonctionnalités boostées est retiré. Par contre, aucune information est supprimée, du coups booster la campagne à nouveau dans le future restaure l\\'accès aux données.',\n        'first'     => 'Les fonctionnalités avancées sont déverrouillées en affectant tes boosters pour booster ou superbooster une campagne. Le nombre de boosters dont tu disposes est déterminé par ton abonnement. Ce numéro est à votre disposition à tout moment tant que tu es et restes abonné. Booster une campagne assignera l\\'un de tes boosters, tandis que superbooster une campagne en assignera trois.',\n    ],\n    'pitch'     => [\n        'benefits'      => [\n            'backup'        => 'Récupérer des entrées supprimées pendant :amount jours',\n            'customisable'  => 'Contrôle créatif complet de la campagne',\n            'icons'         => 'Accès à des milliers d\\'icônes pour les cartes et chronologies.',\n            'plugins'       => 'Étends ta campagne avec des plugins créés par la communauté',\n            'title'         => 'Les campagnes boostées ont',\n            'upload'        => 'Taille de fichier plus grand pour tous les membres de la campagne',\n            'visual'        => 'Visualise des arbres généalogiques et les relations entre les entrées',\n        ],\n        'description'   => 'Assignes des boosters aux campagnes et aides à débloquer des fonctionnalités incroyables pour tous les membres de la campagne. Pas impressionné par les campagnes boostées? Nous avons ce qu\\'il te faut avec des campagnes superboostées!',\n        'more'          => 'Jettes un coup d\\'oeil sur la liste complète des fonctionnalités sur la page :boosters.',\n        'title'         => 'Accèdes au niveau supérieur avec la personnalisation et des avantages pour tous les membres de la campagne.',\n    ],\n    'ready'     => [\n        'available'         => 'Tes boosters disponibles.',\n        'pricing'           => 'Tous les niveaux d\\'abonnement contiennent au moins un booster de campagne et commencent à :amount par mois.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Booster une campagne',\n    ],\n    'superboost'=> [\n        'actions'   => [\n            'confirm'   => 'Superbooste-la!',\n            'instead'   => 'Superbooste-la pour :count!',\n            'remove'    => 'Ne plus superbooster :campaign',\n        ],\n        'confirm'   => 'Oooh! Tu es le point de booster :campagne. Cela attribuera trois (:cost) de tes boosters de campagne disponibles.',\n        'errors'    => [\n            'boosted'   => 'Oups, on dirait que :campaign est déjà superboostée!',\n        ],\n        'success'   => 'La campagne :campaign est maintenant superboostée. Régale-toi avec les nouvelles fonctionnalités!',\n        'title'     => 'Superbooster :campaign',\n        'upgrade'   => 'Prêts pour l\\'ultime expérience Kanka? Superbooster :campaign assignera :cost boosters de campagne supplémentaires.',\n    ],\n    'title'     => 'Boosters de campagne',\n    'unboost'   => [\n        'confirm'   => 'Oui, je suis sûr',\n        'status'    => [\n            'boosting'      => 'booster',\n            'superboosting' => 'superbooster',\n        ],\n        'success'   => 'La campagne :campaign n\\'est plus boostée, et tes boosters sont à nouveau disponibles.',\n        'title'     => 'Ne plus booster une campagne',\n        'warning'   => 'Es-tu sûr de vouloir arrêter :action :campaign? Cela libérera tes boosters assignés et masquera tout le contenu et les fonctionnalités liés aux avantages jusqu\\'à ce que la campagne soit à nouveau boostée.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/settings/premium.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'remove'    => 'Retirer Premium',\n        'unlock'    => 'Débloquer Premium',\n    ],\n    'create'        => [\n        'actions'       => [\n            'confirm'   => 'Débloquer Premium!',\n        ],\n        'confirm'       => 'Waouw! Tu es sur le point de débloquer des fonctionnalités premium pour :campaign. Cette campagne utilisera l\\'une de tes campagnes Premium disponibles.',\n        'duration'      => 'Les campagnes Premium le restent jusqu\\'à ce qu\\'elles soient supprimées manuellement ou que ton abonnement prenne fin.',\n        'pitch_2026'    => 'Bénéficie de rôles, membres, thèmes personnalisés, plugins illimités, et bien plus pour tes campagnes.',\n        'success'       => 'La campagne :campaign est maintenant Premium. Éclate-toi avec les chouettes fonctionnalités!',\n    ],\n    'exceptions'    => [\n        'already'       => 'Les fonctionnalités Premium ont déjà été débloquées pour cette campagne.',\n        'out-of-stock'  => 'Tu n\\'as pas assez de campagnes Premium disponibles pour débloquer cette campagne. Supprime le statut Premium d\\'une autre campagne ou :upgrade.',\n    ],\n    'pitch'         => [\n        'description'   => 'Passes au niveau supérieur pour les campagnes et débloques des fonctionnalités incroyables pour tous les membres.',\n        'title'         => 'Les campagnes Premium reçoivent',\n    ],\n    'ready'         => [\n        'available'         => 'Tes campagnes Premium disponnibles.',\n        'pricing'           => 'Tous nos abonnements contiennent au moins une campagne Premium et commence à :amount par mois.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Débloquer Premium',\n    ],\n    'remove'        => [\n        'confirm'   => 'Ouais, je suis sûr',\n        'cooldown'  => 'Les fonctionnalités premiums pour :campaign peuvent être retirées après :date.',\n        'success'   => 'Les fonctionnalités premium ont été désactivée de la campagne :campaign. Tu peux maintenant débloquer les fonctionnalités Premium dans une autre campagne.',\n        'title'     => 'Désactiver les fonctionnalités Premium',\n        'warning'   => 'Es-tu sûr de vouloir désactivé les fonctionnalités Premium de :campaign? Cela te permettra de débloquer une autre campagne. Rien ne sera supprimé, tout le contenu et toutes les fonctionnalités liés aux avantages seront cachées jusqu\\'à ce que le statut Premium de la campagne soit réactivé.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'               => [\n                'disable'           => 'Désactiver l\\'authentification à deux facteurs',\n                'disable-confirm'   => 'Cliquer pour confirmer',\n                'finish'            => 'Termine la configuration et connecte-toi',\n            ],\n            'activation_helper'     => 'Pour terminer la configuration de l\\'authentification à deux facteurs de ton compte, suis ces instructions.',\n            'disable'               => [\n                'helper'    => 'S tu souhaites désactiver l\\'authentification à deux facteurs, clique sur le bouton ci-dessous. Garde à l\\'esprit que cela rendra ton compte vulnérable à toute personne connaissant tes informations de connexion.',\n                'title'     => 'Désactiver l\\'authentification à deux facteurs',\n            ],\n            'enable_instructions'   => 'Pour démarrer le processus d\\'activation, génère un code QR d\\'authentification, puis scanne-le dans l\\'application Google Authenticator (:ios, :android) ou une autre application d\\'authentification similaire.',\n            'enabled'               => 'L\\'authentification à deux facteurs est actuellement activée sur ton compte.',\n            'error_enable'          => 'Code invalide, ressaye',\n            'fields'                => [\n                'otp'       => 'Saisi le mot de passe à usage unique fourni par l\\'application d\\'authentification',\n                'qrcode'    => 'Scanne le code QR suivant avec ton application d\\'authentification pour générer un mot de passe à usage unique',\n            ],\n            'generate_qr'           => 'Générer un code QR',\n            'helper'                => 'L\\'authentification à deux facteurs renforce la sécurité d\\'accès en exigeant deux méthodes (également appelées facteurs) pour vérifier ton identrée à chaque connexion.',\n            'learn_more'            => 'En savoir plus sur l\\'authentification à deux facteurs.',\n            'social'                => 'L\\'authentification à deux facteurs Kanka n\\'est activée que pour les utilisateurs qui se connectent à l\\'aide de leur adresse e-mail et de leur mot de passe. Modifie ta méthode de connexion dans les paramètres de ton compte avant de pouvoir activer cette option.',\n            'success_disable'       => 'L\\'authentification à deux facteurs est désactivée.',\n            'success_enable'        => 'L\\'authentification à deux facteurs est maintenant activée. Reconnecte-toi pour terminer le processus.',\n            'success_key'           => 'Ton code QR a été généré. Pour terminer la configuration, suis les étapes suivantes.',\n            'title'                 => 'Authentification à deux facteurs',\n        ],\n        'actions'           => [\n            'social'            => 'Changer au login Kanka',\n            'update_email'      => 'Modifier l\\'email',\n            'update_password'   => 'Modifier le mot de passe',\n        ],\n        'email'             => 'Modification de l\\'email',\n        'email_success'     => 'Email modifié.',\n        'password'          => 'Modification du mot de passe',\n        'password_success'  => 'Mot de passe modifié.',\n        'social'            => [\n            'error'     => 'Tu utilises déjà le login Kanka pour ce compte.',\n            'helper'    => 'Ton compte est géré par :provider. Tu peux changer au login Kanka en fournissant un login et un mot de passe.',\n            'success'   => 'Ton compte utilise dorénavant le login Kanka.',\n            'title'     => 'Social à Kanka',\n        ],\n        'title'             => 'Compte',\n    ],\n    'api'           => [\n        'helper'    => 'Bienvenue à l\\'API de Kanka. Les personal access token permettent d\\'accéder aux données d\\'un utilisateur lors des requêtes à l\\'API.',\n        'link'      => 'Lire la documentation',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Lier',\n            'remove'    => 'Retirer',\n        ],\n        'benefits'  => 'Kanka supporte quelques intégrations avec d\\'autres services. D\\'autres services seront ajoutés dans le futur.',\n        'discord'   => [\n            'confirm'   => 'Es-tu sûr de vouloir déconnecter ton compte de Discord? Cela retirera tous tes rôles synchronisés.',\n            'errors'    => [\n                'add'   => 'Une erreur est survenue lors du liage de Discord avec le compte Kanka.',\n            ],\n            'success'   => [\n                'add'       => 'Compte Discord lié.',\n                'remove'    => 'Compte Discord délié.',\n            ],\n            'text'      => 'Lier ton compte Discord avec ton compte Kanka pour automatiquement avoir accès à ton rôle d\\'abonnement et aux canneaux privés.',\n            'unlock'    => 'Accès aux rôles Discord',\n        ],\n        'title'     => 'Intégration d\\'app',\n    ],\n    'billing'       => [\n        'placeholder'   => 'Si tu souhaites que tes coordonnées ou informations fiscales supplémentaires soient ajoutées à tes reçus (adresse professionnelle, numéro de TVA, etc.), saisi-les ci-dessous et elles apparaîtront sur tous tes reçus.',\n        'save'          => 'Enregister les informations',\n        'title'         => 'Facturation',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'La campagne :name est déjà boostée.',\n            'exhausted_boosts'      => 'Tu n\\'as plus de boost disponible. Retire un boost d\\'une campagne avant de pouvoir l\\'attribuer à une autre.',\n            'exhausted_superboosts' => 'Tu n\\'as plus de boosts. Tu as besoin de 3 boosts pour superbooster une campagne.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Autriche',\n        'belgium'       => 'Belgique',\n        'france'        => 'France',\n        'germany'       => 'Allemagne',\n        'italy'         => 'Italie',\n        'netherlands'   => 'Pays-Bas',\n        'spain'         => 'Espagne',\n    ],\n    'layout'        => [\n        'title' => 'Mise en page',\n    ],\n    'menu'          => [\n        'account'               => 'Compte',\n        'api'                   => 'API',\n        'appearance'            => 'Apparence',\n        'apps'                  => 'Apps',\n        'boosters'              => 'Boosters',\n        'notifications'         => 'Notifications',\n        'other'                 => 'Autre',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Options de paiement',\n        'personal_settings'     => 'Paramètres Personnels',\n        'premium'               => 'Campagnes Premium',\n        'profile'               => 'Profil',\n        'settings'              => 'Paramètres',\n        'subscription'          => 'Abonnement',\n        'subscription_status'   => 'Status d\\'abonnement',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Fonction obsolète - si tu souhaites supporter Kanka, fais-le avec un abonnement. La liaison Patreon est toujours active pour nos Patrons qui ont lié leur compte avant le changement d\\'abonnement.',\n        'pledge'        => 'Pledge: :name',\n        'remove'        => [\n            'button'    => 'Délier le compte Patreon',\n            'success'   => 'Ton compte Patreon a été délié.',\n            'text'      => 'Délier le compte Patreon de Kanka supprime les bonus, le nom du Hall of Fame, les boosters de campagne et d\\'autres fonctionnalités liées au supporter de Kanka. Aucun contenu boosté ne sera perdu (par exemple les en-têtes d\\'entrée). Lors du réabonnement, toutes les données seront à nouveau visibles, y compris la possibilité de booster des campagnes précédemment boostées.',\n            'title'     => 'Délier le compte Patreon de Kanka',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Mettre à jour le profil',\n        ],\n        'avatar'    => 'Image de profil',\n        'success'   => 'Mise à jour effectuée.',\n        'title'     => 'Profil personnel',\n    ],\n    'referrals'     => [\n        'title' => 'Parrainages',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Annuler l\\'abonnement',\n            'subscribe'         => 'Abonner',\n            'update_currency'   => 'Changer la devise',\n        ],\n        'billing'               => [\n            'helper'    => 'Les informations de paiement sont gérées et sauvegardées de manière sécurisée à travers :stripe. Cette méthode de paiement sera utilisée pour tous les abonnements.',\n            'saved'     => 'Méthode de paiement',\n        ],\n        'cancel'                => [\n            'grace'     => [\n                'text'  => 'Ton abonnement est déjà configuré pour se terminer le :date, après quoi tes campagnes premium redeviendront des campagnes standard et les autres avantages liés au soutien de Kanka seront désactivés.',\n                'title' => 'Période de grâce',\n            ],\n            'options'   => [\n                'competitor'        => 'Passer à un concurrent',\n                'financial'         => 'L\\'abonnement est trop cher',\n                'missing_features'  => 'Fonctionnalités manquantes',\n                'not_for'           => 'L\\'abonnement n\\'est pas pour moi',\n                'not_playing'       => 'La campagne n\\'est plus active ou en pause',\n                'not_using'         => 'Je n\\'utilise pas Kanka actuellement',\n                'other'             => 'Autre',\n                'testing'           => 'Juste en train de tester Kanka.',\n            ],\n            'text'      => 'Désolé de te voir partir! L\\'annulation de ton abonnement le gardera actif jusqu\\'au la fin du mois payé, après quoi tu perdras les bonus de ta campagne et les autres avantages liés au soutien de Kanka. N\\'hésite pas à remplir le formulaire suivant pour nous informer de ce que nous pouvons améliorer, ou ce qui a conduit à ta décision.',\n            'title'     => 'Annulation de l\\'abonnement',\n        ],\n        'cancelled'             => 'L\\'abonnement a été annulé. Un nouvel abonnement peut être fait dès que celui-ci arrive à terme le :date.',\n        'change'                => [\n            'text'  => [\n                'downgrade_monthly' => 'Tu rétrogrades vers l’offre :tier pour :downgrade, puis facturation mensuelle de :amount.',\n                'downgrade_yearly'  => 'Tu rétrogrades vers l’offre :tier pour :downgrade, puis facturation annuelle de :amount.',\n                'monthly'           => 'Abonnement au niveau :tier, facturé mensuellement pour :amount.',\n                'upgrade_monthly'   => 'Tu passes au niveau :tier pour :upgrade, ensuite facturé mensuellement pour :amount.',\n                'upgrade_paypal'    => 'Tu passes au niveau :tier pour :upgrade jusqu\\'au :date.',\n                'upgrade_yearly'    => 'Tu passes au niveau :tier pour :upgrade, ensuite facturé annuellement pour :amount.',\n                'yearly'            => 'Abonnement au niveau :tier, facturé annuellement pour :amount.',\n            ],\n            'title' => 'Changement d\\'abonnement',\n        ],\n        'coupon'                => [\n            'check'         => 'Vérifier',\n            'invalid'       => 'Code promotionnel invalide.',\n            'label'         => 'Code promotionnel',\n            'percent_off'   => 'Nous appliquerons un rabais de :percent% sur la première année de l\\'abonnement!',\n        ],\n        'currencies'            => [\n            'brl'   => 'BRL',\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Changer la devise de facturation',\n        ],\n        'errors'                => [\n            'callback'      => 'Notre gestionnaire de paiement nous a remonté une erreur. Prière de réessayer et nous contacter si le problème persiste.',\n            'failed'        => 'Nous rencontrons actuellement des problèmes avec notre système de facturation. Prière de nous contacter à :email pour obtenir de l\\'aide.',\n            'subscribed'    => 'Erreur lors de la gestion de l\\'abonnement. Stripe nous a fourni l\\'erreur suivante.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Actif depuis',\n            'active_until'      => 'Active jusqu\\'à',\n            'billing'           => 'Facturation',\n            'currency'          => 'Devise',\n            'payment_method'    => 'Méthode de paiement',\n            'plan'              => 'Abonnement actuel',\n            'reason'            => 'Raison',\n            'reset'             => 'Réinitialiser les informations de facturation',\n            'reset_billing'     => 'Je comprends que le fait de changer de devise entraînera la perte de mon historique de facturation et m\\'obligera à saisir à nouveau mon mode de paiement.',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Payez votre abonnement en utilisant :method. Ce mode de paiement ne sera pas renouvelé automatiquement à la fin de votre abonnement. :method n\\'est disponible qu\\'en Euros.',\n            'alternatives-2'        => 'Payes ton abonnement en utilisant la méthode :method. Il s\\'agit d\\'un seul paiement qui ne se renouvelle pas automatiquement à la fin de l\\'abonnement.',\n            'alternatives_warning'  => 'La mise à niveau de l\\'abonnement lors de l\\'utilisation de cette méthode n\\'est pas possible. Veuillez créer un nouvel abonnement à la fin de votre abonnement actuel.',\n            'alternatives_yearly'   => 'En raison des restrictions entourant les paiements récurrents, :method n\\'est disponible que pour les abonnements annuels',\n            'currency_block'        => 'Il n\\'est pas possible de changer de devise pendant que tu asun abonnement Kanka actif, mais tu peux changer de devise à la fin de ton abonnement actuel.',\n            'currency_reset'        => 'Si tu changes de devise, ton historique de facturation sera effacé et tu devras saisir à nouveau une méthode de paiement.',\n            'paypal_v3'             => 'Payer pour ton abonnement annuel en toute sécurité avec PayPal.',\n            'stripe'                => 'La facturation est traité en toute securité par :stripe.',\n        ],\n        'manage_subscription'   => 'Gérer l\\'abonnement',\n        'payment_method'        => [\n            'actions'       => [\n                'add'               => 'Ajouter',\n                'add_new'           => 'Ajouter une méthode de paiement',\n                'change'            => 'Modifier la méthode de paiement',\n                'save'              => 'Enregister la méthode de paiement',\n                'show_alternatives' => 'Autres méthodes de paiement',\n            ],\n            'add_one'       => 'Aucune méthode de paiement actuellement saisie.',\n            'alternatives'  => 'Un abonnement peut être souscrit avec ces méthodes de paiement. Cette action ne générera qu\\'une seule facture et ne renouvellera pas automatiquement l\\'abonnement chaque mois.',\n            'card'          => 'Carte',\n            'card_name'     => 'Nom sur la carte',\n            'country'       => 'Pays de résidence',\n            'ending'        => 'Se terminant par',\n            'helper'        => 'Cette carte sera utilisée pour les abonnements.',\n            'new_card'      => 'Ajouter une méthode de paiement',\n            'saved'         => ':brand se terminant par :last4',\n        ],\n        'paypal_expiring'       => 'Ton abonnement PayPal expire le :date. Renouvelle-le maintenant pour éviter de perdre l\\'accès.',\n        'periods'               => [\n            'monthly'   => 'Menuel',\n            'yearly'    => 'Annuel',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => '(facultatif) dis-nous pourquoi tu downgrade ton abonnement.',\n            'reason'            => '(facultatif) dis-nous pourquoi tu ne souhaites plus être abonné à Kanka. Manquait-il une fonctionnalité? Ta situation financière a-t-elle changé?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount facturé mensuellement',\n            'cost_yearly'   => ':currency :amount facturé annuellement',\n        ],\n        'sub_status'            => 'Information d\\'abonnement',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Annuler l\\'abonnement',\n                'downgrading'       => 'Prière de nous contacter pour un déclassement',\n                'rollback'          => 'Changer à Kobold',\n                'subscribe'         => 'Changer à :tier mensuel',\n                'subscribe_annual'  => 'Changer à :tier annuel',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Le paiement a été enregistré. Une notification sera générée dès le paiement traité et l\\'abonnement activé.',\n            'callback'      => 'Ton abonnement est réussi! Ton compte sera mis à jour dès que notre gestionnaire de paiement nous informera des changements (cela peut prendre quelques minutes).',\n            'currency'      => 'Devise préférée sauvegardée.',\n            'subscribed'    => 'Ton abonnement est réussi! N\\'oublie pas de t\\'abonner à la newsletter Community Vote pour être averti lorsqu\\'un vote sera ouvert. Tu peux modifier tes paramètres de newsletter sur ta page de profil.',\n        ],\n        'tiers'                 => 'Niveaux d\\'abonnements',\n        'trial_period'          => 'Les abonnements annuels ont une période d\\'annulation de 14 jours. Nous contacter à :email pour annuler un abonnement et recevoir un remboursement.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Information sur l\\'upgrade/downgrade',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Tes bonus restent activés jusqu\\'à la fin de la période de paiement.',\n                    'boosts'    => 'La même chose se passe pour les campagnes boostées. Les fonctionnalités boostées deviennent invisibles mais les données ne sont pas supprimé lorsqu\\'une campagne n\\'est plus boostée.',\n                    'kobold'    => 'Pour annuler ton abonnement, change au tier Kobold.',\n                    'premium'   => 'Il en va de même pour tes campagnes Premium. Les fonctionnalités Premium deviennent invisibles mais ne sont pas supprimées lorsqu\\'une campagne n\\'a plus le status Premium',\n                ],\n                'title'     => 'Lors de l\\'annulation d\\'un abonnement',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'L\\'abonnement actuel reste actif jusqu\\'à la fin du cycle de paiement, après quoi le nouvel abonnement sera mis en place.',\n                ],\n                'provide_reason'    => 'Si tu peux, partages avec nous pourquoi tu downgrades ton abonnement.',\n                'title'             => 'Lors du passage à un niveau inférieur',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'La méthode de paiement sera facturée immédiatement et les nouvelles fonctionnalités seront accessibles.',\n                    'prorate'   => 'Lors du changement de Owlbear à Elemental, seulement la différence sera facturée.',\n                ],\n                'title'     => 'Lors du passage à un niveau supérieur',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'Nous n\\'avons pas pu débiter la carte de crédit. Vérifier les informations de la carte et mettre à jour si nécessaire. Nous essayerons à nouveau durant les prochains jours. Si ça échoue de nouveau, l\\'abonnement sera annulé.',\n            'patreon'       => 'Ce compte est actuellement lié à Patreon. Prière de délier le compte dans les paramètres :patreon avant de pouvoir s\\'abonner à Kanka.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'count'             => 'Membre de :member',\n        'created_campaigns' => 'Tes campagnes',\n        'follow_more'       => 'Trouver des campagnes',\n        'followed_campaigns'=> 'Campagnes suivies',\n        'new_campaign'      => 'Nouvelle campagne',\n        'public_campaigns'  => 'Campagnes publiques',\n        'reorder'           => 'Réordonner',\n        'updated'           => 'Mis à jour',\n    ],\n    'dashboard'         => 'Tableau de bord',\n    'entity-creator'    => 'Créateur Rapide',\n    'gallery'           => 'Galerie',\n    'game'              => 'Jeu',\n    'other'             => 'Autre',\n    'recent'            => 'Changements récents',\n    'relations'         => 'Relations',\n    'settings'          => 'Configuration',\n    'time'              => 'Temps',\n    'world'             => 'Monde',\n];\n"
  },
  {
    "path": "lang/fr/spotlights.php",
    "content": "<?php\n\nreturn [\n    'applied'       => [\n        'actions'       => [\n            'retract'   => 'Retirer la candidature',\n        ],\n        'description'   => 'Ta candidature a été envoyée et est en cours d’examen. Tu recevras une notification lorsqu’elle sera approuvée ou refusée.',\n        'title'         => 'Candidature envoyée',\n    ],\n    'apply'         => [\n        'errors'    => [\n            'empty' => 'La question :field nécessite plus de contenu',\n        ],\n    ],\n    'approved'      => [\n        'description'   => 'Félicitations! Ta candidature a été approuvée et est maintenant mise en avant sur la page :spotlight.',\n        'title'         => 'Candidature approuvée',\n    ],\n    'faq'           => [\n        'finisher'  => 'Envoyer une candidature ne garantit pas la sélection. Nous lisons chaque candidature, mais ne pouvons pas toutes les mettre en avant.',\n        'how'       => [\n            'a' => [\n                'end'           => 'Pas le nombre d’abonnés. Pas la popularité. Pas le statut de membre',\n                'lead'          => 'Nous sélectionnons 1–3 campagnes par mois.',\n                'req1'          => 'Une identrée et des thèmes clairs',\n                'req2'          => 'Un worldbuilding réfléchi',\n                'req3'          => 'Des histoires ou des approches intéressantes',\n                'requirements'  => 'La sélection est éditoriale, pas compétitive. Nous recherchons:',\n            ],\n            'q' => 'Comment les campagnes sont-elles sélectionnées?',\n        ],\n        'reapply'   => [\n            'a' => 'Oui. Si ta campagne n’est pas sélectionnée, tu peux postuler à nouveau plus tard, surtout si ton monde a évolué.',\n            'q' => 'Puis-je postuler plus d’une fois?',\n        ],\n        'selected'  => [\n            'a' => [\n                'end'   => 'Tu seras averti avant la publication.',\n                'lead'  => 'Si elle est sélectionnée:',\n                'req1'  => 'Ta campagne reçoit le succès Campagne mise en avant',\n                'req2'  => 'Nous publions un article sur le :blog et le :showcase',\n                'req3'  => 'Nous pouvons légèrement modifier tes réponses pour plus de clarté',\n            ],\n            'q' => 'Que se passe-t-il si ma campagne est sélectionnée?',\n        ],\n        'what'      => [\n            'a' => 'La vitrine met en avant des campagnes exceptionnelles créées avec Kanka. Les campagnes sélectionnées sont présentées sur la Vitrine Kanka et dans un court article de blog sous forme d’interview.',\n            'q' => 'Qu’est-ce que la vitrine?',\n        ],\n        'who'       => [\n            'a' => [\n                'end'           => 'Aucune taille minimale. Aucune restriction de système.',\n                'lead'          => 'Toute campagne publique sur Kanka peut postuler',\n                'req1'          => 'Être accessible publiquement',\n                'req2'          => 'Montrer une utilisation active (contenu, historique ou joueurs)',\n                'req3'          => 'Représenter des mondes dont les autres peuvent s’inspirer',\n                'requirements'  => 'Ta campagne doit:',\n            ],\n            'q' => 'Qui peut postuler?',\n        ],\n    ],\n    'form'          => [\n        'actions'       => [\n            'apply'     => 'Envoyer la candidature',\n            'retract'   => 'Retirer la candidature',\n            'save'      => 'Enregistrer le brouillon',\n        ],\n        'draft'         => 'Ceci est un brouillon de ta candidature. Tu peux l’enregistrer et y revenir plus tard.',\n        'not-public'    => 'Cette campagne n’est pas visible publiquement et ne peut pas postuler au Spotlight.',\n        'preset'        => 'Parle-nous un peu de :campaign et explique pourquoi tu penses qu’elle mérite d’être mise en avant. Tu peux enregistrer et revenir à ces questions plus tard.',\n        'required'      => 'Ce champ est obligatoire.',\n        'title'         => 'Formulaire de candidature au Spotlight',\n    ],\n    'overview'      => [\n        'cta'           => 'Postuler au Spotlight avec :name',\n        'not-public'    => ':name n’est pas une campagne visible publiquement.',\n        'showcase'      => 'Voir la vitrine',\n    ],\n    'placeholders'  => [\n        'inspiration'   => 'Livres, jeux, histoire, musique, ambiance',\n        'kanka'         => 'Explique-nous pourquoi Kanka est devenu l’outil idéal pour ton monde',\n        'proud'         => 'Ça peut être le lore, les joueurs, la longévité, le statut',\n        'stories'       => 'Tragédie, héroïsme, politique, famille choisie, chaos total et assumé',\n        'time'          => 'Des mois, des années, des décennies, sur plusieurs vies?',\n        'world'         => 'Thèmes, émotions, conflits (l’accroche)',\n    ],\n    'questions'     => [\n        'inspiration'   => 'Qu’est-ce qui inspire ce monde',\n        'kanka'         => 'Pourquoi fais-tu jouer des parties sur Kanka?',\n        'proud'         => 'De quoi es-tu le plus fier?',\n        'share'         => 'Autoriser l’équipe Kanka à utiliser ta réponse dans ses supports marketing.',\n        'stories'       => 'Quel genre d’histoires émergent à la table?',\n        'time'          => 'Depuis combien de temps construis-tu ce monde?',\n        'world'         => 'De quoi parle vraiment ce monde?',\n    ],\n    'rejected'      => [\n        'description'   => 'Ta candidature a été refusée. Réessaie plus tard.',\n        'title'         => 'Candidature refusée',\n    ],\n    'retract'       => [\n        'success'   => 'Ta candidature a été retirée avec succès. Tu peux maintenant la modifier à nouveau.',\n    ],\n    'rules'         => <<<'TEXT'\nNous sélectionnons 1–3 campagnes chaque mois pour les mettre en avant sur le :showcase de Kanka.\nLa sélection n’est pas garantie. Les campagnes mises en avant reçoivent un succès permanent et une interview publiée.\nTEXT\n,\n    'started'       => 'Pour commencer, sélectionne l’une de tes campagnes.',\n    'title'         => 'Postuler au Spotlight',\n];\n"
  },
  {
    "path": "lang/fr/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => 'Monde de :user',\n    ],\n    'character1'    => [\n        'age'           => '[20/30/40 ans]',\n        'background'    => [\n            'cur'       => 'Actuellement [occupation/rôle]',\n            'loc'       => 'A grandi à [ville/région]',\n            'seeking'   => 'En quête de [objectif/motivation]',\n            'title'     => 'Historique',\n        ],\n        'description'   => [\n            'intro'     => '[Une brève introduction de ton personnage - qui il est, d\\'où il vient et ce qu\\'il veut.]?',\n            'template'  => 'Ceci est un personnage modèle que tu peux personnaliser. Remplace les détails ci-dessous par les informations de ton propre personnage. Tu pourras toujours ajouter d\\'autres champs plus tard.',\n            'tip'       => 'Conseil: Commence par un nom et une description en une phrase. Tu pourras étoffer les détails au fil du développement de ton monde.',\n        ],\n        'name'          => '[Nom de ton personnage]',\n        'personality'   => [\n            'trait1'    => [\n                'name'  => 'Trait 1',\n                'value' => '[Courageux/Prudent/Ambitieux]',\n            ],\n            'trait2'    => [\n                'name'  => 'Trait 2',\n                'value' => '[Loyal/Indépendant/Rusé]',\n            ],\n            'trait3'    => [\n                'name'  => 'Trait 3',\n                'value' => '[Optimiste/Cynique/Pragmatique]',\n            ],\n        ],\n        'physical'      => [\n            'build'     => [\n                'name'  => 'Corpulence',\n                'value' => '[Mince/Moyen/Musclé]',\n            ],\n            'features'  => [\n                'name'  => 'Traits distinctifs',\n                'value' => '[Cicatrices, tatouages, vêtements distinctifs]',\n            ],\n        ],\n    ],\n    'character2'    => [\n        'description'   => [\n            'first' => 'Un personnage secondaire qui aide ou voyage avec :mention. Personnalise ces détails pour qu\\'ils correspondent à ton histoire.',\n            'second'=> 'Conseil: Les personnages secondaires n\\'ont pas besoin d\\'autant de détails que les protagonistes. Concentre-toi sur ce qui les rend utiles ou intéressants pour ton histoire.',\n        ],\n        'name'          => '[Nom du personnage allié]',\n        'relation'      => '[Ami/Mentor/Rival]',\n        'skills'        => [\n            'first' => '[Compétence 1: Combat/Magie/Soin/Artisanat]',\n            'second'=> '[Compétence 2: Social/Savoir/Technique]',\n            'third' => '[Compétence 3: Talent unique ou spécialité]',\n            'title' => 'Compétences et capacités',\n        ],\n    ],\n    'city'          => [\n        'description'   => 'Le cœur battant du royaume, où marchands, nobles et roturiers se côtoient dans des marchés animés et de grandes places. Les vieux murs de la ville tiennent toujours, bien que celle-ci les ait dépassés depuis longtemps.',\n        'districts'     => [\n            'first' => 'Quartier noble: Manoirs et jardins',\n            'fourth'=> 'Quais: Port fluvial, entrepôts',\n            'second'=> 'Quartier du marché: Commerce, artisanat, tavernes',\n            'third' => 'Vieille ville: Cité fortifiée d\\'origine',\n            'title' => 'Quartiers',\n        ],\n        'locations'     => [\n            'first' => 'Le Palais Royal (centre du Quartier noble)',\n            'second'=> 'Le Grand Bazar (Quartier du marché)',\n            'third' => 'L’Auberge de l’Épée Rouillée (lieu populaire des aventuriers)',\n            'title' => 'Lieux notables',\n        ],\n        'name'          => '[Ta capitale]',\n        'type'          => 'Capitale',\n    ],\n    'kingdom'       => [\n        'description'   => 'Un royaume prospère, réputé pour ses terres fertiles et ses forêts séculaires. La famille royale règne depuis trois générations, préservant la paix par la diplomatie et le commerce.',\n        'features'      => [\n            'capital'   => [\n                'name'  => 'Capitale',\n            ],\n            'exp'       => [\n                'name'  => 'Export principal',\n                'value' => 'Céréales, bois de construction',\n            ],\n            'gov'       => [\n                'name'  => 'Gouvernement',\n                'value' => 'Monarchie héréditaire',\n            ],\n            'pop'       => [\n                'name'  => 'Population',\n                'value' => '~50,000',\n            ],\n            'title'     => 'Caractéristiques notables',\n        ],\n        'name'          => '[Nom de ton royaume]',\n        'recent'        => [\n            'first' => 'Recrudescence du banditisme sur les routes de l\\'est',\n            'second'=> 'Mauvaises récoltes dans les provinces du sud',\n            'title' => 'Événements récents',\n        ],\n        'type'          => 'Royaume',\n    ],\n    'kingdom1'      => [],\n    'kingdom2'      => [],\n    'name'          => ':name (exemple)',\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/fr/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Abonne-toi à Kanka pour débloquer des images plus grandes, une expérience sans publicité, :boosters et :more. Nous utilisons :stripe pour gérer les paiements, avec aucune information sur la carte de crédit sauvegardé ou transitant sur nos servers.',\n        'more'  => 'd\\'autres fonctionnalités incroyables',\n    ],\n    'errors'    => [\n        'grace'                 => 'Ton abonnement actuel prend fin à la date :date, après quoi tu pourras te réabonner.',\n        'invalid_card_country'  => [\n            'brl'   => 'Nous sommes désolés, mais nous n\\'acceptons actuellement que les paiements en BRL pour les clients possédant une carte de crédit brésilienne. Si tu penses qu\\'il s\\'agit d\\'une erreur, contacte-nous à l\\'adresse :email.',\n        ],\n        'invalid_currency'      => 'Tu avais précédemment un abonnement en :old, ce qui t\\'empêche d\\'avoir un nouvel abonnement en :new. Priere de changer ta devise en :old, ou nous contacter à :email si tu souhaites changer de devise.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/cancellation.php",
    "content": "<?php\n\nreturn [\n    'custom'        => [\n        'label'         => 'Autre chose à partager?',\n        'placeholder'   => 'Nous lisons chaque réponse.',\n    ],\n    'intro'         => 'On est triste de te voir partir! Ton abonnement sera actif jusqu\\'au :date, après quoi tes campagnes premiums se convertirons en campagnes standards et ces bénéfices seront retirés.',\n    'loss'          => [\n        'ads'       => [\n            'title' => 'Experience sans pub pour toi et tes joueurs',\n        ],\n        'discord'   => [\n            'title' => 'Le rôle \":role\" dans notre communauté Discord',\n        ],\n        'downgrade' => 'Tu peux passer à un abonnement inférieur au lieu de l\\'annuler afin de conserver la plupart de tes avantages.',\n        'premium'   => [\n            'players'   => '{1}:count joueur perdra accès aux fonctionnalités premiums|[2,*]:count joueurs perdront accès aux fonctionnalités premiums',\n            'plugins'   => '{1}Accès à :count plugin installé|[2,*]Accès à :count plugins installés',\n            'storage'   => 'Ton :current',\n            'title'     => '{0}Fonctionnalités premiums pour \":campaign\"|{1}Fonctionnalités premiums pour \":campaign\" et :count autre campagne|[2,*]Fonctionnalités premium pour \":campaign\" et :count autres campagnes',\n        ],\n        'roadmap'   => 'Nous améliorons constamment Kanka grâce aux idées soumises par les utilisateurs sur notre :roadmap. Peut-être que cette fonctionnalité manquante est imminente.',\n        'title'     => 'Avant d\\'annuler, voici ce que tu perderas',\n    ],\n    'pause'         => [\n        'button'    => 'Suspendre la souscription pour 1 à 3 mois',\n        'helper'    => 'Tout garder. Aucun paiement. Reprendre à tout moment.',\n    ],\n    'secondary'     => [\n        'competitor'    => [\n            'legend_keeper'     => 'Legend Keeper',\n            'notion_obsidian'   => 'Notion ou Obsidian',\n            'other'             => 'Autre chose',\n            'world_anvil'       => 'World Anvil',\n        ],\n        'financial'     => [\n            'forgot'        => 'J\\'avais oublié que j\\'étais encore abonné',\n            'lower_price'   => 'Un prix moins élevé m\\'aiderait',\n            'not_often'     => 'Je ne l\\'utilise pas assez souvent pour en justifier le coût',\n        ],\n        'label'         => 'Peux-tu nous en dire un peu plus?',\n        'not_for'       => [\n            'better_fit'            => 'J\\'ai trouvé une meilleure alternative',\n            'expected_different'    => 'Je m\\'attendais à quelque chose de différent',\n            'terminology'           => 'La terminologie ne correspond pas à ma façon de penser',\n            'too_complex'           => 'Trop complexe pour démarrer',\n        ],\n        'not_playing'   => [\n            'campaign_finished' => 'La campagne est terminée',\n            'group_fell_apart'  => 'Le groupe s\\'est dispersé',\n            'on_break'          => 'En pause, je reviendrai peut-être',\n        ],\n        'not_using'     => [\n            'lost_motivation'   => 'J\\'ai perdu la motivation pour ce projet',\n            'on_break'          => 'Ma campagne est en pause mais je reviendrai peut-être',\n            'too_busy'          => 'J\\'ai été trop occupé ces derniers temps',\n        ],\n    ],\n    'select_reason' => 'Veuillez sélectionner une raison pour continuer.',\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/cancelled.php",
    "content": "<?php\n\nreturn [\n    'active'    => [\n        'adfree'    => 'Une expérience sans pub',\n        'discord'   => 'Des rôles réservés aux abonnés sur :discord',\n        'helper'    => 'Ton abonnement reste actif jusqu\\'au :date. D\\'ici là, tu continues de profiter de tous les avantages, comme :',\n        'limit'     => 'Des limites de téléversement augmentées',\n        'more'      => 'Et encore plus!',\n        'premium'   => 'Les campagnes premium et leurs fonctionnalités',\n        'title'     => 'Tes avantages sont encore actifs',\n    ],\n    'change'    => [\n        'action'    => 'Se réabonner maintenant',\n        'helper'    => 'On serait ravi de t\\'avoir à nouveau parmi nous! Tu peux te réabonner à tout moment et reprendre là où tu t\\'étais arrêté.',\n        'title'     => 'Tu as changé d\\'avis?',\n    ],\n    'contact'   => [\n        'feedback'  => 'Si on aurait pu faire mieux, ton avis nous intéresse :',\n        'helper'    => 'Même sans abonnement, tu fais toujours partie de la communauté Kanka. Continue à forger tes mondes, et n\\'hésite pas à revenir quand le moment sera venu.',\n        'send'      => 'Contacte-nous pour partager ton retour',\n        'title'     => 'Restons en contact',\n    ],\n    'next'      => [\n        'data'      => 'Tes données restent en sécurité, rien n\\'est supprimé, et tu peux te réabonner à tout moment',\n        'discord'   => 'Tu n\\'auras plus accès aux fonctionnalités et salons réservés aux abonnés',\n        'helper'    => 'Une fois ton abonnement terminé :',\n        'premium'   => 'Les campagnes avec le premium perdront cet avantage',\n        'title'     => 'Et après?',\n    ],\n    'seo_title' => 'Désolé de te voir partir',\n    'subtitle'  => 'Merci d\\'avoir été abonné, ton soutien a vraiment compté pour nous. Voici ce qui t\\'attend maintenant :',\n    'title'     => 'Désolé de te voir partir, :name',\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/confirm.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => 'Payer :currency:amount maintenant',\n        'paypal'    => 'Payer :currency:amount avec PayPal',\n        'subscribe' => 'S’abonner pour :currency:amount',\n    ],\n    'helpers'   => [\n        'auto-renew'    => [\n            'monthly'   => 'Ton abonnement est renouvelé automatiquement chaque mois. Ta prochaine date de facturation est au :date.',\n            'none'      => 'Le paiement par PayPal est un paiement unique et ne se renouvelle pas automatiquement. Tu pourras te réabonner une fois que ton abonnement prend fin après le :date.',\n            'yearly'    => 'Ton abonnement est renouvelé automatiquement tous les 12 mois. Ta prochaine date de facturation est au :date.',\n        ],\n        'paypal'        => 'Tu seras redirigé vers PayPal pour effectuer cette transaction.',\n        'refund'        => 'Nous offrons une politique de remboursement de 14 jours pour tous les abonnements annuels. Il te suffit de nous envoyer un courriel à l\\'adresse :email pour entamer une procédure de remboursement.',\n        'tiny'          => 'Merci de soutenir une petite équipe de worldbuilders passionnés.',\n    ],\n    'title'     => 'Abonnement :name',\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/faq.php",
    "content": "<?php\n\nreturn [\n    'cancellation'  => [\n        'answer'    => 'Absolument! Ton abonnement te permet d\\'activer des campagnes premium dont tous les membres bénéficient. Peu importe leur propre abonnement, tous les participants d\\'une campagne premium profitent des fonctionnalités avancées, ce qui fait de Kanka une plateforme idéale pour la création de mondes en collaboration.',\n        'question'  => 'Est-ce que je peux annuler mon abonnement à tout moment?',\n    ],\n    'cost'          => [\n        'answer'    => 'Kanka propose trois niveaux d\\'abonnement nommés d\\'après des monstres de D&D: Owlbear, Wyvern et Elemental Les prix varient selon ta devise préférée (USD, EUR ou BRL). En choisissant un abonnement annuel plutôt qu\\'un paiement mensuel, tu bénéficies de deux mois gratuits.',\n        'question'  => 'Combien coûte un abonnement?',\n    ],\n    'data'          => [\n        'answer'    => 'Rassure-toi, nous ne supprimons jamais tes données à la fin d\\'un abonnement. Les campagnes premium redeviennent simplement des campagnes standard, avec les fonctionnalités premium désactivées temporairement. Lorsque tu te réabonnes, toutes tes données et paramètres premium sont immédiatement restaurés, exactement comme tu les avais laissés.',\n        'question'  => 'Qu\\'advient-il de mes données si j\\'annule mon abonnement?',\n    ],\n    'discount'      => [\n        'answer'    => 'Oui! Nos abonnés annuels bénéficient de deux mois gratuits par rapport à la facturation mensuelle. C\\'est notre façon de te remercier pour ton engagement à long terme avec Kanka.',\n        'question'  => 'Existe-t-il des réductions pour les abonnements annuels?',\n    ],\n    'downgrade'     => [\n        'answer'    => 'Tu peux modifier ton niveau d\\'abonnement à tout moment. En cas de mise à niveau, nous te facturerons uniquement la différence entre ton abonnement actuel et le nouveau plan pour le reste de ta période de facturation. En cas de rétrogradation, le nouveau tarif réduit prendra effet à la date de ton prochain renouvellement, sans interruption de tes avantages actuels.',\n        'question'  => 'Comment mettre à niveau ou rétrograder mon abonnement?',\n    ],\n    'fail'          => [\n        'answer'    => 'Si un paiement échoue, nous t\\'enverrons immédiatement un email et tenterons automatiquement de débiter ta carte jusqu\\'à trois fois supplémentaires. Si ces tentatives échouent, ton abonnement sera mis en pause. Tu pourras facilement résoudre ce problème en mettant à jour tes informations de :billing avec une méthode valide.',\n        'question'  => 'Que se passe-t-il si mon paiement échoue?',\n    ],\n    'help'          => [\n        'answer'    => 'Ton abonnement finance notre temps, nos serveurs et la liberté de garder Kanka durable sans courir après la croissance à tout prix. Il nous permet de corriger les bugs plus vite, de créer des fonctionnalités auxquelles nous croyons vraiment et de rester à l’écoute de la communauté plutôt que des investisseurs. En clair:il permet à Kanka de rester vivant et de s’améliorer.',\n        'question'  => 'Comment mon abonnement aide-t-il Kanka?',\n    ],\n    'methods'       => [\n        'answer'    => 'Nous acceptons les paiements par carte bancaire et PayPal en USD, EUR et BRL. La sécurité de ton paiement est essentielle pour nous ; toutes les transactions par carte bancaire sont traitées de manière sécurisée par notre prestataire de paiement de confiance, :stripe.',\n        'question'  => 'Quels sont les moyens de paiement acceptés?',\n    ],\n    'refund'        => [\n        'answer'    => 'Oui! Nous offrons une politique de remboursement intégral sous 14 jours, sans poser de questions, pour tous les abonnements annuels. Il te suffit de nous envoyer un email à :email pour demander ton remboursement, et nous nous occupons du reste.',\n        'question'  => 'Offrez-vous des remboursements?',\n    ],\n    'renewal'       => [\n        'answer'    => 'Oui, pour les abonnements par carte bancaire, nous renouvelons automatiquement ton abonnement au même tarif à la fin de ta période de facturation. Les abonnements PayPal font exception : ils nécessitent un renouvellement manuel, car PayPal ne permet pas le renouvellement automatique pour notre service.',\n        'question'  => 'Serai-je facturé automatiquement lors du renouvellement de mon abonnement?',\n    ],\n    'security'      => [\n        'answer'    => 'Ta sécurité financière est notre priorité. Nous travaillons avec :stripe, un prestataire de paiement conforme aux normes PCI qui applique les standards les plus stricts en matière de sécurité des paiements. Toutes les données sensibles sont gérées et stockées par Stripe selon les protocoles conformes au RGPD, et non sur nos serveurs.',\n        'question'  => 'Mes informations de paiement sont-elles sécurisées?',\n    ],\n    'sharing'       => [\n        'answer'    => 'Absolument! Ton abonnement te permet d\\'activer des campagnes premium dont tous les membres bénéficient. Peu importe leur propre abonnement, tous les participants d\\'une campagne premium profitent des fonctionnalités avancées, ce qui fait de Kanka une plateforme idéale pour la création de mondes en collaboration.',\n        'question'  => 'Puis-je partager mon compte/abonnement avec d\\'autres personnes?',\n    ],\n    'title'         => 'Questions fréquemment posées',\n    'trial'         => [\n        'answer'    => 'Nous ne proposons pas d\\'essai gratuit traditionnel, mais la version gratuite de Kanka offre déjà de puissants outils de création de mondes et de gestion de campagnes pour bien commencer. Lorsque tu es prêt à aller plus loin, un abonnement débloque des fonctionnalités premium comme une limite d\\'upload d\\'images plus élevée, une expérience sans publicité, des rôles Discord exclusifs et d\\'autres améliorations pour ton monde.',\n        'question'  => 'Existe-t-il une version d\\'essai gratuite?',\n    ],\n    'update'        => [\n        'answer'    => 'Mettre à jour tes informations de facturation est simple : rends-toi sur la page :billing dans les paramètres de ton compte. Là, tu peux modifier tes méthodes de paiement, mettre à jour ta carte bancaire ou changer ton adresse de facturation si nécessaire.',\n        'question'  => 'Comment mettre à jour mes informations de facturation?',\n    ],\n    'why'           => [\n        'answer'    => 'Kanka est créé et maintenu par une petite équipe indépendante. Les abonnements nous permettent d’y travailler sur le long terme, de l’améliorer régulièrement et d’éviter les dark patterns. Tu ne paies pas une entreprise, tu finances directement les personnes qui conçoivent, développent et soutiennent la plateforme.',\n        'question'  => 'Pourquoi Kanka facture-t-il des abonnements?',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/finish.php",
    "content": "<?php\n\nreturn [\n    'discord'   => [\n        'action'    => 'Connecte ton compte Discord',\n        'enjoy'     => 'Rends-toi sur Discord pour profiter de tes nouveaux avantages',\n        'helper'    => 'En tant qu\\'abonné, tu débloques des rôles exclusifs et des salons privés dans notre communauté Discord. Mais d\\'abord, tu dois connecter ton compte Discord.',\n        'title'     => 'Débloque tes avantages Discord',\n    ],\n    'header'    => 'Tu es maintenant abonné·e, bienvenue dans le cercle secret des bâtisseurs de mondes!',\n    'help'      => [\n        'contact-us'    => 'contacte-nous',\n        'helper'        => 'Si tu as des questions ou des retours, :contact-us ou visite notre :docs. On est là pour rendre ton aventure de worldbuilding magique.',\n        'title'         => 'Besoin d\\'aide?',\n    ],\n    'next'      => 'Ton soutien nous aide à grandir et à améliorer Kanka pour tout le monde. Voici ce que tu peux faire ensuite pour débloquer tous les avantages de ton abonnement :',\n    'premium'   => [\n        'action'    => 'Activer',\n        'helper'    => 'Active des fonctionnalités premium comme les catégories personnalisées, l\\'accès aux :plugins, et bien plus encore!',\n        'title'     => 'Active les options premium sur une campagne',\n    ],\n    'roadmap'   => [\n        'action'    => 'Voir la feuille de route & proposer des idées',\n        'helper'    => 'On construit Kanka pour toi. Consulte la feuille de route publique et propose ou vote pour les fonctionnalités que tu aimerais voir!',\n        'title'     => 'Aide à façonner l\\'avenir de Kanka',\n    ],\n    'title'     => 'Merci de soutenir Kanka!',\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/free-trial.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'accept'    => 'Commencer mon essai gratuit',\n        'magic'     => 'Aucune carte bancaire requise. C\\'est purement magique.',\n    ],\n    'final'     => [\n        'magic' => 'Pas d\\'engagement, pas de piège. Juste plus de magie pour ta campagne.',\n        'title' => 'Commencer mes 15 jours d\\'essai maintenant',\n    ],\n    'header'    => 'On a vu ta dévotion dans les royaumes de Kanka. Pour honorer ton aventure, on t\\'offre :what. Pas besoin d\\'or, de gemmes ou de carte bancaire.',\n    'included'  => [\n        'title' => 'Ce qui est inclus',\n        'upsell'=> [\n            'action'    => 'Voir tous les niveaux d\\'abonnement',\n            'pitch'     => 'Ceci n\\'est que le niveau :tier. Prêt à débloquer encore plus?',\n        ],\n    ],\n    'pitch'     => [\n        'title' => 'Profite de 15 jours d\\'essai gratuit! Découvre toutes les fonctionnalités premium et vois ce que tu as manqué.',\n    ],\n    'started'   => [\n        'header'    => 'Tu as démarré ton essai gratuit avec succès, bienvenue dans le guilde des créateurs de mondes!',\n        'title'     => 'Bienvenue dans ton essai gratuit!',\n    ],\n    'tease'     => [\n        'helper'    => 'Tu veux débloquer des envois de fichiers plus volumineux et plus d\\'emplacements pour campagnes premium? Visite la page :subscription pour découvrir ce qui t\\'attend.',\n        'title'     => 'Mais tu en veux plus',\n    ],\n    'title'     => 'Une nouvelle quête t\\'attend, aventurier!',\n    'what'      => ':amount jours d\\'essai gratuit du niveau :tier',\n    'why'       => [\n        'helper'    => 'Tu as créé, exploré et fait grandir ta campagne. Ta loyauté n\\'est pas passée inaperçue. Considère ceci comme un cadeau de remerciement de la part de l\\'équipe de Kanka.',\n        'title'     => 'Tu as mérité cette récompense',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/paypal-renew.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'permission'    => 'Ton abonnement n\\'est pas sur le point d\\'expirer dans les 14 prochains jours.',\n    ],\n    'intro'     => 'Ton abonnement expire le :date. Le renouveler avant cette date prolongera ton accès d\\'une année complète, et te permettra de continuer à profiter de tes avantages sans interruption.',\n    'success'   => 'Ton abonnement a été renouvelé avec succès jusqu\\'au :date.',\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/paypal.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'contact'       => 'Si ce problème persiste, contacte nous à :email.',\n        'failed'        => 'PayPal n\\'a pas pu générer de facture. Prière de ressayer.',\n        'incomplete'    => 'Paiement PayPal incomplet. Prière de ressayer.',\n        'rejected'      => 'PayPal a généré une facture invalide. Prière de ressayer.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'Cette promotion n\\'est plus disponible.',\n        'invalid'   => 'Promotion inconnue.',\n        'only-new'  => 'Cette promotion n\\'est que disponible pour les nouveau abonnés.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/subscriptions/renew.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'renew' => 'Renouveller l\\'abonnement',\n    ],\n    'helper'    => 'Cependant, tu peux décider de renouveller ton abonnement et profiter de tous les bénéfices sans interruption.',\n    'success'   => 'Ton abonnement a été renouvelé pour un an.',\n    'title'     => 'Renouvellement de l\\'abonnement',\n];\n"
  },
  {
    "path": "lang/fr/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe n\\'a pas pu débiter la méthode de paiement saisie. L\\'abonnement Kanka a été désactivé.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'           => 'Ajouter une nouvelle étiquette',\n            'add_entity'    => 'Ajouter à une entity',\n        ],\n        'create'    => [\n            'attach_success'        => '{1} Ajout de :count entrée à l\\'étiquette :name.|[2,*] Ajout de :count entrées à l\\'étiquette :name.',\n            'attach_success_entity' => 'Etiquettes modifiées pour :name.',\n            'entity'                => 'Etiquetter :name',\n            'helper'                => 'Etiquetter une ou plusieurs entrées avec :name',\n            'title'                 => 'Etiquetter',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nouvelle étiquette',\n    ],\n    'fields'        => [\n        'children'          => 'Enfants',\n        'icon'              => 'Icône',\n        'is_auto_applied'   => 'Appliquer automatiquement aux nouvelles entrées',\n        'is_hidden'         => 'Caché de l\\'entête et des infobulles',\n    ],\n    'helpers'       => [\n        'icon'          => 'Utilise des icônes de :fontawesome ou :rpgawesome. L\\'icône sera affichée à la place du nom du tag dans les listes.',\n        'no_children'   => 'Il n\\'y a actuellement aucune entrée avec cette étiquette.',\n        'no_posts'      => 'Il n\\'y a actuellement aucun article avec cette étiquette.',\n    ],\n    'hints'         => [\n        'children'          => 'Cette liste contient toutes les entrées directement dans cette étiquette et toutes les étiquettes enfants.',\n        'is_auto_applied'   => 'Si cette option est activée, les nouvelles entrées auront automatiquement cette étiquette.',\n        'is_hidden'         => 'Si activé, cette étiquette ne s\\'affichera pas dans l\\'entête d\\'entrée, ni dans les infobulles.',\n        'tag'               => 'Affichées ci-dessous sont toutes les étiquettes enfants de cette étiquette.',\n    ],\n    'lists'         => [\n        'empty' => 'Utilise des balises pour regrouper et filtrer les entrées dans ton univers afin de faciliter la navigation.',\n    ],\n    'placeholders'  => [\n        'icon'  => 'Essaie :example1 ou :example2',\n        'type'  => 'Légende, Guerres, Histoire, Religion',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Enfants',\n        ],\n    ],\n    'transfer'      => [\n        'entities'      => [\n            'helper'    => 'Transférer les entrées étiquetées avec :name à une autre étiquette.',\n            'title'     => 'Transférer les entrées',\n        ],\n        'fail'          => 'Les entrées de :tag n\\'ont pas pu être transférées vers :newTag',\n        'fail_post'     => 'Les articles de :tag n\\'ont pas pu être transférés vers :newTag',\n        'posts'         => [\n            'helper'    => 'Transférer les articles étiquetés avec :name à une autre étiquette.',\n            'title'     => 'Transférer les articles',\n        ],\n        'success'       => 'Les entrées de :tag ont été transférées vers :newTag',\n        'success_post'  => 'Les articles de :tag ont été transférés vers :newTag',\n        'transfer'      => 'Transférer',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/teams.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'lead'          => 'Worldbuilding amusant et fiable',\n        'translations'  => 'Traductions',\n    ],\n    'leads' => [\n        'translators'   => 'Kanka est traduit en plusieurs langues grâce à ces incroyables contributeurs.',\n    ],\n    'people'=> [\n        'itzamna'   => [\n            'title' => 'Développeur Junior',\n        ],\n        'jay'       => [\n            'title' => 'Fondateur & Lead Developer',\n        ],\n        'jon'       => [\n            'title' => 'Co-Foundateur & Business Manager',\n        ],\n        'kaz'       => [\n            'title' => 'Destroyeur de bug',\n        ],\n        'laura'     => [\n            'title' => 'Social Media',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => [\n            'monthly'   => 'Paiement mensuel',\n            'save'      => 'économiser deux mois',\n            'yearly'    => 'Paiement annuel',\n        ],\n        'subscribe' => [\n            'choose'    => 'Choisir :tier',\n            'downgrade' => 'Rétrograder vers :tier',\n            'monthly'   => ':tier mensuel',\n            'upgrade'   => 'Passer à :tier',\n            'yearly'    => ':tier annuel',\n        ],\n    ],\n    'current'   => 'Abonnement actuel',\n    'features'  => [\n        'api_requests'      => ':amount requêtes API / min',\n        'boosters'          => 'Boosters de campagne',\n        'discord'           => 'Rôles :discord',\n        'feature_influence' => 'Influence sur les nouvelles fonctionnalités',\n        'file_size'         => ':size taille de fichier uploadé',\n        'import'            => 'Import de campagne',\n        'modules'           => ':count catégories personnalisées',\n        'nice_image'        => 'Images par défaut pour les entrées sans images',\n        'no_ads'            => 'Sans publicité',\n        'pagination'        => 'Jusqu\\'à :amount résultats par page',\n        'premium'           => 'Chaque offre inclut: :storage GiB de stockage, :modules catégories personnalisées',\n        'roadmap'           => 'Voter sur les idées dans la feuille de route.',\n        'storage'           => ':count GiB de stockage',\n    ],\n    'helpers'   => [\n        'premium'   => 'Ces bonus s’appliquent aux campagnes premium que tu débloques.',\n    ],\n    'periods'   => [\n        'billed_monthly'    => 'facturé mensuellement',\n        'billed_yearly'     => 'facturé annuellement',\n    ],\n    'pricing'   => ':currency :amount / mois',\n    'ribbons'   => [\n        'best-value'    => 'Meilleure valeur',\n        'current'       => 'Abonnement actuel',\n    ],\n    'target'    => [\n        'elemental' => 'Pour les créateurs chevronnés qui jonglent avec les mondes épiques et les campagnes complexes',\n        'owlbear'   => 'Parfait pour les créateurs solo qui souhaitent mettre leur campagne en valeur',\n        'wyvern'    => 'Idéal pour les maîtres de jeu qui gèrent plusieurs aventures et pour les projets collaboratifs',\n    ],\n    'tiny'      => 'petite équipe',\n    'why'       => 'Kanka est créé par une :tiny de worldbuilders passionnés. Les abonnements financent les personnes, les serveurs et le temps nécessaires pour améliorer la plateforme de manière durable. Pas de dark patterns, pas de pression d’investisseurs, pas de course à la croissance infinie. Le développement est régulier et guidé par notre communauté.',\n];\n"
  },
  {
    "path": "lang/fr/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Copier la mention avancée avec le nom de l\\'élément',\n        'success'           => 'Mention avancée vers l\\'élément copier au press-papier.',\n    ],\n    'create'        => [\n        'success'   => 'Élément ajouté à la chronologie.',\n        'title'     => 'Nouvel élément de chronologie',\n    ],\n    'delete'        => [\n        'success'   => 'L\\'élément :name a été supprimé.',\n    ],\n    'edit'          => [\n        'success'   => 'L\\'élément a été modifié.',\n        'title'     => 'Modifier l\\'élément de la chronologie',\n    ],\n    'fields'        => [\n        'date'              => 'Date',\n        'era'               => 'Ère',\n        'icon'              => 'Icône',\n        'use_entity_entry'  => 'Afficher l\\'entrée texte de l\\'entrée liée. Le text de cet élément sera afficher en premier s\\'il est présent.',\n        'use_event_date'    => 'Utiliser la date de l\\'événement lié.',\n    ],\n    'helpers'       => [\n        'date'              => 'Si l\\'élément est lié à un événement, afficher la date de l\\'événement.',\n        'entity_is_private' => 'L\\'entrée de cet élément est privé.',\n        'icon'              => 'Copier le HTML d\\'une icône depuis :fontawesome ou :rpgawesome.',\n        'is_collapsed'      => 'L\\'élément s\\'affiche de manière minimisé par défaut.',\n    ],\n    'placeholders'  => [\n        'date'      => 'ex. Le 42 Mars, ou 1332-1337',\n        'name'      => 'Requis si pas d\\'entrée sélectionnée.',\n        'position'  => 'Position dans la liste des éléments de l\\'ère. Laisser vide pour ajouter à la fin.',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Ajouter une ère',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} :count ère supprimée.|{1} :count ère supprimée.|[2,*] :count ères supprimées.',\n    ],\n    'create'        => [\n        'success'   => 'L\\'ère :name a été créée.',\n        'title'     => 'Nouvelle ère',\n    ],\n    'delete'        => [\n        'success'   => 'L\\'ère :name a été supprimée.',\n    ],\n    'edit'          => [\n        'success'   => 'L\\'ère :name a été modifiée.',\n        'title'     => 'Modifier l\\'ère :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Abbreviation',\n        'end_year'      => 'Année de fin',\n        'is_collapsed'  => 'Réduit',\n        'start_year'    => 'Année de début',\n    ],\n    'helpers'       => [\n        'eras'          => 'La chronologie a besoin d\\'être créée avant de pouvoir ajouter des ères.',\n        'is_collapsed'  => 'L\\'ère est réduite (minimisée) par défaut.',\n        'primary'       => 'Séparer la chronologie en plusieurs ères. Une chronologie a besoin au moins d\\'une ère pour fonctionner correctement.',\n    ],\n    'index'         => [\n        'title' => 'Ères de :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'AD, BC, BCE',\n        'end_year'      => 'L\\'année durant laquelle l\\'ère prend fin. Laisser vide si c\\'est l\\'ère en cours.',\n        'name'          => 'Âge modern, âge de bronze, guerres galactiques',\n        'start_year'    => 'L\\'année durant laquelle l\\'ère commence. Laisser vide si c\\'est la première ère.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/fr/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Ajouter un élément à l\\'ère :era',\n        'back'          => 'Retour à :name',\n        'save_order'    => 'Enregistrer les changements',\n    ],\n    'create'        => [\n        'title' => 'Nouvelle chronologie',\n    ],\n    'fields'        => [\n        'copy_elements' => 'Copier les éléments',\n        'copy_eras'     => 'Copier les ères',\n        'eras'          => 'Ères',\n        'reverse_order' => 'Inverser l\\'ordre des ères',\n    ],\n    'helpers'       => [\n        'no_era_v2'     => 'Cette chronologie ne possède pas d\\'ères. Les ères peuvent être ajoutées ici, après quoi des éléments pourront y être ajouté.',\n        'reverse_order' => 'Activer pour afficher les ères dans le sens chronologique inversé (plus ancien en premier)',\n    ],\n    'lists'         => [\n        'empty' => 'Créé une frise chronologique visuelle pour consigner les événements majeurs et suivre l\\'évolution du monde.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Principale, chronique du monde, chronologie du royaume',\n    ],\n    'reorder'       => [\n        'empty'     => 'Il faut en premier ajouter des ères et éléments à la chronologie pour pouvoir la réordonner.',\n        'success'   => 'Chronologie réordonnée.',\n        'title'     => 'Réordonner la chronologie',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder-elements'  => 'Réordonner les éléments',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/tiptap.php",
    "content": "<?php\n\nreturn [\n    'share' => 'Donne ton avis',\n    'survey'=> 'Tu essaies le nouvel éditeur? :share (ça prend juste 2 minutes)',\n];\n"
  },
  {
    "path": "lang/fr/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'Un vrai maître des mots! Vainqueur d\\'un évènement.',\n    ],\n    'fields'        => [\n        'achievements'      => 'Accomplissements',\n        'banned'            => 'Cet utilisateur est suspendu.',\n        'entities_created'  => 'Entrées créées :help :count',\n        'member_since'      => 'Membre depuis :date',\n        'public_campaigns'  => 'Campagnes publiques',\n        'subscriber_since'  => 'Abonné depuis :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'Cette valeur est recalculée chaque jour.',\n    ],\n    'title'         => 'Profile :name',\n];\n"
  },
  {
    "path": "lang/fr/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => 'Le champ :attribute doit être accepté.',\n    'active_url'           => \"Le champ :attribute n'est pas une URL valide.\",\n    'after'                => 'Le champ :attribute doit être une date postérieure au :date.',\n    'after_or_equal'       => 'Le champ :attribute doit être une date postérieure ou égale au :date.',\n    'alpha'                => 'Le champ :attribute doit contenir uniquement des lettres.',\n    'alpha_dash'           => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.',\n    'alpha_num'            => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.',\n    'array'                => 'Le champ :attribute doit être un tableau.',\n    'before'               => 'Le champ :attribute doit être une date antérieure au :date.',\n    'before_or_equal'      => 'Le champ :attribute doit être une date antérieure ou égale au :date.',\n    'between'              => [\n        'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.',\n        'file'    => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.',\n        'string'  => 'Le texte :attribute doit contenir entre :min et :max caractères.',\n        'array'   => 'Le tableau :attribute doit contenir entre :min et :max éléments.',\n    ],\n    'boolean'              => 'Le champ :attribute doit être vrai ou faux.',\n    'confirmed'            => 'Le champ de confirmation :attribute ne correspond pas.',\n    'date'                 => \"Le champ :attribute n'est pas une date valide.\",\n    'date_equals'          => 'Le champ :attribute doit être une date égale à :date.',\n    'date_format'          => 'Le champ :attribute ne correspond pas au format :format.',\n    'different'            => 'Les champs :attribute et :other doivent être différents.',\n    'digits'               => 'Le champ :attribute doit contenir :digits chiffres.',\n    'digits_between'       => 'Le champ :attribute doit contenir entre :min et :max chiffres.',\n    'dimensions'           => \"La taille de l'image :attribute n'est pas conforme.\",\n    'distinct'             => 'Le champ :attribute a une valeur en double.',\n    'email'                => 'Le champ :attribute doit être une adresse email valide.',\n    'exists'               => 'Le champ :attribute sélectionné est invalide.',\n    'file'                 => 'Le champ :attribute doit être un fichier.',\n    'filled'               => 'Le champ :attribute doit avoir une valeur.',\n    'gt'                   => [\n        'numeric' => 'La valeur de :attribute doit être supérieure à :value.',\n        'file'    => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.',\n        'string'  => 'Le texte :attribute doit contenir plus de :value caractères.',\n        'array'   => 'Le tableau :attribute doit contenir plus de :value éléments.',\n    ],\n    'gte'                  => [\n        'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.',\n        'file'    => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.',\n        'string'  => 'Le texte :attribute doit contenir au moins :value caractères.',\n        'array'   => 'Le tableau :attribute doit contenir au moins :value éléments.',\n    ],\n    'image'                => 'Le champ :attribute doit être une image.',\n    'in'                   => 'Le champ :attribute est invalide.',\n    'in_array'             => \"Le champ :attribute n'existe pas dans :other.\",\n    'integer'              => 'Le champ :attribute doit être un entier.',\n    'ip'                   => 'Le champ :attribute doit être une adresse IP valide.',\n    'ipv4'                 => 'Le champ :attribute doit être une adresse IPv4 valide.',\n    'ipv6'                 => 'Le champ :attribute doit être une adresse IPv6 valide.',\n    'json'                 => 'Le champ :attribute doit être un document JSON valide.',\n    'lt'                   => [\n        'numeric' => 'La valeur de :attribute doit être inférieure à :value.',\n        'file'    => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.',\n        'string'  => 'Le texte :attribute doit contenir moins de :value caractères.',\n        'array'   => 'Le tableau :attribute doit contenir moins de :value éléments.',\n    ],\n    'lte'                  => [\n        'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.',\n        'file'    => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.',\n        'string'  => 'Le texte :attribute doit contenir au plus :value caractères.',\n        'array'   => 'Le tableau :attribute doit contenir au plus :value éléments.',\n    ],\n    'max'                  => [\n        'numeric' => 'La valeur de :attribute ne peut être supérieure à :max.',\n        'file'    => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.',\n        'string'  => 'Le texte de :attribute ne peut contenir plus de :max caractères.',\n        'array'   => 'Le tableau :attribute ne peut contenir plus de :max éléments.',\n    ],\n    'mimes'                => 'Le champ :attribute doit être un fichier de type : :values.',\n    'mimetypes'            => 'Le champ :attribute doit être un fichier de type : :values.',\n    'min'                  => [\n        'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.',\n        'file'    => 'La taille du fichier de :attribute doit être supérieure à :min kilo-octets.',\n        'string'  => 'Le texte :attribute doit contenir au moins :min caractères.',\n        'array'   => 'Le tableau :attribute doit contenir au moins :min éléments.',\n    ],\n    'not_in'               => \"Le champ :attribute sélectionné n'est pas valide.\",\n    'not_regex'            => \"Le format du champ :attribute n'est pas valide.\",\n    'numeric'              => 'Le champ :attribute doit contenir un nombre.',\n    'present'              => 'Le champ :attribute doit être présent.',\n    'regex'                => 'Le format du champ :attribute est invalide.',\n    'required'             => 'Le champ :attribute est obligatoire.',\n    'required_if'          => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.',\n    'required_unless'      => 'Le champ :attribute est obligatoire sauf si :other est :values.',\n    'required_with'        => 'Le champ :attribute est obligatoire quand :values est présent.',\n    'required_with_all'    => 'Le champ :attribute est obligatoire quand :values sont présents.',\n    'required_without'     => \"Le champ :attribute est obligatoire quand :values n'est pas présent.\",\n    'required_without_all' => \"Le champ :attribute est requis quand aucun de :values n'est présent.\",\n    'same'                 => 'Les champs :attribute et :other doivent être identiques.',\n    'size'                 => [\n        'numeric' => 'La valeur de :attribute doit être :size.',\n        'file'    => 'La taille du fichier de :attribute doit être de :size kilo-octets.',\n        'string'  => 'Le texte de :attribute doit contenir :size caractères.',\n        'array'   => 'Le tableau :attribute doit contenir :size éléments.',\n    ],\n    'starts_with'          => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values',\n    'string'               => 'Le champ :attribute doit être une chaîne de caractères.',\n    'timezone'             => 'Le champ :attribute doit être un fuseau horaire valide.',\n    'unique'               => 'La valeur du champ :attribute est déjà utilisée.',\n    'uploaded'             => \"Le fichier du champ :attribute n'a pu être téléversé.\",\n    'url'                  => \"Le format de l'URL de :attribute n'est pas valide.\",\n    'uuid'                 => 'Le champ :attribute doit être un UUID valide',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        'name'                  => 'nom',\n        'username'              => \"nom d'utilisateur\",\n        'email'                 => 'adresse email',\n        'first_name'            => 'prénom',\n        'last_name'             => 'nom',\n        'password'              => 'mot de passe',\n        'password_confirmation' => 'confirmation du mot de passe',\n        'city'                  => 'ville',\n        'country'               => 'pays',\n        'address'               => 'adresse',\n        'phone'                 => 'téléphone',\n        'mobile'                => 'portable',\n        'age'                   => 'âge',\n        'sex'                   => 'sexe',\n        'gender'                => 'genre',\n        'day'                   => 'jour',\n        'month'                 => 'mois',\n        'year'                  => 'année',\n        'hour'                  => 'heure',\n        'minute'                => 'minute',\n        'second'                => 'seconde',\n        'title'                 => 'titre',\n        'content'               => 'contenu',\n        'description'           => 'description',\n        'excerpt'               => 'extrait',\n        'date'                  => 'date',\n        'time'                  => 'heure',\n        'available'             => 'disponible',\n        'size'                  => 'taille',\n    ],\n];\n"
  },
  {
    "path": "lang/fr/visibilities.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'admin'         => 'Seuls les administrateurs de la campagne peuvent visualiser cet élément.',\n        'admin-self'    => 'Toi et les administrateurs de la campagne êtes les seuls à pouvoir visualiser cet élément.',\n        'all'           => 'Tout le monde peut voir cet élément.',\n        'members'       => 'Seuls les membres de la campagne peuvent voir cet élément.',\n        'self'          => 'Tu es le seul à voir cet élément.',\n    ],\n    'picker'    => [\n        'admin'         => 'Visible uniquement par les membres du rôle :admin.',\n        'admin-self'    => 'Uniquement toi et les membres du rôle :admin peuvent voir ceci.',\n        'all'           => 'Toute personne pouvant voir :entity peut voir ceci.',\n        'failed'        => 'Échec de la mise à jour de la visibilité.',\n        'member'        => 'Visible uniquement par les membres de la campagne. Utile pour les campagnes publiques.',\n        'self'          => 'Uniquement toi peux voir ceci.',\n    ],\n    'title'     => 'Mise à jour de la visibilité',\n    'toast'     => 'Visibilité modifiée.',\n    'tooltip'   => 'Cliquer pour connaître les options de visibilité.',\n];\n"
  },
  {
    "path": "lang/fr/whiteboards/draw.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add-circle'    => 'Ajouter un cercle',\n        'add-entity'    => 'Ajouter une entrée',\n        'add-image'     => 'Ajouter une image',\n        'add-square'    => 'Ajouter un carré',\n        'add-text'      => 'Ajouter du texte',\n        'duplicate'     => 'Dupliquer la sélection',\n        'end-drawing'   => 'Terminer le dessin',\n        'lock'          => 'Verrouiller',\n        'push-to-back'  => 'Vers le devant',\n        'push-to-front' => 'Vers l\\'arrière',\n        'start-drawing' => 'Commencer à dessiner',\n        'unlock'        => 'Déverouiller',\n    ],\n    'entity-search' => [\n        'placeholder'   => 'Écrire le nom ou l\\'alias d\\'une entrée',\n        'title'         => 'Recherche d\\'entrée',\n    ],\n    'errors'        => [\n        'websockets'    => [\n            'disconnected'  => 'La connexion au websocket a été perdue. Réessaie.',\n            'error'         => 'Une erreur s’est produite lors de la connexion au serveur websocket.',\n            'unavailable'   => 'Le serveur websocket est indisponible. Réessaie plus tard.',\n        ],\n    ],\n    'fields'        => [\n        'color' => 'Couleure',\n    ],\n    'pen'           => [\n        'large-stroke'  => 'Grand trait',\n        'thin-stroke'   => 'Petit trait',\n    ],\n    'reset'         => [\n        'helper'    => 'Es-tu sûr de vouloir réinitialiser le tableau blanc? Cette action est irréversible.',\n        'title'     => 'Réinitialiser le tableau blanc',\n    ],\n    'roles'         => [\n        'edit'  => 'Cet utilisateur peut modifier le tableau blanc',\n        'view'  => 'Cet utilisateur peut voir le tableau blanc',\n    ],\n    'toast'         => [\n        'copy'  => [\n            'success'   => 'Éléments copiés au presse papier.',\n        ],\n        'paste' => [\n            'error' => 'Une erreure est survenue.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/fr/whiteboards.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'draw'  => 'Dessiner',\n    ],\n    'create'        => [\n        'title' => 'Nouveau tableau blanc',\n    ],\n    'cta'           => [\n        'text'  => 'Pour débloquer les tableaux blancs, une campagne doit être rendue premium par un membre de niveau :wyvern ou :elemental.',\n        'title' => 'Les tableaux blancs sont une fonctionnalité premium spéciale',\n    ],\n    'lists'         => [\n        'empty' => 'Utilise un tableau blanc pour organiser visuellement tes idées, tes relations ou la structure de ton histoire.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Idée, relations, structure d\\'histoire',\n    ],\n    'update'        => [],\n];\n"
  },
  {
    "path": "lang/hr/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'children'      => [\n        'description'   => 'Entiteti koji imaju sposobnost',\n        'title'         => 'Sposobnost :name entiteta',\n    ],\n    'create'        => [\n        'title' => 'Nova sposobnost',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'entities'      => [],\n    'fields'        => [\n        'charges'   => 'Punjenja',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'placeholders'  => [\n        'charges'   => 'Broj punjenja. Referenciraj se na atribute s {Level}*{CHA}',\n        'name'      => 'Vatrena kugla, Upozorenje, Lukavi udarac',\n        'type'      => 'Čarolija, podvig, napad',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/hr/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'create'                => [\n        'title' => 'Novi predložak svojstva',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [],\n    'hints'                 => [\n        'automatic'                 => 'Svojstva automatski pridjeljena iz :link predloška svojstva.',\n        'entity_type'               => 'Ako je uključeno, kreiranje novog entiteta ovog tipa će automatski primjeniti ovaj predložak svojstva na njega.',\n        'parent_attribute_template' => 'Ovaj predložak svojstva može biti dijete drugog predloška svojstva. Kad se primjenjuje ovaj predložak svojstva, primjenjuju se i svi njegovi predlošci svojstva roditelji.',\n    ],\n    'index'                 => [],\n    'placeholders'          => [\n        'name'  => 'Naziv predloška svojstva',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/hr/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Greška',\n            'rendering' => 'Došlo je do pogreške prilikom prikazivanja dodatka za tržište. Molimo kontaktiraj tvorca dodatka.',\n        ],\n    ],\n    'helpers'   => [],\n    'list'      => [],\n];\n"
  },
  {
    "path": "lang/hr/auth.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'failed'    => 'Uneseni korisnički podaci ne odgovaraju našim zapisima.',\n    'helpers'   => [\n        'password'  => 'Prikaži / sakrij lozinku',\n    ],\n    'login'     => [\n        'fields'                => [\n            'email'     => 'Email',\n            'password'  => 'Lozinka',\n        ],\n        'or'                    => 'ILI',\n        'password_forgotten'    => 'Zaboravljena lozinka?',\n        'submit'                => 'Prijava',\n        'title'                 => 'Prijava',\n    ],\n    'register'  => [\n        'errors'    => [\n            'email_already_taken'   => 'Račun s ovom email adresom je već registriran.',\n            'general_error'         => 'Dogodila se pogreška prilikom registracije. Molimo, pokušaj ponovno.',\n        ],\n        'fields'    => [\n            'email'     => 'Email',\n            'name'      => 'Korisničko ime',\n            'password'  => 'Lozinka',\n        ],\n        'submit'    => 'Registracija',\n        'title'     => 'Registracija',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Email adresa',\n            'password'              => 'Lozinka',\n            'password_confirmation' => 'Potvrdi svoju lozinku',\n        ],\n        'send'      => 'Pošalji poveznicu za ponovno postavljanje lozinke',\n        'submit'    => 'Ponovno postavi lozinku',\n        'title'     => 'Ponovi lozinku',\n    ],\n    'throttle'  => 'Previše pokušaja prijave. Molim, pokušaj ponovno za :seconds sekundi.',\n];\n"
  },
  {
    "path": "lang/hr/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova poveznica izbornika',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'title' => 'Poveznica izbornika :name',\n    ],\n    'fields'        => [\n        'dashboard'     => 'Naslovna ploča',\n        'filters'       => 'Filteri',\n        'menu'          => 'Izbornik',\n        'position'      => 'Pozicija',\n        'random_type'   => 'Nasumičan tip entiteta',\n        'selector'      => 'Konfiguracija brzih poveznica',\n    ],\n    'helpers'       => [\n        'dashboard' => 'Neka brza poveznica cilja jednu od prilagođenih naslovnih ploča kampanje.',\n        'entity'    => 'Postavi ovu poveznicu izbornika tako da ide direktno na entitet. Polje :tab kontrolira koja kartica je fokusirana. Polje :menu kontrolira koja podstranica entiteta se otvara.',\n        'position'  => 'Pomoću ovog polja možeš upravljati redoslijedom kojim se poveznice pojavljuju na izborniku.',\n        'random'    => 'Koristi ovo polje za brzu vezu koja upućuje na slučajni entitet. Vezu možeš filtrirati tako da ide samo do određenu vrstu entiteta.',\n        'selector'  => 'Konfiguriraj kamo vodi ova brza poveznica kada je korisnik klikne na bočnoj traci.',\n        'type'      => 'Postavi ovu poveznicu izbornika tako da vodi direktno na listu entiteta. Za filtriranje rezultata, kopiraj dijelove URL s filtrirane liste entiteta nakon znaka :? u polje :filter',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'filters'   => 'location_id=15&type=grad',\n        'menu'      => 'Podstranica izbornika (koristite posljednji tekst URL-a)',\n        'tab'       => 'unos, odnosi, bilješke',\n    ],\n    'random_types'  => [\n        'any'   => 'Bilo koji entitet',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/hr/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'success'   => 'Dodani vremenski uvjeti.',\n        'title'     => 'Novi učinak vremenskih uvjeta',\n    ],\n    'destroy'       => [\n        'success'   => 'Uklonjeni vremenski uvjeti.',\n    ],\n    'edit'          => [\n        'success'   => 'Ažurirani vremenski uvjeti.',\n        'title'     => 'Ažuriraj vremenske uvjete',\n    ],\n    'fields'        => [\n        'effect'        => 'Učinak',\n        'name'          => 'Naziv',\n        'precipitation' => 'Oborine',\n        'temperature'   => 'Temperatura',\n        'weather'       => 'Vremenski uvjeti',\n        'wind'          => 'Vjetar',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Grmljavina',\n            'cloud'                 => 'Oblačno',\n            'cloud-rain'            => 'Kišovito',\n            'cloud-showers-heavy'   => 'Jaka kiša',\n            'cloud-sun'             => 'Oblačno i sunčano',\n            'cloud-sun-rain'        => 'Oblaci, sunčano i kiša',\n            'meteor'                => 'Meteor',\n            'smog'                  => 'Smog',\n            'snowflake'             => 'Snijeg',\n            'sun'                   => 'Sunčano',\n            'wind'                  => 'Vjetrovito',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Magični ili prirodni učinak',\n        'name'          => 'Neobavezan prilagođeni tekst o vremenu',\n        'precipitation' => 'Količina vode',\n        'temperature'   => 'Dnevno visoka i niska',\n        'wind'          => 'Brzine vjetra',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Dodaj epohu',\n        'add_intercalary'   => 'Dodaj interkalarne dane',\n        'add_month'         => 'Dodaj kalendarski mjesec',\n        'add_moon'          => 'Dodaj mjesec (nebesko tijelo)',\n        'add_reminder'      => 'Dodaj podsjetnik',\n        'add_season'        => 'Dodaj sezonu',\n        'add_weather'       => 'Postavi vremenski efekt',\n        'add_week'          => 'Dodaj imenovani tjedan',\n        'add_weekday'       => 'Dodaj dan u tjednu',\n        'add_year'          => 'Dodaj ime godine',\n        'set_today'         => 'Postavi kao trenutni dan',\n        'today'             => 'Danas',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Ponavlja se svake godine',\n    ],\n    'create'        => [\n        'title' => 'Novi kalendar',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Ažuriran datum kalendara.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Kreiran događaj u kalendaru.',\n            'title'     => 'Dodaj događaj u kalendaru na :name',\n        ],\n        'destroy'   => 'Uklonjen događaj iz kalendara \":name\".',\n        'edit'      => [\n            'success'   => 'Ažuriran događaj u kalendaru.',\n            'title'     => 'Ažuriraj događaj kalendara u :name',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Uređujete podsjetnik koji se nalazi na kalendaru :calendar.',\n        ],\n        'success'   => 'Događaj \":event\" dodan u kalendar.',\n    ],\n    'events'        => [],\n    'fields'        => [\n        'comment'           => 'Komentar',\n        'current_day'       => 'Trenutni dan',\n        'current_month'     => 'Trenutni mjesec',\n        'current_year'      => 'Trenutna godina',\n        'date'              => 'Trenutni datum',\n        'is_incrementing'   => 'Pomični datum',\n        'is_recurring'      => 'Ponavljajući',\n        'leap_year_amount'  => 'Dodaj dane',\n        'leap_year_month'   => 'Mjesec',\n        'leap_year_offset'  => 'Svakih',\n        'leap_year_start'   => 'Prijestupne godine',\n        'length'            => 'Duljina događaja',\n        'length_days'       => ':count day|:count days',\n        'months'            => 'Kalendarski mjeseci',\n        'moons'             => 'Mjeseci (nebeska tijela)',\n        'parameters'        => 'Parametri',\n        'recurring_until'   => 'Ponavlja se do godine',\n        'reset'             => 'Tjedno ponovno postavljanje',\n        'seasons'           => 'Sezone',\n        'start_offset'      => 'Početni odmak',\n        'suffix'            => 'Dometak',\n        'week_names'        => 'Nazivi tjedana',\n        'weekdays'          => 'Nazivi dana',\n    ],\n    'helpers'       => [\n        'month_type'    => 'Interkalarni mjeseci ne koriste dane, ali utječu na mjesece i sezone.',\n        'start_offset'  => 'Zadano je da kalendar počinje od prvog dana u tjednu nulte godine. Promjena ovog polja utječe na to gdje je prvi dan kalendar postavljen.',\n    ],\n    'hints'         => [\n        'event_length'      => 'Koliko dugo treba trajati događaj. Događaj ne može trajati duže od dva mjeseca.',\n        'is_incrementing'   => 'Pomični kalendari će automatski povećati svoj trenutni dan u 00:00 UTC.',\n        'months'            => 'Tvoj kalendar bi trebao imati barem 2 kalendarska mjeseca.',\n        'moons'             => 'Dodavanje mjeseci (nebeskih tijela) će ih dodati na kalendar za svaki puni i mladi mjesec. Ako je period punog mjeseca duži od 10 dana, prikazat će se i prva i posljednja četvrt.',\n        'parent_calendar'   => 'Dodavanje roditeljskog kalendara uključuje podsjetnike i vremenske uvjete tog roditeljskog kalendara.',\n        'reset'             => 'Uvijek započni početak mjeseca ili godine na prvi dan tjedna.',\n        'seasons'           => 'Stvori sezone za svoj kalendar tako što odrediš kad svaka počinje. Kanka će se pobrinuti za ostalo.',\n        'weekdays'          => 'Postavi nazive za dane u tjednu. Barem 2 dana u tjednu su potrebna.',\n        'weeks'             => 'Definiraj neke nazive za bitnije tjedne u svom kalendaru.',\n        'years'             => 'Neke godine su toliko važne da imaju svoj naziv.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month' => 'Mjesec',\n        'year'  => 'Godina',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Promjena godine',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Interkalarni',\n        'standard'      => 'Standardni',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Pun mjesec',\n                'fullmoon_name' => ':moon pun mjesec',\n                'month'         => 'Mjesečno',\n                'newmoon'       => 'Mladi mjesec',\n                'newmoon_name'  => ':moon mladi mjesec',\n                'none'          => 'Ništa',\n                'unnamed_moon'  => 'Mjesec :number',\n                'year'          => 'Godišnje',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Nikad',\n            'month' => 'Mjesečno',\n            'year'  => 'Godišnje',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Interkalarni dani',\n        'leap_year'     => 'Prijestupna godina',\n        'months'        => 'Mjeseci',\n        'weeks'         => 'Tjedni',\n        'years'         => 'Imenovane godine',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Duljina trajanja u danima',\n            'month'     => 'Na kraju kojeg mjeseca',\n            'name'      => 'Naziv interkalarnosti',\n        ],\n        'month'         => [\n            'alias' => 'Drugo ime mjeseca',\n            'length'=> 'Dana',\n            'name'  => 'Naziv mjeseca',\n            'type'  => 'Tip',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Pun mjesec svakih (dana)',\n            'name'      => 'Naziv mjeseca',\n            'offset'    => 'Pomak za prvi puni mjesec',\n        ],\n        'seasons'       => [\n            'day'   => 'Dan počinje',\n            'month' => 'Mjesec počinje',\n            'name'  => 'Naziv godišnjeg doba',\n        ],\n        'weeks'         => [\n            'name'      => 'Naziv tjedna',\n            'number'    => 'Broj',\n        ],\n        'year'          => [\n            'name'      => 'Naziv godine',\n            'number'    => 'Godina',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Boja',\n        'comment'           => 'Rođendan, festival, solsticij',\n        'date'              => 'Trenutni datum',\n        'leap_year_amount'  => 'Broj dana koji se doda na svaku prijestupnu godinu',\n        'leap_year_month'   => 'Mjesec na koji se dani dodaju',\n        'leap_year_offset'  => 'Svakih koliko godina je prijestupna godina',\n        'leap_year_start'   => 'Prva godina koja je prijestupna',\n        'length'            => 'Duljina događaja u danima',\n        'months'            => 'Broj mjeseci u godini',\n        'recurring_until'   => 'Zadnja godina ponavljanja (ostavi prazno za ponavljanje zauvijek)',\n        'seasons'           => 'Broj sezona',\n        'suffix'            => 'Dometak trenutnoj eri (pr.n.e. ili n.e.)',\n        'type'              => 'Tip kalendara',\n        'weekdays'          => 'Broj dana u tjednu',\n    ],\n    'show'          => [\n        'missing_details'   => 'Ovaj se kalendar nije mogao prikazati. Kalendari trebaju imati barem 2 kalendarska mjeseca i barem 2 dana u tjednu da bi se pravilno prikazali.',\n        'tabs'              => [\n            'events'    => 'Događaji kalendara',\n            'weather'   => 'Vremenski uvjeti',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Danas i poslije',\n        'before'=> 'Danas i prije',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'accept'    => 'Prihvati',\n        'reject'    => 'Odbij',\n    ],\n    'apply'         => [\n        'apply'         => 'Prijavi se',\n        'help'          => 'Ova kampanja otvorena je za nove članove. Prijavi se ispunjavanjem obrasca. Bit ćeš obaviješten/a kad administratori kampanje pregledaju tvoju prijavu.',\n        'remove_text'   => 'tvoja prijava',\n        'success'       => [\n            'apply' => 'Tvoja prijava je spremljena. I dalje ju možeš promijeniti ili otkazati u bilo kojem trenutku. Bit ćeš obaviješten/a kad je administratori kampanje pregledaju.',\n            'remove'=> 'Tvoja prijava je uklonjena.',\n            'update'=> 'Tvoja prijava je ažurirana. I dalje ju možeš promijeniti ili otkazati u bilo kojem trenutku. Bit ćeš obaviješten/a kad je administratori kampanje pregledaju.',\n        ],\n        'title'         => 'Pridruži se :name',\n    ],\n    'errors'        => [],\n    'fields'        => [\n        'application'   => 'Prijava',\n    ],\n    'helpers'       => [],\n    'placeholders'  => [\n        'note'  => 'Zapiši svoju prijavu za pridruživanje kampanji',\n    ],\n    'update'        => [\n        'approve'   => 'Odaberi ulogu koja će biti dodijeljena korisniku koji se pridruži kampanji.',\n        'approved'  => 'Prijava odobrena.',\n        'reject'    => 'Napiši neobaveznu poruku korisniku zašto je njihova prijava odbijena.',\n        'rejected'  => 'Prijava odbijena',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Ažurirano zaglavlje naslovne ploče kampanje.',\n        'title'     => 'Ažuriranje zaglavlja naslovne ploče kampanje.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Dodaj novu zadanu sliku',\n    ],\n    'create'    => [\n        'error'     => 'Pogreška prilikom spremanja novih zadanih slika entiteta. Da li je :type već postavljen?',\n        'success'   => 'Kreirana zadana slika entiteta za :type.',\n        'title'     => 'Nova zadana slika entiteta',\n    ],\n    'destroy'   => [\n        'success'   => 'Uklonjena zadana slika entiteta za :type.',\n    ],\n    'index'     => [],\n];\n"
  },
  {
    "path": "lang/hr/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close' => 'Zatvori',\n        'save'  => 'Spremi',\n    ],\n    'breadcrumb'    => 'Galerija',\n    'destroy'       => [\n        'success'   => 'Obrisana slika :name.',\n    ],\n    'fields'        => [\n        'created_by'    => 'Učitao/la',\n        'ext'           => 'Ekstenzija',\n        'folder'        => 'Direktorij',\n        'image_used_in' => '{1}Koristi se kao slika jednog entiteta.|[2,*]Koristi se kao slika :count entiteta.',\n        'name'          => 'Naziv',\n        'size'          => 'Veličina',\n    ],\n    'new_folder'    => [\n        'title' => 'Novi direktorij',\n    ],\n    'no_folder'     => 'Nema direktorija',\n    'placeholders'  => [\n        'search'    => 'Pretraži ime slike...',\n    ],\n    'title'         => 'Galerija kampanje :campaign',\n    'update'        => [\n        'success'   => 'Slika modificirana.',\n    ],\n    'uploader'      => [\n        'add'           => 'Dodaj novo',\n        'new_folder'    => 'Novi direktorij',\n        'or'            => 'ili',\n        'select_file'   => 'Odaberi datoteku',\n        'well'          => 'Povuci i ispusti datoteku za učitavanje',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'disable'           => 'Onemogući dodatak',\n        'enable'            => 'Omogući dodatak',\n        'import'            => 'Uvoz',\n        'update'            => 'Ažuriraj dodatak',\n        'update_available'  => 'Ažuriranje dostupno!',\n    ],\n    'destroy'       => [\n        'success'   => 'Uklonjen dodatak :plugin.',\n    ],\n    'disabled'      => [\n        'success'   => 'Dodatak :plugin je onemogućen.',\n    ],\n    'empty_list'    => 'Kampanja trenutno nema dodataka. Idi na Tržnicu da ih instaliraš nekoliko pa se vrati da ih aktiviraš.',\n    'enabled'       => [\n        'success'   => 'Dodatak :plugin je omogućen.',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Neispravan dodatak.',\n    ],\n    'fields'        => [\n        'name'      => 'Naziv dodatka',\n        'status'    => 'Status',\n        'type'      => 'Vrsta dodatka',\n    ],\n    'import'        => [\n        'created'   => 'Stvoreni sljedeći entiteti:',\n        'success'   => '{1}Uvezen :count entitet iz dodatka :plugin.|[2,*]Uvezeno :count entiteta iz dodatka :plugin.',\n        'updated'   => 'Ažurirani sljedeći entiteti:',\n    ],\n    'info'          => [\n        'helper'    => 'Kad izađe nova verzija dodatka, možeš ga ažurirati na najnoviju verziju za svoju kampanju.',\n        'title'     => 'Ažuriranja dodatka :plugin',\n        'updates'   => 'Ažuriranja',\n    ],\n    'status'        => [\n        'disabled'  => 'Onemogućeno',\n        'enabled'   => 'Omogućeno',\n    ],\n    'templates'     => [\n        'name'  => ':name, autor :user',\n    ],\n    'title'         => 'Dodaci kampanje :name',\n    'types'         => [\n        'attribute' => 'Predložak atributa',\n        'pack'      => 'Sadržajni paket',\n        'theme'     => 'Tema',\n    ],\n    'update'        => [\n        'success'   => 'Dodatak :plugin ažuriran.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'   => 'Oporavi',\n    ],\n    'error'     => 'Došlo je do pogreške prilikom oporavka entiteta.',\n    'fields'    => [\n        'deleted'   => 'Obrisano',\n    ],\n    'title'     => 'Oporavak entiteta za :campaign',\n];\n"
  },
  {
    "path": "lang/hr/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Kalendari',\n            'title' => 'Čuvar Vremena',\n        ],\n        'murderer'  => [\n            'goal'  => 'Mrtvi likovi',\n            'title' => 'Ubojica',\n        ],\n    ],\n    'targets'       => [],\n    'titles'        => [\n        'calendars' => 'Čuvar Vremena razina :level',\n        'characters'=> 'Davatelj Imena razina :level',\n        'dead'      => 'Ubojica razina :level',\n        'families'  => 'Planiranje Obitelji razina :level',\n        'locations' => 'Graditelj razina :level',\n        'quests'    => 'Organizator razina :level',\n        'races'     => 'Uzgajivač razina :level',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/campaigns.php",
    "content": "<?php\n\nreturn [\n    'create'                            => [\n        'success'   => 'Kampanja kreirana.',\n        'title'     => 'Nova kampanja',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Kampanja ažurirana.',\n    ],\n    'entity_note_visibility'            => [],\n    'entity_personality_visibilities'   => [\n        'private'   => 'Novi likovi imaju svoju osobnost postavljenu kao privatnu, osim ako to ne promijeniš.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Novi entiteti su privatni',\n    ],\n    'errors'                            => [\n        'access'        => 'Nemaš pristup ovoj kampanji.',\n        'unknown_id'    => 'Nepoznata kampanja.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'Pojačali',\n        'entity_count'              => 'Broj entiteta',\n        'entry'                     => 'Opis kampanje',\n        'followers'                 => 'Pratitelji',\n        'header_image'              => 'Slika zaglavlja',\n        'image'                     => 'Slika',\n        'locale'                    => 'Jezik',\n        'name'                      => 'Naziv',\n        'open'                      => 'Otvoreno za prijave',\n        'public_campaign_filters'   => 'Filteri javnih kampanja',\n        'superboosted'              => 'Super pojačali',\n        'system'                    => 'Sustav',\n        'theme'                     => 'Tema',\n    ],\n    'following'                         => 'Praćenje',\n    'helpers'                           => [\n        'boosted'                   => 'Neke funkcionalnosti su otključane jer je ova kampanja pojačana. Pronađi više na stranicama :settings.',\n        'css'                       => 'Napiši svoj CSS koji će biti učitan u stranice tvoje kampanje. Zlonamjerno korištenje ove funkiconalnosti će rezultirati uklanjanjem tvog CSS-a. Ponovni ili posebno teški prijestupi mogu dovesti do uklanjanja tvoje kampanje.',\n        'dashboard'                 => 'Prilagodi način na koji se prikazuje programčić naslovne ploče kampanje popunjavanjem sljedećih polja.',\n        'excerpt'                   => 'Isječak kampanje će biti prikazan na naslovnoj ploči pa napiši nekoliko rečenica kao uvod u svoj svijet. Za najbolje rezultate, neka bude kratko.',\n        'header_image'              => 'Slika koja se prikazuje kao pozadina u programčiću naslovne ploče zaglavlja kampanje.',\n        'hide_history'              => 'Omogući ovu opciju za skrivanje povijesti entiteta članovima kampanje koji nisu administratori.',\n        'hide_members'              => 'Omogući ovu opciju za sakrivanje popisa članova kampanje za članove koji nisu administratori.',\n        'locale'                    => 'Jezik u kojem je tvoja kampanja napisana. Ovo se koristi za generiranje sadržaja i grupiranje javnih kampanja.',\n        'name'                      => 'Tvoj svijet ili kampanja može imati bilo koje ime dok god sadrži 4 slova ili broja.',\n        'public_campaign_filters'   => 'Pomozi drugima da pronađu kampanju među ostalim javnim kampanjama pružanjem sljedećih informacija.',\n        'public_no_visibility'      => 'Pažnja! Tvoja kampanja je javna, ali javna uloga kampanje ne može pristupiti ničemu. :fix.',\n        'system'                    => 'Ako je tvoja kampanja vidljiva javnosti, sustav je pokazan na stranici :link.',\n        'systems'                   => 'Kako bi izbjegli zatrpavanje korisnika opcijama, neke funkcionalnosti Kanke su dostupne samo s određenim RPG sustavima (npr. D&D 5e blok sa statistikama za nemani). Dodavanje podržanih sustava na ovom mjestu će omogućiti te funkcionalnosti.',\n        'theme'                     => 'Prisili korisnike da koriste ovu temu za kampanju, nadjačavajući njihov odabir.',\n        'view_public'               => 'Da bi vidio/la svoju kampanju kao javni gledatelj, otvori :link u anonimnom prozoru.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Kopiraj poveznicu u međuspremnik',\n            'link'  => 'Nova poveznica',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Kreiraj pozivnicu',\n            ],\n            'success_link'  => 'Poveznica kreirana: :link',\n            'title'         => 'Pozovi nekoga u svoju kampanju',\n        ],\n        'destroy'               => [\n            'success'   => 'Pozivnica uklonjena.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Ovaj token je već iskorišten ili kampanja više ne postoji.',\n            'invalid_token'     => 'Ovaj token više nije validan.',\n        ],\n        'fields'                => [\n            'created'   => 'Poslano',\n            'role'      => 'Uloga',\n            'type'      => 'Tip',\n        ],\n        'unlimited_validity'    => 'Neograničeno',\n    ],\n    'leave'                             => [\n        'confirm'   => 'Da li sigurno da želiš napustiti kampanju :name? Nećeš još više moći pristupiti, osim ako te administrator kampanje ne pozove ponovno.',\n        'error'     => 'Nemoguće napustiti kampanju.',\n        'success'   => 'Napustio/la si kampanju.',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'switch'        => 'Imitiraj',\n            'switch-back'   => 'Povratak na mog korisnika',\n        ],\n        'fields'                => [\n            'joined'        => 'Pridružen/a',\n            'last_login'    => 'Zadnja prijava',\n            'name'          => 'Korisnik',\n            'role'          => 'Uloga',\n            'roles'         => 'Uloge',\n        ],\n        'helpers'               => [\n            'switch'    => 'Imitiraj ovog korisnika',\n        ],\n        'impersonating'         => [\n            'message'   => 'Gledaš kampanju kao drugi korisnik. Neke funkcionalnosti su onemogućene, ali ostatak se ponaša jednako onako kako bi ih taj korisnik vidio. Da se vratiš nazad na svog korisnika, iskoristi \"Prekini imitaciju\" gumb koji se nalazi tamo gdje se inače nalazi gumb za odjavu.',\n            'title'     => 'Imitiranje :name',\n        ],\n        'invite'                => [\n            'description'   => 'Možeš pozvati prijatelje da se priključe tvojoj kampanji tako što im daš pozivnicu za priključivanje. Kad prihate pozivnicu, bit će dodani kao članovi u zatraženoj ulozi. Također im možeš poslati zahtjev putem emaila dok god nije Hotmail adresa, jer oni uvijek odbijaju Kankine emailove.',\n            'more'          => 'Možeš dodati više uloga na :link.',\n            'title'         => 'Pozvati',\n        ],\n        'roles'                 => [\n            'member'    => 'Član',\n            'owner'     => 'Administrator',\n            'player'    => 'Igrač',\n            'public'    => 'Javnost',\n            'viewer'    => 'Osmatrač',\n        ],\n        'switch_back_success'   => 'Vratio si se na svog korisnika.',\n    ],\n    'open_campaign'                     => [],\n    'panels'                            => [\n        'dashboard' => 'Naslovna ploča',\n        'setup'     => 'Postavljanje',\n        'sharing'   => 'Dijeljenje',\n        'systems'   => 'Sustavi',\n        'ui'        => 'Sučelje',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Jezični kod',\n        'name'      => 'Naziv tvoje kampanje',\n        'system'    => 'D&D, Pathfinder, Fate, DSA',\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'   => 'Dodaj ulogu',\n        ],\n        'admin_role'    => 'uloga administratora',\n        'create'        => [\n            'success'   => 'Uloga kreirana.',\n            'title'     => 'Kreiraj novu ulogu za: name',\n        ],\n        'destroy'       => [\n            'success'   => 'Uloga uklonjena.',\n        ],\n        'edit'          => [\n            'success'   => 'Uloga ažurirana.',\n            'title'     => 'Uredi ulogu :name',\n        ],\n        'fields'        => [\n            'name'          => 'Naziv',\n            'permissions'   => 'Ovlasti',\n            'type'          => 'Tip',\n            'users'         => 'Korisnici',\n        ],\n        'helper'        => [\n            '1' => 'Kampanja može imati koliko god uloga treba. Uloga \"Administrator\" automatski ima pristup svemu u kampanji, ali sve ostale uloge mogu imati određene ovlasti za različite entitete (likove, lokacije, itd).',\n            '2' => 'Entitetima se mogu detaljnije podesiti ovlasti pregledom kartice \"Ovlasti\" na entitetu. Ova kartica se pojavljuje kad tvoja kampanja ima nekoliko uloga za članove.',\n            '3' => 'Možeš ići sustavom \"isključivanja\", u kojem je ulogama dan pristup pregledu svih entiteta, i onda koristiti \"Privatno\" kućicu na entitetima da ih se sakrije. Ili možeš ne dati puno ovlasti ulogama pa postavljati vidljivost svakog entiteta zasebno.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'Javna uloga ima ovlasti, ali je kampanja privatna. Ovu postavku možeš promijeniti na kartici Dijeljenje prilikom uređivanja kampanje.',\n            'role_permissions'      => 'Omogući ulozi \":name\" da radi sljedeće akcije nad svim entitetima.',\n        ],\n        'members'       => 'Članovi',\n        'permissions'   => [\n            'actions'   => [\n                'add'       => 'Kreiraj',\n                'dashboard' => 'Naslovna ploča',\n                'delete'    => 'Obriši',\n                'edit'      => 'Uredi',\n                'manage'    => 'Upravljanje',\n                'members'   => 'Članovi',\n                'permission'=> 'Ovlasti',\n                'read'      => 'Pregled',\n                'toggle'    => 'Promijeni za sve',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Naziv uloge',\n        ],\n        'title'         => 'Uloge kampanje :name',\n        'types'         => [\n            'owner'     => 'Administrator',\n            'public'    => 'Javnost',\n            'standard'  => 'Standardno',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'       => 'Dodaj člana',\n                'remove'    => ':user iz uloge :role',\n            ],\n            'create'    => [\n                'success'   => 'Korisnik dodan u ulogu.',\n                'title'     => 'Dodaj člana u ulogu :name',\n            ],\n            'destroy'   => [\n                'success'   => 'Korisnik uklonjen iz uloge.',\n            ],\n            'fields'    => [\n                'name'  => 'Naziv',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'   => [\n            'enable'    => 'Omogući',\n        ],\n        'boosted'   => 'Ova funkcionalnost je u testnoj verziji i trenutno je dostupna samo za :boosted.',\n        'helpers'   => [\n            'abilities'     => 'Stvori sposobnosti, bilo da su to podvizi, čarolije ili moći koje se mogu dodijeliti entitetima.',\n            'calendars'     => 'Mjesto za definiranje kalendara tvog svijeta.',\n            'characters'    => 'Ljudi koji nastanjuju tvoj svijet.',\n            'conversations' => 'Izmišljeni razgovori između likova ili između korisnika kampanje. Ovaj modul je zastario.',\n            'dice_rolls'    => 'Za one koji koriste Kanka za RPG kampanje, način za upravljanje bacanjem kockica. Ovaj modul je zastario.',\n            'events'        => 'Praznici, festivali, katastrofe, rođendani, ratovi.',\n            'families'      => 'Klanovi ili obitelji, njihovi odnosi i njihovi članovi.',\n            'inventories'   => 'Upravljaj inventarom svojih entiteta.',\n            'items'         => 'Oružje, vozila, relikvije, napitci.',\n            'journals'      => 'Opažanja napisana od strane likova ili priprema za sesiju za voditelja igre.',\n            'locations'     => 'Planeti, ravni postojanja, kontinenti, rijeke, države, naselja, hramovi, krčme.',\n            'maps'          => 'Prenesi karte sa slojevima i markerima koji upućuju na druge entitete u kampanji.',\n            'notes'         => 'Legende, religije, povijest, magija, rase.',\n            'organisations' => 'Kultovi, vojne jedinice, frakcije, cehovi.',\n            'quests'        => 'Za praćenje raznih zadataka s likovima i lokacijama.',\n            'races'         => 'Ako tvoja kampanja ima više od jedne rase, ovo će olakšati praćenje.',\n            'tags'          => 'Svaki entitet može imati nekoliko oznaka. Oznake mogu pripadati drugim oznakama, a unosi se mogu filtrirati po oznakama.',\n            'timelines'     => 'Prikaži povijest svog svijeta s kronologijama.',\n        ],\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Uredi kampanju',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Postignuća',\n            'default-images'    => 'Zadane slike',\n            'export'            => 'Izvoz',\n            'members'           => 'Članovi',\n            'plugins'           => 'Dodaci',\n            'recovery'          => 'Oporavak',\n            'roles'             => 'Uloge',\n        ],\n        'title'     => 'Kampanja :name',\n    ],\n    'superboosted'                      => [],\n    'ui'                                => [],\n    'visibilities'                      => [\n        'private'   => 'Privatna',\n        'public'    => 'Javna',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_appearance'    => 'Dodaj fizički izgled',\n        'add_personality'   => 'Dodaj osobnost',\n    ],\n    'conversations' => [],\n    'create'        => [\n        'title' => 'Novi lik',\n    ],\n    'destroy'       => [],\n    'dice_rolls'    => [],\n    'edit'          => [],\n    'fields'        => [\n        'age'                       => 'Starosna dob',\n        'is_dead'                   => 'Mrtav/a/o',\n        'is_personality_visible'    => 'Osobnost vidljiva',\n        'life'                      => 'Život',\n        'physical'                  => 'Fizičke osobine',\n        'pronouns'                  => 'Zamjenice',\n        'sex'                       => 'Spol',\n        'title'                     => 'Titula',\n        'traits'                    => 'Osobine',\n    ],\n    'helpers'       => [\n        'age'   => 'Možeš povezati ovaj entitet s kalendarom kampanje kako bi umjesto toga automatski izračunali njihovu dob. :more.',\n    ],\n    'hints'         => [\n        'is_dead'                   => 'Ovaj lik je mrtav',\n        'is_personality_visible'    => 'Možeš sakriti cijelu sekciju osobnosti od korisnika koji nisu \"Administratori\".',\n        'personality_not_visible'   => 'Osobine ličnosti ovog lika su trenutno vidljive samo administratorima.',\n        'personality_visible'       => 'Osobine ličnosti ovog lika su vidljive svima.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'maps'          => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => 'Lik je dodan u organizaciju.',\n            'title'     => 'Nova organizacija za :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Organizacija lika uklonjena.',\n        ],\n        'edit'      => [\n            'success'   => 'Organizacija lika ažurirana.',\n            'title'     => 'Ažuriraj organizaciju za :name',\n        ],\n        'fields'    => [\n            'role'  => 'Uloga',\n        ],\n    ],\n    'placeholders'  => [\n        'age'               => 'Starosna dob',\n        'appearance_entry'  => 'Opis',\n        'appearance_name'   => 'Kosa, Oči, Koža, Visina',\n        'personality_entry' => 'Detalji',\n        'personality_name'  => 'Ciljevi, Ponašanje, Strahovi, Veze',\n        'physical'          => 'Fizičke osobine',\n        'pronouns'          => 'On, Ona, Oni',\n        'sex'               => 'Spol',\n        'title'             => 'Titula',\n        'traits'            => 'Osobine',\n        'type'              => 'Lik igrača, Lik kojim upravlja voditelj igre, Božanstvo',\n    ],\n    'quests'        => [\n        'helpers'   => [\n            'quest_giver'   => 'Zadaci kojima je lik zadavatelj.',\n            'quest_member'  => 'Zadaci kojih je lik član.',\n        ],\n    ],\n    'sections'      => [\n        'appearance'    => 'Fizički izgled',\n        'personality'   => 'Osobnost',\n    ],\n    'show'          => [],\n    'warnings'      => [\n        'personality_hidden'    => 'Nemaš dopuštenje mijenjati osobine ovog lika.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Pastelno plava',\n    'black'         => 'Crna',\n    'blue'          => 'Plava',\n    'brown'         => 'Smeđa',\n    'green'         => 'Zelena',\n    'grey'          => 'Siva',\n    'light-blue'    => 'Svijetlo plava',\n    'maroon'        => 'Kestenjasta',\n    'navy'          => 'Mornaričko plava',\n    'none'          => 'Niti jedna',\n    'orange'        => 'Narančasta',\n    'pink'          => 'Roza',\n    'purple'        => 'Ljubičasta',\n    'red'           => 'Crvena',\n    'teal'          => 'Tirkizna',\n    'white'         => 'Bijela',\n    'yellow'        => 'Žuta',\n];\n"
  },
  {
    "path": "lang/hr/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novi razgovor',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_closed'     => 'Zatvoreno',\n        'messages'      => 'Poruke',\n        'participants'  => 'Sudionici',\n    ],\n    'hints'         => [\n        'participants'  => 'Dodaj sudionike u razgovor pritiskom na ikonu :icon u gornjem desnom kutu.',\n    ],\n    'index'         => [],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Poruka uklonjena.',\n        ],\n        'is_updated'    => 'Ažurirano',\n        'load_previous' => 'Učitaj prethodne poruke',\n        'placeholders'  => [\n            'message'   => 'Tvoja poruka',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Sudionik :entity dodan u razgovor.',\n        ],\n        'destroy'   => [\n            'success'   => 'Sudionik :entity uklonjen iz razgovora.',\n        ],\n        'modal'     => 'Sudionici',\n        'title'     => 'Sudionici u :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Naziv razgovora',\n        'type'  => 'U igri, Priprema, Zaplet',\n    ],\n    'show'          => [\n        'is_closed' => 'Razgovor je zatvoren.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Sudionici',\n    ],\n    'targets'       => [\n        'characters'    => 'Likovi',\n        'members'       => 'Članovi',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Akcije',\n        'apply'             => 'Primijeni',\n        'back'              => 'Natrag',\n        'copy'              => 'Kopiraj',\n        'copy_mention'      => 'Kopiraj [ ] spominjanje',\n        'copy_to_campaign'  => 'Kopiraj u kampanju',\n        'explore_view'      => 'Ugniježđeni pregled',\n        'export'            => 'Izvoz',\n        'find_out_more'     => 'Saznaj više',\n        'go_to'             => 'Idi na :name',\n        'json-export'       => 'Izvoz (json)',\n        'move'              => 'Pomakni',\n        'new'               => 'Novo',\n        'new_post'          => 'Nova bilješka entiteta',\n        'next'              => 'Sljedeće',\n        'reset'             => 'Resetiraj',\n        'transform'         => 'Transformiranje',\n    ],\n    'add'               => 'Dodaj',\n    'alerts'            => [\n        'copy_attribute'    => 'Spomen atributa kopiran je u tvoj međuspremnik.',\n        'copy_mention'      => 'Napredno spominjanje entiteta kopirano je u međuspremnik.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'  => 'Skupno uređivanje i označavanje',\n        ],\n        'age'           => [\n            'helper'    => 'Možeš koristiti + i - prije broja za ažuriranje dobi za taj iznos.',\n        ],\n        'edit'          => [\n            'tagging'   => 'Akcija za oznake',\n            'tags'      => [\n                'add'       => 'Dodaj',\n                'remove'    => 'Ukloni',\n            ],\n            'title'     => 'Uređivanje više entiteta',\n        ],\n        'errors'        => [\n            'admin'     => 'Samo administratori kampanje mogu promijeniti privatni status entiteta.',\n            'general'   => 'Došlo je do pogreške prilikom obrade tvoje akcije. Pokušaj ponovo i kontaktiraj nas ako se problem nastavi. Poruka o pogrešci: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Pregazi postojeće',\n            ],\n            'helpers'   => [\n                'override'  => 'Ako je uključeno, dopuštenja odabranih entiteta će biti pregažena s ovima. Ako nije uključeno, odabrana dopuštenja će biti dodana postojećim.',\n            ],\n            'title'     => 'Promijeni dopuštenja za nekoliko entiteta',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Primijeni predložak na više entiteta',\n    ],\n    'cancel'            => 'Otkaži',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Kopiraj entitete u drugu kampanju',\n        'panel'         => 'Kopiraj',\n        'title'         => 'Kopiraj \":name\" u drugu kampanju',\n    ],\n    'create'            => 'Kreiraj',\n    'datagrid'          => [\n        'empty' => 'Nema ništa za prikazati.',\n    ],\n    'delete_modal'      => [\n        'title' => 'Izbriši potvrdu',\n    ],\n    'destroy_many'      => [],\n    'edit'              => 'Uredi',\n    'errors'            => [\n        'boosted_campaigns'     => 'Ova funkcionalnost je dostupna samo za :boosted.',\n        'unavailable_feature'   => 'Nedostupna funkcionalnost',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'calendar_date'     => 'Datum kalendara',\n        'closed'            => 'Zatvoreno',\n        'colour'            => 'Boja',\n        'copy_abilities'    => 'Kopiraj Sposobnosti',\n        'copy_inventory'    => 'Kopiraj Inventar',\n        'copy_links'        => 'Kopiraj Poveznice entiteta',\n        'creator'           => 'Tvorac',\n        'excerpt'           => 'Isječak',\n        'has_entity_files'  => 'Ima datoteke entiteta',\n        'has_image'         => 'Ima sliku',\n        'header_image'      => 'Slika zaglavlja',\n        'image'             => 'Slika',\n        'is_closed'         => 'Razgovor će biti zatvoren i više neće prihvaćati nove poruke.',\n        'is_private'        => 'Privatno',\n        'is_star'           => 'Prikvačeno',\n        'locations'         => ':first u :second',\n        'name'              => 'Naziv',\n        'position'          => 'Položaj',\n        'tooltip'           => 'Kratki opis',\n        'type'              => 'Tip',\n        'visibility'        => 'Vidljivost',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Dosegnut maksimalni broj (:max) datoteka za ovaj entitet.',\n            'no_files'  => 'Nema datoteka.',\n        ],\n        'hints'     => [\n            'limit'         => 'Svaki entitet može imati maksimalno  :max datoteka prenesenih na njega.',\n            'limitations'   => 'Podržani formati: :formats. Maksimalna veličina datoteke: :size',\n        ],\n    ],\n    'filter'            => 'Filtar',\n    'filters'           => [\n        'all'               => 'Filtriraj na sve potomke',\n        'clear'             => 'Očistite filtre',\n        'copy_helper'       => 'Kopirane filtre u međuspremniku koristi kao vrijednosti za filtre na programčićima naslovne ploče i brzim vezama.',\n        'copy_to_clipboard' => 'Kopiraj filtre u međuspremnik',\n        'direct'            => 'Filtriraj na direktne potomke',\n        'filtered'          => 'Prikazuje se :count od :total :entity.',\n        'mobile'            => [\n            'clear' => 'Očisti',\n            'copy'  => 'Međuspremnik',\n        ],\n        'options'           => [\n            'exclude'   => 'Izuzmi',\n            'include'   => 'Uključi',\n            'none'      => 'Ništa',\n        ],\n        'show'              => 'Prikaži filtre',\n        'sorting'           => [\n            'asc'       => ':field uzlazno',\n            'desc'      => ':field silazno',\n            'helper'    => 'Kontroliraj u kojem se prikazuju rezultati.',\n        ],\n        'title'             => 'Filteri',\n    ],\n    'fix-this-issue'    => 'Riješi ovaj problem',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Dodajte datum kalendara',\n        ],\n        'copy_options'  => 'Opcije kopiranja',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Kopiraj sljedeće povezane elemente iz izvora u novi entitet.',\n    ],\n    'hidden'            => 'Skriveno',\n    'hints'             => [\n        'calendar_date'     => 'Datum kalendara omogućava jednostavno filtriranje u popisima, također održavajući događaj kalendara u odabranom kalendaru.',\n        'image_limitations' => 'Podržani formati: :formats. Maksimalna veličina datoteke: :size.',\n        'is_star'           => 'Prikvačeni elementi pojavit će se na izborniku entiteta',\n        'tooltip'           => 'Zamijeni automatski generirani kratki opis sljedećim sadržajem.',\n    ],\n    'history'           => [\n        'unknown'   => 'Nepoznato',\n        'view'      => 'Pogledaj zapisnik entiteta',\n    ],\n    'image'             => [\n        'error' => 'Nismo uspjeli dobiti sliku koju ste tražili. Može biti da nam web mjesto ne dopušta preuzimanje slike (uobičajeno za Squarespace i DeviantArt) ili da veza više nije valjana. Provjerite također da slika nije veća od :size.',\n    ],\n    'is_private'        => 'Ovaj je entitet privatan i vidljiv samo članovima administratorske uloge.',\n    'move'              => [],\n    'navigation'        => [\n        'cancel'    => 'otkaži',\n        'or_cancel' => 'ili :cancel',\n    ],\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Dodaj',\n                'deny'      => 'Zabrani',\n                'ignore'    => 'Ignoriraj',\n                'remove'    => 'Ukloni',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Dopusti',\n                'deny'      => 'Zabrani',\n                'inherit'   => 'Naslijedi',\n            ],\n            'delete'        => 'Brisanje',\n            'edit'          => 'Uređivanje',\n            'toggle'        => 'Uključi ili isključi',\n        ],\n        'fields'            => [\n            'member'    => 'Član',\n            'role'      => 'Uloga',\n        ],\n        'helpers'           => [\n            'setup' => 'Koristi ovo sučelje za detaljno namještanje ovlasti uloga i korisnika za ovaj entitet. :allow će dopustiti korisniku ili ulozi da odradi tu akciju. :deny će zabraniti akciju. :inherit će koristiti ovlasti korisnikove ili glavne uloge. Korisnik kojemu je postavljano :allow, može odrađivati akciju čak i ako uloga čiji je član ima :deny.',\n        ],\n        'success'           => 'Ovlasti spremljene.',\n        'title'             => 'Ovlasti',\n        'too_many_members'  => 'Ova kampanja ima previše članova (> 10) za prikaz u ovom sučelju. Upotrijebite gumb Ovlasti na prikazu entiteta za detaljnu kontrolu ovlasti.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Izaberi kalendar',\n        'gallery_image' => 'Odaberi sliku iz galerije kampanje',\n        'image_url'     => 'Umjesto toga možete prenijeti sliku sa URL-a',\n        'journal'       => 'Odaberi dnevnik',\n        'location'      => 'Izaberi lokaciju',\n        'organisation'  => 'Izaberi organizaciju',\n        'tag'           => 'Izaberi oznaku',\n        'timeline'      => 'Odaberite kronologiju',\n    ],\n    'relations'         => [],\n    'remove'            => 'Ukloni',\n    'save'              => 'Spremi',\n    'save_and_close'    => 'Spremi i zatvori',\n    'save_and_copy'     => 'Spremi i kopiraj',\n    'save_and_new'      => 'Spremi i kreni na novo',\n    'save_and_update'   => 'Spremi i ažuriraj',\n    'save_and_view'     => 'Spremi i pogledaj',\n    'search'            => 'Pretraži',\n    'select'            => 'Odaberi',\n    'tabs'              => [\n        'abilities'     => 'Sposobnosti',\n        'inventory'     => 'Inventar',\n        'permissions'   => 'Ovlasti',\n        'profile'       => 'Profil',\n        'reminders'     => 'Podsjetnici',\n    ],\n    'update'            => 'Ažuriraj',\n    'users'             => [\n        'unknown'   => 'Nepoznato',\n    ],\n    'view'              => 'Vidljivost',\n    'visibilities'      => [\n        'admin'         => 'Administratori',\n        'admin-self'    => 'Ja i administratori',\n        'all'           => 'Svi',\n        'members'       => 'Članovi',\n        'self'          => 'Samo ja',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'follow'    => 'Prati',\n        'join'      => 'Pridruži se',\n        'unfollow'  => 'Prekini pratiti',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Uredi',\n            'new'   => 'Nova naslovna ploča',\n        ],\n        'create'        => [\n            'success'   => 'Kreirana nova naslovna ploča :name.',\n            'title'     => 'Nova naslovna ploča',\n        ],\n        'custom'        => [\n            'text'  => 'Trenutno uređuješ naslovnu ploču :name.',\n        ],\n        'default'       => [\n            'text'  => 'Trenutno uređuješ zadanu naslovnu ploču.',\n            'title' => 'Zadana naslovna ploča',\n        ],\n        'delete'        => [\n            'success'   => 'Uklonjena naslovna ploča :name.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Kopiraj programčiće',\n            'name'          => 'Naziv naslovne ploče',\n            'visibility'    => 'Vidljivost',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Dupliciraj programčiće s nadzorne ploče :name u ovu novu.',\n        ],\n        'placeholders'  => [\n            'name'  => 'Naziv naslovne ploče',\n        ],\n        'update'        => [\n            'success'   => 'Ažurirana naslovna ploča :name',\n            'title'     => 'Ažuriraj nadzornu ploču :name',\n        ],\n        'visibility'    => [\n            'default'   => 'Zadana',\n            'none'      => 'Nema',\n            'visible'   => 'Vidljiva',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Praćenje kampanje prikazat će ju u izborniku kampanje (gore desno) ispod tvojih kampanja.',\n        'join'      => 'Ova kampanja otvorena je za nove članove. Prijavi se da bi joj se pridružio/la.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Dodajte programčić',\n            'back_to_dashboard' => 'Povratak na naslovnu ploču',\n            'edit'              => 'Uredi programčić',\n        ],\n        'title'     => 'Postavljanje naslovne ploče kampanje',\n    ],\n    'title'         => 'Naslovna ploča',\n    'widgets'       => [\n        'calendar'      => [\n            'actions'           => [\n                'next'      => 'Promijeni trenutni datum na sljedeći dan',\n                'previous'  => 'Promijeni trenutni datum na prethodni dan',\n            ],\n            'previous_events'   => 'Prošli događaji',\n            'upcoming_events'   => 'Nadolazeći događaji',\n        ],\n        'campaign'      => [\n            'helper'    => 'Ovaj programčić prikazuje zaglavlje kampanje i uvijek se prikazuje zadanoj nadzornoj ploči.',\n        ],\n        'create'        => [\n            'success'   => 'Programčić dodan na naslovnu ploču.',\n        ],\n        'delete'        => [\n            'success'   => 'Programčić uklonjen s naslovne ploče.',\n        ],\n        'fields'        => [\n            'dashboard' => 'Naslovna ploča',\n            'name'      => 'Proizvoljan naziv programčića',\n            'order'     => 'Sortiranje',\n            'width'     => 'Širina',\n        ],\n        'orders'        => [\n            'name_asc'  => 'Po imenu uzlazno',\n            'name_desc' => 'Po imenu silazno',\n            'recent'    => 'Nedavno izmijenjeno',\n        ],\n        'random'        => [\n            'helpers'   => [\n                'name'  => 'Možeš referencirati nasumičan entitet s {ime}.',\n            ],\n        ],\n        'recent'        => [\n            'entity-header'     => 'Koristi zaglavlje entiteta kao sliku',\n            'filters'           => 'Filteri',\n            'help'              => 'Prikaži samo posljednji ažurirani entitet, ali prikaži cijeli pregled entiteta',\n            'helpers'           => [\n                'entity-header'     => 'Ako entitet ima zaglavlje entiteta (značajka pojačane kampanje), postavite ovaj programčić da koristi tu sliku umjesto slike entiteta.',\n                'show_attributes'   => 'Prikaži prikvačene atribute entiteta ispod unosa.',\n                'show_members'      => 'Ako je entitet obitelj ili organizacija, pokaži njezine članove ispod unosa.',\n                'show_relations'    => 'Prikaži entitetove prikvačene veze ispod unosa.',\n            ],\n            'show_attributes'   => 'Prikaži prikvačene atribute',\n            'show_members'      => 'Prikaži članove',\n            'show_relations'    => 'Pokaži prikvačene odnose',\n            'singular'          => 'Jedan',\n            'tags'              => 'Filtrirajte popis nedavno izmijenjenih entiteta po navedenim oznakama.',\n            'title'             => 'Nedavno izmijenjeno',\n        ],\n        'unmentioned'   => [\n            'title' => 'Entiteti koji nisu nigdje spomenuti',\n        ],\n        'update'        => [\n            'success'   => 'Programčić ažuriran.',\n        ],\n        'widths'        => [\n            '0' => 'Automatski',\n            '12'=> 'Puna (100%)',\n            '3' => 'Sićušna (25%)',\n            '4' => 'Mala (33%)',\n            '6' => 'Pola (50%)',\n            '8' => 'Široko (66%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/hr/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'dan',\n    'days'          => 'dani',\n    'elapsed_ago'   => 'prije :duration',\n    'hour'          => 'sat',\n    'hours'         => 'sati',\n    'just_now'      => 'upravo',\n    'minute'        => 'minuta',\n    'minutes'       => 'minute',\n    'month'         => 'mjesec',\n    'months'        => 'mjeseci',\n    'second'        => 'sekunda',\n    'seconds'       => 'sekunde',\n    'week'          => 'tjedan',\n    'weeks'         => 'tjedni',\n    'year'          => 'godina',\n    'years'         => 'godine',\n];\n"
  },
  {
    "path": "lang/hr/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Naziv stranice',\n];\n"
  },
  {
    "path": "lang/hr/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Rezultati bacanja kockice',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novo bacanje kockica',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Uklonjeno bacanje kockica.',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Kockice bačene u',\n        'parameters'    => 'Parametri',\n        'results'       => 'Rezultati',\n        'rolls'         => 'Bacanja',\n    ],\n    'hints'         => [\n        'parameters'    => 'Koje su moje opcije kockica?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Rezultati',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Naziv bacanja kockica',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Bacanje',\n        ],\n        'error'     => 'Bacanje kockica neuspješno. Nije moguće analizirati parametre.',\n        'fields'    => [\n            'creator'   => 'Kreator',\n            'date'      => 'Datum',\n            'result'    => 'Rezultat',\n        ],\n        'hint'      => 'Sva bacanja napravljena za ovaj predložak bacanja kockica.',\n        'success'   => 'Kockice bačene.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Rezultati',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/hr/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    'header'            => 'Dobro došao/la u Kanku :name!',\n    'header_sub'        => 'Čestitamo, poduzeo/la si prve korake u kreiranju svog svijeta u :kanka!',\n    'pricing'           => 'određivanja cijena',\n    'section_1'         => 'Kamo sada?',\n    'section_11'        => 'Kreiraj svoj svijet,',\n    'section_2'         => 'Najvažniji resurs je :discord, gdje ćeš pronaći puno naših korisnika, tim za pomaganje novim korisnicima, te osnivatelja Kanke, koji može odgovoriti na bilo koje pitanje o Kanki.',\n    'section_4'         => 'Naš :youtube ima video zapise koji objašnjavaju osnove Kanke. Iako još uvijek nisu pokrivene sve teme, redovito dodajemo nove video zapise.',\n    'section_6'         => 'Kontaktiraj nas',\n    'section_7'         => 'Ako nisi pronašao/la odgovor na pitanje ili jednostavno želiš stupiti u kontakt, možeš nas pronaći na :facebook ili nam možeš poslati email na :email. Mi smo mali tim od 2 prijatelja, ali se trudimo odgovarati na svaki email koji primimo, tako da se nemoj ustručavati!',\n    'section_8'         => 'Još jedna stvar',\n    'section_9_v2'      => 'Pobrinuli smo se da su sve osnovne funkcionalnosti u Kanki besplatne, i tako će uvijek i biti. Međutim, ako želiš podržati ovaj projekt, možeš postati pretplatnik i dobiti pristup dodatnim funkcionalnostima, kao i našu vječnu zahvalnost! Saznaj više na stranici :pricing.',\n    'social_account'    => 'Ako imaš problema s prijavom na svoj račun, mali podsjetnik da koristiš prijavu pomoću :provider. Ovo možeš promijeniti u postavkama svog računa.',\n    'title'             => 'Započinjanje rada s Kankom',\n];\n"
  },
  {
    "path": "lang/hr/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Dodaj sposobnost',\n        'reset' => 'Poništi korištenje sposobnosti',\n    ],\n    'create'    => [\n        'success'           => 'Sposobnost :ability dodana na :entity.',\n        'success_multiple'  => 'Sposobnosti :abilities dodane na :entity.',\n        'title'             => 'Dodaj sposobnost za :name',\n    ],\n    'fields'    => [\n        'note'      => 'Bilješka',\n        'position'  => 'Pozicija',\n    ],\n    'helpers'   => [\n        'note'  => 'U ovom polju se možeš referencirati na entitete koristeći napredno spominjanje (npr. :code) i atribute entiteta (npr :attr).',\n    ],\n    'import'    => [\n        'errors'    => [\n            'no_race'       => 'Lik nema rasu.',\n            'not_character' => 'Entitet nije lik.',\n        ],\n        'success'   => '{1} :count sposobnost uvezena.|[2,4] :count sposobnosti uvezene.|[5,*] :count sposobnosti uvezeno.',\n    ],\n    'show'      => [\n        'helper'    => 'Dodaj sposobnosti za ovaj entitet. Uvijek možeš promijeniti vidljivost ili ukloniti sposobnost. Sposobnosti koje pripadaju istoj sposobnosti roditelju će se prikazati kao filter kutije.',\n        'title'     => 'Sposobnosti entiteta u :name',\n    ],\n    'update'    => [\n        'title' => 'Sposobnost entiteta za :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'templates' => [\n        'set'       => 'Postavi kao predložak',\n        'success'   => [\n            'set'   => 'Entitet :name je postavljen kao predložak.',\n            'unset' => 'Entitet :name više nije postavljen kao predložak.',\n        ],\n        'unset'     => 'Ukloni kao predložak',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'file'  => 'Datoteka',\n        'link'  => 'Poveznica',\n    ],\n    'show'      => [\n        'title' => 'Imovina :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'manage'        => 'Upravljanje',\n        'more'          => 'Više opcija',\n        'remove_all'    => 'Izbriši sve',\n    ],\n    'errors'        => [\n        'loop'  => 'U ovom izračunu atributa postoji beskonačna petlja!',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Predlošci zajednice',\n        'is_private'            => 'Privatni atributi',\n        'is_star'               => 'Prikvačeno',\n        'value'                 => 'Vrijednost',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Jesi li siguran/a da želiš izbrisati sve atribute ovog entiteta?',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Ažurirani atributi za :entity.',\n        'title'     => 'Atributi za :name',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Broj osvajanja, Razina izazova, Inicijativa, Stanovništvo',\n        'block'     => 'Naziv bloka',\n        'checkbox'  => 'Naziv potvrdnog okvira',\n        'icon'      => [\n            'class' => 'Klase FontAwesome ili RPG Awesome: fas fa-users',\n            'name'  => 'Naziv ikone',\n        ],\n        'random'    => [\n            'name'  => 'Naziv atributa',\n            'value' => '1-100 ili popis vrijednosti odvojenih zarezom',\n        ],\n        'section'   => 'Naziv odjeljka',\n        'value'     => 'Vrijednost atributa',\n    ],\n    'show'          => [\n        'title' => ':name atributi',\n    ],\n    'template'      => [\n        'success'   => 'Predložak atributa :name primijenjen na :entity',\n        'title'     => 'Primijeni predložak atributa za :name',\n    ],\n    'types'         => [\n        'attribute' => 'Atribut',\n        'block'     => 'Blok',\n        'checkbox'  => 'Potvrdni okvir',\n        'icon'      => 'Ikona',\n        'random'    => 'Nasumično',\n        'section'   => 'Odjeljak',\n        'text'      => 'Tekst u više redova',\n    ],\n    'update'        => [\n        'success'   => 'Ažurirani atributi za :entity.',\n    ],\n    'visibility'    => [\n        'entry'     => 'Atribut je prikazan u izborniku entiteta.',\n        'private'   => 'Atribut vidljiv samo članovima uloge \"Administrator\".',\n        'public'    => 'Atribut vidljiv svim članovima.',\n        'tab'       => 'Atribut se prikazuje samo na kartici Atributi.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/events.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'type'  => 'Tip događaja',\n    ],\n    'helpers'   => [\n        'characters'    => 'Postavljanje tipa kao datuma rođenja ili smrti za ovog lika će automatski izračunati njihovu dob. :more.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Dodaj podsjetnik',\n        ],\n        'title'     => ':name podsjetnici',\n    ],\n    'types'     => [\n        'birth'     => 'Rođenje',\n        'death'     => 'Smrt',\n        'primary'   => 'Primarno',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/files.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'title' => 'Nova datoteka za :entity',\n    ],\n    'destroy'   => [\n        'success'   => 'Datoteka :file uklonjena.',\n    ],\n    'fields'    => [\n        'file'  => 'Datoteka',\n        'name'  => 'Naziv datoteke',\n    ],\n    'update'    => [\n        'success'   => 'Datoteka :file ažurirana.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'change_focus'  => 'Promijeni točku fokusa',\n        'replace_image' => 'Zamijeni sliku',\n        'save-replace'  => 'Zamijeni sliku',\n        'save_focus'    => 'Spremi fokus',\n        'view'          => 'Pogledaj sliku',\n    ],\n    'focus'     => [\n        'breadcrumb'    => 'Fokus slike',\n        'helper'        => 'Klikni sliku da bi postavio/la točku fokusa. Klikni točku fokusa da bi ju uklonio/la.',\n        'panel_title'   => 'Fokus slike',\n        'success'       => 'Fokus slike ažuriran.',\n        'title'         => 'Fokus slike entiteta :name',\n        'unboosted'     => 'Postavljanje točke fokusa slike je rezervirano za :boosted-campaigns.',\n    ],\n    'replace'   => [\n        'breadcrumb'    => 'Zamjena slike',\n        'panel_title'   => 'Zamjena slike entiteta',\n        'success'       => 'Slika zamijenjena.',\n        'title'         => 'Zamjena slike entiteta :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'success'   => 'Predmet :item dodan :entity.',\n        'title'     => 'Dodaj predmet :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Predmet :item uklonjen :entity.',\n    ],\n    'fields'        => [\n        'amount'        => 'Količina',\n        'description'   => 'Opis',\n        'is_equipped'   => 'Opremljen',\n        'name'          => 'Naziv',\n        'position'      => 'Pozicija',\n    ],\n    'placeholders'  => [\n        'amount'        => 'Bilo koja količina',\n        'description'   => 'Rabljen, oštećen, podešen',\n        'name'          => 'Obavezno ako nije odabran nijedan predmet',\n        'position'      => 'Opremljeno, ruksak, spremište, banka',\n    ],\n    'show'          => [\n        'helper'    => 'Entiteti mogu imati predmete priložene sebi kako bi kreirali inventar.',\n        'title'     => 'Inventar entiteta :name',\n        'unsorted'  => 'Nesortirano',\n    ],\n    'update'        => [\n        'success'   => 'Predmet :item ažuriran za :entity',\n        'title'     => 'Ažuriraj predmet na :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Dodaj poveznicu',\n    ],\n    'create'        => [\n        'success'   => 'Dodana poveznica :name: na :entity.',\n        'title'     => 'Dodaj poveznicu na :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Uklonjena poveznica :name: s :entity.',\n    ],\n    'fields'        => [\n        'icon'      => 'Ikona',\n        'name'      => 'Naziv',\n        'position'  => 'Pozicija',\n        'url'       => 'URL',\n    ],\n    'helpers'       => [\n        'icon'  => 'Možeš prilagoditi ikonu prikazanu za poveznicu. Upotrijebi bilo koju besplatnu ikonu od :fontawesome ili ostavi prazno polje za korištenje zadanih postavki.',\n    ],\n    'placeholders'  => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'          => [\n        'helper'    => 'Pojačane kampanje mogu dodati veze na entitete koji vode na vanjske web stranice.',\n        'title'     => 'Poveznice za :name',\n    ],\n    'unboosted'     => [],\n    'update'        => [\n        'success'   => 'Ažurirana poveznica :name za :entity.',\n        'title'     => 'Ažuriraj poveznicu za :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Kreiraj',\n        'delete'    => 'Obriši',\n        'restore'   => 'Oporavi',\n        'update'    => 'Ažuriraj',\n    ],\n    'fields'        => [\n        'action'    => 'Akcija',\n        'date'      => 'Datum',\n    ],\n    'impersonated'  => 'Imitiranje od :name',\n    'show'          => [\n        'title' => 'Zapisi entiteta :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Ovaj entitet je označen na sljedećim kartama.',\n    'title'     => ':name točke na kartama',\n];\n"
  },
  {
    "path": "lang/hr/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [],\n    'helper'            => 'Slijedi lista entiteta koji su spomenuti u ovom entitetu u njihovom polju \"Unos\".',\n    'mentioned_in_v2'   => 'Ovaj se entitet spominje u :count entiteta, bilješki ili kampanja. :more.',\n    'see_more'          => 'Vidi detalje',\n    'show'              => [\n        'title' => 'Spominjanje entiteta :name',\n    ],\n    'title'             => 'Spomenuti entitet',\n];\n"
  },
  {
    "path": "lang/hr/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'  => 'Kopiraj',\n    ],\n    'errors'        => [\n        'permission'        => 'Nije ti dopušteno stvarati entitete te vrste u ciljanoj kampanji.',\n        'permission_update' => 'Ne možeš premjestiti ovaj entitet.',\n        'same_campaign'     => 'Moraš odabrati drugu kampanju u koju ćeš premjestiti entitet.',\n        'unknown_campaign'  => 'Nepoznata kampanja.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Ciljana kampanja',\n        'copy'          => 'Napravi kopiju',\n        'select_one'    => 'Odaberi kampanju',\n    ],\n    'panel'         => [\n        'description'           => 'Odaberi kampanju u koju želiš premjestiti ili napraviti kopiju ovog entiteta.',\n        'description_bulk_copy' => 'Odaberi kampanju u koju želiš kopirati odabrane entitete.',\n        'title'                 => 'Premjesti ili kopiraj entitet u drugu kampanju',\n    ],\n    'success'       => 'Entitet :name premješten.',\n    'success_copy'  => 'Entitet :name kopiran.',\n    'title'         => 'Premjesti :name',\n];\n"
  },
  {
    "path": "lang/hr/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Nova bilješka entiteta',\n        'add_user'  => 'Dodaj korisnika',\n    ],\n    'create'        => [\n        'success'   => 'Dodana bilješka entiteta \":name\" na :entity.',\n    ],\n    'destroy'       => [\n        'success'   => 'Uklonjena bilješka entiteta \":name\" s :entity.',\n    ],\n    'edit'          => [\n        'success'   => 'Ažurirana bilješka entiteta \":name\" za :entity.',\n    ],\n    'fields'        => [\n        'creator'   => 'Tvorac',\n        'name'      => 'Naziv',\n    ],\n    'hint'          => 'Informacije koje se ne uklapaju u standardna polja entiteta ili koje bi trebale biti privatne mogu se dodati kao bilješke entiteta.',\n    'hints'         => [\n        'reorder'   => 'Možeš promijeniti redoslijed bilješki entiteta klikom na ikonu :icon pored priče u izborniku entiteta.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'name'  => 'Naziv bilješke entiteta, opažanja ili primjedbe.',\n    ],\n    'show'          => [\n        'advanced'  => 'Napredne postavke',\n        'title'     => 'Bilješka entiteta :name za :entity',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'quick' => [\n        'title' => 'Dopuštenja',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Poveznice',\n    'title' => 'Prikvačeno',\n];\n"
  },
  {
    "path": "lang/hr/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Uredi profil',\n    ],\n    'show'      => [\n        'tab_name'  => 'Profil',\n        'title'     => ':name profil',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Ovaj je entitet dio sljedećih zadataka.',\n    'title'     => ':name zadaci',\n];\n"
  },
  {
    "path": "lang/hr/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'mode-map'      => 'Alat za istraživanje odnosa',\n        'mode-table'    => 'Tablica odnosa i veza',\n    ],\n    'connections'   => [\n        'map_point'         => 'Točka karte',\n        'mention'           => 'Spomenuti',\n        'quest_element'     => 'Element zadatka',\n        'timeline_element'  => 'Element kronologije',\n    ],\n    'create'        => [],\n    'destroy'       => [\n        'success'   => 'Uklonjen odnos :target s :entity.',\n    ],\n    'fields'        => [\n        'attitude'  => 'Stav',\n        'target'    => 'Meta',\n        'two_way'   => 'Kreiraj zrcalni odnos',\n    ],\n    'helper'        => 'Uspostavite odnose između entiteta sa stavovima i vidljivošću. Odnosi se mogu prikvačiti i na izbornik entiteta.',\n    'hints'         => [\n        'attitude'  => 'Ovo opcionalno polje se može koristiti za postavljanje zadanog poretka odnosa na silazno po tom polju.',\n        'two_way'   => 'Ako odaberete kreiranje zrcalnog odnosa, isti odnos će se kreirati na meti. Međutim, ako ga uredite, zrcaljenje se neće ažurirati.',\n    ],\n    'options'       => [\n        'mentions'  => 'Odnosi + srodno + spomeni',\n        'related'   => 'Odnosi + srodno',\n        'relations' => 'Odnosi',\n        'show'      => 'Prikaži',\n    ],\n    'panels'        => [\n        'related'   => 'Srodno',\n    ],\n    'placeholders'  => [\n        'attitude'  => '-100 do 100, gdje je 100 vrlo pozitivno.',\n    ],\n    'show'          => [\n        'title' => 'Odnosi za :name',\n    ],\n    'types'         => [\n        'family_member'         => 'Član obitelji',\n        'organisation_member'   => 'Član organizacije',\n    ],\n    'update'        => [\n        'success'   => 'Ažuriran odnos :target za :entity.',\n        'title'     => 'Ažuriraj odnose za :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'  => 'Sažmi sve',\n        'expand_all'    => 'Proširi sve',\n        'load_more'     => 'Učitaj više',\n    ],\n    'reorder'   => [\n        'icon_tooltip'  => 'Promijeni redoslijed bilješki',\n        'panel_title'   => 'Promijeni redoslijed bilješki',\n        'success'       => 'Bilješke presložene.',\n    ],\n    'update'    => [\n        'title' => 'Ažuriraj unos :entry',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Kronologije koje imaju elemente povezane s ovim entitetom prikazane su u nastavku.',\n    'show'      => [\n        'title' => 'Kronologije za :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'fields'    => [\n        'select_one'    => 'Odaberi jedan',\n        'target'        => 'Nova vrsta entiteta',\n    ],\n    'panel'     => [\n        'title' => 'Transformiraj entitet',\n    ],\n    'success'   => 'Entitet :name transformiran.',\n    'title'     => 'Transformiraj :name',\n];\n"
  },
  {
    "path": "lang/hr/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Sposobnosti',\n    'ability'               => 'Sposobnost',\n    'attribute_template'    => 'Predložak atributa',\n    'attribute_templates'   => 'Predlošci atributa',\n    'calendar'              => 'Kalendar',\n    'calendars'             => 'Kalendari',\n    'campaign'              => 'Kampanja',\n    'campaigns'             => 'Kampanje',\n    'character'             => 'Lik',\n    'characters'            => 'Likovi',\n    'conversation'          => 'Razgovor',\n    'conversations'         => 'Razgovori',\n    'creator'               => [\n        'back'      => 'Natrag na odabir',\n        'duplicate' => 'Postoje drugi entiteti ovog tipa s istim nazivom.',\n        'title'     => 'Novi entitet',\n    ],\n    'dice_roll'             => 'Bacanje kockica',\n    'dice_rolls'            => 'Bacanja kockica',\n    'event'                 => 'Događaj',\n    'events'                => 'Događaji',\n    'families'              => 'Obitelji',\n    'family'                => 'Obitelj',\n    'inventories'           => 'Inventari',\n    'item'                  => 'Predmet',\n    'items'                 => 'Predmeti',\n    'journal'               => 'Dnevnik',\n    'journals'              => 'Dnevnici',\n    'location'              => 'Lokacija',\n    'locations'             => 'Lokacije',\n    'map'                   => 'Karta',\n    'maps'                  => 'Karte',\n    'new'                   => [],\n    'note'                  => 'Bilješka',\n    'notes'                 => 'Bilješke',\n    'organisation'          => 'Organizacija',\n    'organisations'         => 'Organizacije',\n    'quest'                 => 'Zadatak',\n    'quests'                => 'Zadaci',\n    'race'                  => 'Rasa',\n    'races'                 => 'Rase',\n    'tag'                   => 'Oznaka',\n    'tags'                  => 'Oznake',\n    'timeline'              => 'Kronologija',\n    'timelines'             => 'Kronologije',\n];\n"
  },
  {
    "path": "lang/hr/errors.php",
    "content": "<?php\n\nreturn [\n    '403'       => [\n        'body'  => 'Izgleda da nemaš dozvolu za pristup ovoj stranici!',\n        'title' => 'Dozvola odbijena',\n    ],\n    '403-form'  => [\n        'help'  => 'Ovo bi moglo biti zbog isteka sesije. Prije spremanja, pokušaj se ponovo prijaviti u drugom prozoru.',\n    ],\n    '404'       => [\n        'body'  => 'Nažalost, stranicu koju tražiš nije moguće pronaći.',\n        'title' => 'Stranica nije pronađena',\n    ],\n    '500'       => [\n        'body'  => [\n            '1' => 'Ups, izgleda da je nešto pošlo po zlu.',\n            '2' => 'Izvješće s nađenom pogreškom nam je poslano, ali ponekad pomaže ako možemo znati malo više o tome što si radio/la.',\n        ],\n        'title' => 'Pogreška',\n    ],\n    '503'       => [\n        'body'  => [\n            '1' => 'Kanka se trenutno održava, što obično znači da je u tijeku ažuriranje!',\n            '2' => 'Oprosti na neugodnosti. Sve će se vratiti u normalu u samo nekoliko minuta.',\n        ],\n        'title' => 'Održavanje',\n    ],\n    '503-form'  => [],\n    'footer'    => 'Ako ti je potrebna dodatna pomoć, kontaktiraj nas na hello@kanka.io ili na :discord',\n];\n"
  },
  {
    "path": "lang/hr/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novi događaj',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'fields'        => [\n        'date'  => 'Datum',\n    ],\n    'helpers'       => [\n        'date'  => 'Ovo polje može sadržavati bilo što i nije povezano s kalendarima kampanje. Da bi ovaj događaj bio povezan s kalendarom, dodaj ga u kalendar ili na karticu podsjetnika ovog događaja.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'date'  => 'Datum za događaj',\n        'type'  => 'Ceremonija, Festival, Nesreća, Bitka, Rođenje',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Unosi kalendara',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova obitelj',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'members'   => 'Ovdje su navedeni članovi obitelji. Lik se može dodati u obitelj uređivanjem željenog lika, upotrebom padajućeg izbornika \"Obitelj\".',\n    ],\n    'index'         => [],\n    'members'       => [],\n    'placeholders'  => [\n        'name'  => 'Ime obitelji',\n        'type'  => 'Kraljevska, plemenita, izumrla',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/hr/faq.php",
    "content": "<?php\n\nreturn [\n    'account-deletion'      => [\n        'account_settings'  => 'Postavke računa',\n        'answer'            => 'Ako želiš izbrisati svoj račun, idi na stranicu: :account i pomakni se dolje do odjeljka za brisanje računa. Ovim ćeš izbrisati svoj račun i sve kampanje u kojima si jedini član.',\n        'question'          => 'Kako mogu izbrisati svoj račun?',\n    ],\n    'app_backup'            => [\n        'answer'    => 'Izvodimo dvije sigurnosne kopije dnevno kako bismo spriječili gubitak podataka. Naše se vlastite kampanje nalaze na poslužitelju, tako da ne želimo riskirati!',\n        'question'  => 'Koliko često se obavlja sigurnosno kopiranje podataka u Kanki?',\n    ],\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nNajbolji način na koji možemo objasniti Predloške atributa je primjerom. Zamislimo da tvoj svijet ima puno lokacija, a na mnogim od tih lokacija želiš se sjetiti stvoriti prilagođeni atribut za \"Stanovništvo\", \"Klima\" i \"Razina kriminala\".\n\nMožeš to lako postići na svakoj lokaciji, ali može postati zamorno i ponekad možeš zaboraviti stvoriti atribut \"Razina zločina\". Ovdje Predlošci atributa ulaze u igru.\n\nMožeš  stvoriti Predložak atributa s tim atributima (stanovništvo, klima, razina kriminala), a kasnije taj predložak primijeniti na svoje lokacije. Ovo će stvoriti atribute iz predloška na lokacijama, tako da sve što moraš učiniti je promijeniti vrijednosti, a ne moraš se prisjećati atributa!\nTEXT\n        ,\n        'question'  => 'Predlošci atributa, što su oni?',\n    ],\n    'backup'                => [\n        'answer'    => 'Jednom dnevno možeš sve podatke svoje kampanje izvesti kao ZIP datoteku. U aplikaciji klikni na \"Kampanja\" na lijevom izborniku i klikni na \"Izvoz\". Tako će se stvoriti datoteka koja je dostupna 30 minuta. Ne možeš prenijeti ovaj izvoz na Kanku, on je namijenjen samo vlastitom miru ili ako više ne planiraš koristiti aplikaciju.',\n        'question'  => 'Kako mogu sigurnosno kopirati ili izvoziti kampanju?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Jednostavno se pridruži našem :discord poslužitelju i prijavi svoju pogrešku u kanalu #error-and-bugs.',\n        'question'  => 'Kako mogu prijaviti pogrešku?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'Kanka nema tu značajku. Međutim, ako pokušavaš imati više grupa za igru u istom svijetu, razmisli o upotrebi iste kampanje i razdvajanju grupa kombinacijom zadataka, oznaka i dopuštenja.',\n        'question'  => 'Mogu li sinkronizirati entitete u više kampanja?',\n    ],\n    'conversations'         => [],\n    'custom'                => [\n        'answer'    => 'Kanka dolazi s nizom unaprijed definiranih tipova entiteta koji međusobno djeluju. Dopuštanje proizvoljnih tipova entiteta zahtijeva rekonstrukciju aplikacije ispočetka i kosi se sa svrhom alata s unaprijed definiranim tipovima kako bi se ljudima pomoglo u izgradnji svijeta, a ne da se smišlja kako organizirati stvari. Nadalje, Kanka je fleksibilna s oznakama koje mogu predstavljati većinu proizvoljnih tipova entiteta.',\n        'question'  => 'Mogu li stvoriti proizvoljne vrste entiteta?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Idi na naslovnu ploču kampanje i klikni na \"Kampanja\" na lijevom izborniku. Gumb \"Izbriši\" pojavit će se ako si posljednji član kampanje. Brisanje kampanje trajna je akcija kojom ćeš izbrisati sve podatke pohranjene na našim poslužiteljima, uključujući slike.',\n        'question'  => 'Kako mogu izbrisati kampanju?',\n    ],\n    'discord'               => [\n        'answer'    => 'Za povezivanje svog Kanka računa s :discord, prvo moraš kliknuti svoj avatar u gornjem desnom kutu aplikacije i kliknuti gumb Profil. Od tamo dođi do podstranice :apps i klikni Poveži.',\n        'question'  => 'Kako povezati moj Kanka račun s Discordom?',\n    ],\n    'early-access'          => [\n        'answer'    => 'Rani pristup način je da nagradimo naše nevjerojatne pretplatnike dajući im ekskluzivno razdoblje od 30 dana gdje mogu isprobati najnovije module prije bilo koga drugog.',\n        'question'  => 'Što je Rani pristup?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'Svi entiteti imaju karticu \"Bilješke entiteta\" koja sadrži male isječke teksta koje možeš postaviti da su vidljivi samo tebi (odlično prilikom zajedničkog vođenja kampanje), samo članovima administratorske uloge ili vidljive svima. Također, možeš dati igračima dopuštenje za kreiranje i uređivanje bilješki o entitetima bez ovlaštenja za uređivanjem čitavog entiteta.',\n        'question'  => 'Kako Kanka postupa s djelomično skrivenim informacijama?',\n    ],\n    'fields'                => [\n        'answer'    => 'Odgovor',\n        'category'  => 'Kategorija',\n        'locale'    => 'Jezik',\n        'order'     => 'Poredak',\n        'question'  => 'Pitanje',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\nDa! Čvrsto vjerujemo da tvoja financijska situacija ne bi trebala utjecati na tvoje uživanje u RPG-ovima ili izgradnji svijeta te ćemo osnovnu aplikaciju uvijek držati besplatnom. Ako želiš preuzeti aktivniju ulogu na ovom putovanju, podrži nas i glasaj o funkcionalnostima koje su ti najvažnije, što možeš učiniti putem naše web stranice ili na :patreon.\n\nOsim glasanja o pravcu kojim će Kanka napredovati, podržavanje nas omogućava tebi pristup :boosters, povećanju ograničenja za prijenos veličine datoteke, dodavanju tvog imena u kuću slavnih, ljepše zadate ikone i još mnogo toga!\nTEXT\n        ,\n        'question'  => 'Hoće li aplikacija ostati besplatna?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Preporučujemo stvaranje bogova kao likova i religija kao organizacija. Ako želite brzo pronaći svoja božanstva, preporučujemo da ih označite odgovarajućom oznakom ili vrstom.',\n        'question'  => 'Gdje stvoriti bogove i religije?',\n    ],\n    'help'                  => [\n        'answer'    => 'Kao prvo, hvala ti što želiš pomoći! Uvijek smo zainteresirani za ljude koji mogu pomoći u prijevodima, testiranju novih značajki ili koji mogu pomoći novim korisnicima. Također volimo kad ljudi promoviraju Kanku da dosegne nove korisnike na mjestima o kojima nismo razmišljali. Tvoj je najbolji način djelovanja da nam se pridružiš na :discord koji sadrži kanal posvećen pomoći. Također volimo i naše pokrovitelje na :patreon ako nas želiš podržati i dobiti pristup nekim povlasticama!',\n        'question'  => 'Želim pomoći! Što mogu učiniti?',\n    ],\n    'map'                   => [\n        'answer'    => 'Svaka lokacija može sadržavati kartu (png, jpg ili svg) koja na sebi ima \"točke karte\" koje se mogu staviti uz kontrolu veličine, oblika, ikone i boje te kao veze do entiteta ili jednostavnih oznaka.',\n        'question'  => 'Mogu li učitati karte na Kanku?',\n    ],\n    'mobile'                => [\n        'answer'    => 'Trenutačno nema posvećene mobilne aplikacije za Kanku, ali većina aplikacije radi na mobilnom uređaju. Jedno ograničenje je alat spominjanja koji ne radi u uređivaču teksta. Nadamo se da nam podrška na :patreon omogućiti da nekome platimo izradu mobilne aplikaciju, ali ne predviđamo da će se to dogoditi u skoroj budućnosti.',\n        'question'  => 'Postoji li mobilna aplikacija? Planira li se?',\n    ],\n    'monsters'              => [\n        'answer'    => 'Preporučujemo korištenje modula Rase za ljude, vrste, čudovišta i sve živo što nije lik.',\n        'question'  => 'Gdje stvoriti čudovišta?',\n    ],\n    'multiworld'            => [\n        'answer'    => 'Možeš biti dio onoliko kampanja koliko želiš, uključujući i one koje si kreirao/la. Za promjenu ili stvaranje nove kampanje, idi na naslovnu ploču kampanje i u gornjem desnom kutu klikni na trenutnu kampanju za prikaz sučelja prebacivanja kampanje.',\n        'question'  => 'Mogu li imati više kampanja?',\n    ],\n    'nested'                => [\n        'answer'    => 'Ako više voliš svoje entitete gledati u ugnježđenom prikazu prema zadanim postavkama (na primjeru gumb Uneseni prikaz na popisu lokacija), to možeš učiniti tako da otvoriš opcije profila i izgleda. Tamo možeš provjeriti mogućnost ugniježđenog pogleda. To se odnosi samo na tvoj račun, a ne i za tvoje kampanje.',\n        'question'  => 'Mogu li postaviti ugniježđene popise kao zadane?',\n    ],\n    'organise_play'         => [],\n    'permissions'           => [\n        'answer'    => 'Apsolutno, zato smo izgradili Kanku! Možete pozvati sve svoje igrače u svoje kampanje i dodijeliti im uloge i dopuštenja. Izgradili smo sustav da bude izuzetno fleksibilan (možete koristiti i konfiguraciju za prijavu i isključivanje) kako bismo pokrili što više potreba i situacija.',\n        'question'  => 'Mogu li ograničiti podatke koje moji igrači vide u kampanji?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nDugoročni planovi za Kanku su izgraditi svestrani alat za upravljanje izgradnje svijeta i upravljanjem kampanjama, koji je agnostičan na sustav, ali uz sadržaj specifičan za sustav koji kreira zajednica u obliku \"predložaka zajednice\". Duži cilj je izgradnja alata koji se integrira s drugim platformama poput Virtual Table Top aplikacija koje će ih povezati sa svjetovima Kanka.\n\nŠto se tiče drugog dijela, većina hobi projekata završava izgaranjem, a autor ih napušta. :patreon je postavljen s ciljem da budemo u mogućnosti raditi puno radno vrijeme na Kanki bez žrtvovanja financijske sigurnosti naših obitelji, kao i pokrivanja troškova poslužitelja. Projekt je također otvorenog koda i zajednica ga može nastaviti ako se nama ikada nešto dogodi.\nTEXT\n        ,\n        'question'  => 'Koji su dugoročni planovi?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Možeš pregledavati stranicu :public-campaigns da vidiš kako drugi koriste Kanku za svoje kampanje.',\n        'question'  => 'Kako drugi koriste Kanka?',\n    ],\n    'renaming-modules'      => [\n        'answer'    => 'Iako bi to bilo lako učiniti za engleski i druge jezike koji ne koriste rodovna imena, mogućnost promjene naziva modula narušila bi gramatičku ispravnost i korisničko iskustvo za većinu jezika na kojima je Kanka dostupna.',\n        'question'  => 'Mogu li preimenovati module? Na primjer Obitelji u Klanove ili Organizacije u Frakcije?',\n    ],\n    'sections'              => [\n        'community'     => 'Zajednica',\n        'general'       => 'Općenito',\n        'other'         => 'Drugo',\n        'permissions'   => 'Ovlasti',\n        'pricing'       => 'Cijena',\n        'worldbuilding' => 'Izgradnja svijeta',\n    ],\n    'show'                  => [\n        'return'    => 'Povratak na često postavljanja pitanja',\n        'timestamp' => 'Posljednji put ažurirano :date',\n        'title'     => 'Često postavljana pitanja :name',\n    ],\n    'unboost'               => [\n        'answer'    => 'Poništavanjem pojačavanja kampanje ne brišu se podaci koji su stvoreni tijekom pojačavanja, već se jednostavno sakrivaju podaci i značajke. Ako ponovno pojačate kampanju, podaci i značajke bit će ponovno dostupni s istim postavkama kao i prije opoziva kampanje.',\n        'question'  => 'Što se događa ako se prestane pojačavati kampanju?',\n    ],\n    'user-switch'           => [\n        'answer'    => 'Dopuštenja mogu postati škakljiva, osobito kod velikih kampanja. Kao administrator kampanje, možeš doći do stranice članova kampanje i kliknuti gumb \"Imitiraj\" koji će se pojaviti pored članova koji nisu administratori. Tako ćeš se prijaviti kao korisnik, što će ti omogućiti pregled kampanje kakvu taj korisnik vidi. To je najlakši način za provjeru dopuštenja tvoje kampanje.',\n        'question'  => 'Ovlasti u mojoj kampanji su postavljene, kako ih mogu testirati?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Samo ljudi koje pozoveš u kampanju mogu vidjeti i koristiti što je stvoreno. Tvoji su podaci privatni i uvijek u tvojoj kontroli. Također, možeš postaviti kampanju kao javnu kako bi tvoju kampanju mogli vidjeti i neregistrirani korisnici.',\n        'question'  => 'Može li itko vidjeti moj svijet?',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/footer.php",
    "content": "<?php\n\nreturn [\n    'translator_call'   => 'Kanka je prevedena na druge jezike zahvaljujući našoj nevjerojatnoj zajednici. Ako želiš pomoći prevesti Kanku na svoj jezik, kontaktiraj nas na :discord!',\n];\n"
  },
  {
    "path": "lang/hr/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Glasanje zajednice',\n];\n"
  },
  {
    "path": "lang/hr/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Kuća slavnih',\n];\n"
  },
  {
    "path": "lang/hr/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Saznaj više',\n        'subscribe'     => 'Pretplati se',\n    ],\n    'fields'    => [\n        'firstname'     => 'Ime',\n        'lastname'      => 'Prezime',\n        'notifications' => 'Obavijesti',\n    ],\n    'groups'    => [\n        'newsletter'    => 'Bilten',\n    ],\n    'headline'  => 'Pretplati se na jedan ili sve naše biltene kako bi bio/la u toku s Kankom.',\n    'title'     => 'Obavijesti email porukama',\n];\n"
  },
  {
    "path": "lang/hr/front.php",
    "content": "<?php\n\nreturn [\n    'about'         => [],\n    'campaigns'     => [],\n    'community'     => [],\n    'contact'       => [],\n    'cookie'        => [\n        'dismiss'   => 'Shvaćam!',\n        'link'      => 'Saznaj više',\n        'message'   => 'Ova web stranica koristi kolačiće kako bi osigurala najbolje iskustvo na našoj web stranici.',\n    ],\n    'faq'           => [],\n    'features'      => [\n        'api'       => [\n            'link'  => 'API dokumentaciju',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Povećani API pozivi (90)',\n            'boosts'            => 'Pojačivačima kampanje',\n            'default_image'     => 'Lijepe zadane slike za entitete',\n            'discord'           => 'Privatni Discord kanal',\n            'free'              => 'Besplatno',\n            'hall_of_fame'      => 'Ime u :link',\n            'impact'            => 'Utjecaj na budućne funkcionalnosti',\n            'monthly_vote'      => 'Sudjelovanje u glasanju zajednice',\n            'pagination'        => 'Povećan broj rezultata na stranici',\n            'upload_limit'      => 'Veličine za prijenos',\n            'upload_limit_map'  => 'Veličine za prijenos karte',\n        ],\n    ],\n    'first_block'   => [],\n    'footer'        => [],\n    'help'          => [],\n    'home'          => [\n        'seo'   => [\n            'meta-description'  => 'Kanka je alat za upravljanje RPG kampanjama i izgradnju svijetova kojeg usmjerava zajednica, a koji olakšava organizaciju, planiranje i uživanje RPG kampanja koje se igraju za stolom',\n        ],\n    ],\n    'master'        => [],\n    'media'         => [],\n    'menu'          => [\n        'dashboard' => 'Naslovna ploča',\n        'login'     => 'Prijava',\n        'register'  => 'Registracija',\n    ],\n    'meta'          => [\n        'description'   => 'Kanka je fleksibilni graditelj digitalnih svijetova i alat za upravljanje internetskim RPG kampanjama',\n        'title'         => 'Kanka - alat za upravljanje internetskim RPG kampanjama i građenje svjetova',\n    ],\n    'partners'      => [],\n    'pricing'       => [\n        'tier'  => [\n            'free'  => 'Besplatno',\n            'month' => 'Mjesec',\n        ],\n    ],\n    'privacy'       => [],\n    'release'       => [],\n    'roadmap'       => [],\n    'second_block'  => [],\n    'seo'           => [\n        'keywords'  => 'Izgradnja svjetova, RPG koji se igraju na stolu, upravitelj RPG kampanjama',\n    ],\n    'team'          => [],\n    'terms'         => [],\n];\n"
  },
  {
    "path": "lang/hr/header.php",
    "content": "<?php\n\nreturn [\n    'notifications'     => [\n        'read_all'  => 'Pročitaj sve',\n    ],\n    'toggle_navigation' => 'Uključi/isključi navigaciju',\n];\n"
  },
  {
    "path": "lang/hr/helpers.php",
    "content": "<?php\n\nreturn [\n    'age'               => [],\n    'attributes'        => [],\n    'dice'              => [],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Kako koristiti filtre',\n    ],\n    'link'              => [\n        'description'   => 'Možeš se jednostavno povezati s drugim entitetima u kampanji pomoću sljedećih kratica.',\n    ],\n    'map'               => [],\n    'pins'              => [],\n    'public'            => 'Pogledajte Youtube vodič na koji objašnjava javne kampanje.',\n    'widget-filters'    => [\n        'description'   => 'Možeš filtrirati entitete prikazane na programčiću s nedavno izmijenjenim entitetima pružajući popis polja entiteta i vrijednosti. Na primjer, možeš koristiti :example za filtriranje mrtvih likova s kojima igrači ne mogu igrati (NPC).',\n        'link'          => 'Filteri programčića',\n        'title'         => 'Filteri programčića naslovne ploče',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/items.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novi predmet',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'price' => 'Cijena',\n        'size'  => 'Veličina',\n    ],\n    'index'         => [],\n    'inventories'   => [],\n    'placeholders'  => [\n        'price' => 'Cijena predmeta',\n        'size'  => 'Veličina, težina, dimenzije',\n        'type'  => 'Oružje, napitak, artefakt',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Informacije',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/hr/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novi dnevnik',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Autor',\n        'date'      => 'Datum',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'journals'      => [],\n    'placeholders'  => [\n        'author'    => 'Tko je napisao dnevnik',\n        'date'      => 'Stvarni datum dnevnika',\n        'type'      => 'Sesija, Jednokratna kampanja, Nacrt',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/hr/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Katalonski',\n        'cs'    => 'Češki',\n        'de'    => 'Njemački',\n        'el'    => 'Grčki',\n        'en'    => 'Engleski',\n        'en-US' => 'Američki engleski',\n        'es'    => 'Španjolski',\n        'fr'    => 'Francuski',\n        'gl'    => 'Galicijski',\n        'he'    => 'Hebrejski',\n        'hr'    => 'Hrvatski',\n        'hu'    => 'Mađarski',\n        'it'    => 'Talijanski',\n        'nb'    => 'Norveški (Bokmal)',\n        'nl'    => 'Nizozemski',\n        'pl'    => 'Poljski',\n        'pt-BR' => 'Brazilski portugalski',\n        'ru'    => 'Ruski',\n        'sk'    => 'Slovački',\n        'tr'    => 'Turski',\n    ],\n    'header'=> 'Jezici',\n];\n"
  },
  {
    "path": "lang/hr/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nova lokacija',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [\n        'characters'    => 'Pregledaj sve likove na ovoj lokaciji i njenim podlokacijama ili samo one neposredno na toj lokaciji.',\n    ],\n    'hints'         => [],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'type'  => 'Grad, Kraljevstvo, Ruševina',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/hr/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Dodaj novu grupu',\n    ],\n    'create'        => [\n        'success'   => 'Kreirana grupa :name.',\n        'title'     => 'Nova grupa',\n    ],\n    'delete'        => [\n        'success'   => 'Obrisana grupa :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Ažurirana grupa :name.',\n        'title'     => 'Uredi grupu :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Prikaži oznake grupe',\n        'position'  => 'Pozicija',\n    ],\n    'helper'        => [],\n    'hints'         => [\n        'is_shown'  => 'Prema prikaz oznaka grupe na karti kao zadanu postavku.',\n    ],\n    'placeholders'  => [\n        'name'      => 'Trgovine, Blago, NPC-i',\n        'position'  => 'Neobavezno polje za podešavanje redoslijeda pojavljivanja grupa.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Dodaj novi sloj',\n    ],\n    'base'          => 'Temeljni sloj',\n    'create'        => [\n        'success'   => 'Kreiran sloj :name.',\n        'title'     => 'Novi sloj',\n    ],\n    'delete'        => [\n        'success'   => 'Obrisan sloj :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Ažuriran sloj :name.',\n        'title'     => 'Uredi sloj :name',\n    ],\n    'fields'        => [\n        'position'  => 'Pozicija',\n        'type'      => 'Vrsta sloja',\n    ],\n    'helper'        => [],\n    'placeholders'  => [\n        'name'      => 'Podzemlje, Razina 2, Olupina broda',\n        'position'  => 'Neobavezno polje za postavljanje redoslijeda u kojem se slojevi pojavljuju.',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Prekrivanje',\n        'overlay_shown' => 'Prekrivanje (automatsko prikazivanje)',\n        'standard'      => 'Standardno',\n    ],\n    'types'         => [\n        'overlay'       => 'Prekrivanje (prikazano iznad aktivnog sloja)',\n        'overlay_shown' => 'Prekrivanje prikazano kao zadano',\n        'standard'      => 'Standardni sloj (prebacivanje između slojeva)',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Napiši proizvoljno polje za unos za ovaj marker.',\n        'remove'            => 'Ukloni marker',\n        'save_and_explore'  => 'Spremi i istraži',\n        'update'            => 'Uredi marker',\n    ],\n    'create'        => [\n        'success'   => 'Kreiran marker :name.',\n        'title'     => 'Novi marker',\n    ],\n    'delete'        => [\n        'success'   => 'Obrisan marker :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Ažuriran marker :name.',\n        'title'     => 'Uredi marker :name',\n    ],\n    'fields'        => [\n        'circle_radius' => 'Polumjer kruga',\n        'copy_elements' => 'Kopiraj elemente',\n        'custom_icon'   => 'Proizvoljna ikona',\n        'custom_shape'  => 'Proizvoljni oblik',\n        'font_colour'   => 'Boja ikone',\n        'group'         => 'Grupa markera',\n        'is_draggable'  => 'Moguće povlačenje',\n        'latitude'      => 'Geografska širina',\n        'longitude'     => 'Geografska dužina',\n        'opacity'       => 'Neprozirnost',\n        'pin_size'      => 'Veličina markera',\n        'polygon_style' => [\n            'stroke'            => 'Boja poteza',\n            'stroke-opacity'    => 'Neprozirnost poteza',\n            'stroke-width'      => 'Širina poteza',\n        ],\n    ],\n    'helpers'       => [\n        'base'                      => 'Dodaj markere na kartu klikom na bilo koje mjesto.',\n        'copy_elements'             => 'Kopiraj grupe, slojeve i markere.',\n        'copy_elements_to_campaign' => 'Kopiraj grupe, slojeve i markere na kartama. Markeri povezane s entitetom pretvorit će se u standardne markere.',\n        'custom_radius'             => 'Za samostalno definiranje veličine odaberi opciju proizvoljne veličine iz padajućeg izbornika.',\n        'draggable'                 => 'Omogući za omogućavanje pomicanja markera u načinu istraživanja.',\n        'label'                     => 'Oznaka se prikazuje kao blok teksta na karti. Sadržaj će biti ime markera imena entiteta.',\n        'polygon'                   => [\n            'edit'  => 'Kliknite na kartu da biste taj položaj dodali koordinatama poligona.',\n        ],\n    ],\n    'icons'         => [\n        'custom'        => 'Proizvoljno',\n        'entity'        => 'Entitet',\n        'exclamation'   => 'Upozorenje',\n        'marker'        => 'Marker',\n        'question'      => 'Pitanje',\n    ],\n    'placeholders'  => [\n        'custom_shape'  => '100,100 200,240 340,110',\n        'name'          => 'Obavezno ako nije odabran nijedan entitet',\n    ],\n    'shapes'        => [\n        '0' => 'Krug',\n        '1' => 'Kvadrat',\n        '2' => 'Trokut',\n        '3' => 'Proizvoljno',\n    ],\n    'sizes'         => [\n        '0' => 'Sićušno',\n        '1' => 'Standardno',\n        '2' => 'Maleno',\n        '3' => 'Veliko',\n        '4' => 'Golemo',\n    ],\n    'tabs'          => [\n        'circle'    => 'Krug',\n        'label'     => 'Natpis',\n        'marker'    => 'Marker',\n        'polygon'   => 'Poligon',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Povratak na :name',\n        'edit'      => 'Uredi kartu',\n        'explore'   => 'Istraži',\n    ],\n    'create'        => [\n        'title' => 'Nova karta',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'dashboard' => [\n            'missing'   => 'Ova karta treba sliku kako bi se mogla prikazati na naslovnoj ploči.',\n        ],\n        'explore'   => [\n            'missing'   => 'Dodaj sliku na kartu prije nego što ju možeš istraživati.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker' => 'Marker',\n        'center_x'      => 'Zadana pozicija zemljopisne dužine',\n        'center_y'      => 'Zadana pozicija zemljopisne širine',\n        'centering'     => 'Centriranje',\n        'grid'          => 'Mreža',\n        'initial_zoom'  => 'Početno povećanje',\n        'max_zoom'      => 'Maksimalno povećanje',\n        'min_zoom'      => 'Minimalno povećanje',\n        'tabs'          => [\n            'coordinates'   => 'Koordinate',\n            'marker'        => 'Marker',\n        ],\n    ],\n    'helpers'       => [\n        'center'            => 'Promjena sljedećih vrijednosti kontrolira na koje područje je karta fokusirana. Ostavljanje ovih vrijednosti praznima rezultirat će se fokusom na središte karte.',\n        'centering'         => 'Centriranje na markeru imat će prioritet nad zadanim koordinatama.',\n        'distance_measure'  => 'Davanjem karte mjere udaljenosti omogućit će se alat za mjerenje u načinu istraživanja.',\n        'grid'              => 'Definiraj veličinu mreže koja će biti prikazana u načinu istraživanja.',\n        'initial_zoom'      => 'Početna razina povećanja na koju se učitava karta. Zadana vrijednost je :default, dok je najveća dopuštena vrijednost :max, a najniža dopuštena vrijednost je :min.',\n        'max_zoom'          => 'Najviše što se karta može povećati. Zadana vrijednost je :default, dok je najviša dozvoljena vrijednost :max.',\n        'min_zoom'          => 'Najviše što se karta može udaljiti. Zadana vrijednost je :default, dok je najniža dozvoljena vrijednost :min.',\n        'missing_image'     => 'Spremi kartu sa slikom prije nego što možeš dodavati slojeve i markere.',\n    ],\n    'index'         => [],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Grupe',\n        'layers'    => 'Slojevi',\n        'markers'   => 'Markeri',\n        'settings'  => 'Postavke',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Ostavi prazno za učitavanje karte u sredini',\n        'center_x'      => 'Ostavi prazno za učitavanje karte u sredini',\n        'center_y'      => 'Ostavi prazno za učitavanje karte u sredini',\n        'grid'          => 'Udaljenost u pikselima između elemenata mreže. Ostavi prazno da se sakrije mreža.',\n        'name'          => 'Naziv karte',\n        'type'          => 'Tamnica, Grad, Galaksija',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Karte',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/hr/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'boosting'  => 'pojačavajući',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova bilješka',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'Bilješka dijete',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'note'  => 'Odaberite bilješku roditelja',\n        'type'  => 'Religija, Rasa, Politički sustav',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/hr/notifications.php",
    "content": "<?php\n\nreturn [\n    'campaign'          => [\n        'application'   => [\n            'approved'  => 'Odobrena je tvoja prijava na kampanju :campaign.',\n            'new'       => 'Nova prijava za :campaign.',\n            'rejected'  => 'Vaša prijava za kampanju :campaign je odbijena. Razlog naveden: :reason',\n        ],\n        'asset_export'  => 'Dostupan je izvoz sredstava kampanje. Poveznica je dostupna kroz :time minuta.',\n        'boost'         => [\n            'add'           => 'Kampanju :campaign je pojačao korisnik :user.',\n            'remove'        => 'Korisnik :user više ne pojačava kampanju :campaign.',\n            'superboost'    => 'Kampanju :campaign podupire :user.',\n        ],\n        'export'        => 'Dostupan je izvoz kampanje. Veza je dostupna :time minuta.',\n        'export_error'  => 'Došlo je do pogreške prilikom izvoza kampanje. Molimo kontaktiraj nas ako se ovaj problem nastavi.',\n        'join'          => ':user se priključio/la :campaign.',\n        'leave'         => ':user je napustio/la :campaign.',\n        'plugin'        => [\n            'deleted'   => 'Dodatak :plugin je izbrisan s tržišta i uklonjen iz kampanje :campaign.',\n        ],\n        'role'          => [\n            'add'       => 'Dodana ti je uloga :role u kampanji :campaign.',\n            'remove'    => 'Uklonjena ti je uloga :role iz kampanje :campaign.',\n        ],\n    ],\n    'header'            => 'Imate :count obavijesti',\n    'index'             => [\n        'title' => 'Obavijesti',\n    ],\n    'no_notifications'  => 'Trenutno nema obavijesti.',\n    'subscriptions'     => [\n        'charge_fail'   => 'Došlo je do pogreške tijekom obrade tvoje uplate. Pričekaj trenutak dok pokušavamo ponovo. Ako se ništa ne promijeni, kontaktiraj nas.',\n        'deleted'       => 'Tvoja pretplata na Kanku je otkazana nakon previše neuspjelih pokušaja naplate tvoje kartice. Idi u postavke pretplate i pokušaj ažurirati svoje podatke o plaćanju.',\n        'ended'         => 'Tvoja pretplata na Kanku je završila. Pojačanja tvoje kampanje i Discord uloge su uklonjene. Nadamo će te nam se uskoro vratiti!',\n        'failed'        => 'Tvoja pretplata na Kanku je otkazana nakon previše neuspjelih pokušaja naplate tvoje kartice. Idi u postavke pretplate i pokušaj ažurirati svoje podatke o plaćanju.',\n        'started'       => 'Tvoja pretplata na Kanku je započela.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova organizacija',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'members'   => 'Članovi',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'members'       => [\n        'destroy'       => [\n            'success'   => 'Član uklonjen iz organizacije.',\n        ],\n        'edit'          => [\n            'title' => 'Ažuriraj člana za :name',\n        ],\n        'fields'        => [\n            'role'  => 'Uloga',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Svi likovi koji su članovi ove organizacije i njenih podorganizacija.',\n            'members'       => 'Sljedeća lista prikazuje sve likove koji su u ovoj organizaciji i svim njenim podorganizacijama. Možeš filtrirati stranicu da prikaže samo direktne članove.',\n        ],\n        'placeholders'  => [\n            'role'  => 'Voditelj, Član, Visoki Svećenik, Majstor Špijun',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'Kult, Banda, Pobuna, Klub obožavatelja',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/hr/pagination.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; Prethodna',\n    'next'     => 'Sljedeća &raquo;',\n];\n"
  },
  {
    "path": "lang/hr/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Bilo je problema s tvojim unosom.',\n        'title'         => 'Ups!',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/passwords.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'reset'     => 'Lozinka je postavljena!',\n    'sent'      => 'Poveznica za ponovono postavljanje lozinke je poslana!',\n    'throttled' => 'Please wait before retrying.',\n    'token'     => 'Oznaka za ponovno postavljanje lozinke više nije važeća.',\n    'user'      => 'Korisnik nije pronađen.',\n];\n"
  },
  {
    "path": "lang/hr/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Sovomedvjed',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/profiles.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => [\n        'success'   => 'Avatar ažuriran.',\n    ],\n    'edit'          => [\n        'success'   => 'Profil ažuriran',\n    ],\n    'editors'       => [],\n    'fields'        => [\n        'avatar'                    => 'Avatar',\n        'email'                     => 'Email',\n        'hide_subscription'         => 'Sakrij moje ime s :hall_of_fame.',\n        'last_login_share'          => 'Dijeli s drugim članovima kampanje vrijeme moje zadnje prijave.',\n        'name'                      => 'Ime',\n        'new_password'              => 'Nova lozinka',\n        'new_password_confirmation' => 'Potvrda nove lozinke',\n        'newsletter'                => 'Želim biti ponekad kontaktiran emailom.',\n        'password'                  => 'Trenutna lozinka',\n        'settings'                  => 'Postavke',\n        'theme'                     => 'Teme',\n    ],\n    'newsletter'    => [\n        'title' => 'Bilteni',\n    ],\n    'password'      => [\n        'success'   => 'Lozinka ažurirana',\n    ],\n    'placeholders'  => [\n        'email'                     => 'Tvoja email adresa',\n        'name'                      => 'Kako se prikazuje tvoje ime',\n        'new_password'              => 'Tvoja nova lozinka',\n        'new_password_confirmation' => 'Potvrdi svoju novu lozinku',\n        'password'                  => 'Unesi trenutnu lozinku za sve promjene',\n    ],\n    'sections'      => [\n        'delete'    => [\n            'delete'    => 'Obriši moj račun',\n            'helper'    => 'Brisanjem računa izbrisat će se i sve kampanje čiji si jedini član. Ova je radnja trajna i ne može se poništiti.',\n            'title'     => 'Obriši svoj račun',\n            'warning'   => 'Brisanjem računa će se svi tvoji podaci izgubiti. Jesi li siguran/a?',\n        ],\n        'password'  => [\n            'title' => 'Promjeni lozinku',\n        ],\n    ],\n    'settings'      => [\n        'success'   => 'Postavke su promijenjene.',\n    ],\n    'theme'         => [\n        'success'   => 'Tema je promijenjena.',\n        'themes'    => [\n            'dark'      => 'Tamna',\n            'default'   => 'Standardna',\n            'future'    => 'Budućnost',\n            'midnight'  => 'Ponoćno plava',\n        ],\n    ],\n    'title'         => 'Ažuriraj svoj profil',\n    'workflows'     => [\n        'created'   => 'Idi na kreirani entitet',\n        'default'   => 'Popis entiteta',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novi zadatak',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'elements'      => [\n        'create'    => [\n            'success'   => 'Entitet :entity dodan na zadatak.',\n            'title'     => 'Novi element za :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Element zadatka :entity uklonjen.',\n        ],\n        'edit'      => [\n            'success'   => 'Element zadatka :entity ažuriran.',\n            'title'     => 'Ažuriran element zadatka za :name',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Kopirajte elemente pridružene zadatku',\n        'date'          => 'Datum',\n        'is_completed'  => 'Izvršen',\n        'role'          => 'Uloga',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'date'  => 'Stvarni datum zadatka',\n        'role'  => 'Uloga ovog entieta u zadatku',\n        'type'  => 'Priča o liku, Sporedni zadatak, Glavni zadatak',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Dodaj element',\n        ],\n        'tabs'      => [\n            'elements'  => 'Elementi',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/hr/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nova rasa',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Čovjek, Vila, Borg',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/hr/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Tvoja sesija je isteka. Pokušaj ponovno.',\n    'unknown_entity'    => 'Oprosti, ne znamo što je \":entity\".',\n];\n"
  },
  {
    "path": "lang/hr/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Događaj',\n        'livestream'    => 'Prijenos uživo',\n        'other'         => 'Ostalo',\n        'release'       => 'Izdanje',\n        'vote'          => 'Glas zajednice',\n    ],\n    'index'         => [\n        'description'   => 'Posljednja ažuriranja za kanka.io',\n        'title'         => 'Izdanja',\n    ],\n    'post'          => [\n        'footer'    => 'Od :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Povratak na izdanja',\n        'title'     => 'Izdanje :name',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chronicles of Darkness',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/search.php",
    "content": "<?php\n\nreturn [\n    'no_results'    => 'Nema rezultata.',\n    'title'         => 'Pretraga',\n];\n"
  },
  {
    "path": "lang/hr/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        'actions'           => [\n            'social'            => 'Prebaci se na prijavu u Kanku',\n            'update_email'      => 'Ažuriraj email',\n            'update_password'   => 'Ažuriraj lozinku',\n        ],\n        'email'             => 'Promjena emaila',\n        'email_success'     => 'Email ažuriran.',\n        'password'          => 'Promjena lozinke',\n        'password_success'  => 'Lozinka promijenjena.',\n        'social'            => [\n            'error'     => 'Već koristiš prijavu u Kanku za ovaj račun.',\n            'helper'    => 'Tvojim računom trenutno upravlja :provider. Možeš ga prestati koristiti i prebaciti se na standardnu ​​prijavu u Kanku postavljanjem lozinke.',\n            'success'   => 'Tvoj račun sad koristi Kanka prijavu.',\n            'title'     => 'Društveno prema Kanki',\n        ],\n        'title'             => 'Račun',\n    ],\n    'api'           => [\n        'helper'    => 'Dobrodošli u Kanka API-je! Generiraj osobni pristupni žeton koji ćeš koristiti u svom API zahtjevu za prikupljanje podataka o kampanjama čijih si član.',\n        'link'      => 'Pročitaj dokumentaciju API-ja',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Poveži',\n            'remove'    => 'Ukloni',\n        ],\n        'benefits'  => 'Kanka pruža nekoliko integracija na usluge trećih strana. U budućnosti se planira više integracija trećih strana.',\n        'discord'   => [\n            'errors'    => [\n                'add'   => 'Došlo je do pogreške u povezivanju tvog Discord računa s Kankom. Molim te pokušaj ponovno.',\n            ],\n            'success'   => [\n                'add'       => 'Tvoj Discord račun je povezan.',\n                'remove'    => 'Veza s tvojim Discord računom je uklonjena.',\n            ],\n            'text'      => 'Pristupi svojim ulogama za pretplatu automatski.',\n        ],\n        'title'     => 'Integracija s aplikacijom',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'Kampanja :name je već pojačana.',\n            'exhausted_boosts'      => 'Nemaš više pojačanja za pokloniti. Ukloni svoje pojačanje iz neke kampanje prije nego što ga daš drugoj.',\n            'exhausted_superboosts' => 'Nemaš više pojačanja. Trebaš 3 pojačanja da bi super pojačao kampanju.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Austrija',\n        'belgium'       => 'Belgija',\n        'france'        => 'Francuska',\n        'germany'       => 'Njemačka',\n        'italy'         => 'Italija',\n        'netherlands'   => 'Nizozemska',\n        'spain'         => 'Španjolska',\n    ],\n    'invoices'      => [],\n    'layout'        => [\n        'title' => 'Izgled',\n    ],\n    'marketplace'   => [],\n    'menu'          => [\n        'account'               => 'Račun',\n        'api'                   => 'API',\n        'apps'                  => 'Aplikacije',\n        'other'                 => 'Ostalo',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Mogućnosti plaćanja',\n        'personal_settings'     => 'Osobne postavke',\n        'profile'               => 'Profil',\n        'settings'              => 'Postavke',\n        'subscription'          => 'Pretplata',\n        'subscription_status'   => 'Status pretplate',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Zastarjela značajka - ako želite podržati Kanku, učinite to putem :subscription. Patreon povezivanje je i dalje aktivno za one koji su povezali svoj račun prije našeg odlaska iz Patreona.',\n        'pledge'        => 'Zalog: :name',\n        'remove'        => [\n            'button'    => 'Prekini vezu s Patreon računom',\n            'success'   => 'Uklonjena je poveznica na tvoj Patreon račun.',\n            'text'      => 'Ako prekineš vezu tvog računa s Patreonom, Kanka će ukloniti tvoje bonuse, ime u kući slavnih, pojačanja kampanje, te druge značajke povezane s podrškom Kanke. Nijedan tvoj pojačani sadržaj neće biti izgubljen (npr. zaglavlja entiteta). Ako se ponovo pretplatiš, imat ćeš pristup svim svojim prethodnim podacima, uključujući mogućnost pojačanja prijašnjih pojačanih kampanja.',\n            'title'     => 'Prekini vezu Patreon računa s Kankom',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Ažuriraj profil',\n        ],\n        'avatar'    => 'Profilna slika',\n        'success'   => 'Profil ažuriran.',\n        'title'     => 'Osobni profil',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Otkaži pretplatu',\n            'subscribe'         => 'Pretplata',\n            'update_currency'   => 'Spremite preferiranu valutu',\n        ],\n        'billing'               => [\n            'helper'    => 'Podaci o naplati obrađuju se i pohranjuju na sigurno putem :stripe. Ovaj način plaćanja koristi se za sve tvoje pretplate.',\n            'saved'     => 'Spremljen način plaćanja',\n        ],\n        'cancel'                => [\n            'text'  => 'Žao nam je što odlaziš! Ako otkažeš pretplatu, bit će aktivna do sljedećeg ciklusa naplate, nakon čega ćeš izgubiti pojačanja kampanje i druge pogodnosti povezane s podrškom Kanke. Slobodno ispuni sljedeći obrazac i obavijesti nas što možemo učiniti boljim ili što je dovelo do tvoje odluke.',\n        ],\n        'cancelled'             => 'Tvoja pretplata je otkazana. Pretplatu možete obnoviti nakon završetka tvoje trenutne pretplate.',\n        'change'                => [\n            'text'  => [\n                'monthly'   => 'Pretplaćuješ se na sloj :tier koji se naplaćuje mjesečno :amount.',\n                'yearly'    => 'Pretplaćuješ se na sloj :tier koji se naplaćuje godišnje :amount.',\n            ],\n            'title' => 'Promijenite razinu pretplate',\n        ],\n        'currencies'            => [\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Promijenite željenu valutu naplate',\n        ],\n        'errors'                => [\n            'callback'      => 'Naš pružatelj plaćanja prijavio je pogrešku. Molimo pokušaj ponovo ili nam se obrati ako se problem nastavi.',\n            'subscribed'    => 'Tvoju pretplatu nije moguće obraditi. Stripe je pružio sljedeći savjet.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Aktivno od',\n            'active_until'      => 'Aktivno do',\n            'billing'           => 'Naplata',\n            'currency'          => 'Valuta naplate',\n            'payment_method'    => 'Način plaćanja',\n            'plan'              => 'Trenutni plan',\n            'reason'            => 'Razlog',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Plati svoju pretplatu pomoću :method. Na kraju pretplate ovaj se način plaćanja neće automatski obnoviti. :metoda je dostupna samo u eurima.',\n            'alternatives_warning'  => 'Nadogradnja pretplate prilikom korištenja ove metode nije moguća. Stvori novu pretplatu kada se završi trenutna.',\n            'alternatives_yearly'   => 'Zbog ograničenja koja se odnose na ponavljajuća plaćanja, metoda :method je dostupna samo za godišnje pretplate',\n        ],\n        'manage_subscription'   => 'Upravljanje pretplatom',\n        'payment_method'        => [\n            'actions'       => [\n                'add_new'           => 'Dodajte novi način plaćanja',\n                'change'            => 'Promjena načina plaćanja',\n                'save'              => 'Spremi način plaćanja',\n                'show_alternatives' => 'Alternativni načini plaćanja',\n            ],\n            'add_one'       => 'Trenutno nema spremljenog načina plaćanja.',\n            'alternatives'  => 'Možeš se pretplatiti pomoću ovih alternativnih načina plaćanja. Ova radnja će teretiti tvoj račun jednom i neće automatski obnavljati pretplatu svaki mjesec.',\n            'card'          => 'Kartica',\n            'card_name'     => 'Ime na kartici',\n            'country'       => 'Zemlja prebivališta',\n            'ending'        => 'Završava za',\n            'helper'        => 'Ova će se kartica koristiti za sve tvoje pretplate.',\n            'new_card'      => 'Dodaj novi način plaćanja',\n            'saved'         => ':brand završava s :last4',\n        ],\n        'placeholders'          => [\n            'reason'    => 'Po želji nam možeš reći zašto više ne podržavaš Kanku. Nedostajala je funkcionalnost? Je li se promijenila tvoja financijska situacija?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount naplaćeno mjesečno',\n            'cost_yearly'   => ':currency :amount naplaćeno godišnje',\n        ],\n        'sub_status'            => 'Informacije o pretplati',\n        'subscription'          => [\n            'actions'   => [\n                'downgrading'       => 'Molimo kontaktiraj nas radi smanjenja za nižu razinu',\n                'rollback'          => 'Promjena u Kobold',\n                'subscribe'         => 'Promjena u :tier mjesečno',\n                'subscribe_annual'  => 'Promjeni na :tier godišnje',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Tvoja uplata je registrirana. Primit ćeš obavijest čim se obradi i tvoja pretplata postane aktivna.',\n            'callback'      => 'Tvoja pretplata je uspješna. Tvoj račun će biti ažuriran čim nas naš pružatelj plaćanja informira o promjeni (ovo može potrajati nekoliko minuta).',\n            'currency'      => 'Tvoja željena postavka valute je ažurirana.',\n            'subscribed'    => 'Tvoja pretplata je bila uspješna. Ne zaboravi se pretplatiti na bilten glasanja zajednice kako bi te obavijestili kada započne novo glasanje. Postavke biltena možeš promijeniti na stranici profila.',\n        ],\n        'tiers'                 => 'Razina pretplate',\n        'trial_period'          => 'Godišnje pretplate imaju pravo otkaza 14 dana. Kontaktiraj nas na :email ako želiš otkazati godišnju pretplatu i dobiti povrat novca.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Informacije o promjeni razine',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Tvoji bonusi ostaju omogućeni do kraja razdoblja plaćanja.',\n                    'boosts'    => 'Isto se događa i s tvojim pojačanim kampanjama. Pojačane funkcionalnosti postaju nevidljive, ali se ne brišu kad se kampanja više ne pojačava.',\n                    'kobold'    => 'Za otkazivanje svoje pretplate, prijeđi na razinu Kobold.',\n                ],\n                'title'     => 'Prilikom otkazivanja pretplate',\n            ],\n            'downgrade' => [\n                'bullets'   => [\n                    'end'   => 'Tvoja trenutna razina ostat će aktivna do kraja tvog trenutnog ciklusa naplate, nakon čega ćeš biti nadograđen na svoju novu razinu.',\n                ],\n                'title'     => 'Pri prelasku na niži nivo',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Tvoj način plaćanja bit će naplaćen odmah i imat ćeš pristup svom novom sloju.',\n                    'prorate'   => 'Kada nadogradiš s Owlbear na Elemental, samo će ti se naplatiti ​​razlika do tvoje nove razine.',\n                ],\n                'title'     => 'Pri nadogradnji na viši sloj',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'Nismo mogli naplatiti tvoju kreditnu karticu. Ažuriraj podatke o svojoj kreditnoj kartici, a mi ćemo je pokušati ponovo naplatiti u narednih nekoliko dana. Ako opet ne uspije, pretplata će se otkazati.',\n            'patreon'       => 'Tvoj račun je trenutno povezan s Patreonom. Prekini vezu s računom u tvojim postavkama :patreon prije prelaska na Kanka pretplatu.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/hr/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'created_campaigns' => 'Tvoje kampanje',\n        'new_campaign'      => 'Nova kampanja',\n        'public_campaigns'  => 'Javne kampanje',\n        'updated'           => 'Ažurirano',\n    ],\n    'dashboard'         => 'Naslovna ploča',\n    'entity-creator'    => 'Kreiraj na brzinu',\n    'gallery'           => 'Galerija',\n    'other'             => 'Ostalo',\n    'world'             => 'Svijet',\n];\n"
  },
  {
    "path": "lang/hr/starter.php",
    "content": "<?php\n\nreturn [\n    'character1'    => [\n        'history'   => 'Ovaj lik služi kao primjer. James, sin Mancea Owlchestera i Rige Dunton, odrastao je u selu Genory prije nego što se preselio u glavni grad Unria kako bi radio kao jedan od kraljevih zapisničara.',\n        'sex'       => 'Muško',\n        'title'     => 'Sivi lovac',\n    ],\n    'character2'    => [\n        'history'   => 'Ovaj lik služi kao primjer. Irwie je od malih nogu oduvijek bila fascinirana eksplozivima, a karijeru je posvetila zanatu.',\n        'sex'       => 'Žensko',\n        'title'     => 'Kraljica eksplozija',\n    ],\n    'item1'         => [],\n    'kingdom1'      => [\n        'description'   => 'Ovo je primjer lokacije stvorene kako bi pokazala što se može učiniti s aplikacijom.',\n        'history'       => '(primjer) Kraljevstvo Genory osnovala su Genorska plemena krajem 5. stoljeća nakon što su napravili invaziju u zemlje Hottensa.',\n        'type'          => 'Kraljevstvo',\n    ],\n    'kingdom2'      => [\n        'description'   => '(primjer) Ulyss je glavni grad kraljevstva Genory i treći najveći grad Agagir Alliance.',\n        'history'       => '(primjer) Ulyss je glavni grad kraljevstva Genory. Osnovao ga je Frasan Irwen i nalazi se na rijeci Unri.',\n        'type'          => 'Glavni grad',\n    ],\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/hr/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe nije mogao naplatiti tvojom metodom plaćanja. Tvoja pretplata je zbog toga deaktivirana.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'   => 'Dodaj novu oznaku',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nova oznaka',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'  => 'Djeca',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'children'  => 'Popis sadrži sve oznake koje su unutar trenutne oznake, a ne samo one koje su direktno ispod nje.',\n        'tag'       => 'Ispod su prikazane sve oznake koje su izravno pod ovom oznakom.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Legende, Ratovi, Povijest, Religija, Veksologija',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Djeca',\n        ],\n    ],\n    'tags'          => [],\n];\n"
  },
  {
    "path": "lang/hr/teams.php",
    "content": "<?php\n\nreturn [\n    'index'     => [\n        'translations'  => 'Prijevodi',\n    ],\n    'patreon'   => [],\n    'people'    => [\n        'jay'   => [\n            'title' => 'Osnivač i vodeći programer',\n        ],\n        'jon'   => [\n            'title' => 'Suosnivač i Voditelj poslovanja',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/hr/tiers.php",
    "content": "<?php\n\nreturn [\n    'current'   => 'Tvoja trenutna pretplata',\n    'features'  => [\n        'api_requests'      => ':amount API zahtjeva / minuti',\n        'boosters'          => 'Pojačivači kampanje',\n        'discord'           => 'Discord uloge',\n        'feature_influence' => 'Utjecaj na nove funkcionalosti',\n        'file_size'         => ':size veličina učitane datoteke',\n        'nice_image'        => 'Zadane slike entiteta',\n        'no_ads'            => 'Bez reklama',\n        'pagination'        => ':amount maksimalna paginacija rezultata',\n    ],\n    'pricing'   => ':currency :amount / mjesec',\n];\n"
  },
  {
    "path": "lang/hr/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'success'   => 'Element je dodan kronologiji.',\n        'title'     => 'Novi element kronologije',\n    ],\n    'delete'        => [\n        'success'   => 'Uklonjen element :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Element je ažuriran.',\n        'title'     => 'Uređivanje elementa kronologije',\n    ],\n    'fields'        => [\n        'date'  => 'Datum',\n        'era'   => 'Razdoblje',\n        'icon'  => 'Ikona',\n    ],\n    'helpers'       => [\n        'icon'  => 'Kopiraj HTML ikone iz :fontawesome ili :rpgawesome.',\n    ],\n    'placeholders'  => [\n        'date'      => 'npr 42. ožujka ili 1332-1377',\n        'name'      => 'Obavezno ako nije odabran nijedan entitet',\n        'position'  => 'Pozicija na popisu elemenata za razdoblje. Ostavi prazno da bi se dodalo na kraj.',\n    ],\n];\n"
  },
  {
    "path": "lang/hr/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Dodaj novo razdoblje',\n    ],\n    'create'        => [\n        'success'   => 'Kreirano razdoblje :name.',\n        'title'     => 'Novo razdoblje',\n    ],\n    'delete'        => [\n        'success'   => 'Obrisano razdoblje :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Ažurirano razdoblje :name.',\n        'title'     => 'Uredi razdoblje :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Skraćenica',\n        'end_year'      => 'Završna godina',\n        'start_year'    => 'Početna godina',\n    ],\n    'helpers'       => [\n        'eras'      => 'Kronologiju treba stvoriti prije nego što joj se mogu dodati razdoblja.',\n        'primary'   => 'Razdvoji kronologiju u razdolja. Kronologiji treba najmanje jedno razdoblje da bi ispravno funkcionirala.',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'n.e., p.n.e., pr. Kr.',\n        'end_year'      => 'Godina kada razdoblje završava. Ostavi prazno ako je ovo trenutno razdoblje.',\n        'name'          => 'Moderno doba, Brončano doba, Galaktički Ratovi',\n        'start_year'    => 'Godina kada razdoblje počinje. Ostavi prazno ako je ovo prvo razdoblje.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/hr/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Dodajte element u razdoblje :era',\n        'back'          => 'Povratak na :name',\n        'save_order'    => 'Spremi novi redoslijed',\n    ],\n    'create'        => [\n        'title' => 'Nova kronologija',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_eras'     => 'Kopiraj razdoblja',\n        'eras'          => 'Razdoblja',\n        'reverse_order' => 'Obrni redoslijed razdoblja',\n    ],\n    'helpers'       => [\n        'reverse_order' => 'Omogući za prikaz razdoblja obrnutim kronološkim redoslijedom (prvo starije ere)',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Primarna, Svjetska kronika, Ostavština kraljevstva',\n    ],\n    'show'          => [],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/hr/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'        => 'Polje :attribute mora biti prihvaćeno.',\n    'active_url'      => 'Polje :attribute nije ispravan URL.',\n    'after'           => 'Polje :attribute mora biti datum nakon :date.',\n    'after_or_equal'  => 'Polje :attribute mora biti datum veći ili jednak :date.',\n    'alpha'           => 'Polje :attribute smije sadržavati samo slova.',\n    'alpha_dash'      => 'Polje :attribute smije sadržavati samo slova, brojeve i crtice.',\n    'alpha_num'       => 'Polje :attribute smije sadržavati samo slova i brojeve.',\n    'array'           => 'Polje :attribute mora biti niz.',\n    'before'          => 'Polje :attribute mora biti datum prije :date.',\n    'before_or_equal' => 'Polje :attribute mora biti datum manji ili jednak :date.',\n    'between'         => [\n        'numeric' => 'Polje :attribute mora biti između :min - :max.',\n        'file'    => 'Polje :attribute mora biti između :min - :max kilobajta.',\n        'string'  => 'Polje :attribute mora biti između :min - :max znakova.',\n        'array'   => 'Polje :attribute mora imati između :min - :max stavki.',\n    ],\n    'boolean'        => 'Polje :attribute mora biti false ili true.',\n    'confirmed'      => 'Potvrda polja :attribute se ne podudara.',\n    'date'           => 'Polje :attribute nije ispravan datum.',\n    'date_equals'    => 'Stavka :attribute mora biti jednaka :date.',\n    'date_format'    => 'Polje :attribute ne podudara s formatom :format.',\n    'different'      => 'Polja :attribute i :other moraju biti različita.',\n    'digits'         => 'Polje :attribute mora sadržavati :digits znamenki.',\n    'digits_between' => 'Polje :attribute mora imati između :min i :max znamenki.',\n    'dimensions'     => 'Polje :attribute ima neispravne dimenzije slike.',\n    'distinct'       => 'Polje :attribute ima dupliciranu vrijednost.',\n    'email'          => 'Polje :attribute mora biti ispravna e-mail adresa.',\n    'ends_with'      => 'The :attribute must end with one of the following: :values.',\n    'exists'         => 'Odabrano polje :attribute nije ispravno.',\n    'file'           => 'Polje :attribute mora biti datoteka.',\n    'filled'         => 'Polje :attribute je obavezno.',\n    'gt'             => [\n        'numeric' => 'Polje :attribute mora biti veće od :value.',\n        'file'    => 'Polje :attribute mora biti veće od :value kilobajta.',\n        'string'  => 'Polje :attribute mora biti veće od :value karaktera.',\n        'array'   => 'Polje :attribute mora biti veće od :value stavki.',\n    ],\n    'gte' => [\n        'numeric' => 'Polje :attribute mora biti veće ili jednako :value.',\n        'file'    => 'Polje :attribute mora biti veće ili jednako :value kilobajta.',\n        'string'  => 'Polje :attribute mora biti veće ili jednako :value znakova.',\n        'array'   => 'Polje :attribute mora imati :value stavki ili više.',\n    ],\n    'image'    => 'Polje :attribute mora biti slika.',\n    'in'       => 'Odabrano polje :attribute nije ispravno.',\n    'in_array' => 'Polje :attribute ne postoji u :other.',\n    'integer'  => 'Polje :attribute mora biti broj.',\n    'ip'       => 'Polje :attribute mora biti ispravna IP adresa.',\n    'ipv4'     => 'Polje :attribute mora biti ispravna IPv4 adresa.',\n    'ipv6'     => 'Polje :attribute mora biti ispravna IPv6 adresa.',\n    'json'     => 'Polje :attribute mora biti ispravan JSON string.',\n    'lt'       => [\n        'numeric' => 'Polje :attribute mora biti manje od :value.',\n        'file'    => 'Polje :attribute mora biti manje od :value kilobajta.',\n        'string'  => 'Polje :attribute mora biti manje od :value znakova.',\n        'array'   => 'Polje :attribute mora biti manje od :value stavki.',\n    ],\n    'lte' => [\n        'numeric' => 'Polje :attribute mora biti manje ili jednako :value.',\n        'file'    => 'Polje :attribute mora biti manje ili jednako :value kilobajta.',\n        'string'  => 'Polje :attribute mora biti manje ili jednako :value znakova.',\n        'array'   => 'Polje :attribute ne smije imati više od :value stavki.',\n    ],\n    'max' => [\n        'numeric' => 'Polje :attribute mora biti manje od :max.',\n        'file'    => 'Polje :attribute mora biti manje od :max kilobajta.',\n        'string'  => 'Polje :attribute mora sadržavati manje od :max znakova.',\n        'array'   => 'Polje :attribute ne smije imati više od :max stavki.',\n    ],\n    'mimes'     => 'Polje :attribute mora biti datoteka tipa: :values.',\n    'mimetypes' => 'Polje :attribute mora biti datoteka tipa: :values.',\n    'min'       => [\n        'numeric' => 'Polje :attribute mora biti najmanje :min.',\n        'file'    => 'Polje :attribute mora biti najmanje :min kilobajta.',\n        'string'  => 'Polje :attribute mora sadržavati najmanje :min znakova.',\n        'array'   => 'Polje :attribute mora sadržavati najmanje :min stavki.',\n    ],\n    'not_in'               => 'Odabrano polje :attribute nije ispravno.',\n    'not_regex'            => 'Format polja :attribute je neispravan.',\n    'numeric'              => 'Polje :attribute mora biti broj.',\n    'present'              => 'Polje :attribute mora biti prisutno.',\n    'regex'                => 'Polje :attribute se ne podudara s formatom.',\n    'required'             => 'Polje :attribute je obavezno.',\n    'required_if'          => 'Polje :attribute je obavezno kada polje :other sadrži :value.',\n    'required_unless'      => 'Polje :attribute je obavezno osim :other je u :values.',\n    'required_with'        => 'Polje :attribute je obavezno kada postoji polje :values.',\n    'required_with_all'    => 'Polje :attribute je obavezno kada postje polja :values.',\n    'required_without'     => 'Polje :attribute je obavezno kada ne postoji polje :values.',\n    'required_without_all' => 'Polje :attribute je obavezno kada nijedno od polja :values ne postoji.',\n    'same'                 => 'Polja :attribute i :other se moraju podudarati.',\n    'size'                 => [\n        'numeric' => 'Polje :attribute mora biti :size.',\n        'file'    => 'Polje :attribute mora biti :size kilobajta.',\n        'string'  => 'Polje :attribute mora biti :size znakova.',\n        'array'   => 'Polje :attribute mora sadržavati :size stavki.',\n    ],\n    'starts_with' => 'Stavka :attribute mora započinjati jednom od narednih stavki: :values',\n    'string'      => 'Polje :attribute mora biti string.',\n    'timezone'    => 'Polje :attribute mora biti ispravna vremenska zona.',\n    'unique'      => 'Polje :attribute već postoji.',\n    'uploaded'    => 'Polje :attribute nije uspešno učitano.',\n    'url'         => 'Polje :attribute nije ispravnog formata.',\n    'uuid'        => 'Stavka :attribute mora biti valjani UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n    ],\n];\n"
  },
  {
    "path": "lang/it/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'Allega alle entità',\n        ],\n        'create'        => [\n            'attach_success'    => '{1} Allega l\\'abilità :name a :count entità.|[2,*] Allega l\\'abilità :name a :count entità.',\n        ],\n        'description'   => 'Entità che hanno l\\'abilità',\n        'title'         => 'Abilità :name Entità',\n    ],\n    'create'        => [\n        'title' => 'Nuova Abilità',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'entities'      => [],\n    'fields'        => [\n        'charges'   => 'Cariche',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'placeholders'  => [\n        'charges'   => 'Quantità di cariche. Fai riferimento agli attributi con {Level}*{CHA}',\n        'name'      => 'Palla di Fuoco, Allerta, Colpo Scaltro',\n        'type'      => 'Incantesimo, Talento, Attacco',\n    ],\n    'reorder'       => [\n        'parentless'    => 'Nessuno Genitore',\n        'success'       => 'Abilità riordinate con successo.',\n        'title'         => 'Riordina le abilità',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Riordina le abilità',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'create'                => [\n        'title' => 'Nuovo Modello di Attributo',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [\n        'auto_apply'    => 'Applica automaticamente',\n    ],\n    'hints'                 => [\n        'automatic'                 => 'I seguenti attributi sono stati applicati automaticamente da :link.',\n        'automatic_apply'           => '{1} Il seguente :count attributo è stato applicato automaticamente da :link | [2,] I seguenti :count attributi sono stati applicati automaticamente da :link.',\n        'entity_type'               => 'Applica automaticamente gli attributi di questo modello alle nuove entità del tipo selezionato.',\n        'parent_attribute_template' => 'Questo modello di attributo può essere figlio di un altro modello di attributo. Quando si applica questo modello di attributo, verranno applicati anche tutti i suoi genitori.',\n    ],\n    'index'                 => [],\n    'placeholders'          => [\n        'name'  => 'Nome di un Modello di Attributo',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/it/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Errore',\n            'rendering' => 'C\\'è stato un errore nel rendering del plugin del marketplace. Contatta il creatore del plugin.',\n        ],\n    ],\n    'helpers'   => [],\n    'list'      => [],\n    'pitch'     => 'Trova e aggiungi schede del personaggio dal :marketplace in una :boosted-campaign',\n];\n"
  },
  {
    "path": "lang/it/auth.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n    'banned'    => [\n        'permanent' => 'Sei stato bannato permanentemente.',\n        'temporary' => '{1} Sei stato bannato per :days giorno|[2,*] Sei stato bannato per :days giorni',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Conferma',\n        'error'     => 'Password non valida, riprova.',\n        'helper'    => 'Conferma la tua password prima di continuare',\n        'title'     => 'Conferma della password',\n    ],\n    'failed'    => 'Credenziali non corrispondenti ai dati registrati.',\n    'helpers'   => [\n        'password'  => 'Mostra / Nascondi password',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'Password Monouso',\n            'email'     => 'Email',\n            'password'  => 'Password',\n        ],\n        'or'                    => 'OPPURE',\n        'password_forgotten'    => 'Password dimenticata?',\n        'submit'                => 'Accedi',\n        'title'                 => 'Accedi',\n    ],\n    'register'  => [\n        'already'   => 'Hai già un account? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Un account con questa email è già stato registrato.',\n            'general_error'         => 'C\\'è stato un errore durante la registrazione del tuo account. Per favore riprova.',\n        ],\n        'fields'    => [\n            'email'     => 'Email',\n            'name'      => 'Nome Utente',\n            'password'  => 'Password',\n        ],\n        'log-in'    => 'Accedi',\n        'submit'    => 'Registrati',\n        'title'     => 'Registrati',\n        'tos'       => 'Registrando un account, accetti i nostri :terms e la nostra :privacy.',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Indirizzo Email',\n            'password'              => 'Password',\n            'password_confirmation' => 'Conferma la password',\n        ],\n        'send'      => 'Invia il Link di Reset Password',\n        'submit'    => 'Resetta la password',\n        'title'     => 'Resetta la password',\n    ],\n    'tfa'       => [\n        'helper'    => 'L\\'Autenticazione a Due Fattori è abilitata. Inserisci la Password Monouso fornita dall\\'app di autenticazione.',\n        'title'     => 'Autenticazione a Due Fattori',\n    ],\n    'throttle'  => 'Troppi tentativi di accesso. Riprova tra :seconds secondi.',\n    'x-twitter' => 'X, conosciuto precedentemente come Twitter',\n];\n"
  },
  {
    "path": "lang/it/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Scarica PDF',\n    ],\n    'description'   => 'Mostra le fatture degli ultimi 24 mesi.',\n    'empty'         => 'Nessuna fattura trovata',\n    'fields'        => [\n        'amount'    => 'Importo',\n        'date'      => 'Data',\n        'invoice'   => 'Fattura',\n        'status'    => 'Stato',\n    ],\n    'paypal'        => 'Si noti che qui sono visibili solo i pagamenti effettuati tramite Stripe e non PayPal.',\n    'status'        => [\n        'paid'      => 'Pagato',\n        'pending'   => 'In attesa',\n    ],\n    'title'         => 'Storico della fatturazione',\n];\n"
  },
  {
    "path": "lang/it/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'Storico della fatturazione',\n    'overview'          => 'Riepilogo',\n    'payment-method'    => 'Metodo di pagamento',\n];\n"
  },
  {
    "path": "lang/it/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Metodo di pagamento',\n    'types' => [\n        'card'  => 'Carta',\n    ],\n];\n"
  },
  {
    "path": "lang/it/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Personalizza la barra laterale',\n    ],\n    'create'            => [\n        'title' => 'Nuovo Collegamento Rapido',\n    ],\n    'destroy'           => [],\n    'edit'              => [\n        'title' => 'Collegamento Rapido :name',\n    ],\n    'fields'            => [\n        'active'            => 'Attivo',\n        'dashboard'         => 'Pagina Principale',\n        'default_dashboard' => 'Pagina Principale predefinita',\n        'filters'           => 'Filtri',\n        'menu'              => 'Sottopagina',\n        'position'          => 'Posizione',\n        'random_type'       => 'Tipo di Entità Casuale',\n        'selector'          => 'Configurazione del Collegamento Rapido',\n        'target'            => 'Elemento',\n    ],\n    'helpers'           => [\n        'active'            => 'Collegamenti rapidi inattivi non appaiono nella barra laterale',\n        'dashboard'         => 'Indirizza il collegamento rapido a una delle Pagine Principale personalizzate della campagna.',\n        'default_dashboard' => 'Collegati invece alla Pagina Principale predefinita della campagna. È ancora necessario selezionare una Pagina Principale personalizzata.',\n        'entity'            => 'Configura questo collegamento nel menù per poter accedere direttamente ad una entità. Il campo :menu gestisce quale sotto-pagina dell\\'entità sarà aperta.',\n        'position'          => 'Utilizza questo campo per controllare in che ordine crescente i collegamenti appariranno nel menù.',\n        'random'            => 'Utilizza questo campo per avere un collegamento rapido che punta a un\\'entità a caso. È possibile filtrare il link per accedere solo a un tipo specifico di entità.',\n        'selector'          => 'Configura la destinazione di questo collegamento rapido quando un utente fa clic su di esso nella barra laterale.',\n        'type'              => 'Imposta questo collegamento rapido per andare direttamente a un elenco di entità. Per filtrare i risultati, copia le parti dell\\'url dell\\'elenco di entità filtrate dopo il segno :? nel campo :filter.',\n    ],\n    'index'             => [],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=city',\n        'menu'      => 'Sottopagina del menu (utilizza l\\'ultimo testo dell\\'url)',\n        'tab'       => '(disattivato)',\n    ],\n    'random_no_entity'  => 'Non è stata trovata alcuna entità casuale.',\n    'random_types'      => [\n        'any'   => 'Qualunque entità',\n    ],\n    'reorder'           => [\n        'success'   => 'Collegamenti Rapidi riordinati.',\n        'title'     => 'Riordina i Collegamenti Rapidi',\n    ],\n    'show'              => [],\n    'visibilities'      => [\n        'is_active' => 'Visualizza i Collegamenti Rapidi nella Barra Laterale',\n    ],\n];\n"
  },
  {
    "path": "lang/it/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'Genera',\n        'insert'    => 'Usa',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'Per accedere a questa funzione, devi possedere un abbonamento Viverna o Elementale.',\n        'out-of-tokens' => 'Non hai più gettoni! Li riceverei automaticamente in :date.',\n    ],\n    'here'          => 'qui',\n    'intro'         => 'Ciao! Sono :name, una AI per generare background per i tuoi personaggi su Kanka. Puoi imparare di più su di me :here.',\n    'kankappy'      => 'Sono segretamente discepoli di Kankappy.',\n    'loading'       => 'Per favore, attendi un momento, ci sto pensando sodo e può volerci anche un minuto!',\n    'placeholders'  => [\n        'prompt'    => 'Scrivi uno spunto che verrà trasformato in un background.',\n    ],\n    'token-limit'   => 'Attualmente hai :amount gettoni. Ogni volta che genero un background, viene utilizzato un gettone, quindi usali con saggezza!',\n];\n"
  },
  {
    "path": "lang/it/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'success'   => 'Tempo meteorologico aggiunto.',\n        'title'     => 'Nuovo evento atmosferico',\n    ],\n    'destroy'       => [\n        'success'   => 'Tempo meteorologico rimosso.',\n    ],\n    'edit'          => [\n        'success'   => 'Tempo meteorologico aggiornato.',\n        'title'     => 'Aggiorna il Tempo meteorologico',\n    ],\n    'fields'        => [\n        'effect'        => 'Effetto',\n        'name'          => 'Nome',\n        'precipitation' => 'Precipitazione',\n        'temperature'   => 'Temperatura',\n        'weather'       => 'Tempo Meteorologico',\n        'wind'          => 'Vento',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Temporale',\n            'cloud'                 => 'Nuvoloso',\n            'cloud-rain'            => 'Piovoso',\n            'cloud-showers-heavy'   => 'Pioggia Torrenziale',\n            'cloud-sun'             => 'Sereno Variabile',\n            'cloud-sun-rain'        => 'Parzialmente Nuvoloso con Precipitazioni',\n            'meteor'                => 'Meteora',\n            'smog'                  => 'Smog',\n            'snowflake'             => 'Neve',\n            'sun'                   => 'Soleggiato',\n            'wind'                  => 'Ventoso',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Effetto magico o naturale',\n        'name'          => 'Testo opzionale per il meteo',\n        'precipitation' => 'Quantità di acqua caduta',\n        'temperature'   => 'Temperatura massima e minima',\n        'wind'          => 'Velocità del vento',\n    ],\n];\n"
  },
  {
    "path": "lang/it/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Aggiungi un\\'epoca',\n        'add_intercalary'   => 'Aggiungi giorni intercalari',\n        'add_month'         => 'Aggiungi un mese',\n        'add_moon'          => 'Aggiungi una luna',\n        'add_reminder'      => 'Aggiungi un evento',\n        'add_season'        => 'Aggiungi una stagione',\n        'add_weather'       => 'Imposta il meteo',\n        'add_week'          => 'Aggiungi una settimana con un nome',\n        'add_weekday'       => 'Aggiungi un giorno della settimana',\n        'add_year'          => 'Aggiungi un nome dell\\'anno',\n        'set_today'         => 'Imposta come giorno corrente',\n        'today'             => 'Oggi',\n        'update_weather'    => 'Aggiorna il meteo',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Accade ogni anno',\n    ],\n    'create'        => [\n        'title' => 'Nuovo Calendario',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Data del calendario aggiornata.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Evento del calendario creato',\n            'title'     => 'Aggiungi un Evento del Calendario su :name',\n        ],\n        'destroy'   => 'Evento rimosso dal calendario \\':name\\'',\n        'edit'      => [\n            'success'   => 'Evento del calendario aggiornato.',\n            'title'     => 'Aggiorna un Evento del Calendario per :name',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Selezione dell\\'entità non valida',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Stai modificando un evento che si trova sul calendario :calendar',\n        ],\n        'success'   => 'Evento \\':event\\' aggiunto al calendario.',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} Eliminato :count evento.|[2,*] Eliminati :count eventi.',\n            'patch'     => '{1} Aggiorna :count evento.|[2,*] Aggiorna :count eventi.',\n        ],\n        'end'       => '(fine)',\n        'filters'   => [\n            'show_after'    => 'Mostra oggi e dopo',\n            'show_all'      => 'Mostra tutto',\n            'show_before'   => 'Mostra fino a oggi',\n        ],\n        'start'     => '(inizio)',\n    ],\n    'fields'        => [\n        'comment'           => 'Commento',\n        'current_day'       => 'Giorno corrente',\n        'current_month'     => 'Mese corrente',\n        'current_year'      => 'Anno corrente',\n        'date'              => 'Data corrente',\n        'day'               => 'Giorno',\n        'default_layout'    => 'Layout predefinito',\n        'format'            => 'Formato',\n        'is_incrementing'   => 'Data di Avanzamento',\n        'is_recurring'      => 'Ricorrente',\n        'leap_year'         => 'Anni bisestili',\n        'leap_year_amount'  => 'Aggiungi Giorni',\n        'leap_year_month'   => 'Mese',\n        'leap_year_offset'  => 'Ogni',\n        'leap_year_start'   => 'Anno bisestile',\n        'length'            => 'Durata Evento',\n        'length_days'       => ':count giorno|:count giorni',\n        'month'             => 'Mese',\n        'months'            => 'Mesi',\n        'moons'             => 'Lune',\n        'parameters'        => 'Parametri',\n        'recurring_until'   => 'Ricorrente fino all\\'Anno',\n        'reset'             => 'Ripristino Settimanale',\n        'seasons'           => 'Stagioni',\n        'show_birthdays'    => 'Mostra Compleanni',\n        'skip_year_zero'    => 'Togli Anno Zero',\n        'start_offset'      => 'Inizio ritardo',\n        'suffix'            => 'Suffisso',\n        'week_names'        => 'Nomi della Settimana',\n        'weekdays'          => 'Giorni della Settimana',\n        'year'              => 'Anno',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Seleziona il layout che il calendario usa in modo predefinito quando visualizzato.',\n        'format'            => 'Aggiungi la formattazione personalizzata della data per le entità del calendario.',\n        'month_type'        => 'I mesi intercalari non utilizzano i giorni della settimana, ma influenzano comunque le fasi lunari e le stagioni.',\n        'moon_offset'       => 'Per impostazione predefinita, la prima luna piena appare il primo giorno dell\\'anno 0. Cambiando il ritardo si modifica il momento in cui viene visualizzata la prima luna piena. Questo valore può essere negativo (fino alla lunghezza del primo mese) o positivo (fino alla lunghezza del primo mese).',\n        'start_offset'      => 'Per impostazione predefinita, il calendario inizia col primo giorno della settimana dell\\'anno 0. Cambiare questo campo influenzerà la collocazione del primo giorno del calendario.',\n    ],\n    'hints'         => [\n        'event_length'      => 'La durata prevista per l\\'evento. Un evento verrà visualizzato solo nei primi due anni.',\n        'is_incrementing'   => 'I calendari con avanzamento incrementeranno automaticamente la loro data corrente alle 00:00 UTC.',\n        'leap_year'         => 'Imposta gli anni bisestili per il calendario.',\n        'months'            => 'Il tuo calendario deve avere almeno 2 mesi.',\n        'moons'             => 'Aggiungere lune le farà apparire sul calendario ad ogni luna piena e luna nuova. Se il ciclo di luna piena è maggiore di 10 giorni, saranno mostrate anche la luna calante e la luna crescente.',\n        'parent_calendar'   => 'L\\'assegnazione di un calendario genitore farà includere gli eventi e il meteo del calendario genitore.',\n        'reset'             => 'Fai sempre coincidere l\\'inizio del mese o dell\\'anno col primo giorno della settimana.',\n        'seasons'           => 'Crea stagioni per il tuo calendario specificando quando ha inizio ciascuna di esse. Kanka si occuperà del resto.',\n        'show_birthdays'    => 'Mostra le date di nascita annuali dei personaggi che hanno un evento di compleanno su questo calendario fino alla loro data di morte.',\n        'skip_year_zero'    => 'Per impostazione predefinita, il primo anno del calendario è l\\'anno zero. Attiva questa opzione per togliere l\\'anno zero.',\n        'weekdays'          => 'Imposta i tuoi nomi dei giorni della settimana. Sono necessari almeno 2 giorni della settimana.',\n        'weeks'             => 'Definisci alcuni nomi per le settimane più importanti del tuo calendario.',\n        'years'             => 'Alcuni anni sono così importanti che hanno un nome specifico.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month'     => 'Mese',\n        'monthly'   => 'Mensile in modo predefinito',\n        'year'      => 'Anno',\n        'yearly'    => 'Annuale in modo predefinito',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Cambio Anno',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Intercalari',\n        'standard'      => 'Normali',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Luna piena',\n                'fullmoon_name' => ':moon piena',\n                'month'         => 'Mensile',\n                'newmoon'       => 'Luna nuova',\n                'newmoon_name'  => ':moon nuova',\n                'none'          => 'Nessuno',\n                'unnamed_moon'  => 'Luna :number',\n                'year'          => 'Annuale',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Nessuno',\n            'month' => 'Mensile',\n            'year'  => 'Annuale',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Giorni di intercalazione',\n        'leap_year'     => 'Anno Bisestile',\n        'months'        => 'Mesi',\n        'weeks'         => 'Settimane',\n        'years'         => 'Anni Nominati',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Durata in giorni',\n            'month'     => 'Alla fine di quale mese',\n            'name'      => 'Nome dell\\'intercalazione',\n        ],\n        'month'         => [\n            'alias' => 'Alias del Mese',\n            'length'=> 'Numero di Giorni',\n            'name'  => 'Nome del Mese',\n            'type'  => 'Tipo',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Luna piena ogni (giorni)',\n            'name'      => 'Nome della Luna',\n            'offset'    => 'Ritardo della prima luna piena',\n        ],\n        'seasons'       => [\n            'day'   => 'Giorno iniziale',\n            'month' => 'Mese iniziale',\n            'name'  => 'Nome della Stagione',\n        ],\n        'weeks'         => [\n            'name'      => 'Nome della Settimana',\n            'number'    => 'Numero',\n        ],\n        'year'          => [\n            'name'      => 'Nome dell\\'Anno',\n            'number'    => 'Anno',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Colore',\n        'comment'           => 'Compleanno, festa, solstizio',\n        'date'              => 'La data corrente',\n        'leap_year_amount'  => 'Numero di giorni aggiunti in un anno bisestile',\n        'leap_year_month'   => 'Mese al quale i giorni sono aggiunti',\n        'leap_year_offset'  => 'Ogni quanti anni è presente un anno bisestile',\n        'leap_year_start'   => 'Il primo anno bisestile',\n        'length'            => 'Durata dell\\'Evento in giorni',\n        'months'            => 'Numero di mesi in un anno',\n        'recurring_until'   => 'Ultimo anno per la ricorrenza (lascia vuoto per ripetere per sempre)',\n        'seasons'           => 'Numero di stagioni',\n        'suffix'            => 'Suffisso dell\\'Era corrente (AC, DC)',\n        'type'              => 'Tipo del calendario',\n        'weekdays'          => 'Numero di giorni in una settimana',\n    ],\n    'show'          => [\n        'missing_details'       => 'Questo calendario non può essere visualizzato. I Calendari necessitano almeno di 2 mesi e 2 giorni della settimana per essere visualizzati correttamente.',\n        'moon_1first_quarter'   => ':moon crescente',\n        'moon_full'             => ':moon piena',\n        'moon_last_quarter'     => ':moon calante',\n        'moon_new'              => ':moon nuova',\n        'tabs'                  => [\n            'events'    => 'Eventi del Calendario',\n            'weather'   => 'Tempo Atmosferico',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Oggi e dopo',\n        'before'=> 'Fino a oggi',\n    ],\n    'validators'    => [\n        'format'        => 'Il formato della data è invalido.',\n        'moon_offset'   => 'Il ritardo della prima luna piena non può essere più lungo del primo mese del calendario.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Gli eventi che coprono più anni sono visibili solo nei primi due anni. Per saperne di più, consulta la nostra :documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/callouts.php",
    "content": "<?php\n\nreturn [\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Potenzia :campaign',\n            'superboost'    => 'Superpotenzia :campaign',\n        ],\n        'learn-more'    => 'Cosa sono i potenziamenti?',\n        'limitation'    => 'Per accedere a questa funzione, la campagna deve essere potenziata.',\n        'limitations'   => [\n            'boosted'       => 'Per accedere a questa funzione, la campagna deve essere potenziata.',\n            'superboosted'  => 'Per accedere a questa funzione, la campagna deve essere superpotenziata.',\n        ],\n        'multiple'      => 'Per accedere a queste funzioni, la campagna deve essere potenziata.',\n        'pitches'       => [\n            'element-class' => 'Assegna a questo elemento una classe CSS personalizzata con una :boosted-campaign',\n            'icon'          => 'Sblocca milioni di icone personalizzate da FontAwesome con una :boosted-campaign.',\n        ],\n        'titles'        => [\n            'boosted'       => 'Funzione Potenziata',\n            'superboosted'  => 'Funzione Superpotenziata',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => 'Cosa sono le campagne premium?',\n        'limitation'    => 'Per accedere a questa funzione, le funzioni premium devono essere attivate.',\n        'title'         => 'Funzione di campagna premium',\n        'unlock'        => 'Sblocca funzioni premium per :campaign',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Abbonati per sbloccare fino a :max MB per i caricamenti di files.',\n        'share-booster' => 'Potenzia :campaign per aumentare le dimensioni di caricamento file per tutti i membri della campagna.',\n        'share-premium' => 'Aumenta le dimensioni di caricamento dei file per tutti i membri della campagna con una campagna premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => 'Congratulazioni!',\n    'connections'       => '{0} Nessun legame creato|{1} Un legame creato|[2,*] :amount di legami creati',\n    'created'           => '{0} Nessun :plural creato|{1} Un :singular creato|[2,*] :amount :plural creati',\n    'dead'              => '{0} Nessun romanzo giallo|{1} Un romanzo giallo|[2,*] :amount romanzi gialli',\n    'goal'              => 'Obbiettivo :number',\n    'goal_reached'      => 'La campagna ha sbloccato il seguente Obbiettivo:',\n    'level'             => 'Livello :number',\n    'markers'           => '{0} Nessun indicatore di mappa creato|{1} Un indicatore di mappa creato|[2,*] :amount indicatori di mappa creati',\n    'painter'           => '{0} Nessun tema creato|{1} Un tema creato|[2,*] :amount temi creati',\n    'plugins'           => '{0} Nessun plugin installato|{1} Un plugin installato|[2,*] :amount plugin installati',\n    'remaining'         => [\n        'generic'   => 'Ancora un po\\' e si sbloccherà il livello successivo.',\n    ],\n    'tagged'            => '{0} Nessun entità taggata|{1} Un\\'entità taggata|[2,*] :amount entità taggate',\n    'titles'            => [\n        'calendars'     => 'Maestro del Tempo',\n        'characters'    => 'Maestro dei Nomi',\n        'connections'   => 'Cupido',\n        'creatures'     => 'Allevatore',\n        'dead'          => 'Omicida',\n        'events'        => 'Maestro delle Tradizioni',\n        'families'      => 'Organizzatore Famigliare',\n        'locations'     => 'Costruttore',\n        'markers'       => 'Cartografo',\n        'plugins'       => 'Connoisseur di Plugin',\n        'quests'        => 'Maestro di Intrighi',\n        'tags'          => 'Tutto Sotto Controllo',\n        'themes'        => 'Pittore',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'accept'    => 'Accetta',\n        'reject'    => 'Rifiuta',\n    ],\n    'apply'         => [\n        'apply'         => 'Candidati',\n        'help'          => 'Questa campagna è aperta a nuovi membri. Per aderire, compila il modulo. Verrai avvisato quando gli amministratori della campagna esamineranno la tua candidatura.',\n        'remove_text'   => 'la tua candidatura',\n        'success'       => [\n            'apply' => 'La tua candidatura è stata salvata. Puoi ancora cambiarla o cancellarla in qualunque momento. Verrai avvisato quando gli amministratori della campagna esamineranno la tua candidatura.',\n            'remove'=> 'La tua candidatura è stato rimossa.',\n            'update'=> 'La tua candidatura è stata aggiornata. Puoi ancora cambiarla o cancellarla in qualunque momento. Verrai avvisato quando gli amministratori della campagna esamineranno la tua candidatura.',\n        ],\n        'title'         => 'Unisciti a :name',\n    ],\n    'errors'        => [],\n    'fields'        => [\n        'application'   => 'Candidatura',\n    ],\n    'helpers'       => [\n        'modal' => 'Una campagna aperta alle candidature e al pubblico può avere utenti che chiedono di unirsi alla campagna.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Scrivi qui la tua candidatura per unirti alla campagna',\n    ],\n    'statuses'      => [],\n    'toggle'        => [\n        'closed'    => 'Chiuso a candidature',\n        'label'     => 'Stato',\n        'open'      => 'Aperto a candidature',\n        'success'   => 'Stato di candidatura della campagna aggiornato',\n        'title'     => 'Stato di Candidatura',\n    ],\n    'update'        => [\n        'approve'   => 'Seleziona il ruolo in cui l\\'utente verrà aggiunto alla campagna.',\n        'approved'  => 'Candidatura approvata.',\n        'reject'    => 'Scrivi un messaggio facoltativo all\\'utente per spiegare il motivo del rifiuto della candidatura.',\n        'rejected'  => 'Candidatura rifiutata',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'      => 'Costruisci visivamente un tema per la campagna con questa interfaccia. Scorri verso il basso per vedere l\\'impatto delle modifiche sui vari elementi della campagna. Quando selezioni un colore, viene automaticamente selezionato un colore \"contrastante\" per la colorazione del testo. Per saperne di più sulla tematizzazione, consulta i nostri :docs.',\n    'pitch'     => 'Hey! Abbiamo un creatore di temi se vuoi solo cambiare alcuni dei colori della campagna 😉',\n    'pitch-go'  => 'Portami al Creatore di Temi',\n    'reset'     => 'Ripristina lo stile del Tema',\n    'success'   => 'Stile del Tema salvato',\n    'title'     => 'Creatore di Temi',\n];\n"
  },
  {
    "path": "lang/it/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Intestazione della campagna modificata.',\n        'title'     => 'Modifica l\\'intestazione della campagna.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Aggiungi una nuova immagine predefinita',\n    ],\n    'call-to-action'    => 'Carica una thumbnail personalizzata per tutti i personaggi, luoghi o altre entità della campagna. Queste immagini verranno mostrate poi in diverse liste.',\n    'create'            => [\n        'error'     => 'C\\'è stato un errore durante il salvataggio delle nuove immagini predefinite. Il campo :type è già impostato?',\n        'success'   => 'Immagine predefinita per :type creata.',\n        'title'     => 'Nuova immagine predefinita',\n    ],\n    'destroy'           => [\n        'success'   => 'Immagine predefinita per :type rimossa.',\n    ],\n    'index'             => [],\n];\n"
  },
  {
    "path": "lang/it/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'download'  => 'Scarica',\n        'export'    => 'Esporta i dati della campagna',\n    ],\n    'confirm'   => [\n        'title'     => 'Conferma l\\'esportazione',\n        'warning'   => 'Stai per esportare i dati della campagna. Questo processo può richiedere molto tempo, a seconda delle dimensioni della campagna. Puoi continuare a usare Kanka mentre i nostri server generano l\\'esportazione.',\n    ],\n    'errors'    => [\n        'limit' => 'La campagna è stata già esportata una volta oggi. Per favore riprova domani.',\n    ],\n    'expired'   => 'Link scaduto',\n    'helpers'   => [],\n    'progress'  => 'Progresso',\n    'size'      => 'Dimensione',\n    'status'    => [\n        'failed'    => 'Fallito',\n        'finished'  => 'Finito',\n        'running'   => 'In Corso',\n        'scheduled' => 'Programmato',\n    ],\n    'success'   => 'L\\'esportazione della campagna è in fase di preparazione. Riceverai una notifica su Kanka una volta che è pronta per scaricare.',\n    'title'     => 'Esportazione della campagna',\n];\n"
  },
  {
    "path": "lang/it/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close'         => 'Chiudi',\n        'file-link'     => 'Link del file',\n        'focus_point'   => 'Punto focus dell\\'immagine',\n        'image-link'    => 'Link dell\\'immagine',\n        'reset_focus'   => 'Ripristina punto focus dell\\'immagine',\n        'save'          => 'Salva',\n        'upgrade'       => 'Aumenta lo spazio di archiviazione',\n    ],\n    'breadcrumb'    => 'Galleria',\n    'bulk'          => [\n        'destroy'   => [\n            'confirm'   => 'Sei sicuro di voler rimuovere definitivamente gli elementi selezionati? Questa azione non può essere annullata.',\n            'success'   => '{0}Nessun file rimosso.|{1}Un file rimosso.|{2,*} :count file rimossi.',\n        ],\n    ],\n    'cta'           => 'Gestisci e riutilizza le immagini per tutta la campagna.',\n    'destroy'       => [\n        'folder'    => 'Cartella :name eliminata.',\n        'success'   => 'File :name eliminato.',\n    ],\n    'errors'        => [\n        'max'           => 'Per favore, seleziona solo fino a :count file alla volta.',\n        'permissions'   => 'Ai ruoli della campagna manca l\\'autorizzazione :permission per poter caricare le immagini nella galleria della campagna.',\n        'storage'       => 'Lo spazio di archiviazione non è sufficiente per caricare le immagini selezionate. Spazio di archiviazione disponibile: :available.',\n    ],\n    'fields'        => [\n        'created_by'            => 'Caricata da',\n        'details'               => 'Dettagli',\n        'ext'                   => 'Estensione',\n        'file_type'             => 'Tipo di File',\n        'folder'                => 'Cartella',\n        'image_mentioned_in'    => '{0} Questa immagine non è menzionata in nessuna entità della campagna.|{1} Menzionata in una voce/post.|[2,*] menzionata in :count voci/post.',\n        'image_used_in'         => '{0} Questa immagine non è usata in nessuna entità della campagna.|{1} Usata come immagine in un\\'entità.|[2,*] Usata come immagine in :count entità.',\n        'link'                  => 'Link',\n        'name'                  => 'Nome',\n        'size'                  => 'Dimensioni',\n        'unused'                => 'Non utilizzata da nessuna parte',\n        'used_in'               => 'Utilizzata in',\n    ],\n    'focus'         => [\n        'locked'    => 'Per impostare il punto focus di un\\'immagine è necessaria una campagna premium.',\n        'removed'   => 'Focus dell\\'immagine rimosso.',\n        'updated'   => 'Focus dell\\'immagine aggiornato.',\n    ],\n    'new_folder'    => [\n        'title' => 'Nuova cartella',\n    ],\n    'no_folder'     => 'Nessuna cartella',\n    'pitch'         => 'Carica le immagini nella galleria della campagna direttamente dall\\'editor di testo.',\n    'placeholders'  => [\n        'search'    => 'Cerca nome dell\\'immagine...',\n    ],\n    'storage'       => [\n        'of'    => 'di',\n        'title' => 'Archiviazione',\n    ],\n    'title'         => 'Galleria della campagna :campaign',\n    'update'        => [\n        'folder'    => 'Cartella modificata.',\n        'success'   => 'Immagine modificata.',\n    ],\n    'uploader'      => [\n        'add'           => 'Aggiungi nuova',\n        'new_folder'    => 'Nuova Cartella',\n        'or'            => 'o',\n        'select_file'   => 'Seleziona un file',\n        'well'          => 'Rilascia qui un file per caricarlo',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/import.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'import'    => 'Carica l\\'esportazione',\n    ],\n    'fields'    => [\n        'updated'   => 'Ultimo aggiornamento',\n    ],\n    'form'      => 'Carica da',\n    'progress'  => [\n        'uploading' => 'Caricamento',\n    ],\n    'status'    => [\n        'failed'    => 'Fallito',\n        'finished'  => 'Finito',\n        'queued'    => 'In coda',\n        'running'   => 'In esecuzione',\n    ],\n    'title'     => 'Importa',\n];\n"
  },
  {
    "path": "lang/it/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Limite raggiunto',\n];\n"
  },
  {
    "path": "lang/it/campaigns/modules.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'customise' => 'Personalizza',\n    ],\n    'fields'    => [\n        'icon'      => 'Icona del Modulo',\n        'plural'    => 'Nome plurale del modulo',\n        'singular'  => 'Nome singolare del modulo',\n    ],\n    'helpers'   => [],\n    'pitch'     => 'Rinomina e cambia l\\'cona associata a questo modulo per l\\'intera campagna.',\n    'rename'    => [\n        'helper'    => 'Cambia il nome e l\\'icona del modulo durante la campagna. Lascia vuoto per utilizzare l\\'icona predefinita di Kanka.',\n        'success'   => 'Modulo personalizzato.',\n        'title'     => 'Personalizza il modulo :module',\n    ],\n    'reset'     => [\n        'success'   => 'I moduli della campagna sono stati ripristinati.',\n        'title'     => 'Ripristina i nomi e le icone personalizzate del modulo',\n        'warning'   => 'Sei sicuro di voler ripristinare i moduli della campagna con i nomi e le icone originali?',\n    ],\n    'states'    => [\n        'disable'   => 'Disattiva',\n        'enable'    => 'Attiva',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'Disattiva plugin',\n            'enable'    => 'Attiva plugin',\n            'update'    => 'Aggiorna plugin',\n        ],\n        'changelog'         => 'Registro',\n        'disable'           => 'Disattiva plugin',\n        'enable'            => 'Attiva plugin',\n        'import'            => 'Importa',\n        'update'            => 'Aggiorna plugin',\n        'update_available'  => 'Aggiornamento disponibile!',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Rimosso :count plugin.|[2,*] Rimossi :count plugin.',\n        'disable'   => '{1} Disattivato :count plugin.|[2,*] Disattivati :count plugin.',\n        'enable'    => '{1} Attivato :count plugin.|[2,*] Attivati :count plugins.',\n        'update'    => '{1} Aggiornato :count plugin.|[2,*] Aggiornati :count plugin.',\n    ],\n    'destroy'       => [\n        'success'   => 'Plugin :plugin rimosso.',\n    ],\n    'disabled'      => [\n        'success'   => 'Plugin :plugin disattivato.',\n    ],\n    'empty_list'    => 'La campagna non ha attualmente alcun plugin. Vai al Mercato per installarne alcuni e torna qui per attivarli.',\n    'enabled'       => [\n        'success'   => 'Plugin :plugin attivato.',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Plugin invalido.',\n    ],\n    'fields'        => [\n        'name'      => 'Nome plugin',\n        'obsolete'  => 'Questo plugin è stato dichiarato obsoleto dal team di Kanka, il che significa che non funziona più come previsto dal suo creatore.',\n        'status'    => 'Stato',\n        'type'      => 'Tipo di plugin',\n    ],\n    'import'        => [\n        'button'                => 'Importa',\n        'created'               => 'Create le seguenti entità:',\n        'helper'                => 'Stai per importare :count entità dal plugin :plugin. Se questo plugin è stato importato in precedenza, le modifiche apportate alle entità importate possono andare perse.',\n        'no_new_entities'       => 'Non ci sono nuove entità da importare.',\n        'option_only_import'    => 'Importa solo le nuove entità, saltando quelle importate in precedenza.',\n        'option_private'        => 'Importa tutte le entità come private.',\n        'success'               => '{1} Importata :count entità dal plugin :plugin.|[2,*] Importate :count entità dal plugin :plugin.',\n        'title'                 => 'Importa :plugin',\n        'updated'               => 'Aggiornate le seguenti entità:',\n    ],\n    'info'          => [\n        'helper'    => 'Quando viene rilasciata una nuova versione di un plugin, puoi aggiornarlo alla versione più recente per la tua campagna.',\n        'title'     => 'Aggiornamenti del plugin :plugin',\n        'updates'   => 'Aggiornamenti',\n    ],\n    'pitch'         => 'Installa e organizza i plugin dal :marketplace',\n    'status'        => [\n        'disabled'  => 'Disattivato',\n        'enabled'   => 'Attivato',\n    ],\n    'templates'     => [\n        'name'  => ':name da :user',\n    ],\n    'title'         => 'Plugin - :name',\n    'types'         => [\n        'attribute' => 'Template dell\\'attributo',\n        'pack'      => 'Pacchetto di Contenuti',\n        'theme'     => 'Tema',\n    ],\n    'update'        => [\n        'success'   => 'Plugin :plugin aggiornato.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [],\n    'title'     => 'Cambia la visibilità della campagna',\n    'update'    => [\n        'private'   => 'La campagna è ora privata e visibile solo ai suoi membri.',\n        'public'    => 'La campagna è ora pubblica. Potrebbe volerci del tempo prima che appaia nella pagina :public-campaigns.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'   => 'Recupera',\n    ],\n    'error'     => 'C\\'è stato un errore nel tentativo di recupero delle entità.',\n    'fields'    => [\n        'deleted'   => 'Rimosso',\n    ],\n    'posts'     => [],\n    'title'     => 'Recupero delle Entità',\n    'toggle'    => [],\n];\n"
  },
  {
    "path": "lang/it/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'status'    => 'Stato :status',\n    ],\n    'public'    => [],\n    'show'      => [\n        'title' => 'Autorizzazioni del :role - :campaign',\n    ],\n    'toggle'    => [\n        'disabled'  => 'Membri del ruolo :role non possono più :action le :entities',\n        'enabled'   => 'Membri del ruolo :role possono ora :action le :entities',\n    ],\n    'warnings'  => [\n        'adding-to-admin'   => 'I membri del ruolo :name hanno accesso a tutto nella campagna e non possono essere rimossi da altri membri del ruolo. Dopo :amount minuti, solo loro possono rimuovere se stessi dal ruolo.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Reset alle impostazioni originarie',\n    ],\n    'call-to-action'    => 'Personalizza ordine, icone e nome degli elementi nella barra laterale della campagna',\n    'helpers'           => [\n        'reordering'    => 'Riordinare la barra laterale trascinando le icone sul lato sinistro',\n    ],\n    'reset'             => [\n        'success'   => 'Reset delle impostazioni della barra laterale della campagna',\n        'title'     => 'Reset delle impostazioni della barra laterale',\n        'warning'   => 'Sei sicuro di voler resettare la barra laterale della tua campagna ai valori di default?',\n    ],\n    'success'           => 'Impostazioni della barra laterale della campagna salvate',\n    'title'             => 'Impostazioni della barra laterale della campagna :campaign',\n];\n"
  },
  {
    "path": "lang/it/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Calendari',\n            'title' => 'Custode del Tempo',\n        ],\n        'murderer'  => [\n            'goal'  => 'Personaggi defunti',\n            'title' => 'Assassino',\n        ],\n    ],\n    'targets'       => [],\n    'titles'        => [\n        'calendars' => 'Livello :level Custode del Tempo',\n        'characters'=> 'Livello :level Maestro dei Nomi',\n        'dead'      => 'Livello :level Assassino',\n        'families'  => 'Livello :level Genealogia',\n        'locations' => 'Livello :level Costruttore',\n        'quests'    => 'Livello :level Maestro degli Intrighi',\n        'races'     => 'Livello :level Allevatore',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'current'   => 'Tema attuale: :theme',\n        'disable'   => 'Disabilita',\n        'enable'    => 'Abilita',\n        'new'       => 'Nuovo stile',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Rimosso :count stile.|[2,*] Rimossi :count stili.',\n        'disable'   => '{1} Disabilitato :count stile.|[2,*] Disabilitati :count stili.',\n        'enable'    => '{1} Abilitato :count stile.|[2,*] Abilitati :count stili.',\n    ],\n    'create'        => [\n        'success'   => 'Nuovo stile creato',\n        'title'     => 'Nuovo stile',\n    ],\n    'delete'        => [\n        'success'   => 'Stile :name eliminato',\n    ],\n    'errors'        => [\n        'max_content'   => 'La regola CSS non può essere più lunga di :amount caratteri.',\n        'max_reached'   => 'Massimo numero di stili (:max) raggiunto.',\n    ],\n    'fields'        => [\n        'content'       => 'Regola CSS',\n        'is_enabled'    => 'Abilitato',\n        'length'        => 'Lunghezza',\n        'modified'      => 'Modificato',\n        'name'          => 'Nome',\n        'order'         => 'Ordine',\n    ],\n    'helpers'       => [\n        'here'          => 'sul nostro blog',\n        'is_enabled'    => 'Attiva questo tema in ogni pagina.',\n        'main'          => 'Puoi creare il tuo stile CSS per la tua campagna potenziata. Questi stili vengono caricati dopo i temi del Mercato che sono stati abilitati per la campagna. Puoi saperne di più :here',\n    ],\n    'pitch'         => 'Crea uno stile CSS personalizzato per modificare l\\'aspetto e l\\'ambientazione della campagna',\n    'placeholders'  => [\n        'name'  => 'Nome dello stile',\n    ],\n    'reorder'       => [\n        'save'      => 'Salva il nuovo ordine',\n        'success'   => '{1} Riordinato :count stile.|[2,*] Riordinati :count stili.',\n        'title'     => 'Riordina stili',\n    ],\n    'theme'         => [\n        'success'   => 'Tema della campagna aggiornato.',\n        'title'     => 'Aggiorna il tema della campagna',\n    ],\n    'title'         => 'Temi della Campagna',\n    'update'        => [\n        'success'   => 'Stile :name aggiornato.',\n        'title'     => 'Aggiorna stile',\n    ],\n];\n"
  },
  {
    "path": "lang/it/campaigns/vanity.php",
    "content": "<?php\n\nreturn [\n    'available' => 'Il nome :vanity è disponibile!',\n    'rule'      => 'Il campo :field deve contenere almeno un carattere alfabetico.',\n    'rule2'     => 'Il campo :field non consente il seguente carattere: /.',\n    'set'       => 'L\\'URL di priorità della campagna è impostato in modo permanente su :vanity.',\n];\n"
  },
  {
    "path": "lang/it/campaigns/webhooks.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'action'    => 'Cambia stato',\n        'add'       => 'Crea webhook',\n        'bulks'     => [\n            'delete_success'    => '{1} :count webhook eliminato.|[2,*] :count webhooks eliminati .',\n            'disable'           => 'Disattiva',\n            'disable_success'   => '{1} :count webhook disattivato.|[2,*] :count webhooks disattivati.',\n            'enable'            => 'Attiva',\n            'enable_success'    => '{1} :count webhook attivato.|[2,*] :count webhooks attivati.',\n        ],\n        'test'      => 'Testo del webhook',\n        'update'    => 'Aggiorna webhook',\n    ],\n    'create'        => [\n        'success'   => 'Webhook creato con successo',\n        'title'     => 'Aggiungi nuovo webhook',\n    ],\n    'destroy'       => [\n        'success'   => 'Webhook eliminato con successo',\n    ],\n    'edit'          => [\n        'success'   => 'Webhook aggiornato con successo',\n        'title'     => 'Aggiorna webhook',\n    ],\n    'fields'        => [\n        'enabled'           => 'Attivato',\n        'event'             => 'Evento',\n        'events'            => [\n            'deleted'   => 'Entità eliminata',\n            'edited'    => 'Entità Modificata',\n            'new'       => 'Nuova entità',\n        ],\n        'message'           => 'Messaggio',\n        'private_entities'  => [\n            'helper'    => 'Non attivare il webhook quando si aggiornano entità private.',\n            'skip'      => 'Ignora entità private',\n        ],\n        'type'              => 'Tipo',\n        'types'             => [\n            'custom'    => 'Messaggio',\n            'payload'   => 'Carico Utile',\n        ],\n        'url'               => 'Url',\n    ],\n    'helper'        => [\n        'active'    => 'Se il webhook è attualmente attivo',\n        'message'   => 'Aggiungi un messaggio personalizzato con supporto',\n        'status'    => 'Cambia lo stato attivo del webhook',\n    ],\n    'placeholders'  => [\n        'message'   => '{chi} ha apportato delle modifiche a {nome}, controlla su {url}.',\n        'url'       => 'Url del webhook di destinazione',\n    ],\n    'test'          => [\n        'success'   => 'Richiesta di test inviata',\n    ],\n    'title'         => 'Webhooks',\n];\n"
  },
  {
    "path": "lang/it/campaigns.php",
    "content": "<?php\n\nreturn [\n    'actions'                           => [],\n    'create'                            => [\n        'success'   => 'Campagna creata.',\n        'title'     => 'Nuova campagna',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Campagna aggiornata.',\n    ],\n    'entity_personality_visibilities'   => [\n        'private'   => 'I nuovi personaggi hanno la loro personalità privata in maniera predefinita.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Le nuove entità sono private',\n    ],\n    'errors'                            => [\n        'access'        => 'Non hai accesso a questa campagna.',\n        'premium'       => 'Questa funzione è disponibile solo per le campagne premium.',\n        'unknown_id'    => 'Campagna Sconosciuta.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'Potenziata da',\n        'entity_count'              => 'Numero di Entità',\n        'entry'                     => 'Descrizione della Campagna',\n        'followers'                 => 'Seguaci',\n        'genre'                     => 'Genere(i)',\n        'header_image'              => 'Immagine di copertina della Pagina Principale',\n        'image'                     => 'Immagine della Barra Laterale',\n        'locale'                    => 'Lingua',\n        'name'                      => 'Nome',\n        'open'                      => 'Aperto a candidature',\n        'premium'                   => 'Premium sbloccato da :name',\n        'public'                    => 'Visibilità della campagna',\n        'public_campaign_filters'   => 'Filtri Campagna Pubblica',\n        'superboosted'              => 'Superpotenziato da',\n        'system'                    => 'Sistema',\n        'theme'                     => 'Tema',\n        'vanity'                    => 'URL personalizzato',\n    ],\n    'following'                         => 'Che Segui',\n    'helpers'                           => [\n        'boosted'                   => 'Alcune caratteristiche sono sbloccate perché questa campagna è stata potenziata. Scopri di più nella pagina :settings.',\n        'css'                       => 'Scrivi i tuoi CSS che saranno caricati all\\'interno della pagina della tua campagna. Considera che qualsiasi abuso di questa funzionalità può portare alla rimozione dei tuoi CSS personalizzati. Le offese ripetute o gravi possono portare alla rimozione della campagna.',\n        'dashboard'                 => 'Per personalizzare la visualizzazione del widget della dashboard della campagna, compila i seguenti campi.',\n        'excerpt'                   => 'Il contenuto di questo campo sarà visualizzato sulla Pagina Princiapel nel widget dell\\'intestazione della campagna, quindi scrivi qualche frase di presentazione del tuo mondo. Se questo campo è vuoto, verranno utilizzati i primi 1000 caratteri della descrizione della campagna.',\n        'header_image'              => 'Immagine visualizzata come sfondo nel widget dell\\'intestazione della campagna.',\n        'hide_history'              => 'Se abilitato, solo i membri con il ruolo :admin della campagna avranno accesso alla cronologia (registro delle modifiche) di un\\'entità.',\n        'hide_members'              => 'Se abilitato, solo i membri del ruolo :admin della campagna avranno accesso alla lista dei membri della campagna.',\n        'locale'                    => 'La lingua in cui la tua campagna è scritta. Questa specificazione è sfruttata per generare contenuti e raggruppare le campagne pubbliche.',\n        'name'                      => 'La tua campagna/mondo può avere qualsiasi nome, a patto che che contenga almeno 4 lettere o numeri.',\n        'no_entry'                  => 'Sembra che la campagna non abbia ancora una descrizione! Risolviamo il problema.',\n        'premium'                   => 'Alcune funzioni sono disponibili perché le funzioni premium di questa campagna sono sbloccate. Per saperne di più, visita la pagina :settings',\n        'public_campaign_filters'   => 'Aiuta altre persone a trovare la campagna tra altre campagne pubbliche fornendo le seguenti informazioni.',\n        'public_no_visibility'      => 'Attenzione! La campagna è pubblica, ma il ruolo pubblico della campagna non può accedere a nulla. :fix.',\n        'system'                    => 'Se la tua campagna è visibile pubblicamente, il sistema sarà visualizzato nella pagina :link.',\n        'systems'                   => 'Per evitare di confondere gli utenti con una sovrabbondanza di opzioni, alcune di esse sono disponibili solamente per specifici sistemi RPG (per esempio il blocco delle statistiche dei mostri di D&D 5e). Aggiungere un sistema supportato qui abiliterà queste funzionalità.',\n        'theme'                     => 'Forza il tema della campagna, sovrascrivendo le preferenze delle utenze.',\n        'view_public'               => 'Per visualizzare la tua campagna come farebbe uno spettatore pubblico, apri :link in una finestra di navigazione in incognito.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Copia il link nei tuoi appunti',\n            'link'  => 'Invita persone',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Genera link',\n            ],\n            'success_link'  => 'Link creato: :link',\n            'title'         => 'Invita qualcuno in :campaign',\n        ],\n        'destroy'               => [\n            'success'   => 'Invito rimosso.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Questo token è già stato utilizzato o la campagna non esiste più.',\n            'invalid_token'     => 'Questo token non è più valido.',\n            'join'              => 'Per favore accedi o registrati con un nuovo account per entrare in :campaign.',\n        ],\n        'fields'                => [\n            'created'   => 'Creato',\n            'role'      => 'Ruolo',\n            'token'     => 'Token',\n            'type'      => 'Tipo',\n            'usage'     => 'Scade dopo',\n        ],\n        'unlimited_validity'    => 'Nessun Limite',\n        'usages'                => [\n            'five'      => '5 usi',\n            'no_limit'  => 'Nessun limite',\n            'once'      => '1 uso',\n            'ten'       => '10 usi',\n        ],\n    ],\n    'leave'                             => [\n        'confirm'           => 'Sei sicuro di voler abbandonare la campagna :name? Non potrai più accedere, a meno che un amministratore della campagna non ti inviti nuovamente.',\n        'confirm-button'    => 'Si, abbandona la campagna.',\n        'error'             => 'Non puoi abbandonare la campagna.',\n        'fix'               => 'Vai ai membri della campagna',\n        'no-admin-left'     => 'Lasciare la campagna non è possibile perché la lascerebbe senza amministratori. Assegna il ruolo di admin prima a un altro membro.',\n        'success'           => 'Hai abbandonato la campagna.',\n        'title'             => 'Lasciare la campagna',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'Rimuovi dalla campagna',\n            'switch'        => 'Passa a',\n            'switch-back'   => 'Torna al mio utente',\n            'switch-entity' => 'Visualizza come',\n        ],\n        'fields'                => [\n            'banned'        => 'L\\'utente è bannato',\n            'joined'        => 'Unito',\n            'last_login'    => 'Ultimo Login',\n            'name'          => 'Utente',\n            'role'          => 'Ruolo',\n            'roles'         => 'Ruoli',\n        ],\n        'helpers'               => [\n            'switch'    => 'Passa a questo utente',\n        ],\n        'impersonating'         => [\n            'message'   => 'Stai visualizzando la campagna come un altro utente. Alcune caratteristiche sono state disabilitate, ma il resto viene mostrato esattamente come lo vedrebbe quell\\'utente.',\n            'title'     => 'Stai impersonando :name',\n        ],\n        'invite'                => [\n            'description'   => 'Puoi invitare i tuoi amici nella tua campagna indicandoci i loro indirizzi e-mail. Una volta che avranno accettato il loro invito verranno aggiunti come membri nel ruolo indicato.',\n            'more'          => 'Puoi aggiungere ulteriori ruoli su :link.',\n            'title'         => 'Invita',\n        ],\n        'removal'               => 'Stai rimuovendo \":membro\" dalla campagna.',\n        'roles'                 => [\n            'member'    => 'Membro',\n            'owner'     => 'Amministratore',\n            'player'    => 'Giocatore',\n            'public'    => 'Pubblico',\n            'viewer'    => 'Spettatore',\n        ],\n        'switch_back_success'   => 'Ora sei tornato al tuo utente originale.',\n    ],\n    'modules'                           => [],\n    'overview'                          => [\n        'entity-count'      => '{0} Nessuna entità|{1} :amount entità|[2,] :amount entità',\n        'follower-count'    => '{0} Nessun seguace|{1} :amount seguace|[2,] :amount seguaci',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Pagina Principale',\n        'setup'     => 'Configurazione',\n        'sharing'   => 'Condivisione',\n        'systems'   => 'Sistemi',\n        'ui'        => 'Interfaccia',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Codice di lingua',\n        'name'      => 'Il nome della tua campagna',\n        'system'    => 'D&D 5e, Pathfinder, Fate, Gurps, DSA',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Nascosto',\n        'private'   => 'Privato',\n        'visible'   => 'Visibile',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'Le campagne sono private per impostazione predefinita e possono essere rese pubbliche. Questo permette a chiunque di accedervi e le rende disponibili nella pagina :public-campaigns se hanno entità visibili al ruolo :public-role. Una campagna pubblica è visibile a tutti, ma affinché il suo contenuto sia visibile, il ruolo :public-role ha bisogno di permessi adeguati.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'Aggiungi un ruolo',\n            'duplicate'     => 'Duplica ruolo',\n            'permissions'   => 'Gestire le autorizzazioni',\n            'rename'        => 'Rinomina ruolo',\n            'save'          => 'Salva ruolo',\n        ],\n        'admin_role'    => 'Ruolo di amministratore',\n        'bulks'         => [\n            'delete'    => '{1} Rimosso :count ruolo.|[2,*] Rimossi :count ruoli.',\n            'edit'      => '{1} Aggiornato :count ruolo.|[2,*] Aggiornati :count ruoli.',\n        ],\n        'create'        => [\n            'success'   => 'Ruolo :name creato.',\n            'title'     => 'Crea un nuovo ruolo',\n        ],\n        'destroy'       => [\n            'success'   => 'Ruolo :name rimosso.',\n        ],\n        'edit'          => [\n            'success'   => 'Ruolo :name aggiornato.',\n            'title'     => 'Modifica il ruolo :name',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Copia autorizzazioni',\n            'name'              => 'Nome',\n            'permissions'       => 'Permessi',\n            'type'              => 'Tipo',\n            'users'             => 'Utenti',\n        ],\n        'helper'        => [\n            '1'                     => 'Una campagna può avere tanti ruoli quanti ne desideri. Il ruolo :admin ti dà automaticamente accesso a tutto nella campagna, ma ogni altro ruolo può avere permessi specifici su diversi tipi di entità (personaggio, luogo, ecc).',\n            '2'                     => 'I permessi delle entità possono essere perfezionati utilizzando la tabella \"Permessi\" di unl\\'entità. Questa tabella appare quando la tua campagna ha più ruoli o membri.',\n            '3'                     => 'Puoi usare un sistema \"opt-out\", dove ai ruoli è dato il permesso di vedere tutte le entità, e usare la spunta \"Privato\" sull\\'entità per nasconderla. Oppure puoi dare ai ruoli pochi permessi, ma impostare ogni entità come visibile.',\n            '4'                     => 'Campagne Potenziate possono avere un numero illimitato di ruoli',\n            'permissions_helper'    => 'Duplica tutte le autorizzazioni del ruolo, sia dei moduli che delle entità',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'Il ruolo pubblico ha dei permessi, ma la campagna è privata. Puoi cambiare questa impostazione sulla tabella Condivisione mentre modifichi la campagna.',\n            'empty_role'            => 'Il ruolo non ha ancora nessun membro all\\'interno.',\n            'role_admin'            => 'Il ruolo :name garantisce automaticamente ai suoi membri l\\'accesso a tutto ciò che è presente nella campagna.',\n            'role_permissions'      => 'Abilita il ruolo :name per le seguenti funzioni su tutte le entità.',\n        ],\n        'members'       => 'Membri',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'Le autorizzazioni della campagna consentono quanto segue.',\n                'entities'  => 'Ecco un breve riepilogo di ciò che i membri di questo ruolo ottengono quando viene impostata un\\'autorizzazione.',\n                'more'      => 'Per maggiori dettagli, guarda il nostro video tutorial su Youtube',\n                'title'     => 'Dettagli di autorizzazione',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'       => 'Crea',\n                'dashboard' => 'Pagina Principale',\n                'delete'    => 'Elimina',\n                'edit'      => 'Modifica',\n                'gallery'   => [\n                    'browse'    => 'Ricerca',\n                    'manage'    => 'Pieno controllo',\n                    'upload'    => 'Aggiorna',\n                ],\n                'manage'    => 'Gestisci',\n                'members'   => 'Membri',\n                'permission'=> 'Autorizzazioni',\n                'read'      => 'Visualizza',\n                'toggle'    => 'Cambia per tutte',\n            ],\n            'helpers'   => [\n                'add'       => 'Consente la creazione di entità di questo tipo. Gli utenti saranno automaticamente autorizzati a visualizzare e modificare le entità che creano, se non hanno l\\'autorizzazione di visualizzazione o modifica.',\n                'dashboard' => 'Consente la modifica della Pagina Principale e dei widget della Pagina Principale.',\n                'delete'    => 'Consente la rimozione di tutte le entità di questo tipo.',\n                'edit'      => 'Consente la modifica di tutte le entità di questo tipo.',\n                'gallery'   => [\n                    'browse'    => 'Consente di visualizzare la galleria e di impostare l\\'immagine di un\\'entità dalla galleria.',\n                    'manage'    => 'Consente tutto ciò che è possibile fare nella galleria come un amministratore, compresa la modifica e l\\'eliminazione delle immagini.',\n                    'upload'    => 'Consente di caricare immagini nella galleria. Se non è abbinato al permesso di cercare immagini, l\\'utente vedrà solo le immagini che ha caricato.',\n                ],\n                'manage'    => 'Consente la modifica della campagna come farebbe l\\'amministratore di una campagna, senza permettere ai membri di cancellare la campagna.',\n                'members'   => 'Consente di invitare nuovi membri alla campagna.',\n                'not_public'=> 'La campagna non è pubblica. Le autorizzazioni per il ruolo pubblico possono essere impostate, ma saranno ignorate. Modifica la campagna per renderla pubblica.',\n                'permission'=> 'Consente di impostare le autorizzazioni sulle entità di questo tipo che possono modificare.',\n                'read'      => 'Consente di visualizzare tutte le entità di questo tipo che non sono private.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Nome del ruolo',\n        ],\n        'title'         => 'Ruoli della campagna :name',\n        'types'         => [\n            'owner'     => 'Amministratore',\n            'public'    => 'Pubblico',\n            'standard'  => 'Predefinito',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Aggiungi membro',\n                'remove'        => ':user dal ruolo :role',\n                'remove_user'   => 'Rimuovi l\\'utente dal ruolo',\n            ],\n            'create'    => [\n                'success'   => ':user aggiunto al ruolo :role.',\n                'title'     => 'Aggiungi un membro al ruolo :name',\n            ],\n            'destroy'   => [\n                'success'   => ':user rimosso dal ruolo :role.',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'Per evitare eventuali abusi, non è possibile rimuovere altri membri dal ruolo di :admin della campagna. In caso di problemi, contattataci su :discord o all\\'indirizzo :email.',\n                'needs_more_roles'  => 'È necessario aggiungersi a un altro ruolo nella campagna prima di potersi rimuovere dal ruolo :admin.',\n            ],\n            'fields'    => [\n                'name'  => 'Nome',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'Abilita',\n        ],\n        'boosted'       => 'Questa funzionalità è in beta e al momento è disponibile solo per :boosted.',\n        'deprecated'    => [\n            'help'  => 'Questo modulo è obsoleto, il che significa che non viene più mantenuto e che i bug non vengono risolti a ogni nuovo aggiornamento. Utilizza questo modulo sapendo che alla fine verrà rimosso da Kanka.',\n            'title' => 'Obsoleto',\n        ],\n        'disabled'      => 'Il modulo :module è disabilitato.',\n        'enabled'       => 'Il modulo :module è abilitato.',\n        'errors'        => [\n            'module-disabled'   => 'Il modulo richiesto è attualmente disabilitato nelle impostazioni della campagna. :fix.',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Crea abilità, siano esse talenti, incantesimi o poteri che possono essere assegnati alle entità.',\n            'assets'            => 'Carica file, imposta link e crea alias per le singole entità.',\n            'bookmarks'         => 'Crea segnalibri alle entità o agli elenchi filtrati che appaiono nella barra laterale.',\n            'calendars'         => 'Un\\'area dove definire i calendari del tuo mondo.',\n            'characters'        => 'Le persone che abitano il tuo mondo.',\n            'conversations'     => 'Conversazioni fittizie tra i personaggi o gli utenti della campagna.',\n            'creatures'         => 'Crea le creature, gli animali e i mostri del tuo mondo con il modulo delle creature.',\n            'dice_rolls'        => 'Per quelli che utilizzano Kanka per una campagna GDR, un modo per gestire i tiri di dado.',\n            'entity_attributes' => 'Tieni traccia degli attributi delle entità della campagna, ad esempio PF o VELOCITÀ.',\n            'events'            => 'Vacanze, feste, disastri, compleanni, guerre.',\n            'families'          => 'Clan o famiglie, le loro relazioni e i loro membri.',\n            'inventories'       => 'Gestisci gli inventari delle tue entità',\n            'items'             => 'Armi, veicoli, reliquie, pozioni.',\n            'journals'          => 'Osservazioni scritte dai personaggi, o preparazione per le sessioni del dungeon master.',\n            'locations'         => 'Pianeti, piani, continenti, fiumi, nazioni, insediamenti, templi, taverne.',\n            'maps'              => 'Carica mappe con livelli e indicatori che portano ad altre entità nella campagna.',\n            'notes'             => 'Tradizioni, religioni, storia, magia, culture.',\n            'organisations'     => 'Culti, religioni, fazioni, gilde.',\n            'quests'            => 'Per tener traccia di varie missioni con personaggi e luoghi.',\n            'races'             => 'Traccia le origini, le etnie e i tratti di specie dei personaggi del mondo con il modulo della stirpe.',\n            'tags'              => 'Ogni entità può avere diversi tag. I tag possono appartenere ad altri tag e le entità possono essere filtrate per tag.',\n            'timelines'         => 'Narra la storia del tuo mondo con le linee temporali',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'Le campagne pubbliche sono visibili nella pagina :public-campaigns. La compilazione di questi campi aiuta la gente a trovare la campagna.',\n        'language'  => 'La lingua in cui sono scritti i contenuti della campagna.',\n        'system'    => 'Se giochi a un GDR, il sistema utilizzato per giocare nella campagna.',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Modifica Campagna',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Obbiettivi',\n            'customisation'     => 'Personalizzazione',\n            'data'              => 'Dati',\n            'default-images'    => 'Anteprime predefinite',\n            'export'            => 'Esporta',\n            'import'            => 'Importa',\n            'management'        => 'Gestione',\n            'members'           => 'Membri',\n            'plugins'           => 'Plugin',\n            'recovery'          => 'Recupero',\n            'roles'             => 'Ruoli',\n            'sidebar'           => 'Configurazione della barra laterale',\n            'styles'            => 'Tema',\n            'webhooks'          => 'Webhooks',\n        ],\n        'title'     => 'Panoramica - :name',\n    ],\n    'themes'                            => [\n        'none'  => 'Nessuno (predefinito alle impostazioni utente)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Visibile solo agli amministratori della campagna',\n            'visible'   => 'Visibile ai membri',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Cronologia dell\\'entità',\n            'member_list'       => 'Lista dei membri della campagna',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Controlla chi può vedere le modifiche recenti apportate alle singole entità della campagna.',\n            'member-list'       => 'Controlla chi può vedere chi partecipa alla campagna.',\n            'theme'             => 'Visualizza la campagna nel tema dell\\'utente o usa uno dei temi seguenti per tutti gli utenti.',\n        ],\n        'members'           => [\n            'hidden'    => 'Visibile solo agli amministratori della campagna',\n            'visible'   => 'Visibile ai membri',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Campagna Privata',\n        'public'    => 'Campagna Pubblica',\n    ],\n    'warning'                           => [],\n];\n"
  },
  {
    "path": "lang/it/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_appearance'    => 'Aggiungi un dettaglio dell\\'aspetto fisico',\n        'add_personality'   => 'Aggiungi un tratto della personalità',\n    ],\n    'conversations' => [],\n    'create'        => [\n        'title' => 'Nuovo Personaggio',\n    ],\n    'destroy'       => [],\n    'dice_rolls'    => [],\n    'edit'          => [],\n    'families'      => [\n        'reorder'   => [\n            'success'   => 'Famiglie del personaggio aggiornate con successo.',\n        ],\n    ],\n    'fields'        => [\n        'age'                       => 'Età',\n        'is_appearance_pinned'      => 'Aspetto fissato',\n        'is_dead'                   => 'Morto',\n        'is_personality_pinned'     => 'Personalità fissata',\n        'is_personality_visible'    => 'Personalità visibile',\n        'life'                      => 'Vita',\n        'physical'                  => 'Caratteristiche fisiche',\n        'pronouns'                  => 'Pronomi',\n        'sex'                       => 'Genere',\n        'title'                     => 'Titolo',\n        'traits'                    => 'Tratti',\n    ],\n    'helpers'       => [\n        'age'   => 'Puoi collegare questa entità con un calendario della tua campagna per calcolare automaticamente l\\'età. :more',\n    ],\n    'hints'         => [\n        'is_appearance_pinned'      => 'Se selezionati, i tratti fisici del personaggio appariranno sotto la voce principale della pagina.',\n        'is_dead'                   => 'Questo personaggio è morto',\n        'is_personality_visible'    => 'I tratti della personalità sono visibili a tutti, non solo ai membri del ruolo di :admin.',\n        'personality_not_visible'   => 'Solo gli amministratori possono vedere i tratti caratteriali di questo personaggio.',\n        'personality_visible'       => 'Tutti possono vedere i tratti carattieriali di questo personaggio.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'labels'        => [\n        'appearance'    => [\n            'entry' => 'Descrizione dell\\'aspetto',\n            'name'  => 'Nome dell\\'aspetto',\n        ],\n        'personality'   => [\n            'entry' => 'Descrizione dei tratti della personalità',\n            'name'  => 'Nome dei tratti della personalità',\n        ],\n    ],\n    'maps'          => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => ':character aggiunto a :organisation.',\n            'title'     => 'Nuova organizzazione per :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Organizzazione del personaggio rimossa.',\n        ],\n        'edit'      => [\n            'success'   => 'Organizzazione del personaggio aggiornata.',\n            'title'     => 'Organizzazione aggiornata per :name',\n        ],\n        'fields'    => [\n            'role'  => 'Ruolo',\n        ],\n    ],\n    'placeholders'  => [\n        'age'               => 'Età',\n        'appearance_entry'  => 'Descrizione',\n        'appearance_name'   => 'Capelli, Occhi, Carnagione, Altezza',\n        'name'              => 'Nome del personaggio',\n        'personality_entry' => 'Dettagli',\n        'personality_name'  => 'Obbiettivi, Vezzi, Paure, Legami',\n        'physical'          => 'Caratteristiche Fisiche',\n        'pronouns'          => 'Lui, Lei, Loro',\n        'sex'               => 'Genere',\n        'title'             => 'Titolo',\n        'traits'            => 'Tratti',\n        'type'              => 'PNG, Personaggio Giocante, Divinità',\n    ],\n    'quests'        => [\n        'helpers'   => [\n            'quest_giver'   => 'Missioni per cui il personaggio è il committente.',\n            'quest_member'  => 'Missioni di cui il personaggio fa parte.',\n        ],\n    ],\n    'races'         => [\n        'reorder'   => [\n            'success'   => 'Stirpi del personaggio aggiornate con successo',\n        ],\n    ],\n    'sections'      => [\n        'appearance'    => 'Aspetto',\n        'personality'   => 'Personalità',\n    ],\n    'show'          => [],\n    'warnings'      => [\n        'personality_hidden'    => 'Non puoi modificare i tratti della personalità di questo personaggio.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Acqua',\n    'black'         => 'Nero',\n    'blue'          => 'Blu',\n    'brown'         => 'Marrone',\n    'green'         => 'Verde',\n    'grey'          => 'Grigio',\n    'light-blue'    => 'Azzurro',\n    'maroon'        => 'Bordeaux',\n    'navy'          => 'Navy',\n    'none'          => 'Nessuno',\n    'orange'        => 'Arancione',\n    'pink'          => 'Rosa',\n    'purple'        => 'Viola',\n    'red'           => 'Rosso',\n    'teal'          => 'Verde Acqua',\n    'white'         => 'Bianco',\n    'yellow'        => 'Giallo',\n];\n"
  },
  {
    "path": "lang/it/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'          => 'campagna potenziata',\n    'premium-campaign'          => 'campagna premium',\n    'premium-campaign-count'    => '{0} Nessuna Campagna Premium |{1} 1 Campagna Premium |[2,*] :count Campagne Premium',\n    'premium-campaigns'         => 'campagne premium',\n    'premium-feature'           => 'Funzione premium',\n    'superboosted-campaign'     => 'campagna superpotenziata',\n];\n"
  },
  {
    "path": "lang/it/confirm/editing.php",
    "content": "<?php\n\nreturn [\n    'back'          => 'Torna indietro',\n    'description'   => 'Sembra che qualcun altro stia modificando questa pagina! Vuoi tornare indietro o ignorare questo avviso, con il rischio di perdere i dati?',\n    'ignore'        => 'Modifica comunque',\n    'members'       => 'Membri che stanno modificando questa pagina:',\n    'title'         => 'Attenzione',\n    'user'          => ':user da :since',\n];\n"
  },
  {
    "path": "lang/it/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuova conversazione',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_closed'     => 'Chiusa',\n        'messages'      => 'Messaggi',\n        'participants'  => 'Partecipanti',\n    ],\n    'hints'         => [\n        'empty'         => 'Non ci sono partecipanti in questa conversazione.',\n        'participants'  => 'Per favore aggiungi partecipanti alla tua conversazione premendo l\\'icona :icon in altro a destra.',\n    ],\n    'index'         => [],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Messaggio rimosso.',\n        ],\n        'is_updated'    => 'Aggiornata',\n        'load_previous' => 'Carica i messaggi precedenti',\n        'placeholders'  => [\n            'message'   => 'Il tuo messaggio',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Partecipante :entity aggiunto alla conversazione.',\n        ],\n        'destroy'   => [\n            'success'   => 'Partecipante :entity rimosso dalla conversazione.',\n        ],\n        'modal'     => 'Partecipanti',\n        'title'     => 'Partecipanti di :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome della conversazione',\n        'type'  => 'In Gioco, Preparazione, Trama',\n    ],\n    'show'          => [\n        'is_closed' => 'Conversazione chiusa.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Partecipanti',\n    ],\n    'targets'       => [\n        'characters'    => 'Personaggi',\n        'members'       => 'Membri',\n    ],\n];\n"
  },
  {
    "path": "lang/it/cookieconsent.php",
    "content": "<?php\n\nreturn [\n    'allow'     => 'Accetta i cookies',\n    'dismiss'   => 'Rifiuta i cookies',\n    'header'    => 'Consenso ai cookie',\n    'link'      => 'Ulteriori informazioni',\n    'message'   => 'Kanka utilizza i cookie per garantire la migliore esperienza sul nostro sito web.',\n    'policy'    => 'Informativa sui cookies',\n    'reject'    => 'Rifiuta',\n];\n"
  },
  {
    "path": "lang/it/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuova Creatura',\n    ],\n    'fields'        => [\n        'is_extinct'    => 'Estinto',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_dead'       => 'Questa creatura è morta.',\n        'is_extinct'    => 'Questa creatura è estinta.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Erbivoro, Acquatico, Mitologico',\n    ],\n];\n"
  },
  {
    "path": "lang/it/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Azioni',\n        'apply'             => 'Applica',\n        'back'              => 'Indietro',\n        'change'            => 'Cambia',\n        'copy'              => 'Copia',\n        'copy_mention'      => 'Copia [ ] menzione',\n        'copy_to_campaign'  => 'Copia nella campagna',\n        'disable'           => 'Disattiva',\n        'enable'            => 'Attiva',\n        'explore_view'      => 'Visualizzazione Annidata',\n        'export'            => 'Esporta (PDF)',\n        'find_out_more'     => 'Per saperne di più',\n        'go_to'             => 'Vai a :name',\n        'help'              => 'Aiuto',\n        'json-export'       => 'Esporta (JSON)',\n        'markdown-export'   => 'Esporta (Markdown)',\n        'move'              => 'Muovi',\n        'new'               => 'Nuovo',\n        'new_child'         => 'Nuovo figlio',\n        'new_post'          => 'Nuovo post',\n        'next'              => 'Prossimo',\n        'open'              => 'Apri',\n        'print'             => 'Stampa',\n        'reorder'           => 'Riordina',\n        'reset'             => 'Ripristina',\n        'transform'         => 'Trasforma',\n    ],\n    'add'               => 'Aggiungi',\n    'alerts'            => [\n        'copy_attribute'    => 'La menzione dell\\'attributo è stata copiata nei tuoi appunti.',\n        'copy_invite'       => 'Il link di invito della campagna è stato copiato negli appunti.',\n        'copy_mention'      => 'La menzione avanzata dell\\'entità è stata copiata negli appunti.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Modifica e tagga',\n            'permissions'   => 'Cambia permessi',\n        ],\n        'age'           => [\n            'helper'    => 'Puoi utilizzare i simboli + e - prima del numero per aggiornare l\\'età di quel valore.',\n        ],\n        'buttons'       => [\n            'label' => 'Per i selezionati',\n        ],\n        'edit'          => [\n            'locations' => 'Azione per i luoghi',\n            'tagging'   => 'Azione per le etichette',\n            'tags'      => [\n                'add'       => 'Aggiungi',\n                'remove'    => 'Rimuovi',\n            ],\n            'title'     => 'Modifica molteplici entità',\n        ],\n        'errors'        => [\n            'admin'     => 'Solo gli amministratori della campagna possono cambiare lo stato privato delle entità.',\n            'general'   => 'Si è verificato un errore nell\\'elaborazione dell\\'azione. Riprova e contattaci se il problema persiste. Messaggio di errore: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Sovrascrivi',\n            ],\n            'helpers'   => [\n                'override'  => 'Se selezionato, le autorizzazioni delle entità selezionate verranno sovrascritte con queste. Se non è selezionato, le autorizzazioni selezionate verranno aggiunte a quelle esistenti.',\n            ],\n            'title'     => 'Cambia autorizzazioni per diverse entità',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Applica un modello a entità multiple',\n    ],\n    'cancel'            => 'Cancella',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Copia le entità a un\\'altra campagna',\n        'panel'         => 'Copia',\n        'title'         => 'Copia \\':name\\' in un\\'altra campagna',\n    ],\n    'create'            => 'Crea',\n    'datagrid'          => [\n        'empty' => 'Non c\\'è ancora nulla da mostrare.',\n    ],\n    'delete_modal'      => [\n        'callout'       => 'Hey!',\n        'confirm'       => 'Conferma la cancellazione',\n        'permanent'     => 'Questa azione è permanente.',\n        'recoverable'   => 'Le entità possono essere recuperate per un massimo di :days con una :boosted-campaign.',\n        'title'         => 'Conferma della rimozione',\n    ],\n    'destroy_many'      => [],\n    'edit'              => 'Modifica',\n    'errors'            => [\n        'boosted_campaigns'     => 'Questa funzione è disponibile solo per :boosted.',\n        'unavailable_feature'   => 'Funzione non disponibile',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'calendar_date'     => 'Data del Calendario',\n        'child'             => 'Figlio',\n        'closed'            => 'Chiuso',\n        'colour'            => 'Colore',\n        'copy_abilities'    => 'Copia Abilità',\n        'copy_inventory'    => 'Copia Inventario',\n        'copy_links'        => 'Copia Link',\n        'copy_permissions'  => 'Copia Autorizzazioni (questo sovrascriverà i valori impostati nella scheda Autorizzazioni)',\n        'copy_posts'        => 'Copia Post (questo include anche le autorizzazioni dei post)',\n        'copy_reminders'    => 'Copia Eventi',\n        'creator'           => 'Creatore',\n        'date_range'        => 'Intervallo di date',\n        'excerpt'           => 'Estratto',\n        'has_entity_files'  => 'Ha file di entità',\n        'has_image'         => 'Ha un\\'immagine',\n        'has_posts'         => 'Ha post',\n        'header_image'      => 'Intestazione dell\\'Immagine',\n        'image'             => 'Immagine',\n        'is_closed'         => 'La conversazione verrà chiusa e non accetterà più nuovi messaggi.',\n        'is_private'        => 'Privato',\n        'is_private_v3'     => 'Mostra solo ai membri del ruolo :admin-role. Questo sovrascrive qualsiasi altra autorizzazione.',\n        'is_star'           => 'Fissato',\n        'locations'         => ':first in :second',\n        'name'              => 'Nome',\n        'parent'            => 'Genitore',\n        'position'          => 'Posizione',\n        'replace_mentions'  => 'Sostituire le menzioni degli attributi nella voce con quelle della nuova entità.',\n        'template'          => 'Modello',\n        'tooltip'           => 'Tooltip',\n        'type'              => 'Tipo',\n        'visibility'        => 'Visibilità',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Hai raggiunto il numero massimo (:max) di file per questa entità.',\n            'max_size'  => 'La campagna ha raggiunto la capacità massima di archiviazione dei file.',\n            'no_files'  => 'Nessun File.',\n        ],\n        'hints'     => [\n            'limit'         => 'Ciascuna entità può avere un massimo di :max file caricati.',\n            'limitations'   => 'Formati supportati: :formats. Dimensioni massime di file: :size.',\n        ],\n    ],\n    'filter'            => 'Filtro',\n    'filters'           => [\n        'all'               => 'Filtra a tutti i discendenti',\n        'clear'             => 'Azzera i Filtri',\n        'copy_helper'       => 'Utilizza i filtri copiati negli appunti come valori per i filtri dei widget della Pagina Principale e dei collegamenti rapidi.',\n        'copy_to_clipboard' => 'Copia i filtri negli appunti',\n        'direct'            => 'Filtra ai discendenti diretti',\n        'filtered'          => 'Mostra :count di :total :entity.',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Mostra tutti i discendenti (:count)',\n                'filtered'  => 'Mostra discendenti diretti (:count)',\n            ],\n        ],\n        'mobile'            => [\n            'clear' => 'Azzera',\n            'copy'  => 'Appunti',\n        ],\n        'options'           => [\n            'children'  => 'Corrisponde a questo o ai suoi discendenti',\n            'exclude'   => 'Non corrisponde',\n            'hide'      => 'Nascondi',\n            'include'   => 'Corrisponde',\n            'none'      => 'Vuoto',\n            'show'      => 'Mostra',\n        ],\n        'show'              => 'Mostra Filtri',\n        'sorting'           => [\n            'asc'       => ':field Crescente',\n            'desc'      => ':field Decrescente',\n            'helper'    => 'Controlla in che ordine appaiono i risultati.',\n        ],\n        'title'             => 'Filtri Avanzati',\n    ],\n    'fix-this-issue'    => 'Risolvi questo problema',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Aggiungi una data del calendario',\n        ],\n        'copy_options'  => 'Copia Opzioni',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Copia i seguenti elementi correlati alla fonte nella nuova entità.',\n        'linking'       => 'Collega ad altre entità',\n    ],\n    'hidden'            => 'Nascosto',\n    'hints'             => [\n        'calendar_date'         => 'La data del calendario consente di filtrare facilmente gli elenchi e di mantenere un promemoria nel calendario selezionato.',\n        'image_dimension'       => 'Dimensioni raccomandate: :dimension pixels.',\n        'image_limitations'     => 'Formati supportati: :formats. Dimensioni Massime del file: :size',\n        'image_recommendation'  => 'Dimensioni raccomandate :width per :height px.',\n        'is_star'               => 'Elementi fissati appariranno nella panoramica della pagina dell\\'entità.',\n        'tooltip'               => 'Sostituisci il tooltip generato automaticamente con il seguente contenuto. Il codice HTML verrà eliminato, ma si potranno comunque citare altre entità utilizzando le menzioni avanzate.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Creata da :name :date',\n        'created_date_clean'    => 'Creata :date',\n        'unknown'               => 'Sconosciuto',\n        'updated_clean'         => 'Ultima modifica da parte di :name :date',\n        'updated_date_clean'    => 'Ultima modifica :date',\n        'view'                  => 'Visualizza il registro dell\\'entità',\n    ],\n    'image'             => [\n        'error' => 'Non siamo riusciti a ottenere l\\'immagine richiesta. Potrebbe essere che il sito web non ci permetta di scaricare l\\'immagine (come in genere Squarespace e DeviantArt), oppure che il link non sia più valido. Assicurati inoltre che l\\'immagine non sia più grande di :size.',\n    ],\n    'is_private'        => 'Questa entità è privata e visibile solamente ai membri del ruolo \"Amministratore\".',\n    'keyboard-shortcut' => 'Scorciatoia di tastiera :code',\n    'navigation'        => [\n        'cancel'            => 'cancella',\n        'or_cancel'         => 'o :cancel',\n        'skip_to_content'   => 'Salta navigazione',\n    ],\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Consenti',\n                'deny'      => 'Rifiuta',\n                'ignore'    => 'Salta',\n                'remove'    => 'Rimuovi',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Consenti',\n                'deny'      => 'Rifiuta',\n                'inherit'   => 'Eredita',\n            ],\n            'delete'        => 'Cancella',\n            'edit'          => 'Modifica',\n            'toggle'        => 'Attiva',\n        ],\n        'fields'            => [\n            'member'    => 'Membro',\n            'role'      => 'Ruolo',\n        ],\n        'helpers'           => [\n            'setup' => 'Utilizza questa interfaccia per regolare con precisione il modo in cui i ruoli e gli utenti possono interagire con questa entità. :allow consente all\\'utente o al ruolo di eseguire questa azione. :deny nega l\\'azione. :inherit utilizza il ruolo dell\\'utente o il permesso del ruolo principale. Un utente impostato su :allow è in grado di eseguire l\\'azione, anche se il suo ruolo è impostato su :deny.',\n        ],\n        'success'           => 'Autorizzazioni salvate.',\n        'title'             => 'Autorizzazioni',\n        'too_many_members'  => 'Questa campagna ha troppi membri (>:number) per poterli mostrare tutti in questa interfaccia. Ti preghiamo di usare il tasto Permessi sulla pagine dell\\'entità per poter verificare i permessi nel dettaglio.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Seleziona un calendario',\n        'entry'         => 'Usa @ seguito da tre lettere per menzionare altre entità di altre campagne.',\n        'fallback'      => 'Seleziona un :module',\n        'gallery_image' => 'Seleziona un\\'immagine dalla galleria della campagna',\n        'image_url'     => 'Carica invece un\\'immagine da un URL',\n        'journal'       => 'Seleziona un diario',\n        'location'      => 'Seleziona un luogo',\n        'multiple'      => 'Scegli uno o più',\n        'name'          => 'Nome dell\\'entità',\n        'organisation'  => 'Seleziona un\\'organizzazione',\n        'parent'        => 'Seleziona un genitore',\n        'tag'           => 'Seleziona un tag',\n        'timeline'      => 'Seleziona una Linea Temporale',\n        'user'          => 'Seleziona un utente',\n    ],\n    'relations'         => [],\n    'remove'            => 'Rimuovi',\n    'reorder'           => [\n        'empty' => 'Nessun elemento da riordinare',\n    ],\n    'save'              => 'Salva',\n    'save_and_close'    => 'Salva e Chiudi',\n    'save_and_copy'     => 'Salva e Copia',\n    'save_and_new'      => 'Salva e Crea Nuovo',\n    'save_and_update'   => 'Salva e Modifica',\n    'save_and_view'     => 'Salva e Visualizza',\n    'search'            => 'Cerca',\n    'select'            => 'Seleziona',\n    'tabs'              => [\n        'abilities'     => 'Abilità',\n        'inventory'     => 'Inventario',\n        'mentions'      => 'Menzioni',\n        'overview'      => 'Panoramica',\n        'permissions'   => 'Autorizzazioni',\n        'premium'       => 'Premium',\n        'profile'       => 'Profilo',\n        'reminders'     => 'Eventi',\n    ],\n    'titles'            => [\n        'editing'   => 'Modifica :name',\n        'new'       => 'Nuovo :module',\n    ],\n    'tooltips'          => [],\n    'update'            => 'Modifica',\n    'users'             => [\n        'unknown'   => 'Sconosciuto',\n    ],\n    'view'              => 'Visualizza',\n    'visibilities'      => [\n        'admin'         => 'Amministratori',\n        'admin-self'    => 'Te Stesso & Amministratori',\n        'all'           => 'Tutto',\n        'members'       => 'Membri della campagna',\n        'self'          => 'Te Stesso',\n    ],\n];\n"
  },
  {
    "path": "lang/it/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'follow'    => 'Segui',\n        'join'      => 'Unisciti',\n        'unfollow'  => 'Smetti di seguire',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Modifica nome & autorizzazioni',\n            'new'   => 'Nuova Pagina Principale',\n        ],\n        'create'        => [\n            'success'   => 'Nuova Pagina Principale della campagna :name creata.',\n            'title'     => 'Nuova Pagina Principale della Campagna',\n        ],\n        'custom'        => [\n            'text'  => 'Stai modificando la Pagina Principale :name della campagna.',\n        ],\n        'default'       => [\n            'text'  => 'Stai modificando la Pagina Principale predefinita della campagna.',\n            'title' => 'Pagina Principale Predefinita',\n        ],\n        'delete'        => [\n            'success'   => 'Pagina Principale :name rimossa.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Copia widgets',\n            'name'          => 'Nome Pagina Principale',\n            'visibility'    => 'Visibilità',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Duplica i widgets dalla Pagina Principale :name a questa nuova.',\n        ],\n        'pitch'         => 'Crea multiple Pagine Principali con autorizzazioni personalizzate per ogni ruolo all\\'interno della campagna.',\n        'placeholders'  => [\n            'name'  => 'Nome della Pagina Principale',\n        ],\n        'update'        => [\n            'success'   => 'Pagina Principale della campagna :name aggiornata.',\n            'title'     => 'Aggiorna la Pagina Principale della campagna :name.',\n        ],\n        'visibility'    => [\n            'default'   => 'Predefinito',\n            'none'      => 'Nessuna',\n            'visible'   => 'Visibile',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Seguendo una campagna, questa apparirà nel selettore delle campagne sotto le vostre campagne.',\n        'join'      => 'Questa campagna è aperta a nuovi membri. Clicca per unirti.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Aggiungi un widget',\n            'back_to_dashboard' => 'Torna alla Pagina Principale',\n            'edit'              => 'Modifica un widget',\n            'new'               => 'Nuovo widget :type',\n        ],\n        'reorder'   => [\n            'success'   => 'Widget riordinati.',\n        ],\n        'title'     => 'Impostazioni della Pagina Principale della Campagna',\n        'tutorial'  => [\n            'blog'  => 'nostro tutorial',\n            'text'  => 'Hai bisogno di aiuto per configurare la Pagina Principale della tua campagna? Leggi :blog per trovare aiuto e ispirazione.',\n        ],\n    ],\n    'title'         => 'Pagina Principale',\n    'widgets'       => [\n        'advanced_options_boosted'  => 'Abilita altre opzioni, come mostrare i pin con una campagna :boosted_campaign.',\n        'calendar'                  => [\n            'actions'           => [\n                'next'      => 'Cambia la data al giorno successivo',\n                'previous'  => 'Cambia la data al giorno precedente',\n            ],\n            'previous_events'   => 'Precedente',\n            'upcoming_events'   => 'Prossimi',\n        ],\n        'campaign'                  => [\n            'helper'    => 'Questo widget mostra l\\'intestazione della campagna. Il widget è sempre visibile nella Pagina Principale predefinita.',\n        ],\n        'create'                    => [\n            'success'   => 'Widget aggiunto alla Pagina Principale.',\n        ],\n        'delete'                    => [\n            'success'   => 'Widget rimosso dalla Pagina Principale.',\n        ],\n        'fields'                    => [\n            'class'             => 'classe CSS',\n            'dashboard'         => 'Pagina Principale',\n            'name'              => 'Nome personalizzato di widget',\n            'optional-entity'   => 'Link all\\'entità',\n            'order'             => 'Ordinamento',\n            'size'              => 'Dimensione',\n            'width'             => 'Larghezza',\n        ],\n        'helpers'                   => [\n            'class'     => 'Definisci una classe personalizzata CSS aggiunto al widget.',\n            'filters'   => 'Clicca per imparare di più sulle opzioni di filtro disponibili.',\n        ],\n        'orders'                    => [\n            'name_asc'  => 'Nome crescente',\n            'name_desc' => 'Nome decrescente',\n            'oldest'    => 'Non modificato da molto tempo',\n            'recent'    => 'Modificato recentemente',\n        ],\n        'preview'                   => [\n            'displays'  => [\n                'expand'    => 'Voce espandibile',\n                'full'      => 'Voce completa',\n            ],\n            'fields'    => [\n                'display'   => 'Visualizza',\n            ],\n        ],\n        'random'                    => [\n            'helpers'   => [\n                'name'  => 'Puoi fare riferimento al nome dell\\'entità casuale con {name}',\n            ],\n            'type'      => [\n                'all'   => 'Tutti',\n            ],\n        ],\n        'recent'                    => [\n            'advanced_filter'   => 'Filtro avanzato',\n            'advanced_filters'  => [\n                'mentionless'   => 'Senza menzioni (entità che non menziona altre entità)',\n                'unmentioned'   => 'Non menzionata (entità che non è menzionata da nessun altra)',\n            ],\n            'entity-header'     => 'Usa l\\'intestazione dell\\'entità come immagine',\n            'filters'           => 'Filtri',\n            'help'              => 'Visualizza solamente l\\'ultima entità aggiornata, ma visualizza un\\'anteprima completa per la stessa.',\n            'helpers'           => [\n                'entity-header'     => 'Se l\\'entità ha un\\'intestazione dell\\'entità (caratteristica della campagna potenziata), imposta questo widget in modo che utilizzi quell\\'immagine invece dell\\'immagine dell\\'entità.',\n                'show_attributes'   => 'Mostra gli attributi appuntati dell\\'entità sotto la voce.',\n                'show_members'      => 'Se l\\'entità è una famiglia o un\\'organizzazione, indica i suoi membri sotto la voce.',\n                'show_relations'    => 'Mostra le relazioni appuntate dell\\'entità sotto la voce.',\n            ],\n            'show_attributes'   => 'Mostra gli attributi appuntati',\n            'show_members'      => 'Mostra membri',\n            'show_relations'    => 'Mostra relazioni fissate',\n            'singular'          => 'Anteprima',\n            'tags'              => 'Filtra la lista di entità con etichette specifiche.',\n            'title'             => 'Lista di entità',\n        ],\n        'tabs'                      => [\n            'advanced'  => 'Avanzato',\n            'setup'     => 'Impostazione',\n        ],\n        'unmentioned'               => [\n            'title' => 'Entità non menzionate',\n        ],\n        'update'                    => [\n            'success'   => 'Widget modificato.',\n        ],\n        'widths'                    => [\n            '0' => 'Automatica',\n            '12'=> 'Intera (100%)',\n            '3' => 'Minuscola (25%)',\n            '4' => 'Piccola (33%)',\n            '6' => 'Media (50%)',\n            '8' => 'Larga (66%)',\n            '9' => 'Grande (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/dashboards/widgets/welcome.php",
    "content": "<?php\n\nreturn [\n    'endings'   => [],\n    'focus'     => [\n        'text'  => 'Ecco, sono io!',\n        'title' => 'Hey',\n    ],\n    'intros'    => [\n        '1' => 'Saluta il tuo nuovo laboratorio di worldbuilding, :user! Abbiamo impostato la tua prima campagna e incluso due esempi di :characters e :locations. Sono visibili anche qui, nella Pagina Principale della campagna.',\n        '2' => 'Per iniziare, fai clic sul grande pulsante :new-entity (o premi :letter sulla tua tastiera) e fai clic su :characters per creare il tuo primo personaggio. È davvero così facile! Puoi trovare tutti i tuoi personaggi, luoghi e altre :entities nella barra laterale a sinistra della pagina.',\n        '3' => 'Ecco i nostri 5 migliori trucchi per utilizzare Kanka',\n    ],\n    'title'     => 'Benvenuto a :kanka! 🎉',\n    'tricks'    => [\n        '1'         => 'Quando scrivi descrizioni, non riscrivere i nomi degli elementi della campagna. Digita invece :code e tre lettere per :mention altre entità della campagna. Queste menzioni si aggiorneranno automaticamente quando cambierai i loro nomi.',\n        '2'         => 'Per modificare il nome, il tema o l\\'immagine della campagna, fai clic su :world nella barra laterale, seguito dal pulsante :edit.',\n        '3'         => 'Scrivi informazioni segrete sulle entità come :posts invece che nel campo di testo principale.',\n        '4'         => 'Invita i tuoi amici alla campagna cliccando su :world e :members. Da qui, è possibile creare link di invito.',\n        '5'         => 'Puoi rimuovere questo messaggio di benvenuto e mostrare altre informazioni in questa pagina (chiamata Pagina Principale). Scorri verso il basso e fai clic sul pulsante :button.',\n        'mention'   => 'menzione',\n    ],\n];\n"
  },
  {
    "path": "lang/it/datagrids.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'back_to'   => 'Ritorna a :name',\n    ],\n    'modes'     => [\n        'flatten'   => 'Passa a un layout appiattito',\n        'grid'      => 'Passa alla visualizzazione a griglia',\n        'nested'    => 'Passa a un layout annidato',\n        'table'     => 'Passa alla visualizzazione a tabella',\n    ],\n    'tooltips'  => [\n        'nested'    => 'Questa entità non ha figli. Clicca sull\\'immagine per visualizzarli.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'giorno',\n    'days'          => 'giorni',\n    'elapsed_ago'   => ':duration fa',\n    'hour'          => 'ora',\n    'hours'         => 'ore',\n    'just_now'      => 'proprio adesso',\n    'minute'        => 'minuto',\n    'minutes'       => 'minuti',\n    'month'         => 'mese',\n    'months'        => 'mesi',\n    'second'        => 'secondo',\n    'seconds'       => 'secondi',\n    'week'          => 'settimana',\n    'weeks'         => 'settimane',\n    'year'          => 'anno',\n    'years'         => 'anni',\n];\n"
  },
  {
    "path": "lang/it/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Titolo della pagina',\n];\n"
  },
  {
    "path": "lang/it/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Risultato del tiro di dado',\n    ],\n];\n"
  },
  {
    "path": "lang/it/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuovo Tiro di Dado',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Tiro di dado rimosso.',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Tirato il',\n        'parameters'    => 'Parametri',\n        'results'       => 'Risultati',\n        'rolls'         => 'Tiri',\n    ],\n    'hints'         => [\n        'parameters'    => 'Quali sono le opzioni per i miei dadi?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Risultati',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Nome del Tiro di Dado',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Tira',\n        ],\n        'error'     => 'Tiro di dado fallito. Impossibile analizzare i parametri.',\n        'fields'    => [\n            'creator'   => 'Creatore',\n            'date'      => 'Data',\n            'result'    => 'Risultato',\n        ],\n        'hint'      => 'Tutti i tiri effettuati per questo template di tiro di dado.',\n        'success'   => 'Dado tirato.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Risultati',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/emails/purge/first.php",
    "content": "<?php\n\nreturn [\n    'assure'            => 'Se utilizzi regolarmente il tuo account, non preoccuparti: stiamo eliminando solo gli account e le campagne che non vengono utilizzati attivamente.',\n    'help'              => 'Serve aiuto nell\\'usare Kanka? Entra nel nostro :discord o contattaci via :email',\n    'intro_account'     => 'Ti informiamo che il tuo account sarà cancellato tra :amount giorni, poiché non lo hai utilizzato negli ultimi :duration months.',\n    'intro_campaigns'   => 'Ti informiamo che il tuo account e le seguenti campagne saranno cancellate tra :amount giorni, poiché non sono stati utilizzati negli ultimi :duration mesi.',\n    'keep'              => 'Se desideri mantenere attivo il proprio account, effettua il login entro i prossimi :amount giorni.',\n    'title'             => 'Il tuo account Kanka sarà cancellato tra :amount giorni.',\n    'warning'           => [\n        'account'   => 'Una volta effettuata questa operazione, tutti i dati associati al tuo account, sotto la voce :email, saranno eliminati in modo permanente.',\n        'campaigns' => 'Una volta effettuata questa operazione, tutti i dati associati al tuo account, sotto la voce email :email, nonché le seguenti campagne saranno definitivamente cancellati.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/emails/purge/second.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'Questo è un ultimo promemoria per ricordarti che l\\'account Kanka all\\'indirizzo :email sarà cancellato tra :amount giorni, poiché non lo hai utilizzato negli ultimi :amount mesi.',\n    'title' => 'Ultimo avvertimento: Il tuo account Kanka sarà cancellato tra :amount giorni',\n];\n"
  },
  {
    "path": "lang/it/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'aggiorna i dettagli della carta',\n    'primary'   => 'Questo è un avviso automatico che il tuo :brand **** :last sta per scadere.',\n    'title'     => 'Carta in scadenza per l\\'abbonamento',\n    'valid'     => 'Se desideri mantenere l\\'abbonamento, prego :action.',\n];\n"
  },
  {
    "path": "lang/it/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'Se non desideri rinnovare l\\'abbonamento, accedi per favore al tuo account Kanka e :link.',\n    'closing'   => 'Cordiali Saluti,',\n    'dear'      => 'Caro :name',\n    'link'      => 'cancella il tuo abbonamento',\n    'notice'    => 'Avviso importante sui rinnovi:',\n    'primary'   => 'Questo è un promemoria automatico del fatto che addebiteremo automaticamente il tuo :brand **** :last alla :date, per il tuo abbonamento Kanka.',\n    'title'     => 'Pagamento annuale per il tuo abbonamento Kanka',\n    'valid'     => 'Assicurati che la carta di credito sia valida alla data del pagamento.',\n];\n"
  },
  {
    "path": "lang/it/emails/subscriptions/validation.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Convalida dell\\'e-mail dell\\'account Kanka.',\n];\n"
  },
  {
    "path": "lang/it/emails/validation.php",
    "content": "<?php\n\nreturn [\n    'error'     => 'Convalida fallita, riprova per favore.',\n    'modal'     => 'Per abbonarsi è necessario un indirizzo e-mail convalidato. Controlla per favore la posta in arrivo per trovare un link di conferma dell\\'e-mail prima di continuare il processo di abbonamento.',\n    'success'   => 'Email convalidata con successo.',\n];\n"
  },
  {
    "path": "lang/it/emails/welcome/2024.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Buon worldbuilding e grazie per aver partecipato a questo viaggio con noi,',\n    'header'    => 'Benvenuti nel posto migliore per creare la tua campagna, :name!',\n    'lead_1'    => 'Kanka nasce dall\\'idea di appassionati giocatori di ruolo che volevano un approccio semplice e collaborativo alla costruzione del mondo, senza rinunciare a funzioni di qualità.',\n    'lead_2'    => 'Kanka è ciò che ne è uscito fuori. Siamo qui per aiutarti a organizzare la tua campagna e lasciarti concentrare sulle parti migliori della realizzazione del tuo mondo.',\n    'ps'        => 'PS: Se vuoi metterti in contatto con noi, puoi trovarci su :discord, o in :email.',\n    'what_1'    => 'Per aiutarti a iniziare, abbiamo creato la tua prima campagna e abbiamo incluso due personaggi e due luoghi di esempio. Puoi :start quando vuoi.',\n    'what_2'    => 'Consigliamo anche di consultare queste risorse:',\n    'what_3'    => 'Il nostro :kb se hai domande di base sulle funzioni di Kanka e sul tuo account.',\n    'what_4'    => 'La :doc tratta tutto in modo più approfondito.',\n    'what_5'    => 'E infine :campaigns mostra ciò che altri hanno fatto con Kanka.',\n    'what_new'  => 'Inizia',\n    'what_now'  => 'E adesso?',\n    'why'       => 'Hai ricevuto questa e-mail perché ti sei iscritto al nostro sito web.',\n];\n"
  },
  {
    "path": "lang/it/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    '2023'              => [\n        'basics'    => [\n            'text_1'    => 'Con uno strumento così esteso come Kanka, può essere difficile sapere da dove cominciare o cosa fare. Il nostro :kb copre le domande più elementari che potresti avere, mentre per un ulteriore aiuto puoi consultare il nostro :doc.',\n            'title'     => 'Le basi',\n        ],\n        'chat'      => [\n            'text_1'    => 'Ci piace ascoltare i nostri utenti! Siamo molto attivi su :discord, dove troverai molti dei nostri dedicati utenti, un team di arruolamento e i fondatori di Kanka, che potranno rispondere a tutte le tue domande. Puoi anche scriverci all\\'indirizzo :email.',\n            'title'     => 'Vuoi chattare?',\n        ],\n        'intro'     => [\n            'header'    => 'Benvenuto nella migliore comunità di worldbuilding, :name!',\n            'link'      => 'Vai al tuo mondo!',\n            'text_1'    => 'Saluta il tuo nuovo laboratorio di worldbuilding, :name! La comunità è nel nostro DNA e siamo lieti che ti unisca a noi. Kanka nasce dall\\'idea di appassionati giocatori di ruolo che credono che bisogna approcciarsi alla costruzione di un mondo in modo semplificato e comunitario, senza complicare alcuna funzione.',\n            'text_2'    => 'Abbiamo impostato la tua prima campagna e incluso due esempi di personaggi e luoghi per aiutarti a iniziare.',\n        ],\n        'preview'   => 'Entra a far parte della migliore comunità di worldbuilding, :name!',\n    ],\n    'header'            => 'Benvenuto su Kanka, :name!',\n    'header_sub'        => 'Congratulazioni, hai mosso i primi passi per la creazione del tuo mondo su :kanka!',\n    'pricing'           => 'prezzi',\n    'section_1'         => 'E ora dove si va?',\n    'section_11'        => 'Crea il tuo mondo,',\n    'section_2'         => 'La risorsa più importante è :discord, dove troverai tanti nostri utenti volenterosi, un team di accoglienza, così come il fondatore di Kanka, che potrà rispondere a qualsiasi domanda che potresti voler fare.',\n    'section_4'         => 'Il nostro canale :youtube contiene video che trattano le basi di Kanka. Sebbene non tutti gli argomenti siano ancora stati trattati, noi aggiungiamo regolarmente nuovi video.',\n    'section_4_v2'      => 'La nostra :knowledge-base copre le domande più elementari che potresti avere, mentre per un aiuto più completo puoi consultare la nostra :documentation !',\n    'section_6'         => 'Contattaci',\n    'section_7'         => 'Se non hai trovato una risposta alle tue domande, o desideri semplicemente contattarci, puoi trovarci su :facebook, o puoi inviarci una email a :email. Siamo un piccolo team di due amici, ma ci assicuriamo di rispondere a ciascuna email che riceviamo, quindi non esitare!',\n    'section_8'         => 'Un\\'ultima cosa',\n    'section_9_v2'      => 'Abbiamo fatto in modo che tutte le funzioni principali di Kanka siano gratuite. Tuttavia, se vuoi sostenerci in questo progetto e ottenere l\\'accesso a funzionalità aggiuntive e alla nostra gratitudine, puoi diventare abbonato. Per saperne di più, consulta la pagina :princing.',\n    'social_account'    => 'Se hai problemi ad accedere al vostro account, ti ricordiamo che stai utilizzando un login :provider. È possibile modificarlo nelle impostazioni dell\\'account.',\n    'title'             => 'Iniziare con Kanka',\n];\n"
  },
  {
    "path": "lang/it/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Aggiungi abilità',\n        'reset' => 'Ripristina gli usi dell\\'abilità',\n        'sync'  => 'Aggiungi alle stirpi',\n    ],\n    'charges'   => [\n        'left'  => ':amount rimaste',\n    ],\n    'create'    => [\n        'success'           => 'Abilità :ability aggiunta a :entity.',\n        'success_multiple'  => 'Abilità :abilities aggiunte a :entity',\n        'title'             => 'Aggiungi abilità a :name',\n    ],\n    'fields'    => [\n        'note'      => 'Nota',\n        'position'  => 'Posizione',\n    ],\n    'groups'    => [\n        'unorganised'   => 'Disorganizzato',\n    ],\n    'helpers'   => [\n        'note'      => 'Puoi citare un\\'entità usando la menzione avanzata (ex :code) e gli attributi dell\\'entità (ex :attr) in questo campo.',\n        'recharge'  => 'Azzeramento di tutte le cariche delle abilità utilizzate.',\n        'sync'      => 'Importa le abilità definite nelle stirpi del personaggio.',\n    ],\n    'import'    => [\n        'errors'    => [\n            'no_race'       => 'Il personaggio non ha una stirpe.',\n            'not_character' => 'Questa entità non è un personaggio.',\n        ],\n        'success'   => '{1} :count abilità importata.|[2,*] :count abilità importate.',\n    ],\n    'recharge'  => [\n        'success'   => 'Tutte le cariche sono state azzerate.',\n    ],\n    'reorder'   => [\n        'parentless'    => 'Nessun Genitore',\n        'success'       => 'Abiità riordinate con successo',\n    ],\n    'show'      => [\n        'helper'    => 'Collega le abilità a questa entità. È sempre possibile modificare la visibilità o rimuovere un\\'abilità. Le abilità che appartengono alla stessa abilità genitore verranno visualizzate come caselle di filtro.',\n        'reorder'   => 'Riordina',\n        'title'     => 'Abilità di :name',\n    ],\n    'types'     => [\n        'unorganised'   => 'Le abilità sono raggruppate in base al loro campo genitore, e si trovano qui.',\n    ],\n    'update'    => [\n        'success'   => 'Abilità dell\\'entità :ability aggiornata.',\n        'title'     => 'Abilità dell\\'entità per :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'templates' => [\n        'set'       => 'Imposta come modello',\n        'success'   => [\n            'set'   => 'Entità :name impostata come modello.',\n            'unset' => 'L\\'entità :name non è più impostata come modello.',\n        ],\n        'toggle'    => 'Stato del modello modificato.',\n        'unset'     => 'Rimuovi come modello',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Aggiungi un pseudonimo',\n    ],\n    'create'        => [\n        'success'   => 'Pseudonimo :name aggiunto a :entity',\n        'title'     => 'Aggiungi pseudonimo a :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Pseudonimo :name rimosso.',\n    ],\n    'fields'        => [\n        'name'  => 'Nome',\n    ],\n    'helpers'       => [\n        'primary'   => 'Impostando uno o più pseudonimi sull\\'entità, la si potrà trovare nella ricerca globale (barra superiore) e attraverso le menzioni.',\n    ],\n    'pitch'         => 'Crea dei pseudonimi per questa entità per trovarla facilmente attraverso la ricerca e le menzioni.',\n    'placeholders'  => [\n        'name'  => 'Nuovo Pseudonimo',\n    ],\n    'update'        => [\n        'success'   => 'Pseudonimo :name aggiornato per :entity.',\n        'title'     => 'Aggiorna pseudonimo per :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'alias' => 'Pseudonimo',\n        'file'  => 'File',\n        'link'  => 'Link',\n    ],\n    'copy_alias'    => [\n        'success'   => 'Menzione dello pseudonimo copiato negli appunti.',\n    ],\n    'show'          => [\n        'title' => 'Assets :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'load'          => 'Carica',\n        'manage'        => 'Gestisci',\n        'more'          => 'Altro',\n        'remove_all'    => 'Elimina tutto',\n        'save_and_edit' => 'Applica e Modifica',\n        'save_and_story'=> 'Applica e Visualizza',\n        'show_hidden'   => 'Mostra attributi nascosti',\n        'toggle_privacy'=> 'Privato/Pubblico',\n    ],\n    'errors'        => [\n        'loop'                  => 'Il calcolo di questo attributo è un ciclo infinito!',\n        'no_attribute_selected' => 'Seleziona prima uno o più attributi.',\n        'too_many_v2'           => 'Campi massimi raggiunti (:count/:max). Elimina alcuni attributi prima di poterne aggiungere altri.',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Modelli della Comunità',\n        'is_private'            => 'Attributi Privati',\n        'is_star'               => 'Fissato',\n        'preferences'           => 'Preferenze',\n        'value'                 => 'Valore',\n    ],\n    'filters'       => [\n        'name'  => 'Nome dell\\'attributo',\n        'value' => 'Valore dell\\'attributo',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Sei sicuro di voler cancellare tutti gli attributi di questa entità?',\n        'is_private'    => 'Consenti solo ai membri del ruolo :admin-role di vedere gli attributi di questa entità.',\n        'setup'         => 'Puoi rappresentare elementi come Punti Ferita o l\\'Intelligenza di un\\'entità con degli attributi. È possibile aggiungere manualmente gli attributi facendo clic sul pulsante :manage, oppure applicare automaticamente quelli di un modello di attributo.',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Attributi per :entity aggiornati.',\n        'title'     => 'Attributi per :name',\n    ],\n    'labels'        => [\n        'checkbox'  => 'Nome del Checkbox',\n        'name'      => 'Nome dell\\'attributo',\n        'section'   => 'Nome della sezione',\n        'value'     => 'Valore dell\\'attributo',\n    ],\n    'live'          => [\n        'success'   => 'Attributo :attribute aggiornato.',\n        'title'     => 'Aggiornando :attribute',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Numero di Conquiste, Grado di Sfida, Iniziativa, Popolazione',\n        'block'     => 'Blocca nome',\n        'checkbox'  => 'Nome del Checkbox',\n        'icon'      => [\n            'class' => 'Classe: fas fa-users di FontAwesome o RPG Awesome',\n            'name'  => 'Nome dell\\'icona',\n        ],\n        'number'    => 'Valore numerico',\n        'random'    => [\n            'name'  => 'Nome dell\\'attributo',\n            'value' => '1-100 o lista di valori separati da una virgola',\n        ],\n        'section'   => 'Nome della sezione',\n        'value'     => 'Valore dell\\'attributo',\n    ],\n    'ranges'        => [\n        'text'  => 'Opzioni disponibili :options',\n    ],\n    'sections'      => [\n        'unorganised'   => 'Disorganizzato',\n    ],\n    'show'          => [\n        'hidden'    => 'Attributi Nascosti',\n        'title'     => 'Attributi di :name',\n    ],\n    'template'      => [\n        'load'      => [\n            'success'   => 'Modello caricato',\n            'title'     => 'Carica dal Modello',\n        ],\n        'success'   => 'Il Modello di Attributi :name è stato applicato a :entity',\n        'title'     => 'Applica un Modello degli Attributi per :name',\n    ],\n    'title'         => 'Attributi',\n    'toasts'        => [\n        'bulk_deleted'  => 'Attributi eliminati',\n        'bulk_privacy'  => 'Privacy degli attributi attivata',\n        'lock'          => 'Attributo bloccato',\n        'pin'           => 'Attributo fissato',\n        'unlock'        => 'Attributo sbloccato',\n        'unpin'         => 'Attributo non fissato',\n    ],\n    'types'         => [\n        'attribute' => 'Attributo',\n        'block'     => 'Blocca',\n        'checkbox'  => 'Checkbox',\n        'icon'      => 'Icona',\n        'number'    => 'Numero',\n        'random'    => 'Casuale',\n        'section'   => 'Sezione',\n        'text'      => 'Testo Multilinea',\n    ],\n    'update'        => [\n        'success'   => 'Attributi per :entity aggiornati',\n    ],\n    'visibility'    => [\n        'entry'     => 'Gli attributi sono visualizzati nel menu dell\\'entità.',\n        'private'   => 'Attributo visibile solo ai membri del ruolo \"Amministratore\".',\n        'public'    => 'Attributo visibile a tutti i membri.',\n        'tab'       => 'L\\'attributo viene visualizzato solo nella scheda Attributi.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/events.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'type'  => 'Tipo di Evento',\n    ],\n    'helpers'   => [\n        'characters'    => 'Impostando il tipo come data di nascita o di morte di questo personaggio, si calcolerà automaticamente la sua età. :more.',\n        'founding'      => 'Impostando il tipo come :type si calcolerà automaticamente l\\'età dell\\'entità dalla fondazione.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Aggiungi evento',\n        ],\n        'title'     => 'Evento :name',\n    ],\n    'types'     => [\n        'birth'     => 'Nascita',\n        'birthday'  => 'Compleanno',\n        'death'     => 'Morte',\n        'founded'   => 'Fondazione',\n        'primary'   => 'Primario',\n    ],\n    'years-ago' => '{1} :count anno fa|[2,*] :count anni fa',\n];\n"
  },
  {
    "path": "lang/it/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [],\n    'create'            => [\n        'success_plural'    => '{1} File :name aggiunto.|[2,*] :count file aggiunti.',\n        'title'             => 'Nuovo file per :entity',\n    ],\n    'destroy'           => [\n        'success'   => 'File :name rimosso.',\n    ],\n    'fields'            => [\n        'file'  => 'File',\n        'name'  => 'Nome del file',\n    ],\n    'max'               => [\n        'title' => 'Limite raggiunto',\n    ],\n    'update'            => [\n        'success'   => 'File :name aggiornato.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'               => [\n        'change_focus'  => 'Cambia punto focus',\n        'replace_image' => 'Sostituisci immagine',\n        'save-replace'  => 'Sostituisci immagine',\n        'save_focus'    => 'Salva punto focus',\n        'view'          => 'Visualizza immagine',\n    ],\n    'call-to-action'        => 'Fai clic sull\\'immagine dell\\'entità per impostarne il punto focus, invece di utilizzare il sistema di riconoscimento automatico.',\n    'focus'                 => [\n        'breadcrumb'    => 'Focus dell\\'immagine',\n        'helper'        => 'Clicca sull\\'immagine per impostarne il punto focus. Clicca sul punto focus per rimuoverlo.',\n        'panel_title'   => 'Focus dell\\'Immagine',\n        'success'       => 'Focus dell\\'immagine aggiornato',\n        'title'         => 'Focus dell\\'immagine per :name',\n        'unboosted'     => 'L\\'impostazione di un punto focus dell\\'immagine è riservata a :boosted-campaigns.',\n        'warning'       => 'Il punto focus delle immagini della :gallery è condivisa da tutte le entità che usano la stessa immagine.',\n    ],\n    'gallery_permissions'   => [\n        'admin'     => 'La galleria di immagini è visibile solo ai membri della campagna con il ruolo :admin.',\n        'adminself' => 'La galleria di immagini è visibile solo a :creator e ai membri della campagna con il ruolo :admin.',\n        'member'    => 'La galleria di immagini è visibile solo ai membri della campagna.',\n        'self'      => 'La galleria di immagini è visibile solo da te.',\n    ],\n    'replace'               => [\n        'breadcrumb'    => 'Sostituzione dell\\'immagine',\n        'panel_title'   => 'Sostituzione dell\\'Immagine dell\\'Entità',\n        'success'       => 'Immagine sostituita.',\n        'title'         => 'Sostituzione dell\\'immagine dell\\'entità :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'copy_inventory'    => 'Copia inventario',\n    ],\n    'copy'              => [],\n    'create'            => [\n        'success'       => 'L\\'oggetto :item è stato aggiunto ad :entity.',\n        'success_bulk'  => '{0} Nessun oggetto aggiunto a :entity.|{1} Aggiunto :count oggetto a :entity.|[2,*] Aggiunti :count oggetti a :entity.',\n        'title'         => 'Aggiungi un oggetto a :name',\n    ],\n    'default_position'  => 'Disorganizzato',\n    'destroy'           => [\n        'success'           => 'L\\'oggetto :item è stato rimosso da :entity.',\n        'success_position'  => 'Oggetti in :position rimossi da :entity.',\n    ],\n    'fields'            => [\n        'amount'                => 'Quantità',\n        'copy_entity_entry_v2'  => 'Utilizza la voce dell\\'oggetto',\n        'description'           => 'Descrizione',\n        'is_equipped'           => 'Equipaggiato',\n        'name'                  => 'Nome',\n        'position'              => 'Posizione',\n        'qty'                   => 'Quantità',\n    ],\n    'helpers'           => [\n        'amount'                => 'Numero degli oggetti',\n        'copy_entity_entry_v2'  => 'Visualizza la voce dell\\'oggetto invece della descrizione personalizzata.',\n        'description'           => 'Aggiungi una descrizione personalizzata all\\'oggetto',\n        'is_equipped'           => 'Contrassegna questo oggetto come equipaggiato.',\n        'name'                  => 'Assegna il nome all\\'oggetto. Il nome è richiesto se non è stato selezionato alcun oggetto',\n    ],\n    'placeholders'      => [\n        'amount'        => 'Qualsiasi quantità',\n        'description'   => 'Utilizzato, Danneggiato, In Sintonia',\n        'name'          => 'Richiesto se nessun oggetto è stato selezionato',\n        'position'      => 'Equipaggiato, Zaino, Magazzino, Banca',\n    ],\n    'show'              => [\n        'helper'    => 'Le entità possono avere oggetti collegati ad esse per creare degli inventari.',\n        'title'     => 'Inventario dell\\'Entità :name',\n        'unsorted'  => 'Non classificato',\n    ],\n    'tooltips'          => [\n        'equipped'  => 'Questo oggetto è equipaggiato',\n    ],\n    'update'            => [\n        'success'   => 'L\\'oggetto :item è stato aggiornato per :entity.',\n        'title'     => 'Aggiorna un oggetto per :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Aggiungi un link',\n    ],\n    'call-to-action'    => 'Aggiungendo collegamenti a risorse esterne a questa entità, come ad esempio a DnDBeyond, questi verranno visualizzati direttamente nella panoramica dell\\'entità.',\n    'create'            => [\n        'success'   => 'Link :name aggiunto a :entity.',\n        'title'     => 'Aggiunto un link a :name',\n    ],\n    'destroy'           => [\n        'success'   => 'Link :name rimosso.',\n    ],\n    'fields'            => [\n        'icon'      => 'Icona',\n        'name'      => 'Nome',\n        'position'  => 'Posizione',\n        'url'       => 'URL',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'Sono sicuro',\n            'trust'     => 'Non chiedermelo di nuovo',\n        ],\n        'description'   => 'Questo link esterno ti porterà a :link. Sei sicuro di volerci andare?',\n        'title'         => 'Stai lasciando Kanka',\n    ],\n    'helpers'           => [\n        'icon'      => 'Puoi personalizzare l\\'icona visualizzata per il collegamento. Puoi utilizzare una delle icone di :fontawesome, :rpgawesome o lasciare questo campo vuoto per il valore predefinito. Per saperne di più, consulta i nostri :docs.',\n        'parent'    => 'Visualizza questo collegamento rapido dopo un elemento della barra laterale, anziché nella sezione dei collegamenti rapidi della barra laterale.',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'Le campagne premium possono aggiungere link a siti esterni.',\n        'title'     => 'Links per :name',\n    ],\n    'update'            => [\n        'success'   => 'Link :name aggiornato per :entity',\n        'title'     => 'Modifica link per :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'        => 'Creazione',\n        'create_post'   => 'Creato post \":post\"',\n        'delete'        => 'Cancellazione',\n        'delete_post'   => 'Post eliminato',\n        'reorder_post'  => 'Post riordinato',\n        'restore'       => 'Recupero',\n        'update'        => 'Aggiornamento',\n        'update_post'   => 'Post aggiornato \":post\"',\n        'view'          => 'Visualizza cambiamenti',\n    ],\n    'call-to-action'    => 'I log completi delle modifiche fino a :amount giorni sono disponibili per le campagne superpotenziate.',\n    'fields'            => [\n        'action'    => 'Azione',\n        'date'      => 'Data',\n    ],\n    'impersonated'      => 'Impersonato da :name',\n    'show'              => [\n        'title' => 'Logs dell\\'Entità :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Questa entità è appuntata sulle seguenti mappe.',\n    'title'     => 'Punti per la Mappa :name',\n];\n"
  },
  {
    "path": "lang/it/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Elemento',\n        'type'      => 'Tipo',\n    ],\n    'helper'            => 'Di seguito la lista delle entità che menzionano questa entità in uno dei loro campi.',\n    'mentioned_in_v2'   => 'Questa entità viene menzionata in :count entità, post o campagne. :more.',\n    'see_more'          => 'Vedi dettagli',\n    'show'              => [\n        'title' => 'Menzioni dell\\'Entità :name',\n    ],\n    'title'             => 'Entità menzionata',\n];\n"
  },
  {
    "path": "lang/it/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'  => 'Copia',\n    ],\n    'errors'        => [\n        'permission'        => 'Non puoi creare entità di questo tipo nella campagna di destinazione.',\n        'permission_update' => 'Non puoi muovere questa entità.',\n        'same_campaign'     => 'Devi selezionare un\\'altra campagna per muoverci l\\'entità.',\n        'unknown_campaign'  => 'Campagna sconosciuta.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Campagna di destinazione',\n        'copy'          => 'Crea una copia',\n        'select_one'    => 'Seleziona una campagna',\n    ],\n    'helpers'       => [\n        'copy'  => 'Crea una copia dell\\'entità nella campagna di destinazione.',\n    ],\n    'panel'         => [\n        'description'           => 'Muovi questa entità a un\\'altra campagna, o crea una copia di questa in un\\'altra campagna.',\n        'description_bulk_copy' => 'Seleziona una campagna in cui vuoi copiare le entità selezionate.',\n        'title'                 => 'Muovi o copia un\\'entità a un\\'altra campagna',\n    ],\n    'success'       => 'Entità :name mossa alla campagna :campaign.',\n    'success_copy'  => 'Entità :name copiata alla campagna :campaign.',\n    'title'         => 'Muovi :name',\n];\n"
  },
  {
    "path": "lang/it/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Aggiungi un nuovo Post',\n        'add_role'  => 'Aggiungi un ruolo',\n        'add_user'  => 'Aggiungi un utente',\n    ],\n    'collapsed'     => [\n        'closed'    => 'Il post è ridotto alla sola intestazione',\n        'open'      => 'Il post è esteso',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Copia la menzione avanzata',\n        'copy_with_name'    => 'Copia la menzione avanzata con il nome del post',\n        'success'           => 'La menzione avanzata al post è stata copiata negli appunti.',\n    ],\n    'create'        => [\n        'success'   => 'Post \\':name\\' aggiunto a :entity',\n    ],\n    'destroy'       => [\n        'success'   => 'Post :name per :entity rimosso.',\n    ],\n    'edit'          => [\n        'success'   => 'Post :name per :entity modificato.',\n    ],\n    'fields'        => [\n        'creator'   => 'Creatore',\n        'display'   => 'Visualizza',\n        'name'      => 'Nome',\n        'position'  => 'Posizione',\n    ],\n    'footer'        => [\n        'created'   => 'Creato da :user il :date',\n        'updated'   => 'Aggiornato da :user il :date',\n    ],\n    'hint'          => 'Le informazioni che non si adattano abbastanza ai campi standard di un\\'entità o che devono essere mantenute private possono essere aggiunte come Post.',\n    'hints'         => [\n        'reorder'   => 'Puoi riordinare i post di un\\'entità cliccando sull\\'icona :icon nell\\'intestazione dell\\'entità.',\n    ],\n    'index'         => [],\n    'move'          => [\n        'copy'          => 'Crea una copia sull\\'entità di destinazione',\n        'copy_success'  => 'Post :name copiato in :entity con successo.',\n        'copy_title'    => 'Conserva una copia',\n        'description'   => 'Seleziona un\\'entità in cui desideri spostare o creare una copia di questo post.',\n        'entity'        => 'Entità di destinazione',\n        'move_success'  => 'Post :name mosso in :entity con successo.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome del post, della nota o del commento.',\n    ],\n    'show'          => [\n        'advanced'  => 'Autorizzazioni Avanzate',\n        'title'     => 'Post dell\\'entità :name per :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'Ridotto',\n        'expanded'  => 'Espanso',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/it/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'Questa entità è impostata come privata. È ancora possibile definire autorizzazioni personalizzate, ma finché l\\'entità è privata, queste saranno ignorate e solo i membri del ruolo :admin della campagna potranno vedere l\\'entità.',\n        'warning'   => 'Attenzione',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'Nessun ruolo o utente fuori dagli amministratori della campagna hanno accesso a questa entità.',\n        'manage'            => 'Gestisci i Permessi',\n        'screen-reader'     => 'Apri impostazioni della privacy',\n        'success'           => [\n            'private'   => ':entity è attualmente nascosto.',\n            'public'    => ':entity è attualmente visibile.',\n        ],\n        'title'             => 'Panoramica dei Permessi',\n        'viewable-by'       => 'Visibile da',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Link',\n    'title' => 'Pin',\n];\n"
  },
  {
    "path": "lang/it/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Modifica profilo',\n    ],\n    'history'   => 'Cronologia delle Modifiche',\n    'show'      => [\n        'tab_name'  => 'Profilo',\n        'title'     => 'Profilo :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Questa entità è parte delle seguenti missioni.',\n    'title'     => 'Missioni :name',\n];\n"
  },
  {
    "path": "lang/it/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Strumento di Esplorazione di Legami',\n        'mode-table'    => 'Tabella dei legami e degli elementi correlati',\n    ],\n    'bulk'              => [\n        'delete'    => '{0} Rimossi :count legami|{1} Rimosso :count legame.|[2,*] Rimossi :count legami.',\n        'fields'    => [\n            'delete_mirrored'   => 'Elimina i speculari',\n            'unmirror'          => 'Scollega i speculari',\n            'update_mirrored'   => 'Aggiorna i speculari',\n        ],\n        'helpers'   => [\n            'delete_mirrored'   => 'Elimina anche i legami speculari.',\n            'unmirror'          => 'Scollega i legami speculari.',\n            'update_mirrored'   => 'Aggiorna i legami speculari.',\n        ],\n        'success'   => [\n            'editing'           => '{0} :count legami sono stati aggiornati|{1} :count legame è stato aggiornato.|[2,*] :count legami sono stati aggiornati.',\n            'editing_partial'   => '{0} :count/:total legami sono stati aggiornati|{1} :count/:total legame è stato aggiornato.|[2,*] :count/:total legami sono stati aggiornati.',\n        ],\n    ],\n    'call-to-action'    => 'Esplora visivamente i legami di questa entità e il modo in cui è collegata al resto della campagna.',\n    'connections'       => [\n        'map_point'         => 'Punto mappa',\n        'mention'           => 'Menzione',\n        'quest_element'     => 'Elemento di Missione',\n        'timeline_element'  => 'Elemento di Linea Temporale',\n    ],\n    'create'            => [\n        'new_title'     => 'Nuovo legame',\n        'success_bulk'  => '{1} Aggiunto :count legame a :entity.|[2,*] Aggiunti :count legami a :entity.',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'Questo legame è speculare nell\\'entità bersaglio. Selezionare questa opzione rimuoverà anche il legame speculare.',\n        'option'    => 'Elimina il legame speculare',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'Eliminerai il legame speculare in modo permanente.',\n        'success'   => 'Legame :target rimosso per :name.',\n    ],\n    'fields'            => [\n        'attitude'  => 'Attitudine',\n        'is_pinned' => 'Fissato',\n        'owner'     => 'Fonte',\n        'target'    => 'Entità Bersaglio',\n        'two_way'   => 'Crea anche il legame speculare',\n        'unmirror'  => 'Togli l\\'impostazione speculare di questo legame.',\n    ],\n    'filters'           => [\n        'connection'    => 'Relazione del legame',\n        'name'          => 'Bersaglio del legame',\n    ],\n    'helper'            => 'Imposta i legami fra due entità con atteggiamento e visibilità. I legami possono anche essere fissati nel menù dell\\'entità.',\n    'helpers'           => [\n        'no_relations'  => 'Questa entità non ha attualmente nessun legame ad altre entità nella campagna.',\n    ],\n    'hints'             => [\n        'attitude'  => 'Questo campo opzionale può essere utilizzato per definire l\\'ordine predefinito di visualizzazione dei legami in ordine decrescente.',\n        'two_way'   => 'Se scegli di creare un legame speculare, il medesimo legame sarà creato per l\\'entità bersaglio: se ne modificherai uno, tuttavia, l\\'altro non verrà aggiornato.',\n    ],\n    'index'             => [\n        'title' => 'Legami',\n    ],\n    'options'           => [\n        'mentions'          => 'Predefinito + correlato + menzioni',\n        'only_relations'    => 'Solo legami diretti',\n        'related'           => 'Predefinito + correlato',\n        'relations'         => 'Predefinito',\n        'show'              => 'Mostra',\n    ],\n    'panels'            => [\n        'related'   => 'Correlato',\n    ],\n    'placeholders'      => [\n        'attitude'  => '-100 fino a 100, in cui 100 rappresenta un attitudine molto positiva',\n    ],\n    'show'              => [\n        'title' => 'Legami per :name',\n    ],\n    'types'             => [\n        'family_member'         => 'Membro di Famiglia',\n        'organisation_member'   => 'Membro di Organizzazione',\n    ],\n    'update'            => [\n        'success'   => 'Legame :target aggiornato per :name.',\n        'title'     => 'Aggiorna i legami per :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'      => 'Comprimi tutto',\n        'expand_all'        => 'Espandi tutto',\n        'load_more'         => 'Carica altro',\n        'login_for_more'    => 'Accedi per visualizzare più post',\n    ],\n    'reorder'   => [\n        'icon_tooltip'  => 'Riordina posts',\n        'panel_title'   => 'Riordina posts',\n        'save'          => 'Salva il nuovo ordine',\n        'success'       => 'Posts riordinati.',\n    ],\n    'update'    => [\n        'title' => 'Aggiorna :entity inserimento',\n    ],\n    'warning'   => [],\n];\n"
  },
  {
    "path": "lang/it/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Le linee temporali che hanno elementi collegati a questa entità sono mostrate di seguito.',\n    'show'      => [\n        'title' => 'Linee temporali :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'bulk'      => [\n        'errors'    => [\n            'unknown_type'  => 'Tipo di entità sconosciuto o non valido.',\n        ],\n        'success'   => '{1} :count entità trasformata a nuovo tipo :type.|[2,*] :count entità trasformate al nuovo tipo: :type.',\n    ],\n    'fields'    => [\n        'select_one'    => 'Seleziona uno',\n        'target'        => 'Nuovo tipo di entità',\n    ],\n    'panel'     => [\n        'bulk_description'  => 'Cambia il tipo di entità in molteplici entità. Tieni presente che alcuni dati potrebbero andare persi a causa dei diversi campi tra i tipi di entità.',\n        'bulk_title'        => 'Trasforma le entità in blocco',\n        'title'             => 'Trasforma un entità',\n    ],\n    'success'   => 'Entità :name trasformata.',\n    'title'     => 'Trasforma :name',\n];\n"
  },
  {
    "path": "lang/it/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Abilità',\n    'ability'               => 'Abilità',\n    'attribute_template'    => 'Modello di Attributi',\n    'attribute_templates'   => 'Modelli di Attributi',\n    'bookmark'              => 'Segnalibro',\n    'bookmarks'             => 'Segnalibri',\n    'calendar'              => 'Calendario',\n    'calendars'             => 'Calendari',\n    'campaign'              => 'Campagna',\n    'campaigns'             => 'Campagne',\n    'character'             => 'Personaggio',\n    'characters'            => 'Personaggi',\n    'conversation'          => 'Conversazione',\n    'conversations'         => 'Conversazioni',\n    'creator'               => [\n        'actions'                   => [\n            'create'    => 'Crea :type',\n            'full'      => 'Vai al modulo completo',\n            'more'      => 'Aggiungi dettagli',\n        ],\n        'back'                      => 'Ritorna alla selezione',\n        'bulk_names'                => 'Aggiungi un nome per riga',\n        'duplicate'                 => 'Attenzione! Ci sono altre entità di questo tipo con lo stesso nome.',\n        'helper_v2'                 => 'Crea velocemente le basi di una nuova entità senza interrompere il flusso di pensieri.',\n        'missing_v2'                => 'Solo i moduli abilitati e che hai il permesso di creare sono mostrati in questa interfaccia. :learn-more.',\n        'modes'                     => [\n            'bulk'      => 'Aggiungi in blocco',\n            'default'   => 'Aggiungi veloce',\n        ],\n        'name'                      => [\n            'new'       => 'Nuovo nome',\n            'remove'    => 'Rimuovi',\n        ],\n        'success_multiple'          => '{1} Nuova entità :link creata.|[2,*] Nuove entità :link create.',\n        'success_multiple_posts'    => '{1} Nuovo post :link creato.|[2,*] Nuovi posts :link creati.',\n        'title'                     => 'Nuova Entità',\n        'titles'                    => [\n            'everything'    => 'Tutto',\n            'quick-access'  => 'Accesso veloce',\n        ],\n        'tooltip'                   => 'Crea una nuova entità senza lasciare la pagina corrente.',\n        'tooltips'                  => [\n            'create'        => 'Crea un\\'entità e torna alla schermata di selezione delle entità',\n            'create_more'   => 'Crea un\\'entità e comincia a crearne un\\'altra dello stesso tipo',\n            'edit'          => 'Crea un\\'entità e comincia a modificarla',\n        ],\n    ],\n    'creature'              => 'Creatura',\n    'creatures'             => 'Creature',\n    'dice_roll'             => 'Tiro di Dadi',\n    'dice_rolls'            => 'Tiri di Dadi',\n    'event'                 => 'Evento',\n    'events'                => 'Eventi',\n    'families'              => 'Famiglie',\n    'family'                => 'Famiglia',\n    'inventories'           => 'Inventari',\n    'item'                  => 'Oggetto',\n    'items'                 => 'Oggetti',\n    'journal'               => 'Diario',\n    'journals'              => 'Diari',\n    'location'              => 'Luogo',\n    'locations'             => 'Luoghi',\n    'map'                   => 'Mappa',\n    'maps'                  => 'Mappe',\n    'new'                   => [],\n    'note'                  => 'Nota',\n    'notes'                 => 'Note',\n    'organisation'          => 'Organizzazione',\n    'organisations'         => 'Organizzazioni',\n    'quest'                 => 'Missione',\n    'quest_element'         => 'Elemento della missione',\n    'quests'                => 'Missioni',\n    'race'                  => 'Stirpe',\n    'races'                 => 'Stirpi',\n    'relation'              => 'Legame',\n    'relations'             => 'Legami',\n    'tag'                   => 'Tag',\n    'tags'                  => 'Tag',\n    'timeline'              => 'Linea Temporale',\n    'timeline_element'      => 'Elemento della linea temporale',\n    'timelines'             => 'Linee Temporali',\n];\n"
  },
  {
    "path": "lang/it/errors.php",
    "content": "<?php\n\nreturn [\n    '403'           => [\n        'body'  => 'Sembra che tu non abbia il permesso per accedere a questa pagina!',\n        'title' => 'Permesso Negato',\n    ],\n    '403-form'      => [\n        'help'  => 'Forse la tua sessione è scaduta. Prova ad accedere di nuovo in un\\'altra finestra prima di salvare.',\n    ],\n    '404'           => [\n        'body'  => 'Ci dispiace, la pagina che stavi cercando non può essere trovata.',\n        'title' => 'Pagina non trovata',\n    ],\n    '500'           => [\n        'body'  => [\n            '1' => 'Ops, sembra che qualcosa non abbia funzionato.',\n            '2' => 'Un report con l\\'errore riscontrato ci è  appena stato inviato ma ogni tanto ci può essere d\\'aiuto sapere qualcosa in più su cosa stessi facendo.',\n        ],\n        'title' => 'Errore',\n    ],\n    '503'           => [\n        'body'  => [\n            '1' => 'Kanka è attualmente in manutenzione che normalmente significa che c\\'è un aggiornamento in corso!',\n            '2' => 'Ci dispiace per l\\'inconveniente. Tutto tornerà alla normalità in pochi minuti.',\n        ],\n        'json'  => 'Kanka è al momento in manutenzione, riprova fra qualche minuto.',\n        'title' => 'Manutenzione',\n    ],\n    '503-form'      => [],\n    'footer'        => 'Se necessiti di ulteriore assistenza per favore contattaci a hello@kanka.io oppure su :discord',\n    'post_layout'   => 'Layout del post non valido.',\n];\n"
  },
  {
    "path": "lang/it/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuovo Evento',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [\n        'helper'    => 'Gli eventi che hanno questa entità come evento genitore sono visualizzati qui.',\n    ],\n    'fields'        => [\n        'date'  => 'Data',\n    ],\n    'helpers'       => [\n        'date'  => 'Questo campo può contenere qualsiasi cosa e non è collegato ai calendari della campagna. Per collegare questo evento a un calendario, aggiungilo al calendario o alla sottopagina dei promemoria di questo evento.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'date'  => 'Una data per il tuo evento',\n        'type'  => 'Cerimonia, Festival, Disastro, Battaglia, Nascita',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Elementi del Calendario',\n    ],\n];\n"
  },
  {
    "path": "lang/it/families/trees.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'clear'             => 'Cancella tutto',\n        'first'             => 'Aggiungi un fondatore',\n        'founder'           => 'Aggiungi un nuovo fondatore',\n        'rename-relation'   => 'Rinomina la relazione',\n        'reset'             => 'Scarta i cambiamenti',\n        'save'              => 'Salva',\n    ],\n    'modal'     => [\n        'first-title'   => 'Seleziona un\\'entità',\n        'helper'        => 'Sostituisci l\\'entità con un\\'altra della stessa campagna',\n        'relation'      => 'Relazione',\n        'title'         => 'Sostituisci l\\'entità',\n    ],\n    'modals'    => [\n        'clear'     => [\n            'confirm'   => 'Sei sicuro di voler reinizializzare tutti i dati dell\\'albero genealogico?',\n        ],\n        'entity'    => [\n            'add'       => [\n                'founder'   => 'Fondatore',\n                'member'    => 'Membro',\n                'success'   => 'Entità aggiunta.',\n                'title'     => 'Aggungi un\\'entità',\n            ],\n            'child'     => [\n                'success'   => 'Figlio aggiunto.',\n                'title'     => 'Aggiungi un figlio',\n            ],\n            'edit'      => [\n                'helper'    => 'Seleziona questa opzione se la relazione è sconosciuta. Un personaggio può essere aggiunto in seguito.',\n                'success'   => 'Entità aggiornata.',\n                'title'     => 'Aggiorna un\\'entità',\n            ],\n            'founder'   => [\n                'title' => 'Aggiungi un nuovo fondatore',\n            ],\n            'remove'    => [\n                'confirm'   => 'Sei sicuro di voler rimuovere questa entità dall\\'albero genealogico?',\n                'success'   => 'Entità rimossa.',\n            ],\n        ],\n        'relations' => [\n            'add'       => [\n                'success'   => 'Relazione aggiunta.',\n                'title'     => 'Aggiungi una relazione',\n            ],\n            'edit'      => [\n                'success'   => 'Relazione aggiornata.',\n                'title'     => 'Aggiorna una relazione',\n            ],\n            'unknown'   => 'Sconosciuto',\n        ],\n        'reset'     => [\n            'confirm'   => 'Sei sicuro di voler eliminare tutte le modifiche apportate all\\'albero genealogico?',\n        ],\n    ],\n    'pitch'     => 'Crea un dettagliato albero genealogico per le famiglie della campagna.',\n    'success'   => [\n        'cleared'   => 'Albero genealogico cancellato.',\n        'reseted'   => 'L\\'albero genealogico è stato ripristinato.',\n        'saved'     => 'L\\'albero genealogico è stato salvato.',\n    ],\n    'title'     => 'Albero Genealogico :name',\n    'unknown'   => 'non stabilito',\n];\n"
  },
  {
    "path": "lang/it/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuova Famiglia',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Questa famiglia è estinta.',\n        'members'       => 'I membri di una famiglia sono mostrati qui. Un personaggio può essere aggiunto alla famiglia modificando il personaggio, usando il selettore \"Famiglia\".',\n    ],\n    'index'         => [],\n    'members'       => [\n        'create'    => [\n            'success'   => '{0} Nessun membro è stato aggiunto.|{1} 1 membro è stato aggiunto.|[2,*] :count membri sono stati aggiunti.',\n            'title'     => 'Nuovi Membri',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome della famiglia',\n        'type'  => 'Famiglia Reale, Nobile, Estinta',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'tree'  => 'Albero Genealogico',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/faq.php",
    "content": "<?php\n\nreturn [\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nIl miglior modo in cui possiamo spiegarti i Template di Attributi è con un esempio. Immaginiamo per esempio che il tuo mondo abbia molti Luoghi e su molti di questi luoghi vuoi ricordarti di creare degli attributi personalizzati per \"Popolazione\", \"Clima\", \"Livello di Criminalità\".\n\nOra, puoi facilmente farlo su ogni Luogo ma può diventare tedioso e potresti dimenticarti qualche volta di reare l'attributo \"Livello di Criminalità\". Qui è dove i Template di Attributi entrano in gioco.\n\nPuoi creare un Template di Attributi con questi attributi (Popolazione, Clima, Livello di Criminalità, etc.), e successivamente applicare questo template sui tuoi luoghi. Questo creerà gli attributi del template nel tuo luogo quindi tutto quello che dovrai fare sarà cambiarne i valori e non ricordarti degli attributi da creare!\nTEXT\n        ,\n        'question'  => 'Templates di Attributi, che cosa sono?',\n    ],\n    'backup'                => [\n        'answer'    => 'Una volta al giorno, puoi esportare tutti i dati della tua campagna in un file ZIP. Nnell\\'app, clicca su \"Campagna\" nel menù a sinistra, poi clicca su \"Esporta\". Questa azione creerà un file esportato che sarà disponibile per 30 minuti. Non puoi caricare questo file esportato su Kanka, è inteso solamente per tua tranquillità o se non pensi più di usare l\\'app.',\n        'question'  => 'Come posso fare un backup della mia campagna o esportarla?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Puoi semplicemente unirti al nostro server :discord e riferire il tuo bug nel canale #error-and-bugs (in lingua inglese).',\n        'question'  => 'Come posso riferire un bug?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'Kanka non ha questa funzionalità. In ogni caso, se stai cercando di gestire vari gruppi di gioco nel medesimo mondo, puoi provare a usare la stessa campagna e a separare i tuoi gruppi per mezzo di una combinazione di missioni, tags e permessi.',\n        'question'  => 'Posso sincronizzare entità per campagne multiple?',\n    ],\n    'custom'                => [\n        'answer'    => 'Kanka parte con un set di tipi predefiniti di entità che interagiscono l\\'uno con l\\'altro. Permettere la creazione di tipi di entità personalizzati richiederebbe la ricostruzione dell\\'app da zero, rendendo vano lo scopo di uno strumento dotato di tipi predefiniti per aiutare persone a creare mondi, piuttosto che a cercare di capire come organizzare cose. Inoltre, Kanka è flessibile con i Tags, che possono rappresentare la maggior parte dei probabili tipi di entità personalizzati.',\n        'question'  => 'Posso creare tipi di entità personalizzati?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Vai alla bacheca della tua campagna, e clicca su \"Campagna\" nel menù a sinistra. Apparirà un pulsante \"Rimuovi\" se sei l\\'ultimo membro della campagna. Cancellare una campagna è un\\'azione permanente che eliminerà tutti i dati presenti sui nostri server, incluse le immagini.',\n        'question'  => 'Come posso eliminare una campagna?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'Tutte le entità hanno le \"Note dell\\'Entità\" che sono piccoli testi che possono essere impostati per essere visibili solamente da te (perfetto quando co-amministrata), solo agli amministratori della campagna o a tutti. Puoi anche dare i permessi ai tuoi membri per creare e modificare le note senza il bisogno di abilitarli alla modifica completa dell\\'entità.',\n        'question'  => 'Come Kanka gestisce le informazioni parzialmente nascoste?',\n    ],\n    'fields'                => [\n        'answer'    => 'Risposta',\n        'category'  => 'Categoria',\n        'locale'    => 'Locale',\n        'order'     => 'Ordine',\n        'question'  => 'Domanda',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\nSì! Noij crediamo nel fatto che il tuo stato finanziario non deve impattare la gioia del giocare di ruolo o di creare nuovi mondi e così manterremo sempre l'app gratuita. Grazie ai nostri generosi Patrons su Patreon siamo in grado di coprire il costo mensile dei server e mantenere l'app senza pubblicità!\n\nSupportarci su Patreon però ti permette di incrementare il limite di dimensione dei file che puoi caricare, aggiunge il tuo nome al wall of fame dei Patreon, avere delle icone di default più curate, votare per prioritizzare cosa verrà sviluppato ed altro ancora!\nTEXT\n        ,\n        'question'  => 'L\\'app resterà gratuita?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Consigliamo la creazione di Divinità come Personaggi, e di Religioni come Organizzazioni. Se vuoi trovare velocemente le tue divinità, ti consigliamo di taggarle con un Tag e/o un tipo appropriato.',\n        'question'  => 'Dove posso creare Dei e religioni?',\n    ],\n    'help'                  => [\n        'answer'    => 'Prima di tutto grazie per volerci aiutare! Siamo sempre interessati in persone che possono aiutarci con le traduzioni, nel testare le nuove funzionalità o che possano aiutare i nuovi utenti. Adoriamo anche quando le persone promuovono Kanka per raggiungere nuove utenze in posti a cui non avevamo pensato. La miglior cosa che puoi fare è unirti a noi su Discord dove un canale è dedicato all\\'aiuto degli utenti. Adoriamo anche i nostri patrons su Patreon se vuoi supportarci e ottenere l\\'accesso a qualche vantaggio!',\n        'question'  => 'Voglio aiutare! Cosa posso fare?',\n    ],\n    'map'                   => [\n        'answer'    => <<<'TEXT'\nOgno luogo può contenere una mappa (png, jpg o svg) con all'interno dei \"punti della mappa\" che possono essere posizionati controllandone la dimensione, la forma, l'icona ed il colore impostandoli come collegamenti ad altre entità o semplici etichette.\n\nPer favore considerate che le mappe prodotte da tool popolari come Azgaar e Medieval Fantasy Town Generator comprimono iol file generato rendendoli incompatibili con Kanka. Un fix è quello di aprire il file con Inkscape o Photoshop e salvarlo nuovamente prima di caricarlo su Kanka.\nTEXT\n        ,\n        'question'  => 'Posso caricare delle mappe su Kanka?',\n    ],\n    'mobile'                => [\n        'answer'    => 'Attualmente non vi è nessuna app mobile per Kanka ma la maggior parte delle funzionalità funzionano anche su di un dispositivo mobile. Una limitazione è lo strumento di menzione che non funziona nell\\'editor testuale. Se il supporto su Patreon lo permetterà, spero un giorno di riuscire a pagare qualcuno per fare l\\'app mobile ma non prevedo che succederà a breve.',\n        'question'  => 'C\\'è un\\'app mobile? È pianificata?',\n    ],\n    'multiworld'            => [\n        'answer'    => 'No non ne hai bisogno! Potrai creare tutte le \"campagne\" che vuoi e fare in modo che rappresentino dei mondi, settings o quello che vorrai. Quando avrai diverse campagne potrai comodamente passare da una all\\'altra',\n        'question'  => 'Io sto creando diversi mondi in sistemi differenti, necessiterò di un account differente per ogni mondo?',\n    ],\n    'permissions'           => [\n        'answer'    => 'Assolutamente, questo è il perché noi abbiamo creato Kanka! Potrai invitare tutti i tuoi giocatori nella tua campagna ed assegnargli dei ruoli e dei permessi. Abbiamo costruito il tutto per essere estremamente flessibile (tu potrai utilizzare sia sia una configurazione opt-in che una opt-out) per coprire il maggiorn numero possibile di bisogni e situazioni.',\n        'question'  => 'Io voglio utilizzare Kanka per costruire il mondo del mio RPG, ma voglio che i miei giocatori abbiano accesso ad alcune delle entità e possano modificare i loro personaggi. È possibile?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nI piani a lungo termine per Kanka sono di creare un versatile strumento di gestione delle campagne e di creazione di mondi che sia indipendente dal sistema utilizzato con contenuti specifici per il systema gestiti dalla comunità nella forma di \"Template della Comunità\". Un traguardo successivo sarà quello di realezzare uno strumento che possa integrarsi con altre piattaforma come Virtual Table Top per collegarle con i mondi su Kanka.\n\nPer quanto riguarda la seconda parte la maggior parte dei progetti obbistici finiscono per mancanza di fondi e con il creatore che li abbandona. Il Patreon è stato pensato per fare in modo che possa ridurre le mie ore lavorative per dedicare più tempo a Kanka senza sacrificare la sicurezza finanziaria della mia famiglia e per coprire i costi del server. Il progetto è anche open source e potrà essere gestito dalla comunità se quelcosa dovesse mai succedermi. I dati di ogni campagna possono essere esportati dall'amministratore della stessa una volta al giorno in caso fossi preoccupato per la possibilità di perdere tutti i tuoi contenuti.\nTEXT\n        ,\n        'question'  => 'Quali sono i piani a lungo termine? Cosa succederebbe se Ilestis si stufasse di lavorare su Kanka?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Puoi dare uno sguardo alla pagina :public-campaigns per osservare come gli altri sfruttano Kanka per le loro campagne.',\n        'question'  => 'Gli altri come usano Kanka?',\n    ],\n    'sections'              => [\n        'community'     => 'Community',\n        'general'       => 'Generale',\n        'other'         => 'Altro',\n        'permissions'   => 'Permessi',\n        'pricing'       => 'Prezzi',\n        'worldbuilding' => 'Worldbuilding',\n    ],\n    'show'                  => [\n        'return'    => 'Ritorna alle FAQ',\n        'timestamp' => 'Ultimo aggiornamento: date',\n        'title'     => 'FAQ :name',\n    ],\n    'user-switch'           => [\n        'answer'    => 'I permessi possono diventare complicati, specialmente con grandi campagne. Come amministratore di una campagna puoi navigare alla lista dei membri della campagna e premere sul pulsante \"Cambia\" che apparirà accanto ai membri non amministratori. Facendo così effettuerai l\\'accesso con quell\\'utente e vedrai la campagna come sarà vista da lui. Questo è il modo più semplice per controllare i permessi della tua campagna.',\n        'question'  => 'I permessi della mia campagna sono stati impostati, come posso testarli?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Solo le persone che hai invitato alla tua campagna potranno vedere ed interagire con quello che hai creato. I tuoi dati sono provati e sempre sotto il tuo controllo.',\n        'question'  => 'Chiunque può vedere il mio mondo?',\n    ],\n];\n"
  },
  {
    "path": "lang/it/fields.php",
    "content": "<?php\n\nreturn [\n    'gallery'           => [\n        'placeholder'   => 'Scegli un\\'immagine dalla galleria della campagna',\n    ],\n    'gallery-header'    => [\n        'description'   => 'Se l\\'entità non ha un\\'immagine di intestazione, visualizza invece un\\'immagine dalla galleria della campagna.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'Se l\\'entità non ha un\\'immagine, visualizza invece un\\'immagine dalla galleria della campagna.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Visualizza un\\'immagine di sfondo nell\\'intestazione dell\\'entità con una :boosted-campaign.',\n        'description'           => 'Visualizza un\\'immagine di sfondo nell\\'intestazione dell\\'entità. Per ottenere risultati migliori, utilizza un\\'immagine molto grande.',\n        'title'                 => 'Immagine di Intestazione',\n    ],\n    'tooltip'           => [],\n];\n"
  },
  {
    "path": "lang/it/filters.php",
    "content": "<?php\n\nreturn [\n    'alerts'    => [\n        'copy'  => 'I filtri sono stati copiati negli appunti.',\n    ],\n    'helpers'   => [\n        'guest' => 'Accedi al tuo account per filtrare i risultati.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/footer.php",
    "content": "<?php\n\nreturn [\n    'about'             => 'Chi siamo?',\n    'blog'              => 'Blog',\n    'boosters'          => 'Potenziamenti',\n    'community'         => 'Comunità',\n    'company'           => 'Società',\n    'contact'           => 'Contattaci',\n    'copyright'         => 'Copyright :copy :year Owlchester SNC',\n    'documentation'     => 'Documentazione',\n    'features'          => 'Funzioni',\n    'kb'                => 'Conoscenza base',\n    'language-switcher' => [\n        'other' => 'Altre Lingue',\n        'title' => 'Seleziona la tua lingua',\n    ],\n    'newsletter'        => 'Notizie',\n    'platform'          => 'Piattaforma',\n    'premium'           => 'Campagne Premium',\n    'press-kit'         => 'Cartella Stampa',\n    'pricing'           => 'Prezzi',\n    'privacy'           => 'Privacy',\n    'public-campaigns'  => 'Campagne pubbliche',\n    'resources'         => 'Risorse',\n    'roadmap'           => 'Roadmap',\n    'security'          => 'Sicurezza',\n    'status'            => 'Stato del servizio',\n    'terms'             => 'Termini',\n    'translator_call'   => 'Kanka è tradotto in altre lingue grazie alla nostra fantastica comunità. Se vuoi aiutare a tradurre Kanka nella tua lingua, contattaci sul nostro :discord!',\n    'whats-new'         => 'Cosa c\\'è di nuovo?',\n];\n"
  },
  {
    "path": "lang/it/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Voti della Comunità',\n];\n"
  },
  {
    "path": "lang/it/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Sala delle Glorie',\n];\n"
  },
  {
    "path": "lang/it/front/kb.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'show'      => [],\n    'title'     => 'Conoscenza di base',\n];\n"
  },
  {
    "path": "lang/it/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Scopri di più',\n        'subscribe'     => 'Iscriviti',\n    ],\n    'fields'    => [\n        'firstname'     => 'Nome',\n        'lastname'      => 'Cognome',\n        'notifications' => 'Notifiche',\n    ],\n    'groups'    => [\n        'all'           => 'Ricevi aggiornamenti occasionali su nuove funzionalità, votazioni ed eventi della comunità, ecc.',\n        'newsletter'    => 'Newsletter',\n    ],\n    'headline'  => 'Iscriviti ad una o a tutte le nostre newsletter per rimanere aggiornato con Kanka.',\n    'title'     => 'Aggiornamenti Email',\n];\n"
  },
  {
    "path": "lang/it/front.php",
    "content": "<?php\n\nreturn [\n    'about'                 => [],\n    'actions'               => [],\n    'campaigns'             => [\n        'public'    => [\n            'filters'   => [\n                'is-premium'    => 'Questa è una campagna premium!',\n            ],\n        ],\n    ],\n    'community'             => [],\n    'contact'               => [],\n    'cookie'                => [\n        'dismiss'   => 'Capito!',\n        'link'      => 'Ulteriori informazioni',\n        'message'   => 'Questo sito web utilizza i cookie per garantirti la migliore esperienza sul nostro sito web.',\n    ],\n    'faq'                   => [],\n    'featured_campaigns'    => [],\n    'features'              => [\n        'api'       => [\n            'link'  => 'Documentazione API',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Aumento delle chiamate API (90 al minuto)',\n            'boosts'            => 'Potenziamenti della Campagna',\n            'default_image'     => 'Immagini predefinite più belle per le entità negli elenchi',\n            'discord'           => 'Canale Privato di :discord',\n            'free'              => 'Gratuito',\n            'hall_of_fame'      => 'Nome nel :link',\n            'impact'            => 'Influenza le funzionalità future (tramite Discord)',\n            'monthly_vote'      => 'Partecipa alle future votazioni della comunità',\n            'pagination'        => 'Risultati per pagina aumentati',\n            'upload_limit'      => 'Dimensioni di caricamento',\n            'upload_limit_map'  => 'Dimensioni di caricamento delle mappe',\n        ],\n    ],\n    'first_block'           => [],\n    'footer'                => [],\n    'goodbye'               => [],\n    'help'                  => [],\n    'home'                  => [\n        'seo'   => [\n            'meta-description'  => 'Sei un game master, un worldbuilder o uno scrittore? Offriamo un gestore di campagne per giochi di ruolo e uno strumento di worldbuilding che rende facile organizzare, pianificare e divertirsi con le tue campagne GDR. Siamo spinti e ispirati dalla nostra comunità e, soprattutto, le nostre funzioni principali sono gratuite!',\n        ],\n    ],\n    'master'                => [],\n    'menu'                  => [\n        'dashboard'     => 'Pagina Principale',\n        'login'         => 'Accedi',\n        'register'      => 'Registrati',\n        'register_free' => 'Registrati gratuitamente',\n    ],\n    'meta'                  => [\n        'description'   => ':kanka è un flessibile costruttore di mondi e gestore on-line di campagne GDR',\n        'title'         => ':kanka - Gestore di campagne Online per GDR e strumento per la creazione di mondi',\n    ],\n    'partners'              => [],\n    'pricing'               => [\n        'tier'  => [\n            'free'  => 'Gratis',\n            'month' => 'mese',\n        ],\n    ],\n    'privacy'               => [],\n    'release'               => [],\n    'roadmap'               => [],\n    'second_block'          => [],\n    'seo'                   => [\n        'keywords'  => 'Worldbuilding, Giochi di Ruolo da Tavolo, Gestione di Campagne GDR',\n    ],\n    'team'                  => [],\n    'terms'                 => [],\n];\n"
  },
  {
    "path": "lang/it/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'gallery'   => 'Dalla galleria',\n        'url'       => 'Carica un\\'immagine da un URL',\n    ],\n    'browse'    => [\n        'layouts'       => [\n            'large' => 'Anteprime grandi',\n            'small' => 'Anteprime piccole',\n        ],\n        'search'        => [\n            'placeholder'   => 'Cerca un\\'immagine nella galleria',\n        ],\n        'title'         => 'Galleria',\n        'unauthorized'  => 'Nessuno dei tuoi ruoli ha l\\'autorizzazione per sfogliare la galleria.',\n    ],\n    'delete'    => [\n        'success'   => '[0] Eliminati 0 elementi|[1] Eliminato un elemento|{2,*} Eliminati :count elementi',\n    ],\n    'download'  => [\n        'errors'    => [\n            'copy_failed'           => 'I nostri server non sono riusciti a scaricare l\\'immagine indicata.',\n            'gallery_full_free'     => 'Lo spazio di archiviazione della galleria è esaurito. Attiva le funzioni premium per avere più spazio di archiviazione.',\n            'gallery_full_premium'  => 'Lo spazio di archiviazione della galleria è pieno. Rimuovi prima i file inutilizzati.',\n            'invalid_format'        => 'Il file non è di formato valido.',\n            'too_big'               => 'Il file è troppo grande.',\n            'unauthorized'          => 'Nessuno dei tuoi ruoli ha l\\'autorizzazione per caricare nella galleria.',\n        ],\n    ],\n    'file'      => [\n        'saved' => 'Salvato',\n    ],\n    'filters'   => [\n        'only_unused'   => 'Mostra solo i file non utilizzati',\n    ],\n    'move'      => [\n        'success'   => '[0] Mossi 0 elementi|[1] Mosso un elemento|{2,*} Mossi :count elementi',\n    ],\n    'update'    => [\n        'home'      => 'Cartella Principale',\n        'success'   => '[0] Aggiornati 0 elementi|[1] Aggiornato un elemento|{2,*} Aggiornati :count elementi',\n    ],\n];\n"
  },
  {
    "path": "lang/it/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Deseleziona Tutto',\n    'no'            => 'No',\n    'required'      => 'Necessario',\n    'select_all'    => 'Seleziona Tutto',\n    'success'       => [\n        'created'           => ':name creato.',\n        'deleted'           => ':name rimosso.',\n        'deleted-cancel'    => ':name rimosso. :cancel.',\n        'updated'           => ':name aggiornato.',\n    ],\n    'yes'           => 'Sì',\n];\n"
  },
  {
    "path": "lang/it/genres.php",
    "content": "<?php\n\nreturn [\n    'alternate_history' => 'Ucronia',\n    'cyberpunk'         => 'Cyberpunk',\n    'fantasy'           => 'Fantasy',\n    'historical'        => 'Storico',\n    'many_worlds'       => 'Multiverso',\n    'modern'            => 'Moderno',\n    'occult'            => 'Occulto',\n    'post_apocalyptic'  => 'Post-Apocalittico',\n    'pulp'              => 'Pulp',\n    'science_fantasy'   => 'Fantasy Scientifico',\n    'science_fiction'   => 'Fantascientifico',\n    'space_opera'       => 'Epopea Spaziale',\n    'steampunk'         => 'Steampunk',\n    'superhero'         => 'Supereroi',\n    'urban_fantasy'     => 'Fantasy Urbano',\n    'western'           => 'Western',\n];\n"
  },
  {
    "path": "lang/it/header.php",
    "content": "<?php\n\nreturn [\n    'news'              => [\n        'title' => 'Novità di Kanka',\n    ],\n    'notifications'     => [\n        'dismiss'   => 'Chiudi',\n        'no-unread' => 'Nessuna notifica non letta',\n        'read_all'  => 'Visualizza tutto',\n    ],\n    'toggle_navigation' => 'Navigazione',\n    'user'              => [\n        'settings'      => 'Impostazioni',\n        'sign-out'      => 'Disconnetti',\n        'upgrade'       => 'Aggiorna',\n        'your-profile'  => 'Il tuo Profilo',\n    ],\n];\n"
  },
  {
    "path": "lang/it/helpers.php",
    "content": "<?php\n\nreturn [\n    'api-filters'       => [\n        'description'   => 'Per l\\'endpoint API :name sono disponibili i seguenti filtri.',\n        'title'         => 'Filtri API',\n    ],\n    'attributes'        => [\n        'link'  => 'Opzioni di Attributo',\n    ],\n    'calendar-widget'   => [\n        'info'  => 'Perché vengono mostrati questi messaggi?',\n        'title' => 'Widget del Calendario',\n    ],\n    'dice'              => [],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Come usare i filtri',\n    ],\n    'link'              => [\n        'description'   => 'Puoi collegarti facilmente ad altre entità della propria campagna utilizzando le seguenti abbreviazioni.',\n    ],\n    'map'               => [],\n    'public'            => 'Guarda un video tutorial su Youtube che spiega le campagne pubbliche.',\n    'troubleshooting'   => [\n        'description'       => 'Un membro del team di Kanka ti ha inviato a questa pagina. Seleziona una campagna dal menu a tendina per generare un token che ci permetta di entrare temporaneamente nella tua campagna come amministratore.',\n        'errors'            => [\n            'token_exists'  => 'Un token esiste già per :campaign.',\n        ],\n        'save_btn'          => 'Genera token',\n        'select_campaign'   => 'Seleziona una campagna',\n        'subtitle'          => 'Per favore, invia un aiuto!',\n        'success'           => 'Per favore, copia il seguente token e invialo a qualcuno del team di Kanka.',\n        'title'             => 'Risoluzione dei Problemi',\n    ],\n    'widget-filters'    => [\n        'description'   => 'Puoi filtrare le entità visualizzate nel widget delle ultime modifiche fornendo un elenco di campi dell\\'entità e dei valori. Ad esempio, si può usare :example per filtrare i personaggi morti di tipo PNG.',\n        'link'          => 'filtri dei widget',\n        'title'         => 'Filtri dei Widget della Pagina Principale',\n    ],\n];\n"
  },
  {
    "path": "lang/it/history.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'show-old'  => 'Cambiamenti',\n    ],\n    'cta'       => 'Visualizza un registro di tutte le modifiche recenti apportate alla campagna.',\n    'empty'     => 'Nessun dato',\n    'filters'   => [\n        'all-actions'   => 'Tutte le azioni',\n        'all-users'     => 'Tutti i membri',\n        'no-results'    => 'Nessun risultato da visualizzare. Prova altri filtri o torna dopo aver apportato modifiche alle entità della campagna.',\n    ],\n    'helpers'   => [\n        'base'      => 'Questa interfaccia contiene le modifiche recenti alle entità della campagna per un periodo massimo di :amount mesi, mostrando prima le modifiche più recenti.',\n        'changes'   => 'I seguenti campi avevano in precedenza questi dati.',\n    ],\n    'log'       => [\n        'create'        => ':user ha creato :entity',\n        'create_post'   => ':user ha creato il post \":post\" su :entity',\n        'delete'        => ':user ha eliminato :entity',\n        'delete_post'   => ':user ha eliminato un post su :entity',\n        'reorder_post'  => ':user ha riordinato i post di :entity',\n        'restore'       => ':user ha recuperato :entity',\n        'update'        => ':user ha modificato :entity',\n        'update_post'   => ':user ha modificato il post \":post\" su :entity',\n    ],\n    'title'     => 'Cronologia',\n    'unknown'   => [\n        'entity'    => 'un\\'entità sconosciuta',\n    ],\n];\n"
  },
  {
    "path": "lang/it/items.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuovo Oggetto',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_equipped'   => 'Equipaggiato',\n        'price'         => 'Prezzo',\n        'size'          => 'Taglia',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'inventories'   => [],\n    'placeholders'  => [\n        'price' => 'Prezzo dell\\'oggetto',\n        'size'  => 'Taglia, Peso, Dimensioni',\n        'type'  => 'Arma, Pozione, Artefatto',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Inventari',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuovo Diario',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Autore',\n        'date'      => 'Data',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'placeholders'  => [\n        'author'    => 'Chi ha scritto il diario',\n        'date'      => 'Data del diario',\n        'type'      => 'Sessione, One Shot, Bozza',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/it/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Catalano',\n        'cs'    => 'Ceco',\n        'de'    => 'Tedesco',\n        'el'    => 'Greco',\n        'en'    => 'Inglese',\n        'en-US' => 'Inglese Americano',\n        'es'    => 'Spagnolo',\n        'fr'    => 'Francese',\n        'gl'    => 'Galiziano',\n        'he'    => 'Ebraico',\n        'hr'    => 'Croato',\n        'hu'    => 'Ungherese',\n        'it'    => 'Italiano',\n        'nb'    => 'Norvegese (Bokmal)',\n        'nl'    => 'Olandese',\n        'pl'    => 'Polacco',\n        'pt-BR' => 'Portoghese-Brasiliano',\n        'ru'    => 'Russo',\n        'sk'    => 'Slovacco',\n        'tr'    => 'Turco',\n    ],\n    'header'=> 'Lingue',\n];\n"
  },
  {
    "path": "lang/it/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nuovo Luogo',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [\n        'is_destroyed'  => 'Distrutto',\n    ],\n    'helpers'       => [\n        'characters'    => 'Visualizza tutti i personaggi in questo luogo e nei luoghi discendenti, o semplicemente quelli che si trovano qui.',\n    ],\n    'hints'         => [\n        'is_destroyed'  => 'Questo luogo è distrutto.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'type'  => 'Città, Regno, Rovina',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/it/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Entra nella modalità di modifica',\n        'exit-edit-mode'    => 'Esci dalla modalità di modifica',\n        'finish-drawing'    => 'Finisci di disegnare il poligono',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Fai clic sulla mappa per iniziare a disegnare un poligono',\n    ],\n    'toggle'        => 'Apri/chiudi tutti i gruppi',\n];\n"
  },
  {
    "path": "lang/it/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Aggiungi un nuovo gruppo',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Rimosso :count gruppo.|[2,*] Rimossi :count gruppi.',\n        'patch'     => '{1} Modificato :count gruppo.|[2,*] Modificati :count gruppi.',\n    ],\n    'create'        => [\n        'success'   => 'Gruppo :name creato.',\n        'title'     => 'Nuovo Gruppo',\n    ],\n    'delete'        => [\n        'success'   => 'Gruppo :name eliminato.',\n    ],\n    'edit'          => [\n        'success'   => 'Gruppo :name modificato.',\n        'title'     => 'Modifica il Gruppo :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Mostra gli indicatori del gruppo',\n        'position'  => 'Posizione',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Gli indicatori possono essere raggruppati utilizzando i gruppi. Ogni gruppo può essere cliccato durante l\\'esplorazione di una mappa per mostrare o nascondere rapidamente tutti gli indicatori in esso contenuti.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Se questa opzione è selezionata, gli indicatori di gruppo saranno visualizzati sulla mappa per impostazione predefinita.',\n    ],\n    'index'         => [\n        'title' => 'Gruppi di :name',\n    ],\n    'pitch'         => [],\n    'placeholders'  => [\n        'name'          => 'Negozi, Tesori, PNGs',\n        'position'      => 'Primo',\n        'position_list' => 'Dopo :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Salva il nuovo ordine',\n        'success'   => '{1} Riordinato :count gruppo.|[2,*] Riordinati :count gruppi.',\n        'title'     => 'Riordina gruppi',\n    ],\n];\n"
  },
  {
    "path": "lang/it/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Aggiungi un nuovo livello',\n    ],\n    'base'          => 'Livello Base',\n    'bulks'         => [\n        'delete'    => '{1} Rimosso :count livello.|[2,*] Rimossi :count livelli.',\n        'patch'     => '{1} Modificato :count livello.|[2,*] Modificati :count livelli.',\n    ],\n    'create'        => [\n        'success'   => 'Livello :name creato.',\n        'title'     => 'Nuovo Livello',\n    ],\n    'delete'        => [\n        'success'   => 'Livello :name eliminato.',\n    ],\n    'edit'          => [\n        'success'   => 'Livello :name modificato.',\n        'title'     => 'Modifica Livello :name',\n    ],\n    'fields'        => [\n        'position'  => 'Posizione',\n        'type'      => 'Tipo di Livello',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Carica i livelli su una mappa per cambiare l\\'immagine di sfondo visualizzata sotto gli indicatori o come sovrapposizione sopra la mappa ma sotto gli indicatori.',\n        'is_real'   => 'I livelli non sono disponibili mentre usi OpenStreetMaps.',\n    ],\n    'index'         => [\n        'title' => 'Livelli di :name',\n    ],\n    'pitch'         => [],\n    'placeholders'  => [\n        'name'          => 'Sotterranei, Livello 2, Relitto',\n        'position'      => 'Primo',\n        'position_list' => 'Dopo :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Salva il nuovo ordine',\n        'success'   => '{1} Riordinato :count livello.|[2,*] Riordinati :count livelli.',\n        'title'     => 'Riordina livelli',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Sovrapposizione',\n        'overlay_shown' => 'Sovrapposizione (mostra automaticamente)',\n        'standard'      => 'Predefinita',\n    ],\n    'types'         => [\n        'overlay'       => 'Sovrapposizione (visualizzata sopra il livello attivo)',\n        'overlay_shown' => 'Sovrapposizione visibile per impostazione predefinita',\n        'standard'      => 'Livello predefinito (per passare da un livello all\\'altro)',\n    ],\n];\n"
  },
  {
    "path": "lang/it/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Scrivi una voce personalizzata per questo indicatore.',\n        'remove'            => 'Rimuovi indicatore',\n        'reset-polygon'     => 'Ripristina posizioni',\n        'save_and_explore'  => 'Salva e Esplora',\n        'start-drawing'     => 'Inizia a disegnare',\n        'update'            => 'Modifica Indicatori',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Rimosso :count indicatore.|[2,*] Rimossi :count indicatori.',\n        'patch'     => '{1} Aggiornato :count indicatore.|[2,*] Aggiornati :count indicatori.',\n    ],\n    'circle_sizes'  => [\n        'custom'    => 'Personalizzata',\n        'huge'      => 'Enorme',\n        'large'     => 'Grande',\n        'small'     => 'Piccola',\n        'standard'  => 'Predefinito',\n        'tiny'      => 'Minuscola',\n    ],\n    'create'        => [\n        'success'   => 'Indicatore :name creato.',\n        'title'     => 'Nuovo Indicatore',\n    ],\n    'delete'        => [\n        'success'   => 'Indicatore :name rimosso.',\n    ],\n    'edit'          => [\n        'success'   => 'Indicatore :name aggiornato.',\n        'title'     => 'Modifica Indicatore :name',\n    ],\n    'fields'        => [\n        'bg_colour'     => 'Colore di sfondo',\n        'circle_radius' => 'Raggio del cerchio',\n        'copy_elements' => 'Copia elementi',\n        'custom_icon'   => 'Icona personalizzata',\n        'custom_shape'  => 'Forma Personalizzata a Poligono',\n        'font_colour'   => 'Colore dell\\'icona',\n        'group'         => 'Gruppo di indicatori',\n        'icon'          => 'Icona',\n        'is_draggable'  => 'Trascinabile',\n        'latitude'      => 'Latitudine',\n        'longitude'     => 'Longitudine',\n        'opacity'       => 'Opacità',\n        'pin_size'      => 'Dimensioni dell\\'Indicatore',\n        'polygon_style' => [\n            'stroke'            => 'Colore del tratto',\n            'stroke-opacity'    => 'Opacità del tratto',\n            'stroke-width'      => 'Larghezza del tratto',\n        ],\n        'popupless'     => 'Popup del Tooltip',\n        'size'          => 'Dimensioni',\n    ],\n    'helpers'       => [\n        'base'                      => 'Aggiungi indicatori alla mappa cliccando su un qualsiasi punto della stessa.',\n        'copy_elements'             => 'Copia gruppi, livelli e indicatori.',\n        'copy_elements_to_campaign' => 'Copia gruppi, livelli e indicatori delle mappe. Gli indicatori collegati a un\\'entità saranno convertiti in un indicatore standard.',\n        'custom_icon_v2'            => 'Usa le icone da :fontawesome, :rpgawesome, o da un\\'icona SVG personalizzata. Scopri di più in :docs.',\n        'custom_radius'             => 'Seleziona l\\'opzione dimensione personalizzata dal menu a tendina per definire una dimensione.',\n        'draggable'                 => 'Attivalo per permettere lo spostamento di un indicatore in modalità Esplora.',\n        'is_popupless'              => 'Disabilita la visualizzazione del tooltip dell\\'indicatore al passaggio del mouse.',\n        'label'                     => 'Un\\'etichetta viene visualizzata come un blocco di testo sulla mappa. Il contenuto sarà il nome dell\\'indicatore o dell\\'entità.',\n        'polygon'                   => [\n            'edit'  => 'Modifica il poligono trascinando i suoi bordi e i suoi nodi.',\n        ],\n    ],\n    'hints'         => [\n        'entry' => 'Modifica l\\'icona per scrivere una voce personalizzata.',\n    ],\n    'icons'         => [\n        'custom'        => 'Icona personalizzata',\n        'entity'        => 'Immagine dell\\'entità',\n        'exclamation'   => 'Icona con Punto di Esclamazione',\n        'marker'        => 'Icona dell\\'Indicatore',\n        'question'      => 'Icona con Punto Interrogativo',\n    ],\n    'index'         => [\n        'title' => 'Indicatore di :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Disegna forme poligonali personalizzate per rappresentare bordi e altre forme irregolari.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'Prova :example1 o :example2',\n        'custom_shape'  => '100, 100 200, 240 340, 110',\n        'name'          => 'Richiesto se non è stata selezionata alcuna entità',\n    ],\n    'presets'       => [\n        'helper'    => 'Fai clic su una preimpostazione per caricarla o crearne una nuova.',\n    ],\n    'shapes'        => [\n        '0' => 'Cerchio',\n        '1' => 'Quadrato',\n        '2' => 'Triangolo',\n        '3' => 'Personalizzato',\n    ],\n    'sizes'         => [\n        '0' => 'Minuscolo',\n        '1' => 'Normale',\n        '2' => 'Piccolo',\n        '3' => 'Grande',\n        '4' => 'Enorme',\n    ],\n    'tabs'          => [\n        'circle'    => 'Cerchio',\n        'label'     => 'Etichetta',\n        'marker'    => 'Indicatore',\n        'polygon'   => 'Poligono',\n        'preset'    => 'Preimpostazione',\n    ],\n];\n"
  },
  {
    "path": "lang/it/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Torna a :name',\n        'edit'      => 'Modifica mappa',\n        'explore'   => 'Esplora',\n    ],\n    'create'        => [\n        'title' => 'Nuova Mappa',\n    ],\n    'edit'          => [],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'Si è verificato un errore durante il raggruppamento della mappa. Contatta il team su :discord per ricevere supporto.',\n            'running'   => [\n                'edit'      => 'La mappa non può essere modificata mentre si sta raggruppando.',\n                'explore'   => 'La mappa non può essere visualizzata mentre si sta raggruppando.',\n                'time'      => 'Questa operazione può richiedere da alcuni minuti a diverse ore, a seconda delle dimensioni della mappa.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'Questa mappa necessita di un immagine per poterla visualizzare nella Pagina Principale.',\n        ],\n        'explore'   => [\n            'missing'   => 'Per favore, aggiungi un immagine alla mappa prima di poterla esplorare.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Indicatore',\n        'center_x'          => 'Posizione Longitudinale Predefinita',\n        'center_y'          => 'Posizione Latitudinale Predefinita',\n        'centering'         => 'Centratura',\n        'distance_measure'  => 'Misura di distanza',\n        'distance_name'     => 'Etichetta dell\\'unità di distanza',\n        'grid'              => 'Griglia',\n        'has_clustering'    => 'Raggruppa gli indicatori',\n        'initial_zoom'      => 'Zoom iniziale',\n        'is_real'           => 'Usa OpenStreetMaps',\n        'max_zoom'          => 'Zoom massimo',\n        'min_zoom'          => 'Zoom minimo',\n        'tabs'              => [\n            'coordinates'   => 'Coordinate',\n            'marker'        => 'Indicatore',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'Modificando i seguenti valori si controlla l\\'area della mappa su cui si concentra l\\'attenzione. Se questi valori vengono lasciati vuoti, verrà focalizzato il centro della mappa.',\n        'centering'             => 'La centratura su un marcatore avrà la priorità sulle coordinate predefinite.',\n        'chunked_zoom'          => 'Raggruppa automaticamente gli indicatori quando sono vicini.',\n        'distance_measure'      => 'Se si assegna alla mappa una misurazione della distanza, si abilita lo strumento di misurazione nella modalità di esplorazione.',\n        'distance_measure_2'    => 'Per 100 pixel che misurano 1 chilometro, inserire un valore di 0,0041.',\n        'grid'                  => 'Definisce la dimensione della griglia che verrà visualizzata nella modalità di esplorazione.',\n        'has_clustering'        => 'Raggruppa automaticamente gli indicatori quando sono vicini.',\n        'initial_zoom'          => 'Il livello di zoom iniziale con cui viene caricata la mappa. Il valore predefinito è :default, mentre il valore massimo consentito è :max e il valore minimo consentito è :min.',\n        'is_real'               => 'Selezionare questa opzione se desideri utilizzare una mappa del mondo reale invece dell\\'immagine caricata. Questa opzione disabilita i livelli.',\n        'max_zoom'              => 'Il massimo ingrandimento possibile per una mappa. Il valore predefinito è :default, mentre il valore massimo consentito è :max.',\n        'min_zoom'              => 'Il massimo ingrandimento possibile per una mappa. Il valore predefinito è :default, mentre il valore minimo consentito è :min.',\n        'missing_image'         => 'Salva la mappa con un\\'immagine prima di poter aggiungere livelli e marcatori.',\n    ],\n    'index'         => [],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Gruppi',\n        'layers'    => 'Livelli',\n        'legend'    => 'Legenda',\n        'markers'   => 'Indicatori',\n        'settings'  => 'Impostazioni',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Lascia vuoto per caricare la mappa nel mezzo',\n        'center_x'      => 'Lascia vuoto per caricare la mappa nel mezzo',\n        'center_y'      => 'Lascia vuoto per caricare la mappa nel mezzo',\n        'distance_name' => 'Km, miglia, piedi, hamburgers',\n        'grid'          => 'Distanza in pixel tra gli elementi della griglia. Lascia vuoto per nascondere la griglia.',\n        'name'          => 'Nome della mappa',\n        'type'          => 'Sotterraneo, Città, Galassia',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Mappe',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'La mappa è in fase di raggruppamento. Questo processo può richiedere da alcuni minuti a qualche ora.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'premium'       => 'attiva le funzioni premium per',\n        'remove_v4'     => 'Rimuovi gli annunci :subscribing a Kanka o :premium per :currency :price al mese.',\n        'subscribing'   => 'abbonandoti',\n    ],\n];\n"
  },
  {
    "path": "lang/it/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuova Nota',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'Sottonote',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'note'  => 'Scegli una nota sovraordinata',\n        'type'  => 'Religione, Razza, Systema Politico',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/it/notifications.php",
    "content": "<?php\n\nreturn [\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'La tua candidatura alla campagna :campaign è stata approvata.',\n            'approved_message'      => 'La tua candidatura alla campagna :campaign è stata approvata. Messaggio allegato: :reason',\n            'new'                   => 'Nuova candidatura per :campaign.',\n            'rejected'              => 'La tua candidatura alla campagna :campaign è stata rifiutata. Motivo dichiarato: :reason',\n            'rejected_no_message'   => 'La tua candidatura alla campagna :campaign è stata rifiutata.',\n        ],\n        'asset_export'      => 'È disponibile l\\'esportazione degli asset di una campagna. Il link è disponibile in :time minuti.',\n        'boost'             => [\n            'add'           => 'La campagna :campaign viene potenziata da :user.',\n            'remove'        => ':user non sta più potenziando la campagna :campaign.',\n            'superboost'    => 'La campagna :campaign sta venendo supportata da :user.',\n        ],\n        'deleted'           => 'La campagna :campaign è stata eliminata.',\n        'export'            => 'Un\\'esportazione di una campagna è disponibile. Il link sarà disponibile in :time minuti.',\n        'export_error'      => 'Abbiamo riscontrato un errore nell\\'esportazione delle entità della campagna. Per favore contattaci se questo problema dovesse persistere.',\n        'hidden'            => 'La campagna :campaign è ora nascosta dalla pagina delle campagne pubbliche.',\n        'import'            => [\n            'failed'    => 'L\\'importazione della campagna :campaign non è riuscita.',\n            'success'   => 'La campagna :campaign ha terminato l\\'importazione.',\n        ],\n        'join'              => ':user si è unito alla campagna :campaign.',\n        'leave'             => ':user ha lasciato la campagna :campaign.',\n        'plugin'            => [\n            'deleted'   => 'Il plugin :plugin è stato eliminato dal marketplace e rimosso dalla tua campagna :campagna.',\n        ],\n        'premium'           => [\n            'add'       => 'Le funzionalità premium sono state sbloccate per la campagna :campaign da :user.',\n            'remove'    => 'L\\'utente :user non sblocca più le funzioni premium per la campagna :campaign.',\n        ],\n        'removed-image'     => 'L\\'immagine o l\\'intestazione di :entity è stata rimossa a causa di una violazione del copyright.',\n        'role'              => [\n            'add'       => 'Sei stato aggiunto al ruolo :role nella campagna :campaign.',\n            'remove'    => 'Sei stato rimosso dal ruolo :role nella campagna :campaign.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => 'Il membro del team Kanka :user ha aderito alla campagna :campaign.',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Pulisci tutto',\n        'success'   => 'Notifiche rimosse.',\n        'title'     => 'Pulisci le notifiche',\n    ],\n    'features'          => [\n        'approved'  => 'La tua idea :feature è stata approvata.',\n        'finished'  => 'La tua idea :feature è ora disponibile su Kanka!',\n        'rejected'  => 'La tua idea :feature è stata rifutata, motivo: :reason.',\n    ],\n    'header'            => 'Hai :count notifiche.',\n    'index'             => [\n        'title' => 'Notifiche',\n    ],\n    'map'               => [\n        'chunked'   => 'La mappa :name ha terminato il raggruppamento ed è ora utilizzabile.',\n    ],\n    'no_notifications'  => 'Attualmente non ci sono notifiche. Le notifiche appariranno qui una volta che ne avrete ricevuto qualcuna.',\n    'subscriptions'     => [\n        'charge_fail'   => 'Si è verificato un errore durante l\\'elaborazione del pagamento. Per favore, attendi un momento mentre proviamo di nuovo. Se non cambia nulla, contattaci.',\n        'deleted'       => 'L\\'abbonamento a Kanka è stato annullato automaticamente dopo troppi tentativi falliti di addebito sulla carta. Per favore, accedi alle impostazioni dell\\'abbonamento e prova ad aggiornare i tuoi dati di pagamento.',\n        'ended'         => 'Il tuo abbonamento a Kanka è terminato. Le tue campagne premium e i tuoi ruoli su Discord sono stati disattivati. Speriamo di rivederti presto!',\n        'failed'        => 'L\\'abbonamento a Kanka è stato annullato automaticamente dopo troppi tentativi falliti di addebito sulla carta. Per favore, accedi alle impostazioni dell\\'abbonamento e prova ad aggiornare i tuoi dati di pagamento.',\n        'started'       => 'Il tuo abbonamento a Kanka è appena iniziato.',\n    ],\n    'unread'            => 'Nuova Notifica',\n];\n"
  },
  {
    "path": "lang/it/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuova Organizzazione',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_defunct'    => 'Dismessa',\n        'members'       => 'Membri',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_defunct'    => 'Questa organizzazione è dismessa.',\n    ],\n    'index'         => [],\n    'members'       => [\n        'destroy'       => [\n            'success'   => 'Membro rimosso da :name.',\n        ],\n        'edit'          => [\n            'title' => 'Membro Aggiornato per :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Superiore',\n            'pinned'    => 'Fissato',\n            'role'      => 'Ruolo',\n            'status'    => 'Stato di affiliazione',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Tutti i personaggi che sono membri di questa organizzazione e delle sue sotto-organizzazioni.',\n            'members'       => 'Tutti i personaggi che fanno parte di questa organizzazione.',\n            'pinned'        => 'Scegli se questo membro deve essere mostrato nella sezione fissata della panoramica delle entità associate.',\n        ],\n        'pinned'        => [\n            'both'  => 'Fissata a entrambe',\n            'none'  => 'Fissata da nessuna parte',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Chi è il superiore di questo membro',\n            'role'      => 'Leader, Membro, Alto Septon, Maestro di Spionaggio',\n        ],\n        'status'        => [\n            'active'    => 'Membro Attivo',\n            'inactive'  => 'Membro Inattivo',\n            'unknown'   => 'Stato Sconosciuto',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'Culto, Gang, Ribellione, Fandom',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/it/pagination.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n    'previous' => '&laquo; Precedente',\n    'next' => 'Successivo &raquo;',\n];\n"
  },
  {
    "path": "lang/it/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Ci sono stati dei problemi con i dati inseriti.',\n        'title'         => 'Ops!',\n    ],\n];\n"
  },
  {
    "path": "lang/it/passwords.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n    'password' => 'Le password devono essere di almeno 6 caratteri e devono coincidere.',\n    'reset' => 'La password è stata reimpostata!',\n    'sent' => 'Promemoria della password inviato!',\n    'token' => 'Questo token per la reimpostazione della password non è valido.',\n    'user' => 'Non esiste un utente associato a questo indirizzo e-mail.',\n];\n"
  },
  {
    "path": "lang/it/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/it/pins.php",
    "content": "<?php\n\nreturn [\n    'learn-more'    => 'Impara di più sui pin nella nostra documentazione.',\n    'options'       => [\n        'no'    => 'Non pinnato',\n        'yes'   => 'Pinnato sulla pagina di riepilogo dell\\'entità',\n    ],\n];\n"
  },
  {
    "path": "lang/it/post_layouts.php",
    "content": "<?php\n\nreturn [\n    'character_orgs'        => 'Organizzazioni del personaggio',\n    'connection_map'        => 'Mappa dei Legami',\n    'helper'                => 'Questo post è impostato per visualizzare la sottopagina :subpage dell\\'entità.',\n    'location_characters'   => 'Personaggi del luogo',\n    'location_events'       => 'Eventi del luogo',\n    'quest_elements'        => 'Elementi della Missione',\n];\n"
  },
  {
    "path": "lang/it/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuovo Post',\n    ],\n    'fields'        => [\n        'name'  => 'Nome',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome del post',\n    ],\n    'position'      => [\n        'dont_change'   => 'Non cambiare',\n        'first'         => 'Primo',\n        'last'          => 'Ultimo',\n    ],\n];\n"
  },
  {
    "path": "lang/it/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Crea una nuova preimpostazione',\n    ],\n    'create'        => [\n        'success'   => 'Preimpostazione :nome creata.',\n        'title'     => 'Nuova preimpostazione',\n    ],\n    'destroy'       => [\n        'success'   => 'Preimpostazione :nome cancellata.',\n    ],\n    'edit'          => [\n        'success'   => 'Preimpostazione :nome modificata.',\n        'title'     => 'Modifica :nome preimpostazione',\n    ],\n    'fields'        => [\n        'name'  => 'Nome della preimpostazione',\n    ],\n    'lists'         => [\n        'empty' => 'Al momento non sono presenti preimpostazioni nella tua campagna.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Il nome della preimpostazione',\n    ],\n];\n"
  },
  {
    "path": "lang/it/profiles.php",
    "content": "<?php\n\nreturn [\n    'avatar'                        => [\n        'success'   => 'Avatar aggiornato.',\n    ],\n    'campaign_switcher_order_by'    => [],\n    'edit'                          => [\n        'success'   => 'Profilo aggiornato',\n    ],\n    'fields'                        => [\n        'avatar'                    => 'Avatar',\n        'bio'                       => 'Biografia',\n        'email'                     => 'Email',\n        'hide_subscription'         => 'Nascondi il mio nome dalla :hall_of_fame.',\n        'last_login_share'          => 'Condividi con gli altri membri della campagna quando ho effettuato l\\'ultimo accesso.',\n        'login_sharing'             => 'Condivisione dell\\'ultimo login',\n        'name'                      => 'Nome',\n        'new_password'              => 'Nuova Password',\n        'new_password_confirmation' => 'Conferma della Nuova Password',\n        'newsletter'                => 'Desidero essere contattato qualche volta via email.',\n        'password'                  => 'Password attuale',\n        'profile-name'              => 'Nome del profilo',\n        'settings'                  => 'Impostazioni',\n        'subscription_hiding'       => 'Nascondere l\\'abbonamento',\n        'theme'                     => 'Tema',\n    ],\n    'helpers'                       => [\n        'profile-name'  => 'Cambia il modo in cui il tuo nome appare sul tuo :profile e sul :marketplace. Se lasciato vuoto, verrà utilizzato il nome del proprio account.',\n    ],\n    'newsletter'                    => [\n        'helpers'   => [\n            'header'    => 'Iscriviti alle seguenti newsletter per essere informato sulle novità di Kanka.',\n        ],\n        'options'   => [\n            'monthly'   => 'Newsletter di Kanka',\n        ],\n        'title'     => 'Newsletter',\n        'updated'   => 'Preferenze della Newsletter aggiornate.',\n    ],\n    'password'                      => [\n        'success'   => 'Password aggiornata',\n    ],\n    'placeholders'                  => [\n        'bio'                       => 'Una piccola biografia di te stesso visualizzata sul tuo profilo pubblico.',\n        'email'                     => 'Il tuo indirizzo email',\n        'name'                      => 'Il tuo nome come visualizzato',\n        'new_password'              => 'La tua nuova password',\n        'new_password_confirmation' => 'Conferma la tua nuova password',\n        'password'                  => 'Fornisci la tua password attuale per eventuali modifiche',\n    ],\n    'sections'                      => [\n        'dangerzone'    => 'Zona Pericolosa',\n        'delete'        => [\n            'confirm'       => 'Elimina il mio account ora',\n            'delete'        => 'Elimina il mio account',\n            'goodbye'       => 'In caso affermativo, scrivi :code nella casella sottostante.',\n            'helper'        => 'L\\'eliminazione dell\\'account comporta anche l\\'eliminazione di qualsiasi campagna di cui sei l\\'unico membro. Questa azione è permanente e non può essere annullata.',\n            'subscribed'    => 'Cancella il tuo :subscription prima di poter cancellare il proprio account.',\n            'title'         => 'Elimina il tuo account',\n            'warning'       => 'Eliminando il tuo account, tutti i tuoi dati saranno perduti. Sei sicuro di voler proseguire?',\n        ],\n        'password'      => [\n            'title' => 'Cambia la tua password',\n        ],\n    ],\n    'settings'                      => [\n        'helpers'   => [\n            'bio'       => 'La biografia è ora visibile nel tuo :link.',\n            'profile'   => 'profilo pubblico',\n        ],\n        'success'   => 'Impostazioni cambiate.',\n    ],\n    'theme'                         => [\n        'success'   => 'Tema cambiato.',\n        'themes'    => [\n            'dark'      => 'Scuro',\n            'default'   => 'Predefinito',\n            'future'    => 'Futuristico',\n            'midnight'  => 'Blu Notte',\n        ],\n    ],\n    'title'                         => 'Modifica il tuo profilo',\n    'workflows'                     => [\n        'created'   => 'Visualizza l\\'entità appena creata',\n        'default'   => 'Visualizza la lista di entità',\n    ],\n];\n"
  },
  {
    "path": "lang/it/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nuova Missione',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'elements'      => [\n        'create'    => [\n            'success'   => 'Elemento :entity aggiunto alla missione.',\n            'title'     => 'Nuovo elemento per :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Elemento :entity rimosso.',\n        ],\n        'edit'      => [\n            'success'   => 'Elemento :entity aggiornato.',\n            'title'     => 'Modifica elemento per :name',\n        ],\n        'fields'    => [\n            'entity_or_name'    => 'Seleziona un\\'entità della campagna o dai un nome a questo elemento.',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Copia gli elementi collegati alla missione',\n        'date'          => 'Data',\n        'element_role'  => 'Ruolo',\n        'instigator'    => 'Iniziatore',\n        'is_completed'  => 'Completato',\n        'role'          => 'Ruolo',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'Seleziona se la missione è considerata completata.',\n    ],\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'date'      => 'Data del mondo reale per la missione',\n        'entity'    => 'Nome di un elemento dalla missione',\n        'role'      => 'Il ruolo di questa entità nella missione',\n        'type'      => 'Arco Narrativo, Missione Secondaria, Missione Principale',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Aggiungi un elemento',\n        ],\n        'tabs'      => [\n            'elements'  => 'Elementi',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nuova Stirpe',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'members'   => 'Membri',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Questa stirpe è estinta.',\n    ],\n    'index'         => [],\n    'members'       => [\n        'create'    => [\n            'submit'    => 'Aggiungi membri',\n            'success'   => '{0} Nessun membro è stato aggiunto.|{1} 1 membro è stato aggiunto.|[2,*] :count sono stati aggiunti.',\n            'title'     => 'Nuovi Membri',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Umano, Fata, Borg',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/it/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'La tua session è scaduta. Per favore ritenta.',\n    'unknown_entity'    => 'Ci dispiace, non sappiamo cosa sia \\':entity\\'.',\n];\n"
  },
  {
    "path": "lang/it/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Evento',\n        'livestream'    => 'Diretta streaming',\n        'other'         => 'Altro',\n        'release'       => 'Rilascio',\n        'vote'          => 'Voto della comunità',\n    ],\n    'index'         => [\n        'description'   => 'Gli ultimi aggiornamenti di kanka.io',\n        'title'         => 'Rilasci',\n    ],\n    'post'          => [\n        'footer'    => 'Da :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Torna ai rilasci',\n        'title'     => 'Rilascio :name',\n    ],\n];\n"
  },
  {
    "path": "lang/it/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chronicles of Darkness',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/it/search/fulltext.php",
    "content": "<?php\n\nreturn [\n    'searching' => 'Ricerca di entità, post, attributi e altro per termine :term.',\n    'title'     => 'Ricerca completa',\n];\n"
  },
  {
    "path": "lang/it/search.php",
    "content": "<?php\n\nreturn [\n    'fulltext'      => 'Cerca ovunque',\n    'lookup'        => [\n        'empty'     => 'Nessun risultato',\n        'hint'      => 'Scrivi almeno tre lettere per effettuare una ricerca fra le entità di una campagna.',\n        'keyboard'  => 'Premi :k per effettuare una ricerca, :esc per cessarla',\n        'recents'   => 'Recenti',\n        'results'   => 'Risultati',\n    ],\n    'no_results'    => 'Nessun risultato',\n    'placeholder'   => 'CERCA',\n    'preview'       => [\n        'links'             => 'Link',\n        'no-connections'    => 'Non ci sono legami fissati da mostrare',\n    ],\n    'title'         => 'Cerca',\n];\n"
  },
  {
    "path": "lang/it/settings/appearance.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'learn-more'    => 'Per ulteriori informazioni su questa impostazione, consulta la nostra documentazione.',\n        'save'          => 'Salva le impostazioni',\n    ],\n    'campaign-switcher' => [\n        'alphabetical'      => 'In ordine alfabetico (A-Z)',\n        'date_created'      => 'Data di creazione (prima la più vecchia)',\n        'date_joined'       => 'Data di adesione (prima la più vecchia)',\n        'r_alphabetical'    => 'In ordine alfabetico inverso (Z-A)',\n        'r_date_created'    => 'Data di creazione (prima la più nuova)',\n        'r_date_joined'     => 'Data di adesione (prima la più vecchia)',\n    ],\n    'dismissible'       => [\n        'main'  => 'Controlla l\\'aspetto e il feel di Kanka. Nota che le campagne possono sovrascrivere alcune di queste impostazioni.',\n    ],\n    'editors'           => [\n        'default'   => 'Predefinito (:name)',\n        'legacy'    => 'Legacy (:name)',\n    ],\n    'explore'           => [\n        'grid'  => 'Griglia (predefinito)',\n        'table' => 'Tabella',\n    ],\n    'fields'            => [\n        'campaign-order'        => 'Ordine dell\\'elenco delle campagne',\n        'date-format'           => 'Formato della data',\n        'editor'                => 'Editor di testo',\n        'entity-explore'        => 'Liste di Entità',\n        'mentions'              => 'Menzioni mentre modifichi',\n        'new-entity-workflow'   => 'Flusso di lavoro della nuova entità',\n        'pagination'            => 'Risultati per pagina',\n        'theme'                 => 'Preferenze del tema',\n    ],\n    'helpers'           => [\n        'advanced-mentions'     => 'Quando modifichi i testi, puoi controllare se le menzioni vengono rese come nome dell\\'entità o come menzione avanzata.',\n        'campaign-order'        => 'Modificare l\\'ordine in cui le campagne sono elencate nel selettore di campagne.',\n        'date-format'           => 'Se disponibile, controlla il formato in cui vengono visualizzate le date del mondo reale.',\n        'entity-explore'        => 'Controlla il modo in cui gli elenchi di entità vengono visualizzati nelle campagne.',\n        'new-entity-workflow'   => 'Controlla l\\'interfaccia a cui si accede dopo la creazione di una nuova entità.',\n        'overridable'           => 'Le singole campagne possono ignorare questa preferenza.',\n        'pagination'            => 'Per gli elenchi che si estendono su più pagine, definisci quanti sono visibili in ogni pagina.',\n        'theme'                 => 'Scegli l\\'aspetto di Kanka come vuoi tu',\n    ],\n    'mentions'          => [\n        'advanced'  => 'Visualizza menzioni avanzate :code',\n        'default'   => 'Menzioni come nome dell\\'entità',\n    ],\n    'nested'            => [],\n    'success'           => 'Opzioni di aspetto salvati',\n    'values'            => [\n        'pagination'        => ':amount risultati per pagina',\n        'pagination-sub'    => ':amount (disponibili per abbonati)',\n    ],\n];\n"
  },
  {
    "path": "lang/it/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'boost_name'    => 'Potenzia :name',\n    ],\n    'available' => 'Potenziamenti disponibili :amount/:total',\n    'benefits'  => [\n        'boosted'       => 'Potenziando una campagna con :one potenziamento si sblocca l\\'accesso al :marketplace, alle opzioni di tematizzazione, ai caricamenti più grandi per tutti i membri, al recupero delle entità cancellate e :more ancora.',\n        'more'          => 'altre funzioni pazzesche',\n        'superboosted'  => 'Superpotenziando una campagna con :amount potenziamenti si sbloccano tutti i vantaggi di una campagna potenziata, oltre a una galleria della campagna, log completi delle modifiche apportate alle entità e :more ancora.',\n    ],\n    'boost'     => [\n        'actions'   => [\n            'confirm'   => 'Potenziala!',\n            'remove'    => 'Smetti di potenziare :campaign',\n            'subscribe' => 'Abbonati a Kanka',\n            'upgrade'   => 'Aggiorna il tuo abbonamento',\n        ],\n        'confirm'   => 'Che emozione! Stai per potenziare :campaign. Questo assegnerà uno (:cost) dei tuoi potenziamenti di campagna disponibili.',\n        'duration'  => 'I potenziamenti assegnati rimangono tali fino a quando non vengono rimossi manualmente o fino al termine dell\\'abbonamento.',\n        'errors'    => [\n            'boosted'           => 'Oh oh, sembra che la :campaign sia già potenziata!',\n            'out-of-boosters'   => 'Oh no! Non hai abbastanza potenziamenti disponibili. Hai :available e hai bisogno di :cost. O smetti di potenziare altre campagne o :upgrade.',\n        ],\n        'pitch'     => 'Diventa un abbonato per sbloccare i potenziamenti di campagna.',\n        'success'   => 'La campagna :campaign è ora potenziata. Goditi tutte le nuove fantastiche funzioni!',\n        'title'     => 'Potenzia :campaign',\n        'upgrade'   => 'aggiorna il tuo abbonamento',\n    ],\n    'campaign'  => [\n        'boosted'       => 'Potenziata da :user da :time',\n        'premium'       => 'Premium grazie a :user da :time',\n        'standard'      => 'Standard',\n        'superboosted'  => 'Superpotenziata da :user da :time',\n        'unboosted'     => 'Depotenziata',\n    ],\n    'intro'     => [\n        'anyone'    => 'Non sei limitato a potenziare solo le campagne che hai creato. Puoi potenziare qualsiasi campagna di cui fai parte o che puoi vedere. Questo include le campagne in cui sei un giocatore o una :public che ti piace.',\n        'data'      => 'Quando una campagna non viene più potenziata, l\\'accesso alle funzioni potenziate viene rimosso. Tuttavia, non viene eliminato alcun contenuto, per cui se la campagna viene nuovamente incrementata in futuro, l\\'accesso viene ripristinato.',\n        'first'     => 'Le funzioni avanzate si sbloccano assegnando i potenziamenti per potenziare o superpotenziare una campagna. La quantità di potenziamenti di cui disponi è determinata dal tuo :subscription. Questo numero è disponibile in ogni momento quando si è abbonati. Il potenziamento di una campagna le assegna uno dei vostri potenziamenti, mentre il superpotenziamenti di una campagna ne assegna tre.',\n    ],\n    'pitch'     => [\n        'benefits'      => [\n            'backup'        => 'Recupera un\\'entità precedentemente cancellata per un periodo massimo di :amount giorni.',\n            'customisable'  => 'Personalizzazione completa dell\\'aspetto di una campagna',\n            'icons'         => 'Accedi a migliaia di bellissime icone per mappe e linee temporali',\n            'title'         => 'Le campagne potenziate prendono',\n            'upload'        => 'Dimensioni di caricamento maggiori per tutti i membri delle campagne',\n        ],\n        'description'   => 'Assegna i potenziamenti alle campagne e contribuisci a sbloccare funzioni straordinarie per tutti i partecipanti. Non sei impressionato dalle campagne potenziate? Ci pensiamo noi con le campagne superpotenziate!',\n        'more'          => 'Consulta l\\'elenco completo dei vantaggi sulla nostra pagina :boosters.',\n        'title'         => 'Porta una campagna a un livello superiore con la personalizzazione e i vantaggi per tutti i suoi membri',\n    ],\n    'ready'     => [\n        'available'         => 'I tuoi potenziamenti di campagna disponibili.',\n        'pricing'           => 'Tutti i nostri livelli di abbonamento includono almeno un potenziamento di campagna e iniziano con :amount al mese.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Potenzia una campagna',\n    ],\n    'superboost'=> [\n        'actions'   => [\n            'confirm'   => 'Superpotenziala!',\n            'instead'   => 'Superpotenziala per :count!',\n            'remove'    => 'Smetti di superpotenziare :campaign',\n        ],\n        'confirm'   => 'Che emozione! Stai per superpotenziare :campaign. Questo assegnerà tre (:cost) dei tuoi potenziamenti di campagna disponibili.',\n        'errors'    => [\n            'boosted'   => 'Oh oh, sembra che la :campaign sia già superpotenziata!',\n        ],\n        'success'   => 'La campagna :campaign è ora superpotenziata. Goditi tutte le nuove fantastiche funzioni!',\n        'title'     => 'Superpotenzia :campaign',\n        'upgrade'   => 'Pronti per l\\'esperienza Kanka definitiva? Superpotenziare :campaign assegnerà :cost ulteriori potenziamenti di campagna.',\n    ],\n    'title'     => 'Potenziamenti di Campagna',\n    'unboost'   => [\n        'confirm'   => 'Sì, sono sicuro',\n        'status'    => [\n            'boosting'      => 'Potenziare',\n            'superboosting' => 'Superpotenziare',\n        ],\n        'success'   => 'La campagna :campaign è ora non più potenziata, e i tuoi potenziamenti sono ora disponibili di nuovo.',\n        'title'     => 'Depotenzia una campagna',\n        'warning'   => 'Sei sicuro di voler interrompere :action :campaign? Questo rilascerà i potenziamenti assegnati e nasconderà tutti i contenuti e le funzionalità relative ai vantaggi fino a quando la campagna non verrà nuovamente potenziata.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/settings/premium.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'remove'    => 'Rimuovi premium',\n        'unlock'    => 'Diventa premium',\n    ],\n    'create'        => [\n        'actions'   => [\n            'confirm'   => 'Diventa Premium!',\n        ],\n        'confirm'   => 'Che emozione! Stai per sbloccare le funzioni premium per :campaign. Questa operazione utilizzerà una delle campagne premium disponibili.',\n        'duration'  => 'Le campagne premium rimangono tali fino a quando non vengono rimosse manualmente o fino alla scadenza dell\\'abbonamento.',\n        'success'   => 'La campagna :campaign è ora premium. Goditi tutte le nuove fantastiche funzionalità!',\n    ],\n    'exceptions'    => [\n        'already'       => 'Le funzioni premium sono già state sbloccate per questa campagna.',\n        'out-of-stock'  => 'Non sono disponibili abbastanza campagne premium per sbloccare questa campagna. Rimuovi lo stato premium da un\\'altra campagna oppure :upgrade.',\n    ],\n    'pitch'         => [\n        'description'   => 'Diventa premium e contribuisci a sbloccare funzioni straordinarie per tutti i partecipanti.',\n        'title'         => 'Le campagne premium ricevono',\n    ],\n    'ready'         => [\n        'available'         => 'Le tue campagne premium disponibili',\n        'pricing'           => 'Tutti i nostri livelli di abbonamento includono almeno una campagna premium e partono da :amount al mese.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Diventa premium',\n    ],\n    'remove'        => [\n        'confirm'   => 'Sì, sono sicuro',\n        'cooldown'  => 'Questa funzione premium di :campaign può essere rimossa dopo :date.',\n        'success'   => 'Le funzioni premium sono state rimosse dalla campagna :campaign. È ora possibile sbloccare le funzioni premium in un\\'altra campagna.',\n        'title'     => 'Rimuovendo le funzioni premium',\n        'warning'   => 'Sei sicuro di voler rimuovere le funzionalità premium da :campaign? In questo modo sarà possibile sbloccare un\\'altra campagna e nascondere tutti i contenuti e le funzionalità relative ai vantaggi fino a quando lo stato premium della campagna non sarà nuovamente abilitato.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'               => [\n                'disable'   => 'Disattiva l\\'autenticazione a due fattori',\n                'finish'    => 'Termina la configurazione e accedi',\n            ],\n            'activation_helper'     => 'Per completare la configurazione dell\\'autenticazione a due fattori del tuo account, segui queste istruzioni.',\n            'disable'               => [\n                'helper'    => 'Se desideri disattivare l\\'autenticazione a due fattori, fai clic sul pulsante sottostante. Tieni presente che in questo modo il tuo account sarà vulnerabile a chiunque conosca i tuoi dati di accesso.',\n                'title'     => 'Disattiva l\\'autenticazione a due fattori',\n            ],\n            'enable_instructions'   => 'Per avviare il processo di attivazione, genera il codice QR di autenticazione, poi scansionalo nell\\'app Google Authenticator (:ios, :android) o in un\\'altra app simile di autenticazione.',\n            'enabled'               => 'L\\'autenticazione a due fattori è attualmente abilitata sul tuo account.',\n            'error_enable'          => 'Codice Invalido, prova di nuovo',\n            'fields'                => [\n                'otp'       => 'Inserisci la Password Una Tantum (OTP) fornita dall\\'app di autenticazione',\n                'qrcode'    => 'Scansiona il seguente codice QR con l\\'app di autenticazione per generare una Password Una Tantum (OTP).',\n            ],\n            'generate_qr'           => 'Genera codice QR',\n            'helper'                => 'L\\'autenticazione a due fattori (2FA) rafforza la sicurezza dell\\'accesso richiedendo due metodi (detti anche fattori) per verificare la tua identità a ogni accesso.',\n            'learn_more'            => 'Per saperne di più sull\\'autenticazione a due fattori.',\n            'social'                => 'L\\'autenticazione a due fattori di Kanka è abilitata solo per gli utenti che effettuano il login utilizzando l\\'e-mail e la password. Modifica il metodo di accesso nelle impostazioni dell\\'account prima di poter abilitare questa opzione.',\n            'success_disable'       => 'L\\'autenticazione a due fattori è stata disattivata con successo.',\n            'success_enable'        => 'L\\'autenticazione a due fattori è stata attivata con successo. Accedi nuovamente per completare la configurazione.',\n            'success_key'           => 'Il codice QR sicuro è stato generato con successo. Completa la configurazione per attivare l\\'autenticazione a due fattori.',\n            'title'                 => 'Autenticazione a Due Fattori',\n        ],\n        'actions'           => [\n            'social'            => 'Passa al login di Kanka',\n            'update_email'      => 'Aggiorna email',\n            'update_password'   => 'Aggiorna password',\n        ],\n        'email'             => 'Cambia email',\n        'email_success'     => 'Email aggiornata.',\n        'password'          => 'Cambia password',\n        'password_success'  => 'Password modificata.',\n        'social'            => [\n            'error'     => 'Stai già utilizzando il login Kanka per questo account.',\n            'helper'    => 'Il tuo account è attualmente gestito da :provider. Puoi smettere di usarlo e passare al login standard di Kanka impostando una password.',\n            'success'   => 'Il tuo account ora utilizza il login di Kanka.',\n            'title'     => 'Social per Kanka',\n        ],\n        'title'             => 'Account',\n    ],\n    'api'           => [\n        'helper'    => 'Benvenuto nelle API di Kanka. Genera un token di accesso personale da utilizzare nella tua richiesta API per raccogliere informazioni sulle campagne di cui fai parte.',\n        'link'      => 'Leggi la documentazione API',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Connetti',\n            'remove'    => 'Rimuovi',\n        ],\n        'benefits'  => 'Kanka offre alcune integrazioni con servizi di terze parti. Altre integrazioni di terze parti sono previste per il futuro.',\n        'discord'   => [\n            'confirm'   => 'Sei sicuro di voler disconnettere il tuo account da Discord? Questo rimuoverà tutti i ruoli con cui sei stato sincronizzato.',\n            'errors'    => [\n                'add'   => 'Si è verificato un errore nel collegamento del tuo account Discord con Kanka. Riprova. Se continua a verificarsi questo problema, tieni presente che Discord ha un limite di 100 server collegati quando si utilizzano le sue API.',\n            ],\n            'success'   => [\n                'add'       => 'Il tuo account Discord è stato collegato.',\n                'remove'    => 'Il tuo account Discord è stato scollegato.',\n            ],\n            'text'      => 'Collega il tuo account Discord a Kanka per ottenere automaticamente l\\'accesso ai ruoli di abbonamento e ai canali privati.',\n            'unlock'    => 'Sblocca ruoli Discord',\n        ],\n        'title'     => 'Integrazione App',\n    ],\n    'billing'       => [\n        'placeholder'   => 'Se desideri aggiungere ulteriori informazioni di contatto o fiscali alle tue ricevute (indirizzo dell\\'azienda, numero di partita IVA, ecc.), inseriscile qui sotto e appariranno su tutte le tue ricevute.',\n        'save'          => 'Salva le informazioni di fattura',\n        'title'         => 'Informazioni di Fattura',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'La campagna :name è stata già potenziata.',\n            'exhausted_boosts'      => 'Hai finito i potenziamenti da dare. Rimuovi il potenziamento da una campagna prima di darlo a un\\'altra.',\n            'exhausted_superboosts' => 'Hai finito i potenziamenti. Sono necessari 3 potenziamenti per superpotenziare una campagna.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Austria',\n        'belgium'       => 'Belgio',\n        'france'        => 'Francia',\n        'germany'       => 'Germania',\n        'italy'         => 'Italia',\n        'netherlands'   => 'Paesi Bassi',\n        'spain'         => 'Spagna',\n    ],\n    'layout'        => [\n        'title' => 'Configurazione',\n    ],\n    'menu'          => [\n        'account'               => 'Account',\n        'api'                   => 'API',\n        'appearance'            => 'Aspetto',\n        'apps'                  => 'App',\n        'boosters'              => 'Potenziamenti',\n        'notifications'         => 'Notifiche',\n        'other'                 => 'Altro',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Opzioni di Pagamento',\n        'personal_settings'     => 'Impostazioni Personali',\n        'premium'               => 'Campagne Premium',\n        'profile'               => 'Profilo Pubblico',\n        'settings'              => 'Impostazioni',\n        'subscription'          => 'Abbonamento',\n        'subscription_status'   => 'Stato di Abbonamento',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Funzionalità disattivata - se desideri supportare Kanka, per favore fallo tramite un :subscription. Il collegamento con Patreon è ancora attivo per coloro che lo avevano collegato prima dell\\'abbandono di Patreon.',\n        'pledge'        => 'Contributo :name',\n        'remove'        => [\n            'button'    => 'Scollega il tuo account Patreon',\n            'success'   => 'Il tuo account Patreon è stato scollegato.',\n            'text'      => 'Scollegare il tuo account Patreon da Kanka rimuoverà i tuoi bonus, il tuo nome nella Sala delle Glorie, i potenziamenti delle campagne e altre caratteristiche legate al supporto di Kanka. Nessuno dei tuoi contenuti potenziati andrà perduto (ad esempio, le intestazioni delle entità). Iscrivendosi di nuovo, avrai accesso a tutti i dati precedenti, compresa la possibilità di sbloccare le campagne precedentemente premium.',\n            'title'     => 'Scollega il tuo account Patreon da Kanka',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Aggiorna profilo',\n        ],\n        'avatar'    => 'Immagine del Profilo',\n        'success'   => 'Profilo aggiornato.',\n        'title'     => 'Profilo Pubblico',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Cancella abbonamento',\n            'subscribe'         => 'Abbonati',\n            'update_currency'   => 'Salva la valuta di fatturazione',\n        ],\n        'billing'               => [\n            'helper'    => 'I dati di fatturazione vengono elaborati e conservati in modo sicuro tramite :stripe. Questo metodo di pagamento viene utilizzato per tutti gli abbonamenti.',\n            'saved'     => 'Metodo di pagamento salvato',\n        ],\n        'cancel'                => [\n            'options'   => [\n                'competitor'        => 'Passo a un sito concorrente',\n                'financial'         => 'L\\'abbonamento è troppo costoso',\n                'missing_features'  => 'Funzioni mancanti',\n                'not_for'           => 'L\\'abbonamento non fa per me',\n                'not_playing'       => 'Non gioco/scrivo più o la campagna è in pausa',\n                'not_using'         => 'Non uso Kanka al momento',\n                'other'             => 'Altro',\n            ],\n            'text'      => 'Siamo spiacenti di vederti andare via! L\\'annullamento dell\\'abbonamento lo manterrà attivo fino a :date, dopodiché perderà i potenziamenti delle campagne e gli altri vantaggi legati al sostegno di Kanka. Non esitare a compilare il seguente modulo per informarci su cosa possiamo fare di meglio o su cosa ti ha portato a prendere questa decisione.',\n        ],\n        'cancelled'             => 'L\\'abbonamento è stato annullato. Puoi rinnovare l\\'abbonamento una volta che l\\'abbonamento attuale scade dopo la data :date.',\n        'change'                => [\n            'text'  => [\n                'monthly'           => 'Stai sottoscrivendo l\\'abbonamento per il grado :tier, da pagare mensilmente in cifra pari a :amount.',\n                'upgrade_monthly'   => 'Passi al livello :tier per :upgrade, poi fatturi mensilmente per :amount.',\n                'upgrade_paypal'    => 'Passi al livello :tier per :upgrade fino a :date.',\n                'upgrade_yearly'    => 'Passi al livello :tier per :upgrade, poi fatturi annualmente per :amount.',\n                'yearly'            => 'Stai sottoscrivendo l\\'abbonamento per il grado :tier, da pagare annualmente in cifra pari a :amount.',\n            ],\n            'title' => 'Cambia Grado di Abbonamento',\n        ],\n        'coupon'                => [\n            'check'         => 'controlla il codice promozionale',\n            'invalid'       => 'Codice promozionale invalido',\n            'label'         => 'Codice promozionale',\n            'percent_off'   => 'Sconteremo il tuo primo abbonamento annuale del :percent%!',\n        ],\n        'currencies'            => [\n            'brl'   => 'BRL',\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Cambia la valuta di fatturazione preferita',\n        ],\n        'errors'                => [\n            'callback'      => 'Il nostro fornitore di pagamenti ha segnalato un errore. Riprova per favore, o contattaci se il problema persiste.',\n            'failed'        => 'Attualmente si stanno verificando problemi con il nostro sistema di fatturazione. Contattaci all\\'indirizzo :email per ricevere assistenza.',\n            'subscribed'    => 'Non è stato possibile elaborare l\\'abbonamento. Stripe ha fornito il seguente suggerimento.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Attivo da',\n            'active_until'      => 'Attivo fino',\n            'billing'           => 'Fatturazione',\n            'currency'          => 'Valuta di Fatturazione',\n            'payment_method'    => 'Metodo di pagamento',\n            'plan'              => 'Piano attuale',\n            'reason'            => 'Motivazione',\n            'reset'             => 'Ripristina dati di fatturazione',\n            'reset_billing'     => 'Sono consapevole che cambiando valuta perderò la mia cronologia di fatturazione e dovrò inserire nuovamente il mio metodo di pagamento.',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Paga l\\'abbonamento con il metodo :method. Questo metodo di pagamento non si rinnova automaticamente alla fine dell\\'abbonamento. :method è disponibile solo in euro.',\n            'alternatives-2'        => 'Paga il tuo abbonamento usando :method. Si tratta di un pagamento unico che non si rinnova automaticamente alla fine dell\\'abbonamento.',\n            'alternatives_warning'  => 'Non è possibile aggiornare l\\'abbonamento utilizzando questo metodo. Sottoscrivi nuovamente l\\'abbonamento al termine di quello attuale.',\n            'alternatives_yearly'   => 'Accettiamo abbonamenti annuali solo con :method',\n            'currency_block'        => 'Non è possibile cambiare la valuta mentre si ha un abbonamento attivo a Kanka; è possibile cambiare la valuta una volta terminato l\\'abbonamento attuale.',\n            'currency_reset'        => 'La modifica della valuta scelta cancellerà la cronologia di fatturazione e richiederà di inserire nuovamente un metodo di pagamento.',\n            'paypal_v3'             => 'Paga in tutta sicurezza il tuo abbonamento annuale con PayPal.',\n            'stripe'                => 'I dati di fatturazione vengono elaborati e conservati in modo sicuro tramite :stripe.',\n        ],\n        'manage_subscription'   => 'Gestisci abbonamento',\n        'payment_method'        => [\n            'actions'       => [\n                'add'               => 'Aggiungi',\n                'add_new'           => 'Aggiungi nuovo metodo di pagamento',\n                'change'            => 'Cambia metodo di pagamento',\n                'save'              => 'Salva metodo di pagamento',\n                'show_alternatives' => 'Metodi di pagamento alternativi',\n            ],\n            'add_one'       => 'Non hai attualmente metodi di pagamento salvati.',\n            'alternatives'  => 'Puoi abbonarti utilizzando queste opzioni di pagamento alternative. Questa azione addebiterà il conto una volta sola e non rinnoverà automaticamente l\\'abbonamento ogni mese.',\n            'card'          => 'Carta',\n            'card_name'     => 'Nome sulla carta',\n            'country'       => 'Nazione di residenza',\n            'ending'        => 'Che finisce con',\n            'helper'        => 'Questa carta verrà usata per tutti i tuoi abbonamenti.',\n            'new_card'      => 'Aggiungi un nuovo metodo di pagamento',\n            'saved'         => ':brand **** :last4',\n        ],\n        'periods'               => [\n            'monthly'   => 'Mensilmente',\n            'yearly'    => 'Annualmente',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => 'Indica facoltativamente il motivo del declassamento dell\\'abbonamento.',\n            'reason'            => 'Indica facoltativamente il motivo per cui non supporti più Kanka. Mancava una funzione? La tua situazione finanziaria è cambiata?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount fatturati mensilmente',\n            'cost_yearly'   => ':currency :amount fatturati annualmente',\n        ],\n        'sub_status'            => 'Informazioni di abbonamento',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Cancella abbonamento',\n                'downgrading'       => 'Si prega di contattarci per il declassamento',\n                'rollback'          => 'Cambia a Coboldo',\n                'subscribe'         => 'Cambia a :tier mensilmente',\n                'subscribe_annual'  => 'Cambia a :tier annualmente',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Il pagamento è stato registrato. Riceverai una notifica non appena il pagamento sarà stato elaborato e l\\'abbonamento sarà attivo.',\n            'callback'      => 'La sottocrizione dell\\'abbonamento è andata a buon fine. L\\'account verrà aggiornato non appena il nostro fornitore di pagamenti ci informerà della modifica (potrebbero essere necessari alcuni minuti).',\n            'currency'      => 'L\\'impostazione della valuta preferita è stata aggiornata.',\n            'subscribed'    => 'La tua iscrizione è andata a buon fine! Non dimenticarti di iscriverti alla newsletter del Community Vote per essere avvisato quando una votazione viene effettuata. Inoltre, puoi dare un\\'occhiata al nostro discord e diventare parte della comunità',\n        ],\n        'tiers'                 => 'Gradi di Abbonamento',\n        'trial_period'          => 'Gli abbonamenti annuali prevedono una politica di cancellazione di 14 giorni. Contattaci all\\'indirizzo :email se desideri cancellare il vostro abbonamento annuale e ottenere un rimborso.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Informazioni su Potenziamenti e Declassamenti',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'I bonus rimangono abilitati fino alla fine del periodo di pagamento.',\n                    'boosts'    => 'Lo stesso accade per le campagne potenziate. Le funzioni potenziate diventano invisibili, ma non vengono eliminate quando una campagna non è più potenziata.',\n                    'kobold'    => 'Per annullare l\\'abbonamento passa al grado Coboldo.',\n                    'premium'   => 'Lo stesso accade per le campagne premium. Le funzioni premium diventano invisibili, ma non vengono eliminate quando una campagna non è più premium.',\n                ],\n                'title'     => 'Quando cancelli il tuo abbonamento',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'Il livello attuale rimarrà attivo fino alla fine del ciclo di fatturazione in corso, dopodiché verrai declassato al nuovo livello.',\n                ],\n                'provide_reason'    => 'Se è possibile, spiegaci il motivo del declassamento dell\\'abbonamento.',\n                'title'             => 'Quando declassi a un grado inferiore',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Il metodo di pagamento verrà addebitato immediatamente e avrai accesso al nuovo grado.',\n                    'prorate'   => 'Quando passi da Orsogufo a Elementale, ti verrà addebitata solo la differenza rispetto al nuovo grado.',\n                ],\n                'title'     => 'Quando passi a un grado superiore',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'Non è stato possibile addebitare la carta di credito. Ti preghiamo di aggiornare i dati della tua carta di credito e riproveremo ad addebitarla nei prossimi giorni. Se l\\'operazione non dovesse andare a buon fine, l\\'abbonamento verrà annullato.',\n            'patreon'       => 'Il tuo account è attualmente collegato a Patreon. Per favore, scollega il tuo account nelle impostazioni di :patreon prima di passare a un abbonamento a Kanka.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'count'             => 'Membro di :member',\n        'created_campaigns' => 'Le tue campagne',\n        'follow_more'       => 'Trova le campagne',\n        'followed_campaigns'=> 'Campagne seguite',\n        'new_campaign'      => 'Nuova campagna',\n        'public_campaigns'  => 'Campagne pubbliche',\n        'reorder'           => 'Riordina',\n        'updated'           => 'Aggiorna',\n    ],\n    'dashboard'         => 'Dashboard',\n    'entity-creator'    => 'Creazione Rapida',\n    'gallery'           => 'Galleria',\n    'game'              => 'Gioco',\n    'other'             => 'Altro',\n    'recent'            => 'Cambiamenti recenti',\n    'relations'         => 'Legami',\n    'settings'          => 'Impostazioni',\n    'time'              => 'Tempo',\n    'world'             => 'Mondo',\n];\n"
  },
  {
    "path": "lang/it/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => 'Mondo di :user',\n    ],\n    'character1'    => [],\n    'character2'    => [],\n    'item1'         => [],\n    'kingdom1'      => [],\n    'kingdom2'      => [],\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/it/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Abbonati a Kanka per sbloccare un maggior numero di immagini caricate, un\\'esperienza senza pubblicità, :booster e :more. Utilizziamo :stripe per gestire la fatturazione, senza che i dati della carta di credito vengano memorizzati o transitino sui nostri server.',\n        'more'  => 'altre meravigliose funzioni',\n    ],\n    'errors'    => [\n        'grace'                 => 'Il tuo attuale abbonamento finisce il :date, poi potrai riabbonarti.',\n        'invalid_card_country'  => [\n            'brl'   => 'Siamo spiacenti, ma attualmente accettiamo solo pagamenti in BRL per i clienti con carta di credito brasiliana. Se ritieni che si tratti di un errore, contattaci a :email.',\n        ],\n        'invalid_currency'      => 'L\\'abbonamento in :old non ti permette di avere un nuovo abbonamento in :new. Per favore, cambia la tua valuta in :old, o contattaci all\\'indirizzo :email se desideri cambiare valuta.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'Questa promozione non è più attiva.',\n        'invalid'   => 'Promozione sconosciuta.',\n        'only-new'  => 'Questa promozione è disponibile solo ai nuovi iscritti.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe non è stato in grado di verificare il tuo metodo di pagamento. Conseguentemente a ciò, il tuo abbonamento è stato disattivato.',\n    ],\n];\n"
  },
  {
    "path": "lang/it/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'           => 'Aggiungi un nuovo tag',\n            'add_entity'    => 'Aggiungi all\\'entità',\n        ],\n        'create'    => [\n            'attach_success'        => '{1} Aggiunto :count entità al tag :name.|[2,*] Aggiunte :count entità al tag :name.',\n            'attach_success_entity' => 'Tag aggiornati con successo per :name.',\n            'entity'                => 'Aggiungi tag a :name',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nuovo Tag',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'          => 'Discendenti',\n        'is_auto_applied'   => 'Applica automaticamente alle nuove entità',\n        'is_hidden'         => 'Nascosto dall\\'intestazione e dal tooltip',\n    ],\n    'helpers'       => [\n        'no_children'   => 'Al momento non ci sono entità con questo tag.',\n    ],\n    'hints'         => [\n        'children'          => 'Questo elenco contiene tutte le entità assegnate a questo tag o ai suoi discendenti.',\n        'is_auto_applied'   => 'Seleziona questa opzione per applicare automaticamente questo tag alle entità appena create.',\n        'is_hidden'         => 'Se selezionato, questo tag non sarà visualizzato nell\\'intestazione o nel tooltip di un\\'entità.',\n        'tag'               => 'Questo elenco contiene tutti i tag discendenti di questo tag o dei suoi tag discendenti.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Tradizioni, Guerre, Storia, Religione, Araldica',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Discendente',\n        ],\n    ],\n    'tags'          => [],\n    'transfer'      => [\n        'fail'      => 'Impossibile trasferire le entità da :tag a :newTag',\n        'success'   => 'Spostate con successo le entità da :tag a :newTag',\n        'transfer'  => 'Sposta',\n    ],\n];\n"
  },
  {
    "path": "lang/it/teams.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'lead'          => 'Rendere la creazione del tuo mondo divertente e affidabile',\n        'translations'  => 'Traduzioni',\n    ],\n    'leads' => [\n        'translators'   => 'Kanka è tradotto in molte lingue grazie a questi eccezionali collaboratori.',\n    ],\n    'people'=> [\n        'itzamna'   => [\n            'title' => 'Sviluppatore Junior',\n        ],\n        'jay'       => [\n            'title' => 'Fondatore e Capo Sviluppatore',\n        ],\n        'jon'       => [\n            'title' => 'Co-fondatore e Business Manager',\n        ],\n        'kaz'       => [\n            'title' => 'Distruttore di Bug',\n        ],\n        'laura'     => [\n            'title' => 'Social Media',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/it/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscribe' => [\n            'choose'    => 'Scegli :tier',\n            'monthly'   => ':tier al mese',\n            'yearly'    => ':tier all\\'anno',\n        ],\n    ],\n    'current'   => 'Il tuo attuale abbonamento',\n    'features'  => [\n        'api_requests'      => ':amount richieste APi/minuto',\n        'boosters'          => 'Potenziamenti Campagna',\n        'discord'           => 'Ruoli e canali :discord unici',\n        'feature_influence' => 'Dai la tua opinione sulle funzioni future',\n        'file_size'         => ':size per i caricamenti di files',\n        'nice_image'        => 'Immagini predefinite per le entità',\n        'no_ads'            => 'Nessun annuncio.',\n        'pagination'        => ':amount risultati per pagina (massimo di entità mostrate per pagina)',\n        'roadmap'           => 'Vota le nuove idee',\n    ],\n    'periods'   => [\n        'billed_monthly'    => 'Fatturato mensilmente',\n        'billed_yearly'     => 'Fatturato annualmente',\n    ],\n    'pricing'   => ':currency :amount / mese',\n    'ribbons'   => [\n        'best-value'    => 'Più conveniente',\n        'current'       => 'Abbonamento attuale',\n    ],\n    'toggle'    => [],\n];\n"
  },
  {
    "path": "lang/it/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Copia la menzione avanzata con il nome dell\\'elemento',\n        'success'           => 'Menzione avanzata dell\\'elemento copiata negli appunti.',\n    ],\n    'create'        => [\n        'success'   => 'Elemento aggiunto alla linea temporale',\n        'title'     => 'Nuovo elemento cronologico',\n    ],\n    'delete'        => [\n        'success'   => 'Elemento :element rimosso.',\n    ],\n    'edit'          => [\n        'success'   => 'Elemento aggiornato.',\n        'title'     => 'Modifica dell\\'elemento cronologico',\n    ],\n    'fields'        => [\n        'date'              => 'Data',\n        'era'               => 'Era',\n        'icon'              => 'Icona',\n        'use_entity_entry'  => 'Visualizza la voce dell\\'entità allegata di seguito. Il testo di questo elemento sarà visualizzato per primo se presente.',\n        'use_event_date'    => 'Usa la data dell\\'evento collegata.',\n    ],\n    'helpers'       => [\n        'date'              => 'Se l\\'elemento è collegato a un\\'entità evento, visualizza la data dell\\'evento.',\n        'entity_is_private' => 'L\\'entità dell\\'elemento è privata.',\n        'icon'              => 'Copia il codice CSS di un\\'icona da :fontawesome o :rpgawesome.',\n        'is_collapsed'      => 'L\\'immagine dell\\'elemento è ridotta a icona per impostazione predefinita.',\n    ],\n    'placeholders'  => [\n        'date'      => 'e.g. 42 Marzo o 1332-1337',\n        'name'      => 'Richiesto se nessuna entità è selezionata',\n        'position'  => 'Posizione nella lista degli elementi dell\\'era. Lasciare vuoto per aggiungere alla fine.',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/it/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Aggiungi una nuova era',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} Rimosse :count ere.|{1} Rimossa :count era.|[2,*] Rimosse :count ere.',\n    ],\n    'create'        => [\n        'success'   => 'Era :name creata.',\n        'title'     => 'Nuova era',\n    ],\n    'delete'        => [\n        'success'   => 'Era :name rimossa.',\n    ],\n    'edit'          => [\n        'success'   => 'Era :name aggiornata.',\n        'title'     => 'Modifica Era :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Abbreviazione',\n        'end_year'      => 'Anno finale',\n        'is_collapsed'  => 'Ridotta',\n        'start_year'    => 'Anno iniziale',\n    ],\n    'helpers'       => [\n        'eras'          => 'La linea temporale deve essere creata prima delle ere.',\n        'is_collapsed'  => 'L\\'era è ridotta per impostazione predefinita.',\n        'primary'       => 'Separa la tua linea temporale in ere. Una liena temporale deve avere almeno una era per funzionare correttamente.',\n    ],\n    'index'         => [\n        'title' => 'Ere di :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'a.C., d.C., BCE',\n        'end_year'      => 'Anno in cui l\\'era finisce. Lasciare vuoto se l\\'era è in corso.',\n        'name'          => 'Età Moderna, Età del Bronzo, Guerre Galattiche',\n        'start_year'    => 'Anno in cui l\\'era comincia. Lasciare vuoto se questa è la prima era.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/it/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Aggiungi all\\'era :era',\n        'back'          => 'Torna a :nome',\n        'save_order'    => 'Salva nuovo ordine',\n    ],\n    'create'        => [\n        'title' => 'Nuova linea temporale',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_elements' => 'Copia elementi',\n        'copy_eras'     => 'Copia ere',\n        'eras'          => 'Ere',\n        'reverse_order' => 'Inverti l\\'ordine delle ere',\n    ],\n    'helpers'       => [\n        'no_era_v2'     => 'Questa linea temporale non ha attualmente ere. Aggiungi una o più ere, dopodiché potrai aggiungere elementi alle ere qui.',\n        'reverse_order' => 'Abilita per visualizzare le ere in ordine cronologico inverso (prima l\\'era più antica)',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Principale, Cronache del mondo, Storia del Regno',\n    ],\n    'reorder'       => [\n        'empty'     => 'Aggiungi ere e altri elementi alla tua Linea Temporale per poterla riordinare.',\n        'success'   => 'Linea temporale riordinata con successo.',\n        'title'     => 'Riordina la linea temporale',\n    ],\n    'show'          => [],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/it/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'Un vero e proprio paroliere! Vincitore di un prompt di worldbuilding.',\n    ],\n    'fields'        => [\n        'achievements'      => 'Traguardi',\n        'banned'            => 'Questo utente è stato bannato',\n        'entities_created'  => 'Entità create :help :count',\n        'member_since'      => 'Membro da :date',\n        'public_campaigns'  => 'Campagne pubbliche',\n        'subscriber_since'  => 'Iscritto da :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'Questo valore viene ricalcolato quotidianamente',\n    ],\n    'title'         => ':name Profilo',\n];\n"
  },
  {
    "path": "lang/it/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => ':attribute deve essere accettato.',\n    'active_url'           => ':attribute non è un URL valido.',\n    'after'                => ':attribute deve essere una data successiva al :date.',\n    'after_or_equal'       => ':attribute deve essere una data successiva o uguale al :date.',\n    'alpha'                => ':attribute può contenere solo lettere.',\n    'alpha_dash'           => ':attribute può contenere solo lettere, numeri e trattini.',\n    'alpha_num'            => ':attribute può contenere solo lettere e numeri.',\n    'array'                => ':attribute deve essere un array.',\n    'before'               => ':attribute deve essere una data precedente al :date.',\n    'before_or_equal'      => ':attribute deve essere una data precedente o uguale al :date.',\n    'between'              => [\n        'numeric' => ':attribute deve trovarsi tra :min - :max.',\n        'file'    => ':attribute deve trovarsi tra :min - :max kilobyte.',\n        'string'  => ':attribute deve trovarsi tra :min - :max caratteri.',\n        'array'   => ':attribute deve avere tra :min - :max elementi.',\n    ],\n    'boolean'              => 'Il campo :attribute deve essere vero o falso.',\n    'confirmed'            => 'Il campo di conferma per :attribute non coincide.',\n    'date'                 => ':attribute non è una data valida.',\n    'date_equals'          => ':attribute deve essere una data e uguale a :date.',\n    'date_format'          => ':attribute non coincide con il formato :format.',\n    'different'            => ':attribute e :other devono essere differenti.',\n    'digits'               => ':attribute deve essere di :digits cifre.',\n    'digits_between'       => ':attribute deve essere tra :min e :max cifre.',\n    'dimensions'           => \"Le dimensioni dell'immagine di :attribute non sono valide.\",\n    'distinct'             => ':attribute contiene un valore duplicato.',\n    'email'                => ':attribute non è valido.',\n    'exists'               => ':attribute selezionato non è valido.',\n    'file'                 => ':attribute deve essere un file.',\n    'filled'               => 'Il campo :attribute deve contenere un valore.',\n    'gt'                   => [\n        'numeric' => ':attribute deve essere maggiore di :value.',\n        'file'    => ':attribute deve essere maggiore di :value kilobyte.',\n        'string'  => ':attribute deve contenere più di :value caratteri.',\n        'array'   => ':attribute deve contenere più di :value elementi.',\n    ],\n    'gte'                  => [\n        'numeric' => ':attribute deve essere uguale o maggiore di :value.',\n        'file'    => ':attribute deve essere uguale o maggiore di :value kilobyte.',\n        'string'  => ':attribute deve contenere un numero di caratteri uguale o maggiore di :value.',\n        'array'   => ':attribute deve contenere un numero di elementi uguale o maggiore di :value.',\n    ],\n    'image'                => \":attribute deve essere un'immagine.\",\n    'in'                   => ':attribute selezionato non è valido.',\n    'in_array'             => 'Il valore del campo :attribute non esiste in :other.',\n    'integer'              => ':attribute deve essere un numero intero.',\n    'ip'                   => ':attribute deve essere un indirizzo IP valido.',\n    'ipv4'                 => ':attribute deve essere un indirizzo IPv4 valido.',\n    'ipv6'                 => ':attribute deve essere un indirizzo IPv6 valido.',\n    'json'                 => ':attribute deve essere una stringa JSON valida.',\n    'lt'                   => [\n        'numeric' => ':attribute deve essere minore di :value.',\n        'file'    => ':attribute deve essere minore di :value kilobyte.',\n        'string'  => ':attribute deve contenere meno di :value caratteri.',\n        'array'   => ':attribute deve contenere meno di :value elementi.',\n    ],\n    'lte'                  => [\n        'numeric' => ':attribute deve essere minore o uguale a :value.',\n        'file'    => ':attribute deve essere minore o uguale a :value kilobyte.',\n        'string'  => ':attribute deve contenere un numero di caratteri minore o uguale a :value.',\n        'array'   => ':attribute deve contenere un numero di elementi minore o uguale a :value.',\n    ],\n    'max'                  => [\n        'numeric' => ':attribute non può essere superiore a :max.',\n        'file'    => ':attribute non può essere superiore a :max kilobyte.',\n        'string'  => ':attribute non può contenere più di :max caratteri.',\n        'array'   => ':attribute non può avere più di :max elementi.',\n    ],\n    'mimes'                => ':attribute deve essere del tipo: :values.',\n    'mimetypes'            => ':attribute deve essere del tipo: :values.',\n    'min'                  => [\n        'numeric' => ':attribute deve essere almeno :min.',\n        'file'    => ':attribute deve essere almeno di :min kilobyte.',\n        'string'  => ':attribute deve contenere almeno :min caratteri.',\n        'array'   => ':attribute deve avere almeno :min elementi.',\n    ],\n    'not_in'               => 'Il valore selezionato per :attribute non è valido.',\n    'not_regex'            => 'Il formato di :attribute non è valido.',\n    'numeric'              => ':attribute deve essere un numero.',\n    'present'              => 'Il campo :attribute deve essere presente.',\n    'regex'                => 'Il formato del campo :attribute non è valido.',\n    'required'             => 'Il campo :attribute è richiesto.',\n    'required_if'          => 'Il campo :attribute è richiesto quando :other è :value.',\n    'required_unless'      => 'Il campo :attribute è richiesto a meno che :other sia in :values.',\n    'required_with'        => 'Il campo :attribute è richiesto quando :values è presente.',\n    'required_with_all'    => 'Il campo :attribute è richiesto quando :values sono presenti.',\n    'required_without'     => 'Il campo :attribute è richiesto quando :values non è presente.',\n    'required_without_all' => 'Il campo :attribute è richiesto quando nessuno di :values è presente.',\n    'same'                 => ':attribute e :other devono coincidere.',\n    'size'                 => [\n        'numeric' => ':attribute deve essere :size.',\n        'file'    => ':attribute deve essere :size kilobyte.',\n        'string'  => ':attribute deve contenere :size caratteri.',\n        'array'   => ':attribute deve contenere :size elementi.',\n    ],\n    'starts_with'          => ':attribute deve iniziare con uno dei seguenti: :values',\n    'string'               => ':attribute deve essere una stringa.',\n    'timezone'             => ':attribute deve essere una zona valida.',\n    'unique'               => ':attribute è stato già utilizzato.',\n    'uploaded'             => ':attribute non è stato caricato.',\n    'url'                  => 'Il formato del campo :attribute non è valido.',\n    'uuid'                 => ':attribute deve essere un UUID valido.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        'name'                  => 'nome',\n        'username'              => 'nome utente',\n        'first_name'            => 'nome',\n        'last_name'             => 'cognome',\n        'password_confirmation' => 'conferma password',\n        'city'                  => 'città',\n        'country'               => 'paese',\n        'address'               => 'indirizzo',\n        'phone'                 => 'telefono',\n        'mobile'                => 'cellulare',\n        'age'                   => 'età',\n        'sex'                   => 'sesso',\n        'gender'                => 'genere',\n        'day'                   => 'giorno',\n        'month'                 => 'mese',\n        'year'                  => 'anno',\n        'hour'                  => 'ora',\n        'minute'                => 'minuto',\n        'second'                => 'secondo',\n        'title'                 => 'titolo',\n        'content'               => 'contenuto',\n        'description'           => 'descrizione',\n        'excerpt'               => 'estratto',\n        'date'                  => 'data',\n        'time'                  => 'ora',\n        'available'             => 'disponibile',\n        'size'                  => 'dimensione',\n    ],\n];\n"
  },
  {
    "path": "lang/it/visibilities.php",
    "content": "<?php\n\nreturn [\n    'title'     => 'Aggiorna Visibilità',\n    'toast'     => 'Visibilità aggiornata con successo.',\n    'tooltip'   => 'Fai clic qui per conoscere le varie opzioni di visibilità.',\n];\n"
  },
  {
    "path": "lang/nl/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'create'        => [\n        'title' => 'Nieuwe Vaardigheid',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'charges'   => 'Ladingen',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'placeholders'  => [\n        'charges'   => 'Hoeveelheid ladingen. Referentie kenmerken met {Level}*{CHA}',\n        'name'      => 'Vuurbal, Waarschuwing, Sluwe Aanval',\n        'type'      => 'Spreuk, Prestatie, Aanval',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'create'                => [\n        'title' => 'Nieuw attribuutsjabloon',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [],\n    'hints'                 => [\n        'automatic'                 => 'Attributen worden automatisch toegepast vanuit de :link Attribuutsjabloon',\n        'entity_type'               => 'Indien ingesteld, zal bij het maken van een nieuwe entiteit van dit type automatisch deze attribuutsjabloon worden toegepast.',\n        'parent_attribute_template' => 'Dit attribuutsjabloon kan gerelateerd zijn aan een ander attribuutsjabloon. Bij het toepassen van deze attribuutsjabloon worden deze en al zijn bovenliggende entiteiten toegepast.',\n    ],\n    'index'                 => [],\n    'placeholders'          => [\n        'name'  => 'Naam van de attribuutsjabloon',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/nl/auth.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n    'failed'    => 'Deze combinatie van e-mailadres en wachtwoord is niet geldig.',\n    'helpers'   => [\n        'password'  => 'Wachtwoord weergeven / verbergen',\n    ],\n    'login'     => [\n        'fields'                => [\n            'email'     => 'E-mail',\n            'password'  => 'Wachtwoord',\n        ],\n        'or'                    => 'OF',\n        'password_forgotten'    => 'Wachtwoord vergeten?',\n        'submit'                => 'Log in',\n        'title'                 => 'Log in',\n    ],\n    'register'  => [\n        'already'   => 'Heb je al een account? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Er is al een account met dit e-mailadres geregistreerd.',\n            'general_error'         => 'Er is een fout opgetreden bij het registreren van uw account. Probeer het a.u.b. opnieuw.',\n        ],\n        'fields'    => [\n            'email'     => 'E-mail',\n            'name'      => 'Gebruikersnaam',\n            'password'  => 'Wachtwoord',\n        ],\n        'submit'    => 'Registreren',\n        'title'     => 'Registreren',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'E-mailadres',\n            'password'              => 'Wachtwoord',\n            'password_confirmation' => 'Bevestig uw wachtwoord',\n        ],\n        'send'      => 'Stuur Wachtwoord Reset Link',\n        'submit'    => 'Wachtwoord opnieuw instellen',\n        'title'     => 'Wachtwoord opnieuw instellen',\n    ],\n    'throttle'  => 'Te veel mislukte loginpogingen. Probeer het over :seconds seconden nogmaals.',\n];\n"
  },
  {
    "path": "lang/nl/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuwe Snelle Link',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'title' => 'Snelle Link :name',\n    ],\n    'fields'        => [\n        'dashboard'     => 'Dashboard',\n        'filters'       => 'Filters',\n        'menu'          => 'Menu',\n        'position'      => 'Positie',\n        'random_type'   => 'Willekeurig Entiteit Type',\n        'selector'      => 'Quick Link Configuratie',\n    ],\n    'helpers'       => [\n        'dashboard' => 'Laat de snelkoppeling een van de custom dashboards van de campaign targeten.',\n        'entity'    => 'Stel deze snelle link in om rechtstreeks naar een entiteit te gaan. Het :tab veld bepaalt welke van de tabbladen de focus heeft. Het :menu veld bepaalt welke subpagina van de entiteit wordt geopend.',\n        'position'  => 'Gebruik dit veld om te bepalen in welke oplopende volgorde de links in het menu verschijnen.',\n        'random'    => 'Gebruik dit veld om een snelle link naar een willekeurige entiteit te laten verwijzen. Je kunt de link filteren om alleen naar een specifiek entiteit type te gaan.',\n        'selector'  => 'Configureer waar deze snelle link naartoe gaat wanneer een gebruiker erop klikt in de zijbalk.',\n        'type'      => 'Stel deze snelle link in om rechtstreeks naar een lijst met entiteiten te gaan. Om de resultaten te filteren, kopieer je delen van de url in de gefilterde entiteitenlijst na het :? teken op het :filter veld.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'filters'   => 'location_id=15&type=city',\n        'menu'      => 'Menu subpagina (gebruik de laatste tekst van de url)',\n        'tab'       => 'invoer, relaties, notities',\n    ],\n    'random_types'  => [\n        'any'   => 'Elke entiteit',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'success'   => 'Weer toegevoegd.',\n        'title'     => 'Nieuw Weer Effect',\n    ],\n    'destroy'       => [\n        'success'   => 'Weer verwijderd.',\n    ],\n    'edit'          => [\n        'success'   => 'Weer bijgewerkt.',\n        'title'     => 'Werk Weer bij',\n    ],\n    'fields'        => [\n        'effect'        => 'Effect',\n        'name'          => 'Naam',\n        'precipitation' => 'Neerslag',\n        'temperature'   => 'Temperatuur',\n        'weather'       => 'Weer',\n        'wind'          => 'Wind',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Donder',\n            'cloud'                 => 'Bewolkt',\n            'cloud-rain'            => 'Regenachtig',\n            'cloud-showers-heavy'   => 'Zware Regen',\n            'cloud-sun'             => 'Bewolkt en Zonnig',\n            'cloud-sun-rain'        => 'Wolk, Zon en Regen',\n            'meteor'                => 'Meteoor',\n            'smog'                  => 'Smog',\n            'snowflake'             => 'Sneeuw',\n            'sun'                   => 'Zonnig',\n            'wind'                  => 'Winderig',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Magisch of natuurlijk effect',\n        'name'          => 'Optionele aangepaste weertekst',\n        'precipitation' => 'Hoeveelheid water',\n        'temperature'   => 'Dagelijks hoog en laag',\n        'wind'          => 'Windsnelheden',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Voeg een tijdperk toe',\n        'add_intercalary'   => 'Voeg schrikkeldagen toe',\n        'add_month'         => 'Voeg een maand toe',\n        'add_moon'          => 'Voeg een maan toe',\n        'add_season'        => 'Voeg een seizoen toe',\n        'add_week'          => 'Voeg een benoemde week toe',\n        'add_weekday'       => 'Voeg een weekdag toe',\n        'add_year'          => 'Voeg een jaarnaam toe',\n        'set_today'         => 'Instellen als huidige dag',\n        'today'             => 'Vandaag',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Vindt elk jaar plaats',\n    ],\n    'create'        => [\n        'title' => 'Nieuwe Kalender',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Kalender datum bijgewerkt',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Kalender gebeurtenis gemaakt.',\n            'title'     => 'Voeg een Kalender Gebeurtenis toe aan :name',\n        ],\n        'destroy'   => 'Gebeurtenis verwijderd uit kalender \\':name\\'.',\n        'edit'      => [\n            'success'   => 'Kalender gebeurtenis bijgewerkt.',\n            'title'     => 'Werk Kalender Gebeurtenis bij voor :naam',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Je bewerkt een herinnering die in de kalender :calendar staat.',\n        ],\n        'success'   => 'Gebeurtenis \\':event\\' toegevoegd aan de kalender',\n    ],\n    'events'        => [],\n    'fields'        => [\n        'comment'           => 'Opmerking',\n        'current_day'       => 'Huidige Dag',\n        'current_month'     => 'Huidige Maand',\n        'current_year'      => 'Huidig Jaar',\n        'date'              => 'Huidige Datum',\n        'is_incrementing'   => 'Vooruitgaande Datum',\n        'is_recurring'      => 'Terugkerend',\n        'leap_year_amount'  => 'Voeg Dagen toe',\n        'leap_year_month'   => 'Maand',\n        'leap_year_offset'  => 'Elke',\n        'leap_year_start'   => 'Schrikkeljaar',\n        'length'            => 'Gebeurtenis Duur',\n        'length_days'       => ':count dag|:count dagen',\n        'months'            => 'Maanden',\n        'moons'             => 'Manen',\n        'parameters'        => 'Parameters',\n        'recurring_until'   => 'Terugkerend tot jaar',\n        'reset'             => 'Wekelijkse reset',\n        'seasons'           => 'Seizoenen',\n        'start_offset'      => 'Begin offset',\n        'suffix'            => 'Suffix',\n        'week_names'        => 'Week Namen',\n        'weekdays'          => 'Week Dagen',\n    ],\n    'helpers'       => [\n        'month_type'    => 'Schrikkelmaanden gebruiken geen weekdagen, maar hebben nog steeds invloed op manen en seizoenen.',\n        'start_offset'  => 'Standaard begint de kalender op de eerste weekdag van jaar 0. Het wijzigen van dit veld heeft invloed op de plaats van de eerste dag van de kalender.',\n    ],\n    'hints'         => [\n        'is_incrementing'   => 'Bij vooruitgaande kalenders wordt de huidige datum automatisch verhoogd om 00:00 UTC.',\n        'months'            => 'Je kalender moet minimaal 2 maanden bevatten.',\n        'moons'             => 'Door manen toe te voegen, verschijnen ze bij elke volle en nieuwe maan in de kalender. Als de periode van volle maan langer is dan 10 dagen, worden ook afnemende en wassende manen weergegeven.',\n        'parent_calendar'   => 'Als je de kalender een bovenliggende kalender geeft, worden de herinneringen en weerseffecten van de bovenliggende kalender meegenomen.',\n        'reset'             => 'Begin altijd aan het begin van de maand of het jaar op de eerste weekdag.',\n        'seasons'           => 'Maak seizoenen voor je kalender door aan te geven wanneer ze beginnen. Kanka zorgt voor de rest.',\n        'weekdays'          => 'Stel je weekdag namen in. Er zijn minimaal 2 werkdagen vereist.',\n        'weeks'             => 'Definieer een aantal namen voor de belangrijkste weken van je kalender.',\n        'years'             => 'Sommige jaren zijn zo belangrijk dat ze hun eigen naam hebben.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month' => 'Maand',\n        'year'  => 'Jaar',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Jaar Wisselaar',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Intercalary',\n        'standard'      => 'Standaard',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'month' => 'Maandelijks',\n                'year'  => 'Jaarlijks',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Geen',\n            'month' => 'Maandelijks',\n            'year'  => 'Jaarlijks',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Schrikkeldagen',\n        'leap_year'     => 'Schrikkeljaar',\n        'months'        => 'Maanden',\n        'weeks'         => 'Weken',\n        'years'         => 'Genoemde Jaren',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Duur in dagen',\n            'month'     => 'Aan het einde van welke maand',\n            'name'      => 'Naam van intercalatie',\n        ],\n        'month'         => [\n            'alias' => 'Maand Alias',\n            'length'=> 'Dagen',\n            'name'  => 'Maand Naam',\n            'type'  => 'Type',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Volle maan elke (dagen)',\n            'name'      => 'Maan Naam',\n            'offset'    => 'Eerste volle maan offset',\n        ],\n        'seasons'       => [\n            'day'   => 'Dag start',\n            'month' => 'Maand start',\n            'name'  => 'Seizoen Naam',\n        ],\n        'weeks'         => [\n            'name'      => 'Week Naam',\n            'number'    => 'Nummer',\n        ],\n        'year'          => [\n            'name'      => 'Jaar Naam',\n            'number'    => 'Jaar',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Kleur',\n        'comment'           => 'Geboortedag, festival, zonnestilstand',\n        'date'              => 'De huidige datum',\n        'leap_year_amount'  => 'Aantal dagen toegevoegd aan een schrikkeljaar',\n        'leap_year_month'   => 'Maand waarop dagen worden opgeteld',\n        'leap_year_offset'  => 'Elke hoeveel jaar is een schrikkeljaar',\n        'leap_year_start'   => 'Eerste jaar dat een schrikkeljaar is',\n        'length'            => 'Gebeurtenis duur in dagen',\n        'months'            => 'Aantal maanden in een jaar',\n        'recurring_until'   => 'Laatste terugkerend jaar (leeg laten voor altijd terugkerend)',\n        'seasons'           => 'Aantal seizoenen',\n        'suffix'            => 'Huidig Tijdperk Suffix (nC, vC)',\n        'type'              => 'Type van de kalender',\n        'weekdays'          => 'Aantal dagen in een week',\n    ],\n    'show'          => [\n        'missing_details'   => 'Deze kalender kan niet worden weergegeven. Kalenders hebben minimaal 2 maanden en 2 weekdagen nodig om correct te worden weergegeven.',\n        'tabs'              => [\n            'events'    => 'Kalender Gebeurtenissen',\n            'weather'   => 'Weer',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/nl/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'accept'    => 'Accepteren',\n        'reject'    => 'Afwijzen',\n    ],\n    'apply'         => [\n        'apply'         => 'Toepassen',\n        'help'          => 'Deze campaign staat open voor nieuwe leden. Meld je aan om mee te doen door het formulier in te vullen. Je ontvangt een melding wanneer de campaign beheerders je aanvraag beoordelen.',\n        'remove_text'   => 'jouw inzending',\n        'success'       => [\n            'apply' => 'Je aanvraag is opgeslagen. Je kunt het op elk moment wijzigen of annuleren. Je krijgt een melding wanneer de campaign beheerders het beoordelen.',\n            'remove'=> 'Je aanvraag is verwijderd.',\n            'update'=> 'Je aanvraag is bijgewerkt. Je kunt het op elk moment wijzigen of annuleren. Je krijgt een melding wanneer de campaign beheerders het beoordelen.',\n        ],\n        'title'         => 'Join :name',\n    ],\n    'errors'        => [],\n    'fields'        => [\n        'application'   => 'Aanvraging',\n    ],\n    'helpers'       => [],\n    'placeholders'  => [\n        'note'  => 'Schrijf je aanvraag op om mee te doen aan de campaign',\n    ],\n    'update'        => [\n        'approve'   => 'Selecteer de rol waaraan de gebruiker zal worden toegevoegd zoals in je campaign.',\n        'approved'  => 'Aanvraag goedgekeurd.',\n        'reject'    => 'Schrijf een optioneel bericht aan de gebruiker waarom je zijn aanvraag afwijst.',\n        'rejected'  => 'Aanvraag afgewezen',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Voeg een nieuwe standaard afbeelding toe',\n    ],\n    'create'    => [\n        'error'     => 'Fout bij het opslaan van de nieuwe standaard entiteitsafbeeldingen. Is :type al ingesteld?',\n        'success'   => 'Standaard entiteitsafbeelding voor :type gemaakt.',\n        'title'     => 'Nieuwe standaard entiteitsafbeelding',\n    ],\n    'destroy'   => [\n        'success'   => 'Standaard entiteitsafbeelding voor :type verwijderd.',\n    ],\n    'index'     => [],\n];\n"
  },
  {
    "path": "lang/nl/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close' => 'Sluiten',\n        'save'  => 'Opslaan',\n    ],\n    'destroy'       => [\n        'success'   => 'Afbeelding :name verwijderd.',\n    ],\n    'fields'        => [\n        'created_by'    => 'Geupload door',\n        'ext'           => 'Ext',\n        'folder'        => 'Map',\n        'image_used_in' => '{1}Gebruikt als afbeelding van één entiteit.|[2,*]Gebruikt als afbeelding van :count entiteiten.',\n        'name'          => 'Naam',\n        'size'          => 'Grootte',\n    ],\n    'new_folder'    => [\n        'title' => 'Nieuwe map',\n    ],\n    'no_folder'     => 'Geen map',\n    'placeholders'  => [\n        'search'    => 'Naam afbeelding zoeken...',\n    ],\n    'title'         => 'Campaign :campaign Galerij',\n    'update'        => [\n        'success'   => 'Afbeelding gewijzigd.',\n    ],\n    'uploader'      => [\n        'add'           => 'Voeg nieuwe toe',\n        'new_folder'    => 'Nieuwe Map',\n        'or'            => 'of',\n        'select_file'   => 'Selecteer een bestand',\n        'well'          => 'Drop bestand om te uploaden',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'disable'           => 'Schakel plugin uit',\n        'enable'            => 'Schakel plugin in',\n        'update'            => 'Werk plugin bij',\n        'update_available'  => 'Update beschikbaar!',\n    ],\n    'destroy'       => [\n        'success'   => 'Plugin :plugin verwijderd.',\n    ],\n    'disabled'      => [\n        'success'   => 'Plugin :plugin uitgeschakeld',\n    ],\n    'empty_list'    => 'De campaign heeft momenteel geen plugins. Ga naar de marktplaats om er een paar te installeren en kom terug om ze te activeren.',\n    'enabled'       => [\n        'success'   => 'Plugin :plugin ingeschakeld',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Ongeldige plugin',\n    ],\n    'fields'        => [\n        'name'      => 'Plugin naam',\n        'status'    => 'Status',\n        'type'      => 'Plugin type',\n    ],\n    'info'          => [\n        'helper'    => 'Wanneer er een nieuwe versie van een plugin wordt uitgebracht, kan je deze bijwerken naar de nieuwste versie voor je campaign.',\n        'title'     => 'Plugin :plugin updates',\n        'updates'   => 'Updates',\n    ],\n    'status'        => [\n        'disabled'  => 'Uitgeschakeld',\n        'enabled'   => 'Ingeschakeld',\n    ],\n    'templates'     => [\n        'name'  => ':name door :user',\n    ],\n    'title'         => 'Campaign :name Plugins',\n    'types'         => [\n        'attribute' => 'Attribuutsjabloon',\n        'pack'      => 'Content Pack',\n        'theme'     => 'Thema',\n    ],\n    'update'        => [\n        'success'   => 'Plugin :plugin bijgewerkt.',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'   => 'Herstellen',\n    ],\n    'error'     => 'Er is een fout opgetreden bij het herstellen van entiteiten.',\n    'fields'    => [\n        'deleted'   => 'Verwijderd',\n    ],\n    'title'     => 'Entiteitsherstel voor :campaign',\n];\n"
  },
  {
    "path": "lang/nl/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Kalenders',\n            'title' => 'Tijdsbewaarder',\n        ],\n        'murderer'  => [\n            'goal'  => 'Overleden personages',\n            'title' => 'Moordenaar',\n        ],\n    ],\n    'targets'       => [],\n    'titles'        => [\n        'calendars' => 'Tijdsbewaarder level :level',\n        'characters'=> 'Naam Gever level :level',\n        'dead'      => 'Moordenaar level :level',\n        'families'  => 'Familie planning level :level',\n        'locations' => 'Bouwer level :level',\n        'quests'    => 'Mastermind level :level',\n        'races'     => 'Fokker level :level',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/campaigns.php",
    "content": "<?php\n\nreturn [\n    'create'                            => [\n        'success'   => 'Campaign gemaakt.',\n        'title'     => 'Nieuwe Campaign',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Campaign bijgewerkt.',\n    ],\n    'entity_note_visibility'            => [],\n    'entity_personality_visibilities'   => [\n        'private'   => 'Nieuwe personages hebben standaard hun persoonlijkheid privé.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Nieuwe entiteiten zijn privé',\n    ],\n    'errors'                            => [\n        'access'        => 'Je hebt geen toegang tot deze campaign.',\n        'unknown_id'    => 'Onbekende Campaign.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'Boosted door',\n        'entity_count'              => 'Entiteit Telling',\n        'entry'                     => 'Campaign beschrijving',\n        'followers'                 => 'Volgers',\n        'header_image'              => 'Header Afbeelding',\n        'image'                     => 'Afbeelding',\n        'locale'                    => 'Lokale',\n        'name'                      => 'Naam',\n        'open'                      => 'Open voor sollicitaties',\n        'public_campaign_filters'   => 'Openbare Campaign Filters',\n        'superboosted'              => 'Superboosted door',\n        'system'                    => 'Systeem',\n        'theme'                     => 'Thema',\n    ],\n    'following'                         => 'Volgend',\n    'helpers'                           => [\n        'boosted'                   => 'Sommige functies zijn ontgrendeld omdat deze campaign een boost krijgt. Lees meer op de :settings pagina.',\n        'css'                       => 'Schrijf je eigen CSS die in de pagina\\'s van je campaign wordt geladen. Houd er rekening mee dat elk misbruik van deze functie kan leiden tot het verwijderen van je aangepaste CSS. Herhaalde of ernstige overtredingen kunnen ertoe leiden dat je campaign wordt verwijderd.',\n        'excerpt'                   => 'Het campaign excerpt wordt op het dashboard weergegeven, dus schrijf een paar zinnen die je wereld introduceren. Houd het kort voor het beste resultaat.',\n        'hide_history'              => 'Schakel deze optie in om de geschiedenis van entiteiten te verbergen voor niet-beheerders van de campaign.',\n        'hide_members'              => 'Schakel deze optie in om de lijst met campaign leden te verbergen voor niet-beheerders.',\n        'locale'                    => 'De taal waarin je campaign is geschreven. Dit wordt gebruikt voor het genereren van inhoud en het groeperen van openbare campaigns.',\n        'name'                      => 'Je campaign / wereld kan elke naam hebben, zolang deze maar minimaal 4 letters of cijfers bevat.',\n        'public_campaign_filters'   => 'Help anderen de campaign te vinden naast andere openbare campaigns door de volgende informatie te verstrekken.',\n        'system'                    => 'Als je campaign openbaar zichtbaar is, wordt het systeem weergegeven op de :link pagina.',\n        'systems'                   => 'Om te voorkomen dat gebruikers volgestopt raken met opties, zijn sommige functies van Kanka alleen beschikbaar met specifieke RPG-systemen (dwz het D & D 5e monster stat-blok). Als je hier ondersteunde systemen toevoegt, worden deze functies ingeschakeld.',\n        'theme'                     => 'Forceer het thema voor de campaign, waarbij de voorkeur van een gebruiker wordt overschreven.',\n        'view_public'               => 'Om je campaign te bekijken zoals een openbare kijker dat zou doen, open je :link in een incognitovenster.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Kopieer de link naar je klembord',\n            'link'  => 'Nieuwe Link',\n        ],\n        'create'                => [\n            'buttons'   => [\n                'create'    => 'Maak uitnodiging',\n            ],\n            'title'     => 'Nodig iemand uit voor je campaign',\n        ],\n        'destroy'               => [\n            'success'   => 'Uitnodiging verwijderd.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Deze token is al gebruikt of de campaign bestaat niet meer.',\n            'invalid_token'     => 'Dit token is niet meer geldig.',\n        ],\n        'fields'                => [\n            'created'   => 'Verstuurd',\n            'role'      => 'Rol',\n            'type'      => 'Type',\n        ],\n        'unlimited_validity'    => 'Onbeperkt',\n    ],\n    'leave'                             => [\n        'confirm'   => 'Weet je zeker dat je de :name campaign wilt verlaten? Je hebt er geen toegang meer toe, tenzij een beheerder van de campagne je opnieuw uitnodigt.',\n        'error'     => 'Kan de campaign niet verlaten.',\n        'success'   => 'Je hebt de campaign verlaten.',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'switch'        => 'Wissel',\n            'switch-back'   => 'Terug naar mijn gebruiker',\n        ],\n        'fields'                => [\n            'joined'        => 'Aangesloten',\n            'last_login'    => 'Laatste Login',\n            'name'          => 'Gebruiker',\n            'role'          => 'Rol',\n            'roles'         => 'Rollen',\n        ],\n        'helpers'               => [\n            'switch'    => 'Wissel naar deze gebruiker',\n        ],\n        'impersonating'         => [\n            'message'   => 'Je bekijkt de campaign als een andere gebruiker. Sommige functies zijn uitgeschakeld, maar de rest werkt precies zoals de gebruiker het zou zien. Om terug te schakelen naar jouw gebruiker, gebruik je de knop Wissel Terug op de plaats waar de knop Uitloggen zich gewoonlijk bevindt.',\n            'title'     => ':name aan het imiteren',\n        ],\n        'invite'                => [\n            'description'   => 'Je kunt vrienden uitnodigen om deel te nemen aan je campaign door hen een Uitnodiging Link te geven. Na het accepteren van hun uitnodiging, worden ze toegevoegd als lid in de gevraagde rol. Je kunt ze ook een verzoek per e-mail sturen.',\n            'more'          => 'Je kunt meer rollen toevoegen via de :link.',\n            'title'         => 'Uitnodiging',\n        ],\n        'roles'                 => [\n            'member'    => 'Lid',\n            'owner'     => 'Beheerder',\n            'player'    => 'Speler',\n            'public'    => 'Openbaar',\n            'viewer'    => 'Kijker',\n        ],\n        'switch_back_success'   => 'Je bent nu terug bij je oorspronkelijke gebruiker.',\n    ],\n    'open_campaign'                     => [],\n    'panels'                            => [\n        'dashboard' => 'Dashboard',\n        'setup'     => 'Opstelling',\n        'sharing'   => 'Delen',\n        'systems'   => 'Systemen',\n        'ui'        => 'Interface',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Taal code',\n        'name'      => 'Jouw campaign naam',\n        'system'    => 'D&D, Pathfinder, Fate, DSA',\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'   => 'Voeg een rol toe',\n        ],\n        'admin_role'    => 'Beheerder rol',\n        'create'        => [\n            'success'   => 'Rol gemaakt.',\n            'title'     => 'Maak een nieuwe rol aan voor :name',\n        ],\n        'destroy'       => [\n            'success'   => 'Rol verwijderd.',\n        ],\n        'edit'          => [\n            'success'   => 'Rol bijgewerkt.',\n            'title'     => 'Wijzig Rol :name',\n        ],\n        'fields'        => [\n            'name'          => 'Naam',\n            'permissions'   => 'Permissies',\n            'type'          => 'Type',\n            'users'         => 'Gebruikers',\n        ],\n        'helper'        => [\n            '1' => 'Een campaign kan zoveel rollen hebben als je wilt. De rol \"Beheerder\" heeft automatisch toegang tot alles in een campaign, maar elke andere rol kan specifieke rechten hebben voor verschillende soorten entiteiten (personage, locatie, enz.).',\n            '2' => 'Entiteiten kunnen meer verfijnde machtigingen hebben door het tabblad \"Machtigingen\" van een entiteit te bekijken. Dit tabblad wordt weergegeven zodra je campaign meerdere rollen of leden heeft.',\n            '3' => 'Men kan ofwel kiezen voor een \"opt-out\" systeem, waarbij rollen toegang krijgen om alle entiteiten te bekijken, en het selectievakje \"Privé\" op entiteiten gebruiken om ze te verbergen. Of men kan rollen niet veel machtigingen geven, maar elke entiteit zo instellen dat deze afzonderlijk zichtbaar is.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'De openbare rol heeft machtigingen, maar de campaign is privé. Je kunt deze instelling wijzigen op het tabblad Delen wanneer je de campaign bewerkt.',\n            'role_permissions'      => 'Schakel de rol \\':name\\' in om de volgende acties op alle entiteiten uit te voeren.',\n        ],\n        'members'       => 'Leden',\n        'permissions'   => [\n            'actions'   => [\n                'add'       => 'Maak',\n                'dashboard' => 'Dashboard',\n                'delete'    => 'Verwijder',\n                'edit'      => 'Wijzig',\n                'manage'    => 'Beheer',\n                'members'   => 'Leden',\n                'permission'=> 'Permissies',\n                'read'      => 'Bekijk',\n                'toggle'    => 'Verander voor alle',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Naam van de rol',\n        ],\n        'title'         => 'Campaign :name Rollen',\n        'types'         => [\n            'owner'     => 'Beheerder',\n            'public'    => 'Openbaar',\n            'standard'  => 'Standaard',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'   => 'Voeg een lid toe',\n            ],\n            'create'    => [\n                'success'   => 'Gebruiker toegevoegd aan de rol.',\n                'title'     => 'Voeg een lid toe aan de :name rol',\n            ],\n            'destroy'   => [\n                'success'   => 'Gebruiker verwijderd van de rol.',\n            ],\n            'fields'    => [\n                'name'  => 'Naam',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'   => [\n            'enable'    => 'Inschakelen',\n        ],\n        'boosted'   => 'Deze functie is in vroege toegang en momenteel alleen beschikbaar voor :boosted.',\n        'helpers'   => [\n            'abilities'     => 'Maak vaardigheden, of het nu gaat om prestaties, spreuken of krachten die aan entiteiten kunnen worden toegewezen.',\n            'calendars'     => 'Een plek om de kalenders van je wereld te definiëren.',\n            'characters'    => 'De mensen die jouw wereld bewonen.',\n            'conversations' => 'Fictieve conversaties tussen personages of tussen campaign gebruikers. Deze module is verouderd.',\n            'dice_rolls'    => 'Voor degenen die Kanka gebruiken voor RPG campaigns, een manier om met dobbelstenen te werken. Deze module is verouderd.',\n            'events'        => 'Feestdagen, festivals, rampen, verjaardagen, oorlogen.',\n            'families'      => 'Clans of families, hun relaties en hun leden.',\n            'items'         => 'Wapens, voertuigen, relikwieën, potions.',\n            'journals'      => 'Observaties geschreven door personages of sessie voorbereiding voor de dungeon master.',\n            'locations'     => 'Planeten, vliegtuigen, continenten, rivieren, staten, nederzettingen, tempels, herbergen.',\n            'maps'          => 'Upload kaarten met lagen en markeringen die naar andere entiteiten in de campaign verwijzen.',\n            'notes'         => 'Lore, natuur, geschiedenis, magie, culturen.',\n            'organisations' => 'Sekten, religies, facties, gilden.',\n            'quests'        => 'Om verschillende quests bij te houden met personages en locaties.',\n            'races'         => 'Als je campaign meer dan één ras heeft, maakt dit het bijhouden van het overzicht gemakkelijk.',\n            'tags'          => 'Elke entiteit kan meerdere tags hebben. Tags kunnen bij andere tags horen en invoeringen kunnen op tag worden gefilterd.',\n            'timelines'     => 'Geef de geschiedenis van je wereld weer met tijdlijnen.',\n        ],\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Wijzig Campaign',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Prestaties',\n            'default-images'    => 'Standaard Afbeeldingen',\n            'export'            => 'Exporteer',\n            'members'           => 'Leden',\n            'plugins'           => 'Plugins',\n            'recovery'          => 'Herstel',\n            'roles'             => 'Rollen',\n        ],\n        'title'     => 'Campaign :name',\n    ],\n    'superboosted'                      => [],\n    'ui'                                => [],\n    'visibilities'                      => [\n        'private'   => 'Privé',\n        'public'    => 'Openbaar',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_appearance'    => 'Voeg een uiterlijk toe',\n        'add_personality'   => 'Voeg een persoonlijkheid toe',\n    ],\n    'conversations' => [],\n    'create'        => [\n        'title' => 'Nieuw Personage',\n    ],\n    'destroy'       => [],\n    'dice_rolls'    => [],\n    'edit'          => [],\n    'fields'        => [\n        'age'                       => 'Leeftijd',\n        'is_dead'                   => 'Dood',\n        'is_personality_visible'    => 'Persoonlijkheid zichtbaar',\n        'life'                      => 'Leven',\n        'physical'                  => 'Fysiek',\n        'sex'                       => 'Geslacht',\n        'title'                     => 'Titel',\n        'traits'                    => 'Eigenschappen',\n    ],\n    'helpers'       => [\n        'age'   => 'Je kunt deze entiteit koppelen aan een kalender van je campaign om in plaats daarvan automatisch hun leeftijd te berekenen. :more.',\n    ],\n    'hints'         => [\n        'is_dead'                   => 'Dit personage is dood',\n        'is_personality_visible'    => 'Schakel deze optie uit om het hele persoonlijkheidsgedeelte te verbergen voor niet-beheerders.',\n        'personality_not_visible'   => 'Persoonlijkheidskenmerken van dit personage zijn momenteel alleen zichtbaar voor Beheerders',\n        'personality_visible'       => 'Persoonlijkheidskenmerken van dit personage zijn voor iedereen zichtbaar.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'maps'          => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => 'Personage toegevoegd aan organisatie.',\n            'title'     => 'Nieuwe Organisatie voor :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Personage organisatie verwijderd.',\n        ],\n        'edit'      => [\n            'success'   => 'Personage organisatie bijgewerkt.',\n            'title'     => 'Werk organisatie voor :name bij',\n        ],\n        'fields'    => [\n            'role'  => 'Rol',\n        ],\n    ],\n    'placeholders'  => [\n        'age'               => 'Leeftijd',\n        'appearance_entry'  => 'Beschrijving',\n        'appearance_name'   => 'Haar, Ogen, Huid, Lengte',\n        'personality_entry' => 'Details',\n        'personality_name'  => 'Doelen, Manieren, Angsten, Verplichtingen',\n        'physical'          => 'Fysiek',\n        'sex'               => 'Geslacht',\n        'title'             => 'Titel',\n        'traits'            => 'Eigenschappen',\n        'type'              => 'NPC, Speler Personage, Godheid',\n    ],\n    'quests'        => [\n        'helpers'   => [\n            'quest_giver'   => 'Quests waarvan het personage een quest gever is.',\n            'quest_member'  => 'Quests waarvan het personage lid is.',\n        ],\n    ],\n    'sections'      => [\n        'appearance'    => 'Uiterlijk',\n        'personality'   => 'Persoonlijkheid',\n    ],\n    'show'          => [],\n    'warnings'      => [\n        'personality_hidden'    => 'Het is niet toegestaan om persoonlijkheidskenmerken van dit personage te bewerken.',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Aqua',\n    'black'         => 'Zwart',\n    'blue'          => 'Blauw',\n    'brown'         => 'Bruin',\n    'green'         => 'Groen',\n    'grey'          => 'Grijs',\n    'light-blue'    => 'Licht Blauw',\n    'maroon'        => 'Kastanjebruin',\n    'navy'          => 'Marineblauw',\n    'none'          => 'Geen',\n    'orange'        => 'Oranje',\n    'pink'          => 'Roze',\n    'purple'        => 'Paars',\n    'red'           => 'Rood',\n    'teal'          => 'Groenblauw',\n    'white'         => 'Wit',\n    'yellow'        => 'Geel',\n];\n"
  },
  {
    "path": "lang/nl/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuwe Conversatie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'messages'      => 'Berichten',\n        'participants'  => 'Deelnemers',\n    ],\n    'hints'         => [\n        'participants'  => 'Voeg deelnemers aan je conversatie toe door op het :icon pictogram in de rechterbovenhoek te drukken.',\n    ],\n    'index'         => [],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Bericht verwijderd.',\n        ],\n        'is_updated'    => 'Bijgewerkt',\n        'load_previous' => 'Laad vorige berichten',\n        'placeholders'  => [\n            'message'   => 'Jouw berichten',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Deelnemer :entity toegevoegd aan de conversatie.',\n        ],\n        'destroy'   => [\n            'success'   => 'Deelnemer :entity verwijderd uit de conversatie.',\n        ],\n        'modal'     => 'Deelnemers',\n        'title'     => 'Deelnemers van :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Naam van de conversatie',\n        'type'  => 'In Game, Prep, Plot',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'participants'  => 'Deelnemers',\n    ],\n    'targets'       => [\n        'characters'    => 'Personages',\n        'members'       => 'Leden',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Acties',\n        'apply'             => 'Toepassen',\n        'back'              => 'Terug',\n        'copy'              => 'Kopieer',\n        'copy_mention'      => 'Kopieer [ ] opmerking',\n        'copy_to_campaign'  => 'Kopieer naar Campaign',\n        'explore_view'      => 'Geneste weergave',\n        'export'            => 'Exporteer (PDF)',\n        'find_out_more'     => 'Meer te weten komen',\n        'go_to'             => 'Ga naar :name',\n        'json-export'       => 'Exporteer (JSON)',\n        'move'              => 'Veranderen of Verplaatsen',\n        'new'               => 'Nieuw',\n        'next'              => 'Volgende',\n        'reset'             => 'Reset',\n    ],\n    'add'               => 'Toevoegen',\n    'alerts'            => [\n        'copy_mention'  => 'De geavanceerde vermelding van de entiteit is naar je klembord gekopieerd.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'  => 'Bulk Bewerken en Taggen',\n        ],\n        'age'           => [\n            'helper'    => 'Je kunt + en - voor het nummer gebruiken om de leeftijd met dat aantal bij te werken.',\n        ],\n        'edit'          => [\n            'tagging'   => 'Acties voor tags',\n            'tags'      => [\n                'add'       => 'Toevoegen',\n                'remove'    => 'Verwijderen',\n            ],\n            'title'     => 'Meerdere entiteiten bewerken',\n        ],\n        'errors'        => [\n            'admin'     => 'Alleen campaign beheerders kunnen de privéstatus van entiteiten wijzigen.',\n            'general'   => 'Er is een fout opgetreden bij het verwerken van je actie. Probeer het opnieuw en neem contact met ons op als het probleem zich blijft voordoen. Foutmelding :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Overschrijven',\n            ],\n            'helpers'   => [\n                'override'  => 'Indien geselecteerd, worden permissies van de geselecteerde entiteiten hiermee overschreven. Indien niet aangevinkt, worden de geselecteerde permissies toegevoegd aan de bestaande.',\n            ],\n            'title'     => 'Wijzig permissies voor verschillende entiteiten',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Pas een sjabloon toe op meerdere entiteiten',\n    ],\n    'cancel'            => 'Annuleer',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Kopieer entiteiten naar andere campaign',\n        'panel'         => 'Kopieer',\n        'title'         => 'Kopieer \\':name\\' naar andere campaign',\n    ],\n    'create'            => 'Maak',\n    'datagrid'          => [\n        'empty' => 'Nog niets te laten zien.',\n    ],\n    'delete_modal'      => [\n        'title' => 'Bevestiging verwijderen',\n    ],\n    'destroy_many'      => [],\n    'edit'              => 'Wijzig',\n    'errors'            => [\n        'boosted_campaigns'     => 'Deze functie is alleen beschikbaar voor :boosted.',\n        'unavailable_feature'   => 'Functie niet beschikbaar',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'calendar_date'     => 'Kalender Datum',\n        'colour'            => 'Kleur',\n        'copy_abilities'    => 'Kopieer Vaardigheden',\n        'copy_inventory'    => 'Kopieer Inventory',\n        'copy_links'        => 'Kopieer Entiteit Links',\n        'creator'           => 'Maker',\n        'excerpt'           => 'Excerpt',\n        'has_entity_files'  => 'Heeft entiteit bestanden',\n        'has_image'         => 'Heeft een afbeelding',\n        'header_image'      => 'Header Afbeeldingen',\n        'image'             => 'Afbeelding',\n        'is_private'        => 'Privé',\n        'is_star'           => 'Vastgemaakt',\n        'name'              => 'Naam',\n        'position'          => 'Positie',\n        'tooltip'           => 'Tooltip',\n        'type'              => 'Type',\n        'visibility'        => 'Zichtbaarheid',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Je hebt het maximale aantal (: max) bestanden voor deze entiteit bereikt.',\n            'no_files'  => 'Geen bestanden.',\n        ],\n        'hints'     => [\n            'limit'         => 'Elke entiteit kan maximaal :max bestanden hebben geüpload.',\n            'limitations'   => 'Ondersteunde formaten: :formats. Max Bestandsgrootte: :size',\n        ],\n    ],\n    'filter'            => 'Filter',\n    'filters'           => [\n        'all'       => 'Filter op alle afstammelingen',\n        'clear'     => 'Wis Filters',\n        'direct'    => 'Filter naar directe afstammelingen',\n        'filtered'  => ':count van :total :entity weergegeven.',\n        'options'   => [\n            'exclude'   => 'Uitsluiten',\n            'include'   => 'Omvatten',\n            'none'      => 'Geen',\n        ],\n        'show'      => 'Toon Filters',\n        'sorting'   => [\n            'asc'       => ':field Oplopend',\n            'desc'      => ':field Aflopend',\n            'helper'    => 'Bepaal in welke volgorde de resultaten worden weergegeven.',\n        ],\n        'title'     => 'Filters',\n    ],\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Voeg een kalender datum toe',\n        ],\n        'copy_options'  => 'Kopieer Opties',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Kopieer de volgende gerelateerde elementen van de bron naar de nieuwe entiteit.',\n    ],\n    'hidden'            => 'Verborgen',\n    'hints'             => [\n        'calendar_date'     => 'Een kalender datum maakt eenvoudig filteren in lijsten mogelijk en houdt ook een kalender gebeurtenis bij in de geselecteerde kalender.',\n        'image_limitations' => 'Ondersteunde formaten: :formats. Max Bestandsgrootte: :size.',\n        'is_star'           => 'Vastgezette elementen verschijnen in het menu van de entiteit',\n        'tooltip'           => 'Vervang de automatisch gegenereerde tooltip door de volgende inhoud.',\n    ],\n    'history'           => [\n        'unknown'   => 'Onbekend',\n        'view'      => 'Bekijk entiteit log',\n    ],\n    'image'             => [\n        'error' => 'We kunnen de door jou aangevraagde afbeelding niet ophalen. Het kan zijn dat de website ons niet toestaat om de afbeelding te downloaden (meestal voor Squarespace en DeviantArt), of dat de link niet langer geldig is. Let er ook op dat de afbeelding niet groter is dan :size.',\n    ],\n    'is_private'        => 'Deze entiteit is privé en alleen zichtbaar voor leden van de Beheerder rol.',\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Toestaan',\n                'deny'      => 'Weigeren',\n                'ignore'    => 'Overslaan',\n                'remove'    => 'Verwijder',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Toestaan',\n                'deny'      => 'Weigeren',\n                'inherit'   => 'Erven',\n            ],\n            'delete'        => 'Verwijder',\n            'edit'          => 'Wijzig',\n            'toggle'        => 'Wissel',\n        ],\n        'fields'            => [\n            'member'    => 'Lid',\n            'role'      => 'Rol',\n        ],\n        'helpers'           => [\n            'setup' => 'Gebruik deze interface om te verfijnen hoe rollen en gebruikers kunnen communiceren met deze entiteit. :allow staat de gebruiker of rol toe om deze actie uit te voeren. :deny zal hen die actie ontzeggen. :inherit gebruikt de gebruiker\\'s rol of de toestemming van de hoofd rol. Een gebruiker die is ingesteld op :allow, kan de actie uitvoeren, zelfs als hun rol is ingesteld op :deny.',\n        ],\n        'success'           => 'Permissies opgeslagen.',\n        'title'             => 'Permissies',\n        'too_many_members'  => 'Deze campaign heeft te veel leden (>10) om in deze interface weer te geven. Gebruik de Permissie knop in de entiteit weergave om permissies in detail te beheren.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Kies een kalender',\n        'gallery_image' => 'Kies een afbeelding uit de campaign galerij',\n        'image_url'     => 'Je kunt in plaats daarvan een afbeelding uploaden vanaf een URL',\n        'journal'       => 'Kies een logboek',\n        'location'      => 'Kies een locatie',\n        'organisation'  => 'Kies een organisatie',\n        'tag'           => 'Kies een tag',\n        'timeline'      => 'Kies een tijdlijn',\n    ],\n    'relations'         => [],\n    'remove'            => 'Verwijder',\n    'save'              => 'Opslaan',\n    'save_and_close'    => 'Opslaan en Afsluiten',\n    'save_and_copy'     => 'Opslaan en Kopiëren',\n    'save_and_new'      => 'Opslaan en Nieuwe',\n    'save_and_update'   => 'Opslaan en Wijzig',\n    'save_and_view'     => 'Opslaan en Bekijken',\n    'search'            => 'Zoeken',\n    'select'            => 'Selecteren',\n    'tabs'              => [\n        'abilities'     => 'Vaardigheden',\n        'inventory'     => 'Inventory',\n        'permissions'   => 'Permissies',\n        'reminders'     => 'Herinneringen',\n    ],\n    'update'            => 'Update',\n    'users'             => [\n        'unknown'   => 'Onbekend',\n    ],\n    'view'              => 'Bekijk',\n    'visibilities'      => [\n        'admin'         => 'Beheerder',\n        'admin-self'    => 'Zelf & Beheerder',\n        'all'           => 'Alle',\n        'members'       => 'Leden',\n        'self'          => 'Zelf',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'follow'    => 'Volg',\n        'join'      => 'Join',\n        'unfollow'  => 'Ontvolg',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Wijzig',\n            'new'   => 'Nieuw Dashboard',\n        ],\n        'create'        => [\n            'success'   => 'Nieuw campaign dashboard :name gemaakt.',\n            'title'     => 'Nieuw Campaign Dashboard',\n        ],\n        'custom'        => [\n            'text'  => 'Je bewerkt momenteel het :name dashboard van de campaign.',\n        ],\n        'default'       => [\n            'text'  => 'Je bewerkt momenteel het standaard dashboard van de campaign.',\n            'title' => 'Standaard Dashboard',\n        ],\n        'delete'        => [\n            'success'   => 'Dashboard :name verwijderd.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Kopieer widgets',\n            'name'          => 'Dashboard naam',\n            'visibility'    => 'Zichtbaarheid',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Dupliceer de widgets van het :name dashboard naar deze nieuwe.',\n        ],\n        'placeholders'  => [\n            'name'  => 'Naam van het dashboard',\n        ],\n        'update'        => [\n            'success'   => 'Campaign dashboard :name bijgewerkt.',\n            'title'     => 'Werk campaign dashboard :name bij',\n        ],\n        'visibility'    => [\n            'default'   => 'Standaard',\n            'none'      => 'Geen',\n            'visible'   => 'Zichtbaar',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Als je een campaign volgt, wordt deze weergegeven in de campaign wisselaar (linksboven) onder je campaigns.',\n        'join'      => 'Deze campaign staat open voor nieuwe leden. Klik om aan te vragen om er lid van te worden.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Voeg een widget toe',\n            'back_to_dashboard' => 'Terug naar dashboard',\n            'edit'              => 'Wijzig een widget',\n        ],\n        'title'     => 'Campaign Dashboard Setup',\n    ],\n    'title'         => 'Dashboard',\n    'widgets'       => [\n        'calendar'      => [\n            'actions'           => [\n                'next'      => 'Wijzig de datum naar de volgende dag',\n                'previous'  => 'Wijzig de datum naar de vorige dag',\n            ],\n            'previous_events'   => 'Vorige',\n            'upcoming_events'   => 'Aankomend',\n        ],\n        'campaign'      => [\n            'helper'    => 'Deze widget geeft de campaign header weer. Deze widget wordt altijd weergegeven op het standaard dashboard.',\n        ],\n        'create'        => [\n            'success'   => 'Widget toegevoegd aan het dashboard.',\n        ],\n        'delete'        => [\n            'success'   => 'Widget verwijderd van het dashboard',\n        ],\n        'fields'        => [\n            'name'  => 'Aangepaste widget naam',\n            'width' => 'Breedte',\n        ],\n        'recent'        => [\n            'entity-header' => 'Gebruik de entiteit header als afbeelding',\n            'help'          => 'Toon alleen de laatst bijgewerkte entiteit, maar toon een hele preview van de entiteit',\n            'helpers'       => [\n                'entity-header' => 'Als je entiteit een entiteit header heeft (functie voor boosted campagnes), stel je deze widget in om die afbeelding te gebruiken in plaats van de afbeelding van de entiteit.',\n            ],\n            'singular'      => 'Enkelvoud',\n            'tags'          => 'Filter de lijst met onlangs gewijzigde entiteiten op gespecificeerde tags.',\n            'title'         => 'Onlangs gewijzigd',\n        ],\n        'unmentioned'   => [\n            'title' => 'Niet-genoemde entiteiten',\n        ],\n        'update'        => [\n            'success'   => 'Widget aangepast.',\n        ],\n        'widths'        => [\n            '0' => 'Auto',\n            '12'=> 'Volledig (100%)',\n            '3' => 'Mini (25%)',\n            '4' => 'Klein (33%)',\n            '6' => 'Half (50%)',\n            '8' => 'Wijd (66%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/nl/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'dag',\n    'days'          => 'dagen',\n    'elapsed_ago'   => ':duration geleden',\n    'hour'          => 'uur',\n    'hours'         => 'uren',\n    'just_now'      => 'zo net',\n    'minute'        => 'minuut',\n    'minutes'       => 'minuten',\n    'month'         => 'maand',\n    'months'        => 'maanden',\n    'second'        => 'seconde',\n    'seconds'       => 'secondes',\n    'week'          => 'week',\n    'weeks'         => 'weken',\n    'year'          => 'jaar',\n    'years'         => 'jaren',\n];\n"
  },
  {
    "path": "lang/nl/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Pagina Titel',\n];\n"
  },
  {
    "path": "lang/nl/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Dobbelsteen Worp Resultaten',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuwe Dobbelsteen Worp',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Dobbelsteen worp verwijderd.',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Gerold Bij',\n        'parameters'    => 'Parameters',\n        'results'       => 'Resultaten',\n        'rolls'         => 'Worpen',\n    ],\n    'hints'         => [\n        'parameters'    => 'Wat zijn mijn dobbelsteen opties?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Resultaten',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Naam van de Dobbelsteen Worp',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Worp',\n        ],\n        'error'     => 'Dobbelsteen worp mislukt. Kan de parameters niet parseren.',\n        'fields'    => [\n            'creator'   => 'Maker',\n            'date'      => 'Datum',\n            'result'    => 'Resultaat',\n        ],\n        'hint'      => 'Alle worpen gedaan voor deze dobbelsteen worp sjabloon.',\n        'success'   => 'Dobbelstenen gegooid.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Resultaten',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/nl/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    'header'        => 'Welkom bij Kanka :name!',\n    'header_sub'    => 'Gefeliciteerd, je hebt de eerste stap gezet in de creatie van jouw wereld op :kanka!',\n    'pricing'       => 'prijzen',\n    'section_1'     => 'Waar nu naartoe?',\n    'section_11'    => 'Creëer je wereld,',\n    'section_2'     => 'De belangrijkste bron is :discord, waar je veel van onze toegewijde gebruikers, een onboarding-team en de oprichter van Kanka zult vinden, die al je vragen kan beantwoorden.',\n    'section_4'     => 'Onze :youtube heeft video\\'s over de basisprincipes van Kanka. Hoewel nog niet alle onderwerpen aan bod komen, voegen we regelmatig nieuwe video\\'s toe.',\n    'section_6'     => 'Neem contact op',\n    'section_7'     => 'Als je geen antwoord op je vragen hebt gevonden, of gewoon contact met ons wilt opnemen, kan je ons vinden op :facebook, of je kunt ons een e-mail sturen op :email. We zijn een klein team van 2 vrienden, maar we zorgen ervoor dat we elke e-mail beantwoorden die we ontvangen, dus aarzel niet!',\n    'section_8'     => 'Nog een ding',\n    'section_9_v2'  => 'We hebben ervoor gezorgd dat alle kernfuncties in Kanka gratis zijn, en dat zullen we altijd zo houden. Als je ons echter bij dit project wilt steunen, kan je abonnee worden en toegang krijgen tot extra functies, evenals onze eeuwige dankbaarheid. Lees meer op de :pricing pagina.',\n    'title'         => 'Aan de slag met Kanka',\n];\n"
  },
  {
    "path": "lang/nl/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Voeg vaardigheden toe',\n        'reset' => 'Gebruik van vaardigheden opnieuw instellen',\n    ],\n    'create'    => [\n        'success'           => 'Vaardigheid :ability toegevoegd aan :entity.',\n        'success_multiple'  => 'Vaardigheden :abilities toegevoegd aan :entity.',\n        'title'             => 'Voeg vaardigheden toe aan :name',\n    ],\n    'fields'    => [\n        'note'      => 'Notitie',\n        'position'  => 'Positie',\n    ],\n    'helpers'   => [\n        'note'  => 'Je kunt verwijzen naar entiteiten met behulp van geavanceerde vermeldingen (bijv. :code) en attributen van de entiteit (bijv. :attr) in dit veld.',\n    ],\n    'import'    => [\n        'errors'    => [\n            'no_race'       => 'Het personage heeft geen ras.',\n            'not_character' => 'De entiteit is geen personage.',\n        ],\n        'success'   => '{1} :count geïmporteerd.|[2, *] :count geïmporteerd.',\n    ],\n    'show'      => [\n        'helper'    => 'Koppel vaardigheden aan deze entiteit. Je kunt altijd de zichtbaarheid bewerken of een vaardigheid verwijderen. Vaardigheden die tot dezelfde bovenliggende vaardigheid behoren, worden weergegeven als filtervakken.',\n        'title'     => 'Entiteit Vaardigheden voor :name',\n    ],\n    'update'    => [\n        'title' => 'Entiteit Vaardigheid voor :name',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'templates' => [\n        'set'       => 'Instellen als sjabloon',\n        'success'   => [\n            'set'   => 'Entiteit :name ingesteld als sjabloon.',\n            'unset' => 'Entiteit :name is niet langer ingesteld als sjabloon.',\n        ],\n        'unset'     => 'Verwijder als sjabloon',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'manage'        => 'Beheer',\n        'more'          => 'Meer opties',\n        'remove_all'    => 'Verwijder Alles',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Community Sjablonen',\n        'is_private'            => 'Privé Attributen',\n        'is_star'               => 'Vastgemaakt',\n        'value'                 => 'Waarde',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Weet je zeker dat je alle attributen van deze entiteit wilt verwijderen?',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Attributen voor :entity bijgewerkt.',\n        'title'     => 'Attributen voor :name',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Aantal Conquests, Challenge Ratings, Initiatives, Populaties',\n        'block'     => 'Blokkeer naam',\n        'checkbox'  => 'Selectievak naam',\n        'icon'      => [\n            'class' => 'FontAwesome of RPG Awesome klasse: fas fa-gebruikers',\n            'name'  => 'Pictogram naam',\n        ],\n        'section'   => 'Sectie naam',\n        'value'     => 'Waarde van het attribuut',\n    ],\n    'template'      => [\n        'success'   => 'Attribuutsjabloon :name toegepast op :entity',\n        'title'     => 'Pas een attribuutsjabloon toe voor :name',\n    ],\n    'types'         => [\n        'attribute' => 'Attribuut',\n        'block'     => 'Blokkeer',\n        'checkbox'  => 'Selectievak',\n        'icon'      => 'Pictogram',\n        'section'   => 'Sectie',\n        'text'      => 'Multiline Tekst',\n    ],\n    'visibility'    => [\n        'entry'     => 'Attribuut wordt weergegeven in het entiteit menu.',\n        'private'   => 'Attribuut alleen zichtbaar voor leden van de rol \"Beheerder\".',\n        'public'    => 'Attribuut zichtbaar voor alle leden.',\n        'tab'       => 'Attribuut wordt alleen weergegeven op het tabblad Attributen.',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/events.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'type'  => 'Gebeurtenis Type',\n    ],\n    'helpers'   => [\n        'characters'    => 'Als je het type instelt als geboortedatum of overlijdensdatum voor dit personage, wordt automatisch hun leeftijd berekend. :more.',\n    ],\n    'types'     => [\n        'birth'     => 'Geboorte',\n        'death'     => 'Overlijden',\n        'primary'   => 'Primair',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'success'   => 'Voorwerp :item toegevoegd aan :entity.',\n        'title'     => 'Voeg een Voorwerp toe aan :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Voorwerp :item verwijderd van :entity',\n    ],\n    'fields'        => [\n        'amount'        => 'Aantal',\n        'description'   => 'Beschrijving',\n        'is_equipped'   => 'Uitgerust',\n        'name'          => 'Naam',\n        'position'      => 'Positie',\n    ],\n    'placeholders'  => [\n        'amount'        => 'Elk aantal',\n        'description'   => 'Gebruikt, Beschadigd, Attuned',\n        'name'          => 'Vereist als er geen voorwerp is geselecteerd',\n        'position'      => 'Uitgerust, Rugzak, Opslag, Bank',\n    ],\n    'show'          => [\n        'helper'    => 'Entiteiten kunnen voorwerpen hebben die eraan zijn gekoppeld om een inventory te maken.',\n        'title'     => 'Entiteit :name Inventory',\n        'unsorted'  => 'Ongesorteerd',\n    ],\n    'update'        => [\n        'success'   => 'Voorwerp :item bijgewerkt voor :entity.',\n        'title'     => 'Werk een voorwerp bij op :name',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Voeg een link toe',\n    ],\n    'create'        => [\n        'success'   => 'Link :name toegevoegd aan :entity.',\n        'title'     => 'Voeg een link toe aan :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Link :name verwijderd van :entity.',\n    ],\n    'fields'        => [\n        'icon'      => 'Pictogram',\n        'name'      => 'Naam',\n        'position'  => 'Positie',\n        'url'       => 'URL',\n    ],\n    'helpers'       => [\n        'icon'  => 'Je kunt het pictogram dat voor de link wordt weergegeven, aanpassen. Gebruik een van de gratis pictogrammen van :fontawesome of laat dit veld leeg als standaard.',\n    ],\n    'placeholders'  => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'          => [\n        'helper'    => 'Boosted campaigns kunnen links toevoegen aan entiteiten die naar externe websites verwijzen.',\n        'title'     => 'Links voor :name',\n    ],\n    'update'        => [\n        'success'   => 'Link :name bijgewerkt voor :entity',\n        'title'     => 'Werk link bij voor :name',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Maak',\n        'delete'    => 'Verwijder',\n        'restore'   => 'Herstel',\n        'update'    => 'Werk bij',\n    ],\n    'fields'        => [\n        'action'    => 'Actie',\n        'date'      => 'Datum',\n    ],\n    'impersonated'  => 'Geïmiteerd door :name',\n    'show'          => [\n        'title' => 'Entiteit :name Logs',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Deze entiteit is vastgemaakt op de volgende kaarten.',\n    'title'     => ':name Kaart Punten',\n];\n"
  },
  {
    "path": "lang/nl/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [],\n    'helper'    => 'Het volgende is een lijst met entiteiten die deze entiteit vermelden in hun \"Invoer\" veld.',\n    'show'      => [\n        'title' => 'Entiteit :name Vermeldingen',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Nieuwe Entieit Notitie',\n        'add_user'  => 'Voeg gebruiker toe',\n    ],\n    'create'        => [\n        'success'   => 'Entiteit Notitie \\':name\\' toegevoegd aan :entity',\n    ],\n    'destroy'       => [\n        'success'   => 'Entiteit Notitie \\':name\\' voor :entity verwijderd.',\n    ],\n    'edit'          => [\n        'success'   => 'Entiteit Notitie \\':name\\' voor :entity bijgewerkt.',\n    ],\n    'fields'        => [\n        'creator'   => 'Maker',\n        'name'      => 'Naam',\n    ],\n    'hint'          => 'Informatie die niet helemaal in de standaardvelden van een entiteit past of die privé moet worden gehouden, kan worden toegevoegd als Entiteit Notitie.',\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'name'  => 'Naam van de entiteit notitie, observatie of opmerking',\n    ],\n    'show'          => [\n        'advanced'  => 'Geavanceerde Machtigingen',\n        'title'     => 'Entiteit Notitie :name voor :entity',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [],\n    'destroy'       => [\n        'success'   => 'Relatie :target verwijderd voor :entity',\n    ],\n    'fields'        => [\n        'attitude'  => 'Attitude',\n        'target'    => 'Doel',\n        'two_way'   => 'Maak spiegelrelatie',\n    ],\n    'helper'        => 'Zet relaties op tussen entiteiten met attitudes en zichtbaarheid. Relaties kunnen ook worden vastgemaakt aan het menu van de entiteit.',\n    'hints'         => [\n        'attitude'  => 'Dit optionele veld kan worden gebruikt om de standaardvolgorde in relaties in aflopende volgorde te definiëren.',\n        'two_way'   => 'Als je ervoor kiest om een spiegelrelatie te maken, wordt dezelfde relatie op het doel gemaakt. Als je er echter een bewerkt, wordt de spiegel niet bijgewerkt.',\n    ],\n    'placeholders'  => [\n        'attitude'  => '-100 tot 100, waarbij 100 zeer positief is',\n    ],\n    'show'          => [\n        'title' => 'Relaties voor :name',\n    ],\n    'types'         => [\n        'family_member'         => 'Familielid',\n        'organisation_member'   => 'Organisatie Lid',\n    ],\n    'update'        => [\n        'success'   => 'Relatie :target bijgewerkt voor :entity.',\n        'title'     => 'Werk relaties bij voor :name',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Tijdlijnen met elementen die aan deze entiteit zijn gekoppeld, worden hieronder weergegeven.',\n    'show'      => [\n        'title' => 'Tijdlijnen van :name',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Vaardigheden',\n    'ability'               => 'Vaardigheid',\n    'attribute_template'    => 'Attribuutsjabloon',\n    'attribute_templates'   => 'Attribuutsjablonen',\n    'calendar'              => 'Kalender',\n    'calendars'             => 'Kalenders',\n    'campaign'              => 'Campaign',\n    'campaigns'             => 'Campaigns',\n    'character'             => 'Personage',\n    'characters'            => 'Personages',\n    'conversation'          => 'Conversatie',\n    'conversations'         => 'Conversaties',\n    'creator'               => [\n        'back'      => 'Terug naar selectie',\n        'duplicate' => 'Er zijn andere entiteiten van dit type met dezelfde naam.',\n        'title'     => 'Nieuwe Entiteit',\n    ],\n    'dice_roll'             => 'Dobbelsteen Worp',\n    'dice_rolls'            => 'Dobbelsteen Worpen',\n    'event'                 => 'Gebeurtenis',\n    'events'                => 'Gebeurtenissen',\n    'families'              => 'Families',\n    'family'                => 'Familie',\n    'item'                  => 'Voorwerp',\n    'items'                 => 'Voorwerpen',\n    'journal'               => 'Logboek',\n    'journals'              => 'Logboeken',\n    'location'              => 'Locatie',\n    'locations'             => 'Locaties',\n    'map'                   => 'Kaart',\n    'maps'                  => 'Kaarten',\n    'new'                   => [],\n    'note'                  => 'Notitie',\n    'notes'                 => 'Notities',\n    'organisation'          => 'Organisatie',\n    'organisations'         => 'Organisaties',\n    'quest'                 => 'Quest',\n    'quests'                => 'Quests',\n    'race'                  => 'Ras',\n    'races'                 => 'Rassen',\n    'tag'                   => 'Tag',\n    'tags'                  => 'Tags',\n    'timeline'              => 'Tijdlijn',\n    'timelines'             => 'Tijdlijnen',\n];\n"
  },
  {
    "path": "lang/nl/errors.php",
    "content": "<?php\n\nreturn [\n    '403'       => [\n        'body'  => 'Het lijkt erop dat je geen toestemming hebt om deze pagina te openen!',\n        'title' => 'Toestemming geweigerd',\n    ],\n    '403-form'  => [\n        'help'  => 'Dit kan komen door de time-out van je sessie. Probeer opnieuw in te loggen in een ander venster voordat je opslaat.',\n    ],\n    '404'       => [\n        'body'  => 'Sorry, de pagina die je zoekt, is niet gevonden.',\n        'title' => 'Pagina niet gevonden',\n    ],\n    '500'       => [\n        'body'  => [\n            '1' => 'Oeps, het ziet ernaar uit dat er iets is misgegaan.',\n            '2' => 'Er is een rapport met de aangetroffen fout naar ons gestuurd, maar soms helpt het als we wat meer kunnen weten over wat je aan het doen was.',\n        ],\n        'title' => 'Fout',\n    ],\n    '503'       => [\n        'body'  => [\n            '1' => 'Kanka is momenteel in onderhoud, wat meestal betekent dat er een update aan de gang is!',\n            '2' => 'Excuses voor het ongemak. Alles zal binnen enkele minuten weer normaal worden.',\n        ],\n        'title' => 'Onderhoud',\n    ],\n    '503-form'  => [],\n    'footer'    => 'Als je meer hulp nodig hebt, neem dan contact met ons op via hello@kanka.io of via :discord',\n];\n"
  },
  {
    "path": "lang/nl/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuwe gebeurtenis',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'fields'        => [\n        'date'  => 'Datum',\n    ],\n    'helpers'       => [\n        'date'  => 'Dit veld kan alles bevatten en is niet gekoppeld aan de kalenders van de campaign. Om deze gebeurtenis aan een kalender te koppelen, voeg je deze toe aan de kalender of op het tabblad herinneringen van deze gebeurtenissen.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'date'  => 'Een datum voor je gebeurtenis',\n        'type'  => 'Ceremonie, Festival, Ramp, Veldslag, Geboorte',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Kalender Invoeren',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuwe Familie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'members'   => 'Leden van een familie worden hier vermeld. Een personage kan aan een familie worden toegevoegd door het gewenste personage te bewerken en de vervolgkeuzelijst \"Familie\" te gebruiken.',\n    ],\n    'index'         => [],\n    'members'       => [],\n    'placeholders'  => [\n        'name'  => 'Naam van de familie',\n        'type'  => 'Koninklijk, Adel, Uitgestorven',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/faq.php",
    "content": "<?php\n\nreturn [\n    'app_backup'            => [\n        'answer'    => 'We maken twee back-ups per dag om dataverlies te voorkomen. Onze eigen campaigns staan op de server, dus we willen geen enkel risico nemen!',\n        'question'  => 'Hoe vaak wordt er een back-up gemaakt van de gegevens op Kanka?',\n    ],\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nDe beste manier waarop we attribuutsjablonen kunnen uitleggen, is met een voorbeeld. Stel dat je wereld veel locaties heeft en dat je op veel van die locaties een aangepast Attribuut wilt maken voor \"Bevolking\", \"Klimaat\", \"Misdaadniveau\".\n\nNu zou je dat gemakkelijk op elke locatie kunnen doen, maar het kan vervelend worden, en je zou soms kunnen vergeten om het attribuut \"Misdaadniveau\" aan te maken. Dit is waar attribuutsjablonen in het spel komen.\n\nJe kunt een Attribuutsjabloon maken met die attributen (bevolking, klimaat, misdaadniveau, enz.), En die sjabloon later op je locaties toepassen. Hiermee worden de attributen van de sjabloon op de locaties gemaakt, dus het enige wat je hoeft te doen is de waarden te wijzigen en de attributen niet te onthouden!\nTEXT\n        ,\n        'question'  => 'Attribuutsjablonen, wat zijn dat?',\n    ],\n    'backup'                => [\n        'answer'    => 'Een keer per dag kun je al je campaign gegevens exporteren als een ZIP-bestand. Klik in de app op \"Campaign\" in het linkermenu en klik op \"Exporteren\". Hierdoor wordt een export gemaakt die 30 minuten beschikbaar is. Je kunt deze export niet uploaden naar Kanka, het is alleen bedoeld voor je eigen gemoedsrust of als je niet langer van plan bent de app te gebruiken.',\n        'question'  => 'Hoe kan ik een back-up maken van mijn campaign of deze exporteren?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Word gewoon lid van onze :discord server en meld je bug in het  #error-and-bugs kanaal.',\n        'question'  => 'Hoe kan ik een bug melden?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'Kanka heeft deze functie niet. Als je echter meerdere speelgroepen in dezelfde wereld probeert te hebben, overweeg dan om dezelfde campaign te gebruiken en je groepen te scheiden door een combinatie van speurtochten, tags en permissies',\n        'question'  => 'Kan ik entiteiten over meerdere campagnes synchroniseren?',\n    ],\n    'custom'                => [\n        'answer'    => 'Kanka wordt geleverd met een set vooraf gedefinieerde entiteit typen die met elkaar communiceren. Om aangepaste entiteit typen toe te staan, zou de app helemaal opnieuw moeten worden opgebouwd en zou het doel van een tool met vooraf gedefinieerde typen om mensen te helpen met worldbuilding teniet doen, in plaats van uit te zoeken hoe ze dingen moeten organiseren. Bovendien is Kanka flexibel met Tags die de meeste scenario\\'s van het type entiteit kunnen vertegenwoordigen.',\n        'question'  => 'Kan ik aangepaste entiteit typen maken?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Ga naar je campaign dashboard en klik op \\'Campaign\\' in het linkermenu. Er verschijnt een campaign knop \"Verwijderen\" als je het laatste lid van de campaign bent. Het verwijderen van een campaign is een permanente actie waarbij alle gegevens die op onze servers zijn opgeslagen, inclusief afbeeldingen, worden verwijderd.',\n        'question'  => 'Hoe kan ik een campaign verwijderen?',\n    ],\n    'early-access'          => [\n        'answer'    => 'Early Access is voor ons een manier om onze geweldige abonnees te belonen door ze een exclusieve periode van 30 dagen te geven waarin ze de nieuwste modules kunnen uitproberen voor iemand anders.',\n        'question'  => 'Wat is Early Access?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'Alle entiteiten hebben een tabblad \\'Entiteit Notities\\'. Dit zijn kleine tekstfragmenten die kunnen worden ingesteld om alleen zichtbaar te zijn voor jou (handig bij co-dming), alleen voor leden van de beheerdersrol of zichtbaar voor iedereen. Je kunt je spelers ook toestemming geven om entiteit notities voor entiteiten te maken en te bewerken zonder dat ze een hele entiteit hoeven te bewerken.',\n        'question'  => 'Hoe gaat Kanka om met gedeeltelijk verborgen informatie?',\n    ],\n    'fields'                => [\n        'answer'    => 'Antwoord',\n        'category'  => 'Categorie',\n        'locale'    => 'Locale',\n        'order'     => 'Volgorde',\n        'question'  => 'Vraag',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\nJa! We zijn ervan overtuigd dat je financiële situatie geen invloed mag hebben op je plezier in RPG's of worldbuilding en we zullen de kernapp altijd gratis houden. Als je echter een actievere rol op deze reis wilt spelen, ons wilt steunen en wilt stemmen over de functies die voor jou het belangrijkst zijn, kun je dit doen via onze abonnementen.\n\nNaast het stemmen over de richting die Kanka inslaat, kun je door ons te steunen toegang krijgen tot :boosters, uploadlimieten voor bestandsgrootte verhogen, je naam toevoegen aan de hall of fame, mooiere standaard pictogrammen en meer!\nTEXT\n        ,\n        'question'  => 'Blijft de app gratis?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'We raden aan om Goden als Parakters te creëren en religies te creëren als Organisaties. Als je snel je goden wilt vinden, raden we je aan ze te taggen met een geschikte tag en / of type.',\n        'question'  => 'Waar kun je goden en religies creëren?',\n    ],\n    'help'                  => [\n        'answer'    => 'Allereerst bedankt dat je wilt helpen! We zijn altijd geïnteresseerd in mensen die kunnen helpen met vertalingen, nieuwe functies kunnen testen of die nieuwe gebruikers kunnen helpen. We vinden het ook geweldig als mensen Kanka promoten om nieuwe gebruikers te bereiken op plaatsen waar we niet aan hadden gedacht. Je beste manier van handelen is om je bij ons aan te sluiten op de :discord, waar een kanaal is toegewijd om te helpen.',\n        'question'  => 'Hoe kan ik helpen?',\n    ],\n    'map'                   => [\n        'answer'    => 'De Kaarten module ondersteunt PNG-, JPG- en SVG-afbeeldingen. Deze kaarten kunnen lagen, groepen en markeringen hebben die verschillende vormen en maten hebben die naar andere entiteiten in een campaign verwijzen.',\n        'question'  => 'Kan ik kaarten uploaden naar Kanka?',\n    ],\n    'mobile'                => [\n        'answer'    => 'Er is momenteel geen speciale mobiele app voor Kanka, maar de meeste functies van de app werkt op een mobiel apparaat. We hopen dat we dankzij de ondersteuning via abonnementen ooit iemand kunnen betalen om een mobiele app te bouwen, maar voorzien dat niet in de nabije toekomst.',\n        'question'  => 'Is er een mobiele app? Is er een gepland?',\n    ],\n    'monsters'              => [\n        'answer'    => 'We raden aan om de Rassen module te gebruiken voor mensen, soorten, monsters en alles wat leeft dat geen personage is.',\n        'question'  => 'Waar monsters te maken?',\n    ],\n    'multiworld'            => [\n        'answer'    => 'Je kunt deelnemen aan zoveel campaigns als je wilt, inclusief de campaigns die je hebt gemaakt. Om over te schakelen of een nieuwe campaign te maken, ga je naar je campaign dashboard en kun je rechtsboven op je huidige campaign klikken om de interface van de campaign wisselaar weer te geven.',\n        'question'  => 'Kan ik meer dan één campaign hebben?',\n    ],\n    'nested'                => [\n        'answer'    => 'Als je jouw entiteiten liever standaard in een geneste weergave bekijkt (in bijvoorbeeld de knop Geneste Weergave in de lijst met locaties), kun je dit doen door naar je Profiel- en Lay-out opties te gaan. Daar kun je de optie Geneste Weergave controleren. Dit is alleen voor jouw account en niet voor je campaigns.',\n        'question'  => 'Kan ik instellen dat de lijsten standaard worden genest?',\n    ],\n    'permissions'           => [\n        'answer'    => 'Absoluut, daarom hebben we Kanka gebouwd! Je kunt al je spelers voor je campaigns uitnodigen en hen rollen en permissies geven. We hebben het systeem zo gebouwd dat het uiterst flexibel is (je kunt zowel een opt-in- als een opt-out-configuratie gebruiken) om in zoveel mogelijk behoeften en situaties te voorzien.',\n        'question'  => 'Kan ik de informatie beperken die mijn spelers in mijn campagne zien?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nHet langetermijnplan voor Kanka is om een veelzijdige tool voor worldbuilding en campaign beheer te bouwen die systeemonafhankelijk is met inhoud die wordt beheerd door de gemeenschap in de vorm van \"Community Sjablonen\". Een ander doel van ons is om tools te bouwen die kunnen worden geïntegreerd met andere platforms, zoals Virtual Tabletop apps.\n\nWe gebruiken Kanka zelf, dus we hebben geen plannen om ooit te stoppen met het ontwikkelen en verbeteren ervan. Voor de zekerheid is het project echter ook open source en kan het worden opgepikt door de community als er ooit iets met ons zou gebeuren.\nTEXT\n        ,\n        'question'  => 'Wat zijn de langetermijnplannen?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Je kunt bladeren op de :public-campaigns pagina om te zien hoe anderen Kanka gebruiken voor hun campaigns.',\n        'question'  => 'Hoe gebruiken anderen Kanka?',\n    ],\n    'renaming-modules'      => [\n        'answer'    => 'Standaard staat Kanka je niet toe de naam van modules te wijzigen. Dit komt door de grammaticale correctheid en gebruikerservaringen voor talen die gendergerelateerde woorden gebruiken. Een boosted campaign kan echter de naam van modules in de zijbalk wijzigen door Aangepaste CSS te gebruiken.',\n        'question'  => 'Kan ik modules hernoemen? Bijvoorbeeld Families in Clans, of Organisaties in Facties?',\n    ],\n    'sections'              => [\n        'community'     => 'Community',\n        'general'       => 'Algemeen',\n        'other'         => 'Andere',\n        'permissions'   => 'Permissies',\n        'pricing'       => 'Prijzen',\n        'worldbuilding' => 'Worldbuilding',\n    ],\n    'show'                  => [\n        'return'    => 'Ga terug naar de FAQ',\n        'timestamp' => 'Laatst bijgewerkt :date',\n        'title'     => 'FAQ :name',\n    ],\n    'unboost'               => [\n        'answer'    => 'Als je een campaign boost ongedaan maakt, worden geen gegevens verwijderd die tijdens de boost zijn gemaakt, maar worden alleen de informatie en functies verborgen. Als je een campaign opnieuw een boost geeft, zijn de informatie en functies weer beschikbaar met dezelfde instellingen als voordat je een campaign boost ongedaan maakte.',\n        'question'  => 'Wat gebeurt er als een campaign niet langer wordt ge-boost?',\n    ],\n    'user-switch'           => [\n        'answer'    => 'Permissies kunnen lastig worden, vooral bij grote campaigns. Als campaign beheerder kun je naar de ledenpagina van de campaign navigeren en op de knop \"Schakelen\" klikken die wordt weergegeven naast niet-beheerders van de campaign. Als je dit doet, log je in als die gebruiker en kun je de campaign zien zoals zij dat zouden doen. Dit is de gemakkelijkste manier om de permissies van je campaign te controleren.',\n        'question'  => 'Mijn campaign permissies zijn ingesteld, hoe kan ik ze testen?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Alleen de mensen die je voor je campaign uitnodigt, kunnen de door jou gecreëerde  zien en ermee communiceren. Je gegevens zijn privé en altijd onder jouw controle. Je kunt je campaign ook instellen op openbaar, zodat niet-geregistreerde gebruikers deze kunnen bekijken.',\n        'question'  => 'Kan iedereen mijn wereld zien?',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/footer.php",
    "content": "<?php\n\nreturn [\n    'translator_call'   => 'Kanka is vertaald in andere talen dankzij onze geweldige community. Als je wilt helpen met het vertalen van Kanka in jouw taal, neem dan contact met ons op via :discord!',\n];\n"
  },
  {
    "path": "lang/nl/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Community Stemming',\n];\n"
  },
  {
    "path": "lang/nl/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Hall of Fame',\n];\n"
  },
  {
    "path": "lang/nl/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Leer meer',\n        'subscribe'     => 'Abboneer',\n    ],\n    'fields'    => [\n        'firstname'     => 'Voornaam',\n        'lastname'      => 'Achternaam',\n        'notifications' => 'Notificaties',\n    ],\n    'groups'    => [\n        'newsletter'    => 'Nieuwsbrief',\n    ],\n    'headline'  => 'Abonneer je op een of al onze nieuwsbrieven om op de hoogte te blijven van Kanka.',\n    'title'     => 'E-mailupdates',\n];\n"
  },
  {
    "path": "lang/nl/front.php",
    "content": "<?php\n\nreturn [\n    'about'         => [],\n    'campaigns'     => [],\n    'community'     => [],\n    'contact'       => [],\n    'cookie'        => [\n        'dismiss'   => 'Begrepen!',\n        'link'      => 'Leer meer',\n        'message'   => 'Deze website gebruikt cookies om ervoor te zorgen dat je de beste ervaring op onze website krijgt.',\n    ],\n    'faq'           => [],\n    'features'      => [\n        'api'       => [\n            'link'  => 'API docs',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Verhoogde API calls (90 per minuut)',\n            'boosts'            => 'Campaign Boosters',\n            'default_image'     => 'Custom standaard afbeeldingen voor entiteiten',\n            'discord'           => 'Privé Discord kanaal',\n            'free'              => 'Gratis',\n            'hall_of_fame'      => 'Naam in de :link',\n            'impact'            => 'Impact toekomstige functies',\n            'monthly_vote'      => 'Deelname aan de stemming over de community functie',\n            'pagination'        => 'Verhoogde paginering resultaten',\n            'upload_limit'      => 'Upload formaten',\n            'upload_limit_map'  => 'Uploadformaten voor kaarten',\n        ],\n    ],\n    'first_block'   => [],\n    'footer'        => [],\n    'help'          => [],\n    'home'          => [\n        'seo'   => [\n            'meta-description'  => 'Ben je een game master, worldbuilder of een verhalenverteller? We bieden een tabletop campaign manager en een tool voor worldbuilding waarmee je eenvoudig jouw TTRPG-campaigns kunt organiseren, plannen en ervan kunt genieten. We zijn community-driven en het beste van alles is dat onze kernfuncties gratis zijn!',\n        ],\n    ],\n    'master'        => [],\n    'media'         => [],\n    'menu'          => [\n        'dashboard' => 'Dashboard',\n        'login'     => 'Inloggen',\n        'register'  => 'Registreren',\n    ],\n    'meta'          => [\n        'description'   => 'Kanka is een flexibele digitale world builder en online rpg campaign manager',\n        'title'         => 'Kanka - Online tabletop RPG campaign manager en worldbuilding tool',\n    ],\n    'partners'      => [],\n    'pricing'       => [\n        'tier'  => [\n            'free'  => 'Gratis',\n            'month' => 'Maand',\n        ],\n    ],\n    'privacy'       => [],\n    'release'       => [],\n    'roadmap'       => [],\n    'second_block'  => [],\n    'seo'           => [\n        'keywords'  => 'Worldbuilding, Tabletop RPG, RPG Campaign Manager',\n    ],\n    'team'          => [],\n    'terms'         => [],\n];\n"
  },
  {
    "path": "lang/nl/header.php",
    "content": "<?php\n\nreturn [\n    'notifications'     => [\n        'read_all'  => 'Alles lezen',\n    ],\n    'toggle_navigation' => 'Schakel navigatie in/uit',\n];\n"
  },
  {
    "path": "lang/nl/helpers.php",
    "content": "<?php\n\nreturn [\n    'age'           => [],\n    'attributes'    => [],\n    'dice'          => [],\n    'filters'       => [\n        'title' => 'Filters gebruiken',\n    ],\n    'link'          => [\n        'description'   => 'Je kunt eenvoudig koppelen naar andere entiteiten in je campaign met behulp van de volgende afkortingen.',\n    ],\n    'map'           => [],\n    'public'        => 'Bekijk een instructievideo op YouTube waarin openbare campaigns worden uitgelegd.',\n];\n"
  },
  {
    "path": "lang/nl/items.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuw Voorwerp',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'price' => 'Prijs',\n        'size'  => 'Grootte',\n    ],\n    'index'         => [],\n    'inventories'   => [],\n    'placeholders'  => [\n        'price' => 'Prijs van het voorwerp',\n        'size'  => 'Grootte, Gewicht, Afmeting',\n        'type'  => 'Wapen, Potion, Artefact',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Inventories',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/nl/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuw Logboek',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Auteur',\n        'date'      => 'Datum',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'journals'      => [],\n    'placeholders'  => [\n        'author'    => 'Wie schreef het logboek',\n        'date'      => 'Echte werelddatum van het logboek',\n        'type'      => 'Sessie, One Shot, Concept',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Catalaans',\n        'cs'    => 'Tsjechisch',\n        'de'    => 'Duits',\n        'el'    => 'Grieks',\n        'en'    => 'Engels',\n        'en-US' => 'Amerikaans Engels',\n        'es'    => 'Spaans',\n        'fr'    => 'Frans',\n        'gl'    => 'Galicisch',\n        'he'    => 'Hebreeuws',\n        'hr'    => 'Kroatisch',\n        'hu'    => 'Hongaars',\n        'it'    => 'Italiaans',\n        'nb'    => 'Noors (Bokmal)',\n        'nl'    => 'Nederlands',\n        'pl'    => 'Pools',\n        'pt-BR' => 'Braziliaans Portugees',\n        'ru'    => 'Russisch',\n        'sk'    => 'Slowaaks',\n        'tr'    => 'Turks',\n    ],\n    'header'=> 'Talen',\n];\n"
  },
  {
    "path": "lang/nl/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nieuwe Locatie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [\n        'characters'    => 'Bekijk alle personages op deze locatie en de gerelateerde locaties, of alleen degenen die zich hier direct bevinden.',\n    ],\n    'hints'         => [],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'type'  => 'Stad, Koninkrijk, Ruïne',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Voeg een nieuwe groep toe',\n    ],\n    'create'        => [\n        'success'   => 'Groep :name gemaakt',\n        'title'     => 'Nieuwe Groep',\n    ],\n    'delete'        => [\n        'success'   => 'Groep :name verwijderd',\n    ],\n    'edit'          => [\n        'success'   => 'Groep :name bijgewerkt',\n        'title'     => 'Wijzig Groep :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Toon groepsmarkeringen',\n        'position'  => 'Positie',\n    ],\n    'helper'        => [],\n    'hints'         => [\n        'is_shown'  => 'Indien aangevinkt, worden de groepsmarkeringen standaard op de kaart getoond.',\n    ],\n    'placeholders'  => [\n        'name'      => 'Winkels, Schatten, NPCs',\n        'position'  => 'Optioneel veld om de volgorde in te stellen waarin de groepen verschijnen.',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Voeg een nieuw laag toe',\n    ],\n    'base'          => 'Basis Laag',\n    'create'        => [\n        'success'   => 'Laag :name gemaakt.',\n        'title'     => 'Nieuwe Laag',\n    ],\n    'delete'        => [\n        'success'   => 'Laag :name verwijderd.',\n    ],\n    'edit'          => [\n        'success'   => 'Laag :name bijgewerkt.',\n        'title'     => 'Wijzig Laag :name',\n    ],\n    'fields'        => [\n        'position'  => 'Positie',\n        'type'      => 'Laag type',\n    ],\n    'helper'        => [],\n    'placeholders'  => [\n        'name'      => 'Ondergronds, Niveau 2, Schipbreuk',\n        'position'  => 'Optioneel veld om de volgorde in te stellen waarin de lagen verschijnen.',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Overlay',\n        'overlay_shown' => 'Overlay (automatisch tonen)',\n        'standard'      => 'Standaard',\n    ],\n    'types'         => [\n        'overlay'       => 'Overlay (weergegeven boven de actieve laag)',\n        'overlay_shown' => 'Overlay wordt standaard weergegeven',\n        'standard'      => 'Standaard laag (schakelen tussen lagen)',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry' => 'Schrijf een custom invoer veld voor deze markering.',\n        'remove'=> 'Verwijder markering',\n        'update'=> 'Wijzig markering',\n    ],\n    'create'        => [\n        'success'   => 'Markering :name gemaakt.',\n        'title'     => 'Nieuwe Markering',\n    ],\n    'delete'        => [\n        'success'   => 'Markering :name verwijderd.',\n    ],\n    'edit'          => [\n        'success'   => 'Markering :name bijgewerkt.',\n        'title'     => 'Wijzig Markering :name',\n    ],\n    'fields'        => [\n        'circle_radius' => 'Cirkel straal',\n        'copy_elements' => 'Kopieer elementen',\n        'custom_icon'   => 'Aangepast Pictogram',\n        'custom_shape'  => 'Aangepaste Vorm',\n        'font_colour'   => 'Pictogram Kleur',\n        'group'         => 'Markering Groep',\n        'is_draggable'  => 'Sleepbaar',\n        'latitude'      => 'Breedtegraad',\n        'longitude'     => 'Lengtegraad',\n        'opacity'       => 'Doorzichtigheid',\n        'pin_size'      => 'Pin Grootte',\n        'polygon_style' => [\n            'stroke'            => 'Lijn kleur',\n            'stroke-opacity'    => 'Lijn doorzichtigheid',\n            'stroke-width'      => 'Lijn breedte',\n        ],\n    ],\n    'helpers'       => [\n        'base'                      => 'Voeg markeringen toe aan de kaart door op een willekeurige plek te klikken.',\n        'copy_elements'             => 'Kopieer groepen, lagen en markeringen.',\n        'copy_elements_to_campaign' => 'Kopieer groepen, lagen en markeringen van de kaarten. Markeringen die aan een entiteit zijn gekoppeld, worden geconverteerd naar een standaard markering.',\n        'custom_radius'             => 'Selecteer de optie voor custom formaat in de vervolgkeuzelijst om een formaat te definiëren.',\n        'draggable'                 => 'Schakel in om het verplaatsen van een markering in de verkenning modus toe te staan.',\n        'label'                     => 'Een label wordt als een tekstblok op de kaart weergegeven. De inhoud is de naam van de markering van de entiteit.',\n        'polygon'                   => [\n            'edit'  => 'Klik op de kaart om die positie toe te voegen aan de coördinaten van de polygoon.',\n        ],\n    ],\n    'icons'         => [\n        'custom'        => 'Aangepast',\n        'entity'        => 'Entiteit',\n        'exclamation'   => 'Uitroep',\n        'marker'        => 'Markering',\n        'question'      => 'Vraag',\n    ],\n    'placeholders'  => [\n        'custom_shape'  => '100,100 200,240 340,110',\n        'name'          => 'Vereist als er geen entiteit is geselecteerd',\n    ],\n    'shapes'        => [\n        '0' => 'Cirkel',\n        '1' => 'Vierkant',\n        '2' => 'Driehoek',\n        '3' => 'Aangepast',\n    ],\n    'sizes'         => [\n        '0' => 'Mini',\n        '1' => 'Standaard',\n        '2' => 'Klein',\n        '3' => 'Groot',\n        '4' => 'Zeer Groot',\n    ],\n    'tabs'          => [\n        'circle'    => 'Cirkel',\n        'label'     => 'Label',\n        'marker'    => 'Markering',\n        'polygon'   => 'Polygoon',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Terug naar :name',\n        'edit'      => 'Wijzig Kaart',\n        'explore'   => 'Verkennen',\n    ],\n    'create'        => [\n        'title' => 'Nieuwe Kaart',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'dashboard' => [\n            'missing'   => 'Deze kaart heeft een afbeelding nodig om op het dashboard te kunnen weergeven.',\n        ],\n        'explore'   => [\n            'missing'   => 'Voeg een afbeelding toe aan de kaart voordat je deze kunt verkennen.',\n        ],\n    ],\n    'fields'        => [\n        'center_x'      => 'Standaard Lengtegraad Positie',\n        'center_y'      => 'Standaard Breedtegraad Positie',\n        'grid'          => 'Raster',\n        'initial_zoom'  => 'Initiële zoom',\n        'max_zoom'      => 'Maximale zoom',\n        'min_zoom'      => 'Minimale zoom',\n    ],\n    'helpers'       => [\n        'center'            => 'Als je de volgende waarden wijzigt, wordt er bepaald op welk gebied van de kaart de focus is gericht. Als je deze waarden leeg laat, wordt er op het midden van de kaart gefocust.',\n        'distance_measure'  => 'Door de kaart een afstandsmeting te geven, wordt het meetinstrument in de verkenning modus ingeschakeld.',\n        'grid'              => 'Definieer een raster grootte die in de verkenning modus wordt weergegeven.',\n        'initial_zoom'      => 'Het aanvankelijke zoomniveau waarmee een kaart is geladen. De standaardwaarde is :default, terwijl de hoogst toegestane waarde :max is en de laagst toegestane waarde :min.',\n        'max_zoom'          => 'Op een kaart kan maximaal worden ingezoomd. De standaardwaarde is :default, terwijl de hoogst toegestane waarde :max is.',\n        'min_zoom'          => 'Op een kaart kan maximaal worden uitgezoomd. De standaardwaarde is :default, terwijl de laagst toegestane waarde :min is.',\n        'missing_image'     => 'Sla de kaart met een afbeelding op voordat je lagen en markeringen kunt toevoegen.',\n    ],\n    'index'         => [],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Groepen',\n        'layers'    => 'Lagen',\n        'markers'   => 'Markeringen',\n        'settings'  => 'Instellingen',\n    ],\n    'placeholders'  => [\n        'center_x'  => 'Laat leeg om de kaart in het midden te laden',\n        'center_y'  => 'Laat leeg om de kaart in het midden te laden',\n        'grid'      => 'Afstand in pixel tussen raster elementen. Laat leeg om het raster te verbergen.',\n        'name'      => 'Naam van de kaart',\n        'type'      => 'Dungeon, Stad, Sterrestelsel',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Kaarten',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/nl/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'boosting'  => 'Boosten',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuwe Notitie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'Sub Notities',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'note'  => 'Kies een bovenliggende notitie',\n        'type'  => 'Religie, Ras, Politiek systeem',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/notifications.php",
    "content": "<?php\n\nreturn [\n    'campaign'          => [\n        'application'   => [\n            'approved'  => 'Je aanvraag voor de campaign :campaign is goedgekeurd.',\n            'new'       => 'Nieuwe aanvraag voor :campaign.',\n            'rejected'  => 'Je aanvraag voor de :campaign campaign is afgewezen. Reden opgegeven: :reason',\n        ],\n        'asset_export'  => 'Er is een export van campaign assets beschikbaar. De link is beschikbaar voor :time minuten.',\n        'boost'         => [\n            'add'           => 'Campaign :campaign wordt ge-boost door :user.',\n            'remove'        => ':user boost niet langer de campaign :campaign.',\n            'superboost'    => 'Campaign :campaign wordt ge-superboost door :user',\n        ],\n        'export'        => 'Een export van een campaign is beschikbaar. De link is beschikbaar voor :time minutes.',\n        'export_error'  => 'Er is een fout opgetreden bij het exporteren van je campaign. Neem contact met ons op als dit probleem zich blijft voordoen.',\n        'join'          => ':user heeft zich aangesloten bij de campaign :campaign.',\n        'leave'         => ':user heeft de campaign :campaign verlaten.',\n        'role'          => [\n            'add'       => 'Je bent toegevoegd aan de :role rol in de :campaign campaign.',\n            'remove'    => 'Je bent verwijderd van de :role rol in de :campaign campaign.',\n        ],\n    ],\n    'header'            => 'Je hebt :count notificaties',\n    'index'             => [\n        'title' => 'Notificaties',\n    ],\n    'no_notifications'  => 'Er zijn momenteel geen notificaties.',\n    'subscriptions'     => [\n        'charge_fail'   => 'Er is een fout opgetreden bij het verwerken van uw betaling. Wacht even terwijl we het opnieuw proberen. Als er niets verandert, neem dan contact met ons op.',\n        'deleted'       => 'Uw abonnement op Kanka is geannuleerd na te veel mislukte pogingen om uw kaart op te laden. Ga naar uw abonnementsinstellingen en probeer uw betalingsgegevens bij te werken.',\n        'ended'         => 'Je abonnement op Kanka is beëindigd. Je campaign boosts en Discord rollen zijn verwijderd. We hopen je snel weer te zien!',\n        'failed'        => 'We konden uw betalingsgegevens niet in rekening brengen. Werk ze bij in uw betalingsmethode-instellingen.',\n        'started'       => 'Je abonnement op Kanka is begonnen.',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuwe Organisatie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'members'   => 'Leden',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'members'       => [\n        'destroy'       => [\n            'success'   => 'Lid verwijderd van de organisatie',\n        ],\n        'edit'          => [\n            'title' => 'Werk Lid bij voor :name',\n        ],\n        'fields'        => [\n            'role'  => 'Rol',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Alle personages die lid zijn van deze organisaties en zijn suborganisaties.',\n            'members'       => 'Alle personages die lid zijn van deze organisatie.',\n        ],\n        'placeholders'  => [\n            'role'  => 'Leider, Lid, Hoog-lid, Spymaster',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'Sekte, Gang, Rebellie, Fandom',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/pagination.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n    'previous' => '&laquo; Vorige',\n    'next' => 'Volgende &raquo;',\n];\n"
  },
  {
    "path": "lang/nl/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Er waren enkele problemen met je invoer.',\n        'title'         => 'Oeps!',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/passwords.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n    'password' => 'Wachtwoord moet minimaal zes tekens lang zijn en de wachtwoorden moeten overeenkomen.',\n    'reset' => 'Het wachtwoord van uw account is gewijzigd.',\n    'sent' => 'We hebben een e-mail verstuurd met instructies om een nieuw wachtwoord in te stellen.',\n    'token' => 'Dit wachtwoord herstel token is niet geldig.',\n    'user' => 'Geen gebruiker bekend met het e-mailadres.',\n];\n"
  },
  {
    "path": "lang/nl/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/profiles.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => [\n        'success'   => 'Avatar bijgewerkt.',\n    ],\n    'edit'          => [\n        'success'   => 'Profiel bijgewerkt',\n    ],\n    'editors'       => [],\n    'fields'        => [\n        'avatar'                    => 'Avatar',\n        'email'                     => 'E-mail',\n        'hide_subscription'         => 'Verberg mijn naam voor de :hall_of_fame.',\n        'last_login_share'          => 'Deel met andere campaign leden wanneer ik voor het laatst heb ingelogd.',\n        'name'                      => 'Naam',\n        'new_password'              => 'Nieuw Wachtwoord',\n        'new_password_confirmation' => 'Nieuw Wachtwoord Bevestiging',\n        'newsletter'                => 'Ik wens soms per e-mail gecontacteerd te worden.',\n        'password'                  => 'Huidig wachtwoord',\n        'settings'                  => 'Instellingen',\n        'theme'                     => 'Thema',\n    ],\n    'newsletter'    => [\n        'title' => 'Nieuwsbrieven',\n    ],\n    'password'      => [\n        'success'   => 'Wachtwoord bijgewerkt',\n    ],\n    'placeholders'  => [\n        'email'                     => 'Jouw e-mailadres',\n        'name'                      => 'Je naam zoals weergegeven',\n        'new_password'              => 'Je nieuwe wachtwoord',\n        'new_password_confirmation' => 'Bevestig je nieuwe wachtwoord',\n        'password'                  => 'Geef je huidige wachtwoord op voor eventuele wijzigingen',\n    ],\n    'sections'      => [\n        'delete'    => [\n            'delete'    => 'Verwijder mijn account',\n            'title'     => 'Verwijder je account',\n            'warning'   => 'Door je account te verwijderen, gaan al je gegevens verloren. Weet je het zeker?',\n        ],\n        'password'  => [\n            'title' => 'Wijzig je wachtwoord',\n        ],\n    ],\n    'settings'      => [\n        'success'   => 'Instellingen gewijzigd.',\n    ],\n    'theme'         => [\n        'success'   => 'Thema gewijzigd.',\n        'themes'    => [\n            'dark'      => 'Donker',\n            'default'   => 'Standaard',\n            'future'    => 'Futuristisch',\n            'midnight'  => 'Middernacht Blauw',\n        ],\n    ],\n    'title'         => 'Werk je profiel bij',\n    'workflows'     => [\n        'created'   => 'Ga naar gemaakte entiteiten',\n        'default'   => 'Lijst van entiteiten',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nieuwe Quest',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_elements' => 'Kopieer elementen die aan de quest zijn gekoppeld',\n        'date'          => 'Datum',\n        'is_completed'  => 'Voltooid',\n        'role'          => 'Rol',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'date'  => 'Echte werelddatum voor de quest',\n        'role'  => 'De rol van deze entiteit in de quest',\n        'type'  => 'Karakter Boog, Sidequest, Hoofd',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nieuw Ras',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Mens, Fey, Borg',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/nl/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Je sessie is verlopen. Probeer het a.u.b. opnieuw.',\n    'unknown_entity'    => 'Sorry, we weten niet wat een \\':entity\\' is.',\n];\n"
  },
  {
    "path": "lang/nl/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'     => 'Gebeurtenis',\n        'other'     => 'Andere',\n        'release'   => 'Release',\n        'vote'      => 'Community stemming',\n    ],\n    'index'         => [\n        'description'   => 'De laatste updates voor kanka.io',\n        'title'         => 'Releases',\n    ],\n    'post'          => [\n        'footer'    => 'Door :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Terug naar Releases',\n        'title'     => 'Release :name',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chronicles of Darkness',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/search.php",
    "content": "<?php\n\nreturn [\n    'no_results'    => 'Geen resultaten.',\n    'title'         => 'Zoeken',\n];\n"
  },
  {
    "path": "lang/nl/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        'actions'           => [\n            'social'            => 'Schakel over naar Kanka Login',\n            'update_email'      => 'Werk e-mail bij',\n            'update_password'   => 'Vernieuw wachtwoord',\n        ],\n        'email'             => 'E-mailadres wijzigen',\n        'email_success'     => 'E-mail bijgwerkt.',\n        'password'          => 'Wijzig wachtwoord',\n        'password_success'  => 'Wachtwoord bijgewerkt.',\n        'social'            => [\n            'error'     => 'Je gebruikt de Kanka-login al voor dit account.',\n            'helper'    => 'Je account wordt momenteel beheerd door :provider. Je kunt stoppen met het gebruik en overschakelen naar de standaard Kanka-login door een wachtwoord in te stellen.',\n            'success'   => 'Je account gebruikt nu de Kanka-login.',\n            'title'     => 'Sociaal voor Kanka',\n        ],\n        'title'             => 'Account',\n    ],\n    'api'           => [\n        'helper'    => 'Welkom bij de Kanka API\\'s. Genereer een Persoonlijke Toegangstoken om in je API verzoek te gebruiken om informatie te verzamelen over de campaigns waarvan jij deel uitmaakt.',\n        'link'      => 'Lees de API documentatie',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Verbind',\n            'remove'    => 'Verwijder',\n        ],\n        'benefits'  => 'Kanka biedt enkele integratie met services van derden. Voor de toekomst zijn er meer integraties van derden gepland.',\n        'discord'   => [\n            'errors'    => [\n                'add'   => 'Er is een fout opgetreden bij het koppelen van je Discord-account aan Kanka. Probeer het a.u.b. opnieuw.',\n            ],\n            'success'   => [\n                'add'       => 'Je Discord account is gekoppeld.',\n                'remove'    => 'Je Discord account is ontkoppeld.',\n            ],\n            'text'      => 'Krijg automatisch toegang tot je abonnement rollen.',\n        ],\n        'title'     => 'App Integratie',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'Campaign :name is al boosted',\n            'exhausted_boosts'      => 'Je hebt geen boosts meer om te geven. Haal je boost uit een campaign voordat je deze aan een andere geeft.',\n            'exhausted_superboosts' => 'Je hebt geen boosts meer. Je hebt 3 boosters nodig om een campaign een superboost te geven.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Oostenrijk',\n        'belgium'       => 'België',\n        'france'        => 'Frankrijk',\n        'germany'       => 'Duitsland',\n        'italy'         => 'Italië',\n        'netherlands'   => 'Nederland',\n        'spain'         => 'Spanje',\n    ],\n    'invoices'      => [],\n    'layout'        => [\n        'title' => 'Lay-out',\n    ],\n    'marketplace'   => [],\n    'menu'          => [\n        'account'               => 'Account',\n        'api'                   => 'API',\n        'apps'                  => 'Apps',\n        'other'                 => 'Andere',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Betalingsmogelijkheden',\n        'personal_settings'     => 'Persoonlijke Instellingen',\n        'profile'               => 'Profiel',\n        'settings'              => 'Instellingen',\n        'subscription'          => 'Abbonement',\n        'subscription_status'   => 'Abbonement Status',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Verouderde functie - als je Kanka wilt steunen, doe dit dan met een :subscription. Patreon-koppeling is nog steeds actief voor onze klanten die hun account hebben gekoppeld voordat ze weggingen van Patreon.',\n        'pledge'        => 'Toezegging: :name',\n        'remove'        => [\n            'button'    => 'Ontkoppel je Patreon-account',\n            'success'   => 'Je Patreon-account is ontkoppeld.',\n            'text'      => 'Als je je Patreon-account met Kanka ontkoppelt, worden je bonussen, naam in de hall of fame, campaign boosts en andere functies verwijderd die zijn gekoppeld aan het ondersteunen van Kanka. Geen van je boosted inhoud gaat verloren (bijv. entiteit headers). Door je opnieuw te abonneren, heb je toegang tot al je eerdere gegevens, inclusief de mogelijkheid om je eerder boosted campaigns een boost te geven.',\n            'title'     => 'Ontkoppel je Patreon-account met Kanka',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Profiel bijwerken',\n        ],\n        'avatar'    => 'Profiel Foto',\n        'success'   => 'Profiel bijgewerkt.',\n        'title'     => 'Persoonlijk profiel',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Annuleer abonnement',\n            'subscribe'         => 'Abboneer',\n            'update_currency'   => 'Bewaar de gewenste valuta',\n        ],\n        'billing'               => [\n            'helper'    => 'Je factuurgegevens worden veilig verwerkt en opgeslagen via :stripe. Deze betaalmethode wordt gebruikt voor al je abonnementen.',\n            'saved'     => 'Opgeslagen betaalmethode',\n        ],\n        'cancel'                => [\n            'text'  => 'Spijtig om je te zien gaan! Als je jouw abonnement opzegt, blijft het actief tot je volgende betalingscyclus, waarna je jouw campaign boosts en andere voordelen met betrekking tot het ondersteunen van Kanka kwijtraakt. Vul gerust het volgende formulier in om ons te laten weten wat we beter kunnen doen, of wat tot je beslissing heeft geleid.',\n        ],\n        'cancelled'             => 'Je abonnement is opgezegd. Je kunt een abonnement verlengen zodra je huidige abonnement afloopt.',\n        'change'                => [\n            'text'  => [\n                'monthly'   => 'Je abonneert je op de :tier tier, maandelijks gefactureerd voor :amount.',\n                'yearly'    => 'Je abonneert je op de :tier tier, jaarlijks gefactureerd voor :amount.',\n            ],\n            'title' => 'Wijzig Abonnement Tier',\n        ],\n        'currencies'            => [\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Wijzig de valuta van je voorkeur voor facturering',\n        ],\n        'errors'                => [\n            'callback'      => 'Onze betalingsprovider heeft een fout gemeld. Probeer het opnieuw of neem contact met ons op als het probleem zich blijft voordoen.',\n            'subscribed'    => 'Kan je abonnement niet verwerken. Stripe gaf de volgende hint.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Actief sinds',\n            'active_until'      => 'Actief tot',\n            'billing'           => 'Facturering',\n            'currency'          => 'Facturering Valuta',\n            'payment_method'    => 'Betalingsmiddel',\n            'plan'              => 'Huidige plan',\n            'reason'            => 'Reden',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Betaal je abonnement met :method. Deze betaalmethode wordt aan het einde van je abonnement niet automatisch verlengd. :method is alleen beschikbaar in euro\\'s.',\n            'alternatives_warning'  => 'Het is niet mogelijk om je abonnement op te waarderen wanneer je deze methode gebruikt. Maak een nieuw abonnement aan wanneer je huidige afloopt.',\n            'alternatives_yearly'   => 'Vanwege de beperkingen rond terugkerende betalingen, is de :method alleen beschikbaar voor jaarlijkse abonnementen',\n        ],\n        'manage_subscription'   => 'Beheer abonnement',\n        'payment_method'        => [\n            'actions'       => [\n                'add_new'           => 'Voeg een nieuwe betaalmethode toe',\n                'change'            => 'Verander de betaalmethode',\n                'save'              => 'Bewaar betaalmethode',\n                'show_alternatives' => 'Alternatieve betalingsmogelijkheden',\n            ],\n            'add_one'       => 'Je hebt momenteel geen betalingsmethode opgeslagen.',\n            'alternatives'  => 'Je kunt je abonneren met behulp van deze alternatieve betalingsopties. Met deze actie wordt je account eenmaal in rekening gebracht en wordt je abonnement niet elke maand automatisch verlengd.',\n            'card'          => 'Kaart',\n            'card_name'     => 'Naam op kaart',\n            'country'       => 'Land van verblijf',\n            'ending'        => 'Eindigend in',\n            'helper'        => 'Deze kaart wordt gebruikt voor al je abonnementen.',\n            'new_card'      => 'Voeg een nieuwe betaalmethode toe',\n            'saved'         => ':brand eindigend met :last4',\n        ],\n        'placeholders'          => [\n            'reason'    => 'Vertel ons desgewenst waarom je Kanka niet langer steunt. Ontbreekt er een functie? Is je financiële situatie veranderd?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount maandelijks gefactureerd',\n            'cost_yearly'   => ':currency :amount jaarlijks gefactureerd',\n        ],\n        'sub_status'            => 'Abonnementsgegevens',\n        'subscription'          => [\n            'actions'   => [\n                'downgrading'       => 'Neem contact met ons op voor het downgraden',\n                'rollback'          => 'Schakel over naar Kobold',\n                'subscribe'         => 'Verander naar :tier maandelijks',\n                'subscribe_annual'  => 'Verander naar :tier jaarlijks',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Je betaling is geregistreerd. Je krijgt een melding zodra deze is verwerkt en je abonnement actief is.',\n            'callback'      => 'Je inschrijving is gelukt. Je account wordt bijgewerkt zodra onze betalingsprovider ons op de hoogte stelt van de wijziging (dit kan enkele minuten duren).',\n            'currency'      => 'De valuta-instelling van je voorkeur is bijgewerkt.',\n            'subscribed'    => 'Je inschrijving is gelukt. Vergeet niet om je te abonneren op de Community Vote-nieuwsbrief om op de hoogte te worden gehouden wanneer een stemming live gaat. Je kunt je nieuwsbriefinstellingen wijzigen op je profielpagina.',\n        ],\n        'tiers'                 => 'Abonnement Tiers',\n        'trial_period'          => 'Jaarabonnementen hebben een annuleringsbeleid van 14 dagen. Neem contact met ons op via :email als je jouw jaarabonnement wilt annuleren en een terugbetaling wilt ontvangen.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Upgrade- en downgrade-informatie',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Je bonussen blijven geactiveerd tot het einde van je betalingsperiode.',\n                    'boosts'    => 'Hetzelfde gebeurt voor je boosted campaigns. Boosted functies worden onzichtbaar, maar worden niet verwijderd wanneer een campaign niet langer wordt ge-boost.',\n                    'kobold'    => 'Om je abonnement te annuleren, ga je naar het Kobold tier.',\n                ],\n                'title'     => 'Bij het opzeggen van je abonnement',\n            ],\n            'downgrade' => [\n                'bullets'   => [\n                    'end'   => 'Je huidige niveau blijft actief tot het einde van je huidige factureringscyclus, waarna je wordt gedowngraded naar je nieuwe tier.',\n                ],\n                'title'     => 'Bij het downgraden naar een lager niveau',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Uw betalingsmethode wordt onmiddellijk gefactureerd en u krijgt toegang tot uw nieuwe niveau.',\n                    'prorate'   => 'Bij het upgraden van Owlbear naar Elemental, wordt alleen het verschil met je nieuwe niveau in rekening gebracht.',\n                ],\n                'title'     => 'Bij het upgraden naar een hoger niveau',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'We konden uw creditcard niet belasten. Werk uw creditcardgegevens bij en we zullen proberen deze de komende dagen opnieuw in rekening te brengen. Als het opnieuw mislukt, wordt uw abonnement opgezegd.',\n            'patreon'       => 'Uw account is momenteel gekoppeld aan Patreon. Ontkoppel uw account in uw: patreon-instellingen voordat u overschakelt naar een Kanka-abonnement.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/nl/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'created_campaigns' => 'Jouw Campaigns',\n        'new_campaign'      => 'Nieuwe Campaign',\n        'public_campaigns'  => 'Openbare Campaigns',\n        'updated'           => 'Bijgewerkt',\n    ],\n    'dashboard'         => 'Dashboard',\n    'entity-creator'    => 'Quick Creator',\n    'gallery'           => 'Galerij',\n    'other'             => 'Andere',\n    'world'             => 'Wereld',\n];\n"
  },
  {
    "path": "lang/nl/starter.php",
    "content": "<?php\n\nreturn [\n    'character1'    => [\n        'history'   => 'Dit is een voorbeeld personage. James werd geboren als zoon van Mance Owlchester en Rige Dunton en groeide op op het platteland van Genory voordat hij naar de hoofdstad Unria verhuisde om als schrijver voor de koning te werken.',\n        'sex'       => 'Mannelijk',\n        'title'     => 'Grijze Jager',\n    ],\n    'character2'    => [\n        'history'   => 'Dit is een voorbeeld personage. Van jongs af aan is Irwie altijd gefascineerd geweest door explosieven en heeft ze haar carrière gewijd aan het vak.',\n        'sex'       => 'Vrouwelijk',\n        'title'     => 'Koningin van Explosies',\n    ],\n    'item1'         => [],\n    'kingdom1'      => [\n        'description'   => 'Dit is een voorbeeld locatie die is gemaakt om je te laten zien wat je met de app kunt doen.',\n        'history'       => '(voorbeeld) Het Koninkrijk van Genory werd gesticht door Genoriaanse stamleden aan het einde van de 5e eeuw nadat ze het land waren binnengevallen vanuit de Hottens.',\n        'type'          => 'Koninkrijk',\n    ],\n    'kingdom2'      => [\n        'description'   => '(voorbeeld) Ulyss is de hoofdstad van het koninkrijk Genory, en de derde grootste stad van Agagir Alliance.',\n        'history'       => '(voorbeeld) Ulyss is de hoofdstad van het koninkrijk Genory. Het werd opgericht door Frasan Irwen en is gelegen aan de rivier de Unri.',\n        'type'          => 'Hoofdstad',\n    ],\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/nl/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe kan je betaalmethode niet belasten. Je abonnement is daarom gedeactiveerd.',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'   => 'Voeg een nieuwe tag toe',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nieuwe Tag',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'  => 'Gerelateerden',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'children'  => 'Deze lijst bevat alle entiteiten rechtstreeks in deze tag en in alle geneste tags.',\n        'tag'       => 'Hieronder worden alle tags weergegeven die direct onder deze tag staan.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Lore, Oorlogen, Geschiedenis, Religie, Vexillologie',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Gerelateerden',\n        ],\n    ],\n    'tags'          => [],\n];\n"
  },
  {
    "path": "lang/nl/teams.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'translations'  => 'Vertalingen',\n    ],\n    'people'=> [\n        'jay'   => [\n            'title' => 'Oprichter en hoofdontwikkelaar',\n        ],\n        'jon'   => [\n            'title' => 'Medeoprichter & Business Manager',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/nl/tiers.php",
    "content": "<?php\n\nreturn [\n    'current'   => 'Je huidige abbonement',\n    'features'  => [\n        'api_requests'      => ':amount API requests / min',\n        'boosters'          => 'Campaign Boosters',\n        'discord'           => 'Discord rollen',\n        'feature_influence' => 'Nieuwe feature-invloed',\n        'file_size'         => ':size Bestand grootte uploads',\n        'nice_image'        => 'Standaard entiteit afbeeldingen',\n        'no_ads'            => 'Geen advertenties',\n        'pagination'        => ':amount Maximaal gepagineerde resultaten (entiteiten weergegeven per pagina)',\n    ],\n    'pricing'   => ':currency :amount / maand',\n];\n"
  },
  {
    "path": "lang/nl/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'success'   => 'Element toegevoegd aan de tijdlijn.',\n        'title'     => 'Nieuw Tijdlijn Element',\n    ],\n    'delete'        => [\n        'success'   => 'Element :name verwijderd',\n    ],\n    'edit'          => [\n        'success'   => 'Element bijgewerkt.',\n        'title'     => 'Wijzig Tijdlijn Element',\n    ],\n    'fields'        => [\n        'date'  => 'Datum',\n        'era'   => 'Tijdperk',\n        'icon'  => 'Pictogram',\n    ],\n    'helpers'       => [\n        'icon'  => 'Kopieer de HTML van een pictogram van :fontawesome of :rpgawesome',\n    ],\n    'placeholders'  => [\n        'date'      => 'Bijv. 42 Maart of 1332-1337',\n        'name'      => 'Vereist als er geen entiteit is geselecteerd',\n        'position'  => 'Positie in de lijst met elementen voor het tijdperk. Laat leeg om aan het einde toe te voegen.',\n    ],\n];\n"
  },
  {
    "path": "lang/nl/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Voeg een nieuw tijdperk toe',\n    ],\n    'create'        => [\n        'success'   => 'Tijdperk :name gemaakt',\n        'title'     => 'Nieuw Tijdperk',\n    ],\n    'delete'        => [\n        'success'   => 'Tijdperk :name verwijderd.',\n    ],\n    'edit'          => [\n        'success'   => 'Tijdperk :name bijgewerkt.',\n        'title'     => 'Wijzig Tijdperk :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Afkorting',\n        'end_year'      => 'Einde jaar',\n        'start_year'    => 'Start Jaar',\n    ],\n    'helpers'       => [\n        'eras'      => 'De tijdlijn moet worden gemaakt voordat er tijdperken aan kunnen worden toegevoegd.',\n        'primary'   => 'Scheid je tijdlijn in tijdperken. Een tijdlijn heeft minstens één tijdperk nodig om goed te kunnen werken.',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'AD, BC, BCE',\n        'end_year'      => 'Jaar waarin het tijdperk eindigt. Laat leeg als dit het huidige tijdperk is.',\n        'name'          => 'Moderne Tijdperk, Bronze Tijdperk, Galactische Oorlogen',\n        'start_year'    => 'Jaar waarin het tijdperk begint. Laat leeg als dit het eerste tijdperk is.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/nl/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Voeg toe aan tijdperk :era',\n        'back'          => 'Terug naar :name',\n        'save_order'    => 'Nieuwe volgorde opslaan',\n    ],\n    'create'        => [\n        'title' => 'Nieuwe Tijdlijn',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_eras'     => 'Kopieer tijdperken',\n        'eras'          => 'Tijdperken',\n        'reverse_order' => 'Keer tijdperk volgorde om',\n    ],\n    'helpers'       => [\n        'reverse_order' => 'Schakel in om tijdperken in omgekeerde chronologische volgorde weer te geven (eerst het oudere tijdperk)',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Primair, Wereldkroniek, Koninkrijk geschiedenis',\n    ],\n    'show'          => [],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/nl/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n    'accepted'              => ':attribute moet geaccepteerd zijn.',\n    'active_url'            => ':attribute is geen geldige URL.',\n    'after'                 => ':attribute moet een datum na :date zijn.',\n    'after_or_equal'        => ':attribute moet een datum na of gelijk aan :date zijn.',\n    'alpha'                 => ':attribute mag alleen letters bevatten.',\n    'alpha_dash'            => ':attribute mag alleen letters, nummers, underscores (_) en streepjes (-) bevatten.',\n    'alpha_num'             => ':attribute mag alleen letters en nummers bevatten.',\n    'array'                 => ':attribute moet geselecteerde elementen bevatten.',\n    'before'                => ':attribute moet een datum voor :date zijn.',\n    'before_or_equal'       => ':attribute moet een datum voor of gelijk aan :date zijn.',\n    'between'               => [\n        'array'     => ':attribute moet tussen :min en :max items bevatten.',\n        'file'      => ':attribute moet tussen :min en :max kilobytes zijn.',\n        'numeric'   => ':attribute moet tussen :min en :max zijn.',\n        'string'    => ':attribute moet tussen :min en :max karakters zijn.',\n    ],\n    'boolean'               => ':attribute moet ja of nee zijn.',\n    'confirmed'             => ':attribute bevestiging komt niet overeen.',\n    'date'                  => ':attribute moet een datum bevatten.',\n    'date_format'           => ':attribute moet een geldig datum formaat bevatten.',\n    'different'             => ':attribute en :other moeten verschillend zijn.',\n    'digits'                => ':attribute moet bestaan uit :digits cijfers.',\n    'digits_between'        => ':attribute moet bestaan uit minimaal :min en maximaal :max cijfers.',\n    'dimensions'            => ':attribute heeft geen geldige afmetingen voor afbeeldingen.',\n    'distinct'              => ':attribute heeft een dubbele waarde.',\n    'email'                 => ':attribute is geen geldig e-mailadres.',\n    'exists'                => ':attribute bestaat niet.',\n    'file'                  => ':attribute moet een bestand zijn.',\n    'filled'                => ':attribute is verplicht.',\n    'image'                 => ':attribute moet een afbeelding zijn.',\n    'in'                    => ':attribute is ongeldig.',\n    'in_array'              => ':attribute bestaat niet in :other.',\n    'integer'               => ':attribute moet een getal zijn.',\n    'ip'                    => ':attribute moet een geldig IP-adres zijn.',\n    'ipv4'                  => ':attribute moet een geldig IPv4-adres zijn.',\n    'ipv6'                  => ':attribute moet een geldig IPv6-adres zijn.',\n    'json'                  => ':attribute moet een geldige JSON-string zijn.',\n    'max'                   => [\n        'array'     => ':attribute mag niet meer dan :max items bevatten.',\n        'file'      => ':attribute mag niet meer dan :max kilobytes zijn.',\n        'numeric'   => ':attribute mag niet hoger dan :max zijn.',\n        'string'    => ':attribute mag niet uit meer dan :max karakters bestaan.',\n    ],\n    'mimes'                 => ':attribute moet een bestand zijn van het bestandstype :values.',\n    'mimetypes'             => ':attribute moet een bestand zijn van het bestandstype :values.',\n    'min'                   => [\n        'array'     => ':attribute moet minimaal :min items bevatten.',\n        'file'      => ':attribute moet minimaal :min kilobytes zijn.',\n        'numeric'   => ':attribute moet minimaal :min zijn.',\n        'string'    => ':attribute moet minimaal :min karakters zijn.',\n    ],\n    'not_in'                => 'Het formaat van :attribute is ongeldig.',\n    'numeric'               => ':attribute moet een nummer zijn.',\n    'present'               => ':attribute moet bestaan.',\n    'regex'                 => ':attribute formaat is ongeldig.',\n    'required'              => ':attribute is verplicht.',\n    'required_if'           => ':attribute is verplicht indien :other gelijk is aan :value.',\n    'required_unless'       => ':attribute is verplicht tenzij :other gelijk is aan :values.',\n    'required_with'         => ':attribute is verplicht i.c.m. :values',\n    'required_with_all'     => ':attribute is verplicht i.c.m. :values',\n    'required_without'      => ':attribute is verplicht als :values niet ingevuld is.',\n    'required_without_all'  => ':attribute is verplicht als :values niet ingevuld zijn.',\n    'same'                  => ':attribute en :other moeten overeenkomen.',\n    'size'                  => [\n        'array'     => ':attribute moet :size items bevatten.',\n        'file'      => ':attribute moet :size kilobyte zijn.',\n        'numeric'   => ':attribute moet :size zijn.',\n        'string'    => ':attribute moet :size karakters zijn.',\n    ],\n    'string'                => ':attribute moet een tekenreeks zijn.',\n    'timezone'              => ':attribute moet een geldige tijdzone zijn.',\n    'unique'                => ':attribute is al in gebruik.',\n    'uploaded'              => 'Het uploaden van :attribute is mislukt.',\n    'url'                   => ':attribute is geen geldige URL.',\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n    'custom'    => [\n        'attribute-name'    => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n    'attributes'    => [\n        'address'               => 'adres',\n        'age'                   => 'leeftijd',\n        'available'             => 'beschikbaar',\n        'city'                  => 'stad',\n        'content'               => 'inhoud',\n        'country'               => 'land',\n        'date'                  => 'datum',\n        'day'                   => 'dag',\n        'description'           => 'omschrijving',\n        'email'                 => 'e-mailadres',\n        'excerpt'               => 'uittreksel',\n        'first_name'            => 'voornaam',\n        'gender'                => 'geslacht',\n        'hour'                  => 'uur',\n        'last_name'             => 'achternaam',\n        'message'               => 'boodschap',\n        'minute'                => 'minuut',\n        'mobile'                => 'mobiel',\n        'month'                 => 'maand',\n        'name'                  => 'naam',\n        'password'              => 'wachtwoord',\n        'password_confirmation' => 'wachtwoordbevestiging',\n        'phone'                 => 'telefoonnummer',\n        'second'                => 'seconde',\n        'sex'                   => 'geslacht',\n        'size'                  => 'grootte',\n        'subject'               => 'onderwerp',\n        'time'                  => 'tijd',\n        'title'                 => 'titel',\n        'username'              => 'gebruikersnaam',\n        'year'                  => 'jaar',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'Dodaj elementom',\n        ],\n        'create'        => [\n            'attach_success'    => '{1} Zdolność :name dodano :count elementowi. |[2,*] Zdolność :name dodano :count elementom.',\n            'helper'            => 'Dodaje :name jednemu lub wielu elementom.',\n            'title'             => 'Dodawanie elementom',\n        ],\n        'description'   => 'Elementy posiadające tę zdolność',\n        'title'         => 'Elementy zdolności :name',\n    ],\n    'create'        => [\n        'title' => 'Nowa zdolność',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'entities'      => [],\n    'fields'        => [\n        'charges'   => 'Ładunki',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Dodaj moce, czary i talenty. Wielu twórców używa ich do modelowania klas z D&D.',\n    ],\n    'placeholders'  => [\n        'charges'   => 'Liczba ładunków zdolności. Możesz wpisać wartość cechy jako {Level}*{CHA}',\n        'name'      => 'Kula ognia, alarm, podstępny atak',\n        'type'      => 'Czar, umiejętność, technika bojowa',\n    ],\n    'reorder'       => [\n        'parentless'    => 'Bez źródła',\n        'success'       => 'Zmieniono kolejność zdolności.',\n        'title'         => 'Zmień kolejność zdolności',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Zmień kolejność',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/account/email.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Zmień email',\n    ],\n    'fields'    => [\n        'email' => 'Nowy adres email',\n    ],\n    'helpers'   => [\n        'email' => 'Sprawdź, czy jest wpisany poprawnie.',\n    ],\n    'subtitle'  => 'Zmień adres email przypisany do konta.',\n    'title'     => 'Zmiana adresu email',\n];\n"
  },
  {
    "path": "lang/pl/account/password.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Zmień hasło',\n    ],\n    'fields'    => [\n        'password'  => 'Nowe hasło',\n    ],\n    'helpers'   => [\n        'password'              => 'Użyj managera by wygenerować silne hasło.',\n        'password_confirmation' => 'Tylko się nie pomyl!',\n    ],\n    'subtitle'  => 'Zmienia hasło konta. Spowoduje wylogowanie na wszystkich innych urządzeniach.',\n    'title'     => 'Zmiana hasła',\n];\n"
  },
  {
    "path": "lang/pl/account/social.php",
    "content": "<?php\n\nreturn [\n    'info'      => 'Zalogowano przez :provider',\n    'subtitle'  => 'Zmienia logowanie przez :provider na logowanie za pośrednictwem Kanki, przy użyciu adresu email i hasła',\n    'title'     => 'Zmiana sposobu logowania',\n];\n"
  },
  {
    "path": "lang/pl/assistance.php",
    "content": "<?php\n\nreturn [\n    'fields'        => [\n        'campaign'  => 'Kampania',\n    ],\n    'opening'       => 'Zespół Kanki przygotował tę stronę w celu rozwiązywania problemów.',\n    'placeholders'  => [\n        'campaign'  => 'Wybierz kampanię której jesteś administratorem',\n    ],\n    'select'        => 'Wybierz kampanię której jesteś administratorem z listy poniżej by wytworzyć specjalną jednorazową przepustkę, która pozwoli członkowi zespołu Kanki tymczasowo dołączyć do niej jako administrator.',\n    'success'       => [\n        'opening'   => 'Wytworzono przepustkę. Zespół Kanki został powiadomiony i wkrótce dołączy do kampanii by ci pomóc. Zwykle kontaktujemy się za pośrednictwem :discord jeżeli musimy coś wspólnie omówić.',\n        'secret'    => 'Przepustki może użyć wyłącznie zweryfikowany członek zespołu Kanki. Nie przyda się nikomu poza tym, więc nie musisz robić z niej tajemnicy.',\n        'token'     => 'Twoja przepustka dla wspierającego:',\n    ],\n    'title'         => 'Rozwiązywanie problemów',\n];\n"
  },
  {
    "path": "lang/pl/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'create'                => [\n        'title' => 'Nowy szablon cech',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [\n        'auto_apply'    => 'Stosuj automatycznie',\n        'is_enabled'    => 'Aktywny',\n    ],\n    'hints'                 => [\n        'automatic'                 => 'Cechy przypisane automatycznie według szablonu :link.',\n        'automatic_apply'           => '{1} Zastosowano automatycznie :count cechę z :link | [2,4] Zastosowano automatycznie :count cechy z :link | [5,] Zastosowano automatycznie :count cech z :link',\n        'entity_type'               => 'Po ustawieniu, ten szablon cech będzie automatycznie przypisywany do nowych elementów wybranego typu.',\n        'is_disabled'               => 'Ten szablon nie jest aktywny',\n        'is_enabled'                => 'Aktywuj szablon by używać go w kampanii',\n        'parent_attribute_template' => 'Ten szablon może pochodzić od innego szablonu cech. Kiedy przypisujesz szablon do jakieś elementu, wszystkie jego szablony źródłowe zostają również przypisane.',\n    ],\n    'index'                 => [],\n    'lists'                 => [\n        'empty' => 'Stwórz szablony, pozwalące nadać ten sam zestaw cech wielu elementom.',\n    ],\n    'placeholders'          => [\n        'name'  => 'Nazwa szablonu cech',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/pl/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Błąd',\n            'rendering' => 'Podczas aplikowania wtyczki wystąpił błąd. Skontaktuj się z twórcą wtyczki.',\n        ],\n    ],\n    'helpers'   => [],\n    'list'      => [\n        'sheets'    => 'Karty postaci',\n    ],\n    'pitch'     => 'Wyszukaj i dodaj do :boosted-campaign karty postaci z :marketplace',\n];\n"
  },
  {
    "path": "lang/pl/auth.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'banned'    => [\n        'permanent' => 'Twoje konto zostało trwale zablokowane.',\n        'temporary' => '{1} Twoje konto zostało zablokowane na :days dzień|[2,*] Twoje konto zostało zablokowane na :days dni.',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Potwierdź',\n        'error'     => 'Niewłaściwe hasło, spróbuj jeszcze raz',\n        'helper'    => 'Przed przejściem dalej potwierdź swoje hasło',\n        'title'     => 'Potwierdzenie hasła',\n    ],\n    'continue'  => [\n        'facebook'  => 'Kontynuuj z Facebook',\n        'google'    => 'Kontynuuj z Google',\n        'x'         => 'Kontynuuj z X',\n    ],\n    'failed'    => 'Błędny login lub hasło.',\n    'helpers'   => [\n        'password'  => 'Pokaż/ukryj hasło',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'Hasło jednorazowe',\n            'email'     => 'Email',\n            'password'  => 'Hasło',\n        ],\n        'no-account'            => 'Nie masz konta?',\n        'or'                    => 'LUB',\n        'password_forgotten'    => 'Nie pamiętasz hasła?',\n        'sign-up'               => 'Zarejestruj się',\n        'submit'                => 'Zaloguj',\n        'title'                 => 'Logowanie',\n    ],\n    'register'  => [\n        'already'   => 'Masz już konto? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Istnieje już konto związane z tym adresem email.',\n            'general_error'         => 'Podczas rejestracji wystąpił błąd. Spróbuj jeszcze raz.',\n        ],\n        'fields'    => [\n            'email'     => 'Email',\n            'name'      => 'Nazwa użytkownika',\n            'password'  => 'Hasło',\n        ],\n        'log-in'    => 'Zaloguj się',\n        'submit'    => 'Zarejestruj',\n        'title'     => 'Rejestracja',\n        'tos'       => 'Rejestrując konto zgadzasz się na nasze :terms i :privacy',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Adres email',\n            'password'              => 'Hasło',\n            'password_confirmation' => 'Potwierdź hasło',\n        ],\n        'send'      => 'Prześlij link to resetowania hasła',\n        'submit'    => 'Resetuj hasło',\n        'title'     => 'Resetowanie hasła',\n    ],\n    'tfa'       => [\n        'helper'    => 'Włączono autoryzację dwuetapową. Wpisz hasło jednorazowe (OTP) ze swojej aplikacji autoryzującej',\n        'title'     => 'Autoryzacja dwuetapowa',\n    ],\n    'throttle'  => 'Za dużo nieudanych prób logowania. Proszę spróbować za :seconds sekund.',\n    'x-twitter' => 'X, dawniej pod nazwą Twitter',\n];\n"
  },
  {
    "path": "lang/pl/banners.php",
    "content": "<?php\n\nreturn [\n    'kanka4years'   => 'Użyj kodu promocyjnego :code by uzyskać 20% zniżki na pierwszą roczną subskrypcję!',\n];\n"
  },
  {
    "path": "lang/pl/billing/information.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Zmiana danych',\n    ],\n    'helper'    => 'Do wszystkich rachunków można dodać adres służbowy, numer VAT i tak dalej.',\n    'title'     => 'Zmiana danych rachunku',\n];\n"
  },
  {
    "path": "lang/pl/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Pobierz PDF',\n    ],\n    'description'   => 'Wyświetla rachunki z ostatnich 24 miesięcy',\n    'empty'         => 'Nie znaleziono rachunków',\n    'fields'        => [\n        'amount'    => 'Kwota',\n        'date'      => 'Data',\n        'invoice'   => 'Rachunek',\n        'status'    => 'Status',\n    ],\n    'paypal'        => 'Pamiętaj, że w tym miejscu wyświetlane są wyłącznie wpłaty dokonane z pomocą Stripe, nie  PayPal.',\n    'status'        => [\n        'paid'      => 'Opłacony',\n        'pending'   => 'Oczekujący',\n    ],\n    'title'         => 'Historia opłat',\n];\n"
  },
  {
    "path": "lang/pl/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'Historia opłat',\n    'overview'          => 'Informacje',\n    'payment-method'    => 'Metoda płatności',\n];\n"
  },
  {
    "path": "lang/pl/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Metoda płatności',\n    'types' => [\n        'card'  => 'Karta',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Dostosuj menu boczne',\n    ],\n    'create'            => [\n        'title' => 'Nowy skrót',\n    ],\n    'destroy'           => [],\n    'edit'              => [\n        'title' => 'Skrót :name',\n    ],\n    'fields'            => [\n        'active'            => 'Aktywne',\n        'dashboard'         => 'Pulpit',\n        'default_dashboard' => 'Pulpit domyślny',\n        'filters'           => 'Filtry',\n        'menu'              => 'Menu',\n        'position'          => 'Kolejność',\n        'random_type'       => 'Losowy typ elementu',\n        'selector'          => 'Konfiguracja skrótu',\n        'target'            => 'Cel',\n    ],\n    'helpers'           => [\n        'active'            => 'Nieaktywne skróty nie pojawią się w menu bocznym',\n        'css'               => 'Określa klasę CSS, która zostanie dodana do skrótu umieszczonego w menu bocznym.',\n        'dashboard'         => 'Skrót prowadzący do jednego z własnych pulpitów kampanii. Ta opcja dostępna jest tylko w :boosted kampanii.',\n        'default_dashboard' => 'Odnośnik prowadzi do pulpitu domyślnego. Pulpity własne należy dopiero wybrać.',\n        'entity'            => 'Stwórz skrót prowadzący wprost do jakiegoś elementu. Pole :tab pozwala decydować, która zakładka się wyświetli. Pole :menu pozwala określić, która podstrona zostanie otwarta.',\n        'position'          => 'To pole pozwala ustalać kolejność (rosnącą) wyświetlania skrótów.',\n        'random'            => 'Użyj tego pola by stworzyć skrót do losowego elementu. Możesz ustawić filtry, by skrót prowadził do losowego elementu danego typu.',\n        'selector'          => 'Ustal dokąd skrót przeniesie użytkownika, który na niego kliknie',\n        'type'              => 'Stwórz skrót prowadzący do listy elementów. By filtrować rezultaty, skopuj część adresu filtrowanej listy elementów po znaku :? w pole :filter.',\n    ],\n    'index'             => [],\n    'lists'             => [\n        'empty' => 'Zapisz skróty do najczęściej używanych elementów albo filtrów, ułatwiające dostęp.',\n    ],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=city',\n        'menu'      => 'Podstrona menu (użyj ostatniego tekstu adresu)',\n        'tab'       => 'opis, relacje, notki',\n    ],\n    'random_no_entity'  => 'Nie znaleziono losowego elementu.',\n    'random_types'      => [\n        'any'   => 'Dowolny element',\n    ],\n    'reorder'           => [\n        'success'   => 'Zmieniono kolejność skrótów.',\n        'title'     => 'Zmiana kolejności skrótów',\n    ],\n    'show'              => [],\n    'targets'           => [\n        'dashboard' => 'Jeden z pulpitów kampanii',\n        'entity'    => 'Pojedynczy element',\n        'random'    => 'Losowy element',\n        'select'    => 'Wybierz opcję',\n        'type'      => 'Lista elementów należących do określonego typu/modułu',\n    ],\n    'visibilities'      => [\n        'is_active' => 'Pokaż skróty w menu bocznym',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/bragi/backstory.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Napisz krótką historię postaci na podstawie podanych informacji. Dopasuj styl i szczegóły do wskazanego systemu gry oraz gatunków. Możesz uwzględnić w opisie wygląd postaci, jej pochodzenie, przekonania, relacje z innymi, cele, wady oraz szczególne doświadczenia - o ile pasuje to do opisywanej postaci.',\n    'setup'     => [\n        'gender'    => 'Płeć: :gender',\n        'genres'    => 'Gatunki: :genres',\n        'name'      => 'Imię postaci. :name',\n        'prompt'    => 'Prompt: \":prompt\"',\n        'pronouns'  => 'Zaimki: :pronouns',\n        'systems'   => 'System: :system',\n    ],\n    'system'    => 'Jesteś zawodowym prowadzącym gry fabularne oraz twórcą postaci. Tworzysz pasujące do świata, oddziałujące na emocje historie postaci na potrzeby gier fabularnych. Zwykle tworzysz 2-4 akapity liczące do 400 słów i opisujące wygląd, historię, przekonania, motywacje oraz przywary postaci.',\n];\n"
  },
  {
    "path": "lang/pl/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'Generuj',\n        'insert'    => 'Użyj',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'Ten element dostępny jest w subskrypcji Wivern i Elemental.',\n        'out-of-tokens' => 'Nie masz już tokenów! Nowe otrzymasz automatycznie w dniu :date.',\n    ],\n    'here'          => 'tutaj',\n    'intro'         => 'Hej! Jestem :name, SI która pomoże ci generować historie postaci tworzonych w Kance. Więcej dowiesz się :here.',\n    'kankappy'      => 'Są tajemnymi uczniami Kankappy.',\n    'loading'       => 'Poczekaj chwileczkę, myślę intensywnie i chwilę mi to zajmie!',\n    'placeholders'  => [\n        'prompt'    => 'Wpisz prompt który zmienię w historię postaci.',\n    ],\n    'token-limit'   => 'Twoja liczba tokenów to :amount. Za każdym razem kiedy generujesz historię, zużywasz jeden z nich, więc działaj z rozwagą.',\n];\n"
  },
  {
    "path": "lang/pl/calendars/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/pl/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'helper'    => 'Dodaj informację o pogodzie, która pojawi się w kalendarzu.',\n        'success'   => 'Dodano pogodę.',\n        'title'     => 'Nowy efekt pogody',\n    ],\n    'destroy'       => [\n        'success'   => 'Usunięto pogodę.',\n    ],\n    'edit'          => [\n        'success'   => 'Zmieniono pogodę.',\n        'title'     => 'Zmiana pogody',\n    ],\n    'fields'        => [\n        'effect'        => 'Efekt',\n        'name'          => 'Nazwa',\n        'precipitation' => 'Opady',\n        'temperature'   => 'Temperatura',\n        'weather'       => 'Pogoda',\n        'wind'          => 'Wiatr',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Burza z piorunami',\n            'cloud'                 => 'Pochmurno',\n            'cloud-rain'            => 'Deszczowo',\n            'cloud-showers-heavy'   => 'Ulewa',\n            'cloud-sun'             => 'Słonecznie i pochmurno',\n            'cloud-sun-rain'        => 'Słonecznie, pochmurno i deszczowo',\n            'meteor'                => 'Meteor',\n            'smog'                  => 'Smog',\n            'snowflake'             => 'Śnieżnie',\n            'sun'                   => 'Słonecznie',\n            'wind'                  => 'Wietrznie',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Efekt magiczny lub naturalny',\n        'name'          => 'Opcjonalna nazwa pogody',\n        'precipitation' => 'Intensywność opadów',\n        'temperature'   => 'Najwyższa i najniższa',\n        'wind'          => 'Prędkość wiatru',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Dodaj epokę',\n        'add_intercalary'   => 'Dodaj dni dodatkowe',\n        'add_month'         => 'Dodaj miesiąc',\n        'add_moon'          => 'Dodaj księżyc',\n        'add_reminder'      => 'Dodaj epizod',\n        'add_season'        => 'Dodaj porę roku',\n        'add_weather'       => 'Dodaj pogodę',\n        'add_week'          => 'Dodaj tydzień specjalny',\n        'add_weekday'       => 'Dodaj dzień tygodnia',\n        'add_year'          => 'Dodaj nazwę roku',\n        'set_today'         => 'Ustaw jako aktualną datę',\n        'today'             => 'Dziś',\n        'update_weather'    => 'Aktualizuj pogodę',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Coroczne',\n    ],\n    'colours'       => [],\n    'create'        => [\n        'title' => 'Nowy kalendarz',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Zmieniono datę kalendarza.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Utworzono epizod.',\n            'title'     => 'Nowy epizod',\n        ],\n        'destroy'   => 'Usunięto epizod z \\':name\\'.',\n        'edit'      => [\n            'success'   => 'Zmieniono epizod.',\n            'title'     => 'Edycja epizodu elementu :name',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Wybrano niewłaściwy element.',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Edytujesz epizod zapisany w kalendarzu :calendar.',\n        ],\n        'success'   => 'Epizod \\':event\\' zaznaczono w kalendarzu :calendar.',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} Usunięto :count epizod.|[2,4] Usunięto :count epizody.|[5,*] Usunięto :count episodów.',\n            'patch'     => '{1} Zmieniono :count epizod.|[2,4] Zmieniono :count epizody.|[5,*] Zmieniono :count epizodów.',\n        ],\n        'end'       => '(koniec)',\n        'filters'   => [\n            'show_after'    => 'Pokaż aktualną datę i dalej',\n            'show_all'      => 'Pokaż wszystko',\n            'show_before'   => 'Pokaż daty przed aktualną',\n        ],\n        'start'     => '(początek)',\n    ],\n    'fields'        => [\n        'comment'           => 'Opis',\n        'current_day'       => 'Obecny dzień',\n        'current_month'     => 'Obecny miesiąc',\n        'current_year'      => 'Obecny rok',\n        'date'              => 'Obecna data',\n        'day'               => 'Dzień',\n        'default_layout'    => 'Domyślny układ',\n        'format'            => 'Zapis',\n        'is_incrementing'   => 'Upływ czasu',\n        'is_recurring'      => 'Cykliczne',\n        'leap_year'         => 'Lata przestępne',\n        'leap_year_amount'  => 'Dodaj dni',\n        'leap_year_month'   => 'Miesiąca',\n        'leap_year_offset'  => 'Każdego',\n        'leap_year_start'   => 'Rok przestępny',\n        'length'            => 'Czas trwania',\n        'length_days'       => ':count dzień|:count dni',\n        'month'             => 'Miesiąc',\n        'months'            => 'Miesiące',\n        'moons'             => 'Księżyce',\n        'parameters'        => 'Paramtery',\n        'recurring_until'   => 'Powtarzaj do roku',\n        'reset'             => 'Odnawianie tygodni',\n        'seasons'           => 'Pory roku',\n        'show_birthdays'    => 'Pokaż urodziny',\n        'skip_year_zero'    => 'Pomiń rok zerowy',\n        'start_offset'      => 'Przesunięcie rozpoczęcia',\n        'suffix'            => 'Oznaczenie',\n        'week_names'        => 'Tygodnie specjalne',\n        'weekdays'          => 'Dni tygodnia',\n        'year'              => 'Rok',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Wybierz domyślny układ, w jakim wyświetlany będzie kalendarz',\n        'format'            => 'Specjalny model zapisu dat tego kalendarza.',\n        'month_type'        => 'Miesiące dodatkowe nie mają dni tygodnia, ale wpływają na pory roku czy fazy księżyca.',\n        'moon_offset'       => 'Domyślnie pierwsza pełnia ma miejsce pierwszego dnia roku 0. Zmieniając wartość przesunięcia modyfikujesz moment pełni. Przesunięcie może mieć wartość ujemną (maksymalnie długości pierwszego miesiąca) albo dodatnią (maksymalnie długości pierwszego miesiąca).',\n        'start_offset'      => 'Domyślnie kalendarz zaczyna się pierwszego dnia roku 0. Liczba w tym polu zmienia położenie pierwszego dnia kalendarza.',\n    ],\n    'hints'         => [\n        'event_length'      => 'Czas trwania epizodu, w dniach. Wyświetlany będzie tylko przez pierwsze dwa lata.',\n        'is_incrementing'   => 'Kalendarze, którym zaznaczono tę opcję, automatycznie przesuwają w przód datę każdego dnia o 00:00 UTC.',\n        'leap_year'         => 'Ten kalendarz posiada lata przestępne.',\n        'months'            => 'Kalendarz powinien mieć co najmniej 2 miesiące.',\n        'moons'             => 'Dodanie księżyca spowoduje, że w kalendarzu wyświetlana będzie każda pełnia i nów. Jeżeli cykl księżycowy jest dłuższy niż 10 dni, pojawią się też informacje o pierwszej i trzeciej kwadrze.',\n        'parent_calendar'   => 'W kalendarzu pojawiają się wszystkie epizody oraz efekty pogody z wybranego kalendarza źródłowego.',\n        'reset'             => 'Każdy miesiąc lub rok zaczyna się zawsze od pierwszego dnia tygodnia.',\n        'seasons'           => 'By dodać porę roku wystarczy określić, kiedy się zaczyna. Kanka obliczy resztę.',\n        'show_birthdays'    => 'Co roku wyświetla w kalendarzu urodziny postaci o ustawionej dacie urodzin, aż do chwili ich śmierci.',\n        'skip_year_zero'    => 'Domyślnie pierwszy rok kalendarza nosi numer zero. Zaznacz, by go pominąć.',\n        'weekdays'          => 'Określ nazwy dni tygodnia. Tydzień musi mieć przynajmniej 2 dni.',\n        'weeks'             => 'Nadaj nazwy szczególnie ważnym tygodniom tego kalendarza.',\n        'years'             => 'Niektóre lata są tak ważne, że posiadają własne nazwy.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month'     => 'Miesiąc',\n        'monthly'   => 'Miesięczny',\n        'year'      => 'Rok',\n        'yearly'    => 'Roczny',\n    ],\n    'lists'         => [\n        'empty' => 'Stwórz kalendarz z datami świąt i ważnych wydarzeń w świecie gry.',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Przełącznik lat',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Dodatkowy',\n        'standard'      => 'Zwykły',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Pełnia',\n                'fullmoon_name' => 'Pełnia księżyca :moon',\n                'month'         => 'Co miesiąc',\n                'newmoon'       => 'Nów',\n                'newmoon_name'  => 'Nów księżyca :moon',\n                'none'          => 'Brak',\n                'unnamed_moon'  => 'Księżyc :number',\n                'year'          => 'Co rok',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Nie',\n            'month' => 'Miesiące',\n            'year'  => 'Lata',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Dni dodatkowe',\n        'leap_year'     => 'Rok przestępny',\n        'months'        => 'Miesiące',\n        'weeks'         => 'Tygodnie',\n        'years'         => 'Lata specjalne',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Długość w dniach',\n            'month'     => 'Po którym miesiącu',\n            'name'      => 'Nazwa okresu dodatkowego',\n        ],\n        'month'         => [\n            'alias' => 'Skrót nazwy',\n            'length'=> 'Dni',\n            'name'  => 'Nazwa miesiąca',\n            'type'  => 'Rodzaj',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Pełnia co ile dni?',\n            'name'      => 'Nazwa księżyca',\n            'offset'    => 'Opóźnienie pierwszej pełni',\n        ],\n        'seasons'       => [\n            'day'   => 'Dzień rozpoczęcia',\n            'month' => 'Miesiąc rozpoczęcia',\n            'name'  => 'Nazwa pory roku',\n        ],\n        'weeks'         => [\n            'name'      => 'Nazwa tygodnia',\n            'number'    => 'Numer',\n        ],\n        'year'          => [\n            'name'      => 'Nazwa roku',\n            'number'    => 'Data',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Kolor',\n        'comment'           => 'Urodziny, święto, przesilenie',\n        'date'              => 'Obecna data',\n        'leap_year_amount'  => 'Liczba dodatkowych dni roku przestępnego',\n        'leap_year_month'   => 'Miesiąc, do którego są dodane',\n        'leap_year_offset'  => 'Co ile lat rok jest przestępny',\n        'leap_year_start'   => 'Który rok jest przestępny jako pierwszy',\n        'length'            => 'Długość epizodu w dniach',\n        'months'            => 'Liczba miesięcy w roku',\n        'recurring_until'   => 'Ostatni rok cyklu (zostaw puste, jeżeli cykl ma trwać bez końca)',\n        'seasons'           => 'Liczba pór roku',\n        'suffix'            => 'Skrót nazwy obecnej epoki (AD, p.n.e.)',\n        'type'              => 'Rodzaj kalendarza',\n        'weekdays'          => 'Liczba dni w tygodniu',\n    ],\n    'show'          => [\n        'missing_details'       => 'Nie można wyświetlić kalendarza. Do poprawnego wyświetlania niezbędne są przynajmniej 2 miesiące posiadające po 2 dni tygodnia.',\n        'moon_1first_quarter'   => 'Pierwsza kwadra :moon',\n        'moon_full'             => ':moon - pełnia',\n        'moon_last_quarter'     => ':moon - ostatnia kwadra',\n        'moon_new'              => ':moon - nów',\n        'tabs'                  => [\n            'events'    => 'Epizody',\n            'weather'   => 'Pogoda',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Dziś i wcześniej',\n        'before'=> 'Dziś i później',\n    ],\n    'validators'    => [\n        'format'        => 'Taki zapis jest niemożliwy.',\n        'moon_offset'   => 'Przesunięcie pierwszej pełni nie może być większe, niż długość pierwszego miesiąca w kalendarzu.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Epizody trwające wiele lat są widoczne tylko przez pierwsze dwa lata. Więcej na ten temat - patrz : documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/callouts.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscription'  => 'Dowiedz się więcej o subskrypcji',\n    ],\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Doładuj :campaign',\n            'superboost'    => 'Turbodoładuj :campaign',\n        ],\n        'learn-more'    => 'Czym są doładowania?',\n        'limitation'    => 'Ta opcja dostępna jest tylko w doładowanych kampaniach',\n        'limitations'   => [\n            'boosted'       => 'Dostęp do tej opcji wymaga doładowania kampanii.',\n            'superboosted'  => 'Dostęp do tej opcji wymaga turbodoładowania kampanii.',\n        ],\n        'multiple'      => 'Te opcje dostępne są tylko w doładowanych kampaniach',\n        'pitches'       => [\n            'element-class' => 'Nadawaj elementom własne klasy CSS po :boosted-campaign.',\n            'icon'          => 'W :boosted-campaigh używać możesz milionów ikon z FontAwesome.',\n        ],\n        'titles'        => [\n            'boosted'       => 'Po doładowaniu',\n            'superboosted'  => 'Po turbodoładowaniu',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => 'Czym jest kampania premium?',\n        'limitation'    => 'Opcja dostępna wyłącznie w kampaniach premium.',\n        'multiple'      => 'By używać tych funkcji należy odblokować poziom premium kampanii :campaign.',\n        'title'         => 'Opcja premium',\n        'unlock'        => 'Odblokuj opcje premium dla :campaign',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Subskrybuj, by zwiększyć rozmiar dołączanych plików do :max MB.',\n        'share-booster' => 'Doładowanie zwiększa maksymalny rozmiar dołączanych plików dla wszystkich uczestników kampanii.',\n        'share-premium' => 'Zwiększa wielkość plików zamieszczanych przez wszystkich członków kampanii premium',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/pl/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => 'Gratulacje!',\n    'connections'       => '{0} Nie ma żadnych powiązań|{1} Stworzono jedno powiązanie|[2,4] Stworzono :amount powiązania|[5,] Dodano :amount powiązań',\n    'created'           => '{0} Nie stworzono elementów :plural|{1} Stworzono jednen element :singular|[2,*] Stworzono :amount elementów :plural',\n    'dead'              => '{0} Brak tajemniczych zgonów|{1} Jeden tajemniczy zgon|[2,4] :amount tajemnicze zgony|[5,] :amount tajemniczych zgonów',\n    'goal'              => 'Cel :number',\n    'goal_reached'      => 'Kampania uzyskała następujące osiągnięcie:',\n    'level'             => 'poziom :number',\n    'markers'           => '{0} Mapa nie ma znaczników|{1} Stworzono jeden znacznik|[2,4] Stworzono :amount znaczniki|[5,] Dodano :amount znaczników',\n    'painter'           => '{0} Nie stworzono motywów|{1} Stworzono jeden motyw|[2,4] Stworzono :amount motywy|[5,] Dodano :amount motywów',\n    'pitch'             => 'Osiągnięcia to fajny sposób celebracji postępów w budowie twojego świata. Pomagają śledzić progres, angażować graczy i chwalić się dokonaniami w kampaniach premium.',\n    'plugins'           => '{0} Nie zainstalowano dodatków|{1} Zainstalowano jeden dodatek|[2,4] Zainstalowano :amount dodatki|[5,] Zainstalowano :amount dodatków',\n    'remaining'         => [\n        'generic'   => 'Do następnego poziomu.',\n    ],\n    'spotlight'         => [\n        'active'    => [\n            'cta'   => 'Zobacz wyróżnione',\n        ],\n        'private'   => [\n            'cta'       => 'Sprawdź ustawienia publiczne',\n            'helper'    => 'By kampania mogła zostać wyróżnona, musi być publiczna.',\n        ],\n        'public'    => [\n            'cta'       => 'Dowiedz się, jak działa wyróżnienie',\n            'helper'    => 'Wybrane kampanie są prezentowane w Galerii oraz na blogu.',\n        ],\n    ],\n    'spotlighted'       => '{0} Jeszcze nie wyróżnione|[1,*] Wyróżnone',\n    'tagged'            => '{0} Nie dodano etykiet|{1} Dodano jedną etykietę|[2,4] Dodano :amount etykiety|[5,] Dodano :amount etykiet',\n    'titles'            => [\n        'calendars'     => 'Czas to pieniądz',\n        'characters'    => 'Zwać się będziesz',\n        'connections'   => 'M jak miłość',\n        'creatures'     => 'Zwierzyniec',\n        'dead'          => 'Skrwawione ostrze',\n        'events'        => 'Kopalnia wiedzy',\n        'families'      => 'Planowanie rodziny',\n        'locations'     => 'Niech się mury pną do góry',\n        'markers'       => 'Palcem po mapie',\n        'organisations' => 'Załóż firmę',\n        'plugins'       => 'Na dodatek',\n        'quests'        => 'Szczwany plan',\n        'spotlighted'   => 'W świetle reflektorów',\n        'tags'          => 'Wszystko pod kontrolą',\n        'themes'        => 'Pomaluj mój świat',\n    ],\n    'tutorial'          => 'Osiągnięcia rejestrują znaczące działania podejmowanie w kampanii, na przykład tworzenie elementów albo używanie ważnych funkcji. Mają wyłącznie funkcję informacyjną i aktualizują się na bieżąco.',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'accept'    => 'Akceptuj',\n        'reject'    => 'Odrzuć',\n    ],\n    'apply'         => [\n        'apply'         => 'Zgłoszenie',\n        'help'          => 'Tak kampania jest otwarta dla nowych graczy. Możesz się do niej zgłosić wypełniając formularz. Kiedy administratorzy kampanii rozpatrzą zgłoszenie, otrzymasz powiadomienie',\n        'remove_text'   => 'twoje zgłoszenie',\n        'success'       => [\n            'apply' => 'Zapisano zgłoszenie. Możesz je zmienić albo usunąć w dowolnej chwili. Otrzymasz powiadomienie, gdy administratorzy kampanii rozpatrzą prośbę.',\n            'remove'=> 'Usunięto twoje zgłoszenie',\n            'update'=> 'Zmieniono zgłoszenie. Możesz je zmienić albo usunąć w dowolnej chwili. Otrzymasz powiadomienie, gdy administratorzy kampanii rozpatrzą prośbę.',\n        ],\n        'title'         => 'Dołącz do :name',\n    ],\n    'errors'        => [],\n    'fields'        => [\n        'application'   => 'Zgłoszenie',\n        'reason'        => 'Powód przyjęcia/odrzucenia',\n    ],\n    'helpers'       => [\n        'modal'                 => 'Do kampanii publicznej, którą otwarto na zgłoszenia, mogą się zgłaszać nowi uczestnicy.',\n        'no_applications_title' => 'Brak zgłoszeń',\n        'reason'                => 'Jeśli podasz, kandydat otrzyma tę informację.',\n        'role'                  => 'Jeśli przyjmiesz kandydata, otrzyma tę rolę.',\n    ],\n    'open'          => [\n        'closed'    => 'Kampania jest zamknięta',\n        'open'      => 'Kampania jest otwarta',\n        'title'     => 'Kampania otwarta',\n    ],\n    'placeholders'  => [\n        'note'      => 'Napisz zgłoszenie, by dołączyć do kampanii',\n        'reason'    => 'Powód',\n    ],\n    'public'        => [\n        'private'   => 'Kampania jest prywatna',\n        'public'    => 'Kampania jest publiczna',\n        'title'     => 'Kampania publiczna',\n    ],\n    'statuses'      => [],\n    'title'         => 'Zgłoszenia',\n    'toggle'        => [\n        'closed'    => 'Zamknięta na zgłoszenia',\n        'label'     => 'Status',\n        'open'      => 'Otwarta na zgłoszenia',\n        'success'   => 'Zmieniono status kampanii.',\n        'title'     => 'Status zgłoszenia',\n    ],\n    'tutorial'      => 'Zgłoszenia pozwalają innym wyrazić chęć dołączenia do kampanii. W tym celu wypełniają krótki formularz, a administrator może każde złożenie przejżeć, a potem zaakceptować lub odrzucić. Akceptacja oznacza dołączenie kogoś do kampanii w roli przyznanej na poprzednim etapie.',\n    'update'        => [\n        'approve'   => 'Wybierz rolę, którą otrzymają uczestnicy dodawani do kampanii.',\n        'approved'  => 'Zatwierdzono zgłoszenie.',\n        'reject'    => 'Jeżeli chcesz, możesz wytłumaczyć dlaczego zgłoszenie zostało odrzucone.',\n        'rejected'  => 'Odrzucono zgłoszenie.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'      => 'To narzędzie pozwala stworzyć motyw wizualny kampanii. Poniżej znajdziesz informacje, jak dany wybór wpłynie na różne elementy kampanii. Gdy wybierzesz kolor, tekst zostanie automatycznie przełączony na barwę kontrastową. Więcej informacji o tworzeniu motywów znajdziesz w :docs.',\n    'pitch'     => 'Hej, powstało narzędzie to tworzenia motywów i zmiany kolorów interfejsu kampanii ;)',\n    'pitch-go'  => 'Przejdź do projektanta kampanii',\n    'reset'     => 'Przywrócono styl domyślny.',\n    'success'   => 'Zapisano stworzony styl.',\n    'title'     => 'Projektant motywów',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Zaktualizowano nagłówek kampanii.',\n        'title'     => 'Aktualizacja nagłówka kampanii',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Dodaj domyślną ikonę',\n    ],\n    'call-to-action'    => 'Użyj własnej ilustracji domyślnej dla wszystkich postaci, miejsc i innych elementów kampanii. Pojawią się one na różnych listach.',\n    'create'            => [\n        'error'     => 'Błąd zapisu ilustracji domyślnej. Czy :type posiada już ilustrację?',\n        'helper'    => 'Pozwala zamieścić obraz, używany jako domyślna miniatura dla elementów określonego typu.',\n        'success'   => 'Zapisano domyślną ilustrację dla elementu :type.',\n        'title'     => 'Nowa ilustracja domyślna elementu',\n    ],\n    'destroy'           => [\n        'success'   => 'Usunięto domyślną ilustrację dla elementu :type.',\n    ],\n    'empty'             => 'Żaden moduł nie ma obecnie domyślnej miniatury.',\n    'helper'            => 'Używane dla wszystkich elementów tego moduły bez własnej ilustracji.',\n    'index'             => [],\n    'reset'             => [\n        'helper'    => 'Czy na pewno usunąć domyślne ikony ze wszystkich modułów kampanii?',\n        'success'   => 'Usunięto domyślne ikony ze wszystkich modułów.',\n        'title'     => 'Przywracanie ikon domyślnych',\n        'warning'   => 'To działanie jest ostateczne i nie można go cofnąć.',\n    ],\n    'title'             => 'Domyślne ikony',\n    'tutorial'          => 'Dodaje domyślne ikony elementom nie posiadającym własnych ilustracji. Pojawiają się natychmiast w całej kampanii i zachowują spójność wizualną.',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/defaults.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'character_personality_visibility'  => 'Domyślna widoczność osobowości postaci',\n        'connections'                       => 'Widok powiązań',\n        'connections_mode'                  => 'Styl mapy powiązań',\n        'descendants'                       => 'Domyślne filtrowanie list',\n        'entity_privacy'                    => 'Widoczność nowych elementów',\n        'gallery_visibility'                => 'Widoczność domyślnych grafik w galerii',\n        'post_collapsed'                    => 'Domyślne wyświetlanie komentarzy',\n        'private_mention_visibility'        => 'Wzmiankowanie elementów tajnych',\n        'related_visibility'                => 'Widoczność treści zależnych',\n    ],\n    'helpers'   => [\n        'character_visibility'          => 'Określa widoczność cech osobowości nowo stworzonych postaci.',\n        'connections'                   => 'Określa, czy powiązania elementu wyświetlane są domyślnie w formie mapy, czy listy.',\n        'connections_mode'              => 'Określa domyślny styl mapy powiązań (w kampaniach premium).',\n        'descendants'                   => 'Określa, czy na listach zagnieżdżonych (na przykład postaci w danym miejscu) wyświetlane są tylko elementy pochodne bezpośrednio, czy wszystkie pochodne.',\n        'display'                       => 'Określa domyślne wyświetlanie stron elementów.',\n        'entity'                        => 'Reguluje domyślą widoczność przypisywaną przez Kankę nowym elementom.',\n        'entity_privacy'                => 'Okresla widoczność nowo stworzonych postaci, miejsc i tak dalej.',\n        'gallery_visibility'            => 'Domyślna widoczność grafik dodawnych do galerii.',\n        'post_collapsed'                => 'Określa, czy komentarze na stronie elementu są domyślnie rozwinięte, czy zwinięte.',\n        'privacy'                       => 'Określa domyślną widoczność tworzonych elenentów. Będzie stosowana podczas dodawania nowych elementów i można ją zmienić ręcznie.',\n        'private_mention_visibility'    => 'Kontroluje sposób wyświetlania nazw tajnych elementów wzmiankowanych w widocznych tekstach.',\n        'related_visibility'            => 'Kontroluje widoczość komentarzy, cech i powiązań dodawanych do elementów.',\n    ],\n    'sections'  => [\n        'display'   => 'Układ treści',\n        'entity'    => 'Ustawienia elementów',\n        'media'     => 'Wyświetlanie grafik',\n        'mention'   => 'Wyświetlanie wzmianek',\n    ],\n    'tutorial'  => 'Ustawienia domyślne pomagają w tworzeniu treści. Możesz tu wybrać widoczność elementów, komentarzy, grafik i tak dalej: ustawienia będą stosowane automatycznie podczas tworzenia nowej zawartości. Dzięki temu oszczędzisz czas i łatwiej zapanujesz na organizacją kampanii.',\n    'update'    => [\n        'success'   => 'Zmieniono domyślne ustawienia kampanii.',\n    ],\n    'values'    => [\n        'collapsed'     => [\n            'collapsed' => 'Zwinięte',\n            'default'   => 'Domyślna',\n            'expanded'  => 'Rozwinięte',\n        ],\n        'connections'   => [\n            'explorer'  => 'Mapa powiązań (premium)',\n            'list'      => 'Lista',\n        ],\n        'descendants'   => [\n            'all'       => 'Wyświetla wszystkie pochodne',\n            'direct'    => 'Wyświetla bezpośrednio pochodne',\n        ],\n        'mentions'      => [\n            'private'   => 'Wyświetla wzmiankowaną nazwę',\n            'visible'   => 'Ukrywa wzmiankowaną nazwę',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/delete.php",
    "content": "<?php\n\nreturn [\n    'backup'            => 'kopię zapasową',\n    'confirm'           => 'Jeśli na pewno chcesz usunąć :campaign, wpisz :code w polu poniżej.',\n    'confirm-button'    => 'Trwale usuń :name',\n    'helper'            => 'Usunięcie kampanii jest trwałe i nie można go cofnąć. Wszystkie związane z nią dane, w tym obrazy i pliki, zostaną wymazane z naszych serwerów. Przed kontynuacją zalecamy wykonać :backup.',\n    'issue'             => 'Przed usunięciem kampanii należy rozwiązać poniższe kwestie.',\n    'members'           => 'Usuń z kampanii wszystkich innych użytkowników.',\n    'success'           => 'Trwale usunięto :name.',\n    'title'             => 'Usuwanie',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'download'  => 'Pobierz',\n        'export'    => 'Eksportuj dane kampanii',\n    ],\n    'confirm'   => [\n        'notification'  => 'Uczestnicy o roli :admin zostaną powiadomieni gdy eksport będzie gotowy do pobrania.',\n        'title'         => 'Potwierdź eksport',\n        'type'          => 'Typ eksportu',\n        'warning'       => 'Zaraz wyeksportujesz dane kampanii. To może potrwać dłuższą chwilę, zależnie od rozmiaru kampanii. Podczas generowania pliku możesz normalnie używać Kanki.',\n    ],\n    'errors'    => [\n        'limit'     => 'Dzisiaj już eksportowano kampanię. Spróbuj ponownie jutro.',\n        'premium'   => 'Eksort markdown jest dostępny wyłącznie w kampaniach premium.',\n    ],\n    'expired'   => 'Odnośnik nieaktualny',\n    'helpers'   => [\n        'json'      => 'Do archiwizacji i przywracania - można użyć w celu zaimportowania kampanii',\n        'markdown'  => 'Do czytania i rozpowszechniania - format zrozumiały dla ludzi',\n        'premium'   => 'Dostępne tylko w kampaniach premium.',\n    ],\n    'progress'  => 'Postęp',\n    'size'      => 'Rozmiar',\n    'status'    => [\n        'failed'    => 'Niepowodzenie',\n        'finished'  => 'Zakończono',\n        'running'   => 'W toku',\n        'scheduled' => 'Zaplanowano',\n    ],\n    'success'   => 'Przygotowanie do eksportu kampanii. Otrzymasz powiadomienie, gdy pliki będą gotowe do pobrania.',\n    'title'     => 'Eksport kampanii',\n    'type'      => 'Typ',\n    'types'     => [\n        'json'  => 'JSON',\n        'md'    => 'Markdown',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close'         => 'Zamknij',\n        'file-link'     => 'Link do pliku',\n        'focus_point'   => 'Ustaw punkt centralny',\n        'image-link'    => 'Link do obrazu',\n        'reset_focus'   => 'Usuń punkt centralny',\n        'save'          => 'Zapisz',\n        'upgrade'       => 'Powiększ',\n    ],\n    'breadcrumb'    => 'Galeria',\n    'bulk'          => [\n        'destroy'   => [\n            'confirm'   => 'Czy na pewno chcesz trwale usunąć wybrane elementy? Nie będzie można ich odzyskać.',\n            'success'   => '{0}Nie usunięto plików.|{1}Usunięto jeden plik.|{2,4}Usunięto :count pliki.|{5,*}Usunięto :count plików.',\n        ],\n    ],\n    'cta'           => 'Zarządzaj obrazami w kampanii i używaj ich ponownie.',\n    'destroy'       => [\n        'folder'    => 'Usunięto katalog :name.',\n        'success'   => 'Usunięto obraz :name',\n    ],\n    'errors'        => [\n        'max'           => 'Możesz wybrać do :count plików na raz.',\n        'permissions'   => 'Role w kampanii nie mają uprawnienia :permission więc nie mogą dodawać ilustracji do galerii.',\n        'storage'       => 'Brak miejsca, by załadować wybrane obrazki. Dostępne miejsce: :avaliable.',\n    ],\n    'fields'        => [\n        'created_by'            => 'Dodane przez',\n        'details'               => 'Szczegóły',\n        'ext'                   => 'Typ',\n        'file_type'             => 'Rodzaj pliku',\n        'folder'                => 'Katalog',\n        'image_mentioned_in'    => '{0} Ten obraz nie jest wzmiankowany przez żaden element kampanii.|{1} Wzmiankowany przez jeden element/wpis.|[2,*] Wzmiankowany przez :count elementy/wpisy.',\n        'image_used_in'         => '{1}Użyto jako obrazu jednego elementu.|[2,*]Użyto jako obrazu :count elementów.',\n        'link'                  => 'Odnośnik',\n        'name'                  => 'Nazwa',\n        'size'                  => 'Rozmiar',\n        'unused'                => 'Nieużywany',\n        'used_in'               => 'Używany w',\n    ],\n    'focus'         => [\n        'locked'    => 'Punkt centralny można ustawić tylko w kampanii premium',\n        'removed'   => 'Usunięto punkt centralny.',\n        'updated'   => 'Zmieniono punkt centralny.',\n    ],\n    'new_folder'    => [\n        'title' => 'Nowy katalog',\n    ],\n    'no_folder'     => 'Brak katalogu',\n    'pitch'         => 'Zamieszczaj ilustracje kampanii bezpośrednio z poziomu edytora tekstu',\n    'placeholders'  => [\n        'search'    => 'Wyszukaj obraz po nazwie',\n    ],\n    'storage'       => [\n        'of'    => 'z',\n        'title' => 'Miejsce',\n    ],\n    'title'         => 'Galeria kampanii :campaign',\n    'update'        => [\n        'folder'    => 'Zmieniono katalog.',\n        'success'   => 'Zmodyfikowano obraz.',\n    ],\n    'uploader'      => [\n        'add'           => 'Dodaj',\n        'new_folder'    => 'Nowy katalog',\n        'or'            => 'lub',\n        'select_file'   => 'Wybierz plik',\n        'well'          => 'Przeciągnij, by dodać',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/import.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'import'    => 'Załaduj wyeksportowane',\n    ],\n    'fields'    => [\n        'updated'   => 'Ostatnio zmienione',\n    ],\n    'form'      => 'Załaduj z',\n    'progress'  => [\n        'uploading' => 'Ładowanie',\n    ],\n    'status'    => [\n        'failed'    => 'Niepowodzenie',\n        'finished'  => 'Zakończono',\n        'queued'    => 'W kolejce',\n        'running'   => 'W toku',\n    ],\n    'title'     => 'Import',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/invites.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Tworzy odnośnik z zaproszeniem, który możesz wysłać graczom by dołączyli do kampanii.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Osiągnięto limit',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/logs.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'list'      => 'Przechowujemy rejestr wszystkich większych zmian w kampanii przez :amounts dni. Nie dokumentują każdej drobnej zmiany wartości, ale ogólne przekształcenia stanu kampanii.',\n        'nothing'   => 'Brak rejestru do wyświetlenia. Pamiętaj że przechowywany jest tylko przez :amount dni.',\n        'title'     => 'Brak rejestru',\n    ],\n    'pitch'     => 'Miej oko na ogólne zmiany w kampanii premium przez :amount dni.',\n    'premium'   => [\n        'helper'    => 'Rejestr starszy niż :amount dni można wyświetlić tylko w kampanii premium.',\n    ],\n    'title'     => 'Dziennik audytu',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/members.php",
    "content": "<?php\n\nreturn [\n    'overview'  => [\n        'limited'   => ':amount z :total uczestników.',\n        'title'     => 'Dostępni uczestnicy',\n        'unlimited' => ':amount z nieograniczonej liczby uczestników.',\n    ],\n    'roles'     => [\n        'admin'     => 'Nie możesz stąd nadać nikomu roli :admin. Służy do tego menu roli :admin.',\n        'helper'    => 'Dodaj lub usuń role uczestnika :user.',\n        'success'   => 'Zaktualizowano role uczestnika :user.',\n        'title'     => 'Edycja ról',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/modules.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Stwórz moduł',\n        'customise' => 'Modyfikuj',\n    ],\n    'create'        => [\n        'helper'    => 'Stwórz nowy moduł dla elementów, które nie pasują do żadnego innego.',\n        'success'   => 'Stworzono nowy moduł.',\n        'title'     => 'Nowy moduł',\n    ],\n    'delete'        => [\n        'confirm'           => 'Wpisz :code jeżeli na pewno chcesz usunąć moduł własny :name.',\n        'confirm-button'    => '{0} Trwale usunęto :name|{1} Trwale usunięto :name i :count element|[2,4] Trwale usunięto :name i :count elementy|[5,*] Trwale usunięto :name i :count elementów',\n        'entities'          => '{1} Usunie trwale :count element.|[2,4] usunie trwale :count elementy.|[5,*] usunie trwale :count elementów.',\n        'helper'            => 'Czy na pewno usunąć moduł własny :name? Usunięte zostaną również wszystkie związane z nim elementy, zakładki i widżety.',\n        'success'           => 'Usunięto moduł :name.',\n        'title'             => 'Usunięcie modułu',\n    ],\n    'errors'        => [\n        'disabled'              => 'Moduł :name jest wyłączony. :fix',\n        'empty-custom'          => 'Dodaje moduł własny, pozwalający organizować dane nie posiadające modułu domyślnego.',\n        'limit'                 => 'Ponieważ wciąż pracujemy nad tą funkcją, kampania może na razie posiadać :max modułów własnych.',\n        'limit-title'           => 'Osagnięto limit własnych modułów',\n        'subscription-limit'    => 'Kampania osiągnęła limit własnych modudłów. By go zwiększyć, osoba która odblokowała funkcje premium musi podnieść poziom subskrybcji.',\n    ],\n    'fields'        => [\n        'icon'          => 'Ikona modułu',\n        'image'         => 'Ikona domyślna',\n        'plural'        => 'Nazwa modułu w liczbie mnogiej',\n        'singular'      => 'Nazwa modułu w liczbie pojedycznej',\n        'status'        => 'Status modułu',\n        'update_name'   => 'Zmiana nazwy modułu',\n    ],\n    'helpers'       => [\n        'custom'    => 'To jest moduł własny.',\n        'icon'      => 'Ikona :fontawesome, na przykład :example.',\n        'plural'    => 'Nazwa elementów nowego modułu w liczbie mnogiej. Na przykład: eliksiry.',\n        'roles'     => 'Wybierz role, które będą widziały nowy moduł. Można je potem zmienić w menu uprawień ról.',\n        'singular'  => 'Nazwa elementów nowego modułu w liczbie pojedynczej. Na przykład: eliksir.',\n        'status'    => 'Wyłączone moduły nie są wyświetlane w menu, ale żadne dane nie zostają usunięte.',\n        'tutorial'  => 'Moduły pozwalają zarządzać widocznością różnych kategorii elementów kampanii. Włącz te, których używasz, i wyłącz pozostałe. Wyłączenie modułu nigdy nie powoduje utraty danych - ukrywa go tylko w menu i opcjach nawigacji.',\n    ],\n    'pitch'         => 'Zmień nazwę i ikonę tego modułu dla całej kampanii.',\n    'pitch-custom'  => 'Twórz własne moduły dla niecodziennych elementów.',\n    'pitch-title'   => 'Odblokuj moduły własne',\n    'rename'        => [\n        'helper'    => 'Zmień używaną w tej kampanii nazwę i ikonę modułu. Pozostaw puste, by używać opcji domyślnej.',\n        'success'   => 'Zmodyfikowano moduł.',\n        'title'     => 'Modyfikuj moduł :module',\n    ],\n    'reset'         => [\n        'default'   => 'Przywraca stan wyjściowy modułów domyślnych, ale nie własnych.',\n        'success'   => 'Przywrócono domyślne moduły kampanii',\n        'title'     => 'Przywracanie domyślnych nazw i ikon',\n        'warning'   => 'Czy na pewno przywrócić domyślne nazwy i ikony modułów kampanii?',\n    ],\n    'sections'      => [\n        'custom'        => 'Moduły własne',\n        'default'       => 'Moduły domyślne',\n        'early-access'  => 'Wczesny dostęp',\n        'features'      => 'Opcje elementów',\n    ],\n    'states'        => [\n        'disable'   => 'Nieaktywny',\n        'disabled'  => 'Moduł jest nieaktywny',\n        'enable'    => 'Aktywny',\n        'enabled'   => 'Moduł jest aktywny',\n    ],\n    'status'        => [\n        'enabled'   => 'Włączono moduł',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/overview.php",
    "content": "<?php\n\nreturn [\n    'followers' => [\n        'title' => 'Obserwujący',\n    ],\n    'member'    => [\n        'title' => 'Uczestnictwo',\n    ],\n    'premium'   => [\n        'enable'    => 'Aktywuj opcje premium',\n    ],\n    'status'    => [\n        'title' => 'Widoczność',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'Wyłącz dodatki',\n            'enable'    => 'Aktywuj dodatki',\n            'update'    => 'Aktualizuj dodatki',\n        ],\n        'changelog'         => 'Zmiany',\n        'disable'           => 'Wyłącz dodatek',\n        'enable'            => 'Aktywuj dodatek',\n        'find-plugins'      => 'Znajdź dodatek',\n        'import'            => 'Importuj',\n        'update'            => 'Aktualizuj dodatek',\n        'update-to'         => 'Zaktualizowano do wersji :version',\n        'update_available'  => 'Dostępna aktualizacja!',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Usunięto :count dodatek.|[2,4] Usunięto :count dodatki.|[5,*] Usunięto :count dodatków.',\n        'disable'   => '{1} Wyłączono :count dodatek.|[2,4] Wyłączono :count dodatki.|[5,*] Wyłączono :count dodatków.',\n        'enable'    => '{1} Aktywowano :count dodatek.|[2,4] Aktywowano :count dodatki.|[5,*] Aktywowano :count dodatków.',\n        'update'    => '{1} Zaktualizowano :count dodatek.|[2,4] Zaktualizowano :count dodatki.|[5,*] Zaktualizowano :count dodatków.',\n    ],\n    'destroy'       => [\n        'success'   => 'Usunięto dodatek :plugin',\n    ],\n    'disabled'      => [\n        'success'   => 'Deaktywowano dodatek :plugin',\n    ],\n    'empty_list'    => 'Ta kampania nie ma na razie żadnych dodatków. Odwiedź targowisko, zainstaluj dodatki i wróć, by je aktywować.',\n    'enabled'       => [\n        'success'   => 'Aktywowano dodatek :plugin',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Niewłaściwy dodatek.',\n    ],\n    'fields'        => [\n        'name'      => 'Nazwa dodatku',\n        'obsolete'  => 'Dodatek oznaczono jako przestarzały ponieważ przestał działać w sposób zamierzony przez twórców.',\n        'status'    => 'Status',\n        'type'      => 'Rodzaj dodatku',\n    ],\n    'import'        => [\n        'button'                => 'Importuj',\n        'created'               => 'Stworzono następujące elementy:',\n        'fields'                => [\n            'only_new'  => 'Tylko nowe elementy',\n            'private'   => 'Elementy tajne',\n        ],\n        'helper'                => 'Zaimportujesz zaraz :elementów z dodatku :plugin. Jeżeli był importowany wcześniej, utracisz wszystkie zmiany wprowadzone w tych elementach.',\n        'no_new_entities'       => 'Brak nowych elementów do zaimportowania.',\n        'option_only_import'    => 'Importuj tylko nowe elementy i pomijaj już zaimportowanie.',\n        'option_private'        => 'Importowane elementy są tajne.',\n        'success'               => '{1} Zaimportowano :count element z dodatku :plugin.|[2,3,4] Zaimportowano :count elementy z dodatku :plugin.|[5,*] Zaimportowano :count elementów z dodatku :plugin.',\n        'title'                 => 'Import :plugin',\n        'updated'               => 'Zmieniono następujące elementy:',\n    ],\n    'info'          => [\n        'description'   => 'Wyświetla ostatnie aktualizacje dodatku :plugin.',\n        'helper'        => 'Wydano nowszą wersję tego dodatku - możesz go zaktualizować.',\n        'installed'     => 'Zainstalowany',\n        'title'         => 'Aktualizacje dodatku :plugin',\n        'updates'       => 'Aktualizacje',\n        'versions'      => 'Wersje',\n    ],\n    'pitch'         => 'Instaluj i zarządzaj dodatkami z :marketplace.',\n    'status'        => [\n        'always'    => 'Ten rodzaj dodatku jest zawsze aktywny, póki go nie usunąć.',\n        'disabled'  => 'Niektywny',\n        'enabled'   => 'Aktywny',\n    ],\n    'templates'     => [\n        'name'  => ':name autorstwa :user',\n    ],\n    'title'         => 'Dodatki Kampanii :name',\n    'types'         => [\n        'attribute' => 'Szablon cech',\n        'pack'      => 'Dodatkowa zawartość',\n        'theme'     => 'Motyw',\n    ],\n    'update'        => [\n        'success'   => 'Zaktualizowano dodatek :plugin',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'new'           => 'Upublicznia kampanię wśród członków społeczności albo ogranicza dostęp wyłącznie do zaproszonych osób.',\n        'permissions'   => 'Upublicznienie kampanii nie oznacza ujawnienia całej zawartości. Możesz określić, co widzą goście używajac uprawnień roli :public.',\n    ],\n    'title'     => 'Zmiana widoczności kampanii',\n    'update'    => [\n        'private'   => 'Kampania jest od teraz prywatna i widzą ją tylko uczestnicy.',\n        'public'    => 'Kampania jest od teraz publiczna, choć jej pojawienie się na stronie  :public-campaigns może troszkę potrwać.',\n        'unlisted'  => 'Kampanię usunięto z katalogu. Może się do niej dostać każda osoba posiadająca link, ale nie wyświetla się na stronie :public-campaigns.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'           => 'Odzyskaj',\n        'recover_selected'  => 'Odzyskaj wybrane',\n    ],\n    'error'     => 'Podczas odzyskiwania elementów wystąpił błąd.',\n    'fields'    => [\n        'deleted'       => 'Usunięto',\n        'deleted_at'    => 'Usunięte :date przez :user',\n    ],\n    'name_link' => 'Udało się odzyskać :name',\n    'order'     => [\n        'newest'        => 'Sortowanie według: Newest',\n        'newest_first'  => 'Najpierw najnowsze',\n        'oldest'        => 'Sortowanie według :Oldest',\n        'oldest_first'  => 'Najpierw najstarsze',\n        'type'          => 'Sortowanie według :Type',\n        'type_order'    => 'Rodzaj',\n    ],\n    'posts'     => [],\n    'premium'   => 'Odzyskiwanie elementów możliwe jest w kampanii premium.',\n    'success_v2'=> '{1} odzyskano :count element .|[2,4] odzyskano :count elementy.|[5,*]  odzyskano :count elementów.',\n    'title'     => 'Odzyskiwanie elementów kampanii :campaign',\n    'toggle'    => [],\n    'tutorial'  => 'Przeglądaj i odzyskuj niedawno usunięte elementy kampanii. Elementy, komentarze i inne dane można odzyskać przez :amount dni - potem zostają trwale usunięte. Odzyskanie przywraca usuniętą zawartość w całości.',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'status'    => 'Status :status',\n    ],\n    'create'        => [\n        'helper'    => 'Tworzy nową rolę w kampanii.',\n    ],\n    'overview'      => [\n        'limited'   => 'Stworzono :amount z :total ról.',\n        'title'     => 'Dostępne role',\n        'unlimited' => 'Stworzono :amount z nieograniczonej liczby ról.',\n    ],\n    'permissions'   => [\n        'campaign-features' => 'Składniki kampanii',\n        'content-modules'   => 'Moduły zawartości',\n        'toggle'            => [\n            'action'    => 'Przełącz wszystkie',\n            'tooltip'   => 'Przełącz upoważnienie :action dla wszystkich modułów.',\n        ],\n    ],\n    'public'        => [\n        'helpers'   => [\n            'click'     => 'Wybierz dowolny moduł by przełączyć publiczną widoczność wszystkich należących do niego elementów.',\n            'intro'     => 'Kontroluje widoczność składników kampanii przez osby które w niej nie uczestniczą.',\n            'main'      => 'Wybierz które moduły będą widoczne dla wszystkich przeglądajacych kampanię, w tym osób niezalogowanych. Kategoria obejmuje zarówno publiczność z zewnątrz, jak zalogowanych użytkowników Kanki którzy nie biorą udziału w kampanii.',\n            'preview'   => 'Widok publiczności',\n        ],\n    ],\n    'show'          => [\n        'title' => 'Uprawnienia :role - :campaign',\n    ],\n    'toggle'        => [\n        'disabled'  => 'Dla uczestników w roli :role działanie :action na :entities jest obecnie niedostępne.',\n        'enabled'   => 'Dla uczestników w roli :role działanie :action na :entities jest obecnie możliwe.',\n    ],\n    'warnings'      => [\n        'adding-to-admin'   => 'Uczestnicy posiadający rolę :role mają dostęp do wszystkich elementów kampanii i nie mogą zostać usunięci przez inne osoby w tej roli. Gdy minie :amount minut, mogą pozbyć się roli wyłącznie osobiście.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Przywróć domyślne',\n    ],\n    'call-to-action'    => 'Zmieniaj kolejność, ikony i nazwy elementów w menu kampanii.',\n    'helpers'           => [\n        'bookmarks' => 'Nie uwzględniono tu zakładek ponieważ każda posiada własną :position określającą w którym miejscu menu się pojawia.',\n        'image'     => 'Dodaj ilustrację symbolizującą kampanię. Będzie wyświetlana w menu bocznym oraz menu przełączania kampanii. Możesz je potem zmienić w dowolnej chwili, edytując kampanię.',\n        'reordering'=> 'Zmień kolejność elementów menu przeciągając ikony po lewej.',\n    ],\n    'image-success'     => 'Zapisani nowy obraz kampanii. Można go zmienić w każdej chwili edytując kampanię.',\n    'reset'             => [\n        'success'   => 'Przywrócono domyślną postać menu bocznego.',\n        'title'     => 'Przywracanie postaci domyślnej',\n        'warning'   => 'Czy na pewno chcesz przywrócić domyślą postać menu bocznego kampanii?',\n    ],\n    'success'           => 'Zapisano ustawienia menu.',\n    'title'             => 'Ustawienia menu bocznego kampanii :campaign',\n    'tooltips'          => [\n        'image' => 'Zmień obraz w tle.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Kalendarzy',\n            'title' => 'Strażnik Czasu',\n        ],\n        'murderer'  => [\n            'goal'  => 'Martwych postaci',\n            'title' => 'Morderca',\n        ],\n    ],\n    'fields'        => [\n        'created'       => 'Stworzono dnia',\n        'creator'       => 'Stworzono przez',\n        'from-elements' => 'Pozostałe',\n        'from-entities' => 'Elementy',\n        'from-posts'    => 'Komentarze',\n        'general'       => 'Ogólne',\n        'words'         => 'Liczba słów',\n    ],\n    'targets'       => [],\n    'title2'        => 'Statystyki',\n    'titles'        => [\n        'calendars' => 'Strażnik Czasu poziom :level',\n        'characters'=> 'Dawca Imion poziom :level',\n        'dead'      => 'Szafarz śmierci poziom :level',\n        'families'  => 'Planowanie rodziny poziom :level',\n        'locations' => 'Budowniczy poziom :level',\n        'quests'    => 'Intrygant poziom :level',\n        'races'     => 'Hodowca poziom :level',\n    ],\n    'tutorial'      => 'Statystyki kampanii pokazują liczbę elementów i ostatnią aktywność. Dane aktualizowane są co :amount godzin. Możesz dzięki temu obserwować rozwój kampanii i częstotliwość jej wykorzystania.',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'current'   => 'Obecny motyw: :theme',\n        'disable'   => 'Wyłącz',\n        'enable'    => 'Uruchom',\n        'new'       => 'Nowy styl',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Usunięto :count styl.|[2,4] Usunięto :count style.|[5,*] Usunięto :count stylów.',\n        'disable'   => '{1} Wyłączono :count styl.|[2,4] Wyłączono :count style.|[5,*] Wyłączono :count stylów.',\n        'enable'    => '{1} Uruchomiono :count styl.|[2,4] Uruchomiono :count style.|[5,*] Uruchomiono :count stylów.',\n    ],\n    'create'        => [\n        'success'   => 'Stworzono nowy styl',\n        'title'     => 'Nowy styl',\n    ],\n    'delete'        => [\n        'success'   => 'Usunięto styl :name',\n    ],\n    'errors'        => [\n        'max_content'   => 'Regułą CSS nie może być dłuższa niż :amount znaków.',\n        'max_reached'   => 'Osiągniętą maksymalną liczne (:max) stylów.',\n    ],\n    'fields'        => [\n        'content'       => 'Reguły CSS',\n        'is_enabled'    => 'Aktywna',\n        'length'        => 'Długość',\n        'modified'      => 'Zmieniona',\n        'name'          => 'Nazwa',\n        'order'         => 'Kolejność',\n    ],\n    'helpers'       => [\n        'here'          => 'z naszego bloga',\n        'is_enabled'    => 'Użyj tego motywu na każdej stronie',\n        'main'          => 'Możesz tworzyć własne style CSS w doładowanych kampaniach. Będą ładowane po załadowaniu stylów pobranych z targowiska. Więcej o tworzeniu stylów dowiesz się :here.',\n        'tutorial'      => 'Kontroluje estetykę kampanii. Pozwala wybrać kolory, preferencje układu treści i inne elementy wizualne. Modyfikacje dotyczą tylko tej kampanii i można je w każdej chwili zmienić.',\n    ],\n    'pitch'         => 'Twórz własne style CSS by nadać kampanii indywidualny charakter.',\n    'placeholders'  => [\n        'name'  => 'Nazwa stylu',\n    ],\n    'reorder'       => [\n        'save'      => 'Zapisz kolejność',\n        'success'   => '{1} Zmieniono kolejność :count stylu.|[2,*] Zmieniono kolejność :count stylów.',\n        'title'     => 'Zmiana kolejności stylów',\n    ],\n    'theme'         => [\n        'none'      => 'Użyj preferencji użytkownika',\n        'override'  => 'Motyw nadrzędny',\n        'success'   => 'Zmieniono motyw kampanii.',\n        'title'     => 'Zmień motyw kampanii',\n    ],\n    'title'         => 'Motywy kampanii',\n    'toggle'        => [\n        'disable'   => 'Skutecznie zastosowano styl.',\n        'enable'    => 'Skuteczne usunięto styl.',\n    ],\n    'update'        => [\n        'success'   => 'Zmieniono styl :name.',\n        'title'     => 'Zmiana stylu',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/vanity.php",
    "content": "<?php\n\nreturn [\n    'available' => 'Nazwa :vanity jest dostępna!',\n    'forever'   => 'Nie można zmienić po ustawieniu. :docs',\n    'helper-v2' => 'Nadaj kampanii zapadający w pamięć adres internetowy. Zamiast domyślnego :default może na przykład wyświetlać się jako :example.',\n    'rule'      => 'W polu :field należy umieścić przynajmniej jedną literę alfabetu.',\n    'rule2'     => 'W polu :field nie można umieścić znaku /.',\n    'set'       => 'Specjalny URL kampanii ustawiono trwale jako :vanity.',\n];\n"
  },
  {
    "path": "lang/pl/campaigns/visibilities.php",
    "content": "<?php\n\nreturn [\n    'directory' => [\n        'public'    => 'Umieszczona w publicznym katalogu kampanii',\n        'unlisted'  => 'Nieobecna w publicznym katalogu kampanii',\n    ],\n    'helpers'   => [\n        'premium'   => 'By użyć tego ustawienia należy odblokować funkcjonalności premium.',\n        'private'   => 'Dostęp tylko dla zalogowanych członków.',\n        'public'    => 'Może przeglądać każdy posiadacz linku.',\n    ],\n    'titles'    => [\n        'private'   => 'Prywatna',\n        'public'    => 'Publiczna',\n        'unlisted'  => 'Publiczna (poza katalogiem)',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns/webhooks.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'action'    => 'Zmień status',\n        'add'       => 'Stwórz webhook',\n        'bulks'     => [\n            'delete_success'    => '{1} Usunięto :count webhook.|[2,4] Usunięto :count webhooki.|[5,*] Usunięto :count webhooków.',\n            'disable'           => 'Wyłącz',\n            'disable_success'   => '{1} Wyłączono :count webhook.|[2,4] Wyłączono :count webhooki.|[5,*] Wyłączono :count webhooków',\n            'enable'            => 'Aktywuj',\n            'enable_success'    => '{1} Aktywowano :count webhook.|[2,4] Aktywowano :count webhooki.|[5,*] Aktywowano :count webhooków',\n        ],\n        'test'      => 'Testuj webhook',\n        'update'    => 'Edytuj webhook',\n    ],\n    'create'        => [\n        'success'   => 'Stworzono webhook',\n        'title'     => 'Tworzenie webhooka',\n    ],\n    'destroy'       => [\n        'success'   => 'Usunięto webhook',\n    ],\n    'edit'          => [\n        'success'   => 'Zmieniono webhook',\n        'title'     => 'Edycja webhooka',\n    ],\n    'error'         => [\n        'pitch' => 'Ulepsz do poziomu premium by używać webhooków.',\n    ],\n    'fields'        => [\n        'enabled'           => 'Aktywny',\n        'event'             => 'Sytuacja',\n        'events'            => [\n            'deleted'   => 'Usunięcie elementu',\n            'edited'    => 'Edycja elementu',\n            'new'       => 'Nowy element',\n        ],\n        'message'           => 'Wiadomość',\n        'private_entities'  => [\n            'helper'    => 'Nie używaj webhooka podczas edycji elementów prywatnych.',\n            'skip'      => 'Omijaj prywatne',\n        ],\n        'type'              => 'Rodzaj',\n        'types'             => [\n            'custom'    => 'Wiadomość',\n            'payload'   => 'Payload',\n        ],\n        'url'               => 'Adres url',\n    ],\n    'helper'        => [\n        'active'    => 'Jeśli webhook jest aktywny',\n        'message'   => 'Dodaj własną wiadomość z możliwością mapowania',\n        'status'    => 'Aktywuje i wyłącza webhook',\n        'tutorial'  => 'Dzięki webhookom możesz wysyłać aktualizacje kampanii w czasie rzeczywistym do narzędzi zewnętrznych, zawsze kiedy element jest tworzony, zmieniany albo usuwany. Możesz dodać wiele webhooków i testować je za pomocą tej strony.',\n    ],\n    'placeholders'  => [\n        'message'   => '{who} wprowadził/a zmiany w {name}, znajdziesz je tu: {url}',\n        'url'       => 'Docelowy adres url webhooka',\n    ],\n    'test'          => [\n        'success'   => 'Wysłano zapytanie testowe',\n    ],\n    'title'         => 'Webhooki',\n    'toggle'        => [\n        'disable'   => 'Skutecznie uruchomiono webhook.',\n        'enable'    => 'Skutecznie wyłączono webhook.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/campaigns.php",
    "content": "<?php\n\nreturn [\n    'actions'                           => [],\n    'create'                            => [\n        'success'   => 'Kampania utworzona.',\n        'title'     => 'Nowa kampania',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Zmieniono kampanię.',\n    ],\n    'entity_note_visibility'            => [],\n    'entity_personality_visibilities'   => [\n        'private'   => 'Osobowość nowych postaci jest domyślnie tajna.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Nowe elementy są tajne',\n    ],\n    'errors'                            => [\n        'access'        => 'Nie masz dostępu do tej kampanii.',\n        'premium'       => 'Ta opcja dostępna jest tylko w kampanii premium.',\n        'unknown_id'    => 'Nieznana kampania.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'Doładowanie przez',\n        'entity_count'              => 'Liczba elementów',\n        'entry'                     => 'Opis kampanii',\n        'followers'                 => 'Obserwujący',\n        'genre'                     => 'Gatunek',\n        'header_image'              => 'Ilustracja okładkowa',\n        'image'                     => 'Obraz',\n        'locale'                    => 'Język kampanii',\n        'name'                      => 'Nazwa',\n        'open'                      => 'Otwarta na zgłoszenia',\n        'premium'                   => 'Premium odblokowana przez :name',\n        'public'                    => 'Widoczność kampanii',\n        'public_campaign_filters'   => 'Filtry kampanii publicznych',\n        'superboosted'              => 'Turbodoładowana przez',\n        'system'                    => 'System',\n        'theme'                     => 'Motyw',\n        'vanity'                    => 'Specjalny URL',\n    ],\n    'following'                         => 'Obserwowanie',\n    'helpers'                           => [\n        'boosted'                   => 'Odblokowano nowe opcje ponieważ kampania jest doładowana. Więcej informacji znajdziesz na stronie :settings.',\n        'css'                       => 'Twórz własne style CSS do używania w kampanii. Uwaga - nadużywanie tej opcji może poskutkować usunięciem stworzonych stylów. Powtarzające się albo poważne wykroczenia mogą spowodować usunięcie kampanii.',\n        'dashboard'                 => 'Dostosuj sposób wyświetlania widżetów na pulpicie kampanii wypełniając poniższe pola',\n        'excerpt'                   => 'Podsumowanie kampanii będzie wyświetlane na pulpicie, więc poświęć mu kilka zdań. Najlepiej, gdy jest krótkie i dobitne.',\n        'header_image'              => 'Obraz wyświetlany w tle nagłówka pulpitu kampanii',\n        'hide_history'              => 'Zaznacz, by ukryć historię edycji elementów kampanii przed nieposiadającymi statusu administratora.',\n        'hide_members'              => 'Zaznacz, by ukryć listę uczestników kampanii przed nieposiadającymi statusu administratora.',\n        'locale'                    => 'Język, w którym piszesz kampanię. Służy do tworzenia zawartości oraz filtrowania kampanii publicznych.',\n        'name'                      => 'Twoja kampania lub świat mogą się nazywać jakkolwiek, o ile nazwa ma przynamniej 4 litery lub cyfry.',\n        'no_entry'                  => 'Ta kampania nie ma chyba żadnego opisu! Pora to naprawić.',\n        'premium'                   => 'Część opcji jest dostępna, ponieważ odblokowano funkcje premium. Więcej informacji na stronie :settings.',\n        'public_campaign_filters'   => 'Pomóż innym graczom znaleźć twoją kampanię wśród innych dostępnych publicznie, podając następujące informacje.',\n        'public_no_visibility'      => 'Uwaga! Ta kampania jest publiczna, ale nie rola \"publiczność\" na razie niczego nie widzi. :fix',\n        'system'                    => 'Jeżeli kampania jest dostępna publicznie, system podany jest na stronie :link.',\n        'systems'                   => 'By nie zarzucać wszystkich użytkowników mnóstwem opcji, Kanka udostępnia niektóre możliwości tylko dla konkretnych systemów RPG (np. blok statystyk potworów do D&D 5 ed.). Jeżeli dodasz tu wspierany w ten sposób system, uzyskasz dostęp do takich treści.',\n        'theme'                     => 'Ustaw inny motyw tej kampanii, niż zaznaczony w ogólnych preferencjach użytkownika.',\n        'view_public'               => 'By zobaczyć kampanię tak, jak obserwujący otwórz :link w trybie incognito.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Skopiuj odnośnik do schowka',\n            'link'  => 'Nowy odnośnik',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Stwórz zaproszenie',\n            ],\n            'success_link'  => 'Stworzono odnośnik :link',\n            'title'         => 'Zaproś kogoś do udziału w kampanii',\n        ],\n        'destroy'               => [\n            'success'   => 'Usunięto zaproszenie.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Ta przepustka jest już wykorzystana albo kampania została usunięta.',\n            'invalid_token'     => 'Przepustka jest nieważna.',\n            'join'              => 'Zaloguj się lub zarejestruj by dołączyć do kampanii :campaign.',\n        ],\n        'fields'                => [\n            'created'   => 'Wysłano',\n            'role'      => 'Rola',\n            'token'     => 'Kod',\n            'type'      => 'Rodzaj',\n            'usage'     => 'Maksymalna liczba użyć',\n        ],\n        'helpers'               => [\n            'role'  => 'Użytkownik musi dołączyć, zanim otrzyma uprawnienia administratora.',\n            'usage' => 'Po tylu użyciach link z zaproszeniem przestanie być aktywny.',\n        ],\n        'unlimited_validity'    => 'Nieograniczona',\n        'usages'                => [\n            'five'      => '5 użyć',\n            'no_limit'  => 'Bez limitu',\n            'once'      => '1 użycie',\n            'ten'       => '10 użyć',\n        ],\n    ],\n    'leave'                             => [\n        'action'            => 'Opuść kampanię',\n        'confirm'           => 'Czy na pewno chcesz opuścić kampanię :name? Utracisz do niej dostęp do czasu, gdy administrator kampanii zaprosi cię ponownie.',\n        'confirm-button'    => 'Tak, opuść kampanię',\n        'error'             => 'Nie możesz opuścić kampanii.',\n        'fix'               => 'Przejdź do uczestników kampanii',\n        'no-admin-left'     => 'Nie możesz opuścić kampanii, ponieważ pozostanie wówczas bez administratorów. Nadaj najpierw innemu uczestnikowi rolę administratora',\n        'success'           => 'Opuszczasz kampanię.',\n        'title'             => 'Opuszczanie kampanii',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'Usuń z kampanii',\n            'switch'        => 'Przełącz',\n            'switch-back'   => 'Powrót do profilu',\n            'switch-entity' => 'Zobacz jako',\n        ],\n        'fields'                => [\n            'banned'        => 'Użytkownik zablokowany',\n            'joined'        => 'Dołączył(a)',\n            'last_login'    => 'Ostatnie logowanie',\n            'name'          => 'Użytkownik',\n            'role'          => 'Rola',\n            'roles'         => 'Role',\n        ],\n        'helpers'               => [\n            'switch'    => 'Przełącz uczestnika',\n        ],\n        'impersonating'         => [\n            'message'   => 'Oglądasz kampanię z perspektywy innego uczestnika. Niektóre funkcje mogą nie działać, ale reszta wygląda dokładnie tak, jak widzi ją ta osoba. By wrócić do własnego profilu użyj opcji Powrót do profilu, znajdującej się w miejscu opcji Wyloguj.',\n            'title'     => 'Zalogowano jako :name',\n        ],\n        'invite'                => [\n            'description'   => 'Możesz włączać znajomych do udziału w kampanii przekazując im odnośnik z zaproszeniem. Po zaakceptowaniu, zostaną oni dodani do kampanii w przydzielonej roli. Możesz też zapraszać graczy mailem.',\n            'more'          => 'Możesz dodawać nowe role tutaj: :link.',\n            'title'         => 'Zaproszenia',\n        ],\n        'removal'               => 'Usuwasz \":member\" z kampanii.',\n        'roles'                 => [\n            'member'    => 'Uczestnik',\n            'owner'     => 'Administrator',\n            'player'    => 'Gracz',\n            'public'    => 'Publiczność',\n            'viewer'    => 'Obserwator',\n        ],\n        'switch_back_success'   => 'Powrócono do podstawowego profilu.',\n    ],\n    'mentions'                          => [],\n    'modules'                           => [],\n    'open_campaign'                     => [],\n    'options'                           => [],\n    'overview'                          => [\n        'entity-count'      => '{0} Brak elementów|{1} :amount element|[2,3,4] :amount elementy|[5,] :amount elementów',\n        'follower-count'    => '{0} Brak śledzących|{1} :amount śledzący|[2,] :amount śledzących',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Pulpit',\n        'privacy'   => 'Domyślne ustawienia prywatności',\n        'setup'     => 'Konfiguracja',\n        'sharing'   => 'Udostępnianie',\n        'systems'   => 'System',\n        'ui'        => 'Wygląd',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Język kampanii',\n        'name'      => 'Tytuł tej kampanii',\n        'system'    => 'D&D, Pathfinder, Fate, DSA',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Ukryta',\n        'private'   => 'Tajna',\n        'visible'   => 'Widoczna',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'Kampanie są domyślnie prywatne, ale można je upublicznić. Wówczas każdy zyska do nich dostęp za pomocą strony :public-campaigns, o ile w kampanii są jakieś elementy widoczne dla posiadaczy roli :public-role. A więc: wszyscy widzą publiczne kampanie, ale by mogli przeglądać ich elementy trzeba odpowiednio ustawić uprawnienia dla roli :public-role.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'Dodaj rolę',\n            'duplicate'     => 'Powiel rolę',\n            'permissions'   => 'Zarządzaj uprawnieniami',\n            'rename'        => 'Zmień nazwę',\n            'save'          => 'Zapisz rolę',\n        ],\n        'admin_role'    => 'administrator',\n        'bulks'         => [\n            'delete'    => '{1} Usunięto :count rolę.|[2,3,4] Usunięto :count role.|[5,*] Usunięto :count ról.',\n            'edit'      => '{1} Zmieniono :count rolę.|[2,3,4] Zmieniono :count role.|[5,*] Zmieniono :count ról.',\n        ],\n        'create'        => [\n            'success'   => 'Stworzono rolę.',\n            'title'     => 'Stwórz nową rolę dla :name',\n        ],\n        'destroy'       => [\n            'success'   => 'Usunięto rolę.',\n        ],\n        'edit'          => [\n            'success'   => 'Zaktualizowano rolę.',\n            'title'     => 'Edycja roli :name',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Kopiuj uprawnienia',\n            'name'              => 'Nazwa',\n            'permissions'       => 'Uprawnienia',\n            'type'              => 'Rodzaj',\n            'users'             => 'Posiadacze',\n        ],\n        'helper'        => [\n            '1'                     => 'Kampania może posiadać dowodnie dużo ról. \"Administrator\" posiada automatycznie dostęp do wszystkich elementów kampanii, ale inne role mogą być ograniczone tylko do części elementów (postaci, miejsc, itd.).',\n            '2'                     => 'Uprawnienia rozmaitych elementów można dodatkowo modyfikować w zakładce \"Uprawnienia\". Pojawi się ona, kiedy w kampanii przybędzie ról lub członków.',\n            '3'                     => 'Ustawieniami można zarządzać globalnie, zapewniając rolom uprawienia dostępu do całych kategorii elementów kampanii i ukrywając część z nich za pomocą opcji \"Tajne\", albo lokalnie, włączając ręcznie widoczność konkretnych elementów.',\n            '4'                     => 'Liczba ról w kampaniach doładowanych nie jest ograniczona.',\n            'permissions_helper'    => 'Powiela wszystkie uprawnienia roli dotyczące modułów i elementów kampanii.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'Ustawiono uprawnienia roli Publiczność, ale kampania jest prywatna. Możesz to zmienić z pomocą zakładki Udostępnij w menu edycji kampanii.',\n            'empty_role'            => 'Tej roli nie posiada żaden z uczestników kampanii.',\n            'role_admin'            => 'Rola :admin zapewnia posiadaczom automatyczny dostęp do wszystkiego w kampanii.',\n            'role_permissions'      => 'Zezwól roli :name na następujące działania na elementach',\n        ],\n        'members'       => 'Uczestnicy',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'Uprawnienia w kampanii umożliwiają, co następuje.',\n                'entities'  => 'Oto krótkie zestawienie uprawnień, które mogą otrzymać użytkownicy w danej roli.',\n                'more'      => 'Dalsze instrukcje znajdziesz w filmie instruktażowym na YouTube',\n                'title'     => 'Szczegóły uprawnień',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'       => 'Tworzenie',\n                'dashboard' => 'Pulpit',\n                'delete'    => 'Usuwanie',\n                'edit'      => 'Edytowanie',\n                'gallery'   => [\n                    'browse'    => 'Przeglądanie',\n                    'manage'    => 'Pełna kontrola',\n                    'upload'    => 'Dodawanie',\n                ],\n                'manage'    => 'Zarządzaj',\n                'members'   => 'Uczestnicy',\n                'permission'=> 'Uprawnienia',\n                'read'      => 'Oglądanie',\n                'toggle'    => 'Zmień dla wszystkich',\n            ],\n            'helpers'   => [\n                'add'       => 'Pozwala tworzyć elementy danego rodzaju. Automatycznie umożliwia również oglądanie i edycję stworzonych elementów, nawet jeżeli rola nie posiada do tego uprawnień.',\n                'dashboard' => 'Pozwala edytować pulpity i ich widżety.',\n                'delete'    => 'Pozwala usuwać elementy danego rodzaju.',\n                'edit'      => 'Pozwala modyfikować elementy danego rodzaju.',\n                'gallery'   => [\n                    'browse'    => 'Pozwala przeglądać galerię i dodawać znajdujące się w niej orazy do elementów.',\n                    'manage'    => 'Pozwala wykonywać wszystkie działania w galerii, w tym edytować i usuwać obrazy.',\n                    'upload'    => 'Pozwala dodawać obrazy do galerii. Jeżeli uczestnik nie posiada też uprawnień do przeglądania, będzie widzieć tylko obrazy dodane samodzielnie.',\n                ],\n                'manage'    => 'Pozwala edytować kampanię jakby uczestnik był administratorem, ale nie daje uprawnień by ją usunąć.',\n                'members'   => 'Pozwala zapraszać nowych uczestników kampanii.',\n                'not_public'=> 'Kampania nie jest publiczna, więc stworzone dla niej role publiczne są ignorowane. Kampanię możesz upublicznić zmieniając ustawienia.',\n                'permission'=> 'Pozwala zarządzać uprawnieniami tych elementów danego typu, które uczestnik może też edytować.',\n                'read'      => 'Pozwala widzieć wszystkie elementy danego typu, które nie są tajne.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Nazwa roli',\n        ],\n        'title'         => 'Role w kampanii :name',\n        'types'         => [\n            'owner'     => 'Administrator',\n            'public'    => 'Publiczność',\n            'standard'  => 'Stadardowy',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Dodaj uczestnika',\n                'remove'        => ':user z roli :role',\n                'remove_user'   => 'Uusń rolę użytkownika',\n            ],\n            'create'    => [\n                'success'   => 'Uczestnikowi przypisano rolę.',\n                'title'     => 'Przypisz uczestnikowi rolę :name',\n            ],\n            'destroy'   => [\n                'success'   => 'Uczestnikowi odebrano rolę.',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'By uniknąć nadużyć, nie można usunąć roli :admin posiadanej przez innego użytkownika. W wypadku nadużyć prosimy o kontakt przez :discord albo :email.',\n                'needs_more_roles'  => 'Zanim zrezygnujesz z roli :admin musisz nadać sobie jakąś inną rolę w kampanii.',\n            ],\n            'fields'    => [\n                'name'  => 'Nazwa',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'Aktywny',\n        ],\n        'boosted'       => 'Opcja we wczesnym dostępie, na razie dostępna wyłącznie w :boosted.',\n        'deprecated'    => [\n            'help'  => 'Ten moduł jest przestarzały - to znaczy, że ani go nie rozwijamy, ani nie sprawdzamy pod kątem błędów po aktualizacjach. Możesz go używać, ale ze świadomością, że ostatecznie zostanie z Kanki usunięty',\n            'title' => 'Przestarzałe',\n        ],\n        'disabled'      => 'Moduł :module został wyłączony.',\n        'enabled'       => 'Moduł :module został aktywowany.',\n        'errors'        => [\n            'module-disabled'   => 'Ten moduł jest obecnie wyłączony w ustawieniach kampanii. :fix',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Twórz zdolności specjalne, na przykład czary, moce czy techniki, i przypisuj je innym elementom.',\n            'assets'            => 'Zamieszczanie plików i nadawanie aliasów konkretnym elementom.',\n            'bookmarks'         => 'Tworzy w menu bocznym zakładki elementów i filtrowanych list',\n            'calendars'         => 'Wyposaż swój świat w systemy liczenia czasu.',\n            'characters'        => 'Mieszkańcy tego świata.',\n            'conversations'     => 'Rozmowy które odbywają fikcyjne postaci albo prawdziwi uczestnicy kampanii. Ten moduł bywa niedoceniany.',\n            'creatures'         => 'Moduł istot pozwala tworzyć zwierzęta, potwory i rozmaite inne stworzenia.',\n            'dice_rolls'        => 'Jeżeli używasz Kanki do prowadzenia kampanii, tu możesz zarządzać wykonywaniem rzutów kośćmi. Ten moduł bywa niedoceniany.',\n            'entity_attributes' => 'Wyświetla cechy elementów kampanii, na przykład Punkty Życia albo Szybkość.',\n            'events'            => 'Święta, festyny, katastrofy, urodziny i wojny.',\n            'families'          => 'Klany lub rodziny, ich członkowie i wzajemne relacje.',\n            'inventories'       => 'Zarządzaj wyposażeniem elementów.',\n            'items'             => 'Uzbrojenie, pojazdy, artefakty, eliksiry.',\n            'journals'          => 'Rozmaite spostrzeżenia spisane przez postaci oraz notatki MG.',\n            'locations'         => 'Planety, wymiary, kontynenty, państwa, miasta, rzeki, świątynie, gospody.',\n            'maps'              => 'Dodaj do kampanii mapę i oznacz położenie innych elementów z pomocą warstw i znaczników.',\n            'notes'             => 'Tajemnice, religie, historia, magia, rasy.',\n            'organisations'     => 'Kulty, oddziały wojskowe, frakcje polityczne, gildie.',\n            'quests'            => 'Zadania, które realizuje drużyna, z opisem zaangażowanych miejsc i postaci.',\n            'races'             => 'Jeżeli świecie żyje wiele ras, możesz opisać je tutaj.',\n            'tags'              => 'Każdy element można oznaczyć z pomocą rozmaitych etykiet ułatwiających wyszukiwanie. Nawet etykiety mogą mieć własne etykiety.',\n            'timelines'         => 'Dzieje świata wedle rozmaitych historii.',\n            'whiteboards'       => 'Rysuj i pisz po tablicach, by stworzyć wizualizację świata oraz rozgrywanych w nim przygód.',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'Kampanie publiczne widoczne są na stronie :public-campaigns. Wypełniając poniższe pola pomagasz znaleźć tam twoją kampanię!',\n        'language'  => 'Język, w którym napisano treść kampanii.',\n        'system'    => 'Jeżeli gracie w grę RPG, tu wpisz system którego używacie.',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Edytuj kampanię',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Osiągnięcia',\n            'customisation'     => 'Dostosowanie',\n            'danger'            => 'Zagrożenia',\n            'data'              => 'Dane',\n            'default-images'    => 'Domyślne ikony',\n            'defaults'          => 'Domyślne',\n            'deletion'          => 'Usunięcie',\n            'export'            => 'Eksport',\n            'import'            => 'Import',\n            'logs'              => 'Rejestr',\n            'management'        => 'Zarządzanie',\n            'members'           => 'Uczestnicy',\n            'plugins'           => 'Dodatki',\n            'recovery'          => 'Odzyskiwanie',\n            'roles'             => 'Role',\n            'sidebar'           => 'Menu boczne',\n            'stats'             => 'Statystyki',\n            'styles'            => 'Motywy',\n            'webhooks'          => 'Elementy webhook',\n        ],\n        'title'     => 'Kampania :name',\n    ],\n    'status'                            => [\n        'free'      => 'Opcje premium nieaktywne.',\n        'legacy'    => [\n            'title' => 'Funkcja doładowania (pozostałość starszej wersji)',\n        ],\n        'premium'   => 'Opcje premium odblokowane przez :name',\n        'title'     => 'Opcje premium',\n    ],\n    'superboosted'                      => [],\n    'themes'                            => [\n        'none'  => 'Brak (powrót do ustawień użytkownika)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Widoczna tylko dla adminów',\n            'visible'   => 'Widoczna dla uczestników',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Historia edycji elementu',\n            'member_list'       => 'Lista uczestników kampanii',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Kontroluje, kto może zobaczyć ostatnie zmiany w konkretnych elementach kampanii.',\n            'member-list'       => 'Kontroluje kto może zobaczyć uczestników kampanii.',\n            'theme'             => 'Wyświetla kampanię używając motywu użytkownika, albo wymusza wyświetlenie w jednym z poniższych motywów.',\n        ],\n        'members'           => [\n            'hidden'    => 'Widoczne tylko dla adminów kampanii',\n            'visible'   => 'Widoczne dla wszystkich uczestników',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Prywatna',\n        'public'    => 'Publiczna',\n        'unlisted'  => 'Publiczna (niewidoczna)',\n    ],\n    'warning'                           => [],\n];\n"
  },
  {
    "path": "lang/pl/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_appearance'    => 'Dodaj cechę wyglądu',\n        'add_personality'   => 'Dodaj cechę osobowości',\n    ],\n    'conversations' => [],\n    'create'        => [\n        'title' => 'Nowa postać',\n    ],\n    'destroy'       => [],\n    'dice_rolls'    => [],\n    'edit'          => [],\n    'families'      => [\n        'helper'    => 'Pozwala zmienić kolejność i określić, które rodziny :name będą widoczne lub ukryte dla nie-administratorów.',\n        'reorder'   => [\n            'success'   => 'Zmieniono rodziny postaci.',\n        ],\n        'title2'    => 'Zarządzaj rodzinami',\n    ],\n    'fields'        => [\n        'age'                       => 'Wiek',\n        'is_appearance_pinned'      => 'Przypnij wygląd',\n        'is_dead'                   => 'Nie żyje',\n        'is_personality_pinned'     => 'Przypnij osobowość',\n        'is_personality_visible'    => 'Osobowość jawna',\n        'life'                      => 'Życie',\n        'physical'                  => 'Powierzchowność',\n        'pronouns'                  => 'Rodzaj gramatyczny',\n        'sex'                       => 'Płeć',\n        'title'                     => 'Tytuł',\n        'traits'                    => 'Opis',\n    ],\n    'helpers'       => [\n        'age'   => 'Możesz też połączyć ten element z kalendarzem kampanii, by automatycznie obliczyć wiek. :more',\n    ],\n    'hints'         => [\n        'is_appearance_pinned'      => 'Zaznacz, by cechy wyglądu postaci wyświetlane były w widoku podstawowym.',\n        'is_dead'                   => 'Ta postać jest martwa',\n        'is_personality_visible'    => 'Odznacz by ukryć cały opis osobowości przed użytkownikami niebędących administratorami.',\n        'personality_not_visible'   => 'Opis osobowości widoczny wyłącznie dla administratorów.',\n        'personality_visible'       => 'Opis osobowości widoczny dla wszystkich.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'labels'        => [\n        'appearance'    => [\n            'entry' => 'Opis cechy wyglądu',\n            'name'  => 'Nazwa cechy wyglądu',\n        ],\n        'personality'   => [\n            'entry' => 'Opis cechy osobowości',\n            'name'  => 'Nazwa cechy osobowości',\n        ],\n    ],\n    'lists'         => [\n        'empty' => 'Stwórz pierwszego bohatera, łotra albo szarego mieszkańca powstającego świata.',\n    ],\n    'maps'          => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => 'Postać dodana do organizacji',\n            'title'     => 'Nowa organizacja dla :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Postać usunięta z organizacji',\n        ],\n        'edit'      => [\n            'success'   => 'Zaktualizowano organizacje postaci.',\n            'title'     => 'Aktualizuj organizacje dla :name',\n        ],\n        'fields'    => [\n            'role'  => 'Rola',\n        ],\n    ],\n    'placeholders'  => [\n        'age'               => 'Wiek',\n        'appearance_entry'  => 'Opis',\n        'appearance_name'   => 'Włosy, oczy, kolor skóry, wzrost',\n        'name'              => 'Imię postaci',\n        'personality_entry' => 'Szczegóły',\n        'personality_name'  => 'Pragnienia, manieryzmy, obawy, więzi',\n        'physical'          => 'Fizyczne',\n        'pronouns'          => 'On/Jego, Ona/Jej, Ono/Jego',\n        'sex'               => 'Płeć',\n        'title'             => 'Tytuł',\n        'traits'            => 'Opis',\n        'type'              => 'Bohater Niezależny, Postać Gracza, bóstwo',\n    ],\n    'quests'        => [\n        'helpers'   => [\n            'quest_giver'   => 'Zadania, które postać zleciła.',\n            'quest_member'  => 'Zadania, w których postać się pojawia.',\n        ],\n    ],\n    'races'         => [\n        'helper'    => 'Pozwala zmienić kolejność i określić, które rasy :name będą widoczne lub ukryte dla nie-administratorów.',\n        'reorder'   => [\n            'success'   => 'Zmieniono rasy postaci.',\n        ],\n        'title2'    => 'Zarządzaj rasami',\n    ],\n    'sections'      => [\n        'appearance'    => 'Wygląd',\n        'personality'   => 'Osobowość',\n    ],\n    'show'          => [],\n    'warnings'      => [\n        'personality_hidden'    => 'Nie masz uprawnień do edycji osobowości tej postaci.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Błękitny',\n    'black'         => 'Czarny',\n    'blue'          => 'Niebieski',\n    'brown'         => 'Brązowy',\n    'green'         => 'Zielony',\n    'grey'          => 'Szary',\n    'light-blue'    => 'Niebieski',\n    'maroon'        => 'Fuksja',\n    'navy'          => 'Granatowy',\n    'none'          => 'Brak',\n    'orange'        => 'Pomarańczowy',\n    'pink'          => 'Różowy',\n    'purple'        => 'Fioletowy',\n    'red'           => 'Czerwony',\n    'teal'          => 'Morski',\n    'white'         => 'Biały',\n    'yellow'        => 'Żółty',\n];\n"
  },
  {
    "path": "lang/pl/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'          => 'doładowana kampania',\n    'premium-campaign'          => 'kampania premium',\n    'premium-campaign-count'    => '{0} Brak kampanii premium |{1} 1 kampania premium |[2,3,4] :count kampanie premium|[5,*] :count kampanii premium',\n    'premium-campaigns'         => 'kampanie premium',\n    'premium-feature'           => 'Opcja premium',\n    'superboosted-campaign'     => 'turbodoładowana kampania',\n];\n"
  },
  {
    "path": "lang/pl/confirm/editing.php",
    "content": "<?php\n\nreturn [\n    'back'          => 'Wycofaj',\n    'description'   => 'Najwyraźniej ktoś właśnie edytuje tę stronę? Chcesz się wycofać, czy zignorować to ostrzeżenie, ryzykując utratę danych?',\n    'ignore'        => 'Edytuj mimo to',\n    'members'       => 'Członkowie edytujący tę stronę:',\n    'title'         => 'Uwaga',\n    'user'          => ':user od :since',\n];\n"
  },
  {
    "path": "lang/pl/confirm.php",
    "content": "<?php\n\nreturn [\n    'delete'    => [\n        'bulk'          => 'Czy na pewno chcesz usunąć wybrane elementy?',\n        'helper'        => 'Czy na pewno chcesz usunąć :name?',\n        'recoverable'   => 'W :premium-campaign tę akcję można cofnąć przez :day dni.',\n        'title'         => 'Usuwanie elementu',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/connections/web.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'back'      => 'Powrót do powiązań',\n        'download'  => 'Pobierz PNG',\n        'view'      => 'Widok sieci',\n    ],\n    'cta'       => [\n        'text'  => 'To jest podgląd pełnej sieci powiązań kampanii. W kampaniach darmowych wyświetlane jest do :amount węzłów. Kampanie premium pozwalają zobaczyć i nawigować wśród wszystkich powiązań. Podnieś poziom kampanii i zobacz całą strukturę swojego świata na raz.',\n        'title' => 'Podgląd ograniczony do :amount powiązań',\n    ],\n    'title'     => 'Sieć powiązań',\n];\n"
  },
  {
    "path": "lang/pl/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowa konwersacja',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_closed'     => 'Zamknięta',\n        'messages'      => 'Wiadomości',\n        'participants'  => 'Uczestnicy',\n    ],\n    'hints'         => [\n        'empty'         => 'Nikt nie uczestniczy w tej konwersacji.',\n        'participants'  => 'Dodawaj uczestników konwersacji naciskając ikonę :icon w prawym górnym rogu.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Spisuj rozmowy, listy i wymianę poglodów między postaciami i całymi frakcjami.',\n    ],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Usunięto wiadomość.',\n        ],\n        'is_updated'    => 'Zaktualizowano',\n        'load_previous' => 'Załaduj starsze wiadomości',\n        'placeholders'  => [\n            'message'   => 'Twoja wiadomość',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Uczestnik :entity wypowiedział się w konwersacji.',\n        ],\n        'destroy'   => [\n            'success'   => 'Usunięto uczestnika :entity z konwersacji.',\n        ],\n        'helper'    => 'Dodaje i usuwa uczestników :name.',\n        'modal'     => 'Uczestnicy',\n        'title'     => 'Uczestnicy :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nazwa konwersacji',\n        'type'  => 'W grze, przygotowanie, omawianie intrygi',\n    ],\n    'show'          => [\n        'is_closed' => 'Konwersacja jest zamknięta.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Uczestnicy',\n    ],\n    'targets'       => [\n        'characters'    => 'Postaci',\n        'members'       => 'Gracze',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/cookieconsent.php",
    "content": "<?php\n\nreturn [\n    'allow'     => 'Zezwól',\n    'dismiss'   => 'Odrzuć',\n    'header'    => 'Zgoda na cookies',\n    'link'      => 'Szczegóły',\n    'message'   => 'Kanka wykorzystuje cookies by zagwarantować jak najlepsze doświadczanie użytkownika.',\n    'policy'    => 'Polityka cookies',\n    'reject'    => 'Nie zezwalaj',\n];\n"
  },
  {
    "path": "lang/pl/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowa istota',\n    ],\n    'creatures'     => [],\n    'fields'        => [\n        'is_extinct'    => 'Wymarła',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_dead'       => 'Ta istota nie żyje.',\n        'is_extinct'    => 'Ten rodzaj istot wymarł.',\n    ],\n    'lists'         => [\n        'empty' => 'Dodawaj zwierzęta, potwory i istoty mityczne, z którymi drużyna się zmierzy albo zaprzyjaźni.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Roślinożerna, wodna, mityczna',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pl/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Akcje',\n        'apply'             => 'Zastosuj',\n        'back'              => 'Cofnij',\n        'change'            => 'Zmień',\n        'close'             => 'Zamknij',\n        'confirm'           => 'Potwierdź',\n        'copy'              => 'Kopiuj',\n        'copy_mention'      => 'Kopiuj wzmiankę [ ]',\n        'copy_to_campaign'  => 'Kopiuj do kampanii',\n        'disable'           => 'Wyłącz',\n        'enable'            => 'Włącz',\n        'explore_view'      => 'Widok hierarchii',\n        'export'            => 'Eksport (PDF)',\n        'find_out_more'     => 'Więcej',\n        'go_to'             => 'Idź do :name',\n        'help'              => 'Pomoc',\n        'json-export'       => 'Eksport (JSON)',\n        'markdown-export'   => 'Eksport (zaznaczone)',\n        'move'              => 'Zmień lub przenieś',\n        'new'               => 'Nowe',\n        'new_child'         => 'Nowy element pochodny',\n        'new_post'          => 'Nowy komentarz',\n        'next'              => 'Następne',\n        'open'              => 'Otwórz',\n        'print'             => 'Drukuj',\n        'reorder'           => 'Kolejność',\n        'reset'             => 'Reset',\n        'save-changes'      => 'Zapisz zmiany',\n        'transform'         => 'Przekształć',\n    ],\n    'add'               => 'Dodaj',\n    'alerts'            => [\n        'copy_attribute'    => 'Wzmianka cechy została skopiowana do schowka.',\n        'copy_invite'       => 'Skopiowano do schowka odnośnik zaproszenia.',\n        'copy_mention'      => 'Zaawansowana wzmianka elementu została skopiowana do schowka.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Edytuj zaznaczone',\n            'permissions'   => 'Zmiana uprawnień',\n        ],\n        'age'           => [\n            'helper'    => 'Możesz dodać liczbę poprzedzoną znakiem + lub -, by zmienić wiek o tyle lat.',\n        ],\n        'buttons'       => [\n            'label' => 'Dla wybranych',\n        ],\n        'edit'          => [\n            'locations' => 'Działania miejsca',\n            'tagging'   => 'Działania etykiety',\n            'tags'      => [\n                'add'       => 'Dodaj',\n                'remove'    => 'Usuń',\n            ],\n            'title'     => 'Edycja wielu elementów',\n        ],\n        'errors'        => [\n            'admin'     => 'Tylko administratorzy mogą zmieniać tajny status elementu.',\n            'general'   => 'Podczas wykonywania akcji nastąpił błąd. Jeżeli będzie się powtarzał, skontaktuj się z nami. Komunikat błędu: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Zastąp',\n            ],\n            'helpers'   => [\n                'override'  => 'Jeżeli pole jest zaznaczone, wybrane uprawnienia zastąpią dotychczasowe uprawnienia elementów. Jeżeli nie jest zaznaczone, wybrane uprawnienia zostaną dodane do istniejących.',\n            ],\n            'title'     => 'Zmień uprawnienia dla wielu elementów.',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Zastosuj szablon do wielu elementów',\n    ],\n    'cancel'            => 'Anuluj',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Kopiuj elementy do innej kampanii',\n        'panel'         => 'Kopiuj',\n        'title'         => 'Kopiuj :name do innej kampanii',\n    ],\n    'create'            => 'Stwórz',\n    'datagrid'          => [\n        'empty' => 'Na razie nic tu nie ma.',\n    ],\n    'delete_modal'      => [\n        'callout'       => 'Psst!',\n        'confirm'       => 'Potwierdź usunięcie',\n        'permanent'     => 'Tego działania nie można cofnąć.',\n        'recoverable'   => 'Usunięte elementy można odzyskiwać przez :day dni w :boosted-campaign.',\n        'title'         => 'Potwierdzanie usunięcia',\n    ],\n    'destroy_many'      => [],\n    'dynamic'           => [\n        'permission'    => 'Nie masz uprawnień by tworzyć elementy modułu :module.',\n        'unknown'       => 'Element niewłaściwy dla modułu :module.',\n    ],\n    'edit'              => 'Edytuj',\n    'errors'            => [\n        'boosted_campaigns'     => 'By korzystać z tej funkcji, kampania musi być :boosted.',\n        'unavailable_feature'   => 'Funkcja niedostępna',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'archived'          => 'Zarchiwizowane',\n        'calendar_date'     => 'Data',\n        'child'             => 'Pochodzenie',\n        'closed'            => 'Zamknięta',\n        'colour'            => 'Kolor',\n        'copy_abilities'    => 'Kopiuj zdolności',\n        'copy_inventory'    => 'Kopiuj wyposażenie',\n        'copy_links'        => 'Kopiuj odnośniki elementu',\n        'copy_permissions'  => 'Kopiuj uprawnienia (zastąpią obecnie obowiązujące uprawnienia)',\n        'copy_posts'        => 'Kopiuj komentarze (oraz ich uprawnienia)',\n        'copy_reminders'    => 'Kopiuj epizody',\n        'creator'           => 'Tworzenie',\n        'date_range'        => 'Zakres dat',\n        'excerpt'           => 'Fragment',\n        'has_entity_files'  => 'Ma dołączone pliki',\n        'has_entry'         => 'Ma opis',\n        'has_image'         => 'Ma obraz',\n        'has_posts'         => 'Posiada komentarze',\n        'header_image'      => 'Nagłówek',\n        'image'             => 'Obraz',\n        'is_closed'         => 'Ta rozmowa zostanie zamknięta i nie będzie można dodawać do niej nowych wiadomości.',\n        'is_private'        => 'Tajne',\n        'is_private_v3'     => 'Wyświetlaj tylko użytkownikom w roli :admin-role. To ustawienie zastępuje wszystkie inne.',\n        'is_star'           => 'Przypięte',\n        'locations'         => ':first w :second',\n        'name'              => 'Nazwa',\n        'names'             => 'Nazwy',\n        'parent'            => 'Źródło',\n        'position'          => 'Kolejność',\n        'replace_mentions'  => 'Zamień wzmianki o cechach tego elementu wzmiankami nowego elementu',\n        'template'          => 'Szablon',\n        'tooltip'           => 'Dymek',\n        'type'              => 'Rodzaj',\n        'visibility'        => 'Widoczność',\n        'word-count'        => 'Liczba słów: :number',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Osiągnięto maksymalną liczbę (:max) plików dla tego elementu.',\n            'max_size'  => 'Kampania osiągnęła maksymalną liczbę plików.',\n            'no_files'  => 'Brak plików.',\n        ],\n        'hints'     => [\n            'limit'         => 'Do każdego elementu można dodać maksymalnie :max plików.',\n            'limitations'   => 'Dopuszczalne formaty: :formats. Maksymalny rozmiar: :size.',\n        ],\n    ],\n    'filter'            => 'Filtruj',\n    'filters'           => [\n        'all'               => 'Pokaż wszystkie elementy pochodne',\n        'clear'             => 'Usuń filtry',\n        'copy_helper'       => 'Użyj skopiowanych do schowka filtrów by stworzyć filtry na pulpicie albo skróty.',\n        'copy_to_clipboard' => 'Kopiuj filtry do schowka',\n        'direct'            => 'Pokaż elementy bezpośrednio pochodne',\n        'filtered'          => 'Wyświetlono :count z :total elementów.',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Pokaż wszystkie pochodne (:count)',\n                'filtered'  => 'Pokaż bezpośrednio pochodne  (:count)',\n            ],\n            'paginated' => 'Przełącza między elementami pochodnymi bezpośrednio oraz wszystkimi pochodnymi. Dla usprawnienia wyniki dzielą się na strony.',\n        ],\n        'mobile'            => [\n            'clear' => 'Wyczyść',\n            'copy'  => 'Schowek',\n        ],\n        'options'           => [\n            'any'       => 'Każdy',\n            'children'  => 'Z pochodnymi',\n            'exclude'   => 'Nie zawiera',\n            'hide'      => 'Ukryj',\n            'include'   => 'Zawiera',\n            'none'      => 'Brak',\n            'show'      => 'Pokaż',\n        ],\n        'show'              => 'Pokaż filtry',\n        'sorting'           => [\n            'asc'       => ':field rosnąco',\n            'desc'      => ':field malejąco',\n            'helper'    => 'Określa kolejność wyświetlania rezultatów.',\n        ],\n        'title'             => 'Filtry',\n    ],\n    'fix-this-issue'    => 'Napraw ten problem',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Dodaj datę kalendarzową',\n        ],\n        'copy_options'  => 'Opcje kopiowania',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Skopiuj następujące elementy elementu źródłowego do nowego elementu.',\n        'linking'       => 'Łącza do innych elementów',\n        'parent'        => 'Wybierz źródło od którego pochodzić będzie ten element.',\n    ],\n    'hidden'            => 'Ukryte',\n    'hints'             => [\n        'calendar_date'         => 'Data kalendarzowa umożliwia łatwiejsze filtrowanie i pozwala umieścić w kalendarzu epizod.',\n        'image_dimension'       => 'Sugerowany rozmiar: :dimension pikseli.',\n        'image_limitations'     => 'Dozwolone formaty: :formats. Maksymalny rozmiar pliku :size.',\n        'image_recommendation'  => 'Sugerowane wymiary: :width na :height pikseli.',\n        'is_star'               => 'Elementy przypięte pojawiają się w menu elementu.',\n        'tooltip'               => 'Zastąp dymek z poradą generowaną automatycznie następującą zawartością.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Stworzone przez :name :date',\n        'created_date_clean'    => 'Stworzone :date',\n        'unknown'               => 'Nieznane',\n        'updated_clean'         => 'Ostatnio zmienione przez :name :date',\n        'updated_date_clean'    => 'Ostatnio zmienione :date',\n        'view'                  => 'Zobacz dziennik elementu',\n    ],\n    'image'             => [\n        'error' => 'Nie udało nam się pozyskać wskazanego obrazu. Być może strona uniemożliwia pobieranie (na przykład Squarespace albo DeviantArt), albo odnośnik nie jest już aktywny. Upewnij się też, że obrazek nie jest większy niż :size.',\n    ],\n    'is_private'        => 'Ten element jest tajny, a zatem widoczny tylko dla uczestników posiadających rolę administratora.',\n    'keyboard-shortcut' => 'Skrót klawiaturowy :code',\n    'navigation'        => [\n        'cancel'            => 'anuluj',\n        'or_cancel'         => 'lub :cancel',\n        'skip_to_content'   => 'Pomiń nawigację',\n    ],\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Zezwól',\n                'deny'      => 'Zabroń',\n                'ignore'    => 'Pomiń',\n                'remove'    => 'Wyczyść',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Zezwól',\n                'deny'      => 'Zabroń',\n                'inherit'   => 'Kopiuj',\n            ],\n            'delete'        => 'Usuwanie',\n            'edit'          => 'Edycja',\n            'private'       => 'Uczyń tajnym',\n            'toggle'        => 'Przełącz',\n            'view'          => 'Wyświetlanie',\n        ],\n        'fields'            => [\n            'member'    => 'Uczestnik',\n            'role'      => 'Rola',\n        ],\n        'helpers'           => [\n            'setup' => 'Przy pomocy tej funkcji możesz dokładnie określić, jak role i uczestnicy kampanii mogą działać na ten element. :allow pozwala użytkownikowi albo roli wykonać dane działanie. :deny im to uniemożliwi. :inherit zastosuje uprawnienia roli głównej albo użytkownika. Użytkownik posiadający ustawienie :allow może działać na element, nawet jeżeli jego roli przypisano :deny.',\n        ],\n        'success'           => 'Zapisano uprawenienia.',\n        'title'             => 'Uprawienia',\n        'too_many_members'  => 'Kampania ma zbyt wielu uczestników (>10) by ich tu wyświetlić. Używaj przycisku Uprawienia w opisie elementu, by szczegółowo zarządzać uprawieniami.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Wybierz kalendarz',\n        'entry'         => 'Wpisz @ i trzy pierwsze litery nazwy by wzmiankować inny element kampanii.',\n        'fallback'      => 'Wybierz :module',\n        'gallery_image' => 'Wybierz obraz z galerii kampanii',\n        'image_url'     => 'Możesz również podać URL obrazu',\n        'journal'       => 'Wybierz dziennik',\n        'location'      => 'Wybierz miejsce',\n        'multiple'      => 'Wybierze jeden lub wiele',\n        'name'          => 'Nazwa elementu',\n        'organisation'  => 'Wybierz organizację',\n        'parent'        => 'Wybierz źródło',\n        'tag'           => 'Wybierz etykietę',\n        'template'      => 'Wybierz szablon',\n        'timeline'      => 'Wybierz historię',\n        'type'          => 'Rodzaj elementu',\n        'user'          => 'Wybierz użytkownika',\n    ],\n    'relations'         => [],\n    'remove'            => 'Usuń',\n    'reorder'           => [\n        'empty' => 'Brak elementów do zmiany kolejności.',\n    ],\n    'save'              => 'Zapisz',\n    'save_and_close'    => 'Zapisz i zamknij',\n    'save_and_copy'     => 'Zapisz i skopiuj',\n    'save_and_new'      => 'Zapisz i nowe',\n    'save_and_update'   => 'Zapisz i edytuj',\n    'save_and_view'     => 'Zapisz i pokaż',\n    'search'            => 'Szukaj',\n    'select'            => 'Wybierz',\n    'tabs'              => [\n        'abilities'     => 'Zdolności',\n        'inventory'     => 'Wyposażenie',\n        'mentions'      => 'Wzmianki',\n        'overview'      => 'Ogólne',\n        'permissions'   => 'Uprawnienia',\n        'premium'       => 'Premium',\n        'profile'       => 'Profil',\n        'reminders'     => 'Epizody',\n    ],\n    'timestamps'        => [\n        'edited'    => 'Edytowano :ago',\n    ],\n    'titles'            => [\n        'editing'   => 'Edycja :name',\n        'new'       => 'Nowy :module',\n    ],\n    'tooltips'          => [],\n    'update'            => 'Aktualizacja',\n    'users'             => [\n        'unknown'   => 'Nieznany',\n    ],\n    'view'              => 'Zobacz',\n    'visibilities'      => [\n        'admin'         => 'Administrator',\n        'admin-self'    => 'Ja i administrator',\n        'all'           => 'Wszyscy',\n        'members'       => 'Uczestnicy',\n        'self'          => 'Ja',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'customise' => 'Dostosuj pulpit',\n        'follow'    => 'Śledź',\n        'join'      => 'Dołącz',\n        'unfollow'  => 'Przestań śledzić',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Edytuj',\n            'new'   => 'Nowy pulpit',\n        ],\n        'create'        => [\n            'helper'    => 'Tworzy nowy pulpit dla :name, i pozwala określić które role mogą go zobaczyć albo dla których jest pulpitem domyślnym',\n            'success'   => 'Stworzono w kampanii nowy pulpit :name.',\n            'title'     => 'Nowy pulpit kampanii',\n        ],\n        'custom'        => [\n            'text'  => 'Edytujesz obecnie pulpit :name kampanii.',\n        ],\n        'default'       => [\n            'text'  => 'Edytujesz podstawowy pulpit kampanii.',\n            'title' => 'Pulpit podstawowy',\n        ],\n        'delete'        => [\n            'success'   => 'Usunięto pulpit :name',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Kopiuj widżety',\n            'name'          => 'Nazwa pulpitu',\n            'visibility'    => 'Widoczność',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Skopiuj widżety z pulpitu :name na ten nowy pulpit.',\n        ],\n        'pitch'         => 'Konfiguruj wiele pulpitów, z uprawnieniami dla różnych ról kampanii.',\n        'placeholders'  => [\n            'name'  => 'Nazwa pulpitu',\n        ],\n        'update'        => [\n            'success'   => 'Zaktualizowano pulpit :name.',\n            'title'     => 'Aktualizuj pulpit :name',\n        ],\n        'visibility'    => [\n            'default'   => 'Podstawowy',\n            'none'      => 'Brak',\n            'visible'   => 'Widoczny',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Śledzenie kampanii sprawi, że pojawi się w menu przełączania kampanii (lewy górny róg), pod twoimi własnymi kampaniami.',\n        'join'      => 'Kampania jest otwarta na nowych członków. Kliknij, by do niej dołączyć.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Dodaj widżet',\n            'back_to_dashboard' => 'Powrót do pulpitu',\n            'edit'              => 'Edytuj widżet',\n            'new'               => 'Nowy widżet :type',\n        ],\n        'reorder'   => [\n            'helper'    => 'Przeciągnij, by mnie przesunąć',\n            'success'   => 'Zmieniono kolejność widżetów',\n        ],\n        'title'     => 'Konfiguracja pulpitu kampanii',\n        'tutorial'  => [\n            'blog'  => 'ten wpis',\n            'text'  => 'Potrzebujesz pomocy w przygotowaniu pulpitu kampanii? Sprawdź :blog, znajdziesz w nim porady i inspiracje.',\n        ],\n    ],\n    'title'         => 'Pulpit',\n    'widgets'       => [\n        'advanced_options_boosted'  => 'Więcej opcji, na przykład wyświetlanie przypięć, zapewnia :boosted_campaing.',\n        'calendar'                  => [\n            'actions'           => [\n                'next'      => 'Zmień datę na kolejny dzień',\n                'previous'  => 'Zmień datę na poprzedni dzień',\n            ],\n            'previous_events'   => 'Poprzedni',\n            'upcoming_events'   => 'Nadchodzące',\n        ],\n        'campaign'                  => [\n            'helper'    => 'Ten widżet wyświetla nagłówek kampanii. Jest zawsze widoczny na podstawowym pulpicie.',\n        ],\n        'create'                    => [\n            'helper'            => 'Wybór rodzaju widżetu do umieszczenia na pulpicie :name.',\n            'helper-default'    => 'Wybór rodzaju widżetu do umieszczenia na pulpicie domyślnym.',\n            'success'           => 'Dodano widżet do pulpitu.',\n            'title'             => 'Nowy widżet',\n        ],\n        'delete'                    => [\n            'success'   => 'Usunięto widżet z pulpitu.',\n        ],\n        'fields'                    => [\n            'class'             => 'Klasa CSS',\n            'dashboard'         => 'Pulpit',\n            'name'              => 'Własna nazwa widżetu',\n            'optional-entity'   => 'Odnośnik do elementu',\n            'order'             => 'Kolejność',\n            'size'              => 'Rozmiar',\n            'width'             => 'Szerokość',\n        ],\n        'helpers'                   => [\n            'class'     => 'Określ własną klasę css dodaną do widżetu',\n            'filters'   => 'Kliknij by poznać dostępne opcje filtrowania.',\n        ],\n        'orders'                    => [\n            'name_asc'  => 'Nazwa rosnąco',\n            'name_desc' => 'Nazwa malejąco',\n            'oldest'    => 'Zmienione najdawniej',\n            'recent'    => 'Ostatnie zmiany',\n        ],\n        'preview'                   => [\n            'displays'  => [\n                'expand'    => 'Wpis do rozwinięcia',\n                'full'      => 'Cały wpis',\n            ],\n            'fields'    => [\n                'display'   => 'Wyświetlanie',\n            ],\n        ],\n        'random'                    => [\n            'helpers'   => [\n                'name'  => 'Możesz wskazać nazwę losowego elementu przy pomocy {name}.',\n            ],\n            'type'      => [\n                'all'   => 'Wszystkie',\n            ],\n        ],\n        'recent'                    => [\n            'advanced_filter'   => 'Filtry zaawansowane',\n            'advanced_filters'  => [\n                'mentionless'   => 'Niewzmiankujące (elementy, które nie wzmiankują żadnych innych elementów)',\n                'unmentioned'   => 'Niewzmiankowane (elementy, których nie wzmiankuje żadnej inny element)',\n            ],\n            'all-entities'      => 'Wszystkie elementy',\n            'entity-header'     => 'Używaj nagłówka elementu jako obrazu widżetu',\n            'filters'           => 'Filtry',\n            'help'              => 'Pokazuj tylko ostatni zmodyfikowany element, ale publikuj cały skrót',\n            'helpers'           => [\n                'entity-header'     => 'Jeżeli element ma obraz w nagłówku (w doładowanej kampanii), widżet będzie wyświetlał nagłówek zamiast obrazu samego elementu.',\n                'show_attributes'   => 'Wyświetla cechy elementu pod jego opisem.',\n                'show_members'      => 'Jeżeli element jest rodziną albo organizacją, wyświetla jej członków pod opisem.',\n                'show_relations'    => 'Wyświetla przypięte relacje pod opisem elementu',\n            ],\n            'show_attributes'   => 'Pokaż cechy',\n            'show_members'      => 'Pokaż członków',\n            'show_relations'    => 'Pokaż przypięte relacje',\n            'singular'          => 'Pojedynczy',\n            'tags'              => 'Filtruj listę niedawno zmienianych elementów według konkretnych etykiet.',\n            'title'             => 'Ostatnie zmiany',\n        ],\n        'tabs'                      => [\n            'advanced'  => 'Zaawanowane',\n            'setup'     => 'Ustawienia',\n        ],\n        'unmentioned'               => [\n            'title' => 'Elementy bez wzmianki',\n        ],\n        'update'                    => [\n            'success'   => 'Zmodyfikowano widżet.',\n        ],\n        'widths'                    => [\n            '0' => 'Automatyczna',\n            '12'=> 'Pełny (100%)',\n            '3' => 'Malutki (25%)',\n            '4' => 'Mały (33%)',\n            '6' => 'Połowa (50%)',\n            '8' => 'Szeroki (66%)',\n            '9' => 'Duży (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/dashboards/onboarding.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'continue'  => 'Zacznij budowę',\n        'skip'      => 'Na razie pomiń',\n    ],\n    'families'      => [\n        'varren'    => [\n            'title' => 'Ród Varren',\n        ],\n    ],\n    'fields'        => [\n        'name'  => 'Nazwa świata',\n    ],\n    'intro'         => 'Świat jest gotowy. Uczyń go swoim, a potem rozbuduj.',\n    'placeholders'  => [\n        'name'  => 'Możesz zmienić w każdej chwili',\n    ],\n    'quests'        => [\n        'crown' => [\n            'title' => 'Poszukiwanie strzaskanej korony',\n        ],\n    ],\n    'roles'         => [\n        'co-writer'     => 'Współautor',\n        'contributor'   => 'Źródło pomysłów',\n    ],\n    'selection'     => [\n        'campaign'                  => 'Kampania do gry fabularnej',\n        'campaign-description'      => 'Zarządzaj kampanią, postaciami i sesjami swojej gry fabularnej.',\n        'helper'                    => '(Twoje wybory wpłyną na zawartość demonstacyjną i układ pulpitu)',\n        'intro'                     => 'Co tworzysz?',\n        'story'                     => 'Świat będący tłem opowieści',\n        'story-description'         => 'Opisz dokładnie postacie, miejsca i chronologię wydarzeń.',\n        'title'                     => 'Rodzaj świata',\n        'worldbuilding'             => 'Projekt światotwórczy',\n        'worldbuilding-description' => 'Stwórz i zarządzaj historią, miejscami i osobami zaludniającymi twój świat.',\n    ],\n    'splash'        => 'Witaj, :name, 👋, twój świat jest gotowy.',\n    'success'       => 'Witaj! Dostosowaliśmy świat, by ułatwić ci rozpoczęcie pracy.',\n    'title'         => 'Zmieniaj świat wedle uznania',\n    'ttrpg'         => [\n        'tags'  => [\n            'npcs'  => 'BN',\n        ],\n    ],\n    'widgets'       => [\n        'active-quests' => 'Aktywne zadania',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/dashboards/setup.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Dodaj widżet',\n    ],\n    'sections'  => [\n        'switch'    => 'Przełącz na...',\n    ],\n    'tooltips'  => [\n        'add'       => 'Użyj by dodać nowy widżet na pulpicie.',\n        'switch'    => 'Użyj by przełączyć na inny pulpit.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/calendar.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetla nadchodzące epizody.',\n    'name'          => 'Kalendarz',\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/campaign.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetla nagłówek kampanii.',\n    'name'          => 'Kampania',\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/header.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetlna nagłówek tekstowy.',\n    'name'          => 'Nagłowek',\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/help.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetla na pulpicie odnośniki do pomocy i zasobów społeczności.',\n    'name'          => 'Pomoc i społeczność',\n    'title'         => 'Pomoc i społeczność',\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/onboarding.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetla listę zadań od których zaczyna się budowa świata.',\n    'name'          => 'Zaczynamy',\n    'tasks'         => [\n        'campaign'  => [\n            'name'  => 'Twój pierwszy świat jest gotowy.',\n        ],\n        'character' => [\n            'helper'    => 'Dodaje osobę zamieszkującą świat.',\n            'name'      => 'Stwórz pierwszą postać.',\n        ],\n        'invite'    => [\n            'helper'    => 'Dodaje uczestników kampanii i przypisuje im rolę.',\n            'name'      => 'Zaproś przyjaciela albo współautora.',\n        ],\n        'location'  => [\n            'helper'    => 'Uzupełnia świat o znajdujące się w nim miejsce.',\n            'name'      => 'Stwórz pierwsze miejsce.',\n        ],\n        'rename'    => [\n            'helper'    => 'Nadaje kampanii porządny tytuł.',\n            'name'      => 'Zmień nazwę świata.',\n        ],\n        'widgets'   => [\n            'helper'    => 'Dodaje albo zamienia kolejnością widżety.',\n            'name'      => 'Dostosuj pulpit.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/preview.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetla konkretny element.',\n    'name'          => 'Wybierz element',\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/random.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetla losowy element kampanii.',\n    'name'          => 'Losowy element',\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/recent.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetla listę ostatnio zmienionych elementów.',\n    'name'          => 'Zmienione elementy',\n];\n"
  },
  {
    "path": "lang/pl/dashboards/widgets/welcome.php",
    "content": "<?php\n\nreturn [\n    'description'   => 'Wyświetla na pulpicie komunikat powitalny zawierający rady i sugestie.',\n    'endings'       => [],\n    'focus'         => [\n        'text'  => 'Witaj, to właśnie ja!',\n        'title' => 'Cześć',\n    ],\n    'intros'        => [\n        '1' => 'Witaj u progu licznych nowych światów, :user! Przygotowaliśmy twoją pierwszą kampanię: znajdziesz w niej dwie przykładowe :characters i :locations. Wyświetlają się również tutaj, na pulpicie kampanii.',\n        '2' => 'By zacząć tworzyć, kliknij na wielki przycisk :new-entity (albo naciśnij :letter na klawiaturze) i wybierz :character, by powołać do życia pierwszą postać. To nic trudnego! Wszystkie postacie, miejsce i inne :entities znajdziesz w menu po lewej stronie ekranu.',\n        '3' => 'Oto pięć rad, jak używać Kanki',\n    ],\n    'name'          => 'Witaj',\n    'title'         => 'Witaj w :kanka! 🎉',\n    'tricks'        => [\n        '1'         => 'Tworząc opis, nie wpisuj ręcznie nazw innych elementów kampanii. Zamiast tego wpisz :code i trzy pierwsze litery nazwy by :mention dany element. Wszystkie wzmianki automatycznie się zaktualizują, jeżeli zmienisz nazwę elementu.',\n        '2'         => 'By zmienić nazwę kampanii, motyw albo ilustrację okładkową wybierz :world z menu bocznego, a potem opcję :edit.',\n        '3'         => 'Tajemnice rozmaitych elementów lepiej zamieszczać jako :posts niż w głównym opisie.',\n        '4'         => 'By zaprosić przyjaciół do udziału w kampanii należy wybrać pozycję :world a potem :members. Znajdziesz tam opcję tworzenia zaproszeń.',\n        '5'         => 'Możesz usunąć wiadomość powitalną i wyświetlać na tym ekranie (to znaczy - pulpicie) inne informacje. Po prostu przewiń w dół i naciśnij :button.',\n        'mention'   => 'wzmiankować',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/datagrids.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'back_to'   => 'Wróć do :name',\n    ],\n    'modes'     => [\n        'flatten'   => 'Przełącz na zbiór',\n        'grid'      => 'Przełącz na kafelki',\n        'nested'    => 'Przełącz na hierarchię',\n        'table'     => 'Przełącz na tabelę',\n    ],\n    'tooltips'  => [\n        'nested'    => 'Element ma pochodne. Kliknij na obrazek, by je wyświetlić.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'dzień',\n    'days'          => 'dni',\n    'elapsed_ago'   => ':duration temu',\n    'hour'          => 'godzina',\n    'hours'         => 'godziny',\n    'just_now'      => 'w tej chwili',\n    'minute'        => 'minuta',\n    'minutes'       => 'minuty',\n    'month'         => 'miesiąc',\n    'months'        => 'miesiące',\n    'second'        => 'sekunda',\n    'seconds'       => 'sekundy',\n    'week'          => 'tydzień',\n    'weeks'         => 'tygodnie',\n    'year'          => 'rok',\n    'years'         => 'lata',\n];\n"
  },
  {
    "path": "lang/pl/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Strona Tytułowa',\n];\n"
  },
  {
    "path": "lang/pl/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Wyniki rzutów kośćmi',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowy rzut kośćmi',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Usunięto rzut kośćmi.',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Rzucono w',\n        'parameters'    => 'Parametry',\n        'results'       => 'Wyniki',\n        'rolls'         => 'Rzuty',\n    ],\n    'hints'         => [\n        'parameters'    => 'Jak opisywać rzut kośćmi?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Wyniki',\n        ],\n    ],\n    'lists'         => [\n        'empty' => 'Twórz i zapisuj rzuty kośćmi, by stworzyć w Kance bazę ich rezultatów.',\n    ],\n    'placeholders'  => [\n        'name'          => 'Nazwa rzutu kośćmi',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Rzuć',\n        ],\n        'error'     => 'Rzut nieudany. Nie można przetworzyć parametrów.',\n        'fields'    => [\n            'creator'   => 'Rzucający',\n            'date'      => 'Data',\n            'result'    => 'Wynik',\n        ],\n        'hint'      => 'Wszystkie rzuty wykonane dla tego szablonu rzutów kośćmi.',\n        'success'   => 'Kości zostały rzucone.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Wyniki',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/emails/activity/email.php",
    "content": "<?php\n\nreturn [\n    'first' => 'Zmieniono adres email przypisany do twojego konta Kanka na :email.',\n    'title' => 'Zmiana adresu email',\n];\n"
  },
  {
    "path": "lang/pl/emails/activity/password.php",
    "content": "<?php\n\nreturn [\n    'first' => 'Twoje hasło dostępu do Kanki zostało zmienione.',\n    'help'  => 'Jeśli nie ty je zmieniłeś, skontaktuj się z nami: :email.',\n    'title' => 'Zmieniono hasło',\n];\n"
  },
  {
    "path": "lang/pl/emails/purge/first.php",
    "content": "<?php\n\nreturn [\n    'assure'            => 'Jeżeli korzystasz z konta regularnie, nie martw się - usuwamy wyłącznie konta i kampanie, które były od dłuższego czasu nieaktywne.',\n    'help'              => 'Potrzebujesz pomocy? Dołącz do serwera :discord alb napisz na adres :email.',\n    'intro_account'     => 'Piszemy by poinformować, że twoje konto zostanie usunięte za :amount dni, ponieważ twoje ostatnie logowanie odbyło się :duration miesięcy temu.',\n    'intro_campaigns'   => 'Piszemy by poinformować, że twoje konto oraz związane z nim kampanie zostaną usunięte za :amount dni, ponieważ twoje ostatnie logowanie odbyło się :duration miesięcy temu.',\n    'keep'              => 'Jeżeli chcesz zachować konto, zaloguj się na nie w ciągu najbliższych :amount dni.',\n    'title'             => 'Twoje konto w serwisie Kanka zostanie usunięte za :amount dni',\n    'warning'           => [\n        'account'   => 'Wówczas wszystkie dane związane z twoim kontem korzystającym z adresu :email zostaną trwale usunięte.',\n        'campaigns' => 'Wówczas wszystkie dane związane z twoim kontem korzystającym z adresu :email oraz poniższe kampanie zostaną trwale usunięte.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/emails/purge/second.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'To ostateczne powiadomienie, że konto w serwisie Kanka używające adresu :email zostanie usunięte w ciągu :amount dni, ponieważ nie logowano się od :duration miesięcy.',\n    'title' => 'Ostatnie ostrzeżenie: twoje konto w serwisie Kanka zostanie usunięte za :amout dni.',\n];\n"
  },
  {
    "path": "lang/pl/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'zaktualizuj dane karty.',\n    'primary'   => 'To automatyczne przypomnienie o zbliżającym się wygaśnięciu ważności karty :brand **** :last.',\n    'title'     => 'Wygaśnięcie ważności karty',\n    'valid'     => 'Jeżeli chcesz zachować subskrypcję, :action.',\n];\n"
  },
  {
    "path": "lang/pl/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'Jeżeli nie chcesz odnawiać subskrypcji, zaloguj się do swojego konta Kanki i :link.',\n    'closing'   => 'Z pozdrowieniami,',\n    'dear'      => 'Drog_ :name',\n    'link'      => 'ją anuluj',\n    'notice'    => 'Ważna informacja o odnowieniu subskrybcji:',\n    'primary'   => 'To automatyczne przypomnienie, że w dniu :date automatycznie obciążymy twoją kartę :brand **** :last płatnością za subskrypcję Kanki.',\n    'title'     => 'Doroczna płatność subskrybcji Kanki',\n    'valid'     => 'Upewnij się, że karta będzie ważna w dniu płatności.',\n];\n"
  },
  {
    "path": "lang/pl/emails/subscriptions/validation.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Weryfikacja adresu subskrypcji',\n];\n"
  },
  {
    "path": "lang/pl/emails/validation.php",
    "content": "<?php\n\nreturn [\n    'error'     => 'Nie udało się zweryfikować adresu, spróbuj ponownie.',\n    'modal'     => 'By rozpocząć subscribe musisz zweryfikować adres e-mail. Zanim przejdziesz dalej sprawdź pocztę i użyj wysłanego przez nas linka.',\n    'success'   => 'Udało się zweryfikować adres',\n];\n"
  },
  {
    "path": "lang/pl/emails/welcome/2024.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Miłego światotwórstwa, dziękujemy, że towarzyszysz nam w tej podróży,',\n    'header'    => 'Witaj na najlepszej platformie budowania kampanii, :name!',\n    'lead_1'    => 'Kankę stworzyli pasjonaci gier fabularnych by ułatwić wspólne budowanie światów i uniknąć niedoskonałości innych narzędzi.',\n    'lead_2'    => 'Tak powstała Kanka. Mamy nadzieję, że pomoże ci w organizacji kampanii i powołaniu świata do życia.',\n    'ps'        => 'PS: Jeżeli chcesz się z nami skontaktować, znajdź nas na :discord albo napisz na :emal.',\n    'what_1'    => 'By ułatwić ci start, stworzyliśmy dla ciebie pierwszą kampanię z dwiema przykładowymi postaciami i dwoma miejscami. Możesz też :start, jeżeli wolisz.',\n    'what_2'    => 'Przydadzą ci się też pewnie dodatkowe zasoby:',\n    'what_3'    => 'Nasz :kb zawiera odpowiedzi na podstawowe pytania o Kankę i twoje konto.',\n    'what_4'    => 'Ten :doc opisuje wszystko bardziej szczegółowo.',\n    'what_5'    => 'I wreszcie, :campaigns pozwolą ci sprawdzić, jak inni używają Kanki.',\n    'what_new'  => 'zacząć od zera',\n    'what_now'  => 'Co teraz?',\n    'why'       => 'Otrzymujesz ten email z powodu rejestracji na naszej stronie.',\n];\n"
  },
  {
    "path": "lang/pl/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    '2023'              => [\n        'basics'    => [\n            'text_1'    => 'Otrzymując narzędzie tak obszerne, jak Kanka, czasem trudno zrozumieć, jak zacząć i co robić. Odpowiedzi na najbardziej podstawowe pytania znajdziesz w naszym :kb, a bardziej rozbudowaną pomoc w :doc.',\n            'title'     => 'Podstawy',\n        ],\n        'chat'      => [\n            'text_1'    => 'Lubimy słuchać użytkowników. Najłatwiej spotkać nas na :discord: tam spotkasz licznych aktywnych członków społeczności, osoby z zespołu oraz twórców Kanki - wszyscy chętnie odpowiedzą na twoje pytania. Możesz też do nas napisać na :email.',\n            'title'     => 'Chcesz pogadać?',\n        ],\n        'intro'     => [\n            'header'    => 'Witaj pośród światotwórców, :name!',\n            'link'      => 'Ruszaj do swojego śwata!',\n            'text_1'    => 'Witaj pośród światotwórców, :name! Wspólnota krąży w naszych żyłach i cieszymy cię, widząc cię pośród nas. Kanka to dzieło pasjonatów gier fabularnych, którym zamarzyła się prosta i wspólnotowa platforma tworzenia światów, posiadająca przy tym wszystkie ważne funkcje.',\n            'text_2'    => 'Przygotowaliśmy dla ciebie pierwszą kampanię, zawierającą dwie przykładowe postacie i dwa miejsca - żeby łatwiej ci było zacząć.',\n        ],\n        'preview'   => 'Zostań członkiem wspólnoty światotwórców, :name!',\n    ],\n    'header'            => ':name, witaj na platformie Kanka!',\n    'header_sub'        => 'Gratulujemy, oto za tobą pierwszy krok ku projektowaniu własnych światów za pomocą serwisu :kanka.',\n    'pricing'           => 'cena',\n    'section_1'         => 'Co teraz?',\n    'section_11'        => 'Twórz swój świat,',\n    'section_2'         => 'Najważniejszą pomocą posłuży ci :discord, gdzie znajdziesz wielu zaangażowanych użytkowników, zespół wprowadzający oraz twórcę Kanki - wszyscy chętnie odpowiedzą na pytania.',\n    'section_4'         => 'Na naszym :youtube znajdziesz filmy przedstawiające podstawy. Nie odejmują jeszcze wszystkich tematów, ale regularnie dodajemy nowe!',\n    'section_4_v2'      => 'Nasza :knowledge-base zawiera odpowiedzi na najpopularniejsze pytania. Dokładniejsze i bardziej kompletne objaśnienia prezentuje natomiast :documentation!',\n    'section_6'         => 'kontakt',\n    'section_7'         => 'Jeżeli nie ma tam odpowiedzi na twoje pytania, albo chcesz po prostu pogadać, szukaj nasz w serwisie :facebook albo napisz na nasz :email. Jesteśmy wprawdzie maleńkim zespołem dwóch kumpli, ale staramy się odpowiadać na każdy otrzymany email, więc nie wahaj się pisać!',\n    'section_8'         => 'Jeszcze jedno',\n    'section_9_v2'      => 'Wszystkie funkcje Kanki są i zawsze będą darmowe - stawiamy to za punkt honoru. Ale jeżeli chcesz wesprzeć projekt, możesz go zasubskrybować. Otrzymasz dostęp do kilku dodatkowych funkcji oraz naszą dozgonną wdzięczność. Więcej dowiesz się ze strony :pricing.',\n    'social_account'    => 'Jeżeli wciąż nie możesz zalogować się na konto, przypominamy dyskretnie, że logujesz się za pomocą :provider. Możesz to zmienić w ustawieniach konta.',\n    'title'             => 'Jak zacząć używać Kanki',\n];\n"
  },
  {
    "path": "lang/pl/entities/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/pl/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Dodaj zdolności',\n        'reset' => 'Odśwież użycia zdolności',\n        'sync'  => 'Dodaj rasowe',\n    ],\n    'charges'   => [\n        'left'  => 'Pozostało :amount',\n    ],\n    'create'    => [\n        'helper'            => 'Dodaje jedną lub więcej zdolności do :name.',\n        'success'           => 'Zdolność :ability dodano do :entity',\n        'success_multiple'  => 'Zdolności :ability dodano do :entity',\n        'title'             => 'Dodaj zdolności dla :name',\n    ],\n    'fields'    => [\n        'note'      => 'Opis',\n        'position'  => 'Kolejność',\n    ],\n    'groups'    => [\n        'unorganised'   => 'Nieprzypisane',\n    ],\n    'helpers'   => [\n        'note'      => 'W tym polu możesz oznaczać za pomocą zaawansowanych wzmianek elementy (np. :code) oraz cechy elementów (np. :attr).',\n        'recharge'  => 'Odśwież wszystkie wykorzystane użycia zdolności.',\n        'sync'      => 'Importuje zdolności związane z rasą postaci.',\n    ],\n    'import'    => [\n        'errors'            => [\n            'no_race'       => 'Ta postać nie ma rasy.',\n            'not_character' => 'Ten element nie jest postacią.',\n        ],\n        'helper'            => 'Dołącz zdolności następujących ras do których :name należy:',\n        'no_abilities'      => 'Obecnie nie ma możliwych do zaimportowania zdolności ras do których należy :name.',\n        'race_abilities'    => '{1} :name (:count ability)|[2,*] :name (:count abilities)',\n        'success'           => 'Importowano {1} :count zdolność.|Importowano [2,*] :count zdolności.',\n    ],\n    'recharge'  => [\n        'success'   => 'Odświeżono wszystkie użycia.',\n    ],\n    'reorder'   => [\n        'parentless'    => 'Bez źródła',\n        'success'       => 'Zmieniono kolejność zdolności.',\n    ],\n    'show'      => [\n        'helper'    => 'Dodaj zdolności, które posiada ten element. Możesz w każdej chwili zmienić ich widoczność albo je usunąć. Zdolności wywodzące się z tego samego źródła wyświetlane są jako kafelki.',\n        'reorder'   => 'Zmień kolejność',\n        'title'     => 'Zdolności elementu :name',\n    ],\n    'types'     => [\n        'unorganised'   => 'Zdolności podzielone są ze względu na źródło - pozostałe wymieniono niżej.',\n    ],\n    'update'    => [\n        'success'   => 'Zmieniono zdolność :ability elementu.',\n        'title'     => 'Zdolność elementu :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'archive'           => [\n        'success'   => 'Zarchiwizowano :name.',\n        'title'     => 'Archiwizuj',\n    ],\n    'convert'           => 'Zmień moduł',\n    'copy-campaign'     => 'Kopiuj do kampanii',\n    'json-export'       => 'Eksport JSON',\n    'markdown-export'   => 'Eksport Markdown',\n    'templates'         => [],\n    'tooltips'          => [\n        'edit'  => 'Pozwala modyfikować element',\n    ],\n    'transfer'          => 'Przenieś do kampanii',\n    'unarchive'         => [\n        'success'   => 'Przywrócono :name z archiwum.',\n        'title'     => 'Przywróć',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Dodaj alias',\n    ],\n    'create'        => [\n        'helper'    => 'Tworzy alias dla :name, dzięki czemu będzie widoczny podczas globalnego wyszukiwania oraz poprzez wzmianki :code.',\n        'success'   => 'Dodano alias :name do elementu :entity.',\n        'title'     => 'Dodaj alias do :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Usunięto alias :name.',\n    ],\n    'fields'        => [\n        'name'  => 'Nazwa',\n    ],\n    'helpers'       => [\n        'primary'   => 'Wyposażenie elementu w jeden lub więcej aliasów pozwoli wyszukiwać go za pomocą globalnego wyszukiwania (górny pasek) oraz przez wzmianki.',\n    ],\n    'limit'         => 'Kampania osiągnęła limit dostępnych aliasów. By go zwiększyć, odblokuj funkcje premium.',\n    'pitch'         => 'Możliwość nadawania elementom aliasów pozwala łatwo je wyszukiwać i tworzyć wzmianki.',\n    'placeholders'  => [\n        'name'  => 'Nowy alias',\n    ],\n    'unboosted'     => [],\n    'update'        => [\n        'success'   => 'Zmieniono alias :name elementu :entity.',\n        'title'     => 'Zmień alias :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'alias' => 'Alias',\n        'file'  => 'Plik',\n        'link'  => 'Odnośnik',\n    ],\n    'copy_alias'    => [\n        'success'   => 'Wzmiankowanie aliasu skopiowane do schowka.',\n    ],\n    'show'          => [\n        'title' => 'Zasoby elementu :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'load'          => 'Wczytaj',\n        'manage'        => 'Zarządzaj',\n        'more'          => 'Więcej opcji',\n        'remove_all'    => 'Usuń wszystko',\n        'save_and_edit' => 'Zastosuj i edytuj',\n        'save_and_story'=> 'Zastosuj i zobacz',\n        'show_hidden'   => 'Pokaż ukryte cechy',\n        'toggle_privacy'=> 'Prywatne/Publiczne',\n    ],\n    'errors'        => [\n        'api'                   => 'Niewłaściwe dane',\n        'loop'                  => 'W obliczeniu tej cechy występuje nie kończąca się pętla!',\n        'no_attribute_selected' => 'Wybierz najpierw jedną lub więcej cech.',\n        'too_many_v2'           => 'Maksymalna liczba pól (:count/max). Skasuj jakieś cechy przed dodaniem nowych.',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Szablony społeczności',\n        'is_private'            => 'Szablony Tajne',\n        'is_star'               => 'Przypięte',\n        'preferences'           => 'Ustawienia',\n        'value'                 => 'Wartość',\n    ],\n    'filters'       => [\n        'name'  => 'Nazwa cechy',\n        'value' => 'Wartość cechy',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Czy na pewno chcesz usunąć cechy tego elementu?',\n        'is_private'    => 'Tylko członkowie posiadający rolę :admin-role będą widzieć cechy elementu.',\n        'setup'         => 'Element może posiadać cechy, na przykład Punkty Wytrzymałości albo Inteligencję. Cechę możesz ustalić i dodać ręcznie klikając na :manage albo zastosować szablon.',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Zaktualizowano cechy :entity',\n        'title'     => 'Cechy :name',\n    ],\n    'labels'        => [\n        'checkbox'  => 'Nazwa pola wyboru',\n        'name'      => 'Nazwa cechy',\n        'section'   => 'Nazwa sekcji',\n        'value'     => 'Wartość cechy',\n    ],\n    'live'          => [\n        'success'   => 'Zmieniono cechę :attribute.',\n        'title'     => 'Zmiana cechy :attribute.',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Liczba zwycięstw, Skala Wyzwania, Inicjatywa, Populacja',\n        'block'     => 'Nazwa bloku',\n        'checkbox'  => 'Nazwa pola wyboru',\n        'icon'      => [\n            'class' => 'Klasa FontAwesome lub RPG Awesome: fas fa-users',\n            'name'  => 'Nazwa ikony',\n        ],\n        'number'    => 'Rodzaj liczby',\n        'random'    => [\n            'name'  => 'Nazwa cechy',\n            'value' => '1-100 lub lista wartości rozdzielonych przecinkiem',\n        ],\n        'section'   => 'Nazwa sekcji',\n        'value'     => 'Wartość cechy',\n    ],\n    'ranges'        => [\n        'text'  => 'Dostępne opcje: :options',\n    ],\n    'sections'      => [\n        'unorganised'   => 'Nieprzypisane',\n    ],\n    'show'          => [\n        'hidden'    => 'Ukryte cechy',\n        'title'     => 'Cechy elementu :name',\n    ],\n    'template'      => [\n        'load'      => [\n            'success'   => 'Wczytano szablon',\n            'title'     => 'Wczytaj szablon',\n        ],\n        'pitch'     => 'Załaduj cechy z szablonu albo dodatków zainstalowanych za pomocą :plugin.',\n        'success'   => 'Zastosowano szablon cech :name dla :entity',\n        'title'     => 'Zastosuj szablon cech dla :name',\n    ],\n    'title'         => 'Cechy',\n    'toasts'        => [\n        'bulk_deleted'  => 'Usunięto cechy',\n        'bulk_privacy'  => 'Zmieniono ustawienia prywatności',\n        'lock'          => 'Zablokowano',\n        'pin'           => 'Przypięto',\n        'unlock'        => 'Odblokowano',\n        'unpin'         => 'Odpięto',\n    ],\n    'tutorials'     => [],\n    'types'         => [\n        'attribute' => 'Cecha',\n        'block'     => 'Blok',\n        'checkbox'  => 'Pole wyboru',\n        'icon'      => 'Ikona',\n        'number'    => 'Liczba',\n        'random'    => 'Losowy',\n        'section'   => 'Sekcja',\n        'text'      => 'Kilka wierszy',\n    ],\n    'update'        => [\n        'success'   => 'Zaktualizowano cechy elementu :entity.',\n    ],\n    'visibility'    => [\n        'entry'     => 'Cecha wyświetlana na stronie głównej elementu.',\n        'private'   => 'Cecha widoczna wyłącznie dla posiadaczy roli \"administrator\".',\n        'public'    => 'Cecha widoczna dla wszystkich.',\n        'tab'       => 'Cecha wyświetlana wyłącznie w zakładce Cechy.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/children.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Pochodne',\n];\n"
  },
  {
    "path": "lang/pl/entities/events.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Tworzy epizod łączący :name z kalendarzem.',\n    ],\n    'fields'    => [\n        'type'  => 'Rodzaj epizodu',\n    ],\n    'helpers'   => [\n        'characters'    => 'Ustawienie rodzaju jako daty narodzin albo śmieci tej postaci automatycznie wyliczy jej wiek. :more.',\n        'founding'      => 'Ustawienie typu :type automatycznie przeliczy wiek elementu od chwili powstania.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Dodaj epizod',\n        ],\n        'title'     => 'Epizody :name',\n    ],\n    'types'     => [\n        'birth'     => 'Narodziny',\n        'birthday'  => 'Urodziny',\n        'death'     => 'Śmierć',\n        'founded'   => 'Powstanie',\n        'primary'   => 'Główna',\n    ],\n    'years-ago' => '{1} :count rok temu|[2,3,4] :count lata temu|[5,*] :count lat temu',\n];\n"
  },
  {
    "path": "lang/pl/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [\n        'max'       => [\n            'helper'    => 'Nie możesz dołączać nowych plików, póki któregoś nie usuniesz.',\n            'limit'     => 'Element osiągnął limit dołączonych plików.',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Osiągnięto limit :limit plików dla tego elementu.',\n            'premium'   => 'Ulepsz kampanię do poziomu premium by dodawać nieograniczoną liczbę plików i zyskać większą swobodę twórczą.',\n            'upgrade'   => 'Ulepsz kampanię do poziomu premium by zwiększyć limit plików do :limit i zyskać większą swobodę twórczą.',\n        ],\n    ],\n    'create'            => [\n        'helper'            => 'Dodaje plik do :name. Zostanie doliczony do limitu pojemności galerii.',\n        'success_plural'    => '{1} Dodano plik :name.|[2,4] Dodano :count pliki.|[5,*] Dodano :count plików.',\n        'title'             => 'Nowy plik elementu :entity',\n    ],\n    'destroy'           => [\n        'success'   => 'Usunięto plik :file.',\n    ],\n    'fields'            => [\n        'file'  => 'Plik',\n        'files' => 'Pliki',\n        'name'  => 'Nazwa pliku',\n    ],\n    'max'               => [\n        'title' => 'Osiągnięto limit',\n    ],\n    'update'            => [\n        'success'   => 'Zaktualizowano plik :file.',\n        'title'     => 'Zamieszanie plików elementu',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'               => [\n        'change_focus'      => 'Zmień punkt centralny',\n        'change_visibility' => 'Zmień widoczność',\n        'replace_image'     => 'Zamień obraz',\n        'save-replace'      => 'Zamień obraz',\n        'save_focus'        => 'Zapisz punkt centralny',\n        'view'              => 'Zobacz obraz',\n    ],\n    'call-to-action'        => 'Kliknij na obraz elementu by ustawić centralny punkt wyświetlania, zamiast korzystać z wybranego automatycznie.',\n    'focus'                 => [\n        'breadcrumb'    => 'Punkt centralny',\n        'helper'        => 'Kliknij na obraz by wskazać punkt centralny. Kliknij na punkt centralny, by go usunąć.',\n        'panel_title'   => 'Punkt centralny',\n        'success'       => 'Zmieniono punkt centralny.',\n        'title'         => 'Punkt centralny obrazu elementu :name',\n        'unboosted'     => 'Punkt centalny można ustawiać tylko w :boosted-campaigns',\n        'warning'       => 'Wszystkie elementy używające tego samego obrazu z :gallery stosują wspólny punkt centralny.',\n    ],\n    'gallery_permissions'   => [\n        'admin'     => 'Ten obraz widzą tylko uczestnicy kampanii posiadający rolę :admin.',\n        'adminself' => 'Ten obraz widzi tylko :creator i uczestnicy kampanii posiadający rolę :admin.',\n        'member'    => 'Ten obraz widzą tylko uczestniczy kampanii.',\n        'self'      => 'Ten galerii widzisz wyłącznie ty.',\n    ],\n    'replace'               => [\n        'breadcrumb'    => 'Zmiana obrazu',\n        'panel_title'   => 'Zmiana obrazu elementu',\n        'success'       => 'Zmieniono obraz.',\n        'title'         => 'Zmiana obrazu elementu :name',\n    ],\n    'visibility'            => [\n        'helper'    => 'Zmień widoczność obrazu w galerii, by określić kto go może wyświetlić.',\n        'updated'   => 'Zmieniono widoczność obrazu.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'copy_from_entity'  => 'Kopiuj z innego elementu',\n        'copy_inventory'    => 'Kopiuj wyposażenie',\n        'generate'          => 'Generuj',\n        'multiple'          => 'Dodaj przedmioty',\n    ],\n    'copy'              => [\n        'helper'    => 'Kopiuje całe wyposażenie elementu do :name.',\n    ],\n    'create'            => [\n        'helper'        => 'Dodaje przedmiot do wyposażenia :name. Można też użyć przedmiotu już istniejącego w kampanii.',\n        'success'       => 'Dodano :item do elementu :entity.',\n        'success_bulk'  => '{0} Nie dodano przedmiotów do wyposażenia :entity.|{1} Dodano :count przedmiot do wyposażenia :entity.|[2,4] Dodano :count przedmioty do wyposażenia :entity.|5,] Dodano :count przedmiotów do wyposażenia :entity.',\n        'title'         => 'Dodaj przedmiot dla :name',\n    ],\n    'default_position'  => 'Nieprzypisane',\n    'destroy'           => [\n        'success'           => 'Usunięto przedmiot :item elementu :entity.',\n        'success_position'  => 'Usunięto przedmioty umieszczone w :position elementu :entity.',\n    ],\n    'fields'            => [\n        'amount'                => 'Ilość',\n        'copy_entity_entry_v2'  => 'Użyj opisu elementu',\n        'description'           => 'Opis',\n        'is_equipped'           => 'W użyciu',\n        'item_amount'           => 'Liczba przedmiotów',\n        'match_all'             => 'Użyj wszystkich etykiet',\n        'name'                  => 'Nazwa',\n        'position'              => 'Umiejscowienie',\n        'qty'                   => 'Ilość',\n        'replace'               => 'Zastąp wyposażenie',\n    ],\n    'generate'          => [\n        'helper'    => 'Generuje wyposażenie dla :name w oparciu o przedmioty już używane w kampanii.',\n        'title'     => 'Generowanie wyposażenia',\n    ],\n    'helpers'           => [\n        'amount'                => 'Liczba przedmiotów',\n        'copy_entity_entry_v2'  => 'Wyświetla główny opis elementu zamiast lokalnego.',\n        'description'           => 'Dodaj lokalny opis przedmiotu',\n        'is_equipped'           => 'Oznacza przedmioty, których element używa.',\n        'name'                  => 'Nazwij przedmiot. To konieczne, jeśli nie wybrano istniejącego obiektu.',\n        'replace'               => 'Zastępuje obecne wyposażenie wygenerowanym',\n    ],\n    'placeholders'      => [\n        'amount'        => 'Dowolna ilość',\n        'description'   => 'Używany, uszkodzony, przystosowany',\n        'name'          => 'Wymagana jeżeli nie wybrano przedmiotu z listy',\n        'position'      => 'Pod ręką, w plecaku, w skrzyni, w banku',\n    ],\n    'show'              => [\n        'helper'    => 'Elementom można przypisywać przedmioty, tworząc ich wyposażenie.',\n        'title'     => 'Wyposażenie elementu :name',\n        'unsorted'  => 'Nieposortowanie',\n    ],\n    'togglers'          => [\n        'hide'  => [\n            'price'     => 'Ukryj cenę',\n            'quantity'  => 'Ukryj ilość',\n            'size'      => 'Ukryj rozmiar',\n            'weight'    => 'Ukryj wagę',\n        ],\n        'show'  => [\n            'price'     => 'Pokaż cenę',\n            'quantity'  => 'Pokaż ilość',\n            'size'      => 'Pokaż rozmiar',\n            'weight'    => 'Pokaż wagę',\n        ],\n    ],\n    'tooltips'          => [\n        'equipped'  => 'Przedmiot jest w użyciu.',\n    ],\n    'tutorials'         => [\n        'all'   => 'Śledzi, co :name posiada, przechowuje albo sprzedaje, dodając to do jego wyposażenia.',\n    ],\n    'update'            => [\n        'success'   => 'Zaktualizowano przedmiot :item elementu :entity',\n        'title'     => 'Zaktualizowano przedmiot u :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Dodaj odnośnik',\n    ],\n    'call-to-action'    => 'Dodaj odnośnik do zasobów zewnętrznych, na przykład DnDBeyond. Zostanie wyświetlony bezpośrednio w opisie elementu.',\n    'create'            => [\n        'helper'    => 'Dodaje do :name odnośnik prowadzący na zewnątrz, na przykład do DnDBeyond.',\n        'success'   => 'Dodano odnośnik :name do elementu :entity.',\n        'title'     => 'Dodaj odnośnik do :name',\n    ],\n    'destroy'           => [\n        'success'   => 'Usunięto odnośnik :name z elementu :entity.',\n    ],\n    'fields'            => [\n        'icon'      => 'Ikona',\n        'name'      => 'Nazwa',\n        'position'  => 'Kolejność',\n        'url'       => 'URL',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'Tak, na pewno',\n            'trust'     => 'Nie pytaj ponownie',\n        ],\n        'description'   => 'Ten odnośnik prowadzi do :link. Czy na pewno chcesz tam trafić?',\n        'title'         => 'Opuszczasz Kankę',\n    ],\n    'helpers'           => [\n        'icon'      => 'Możesz dostosować ikonę wyświetlaną przy odnośniku. Użyj dowolnej ikony z :fontawesome albo zostaw to pole puste, by wyświetlać ikonę domyślną.',\n        'parent'    => 'Wyświetla skrót po tym elemencie w menu bocznym, a nie w sekcji \"Skróty\".',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'W doładowanych kampaniach można dodawać elementom odnośniki do stron zewnętrznych.',\n        'title'     => 'Odnośniki elementu :name',\n    ],\n    'unboosted'         => [],\n    'update'            => [\n        'success'   => 'Zaktualizowano odnośnik :name dla elementu :entity.',\n        'title'     => 'Aktualizacja odnośnika elementu :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'        => 'Stworzono',\n        'create_post'   => 'Stworzono komentarz \":post\"',\n        'delete'        => 'Usunięto',\n        'delete_post'   => 'Usunięto komentarz',\n        'reorder_post'  => 'Zmieniono kolejność komentarzy',\n        'restore'       => 'Przywrócono',\n        'reveal'        => 'Pokaż szczegóły',\n        'update'        => 'Zmieniono',\n        'update_post'   => 'Zmieniono komentarz \"post\"',\n        'view'          => 'Zobacz zmiany',\n    ],\n    'call-to-action'    => 'Pełen dziennik zmian z ostatnich :amount dni dostępny jest w kampaniach turbodoładowanych.',\n    'fields'            => [\n        'action'    => 'Działanie',\n        'date'      => 'Data',\n    ],\n    'filters'           => [\n        'keywords'  => 'Słowa kluczowe',\n    ],\n    'impersonated'      => 'Na konto zalogowano :name',\n    'none'              => 'Brak',\n    'show'              => [\n        'title' => 'Rejestr Elementu :name',\n    ],\n    'tooltips'          => [\n        'post'  => 'Przejdź do komentarza',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Ten element oznaczono na następujących mapach.',\n    'title'     => ':name na mapach',\n];\n"
  },
  {
    "path": "lang/pl/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Nazwa elementu',\n        'type'      => 'Rodzaj',\n    ],\n    'helper'            => 'Poniżej znajduje się lista elementów, w których opisie znajduje się wzmianka o tym elemencie.',\n    'mentioned_in_v2'   => 'Ten element wzmiankowano w opisie :count elementów, notek albo kampanii. :more.',\n    'see_more'          => 'Szczegóły',\n    'show'              => [\n        'title' => 'Wzmianki o elemencie :name',\n    ],\n    'title'             => 'Wzmianki o elemencie',\n];\n"
  },
  {
    "path": "lang/pl/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'      => 'Kopiuj',\n        'transfer'  => 'Przenieś',\n    ],\n    'errors'        => [\n        'permission'        => 'Nie możesz tworzyć elementów tego typu w kampanii docelowej.',\n        'permission_update' => 'Nie masz uprawień, by przenieś ten element.',\n        'same_campaign'     => 'Musisz wybrać kampanię, do której element ma być przeniesiony.',\n        'unknown_campaign'  => 'Nieznana kampania.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Kampania docelowa',\n        'copy'          => 'Skopiuj',\n        'select_one'    => 'Wybierz kampanię',\n    ],\n    'helpers'       => [\n        'copy'  => 'Stwórz kopię elementu ze wskazanej kampanii.',\n    ],\n    'panel'         => [\n        'description'           => 'Wybierz kampanię do której element ma zostać przeniesiony albo skopiowany.',\n        'description_bulk_copy' => 'Wybierz kampanię, do której chcesz skopiować wybrane elementy.',\n        'title'                 => 'Przenieś lub skopiuj element do innej kampanii.',\n    ],\n    'success'       => 'Przeniesiono element :name.',\n    'success_copy'  => 'Skopiowano element :name.',\n    'title'         => 'Przenoszenie elementu :name',\n    'warnings'      => [\n        'custom'    => 'Ten element nie jest częścią modułu domyślnego, ale własnego, stworzonego w tej kampanii. W kampanii docelowej stanie się elementem Notatek.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Nowy komentarz',\n        'add_role'  => 'Dodaj rolę',\n        'add_user'  => 'Dodaj użytkownika',\n    ],\n    'collapsed'     => [\n        'closed'    => 'Komentarz zwinięty, wyświetlany jest nagłówek',\n        'open'      => 'Komentarz rozwinięty',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Kopiuj wzmiankę zaawansowaną',\n        'copy_with_name'    => 'Kopiuj wzmiankę zaawansowaną z tytułem wpisu',\n        'success'           => 'Wzmianka zaawansowana skopiowana do schowka',\n    ],\n    'create'        => [\n        'success'   => 'Dodano komentarz :name do elementu :entity.',\n    ],\n    'destroy'       => [\n        'success'   => 'Usunięto komentarz :name do elementu :entity.',\n    ],\n    'edit'          => [\n        'success'   => 'Zmieniono komentarz :name do elementu :entity.',\n    ],\n    'fields'        => [\n        'creator'   => 'Twórca',\n        'display'   => 'Wyświetlanie',\n        'name'      => 'Nazwa',\n        'position'  => 'Ustawienie',\n    ],\n    'footer'        => [\n        'created'   => 'Stworzony przez :user dnia :date',\n        'updated'   => 'Zmieniony przez :user dnia :date',\n    ],\n    'hint'          => 'Komentarze to informacje, które nie mieszczą się w zwykłych polach opisu elementu albo które powinny pozostać tajne.',\n    'hints'         => [\n        'reorder'   => 'Możesz zmieniać kolejność komentarzy po kliknięciu na ikonę :icon obok pozycji \"historia\" w menu elementu',\n    ],\n    'index'         => [],\n    'move'          => [\n        'copy'          => 'Skopiuj do wskazanego elementu',\n        'copy_success'  => 'Skopiowano komentarz :name do elementu :entity.',\n        'copy_title'    => 'Zachowaj kopię',\n        'description'   => 'Wybierz element do którego chcesz przenieść albo skopiować ten komentarz.',\n        'entity'        => 'Wskazany element',\n        'move_success'  => 'Przeniesiono komentarz :name do elementu :entity.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nazwa uwagi, spostrzeżenia lub komentarza',\n    ],\n    'show'          => [\n        'advanced'  => 'Uprawnienia zaawansowane',\n        'title'     => 'Komentarz do elementu :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'Zwinięte',\n        'expanded'  => 'Rozwinięte',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/pl/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'Ten element jest tajny. Wprawdzie można ustawiać dla niego indywidualne uprawnienia, ale póki nie zostanie ujawniony, będą ignorowane, a element będzie widoczny tylko dla administratorów kampanii.',\n        'warning'   => 'Uwaga',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'Ten element mogą zobaczyć tylko administratorzy kampanii, i nikt inny.',\n        'manage'            => 'Zarządzaj uprawnieniami',\n        'screen-reader'     => 'Otwórz ustawienia prywatności',\n        'success'           => [\n            'private'   => 'Element :entity jest ukryty.',\n            'public'    => 'Element :entity jest widoczny.',\n        ],\n        'title'             => 'Uprawnienia',\n        'viewable-by'       => 'Widoczny dla',\n    ],\n    'toggle'    => [\n        'label'     => 'Tajność elementu',\n        'private'   => [\n            'description'   => 'Widoczny tylko dla posiadaczy roli :admin.',\n            'title'         => 'Tajny',\n        ],\n        'public'    => [\n            'description'   => 'Widoczny dla poniższych ról i uczestników',\n            'title'         => 'Jawny',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Odnośniki',\n    'title' => 'Przypięte',\n];\n"
  },
  {
    "path": "lang/pl/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Edytuj profil',\n    ],\n    'history'   => 'Historia',\n    'show'      => [\n        'tab_name'  => 'Profil',\n        'title'     => 'Profil elementu :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Ten element jest częścią następujących zadań.',\n    'title'     => 'Zadania elementu :name',\n];\n"
  },
  {
    "path": "lang/pl/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Wizualizacja relacji',\n        'mode-table'    => 'Tabela relacji i powiązań',\n    ],\n    'bulk'              => [\n        'delete'    => '{1} Usunięto :count relację.|[2,3,4] Usunięto :count relacje.|[5,*] Usunięto :count relacji.',\n        'fields'    => [\n            'delete_mirrored'   => 'Usuń obustronnie',\n            'unmirror'          => 'Rozwiąż obustronność',\n            'update_mirrored'   => 'Aktualizuj obustronnie',\n        ],\n        'helpers'   => [\n            'delete_mirrored'   => 'Usuwa relacje obu stron',\n            'unmirror'          => 'Rozwiązuje obustronność relacji',\n            'update_mirrored'   => 'Aktualizuje relacje obu stron.',\n        ],\n        'success'   => [\n            'editing'           => '{1} Zmienono :count relację.|[2,3,4] Zmienono :count relacje.|[5,*] Zmienono :count relacji.',\n            'editing_partial'   => '{1} Zmienono :count/:total relację.|[2,3,4] Zmienono :count/:total relacje.|[5,*] Zmienono :count/:total relacji.',\n        ],\n    ],\n    'call-to-action'    => 'Zobacz rozkład rozmaitych relacji, łączących elementy kampanii.',\n    'connections'       => [\n        'map_point'         => 'Punkt na mapie',\n        'mention'           => 'Wzmianka',\n        'quest_element'     => 'Część zadania',\n        'timeline_element'  => 'Część historii',\n    ],\n    'create'            => [\n        'helper'        => 'Łączy :name z jednym lub kilkoma innymi elementami',\n        'new_title'     => 'Nowa relacja',\n        'success_bulk'  => '{1} Dodano :count relacji do :entity.|[2,4] Dodano :count relacje do :entity.|[5,*] Dodano :count relacji do :entity.',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'Te elementy łączy relacja obustronna. Wybór tej opcji usunie obydwie strony relacji.',\n        'option'    => 'Usuń relację obustronną.',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'Usunie również drugą stronę relacji. Tej akcji nie można cofnąć.',\n        'success'   => 'Usunięto relację :target elementu :entity.',\n    ],\n    'fields'            => [\n        'attitude'  => 'Nastawienie',\n        'is_pinned' => 'Przypięta',\n        'owner'     => 'Źródło',\n        'target'    => 'Obiekt',\n        'targets'   => 'Elementy obiektu',\n        'two_way'   => 'Stwórz relację obustronną',\n        'unmirror'  => 'Zmień w relację jednostronną',\n    ],\n    'filters'           => [\n        'connection'    => 'Rodzaj relacji',\n        'name'          => 'Cel relacji',\n    ],\n    'helper'            => 'Ustalaj relacje między elementami, określając ich rodzaj i widoczność. Relacje można przypinać do opisu elementów.',\n    'helpers'           => [\n        'description'   => 'Opisuje charakter relacji między dwoma elementami.',\n        'no_relations'  => 'Element nie jest obecnie związany z żadnym innym elementem tej kampanii.',\n    ],\n    'hints'             => [\n        'attitude'  => 'Pole opcjonalne, pozwalająca określić kolejność wyświetlania relacji, w porządku malejącym.',\n        'two_way'   => 'Jeżeli wybierzesz relację obustronną, taka sama relacja zostanie stworzona dla obiektu. Jeżeli potem zmodyfikujesz relację dla jednej strony, druga nie zostanie zaktualizowana.',\n    ],\n    'index'             => [\n        'title' => 'Relacje',\n    ],\n    'options'           => [\n        'mentions'          => 'Relacje + związki + wzmianki',\n        'only_relations'    => 'Tylko relacje bezpośrednie',\n        'related'           => 'Relacje + związki',\n        'relations'         => 'Relacje',\n        'show'              => 'Pokaż',\n    ],\n    'panels'            => [\n        'related'   => 'Związki',\n    ],\n    'placeholders'      => [\n        'attitude'  => '-100 do 100, gdzie 100 to bardzo pozytywny stosunek',\n    ],\n    'show'              => [\n        'title' => 'Relacje elementu :name',\n    ],\n    'types'             => [\n        'family_member'         => 'Członek rodziny',\n        'organisation_member'   => 'Członek organizacji',\n    ],\n    'update'            => [\n        'success'   => 'Zaktualizowano relację :target z elementem :entity.',\n        'title'     => 'Zaktualizuj relacje dla :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/reminders.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'       => 'Połącz z kalendarzem',\n        'remove'    => 'Usuń epizod',\n    ],\n    'helpers'   => [\n        'pitch' => 'Pozwala zignorować prawdziwy kalendarz i połączyć element z fikcyjnym kalendarzem twojego świata, dla zwiększenia immersji.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'      => 'Zwiń wszystkie',\n        'expand_all'        => 'Rozwiń wszystkie',\n        'load_more'         => 'Załaduj więcej',\n        'login_for_more'    => 'Zaloguj się, by zobaczyć kolejne wpisy',\n    ],\n    'reorder'   => [\n        'helper'        => 'Przeciągaj komentarze by zmienić ich kolejność na stronie z opisem elementu',\n        'icon_tooltip'  => 'Zmień kolejność',\n        'panel_title'   => 'Zmiana kolejności',\n        'save'          => 'Zapisz nową kolejność',\n        'success'       => 'Zmieniono kolejność.',\n    ],\n    'update'    => [\n        'title' => 'Aktualizacja elementu :entity',\n    ],\n    'warning'   => [],\n];\n"
  },
  {
    "path": "lang/pl/entities/tags.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Dodaje albo usuwa etykiety :name.',\n        'title'     => 'Etykietowanie',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Poniżej wyświetlono historie tego elementu.',\n    'show'      => [\n        'title' => 'Historie elementu :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/entities/tooltips.php",
    "content": "<?php\n\nreturn [\n    'formatting'    => 'Ubsługiwany HTML: tekst (:text), struktura (:layout), listy/tabele oraz grafiki.',\n    'helper'        => 'Zastępuje domyślny, generowany automatycznie tekst, wyświetlany gdy kursor wskazuje ten element.',\n    'label'         => 'Zajawka',\n    'placeholder'   => 'Opisz krótko i zwięźle element.',\n    'premium'       => 'Odblokuj możliwość tworzenia własnych zajawek w :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/pl/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'convert'   => 'Zmień moduł',\n    ],\n    'bulk'          => [\n        'errors'    => [\n            'unknown_type'  => 'Nieznany lub niewłaściwy rodzaj elementu.',\n        ],\n        'success'   => '{1} zmieniono rodzaj :count elementu.|[2,*] zmieniono rodzaj :count elementów.',\n    ],\n    'confirm'       => [\n        'checkbox'  => 'Rozumiem, że po przekształceniu :entity w element innego moduły stracę następujące dane:',\n        'label'     => 'Potwierdzenie utraty danych',\n    ],\n    'documentation' => 'Dokumentacja: zmiana modułu elementu',\n    'fields'        => [\n        'current'       => 'Obecny moduł',\n        'select_one'    => 'Wybierz',\n        'target'        => 'Nowy typ elementu',\n    ],\n    'panel'         => [\n        'bulk_description'  => 'Zmień rodzaj wielu elementów na raz. Pamiętaj, możesz utracić część danych ze względu na różnice pól opisu różnych rodzajów elementów.',\n        'bulk_title'        => 'Przekształcanie wielu elementów',\n        'title'             => 'Przekształć typ elementu',\n        'warning'           => 'Możesz utracić niektóre dane, jeżeli nowy moduł używa innych pól opisu.',\n    ],\n    'success'       => 'Przekształcono element :name.',\n    'title'         => 'Przekształcanie elementu :name',\n];\n"
  },
  {
    "path": "lang/pl/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Zdolności',\n    'ability'               => 'Zdolność',\n    'attribute_template'    => 'Szablon Cech',\n    'attribute_templates'   => 'Szablony Cech',\n    'bookmark'              => 'Zakładka',\n    'bookmarks'             => 'Zakładki',\n    'calendar'              => 'Kalendarz',\n    'calendars'             => 'Kalendarze',\n    'campaign'              => 'Kampania',\n    'campaigns'             => 'Kampanie',\n    'character'             => 'Postać',\n    'characters'            => 'Postaci',\n    'conversation'          => 'Rozmowa',\n    'conversations'         => 'Rozmowy',\n    'creator'               => [\n        'actions'                   => [\n            'create'    => 'Stwórz :type',\n            'full'      => 'Przejdź do wersji pełnej',\n            'more'      => 'Szczegóły',\n        ],\n        'back'                      => 'Powrót do menu wyboru',\n        'bulk_names'                => 'Jedna nazwa na wiersz',\n        'duplicate'                 => 'Istnieje inny element tego typu o tej samej nazwie.',\n        'helper_v2'                 => 'Szybko stwórz szkic nowego elementu nie przerywając obecnej pracy.',\n        'missing_v2'                => 'W tym panelu widoczne są tylko włączone moduły, w których masz prawo tworzyć elementy. :learn-more.',\n        'modes'                     => [\n            'bulk'      => 'Stwórz wiele',\n            'default'   => 'Stwórz szybko',\n        ],\n        'name'                      => [\n            'new'       => 'Nowa nazwa',\n            'remove'    => 'Usuń',\n        ],\n        'success_multiple'          => '{1} Stworzono nowy element :link.|[2,*] Stworzono nowe elementy :link.',\n        'success_multiple_posts'    => '{1} Dodano komentarz: :link.|[2,*] Dodano komentarze: :link.',\n        'title'                     => 'Nowy element',\n        'titles'                    => [\n            'everything'    => 'Wszystko',\n            'quick-access'  => 'Szybki dostęp',\n        ],\n        'tooltip'                   => 'Stwórz nowy element bez opuszczania obecnej strony',\n        'tooltips'                  => [\n            'create'        => 'Stwórz element i wróć do ekranu wyboru elementów.',\n            'create_more'   => 'Stwórz element i zacznij tworzyć kolejny element tego typu',\n            'edit'          => 'Stwórz element i rozpocznij jego edycję',\n        ],\n    ],\n    'creature'              => 'Istota',\n    'creatures'             => 'Istoty',\n    'dice_roll'             => 'Rzut kośćmi',\n    'dice_rolls'            => 'Rzuty kośćmi',\n    'event'                 => 'Wydarzenie',\n    'events'                => 'Wydarzenia',\n    'families'              => 'Rodziny',\n    'family'                => 'Rodzina',\n    'inventories'           => 'Wyposażenie',\n    'item'                  => 'Przedmiot',\n    'items'                 => 'Przedmioty',\n    'journal'               => 'Dziennik',\n    'journals'              => 'Dzienniki',\n    'location'              => 'Miejsce',\n    'locations'             => 'Miejsca',\n    'map'                   => 'Mapa',\n    'maps'                  => 'Mapy',\n    'new'                   => [],\n    'note'                  => 'Notatka',\n    'notes'                 => 'Notatki',\n    'organisation'          => 'Organizacja',\n    'organisations'         => 'Organizacje',\n    'quest'                 => 'Zadanie',\n    'quest_element'         => 'Element zadania',\n    'quests'                => 'Zadania',\n    'race'                  => 'Rasa',\n    'races'                 => 'Rasy',\n    'relation'              => 'Relacja',\n    'relations'             => 'Relacje',\n    'reminders'             => 'Epizody',\n    'tag'                   => 'Etykieta',\n    'tags'                  => 'Etykiety',\n    'templates'             => 'Szablony',\n    'timeline'              => 'Historia',\n    'timeline_element'      => 'Element historii',\n    'timelines'             => 'Historie',\n    'whiteboard'            => 'Tablica',\n    'whiteboards'           => 'Tablice',\n];\n"
  },
  {
    "path": "lang/pl/errors.php",
    "content": "<?php\n\nreturn [\n    '403'               => [\n        'body'  => 'Najwyraźniej nie masz uprawnień do przeglądania tej strony!',\n        'title' => 'Brak dostępu',\n    ],\n    '403-form'          => [\n        'help'  => 'Powodem może być zakończenie twojej sesji. Przed zapisaniem spróbuj zalogować się ponownie w nowym oknie.',\n    ],\n    '404'               => [\n        'body'  => 'Niestety nie możemy znaleźć strony której szukasz.',\n        'title' => 'Strony nie znaleziono',\n    ],\n    '500'               => [\n        'body'  => [\n            '1' => 'Ups, chyba coś poszło nie tak.',\n            '2' => 'Otrzymaliśmy raport o napotkanym błędzie, ale czasem warto przekazać nam dokładniejszą informację, jakie działanie go spowodowało.',\n        ],\n        'title' => 'Błąd',\n    ],\n    '503'               => [\n        'body'  => [\n            '1' => 'Trwa konserwacja Kanki, co zwykle oznacza, że instalujemy aktualizację!',\n            '2' => 'Przepraszamy za niedogodność. Za kilka minut wszystko wróci do normy.',\n        ],\n        'json'  => 'Właśnie trwa konserwacja Kanki, spróbuj za kilka minut.',\n        'title' => 'Konserwacja',\n    ],\n    '503-form'          => [],\n    'back-to-campaigns' => 'Wróć do jednej ze swoich kampanii.',\n    'footer'            => 'Jeżeli potrzebujesz pomocy, skontaktuj się z nami przez hello@kanka.io albo na serwerze :discord',\n    'log-in'            => 'Zalogowanie może pozwolić ci uzyskać dostęp.',\n    'post_layout'       => 'Nieprawidłowy układ komentarza',\n    'private-campaign'  => [\n        'auth'  => [\n            'helper'    => 'Nie masz dostępu do tej kampanii.',\n        ],\n        'guest' => [\n            'helper'    => 'Kampania do której próbujesz się dostać jest prywatna i wymaga zalogowania.',\n            'login'     => 'Dostęp do zawartości możesz uzyskać po zalogowaniu.',\n        ],\n        'title' => 'Kampania prywatna',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowe wydarzenie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [\n        'helper'    => 'Ty wyświetlone są wydarzenia pochodzące od tego elementu.',\n    ],\n    'fields'        => [\n        'date'  => 'Data',\n    ],\n    'helpers'       => [\n        'date'  => 'W tym polu można umieścić wszystko - nie jest związane z kalendarzami kampanii. By je tam umieścić kalendarzu, dodaj ręcznie epizod za pomocą kalendarza albo zakładki \"Epizody\" elementu.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Opisz ważne wydarzenia z historii świata: bitwy, koronacje czy odkrycia.',\n    ],\n    'placeholders'  => [\n        'date'  => 'Data tego wydarzenia',\n        'type'  => 'Uroczystość, festiwal, katastrofa, bitwa, narodziny',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Wpisy w kalendarzu',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/export.php",
    "content": "<?php\n\nreturn [\n    'content'           => 'Zawartość',\n    'hidden_campaign'   => 'Ukryta kampania',\n    'index'             => 'Indeks elementów',\n];\n"
  },
  {
    "path": "lang/pl/families/trees.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'clear'             => 'Usuń wszystko',\n        'first'             => 'Dodaj założyciela',\n        'founder'           => 'Dodaj założyciela',\n        'rename-relation'   => 'Zmień nazwę relacji',\n        'reset'             => 'Odrzuć zmiany',\n        'save'              => 'Zapisz',\n    ],\n    'modal'     => [\n        'first-title'   => 'Wybierz element',\n        'helper'        => 'Zamień element na inny element kampanii',\n        'relation'      => 'Relacja',\n        'title'         => 'Zamień element',\n    ],\n    'modals'    => [\n        'clear'     => [\n            'confirm'   => 'Czy na pewno chcesz usunąć wszystkie dane i rozpocząć tworzenie rodowodu od nowa?',\n        ],\n        'entity'    => [\n            'add'       => [\n                'founder'   => 'Założyciel',\n                'member'    => 'Członek',\n                'success'   => 'Dodano element.',\n                'title'     => 'Dodaj element',\n            ],\n            'child'     => [\n                'success'   => 'Dziecko dodane.',\n                'title'     => 'Dodaj dziecko',\n            ],\n            'edit'      => [\n                'helper'    => 'Zaznacz, jeżeli relacja jest nieznana. Postać będzie można dodać później.',\n                'success'   => 'Zmieniono element.',\n                'title'     => 'Zmień element',\n            ],\n            'founder'   => [\n                'title' => 'Dodawanie założyciela',\n            ],\n            'remove'    => [\n                'confirm'   => 'Czy na pewno chcesz usunąć ten element z rodowodu?',\n                'success'   => 'Usunięto element.',\n            ],\n        ],\n        'relations' => [\n            'add'       => [\n                'success'   => 'Dodano relację.',\n                'title'     => 'Dodaj relację',\n            ],\n            'edit'      => [\n                'success'   => 'Zmieniono relację.',\n                'title'     => 'Zmień relację',\n            ],\n            'unknown'   => 'Nieznana',\n        ],\n        'reset'     => [\n            'confirm'   => 'Czy na pewno chcesz odrzucić wszystkie zmiany w rodowodzie?',\n        ],\n    ],\n    'pitch'     => 'Stwórz drzewo genealogiczne rodzin w kampanii.',\n    'success'   => [\n        'cleared'   => 'Usunięto rodowód.',\n        'reseted'   => 'Zresetowano rodowód.',\n        'saved'     => 'Zapisano rodowód.',\n    ],\n    'title'     => 'Rodowód',\n    'unknown'   => 'nieokreślona',\n];\n"
  },
  {
    "path": "lang/pl/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowa rodzina',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Ta rodzina wymarła.',\n        'members'       => 'Lista członków rodziny. Aby dodać postać do rodziny, wybierz ją z listy w pozycji \"Rodzina\" podczas edycji tej postaci.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Układaj rodowody, klany i koligacje łączące stworzone postacie.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Dodaj jednego lub więcej członków do :name',\n            'success'   => '{0} Nie dodano członków.|{1} Dodano 1 członka.|[2,*] Dodano :count członków.',\n            'title'     => 'Nowi członkowie',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Nazwisko rodowe',\n        'type'  => 'Królewska, szlachecka, wymarła',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'tree'  => 'Drzewo genealogiczne',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/faq.php",
    "content": "<?php\n\nreturn [\n    'account-deletion'      => [\n        'account_settings'  => 'Ustawienia konta',\n        'answer'            => 'Aby usunąć konto, przejdź na stronę :account i przewiń na dół, do sekcji usuwania. W ten sposób usuniesz zarówno konto, jak wszystkie kampanie których jesteś jedynym uczestnikiem.',\n        'question'          => 'Jak mogę usunąć konto?',\n    ],\n    'app_backup'            => [\n        'answer'    => 'Tworzymy dwie kopie zapasowe dziennie, żeby nie doszło do utraty danych. Na tym serwerze są nasze własne kampanie, nie zamierzamy ryzykować!',\n        'question'  => 'Jak często Kanka archiwizuje dane?',\n    ],\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nNajlepiej wytłumaczyć działanie szablonów cech na przykładzie. Dajmy na to, w twoim świecie jest wiele Miejsc, i dla większości z nich chcesz zanotować konkretne Cechy - na przykład \"Populację\", \"Klimat\" i \"Poziom przestępczości\".\n\nMożesz dodawać te pozycje ręcznie do każdego miejsca, ale o męczące i czasem zdarzy ci się zapomnieć o \"Poziomie przestępczości\". I tu przydają się szablony cech.\n\nMożesz stworzyć szablon zawierający dowolne cechy (Populację, Klimat, Poziom przestępczości i tak dalej) i dodawać go potem do kolejnych miejsc. Dzięki temu zadane cechy pojawią się w odpowiedniej zakładce. A tobie zostanie tylko zmienić ich wartości, zamiast dodawać je ręcznie za każdym razem.\nTEXT\n        ,\n        'question'  => 'Co to są te \"Szablony cech\"?',\n    ],\n    'backup'                => [\n        'answer'    => 'Raz dziennie możesz wyeksportować dane ze swojej kampanii jako plik ZIP. W tym celu kliknij w menu po lewej stronie na pozycję \"Kampania\", a potem wybierz opcję \"Eksportuj\". Stworzony w ten sposób plik możesz pobrać przez 30 minut. Takich danych nie można załadować z powrotem do Kanki, więc pobieraj je dla własnego spokoju ducha albo jeżeli planujesz zrezygnować z używania naszego narzędzia.',\n        'question'  => 'Jak mogę stworzyć kopię zapasową albo wyeksportować kampanię?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Po prostu dołącz do naszego serwera :discord i zgłoś błąd na kanale #error-and-bugs',\n        'question'  => 'Jak zgłaszać błędy?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'Kanka na to nie pozwala. Jeżeli prowadzisz wiele drużyn w tym samym świecie możesz jednak dodać wszystkich graczy do tej samej kampanii, a potem dzielić im dostęp za pomocą systemu misji, etykiet i uprawnień.',\n        'question'  => 'Czy mogę synchronizować elementy pomiędzy kilkoma kampaniami?',\n    ],\n    'custom'                => [\n        'answer'    => 'Kanka posiada zdefiniowany zestaw elementów, które wchodzą ze sobą w konkretne interakcje. Dopuszczenie rodzajów tworzonych przez użytkowników wymagałoby napisania aplikacji od nowa i stałoby w sprzeczności z naszym głównym celem - chcemy pomagać ludziom w tworzeniu światów, a nie zmuszać ich do główkowania, jak je katalogować. Możesz z łatwością odróżniać od siebie własne kategorie elementów dzięki systemowi etykiet.',\n        'question'  => 'Czy mogę tworzyć własne rodzaje elementów?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Wejdź na pulpit kampanii i kliknij \"Kampania\" w menu po lewej stronie. Jeżeli jesteś jedynym użytkownikiem kampanii, pojawi się guzik \"Usuń\". Usunięcie kampanii to akcja nieodwracalna, która wymaże z naszych serwerów wszystko, łącznie z obrazami.',\n        'question'  => 'Jak usunąć kampanię?',\n    ],\n    'discord'               => [\n        'answer'    => 'By połączyć Kankę z profilem na :discord należy najpierw kliknąć na awatar w prawym górnym rogu aplikacji, a następnie wybrać opcję Profil. Tam przejdź na podstronę :apps i wybierz Połącz.',\n        'question'  => 'Jak połączyć konto Kanki z moim profilem Discord?',\n    ],\n    'early-access'          => [\n        'answer'    => 'Wczesny dostęp to sposób, w jaki nagradzamy naszych wspaniałych subskrybentów. Otrzymują oni możliwość korzystania z najnowszych modułów na 30 dni przed pozostałymi użytkownikami.',\n        'question'  => 'Czym jest \"wczesny dostęp\"?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'Każdy element ma zakładkę \"Komentarze\", gdzie można zapisywać niewielkie fragmenty tekstu, widoczne wyłącznie dla ciebie (przydaje się przy kilku prowadzących), tylko dla administratorów, albo dla wszystkich. Możesz też pozwolić graczom dodawać i edytować takie notki, nie zapewniając im przy tym możliwości edycji całych elementów.',\n        'question'  => 'Jak ukrywać w Kance tylko część informacji?',\n    ],\n    'fields'                => [\n        'answer'    => 'Odpowiedź',\n        'category'  => 'Kategoria',\n        'locale'    => 'Język',\n        'order'     => 'Kolejność',\n        'question'  => 'Pytanie',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\nTak! Uważamy szczerze, że nasza sytuacja finansowa nie powinna wpływać na radość z gry w RPG i wymyślania światów, więc Kanka zawsze będzie za darmo. Ale jeżeli chcesz przyczynić się rozwoju aplikacji, wesprzeć nas i głosować na funkcjonalności, które najbardziej ci się przydadzą, możesz wybrać płatną subskrypcję.\n\nOprócz głosowania nad kierunkiem, w którym rozwijać się będzie Kanka, wspierając nas otrzymujesz też :boosters, możesz zamieszczać zamieszczać więcej plików, twoje imię trafia do galerii sław, dostajesz ładniejsze domyślne ikony i nie tylko!\nTEXT\n        ,\n        'question'  => 'Czy aplikacja zawsze będzie darmowa?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Polecamy tworzyć bogów jako Postaci, a religie jako Organizacje. Aby szybciej odszukać bóstwa na liście, możesz dać im odpowiednie etykiety.',\n        'question'  => 'Jak tworzyć bogów i religie?',\n    ],\n    'help'                  => [\n        'answer'    => 'Po pierwsze, bardzo dziękujemy za chęć pomocy! Zawsze szukamy ludzi gotowych pomóc przy tłumaczeniu, testowaniu funkcjonalności i wprowadzaniu nowych użytkowników. Zachęcamy też do promowania Kanki w miejscach, o których nawet nie pomyśleliśmy. Najlepiej, jeżeli dołączysz do serwera :discord, gdzie działa kanał dla osób które nam pomagają.',\n        'question'  => 'Jak mogę pomóc?',\n    ],\n    'map'                   => [\n        'answer'    => 'Moduł Map pozwala dodawać obrazy w formacie PNG, JPG i SGV. Mapy mogą mieć wiele warstw i można nanosić na nie oznaczenia o różnych kształtach i rozmiarach, wiążąc je z innymi elementami kampanii.',\n        'question'  => 'Czy do Kanki mogę dodawać mapy?',\n    ],\n    'mobile'                => [\n        'answer'    => 'Obecnie Kanka nie posiada dedykowanej aplikacji mobilnej, ale większość opcji działa bez problemu na urządzeniach mobilnych. Mamy nadzieję, że subskrypcje pozwolą nam kiedyś zlecić komuś wykonanie takiej aplikacji, ale to raczej nie zdarzy się w bliskiej przyszłości.',\n        'question'  => 'Czy istnieje wersja mobilna? Czy jest w planach?',\n    ],\n    'monsters'              => [\n        'answer'    => 'Polecamy używać modułu Rasy by dodawać ludy, gatunki, potwory i wszelkie żywe istoty nie będące postaciami.',\n        'question'  => 'Jak tworzyć potwory?',\n    ],\n    'multiworld'            => [\n        'answer'    => 'Możesz brać udział w dowolnej liczbie kampanii, w tym w kampaniach własnego autorstwa. By zmienić kampanię albo dodać nową otwórz pulpit - klikając nazwę kampanii w lewym górnym rogu otworzysz menu zarządzania kampaniami.',\n        'question'  => 'Czy mogę mieć więcej niż jedną kampanię?',\n    ],\n    'nested'                => [\n        'answer'    => 'Jeżeli wolisz używać domyślnie widoku hierarchii elementów, zamiast ich list, przejdź do Profilu i wybierz opcję Układ. Tam możesz zaznaczyć Widok hierarchii. Opcja działa wyłącznie dla twojego konta, a nie wszystkich uczestników kampanii.',\n        'question'  => 'Czy mogę ustawić wyświetlanie hierarchii jako domyślne?',\n    ],\n    'permissions'           => [\n        'answer'    => 'Oczywiście, właśnie po to stworzyliśmy Kankę! Kiedy zaprosisz graczy do kampanii, możesz nadawać im role i uprawnienia. Stworzyliśmy bardzo elastyczny system (który pozwala zarządzać uprawnieniami globalnie i lokalnie), który łatwo dostosować do dowolnej sytuacji i potrzeb.',\n        'question'  => 'Czy mogę jakoś ograniczyć liczbę informacji, do których mają dostęp moi gracze?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nNaszym planem długoterminowym jest stworzyć wszechstronną aplikację do budowania światów i zarządzana kampaniami, która jest systemowo niezależna i którą zarządza społeczność dzięki \"Szablonom Społeczności\". Chcemy też integrować naszą Kankę z innymi narzędziami, na przykład aplikacjami do gry zdalnej.\n\nSami używamy Kanki, więc nie zamierzamy jej porzucać ani zaprzestawać rozwoju. Ale, tak na wszelki wypadek, cały projekt ma charakter open source i może być rozwijany gdyby coś się z nami stało.\nTEXT\n        ,\n        'question'  => 'Jakie macie plany na dalszą przyszłość?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Możesz przeglądać stronę :public-campaigns by zobaczyć kampanie stworzone przez innych użytkowaników.',\n        'question'  => 'Jak inni używają Kanki?',\n    ],\n    'renaming-modules'      => [\n        'answer'    => 'Podstawowa Kanka nie pozwala zmieniać nazw modułów, przez wzgląd na poprawność stylistyczną zwłaszcza w językach posiadających rodzaje gramatyczne. W kampaniach doładowanych można jednak modyfikować nazwy wyświetlane w menu po lewej stronie używając skryptów CSS.',\n        'question'  => 'Czy mogę zmieniać nazwy modułów? Na przykład Rodziny na Klany, albo Organizacje na Frakcje?',\n    ],\n    'sections'              => [\n        'community'     => 'Społeczność',\n        'general'       => 'Ogólne',\n        'other'         => 'Inne',\n        'permissions'   => 'Uprawnienia',\n        'pricing'       => 'Opłaty',\n        'worldbuilding' => 'Tworzenie światów',\n    ],\n    'show'                  => [\n        'return'    => 'Powrót do FAQ',\n        'timestamp' => 'Ostatnia aktualizacja: :date',\n        'title'     => 'FAQ :name',\n    ],\n    'unboost'               => [\n        'answer'    => 'Usunięcie doładowania nie usuwa żadnych danych, które dodano podczas doładowania, po prostu je ukrywa. Jeżeli ponownie doładujesz kampanię, wszystkie opcje staną się znów dostępne w postaci, jaką miały przed usunięciem doładowania.',\n        'question'  => 'Co dzieje się z kampanią, która przestaje być doładowana?',\n    ],\n    'user-switch'           => [\n        'answer'    => 'Uprawnienia, zwłaszcza w większych kampaniach, mogą być dość skomplikowane. Jako administrator możesz zawsze wejść na stronę użytkownika kampanii i nacisnąć opcję \"Przełącz\", która znajduje się obok nazwisk uczestników nie posiadających statusu admina. Logujesz się wówczas jako ten użytkownik i widzisz kampanię tak, jak on. W ten sposób najłatwiej sprawdzić, czy uprawnienia działają poprawnie.',\n        'question'  => 'No to mam już uprawnienia kampanii, jak je teraz przetestować?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Tylko osoby, które otrzymały od ciebie zaproszenie do kampanii widzą twoje dzieło. Wszystkie dane są prywatne i masz nad nimi pełną kontrolę. Jeżeli chcesz, możesz nadać kampanii status publiczny, który pozwala ją przeglądać niezarejestrowanym użytkownikom.',\n        'question'  => 'Czy inni widzą mój świat?',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/fields.php",
    "content": "<?php\n\nreturn [\n    'gallery'           => [\n        'placeholder'   => 'Wybierz obraz z galerii kampanii',\n    ],\n    'gallery-header'    => [\n        'description'   => 'Jeżeli element nie ma obrazu w nagłówku, wyświetlaj obraz z galerii kampanii.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'Jeżeli element nie ma własnego obrazu, wyświetlaj obraz z galerii kampanii.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Wyświetlaj obraz w tle nagłówka elementu w :boosted-campaign',\n        'description'           => 'Wyświetlaj obraz w tle nagłowka elementu. Dla osiągnięcia najlepszego efektu użyj bardzo dużego obrazu.',\n        'title'                 => 'Nagłówek',\n    ],\n    'tooltip'           => [],\n];\n"
  },
  {
    "path": "lang/pl/filters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'bookmark'  => 'Zakładka',\n    ],\n    'alerts'    => [\n        'copy'  => 'Filtry skopiowano do schowka',\n    ],\n    'bookmark'  => [\n        'helper'    => 'Tworzy zakładkę dla widoku używającego obecnych filtrów.',\n        'name'      => ':module (z filtrem)',\n        'premium'   => 'Dodanie kolejnych zakładek wymaga kampanii premium.',\n        'success'   => 'Stworzono zakładkę',\n    ],\n    'helpers'   => [\n        'guest'         => 'Zaloguj się by zobaczyć wyniki filtrowania.',\n        'icon'          => 'Dodaje zakładce specjalną ikonę :fontawesome, na przykład :example.',\n        'icon-premium'  => 'Dodaje zakładce specjalną ikonę :fontawesome, na przykład :example w kampanii :premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/footer.php",
    "content": "<?php\n\nreturn [\n    'about'             => 'O nas',\n    'blog'              => 'Blog',\n    'boosters'          => 'Doładowania',\n    'community'         => 'Społeczność',\n    'company'           => 'Firma',\n    'contact'           => 'Kontakt',\n    'copyright'         => 'Copyright :copy :year Owlchester SNC',\n    'documentation'     => 'Dokumentacja',\n    'features'          => 'Funkcjonalności',\n    'kb'                => 'Baza wiedzy',\n    'language-switcher' => [\n        'other' => 'Inne języki',\n        'title' => 'Wybierz język',\n    ],\n    'made'              => 'Stworzono z ❤️ w Genewie, Szwajcaria',\n    'newsletter'        => 'Newsletter',\n    'platform'          => 'Platforma',\n    'plugins'           => 'Biblioteka dodatków',\n    'premium'           => 'Kampanie premium',\n    'press-kit'         => 'Dla prasy',\n    'pricing'           => 'Cena subskrybcji',\n    'privacy'           => 'Prywatność',\n    'public-campaigns'  => 'Kampanie publiczne',\n    'resources'         => 'Zasoby',\n    'roadmap'           => 'W przygotowaniu',\n    'security'          => 'Bezpieczeństwo',\n    'server-time'       => 'To czas naszego serwera (:server).',\n    'showcase'          => 'Galeria',\n    'status'            => 'Status usługi',\n    'terms'             => 'Warunki',\n    'thanks'            => 'Ogromne wyrazy wdzięczności dla wszystkich subskrybujących.',\n    'translator_call'   => 'Kanka jest tłumaczona na inne języki dzięki zaangażowaniu naszej społeczności. Jeżeli chcesz pomóc w przekładzie na swój język, daj nam znać na naszym serwerze :discord.',\n    'whats-new'         => 'Co nowego',\n];\n"
  },
  {
    "path": "lang/pl/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Głosowania społeczności',\n];\n"
  },
  {
    "path": "lang/pl/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Galeria Sław',\n];\n"
  },
  {
    "path": "lang/pl/front/kb.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'show'      => [],\n    'title'     => 'Baza wiedzy',\n];\n"
  },
  {
    "path": "lang/pl/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Dowiedz się więcej',\n        'subscribe'     => 'Subskrybuj',\n    ],\n    'fields'    => [\n        'firstname'     => 'Imię',\n        'lastname'      => 'Nazwisko',\n        'notifications' => 'Powiadomienia',\n    ],\n    'groups'    => [\n        'all'           => 'Chcę otrzymywać co jakiś czas powiadomienia o nowych funkcjach, głosowaniach społeczności, wydarzeniach itd.',\n        'newsletter'    => 'Newsletter',\n    ],\n    'headline'  => 'Zasubskrybuj jeden albo wszystkie newslettery, by pozostać na bieżąco.',\n    'title'     => 'Powiadomienia E-mail',\n];\n"
  },
  {
    "path": "lang/pl/front.php",
    "content": "<?php\n\nreturn [\n    'about'                 => [],\n    'actions'               => [],\n    'campaigns'             => [\n        'public'    => [\n            'filters'   => [\n                'is-premium'    => 'To kampania premium!',\n            ],\n        ],\n    ],\n    'community'             => [],\n    'contact'               => [],\n    'cookie'                => [\n        'dismiss'   => 'Jasne!',\n        'link'      => 'Więcej',\n        'message'   => 'By zapewnić jak najlepsze doświadczenie, ta strona używa cookies',\n    ],\n    'faq'                   => [],\n    'featured_campaigns'    => [],\n    'features'              => [\n        'api'       => [\n            'link'  => 'Dokumentacja API',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Więcej wywołań API (90 na minutę)',\n            'boosts'            => 'Doładowania kampanii',\n            'default_image'     => 'Własne domyślne ikony elementów kampanii',\n            'discord'           => 'Prywatny kanał na Discordzie',\n            'free'              => 'Darmowa',\n            'hall_of_fame'      => 'Miejsce w :link',\n            'impact'            => 'Wpływ na przyszłe funkcje',\n            'monthly_vote'      => 'Udział w głosowaniu społeczności nad nowymi funkcjami',\n            'pagination'        => 'Większa liczba elementów na stronie',\n            'upload_limit'      => 'Wielkość plików',\n            'upload_limit_map'  => 'Wielkość mapy',\n        ],\n    ],\n    'first_block'           => [],\n    'footer'                => [],\n    'goodbye'               => [],\n    'help'                  => [],\n    'home'                  => [\n        'seo'   => [\n            'meta-description'  => 'Prowadzisz gry RPG, wymyślasz światy i historie? Dzięki naszemu menedżerowi kampanii i narzędziom światotwórczym z łatwością zorganizujesz, zaplanujesz i przeprowadzisz grę. Słuchamy naszej społeczności i, co najlepsze, jesteśmy całkiem za darmo!',\n        ],\n    ],\n    'master'                => [],\n    'media'                 => [],\n    'menu'                  => [\n        'dashboard'     => 'Pulpit',\n        'login'         => 'Logowanie',\n        'register'      => 'Rejestracja',\n        'register_free' => 'Darmowa rejestracja',\n    ],\n    'meta'                  => [\n        'description'   => 'Kanka to elastyczny cyfrowy menedżer kampanii RPG i narzędzie do projektowania światów',\n        'title'         => 'Kanka - menedżer kampanii RPG i narzędzie tworzenia światów dostępne online',\n    ],\n    'partners'              => [],\n    'pricing'               => [\n        'tier'  => [\n            'free'  => 'Za darmo',\n            'month' => 'miesięcznie',\n        ],\n    ],\n    'privacy'               => [],\n    'release'               => [],\n    'roadmap'               => [],\n    'second_block'          => [],\n    'seo'                   => [\n        'keywords'  => 'Światotwórstwo, gry fabularne, zarządzanie kampaniami RPG',\n    ],\n    'team'                  => [],\n    'terms'                 => [],\n];\n"
  },
  {
    "path": "lang/pl/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'gallery'   => 'Z galerii',\n        'url'       => 'Pobierz obraz z odnośnika',\n    ],\n    'browse'    => [\n        'layouts'       => [\n            'large' => 'Duże miniatury',\n            'small' => 'Małe miniatury',\n        ],\n        'search'        => [\n            'placeholder'   => 'Wyszukaj obraz w galerii',\n        ],\n        'title'         => 'Galeria',\n        'unauthorized'  => 'Żadna z twoich ról nie posiada uprawień do \"przeglądania galerii\".',\n    ],\n    'cta'       => [\n        'action'    => 'Odblokuj większy magazyn',\n        'helper'    => 'Uzyskaj do :size GB magazynu w :premium-campaign.',\n        'title'     => 'Magazy jest pełny',\n    ],\n    'delete'    => [\n        'success'   => '[0] Usunięto 0 elementów|[1] Usunięto jeden element|{2,4} Usunięto :count elementy|{5,*} Usunięto :count elementów',\n    ],\n    'download'  => [\n        'errors'    => [\n            'copy_failed'           => 'Nasz serwer nie mógł pobrać obrazu',\n            'gallery_full_free'     => 'Galeria jest pełna. Odblokuj wersję premium by zwiększyć ilość miejsca.',\n            'gallery_full_premium'  => 'Galeria jest pełna. Najpierw usuń nieużywane pliki.',\n            'invalid_format'        => 'Niewłaściwy rodzaj pliku.',\n            'too_big'               => 'Plik jest zbyt duży.',\n            'unauthorized'          => 'Żadna z twoich ról nie posiada uprawień do \"przesyłania obrazów\".',\n        ],\n    ],\n    'file'      => [\n        'saved' => 'Zapisano',\n    ],\n    'filters'   => [\n        'only_unused'   => 'Pokaż tylko nieużywane pliki',\n        'sort'          => 'Sortuj według',\n    ],\n    'move'      => [\n        'success'   => '[0] Przeniesiono 0 elementów|[1] Przeniesiono jeden element|{2,4} Przeniesiono :count elementy|{5,*} Przeniesiono :count elementów',\n    ],\n    'update'    => [\n        'home'      => 'Folder domowy',\n        'success'   => '[0] Zmieniono 0 elementów|[1] Zmieniono jeden element|{2,4} Zmieniono :count elementy|{5,*} Zmieniono :count elementów',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Odznacz wszystkie',\n    'documentation' => 'Więcej o tej funkcji dowiesz się z dokumentacji',\n    'done'          => 'Gotowe',\n    'learn-more'    => 'Więcej',\n    'no'            => 'Nie',\n    'required'      => 'Wymagane',\n    'select_all'    => 'Wybierz wszystkie',\n    'success'       => [\n        'created'           => 'Stworzono :name.',\n        'deleted'           => 'Usunięto :name.',\n        'deleted-cancel'    => 'Anulowano usunięcie :name.',\n        'updated'           => 'Zmieniono :name.',\n    ],\n    'tutorial'      => 'Zobacz tutorial',\n    'yes'           => 'Tak',\n];\n"
  },
  {
    "path": "lang/pl/genres.php",
    "content": "<?php\n\nreturn [\n    'alternate_history' => 'Historia alternatywna',\n    'cyberpunk'         => 'Cyberpunk',\n    'fantasy'           => 'Fantasy',\n    'historical'        => 'Historia',\n    'many_worlds'       => 'Wieloświat',\n    'modern'            => 'Współczesność',\n    'occult'            => 'Okultyzm',\n    'post_apocalyptic'  => 'Postapokalipsa',\n    'pulp'              => 'Pulp',\n    'science_fantasy'   => 'Science fantasy',\n    'science_fiction'   => 'Science fiction',\n    'space_opera'       => 'Space opera',\n    'steampunk'         => 'Steampunk',\n    'superhero'         => 'Superbohaterowie',\n    'urban_fantasy'     => 'Urban fantasy',\n    'western'           => 'Western',\n];\n"
  },
  {
    "path": "lang/pl/header.php",
    "content": "<?php\n\nreturn [\n    'news'              => [\n        'title' => 'Co nowego',\n    ],\n    'notifications'     => [\n        'dismiss'   => 'Odrzuć',\n        'no-unread' => 'Brak nieprzeczytanych wiadomości',\n        'read_all'  => 'Przeczytaj wszystko',\n    ],\n    'qq'                => [\n        'tooltip'   => 'Dodaj element albo komentarz',\n    ],\n    'toggle_navigation' => 'Przełącz nawigację',\n    'user'              => [\n        'settings'      => 'Ustawienia',\n        'sign-out'      => 'Wyloguj',\n        'upgrade'       => 'Zwiększanie',\n        'your-profile'  => 'Twój profil',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/helpers.php",
    "content": "<?php\n\nreturn [\n    'age'               => [],\n    'api-filters'       => [\n        'description'   => 'W węźle końcowym API :name dostępne są następujące filtry',\n        'title'         => 'Filtry API',\n    ],\n    'attributes'        => [\n        'link'  => 'Opcje cech',\n    ],\n    'calendar-widget'   => [\n        'info'  => 'Czemu wciąż to widzę?',\n        'title' => 'Widżet kalendarza',\n    ],\n    'dice'              => [],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Jak używać filtrów',\n    ],\n    'link'              => [\n        'description'   => 'Możesz z łatwością tworzyć odnośniki do innych elementów kampanii przy pomocy następującego zapisu.',\n    ],\n    'map'               => [],\n    'pins'              => [],\n    'public'            => 'Zobacz tutorial na Youtube dotyczący kampanii publicznych.',\n    'troubleshooting'   => [\n        'description'       => 'Skierował cię na tę stronę członek zespołu Kanki. Wybierz kampanię z rozwijanego menu by stworzyć zgłoszenie, dzięki któremu ktoś od nas będzie mógł czasowo dołączyć do kampanii jako administrator.',\n        'errors'            => [\n            'token_exists'  => 'Dla :campaign istnieje już zgłoszenie',\n        ],\n        'save_btn'          => 'Stwórz zgłoszenie',\n        'select_campaign'   => 'Wybierz kampanię',\n        'subtitle'          => 'Przybądźcie z odsieczą!',\n        'success'           => 'Skopuj następujące zgłoszenie i prześlij je do kogoś z zespołu Kanki',\n        'title'             => 'Rozwiązywanie problemów',\n    ],\n    'widget-filters'    => [\n        'description'   => 'Możesz filtrować elementy wyświetlane przez zmodyfikowany widżet tworząc listę pól dla elementów albo wartości. Na przykład możesz użyć :example by filtrować martwe postaci na liście BNów.',\n        'link'          => 'filtry widżetów',\n        'title'         => 'Filtry widżetów pulpitu',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/history.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'show-old'  => 'Zmiany',\n    ],\n    'cta'       => 'Wyświetla listę ostatnich zmian w kampanii.',\n    'empty'     => 'Brak',\n    'fields'    => [\n        'action'    => 'Działanie',\n        'details'   => 'Szczegóły',\n        'when'      => 'Kiedy',\n        'who'       => 'Kto',\n    ],\n    'filters'   => [\n        'all-actions'   => 'Wszystkie działania',\n        'all-users'     => 'Wszyscy uczestnicy',\n        'no-results'    => 'Brak rezultatów. Użyj innego filtra albo wprowadź jakieś zmiany w elementach kampanii.',\n    ],\n    'helpers'   => [\n        'base'      => 'Lista zawiera zmiany elementów kampanii przeprowadzone w ciągu :amount miesięcy. Najnowsze wyświetlane są jako pierwsze.',\n        'changes'   => 'Poniższe pola miały poprzednio następujące wartości.',\n    ],\n    'log'       => [\n        'create'        => ':user stworzył :entity',\n        'create_post'   => ':user napisał komentarz \":post\" dotyczący :entity',\n        'delete'        => ':user usunął :entity',\n        'delete_post'   => ':user usunął komentarz dotyczący :entity',\n        'reorder_post'  => ':user zmienił kolejność komentarzy dotyczących :entity',\n        'restore'       => ':user przywrócił :entity',\n        'update'        => ':user zmienił :entity',\n        'update_post'   => ':user zmienił komentarz \":post\" dotyczący :entity',\n        'update_tree'   => ':user zmienił genealogię elementu :entity',\n    ],\n    'title'     => 'Historia',\n    'unknown'   => [\n        'entity'    => 'nieznany element',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/items.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowy przedmiot',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_equipped'   => 'Na wyposażeniu',\n        'price'         => 'Cena',\n        'size'          => 'Rozmiar',\n        'weight'        => 'Waga',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'inventories'   => [],\n    'lists'         => [\n        'empty' => 'Dodawaj występującą w świecie broń, artefakty oraz przedmioty o szczególnym znaczeniu.',\n    ],\n    'placeholders'  => [\n        'price' => 'Cena przedmiotu',\n        'size'  => 'Wielkość, ciężar, wymiary',\n        'type'  => 'Broń, eliksir, artefakt',\n        'weight'=> 'Waga jednego przedmiotu',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'W posiadaniu',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowy dziennik',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Autor',\n        'date'      => 'Data',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'journals'      => [],\n    'lists'         => [\n        'empty' => 'Twórz dzienniki opisujące dotychczasowe przygody, przemyślenia postaci albo podsumowania sesji.',\n    ],\n    'placeholders'  => [\n        'author'    => 'Osoba, która napisała dziennik',\n        'date'      => 'Data utworzenia dziennika (w prawdziwym świecie)',\n        'type'      => 'Sesja, jednostrzał, szkic',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pl/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Kataloński',\n        'cs'    => 'Czeski',\n        'de'    => 'Niemiecki',\n        'el'    => 'Grecki',\n        'en'    => 'Angielski',\n        'en-US' => 'Amerykański angielski',\n        'es'    => 'Hiszpański',\n        'fr'    => 'Francuski',\n        'gl'    => 'Galicyjski',\n        'he'    => 'Hebrajski',\n        'hr'    => 'Chorwacki',\n        'hu'    => 'Węgierski',\n        'it'    => 'Włoski',\n        'nb'    => 'Norweski (Bokmål)',\n        'nl'    => 'Holenderski',\n        'pl'    => 'Polski',\n        'pt-BR' => 'Brazylijski portugalski',\n        'ru'    => 'Rosyjski',\n        'sk'    => 'Słowacki',\n        'tr'    => 'Turecki',\n    ],\n    'header'=> 'Języki',\n];\n"
  },
  {
    "path": "lang/pl/lists.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn' => 'Poznaj ten moduł',\n        'public'=> 'Sprawdź jak używają go inni',\n    ],\n    'empty'     => [\n        'title' => 'Na razie brak :plural.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nowe miejsce',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [\n        'is_destroyed'  => 'Zniszczone',\n    ],\n    'helpers'       => [\n        'characters'    => 'Wyświetla postaci znajdujące się w tym miejscu i wszystkich miejscach pochodnych, albo wyłącznie tutaj.',\n    ],\n    'hints'         => [\n        'is_destroyed'  => 'To miejsce zostało zniszczone.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'lists'         => [\n        'empty' => 'Dodaj pierwsze miasto, tawernę albo tajemnicze ruiny, by rozpocząć tworzenie świata',\n    ],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'type'  => 'Miasto, królestwo, ruiny',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pl/maps/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/pl/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Tryb edycji',\n        'exit-edit-mode'    => 'Zakończ tryb edycji',\n        'finish-drawing'    => 'Zakończ rysowanie wielokąta',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Kliknij na mapę, by zacząć rysować wielokąt',\n    ],\n    'toggle'        => 'Otwórz/zamknij wszystkie grupy',\n];\n"
  },
  {
    "path": "lang/pl/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Dodaj nową kategorię',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Usunięto :count kategorię.|[2,3,4] Usunięto :count kategorie.|[5,*] Usunięto :count kategorii.',\n        'patch'     => '{1} Zmieniono :count kategorię.|[2,3,4] Zmieniono :count kategorie.|[5,*] Zmieniono :count kategorii.',\n    ],\n    'create'        => [\n        'helper'    => 'Dodaje nową kategorię do :name. Potem można',\n        'success'   => 'Stworzono kategorię :name.',\n        'title'     => 'Nowa kategoria',\n    ],\n    'delete'        => [\n        'success'   => 'Usunięto kategorię :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Zmieniono kategorię :name.',\n        'title'     => 'Edycja kategorii :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Pokaż kategorię znaczników',\n        'parent'    => 'Grupa źródłowa',\n        'position'  => 'Kolejność',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Znaczniki można włączyć w kategorie. Podczas eksploracji mapy można potem zaznaczyć kategorię znaczników, by wyświetlić albo ukryć wszystkie należące do niej elementy.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Zaznacz, by ta kategoria znaczników wyświetlała się na mapie domyślnie.',\n    ],\n    'index'         => [\n        'title' => 'Kategorie mapy :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'Nie możesz tworzyć kolejnych kategorii dopóki którejś nie usuniesz.',\n            'limit'     => 'Osiągnięto limit kategorii na tej mapie',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Osiągnięto limit :limit kategorii na tej mapie',\n            'upgrade'   => 'Ulepsz kampanię do poziomu premium by zwiększyć limit do :limit i uzyskać większą twórczą swobodę.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Sklepy, skarby, BNi.',\n        'position'      => 'Pole opcjonalne, pozwala ustalić kolejność w której pojawiają się kategorie.',\n        'position_list' => 'Po :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Zapisz nową kolejność',\n        'success'   => '{1} Przesunięto :count kategorię.|[2,3,4] Przesunięto :count kategorie.|[5,*] Przesunięto :count kategorii.',\n        'title'     => 'Zmień kolejność kategorii',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Dodaj nową warstwę',\n    ],\n    'base'          => 'Warstwa podstawowa',\n    'bulks'         => [\n        'delete'    => '{1} Usunięto :count warstwę.|[2,3,4] Usunięto :count warstwy.|[5,*] Usunięto :count warstw.',\n        'patch'     => '{1} Zmieniono :count warstwę.|[2,3,4] Zmieniono :count warstwy.|[5,*] Zmieniono :count warstw.',\n    ],\n    'create'        => [\n        'success'   => 'Stworzono warstwę :name.',\n        'title'     => 'Nowa warstwa',\n    ],\n    'delete'        => [\n        'success'   => 'Usunięto warstwę :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Zmieniono warstwę :name.',\n        'title'     => 'Edycja warstwy :name',\n    ],\n    'fields'        => [\n        'position'  => 'Kolejność',\n        'type'      => 'Rodzaj warstwy',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Dodawaj do mapy warstwy by zmieniać ilustrację wyświetlaną pod znacznikami.',\n        'is_real'   => 'Podczas używania OpenStreetMaps warstwy są niedostępne.',\n    ],\n    'index'         => [\n        'title' => 'Warstwy mapy :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'Nie możesz dodawać kolejnych warstw dopóki którejś nie usuniesz.',\n            'limit'     => 'Osiągnięto limit warstw mapy',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Osiągnięto limit :limit warstw mapy',\n            'upgrade'   => 'Ulepsz kampanię do poziomu premium by zwiększyć limit warstw do :limit i zyskać większą swobodę twórczą.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Podziemia, poziom 2, wrak statku',\n        'position'      => 'Pole opcjonalne, pozwala ustalić kolejność wyświetlania warstw.',\n        'position_list' => 'Po :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Zapisz nową koleność',\n        'success'   => '{1} Przesunięto :count warstwę.|[2,3,4] Przesunięto :count warstwy.|[5,*] Przesunięto :count warstw.',\n        'title'     => 'Zmień kolejność warstw',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Nakładka',\n        'overlay_shown' => 'Nakładka (pokazuj domyślnie)',\n        'standard'      => 'Standardowa',\n    ],\n    'types'         => [\n        'overlay'       => 'Nakładka (wyświetlaj nad aktywną warstwą)',\n        'overlay_shown' => 'Nakładka wyświetlana domyślnie',\n        'standard'      => 'Warstwa standardowa (do przełączania)',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Dodaj opis do tego znacznika.',\n        'remove'            => 'Usuń znacznik',\n        'reset-polygon'     => 'Resetuj pozycje',\n        'save_and_explore'  => 'Zapisz i eksploruj',\n        'start-drawing'     => 'Zacznij rysować',\n        'update'            => 'Edytuj znacznik',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Usunięto :count znacznik.|[2,3,4] Usunięto :count znaczniki.|[5,*] Usunięto :count znaczników.',\n        'patch'     => '{1} Zmieniono :count znacznik.|[2,3,4] Zmieniono :count znaczniki.|[5,*] Zmieniono :count znaczników.',\n    ],\n    'circle_sizes'  => [\n        'custom'    => 'Własny',\n        'huge'      => 'Ogromny',\n        'large'     => 'Duży',\n        'small'     => 'Mały',\n        'standard'  => 'Domyślny',\n        'tiny'      => 'Malutki',\n    ],\n    'create'        => [\n        'success'   => 'Stworzono znacznik :name.',\n        'title'     => 'Nowy znacznik',\n    ],\n    'delete'        => [\n        'success'   => 'Usunięto znacznik :name.',\n    ],\n    'details'       => [\n        'from-entity'   => 'Z elementu',\n    ],\n    'edit'          => [\n        'success'   => 'Zmieniono znacznik :name.',\n        'title'     => 'Edycja znacznika :name',\n    ],\n    'fields'        => [\n        'bg_colour'     => 'Kolor tła',\n        'circle_radius' => 'Promień okręgu',\n        'copy_elements' => 'Kopiuj elementy',\n        'custom_icon'   => 'Własna ikona',\n        'custom_shape'  => 'Własny kształt',\n        'font_colour'   => 'Kolor ikony',\n        'group'         => 'Kategoria znaczników',\n        'icon'          => 'Ikona',\n        'is_draggable'  => 'Można przesuwać',\n        'latitude'      => 'Szerokość',\n        'longitude'     => 'Długość',\n        'opacity'       => 'Nieprzejrzystość',\n        'pin_size'      => 'Wielkość znacznika',\n        'polygon_style' => [\n            'stroke'            => 'Kolor konturu',\n            'stroke-opacity'    => 'Przejrzystość konturu',\n            'stroke-width'      => 'Szerokość konturu',\n        ],\n        'popupless'     => 'Wyświetlanie dymków',\n        'size'          => 'Rozmiar',\n    ],\n    'helpers'       => [\n        'base'                      => 'Dodaj znacznik, klikając w dowolnym miejscu mapy.',\n        'copy_elements'             => 'Kopiuj kategorie, warstwy i znaczniki.',\n        'copy_elements_to_campaign' => 'Kopiuje kategorie, warstwy i znaczniki na mapach. Znaczniki prowadzące do elementów zostaną zamienione na standardowe.',\n        'css'                       => 'Definiuje klasę CSS dodaną do znacznika.',\n        'custom_icon_v2'            => 'Używaj ikon z :fontawesome, :rpgawesome, albo własnych plików SVG. Więcej instrukcji znajdziesz tutaj: :docs.',\n        'custom_radius'             => 'Wybierz opcję z rozwijanej listy by określić wielkość.',\n        'draggable'                 => 'Pozwala przeciągać znacznik po mapie w trybie eksploracji.',\n        'is_popupless'              => 'Wyłącza wyświetlanie dymków z opisem po najechaniu na element kursorem.',\n        'label'                     => 'Wyświetla na mapie test zawierający nazwę tego znacznika albo elementu, z którym jest związany.',\n        'polygon'                   => [\n            'edit'  => 'Modyfikuj wielokąt przeciągając ścianki i kąty.',\n        ],\n    ],\n    'hints'         => [\n        'entry' => 'Modyfikuj znacznik by stworzyć nowy opis elementu.',\n    ],\n    'icons'         => [\n        'custom'        => 'Własna',\n        'entity'        => 'Element',\n        'exclamation'   => 'Wykrzyknik',\n        'marker'        => 'Znacznik',\n        'question'      => 'Pytajnik',\n    ],\n    'index'         => [\n        'title' => 'Znaczniki mapy :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Rysuj własne wielokąty, reprezentujące granice albo nieregularne obszary.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'Spróbuj :example1 albo :example2',\n        'custom_shape'  => '100,100 200,240 340,110',\n        'name'          => 'Wymagana, jeżeli nie powiązano z żadnym elementem',\n    ],\n    'presets'       => [\n        'helper'    => 'Kliknij na przygotowany wzór znacznika by go załadować, albo zaprojektuj nowy.',\n    ],\n    'shapes'        => [\n        '0' => 'Okrąg',\n        '1' => 'Kwadrat',\n        '2' => 'Trójkąt',\n        '3' => 'Własny',\n    ],\n    'sizes'         => [\n        '0' => 'Malutki',\n        '1' => 'Standardowy',\n        '2' => 'Mały',\n        '3' => 'Duży',\n        '4' => 'Wielki',\n    ],\n    'tabs'          => [\n        'circle'    => 'Okrąg',\n        'label'     => 'Podpis',\n        'marker'    => 'Znacznik',\n        'polygon'   => 'Wielokąt',\n        'preset'    => 'Wzór',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Powrót do :name',\n        'edit'      => 'Edytuj mapę',\n        'explore'   => 'Eksploruj',\n    ],\n    'create'        => [\n        'title' => 'Nowa mapa',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'Podczas przetwarzania mapy wystąpił błąd. Skontaktuj się z nami na :discord by uzyskać wsparcie.',\n            'running'   => [\n                'edit'      => 'Podczas przetwarzania nie można edytować mapy',\n                'explore'   => 'Podczas przetwarzania nie można wyświetlić mapy.',\n                'time'      => 'Przetwarzanie mapy potrwa od kilku minut do kilku godzin, zależnie od jej wielkości.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'Aby mapa mogła pojawić się na pulpicie, potrzebuje obrazu.',\n        ],\n        'explore'   => [\n            'missing'   => 'Dodaj do tej mapy obraz by móc ją eksplorować.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Znacznik',\n        'center_x'          => 'Wyjściowa szerokość geograficzna',\n        'center_y'          => 'Wyjściowa długość geograficzna',\n        'centering'         => 'Wyśrodkowanie',\n        'distance_measure'  => 'Miara odległości',\n        'distance_name'     => 'Jednostki odległości',\n        'grid'              => 'Siatka',\n        'has_clustering'    => 'Grupuj znaczniki',\n        'initial_zoom'      => 'Wyjściowe powiększenie',\n        'is_real'           => 'Użyj OpenStreetMaps',\n        'max_zoom'          => 'Maksymalne powiększenie',\n        'min_zoom'          => 'Maksymalne oddalenie',\n        'tabs'              => [\n            'coordinates'   => 'Współrzędne',\n            'marker'        => 'Znacznik',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'Zmiana tych wartości wpłynie na obszar, na którym domyślnie skupia się mapa. Jeżeli zostawisz je puste, mapa skoncentruje się na środku.',\n        'centering'             => 'Środkowanie na znaczniku ma pierwszeństwo wobec domyślnych współrzędnych',\n        'chunked_zoom'          => 'Automatycznie grupuje znaczniki położone blisko siebie.',\n        'distance_measure'      => 'Wyposażając mapę w miary odległości uruchomisz narzędzie odmierzania dystansu w trybie eksploracji.',\n        'distance_measure_2'    => 'Wpisz wartość 0.0041, by 100 pikseli oznaczało 1 kilometr',\n        'grid'                  => 'Określ wielkość siatki wyświetlanej w trybie eksploracji',\n        'has_clustering'        => 'Automatycznie grupuje znaczniki położone blisko siebie.',\n        'initial_zoom'          => 'Powiększenie, w jakim wyświetla się mapa. Domyślna wartość to :default, najwyższa dopuszczalna wartość wynosi :max, a najniższa to :min.',\n        'is_real'               => 'Zaznacz tej opcji by używać autentycznych map świata zamiast załączonego obrazu. Jej użycie wyłącza warstwy.',\n        'max_zoom'              => 'Większość map można przybliżać. Domyślna wartość przybliżenia to :default, a najwyższa możliwa wynosi :max.',\n        'min_zoom'              => 'Większość map można oddalać. Domyślna wartość oddalenia to :default, a najwyższa możliwa wynosi :min.',\n        'missing_image'         => 'Zapisz obraz mapy zanim dodasz do niego znaczniki i warstwy.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Dodaj mapę przedstawiającą twój świat i wskazująca położenie różnych miejsc.',\n    ],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Kategorie',\n        'layers'    => 'Warstwy',\n        'legend'    => 'Legenda',\n        'markers'   => 'Znaczniki',\n        'settings'  => 'Ustawienia',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Zostaw pusty, by mapa wyświetlała się wyśrodkowana w centrum',\n        'center_x'      => 'Pozostaw puste, by mapa wyświetlała się skupiona na środku',\n        'center_y'      => 'Pozostaw puste, by mapa wyświetlała się skupiona na środku',\n        'distance_name' => 'Kilometry, mile, stopy, hamburgery',\n        'grid'          => 'Odległość w pikselach między elementami siatki. Pozostaw puste, by ukryć siatkę.',\n        'name'          => 'Nazwa mapy',\n        'type'          => 'Loch, miasto, galaktyka',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Mapy',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'Przetwarzamy mapę. To może potrwać od kilku minut do kilku godzin.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'member'    => 'Zostań członkiem.',\n        'remove_v5' => 'Kankę tworzymy tylko we dwóch. Wesprzyj naszą misję i ciesz się wolnością od reklam - za cenę mniejszą niż dobra kawa.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowa notatka',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'Notatki pochodne',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Gromadź pomysły, źródła, zaraz i informacje, które nie pasują nigdzie indziej.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Wybierz notatkę źródłową',\n        'type'  => 'Religia, rasa, system polityczny',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pl/notifications.php",
    "content": "<?php\n\nreturn [\n    'apps'              => [\n        'discord'   => [\n            'invalid'   => 'Token Discord stracił ważność. Zsynchronizuj Discord i Kankę ponownie.',\n        ],\n    ],\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'Zatwierdzono twoje zgłoszenie do kampanii :campaign.',\n            'approved_message'      => 'Twoje zgłoszenie do kampanii :campaign zostało przyjęte. Dołączono wiadomość: :reason.',\n            'new'                   => 'Nowe zgłoszenie do udziału w kampanii :campaign.',\n            'rejected'              => 'Odrzucono twoje zgłoszenie do kampanii :campaign. Oto powód: :reason',\n            'rejected_no_message'   => 'Twoje zgłoszenie do kampanii :campaign zostało odrzucone.',\n        ],\n        'asset_export'      => 'Można pobrać wyeksportowane pliki kampanii. Odnośnik będzie dostępny przez :time minut.',\n        'boost'             => [\n            'add'           => 'Kampania :campaign została doładowana przez :user.',\n            'remove'        => ':user nie doładowuje już kampanii :campaign.',\n            'superboost'    => 'Kampania :campaign została turbodoładowana przez :user.',\n        ],\n        'created'           => 'Stworzono :campaign.',\n        'deleted'           => 'Usunięto kampanię :campaign',\n        'export'            => 'Można pobrać wyeksportowaną kampanię. Odnośnik będzie dostępny przez :time minut.',\n        'export_error'      => 'Podczas eksportowania plików kampanii wystąpił błąd. Jeżeli będzie się powtarzał, skontaktuj się z nami. To się zdarza w dużych kampaniach posiadających duże obrazy.',\n        'hidden'            => 'Kampania :campaign została usunięta z listy kampanii publicznych.',\n        'import'            => [\n            'failed'    => 'Import kampanii :campaign nieudany.',\n            'success'   => 'Import kampanii :campaign zakończony.',\n        ],\n        'join'              => ':user dołącza do kampanii :campaign.',\n        'leave'             => ':user opuszcza do kampanię :campaign.',\n        'new_owner'         => 'Jesteś teraz administratorem :campaign.',\n        'plugin'            => [\n            'deleted'   => 'Wtyczka :plugin została usunięta z targowiska, więc usunięto ją również z kampanii :campaign.',\n        ],\n        'premium'           => [\n            'add'       => 'Odblokowano opcje premium kampanii :campaign dzięki :user',\n            'remove'    => ':user nie odblokowuje już wersji premium kampanii :campaign',\n        ],\n        'removed-image'     => 'Obraz lub nagłówek elementu :entity został usunięty ze względu na prawa autorskie.',\n        'role'              => [\n            'add'       => 'Nadano ci rolę :role w kampanii :campaign.',\n            'remove'    => 'Odebrano ci rolę :role w kampanii :campaign.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => ':user z zespołu Kanki dołączył do kampanii :campaign',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Usuń wszystkie',\n        'success'   => 'Usunięto powiadomienia',\n        'title'     => 'Wyczyść powiadomienia',\n    ],\n    'features'          => [\n        'approved'  => 'Zaaprobowaliśmy twój pomysł na :feature.',\n        'finished'  => 'Twój pomysł :feature stał się częścią Kanki!',\n        'rejected'  => 'Odrzuciliśmy twój pomysł na :feature. Przyczyna: :reason.',\n    ],\n    'header'            => 'Masz :count powiadomień.',\n    'index'             => [\n        'title' => 'Powiadommienia',\n    ],\n    'map'               => [\n        'chunked'   => 'Zakończono przetwarzanie mapy :name i można już jej używać.',\n    ],\n    'no_notifications'  => 'Nie masz powiadomień',\n    'plugins'           => [\n        'comments'  => [\n            'new_comment'   => ':user zamieścił nowy komentarz o dodatku :plugin.',\n            'new_reply'     => ':user odpowiedział na twój komentarz o :plugin',\n        ],\n    ],\n    'subscriptions'     => [\n        'charge_fail'   => 'Wystąpił problem w czasie przetwarzania płatności. Odczekaj chwilę i spróbuj jeszcze raz. Jeżeli nic się nie zmieni, skontaktuj się z nami.',\n        'deleted'       => 'Po zbyt wielu nieudanych próbach obciążenia twojej karty skasowaliśmy twoją subskrypcję Kanki. Wejdź do ustawień subskrypcji i uaktualnij metodę płatności.',\n        'ended'         => 'Twoja subskrypcja została zakończona. Usunięto doładowania kampanii i kanał na Discordzie. Do zobaczenia niedługo!',\n        'failed'        => 'Nie można pobrać płatności. Uaktualnij ustawienia Metody Płatności.',\n        'started'       => 'Subskrybujesz od teraz Kankę.',\n        'trial'         => 'Zakończył się darmowy okres próbny Kanki. Mamy nadzieję, że ci się podobało i jeszcze do nas wrócisz!',\n    ],\n    'unread'            => 'Nowe powiadomienie',\n];\n"
  },
  {
    "path": "lang/pl/onboarding/attributes.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Cechy pozwalają dodać do :name drobne informacje wielorazowego użytku, na przykład wiek, liczbę punktów wytrzymałości, rangę w organizacji i każdą inną konkretną właściwość, którą można potem sortować, cytować albo dodawać wielu elementom.',\n    'title' => 'Wprowadź konkretne dane elementu',\n];\n"
  },
  {
    "path": "lang/pl/onboarding/characters.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'To wystarczy na początek.',\n    'text'      => 'Skup się na postawach: imieniu, krótkim opisie i jednej - dwóch cechach charakterystycznych. Potem możesz też dodać jej powiązania z innymi, cechy czy portret.',\n    'title'     => 'Stwórz pierwszą postać',\n];\n"
  },
  {
    "path": "lang/pl/onboarding/locations.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'Póki co zachowaj prostotę.',\n    'text'      => 'Zacznij skromnie. Nawij miejsce i napisz jednym zdanem, czym się wyróżnia. W miarę rozbudowy świata możesz dodać mapy, mieszkańców i mniejsze lokacje w obrębie tego miejsca.',\n    'title'     => 'Stwórz pierwsze miejsce',\n];\n"
  },
  {
    "path": "lang/pl/onboarding/posts.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Komentarze pozwalają oddzielić opis widoczny dla wszystkich od tajnych notatek, sekretów MG i informacji dodatkowych. Możesz ich tworzyć dowolnie dużo i okreśać, kto widzi który.',\n    'title' => 'Użyj komentarzy by dodać tajemnice i dodatkowe detale',\n];\n"
  },
  {
    "path": "lang/pl/onboarding/reminders.php",
    "content": "<?php\n\nreturn [\n    'text'  => 'Epizod może byś ostatecznym terminem czegoś, datą w świecie gry, rocznicą albo dowolną inną informacją związaną z :name, o której chcesz pamiętać. Wyświetlają się w na tej stronie oraz w kalendarzu, pod przypisaną im datą.',\n    'title' => 'Tu możesz śledzić rozwój historii w czasie',\n];\n"
  },
  {
    "path": "lang/pl/onboarding/tags.php",
    "content": "<?php\n\nreturn [\n    'npcs'  => 'BN',\n];\n"
  },
  {
    "path": "lang/pl/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowa organizacja',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_defunct'    => 'Nie funkcjonuje',\n        'members'       => 'Członkowie',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_defunct'    => 'Ta organizacja obecnie nie działa',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Twórz gildie, frakcje i tajne stowarzyszenia pływające na kształt świata.',\n    ],\n    'members'       => [\n        'actions'       => [\n            'add_multiple'  => 'Dodaj członków',\n        ],\n        'create'        => [\n            'helper'            => 'Dodaje jednego lub więcej członków do :name.',\n            'success_multiple'  => '{1} Dodano :count członka do :name.|[2,*] Dodano :count członków do :name.',\n        ],\n        'destroy'       => [\n            'success'   => 'Usunięto członka organizacji.',\n        ],\n        'edit'          => [\n            'helper'    => 'Zmienia status członkostwa elementu :name.',\n            'title'     => 'Edycja członka :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Zwierzchnik',\n            'pinned'    => 'Przypnij',\n            'role'      => 'Rola',\n            'status'    => 'Rodzaj członkostwa',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Wszystkie postaci należące do tej organizacji i organizacji pochodnych.',\n            'members'       => 'Wszystkie postaci należące do tej organizacji.',\n            'pinned'        => 'Wybierz czy członkostwo ma być wyświetlane w sekcji \"przypięte\" wskazanych elementów.',\n        ],\n        'pinned'        => [\n            'both'  => 'Do obu',\n            'none'  => 'Do żadnego',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Zwierzchnik tego członka',\n            'role'      => 'Przywódca, członek, Wielki Septon, mistrz szpiegów',\n        ],\n        'status'        => [\n            'active'    => 'Aktywna działalność',\n            'inactive'  => 'Była działalność',\n            'unknown'   => 'Nieznany',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'Kult, gang, podziemie niepodległościowe, fandom',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pl/pagination.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; Poprzednia',\n    'next'     => 'Następna &raquo;',\n];\n"
  },
  {
    "path": "lang/pl/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Wystąpił jakiś problem z twoim działaniem.',\n        'title'         => 'Ups!',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/passwords.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'reset'     => 'Hasło zostało zresetowane!',\n    'sent'      => 'Przypomnienie hasła zostało wysłane!',\n    'throttled' => 'Proszę zaczekać zanim spróbujesz ponownie.',\n    'token'     => 'Token resetowania hasła jest nieprawidłowy.',\n    'user'      => 'Nie znaleziono użytkownika z takim adresem e-mail.',\n];\n"
  },
  {
    "path": "lang/pl/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/permissions.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'delete'    => 'Uprawnienie do usunięcia tego elementu',\n        'edit'      => 'Uprawnienie do edycji tego elementu',\n        'view'      => 'Uprawnienie do wyświetlania tego elementu',\n    ],\n    'members'   => [\n        'inherited' => ':member ma już to uprawnienie dzięki roli :role.',\n    ],\n    'roles'     => [\n        'inherited' => 'Ta :rola ma już takie uprawnienia dla całego modułu :module.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/pins.php",
    "content": "<?php\n\nreturn [\n    'learn-more'    => 'Więcej informacji o przypięciach znajdziesz w dokumentacji.',\n    'options'       => [\n        'no'    => 'Odpięte',\n        'yes'   => 'Przypięte do podstaw elementu',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/post_layouts.php",
    "content": "<?php\n\nreturn [\n    'character_orgs'        => 'Organizacje tej postaci',\n    'connection_map'        => 'Mapa powiązań',\n    'helper'                => 'Ten komentarz wyświetla podstronę :subpage elementu.',\n    'location_characters'   => 'Postaci w miejscu',\n    'location_events'       => 'Wydarzenia w miejscu',\n    'location_quests'       => 'Zadania w miejscu',\n    'pitch'                 => [\n        'custom'    => 'Wyświetla zawartość podstron elementu w komentarzu. Na przykład, pokazuje wyposażenie :entity.',\n        'title'     => 'Zaawansowany układ komentarza',\n    ],\n    'premium'               => 'Niektóre opcje układu komentarza są niedostępne, ponieważ wymagają kampanii premium.',\n    'quest_elements'        => 'Elementy zadania',\n];\n"
  },
  {
    "path": "lang/pl/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowy komentarz',\n    ],\n    'fields'        => [\n        'layout'    => 'Układ komentarza',\n        'name'      => 'Tytuł',\n    ],\n    'helpers'       => [\n        'new'           => 'Dodaj nowy komentarz do tego elementu.',\n        'visibility'    => 'Zmienia widoczność komentarza :name.',\n    ],\n    'move'          => [\n        'copy'      => [\n            'helper'    => 'Zachowuje kopię komentarza w :name',\n        ],\n        'helper'    => 'Przenosi lub kopiuje komentarz :name do innego elementu',\n        'title'     => 'Przenoszenie komentarza',\n    ],\n    'permissions'   => [\n        'actions'   => [\n            'members'   => 'Dodaj członków',\n            'roles'     => 'Dodaj role',\n        ],\n        'helpers'   => [\n            'members'   => 'Zapewnia jednemu lub kilku członkom specjalnie uprawnienia w tym komentarzu.',\n            'roles'     => 'Zapewnia jednej lub kilku rolom specjalnie uprawnienia w tym komentarzu.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Tytuł komentarza',\n    ],\n    'position'      => [\n        'dont_change'   => 'Nie zmienaj',\n        'first'         => 'Pierwszy',\n        'last'          => 'Ostatni',\n    ],\n    'remove'        => [\n        'title' => 'Usuwanie komentarza',\n    ],\n    'visibility'    => [\n        'helper'    => 'Zmienia widoczność komentarza :name',\n        'title'     => 'Widoczność komentarza',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Stwórz nowy wzór znacznika',\n    ],\n    'create'        => [\n        'success'   => 'Stworzono wzór :name',\n        'title'     => 'Nowy wzór',\n    ],\n    'destroy'       => [\n        'success'   => 'Usunięto wzór :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Zmieniono wzór :name.',\n        'title'     => 'Edycja wzoru :name',\n    ],\n    'fields'        => [\n        'name'  => 'Nazwa wzoru',\n    ],\n    'lists'         => [\n        'empty' => 'W kampanii nie ma na razie wzorów znaczników.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nazwa wzoru',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/profiles.php",
    "content": "<?php\n\nreturn [\n    'appearance'                    => [],\n    'avatar'                        => [\n        'success'   => 'Zmieniono awatar.',\n    ],\n    'campaign_switcher_order_by'    => [],\n    'edit'                          => [\n        'success'   => 'Zmieniono profil',\n    ],\n    'editors'                       => [],\n    'fields'                        => [\n        'avatar'                    => 'Awatar',\n        'bio'                       => 'Życiorys',\n        'email'                     => 'Email',\n        'hide_subscription'         => 'Ukryj moje imię na stronie :hall_of_fame.',\n        'last_login_share'          => 'Informuj innych członków kampanii o moim ostatnim logowaniu',\n        'link'                      => 'Media społecznościowe',\n        'login_sharing'             => 'Informacja o logowaniu',\n        'name'                      => 'Nazwa',\n        'new_password'              => 'Nowe hasło',\n        'new_password_confirmation' => 'Potwierdź nowe hasło',\n        'newsletter'                => 'Chcę dostawać okazjonalne emaile',\n        'password'                  => 'Obecne hasło',\n        'profile-name'              => 'Nazwa profilu',\n        'pronouns'                  => 'Zaimki',\n        'settings'                  => 'Ustawienia',\n        'subscription_hiding'       => 'Tajna subskrybcja',\n        'theme'                     => 'Motyw',\n    ],\n    'helpers'                       => [\n        'link'          => 'Zmienia odnośnik do profilu społecznościowego wyświetlany w twoim :profile i na :marketplace. Jeżeli wiersz jest pusty, użyta zostanie nazwa konta.',\n        'profile-name'  => 'Zmienia nazwę wyświetlaną w twoim :profile i na :marketplace. Jeżeli wiersz jest pusty, użyta zostanie nazwa konta.',\n        'pronouns'      => 'Zmienia zaimki wyświetlane w twoim :profile i na :marketplace. Jeżeli wiersz jest pusty, nie będziemy informować o twoich zaimkach.',\n    ],\n    'link'                          => [\n        'button'    => 'Profil społecznościowy :name',\n    ],\n    'newsletter'                    => [\n        'helpers'   => [\n            'header'    => 'Zasubskrybuj następujące powiadomienia e-mailem, by być na bieżąco z Kanką.',\n        ],\n        'options'   => [\n            'monthly'   => 'Newsletter Kanki',\n        ],\n        'title'     => 'Newslettery',\n        'updated'   => 'Zmieniono ustawienia newslettera.',\n    ],\n    'password'                      => [\n        'success'   => 'Zmieniono hasło',\n    ],\n    'placeholders'                  => [\n        'bio'                       => 'Kilka informacji osobistych do wyświetlenia w profilu publicznym.',\n        'email'                     => 'Twój adres email',\n        'name'                      => 'Nazwa, która będzie wyświetlana',\n        'new_password'              => 'Twoje nowe hasło',\n        'new_password_confirmation' => 'Potwierdź nowe hasło',\n        'password'                  => 'Potwierdź zmianę wpisując hasło',\n    ],\n    'sections'                      => [\n        'dangerzone'    => 'Uwaga!',\n        'delete'        => [\n            'confirm'       => 'Usuń teraz moje konto',\n            'delete'        => 'Usuń konto',\n            'goodbye'       => 'Jeśli tak, przepisz :code w polu poniżej.',\n            'helper'        => 'Usunięcie konta spowoduje również usunięcie wszystkich kampanii, których jesteś jednym członkiem. To działanie nieodwracalne, którego nie można cofnąć.',\n            'subscribed'    => 'Anuluj :subscription zanim możliwe będzie usunięcie konta.',\n            'title'         => 'Usuwanie konta',\n            'warning'       => 'Po usunięciu konta wszystkie dane zostaną wykasowane. Czy na pewno chcesz to zrobić?',\n        ],\n        'password'      => [\n            'title' => 'Zmiana hasła',\n        ],\n    ],\n    'settings'                      => [\n        'helpers'   => [\n            'bio'       => 'Życiorys będzie widoczny w twoim :link.',\n            'profile'   => 'profilu publicznym',\n        ],\n        'success'   => 'Zmieniono ustawienia.',\n    ],\n    'theme'                         => [\n        'success'   => 'Zmieniono motyw.',\n        'themes'    => [\n            'dark'      => 'Ciemny',\n            'default'   => 'Domyślny',\n            'future'    => 'Futurystyczny',\n            'midnight'  => 'Granatowy',\n        ],\n    ],\n    'title'                         => 'Aktualizuj profil',\n    'workflows'                     => [\n        'created'   => 'Stworzony element',\n        'default'   => 'Lista elementów',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nowe zadanie',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'elements'      => [\n        'create'    => [\n            'success'   => 'Nowy element zadania :name',\n            'title'     => 'Nowy element zadania :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Usunięto element zadania :entity.',\n        ],\n        'edit'      => [\n            'success'   => 'Zmieniono element zadania :entity.',\n            'title'     => 'Zmień element zadania :name',\n        ],\n        'fields'    => [\n            'entity_or_name'    => 'Wybierz inny element kampanii albo nadaj nazwę temu elementowi.',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Kopiuj elementy związane z zadaniem',\n        'date'          => 'Data',\n        'element_role'  => 'Rola',\n        'instigator'    => 'Zleceniodawna',\n        'is_completed'  => 'Ukończona',\n        'location'      => 'Miejsce rozpoczęcia',\n        'role'          => 'Rola',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'Wybierz, jeżeli zadanie można uznać za ukończone.',\n    ],\n    'hints'         => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Twórz zadania, by dokumentować cele drużyny, przebieg zdarzeń oraz motywacje postaci.',\n    ],\n    'placeholders'  => [\n        'date'      => 'Data zadania w prawdziwym świecie',\n        'entity'    => 'Nazwa elementu z tego zadania',\n        'location'  => 'Miejsce, w którym rozpoczyna się zadanie.',\n        'role'      => 'Rola elementu w tym zadaniu',\n        'type'      => 'Wątek osobisty, misja poboczna, zadanie główne',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Dodaj element',\n        ],\n        'tabs'      => [\n            'elements'  => 'Elementy',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nowa rasa',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'members'   => 'Członkowie',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Ta rasa wymarła.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Zaprojektuj gatunki, kultury i odmiany istot zamieszkujących twój świat.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Dodaje jedną lub więcej postaci do :name',\n            'submit'    => 'Dodaj członka',\n            'success'   => '{0} Nie dodano członków.|{1} Dodano 1 członka.|[2,*] Dodano :count członków.',\n            'title'     => 'Nowi członkowie',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Człowiek, sidhe, borg',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pl/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Twoja sesja wygasła. Spróbuj jeszcze raz.',\n    'unknown_entity'    => 'Przepraszamy, nie wiemy co to jest \\':entity\\'.',\n];\n"
  },
  {
    "path": "lang/pl/referrals.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'copy'  => 'Kopiuj',\n    ],\n    'benefits'  => 'Wspólne budowanie światów.',\n    'fields'    => [\n        'link'  => 'Twój odnośnik ze skierowaniem:',\n    ],\n    'stats'     => [\n        'badge'         => 'Odznaka: Światotórca :level',\n        'empty'         => 'Na razie brak. Wyślij link, by zacząć.',\n        'invited'       => 'Zaproszono:',\n        'subscribers'   => 'Skieowanych subskrybentów: :amount',\n        'users'         => '[1] jeden użytkownik|{2,*} :użytnowników',\n    ],\n    'title'     => 'Skieruj znajomych do Kanki',\n    'toasts'    => [\n        'copied'    => 'Skopiowano odnośnik do schowka',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Wydarzenie',\n        'livestream'    => 'Livestream',\n        'other'         => 'Inne',\n        'release'       => 'Aktualizacja',\n        'vote'          => 'Głosowanie społeczności',\n    ],\n    'index'         => [\n        'description'   => 'Najnowsze aktualizacje kanka.io',\n        'title'         => 'Aktualizacja',\n    ],\n    'post'          => [\n        'footer'    => 'Przez :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Powrót do aktualizacji',\n        'title'     => 'Aktualizacja :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'Das Schwarze Auge',\n        '12'=> 'Świat Mroku',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/search/fulltext.php",
    "content": "<?php\n\nreturn [\n    'searching' => 'Przeszukuje elementy, notatki i cechy w poszukiwaniu słowa :term.',\n    'title'     => 'Przeszukiwanie tekstu',\n];\n"
  },
  {
    "path": "lang/pl/search.php",
    "content": "<?php\n\nreturn [\n    'fulltext'      => 'Szukaj wszędzie',\n    'lookup'        => [\n        'empty'     => 'Brak wyników',\n        'hint'      => 'Wpisz przynajmniej 3 litery, by przeszukać całą kampanię.',\n        'keyboard'  => 'Wciśnij :k by wyszukać, :esc by odrzucić',\n        'recents'   => 'Ostatnie',\n        'results'   => 'Wyniki',\n    ],\n    'no_results'    => 'Nie znaleziono.',\n    'placeholder'   => 'SZUKAJ',\n    'preview'       => [\n        'links'             => 'Odnośniki',\n        'no-connections'    => 'Brak przypiętych relacji do wyświetlenia',\n    ],\n    'title'         => 'Szukaj',\n];\n"
  },
  {
    "path": "lang/pl/seo.php",
    "content": "<?php\n\nreturn [\n    'dashboard'     => 'Pulpit kampanii :campaign',\n    'entity-list'   => 'Przeglądaj :module kampanii :campaign',\n];\n"
  },
  {
    "path": "lang/pl/settings/account.php",
    "content": "<?php\n\nreturn [\n    'subtitle'  => 'Kontroluj adres email, hasło, opcje bezpieczeństwa i inne ustawienia konta.',\n    'title'     => 'Dane konta',\n];\n"
  },
  {
    "path": "lang/pl/settings/api.php",
    "content": "<?php\n\nreturn [\n    'applications'      => [\n        'title' => 'Autoryzowane aplikacje',\n    ],\n    'clients'           => [\n        'empty' => 'Nie stworzono żadnego klienta OAuth.',\n        'form'  => [\n            'name'                  => 'Nazwa klienta',\n            'name_helper'           => 'Słowo, które twoi użytkownicy rozpoznają i mu zaufają.',\n            'name_placeholder'      => 'Nazwa dla klienta',\n            'redirect'              => 'Przekierowanie',\n            'redirect_helper'       => 'Aplikacje z autoryzowanym wywołaniem zwrotnym.',\n            'redirect_placeholder'  => 'http://my-super-app.com/callback',\n        ],\n        'new'   => 'Stwórz nowego klienta',\n        'title' => 'Klienty OAuth',\n        'update'=> 'Zmiana klienta',\n    ],\n    'fields'            => [\n        'client'        => 'ID klienta',\n        'client_name'   => 'Nazwa klienta',\n        'scopes'        => 'Zakresy',\n        'secret'        => 'Tajne',\n        'token_name'    => 'Nazwa klucza',\n    ],\n    'new'               => [\n        'copy'  => 'Klucz skopiowano do schowka',\n        'title' => 'Twój nowy osobisty klucz dostępu:',\n    ],\n    'revoke'            => 'Wycofaj',\n    'revoke-confirm'    => 'Potwierdź wycofanie',\n    'tokens'            => [\n        'empty' => 'Nie stworzono żadnego klucza dostępu.',\n        'form'  => [\n            'name'              => 'Nazwa klucza',\n            'name_placeholder'  => 'Nazwa dla klucza',\n        ],\n        'new'   => 'Stwórz nowy klucz',\n        'title' => 'Osobiste klucze dostępu',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/settings/appearance.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'learn-more'    => 'Więcej informacji o ustawieniach znajdziesz w dokumentacji.',\n        'save'          => 'Zapisz ustawienia',\n    ],\n    'campaign-switcher' => [\n        'alphabetical'      => 'Alfabetycznie (A-Z)',\n        'date_created'      => 'Data utworzenia (najpierw najstarsze)',\n        'date_joined'       => 'Data dołączenia (najpierw najstarsze)',\n        'r_alphabetical'    => 'Alfabetycznie (Z-A)',\n        'r_date_created'    => 'Data utworzenia (najpierw najnowsze)',\n        'r_date_joined'     => 'Data dołączenia (najpierw najnowsze)',\n    ],\n    'dismissible'       => [\n        'main'  => 'Kontroluj wygląd Kanki. Ustawienia konkretnych kampanii mają pierwszeństwo przed ogólnymi.',\n    ],\n    'editors'           => [\n        'default'   => 'Domyślny (:name)',\n        'legacy'    => 'Dawniejszy (:name)',\n    ],\n    'explore'           => [\n        'grid'  => 'Kafelki (domyślne)',\n        'table' => 'Tabela',\n    ],\n    'fields'            => [\n        'campaign-order'        => 'Kolejność wyświetlania kampanii',\n        'date-format'           => 'Format daty',\n        'editor'                => 'Edytor tekstu',\n        'entity-explore'        => 'Listy elementów',\n        'mentions'              => 'Wzmianki w czasie edycji',\n        'new-entity-workflow'   => 'Praca nad nowym elementem',\n        'pagination'            => 'Wpisy na stronę',\n        'theme'                 => 'Preferowany motyw',\n    ],\n    'helpers'           => [\n        'advanced-mentions'     => 'W czasie wpisywania tekstu wzmianki mogą być wyświetlane w postaci nazw elementów lub wzmianek zaawansowanych.',\n        'campaign-order'        => 'Określ kolejność wyświetlania kampanii w menu ich wyboru.',\n        'date-format'           => 'Określ format wyświetlania dat z rzeczywistego kalendarza (gdy to możliwe).',\n        'entity-explore'        => 'Określ sposób wyświetlania elementów kampanii.',\n        'new-entity-workflow'   => 'Wskaż, jaki interface ma się wyświetlić po stworzeniu nowego elementu.',\n        'overridable'           => 'Indywidualne ustawienia kampanii mają pierwszeństwo.',\n        'pagination'            => 'Określ ile elementów długich list ma się wyświetlać na jednej stronie.',\n        'theme'                 => 'Wybierz, jak Kanka wyglądać będzie u ciebie.',\n    ],\n    'mentions'          => [\n        'advanced'  => 'Wyświetlaj wzmianki zaawansowane :code',\n        'default'   => 'Wzmianki jako nazwy elementów',\n    ],\n    'nested'            => [],\n    'success'           => 'Zapisano opcje wyglądu.',\n    'values'            => [\n        'pagination'        => ':amount wyników na stronie',\n        'pagination-sub'    => ':amount (dostępne dla subskrybentów)',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'boost_name'    => 'Doładuj :name',\n    ],\n    'available' => 'Dostępne doładowania :amount/:total',\n    'benefits'  => [\n        'boosted'       => 'Użycie :one doładowania zapewnia dostęp do następujących funkcji: :marketplace, zmiana motywu, możliwość załączania większych plików, odzyskiwanie usuniętych elementów i :more.',\n        'more'          => 'inne świetne opcje.',\n        'superboosted'  => 'Turbodoładowanie kampanii z pomocą :amount doładowań odblokowuje wszystkie opcje kampanii doładowanej oraz galerię, pełny dziennik zmian każdego elementu i :more.',\n    ],\n    'boost'     => [\n        'actions'   => [\n            'confirm'   => 'Doładuj!',\n            'remove'    => 'Wycofaj doładowanie :campaign',\n            'subscribe' => 'Zasubskrybuj Kankę',\n            'upgrade'   => 'Zwiększ poziom subskrybcji',\n        ],\n        'confirm'   => 'Wspaniale, zamierzasz doładować :campaign. To działanie wykorzysta jedno (:cost) z doładowań, których możesz użyć.',\n        'duration'  => 'Doładowania pozostają przypisane do kampanii póki ich nie wycofasz ręcznie albo nie zakończysz sybskrypcji.',\n        'errors'    => [\n            'boosted'           => 'O nie! Najwyraźniej :campaign jest już doładowana!',\n            'out-of-boosters'   => 'O nie! Brakuje ci doładowań. Masz ich :available, a potrzebujesz :cost. Możesz albo wycofać doładowanie innej kampanii albo :upgrade.',\n        ],\n        'pitch'     => 'Zasubskrybuj, aby otrzymać doładowania.',\n        'success'   => 'Kampania :campaign jest od teraz doładowana. Ciesz się nowymi możliwościami!',\n        'title'     => 'Doładuj :campaign',\n        'upgrade'   => 'zwiększyć poziom subskrypcji',\n    ],\n    'campaign'  => [\n        'boosted'       => 'Doładowana przez :user od :time',\n        'premium'       => 'Premium dzięki :user od :time',\n        'standard'      => 'Standardowa',\n        'superboosted'  => 'Turbodoładowana przez :user od :time',\n        'unboosted'     => 'Niedoładowana',\n    ],\n    'intro'     => [\n        'anyone'    => 'Możesz doładowywać kampanie, które stworzył ktoś inny, o ile jesteś ich uczestnikiem albo możesz je zobaczyć. To znaczy, kampanie w które grasz albo które możesz przeglądać, gdyż są :public.',\n        'data'      => 'Po usunięciu doładowań kampanii dostęp do dodatkowych opcji zostaje usunięty. Aby go odzyskać należy doładować kampanię ponownie.',\n        'first'     => 'Przydzielając kampaniom doładowania zyskujesz dostęp do funkcji zaawansowanych. Liczba dostępnych doładowań zależy od :subsription - pozostaje do twojej dyspozycji, póki subskrybujesz Kankę. By doładować kampanię wystarczy przydzielić jej jedno doładowanie. Turbodoładowanie kampanii wymaga trzech doładowań.',\n    ],\n    'pitch'     => [\n        'benefits'      => [\n            'backup'        => 'Możliwość odzyskania usuniętych elementów do :days wstecz',\n            'customisable'  => 'Pełną kontrolę nad wyglądem kampanii',\n            'icons'         => 'Dostęp do tysięcy ikon, które można umieszczać na mapie i w historii',\n            'title'         => 'W doładowanych kampaniach otrzymujesz',\n            'upload'        => 'Możliwość dodawania większych plików (dla wszystkich)',\n        ],\n        'description'   => 'Doładowanie kampanii zapewnia dostęp do świetnych możliwości, i to dla wszystkich uczestników. Mało ci? Spróbuj turbodoładowania.',\n        'more'          => 'Pełną listę udogodnień znajdziesz na stronie :booster.',\n        'title'         => 'Wznieś kampanię na nowym poziom, zapewniając wszystkim uczestnikom dostęp do licznych udogodnień',\n    ],\n    'ready'     => [\n        'available'         => 'Dostępne doładowania kampanii.',\n        'pricing'           => 'Każdy poziom subskrypcji zawiera przynajmniej jedno doładowanie kampanii. Ceny zaczynają się od :amount miesięcznie.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Doładuj kampanię',\n    ],\n    'superboost'=> [\n        'actions'   => [\n            'confirm'   => 'Turbodoładuj!',\n            'instead'   => 'Turbodoładuj za :count!',\n            'remove'    => 'Wycofaj turbodoładnie :campaign',\n        ],\n        'confirm'   => 'Wspaniale, zamierzasz turbodoładować :campaign. To działanie wymaga wykorzystania trzech (:cost) spośród twoich dostępnych doładowań.',\n        'errors'    => [\n            'boosted'   => 'O nie! Najwyraźniej :campaign jest już turbodoładowana!',\n        ],\n        'success'   => 'Kampania :campaign jest od teraz turbodoładowana. Ciesz się nowymi możliwościami!',\n        'title'     => 'Turbodoładuj :campaign',\n        'upgrade'   => 'Masz chrapkę na ostateczną wersję Kanki? Turbodoładuj :campaign za pomocą :cost dodatkowych doładowań.',\n    ],\n    'title'     => 'Doładowania kampanii',\n    'unboost'   => [\n        'confirm'   => 'Tak, na pewno',\n        'status'    => [\n            'boosting'      => 'doładowanie',\n            'superboosting' => 'turbodoładowanie',\n        ],\n        'success'   => 'Kampania :campaign nie jest już turbodoładowana, odzyskujesz swoje doładowania.',\n        'title'     => 'Usuwanie doładowania',\n        'warning'   => 'Czy na pewno chcesz zakończyć :action :campaign? Odzyskasz w ten sposób wydane doładowania, a elementy kampanii związane z doładowaniem zostaną ukryte aż do ponownego doładowania.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/settings/premium.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'remove'    => 'Usuń premium',\n        'unlock'    => 'Aktywuj premium',\n    ],\n    'create'        => [\n        'actions'   => [\n            'confirm'   => 'Wersja premium!',\n        ],\n        'confirm'   => 'Hurra! Zaraz odblokujesz wersję premium kampanii :campaign. Użyjesz w tym celu jednego z dostępnych rozszerzeń.',\n        'duration'  => 'Kampanie premium zachowują status, póki go nie usuniesz ręcznie albo do zakończenia subskrypcji.',\n        'success'   => 'Kampania :campaign ma teraz wersję premium. Korzystaj z wielu świetnych opcji!',\n    ],\n    'exceptions'    => [\n        'already'       => 'W tej kampanii używasz już opcji premium.',\n        'out-of-stock'  => 'Nie masz wolnych rozwinięć do wersji premium. Usuń status premium innej kampanii albo :upgrade.',\n    ],\n    'pitch'         => [\n        'description'   => 'Używaj wersji premium kampanii, by odblokować wspaniałe opcje dla wszystkich uczestników.',\n        'title'         => 'W kampaniach premium otrzymujesz',\n    ],\n    'ready'         => [\n        'available'         => 'Dostępne kampanie premium.',\n        'pricing'           => 'Każdy poziom subskrypcji oferuje co najmniej jedno rozwinięcie do wersji premium. Cena zaczyna się od :amount miesięcznie.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Aktywuj premium',\n    ],\n    'remove'        => [\n        'confirm'   => 'Tak, na pewno',\n        'cooldown'  => 'Funkcje premium kampanii :campaign można usunąć po :date.',\n        'success'   => 'Z :campaign usunięto wersję premium. Możesz teraz odblokować ten status w innej kampanii.',\n        'title'     => 'Usuwanie opcji premium',\n        'warning'   => 'Czy na pewno usunąć wersję premium kampanii :campaign? Pozwoli ci to nadać status premium innej kampanii, a cała zawartość premium zostanie ukryta do ponownej aktywacji wersji premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'               => [\n                'disable'           => 'Wyłącz autoryzację dwueatpową',\n                'disable-confirm'   => 'Kliknij ponownie by potwierdzić',\n                'finish'            => 'Skończ konfigurację i się zaloguj',\n            ],\n            'activation_helper'     => 'Wykonuj poniższe polecenia by skonfigurować autoryzację dwuetapową.',\n            'disable'               => [\n                'helper'    => 'Jeżeli chcesz wyłączyć autoryzację dwuetapową, kliknij poniżej. Pamiętaj przy tym, że konto będzie od tej pory dostępne dla każdej osoby znającej hasło.',\n                'title'     => 'Wyłącz autoryzację dwuetapową',\n            ],\n            'enable_instructions'   => 'By zacząć aktywację, wygeneruj autoryzacyjny kod QR i zeskanuj go w Aplikacji Autoryzacyjnej Goole (:ios, :android) albo innym programie tego rodzaju',\n            'enabled'               => 'Twoje konto zabezpieczone jest obecnie autoryzacją dwuetapową',\n            'error_enable'          => 'Niewłaściwy kod, spróbuj ponownie',\n            'fields'                => [\n                'otp'       => 'Wpisz Hasło Jednorazowe (OTP) z aplikacji autoryzacyjnej',\n                'qrcode'    => 'Zeskanuj poniższy kod QR aplikacją autoryzacyjną, by uzyskać Hasło Jednorasowe (OTP)',\n            ],\n            'generate_qr'           => 'Wygeneruj kod QR',\n            'helper'                => 'Autoryzacja dwuetapowa zwiększa bezpieczeństwo, wymaga bowiem dwóch metod weryfikacji tożsamości podczas każdego logowania',\n            'learn_more'            => 'Więcej o autoryzacji dwuetapowej',\n            'social'                => 'Autoryzacja dwuetapowa Kanki dostępna jest dla użytkowników logujących się za pomocą emaila i hasła. Zmień metodę logowania zanim uzyskasz dostęp do tej opcji.',\n            'success_disable'       => 'Wyłączono autoryzację dwuetapową',\n            'success_enable'        => 'Włączono autoryzację dwuetapową. Zaloguj się ponownie by dokończyć konfigurację.',\n            'success_key'           => 'Wygenerowano kod QR. Zakończ konfigurację by aktywować autoryzację dwuetapową',\n            'title'                 => 'Autoryzacja dwuetapowa',\n        ],\n        'actions'           => [\n            'social'            => 'Przejdź na Logowanie Kanki',\n            'update_email'      => 'Zmień email',\n            'update_password'   => 'Zmień hasło',\n        ],\n        'email'             => 'Zmiana emaila',\n        'email_success'     => 'Zmieniono email.',\n        'password'          => 'Zmiana hasła',\n        'password_success'  => 'Zmieniono hasło.',\n        'social'            => [\n            'error'     => 'To konto używa już Logowania Kanki',\n            'helper'    => 'Twoim kontem zarządza obecnie :provider. Możesz przejść na system logowania, którym zarządza Kanka, ustawiając hasło.',\n            'success'   => 'Konto używa od teraz logowania Kanki.',\n            'title'     => 'Kanka przez serwis społecznościowy',\n        ],\n        'title'             => 'Konto',\n    ],\n    'api'           => [\n        'helper'    => 'Witaj w Kanka API. Generuj Osobiste Żetony Dostępu, by używać wywołań API do gromadzenia informacji o kampaniach, w których uczestniczysz.',\n        'link'      => 'Przeczytaj dokumentację API',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Połącz',\n            'remove'    => 'Usuń',\n        ],\n        'benefits'  => 'Kanka posiada możliwość integracji z kilkoma narzędziami zewnętrznymi. Kolejne dostępne będą w przyszłości.',\n        'discord'   => [\n            'confirm'   => 'Czy na pewno chcesz odłączyć Discord? Stracisz wszystkie zsynchronizowane z nim role.',\n            'errors'    => [\n                'add'   => 'Podczas łączenia konta Kanki z Discordem nastąpił błąd. Spróbuj jeszcze raz.',\n            ],\n            'success'   => [\n                'add'       => 'Połączono z kontem Discord.',\n                'remove'    => 'Odłączono konto Discord.',\n            ],\n            'text'      => 'Automatyczny dostęp do poziomu subskrypcji.',\n            'unlock'    => 'Odblokuj role na Discordzie',\n        ],\n        'title'     => 'Integracja z aplikacjami',\n    ],\n    'billing'       => [\n        'placeholder'   => 'Jeżeli chcesz, by do rachunku dodano dodatkowe dane kontaktowe albo podatkowe (adres firmy, numer NIP i tak dalej), wpisz je poniżej. Pojawią się w rozliczeniu.',\n        'save'          => 'Zapisz dane płatności',\n        'title'         => 'Dane płatności',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'Kampania :name jest już doładowana.',\n            'exhausted_boosts'      => 'Nie masz już doładowań. Musisz usunąć doładowanie z którejś kampanii, by je ponownie wykorzystać.',\n            'exhausted_superboosts' => 'Nie masz doładowań. Potrzebujesz 3, by turbodoładować kampanię.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Austria',\n        'belgium'       => 'Belgia',\n        'france'        => 'Francja',\n        'germany'       => 'Niemcy',\n        'italy'         => 'Włochy',\n        'netherlands'   => 'Holandia',\n        'spain'         => 'Hiszpania',\n    ],\n    'invoices'      => [],\n    'layout'        => [\n        'title' => 'Układ',\n    ],\n    'marketplace'   => [],\n    'menu'          => [\n        'account'               => 'Konto',\n        'api'                   => 'API',\n        'appearance'            => 'Wygląd',\n        'apps'                  => 'Aplikacje',\n        'boosters'              => 'Doładowania',\n        'notifications'         => 'Powiadomienia',\n        'other'                 => 'Inne',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Opcje płatności',\n        'personal_settings'     => 'Ustawienia osobiste',\n        'premium'               => 'Kampanie premium',\n        'profile'               => 'Profil',\n        'settings'              => 'Ustawienia',\n        'subscription'          => 'Subskrypcja',\n        'subscription_status'   => 'Status subskrypcji',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Przestarzała funkcja. Jeżeli chcesz wspierać Kankę, rozważ subskrypcję. Integracja z Patreonem jest dostępna tylko dla osób, które połączyły swoje konta Patren z Kanką zanim wycofaliśmy się z tego serwisu.',\n        'pledge'        => 'Deklaracja :name',\n        'remove'        => [\n            'button'    => 'Odłącz konto Patreon',\n            'success'   => 'Odłązcono twoje konto Patreon',\n            'text'      => 'Dołączenie kontra Patreon spowoduje usunięcie z listy wspierających, utratę doładować kampanii i innych korzyści dostępnych dla wspierających. Treści związane z doładowaniem (na przykład nagłówki) nie zostają usunięte. Odnawiając subskrypcje odzyskasz dostęp do danych oraz możliwość ponownego doładowywania kampanii.',\n            'title'     => 'Odłącz swoje konto Patreon od Kanki',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Aktualizuj profil',\n        ],\n        'avatar'    => 'Zdjęcie profilowe',\n        'success'   => 'Zmieniono profil.',\n        'title'     => 'Profil osobisty',\n    ],\n    'referrals'     => [\n        'title' => 'Skierowania',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Usuń subskrypcję',\n            'subscribe'         => 'Subskrybuj',\n            'update_currency'   => 'Zapisz preferowaną walutę',\n        ],\n        'billing'               => [\n            'helper'    => 'Informacje o płatnościach bezpiecznie przetwarza i przechowuje :stripe. To metoda płatności stosowana we wszystkich subskrypcjach.',\n            'saved'     => 'Zapisz metodę płatności',\n        ],\n        'cancel'                => [\n            'grace'     => [\n                'text'  => 'Twoja subskrypcja zostanie anulowania :date, kiedy to kampanie premium zmienią się w zwykłe i utracisz dostęp do funkcji dostępnych dla wspierających Kankę.',\n                'title' => 'Okres karencji',\n            ],\n            'options'   => [\n                'competitor'        => 'Wybieram produkt konkurencji',\n                'financial'         => 'Moja sytuacja finansowa się zmieniła',\n                'missing_features'  => 'Nie ma opcji, których potrzebuję',\n                'not_for'           => 'Subskrybuję dla kogoś innego',\n                'not_playing'       => 'Już nie gram albo kampania została zawieszona',\n                'not_using'         => 'Nie używam ostatnio Kanki',\n                'other'             => 'Inne',\n                'testing'           => 'Tylko testuję Kankę',\n            ],\n            'text'      => 'Szkoda, że rezygnujesz! Po zaniechaniu subskrypcji konto pozostanie aktywne do końca okresu rozliczeniowego. Potem stracisz doładowania i inne korzyści wynikające ze wspierania Kanki. Wypełniając poniższy formularz nasz nam znać, co możemy poprawić i dlaczego rezygnujesz.',\n            'title'     => 'Anulowane subskrybcji',\n        ],\n        'cancelled'             => 'Anulowano subskrypcję. Możesz ją odnowić, gdy tylko ta wygaśnie.',\n        'change'                => [\n            'text'  => [\n                'downgrade_monthly' => 'Zmniejszasz poziom subskrybcji do :tier, więc miesięczy rachunek wynosić będzie od tej pory :amount.',\n                'downgrade_yearly'  => 'Zmniejszasz poziom subskrybcji do :tier, więc roczny rachunek wynosić będzie od tej pory :amount.',\n                'monthly'           => 'Subskrybujesz na poziomie :tier, płacąc miesięcznie :amount.',\n                'upgrade_monthly'   => 'Zwiększasz subskrypcję do wersji :tier za :upgrade, więc miesięczny rachunek wyniesie :amount',\n                'upgrade_paypal'    => 'Zwiększasz subskrypcję do :tier za :upgrage do :date.',\n                'upgrade_yearly'    => 'Zwiększasz subskrypcję do wersji :tier za :upgrade, więc roczny rachunek wyniesie :amount',\n                'yearly'            => 'Subskrybujesz na poziomie :tier, płacąc rocznie :amount.',\n            ],\n            'title' => 'Zmiana poziomu subskrypcji',\n        ],\n        'coupon'                => [\n            'check'         => 'Sprawdź kod promocyjny',\n            'invalid'       => 'Niewłaściwy kod promocyjny.',\n            'label'         => 'Kod promocyjny',\n            'percent_off'   => 'Uzyskujesz zniżką na pierwszą roczną subskrypcję w wysokości :percent%!',\n        ],\n        'currencies'            => [\n            'brl'   => 'BRL',\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Zmień preferowaną walutę rozliczenia',\n        ],\n        'errors'                => [\n            'callback'      => 'Nasz dostawca płatności zgłosił błąd. Spróbuj ponownie i skontaktuj się z nami, jeżeli się powtórzy.',\n            'failed'        => 'Mamy obecnie kłopoty techniczne z systemem opłat. Pomoc uzyskasz pod adresem o :email.',\n            'subscribed'    => 'Nie można przetworzyć subskrypcji. Stripe sugeruje następującą radę.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Aktywna od',\n            'active_until'      => 'Aktywna do',\n            'billing'           => 'Płatność',\n            'currency'          => 'Waluta płatności',\n            'payment_method'    => 'Metoda płatności',\n            'plan'              => 'Obecny plan',\n            'reason'            => 'Powód',\n            'reset'             => 'Reset informacji o płatnościach',\n            'reset_billing'     => 'Rozumiem, że zmiana waluty powoduje usunięcie historii płatności i konieczność ponownego wprowadzenia metody płatności.',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Opłać subskrypcję używając :method. Ten sposób płatności nie odnawia się automatycznie na koniec cyklu. :method jest dostępna tylko w Euro.',\n            'alternatives-2'        => 'Opłać subskrypcję za pomocą :method. To płatność jednorazowa, która nie odnowi się automatycznie na koniec okresu rozliczeniowego.',\n            'alternatives_warning'  => 'Jeżeli używasz tej metody, nie możesz zmienić poziomu subskrypcji. Zasubskrybuj ponownie, gdy ta subskrypcja wygaśnie.',\n            'alternatives_yearly'   => 'Z powodu ograniczeń cyklu płatniczego, :method jest dostępna tylko dla subskrypcji rocznych.',\n            'currency_block'        => 'Zmiana waluty jest niemożliwa podczas aktywnej subskrypcji Kanki. Możesz zmienić walutę po zakończeniu subskrypcji.',\n            'currency_reset'        => 'Zmiana waluty usunie historię opłat i wymagać będzie ponownego wprowadzenia metody płatności.',\n            'paypal_v3'             => 'Opłać bezpiecznie roczną subskrypcję przy pomocy PayPala.',\n            'stripe'                => 'Informacje o płatnościach bezpiecznie przetwarza i przechowuje :stripe.',\n        ],\n        'manage_subscription'   => 'Zarządzaj subskrypcją',\n        'payment_method'        => [\n            'actions'       => [\n                'add'               => 'Dodaj',\n                'add_new'           => 'Dodaj metodę płatności',\n                'change'            => 'Zmień metodę płatności',\n                'save'              => 'Zapisz metodę płatności',\n                'show_alternatives' => 'Alternatywne sposoby płatności',\n            ],\n            'add_one'       => 'Nie masz zapisanych metod płatności.',\n            'alternatives'  => 'Możesz subskrybować Kankę przy pomocy tych alternatyw. Twoje konto zostanie obciążone raz i subskrypcja nie odnowi się automatycznie.',\n            'card'          => 'Karta',\n            'card_name'     => 'Nazwisko na karcie',\n            'country'       => 'Kraj pobytu',\n            'ending'        => 'Ważność do',\n            'helper'        => 'Karta zostanie użyta do wszystkich twoich subskrypcji',\n            'new_card'      => 'Dodaj metodę płatności',\n            'saved'         => ':brand o numerze kończącym się na :last4',\n        ],\n        'periods'               => [\n            'monthly'   => 'Miesięczne',\n            'yearly'    => 'Roczne',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => 'Jeśli chcesz, powiedz nam czemu zmniejszasz poziom subskrybcji',\n            'reason'            => 'Jeżeli chcesz, powiedz nam dlaczego rezygnujesz ze wspierania Kanki. Czy brakuje ci jakichś funkcji, czy też zmieniła się twoja sytuacja finansowa?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount rozliczane miesięcznie',\n            'cost_yearly'   => ':currency :amount rozliczane rocznie',\n        ],\n        'sub_status'            => 'Informacje o subskrypcji',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Anuluj subskrybcję',\n                'downgrading'       => 'Skontaktuj się z nami by zmniejszyć poziom subskrypcji',\n                'rollback'          => 'Zmień na Kobolda',\n                'subscribe'         => 'Zmień na poziom :tier miesięcznie',\n                'subscribe_annual'  => 'Zmień na poziom :tier rocznie',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Zarejestrowaliśmy płatność. Otrzymasz powiadomienie kiedy tylko zostanie przetworzona i aktywujemy subskrypcję.',\n            'callback'      => 'Subskrypcja udana. Zaktualizujemy twoje konto gdy tylko obsługujący płatności powiadomi nas o zmianie (to może potrwać kilka minut).',\n            'currency'      => 'Zmieniono walutę rozliczenia.',\n            'subscribed'    => 'Subskrypcja udana. Nie zapomnij o newsletterze głosowań społeczności, by zawsze wiedzieć kiedy rozpoczyna się głosowanie. Możesz zmienić ustawienia newslettera na stronie profilu.',\n        ],\n        'tiers'                 => 'Poziomy subskrypcji',\n        'trial_period'          => 'Subskrypcje roczne mają 14-dniowy okres wypowiedzenia. Jeżeli chcesz anulować subskrypcję roczną i uzyskać zwrot pieniędzy, skontaktuj się z nami przez :email.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Informacje o zmianie subskrypcji',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Wszystkie korzyści subskrypcji pozostaną aktywne do końca okresu rozliczeniowego.',\n                    'boosts'    => 'To samo dotyczy doładowań kampanii. Po utracie doładowania, dodatkowe elementy kampanii nie zostają usunięte, jedynie ukryte.',\n                    'kobold'    => 'By anulować subskrypcję, zmień jej poziom na Kobold.',\n                    'premium'   => 'To samo dotyczy kampanii premium. Po usunięciu rozwinięcia, opcje premium nie zostają usunięte, ale ukryte do czasu ponownej aktywacji.',\n                ],\n                'title'     => 'Gdy anulujesz subskrypcję',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'Twój poziom zostanie aktywny do końca okresu rozliczeniowego, po czym zostanie odpowiednio zmniejszony.',\n                ],\n                'provide_reason'    => 'Powiedz nam proszę, dlaczego zmniejszasz poziom subskrypcji - o ile to możliwe.',\n                'title'             => 'Gdy obniżasz subskrypcję',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Pobierzemy pieniądze od razu i natychmiast uzyskasz dostęp do nowego poziomu.',\n                    'prorate'   => 'Zwiększając subskrypcję z poziomu Owlbear na poziom Elemental płacisz tylko różnicę w cenie.',\n                ],\n                'title'     => 'Gdy podnosisz subskrypcję',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'Nie mogliśmy obciążyć karty. Zaktualizuj dane karty kredytowej - podejmiemy kolejną próbę w ciągu kilku dni. Jeżeli znów się nie uda, twoja subskrypcja zostanie anulowana.',\n            'patreon'       => 'Twoje konto jest powiązane z Patreonem. Usuń swoje konto Patreon z Kanki zanim przejdziesz na bezpośrednią subskrypcję.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'count'             => 'Członek :member',\n        'created_campaigns' => 'Twoje kampanie',\n        'follow_more'       => 'Znajdź kampanie',\n        'followed_campaigns'=> 'Kampanie, które śledzisz',\n        'new_campaign'      => 'Nowa kampania',\n        'public_campaigns'  => 'Kampanie publiczne',\n        'reorder'           => 'Zmień kolejność',\n        'updated'           => 'Zmieniono',\n    ],\n    'dashboard'         => 'Pulpit',\n    'entity-creator'    => 'Szybkie tworzenie',\n    'gallery'           => 'Galeria',\n    'game'              => 'Rozgrywka',\n    'other'             => 'Pozostałe',\n    'recent'            => 'Ostatnie zmiany',\n    'relations'         => 'Relacje',\n    'settings'          => 'Ustawienia',\n    'time'              => 'Czas',\n    'world'             => 'Świat',\n];\n"
  },
  {
    "path": "lang/pl/spotlights.php",
    "content": "<?php\n\nreturn [\n    'applied'       => [\n        'actions'       => [\n            'retract'   => 'Wycofanie zgłoszenia',\n        ],\n        'description'   => 'Zgłoszenie zostało wysłane i jest teraz oceniane. Poinformujemy cię, czy zostało przyjęte, czy odrzucone.',\n        'title'         => 'Zgłoszenie wysłane',\n    ],\n    'apply'         => [\n        'errors'    => [\n            'empty' => 'Pytanie :field wymaga dłuższej odpowiedzi.',\n        ],\n    ],\n    'approved'      => [\n        'description'   => 'Gratulujemy! Zgłoszenie zostało przyjęte i umieściliśmy kampanię na stronie :spotlight.',\n        'title'         => 'Zgłoszenie przyjęte',\n    ],\n    'faq'           => [\n        'finisher'  => 'Zgłoszenie nie gwarantuje wyróżenia. Czytamy je wszystkie, ale nie możemy przyjąć każdego.',\n        'how'       => [\n            'a' => [\n                'end'           => 'Nie liczy się liczba obserwujących, popularność ani poziom subskrybcji.',\n                'lead'          => 'Wybieramy 1-3 kampanii miesięcznie.',\n                'req1'          => 'Wyraźnej specyfiki i tematyki',\n                'req2'          => 'Przemyślanego światotwórstwa',\n                'req3'          => 'Ciekawychy historii i dobrej prezentacji',\n                'requirements'  => 'Wybór jest redakcyjny, a nie konkursowy. Szukamy:',\n            ],\n            'q' => 'Jak kampanie są wybierane?',\n        ],\n        'reapply'   => [\n            'a' => 'Tak. Jeżeli kampania nie została wybrana, możesz ją zgłosić ponownie, zwłaszcza jeśli się rozwinęła.',\n            'q' => 'Czy mogę zgłosić się więcej niż raz?',\n        ],\n        'selected'  => [\n            'a' => [\n                'end'   => 'Przed publikacją otrzymasz zawiadomienie.',\n                'lead'  => 'Po wybraniu:',\n                'req1'  => 'Kampania otrzyma osiągnięcie Wyróżnienie',\n                'req2'  => 'Zostanie przedstawiona na :blog i stronie :showcase',\n                'req3'  => 'Możemy delikatnie zredagować odpowiedzi dla poprawy czytelności',\n            ],\n            'q' => 'Co, jeśli moja kampania zostanie wybrana?',\n        ],\n        'what'      => [\n            'a' => 'Wyróżnienie pozwala pokazać najlepsze kampanie stworzone w Kance. Wybrane zgłoszenia są wyświetalne na stronie Wyróżnienia Kanki i na blogu, pod postacią krótkiego wywiadu.',\n            'q' => 'Czym jest wyróżnienie?',\n        ],\n        'who'       => [\n            'a' => [\n                'end'           => 'Nie liczy się rozmiar ani system.',\n                'lead'          => 'Można zgłosić każdą publiczną kampanię.',\n                'req1'          => 'Być widoczna publicznie',\n                'req2'          => 'Wykazywać aktywność (zawartość, historia lub gracze)',\n                'req3'          => 'Prezentować świat, z którego inni mogą się czegoś nauczyć',\n                'requirements'  => 'Kampania powinna:',\n            ],\n            'q' => 'Kto może się zgłosić?',\n        ],\n    ],\n    'form'          => [\n        'actions'       => [\n            'apply'     => 'Wyślij zgłoszenie',\n            'retract'   => 'Wycofaj zgłoszenie',\n            'save'      => 'Zapisz szkic',\n        ],\n        'draft'         => 'To szkic zgłoszenia. Możesz go zapisać i wrócić do niego później.',\n        'not-public'    => 'Kampania nie jest widoczna dla publiczności, więc nie może zostać wyróżniona.',\n        'preset'        => 'Powiedz nam coś o :campaign i wyjaśnij, czemu twoim zdaniem zasługuje na wyróżnienie. Możesz zapisać fomularz i wrócić do tego pytania później.',\n        'required'      => 'Pole obowiązkowe',\n        'title'         => 'Formularz zgłoszenia do wyróżnienia',\n    ],\n    'overview'      => [\n        'cta'           => 'Zgłoś :name do wyróżnienia',\n        'not-public'    => 'Kampania :name nie jest widoczna dla publiczności',\n        'showcase'      => 'Zobacz wyróżnione kampanie',\n    ],\n    'placeholders'  => [\n        'inspiration'   => 'Książki, gry, historia, muzyka, klimat',\n        'kanka'         => 'Opowiedz, dlaczego Kanka okazała się dobrym narzędziem do budowy tego świata',\n        'proud'         => 'Na przykład lore, gracze, długowieczność, status',\n        'stories'       => 'Tragiczne, heroiczne, polityczne, rodzinne, zupełnie chaotyczne',\n        'time'          => 'Od miesięcy, lat, dziesięcioleci, na przestrzeni wielu żyć?',\n        'world'         => 'Główne motywy, emocje, konflikty (haczyk)',\n    ],\n    'questions'     => [\n        'inspiration'   => 'Co zainspirowało ten świat',\n        'kanka'         => 'Czemu używasz Kanki w swojej kampanii?',\n        'proud'         => 'Co budzi twoją największą dumę?',\n        'share'         => 'Zezwalam zespołowi Kanki na wykorzystanie odpowiedzi w materiałach promocyjnych.',\n        'stories'       => 'Jakie historie powstają podczas waszych sesji?',\n        'time'          => 'Od jak dawna rozwijasz ten świat?',\n        'world'         => 'Co jest istotą tego świata?',\n    ],\n    'rejected'      => [\n        'description'   => 'Twoje zgłoszenie zostało odrzucone. Spróbuj ponownie!',\n        'title'         => 'Zgłoszenie odrzucone',\n    ],\n    'retract'       => [\n        'success'   => 'Twoje zgłoszenie zostało wycofane. Możesz je ponownie edytować.',\n    ],\n    'rules'         => 'Co miesiąc wybieramy 1-3 kampanii do :showcase Kanki. Wybór nie jest gwarantowany. Po wyróżnieniu, kampania otrzymuje specjalne osiągnięcie i publikujemy wywiad z jej twórcą.',\n    'started'       => 'Na początek wybierz którąś ze swoich kampanii',\n    'title'         => 'Zgłoś do wyróżnienia',\n];\n"
  },
  {
    "path": "lang/pl/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => ':user użytkownika',\n    ],\n    'character1'    => [],\n    'character2'    => [],\n    'item1'         => [],\n    'kingdom1'      => [],\n    'kingdom2'      => [],\n    'name'          => ':name (przykład)',\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/pl/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Subskrybcja pozwala dołączać większe obrazki, usuwa reklamy, zapewnia :boosters i :more. Płatności realizuje :stripe, więc nie przechowujemy na naszych serwerach informacji o kartach kredytowych.',\n        'more'  => 'inne świetne opcje',\n    ],\n    'errors'    => [\n        'grace'                 => 'Obecna subskrypcja kończy się :date, potem zostanie odnowiona.',\n        'invalid_card_country'  => [\n            'brl'   => 'Niestety, posiadacze brazylijskich kart kredytowych mogą płacić wyłącznie w BRL. Jeśli uważasz to za błąd, napisz do nas na adres :email.',\n        ],\n        'invalid_currency'      => 'Poprzednia subskrypcja w :old uniemożliwia nową w :new. Przełącz walutę na :old albo napisz do nas na adres: email, jeżeli chcesz ją zmienić.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/cancellation.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'Szkoda, że się żegnamy! Twoja subskrybcja pozostanie aktywna do :date. Potem kampanie premium zmienią status na zwykłe i wyłączymy wszystkie zwiazane z nimi benefity.',\n    'loss'  => [\n        'ads'       => [\n            'title' => 'Wolność od reklam dla ciebie i twoich graczy',\n        ],\n        'discord'   => [\n            'title' => 'Rola \":role\" na Discordzie naszej społeczności',\n        ],\n        'downgrade' => 'Możesz zmniejszyć poziom subskrybcji zamiast zupełnie z niej rezygnować i zachować związne z nią korzyści.',\n        'premium'   => [\n            'players'   => '{1}:count gracz utraci dostęp do funkcji premium |[2,*]:count graczy utraci dostęp do funkcji premium',\n            'plugins'   => '{1}Dostęp do :count zainstalowanego dodatku|[2,*]Dostęp do :count zainstalowanych dodatków',\n            'storage'   => 'Twoje :current',\n            'title'     => '{0}Status premium \":campaign\"|{1}Status premium \":campaign\" i :count innej kampanii|[2,*]Status premium \":campaign\" i :count innych kampanii',\n        ],\n        'roadmap'   => 'Wciąż ulepszamy Kankę zgodnie z sugestiami użytkowników i naszą :roadmap, może funkcja której potrzebujesz jest tuż za rogiem?',\n        'title'     => 'Zanim anulujesz, pomyśl co tracisz:',\n    ],\n    'pause' => [\n        'button'    => 'Wstrzymaj subskrybcję na 1-3 miesięcy',\n        'helper'    => 'Zachowujesz wszystko. Nic nie tracisz. Możesz podjać w każdej chwili.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/cancelled.php",
    "content": "<?php\n\nreturn [\n    'active'    => [\n        'adfree'    => 'Brak reklam',\n        'discord'   => 'Role na :discord tylko dla subskrybentów',\n        'helper'    => 'Twoja subskrypcja zachowuje ważność do :date. Do tego czasu wciąż odnosisz specjalne korzyści, takie jak:',\n        'limit'     => 'Większe limity plików',\n        'more'      => 'I nie tylko!',\n        'premium'   => 'Kampanie premium i ich dodatkowe funkcje',\n        'title'     => 'Korzyści są wciąż aktywne',\n    ],\n    'change'    => [\n        'action'    => 'Odnów subskrypcję',\n        'helper'    => 'Chętnie powitamy cię znów! Możesz odnowić subskrypcję w każdej chwili i podjąć pracę jak gdyby nigdy nic.',\n        'title'     => 'Chcesz zmienić zdanie?',\n    ],\n    'contact'   => [\n        'feedback'  => 'Jeżeli uważasz, że coś możemy robić lepiej, nie wahaj się nam powiedzieć:',\n        'helper'    => 'Nawet bez subskrypcji jesteś częścią społeczności Kanki. Możesz dalej budować światy i wrócić do subskrybowania w dogodniejszym momencie.',\n        'send'      => 'Prześlij nam swoją opinię',\n        'title'     => 'Zostańmy w kontakcie',\n    ],\n    'next'      => [\n        'data'      => 'Dane będą bezpieczne! Niczego nie usuniemy, i w każdej chwili możesz zasubskrybować Kankę ponownie',\n        'discord'   => 'Nie będziesz mieć już dostępu do opcji i kanałów dostępnych tylko dla subskrybentów',\n        'helper'    => 'Po zakończeniu subskrypcji:',\n        'premium'   => 'Każda kampania premium utraci ten status',\n        'title'     => 'Co stanie się teraz?',\n    ],\n    'seo_title' => 'Szkoda, że ochodzisz',\n    'subtitle'  => 'Dziękujemy za dotychczasową subskrypcję, twoje wsparcie wiele dla nas znaczyło! Oto, co stanie się teraz:',\n    'title'     => 'Szkoda, że nas opuszczasz, :name',\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/confirm.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => 'Zapłać teraz :amount :currency',\n        'paypal'    => 'Zapłać :amount :currency PayPalem',\n        'subscribe' => 'Subskrybujesz za :currency:amount',\n    ],\n    'helpers'   => [\n        'auto-renew'    => [\n            'monthly'   => 'Subskrybcja odnawia się automatycznie co miesiąc. Opłatę pobierzemy w dniu :date.',\n            'none'      => 'PayPal umożliwia zapłatę jednorazową i nie odnawia się automatycznie. Twoja subskrybcja wygaśnie po :date i trzeba ją będzie odnowić.',\n            'yearly'    => 'Subskrypcja odnawia się automatycznie co 12 miesięcy. Opłatę pobierzemy w dniu :date.',\n        ],\n        'paypal'        => 'Przeniesiesz się na stronę PayPal by dokończyć płatność.',\n        'refund'        => 'Oferujemy 14-dniowy okres rezygnacji z każdej subskrypcji rocznej. Nie musisz się tłumaczyć, wystarczy napisać maila na adres :email, by wszcząć procedurę zwrotu kosztów.',\n        'tiny'          => 'Dziękujemy za wsparcie malutkiej grupki zapalonych światotwórców.',\n    ],\n    'title'     => 'Subskrybcja :name',\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/faq.php",
    "content": "<?php\n\nreturn [\n    'cancellation'  => [\n        'answer'    => 'Oczywiście! Stosowną opcję znajdziesz na stronie obecnej subskrypcji. Po anulowaniu zachowasz dostęp do wszystkich korzyści do rozpoczęcia nowego okresu rozliczeniowego. Pamiętaj, że subskrypcja przez PayPal ustaje automatycznie po opłaconym okresie, ponieważ firma nie pozwala na automatyczne odnowienie.',\n        'question'  => 'Czy mogę anulować subskrypcję w każdej chwili?',\n    ],\n    'cost'          => [\n        'answer'    => 'Kanka posiada trzy poziomy subskrypcji, nazwane od potworów z D&D: Owlbear, Wyvern i Elemental. Cena zależy od wybranej waluty (USD, EUR albo BRL). Jeżeli wybierzesz plan roczny, uzyskasz dwa darmowe miesiące w stosunku do rozliczenia miesięcznego.',\n        'question'  => 'Ile kosztuje subskrybcja?',\n    ],\n    'data'          => [\n        'answer'    => 'Nie martw się, nigdy nie usuwamy danych po zakończeniu subskrypcji. Kampanie premium wracają po prostu do formy podstawowej i dodatkowe opcje przestają być dostępne. Jeżeli wznowisz subskrypcję, natychmiast odzyskasz dostęp do funkcji premium w takiej postaci, w jakiej je zostawiłeś.',\n        'question'  => 'Co stanie się z moimi danymi po anulowaniu subskrybcji?',\n    ],\n    'discount'      => [\n        'answer'    => 'Tak! Nagrodą za subskrypcję roczną są dwa darmowe miesiące w stosunku do opłaty miesięcznej. W ten sposób dziękujemy za dłuższe zobowiązanie wobec Kanki.',\n        'question'  => 'Czy subskrypcja roczna zwiera zniżkę?',\n    ],\n    'downgrade'     => [\n        'answer'    => 'Możesz zmienić poziom subskrypcji w każdej chwili. Jeśli ją zwiększasz, zapłacisz w bieżącym okresie tylko różnicę między obecnym i przyszłym planem. Podczas redukcji nowy, niższy poziom zacznie obowiązywać od początku kolejnego okresu rozliczeniowego - do tej chwili nie stracisz obecnych korzyści.',\n        'question'  => 'Jak zwiększyć/zmniejszyć poziom subskrybcji?',\n    ],\n    'fail'          => [\n        'answer'    => 'Jeżeli nie uda się pobrać płatności, zostaniesz powiadomiony mailem i podejmiemy jeszcze trzy próby obciążenia karty kredytowej. Jeżeli również zakończą się niepowodzeniem, subskrypcja zostanie zawieszona. Problem można zwykle łatwo rozwiązać, aktualizując informacje dotyczące :billing za pomocą poprawnych danych.',\n        'question'  => 'Co, jeśli płatność się nie uda?',\n    ],\n    'help'          => [\n        'answer'    => 'Dzięki subskrypcji opłacasz nasz czas, serwery i możliwość utrzymywania Kanki bez konieczności wzrostu za wszelką cenę. Szybciej eliminujemy błędy, tworzymy funkcje w które naprawdę wierzymy i działamy w interesie społeczności, a nie inwestorów. Czyli: Kanka dzięki temu żyje i się rozwija.',\n        'question'  => 'Jak moja subskrypcja wspiera Kankę?',\n    ],\n    'methods'       => [\n        'answer'    => 'Przyjmujemy karty kredytowe oraz płatność przez PayPal w dolarach, euro i realach brazylijskich. Traktujemy bezpieczeństwo danych z najwyższą powagą, więc wszystkie dane kart kredytowych przechowuje nasz zaufany partner obsługujący płatności, :stripe.',\n        'question'  => 'Jakie przyjmujecie metody płatności?',\n    ],\n    'refund'        => [\n        'answer'    => 'Tak! W wypadku subskrypcji rocznej oferujemy 14-dniowy okres próbny, w czasie którego można uzyskać zwrot kosztów. Nie musisz podawać powodu. Wystarczy, że napiszesz maila na adres :email prosząc o zwrot pieniędzy, i wszystkim się zajmiemy.',\n        'question'  => 'Czy zwracacie pieniądze?',\n    ],\n    'renewal'       => [\n        'answer'    => 'Tak, jeśli używasz do subskrypcji karty kredytowej, po zakończeniu każdego okresu rozliczeniowego automatycznie obciążymy ją tą samą kwotą. Inaczej jest w wypadku subskrypcji przez PayPal: nie odnawia się automatycznie i po każdym okresie należy ją odnowić ręcznie.',\n        'question'  => 'Czy podczas odnawiania subskrypcji płatność będzie automatyczna?',\n    ],\n    'security'      => [\n        'answer'    => 'Bezpieczeństwo danych to nasz priorytet. Korzystamy z usług :stripe, firmy zapewniającej najwyższe standardy bezpieczeństwa płatności zgodne z PCI. Zarządza i przechowuje wszystkie dane użytkowników w sposób zgodny z wymaganiami RODO. Żadne dane nie trafiają na nasze serwery.',\n        'question'  => 'Czy moje informacje finansowe są bezpieczne?',\n    ],\n    'sharing'       => [\n        'answer'    => 'Oczywiście! Opcje premium kampanii aktywowane dzięki subskrypcji są dostępne dla wszystkich uczestników - nawet jeżeli sami nie subskrybują Kanki. Dzięki temu możecie dzielić się kosztami tworzenia światów.',\n        'question'  => 'Czy mogę dzielić z kimś konto/subskrypcję?',\n    ],\n    'title'         => 'Popularne pytania',\n    'trial'         => [\n        'answer'    => 'Kanka nie posiada wprawie darmowej wersji próbnej, ale oferuje za darmo liczne narzędzia do tworzenia światów i zarządzania kampanią. Gdy przestaną ci wystarczać, subskrypcja pozwoli ci korzystać z opcji premium, w tym zwiększonego limitu plików, braku reklam i dodatkowych funkcji światotwórczych.',\n        'question'  => 'Czy macie darmową wersję próbną?',\n    ],\n    'update'        => [\n        'answer'    => 'Aktualizacja danych do płatności jest prosta: wejdź na stronę :billing w ustawieniach konta. Tam możesz zmienić metodę płatności, zaktualizować dane karty albo zmienić adres rozliczenia.',\n        'question'  => 'Jak zaktualizować dane do płatności?',\n    ],\n    'why'           => [\n        'answer'    => 'Kankę stworzył i rozwija mały, niezależny zespół. Dzięki subskrybcji możemy realizować długoterminowe cele, usprawniać Kankę i unikać ciemnych wzorców. Nie płacisz korporacji: utrzymujesz bezpośrednio ludzi, którzy tworzyli, postawili i rozwijają platformę.',\n        'question'  => 'Dlaczego Kanka ma płatną subskrybcję?',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/finish.php",
    "content": "<?php\n\nreturn [\n    'discord'   => [\n        'action'    => 'Połącz ze swoim kontem Discord',\n        'enjoy'     => 'Przejdź na Discord i ciesz się nowymi korzyściami',\n        'helper'    => 'Jako subskrybent otrzymasz elitarne role oraz prywatne kanały w naszej społeczności Discord - ale wpierw musisz połączyć swoje konto Discord z Kanką.',\n        'title'     => 'Uzyskaj korzyści na Discordzie',\n    ],\n    'header'    => 'Twoja subskrypcja jest aktywna, witaj w wewnętrznym kręgu światotwórców!',\n    'help'      => [\n        'contact-us'    => 'skontaktuj się z nami',\n        'helper'        => 'Jeśli masz pytania albo opinie, :contact-us albo zajrzyj do naszych :docs.',\n        'title'         => 'Potrzebujesz pomocy?',\n    ],\n    'next'      => 'Twoje wsparcie pomaga nam rosnąć i ulepszać Kankę. Oto jak możesz skorzystać z korzyści związanych z subskrypcją:',\n    'premium'   => [\n        'action'    => 'Odblokuj',\n        'helper'    => 'Odblokuj funkcje premium, w tym własne moduły, dostęp do :plugins i nie tylko.',\n        'title'     => 'Używaj funkcji premium kampanii',\n    ],\n    'roadmap'   => [\n        'action'    => 'Zobacz mapę drogową i sugerowane funkcje',\n        'helper'    => 'Kankę tworzymy z myślą o was. Możesz zobaczyć dostępny publicznie plan rozwoju i głosować na funkcje, które chcesz wprowadzić.',\n        'title'     => 'Pomóż kształtować przyszłość Kanki',\n    ],\n    'title'     => 'Dziękujemy za wspieranie Kanki!',\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/free-trial.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'accept'    => 'Rozpocznij okres próbny',\n        'magic'     => 'Nie potrzeba karty kredytowej. Czysta magia.',\n    ],\n    'final'     => [\n        'magic' => 'Żadnych zobowiązań, żadnych pułapek. Po prostu więcej magii w kampanii.',\n        'title' => 'Rozpocznij 15-dniowy okres próbny',\n    ],\n    'header'    => 'Widzimy twoje wysiłki w krainach Kanki. By je uhonorować, oferujemy ci :what. Nic nie zapłacisz: ani złotem, ani klejnotami, ani kartą kredytową.',\n    'included'  => [\n        'title' => 'Co otrzymujesz',\n        'upsell'=> [\n            'action'    => 'Zobacz poziomy subskrypcji',\n            'pitch'     => 'To tylko poziom :tier. Chcesz zyskać jeszcze więcej?',\n        ],\n    ],\n    'pitch'     => [\n        'title' => 'Ciesz się darmowym 15-dniowym okresem próbnym na nasz koszt! Użyj wszystkich funkcji premium by zobaczyć, czego ci dotychczas brakowało.',\n    ],\n    'started'   => [\n        'header'    => 'Udało ci się rozpocząć darmowy okres próbny, witaj w wewnętrznym kręgu światotwórców.',\n        'title'     => 'Witaj w okresie próbnym!',\n    ],\n    'tease'     => [\n        'helper'    => 'Chcesz zamieszczać jeszcze więcej plików i zyskać dalsze kampanie premium? Przejdź na stronę :subscription i zobacz, co na ciebie tam czeka.',\n        'title'     => 'A może chcesz więcej',\n    ],\n    'title'     => 'Czeka na ciebie nowa przygoda!',\n    'what'      => ':amount -dniową możliwość korzystania z poziomu :tier',\n    'why'       => [\n        'helper'    => 'Nie szczędzisz wysiłków w budowie swojej kampanii. Doceniamy twoją lojalność. To drobny wyraz uznania ze strony twórców Kanki.',\n        'title'     => 'Zasługujesz na nagrodę',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/paypal.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'contact'       => 'Jeśli problem się powtarza, napisz do nas na :email.',\n        'failed'        => 'PayPal nie wygenerował rachunku. Spróbuj ponownie.',\n        'incomplete'    => 'Płatność PayPal jest niekompletna. Spróbuj ponownie.',\n        'rejected'      => 'PayPal wygenerował niewłaściwy rachunek. Spróbuj ponownie.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'Ta promocja jest już zakończona.',\n        'invalid'   => 'Nieznana promocja.',\n        'only-new'  => 'Promocja dostępna jest tylko dla nowych subskrybentów.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/subscriptions/renew.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'renew' => 'Odnów subskrybcję',\n    ],\n    'helper'    => 'Możesz jednak wybrać odnowę subskrypcji, by nieprzerwanie korzystać ze wszystkich związanych z nią funkcji.',\n    'title'     => 'Odnowienie subskrybcji',\n];\n"
  },
  {
    "path": "lang/pl/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe nie zdołało pobrać płatności. W związku z tym twoja subskrypcja została anulowana.',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'           => 'Dodaj nową etykietę',\n            'add_entity'    => 'Dodaj do elementu',\n        ],\n        'create'    => [\n            'attach_success'        => '{1} Dodano etykietę :name :count elementowi.|[2,*] Dodano etykietę :name :count elementom.',\n            'attach_success_entity' => 'Pomyślnie zmieniono etykiety :name.',\n            'entity'                => 'Dodaj etykiety do :name',\n            'helper'                => 'Oznacza jeden lub więcej elementów etykietą :name',\n            'title'                 => 'Oznaczanie etykietą',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nowa etykieta',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'          => 'Pochodne',\n        'is_auto_applied'   => 'Dodawaj automatycznie',\n        'is_hidden'         => 'Ukryj w nagłówkach i dymkach',\n    ],\n    'helpers'       => [\n        'no_children'   => 'Obecnie nie oznaczono tą etykietą żadnych elementów.',\n        'no_posts'      => 'Obecnie nie oznaczono tą etykietą żadnych komentarzy.',\n    ],\n    'hints'         => [\n        'children'          => 'Na liście znajdują się wszystkie elementy posiadające tę etykietę i etykiety pochodne.',\n        'is_auto_applied'   => 'Zaznacz by dodawać tę etykietę automatycznie do nowych elementów.',\n        'is_hidden'         => 'Po zaznaczeniu, ta etykieta nie będzie wyświetlana w nagłówku i dymkach elementu',\n        'tag'               => 'Na liście znajdują się wszystkie elementy posiadające tę etykietę.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Stosuj etykiety, by łączyć i grupować różne elementy, ułatwiając filtrowanie i nawigację.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Wiedza tajemna, wojna, historia, religia, weksylologia',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Pochodne',\n        ],\n    ],\n    'tags'          => [],\n    'transfer'      => [\n        'entities'      => [\n            'helper'    => 'Zmienia etykietę :name na inną u wszystkich elementów',\n            'title'     => 'Zmiana etykiety elementów',\n        ],\n        'fail'          => 'Nie udało się zmienić elementom etykiety :tag na nową etykietę :newTag.',\n        'fail_post'     => 'Nie udało się zmienić komentarzom etykiety :tag na nową etykietę :newTag.',\n        'posts'         => [\n            'helper'    => 'Zmienia etykietę :name na inną u wszystkich komentarzy',\n            'title'     => 'Zmiana etykiety komentarzy',\n        ],\n        'success'       => 'Zamieniono elementom etykietę :tag na nową etykietę :newTag.',\n        'success_post'  => 'Zamieniono komentarzom etykietę :tag na nową etykietę :newTag.',\n        'transfer'      => 'Zamień',\n    ],\n];\n"
  },
  {
    "path": "lang/pl/teams.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'lead'          => 'Solidne i przyjemne tworzenie światów.',\n        'translations'  => 'Tłumaczenie',\n    ],\n    'leads' => [\n        'translators'   => 'Kankę przełożyło na liczne języki to oto grono tłumaczy.',\n    ],\n    'people'=> [\n        'itzamna'   => [\n            'title' => 'Młodszy developer',\n        ],\n        'jay'       => [\n            'title' => 'Założyciel i główny projektant',\n        ],\n        'jon'       => [\n            'title' => 'Współzałożyciel i dyrektor finansowy',\n        ],\n        'kaz'       => [\n            'title' => 'Pogromca bugów',\n        ],\n        'laura'     => [\n            'title' => 'Media Społecznościowe',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => [\n            'monthly'   => 'Płatność miesięczna',\n            'save'      => '2 miesiące za darmo',\n            'yearly'    => 'Płatność roczna',\n        ],\n        'subscribe' => [\n            'choose'    => 'Wybierz :tier',\n            'downgrade' => 'Zmniejsz do poziomu :tier',\n            'monthly'   => ':tier miesięcznie',\n            'upgrade'   => ':tier miesięcznie',\n            'yearly'    => ':tier rocznie',\n        ],\n    ],\n    'current'   => 'Obecna subskrypcja',\n    'features'  => [\n        'api_requests'      => ':amount wywołań API / min',\n        'boosters'          => 'Doładowania kampanii',\n        'discord'           => 'Role na Discordzie',\n        'feature_influence' => 'Wpływ na nowe funkcje',\n        'file_size'         => 'Dodawanie plików o rozmiarze :size',\n        'import'            => 'Import kampanii',\n        'modules'           => ':count własnych modułów',\n        'nice_image'        => 'Domyślne ikony elementów',\n        'no_ads'            => 'Brak reklam',\n        'pagination'        => 'Do :amount elementów wyświetlanych na stronie',\n        'premium'           => 'Każdy zawiera: :storage GB miejsca, :modules własne moduły',\n        'roadmap'           => 'Głosuj na pomysły w przygotowaniu',\n        'storage'           => ':count GB przestrzeni dyskowej',\n    ],\n    'helpers'   => [\n        'premium'   => 'To korzyści z odblokowania kampanii premium.',\n    ],\n    'periods'   => [\n        'billed_monthly'    => 'opłata miesięczna',\n        'billed_yearly'     => 'opłata roczna',\n    ],\n    'pricing'   => ':currency :amount / miesiąc',\n    'ribbons'   => [\n        'best-value'    => 'Najkorzystniejsza oferta',\n        'current'       => 'Obecna subskrypcja',\n    ],\n    'target'    => [\n        'elemental' => 'Dla koneserów światotwórstwa pracujących jednocześnie z wieloma rozległymi światami i wielkimi kampaniami.',\n        'owlbear'   => 'Dla samotnych światotwórców, którzy chcą dodatkowych opcji w głównej kampanii.',\n        'wyvern'    => 'Dla mistrzów gry prowadzących kilka kampanii oraz uczestników grupowych projektów narracyjnych.',\n    ],\n    'tiny'      => 'malutki zespół',\n    'toggle'    => [],\n    'why'       => 'Kankę tworzy :tiny zapalonych światotwórców. Subckrybcje pozwalają im utrzymać siebie, serwery i znaleźć czas konieczny do poprawiania jakości platformy. Nie stosują mrocznych wzorców projektowych, nie podlegają presji inwestorów i nie dążą do bezustannego wzrostu. Rozwój jest stały i zgodny z życzeniami społeczności.',\n];\n"
  },
  {
    "path": "lang/pl/timelines/.gitkeep",
    "content": ""
  },
  {
    "path": "lang/pl/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Kopiuj zaawansowaną wzmiankę z nazwą elementu.',\n        'success'           => 'Skopiowano do schowka zaawansowaną wzmiankę z nazwą elementu.',\n    ],\n    'create'        => [\n        'success'   => 'Dodano element historii.',\n        'title'     => 'Nowy element historii',\n    ],\n    'delete'        => [\n        'success'   => 'Usunięto element :name.',\n    ],\n    'edit'          => [\n        'success'   => 'Zaktualizowano element',\n        'title'     => 'Edycja elementu historii',\n    ],\n    'fields'        => [\n        'date'              => 'Data',\n        'era'               => 'Epoka',\n        'icon'              => 'Ikona',\n        'use_entity_entry'  => 'Wyświetlaj dołączony element. Po zaznaczeniu, ewentualny opis elementu będzie wyświetlany jako pierwszy.',\n        'use_event_date'    => 'Użyj daty wydarzenia',\n    ],\n    'helpers'       => [\n        'date'              => 'Jeżeli ta część historii związana jest z istniejącym już wydarzeniem, używa daty tego wydarzenia.',\n        'entity_is_private' => 'Element powiązany z tym wpisem jest tajny.',\n        'icon'              => 'Skopiuj kod HTML ikony z :fontawesome lub :rpgawesome.',\n        'is_collapsed'      => 'Szczegóły elementu są domyślnie zwinięte.',\n    ],\n    'placeholders'  => [\n        'date'      => 'np. 42 marca albo 1332-1337',\n        'name'      => 'Wymagana, jeżeli nie wskazano elementu',\n        'position'  => 'Kolejność na liście elementów tej epoki. Zostaw puste, by dodać na końcu.',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/pl/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Dodaj nową epokę',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} Usunięto :count epok.|{1} Usunięto :count epokę.|[2,3,4] Usunięto :count epoki.|[5,*] Usunięto :count epok.',\n    ],\n    'create'        => [\n        'success'   => 'Stworzono epokę \\':name\\'.',\n        'title'     => 'Nowa epoka',\n    ],\n    'delete'        => [\n        'success'   => 'Usunięto epokę \\':name\\'.',\n    ],\n    'edit'          => [\n        'success'   => 'Zmieniono epokę \\':name\\'.',\n        'title'     => 'Edycja epoki :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Skrót',\n        'end_year'      => 'Rok zakończenia',\n        'is_collapsed'  => 'Zwinięta',\n        'start_year'    => 'Rok rozpoczęcia',\n    ],\n    'helpers'       => [\n        'eras'          => 'Przed dodaniem epok należy stworzyć historię.',\n        'is_collapsed'  => 'Epoka domyślnie wyświetlana jest zwinięta (zminimalizowana).',\n        'primary'       => 'Podziel historię na epoki. By historia działała poprawnie, musi posiadać przynajmniej jedną epokę.',\n    ],\n    'index'         => [\n        'title' => 'Epoki historii :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'AD, PNE, 3E',\n        'end_year'      => 'Rok zakończenia epoki. Pozostaw puste, jeżeli trwa obecnie.',\n        'name'          => 'Nowoczesność, epoka brązu, wojny galaktyczne',\n        'start_year'    => 'Rok rozpoczęcia epoki. Pozostaw puste, jeżeli to pierwsza epoka historii.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/pl/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Dodaj do epoki :era',\n        'back'          => 'Powrót do :name',\n        'save_order'    => 'Zapisz nową kolejność',\n    ],\n    'create'        => [\n        'title' => 'Nowa historia',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_elements' => 'Kopiuj składowe',\n        'copy_eras'     => 'Kopiuj epoki',\n        'eras'          => 'Epoki',\n        'reverse_order' => 'Odwróć kolejność epok',\n    ],\n    'helpers'       => [\n        'no_era_v2'     => 'Ta historia nie ma obecnie żadnych epok. Stwórz jedną lub więcej epok, do których możesz potem dodawać elementy.',\n        'reverse_order' => 'Zaznacz by wyświetlać epoki w odwróconym porządku chronologicznym (od najdawniejszej)',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Przygotuj oś czasu, na której umieścisz najważniejsze wydarzenia kształujące obecną postać świata.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Główna, kronika dziejów świata, historia królestwa',\n    ],\n    'reorder'       => [\n        'empty'     => 'Dodaj epoki i ich elementy, by móc zmienić ich kolejność.',\n        'success'   => 'Zmieniono kolejność :name',\n        'title'     => 'Zmień kolejność :name',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder-elements'  => 'Zmiana kolejności elementów',\n        ],\n    ],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/pl/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'Oto istny wieszcz! Zwycięzca konkursu światotwórczego',\n    ],\n    'fields'        => [\n        'achievements'      => 'Osiągnięcia',\n        'banned'            => 'Użytkownik zablokowany',\n        'entities_created'  => 'Stworzonych elementów :help :count',\n        'member_since'      => 'Użytkuje Kankę od :date',\n        'public_campaigns'  => 'Kampanie publiczne',\n        'subscriber_since'  => 'Subskrybuje od :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'Powyższe wartości są aktualizowane codziennie.',\n    ],\n    'title'         => 'Profil :name',\n];\n"
  },
  {
    "path": "lang/pl/validation-inline.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'              => 'Pole musi zostać zaakceptowane.',\n    'active_url'            => 'Pole jest nieprawidłowym adresem URL.',\n    'after'                 => 'Pole musi być datą późniejszą od :date.',\n    'after_or_equal'        => 'Pole musi być datą nie wcześniejszą niż :date.',\n    'alpha'                 => 'Pole może zawierać jedynie litery.',\n    'alpha_dash'            => 'Pole może zawierać jedynie litery, cyfry i myślniki.',\n    'alpha_num'             => 'Pole może zawierać jedynie litery i cyfry.',\n    'array'                 => 'Pole musi być tablicą.',\n    'before'                => 'Pole musi być datą wcześniejszą od :date.',\n    'before_or_equal'       => 'Pole musi być datą nie późniejszą niż :date.',\n    'between'               => [\n        'array'     => 'Pole musi składać się z :min - :max elementów.',\n        'file'      => 'Pole musi zawierać się w granicach :min - :max kilobajtów.',\n        'numeric'   => 'Pole musi zawierać się w granicach :min - :max.',\n        'string'    => 'Pole musi zawierać się w granicach :min - :max znaków.',\n    ],\n    'boolean'               => 'Pole musi mieć wartość logiczną prawda albo fałsz.',\n    'confirmed'             => 'Potwierdzenie pola nie zgadza się.',\n    'date'                  => 'Pole nie jest prawidłową datą.',\n    'date_equals'           => 'Pole musi być datą równą :date.',\n    'date_format'           => 'Pole nie jest w formacie :format.',\n    'different'             => 'Pole oraz :other muszą się różnić.',\n    'digits'                => 'Pole musi składać się z :digits cyfr.',\n    'digits_between'        => 'Pole musi mieć od :min do :max cyfr.',\n    'dimensions'            => 'Pole ma niepoprawne wymiary.',\n    'distinct'              => 'Pole ma zduplikowane wartości.',\n    'email'                 => 'Pole nie jest poprawnym adresem e-mail.',\n    'ends_with'             => 'Pole musi kończyć się jedną z następujących wartości: :values.',\n    'exists'                => 'Zaznaczona wartość jest nieprawidłowa.',\n    'file'                  => 'Pole musi być plikiem.',\n    'filled'                => 'Pole nie może być puste.',\n    'gt'                    => [\n        'array'     => 'Pole musi mieć więcej niż :value elementów.',\n        'file'      => 'Pole musi być większe niż :value kilobajtów.',\n        'numeric'   => 'Pole musi być większe niż :value.',\n        'string'    => 'Pole musi być dłuższe niż :value znaków.',\n    ],\n    'gte'                   => [\n        'array'     => 'Pole musi mieć :value lub więcej elementów.',\n        'file'      => 'Pole musi być większe lub równe :value kilobajtów.',\n        'numeric'   => 'Pole musi być większe lub równe :value.',\n        'string'    => 'Pole musi być dłuższe lub równe :value znaków.',\n    ],\n    'image'                 => 'Pole musi być obrazkiem.',\n    'in'                    => 'Zaznaczony element jest nieprawidłowy.',\n    'in_array'              => 'Pole nie znajduje się w :other.',\n    'integer'               => 'Pole musi być liczbą całkowitą.',\n    'ip'                    => 'Pole musi być prawidłowym adresem IP.',\n    'ipv4'                  => 'Pole musi być prawidłowym adresem IPv4.',\n    'ipv6'                  => 'Pole musi być prawidłowym adresem IPv6.',\n    'json'                  => 'Pole musi być poprawnym ciągiem znaków JSON.',\n    'lt'                    => [\n        'array'     => 'Pole musi mieć mniej niż :value elementów.',\n        'file'      => 'Pole musi być mniejsze niż :value kilobajtów.',\n        'numeric'   => 'Pole musi być mniejsze niż :value.',\n        'string'    => 'Pole musi być krótsze niż :value znaków.',\n    ],\n    'lte'                   => [\n        'array'     => 'Pole musi mieć :value lub mniej elementów.',\n        'file'      => 'Pole musi być mniejsze lub równe :value kilobajtów.',\n        'numeric'   => 'Pole musi być mniejsze lub równe :value.',\n        'string'    => 'Pole musi być krótsze lub równe :value znaków.',\n    ],\n    'max'                   => [\n        'array'     => 'Pole nie może mieć więcej niż :max elementów.',\n        'file'      => 'Pole nie może być większe niż :max kilobajtów.',\n        'numeric'   => 'Pole nie może być większe niż :max.',\n        'string'    => 'Pole nie może być dłuższe niż :max znaków.',\n    ],\n    'mimes'                 => 'Pole musi być plikiem typu :values.',\n    'mimetypes'             => 'Pole musi być plikiem typu :values.',\n    'min'                   => [\n        'array'     => 'Pole musi mieć przynajmniej :min elementów.',\n        'file'      => 'Pole musi mieć przynajmniej :min kilobajtów.',\n        'numeric'   => 'Pole musi być nie mniejsze od :min.',\n        'string'    => 'Pole musi mieć przynajmniej :min znaków.',\n    ],\n    'not_in'                => 'Zaznaczona wartość jest nieprawidłowa.',\n    'not_regex'             => 'Format pola jest nieprawidłowy.',\n    'numeric'               => 'Pole musi być liczbą.',\n    'password'              => 'Hasło jest nieprawidłowe.',\n    'present'               => 'Pole musi być obecne.',\n    'regex'                 => 'Format pola jest nieprawidłowy.',\n    'required'              => 'Pole jest wymagane.',\n    'required_if'           => 'Pole jest wymagane gdy :other ma wartość :value.',\n    'required_unless'       => 'Pole jest wymagane jeżeli :other nie znajduje się w :values.',\n    'required_with'         => 'Pole jest wymagane gdy :values jest obecny.',\n    'required_with_all'     => 'Pole jest wymagane gdy wszystkie :values są obecne.',\n    'required_without'      => 'Pole jest wymagane gdy :values nie jest obecny.',\n    'required_without_all'  => 'Pole jest wymagane gdy żadne z :values nie są obecne.',\n    'same'                  => 'Pole i :other muszą być takie same.',\n    'size'                  => [\n        'array'     => 'Pole musi zawierać :size elementów.',\n        'file'      => 'Pole musi mieć :size kilobajtów.',\n        'numeric'   => 'Pole musi mieć :size.',\n        'string'    => 'Pole musi mieć :size znaków.',\n    ],\n    'starts_with'           => 'Pole musi zaczynać się jedną z następujących wartości: :values.',\n    'string'                => 'Pole musi być ciągiem znaków.',\n    'timezone'              => 'Pole musi być prawidłową strefą czasową.',\n    'unique'                => 'Taka wartość już występuje.',\n    'uploaded'              => 'Nie udało się wgrać pliku.',\n    'url'                   => 'Format pola jest nieprawidłowy.',\n    'uuid'                  => 'Pole musi być poprawnym identyfikatorem UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom'    => [\n        'attribute-name'    => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'        => 'Pole :attribute musi zostać zaakceptowane.',\n    'active_url'      => 'Pole :attribute jest nieprawidłowym adresem URL.',\n    'after'           => 'Pole :attribute musi być datą późniejszą od :date.',\n    'after_or_equal'  => 'Pole :attribute musi być datą nie wcześniejszą niż :date.',\n    'alpha'           => 'Pole :attribute może zawierać jedynie litery.',\n    'alpha_dash'      => 'Pole :attribute może zawierać jedynie litery, cyfry i myślniki.',\n    'alpha_num'       => 'Pole :attribute może zawierać jedynie litery i cyfry.',\n    'array'           => 'Pole :attribute musi być tablicą.',\n    'before'          => 'Pole :attribute musi być datą wcześniejszą od :date.',\n    'before_or_equal' => 'Pole :attribute musi być datą nie późniejszą niż :date.',\n    'between'         => [\n        'numeric' => 'Pole :attribute musi zawierać się w granicach :min - :max.',\n        'file'    => 'Pole :attribute musi zawierać się w granicach :min - :max kilobajtów.',\n        'string'  => 'Pole :attribute musi zawierać się w granicach :min - :max znaków.',\n        'array'   => 'Pole :attribute musi składać się z :min - :max elementów.',\n    ],\n    'boolean'        => 'Pole :attribute musi mieć wartość logiczną prawda albo fałsz.',\n    'confirmed'      => 'Potwierdzenie pola :attribute nie zgadza się.',\n    'date'           => 'Pole :attribute nie jest prawidłową datą.',\n    'date_equals'    => 'Pole :attribute musi być datą równą :date.',\n    'date_format'    => 'Pole :attribute nie jest w formacie :format.',\n    'different'      => 'Pole :attribute oraz :other muszą się różnić.',\n    'digits'         => 'Pole :attribute musi składać się z :digits cyfr.',\n    'digits_between' => 'Pole :attribute musi mieć od :min do :max cyfr.',\n    'dimensions'     => 'Pole :attribute ma niepoprawne wymiary.',\n    'distinct'       => 'Pole :attribute ma zduplikowane wartości.',\n    'email'          => 'Pole :attribute nie jest poprawnym adresem e-mail.',\n    'ends_with'      => 'Pole :attribute musi kończyć się jedną z następujących wartości: :values.',\n    'exists'         => 'Zaznaczone pole :attribute jest nieprawidłowe.',\n    'file'           => 'Pole :attribute musi być plikiem.',\n    'filled'         => 'Pole :attribute nie może być puste.',\n    'gt'             => [\n        'numeric' => 'Pole :attribute musi być większe niż :value.',\n        'file'    => 'Pole :attribute musi być większe niż :value kilobajtów.',\n        'string'  => 'Pole :attribute musi być dłuższe niż :value znaków.',\n        'array'   => 'Pole :attribute musi mieć więcej niż :value elementów.',\n    ],\n    'gte' => [\n        'numeric' => 'Pole :attribute musi być większe lub równe :value.',\n        'file'    => 'Pole :attribute musi być większe lub równe :value kilobajtów.',\n        'string'  => 'Pole :attribute musi być dłuższe lub równe :value znaków.',\n        'array'   => 'Pole :attribute musi mieć :value lub więcej elementów.',\n    ],\n    'image'    => 'Pole :attribute musi być obrazkiem.',\n    'in'       => 'Zaznaczony element :attribute jest nieprawidłowy.',\n    'in_array' => 'Pole :attribute nie znajduje się w :other.',\n    'integer'  => 'Pole :attribute musi być liczbą całkowitą.',\n    'ip'       => 'Pole :attribute musi być prawidłowym adresem IP.',\n    'ipv4'     => 'Pole :attribute musi być prawidłowym adresem IPv4.',\n    'ipv6'     => 'Pole :attribute musi być prawidłowym adresem IPv6.',\n    'json'     => 'Pole :attribute musi być poprawnym ciągiem znaków JSON.',\n    'lt'       => [\n        'numeric' => 'Pole :attribute musi być mniejsze niż :value.',\n        'file'    => 'Pole :attribute musi być mniejsze niż :value kilobajtów.',\n        'string'  => 'Pole :attribute musi być krótsze niż :value znaków.',\n        'array'   => 'Pole :attribute musi mieć mniej niż :value elementów.',\n    ],\n    'lte' => [\n        'numeric' => 'Pole :attribute musi być mniejsze lub równe :value.',\n        'file'    => 'Pole :attribute musi być mniejsze lub równe :value kilobajtów.',\n        'string'  => 'Pole :attribute musi być krótsze lub równe :value znaków.',\n        'array'   => 'Pole :attribute musi mieć :value lub mniej elementów.',\n    ],\n    'max' => [\n        'numeric' => 'Pole :attribute nie może być większe niż :max.',\n        'file'    => 'Pole :attribute nie może być większe niż :max kilobajtów.',\n        'string'  => 'Pole :attribute nie może być dłuższe niż :max znaków.',\n        'array'   => 'Pole :attribute nie może mieć więcej niż :max elementów.',\n    ],\n    'mimes'     => 'Pole :attribute musi być plikiem typu :values.',\n    'mimetypes' => 'Pole :attribute musi być plikiem typu :values.',\n    'min'       => [\n        'numeric' => 'Pole :attribute musi być nie mniejsze od :min.',\n        'file'    => 'Pole :attribute musi mieć przynajmniej :min kilobajtów.',\n        'string'  => 'Pole :attribute musi mieć przynajmniej :min znaków.',\n        'array'   => 'Pole :attribute musi mieć przynajmniej :min elementów.',\n    ],\n    'not_in'               => 'Zaznaczony :attribute jest nieprawidłowy.',\n    'not_regex'            => 'Format pola :attribute jest nieprawidłowy.',\n    'numeric'              => 'Pole :attribute musi być liczbą.',\n    'password'             => 'Hasło jest nieprawidłowe.',\n    'present'              => 'Pole :attribute musi być obecne.',\n    'regex'                => 'Format pola :attribute jest nieprawidłowy.',\n    'required'             => 'Pole :attribute jest wymagane.',\n    'required_if'          => 'Pole :attribute jest wymagane gdy :other ma wartość :value.',\n    'required_unless'      => 'Pole :attribute jest wymagane jeżeli :other nie znajduje się w :values.',\n    'required_with'        => 'Pole :attribute jest wymagane gdy :values jest obecny.',\n    'required_with_all'    => 'Pole :attribute jest wymagane gdy wszystkie :values są obecne.',\n    'required_without'     => 'Pole :attribute jest wymagane gdy :values nie jest obecny.',\n    'required_without_all' => 'Pole :attribute jest wymagane gdy żadne z :values nie są obecne.',\n    'same'                 => 'Pole :attribute i :other muszą być takie same.',\n    'size'                 => [\n        'numeric' => 'Pole :attribute musi mieć :size.',\n        'file'    => 'Pole :attribute musi mieć :size kilobajtów.',\n        'string'  => 'Pole :attribute musi mieć :size znaków.',\n        'array'   => 'Pole :attribute musi zawierać :size elementów.',\n    ],\n    'starts_with' => 'Pole :attribute musi zaczynać się jedną z następujących wartości: :values.',\n    'string'      => 'Pole :attribute musi być ciągiem znaków.',\n    'timezone'    => 'Pole :attribute musi być prawidłową strefą czasową.',\n    'unique'      => 'Taki :attribute już występuje.',\n    'uploaded'    => 'Nie udało się wgrać pliku :attribute.',\n    'url'         => 'Format pola :attribute jest nieprawidłowy.',\n    'uuid'        => 'Pole :attribute musi być poprawnym identyfikatorem UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n    ],\n];\n"
  },
  {
    "path": "lang/pl/visibilities.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'admin'         => 'Tylko administratorzy widzą ten element.',\n        'admin-self'    => 'Tylko ty i administratorzy widzą ten element.',\n        'all'           => 'Wszyscy widzą ten element.',\n        'members'       => 'Tylko uczestnicy kampanii widzą ten element.',\n        'self'          => 'Tylko ty widzisz ten element.',\n    ],\n    'title'     => 'Zmiany widoczności',\n    'toast'     => 'Skutecznie zmieniono widoczność',\n    'tooltip'   => 'Opis różnych opcji widoczności elementów.',\n];\n"
  },
  {
    "path": "lang/pl/whiteboards/draw.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add-circle'    => 'Dodaj okrąg',\n        'add-entity'    => 'Dodaj element',\n        'add-image'     => 'Dodaj obraz',\n        'add-square'    => 'Dodaj kwadrat',\n        'add-text'      => 'Dodaj tekst',\n        'duplicate'     => 'Skopiuj wybrane',\n        'end-drawing'   => 'Zakończ rysowanie',\n        'lock'          => 'Zablokuj',\n        'push-to-back'  => 'Przesuń w tył',\n        'push-to-front' => 'Przesuń w przód',\n        'start-drawing' => 'Rozpocznij rysowanie',\n        'unlock'        => 'Odblokuj',\n    ],\n    'entity-search' => [\n        'placeholder'   => 'Wpisz nazwę albo alias elementu',\n        'title'         => 'Wyszukiwanie elementów',\n    ],\n    'errors'        => [\n        'websockets'    => [\n            'disconnected'  => 'Utracono połączenie z websocket. Spróbuj ponownie.',\n            'error'         => 'Wystąpił błąd połączenia z serwerem websocket.',\n            'unavailable'   => 'Serwer websocket jest niedostępny. Spróbuj później.',\n        ],\n    ],\n    'fields'        => [\n        'color' => 'Kolor',\n    ],\n    'pen'           => [\n        'large-stroke'  => 'Gruba linia',\n        'thin-stroke'   => 'Cienka linia',\n    ],\n    'reset'         => [\n        'helper'    => 'Czy na pewno chcesz wymazać tablicę? Tej akcji nie można cofnąć.',\n        'title'     => 'Wymaż tablicę',\n    ],\n    'roles'         => [\n        'edit'  => 'Ten użytkownik może edytować tablicę',\n        'view'  => 'Ten użytkownik może wyświetlić tablicę',\n    ],\n    'toast'         => [\n        'copy'  => [\n            'success'   => 'Skopiowano elementy do schowka.',\n        ],\n        'paste' => [\n            'error' => 'Coś poszło nie tak',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pl/whiteboards.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'draw'  => 'Rysowanie',\n    ],\n    'create'        => [\n        'title' => 'Nowa tablica',\n    ],\n    'cta'           => [\n        'text'  => 'By odblokować tablice, osoba która odblokowała funkcje premium musi mieć poziom :wywern albo :elemental.',\n        'title' => 'Tablica to specjalna funkcja premium',\n    ],\n    'lists'         => [\n        'empty' => 'Używaj tablic do wizualnej organizacji pomysłów, relacji i struktury narracji.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Pomysły, relacje, struktura narracji',\n    ],\n    'update'        => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'Anexar a entidades',\n        ],\n        'create'        => [\n            'attach_success'    => '{1} Anexada a habilidade :name a :count entidade.|[2,*] Anexada a habilidade :name a :count entidades.',\n            'helper'            => 'Anexar :name a uma ou várias entidades.',\n            'title'             => 'Anexar entidades',\n        ],\n        'description'   => 'Entidades que possuem a habilidade',\n        'title'         => 'Entidades com a Habilidade :name',\n    ],\n    'create'        => [\n        'title' => 'Nova Habilidade',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'entities'      => [],\n    'fields'        => [\n        'charges'   => 'Cargas',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Adicione poderes, magias ou talentos. Muitos criadores usam isso para modelar classes de D&D.',\n    ],\n    'placeholders'  => [\n        'charges'   => 'Quantidade de cargas. Atributos de referência com {Level} * {CHA}',\n        'name'      => 'Bola de Fogo, Alerta, Ataque Astuto',\n        'type'      => 'Magia, Talento, Ataque',\n    ],\n    'reorder'       => [\n        'parentless'    => 'Sem Habilidade Primária',\n        'success'       => 'Habilidades reordenadas com sucesso.',\n        'title'         => 'Reordenar as habilidades',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Reordenar Habilidades',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/account/email.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Atualizar e-mail',\n    ],\n    'fields'    => [\n        'email' => 'Novo endereço de e-mail',\n    ],\n    'helpers'   => [\n        'email' => 'Certifique-se de que está escrito corretamente.',\n    ],\n    'subtitle'  => 'Altere o endereço de e-mail associado à sua conta.',\n    'title'     => 'Atualize seu endereço de e-mail',\n];\n"
  },
  {
    "path": "lang/pt-BR/account/password.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Atualizar senha',\n    ],\n    'fields'    => [\n        'password'  => 'Nova senha',\n    ],\n    'helpers'   => [\n        'password'              => 'Use um gerenciador de senhas para gerar uma senha forte.',\n        'password_confirmation' => 'Não erre!',\n    ],\n    'subtitle'  => 'Altere a senha da sua conta. Isso desconectará você de todos os outros dispositivos.',\n    'title'     => 'Atualize a senha da sua conta',\n];\n"
  },
  {
    "path": "lang/pt-BR/account/social.php",
    "content": "<?php\n\nreturn [\n    'info'      => 'Login por :provider',\n    'subtitle'  => 'Mude de um login gerenciado por :provider para um gerenciado por Kanka, onde você faz login com seu e-mail e senha.',\n    'title'     => 'Mudar para um login Kanka',\n];\n"
  },
  {
    "path": "lang/pt-BR/articles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'move'  => 'Ir para a introdução',\n    ],\n    'helpers'   => [\n        'permissions'   => 'Essas permissões podem substituir a configuração :visibility do artigo.',\n    ],\n    'tabs'      => [\n        'layout'        => 'Layout',\n        'main'          => 'Principal',\n        'permissions'   => 'Permissões especiais',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/assistance.php",
    "content": "<?php\n\nreturn [\n    'fields'        => [\n        'campaign'  => 'Campanha',\n    ],\n    'opening'       => 'Um membro da equipe de Kanka enviou você para esta página com o objetivo de ajudá-lo.',\n    'placeholders'  => [\n        'campaign'  => 'Selecione uma campanha da qual você é administrador',\n    ],\n    'select'        => 'Selecione uma campanha da qual você é administrador no menu suspenso abaixo para gerar um token de uso único especial, que permitirá que um membro da equipe Kanka participe temporariamente da campanha como administrador.',\n    'success'       => [\n        'opening'   => 'Seu token de assistência foi gerado com sucesso. A equipe Kanka foi notificada e entrará em contato com sua campanha em breve para ajudar você. Normalmente, entraremos em contato via :discord se precisarmos coordenar algo diretamente.',\n        'secret'    => 'Somente um membro verificado da equipe Kanka pode usar esse token. Ele é inútil para os demais, então não há necessidade de tratá-lo como um segredo.',\n        'token'     => 'Seu token de assistência:',\n    ],\n    'title'         => 'Assistência',\n];\n"
  },
  {
    "path": "lang/pt-BR/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'bulk'                  => [\n        'entity_type'   => [\n            'unset' => 'Não definido',\n        ],\n    ],\n    'create'                => [\n        'title' => 'Novo Modelo de Atributo',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [\n        'auto_apply'    => 'Auto-aplicar',\n        'is_enabled'    => 'Habilitado',\n    ],\n    'hints'                 => [\n        'automatic'                 => 'Os seguintes :count atributos foram automaticamente aplicado de :link',\n        'automatic_apply'           => '{1} O seguinte :count atributo foi aplicado automaticamente de :link | [2,] Os seguintes :count atributos foram aplicados automaticamente de :link.',\n        'entity_type'               => 'Aplique automaticamente os atributos deste modelo a novas entidades do tipo selecionado.',\n        'is_disabled'               => 'Esse modelo está desabilitado.',\n        'is_enabled'                => 'Habilite esse modelo para usar na campanha.',\n        'parent_attribute_template' => 'Este modelo de atributo pode ser secundário de outro modelo de atributo. Ao aplicar este modelo de atributo, ele e todos os seus modelos primários serão aplicados.',\n    ],\n    'index'                 => [],\n    'lists'                 => [\n        'empty' => 'Criar um conjunto de ferramentas para reutilizar propriedades comuns em várias entradas.',\n    ],\n    'placeholders'          => [\n        'name'  => 'Nome do Modelo de Atributo',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Erro',\n            'rendering' => 'Ocorreu um erro ao processar o plug-in do mercado. Entre em contato com o criador do plug-in.',\n        ],\n    ],\n    'helpers'   => [],\n    'list'      => [\n        'sheets'    => 'Planilhas de Personagem',\n    ],\n    'pitch'     => 'Encontre e adicione planilhas de personagens do :marketplace em uma :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/pt-BR/auth.php",
    "content": "<?php\n\nreturn [\n    'banned'    => [\n        'permanent' => 'Você foi banido permanentemente.',\n        'temporary' => '{1} Você foi banido por :days dia.|[2,*] Você foi banido por :days dias.',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Confirmar',\n        'error'     => 'Senha inválida, por favor tente novamente.',\n        'helper'    => 'Por favor confirme sua senha antes de continuar.',\n        'title'     => 'Confirmação de senha',\n    ],\n    'continue'  => [\n        'facebook'  => 'Continuar com Facebook',\n        'google'    => 'Continuar com Google',\n        'x'         => 'Continuar com X',\n    ],\n    'failed'    => 'Essas credenciais não correspondem ao do nosso sistema.',\n    'helpers'   => [\n        'password'  => 'Mostrar / Esconder senha',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'Senha de uso único',\n            'email'     => 'Email',\n            'password'  => 'Senha',\n        ],\n        'no-account'            => 'Não tem uma conta?',\n        'or'                    => 'OU',\n        'password_forgotten'    => 'Esqueceu sua senha?',\n        'sign-up'               => 'Inscrever-se',\n        'submit'                => 'Entrar',\n        'title'                 => 'Entrar',\n    ],\n    'register'  => [\n        'already'   => 'Já possui uma conta? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Já há uma conta registrada com esse email.',\n            'general_error'         => 'Um erro ocorreu enquanto sua conta era registrada. Por favor tente novamente.',\n        ],\n        'fields'    => [\n            'email'     => 'Email',\n            'name'      => 'Usuário',\n            'password'  => 'Senha',\n        ],\n        'log-in'    => 'Conectar-se',\n        'submit'    => 'Registrar',\n        'title'     => 'Registrar',\n        'tos'       => 'Ao registrar uma conta, você concorda com nossos :terms e :privacy.',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Endereço de E-mail',\n            'password'              => 'Senha',\n            'password_confirmation' => 'Confirme sua senha',\n        ],\n        'send'      => 'Enviar Link de Redefinição de Senha',\n        'submit'    => 'Redefinir senha',\n        'title'     => 'Redefinir senha',\n    ],\n    'tfa'       => [\n        'helper'    => 'A autenticação de dois fatores está habilitada. Forneça a senha de uso único (OTP) fornecida pelo seu aplicativo autenticador.',\n        'title'     => 'Autenticação de Dois-Fatores',\n    ],\n    'throttle'  => 'Muitas tentativas de login. Por favor tente novamente em :seconds segundos.',\n    'x-twitter' => 'X anteriormente conhecido como Twitter',\n];\n"
  },
  {
    "path": "lang/pt-BR/banners.php",
    "content": "<?php\n\nreturn [\n    'kanka4years'   => 'Use o código promocional :code para obter 20% de desconto na sua primeira assinatura anual!',\n];\n"
  },
  {
    "path": "lang/pt-BR/billing/information.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Atualizar info',\n    ],\n    'helper'    => 'Seu endereço comercial, número de IVA etc. podem ser adicionados a todos os seus recibos.',\n    'title'     => 'Atualizar informações de cobrança',\n];\n"
  },
  {
    "path": "lang/pt-BR/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Download PDF',\n    ],\n    'description'   => 'Exibindo faturas dentro dos últimos 24 meses.',\n    'empty'         => 'Nenhuma fatura encontrada',\n    'fields'        => [\n        'amount'    => 'Valor',\n        'date'      => 'Data',\n        'invoice'   => 'Fatura',\n        'status'    => 'Status',\n    ],\n    'paypal'        => 'Observe que apenas pagamentos feitos pelo Stripe, e não pelo PayPal, são visíveis aqui.',\n    'status'        => [\n        'paid'      => 'Pago',\n        'pending'   => 'Pendente',\n    ],\n    'title'         => 'Histórico de cobrança',\n];\n"
  },
  {
    "path": "lang/pt-BR/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'Histórico de cobrança',\n    'overview'          => 'Visão geral',\n    'payment-method'    => 'Método de pagamento',\n];\n"
  },
  {
    "path": "lang/pt-BR/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Método de pagamento',\n    'types' => [\n        'card'  => 'Cartão',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Personalizar barra lateral',\n    ],\n    'create'            => [\n        'title' => 'Novo marcador',\n    ],\n    'destroy'           => [],\n    'edit'              => [\n        'title' => 'Marcador :name',\n    ],\n    'fields'            => [\n        'active'            => 'Ativo',\n        'dashboard'         => 'Dashboard',\n        'default_dashboard' => 'Dashboard padrão',\n        'filters'           => 'Filtros',\n        'menu'              => 'Sub-menu',\n        'position'          => 'Posição',\n        'random_type'       => 'Tipo Aleatório de Entidade',\n        'selector'          => 'Configuração do Marcador',\n        'target'            => 'Alvo',\n    ],\n    'helpers'           => [\n        'active'            => 'Marcadores inativos não aparecerão na barra lateral.',\n        'css'               => 'Adicione uma classe CSS que será adicionada ao link do marcador na barra lateral.',\n        'dashboard'         => 'Faça com que o link rápido seja direcionado a um dos dashboards personalizados da campanha.',\n        'default_dashboard' => 'Em vez disso, crie um link para o dashboard padrão da campanha. Um dashboard personalizado ainda precisa ser selecionado.',\n        'entity'            => 'Configure este marcador para ir diretamente para uma entidade. O campo :menu controla qual subpágina da entidade será aberta.',\n        'position'          => 'Use este campo para controlar em qual ordem crescente os links aparecem no menu.',\n        'random'            => 'Use este campo para ter um marcador indo para uma entidade aleatória. Você pode filtrar o link para que ele vá para um tipo específico de entidade.',\n        'selector'          => 'Configure para onde este marcador vai quando um usuário clica nele na barra lateral.',\n        'type'              => 'Configure este link rápido para ir diretamente para uma lista de entidades. Para filtrar os resultados, copie partes da url na lista de entidades filtradas após o sinal :? no campo de filtro :filter.',\n    ],\n    'index'             => [],\n    'lists'             => [\n        'empty' => 'Salve marcadores para suas entradas mais usadas ou listas filtradas para acesso mais rápido.',\n    ],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=city',\n        'menu'      => 'Subpágina do menu (use o último texto da url)',\n        'tab'       => 'Registro, relações, notas',\n    ],\n    'random_no_entity'  => 'Nenhuma entidade aleatória encontrada.',\n    'random_types'      => [\n        'any'   => 'Qualquer entidade',\n    ],\n    'reorder'           => [\n        'success'   => 'Marcadores reordenados.',\n        'title'     => 'Reordenar marcadores',\n    ],\n    'show'              => [],\n    'targets'           => [\n        'dashboard' => 'Um dos dashboards da campanha',\n        'entity'    => 'Uma única entidade',\n        'random'    => 'Uma entidade aleatória',\n        'select'    => 'Escolha uma opção',\n        'type'      => 'Lista de entidades de um tipo/módulo de entidade específico',\n    ],\n    'visibilities'      => [\n        'is_active' => 'Mostrar o marcador na barra lateral',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/bragi/backstory.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Escreva uma breve história do personagem inspirada nessas informações. Adapte o tom e os detalhes aos sistemas e gêneros de jogo selecionados. Você pode incluir elementos como a aparência, origem, crenças, relacionamentos, objetivos, falhas ou experiências marcantes do personagem — o que melhor se adequar ao personagem.',\n    'setup'     => [\n        'gender'    => 'Gênero: :gender',\n        'genres'    => 'Gêneros: :genres',\n        'name'      => 'Nome do personagem: :name',\n        'prompt'    => 'Prompt: \":prompt\"',\n        'pronouns'  => 'Pronomes: :pronouns',\n        'systems'   => 'Sistema de jogo: :systems',\n    ],\n    'system'    => 'Você é um contador de histórias e escritor de personagens profissional de RPG. Você cria histórias imersivas e emocionalmente impactantes para RPGs de mesa. Seu estilo se adapta ao tom e ao cenário do jogo. Você normalmente escreve de 2 a 4 parágrafos e até 400 palavras, abordando aparência, história, crenças, motivações e falhas.',\n];\n"
  },
  {
    "path": "lang/pt-BR/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'Gerar',\n        'insert'    => 'Usar',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'Para acessar esse recurso, você precisa ter uma assinatura Wyvern ou Elemental.',\n        'out-of-tokens' => 'Você está sem fichas! Você receberá automaticamente mais em :date.',\n    ],\n    'here'          => 'aqui',\n    'intro'         => 'Oi! Sou :name, uma IA aqui para ajudá-lo a gerar histórias de fundo para seus personagens em Kanka. Você pode aprender mais sobre mim :here.',\n    'kankappy'      => 'Eles são secretamente um discípulo de Kankappy.',\n    'loading'       => 'Aguarde, estou pensando muito e pode levar até um minuto!',\n    'placeholders'  => [\n        'prompt'    => 'Forneça um prompt que será transformado em uma história de fundo.',\n    ],\n    'token-limit'   => 'Atualmente você tem :amount tokens. Cada vez que eu gero uma história de fundo, isso usa um token, então use-os com sabedoria!',\n];\n"
  },
  {
    "path": "lang/pt-BR/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'helper'    => 'Adicione informações meteorológicas que serão exibidas no calendário.',\n        'success'   => 'Clima adicionado.',\n        'title'     => 'Novo clima',\n    ],\n    'destroy'       => [\n        'success'   => 'Clima removido.',\n    ],\n    'edit'          => [\n        'success'   => 'Clima atualizado.',\n        'title'     => 'Atualizar clima',\n    ],\n    'fields'        => [\n        'effect'        => 'Efeito',\n        'name'          => 'Nome',\n        'precipitation' => 'Precipitação',\n        'temperature'   => 'Temperatura',\n        'weather'       => 'Clima',\n        'wind'          => 'Vento',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Trovão',\n            'cloud'                 => 'Nublado',\n            'cloud-rain'            => 'Chuvoso',\n            'cloud-showers-heavy'   => 'Chuva forte',\n            'cloud-sun'             => 'Nublado e Ensolarado',\n            'cloud-sun-rain'        => 'Nuvem, Sol e Chuva',\n            'meteor'                => 'Meteoro',\n            'smog'                  => 'Nevoeiro',\n            'snowflake'             => 'Neve',\n            'sun'                   => 'Ensolarado',\n            'wind'                  => 'Ventoso',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Efeito mágico ou natural',\n        'name'          => 'Texto opcional e personalizado do clima',\n        'precipitation' => 'Quantidade de água',\n        'temperature'   => 'Máxima e mínima do dia',\n        'wind'          => 'Velocidade do vento',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Adicionar uma época',\n        'add_intercalary'   => 'Adicionar dias intercalares',\n        'add_month'         => 'Adicionar um mês',\n        'add_moon'          => 'Adicionar uma lua',\n        'add_reminder'      => 'Adicionar um lembrete',\n        'add_season'        => 'Adicionar uma estação',\n        'add_weather'       => 'Definir efeitos do clima',\n        'add_week'          => 'Adicionar uma semana nomeada',\n        'add_weekday'       => 'Adicionar um dia da semana',\n        'add_year'          => 'Adicionar um ano nomeado',\n        'set_today'         => 'Definir como dia atual',\n        'today'             => 'Hoje',\n        'update_weather'    => 'Atualizar o clima',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Ocorre todos os anos',\n    ],\n    'create'        => [\n        'title' => 'Novo Calendário',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Data do calendário atualizada.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Evento de calendário criado.',\n            'title'     => 'Adicionar um Evento de Calendário para :name',\n        ],\n        'destroy'   => 'Lembrete removido do calendário \\':name\\'',\n        'edit'      => [\n            'success'   => 'Lembrete atualizado.',\n            'title'     => 'Atualizar Lembrete para :name',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Seleção de entidade inválida.',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Você está editando um lembrete que está no calendário :calendar.',\n        ],\n        'success'   => 'Lembrete \\':event\\' adicionado ao calendário.',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} :count lembrete removido.|[2,*] :count lembretes removidos.',\n            'patch'     => '{1} :count lembrete atualizado.|[2,*] :count lembretes atualizados.',\n        ],\n        'end'       => '(fim)',\n        'filters'   => [\n            'show_after'    => 'Mostrar hoje e depois',\n            'show_all'      => 'Mostrar tudo',\n            'show_before'   => 'Mostrar antes de hoje',\n        ],\n        'start'     => '(começo)',\n    ],\n    'fields'        => [\n        'comment'           => 'Comentário',\n        'current_day'       => 'Dia Atual',\n        'current_month'     => 'Mês Atual',\n        'current_year'      => 'Ano Atual',\n        'date'              => 'Data Atual',\n        'day'               => 'Dia',\n        'default_layout'    => 'Layout padrão',\n        'format'            => 'Formato',\n        'is_incrementing'   => 'Avançando data',\n        'is_recurring'      => 'Recorrente',\n        'leap_year'         => 'Anos bissextos',\n        'leap_year_amount'  => 'Adicionar Dias',\n        'leap_year_month'   => 'Mês',\n        'leap_year_offset'  => 'Cada',\n        'leap_year_start'   => 'Ano Bissexto',\n        'length'            => 'Duração do Evento',\n        'length_days'       => ':count day|: contar dias',\n        'month'             => 'Mês',\n        'months'            => 'Meses',\n        'moons'             => 'Luas',\n        'parameters'        => 'Parâmetros',\n        'recurring_until'   => 'Recorrente Até o Ano',\n        'reset'             => 'Reinicialização Semanal',\n        'seasons'           => 'Estações',\n        'show_birthdays'    => 'Mostrar Aniversários',\n        'skip_year_zero'    => 'Ignorar o Ano Zero',\n        'start_offset'      => 'Deslocamento Inicial',\n        'suffix'            => 'Sufixo',\n        'week_names'        => 'Nomes da Semana',\n        'weekdays'          => 'Dias da Semana',\n        'year'              => 'Ano',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Selecione qual layout o calendário deve usar por padrão quando visualizado.',\n        'format'            => 'Adicione formatação de data personalizada para entidades do calendário.',\n        'month_type'        => 'Os meses intercalares não usam os dias da semana, mas ainda influenciam as luas e as estações.',\n        'moon_offset'       => 'Por padrão, a primeira lua cheia aparece no primeiro dia do ano 0. A alteração do deslocamento mudará quando a primeira lua cheia for exibida. Este valor pode ser negativo (até a duração do primeiro mês) ou positivo (até a duração do primeiro mês).',\n        'start_offset'      => 'Por padrão, o calendário começa no primeiro dia da semana do ano 0. A alteração deste campo influencia onde o primeiro dia do calendário é colocado.',\n    ],\n    'hints'         => [\n        'event_length'      => 'Quanto tempo um evento deve durar. Um evento não pode durar mais de dois meses.',\n        'is_incrementing'   => 'O avanço de calendário automaticamente terá seu incremento da data atual às 00:00 UTC.',\n        'leap_year'         => 'Configure anos bissextos para o calendário.',\n        'months'            => 'Seu calendário deve ter pelo menos 2 meses.',\n        'moons'             => 'Adicionar luas fará com que elas apareçam no calendário em cada lua cheia e nova. Se o período da lua cheia for maior que 10 dias, as luas minguantes e crescentes também serão exibidas.',\n        'parent_calendar'   => 'Relacionar o calendário a um calendário primário incluirá os lembretes e os efeitos do clima do calendário primário.',\n        'reset'             => 'Sempre comece no início do mês ou ano no primeiro dia da semana.',\n        'seasons'           => 'Crie estações para o seu calendário, informando quando cada uma delas começa. Kanka cuidará do resto.',\n        'show_birthdays'    => 'Mostre os aniversários anuais dos personagens que têm um lembrete de aniversário neste calendário até a data de sua morte.',\n        'skip_year_zero'    => 'Por padrão, o primeiro ano do calendário é o ano zero. Habilite esta opção para pular o ano zero.',\n        'weekdays'          => 'Defina os nomes dos dias da semana. São necessários pelo menos 2 dias de semana.',\n        'weeks'             => 'Defina alguns nomes para as semanas mais importantes do seu calendário.',\n        'years'             => 'Alguns anos são tão importantes que têm um nome próprio.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month'     => 'Mês',\n        'monthly'   => 'Mensal por padrão',\n        'year'      => 'Ano',\n        'yearly'    => 'Anual por padrão',\n    ],\n    'lists'         => [\n        'empty' => 'Crie um calendário para acompanhar datas, festivais ou eventos do jogo ao longo do tempo.',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Seletor de Ano',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Intercalado',\n        'standard'      => 'Padrão',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Lua cheia',\n                'fullmoon_name' => ':moon lua cheia',\n                'month'         => 'Mensal',\n                'newmoon'       => 'Lua nova',\n                'newmoon_name'  => ':moon lua nova',\n                'none'          => 'Nenhum',\n                'unnamed_moon'  => 'Lua :number',\n                'year'          => 'Anual',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Nenhum',\n            'month' => 'Mensal',\n            'year'  => 'Anual',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Dias Intercalares',\n        'leap_year'     => 'Ano Bissexto',\n        'months'        => 'Meses',\n        'weeks'         => 'Semanas',\n        'years'         => 'Anos Nomeados',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Duração em dias',\n            'month'     => 'No final de qual mês',\n            'name'      => 'Nome da intercalação',\n        ],\n        'month'         => [\n            'alias' => 'Apelido ​​do Mês',\n            'length'=> 'Dias',\n            'name'  => 'Nome do Mês',\n            'type'  => 'Tipo',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Lua cheia a cada (dias)',\n            'name'      => 'Nome da Lua',\n            'offset'    => 'Primeiro deslocamento da lua cheia',\n        ],\n        'seasons'       => [\n            'day'   => 'Início do dia',\n            'month' => 'Início do mês',\n            'name'  => 'Nome da Estação',\n        ],\n        'weeks'         => [\n            'name'      => 'Nome da Semana',\n            'number'    => 'Número',\n        ],\n        'year'          => [\n            'name'      => 'Nome do Ano',\n            'number'    => 'Ano',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Cor',\n        'comment'           => 'Aniversário, festival, solstício',\n        'date'              => 'A data atual',\n        'leap_year_amount'  => 'Número de dias adicionado em um ano bissexto',\n        'leap_year_month'   => 'Mês em que os dias são adicionados',\n        'leap_year_offset'  => 'A cada quantos anos é um ano bissexto',\n        'leap_year_start'   => 'Primeiro ano que é um ano bissexto',\n        'length'            => 'Duração do evento em dias',\n        'months'            => 'Número de meses em um ano',\n        'recurring_until'   => 'Ultimo ano recorrente (deixe vazio para ser recorrente sempre)',\n        'seasons'           => 'Número de estações',\n        'suffix'            => 'Sufixo atual da Era (AC, DC)',\n        'type'              => 'Tipo do calendário',\n        'weekdays'          => 'Número de dias em uma semana',\n    ],\n    'show'          => [\n        'missing_details'       => 'Este calendário não pôde ser exibido. Os calendários precisam de pelo menos 2 meses e 2 dias da semana para serem renderizados corretamente.',\n        'moon_1first_quarter'   => 'Lua minguante de :moon',\n        'moon_full'             => 'Lua cheia de :moon',\n        'moon_last_quarter'     => 'Lua crescente de :moon',\n        'moon_new'              => 'Lua nova de :moon',\n        'tabs'                  => [\n            'events'    => 'Lembretes',\n            'weather'   => 'Clima',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Hoje & depois',\n        'before'=> 'Hoje & antes',\n    ],\n    'validators'    => [\n        'format'        => 'O formato da data é inválido.',\n        'moon_offset'   => 'O deslocamento da primeira lua cheia não pode ser maior que a duração do primeiro mês do calendário.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Os lembretes que abrangem vários anos só são visíveis nos primeiros dois anos. Saiba mais em nossa :documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/callouts.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscription'  => 'Saiba mais sobre assinaturas',\n        'upgrade'       => 'Atualizar para premium',\n    ],\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Impulsionar :campaign',\n            'superboost'    => 'Superimpulsionar :campaign',\n        ],\n        'learn-more'    => 'O que são impulsionamentos?',\n        'limitation'    => 'Para acessar esse recurso, a campanha precisa ser impulsionada.',\n        'limitations'   => [\n            'boosted'       => 'Para acessar esse recurso, a campanha precisa ser impulsionada.',\n            'superboosted'  => 'Para acessar esse recurso, a campanha precisa ser super-impulsionada.',\n        ],\n        'multiple'      => 'Para acessar esses recursos, a campanha precisa ser impulsionada.',\n        'pitches'       => [\n            'element-class' => 'Dê a este elemento uma classe CSS personalizada com uma :boosted-campaign.',\n            'icon'          => 'Desbloqueie milhões de ícones personalizados do FontAwesome com uma :boosted-campaign.',\n        ],\n        'titles'        => [\n            'boosted'       => 'Recurso impulsionado',\n            'superboosted'  => 'Recurso superimpulsionado',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => 'O que são campanhas premium?',\n        'limitation'    => 'Para acessar esse recurso, os recursos premium precisam estar ativados.',\n        'multiple'      => 'Para acessar esses recursos, os recursos premium precisam ser habilitados para :campaign.',\n        'title'         => 'Recurso de campanha premium',\n        'unlock'        => 'Desbloqueie recursos premium para :campaign',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Inscreva-se para desbloquear até :max MB tamanhos de upload de arquivo.',\n        'share-booster' => 'Impulsione :campaign para aumentar o tamanho do upload do arquivo para todos os membros da campanha.',\n        'share-premium' => 'Aumente o tamanho do upload do arquivo para todos os membros da campanha com uma campanha premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => 'Parabéns!',\n    'connections'       => '{0} Nenhuma conexão criada|{1} Uma conexão criada|[2,*] :amount de conexões criadas',\n    'created'           => '{0} Nenhum :plural criado|{1} Um :singular criado|[2,*] :amount :plural criado',\n    'dead'              => '{0} Nenhum mistério de assassinato|{1} Um mistério de assassinato|[2,*] :quantidade de mistérios de assassinato',\n    'goal'              => 'Objetivo :number',\n    'goal_reached'      => 'A campanha desbloqueou a seguinte conquista:',\n    'level'             => 'nível :number',\n    'markers'           => '{0} Nenhum marcador de mapa criado|{1} Um marcador de mapa criado|[2,*] :amount de marcadores de mapa criados',\n    'painter'           => '{0} Nenhum tema criado|{1} Um tema criado|[2,*] :amount de temas criados',\n    'pitch'             => 'Conquistas de campanha são uma maneira divertida de celebrar marcos na sua jornada de construção de mundo. Acompanhe o progresso, interaja com seus jogadores e exiba suas conquistas com uma campanha premium.',\n    'plugins'           => '{0} Nenhum plugin instalado|{1} Um plugin instalado|[2,*] :amount de plugins instalados',\n    'remaining'         => [\n        'generic'   => 'Mais e o próximo nível será desbloqueado.',\n    ],\n    'spotlight'         => [\n        'active'    => [\n            'cta'   => 'Veja os destaques',\n        ],\n        'private'   => [\n            'cta'       => 'Revisar configurações públicas',\n            'helper'    => 'Torne sua campanha pública para ser elegível ao Destaque.',\n        ],\n        'public'    => [\n            'cta'       => 'Aprenda como funciona o destaque',\n            'helper'    => 'As campanhas selecionadas são apresentadas no Kanka Showcase e no blog.',\n        ],\n    ],\n    'spotlighted'       => '{0} Ainda não destacado|[1,*] Em destaque',\n    'tagged'            => '{0} Nenhuma entidade com tag|{1} Uma entidade com tag|[2,*] :amount de entidades com tag',\n    'titles'            => [\n        'calendars'     => 'Guardião do tempo',\n        'characters'    => 'Nomeador',\n        'connections'   => 'Cupido',\n        'creatures'     => 'Criador',\n        'dead'          => 'Assassino',\n        'events'        => 'Mestre do conhecimento',\n        'families'      => 'Planejador de família',\n        'locations'     => 'Construtor',\n        'markers'       => 'Cartógrafo',\n        'organisations' => 'Fusões e aquisições',\n        'plugins'       => 'Conhecedor de plugins',\n        'quests'        => 'Mente brilhante',\n        'spotlighted'   => 'Em destaque',\n        'tags'          => 'Sob controle',\n        'themes'        => 'Pintor',\n    ],\n    'tutorial'          => 'As conquistas registram ações importantes nesta campanha, como criar entidades ou usar recursos essenciais. Elas são apenas informativas e são atualizadas automaticamente conforme você explora e constrói.',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'accept'    => 'Aceitar',\n        'reject'    => 'Rejeitar',\n    ],\n    'apply'         => [\n        'apply'         => 'Aplicar',\n        'help'          => 'Essa campanha é aberta a novos membros. Inscreva-se para participar preenchendo o formulário. Você será notificado quando os administradores da campanha revisarem sua solicitação.',\n        'remove_text'   => 'sua submissão',\n        'success'       => [\n            'apply' => 'Sua solicitação foi salva. Você ainda pode alterá-la ou cancelá-la a qualquer momento. Você será notificado quando os administradores da campanha revisarem o pedido.',\n            'remove'=> 'Sua solicitação foi removida.',\n            'update'=> 'Sua solicitação foi atualizada. Você ainda pode alterá-la ou cancelá-la a qualquer momento. Você será notificado quando os administradores da campanha revisarem o pedido.',\n        ],\n        'title'         => 'Inscreva-se em :name',\n    ],\n    'errors'        => [],\n    'fields'        => [\n        'application'   => 'Solicitação',\n        'reason'        => 'Motivo de aprovação/rejeição',\n    ],\n    'helpers'       => [\n        'modal'                 => 'Uma campanha aberta a solicitações e ao público pode fazer com que os usuários se inscrevam para participar da campanha.',\n        'no_applications_title' => 'Nenhuma solicitação encontrada',\n        'reason'                => 'Se fornecido, o solicitante será notificado sobre esse motivo.',\n        'role'                  => 'Se aprovado, o cargo ào qual o solicitante será adicionado.',\n    ],\n    'open'          => [\n        'closed'    => 'Campanha está fechada',\n        'open'      => 'Campanha está aberta',\n        'title'     => 'Campanha aberta',\n    ],\n    'placeholders'  => [\n        'note'      => 'Escreva a sua solicitação para se inscrever na campanha.',\n        'reason'    => 'Sua razão',\n    ],\n    'public'        => [\n        'private'   => 'Campanha está privada.',\n        'public'    => 'Campanha está pública.',\n        'title'     => 'Campanha pública',\n    ],\n    'statuses'      => [],\n    'toggle'        => [\n        'closed'    => 'Fechada a inscrições',\n        'label'     => 'Status',\n        'open'      => 'Aberta a inscrições',\n        'success'   => 'Status das inscrições da campanha atualizado.',\n        'title'     => 'Status das inscrições',\n    ],\n    'update'        => [\n        'approve'   => 'Selecione o cargo do usuário que será adicionado em sua campanha.',\n        'approved'  => 'Inscrição aprovada.',\n        'reject'    => 'Escreva uma mensagem opcional para os usuários explicando por que você está rejeitando sua inscrição.',\n        'rejected'  => 'Inscrição rejeitada.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'      => 'Construa visualmente um tema para a campanha com esta interface. Role para baixo para ver como as mudanças afetariam vários elementos da campanha. Quando uma cor é selecionada, uma cor \"contraste\" é automaticamente selecionada para colorir o texto. Saiba mais sobre temas em nossa :docs.',\n    'pitch'     => 'Psst, temos um construtor de temas, se tudo o que você quer fazer é mudar algumas das cores da campanha 😉',\n    'pitch-go'  => 'Leve-me ao construtor de temas',\n    'reset'     => 'O estilo do construtor de temas foi reiniciado.',\n    'success'   => 'O estilo do construtor de temas foi salvo.',\n    'title'     => 'Construtor de temas',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/categories.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'permission-disabled'   => 'Esta categoria está desativada.',\n    ],\n    'helpers'   => [\n        'aliases'   => 'Adicione pseudônimos e identidades secretas às entradas do mundo.',\n        'media'     => 'Faça o upload de documentos multimídia (imagens, PDFs, áudio) e links externos para as inscrições.',\n    ],\n    'tab'       => 'Categorias',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Cabeçalho do dashboard da campanha atualizado.',\n        'title'     => 'Atualizar cabeçalho do dashboard da campanha',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Carregar uma nova imagem em miniatura',\n    ],\n    'call-to-action'    => 'Carregue uma imagem em miniatura personalizada para todos os personagens, locais ou outras entidades da campanha. Essas imagens são mostradas em várias listas.',\n    'create'            => [\n        'error'     => 'Erro ao salvar as novas imagens em miniatura padrões de entidade. O :type já está definido?',\n        'helper'    => 'Carregue uma imagem que será usada como miniatura padrão para entidades do módulo selecionado.',\n        'success'   => 'Nova imagem em miniatura para :type criada.',\n        'title'     => 'Nova imagem em miniatura padrão',\n    ],\n    'destroy'           => [\n        'success'   => 'Imagem em miniatura padrão para :type removida.',\n    ],\n    'empty'             => 'Nenhum módulo tem atualmente uma configuração de miniatura padrão.',\n    'helper'            => 'Usado para todas as entidades deste módulo sem uma imagem.',\n    'index'             => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/delete.php",
    "content": "<?php\n\nreturn [\n    'backup'            => 'backup',\n    'confirm'           => 'Se você tem certeza de que deseja excluir permanentemente :campaign, escreva :code no campo abaixo.',\n    'confirm-button'    => 'Excluir permanentemente :name',\n    'helper'            => 'Excluir uma campanha é uma ação permanente e irreversível. Isso removerá todos os dados relacionados à campanha de nossos servidores, incluindo imagens e anexos. Recomendamos fazer um backup antes de continuar.',\n    'issue'             => 'O seguinte problema precisa ser corrigido antes que a campanha possa ser excluída.',\n    'members'           => 'Todos os outros membros precisam ser removidos da campanha.',\n    'success'           => ':name foi excluído permanentemente.',\n    'title'             => 'Exclusão',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'download'  => 'Download',\n        'export'    => 'Exportar a campanha',\n    ],\n    'confirm'   => [\n        'notification'  => 'Os membros do cargo :admin serão notificados quando a exportação estiver pronta para download.',\n        'title'         => 'Confirmação de exportação',\n        'warning'       => 'Você está prestes a exportar os dados da campanha. Este processo pode demorar muito dependendo do tamanho da campanha. Você pode continuar usando o Kanka enquanto nossos servidores geram a exportação.',\n    ],\n    'errors'    => [\n        'limit' => 'A campanha já foi exportada uma vez hoje. Por favor, tente novamente amanhã.',\n    ],\n    'expired'   => 'Link expirado',\n    'helpers'   => [],\n    'progress'  => 'Progresso',\n    'size'      => 'Tamanho',\n    'status'    => [\n        'failed'    => 'Fracassado',\n        'finished'  => 'Finalizado',\n        'running'   => 'Executando',\n        'scheduled' => 'Agendado',\n    ],\n    'success'   => 'A exportação da campanha está sendo preparada. Você será notificado em Kanka assim que estiver pronto para download.',\n    'title'     => 'Exportação da Campanha',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close'         => 'Fechar',\n        'file-link'     => 'Link do arquivo',\n        'focus_point'   => 'Configurar ponto de foco',\n        'image-link'    => 'Link da imagem',\n        'reset_focus'   => 'Redefinir ponto de foco',\n        'save'          => 'Salvar',\n        'upgrade'       => 'Atualizar espaço de armazenamento',\n    ],\n    'breadcrumb'    => 'Galeria',\n    'bulk'          => [\n        'destroy'   => [\n            'confirm'   => 'Tem certeza de que deseja remover permanentemente os elementos selecionados? Essa ação não pode ser desfeita.',\n            'success'   => '{0}Nenhum arquivo removido.|{1}Um arquivo removido.|{2,*} :count arquivos removidos.',\n        ],\n    ],\n    'cta'           => 'Gerencie e reutilize imagens em toda a campanha.',\n    'destroy'       => [\n        'folder'    => 'Pasta :name removida.',\n        'success'   => 'Imagem :name removida.',\n    ],\n    'errors'        => [\n        'max'           => 'Por favor, selecione apenas até :count arquivos por vez.',\n        'permissions'   => 'Seu cargo de campanha não possui a permissão :permission para carregar imagens para a galeria da campanha.',\n        'storage'       => 'Não há espaço de armazenamento suficiente para carregar as imagens selecionadas. Espaço de armazenamento disponível: :available.',\n    ],\n    'fields'        => [\n        'created_by'            => 'Carregada por',\n        'details'               => 'Detalhes',\n        'ext'                   => 'Sair',\n        'file_type'             => 'Tipo do arquivo',\n        'folder'                => 'Pasta',\n        'image_mentioned_in'    => '{0} Esta imagem não é mencionada em nenhuma das entidades da campanha.|{1} Mencionada em uma introdução/post.|[2,*] mencionada em :count introduções/posts.',\n        'image_used_in'         => '{0} Esta imagem não é usada em nenhuma das entidades da campanha.|{1} Usada como a imagem de uma entidade.|[2,*] Usada como a imagem de :count entidades.',\n        'link'                  => 'Link',\n        'name'                  => 'Nome',\n        'size'                  => 'Tamanho',\n        'unused'                => 'Não usado em lugar nenhum',\n        'used_in'               => 'Usado em',\n    ],\n    'focus'         => [\n        'locked'    => 'Uma campanha premium é necessária para definir o ponto focal de uma imagem.',\n        'removed'   => 'Foco da imagem removido.',\n        'updated'   => 'Foco da imagem atualizado.',\n    ],\n    'new_folder'    => [\n        'title' => 'Nova pasta',\n    ],\n    'no_folder'     => 'Sem pasta',\n    'pitch'         => 'Carregue imagens para a galeria da campanha diretamente do editor de texto.',\n    'placeholders'  => [\n        'search'    => 'Procurar nome da imagem...',\n    ],\n    'storage'       => [\n        'of'    => 'de',\n        'title' => 'Armazenamento',\n    ],\n    'title'         => 'Galeria da Campanha :campaign',\n    'update'        => [\n        'folder'    => 'Pasta modificada.',\n        'success'   => 'Imagem modificada.',\n    ],\n    'uploader'      => [\n        'add'           => 'Adicionar nova',\n        'new_folder'    => 'Nova Pasta',\n        'or'            => 'ou',\n        'select_file'   => 'Selecione um arquivo',\n        'well'          => 'Solte o arquivo para fazer upload',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/import.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'import'    => 'Carregar a exportação',\n    ],\n    'fields'    => [\n        'updated'   => 'Última atualização',\n    ],\n    'form'      => 'Carregar formulário',\n    'progress'  => [\n        'uploading' => 'Carregando',\n    ],\n    'status'    => [\n        'failed'    => 'Fracassado',\n        'finished'  => 'Finalizado',\n        'queued'    => 'Enfileirado',\n        'running'   => 'Executando',\n    ],\n    'title'     => 'Importar',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/invites.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Crie um link de convite para enviar aos seus jogadores, para que eles possam participar da campanha.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Limite alcançado',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/logs.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'list'      => 'Mantemos um log de todas as principais alterações feitas na campanha por até :amount dias. Esses logs não detalham alterações individuais nos valores, mas sim o estado geral da campanha.',\n        'nothing'   => 'Não há logs para exibir. Lembre-se de que os logs são mantidos por até :amount dias.',\n        'title'     => 'Nenhum log',\n    ],\n    'pitch'     => 'Acompanhe as alterações gerais feitas na campanha por até :amount dias com uma campanha premium.',\n    'premium'   => [\n        'helper'    => 'Logs com mais de :amount dias só podem ser visualizados com uma campanha premium.',\n    ],\n    'title'     => 'Log de auditoria',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/members.php",
    "content": "<?php\n\nreturn [\n    'overview'  => [\n        'limited'   => ':amount de :total membros',\n        'title'     => 'Membros disponíveis',\n        'unlimited' => ':amount de membros ilimitados',\n    ],\n    'roles'     => [\n        'admin'     => 'Não é possível adicionar usuários diretamente ao cargo :admin aqui. Isso é feito na interface do cargo :admin.',\n        'helper'    => 'Adicione ou remova cargos do membro :user.',\n        'success'   => 'Cargos atualizados com sucesso para :user.',\n        'title'     => 'Editar cargos dos membros',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/modules.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Criar módulo',\n        'customise' => 'Personalizar',\n    ],\n    'create'        => [\n        'helper'    => 'Crie um novo módulo personalizado para armazenar entidades que não cabem nos outros módulos.',\n        'success'   => 'Novo módulo criado.',\n        'title'     => 'Novo módulo',\n    ],\n    'delete'        => [\n        'confirm'   => 'Escreva :code se tiver certeza de que deseja excluir permanentemente o módulo personalizado :name.',\n        'helper'    => 'Tem certeza de que deseja remover o módulo personalizado :name? Isso também excluirá permanentemente todas as entidades, favoritos e widgets vinculados a este módulo.',\n        'success'   => 'Módulo :name removido.',\n        'title'     => 'Remoção de módulo',\n    ],\n    'errors'        => [\n        'disabled'  => 'O módulo :name está desabilitado. :fix',\n        'limit'     => 'As campanhas estão atualmente limitadas apenas a :max módulos personalizados enquanto ajustamos esse novo recurso.',\n    ],\n    'fields'        => [\n        'icon'      => 'Ícone do módulo',\n        'plural'    => 'Nome plural do módulo',\n        'singular'  => 'Nome singular do módulo',\n    ],\n    'helpers'       => [\n        'custom'    => 'Esse é um módulo personalizado.',\n        'icon'      => 'Dê a este módulo um ícone especial :fontawesome, por exemplo :example.',\n        'plural'    => 'O nome plural das entidades do novo módulo. Por exemplo, poções',\n        'roles'     => 'Selecione os cargos que devem ter permissão para visualizar entidades deste novo módulo. Isso pode ser alterado posteriormente nas permissões da função.',\n        'singular'  => 'O nome singular de uma entidade do novo módulo. Por exemplo, poção',\n    ],\n    'pitch'         => 'Renomeie e altere o ícone associado a este módulo para toda a campanha.',\n    'pitch-custom'  => 'Crie módulos personalizados para representar qualquer tipo de entidade no seu mundo. Sem limites, apenas criatividade.',\n    'rename'        => [\n        'helper'    => 'Altere o nome e o ícone do módulo ao longo da campanha. Deixe em branco para usar o padrão de Kanka.',\n        'success'   => 'Módulo personalizado.',\n        'title'     => 'Personalizar o módulo :module',\n    ],\n    'reset'         => [\n        'default'   => 'Isso redefinirá apenas os módulos padrão, não os personalizados.',\n        'success'   => 'Os módulos da campanha foram redefinidos.',\n        'title'     => 'Redefinir nomes e ícones dos módulos personalizados',\n        'warning'   => 'Tem certeza de que deseja redefinir os módulos de campanha para seus nomes e ícones originais?',\n    ],\n    'sections'      => [\n        'custom'    => 'Módulos personalizado',\n        'default'   => 'Módulos padrão',\n        'features'  => 'Recursos',\n    ],\n    'states'        => [\n        'disable'   => 'Desabilitar',\n        'enable'    => 'Habilitar',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/overview.php",
    "content": "<?php\n\nreturn [\n    'followers' => [\n        'title' => 'Seguidores',\n    ],\n    'member'    => [\n        'title' => 'Membros',\n    ],\n    'premium'   => [\n        'enable'    => 'Habilitar recursos premium',\n    ],\n    'status'    => [\n        'title' => 'Visibilidade',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'Desabilitar plugins',\n            'enable'    => 'Habilitar plugins',\n            'update'    => 'Atualizar plugins',\n        ],\n        'changelog'         => 'Histórico de alterações',\n        'disable'           => 'Desativar plugin',\n        'enable'            => 'Ativar plugin',\n        'find-plugins'      => 'Encontrar plugins',\n        'import'            => 'Importar',\n        'update'            => 'Atualizar plug-in',\n        'update-to'         => 'Atualizar para versão :version',\n        'update_available'  => 'Atualização disponível!',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Removido :count plugin.|[2,*] Removidos :count plugins.',\n        'disable'   => '{1} Desabilitado :count plugin.|[2,*] Desabilitados :count plugins.',\n        'enable'    => '{1} Habilitado :count plugin.|[2,*] Habilitados :count plugins.',\n        'update'    => '{1} Atualizado :count plugin.|[2,*] Atualizados :count plugins.',\n    ],\n    'destroy'       => [\n        'success'   => 'Plug-in :plugin removido.',\n    ],\n    'disabled'      => [\n        'success'   => 'Plug-in :plugin desativado.',\n    ],\n    'empty_list'    => 'A campanha não tem nenhum plugin no momento. Vá ao mercado para instalar alguns e volte para ativá-los.',\n    'enabled'       => [\n        'success'   => 'Plugin :plugin ativado',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Plugin inválido',\n    ],\n    'fields'        => [\n        'name'      => 'Nome do plugin',\n        'obsolete'  => 'Este plugin foi marcado como obsoleto pela equipe do Kanka, o que significa que não funciona mais como planejado originalmente por seu criador.',\n        'status'    => 'Status',\n        'type'      => 'Tipo de plugin',\n    ],\n    'import'        => [\n        'button'                => 'Importar',\n        'created'               => 'Criada as seguintes entidades:',\n        'fields'                => [\n            'only_new'  => 'Somente novas entidades',\n            'private'   => 'Entidades privadas',\n        ],\n        'helper'                => 'Você está prestes a importar :count entidades do plugin :plugin. Se este plug-in foi importado anteriormente, as alterações feitas nas entidades importadas podem ser perdidas.',\n        'no_new_entities'       => 'Não há novas entidades a serem importadas.',\n        'option_only_import'    => 'Importe apenas novas entidades, ignorando entidades importadas anteriormente.',\n        'option_private'        => 'Importe todas as entidades como privadas.',\n        'success'               => '{1} Importada :count entidades do plugin :plugin.|[2,*] Importada :count enidades do plugin :plugin.',\n        'title'                 => 'Importar :plugin',\n        'updated'               => 'Atualizadas as seguintes entidades:',\n    ],\n    'info'          => [\n        'description'   => 'Exibindo as últimas atualizações para o plugin :plugin.',\n        'helper'        => 'Quando uma nova versão de um plugin é liberada, você pode atualizá-lo para a nova versão para sua campanha.',\n        'installed'     => 'Instalado',\n        'title'         => 'Atualizações do plug-in :plugin',\n        'updates'       => 'Atualizações',\n        'versions'      => 'Versões',\n    ],\n    'pitch'         => 'Instale e gerencie plugins do :marketplace.',\n    'status'        => [\n        'always'    => 'Este tipo de plugin está sempre ativo, a menos que seja removido.',\n        'disabled'  => 'Desativado',\n        'enabled'   => 'Ativado',\n    ],\n    'templates'     => [\n        'name'  => ':name por :user',\n    ],\n    'title'         => 'Plugins - :name',\n    'types'         => [\n        'attribute' => 'Modelo de Atributo',\n        'pack'      => 'Pacote de Conteúdo',\n        'theme'     => 'Tema',\n    ],\n    'update'        => [\n        'success'   => 'Plugin :plugin atualizado.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [],\n    'title'     => 'Alterar a visibilidade da campanha',\n    'update'    => [\n        'private'   => 'A campanha agora é privada e visível apenas para os seus membros.',\n        'public'    => 'A campanha agora é pública. Pode levar algum tempo para aparecer na página :public-campaigns.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'           => 'Recuperar',\n        'recover_selected'  => 'Recuperar selecionado',\n    ],\n    'error'     => 'Um erro ocorreu ao tentar recuperar as entidades',\n    'fields'    => [\n        'deleted'       => 'Removido',\n        'deleted_at'    => 'Removido :date por :user',\n    ],\n    'name_link' => ':nome foi recuperado com sucesso',\n    'order'     => [\n        'newest'        => 'Ordenar por: Mais recente',\n        'newest_first'  => 'Mais recente primeiro',\n        'oldest'        => 'Ordenar por: Mais antigo',\n        'oldest_first'  => 'Mais antigo primeiro',\n        'type'          => 'Ordenar por: Tipo',\n        'type_order'    => 'Tipo',\n    ],\n    'posts'     => [],\n    'premium'   => 'Recuperar elementos é um recurso premium da campanha.',\n    'success_v2'=> '{1} :count elemento foi recuperado.|[2,*] :count elementos foram recuperados.',\n    'title'     => 'Recuperação de Entidades - :campaign',\n    'toggle'    => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'status'    => 'Status :status',\n    ],\n    'create'    => [\n        'helper'    => 'Crie um novo cargo para a campanha.',\n    ],\n    'overview'  => [\n        'limited'   => ':amount de ::total cargos criados.',\n        'title'     => 'Cargos disponíveis',\n        'unlimited' => ':amount de cargos ilimitados criados.',\n    ],\n    'public'    => [],\n    'show'      => [\n        'title' => ':role permissões - :campaign',\n    ],\n    'toggle'    => [\n        'disabled'  => 'Membros do cargo :role não podem mais :action :entities',\n        'enabled'   => 'Membros da cargo :role agora podem :action :entities',\n    ],\n    'warnings'  => [\n        'adding-to-admin'   => 'Os membros do cargo :name têm acesso a tudo na campanha e não podem ser removidos por outros membros do cargo . Após :amount minutos, somente eles próprios podem se retirar do cargo.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Redefinir ao padrão',\n    ],\n    'call-to-action'    => 'Personalize a ordem, os ícones e os nomes dos elementos na barra lateral da campanha.',\n    'helpers'           => [\n        'bookmarks' => 'Os favoritos não são listados aqui porque cada um tem sua própria configuração :position que determina onde ele aparece na barra lateral.',\n        'image'     => 'Adicione uma imagem para representar a campanha. Esta imagem será usada na barra lateral e na interface do seletor de campanhas. Você pode alterá-la a qualquer momento editando a campanha.',\n        'reordering'=> 'Reordene a barra lateral arrastando e soltando os ícones do lado esquerdo.',\n    ],\n    'image-success'     => 'A nova imagem da campanha foi salva. Esta imagem pode ser alterada novamente editando a campanha.',\n    'reset'             => [\n        'success'   => 'Redefinição da configuração da barra lateral da campanha.',\n        'title'     => 'Redefinir a configuração da barra lateral',\n        'warning'   => 'Tem certeza de que deseja redefinir a barra lateral da sua campanha para os valores padrão?',\n    ],\n    'success'           => 'Configuração da barra lateral da campanha salva.',\n    'title'             => 'Configuração da barra lateral da campanha :campaign',\n    'tooltips'          => [\n        'image' => 'Alterar esta imagem de fundo',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Calendários',\n            'title' => 'Guardião do Tempo',\n        ],\n        'murderer'  => [\n            'goal'  => 'Personagens mortos',\n            'title' => 'Assassino',\n        ],\n    ],\n    'fields'        => [\n        'created'   => 'Criado em',\n        'creator'   => 'Criado por',\n        'general'   => 'Geral',\n    ],\n    'targets'       => [],\n    'title2'        => 'Estatísticas',\n    'titles'        => [\n        'calendars' => 'Nível :level de Guardião do Tempo',\n        'characters'=> 'Nível :level de Nomeador',\n        'dead'      => 'Nível :level de Assassino',\n        'families'  => 'Nível :level de Planejador Familiar',\n        'locations' => 'Nível :level de Construtor',\n        'quests'    => 'Nível :level de Conspirador',\n        'races'     => 'Nível :level de Reprodutor',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'current'   => 'Tema atual: :theme',\n        'disable'   => 'Desabilitar',\n        'enable'    => 'Habilitar',\n        'new'       => 'Novo estilo',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Removido :count estilo.|[2,*] Removidos :count estilos.',\n        'disable'   => '{1} Desabilitado :count estilo.|[2,*] Desabilitados :count estilos.',\n        'enable'    => '{1} Habilitado :count estilo.|[2,*] Habilitados :count estilos.',\n    ],\n    'create'        => [\n        'success'   => 'Novo estilo criado.',\n        'title'     => 'Nova estilo',\n    ],\n    'delete'        => [\n        'success'   => 'Estilo :name removido.',\n    ],\n    'errors'        => [\n        'max_content'   => 'A regra CSS não pode ter mais de :amount caracteres.',\n        'max_reached'   => 'Número máximo de estilos (:max) alcançado.',\n    ],\n    'fields'        => [\n        'content'       => 'Regra CSS',\n        'is_enabled'    => 'Ativado',\n        'length'        => 'Comprimento',\n        'modified'      => 'Modificado',\n        'name'          => 'Nome',\n        'order'         => 'Ordem',\n    ],\n    'helpers'       => [\n        'here'          => 'no nosso blog',\n        'is_enabled'    => 'Habilite este tema em todas as páginas.',\n        'main'          => 'Você pode criar um estilo CSS personalizado para sua campanha impulsionada. Esses estilos são carregados após quaisquer temas do mercado que estiverem habilitados para a campanha. Você pode aprender mais sobre como estilizar sua campanha :here.',\n    ],\n    'pitch'         => 'Crie um estilo CSS personalizado para personalizar totalmente a aparência da campanha.',\n    'placeholders'  => [\n        'name'  => 'Nome do estilo',\n    ],\n    'reorder'       => [\n        'save'      => 'Salvar nova ordem',\n        'success'   => '{1} Reordenado :count estilo.|[2,*] Reordenados :count estilos',\n        'title'     => 'Reordenar estilos',\n    ],\n    'theme'         => [\n        'none'      => 'Usar preferência do usuário',\n        'override'  => 'Substituição de tema',\n        'success'   => 'Tema da campanha atualizado.',\n        'title'     => 'Atualizar tema da campanha.',\n    ],\n    'title'         => 'Temas da Campanha',\n    'toggle'        => [\n        'disable'   => 'Estilo desabilitado com sucesso.',\n        'enable'    => 'Estilo habilitado com sucesso.',\n    ],\n    'update'        => [\n        'success'   => 'Estilo :name atualizado.',\n        'title'     => 'Atualizar estilo',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/vanity.php",
    "content": "<?php\n\nreturn [\n    'available' => 'O nome :vanity está disponível!',\n    'rule'      => 'O campo :field precisa de pelo menos um caractere alfabético.',\n    'rule2'     => 'O campo :field não permite o seguinte caractere: /.',\n    'set'       => 'A URL personalizada da campanha está permanentemente definido como :vanity.',\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns/webhooks.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'action'    => 'Alterar status',\n        'add'       => 'Criar webhook',\n        'bulks'     => [\n            'delete_success'    => '{1} :count webhook removido.|[2,*] :count webhook removidos.',\n            'disable'           => 'Desativar',\n            'disable_success'   => '{1} :count webhook desativado.|[2,*] :count webhook desativados.',\n            'enable'            => 'Ativar',\n            'enable_success'    => '{1} :count webhook ativado.|[2,*] :count webhook ativados.',\n        ],\n        'test'      => 'Testar webhook',\n        'update'    => 'Atualizar webhook',\n    ],\n    'create'        => [\n        'success'   => 'Webhook criado com sucesso',\n        'title'     => 'Adicionar novo webhook',\n    ],\n    'destroy'       => [\n        'success'   => 'Webhook removido com sucesso',\n    ],\n    'edit'          => [\n        'success'   => 'Webhook atualizado com sucesso',\n        'title'     => 'Atualizar webhook',\n    ],\n    'error'         => [\n        'pitch' => 'Desbloqueie recursos premium para acessar webhooks.',\n    ],\n    'fields'        => [\n        'enabled'           => 'Ativado',\n        'event'             => 'Evento',\n        'events'            => [\n            'deleted'   => 'Entidade removida',\n            'edited'    => 'Entidade editada',\n            'new'       => 'Nova entidade',\n        ],\n        'message'           => 'Mensagem',\n        'private_entities'  => [\n            'helper'    => 'Não acione o webhook ao atualizar entidades privadas.',\n            'skip'      => 'Pular entidades privadas',\n        ],\n        'type'              => 'Tipo',\n        'types'             => [\n            'custom'    => 'Mensagem',\n            'payload'   => 'Payload',\n        ],\n        'url'               => 'Url',\n    ],\n    'helper'        => [\n        'active'    => 'Se o webhook estiver ativo no momento',\n        'message'   => 'Adicione uma mensagem personalizada com suporte para mapeamentos',\n        'status'    => 'Alternar o status ativo do webhook',\n    ],\n    'placeholders'  => [\n        'message'   => '{who} fez alterações em {name}, confira em {url}',\n        'url'       => 'Url do webhook de destino',\n    ],\n    'test'          => [\n        'success'   => 'Requisição de teste enviada',\n    ],\n    'title'         => 'Webhooks',\n    'toggle'        => [\n        'disable'   => 'Webhook desabilitado com sucesso.',\n        'enable'    => 'Webhook habilitado com sucesso.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/campaigns.php",
    "content": "<?php\n\nreturn [\n    'actions'                           => [],\n    'create'                            => [\n        'success'   => 'Campanha criada.',\n        'title'     => 'Nova Campanha',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Campanha atualizada.',\n    ],\n    'entity_note_visibility'            => [],\n    'entity_personality_visibilities'   => [\n        'private'   => 'Novos personagens tem sua personalidade privada por padrão.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Novas entidades são privadas.',\n    ],\n    'errors'                            => [\n        'access'        => 'Você não tem acesso a esta campanha.',\n        'premium'       => 'Esse recurso está disponível somente para campanhas premium.',\n        'unknown_id'    => 'Campanha Desconhecida.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'Impulsionada por',\n        'entity_count'              => 'Número de Entidades',\n        'entry'                     => 'Descrição da campanha',\n        'followers'                 => 'Seguidores',\n        'genre'                     => 'Gênero(s)',\n        'header_image'              => 'Background do dashboard da campanha',\n        'image'                     => 'Imagem da barra lateral',\n        'locale'                    => 'Local',\n        'name'                      => 'Nome',\n        'open'                      => 'Aberta a inscrições',\n        'premium'                   => 'Premium desbloqueado por :name',\n        'public'                    => 'Visibilidade da campanha',\n        'public_campaign_filters'   => 'Filtros de Campanhas Públicas',\n        'superboosted'              => 'Super-impulsionada por',\n        'system'                    => 'Sistema',\n        'theme'                     => 'Tema',\n        'vanity'                    => 'URL personalizada',\n    ],\n    'following'                         => 'Seguindo',\n    'helpers'                           => [\n        'boosted'                   => 'Alguns recursos requerem que a campanha esteja sendo impulsionada. Mais informações na página :settings.',\n        'css'                       => 'Escreva seu próprio CSS que será carregado nas páginas de sua campanha. Observe que qualquer abuso desse recurso pode levar à remoção do seu CSS personalizado. Ofensas repetidas ou graves podem levar à remoção de sua campanha.',\n        'dashboard'                 => 'Personalize a forma como o widget do dashboard da campanha é exibido preenchendo os campos a seguir.',\n        'excerpt'                   => 'O resumo da campanha será exibido no painel, então escreva algumas frases apresentando o seu mundo. Mantenha-o curto para obter os melhores resultados.',\n        'header_image'              => 'Imagem exibida como plano de fundo no widget cabeçalho da campanha do dashboard.',\n        'hide_history'              => 'Habilite esta opção para ocultar o histórico de entidades para membros não administradores da campanha.',\n        'hide_members'              => 'Habilite esta opção para ocultar a lista de membros da campanha para membros não administradores.',\n        'locale'                    => 'O idioma em que sua campanha está escrita. É usado para gerar conteúdo e agrupar campanhas públicas.',\n        'name'                      => 'Sua campanha/mundo pode ter qualquer nome, desde que contenha pelo menos 4 letras ou números.',\n        'no_entry'                  => 'Parece que a campanha ainda não tem descrição! Vamos consertar isso.',\n        'premium'                   => 'Alguns recursos estão disponíveis porque os recursos premium desta campanha estão desbloqueados. Saiba mais na página :settings.',\n        'public_campaign_filters'   => 'Ajude outras pessoas a encontrar a campanha entre outras campanhas públicas, fornecendo as seguintes informações.',\n        'public_no_visibility'      => 'Atenção! Sua campanha é pública, mas a função pública da campanha não pode acessar nada. :fix.',\n        'system'                    => 'Se a sua campanha estiver publicamente visível, o sistema será mostrado na página :link.',\n        'systems'                   => 'Para evitar sobrecarregar os usuários com opções, alguns recursos do Kanka estão disponíveis apenas com sistemas de RPG específicos (ou seja, o bloco de estatísticas do monstro D&D 5e). Adicionar sistemas suportados aqui habilitará esses recursos.',\n        'theme'                     => 'Force o tema da campanha, substituindo a preferência do usuário.',\n        'view_public'               => 'Para visualizar sua campanha como um visualizador público faria, abra :link em uma janela anônima.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Copiar link para sua área de transferência',\n            'link'  => 'Convidar pessoas',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Gerar link',\n            ],\n            'success_link'  => 'Link criado: :link',\n            'title'         => 'Convide amigos para :campaign',\n        ],\n        'destroy'               => [\n            'success'   => 'Convite removido.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Esse token já foi utilizado, ou a campanha não existe mais.',\n            'invalid_token'     => 'Esse token não é mais válido.',\n            'join'              => 'Faça login ou registre uma nova conta para participar da :campaign.',\n        ],\n        'fields'                => [\n            'created'   => 'Criado',\n            'role'      => 'Cargo',\n            'token'     => 'Token',\n            'type'      => 'Tipo',\n            'usage'     => 'Expira depois de',\n        ],\n        'helpers'               => [\n            'role'  => 'Os usuários precisam participar antes de serem promovidos à função de administrador.',\n            'usage' => 'Quantas vezes o link de convite pode ser usado antes de se tornar inativo.',\n        ],\n        'unlimited_validity'    => 'Ilimitado',\n        'usages'                => [\n            'five'      => '5 usos',\n            'no_limit'  => 'Nunca',\n            'once'      => '1 uso',\n            'ten'       => '10 usos',\n        ],\n    ],\n    'leave'                             => [\n        'action'            => 'Sair da campanha',\n        'confirm'           => 'Você tem certeza que deseja sair da campanha :name? Você não poderá acessá-la novamente, a não ser que o dono da campanha te convide novamente.',\n        'confirm-button'    => 'Sim, sair da campanha',\n        'error'             => 'Não foi possível sair da campanha.',\n        'fix'               => 'Acesse os membros da campanha',\n        'no-admin-left'     => 'Não é possível sair da campanha porque isso a deixaria sem nenhum administrador. Adicione primeiro outro membro ao cargo de administrador.',\n        'success'           => 'Você saiu da campanha.',\n        'title'             => 'Saindo da campanha',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'Remover da campanha',\n            'switch'        => 'Visualizar campanha como usuário',\n            'switch-back'   => 'Voltar para meu usuário',\n            'switch-entity' => 'Visualizar como',\n        ],\n        'fields'                => [\n            'banned'        => 'Usuário está banido',\n            'joined'        => 'Juntou-se em',\n            'last_login'    => 'Último login',\n            'name'          => 'Usuário',\n            'role'          => 'Cargo',\n            'roles'         => 'Cargos',\n        ],\n        'helpers'               => [\n            'switch'    => 'Trocar para este usuário',\n        ],\n        'impersonating'         => [\n            'message'   => 'Você está vendo a campanha como outro usuário. Alguns recursos foram desabilitados, mas o resto age exatamente como o usuário veria. Para voltar ao seu usuário, use o botão Trocar de Volta localizado onde o botão Logout normalmente está localizado.',\n            'title'     => 'Personificando :name',\n        ],\n        'invite'                => [\n            'description'   => 'Você pode convidar amigos para se juntar a sua campanha fornecendo o endereço de email deles. Assim que eles aceitarem o convite, serão adicionados como um \"Espectador\". Você também pode cancelar o convite a qualquer momento.',\n            'more'          => 'Você pode adicionar novos cargos em :link',\n            'title'         => 'Convidar',\n        ],\n        'removal'               => 'Você está removendo \":member\" da campanha.',\n        'roles'                 => [\n            'member'    => 'Membro',\n            'owner'     => 'Administrador',\n            'player'    => 'Jogador',\n            'public'    => 'Público',\n            'viewer'    => 'Espectador',\n        ],\n        'switch_back_success'   => 'Você voltou para sua conta.',\n    ],\n    'mentions'                          => [],\n    'modules'                           => [],\n    'open_campaign'                     => [],\n    'options'                           => [],\n    'overview'                          => [\n        'entity-count'      => '{0} Nenhuma entidade|{1} :amount entidade|[2,*] :amount entidades',\n        'follower-count'    => '{0} Nenhum seguidor|{1} :amount seguidor|[2,*] :amount seguidores',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Dashboard',\n        'privacy'   => 'Configurações de privacidade padrão',\n        'setup'     => 'Configuração',\n        'sharing'   => 'Compartilhamento',\n        'systems'   => 'Sistemas',\n        'ui'        => 'Interface',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Idioma',\n        'name'      => 'O nome da sua campanha',\n        'system'    => 'D&D, Pathfinder, Fate, DSA',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Escondido',\n        'private'   => 'Privado',\n        'visible'   => 'Visível',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'As campanhas são privadas por padrão e podem ser tornadas públicas. Isso permite que qualquer pessoa as acesse, e as torna disponíveis na página :public-campaigns se elas tiverem entidades visíveis para a função :public-role. Uma campanha pública é visível para todos, mas para que seu conteúdo seja visível, a função :public-role precisa de permissões adequadas.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'Criar cargo',\n            'duplicate'     => 'Duplicar cargo',\n            'permissions'   => 'Gerenciar permissões',\n            'rename'        => 'Renomear função',\n            'save'          => 'Salvar função',\n        ],\n        'admin_role'    => 'cargo de administrador',\n        'bulks'         => [\n            'delete'    => '{1} Removido :count cargo.|[2,*] Removidos :count cargos.',\n            'edit'      => '{1} Atualizado :count cargo.|[2,*] Atualizados :count cargos.',\n        ],\n        'create'        => [\n            'success'   => 'Cargo :name criado.',\n            'title'     => 'Novo cargo',\n        ],\n        'destroy'       => [\n            'success'   => 'Cargo :name removido.',\n        ],\n        'edit'          => [\n            'success'   => 'Cargo :name atualizado.',\n            'title'     => 'Editar cargo :name',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Copiar permissões',\n            'name'              => 'Nome',\n            'permissions'       => 'Permissões',\n            'type'              => 'Tipo',\n            'users'             => 'Usuários',\n        ],\n        'helper'        => [\n            '1'                     => 'Uma campanha pode ter quantos cargos quiser. O cargo de \"Administrador\" tem automaticamente acesso a tudo de uma campanha, mas cada outro cargo pode ter permissões específicas em cada tipo de entidade (personagem, local, etc).',\n            '2'                     => 'Entidades podem ter permissões mais refinadas visualizando a aba \"Permissões\" dessa entidade. Essa aba aparece uma vez que sua campanha tenha vários cargos ou membros.',\n            '3'                     => 'Pode-se optar pelo sistema de \"exclusão\", onde o acesso para visualização de todas as entidades é dado aos cargos, e usar a caixa de seleção \"Privado\" nas entidades para escondê-las. Ou pode-se optar por não dar aos cargos muitas permissões, mas configurar cada entidade ser visível individualmente.',\n            '4'                     => 'Campanhas impulsionadas podem ter uma quantidade ilimitada de cargos.',\n            'permissions_helper'    => 'Duplique todas as permissões do cargo, tanto nos módulos quanto nas entidades.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'A função pública tem permissões, mas a campanha é privada. Você pode alterar essa configuração na guia Compartilhamento ao editar a campanha.',\n            'empty_role'            => 'A função ainda não tem membros.',\n            'role_admin'            => 'A função :name concede automaticamente acesso a tudo na campanha para seus membros.',\n            'role_permissions'      => 'Habilitar o cargo \\':name\\' a fazer as seguintes ações em todas as entidades.',\n        ],\n        'members'       => 'Membros',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'As permissões da campanha permitem o seguinte:',\n                'entities'  => 'Aqui está uma rápida recapitulação do que os membros dessa função obtêm quando uma permissão é definida.',\n                'more'      => 'Para mais detalhes, veja nosso vídeo tutorial no Youtube',\n                'title'     => 'Detalhes da permissão',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'           => 'Criar',\n                'articles'      => 'Artigos',\n                'dashboard'     => 'Dashboard',\n                'delete'        => 'Deletar',\n                'edit'          => 'Editar',\n                'gallery'       => [\n                    'browse'    => 'Navegar',\n                    'manage'    => 'Controle total',\n                    'upload'    => 'Carregar',\n                ],\n                'manage'        => 'Gerenciar',\n                'members'       => 'Membros',\n                'permission'    => 'Permissões',\n                'read'          => 'Ver',\n                'toggle'        => 'Mudar para todos',\n            ],\n            'helpers'   => [\n                'add'           => 'Permitir a criação de entidades deste tipo. Eles terão permissão automática para visualizar e editar as entidades que criarem, se não tiverem permissão para visualizar ou editar.',\n                'articles'      => 'Permite adicionar, editar e excluir artigos, mesmo que o membro não possa editar a entidade.',\n                'dashboard'     => 'Permitir editar os dashboards e os widgets dos dashboards.',\n                'delete'        => 'Permitir remover todas as entidades desse tipo.',\n                'edit'          => 'Permitir editar todas as entidades desse tipo.',\n                'gallery'       => [\n                    'browse'    => 'Permitir visualizar a galeria e definir a imagem de uma entidade da galeria.',\n                    'manage'    => 'Permita tudo na galeria que um administrador pode, incluindo edição e exclusão de imagens.',\n                    'upload'    => 'Permite fazer upload de imagens para a galeria. Só verão as imagens que enviaram se não forem combinadas com a permissão de navegar.',\n                ],\n                'manage'        => 'Permitir a edição da campanha como um administrador de campanha faria, sem permitir que os membros excluam a campanha.',\n                'members'       => 'Permitir convidar novos membros para a campanha.',\n                'not_public'    => 'A campanha não é pública. Permissões para a função pública podem ser definidas, mas serão ignoradas. Vá e edite a campanha para torná-la pública.',\n                'permission'    => 'Permitir a configuração de permissões em entidades desse tipo que eles podem editar.',\n                'read'          => 'Permitir a visualização de todas as entidades deste tipo que não sejam privadas.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Nome do cargo',\n        ],\n        'title'         => 'Cargos - :name',\n        'types'         => [\n            'owner'     => 'Administrador',\n            'public'    => 'Público',\n            'standard'  => 'Padrão',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Adicionar membro',\n                'remove'        => ':user do cargo :role',\n                'remove_user'   => 'Remover usuário do cargo',\n            ],\n            'create'    => [\n                'success'   => 'Usuário adicionado ao cargo :role',\n                'title'     => 'Adicione um membro para o cargo :name',\n            ],\n            'destroy'   => [\n                'success'   => 'Usuário removido do cargo :role.',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'Para evitar abusos, não é possível remover outros membros do cargo de :admin da campanha. Em caso de problemas, entre em contato conosco no :discord ou no :email.',\n                'needs_more_roles'  => 'Você precisa se adicionar a outro cargo na campanha antes de poder se remover do cargo :admin.',\n            ],\n            'fields'    => [\n                'name'  => 'Nome',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'Habilitar',\n        ],\n        'boosted'       => 'Este recurso está em acesso antecipado e atualmente disponível apenas para :boosted.',\n        'deprecated'    => [\n            'help'  => 'Este módulo está obsoleto, o que significa que não é mais mantido e que os bugs não são testados a cada nova atualização. Use este módulo com o conhecimento de que ele será removido do Kanka.',\n            'title' => 'Descontinuado',\n        ],\n        'disabled'      => 'O módulo :module está desabilitado.',\n        'enabled'       => 'O módulo :module está habilitado.',\n        'errors'        => [\n            'module-disabled'   => 'O módulo solicitado está atualmente desabilitado nas configurações da campanha. :fix.',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Crie habilidades, sejam talentos, feitiços ou poderes que podem ser atribuídos a entidades.',\n            'assets'            => 'Carregue arquivos, defina links e defina pseudônimos para entidades individuais.',\n            'bookmarks'         => 'Crie marcadores para entidades ou listas filtradas que aparecem na barra lateral.',\n            'calendars'         => 'Um lugar para definir todos os calendários do seu mundo.',\n            'characters'        => 'O povo que habita seu mundo.',\n            'conversations'     => 'Conversas fictícias entre personagens ou entre usuários da campanha. Este módulo está obsoleto.',\n            'creatures'         => 'Construa as criaturas, animais e monstros do seu mundo com o módulo de criaturas.',\n            'dice_rolls'        => 'Para aqueles que usam Kanka para campanhas de RPG, uma maneira de cuidar das rolagens de dados.',\n            'entity_attributes' => 'Acompanhe os atributos nas entidades da campanha, por exemplo, PVs ou DESLOCAMENTO.',\n            'events'            => 'Feriados, festivais, desastres, aniversários, guerras.',\n            'families'          => 'Clãs ou famílias, suas relações e seus membros.',\n            'inventories'       => 'Gerenciar inventários em suas entidades.',\n            'items'             => 'Armas, veículos, relíquias, poções.',\n            'journals'          => 'Observações escritas por personagens, ou preparações de sessões para o mestre do jogo.',\n            'locations'         => 'Planetas, planos, continentes, rios, estados, acampamentos, templos, tavernas.',\n            'maps'              => 'Faça upload de mapas com camadas e marcadores apontando para outras entidades na campanha.',\n            'notes'             => 'Conhecimento, natureza, história, magia, culturas.',\n            'organisations'     => 'Cultos, religiões, facções, guildas.',\n            'quests'            => 'Para manter controle de várias missões com personagens e locais.',\n            'races'             => 'Se a sua campanha tiver mais de uma raça, isso tornará mais fácil manter o controle.',\n            'tags'              => 'Cada entidade pode ter várias tags. As tags podem pertencer a outras tags e as entradas podem ser filtradas por tag.',\n            'timelines'         => 'Represente a história do seu mundo com Linhas do Tempo.',\n            'whiteboards'       => 'Desenhe e escreva em quadros brancos para planejar visualmente seu mundo e seus objetivos.',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'As campanhas públicas são visíveis na página :public-campaigns. O preenchimento desses campos facilita a descoberta da campanha.',\n        'language'  => 'O idioma no qual o conteúdo da campanha está escrito.',\n        'system'    => 'Se estiver jogando um TTRPG, o sistema usado para jogar na campanha.',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Editar campanha',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Conquistas',\n            'customisation'     => 'Personalização',\n            'danger'            => 'Perigo',\n            'data'              => 'Dados',\n            'default-images'    => 'Thumbnails padrão',\n            'defaults'          => 'Padrões',\n            'deletion'          => 'Eliminação',\n            'export'            => 'Exportar',\n            'import'            => 'Importar',\n            'logs'              => 'Logs',\n            'management'        => 'Gerenciamento',\n            'members'           => 'Membros',\n            'plugins'           => 'Plugins',\n            'recovery'          => 'Restaurar',\n            'roles'             => 'Cargos',\n            'sidebar'           => 'Configurar barra lateral',\n            'stats'             => 'Status',\n            'styles'            => 'Temas',\n            'webhooks'          => 'Webhooks',\n        ],\n        'title'     => 'Visão Geral - :name',\n    ],\n    'status'                            => [\n        'free'      => 'Recursos premium desativados.',\n        'legacy'    => [\n            'title' => 'Recursos impulsionados (legado)',\n        ],\n        'premium'   => 'Recursos premium desbloqueados por :name.',\n        'title'     => 'Recursos premium',\n    ],\n    'superboosted'                      => [],\n    'themes'                            => [\n        'none'  => 'Nenhum (padrão para configurações do usuário)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Apenas visível aos administradores da campanha.',\n            'visible'   => 'Visível aos membros',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Registro de histórico da entidade',\n            'member_list'       => 'Lista de membros da campanha',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Controle quem pode ver as alterações recentes feitas em entidades individuais da campanha.',\n            'member-list'       => 'Controle quem pode ver quem está na campanha.',\n            'theme'             => 'Exiba a campanha no tema do usuário ou force-a a renderizar em um dos seguintes temas.',\n        ],\n        'members'           => [\n            'hidden'    => 'Apenas visível aos administradores da campanha',\n            'visible'   => 'Visível aos membros',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Campanha privada',\n        'public'    => 'Campanha pública',\n        'unlisted'  => 'Público (não listado)',\n    ],\n    'warning'                           => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_appearance'    => 'Adicionar uma aparência',\n        'add_personality'   => 'Adicionar uma personalidade',\n    ],\n    'conversations' => [],\n    'create'        => [\n        'title' => 'Novo Personagem',\n    ],\n    'destroy'       => [],\n    'dice_rolls'    => [],\n    'edit'          => [],\n    'families'      => [\n        'helper'    => 'Reordene e controle quais famílias de :name são visíveis ou ocultas para não administradores.',\n        'reorder'   => [\n            'success'   => 'Famílias de personagens atualizadas com sucesso.',\n        ],\n        'title2'    => 'Gerenciar famílias',\n    ],\n    'fields'        => [\n        'age'                       => 'Idade',\n        'is_appearance_pinned'      => 'Aparência fixada',\n        'is_dead'                   => 'Morto',\n        'is_personality_pinned'     => 'Personalidade fixada',\n        'is_personality_visible'    => 'Personalidade visível',\n        'life'                      => 'Vida',\n        'physical'                  => 'Físico',\n        'pronouns'                  => 'Pronomes',\n        'sex'                       => 'Gênero',\n        'title'                     => 'Título',\n        'traits'                    => 'Características',\n    ],\n    'helpers'       => [\n        'age'   => 'Você pode vincular essa entidade a um calendário de sua campanha para calcular automaticamente sua idade. :more.',\n    ],\n    'hints'         => [\n        'is_appearance_pinned'      => 'Exiba os traços de aparência na página de visão geral.',\n        'is_dead'                   => 'Este personagem está morto.',\n        'is_personality_visible'    => 'Os traços de personalidade são visíveis para todos, não apenas para os membros do cargo :admin.',\n        'personality_not_visible'   => 'Traços de personalidade deste personagem estão atualmente visíveis apenas para usuários Admin.',\n        'personality_visible'       => 'Traços de personalidade deste personagem estão visíveis para todos.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'labels'        => [\n        'appearance'    => [\n            'entry' => 'Descrição da aparência',\n            'name'  => 'Nome da aparência',\n        ],\n        'personality'   => [\n            'entry' => 'Descrição do traço de personalidade',\n            'name'  => 'Nome do traço de personalidade',\n        ],\n    ],\n    'maps'          => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => ':character adicionado à :organisation.',\n            'title'     => 'Filiação',\n        ],\n        'destroy'   => [\n            'success'   => 'Filiação removida.',\n        ],\n        'edit'      => [\n            'success'   => 'Filiação atualizada.',\n            'title'     => 'Atualizar filiação de :name',\n        ],\n        'fields'    => [\n            'role'  => 'Função',\n        ],\n    ],\n    'placeholders'  => [\n        'age'               => 'Idade',\n        'appearance_entry'  => 'Descrição',\n        'appearance_name'   => 'Cabelo, Olhos, Pele, Altura',\n        'name'              => 'Nome do personagem',\n        'personality_entry' => 'Detalhes',\n        'personality_name'  => 'Objetivos, Maneirismos, Medos, Vínculos',\n        'physical'          => 'Físico',\n        'pronouns'          => 'Ele/Seu, Ela/Sua, Eles/Seus',\n        'sex'               => 'Gênero',\n        'title'             => 'Título',\n        'traits'            => 'Traços',\n        'type'              => 'NPC, Personagem de Jogador, Divindade',\n    ],\n    'quests'        => [\n        'helpers'   => [\n            'quest_giver'   => 'Missões das quais o personagem delegou.',\n            'quest_member'  => 'Missões das quais o personagem é membro.',\n        ],\n    ],\n    'races'         => [\n        'helper'    => 'Reordene e controle quais raças de :name são visíveis ou ocultas para não administradores.',\n        'reorder'   => [\n            'success'   => 'Raças de personagens atualizadas com sucesso',\n        ],\n        'title2'    => 'Gerenciar raças',\n    ],\n    'sections'      => [\n        'appearance'    => 'Aparência',\n        'personality'   => 'Personalidade',\n    ],\n    'show'          => [],\n    'warnings'      => [\n        'personality_hidden'    => 'Você não tem permissão para editar traços de personalidade deste personagem.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Ciano',\n    'black'         => 'Preto',\n    'blue'          => 'Azul',\n    'brown'         => 'Marrom',\n    'green'         => 'Verde',\n    'grey'          => 'Cinza',\n    'light-blue'    => 'Azul-claro',\n    'maroon'        => 'Bordô',\n    'navy'          => 'Azul-marinho',\n    'none'          => 'Nenhuma',\n    'orange'        => 'Laranja',\n    'pink'          => 'Rosa',\n    'purple'        => 'Roxo',\n    'red'           => 'Vermelho',\n    'teal'          => 'Azul-esverdeado',\n    'white'         => 'Branco',\n    'yellow'        => 'Amarelo',\n];\n"
  },
  {
    "path": "lang/pt-BR/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'          => 'campanha impulsionada',\n    'premium-campaign'          => 'campanha premium',\n    'premium-campaign-count'    => '{0} Nenhuma Campanha Premium |{1} 1 Campanha Premium |[2,*] :count Campanhas Premium',\n    'premium-campaigns'         => 'campanhas premium',\n    'premium-feature'           => 'Recurso Premium',\n    'superboosted-campaign'     => 'campanha super impulsionada',\n];\n"
  },
  {
    "path": "lang/pt-BR/confirm/editing.php",
    "content": "<?php\n\nreturn [\n    'back'          => 'Voltar',\n    'description'   => 'Parece que outra pessoa está editando esta página! Quer voltar ou ignorar este aviso, correndo o risco de perder dados?',\n    'ignore'        => 'Editar do mesmo jeito',\n    'members'       => 'Membros editando essa página:',\n    'title'         => 'Aviso',\n    'user'          => ':user desde :since',\n];\n"
  },
  {
    "path": "lang/pt-BR/confirm.php",
    "content": "<?php\n\nreturn [\n    'delete'    => [\n        'bulk'          => 'Tem certeza de que deseja excluir os elementos selecionados?',\n        'helper'        => 'Tem certeza de que deseja excluir :name?',\n        'recoverable'   => 'Esta ação pode ser desfeita por até :day dias com uma :premium-campaign.',\n        'title'         => 'Excluir elemento',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novo Diálogo',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_closed'     => 'Fechado',\n        'messages'      => 'Mensagens',\n        'participants'  => 'Participantes',\n    ],\n    'hints'         => [\n        'empty'         => 'Não há participantes nesta conversa.',\n        'participants'  => 'Por favor, adicione participantes ao seu diálogo pressionando o ícone :icon no canto superior direito.',\n    ],\n    'index'         => [],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Mensagem removida',\n        ],\n        'is_updated'    => 'Atualizado',\n        'load_previous' => 'Carregar mensagens anteriores',\n        'placeholders'  => [\n            'message'   => 'Sua mensagem',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Participante :entity adicionado ao diálogo.',\n        ],\n        'destroy'   => [\n            'success'   => 'Participante :entity removido do diálogo.',\n        ],\n        'helper'    => 'Adicione e remova participantes de :name.',\n        'modal'     => 'Participantes',\n        'title'     => 'Participantes de :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome do diálogo',\n        'type'  => 'No Jogo, Preparação, Plot',\n    ],\n    'show'          => [\n        'is_closed' => 'Diálogo está fechado.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Participantes',\n    ],\n    'targets'       => [\n        'characters'    => 'Personagens',\n        'members'       => 'Membros',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/cookieconsent.php",
    "content": "<?php\n\nreturn [\n    'allow'     => 'Permitir cookies',\n    'dismiss'   => 'Liberar',\n    'header'    => 'Consentimento de cookies',\n    'link'      => 'Saiba mais',\n    'message'   => 'Kanka usa cookies para garantir que você obtenha a melhor experiência em nosso site.',\n    'policy'    => 'Política de cookies',\n    'reject'    => 'Recusar',\n];\n"
  },
  {
    "path": "lang/pt-BR/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova Criatura',\n    ],\n    'creatures'     => [],\n    'fields'        => [\n        'is_dead'       => 'Morta',\n        'is_extinct'    => 'Extinta',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_dead'       => 'Essa criatura está morta.',\n        'is_extinct'    => 'Essa criatura está extinta.',\n    ],\n    'lists'         => [\n        'empty' => 'Adicione feras, monstros ou seres míticos que seus heróis possam enfrentar ou com os quais possam fazer amizade.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Herbívoro, Aquático, Mítica',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Ações',\n        'apply'             => 'Aplicar',\n        'back'              => 'Voltar',\n        'change'            => 'Alterar',\n        'close'             => 'Fechar',\n        'confirm'           => 'Confirmar',\n        'copy'              => 'Copiar',\n        'copy_mention'      => 'Copiar menção [ ]',\n        'copy_to_campaign'  => 'Copiar para campanha',\n        'disable'           => 'Desativar',\n        'enable'            => 'Ativar',\n        'explore_view'      => 'Visão Aninhada',\n        'export'            => 'Exportar (PDF)',\n        'find_out_more'     => 'Descubra mais',\n        'go_to'             => 'Ir para :name',\n        'help'              => 'Ajuda',\n        'json-export'       => 'Exportar (JSON)',\n        'markdown-export'   => 'Exportar (Markdown)',\n        'move'              => 'Mover',\n        'new'               => 'Novo',\n        'new_child'         => 'Novo filho',\n        'new_post'          => 'Novo post',\n        'next'              => 'Próximo',\n        'open'              => 'Abrir',\n        'print'             => 'Imprimir',\n        'reorder'           => 'Reordenar',\n        'reset'             => 'Redefinir',\n        'transform'         => 'Transformar',\n    ],\n    'add'               => 'Adicionar',\n    'alerts'            => [\n        'copy_attribute'    => 'A menção da entidade foi copiada para a sua área de transferência.',\n        'copy_invite'       => 'O link de convite da campanha foi copiado para a sua área de transferência.',\n        'copy_mention'      => 'A menção avançada da entidade foi copiada para sua área de transferência.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Editar & tagging',\n            'permissions'   => 'Alterar permissões',\n        ],\n        'age'           => [\n            'helper'    => 'Você pode usar + e - antes do número para atualizar a idade por esse valor.',\n        ],\n        'buttons'       => [\n            'label' => 'Para selecionado(s)',\n        ],\n        'edit'          => [\n            'locations' => 'Ação para locais',\n            'tagging'   => 'Ação para tags',\n            'tags'      => [\n                'add'       => 'Adicionar',\n                'remove'    => 'Remover',\n            ],\n            'title'     => 'Editando múltiplas entidades',\n        ],\n        'errors'        => [\n            'admin'     => 'Apenas administradores de campanha podem mudar o status privado de entidades.',\n            'general'   => 'Ocorreu um erro ao processar sua ação. Tente novamente e entre em contato conosco se o problema persistir. Mensagem de erro: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Sobrepor',\n            ],\n            'helpers'   => [\n                'override'  => 'Se selecionado, as permissões das entidades selecionadas serão substituídas por estas. Se desmarcado, as permissões selecionadas serão adicionadas às existentes.',\n            ],\n            'title'     => 'Alterar permissões para várias entidades',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Aplicar um modelo a múltiplas entidades',\n    ],\n    'cancel'            => 'Cancelar',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Copiar entidades para outra campanha',\n        'panel'         => 'Copiar',\n        'title'         => 'Copiar :name para outra campanha',\n    ],\n    'create'            => 'Criar',\n    'datagrid'          => [\n        'empty' => 'Nada para mostrar ainda',\n    ],\n    'delete_modal'      => [\n        'callout'       => 'Psst!',\n        'confirm'       => 'Confirmar remoção',\n        'permanent'     => 'Essa ação é permanente.',\n        'recoverable'   => 'As entidades podem ser recuperadas por até :day dias com uma :boosted-campaign.',\n        'title'         => 'Confirmação de remoção',\n    ],\n    'destroy_many'      => [],\n    'dynamic'           => [\n        'permission'    => 'Você não tem as permissões corretas para criar uma entidade do módulo :module.',\n        'unknown'       => 'Entidade inválida do módulo :module.',\n    ],\n    'edit'              => 'Editar',\n    'errors'            => [\n        'boosted_campaigns'     => 'Esse recurso está somente disponível para :boosted.',\n        'unavailable_feature'   => 'Recurso indisponível',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'calendar_date'     => 'Data do Calendário',\n        'child'             => 'Filho',\n        'closed'            => 'Fechado',\n        'colour'            => 'Cor',\n        'copy_abilities'    => 'Copiar Habilidades',\n        'copy_inventory'    => 'Copiar Inventário',\n        'copy_links'        => 'Copiar Links',\n        'copy_permissions'  => 'Copiar Permissões (isso substituirá os valores definidos na guia de permissões)',\n        'copy_posts'        => 'Copiar Posts (isso inclui as permissões dos posts)',\n        'copy_reminders'    => 'Copiar Lembretes',\n        'creator'           => 'Criador',\n        'date_range'        => 'Intervalo de datas',\n        'excerpt'           => 'Resumo',\n        'has_entity_files'  => 'Possui arquivos de entidade',\n        'has_entry'         => 'Possui introdução',\n        'has_image'         => 'Possui uma imagem',\n        'has_posts'         => 'Possui posts',\n        'header_image'      => 'Imagem de Cabeçalho',\n        'image'             => 'Imagem',\n        'is_closed'         => 'Diálogo será fechado e não aceitará novas mensagens.',\n        'is_private'        => 'Privado',\n        'is_private_v3'     => 'Exiba-o apenas aos membros do cargo de :admin-role. Isso substitui qualquer outra permissão.',\n        'is_star'           => 'Fixado',\n        'locations'         => ':first em :second',\n        'name'              => 'Nome',\n        'names'             => 'Nomes',\n        'parent'            => 'Primário',\n        'position'          => 'Posição',\n        'replace_mentions'  => 'Substitua as menções de atributo na introdução pelas da nova entidade',\n        'template'          => 'Modelo',\n        'tooltip'           => 'Dica de Contexto',\n        'type'              => 'Tipo',\n        'visibility'        => 'Visibilidade',\n        'word-count'        => 'Contagem de palavras: :number',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Você atingiu o número máximo (:max) de arquivos para esta entidade.',\n            'max_size'  => 'A campanha atingiu a capacidade máxima de armazenamento de arquivos.',\n            'no_files'  => 'Sem arquivos',\n        ],\n        'hints'     => [\n            'limit'         => 'Cada entidade pode ter no máximo :max arquivos carregados nela.',\n            'limitations'   => 'Formatos suportados: :formats. Tamanho máximo do arquivo: :size',\n        ],\n    ],\n    'filter'            => 'Filtro',\n    'filters'           => [\n        'all'               => 'Filtrar para todos os descendentes',\n        'clear'             => 'Limpar Filtros',\n        'copy_helper'       => 'Use os filtros copiados em sua área de transferência como valores para filtros em widgets do dashboard e links rápidos.',\n        'copy_to_clipboard' => 'Copiar filtros para a área de transferência',\n        'direct'            => 'Filtrar para descendentes diretos',\n        'filtered'          => 'Exibindo um total de :count :entity',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Mostrar todos descendentes (:count)',\n                'filtered'  => 'Mostrar descendentes diretos (:count)',\n            ],\n        ],\n        'mobile'            => [\n            'clear' => 'Limpar',\n            'copy'  => 'Área de transferência',\n        ],\n        'options'           => [\n            'children'  => 'Corresponde a este ou seus descendentes',\n            'exclude'   => 'Não corresponde',\n            'hide'      => 'Esconder',\n            'include'   => 'Corresponde',\n            'none'      => 'Vazio',\n            'show'      => 'Mostrar',\n        ],\n        'show'              => 'Mostrar Filtros',\n        'sorting'           => [\n            'asc'       => ':field Ascendente',\n            'desc'      => ':field Descendente',\n            'helper'    => 'Controle em qual ordem os resultados aparecem.',\n        ],\n        'title'             => 'Filtros',\n    ],\n    'fix-this-issue'    => 'Corrija este problema',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Adicionar uma data no calendário',\n        ],\n        'copy_options'  => 'Copiar Opções',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Copie os seguintes elementos relacionados da origem para a nova entidade.',\n        'linking'       => 'Vinculando a outras entidades',\n        'parent'        => 'Selecione um pai para o qual a entidade será filho',\n    ],\n    'hidden'            => 'Escondido',\n    'hints'             => [\n        'calendar_date'         => 'Uma data de calendário permite fácil filtragem em listas e também mantém um lembrete no calendário selecionado.',\n        'image_dimension'       => 'Dimensões recomendadas :dimension pixels.',\n        'image_limitations'     => 'Formatos suportados: :formats. Tamanho máximo do arquivo: :size.',\n        'image_recommendation'  => 'Dimensões recomendadas :width por :height px.',\n        'is_star'               => 'Elementos fixados aparecerão no menu de visão geral da entidade.',\n        'tooltip'               => 'Substitua a dica de contexto gerado automaticamente pelo conteúdo a seguir. Qualquer código HTML será removido, mas você ainda pode mencionar outras entidades usando menções avançadas.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Criado pelo :name :date',\n        'created_date_clean'    => 'Criado :date',\n        'unknown'               => 'Desconhecido',\n        'updated_clean'         => 'Última modificação feita por :name :date',\n        'updated_date_clean'    => 'Última modificação :date',\n        'view'                  => 'Ver histórico da entidade',\n    ],\n    'image'             => [\n        'error' => 'Nós não fomos capazes de conseguir a imagem requisitada. Pode ser que o site não autorize o download da imagem por nós (tipicamente para Squarespace e DeviantArt), ou o link não está mais válido. Por favor certifique-se que a imagem não é maior do que :size.',\n    ],\n    'is_private'        => 'Essa entidade é privada e está visível aos membros da campanha com o cargo de Admin.',\n    'keyboard-shortcut' => 'Atalho de teclado :code',\n    'navigation'        => [\n        'cancel'            => 'cancelar',\n        'or_cancel'         => 'ou :cancel',\n        'skip_to_content'   => 'Pular navegação',\n    ],\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Permitir',\n                'deny'      => 'Negar',\n                'ignore'    => 'Pular',\n                'remove'    => 'Remover',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Permitir',\n                'deny'      => 'Negar',\n                'inherit'   => 'Herdar',\n            ],\n            'delete'        => 'Remover',\n            'edit'          => 'Editar',\n            'private'       => 'Tornar privado',\n            'toggle'        => 'Alternar',\n            'view'          => 'Visualizar',\n        ],\n        'fields'            => [\n            'member'    => 'Membro',\n            'role'      => 'Cargo',\n        ],\n        'helpers'           => [\n            'setup' => 'Use esta interface para ajustar como cargos e usuários podem interagir com esta entidade. :allow permitirá que o usuário ou cargo execute esta ação. :deny irá negar a eles essa ação. :inherit usará o cargo do usuário ou a permissão do cargo principal. Um usuário definido como :allow é capaz de realizar a ação, mesmo se seu cargo for definido como :deny',\n        ],\n        'success'           => 'Permissões salvas.',\n        'title'             => 'Permissões',\n        'too_many_members'  => 'Esta campanha tem muitos membros (>:number) para exibir nesta interface. Use o botão Permissões na visualização da entidade para controlar as permissões em detalhes.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Escolha um calendário',\n        'entry'         => 'Use @ seguido de três letras para citar outras entidades da campanha.',\n        'fallback'      => 'Escolha :module',\n        'gallery_image' => 'Escolha uma imagem da galeria da campanha',\n        'image_url'     => 'Você também pode carregar a imagem de uma URL',\n        'journal'       => 'Escolha um diário',\n        'location'      => 'Escolha um local',\n        'multiple'      => 'Escolha um ou vários',\n        'name'          => 'Nome da entidade',\n        'organisation'  => 'Escolha uma organização',\n        'parent'        => 'Escolha um primário',\n        'tag'           => 'Escolha uma tag',\n        'template'      => 'Escolha um template',\n        'timeline'      => 'Escolha uma linha do tempo',\n        'type'          => 'Tipo da entidade',\n        'user'          => 'Escolha um usuário',\n    ],\n    'relations'         => [],\n    'remove'            => 'Remover',\n    'reorder'           => [\n        'empty' => 'Não há elementos para reordenar.',\n    ],\n    'save'              => 'Salvar',\n    'save_and_close'    => 'Salvar e Fechar',\n    'save_and_copy'     => 'Salvar e Copiar',\n    'save_and_new'      => 'Salvar e Novo',\n    'save_and_update'   => 'Salvar e Editar',\n    'save_and_view'     => 'Salvar e Visualizar',\n    'search'            => 'Buscar',\n    'select'            => 'Selecionar',\n    'tabs'              => [\n        'abilities'     => 'Habilidades',\n        'inventory'     => 'Inventário',\n        'mentions'      => 'Menções',\n        'overview'      => 'Visão Geral',\n        'permissions'   => 'Permissões',\n        'premium'       => 'Premium',\n        'profile'       => 'Perfil',\n        'reminders'     => 'Lembretes',\n    ],\n    'titles'            => [\n        'editing'   => 'Editando :name',\n        'new'       => 'Novo(a) :module',\n    ],\n    'tooltips'          => [],\n    'update'            => 'Atualizar',\n    'users'             => [\n        'unknown'   => 'Desconhecido',\n    ],\n    'view'              => 'Ver',\n    'visibilities'      => [\n        'admin'         => 'Administradores',\n        'admin-self'    => 'Apenas eu & Administradores',\n        'all'           => 'Todos',\n        'members'       => 'Membros da campanha',\n        'self'          => 'Apenas eu',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'customise' => 'Personalizar dashboard',\n        'follow'    => 'Seguir',\n        'join'      => 'Entrar',\n        'unfollow'  => 'Deixar de seguir',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Editar nome & permissões',\n            'new'   => 'Novo Dashboard',\n        ],\n        'create'        => [\n            'helper'    => 'Crie um novo dashboard para :name e atribua quais cargos podem vê-lo ou tê-lo como dashboard padrão.',\n            'success'   => 'Novo dashboard :name da campanha criado',\n            'title'     => 'Novo Dashboard de Campanha',\n        ],\n        'custom'        => [\n            'text'  => 'Atualmente você está editando o dashboard :name da campanha.',\n        ],\n        'default'       => [\n            'text'  => 'Atualmente você está editando o dashboard padrão da campanha.',\n            'title' => 'Dashboard Padrão',\n        ],\n        'delete'        => [\n            'success'   => 'Dashboard :name removido.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Copiar widgets',\n            'name'          => 'Nome do dashboard',\n            'visibility'    => 'Visibilidade',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Duplica os widgets do dashboard :name neste novo.',\n        ],\n        'pitch'         => 'Crie vários dashboards com permissões personalizadas para cada cargo da campanha.',\n        'placeholders'  => [\n            'name'  => 'Nome do dashboard',\n        ],\n        'update'        => [\n            'success'   => 'Dashboard :name da campanha atualizado.',\n            'title'     => 'Atualizar dashboard :name da campanha',\n        ],\n        'visibility'    => [\n            'default'   => 'Padrão',\n            'none'      => 'Nenhum',\n            'visible'   => 'Visível',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Seguir uma campanha fará com que ela apareça no seletor de campanha (canto superior esquerdo) abaixo de suas campanhas.',\n        'join'      => 'Essa campanha é aberta a novos membros. Clique para solicitar sua inscrição.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Adicionar um widget',\n            'back_to_dashboard' => 'Voltar para o dashboard',\n            'edit'              => 'Editar um widget',\n            'new'               => 'Novo widget de :type',\n        ],\n        'reorder'   => [\n            'helper'    => 'Arraste-me para me mover',\n            'success'   => 'Widgets reordenados.',\n        ],\n        'title'     => 'Configurar Dashboard',\n        'tutorial'  => [\n            'blog'  => 'nosso tutorial',\n            'text'  => 'Precisa de ajuda para configurar o dashboard de sua campanha? Leia o :blog para alguma ajuda e inspiração.',\n        ],\n    ],\n    'title'         => 'Dashboard',\n    'widgets'       => [\n        'advanced_options_boosted'  => 'Habilite mais opções como mostrar fixados com uma :boosted_campaign.',\n        'calendar'                  => [\n            'actions'           => [\n                'next'      => 'Alterar data para o dia seguinte',\n                'previous'  => 'Alterar data para o dia anterior',\n            ],\n            'previous_events'   => 'Anterior',\n            'upcoming_events'   => 'Posterior',\n        ],\n        'campaign'                  => [\n            'helper'    => 'Este widget exibe o cabeçalho da campanha. Este widget é sempre exibido no dashboard padrão.',\n        ],\n        'create'                    => [\n            'helper'            => 'Selecione um tipo de widget para adicionar ao dashboard :name.',\n            'helper-default'    => 'Selecione um tipo de widget para adicionar ao dashboard padrão.',\n            'success'           => 'Widget adicionado ao dashboard.',\n            'title'             => 'Novo widget',\n        ],\n        'delete'                    => [\n            'success'   => 'Widget removido so dashboard.',\n        ],\n        'fields'                    => [\n            'class'             => 'Classe CSS',\n            'dashboard'         => 'Dashboard',\n            'name'              => 'Nome personalizado do widget',\n            'optional-entity'   => 'Link para entidade',\n            'order'             => 'Ordenação',\n            'size'              => 'Tamanho',\n            'width'             => 'Largura',\n        ],\n        'helpers'                   => [\n            'class'     => 'Defina uma classe CSS personalizada para adicionar ao widget.',\n            'filters'   => 'Clique para aprender sobre as opções de filtro disponíveis.',\n        ],\n        'orders'                    => [\n            'name_asc'  => 'Nome ascendente',\n            'name_desc' => 'Nome descendente',\n            'oldest'    => 'Mais antigo modificado',\n            'recent'    => 'Recentemente modificado',\n        ],\n        'preview'                   => [\n            'displays'  => [\n                'expand'    => 'Introdução expansível',\n                'full'      => 'Introdução completa',\n            ],\n            'fields'    => [\n                'display'   => 'Exibir',\n            ],\n        ],\n        'random'                    => [\n            'helpers'   => [\n                'name'  => 'Você pode fazer referência ao nome da entidade aleatória com {name}',\n            ],\n            'type'      => [\n                'all'   => 'Tudo',\n            ],\n        ],\n        'recent'                    => [\n            'advanced_filter'   => 'Filtro avançado',\n            'advanced_filters'  => [\n                'mentionless'   => 'Sem Menções (entidades que não mencionam outras entidades)',\n                'unmentioned'   => 'Não Mencionadas (entidades que não são mencionadas por outras entidades)',\n            ],\n            'all-entities'      => 'Todas entidades',\n            'entity-header'     => 'Use o cabeçalho da entidade como imagem',\n            'filters'           => 'Filtros',\n            'help'              => 'Exiba somente a primeira entidade como uma prévia em vez de uma lista.',\n            'helpers'           => [\n                'entity-header'     => 'Se sua entidade tiver um cabeçalho de entidade (recurso de campanha aprimorada), defina este widget para usar essa imagem ao invés da imagem da entidade.',\n                'show_attributes'   => 'Exiba os atributos fixados da entidade abaixo da introdução.',\n                'show_members'      => 'Se a entidade for uma família ou organização, exiba seus membros abaixo da introdução.',\n                'show_relations'    => 'Mostrar as relações fixadas da entidade abaixo da introdução.',\n            ],\n            'show_attributes'   => 'Mostrar atributos fixados',\n            'show_members'      => 'Mostrar membros',\n            'show_relations'    => 'Mostrar relações fixadas',\n            'singular'          => 'Pré-visualização',\n            'tags'              => 'Filtrar a lista de entidades com tags especificadas.',\n            'title'             => 'Lista de entidade',\n        ],\n        'tabs'                      => [\n            'advanced'  => 'Avançado',\n            'setup'     => 'Configurar',\n        ],\n        'unmentioned'               => [\n            'title' => 'Entidades não mencionadas',\n        ],\n        'update'                    => [\n            'success'   => 'Widget modificado.',\n        ],\n        'widths'                    => [\n            '0' => 'Automático',\n            '12'=> 'Completo (100%)',\n            '3' => 'Minúsculo (25%)',\n            '4' => 'Pequeno (33%)',\n            '6' => 'Metade (50%)',\n            '8' => 'Largo (66%)',\n            '9' => 'Grande (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/dashboards/premium.php",
    "content": "<?php\n\nreturn [\n    'pitch' => 'Crie resumos personalizados para sua campanha e páginas iniciais para seus jogadores. Fixe entidades, mapas, calendários, galerias e muito mais em qualquer layout que você escolher.',\n    'title' => 'Dashboards personalizados',\n];\n"
  },
  {
    "path": "lang/pt-BR/dashboards/widgets/welcome.php",
    "content": "<?php\n\nreturn [\n    'endings'   => [],\n    'focus'     => [\n        'text'  => 'Aqui, sou eu!',\n        'title' => 'Hey',\n    ],\n    'intros'    => [\n        '1' => 'Diga olá para sua nova casa de construção de mundo, :user! Configuramos sua primeira campanha e incluímos dois exemplos de :characters e :locations. Estes também são visíveis aqui no dashboard da campanha.',\n        '2' => 'Para começar, clique no grande botão :new-entity (ou pressione :letter sobre o seu teclado) e clique em :characters para criar seu primeiro personagem. Isto é muito fácil! Você pode encontrar todos os seus personagens, locais e outras :entities na barra lateral à esquerda da página.',\n        '3' => 'Aqui estão nossas 5 principais dicas para usar o Kanka',\n    ],\n    'title'     => 'Bem-vindo ao :kanka! 🎉',\n    'tricks'    => [\n        '1'         => 'Ao escrever descrições, não reescreva os nomes dos elementos da campanha. Em vez disso, digite :code e três letras para :mencionar outras entidades da campanha. Essas menções serão atualizadas automaticamente quando você alterar seus nomes.',\n        '2'         => 'Para editar o nome, tema ou imagem da campanha, clique em :world na barra lateral, seguido do botão :edit.',\n        '3'         => 'Escreva informações secretas sobre entidades como :posts em vez de no campo de texto principal.',\n        '4'         => 'Convide seus amigos para a campanha clicando em :world e :members. A partir daí, você pode criar links de convite.',\n        '5'         => 'Você pode remover esta mensagem de boas-vindas e mostrar outras informações nesta página (chamada de dashboard). Role para baixo e clique no botão :button.',\n        'mention'   => 'menção',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/datagrids.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'back_to'   => 'Voltar para :name',\n    ],\n    'modes'     => [\n        'flatten'   => 'Alternar para um layout achatado',\n        'grid'      => 'Alternar para a visualização em grade',\n        'nested'    => 'Alterar para um layout aninhado',\n        'table'     => 'Alternar para a exibição de tabela',\n    ],\n    'tooltips'  => [\n        'nested'    => 'Esta entidade tem filhos. Clique na imagem para visualizá-los.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'dia',\n    'days'          => 'dias',\n    'elapsed_ago'   => ':duration atrás',\n    'hour'          => 'hora',\n    'hours'         => 'horas',\n    'just_now'      => 'agora',\n    'minute'        => 'minuto',\n    'minutes'       => 'minutos',\n    'month'         => 'mês',\n    'months'        => 'meses',\n    'second'        => 'segundo',\n    'seconds'       => 'segundos',\n    'week'          => 'semana',\n    'weeks'         => 'semanas',\n    'year'          => 'ano',\n    'years'         => 'anos',\n];\n"
  },
  {
    "path": "lang/pt-BR/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Título da Página',\n];\n"
  },
  {
    "path": "lang/pt-BR/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Resultados das Rolagens de Dado',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova Rolagem de Dados',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Rolagem de dados removida',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Rolado em',\n        'parameters'    => 'Parâmetros',\n        'results'       => 'Resultados',\n        'rolls'         => 'Rolagens',\n    ],\n    'hints'         => [\n        'parameters'    => 'Quais opções de dados estão disponíveis?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Resultados',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Nome da Rolagem de Dados',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Rolagem',\n        ],\n        'error'     => 'Rolagem de dados mal sucedida. Não é possível analisar os parâmetros.',\n        'fields'    => [\n            'creator'   => 'Criador',\n            'date'      => 'Data',\n            'result'    => 'Resultado',\n        ],\n        'hint'      => 'Todas as rolagens feitas para este modelo de rolagem de dados.',\n        'success'   => 'Dados rolados.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Resultados',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/activity/email.php",
    "content": "<?php\n\nreturn [\n    'first' => 'O e-mail da sua conta Kanka foi alterado para :email.',\n    'title' => 'E-mail alterado',\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/activity/password.php",
    "content": "<?php\n\nreturn [\n    'first' => 'A senha da sua conta Kanka foi alterada.',\n    'help'  => 'Se não foi você, entre em contato conosco pelo e-mail :email.',\n    'title' => 'Senha alterada',\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/purge/first.php",
    "content": "<?php\n\nreturn [\n    'assure'            => 'Se você usa sua conta regularmente, não se preocupe, estamos apenas excluindo contas e campanhas que não estão em uso ativo.',\n    'help'              => 'Precisa de ajuda para usar o Kanka? Junte-se ao nosso :discord ou entre em contato conosco em :email',\n    'intro_account'     => 'Entramos em contato para informar que sua conta será excluída em :amount dias, pois você não a usou nos últimos :duration meses.',\n    'intro_campaigns'   => 'Entramos em contato para informar que sua conta e as seguintes campanhas serão excluídas em :amount dias, pois você não as utilizou nos últimos :duration meses.',\n    'keep'              => 'Se desejar manter sua conta ativa, faça login nos próximos :amount dias.',\n    'title'             => 'Sua conta Kanka será excluída em :amount dias',\n    'warning'           => [\n        'account'   => 'Feito isso, todos os dados associados à sua conta, em :email, serão excluídos permanentemente.',\n        'campaigns' => 'Feito isso, todos os dados associados à sua conta, no email :email, bem como as seguintes campanhas serão excluídas permanentemente.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/purge/second.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'Este é um lembrete final de que a conta Kanka no e-mail :email será excluída em :amount dias, pois você não a usou nos últimos :duration meses.',\n    'title' => 'Aviso final: sua conta Kanka será excluída em :amount dias',\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'atualize os dados do seu cartão',\n    'primary'   => 'Este é um aviso automático de que seu :brand **** :last está expirando em breve.',\n    'title'     => 'Cartão expirando para sua assinatura',\n    'valid'     => 'Se você deseja manter sua assinatura, por favor :action.',\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'Se você não deseja renovar sua assinatura, faça login em sua conta do Kanka e :link.',\n    'closing'   => 'Sinceramente,',\n    'dear'      => 'Caro :name',\n    'link'      => 'cancele sua assinatura',\n    'notice'    => 'Aviso importante sobre renovações:',\n    'primary'   => 'Este é um lembrete automático de que vamos cobrar automaticamente o seu :brand **** :last em :date, por sua assinatura no Kanka.',\n    'title'     => 'Pagamento anual da sua assinatura do Kanka',\n    'valid'     => 'Certifique-se de que seu cartão de crédito esteja válido na data do pagamento.',\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/subscriptions/validation.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Validação de e-mail da conta Kanka.',\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/validation.php",
    "content": "<?php\n\nreturn [\n    'error'     => 'Falha na validação, tente novamente.',\n    'modal'     => 'Um e-mail válido é necessário para assinaturas. Por favor, verifique sua caixa de entrada para obter um link para confirmar seu e-mail antes de continuar o processo de assinatura.',\n    'success'   => 'E-mail validado com sucesso.',\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/welcome/2024.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Feliz construção de mundo e obrigado por participar dessa jornada conosco,',\n    'header'    => 'Bem-vindo ao melhor lugar para criar sua campanha, :name!',\n    'lead_1'    => 'Kanka é uma criação de jogadores apaixonados por RPG que queriam uma abordagem fácil e colaborativa para a construção de mundos, sem compromisso com os recursos.',\n    'lead_2'    => 'Kanka é o que surgiu disso. Estamos aqui para ajudar você a organizar sua campanha e deixar que você se concentre em dar vida ao seu mundo.',\n    'ps'        => 'PS: Se você quiser entrar em contato, pode nos encontrar no :discord ou em :email.',\n    'what_1'    => 'Para ajudar você a começar, criamos sua primeira campanha e incluímos dois personagens e locais de exemplo. Você pode :start se preferir.',\n    'what_2'    => 'Você também deve conferir estes recursos:',\n    'what_3'    => 'Nosso :kb se você tiver dúvidas básicas sobre os recursos do Kanka e sua conta.',\n    'what_4'    => 'O :doc aborda tudo com mais detalhes.',\n    'what_5'    => 'E Finalmente :campaigns mostram o que outros fizeram com o Kanka.',\n    'what_new'  => 'comece um novo',\n    'what_now'  => 'E agora?',\n    'why'       => 'Você recebeu este e-mail porque se inscreveu em nosso site.',\n];\n"
  },
  {
    "path": "lang/pt-BR/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    '2023'              => [\n        'basics'    => [\n            'text_1'    => 'Com uma ferramenta tão extensa como o Kanka, pode ser difícil saber por onde começar ou o que fazer. Nosso :kb aborda as perguntas mais básicas que você possa ter e, para obter mais ajuda, acesse nossa :doc.',\n            'title'     => 'O básico',\n        ],\n        'chat'      => [\n            'text_1'    => 'Adoramos ouvir nossos usuários. Somos mais ativos no :discord, onde você encontrará muitos de nossos usuários dedicados, uma equipe de integração, bem como os fundadores do Kanka, que podem responder a quaisquer perguntas que você possa ter. Você também pode nos enviar um e-mail para: e-mail.',\n            'title'     => 'Quer conversar?',\n        ],\n        'intro'     => [\n            'header'    => 'Bem-vindo à melhor comunidade de construção de mundos, :name!',\n            'link'      => 'Vá para o seu mundo!',\n            'text_1'    => 'Diga olá para sua nova casa de construção de mundo, :name! A comunidade está em nosso DNA e estamos muito satisfeitos por você se juntar a nós. Kanka é uma criação de jogadores de RPG apaixonados que acreditam em uma maneira simplificada e comunitária de abordar a construção do mundo, sem comprometer os recursos.',\n            'text_2'    => 'Configuramos sua primeira campanha e incluímos dois exemplos de personagens e locais para ajudá-lo a começar.',\n        ],\n        'preview'   => 'Faça parte da melhor comunidade de construção de mundos, :name!',\n    ],\n    'header'            => 'Bem-vindo ao Kanka :name!',\n    'header_sub'        => 'Parabéns, você deu o primeiro passo para a criação do seu mundo no :kanka!',\n    'pricing'           => 'preços',\n    'section_1'         => 'Para onde agora?',\n    'section_11'        => 'Crie seu mundo,',\n    'section_2'         => 'O recurso mais importante é o :discord, onde você encontrará muitos dos nossos usuários, um time de plantão, assim como o fundador do Kanka, que poderá responder tantas dúvidas quanto você possa ter.',\n    'section_4'         => 'Nosso :youtube tem vídeos cobrindo os conceitos mais básicos do Kanka. Nem todos os tópicos estão explicados ainda, mas adicionamos novos vídeos regularmente.',\n    'section_4_v2'      => 'Nossa :knowledge-base cobre as perguntas mais básicas que você possa ter, e para uma ajuda mais completa, você pode acessar nossa :documentation!',\n    'section_6'         => 'Entre em contato',\n    'section_7'         => 'Se você não achou uma resposta para a sua pergunta, ou quer simplesmente falar conosco, você pode nos achar no :facebook, ou você pode nos enviar um email através do :email. Nos somos um time pequeno de dois amigos, mas tentamos sempre responder todos os emails que recebemos, então por favor, não hesite em nos contatar.',\n    'section_8'         => 'Uma última coisa',\n    'section_9_v2'      => 'Certificamo-nos de que todos os recursos básicos do Kanka são gratuitos e sempre o manteremos assim. No entanto, se você deseja nos apoiar neste projeto, você pode se tornar um assinante e obter acesso a recursos adicionais, bem como nossa eterna gratidão. Saiba mais na página :pricing.',\n    'social_account'    => 'Se você estiver tendo problemas para fazer login em sua conta, um pequeno lembrete de que você está usando um login :provider. Você pode alterar isso nas configurações da sua conta.',\n    'title'             => 'Bem-vindo ao Kanka',\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Adicionar habilidades',\n        'reset' => 'Redefinir usos da habilidade',\n        'sync'  => 'Adicionar das raças',\n    ],\n    'charges'   => [\n        'left'  => ':amount sobrando',\n    ],\n    'create'    => [\n        'helper'            => 'Anexar uma das diversas habilidades a :name.',\n        'success'           => 'Habilidade :ability adicionada a :entity.',\n        'success_multiple'  => 'Habilidades :abilities adicionadas a entidade.',\n        'title'             => 'Adicionar habilidade a :name',\n    ],\n    'fields'    => [\n        'note'      => 'Nota',\n        'position'  => 'Posição',\n    ],\n    'groups'    => [\n        'unorganised'   => 'Desorganizado',\n    ],\n    'helpers'   => [\n        'note'      => 'Você pode fazer referência a entidades usando as menções avançadas (ex :code) e atributos da entidade (ex :attr) nesse campo.',\n        'recharge'  => 'Redefina todas as cargas de habilidades que foram usadas.',\n        'sync'      => 'Importe habilidades definidas nas raças do personagem.',\n    ],\n    'import'    => [\n        'errors'    => [\n            'no_race'       => 'O personagem não possui raça.',\n            'not_character' => 'A entidade não é um personagem.',\n        ],\n        'success'   => '{1} :count habilidade importada.|[2,*] :count habilidades importadas.',\n    ],\n    'recharge'  => [\n        'success'   => 'Todas as cargas foram redefinidas.',\n    ],\n    'reorder'   => [\n        'parentless'    => 'Sem Pai',\n        'success'       => 'Habilidades reordenadas com sucesso',\n    ],\n    'show'      => [\n        'helper'    => 'Adicione habilidades a esta entidade. Você sempre pode editar a visibilidade ou remover uma habilidade. Habilidades pertencentes à mesma habilidade primária serão exibidas como caixas de filtro.',\n        'reorder'   => 'Reordenar Habilidades',\n        'title'     => 'Habilidades de :name',\n    ],\n    'types'     => [\n        'unorganised'   => 'As habilidades são agrupadas pelo campo pai e retornam para cá.',\n    ],\n    'update'    => [\n        'success'   => 'Habilidade :ability da entidade atualizada.',\n        'title'     => 'Habilidade de Entidade para :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'templates' => [\n        'set'       => 'Definir como modelo',\n        'success'   => [\n            'set'   => 'Entidade :name definida como um modelo.',\n            'unset' => 'A entidade :name não está mais definida como um modelo.',\n        ],\n        'toggle'    => 'Status do modelo alternado.',\n        'unset'     => 'Remover como modelo',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Adicionar um pseudônimo',\n    ],\n    'create'        => [\n        'helper'    => 'Crie um pseudônimo para :name, que o tornará encontrável na pesquisa global e por meio de menções de :code.',\n        'success'   => 'Pseudônimo :name adicionado a :entity.',\n        'title'     => 'Novo pseudônimo',\n    ],\n    'destroy'       => [\n        'success'   => 'Pseudônimo :name removido.',\n    ],\n    'fields'        => [\n        'name'  => 'Nome',\n    ],\n    'helpers'       => [\n        'primary'   => 'Definir um ou mais pseudônimos na entidade fará com que ela seja encontrada na pesquisa global (barra superior) e por meio de menções :code.',\n    ],\n    'limit'         => 'Limite de aliases atingido para campanhas padrão (:amount/:max). :upgrade para aliases ilimitados nesta campanha.',\n    'pitch'         => 'Adicione pseudônimos a esta entidade para facilitar a localização em pesquisas e menções. Ideal para apelidos, títulos ou grafias alternativas.',\n    'placeholders'  => [\n        'name'  => 'Novo pseudônimo',\n    ],\n    'unboosted'     => [],\n    'update'        => [\n        'success'   => 'Pseudônimo :name atualizado para :entity.',\n        'title'     => 'Atualizar pseudônimo para :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'alias' => 'Pseudônimo ou Identidade secreta',\n        'file'  => 'Adicione um arquivo',\n        'link'  => 'Link externo',\n    ],\n    'copy_alias'    => [\n        'success'   => 'Menção de pseudônimo copiada para a área de transferência.',\n        'title'     => 'Clique para copiar a menção do alias para a área de transferência.',\n    ],\n    'show'          => [\n        'title' => 'Recursos de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'load'          => 'Carregar',\n        'manage'        => 'Gerenciar',\n        'more'          => 'Mais opções',\n        'remove_all'    => 'Remover Tudo',\n        'save_and_edit' => 'Aplicar e Editar',\n        'save_and_story'=> 'Aplicar e Visualizar',\n        'show_hidden'   => 'Mostrar atributos ocultos',\n        'toggle_privacy'=> 'Privado/Público',\n    ],\n    'errors'        => [\n        'loop'                  => 'Existe um loop infinito no cálculo desse atributo!',\n        'no_attribute_selected' => 'Selecione um ou mais atributos primeiro.',\n        'too_many_v2'           => 'Campos máximos atingidos (:count/:max). Exclua alguns atributos primeiro antes de poder adicionar mais.',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Modelos da Comunidade',\n        'is_private'            => 'Atributos Privados',\n        'is_star'               => 'Fixado',\n        'preferences'           => 'Preferências',\n        'value'                 => 'Valor',\n    ],\n    'filters'       => [\n        'name'  => 'Nome do atributo',\n        'value' => 'Valor do atributo',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Tem certeza de que deseja excluir todos os atributos desta entidade?',\n        'is_private'    => 'Permita apenas que membros do cargo :admin-role vejam os atributos desta entidade.',\n        'setup'         => 'Você pode representar elementos como PV ou inteligência de uma entidade com atributos. Adicione atributos manualmente clicando no botão :manage, ou aplique aqueles de um modelo de atributo.',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Atributos para :entity atualizados.',\n        'title'     => 'Atributos para :name',\n    ],\n    'labels'        => [\n        'checkbox'  => 'Nome da caixa de seleção',\n        'name'      => 'Nome do atributo',\n        'section'   => 'Nome da seção',\n        'value'     => 'Valor do atributo',\n    ],\n    'live'          => [\n        'success'   => 'Atributo :attribute atualizado.',\n        'title'     => 'Atualizando :attribute',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Número de conquistas, Nível de Desafio, Iniciativa, População',\n        'block'     => 'Nome do texto multilinhas',\n        'checkbox'  => 'Nome da caixa de seleção',\n        'icon'      => [\n            'class' => 'FontAwesome ou RPG Awesome class: fas fa-users',\n            'name'  => 'Nome do Ícone',\n        ],\n        'number'    => 'Valor do número',\n        'random'    => [\n            'name'  => 'Nome do atributo',\n            'value' => '1-100 ou lista de valores separados por vírgula',\n        ],\n        'section'   => 'Nome da seção',\n        'value'     => 'Valor do atributo',\n    ],\n    'ranges'        => [\n        'text'  => 'Opções disponíveis :options',\n    ],\n    'sections'      => [\n        'unorganised'   => 'Desorganizado',\n    ],\n    'show'          => [\n        'hidden'    => 'Atributos Ocultos',\n        'title'     => ':name Atributos',\n    ],\n    'template'      => [\n        'load'      => [\n            'success'   => 'Modelo carregado',\n            'title'     => 'Carregar do modelo',\n        ],\n        'pitch'     => 'Carregue atributos de um modelo de atributo ou plugins instalados do :plugin.',\n        'success'   => 'Modelo de Atributo :name aplicado em :entity',\n        'title'     => 'Aplicar um modelo de atributo para :name',\n    ],\n    'title'         => 'Atributos',\n    'toasts'        => [\n        'bulk_deleted'  => 'Atributos removidos',\n        'bulk_privacy'  => 'Privacidade dos atributos alternada',\n        'lock'          => 'Atributo bloqueado',\n        'pin'           => 'Atributo fixado',\n        'unlock'        => 'Atributo desbloqueado',\n        'unpin'         => 'Atributo desafixado',\n    ],\n    'tutorials'     => [],\n    'types'         => [\n        'attribute' => 'Atributo',\n        'block'     => 'Bloco',\n        'checkbox'  => 'Caixa de Seleção',\n        'icon'      => 'Ícone',\n        'number'    => 'Número',\n        'random'    => 'Aleatório',\n        'section'   => 'Seção',\n        'text'      => 'Texto Multilinhas',\n    ],\n    'update'        => [\n        'success'   => 'Atributos para :entity atualizados.',\n    ],\n    'visibility'    => [\n        'entry'     => 'O atributo é exibido no menu da entidade.',\n        'private'   => 'Atributo visível apenas para membros do cargo de \"Administrador\".',\n        'public'    => 'Atributo visível a todos os membros',\n        'tab'       => 'Atributo é exibido somente no menu Atributos.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/children.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Filho',\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/events.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Crie um lembrete para vincular :name a um calendário.',\n    ],\n    'fields'    => [\n        'type'  => 'Tipo de Lembrete',\n    ],\n    'helpers'   => [\n        'characters'    => 'Definir o tipo como data de nascimento ou de morte para este personagem irá calcular automaticamente sua idade. :more.',\n        'founding'      => 'Definir o tipo como :type calculará automaticamente a idade da entidade desde a sua fundação.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Adicionar lembrete',\n        ],\n        'title'     => 'Lembretes :name',\n    ],\n    'types'     => [\n        'birth'     => 'Nascimento',\n        'birthday'  => 'Aniversário',\n        'death'     => 'Morte',\n        'founded'   => 'Fundado',\n        'primary'   => 'Primário',\n    ],\n    'years-ago' => '{1} :count ano atrás|[2,*] :count anos atrás',\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [\n        'max'       => [\n            'helper'    => 'Não é possível anexar mais arquivos a menos que você remova um existente.',\n            'limit'     => 'Esta entidade atingiu seu limite de arquivos',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Você atingiu o limite de :limit arquivos para esta entidade',\n            'upgrade'   => 'Atualize para uma campanha premium para anexar até :limit arquivos e desbloquear ainda mais flexibilidade criativa.',\n        ],\n    ],\n    'create'            => [\n        'helper'            => 'Adicione um arquivo a :name. O arquivo será contabilizado no limite de armazenamento da galeria.',\n        'success_plural'    => '{1} Arquivo :name adicionado.|[2,*] :count arquivos adicionados.',\n        'title'             => 'Novo arquivo para :entity',\n    ],\n    'destroy'           => [\n        'success'   => 'Arquivo :file removido.',\n    ],\n    'fields'            => [\n        'file'  => 'Arquivo',\n        'files' => 'Arquivos',\n        'name'  => 'Nome do arquivo',\n    ],\n    'max'               => [\n        'title' => 'Limite alcançado',\n    ],\n    'update'            => [\n        'success'   => 'Arquivo :file atualizado.',\n        'title'     => 'Atualizar arquivo',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'               => [\n        'change_focus'      => 'Alterar ponto de foco',\n        'change_visibility' => 'Alterar visibilidade',\n        'replace_image'     => 'Substituir imagem',\n        'save-replace'      => 'Substituir imagem',\n        'save_focus'        => 'Salvar ponto de foco',\n        'view'              => 'Visualizar imagem',\n    ],\n    'call-to-action'        => 'Clique na imagem da entidade para definir seu ponto de foco ao invés de usar um palpite automatizado.',\n    'focus'                 => [\n        'breadcrumb'    => 'Foco da imagem',\n        'helper'        => 'Clique na imagem para configurar o ponto de foco. Clique no ponto de foco para removê-lo.',\n        'panel_title'   => 'Foco da imagem',\n        'success'       => 'Foco da imagem atualizado.',\n        'title'         => 'Foco da imagem da entidade :name',\n        'unboosted'     => 'Definir um ponto de foco da imagem é reservado a :boosted-campaigns.',\n        'warning'       => 'O ponto de foco para imagens da :gallery é compartilhado por todas as entidades que usam a mesma imagem.',\n    ],\n    'gallery_permissions'   => [\n        'admin'     => 'Esta imagem da galeria só é visível para os membros do cargo :admin da campanha.',\n        'adminself' => 'Esta imagem da galeria é visível somente para :creator e os membros do cargo :admin da campanha.',\n        'member'    => 'Esta imagem da galeria é visível apenas para os membros da campanha.',\n        'self'      => 'Esta imagem da galeria só é visível para você.',\n    ],\n    'replace'               => [\n        'breadcrumb'    => 'Substituição da imagem',\n        'panel_title'   => 'Substituição da imagem da entidade',\n        'success'       => 'Imagem substituída.',\n        'title'         => 'Substituição da imagem da entidade :name',\n    ],\n    'visibility'            => [\n        'helper'    => 'Altere a visibilidade da imagem da galeria, controlando quem pode visualizá-la.',\n        'updated'   => 'Visibilidade da imagem atualizada.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'copy_inventory'    => 'Copiar inventário',\n    ],\n    'copy'              => [\n        'helper'    => 'Copiar o inventário inteiro de uma entidade para :name',\n    ],\n    'create'            => [\n        'helper'        => 'Adicione um item ao inventário de :name. Opcionalmente, ele pode ser vinculado a um objeto existente da campanha.',\n        'success'       => 'Item :item adicionado a :entity.',\n        'success_bulk'  => '{0} Nenhum item adicionado à :entity.|{1} :count item adicionado à :entity.|[2,*] :count itens adicionados à :entity.',\n        'title'         => 'Adicionar um item a :name',\n    ],\n    'default_position'  => 'Desorganizado',\n    'destroy'           => [\n        'success'           => 'Item :item removido de :entuty.',\n        'success_position'  => 'Itens em :position removidos de :entity.',\n    ],\n    'fields'            => [\n        'amount'                => 'Quantidade',\n        'copy_entity_entry_v2'  => 'Usar introdução do objeto',\n        'description'           => 'Descrição',\n        'is_equipped'           => 'Equipado',\n        'name'                  => 'Nome',\n        'position'              => 'Posição',\n        'qty'                   => 'Qtd',\n    ],\n    'helpers'           => [\n        'amount'                => 'Número de itens',\n        'copy_entity_entry_v2'  => 'Exiba a introdução do objeto em vez da descrição personalizada.',\n        'description'           => 'Adicione uma descrição personalizada ao item',\n        'is_equipped'           => 'Marque estes itens como equipados.',\n        'name'                  => 'Dê o nome ao item. Um nome é necessário se nenhum objeto for selecionado',\n    ],\n    'placeholders'      => [\n        'amount'        => 'Qualquer quantidade',\n        'description'   => 'Usado, Danificado, Sintonizado',\n        'name'          => 'Obrigatório se nenhum item for selecionado',\n        'position'      => 'Equipado, Mochila, Estoque, Banco',\n    ],\n    'show'              => [\n        'helper'    => 'Para criar o inventário desta entidade, comece adicionando um item a ele.',\n        'title'     => 'Inventário :name',\n        'unsorted'  => 'Não classificado',\n    ],\n    'tooltips'          => [\n        'equipped'  => 'Este item está equipado',\n    ],\n    'tutorials'         => [],\n    'update'            => [\n        'success'   => 'Item :item de :entity atualizado.',\n        'title'     => 'Atualizar o item de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Adicionar um link',\n    ],\n    'call-to-action'    => 'Adicione links para fontes externas nesta entidade, como DnDBeyond, e eles serão exibidos diretamente na visão geral da entidade.',\n    'create'            => [\n        'helper'    => 'Adicione um link externo para :name, por exemplo, para a página DnDBeyond.',\n        'success'   => 'Link :name adicionado para :entity.',\n        'title'     => 'Adicionar um link para :name',\n    ],\n    'destroy'           => [\n        'success'   => 'Link :name removido.',\n    ],\n    'fields'            => [\n        'icon'      => 'Ícone',\n        'name'      => 'Nome',\n        'position'  => 'Posição',\n        'url'       => 'URL',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'Tenho certeza',\n            'trust'     => 'Não me pergunte novamente',\n        ],\n        'description'   => 'Este link irá levá-lo para :link. Tem certeza que quer ir para lá?',\n        'title'         => 'Saindo de Kanka',\n    ],\n    'helpers'           => [\n        'icon'      => 'Você pode personalizar o ícone exibido para o link. Use qualquer um dos ícones gratuitos de :fontawesome ou deixe este campo em branco para o padrão. Encontre mais em nossa :docs.',\n        'parent'    => 'Exiba este link rápido após um elemento da barra lateral, ao invés na seção de links rápidos da barra lateral.',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'Campanhas impulsionadas podem adicionar links a entidades que apontam para sites externos.',\n        'title'     => 'Links para :name',\n    ],\n    'unboosted'         => [],\n    'update'            => [\n        'success'   => 'Link :name atualizado para :entity.',\n        'title'     => 'Atualizar link para :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'        => 'Criar',\n        'create_post'   => 'Post \":post\" criado',\n        'delete'        => 'Remover',\n        'delete_post'   => 'Post removido',\n        'reorder_post'  => 'Posts reordenados',\n        'restore'       => 'Restaurar',\n        'reveal'        => 'Mostrar detalhes',\n        'update'        => 'Atualizar',\n        'update_post'   => 'Post \":post\" atualizado',\n        'view'          => 'Ver mudanças',\n    ],\n    'call-to-action'    => 'Os logs completos de alterações para até :amount dias estão disponíveis para campanhas superimpulsionadas.',\n    'fields'            => [\n        'action'    => 'Ação',\n        'date'      => 'Data',\n    ],\n    'filters'           => [\n        'keywords'  => 'Palavras-chave',\n    ],\n    'impersonated'      => 'Personificado por :name',\n    'none'              => 'Nenhum',\n    'show'              => [\n        'title' => 'Histórico de :name',\n    ],\n    'tooltips'          => [\n        'post'  => 'Vá para o post',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Esta entidade está fixada nos seguintes mapas.',\n    'title'     => 'Pontos do Mapa :name',\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Elemento',\n        'type'      => 'Tipo',\n    ],\n    'helper'            => 'Esta entidade é mencionada nas seguintes outras entidades, posts ou descrição de campanha.',\n    'mentioned_in_v2'   => 'Esta entidade é mencionada em :count elementos. :more.',\n    'see_more'          => 'Ver detalhes',\n    'show'              => [\n        'title' => 'Menções da Entidade :name',\n    ],\n    'title'             => 'Entidade mencionada',\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'  => 'Copiar',\n    ],\n    'errors'        => [\n        'permission'        => 'Você não tem permissão para criar entidades desse tipo na campanha alvo.',\n        'permission_update' => 'Você não tem permissão para mover essa entidade.',\n        'same_campaign'     => 'Você precisa selecionar outra campanha para mover a entidade.',\n        'unknown_campaign'  => 'Campanha desconhecida.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Campanha alvo',\n        'copy'          => 'Criar uma cópia na campanha alvo',\n        'select_one'    => 'Selecionar uma campanha',\n    ],\n    'helpers'       => [\n        'copy'  => 'Crie uma cópia da entidade na campanha de destino.',\n    ],\n    'panel'         => [\n        'description'           => 'Selecione uma campanha que você deseja mover ou fazer uma cópia dessa entidade.',\n        'description_bulk_copy' => 'Selecione uma campanha para qual você deseja copiar as entidades selecionadas.',\n        'title'                 => 'Mover ou copiar uma entidade para outra campanha',\n    ],\n    'success'       => 'Entidade :name movida.',\n    'success_copy'  => 'Entidade :entity copiada.',\n    'title'         => 'Mover :name',\n    'warnings'      => [\n        'custom'    => 'Esta entidade não é de um módulo padrão, mas sim de um tipo de entidade personalizado \":module\". Ela será criada como uma entidade de Nota na campanha de destino.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Novo Post',\n        'add_role'  => 'Adicionar cargo',\n        'add_user'  => 'Adicionar usuário',\n    ],\n    'collapsed'     => [\n        'closed'    => 'Post recolhido no cabeçalho',\n        'open'      => 'Post expandido',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Copiar menção avançada',\n        'copy_with_name'    => 'Copiar menção avançada com o nome do post',\n        'success'           => 'Menção avançada do post copiada para a área de transferência.',\n    ],\n    'create'        => [\n        'success'   => 'Post :name adicionado para :entity',\n    ],\n    'destroy'       => [\n        'success'   => 'Post :name de :entity removido.',\n    ],\n    'edit'          => [\n        'success'   => 'Post :name de :entity atualizado.',\n    ],\n    'fields'        => [\n        'creator'   => 'Criador',\n        'display'   => 'Exibir',\n        'name'      => 'Nome',\n        'position'  => 'Posição',\n    ],\n    'footer'        => [\n        'created'   => 'Criado pelo :user em :date',\n        'updated'   => 'Atualizado pelo :user em :date',\n    ],\n    'hint'          => 'As informações que não se enquadram nos campos padrão de uma entidade ou que devem ser mantidas em sigilo podem ser adicionadas como posts.',\n    'hints'         => [\n        'reorder'   => 'Você pode reordenar os posts de uma entidade clicando no ícone :icon ao lado da visão geral no menu da entidade.',\n    ],\n    'index'         => [],\n    'move'          => [\n        'copy'          => 'Criar uma cópia na entidade de destino',\n        'copy_success'  => 'Post :name copiado com sucesso para :entity.',\n        'copy_title'    => 'Mantenha uma cópia',\n        'description'   => 'Selecione uma entidade para a qual você deseja mover ou fazer uma cópia deste post.',\n        'entity'        => 'Entidade de destino',\n        'move_success'  => 'Post :name movido com sucesso para :entity.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome do post, observação ou comentário',\n    ],\n    'show'          => [\n        'advanced'  => 'Permissões Avançadas',\n        'title'     => 'Post :name de :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'Recolhido',\n        'expanded'  => 'Expandido',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'Esta entidade está definida como privada. Permissões personalizadas ainda podem ser definidas, mas enquanto a entidade for privada, elas serão ignoradas e somente os membros do cargo de :admin da campanha poderão ver a entidade.',\n        'warning'   => 'Aviso',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'Nenhum cargo ou usuário além dos administradores da campanha tem acesso a esta entidade.',\n        'manage'            => 'Gerenciar Permissões',\n        'screen-reader'     => 'Abrir as configurações de privacidade',\n        'success'           => [\n            'private'   => ':entity está agora escondida.',\n            'public'    => ':entity está agora visível.',\n        ],\n        'title'             => 'Visão geral da permissão',\n        'viewable-by'       => 'Visível por',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Links',\n    'title' => 'Fixados',\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Editar perfil',\n    ],\n    'history'   => 'Histórico',\n    'show'      => [\n        'tab_name'  => 'Perfil',\n        'title'     => 'Perfil de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Essa entidade faz parte das seguintes missões.',\n    'title'     => 'Missões de :name',\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Ferramenta de exploração das conexões',\n        'mode-table'    => 'Tabela de conexões e elementos relacionados',\n    ],\n    'bulk'              => [\n        'delete'    => '{1} :count conexão removida. |[2,*] :count conexões removidas.',\n        'fields'    => [\n            'delete_mirrored'   => 'Excluir espelhado',\n            'unmirror'          => 'Desvincular espelhado',\n            'update_mirrored'   => 'Atualizar espelhado',\n        ],\n        'helpers'   => [\n            'delete_mirrored'   => 'Exclua também as conexões espelhadas.',\n            'unmirror'          => 'Desvincula conexões espelhadas.',\n            'update_mirrored'   => 'Atualiza conexões espelhadas.',\n        ],\n        'success'   => [\n            'editing'           => '{1} :count conexão foi atualizada. |[2,*] :count conexões foram atualizadas.',\n            'editing_partial'   => '{1} :count/:total conexão foi atualizada. |[2,*] :count/:total conexões foram atualizadas.',\n        ],\n    ],\n    'call-to-action'    => 'Explore visualmente as conexões dessa entidade e como ela está conectada ao restante da campanha.',\n    'connections'       => [\n        'map_point'         => 'Ponto do mapa',\n        'mention'           => 'Menção',\n        'quest_element'     => 'Elemento de missão',\n        'timeline_element'  => 'Elemento de linha do tempo',\n    ],\n    'create'            => [\n        'helper'        => 'Crie uma conexão entre :name e uma ou várias entidades.',\n        'new_title'     => 'Nova conexão',\n        'success_bulk'  => '{1} Adicionada :count conexão a :entity.|[2,*] Adicionadas :count conexões a :entity.',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'Essa conexão é espelhada na entidade alvo. Selecione essa opção para também remover  a conexão espelhada.',\n        'option'    => 'Remover conexão espelhada',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'Isso também removerá a conexão espelhada e é permanente.',\n        'success'   => 'Conexão de :target removida para :entity.',\n    ],\n    'fields'            => [\n        'attitude'  => 'Atitude',\n        'is_pinned' => 'Fixado',\n        'owner'     => 'Fonte',\n        'target'    => 'Entidade alvo',\n        'targets'   => 'Entidades alvo',\n        'two_way'   => 'Conexão espelhada',\n        'unmirror'  => 'Desespelhe esta conexão.',\n    ],\n    'filters'           => [\n        'connection'    => 'Relação da conexão',\n        'name'          => 'Conexão alvo',\n    ],\n    'helper'            => 'Estabeleça conexões entre entidades com atitudes e visibilidade. Conexões também podem ser fixadas no menu da entidade.',\n    'helpers'           => [\n        'description'   => 'Detalhe a natureza da conexão entre as duas entidades.',\n        'no_relations'  => 'Essa entidade atualmente não tem quaisquer outras conexões com outras entidades da campanha.',\n    ],\n    'hints'             => [\n        'attitude'  => 'Este campo opcional pode ser usado para definir a ordem padrão em que as conexões aparecem em ordem decrescente.',\n        'two_way'   => 'Crie uma conexão no alvo selecionado e espelhe-os. Atualizar uma relação espelhada não atualiza a conexão original.',\n    ],\n    'index'             => [\n        'title' => 'Conexões',\n    ],\n    'options'           => [\n        'mentions'          => 'Padrão + relacionados + menções',\n        'only_relations'    => 'Apenas conexões diretas',\n        'related'           => 'Padrão + relacionados',\n        'relations'         => 'Padrão',\n        'show'              => 'Mostrar',\n    ],\n    'panels'            => [\n        'related'   => 'Relacionados',\n    ],\n    'placeholders'      => [\n        'attitude'  => '-100 a 100, 100 sendo muito positiva',\n    ],\n    'show'              => [\n        'title' => 'Conexões de :name',\n    ],\n    'types'             => [\n        'family_member'         => 'Membro da família',\n        'organisation_member'   => 'Membro da Organização',\n    ],\n    'update'            => [\n        'success'   => 'Conexão :target atualizada para :entity.',\n        'title'     => 'Atualizar conexões para :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/reminders.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'       => 'Vincular a um calendário',\n        'remove'    => 'Remover data do calendário',\n    ],\n    'helpers'   => [\n        'pitch' => 'Deixe o calendário do mundo real para trás e vincule essa entidade a um calendário do seu mundo para permanecer imerso na sua linha do tempo fictícia.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'      => 'Recolher todos',\n        'expand_all'        => 'Expandir todos',\n        'load_more'         => 'Carregar mais',\n        'login_for_more'    => 'Entre para ver mais posts',\n    ],\n    'reorder'   => [\n        'helper'        => 'Arraste e solte os posts para reordená-los na página de visão geral da entidade.',\n        'icon_tooltip'  => 'Reordenar posts',\n        'panel_title'   => 'Reordenar posts',\n        'save'          => 'Salvar nova ordem',\n        'success'       => 'Posts reordenados.',\n    ],\n    'update'    => [\n        'title' => 'Atualizar introdução da :entity',\n    ],\n    'warning'   => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/tags.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Adicione ou remova tags em :name.',\n        'title'     => 'Adicionar ou remover tags',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'As linhas do tempo que possuem elementos vinculados a esta entidade são mostradas abaixo.',\n    'show'      => [\n        'title' => 'Linhas do Tempo de :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'bulk'      => [\n        'errors'    => [\n            'unknown_type'  => 'Tipo de entidade desconhecida ou inválida.',\n        ],\n        'success'   => '{1} :count entidade transformada ao novo tipo: :type.|[2,*] :count entidades transformadas ao novo tipo: :type',\n    ],\n    'fields'    => [\n        'current'       => 'Módulo atual',\n        'select_one'    => 'Selecione um',\n        'target'        => 'Novo tipo de entidade',\n    ],\n    'panel'     => [\n        'bulk_description'  => 'Altere o tipo de entidade de várias entidades. Esteja ciente de que alguns dados podem ser perdidos devido aos diferentes campos entre os tipos de entidade.',\n        'bulk_title'        => 'Transformar entidades em massa',\n        'title'             => 'Transformar uma entidade',\n    ],\n    'success'   => 'Entidade :name transformada.',\n    'title'     => 'Transformar :name',\n];\n"
  },
  {
    "path": "lang/pt-BR/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Habilidades',\n    'ability'               => 'Habilidade',\n    'attribute_template'    => 'Modelo de Atributo',\n    'attribute_templates'   => 'Modelos de Atributo',\n    'bookmark'              => 'Favorito',\n    'bookmarks'             => 'Favoritos',\n    'calendar'              => 'Calendário',\n    'calendars'             => 'Calendários',\n    'campaign'              => 'Campanha',\n    'campaigns'             => 'Campanhas',\n    'character'             => 'Personagem',\n    'characters'            => 'Personagens',\n    'conversation'          => 'Diálogo',\n    'conversations'         => 'Diálogos',\n    'creator'               => [\n        'actions'                   => [\n            'create'    => 'Criar :type',\n            'full'      => 'Acesse o formulário completo',\n            'more'      => 'Adicionar mais detalhes',\n        ],\n        'back'                      => 'Voltar à seleção',\n        'bulk_names'                => 'Adicione um nome por linha',\n        'duplicate'                 => 'Atenção! Já existem outras entidades deste tipo com um nome semelhante.',\n        'helper_v2'                 => 'Crie rapidamente a base de uma nova entidade sem interromper seu fluxo atual.',\n        'missing_v2'                => 'Apenas os módulos habilitados e que você tem permissão para criar estão disponíveis nesta interface. :learn-more.',\n        'modes'                     => [\n            'bulk'      => 'Adição em massa',\n            'default'   => 'Adição rápida',\n        ],\n        'name'                      => [\n            'new'       => 'Novo nome',\n            'remove'    => 'Remover',\n        ],\n        'success_multiple'          => '{1} Nova entidade :link criada.|[2,*] Novas entidades :link criadas.',\n        'success_multiple_posts'    => '{1} Novo post :link criado.|[2,*] Novos posts: link criados.',\n        'title'                     => 'Nova Entidade',\n        'titles'                    => [\n            'everything'    => 'Tudo',\n            'quick-access'  => 'Acesso rápido',\n        ],\n        'tooltip'                   => 'Crie uma nova entidade sem deixar a página atual.',\n        'tooltips'                  => [\n            'create'        => 'Crie a entidade e volte para a tela de seleção de entidade',\n            'create_more'   => 'Crie a entidade e comece a criar outra do mesmo tipo',\n            'edit'          => 'Crie a entidade e comece a editá-la',\n        ],\n    ],\n    'creature'              => 'Criatura',\n    'creatures'             => 'Criaturas',\n    'dice_roll'             => 'Rolagem de Dado',\n    'dice_rolls'            => 'Rolagem de Dados',\n    'event'                 => 'Evento',\n    'events'                => 'Eventos',\n    'families'              => 'Famílias',\n    'family'                => 'Família',\n    'inventories'           => 'Inventários',\n    'item'                  => 'Item',\n    'items'                 => 'Itens',\n    'journal'               => 'Diário',\n    'journals'              => 'Diários',\n    'location'              => 'Local',\n    'locations'             => 'Locais',\n    'map'                   => 'Mapa',\n    'maps'                  => 'Mapas',\n    'new'                   => [],\n    'note'                  => 'Nota',\n    'notes'                 => 'Notas',\n    'organisation'          => 'Organização',\n    'organisations'         => 'Organizações',\n    'quest'                 => 'Missão',\n    'quest_element'         => 'Elemento da missão',\n    'quests'                => 'Missões',\n    'race'                  => 'Raça',\n    'races'                 => 'Raças',\n    'relation'              => 'Relação',\n    'relations'             => 'Relações',\n    'reminders'             => 'Lembretes',\n    'tag'                   => 'Tag',\n    'tags'                  => 'Tags',\n    'templates'             => 'Modelos',\n    'timeline'              => 'Linha do Tempo',\n    'timeline_element'      => 'Elemento da linha do tempo',\n    'timelines'             => 'Linhas do Tempo',\n];\n"
  },
  {
    "path": "lang/pt-BR/entries/tabs.php",
    "content": "<?php\n\nreturn [\n    'aliases'       => 'Pseudônimos',\n    'identity'      => 'Identidade',\n    'media'         => 'Mídia',\n    'properties'    => 'Propriedades',\n    'relations'     => 'Relações',\n];\n"
  },
  {
    "path": "lang/pt-BR/errors.php",
    "content": "<?php\n\nreturn [\n    '403'               => [\n        'body'  => 'Parece que você não tem permissão para acessar esta páginaQ',\n        'title' => 'Acesso Negado.',\n    ],\n    '403-form'          => [\n        'help'  => 'Isso pode ser devido  sua sessão ter atingido o tempo limite. Tente fazer login novamente em outra janela antes de salvar.',\n    ],\n    '404'               => [\n        'body'  => 'Desculpe, a página que você está procurando não pode ser encotrada',\n        'title' => 'Página Não Encontrada',\n    ],\n    '500'               => [\n        'body'  => [\n            '1' => 'Eita, parece que algo deu errado!',\n            '2' => 'Um relatório com o erro encontrado foi enviado para nós, mas às vezes ajuda se pudermos saber um pouco mais sobre o que você estava fazendo.',\n        ],\n        'title' => 'Erro',\n    ],\n    '503'               => [\n        'body'  => [\n            '1' => 'Kanka está em manutenção, o que geralmente significa que uma nova versão está a caminho!',\n            '2' => 'Desculpe pela inconveniência. Tudo voltará ao normal em apenas alguns minutos.',\n        ],\n        'json'  => 'Kanka está atualmente sob manutenção, por favor tente novamente dentro de alguns minutos.',\n        'title' => 'Em manutenção',\n    ],\n    '503-form'          => [],\n    'back-to-campaigns' => 'Voltar para uma de suas campanhas',\n    'footer'            => 'Se precisar de mais ajuda, entre em contato conosco em :email ou no :discord',\n    'log-in'            => 'Fazer login na sua conta pode revelar o que você está procurando.',\n    'post_layout'       => 'Layout de post inválido.',\n    'private-campaign'  => [\n        'auth'  => [\n            'helper'    => 'Você não tem acesso a esta campanha.',\n        ],\n        'guest' => [\n            'helper'    => 'A campanha que você está tentando acessar é privada e você não está conectado.',\n            'login'     => 'Fazer login pode permitir que você acesse o conteúdo.',\n        ],\n        'title' => 'Campanha privada',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novo Evento',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [\n        'helper'    => 'Eventos que tem essa entidade como seu evento primário são exibidos aqui.',\n    ],\n    'fields'        => [\n        'date'  => 'Data',\n    ],\n    'helpers'       => [\n        'date'  => 'Este campo pode conter qualquer coisa e não está vinculado aos calendários da campanha. Para vincular este evento a um calendário, adicione-o no calendário ou no sub-menu de lembretes deste evento.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'date'  => 'Uma data para o seu evento',\n        'type'  => 'Cerimonia, Festival, Desastre, Batalha, Nascimento',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Introduções de Calendário',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/families/trees.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'clear'             => 'Apaga tudo',\n        'first'             => 'Adiconar um fundador',\n        'founder'           => 'Adicionar um novo fundador',\n        'rename-relation'   => 'Renomear relação',\n        'reset'             => 'Descartar mudanças',\n        'save'              => 'Salvar',\n    ],\n    'modal'     => [\n        'first-title'   => 'Selecione uma entidade',\n        'helper'        => 'Substitua a entidade por outra da campanha',\n        'relation'      => 'Relação',\n        'title'         => 'Substituir entidade',\n    ],\n    'modals'    => [\n        'clear'     => [\n            'confirm'   => 'Tem certeza de que deseja reinicializar todos os dados da árvore genealógica?',\n        ],\n        'entity'    => [\n            'add'       => [\n                'founder'   => 'Fundador',\n                'member'    => 'Membro',\n                'success'   => 'Entidade adicionada.',\n                'title'     => 'Adicionar uma entidade',\n            ],\n            'child'     => [\n                'success'   => 'Filho adicionado.',\n                'title'     => 'Adicionar um filho',\n            ],\n            'edit'      => [\n                'helper'    => 'Marque esta opção se a relação for desconhecida. Um personagem pode ser adicionado mais tarde.',\n                'success'   => 'Entidade atualizada.',\n                'title'     => 'Atualizar uma entidade',\n            ],\n            'founder'   => [\n                'title' => 'Adicionar um novo fundador',\n            ],\n            'remove'    => [\n                'confirm'   => 'Tem certeza que deseja remover essa entidade da árvore genealógica?',\n                'success'   => 'Entidade removida.',\n            ],\n        ],\n        'relations' => [\n            'add'       => [\n                'success'   => 'Relação adicionada.',\n                'title'     => 'Adicionar uma relação',\n            ],\n            'edit'      => [\n                'success'   => 'Relação atualizada.',\n                'title'     => 'Atualizar uma relação',\n            ],\n            'unknown'   => 'Desconhecida',\n        ],\n        'reset'     => [\n            'confirm'   => 'Tem certeza que deseja descartar quaisquer mudanças feitas na árvore genealógica?',\n        ],\n    ],\n    'pitch'     => 'Crie uma árvore genealógica detalhada para as famílias da campanha.',\n    'success'   => [\n        'cleared'   => 'Árvore genealógica apagada.',\n        'reseted'   => 'Árvore genealógica foi redefinida.',\n        'saved'     => 'Árvore genealógica salva.',\n    ],\n    'title'     => 'Árvore Genealógica :name',\n    'unknown'   => 'não estabelecido',\n];\n"
  },
  {
    "path": "lang/pt-BR/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova Família',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Essa família está extinta.',\n        'members'       => 'Os membros de uma família estão listados aqui. Um personagem pode ser adicionado a uma família editando o personagem desejado e usando a lista suspensa \"Família\".',\n    ],\n    'index'         => [],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Adicione um ou vários membros a :name.',\n            'success'   => '{0} Nenhum membro foi adicionado.|{1} 1 membro foi adicionado.|[2,*] :count membros foram adicionados.',\n            'title'     => 'Novos Membros',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome da família',\n        'type'  => 'Realeza, Nobres, Extinta',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'tree'  => 'Árvore genealógica',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/faq.php",
    "content": "<?php\n\nreturn [\n    'account-deletion'      => [\n        'account_settings'  => 'Configurações da conta',\n        'answer'            => 'Para excluir sua conta, vá para a página da sua :account e role para baixo até a seção de exclusão da conta. Isso excluirá sua conta e todas as campanhas nas quais você é o único membro.',\n        'question'          => 'Como posso deletar a minha conta?',\n    ],\n    'app_backup'            => [\n        'answer'    => 'Fazemos dois backups por dia para evitar qualquer perda de dados. Nossas próprias campanhas estão no servidor, então não queremos correr riscos!',\n        'question'  => 'Com que frequência é feito backup dos dados em Kanka?',\n    ],\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nA melhor maneira de explicar os Modelos de Atributo é com um exemplo. Vamos imaginar que seu mundo tem muitos locais e, em muitos desses locais, você deseja se lembrar de criar um atributo personalizado para \"População\", \"Clima\", \"Nível de crime\".\n\nAgora, você poderia fazer isso facilmente em todos os locais, mas pode se tornar tedioso e às vezes você pode se esquecer de criar o atributo \"Nível de crime\". É aqui que os Modelos de Atributo entram em jogo.\n\nVocê pode criar um Modelo de Atributo com esses atributos (População, Clima, Nível de Crime, etc) e, posteriormente, aplicar esse modelo às suas localizações. Isso criará os atributos do modelo nos locais, então tudo que você precisa fazer é alterar os valores e não precisa se lembrar dos atributos!\nTEXT\n        ,\n        'question'  => 'Modelos de Atributo, o que são eles?',\n    ],\n    'backup'                => [\n        'answer'    => 'Uma vez por dia, você pode exportar todos os dados de sua campanha como um arquivo ZIP. No aplicativo, clique em \"Campanha\" no menu à esquerda e clique em \"Exportar\". Isso criará uma exportação que ficará disponível por 30 minutos. Você não pode fazer upload desta exportação para Kanka; ela é destinada apenas para sua própria tranquilidade ou se você não planeja mais usar o aplicativo.',\n        'question'  => 'Como posso fazer backup ou exportar minha campanha?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Basta entrar em nosso servidor do :discord e relatar seu bug no canal #error-and-bugs.',\n        'question'  => 'Como posso relatar um bug?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'Kanka não tem esse recurso. No entanto, se você está tentando ter vários grupos de jogo no mesmo mundo, considere usar a mesma campanha e separar seus grupos por meio de uma combinação de missões, tags e permissões',\n        'question'  => 'Posso sincronizar entidades em várias campanhas?',\n    ],\n    'custom'                => [\n        'answer'    => 'Kanka vem com um conjunto de tipos de entidades predefinidas que interagem entre si. Permitir tipos de entidade personalizados exigiria reconstruir o aplicativo do zero e anular o propósito de uma ferramenta com tipos predefinidos para ajudar as pessoas a construir um mundo em vez de descobrir como organizar as coisas. Além disso, Kanka é flexível com tags que podem representar a maioria dos cenários de tipo de entidade personalizado.',\n        'question'  => 'Posso criar tipos de entidade personalizados?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Vá para o painel de sua campanha e clique em \"Campanha\" no menu à esquerda. Um botão \"Excluir\" campanha aparecerá se você for o último membro da campanha. Excluir uma campanha é uma ação permanente que irá excluir todos os dados armazenados em nossos servidores, incluindo imagens.',\n        'question'  => 'Como posso deletar uma campanha?',\n    ],\n    'discord'               => [\n        'answer'    => 'Para vincular sua conta Kanka ao :discord, primeiro você precisa clicar em seu avatar no canto superior direito do aplicativo e clicar no botão Perfil. A partir daí, navegue até a subpágina de aplicativos e clique em Conectar.',\n        'question'  => 'Como posso linkar minha conta do Kanka com o Discord?',\n    ],\n    'early-access'          => [\n        'answer'    => 'O Acesso Antecipado é uma forma de recompensar nossos incríveis assinantes, dando-lhes um período exclusivo de 30 dias, onde podem experimentar os módulos mais recentes antes de qualquer outra pessoa.',\n        'question'  => 'O que é Acesso Antecipado?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'Todas as entidades têm uma guia \\'Notas de Entidade\\' que são pequenos trechos de texto que podem ser configurados para serem visíveis apenas por você (ótimo para campanhas com mais de um Mestre), apenas para membros da com o cargo de administrador ou visíveis para todos. Você também pode dar a seus jogadores permissão para criar e editar notas de entidade em entidades sem ter que permitir que eles editem uma entidade inteira.',\n        'question'  => 'Como Kanka lida com informações parcialmente ocultas?',\n    ],\n    'fields'                => [\n        'answer'    => 'Resposta',\n        'category'  => 'Categoria',\n        'locale'    => 'Localidade',\n        'order'     => 'Ordem',\n        'question'  => 'Questão',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\nSim! Acreditamos fortemente que sua situação financeira não deve afetar sua diversão com RPGs ou construção de mundos e sempre manteremos o aplicativo principal gratuito. No entanto, se você deseja ter um papel mais ativo nesta jornada, nos apoiar e votar nos recursos que mais lhe importam, você pode fazê-lo por meio de nossas assinaturas.\n\nAlém de votar na direção que Kanka toma, nos apoiar permite que você ganhe acesso a :boosters, aumentar o limite do tamanho de  upload de arquivos, adicionar seu nome ao Hall da Fama, ter ícones padrão mais legais e muito mais!\nTEXT\n        ,\n        'question'  => 'O aplicativo vai continuar sendo gratuito?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Recomendamos a criação de Deuses como Personagens e a criação de religiões como Organizações. Se você deseja encontrar rapidamente suas divindades, recomendamos marcá-las com uma tag e/ou tipo apropriado.',\n        'question'  => 'Onde criar Deuses e Religiões?',\n    ],\n    'help'                  => [\n        'answer'    => 'Em primeiro lugar, obrigado por querer ajudar! Estamos sempre interessados em pessoas que possam ajudar com traduções, que possam testar novos recursos ou que possam ajudar novos usuários. Também adoramos quando as pessoas promovem o Kanka para alcançar novos usuários em lugares que não tínhamos pensado. Seu melhor curso de ação é juntar-se a nós no :discord, onde há um canal dedicado a ajudar.',\n        'question'  => 'Como posso ajudar?',\n    ],\n    'map'                   => [\n        'answer'    => 'O módulo de Mapas suporta imagens PNG, JPG e SVG. Esses mapas podem ter camadas, grupos e marcadores apontando de várias formas e tamanhos que apontam para outras entidades em uma campanha.',\n        'question'  => 'Posso fazer upload de mapas no Kanka?',\n    ],\n    'mobile'                => [\n        'answer'    => 'Atualmente, não há um aplicativo para celular do Kanka, mas a maior parte do aplicativo funciona em um dispositivo móvel. Esperamos que o suporte por meio de assinaturas nos permita pagar alguém para construir um aplicativo móvel um dia, mas não prevemos isso no futuro próximo.',\n        'question'  => 'Há um aplicativo para celular? Há algum planejado?',\n    ],\n    'monsters'              => [\n        'answer'    => 'Recomendamos usar o módulo Raças para povos, espécies, monstros e qualquer coisa viva que não seja um personagem.',\n        'question'  => 'Onde criar monstros?',\n    ],\n    'multiworld'            => [\n        'answer'    => 'Você pode fazer parte de quantas campanhas quiser, incluindo as que criou. Para mudar ou criar uma nova campanha, vá para o painel de sua campanha e no canto superior direito você pode clicar em sua campanha atual para exibir a interface do alternador de campanha.',\n        'question'  => 'Posso ter mais de uma campanha?',\n    ],\n    'nested'                => [\n        'answer'    => 'Se você preferir visualizar suas entidades em uma visualização aninhada por padrão (por exemplo, o botão Visualização aninhada na lista de locais), você pode fazer isso acessando as opções de Perfil e Layout. Lá você pode marcar a opção Visualização aninhada. Isso é apenas para sua conta e não para suas campanhas.',\n        'question'  => 'Posso definir as listas a serem aninhadas por padrão?',\n    ],\n    'permissions'           => [\n        'answer'    => 'Com certeza, é por isso que construímos o Kanka! Você pode convidar todos os seus jogadores para suas campanhas e dar-lhes funções e permissões. Construímos o sistema para ser extremamente flexível (você pode usar uma configuração opt-in e opt-out) para cobrir o máximo de necessidades e situações possíveis.',\n        'question'  => 'Posso limitar as informações que meus jogadores veem em minha campanha?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nO plano de longo prazo para Kanka é construir uma ferramenta versátil de construção de mundos e gerenciamento de campanha que seja independente do sistema com conteúdo gerenciado pela comunidade na forma de \"Modelos de Comunidade\". Outro objetivo nosso é construir ferramentas que se integrem com outras plataformas, como aplicativos de mesa virtuais.\n\nNós mesmos usamos o Kanka, então temos o plano de jamais parar de desenvolvê-lo e aprimorá-lo. No entanto, apenas por segurança, o projeto também é de código aberto e pode ser continuado pela comunidade se algo acontecer conosco.\nTEXT\n        ,\n        'question'  => 'Quais são os planos de longo prazo?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Você pode navegar na página :public-campaigns para ver como outras pessoas usam o Kanka em suas campanhas.',\n        'question'  => 'Como outras pessoas usam o Kanka?',\n    ],\n    'renaming-modules'      => [\n        'answer'    => 'Embora isso seja fácil de fazer para o inglês e outros idiomas que não usam nomes de gênero, ser capaz de alterar o nome dos módulos quebraria a correção gramatical e a experiência do usuário para a maioria dos idiomas em que o Kanka também está disponível.',\n        'question'  => 'Posso renomear módulos? Por exemplo, famílias para clãs ou organizações para facções?',\n    ],\n    'sections'              => [\n        'community'     => 'Comunidade',\n        'general'       => 'Geral',\n        'other'         => 'Outros',\n        'permissions'   => 'Permissões',\n        'pricing'       => 'preços',\n        'worldbuilding' => 'Construção de Mundo',\n    ],\n    'show'                  => [\n        'return'    => 'Voltar pas Perguntas Frequentes',\n        'timestamp' => 'Atualizado pela última vez em :date',\n        'title'     => 'Perguntas Frequentes :name',\n    ],\n    'unboost'               => [\n        'answer'    => 'Deixar de impulsionar uma campanha não exclui nenhum dos dados que foram criados enquanto ela era impulsionada, mas simplesmente oculta as informações e recursos. Se você impulsionar a campanha novamente, as informações e recursos voltarão a estar disponíveis com a mesma configuração de antes do impulso ser removido.',\n        'question'  => 'O que acontece se a campanha não for mais impulsionada?',\n    ],\n    'user-switch'           => [\n        'answer'    => 'As permissões podem ser complicadas, especialmente com grandes campanhas. Como administrador da campanha, você pode navegar até a página dos membros da campanha e clicar no botão \"Alternar\" que aparecerá ao lado dos membros não administradores da campanha. Isso fará com que você se conecte como esse usuário e permitirá que você veja a campanha como eles o veriam. Esta é a maneira mais fácil de verificar as permissões de sua campanha.',\n        'question'  => 'Minhas permissões de campanha estão configuradas, como posso testá-las?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Apenas as pessoas que você convida para sua campanha podem ver e interagir com o que você criou. Seus dados são privados e sempre sob seu controle. Você também pode definir sua campanha como pública para permitir que usuários não registrados a visualizem.',\n        'question'  => 'Alguém pode ver meu mundo?',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/fields.php",
    "content": "<?php\n\nreturn [\n    'gallery'           => [\n        'placeholder'   => 'Escolha uma imagem da galeria da campanha',\n    ],\n    'gallery-header'    => [\n        'description'   => 'Se a entidade não tiver uma imagem de cabeçalho, exiba uma imagem da galeria da campanha.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'Se a entidade não tiver imagem, exiba uma imagem da galeria da campanha.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Exiba uma imagem de fundo no cabeçalho da entidade com um :boosted-campaign.',\n        'description'           => 'Exiba uma imagem de fundo no cabeçalho da entidade. Para melhores resultados, use uma imagem muito grande.',\n        'title'                 => 'Imagem de Cabeçalho',\n    ],\n    'tooltip'           => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/filters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'bookmark'  => 'Marcador',\n    ],\n    'alerts'    => [\n        'copy'  => 'Os filtros foram copiados para sua área de transferência.',\n    ],\n    'bookmark'  => [\n        'helper'    => 'Crie um novo marcador para esta visualização usando os filtros atuais.',\n        'name'      => ':module (filtrado)',\n        'premium'   => 'Adicionar mais marcadores requer a ativação de recursos premium da campanha.',\n        'success'   => 'Marcador criado.',\n    ],\n    'helpers'   => [\n        'guest'         => 'Por favor entre em sua conta para filtrar resultados.',\n        'icon'          => 'Dê a este marcador um ícone :fontawesome especial, por exemplo :example.',\n        'icon-premium'  => 'Dê a este marcador um ícone especial :fontawesome, como :example, com um :premium.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/footer.php",
    "content": "<?php\n\nreturn [\n    'about'             => 'Sobre nós',\n    'blog'              => 'Blog',\n    'boosters'          => 'Impulsionadores',\n    'community'         => 'Comunidade',\n    'company'           => 'Companhia',\n    'contact'           => 'Contato',\n    'copyright'         => 'Direitos autorais :copy :year Owlchester SNC',\n    'documentation'     => 'Documentação',\n    'features'          => 'Recursos',\n    'kb'                => 'Base de conhecimento',\n    'language-switcher' => [\n        'other' => 'Outros idiomas',\n        'title' => 'Selecione seu idioma',\n    ],\n    'made'              => 'Feito com ❤️ em Genebra, Suíça',\n    'newsletter'        => 'Informativos',\n    'platform'          => 'Plataforma',\n    'plugins'           => 'Biblioteca de plugins',\n    'premium'           => 'Campanhas premium',\n    'press-kit'         => 'Kit de imprensa',\n    'pricing'           => 'Preços',\n    'privacy'           => 'Privacidade',\n    'public-campaigns'  => 'Campanhas públicas',\n    'resources'         => 'Recursos',\n    'roadmap'           => 'Roadmap',\n    'security'          => 'Segurança',\n    'server-time'       => 'Este é o horário do nosso servidor (:server)',\n    'status'            => 'Status do serviço',\n    'terms'             => 'Termos',\n    'thanks'            => 'Só é possível graças aos nossos assinantes.',\n    'translator_call'   => 'Kanka é traduzido em outros idiomas graças à nossa incrível comunidade. Se você quiser ajudar a traduzir Kanka para o seu idioma, entre em contato conosco no :discord!',\n    'whats-new'         => 'Novidades',\n];\n"
  },
  {
    "path": "lang/pt-BR/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Votos da Comunidade',\n];\n"
  },
  {
    "path": "lang/pt-BR/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Salão da Fama',\n];\n"
  },
  {
    "path": "lang/pt-BR/front/kb.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'show'      => [],\n    'title'     => 'Base de conhecimento',\n];\n"
  },
  {
    "path": "lang/pt-BR/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Saiba mais',\n        'subscribe'     => 'Assinar',\n    ],\n    'fields'    => [\n        'firstname'     => 'Nome',\n        'lastname'      => 'Sobrenome',\n        'notifications' => 'Notificações',\n    ],\n    'groups'    => [\n        'all'           => 'Receba atualizações ocasionais sobre novos recursos, votos da comunidade, promoções e eventos.',\n        'newsletter'    => 'Newsletter',\n    ],\n    'headline'  => 'Assine uma ou todas nossas newsletter para se manter atualizado sobre  o Kanka.',\n    'title'     => 'Atualizações pelo E-mail',\n];\n"
  },
  {
    "path": "lang/pt-BR/front.php",
    "content": "<?php\n\nreturn [\n    'about'                 => [],\n    'actions'               => [],\n    'campaigns'             => [\n        'public'    => [\n            'filters'   => [\n                'is-premium'    => 'Esta é uma campanha premium!',\n            ],\n        ],\n    ],\n    'community'             => [],\n    'contact'               => [],\n    'cookie'                => [\n        'dismiss'   => 'Entendido!',\n        'link'      => 'Saiba mais',\n        'message'   => 'Este site usa cookies para garantir que você obtenha a melhor experiência em nosso site.',\n    ],\n    'faq'                   => [],\n    'featured_campaigns'    => [],\n    'features'              => [\n        'api'       => [\n            'link'  => 'Documentos da API',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Aumento de requisições de API (90 por minuto)',\n            'boosts'            => 'Impulsos de Campanha',\n            'default_image'     => 'Imagens padrão mais agradáveis para entidades em listas',\n            'discord'           => 'Canal privado no :discord',\n            'free'              => 'Grátis',\n            'hall_of_fame'      => 'Nome no :link',\n            'impact'            => 'Alto impacto de recursos futuros (através do Discord)',\n            'monthly_vote'      => 'Participe das votações da comunidade',\n            'pagination'        => 'Resultados de paginação aumentados',\n            'upload_limit'      => 'Tamanho de upload',\n            'upload_limit_map'  => 'Tamanho de upload de mapas',\n        ],\n    ],\n    'first_block'           => [],\n    'footer'                => [],\n    'goodbye'               => [],\n    'help'                  => [],\n    'home'                  => [\n        'seo'   => [\n            'meta-description'  => 'Você é um mestre do jogo, criador de mundos ou um contador de histórias? Oferecemos um gerenciador de campanha de mesa e uma ferramenta de criação de mundo que facilita a organização, o planejamento e o aproveitamento de suas campanhas TTRPG. Somos movidos pela comunidade e, o melhor de tudo, nossos principais recursos são gratuitos!',\n        ],\n    ],\n    'master'                => [],\n    'media'                 => [],\n    'menu'                  => [\n        'dashboard'     => 'Dashboard',\n        'login'         => 'Conecte-se',\n        'register'      => 'Registre-se',\n        'register_free' => 'Registre-se gratuitamente',\n    ],\n    'meta'                  => [\n        'description'   => ':kanka é um construtor de mundo digital flexível e gerencimanto de campanha de RPG de mesa online',\n        'title'         => ':kanka - Gerenciador de campanha de RPG de mesa online e ferramenta de construção de mundo',\n    ],\n    'partners'              => [],\n    'pricing'               => [\n        'tier'  => [\n            'free'  => 'Grátis',\n            'month' => 'mês',\n        ],\n    ],\n    'privacy'               => [],\n    'release'               => [],\n    'roadmap'               => [],\n    'second_block'          => [],\n    'seo'                   => [\n        'keywords'  => 'Construção de mundo, RPG de mesa, gerenciamento de campanha de RPG',\n    ],\n    'team'                  => [],\n    'terms'                 => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'gallery'   => 'Da galeria',\n        'url'       => 'Carregar uma imagem de uma URL',\n    ],\n    'browse'    => [\n        'layouts'       => [\n            'large' => 'Pré-visualizações grandes',\n            'small' => 'Pré-visualizações pequenas',\n        ],\n        'search'        => [\n            'placeholder'   => 'Procurar uma imagem na galeria',\n        ],\n        'title'         => 'Galeria',\n        'unauthorized'  => 'Nenhum de seus cargos tem a permissão \"navegar pela galeria\".',\n    ],\n    'cta'       => [\n        'action'    => 'Desbloqueie mais espaço de armazenamento',\n        'helper'    => 'Desbloqueie até :size GB de espaço de armazenamento com uma :premium-campaign.',\n        'title'     => 'Armazenamento cheio',\n    ],\n    'delete'    => [\n        'success'   => '[0] Excluído 0 elementos|[1] Excluído um elemento|{2,*} Excluídos :count elementos',\n    ],\n    'download'  => [\n        'errors'    => [\n            'copy_failed'           => 'Nossos servidores não conseguiram baixar a imagem fornecida.',\n            'gallery_full_free'     => 'O espaço de armazenamento da galeria está cheio. Habilite recursos premium para mais armazenamento.',\n            'gallery_full_premium'  => 'O espaço de armazenamento da galeria está cheio. Remova os arquivos não utilizados primeiro.',\n            'invalid_format'        => 'O arquivo não está num formato válido.',\n            'too_big'               => 'O arquivo é muito grande.',\n            'unauthorized'          => 'Nenhum dos seus cargos tem a permissão \"carregar para a galeria\".',\n        ],\n    ],\n    'file'      => [\n        'saved' => 'Salvo',\n    ],\n    'filters'   => [\n        'only_unused'   => 'Somente mostrar arquivos não salvos',\n        'sort'          => 'Ordenar por',\n    ],\n    'move'      => [\n        'success'   => '[0] Movido 0 elementos|[1] Movido um elemento|{2,*} Movidos :count elementos',\n    ],\n    'update'    => [\n        'home'      => 'Pasta inicial',\n        'success'   => '[0] Atualizado 0 elementos|[1] Atualizado um elemento|{2,*} Atualizados :count elementos',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Desmarcar Todos',\n    'documentation' => 'Saiba mais sobre esse recurso em nossa documentação',\n    'done'          => 'Feito',\n    'learn-more'    => 'Saiba mais',\n    'no'            => 'Não',\n    'required'      => 'Obrigatório',\n    'select_all'    => 'Selecionar Todos',\n    'success'       => [\n        'created'           => ':name criado.',\n        'deleted'           => ':name removido.',\n        'deleted-cancel'    => ':name removido. :cancel',\n        'updated'           => ':name atualizado.',\n    ],\n    'tutorial'      => 'Assistir tutorial',\n    'yes'           => 'Sim',\n];\n"
  },
  {
    "path": "lang/pt-BR/genres.php",
    "content": "<?php\n\nreturn [\n    'alternate_history' => 'História alternativa',\n    'cyberpunk'         => 'Cyberpunk',\n    'fantasy'           => 'Fantasia',\n    'historical'        => 'Histórico',\n    'many_worlds'       => 'Muitos mundos',\n    'modern'            => 'Moderno',\n    'occult'            => 'Oculto',\n    'post_apocalyptic'  => 'Pós-apocalíptico',\n    'pulp'              => 'Pulp',\n    'science_fantasy'   => 'Fantasia científica',\n    'science_fiction'   => 'Ficção científica',\n    'space_opera'       => 'Ópera espacial',\n    'steampunk'         => 'Steampunk',\n    'superhero'         => 'Super-herói',\n    'urban_fantasy'     => 'Fantasia urbana',\n    'western'           => 'Velho-oeste',\n];\n"
  },
  {
    "path": "lang/pt-BR/header.php",
    "content": "<?php\n\nreturn [\n    'news'              => [\n        'title' => 'Novidades do Kanka',\n    ],\n    'notifications'     => [\n        'dismiss'   => 'Dispensar',\n        'no-unread' => 'Nenhuma notificação não lida',\n        'read_all'  => 'Ver tudo',\n    ],\n    'qq'                => [\n        'tooltip'   => 'Criar uma entidade ou artigo',\n    ],\n    'toggle_navigation' => 'Alterar navegação',\n    'user'              => [\n        'settings'      => 'Configurações',\n        'sign-out'      => 'Sair',\n        'upgrade'       => 'Aprimorar',\n        'your-profile'  => 'Seu perfil',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/helpers.php",
    "content": "<?php\n\nreturn [\n    'age'               => [],\n    'api-filters'       => [\n        'description'   => 'Os seguintes filtros estão disponíveis para o endpoint :name da API.',\n        'title'         => 'Filtros da API',\n    ],\n    'attributes'        => [\n        'link'  => 'Opções de atributo',\n    ],\n    'calendar-widget'   => [\n        'info'  => 'Por que esses lembretes estão sendo exibidos?',\n        'title' => 'Widget do Calendário',\n    ],\n    'dice'              => [],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Como usar filtros',\n    ],\n    'link'              => [\n        'description'   => 'Você pode facilmente criar um link para outras entidades quando estiver criando ou editando personagens, locais e etc. Apenas escreva os seguintes códigos com o nome da entidade que você gostaria de vincular.',\n    ],\n    'map'               => [],\n    'pins'              => [],\n    'public'            => 'Assista a um tutorial em vídeo no Youtube explicando as campanhas públicas.',\n    'troubleshooting'   => [\n        'description'       => 'Um membro da equipe de Kanka enviou você para esta página. Selecione uma campanha no menu suspenso para gerar um token para que possamos ingressar temporariamente em sua campanha como um administrador.',\n        'errors'            => [\n            'token_exists'  => 'Um token já existe para :campaign.',\n        ],\n        'save_btn'          => 'Gerar token',\n        'select_campaign'   => 'Selecionar uma campanha',\n        'subtitle'          => 'Por favor, envie ajuda!',\n        'success'           => 'Copie o seguinte token e envie-o para alguém da equipe de Kanka.',\n        'title'             => 'Solução de Problemas',\n    ],\n    'widget-filters'    => [\n        'description'   => 'Você pode filtrar entidades exibidas no widget modificado recentemente, fornecendo uma lista de campos da entidade e valores. Por exemplo, você pode usar :example para filtrar personagens mortos do tipo PdM.',\n        'link'          => 'filtros de widget',\n        'title'         => 'Filtros dos Widgets do Dashboard',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/history.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'show-old'  => 'Alterações',\n    ],\n    'cta'       => 'Exiba um log de todas as alterações recentes na campanha.',\n    'empty'     => 'Vazio',\n    'fields'    => [\n        'action'    => 'Ação',\n        'category'  => 'Categoria',\n        'details'   => 'Detalhes',\n        'when'      => 'Quando',\n        'who'       => 'Quem',\n    ],\n    'filters'   => [\n        'all-actions'   => 'Todas as ações',\n        'all-users'     => 'Todos os membros',\n        'no-results'    => 'Nenhum resultado para exibir. Tente com outros filtros ou volte depois de fazer alterações nas entidades da campanha.',\n    ],\n    'helpers'   => [\n        'base'      => 'Essa interface contém alterações recentes nas entidades da campanha por até :amount meses, mostrando as alterações mais recentes primeiro.',\n        'changes'   => 'Os campos a seguir tinham anteriormente esses valores.',\n    ],\n    'log'       => [\n        'create'        => ':user criou :entity',\n        'create_post'   => ':user criou o post \":post\" em :entity',\n        'delete'        => ':user removeu :entity',\n        'delete_post'   => ':user removeu um post em :entity',\n        'reorder_post'  => ':user reordenou os posts de :entity',\n        'restore'       => ':user restaurou :entity',\n        'update'        => ':user atualizou :entity',\n        'update_post'   => ':user atualizou o post \":post\" em :entity',\n        'update_tree'   => ':user atualizou a árvore genealógica de :entity',\n    ],\n    'title'     => 'Histórico',\n    'unknown'   => [\n        'entity'    => 'uma entidade desconhecida',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/items.php",
    "content": "<?php\n\nreturn [\n    'bulk'          => [\n        'creators'  => [\n            'action'    => 'Ação para criadores',\n            'remove'    => 'Remover todos os criadores',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Novo Objeto',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'creators'      => 'Criadores',\n        'is_equipped'   => 'Equipado',\n        'price'         => 'Preço',\n        'size'          => 'Tamanho',\n        'weight'        => 'Peso',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'inventories'   => [],\n    'lists'         => [\n        'empty' => 'Adicione armas, artefatos ou itens importantes ao seu mundo.',\n    ],\n    'placeholders'  => [\n        'price' => 'Preço do objeto',\n        'size'  => 'Tamanho, Peso, Dimensões',\n        'type'  => 'Arma, Poção, Artefato',\n        'weight'=> 'Peso do objeto',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Inventários',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novo Diário',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Autor',\n        'date'      => 'Data',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'journals'      => [],\n    'lists'         => [\n        'empty' => 'Crie entidades de diário para registrar aventuras, pensamentos dos personagens ou resumos e preparativos das sessões.',\n    ],\n    'placeholders'  => [\n        'author'    => 'Quem escreveu o diário',\n        'date'      => 'Data do mundo real do diário',\n        'type'      => 'Sessão, One Shot, Rascunho',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Catalão',\n        'cs'    => 'Tcheco',\n        'de'    => 'Alemão',\n        'el'    => 'Grego',\n        'en'    => 'Inglês',\n        'en-US' => 'Inglês Americano',\n        'es'    => 'Espanhol',\n        'fr'    => 'Francês',\n        'gl'    => 'Galego',\n        'he'    => 'Hebraico',\n        'hr'    => 'Croata',\n        'hu'    => 'Húngaro',\n        'it'    => 'Italiano',\n        'nb'    => 'Norueguês (Bokmal)',\n        'nl'    => 'Holandês',\n        'pl'    => 'Polonês',\n        'pt-BR' => 'Português do Brasil',\n        'ru'    => 'Russo',\n        'sk'    => 'Eslovaco',\n        'tr'    => 'Turco',\n    ],\n    'header'=> 'Idiomas',\n];\n"
  },
  {
    "path": "lang/pt-BR/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Novo Local',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [\n        'is_destroyed'  => 'Destruído',\n        'title'         => 'Título',\n    ],\n    'helpers'       => [\n        'characters'    => 'Ver todos personagens neste local e em seus locais secundários, ou apenas aqueles localizados diretamente aqui.',\n    ],\n    'hints'         => [\n        'is_destroyed'  => 'Esse local está destruído.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'lists'         => [\n        'empty' => 'Adicione sua primeira cidade, taverna ou ruína escondida para dar sustentação ao seu mundo.',\n    ],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'title' => 'T[itulo',\n        'type'  => 'Cidade, Reino, Ruína',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Entrar no modo de edição',\n        'exit-edit-mode'    => 'Sair do modo de edição',\n        'finish-drawing'    => 'Concluir o desenho do polígono',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Clique no mapa para começar a desenhar um polígono',\n    ],\n    'toggle'        => 'Abrir/fechas todos os grupos',\n];\n"
  },
  {
    "path": "lang/pt-BR/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Adicionar um novo grupo',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Removido :count grupo.|[2,*] Removidos :count grupos.',\n        'patch'     => '{1} Atualizado :count grupo.|[2,*] Atualizados :count grupos.',\n    ],\n    'create'        => [\n        'helper'    => 'Adicione um novo grupo a :name. Os marcadores poderão então ser atribuídos a este grupo.',\n        'success'   => 'Grupo :name criado.',\n        'title'     => 'Novo Grupo',\n    ],\n    'delete'        => [\n        'success'   => 'Grupo :name removido.',\n    ],\n    'edit'          => [\n        'success'   => 'Grupo :name atualizado.',\n        'title'     => 'Editar Grupo :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Exibir marcadores do grupo',\n        'parent'    => 'Grupo Primário',\n        'position'  => 'Posição',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Os marcadores podem ser agrupados usando grupos de mapas. Cada grupo pode ser clicado ao explorar um mapa para exibir ou ocultar rapidamente todos os marcadores nele.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Se assinalado, os marcadores do grupo serão exibidos no mapa por padrão.',\n    ],\n    'index'         => [\n        'title' => 'Grupos de :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'Você não pode adicionar mais grupos a menos que remova um existente.',\n            'limit'     => 'Este mapa atingiu seu limite de grupo',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Você atingiu o limite de :limit grupos para este mapa',\n            'upgrade'   => 'Faça upgrade para uma campanha premium para adicionar até :limit grupos e desbloquear ainda mais flexibilidade criativa.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Lojas, Tesouros, PdMs',\n        'position'      => 'Primeiro',\n        'position_list' => 'Depois de :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Salvar nova ordem',\n        'success'   => '{1} Reordenado :count grupo.|[2,*] Reordenados :count grupos.',\n        'title'     => 'Reordenar grupos',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Adicionar uma nova camada',\n    ],\n    'base'          => 'Camada Base',\n    'bulks'         => [\n        'delete'    => '{1} Removida :count camada.|[2,*] Removidas :count camadas.',\n        'patch'     => '{1} Atualizada :count camada.|[2,*] Atualizadas :count camadas.',\n    ],\n    'create'        => [\n        'success'   => 'Camada :name criada.',\n        'title'     => 'Nova Camada',\n    ],\n    'delete'        => [\n        'success'   => 'Camada :name removida.',\n    ],\n    'edit'          => [\n        'success'   => 'Camada :name atualizada.',\n        'title'     => 'Editar Camada :name',\n    ],\n    'fields'        => [\n        'position'  => 'Posição',\n        'type'      => 'Tipo de camada',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Carregue camadas em um mapa para alternar a imagem de plano de fundo exibida abaixo dos marcadores ou como sobreposições acima do mapa, mas abaixo dos marcadores.',\n        'is_real'   => 'Camadas não estão disponíveis ao usar OpenStreetMaps.',\n    ],\n    'index'         => [\n        'title' => 'Camadas de :name',\n    ],\n    'pitch'         => [\n        'max'       => [\n            'helper'    => 'Não é possível adicionar mais camadas a menos que você remova uma existente.',\n            'limit'     => 'Este mapa atingiu seu limite de camadas',\n        ],\n        'upgrade'   => [\n            'limit'     => 'Você atingiu o limite de :limit camadas para este mapa',\n            'upgrade'   => 'Atualize para uma campanha premium para adicionar até :limit camadas e desbloquear ainda mais flexibilidade criativa.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Subterrãneo, Nível 2, Navio Naufragado',\n        'position'      => 'Primeiro',\n        'position_list' => 'Depois de :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Salvar nova ordem',\n        'success'   => '{1} Reordenada :count camada.|[2,*] Reordenadas :count camadas.',\n        'title'     => 'Reordenar camadas',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Sobreposição',\n        'overlay_shown' => 'Sobreposição (mostrar automaticamente)',\n        'standard'      => 'Padrão',\n    ],\n    'types'         => [\n        'overlay'       => 'Sobreposição (exibido acima da camada ativa)',\n        'overlay_shown' => 'Sobreposição exibida por padrão',\n        'standard'      => 'Camada padrão (alternar entre camadas)',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Escreva um campo de introdução personalizado para esse marcador.',\n        'remove'            => 'Remover marcador',\n        'reset-polygon'     => 'Redefinir posições',\n        'save_and_explore'  => 'Salvar e Explorar',\n        'start-drawing'     => 'Começar a desenhar',\n        'update'            => 'Editar marcador',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Removido :count marcador.|[2,*] Removidos :count marcadores.',\n        'patch'     => '{1} Atualizado :count marcador.|[2,*] Atualizados :count marcadores.',\n    ],\n    'circle_sizes'  => [\n        'custom'    => 'Personalizado',\n        'huge'      => 'Enorme',\n        'large'     => 'Grande',\n        'small'     => 'Pequeno',\n        'standard'  => 'Padrão',\n        'tiny'      => 'Minúsculo',\n    ],\n    'create'        => [\n        'success'   => 'Marcador :name criado.',\n        'title'     => 'Novo Marcador',\n    ],\n    'delete'        => [\n        'success'   => 'Marcador :name removido.',\n    ],\n    'details'       => [\n        'from-entity'   => 'Da entidade',\n    ],\n    'edit'          => [\n        'success'   => 'Marcador :name atualizado.',\n        'title'     => 'Editar Marcador :name',\n    ],\n    'fields'        => [\n        'bg_colour'     => 'Cor do Background',\n        'circle_radius' => 'Raio do círculo',\n        'copy_elements' => 'Copiar elementos',\n        'custom_icon'   => 'Ícone personalizado',\n        'custom_shape'  => 'Forma personalizada',\n        'font_colour'   => 'Cor do Ícone',\n        'group'         => 'Grupo de Marcador',\n        'icon'          => 'Ícone',\n        'is_draggable'  => 'Arrastável',\n        'latitude'      => 'Latitude',\n        'longitude'     => 'Longitude',\n        'opacity'       => 'Opacidade',\n        'pin_size'      => 'Tamanho do Pino',\n        'polygon_style' => [\n            'stroke'            => 'Cor do traço',\n            'stroke-opacity'    => 'Opacidade do traço',\n            'stroke-width'      => 'Largura do traço',\n        ],\n        'popupless'     => 'Popup de dica de contexto',\n        'size'          => 'Tamanho',\n    ],\n    'helpers'       => [\n        'base'                      => 'Adicione marcadores no mapa clicando em qulquer lugar.',\n        'copy_elements'             => 'Copiar grupos, camadas e marcadores.',\n        'copy_elements_to_campaign' => 'Copie grupos, camadas e marcadores dos mapas. Os marcadores vinculados a uma entidade serão convertidos em um marcador padrão.',\n        'css'                       => 'Defina uma classe CSS personalizada adicionada ao marcador.',\n        'custom_icon_v2'            => 'Use ícones de :fontawesome, :rpgawesome ou um ícone SVG personalizado. Descubra como em :docs.',\n        'custom_radius'             => 'Selecione a opção de tamanho personalizado no menu suspenso para definir um tamanho.',\n        'draggable'                 => 'Ative para permitir mover um marcador no modo de exploração.',\n        'is_popupless'              => 'Desative a dica de contexto do marcador que aparece ao passar o mouse.',\n        'label'                     => 'Um rótulo é exibido como um bloco de texto no mapa. O conteúdo será o nome do marcador ou o nome da entidade.',\n        'polygon'                   => [\n            'edit'  => 'Clique no mapa para adicionar essa posição às coordenadas do polígono.',\n        ],\n    ],\n    'hints'         => [\n        'entry' => 'Edite o marcador para escrever uma introdução personalizada para ele.',\n    ],\n    'icons'         => [\n        'custom'        => 'Ícone personalizado',\n        'entity'        => 'Imagem da entidade',\n        'exclamation'   => 'Ícone de exclamação',\n        'marker'        => 'Ícone de marcador',\n        'question'      => 'Ícone de interrogação',\n    ],\n    'index'         => [\n        'title' => 'Marcadores de :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Desenhe formas poligonais personalizadas para representar bordas e outras formas irregulares.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'Tente :example1 ou :example2',\n        'custom_shape'  => '100,100 200,240 340,110',\n        'name'          => 'Obrigatório se nenhuma entidade estiver selecionada',\n    ],\n    'presets'       => [\n        'helper'    => 'Clique sobre uma predefinição para carregá-la ou crie uma nova.',\n    ],\n    'shapes'        => [\n        '0' => 'Círculo',\n        '1' => 'Quadrado',\n        '2' => 'Triângulo',\n        '3' => 'Personalizado',\n    ],\n    'sizes'         => [\n        '0' => 'Minúsculo',\n        '1' => 'Padrão',\n        '2' => 'Pequeno',\n        '3' => 'Grande',\n        '4' => 'Enorme',\n    ],\n    'tabs'          => [\n        'circle'    => 'Círculo',\n        'label'     => 'Letreiro',\n        'marker'    => 'Marcador',\n        'polygon'   => 'Polígono',\n        'preset'    => 'Predefinir',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Voltar para :name',\n        'edit'      => 'Editar mapa',\n        'explore'   => 'Explorar',\n    ],\n    'create'        => [\n        'title' => 'Novo Mapa',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'Ocorreu um erro ao fragmentar o mapa. Entre em contato com a equipe em :discord para obter suporte.',\n            'running'   => [\n                'edit'      => 'O mapa não pode ser editado enquanto estiver sendo fragmentado.',\n                'explore'   => 'O mapa não pode ser exibido enquanto estiver sendo fragmentado.',\n                'time'      => 'Isso pode levar de vários minutos a várias horas, dependendo do tamanho do mapa.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'Este mapa precisa de uma imagem para poder aparecer no dashboard.',\n        ],\n        'explore'   => [\n            'missing'   => 'Por favor adicione uma imagem ao mapa para poder explorá-lo',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Marcador',\n        'center_x'          => 'Posição de Longitude Padrão',\n        'center_y'          => 'Posição de Latitude Padrão',\n        'centering'         => 'Centralização',\n        'distance_measure'  => 'Medição de distância',\n        'distance_name'     => 'Rótulo da unidade de distância',\n        'grid'              => 'Grid',\n        'has_clustering'    => 'Agrupar marcadores',\n        'initial_zoom'      => 'Zoom inicial',\n        'is_real'           => 'Usar OpenStreetMaps',\n        'max_zoom'          => 'Zoom máximo',\n        'min_zoom'          => 'Zoom mínimo',\n        'tabs'              => [\n            'coordinates'   => 'Coordenadas',\n            'marker'        => 'Marcador',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'A alteração dos valores a seguir controlará em qual área do mapa o foco será centralizado. Deixar esses valores vazios resultará no foco sendo o centro do mapa.',\n        'centering'             => 'Centralizar em um marcador terá prioridade sobre as coordenadas padrão.',\n        'chunked_zoom'          => 'Agrupe automaticamente os marcadores quando estiverem próximos uns dos outros.',\n        'distance_measure'      => 'Dar ao mapa uma medida de distância habilitará a ferramenta de medição no modo de exploração.',\n        'distance_measure_2'    => 'Para que 100 pixels meçam 1 quilômetro, insira um valor de 0,0041.',\n        'grid'                  => 'Defina o tamanho do grid que será mostrado no modo exploração.',\n        'has_clustering'        => 'Agrupe automaticamente os marcadores quando estiverem próximos uns dos outros.',\n        'initial_zoom'          => 'O nível de zoom inicial com o qual um mapa é carregado. O valor padrão é :default, enquanto o maior valor permitido é :max e o menor valor permitido é :min.',\n        'is_real'               => 'Selecione esta opção se quiser usar um mapa do mundo real em vez da imagem carregada. Esta opção desativa as camadas.',\n        'max_zoom'              => 'O máximo que um mapa pode ser ampliado o zoom. O valor padrão é :default, enquanto o maior valor permitido é :max.',\n        'min_zoom'              => 'O máximo que um mapa pode ser diminuído o zoom. O valor padrão é :default, enquanto o menor valor permitido é :max.',\n        'missing_image'         => 'Você precisa salvar o mapa com uma imagem antes de poder adicionar camadas e marcadores.',\n    ],\n    'index'         => [],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Grupos',\n        'layers'    => 'Camadas',\n        'legend'    => 'Legenda',\n        'markers'   => 'Marcadores',\n        'settings'  => 'Configurações',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Deixe vazio para carregar o mapa centralizado',\n        'center_x'      => 'Deixe vazio para carregar o mapa centralizado',\n        'center_y'      => 'Deixe vazio para carregar o mapa centralizado',\n        'distance_name' => 'Km, milhas, pés, hambúrgueres',\n        'grid'          => 'Distância em pixels entre os elementos da grid. Deixe vazio para esconder a grid.',\n        'name'          => 'Nome do mapa',\n        'type'          => 'Masmorra, Cidade, Galáxia',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Mapas',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'Mapa está sendo fragmentado. Esse processo pode levar vários minutos ou horas.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'member'    => 'Torne-se um membro.',\n        'remove_v5' => 'O Kanka foi criado por nós dois. Apoie nossa jornada e desfrute de uma experiência sem anúncios por menos do que o preço de um café especial.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova Nota',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'Sub-Notas',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Armazene ideias, referências, regras ou informações que não se encaixam em nenhum outro lugar.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Escolha uma nota primária',\n        'type'  => 'Religião, Raça, Sistema Político',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/notifications.php",
    "content": "<?php\n\nreturn [\n    'apps'              => [\n        'discord'   => [\n            'invalid'   => 'Seu token do Discord expirou. Por favor, sincronize novamente suas contas do Discord e do Kanka.',\n        ],\n    ],\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'Sua inscrição para a campanha :campaign foi aprovada.',\n            'approved_message'      => 'Sua inscrição para a campanha :campaign foi aprovada. Mensagem fornecida: :reason',\n            'new'                   => 'Nova solicitação para :campaign.',\n            'rejected'              => 'Sua solicitação para a campanha :campaign foi rejeitada. Razão fornecida: :reason',\n            'rejected_no_message'   => 'Sua inscrição para a campanha :campaign foi rejeitada.',\n        ],\n        'asset_export'      => 'Uma exportação de recursos da campanha está disponível. O link está disponível por :time minutos.',\n        'boost'             => [\n            'add'           => 'A campanha :campaign está sendo impulsionada por :user',\n            'remove'        => ':user não está mais impulsionando a campanha :campaign',\n            'superboost'    => 'A campanha :campaign está sendo super-impulsionada por :user',\n        ],\n        'created'           => 'Você criou :campaign.',\n        'deleted'           => 'A campanha :campaign foi excluída.',\n        'export'            => 'A exportação da campanha está disponível. O link estará disponível por :time minutos.',\n        'export_error'      => 'Ocorreu um erro enquanto sua campanha era exportada. Por favor, contate-nos se o problema persistir,',\n        'hidden'            => 'A campanha :campaign agora está oculta na página de campanhas públicas.',\n        'import'            => [\n            'failed'    => 'A importação da campanha :campaign falhou.',\n            'success'   => 'A campanha :campaign foi importada.',\n        ],\n        'join'              => ':user se juntou à campanha :campaign',\n        'leave'             => ':user saiu da campanha :campaign',\n        'new_owner'         => 'Você foi nomeado administrador de :campaign.',\n        'plugin'            => [\n            'deleted'   => 'O plugin :plugin foi deletado do mercado e removido de sua campanha :campaign.',\n        ],\n        'premium'           => [\n            'add'       => 'Os recursos premium foram desbloqueados para a campanha :campaign pelo :user.',\n            'remove'    => ':user não está mais desbloqueando recursos premium para a campanha :campaign.',\n        ],\n        'removed-image'     => 'A imagem ou cabeçalho de :entity foi removido devido a uma reivindicação de direitos autorais.',\n        'role'              => [\n            'add'       => 'Você ganhou o cargo de :role na campanha :campaign',\n            'remove'    => 'Você foi removido do cargo :role na campanha :campaign.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => 'O membro da equipe Kanka :user juntou-se a campanha :campaign.',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Limpar tudo',\n        'success'   => 'Notificações removidas.',\n        'title'     => 'Limpar notificações',\n    ],\n    'features'          => [\n        'approved'  => 'Sua ideia :feature foi aprovada',\n        'finished'  => 'Sua ideia :feature agora está disponível em Kanka!',\n        'rejected'  => 'Sua ideia :feature foi rejeita, motivo :reason',\n    ],\n    'header'            => 'Você tem :count notificações.',\n    'index'             => [\n        'title' => 'Notificações',\n    ],\n    'map'               => [\n        'chunked'   => 'Mapa :name terminou de fragmentar e agora está pronto para uso.',\n    ],\n    'no_notifications'  => 'As notificações aparecerão aqui assim que você tiver algumas.',\n    'plugins'           => [\n        'comments'  => [\n            'new_comment'   => ':user deixou um novo comentário no plugin :plugin.',\n            'new_reply'     => ':user respondeu ao seu comentário em :plugin.',\n        ],\n    ],\n    'subscriptions'     => [\n        'charge_fail'   => 'Ocorreu um erro ao tentar processar seu pagamento. Por favor, aguarde alguns momentos enquanto tentamos novamente. Se nada mudar, por favor entre em contato conosco.',\n        'deleted'       => 'Sua assinatura do Kanka foi cancelada após muitas tentativas malsucedidas de cobrar seu cartão. Por favor, vá até suas configurações de Assinatura e tente atualizar os detalhes de sua forma de pagamento.',\n        'ended'         => 'Sua assinatura do Kanka foi encerrada. Seus cargos do Discord e impulsionamentos de campanha foram removidos. Esperamos ver você novamente!',\n        'failed'        => 'Não foi possível processar seus detalhes de pagamento. Por favor, atualize-os em suas configurações de Métodos de Pagamento.',\n        'started'       => 'Sua assinatura do kanka foi iniciada.',\n    ],\n    'unread'            => 'Nova notificação',\n];\n"
  },
  {
    "path": "lang/pt-BR/onboarding/characters.php",
    "content": "<?php\n\nreturn [\n    'finisher'  => 'Isso é o suficiente para começar.',\n    'text'      => 'Concentre-se no básico: nome, uma breve descrição e uma ou duas características marcantes. Você pode adicionar detalhes como relações, propriedades e retratos posteriormente.',\n    'title'     => 'Crie seu primeiro personagem',\n];\n"
  },
  {
    "path": "lang/pt-BR/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova Organização',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_defunct'    => 'Extinta',\n        'members'       => 'Membros',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_defunct'    => 'Esta organização está extinta.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Crie guildas, facções ou sociedades secretas para moldar a estrutura de poder do seu mundo.',\n    ],\n    'members'       => [\n        'actions'       => [\n            'add_multiple'  => 'Adicionar membros',\n        ],\n        'create'        => [\n            'helper'            => 'Adicionar um ou vários membros à :name.',\n            'success_multiple'  => '{1} Adicionado :count membro a :name.|[2,*] Adicionados :count membros a :name.',\n        ],\n        'destroy'       => [\n            'success'   => 'Membro removido da organização.',\n        ],\n        'edit'          => [\n            'helper'    => 'Alterar o status de afiliação para :name.',\n            'title'     => 'Atualizar Membro para :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Superior',\n            'pinned'    => 'Fixado',\n            'role'      => 'Função',\n            'status'    => 'Status de Afiliação',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Todos personagens que são membros desta organização e suas sub-organizações.',\n            'members'       => 'Todos personagens que são membros desta organização.',\n            'pinned'        => 'Escolha se este membro deve ser exibido na seção fixada da visão geral de suas entidades associadas.',\n        ],\n        'pinned'        => [\n            'both'  => 'Fixado em ambos',\n            'none'  => 'Fixado em nenhum lugar',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Quem é o superior desse membro',\n            'role'      => 'Líder, Membro, Alto Septão, Mestre em Espionagem',\n        ],\n        'status'        => [\n            'active'    => 'Membro ativo',\n            'inactive'  => 'Membro inativo',\n            'unknown'   => 'Status desconhecido',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'Culto, Gangue, Rebelião, Fanáticos',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Houveram alguns problemas com a sua entrada.',\n        'title'         => 'Ooops!',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/permissions.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'delete'    => 'Permissão para excluir este elemento',\n        'edit'      => 'Permissão para editar este elemento',\n        'view'      => 'Permissão para visualizar este elemento',\n    ],\n    'members'   => [\n        'inherited' => ':member já pode fazer isso sendo parte do cargo :role.',\n    ],\n    'roles'     => [\n        'inherited' => 'O cargo :role já pode fazer isso em todo o módulo :module.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/pins.php",
    "content": "<?php\n\nreturn [\n    'learn-more'    => 'Aprenda mais sobre fixados em nossa documentação.',\n    'options'       => [\n        'no'    => 'Desafixado',\n        'yes'   => 'Fixado na página de visão geral da entidade',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/playstyles.php",
    "content": "<?php\n\nreturn [\n    'casual-drop-in-friendly'       => 'Casual / Fácil de Entrar',\n    'character-focused'             => 'Focado nos personagens',\n    'combat-focused'                => 'Focado em combate',\n    'episodic-one-shot-friendly'    => 'Episódico / Ideal para One Shot',\n    'exploration-focused'           => 'Focado em exploração',\n    'linear-gm-led'                 => 'Linear / Guiado pelo mestre',\n    'long-term-campaign'            => 'Campanha de longo prazo',\n    'narrative-first'               => 'Narrativa em primeiro lugar',\n    'story-driven'                  => 'Guiado pela história',\n    'tactical-crunchy'              => 'Tático / Complexo',\n];\n"
  },
  {
    "path": "lang/pt-BR/post_layouts.php",
    "content": "<?php\n\nreturn [\n    'character_orgs'        => 'Organizações do personagem',\n    'connection_map'        => 'Mapa de conexão',\n    'helper'                => 'Este post está configurado para exibir a subpágina :subpage da entidade.',\n    'location_characters'   => 'Local dos personagens',\n    'location_events'       => 'Local dos eventos',\n    'location_quests'       => 'Local das missões',\n    'quest_elements'        => 'Elementos da Missão',\n];\n"
  },
  {
    "path": "lang/pt-BR/posts/templates.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'set'   => 'Definir como um modelo reutilizável',\n        'unset' => 'Remover como modelo reutilizável',\n    ],\n    'helper'    => 'Os artigos a seguir foram definidos como modelos que podem ser reutilizados.',\n    'tab'       => 'Carregar a partir de modelos',\n    'tooltips'  => [\n        'click-to-edit' => 'Editar este artigo modelo',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Novo Artigo',\n    ],\n    'fields'        => [\n        'description'   => 'Descrição',\n        'layout'        => 'Layout do artigo',\n        'name'          => 'Nome do artigo',\n    ],\n    'helpers'       => [\n        'new'           => 'Adicione um novo artigo a essa entidade.',\n        'visibility'    => 'Altere a visibilidade do artigo :name.',\n    ],\n    'move'          => [\n        'copy'      => [\n            'helper'    => 'Mantenha uma cópia do artigo em :name.',\n        ],\n        'helper'    => 'Mova ou copie o artigo :name para uma entidade diferente.',\n        'title'     => 'Mover artigo',\n    ],\n    'permissions'   => [\n        'actions'   => [\n            'members'   => 'Adicionar membros',\n            'roles'     => 'Adicionar funções',\n        ],\n        'helpers'   => [\n            'members'   => 'Adicione um ou vários membros para ter permissões especiais neste artigo.',\n            'roles'     => 'Adicione uma ou várias funções para ter permissões especiais neste artigo.',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome do artigo',\n    ],\n    'position'      => [\n        'dont_change'   => 'Não mude',\n        'first'         => 'Primeiro',\n        'last'          => 'Último',\n    ],\n    'remove'        => [\n        'title' => 'Excluir artigo',\n    ],\n    'visibility'    => [\n        'helper'    => 'Alterar a visibilidade para o artigo :name',\n        'title'     => 'Visibilidade do artigo',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Criar uma nova predefinição',\n    ],\n    'create'        => [\n        'success'   => 'Predefinição :name criada.',\n        'title'     => 'Nova predefinição',\n    ],\n    'destroy'       => [\n        'success'   => 'Predefinição :name destruída.',\n    ],\n    'edit'          => [\n        'success'   => 'Predefinição :name modifcada.',\n        'title'     => 'Editar predefinição :name',\n    ],\n    'fields'        => [\n        'name'  => 'Predefinir o nome',\n    ],\n    'lists'         => [\n        'empty' => 'Atualmente não tem predefinições disponíveis na campanha.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Nome da predefinição',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/profiles.php",
    "content": "<?php\n\nreturn [\n    'appearance'                    => [],\n    'avatar'                        => [\n        'success'   => 'Avatar atualizado.',\n    ],\n    'campaign_switcher_order_by'    => [],\n    'edit'                          => [\n        'success'   => 'Perfil atualizado.',\n    ],\n    'editors'                       => [],\n    'fields'                        => [\n        'avatar'                    => 'Avatar',\n        'bio'                       => 'Biografia',\n        'email'                     => 'Email',\n        'hide_subscription'         => 'Esconder meu nome do :hall_of_fame.',\n        'last_login_share'          => 'Mostrar a outros membros da campanha a última vez que estive online.',\n        'link'                      => 'Link social',\n        'login_sharing'             => 'Último login compartilhado',\n        'name'                      => 'Nome',\n        'new_password'              => 'Nova Senha',\n        'new_password_confirmation' => 'Confirmação da Nova Senha',\n        'newsletter'                => 'Eu desejo ser contatado via email esporadicamente.',\n        'password'                  => 'Senha atual',\n        'profile-name'              => 'Nome do perfil',\n        'pronouns'                  => 'Pronomes',\n        'settings'                  => 'Configurações',\n        'subscription_hiding'       => 'Ocultação de assinatura',\n        'theme'                     => 'Tema',\n    ],\n    'helpers'                       => [\n        'link'          => 'Altere a forma como um link para o seu perfil social aparece no seu :perfil e no :marketplace. Se deixado em branco, nenhum link será exibido.',\n        'profile-name'  => 'Altere a forma como o seu nome aparece no seu :profile e no :marketplace. Se deixado em branco, o nome da sua conta será usado.',\n        'pronouns'      => 'Altere a forma como seus pronomes aparecem no seu :profile e no :marketplace. Se deixado em branco, nenhum pronome será exibido.',\n    ],\n    'link'                          => [\n        'button'    => 'perfil social de :name',\n    ],\n    'newsletter'                    => [\n        'helpers'   => [\n            'header'    => 'Assine os seguintes boletins informativos por e-mail para ser notificado sobre o que está acontecendo com Kanka.',\n        ],\n        'options'   => [\n            'monthly'   => 'Newsletter do Kanka',\n        ],\n        'title'     => 'Boletim de Notícias',\n        'updated'   => 'Preferências do boletim de notícias atualizadas.',\n    ],\n    'password'                      => [\n        'success'   => 'Senha atualizada',\n    ],\n    'placeholders'                  => [\n        'bio'                       => 'Uma pequena biografia sua exibida em seu perfil público.',\n        'email'                     => 'Seu endereço de email',\n        'name'                      => 'Seu nome como exibido',\n        'new_password'              => 'Sua nova senha',\n        'new_password_confirmation' => 'Confirme sua nova senha',\n        'password'                  => 'Forneça sua senha atual para qualquer mudança',\n    ],\n    'sections'                      => [\n        'dangerzone'    => 'Zona de Perigo',\n        'delete'        => [\n            'confirm'       => 'Excluir minha conta agora',\n            'delete'        => 'Excluir minha conta',\n            'goodbye'       => 'Em caso afirmativo, escreva :code na caixa abaixo.',\n            'helper'        => 'Deletar sua conta também deletará quaisquer campanhas que você é o único membro dela. Essa ação é permanente e não pode ser desfeita.',\n            'subscribed'    => 'Cancele sua :subscription antes de poder excluir sua conta.',\n            'title'         => 'Remover sua conta',\n            'warning'       => 'Ao remover sua conta todos os seus dados serão perdidos. Você tem certeza?',\n        ],\n        'password'      => [\n            'title' => 'Alterar sua senha',\n        ],\n    ],\n    'settings'                      => [\n        'helpers'   => [\n            'bio'       => 'A biografia está visível no seu :link.',\n            'profile'   => 'perfil público',\n        ],\n        'success'   => 'Configurações alteradas.',\n    ],\n    'theme'                         => [\n        'success'   => 'Tema alterado.',\n        'themes'    => [\n            'dark'      => 'Escuro',\n            'default'   => 'Padrão',\n            'future'    => 'Futurista',\n            'midnight'  => 'Azul Meia-Noite',\n        ],\n    ],\n    'title'                         => 'Atualizar seu perfil',\n    'workflows'                     => [\n        'created'   => 'Visualizar a entidade recém-criada',\n        'default'   => 'Visualizar a lista de entidades',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nova Missão',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'elements'      => [\n        'create'        => [\n            'success'   => 'Elemento :entity adicionado à missão.',\n            'title'     => 'Novo elemento para :name',\n        ],\n        'destroy'       => [\n            'success'   => 'Elemento :entity removido.',\n        ],\n        'edit'          => [\n            'success'   => 'Elemento :entity atualizado.',\n            'title'     => 'Atualizar elemento para :name',\n        ],\n        'fields'        => [\n            'copy_entity_entry' => 'Usar a descrição da entidade',\n            'entity_or_name'    => 'Selecione uma entidade da campanha ou dê um nome para este elemento.',\n        ],\n        'helpers'       => [\n            'copy_entity_entry' => 'Exibir a descrição da entidade vinculada em vez da descrição personalizada.',\n        ],\n        'placeholders'  => [\n            'name'  => 'Nome do elemento',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Copiar elementos anexados à missão',\n        'date'          => 'Data',\n        'element_role'  => 'Função',\n        'instigator'    => 'Instigador',\n        'is_completed'  => 'Concluída',\n        'location'      => 'Local inicial',\n        'role'          => 'Função',\n        'status'        => 'Status',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'A missão é considerada concluída.',\n        'status'        => 'O status atual da missão.',\n    ],\n    'hints'         => [\n        'is_abandoned'  => 'Esta missão foi abandonada.',\n        'is_completed'  => 'Esta missão está concluída.',\n        'is_ongoing'    => 'Essa missão está em andamento.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Crie missões para registrar objetivos, enredos ou motivações de personagens.',\n    ],\n    'placeholders'  => [\n        'date'      => 'Data do mundo real para a missão',\n        'entity'    => 'Nome de um elemento da missão',\n        'location'  => 'O local de início da missão',\n        'role'      => 'A função desta entidade na missão',\n        'type'      => 'Arco de Personagem, Missão Secundária, Missão Principal',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Adicionar um elemento',\n        ],\n        'tabs'      => [\n            'elements'  => 'Elementos',\n        ],\n    ],\n    'status'        => [\n        'abandoned'     => 'Abandonada',\n        'completed'     => 'Concluída',\n        'not_started'   => 'Não Iniciada',\n        'ongoing'       => 'Em Andamento',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nova Raça',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'members'   => 'Membros',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Essa raça está extinta.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Defina as espécies, culturas ou povos que habitam o seu mundo.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Adicionar um ou vários personagens à :name',\n            'submit'    => 'Adicionar membros',\n            'success'   => '{0} Nenhum membro foi adicionado.|{1} 1 membro foi adicionado.|[2,*] :count membros foram adicionados.',\n            'title'     => 'Novos Membros',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Humano, Fada, Ciborgue',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Sua sessão expirou. Por favor tente novamente',\n    'unknown_entity'    => 'Desculpa, nós não sabemos o que uma \\':entity\\' é.',\n];\n"
  },
  {
    "path": "lang/pt-BR/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Evento',\n        'livestream'    => 'Transmissão ao vivo',\n        'other'         => 'Outro',\n        'release'       => 'Atualização',\n        'vote'          => 'Voto da Comunidade',\n    ],\n    'index'         => [\n        'description'   => 'As ultimas atualizações do kanka.io',\n        'title'         => 'Atualizações',\n    ],\n    'post'          => [\n        'footer'    => 'Por :name em :date',\n    ],\n    'show'          => [\n        'return'    => 'Voltar para atualizações',\n        'title'     => 'Atualização :name',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chronicles of Darkness',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/search/fulltext.php",
    "content": "<?php\n\nreturn [\n    'searching' => 'Pesquisando entidades, posts, atributos e muito mais pelo termo :term.',\n    'title'     => 'Pesquisa de texto completo',\n];\n"
  },
  {
    "path": "lang/pt-BR/search.php",
    "content": "<?php\n\nreturn [\n    'fulltext'      => 'Pesquise em todos os lugares',\n    'lookup'        => [\n        'empty'     => 'Nenhum resultado',\n        'hint'      => 'Digite pelo menos 3 letras para pesquisar entidades na campanha.',\n        'keyboard'  => 'pressione :k para pesquisar, :esc para descartar',\n        'lists'     => 'Listas',\n        'recents'   => 'Recentes',\n        'results'   => 'Resultados',\n    ],\n    'no_results'    => 'Nenhum resultado.',\n    'placeholder'   => 'BUSCAR',\n    'placeholders'  => [\n        'entry' => 'Procure uma entrada',\n    ],\n    'preview'       => [\n        'links'             => 'Vínculos',\n        'no-connections'    => 'Nenhuma relação fixada para exibir',\n    ],\n    'title'         => 'Buscar',\n];\n"
  },
  {
    "path": "lang/pt-BR/seo.php",
    "content": "<?php\n\nreturn [\n    'dashboard'     => 'Dashboard de :campaign',\n    'entity-list'   => 'Explore o :module de :campaign',\n];\n"
  },
  {
    "path": "lang/pt-BR/settings/account.php",
    "content": "<?php\n\nreturn [\n    'subtitle'  => 'Controle seu e-mail, senha, segurança e outras configurações da conta.',\n    'title'     => 'Informações da conta',\n];\n"
  },
  {
    "path": "lang/pt-BR/settings/appearance.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'learn-more'    => 'Saiba mais sobre essa configuração em nossa documentação.',\n        'save'          => 'Salvar configurações',\n    ],\n    'campaign-switcher' => [\n        'alphabetical'      => 'Alfabeticamente (A-Z)',\n        'date_created'      => 'Data de criação (mais antigo primeiro)',\n        'date_joined'       => 'Data de ingresso (mais antigo primeiro)',\n        'r_alphabetical'    => 'Alfabeticamente (Z-A)',\n        'r_date_created'    => 'Data de criação (mais novo primeiro)',\n        'r_date_joined'     => 'Data de ingresso (mais novo primeiro)',\n    ],\n    'dismissible'       => [\n        'main'  => 'Controle a aparência e o comportamento de Kanka. Observe que as campanhas podem substituir algumas dessas configurações.',\n    ],\n    'editors'           => [\n        'default'   => 'Padrão (:name)',\n        'helpers'   => [\n            'feedback'  => 'Ajude-nos a melhorar, enviando seu feedback (2 min)',\n            'legacy'    => 'O editor de texto antigo (TinyMCE) não oferece suporte a menções em dispositivos móveis, galerias de campanhas ou outros recursos avançados.',\n            'tiptap'    => 'Este é o nosso novo editor de texto experimental, que está sendo ativamente desenvolvido e atualizado regularmente. Ele ainda não contém todos os recursos aos quais você pode estar acostumado.',\n        ],\n        'legacy'    => 'Herdado (:name)',\n        'tiptap'    => 'Experimental 2026',\n    ],\n    'explore'           => [\n        'grid'  => 'Grade (padrão)',\n        'table' => 'Tabela',\n    ],\n    'fields'            => [\n        'campaign-order'        => 'Ordem da lista de campanhas',\n        'date-format'           => 'Formatação de data',\n        'editor'                => 'Editor de texto',\n        'entity-explore'        => 'Listas de entidade',\n        'mentions'              => 'Menções ao editar',\n        'new-entity-workflow'   => 'Novo fluxo de trabalho de entidade',\n        'pagination'            => 'Resultados por página',\n        'theme'                 => 'Preferência de tema',\n    ],\n    'helpers'           => [\n        'advanced-mentions'     => 'Ao editar textos, controle se as menções são renderizadas como o nome da entidade ou como menção avançada.',\n        'campaign-order'        => 'Altere a ordem em que as campanhas são listadas no alternador de campanha.',\n        'date-format'           => 'Quando disponível, controle o formato no qual exibir as datas do mundo real.',\n        'editors'               => 'Alterne entre editores de texto ao criar ou editar campos de texto grandes.',\n        'entity-explore'        => 'Controle a maneira como as listas de entidades são exibidas nas campanhas.',\n        'new-entity-workflow'   => 'Controle para qual interface você será levado depois de criar uma nova entidade.',\n        'overridable'           => 'Campanhas individuais podem substituir essa preferência.',\n        'pagination'            => 'Para listas que abrangem várias páginas, defina quantas são visíveis em cada página.',\n        'theme'                 => 'Escolha como Kanka parece para você.',\n    ],\n    'mentions'          => [\n        'advanced'  => 'Exibir menções avançadas :code',\n        'default'   => 'Menções como o nome da entidade',\n    ],\n    'nested'            => [],\n    'success'           => 'Opções de aparência salvas.',\n    'values'            => [\n        'pagination'        => ':amount resultados por página',\n        'pagination-sub'    => ':amount (disponível para assinantes)',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'boost_name'    => 'Impulsionar :name',\n    ],\n    'available' => 'Impulsões disponíveis :amount/:total',\n    'benefits'  => [\n        'boosted'       => 'Impulsionar uma campanha com :one impulso desbloqueará o acesso ao :marketplace, opções de temas, uploads maiores para todos os membros, recuperação de entidades excluídas e :more.',\n        'more'          => 'mais recursos incríveis',\n        'superboosted'  => 'Superimpulsionar uma campanha com :amount impulsos desbloqueará todos os benefícios de uma campanha impulsionada, bem como uma galeria de campanha, alterações completas de logs que são feitas para entidades e :more.',\n    ],\n    'boost'     => [\n        'actions'   => [\n            'confirm'   => 'Impulsione-a!',\n            'remove'    => 'Parar de impulsionar :campaign',\n            'subscribe' => 'Inscreva-se no Kanka',\n            'upgrade'   => 'Atualize sua assinatura',\n        ],\n        'confirm'   => 'Que legal! Você está prestes a impulsionar :campaign. Isso atribuirá um (:custo) de seus impulsos disponíveis de campanha.',\n        'duration'  => 'Impulsos atribuídos permanecem atribuídos até que você os remova manualmente ou quando sua assinatura terminar.',\n        'errors'    => [\n            'boosted'           => 'Oh oh, parece que :campaign já foi impulsionada!',\n            'out-of-boosters'   => 'Oh não! Você não tem impulsos suficientes disponíveis. Você tem :available e precisa de :cost. Pare de impulsionar outras campanhas ou :upgrade.',\n        ],\n        'pitch'     => 'Torne-se um assinante para desbloquear impulsos de campanha.',\n        'success'   => 'A campanha :campaign agora está impulsionada. Aproveite todos os novos recursos incríveis!',\n        'title'     => 'Impulsionar :campaign',\n        'upgrade'   => 'atualize sua assinatura',\n    ],\n    'campaign'  => [\n        'boosted'       => 'Impulsionado por :user desde :time',\n        'premium'       => 'Premium graças a :user desde :time',\n        'standard'      => 'Padrão',\n        'superboosted'  => 'Superimpulsionado por :user desde :time',\n        'unboosted'     => 'Desimpulsionado',\n    ],\n    'intro'     => [\n        'anyone'    => 'Você não está limitado a impulsionar apenas as campanhas que criou. Você pode impulsionar qualquer campanha da qual faça parte ou possa visualizar. Isso inclui campanhas em que você é um jogador ou as :public de que gosta.',\n        'data'      => 'Quando uma campanha não é mais impulsionada, o acesso aos recursos impulsionados é removido. No entanto, nenhum conteúdo é excluído, portanto, impulsionar a campanha novamente no futuro restaura o acesso a isto.',\n        'first'     => 'Os recursos avançados são desbloqueados atribuindo seus impulsos para impulsionar ou superimpulsionar uma campanha. A quantidade de impulsos que você tem é determinada pela sua :subscription. Este número está disponível para você o tempo todo enquanto você for um assinante. Impulsionar uma campanha atribuirá um de seus impulsos a ela, enquanto superimpulsionar uma campanha atribuirá três deles.',\n    ],\n    'pitch'     => [\n        'benefits'      => [\n            'backup'        => 'Recupere uma entidade excluída anteriormente por até :amount dias',\n            'customisable'  => 'Personalização total da aparência de uma campanha',\n            'icons'         => 'Acesso a milhares de belos ícones para mapas e linhas do tempo',\n            'title'         => 'As campanhas impulsionadas obtém',\n            'upload'        => 'Maior tamanho de upload para todos os membros da campanha',\n        ],\n        'description'   => 'Atribua impulsos a campanhas e ajude a desbloquear recursos incríveis para todos os envolvidos. Não está impressionado com as campanhas impulsionadas? Nós o cobrimos com campanhas superimpulsionadas!',\n        'more'          => 'Confira a lista completa de vantagens em nossa página :boosters.',\n        'title'         => 'Leve uma campanha para o próximo nível com personalização e vantagens para todos os seus membros',\n    ],\n    'ready'     => [\n        'available'         => 'Seus impulsos de campanha disponíveis.',\n        'pricing'           => 'Todos os nossos níveis de assinatura incluem pelo menos um impulso de campanha e começa com :amount por mês.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Impulsione uma campanha',\n    ],\n    'superboost'=> [\n        'actions'   => [\n            'confirm'   => 'Superimpulsione-a!',\n            'instead'   => 'Superimpulsione-a por :count!',\n            'remove'    => 'Parar de superimpulsionar :campaign',\n        ],\n        'confirm'   => 'Que legal! Você está prestes a dar uma superimpulsão em :campaign. Isso atribuirá três (:cost) de seus impulsos disponíveis de campanha.',\n        'errors'    => [\n            'boosted'   => 'Oh oh, parece que :campaign já está superimpulsionada!',\n        ],\n        'success'   => 'A campanha :campaign agora está superimpulsionada. Aproveite todos os novos recursos incríveis!',\n        'title'     => 'Superimpulsionar :campaign',\n        'upgrade'   => 'Pronto para uma melhor experiência no Kanka? Superimpulsionar :campaign atribuirá :cost impulsos de campanha adicionais.',\n    ],\n    'title'     => 'Impulsos de Campanha',\n    'unboost'   => [\n        'confirm'   => 'Sim, tenho certeza',\n        'status'    => [\n            'boosting'      => 'impulsionando',\n            'superboosting' => 'superimpulsionando',\n        ],\n        'success'   => 'A campanha :campaign não é mais impulsionada e seus impulsos estão disponíveis novamente.',\n        'title'     => 'Desimpulsionar uma campanha',\n        'warning'   => 'Tem certeza de que deseja interromper :action :campaign? Isso liberará seus impulsos atribuídos e ocultará todo o conteúdo e recursos relacionados às vantagens até que a campanha seja impulsionada novamente.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/settings/premium.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'remove'    => 'Remover premium',\n        'unlock'    => 'Torne-se premium',\n    ],\n    'create'        => [\n        'actions'   => [\n            'confirm'   => 'Torne-se premium!',\n        ],\n        'confirm'   => 'Que legal! Você está prestes a desbloquear recursos premium para :campaign. Isso usará uma de suas campanhas premium disponíveis.',\n        'duration'  => 'As campanhas remium permanecem assim até removê-las manualmente ou quando sua assinatura terminar.',\n        'success'   => 'A campanha :campaign agora é premium. Aproveite todos os novos recursos incríveis!',\n    ],\n    'exceptions'    => [\n        'already'       => 'Os recursos premium já foram desbloqueados para esta campanha.',\n        'out-of-stock'  => 'Você não tem campanhas premium suficientes disponíveis para desbloquear esta campanha. Remova o status premium de outra campanha ou :upgrade.',\n    ],\n    'pitch'         => [\n        'description'   => 'Seja premium em campanhas e ajude a desbloquear recursos incríveis para todos os envolvidos.',\n        'title'         => 'Campanhas premium recebem',\n    ],\n    'ready'         => [\n        'available'         => 'Suas campanhas premium disponíveis.',\n        'pricing'           => 'Todos os nossos níveis de assinatura incluem pelo menos uma campanha premium e iniciam por :amount por mês.',\n        'pricing-amount'    => ':currency:amount',\n        'title'             => 'Torne-se premium',\n    ],\n    'remove'        => [\n        'confirm'   => 'Sim, tenho certeza',\n        'cooldown'  => 'Os recursos premium de :campaign podem ser removidos após :date.',\n        'success'   => 'Os recursos premium foram removidos da campanha :campaign. Agora você pode desbloquear recursos premium em outra campanha.',\n        'title'     => 'Removendo recursos premium',\n        'warning'   => 'Tem certeza de que deseja remover os recursos premium de :campaign? Isso permitirá que você desbloqueie outra campanha e oculte todo o conteúdo e recursos relacionados às vantagens até que o status premium da campanha seja reativado.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'               => [\n                'disable'           => 'Desativar autenticação de dois fatores',\n                'disable-confirm'   => 'Clique novamente para confirmar',\n                'finish'            => 'Conclua a configuração e faça login',\n            ],\n            'activation_helper'     => 'Para concluir a configuração da autenticação de dois fatores da sua conta, siga estas instruções.',\n            'disable'               => [\n                'helper'    => 'Se você deseja desativar a autenticação de dois fatores, clique no botão abaixo. Lembre-se de que isso deixará sua conta vulnerável a qualquer pessoa que conheça suas informações de login.',\n                'title'     => 'Desativar autenticação de dois fatores',\n            ],\n            'enable_instructions'   => 'Para iniciar o processo de ativação, gere seu QR Code de autenticação e, em seguida, digitalize-o no aplicativo Google Authenticator (:ios, :android) ou outro aplicativo autenticador semelhante.',\n            'enabled'               => 'Autenticação de dois-fatores está atualmente ativada em sua conta.',\n            'error_enable'          => 'Código Inválido, tente novamente',\n            'fields'                => [\n                'otp'       => 'Digite a Senha de Uso Único (OTP) fornecida pelo aplicativo autenticador',\n                'qrcode'    => 'Digitalize o seguinte QR Code com seu aplicativo autenticador para gerar uma Senha de Uso Único (OTP)',\n            ],\n            'generate_qr'           => 'Gerar QR code',\n            'helper'                => 'A autenticação de dois fatores (2FA) fortalece a segurança de acesso ao exigir dois métodos (também conhecidos como fatores) para verificar sua identidade em cada login.',\n            'learn_more'            => 'Saiba mais sobre a autenticação de dois fatores.',\n            'social'                => 'A autenticação de dois fatores do Kanka é habilitada apenas para usuários que fazem login usando seu e-mail e senha. Altere seu método de login nas configurações da sua conta antes de habilitar esta opção.',\n            'success_disable'       => 'Autenticação de dois fatores desativada com sucesso.',\n            'success_enable'        => 'Autenticação de dois fatores habilitada com sucesso. Faça login novamente para concluir a configuração.',\n            'success_key'           => 'Seu QR Code de segurança foi gerado com sucesso. Conclua sua configuração para ativar a autenticação de dois fatores.',\n            'title'                 => 'Autenticação de dois fatores',\n        ],\n        'actions'           => [\n            'social'            => 'Trocar para o Login do Kanka',\n            'update_email'      => 'Atualizar e-mail',\n            'update_password'   => 'Atualizar senha',\n        ],\n        'email'             => 'Alterar e-mail',\n        'email_success'     => 'E-mail atualizado.',\n        'password'          => 'Alterar senha',\n        'password_success'  => 'Senha atualizada.',\n        'social'            => [\n            'error'     => 'Você já está usando o login do Kanka para essa conta.',\n            'helper'    => 'Atualmente sua conta está sendo gerenciada pelo :provider. Você pode mudar isto e trocar para o login padrão do Kanka configurando uma senha.',\n            'success'   => 'Sua conta agora usa o login do Kanka.',\n            'title'     => 'Social para Kanka',\n        ],\n        'title'             => 'Conta',\n    ],\n    'api'           => [\n        'helper'    => 'Bem-vindo às APIs do Kanka. Gere um Token de Acesso Pessoal para usar em sua requisição de API para coletar informações sobre as campanhas das quais você faz parte.',\n        'link'      => 'Leia a documentação da API',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Conectar',\n            'remove'    => 'Remover',\n        ],\n        'benefits'  => 'Kanka oferece integração com alguns serviços de terceiros. Mais integrações de terceiros estão planejadas para o futuro.',\n        'discord'   => [\n            'confirm'   => 'Tem certeza de que deseja desconectar sua conta do Discord? Isso removerá todas as funções com as quais você foi sincronizado.',\n            'errors'    => [\n                'add'   => 'Ocorreu um erro ao vincular sua conta do Discord ao Kanka. Por favor, tente novamente. Se isso continuar acontecendo, saiba que o Discord tem um limite de 100 servidores associados ao usar suas APIs.',\n            ],\n            'success'   => [\n                'add'       => 'Sua conta do Discord foi vinculada.',\n                'remove'    => 'Sua conta do Discord foi desvinculada.',\n            ],\n            'text'      => 'Acesse seus cargos de assinatura automaticamente.',\n            'unlock'    => 'Desbloquear cargos do Discord',\n        ],\n        'title'     => 'Integração de App',\n    ],\n    'billing'       => [\n        'placeholder'   => 'Se você precisar de contatos adicionais ou informações fiscais aos seus recibos (endereço comercial, número de IVA, etc.), insira-as abaixo e elas aparecerão em todos os seus recibos.',\n        'save'          => 'Salvar informações de cobrança',\n        'title'         => 'Informações de Cobrança',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'Campanha :name já está sendo impulsionada.',\n            'exhausted_boosts'      => 'Você está sem impulsos para dar. Remova o impulso de uma campanha antes de dar a outra.',\n            'exhausted_superboosts' => 'Você está sem impulsionamentos. Você precisa de 3 impulsos para tornar uma campanha Super Impulsionada.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Áustria',\n        'belgium'       => 'Bélgica',\n        'france'        => 'França',\n        'germany'       => 'Alemanha',\n        'italy'         => 'Itália',\n        'netherlands'   => 'Holanda',\n        'spain'         => 'Espanha',\n    ],\n    'invoices'      => [],\n    'layout'        => [\n        'title' => 'Layout',\n    ],\n    'marketplace'   => [],\n    'menu'          => [\n        'account'               => 'Conta',\n        'api'                   => 'API',\n        'appearance'            => 'Aparência',\n        'apps'                  => 'Apps',\n        'boosters'              => 'Impulsionamentos',\n        'notifications'         => 'Notificações',\n        'other'                 => 'Outros',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Opções de Pagamento',\n        'personal_settings'     => 'Configurações Pessoais',\n        'premium'               => 'Campanhas premium',\n        'profile'               => 'Perfil público',\n        'settings'              => 'Configurações',\n        'subscription'          => 'Assitatura',\n        'subscription_status'   => 'Status da assinatura',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Recurso obsoleto - se você deseja oferecer suporte ao Kanka, faça-o com uma :subscription. A vinculação do Patreon ainda está ativa para nossos clientes que vincularam suas contas antes de termos deixado o Patreon.',\n        'pledge'        => 'Pledge :name',\n        'remove'        => [\n            'button'    => 'Desvincular sua conta Patreon',\n            'success'   => 'Sua conta Patreon foi desvinculada.',\n            'text'      => 'Desvincular sua conta Patreon com Kanka removerá seus bônus, nome no hall da fama, incentivos de campanha e outros recursos vinculados ao apoio a Kanka. Nenhum conteúdo impulsionado será perdido (por exemplo, cabeçalhos de entidade). Ao assinar novamente, você terá acesso a todos os seus dados anteriores, incluindo a capacidade de impulsionar suas campanhas impulsionadas anteriormente.',\n            'title'     => 'Desvincule sua conta Patreon com Kanka',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Atualizar perfil',\n        ],\n        'avatar'    => 'Foto de Perfil',\n        'success'   => 'Perfil atualizado.',\n        'title'     => 'Perfil público',\n    ],\n    'referrals'     => [\n        'title' => 'Referências',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Cancelar assinatura',\n            'subscribe'         => 'Assinar',\n            'update_currency'   => 'Salvar moeda preferida',\n        ],\n        'billing'               => [\n            'helper'    => 'Suas informações de faturamento são processadas e armazenadas com segurança através de :stripe. Este método de pagamento é usado para todas as suas assinaturas.',\n            'saved'     => 'Método de pagamento salvo',\n        ],\n        'cancel'                => [\n            'grace'     => [\n                'text'  => 'Sua assinatura já está definida para terminar em :data, após a qual suas campanhas premium voltarão a ser campanhas padrão e outros benefícios relacionados ao suporte ao Kanka serão desativados.',\n                'title' => 'Período de carência',\n            ],\n            'options'   => [\n                'competitor'        => 'Alterar para um concorrente',\n                'financial'         => 'A assinatura é muito cara',\n                'missing_features'  => 'Falta de recursos',\n                'not_for'           => 'Assinatura não é para mim',\n                'not_playing'       => 'Não está mais jogando ou fazendo campanha em hiato',\n                'not_using'         => 'Não estou usando o Kanka no momento',\n                'other'             => 'Outro',\n                'testing'           => 'Apenas testando Kanka',\n            ],\n            'text'      => 'Lamento ver você ir! Cancelar sua assinatura a manterá ativa até :date, após a qual você perderá seus impulsos de campanha e outros benefícios relacionados ao apoio a Kanka. Sinta-se à vontade para preencher o seguinte formulário para nos informar o que podemos fazer melhor ou o que levou à sua decisão.',\n            'title'     => 'Cancelando a assinatura',\n        ],\n        'cancelled'             => 'Sua assinatura foi cancelada. Você pode renovar uma assinatura assim que sua assinatura atual terminar depois de :date.',\n        'change'                => [\n            'text'  => [\n                'downgrade_monthly' => 'Você está fazendo um downgrade para o nível :tier pelo valor de :downgrade, e a partir daí será cobrado mensalmente pelo valor de :amount.',\n                'downgrade_yearly'  => 'Você está fazendo um downgrade para o nível :tier pelo valor de :downgrade, e a partir daí será cobrado anualmente pelo valor de :amount.',\n                'monthly'           => 'Você está se inscrevendo no nível :tier, cobrado mensalmente em :amount.',\n                'upgrade_monthly'   => 'Você está atualizando para o nível :tier para :upgrade e, posteriormente, será cobrado mensalmente por :amount.',\n                'upgrade_paypal'    => 'Você está atualizando para o nível :tier para :upgrade até :date.',\n                'upgrade_yearly'    => 'Você está atualizando para o nível :tier para :upgrade, sendo posteriormente cobrado anualmente por :amount.',\n                'yearly'            => 'Você está se inscrevendo no nível :tier, cobrado anualmente em :amount.',\n            ],\n            'title' => 'Alterar Nível de Assinatura',\n        ],\n        'coupon'                => [\n            'check'         => 'Verifique o código promocional',\n            'invalid'       => 'Código promocional inválido.',\n            'label'         => 'Código promocional',\n            'percent_off'   => 'Iremos descontar sua primeira assinatura anual em :percent%!',\n        ],\n        'currencies'            => [\n            'brl'   => 'BRL',\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Altere sua moeda de cobrança preferida',\n        ],\n        'errors'                => [\n            'callback'      => 'Nosso provedor de pagamento relatou um erro. Tente novamente ou entre em contato conosco se o problema persistir.',\n            'failed'        => 'No momento, estamos enfrentando problemas com nosso sistema de cobrança. Entre em contato conosco em :email para obter assistência.',\n            'subscribed'    => 'Não foi possível processar sua assinatura. Stripe forneceu a seguinte sugestão.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Ativa desde',\n            'active_until'      => 'Ativa até',\n            'billing'           => 'Cobrança',\n            'currency'          => 'Moeda de Cobrança',\n            'payment_method'    => 'Método de pagamento',\n            'plan'              => 'Plano atual',\n            'reason'            => 'Razão',\n            'reset'             => 'Redefinir informações de cobrança',\n            'reset_billing'     => 'Entendo que alterar a moeda fará com que eu perca meu histórico de cobrança e precise inserir novamente meu método de pagamento.',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Pague sua assinatura usando :method. Este método de pagamento não será renovado automaticamente no final da sua assinatura. :method disponível apenas em Euros.',\n            'alternatives-2'        => 'Pague sua assinatura usando :method. Este é um pagamento único que não é renovado automaticamente no final da assinatura.',\n            'alternatives_warning'  => 'Não é possível atualizar sua assinatura ao usar este método. Faça uma nova assinatura quando a atual terminar.',\n            'alternatives_yearly'   => 'Devido às restrições em torno dos pagamentos recorrentes, :method está disponível apenas para assinaturas anuais',\n            'currency_block'        => 'Não é possível alterar a moeda enquanto você tiver uma assinatura Kanka ativa; você poderá alterar sua moeda quando sua assinatura atual terminar.',\n            'currency_reset'        => 'Alterar a moeda de sua escolha excluirá seu histórico de cobrança e exigirá que você insira novamente um método de pagamento.',\n            'paypal_v3'             => 'Pague com segurança pela sua assinatura anual usando o PayPal.',\n            'stripe'                => 'Suas informações de cobrança são processadas e armazenadas com segurança por meio de :stripe.',\n        ],\n        'manage_subscription'   => 'Gerenciar assinatura',\n        'payment_method'        => [\n            'actions'       => [\n                'add'               => 'Adicionar',\n                'add_new'           => 'Adicionar um novo método de pagamento',\n                'change'            => 'Alterar método de pagamento',\n                'save'              => 'Salvar método de pagamento',\n                'show_alternatives' => 'Métodos de pagamento alternativos',\n            ],\n            'add_one'       => 'No momento, você não tem um método de pagamento salvo.',\n            'alternatives'  => 'Você pode se inscrever usando essas opções alternativas de pagamento. Esta ação cobrará sua conta uma vez e não renovará automaticamente sua assinatura todos os meses.',\n            'card'          => 'Cartão',\n            'card_name'     => 'Nome no cartão',\n            'country'       => 'País de moradia',\n            'ending'        => 'Válido até',\n            'helper'        => 'Este cartão será usado para todas suas assinaturas.',\n            'new_card'      => 'Adicionar um novo método de pagamento',\n            'saved'         => ':brand terminando em :last4',\n        ],\n        'periods'               => [\n            'monthly'   => 'Mensalmente',\n            'yearly'    => 'Anualmente',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => 'Opcionalmente, diga-nos por que você está fazendo o downgrade de sua assinatura.',\n            'reason'            => 'Opcionalmente, diga-nos por que você não está mais apoiando o Kanka. Estava faltando algum recurso? Sua situação financeira mudou?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount cobrado mensalmente',\n            'cost_yearly'   => ':currency :amount cobrado anualmente',\n        ],\n        'sub_status'            => 'Informação da assinatura',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Cancelar assinatura',\n                'downgrading'       => 'Entre em contato conosco para fazer o downgrade',\n                'rollback'          => 'Mudar para Kobold',\n                'subscribe'         => 'Mudar para :tier mensalmente',\n                'subscribe_annual'  => 'Mudar para :tier anualmente',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Seu pagamento foi registrado. Você receberá uma notificação assim que for processado e sua assinatura estiver ativa.',\n            'callback'      => 'Sua assinatura foi realizada com sucesso. Sua conta será atualizada assim que nosso provedor de pagamento nos informar sobre a mudança (isso pode levar alguns minutos).',\n            'currency'      => 'Sua configuração de moeda preferida foi atualizada.',\n            'subscribed'    => 'Sua assinatura foi bem-sucedida! Não se esqueça de assinar o boletim informativo Votação da Comunidade para ser notificado quando uma votação for ao ar. Além disso, você pode conferir nosso discord e fazer parte da comunidade',\n        ],\n        'tiers'                 => 'Níveis de Assinatura',\n        'trial_period'          => 'As assinaturas anuais têm uma política de cancelamento de 14 dias. Entre em contato conosco por :email se desejar cancelar sua assinatura anual e obter um reembolso.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Informação de Upgrade e Downgrade',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Seus bônus permanecem ativados até o final do período de pagamento.',\n                    'boosts'    => 'O mesmo acontece com suas campanhas impulsionadas. Os recursos impulsionados se tornam invisíveis, mas não são excluídos quando uma campanha não é mais impulsionada.',\n                    'kobold'    => 'Para cancelar sua assinatura, mude para o nível Kobold',\n                    'premium'   => 'O mesmo acontece com suas campanhas premium. Os recursos premium ficam invisíveis, mas não são excluídos quando uma campanha não é mais premium.',\n                ],\n                'title'     => 'Ao cancelar sua assinatura',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'Seu nível atual permanecerá ativo até o final do seu ciclo de faturamento atual, após o qual você será rebaixado para o seu novo nível.',\n                ],\n                'provide_reason'    => 'Se puder, compartilhe conosco por que está fazendo o downgrade de sua assinatura.',\n                'title'             => 'Ao fazer downgrade para um nível menor',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Seu método de pagamento será cobrado imediatamente e você terá acesso ao seu novo nível.',\n                    'prorate'   => 'Ao fazer upgrade de Urso-Coruja para Elemental, você só será cobrado pela diferença de seu novo nível.',\n                ],\n                'title'     => 'Ao fazer upgrade para um nível maior',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'Não foi possível cobrar seu cartão de crédito. Atualize as informações do seu cartão de crédito e tentaremos cobrar novamente nos próximos dias. Se falhar novamente, sua assinatura será cancelada.',\n            'patreon'       => 'Sua conta está atualmente vinculada ao Patreon. Desvincule sua conta nas configurações de :patreon antes de mudar para uma assinatura Kanka.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'count'             => 'Membro de :member',\n        'created_campaigns' => 'Suas Campanhas',\n        'follow_more'       => 'Encontrar campanhas',\n        'followed_campaigns'=> 'Campanhas Seguidas',\n        'new_campaign'      => 'Nova Campanha',\n        'public_campaigns'  => 'Campanhas Públicas',\n        'reorder'           => 'Reordenar',\n        'updated'           => 'Atualizado',\n    ],\n    'dashboard'         => 'Dashboard',\n    'entity-creator'    => 'Criação Rápida',\n    'gallery'           => 'Galeria',\n    'game'              => 'Jogo',\n    'other'             => 'Outros',\n    'recent'            => 'Mudanças recentes',\n    'relations'         => 'Relações',\n    'settings'          => 'Configurações',\n    'time'              => 'Tempo',\n    'world'             => 'Mundo',\n];\n"
  },
  {
    "path": "lang/pt-BR/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => 'mundo do :user',\n    ],\n    'character1'    => [],\n    'character2'    => [],\n    'item1'         => [],\n    'kingdom1'      => [],\n    'kingdom2'      => [],\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Inscreva-se no Kanka para desbloquear uploads de imagens mais altos, uma experiência sem anúncios, :boosters e :more. Usamos :stripe para lidar com todas as cobranças, sem informações de cartão de crédito armazenadas ou transitando por nossos servidores.',\n        'more'  => 'mais recursos incríveis',\n    ],\n    'errors'    => [\n        'grace'                 => 'Sua assinatura atual termina em :date, após o qual você pode assinar novamente.',\n        'invalid_card_country'  => [\n            'brl'   => 'Lamentamos, mas atualmente só aceitamos pagamentos em BRL para clientes com cartões de crédito brasileiros. Se você acha que isso é um engano, entre em contato conosco em :email.',\n        ],\n        'invalid_currency'      => 'Você tinha uma assinatura anteriormente em :old, impedindo que você tenha uma nova assinatura em :new. Por favor, troque sua moeda para :old, ou entre em contato conosco em :email se você deseja trocar moedas.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/subscriptions/cancelled.php",
    "content": "<?php\n\nreturn [\n    'active'    => [\n        'adfree'    => 'Uma experiência sem anúncios',\n        'discord'   => 'Cargos exclusivos no :discord para assinantes',\n        'helper'    => 'Sua assinatura permanecerá ativa até :date. Até lá, você continuará aproveitando todos os benefícios da assinatura, incluindo:',\n        'limit'     => 'Limites de upload aumentados',\n        'more'      => 'E muito mais!',\n        'premium'   => 'Campanhas premium e seus recursos',\n        'title'     => 'Suas vantagens ainda estão ativas',\n    ],\n    'change'    => [\n        'action'    => 'Inscreva-se novamente agora',\n        'helper'    => 'Adoraríamos ter você de volta! Você pode assinar novamente a qualquer momento para continuar de onde parou.',\n        'title'     => 'Mudou de ideia?',\n    ],\n    'contact'   => [\n        'feedback'  => 'Se houver algo que poderíamos ter feito melhor, gostaríamos de ouvir de você:',\n        'helper'    => 'Mesmo sem uma assinatura, você ainda faz parte da comunidade Kanka. Continue construindo seus mundos e sinta-se à vontade para se reconectar quando for a hora certa.',\n        'send'      => 'Entre em contato conosco com seu feedback',\n        'title'     => 'Mantenha contato',\n    ],\n    'next'      => [\n        'data'      => 'Seus dados permanecerão seguros, nada será excluído e você poderá assinar novamente a qualquer momento',\n        'discord'   => 'Você não terá mais acesso a recursos e canais exclusivos para assinantes',\n        'helper'    => 'Após o término da sua assinatura:',\n        'premium'   => 'Qualquer campanha com premium habilitado perderá seu status premium',\n        'title'     => 'O que acontece depois disso?',\n    ],\n    'seo_title' => 'Sinto muito ver você partir',\n    'subtitle'  => 'Obrigado por ser nosso assinante, seu apoio foi muito importante para nós. Veja o que esperar agora:',\n    'title'     => 'Sinto muito ver você partir, :name',\n];\n"
  },
  {
    "path": "lang/pt-BR/subscriptions/confirm.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => 'Pagar :amount :currency agora',\n        'paypal'    => 'Pagar :amount :currency com PayPal',\n    ],\n    'helpers'   => [\n        'auto-renew'    => [\n            'monthly'   => 'Sua assinatura é renovada automaticamente todo mês. Sua próxima data de cobrança é :date.',\n            'none'      => 'O pagamento com PayPal é único e não é renovado automaticamente. Você pode assinar novamente após o término da sua assinatura, após :date.',\n            'yearly'    => 'Sua assinatura é renovada automaticamente a cada 12 meses. Sua próxima data de cobrança é :date.',\n        ],\n        'paypal'        => 'Você será redirecionado ao PayPal para concluir esta transação.',\n        'refund'        => 'Oferecemos uma política de reembolso de 14 dias, sem perguntas, para todas as assinaturas anuais. Basta nos enviar um e-mail para :email para iniciar o processo de reembolso.',\n    ],\n    'title'     => ':nome da assinatura',\n];\n"
  },
  {
    "path": "lang/pt-BR/subscriptions/faq.php",
    "content": "<?php\n\nreturn [\n    'cancellation'  => [\n        'answer'    => 'Com certeza! Você encontrará um botão de cancelamento nesta página se já estiver inscrito. Todos os benefícios da assinatura permanecem ativos até o final do seu período de cobrança. Observe que as assinaturas do PayPal são encerradas automaticamente ao final do período, pois não oferecem renovação automática.',\n        'question'  => 'Posso cancelar minha assinatura a qualquer momento?',\n    ],\n    'cost'          => [\n        'answer'    => 'A Kanka oferece três níveis de assinatura com nomes de monstros de D&D: Owlbear, Wyvern e Elemental. Os preços variam de acordo com a sua moeda preferida (USD, EUR ou BRL). Você terá dois meses grátis ao escolher uma assinatura anual em vez da mensal.',\n        'question'  => 'Quanto custa uma assinatura?',\n    ],\n    'data'          => [\n        'answer'    => 'Fique tranquilo, nunca excluímos seus dados quando uma assinatura termina. As campanhas premium simplesmente retornam à funcionalidade padrão, com os recursos premium temporariamente desativados. Ao assinar novamente, todas as suas configurações e dados premium são restaurados imediatamente, exatamente como você os deixou.',\n        'question'  => 'O que acontece com meus dados se eu cancelar minha assinatura?',\n    ],\n    'discount'      => [\n        'answer'    => 'Sim! Recompensamos nossos assinantes anuais com dois meses grátis em vez da cobrança mensal. Esta é a nossa forma de agradecer pelo seu compromisso de longa data com o Kanka.',\n        'question'  => 'Há algum desconto para assinaturas anuais?',\n    ],\n    'downgrade'     => [\n        'answer'    => 'Você pode alterar seu plano de assinatura a qualquer momento. Ao fazer um upgrade, cobraremos apenas a diferença entre o seu plano atual e o novo pelo restante do seu período de cobrança. Ao fazer o downgrade, sua nova tarifa mais baixa entrará em vigor na próxima data de renovação, sem interrupção dos seus benefícios atuais.',\n        'question'  => 'Como faço para atualizar/rebaixar minha assinatura?',\n    ],\n    'fail'          => [\n        'answer'    => 'Se o pagamento não for efetuado, notificaremos você por e-mail imediatamente e tentaremos automaticamente cobrar seu cartão até três vezes adicionais. Se essas tentativas não forem bem-sucedidas, sua assinatura será pausada. Você pode resolver isso facilmente atualizando suas informações de cobrança com um método de pagamento válido.',\n        'question'  => 'O que acontece se meu pagamento falhar?',\n    ],\n    'methods'       => [\n        'answer'    => 'Aceitamos pagamentos com cartão de crédito e PayPal em USD, EUR e BRL. A segurança do seu pagamento é importante para nós; todo o processamento de cartão de crédito é feito com segurança pelo nosso provedor de pagamento confiável, :stripe.',\n        'question'  => 'Quais métodos de pagamento são aceitos?',\n    ],\n    'refund'        => [\n        'answer'    => 'Sim! Oferecemos uma política de reembolso de 100% por 14 dias, sem perguntas, para todas as assinaturas anuais. Basta nos enviar um e-mail para :email solicitando seu reembolso e nós cuidaremos de tudo para você.',\n        'question'  => 'Vocês oferecem reembolsos?',\n    ],\n    'renewal'       => [\n        'answer'    => 'Sim, para assinaturas com cartão de crédito, renovaremos automaticamente o seu plano com a mesma tarifa quando o período de cobrança terminar. As assinaturas do PayPal são a exceção, pois exigem renovação manual, pois o PayPal não oferece suporte à continuação automática da cobrança do nosso serviço.',\n        'question'  => 'Serei cobrado automaticamente quando minha assinatura for renovada?',\n    ],\n    'security'      => [\n        'answer'    => 'Sua segurança financeira é nossa prioridade. Temos parceria com a :stripe, uma processadora de pagamentos em conformidade com o PCI que mantém os mais altos padrões de segurança em pagamentos. Todos os dados confidenciais de pagamento são processados e armazenados pela Stripe sob protocolos em conformidade com o GDPR, e não em nossos servidores.',\n        'question'  => 'Quão seguras são minhas informações de pagamento?',\n    ],\n    'sharing'       => [\n        'answer'    => 'Com certeza! Sua assinatura permite que você habilite campanhas premium que beneficiam a todos os envolvidos. Todos os membros da campanha desfrutam de recursos premium dentro dela, independentemente do status da assinatura, tornando Kanka perfeito para a construção colaborativa de mundos.',\n        'question'  => 'Posso compartilhar minha conta/assinatura com outras pessoas?',\n    ],\n    'title'         => 'Perguntas frequentes',\n    'trial'         => [\n        'answer'    => 'Embora não ofereçamos um teste tradicional, a versão gratuita do Kanka oferece ferramentas robustas de construção de mundos e gerenciamento de campanhas para você começar. Quando estiver pronto para mais, a assinatura desbloqueia recursos premium, como limites de upload de imagens aumentados, uma experiência sem anúncios, funções exclusivas do Discord e melhorias adicionais ao seu kit de ferramentas de construção de mundos.',\n        'question'  => 'Existe um teste gratuito disponível?',\n    ],\n    'update'        => [\n        'answer'    => 'Atualizar seus dados de cobrança é simples: basta acessar a página :billing nas configurações da sua conta. Lá, você pode modificar os métodos de pagamento, atualizar as informações do cartão ou alterar os endereços de cobrança, conforme necessário.',\n        'question'  => 'Como atualizo minhas informações de cobrança?',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/subscriptions/finish.php",
    "content": "<?php\n\nreturn [\n    'discord'   => [\n        'action'    => 'Conecte sua conta do Discord',\n        'enjoy'     => 'Acesse o Discord para aproveitar suas novas vantagens',\n        'helper'    => 'Como assinante, você desbloqueia funções exclusivas e canais privados em nossa comunidade do Discord, mas primeiro você precisa conectar sua conta do Discord.',\n        'title'     => 'Obtenha suas vantagens do Discord',\n    ],\n    'header'    => 'Você se inscreveu com sucesso, bem-vindo ao círculo interno dos construtores de mundos!',\n    'help'      => [\n        'contact-us'    => 'contate-nos',\n        'helper'        => 'Se tiver alguma dúvida ou feedback, entre em contato conosco ou visite nossa documentação. Estamos aqui para tornar sua experiência de construção de mundos mágica.',\n        'title'         => 'Precisa de ajuda?',\n    ],\n    'next'      => 'Seu apoio nos ajuda a crescer e continuar melhorando o Kanka para todos. Veja o que você pode fazer para desbloquear todos os benefícios da sua assinatura:',\n    'premium'   => [\n        'action'    => 'Desbloquear',\n        'helper'    => 'Desbloqueie recursos premium como módulos personalizados, acesso aos :plugins e muito mais!',\n        'title'     => 'Habilitar recursos premium em uma campanha',\n    ],\n    'roadmap'   => [\n        'action'    => 'Veja o roadmap e sugira recursos',\n        'helper'    => 'Estamos construindo o Kanka para você. Confira o roadmap público e sugira ou vote nos recursos que você gostaria de ver!',\n        'title'     => 'Ajude a moldar o futuro de Kanka',\n    ],\n    'title'     => 'Obrigado por apoiar Kanka!',\n];\n"
  },
  {
    "path": "lang/pt-BR/subscriptions/free-trial.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'accept'    => 'Comece seu teste gratuito',\n        'magic'     => 'Não é necessário cartão de crédito. Apenas pura magia.',\n    ],\n    'final'     => [\n        'magic' => 'Sem compromissos, sem armadilhas. Só mais magia para sua campanha.',\n        'title' => 'Comece agora meu teste de 15 dias',\n    ],\n    'header'    => 'Vimos sua dedicação nos reinos de Kanka. Para honrar sua jornada, estamos lhe concedendo um :what. Não é necessário ouro, gemas ou cartão de crédito.',\n    'included'  => [\n        'title' => 'O que está incluído',\n        'upsell'=> [\n            'action'    => 'Veja todos os níveis de assinatura',\n            'pitch'     => 'Este é apenas o nível :tier. Pronto para desbloquear ainda mais?',\n        ],\n    ],\n    'pitch'     => [\n        'title' => 'Aproveite um teste gratuito de 15 dias conosco! Desbloqueie todos os recursos premium e descubra o que você estava perdendo.',\n    ],\n    'started'   => [\n        'header'    => 'Você iniciou seu teste gratuito com sucesso. Bem-vindo ao círculo interno dos construtores de mundos!',\n        'title'     => 'Bem-vindo ao seu teste gratuito!',\n    ],\n    'tease'     => [\n        'helper'    => 'Quer desbloquear mais uploads de arquivos e mais vagas em campanhas premium? Visite a página de assinatura para ver o que mais te espera.',\n        'title'     => 'Mas você quer mais',\n    ],\n    'title'     => 'Uma Nova Missão Aguarda, Aventureiro!',\n    'what'      => ':amount-day de teste gratuito do nível :tier',\n    'why'       => [\n        'helper'    => 'Você criou, explorou e expandiu sua campanha. Sua lealdade não passou despercebida. Pense nisso como um presente de agradecimento da equipe Kanka.',\n        'title'     => 'Você ganhou esta recompensa',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'Esta promoção não está mais ativa.',\n        'invalid'   => 'Promoção desconhecida.',\n        'only-new'  => 'Esta promoção está disponível apenas para novos assinantes.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/subscriptions/renew.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'renew' => 'Renovar assinatura',\n    ],\n    'helper'    => 'No entanto, você pode optar por renovar sua assinatura para aproveitar os benefícios sem interrupções.',\n    'title'     => 'Renovação de assinatura',\n];\n"
  },
  {
    "path": "lang/pt-BR/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe não conseguiu processar seu método de pagamento. Consequentemente, sua assinatura foi desativada.',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'           => 'Adicionar à tag',\n            'add_entity'    => 'Adicionar à entidade',\n        ],\n        'create'    => [\n            'attach_success'        => '{1} Adicionada :count entidade à tag :name.|[2,*] Adicionadas :count entidades à tag :name.',\n            'attach_success_entity' => 'Tags atualizadas com sucesso para :name',\n            'entity'                => 'Adicionar tags a :name',\n            'helper'                => 'Marque uma ou várias entidades com :name',\n            'title'                 => 'Entidades de tags',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nova Tag',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'          => 'Filhos',\n        'is_auto_applied'   => 'Aplicar automaticamente a novas entidades',\n        'is_hidden'         => 'Ocultar do cabeçalho e da dica de contexto',\n    ],\n    'helpers'       => [\n        'no_children'   => 'No momento não há entidades marcadas com esta tag.',\n        'no_posts'      => 'Atualmente não há nenhuma post marcado com esta tag.',\n    ],\n    'hints'         => [\n        'children'          => 'Esta lista contém todas entidades diretamente relacionadas a esta tag ou às tags secundárias.',\n        'is_auto_applied'   => 'Marque esta opção para aplicar automaticamente esta tag a entidades recém-criadas.',\n        'is_hidden'         => 'Se marcada. esta tag não será exibida no cabeçalho ou dica de contexto de uma entidade.',\n        'tag'               => 'Esta lista contém todas as tags secundárias desta tag ou de suas tags secundárias.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Tradições, Guerras, História, Religião, Vexilologia',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Filhos',\n        ],\n    ],\n    'tags'          => [],\n    'transfer'      => [\n        'entities'      => [\n            'helper'    => 'Transferir entidades marcadas com :name para outra tag.',\n            'title'     => 'Transferir entidades',\n        ],\n        'fail'          => 'Falha ao transferir entidades de :tag para :newTag',\n        'fail_post'     => 'Falha ao transferir posts de :tag para :newTag',\n        'posts'         => [\n            'helper'    => 'Transfira posts marcados com :name para outra tag.',\n            'title'     => 'Transferir posts',\n        ],\n        'success'       => 'Entidades transferidas com sucesso de :tag para :newTag',\n        'success_post'  => 'Posts transferidos com sucesso de :tag para :newTag',\n        'transfer'      => 'Transferir',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/teams.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'lead'          => 'Tornando a construção de mundo divertida e confiável',\n        'translations'  => 'Traduções',\n    ],\n    'leads' => [\n        'translators'   => 'Kanka é traduzido para vários idiomas graças a esses incríveis colaboradores.',\n    ],\n    'people'=> [\n        'itzamna'   => [\n            'title' => 'Desenvolvedor Junior',\n        ],\n        'jay'       => [\n            'title' => 'Fundador & Desenvolvedor Líder',\n        ],\n        'jon'       => [\n            'title' => 'Co-Fundador e Gerente de Negócios',\n        ],\n        'kaz'       => [\n            'title' => 'Destruidor de Bugs',\n        ],\n        'laura'     => [\n            'title' => 'Mídia Social',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => [\n            'monthly'   => 'Pagar mensalmente',\n            'save'      => 'economize 2 meses',\n            'yearly'    => 'Pagar anualmente',\n        ],\n        'subscribe' => [\n            'choose'    => 'Escolha :tier',\n            'monthly'   => ':tier mensalmente',\n            'yearly'    => ':tier anualmente',\n        ],\n    ],\n    'current'   => 'Sua assinatura atual',\n    'features'  => [\n        'api_requests'      => ':amount de solicitações de API / min',\n        'boosters'          => 'Impulsionamentos de Campanha',\n        'discord'           => 'Função e canal exclusivos do :discord',\n        'feature_influence' => 'Influência em novos recursos',\n        'file_size'         => ':size Tamanho de upload de arquivo',\n        'import'            => 'Importador de campanha',\n        'nice_image'        => 'Imagens de entidade padrão',\n        'no_ads'            => 'Sem anúncios',\n        'pagination'        => ':amount Máximo de resultados paginados (entidades exibidas por página)',\n        'roadmap'           => 'Vote em ideias no roadmap',\n    ],\n    'periods'   => [\n        'billed_monthly'    => 'cobrado mensalmente',\n        'billed_yearly'     => 'cobrado anualmente',\n    ],\n    'pricing'   => ':currency :amount / mês',\n    'ribbons'   => [\n        'best-value'    => 'Melhor valor',\n        'current'       => 'Assinatura atual',\n    ],\n    'target'    => [\n        'elemental' => 'Para profissionais de construção de mundos que gerenciam múltiplos cenários épicos e campanhas expansivas',\n        'owlbear'   => 'Perfeito para construtores de mundos solo que desejam turbinar sua campanha principal',\n        'wyvern'    => 'Ideal para mestres de jogo que executam múltiplas aventuras ou contadores de histórias colaborativos',\n    ],\n    'toggle'    => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Copiar menção avançada com o nome do elemento',\n        'success'           => 'Menção avançada ao elemento copiada para a área de transferência.',\n    ],\n    'create'        => [\n        'success'   => 'Elemento adicionado à linha do tempo.',\n        'title'     => 'Novo Elemento da Linha do Tempo',\n    ],\n    'delete'        => [\n        'success'   => 'Elemento :name removido.',\n    ],\n    'edit'          => [\n        'success'   => 'Elemento atualizado',\n        'title'     => 'Editar Elemento da Linha do Tempo',\n    ],\n    'fields'        => [\n        'date'              => 'Data',\n        'era'               => 'Era',\n        'icon'              => 'Ícone',\n        'use_entity_entry'  => 'Exiba a introdução da entidade anexada abaixo. O texto deste elemento será exibido primeiro se estiver presente.',\n        'use_event_date'    => 'Use a data do evento vinculado.',\n    ],\n    'helpers'       => [\n        'date'              => 'Se o elemento estiver vinculado a uma entidade de evento, exiba a data do evento.',\n        'entity_is_private' => 'O elemento da entidade está privada.',\n        'icon'              => 'Copiar o HTML de um ícone de :fontawesome ou :rpgawesome.',\n        'is_collapsed'      => 'O elemento é exibido recolhido por padrão.',\n    ],\n    'placeholders'  => [\n        'date'      => 'ex: 42 de Março ou 1332-1337',\n        'name'      => 'Obrigatório se nenhuma entidade for selecionada',\n        'position'  => 'Posição na lista de elementos da era. Deixe em branco para adicionar ao final.',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Adicionar uma nova era',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} Removida :count era.|{1} Removida :count era.|[2,*] Removidas :count eras.',\n    ],\n    'create'        => [\n        'success'   => 'Era :name criada.',\n        'title'     => 'Nova Era',\n    ],\n    'delete'        => [\n        'success'   => 'Era :name removida.',\n    ],\n    'edit'          => [\n        'success'   => 'Era :name atualizada.',\n        'title'     => 'Editar Era :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Sigla',\n        'end_year'      => 'Ano Final',\n        'is_collapsed'  => 'Recolhido',\n        'start_year'    => 'Ano Inicial',\n    ],\n    'helpers'       => [\n        'eras'          => 'Uma linha do tempo precisa ser criada antes que eras possam ser adicionadas a ela.',\n        'is_collapsed'  => 'Era é recolhida (minimizada) por padrão.',\n        'primary'       => 'Separe sua linha do tempo em eras. Uma linha do tempo precisa de pelo menos uma era para funcionar corretamente.',\n    ],\n    'index'         => [\n        'title' => 'Eras de :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'AC, DC, AEC',\n        'end_year'      => 'Ano em que a era termina. Deixe em branco se esta for a era atual.',\n        'name'          => 'Era Moderna, Idade do Bronze, Guerras Galácticas',\n        'start_year'    => 'Ano em que a era começa. Deixe em branco se esta for a primeira era.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Adicionar elemento à :era',\n        'back'          => 'Voltar para :name',\n        'save_order'    => 'Salvar nova ordem',\n    ],\n    'create'        => [\n        'title' => 'Nova Linha do Tempo',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_elements' => 'Copiar Elementos',\n        'copy_eras'     => 'Copiar Eras',\n        'eras'          => 'Eras',\n        'reverse_order' => 'Ordem reversa da era',\n    ],\n    'helpers'       => [\n        'no_era_v2'     => 'Esta linha do tempo atualmente não tem nenhuma era. Adicione uma ou várias eras, após o qual você pode adicionar elementos às eras aqui.',\n        'reverse_order' => 'Habilite para exibir linhas do tempo em ordem cronológica reversa (eras antigas primeiro)',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Crie uma linha do tempo visual para registrar os principais eventos e acompanhar a evolução do seu mundo.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Primária, Crônica Mundial, Legado do Reino',\n    ],\n    'reorder'       => [\n        'empty'     => 'Adicione eras e elementos à linha do tempo para poder reordená-la.',\n        'success'   => ':name reordenada com sucesso.',\n        'title'     => 'Reordenar :name',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder-elements'  => 'Reordenar elementos',\n        ],\n    ],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/pt-BR/tiptap.php",
    "content": "<?php\n\nreturn [\n    'survey'    => 'Experimentando o novo editor? Compartilhe (leva apenas 2 minutos)',\n];\n"
  },
  {
    "path": "lang/pt-BR/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'Um verdadeiro forjador de palavras! Vencedor de um evento de construção de mundo.',\n    ],\n    'fields'        => [\n        'achievements'      => 'Conquistas',\n        'banned'            => 'Este usuário foi banido',\n        'entities_created'  => 'Entidades criadas :help :count',\n        'member_since'      => 'Membro desde :date',\n        'public_campaigns'  => 'Campanhas públicas',\n        'subscriber_since'  => 'Inscrito desde :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'Esse valor é recalculado todo dia.',\n    ],\n    'title'         => 'Perfil :name',\n];\n"
  },
  {
    "path": "lang/pt-BR/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => 'O campo :attribute deve ser aceito.',\n    'active_url'           => 'O campo :attribute deve conter uma URL válida.',\n    'after'                => 'O campo :attribute deve conter uma data posterior a :date.',\n    'after_or_equal'       => 'O campo :attribute deve conter uma data superior ou igual a :date.',\n    'alpha'                => 'O campo :attribute deve conter apenas letras.',\n    'alpha_dash'           => 'O campo :attribute deve conter apenas letras, números e traços.',\n    'alpha_num'            => 'O campo :attribute deve conter apenas letras e números .',\n    'array'                => 'O campo :attribute deve conter um array.',\n    'before'               => 'O campo :attribute deve conter uma data anterior a :date.',\n    'before_or_equal'      => 'O campo :attribute deve conter uma data inferior ou igual a :date.',\n    'between'              => [\n        'numeric' => 'O campo :attribute deve conter um número entre :min e :max.',\n        'file'    => 'O campo :attribute deve conter um arquivo de :min a :max kilobytes.',\n        'string'  => 'O campo :attribute deve conter entre :min a :max caracteres.',\n        'array'   => 'O campo :attribute deve conter de :min a :max itens.',\n    ],\n    'boolean'              => 'O campo :attribute deve conter o valor verdadeiro ou falso.',\n    'confirmed'            => 'A confirmação para o campo :attribute não coincide.',\n    'date'                 => 'O campo :attribute não contém uma data válida.',\n    'date_equals'          => 'O campo :attribute deve ser uma data igual a :date.',\n    'date_format'          => 'A data informada para o campo :attribute não respeita o formato :format.',\n    'different'            => 'Os campos :attribute e :other devem conter valores diferentes.',\n    'digits'               => 'O campo :attribute deve conter :digits dígitos.',\n    'digits_between'       => 'O campo :attribute deve conter entre :min a :max dígitos.',\n    'dimensions'           => 'O valor informado para o campo :attribute não é uma dimensão de imagem válida.',\n    'distinct'             => 'O campo :attribute contém um valor duplicado.',\n    'email'                => 'O campo :attribute não contém um endereço de email válido.',\n    'exists'               => 'O valor selecionado para o campo :attribute é inválido.',\n    'file'                 => 'O campo :attribute deve conter um arquivo.',\n    'filled'               => 'O campo :attribute é obrigatório.',\n    'gt'                   => [\n        'numeric' => 'O campo :attribute deve ser maior que :value.',\n        'file'    => 'O arquivo :attribute deve ser maior que :value kilobytes.',\n        'string'  => 'O campo :attribute deve ser maior que :value caracteres.',\n        'array'   => 'O campo :attribute deve ter mais que :value itens.',\n    ],\n    'gte'                  => [\n        'numeric' => 'O campo :attribute deve ser maior ou igual a :value.',\n        'file'    => 'O arquivo :attribute deve ser maior ou igual a :value kilobytes.',\n        'string'  => 'O campo :attribute deve ser maior ou igual a :value caracteres.',\n        'array'   => 'O campo :attribute deve ter :value itens ou mais.',\n    ],\n    'image'                => 'O campo :attribute deve conter uma imagem.',\n    'in'                   => 'O campo :attribute não contém um valor válido.',\n    'in_array'             => 'O campo :attribute não existe em :other.',\n    'integer'              => 'O campo :attribute deve conter um número inteiro.',\n    'ip'                   => 'O campo :attribute deve conter um IP válido.',\n    'ipv4'                 => 'O campo :attribute deve conter um IPv4 válido.',\n    'ipv6'                 => 'O campo :attribute deve conter um IPv6 válido.',\n    'json'                 => 'O campo :attribute deve conter uma string JSON válida.',\n    'lt'                   => [\n        'numeric' => 'O campo :attribute deve ser menor que :value.',\n        'file'    => 'O arquivo :attribute ser menor que :value kilobytes.',\n        'string'  => 'O campo :attribute deve ser menor que :value caracteres.',\n        'array'   => 'O campo :attribute deve ter menos que :value itens.',\n    ],\n    'lte'                  => [\n        'numeric' => 'O campo :attribute deve ser menor ou igual a :value.',\n        'file'    => 'O arquivo :attribute ser menor ou igual a :value kilobytes.',\n        'string'  => 'O campo :attribute deve ser menor ou igual a :value caracteres.',\n        'array'   => 'O campo :attribute não deve ter mais que :value itens.',\n    ],\n    'max'                  => [\n        'numeric' => 'O campo :attribute não pode conter um valor superior a :max.',\n        'file'    => 'O campo :attribute não pode conter um arquivo com mais de :max kilobytes.',\n        'string'  => 'O campo :attribute não pode conter mais de :max caracteres.',\n        'array'   => 'O campo :attribute deve conter no máximo :max itens.',\n    ],\n    'mimes'                => 'O campo :attribute deve conter um arquivo do tipo: :values.',\n    'mimetypes'            => 'O campo :attribute deve conter um arquivo do tipo: :values.',\n    'min'                  => [\n        'numeric' => 'O campo :attribute deve conter um número superior ou igual a :min.',\n        'file'    => 'O campo :attribute deve conter um arquivo com no mínimo :min kilobytes.',\n        'string'  => 'O campo :attribute deve conter no mínimo :min caracteres.',\n        'array'   => 'O campo :attribute deve conter no mínimo :min itens.',\n    ],\n    'not_in'               => 'O campo :attribute contém um valor inválido.',\n    'not_regex'            => 'O formato do valor :attribute é inválido.',\n    'numeric'              => 'O campo :attribute deve conter um valor numérico.',\n    'present'              => 'O campo :attribute deve estar presente.',\n    'regex'                => 'O formato do valor informado no campo :attribute é inválido.',\n    'required'             => 'O campo :attribute é obrigatório.',\n    'required_if'          => 'O campo :attribute é obrigatório quando o valor do campo :other é igual a :value.',\n    'required_unless'      => 'O campo :attribute é obrigatório a menos que :other esteja presente em :values.',\n    'required_with'        => 'O campo :attribute é obrigatório quando :values está presente.',\n    'required_with_all'    => 'O campo :attribute é obrigatório quando um dos :values está presente.',\n    'required_without'     => 'O campo :attribute é obrigatório quando :values não está presente.',\n    'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values está presente.',\n    'same'                 => 'Os campos :attribute e :other devem conter valores iguais.',\n    'size'                 => [\n        'numeric' => 'O campo :attribute deve conter o número :size.',\n        'file'    => 'O campo :attribute deve conter um arquivo com o tamanho de :size kilobytes.',\n        'string'  => 'O campo :attribute deve conter :size caracteres.',\n        'array'   => 'O campo :attribute deve conter :size itens.',\n    ],\n    'starts_with'          => 'O campo :attribute deve começar com um dos seguintes valores: :values',\n    'string'               => 'O campo :attribute deve ser uma string.',\n    'timezone'             => 'O campo :attribute deve conter um fuso horário válido.',\n    'unique'               => 'O valor informado para o campo :attribute já está em uso.',\n    'uploaded'             => 'Falha no Upload do arquivo :attribute.',\n    'url'                  => 'O formato da URL informada para o campo :attribute é inválido.',\n    'uuid'                 => 'O campo :attribute deve ser um UUID válido.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        'address'               => 'endereço',\n        'age'                   => 'idade',\n        'body'                  => 'conteúdo',\n        'city'                  => 'cidade',\n        'country'               => 'país',\n        'date'                  => 'data',\n        'day'                   => 'dia',\n        'description'           => 'descrição',\n        'excerpt'               => 'resumo',\n        'first_name'            => 'primeiro nome',\n        'gender'                => 'gênero',\n        'hour'                  => 'hora',\n        'last_name'             => 'sobrenome',\n        'message'               => 'mensagem',\n        'minute'                => 'minuto',\n        'mobile'                => 'celular',\n        'month'                 => 'mês',\n        'name'                  => 'nome',\n        'password_confirmation' => 'confirmação da senha',\n        'password'              => 'senha',\n        'phone'                 => 'telefone',\n        'second'                => 'segundo',\n        'sex'                   => 'sexo',\n        'state'                 => 'estado',\n        'subject'               => 'assunto',\n        'text'                  => 'texto',\n        'time'                  => 'hora',\n        'title'                 => 'título',\n        'username'              => 'usuário',\n        'year'                  => 'ano',\n        'email'                 => 'e-mail',\n        'remember'              => 'lembrar-se de mim',\n    ],\n];\n"
  },
  {
    "path": "lang/pt-BR/visibilities.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'admin'         => 'Somente membros do cargo Admin podem visualizar este elemento.',\n        'admin-self'    => 'Somente você e membros do cargo Admin podem visualizar este elemento.',\n        'all'           => 'Todos podem visualizar esse elemento.',\n        'members'       => 'Somente membros da campanha podem visualizar este elemento.',\n        'self'          => 'Somente você pode ver esse elemento.',\n    ],\n    'picker'    => [\n        'admin'         => 'Visível apenas para membros com o cargo :admin.',\n        'admin-self'    => 'Somente você e os membros com o cargo :admin podem ver isso.',\n        'all'           => 'Qualquer pessoa que possa ver :entity pode ver isto.',\n        'failed'        => 'Falha ao atualizar a visibilidade.',\n        'member'        => 'Visível apenas para membros da campanha. Útil para campanhas públicas.',\n        'self'          => 'Só você pode ver isso.',\n    ],\n    'title'     => 'Atualizando visibilidade',\n    'toast'     => 'Visibilidade atualizada com sucesso.',\n    'tooltip'   => 'Clique para saber mais sobre as diferentes opções de visibilidade e seus significados em nossa documentação.',\n];\n"
  },
  {
    "path": "lang/pt-BR/whiteboards.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'draw'  => 'Desenhar',\n    ],\n    'create'    => [\n        'title' => 'Novo quadro branco',\n    ],\n    'cta'       => [\n        'text'  => 'Para desbloquear os quadros brancos, uma campanha precisa ser tornada premium por um membro do nível :wyvern ou :elemental.',\n        'title' => 'Os quadros brancos são um recurso premium especial',\n    ],\n    'lists'     => [\n        'empty' => 'Use um quadro branco para organizar visualmente ideias, relações ou a estrutura da história.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'Добавить объекты',\n        ],\n        'create'        => [\n            'attach_success'    => '{1} Способность :name добавлена к :count объекту.|[2,*] Способность :name добавлена к :count объектам.',\n            'helper'            => 'Добавьте :name к одному или нескольким объектам.',\n            'title'             => 'Добавление объектов',\n        ],\n        'description'   => 'Объекты с этой способностью',\n        'title'         => 'Объекты способности :name',\n    ],\n    'create'        => [\n        'title' => 'Новая способность',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'entities'      => [],\n    'fields'        => [\n        'charges'   => 'Заряды',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Добавьте сюда силы, заклинания или таланты. Многие используют этот модуль для моделирования классов D&D.',\n    ],\n    'placeholders'  => [\n        'charges'   => 'Число зарядов. На атрибуты можно ссылаться так: {Уровень}*{ХАР}.',\n        'name'      => 'Огненный шар, сигнал тревоги, коварный удар',\n        'type'      => 'Заклинание, навык, атака',\n    ],\n    'reorder'       => [\n        'parentless'    => 'Без родителя',\n        'success'       => 'Порядок способностей успешно изменен.',\n        'title'         => 'Изменение порядка способностей',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Порядок способностей',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/account/email.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Обновить почту',\n    ],\n    'fields'    => [\n        'email' => 'Новый адрес электронной почты',\n    ],\n    'helpers'   => [\n        'email' => 'Убедитесь, что не допустили ошибок.',\n    ],\n    'subtitle'  => 'Измените адрес электронной почты, привязанной к вашему аккаунту.',\n    'title'     => 'Обновление вашей электронной почты',\n];\n"
  },
  {
    "path": "lang/ru/account/password.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Обновить пароль',\n    ],\n    'fields'    => [\n        'password'  => 'Новый пароль',\n    ],\n    'helpers'   => [\n        'password'              => 'Можете воспользоваться менеджером паролей, чтобы создать надежный пароль.',\n        'password_confirmation' => 'Не ошибитесь!',\n    ],\n    'subtitle'  => 'Измените свой пароль. Вам придется вводить его заново на всех остальных устройствах.',\n    'title'     => 'Обновление пароля аккаунта',\n];\n"
  },
  {
    "path": "lang/ru/account/social.php",
    "content": "<?php\n\nreturn [\n    'info'      => 'Вход через :provider',\n    'subtitle'  => 'Переключитесь с входа через :provider на вход через Kanka, при котором вы входите по своей электронной почте и паролю.',\n    'title'     => 'Переключение на вход через Kanka',\n];\n"
  },
  {
    "path": "lang/ru/assistance.php",
    "content": "<?php\n\nreturn [\n    'fields'        => [\n        'campaign'  => 'Кампания',\n    ],\n    'opening'       => 'Член команды Kanka направил вас на эту страницу с целью оказать вам помощь.',\n    'placeholders'  => [\n        'campaign'  => 'Выберите кампанию, в которой вы админ',\n    ],\n    'select'        => 'Выберите кампанию, в которой вы админ, из меню ниже, чтобы сгенерировать специальный одноразовый токен, который позволит члену команды Kanka временно присоединиться к кампании как админ.',\n    'success'       => [\n        'opening'   => 'Ваш токен оказания помощи успешно сгенерирован. Команда Kanka была уведомлена и вскоре присоединится к вашей помощи и поможет вам. Обычно мы связываемся с вами в :discord, если есть необходимость скоординировать что-то напрямую.',\n        'secret'    => 'Только подтвержденные члены команды Kanka могут воспользоваться этим токеном, он бесполезен для всех остальных, поэтому можете не хранить его в секрете.',\n        'token'     => 'Ваш токен помощи:',\n    ],\n    'title'         => 'Оказание помощи',\n];\n"
  },
  {
    "path": "lang/ru/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'create'                => [\n        'title' => 'Новый шаблон атрибутов',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [\n        'auto_apply'    => 'Автоприменение',\n        'is_enabled'    => 'Включен',\n    ],\n    'hints'                 => [\n        'automatic'                 => 'Атрибуты (:count) добавлены автоматически по шаблону :link.',\n        'automatic_apply'           => '{1} Атрибут добавлен автоматически по шаблону :link.|[2,] Атрибуты (:count) добавлены автоматически по шаблону :link.',\n        'entity_type'               => 'Этот шаблон атрибутов будет автоматически применяться к новым объектам указанного типа.',\n        'is_disabled'               => 'Этот шаблон отключен.',\n        'is_enabled'                => 'Включите этот шаблон, чтобы использовать его в кампании.',\n        'parent_attribute_template' => 'Этот шаблон атрибутов можно сделать дочерним другому шаблону атрибутов. При применении этого шаблона, будут также применены все его родительские шаблоны.',\n    ],\n    'index'                 => [],\n    'lists'                 => [\n        'empty' => 'Создайте шаблоны, чтобы легко добавлять общие атрибуты к разным объектам.',\n    ],\n    'placeholders'          => [\n        'name'  => 'Название шаблона атрибутов',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/ru/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Ошибка',\n            'rendering' => 'Произошла ошибка при отображении плагина из каталога. Пожалуйста, свяжитесь с создателем плагина.',\n        ],\n    ],\n    'helpers'   => [],\n    'list'      => [\n        'sheets'    => 'Листы персонажей',\n    ],\n    'pitch'     => ':marketplace позволяет искать листы персонажей и добавлять их в кампанию с помощью :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/ru/auth.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Языковые ресурсы аутентификации\n    |--------------------------------------------------------------------------\n    |\n    | Следующие языковые ресурсы используются во время аутентификации для\n    | различных сообщений которые мы должны вывести пользователю на экран.\n    | Вы можете свободно изменять эти языковые ресурсы в соответствии\n    | с требованиями вашего приложения.\n    |\n    */\n\n    'banned'    => [\n        'permanent' => 'Вы были заблокированы навсегда.',\n        'temporary' => '{1} Вы были заблокированы на :days день.|[2,4] Вы были заблокированы на :days дня.|[5,20] Вы были заблокированы на :days дней.|[21,*] Вы были заблокированы на :days дн.',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Подтвердить',\n        'error'     => 'Неверный пароль. Пожалуйста, попробуйте еще раз.',\n        'helper'    => 'Пожалуйста, подтвердите свой пароль, прежде чем вы сможете продолжить.',\n        'title'     => 'Подтверждение пароля',\n    ],\n    'continue'  => [\n        'facebook'  => 'Продолжить через Facebook',\n        'google'    => 'Продолжить через Google',\n        'x'         => 'Продолжить через X',\n    ],\n    'failed'    => 'Недействительные учетные данные.',\n    'helpers'   => [\n        'password'  => 'Показать / Скрыть пароль',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'Одноразовый пароль',\n            'email'     => 'Электронная почта',\n            'password'  => 'Пароль',\n        ],\n        'no-account'            => 'Еще нет аккаунта?',\n        'or'                    => 'ИЛИ',\n        'password_forgotten'    => 'Забыли пароль?',\n        'sign-up'               => 'Регистрация',\n        'submit'                => 'Войти',\n        'title'                 => 'Вход',\n    ],\n    'register'  => [\n        'already'   => 'Уже есть аккаунт? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Аккаунт с такой электронной почтой уже зарегистрирован.',\n            'general_error'         => 'При создании вашего аккаунта произошла ошибка. Пожалуйста, попробуйте еще раз.',\n        ],\n        'fields'    => [\n            'email'     => 'Электронная почта',\n            'name'      => 'Имя пользователя',\n            'password'  => 'Пароль',\n        ],\n        'log-in'    => 'Войти',\n        'submit'    => 'Зарегистрироваться',\n        'title'     => 'Регистрация',\n        'tos'       => 'Регистрируясь, вы подтверждаете, что прочли :terms и :privacy и согласны с ними.',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'Адрес электронной почты',\n            'password'              => 'Пароль',\n            'password_confirmation' => 'Подтвердите ваш пароль',\n        ],\n        'send'      => 'Отправить ссылку на восстановление пароля',\n        'submit'    => 'Восстановить пароль',\n        'title'     => 'Восстановление пароля',\n    ],\n    'tfa'       => [\n        'helper'    => 'Двухфакторная аутентификация включена. Пожалуйста, предоставьте одноразовый пароль (OTP), предоставленный вашим приложением-аутентификатором.',\n        'title'     => 'Двухфакторная аутентификация',\n    ],\n    'throttle'  => 'Лимит попыток входа. Пожалуйста, попробуйте снова через :seconds сек.',\n    'x-twitter' => 'X ранее известный как Twitter',\n];\n"
  },
  {
    "path": "lang/ru/banners.php",
    "content": "<?php\n\nreturn [\n    'kanka4years'   => 'Используйте промокод :code, чтобы получить скидку 20% на вашу первую годовую подписку!',\n];\n"
  },
  {
    "path": "lang/ru/billing/information.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'update'    => 'Обновить информацию',\n    ],\n    'helper'    => 'Адрес вашего бизнеса, номер НДС и т.д. могут быть добавлены во все ваши счета.',\n    'title'     => 'Обновление платежной информации',\n];\n"
  },
  {
    "path": "lang/ru/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Скачать PDF',\n    ],\n    'description'   => 'Показаны счета за последние 24 месяца.',\n    'empty'         => 'Счетов не найдено.',\n    'fields'        => [\n        'amount'    => 'Сумма',\n        'date'      => 'Дата',\n        'invoice'   => 'Счет',\n        'status'    => 'Статус',\n    ],\n    'paypal'        => 'Примите во внимание, что здесь показаны только платежи через Stripe, но не через PayPal.',\n    'status'        => [\n        'paid'      => 'Оплачен',\n        'pending'   => 'Обрабатывается',\n    ],\n    'title'         => 'История платежей',\n];\n"
  },
  {
    "path": "lang/ru/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'История платежей',\n    'overview'          => 'Основное',\n    'payment-method'    => 'Способ оплаты',\n];\n"
  },
  {
    "path": "lang/ru/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Способ оплаты',\n    'types' => [\n        'card'  => 'Банковская карта',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Настроить боковую панель',\n    ],\n    'create'            => [\n        'title' => 'Новая закладка',\n    ],\n    'destroy'           => [],\n    'edit'              => [\n        'title' => 'Закладка :name',\n    ],\n    'fields'            => [\n        'active'            => 'Активная',\n        'dashboard'         => 'Домашняя панель',\n        'default_dashboard' => 'Основная домашняя панель',\n        'filters'           => 'Фильтры',\n        'menu'              => 'Страница',\n        'position'          => 'Позиция',\n        'random_type'       => 'Тип случайного объекта',\n        'selector'          => 'Настройка закладки',\n        'target'            => 'Назначение',\n    ],\n    'helpers'           => [\n        'active'            => 'Неактивные закладки не будут показаны.',\n        'css'               => 'Добавьте CSS класс, который будет применен к ссылке закладки в боковой панели.',\n        'dashboard'         => 'Создает закладку для одной из дополнительных домашних панелей кампании.',\n        'default_dashboard' => 'Ссылаться к основной домашней панели кампании. Выбрать один из дополнительных домашних панелей все равно необходимо.',\n        'entity'            => 'Создает закладку для объекта. Поле :menu определяет, какая страница объекта будет открыта.',\n        'position'          => 'Закладки в боковой панели отображаются в порядке возрастания значения этого поля.',\n        'random'            => 'Создает закладку для случайного объекта. Закладку можно настроить так, чтобы она выбирала объекты только одного определенного типа.',\n        'selector'          => 'Настройте, куда закладка отправляет пользователя при нажатии на нее.',\n        'type'              => 'Создает закладку на один из списков объектов. Чтобы добавить фильтры, скопируйте часть URL отфильтрованного списка, стоящую после знака :?, и вставьте ее в поле :filter.',\n    ],\n    'index'             => [],\n    'lists'             => [\n        'empty' => 'Создавайте закладки для ваших самых часто открываемых объектов или фильтрованных списков для вашего удобства.',\n    ],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=город',\n        'menu'      => 'Страница меню (используйте последнее слово из URL нужной страницы)',\n        'tab'       => '(устаревшее)',\n    ],\n    'random_no_entity'  => 'Невозможно выбрать случайный объект.',\n    'random_types'      => [\n        'any'   => 'Любой тип',\n    ],\n    'reorder'           => [\n        'success'   => 'Порядок закладок изменен.',\n        'title'     => 'Изменение порядка закладок',\n    ],\n    'show'              => [],\n    'targets'           => [\n        'dashboard' => 'Одна из домашних панелей кампании',\n        'entity'    => 'Конкретный объект',\n        'random'    => 'Случайный объект',\n        'select'    => 'Выберите назначение',\n        'type'      => 'Список объектов конкретного типа/модуля',\n    ],\n    'visibilities'      => [\n        'is_active' => 'Показывать закладку в боковой панели',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'Сгенерировать',\n        'insert'    => 'Вставить',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'Чтобы получить доступ к этой функции, вам нужно обладать подпиской Wyvern или Elemental.',\n        'out-of-tokens' => 'У вас закончились токены! Они автоматически пополнятся :date.',\n    ],\n    'here'          => 'здесь',\n    'intro'         => 'Привет! Я :name, ИИ готовый помочь вам сгенерировать предыстории для ваших персонажей на Kanka. Вы можете узнать обо мне больше :here.',\n    'kankappy'      => 'Тайный ученик Канкапыша.',\n    'loading'       => 'Пожалуйста, подождите, я напряженно думаю, и это может занять вплоть до минуты!',\n    'placeholders'  => [\n        'prompt'    => 'Введите запрос, который будет преобразован в предысторию.',\n    ],\n    'token-limit'   => 'В данный момент у вас :amount токенов. Каждый раз, когда я генерирую предысторию, расходуется токен, так что используйте их мудро!',\n];\n"
  },
  {
    "path": "lang/ru/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'helper'    => 'Добавьте информацию о погоде, которая будет показана в календаре.',\n        'success'   => 'Погода добавлена.',\n        'title'     => 'Новое погодное явление',\n    ],\n    'destroy'       => [\n        'success'   => 'Погода удалена.',\n    ],\n    'edit'          => [\n        'success'   => 'Погода обновлена.',\n        'title'     => 'Редактирование погоды',\n    ],\n    'fields'        => [\n        'effect'        => 'Погодное явление',\n        'name'          => 'Название',\n        'precipitation' => 'Осадки',\n        'temperature'   => 'Температура',\n        'weather'       => 'Иконка',\n        'wind'          => 'Ветер',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Гроза',\n            'cloud'                 => 'Облака',\n            'cloud-rain'            => 'Дождь',\n            'cloud-showers-heavy'   => 'Ливень',\n            'cloud-sun'             => 'Облака и солнце',\n            'cloud-sun-rain'        => 'Облака, дождь и солнце',\n            'meteor'                => 'Метеорит',\n            'smog'                  => 'Туман',\n            'snowflake'             => 'Снег',\n            'sun'                   => 'Солнце',\n            'wind'                  => 'Ветер',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Магическое или природное явление',\n        'name'          => 'Необязательно, для особых погодных явлений',\n        'precipitation' => 'Количество осадков',\n        'temperature'   => 'Дневной максимум и минимум',\n        'wind'          => 'Скорость ветра',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Эпоха',\n        'add_intercalary'   => 'Добавить промежуточные дни',\n        'add_month'         => 'Месяц',\n        'add_moon'          => 'Луна',\n        'add_reminder'      => 'Добавить напоминание',\n        'add_season'        => 'Время года',\n        'add_weather'       => 'Настроить погодные явления',\n        'add_week'          => 'Названная неделя',\n        'add_weekday'       => 'День недели',\n        'add_year'          => 'Названный год',\n        'set_today'         => 'Сделать текущим днем',\n        'today'             => 'Сегодня',\n        'update_weather'    => 'Редактировать погоду',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Происходит каждый год',\n    ],\n    'create'        => [\n        'title' => 'Новый календарь',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Дата календаря обновлена.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Напоминание создано.',\n            'title'     => 'Новое напоминание',\n        ],\n        'destroy'   => 'Напоминание удалено из календаря \":name\".',\n        'edit'      => [\n            'success'   => 'Напоминание обновлено.',\n            'title'     => 'Редактирование напоминание календаря :name',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Недействительный выбор объекта.',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Вы редактируете напоминание календаря :calendar. Модификация этого напоминания изменит его и там, и там.',\n        ],\n        'success'   => 'Напоминание \":event\" добавлено в календарь \":calendar\".',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} Удалено :count напоминание.|[2,4] Удалено :count напоминания.|[5,*] Удалено :count напоминаний.',\n            'patch'     => '{1} Обновлено :count напоминание.|[2,4] Обновлено :count напоминания.|[5,*] Обновлено :count напоминаний.',\n        ],\n        'end'       => '(конец)',\n        'filters'   => [\n            'show_after'    => 'Сегодня и позже',\n            'show_all'      => 'Все время',\n            'show_before'   => 'Вчера и раньше',\n        ],\n        'start'     => '(начало)',\n    ],\n    'fields'        => [\n        'comment'           => 'Комментарий',\n        'current_day'       => 'Текущий день',\n        'current_month'     => 'Текущий месяц',\n        'current_year'      => 'Текущий год',\n        'date'              => 'Текущая дата',\n        'day'               => 'День',\n        'default_layout'    => 'Стандартный вид',\n        'format'            => 'Формат',\n        'is_incrementing'   => 'Автообновление даты',\n        'is_recurring'      => 'Повторяющееся',\n        'leap_year'         => 'Високосные года',\n        'leap_year_amount'  => 'Лишние дни',\n        'leap_year_month'   => 'Месяц',\n        'leap_year_offset'  => 'Каждые сколько лет',\n        'leap_year_start'   => 'Первый високосный год',\n        'length'            => 'Продолжительность',\n        'length_days'       => '{1} :count день|[2,4] :count дня|[5,20] :count дней|[21,*] :count дн.',\n        'month'             => 'Месяц',\n        'months'            => 'Месяцы',\n        'moons'             => 'Луны',\n        'parameters'        => 'Параметры',\n        'recurring_until'   => 'Повторяется до какого года',\n        'reset'             => 'Сброс дня недели',\n        'seasons'           => 'Времена года',\n        'show_birthdays'    => 'Показать дни рождения',\n        'skip_year_zero'    => 'Пропустить нулевой год',\n        'start_offset'      => 'Смещение первого дня',\n        'suffix'            => 'Обозначение эры',\n        'week_names'        => 'Названия недель',\n        'weekdays'          => 'Дни недели',\n        'year'              => 'Год',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Вид, в котором календарь отображается по умолчанию.',\n        'format'            => 'Настройте формат даты календаря. По умолчанию \"d M, y s\". Значения букв: d - день, M - месяц, m - номер месяца, y - год, s - обозначение эры. Также разрешены пробел ( ), дефис (-) и запятая (,).',\n        'month_type'        => 'Промежуточные месяцы влияют на луны и времена года, но дни в них не являются определенными днями недели.',\n        'moon_offset'       => 'По умолчанию первое полнолуние происходит в первый день 0-го года. Изменение этого поля влияет на положение первого полнолуния. Это значение может быть отрицательным или положительным, но по модулю не может превышать длину первого месяца.',\n        'start_offset'      => 'По умолчанию календарь начинается с первого дня 0-го года. Изменение этого поля влияет на положение первого дня календаря.',\n    ],\n    'hints'         => [\n        'event_length'      => 'Сколько дней событие длится. Напоминание будет скрыто по истечению первых двух лет.',\n        'is_incrementing'   => 'Каждый день в 00:00 по UTC будет наступать новый день.',\n        'leap_year'         => 'Добавить високосные года в календарь.',\n        'months'            => 'В вашем календаре должно быть не меньше 2 месяцев.',\n        'moons'             => 'Если добавить в календарь луны, они будут отображаться в календаре во время своих полнолуний и новолуний. Если период лунного цикла длится дольше 10 дней, то первая и последняя четверти тоже будут отображаться.',\n        'parent_calendar'   => 'Календарь наследует напоминания и погодные явления от родительского календаря.',\n        'reset'             => 'Каждый месяц или год будет начинаться с первого дня недели.',\n        'seasons'           => 'Создайте времена года, просто указав, когда они наступают. Kanka позаботится обо всем остальном.',\n        'show_birthdays'    => 'Дни рождения персонажей, у которых есть напоминания о днях рождения в этом календаре, будут отображаться в этом календаре вплоть до даты их смерти.',\n        'skip_year_zero'    => 'По умолчанию, календарь начинается с нулевого года. Включите это, чтобы пропустить нулевой год.',\n        'weekdays'          => 'Дайте названия дням недели. Их должно быть не меньше двух.',\n        'weeks'             => 'Дайте названия наиболее важным неделям вашего календаря.',\n        'years'             => 'Некоторые года настолько важны, что у них есть отдельные названия.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month'     => 'Месяц',\n        'monthly'   => 'Месяц',\n        'year'      => 'Год',\n        'yearly'    => 'Год',\n    ],\n    'lists'         => [\n        'empty' => 'Создайте календарь для ведения учета датам, фестивалям или внтуриигровым событиям по ходу времени.',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Переключатель лет',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Промежуточный',\n        'standard'      => 'Обычный',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'По полнолуниям',\n                'fullmoon_name' => 'Полнолуние луны :moon',\n                'month'         => 'Ежемесячно',\n                'newmoon'       => 'По новолуниям',\n                'newmoon_name'  => 'Новолуние луны :moon',\n                'none'          => 'Нет',\n                'unnamed_moon'  => 'Луна :number',\n                'year'          => 'Ежегодно',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Никогда',\n            'month' => 'Каждый месяц',\n            'year'  => 'Каждый год',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Промежуточные дни',\n        'leap_year'     => 'Високосный год',\n        'months'        => 'Месяцы',\n        'weeks'         => 'Недели',\n        'years'         => 'Названия годов',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Продолжительность в днях',\n            'month'     => 'В конце какого месяца',\n            'name'      => 'Название промежуточного периода',\n        ],\n        'month'         => [\n            'alias' => 'Другое название',\n            'length'=> 'Число дней',\n            'name'  => 'Название месяца',\n            'type'  => 'Тип',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Дней между полнолуниями',\n            'name'      => 'Название луны',\n            'offset'    => 'Смещение первого полнолуния',\n        ],\n        'seasons'       => [\n            'day'   => 'Первый день',\n            'month' => 'Первый месяц',\n            'name'  => 'Название времени года',\n        ],\n        'weeks'         => [\n            'name'      => 'Название недели',\n            'number'    => 'Номер недели',\n        ],\n        'year'          => [\n            'name'      => 'Название года',\n            'number'    => 'Год',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Цвет',\n        'comment'           => 'День рожденья, фестиваль, солнцестояние',\n        'date'              => 'Текущая дата',\n        'leap_year_amount'  => 'Число лишних дней в високосном году',\n        'leap_year_month'   => 'Месяц, в который входят лишние дни',\n        'leap_year_offset'  => 'Каждые сколько лет год становится високосным',\n        'leap_year_start'   => 'Первый год, являющийся високосным',\n        'length'            => 'Продолжительность события в днях',\n        'months'            => 'Число месяцев в году',\n        'recurring_until'   => 'Последний год повторения (если здесь пусто, будет повторяться вечно)',\n        'seasons'           => 'Число времен года',\n        'suffix'            => 'Обозначение текущей эры (Например: н.э., до н.э.)',\n        'type'              => 'Тип календаря',\n        'weekdays'          => 'Число дней в неделе',\n    ],\n    'show'          => [\n        'missing_details'       => 'Этот календарь не может быть размещен. Для нормальной работы календаря в нем должно быть не меньше 2 месяцев и 2 дней недели.',\n        'moon_1first_quarter'   => 'Первая четверть луны :moon',\n        'moon_full'             => 'Полнолуние луны :moon',\n        'moon_last_quarter'     => 'Последняя четверть луны :moon',\n        'moon_new'              => 'Новолуние луны :moon',\n        'tabs'                  => [\n            'events'    => 'Напоминания',\n            'weather'   => 'Погода',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Сегодня и позже',\n        'before'=> 'Сегодня и раньше',\n    ],\n    'validators'    => [\n        'format'        => 'Формат даты недействителен.',\n        'moon_offset'   => 'Смещение первого полнолуния не может превышать длину первого месяца календаря.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Напоминания, длящиеся несколько лет, видны только в течение первых двух лет. Подробнее об этом рассказывает :documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/callouts.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscription'  => 'Посмотреть премиум планы',\n    ],\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Усилить :campaign',\n            'superboost'    => 'Супер-усилить :campaign',\n        ],\n        'learn-more'    => 'Что такое усиление?',\n        'limitation'    => 'Чтобы получить доступ к этой функции, кампания должна быть усилена.',\n        'limitations'   => [\n            'boosted'       => 'Чтобы получить доступ к этой функции, кампания должна быть усилена.',\n            'superboosted'  => 'Чтобы получить доступ к этой функции, кампания должна быть супер-усилена.',\n        ],\n        'multiple'      => 'Чтобы получить доступ к этим функциям, кампания должна быть усилена.',\n        'pitches'       => [\n            'element-class' => 'Присвойте этому элементу уникальный CSS класс с помощью :boosted-campaign.',\n            'icon'          => 'Откройте доступ к миллионам иконок от FontAwesome с помощью :boosted-campaign.',\n        ],\n        'titles'        => [\n            'boosted'       => 'Функция усиления',\n            'superboosted'  => 'Функция супер-усиления',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => 'Посмотреть все премиум функции',\n        'limitation'    => 'Чтобы получить доступ к этой функции, должны быть открыты премиум функции.',\n        'multiple'      => 'Чтобы получить доступ к этим функциям, должны быть открыты премиум функции.',\n        'title'         => 'Функция премиум кампаний',\n        'unlock'        => 'Открыть премиум функции для :campaign',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Оформите подписку, чтобы загружать файлы размером до :max МБ.',\n        'share-booster' => 'Усильте :campaign, чтобы увеличить максимальный размер загрузок для всех участников кампании.',\n        'share-premium' => 'Увеличьте максимальный размер загрузок файлов для всех участников кампании с помощью премиум кампании.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => 'Поздравляем!',\n    'goal_reached'      => 'Получено достижение',\n    'level'             => 'уровень :number',\n    'pitch'             => 'Достижения кампании предоставляют интересный способ отмечать новые рубежи, которых вы достигли на вашем пути по созданию нового мира. Следите за прогрессом, давайте игрок возможность оказать влияние, и демонстрируйте ваши успехи с помощью премиум кампании.',\n    'remaining'         => [\n        'generic'   => 'и будет достигнут следующий уровень.',\n    ],\n    'tagged'            => '{0} Ни одному объекту не добавлены тэги.|[2,*] :amount объектам добавлены тэги.',\n    'titles'            => [\n        'calendars'     => 'Хранитель времени',\n        'characters'    => 'Именователь',\n        'connections'   => 'Купидон',\n        'creatures'     => 'Животновод',\n        'dead'          => 'Убийца',\n        'events'        => 'Историограф',\n        'families'      => 'Родословная',\n        'locations'     => 'Градостроитель',\n        'markers'       => 'Навигатор',\n        'organisations' => 'Лидер',\n        'plugins'       => 'Кастомизатор',\n        'quests'        => 'Путеводитель',\n        'tags'          => 'Архивариус',\n        'themes'        => 'Художник',\n    ],\n    'tutorial'          => 'Достижения помогают отслеживать примечательную активность в кампании, такие как создание объектов или использование ключевых функций. Они имеют чисто информативную пользу и обновляются автоматически с ростом кампании.',\n];\n"
  },
  {
    "path": "lang/ru/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'accept'    => 'Принять',\n        'reject'    => 'Отклонить',\n    ],\n    'apply'         => [\n        'apply'         => 'Отправить',\n        'help'          => 'Эта кампания открыта для новых участников. Чтобы вступить в нее, заполните эту форму. Вы получите уведомление, когда админы кампании рассмотрят вашу заявку.',\n        'remove_text'   => 'вашу заявку',\n        'success'       => [\n            'apply' => 'Ваша заявка сохранена. Вы в любой момент можете ее изменить или удалить. Вы получите уведомление, когда админы кампании ее рассмотрят.',\n            'remove'=> 'Ваша заявка удалена.',\n            'update'=> 'Ваша заявка обновлена. Вы в любой момент можете ее изменить или удалить. Вы получите уведомление, когда админы кампании ее рассмотрят.',\n        ],\n        'title'         => 'Вступление в :name',\n    ],\n    'errors'        => [],\n    'fields'        => [\n        'application'   => 'Заявка',\n    ],\n    'helpers'       => [\n        'modal' => 'Публичные кампании с открытыми заявками позволяют пользователям подавать заявки на вступление в них.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Напишите свою заявку на вступление в кампанию.',\n    ],\n    'statuses'      => [],\n    'toggle'        => [\n        'closed'    => 'Не принимать заявки',\n        'label'     => 'Статус',\n        'open'      => 'Принимать заявки',\n        'success'   => 'Статус принятия заявок на вступление в кампанию обновлен.',\n        'title'     => 'Принятие заявок',\n    ],\n    'update'        => [\n        'approve'   => 'Выберите роль, в которую будет добавлен пользователь.',\n        'approved'  => 'Заявка принята.',\n        'reject'    => 'Вы можете написать пользователю пояснение причины отклонения его заявки.',\n        'rejected'  => 'Заявка отклонена.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Заголовок обзора кампании обновлен.',\n        'title'     => 'Редактирование заголовка обзора кампании',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Загрузить новый эскиз',\n    ],\n    'call-to-action'    => 'Загрузите собственные эскизы для всех персонажей, локаций или других объектов кампании. Эти изображения используются в различных списках.',\n    'create'            => [\n        'error'     => 'Ошибка при сохранении эскизов. Возможно, они уже есть у типа :type.',\n        'success'   => 'Эскиз для типа \":type\" создан.',\n        'title'     => 'Новый эскиз',\n    ],\n    'destroy'           => [\n        'success'   => 'Эскиз для типа \":type\" удален.',\n    ],\n    'index'             => [],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'export'    => 'Экспортировать данные кампании',\n    ],\n    'errors'    => [\n        'limit' => 'Кампания уже была экспортирована сегодня. Пожалуйста, попробуйте снова завтра.',\n    ],\n    'helpers'   => [],\n    'success'   => 'Идет подготовка экспорта кампании. Вы получите уведомление на Kanka, как только он будет готов к скачиванию.',\n    'title'     => 'Экспорт кампании',\n];\n"
  },
  {
    "path": "lang/ru/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close' => 'Закрыть',\n        'save'  => 'Сохранить',\n    ],\n    'breadcrumb'    => 'Галерея',\n    'destroy'       => [\n        'success'   => 'Картинка \":name\" удалена.',\n    ],\n    'fields'        => [\n        'created_by'    => 'Загружена',\n        'ext'           => 'Расширение',\n        'folder'        => 'Папка',\n        'image_used_in' => '{1}Является изображением 1 объекта.|[2,*]Является изображением :count объектов.',\n        'name'          => 'Название',\n        'size'          => 'Размер',\n    ],\n    'new_folder'    => [\n        'title' => 'Новая папка',\n    ],\n    'no_folder'     => 'Без папки',\n    'pitch'         => 'Загружайте изображения в галерею кампании прямо из текстового редактора.',\n    'placeholders'  => [\n        'search'    => 'Искать по названию...',\n    ],\n    'title'         => 'Галерея кампании :campaign',\n    'update'        => [\n        'success'   => 'Картинка обновлена.',\n    ],\n    'uploader'      => [\n        'add'           => 'Добавить новую',\n        'new_folder'    => 'Новая папка',\n        'or'            => 'или',\n        'select_file'   => 'Выберите файл',\n        'well'          => 'Перетащите файл для загрузки',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Превышение лимита',\n];\n"
  },
  {
    "path": "lang/ru/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'Отключить плагины',\n            'enable'    => 'Включить плагины',\n            'update'    => 'Обновить плагины',\n        ],\n        'changelog'         => 'История версий',\n        'disable'           => 'Отключить плагин',\n        'enable'            => 'Включить плагин',\n        'import'            => 'Импортировать',\n        'update'            => 'Обновить плагин',\n        'update_available'  => 'Доступно обновление!',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Удален :count плагин.|[2,4] Удалено :count плагина.|[5,*] Удалено :count плагинов.',\n        'disable'   => '{1} Отключен :count плагин.|[2,4] Отключено :count плагина.|[5,*] Отключено :count плагинов.',\n        'enable'    => '{1} Включен :count плагин.|[2,4] Включено :count плагина.|[5,*] Включено :count плагинов.',\n        'update'    => '{1} Обновлен :count плагин.|[2,4] Обновлено :count плагина.|[5,*] Обновлено :count плагинов.',\n    ],\n    'destroy'       => [\n        'success'   => 'Плагин \":plugin\" удален.',\n    ],\n    'disabled'      => [\n        'success'   => 'Плагин \":plugin\" отключен.',\n    ],\n    'empty_list'    => 'В данный момент в кампании нет плагинов. Перейдите в каталог, чтобы выбрать и установить плагины, а затем вернитесь сюда и активируйте их.',\n    'enabled'       => [\n        'success'   => 'Плагин \":plugin\" включен.',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Недействительный плагин.',\n    ],\n    'fields'        => [\n        'name'      => 'Название плагина',\n        'status'    => 'Статус',\n        'type'      => 'Тип плагина',\n    ],\n    'import'        => [\n        'button'                => 'Импортировать',\n        'created'               => 'Созданы следующие объекты:',\n        'helper'                => 'Вы собираетесь импортировать объекты из плагина :plugin в количестве :count. Если плагин ранее уже импортировался, ваши изменения импортированных объектов могут быть утеряны.',\n        'no_new_entities'       => 'Не импортированных объектов не обнаружено.',\n        'option_only_import'    => 'Импортировать только новые объекты, пропуская существующие.',\n        'option_private'        => 'Импортировать все объекты приватными.',\n        'success'               => '{1} Импортирован :count объект из плагина \":plugin\".|[2,4] Импортировано :count объекта из плагина \":plugin\".|[5,*] Импортировано :count объектов из плагина \":plugin\".',\n        'title'                 => 'Импортирование :plugin',\n        'updated'               => 'Обновлены следующие объекты:',\n    ],\n    'info'          => [\n        'helper'    => 'При выходе новой версии плагина кампании, его можно будет обновить.',\n        'title'     => 'Обновления плагина :plugin',\n        'updates'   => 'Обновления',\n    ],\n    'pitch'         => 'Устанавливайте и настраивайте плагины, загруженные в :marketplace.',\n    'status'        => [\n        'disabled'  => 'Отключен',\n        'enabled'   => 'Включен',\n    ],\n    'templates'     => [\n        'name'  => ':name от :user',\n    ],\n    'title'         => 'Плагины - :name',\n    'types'         => [\n        'attribute' => 'Шаблон атрибутов',\n        'pack'      => 'Пакет объектов',\n        'theme'     => 'Тема',\n    ],\n    'update'        => [\n        'success'   => 'Плагин \":plugin\" обновлен.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [],\n    'title'     => 'Изменение доступности кампании',\n    'update'    => [\n        'private'   => 'Теперь это приватная кампания. Она доступна только ее участникам.',\n        'public'    => 'Теперь эта публичная кампания. Прежде, чем она появится на странице :public-campaigns, может пройти некоторое время.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'   => 'Восстановить',\n    ],\n    'error'     => 'При попытке восстановления объектов произошла ошибка.',\n    'fields'    => [\n        'deleted'   => 'Удален',\n    ],\n    'title'     => 'Восстановление объектов - :campaign',\n];\n"
  },
  {
    "path": "lang/ru/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'status'    => 'Статус: :status',\n    ],\n    'public'    => [],\n    'show'      => [\n        'title' => 'Разрешения роли :role - :campaign',\n    ],\n    'toggle'    => [\n        'disabled'  => 'Участники роли :role больше не могут :action :entities.',\n        'enabled'   => 'Участники роли :role теперь могут :action :entities.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Восстановить умолчания',\n    ],\n    'call-to-action'    => 'Настройте порядок, иконки и названия элементов боковой панели кампании.',\n    'helpers'           => [\n        'reordering'    => 'Перетаскивайте иконки, чтобы изменить порядок элементов.',\n    ],\n    'reset'             => [\n        'success'   => 'Настройки по умолчанию для боковой панели восстановлены.',\n        'title'     => 'Восстановление настроек по умолчанию',\n        'warning'   => 'Вы уверены, что хотите восстановить значения по умолчанию для настроек боковой панели?',\n    ],\n    'success'           => 'Настройки боковой панели сохранены.',\n    'title'             => 'Боковая панель - :campaign',\n];\n"
  },
  {
    "path": "lang/ru/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Календари',\n            'title' => 'Хранитель Времени',\n        ],\n        'murderer'  => [\n            'goal'  => 'Мертвые персонажи',\n            'title' => 'Убийца',\n        ],\n    ],\n    'targets'       => [],\n    'titles'        => [\n        'calendars' => 'Хранитель Времени уровень :level',\n        'characters'=> 'Дающий Имена уровень :level',\n        'dead'      => 'Убийца уровень :level',\n        'families'  => 'Семьянин уровень :level',\n        'locations' => 'Строитель уровень :level',\n        'quests'    => 'Вдохновитель уровень :level',\n        'races'     => 'Животновод уровень :level',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'current'   => 'Текущая тема: :theme',\n        'disable'   => 'Отключить',\n        'enable'    => 'Включить',\n        'new'       => 'Новый стиль',\n    ],\n    'bulks'     => [\n        'delete'    => '{1} Удален :count стиль.|[2,4] Удалено :count стиля.|[5,20] Удалено :count стилей.|{21} Удален :count стиль.|[22,24] Удалено :count стиля.|[25,*] Удалено :count стилей.',\n        'disable'   => '{1} Отключен :count стиль.|[2,4] Отключено count стиля.|[5,20] Отключено :count стилей.|{21} Отключен :count стиль.|[22,24] Отключено :count стиля.|[25,*] Отключено :count стилей.',\n        'enable'    => '{1} Включен :count стиль.|[2,4] Включено count стиля.|[5,20] Включено :count стилей.|{21} Включен :count стиль.|[22,24] Включено :count стиля.|[25,*] Включено :count стилей.',\n    ],\n    'create'    => [\n        'success'   => 'Новый стиль создан.',\n        'title'     => 'Новый стиль',\n    ],\n    'delete'    => [\n        'success'   => 'Стиль \":name\" удален.',\n    ],\n    'errors'    => [\n        'max_content'   => 'CSS правило не может быть содержать более :amount символов.',\n        'max_reached'   => 'Достигнуто максимальное количество стилей (:max).',\n    ],\n    'fields'    => [\n        'content'       => 'CSS',\n        'is_enabled'    => 'Включен',\n        'length'        => 'Длина',\n        'modified'      => 'Изменен',\n        'name'          => 'Название',\n        'order'         => 'Порядок',\n    ],\n    'helpers'   => [\n        'here'  => 'в нашем блоге',\n        'main'  => 'Вы можете создавать собственные CSS стили для своих усиленных кампаний. Эти стили применяются после всех тем из Каталога, примененных к кампании. Больше о стилях кампаний можно узнать :here.',\n    ],\n    'pitch'     => 'Напишите собственный код на CSS, для полного контроля над видом и атмосферой кампании.',\n    'reorder'   => [\n        'save'      => 'Сохранить новый порядок',\n        'success'   => '{1} Изменен порядок :count стиля.|[2,20] Изменен порядок :count стилей.|{21} Изменен порядок :count стиля.|[22,*] Изменен порядок :count стилей.',\n        'title'     => 'Изменение порядка стилей',\n    ],\n    'theme'     => [\n        'success'   => 'Тема кампании обновлена.',\n        'title'     => 'Изменение темы кампании',\n    ],\n    'title'     => 'Стили кампании',\n    'update'    => [\n        'success'   => 'Стиль \":name\" обновлен.',\n        'title'     => 'Редактирование стиля',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/campaigns.php",
    "content": "<?php\n\nreturn [\n    'actions'                           => [],\n    'create'                            => [\n        'success'   => 'Кампания \":name\" создана.',\n        'title'     => 'Новая кампания',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Кампания \":name\" обновлена.',\n    ],\n    'entity_note_visibility'            => [],\n    'entity_personality_visibilities'   => [\n        'private'   => 'Скрывать личные качества новых персонажей',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Скрывать новые объекты',\n    ],\n    'errors'                            => [\n        'access'        => 'У вас нет доступа к этой кампании.',\n        'premium'       => 'Эта функция доступна только премиум кампаниям.',\n        'unknown_id'    => 'Неизвестная кампания.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'Усиливает',\n        'entity_count'              => 'Объекты',\n        'entry'                     => 'Описание мира',\n        'followers'                 => 'Отслеживают',\n        'genre'                     => 'Жанр(ы)',\n        'header_image'              => 'Фон заголовка домашней панели',\n        'image'                     => 'Изображение боковой панели',\n        'locale'                    => 'Язык',\n        'name'                      => 'Название',\n        'open'                      => 'Принимать заявки на вступление',\n        'premium'                   => 'Премиум открыт :name',\n        'public'                    => 'Доступность кампании',\n        'public_campaign_filters'   => 'Фильтры для публичной кампании',\n        'superboosted'              => 'Супер-усиливает',\n        'system'                    => 'Система',\n        'theme'                     => 'Тема',\n        'vanity'                    => 'Уникальный URL',\n    ],\n    'following'                         => 'Отслеживаемые',\n    'helpers'                           => [\n        'boosted'                   => 'Некоторые функции стали доступны благодаря усилению кампании. Подробнее здесь: :settings.',\n        'css'                       => 'Напишите здесь собственный код на CSS, и он будет использоваться на страницах вашей кампании. Пожалуйста, примите во внимание, что любое злоупотребление этой функцией может привести к удалению вашего CSS. Повторные или серьезные нарушения могут привести к удалению вашей кампании.',\n        'dashboard'                 => 'Настройте вид виджета заголовка кампании на домашней панели с помощью следующих полей.',\n        'excerpt'                   => 'Содержимое этого поля будет отображено в виджете заголовка кампании на домашней панели. Напишите пару строк, знакомящих с вашим миром. Если оставить это поле пустым, то будет использоваться первая 1000 символов статьи кампании.',\n        'header_image'              => 'Изображение для фона заголовка кампании на домашней панели.',\n        'hide_history'              => 'Доступ к истории объектов (журналу изменений) будут иметь только участники с ролью :admin.',\n        'hide_members'              => 'Доступ к списку участников кампании будут иметь только участники с ролью :admin.',\n        'locale'                    => 'Язык, на котором написана ваша кампания. Это нужно для генерации контента и группировки публичных кампаний.',\n        'name'                      => 'Название кампании или мира может быть любым, но оно должно содержать не меньше 4 букв или цифр.',\n        'no_entry'                  => 'Похоже у этой кампании еще нет описания! Давайте это исправим.',\n        'premium'                   => 'Некоторые функции доступны только премиум кампаниям. Подробнее здесь: :settings.',\n        'public_campaign_filters'   => 'Помогите другим найти эту кампанию среди других публичных кампаний, предоставив следующую информацию.',\n        'public_no_visibility'      => 'Внимание! Ваша кампания является публичной, но у роли \"Посетитель\" нет доступа к каким-либо объектам. :fix.',\n        'system'                    => 'Если ваша кампания публичная, то ее система будет показана здесь: :link.',\n        'systems'                   => 'Чтобы не заваливать пользователей настройками, некоторые функции Kanka (статблок монстра D&D 5 ред.) доступны только определенным ролевым системам. Добавьте сюда поддерживаемые системы, чтобы открыть эти функции.',\n        'theme'                     => 'Установите тему кампании, не зависящую от предпочтений пользователя.',\n        'view_public'               => 'Чтобы увидеть вашу кампанию, как ее видит посетитель, откройте следующую ссылку в режиме инкогнито: :link.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Скопировать ссылку в буфер обмена',\n            'link'  => 'Пригласить',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Создать ссылку',\n            ],\n            'success_link'  => 'Ссылка создана: :link',\n            'title'         => 'Приглашение в :campaign',\n        ],\n        'destroy'               => [\n            'success'   => 'Приглашение удалено.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Этот токен уже использовался или этой кампании больше не существует.',\n            'invalid_token'     => 'Этот токен больше не действителен.',\n            'join'              => 'Пожалуйста войдите или зарегистрируйтесь, чтобы присоединиться к кампании \":campaign\".',\n        ],\n        'fields'                => [\n            'created'   => 'Создана',\n            'role'      => 'Роль',\n            'token'     => 'Токен',\n            'type'      => 'Тип',\n            'usage'     => 'Лимит на число переходов',\n        ],\n        'helpers'               => [\n            'role'  => 'Пользователь должен присоединиться, прежде чем стать админом.',\n            'usage' => 'Сколько раз по ссылке можно перейти до ее деактивации.',\n        ],\n        'unlimited_validity'    => 'Без лимита',\n        'usages'                => [\n            'five'      => '5 переходов',\n            'no_limit'  => 'Без лимита',\n            'once'      => '1 переход',\n            'ten'       => '10 переходов',\n        ],\n    ],\n    'leave'                             => [\n        'action'            => 'Покинуть кампанию',\n        'confirm'           => 'Вы уверены, что хотите покинуть кампанию :name? Вы не сможете снова получить к ней доступ, пока ее админ не пригласит вас обратно.',\n        'confirm-button'    => 'Да, покинуть кампанию',\n        'error'             => 'Невозможно покинуть кампанию.',\n        'fix'               => 'К участникам кампании',\n        'no-admin-left'     => 'Покинуть кампанию невозможно, поскольку в этом случае в ней не останется админов. Добавьте еще одного участника в роль админа и попробуйте снова.',\n        'success'           => 'Вы покинули кампанию \":campaign\".',\n        'title'             => 'Выход из кампании',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'Удалить из кампании',\n            'switch'        => 'Тестировать',\n            'switch-back'   => 'Конец тестирования',\n            'switch-entity' => 'Тестировать',\n        ],\n        'fields'                => [\n            'banned'        => 'Участник заблокирован',\n            'joined'        => 'Дата присоединения',\n            'last_login'    => 'Последний вход',\n            'name'          => 'Пользователь',\n            'role'          => 'Роль',\n            'roles'         => 'Роли',\n        ],\n        'helpers'               => [\n            'switch'    => 'Тестировать разрешения пользователя',\n        ],\n        'impersonating'         => [\n            'message'   => 'Вы просматриваете кампанию как другой пользователь. Некоторые функции отключены, но остальные работают именно так, как их видит этот пользователь.',\n            'title'     => 'Тестирование :name',\n        ],\n        'invite'                => [\n            'description'   => 'Чтобы добавить участников в кампанию, создайте пригласительную ссылку и отправьте им полученный URL. После принятия приглашения, они будут добавлены в кампанию как участники указанной роли.',\n            'more'          => 'Вы можете создать больше ролей на :link.',\n            'title'         => 'Приглашения',\n        ],\n        'removal'               => 'Вы удаляете участника \":member\" из кампании.',\n        'roles'                 => [\n            'member'    => 'Участник',\n            'owner'     => 'Админ',\n            'player'    => 'Игрок',\n            'public'    => 'Посетитель',\n            'viewer'    => 'Наблюдатель',\n        ],\n        'switch_back_success'   => 'Теперь вы снова просматриваете кампанию от своего лица.',\n    ],\n    'modules'                           => [],\n    'open_campaign'                     => [],\n    'options'                           => [],\n    'overview'                          => [\n        'entity-count'      => '{0} Нет объектов|{1} :amount объект|[2,4] :amount объекта|[5,*] :amount объектов',\n        'follower-count'    => '{0} Нет отслеживающих|{1} :amount отслеживает|[2,*] :amount отслеживают',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Домашняя панель',\n        'privacy'   => 'Настройки доступа',\n        'setup'     => 'Настройка',\n        'sharing'   => 'Доступность',\n        'systems'   => 'Системы',\n        'ui'        => 'Интерфейс',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Название языка',\n        'name'      => 'Название вашей кампании',\n        'system'    => 'D&D, Pathfinder, Fate, DSA',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Не показывать',\n        'private'   => 'Скрывать',\n        'visible'   => 'Показывать',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'По умолчанию кампании являются приватными, но их можно сделать публичными. Это делает их открытыми для всех, а если в них есть объекты доступные роли :public-role, то и доступными здесь: :public-campaigns. Публичные кампании видны всем, но чтобы ее содержимое было открытым, роли :public-role нужны соответствующие разрешения.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'Создать роль',\n            'duplicate'     => 'Дубликат роли',\n            'permissions'   => 'Настройка разрешений',\n            'rename'        => 'Переименовать',\n            'save'          => 'Сохранить роль',\n        ],\n        'admin_role'    => 'ролью админа',\n        'bulks'         => [\n            'delete'    => '{1} Удалена :count роль.|[2,4] Удалено :count роли.|[5,*] Удалено :count ролей.',\n            'edit'      => '{1} Обновлена :count роль.|[2,4] Обновлено :count роли.|[5,*] Обновлено :count ролей.',\n        ],\n        'create'        => [\n            'success'   => 'Роль \":name\" создана.',\n            'title'     => 'Новая роль',\n        ],\n        'destroy'       => [\n            'success'   => 'Роль \":name\" удалена.',\n        ],\n        'edit'          => [\n            'success'   => 'Роль \":name\" обновлена.',\n            'title'     => 'Редактирование роли :name',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Скопировать разрешения',\n            'name'              => 'Название',\n            'permissions'       => 'Разрешения',\n            'type'              => 'Тип',\n            'users'             => 'Пользователи',\n        ],\n        'helper'        => [\n            '1'                     => 'Ролей в кампании может быть сколько угодно. Роль :admin автоматически дает доступ ко всему, что есть в кампании. Остальным ролям можно задать отдельные разрешения для каждого типа объектов (персонажи, локации и т. д.).',\n            '2'                     => 'Разрешения отдельным объектам можно задавать во вкладке \"Разрешения\" при их редактировании. Эта вкладка отображается, если в кампании несколько ролей или участников.',\n            '3'                     => 'Можно либо последовать \"принципу исключений\", открыв ролям доступ ко всем объектам, и скрывать отдельные объекты от всех кроме админов, либо не давать ролям много разрешений, но сделать все объекты видимыми.',\n            '4'                     => 'Ролей в премиум кампании может быть сколько угодно.',\n            'permissions_helper'    => 'Скопировать все разрешения этой роли: как к модулям, так и к объектам.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'У роли \"Посетитель\" есть разрешения, хотя это приватная кампания. Это можно изменить во вкладке \"Доступность\" при редактировании кампании.',\n            'empty_role'            => 'В этой роли пока нет участников.',\n            'role_admin'            => 'Роль :name автоматически дает участнику доступ ко всему в кампании.',\n            'role_permissions'      => 'Выберите действия, к которым будет иметь доступ роль \":name\", для каждого типа объектов.',\n        ],\n        'members'       => 'Участники',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'Разрешения раздела \"Кампания\" позволяют следующее:',\n                'entities'  => 'Вот краткое пояснение того, что участники этой роли могут делать при каждом разрешении.',\n                'more'      => 'Для более подробного объяснения, смотрите наше видео на YouTube.',\n                'title'     => 'Пояснение разрешений',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'       => 'Создать',\n                'dashboard' => 'Домашняя панель',\n                'delete'    => 'Удалить',\n                'edit'      => 'Изменить',\n                'gallery'   => [\n                    'browse'    => 'Просматривать',\n                    'manage'    => 'Полный контроль',\n                    'upload'    => 'Загружать изображения',\n                ],\n                'manage'    => 'Управление',\n                'members'   => 'Участники',\n                'permission'=> 'Разрешения',\n                'read'      => 'Смотреть',\n                'toggle'    => 'Изменить для всех',\n            ],\n            'helpers'   => [\n                'add'       => 'Позволяет создавать объекты этого типа. Участникам роли будет автоматически разрешено редактировать созданные ими объекты и просматривать их, если у роли нет разрешений на просмотр и редактирование.',\n                'dashboard' => 'Позволяет редактировать домашние панели и виджеты домашних панелей.',\n                'delete'    => 'Позволяет удалять все объекты этого типа.',\n                'edit'      => 'Позволяет редактировать все объекты этого типа.',\n                'gallery'   => [\n                    'browse'    => 'Позволяет просматривать галерею и использовать изображения из галереи.',\n                    'manage'    => 'Позволяет делать в галерее все то, что могут админы, включая редактирование и удаление изображений.',\n                    'upload'    => 'Позволяет загружать новые изображения в галерею. Участник будет видеть только загруженные им изображения, если у него нет разрешения на просмотр галереи.',\n                ],\n                'manage'    => 'Позволяет редактировать кампанию как админ, но не позволяет удалять ее.',\n                'members'   => 'Позволяет приглашать новых участников в кампанию.',\n                'not_public'=> 'Эта кампания не публичная. Разрешения посетительской роли можно редактировать, но они ни на что не повлияют. Сначала сделайте кампанию публичной.',\n                'permission'=> 'Позволяет настраивать разрешения объектов этого типа, которые участник может редактировать.',\n                'read'      => 'Позволяет просматривать все объекты этого типа, кроме скрытых.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Название роли',\n        ],\n        'title'         => 'Роли - :name',\n        'types'         => [\n            'owner'     => 'Админ',\n            'public'    => 'Посетитель',\n            'standard'  => 'Основной',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Добавить участника',\n                'remove'        => ':user из роли \":role\"',\n                'remove_user'   => 'Удалить пользователя из роли',\n            ],\n            'create'    => [\n                'success'   => 'Пользователь добавлен в роль.',\n                'title'     => 'Добавление участника в роль :name',\n            ],\n            'destroy'   => [\n                'success'   => 'Пользователь удален из роли.',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'Во избежание злоупотребления лишить другого участника роли :admin невозможно. Если возникнут проблемы, свяжитесь с нами на :discord или напишите на :email.',\n                'needs_more_roles'  => 'Вам нужно получить другую роль в этой кампании, прежде чем вы сможете лишить себя роли \":admin\".',\n            ],\n            'fields'    => [\n                'name'  => 'Имя',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'Подключить',\n        ],\n        'boosted'       => 'Эта функция находится в предварительном доступе и пока доступна только для :boosted.',\n        'deprecated'    => [\n            'help'  => 'Этот модуль устарел, то есть больше не обновляется и не тестируется на баги при обновлениях Kanka. Пользуйтесь им, принимая во внимание, что рано им поздно он будет удален из Kanka.',\n            'title' => 'Устаревший',\n        ],\n        'disabled'      => 'Модуль :module отключен.',\n        'enabled'       => 'Модуль :module подключен.',\n        'errors'        => [\n            'module-disabled'   => 'Запрошенный модуль в данный момент отключен в настройках кампании. :fix.',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Создавайте способности, будь то навыки, заклинания или силы, и присваивайте их объектам.',\n            'assets'            => 'Загружайте файлы, добавляйте ссылки и псевдонимы для отдельных объектов.',\n            'bookmarks'         => 'Создавайте закладки для объектов или фильтрованных списков, которые будут отображаться в боковой панели.',\n            'calendars'         => 'Здесь можно создавать календари для вашего мира.',\n            'characters'        => 'Создавайте и отслеживайте личностей, населяющих ваш мир.',\n            'conversations'     => 'Вымышленные разговоры между персонажами или пользователями кампании.',\n            'creatures'         => 'Создавайте существ, животных и монстров с помощью модуля существ.',\n            'dice_rolls'        => 'Упрощает работу с бросками костей тем, кто использует Kanka для RPG кампаний.',\n            'entity_attributes' => 'Следите за атрибутами объектов этого мира, например HP или СКОРОСТЬ.',\n            'events'            => 'Праздники, фестивали, катастрофы, дни рожденья, войны.',\n            'families'          => 'Кланы и семьи, их члены и связи.',\n            'inventories'       => 'Создавайте инвентари для своих объектов.',\n            'items'             => 'Оружие, транспорт, реликвии, зелья.',\n            'journals'          => 'Наблюдения, записанные персонажами, или подготовка ДМа к сессии.',\n            'locations'         => 'Планеты, схемы, континенты, реки, государства, поселения, храмы, таверны.',\n            'maps'              => 'Создавайте карты со слоями и метками, указывающими на другие объекты кампании.',\n            'notes'             => 'Наука, природа, история, магия, культура.',\n            'organisations'     => 'Культы, религии, фракции, гильдии.',\n            'quests'            => 'Создавайте разнообразные квесты с персонажами и локациями.',\n            'races'             => 'Описывайте происхождение, национальность и расовые качества персонажей вашего мира с помощью модуля рас.',\n            'tags'              => 'У каждого объекта могут быть тэги. У тэгов могут быть свои тэги, а статьи можно фильтровать по тэгам.',\n            'timelines'         => 'Расскажите историю вашего мира с помощью хронологий.',\n            'whiteboards'       => 'Рисуйте и пишите на досках, чтобы наглядно распланировать свои мир и цели.',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'Помогите другим найти вашу кампанию на странице :public-campaigns, добавив подходящие тэги. Это важно только для публичных кампаний.',\n        'language'  => 'Язык статей кампании.',\n        'system'    => 'Используемая вами система (например D&D 5e, Pathfinder)',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Редактировать',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Достижения',\n            'customisation'     => 'Настройка',\n            'danger'            => 'Опасное',\n            'data'              => 'Данные',\n            'default-images'    => 'Эскизы',\n            'defaults'          => 'Умолчания',\n            'deletion'          => 'Удаление',\n            'export'            => 'Экспорт',\n            'import'            => 'Импорт',\n            'logs'              => 'Журналы',\n            'management'        => 'Сообщество',\n            'members'           => 'Участники',\n            'plugins'           => 'Плагины',\n            'recovery'          => 'Восстановление',\n            'roles'             => 'Роли',\n            'sidebar'           => 'Боковая панель',\n            'stats'             => 'Статистика',\n            'styles'            => 'Стили',\n            'webhooks'          => 'Webhooks',\n        ],\n        'title'     => 'Основное - :name',\n    ],\n    'status'                            => [\n        'free'      => 'Премиум функции не доступны.',\n        'legacy'    => [\n            'title' => 'Функции усиления (старое)',\n        ],\n        'premium'   => 'Премиум функции открыты :name.',\n        'title'     => 'Премиум функции',\n    ],\n    'superboosted'                      => [],\n    'themes'                            => [\n        'none'  => 'Не важно (по выбору пользователя)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Видны только админам кампании',\n            'visible'   => 'Видны участникам',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Журналы изменений объектов',\n            'member_list'       => 'Список участников кампании',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Настройте, кто может видеть, просматривать и редактировать объекты кампании.',\n            'member-list'       => 'Настройте, кому виден список участников кампании.',\n            'theme'             => 'Назначьте тему, не зависящую от предпочтений участника, или позвольте каждому участнику выбирать свою тему.',\n        ],\n        'members'           => [\n            'hidden'    => 'Виден только админам кампании',\n            'visible'   => 'Виден участникам',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Приватная',\n        'public'    => 'Публичная',\n        'unlisted'  => 'Публичная (скрытая)',\n    ],\n    'warning'                           => [],\n];\n"
  },
  {
    "path": "lang/ru/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_appearance'    => 'Добавить внешнее качество',\n        'add_personality'   => 'Добавить личное качество',\n    ],\n    'conversations' => [],\n    'create'        => [\n        'title' => 'Новый персонаж',\n    ],\n    'destroy'       => [],\n    'dice_rolls'    => [],\n    'edit'          => [],\n    'fields'        => [\n        'age'                       => 'Возраст',\n        'is_appearance_pinned'      => 'Закрепить внешность',\n        'is_dead'                   => 'Мертв(а)',\n        'is_personality_pinned'     => 'Закрепить личность',\n        'is_personality_visible'    => 'Показывать личные качества',\n        'life'                      => 'Жизнь',\n        'physical'                  => 'Физиология',\n        'pronouns'                  => 'Местоимения',\n        'sex'                       => 'Гендер',\n        'title'                     => 'Титул',\n        'traits'                    => 'Черты',\n    ],\n    'helpers'       => [\n        'age'   => 'Этот объект можно связать с календарем вашей кампании, чтобы его возраст вычислялся автоматически. :more.',\n    ],\n    'hints'         => [\n        'is_appearance_pinned'      => 'Внешние качества персонажа будут показаны ниже статьи во вкладке \"Основное\".',\n        'is_dead'                   => 'Укажите, мертв ли этот персонаж.',\n        'is_personality_visible'    => 'Вы можете скрыть раздел \"Личные качества\" от всех пользователей, кроме админов.',\n        'personality_not_visible'   => 'Личные качества этого персонажа могут видеть только админы.',\n        'personality_visible'       => 'Личные качества этого персонажа могут видеть все.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'maps'          => [],\n    'organisations' => [\n        'create'    => [\n            'success'   => 'Персонаж добавлен в организацию.',\n            'title'     => 'Новая организация персонажа :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Организация персонажа удалена.',\n        ],\n        'edit'      => [\n            'success'   => 'Организация персонажа обновлена.',\n            'title'     => 'Редактирование организации персонажа :name',\n        ],\n        'fields'    => [\n            'role'  => 'Роль',\n        ],\n    ],\n    'placeholders'  => [\n        'age'               => 'Возраст',\n        'appearance_entry'  => 'Описание',\n        'appearance_name'   => 'Глаза, волосы, кожа, рост',\n        'name'              => 'Полное имя персонажа',\n        'personality_entry' => 'Описание',\n        'personality_name'  => 'Тип  (цели, поведение, страхи, принципы)',\n        'physical'          => 'Физиология',\n        'pronouns'          => 'Он, она, они',\n        'sex'               => 'Гендер',\n        'title'             => 'Титул',\n        'traits'            => 'Черты',\n        'type'              => 'Персонаж игрока, Божество, NPC',\n    ],\n    'quests'        => [\n        'helpers'   => [\n            'quest_giver'   => 'Квесты, которые этот персонаж предлагает.',\n            'quest_member'  => 'Квесты, в которых этот персонаж участвует.',\n        ],\n    ],\n    'sections'      => [\n        'appearance'    => 'Внешность',\n        'personality'   => 'Личность',\n    ],\n    'show'          => [],\n    'warnings'      => [\n        'personality_hidden'    => 'Вы не можете редактировать личные качества этого персонажа.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Голубой',\n    'black'         => 'Черный',\n    'blue'          => 'Синий',\n    'brown'         => 'Коричневый',\n    'green'         => 'Зеленый',\n    'grey'          => 'Серый',\n    'light-blue'    => 'Синий',\n    'maroon'        => 'Малиновый',\n    'navy'          => 'Темно-синий',\n    'none'          => 'Нет',\n    'orange'        => 'Оранжевый',\n    'pink'          => 'Розовый',\n    'purple'        => 'Фиолетовый',\n    'red'           => 'Красный',\n    'teal'          => 'Бирюзовый',\n    'white'         => 'Белый',\n    'yellow'        => 'Желтый',\n];\n"
  },
  {
    "path": "lang/ru/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'      => 'усиления кампании',\n    'superboosted-campaign' => 'супер-усиления кампании',\n];\n"
  },
  {
    "path": "lang/ru/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новый разговор',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_closed'     => 'Закрыт',\n        'messages'      => 'Сообщения',\n        'participants'  => 'Участники',\n    ],\n    'hints'         => [\n        'participants'  => 'Добавьте в разговор участников, нажав на иконку :icon справа вверху.',\n    ],\n    'index'         => [],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Сообщение удалено.',\n        ],\n        'is_updated'    => 'Обновлено',\n        'load_previous' => 'Загрузить предыдущие сообщения',\n        'placeholders'  => [\n            'message'   => 'Ваше сообщение',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Участник \":entity\" добавлен в разговор.',\n        ],\n        'destroy'   => [\n            'success'   => 'Участник \":entity\" удален из разговора.',\n        ],\n        'modal'     => 'Участники',\n        'title'     => 'Участники :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Название разговора',\n        'type'  => 'Игра, подготовка, сюжет',\n    ],\n    'show'          => [\n        'is_closed' => 'Разговор закрыт.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Участники',\n    ],\n    'targets'       => [\n        'characters'    => 'Персонажи',\n        'members'       => 'Участники кампании',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новое существо',\n    ],\n    'creatures'     => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'placeholders'  => [\n        'type'  => 'Травоядное, водное, мифическое',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/ru/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Действия',\n        'apply'             => 'Применить',\n        'back'              => 'Назад',\n        'change'            => 'Изменить',\n        'copy'              => 'Копировать',\n        'copy_mention'      => 'Копировать [упоминание]',\n        'copy_to_campaign'  => 'Копировать в кампанию',\n        'disable'           => 'Выключить',\n        'enable'            => 'Включить',\n        'explore_view'      => 'Свернутый вид',\n        'export'            => 'Экспортировать (PDF)',\n        'find_out_more'     => 'Узнать больше',\n        'go_to'             => 'Перейти к :name',\n        'help'              => 'Справка',\n        'json-export'       => 'Экспортировать (JSON)',\n        'move'              => 'Переместить',\n        'new'               => 'Создать',\n        'new_child'         => 'Потомок',\n        'new_post'          => 'Новый пост',\n        'next'              => 'Далее',\n        'print'             => 'Распечатать',\n        'reset'             => 'Сброс',\n        'transform'         => 'Трансформировать',\n    ],\n    'add'               => 'Добавить',\n    'alerts'            => [\n        'copy_attribute'    => 'Упоминание атрибута скопировано в буфер обмена.',\n        'copy_invite'       => 'Пригласительная ссылка скопирована в буфер обмена.',\n        'copy_mention'      => 'Продвинутое упоминание объекта скопировано в буфер обмена.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Редактор и тэги',\n            'permissions'   => 'Изменить разрешения',\n        ],\n        'age'           => [\n            'helper'    => 'Перед числом можно поставить + или - , чтобы увеличить или уменьшить возраст на это число.',\n        ],\n        'buttons'       => [\n            'label' => 'Выбранное',\n        ],\n        'edit'          => [\n            'tagging'   => 'Действие с тэгами',\n            'tags'      => [\n                'add'       => 'Добавить',\n                'remove'    => 'Удалить',\n            ],\n            'title'     => 'Редактирование нескольких объектов',\n        ],\n        'errors'        => [\n            'admin'     => 'Скрывать и открывать объекты могут только админы кампании.',\n            'general'   => 'При обработке вашего действия произошла ошибка. Пожалуйста, попробуйте снова и свяжитесь с нами, если проблема сохранится. Сообщение ошибки: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Перезапись',\n            ],\n            'helpers'   => [\n                'override'  => 'Разрешения выбранных объектов будут перезаписаны. Если не включать, то выбранные разрешения будут добавлены к уже существующим.',\n            ],\n            'title'     => 'Изменение разрешений нескольких объектов',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Применение шаблона к нескольким объектам',\n    ],\n    'cancel'            => 'Отмена',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Копирование объектов в другую кампанию',\n        'panel'         => 'Копировать',\n        'title'         => 'Копирование :name в другую кампанию',\n    ],\n    'create'            => 'Создать',\n    'datagrid'          => [\n        'empty' => 'Здесь пока ничего нет.',\n    ],\n    'delete_modal'      => [\n        'callout'       => 'Псст!',\n        'permanent'     => 'Это действие необратимо.',\n        'recoverable'   => 'Объекты можно восстанавливать в течение :day дней с помощью :boosted-campaign.',\n        'title'         => 'Подтверждение удаления',\n    ],\n    'destroy_many'      => [],\n    'edit'              => 'Редактировать',\n    'errors'            => [\n        'boosted_campaigns'     => 'Этой функцией обладают только :boosted.',\n        'unavailable_feature'   => 'Функция недоступна.',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'calendar_date'     => 'Дата календаря',\n        'child'             => 'Потомок',\n        'closed'            => 'Закрыт',\n        'colour'            => 'Цвет',\n        'copy_abilities'    => 'Копировать способности',\n        'copy_inventory'    => 'Копировать инвентарь',\n        'copy_links'        => 'Копировать ссылки объекта',\n        'copy_permissions'  => 'Копировать разрешения (и заменить значения во вкладке разрешений)',\n        'copy_posts'        => 'Копировать посты (и их разрешения)',\n        'creator'           => 'Создатель',\n        'date_range'        => 'Диапазон дат',\n        'excerpt'           => 'Краткое описание',\n        'has_entity_files'  => 'Есть загруженные файлы',\n        'has_image'         => 'Есть изображение',\n        'header_image'      => 'Изображение заголовка',\n        'image'             => 'Изображение',\n        'is_closed'         => 'Разговор будет закрыт и перестанет принимать новые сообщения.',\n        'is_private'        => 'Скрытый',\n        'is_private_v3'     => 'Показывать этот объект только участникам кампании с ролью :admin-role независимо от любых разрешений.',\n        'is_star'           => 'Закреплено',\n        'locations'         => ':first в :second',\n        'name'              => 'Название',\n        'position'          => 'Позиция',\n        'replace_mentions'  => 'Заменить упоминания атрибутов в статье атрибутами нового объекта.',\n        'template'          => 'Шаблон',\n        'tooltip'           => 'Подсказки',\n        'type'              => 'Тип',\n        'visibility'        => 'Доступ',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Вы достигли максимального количества файлов (:max) для этого объекта.',\n            'no_files'  => 'Нет файлов.',\n        ],\n        'hints'     => [\n            'limit'         => 'Каждому объекту можно загрузить не больше :max файлов.',\n            'limitations'   => 'Форматы: :formats. Размер файла: до :size.',\n        ],\n    ],\n    'filter'            => 'Фильтровать',\n    'filters'           => [\n        'all'               => 'Фильтр всех потомков',\n        'clear'             => 'Очистить фильтры',\n        'copy_helper'       => 'Используйте скопированные фильтры в буфере обмена в качестве значений для фильтров виджетов обзоров и быстрых ссылок.',\n        'copy_to_clipboard' => 'Копировать фильтры',\n        'direct'            => 'Фильтр непосредственных потомков',\n        'filtered'          => 'Показано :count из :total объектов типа :entity.',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Показать всех членов (:count)',\n                'filtered'  => 'Показать непосредственных членов (:count)',\n            ],\n        ],\n        'mobile'            => [\n            'clear' => 'Очистить',\n            'copy'  => 'Копировать',\n        ],\n        'options'           => [\n            'children'  => 'С потомками',\n            'exclude'   => 'Отсутствует',\n            'hide'      => 'Скрыть',\n            'include'   => 'Присутствует',\n            'none'      => 'Не важно',\n            'show'      => 'Показать',\n        ],\n        'show'              => 'Показать фильтры',\n        'sorting'           => [\n            'asc'       => ':field - возрастание',\n            'desc'      => ':field - убывание',\n            'helper'    => 'Управление порядком показа результатов.',\n        ],\n        'title'             => 'Фильтры',\n    ],\n    'fix-this-issue'    => 'Исправьте это',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Добавить дату календаря',\n        ],\n        'copy_options'  => 'Параметры копирования',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Следующие элементы объекта будут скопированы в новый объект.',\n        'linking'       => 'Ссылки на другие объекты',\n    ],\n    'hidden'            => 'Скрыт',\n    'hints'             => [\n        'calendar_date'         => 'Дата календаря позволяет легко фильтровать списки, а также добавляет событие в выбранный календарь.',\n        'image_limitations'     => 'Форматы: :formats. Размер файла: до :size.',\n        'image_recommendation'  => 'Рекомендованный размер: :width на :height пикселей.',\n        'is_star'               => 'Закрепленные элементы отображаются в меню объекта.',\n        'tooltip'               => 'Автоматическая подсказка будет заменена на содержание этого поля. HTML код не поддерживается, но вы можете упоминать другие объекты с помощью продвинутых упоминаний.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Создано :name :date',\n        'created_date_clean'    => 'Создано :date',\n        'unknown'               => 'Неизвестно',\n        'updated_clean'         => 'Изменено :name :date',\n        'updated_date_clean'    => 'Изменено :date',\n        'view'                  => 'Показать историю объекта',\n    ],\n    'image'             => [\n        'error' => 'Нам не удалось получить данное изображение. Возможно, сайт не позволяет нам скачать изображение (такое случается со Squarespace и DeviantArt) или эта ссылка больше не действительна. Пожалуйста, убедитесь также, что изображение не превышает :size.',\n    ],\n    'is_private'        => 'Этот объект скрыт и виден только участникам роли \"Админ\".',\n    'keyboard-shortcut' => 'Горячая клавиша :code',\n    'move'              => [],\n    'navigation'        => [\n        'cancel'            => 'Отменить',\n        'or_cancel'         => 'или :cancel',\n        'skip_to_content'   => 'Пропустить меню',\n    ],\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Разрешить',\n                'deny'      => 'Запретить',\n                'ignore'    => 'Не изменять',\n                'remove'    => 'Удалить',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Разрешить',\n                'deny'      => 'Запретить',\n                'inherit'   => 'Наследовать',\n            ],\n            'delete'        => 'Удалить',\n            'edit'          => 'Редактировать',\n            'toggle'        => 'Изменить',\n        ],\n        'fields'            => [\n            'member'    => 'Участник',\n            'role'      => 'Роль',\n        ],\n        'helpers'           => [\n            'setup' => 'Используйте эту страницу, чтобы назначить, как пользователи и роли могут взаимодействовать с этим объектом. :allow позволяет пользователю или роли совершать это действие. :deny запрещает это действие. :inherit будет использовать то же разрешение, что роль пользователя или основная роль. Пользователь с :allow может совершать действие, которое запрещено для его роли.',\n        ],\n        'success'           => 'Разрешения сохранены.',\n        'title'             => 'Разрешения',\n        'too_many_members'  => 'В этой кампании слишком много участников (>:number) для отображения этой страницы. Пожалуйста, используйте кнопку \"Разрешения\" на странице объекта для детальной настройки разрешений.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Выберите календарь',\n        'gallery_image' => 'Выберите изображение из галереи',\n        'image_url'     => 'Вы также можете ввести URL изображения.',\n        'journal'       => 'Выберите журнал',\n        'location'      => 'Выберите локацию',\n        'organisation'  => 'Выберите организацию',\n        'tag'           => 'Выберите тэг',\n        'timeline'      => 'Выберите хронологию',\n    ],\n    'relations'         => [],\n    'remove'            => 'Удалить',\n    'save'              => 'Сохранить',\n    'save_and_close'    => 'Сохранить и Закрыть',\n    'save_and_copy'     => 'Сохранить и Копировать',\n    'save_and_new'      => 'Сохранить и Создать',\n    'save_and_update'   => 'Сохранить и Изменить',\n    'save_and_view'     => 'Сохранить и Открыть',\n    'search'            => 'Искать',\n    'select'            => 'Выбрать',\n    'tabs'              => [\n        'abilities'     => 'Способности',\n        'inventory'     => 'Инвентарь',\n        'overview'      => 'Основное',\n        'permissions'   => 'Разрешения',\n        'profile'       => 'Профиль',\n        'reminders'     => 'Напоминания',\n    ],\n    'titles'            => [\n        'editing'   => 'Редактирование :name',\n    ],\n    'tooltips'          => [],\n    'update'            => 'Редактировать',\n    'users'             => [\n        'unknown'   => 'Неизвестный',\n    ],\n    'view'              => 'Показать',\n    'visibilities'      => [\n        'admin'         => 'Админ',\n        'admin-self'    => 'Вы и Админ',\n        'all'           => 'Все',\n        'members'       => 'Участники',\n        'self'          => 'Вы',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'follow'    => 'Отслеживать',\n        'join'      => 'Вступить',\n        'unfollow'  => 'Перестать отслеживать',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Изменить параметры',\n            'new'   => 'Новый обзор',\n        ],\n        'create'        => [\n            'success'   => 'Обзор \":name\" создан.',\n            'title'     => 'Новый обзор кампании',\n        ],\n        'custom'        => [\n            'text'  => 'Вы редактируете обзор :name этой кампании.',\n        ],\n        'default'       => [\n            'text'  => 'Вы редактируете основной обзор этой кампании.',\n            'title' => 'Основной обзор',\n        ],\n        'delete'        => [\n            'success'   => 'Обзор \":name\" удален.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Копировать виджеты',\n            'name'          => 'Название обзора',\n            'visibility'    => 'Доступ',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Копировать виджеты из обзора :name в новый обзор.',\n        ],\n        'pitch'         => 'Создавайте дополнительные обзоры с разрешениями для каждой роли кампании.',\n        'placeholders'  => [\n            'name'  => 'Название обзора',\n        ],\n        'update'        => [\n            'success'   => 'Обзор \":name\" обновлен.',\n            'title'     => 'Редактирование обзора :name',\n        ],\n        'visibility'    => [\n            'default'   => 'Основной',\n            'none'      => 'Недоступный',\n            'visible'   => 'Дополнительный',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Кампании, которые вы отслеживаете, находятся в переключателе кампаний (слева вверху) ниже ваших кампаний.',\n        'join'      => 'Эта кампания открыта для новых участников. Нажмите, чтобы отправить заявку на вступление.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Добавить виджет',\n            'back_to_dashboard' => 'Назад к обзору',\n            'edit'              => 'Редактирование виджета',\n        ],\n        'reorder'   => [\n            'success'   => 'Порядок виджетов изменен.',\n        ],\n        'title'     => 'Настройка обзора кампании',\n        'tutorial'  => [\n            'blog'  => 'наше руководство',\n            'text'  => 'Нужна помощь с настройкой обзора кампании? Читайте :blog для пояснения и вдохновения.',\n        ],\n    ],\n    'title'         => 'Обзор кампании',\n    'widgets'       => [\n        'calendar'      => [\n            'actions'           => [\n                'next'      => 'Изменить дату на следующий день',\n                'previous'  => 'Изменить дату на предыдущий день',\n            ],\n            'previous_events'   => 'Прошедшие',\n            'upcoming_events'   => 'Будущие',\n        ],\n        'campaign'      => [\n            'helper'    => 'Этот виджет отображает заголовок кампании. Он всегда находится в основном обзоре кампании.',\n        ],\n        'create'        => [\n            'success'   => 'Виджет добавлен в обзор.',\n        ],\n        'delete'        => [\n            'success'   => 'Виджет удален из обзора.',\n        ],\n        'fields'        => [\n            'class'             => 'CSS класс',\n            'dashboard'         => 'Обзор',\n            'name'              => 'Заголовок виджета',\n            'optional-entity'   => 'Ссылка на объект',\n            'order'             => 'Сортировка',\n            'size'              => 'Размер',\n            'width'             => 'Ширина',\n        ],\n        'helpers'       => [\n            'class'     => 'Задайте CSS класс для этого виджета.',\n            'filters'   => 'Нажмите, чтобы посмотреть доступные параметры фильтрации.',\n        ],\n        'orders'        => [\n            'name_asc'  => 'По названию (А - Я)',\n            'name_desc' => 'По названию (Я - А)',\n            'recent'    => 'По дате изменения',\n        ],\n        'random'        => [\n            'helpers'   => [\n                'name'  => 'Чтобы вставить название случайного объекта, напишите \"{name}\".',\n            ],\n        ],\n        'recent'        => [\n            'advanced_filter'   => 'Дополнительный фильтр',\n            'advanced_filters'  => [\n                'mentionless'   => 'Неупомянающие (объекты, в статьях которых нет упоминаний других объектов)',\n                'unmentioned'   => 'Неупомянутые (объекты, упоминаний которых нет в статьях других объектов)',\n            ],\n            'entity-header'     => 'Использовать изображение заголовка объекта',\n            'filters'           => 'Фильтры',\n            'help'              => 'Показывать только первый элемент, а не список.',\n            'helpers'           => [\n                'entity-header'     => 'Если у объекта есть изображение заголовка (функция усиленных кампаний), этот виджет будет использовать его, а не основное изображение объекта.',\n                'show_attributes'   => 'Показывать закрепленные атрибуты объекта ниже текста статьи.',\n                'show_members'      => 'Если объект - семья или организация, показывать его членов ниже текста статьи.',\n                'show_relations'    => 'Показывать закрепленные связи объекта ниже текста статьи.',\n            ],\n            'show_attributes'   => 'Показывать закреп. атрибуты',\n            'show_members'      => 'Показывать членов',\n            'show_relations'    => 'Показывать закреп. связи',\n            'singular'          => 'Один объект',\n            'tags'              => 'В списке будут показаны только объекты с этими тэгами.',\n            'title'             => 'Список объектов',\n        ],\n        'tabs'          => [\n            'advanced'  => 'Дополнительно',\n            'setup'     => 'Основное',\n        ],\n        'unmentioned'   => [\n            'title' => 'Неупомянутые объекты',\n        ],\n        'update'        => [\n            'success'   => 'Виджет обновлен.',\n        ],\n        'widths'        => [\n            '0' => 'Авто',\n            '12'=> 'Вся страница (100%)',\n            '3' => 'Маленькая (25%)',\n            '4' => 'Средняя (33%)',\n            '6' => 'Половина страницы (50%)',\n            '8' => 'Широкая (66%)',\n            '9' => 'Большая (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'день',\n    'days'          => 'дней',\n    'elapsed_ago'   => ':duration назад',\n    'hour'          => 'час',\n    'hours'         => 'часов',\n    'just_now'      => 'только что',\n    'minute'        => 'минуту',\n    'minutes'       => 'минут',\n    'month'         => 'месяц',\n    'months'        => 'месяцев',\n    'second'        => 'секунду',\n    'seconds'       => 'секунд',\n    'week'          => 'неделю',\n    'weeks'         => 'недель',\n    'year'          => 'год',\n    'years'         => 'лет',\n];\n"
  },
  {
    "path": "lang/ru/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Заголовок страницы',\n];\n"
  },
  {
    "path": "lang/ru/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Результаты бросков костей',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новый бросок костей',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Бросок костей удален.',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Бросок совершен в',\n        'parameters'    => 'Параметры броска',\n        'results'       => 'Результаты',\n        'rolls'         => 'Броски',\n    ],\n    'hints'         => [\n        'parameters'    => 'Какие параметры есть у бросков?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Результаты',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Название броска костей',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Бросить кости',\n        ],\n        'error'     => 'Не удалось выполнить бросок. Недействительные параметры.',\n        'fields'    => [\n            'creator'   => 'Пользователь',\n            'date'      => 'Дата',\n            'result'    => 'Результат',\n        ],\n        'hint'      => 'Результаты всех бросков.',\n        'success'   => 'Кости брошены.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Результаты',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'обновите данные Вашей карты',\n    'primary'   => 'Это автоматическое предупреждение о том, что срок действия Вашей карты :brand **** :last скоро истечет.',\n    'title'     => 'Срок действия карты Вашей подписки истекает.',\n    'valid'     => 'Если Вы хотите сохранить Вашу подписку, пожалуйста :action.',\n];\n"
  },
  {
    "path": "lang/ru/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'Если Вы не хотите продлевать свою подписку, просим Вас войти в свой аккаунт и :link.',\n    'closing'   => 'С уважением,',\n    'dear'      => 'Уважаемый пользователь :name!',\n    'link'      => 'отменить свою подписку',\n    'notice'    => 'Важное уведомление о продлении:',\n    'primary'   => 'Это автоматическое напоминание о том, что :date мы автоматически спишем средства с Вашей карты :brand **** :last для оплаты Вашей подписки Kanka.',\n    'title'     => 'Годовая оплата Вашей подписки Kanka',\n    'valid'     => 'Просим убедиться в том, что Ваша кредитная карта будет действительна в день оплаты.',\n];\n"
  },
  {
    "path": "lang/ru/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    'header'            => 'Добро пожаловать в Kanka, :name!',\n    'header_sub'        => 'Поздравляем, вы сделали первый шаг в создании своего мира на :kanka!',\n    'pricing'           => 'здесь',\n    'section_1'         => 'Куда теперь?',\n    'section_11'        => 'Создайте свой Мир',\n    'section_2'         => 'Самый важный ресурс - это :discord, где вы найдете множество наших преданных пользователей, команду помощи новичкам, а также автора Kanka, который может ответить на любые ваши вопросы.',\n    'section_4'         => 'На нашем :youtube есть несколько видео по основам Kanka. И хотя пока охвачены не все темы, мы регулярно добавляем новые видео.',\n    'section_4_v2'      => 'Наша :knowledge-base охватывает самые базовые вопросы, которые могут у вас возникнуть, а более специфичную помощь вам окажет наша :documentation!',\n    'section_6'         => 'Свяжитесь с нами',\n    'section_7'         => 'Если вы не нашли ответы на свои вопросы или просто хотите с нами связаться, можете найти нас на :facebook или отправить письмо на :email. Мы маленькая команда из 2 друзей, но мы обязательно ответим на каждое полученное письмо, так что, пишите без колебаний!',\n    'section_8'         => 'И напоследок',\n    'section_9_v2'      => 'Мы сделали все основные функции Kanka бесплатными, и мы всегда будем следовать этому пути. Однако, если вы хотите поддержать нас в этом проекте, вы можете оформить подписку и получить доступ к дополнительным функциям, а также нашу вечную благодарность. Узнайте больше :pricing.',\n    'social_account'    => 'Если при входе в аккаунт возникают проблемы, напоминаем, что вы используете вход через :provider. Это можно изменить в настройках вашего аккаунта.',\n    'title'             => 'Знакомство с Kanka',\n];\n"
  },
  {
    "path": "lang/ru/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Добавить способности',\n        'reset' => 'Сбросить заряды',\n    ],\n    'create'    => [\n        'success'           => 'Способность \":ability\" добавлена объекту \":entity\".',\n        'success_multiple'  => 'Способности \":abilities\" добавлены объекту \":entity\".',\n        'title'             => 'Добавление способностей :name',\n    ],\n    'fields'    => [\n        'note'      => 'Описание',\n        'position'  => 'Позиция',\n    ],\n    'helpers'   => [\n        'note'  => 'В этом поле можно ссылаться на объекты с помощью продвинутых упоминаний (:code) и на атрибуты этого объекта (<code>{Сила}</code>).',\n    ],\n    'import'    => [\n        'errors'    => [\n            'no_race'       => 'У этого персонажа нет расы.',\n            'not_character' => 'Этот объект не является персонажем.',\n        ],\n        'success'   => '{0} Добавлено :count способностей.|{1} Добавлена :count способность.|[2,4] Добавлено :count способности.|[5,*] Добавлено :count способностей.',\n    ],\n    'show'      => [\n        'helper'    => 'Присвойте этому объекту способности. Способность всегда можно скрыть, открыть или удалить. Способности-потомки одной родительской способности будут отображаться при нажатии на прямоугольник с названием родителя.',\n        'title'     => 'Способности объекта :name',\n    ],\n    'update'    => [\n        'title' => 'Cпособность объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'templates' => [\n        'set'       => 'Назначить статус шаблона',\n        'success'   => [\n            'set'   => 'Объект \":entity\" получил статус шаблона.',\n            'unset' => 'Объект \":entity\" потерял статус шаблона.',\n        ],\n        'unset'     => 'Снять статус шаблона',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Добавить название',\n    ],\n    'create'        => [\n        'success'   => 'Название \":name\" добавлено объекту \":entity\".',\n        'title'     => 'Дополнительное название объекта :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Название \":name\" удалено.',\n    ],\n    'fields'        => [\n        'name'  => 'Название',\n    ],\n    'helpers'       => [\n        'primary'   => 'Объект будет проще найти с помощью поисковой строки или упоминаний, если добавить ему дополнительные имена.',\n    ],\n    'pitch'         => 'Добавьте объекту дополнительные имена, чтобы его было проще найти.',\n    'placeholders'  => [\n        'name'  => 'Новое название',\n    ],\n    'unboosted'     => [],\n    'update'        => [\n        'success'   => 'Название \":name\" объекта \":entity\" обновлено.',\n        'title'     => 'Редактирование названия объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'alias' => 'Псевдонимы',\n        'file'  => 'Файл',\n        'link'  => 'Ссылка',\n    ],\n    'show'      => [\n        'title' => 'Ресурсы объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'manage'        => 'Управление',\n        'more'          => 'Другое',\n        'remove_all'    => 'Удалить все',\n    ],\n    'errors'        => [\n        'loop'  => 'В вычислении этого атрибута обнаружен бесконечный цикл!',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Шаблоны сообщества',\n        'is_private'            => 'Скрыть атрибуты',\n        'is_star'               => 'Закреплен',\n        'value'                 => 'Значение',\n    ],\n    'filters'       => [\n        'name'  => 'Название атрибута',\n        'value' => 'Значение атрибута',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Вы уверены, что хотите удалить все атрибуты этого объекта?',\n        'setup'         => 'Элементы объекта, такие как HP или интеллект, можно отображать с помощью атрибутов. Добавьте атрибуты в ручную с помощью кнопки :manage или примените шаблон атрибутов.',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Атрибуты объекта \":entity\" обновлены.',\n        'title'     => 'Атрибуты объекта :name',\n    ],\n    'live'          => [\n        'success'   => 'Атрибут \":attribute\" обновлен.',\n        'title'     => 'Редактирование :attribute',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Число побед, рейтинг опасности, инициатива, население',\n        'block'     => 'Название блока',\n        'checkbox'  => 'Название флажка',\n        'icon'      => [\n            'class' => 'Класс FontAwesome или RPG Awesome: fas fa-users',\n            'name'  => 'Название иконки',\n        ],\n        'number'    => 'Название числа',\n        'random'    => [\n            'name'  => 'Название атрибута',\n            'value' => 'Диапазон вида 1-100 или список значений через запятую',\n        ],\n        'section'   => 'Название раздела',\n        'value'     => 'Значение атрибута',\n    ],\n    'show'          => [\n        'title' => 'Атрибуты объекта :name',\n    ],\n    'template'      => [\n        'success'   => 'Шаблон атрибутов \":name\" применен к объекту \":entity\".',\n        'title'     => 'Применение шаблона атрибутов к объекту :name',\n    ],\n    'types'         => [\n        'attribute' => 'Атрибут',\n        'block'     => 'Блок текста',\n        'checkbox'  => 'Флажок',\n        'icon'      => 'Иконка',\n        'number'    => 'Число',\n        'random'    => 'Случайный',\n        'section'   => 'Раздел',\n        'text'      => 'Блок текста',\n    ],\n    'update'        => [\n        'success'   => 'Атрибуты объекта \":entity\" обновлены.',\n    ],\n    'visibility'    => [\n        'entry'     => 'Этот атрибут закреплен на странице истории объекта.',\n        'private'   => 'Этот атрибут виден только участникам роли \"Админ\".',\n        'public'    => 'Этот атрибут виден всем участникам.',\n        'tab'       => 'Этот атрибут отображается только во вкладке атрибутов.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/events.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'type'  => 'Тип события',\n    ],\n    'helpers'   => [\n        'characters'    => 'Если задать тип как дату рождения или смерти этого персонажа, то его возраст будет вычисляться автоматически. :more.',\n        'founding'      => 'Если задать тип :type, то время с момента основания этого объекта будет вычисляться автоматически.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Новое напоминание',\n        ],\n        'title'     => 'Напоминания объекта :name',\n    ],\n    'types'     => [\n        'birth'     => 'Рождение',\n        'death'     => 'Смерть',\n        'founded'   => 'Основание',\n        'primary'   => 'Обычное',\n    ],\n    'years-ago' => '{1} :count год назад|[2,4] :count года назад|[5,*] :count лет назад',\n];\n"
  },
  {
    "path": "lang/ru/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [],\n    'create'            => [\n        'title' => 'Новый файл объекта :entity',\n    ],\n    'destroy'           => [\n        'success'   => 'Файл \":file\" удален.',\n    ],\n    'fields'            => [\n        'file'  => 'Файл',\n        'name'  => 'Название файла',\n    ],\n    'update'            => [\n        'success'   => 'Файл \":file\" обновлен.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'change_focus'  => 'Изменить фокус',\n        'replace_image' => 'Заменить',\n        'save-replace'  => 'Заменить',\n        'save_focus'    => 'Сохранить фокус',\n        'view'          => 'Открыть',\n    ],\n    'call-to-action'    => 'Нажмите на изображение, чтобы назначить ему точку фокуса.',\n    'focus'             => [\n        'breadcrumb'    => 'Фокус изображения',\n        'helper'        => 'Нажмите на изображение, чтобы задать точку фокуса. Чтобы убрать точку фокуса, нажмите на нее.',\n        'panel_title'   => 'Фокус изображения',\n        'success'       => 'Фокус изображения обновлен.',\n        'title'         => 'Фокус изображения объекта :name',\n        'unboosted'     => 'Возможность изменять фокус изображений дают :boosted-campaigns.',\n    ],\n    'replace'           => [\n        'breadcrumb'    => 'Замена изображения',\n        'panel_title'   => 'Замена изображения объекта',\n        'success'       => 'Изображение заменено.',\n        'title'         => 'Замена изображения объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'success'   => 'Предмет \":item\" добавлен объекту \":entity\".',\n        'title'     => 'Добавление предмета объекту :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Предмет \":item\" объекта \":entity\" удален.',\n    ],\n    'fields'        => [\n        'amount'        => 'Количество',\n        'description'   => 'Описание',\n        'is_equipped'   => 'Экипирован',\n        'name'          => 'Название',\n        'position'      => 'Нахождение',\n        'qty'           => 'Кол-во',\n    ],\n    'helpers'       => [],\n    'placeholders'  => [\n        'amount'        => 'Любое количество',\n        'description'   => 'Использован, поврежден, настроен',\n        'name'          => 'Укажите, если не выбран объект.',\n        'position'      => 'На персонаже, в рюкзаке, на складе, в банке',\n    ],\n    'show'          => [\n        'helper'    => 'Объектам можно присвоить предметы, чтобы создать инвентарь.',\n        'title'     => 'Инвентарь объекта :name',\n        'unsorted'  => 'Несортированный',\n    ],\n    'update'        => [\n        'success'   => 'Предмет \":name\" объекта \":entity\" обновлен.',\n        'title'     => 'Редактирование предмета :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Добавить ссылку',\n    ],\n    'call-to-action'    => 'Добавьте ссылки на внешние ресурсы объекта, например на DnDBeyond, и они появятся прямо на основной вкладке объекта.',\n    'create'            => [\n        'success'   => 'Ссылка \":name\" добавлена объекту \":entity\".',\n        'title'     => 'Новая ссылка объекта :name',\n    ],\n    'destroy'           => [\n        'success'   => 'Ссылка \":name\" удалена.',\n    ],\n    'fields'            => [\n        'icon'      => 'Иконка',\n        'name'      => 'Название',\n        'position'  => 'Позиция',\n        'url'       => 'URL адрес',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'Да',\n            'trust'     => 'Больше не спрашивать',\n        ],\n        'description'   => 'Эта ссылка отправит вас по адресу :link. Вы уверены, что хотите перейти туда?',\n        'title'         => 'Уход с Kanka',\n    ],\n    'helpers'           => [\n        'icon'      => 'Вы можете назначить иконку для ссылки. Используйте любые бесплатные иконки с :fontawesome или оставьте поле пустым, чтобы использовать стандартную.',\n        'parent'    => 'Поместите ссылку под одним из элементов боковой панели, а не в разделе быстрых ссылок.',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'В усиленных кампаниях объектам можно добавлять ссылки на другие сайты.',\n        'title'     => 'Ссылки объекта :name',\n    ],\n    'unboosted'         => [],\n    'update'            => [\n        'success'   => 'Ссылка \":name\" объекта \":entity\" обновлена.',\n        'title'     => 'Редактирование ссылки объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'    => 'Создание',\n        'delete'    => 'Удаление',\n        'restore'   => 'Восстановление',\n        'update'    => 'Редактирование',\n        'view'      => 'Показать изменения',\n    ],\n    'call-to-action'    => 'Полная история изменений объекта за последние :amount дней доступна для супер-усиленных кампаний.',\n    'fields'            => [\n        'action'    => 'Действие',\n        'date'      => 'Дата',\n    ],\n    'impersonated'      => 'Во время тестирования :name',\n    'show'              => [\n        'title' => 'История объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Этот объект отмечен на следующих картах.',\n    'title'     => 'Точки на картах объекта :name',\n];\n"
  },
  {
    "path": "lang/ru/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Элемент',\n        'type'      => 'Тип',\n    ],\n    'helper'            => 'Этот объект упомянут в следующих объектах, постах или описаниях кампаний.',\n    'mentioned_in_v2'   => 'Этот объект упомянут в :count объектах, постах или кампаниях. :more',\n    'see_more'          => 'Подробнее',\n    'show'              => [\n        'title' => 'Упоминания объекта :name',\n    ],\n    'title'             => 'Упоминания объекта',\n];\n"
  },
  {
    "path": "lang/ru/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'  => 'Копировать',\n    ],\n    'errors'        => [\n        'permission'        => 'У вас нет разрешения на создание объектов этого типа в данной кампании.',\n        'permission_update' => 'У вас нет разрешения на перемещение этого объекта.',\n        'same_campaign'     => 'Выберите кампанию, в которую нужно переместить объект.',\n        'unknown_campaign'  => 'Неизвестная кампания.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Кампания',\n        'copy'          => 'Создать копию',\n        'select_one'    => 'Выберите кампанию',\n    ],\n    'panel'         => [\n        'description'           => 'Выберите кампанию, в которую вы хотите переместить или копировать этот объект.',\n        'description_bulk_copy' => 'Выберите кампанию, в которую вы хотите копировать выбранные объекты.',\n        'title'                 => 'Перемещение или копирование объекта в другую кампанию',\n    ],\n    'success'       => 'Объект \":name\" перемещен.',\n    'success_copy'  => 'Объект \":name\" скопирован.',\n    'title'         => 'Перемещение :name',\n];\n"
  },
  {
    "path": "lang/ru/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Новый пост',\n        'add_role'  => 'Добавить роль',\n        'add_user'  => 'Добавить пользователя',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Копировать продвинутое упоминание',\n        'copy_with_name'    => 'Копировать продвинутое упоминание с названием поста',\n        'success'           => 'Продвинутое упоминание поста скопировано в буфер обмена.',\n    ],\n    'create'        => [\n        'success'   => 'Пост \":name\" добавлен объекту \":entity\".',\n    ],\n    'destroy'       => [\n        'success'   => 'Пост \":name\" объекта \":entity\" удален.',\n    ],\n    'edit'          => [\n        'success'   => 'Пост \":name\" объекта \":entity\" обновлен.',\n    ],\n    'fields'        => [\n        'creator'   => 'Создатель',\n        'name'      => 'Название',\n        'position'  => 'Куда добавить',\n    ],\n    'footer'        => [\n        'created'   => 'Создано :user :date.',\n        'updated'   => 'Обновлено :user :date.',\n    ],\n    'hint'          => 'Информацию, которая не подходит под стандартные поля объекта или должна быть скрытой, можно добавить в виде постов.',\n    'hints'         => [\n        'reorder'   => 'Порядок постов можно изменить, нажав на иконку :icon в заголовке объекта.',\n    ],\n    'index'         => [],\n    'move'          => [\n        'copy'          => 'Создать копию',\n        'copy_success'  => 'Пост \":name\" скопирован к объекту \":entity\".',\n        'description'   => 'Выберите объект, к которому вы хотите переместить или копировать этот пост.',\n        'entity'        => 'Объект',\n        'move_success'  => 'Пост \":name\" перемещен к объекту \":entity\".',\n    ],\n    'placeholders'  => [\n        'name'  => 'Название поста, наблюдения или заметки',\n    ],\n    'show'          => [\n        'advanced'  => 'Дополнительные разрешения',\n        'title'     => 'Пост :name объекта :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'Свернутый',\n        'expanded'  => 'Развернут',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/ru/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'Этот объект приватен. Разрешения все еще можно настраивать, но пока объект приватен, они ни на что не влияют, объект будет доступен только участникам кампании с ролью :admin.',\n        'warning'   => 'Внимание',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'Ни одна роль или пользователь кроме админов не имеет доступа к этому объекту.',\n        'success'           => [\n            'private'   => 'Объект \":entity\" скрыт.',\n            'public'    => 'Объект \":enity\" открыт.',\n        ],\n        'title'             => 'Разрешения',\n        'viewable-by'       => 'Просмотр доступен:',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Ссылки',\n    'title' => 'Закреплено',\n];\n"
  },
  {
    "path": "lang/ru/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Редактировать профиль',\n    ],\n    'show'      => [\n        'tab_name'  => 'Профиль',\n        'title'     => 'Профиль объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Этот объект участвует в следующих квестах.',\n    'title'     => 'Квесты объекта :name',\n];\n"
  },
  {
    "path": "lang/ru/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Карта связей',\n        'mode-table'    => 'Таблица связей',\n    ],\n    'bulk'              => [\n        'delete'    => '{1} Удалена :count связь.|[2,4] Удалено :count связи.|[5,*] Удалено :count связей.',\n        'success'   => [\n            'editing'           => '{1} Обновлена :count связь.|[2,4] Обновлено :count связи.|[5,*] Обновлено :count связей.',\n            'editing_partial'   => '{1} Обновлена :count из :total связей.|[2,*] Обновлено :count из :total связей.',\n        ],\n    ],\n    'call-to-action'    => 'Исследуйте связи объекта и его отношение к другим объектам кампании наглядно.',\n    'connections'       => [\n        'map_point'         => 'Точка на карте',\n        'mention'           => 'Упоминание',\n        'quest_element'     => 'Элемент квеста',\n        'timeline_element'  => 'Элемент хронологии',\n    ],\n    'create'            => [\n        'new_title' => 'Новая связь',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'Выберите, чтобы также удалить зеркальную связь у объекта связи.',\n        'option'    => 'Удалить зеркальную связь',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'Зеркальная связь также будет удалена. Это действие необратимо.',\n        'success'   => 'Связь объекта \":entity\" с объектом \":target\" удалена.',\n    ],\n    'fields'            => [\n        'attitude'  => 'Отношение',\n        'owner'     => 'Обладатель',\n        'target'    => 'Объект связи',\n        'two_way'   => 'Создать зеркальную связь',\n        'unmirror'  => 'Отвязать от зеркальной связи',\n    ],\n    'helper'            => 'Соединяйте объекты связями, настраивайте отношения и доступ. Также связи можно закрепить в меню объекта.',\n    'helpers'           => [\n        'no_relations'  => 'Сейчас у этого объекта нет связей с другими объектами кампании.',\n    ],\n    'hints'             => [\n        'attitude'  => 'Это необязательное поле можно использовать для сортировки списков.',\n        'two_way'   => 'Если сделать связь зеркальной, то такая же связь будет создана для объекта связи. Но, если одну из связей отредактировать, зеркальная не изменится.',\n    ],\n    'index'             => [\n        'title' => 'Связи',\n    ],\n    'options'           => [\n        'mentions'          => 'Связи + связанное + упоминания',\n        'only_relations'    => 'Только прямые связи',\n        'related'           => 'Связи + связанное',\n        'relations'         => 'Связи',\n        'show'              => 'Показать',\n    ],\n    'panels'            => [\n        'related'   => 'Связанное',\n    ],\n    'placeholders'      => [\n        'attitude'  => 'От -100 до 100, где 100 это очень позитивное',\n    ],\n    'show'              => [\n        'title' => 'Связи объекта :name',\n    ],\n    'types'             => [\n        'family_member'         => 'Член семьи',\n        'organisation_member'   => 'Член организации',\n    ],\n    'update'            => [\n        'success'   => 'Связь объекта \":entity\" с объектом \":target\" обновлена.',\n        'title'     => 'Редактирование связи объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'  => 'Свернуть все',\n        'expand_all'    => 'Развернуть все',\n        'load_more'     => 'Показать еще',\n    ],\n    'reorder'   => [\n        'icon_tooltip'  => 'Изменить порядок постов',\n        'panel_title'   => 'Изменение порядка постов',\n        'save'          => 'Сохранить новый порядок',\n        'success'       => 'Порядок постов сохранен.',\n    ],\n    'update'    => [\n        'title' => 'Редактирование статьи объекта :entity',\n    ],\n    'warning'   => [],\n];\n"
  },
  {
    "path": "lang/ru/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Ниже показаны хронологии, в которых есть элементы, ссылающиеся на этот объект.',\n    'show'      => [\n        'title' => 'Хронологии объекта :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'bulk'      => [\n        'errors'    => [\n            'unknown_type'  => 'Неизвестный или недействительный тип объекта.',\n        ],\n        'success'   => '{1} Тип :count объекта трансформирован в новый: :type.|[2,*] Типы :count объектов трансформированы в новый: :type.',\n    ],\n    'fields'    => [\n        'select_one'    => 'Выберите тип',\n        'target'        => 'Новый тип объектов',\n    ],\n    'panel'     => [\n        'bulk_description'  => 'Смена типа нескольких объектов. Имейте в виду, что возможна потеря некоторых данных из-за отличий в наборах полей разных типов объектов.',\n        'bulk_title'        => 'Трансформация нескольких объектов',\n        'title'             => 'Трансформация объекта',\n    ],\n    'success'   => 'Объект \":name\" трансформирован.',\n    'title'     => 'Трансформация :name',\n];\n"
  },
  {
    "path": "lang/ru/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Способности',\n    'ability'               => 'Способность',\n    'attribute_template'    => 'Шаблон атрибутов',\n    'attribute_templates'   => 'Шаблоны атрибутов',\n    'calendar'              => 'Календарь',\n    'calendars'             => 'Календари',\n    'campaign'              => 'Кампания',\n    'campaigns'             => 'Кампании',\n    'character'             => 'Персонаж',\n    'characters'            => 'Персонажи',\n    'conversation'          => 'Разговор',\n    'conversations'         => 'Разговоры',\n    'creator'               => [\n        'actions'           => [\n            'create'    => 'Создать',\n            'more'      => 'Добавить информацию',\n        ],\n        'back'              => 'Назад',\n        'bulk_names'        => 'Каждое название на отдельной строке',\n        'duplicate'         => 'Внимание! В кампании уже есть объект этого типа с похожим названием.',\n        'helper_v2'         => 'Создайте основу для нового объекта быстро, не отрываясь от текущего занятия.',\n        'modes'             => [\n            'bulk'      => 'Групповое создание',\n            'default'   => 'Быстрое создание',\n        ],\n        'name'              => [\n            'new'       => 'Добавить название',\n            'remove'    => 'Удалить',\n        ],\n        'success_multiple'  => '{1} Новый объект \":link\" создан.|[2,*] Новые объекты \":link\" созданы.',\n        'title'             => 'Новый объект',\n        'tooltip'           => 'Создайте новый объект, не покидая текущую страницу.',\n    ],\n    'creature'              => 'Существо',\n    'creatures'             => 'Существа',\n    'dice_roll'             => 'Бросок костей',\n    'dice_rolls'            => 'Броски костей',\n    'event'                 => 'Событие',\n    'events'                => 'События',\n    'families'              => 'Семьи',\n    'family'                => 'Семья',\n    'inventories'           => 'Инвентари',\n    'item'                  => 'Предмет',\n    'items'                 => 'Предметы',\n    'journal'               => 'Журнал',\n    'journals'              => 'Журналы',\n    'location'              => 'Локация',\n    'locations'             => 'Локации',\n    'map'                   => 'Карта',\n    'maps'                  => 'Карты',\n    'new'                   => [],\n    'note'                  => 'Заметка',\n    'notes'                 => 'Заметки',\n    'organisation'          => 'Организация',\n    'organisations'         => 'Организации',\n    'quest'                 => 'Квест',\n    'quest_element'         => 'Элемент квеста',\n    'quests'                => 'Квесты',\n    'race'                  => 'Раса',\n    'races'                 => 'Расы',\n    'relation'              => 'Связь',\n    'relations'             => 'Связи',\n    'tag'                   => 'Тэг',\n    'tags'                  => 'Тэги',\n    'timeline'              => 'Хронология',\n    'timeline_element'      => 'Элемент хронологии',\n    'timelines'             => 'Хронологии',\n];\n"
  },
  {
    "path": "lang/ru/errors.php",
    "content": "<?php\n\nreturn [\n    '403'       => [\n        'body'  => 'Кажется, у вас нет разрешения на доступ к этой странице!',\n        'title' => 'В доступе отказано',\n    ],\n    '403-form'  => [\n        'help'  => 'Это могло произойти из-за выхода времени сессии. Попробуйте войти в Kanka в новом окне перед сохранением.',\n    ],\n    '404'       => [\n        'body'  => 'К сожалению нам не удалось найти нужную вам страницу.',\n        'title' => 'Страница не найдена',\n    ],\n    '500'       => [\n        'body'  => [\n            '1' => 'Упс, кажется, что-то пошло не так.',\n            '2' => 'Мы получили сообщение о произошедшей ошибке, но, возможно, вы поможете нам, если расскажите, что вы делали, когда она произошла.',\n        ],\n        'title' => 'Ошибка',\n    ],\n    '503'       => [\n        'body'  => [\n            '1' => 'Kanka в данный момент находится на обслуживании, а это обычно означает, что на подходе новое обновление!',\n            '2' => 'Просим прощения за доставленные неудобства. Через пару минут все придет в норму.',\n        ],\n        'json'  => 'Kanka в данный момент находится на обслуживании, пожалуйста, попробуйте снова через несколько минут.',\n        'title' => 'Обслуживание',\n    ],\n    '503-form'  => [],\n    'footer'    => 'Если вам нужна дополнительная помощь, свяжитесь с нами через :email или :discord.',\n];\n"
  },
  {
    "path": "lang/ru/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новое событие',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [\n        'helper'    => 'Здесь показаны события, родительским событием которых является это событие.',\n    ],\n    'fields'        => [\n        'date'  => 'Дата',\n    ],\n    'helpers'       => [\n        'date'  => 'В это поле можно написать что угодно. Оно не связано с календарями кампании. Чтобы связать событие с календарем, добавьте его в календарь во вкладке напоминаний этого события или на странице календаря.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'date'  => 'Дата вашего события',\n        'type'  => 'Церемония, фестиваль, катастрофа, битва, рождение',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Записи календарей',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новая cемья',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'members'   => 'Это список членов семьи. Персонажа можно добавить в семью при его редактировании через поле \"Семья\".',\n    ],\n    'index'         => [],\n    'members'       => [],\n    'placeholders'  => [\n        'name'  => 'Название семьи',\n        'type'  => 'Королевская, знатная, исчезнувшая',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/ru/faq.php",
    "content": "<?php\n\nreturn [\n    'account-deletion'      => [\n        'account_settings'  => 'Настройки аккаунта',\n        'answer'            => 'Чтобы удалить аккаунт, перейдите в свой :account и прокрутите вниз до раздела \"Удаление аккаунта\". Это удалит ваш аккаунт и все кампании, где нет других участников, кроме вас.',\n        'question'          => 'Как удалить свой аккаунт?',\n    ],\n    'app_backup'            => [\n        'answer'    => 'Во избежание потери данных мы создаем их резервные копии два раза в сутки. Мы не хотим рисковать, ведь и наши кампании хранятся на этом сервере!',\n        'question'  => 'Как часто данные Kanka резервируются?',\n    ],\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nЛучший способ объяснить шаблоны атрибутов - привести пример. Давайте представим, что в вашем мире множество локаций, для многих из которых вы хотите создать собственные атрибуты \"Население\", \"Климат\", \"Преступность\".\n\nВы конечно можете просто создавать их отдельно на каждой локации, но это может быть утомительным, и к тому же можно легко забыть создать один из атрибутов, например \"Преступность\". И здесь шаблоны атрибутов все меняют.\n\nВы можете создать шаблон с этими атрибутами (\"Население\", \"Климат\", \"Преступность\" и т. д.), а затем применить его к вашим локациям. Это добавит локациям атрибуты из шаблона, и вам останется только задать им значения!\nTEXT\n        ,\n        'question'  => 'Что такое шаблоны атрибутов?',\n    ],\n    'backup'                => [\n        'answer'    => 'Один раз за сутки вы можете экспортировать все данные вашей кампании в виде ZIP файла. В боковом меню выберите \"Кампания\" и нажмите \"Экспорт\" в меню \"Основное\". Вы получите ссылку на экспорт, открытую в течение 30 минут. Вы не сможете загрузить этот экспорт в Kanka, он нужен только для вашего спокойствия, или если вы планируете перестать использовать приложение.',\n        'question'  => 'Как резервировать и экспортировать кампании?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Просто присоединитесь к нашему :discord серверу и сообщите о баге на канале #errors-and-bugs.',\n        'question'  => 'Как сообщить о баге?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'В Kanka нет такой функции. Однако, если вы хотите, чтобы несколько игровых групп находились в одном мире, попробуйте использовать одну кампанию и отделить группы друг от друга с помощью квестов, тэгов и разрешений.',\n        'question'  => 'Можно ли синхронизировать объекты между несколькими кампаниями?',\n    ],\n    'conversations'         => [],\n    'custom'                => [\n        'answer'    => 'В Kanka по умолчанию есть определенные типы объектов, взаимодействующих между собой. Чтобы позволить пользователям создавать свои типы объектов, приложение пришлось бы полностью переделывать и отказаться от нашей цели - помогать людям творить, не ломая голову над систематизацией. К тому же, в Kanka есть тэги, выполняющие большинство функций ваших собственных типов объектов.',\n        'question'  => 'Можно ли создавать собственные типы объектов?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Нажмите \"Кампания\" в боковом меню, находясь в вашей кампании. Кнопка \"Удалить\" появится на открывшейся странице, если вы последний участник в кампании. Удаление кампании это необратимое действие, которое удалит все данные кампании, хранящиеся на наших серверах, включая изображения.',\n        'question'  => 'Как удалить кампанию?',\n    ],\n    'discord'               => [\n        'answer'    => 'Чтобы связать ваш аккаунт Kanka с :discord, сначала нажмите на ваш аватар в правом верхнем углу приложения и нажмите на кнопку \"Профиль\". Оттуда перейдите в :apps и нажмите \"Подключить\".',\n        'question'  => 'Как связать мой аккаунт Kanka с Discord?',\n    ],\n    'early-access'          => [\n        'answer'    => 'Ранний доступ это награда для наших потрясающих подписчиков, дающая им 30 дней на то, чтобы опробовать новейшие функции Kanka раньше всех остальных участников.',\n        'question'  => 'Что такое ранний доступ?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'У каждого объекта есть заметки объекта - небольшие фрагменты текста, которые можно скрыть от всех, кроме вас (удобно, когда ГМ не один), от всех, кроме админов, или оставить открытыми для всех. Вы также можете позволить игрокам создавать и редактировать заметки объекта, не давая разрешение на редактирование самого объекта.',\n        'question'  => 'Как частично скрывать информацию на Kanka?',\n    ],\n    'fields'                => [\n        'answer'    => 'Ответ',\n        'category'  => 'Категория',\n        'locale'    => 'Язык',\n        'order'     => 'Порядок',\n        'question'  => 'Вопрос',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\nДа! Мы убеждены, что ваша финансовая ситуация не должна мешать вам наслаждаться RPG или ворлд-билдингом. Поэтому основные функции приложения всегда будут бесплатными. Однако, если вы хотите играть более активную роль в этом проекте, поддерживать нас и участвовать в голосованиях по выбору функций, выбирая те, что вам важнее всего, то можете сделать это с помощью наших подписок.\n\nПомимо участия в выборе направления развития Kanka, поддержка дает вам :boosters, увеличивает максимальный размер загружаемых файлов, размещает ваше имя в Зале Славы, возможность добавить красивые иконки по умолчанию и многое другое!\nTEXT\n        ,\n        'question'  => 'Останется ли приложение бесплатным?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Мы советуем создавать богов как персонажей, а религии как организации. Если вы хотите быстро находить богов среди других персонажей, советуем назначить им соответствующий тэг и/или тип.',\n        'question'  => 'Где создавать богов и религии?',\n    ],\n    'help'                  => [\n        'answer'    => 'Прежде всего, спасибо, что хотите помочь! Мы всегда заинтересованы в тех, кто может помочь с переводами, тестированием новых функций, и в тех, кто может помочь новым пользователям. Мы также любим, когда вы помогаете Kanka найти новых пользователей там, где мы их не искали. Рекомендуем присоединиться к нам на :discord, где выделен отдельный канал для помощи друг другу.',\n        'question'  => 'Как я могу помочь Kanka?',\n    ],\n    'map'                   => [\n        'answer'    => 'Модуль карт поддерживает PNG, JPG, WEBP и SVG изображения. Карты могут иметь слои, группы и метки разных форм и размеров, указывающие на другие объекты кампании.',\n        'question'  => 'Можно ли загружать на Kanka карты?',\n    ],\n    'mobile'                => [\n        'answer'    => 'На данный момент у Kanka нет мобильной версии, но большая часть сайта работает на мобильных устройствах. Мы надеемся, что поддержка через подписки однажды позволит нам нанять кого-нибудь для разработки мобильного приложения, но не стоит ждать этого в ближайшем будущем.',\n        'question'  => 'Есть ли мобильное приложение? Будет ли?',\n    ],\n    'monsters'              => [\n        'answer'    => 'Мы советуем использовать модуль рас для создания народов, животных, растений, монстров и всего живого, кроме персонажей.',\n        'question'  => 'Где создавать монстров?',\n    ],\n    'multiworld'            => [\n        'answer'    => 'Вы можете быть участником скольких угодно кампаний, в том числе созданных вами. Для переключения между кампаниями или создания новой, нажмите на название текущей кампании в боковой панели, чтобы открыть переключатель кампаний. Ниже списка ваших кампаний есть кнопка создания новой кампании.',\n        'question'  => 'Можно ли создать больше одной Кампании?',\n    ],\n    'nested'                => [\n        'answer'    => 'Если вы предпочитаете, чтобы ваши объекты отображались в свернутом виде по умолчанию (как при нажатии кнопки \"Свернутый вид\"), вы можете сделать это в настройках профиля в разделе \"Оформление\". Там можно включить опцию \"Свернутый вид по умолчанию\". Эта опция влияет на все кампании, а не только на ваши. Она не влияет на других пользователей.',\n        'question'  => 'Можно ли сделать списки свернутыми по умолчанию?',\n    ],\n    'organise_play'         => [],\n    'permissions'           => [\n        'answer'    => 'Конечно, для этого мы и создали Kanka! Вы можете пригласить всех своих игроков в ваши кампании и задать им роли и разрешения. Мы сделали систему невероятно гибкой (вы можете использовать как систему правил, так и систему исключений), чтобы она подходила в максимальном количестве ситуаций.',\n        'question'  => 'Можно ли ограничить информацию, которую видят игроки в моей кампании?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nДолгосрочный план для Kanka - создание многофункционального инструмента для ворлд-билдинга и ведения кампаний любых систем с контентом, управляемым сообществом через \"Шаблоны Сообщества\". Еще одна наша цель это создание инструментов, интегрируемых с другими платформами, такими как Virtual Tabletop.\n\nМы и сами используем Kanka, так что мы не планируем останавливать разработку и развитие приложения. Однако, на всякий случай, код приложения находится в открытом доступе, и проект может быть продолжен сообществом, если с нами что-нибудь случится.\nTEXT\n        ,\n        'question'  => 'Каковы долгосрочные планы?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Вы можете посетить :public-campaigns, чтобы посмотреть, как другие используют Kanka для своих кампаний.',\n        'question'  => 'Как другие используют Kanka?',\n    ],\n    'renaming-modules'      => [\n        'answer'    => 'Kanka не позволяет менять названия модулей. Это сделано для избежания неудобств и грамматических ошибок на языках, слова которых различаются по роду. Однако, усиленные кампании могут менять названия модулей в боковой панели с помощью CSS кампании.',\n        'question'  => 'Можно ли переименовывать модули? Например кланы, вместо семей, или фракции, вместо организаций?',\n    ],\n    'sections'              => [\n        'community'     => 'Сообщество',\n        'general'       => 'Основное',\n        'other'         => 'Другое',\n        'permissions'   => 'Разрешения',\n        'pricing'       => 'Цены',\n        'worldbuilding' => 'Ворлд-билдинг',\n    ],\n    'show'                  => [\n        'return'    => 'Назад к ЧаВо',\n        'timestamp' => 'Обновлено: :date',\n        'title'     => 'ЧаВо - :name',\n    ],\n    'unboost'               => [\n        'answer'    => 'Из кампании, потерявшей усиление, не удаляются данные, созданные, когда она еще была усилена. Они просто скрываются, как и функции усиления. Если снова ее усилить, данные и функции снова появятся на своих местах.',\n        'question'  => 'Что происходит, когда кампанию перестают усиливать?',\n    ],\n    'user-switch'           => [\n        'answer'    => 'Разрешения могут запутать, особенно в больших кампаниях. Как админ кампании, вы можете перейти на страницу участников кампании и нажать кнопку \"Тестировать\" возле участника без роли \"Админ\". Сделав это, вы сможете увидеть кампанию так, как ее видит выбранный пользователь. Это самый простой способ проверить разрешения Кампании.',\n        'question'  => 'Как проверить работу разрешений кампании?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Только те, кого вы приглашаете в свою кампанию, могут видеть и взаимодействовать с тем, что вы создали. Ваши данные являются приватными и всегда находятся под вашим контролем. Вы также можете сделать кампанию публичной, чтобы ее могли просматривать незарегистрированные пользователи.',\n        'question'  => 'Может ли кто-нибудь видеть мой мир?',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/fields.php",
    "content": "<?php\n\nreturn [\n    'gallery'           => [\n        'placeholder'   => 'Выберите изображение из галереи кампании',\n    ],\n    'gallery-header'    => [\n        'description'   => 'Если у объекта нет изображения заголовка, можно использовать изображение из галереи кампании.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'Если у объекта нет изображения, можно использовать изображение из галереи кампании.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Добавьте изображение для заголовка объекта с помощью :boosted-campaign.',\n        'description'           => 'Добавьте изображение для заголовка объекта. Советуем использовать крупное изображение.',\n        'title'                 => 'Изображение заголовка',\n    ],\n    'tooltip'           => [],\n];\n"
  },
  {
    "path": "lang/ru/filters.php",
    "content": "<?php\n\nreturn [\n    'alerts'    => [\n        'copy'  => 'Фильтры скопированы в буфер обмена.',\n    ],\n    'helpers'   => [\n        'guest' => 'Пожалуйста, войдите в свой аккаунт, чтобы использовать фильтры.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/footer.php",
    "content": "<?php\n\nreturn [\n    'blog'              => 'Блог',\n    'boosters'          => 'Усиление',\n    'company'           => 'Компания',\n    'language-switcher' => [\n        'other' => 'Другие языки',\n        'title' => 'Выберите язык',\n    ],\n    'platform'          => 'Платформа',\n    'press-kit'         => 'Пресс-кит',\n    'privacy'           => 'Конфиденциальность',\n    'resources'         => 'Ресурсы',\n    'security'          => 'Безопасность',\n    'status'            => 'Состояние сервера',\n    'terms'             => 'Условия',\n    'translator_call'   => 'Платформа Kanka переведена на другие языки благодаря нашему потрясающему сообществу. Если вы хотите помочь перевести Kanka на ваш язык, свяжитесь с нами на :discord!',\n    'whats-new'         => 'Что нового',\n];\n"
  },
  {
    "path": "lang/ru/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Голосования',\n];\n"
  },
  {
    "path": "lang/ru/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Зал Славы',\n];\n"
  },
  {
    "path": "lang/ru/front/kb.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'show'      => [],\n    'title'     => 'База знаний',\n];\n"
  },
  {
    "path": "lang/ru/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Узнать больше',\n        'subscribe'     => 'Подписаться',\n    ],\n    'fields'    => [\n        'firstname'     => 'Имя',\n        'lastname'      => 'Фамилия',\n        'notifications' => 'Уведомления',\n    ],\n    'groups'    => [\n        'newsletter'    => 'Новости',\n    ],\n    'headline'  => 'Подписывайтесь на наши рассылки, чтобы быть в курсе событий Kanka.',\n    'title'     => 'Новости по электронной почте',\n];\n"
  },
  {
    "path": "lang/ru/front.php",
    "content": "<?php\n\nreturn [\n    'about'                 => [],\n    'campaigns'             => [],\n    'community'             => [],\n    'contact'               => [],\n    'cookie'                => [\n        'dismiss'   => 'Понятно',\n        'link'      => 'Узнать больше',\n        'message'   => 'Этот сайт использует cookie-файлы, чтобы его использование было как можно удобнее для вас.',\n    ],\n    'faq'                   => [],\n    'featured_campaigns'    => [],\n    'features'              => [\n        'api'       => [\n            'link'  => 'Документация API',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Повышенный лимит API запросов (90 в минуту)',\n            'boosts'            => 'Усилители кампаний',\n            'default_image'     => 'Эскизы для объектов',\n            'discord'           => 'Приватный :discord канал',\n            'free'              => 'Бесплатно',\n            'hall_of_fame'      => 'Внесение в :link',\n            'impact'            => 'Влияние на будущие функции',\n            'monthly_vote'      => 'Участие в голосованиях по выбору функций',\n            'pagination'        => 'Увеличенная пагинация',\n            'upload_limit'      => 'Максимальный размер файлов',\n            'upload_limit_map'  => 'Максимальный размер карт',\n        ],\n    ],\n    'first_block'           => [],\n    'footer'                => [],\n    'help'                  => [],\n    'home'                  => [\n        'seo'   => [\n            'meta-description'  => 'Вы гейм-мастер, ворлд-билдер, или писатель? Мы предлагаем инструмент для ведения настольных кампаний и ворлд-билдинга позволяющий легко организовывать, планировать, и наслаждаться TTRPG кампаниями. Мы все время прислушиваемся к сообществу, а главное, все основные функции приложения бесплатны!',\n        ],\n    ],\n    'master'                => [],\n    'media'                 => [],\n    'menu'                  => [\n        'dashboard'     => 'Обзор кампании',\n        'login'         => 'Вход',\n        'register'      => 'Регистрация',\n        'register_free' => 'Бесплатная регистрация',\n    ],\n    'meta'                  => [\n        'description'   => ':kanka это многофункциональный онлайн инструмент для ворлд-билдинга и ведения rpg кампаний онлайн',\n        'title'         => ':kanka - Онлайн инструмент для ведения настольных RPG кампаний и ворлд-билдинга',\n    ],\n    'partners'              => [],\n    'pricing'               => [\n        'tier'  => [\n            'free'  => 'Бесплатно',\n            'month' => 'Месяц',\n        ],\n    ],\n    'privacy'               => [],\n    'release'               => [],\n    'roadmap'               => [],\n    'second_block'          => [],\n    'seo'                   => [\n        'keywords'  => 'Ворлд-билдинг, Настольные RPG, RPG Кампании',\n    ],\n    'team'                  => [],\n    'terms'                 => [],\n];\n"
  },
  {
    "path": "lang/ru/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Отменить выбор всего',\n    'no'            => 'Нет',\n    'required'      => 'Обязательно',\n    'select_all'    => 'Выбрать все',\n    'success'       => [\n        'created'   => 'Объект \":name\" создан.',\n        'deleted'   => 'Объект \":name\" удален.',\n        'updated'   => 'Объект \":name\" обновлен.',\n    ],\n    'yes'           => 'Да',\n];\n"
  },
  {
    "path": "lang/ru/header.php",
    "content": "<?php\n\nreturn [\n    'notifications'     => [\n        'read_all'  => 'Показать все',\n    ],\n    'toggle_navigation' => 'Показать/скрыть навигацию',\n    'user'              => [\n        'settings'      => 'Настройки',\n        'sign-out'      => 'Выйти',\n        'your-profile'  => 'Мой профиль',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/helpers.php",
    "content": "<?php\n\nreturn [\n    'age'               => [],\n    'api-filters'       => [\n        'description'   => 'Для конечной точки API с названием :name доступны следующие фильтры.',\n        'title'         => 'Фильтры API',\n    ],\n    'attributes'        => [\n        'link'  => 'Параметры атрибутов',\n    ],\n    'calendar-widget'   => [\n        'info'  => 'Почему здесь показаны эти события?',\n        'title' => 'Виджет календаря',\n    ],\n    'dice'              => [],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Как использовать фильтры',\n    ],\n    'link'              => [\n        'description'   => 'На другие объекты вашей кампании можно ссылаться с помощью следующих символов.',\n    ],\n    'map'               => [],\n    'pins'              => [],\n    'public'            => 'Посмотрите видео на YouTube, объясняющее публичные кампании.',\n    'troubleshooting'   => [\n        'description'       => 'На эту страницу вас направил член команды Kanka. Выберите кампанию из списка, чтобы сгенерировать токен, позволяющий нам временно присоединиться к вашей кампании в роли админа.',\n        'errors'            => [\n            'token_exists'  => 'Токен для кампании :campaign уже существует.',\n        ],\n        'save_btn'          => 'Сгенерировать токен',\n        'select_campaign'   => 'Выберите кампанию',\n        'subtitle'          => 'Спасите, помогите!',\n        'success'           => 'Пожалуйста, скопируйте следующий токен и отправьте его кому-нибудь из членов команды Kanka.',\n        'title'             => 'Исправление неполадок',\n    ],\n    'widget-filters'    => [\n        'description'   => 'В некоторых виджетах можно фильтровать список объектов, выбрав тип искомых объектов и предоставив их \"значения\". Например, фильтр :example покажет только мертвых персонажей типа \"NPC\".',\n        'link'          => 'фильтрах виджетов',\n        'title'         => 'Фильтры в виджетах обзоров',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/items.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новый предмет',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'price' => 'Цена',\n        'size'  => 'Размеры',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'inventories'   => [],\n    'placeholders'  => [\n        'price' => 'Цена предмета',\n        'size'  => 'Размер, вес, габариты',\n        'type'  => 'Оружие, зелье, артефакт',\n    ],\n    'quests'        => [],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Инвентари',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новый журнал',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Автор',\n        'date'      => 'Дата',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'journals'      => [],\n    'placeholders'  => [\n        'author'    => 'Тот, кто написал этот журнал',\n        'date'      => 'Дата реального мира для журнала',\n        'type'      => 'Сессия, one-shot, черновик',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/ru/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Каталанский',\n        'cs'    => 'Чешский',\n        'de'    => 'Немецкий',\n        'el'    => 'Греческий',\n        'en'    => 'Английский',\n        'en-US' => 'Английский (США)',\n        'es'    => 'Испанский',\n        'fr'    => 'Французский',\n        'gl'    => 'Галисийский',\n        'he'    => 'Иврит',\n        'hr'    => 'Хорватский',\n        'hu'    => 'Венгерский',\n        'it'    => 'Итальянский',\n        'nb'    => 'Норвежский (Букмол)',\n        'nl'    => 'Нидерландский',\n        'pl'    => 'Польский',\n        'pt-BR' => 'Португальский (Бразилия)',\n        'ru'    => 'Русский',\n        'sk'    => 'Словацкий',\n        'tr'    => 'Турецкий',\n    ],\n    'header'=> 'Языки',\n];\n"
  },
  {
    "path": "lang/ru/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Новая локация',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [\n        'characters'    => 'Выбирайте между просмотром списка всех персонажей этой локации и всех ее подлокаций и просмотром только тех, кто относится непосредственно к ней.',\n    ],\n    'hints'         => [],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'type'  => 'Город, королевство, развалины',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/ru/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Редактировать',\n        'exit-edit-mode'    => 'Исследовать',\n        'finish-drawing'    => 'Закончить рисовать фигуру',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Нажмите на карту, чтобы начать рисовать фигуру',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Добавить новую группу',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Удалена :count группа.|[2,4] Удалено :count группы.|[5,*] Удалено :count групп.',\n        'patch'     => '{1} Обновлена :count группа.|[2,4] Обновлено :count группы.|[5,*] Обновлено :count групп.',\n    ],\n    'create'        => [\n        'success'   => 'Группа \":name\" создана.',\n        'title'     => 'Новая группа',\n    ],\n    'delete'        => [\n        'success'   => 'Группа \":name\" удалена.',\n    ],\n    'edit'          => [\n        'success'   => 'Группа \":name\" обновлена.',\n        'title'     => 'Редактирование группы :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Показывать по умолчанию',\n        'position'  => 'Позиция',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Метки можно объединять в группы. При исследовании карты группы меток можно скрыть или показать одним нажатием.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Метки группы будут видны по умолчанию.',\n    ],\n    'index'         => [\n        'title' => 'Группы карты :name',\n    ],\n    'pitch'         => [],\n    'placeholders'  => [\n        'name'          => 'Магазины, клады, NPC',\n        'position'      => 'Первая',\n        'position_list' => 'После :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Сохранить порядок',\n        'success'   => '{1} Изменен порядок :count группы.|[2,*] Изменен порядок :count групп.',\n        'title'     => 'Изменение порядка групп',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Новый слой',\n    ],\n    'base'          => 'Основной слой',\n    'bulks'         => [\n        'delete'    => '{1} Удален :count слой.|[2,4] Удалено :count слоя.|[5,*] Удалено :count слоев.',\n        'patch'     => '{1} Обновлен :count слой.|[2,4] Обновлено :count слоя.|[5,*] Обновлено :count слоев.',\n    ],\n    'create'        => [\n        'success'   => 'Слой \":name\" создан.',\n        'title'     => 'Новый слой',\n    ],\n    'delete'        => [\n        'success'   => 'Слой \":name\" удален.',\n    ],\n    'edit'          => [\n        'success'   => 'Слой \":name\" обновлен.',\n        'title'     => 'Редактирование слоя :name',\n    ],\n    'fields'        => [\n        'position'  => 'Позиция',\n        'type'      => 'Тип слоя',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Загружайте слои карты в виде переключаемых фоновых изображений, показываемых под метками, или перекрывающих, показываемых поверх карты, но под метками.',\n        'is_real'   => 'Слои не доступны при использовании OpenStreetMaps.',\n    ],\n    'index'         => [\n        'title' => 'Слои карты :name',\n    ],\n    'pitch'         => [],\n    'placeholders'  => [\n        'name'          => 'Подземный этаж, уровень 2, затонувший корабль',\n        'position'      => 'Первая',\n        'position_list' => 'После :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Сохранить порядок',\n        'success'   => '{1} Изменен порядок :count слоя.|[2,*] Изменен порядок :count слоев.',\n        'title'     => 'Изменение порядка слоев',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Перекрывающий (скрытый)',\n        'overlay_shown' => 'Перекрывающий (видимый)',\n        'standard'      => 'Обычный',\n    ],\n    'types'         => [\n        'overlay'       => 'Перекрывающий, скрытый по умолчанию',\n        'overlay_shown' => 'Перекрывающий, видимый по умолчанию',\n        'standard'      => 'Обычный (самостоятельный)',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Написать отдельную статью для этой метки',\n        'remove'            => 'Удалить метку',\n        'reset-polygon'     => 'Очистить точки',\n        'save_and_explore'  => 'Сохранить и Исследовать',\n        'start-drawing'     => 'Начать рисовать',\n        'update'            => 'Редактировать метку',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Удалена :count метка.|[2,4] Удалено :count метки.|[5,*] Удалено :count меток.',\n        'patch'     => '{1} Обновлена :count метка.|[2,4] Обновлено :count метки.|[5,*] Обновлено :count меток.',\n    ],\n    'create'        => [\n        'success'   => 'Метка \":name\" создана.',\n        'title'     => 'Новая метка',\n    ],\n    'delete'        => [\n        'success'   => 'Метка \":name\" удалена.',\n    ],\n    'edit'          => [\n        'success'   => 'Метка \":name\" обновлена.',\n        'title'     => 'Редактирование метки :name',\n    ],\n    'fields'        => [\n        'circle_radius' => 'Радиус круга',\n        'copy_elements' => 'Копировать элементы',\n        'custom_icon'   => 'Другая иконка',\n        'custom_shape'  => 'Настройка формы фигуры',\n        'font_colour'   => 'Цвет иконки',\n        'group'         => 'Группа меток',\n        'icon'          => 'Иконка',\n        'is_draggable'  => 'Подвижная',\n        'latitude'      => 'Широта',\n        'longitude'     => 'Долгота',\n        'opacity'       => 'Непрозрачность',\n        'pin_size'      => 'Размер метки',\n        'polygon_style' => [\n            'stroke'            => 'Цвет линий',\n            'stroke-opacity'    => 'Непрозрачность линий',\n            'stroke-width'      => 'Толщина линий',\n        ],\n    ],\n    'helpers'       => [\n        'base'                      => 'Чтобы добавить метку, нажмите в любое место на карте.',\n        'copy_elements'             => 'Копировать группы, слои и метки.',\n        'copy_elements_to_campaign' => 'Копировать группы, слои и метки. Метки, связанные с объектами, станут обычными метками.',\n        'custom_icon_v2'            => 'Используйте иконки с :fontawesome, :rpgawesome или собственную SVG иконку. Подробнее расскажет :docs.',\n        'custom_radius'             => 'Выберите вариант \"Другой\" в списке размеров, чтобы задать радиус круга.',\n        'draggable'                 => 'Подвижные метки можно двигать в режиме исследования.',\n        'label'                     => 'Надпись отображается на карте в виде текста. Его содержание определяется названием метки или объекта.',\n        'polygon'                   => [\n            'edit'  => 'Нажмите на карту, чтобы добавить место нажатия к координатам этой фигуры.',\n        ],\n    ],\n    'icons'         => [\n        'custom'        => 'Особая',\n        'entity'        => 'Объект',\n        'exclamation'   => 'Восклицание',\n        'marker'        => 'Метка',\n        'question'      => 'Вопрос',\n    ],\n    'index'         => [\n        'title' => 'Метки карты :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Рисуйте какие угодно многоугольники для отображения границ и других фигур.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'Попробуйте :example1 или :example2',\n        'custom_shape'  => '100,100 200,240 340,110',\n        'name'          => 'Обязательно, если не выбран объект.',\n    ],\n    'presets'       => [\n        'helper'    => 'Нажмите на заготовку, чтобы применить ее, или создайте новую.',\n    ],\n    'shapes'        => [\n        '0' => 'Круг',\n        '1' => 'Квадрат',\n        '2' => 'Треугольник',\n        '3' => 'Особая',\n    ],\n    'sizes'         => [\n        '0' => 'Крошечная',\n        '1' => 'Обычная',\n        '2' => 'Маленькая',\n        '3' => 'Большая',\n        '4' => 'Огромная',\n    ],\n    'tabs'          => [\n        'circle'    => 'Круг',\n        'label'     => 'Надпись',\n        'marker'    => 'Метка',\n        'polygon'   => 'Фигура',\n        'preset'    => 'Заготовка',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Назад к :name',\n        'edit'      => 'Редактировать карту',\n        'explore'   => 'Исследовать',\n    ],\n    'create'        => [\n        'title' => 'Новая карта',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'При сегментировании карты произошла ошибка. Для помощи, пожалуйста, свяжитесь с командой на :discord.',\n            'running'   => [\n                'edit'      => 'Карту нельзя редактировать до завершения сегментирования.',\n                'explore'   => 'Карту нельзя просматривать до завершения сегментирования.',\n                'time'      => 'Это может занять от нескольких минут до нескольких часов, в зависимости от размера карты.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'Чтобы отобразить карту в обзоре кампании, ей нужно изображение.',\n        ],\n        'explore'   => [\n            'missing'   => 'Чтобы исследовать карту, добавьте ей изображение.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Метка',\n        'center_x'          => 'Долгота по умолчанию',\n        'center_y'          => 'Широта по умолчанию',\n        'centering'         => 'Центрирование',\n        'distance_measure'  => 'Измерение расстояния',\n        'distance_name'     => 'Единица измерения расстояния',\n        'grid'              => 'Сетка',\n        'has_clustering'    => 'Объединять метки в кластеры',\n        'initial_zoom'      => 'Изначальное приближение',\n        'is_real'           => 'Использовать OpenStreetMaps',\n        'max_zoom'          => 'Максимальное приближение',\n        'min_zoom'          => 'Минимальное приближение',\n        'tabs'              => [\n            'coordinates'   => 'Координаты',\n            'marker'        => 'Метка',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'Следующие значения влияют на то, на какую часть карты фокус наведен изначально. Чтобы навести фокус на центр карты, оставьте эти поля пустыми.',\n        'centering'             => 'Центрирование на метке не зависит от указанных координат по умолчанию.',\n        'chunked_zoom'          => 'Автоматически объединять метки в кластеры, если они находятся рядом.',\n        'distance_measure'      => 'Указание меры расстояния откроет инструмент измерения расстояний в режиме исследования. Чтобы 100 пикселей равнялись 1 километру, значение должно быть 0.0041.',\n        'distance_measure_2'    => 'Чтобы 100 пикселей равнялись километру, введите 0.0041',\n        'grid'                  => 'Укажите размер сетки, отображаемой в режиме исследования.',\n        'has_clustering'        => 'Автоматически объединять метки в кластеры, если они находятся рядом.',\n        'initial_zoom'          => 'Уровень приближения карты при ее загрузке. По умолчанию он равен :default, максимальное допустимое значение :max, а минимальное :min.',\n        'is_real'               => 'Включите это, если хотите использовать карту реального мира, а не загруженную картинку. Это сделает слои недоступными.',\n        'max_zoom'              => 'Максимальный уровень приближения карты. По умолчанию он равен :default, максимальное допустимое значение :max.',\n        'min_zoom'              => 'Минимальный уровень приближения карты. По умолчанию он равен :default, минимальное допустимое значение это :min.',\n        'missing_image'         => 'Добавьте карте изображение и сохраните ее, чтобы получить возможность добавлять слои и метки.',\n    ],\n    'index'         => [],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Группы',\n        'layers'    => 'Слои',\n        'markers'   => 'Метки',\n        'settings'  => 'Настройки',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Чтобы центрировать карту на середину, оставьте поле пустым.',\n        'center_x'      => 'Чтобы центрировать карту на середину, оставьте поле пустым.',\n        'center_y'      => 'Чтобы центрировать карту на середину, оставьте поле пустым.',\n        'distance_name' => 'Км, миль, футов, гамбургеров',\n        'grid'          => 'Расстояние в пикселях между линиями сетки. Пусто - нет сетки.',\n        'name'          => 'Название карты',\n        'type'          => 'Подземелье, город, галактика',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Карты',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'Идет сегментирование карты. Это может занять от пару минут до нескольких часов.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'subscribing'   => 'подписки',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новая заметка',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'Подзаметки',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'note'  => 'Выберите родительскую заметку',\n        'type'  => 'Религия, раса, политика',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/ru/notifications.php",
    "content": "<?php\n\nreturn [\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'Ваша заявка на вступление в кампанию :campaign одобрена.',\n            'approved_message'      => 'Ваша заявка на вступление в кампанию :campaign одобрена. Сообщение: :reason',\n            'new'                   => 'Новая заявка на вступление в кампанию :campaign.',\n            'rejected'              => 'Ваша заявка на вступление в кампанию :campaign отклонена. Причина: :reason',\n            'rejected_no_message'   => 'Ваша заявка на вступление в кампанию :campaign отклонена.',\n        ],\n        'asset_export'      => 'Экспорт изображений кампании готов. Ссылка доступна в течение :time минут.',\n        'boost'             => [\n            'add'           => 'Кампанию :campaign теперь усиливает :user.',\n            'remove'        => 'Пользователь :user перестал усиливать кампанию :campaign.',\n            'superboost'    => 'Кампанию :campaign теперь супер-усиливает :user.',\n        ],\n        'deleted'           => 'Кампания :campaign была удалена.',\n        'export'            => 'Экспорт кампании готов. Ссылка доступна в течение :time минут.',\n        'export_error'      => 'При экспорте изображений вашей кампании произошла ошибка. Пожалуйста, свяжитесь с нами, если проблема повторится.',\n        'hidden'            => 'Кампания :campaign убрана со страницы публичных кампаний.',\n        'join'              => 'Пользователь :user присоединился к кампании :campaign.',\n        'leave'             => 'Пользователь :user покинул кампанию :campaign.',\n        'plugin'            => [\n            'deleted'   => 'Плагин :plugin удален из каталога и из вашей кампании :campaign.',\n        ],\n        'role'              => [\n            'add'       => 'Вы были добавлены в роль :role в кампании :campaign.',\n            'remove'    => 'Вы были удалены из роли :role в кампании :campaign.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => 'Член команды Kanka :user присоединился к кампании :campaign.',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Очистить все',\n        'success'   => 'Уведомления удалены.',\n        'title'     => 'Очистить уведомления.',\n    ],\n    'header'            => 'У вас :count уведомлений',\n    'index'             => [\n        'title' => 'Уведомления',\n    ],\n    'map'               => [\n        'chunked'   => 'Сегментирование карты :name завершено, она готова к использованию.',\n    ],\n    'no_notifications'  => 'Пока уведомлений нет.',\n    'subscriptions'     => [\n        'charge_fail'   => 'При обработке вашей оплаты произошла ошибка. Пожалуйста, подождите немного, пока мы попробуем обработать ее еще раз. Пожалуйста, свяжитесь с нами, если ничего не изменится.',\n        'deleted'       => 'Ваша подписка на Kanka была отменена из-за слишком большого количества неудачных попыток снятия денег с вашей карты. Пожалуйста, перейдите в настройки подписок и попробуйте обновить параметры вашей оплаты.',\n        'ended'         => 'Ваша подписка на Kanka закончилась. Ваши усилители кампаний и роли в Discord были удалены. Надеемся вы скоро вернетесь!',\n        'failed'        => 'Не удалось совершить оплату по вашим параметрам оплаты. Пожалуйста обновите их настройках способа оплаты.',\n        'started'       => 'Ваша подписка на Kanka оформлена.',\n    ],\n    'unread'            => 'Новое уведомление',\n];\n"
  },
  {
    "path": "lang/ru/onboarding/tags.php",
    "content": "<?php\n\nreturn [\n    'npcs'  => 'NPC',\n];\n"
  },
  {
    "path": "lang/ru/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новая организация',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_defunct'    => 'Исчезнувшая',\n        'members'       => 'Члены',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_defunct'    => 'Укажите, перестала ли эта организация существовать.',\n    ],\n    'index'         => [],\n    'members'       => [\n        'destroy'       => [\n            'success'   => 'Член удален из организации.',\n        ],\n        'edit'          => [\n            'title' => 'Редактирование члена :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Руководитель',\n            'pinned'    => 'Закрепление',\n            'role'      => 'Роль',\n            'status'    => 'Статус активности',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Все персонажи, входящие в эту организацию или ее подорганизации.',\n            'members'       => 'Все персонажи, входящие в эту организацию.',\n            'pinned'        => 'Выберите, на страницах каких объектов следует закрепить это членство.',\n        ],\n        'pinned'        => [\n            'both'  => 'Везде',\n            'none'  => 'Нигде',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Руководитель этого персонажа',\n            'role'      => 'Лидер, член, верховный септон, шпион',\n        ],\n        'status'        => [\n            'active'    => 'Активен',\n            'inactive'  => 'Неактивен',\n            'unknown'   => 'Статус неизвестен',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'Культ, банда, восстание, фэндом',\n    ],\n    'quests'        => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/ru/pagination.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Языковые ресурсы постраничного вывода\n    |--------------------------------------------------------------------------\n    |\n    | Последующие языковые строки используются библиотекой постраничного вывода\n    | для создания простых ссылок на страницы. Вы можете поменять их на любые\n    | другие, которые лучше подходят для вашего приложения.\n    |\n    */\n\n    'previous' => '&laquo; Назад',\n    'next'     => 'Вперёд &raquo;',\n];\n"
  },
  {
    "path": "lang/ru/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Небольшие проблемы с введенными данными.',\n        'title'         => 'Упс!',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/passwords.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Языковые ресурсы напоминания пароля\n    |--------------------------------------------------------------------------\n    |\n    | Последующие языковые строки возвращаются брокером паролей на неудачные\n    | попытки обновления пароля в таких случаях, как ошибочный код сброса\n    | пароля или неверный новый пароль.\n    |\n    */\n\n    'password' => 'Пароль должен быть не менее шести символов и совпадать с подтверждением.',\n    'reset'    => 'Ваш пароль был сброшен!',\n    'sent'     => 'Ссылка на сброс пароля была отправлена!',\n    'token'    => 'Ошибочный код сброса пароля.',\n    'user'     => 'Не удалось найти пользователя с указанным электронным адресом.',\n];\n"
  },
  {
    "path": "lang/ru/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новый пост',\n    ],\n    'fields'        => [\n        'name'  => 'Название',\n    ],\n    'placeholders'  => [\n        'name'  => 'Название поста',\n    ],\n    'position'      => [\n        'first' => 'В начало',\n        'last'  => 'В конец',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Новая заготовка',\n    ],\n    'create'        => [\n        'success'   => 'Заготовка \":name\" создана.',\n        'title'     => 'Новая заготовка',\n    ],\n    'destroy'       => [\n        'success'   => 'Заготовка \":name\" уничтожена.',\n    ],\n    'edit'          => [\n        'success'   => 'Заготовка \":name\" модифицирована.',\n        'title'     => 'Редактирование заготовки :name',\n    ],\n    'fields'        => [\n        'name'  => 'Название',\n    ],\n    'lists'         => [\n        'empty' => 'В данный момент в кампании нет доступных заготовок.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Название заготовки',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/profiles.php",
    "content": "<?php\n\nreturn [\n    'appearance'                    => [],\n    'avatar'                        => [\n        'success'   => 'Аватар обновлен.',\n    ],\n    'campaign_switcher_order_by'    => [],\n    'edit'                          => [\n        'success'   => 'Профиль обновлен.',\n    ],\n    'editors'                       => [],\n    'fields'                        => [\n        'avatar'                    => 'Аватар',\n        'bio'                       => 'О себе',\n        'email'                     => 'Электронная почта',\n        'hide_subscription'         => 'Скрыть мое имя в :hall_of_fame',\n        'last_login_share'          => 'Показывать участникам кампании дату моего последнего входа в Kanka.',\n        'name'                      => 'Имя',\n        'new_password'              => 'Новый пароль',\n        'new_password_confirmation' => 'Подтверждение нового пароля',\n        'newsletter'                => 'Я хочу иногда получать электронные письма.',\n        'password'                  => 'Текущий пароль',\n        'profile-name'              => 'Имя в профиле',\n        'settings'                  => 'Настройки',\n        'theme'                     => 'Тема',\n    ],\n    'helpers'                       => [\n        'profile-name'  => 'Укажите, как вы хотите указать ваше имя в своем :profile. В таком же виде его будет отображать :marketplace. Оставьте пустым, чтобы использовать ваше обычное имя.',\n    ],\n    'newsletter'                    => [\n        'helpers'   => [\n            'header'    => 'Подписывайтесь на наши рассылки по электронной почте, чтобы быть в курсе всего, что происходит на Kanka.',\n        ],\n        'options'   => [\n            'monthly'   => 'Новости Kanka',\n        ],\n        'title'     => 'Рассылки',\n    ],\n    'password'                      => [\n        'success'   => 'Пароль обновлен.',\n    ],\n    'placeholders'                  => [\n        'bio'                       => 'Небольшой текст о себе, показываемый в публичном профиле.',\n        'email'                     => 'Ваш адрес электронной почты',\n        'name'                      => 'Ваше имя',\n        'new_password'              => 'Ваш новый пароль',\n        'new_password_confirmation' => 'Подтвердите ваш новый пароль.',\n        'password'                  => 'Ваш текущий пароль',\n    ],\n    'sections'                      => [\n        'dangerzone'    => 'Опасная зона',\n        'delete'        => [\n            'confirm'       => 'Удалить мой аккаунт',\n            'delete'        => 'Удалить мой аккаунт',\n            'goodbye'       => 'Если вы уверены, пожалуйста введите код :code в поле ниже.',\n            'helper'        => 'При удалении аккаунта будут также удалены все кампании, в которых нет других участников, кроме вас. Это действие необратимо.',\n            'subscribed'    => 'Пожалуйста, убедитесь, что ваша :subscription отменена, прежде чем удалить аккаунт.',\n            'title'         => 'Удаление аккаунта',\n            'warning'       => 'При удалении вашего аккаунта, все ваши данные будут потеряны. Вы уверены?',\n        ],\n        'password'      => [\n            'title' => 'Смена вашего пароля',\n        ],\n    ],\n    'settings'                      => [\n        'helpers'   => [\n            'bio'       => 'Раздел \"О себе\" будет показан в вашем :link.',\n            'profile'   => 'публичном профиле',\n        ],\n        'success'   => 'Настройки обновлены.',\n    ],\n    'theme'                         => [\n        'success'   => 'Тема обновлена.',\n        'themes'    => [\n            'dark'      => 'Темная',\n            'default'   => 'Стандартная',\n            'future'    => 'Будущее',\n            'midnight'  => 'Синяя Полночь',\n        ],\n    ],\n    'title'                         => 'Обновление вашего профиля',\n    'workflows'                     => [\n        'created'   => 'К созданному объекту',\n        'default'   => 'К списку объектов',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Новый квест',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'elements'      => [\n        'create'    => [\n            'success'   => 'Объект :entity добавлен в квест.',\n            'title'     => 'Новый элемент квеста :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Элемент :entity удален из квеста.',\n        ],\n        'edit'      => [\n            'success'   => 'Элемент :entity обновлен.',\n            'title'     => 'Редактирование элемента квеста :name',\n        ],\n        'fields'    => [\n            'entity_or_name'    => 'Нужно либо выбрать объект из кампании, либо дать название этому элементу.',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Копировать элементы квеста',\n        'date'          => 'Дата',\n        'element_role'  => 'Роль',\n        'is_completed'  => 'Завершен',\n        'role'          => 'Роль',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'Квест будет считаться завершенным.',\n    ],\n    'hints'         => [],\n    'index'         => [],\n    'placeholders'  => [\n        'date'      => 'Дата квеста в реальном мире',\n        'entity'    => 'Выберите объект',\n        'role'      => 'Роль объекта в квесте',\n        'type'      => 'Арка персонажа, побочный, основной',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Добавить элемент',\n        ],\n        'tabs'      => [\n            'elements'  => 'Элементы',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Новая раса',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Человек, фея, борг',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/ru/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Время вашей сессии истекло. Пожалуйста, попробуйте снова.',\n    'unknown_entity'    => 'Извините, мы не знаем, что такое \":entity\".',\n];\n"
  },
  {
    "path": "lang/ru/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Событие',\n        'livestream'    => 'Прямая трансляция',\n        'other'         => 'Другое',\n        'release'       => 'Обновление',\n        'vote'          => 'Голосование',\n    ],\n    'index'         => [\n        'description'   => 'Последние обновления kanka.io',\n        'title'         => 'Обновления',\n    ],\n    'post'          => [\n        'footer'    => 'От :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Назад к обновлениям',\n        'title'     => 'Обновление :name',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chronicles of Darkness',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/search.php",
    "content": "<?php\n\nreturn [\n    'no_results'    => 'Ничего не найдено.',\n    'title'         => 'Поиск',\n];\n"
  },
  {
    "path": "lang/ru/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'boost_name'    => 'Усилить кампанию :name',\n    ],\n    'boost'         => [\n        'actions'   => [\n            'confirm'   => 'Усилить!',\n            'remove'    => 'Перестать усиливать кампанию :campaign',\n            'subscribe' => 'Подписка на Kanka',\n            'upgrade'   => 'Обновить подписку',\n        ],\n        'errors'    => [\n            'boosted'   => 'Ой, кажется, кампания :campaign уже усилена!',\n        ],\n        'pitch'     => 'Оформите подписку, чтобы получить усилители кампаний.',\n        'success'   => 'Кампания :campaign теперь усилена. Пора опробовать новые потрясающие функции!',\n        'title'     => 'Усиление :campaign',\n    ],\n    'campaign'      => [\n        'boosted'       => 'Усиливает :user с :time.',\n        'superboosted'  => 'Супер-усиливает :user с :time.',\n        'unboosted'     => 'Не усилена',\n    ],\n    'pitch'         => [\n        'benefits'      => [\n            'backup'        => 'Возможность восстановить удаленный объект в течение :amount дней',\n            'customisable'  => 'Возможность настроить внешний вид кампании как-угодно',\n            'icons'         => 'Доступ к тысячам красивых иконок для карт и хронологий',\n            'title'         => 'Усиленные кампании получают',\n            'upload'        => 'Повышенные размеры загрузок для всех участников',\n        ],\n        'description'   => 'Наделите кампанию усилителями и помогите всем ее участникам открыть потрясающие функции. Не впечатляют усиленные кампании? Не беспокойтесь, ведь еще есть супер-усиленные кампании!',\n        'more'          => 'Смотрите полный список бонусов и преимуществ здесь: :boosters.',\n        'title'         => 'Поднимите кампанию на новый уровень с бонусами для всех участников',\n    ],\n    'ready'         => [\n        'available'         => 'Ваши свободные усилители.',\n        'pricing'           => 'Каждый уровень подписки дает вам хотя бы один усилитель кампаний по цене от :amount в месяц.',\n        'pricing-amount'    => ':currency :amount',\n        'title'             => 'Усиление кампаний',\n    ],\n    'superboost'    => [\n        'actions'   => [\n            'confirm'   => 'Супер-усилить!',\n            'remove'    => 'Перестать супер-усиливать кампанию :campaign',\n        ],\n        'errors'    => [\n            'boosted'   => 'Ой, кажется кампания :campaign уже супер-усилена!',\n        ],\n        'success'   => 'Кампания :campaign теперь супер-усилена. Пора опробовать новые потрясающие функции!',\n        'title'     => 'Супер-усилить кампанию :campaign',\n    ],\n    'title'         => 'Усилители кампаний',\n    'unboost'       => [\n        'confirm'   => 'Да',\n        'success'   => 'Кампания :campaign больше не усилена, а ваши усилители снова свободны.',\n        'title'     => 'Прекращение усиления кампании',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'           => [\n                'disable'   => 'Отключить двухфакторную аутентификацию',\n                'finish'    => 'Закончить и перейти ко входу',\n            ],\n            'activation_helper' => 'Для завершения подключения двухфакторной аутентификации следуйте данной инструкции.',\n            'disable'           => [\n                'title' => 'Отключение двухфакторной аутентификации',\n            ],\n            'enabled'           => 'Двухфакторная аутентификация для вашего аккаунта включена.',\n            'error_enable'      => 'Недействительный код, попробуйте еще раз',\n            'fields'            => [\n                'otp'   => 'Введите одноразовый пароль (OTP), предоставленный вашим приложением-аутентификатором.',\n            ],\n            'generate_qr'       => 'Сгенерировать QR-код',\n            'learn_more'        => 'Узнать больше о двухфакторной аутентификации.',\n            'success_disable'   => 'Двухфакторная аутентификация отключена.',\n            'success_enable'    => 'Двухфакторная аутентификация включена. Пожалуйста, войдите в свой аккаунт заново.',\n            'title'             => 'Двухфакторная аутентификация',\n        ],\n        'actions'           => [\n            'social'            => 'Перейти на вход Kanka',\n            'update_email'      => 'Обновить электронную почту',\n            'update_password'   => 'Обновить пароль',\n        ],\n        'email'             => 'Смена электронной почты',\n        'email_success'     => 'Электронная почта обновлена.',\n        'password'          => 'Смена пароля',\n        'password_success'  => 'Пароль обновлен.',\n        'social'            => [\n            'error'     => 'Этот аккаунт уже использует вход Kanka.',\n            'helper'    => 'Сейчас вход в ваш аккаунт управляется :provider. Вы можете перейти на стандартный вход Kanka, создав пароль.',\n            'success'   => 'Теперь ваш аккаунт использует вход Kanka.',\n            'title'     => 'Вход Kanka',\n        ],\n        'title'             => 'Аккаунт',\n    ],\n    'api'           => [\n        'helper'    => 'Добро пожаловать в Kanka API. Сгенерируйте личный маркер доступа, чтобы использовать его в API запросах для сбора информации о кампаниях, в которых вы состоите.',\n        'link'      => 'Читать документацию API',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Подключить',\n            'remove'    => 'Удалить',\n        ],\n        'benefits'  => 'Kanka предоставляет интеграцию со сторонними сервисами. В будущем планируется больше интеграций.',\n        'discord'   => [\n            'errors'    => [\n                'add'   => 'При подключении вашего Discord аккаунта к Kanka произошла ошибка. Пожалуйста, попробуйте снова. Если ошибка повторяется, обратите внимание, что Discord API генерирует ошибку, если пользователь состоит более чем в 100 серверах.',\n            ],\n            'success'   => [\n                'add'       => 'Ваш аккаунт Discord подключен.',\n                'remove'    => 'Ваш аккаунт Discord отключен.',\n            ],\n            'text'      => 'Автоматический доступ к ролям вашей подписки.',\n            'unlock'    => 'Получите роли в Discord',\n        ],\n        'title'     => 'Интеграция',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'Кампания :name уже усилена.',\n            'exhausted_boosts'      => 'У вас закончились усилители. Вы можете снять усилитель с одной из кампаний, и усилить другую.',\n            'exhausted_superboosts' => 'У вас закончились усилители. Вам нужно 3 усилителя, чтобы супер-усилить кампанию.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Австрия',\n        'belgium'       => 'Бельгия',\n        'france'        => 'Франция',\n        'germany'       => 'Германия',\n        'italy'         => 'Италия',\n        'netherlands'   => 'Нидерланды',\n        'spain'         => 'Испания',\n    ],\n    'invoices'      => [],\n    'layout'        => [\n        'title' => 'Оформление',\n    ],\n    'marketplace'   => [],\n    'menu'          => [\n        'account'               => 'Аккаунт',\n        'api'                   => 'API',\n        'appearance'            => 'Оформление',\n        'apps'                  => 'Приложения',\n        'boosters'              => 'Усилители',\n        'notifications'         => 'Уведомления',\n        'other'                 => 'Другое',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Способы оплаты',\n        'personal_settings'     => 'Персональные настройки',\n        'profile'               => 'Профиль',\n        'settings'              => 'Настройки',\n        'subscription'          => 'Подписка',\n        'subscription_status'   => 'Статус подписки',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Устаревшая функция - если вы хотите поддержать Kanka, пожалуйста сделайте это с помощью меню \":subscription\". Ссылка на Patreon до сих пор активна для наших Patron-ов, подключивших свои аккаунты до нашего ухода с Patreon.',\n        'pledge'        => 'Уровень: :name',\n        'remove'        => [\n            'button'    => 'Отключить аккаунт Patreon',\n            'success'   => 'Ваш аккаунт Patreon отключен.',\n            'text'      => 'При отключении вашего аккаунта Patreon Kanka будут удалены ваши бонусы, имя в Зале Славы, усилители кампаний и другие функции, получаемые через поддержку Kanka. Ничего из того, чтобы было создано в усиленной кампании не пропадет (например, изображения заголовков объектов). Оформив подписку заново, вы получите доступ ко всем этим данным, и снова сможете усиливать ваши кампании.',\n            'title'     => 'Отключение вашего Patreon аккаунта Kanka',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Обновить профиль',\n        ],\n        'avatar'    => 'Изображение профиля',\n        'success'   => 'Профиль обновлен.',\n        'title'     => 'Публичный профиль',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Отменить подписку',\n            'subscribe'         => 'Подписаться',\n            'update_currency'   => 'Сохранить предпочитаемую валюту',\n        ],\n        'billing'               => [\n            'helper'    => 'Информация о вашей оплате обрабатывается и надежно сохраняется с помощью :stripe. Этот способ оплаты будет использоваться для всех ваших подписок.',\n            'saved'     => 'Сохраненный способ оплаты',\n        ],\n        'cancel'                => [\n            'options'   => [\n                'competitor'        => 'Перехожу на платформу-конкурента',\n                'financial'         => 'Подписка слишком дорого стоит',\n                'missing_features'  => 'Не хватает функций',\n                'not_for'           => 'Подписка это не для меня',\n                'not_using'         => 'Не пользуюсь Kanka',\n                'other'             => 'Другое',\n            ],\n            'text'      => 'Жаль, что вы нас покидаете! После отмены ваша подписка останется активной до :date, после которого вы потеряете ваши усилители кампаний и другие преимущества, которые дает поддержка Kanka. Вы можете заполнить следующую форму, чтобы сообщить нам, что мы могли бы улучшить, или что привело вас к этому решению.',\n        ],\n        'cancelled'             => 'Ваша подписка отменена. Вы можете обновить подписку, когда ваша нынешняя подписка закончится :date.',\n        'change'                => [\n            'text'  => [\n                'monthly'   => 'Вы подписываетесь на уровень :tier, стоимостью :amount в месяц.',\n                'yearly'    => 'Вы подписываетесь на уровень :tier, стоимостью :amount в год.',\n            ],\n            'title' => 'Изменение уровня подписки',\n        ],\n        'coupon'                => [\n            'check'         => 'Проверить промокод',\n            'invalid'       => 'Недействительный промокод.',\n            'label'         => 'Промокод',\n            'percent_off'   => 'Вы получите скидку :percent% на вашу первую годовую подписку!',\n        ],\n        'currencies'            => [\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Изменение предпочитаемой валюты оплаты',\n        ],\n        'errors'                => [\n            'callback'      => 'Наш платежный провайдер сообщил нам об ошибке. Пожалуйста, попробуйте еще раз и свяжитесь с нами, если проблема повторится.',\n            'subscribed'    => 'Не удалось обработать вашу подписку. Stripe предоставил следующее пояснение.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Активна с',\n            'active_until'      => 'Активна до',\n            'billing'           => 'Оплата',\n            'currency'          => 'Валюта оплаты',\n            'payment_method'    => 'Способ оплаты',\n            'plan'              => 'Текущий план',\n            'reason'            => 'Причина',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Оплатите свою подписку с помощью :method. Этот способ оплаты не будет автоматически обновляться по окончанию вашей подписки. Метод :method доступен только для евро.',\n            'alternatives_warning'  => 'Повышение вашего уровня подписки при данном способе оплаты невозможно. Пожалуйста, оформите новую подписку, когда закончится текущая.',\n            'alternatives_yearly'   => 'Из-за ограничений, связанных с повторяющимися оплатами, метод :method доступен только для годовых подписок.',\n            'stripe'                => 'Ваша платежная информация безопасно хранится и обрабатывается с помощью :stripe.',\n        ],\n        'manage_subscription'   => 'Управление подпиской',\n        'payment_method'        => [\n            'actions'       => [\n                'add_new'           => 'Добавить способ оплаты',\n                'change'            => 'Изменить способ оплаты',\n                'save'              => 'Сохранить способ оплаты',\n                'show_alternatives' => 'Альтернативные способы оплаты',\n            ],\n            'add_one'       => 'У вас нет сохраненного способа оплаты.',\n            'alternatives'  => 'Вы можете оплатить подписку с помощью альтернативных способов оплаты. При этом подписка будет оплачена один раз и не будет автоматически обновляться каждый месяц.',\n            'card'          => 'Карта',\n            'card_name'     => 'Имя на карте',\n            'country'       => 'Страна проживания',\n            'ending'        => 'Заканчивается на',\n            'helper'        => 'Эта карта будет использоваться для всех ваших подписок.',\n            'new_card'      => 'Добавить новый способ оплаты.',\n            'saved'         => ':brand заканчивается на :last4',\n        ],\n        'periods'               => [\n            'monthly'   => 'Месячный план',\n            'yearly'    => 'Годовой план',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => 'Если хотите, можете рассказать нам, почему вы понижаете уровень подписки.',\n            'reason'            => 'Если хотите, можете рассказать нам, почему вы перестаете поддерживать Kanka. Может не хватает нужной вам функции? Или изменилась ваша финансовая ситуация?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':currency :amount выплачивается ежемесячно',\n            'cost_yearly'   => ':currency :amount выплачивается ежегодно',\n        ],\n        'sub_status'            => 'Информация о подписке',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Отменить подписку',\n                'downgrading'       => 'Свяжитесь с нами для понижения уровня',\n                'rollback'          => 'Перейти на Kobold',\n                'subscribe'         => 'Перейти на месячный :tier',\n                'subscribe_annual'  => 'Перейти на годовой :tier',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Ваша оплата зарегистрирована. Вы получите уведомление, как только она будет обработана и ваша подписка будет активирована.',\n            'callback'      => 'Ваша подписка успешно оформлена. Ваш аккаунт будет обновлен, как только наш платежный провайдер сообщит нам об оплате (это может занять несколько минут).',\n            'currency'      => 'Настройки вашей предпочитаемой валюты обновлены.',\n            'subscribed'    => 'Ваша подписка успешно оформлена! Не забудьте подписаться на рассылку голосований, чтобы быть в курсе, когда начнется новое голосование. Также советуем заглянуть к нам на Discord и стать частью сообщества.',\n        ],\n        'tiers'                 => 'Уровни подписки',\n        'trial_period'          => 'Годовые подписки можно отменять в течение 14 дней. Напишите нам на :email, если вы хотите отменить вашу годовую подписку и получить деньги назад.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Информация о повышении и понижении уровня',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Ваши бонусы останутся доступными до окончания периода подписки.',\n                    'boosts'    => 'То же самое происходит с усиленными кампаниями. При окончании усиления функции усиления становятся невидимыми, но не удаляются из кампании.',\n                    'kobold'    => 'Чтобы отменить подписку, перейдите на уровень Kobold.',\n                ],\n                'title'     => 'При отмене подписки',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'Ваш текущий уровень будет активен до окончания текущего периода оплаты, после чего подписка будет понижена до вашего нового уровня.',\n                ],\n                'provide_reason'    => 'Если вам не трудно, поделитесь с нами, почему вы решили понизить уровень.',\n                'title'             => 'При понижении уровня',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Ваша подписка будет незамедлительно оплачена, и вы получите доступ к вашему новому уровню.',\n                    'prorate'   => 'Вы платите только разницу между вашими старым и новым уровнями.',\n                ],\n                'title'     => 'При повышении уровня',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'Не удалось совершить оплату с помощью вашей карты. Пожалуйста обновите информацию вашей кредитной карты, и мы попробуем совершить оплату снова в течение нескольких дней. Если ошибка произойдет снова, ваша подписка будет отменена.',\n            'patreon'       => 'Ваш аккаунт подключен к Patreon. Пожалуйста, отключите ваш аккаунт в настройках :patreon перед переходом на подписку Kanka.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'created_campaigns' => 'Ваши кампании',\n        'new_campaign'      => 'Новая кампания',\n        'public_campaigns'  => 'Публичные кампании',\n        'updated'           => 'Обновлена',\n    ],\n    'dashboard'         => 'Обзор кампании',\n    'entity-creator'    => 'Быстрый редактор',\n    'gallery'           => 'Галерея',\n    'other'             => 'Другое',\n    'relations'         => 'Связи',\n    'world'             => 'Мир',\n];\n"
  },
  {
    "path": "lang/ru/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => 'Ваш мир',\n    ],\n    'character1'    => [],\n    'character2'    => [],\n    'item1'         => [],\n    'kingdom1'      => [],\n    'kingdom2'      => [],\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/ru/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Оформите подписку Kanka, чтобы загружать изображения больших размеров, забыть о рекламах и получить :boosters и :more. Мы используем :stripe для проведения оплаты без хранения и передачи информации кредитных карт через наши сервера.',\n        'more'  => 'другие потрясающие функции',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'Это продвижение больше не действует.',\n        'invalid'   => 'Неизвестное продвижение.',\n        'only-new'  => 'Это продвижение доступно только новым подписчикам.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Stripe не удалось выполнить оплату вашим способом. Ваша подписка была деактивирована.',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'   => 'Добавить объект',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Новый тэг',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'          => 'Потомки',\n        'is_auto_applied'   => 'Автоматически добавлять новым объектам',\n    ],\n    'helpers'       => [\n        'no_children'   => 'В данным момент не существует объектов с этим тэгом.',\n    ],\n    'hints'         => [\n        'children'          => 'Этот список содержит все объекты с этим тэгом или его подтэгами.',\n        'is_auto_applied'   => 'Тэг будет автоматически добавляться новым объектам кампании.',\n        'tag'               => 'Это список всех непосредственных потомков этого тэга.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Знания, войны, история, религия, флаги',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Потомки',\n        ],\n    ],\n    'tags'          => [],\n];\n"
  },
  {
    "path": "lang/ru/teams.php",
    "content": "<?php\n\nreturn [\n    'index'     => [\n        'lead'          => 'С Kanka ворлд-билдинг веселее и надежнее',\n        'translations'  => 'Перевод',\n    ],\n    'leads'     => [\n        'translators'   => 'Платформа Kanka переведена на ряд языков благодаря вкладу этих потрясающих людей.',\n    ],\n    'patreon'   => [],\n    'people'    => [\n        'itzamna'   => [\n            'title' => 'Младший разработчик',\n        ],\n        'jay'       => [\n            'title' => 'Автор и ведущий разработчик',\n        ],\n        'jon'       => [\n            'title' => 'Соавтор и бизнес-менеджер',\n        ],\n        'kaz'       => [\n            'title' => 'Истребитель багов',\n        ],\n        'laura'     => [\n            'title' => 'Социальные сети',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'subscribe' => [\n            'monthly'   => 'Месячная подписка :tier',\n            'yearly'    => 'Годовая подписка :tier',\n        ],\n    ],\n    'current'   => 'Это ваша текущая подписка.',\n    'features'  => [\n        'api_requests'      => ':amount API запросов в минуту',\n        'boosters'          => 'усилителей кампаний',\n        'discord'           => 'Роли в Discord',\n        'feature_influence' => 'Влияние на новые функции',\n        'file_size'         => 'Загрузка файлов размером до :size',\n        'nice_image'        => 'Иконки объектов по умолчанию',\n        'no_ads'            => 'Отсутствие рекламы',\n        'pagination'        => 'До :amount результатов на странице',\n    ],\n    'periods'   => [],\n    'pricing'   => ':currency :amount/месяц',\n    'ribbons'   => [\n        'best-value'    => 'Выгодно',\n    ],\n    'toggle'    => [],\n];\n"
  },
  {
    "path": "lang/ru/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Копировать продвинутое упоминание с названием',\n        'success'           => 'Продвинутое упоминание элемента скопировано в буфер обмена.',\n    ],\n    'create'        => [\n        'success'   => 'Элемент добавлен в хронологию.',\n        'title'     => 'Новый элемент хронологии',\n    ],\n    'delete'        => [\n        'success'   => 'Элемент \":name\" удален.',\n    ],\n    'edit'          => [\n        'success'   => 'Элемент обновлен.',\n        'title'     => 'Редактирование элемента хронологии',\n    ],\n    'fields'        => [\n        'date'              => 'Дата',\n        'era'               => 'Эра',\n        'icon'              => 'Иконка',\n        'use_entity_entry'  => 'Показывать статью связанного объекта под элементом. Если у этого элемента есть текст, он будет показан выше статьи.',\n        'use_event_date'    => 'Использовать дату события',\n    ],\n    'helpers'       => [\n        'date'              => 'Если элемент связан с событием, то можно использовать его дату.',\n        'entity_is_private' => 'Объект элемента скрыт.',\n        'icon'              => 'Скопируйте HTML иконки с :fontawesome или :rpgawesome.',\n        'is_collapsed'      => 'Элемент будет отображен свернутым по умолчанию.',\n    ],\n    'placeholders'  => [\n        'date'      => 'Например, 42-ое марта или 1332-1337',\n        'name'      => 'Обязательно, если не выбран объект.',\n        'position'  => 'Позиция в списке элементов эры. Оставьте пустым, чтобы добавить в конец.',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/ru/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Новая эра',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} Удалено :count эр.|{1} Удалена :count эра.|[2,4] Удалено :count эры.|[5,*] Удалено :count эр.',\n    ],\n    'create'        => [\n        'success'   => 'Эра \":name\" создана.',\n        'title'     => 'Новая эра',\n    ],\n    'delete'        => [\n        'success'   => 'Эра \":name\" удалена.',\n    ],\n    'edit'          => [\n        'success'   => 'Эра \":name\" обновлена.',\n        'title'     => 'Редактирование эры :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Сокращение',\n        'end_year'      => 'Год конца',\n        'is_collapsed'  => 'Свернуть',\n        'start_year'    => 'Год начала',\n    ],\n    'helpers'       => [\n        'eras'          => 'Прежде чем добавлять в хронологию эры, ее нужно создать.',\n        'is_collapsed'  => 'Эра будет свернута по умолчанию.',\n        'primary'       => 'Разделяйте ваши хронологии на эры. Для правильной работы в хронологии должна быть хотя бы одна эра.',\n    ],\n    'index'         => [\n        'title' => 'Эры хронологии :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'н. э., до н. э.',\n        'end_year'      => 'Год, которым заканчивается эра. Оставьте пустым, если это текущая эра.',\n        'name'          => 'Современность, бронзовый век, галактические войны',\n        'start_year'    => 'Год, с которого начинается эра. Оставьте пустым, если это первая эра.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/ru/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Добавить элемент в эру :era',\n        'back'          => 'Назад к :name',\n        'save_order'    => 'Сохранить новый порядок',\n    ],\n    'create'        => [\n        'title' => 'Новая хронология',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_elements' => 'Копировать элементы',\n        'copy_eras'     => 'Копировать эры',\n        'eras'          => 'Эры',\n        'reverse_order' => 'Обратный порядок эр',\n    ],\n    'helpers'       => [\n        'reverse_order' => 'Отображение эр в обратном хронологическом порядке (чем древнее эра, тем она выше).',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'Основные события, хроники мира, история королевства',\n    ],\n    'reorder'       => [\n        'success'   => 'Порядок элементов хронологии изменен.',\n        'title'     => 'Изменение порядка элементов',\n    ],\n    'show'          => [],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/ru/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'Истинное мастерство слова! Победа в событии по ворлд-билдингу.',\n    ],\n    'fields'        => [\n        'achievements'      => 'Достижения',\n        'banned'            => 'Этот пользователь был заблокирован.',\n        'entities_created'  => 'Создано объектов :help :count',\n        'member_since'      => 'Подписка с :date',\n        'public_campaigns'  => 'Публичные кампании',\n        'subscriber_since'  => 'Подписка с :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'Это число обновляется раз в сутки.',\n    ],\n    'title'         => 'Профиль пользователя :name',\n];\n"
  },
  {
    "path": "lang/ru/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Языковые ресурсы для проверки значений\n    |--------------------------------------------------------------------------\n    |\n    | Последующие языковые строки содержат сообщения по-умолчанию, используемые\n    | классом, проверяющим значения (валидатором). Некоторые из правил имеют\n    | несколько версий, например, size. Вы можете поменять их на любые\n    | другие, которые лучше подходят для вашего приложения.\n    |\n    */\n\n    'accepted'              => 'Вы должны принять :attribute.',\n    'active_url'            => 'Поле :attribute содержит недействительный URL.',\n    'after'                 => 'В поле :attribute должна быть дата после :date.',\n    'after_or_equal'        => 'В поле :attribute должна быть дата после или равняться :date.',\n    'alpha'                 => 'Поле :attribute может содержать только буквы.',\n    'alpha_dash'            => 'Поле :attribute может содержать только буквы, цифры, дефис и нижнее подчеркивание.',\n    'alpha_num'             => 'Поле :attribute может содержать только буквы и цифры.',\n    'array'                 => 'Поле :attribute должно быть массивом.',\n    'before'                => 'В поле :attribute должна быть дата до :date.',\n    'before_or_equal'       => 'В поле :attribute должна быть дата до или равняться :date.',\n    'between'               => [\n        'array'     => 'Количество элементов в поле :attribute должно быть между :min и :max.',\n        'file'      => 'Размер файла в поле :attribute должен быть между :min и :max Килобайт(а).',\n        'numeric'   => 'Поле :attribute должно быть между :min и :max.',\n        'string'    => 'Количество символов в поле :attribute должно быть между :min и :max.',\n    ],\n    'boolean'               => 'Поле :attribute должно иметь значение логического типа.',\n    'confirmed'             => 'Поле :attribute не совпадает с подтверждением.',\n    'date'                  => 'Поле :attribute не является датой.',\n    'date_equals'           => 'Поле :attribute дожно быть датой равной :date.',\n    'date_format'           => 'Поле :attribute не соответствует формату :format.',\n    'different'             => 'Поля :attribute и :other должны различаться.',\n    'digits'                => 'Длина цифрового поля :attribute должна быть :digits.',\n    'digits_between'        => 'Длина цифрового поля :attribute должна быть между :min и :max.',\n    'dimensions'            => 'Поле :attribute имеет недопустимые размеры изображения.',\n    'distinct'              => 'Поле :attribute содержит повторяющееся значение.',\n    'email'                 => 'Поле :attribute должно быть действительным электронным адресом.',\n    'exists'                => 'Выбранное значение для :attribute некорректно.',\n    'file'                  => 'Поле :attribute должно быть файлом.',\n    'filled'                => 'Поле :attribute обязательно для заполнения.',\n    'gt'                    => [\n        'array'     => 'Количество элементов в поле :attribute должно быть больше :value.',\n        'file'      => 'Размер файла в поле :attribute должен быть больше :value Килобайт(а).',\n        'numeric'   => 'Поле :attribute должно быть больше :value.',\n        'string'    => 'Количество символов в поле :attribute должно быть больше :value.',\n    ],\n    'gte'                   => [\n        'array'     => 'Количество элементов в поле :attribute должно быть больше или равно :value.',\n        'file'      => 'Размер файла в поле :attribute должен быть больше или равен :value Килобайт(а).',\n        'numeric'   => 'Поле :attribute должно быть больше или равно :value.',\n        'string'    => 'Количество символов в поле :attribute должно быть больше или равно :value.',\n    ],\n    'image'                 => 'Поле :attribute должно быть изображением.',\n    'in'                    => 'Выбранное значение для :attribute ошибочно.',\n    'in_array'              => 'Поле :attribute не существует в :other.',\n    'integer'               => 'Поле :attribute должно быть целым числом.',\n    'ip'                    => 'Поле :attribute должно быть действительным IP-адресом.',\n    'ipv4'                  => 'Поле :attribute должно быть действительным IPv4-адресом.',\n    'ipv6'                  => 'Поле :attribute должно быть действительным IPv6-адресом.',\n    'json'                  => 'Поле :attribute должно быть JSON строкой.',\n    'lt'                    => [\n        'array'     => 'Количество элементов в поле :attribute должно быть меньше :value.',\n        'file'      => 'Размер файла в поле :attribute должен быть меньше :value Килобайт(а).',\n        'numeric'   => 'Поле :attribute должно быть меньше :value.',\n        'string'    => 'Количество символов в поле :attribute должно быть меньше :value.',\n    ],\n    'lte'                   => [\n        'array'     => 'Количество элементов в поле :attribute должно быть меньше или равно :value.',\n        'file'      => 'Размер файла в поле :attribute должен быть меньше или равен :value Килобайт(а).',\n        'numeric'   => 'Поле :attribute должно быть меньше или равно :value.',\n        'string'    => 'Количество символов в поле :attribute должно быть меньше или равно :value.',\n    ],\n    'max'                   => [\n        'array'     => 'Количество элементов в поле :attribute не может превышать :max.',\n        'file'      => 'Размер файла в поле :attribute не может быть более :max Килобайт(а).',\n        'numeric'   => 'Поле :attribute не может быть более :max.',\n        'string'    => 'Количество символов в поле :attribute не может превышать :max.',\n    ],\n    'mimes'                 => 'Поле :attribute должно быть файлом одного из следующих типов: :values.',\n    'mimetypes'             => 'Поле :attribute должно быть файлом одного из следующих типов: :values.',\n    'min'                   => [\n        'array'     => 'Количество элементов в поле :attribute должно быть не менее :min.',\n        'file'      => 'Размер файла в поле :attribute должен быть не менее :min Килобайт(а).',\n        'numeric'   => 'Поле :attribute должно быть не менее :min.',\n        'string'    => 'Количество символов в поле :attribute должно быть не менее :min.',\n    ],\n    'not_in'                => 'Выбранное значение для :attribute ошибочно.',\n    'not_regex'             => 'Выбранный формат для :attribute ошибочный.',\n    'numeric'               => 'Поле :attribute должно быть числом.',\n    'present'               => 'Поле :attribute должно присутствовать.',\n    'regex'                 => 'Поле :attribute имеет ошибочный формат.',\n    'required'              => 'Поле :attribute обязательно для заполнения.',\n    'required_if'           => 'Поле :attribute обязательно для заполнения, когда :other равно :value.',\n    'required_unless'       => 'Поле :attribute обязательно для заполнения, когда :other не равно :values.',\n    'required_with'         => 'Поле :attribute обязательно для заполнения, когда :values указано.',\n    'required_with_all'     => 'Поле :attribute обязательно для заполнения, когда :values указано.',\n    'required_without'      => 'Поле :attribute обязательно для заполнения, когда :values не указано.',\n    'required_without_all'  => 'Поле :attribute обязательно для заполнения, когда ни одно из :values не указано.',\n    'same'                  => 'Значения полей :attribute и :other должны совпадать.',\n    'size'                  => [\n        'array'     => 'Количество элементов в поле :attribute должно быть равным :size.',\n        'file'      => 'Размер файла в поле :attribute должен быть равен :size Килобайт(а).',\n        'numeric'   => 'Поле :attribute должно быть равным :size.',\n        'string'    => 'Количество символов в поле :attribute должно быть равным :size.',\n    ],\n    'starts_with'           => 'Поле :attribute должно начинаться из одного из следующих значений: :values',\n    'string'                => 'Поле :attribute должно быть строкой.',\n    'timezone'              => 'Поле :attribute должно быть действительным часовым поясом.',\n    'unique'                => 'Такое значение поля :attribute уже существует.',\n    'uploaded'              => 'Загрузка поля :attribute не удалась.',\n    'url'                   => 'Поле :attribute имеет ошибочный формат.',\n    'uuid'                  => 'Поле :attribute должно быть корректным UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Собственные языковые ресурсы для проверки значений\n    |--------------------------------------------------------------------------\n    |\n    | Здесь Вы можете указать собственные сообщения для атрибутов.\n    | Это позволяет легко указать свое сообщение для заданного правила атрибута.\n    |\n    | http://laravel.com/docs/validation#custom-error-messages\n    | Пример использования\n    |\n    |   'custom' => [\n    |       'email' => [\n    |           'required' => 'Нам необходимо знать Ваш электронный адрес!',\n    |       ],\n    |   ],\n    |\n    */\n\n    'custom'    => [\n        'attribute-name'    => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Собственные названия атрибутов\n    |--------------------------------------------------------------------------\n    |\n    | Последующие строки используются для подмены программных имен элементов\n    | пользовательского интерфейса на удобочитаемые. Например, вместо имени\n    | поля \"email\" в сообщениях будет выводиться \"электронный адрес\".\n    |\n    | Пример использования\n    |\n    |   'attributes' => [\n    |       'email' => 'электронный адрес',\n    |   ],\n    |\n    */\n\n    'attributes'    => [\n        'address'               => 'Адрес',\n        'age'                   => 'Возраст',\n        'available'             => 'Доступно',\n        'city'                  => 'Город',\n        'content'               => 'Контент',\n        'country'               => 'Страна',\n        'date'                  => 'Дата',\n        'day'                   => 'День',\n        'description'           => 'Описание',\n        'email'                 => 'E-Mail адрес',\n        'excerpt'               => 'Выдержка',\n        'first_name'            => 'Имя',\n        'gender'                => 'Пол',\n        'hour'                  => 'Час',\n        'last_name'             => 'Фамилия',\n        'minute'                => 'Минута',\n        'mobile'                => 'Моб. номер',\n        'month'                 => 'Месяц',\n        'name'                  => 'Имя',\n        'password'              => 'Пароль',\n        'password_confirmation' => 'Подтверждение пароля',\n        'phone'                 => 'Телефон',\n        'second'                => 'Секунда',\n        'sex'                   => 'Пол',\n        'size'                  => 'Размер',\n        'time'                  => 'Время',\n        'title'                 => 'Наименование',\n        'username'              => 'Никнейм',\n        'year'                  => 'Год',\n    ],\n];\n"
  },
  {
    "path": "lang/ru/visibilities.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'admin'         => 'Только участники с ролью Админ могут просматривать этот элемент.',\n        'admin-self'    => 'Только вы и участники с ролью Админ могут просматривать этот элемент.',\n        'all'           => 'Все могут просматривать этот элемент.',\n        'members'       => 'Только участники кампании могут просматривать этот элемент.',\n        'self'          => 'Только вы можете просматривать этот элемент.',\n    ],\n    'title'     => 'Обновление доступа',\n    'toast'     => 'Доступ успешно обновлен.',\n    'tooltip'   => 'Нажмите сюда, чтобы узнать о различных видах доступа и о том, что они означают, в нашей документации.',\n];\n"
  },
  {
    "path": "lang/ru/whiteboards/draw.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add-circle'    => 'Добавить круг',\n        'add-entity'    => 'Добавить объект',\n        'add-image'     => 'Добавить изображение',\n        'add-square'    => 'Добавить квадрат',\n        'add-text'      => 'Добавить текст',\n        'duplicate'     => 'Создать дубликат',\n        'end-drawing'   => 'Закончить рисовать',\n        'lock'          => 'Фиксировать',\n        'push-to-back'  => 'На задний план',\n        'push-to-front' => 'На передний план',\n        'start-drawing' => 'Начать рисовать',\n        'unlock'        => 'Разфиксировать',\n    ],\n    'entity-search' => [\n        'placeholder'   => 'Введите название или псевдоним объекта',\n        'title'         => 'Поиск объекта',\n    ],\n    'fields'        => [\n        'color' => 'Цвет',\n    ],\n    'pen'           => [\n        'large-stroke'  => 'Широкий штрих',\n        'thin-stroke'   => 'Тонкий штрих',\n    ],\n    'reset'         => [\n        'helper'    => 'Вы уверены, что хотите очистить эту доску? Это действие необратимо.',\n        'title'     => 'Очистить доску',\n    ],\n    'toast'         => [\n        'copy'  => [\n            'success'   => 'Элементы скопированы в буфер обмена.',\n        ],\n        'paste' => [\n            'error' => 'Что-то пошло не так.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/ru/whiteboards.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'draw'  => 'Рисовать',\n    ],\n    'cta'           => [\n        'text'  => 'Чтобы получить доступ к доскам, необходимо, чтобы участник роли :wyvern или :elemental сделал эту кампанию премиум кампанией.',\n    ],\n    'lists'         => [\n        'empty' => 'Используйте доски, чтобы наглядно организовывать идеи, отношения персонажей или структуру вашей истории.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Идея, отношения персонажей, структура истории',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/abilities.php",
    "content": "<?php\n\nreturn [\n    'abilities'     => [],\n    'children'      => [\n        'actions'       => [\n            'attach'    => 'Pripojiť k objektom',\n        ],\n        'create'        => [\n            'attach_success'    => '{1} Schopnosť :name bola pripojená k :count objektu.|[2,*] Schopnosť :name bola priradená ku :count objektom.',\n            'helper'            => 'Pripojiť :name k jednému alebo viacerým objektom.',\n            'title'             => 'Pripojiť objekty',\n        ],\n        'description'   => 'Objekty s touto schopnosťou',\n        'title'         => 'Objekty schopnosti :name',\n    ],\n    'create'        => [\n        'title' => 'Nová schopnosť',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'entities'      => [],\n    'fields'        => [\n        'charges'   => 'Náboje',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Pridaj sily, kúzla či talenty. Používa sa na najmä na modelovanie D&D archetypov.',\n    ],\n    'placeholders'  => [\n        'charges'   => 'Počet nábojov. Prepoj atribúty cez {Úroveň}*{CHA}',\n        'name'      => 'Ohnivá guľa, Stále v strehu, Zákerný výpad',\n        'type'      => 'Kúzlo, schopnosť, útočný manéver',\n    ],\n    'reorder'       => [\n        'parentless'    => 'Bez nadradenej',\n        'success'       => 'Schopnosti úspešne usporiadané.',\n        'title'         => 'Usporiadanie schopností',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder'   => 'Usporiadať schopnosti',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/sk/articles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'move'  => 'Presunúť k objektu',\n    ],\n    'helpers'   => [\n        'permissions'   => 'Tieto oprávnenia môžu prepísať :visibility nastavenia v článku.',\n    ],\n    'tabs'      => [\n        'layout'        => 'Layout',\n        'main'          => 'Hlavný',\n        'permissions'   => 'Špeciálne oprávnenia',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/attribute_templates.php",
    "content": "<?php\n\nreturn [\n    'attribute_templates'   => [],\n    'bulk'                  => [\n        'entity_type'   => [\n            'unset' => 'Nenastavené',\n        ],\n    ],\n    'create'                => [\n        'title' => 'Nová šablóna atribútov',\n    ],\n    'destroy'               => [],\n    'edit'                  => [],\n    'fields'                => [\n        'auto_apply'    => 'Autom. prevziať',\n        'is_enabled'    => 'Aktívne',\n    ],\n    'hints'                 => [\n        'automatic'                 => 'Atribúty boli automaticky aplikované zo šablóny atribútov :link.',\n        'automatic_apply'           => '{1} Nasledujúci :count atribút bol automaticky prevzatý z :link | [2,4] Nasledujúce :count atribúty boli automaticky prevzaté z :link. | [5,*] Nasledujúcich :count atribútov bolo automaticky prevzatých z :link.',\n        'entity_type'               => 'Po aktivovaní bude v novom objekte tohto typu automaticky aplikovaná táto šablóna atribútov.',\n        'is_disabled'               => 'Táto šablóna je neaktívna.',\n        'is_enabled'                => 'Aktivuj túto šablónu na použitie v kampani.',\n        'parent_attribute_template' => 'Táto šablóna atribútov môže byť podradená inej šablóne atribútov. Ak bude aplikovaná táto šablóna atribútov, aplikujú sa zároveň s ňou aj všetky jej nadradené šablóny atribútov.',\n    ],\n    'index'                 => [],\n    'lists'                 => [\n        'empty' => 'Vytvor šablónu na používanie bežných vlastností vo viacerých objektoch.',\n    ],\n    'placeholders'          => [\n        'name'  => 'Názov šablóny atribútov',\n    ],\n    'show'                  => [],\n];\n"
  },
  {
    "path": "lang/sk/attributes/templates.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'marketplace'   => [\n            'hint'      => 'Chyba',\n            'rendering' => 'Pri vytváraní pluginu pre trhovisko sa vyskytla chyba. Prosím, kontaktuj tvorcu pluginu.',\n        ],\n    ],\n    'helpers'   => [],\n    'list'      => [\n        'sheets'    => 'Denníky postáv',\n    ],\n    'pitch'     => 'Nájdi a pridaj denníky postáv z :marketplace k :boosted-campaign.',\n];\n"
  },
  {
    "path": "lang/sk/auth.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'banned'    => [\n        'permanent' => 'Máš permanentný zákaz.',\n        'temporary' => '{1} Máš zákaz na :days deň.|[2,4] Máš zákaz na :days dni.|[5,*] Máš zákaz na :days dní.',\n    ],\n    'confirm'   => [\n        'confirm'   => 'Potvrdiť',\n        'error'     => 'Nesprávne heslo, prosím skús ešte raz.',\n        'helper'    => 'Prosím potvrď tvoje heslo, aby bolo možné pokračovať.',\n        'title'     => 'Potvrdenie hesla',\n    ],\n    'continue'  => [\n        'facebook'  => 'Pokračovať cez Facebook',\n        'google'    => 'Pokračovať cez Google',\n        'x'         => 'Pokračovať cez X',\n    ],\n    'failed'    => 'Prihlasovacie údaje nie sú správne.',\n    'helpers'   => [\n        'password'  => 'Zobraziť / Skryť heslo',\n    ],\n    'login'     => [\n        'fields'                => [\n            '2fa'       => 'Jednorazové heslo',\n            'email'     => 'E-mail',\n            'password'  => 'Heslo',\n        ],\n        'no-account'            => 'Nemáš ešte konto?',\n        'or'                    => 'ALEBO',\n        'password_forgotten'    => 'Zabudnuté heslo?',\n        'sign-up'               => 'Registruj sa',\n        'submit'                => 'Prihlásiť',\n        'title'                 => 'Prihlásenie',\n    ],\n    'register'  => [\n        'already'   => 'Máš už konto? :login',\n        'errors'    => [\n            'email_already_taken'   => 'Konto s touto e-mailovou adresou už existuje.',\n            'general_error'         => 'Nastala chyba pri registrácii tvojho konta. Prosím, skús to znovu.',\n        ],\n        'fields'    => [\n            'email'     => 'E-mail',\n            'name'      => 'Meno užívateľa',\n            'password'  => 'Heslo',\n        ],\n        'log-in'    => 'Prihlásenie',\n        'submit'    => 'Registrovať',\n        'title'     => 'Registrácia',\n        'tos'       => 'Registráciou konta súhlasíš s našimi :terms a :privacy.',\n    ],\n    'reset'     => [\n        'fields'    => [\n            'email'                 => 'E-mailová adresa',\n            'password'              => 'Heslo',\n            'password_confirmation' => 'Potvrď svoje heslo',\n        ],\n        'send'      => 'Zaslať link na obnovenie hesla',\n        'submit'    => 'Obnoviť heslo',\n        'title'     => 'Obnovenie hesla',\n    ],\n    'tfa'       => [\n        'helper'    => 'Dvojstupňové overenie identity je aktívne. Zadaj prosím jednorazové heslo z tvojej autentifikačnej aplikácie.',\n        'title'     => 'Dvojstupňové overenie identity',\n    ],\n    'throttle'  => 'Prekročený limit pokusov. Skús to znovu o :seconds sekúnd.',\n    'x-twitter' => 'X pôvodne známy ako Twitter',\n];\n"
  },
  {
    "path": "lang/sk/banners.php",
    "content": "<?php\n\nreturn [\n    'kanka4years'   => 'Použi promo kód :code a získaj 20% zľavu z predplatného na prvý rok!',\n];\n"
  },
  {
    "path": "lang/sk/billing/invoices.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'download'  => 'Stiahnuť PDF',\n    ],\n    'description'   => 'Zobrazujú sa faktúry za posledných 24 mesiacov.',\n    'empty'         => 'Žiadne faktúry neboli nájdené',\n    'fields'        => [\n        'amount'    => 'Množstvo',\n        'date'      => 'Dátum',\n        'invoice'   => 'Faktúra',\n        'status'    => 'Stav',\n    ],\n    'paypal'        => 'Prosím, ber na vedomie, že sa tu zobrazujú iba platby uskutočnené cez Stripe, a nie cez PayPal.',\n    'status'        => [\n        'paid'      => 'Zaplatená',\n        'pending'   => 'Očakáva sa platba',\n    ],\n    'title'         => 'História fakturácie',\n];\n"
  },
  {
    "path": "lang/sk/billing/menu.php",
    "content": "<?php\n\nreturn [\n    'history'           => 'História fakturácie',\n    'overview'          => 'Prehľad',\n    'payment-method'    => 'Platobná metóda',\n];\n"
  },
  {
    "path": "lang/sk/billing/payment_methods.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Platobná metóda',\n    'types' => [\n        'card'  => 'Karta',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/bookmarks.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'customise' => 'Upraviť bočný panel',\n    ],\n    'create'            => [\n        'title' => 'Nový menu link',\n    ],\n    'destroy'           => [],\n    'edit'              => [\n        'title' => 'Menu link :name',\n    ],\n    'fields'            => [\n        'active'            => 'Aktívny',\n        'dashboard'         => 'Nástenka',\n        'default_dashboard' => 'Štandardná nástenka',\n        'filters'           => 'Filtre',\n        'menu'              => 'Menu',\n        'position'          => 'Pozícia',\n        'random_type'       => 'Náhodný typ objektu',\n        'selector'          => 'Konfigurácia Menu linkov',\n        'target'            => 'Cieľ',\n    ],\n    'helpers'           => [\n        'active'            => 'Neaktívne rýchle linky sa v bočnom menu nezobrazia.',\n        'css'               => 'Pridaj CSS štýl, ktorý sa aplikuje na link záložiek v bočnom menu.',\n        'dashboard'         => 'Cieľ s rýchlym linkom na jednu z vlastných násteniek kampane.',\n        'default_dashboard' => 'Prelinkuj namiesto toho k štandardnej nástenke kampane. Ešte stále musíš ale zvoliť aj vlastnú nástenku.',\n        'entity'            => 'Nastav tento menu link, aby smeroval priamo na daný objekt. Pole :tab kontroluje, ktorá z kariet objektu bude zobrazená automaticky. Pole :menu kontroluje, ktorá podstránka objektu bude zobrazená.',\n        'position'          => 'Použi toto pole na kontrolu v akom poradí sa linky zoradia v menu.',\n        'random'            => 'Použi toto pole pre rýchly link cielený na náhodný objekt. Môžeš nastaviť filter, aby smeroval na špecifické typy objektov.',\n        'selector'          => 'Nastav, kam tento rýchly link bude smerovať, ak na neho užívateľ klikne v bočnej lište.',\n        'type'              => 'Nastav tento menu link, aby sa po kliknutí naň zobrazil zoznam objektov. Skopíruj časť URL na filtrovanom zozname objektov, ktorá sa nachádza po :? a vlož ju do poľa :filter.',\n    ],\n    'index'             => [],\n    'lists'             => [\n        'empty' => 'Ulož záložku k tvojim najpoužívanejším objektom alebo filtrovaných zoznamov pre rýchlejší prístup.',\n    ],\n    'placeholders'      => [\n        'filters'   => 'location_id=15&type=city',\n        'menu'      => 'Podstránka (použi poslednú časť textu URL)',\n        'tab'       => '(zastaralé)',\n    ],\n    'random_no_entity'  => 'Nebol nájdený žiaden náhodný objekt.',\n    'random_types'      => [\n        'any'   => 'Hociktorý objekt',\n    ],\n    'reorder'           => [\n        'success'   => 'Menu linky usporiadané.',\n        'title'     => 'Usporiadanie liniek v menu',\n    ],\n    'show'              => [],\n    'targets'           => [\n        'dashboard' => 'Nástenka',\n        'entity'    => 'Jeden objekt',\n        'random'    => 'Náhodný objekt',\n        'select'    => 'Vyber jednu z možností',\n        'type'      => 'Objekty kategórie',\n    ],\n    'visibilities'      => [\n        'is_active' => 'Zobraziť rýchly link v bočnom paneli',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/bragi.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'generate'  => 'Generovať',\n        'insert'    => 'Použiť',\n    ],\n    'errors'        => [\n        'invalid-sub'   => 'Na prístup k tejto funkcionalite potrebuješ predplatné na úrovni Wyvern alebo Elemental.',\n        'out-of-tokens' => 'Už nemáš žiadny žetón! Ďalšie obdržíš dňa :date.',\n    ],\n    'here'          => 'tu',\n    'intro'         => 'Ahoj! Som :name, UI, ktorá ti pomôže generovať príbehy pre tvoje postavy v Kanke. Viac o mne sa môžeš dozvedieť :here.',\n    'kankappy'      => 'Si tajný učeň Kankappy.',\n    'loading'       => 'Drž si klobúk, tvrdo premýšľam, môže to trvať hoc aj minútu!',\n    'placeholders'  => [\n        'prompt'    => 'Zadaj kľúčové slová, ktoré mám premeniť na osobný príbeh.',\n    ],\n    'token-limit'   => 'Aktuálne máš :amount žetónov. Každé vygenerovanie príbehu spotrebuje jeden žetón, takže ich používaj rozumne!',\n];\n"
  },
  {
    "path": "lang/sk/calendars/weather.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [],\n    'create'        => [\n        'helper'    => 'Pridaj informácie o počasí, ktoré sa zobrazí v kalendári.',\n        'success'   => 'Počasie pridané.',\n        'title'     => 'Nový efekt počasia',\n    ],\n    'destroy'       => [\n        'success'   => 'Počasie odstránené.',\n    ],\n    'edit'          => [\n        'success'   => 'Počasie upravené.',\n        'title'     => 'Upraviť počasie',\n    ],\n    'fields'        => [\n        'effect'        => 'Efekt',\n        'name'          => 'Názov',\n        'precipitation' => 'Zrážky',\n        'temperature'   => 'Teplota',\n        'weather'       => 'Počasie',\n        'wind'          => 'Vietor',\n    ],\n    'options'       => [\n        'weather'   => [\n            'bolt'                  => 'Búrka',\n            'cloud'                 => 'Oblačno',\n            'cloud-rain'            => 'Dážď',\n            'cloud-showers-heavy'   => 'Silný dážď',\n            'cloud-sun'             => 'Polooblačno',\n            'cloud-sun-rain'        => 'Polooblačno s prehánkami',\n            'meteor'                => 'Meteor',\n            'smog'                  => 'Smog',\n            'snowflake'             => 'Sneženie',\n            'sun'                   => 'Jasno',\n            'wind'                  => 'Veterno',\n        ],\n    ],\n    'placeholders'  => [\n        'effect'        => 'Magický alebo prírodný efekt',\n        'name'          => 'Nepovinný vlastný názov počasia',\n        'precipitation' => 'Množstvo zrážok',\n        'temperature'   => 'Denná najvyššia a najnižšia teplota',\n        'wind'          => 'Rýchlosť vetra',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/calendars.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_epoch'         => 'Pridať epochu',\n        'add_intercalary'   => 'Pridať priestupný deň',\n        'add_month'         => 'Pridať kalendárny mesiac',\n        'add_moon'          => 'Pridať družicu',\n        'add_reminder'      => 'Pridať pripomienku',\n        'add_season'        => 'Pridať ročné obdobie',\n        'add_weather'       => 'Nastaviť efekt počasia',\n        'add_week'          => 'Pridať týždeň',\n        'add_weekday'       => 'Pridať deň týždňa',\n        'add_year'          => 'Pridať názov roka',\n        'set_today'         => 'Nastaviť aktuálny deň',\n        'today'             => 'Dnes',\n        'update_weather'    => 'Aktualizovať počasie',\n    ],\n    'checkboxes'    => [\n        'is_recurring'  => 'Opakuje sa ročne',\n    ],\n    'colours'       => [],\n    'create'        => [\n        'title' => 'Nový kalendár',\n    ],\n    'destroy'       => [],\n    'edit'          => [\n        'today' => 'Aktuálny dátum upravený.',\n    ],\n    'event'         => [\n        'create'    => [\n            'success'   => 'Pripomienka vytvorená',\n            'title'     => 'Nová pripomienka',\n        ],\n        'destroy'   => 'Pripomienka z kalendára \":name\" odstránená.',\n        'edit'      => [\n            'success'   => 'Pripomienka upravená.',\n            'title'     => 'Upraviť pripomienku v :name',\n        ],\n        'errors'    => [\n            'invalid_entity'    => 'Neplatná voľba objektu',\n        ],\n        'helpers'   => [\n            'other_calendar'    => 'Upravuješ pripomienku, ktorá je v kalendári :calendar.',\n        ],\n        'success'   => 'Udalosť \":event\" pridaná do kalendára.',\n    ],\n    'events'        => [\n        'bulks'     => [\n            'delete'    => '{1} Zmazaná :count pripomienka.|[2,4] Zmazané :count pripomienky.[5,*] Zmazaných :count pripomienok.',\n            'patch'     => '{1} Aktualizovaná :count pripomienka.|[2,4] Aktualizované :count pripomienky.[5,*] Aktualizovaných :count pripomienok.',\n        ],\n        'end'       => '(koniec)',\n        'filters'   => [\n            'show_after'    => 'Zobraziť od dnes ďalej',\n            'show_all'      => 'Zobraziť všetky',\n            'show_before'   => 'Zobraziť do dnes',\n        ],\n        'start'     => '(začiatok)',\n    ],\n    'fields'        => [\n        'comment'           => 'Komentár',\n        'current_day'       => 'Aktuálny deň',\n        'current_month'     => 'Aktuálny mesiac',\n        'current_year'      => 'Aktuálny rok',\n        'date'              => 'Aktuálny dátum',\n        'day'               => 'Deň',\n        'default_layout'    => 'Štandardné rozmiestnenie',\n        'format'            => 'Formát',\n        'is_incrementing'   => 'Narastajúce dni',\n        'is_recurring'      => 'Opakujúce',\n        'leap_year'         => 'Priestupné roky',\n        'leap_year_amount'  => 'Pridať dni',\n        'leap_year_month'   => 'Mesiac',\n        'leap_year_offset'  => 'Každý',\n        'leap_year_start'   => 'Priestupný rok',\n        'length'            => 'Dĺžka udalosti',\n        'length_days'       => ':count deň|:count dní',\n        'month'             => 'Mesiac',\n        'months'            => 'Mesiace',\n        'moons'             => 'Družice',\n        'parameters'        => 'Parametre',\n        'recurring_until'   => 'Opakujúce sa do roku',\n        'reset'             => 'Týždenný reset',\n        'seasons'           => 'Ročné obdobia',\n        'show_birthdays'    => 'Zobraziť narodeniny',\n        'skip_year_zero'    => 'Preskočiť Rok Nula',\n        'start_offset'      => 'Posun prvého dňa',\n        'suffix'            => 'Prípona',\n        'week_names'        => 'Názvy týždňov',\n        'weekdays'          => 'Dni v týždni',\n        'year'              => 'Rok',\n    ],\n    'helpers'       => [\n        'default_layout'    => 'Zvoľ, ktoré rozmiestnenie kalendára sa má štandardne zobrazovať.',\n        'format'            => 'Pridaj vlastný formát dátumu pre objekty v kalendári.',\n        'month_type'        => 'Priestupné mesiace nepoužívajú dni v týždni, ale ovplyvňujú družice a ročné obdobia.',\n        'moon_offset'       => 'Štandardne začína spln prvý deň v roku 0. Nastavenie posunu ovplyvňuje, kedy sa tento spln udeje. Hodnota môže byť negatívna (do max. dĺžky prvého mesiaca) alebo pozitívna (do max. dĺžky prvého mesiaca).',\n        'start_offset'      => 'Štandardne začína kalendár prvý deň v týždni v roku 0. Nastavenie tejto hodnoty ovplyvňuje, na ktorý deň v kalendári pripadne prvý deň.',\n    ],\n    'hints'         => [\n        'event_length'      => 'Ako dlho má trvať daná udalosť. Udalosť nemôže trvať dlhšie ako dva mesiace.',\n        'is_incrementing'   => 'Narastajúci kalendár automaticky posunie aktuálny deň o 00:00 UTC.',\n        'leap_year'         => 'Nastav priestupné roky pre kalendár.',\n        'months'            => 'Kalendár by mal mať min. 2 mesiace.',\n        'moons'             => 'Pridané družice sa zobrazia v kalendári počas ich splnu.',\n        'parent_calendar'   => 'Ak kalendáru priradíš nadradený kalendár, priradíš mu aj pripomienky a efekty počasia z tohto nadradeného kalendáru.',\n        'reset'             => 'Začiatok mesiaca alebo roku začína stále na prvom dni týždňa.',\n        'seasons'           => 'Vytvor v tvojom kalendári ročné obdobia tým, že označíš, kedy sa začínajú. O ostatné sa už postará Kanka.',\n        'show_birthdays'    => 'Zobrazí ročne narodeniny postáv, ktoré majú pripomenutie o narodeninách až po ich dátum smrti.',\n        'skip_year_zero'    => 'Štandardne je prvý rok kalendára nultým rokom. Aktivovaním tohto nastavenia tento preskočíš.',\n        'weekdays'          => 'Nastav názvy tvojich dní v týždni. Podmienkou je pridanie min. 2 dní v týždni.',\n        'weeks'             => 'Definuj názvy pre najdôležitejšie týždne v tvojom kalendári.',\n        'years'             => 'Niektoré roky sú tak dôležité, že dostali vlastné pomenovanie.',\n    ],\n    'index'         => [],\n    'layouts'       => [\n        'month'     => 'Mesiac',\n        'monthly'   => 'Štandardne mesačné',\n        'year'      => 'Rok',\n        'yearly'    => 'Štandardne ročné',\n    ],\n    'lists'         => [\n        'empty' => 'Vytvor kalendár pre zaznamenávanie dátumov, festivalov a iných udalostí v čase.',\n    ],\n    'modals'        => [\n        'switcher'  => [\n            'title' => 'Prepínač roku',\n        ],\n    ],\n    'month_types'   => [\n        'intercalary'   => 'Priestupný',\n        'standard'      => 'Štandardný',\n    ],\n    'options'       => [\n        'events'    => [\n            'recurring_periodicity' => [\n                'fullmoon'      => 'Spln',\n                'fullmoon_name' => 'Spln :moon',\n                'month'         => 'Mesačne',\n                'newmoon'       => 'Nov',\n                'newmoon_name'  => 'Nov :moon',\n                'none'          => 'Žiadna',\n                'unnamed_moon'  => 'Mesiac :number',\n                'year'          => 'Ročne',\n            ],\n        ],\n        'resets'    => [\n            ''      => 'Žiadne',\n            'month' => 'Mesačne',\n            'year'  => 'Ročne',\n        ],\n    ],\n    'panels'        => [\n        'intercalary'   => 'Priestupné dni',\n        'leap_year'     => 'Priestupný rok',\n        'months'        => 'Mesiace',\n        'weeks'         => 'Týždne',\n        'years'         => 'Pomenované roky',\n    ],\n    'parameters'    => [\n        'intercalary'   => [\n            'length'    => 'Trvanie v dňoch',\n            'month'     => 'Na konci ktorého mesiaca',\n            'name'      => 'Názov priestupného mesiaca',\n        ],\n        'month'         => [\n            'alias' => 'Skratka mesiaca',\n            'length'=> 'Počet dní',\n            'name'  => 'Názov mesiaca',\n            'type'  => 'Typ',\n        ],\n        'moon'          => [\n            'fullmoon'  => 'Spln každých (dní)',\n            'name'      => 'Názov družice',\n            'offset'    => 'Deň prvého splnu',\n        ],\n        'seasons'       => [\n            'day'   => 'Prvý deň',\n            'month' => 'Prvý mesiac',\n            'name'  => 'Názov ročného obdobia',\n        ],\n        'weeks'         => [\n            'name'      => 'Názov týždňa',\n            'number'    => 'Číslo',\n        ],\n        'year'          => [\n            'name'      => 'Názov roku',\n            'number'    => 'Rok',\n        ],\n    ],\n    'placeholders'  => [\n        'colour'            => 'Farba',\n        'comment'           => 'Deň narodenia, festival, slnovrat',\n        'date'              => 'Aktuálny dátum',\n        'leap_year_amount'  => 'Počet dní pridaných v priestupnom roku',\n        'leap_year_month'   => 'Mesiac, do ktorého budú pridané',\n        'leap_year_offset'  => 'Každých koľko rokov sa opakuje priestupný rok',\n        'leap_year_start'   => 'Prvý rok, ktorý je priestupný',\n        'length'            => 'Dĺžka udalosti v dňoch',\n        'months'            => 'Počet mesiacov v roku',\n        'recurring_until'   => 'Posledný rok opakovania (ponechať prázdne pre opakovanie donekonečna)',\n        'seasons'           => 'Počet ročných období',\n        'suffix'            => 'Prípona aktuálnej éry (pnl., nl.)',\n        'type'              => 'Typ kalendára',\n        'weekdays'          => 'Počet dní v týždni',\n    ],\n    'show'          => [\n        'missing_details'       => 'Tento kalendár nie je možné zobraziť. Kalendár vyžaduje min. 2 mesiace a min. 2 dni v týždni, aby bol vytvorený.',\n        'moon_1first_quarter'   => ':moon prvá štvrtina',\n        'moon_full'             => ':moon spln',\n        'moon_last_quarter'     => ':moon posledná štvrtina',\n        'moon_new'              => ':moon nov',\n        'tabs'                  => [\n            'events'    => 'Kalendárne udalosti',\n            'weather'   => 'Počasie',\n        ],\n    ],\n    'sorters'       => [\n        'after' => 'Dnes a potom',\n        'before'=> 'Dnes a predtým',\n    ],\n    'validators'    => [\n        'format'        => 'Formát dátumu je neplatný.',\n        'moon_offset'   => 'Posun pre prvý spln nemôže byť väčší ako dĺžka prvého mesiaca kalendára.',\n    ],\n    'warnings'      => [\n        'event_length'  => 'Pripomienky, ktoré prechádzajú cez niekoľko rokov sú viditeľné iba v prvých dvoch rokoch. Viac sa dozvieš v našej :documentation.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/callouts.php",
    "content": "<?php\n\nreturn [\n    'booster'   => [\n        'actions'       => [\n            'boost'         => 'Boostni :campaign',\n            'superboost'    => 'Superboostni :campaign',\n        ],\n        'learn-more'    => 'Čo sú boosty?',\n        'limitation'    => 'Pre prístup k tejto funkcionalite je nutné boostnuť kampaň.',\n        'limitations'   => [\n            'boosted'       => 'Pre prístup k tejto funkcionalite je nutné boostnuť kampaň.',\n            'superboosted'  => 'Pre prístup k tejto funkcionalite je nutné superboostnuť kampaň.',\n        ],\n        'multiple'      => 'Pre prístup k týmto funkcionalitám je nutné boostnuť kampaň.',\n        'pitches'       => [\n            'element-class' => 'Pridaj tomuto prvku vlastnú CSS triedu, ak máš :boosted-campaign.',\n            'icon'          => 'Odomkni milióny ikoniek z FontAwesome, ak máš :boosted-campaign.',\n        ],\n        'titles'        => [\n            'boosted'       => 'Boostnutá funkcia',\n            'superboosted'  => 'Superboostnutá funkcia',\n        ],\n    ],\n    'premium'   => [\n        'learn-more'    => 'Čo sú prémiové kampane?',\n        'limitation'    => 'Na prístup k tejto funkcionalite musia byť aktivované prémiové funkcionality.',\n        'title'         => 'Funkcionalita prémiovej kampane',\n        'unlock'        => 'Odomkni prémiové funkcionality pre :campaign',\n    ],\n    'subscribe' => [\n        'pitch-image'   => 'Kúp si predplatné, aby sa odomkla :max MB veľkosť nahrávaných súborov.',\n        'share-booster' => 'Boostni :campaign, aby sa zvýšila veľkosť nahrávaných súborov pre všetkých členov kampane.',\n        'share-premium' => 'Zvýš hranicu veľkosti nahrávaných súborov pre všetkých členov kampane pomocou prémia.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/achievements.php",
    "content": "<?php\n\nreturn [\n    'congratulations'   => 'Gratulujeme!',\n    'connections'       => '{0} Žiaden vzťah nevytvorený|{1} Jeden vzťah vytvorený|[2,4] :amount vzťahy vytvorené|[5,*] :amount vzťahov vytvorených',\n    'created'           => '{0} Žiaden :plural nevytvorený|{1} Jeden :single vytvorený|[2,4] :amount :plural vytvorené|[5,*] :amount :plural vytvorených',\n    'dead'              => '{0} Žiadne tajomstvo smrti|{1} Jedna tajomná smrť|[2,4] :amount tajomné usmrtenia|[5,*] :amount tajomných usmrtení',\n    'goal'              => 'Cieľ :number',\n    'goal_reached'      => 'Kampani sa podarilo dosiahnuť nasledujúce úspechy:',\n    'level'             => 'úroveň :number',\n    'markers'           => '{0} Žiadna značka na mape|{1} Jedna značka na mape|[2,4] :amount značky na mape|[5,*] :amount značiek na mape',\n    'painter'           => '{0} Žiadna téma nevytvorená|{1} Jedna téma vytvorená|[2,4] :amount témy vytvorené|[5,*] :amount tém vytvorených',\n    'pitch'             => 'Úspechy v kampani sú zábavný spôsob, ako osláviť určité míľniky v tvojej ceste tvorbou svetov. Sleduj svoj postup, zapoj svoje hráčstvo a zobraz tieto výsledky s prémiovou kampaňou.',\n    'plugins'           => '{0} Žiaden plugin nenainštalovaný|{1} Jeden plugin nainštalovaný|[2,4] :amount pluginy nainštalované|[5,*] :amount pluginov nainštalovaných',\n    'remaining'         => [\n        'generic'   => 'viac a dosiahneš ďalšiu úroveň.',\n    ],\n    'spotlight'         => [\n        'active'    => [\n            'cta'   => 'Zobraziť zvýraznené',\n        ],\n        'private'   => [\n            'cta'       => 'Skontroluj verejné nastavenia',\n            'helper'    => 'Urob svoju kampaň verejnou, aby mohla byť zvýraznená na webe.',\n        ],\n        'public'    => [\n            'cta'       => 'Zisti, ako funguje zvýraznenie',\n            'helper'    => 'Vybrané kampane sú uvedené v rámci Kanka Zvýraznenia a na blogu.',\n        ],\n    ],\n    'spotlighted'       => '{0} Ešte nezvýraznená|[1,*] Zvýraznená',\n    'tagged'            => '{0} Žiaden objekt nevytvorený|{1} Jeden objekt vytvorený|[2,4] :amount objekty vytvorené|[5,*] :amount objektov vytvorených',\n    'titles'            => [\n        'calendars'     => 'Strážca/kyňa času',\n        'characters'    => 'Rozdávač/ka mien',\n        'connections'   => 'Amor',\n        'creatures'     => 'Rodič/ka',\n        'dead'          => 'Vrah/yňa',\n        'events'        => 'Majster/ka legiend',\n        'families'      => 'Rodinný plánovač/ka',\n        'locations'     => 'Staviteľ/ka',\n        'markers'       => 'Kartograf/ka',\n        'organisations' => 'Fúzie a akvizície',\n        'plugins'       => 'Fajnšmeker/ka pluginov',\n        'quests'        => 'Mastermind',\n        'spotlighted'   => 'Zvýraznená',\n        'tags'          => 'Pod kontrolou',\n        'themes'        => 'Maliar/ka',\n    ],\n    'tutorial'          => 'Úspechy sledujú zaujímavé aktivity v kampani, napr. vytváranie zápisov alebo používanie kritických funkcionalít. Majú len informačnú funkciu a aktualizujú sa automaticky, ako tieto nachádzaš a využívaš.',\n];\n"
  },
  {
    "path": "lang/sk/campaigns/applications.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'accept'    => 'Schváliť',\n        'reject'    => 'Odmietnuť',\n    ],\n    'apply'         => [\n        'apply'         => 'Použiť',\n        'help'          => 'Táto kampaň je otvorená pre nových členov. Prihlás sa do nej vyplnením tohto formulára. Obdržíš notifikáciu, keď sa administrátor kampane bude zaoberať tvojou prihláškou.',\n        'remove_text'   => 'Tvoje podanie',\n        'success'       => [\n            'apply' => 'Tvoja prihláška bola uložená. Môžeš ju kedykoľvek zmeniť alebo odstrániť. Obdržíš notifikáciu, keď sa administrátor kampane bude zaoberať tvojou prihláškou.',\n            'remove'=> 'Tvoja prihláška bola odstránená.',\n            'update'=> 'Tvoja prihláška bola aktualizovaná. Môžeš ju kedykoľvek zmeniť alebo odstrániť. Obdržíš notifikáciu, keď sa administrátor kampane bude zaoberať tvojou prihláškou.',\n        ],\n        'title'         => 'Prihlásiť sa do :name',\n    ],\n    'errors'        => [],\n    'fields'        => [\n        'application'   => 'Prihláška',\n        'reason'        => 'Dôvod schválenia / odmietnutia',\n    ],\n    'helpers'       => [\n        'modal'                 => 'Do kampane, ktorá je verejná a prijíma prihlášky, si môžu podať prihlášku noví užívatelia.',\n        'no_applications_title' => 'Žiadne prihlášky neboli nájdené',\n        'reason'                => 'Ak vyplnený, uchádzajúca sa osoba obdrží tento dôvod.',\n        'role'                  => 'Pri schvaľovaní rola, ktorú obdrží uchádzajúca sa osoba.',\n    ],\n    'open'          => [\n        'closed'    => 'Kampaň je uzatvorená',\n        'open'      => 'Kampaň je otvorená',\n        'title'     => 'Otvorená kampaň',\n    ],\n    'placeholders'  => [\n        'note'      => 'Spíš tvoju prihlášku na vstup do kampane',\n        'reason'    => 'Tvoj dôvod',\n    ],\n    'public'        => [\n        'private'   => 'Kampaň je súkromná.',\n        'public'    => 'Kampaň je verejná.',\n        'title'     => 'Verejná kampaň.',\n    ],\n    'statuses'      => [],\n    'toggle'        => [\n        'closed'    => 'Neprijímať prihlášky',\n        'label'     => 'Stav',\n        'open'      => 'Prijíma prihlášky',\n        'success'   => 'Stav kampane ohľadom prihlášok aktualizovaný.',\n        'title'     => 'Stav prihlášok',\n    ],\n    'update'        => [\n        'approve'   => 'Vyber rolu užívateľa, ktorú bude mať v tvojej kampani.',\n        'approved'  => 'Prihláška schválená',\n        'reject'    => 'Spíš dobrovoľnú správu pre užívateľa, prečo bola prihláška odmietnutá.',\n        'rejected'  => 'Prihláška odmietnutá',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/builder.php",
    "content": "<?php\n\nreturn [\n    'help'      => 'S pomocou tohto rozhrania vieš vizuálne upraviť tému tvojej kampane. Prejdi nižšie, ak chceš vidieť, ako sa zmeny prejavia v jednotlivých prvkoch v kampani. Ak zvolíš nejakú farbu, automaticky bude vybraná \"kontrastná\" farba pre text. Zisti viac o štýlovaní v našej sekcii :docs.',\n    'pitch'     => 'Psst, vytvorili sme Staviteľa témy, ak by sa ti zažiadalo upraviť niektoré z farieb tvojej kampane 😉',\n    'pitch-go'  => 'Prenes ma do Staviteľa témy',\n    'reset'     => 'Štýlovanie Staviteľa témy resetované.',\n    'success'   => 'Štýlovanie Staviteľa témy uložené.',\n    'title'     => 'Staviteľ témy',\n];\n"
  },
  {
    "path": "lang/sk/campaigns/categories.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'permission-disabled'   => 'Táto kategória nie je aktívna.',\n    ],\n    'helpers'   => [\n        'aliases'   => 'Pridaj aliasy a tajné identity k objektom v tvojom svete.',\n        'media'     => 'Uploaduj mediálne dokumenty (obrázky, pdfká, audio) a externé linky k objektom.',\n    ],\n    'tab'       => 'Kategórie',\n];\n"
  },
  {
    "path": "lang/sk/campaigns/dashboard-header.php",
    "content": "<?php\n\nreturn [\n    'edit'  => [\n        'success'   => 'Záhlavie nástenky kampane bolo aktualizované.',\n        'title'     => 'Aktualizovať záhlavie nástenky kampane',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/default-images.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Pridať nový prednastavený obrázok',\n    ],\n    'call-to-action'    => 'Nahraj vlastný náhľad pre všetky kalendáre, miesta a ďalšie objekty kampane. Tieto obrázky sa potom zobrazujú v rôznych zoznamoch.',\n    'create'            => [\n        'error'     => 'Chyba pri uložení nového prednastaveného obrázka objektu. Bol zvolený :type?',\n        'success'   => 'Prednastavený obrázok objektu pre :type vytvorený.',\n        'title'     => 'Nový prednastavený obrázok objektu',\n    ],\n    'destroy'           => [\n        'success'   => 'Prednastavený obrázok objektu pre :type odstránený.',\n    ],\n    'index'             => [],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/delete.php",
    "content": "<?php\n\nreturn [\n    'backup'            => 'zálohu',\n    'confirm'           => 'Ak máš istotu, že chceš permanentne odstrániť :campaign, prepíš :code do poľa nižšie.',\n    'confirm-button'    => 'Permanentne odstrániť :name',\n    'helper'            => 'Odstránenie kampane je permanentný akt, ktorý nemôže byť vrátený späť. Týmto budú zmazané všetky údaje danej kampane z našich serverov, vrátane obrázkov a materiálov. Odporúčame predtým vytvoriť :backup.',\n    'issue'             => 'Nasledujúce záležitosti musia byť vyriešené predtým, ako bude kampaň odstránená.',\n    'members'           => 'Všetky ostatné členstvá musia byť odstránené z kampane.',\n    'success'           => ':name bola permanentne odstránená.',\n    'title'             => 'Odstránenie',\n];\n"
  },
  {
    "path": "lang/sk/campaigns/export.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'download'  => 'Stiahnuť',\n        'export'    => 'Exportovať údaje kampane',\n    ],\n    'confirm'   => [\n        'title'     => 'Potvrdenie exportu',\n        'warning'   => 'Plánuješ exportovať dáta kampane. Tento proces môže trvať dlhý čas v závislosti od veľkosti kampane. Môžeš naďalej používať Kanku, zatiaľ čo naše servre generujú export.',\n    ],\n    'errors'    => [\n        'limit' => 'Kampaň už dnes bola raz exportovaná. Prosím, vyskúšaj to opäť zajtra.',\n    ],\n    'expired'   => 'Link vypršal',\n    'helpers'   => [],\n    'progress'  => 'Stav',\n    'size'      => 'Veľkosť',\n    'status'    => [\n        'failed'    => 'Neúspešné',\n        'finished'  => 'Ukončené',\n        'running'   => 'Prebieha',\n        'scheduled' => 'Plánované',\n    ],\n    'success'   => 'Pripravuje sa export kampane. O pripravení na stiahnutie ťa budeme informovať v Kanke.',\n    'title'     => 'Export kampane',\n];\n"
  },
  {
    "path": "lang/sk/campaigns/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'close'         => 'Zatvoriť',\n        'file-link'     => 'Link k súboru',\n        'focus_point'   => 'Nastaviť stredobod záujmu',\n        'image-link'    => 'Link k obrázku',\n        'reset_focus'   => 'Resetovať stredobod záujmu',\n        'save'          => 'Uložiť',\n        'upgrade'       => 'Navýšiť miesto na úložisku',\n    ],\n    'breadcrumb'    => 'Galéria',\n    'bulk'          => [\n        'destroy'   => [\n            'confirm'   => 'Naozaj chceš natrvalo odstrániť vybrané prvky? Túto akciu nie je možné vrátiť.',\n            'success'   => '{0}Neodstránené žiadne súbory.|{1}Jeden súbor odstránený.|{2,4} :count súbory odstránené.|{5,*} :count súborov odstránených.',\n        ],\n    ],\n    'cta'           => 'Manažuj a používaj obrázky v celej kampani.',\n    'destroy'       => [\n        'folder'    => 'Priečinok :name zmazaný.',\n        'success'   => 'Obrázok :name zmazaný.',\n    ],\n    'errors'        => [\n        'max'           => 'Prosím zvoľ max. :count súborov naraz.',\n        'permissions'   => 'Role v tvojej kampani nemajú oprávnenie :permission, aby mohli nahrávať obrázky do galérie kampane.',\n        'storage'       => 'Nemáš dostatok miesta na nahranie vybraných obrázkov. Dostupné miesto: :available.',\n    ],\n    'fields'        => [\n        'created_by'            => 'Nahrané od',\n        'details'               => 'Detaily',\n        'ext'                   => 'Ext',\n        'file_type'             => 'Typ súboru',\n        'folder'                => 'Priečinok',\n        'image_mentioned_in'    => '{0} Tento obrázok sa nezobrazuje v žiadnom objekte kampane.|{1} Zobrazuje sa v 1 zázname/poznámke.|[2,*] Zobrazuje sa v :count záznamoch/poznámkach.',\n        'image_used_in'         => '{1}Použitý ako obrázok jedného objektu.|[2,*]Použitý ako obrázok :count objektov.',\n        'link'                  => 'Link',\n        'name'                  => 'Názov',\n        'size'                  => 'Veľkosť',\n        'unused'                => 'Nie je nikde použitý',\n        'used_in'               => 'Použitý v',\n    ],\n    'focus'         => [\n        'locked'    => 'Na nastavenie stredobodu záujmu na obrázku je nutná prémiová kampaň.',\n        'removed'   => 'Stredobod záujmu odstránený.',\n        'updated'   => 'Stredobod záujmu aktualizovaný.',\n    ],\n    'new_folder'    => [\n        'title' => 'Nový priečinok',\n    ],\n    'no_folder'     => 'Bez priečinku',\n    'pitch'         => 'Nahraj obrázky do galérie kampane priamo z textového editoru.',\n    'placeholders'  => [\n        'search'    => 'Hľadať názov obrázku...',\n    ],\n    'storage'       => [\n        'of'    => 'z',\n        'title' => 'úložiska',\n    ],\n    'title'         => 'Galéria kampane :campaign',\n    'update'        => [\n        'folder'    => 'Priečinok zmenený.',\n        'success'   => 'Obrázok zmenený.',\n    ],\n    'uploader'      => [\n        'add'           => 'Pridať nový',\n        'new_folder'    => 'Nový priečinok',\n        'or'            => 'alebo',\n        'select_file'   => 'Vybrať súbor',\n        'well'          => 'Prenes súbor sem k nahratiu',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/import.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'import'    => 'Nahrať export',\n    ],\n    'fields'    => [\n        'updated'   => 'Posledná aktulizácia',\n    ],\n    'form'      => 'Nahrať formulár',\n    'progress'  => [\n        'uploading' => 'Prebieha nahrávanie',\n    ],\n    'status'    => [\n        'failed'    => 'Zlyhaný',\n        'finished'  => 'Ukončený',\n        'queued'    => 'V čakačke',\n        'running'   => 'Prebieha',\n    ],\n    'title'     => 'Import',\n];\n"
  },
  {
    "path": "lang/sk/campaigns/invites.php",
    "content": "<?php\n\nreturn [\n    'create'    => [\n        'helper'    => 'Vytvor link s pozvánkou na zaslanie tvojmu hráčstvu, aby sa vedeli pridať do kampane.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/limits.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Dosiahnutý limit',\n];\n"
  },
  {
    "path": "lang/sk/campaigns/members.php",
    "content": "<?php\n\nreturn [\n    'overview'  => [\n        'limited'   => ':amount z :total členstiev.',\n        'title'     => 'Dostupné členstvá',\n        'unlimited' => ':amount z nekonečna členstiev.',\n    ],\n    'roles'     => [\n        'helper'    => 'Pridať alebo odobrať role členstva pre :user.',\n        'success'   => 'Role úspešne aktualizované pre :user.',\n        'title'     => 'Upraviť role členstva',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/modules.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Vytvoriť modul',\n        'customise' => 'Prispôsobiť',\n    ],\n    'create'        => [\n        'helper'    => 'Vytvor nový vlastný modul na uloženie objektov, ktoré nepasujú do ostatných modulov.',\n        'success'   => 'Nový modul vytvorený.',\n        'title'     => 'Nový modul',\n    ],\n    'delete'        => [\n        'confirm'   => 'Napíš :code, ak máš istotu, že chceš permanentne zmazať :name vlastného modulu.',\n        'helper'    => 'Naozaj chceš odstrániť vlastný modul :name? Automaticky to odstráni aj všetky objekty, záložky a widgety prepojené s týmto modulom.',\n        'success'   => 'Modul :name odstránený.',\n        'title'     => 'Odstrániť modul',\n    ],\n    'errors'        => [\n        'disabled'  => 'Modul :name nastavený ako neaktívny. :fix',\n        'limit'     => 'Kampane môžu mať aktuálne :max vlastných modulov, kým táto funkcionalita prejde testom.',\n    ],\n    'fields'        => [\n        'icon'      => 'Ikona modulu',\n        'plural'    => 'Množné meno modulu',\n        'singular'  => 'Jednotné meno modulu',\n    ],\n    'helpers'       => [\n        'custom'    => 'Toto je vlastný modul.',\n        'icon'      => 'Ikona :fontawesome, napr. :example.',\n        'plural'    => 'Množné číslo mena objektu nového modulu, napr. elixíry',\n        'roles'     => 'Zvoľ role, ktoré budú mať prístup na zobrazenie objektov nového modulu. Toto môže byť neskôr zmenené v nastavení rolí.',\n        'singular'  => 'Jednotné číslo mena objektu nového modulu, napr. elixír',\n    ],\n    'pitch'         => 'Zmeň názov a ikonu asociovanú s týmto modulom pre celú kampaň.',\n    'pitch-custom'  => 'Vytvor vlastné moduly na uloženie jedinečných objektov.',\n    'rename'        => [\n        'helper'    => 'Zmeň názov a ikonu modulu v celej kampani. Ponechaj prázdne, ak chce používať pôvodné nastavenie Kanky.',\n        'success'   => 'Modul prispôsobený.',\n        'title'     => 'Prispôsobenie modulu :module',\n    ],\n    'reset'         => [\n        'default'   => 'Toto zresetuje iba štandardné moduly, nie vlastné.',\n        'success'   => 'Moduly kampane boli resetované.',\n        'title'     => 'Resetovať vlastné názvy a ikony modulov',\n        'warning'   => 'Naozaj chceš resetovať moduly kampane na ich pôvodné názvy a ikony?',\n    ],\n    'sections'      => [\n        'custom'    => 'Vlastné moduly',\n        'default'   => 'Štandardné moduly',\n        'features'  => 'Funkcionality',\n    ],\n    'states'        => [\n        'disable'   => 'Deaktivovať',\n        'enable'    => 'Aktivovať',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/overview.php",
    "content": "<?php\n\nreturn [\n    'followers' => [\n        'title' => 'Sledovateľstvo',\n    ],\n    'member'    => [\n        'title' => 'Členstvo',\n    ],\n    'premium'   => [\n        'enable'    => 'Aktivuj prémiové funkcionality',\n    ],\n    'status'    => [\n        'title' => 'Viditeľnosť',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/plugins.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'bulks'             => [\n            'disable'   => 'Deaktivovať pluginy',\n            'enable'    => 'Aktivovať pluginy',\n            'update'    => 'Aktualizovať pluginy',\n        ],\n        'changelog'         => 'História zmien',\n        'disable'           => 'Deaktivovať plugin',\n        'enable'            => 'Aktivovať plugin',\n        'import'            => 'Importovať',\n        'update'            => 'Aktualizovať plugin',\n        'update_available'  => 'Dostupná aktualizácia!',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Odstránený :count plugin.|[2,4] Odstránené :count pluginy.|[5,*] Odstránených :count pluginov.',\n        'disable'   => '{1} Deaktivovaný :count plugin.|[2,4] Deaktivované :count pluginy.|[5,*] Deaktivovaných :count pluginov.',\n        'enable'    => '{1} Aktivovaný :count plugin.|[2,4] Aktivované :count pluginy.|[5,*] Aktivovaných :count pluginov.',\n        'update'    => '{1} Aktualizovaný :count plugin.|[2,4] Aktualizované :count pluginy.|[5,*] Aktualizovaných :count pluginov.',\n    ],\n    'destroy'       => [\n        'success'   => 'Plugin :plugin odstránený.',\n    ],\n    'disabled'      => [\n        'success'   => 'Plugin :plugin deaktivovaný.',\n    ],\n    'empty_list'    => 'Táto kampaň nemá aktuálne žiadne pluginy. Zájdi na Trhovisko, ak chceš nejaké nainštalovať a následne sa vráť sem, ich aktivovať.',\n    'enabled'       => [\n        'success'   => 'Plugin :plugin aktivovaný.',\n    ],\n    'errors'        => [\n        'invalid_plugin'    => 'Neplatný plugin.',\n    ],\n    'fields'        => [\n        'name'      => 'Názov pluginu',\n        'obsolete'  => 'Tento plugin bol tímom Kanky označený ako zastaralý, t.z. že nefunguje, ako bolo pôvodne plánované.',\n        'status'    => 'Stav',\n        'type'      => 'Typ pluginu',\n    ],\n    'import'        => [\n        'button'                => 'Importovať',\n        'created'               => 'Nasledujúce objekty boli vytvorené:',\n        'helper'                => 'Práve sa chystáš importovať :count objektov z pluginu :plugin. Ak už tento plugin bol importovaný, prepíšu sa zmeny, ktorá boli spravené v daných objektoch.',\n        'no_new_entities'       => 'Žiadne nové objekty nebudú importované.',\n        'option_only_import'    => 'Importovať len nové objekty a preskočiť už predtým importované.',\n        'option_private'        => 'Importovať všetky nové objekty ako súkromné.',\n        'success'               => '{1} Importovaný :count objekt z pluginu :plugin.|[2,4] Importované :count objekty z pluginu :plugin.|[5,*] Importovaných :count objektov z pluginu :plugin.',\n        'title'                 => 'Importovať :plugin',\n        'updated'               => 'Nasledujúce objekty boli aktualizované:',\n    ],\n    'info'          => [\n        'helper'    => 'Ak je vydaná novšia verzia pluginu, môžeš si ho aktualizovať v tvojej kampani na poslednú verziu.',\n        'title'     => 'Aktualizácie pluginu :plugin',\n        'updates'   => 'Aktualizácie',\n    ],\n    'pitch'         => 'Inštaluj a spravuj pluginy z :marketplace.',\n    'status'        => [\n        'always'    => 'Tento plugin bude stále aktívny, dokiaľ ho neodstrániš.',\n        'disabled'  => 'Deaktivovaný',\n        'enabled'   => 'Aktivovaný',\n    ],\n    'templates'     => [\n        'name'  => ':name od :user',\n    ],\n    'title'         => 'Pluginy kampane :name',\n    'types'         => [\n        'attribute' => 'Šablóna atribútov',\n        'pack'      => 'Balík s obsahom',\n        'theme'     => 'Téma',\n    ],\n    'update'        => [\n        'success'   => 'Plugin :plugin aktualizovaný.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/public.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [],\n    'title'     => 'Zmeniť viditeľnosť kampane',\n    'update'    => [\n        'private'   => 'Kampaň je teraz privátna a viditeľná len pre jej členov.',\n        'public'    => 'Kampaň je teraz verejná. Môže chvíľku trvať, kým sa zobrazí na stránke :public-campaigns.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/recovery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'recover'           => 'Obnoviť',\n        'recover_selected'  => 'Obnoviť vybrané',\n    ],\n    'error'     => 'Počas obnovy objektov sa vyskytla chyba.',\n    'fields'    => [\n        'deleted'       => 'Zmazané',\n        'deleted_at'    => 'Zmazané :user dňa :date',\n    ],\n    'name_link' => ':name bolo úspešne obnovené',\n    'order'     => [\n        'newest'        => 'Zoradiť podľa: Najnovšie',\n        'newest_first'  => 'Najnovšie ako prvé',\n        'oldest'        => 'Zoradiť podľa: Najstaršie',\n        'oldest_first'  => 'Najstaršie ako prvé',\n        'type'          => 'Zoradiť podľa: Typu',\n        'type_order'    => 'Typ',\n    ],\n    'posts'     => [],\n    'premium'   => 'Obnovenie objektov je funkcionalita prémiovej kampane.',\n    'success_v2'=> '{1} :count prvok obnovený.|[2,4] :count prvky obnovené.|[5,*] :count prvkov obnovených.',\n    'title'     => 'Obnovenie objektov',\n    'toggle'    => [],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/roles.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'status'    => 'Stav: :status',\n    ],\n    'overview'  => [\n        'limited'   => ':amount z :total rolí vytvorených.',\n        'title'     => 'Dostupné role',\n        'unlimited' => ':amount z nekonečna rolí vytvorených.',\n    ],\n    'public'    => [],\n    'show'      => [\n        'title' => 'Oprávnenia :role - :campaign',\n    ],\n    'toggle'    => [\n        'disabled'  => 'Členovia role :role už nemôžu :action :entities.',\n        'enabled'   => 'Členovia role :role už môžu :action :entities.',\n    ],\n    'warnings'  => [\n        'adding-to-admin'   => 'Členovia role :name majú prístup ku všetkému v kampani a nemôžu byť odstránení inými členmi rovnakej roly. Po :amount minútach sa sami môžu odstrániť z tejto role.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/sidebar.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'reset' => 'Vrátiť na štandard',\n    ],\n    'call-to-action'    => 'Uprav poradie, ikonky a názvy prvkov bočného menu kampane.',\n    'helpers'           => [\n        'image'         => 'Pridaj obrázok, ktorý reprezentuje kampaň. Tento obrázok bude použitý v bočnom menu a v rozhraní prepínača kampaní. Môžeš ho zmeniť hocikedy úpravou kampane.',\n        'reordering'    => 'Uprav poradie v bočnom menu pretiahnutím symbolov vľavo na inú pozíciu.',\n    ],\n    'image-success'     => 'Nový obrázok kampane bol uložený. Tento obrázok môže byť zmenený opäť úpravou kampane.',\n    'reset'             => [\n        'success'   => 'Štandardné nastavenie bočného menu kampane vrátené.',\n        'title'     => 'Vrátiť nastavenie bočného menu',\n        'warning'   => 'Naozaj chceš vrátiť nastavenie bočného menu kampane na štandard?',\n    ],\n    'success'           => 'Nastavenie bočného menu uložené.',\n    'title'             => 'Nastavenie bočného menu kampane :campaign',\n    'tooltips'          => [\n        'image' => 'Zmeň tento obrázok pozadia',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/stats.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'calendars' => [\n            'goal'  => 'Kalendáre',\n            'title' => 'Záznamník času',\n        ],\n        'murderer'  => [\n            'goal'  => 'Mŕtve postavy',\n            'title' => 'Vrah',\n        ],\n    ],\n    'fields'        => [\n        'created'   => 'Vytvorené dňa',\n        'creator'   => 'Vytvorené',\n        'general'   => 'Všeobecné',\n    ],\n    'targets'       => [],\n    'title2'        => 'Štatistiky',\n    'titles'        => [\n        'calendars' => 'Záznamník času úrovne :level',\n        'characters'=> 'Zadávateľ mien úrovne :level',\n        'dead'      => 'Vrah úrovne :level',\n        'families'  => 'Plánovač rodov úrovne :level',\n        'locations' => 'Staviteľ úrovne :level',\n        'quests'    => 'Supermozog úrovne :level',\n        'races'     => 'Chovateľ úrovne :level',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/styles.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'current'   => 'Aktuálna téma: :theme',\n        'disable'   => 'Deaktivovať',\n        'enable'    => 'Aktivovať',\n        'new'       => 'Nový štýl',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Odstránený :count štýl.|[2,4] Odstránené :count štýly.|[5,*] Odstránených :count štýlov.',\n        'disable'   => '{1} Deaktivovaný :count štýl.|[2,4] Deaktivované :count štýly.|[5,*] Deaktivovaných :count štýlov.',\n        'enable'    => '{1} Aktivovaný :count štýl.|[2,4] Aktivované :count štýly.|[5,*] Aktivovaných :count štýlov.',\n    ],\n    'create'        => [\n        'success'   => 'Nový štýl vytvorený.',\n        'title'     => 'Nový štýl',\n    ],\n    'delete'        => [\n        'success'   => 'Štýl :name odstránený.',\n    ],\n    'errors'        => [\n        'max_content'   => 'CSS pravidlo nemôže mať viac ako :amount znakov.',\n        'max_reached'   => 'Dosiahnutý max. počet štýlov (:max).',\n    ],\n    'fields'        => [\n        'content'       => 'Pravidlo CSS',\n        'is_enabled'    => 'Aktivovaný',\n        'length'        => 'Dĺžka',\n        'modified'      => 'Upravené',\n        'name'          => 'Názov',\n        'order'         => 'Poradie',\n    ],\n    'helpers'       => [\n        'here'          => 'na našom blogu',\n        'is_enabled'    => 'Aktivovať túto tému na každej stránke.',\n        'main'          => 'Tvojej boostnutej kampani môžeš pridať vlastné CSS štýlovanie. Tieto štýly sú nahrávané po tom, ako je nahraná téma z trhoviska, ktorú máš aktivovanú pre danú kampaň. Viac o štýloch pre tvoju kampaň nájdeš :here.',\n    ],\n    'pitch'         => 'Vytvor vlastný CSS štýl, ktorým si nastavíš vlastný vizuál kampane.',\n    'placeholders'  => [\n        'name'  => 'Názov štýlu',\n    ],\n    'reorder'       => [\n        'save'      => 'Uložiť nové poradie',\n        'success'   => '{1} Zmena poradia :count štýlu.|[2,4] Zmena poradia :count štýlov.|[5,*] Zmena poriadia :count štýlov.',\n        'title'     => 'Preskupiť štýly',\n    ],\n    'theme'         => [\n        'none'      => 'Použiť preferenciu užívateľa',\n        'override'  => 'Prepísať tému',\n        'success'   => 'Téma kampane prepísaná.',\n        'title'     => 'Aktualizovať tému kampane.',\n    ],\n    'title'         => 'Témovanie kampane',\n    'update'        => [\n        'success'   => 'Štýl :name aktualizovaný.',\n        'title'     => 'Aktualizovať štýl',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/campaigns/vanity.php",
    "content": "<?php\n\nreturn [\n    'available' => 'Meno :vanity je dostupné!',\n    'rule'      => 'Pole :field vyžaduje aspoň jeden abecedný znak.',\n    'rule2'     => 'Pole :field neumožňuje nasledujúce znaky: /.',\n    'set'       => 'Skrátené URL kampane je trvalo nastavené na :vanity.',\n];\n"
  },
  {
    "path": "lang/sk/campaigns/webhooks.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'action'    => 'Zmeniť stav',\n        'add'       => 'Vytvoriť webhook',\n        'bulks'     => [\n            'delete_success'    => '{1} :count webhook zmazaný.|[2,4] :count webhooky zmazané.|[5,*] :count webhookov zmazaných.',\n            'disable'           => 'Deaktivovať',\n            'disable_success'   => '{1} :count webhook deaktivovaný.|[2,4] :count webhooky deaktivované.|[5,*] :count webhookov deaktivovaných.',\n            'enable'            => 'Aktivovať',\n            'enable_success'    => '{1} :count webhook aktivovaný.|[2,4] :count webhooky aktivované.|[5,*] :count webhookov aktivovaných.',\n        ],\n        'test'      => 'Testovať webhook',\n        'update'    => 'Aktualizovať webhook',\n    ],\n    'create'        => [\n        'success'   => 'Webhook úspešne vytvorený',\n        'title'     => 'Pridať nový webhook',\n    ],\n    'destroy'       => [\n        'success'   => 'Webhook úspešne zmazaný',\n    ],\n    'edit'          => [\n        'success'   => 'Webhook úspešne aktualizovaný',\n        'title'     => 'Aktualizovať webhook',\n    ],\n    'fields'        => [\n        'enabled'           => 'Aktivovaný',\n        'event'             => 'Udalosť',\n        'events'            => [\n            'deleted'   => 'Zmazaný objekt',\n            'edited'    => 'Upravený objekt',\n            'new'       => 'Nový objekt',\n        ],\n        'message'           => 'Správa',\n        'private_entities'  => [\n            'helper'    => 'Nespustí webhook pri aktualizácii súkromných objektov.',\n            'skip'      => 'Preskočiť súkromné objekty',\n        ],\n        'type'              => 'Typ',\n        'types'             => [\n            'custom'    => 'Správa',\n            'payload'   => 'Payload',\n        ],\n        'url'               => 'Url',\n    ],\n    'helper'        => [\n        'active'    => 'Ak je webhook práve aktívny',\n        'message'   => 'Pridaj vlastnú správu s podporou pre mapovanie',\n        'status'    => 'Zmeň aktívny stav webhooku',\n    ],\n    'placeholders'  => [\n        'message'   => '{who} urobil zmeny v {name}, zisti to na {url}',\n        'url'       => 'Url cieľového webhooku',\n    ],\n    'test'          => [\n        'success'   => 'Požiadavka na test zaslaná',\n    ],\n    'title'         => 'Webhooky',\n];\n"
  },
  {
    "path": "lang/sk/campaigns.php",
    "content": "<?php\n\nreturn [\n    'actions'                           => [],\n    'create'                            => [\n        'success'   => 'Kampaň vytvorená.',\n        'title'     => 'Vytvoriť novú kampaň',\n    ],\n    'destroy'                           => [],\n    'edit'                              => [\n        'success'   => 'Kampaň upravená.',\n    ],\n    'entity_note_visibility'            => [],\n    'entity_personality_visibilities'   => [\n        'private'   => 'Nové postavy majú popis osobnosti nastavený štandardne ako súkromný.',\n    ],\n    'entity_visibilities'               => [\n        'private'   => 'Nové objekty sú súkromné',\n    ],\n    'errors'                            => [\n        'access'        => 'K tejto kampani nemáš prístup.',\n        'premium'       => 'Táto funkcionalita je dostupná pre prémiové kampane.',\n        'unknown_id'    => 'Neznáma kampaň.',\n    ],\n    'export'                            => [],\n    'fields'                            => [\n        'boosted'                   => 'Boost od',\n        'entity_count'              => 'Počet objektov',\n        'entry'                     => 'Popis kampane',\n        'followers'                 => 'Odberatelia',\n        'genre'                     => 'Žáner',\n        'header_image'              => 'Titulný obrázok',\n        'image'                     => 'Obrázok',\n        'locale'                    => 'Jazyk',\n        'name'                      => 'Názov',\n        'open'                      => 'Otvorená pre prihlášky',\n        'premium'                   => 'Prémium poskytnuté od :name',\n        'public'                    => 'Viditeľnosť kampane',\n        'public_campaign_filters'   => 'Filter verejných kampaní',\n        'superboosted'              => 'Superboostnutie od',\n        'system'                    => 'Systém',\n        'theme'                     => 'Téma',\n        'vanity'                    => 'Skrátené URL',\n    ],\n    'following'                         => 'Odber aktívny',\n    'helpers'                           => [\n        'boosted'                   => 'Niektoré funkcie sú odomknuté, pretože táto kampaň je boostnutá. Viac nájdeš v :settings.',\n        'css'                       => 'Napíš svoj vlastný CSS, ktorý sa nahrá do stránok tvojej kampane. Prosím, uvedom si, že hociktoré zneužitie tejto funkcionality môže viesť k odstráneniu tvojho užívateľského CSS kódu. Opakované alebo závažné porušenia môžu viesť k odstráneniu tvojej kampane.',\n        'dashboard'                 => 'Prispôsob zobrazenie widgetu na nástenke vyplnením týchto údajov.',\n        'excerpt'                   => 'Krátky popis kampane sa zobrazí na nástenke, napíš teda pár pár viet ako úvod do tvojho sveta. Nemusíš sa rozpisovať, stačí pár slov.',\n        'header_image'              => 'Obrázok, ktorý sa bude zobrazovať na pozadí widgetu pre záhlavie kampane na nástenke.',\n        'hide_history'              => 'Aktivuj toto nastavenie, ak chceš skryť prehľad minulých zmien objektov pre neadministrátorov.',\n        'hide_members'              => 'Aktivuj toto nastavenie, ak chceš skryť zoznam členov kampane pre neadministrátorov.',\n        'locale'                    => 'Regionálne nastavenie, ktoré sa vzťahuje na tvoju kampaň. Používa sa na vytváranie obsahu a filtrovanie verejných kampaní.',\n        'name'                      => 'Tvoja kampaň / svet môže mať ľubovoľné meno, pokiaľ sa skladá z min. 4 písmen alebo čísel.',\n        'no_entry'                  => 'Vyzerá to tak, že kampaň ešte nemá žiaden popis! Zmeňme to.',\n        'premium'                   => 'Niektoré funkcionality sú dostupné, lebo boli odomknuté prémiové funkcionality. Zisti viac na stránke :settings.',\n        'public_campaign_filters'   => 'Pomôž iným nájsť tvoju kampaň medzi ostatnými verejnými doplnením týchto informácií.',\n        'public_no_visibility'      => 'Hlavu hore! Tvoja kampaň je verejná, ale rola pre verejnosť nemá k ničomu prístup. :fix',\n        'system'                    => 'Ak je tvoja kampaň verejne viditeľná, systém sa zobrazuje na stránke :link.',\n        'systems'                   => 'Aby sme užívateľov nezahltili nespočetnými možnosťami, niektoré funkcionality Kanky sú prístupné len pre špecifické RPG systémy (napr. štatistický popis príšer pre D&D 5e). Priradením systému na tomto mieste aktivuješ dané funkcionality.',\n        'theme'                     => 'Nastav tému pevne pre kampaň a prepíš nastavenie užívateľov.',\n        'view_public'               => 'Ak si chceš pozrieť tvoju kampaň ako verejnú, otvor tento :link v novom inkognito okne.',\n    ],\n    'index'                             => [],\n    'invites'                           => [\n        'actions'               => [\n            'copy'  => 'Kopírovať link do schránky',\n            'link'  => 'Pozvať ľudí',\n        ],\n        'create'                => [\n            'buttons'       => [\n                'create'    => 'Vytvoriť pozvánku',\n            ],\n            'success_link'  => 'Link vytvorený: :link',\n            'title'         => 'Pozvať niekoho k tvojej kampani',\n        ],\n        'destroy'               => [\n            'success'   => 'Pozvánka odstránená.',\n        ],\n        'error'                 => [\n            'inactive_token'    => 'Táto pozvánka už bola použitá alebo daná kampaň už neexistuje.',\n            'invalid_token'     => 'Platnosť tejto pozvánky už vypršala.',\n            'join'              => 'Prosím, prihlás sa alebo si registruj nové konto k prístupu do :campaign.',\n        ],\n        'fields'                => [\n            'created'   => 'Zaslať',\n            'role'      => 'Rola',\n            'token'     => 'Žetón',\n            'type'      => 'Typ',\n            'usage'     => 'Max. počet použití',\n        ],\n        'helpers'               => [\n            'role'  => 'Užívatelia musia byť súčasťou kampane, aby mohli obdržať rolu admina.',\n            'usage' => 'Koľkokrát môže byť pozvánkový link použitý, než sa stane nefunkčným.',\n        ],\n        'unlimited_validity'    => 'Neobmedzený',\n        'usages'                => [\n            'five'      => '5 použití',\n            'no_limit'  => 'Bez obmedzenia',\n            'once'      => '1 použitie',\n            'ten'       => '10 použití',\n        ],\n    ],\n    'leave'                             => [\n        'action'            => 'Opustiť kampaň',\n        'confirm'           => 'Naozaj chceš opustiť kampaň :name? Už ku nej nebudeš mať prístup, ibaže by ťa do nej opäť pozval jej administrátor.',\n        'confirm-button'    => 'Áno, opustiť kampaň',\n        'error'             => 'Nemôže opustiť kampaň.',\n        'fix'               => 'Prejsť na členstvo kampane',\n        'no-admin-left'     => 'Nie je možné opustiť kampaň, pretože by tak ostala bez adminov. Priraď najprv inému členovi alebo členke rolu admin.',\n        'success'           => 'Opustil/a si kampaň.',\n        'title'             => 'Opustenie kampane',\n    ],\n    'members'                           => [\n        'actions'               => [\n            'remove'        => 'Odstrániť z kampane',\n            'switch'        => 'Prepnúť',\n            'switch-back'   => 'Prepnúť späť',\n            'switch-entity' => 'Zobraziť ako',\n        ],\n        'fields'                => [\n            'banned'        => 'Užívateľ má zákaz',\n            'joined'        => 'Súčasťou od',\n            'last_login'    => 'Posledné prihlásenie',\n            'name'          => 'Užívateľ',\n            'role'          => 'Rola',\n            'roles'         => 'Roly',\n        ],\n        'helpers'               => [\n            'switch'    => 'Prepnúť na tohto užívateľa',\n        ],\n        'impersonating'         => [\n            'message'   => 'Kampaň teraz vidíš ako iný užívateľ. Niektoré funkcionality boli deaktivované, ale ostatok vyzerá rovnako, ako by to videl daný užívateľ. Aby si sa prepol/a späť na tvojho užívateľa, použi tlačidlo Prepnúť, ktoré sa nachádza na mieste, kde je bežne tlačidlo Logout.',\n            'title'     => 'Náhľad ako :name',\n        ],\n        'invite'                => [\n            'description'   => 'Do tvojej kampane môžeš pozvať priateľa/ku tým, že zadáš ich e-mailovú adresu. Po akceptovaní pozvánky bude pridaný/á ako člen s danou rolou. Zaslaná pozvánka môže byť hocikedy zrušená.',\n            'more'          => 'Nové role môžeš pridať cez :link.',\n            'title'         => 'Pozvať',\n        ],\n        'removal'               => 'Odstraňuješ \":member\" z kampane.',\n        'roles'                 => [\n            'member'    => 'Člen',\n            'owner'     => 'Administrátor',\n            'player'    => 'Hráč',\n            'public'    => 'Verejný',\n            'viewer'    => 'Divák',\n        ],\n        'switch_back_success'   => 'Teraz si späť ako tvoj vlastný užívateľ.',\n    ],\n    'mentions'                          => [],\n    'modules'                           => [],\n    'open_campaign'                     => [],\n    'options'                           => [],\n    'overview'                          => [\n        'entity-count'      => '{0} Žiadne objekty|{1} :amount objekt|[2,4] :amount objekty|[5,*] :amount objektov',\n        'follower-count'    => '{0} Žiadni sledovatelia|{1} :amount sledovateľ|[2,4] :amount sledovatelia|[5,*] :amount sledovateľov',\n    ],\n    'panels'                            => [\n        'dashboard' => 'Nástenka',\n        'privacy'   => 'Štandardy ochrany dát',\n        'setup'     => 'Nastavenia',\n        'sharing'   => 'Zdieľanie',\n        'systems'   => 'Systémy',\n        'ui'        => 'Rozhranie',\n    ],\n    'placeholders'                      => [\n        'locale'    => 'Jazyk',\n        'name'      => 'Názov tvojho sveta',\n        'system'    => 'D&D, Pathfinder, Fate, Dračí Doupě',\n    ],\n    'privacy'                           => [\n        'hidden'    => 'Skryté',\n        'private'   => 'Súkromné',\n        'visible'   => 'Viditeľné',\n    ],\n    'public'                            => [\n        'helpers'   => [\n            'introduction'  => 'Kampane sú štandardne nastavené ako súkromné, no môžu byť zviditeľnené pre verejnosť. Hocikto si ich takto môže pozrieť a dostupné sú na stránke :public-campaigns, ak majú objekty, ktorým je pridelená rola :public-role. Verejná kampaň je viditeľná pre všetkých, ale aby bol viditeľný aj jej obsah, je nutné prideliť :public-role potrebné oprávnenia.',\n        ],\n    ],\n    'roles'                             => [\n        'actions'       => [\n            'add'           => 'Pridať rolu',\n            'duplicate'     => 'Duplikovať rolu',\n            'permissions'   => 'Spravovať oprávnenia',\n            'rename'        => 'Premenovať rolu',\n            'save'          => 'Uložiť rolu',\n        ],\n        'admin_role'    => 'Rola administrátora',\n        'bulks'         => [\n            'delete'    => '{1} Odstránená :count rola.|[2,4] Odstránené :count roly.|[5,*] Odstránených :count rolí.',\n            'edit'      => '{1} Aktualizovaná :count rola.|[2,4] Aktualizované :count roly.|[5,*] Aktualizovaných :count rolí.',\n        ],\n        'create'        => [\n            'success'   => 'Rola :name vytvorená.',\n            'title'     => 'Nová rola',\n        ],\n        'destroy'       => [\n            'success'   => 'Rola odstránená.',\n        ],\n        'edit'          => [\n            'success'   => 'Rola upravená.',\n            'title'     => 'Upraviť rolu :name',\n        ],\n        'fields'        => [\n            'copy_permissions'  => 'Kopírovať oprávnenia',\n            'name'              => 'Názov',\n            'permissions'       => 'Oprávnenia',\n            'type'              => 'Typ',\n            'users'             => 'Užívateľ',\n        ],\n        'helper'        => [\n            '1'                     => 'Kampani môže byť priradených viacero rolí. Rola :admin má automaticky prístup ku všetkému v kampani, ale každej inej roli môžu byť pridelené špecifické oprávnenia na rôzne typy objektov (postavy, miesta, atď.)',\n            '2'                     => 'Objekty môžu mať oveľa detailnejšie nastavenie oprávnení, ktoré vieš nastaviť v karte \"Oprávnenia\" objektu. Táto karta sa zobrazí, ak máš v kampani viacero rolí alebo členov.',\n            '3'                     => 'Môžeš použiť \"opt-out\" systém, v ktorom všetky roly dostanú práva na čítanie na všetky objekty a niektoré objekty potom nastavíš ako \"Súkromné\", čím ich skryješ. Alebo rolám nedáš veľa oprávnení a následne ich nastavíš individuálne pre každý objekt.',\n            '4'                     => 'Boostnuté kampane môžu mať neobmedzený počet rolí.',\n            'permissions_helper'    => 'Duplikuje všetky oprávnenia danej roly v moduloch a objektoch.',\n        ],\n        'hints'         => [\n            'campaign_not_public'   => 'Verejná rola má oprávnenia, ale kampaň je súkromná. Tieto nastavenia počas úpravy kampane nájdeš na karte Zdieľanie.',\n            'empty_role'            => 'Táto rola nemá zatiaľ žiadnych členov.',\n            'role_admin'            => 'Rola :name poskytne automaticky prístup ku všetkému v kampani pre jej členstvo.',\n            'role_permissions'      => 'Umožniť role :name nasledujúce akcie pre všetky objekty.',\n        ],\n        'members'       => 'Členovia',\n        'modals'        => [\n            'details'   => [\n                'campaign'  => 'Oprávnenia kampane umožňujú nasledovné.',\n                'entities'  => 'Rýchle info o tom, čo obdržia členovia tejto role, ak dostanú dané oprávnenie.',\n                'more'      => 'Viac informácií nájdeš v našom videonávode na YouTube',\n                'title'     => 'Detaily oprávnenia',\n            ],\n        ],\n        'permissions'   => [\n            'actions'   => [\n                'add'           => 'Vytvoriť',\n                'articles'      => 'Články',\n                'dashboard'     => 'Nástenka',\n                'delete'        => 'Odstrániť',\n                'edit'          => 'Upraviť',\n                'gallery'       => [\n                    'browse'    => 'Prehľadávať',\n                    'manage'    => 'Plná kontrola',\n                    'upload'    => 'Nahrať',\n                ],\n                'manage'        => 'Spravovať',\n                'members'       => 'Členovia',\n                'permission'    => 'Spravovať oprávnenia',\n                'read'          => 'Zobraziť',\n                'toggle'        => 'Zmeniť u všetkých',\n            ],\n            'helpers'   => [\n                'add'           => 'Povolí vytváranie objektov tohto typu. Automaticky budú mať povolené zobraziť a upravovať objekty, ktoré vytvoria, ak nemajú oprávnenie pre zobrazenie a editáciu.',\n                'articles'      => 'Umožňuje pridávanie, úpravy a mazanie článkov, aj keď daný člen nemôže upravovať daný objekt.',\n                'dashboard'     => 'Povolí úpravy násteniek a nástenkových widgetov.',\n                'delete'        => 'Povolí odstránenia všetkých objektov tohto typu.',\n                'edit'          => 'Povolí úpravy všetkých objektov tohto typu.',\n                'gallery'       => [\n                    'browse'    => 'Povoliť zobrazenie galérie a nastavení obrázku objektu z galérie.',\n                    'manage'    => 'Povoliť všetko v galérii podobne ako u adminov, vrátane úprav a mazania.',\n                    'upload'    => 'Povoliť nahrávanie obrázkov do galérie. Zobrazovať sa budú iba obrázky, ktorá nahrali, ak nie sú nastavené ďalšie povolenia.',\n                ],\n                'manage'        => 'Povolí úpravu kampane ako ju má admin kampane, no bez možnosti zmazať kampaň.',\n                'members'       => 'Povolí zasielať pozvánky pre nových členov do kampane.',\n                'not_public'    => 'Kampaň nie je verejná. Oprávnenia pre verejné role môžu byť nastavené, ale budú ignorované. Ak chceš kampaň zverejniť, uprav jej nastavenia.',\n                'permission'    => 'Povolí nastaviť oprávnenia na objektoch typu, ktoré môže upravovať.',\n                'read'          => 'Povolí zobrazenie všetkých objektov tohto typu, ktoré nie sú súkromné.',\n            ],\n        ],\n        'placeholders'  => [\n            'name'  => 'Názov role',\n        ],\n        'title'         => 'Roly kampane :name',\n        'types'         => [\n            'owner'     => 'Admin',\n            'public'    => 'Verejný',\n            'standard'  => 'Štandard',\n        ],\n        'users'         => [\n            'actions'   => [\n                'add'           => 'Pridať',\n                'remove'        => ':user z role :role',\n                'remove_user'   => 'Odstrániť užívateľa z role',\n            ],\n            'create'    => [\n                'success'   => 'Užívateľ bol priradený k roli.',\n                'title'     => 'Pridať člena k roli :name',\n            ],\n            'destroy'   => [\n                'success'   => 'Užívateľ bol odstránený z role.',\n            ],\n            'errors'    => [\n                'cant_kick_admins'  => 'Aby sme predišli zneužitiu, nie je možné odstrániť iných členov kampane s rolou :admin. V prípade zmien nás kontaktuj na :discord alebo cez :email.',\n                'needs_more_roles'  => 'Predtým, ako odstrániš svoju rolu :admin z kampane, musíš si prideliť inú rolu v kampani.',\n            ],\n            'fields'    => [\n                'name'  => 'Meno',\n            ],\n        ],\n    ],\n    'settings'                          => [\n        'actions'       => [\n            'enable'    => 'Aktivovať',\n        ],\n        'boosted'       => 'Táto funkcia je aktuálne v beta verzii a dostupná iba pre :boosted.',\n        'deprecated'    => [\n            'help'  => 'Tento modul je zastaralý, znamená to, že už nie je aktualizovaný a chyby, ktoré sa môžu vyskytnúť s novými aktualizáciami, nie sú opravované. Môžeš ho používať, ale v budúcnosti bude z Kanky odstránený.',\n            'title' => 'Zastaralé',\n        ],\n        'disabled'      => 'Modul :module je deaktivovaný.',\n        'enabled'       => 'Modul :module je aktivovaný.',\n        'errors'        => [\n            'module-disabled'   => 'Požadovaný modul je aktuálne v nastaveniach kampane deaktivovaný. :fix.',\n        ],\n        'helpers'       => [\n            'abilities'         => 'Vytvor schopnosti ako kúzla alebo sily, ktoré priradíš iným objektom.',\n            'assets'            => 'Nahraj súbory, nastav linky a definuj aliasy pre jednotlivé objekty.',\n            'bookmarks'         => 'Vytvor záložky k objektom alebo filtrovaným zoznamom, ktoré sa zobrazia v bočnom menu.',\n            'calendars'         => 'Miesto, na ktorom vieš vytvoriť kalendáre tvojho sveta.',\n            'characters'        => 'Postavy, ktoré obývajú svoj svet.',\n            'conversations'     => 'Fiktívne diskusie medzi postavami v tvojom svete alebo užívateľmi kampane.',\n            'creatures'         => 'Obsaď tvoj svet zvermi, bytosťami a príšerami s pomocou modulu pre bytosti.',\n            'dice_rolls'        => 'Ak používaš Kanku na hranie, môžeš tu spravovať tvoje hody kockami.',\n            'entity_attributes' => 'Maj prehľad o atribútoch objektov kampane, napr. ich HP alebo Rýchlosti.',\n            'events'            => 'Sviatky, festivaly, katastrofy, narodeniny, vojny.',\n            'families'          => 'Klany a rody, ich vzťahy a členovia.',\n            'inventories'       => 'Spravuj inventáre v tvojich objektoch.',\n            'items'             => 'Zbrane, vozidlá, relikvie, elixíry.',\n            'journals'          => 'Zistenia a pozorovania spísané postavami alebo príprava na hry pre Rozprávača.',\n            'locations'         => 'Planéty, sféry, kontinenty, rieky, štáty, osídlia, chrámy, hostince.',\n            'maps'              => 'Nahraj mapy s úrovňami a značkami, ktoré sú prelinkované s inými objektami tvojej kampane.',\n            'notes'             => 'Báje, náboženstvá, dejiny, mágia, rasy.',\n            'organisations'     => 'Kulty, vojenské jednotky, frakcie, cechy.',\n            'quests'            => 'Aby si vedel/a sledovať plnenie úloh a cieľov postáv.',\n            'races'             => 'Ak má kampaň viac ako jednu rasu, pomôže sa ti v nich vyznať táto funkcia.',\n            'tags'              => 'Každý objekt môže byť priradený viacerým kategóriám. Kategórie môžu patriť pod iné kategórie a objekty môžu byť podľa kategórií filtrované.',\n            'timelines'         => 'Zobraz dejiny tvojho sveta pomocou časových osí.',\n            'whiteboards'       => 'Kresli a píš na tabule, ak chceš vizuálne plánovať tvoj svet či ciele.',\n        ],\n    ],\n    'sharing'                           => [\n        'filters'   => 'Verejné kampane sú viditeľné na :public-campaigns stránke. Vyplnením tohto formulára umožníš ľuďom rýchlejšie nájsť tvoju kampaň.',\n        'language'  => 'Jazyk, v ktorom je kampaň písaná.',\n        'system'    => 'Ak hráte stolovú RPG hru, systém, ktorý používate pri hraní.',\n    ],\n    'show'                              => [\n        'actions'   => [\n            'edit'  => 'Upraviť kampaň',\n        ],\n        'tabs'      => [\n            'achievements'      => 'Úspechy',\n            'customisation'     => 'Úprava',\n            'danger'            => 'Výstrahy',\n            'data'              => 'Údaje',\n            'default-images'    => 'Prednastavené obrázky',\n            'defaults'          => 'Štandardné',\n            'deletion'          => 'Odstránenie',\n            'export'            => 'Export',\n            'import'            => 'Import',\n            'logs'              => 'Logy',\n            'management'        => 'Manažment',\n            'members'           => 'Členovia',\n            'plugins'           => 'Pluginy',\n            'recovery'          => 'Obnovenie',\n            'roles'             => 'Roly',\n            'sidebar'           => 'Bočné menu',\n            'stats'             => 'Štatistiky',\n            'styles'            => 'Témy',\n            'webhooks'          => 'Webhooky',\n        ],\n        'title'     => 'Kampaň :name',\n    ],\n    'status'                            => [\n        'free'      => 'Prémiové funkcionality sú neaktívne.',\n        'legacy'    => [\n            'title' => 'Boostnuté funkcionality (zastaralé)',\n        ],\n        'premium'   => 'Vďaka :name sú prémiové funkcionality aktívne.',\n        'title'     => 'Prémiové funkcionality',\n    ],\n    'superboosted'                      => [],\n    'themes'                            => [\n        'none'  => 'Žiadna (štandardné nastavenie)',\n    ],\n    'ui'                                => [\n        'entity_history'    => [\n            'hidden'    => 'Viditeľné len pre adminov kampane',\n            'visible'   => 'Viditeľné pre členov',\n        ],\n        'fields'            => [\n            'entity_history'    => 'Protokol histórie objektu',\n            'member_list'       => 'Zoznam členov kampane',\n        ],\n        'helpers'           => [\n            'entity-history'    => 'Kontroluj, kto vidí posledné zmeny v jednotlivých objektoch kampane.',\n            'member-list'       => 'Kontroluj, kto vidí koho v kampani.',\n            'theme'             => 'Zobraz kampaň v téme užívateľa alebo vynúť zobrazenie v jednej z nasledujúcich tém.',\n        ],\n        'members'           => [\n            'hidden'    => 'Viditeľné len pre adminov kampane',\n            'visible'   => 'Viditeľné pre členov',\n        ],\n    ],\n    'visibilities'                      => [\n        'private'   => 'Súkromná',\n        'public'    => 'Verejná',\n        'unlisted'  => 'Verejná (neviditeľná)',\n    ],\n    'warning'                           => [],\n];\n"
  },
  {
    "path": "lang/sk/characters.php",
    "content": "<?php\n\nreturn [\n    'actions'                   => [\n        'add_appearance'    => 'Pridať výzor',\n        'add_personality'   => 'Pridať osobnosť',\n    ],\n    'conversations'             => [],\n    'create'                    => [\n        'title' => 'Nová postava',\n    ],\n    'destroy'                   => [],\n    'dice_rolls'                => [],\n    'edit'                      => [],\n    'families'                  => [\n        'helper'    => 'Zmeň poradie a kontroluj, ktoré rody :name sú viditeľné a skryté pre ne-administrátorov.',\n        'reorder'   => [\n            'success'   => 'Rody postavy úspešne aktualizované.',\n        ],\n        'title2'    => 'Spravovať rody',\n    ],\n    'fields'                    => [\n        'age'                       => 'Vek',\n        'is_appearance_pinned'      => 'Pripnutý výzor',\n        'is_dead'                   => 'Po smrti',\n        'is_personality_pinned'     => 'Pripnutá osobnosť',\n        'is_personality_visible'    => 'Osobnosť viditeľná',\n        'life'                      => 'Život',\n        'physical'                  => 'Telesné črty',\n        'pronouns'                  => 'Zámená',\n        'sex'                       => 'Pohlavie',\n        'status'                    => 'Stav',\n        'title'                     => 'Titul',\n        'traits'                    => 'Vlastnosti',\n    ],\n    'helpers'                   => [\n        'age'   => 'Tento objekt môžeš referencovať v kalendári tvojej kampane a automaticky tak vypočítať vek. :more.',\n    ],\n    'hints'                     => [\n        'is_appearance_pinned'      => 'Ak aktívne, črty výzoru postavy sa zobrazia pod záznamom na stránke prehľadu.',\n        'is_dead'                   => 'Táto postava je mŕtva.',\n        'is_missing'                => 'Táto postava sa stratila.',\n        'is_personality_visible'    => 'Celú sekciu o osobnosti vieš skryť pred užívateľmi, ktorí nemajú rolu Admin.',\n        'personality_not_visible'   => 'Osobnostné črty tejto postavy sú aktuálne viditeľné len pre užívateľov s rolou Admin.',\n        'personality_visible'       => 'Osobnostné črty tejto postavy sú viditeľné pre všetkých.',\n    ],\n    'index'                     => [],\n    'items'                     => [],\n    'journals'                  => [],\n    'labels'                    => [\n        'appearance'    => [\n            'entry' => 'Opis výzoru',\n            'name'  => 'Názov výzoru',\n        ],\n        'personality'   => [\n            'entry' => 'Opis osobnostnej črty',\n            'name'  => 'Názov osobnostnej črty',\n        ],\n    ],\n    'lists'                     => [\n        'empty' => 'Vytvor svojho prvého hrdinu, zloducha alebo pobočníka, aby tvoj svet ožil.',\n    ],\n    'maps'                      => [],\n    'organisations'             => [\n        'create'    => [\n            'success'   => 'Postava priradená organizácii.',\n            'title'     => 'Nová organizácia pre :name',\n        ],\n        'destroy'   => [\n            'success'   => 'Postava odstránená z organizácie.',\n        ],\n        'edit'      => [\n            'success'   => 'Organizácia postavy upravená.',\n            'title'     => 'Upraviť organizáciu :name',\n        ],\n        'fields'    => [\n            'role'  => 'Rola',\n        ],\n    ],\n    'personality_visibility'    => [\n        'admin' => 'Členovia roly Admin',\n        'all'   => 'Viditeľné pre všetkých',\n    ],\n    'placeholders'              => [\n        'age'               => 'Vek',\n        'appearance_entry'  => 'Popis',\n        'appearance_name'   => 'Vlasy, oči, pokožka, výška',\n        'name'              => 'Meno postavy',\n        'personality_entry' => 'Detaily',\n        'personality_name'  => 'Ciele, maniere, slabosti, vzťahy,...',\n        'physical'          => 'Telesné črty',\n        'pronouns'          => 'On/Jeho, Ona/Jej, Oni/Ich',\n        'sex'               => 'Pohlavie',\n        'title'             => 'Titul',\n        'traits'            => 'Vlastnosti',\n        'type'              => 'NPC, hráčska postava, božstvo',\n    ],\n    'quests'                    => [\n        'helpers'   => [\n            'quest_giver'   => 'Úlohy, ktorých zadávateľom je táto postava.',\n            'quest_member'  => 'Úlohy, ktorých členom je táto postava.',\n        ],\n    ],\n    'races'                     => [\n        'helper'    => 'Zmeň poradie a skontroluj, ktoré rasy :name sú viditeľné alebo skryté pre ne-administrátorov.',\n        'reorder'   => [\n            'success'   => 'Rasy postavy úspešne aktualizované.',\n        ],\n        'title2'    => 'Spravovať rasy',\n    ],\n    'sections'                  => [\n        'appearance'    => 'Výzor',\n        'personality'   => 'Osobnosť',\n    ],\n    'show'                      => [],\n    'status'                    => [\n        'alive'     => 'Nažive',\n        'dead'      => 'Mŕtva',\n        'missing'   => 'Stratená',\n    ],\n    'warnings'                  => [\n        'personality_hidden'    => 'Nemáš povolené upravovať črty osobnosti tejto postavy.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/colours.php",
    "content": "<?php\n\nreturn [\n    'aqua'          => 'Belasá',\n    'black'         => 'Čierna',\n    'blue'          => 'Modrá',\n    'brown'         => 'Hnedá',\n    'green'         => 'Zelená',\n    'grey'          => 'Sivá',\n    'light-blue'    => 'Svetlomodrá',\n    'maroon'        => 'Gaštanová',\n    'navy'          => 'Tmavomodrá',\n    'none'          => 'Žiadna',\n    'orange'        => 'Oranžová',\n    'pink'          => 'Ružová',\n    'purple'        => 'Fialová',\n    'red'           => 'Červená',\n    'teal'          => 'Tyrkysová',\n    'white'         => 'Biela',\n    'yellow'        => 'Žltá',\n];\n"
  },
  {
    "path": "lang/sk/concept.php",
    "content": "<?php\n\nreturn [\n    'boosted-campaign'          => 'boostnutá kampaň',\n    'premium-campaign'          => 'prémiová kampaň',\n    'premium-campaign-count'    => '{0} Žiadne prémiové kampane |{1} 1 prémiová kampaň |[2,4] :count prémiové kampane |[5,*] :count prémiových kampaní',\n    'premium-campaigns'         => 'prémiové kampane',\n    'premium-feature'           => 'Prémiová funkcionalita',\n    'superboosted-campaign'     => 'superboostnutá kampaň',\n];\n"
  },
  {
    "path": "lang/sk/confirm/editing.php",
    "content": "<?php\n\nreturn [\n    'back'          => 'Späť',\n    'description'   => 'Vyzerá to tak, že niekto práve upravuje túto stránku! Chceš sa vrátiť späť alebo ignorovať toto varovanie a riskovať stratu dát?',\n    'ignore'        => 'Napriek tomu upraviť',\n    'members'       => 'Osoby upravujúce túto stránku:',\n    'title'         => 'Varovanie',\n    'user'          => ':user od :since',\n];\n"
  },
  {
    "path": "lang/sk/conversations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nová diskusia',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_closed'     => 'Uzavretá',\n        'messages'      => 'Správy',\n        'participants'  => 'Účastníci',\n    ],\n    'hints'         => [\n        'empty'         => 'Tejto diskusie sa nikto nezúčastnil.',\n        'participants'  => 'Prosím, pridaj do diskusiu účastníkov tým, že klikneš na symbol :icon hore vpravo.',\n    ],\n    'index'         => [],\n    'messages'      => [\n        'destroy'       => [\n            'success'   => 'Správa odstránená.',\n        ],\n        'is_updated'    => 'Upravená',\n        'load_previous' => 'Nahrať predchádzajúce správy',\n        'placeholders'  => [\n            'message'   => 'Tvoja správa',\n        ],\n    ],\n    'participants'  => [\n        'create'    => [\n            'success'   => 'Účastník :entity pridaný do diskusie.',\n        ],\n        'destroy'   => [\n            'success'   => 'Účastník :entity odstránený z diskusie.',\n        ],\n        'modal'     => 'Účastníci',\n        'title'     => 'Účastníci :name',\n    ],\n    'placeholders'  => [\n        'name'  => 'Názov diskusie',\n        'type'  => 'V hre, príprave, deji',\n    ],\n    'show'          => [\n        'is_closed' => 'Diskusia je uzavretá.',\n    ],\n    'tabs'          => [\n        'participants'  => 'Účastníci',\n    ],\n    'targets'       => [\n        'characters'    => 'Postavy',\n        'members'       => 'Členovia',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/cookieconsent.php",
    "content": "<?php\n\nreturn [\n    'allow'     => 'Súhlasím s cookies',\n    'dismiss'   => 'Zrušiť',\n    'header'    => 'Súhlas s cookies',\n    'link'      => 'Dozvedieť sa viac',\n    'message'   => 'Kanka používa cookies, aby ti umožnila čo najlepšie využívať našu webovú stránku.',\n    'policy'    => 'Podmienky cookies',\n    'reject'    => 'Nesúhlasím',\n];\n"
  },
  {
    "path": "lang/sk/creatures.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nová bytosť',\n    ],\n    'creatures'     => [],\n    'fields'        => [\n        'is_extinct'    => 'Vyhynuté',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_dead'       => 'Táto bytosť je mŕtva.',\n        'is_extinct'    => 'Táto bytosť vyhynula.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Bylinožravec, Morská, Mýtická',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/sk/crud.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'actions'           => 'Akcie',\n        'apply'             => 'Použiť',\n        'back'              => 'Naspäť',\n        'change'            => 'Zmeniť',\n        'close'             => 'Zavrieť',\n        'confirm'           => 'Potvrdiť',\n        'copy'              => 'Kopírovať',\n        'copy_mention'      => 'Kopírovať [ ] referenciu',\n        'copy_to_campaign'  => 'Kopírovať do kampane',\n        'disable'           => 'Deaktivovať',\n        'enable'            => 'Aktivovať',\n        'explore_view'      => 'Vnorené zobrazenie',\n        'export'            => 'Exportovať (PDF)',\n        'find_out_more'     => 'Dozvedieť sa viac',\n        'go_to'             => 'Prejsť na :name',\n        'help'              => 'Pomoc',\n        'json-export'       => 'Exportovať (json)',\n        'markdown-export'   => 'Export (Markdown)',\n        'move'              => 'Premiestniť',\n        'new'               => 'Nový',\n        'new_child'         => 'Nový podobjekt',\n        'new_post'          => 'Nová poznámka objektu',\n        'next'              => 'Ďalej',\n        'open'              => 'Otvoriť',\n        'print'             => 'Tlačiť',\n        'reorder'           => 'Preusporiadať',\n        'reset'             => 'Resetovať',\n        'transform'         => 'Transformovať',\n    ],\n    'add'               => 'Pridať',\n    'alerts'            => [\n        'copy_attribute'    => 'Referencia na atribút bola skopírovaná do tvojej schránky.',\n        'copy_invite'       => 'Link na prístup do kampane bol skopírovaný do tvojej schránky.',\n        'copy_mention'      => 'Rozšírená referencia na objekt bola skopírovaná do tvojej schránky.',\n    ],\n    'bulk'              => [\n        'actions'       => [\n            'edit'          => 'Hromadná úprava a kategórie',\n            'permissions'   => 'Zmeniť oprávnenia',\n        ],\n        'age'           => [\n            'helper'    => 'Môžeš použiť + a - pred číslom na úpravu veku o danú hodnotu.',\n        ],\n        'buttons'       => [\n            'label' => 'Pre vybrané',\n        ],\n        'edit'          => [\n            'locations' => 'Akcie s lokáciami',\n            'tagging'   => 'Akcie s kategóriami',\n            'tags'      => [\n                'add'       => 'Pridať',\n                'remove'    => 'Odstrániť',\n            ],\n            'title'     => 'Úprava viacerých objektov',\n        ],\n        'errors'        => [\n            'admin'     => 'Iba administrátori kampane vedia zmeniť súkromný štatút objektu.',\n            'general'   => 'Pri spracovávaní tvojej akcie došlo k chybe. Prosím, skús to opäť a kontaktuj nás, ak problém pretrváva. Hlásenie chyby: :hint.',\n        ],\n        'permissions'   => [\n            'fields'    => [\n                'override'  => 'Prepísať',\n            ],\n            'helpers'   => [\n                'override'  => 'Ak aktivované, oprávnenia vybratých objektov budú týmito prepísané. Ak deaktivované, vybrané oprávnenia budú pridané k predchádzajúcim.',\n            ],\n            'title'     => 'Zmeniť oprávnenia pre viaceré objekty',\n        ],\n    ],\n    'bulk_templates'    => [\n        'bulk_title'    => 'Uplatniť šablónu na viaceré objekty',\n    ],\n    'cancel'            => 'Zrušiť',\n    'click_modal'       => [],\n    'copy_to_campaign'  => [\n        'bulk_title'    => 'Kopírovať objekty do inej kampane',\n        'panel'         => 'Kopírovať',\n        'title'         => 'Kopírovať :name do inej kampane',\n    ],\n    'create'            => 'Vytvoriť',\n    'datagrid'          => [\n        'empty' => 'Zatiaľ je tu prázdno.',\n    ],\n    'delete_modal'      => [\n        'callout'       => 'Psst!',\n        'confirm'       => 'Potvrdiť odstránenie',\n        'permanent'     => 'Táto akcia je natrvalo.',\n        'recoverable'   => 'Objekty je možné obnoviť až do :day dní s :boosted-campaign.',\n        'title'         => 'Potvrdiť odstránenie',\n    ],\n    'destroy_many'      => [],\n    'dynamic'           => [\n        'permission'    => 'Nemáš dostatočné oprávnenia na vytvorenie objektu v module :module.',\n        'unknown'       => 'Nesprávny objekt modulu :module.',\n    ],\n    'edit'              => 'Upraviť',\n    'errors'            => [\n        'boosted_campaigns'     => 'Funkcionalita je dostupná iba pre :boosted.',\n        'unavailable_feature'   => 'Funkcionalita nedostupná',\n    ],\n    'events'            => [],\n    'fields'            => [\n        'calendar_date'     => 'Dátum',\n        'child'             => 'Dieťa',\n        'closed'            => 'Uzavretá',\n        'colour'            => 'Farba',\n        'copy_abilities'    => 'Kopírovať schopnosti',\n        'copy_inventory'    => 'Kopírovať inventár',\n        'copy_links'        => 'Kopírovať linky objektu',\n        'copy_permissions'  => 'Kopírovať oprávnenia (tieto majú prioritu pred nastavenými v karte oprávnení)',\n        'copy_posts'        => 'Kopírovať príspevky (inkl. ich oprávnení)',\n        'copy_reminders'    => 'Kopírovať pripomienky',\n        'creator'           => 'Autor',\n        'date_range'        => 'Obdobie',\n        'excerpt'           => 'Výpis',\n        'has_entity_files'  => 'So súbormi v objektoch',\n        'has_image'         => 'S obrázkom',\n        'has_posts'         => 'S príspevkami',\n        'header_image'      => 'Obrázok záhlavia',\n        'image'             => 'Obrázok',\n        'is_closed'         => 'Diskusia bude uzavretá a nebude možné do nej pridávaťnové správy.',\n        'is_private'        => 'Súkromný',\n        'is_private_v3'     => 'Zobraziť iba pre členov :admin-role role. Toto má prednosť pre ostatnými oprávneniami.',\n        'is_star'           => 'Pripnutý',\n        'locations'         => ':first v :second',\n        'name'              => 'Názov',\n        'parent'            => 'Rodič',\n        'position'          => 'Pozícia',\n        'replace_mentions'  => 'Zameniť referencie atribútov v zázname za tie nového objektu.',\n        'template'          => 'Šablóna',\n        'tooltip'           => 'Bublina',\n        'type'              => 'Typ',\n        'visibility'        => 'Viditeľnosť',\n        'word-count'        => 'Počet slov: :number',\n    ],\n    'files'             => [\n        'errors'    => [\n            'max'       => 'Max. počet (:max) súborov v tomto objekte dosiahnutý.',\n            'max_size'  => 'Kampaň dosiahla maximálnu kapacitu úložiska.',\n            'no_files'  => 'Žiadne súbory.',\n        ],\n        'hints'     => [\n            'limit'         => 'Do každého objektu môže byť nahratých maximálne :max súborov.',\n            'limitations'   => 'Podporované formáty: :formats. Max. veľkosť súboru: :size.',\n        ],\n    ],\n    'filter'            => 'Filter',\n    'filters'           => [\n        'all'               => 'Filter zobrazenia všetkých podobjektov',\n        'clear'             => 'Resetovať filter',\n        'copy_helper'       => 'Použi skopírované filtre v schránke pre hodnoty filtrov vo widgetoch na nástenke a rýchlych linkoch.',\n        'copy_to_clipboard' => 'Kopírovať filtre do schránky',\n        'direct'            => 'Filter zobrazenia iba priamych podobjektov',\n        'filtered'          => 'Zobraziť :count z :total :entity.',\n        'lists'             => [\n            'desktop'   => [\n                'all'       => 'Zobraziť všetky podradené (:count)',\n                'filtered'  => 'Zobraziť priamo podradené (:count)',\n            ],\n        ],\n        'mobile'            => [\n            'clear' => 'Vymazať',\n            'copy'  => 'Schránka',\n        ],\n        'options'           => [\n            'children'  => 'S podradenými',\n            'exclude'   => 'Vylúčiť',\n            'hide'      => 'Skryť',\n            'include'   => 'Zahrnúť',\n            'none'      => 'Žiadne',\n            'show'      => 'Zobraziť',\n        ],\n        'show'              => 'Zobraziť filtre',\n        'sorting'           => [\n            'asc'       => ':field vzostupne',\n            'desc'      => ':field zostupne',\n            'helper'    => 'Nastav poradie zoradenia výsledkov.',\n        ],\n        'title'             => 'Filter',\n    ],\n    'fix-this-issue'    => 'Odstrániť tento problém',\n    'forms'             => [\n        'actions'       => [\n            'calendar'  => 'Doplniť dátum',\n        ],\n        'copy_options'  => 'Kopírovať nastavenia',\n    ],\n    'helpers'           => [\n        'copy_options'  => 'Kopírovať nasledujúce prepojené prvky zo zdroja do nového objektu.',\n        'linking'       => 'Prepojenia s inými objektami',\n    ],\n    'hidden'            => 'Skrytý',\n    'hints'             => [\n        'calendar_date'         => 'Dátum umožňuje filtrovať zoznamy a zadať udalosť do vybraného kalendára.',\n        'image_dimension'       => 'Odporúčané rozlíšenie: :dimension pixelov.',\n        'image_limitations'     => 'Podporované formáty: :formats. Max. veľkosť súboru: :size.',\n        'image_recommendation'  => 'Odporúčané rozmery: :width x :height px.',\n        'is_star'               => 'Pripnuté objekty sa zobrazia v menu objektu.',\n        'tooltip'               => 'Nahradiť automaticky generovaný obsah bubliny týmto obsahom.',\n    ],\n    'history'           => [\n        'created_clean'         => 'Vytvorené :name :date',\n        'created_date_clean'    => 'Vytvorené :date',\n        'unknown'               => 'Neznámy',\n        'updated_clean'         => 'Posledná úprava :name :date',\n        'updated_date_clean'    => 'Posledná úprava :date',\n        'view'                  => 'Zobraziť protokol objektu',\n    ],\n    'image'             => [\n        'error' => 'Požadovaný obrázok nebolo možné stiahnuť. Zdá sa, že daná webová stránka nepovoľuje sťahovanie obrázkov (typické správanie Squarescape a DeviantArt) alebo že link už nie je platný.',\n    ],\n    'is_private'        => 'Tento objekt je súkromný a viditeľný len pre členov s rolou Admin.',\n    'keyboard-shortcut' => 'Klávesová skratka :code',\n    'navigation'        => [\n        'cancel'            => 'Zrušiť',\n        'or_cancel'         => 'alebo :cancel',\n        'skip_to_content'   => 'Preskočiť navigáciu',\n    ],\n    'new_entity'        => [],\n    'panels'            => [],\n    'permissions'       => [\n        'actions'           => [\n            'bulk'          => [\n                'add'       => 'Povoliť',\n                'deny'      => 'Zakázať',\n                'ignore'    => 'Ignorovať',\n                'remove'    => 'Odstrániť',\n            ],\n            'bulk_entity'   => [\n                'allow'     => 'Povoliť',\n                'deny'      => 'Zakázať',\n                'inherit'   => 'Zdediť',\n            ],\n            'delete'        => 'Zmazať',\n            'edit'          => 'Upraviť',\n            'toggle'        => 'Prepnúť',\n            'view'          => 'Zobraziť',\n        ],\n        'fields'            => [\n            'member'    => 'Člen',\n            'role'      => 'Rola',\n        ],\n        'helpers'           => [\n            'setup' => 'Pomocou tohto rozhrania môžeš presne nastaviť ako role a užívatelia pracujú s týmto objektom. :allow dovolí užívateľovi alebo role urobiť danú akciu. :deny im túto akciu zakáže. :inherit preberie nastavenie z roly užívateľa alebo z oprávnení hlavnej roly. Užívateľ s nastavením :allow môže danú akciu vykonať, aj keď má jeho rola nastavenie :deny.',\n        ],\n        'success'           => 'Oprávnenia uložené.',\n        'title'             => 'Oprávnenia',\n        'too_many_members'  => 'Táto kampaň má príliš veľa členov (> 10), aby boli zobrazení v tomto rozhraní. Prosím, použi tlačidlo Oprávnení na danom objekte, aby sa zobrazili detaily nastavenia oprávnení.',\n    ],\n    'placeholders'      => [\n        'calendar'      => 'Vybrať kalendár',\n        'entry'         => 'Použi @ s min. troma znakmi, ak chceš referencovať iný objekt v kampani.',\n        'fallback'      => 'Vybrať :module',\n        'gallery_image' => 'Vyber obrázok z galérie kampane',\n        'image_url'     => 'Obrázok je možné pridať aj nahratím cez URL.',\n        'journal'       => 'Vyber denník',\n        'location'      => 'Vyber miesto',\n        'multiple'      => 'Vyber jedno alebo viac',\n        'name'          => 'Názov objektu',\n        'organisation'  => 'Vyber organizáciu',\n        'parent'        => 'Vyber rodiča',\n        'tag'           => 'Vyber kategóriu',\n        'timeline'      => 'Vyber časovú os',\n        'type'          => 'Typ objektu',\n        'user'          => 'Vyber užívateľa',\n    ],\n    'relations'         => [],\n    'remove'            => 'Zmazať',\n    'reorder'           => [\n        'empty' => 'Neexistuje obsah na preusporiadanie.',\n    ],\n    'save'              => 'Uložiť',\n    'save_and_close'    => 'Uložiť a zavrieť',\n    'save_and_copy'     => 'Uložiť a kopírovať',\n    'save_and_new'      => 'Uložiť a nový',\n    'save_and_update'   => 'Uložiť a upraviť',\n    'save_and_view'     => 'Uložiť a zobraziť',\n    'search'            => 'Hľadať',\n    'select'            => 'Vybrať',\n    'tabs'              => [\n        'abilities'     => 'Schopnosti',\n        'inventory'     => 'Inventár',\n        'mentions'      => 'Referencie',\n        'overview'      => 'Prehľad',\n        'permissions'   => 'Oprávnenia',\n        'premium'       => 'Prémium',\n        'profile'       => 'Profil',\n        'reminders'     => 'Pripomienky',\n    ],\n    'titles'            => [\n        'editing'   => 'Upravuje sa :name',\n        'new'       => 'Nový :module',\n    ],\n    'tooltips'          => [],\n    'update'            => 'Upraviť',\n    'users'             => [\n        'unknown'   => 'Neznámy',\n    ],\n    'view'              => 'Zobraziť',\n    'visibilities'      => [\n        'admin'         => 'Admin',\n        'admin-self'    => 'Iba ja a Admin',\n        'all'           => 'Všetci',\n        'members'       => 'Členstvá kampane',\n        'self'          => 'Iba ja',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/dashboard.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'customise' => 'Upraviť nástenku',\n        'follow'    => 'Sledovať',\n        'join'      => 'Pridať sa',\n        'unfollow'  => 'Zrušiť sledovanie',\n    ],\n    'campaigns'     => [],\n    'dashboards'    => [\n        'actions'       => [\n            'edit'  => 'Upraviť názov a oprávnenia',\n            'new'   => 'Nová nástenka',\n        ],\n        'create'        => [\n            'success'   => 'Nová nástenka :name kampane vytvorená.',\n            'title'     => 'Nová nástenka kampane',\n        ],\n        'custom'        => [\n            'text'  => 'Aktuálne upravuješ nástenku :name kampane.',\n        ],\n        'default'       => [\n            'text'  => 'Aktuálne upravuješ štandardnú nástenku kampane.',\n            'title' => 'Štandardná nástenka',\n        ],\n        'delete'        => [\n            'success'   => 'Nástenka :name odstránená.',\n        ],\n        'fields'        => [\n            'copy_widgets'  => 'Kopírovať widgety',\n            'name'          => 'Názov nástenky',\n            'visibility'    => 'Viditeľnosť',\n        ],\n        'helpers'       => [\n            'copy_widgets'  => 'Duplikovať widgety z nástenky :name na túto novú.',\n        ],\n        'pitch'         => 'Vytvor viacero násteniek s vlastnými oprávneniami pre každú rolu v kampani.',\n        'placeholders'  => [\n            'name'  => 'Pomenovanie nástenky',\n        ],\n        'update'        => [\n            'success'   => 'Nástenka kampane :name aktualizovaná.',\n            'title'     => 'Aktualizovať nástenku kampane :name',\n        ],\n        'visibility'    => [\n            'default'   => 'Štandardná',\n            'none'      => 'Žiadna',\n            'visible'   => 'Viditeľná',\n        ],\n    ],\n    'helpers'       => [\n        'follow'    => 'Keď sleduješ nejakú kampaň, bude sa ti zobrazovať v prepínači kampaní (vpravo hore) pod tvojimi kampaňami.',\n        'join'      => 'Táto kampaň je otvorená pre nových členov. Klikni sem na pridanie sa do nej.',\n    ],\n    'notifications' => [],\n    'recent'        => [],\n    'settings'      => [],\n    'setup'         => [\n        'actions'   => [\n            'add'               => 'Pridať widget',\n            'back_to_dashboard' => 'Naspäť na nástenku',\n            'edit'              => 'Upraviť widget',\n            'new'               => 'Nový :type widget',\n        ],\n        'reorder'   => [\n            'helper'    => 'Potiahni ma, ak ma chceš presunúť',\n            'success'   => 'Widgety preskupené.',\n        ],\n        'title'     => 'Nastavenie nástenky kampane',\n        'tutorial'  => [\n            'blog'  => 'náš návod',\n            'text'  => 'Potrebuješ nastaviť nástenku tvojej kampane? Prečítaj si :blog, ktorý ti poskytne pomoc a inšpiráciu.',\n        ],\n    ],\n    'title'         => 'Nástenka',\n    'widgets'       => [\n        'advanced_options_boosted'  => 'Aktivovať viac možností ako napr. zobrazovania značiek s :boosted_campaign.',\n        'calendar'                  => [\n            'actions'           => [\n                'next'      => 'Zmeniť dátum na nasledujúci deň',\n                'previous'  => 'Zmeniť dátum na predošlý deň',\n            ],\n            'previous_events'   => 'Predošlé',\n            'upcoming_events'   => 'Nasledujúce',\n        ],\n        'campaign'                  => [\n            'helper'    => 'Tento widget zobrazuje záhlavie kampane. Tento widget je vždy zobrazovaný na štandardnej nástenke.',\n        ],\n        'create'                    => [\n            'success'   => 'Widget bol pridaný na nástenku.',\n            'title'     => 'Nový widget',\n        ],\n        'delete'                    => [\n            'success'   => 'Widget bol odstránený z nástenky.',\n        ],\n        'fields'                    => [\n            'class'             => 'Trieda CSS',\n            'dashboard'         => 'Nástenka',\n            'name'              => 'Vlastný názov widgetu',\n            'optional-entity'   => 'Link k objektu',\n            'order'             => 'Zoradenie',\n            'size'              => 'Veľkosť',\n            'width'             => 'Šírka',\n        ],\n        'helpers'                   => [\n            'class'     => 'Definuj vlastnú triedu CSS priradenú widgetu.',\n            'filters'   => 'Klikni sem, ak chceš spoznať možnosti filtrovania.',\n        ],\n        'orders'                    => [\n            'name_asc'  => 'Názov vzostupne',\n            'name_desc' => 'Názov zostupne',\n            'oldest'    => 'Najstaršie upravené',\n            'recent'    => 'Posledne upravené',\n        ],\n        'preview'                   => [\n            'displays'  => [\n                'expand'    => 'Rozšíriteľný záznam',\n                'full'      => 'Celý záznam',\n            ],\n            'fields'    => [\n                'display'   => 'Zobraziť',\n            ],\n        ],\n        'random'                    => [\n            'helpers'   => [\n                'name'  => 'Referencie na náhodný objekt môžeš vložiť pomocou {name}',\n            ],\n            'type'      => [\n                'all'   => 'Všetko',\n            ],\n        ],\n        'recent'                    => [\n            'advanced_filter'   => 'Rozšírený filter',\n            'advanced_filters'  => [\n                'mentionless'   => 'Neobsahuje referencie (Objekty, ktoré nereferencujú iné)',\n                'unmentioned'   => 'Nereferencované (Objekty, ktoré nie sú referencované v iných)',\n            ],\n            'all-entities'      => 'Všetky objekty',\n            'entity-header'     => 'Použiť záhlavie objektu ako obrázok',\n            'filters'           => 'Filtre',\n            'help'              => 'Zobraziť iba posledný upravený objekt, no zobraziť celý náhľad na objekt',\n            'helpers'           => [\n                'entity-header'     => 'Ak má daný objekt záhlavie (funkcia boostnutých kampaní), nastav tento widget, aby použil tento obrázok namiesto obrázku objektu.',\n                'show_attributes'   => 'Zobrazí pripnuté atribúty objektu pod záznamom.',\n                'show_members'      => 'Ak je objekt rod alebo organizácia, pod záznamom sa zobrazia členovia.',\n                'show_relations'    => 'Zobrazí pripnuté vzťahy objektu pod záznamom.',\n            ],\n            'show_attributes'   => 'Zobraziť pripnuté atribúty',\n            'show_members'      => 'Zobraziť členov',\n            'show_relations'    => 'Zobraziť pripnuté vzťahy',\n            'singular'          => 'Jednotlivý objekt',\n            'tags'              => 'Filtrovať zoznam nedávno upravených objektov podľa vybraných kategórií.',\n            'title'             => 'Nedávno upravené',\n        ],\n        'tabs'                      => [\n            'advanced'  => 'Rozšírené',\n            'setup'     => 'Nastavenie',\n        ],\n        'unmentioned'               => [\n            'title' => 'Objekty bez referencií',\n        ],\n        'update'                    => [\n            'success'   => 'Widget bol upravený.',\n        ],\n        'widths'                    => [\n            '0' => 'Automatická',\n            '12'=> 'Plná (100%)',\n            '3' => 'Mini (25%)',\n            '4' => 'Malá (33%)',\n            '6' => 'Polovičná (50%)',\n            '8' => 'Široká (66%)',\n            '9' => 'Veľká (75%)',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/sk/dashboards/widgets/welcome.php",
    "content": "<?php\n\nreturn [\n    'endings'   => [],\n    'focus'     => [\n        'text'  => 'Tu, ja som to!',\n        'title' => 'Ahoj',\n    ],\n    'intros'    => [\n        '1' => 'Spoznaj svoj nový domov pre tvorbu svetov, :user! Nastavili sme ti tvoju prvú kampaň a vložili do nej dve vzorové :characters a :locations. Tieto sú tiež viditeľné tu na nástenke kampane.',\n        '2' => 'Na začiatok klikni na veľké tlačidlo :new-entity (alebo stlač :letter na tvojej klávesnici) a klikni na :characters, aby vznikla tvoja prvá postava. Je to ozaj tak jednoduché! Všetky postavy, miesta a ďalšie :entities nájdeš na bočnom menu na ľavom boku stránky.',\n        '3' => 'Tu je našich Top 5 trikov pre používanie Kanky',\n    ],\n    'title'     => 'Vitaj v :kanka! 🎉',\n    'tricks'    => [\n        '1'         => 'Keď vytváraš popisy, nevpisuj do nej názvy prvkov v tvojej kampani. Namiesto toho napíš :code a následne tri písmená, aby vznikla :mention na iný objekt v kampani. Tieto referencie budú automaticky aktualizované, ak sa zmení ich názov.',\n        '2'         => 'Ak chceš upraviť názov, tému alebo obrázok kampane, klikni na :world v bočnom menu a následne na tlačidlo :edit.',\n        '3'         => 'Tajné informácie k objektom pridaj ako :posts namiesto zápisu do popisu v hlavnom textovom poli.',\n        '4'         => 'Pozvi do kampane tvojich priateľov a priateľky kliknutím na :world a :members. Tu si môžeš vytvoriť linky pre pozvánky.',\n        '5'         => 'Túto uvítaciu správu môžeš odstrániť a zobraziť namiesto nej inú informáciu na tejto stránke (ktorú nazývame nástenka). Nižšie nájdeš tlačidlo :button.',\n        'mention'   => 'referencia',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/datagrids.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'back_to'   => 'Späť na :name',\n    ],\n    'modes'     => [\n        'flatten'   => 'Prepnúť na ploché zobrazenie',\n        'grid'      => 'Prepnúť na zobrazenie v mriežke',\n        'nested'    => 'Prepnúť na vnorené zobrazenie',\n        'table'     => 'Prepnúť na tabuľkové zobrazenie',\n    ],\n    'tooltips'  => [\n        'nested'    => 'Tento objekt má deti. Klikni na obrázok pre ich zobrazenie.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/datetime.php",
    "content": "<?php\n\nreturn [\n    'day'           => 'dňom',\n    'days'          => 'dňami',\n    'elapsed_ago'   => 'pred :duration',\n    'hour'          => 'hodinou',\n    'hours'         => 'hodinami',\n    'just_now'      => 'teraz',\n    'minute'        => 'minútou',\n    'minutes'       => 'minútami',\n    'month'         => 'mesiacom',\n    'months'        => 'mesiacami',\n    'second'        => 'sekundou',\n    'seconds'       => 'sekundami',\n    'week'          => 'týždňom',\n    'weeks'         => 'týždňami',\n    'year'          => 'rokom',\n    'years'         => 'rokmi',\n];\n"
  },
  {
    "path": "lang/sk/default.php",
    "content": "<?php\n\nreturn [\n    'page_title'    => 'Názov strany',\n];\n"
  },
  {
    "path": "lang/sk/dice_roll_results.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'title' => 'Výsledok hodu kockami',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/dice_rolls.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nový hod kockami',\n    ],\n    'destroy'       => [\n        'dice_roll' => 'Hod kockami odstránený.',\n    ],\n    'edit'          => [],\n    'fields'        => [\n        'created_at'    => 'Hodený',\n        'parameters'    => 'Parametre',\n        'results'       => 'Výsledky',\n        'rolls'         => 'Hody',\n    ],\n    'hints'         => [\n        'parameters'    => 'Aké možnosti kociek mám?',\n    ],\n    'index'         => [\n        'actions'   => [\n            'results'   => 'Výsledky',\n        ],\n    ],\n    'placeholders'  => [\n        'name'          => 'Názov hodu kockami',\n        'parameters'    => '4d6+3',\n    ],\n    'results'       => [\n        'actions'   => [\n            'add'   => 'Hod',\n        ],\n        'error'     => 'Hod kockami neúspešný. Nie je možné spracovať parametre.',\n        'fields'    => [\n            'creator'   => 'Vytvorené',\n            'date'      => 'Dátum',\n            'result'    => 'Výsledok',\n        ],\n        'hint'      => 'Všetky hody vykonané s touto šablónou hodu kockami.',\n        'success'   => 'Kocky boli hodené.',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'results'   => 'Výsledky',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/sk/emails/activity/password.php",
    "content": "<?php\n\nreturn [\n    'first' => 'Tvoje heslo do konta v Kanke bolo zmenené.',\n    'help'  => 'Ak sa tak nestalo z tvojej vôle, prosím kontaktuj nás na :email.',\n    'title' => 'Heslo bolo zmenené',\n];\n"
  },
  {
    "path": "lang/sk/emails/purge/first.php",
    "content": "<?php\n\nreturn [\n    'assure'            => 'Ak svoje konto používaš pravidelne, nemáš sa čoho obávať, odstraňujeme iba kontá a kampane, ktoré sa už aktívne nevyužívajú.',\n    'help'              => 'Potrebuješ pomôcť s používaním Kanky? Pridaj sa k nám na našom :discord alebo sa nám ozvi na :email',\n    'intro_account'     => 'Obraciame sa na teba, lebo tvoje konto bude zmazané o :amount dní, keďže bolo posledne použité pred :duration months.',\n    'intro_campaigns'   => 'Obraciame sa na teba, lebo tvoje konto a nasledujúce kampane budú zmazané o :amount dní, keďže bolo posledne použité pred :duration months.',\n    'keep'              => 'Ak chceš ponechať tvoje konto aktívne, prihlás sa doň počas nasledujúcich :amount dní.',\n    'title'             => 'Tvoje konto v Kanke bude zmazané o :amount dní.',\n    'warning'           => [\n        'account'   => 'Po tom, čo sa tak udeje, budú všetky údaje spojené s tvojím kontom :email navždy zmazané.',\n        'campaigns' => 'Po tom, čo sa tak udeje, budú všetky údaje spojené s tvojím kontom :email, ako aj nasledujúce kampane, navždy zmazané.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/emails/purge/second.php",
    "content": "<?php\n\nreturn [\n    'intro' => 'Toto je posledná pripomienka, že tvoje konto v Kanke s e-mailom :email bude zmazaný o :amount dní, keďže bol posledne použitý pred :duration mesiacmi.',\n    'title' => 'Posledné varovanie: Tvoje konto v Kanke bude zmazaný za :amount dní.',\n];\n"
  },
  {
    "path": "lang/sk/emails/subscriptions/expiring.php",
    "content": "<?php\n\nreturn [\n    'action'    => 'aktualizuj si údaje o platobnej karte',\n    'primary'   => 'Toto je automatické varovanie, že platnosť tvojej :brand **** :last čoskoro vyprší.',\n    'title'     => 'Platnosť platobnej karty čoskoro vyprší',\n    'valid'     => 'Ak si praješ naďalej platiť predplatné, prosím :action.',\n];\n"
  },
  {
    "path": "lang/sk/emails/subscriptions/upcoming.php",
    "content": "<?php\n\nreturn [\n    'cancel'    => 'Ak si nežiadaš predĺžiť predplatné, prosím prihlás sa do Tvojho konta v Kanke a :link.',\n    'closing'   => 'S pozdravom,',\n    'dear'      => 'Ahoj :name,',\n    'link'      => 'zruš Tvoje predplatné',\n    'notice'    => 'Dôležité oznámenie o predĺžení predplatného:',\n    'primary'   => 'Toto je automatická pripomienka, že :date automaticky stiahneme z Tvojej :brand **** :last poplatok za predplatné Kanky.',\n    'title'     => 'Ročný poplatok za Tvoje predplatné Kanky',\n    'valid'     => 'Prosím zabezpeč, aby Tvoja platobná karta bola platná v deň realizácie platby.',\n];\n"
  },
  {
    "path": "lang/sk/emails/subscriptions/validation.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Overenie e-mailu konta v Kanke',\n];\n"
  },
  {
    "path": "lang/sk/emails/validation.php",
    "content": "<?php\n\nreturn [\n    'error'     => 'Overenie neúspešné, prosím skús to opäť.',\n    'modal'     => 'Overený e-mail je potrebný kvôli predplatnému. Prosím, skontroluj si svoju elektronickú poštovú schránku a potvrď svoj e-mail pomocou linku predtým, ako budeš ďalej pokračovať.',\n    'success'   => 'E-mail úspešne overený.',\n];\n"
  },
  {
    "path": "lang/sk/emails/welcome/2024.php",
    "content": "<?php\n\nreturn [\n    'closing'   => 'Veľa zdaru pri tvorbe svetov a ďakujeme za to, že ťa na tejto ceste môžeme sprevádzať,',\n    'header'    => 'Vitaj na najlepšom mieste pre vytváranie tvojej kampane, :name!',\n    'lead_1'    => 'Kanka bola vytvorená nadšencami rolových hier, ktorí si priali jednoduchý a zdieľaný prístup k tvorbe svetov bez nutnosti robiť kompromisy ohľadom funkčnosti.',\n    'lead_2'    => 'Z tohto vzišla Kanka. Sme tu, aby sme ti pomohli pri organizácii tvojej kampane, nech sa môžeš sústrediť na prebudenie tvojho sveta k životu.',\n    'ps'        => 'P.S. Ak sa chceš s nami spojiť, nájdeš nás na :discord alebo na :email.',\n    'what_1'    => 'Na uľahčenie vstupu do systému, sme vytvorili tvoju prvú kampaň a pridali do nej niekoľko postáv a miest. Alebo môžeš :start, ak chceš.',\n    'what_2'    => 'Taktiež sa ti budú hodiť nasledujúce zdroje informácií:',\n    'what_3'    => 'Naša :kb, ak máš základné otázky ohľadom funkcií Kanky alebo tvojho konta.',\n    'what_4'    => 'V :doc nájdeš všetko vo väčšej hĺbke.',\n    'what_5'    => 'A nakoniec, :campaigns sú ukážkou, čo iní a iné vytvorili v Kanke.',\n    'what_new'  => 'vytvoriť svoju vlastnú',\n    'what_now'  => 'Čo teraz?',\n    'why'       => 'Tento e-mail sme ti zaslali, pretože máš konto na našom webe.',\n];\n"
  },
  {
    "path": "lang/sk/emails/welcome.php",
    "content": "<?php\n\nreturn [\n    '2023'              => [\n        'basics'    => [\n            'text_1'    => 'Nástroj tak rôznorodý ako Kanka môže byť na prvý pohľad príliš komplexný. Naša :kb ti poskytne odpovede na základné otázky a pre ďalšiu pomoc sa môžeš obrátiť na našu :doc.',\n            'title'     => 'Základné info',\n        ],\n        'chat'      => [\n            'text_1'    => 'Radi počúvame názory a pripomienky nášho užívateľstva. Sme aktívni na :discor, kde nájdeš mnohé aktívne osoby, tím moderátorov ale aj zakladateľov Kanky, ktorí zodpovedajú otázky, ktoré môžeš mať. Taktiež nám môžeš napísať e-mail na :email.',\n            'title'     => 'Chceš si pokecať?',\n        ],\n        'intro'     => [\n            'header'    => 'Vitaj v najlepšej komunite pre tvorbu svetov, :name!',\n            'link'      => 'Vstúp do tvojho sveta!',\n            'text_1'    => 'Pozdrav tvoju nový domov pre tvorbu svetov, :name! Komunitu nosíme v našej DNA a sme radi, že si jej súčasťou. Kanka je dieťa nadšených RPG hráčov, ktorí veria v zjednodušený a zdieľaný spôsob prístupu k tvorbe svetov, bez kompromisov ohľadom potrebných funkcionalít.',\n            'text_2'    => 'Nastavili sme tvoju prvú kampaň a pridali do nej vzorové postavy a miesta, aby sme ti uľahčili začiatočnú prácu.',\n        ],\n        'preview'   => 'Buď súčasťou najlepšej komunity tvorby svetov, :name!',\n    ],\n    'header'            => 'Vitaj v Kanke, :name!',\n    'header_sub'        => 'Gratulujeme, prvé kroky vo vytváraní vlastného sveta v :kanka máš za sebou!',\n    'pricing'           => 'Cenník',\n    'section_1'         => 'Čo ďalej?',\n    'section_11'        => 'Vytvor svoj svet,',\n    'section_2'         => 'Najdôležitejší zdroj informácií je :discord, kde nájdeš veľa nadšených užívateľov a užívateľky, pomocný tím, zakladateľa Kanky, ktorí ti zodpovedajú tvoje otázky.',\n    'section_4'         => 'Na našom :youtube nájdeš videá o základnom ovládaní Kanky. Aj keď nejdú príliš do hĺbky, nové videá sú neustále pridávané.',\n    'section_4_v2'      => 'Naša :knowledge-base pokrýva základné otázky, ktoré môžeš mať, a pre detailnejšiu pomoc je možné navštíviť stránku s našou :documentation!',\n    'section_6'         => 'Kontaktuj nás',\n    'section_7'         => 'Ak nájdené odpovede neboli postačujúce alebo sa s nami proste chceš spojiť, nájdeš nás na :facebook alebo nám napíš :email. Sme malý tím dvoch priateľov, ale snažíme sa odpovedať na každý e-mail, ktorý dostaneme, takže nech ťa to neodradí!',\n    'section_8'         => 'Ešte jedna vec nakoniec',\n    'section_9_v2'      => 'Robíme všetko preto, aby základné funkcie Kanky boli stále voľne dostupné, a tak to aj navždy zostane. Ak nás však chceš v tomto projekte podporiť, môžeš si zakúpiť predplatné, a získať prístup k ďalším funkciám, ako aj našu večnú vďaku! Viac sa dozvieš na stránke :pricing .',\n    'social_account'    => 'Ak máš problémy pri prihlásení do tvojho konta: chceme ťa len informovať, že používaš prihlásenie cez :provider - zmeniť si to vieš v nastaveniach konta.',\n    'title'             => 'Začíname s Kankou',\n];\n"
  },
  {
    "path": "lang/sk/entities/abilities.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'add'   => 'Pridať schopnosť',\n        'reset' => 'Resetovať vyčerpania schopností',\n        'sync'  => 'Pridať z rás',\n    ],\n    'charges'   => [\n        'left'  => 'Ostáva :amount',\n    ],\n    'create'    => [\n        'success'           => 'Schopnosť :ability pridaná k :entity.',\n        'success_multiple'  => 'Schopnosti :abilities boli pridané k :entity.',\n        'title'             => 'Pridať schopnosť k :name',\n    ],\n    'fields'    => [\n        'note'      => 'Poznámka',\n        'position'  => 'Pozícia',\n    ],\n    'groups'    => [\n        'unorganised'   => 'Nezorganizované',\n    ],\n    'helpers'   => [\n        'note'      => 'Referencie na iné objekty môžeš vytvoriť pomocou rozšírených referencií (ex :code) a atribútov objektov (ex :attr) v tomto poli.',\n        'recharge'  => 'Resetuje všetky zmeny schopností, ktoré boli použité.',\n        'sync'      => 'Importuje schopnosti, ktoré sú definované pri rase postavy.',\n    ],\n    'import'    => [\n        'errors'    => [\n            'no_race'       => 'Táto postava je bez rasy.',\n            'not_character' => 'Tento objekt nie je postava.',\n        ],\n        'success'   => '{1} :count schopnosť importovaná.|[2,4] :count schopnosti importované.|[5,*] :count schopností importovaných.',\n    ],\n    'recharge'  => [\n        'success'   => 'Všetky zmeny boli resetované.',\n    ],\n    'reorder'   => [\n        'parentless'    => 'Bez nadradenej',\n        'success'       => 'Schopnosti úspešne preskupené.',\n    ],\n    'show'      => [\n        'helper'    => 'Pridaj schopnosti k tomuto objektu. Môžeš upraviť ich viditeľnosť alebo ich odstrániť. Schopnosti patriace pod nadradenú schopnosť sa zobrazia pod spoločným tlačidlom.',\n        'reorder'   => 'Preskupiť schopnosti',\n        'title'     => 'Schopnosti objektu :name',\n    ],\n    'types'     => [\n        'unorganised'   => 'Schopnosti sú zoskupené podľa nadradených polí a zvyšné sa zobrazujú tu.',\n    ],\n    'update'    => [\n        'success'   => 'Objektová schopnosť :ability bola aktualizovaná.',\n        'title'     => 'Schopnosť objektu :name',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/actions.php",
    "content": "<?php\n\nreturn [\n    'templates' => [\n        'set'       => 'Nastaviť ako šablónu',\n        'success'   => [\n            'set'   => 'Objekt :name nastavený ako šablóna.',\n            'unset' => 'Objekt :name už nie je nastavený ako šablóna.',\n        ],\n        'toggle'    => 'Prepnutý stav šablóny.',\n        'unset'     => 'Odstrániť šablónu',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/aliases.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Pridať alias',\n    ],\n    'create'        => [\n        'success'   => 'Alias :name pridaný k :entity.',\n        'title'     => 'Pridať alias k :name',\n    ],\n    'destroy'       => [\n        'success'   => 'Alias :name odstránený.',\n    ],\n    'fields'        => [\n        'name'  => 'Názov',\n    ],\n    'helpers'       => [\n        'primary'   => 'Nastavením jedného alebo viacerých aliasov objektu ho umožňuje nájsť v rámci celkového hľadania (horná lišta) a cez referencie.',\n    ],\n    'pitch'         => 'Vytvor prezývky pre tento objekt, aby hľadanie a referencovanie bolo jednoduchšie.',\n    'placeholders'  => [\n        'name'  => 'Nový alias',\n    ],\n    'unboosted'     => [],\n    'update'        => [\n        'success'   => 'Alias :name aktualizovaný pre :entity.',\n        'title'     => 'Aktualizovať alias pre :name',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/assets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'alias' => 'Alias',\n        'file'  => 'Súbor',\n        'link'  => 'Link',\n    ],\n    'copy_alias'    => [\n        'success'   => 'Referencia na prezývku skopírovaná do schránky.',\n    ],\n    'show'          => [\n        'title' => 'Materiály pre :name',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/attributes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'load'          => 'Nahrať',\n        'manage'        => 'Spravovať',\n        'more'          => 'Ďalšie možnosti',\n        'remove_all'    => 'Odstrániť všetko',\n        'save_and_edit' => 'Použiť a Upraviť',\n        'save_and_story'=> 'Použiť a Zobraziť',\n        'show_hidden'   => 'Zobraziť skryté atribúty',\n        'toggle_privacy'=> 'Súkromný/Verejný',\n    ],\n    'errors'        => [\n        'loop'                  => 'Vo výpočte atribútu sa vyskytuje nekonečná slučka!',\n        'no_attribute_selected' => 'Vyber najprv jeden alebo viac atribútov.',\n        'too_many_v2'           => 'Dosiahnuté max. počet polí (:count/:max). Zmaž najprv niektoré z atribútov pred pridaním nových.',\n    ],\n    'fields'        => [\n        'community_templates'   => 'Komunitné šablóny',\n        'is_private'            => 'Súkromné atribúty',\n        'is_star'               => 'Pripnutý',\n        'preferences'           => 'Preferencie',\n        'value'                 => 'Hodnota',\n    ],\n    'filters'       => [\n        'name'  => 'Názov atribútu',\n        'value' => 'Hodnota atribútu',\n    ],\n    'helpers'       => [\n        'delete_all'    => 'Naozaj chceš odstrániť všetky atribúty tohto objektu?',\n        'is_private'    => 'Povolí iba osobám s :admin-role rolou, aby videli atribúty tohto objektu.',\n        'setup'         => 'Prvky ako HP alebo Inteligenciu nejakého objektu s atribútmi je možné referencovať. Atribúty pridáš ručne kliknutím na tlačidlo :manage alebo aplikovaním niektorej zo šablón atribútov.',\n    ],\n    'hints'         => [],\n    'index'         => [\n        'success'   => 'Atribúty pre :entity upravené.',\n        'title'     => 'Atribúty pre :name',\n    ],\n    'labels'        => [\n        'checkbox'  => 'Názov zaškrtávacieho políčka',\n        'name'      => 'Názov atribútu',\n        'section'   => 'Názov sekcie',\n        'value'     => 'Hodnota atribútu',\n    ],\n    'live'          => [\n        'success'   => 'Atribút :attribute aktualizovaný.',\n        'title'     => 'Aktualizácia :attribute',\n    ],\n    'placeholders'  => [\n        'attribute' => 'Počet dobytí, úroveň obtiažnosti výzvy, iniciatíva, obyvateľstvo',\n        'block'     => 'Názov bloku',\n        'checkbox'  => 'Názov zaškrtávacieho políčka',\n        'icon'      => [\n            'class' => 'Trieda FontAwesome alebo RPG Awesome: fas fa-users',\n            'name'  => 'Názov symbolu',\n        ],\n        'number'    => 'Názov čísla',\n        'random'    => [\n            'name'  => 'Názov atribútu',\n            'value' => '1-100 alebo zoznam hodnôt oddelených čiarkou',\n        ],\n        'section'   => 'Názov sekcie',\n        'value'     => 'Hodnota atribútu',\n    ],\n    'ranges'        => [\n        'text'  => 'Dostupné možnosti :options',\n    ],\n    'sections'      => [\n        'unorganised'   => 'Nezorganizované',\n    ],\n    'show'          => [\n        'hidden'    => 'Skryté atribúty',\n        'title'     => 'Atribúty :name',\n    ],\n    'template'      => [\n        'load'      => [\n            'success'   => 'Šablóna nahraná',\n            'title'     => 'Nahrať zo šablóny',\n        ],\n        'success'   => 'Šablóna atribútov :name použitá na :entity',\n        'title'     => 'Použiť šablónu atribútov na :name',\n    ],\n    'title'         => 'Atribúty',\n    'toasts'        => [\n        'bulk_deleted'  => 'Atribúty odstránené',\n        'bulk_privacy'  => 'Súkromie atribútov prepnuté',\n        'lock'          => 'Atribút uzamknutý',\n        'pin'           => 'Atribút pripnutý',\n        'unlock'        => 'Atribút odomknutý',\n        'unpin'         => 'Atribút odopnutý',\n    ],\n    'tutorials'     => [],\n    'types'         => [\n        'attribute' => 'Atribút',\n        'block'     => 'Blok',\n        'checkbox'  => 'Zaškrtávacie políčko',\n        'icon'      => 'Symbol',\n        'number'    => 'Číslo',\n        'random'    => 'Náhodne',\n        'section'   => 'Sekcia',\n        'text'      => 'Viacriadkový text',\n    ],\n    'update'        => [\n        'success'   => 'Atribúty pre :entity aktualizované.',\n    ],\n    'visibility'    => [\n        'entry'     => 'Atribút je zobrazený v menu objektu.',\n        'private'   => 'Atribút viditeľný len pre členov s rolou Admin.',\n        'public'    => 'Atribút viditeľný pre všetkých členov.',\n        'tab'       => 'Atribút je zobrazený len v karte atribútov.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/children.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Podobjekty',\n];\n"
  },
  {
    "path": "lang/sk/entities/events.php",
    "content": "<?php\n\nreturn [\n    'fields'    => [\n        'type'  => 'Typ udalosti',\n    ],\n    'helpers'   => [\n        'characters'    => 'Ak nastavíš typ ako dátum narodenia alebo smrti, systém vypočíta automaticky pre túto postavu jej vek. :more',\n        'founding'      => 'Nastavením typu ako :type sa automaticky prepočíta vek objektu od jeho založenia.',\n    ],\n    'show'      => [\n        'actions'   => [\n            'add'   => 'Pridať pripomienku',\n        ],\n        'title'     => 'Pripomienky :name',\n    ],\n    'types'     => [\n        'birth'     => 'Narodenie',\n        'birthday'  => 'Narodeniny',\n        'death'     => 'Smrť',\n        'founded'   => 'Založenie',\n        'primary'   => 'Primárny',\n    ],\n    'years-ago' => 'pred {1} :count rokom|[2,*] :count rokmi',\n];\n"
  },
  {
    "path": "lang/sk/entities/files.php",
    "content": "<?php\n\nreturn [\n    'call-to-action'    => [],\n    'create'            => [\n        'success_plural'    => '{1} Súbor :name pridaný.|[2,4] :count súbory pridané.|[5,*] :count súborov pridaných.',\n        'title'             => 'Nový súbor pre :entity',\n    ],\n    'destroy'           => [\n        'success'   => 'Súbor :file odstránený.',\n    ],\n    'fields'            => [\n        'file'  => 'Súbor',\n        'files' => 'Súbory',\n        'name'  => 'Meno súboru',\n    ],\n    'max'               => [\n        'title' => 'Limit dosiahnutý',\n    ],\n    'update'            => [\n        'success'   => 'Súbor :file aktualizovaný.',\n        'title'     => 'Aktualizovať súbor objektu',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/image.php",
    "content": "<?php\n\nreturn [\n    'actions'               => [\n        'change_focus'      => 'Zmeniť stredobod záujmu',\n        'change_visibility' => 'Zmeniť viditeľnosť',\n        'replace_image'     => 'Vymeniť obrázok',\n        'save-replace'      => 'Vymeniť obrázok',\n        'save_focus'        => 'Uložiť stredobod záujmu',\n        'view'              => 'Zobraziť obrázok',\n    ],\n    'call-to-action'        => 'Kliknutím na obrázok objektu nastavíš jeho stredobod záujmu namiesto automatického odhadu.',\n    'focus'                 => [\n        'breadcrumb'    => 'Stredobod záujmu na obrázku',\n        'helper'        => 'Klikni na obrázok pre umiestnenie stredobodu záujmu. Už umiestnený bod odstrániš kliknutím naň.',\n        'panel_title'   => 'Stredobod záujmu na obrázku',\n        'success'       => 'Stredobod záujmu aktualizovaný.',\n        'title'         => 'Stredobod záujmu objektu :name',\n        'unboosted'     => 'Nastavenie stredobodu záujmu na obrázku je rezervované pre :boosted_campaigns.',\n        'warning'       => 'Stredobod záujmu pre obrázky v :gallery je zdieľaný všetkými objektami, ktoré používajú rovnaký obrázok.',\n    ],\n    'gallery_permissions'   => [\n        'admin'     => 'Tento obrázok galérie je iba viditeľný pre členstvo kampane s :admin rolou.',\n        'adminself' => 'Tento obrázok galérie je viditeľný iba pre :creator a členstvo kampane s :admin rolou.',\n        'member'    => 'Tento obrázok galérie je viditeľný iba pre členstvo tejto kampane.',\n        'self'      => 'Tento obrázok galérie je viditeľný iba pre teba.',\n    ],\n    'replace'               => [\n        'breadcrumb'    => 'Výmena obrázku',\n        'panel_title'   => 'Výmena obrázku objektu',\n        'success'       => 'Obrázok vymenený.',\n        'title'         => 'Výmena obrázku objektu :name',\n    ],\n    'visibility'            => [\n        'helper'    => 'Zmeň viditeľnosť obrázku v galérii tým, že nastavíš, kto ho môže vidieť.',\n        'updated'   => 'Viditeľnosť obrázku aktualizovaná.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/inventories.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'copy_inventory'    => 'Kopírovať inventár',\n    ],\n    'copy'              => [],\n    'create'            => [\n        'success'       => 'Predmet :item pridaný do :entity.',\n        'success_bulk'  => '{0} Žiaden predmet nebol pridaný do :entity.|{1} Bol pridaný :count predmet do :entity.|[2,4] Boli pridané :count predmety do :entity.|[5,*] Bolo pridaných :count predmetov do :entity.',\n        'title'         => 'Pridaj Predmet ku :name',\n    ],\n    'default_position'  => 'Bez zoradenia',\n    'destroy'           => [\n        'success'           => 'Predmet :name odstránený z :entity.',\n        'success_position'  => 'Predmet na :position odstránený z :entity.',\n    ],\n    'fields'            => [\n        'amount'                => 'Počet',\n        'copy_entity_entry_v2'  => 'Použiť záznam objektu',\n        'description'           => 'Popis',\n        'is_equipped'           => 'Vybavený',\n        'name'                  => 'Názov',\n        'position'              => 'Umiestnenie',\n        'qty'                   => 'Množ.',\n    ],\n    'helpers'           => [\n        'amount'                => 'Počet predmetov',\n        'copy_entity_entry_v2'  => 'Zobraziť záznam objektu namiesto vlastného popisu.',\n        'description'           => 'Pridať vlastný popis k predmetu',\n        'is_equipped'           => 'Označiť predmety ako vybavené.',\n        'name'                  => 'Zadaj názov predmetu. Názov je povinný, ak nie je zvolený žiaden objekt.',\n    ],\n    'placeholders'      => [\n        'amount'        => 'Hocijaké množstvo',\n        'description'   => 'Použitý, Zničený, Zžitý',\n        'name'          => 'Potrebný, ak nie je zvolený žiaden objekt',\n        'position'      => 'V rukách, V ruksaku, V sklade, V banke',\n    ],\n    'show'              => [\n        'helper'    => 'Objekty môžu mať priradené Predmety, čím sa vytvára ich Inventár.',\n        'title'     => 'Objekt :name Inventár',\n        'unsorted'  => 'Nezoradené',\n    ],\n    'tooltips'          => [\n        'equipped'  => 'Predmet je vo vybavení.',\n    ],\n    'tutorials'         => [],\n    'update'            => [\n        'success'   => 'Predmet :item pre :entity upravený.',\n        'title'     => 'Uprav Predmet :name',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/links.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'add'   => 'Pridať link',\n    ],\n    'call-to-action'    => 'Pridaj linky k externým zdrojom k tomuto objektu, napr. DnDBeyond a tieto sa objavia priamo v prehľade objektu.',\n    'create'            => [\n        'success'   => 'Link :name pridaný k :entity.',\n        'title'     => 'Pridať link k :name',\n    ],\n    'destroy'           => [\n        'success'   => 'Link :name odstránený z :entity.',\n    ],\n    'fields'            => [\n        'icon'      => 'Symbol',\n        'name'      => 'Názov',\n        'position'  => 'Pozícia',\n        'url'       => 'URL',\n    ],\n    'go'                => [\n        'actions'       => [\n            'confirm'   => 'Áno',\n            'trust'     => 'Nepýtaj sa ma znova',\n        ],\n        'description'   => 'Tento link ťa premiestni na :link. Ozaj sa tam chceš vybrať?',\n        'title'         => 'Opúšťam Kanku',\n    ],\n    'helpers'           => [\n        'icon'      => 'Môžeš zmeniť zobrazovaný symbol linku. Použi jeden z voľne dostupných symbolov :fontawesome, alebo ponechaj pole prázdne pre štandardný symbol.',\n        'parent'    => 'Zobrazí tento rýchly link po prvku v bočnom menu, namiesto v sekcii pre rýchle linky bočného menu.',\n    ],\n    'placeholders'      => [\n        'name'  => 'DNDBeyond',\n        'url'   => 'https://dndbeyond.com/character-url',\n    ],\n    'show'              => [\n        'helper'    => 'Boostované kampane môžu pridávať k objektom linky, ktoré smerujú na externé webstránky.',\n        'title'     => 'Linky pre :name',\n    ],\n    'unboosted'         => [],\n    'update'            => [\n        'success'   => 'Link :name aktualizovaný pre :entity.',\n        'title'     => 'Aktualizovať link pre :name',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/logs.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'create'        => 'Vytvoriť',\n        'create_post'   => 'Vytvorená správa \":post\"',\n        'delete'        => 'Zmazať',\n        'delete_post'   => 'Zmazaná správa',\n        'reorder_post'  => 'Preusporiadané správy',\n        'restore'       => 'Obnoviť',\n        'reveal'        => 'Zobraziť detaily',\n        'update'        => 'Aktualizovať',\n        'update_post'   => 'Aktualizovaná správa \":post\"',\n        'view'          => 'Zobraziť zmeny',\n    ],\n    'call-to-action'    => 'Log s plným záznamom zmien za posledných :amount dní je dostupný pre superboosted kampane.',\n    'fields'            => [\n        'action'    => 'Akcia',\n        'date'      => 'Dátum',\n    ],\n    'filters'           => [\n        'keywords'  => 'Kľúčové slová',\n    ],\n    'impersonated'      => 'Vydáva sa za :name',\n    'none'              => 'Žiadne',\n    'show'              => [\n        'title' => 'Objekt :name Log',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/map-points.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Tento objekt je označený na nasledujúcich mapách...',\n    'title'     => ':name Miesta na mape',\n];\n"
  },
  {
    "path": "lang/sk/entities/mentions.php",
    "content": "<?php\n\nreturn [\n    'fields'            => [\n        'element'   => 'Prvok',\n        'type'      => 'Typ',\n    ],\n    'helper'            => 'Toto je zoznam objektov, ktoré v položke \"Záznam\" referencujú tento objekt.',\n    'mentioned_in_v2'   => 'Tento objekt je referencovaný v :count objektoch, poznámkach objektov alebo kampaniach. :more',\n    'see_more'          => 'Zobraziť detaily',\n    'show'              => [\n        'title' => 'Referencie objektu :name',\n    ],\n    'title'             => 'Referencovaný objekt',\n];\n"
  },
  {
    "path": "lang/sk/entities/move.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'copy'  => 'Kopírovať',\n    ],\n    'errors'        => [\n        'permission'        => 'V tejto kampani nemáš povolenie na vytváranie objektov tohto typu.',\n        'permission_update' => 'Na presun tohto objektu nemáš oprávnenie.',\n        'same_campaign'     => 'Pre presun musíš zvoliť inú kampaň, kam tento objekt chceš presunúť.',\n        'unknown_campaign'  => 'Neznáma kampaň.',\n    ],\n    'fields'        => [\n        'campaign'      => 'Cieľová kampaň',\n        'copy'          => 'Vytvoriť kópiu',\n        'select_one'    => 'Vyber kampaň',\n    ],\n    'helpers'       => [\n        'copy'  => 'Vytvoriť kópiu objektu v cieľovej kampani.',\n    ],\n    'panel'         => [\n        'description'           => 'Vyber kampaň, do ktorej chceš tento objekt presunúť alebo skopírovať.',\n        'description_bulk_copy' => 'Vyber kampaň, do ktorej chceš vybrané objekty skopírovať.',\n        'title'                 => 'Presun alebo kópia objektu do inej kampane',\n    ],\n    'success'       => 'Objekt :name presunutý.',\n    'success_copy'  => 'Objekt :name skopírovaný.',\n    'title'         => 'Presun :name',\n    'warnings'      => [\n        'custom'    => 'Tento objekt nepatrí štandardnému modulu, ale vlastnému typu objektu :module. V cieľovej kampani bude vytvorený vo forme Poznámky.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/notes.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'       => 'Nová Poznámka',\n        'add_role'  => 'Pridať rolu',\n        'add_user'  => 'Pridať užívateľa',\n    ],\n    'collapsed'     => [\n        'closed'    => 'Poznámka je zbalená na jej hlavičku',\n        'open'      => 'Poznámka je rozbalená',\n    ],\n    'copy_mention'  => [\n        'copy'              => 'Kopírovať rozšírenú referenciu',\n        'copy_with_name'    => 'Kopírovať rozšírenú referenciu s názvom príspevku',\n        'success'           => 'Rozšírená referencia bola skopírovaná do schránky.',\n    ],\n    'create'        => [\n        'success'   => 'Poznámka :name pridaná k objektu :entity.',\n    ],\n    'destroy'       => [\n        'success'   => 'Poznámka :name odstránená z :entity.',\n    ],\n    'edit'          => [\n        'success'   => 'Poznámka :name pre :entity upravená.',\n    ],\n    'fields'        => [\n        'creator'   => 'Autor/ka',\n        'display'   => 'Displej',\n        'name'      => 'Názov',\n        'position'  => 'Pozícia',\n    ],\n    'footer'        => [\n        'created'   => 'Vytvorené :user dňa :date',\n        'updated'   => 'Aktualizované :used dňa :date',\n    ],\n    'hint'          => 'Informácie, ktoré nepasujú do štandardných polí objektu alebo by mali byť súkromné, môžu byť pridané v podobe poznámok.',\n    'hints'         => [\n        'reorder'   => 'Môžeš zmeniť poradie poznámok daného objektu kliknutím na ikonku :icon vedľa Prehľadu v menu objektu.',\n    ],\n    'index'         => [],\n    'move'          => [\n        'copy'          => 'Vytvoriť kópiu v cieľovom objekte',\n        'copy_success'  => 'Komentár :name úspešne skopírovaný do :entity.',\n        'copy_title'    => 'Ponechať kópiu',\n        'description'   => 'Zvoľ objekt, do ktorého chceš premiestniť alebo kopírovať tento komentár.',\n        'entity'        => 'Cieľový objekt',\n        'move_success'  => 'Komentár :name úspešne premiestnený do :entity.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Názov poznámky, zistenia alebo pripomienky',\n    ],\n    'show'          => [\n        'advanced'  => 'Rozšírené oprávnenia',\n        'title'     => 'Poznámka :name objektu :entity',\n    ],\n    'states'        => [\n        'collapsed' => 'Zbalené',\n        'expanded'  => 'Rozbalené',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/sk/entities/permissions.php",
    "content": "<?php\n\nreturn [\n    'privacy'   => [\n        'text'      => 'Tento objekt je nastavený ako súkromný. Vlastné oprávnenia môžu byť ešte stále definované, ale pokiaľ je objekt súkromný, budú tieto ignorované a iba členstvo role :admin bude tento objekt vidieť.',\n        'warning'   => 'Varovanie',\n    ],\n    'quick'     => [\n        'empty-permissions' => 'Žiadna rola alebo užívateľ mimo adminov kampane nemá prístup k tomuto objektu.',\n        'manage'            => 'Manažovať oprávnania',\n        'screen-reader'     => 'Otvoriť nastavenia súkromia',\n        'success'           => [\n            'private'   => ':entity je teraz skryté.',\n            'public'    => ':entity je teraz viditeľné.',\n        ],\n        'title'             => 'Oprávnenia',\n        'viewable-by'       => 'Viditeľné pre',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/pins.php",
    "content": "<?php\n\nreturn [\n    'links' => 'Linky',\n    'title' => 'Pripnutia',\n];\n"
  },
  {
    "path": "lang/sk/entities/profile.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'edit_profile'  => 'Upraviť profil',\n    ],\n    'history'   => 'História',\n    'show'      => [\n        'tab_name'  => 'Profil',\n        'title'     => 'Profil :name',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/quests.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Tento objekt je súčasťou nasledujúcich úloh.',\n    'title'     => 'Úlohy :name',\n];\n"
  },
  {
    "path": "lang/sk/entities/relations.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'mode-map'      => 'Nástroj zobrazenia vzťahov',\n        'mode-table'    => 'Tabuľka vzťahov a prepojení',\n    ],\n    'bulk'              => [\n        'delete'    => '{1} :count vzťah odstránený.|[2,4] :count vzťahy odstránené.|[5,*] :count vzťahov odstránených.',\n        'fields'    => [\n            'delete_mirrored'   => 'Zmazať zrkadlené',\n            'unmirror'          => 'Rozviazať zrkadlené',\n            'update_mirrored'   => 'Aktualizovať zrkadlené',\n        ],\n        'helpers'   => [\n            'delete_mirrored'   => 'Taktiež zmazať zrkadlené vzťahy.',\n            'unmirror'          => 'Rozviazať zrkadlené vzťahy.',\n            'update_mirrored'   => 'Aktualizovať zrkadlené vzťahy.',\n        ],\n        'success'   => [\n            'editing'           => '{1} :count vzťah aktualizovaný.|[2,4] :count vzťahy aktualizované.|[5,*] :count vzťahov aktualizovaných.',\n            'editing_partial'   => '{1} :count/:total vzťah aktualizovaný.|[2,4] :count/:total vzťahy aktualizované.|[5,*] :count/:total vzťahov aktualizovaných.',\n        ],\n    ],\n    'call-to-action'    => 'Vizuálne objavuj vzťahy tohto objektu a ako je prepojený s ostatkom kampane.',\n    'connections'       => [\n        'map_point'         => 'Bod na mape',\n        'mention'           => 'Referencia',\n        'quest_element'     => 'Prvok úlohy',\n        'timeline_element'  => 'Prvok časovej osy',\n    ],\n    'create'            => [\n        'new_title'     => 'Nový vzťah',\n        'success_bulk'  => '{1} Pridaný :count prepojenie k :entity.|[2,4] Pridané :count prepojenia k :entity.|[5,*] Pridaných :count prepojení k :entity.',\n    ],\n    'delete_mirrored'   => [\n        'helper'    => 'Tento vzťah sa zrkadlí na cieľovom objekte. Zvoľ túto možnosť, aby bol odstránený aj zrkadlený vzťah.',\n        'option'    => 'Odstrániť zrkadlený vzťah',\n    ],\n    'destroy'           => [\n        'mirrored'  => 'Toto tiež odstráni zrkadlené vzťahy a natrvalo.',\n        'success'   => 'Vzťah pre :name odstránený',\n    ],\n    'fields'            => [\n        'attitude'  => 'Postoj',\n        'is_pinned' => 'Pripnuté',\n        'owner'     => 'Zdroj',\n        'target'    => 'Cieľ',\n        'two_way'   => 'Vytvoriť zrkadlenie vzťahu',\n        'unmirror'  => 'Zrušiť zrkadlenie tohto vzťahu.',\n    ],\n    'filters'           => [\n        'connection'    => 'Vzťah prepojenia',\n        'name'          => 'Cieľ prepojenia',\n    ],\n    'helper'            => 'Vytvor vzťahy medzi objektami s postojom a viditeľnosťou. Vzťahy môžu byť tiež pripnuté k menu objektu.',\n    'helpers'           => [\n        'no_relations'  => 'Tento objekt nemá aktuálne žiadne vzťahy s inými objektami v kampani.',\n    ],\n    'hints'             => [\n        'attitude'  => 'Toto nepovinné pole môže usporiadať poradie vzťahov štandardne podľa hodnoty vzťahu.',\n        'two_way'   => 'Keď vytvoríš zrkadlenie vzťahu, vytvorí sa rovnaký vzťah aj u cieľového objektu. Ak bude neskôr upravovaný, zrkadlený vzťah nebude zmenami dotknutý.',\n    ],\n    'index'             => [\n        'title' => 'Vzťahy',\n    ],\n    'options'           => [\n        'mentions'          => 'Vzťahy + Prepojené + Referencie',\n        'only_relations'    => 'Iba priame vzťahy',\n        'related'           => 'Vzťahy + Prepojené',\n        'relations'         => 'Vzťahy',\n        'show'              => 'Zobraziť',\n    ],\n    'panels'            => [\n        'related'   => 'Prepojené',\n    ],\n    'placeholders'      => [\n        'attitude'  => '-100 až 100, kde 100 je max. pozitívny',\n    ],\n    'show'              => [\n        'title' => 'Vzťahy pre :name',\n    ],\n    'types'             => [\n        'family_member'         => 'Člen rodu',\n        'organisation_member'   => 'Člen organizácie',\n    ],\n    'update'            => [\n        'success'   => 'Vzťah pre :name bol upravený',\n        'title'     => 'Upraviť vzťahy',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/story.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'collapse_all'      => 'Zbaliť všetko',\n        'expand_all'        => 'Rozbaliť všetko',\n        'load_more'         => 'Načítať ďalšie',\n        'login_for_more'    => 'Prihlásiť sa pre zobrazenie viacerých príspevkov',\n    ],\n    'reorder'   => [\n        'icon_tooltip'  => 'Preskupiť príspevky',\n        'panel_title'   => 'Preskupiť príspevky',\n        'save'          => 'Uložiť nové poradie',\n        'success'       => 'Príspevky preskupené.',\n    ],\n    'update'    => [\n        'title' => 'Aktualizovať záznam :entity',\n    ],\n    'warning'   => [],\n];\n"
  },
  {
    "path": "lang/sk/entities/timelines.php",
    "content": "<?php\n\nreturn [\n    'helper'    => 'Časové osi s objektami referencovanými k tomuto objektu sa zobrazia nižšie.',\n    'show'      => [\n        'title' => 'Časové osi pre :name',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/entities/transform.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'bulk'      => [\n        'errors'    => [\n            'unknown_type'  => 'Neznámy alebo nesprávny typ objektu.',\n        ],\n        'success'   => '{1} :count objekt transformovaný na nový typ: :type.|[2,4] :count objekty transformované na nový typ: :type.|[5,*] :count objektov transformovaných na nový typ: :type.',\n    ],\n    'fields'    => [\n        'select_one'    => 'Vyber jeden',\n        'target'        => 'Nový typ objektu',\n    ],\n    'panel'     => [\n        'bulk_description'  => 'Zmeň typ pre viacero objektov. Prosím, uvedom si, že niektoré údaje vzhľadom na rôzne polia v daných objektoch môžeš stratiť.',\n        'bulk_title'        => 'Hromadne transformovať objekty',\n        'title'             => 'Transformovať objekt',\n    ],\n    'success'   => 'Objekt :name transformovaný.',\n    'title'     => 'Transformácia :name',\n];\n"
  },
  {
    "path": "lang/sk/entities.php",
    "content": "<?php\n\nreturn [\n    'abilities'             => 'Schopnosti',\n    'ability'               => 'Schopnosť',\n    'archetype'             => 'Archetyp',\n    'archetypes'            => 'Archetypy',\n    'article'               => 'Článok',\n    'articles'              => 'Články',\n    'attribute_template'    => 'Šablóna atribútov',\n    'attribute_templates'   => 'Šablóny atribútov',\n    'bookmark'              => 'Záložka',\n    'bookmarks'             => 'Záložky',\n    'calendar'              => 'Kalendár',\n    'calendars'             => 'Kalendáre',\n    'campaign'              => 'Kampaň',\n    'campaigns'             => 'Kampane',\n    'character'             => 'Postava',\n    'characters'            => 'Postavy',\n    'conversation'          => 'Diskusia',\n    'conversations'         => 'Diskusie',\n    'creator'               => [\n        'actions'                   => [\n            'create'    => 'Vytvoriť :type',\n            'full'      => 'Prejsť na úplný formulár',\n            'more'      => 'Pridať viac detailov',\n        ],\n        'back'                      => 'Späť na výber',\n        'bulk_names'                => 'Pridaj jedno meno na riadok',\n        'duplicate'                 => 'Existujú iné objekty tohto typu s rovnakým menom.',\n        'helper_v2'                 => 'Zrýchlene vytvor základ nového objektu bez prerušenia práce.',\n        'helpers'                   => [\n            'archetype' => 'Zvoľ archetyp, ktorého kópiou budú nové objekty',\n            'template'  => 'Zvoľ šablónu, ktorej kópiou budú nové objekty',\n        ],\n        'missing_v2'                => 'Jediné moduly, ktoré sú aktivované a ktoré máš povolenie vytvárať sú dostupné na tejto obrazovke. :learn-more',\n        'modes'                     => [\n            'archetypes'    => 'Výber archetypu',\n            'bulk'          => 'Masové pridanie',\n            'default'       => 'Rýchle pridanie',\n        ],\n        'name'                      => [\n            'new'       => 'Nový názov',\n            'remove'    => 'Odstrániť',\n        ],\n        'success_multiple'          => '{1} Nový objekt :link vytvorený.|[2,4] Nové objekty :link vytvorené.|[5,*] Nových objektov :link vytvorených.',\n        'success_multiple_posts'    => '{1} Nová poznámka :link vytvorená.|[2,4] Nové poznámky :link vytvorené.|[5,*] Nových poznámok :link vytvorených.',\n        'title'                     => 'Nový objekt',\n        'titles'                    => [\n            'everything'    => 'Všetko',\n            'quick-access'  => 'Rýchly prístup',\n        ],\n        'tooltip'                   => 'Vytvoriť nový objekt bez opustenia aktuálnej stránky',\n        'tooltips'                  => [\n            'create'        => 'Vytvoriť objekt a prejsť späť na výber',\n            'create_more'   => 'Vytvoriť objekt a začať vytvárať ďalší rovnakého typu',\n            'edit'          => 'Vytvoriť objekt a začať ho upravovať',\n        ],\n    ],\n    'creature'              => 'Bytosť',\n    'creatures'             => 'Bytosti',\n    'dice_roll'             => 'Hod kockou',\n    'dice_rolls'            => 'Hody kockou',\n    'entries'               => 'Zápisy',\n    'entry'                 => 'Zápis',\n    'event'                 => 'Udalosť',\n    'events'                => 'Udalosti',\n    'families'              => 'Rody',\n    'family'                => 'Rod',\n    'inventories'           => 'Inventáre',\n    'item'                  => 'Predmet',\n    'items'                 => 'Predmety',\n    'journal'               => 'Denník',\n    'journals'              => 'Denníky',\n    'location'              => 'Miesto',\n    'locations'             => 'Miesta',\n    'map'                   => 'Mapa',\n    'maps'                  => 'Mapy',\n    'media'                 => 'Médiá',\n    'new'                   => [],\n    'note'                  => 'Poznámka',\n    'notes'                 => 'Poznámky',\n    'organisation'          => 'Organizácia',\n    'organisations'         => 'Organizácie',\n    'properties'            => 'Vlastnosti',\n    'quest'                 => 'Úloha',\n    'quest_element'         => 'Prvok úlohy',\n    'quests'                => 'Úlohy',\n    'race'                  => 'Rasa',\n    'races'                 => 'Rasy',\n    'relation'              => 'Vzťah',\n    'relations'             => 'Vzťahy',\n    'reminders'             => 'Pripomenutia',\n    'tag'                   => 'Kategória',\n    'tags'                  => 'Kategórie',\n    'templates'             => 'Šablóny',\n    'timeline'              => 'Časová os',\n    'timeline_element'      => 'Prvok časovej osi',\n    'timelines'             => 'Časové osi',\n    'whiteboard'            => 'Tabuľa',\n    'whiteboards'           => 'Tabule',\n];\n"
  },
  {
    "path": "lang/sk/errors.php",
    "content": "<?php\n\nreturn [\n    '403'               => [\n        'body'  => 'Vyzerá to tak, že nemáš oprávnenie na zobrazenie tejto stránky!',\n        'title' => 'Prístup zamietnutý',\n    ],\n    '403-form'          => [\n        'help'  => 'Dôvod môže byť uplynutie doby prihlásenia. Prosím, skús sa opätovne prihlásiť v novom okne pred uložením zmien.',\n    ],\n    '404'               => [\n        'body'  => 'Prepáč, ale hľadanú stránku sme nenašli.',\n        'title' => 'Stránka nebola nájdená',\n    ],\n    '500'               => [\n        'body'  => [\n            '1' => 'Ojojoj, niečo sa pokazilo.',\n            '2' => 'Report s popisom chyby nám už bol zaslaný, ale niekedy pomôže, ak vieme trochu viac o tom, čo sa vlastne dialo.',\n        ],\n        'title' => 'Chyba',\n    ],\n    '503'               => [\n        'body'  => [\n            '1' => 'Na Kanke sa práve pracuje, čo zvyčajne znamená, že nahrávame jej aktualizáciu!',\n            '2' => 'Ospravedlňujeme sa za túto nepríjemnosť. Všetko bude o chvíľu zasa fungovať.',\n        ],\n        'json'  => 'Na Kanke sa aktuálne pracuje, prosím, skús to o pár minút.',\n        'title' => 'Údržba',\n    ],\n    '503-form'          => [],\n    'back-to-campaigns' => 'Vráť sa k jednej z tvojich kampaní',\n    'footer'            => 'Ak potrebuješ ďalšiu pomoc, kontaktuj nás na hello@kanka.io alebo na :discord.',\n    'log-in'            => 'Prihlásením sa do tvojho konta sa môže zobraziť, čo hľadáš.',\n    'post_layout'       => 'Nesprávny vizuál poznámky.',\n    'private-campaign'  => [\n        'auth'  => [\n            'helper'    => 'K tejto kampani nemáš prístup.',\n        ],\n        'guest' => [\n            'helper'    => 'Kampaň, do ktorej sa chceš dostať, je súkromná a ty nie si prihlásený/á.',\n            'login'     => 'Prihlásením môžeš získať prístup k obsahu.',\n        ],\n        'title' => 'Súkromná kampaň',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/events.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nová udalosť',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [\n        'helper'    => 'Udalosti, ktoré majú tento objekt ako ich nadradený, sa zobrazujú tu.',\n    ],\n    'fields'        => [\n        'date'  => 'Dátum',\n    ],\n    'helpers'       => [\n        'date'  => 'Toto pole môže obsahovať čokoľvek a nie je prepojené s kalendármi kampane. Na zobrazenie tejto udalosti v kalendári je nutné ju pridať do kalendára alebo do karty Pripomienky tejto udalosti.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Pridaj kritické momenty ako bitvy, korunovácie alebo objavy do histórie tvojho sveta.',\n    ],\n    'placeholders'  => [\n        'date'  => 'Dátum tvojej udalosti',\n        'type'  => 'ceremónia, festival, katastrofa, bitva, narodenie',\n    ],\n    'show'          => [],\n    'tabs'          => [\n        'calendars' => 'Záznamy v kalendári',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/export.php",
    "content": "<?php\n\nreturn [\n    'content'           => 'Obsah',\n    'hidden_campaign'   => 'Skrytá kampaň',\n    'index'             => 'Index objektov',\n];\n"
  },
  {
    "path": "lang/sk/families/trees.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'clear'             => 'Zmazať všetko',\n        'first'             => 'Pridať zakladateľa/ku',\n        'founder'           => 'Pridať nového/ú zakladateľa/ku',\n        'rename-relation'   => 'Premenovať vzťah',\n        'reset'             => 'Zahodiť zmeny',\n        'save'              => 'Uložiť',\n    ],\n    'modal'     => [\n        'first-title'   => 'Výber objektu',\n        'helper'        => 'Nahradiť objekt iným z kampane',\n        'relation'      => 'Vzťah',\n        'title'         => 'Nahradiť objekt',\n    ],\n    'modals'    => [\n        'clear'     => [\n            'confirm'   => 'Naozaj chceš reinicializovať všetky dáta z rodokmeňa?',\n        ],\n        'entity'    => [\n            'add'       => [\n                'founder'   => 'Zakladateľ/ka',\n                'member'    => 'Člen/ka',\n                'success'   => 'Objekt pridaný.',\n                'title'     => 'Pridať objekt',\n            ],\n            'child'     => [\n                'success'   => 'Dieťa pridané.',\n                'title'     => 'Pridať dieťa',\n            ],\n            'edit'      => [\n                'helper'    => 'Zaškrtni túto možnosť, ak je vzťah neznámy. Postavu môžeš pridať neskôr.',\n                'success'   => 'Objekt aktualizovaný.',\n                'title'     => 'Aktualizovať objekt',\n            ],\n            'founder'   => [\n                'title' => 'Pridanie nového/ú zakladateľa/ku',\n            ],\n            'remove'    => [\n                'confirm'   => 'Naozaj chceš odstrániť tento objekt z rodokmeňa?',\n                'success'   => 'Objekt odstránený.',\n            ],\n        ],\n        'relations' => [\n            'add'       => [\n                'success'   => 'Vzťah pridaný.',\n                'title'     => 'Pridať vzťah',\n            ],\n            'edit'      => [\n                'success'   => 'Vzťah aktualizovaný.',\n                'title'     => 'Aktualizovať vzťah',\n            ],\n            'unknown'   => 'Neznámy',\n        ],\n        'reset'     => [\n            'confirm'   => 'Naozaj chceš zahodiť všetky zmeny urobené v tomto rodokmeni?',\n        ],\n    ],\n    'pitch'     => 'Vytvor detailný rokokmeň pre rody v tvojej kampani.',\n    'success'   => [\n        'cleared'   => 'Rodokmeň zmazaný.',\n        'reseted'   => 'Rodokmeň obnovený.',\n        'saved'     => 'Rodokmeň uložený.',\n    ],\n    'title'     => 'Rodokmeň :name',\n    'unknown'   => 'nezadaný',\n];\n"
  },
  {
    "path": "lang/sk/families.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nový rod',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'families'      => [],\n    'fields'        => [],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Tento rod vyhynul.',\n        'members'       => 'Zoznam členov a členiek daného rodu sa zobrazuje na tomto mieste. Úpravou danej postavy je možné ju pridať do daného rodu v poli Rod.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Zaznamenávaj rodové línie, klany či šľachtické rody, ktoré sú prepojené s tvojimi postavami.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Pridaj jedného alebo viacerých členov k :name.',\n            'success'   => '{0} Žiaden člen nebol pridaný.|{1} 1 člen bol pridaný.|[2,4] :count členovia boli pridaní.|[5,*] :count členov bolo pridaných.',\n            'title'     => 'Noví členovia',\n        ],\n    ],\n    'placeholders'  => [\n        'name'  => 'Názov rodu',\n        'type'  => 'Kráľovský, Šľachtický, Vyhynutý',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'tree'  => 'Rodokmeň',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/sk/faq.php",
    "content": "<?php\n\nreturn [\n    'account-deletion'      => [\n        'account_settings'  => 'Nastavenia konta',\n        'answer'            => 'Ak chceš odstrániť svoje konto, choď na stránku :account a skroluj nadol k sekcii o odstránení konta. Tu vieš odstrániť tvoje konto a všetky kampane, v ktorých si jediným členom.',\n        'question'          => 'Ako viem odstrániť moje konto?',\n    ],\n    'app_backup'            => [\n        'answer'    => 'Denne vytvárame dve zálohy, aby sme zabezpečili ochranu proti strate dát. Naše vlastné kampane sa nachádzajú na tomto serveri, takže nechceme podstupovať žiadne riziko!',\n        'question'  => 'Ako často sa zálohujú dáta v Kanke?',\n    ],\n    'attribute-templates'   => [\n        'answer'    => <<<'TEXT'\nNajlepší spôsob, ako vysvetliť podstatu Šablón atribútov, bude pomocou príkladu. Predstavme si, že tvoj svet má veľké množstvo miest. Pre mnohé z nich chceš zadať základné atribúty ako \"Počet obyvateľov\", \"Podnebie\", \"Úroveň kriminality\".\n\nMôžeš tieto atribúty pre každé miesto nastaviť jednotlivo, to sa však čoskoro stane zdĺhavým, popr. zabudneš niekde zadať atribút \"Úroveň kriminality\". V takom prípade sa ti zíde Šablóna atribútov.\n\nVytvoríš jednu Šablónu atribútov s atribútmi \"Počet obyvateľov\", \"Podnebie\" a \"Úroveň kriminality\" a neskôr uplatníš túto pri tvojich miestach. Šablóna bude automaticky pridelená každému miestu a ty už len vyplníš dané hodnoty!\nTEXT\n        ,\n        'question'  => 'Čo sú šablóny atribútov?',\n    ],\n    'backup'                => [\n        'answer'    => 'Raz za deň si môžeš všetky dáta tvojej kampane exportovať v podobe ZIP súboru. Klikni v aplikácii v ľavom menu na \"Kampaň\" a potom na \"Exportovať\". Tým sa vytvorí export, ktorý bude dostupný 30 minút. Tento export nemôžeš nahrať späť do Kanky, je len pre pokoj v tvojej duši, ak už aplikáciu nebudeš používať.',\n        'question'  => 'Ako môžem zálohovať alebo exportovať moju kampaň?',\n    ],\n    'bugs'                  => [\n        'answer'    => 'Pridaj sa jednoducho do nášho :discord servera a ohlás danú chybu v #error-and-bugs kanáli.',\n        'question'  => 'Kde môžem nahlásiť chyby v aplikácii?',\n    ],\n    'campaign-sync'         => [\n        'answer'    => 'Túto funkcionalitu Kanka nepodporuje. Môžeš ale manažovať viacero herných skupín v rovnakom svete. Ak používajú rovnakú kampaň, vieš ich prístupy kontrolovať cez kombináciu Úloh, Kategórií a Oprávnení.',\n        'question'  => 'Môžem synchronizovať objekty vo viacerých kampaniach naraz?',\n    ],\n    'custom'                => [\n        'answer'    => 'Kanka ponúka preddefinované typy navzájom integrovaných objektov. Ak by sme povolili vytváranie vlastných typov objektov, museli by sme aplikáciu úplne prerobiť a zároveň by sme prišli o zjednodušenie práce a namiesto tvorby svetov by sme riešili, ako ich organizovať. Okrem toho je Kanka dostatočne flexibilná pomocou objektu kategórií.',\n        'question'  => 'Môžem vytvoriť mnou definované typy objektov?',\n    ],\n    'delete-campaign'       => [\n        'answer'    => 'Na nástenke tvojej kampane klikni na \"Kampaň\" v ľavom menu. Ak si posledným členom kampane, objaví sa tlačidlo \"Zmazať\". Zmazanie kampane je nevratná akcia, ktorá zmaže z našich serverov všetky údaje, vrátane obrázkov.',\n        'question'  => 'Ako môžem kampaň zmazať?',\n    ],\n    'discord'               => [\n        'answer'    => 'Ak chceš prepojiť tvoje konto s :discord, musíš najprv kliknúť na tvojho avatara vpravo hore v aplikácii a následne na tlačidlo Profil. Tu vieš dostať na substránku :apps a kliknúť na Prepojiť.',\n        'question'  => 'Ako prepojím moje konto v Kanke s Discordom?',\n    ],\n    'early-access'          => [\n        'answer'    => 'Early Access (Skorý prístup) je spôsob, akým môžeme odmeniť našich prispievateľov. Počas 30 dní môžu exkluzívne vyskúšať všetky najnovšie moduly predtým, než sú dostupné pre všetkých.',\n        'question'  => 'Čo je Early Access?',\n    ],\n    'entity-notes'          => [\n        'answer'    => 'Všetky objekty majú kartu pre Poznámky objektu, čo sú krátke textové poznámky, ktoré môžu byť nastavené viditeľné pre teba (aj keď napr. spolu-GM-uješ), len pre členov s rolou Admin alebo pre všetkých. Hráčom a hráčkam vieš poskytnúť oprávnenie pridávať objektom poznámky bez toho, aby vedeli upravovať daný objekt.',\n        'question'  => 'Ako zaobchádza Kanka s informáciami, ktoré by nemali byť všeobecne viditeľné?',\n    ],\n    'fields'                => [\n        'answer'    => 'Odpoveď',\n        'category'  => 'Kategória',\n        'locale'    => 'Jazyk',\n        'order'     => 'Poradie',\n        'question'  => 'Otázka',\n    ],\n    'free'                  => [\n        'answer'    => <<<'TEXT'\nÁno! Sme toho názoru, že naša finančná situácia nemá mať dopad na pôžitok z hrania RPG hier alebo tvorby svetov, preto základné funkcie aplikácie budú stále dostupné zadarmo. Ale ak sa chceš aktívne zapojiť a podporiť naše ciele, zároveň hlasovať za funkcie, ktoré by ti najviac vyhovovali, môžeš si nás predplatiť.\n\nPopri hlasovaní za smer, ktorým chceš, aby sa Kanka vyvíjala, podporou získaš prístup k :boosters, vyššiemu limitu pre nahrané súbory, tvoje meno bude pridané do siene slávy, krajšie ikonky a oveľa viac!\nTEXT\n        ,\n        'question'  => 'Ostane Kanka dostupná zadarmo?',\n    ],\n    'gods-and-religions'    => [\n        'answer'    => 'Odporúčame bohov vytvoriť ako postavy a náboženstvá ako organizácie. Ak chceš rýchlo nájsť nejaké božstvá, odporúčame ich vytvoriť zároveň so zodpovedajúcou kategóriou.',\n        'question'  => 'Kde mám vytvoriť bohov a náboženstvá?',\n    ],\n    'help'                  => [\n        'answer'    => 'Za prvé, vďaka, že nám chceš pomôcť! Stále radi vidíme, ak sa prihlásia ľudia, ktorí by nám chceli pomôcť s prekladmi, testovaním nových funkcionalít alebo by chceli pomáhať novým užívateľom. Tiež máme radi, ak Kanku odporúčajú ďalej na miestach, na ktoré sme doteraz nemysleli. Najlepší spôsob, ako nám pomôcť, je pridať sa k nám na našom :discord serveri, kde máme dedikovaný kanál pre výpomoc.',\n        'question'  => 'Ako vám môžem pomôcť?',\n    ],\n    'map'                   => [\n        'answer'    => 'Modul Mapy podporuje súbory vo formátoch PNG, JPG a SVG. Mapy môžu mať vrstvy, značky a skupiny značiek v rôznych tvaroch a veľkostiach, ktoré môžu referencovať ďalšie objekty v kampani.',\n        'question'  => 'Môžem do Kanky nahrať mapy?',\n    ],\n    'mobile'                => [\n        'answer'    => 'Aktuálne neexistuje mobilná aplikácia pre Kanku, ale väčšina funkcionalít funguje aj na telefóne. Dúfame, že pomocou podpory cez predplatné sa nám niekedy v budúcnosti podarí zaplatiť niekoho, kto jedného dňa vytvorí mobilnú aplikáciu, ale v blízkej budúcnosti to nemáme v pláne.',\n        'question'  => 'Existuje mobilná aplikácia? Plánujete nejakú?',\n    ],\n    'monsters'              => [\n        'answer'    => 'Pre vytvorenie hocijakej entity ako národy, rasy, príšery alebo hocičo iné, čo je živé (alebo nemŕtve) odporúčame modul Rasy.',\n        'question'  => 'Kde môžem vytvoriť príšery?',\n    ],\n    'multiworld'            => [\n        'answer'    => 'Môžeš byť súčasťou toľkých kampaní, koľkých chceš, vrátane tých, ktoré vytvoríš. Ak chceš prepnúť alebo vytvoriť novú kampaň, prejdi do nástenky kampane a hore vpravo klikni na svoju aktuálnu kampaň, čím zobrazíš prepínač medzi kampaňami.',\n        'question'  => 'Môžem mať viac ako jednu kampaň?',\n    ],\n    'nested'                => [\n        'answer'    => 'Ak preferuješ vnorené zobrazenie ako štandardné (napr. po kliknutí na Vnorené zobrazenie v zozname miest), môžeš si ho nastaviť v tvojom profile a nastaveniach zobrazenia. Tam môžeš zaškrtnúť možnosť pre vnorené zobrazenie. Toto je len pre tvoje konto, nie štandardne pre všetky kampane.',\n        'question'  => 'Môžem nastaviť, aby sa zoznamy zobrazovali štandardne ako vnorené?',\n    ],\n    'permissions'           => [\n        'answer'    => 'Samozrejme, preto sme Kanku vytvorili! Môžeš do kampane pozvať všetkých hráčov a hráčky a zadať im role a oprávnenia. Systém sme vytvorili ako extrémne flexibilný (môžeš sa rozhodnúť pre stratégiu opt-in alebo opt-out), aby pokryl veľké množstvo požiadavok a situácií.',\n        'question'  => 'Môžem nejak obmedziť informácie, ktoré hráči a hráčky vidia v mojej kampani?',\n    ],\n    'plans'                 => [\n        'answer'    => <<<'TEXT'\nDlhodobý plán je z Kanky vytvoriť všestranný nástroj pre tvorbu svetov a správu kampaní, ktorý sa neviaže na žiaden systém a jeho obsah vytvára komunita formou \"Komunitných šablón\". Ďalší náš cieľ je vytvoriť nástroje, ktorými by bola Kanka prepojená s inými platformami, napr. virtuálnymi aplikáciami pre hranie stolových RPG.\n\nKanku používame aj my, takže nemáme v pláne prestať ju ďalej vyvíjať a zlepšovať. Projekt ale vedieme zároveň ako open source, takže ho komunita môže prevziať a pokračovať v ňom, ak by sa nám niečo prihodilo.\nTEXT\n        ,\n        'question'  => 'Aké dlhodobé plány máte?',\n    ],\n    'public-campaigns'      => [\n        'answer'    => 'Môžeš si pozrieť stránku s :public-campaigns, kde môžeš sledovať, ako Kanku používajú ostatní užívatelia.',\n        'question'  => 'Akým spôsobom používajú Kanku iní užívatelia?',\n    ],\n    'renaming-modules'      => [\n        'answer'    => 'Aj keby toto bolo jednoduché pre názvy v angličtine alebo iných jazykoch, ktoré nepoužívajú rodovo rozdielne názvy, možnosť zmeniť názvy modulov by porušilo gramatickú správnosť a užívateľskú skúsenosť pre väčšinu jazykov, v ktorých je Kanka dostupná.',\n        'question'  => 'Môžem moduly premenovať? Napr. Rody na Klany, alebo Organizácie na Frakcie?',\n    ],\n    'sections'              => [\n        'community'     => 'Komunita',\n        'general'       => 'Všeobecné',\n        'other'         => 'Iné',\n        'permissions'   => 'Oprávnenia',\n        'pricing'       => 'Cenník',\n        'worldbuilding' => 'Tvorba svetov',\n    ],\n    'show'                  => [\n        'return'    => 'Späť na FAQ',\n        'timestamp' => 'Posledná úprava dňa :date',\n        'title'     => 'FAQ :name',\n    ],\n    'unboost'               => [\n        'answer'    => 'Ukončenie boostnutia kampane nezmaže žiadne údaje z nej, ktoré boli vytvorené počas boostnutia, ale jednoducho skryje tieto dodatočné informácie a funkcionality. Ak bude kampaň opätovne boostnutá, tieto informácie a funkcionality sa opätovne zobrazia s rovnakými nastaveniami.',\n        'question'  => 'Čo sa stane, ak kampaň prestane byť boostnutá?',\n    ],\n    'user-switch'           => [\n        'answer'    => 'Oprávnenia môžu byť trochu zložitejšie, najmä vo väčších kampaniach. Ako administrátor kampane môžeš na stránke členov kampane kliknúť na \"Prepnúť\", ktorý sa zobrazí vedľa mena člena kampane. Po kliknutí ťa systém prihlási ako daného užívateľa a povolí ti vidieť kampaň cez jeho oči. Toto je najjednoduchší spôsob, akým môžeš skontrolovať nastavenie oprávnení tvojej kampane.',\n        'question'  => 'Mám nastavené oprávnenia v mojej kampani. Ako ich otestujem?',\n    ],\n    'visibility'            => [\n        'answer'    => 'Iba ľudia, ktorých pozveš do kampane, ju môžu vidieť a pracovať s tvojím dielom. Tvoje údaje sú súkromné a ostávajú pod tvojou kontrolou. Kampaň ale môžeš nastaviť aj ako verejnú, aby ju mohli vidieť aj neregistrovaní užívatelia.',\n        'question'  => 'Môže niekto vidieť mnou vytvorený svet?',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/fields.php",
    "content": "<?php\n\nreturn [\n    'gallery'           => [\n        'placeholder'   => 'Vybrať obrázok z galérie kampane',\n    ],\n    'gallery-header'    => [\n        'description'   => 'Ak objekt nemá žiaden obrázok záhlavia, zobraziť namiesto toho obrázok z galérie kampane.',\n    ],\n    'gallery-image'     => [\n        'description'   => 'Ak objekt nemá žiaden obrázok, zobraziť namiesto toho obrázok z galérie kampane.',\n    ],\n    'header-image'      => [\n        'boosted-description'   => 'Zobraziť obrázok pozadia v záhlaví objektu pomocou :boosted-campaign.',\n        'description'           => 'Zobraziť obrázok pozadia v záhlaví objektu. Pre lepší výsledok použi naozaj veľký obrázok.',\n        'title'                 => 'Obrázok záhlavia',\n    ],\n    'tooltip'           => [],\n];\n"
  },
  {
    "path": "lang/sk/filters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'bookmark'  => 'Záložka',\n    ],\n    'alerts'    => [\n        'copy'  => 'Filtre boli skopírované do tvojej schránky.',\n    ],\n    'bookmark'  => [\n        'name'      => ':module (filtrovaný)',\n        'premium'   => 'Ak chceš pridať viac záložiek, budeš musieť aktivovať prémiové funkcionality kampane.',\n        'success'   => 'Záložka vytvorená.',\n    ],\n    'helpers'   => [\n        'guest' => 'Prosím prihlás sa do tvojho konta, ak chceš filtrovať výsledky.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/footer.php",
    "content": "<?php\n\nreturn [\n    'about'             => 'O nás',\n    'blog'              => 'Blog',\n    'boosters'          => 'Boosty',\n    'community'         => 'Komunita',\n    'company'           => 'Spoločnosť',\n    'contact'           => 'Kontakt',\n    'copyright'         => 'Copyright :copy :year Owlchester SNC',\n    'documentation'     => 'Dokumentácia',\n    'features'          => 'Funkcie',\n    'kb'                => 'Vedomostná databáza',\n    'language-switcher' => [\n        'other' => 'Iné jazyky',\n        'title' => 'Zvoľ tvoj jazyk',\n    ],\n    'made'              => 'Vytovrené s ❤️ v Ženeve, Švajčiarsko',\n    'newsletter'        => 'Newsletter',\n    'platform'          => 'Platforma',\n    'premium'           => 'Prémiové kampane',\n    'press-kit'         => 'Mediálny balíček',\n    'pricing'           => 'Cenník',\n    'privacy'           => 'Ochrana osobných údajov',\n    'public-campaigns'  => 'Verejné kampane',\n    'resources'         => 'Zdroje',\n    'roadmap'           => 'Plán',\n    'security'          => 'Bezpečnosť',\n    'server-time'       => 'Toto je čas na našom serveri',\n    'status'            => 'Stav služby',\n    'terms'             => 'Všeobecné podmienky',\n    'thanks'            => 'Umožnené jedine s pomocou našich podporujúcich.',\n    'translator_call'   => 'Kanka je prekladaná do iných jazykov vďaka našej úžasnej komunite. Ak chceš pomôcť s prekladom Kanky do tvojho jazyka, ozvi sa nám na :discord!',\n    'whats-new'         => 'Čo je nové',\n];\n"
  },
  {
    "path": "lang/sk/front/community-votes.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'index'     => [],\n    'latest'    => [],\n    'show'      => [],\n    'title'     => 'Komunitné hlasovania',\n];\n"
  },
  {
    "path": "lang/sk/front/hall-of-fame.php",
    "content": "<?php\n\nreturn [\n    'title' => 'Sieň slávy',\n];\n"
  },
  {
    "path": "lang/sk/front/kb.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [],\n    'show'      => [],\n    'title'     => 'Vedomostná databáza',\n];\n"
  },
  {
    "path": "lang/sk/front/newsletter.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'learn_more'    => 'Zisti viac',\n        'subscribe'     => 'Prihlásiť sa k odberu',\n    ],\n    'fields'    => [\n        'firstname'     => 'Meno',\n        'lastname'      => 'Priezvisko',\n        'notifications' => 'Notifikácie',\n    ],\n    'groups'    => [\n        'all'           => 'Obdrž občas oznámenia o nových funkcionalitách, komunitných hlasovaniach, udalostiach, atď.',\n        'newsletter'    => 'Newsletter',\n    ],\n    'headline'  => 'Prihlás sa k odberu jedného alebo viacerých našich newsletterov k obdržaniu aktuálnych informácií o Kanke.',\n    'title'     => 'E-mailové novinky',\n];\n"
  },
  {
    "path": "lang/sk/front.php",
    "content": "<?php\n\nreturn [\n    'about'                 => [],\n    'actions'               => [],\n    'campaigns'             => [\n        'public'    => [\n            'filters'   => [\n                'is-premium'    => 'Toto je prémiová kampaň!',\n            ],\n        ],\n    ],\n    'community'             => [],\n    'contact'               => [],\n    'cookie'                => [\n        'dismiss'   => 'Rozumiem!',\n        'link'      => 'Dozvedieť sa viac',\n        'message'   => 'Táto webstránka používa cookies, aby pre teba zaistila najlepšiu možnú skúsenosť s ňou.',\n    ],\n    'faq'                   => [],\n    'featured_campaigns'    => [],\n    'features'              => [\n        'api'       => [\n            'link'  => 'API dokument',\n        ],\n        'patreon'   => [\n            'api_calls'         => 'Vyšší počet API volaní (90)',\n            'boosts'            => 'Boosty pre kampane',\n            'default_image'     => 'Pekné prednastavené obrázky pre objekty',\n            'discord'           => 'Privátny kanál na Discorde',\n            'free'              => 'Zadarmo',\n            'hall_of_fame'      => 'Meno v :link',\n            'impact'            => 'Ovplyvnenie budúcich funkcií',\n            'monthly_vote'      => 'Účasť na komunitných hlasovaniach',\n            'pagination'        => 'Vyšší počet zobrazených objektov na stránke',\n            'upload_limit'      => 'Veľkosti súborov',\n            'upload_limit_map'  => 'Veľkosť nahraných máp',\n        ],\n    ],\n    'first_block'           => [],\n    'footer'                => [],\n    'goodbye'               => [],\n    'help'                  => [],\n    'home'                  => [\n        'seo'   => [\n            'meta-description'  => 'Kanka je komunitou riadený nástroj na spravovanie RPG kampaní a tvorbu svetov, s ktorým sa dajú tieto jednoducho organizovať, plánovať a používať',\n        ],\n    ],\n    'master'                => [],\n    'media'                 => [],\n    'menu'                  => [\n        'dashboard'     => 'Nástenka',\n        'login'         => 'Login',\n        'register'      => 'Registrácia',\n        'register_free' => 'Bezplatná registrácia',\n    ],\n    'meta'                  => [\n        'description'   => 'Kanka je flexibilný digitálny nástroj na tvorbu svetov a spravovanie tvojej RPG kampane',\n        'title'         => 'Kanka - nástroj na správu RPG kampaní a tvorbu svetov',\n    ],\n    'partners'              => [],\n    'pricing'               => [\n        'tier'  => [\n            'free'  => 'Zadarmo',\n            'month' => 'Mesačne',\n        ],\n    ],\n    'privacy'               => [],\n    'release'               => [],\n    'roadmap'               => [],\n    'second_block'          => [],\n    'seo'                   => [\n        'keywords'  => 'Tvorba svetov, Hry na hrdinov, Správa RPG kampaní',\n    ],\n    'team'                  => [],\n    'terms'                 => [],\n];\n"
  },
  {
    "path": "lang/sk/gallery.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'gallery'   => 'Z galérie',\n        'url'       => 'Nahrať obrázok z URL',\n    ],\n    'browse'    => [\n        'layouts'       => [\n            'large' => 'Veľké náhľady',\n            'small' => 'Malé náhľady',\n        ],\n        'search'        => [\n            'placeholder'   => 'Hľadať obrázok v galérii',\n        ],\n        'title'         => 'Galéria',\n        'unauthorized'  => 'Žiadna z tvojich rolí nemá povolenie na \"prehliadanie galérie\".',\n    ],\n    'cta'       => [\n        'action'    => 'Odomknúť viac úložného priestoru',\n        'helper'    => 'Odomkni až do :size GiB úložného priesotru pre :premium-campaign.',\n        'title'     => 'Úložisko plné',\n    ],\n    'delete'    => [\n        'success'   => '[0] Odstránených 0 prvkov|[1] Odstránený 1 prvok|{2,4} Odstránené :count prvky|{5,*} Odstránených :count prvkov',\n    ],\n    'download'  => [\n        'errors'    => [\n            'copy_failed'           => 'Našim serverom sa nepodarilo stiahnuť daný obrázok.',\n            'gallery_full_free'     => 'Úložisko galérie je plné. Aktivuj prémiovú funkcionalitu pre zväčšenie priestoru.',\n            'gallery_full_premium'  => 'Úložisko galérie je plné. Odstráň najprv niektoré zo súborov.',\n            'invalid_format'        => 'Súbor nemá platný formát.',\n            'too_big'               => 'Súbor je príliš veľký.',\n            'unauthorized'          => 'Žiadna z tvojich rolí nemá povolenie na \"nahrávanie do galérie\".',\n        ],\n    ],\n    'file'      => [\n        'saved' => 'Uložené',\n    ],\n    'filters'   => [\n        'only_unused'   => 'Zobraziť iba nepoužívané súbory',\n    ],\n    'move'      => [\n        'success'   => '[0] Premiestnených 0 prvkov|[1] Premiestnený 1 prvok|{2,4} Premiestnené :count prvky|{5,*} Premiestnených :count prvkov',\n    ],\n    'update'    => [\n        'home'      => 'Domovský priečinok',\n        'success'   => '[0] Aktualizovaných 0 prvkov|[1] Aktualizovaný 1 prvok|{2,4} Aktualizované :count prvky|{5,*} Aktualizovaných :count prvkov',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/general.php",
    "content": "<?php\n\nreturn [\n    'deselect_all'  => 'Odznačiť všetky',\n    'no'            => 'Nie',\n    'required'      => 'Povinné',\n    'select_all'    => 'Označiť všetky',\n    'success'       => [\n        'created'           => ':name vytvorené.',\n        'deleted'           => ':name odstránené.',\n        'deleted-cancel'    => ':name odstránené. :cancel.',\n        'updated'           => ':name aktualizované.',\n    ],\n    'yes'           => 'Áno',\n];\n"
  },
  {
    "path": "lang/sk/genres.php",
    "content": "<?php\n\nreturn [\n    'alternate_history' => 'Alternatívna história',\n    'cyberpunk'         => 'Cyberpunk',\n    'fantasy'           => 'Fantasy',\n    'historical'        => 'Historická',\n    'many_worlds'       => 'Viaceré svety',\n    'modern'            => 'Moderná',\n    'occult'            => 'Okultná',\n    'post_apocalyptic'  => 'Postapokalyptická',\n    'pulp'              => 'Pulp',\n    'science_fantasy'   => 'Science Fantasy',\n    'science_fiction'   => 'Science Fiction',\n    'space_opera'       => 'Space Opera',\n    'steampunk'         => 'Steampunk',\n    'superhero'         => 'Superhrdinská',\n    'urban_fantasy'     => 'Mestská fantasy',\n    'western'           => 'Western',\n];\n"
  },
  {
    "path": "lang/sk/header.php",
    "content": "<?php\n\nreturn [\n    'news'              => [\n        'title' => 'Novinky z Kanky',\n    ],\n    'notifications'     => [\n        'dismiss'   => 'Odznačiť',\n        'no-unread' => 'Žiadne neprečítané oznámenia',\n        'read_all'  => 'Označiť ako prečítané',\n    ],\n    'toggle_navigation' => 'Prepnúť navigáciu',\n    'user'              => [\n        'settings'      => 'Nastavenia',\n        'sign-out'      => 'Odhlásiť sa',\n        'upgrade'       => 'Upgrade',\n        'your-profile'  => 'Tvoj profil',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/helpers.php",
    "content": "<?php\n\nreturn [\n    'age'               => [],\n    'api-filters'       => [\n        'description'   => 'Nasledujúce filtre sú dostupné pre koncový bod API :name.',\n        'title'         => 'API filtre',\n    ],\n    'attributes'        => [\n        'link'  => 'Možnosti atribútu',\n    ],\n    'calendar-widget'   => [\n        'info'  => 'Prečo sa zobrazujú tieto pripomenutia?',\n        'title' => 'Kalendárový widget',\n    ],\n    'dice'              => [],\n    'entity_templates'  => [],\n    'filters'           => [\n        'title' => 'Ako používať filtre',\n    ],\n    'link'              => [\n        'description'   => 'Prepojenia medzi objektami tvojej kampane môžeš vytvoriť jednoducho pomocou nasledujúcich skratiek.',\n    ],\n    'map'               => [],\n    'pins'              => [],\n    'public'            => 'Pozri si video, ktoré vysvetľuje verejné kampane, na YouTube.',\n    'troubleshooting'   => [\n        'description'       => 'Člen tímu Kanky ťa poslal na túto stránku. Vyber si kampaň zo zoznamu a vygeneruj token, aby sme vedeli dočasne pristúpiť do tvojej kampane s rolou Admin.',\n        'errors'            => [\n            'token_exists'  => 'Token pre :campaign už existuje.',\n        ],\n        'save_btn'          => 'Vygenerovať token',\n        'select_campaign'   => 'Zvoľ kampaň',\n        'subtitle'          => 'Prosím, pošlite pomoc!',\n        'success'           => 'Prosím, skopíruj nasledujúci token a zašli ho niekomu z tímu Kanky.',\n        'title'             => 'Riešenie problémov',\n    ],\n    'widget-filters'    => [\n        'description'   => 'Filtrovať zobrazované objekty vo widgete nedávno upravených je možné použitím zoznamu polí v objektoch a ich hodnôt. Napr. môžeš použiť :example na vyfiltrovanie mŕtvych postáv typu NPC.',\n        'link'          => 'filter widgetu',\n        'title'         => 'Filtre pre nástenkové widgety',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/history.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'show-old'  => 'Zmeny',\n    ],\n    'cta'       => 'Zobraziť report všetkých nedávnych zmien v kampani.',\n    'empty'     => 'Bez hodnoty',\n    'filters'   => [\n        'all-actions'   => 'Všetky akcie',\n        'all-users'     => 'Všetci členovia',\n        'no-results'    => 'Žiadne výsledky na zobrazenie. Vyskúšaj iné filtre alebo sa sem vráť, keď niečo v kampani zmeníš.',\n    ],\n    'helpers'   => [\n        'base'      => 'Obrazovka ponúka prehľad nedávnych zmien v objektoch kampane až do :amount mesiacov, pričom najaktuálnejšie sa zobrazujú ako prvé.',\n        'changes'   => 'Nasledujúce polia obsahovali predtým tieto hodnoty.',\n    ],\n    'log'       => [\n        'create'        => ':user vytvorili :entity',\n        'create_post'   => ':user vytvorili poznámku \":post\" v :entity',\n        'delete'        => ':user zmazali :entity',\n        'delete_post'   => ':user zmazali poznámku v :entity',\n        'reorder_post'  => ':user zmenili poradie poznámok v :entity',\n        'restore'       => ':user obnovili :entity',\n        'update'        => ':user aktualizovali :entity',\n        'update_post'   => ':user aktualizovali poznámku \":post\" v :entity',\n    ],\n    'title'     => 'História',\n    'unknown'   => [\n        'entity'    => 'neznámy objekt',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/items.php",
    "content": "<?php\n\nreturn [\n    'bulk'          => [\n        'creators'  => [\n            'action'    => 'Aktivita pre tvorcov',\n            'remove'    => 'Odstrániť všetkých tvorcov',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nový predmet',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'creators'      => 'Tvorcovia',\n        'is_equipped'   => 'Vo vybavení',\n        'price'         => 'Cena',\n        'size'          => 'Veľkosť',\n        'weight'        => 'Váha',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'inventories'   => [],\n    'lists'         => [\n        'empty' => 'Pridať zbrane, artefakty alebo dôležité predmety do tvojho sveta.',\n    ],\n    'placeholders'  => [\n        'price' => 'Cena predmetu',\n        'size'  => 'veľkosť, váha, rozmery',\n        'type'  => 'zbraň, elixír, artefakt',\n        'weight'=> 'Váha predmetu',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'inventories'   => 'Objekty',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/sk/journals.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nový záznam v denníku',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'author'    => 'Autor',\n        'date'      => 'Dátum',\n    ],\n    'helpers'       => [],\n    'index'         => [],\n    'journals'      => [],\n    'placeholders'  => [\n        'author'    => 'Kto napísal tento záznam',\n        'date'      => 'Reálny dátum tohto záznamu',\n        'type'      => 'sedenie, one shot, návrh',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/sk/languages.php",
    "content": "<?php\n\nreturn [\n    'codes' => [\n        'ca'    => 'Katalánčina',\n        'cs'    => 'Čeština',\n        'de'    => 'Nemčina',\n        'el'    => 'Gréčtina',\n        'en'    => 'Angličtina',\n        'en-US' => 'Americká angličtina',\n        'es'    => 'Španielčina',\n        'fr'    => 'Francúzština',\n        'gl'    => 'Galícijčina',\n        'he'    => 'Hebrejčina',\n        'hr'    => 'Chorvátčina',\n        'hu'    => 'Maďarčina',\n        'it'    => 'Taliančina',\n        'nb'    => 'Nórština (Bokmal)',\n        'nl'    => 'Holandština',\n        'pl'    => 'Poľština',\n        'pt-BR' => 'Brazílska portugalčina',\n        'ru'    => 'Ruština',\n        'sk'    => 'Slovenčina',\n        'tr'    => 'Turečtina',\n    ],\n    'header'=> 'Jazyky',\n];\n"
  },
  {
    "path": "lang/sk/locations.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nové miesto',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'events'        => [],\n    'families'      => [],\n    'fields'        => [\n        'is_destroyed'  => 'Zničené',\n    ],\n    'helpers'       => [\n        'characters'    => 'Zobraz všetky postavy na tomto mieste a jemu podradených miestach, alebo len tie priamo na tomto mieste.',\n    ],\n    'hints'         => [\n        'is_destroyed'  => 'Toto miesto je zničené.',\n    ],\n    'index'         => [],\n    'items'         => [],\n    'journals'      => [],\n    'locations'     => [],\n    'map'           => [],\n    'maps'          => [],\n    'organisations' => [],\n    'panels'        => [],\n    'placeholders'  => [\n        'type'  => 'mesto, kráľovstvo, ruina',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/sk/maps/explore.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'enter-edit-mode'   => 'Zapnúť režim úprav',\n        'exit-edit-mode'    => 'Ukončiť režim úprav',\n        'finish-drawing'    => 'Ukončiť kresbu mnohouholníka',\n    ],\n    'notifications' => [\n        'start-drawing' => 'Klikni na mapu, ak chceš začať kresliť mnohouholník',\n    ],\n    'toggle'        => 'Otvoriť/zatvoriť všetky skupiny',\n];\n"
  },
  {
    "path": "lang/sk/maps/groups.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Pridať novú skupinu',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Odstránená :count skupina.|[2,4] Odstránené :count skupiny.|[5,*] Odstránených :count skupín.',\n        'patch'     => '{1} Aktualizovaná :count skupina.|[2,4] Aktualizované :count skupiny.|[5,*] Aktualizovaných :count skupín.',\n    ],\n    'create'        => [\n        'success'   => 'Skupina :name vytvorená.',\n        'title'     => 'Nová skupina',\n    ],\n    'delete'        => [\n        'success'   => 'Skupina :name odstránená.',\n    ],\n    'edit'          => [\n        'success'   => 'Skupina :name aktualizovaná.',\n        'title'     => 'Upraviť skupinu :name',\n    ],\n    'fields'        => [\n        'is_shown'  => 'Zobraziť značky skupiny',\n        'position'  => 'Pozícia',\n    ],\n    'helper'        => [\n        'amount_v3' => 'Značky môžu byť zoskupené pomocou mapových skupín. Kliknutím na skupinu je možné pri objavovaní na mape zobraziť alebo skryť všetky jej značky.',\n    ],\n    'hints'         => [\n        'is_shown'  => 'Aktivovaním sa značky skupiny zobrazia na mape automaticky.',\n    ],\n    'index'         => [\n        'title' => 'Skupiny :name',\n    ],\n    'pitch'         => [],\n    'placeholders'  => [\n        'name'          => 'Obchody, Poklady, NPC',\n        'position'      => 'Nepovinné pole na nastavenie poradia zobrazenia skupín.',\n        'position_list' => 'Po :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Uložiť nové poradie',\n        'success'   => '{1} Preuskupená :count skupina.|[2,4] Preskupené :count skupiny.|[5,*] Preskupených :count skupín.',\n        'title'     => 'Preskupiť skupiny',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/maps/layers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Pridať novú vrstvu',\n    ],\n    'base'          => 'Základná vrstva',\n    'bulks'         => [\n        'delete'    => '{1} Odstránená :count vrstva.|[2,4] Odstránené :count vrstvy.|[5,*] Odstránených :count vrstiev.',\n        'patch'     => '{1} Aktualizovaná :count vrstva.|[2,4] Aktualizované :count vrstvy.|[5,*] Aktualizovaných :count vrstiev.',\n    ],\n    'create'        => [\n        'success'   => 'Vrstva :name vytvorená.',\n        'title'     => 'Nová vrstva',\n    ],\n    'delete'        => [\n        'success'   => 'Vrstva :name odstránená.',\n    ],\n    'edit'          => [\n        'success'   => 'Vrstva :name aktualizovaná.',\n        'title'     => 'Upraviť vrstvu :name',\n    ],\n    'fields'        => [\n        'position'  => 'Pozícia',\n        'type'      => 'Typ vrstvy',\n    ],\n    'helper'        => [\n        'amount_v2' => 'Nahraj vrstvy k mape, ak chceš zmeniť obrázok v pozadí značiek.',\n        'is_real'   => 'Vrstvy nie sú dostupné, ak používaš OpenStreetMaps.',\n    ],\n    'index'         => [\n        'title' => 'Vrstvy :name',\n    ],\n    'pitch'         => [],\n    'placeholders'  => [\n        'name'          => 'Podsvetie, Úroveň 2, Vrak lode',\n        'position'      => 'Nepovinné pole na nastavenie poradia zobrazenia vrstiev.',\n        'position_list' => 'Po :name',\n    ],\n    'reorder'       => [\n        'save'      => 'Uložiť nové poradie',\n        'success'   => '{1} Preskupená :count vrstva.|[2,4] Preskupené :count vrstvy.|[5,*] Preskupených :count vrstiev.',\n        'title'     => 'Preskupiť vrstvy',\n    ],\n    'short_types'   => [\n        'overlay'       => 'Overlay',\n        'overlay_shown' => 'Overlay (automatické zobrazenie)',\n        'standard'      => 'Štandardné',\n    ],\n    'types'         => [\n        'overlay'       => 'Overlay (zobrazenie nad aktívnou vrstvou)',\n        'overlay_shown' => 'Overlay bude zobrazený štandardne',\n        'standard'      => 'Štandardná vrstva (prepnúť medzi vrstvami)',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/maps/markers.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'entry'             => 'Pre túto značku zapíš vlastné vstupné políčko.',\n        'remove'            => 'Odstrániť značku',\n        'reset-polygon'     => 'Resetovať umiestnenie',\n        'save_and_explore'  => 'Uložiť a otvoriť',\n        'start-drawing'     => 'Zapnúť kreslenie',\n        'update'            => 'Upraviť značku',\n    ],\n    'bulks'         => [\n        'delete'    => '{1} Odstránená :count značka.|[2,4] Odstránené :count značky.|[5,*] Odstránených :count značiek.',\n        'patch'     => '{1} Aktualizovaná :count značka.|[2,4] Aktualizované :count značky.|[5,*] Aktualizovaných :count značiek.',\n    ],\n    'circle_sizes'  => [\n        'custom'    => 'Vlastná',\n        'huge'      => 'Obrovská',\n        'large'     => 'Veľká',\n        'small'     => 'Malá',\n        'standard'  => 'Štandardná',\n        'tiny'      => 'Drobná',\n    ],\n    'create'        => [\n        'success'   => 'Značka :name vytvorená.',\n        'title'     => 'Nová značka',\n    ],\n    'delete'        => [\n        'success'   => 'Značka :name odstránená.',\n    ],\n    'details'       => [\n        'from-entity'   => 'Z objektu',\n    ],\n    'edit'          => [\n        'success'   => 'Značka :name aktualizovaná.',\n        'title'     => 'Upraviť značku :name',\n    ],\n    'fields'        => [\n        'bg_colour'     => 'Farba pozadia',\n        'circle_radius' => 'Polomer kruhu',\n        'copy_elements' => 'Kopírovať prvky',\n        'custom_icon'   => 'Vlastný symbol',\n        'custom_shape'  => 'Vlastný tvar',\n        'font_colour'   => 'Farba symbolu',\n        'group'         => 'Skupina značky',\n        'icon'          => 'Symbol',\n        'is_draggable'  => 'Premiestniteľná',\n        'latitude'      => 'Zemepisná šírka',\n        'longitude'     => 'Zemepisná dĺžka',\n        'opacity'       => 'Nepriehľadnosť',\n        'pin_size'      => 'Veľkosť značky',\n        'polygon_style' => [\n            'stroke'            => 'Farba ťahu',\n            'stroke-opacity'    => 'Nepriehľadnosť ťahu',\n            'stroke-width'      => 'Hrúbka ťahu',\n        ],\n        'popupless'     => 'Bublina náhľadu',\n        'size'          => 'Veľkosť',\n    ],\n    'helpers'       => [\n        'base'                      => 'Pridaj značky na mapu kliknutím na hociktorý bod na nej.',\n        'copy_elements'             => 'Kopírovať skupiny, vrstvy a značky.',\n        'copy_elements_to_campaign' => 'Kopírovať skupiny, vrstvy a značky na mapách. Značky prepojené s objektami budú konverované na štandardné značky.',\n        'custom_icon_v2'            => 'Použi symboly z :fontawesome, :rpgawesome alebo vlastný SVG symbol. Zisti, ako na to v :docs.',\n        'custom_radius'             => 'Vyber si vlastnú veľkosť z možností v menu, ak chceš definovať veľkosť.',\n        'draggable'                 => 'Aktivovaním umožníš premiestnenie značky v Prieskumníkovi.',\n        'is_popupless'              => 'Zruší zobrazenie bubliny s náhľadom pri umiestnení kurzoru myši nad značkou.',\n        'label'                     => 'Popis sa zobrazuje ako odsek textu na mape. Jeho obsah bude názov značky daného objektu.',\n        'polygon'                   => [\n            'edit'  => 'Klikni na mapu, ak chceš pridať danú pozíciu medzi koordináty viacuholníka.',\n        ],\n    ],\n    'hints'         => [\n        'entry' => 'Uprav značku, ak jej chceš pridať vlastný záznam.',\n    ],\n    'icons'         => [\n        'custom'        => 'Vlastný',\n        'entity'        => 'Objekt',\n        'exclamation'   => 'Výkričník',\n        'marker'        => 'Značka',\n        'question'      => 'Otáznik',\n    ],\n    'index'         => [\n        'title' => 'Značky :name',\n    ],\n    'pitches'       => [\n        'poly'  => 'Nakresli vlastné mnohouholníkové tvary, ktoré stvárňujú hranice alebo nepravidelné objekty.',\n    ],\n    'placeholders'  => [\n        'custom_icon'   => 'Vyskúšaj :example1 alebo :example2',\n        'custom_shape'  => '100,100 200,240 340,110',\n        'name'          => 'Povinný ak nie je zvolený žiaden objekt',\n    ],\n    'presets'       => [\n        'helper'    => 'Klikni na prednastavenie, aby sa načítalo, alebo vytvor nové.',\n    ],\n    'shapes'        => [\n        '0' => 'Kruh',\n        '1' => 'Štvorec',\n        '2' => 'Trojuholník',\n        '3' => 'Vlastný',\n    ],\n    'sizes'         => [\n        '0' => 'Miniatúrny',\n        '1' => 'Štandardný',\n        '2' => 'Malý',\n        '3' => 'Veľký',\n        '4' => 'Obrovský',\n    ],\n    'tabs'          => [\n        'circle'    => 'Kruh',\n        'label'     => 'Menovka',\n        'marker'    => 'Značka',\n        'polygon'   => 'Viacuholník',\n        'preset'    => 'Prednastavenie',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/maps.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'back'      => 'Späť na :name',\n        'edit'      => 'Upraviť mapu',\n        'explore'   => 'Prieskumník',\n    ],\n    'create'        => [\n        'title' => 'Nová mapa',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'errors'        => [\n        'chunking'  => [\n            'error'     => 'Pri rozdeľovaní mapy na bloky nastala chyba. Prosím, obráť sa ohľadom pomoci na náš tím na :discord.',\n            'running'   => [\n                'edit'      => 'Mapa počas rozdeľovania na bloky nemôže byť upravovaná.',\n                'explore'   => 'Mapa počas rozdeľovania na bloky nemôže byť zobrazená.',\n                'time'      => 'Môže to teraz trvať niekoľko minút až hodín, v závislosti od veľkosti mapy.',\n            ],\n        ],\n        'dashboard' => [\n            'missing'   => 'Táto mapa vyžaduje obrázok, aby mohla byť zobrazená na nástenke.',\n        ],\n        'explore'   => [\n            'missing'   => 'Na použitie Prieskumníka budeš musieť najprv pridať obrázok mapy.',\n        ],\n    ],\n    'fields'        => [\n        'center_marker'     => 'Značka',\n        'center_x'          => 'Štandardná zemepisná dĺžka',\n        'center_y'          => 'Štandardná zemepisná šírka',\n        'centering'         => 'Vystredniť',\n        'distance_measure'  => 'Meranie vzdialenosti',\n        'distance_name'     => 'Označenie mierky vzdialenosti',\n        'grid'              => 'Mriežka',\n        'has_clustering'    => 'Značka zhluku',\n        'initial_zoom'      => 'Prvotné priblíženie',\n        'is_real'           => 'Použiť OpenStreetMaps',\n        'max_zoom'          => 'Maximálne priblíženie',\n        'min_zoom'          => 'Minimálne priblíženie',\n        'tabs'              => [\n            'coordinates'   => 'Koordináty',\n            'marker'        => 'Značka',\n        ],\n    ],\n    'helpers'       => [\n        'center'                => 'Zmenou týchto hodnôt vieš kontrolovať, na ktorú oblasť mapy bude zameraný náhľad. Ak hodnoty ponecháš prázdne, bude zameranie na stred mapy.',\n        'centering'             => 'Vystrednenie značky bude prioritou pred štandardnými koordinátmi.',\n        'chunked_zoom'          => 'Automaticky zhlukuj značky, keď sa nachádzajú blízko seba.',\n        'distance_measure'      => 'Pridaním merania vzdialenosti sa aktivuje nástroj merania v Prieskumníkovi.',\n        'distance_measure_2'    => 'Aby zodpovedalo 100 pixelov 1 km, zadaj hodnotu 0.0041.',\n        'grid'                  => 'Definuj veľkosť mriežky, ktorá sa zobrazí v Prieskumníkovi.',\n        'has_clustering'        => 'Automaticky zhlukuj značky, keď sa nachádzajú blízko seba.',\n        'initial_zoom'          => 'Úroveň prvotného priblíženia mapy, s ktorou sa zobrazí na začiatku. Štandardná hodnota je :default, pričom najvyššia povolená hodnota je :max a najnižšia :min.',\n        'is_real'               => 'Použi toto nastavenie, ak chceš použiť mapu reálneho sveta namiesto nahraného obrázku mapy. Toto nastavenie deaktivuje vrstvy.',\n        'max_zoom'              => 'Mapa môže byť priblížená maximálne na túto hodnotu. Štandardná hodnota je :default, najvyššia povolená hodnota je :max.',\n        'min_zoom'              => 'Mapa môže byť oddialená maximálne na túto hodnotu. Štandardná hodnota je :default, najnižšia povolená hodnota je :max.',\n        'missing_image'         => 'Na použitie vrstiev a značiek budeš musieť najprv pridať obrázok mapy.',\n    ],\n    'index'         => [],\n    'maps'          => [],\n    'panels'        => [\n        'groups'    => 'Skupiny',\n        'layers'    => 'Vrstvy',\n        'legend'    => 'Legenda',\n        'markers'   => 'Značky',\n        'settings'  => 'Nastavenia',\n    ],\n    'placeholders'  => [\n        'center_marker' => 'Ponechaj prázdne, ak sa má mapa zobraziť nastred',\n        'center_x'      => 'Ponechaj prázdne, ak sa má mapa zobraziť nastred',\n        'center_y'      => 'Ponechaj prázdne, ak sa má mapa zobraziť nastred',\n        'distance_name' => 'km, míle, stopy, hamburgery',\n        'grid'          => 'Vzdialenosť v pixloch medzi prvkami mriežky. Ponechaj prázdne, ak chceš mriežku vypnúť.',\n        'name'          => 'Názov mapy',\n        'type'          => 'Jaskyňa, Mesto, Galaxia',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'maps'  => 'Mapy',\n        ],\n    ],\n    'tooltips'      => [\n        'chunking'  => [\n            'running'   => 'Mapa sa rozdeľuje na bloky. Tento proces môže trvať niekoľko minút až hodín.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/sk/misc.php",
    "content": "<?php\n\nreturn [\n    'ads'   => [\n        'member'    => 'Staň sa členom.',\n        'remove_v5' => 'Kanka staviame iba dvaja. Podpor naše úsilie a užívaj si aplikáciu bez reklám za menej ako stojí fajnová kávička.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/notes.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nová poznámka',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'notes' => 'Podradená poznámka',\n    ],\n    'helpers'       => [],\n    'hints'         => [],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Uchovávaj nápady, referencie, pravidlá alebo informácie o tom, čo nepasuje inam.',\n    ],\n    'placeholders'  => [\n        'note'  => 'Vybrať nadradenú poznámku',\n        'type'  => 'náboženstvo, rasa, politický systém',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/sk/notifications.php",
    "content": "<?php\n\nreturn [\n    'campaign'          => [\n        'application'       => [\n            'approved'              => 'Tvoja prihláška do kampane :campaign bola schválená.',\n            'approved_message'      => 'Tvoja prihláška do kampane :campaign bola schválená. Správa: :reason',\n            'new'                   => 'Nová prihláška pre :campaign.',\n            'rejected'              => 'Tvoja prihláška do kampane :campaign bola odmietnutá. Uvedený dôvod: :reason',\n            'rejected_no_message'   => 'Tvoja prihláška do kampane :campaign bola odmietnutá.',\n        ],\n        'asset_export'      => 'Export materiálov kampane je dostupný. Link je dostupný na :time min.',\n        'boost'             => [\n            'add'           => 'Kampaň :campaign bola boostnutá používateľom :user.',\n            'remove'        => 'Kampaň :campaign už nie je boostovaná používateľom :user.',\n            'superboost'    => ':user superboostol kampaň :campaign.',\n        ],\n        'deleted'           => 'Kampaň :campaign bola zmazaná.',\n        'export'            => 'Export kampane je dostupný. Link je platný po dobu :time minút.',\n        'export_error'      => 'Počas exportu tvojej kampane došlo k chybe. Prosím, kontaktuj nás, ak problém pretrváva.',\n        'hidden'            => 'Kampaň :campaign je teraz skrytá a nezobrazuje sa na stránke verejných kampaní.',\n        'import'            => [\n            'failed'    => 'Import kampane :campaign zlyhal.',\n            'success'   => 'Import kampane :campaign skončil.',\n        ],\n        'join'              => ':user pristúpil do kampane :campaign.',\n        'leave'             => ':user opustil kampaň :campaign.',\n        'plugin'            => [\n            'deleted'   => 'Plugin :plugin bol odstránený z trhoviska a tvojej kampane :campaign.',\n        ],\n        'premium'           => [\n            'add'       => 'Prémiové funkcionality boli odomknuté pre kampaň :campaign užívateľom :user.',\n            'remove'    => ':user už neposkytuje prémiové funkcionality pre kampaň :campaign.',\n        ],\n        'removed-image'     => 'Obrázok alebo hlavička :entity bola odstránená kvôli žiadosti na základe autorských práv.',\n        'role'              => [\n            'add'       => 'Bola ti pridaná rola :role v kampani :campaign.',\n            'remove'    => 'Bola ti odobraná rola :role v kampani :campaign.',\n        ],\n        'troubleshooting'   => [\n            'joined'    => 'Člen tímu Kanky :user pristúpil do kampane :campaign.',\n        ],\n    ],\n    'clear'             => [\n        'action'    => 'Vymazať všetky',\n        'success'   => 'Notifikácie vymazané.',\n        'title'     => 'Vymazať notifikácie',\n    ],\n    'features'          => [\n        'approved'  => 'Tvoj nápad :feature bol schválený.',\n        'finished'  => 'Tvoj nápad :feature je teraz dostupný v Kanke!',\n        'rejected'  => 'Tvoj nápad :feature bol odmietnutý, dôvod: :reason.',\n    ],\n    'header'            => '{1} Máš :count notifikáciu.|[2,4] Máš :count notifikácie.|[5,*] Máš :count notifikácií.',\n    'index'             => [\n        'title' => 'Notifikácie',\n    ],\n    'map'               => [\n        'chunked'   => 'Mapa :name ukončila rozmieňanie a je teraz použiteľná.',\n    ],\n    'no_notifications'  => 'Aktuálne neexistujú žiadne notifikácie.',\n    'subscriptions'     => [\n        'charge_fail'   => 'Pri spracovaní tvojej platby došlo k chybe. Prosím, počkaj chvíľu, zatiaľ čo sa o jej spracovanie opäť pokúšame. Ak sa nič nezmení, kontaktuj nás.',\n        'deleted'       => 'Tvoje predplatné Kanky bolo zrušené po viacerých neúspešných pokusoch o žiadosť o platbu prostredníctvom tvojej karty. Prosím, uprav detaily platby v Nastaveniach predplatného.',\n        'ended'         => 'Tvoje predplatné Kanky bolo ukončené. Tvoje boosty kampaní a roly na Discorde boli odstránené. Dúfame, že sa čoskoro zasa uvidíme!',\n        'failed'        => 'Tvoje predplatné Kanky bolo zrušené po prekročení limitu pokusov o spracovanie platby. Prosím, prejdi na Nastavenia predplatného a skús zmeniť tvoje detaily platby.',\n        'started'       => 'Tvoje predplatné Kanky bolo spustené.',\n        'trial'         => 'Tvoja skúšobná doba Kanky vypršala. Dúfame, že sa ti páčila a veríme, že ťa uvidíme čoskoro opäť!',\n    ],\n    'unread'            => 'Nová notifikácia',\n];\n"
  },
  {
    "path": "lang/sk/onboarding/tags.php",
    "content": "<?php\n\nreturn [\n    'npcs'  => 'NPC-čka',\n];\n"
  },
  {
    "path": "lang/sk/organisations.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nová organizácia',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'is_defunct'    => 'Nečinná',\n        'members'       => 'Členovia',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_defunct'    => 'Táto organizácia už ukončila činnosť.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Vytvor cechy, frakcie alebo tajné spolky, ktoré tvoria mocenské štruktúry tvojho sveta.',\n    ],\n    'members'       => [\n        'actions'       => [\n            'add_multiple'  => 'Pridať členov',\n        ],\n        'create'        => [\n            'helper'            => 'Pridať jedného alebo viacerých členov k :name.',\n            'success_multiple'  => '{1} Pridaný :count člen k :name.|[2,4] Pridaní :count členovia k :name.|[5,*] Pridaných 5 členov k :name.',\n        ],\n        'destroy'       => [\n            'success'   => 'Člen odstránený z organizácie.',\n        ],\n        'edit'          => [\n            'helper'    => 'Zmeň stav členstva pre :name.',\n            'title'     => 'Upraviť člena organizácie :name',\n        ],\n        'fields'        => [\n            'parent'    => 'Nadriadená osoba',\n            'pinned'    => 'Pripnuté',\n            'role'      => 'Rola',\n            'status'    => 'Stav členstva',\n        ],\n        'helpers'       => [\n            'all_members'   => 'Všetky postavy, ktoré sú členmi tejto a podradených organizácií.',\n            'members'       => 'Všetky postavy, ktoré sú členmi tejto organizácie',\n            'pinned'        => 'Zvoľ, či toto členstvo má byť zobrazené v sekcii pripnutých v prehľade priradených objektov.',\n        ],\n        'pinned'        => [\n            'both'  => 'Oboje',\n            'none'  => 'Žiadne',\n        ],\n        'placeholders'  => [\n            'parent'    => 'Kto je nadriadená osoba tohto člena?',\n            'role'      => 'veliteľ, členka, veľkňaz, majsterka špiónov',\n        ],\n        'status'        => [\n            'active'    => 'Aktívne členstvo',\n            'inactive'  => 'Neaktívne členstvo',\n            'unknown'   => 'Neznámy stav',\n        ],\n    ],\n    'organisations' => [],\n    'placeholders'  => [\n        'type'  => 'kult, gang, bunka revolúcie, fandom',\n    ],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/sk/pagination.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; Predchádzajúca',\n    'next'     => 'Nasledujúca &raquo;',\n];\n"
  },
  {
    "path": "lang/sk/partials.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'description'   => 'Zadaná hodnota nebola správna.',\n        'title'         => 'Ojojoj!',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/passwords.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'password' => 'Heslo sa musí zhodovať a obsahovať najmenej šesť znakov.',\n    'reset'    => 'Heslo bolo zmenené!',\n    'sent'     => 'Pripomienka k zmene hesla bola odoslaná!',\n    'token'    => 'Klúč pre obnovu hesla je neplatný.',\n    'user'     => 'Nepodarilo sa nájsť používateľa s touto e-mailovou adresou.',\n];\n"
  },
  {
    "path": "lang/sk/patreon.php",
    "content": "<?php\n\nreturn [\n    'pledges'   => [\n        'elemental' => 'Elemental',\n        'goblin'    => 'Goblin',\n        'kobold'    => 'Kobold',\n        'owlbear'   => 'Owlbear',\n        'wyvern'    => 'Wyvern',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/permissions.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'delete'    => 'Oprávnenie na zmazanie tohto prvku',\n        'edit'      => 'Oprávnenie na úpravu tohto prvku',\n        'view'      => 'Oprávnenie na zobrazenie tohto prvku',\n    ],\n    'members'   => [\n        'inherited' => ':member má toto oprávnenie, lebo je súčasťou role :role.',\n    ],\n    'roles'     => [\n        'inherited' => 'Role :role má toto oprávnenie na modul :module.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/pins.php",
    "content": "<?php\n\nreturn [\n    'learn-more'    => 'Zisti viac o pripnutí v našej dokumentácii.',\n    'options'       => [\n        'no'    => 'Nepripnuté',\n        'yes'   => 'Pripnuté na stránke náhľadu objektu',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/playstyles.php",
    "content": "<?php\n\nreturn [\n    'casual-drop-in-friendly'       => 'Voľný / Flexibilný',\n    'character-focused'             => 'Zameraný na postavy',\n    'combat-focused'                => 'Zameraný na boj',\n    'episodic-one-shot-friendly'    => 'Epizodický / One-Shotový',\n    'exploration-focused'           => 'Zameraný na objavovanie',\n    'linear-gm-led'                 => 'Lineárny / Vedený GM',\n    'long-term-campaign'            => 'Dlhotrvajúca kampan',\n    'narrative-first'               => 'Príbeh na prvom mieste',\n    'roleplay-heavy'                => 'Zaťažený na Role-Play',\n    'roleplay-light'                => 'Role-Play nie je nutný',\n    'rules-light'                   => 'Pravidlovo ľahký',\n    'sandbox-player-driven'         => 'Sandbox / Hnaný hráčstvom',\n    'serious-immersive'             => 'Vážny / Imerzívny',\n    'story-driven'                  => 'Hnaný príbehom',\n    'tactical-crunchy'              => 'Taktický / Tabuľkový',\n];\n"
  },
  {
    "path": "lang/sk/post_layouts.php",
    "content": "<?php\n\nreturn [\n    'character_orgs'        => 'Organizácie postavy',\n    'connection_map'        => 'Mapa prepojení',\n    'helper'                => 'Táto poznámka je nastavená, aby zobrazila podstránku :subpage objektu.',\n    'location_characters'   => 'Postavy miesta',\n    'location_events'       => 'Udalosti miest',\n    'location_quests'       => 'Úlohy na mieste',\n    'pitch'                 => [\n        'custom'    => 'Zobraziť obsah pre podstránky tohto objektu priamo v prehľade s článkami. Napr. zobrazenie inventára.',\n        'title'     => 'Rozšírené rozmiestnenie článku.',\n    ],\n    'premium'               => 'Niektoré možnosti rozmiestnenia sú neaktívne, pretože požadujú prémiovú kampaň.',\n    'quest_elements'        => 'Časti úlohy',\n];\n"
  },
  {
    "path": "lang/sk/posts.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nový komentár',\n    ],\n    'fields'        => [\n        'name'  => 'Názov',\n    ],\n    'helpers'       => [\n        'new'   => 'Pridaj nový komentár k tomuto objektu.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Názov komentára',\n    ],\n    'position'      => [\n        'dont_change'   => 'Nezmeniť',\n        'first'         => 'Prvý',\n        'last'          => 'Posledný',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/presets.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'create'    => 'Vytroviť nové prednastavenie',\n    ],\n    'create'        => [\n        'success'   => 'Prednastavenie :name vytvorené.',\n        'title'     => 'Nové prednastavenie',\n    ],\n    'destroy'       => [\n        'success'   => 'Prednastavenie :name zničené.',\n    ],\n    'edit'          => [\n        'success'   => 'Prednastavenie :name upravené.',\n        'title'     => 'Upraviť prednastavenie :name',\n    ],\n    'fields'        => [\n        'name'  => 'Názov prednastavenia',\n    ],\n    'lists'         => [\n        'empty' => 'V kampani sa aktuálne nenachádzajú žiadne prednastavenia.',\n    ],\n    'placeholders'  => [\n        'name'  => 'Zvolený názov',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/profiles.php",
    "content": "<?php\n\nreturn [\n    'appearance'                    => [],\n    'avatar'                        => [\n        'success'   => 'Avatar aktualizovaný.',\n    ],\n    'campaign_switcher_order_by'    => [],\n    'edit'                          => [\n        'success'   => 'Profil upravený',\n    ],\n    'editors'                       => [],\n    'fields'                        => [\n        'avatar'                    => 'Avatar',\n        'bio'                       => 'Životopis',\n        'email'                     => 'E-mail',\n        'hide_subscription'         => 'Skryť moje meno zo :hall_of_fame.',\n        'last_login_share'          => 'Zdieľaj s ostatnými členmi kampane tvoj posledný čas online.',\n        'link'                      => 'Sociálne siete',\n        'login_sharing'             => 'Posledné zdieľanie prihlásenia',\n        'name'                      => 'Meno',\n        'new_password'              => 'Nové heslo (voliteľné)',\n        'new_password_confirmation' => 'Potvrdiť nové heslo',\n        'newsletter'                => 'Prajem si, aby ste ma niekedy kontaktovali mailom.',\n        'password'                  => 'Súčasné heslo',\n        'profile-name'              => 'Profilové meno',\n        'pronouns'                  => 'Zámená',\n        'settings'                  => 'Nastavenia',\n        'subscription_hiding'       => 'Predplatné ukryté',\n        'theme'                     => 'Téma',\n    ],\n    'helpers'                       => [\n        'link'          => 'Zmeň spôsob, akým sa sociálne siete zobrazujú na tvojom :profile a na :marketplace. Ak ponecháš prázdne, nebudú sa zobrazovať.',\n        'profile-name'  => 'Zmeň, ako vyzerá tvoje meno na tvojom :profile a :marketplace. Ak ho ponecháš prázdne, bude sa používať meno tvojho konta.',\n        'pronouns'      => 'Zmeň spôsob, akým sa zobrazujú zámená na tvojom :profile a na :marketplace. Ak ponecháš prázdne, nebudú sa zobrazovať.',\n    ],\n    'link'                          => [\n        'button'    => 'Profil :name na sociálnych sieťach',\n    ],\n    'newsletter'                    => [\n        'helpers'   => [\n            'header'    => 'Prihlás sa na odoberanie e-mailových newsletterov, nech vieš, čo sa s Kankou deje.',\n        ],\n        'options'   => [\n            'monthly'   => 'Kanka newsletter',\n        ],\n        'title'     => 'Newsletter',\n        'updated'   => 'Nastavenia newsletteru aktualizované.',\n    ],\n    'password'                      => [\n        'success'   => 'Heslo zmenené',\n    ],\n    'placeholders'                  => [\n        'bio'                       => 'Krátky životopis alebo informácia o tebe, ktorá sa zobrazí na verejnom profile.',\n        'email'                     => 'Tvoja e-mailová adresa',\n        'name'                      => 'Tvoje meno, ako sa bude zobrazovať',\n        'new_password'              => 'Tvoje nové heslo',\n        'new_password_confirmation' => 'Potvrď tvoje nové heslo',\n        'password'                  => 'Zadaj tvoje aktuálne heslo',\n    ],\n    'sections'                      => [\n        'dangerzone'    => 'Nebezpečná zóna',\n        'delete'        => [\n            'confirm'       => 'Áno, odstráň moje konto',\n            'delete'        => 'Odstrániť moje konto',\n            'goodbye'       => 'Ak to chceš, prepíš :code do políčka nižšie.',\n            'helper'        => 'Odstránenie tvojho konta odstráni aj všetky kampane, ktorých si jediným členom. Táto akcia je trvalá a nemôže byť vrátená späť.',\n            'subscribed'    => 'Prosím, ukonči tvoje preplatné, aby bolo možné odstrániť tvoje konto.',\n            'title'         => 'Odstránenie môjho konta',\n            'warning'       => 'Odstránením tvojho konta sa odstránia aj všetky tvoje údaje. Chceš to naozaj urobiť?',\n        ],\n        'password'      => [\n            'title' => 'Zmena hesla',\n        ],\n    ],\n    'settings'                      => [\n        'helpers'   => [\n            'bio'       => 'Životopis je viditeľný na tvojom :link.',\n            'profile'   => 'verejnom profile',\n        ],\n        'success'   => 'Nastavenia zmenené.',\n    ],\n    'theme'                         => [\n        'success'   => 'Téma zmenená.',\n        'themes'    => [\n            'dark'      => 'Dark',\n            'default'   => 'Štandard',\n            'future'    => 'Future',\n            'midnight'  => 'Midnight Blue',\n        ],\n    ],\n    'title'                         => 'Úprava profilu',\n    'workflows'                     => [\n        'created'   => 'Prejsť na vytvorený objekt',\n        'default'   => 'Zoznam objektov',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/quests.php",
    "content": "<?php\n\nreturn [\n    'create'        => [\n        'title' => 'Nová úloha',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'elements'      => [\n        'create'        => [\n            'success'   => 'Objekt :entity pridaný k úlohe.',\n            'title'     => 'Nový prvok pre :name',\n        ],\n        'destroy'       => [\n            'success'   => 'Prvok úlohy :entity odstránený.',\n        ],\n        'edit'          => [\n            'success'   => 'Prvok úlohy :entity aktualizovaný.',\n            'title'     => 'Aktualizovať prvok úlohy pre :name',\n        ],\n        'fields'        => [\n            'copy_entity_entry' => 'Použiť popis objektu',\n            'entity_or_name'    => 'Zvoľ buď objekt kampane, alebo pomenuj tento prvok.',\n        ],\n        'helpers'       => [\n            'copy_entity_entry' => 'Zobraziť prepojený text objektu namiesto vlastného popisu.',\n        ],\n        'placeholders'  => [\n            'name'  => 'Názov prvku',\n        ],\n    ],\n    'fields'        => [\n        'copy_elements' => 'Kopírovať objekty priradené úlohám',\n        'date'          => 'Dátum',\n        'element_role'  => 'Rola',\n        'instigator'    => 'Podnet od',\n        'is_completed'  => 'Splnená',\n        'location'      => 'Štartovacie miesto',\n        'role'          => 'Rola',\n        'status'        => 'Stav',\n    ],\n    'helpers'       => [\n        'is_completed'  => 'Daná úloha je považovaná za splnenú.',\n        'status'        => 'Aktuálny stav danej úlohy.',\n    ],\n    'hints'         => [\n        'is_abandoned'  => 'Úloha bola opustená.',\n        'is_completed'  => 'Úloha je splnená.',\n        'is_ongoing'    => 'Plnenie úlohy prebieha.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Vytvor úlohy pre zaznamenávanie cieľov, príbehových liniek alebo motivácií postáv.',\n    ],\n    'placeholders'  => [\n        'date'      => 'Reálny dátum zadania úlohy',\n        'entity'    => 'Názov prvku v úlohe',\n        'location'  => 'Štartovacie miesto úlohy',\n        'role'      => 'Rola objektu v úlohe',\n        'type'      => 'príbeh postavy, bočná úloha, hlavný dej',\n    ],\n    'show'          => [\n        'actions'   => [\n            'add_element'   => 'Pridať prvok',\n        ],\n        'tabs'      => [\n            'elements'  => 'Prvky',\n        ],\n    ],\n    'status'        => [\n        'abandoned'     => 'Opustená',\n        'completed'     => 'Splnená',\n        'not_started'   => 'Nezačatá',\n        'ongoing'       => 'Prebiehajúca',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/races.php",
    "content": "<?php\n\nreturn [\n    'characters'    => [],\n    'create'        => [\n        'title' => 'Nový druh',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'members'   => 'Príslušníci',\n    ],\n    'helpers'       => [],\n    'hints'         => [\n        'is_extinct'    => 'Tento druh vyhynul.',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Definuj druh, kultúru alebo ľud, ktorý obýva tvoj svet.',\n    ],\n    'members'       => [\n        'create'    => [\n            'helper'    => 'Pridaj jednu alebo viac postáv k :name.',\n            'submit'    => 'Pridaj príslušníkov',\n            'success'   => '{0} Nebol pridaný žiaden príslušník.|{1} Bol pridaný 1 príslušník.|[2,4] :count príslušníci boli pridaní.|[5,*] :count príslušníkov bolo pridaných.',\n            'title'     => 'Nový príslušníci',\n        ],\n    ],\n    'placeholders'  => [\n        'type'  => 'Človek, Fey, Borg',\n    ],\n    'races'         => [],\n    'show'          => [],\n];\n"
  },
  {
    "path": "lang/sk/redirects.php",
    "content": "<?php\n\nreturn [\n    'session_timeout'   => 'Čas vášho pripojenia vypršal. Prosím, opätovne sa prihláste.',\n    'unknown_entity'    => 'Prepáč, nevieme, čo je \":entity\".',\n];\n"
  },
  {
    "path": "lang/sk/releases.php",
    "content": "<?php\n\nreturn [\n    'categories'    => [\n        'event'         => 'Udalosť',\n        'livestream'    => 'Livestream',\n        'other'         => 'Iné',\n        'release'       => 'Verzia',\n        'vote'          => 'Komunitné hlasovanie',\n    ],\n    'index'         => [\n        'description'   => 'Posledné novinky o kanka.io',\n        'title'         => 'Verzie',\n    ],\n    'post'          => [\n        'footer'    => 'Od :name :date',\n    ],\n    'show'          => [\n        'return'    => 'Späť na Verzie',\n        'title'     => 'Verzia :name',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/rpg_systems.php",
    "content": "<?php\n\nreturn [\n    'names'     => [\n        '0' => 'D&D',\n        '1' => 'Pathfinder',\n        '10'=> 'GURPS',\n        '11'=> 'DSA',\n        '12'=> 'Chronicles of Darkness',\n        '13'=> 'Powered by the Apocalypse',\n        '2' => 'Stars Without Numbers',\n        '3' => 'Savage Worlds',\n        '4' => 'Dungeon World',\n        '5' => 'Genesys',\n        '6' => 'Starfinder',\n        '7' => 'Exalted',\n        '8' => 'Shadowrun',\n        '9' => 'Fate',\n    ],\n    'systems'   => [\n        'dnd5'  => 'D&D 5e',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/search/fulltext.php",
    "content": "<?php\n\nreturn [\n    'searching' => 'Prehľadávajú sa objekty, poznámky, atribúty a ďalšie ohľadom slova :term.',\n    'title'     => 'Fulltextové vyhľadávanie',\n];\n"
  },
  {
    "path": "lang/sk/search.php",
    "content": "<?php\n\nreturn [\n    'fulltext'      => 'Prehľadať všetko',\n    'lookup'        => [\n        'empty'     => 'Bez výsledkov',\n        'hint'      => 'Napíš min. 3 písmená na hľadanie objektov v kampani.',\n        'keyboard'  => 'stlač :k na hľadanie, :esc na zrušenie',\n        'lists'     => 'Zoznamy',\n        'recents'   => 'Nedávne',\n        'results'   => 'Výsledky',\n    ],\n    'no_results'    => 'Bez výsledkov.',\n    'placeholder'   => 'HĽADAJ',\n    'placeholders'  => [\n        'entry' => 'Hľadať záznam',\n    ],\n    'preview'       => [\n        'links'             => 'Linky',\n        'no-connections'    => 'Žiadne pripnuté vzťahy na zobrazenie',\n    ],\n    'title'         => 'Hľadať',\n];\n"
  },
  {
    "path": "lang/sk/seo.php",
    "content": "<?php\n\nreturn [\n    'dashboard'     => 'Nástenka kampane :campaign',\n    'entity-list'   => 'Preskúmaj :module kampane :campaign',\n];\n"
  },
  {
    "path": "lang/sk/settings/account.php",
    "content": "<?php\n\nreturn [\n    'subtitle'  => 'Kontrola tvojho mailu, hesla, bezpečnosti a ďalších nastavení konta.',\n    'title'     => 'Informácie o konte',\n];\n"
  },
  {
    "path": "lang/sk/settings/appearance.php",
    "content": "<?php\n\nreturn [\n    'actions'           => [\n        'learn-more'    => 'Zisti viac o tomto nastavení v našej dokumentácii.',\n        'save'          => 'Uložiť nastavenia',\n    ],\n    'campaign-switcher' => [\n        'alphabetical'      => 'Abecedne (A-Z)',\n        'date_created'      => 'Dátum vytvorenia (od najstaršieho)',\n        'date_joined'       => 'Dátum prístupu (od najstaršieho)',\n        'r_alphabetical'    => 'Abecedne (Z-A)',\n        'r_date_created'    => 'Dátum vytvorenia (od najnovšieho)',\n        'r_date_joined'     => 'Dátum prístupu (od najnovšieho)',\n    ],\n    'dismissible'       => [\n        'main'  => 'Kontroluj, ako Kanka vyzerá a pôsobí. Vedz ale, že kampane môžu tieto nastavenia prepísať.',\n    ],\n    'editors'           => [\n        'default'   => 'Štandard (:name)',\n        'legacy'    => 'Odkaz (:name)',\n    ],\n    'explore'           => [\n        'grid'  => 'Mriežka (štandard)',\n        'table' => 'Tabuľka',\n    ],\n    'fields'            => [\n        'campaign-order'        => 'Poradie kampaní',\n        'date-format'           => 'Formát dátumu',\n        'editor'                => 'Textový editor',\n        'entity-explore'        => 'Zoznamy objektov',\n        'mentions'              => 'Referencie pri úpravách',\n        'new-entity-workflow'   => 'Postup pri tvorbe objektu',\n        'pagination'            => 'Výsledky na stránke',\n        'theme'                 => 'Preferencia témy',\n    ],\n    'helpers'           => [\n        'advanced-mentions'     => 'Keď sa edituje text, môžeš zvoliť, či sa referencie budú zobrazovať ako názov alebo rozšírená referencia.',\n        'campaign-order'        => 'Zmeň poradie, v ktorom sa zobrazujú kampane pri ich výbere.',\n        'date-format'           => 'V miestach, kde sa zobrazujú, môžeš zvoliť formát dátumu skutočného sveta.',\n        'entity-explore'        => 'Zvoľ spôsob, akým sú zoznamy objektov zobrazované v kampaniach.',\n        'new-entity-workflow'   => 'Zvoľ, kam sa automaticky dostaneš po vytvorení nového objektu.',\n        'overridable'           => 'Jednotlivé kampane môžu toto nastavenie prepísať.',\n        'pagination'            => 'Pre zoznamy, ktoré presahujú jednu stranu, môžeš definovať počet viditeľných objektov.',\n        'theme'                 => 'Zvoľ výzor Kanky.',\n    ],\n    'mentions'          => [\n        'advanced'  => 'Zobrazovať rozšírené referencie :code',\n        'default'   => 'Referencie v podobe názvu objektu',\n    ],\n    'nested'            => [],\n    'success'           => 'Nastavenia výzoru uložené.',\n    'values'            => [\n        'pagination'        => ':amount položiek na stránke',\n        'pagination-sub'    => ':amount (dostupné pre predplatiteľov)',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/settings/boosters.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'boost_name'    => 'Boost :name',\n    ],\n    'available' => 'Dostupné boosty :amount/:total',\n    'benefits'  => [\n        'boosted'       => 'Boostnutie kampane s :one booster odomyká prístup k :marketplace, štýlovaniu, nahrávaniu väčších súborov pre všetkých členov, obnovovanie zmazaných objektov a :more.',\n        'more'          => 'ďalšie úžasné funkcionality.',\n        'superboosted'  => 'Superboostnutie kampane s :amount boostami odomyká všetky výhody boostnutej kampane, ako aj galériu kampane, plné reporty zmien, ktoré boli robené na objektoch, a :more.',\n    ],\n    'boost'     => [\n        'actions'   => [\n            'confirm'   => 'Boostni to!',\n            'remove'    => 'Ukončiť boostnutie :campaign',\n            'subscribe' => 'Predplatiť Kanku',\n            'upgrade'   => 'Aktualizovať tvoje predplatné',\n        ],\n        'confirm'   => 'Ako vzrušujúce! Ideš boostnuť :campaign. Toto priradí jeden (:cost) z dostupných boostov kampani.',\n        'duration'  => 'Priradené boosty ostávajú priradené, dokiaľ ich manuálne neodstrániš, alebo dokiaľ predplatné neskončí.',\n        'errors'    => [\n            'boosted'           => 'Och, zdá sa, že :campaign je už boostnutá!',\n            'out-of-boosters'   => 'Och nie! Nemáš už dostatočný počet boostov. Máš :available a potrebuješ :cost. Buď ukonči boostnutie inej kampane, alebo :upgrade.',\n        ],\n        'pitch'     => 'Zakúp si predplatné a odomkni boostnutie kampaní.',\n        'success'   => 'Kampaň :campaign je teraz boostnutá. Užívaj všetky úžasné funkcionality!',\n        'title'     => 'Boostnuť :campaign',\n        'upgrade'   => 'Aktualizovať tvoje predplatné',\n    ],\n    'campaign'  => [\n        'boosted'       => 'Boostnuté :user od :time',\n        'premium'       => 'Za Prémium ďakujeme :user od :time',\n        'standard'      => 'Štandard',\n        'superboosted'  => 'Superboostnuté :user od :time',\n        'unboosted'     => 'Neboostnuté',\n    ],\n    'intro'     => [\n        'anyone'    => 'Nemusíš len boostnuť kampane, ktoré sú vytvorené tebou. Môžeš boostnuť hociktorú kampaň, ktorej si súčasťou alebo ktorá je viditeľná. Toto zahŕňa kampane, v ktorých hrávaš, alebo :public, ktoré sa ti páčia.',\n        'data'      => 'Ak kampaň prestane byť boostnutá, prístup k boostnutým funkciám je odobratý. Ale žiaden obsah sa je odstránený, takže boostnutie kampane v budúcnosti ti ho opäť sprístupní.',\n        'first'     => 'Rozšírené funkcie sa odomykajú priradením boostov na boostnutie alebo superboostnutie kampane. Počet boostov, ktoré máš, je dané tvojím :subscription. Toto číslo je dostupné zakaždým, kým máš predplatné. Boostnutie kampane priradí tejto jeden z tvojich boostov, zatiaľ čo superboostnutie požaduje boosty tri.',\n    ],\n    'pitch'     => [\n        'benefits'      => [\n            'backup'        => 'Obnov predtým odstránený objekt spred :amount dní',\n            'customisable'  => 'Úplná možnosť úpravy vizuálu kampane',\n            'icons'         => 'Prístup k tisíckam nádherných ikoniek pre mapy a časové osy',\n            'title'         => 'Boostnuté kampane získajú',\n            'upload'        => 'Väčšie veľkosti nahrávaných súborov pred všetkých členov',\n        ],\n        'description'   => 'Priraď boosty ku kampaniam a pomôž im odomknúť úžasné funkcionality pred všetkých zúčastnených. Nestačí ti boostnutie kampane? Tak potom pre teba máme možnosť kampaň superboostnuť!',\n        'more'          => 'Spoznaj celý zoznam benefitov na stránke :boosters.',\n        'title'         => 'Posuň kampaň na vyššiu úroveň s možnosťou vlastných úprav a výhod pre všetkých jej členov.',\n    ],\n    'ready'     => [\n        'available'         => 'Tvoje dostupné kampaňové boosty.',\n        'pricing'           => 'Všetky tvoje úrovne predplatného obsahujú aspoň jeden boost kampane a začínajú na :amount mesačne.',\n        'pricing-amount'    => ':amount :currency',\n        'title'             => 'Boostnutie kampane',\n    ],\n    'superboost'=> [\n        'actions'   => [\n            'confirm'   => 'Superboostni to!',\n            'instead'   => 'Superboostni za :count!',\n            'remove'    => 'Ukončiť superboostnutie :campaign',\n        ],\n        'confirm'   => 'Ako vzrušujúce! Ideš superboostnuť :campaign. Toto priradí tri (:cost) z dostupných boostov kampani.',\n        'errors'    => [\n            'boosted'   => 'Och, zdá sa, že :campaign je už superboostnutá!',\n        ],\n        'success'   => 'Kampaň :campaign je teraz superboostnutá. Užívaj všetky úžasné funkcionality!',\n        'title'     => 'Superboostnuť :campaign',\n        'upgrade'   => 'Priprav sa na ultimátne využitie Kanky! Superboostnutie :campaign jej priradí :cost dodatočné kampaňové boosty.',\n    ],\n    'title'     => 'Kampaňové boosty',\n    'unboost'   => [\n        'confirm'   => 'Áno, určite',\n        'status'    => [\n            'boosting'      => 'boostnutá',\n            'superboosting' => 'superboostnutá',\n        ],\n        'success'   => 'Kampaň :campaign už nie je boostnutá a tvoje boosty sú opäť dostupné.',\n        'title'     => 'Ukončiť boost kampane',\n        'warning'   => 'Naozaj chceš ukončiť :action :campaign? Týmto uvoľníš tvoje priradené boosty a skryje sa všetok obsah a funkcionality, ktoré boli uvoľnené vďaka benefitom boostnutia.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/settings/premium.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'remove'    => 'Odstrániť prémium',\n        'unlock'    => 'Získaj prémium',\n    ],\n    'create'        => [\n        'actions'   => [\n            'confirm'   => 'Získaj prémium!',\n        ],\n        'confirm'   => 'Vzrušujúce! Ideš odomknúť prémiové funkcionality pre :campaign. Bude na to použité jedno prémium.',\n        'duration'  => 'Prémiové kampane ostávajú dokiaľ ich manuálne neodstrániš alebo kým neskončí tvoje predplatné.',\n        'success'   => 'Kampaň :campaign je teraz prémiová. Užívaj jej nové úžasné funkcionality!',\n    ],\n    'exceptions'    => [\n        'already'       => 'Prémiové funkcionality boli už pre túto kampaň odomknuté.',\n        'out-of-stock'  => 'Nemáš dostatok prémia, aby bolo možné odomknúť túto kampaň. Odober prémiový status z nejakej kampane alebo :upgrade.',\n    ],\n    'pitch'         => [\n        'description'   => 'Pridaj prémium kampaniam a pomôž odomknúť úžasné funkcionality pre každého v nich.',\n        'title'         => 'Prémiové kampane získavajú',\n    ],\n    'ready'         => [\n        'available'         => 'Tvoje dostupné prémiové nastavenia.',\n        'pricing'           => 'Všetky naše predplatné úrovne obsahujú min. 1 prémiovú kampaň a sú dostupné od :amount mesačne.',\n        'pricing-amount'    => ':amount :currency',\n        'title'             => 'Získaj prémium',\n    ],\n    'remove'        => [\n        'confirm'   => 'Áno, naozaj',\n        'cooldown'  => 'Prémiové funkcie z :campaign môžu byť odstránené po :date.',\n        'success'   => 'Prémiové funkcionality boli odobraté z kampane :campaign. Teraz môžeš odomknúť prémiové funkcionality pre inú kampaň.',\n        'title'     => 'Odobrať prémiové funkcionality',\n        'warning'   => 'Naozaj chceš odobrať prémiové funkcionality z :campaign? Toto ti umožní odomknúť inú kampaň a skryť všetok obsah spojený s prémiovými funkcionalitami dokiaľ sa jej prémiový status neobnoví.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/settings.php",
    "content": "<?php\n\nreturn [\n    'account'       => [\n        '2fa'               => [\n            'actions'               => [\n                'disable'           => 'Deaktivovať dvojstupňové overenie identity',\n                'disable-confirm'   => 'Potvrď ešte jedným klikom',\n                'finish'            => 'Dokončiť nastavenie a prihlásiť sa',\n            ],\n            'activation_helper'     => 'Na dokončenie nastavenia dvojstupňového overenia identity tvojho konta nasleduj tieto inštrukcie.',\n            'disable'               => [\n                'helper'    => 'Ak chceš deaktivovať dvojstupňové overenie identity, klikni na tlačidlo nižšie. Nezabudni, že toto ponechá tvoje konto zraniteľné v prípade, že niekto pozná tvoje prihlasovacie údaje.',\n                'title'     => 'Deaktivovať dvojstupňové overenie identity',\n            ],\n            'enable_instructions'   => 'Ak chceš spustiť aktivačný proces, vygeneruj tvoj autentifikačný QR kód a zoskenuj ho do aplikácie Google Authenticator (:ios, :android) alebo inej podobnej autentifikačnej aplikácie.',\n            'enabled'               => 'Dvojstupňové overenie identity je aktuálne pre tvoje konto aktivované.',\n            'error_enable'          => 'Nesprávny kód, skús znovu.',\n            'fields'                => [\n                'otp'       => 'Zadaj jednorazové heslo poskytnuté autentifikačnou aplikáciou.',\n                'qrcode'    => 'Zoskenuj nasledujúci QR kód tvojou autentifikačnou aplikáciou na vygenerovanie jednorazového hesla.',\n            ],\n            'generate_qr'           => 'Generovať QR kód',\n            'helper'                => 'Dvojstupňové overenie identity posilňuje bezpečnosť prístupu požadovaním dvoch metód (stupňov) na overenie identity pri každom prihlásení.',\n            'learn_more'            => 'Dozveď sa viac o dvojstupňovom overení identity.',\n            'social'                => 'Dvojstupňové overenie identity v Kanke je aktívne iba pre osoby, ktoré sa prihlasujú pomocou ich e-mailu a hesla. Zmeň si metódu prihlasovania v tvojom konte predtým, ako aktivuješ toto nastavenie.',\n            'success_disable'       => 'Dvojstupňové overenie identity úspešne deaktivované.',\n            'success_enable'        => 'Dvojstupňové overenie identity úspešne aktivované. Prosím prihlás sa opäť na dokončenie nastavení.',\n            'success_key'           => 'Tvoj QR kód bol úspešne vygenerovaný. Prosím dokonči nastavenie pre aktiváciu dvojstupňového overenia identity.',\n            'title'                 => 'Dvojstupňové overenie identity',\n        ],\n        'actions'           => [\n            'social'            => 'Prepnúť na prihlásenie do Kanky',\n            'update_email'      => 'Aktualizovať e-mail',\n            'update_password'   => 'Aktualizovať heslo',\n        ],\n        'email'             => 'Zmeniť e-mail',\n        'email_success'     => 'E-mail bol aktualizovaný.',\n        'password'          => 'Zmeniť heslo',\n        'password_success'  => 'Heslo bolo aktualizované.',\n        'social'            => [\n            'error'     => 'Pre toto konto už používaš prihlásenie v Kanke.',\n            'helper'    => 'Tvoje konto je teraz spravované :provider. Môžeš ho prestať používať a prepnúť na štandardné prihlásenie pomocou Kanky nastavením hesla.',\n            'success'   => 'Tvoje konto teraz používa prihlásenie v Kanke.',\n            'title'     => 'Konto cez sociálnu sieť',\n        ],\n        'title'             => 'Konto',\n    ],\n    'api'           => [\n        'helper'    => 'Vitaj v API Kanky. Vytvor si Osobný prístupový žetón, ktorý budeš používať v tvojich požiadavkách na API s cieľom získať informácie o kampaniach, ku ktorým patríš.',\n        'link'      => 'Čítať API dokumentáciu',\n        'title'     => 'API',\n    ],\n    'apps'          => [\n        'actions'   => [\n            'connect'   => 'Pripojiť',\n            'remove'    => 'Odstrániť',\n        ],\n        'benefits'  => 'Kanka poskytuje niekoľko integrácií so službami tretích strán. Široká integrácia s aplikáciami tretích strán je plánovaná v budúcnosti.',\n        'discord'   => [\n            'confirm'   => 'Naozaj chceš odpojiť svoje konte z Discordu? Toto odstráni aj role, ktoré máš nastavené.',\n            'errors'    => [\n                'add'   => 'Pri prepojení tvojho Discord účtu s Kankou sa vyskytla chyba. Prosím, skús to ešte raz.',\n            ],\n            'success'   => [\n                'add'       => 'Tvoje Discord konto bolo prepojené.',\n                'remove'    => 'Tvoje Discord konto bolo odpojené.',\n            ],\n            'text'      => 'Pristupuj automaticky k tvojej roli predplatného.',\n            'unlock'    => 'Odblokovať roly v Discorde',\n        ],\n        'title'     => 'Integrácia aplikácie',\n    ],\n    'billing'       => [\n        'placeholder'   => 'Ak by bolo potrebné doplniť na potvrdenia dodatočné info alebo daňové informácie (firemná adresa, IČ DPH a pod.), vlož ich nižšie a zobrazia sa na všetkých tvojich potvrdenkách.',\n        'save'          => 'Uložiť platobné informácie',\n        'title'         => 'Platobné informácie',\n    ],\n    'boost'         => [\n        'exceptions'    => [\n            'already_boosted'       => 'Kampaň :name už je boostnutá.',\n            'exhausted_boosts'      => 'Nemáš už žiadne boosty na rozdávanie. Odstráň najprv boost od existujúcej kampane pred priradením inej.',\n            'exhausted_superboosts' => 'Došli ti boosty. Na superboostnutie kampane potrebuješ 3 boosty.',\n        ],\n    ],\n    'countries'     => [\n        'austria'       => 'Rakúsko',\n        'belgium'       => 'Belgicko',\n        'france'        => 'Francúzsko',\n        'germany'       => 'Nemecko',\n        'italy'         => 'Taliansko',\n        'netherlands'   => 'Holandsko',\n        'spain'         => 'Španielsko',\n    ],\n    'invoices'      => [],\n    'layout'        => [\n        'title' => 'Schéma',\n    ],\n    'marketplace'   => [],\n    'menu'          => [\n        'account'               => 'Konto',\n        'api'                   => 'API',\n        'appearance'            => 'Vzhľad',\n        'apps'                  => 'Apps',\n        'boosters'              => 'Boosty',\n        'notifications'         => 'Upozornenia',\n        'other'                 => 'Iné',\n        'patreon'               => 'Patreon',\n        'payment_options'       => 'Možnosti platby',\n        'personal_settings'     => 'Osobné nastavenia',\n        'premium'               => 'Prémiové kampane',\n        'profile'               => 'Profil',\n        'settings'              => 'Nastavenia',\n        'subscription'          => 'Predplatné',\n        'subscription_status'   => 'Stav predplatného',\n    ],\n    'patreon'       => [\n        'deprecated'    => 'Zastaralá funkcionalita - Ak chceš podporiť Kanku, urob tak cez :subscription. Prepojenie na Patreon je ešte stále aktívne pre osoby, ktoré nás podporili predtým, než sme z neho odišli.',\n        'pledge'        => 'Úroveň: :name',\n        'remove'        => [\n            'button'    => 'Zrušiť prepojenie s Patreonom',\n            'success'   => 'Prepojenie s tvojím Patreon kontom bolo zrušené.',\n            'text'      => 'Ak zrušíš prepojenie tvojho Patreon konta s Kankou, stratíš tvoje bonusy, meno v sieni slávy, boosty pre kampane a iné funkcionality získané vďaka podpore Kanky. Nestratíš ale žiaden obsah (napr. záhlavia objektov). Ak si nás neskôr zasa predplatíš, prístup k dátam sa ti obnoví, vrátane možnosti boostnuť predtým boostnuté kampane.',\n            'title'     => 'Zrušiť prepojenie Patreon konta s Kankou',\n        ],\n        'title'         => 'Patreon',\n    ],\n    'profile'       => [\n        'actions'   => [\n            'update_profile'    => 'Aktualizovať profil',\n        ],\n        'avatar'    => 'Profilový obrázok',\n        'success'   => 'Profil aktualizovaný.',\n        'title'     => 'Osobný profil',\n    ],\n    'referrals'     => [\n        'title' => 'Odporúčania',\n    ],\n    'subscription'  => [\n        'actions'               => [\n            'cancel_sub'        => 'Ukončiť predplatné',\n            'subscribe'         => 'Predplatiť',\n            'update_currency'   => 'Uložiť preferovanú menu',\n        ],\n        'billing'               => [\n            'helper'    => 'Tvoje platobné údaje sú spracované a uložené bezpečne na :stripe. Túto platobnú metódu používame pre všetky platby predplatného.',\n            'saved'     => 'Uložený spôsob platby',\n        ],\n        'cancel'                => [\n            'grace'     => [\n                'text'  => 'Tvoje predplatné bude končiť k :date. Po danom dátume sa tvoje prémiové kampane vrátia do štandardnej formy a ostatné výhody spojené s podporou Kanky sa stanú neaktívne.',\n                'title' => 'Kulantná doba',\n            ],\n            'options'   => [\n                'competitor'        => 'Prechádzam ku konkurencii',\n                'financial'         => 'Moja finančná situácia sa zmenila',\n                'missing_features'  => 'Chýbajú mi funkcionality',\n                'not_for'           => 'Predplatné nie je pre mňa',\n                'not_playing'       => 'Už sa nehrá alebo je kampaň pozastavená.',\n                'not_using'         => 'Aktuálne Kanku nevyužívam',\n                'other'             => 'Iné',\n                'testing'           => 'Iba testujem Kanku',\n            ],\n            'text'      => 'Ľutujeme, že odchádzaš! Zrušením tvojho predplatného ostáva toto aktívne do ďalšieho platobného obdobia, po ktorom stratíš tvoje boosty kampaní a ostatné výhody vďaka podpore Kanky. Vyplnením následného formulára nám pomôžeš zistiť, čo by sme mali robiť lepšie, alebo čo ťa viedlo k tomuto rozhodnutiu.',\n            'title'     => 'Zrušiť predplatné',\n        ],\n        'cancelled'             => 'Tvoje predplatné bolo zrušené. Môžeš ho obnoviť, keď ti aktívne predplatné skončí.',\n        'change'                => [\n            'text'  => [\n                'downgrade_monthly' => 'Downgraduješ na úroveň :tier za :downgrade, takže mesačne bude splatných :amount.',\n                'downgrade_yearly'  => 'Downgraduješ na úroveň :tier za :downgrade, takže ročne bude splatných :amount.',\n                'monthly'           => 'Máš predplatenú úroveň :tier, splatnú mesačne vo výške :amount.',\n                'upgrade_monthly'   => 'Upgradeuješ na úroveň :tier za :upgrade, takže bude mesačne splatných :amount.',\n                'upgrade_paypal'    => 'Upgradeuješ na úroveň :tier za :upgrade do :date.',\n                'upgrade_yearly'    => 'Upgradeuješ na úroveň :tier za :upgrade, takže bude ročne splatných :amount.',\n                'yearly'            => 'Máš predplatenú úroveň :tier, splatnú ročne vo výške :amount.',\n            ],\n            'title' => 'Zmeniť úroveň predplatného',\n        ],\n        'coupon'                => [\n            'check'         => 'Skontrolovať promo kód',\n            'invalid'       => 'Neplatný promo kód.',\n            'label'         => 'Promo kód',\n            'percent_off'   => 'Tvoje prvé ročné predplatné bude zlacnené o :percent%!',\n        ],\n        'currencies'            => [\n            'brl'   => 'BRL',\n            'eur'   => 'EUR',\n            'usd'   => 'USD',\n        ],\n        'currency'              => [\n            'title' => 'Zmeň tebou preferovanú menu',\n        ],\n        'errors'                => [\n            'callback'      => 'Náš spracovateľ platieb nám nahlásil chybu. Prosím, skús ešte raz alebo nás kontaktuj, ak problém pretrváva.',\n            'failed'        => 'Aktuálne evidujeme problémy s naším platobným systémom. Ak potrebuješ pomôcť, kontaktuj nás na :email.',\n            'subscribed'    => 'Tvoje predplatné sa nám nepodarilo spracovať. Stripe nám poskytlo nasledujúcu informáciu prečo.',\n        ],\n        'fields'                => [\n            'active_since'      => 'Aktívne od',\n            'active_until'      => 'Aktívne do',\n            'billing'           => 'Zúčtovanie',\n            'currency'          => 'Mena zúčtovania',\n            'payment_method'    => 'Spôsob platby',\n            'plan'              => 'Súčasná úroveň',\n            'reason'            => 'Dôvod',\n            'reset'             => 'Resetovať informáciu platby',\n            'reset_billing'     => 'Chápem, že zmenou meny stratím históriu platieb a budem vyžiadaný zadať môj spôsob platby znovu.',\n        ],\n        'helpers'               => [\n            'alternatives'          => 'Zaplať za tvoje predplatné pomocou :method. Tento spôsob platby nebude automaticky obnovený na konci tvojho predplatného. :method je iba dostupný v eurách.',\n            'alternatives-2'        => 'Zaplať za tvoje predplatné pomocou :method. Toto je jednorázová platba a nebude automaticky obnovená po skončení tvojho predplatného.',\n            'alternatives_warning'  => 'Aktualizácia predplatného týmto spôsobom nie je možná. Prosím, vytvor nové predplatné, keď tvoje súčasné skončí.',\n            'alternatives_yearly'   => 'Kvôli obmedzeniam ohľadom opakovaných platieb, :method je dostupný len pre ročné zúčtovanie.',\n            'currency_block'        => 'Nie je možné zmeniť menu dokiaľ máš aktívne predplatné Kanky, svoju menu môžeš zmeniť po tom, čo tvoje predplatné skončí.',\n            'currency_reset'        => 'Zmena tvojej meny odstráni históriu tvojich platieb a bude nutné zadať spôsob platby ešte raz.',\n            'paypal_v3'             => 'Zaplať tvoje ročné predplatné bezpečne PayPalom.',\n            'stripe'                => 'Tvoje platobné údaje sú spracované a uložené bezpečne prostredníctvom :stripe.',\n        ],\n        'manage_subscription'   => 'Spravovať predplatné',\n        'payment_method'        => [\n            'actions'       => [\n                'add'               => 'Pridať',\n                'add_new'           => 'Pridať nový spôsob platby',\n                'change'            => 'Zmeniť spôsob platby',\n                'save'              => 'Uložiť spôsob platby',\n                'show_alternatives' => 'Alternatívne možnosti platby',\n            ],\n            'add_one'       => 'Aktuálne nemáš uložený žiadny spôsob platby.',\n            'alternatives'  => 'Predplatné môžeš zaplatiť aj týmito alternatívnymi platobnými možnosťami. Tvoje konto bude jednorázovo zaťažené a predplatné nebude automaticky predĺžené na konci mesiaca.',\n            'card'          => 'Karta',\n            'card_name'     => 'Meno na karte',\n            'country'       => 'Krajina bydliska',\n            'ending'        => 'Platná do',\n            'helper'        => 'Táto karta bude použitá na všetky tvoje predplatné.',\n            'new_card'      => 'Pridať nový spôsob platby',\n            'saved'         => ':brand končiac na :last4',\n        ],\n        'periods'               => [\n            'monthly'   => 'Mesačne',\n            'yearly'    => 'Ročne',\n        ],\n        'placeholders'          => [\n            'downgrade_reason'  => 'Alternatívne nám daj vedieť, prečo znižuješ úroveň tvojho predplatného.',\n            'reason'            => 'Alternatívne nám daj vedieť, prečo už nepodporuješ Kanku. Chýbala ti nejaká funkcionalita? Zmenila sa tvoja finančná situácia?',\n        ],\n        'plans'                 => [\n            'cost_monthly'  => ':amount :currency účtovaných mesačne',\n            'cost_yearly'   => ':amount :currency účtovaných ročne',\n        ],\n        'sub_status'            => 'Informácie o predplatnom',\n        'subscription'          => [\n            'actions'   => [\n                'cancel'            => 'Zrušiť predplatné',\n                'downgrading'       => 'Prosím, kontaktuj nás ohľadom zníženia úrovne',\n                'rollback'          => 'Zmeniť na Kobolda',\n                'subscribe'         => 'Zmeniť na :tier mesačný',\n                'subscribe_annual'  => 'Zmeniť na :tier ročný',\n            ],\n        ],\n        'success'               => [\n            'alternative'   => 'Tvoja platba bola zaregistrovaná. Obdržíš oznámenie akonáhle bude spracovaná a tvoje predplatné aktívne.',\n            'callback'      => 'Úspešne predplatené. Tvoje konto bude čoskoro aktualizované akonáhle nás spracovateľ platieb informuje o zmene (môže to pár minút trvať).',\n            'currency'      => 'Nastavenie preferovanej meny bolo aktualizované.',\n            'subscribed'    => 'Úspešne predplatené. Nezabudni sa pridať do newsletteru Komunitných hlasovaní, aby sme ťa mohli informovať, keď bude hlasovanie otvorené. Nastavenie newsletteru si môžeš zmeniť v tvojom profile.',\n        ],\n        'tiers'                 => 'Úrovne predplatného',\n        'trial_period'          => 'Ročné predplatné má 14-dňovú skúšobnú lehotu. Kontaktuj nás prostredníctvom :email, ak vypovieš tvoje ročné predplatné a požaduješ vrátenie peňazí.',\n        'upgrade_downgrade'     => [\n            'button'    => 'Informácie o zmene úrovne predplatného',\n            'cancel'    => [\n                'bullets'   => [\n                    'bonuses'   => 'Tvoje bonusy ostanú aktívne do konca platobného obdobia.',\n                    'boosts'    => 'To isté sa stane aj tvojim boostnutým kampaniam. Výhody boostnutia sa stanú neviditeľnými, ale nebudú odstránené, ak kampaň prestane byť boostnutá.',\n                    'kobold'    => 'Ak chceš zrušiť tvoje predplatné, zmeň úroveň na Kobolda.',\n                    'premium'   => 'To isté sa stane aj tvojim prémiovým kampaniam. Výhody prémia sa stanú neviditeľnými, ale nebudú odstránené, ak kampaň prestane byť prémiová.',\n                ],\n                'title'     => 'Čo obnáša zrušenie predplatného',\n            ],\n            'downgrade' => [\n                'bullets'           => [\n                    'end'   => 'Tvoja aktuálna úroveň ostáva aktívna do konca aktuálneho platobného obdobia. Potom bude znížená na novú úroveň.',\n                ],\n                'provide_reason'    => 'Ak sa dá, daj nám prosím vedieť, prečo znižuješ úroveň tvojho predplatného.',\n                'title'             => 'Pri prechode na nižšiu úroveň',\n            ],\n            'upgrade'   => [\n                'bullets'   => [\n                    'immediate' => 'Vybraný spôsob platby bude okamžite zaťažený a hneď budeš mať prístup k novej úrovni.',\n                    'prorate'   => 'Ak sa ti úroveň zvýši z Owlbear na Elemental, budeš musieť zaplatiť len rozdiel k vyššej úrovni.',\n                ],\n                'title'     => 'Pri prechode na vyššiu úroveň',\n            ],\n        ],\n        'warnings'              => [\n            'incomplete'    => 'Nepodarilo sa nám zaťažiť tvoju platobnú kartu. Prosím, aktualizuj tvoje platobné údaje karty a my sa o to pokúsime opäť o pár dní. Ak to nebude možné, tvoje predplatné bude zrušené.',\n            'patreon'       => 'Tvoje konto je aktuálne prepojené s Patreonom. Prosím, odstráňte prepojenie v nastaveniach tvojho :patreon konta predtým, než zmeníš tvoje predplatné v Kanke.',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/sk/sidebar.php",
    "content": "<?php\n\nreturn [\n    'campaign_switcher' => [\n        'count'             => 'Člen v :member',\n        'created_campaigns' => 'Tvoje kampane',\n        'follow_more'       => 'Nájsť kampane',\n        'followed_campaigns'=> 'Sledované kampane',\n        'new_campaign'      => 'Nová kampaň',\n        'public_campaigns'  => 'Verejné kampane',\n        'reorder'           => 'Preusporiadať',\n        'updated'           => 'Upravené',\n    ],\n    'dashboard'         => 'Nástenka',\n    'entity-creator'    => 'Rýchle vytvorenie',\n    'gallery'           => 'Galéria',\n    'game'              => 'Hra',\n    'other'             => 'Ostatné',\n    'recent'            => 'Posledné zmeny',\n    'relations'         => 'Vzťahy',\n    'settings'          => 'Nastavenia',\n    'time'              => 'Čas',\n    'world'             => 'Svet',\n];\n"
  },
  {
    "path": "lang/sk/starter.php",
    "content": "<?php\n\nreturn [\n    'campaign'      => [\n        'name'  => ':user - Svet',\n    ],\n    'character1'    => [\n        'age'           => '[20. / 30. / 40. roky]',\n        'background'    => [\n            'cur'       => 'Aktuálne [povolanie/rola]',\n            'loc'       => 'Dospievanie v [rodnom meste/regióne]',\n            'seeking'   => 'Hľadá [cieľ/motiváciu]',\n        ],\n    ],\n    'character2'    => [],\n    'item1'         => [],\n    'kingdom1'      => [],\n    'kingdom2'      => [],\n    'note1'         => [],\n];\n"
  },
  {
    "path": "lang/sk/subscription.php",
    "content": "<?php\n\nreturn [\n    'benefits'  => [\n        'main'  => 'Predplať si Kanku, aby sa ti odstránili reklamy, odomkli väčšie uploady pre obrázky, :boosters and :more. Na spracovanie platieb používame :stripe, takže na našich serveroch sa neukladá ani nimi neprechádza žiadna informácia o platobných kartách.',\n        'more'  => 'ďalšie úžasné výhody',\n    ],\n    'errors'    => [\n        'grace'                 => 'Tvoje aktuálne predplatné skončí :date, po tomto dátume si ho budeš môcť opäť kúpiť.',\n        'invalid_card_country'  => [\n            'brl'   => 'Je nám ľúto, ale platby v BRL akceptujeme len pri platbách brazílskymi kreditnými kartami. Ak si myslíš, že sa jedná o chybu, napíš nám na :email.',\n        ],\n        'invalid_currency'      => 'Tvoje predchádzajúce predplatné bolo v :old, čím nebolo možné uzatvoriť predplatné v :new. Prosím, zmeň si menu na :old alebo nás kontaktuj na :email, ak si chceš zmeniť platobnú menu.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/subscriptions/promos.php",
    "content": "<?php\n\nreturn [\n    'errors'    => [\n        'inactive'  => 'Táto akcia už nie je aktívna.',\n        'invalid'   => 'Neznáma akcia',\n        'only-new'  => 'Táto akcia je dostupná iba pre nových predplatiteľov.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/subscriptions/renew.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'renew' => 'Obnoviť predplatné',\n    ],\n    'helper'    => 'Máš ale možnosť vybrať si nové predplatné, aby výhody plynúce z neho neboli nijak ovplyvnené.',\n    'title'     => 'Obnovenie predplatného',\n];\n"
  },
  {
    "path": "lang/sk/subscriptions.php",
    "content": "<?php\n\nreturn [\n    'notifications' => [\n        'failed'    => 'Aplikácia Stripe nevedela zmeniť tvoj spôsob platby. Tvoje predplatné bolo preto zrušené.',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/tags.php",
    "content": "<?php\n\nreturn [\n    'children'      => [\n        'actions'   => [\n            'add'           => 'Pridať novú kategóriu',\n            'add_entity'    => 'Pridať nový objekt',\n        ],\n        'create'    => [\n            'attach_success'        => '{1} :count objekt pridaný do kategórie :name.|[2,4] :count objekty pridané do kategórie :name.|[5,*] :count objektov pridaných do kategórie :name.',\n            'attach_success_entity' => 'Kategórie pre :name úspešne pridané.',\n            'entity'                => 'Pridať kategórie k :name',\n        ],\n    ],\n    'create'        => [\n        'title' => 'Nová kategória',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'children'          => 'Podradené kategórie',\n        'is_auto_applied'   => 'Automaticky nastaviť pre nové objekty',\n        'is_hidden'         => 'Skryté v záhlaví a náhľade',\n    ],\n    'helpers'       => [\n        'no_children'   => 'Aktuálne nemá túto kategóriu pridelený žiaden objekt.',\n        'no_posts'      => 'Aktuálne nemá túto kategóriu pridelená žiadna poznámka.',\n    ],\n    'hints'         => [\n        'children'          => 'Tento zoznam obsahuje všetky objekty priamo pod touto kategóriou a jej podriadenými kategóriami.',\n        'is_auto_applied'   => 'Aktivuj toto nastavenie, ak chceš, aby bola táto kategória automaticky pri novo vytvorených objektoch.',\n        'is_hidden'         => 'Ak zaškrtneš túto možnosť, táto kategória sa nezobrazí v záhlaví ani náhľade objektu.',\n        'tag'               => 'Zobrazené sú všetky kategórie, ktoré sú tejto priamo podriadené.',\n    ],\n    'index'         => [],\n    'placeholders'  => [\n        'type'  => 'mýtus, vojna, historická udalosť, náboženstvo, vexilológia',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'children'  => 'Podradené kategórie',\n        ],\n    ],\n    'tags'          => [],\n    'transfer'      => [\n        'fail'          => 'Nepodarilo sa presunúť objekty z :tag na :newTag',\n        'fail_post'     => 'Nepodarilo sa presunúť ponámky z :tag na :newTag',\n        'success'       => 'Presun objektov z :tag na :newTag úspešný',\n        'success_post'  => 'Presun poznámok z :tag na :newTag úspešný',\n        'transfer'      => 'Presun',\n    ],\n];\n"
  },
  {
    "path": "lang/sk/teams.php",
    "content": "<?php\n\nreturn [\n    'index' => [\n        'lead'          => 'Tvorba svetov - zábavná a spoľahlivá',\n        'translations'  => 'Preklady',\n    ],\n    'leads' => [\n        'translators'   => 'Kanka je prekladaná do niekoľkých jazykov vďaka týmto úžasným prispievajúcim osobám.',\n    ],\n    'people'=> [\n        'itzamna'   => [\n            'title' => 'Juniorský vývojár',\n        ],\n        'jay'       => [\n            'title' => 'Zakladateľ a hlavný vývojár',\n        ],\n        'jon'       => [\n            'title' => 'Spoluzakladateľ a obchodný manažér',\n        ],\n        'kaz'       => [\n            'title' => 'Ničiteľ bugov',\n        ],\n        'laura'     => [\n            'title' => 'Sociálne médiá',\n        ],\n    ],\n];\n"
  },
  {
    "path": "lang/sk/tiers.php",
    "content": "<?php\n\nreturn [\n    'actions'   => [\n        'pay'       => [\n            'monthly'   => 'Mesačná platba',\n            'save'      => '2 mesiace zadarmo',\n            'yearly'    => 'Ročná platba',\n        ],\n        'subscribe' => [\n            'choose'    => 'Zvoľ :tier',\n            'monthly'   => ':tier mesačne',\n            'yearly'    => ':tier ročne',\n        ],\n    ],\n    'current'   => 'Tvoje aktuálne predplatné',\n    'features'  => [\n        'api_requests'      => ':amount API požiadavok/min',\n        'boosters'          => 'Boosty pre kampaň',\n        'discord'           => 'Roly v Discorde',\n        'feature_influence' => 'Vplyv na nové funkcie',\n        'file_size'         => ':size Veľkosť nahrávaných súborov',\n        'import'            => 'Import kampane',\n        'nice_image'        => 'Štandardné obrázky objektov',\n        'no_ads'            => 'Bez reklamy',\n        'pagination'        => ':amount max. objektov v zoznamoch',\n        'roadmap'           => 'Zahlasuj za nápady v pláne',\n    ],\n    'periods'   => [\n        'billed_monthly'    => 'účtované mesačne',\n        'billed_yearly'     => 'účtované ročne',\n    ],\n    'pricing'   => ':currency :amount / mesiac',\n    'ribbons'   => [\n        'best-value'    => 'Odporúčané pre GMs',\n        'current'       => 'Aktuálne predplatné',\n    ],\n    'target'    => [\n        'elemental' => 'Pre profesionálnu tvorbu svetov, viacero epických prostredí a rozsiahle kampane',\n        'owlbear'   => 'Perfektné pre jednotlivú tvorbu sveta, ktorý sa má stať úžasným miestom pre hlavnú kampaň',\n        'wyvern'    => 'Ideálne pre osoby vedúce hry s viacerými dobrodružstvami alebo spolupracujúce na príbehu',\n    ],\n    'toggle'    => [],\n];\n"
  },
  {
    "path": "lang/sk/timelines/elements.php",
    "content": "<?php\n\nreturn [\n    'copy_mention'  => [\n        'copy_with_name'    => 'Kopírovať rozšírenú referenciu s názvom objektu',\n        'success'           => 'Rozšírená referencia objektu bola skopírovaná do schránky.',\n    ],\n    'create'        => [\n        'success'   => 'Prvok pridaný na časovú os.',\n        'title'     => 'Nový prvok na časovej osi',\n    ],\n    'delete'        => [\n        'success'   => 'Prvok :name odstránený.',\n    ],\n    'edit'          => [\n        'success'   => 'Prvok aktualizovaný.',\n        'title'     => 'Upraviť prvok na časovej osi',\n    ],\n    'fields'        => [\n        'date'              => 'Dátum',\n        'era'               => 'Obdobie',\n        'icon'              => 'Symbol',\n        'use_entity_entry'  => 'Zobraziť záznam priradeného objektu nižšie. Text tohto prvku bude zobrazený ako prvý, ak nejaký existuje.',\n        'use_event_date'    => 'Použiť dátum prepojenej udalosti',\n    ],\n    'helpers'       => [\n        'date'              => 'Ak je prvok prepojený s objektom udalosti, zobrazí sa dátum tejto udalosti.',\n        'entity_is_private' => 'Objekt tohto prvku je súkromný.',\n        'icon'              => 'Skopíruj HTML kód nejakého symbolu z :fontawesome alebo :rpgawesome.',\n        'is_collapsed'      => 'Prvok sa zobrazuje štandardne zbalený.',\n    ],\n    'placeholders'  => [\n        'date'      => 'napr. 42. marec alebo 1332-1337',\n        'name'      => 'Vyžadované, ak nie je vybraný žiaden objekt',\n        'position'  => 'Pozícia v zozname prvkov pre dané obdobie. Ponechaj prázdnu, ak ju chceš pridať nakoniec.',\n    ],\n    'warning'       => [],\n];\n"
  },
  {
    "path": "lang/sk/timelines/eras.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add'   => 'Pridať nové obdobie',\n    ],\n    'bulks'         => [\n        'delete'    => '{0} Odstránených :count období.|{1} Odstránené :count obdobie.|[2,4] Odstránené :count obdobia.|[5,*] Odstránených :count období.',\n    ],\n    'create'        => [\n        'success'   => 'Obdobie :name vytvorené.',\n        'title'     => 'Nové obdobie',\n    ],\n    'delete'        => [\n        'success'   => 'Obdobie :name odstránené.',\n    ],\n    'edit'          => [\n        'success'   => 'Obdobie :name aktualizované.',\n        'title'     => 'Upraviť obdobie :name',\n    ],\n    'fields'        => [\n        'abbreviation'  => 'Skratka',\n        'end_year'      => 'Koniec (rok)',\n        'is_collapsed'  => 'Zbalené',\n        'start_year'    => 'Začiatok (rok)',\n    ],\n    'helpers'       => [\n        'eras'          => 'Pred pridávaním období musíš vytvoriť časovú os.',\n        'is_collapsed'  => 'Obdobia sú štandardne zbalené (minimalizované).',\n        'primary'       => 'Rozdeľ svoju časovú os na obdobia. Časová os vyžaduje min. jedno obdobie, aby správne fungovala.',\n    ],\n    'index'         => [\n        'title' => 'Obdobia časovej osi :name',\n    ],\n    'placeholders'  => [\n        'abbreviation'  => 'pred n.l., po Kr., AD',\n        'end_year'      => 'Rok, kedy končí daný vek. Ponechaj prázdny, ak je to aktuálny vek.',\n        'name'          => 'Novovek, Doba bronzová, Galaktické vojny',\n        'start_year'    => 'Rok, kedy začína daný vek. Ponechaj prázdny, ak je to prvý vek.',\n    ],\n    'reorder'       => [],\n];\n"
  },
  {
    "path": "lang/sk/timelines.php",
    "content": "<?php\n\nreturn [\n    'actions'       => [\n        'add_element'   => 'Pridať prvok k obdobiu :era',\n        'back'          => 'Späť k :name',\n        'save_order'    => 'Uložiť nové poradie',\n    ],\n    'create'        => [\n        'title' => 'Nová časová os.',\n    ],\n    'destroy'       => [],\n    'edit'          => [],\n    'fields'        => [\n        'copy_elements' => 'Kopírovať prvky',\n        'copy_eras'     => 'Kopírovať obdobie',\n        'eras'          => 'Obdobia',\n        'reverse_order' => 'Otočiť poradie období',\n    ],\n    'helpers'       => [\n        'no_era_v2'     => 'Táto časová os aktuálne nemá žiadne obdobia. Pridaj do nej jedno alebo viacero období, potom budeš do nich môcť pridať ďalšie privky.',\n        'reverse_order' => 'Aktivovaním zobrazíš obdobia v spätnom chronologickom poradí (najstaršie obdobie ako prvé).',\n    ],\n    'index'         => [],\n    'lists'         => [\n        'empty' => 'Vytvor vizuálnu časovú os k zaznamenaniu nejdôležitejších udalostí a toho, ako sa mení tvoj svet.',\n    ],\n    'placeholders'  => [\n        'type'  => 'Primárna, Kronika sveta, Osud kráľovstva',\n    ],\n    'reorder'       => [\n        'empty'     => 'Pridaj viac období a prvkov do časových osí, aby bolo možné meniť poradie v nich.',\n        'success'   => ':name úspešne preskupená.',\n        'title'     => 'Preskupiť :name',\n    ],\n    'show'          => [\n        'tabs'  => [\n            'reorder-elements'  => 'Preskupiť prvky',\n        ],\n    ],\n    'timelines'     => [],\n];\n"
  },
  {
    "path": "lang/sk/tiptap.php",
    "content": "<?php\n\nreturn [\n    'share' => 'Zdieľaj spätnú väzbu',\n    'survey'=> 'Skúšaš nový editor? :share (zaberie ti to len 2 minúty)',\n];\n"
  },
  {
    "path": "lang/sk/users/profile.php",
    "content": "<?php\n\nreturn [\n    'achievements'  => [\n        'wordsmith' => 'Skutočný vládca pera! Víťaz worldbuildingovej súťaže.',\n    ],\n    'fields'        => [\n        'achievements'      => 'Úspechy',\n        'banned'            => 'Tento užívateľ bol zablokovaný',\n        'entities_created'  => 'Objektov vytvorených :help :count',\n        'member_since'      => 'Členstvo od :date',\n        'public_campaigns'  => 'Verejné kampane',\n        'subscriber_since'  => 'Predplatné od :date',\n    ],\n    'helpers'       => [\n        'entities_created'  => 'Táto hodnota sa každý deň prepočítava.',\n    ],\n    'title'         => 'Profil :name',\n];\n"
  },
  {
    "path": "lang/sk/validation.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => ':Attribute musí byť akceptovaný.',\n    'active_url'           => ':Attribute má neplatnú URL adresu.',\n    'after'                => ':Attribute musí byť dátum po :date.',\n    'after_or_equal'       => ':Attribute musí byť dátum po alebo presne :date.',\n    'alpha'                => ':Attribute môže obsahovať len písmená.',\n    'alpha_dash'           => ':Attribute môže obsahovať len písmená, čísla a pomlčky.',\n    'alpha_num'            => ':Attribute môže obsahovať len písmená, čísla.',\n    'array'                => ':Attribute musí byť pole.',\n    'before'               => ':Attribute musí byť dátum pred :date.',\n    'before_or_equal'      => ':Attribute musí byť dátum pred alebo presne :date.',\n    'between'              => [\n        'numeric' => ':Attribute musí mať rozsah :min - :max.',\n        'file'    => ':Attribute musí mať rozsah :min - :max kilobajtov.',\n        'string'  => ':Attribute musí mať rozsah :min - :max znakov.',\n        'array'   => ':Attribute musí mať rozsah :min - :max prvkov.',\n    ],\n    'boolean'              => ':Attribute musí byť pravda alebo nepravda.',\n    'confirmed'            => ':Attribute konfirmácia sa nezhoduje.',\n    'date'                 => ':Attribute má neplatný dátum.',\n    'date_equals'          => ':Attribute musí byť dátum rovnajúci sa :date.',\n    'date_format'          => ':Attribute sa nezhoduje s formátom :format.',\n    'different'            => ':Attribute a :other musia byť odlišné.',\n    'digits'               => ':Attribute musí mať :digits číslic.',\n    'digits_between'       => ':Attribute musí mať rozsah :min až :max číslic.',\n    'dimensions'           => ':Attribute má neplatné rozmery obrázku.',\n    'distinct'             => ':Attribute je duplicitný.',\n    'email'                => ':Attribute má neplatný formát.',\n    'ends_with'            => 'The :attribute must end with one of the following: :values',\n    'exists'               => 'označený :attribute je neplatný.',\n    'file'                 => ':Attribute musí byť súbor.',\n    'filled'               => ':Attribute je požadované.',\n    'gt'                   => [\n        'numeric' => 'Hodnota :attribute musí byť väčšia ako :value.',\n        'file'    => ':Attribute musí mať viac kilobajtov ako :value.',\n        'string'  => ':Attribute musí mať viac znakov ako :value.',\n        'array'   => ':Attribute musí mať viac prvkov ako :value.',\n    ],\n    'gte'                  => [\n        'numeric' => 'Hodnota :attribute musí byť väčšia alebo rovná ako :value.',\n        'file'    => ':Attribute musí mať rovnaký alebo väčší počet kilobajtov ako :value.',\n        'string'  => ':Attribute musí mať rovnaký alebo väčší počet znakov ako :value.',\n        'array'   => ':Attribute musí mať rovnaký alebo väčší počet prvkov ako :value.',\n    ],\n    'image'                => ':Attribute musí byť obrázok.',\n    'in'                   => 'označený :attribute je neplatný.',\n    'in_array'             => ':Attribute sa nenachádza v :other.',\n    'integer'              => ':Attribute musí byť celé číslo.',\n    'ip'                   => ':Attribute musí byť platná IP adresa.',\n    'ipv4'                 => ':Attribute musí byť platná IPv4 adresa.',\n    'ipv6'                 => ':Attribute musí byť platná IPv6 adresa.',\n    'json'                 => ':Attribute musí byť platný JSON reťazec.',\n    'lt'                   => [\n        'numeric' => 'Hodnota :attribute musí byť menšia ako :value.',\n        'file'    => ':Attribute musí mať menej kilobajtov ako :value.',\n        'string'  => ':Attribute musí mať menej znakov ako :value.',\n        'array'   => ':Attribute musí mať menej prvkov ako :value.',\n    ],\n    'lte'                  => [\n        'numeric' => 'Hodnota :attribute musí byť menšia alebo rovná ako :value.',\n        'file'    => ':Attribute musí mať rovnaký alebo menší počet kilobajtov ako :value.',\n        'string'  => ':Attribute musí mať rovnaký alebo menší počet znakov ako :value.',\n        'array'   => ':Attribute musí mať rovnaký alebo menší počet prvkov ako :value.',\n    ],\n    'max'                  => [\n        'numeric' => ':Attribute nemôže byť väčší ako :max.',\n        'file'    => ':Attribute nemôže byť väčší ako :max kilobajtov.',\n        'string'  => ':Attribute nemôže byť väčší ako :max znakov.',\n        'array'   => ':Attribute nemôže mať viac ako :max prvkov.',\n    ],\n    'mimes'                => ':Attribute musí byť súbor s koncovkou: :values.',\n    'mimetypes'            => ':Attribute musí byť súbor s koncovkou: :values.',\n    'min'                  => [\n        'numeric' => ':Attribute musí mať aspoň :min.',\n        'file'    => ':Attribute musí mať aspoň :min kilobajtov.',\n        'string'  => ':Attribute musí mať aspoň :min znakov.',\n        'array'   => ':Attribute musí mať aspoň :min prvkov.',\n    ],\n    'not_in'               => 'označený :attribute je neplatný.',\n    'not_regex'            => ':Attribute má neplatný formát.',\n    'numeric'              => ':Attribute musí byť číslo.',\n    'present'              => ':Attribute musí byť odoslaný.',\n    'regex'                => ':Attribute má neplatný formát.',\n    'required'             => ':Attribute je požadované.',\n    'required_if'          => ':Attribute je požadované keď :other je :value.',\n    'required_unless'      => ':Attribute je požadované, okrem prípadu keď :other je v :values.',\n    'required_with'        => ':Attribute je požadované keď :values je prítomné.',\n    'required_with_all'    => ':Attribute je požadované ak :values je nastavené.',\n    'required_without'     => ':Attribute je požadované keď :values nie je prítomné.',\n    'required_without_all' => ':Attribute je požadované ak žiadne z :values nie je nastavené.',\n    'same'                 => ':Attribute a :other sa musia zhodovať.',\n    'size'                 => [\n        'numeric' => ':Attribute musí byť :size.',\n        'file'    => ':Attribute musí mať :size kilobajtov.',\n        'string'  => ':Attribute musí mať :size znakov.',\n        'array'   => ':Attribute musí obsahovať :size prvkov.',\n    ],\n    'starts_with'          => ':Attribute musí začínať niektorou z hodnôt: :values',\n    'string'               => ':Attribute musí byť reťazec znakov.',\n    'timezone'             => ':Attribute musí byť platné časové pásmo.',\n    'unique'               => ':Attribute už existuje.',\n    'uploaded'             => 'Nepodarilo sa nahrať :attribute.',\n    'url'                  => ':Attribute musí mať formát URL.',\n    'uuid'                 => ':Attribute musí byť platné UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n    ],\n];\n"
  },
  {
    "path": "lang/sk/visibilities.php",
    "content": "<?php\n\nreturn [\n    'helpers'   => [\n        'admin'         => 'Iba admini kampane môžu vidieť tento prvok.',\n        'admin-self'    => 'Iba ty a admini kampane môžu vidieť tento prvok.',\n        'all'           => 'Každý môže vidieť tento prvok.',\n        'members'       => 'Iba členstvá tejto kampane môžu vidieť tento objekt.',\n        'self'          => 'Iba ty môžeš vidieť tento prvok.',\n    ],\n    'picker'    => [\n        'admin'         => 'Viditeľné iba pre členstvo role :admin',\n        'admin-self'    => 'Viditeľné iba pre teba a členstvo role :admin.',\n        'all'           => 'Hocikto, kto vidí objekt :entity, vidí aj toto.',\n        'failed'        => 'Nastavenie sa nedalo aktualizovať.',\n        'member'        => 'Viditeľné iba pre členstvo kampane. Vhodné pre verejné kampane.',\n        'self'          => 'Viditeľné iba pre teba.',\n    ],\n    'title'     => 'Aktualizujem viditeľnosť',\n    'toast'     => 'Viditeľnosť úspešne aktualizovaná.',\n    'tooltip'   => 'Klikni sem, ak sa chceš dozvedieť viac o rozličných možnostiach viditeľnosti.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ar/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'مهم: حدث خطأ أثناء النسخ الاحتياطي :application_name',\n    'backup_failed_subject'                 => 'أخفق النسخ الاحتياطي لل :application_name',\n    'backup_successful_body'                => 'أخبار عظيمة، نسخة احتياطية جديدة ل :application_name تم إنشاؤها بنجاح على القرص المسمى :disk_name.',\n    'backup_successful_subject'             => 'نسخ احتياطي جديد ناجح ل :application_name',\n    'backup_successful_subject_title'       => 'نجاح النسخ الاحتياطي الجديد!',\n    'cleanup_failed_body'                   => 'حدث خطأ أثناء تنظيف النسخ الاحتياطية ل :application_name',\n    'cleanup_failed_subject'                => 'فشل تنظيف النسخ الاحتياطي للتطبيق :application_name .',\n    'cleanup_successful_body'               => 'تنظيف النسخ الاحتياطية ل :application_name على القرص المسمى :disk_name تم بنجاح.',\n    'cleanup_successful_subject'            => 'تنظيف النسخ الاحتياطية ل :application_name تمت بنجاح',\n    'cleanup_successful_subject_title'      => 'تنظيف النسخ الاحتياطية تم بنجاح!',\n    'exception_message'                     => 'رسالة استثناء: :message',\n    'exception_message_title'               => 'رسالة استثناء',\n    'exception_trace'                       => 'تتبع الإستثناء: :trace',\n    'exception_trace_title'                 => 'تتبع الإستثناء',\n    'healthy_backup_found_body'             => 'تعتبر النسخ الاحتياطية ل :application_name صحية. عمل جيد!',\n    'healthy_backup_found_subject'          => 'النسخ الاحتياطية ل :application_name على القرص :disk_name صحية',\n    'healthy_backup_found_subject_title'    => 'النسخ الاحتياطية ل :application_name صحية',\n    'unhealthy_backup_found_body'           => 'النسخ الاحتياطية ل :application_name على القرص :disk_name غير صحية.',\n    'unhealthy_backup_found_empty'          => 'لا توجد نسخ احتياطية لهذا التطبيق على الإطلاق.',\n    'unhealthy_backup_found_full'           => 'النسخ الاحتياطية تستخدم الكثير من التخزين. الاستخدام الحالي هو :disk_usage وهو أعلى من الحد المسموح به من :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'لا يمكن الوصول إلى وجهة النسخ الاحتياطي. :error',\n    'unhealthy_backup_found_old'            => 'تم إنشاء أحدث النسخ الاحتياطية في :date وتعتبر قديمة جدا.',\n    'unhealthy_backup_found_subject'        => 'مهم: النسخ الاحتياطية ل :application_name غير صحية',\n    'unhealthy_backup_found_subject_title'  => 'مهم: النسخ الاحتياطية ل :application_name غير صحية. :problem',\n    'unhealthy_backup_found_unknown'        => 'عذرا، لا يمكن تحديد سبب دقيق.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ca/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Important: hi ha hagut un error mente es feia la copia de seguretat de :application_name',\n    'backup_failed_subject'                 => 'La còpia de seguretat de :application_name ha fallat',\n    'backup_successful_body'                => 'Bones notícies! Una nova còpia de seguretat de :application_name s\\'ha creat exitosament al disc :disk_name.',\n    'backup_successful_subject'             => 'Còpia de seguretat exitosa de :application_name',\n    'backup_successful_subject_title'       => 'Nova còpia de seguretat exitosa!',\n    'cleanup_failed_body'                   => 'Hi ha hagut un error al netejar les còpies de seguretat de :application_name',\n    'cleanup_failed_subject'                => 'La neteja de còpies de seguretat de :application_name ha fallat.',\n    'cleanup_successful_body'               => 'La neteja de les còpies de seguretat de :application_name ha finalitzat amb èxit.',\n    'cleanup_successful_subject'            => 'Neteja exitosa de les còpies de seguretat de :application_name',\n    'cleanup_successful_subject_title'      => 'La neteja de còpies de seguretat ha tingut èxit!',\n    'exception_message'                     => 'Missatge d\\'excepció: :message',\n    'exception_message_title'               => 'Missatge d\\'excepció',\n    'exception_trace'                       => 'Rastre de l\\'excepció: trace',\n    'exception_trace_title'                 => 'Rastre de l\\'excepció',\n    'healthy_backup_found_body'             => 'Les còpies de seguretat de :application_name es consideren adequades. Ben fet!',\n    'healthy_backup_found_subject'          => 'Les còpies de seguretat de :application_name al disc :disk_name són adequades',\n    'healthy_backup_found_subject_title'    => 'Les còpies de seguretat de :application_name són adequades',\n    'unhealthy_backup_found_body'           => 'Les còpies de seguretat de :application_name al disc :disk_name no són adequades.',\n    'unhealthy_backup_found_empty'          => 'No existeix cap còpia de seguretat.',\n    'unhealthy_backup_found_full'           => 'Les còpies de seguretat ocupen massa espai. El disc té :disk_usage ocupats i supera el límit permès de :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'La destinació de la còpia de seguretat no s\\'ha pogut trobar. :error',\n    'unhealthy_backup_found_old'            => 'L\\'última còpia de seguretat del :date es considera massa vella.',\n    'unhealthy_backup_found_subject'        => 'Important: les còpies de seguretat de :application_name no són adequades',\n    'unhealthy_backup_found_subject_title'  => 'Important: les còpies de seguretat de :application_name no són adequades. :problem',\n    'unhealthy_backup_found_unknown'        => 'Ho sentim, no es pot determinar una raó concreta.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/cs/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Důležité: Při záloze :application_name se vyskytla chyba',\n    'backup_failed_subject'                 => 'Záloha :application_name neuspěla',\n    'backup_successful_body'                => 'Dobrá zpráva, na disku jménem :disk_name byla úspěšně vytvořena nová záloha :application_name.',\n    'backup_successful_subject'             => 'Úspěšná nová záloha :application_name',\n    'backup_successful_subject_title'       => 'Úspěšná nová záloha!',\n    'cleanup_failed_body'                   => 'Při vyčištění záloh :application_name se vyskytla chyba',\n    'cleanup_failed_subject'                => 'Vyčištění záloh :application_name neuspělo.',\n    'cleanup_successful_body'               => 'Vyčištění záloh :application_name na disku jménem :disk_name bylo úspěšné.',\n    'cleanup_successful_subject'            => 'Vyčištění záloh :application_name úspěšné',\n    'cleanup_successful_subject_title'      => 'Vyčištění záloh bylo úspěšné!',\n    'exception_message'                     => 'Zpráva výjimky: :message',\n    'exception_message_title'               => 'Zpráva výjimky',\n    'exception_trace'                       => 'Stopa výjimky: :trace',\n    'exception_trace_title'                 => 'Stopa výjimky',\n    'healthy_backup_found_body'             => 'Zálohy pro :application_name jsou považovány za zdravé. Dobrá práce!',\n    'healthy_backup_found_subject'          => 'Zálohy pro :application_name na disku :disk_name jsou zdravé',\n    'healthy_backup_found_subject_title'    => 'Zálohy pro :application_name jsou zdravé',\n    'unhealthy_backup_found_body'           => 'Zálohy pro :application_name na disku :disk_name Jsou nezdravé.',\n    'unhealthy_backup_found_empty'          => 'Tato aplikace nemá vůbec žádné zálohy.',\n    'unhealthy_backup_found_full'           => 'Zálohy zabírají příliš mnoho místa na disku. Aktuální využití disku je :disk_usage, což je vyšší než povolený limit :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Nelze se dostat k cíli zálohy. :error',\n    'unhealthy_backup_found_old'            => 'Poslední záloha vytvořená dne :date je považována za příliš starou.',\n    'unhealthy_backup_found_subject'        => 'Důležité: Zálohy pro :application_name jsou nezdravé',\n    'unhealthy_backup_found_subject_title'  => 'Důležité: Zálohy pro :application_name jsou nezdravé. :problem',\n    'unhealthy_backup_found_unknown'        => 'Omlouváme se, nemůžeme určit přesný důvod.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/da/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Vigtigt: Der skete en fejl under backup af :application_name',\n    'backup_failed_subject'                 => 'Backup af :application_name fejlede',\n    'backup_successful_body'                => 'Gode nyheder - der blev oprettet en ny backup af :application_name på disken :disk_name.',\n    'backup_successful_subject'             => 'Ny backup af :application_name oprettet',\n    'backup_successful_subject_title'       => 'Ny backup!',\n    'cleanup_failed_body'                   => 'Der skete en fejl under oprydning af backups for :application_name',\n    'cleanup_failed_subject'                => 'Oprydning af backups for :application_name fejlede.',\n    'cleanup_successful_body'               => 'Oprydningen af backups for :application_name på disken :disk_name er gennemført.',\n    'cleanup_successful_subject'            => 'Oprydning af backups for :application_name gennemført',\n    'cleanup_successful_subject_title'      => 'Backup oprydning gennemført!',\n    'exception_message'                     => 'Fejlbesked: :message',\n    'exception_message_title'               => 'Fejlbesked',\n    'exception_trace'                       => 'Fejl trace: :trace',\n    'exception_trace_title'                 => 'Fejl trace',\n    'healthy_backup_found_body'             => 'Alle backups for :application_name er ok. Godt gået!',\n    'healthy_backup_found_subject'          => 'Alle backups for :application_name på disken :disk_name er OK',\n    'healthy_backup_found_subject_title'    => 'Alle backups for :application_name er OK',\n    'unhealthy_backup_found_body'           => 'Backups for :application_name på disken :disk_name er fejlbehæftede.',\n    'unhealthy_backup_found_empty'          => 'Denne applikation har ingen backups overhovedet.',\n    'unhealthy_backup_found_full'           => 'Backups bruger for meget plads. Nuværende disk forbrug er :disk_usage, hvilket er mere end den tilladte grænse på :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Backup destinationen kunne ikke findes. :error',\n    'unhealthy_backup_found_old'            => 'Den seneste backup fra :date er for gammel.',\n    'unhealthy_backup_found_subject'        => 'Vigtigt: Backups for :application_name fejlbehæftede',\n    'unhealthy_backup_found_subject_title'  => 'Vigtigt: Backups for :application_name er fejlbehæftede. :problem',\n    'unhealthy_backup_found_unknown'        => 'Beklager, en præcis årsag kunne ikke findes.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/de/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Wichtig: Beim Backup von :application_name ist ein Fehler aufgetreten',\n    'backup_failed_subject'                 => 'Backup von :application_name konnte nicht erstellt werden',\n    'backup_successful_body'                => 'Gute Nachrichten, ein neues Backup von :application_name wurde erfolgreich erstellt und in :disk_name gepeichert.',\n    'backup_successful_subject'             => 'Erfolgreiches neues Backup von :application_name',\n    'backup_successful_subject_title'       => 'Erfolgreiches neues Backup!',\n    'cleanup_failed_body'                   => 'Beim aufräumen der Backups von :application_name ist ein Fehler aufgetreten',\n    'cleanup_failed_subject'                => 'Aufräumen der Backups von :application_name schlug fehl.',\n    'cleanup_successful_body'               => 'Aufräumen der Backups von :application_name in :disk_name war erfolgreich.',\n    'cleanup_successful_subject'            => 'Aufräumen der Backups von :application_name backups erfolgreich',\n    'cleanup_successful_subject_title'      => 'Aufräumen der Backups erfolgreich!',\n    'exception_message'                     => 'Fehlermeldung: :message',\n    'exception_message_title'               => 'Fehlermeldung',\n    'exception_trace'                       => 'Fehlerverfolgung: :trace',\n    'exception_trace_title'                 => 'Fehlerverfolgung',\n    'healthy_backup_found_body'             => 'Die Backups von :application_name wurden als gesund eingestuft. Gute Arbeit!',\n    'healthy_backup_found_subject'          => 'Die Backups von :application_name in :disk_name sind gesund',\n    'healthy_backup_found_subject_title'    => 'Die Backups von :application_name sind Gesund',\n    'unhealthy_backup_found_body'           => 'Die Backups für :application_name in :disk_name sind ungesund.',\n    'unhealthy_backup_found_empty'          => 'Es gibt für die Anwendung noch gar keine Backups.',\n    'unhealthy_backup_found_full'           => 'Die Backups verbrauchen zu viel Platz. Aktuell wird :disk_usage belegt, dass ist höher als das erlaubte Limit von :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Das Backup Ziel konnte nicht erreicht werden. :error',\n    'unhealthy_backup_found_old'            => 'Das letzte Backup am :date ist zu lange her.',\n    'unhealthy_backup_found_subject'        => 'Wichtig: Die Backups für :application_name sind nicht gesund',\n    'unhealthy_backup_found_subject_title'  => 'Wichtig: Die Backups für :application_name sind ungesund. :problem',\n    'unhealthy_backup_found_unknown'        => 'Sorry, ein genauer Grund konnte nicht gefunden werden.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/en/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Important: An error occurred while backing up :application_name',\n    'backup_failed_subject'                 => 'Failed backup of :application_name',\n    'backup_successful_body'                => 'Great news, a new backup of :application_name was successfully created on the disk named :disk_name.',\n    'backup_successful_subject'             => 'Successful new backup of :application_name',\n    'backup_successful_subject_title'       => 'Successful new backup!',\n    'cleanup_failed_body'                   => 'An error occurred while cleaning up the backups of :application_name',\n    'cleanup_failed_subject'                => 'Cleaning up the backups of :application_name failed.',\n    'cleanup_successful_body'               => 'The clean up of the :application_name backups on the disk named :disk_name was successful.',\n    'cleanup_successful_subject'            => 'Clean up of :application_name backups successful',\n    'cleanup_successful_subject_title'      => 'Clean up of backups successful!',\n    'exception_message'                     => 'Exception message: :message',\n    'exception_message_title'               => 'Exception message',\n    'exception_trace'                       => 'Exception trace: :trace',\n    'exception_trace_title'                 => 'Exception trace',\n    'healthy_backup_found_body'             => 'The backups for :application_name are considered healthy. Good job!',\n    'healthy_backup_found_subject'          => 'The backups for :application_name on disk :disk_name are healthy',\n    'healthy_backup_found_subject_title'    => 'The backups for :application_name are healthy',\n    'unhealthy_backup_found_body'           => 'The backups for :application_name on disk :disk_name are unhealthy.',\n    'unhealthy_backup_found_empty'          => 'There are no backups of this application at all.',\n    'unhealthy_backup_found_full'           => 'The backups are using too much storage. Current usage is :disk_usage which is higher than the allowed limit of :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'The backup destination cannot be reached. :error',\n    'unhealthy_backup_found_old'            => 'The latest backup made on :date is considered too old.',\n    'unhealthy_backup_found_subject'        => 'Important: The backups for :application_name are unhealthy',\n    'unhealthy_backup_found_subject_title'  => 'Important: The backups for :application_name are unhealthy. :problem',\n    'unhealthy_backup_found_unknown'        => 'Sorry, an exact reason cannot be determined.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/es/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Importante: Ocurrió un error al realizar la copia de seguridad de :application_name',\n    'backup_failed_subject'                 => 'Copia de seguridad de :application_name fallida',\n    'backup_successful_body'                => 'Buenas noticias, una nueva copia de seguridad de :application_name fue creada con éxito en el disco llamado :disk_name.',\n    'backup_successful_subject'             => 'Se completó con éxito la copia de seguridad de :application_name',\n    'backup_successful_subject_title'       => '¡Nueva copia de seguridad creada con éxito!',\n    'cleanup_failed_body'                   => 'Ocurrió un error mientras se realizaba la limpieza de copias de seguridad de :application_name',\n    'cleanup_failed_subject'                => 'La limpieza de copias de seguridad de :application_name falló.',\n    'cleanup_successful_body'               => 'La limpieza de copias de seguridad de :application_name en el disco llamado :disk_name se completo con éxito.',\n    'cleanup_successful_subject'            => 'La limpieza de copias de seguridad de :application_name se completó con éxito',\n    'cleanup_successful_subject_title'      => '!Limpieza de copias de seguridad completada con éxito!',\n    'exception_message'                     => 'Mensaje de la excepción: :message',\n    'exception_message_title'               => 'Mensaje de la excepción',\n    'exception_trace'                       => 'Traza de la excepción: :trace',\n    'exception_trace_title'                 => 'Traza de la excepción',\n    'healthy_backup_found_body'             => 'Las copias de seguridad de :application_name se consideran en buen estado. ¡Buen trabajo!',\n    'healthy_backup_found_subject'          => 'Las copias de seguridad de :application_name en el disco :disk_name están en buen estado',\n    'healthy_backup_found_subject_title'    => 'Las copias de seguridad de :application_name están en buen estado',\n    'unhealthy_backup_found_body'           => 'Las copias de seguridad de :application_name en el disco :disk_name están en mal estado.',\n    'unhealthy_backup_found_empty'          => 'No existe ninguna copia de seguridad de esta aplicación.',\n    'unhealthy_backup_found_full'           => 'Las copias de seguridad  están ocupando demasiado espacio. El espacio utilizado actualmente es :disk_usage el cual es mayor que el límite permitido de :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'No se puede acceder al destino de la copia de seguridad. :error',\n    'unhealthy_backup_found_old'            => 'La última copia de seguriad hecha en :date es demasiado antigua.',\n    'unhealthy_backup_found_subject'        => 'Importante: Las copias de seguridad de :application_name están en mal estado',\n    'unhealthy_backup_found_subject_title'  => 'Importante: Las copias de seguridad de :application_name están en mal estado. :problem',\n    'unhealthy_backup_found_unknown'        => 'Lo siento, no es posible determinar la razón exacta.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/fa/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'پیغام مهم: هنگام پشتیبان‌گیری از :application_name خطایی رخ داده است.',\n    'backup_failed_subject'                 => 'پشتیبان‌گیری :application_name با خطا مواجه شد.',\n    'backup_successful_body'                => 'خبر خوب, به تازگی نسخه پشتیبان :application_name بر روی دیسک :disk_name با موفقیت ساخته شد.',\n    'backup_successful_subject'             => 'نسخه پشتیبان جدید :application_name با موفقیت ساخته شد.',\n    'backup_successful_subject_title'       => 'پشتیبان‌گیری موفق!',\n    'cleanup_failed_body'                   => 'هنگام پاک‌سازی نسخه پشتیبان :application_name خطایی رخ داده است.',\n    'cleanup_failed_subject'                => 'پاک‌‌سازی نسخه پشتیبان :application_name انجام نشد.',\n    'cleanup_successful_body'               => 'پاک‌سازی نسخه پشتیبان :application_name بر روی دیسک :disk_name با موفقیت انجام شد.',\n    'cleanup_successful_subject'            => 'پاک‌سازی نسخه پشتیبان :application_name با موفقیت انجام شد.',\n    'cleanup_successful_subject_title'      => 'پاک‌سازی نسخه پشتیبان!',\n    'exception_message'                     => 'پیغام خطا: :message',\n    'exception_message_title'               => 'پیغام خطا',\n    'exception_trace'                       => 'جزییات خطا: :trace',\n    'exception_trace_title'                 => 'جزییات خطا',\n    'healthy_backup_found_body'             => 'نسخه پشتیبان :application_name به نظر سالم میاد. دمت گرم!',\n    'healthy_backup_found_subject'          => 'نسخه پشتیبان :application_name بر روی دیسک :disk_name سالم بود.',\n    'healthy_backup_found_subject_title'    => 'نسخه پشتیبان :application_name سالم بود.',\n    'unhealthy_backup_found_body'           => 'نسخه پشتیبان :application_name بر روی دیسک :disk_name سالم نبود.',\n    'unhealthy_backup_found_empty'          => 'برای این برنامه هیچ نسخه پشتیبانی وجود ندارد.',\n    'unhealthy_backup_found_full'           => 'نسخه‌های پشتیبانی که تهیه کرده اید حجم زیادی اشغال کرده اند. میزان دیسک استفاده شده :disk_usage است که از میزان مجاز :disk_limit فراتر رفته است.',\n    'unhealthy_backup_found_not_reachable'  => 'مقصد پشتیبان‌گیری در دسترس نبود. :error',\n    'unhealthy_backup_found_old'            => 'آخرین نسخه پشتیبان برای تاریخ :date است. که به نظر خیلی قدیمی میاد.',\n    'unhealthy_backup_found_subject'        => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود.',\n    'unhealthy_backup_found_subject_title'  => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود. :problem',\n    'unhealthy_backup_found_unknown'        => 'متاسفانه دلیل دقیق مشخص نشده است.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/fi/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'HUOM!: :application_name varmuuskoipionnissa tapahtui virhe',\n    'backup_failed_subject'                 => ':application_name varmuuskopiointi epäonnistui',\n    'backup_successful_body'                => 'Hyviä uutisia! :application_name on varmuuskopioitu levylle :disk_name.',\n    'backup_successful_subject'             => ':application_name varmuuskopioitu onnistuneesti',\n    'backup_successful_subject_title'       => 'Uusi varmuuskopio!',\n    'cleanup_failed_body'                   => ':application_name varmuuskopioiden poistamisessa tapahtui virhe.',\n    'cleanup_failed_subject'                => ':application_name varmuuskopioiden poistaminen epäonnistui.',\n    'cleanup_successful_body'               => ':application_name varmuuskopiot poistettu onnistuneesti levyltä :disk_name.',\n    'cleanup_successful_subject'            => ':application_name varmuuskopiot poistettu onnistuneesti',\n    'cleanup_successful_subject_title'      => 'Varmuuskopiot poistettu onnistuneesti!',\n    'exception_message'                     => 'Virheilmoitus: :message',\n    'exception_message_title'               => 'Virheilmoitus',\n    'exception_trace'                       => 'Virhe, jäljitys: :trace',\n    'exception_trace_title'                 => 'Virheen jäljitys',\n    'healthy_backup_found_body'             => ':application_name varmuuskopiot ovat kunnossa. Hieno homma!',\n    'healthy_backup_found_subject'          => ':application_name varmuuskopiot levyllä :disk_name ovat kunnossa',\n    'healthy_backup_found_subject_title'    => ':application_name varmuuskopiot ovat kunnossa',\n    'unhealthy_backup_found_body'           => ':application_name varmuuskopiot levyllä :disk_name ovat vialliset.',\n    'unhealthy_backup_found_empty'          => 'Tästä sovelluksesta ei ole varmuuskopioita.',\n    'unhealthy_backup_found_full'           => 'Varmuuskopiot vievät liikaa levytilaa. Tällä hetkellä käytössä :disk_usage, mikä on suurempi kuin sallittu tilavuus (:disk_limit).',\n    'unhealthy_backup_found_not_reachable'  => 'Varmuuskopioiden kohdekansio ei ole saatavilla. :error',\n    'unhealthy_backup_found_old'            => 'Viimeisin varmuuskopio, luotu :date, on liian vanha.',\n    'unhealthy_backup_found_subject'        => 'HUOM!: :application_name varmuuskopiot ovat vialliset',\n    'unhealthy_backup_found_subject_title'  => 'HUOM!: :application_name varmuuskopiot ovat vialliset. :problem',\n    'unhealthy_backup_found_unknown'        => 'Virhe, tarkempaa tietoa syystä ei valitettavasti ole saatavilla.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/fr/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Important : Une erreur est survenue lors de la sauvegarde de :application_name',\n    'backup_failed_subject'                 => 'Échec de la sauvegarde de :application_name',\n    'backup_successful_body'                => 'Bonne nouvelle, une nouvelle sauvegarde de :application_name a été créée avec succès sur le disque nommé :disk_name.',\n    'backup_successful_subject'             => 'Succès de la sauvegarde de :application_name',\n    'backup_successful_subject_title'       => 'Sauvegarde créée avec succès !',\n    'cleanup_failed_body'                   => 'Une erreur est survenue lors du nettoyage des sauvegardes de :application_name',\n    'cleanup_failed_subject'                => 'Le nettoyage des sauvegardes de :application_name a echoué.',\n    'cleanup_successful_body'               => 'Le nettoyage des sauvegardes de :application_name sur le disque nommé :disk_name a été effectué avec succès.',\n    'cleanup_successful_subject'            => 'Succès du nettoyage des sauvegardes de :application_name',\n    'cleanup_successful_subject_title'      => 'Sauvegardes nettoyées avec succès !',\n    'exception_message'                     => 'Message de l\\'exception : :message',\n    'exception_message_title'               => 'Message de l\\'exception',\n    'exception_trace'                       => 'Trace de l\\'exception : :trace',\n    'exception_trace_title'                 => 'Trace de l\\'exception',\n    'healthy_backup_found_body'             => 'Les sauvegardes pour :application_name sont considérées saines. Bon travail !',\n    'healthy_backup_found_subject'          => 'Les sauvegardes pour :application_name sur le disque :disk_name sont saines',\n    'healthy_backup_found_subject_title'    => 'Les sauvegardes pour :application_name sont saines',\n    'unhealthy_backup_found_body'           => 'Les sauvegardes pour :application_name sur le disque :disk_name sont corrompues.',\n    'unhealthy_backup_found_empty'          => 'Il n\\'y a aucune sauvegarde pour cette application.',\n    'unhealthy_backup_found_full'           => 'Les sauvegardes utilisent trop d\\'espace disque. L\\'utilisation actuelle est de :disk_usage alors que la limite autorisée est de :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'La destination de la sauvegarde n\\'est pas accessible. :error',\n    'unhealthy_backup_found_old'            => 'La dernière sauvegarde du :date est considérée trop vieille.',\n    'unhealthy_backup_found_subject'        => 'Important : Les sauvegardes pour :application_name sont corrompues',\n    'unhealthy_backup_found_subject_title'  => 'Important : Les sauvegardes pour :application_name sont corrompues. :problem',\n    'unhealthy_backup_found_unknown'        => 'Désolé, une raison exacte ne peut être déterminée.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/gl/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Importante: ocorreu un erro ao facer a copia de seguridade de :application_name',\n    'backup_failed_subject'                 => 'Copia de seguridade de :application_name errada',\n    'backup_successful_body'                => 'Boas novas, unha nova copia de seguridade de :application_name foi creada exitosamente no disco chamado :disk_name.',\n    'backup_successful_subject'             => 'Nova copia de seguridade exitosa de :application_name',\n    'backup_successful_subject_title'       => 'Nova copia de seguridade completada con éxito!',\n    'cleanup_failed_body'                   => 'Ocorreu un erro ao limpar as copias de seguridade de :application_name',\n    'cleanup_failed_subject'                => 'Limpeza das copias de seguridade de :application_name errada.',\n    'cleanup_successful_body'               => 'A limpeza das copias de seguridade de :application_name no disco chamado :disk_name foi completada exitosamente.',\n    'cleanup_successful_subject'            => 'Limpeza das copias de seguridade de :application_name exitosa.',\n    'cleanup_successful_subject_title'      => 'Limpeza das copias de seguridade completada con éxito!',\n    'exception_message'                     => 'Mensaxe da excepción: :message',\n    'exception_message_title'               => 'Mensaxe da excepción',\n    'exception_trace'                       => 'Traza da excepción: :trace',\n    'exception_trace_title'                 => 'Traza da excepción',\n    'healthy_backup_found_body'             => 'As copias de seguridade de :application_name están en bo estado. Bo traballo!',\n    'healthy_backup_found_subject'          => 'As copias de seguridade de :application_name no disco :disk_name están en bo estado.',\n    'healthy_backup_found_subject_title'    => 'As copias de seguridade de :application_name están en bo estado.',\n    'unhealthy_backup_found_body'           => 'As copias de seguridade de :application_name no disco :disk_name están en mal estado.',\n    'unhealthy_backup_found_empty'          => 'Non existen copias de seguridade desta aplicación.',\n    'unhealthy_backup_found_full'           => 'As copias de seguridade están ocupando demasiado espazo. O espazo usado actualmente é :disk_usage, o cal é maior que o límite permitido de :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'O destino da copia de seguridade non pode ser alcanzado. :error',\n    'unhealthy_backup_found_old'            => 'A última copia de seguridade realizada en :date é considerada demasiado antiga.',\n    'unhealthy_backup_found_subject'        => 'Importante: As copias de seguridade de :application_name están en mal estado',\n    'unhealthy_backup_found_subject_title'  => 'Importante: As copias de seguridade de :application_name están en mal estado. :problem',\n    'unhealthy_backup_found_unknown'        => 'Sentímolo, non é posíbel determinar a razón exacta.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/hi/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'जरूरी सुचना: :application_name का बैकअप लेते समय असफल रहे',\n    'backup_failed_subject'                 => ':application_name का बैकअप असफल रहा',\n    'backup_successful_body'                => 'खुशखबरी, :application_name का बैकअप :disk_name पर संग्रहित करने मे सफल रहे.',\n    'backup_successful_subject'             => ':application_name का बैकअप सफल रहा',\n    'backup_successful_subject_title'       => 'बैकअप सफल रहा!',\n    'cleanup_failed_body'                   => ':application_name के बैकअप की सफाई करते समय कुछ बाधा आयी है.',\n    'cleanup_failed_subject'                => ':application_name के बैकअप की सफाई असफल रही.',\n    'cleanup_successful_body'               => ':application_name का बैकअप जो :disk_name नाम की डिस्क पर संग्रहित है, उसकी सफाई सफल रही.',\n    'cleanup_successful_subject'            => ':application_name के बैकअप की सफाई सफल रही',\n    'cleanup_successful_subject_title'      => 'बैकअप की सफाई सफल रही!',\n    'exception_message'                     => 'गलती संदेश: :message',\n    'exception_message_title'               => 'गलती संदेश',\n    'exception_trace'                       => 'गलती निशान: :trace',\n    'exception_trace_title'                 => 'गलती निशान',\n    'healthy_backup_found_body'             => 'बहुत बढ़िया! :application_name के सभी बैकअप स्वस्थ है.',\n    'healthy_backup_found_subject'          => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप स्वस्थ है',\n    'healthy_backup_found_subject_title'    => ':application_name के सभी बैकअप स्वस्थ है',\n    'unhealthy_backup_found_body'           => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप अस्वस्थ है',\n    'unhealthy_backup_found_empty'          => 'इस एप्लीकेशन का कोई भी बैकअप नहीं है.',\n    'unhealthy_backup_found_full'           => 'सभी बैकअप बहुत ज्यादा जगह का उपयोग कर रहे है. फ़िलहाल सभी बैकअप :disk_usage जगह का उपयोग कर रहे है, जो की :disk_limit अनुमति सीमा से अधिक का है.',\n    'unhealthy_backup_found_not_reachable'  => ':error के बजेसे बैकअप की मंजिल तक पोहोच नहीं सकते.',\n    'unhealthy_backup_found_old'            => 'हालहीमें :date को लिया हुआ बैकअप बहुत पुराना है.',\n    'unhealthy_backup_found_subject'        => 'जरूरी सुचना :  :application_name के बैकअप अस्वस्थ है',\n    'unhealthy_backup_found_subject_title'  => 'जरूरी सुचना : :application_name के बैकअप :problem के बजेसे अस्वस्थ है',\n    'unhealthy_backup_found_unknown'        => 'माफ़ कीजिये, सही कारण निर्धारित नहीं कर सकते.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/hr/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Važno: Dogodila se pogreška prilikom izrade sigurnosne kopije :application_name',\n    'backup_failed_subject'                 => 'Nije uspjelo sigurnosno kopiranje :application_name',\n    'backup_successful_body'                => 'Sjajne vijesti, nova sigurnosna kopija :application_name uspješno je stvorena na disku imena :disk_name.',\n    'backup_successful_subject'             => 'Uspješna nova sigurnosna kopija :application_name',\n    'backup_successful_subject_title'       => 'Uspješna nova sigurnosna kopija!',\n    'cleanup_failed_body'                   => 'Došlo je do pogreške prilikom čišćenja sigurnosnih kopija :application_name',\n    'cleanup_failed_subject'                => 'Čišćenje sigurnosnih kopija :application_name nije uspjelo.',\n    'cleanup_successful_body'               => 'Čišćenje sigurnosnih kopija :application_name na disku imena :disk_name je bilo uspješno.',\n    'cleanup_successful_subject'            => 'Čišćenje sigurnosnih kopija :application_name je uspješno',\n    'cleanup_successful_subject_title'      => 'Čišćenje sigurnosnih kopija je uspješno!',\n    'exception_message'                     => 'Poruka iznimke: :message',\n    'exception_message_title'               => 'Poruka iznimke',\n    'exception_trace'                       => 'Trag iznimke: :trace',\n    'exception_trace_title'                 => 'Trag iznimke',\n    'healthy_backup_found_body'             => 'Sigurnosne kopije za :application_name smatraju se zdravim. Dobar posao!',\n    'healthy_backup_found_subject'          => 'Sigurnosne kopije za :application_name na disku :disk_name su zdrave',\n    'healthy_backup_found_subject_title'    => 'Sigurnosne kopije za :application_name su zdrave',\n    'unhealthy_backup_found_body'           => 'Sigurnosne kopije za :application_name na disku :disk_name su nezdrave.',\n    'unhealthy_backup_found_empty'          => 'Nema sigurnosnih kopija ove aplikacije.',\n    'unhealthy_backup_found_full'           => 'Sigurnosne kopije koriste previše prostora za pohranu. Trenutačna upotreba je :disk_usage koja je veća od dopuštene granice :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Nije moguće doći do odredišta za sigurnosne kopije. :error',\n    'unhealthy_backup_found_old'            => 'Posljednja sigurnosna kopija napravljena :date smatra se prestarom.',\n    'unhealthy_backup_found_subject'        => 'Važno: Sigurnosne kopije za :application_name su nezdrave',\n    'unhealthy_backup_found_subject_title'  => 'Važno: Sigurnosne kopije za :application_name su nezdrave. :problem',\n    'unhealthy_backup_found_unknown'        => 'Nažalost, ne može se utvrditi točan razlog.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/id/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Penting: Sebuah error terjadi ketika membackup :application_name',\n    'backup_failed_subject'                 => 'Gagal backup :application_name',\n    'backup_successful_body'                => 'Kabar baik, sebuah backup baru dari :application_name sukses dibuat pada disk bernama :disk_name.',\n    'backup_successful_subject'             => 'Backup baru sukses dari :application_name',\n    'backup_successful_subject_title'       => 'Backup baru sukses!',\n    'cleanup_failed_body'                   => 'Sebuah error teradi ketika membersihkan backup dari :application_name',\n    'cleanup_failed_subject'                => 'Membersihkan backup dari :application_name yang gagal.',\n    'cleanup_successful_body'               => 'Pembersihan backup :application_name pada disk bernama :disk_name telah sukses.',\n    'cleanup_successful_subject'            => 'Sukses membersihkan backup :application_name',\n    'cleanup_successful_subject_title'      => 'Sukses membersihkan backup!',\n    'exception_message'                     => 'Pesan pengecualian: :message',\n    'exception_message_title'               => 'Pesan pengecualian',\n    'exception_trace'                       => 'Jejak pengecualian: :trace',\n    'exception_trace_title'                 => 'Jejak pengecualian',\n    'healthy_backup_found_body'             => 'Backup untuk :application_name dipertimbangkan sehat. Kerja bagus!',\n    'healthy_backup_found_subject'          => 'Backup untuk :application_name pada disk :disk_name sehat',\n    'healthy_backup_found_subject_title'    => 'Backup untuk :application_name sehat',\n    'unhealthy_backup_found_body'           => 'Backup untuk :application_name pada disk :disk_name tidak sehat.',\n    'unhealthy_backup_found_empty'          => 'Tidak ada backup pada aplikasi ini sama sekali.',\n    'unhealthy_backup_found_full'           => 'Backup menggunakan terlalu banyak kapasitas penyimpanan. Penggunaan terkini adalah :disk_usage dimana lebih besar dari batas yang diperbolehkan yaitu :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Tujuan backup tidak dapat terjangkau. :error',\n    'unhealthy_backup_found_old'            => 'Backup terakhir dibuat pada :date dimana dipertimbahkan sudah sangat lama.',\n    'unhealthy_backup_found_subject'        => 'Penting: Backup untuk :application_name tidak sehat',\n    'unhealthy_backup_found_subject_title'  => 'Penting: Backup untuk :application_name tidak sehat. :problem',\n    'unhealthy_backup_found_unknown'        => 'Maaf, sebuah alasan persisnya tidak dapat ditentukan.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/it/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Importante: Si è verificato un errore durante il backup di :application_name',\n    'backup_failed_subject'                 => 'Fallito il backup di :application_name',\n    'backup_successful_body'                => 'Grande notizia, un nuovo backup di :application_name è stato creato con successo sul disco :disk_name.',\n    'backup_successful_subject'             => 'Creato nuovo backup di :application_name',\n    'backup_successful_subject_title'       => 'Nuovo backup creato!',\n    'cleanup_failed_body'                   => 'Si è verificato un errore durante la pulizia dei backup di :application_name',\n    'cleanup_failed_subject'                => 'Pulizia dei backup di :application_name fallita.',\n    'cleanup_successful_body'               => 'La pulizia dei backup di :application_name sul disco :disk_name è avvenuta con successo.',\n    'cleanup_successful_subject'            => 'Pulizia dei backup di :application_name avvenuta con successo',\n    'cleanup_successful_subject_title'      => 'Pulizia dei backup avvenuta con successo!',\n    'exception_message'                     => 'Messaggio dell\\'eccezione: :message',\n    'exception_message_title'               => 'Messaggio dell\\'eccezione',\n    'exception_trace'                       => 'Traccia dell\\'eccezione: :trace',\n    'exception_trace_title'                 => 'Traccia dell\\'eccezione',\n    'healthy_backup_found_body'             => 'I backup per :application_name sono considerati sani. Bel Lavoro!',\n    'healthy_backup_found_subject'          => 'I backup per :application_name sul disco :disk_name sono sani',\n    'healthy_backup_found_subject_title'    => 'I backup per :application_name sono sani',\n    'unhealthy_backup_found_body'           => 'I backup per :application_name sul disco :disk_name sono corrotti.',\n    'unhealthy_backup_found_empty'          => 'Non esiste alcun backup di questa applicazione.',\n    'unhealthy_backup_found_full'           => 'I backup utilizzano troppa memoria. L\\'utilizzo corrente è :disk_usage che è superiore al limite consentito di :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Impossibile raggiungere la destinazione di backup. :error',\n    'unhealthy_backup_found_old'            => 'L\\'ultimo backup fatto il :date è considerato troppo vecchio.',\n    'unhealthy_backup_found_subject'        => 'Importante: i backup per :application_name sono corrotti',\n    'unhealthy_backup_found_subject_title'  => 'Importante: i backup per :application_name sono corrotti. :problem',\n    'unhealthy_backup_found_unknown'        => 'Spiacenti, non è possibile determinare una ragione esatta.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ja/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => '重要: :application_name のバックアップ中にエラーが発生しました。',\n    'backup_failed_subject'                 => ':application_name のバックアップに失敗しました。',\n    'backup_successful_body'                => '朗報です。ディスク :disk_name へ :application_name のバックアップが成功しました。',\n    'backup_successful_subject'             => ':application_name のバックアップに成功しました。',\n    'backup_successful_subject_title'       => 'バックアップに成功しました！',\n    'cleanup_failed_body'                   => ':application_name のバックアップ削除中にエラーが発生しました。',\n    'cleanup_failed_subject'                => ':application_name のバックアップ削除に失敗しました。',\n    'cleanup_successful_body'               => 'ディスク :disk_name に保存された :application_name のバックアップ削除に成功しました。',\n    'cleanup_successful_subject'            => ':application_name のバックアップ削除に成功しました。',\n    'cleanup_successful_subject_title'      => 'バックアップ削除に成功しました！',\n    'exception_message'                     => '例外のメッセージ: :message',\n    'exception_message_title'               => '例外のメッセージ',\n    'exception_trace'                       => '例外の追跡: :trace',\n    'exception_trace_title'                 => '例外の追跡',\n    'healthy_backup_found_body'             => ':application_name へのバックアップは正常です。いい仕事してますね！',\n    'healthy_backup_found_subject'          => 'ディスク :disk_name への :application_name のバックアップは正常です。',\n    'healthy_backup_found_subject_title'    => ':application_name のバックアップは正常です。',\n    'unhealthy_backup_found_body'           => ':disk_name への :application_name のバックアップに異常があります。',\n    'unhealthy_backup_found_empty'          => 'このアプリケーションのバックアップは見つかりませんでした。',\n    'unhealthy_backup_found_full'           => 'バックアップがディスク容量を圧迫しています。現在の使用量 :disk_usage　は、許可された限界値 :disk_limit を超えています。',\n    'unhealthy_backup_found_not_reachable'  => 'バックアップ先にアクセスできませんでした。 :error',\n    'unhealthy_backup_found_old'            => ':date に保存された直近のバックアップが古すぎます。',\n    'unhealthy_backup_found_subject'        => '重要: :application_name のバックアップに異常があります。',\n    'unhealthy_backup_found_subject_title'  => '重要: :application_name のバックアップに異常があります。 :problem',\n    'unhealthy_backup_found_unknown'        => '申し訳ございません。予期せぬエラーです。',\n];\n"
  },
  {
    "path": "lang/vendor/backup/nl/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Belangrijk: Er ging iets fout tijdens het maken van een back-up van :application_name',\n    'backup_failed_subject'                 => 'Back-up van :application_name mislukt',\n    'backup_successful_body'                => 'Goed nieuws, een nieuwe back-up van :application_name was succesvol aangemaakt op de schijf genaamd :disk_name.',\n    'backup_successful_subject'             => 'Succesvolle nieuwe back-up van :application_name',\n    'backup_successful_subject_title'       => 'Succesvolle nieuwe back-up!',\n    'cleanup_failed_body'                   => 'Er ging iets fout tijdens het opschonen van de back-ups van :application_name',\n    'cleanup_failed_subject'                => 'Het opschonen van de back-ups van :application_name is mislukt.',\n    'cleanup_successful_body'               => 'Het opschonen van de :application_name back-ups op de schijf genaamd :disk_name was succesvol.',\n    'cleanup_successful_subject'            => 'Opschonen van :application_name back-ups was succesvol.',\n    'cleanup_successful_subject_title'      => 'Opschonen van back-ups was succesvol!',\n    'exception_message'                     => 'Fout bericht: :message',\n    'exception_message_title'               => 'Fout bericht',\n    'exception_trace'                       => 'Fout trace: :trace',\n    'exception_trace_title'                 => 'Fout trace',\n    'healthy_backup_found_body'             => 'De back-ups voor :application_name worden als gezond beschouwd. Goed gedaan!',\n    'healthy_backup_found_subject'          => 'De back-ups voor :application_name op schijf :disk_name zijn gezond',\n    'healthy_backup_found_subject_title'    => 'De back-ups voor :application_name zijn gezond',\n    'unhealthy_backup_found_body'           => 'De back-ups voor :application_name op schijf :disk_name zijn niet gezond.',\n    'unhealthy_backup_found_empty'          => 'Er zijn geen back-ups van deze applicatie beschikbaar.',\n    'unhealthy_backup_found_full'           => 'De back-ups gebruiken te veel opslagruimte. Momenteel wordt er :disk_usage gebruikt wat hoger is dan de toegestane limiet van :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'De back-upbestemming kon niet worden bereikt. :error',\n    'unhealthy_backup_found_old'            => 'De laatste back-up gemaakt op :date is te oud.',\n    'unhealthy_backup_found_subject'        => 'Belangrijk: De back-ups voor :application_name zijn niet meer gezond',\n    'unhealthy_backup_found_subject_title'  => 'Belangrijk: De back-ups voor :application_name zijn niet gezond. :problem',\n    'unhealthy_backup_found_unknown'        => 'Sorry, een exacte reden kon niet worden bepaald.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/no/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Viktg: En feil oppstod under backing av :application_name',\n    'backup_failed_subject'                 => 'Backup feilet for :application_name',\n    'backup_successful_body'                => 'Gode nyheter, en ny backup av :application_name ble opprettet på disken :disk_name.',\n    'backup_successful_subject'             => 'Gjennomført backup av :application_name',\n    'backup_successful_subject_title'       => 'Gjennomført backup!',\n    'cleanup_failed_body'                   => 'En feil oppstod under opprydding av backups for :application_name',\n    'cleanup_failed_subject'                => 'Opprydding av backup for :application_name feilet.',\n    'cleanup_successful_body'               => 'Oppryddingen av backup for :application_name på disken :disk_name har blitt gjennomført.',\n    'cleanup_successful_subject'            => 'Opprydding av backup for :application_name gjennomført',\n    'cleanup_successful_subject_title'      => 'Opprydding av backup gjennomført!',\n    'exception_message'                     => 'Exception: :message',\n    'exception_message_title'               => 'Exception',\n    'exception_trace'                       => 'Exception trace: :trace',\n    'exception_trace_title'                 => 'Exception trace',\n    'healthy_backup_found_body'             => 'Alle backups for :application_name er ok. Godt jobba!',\n    'healthy_backup_found_subject'          => 'Alle backups for :application_name på disken :disk_name er OK',\n    'healthy_backup_found_subject_title'    => 'Alle backups for :application_name er OK',\n    'unhealthy_backup_found_body'           => 'Backups for :application_name på disken :disk_name er ikke OK.',\n    'unhealthy_backup_found_empty'          => 'Denne applikasjonen mangler backups.',\n    'unhealthy_backup_found_full'           => 'Backups bruker for mye lagringsplass. Nåværende diskbruk er :disk_usage, som er mer enn den tillatte grensen på :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Kunne ikke finne backup-destinasjonen. :error',\n    'unhealthy_backup_found_old'            => 'Den siste backupem fra :date er for gammel.',\n    'unhealthy_backup_found_subject'        => 'Viktig: Backups for :application_name ikke OK',\n    'unhealthy_backup_found_subject_title'  => 'Viktig: Backups for :application_name er ikke OK. :problem',\n    'unhealthy_backup_found_unknown'        => 'Beklager, kunne ikke finne nøyaktig årsak.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/pl/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Ważne: Wystąpił błąd podczas tworzenia kopii zapasowej aplikacji :application_name',\n    'backup_failed_subject'                 => 'Tworzenie kopii zapasowej aplikacji :application_name nie powiodło się',\n    'backup_successful_body'                => 'Wspaniała wiadomość, nowa kopia zapasowa aplikacji :application_name została pomyślnie utworzona na dysku o nazwie :disk_name.',\n    'backup_successful_subject'             => 'Pomyślnie utworzono kopię zapasową aplikacji :application_name',\n    'backup_successful_subject_title'       => 'Nowa kopia zapasowa!',\n    'cleanup_failed_body'                   => 'Wystąpił błąd podczas czyszczenia kopii zapasowej aplikacji :application_name',\n    'cleanup_failed_subject'                => 'Czyszczenie kopii zapasowych aplikacji :application_name nie powiodło się.',\n    'cleanup_successful_body'               => 'Czyszczenie kopii zapasowych aplikacji :application_name na dysku :disk_name zakończone sukcesem.',\n    'cleanup_successful_subject'            => 'Kopie zapasowe aplikacji :application_name zostały pomyślnie wyczyszczone',\n    'cleanup_successful_subject_title'      => 'Kopie zapasowe zostały pomyślnie wyczyszczone!',\n    'exception_message'                     => 'Błąd: :message',\n    'exception_message_title'               => 'Błąd',\n    'exception_trace'                       => 'Zrzut błędu: :trace',\n    'exception_trace_title'                 => 'Zrzut błędu',\n    'healthy_backup_found_body'             => 'Kopie zapasowe aplikacji :application_name są poprawne. Dobra robota!',\n    'healthy_backup_found_subject'          => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są poprawne',\n    'healthy_backup_found_subject_title'    => 'Kopie zapasowe aplikacji :application_name są poprawne',\n    'unhealthy_backup_found_body'           => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są niepoprawne.',\n    'unhealthy_backup_found_empty'          => 'W aplikacji nie ma żadnej kopii zapasowych tej aplikacji.',\n    'unhealthy_backup_found_full'           => 'Kopie zapasowe zajmują zbyt dużo miejsca. Obecne użycie dysku :disk_usage jest większe od ustalonego limitu :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Miejsce docelowe kopii zapasowej nie jest osiągalne. :error',\n    'unhealthy_backup_found_old'            => 'Ostatnia kopia zapasowa wykonania dnia :date jest zbyt stara.',\n    'unhealthy_backup_found_subject'        => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne',\n    'unhealthy_backup_found_subject_title'  => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne. :problem',\n    'unhealthy_backup_found_unknown'        => 'Niestety, nie można ustalić dokładnego błędu.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/pt/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Importante: Ocorreu um erro ao executar o backup da aplicação :application_name',\n    'backup_failed_subject'                 => 'Falha no backup da aplicação :application_name',\n    'backup_successful_body'                => 'Boas notícias, foi criado um novo backup no disco :disk_name referente à aplicação :application_name.',\n    'backup_successful_subject'             => 'Backup realizado com sucesso: :application_name',\n    'backup_successful_subject_title'       => 'Backup Realizado com Sucesso!',\n    'cleanup_failed_body'                   => 'Ocorreu um erro ao executar a limpeza dos backups da aplicação :application_name',\n    'cleanup_failed_subject'                => 'Falha na limpeza dos backups da aplicação :application_name.',\n    'cleanup_successful_body'               => 'Concluída a limpeza dos backups da aplicação :application_name no disco :disk_name.',\n    'cleanup_successful_subject'            => 'Limpeza dos backups da aplicação :application_name concluída!',\n    'cleanup_successful_subject_title'      => 'Limpeza dos backups concluída!',\n    'exception_message'                     => 'Exception message: :message',\n    'exception_message_title'               => 'Exception message',\n    'exception_trace'                       => 'Exception trace: :trace',\n    'exception_trace_title'                 => 'Exception trace',\n    'healthy_backup_found_body'             => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!',\n    'healthy_backup_found_subject'          => 'Os backups da aplicação :application_name no disco :disk_name estão em dia',\n    'healthy_backup_found_subject_title'    => 'Os backups da aplicação :application_name estão em dia',\n    'unhealthy_backup_found_body'           => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.',\n    'unhealthy_backup_found_empty'          => 'Não existem backups para essa aplicação.',\n    'unhealthy_backup_found_full'           => 'Os backups estão a utilizar demasiado espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'O destino dos backups não pode ser alcançado. :error',\n    'unhealthy_backup_found_old'            => 'O último backup realizado em :date é demasiado antigo.',\n    'unhealthy_backup_found_subject'        => 'Importante: Os backups da aplicação :application_name não estão em dia',\n    'unhealthy_backup_found_subject_title'  => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem',\n    'unhealthy_backup_found_unknown'        => 'Desculpe, impossível determinar a razão exata.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/pt-BR/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Importante: Ocorreu um erro ao fazer o backup da aplicação :application_name',\n    'backup_failed_subject'                 => 'Falha no backup da aplicação :application_name',\n    'backup_successful_body'                => 'Boas notícias, um novo backup da aplicação :application_name foi criado no disco :disk_name.',\n    'backup_successful_subject'             => 'Backup realizado com sucesso: :application_name',\n    'backup_successful_subject_title'       => 'Backup Realizado com sucesso!',\n    'cleanup_failed_body'                   => 'Um erro ocorreu ao fazer a limpeza dos backups da aplicação :application_name',\n    'cleanup_failed_subject'                => 'Falha na limpeza dos backups da aplicação :application_name.',\n    'cleanup_successful_body'               => 'A limpeza dos backups da aplicação :application_name no disco :disk_name foi concluída.',\n    'cleanup_successful_subject'            => 'Limpeza dos backups da aplicação :application_name concluída!',\n    'cleanup_successful_subject_title'      => 'Limpeza dos backups concluída!',\n    'exception_message'                     => 'Exception message: :message',\n    'exception_message_title'               => 'Exception message',\n    'exception_trace'                       => 'Exception trace: :trace',\n    'exception_trace_title'                 => 'Exception trace',\n    'healthy_backup_found_body'             => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!',\n    'healthy_backup_found_subject'          => 'Os backups da aplicação :application_name no disco :disk_name estão em dia',\n    'healthy_backup_found_subject_title'    => 'Os backups da aplicação :application_name estão em dia',\n    'unhealthy_backup_found_body'           => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.',\n    'unhealthy_backup_found_empty'          => 'Não existem backups para essa aplicação.',\n    'unhealthy_backup_found_full'           => 'Os backups estão usando muito espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'O destino dos backups não pode ser alcançado. :error',\n    'unhealthy_backup_found_old'            => 'O último backup realizado em :date é considerado muito antigo.',\n    'unhealthy_backup_found_subject'        => 'Importante: Os backups da aplicação :application_name não estão em dia',\n    'unhealthy_backup_found_subject_title'  => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem',\n    'unhealthy_backup_found_unknown'        => 'Desculpe, a exata razão não pode ser encontrada.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ro/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Important: A apărut o eroare în timpul generării copiei de rezervă pentru :application_name',\n    'backup_failed_subject'                 => 'Nu s-a putut face copie de rezervă pentru :application_name',\n    'backup_successful_body'                => 'Vești bune, o nouă copie de rezervă pentru :application_name a fost creată cu succes pe discul cu numele :disk_name.',\n    'backup_successful_subject'             => 'Copie de rezervă efectuată cu succes pentru :application_name',\n    'backup_successful_subject_title'       => 'O nouă copie de rezervă a fost efectuată cu succes!',\n    'cleanup_failed_body'                   => 'A apărut o eroare în timpul curățirii copiilor de rezervă pentru :application_name',\n    'cleanup_failed_subject'                => 'Curățarea copiilor de rezervă pentru :application_name nu a reușit.',\n    'cleanup_successful_body'               => 'Curățarea copiilor de rezervă pentru :application_name de pe discul cu numele :disk_name a fost făcută cu succes.',\n    'cleanup_successful_subject'            => 'Curățarea copiilor de rezervă pentru :application_name a fost făcută cu succes',\n    'cleanup_successful_subject_title'      => 'Curățarea copiilor de rezervă a fost făcută cu succes!',\n    'exception_message'                     => 'Cu excepția mesajului: :message',\n    'exception_message_title'               => 'Mesaj de excepție',\n    'exception_trace'                       => 'Urmă excepţie: :trace',\n    'exception_trace_title'                 => 'Urmă excepţie',\n    'healthy_backup_found_body'             => 'Copiile de rezervă pentru :application_name sunt considerate în regulă. Bună treabă!',\n    'healthy_backup_found_subject'          => 'Copiile de rezervă pentru :application_name de pe discul :disk_name sunt în regulă',\n    'healthy_backup_found_subject_title'    => 'Copiile de rezervă pentru :application_name sunt în regulă',\n    'unhealthy_backup_found_body'           => 'Copiile de rezervă pentru :application_name de pe discul :disk_name nu sunt în regulă.',\n    'unhealthy_backup_found_empty'          => 'Nu există copii de rezervă ale acestei aplicații.',\n    'unhealthy_backup_found_full'           => 'Copiile de rezervă folosesc prea mult spațiu de stocare. Utilizarea curentă este de :disk_usage care este mai mare decât limita permisă de :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Nu se poate ajunge la destinația copiilor de rezervă. :error',\n    'unhealthy_backup_found_old'            => 'Cea mai recentă copie de rezervă făcută la :date este considerată prea veche.',\n    'unhealthy_backup_found_subject'        => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă',\n    'unhealthy_backup_found_subject_title'  => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă. :problem',\n    'unhealthy_backup_found_unknown'        => 'Ne pare rău, un motiv exact nu poate fi determinat.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ru/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Внимание: Произошла ошибка во время резервного копирования :application_name',\n    'backup_failed_subject'                 => 'Не удалось сделать резервную копию :application_name',\n    'backup_successful_body'                => 'Отличная новость, новая резервная копия :application_name успешно создана и сохранена на диск :disk_name.',\n    'backup_successful_subject'             => 'Успешно создана новая резервная копия :application_name',\n    'backup_successful_subject_title'       => 'Успешно создана новая резервная копия!',\n    'cleanup_failed_body'                   => 'Произошла ошибка при очистке резервных копий :application_name',\n    'cleanup_failed_subject'                => 'Не удалось очистить резервные копии :application_name',\n    'cleanup_successful_body'               => 'Очистка от старых резервных копий :application_name на диске :disk_name прошла удачно.',\n    'cleanup_successful_subject'            => 'Очистка от резервных копий :application_name прошла успешно',\n    'cleanup_successful_subject_title'      => 'Очистка резервных копий прошла удачно!',\n    'exception_message'                     => 'Сообщение об ошибке: :message',\n    'exception_message_title'               => 'Сообщение об ошибке',\n    'exception_trace'                       => 'Сведения об ошибке: :trace',\n    'exception_trace_title'                 => 'Сведения об ошибке',\n    'healthy_backup_found_body'             => 'Резервная копия :application_name успешно установлена. Хорошая работа!',\n    'healthy_backup_found_subject'          => 'Резервная копия :application_name с диска :disk_name установлена',\n    'healthy_backup_found_subject_title'    => 'Резервная копия :application_name установлена',\n    'unhealthy_backup_found_body'           => 'Резервная копия для :application_name на диске :disk_name не установилась.',\n    'unhealthy_backup_found_empty'          => 'Резервные копии для этого приложения отсутствуют.',\n    'unhealthy_backup_found_full'           => 'Резервные копии используют слишком много памяти. Используется :disk_usage что выше допустимого предела: :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Резервная копия не смогла установиться. :error',\n    'unhealthy_backup_found_old'            => 'Последнее резервное копирование создано :date является устаревшим.',\n    'unhealthy_backup_found_subject'        => 'Внимание: резервная копия :application_name не установилась',\n    'unhealthy_backup_found_subject_title'  => 'Внимание: резервная копия для :application_name не установилась. :problem',\n    'unhealthy_backup_found_unknown'        => 'Извините, точная причина не может быть определена.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/sk/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Dôležité: Pri vytváraní zálohy :application_name sa vyskytla chyba',\n    'backup_failed_subject'                 => 'Chyba pri zálohovaní :application_name',\n    'backup_successful_body'                => 'Výborné správy, nová zálohy :application_name bola úspešne vytvorená na disku :disk_name.',\n    'backup_successful_subject'             => 'Záloha :application_name bola úspešná',\n    'backup_successful_subject_title'       => 'Nová záloha úspešná!',\n    'cleanup_failed_body'                   => 'Pri čistení záloh :application_name sa vyskytla chyba',\n    'cleanup_failed_subject'                => 'Čistenie záloh :application_name zlyhalo',\n    'cleanup_successful_body'               => 'Čistenie záloh :application_name na disku :disk_name bolo úspešné.',\n    'cleanup_successful_subject'            => 'Čistenie záloh :application_name úspešné',\n    'cleanup_successful_subject_title'      => 'Čistenie záloh skončilo úspešne!',\n    'exception_message'                     => 'Hlásenie o chybe: :message',\n    'exception_message_title'               => 'Hlásenie o chybe',\n    'exception_trace'                       => 'Stopovanie chyby: :trace',\n    'exception_trace_title'                 => 'Stopovanie chyby',\n    'healthy_backup_found_body'             => 'Zálohy :application_name vyzerajú v poriadku. Len tak ďalej!',\n    'healthy_backup_found_subject'          => 'Zálohy :application_name na disku :disk_name sú v poriadku',\n    'healthy_backup_found_subject_title'    => 'Zálohy :application_name sú v poriadku',\n    'unhealthy_backup_found_body'           => 'Zálohy :application name na disku :disk_name sú poškodené.',\n    'unhealthy_backup_found_empty'          => 'Pre túto aplikáciu neexistujú žiadne zálohy.',\n    'unhealthy_backup_found_full'           => 'Zálohy vyžadujú príliš veľa priestoru. Aktuálne zaberajú :disk_usage, čo je viac ako povolený limit :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Priečinok so zálohami nie je dostupný. :error',\n    'unhealthy_backup_found_old'            => 'Posledná záloha z :date je príliš stará.',\n    'unhealthy_backup_found_subject'        => 'Dôležité: Zálohy :application_name sú poškodené',\n    'unhealthy_backup_found_subject_title'  => 'Dôležité: Zálohy :application_name sú poškodené. :problem',\n    'unhealthy_backup_found_unknown'        => 'Prepáč, presný dôvod nebolo možné zistiť.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/tr/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Önemli: Yedeklenirken bir hata oluştu :application_name',\n    'backup_failed_subject'                 => 'Yedeklenemedi :application_name',\n    'backup_successful_body'                => 'Harika bir haber, :application_name âit yeni bir yedekleme :disk_name adlı diskte başarıyla oluşturuldu.',\n    'backup_successful_subject'             => 'Başarılı :application_name yeni yedeklemesi',\n    'backup_successful_subject_title'       => 'Başarılı bir yeni yedekleme!',\n    'cleanup_failed_body'                   => ':application_name yedeklerini temizlerken bir hata oluştu',\n    'cleanup_failed_subject'                => ':application_name yedeklemeleri temizlenmesi başarısız.',\n    'cleanup_successful_body'               => ':application_name yedeklemeleri temizlenmesi ,:disk_name diskinden silindi',\n    'cleanup_successful_subject'            => ':application_name yedeklemeleri temizlenmesi başarılı.',\n    'cleanup_successful_subject_title'      => 'Yedeklerin temizlenmesi başarılı!',\n    'exception_message'                     => 'Hata mesajı: :message',\n    'exception_message_title'               => 'Hata mesajı',\n    'exception_trace'                       => 'Hata izleri: :trace',\n    'exception_trace_title'                 => 'Hata izleri',\n    'healthy_backup_found_body'             => ':application_name için yapılan yedeklemeler sağlıklı sayılır. Aferin!',\n    'healthy_backup_found_subject'          => ':application_name yedeklenmesi ,:disk_name adlı diskte sağlıklı',\n    'healthy_backup_found_subject_title'    => ':application_name yedeklenmesi sağlıklı',\n    'unhealthy_backup_found_body'           => 'Yedeklemeler: :application_name disk: :disk_name sağlıksız.',\n    'unhealthy_backup_found_empty'          => 'Bu uygulamanın yedekleri yok.',\n    'unhealthy_backup_found_full'           => 'Yedeklemeler çok fazla depolama alanı kullanıyor. Şu anki kullanım: :disk_usage, izin verilen sınırdan yüksek: :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Yedekleme hedefine ulaşılamıyor. :error',\n    'unhealthy_backup_found_old'            => ':date tarihinde yapılan en son yedekleme çok eski kabul ediliyor.',\n    'unhealthy_backup_found_subject'        => 'Önemli: :application_name için yedeklemeler sağlıksız',\n    'unhealthy_backup_found_subject_title'  => 'Önemli: :application_name için yedeklemeler sağlıksız. :problem',\n    'unhealthy_backup_found_unknown'        => 'Üzgünüm, kesin bir sebep belirlenemiyor.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/uk/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => 'Увага: Трапилась помилка під час резервного копіювання :application_name',\n    'backup_failed_subject'                 => 'Не вдалось зробити резервну копію :application_name',\n    'backup_successful_body'                => 'Чудова новина, нова резервна копія :application_name успішно створена і збережена на диск :disk_name.',\n    'backup_successful_subject'             => 'Успішне резервне копіювання :application_name',\n    'backup_successful_subject_title'       => 'Успішно створена резервна копія!',\n    'cleanup_failed_body'                   => 'Сталася помилка під час очищення резервних копій :application_name',\n    'cleanup_failed_subject'                => 'Не вдалось очистити резервні копії :application_name',\n    'cleanup_successful_body'               => 'Очищенно від старих резервних копій :application_name на диску :disk_name пойшло успішно.',\n    'cleanup_successful_subject'            => 'Успішне очищення від резервних копій :application_name',\n    'cleanup_successful_subject_title'      => 'Очищення резервних копій пройшло вдало!',\n    'exception_message'                     => 'Повідомлення про помилку: :message',\n    'exception_message_title'               => 'Повідомлення помилки',\n    'exception_trace'                       => 'Деталі помилки: :trace',\n    'exception_trace_title'                 => 'Деталі помилки',\n    'healthy_backup_found_body'             => 'Резервна копія :application_name успішно установлена. Хороша робота!',\n    'healthy_backup_found_subject'          => 'Резервна копія :application_name з диску :disk_name установлена',\n    'healthy_backup_found_subject_title'    => 'Резервна копія :application_name установлена',\n    'unhealthy_backup_found_body'           => 'Резервна копія для :application_name на диску :disk_name не установилась.',\n    'unhealthy_backup_found_empty'          => 'Резервні копії для цього додатку відсутні.',\n    'unhealthy_backup_found_full'           => 'Резервні копії використовують занадто багато пам`яті. Використовується :disk_usage що вище за допустиму межу :disk_limit.',\n    'unhealthy_backup_found_not_reachable'  => 'Резервна копія не змогла установитись. :error',\n    'unhealthy_backup_found_old'            => 'Останнє резервне копіювання створено :date є застарілим.',\n    'unhealthy_backup_found_subject'        => 'Увага: резервна копія :application_name не установилась',\n    'unhealthy_backup_found_subject_title'  => 'Увага: резервна копія для :application_name не установилась. :problem',\n    'unhealthy_backup_found_unknown'        => 'Вибачте, але ми не змогли визначити точну причину.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/zh-CN/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => '重要说明：备份 :application_name 时发生错误',\n    'backup_failed_subject'                 => ':application_name 备份失败',\n    'backup_successful_body'                => '好消息, :application_name 备份成功，位于磁盘 :disk_name 中。',\n    'backup_successful_subject'             => ':application_name 备份成功',\n    'backup_successful_subject_title'       => '备份成功！',\n    'cleanup_failed_body'                   => '清除备份 :application_name 时发生错误',\n    'cleanup_failed_subject'                => '清除 :application_name 的备份失败。',\n    'cleanup_successful_body'               => '成功清除 :disk_name 磁盘上 :application_name 的备份。',\n    'cleanup_successful_subject'            => '成功清除 :application_name 的备份',\n    'cleanup_successful_subject_title'      => '成功清除备份！',\n    'exception_message'                     => '异常信息: :message',\n    'exception_message_title'               => '异常信息',\n    'exception_trace'                       => '异常跟踪: :trace',\n    'exception_trace_title'                 => '异常跟踪',\n    'healthy_backup_found_body'             => ':application_name 的备份是健康的。干的好！',\n    'healthy_backup_found_subject'          => ':disk_name 磁盘上 :application_name 的备份是健康的',\n    'healthy_backup_found_subject_title'    => ':application_name 的备份是健康的',\n    'unhealthy_backup_found_body'           => ':disk_name 磁盘上 :application_name 的备份不健康。',\n    'unhealthy_backup_found_empty'          => '根本没有此应用程序的备份。',\n    'unhealthy_backup_found_full'           => '备份占用了太多存储空间。当前占用了 :disk_usage ，高于允许的限制 :disk_limit。',\n    'unhealthy_backup_found_not_reachable'  => '无法访问备份目标。 :error',\n    'unhealthy_backup_found_old'            => '最近的备份创建于 :date ，太旧了。',\n    'unhealthy_backup_found_subject'        => '重要说明：:application_name 的备份不健康',\n    'unhealthy_backup_found_subject_title'  => '重要说明：:application_name 备份不健康。 :problem',\n    'unhealthy_backup_found_unknown'        => '对不起，确切原因无法确定。',\n];\n"
  },
  {
    "path": "lang/vendor/backup/zh-TW/notifications.php",
    "content": "<?php\n\nreturn [\n    'backup_failed_body'                    => '重要說明：備份 :application_name 時發生錯誤',\n    'backup_failed_subject'                 => ':application_name 備份失敗',\n    'backup_successful_body'                => '好消息, :application_name 備份成功，位於磁盤 :disk_name 中。',\n    'backup_successful_subject'             => ':application_name 備份成功',\n    'backup_successful_subject_title'       => '備份成功！',\n    'cleanup_failed_body'                   => '清除備份 :application_name 時發生錯誤',\n    'cleanup_failed_subject'                => '清除 :application_name 的備份失敗。',\n    'cleanup_successful_body'               => '成功清除 :disk_name 磁盤上 :application_name 的備份。',\n    'cleanup_successful_subject'            => '成功清除 :application_name 的備份',\n    'cleanup_successful_subject_title'      => '成功清除備份！',\n    'exception_message'                     => '異常訊息: :message',\n    'exception_message_title'               => '異常訊息',\n    'exception_trace'                       => '異常追蹤: :trace',\n    'exception_trace_title'                 => '異常追蹤',\n    'healthy_backup_found_body'             => ':application_name 的備份是健康的。幹的好！',\n    'healthy_backup_found_subject'          => ':disk_name 磁盤上 :application_name 的備份是健康的',\n    'healthy_backup_found_subject_title'    => ':application_name 的備份是健康的',\n    'unhealthy_backup_found_body'           => ':disk_name 磁盤上 :application_name 的備份不健康。',\n    'unhealthy_backup_found_empty'          => '根本沒有此應用程序的備份。',\n    'unhealthy_backup_found_full'           => '備份佔用了太多存儲空間。當前佔用了 :disk_usage ，高於允許的限制 :disk_limit。',\n    'unhealthy_backup_found_not_reachable'  => '無法訪問備份目標。 :error',\n    'unhealthy_backup_found_old'            => '最近的備份創建於 :date ，太舊了。',\n    'unhealthy_backup_found_subject'        => '重要說明：:application_name 的備份不健康',\n    'unhealthy_backup_found_subject_title'  => '重要說明：:application_name 備份不健康。 :problem',\n    'unhealthy_backup_found_unknown'        => '對不起，確切原因無法確定。',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/ca/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Acciones',\n    'armor_class'                   => 'Clase de Armadura',\n    'at_will'                       => 'A voluntad',\n    'cha'                           => 'CAR',\n    'challenge_rating'              => 'Desafío',\n    'con'                           => 'CON',\n    'condition_immunities'          => 'Inmunidad a las condiciones',\n    'damage_immunities'             => 'Inmunidad al daño',\n    'damage_resistance'             => 'Resistencia al daño',\n    'dex'                           => 'DES',\n    'fields'                        => [\n        'alignment'             => 'Alineamiento',\n        'armor_class'           => 'Clase de Armadura',\n        'cha'                   => 'CAR',\n        'challenge_rating'      => 'Desafío',\n        'con'                   => 'CON',\n        'condition_immunities'  => 'Inmunidad a las condiciones',\n        'creature_race'         => 'Raza',\n        'damage_immunities'     => 'Inmunidad al daño',\n        'damage_resistances'    => 'Resistencia al daño',\n        'dex'                   => 'DES',\n        'hit_points'            => 'Puntos de Golpe',\n        'int'                   => 'INT',\n        'languages'             => 'Lenguajes',\n        'multiattack'           => 'Ataque Múltiple',\n        'saving_throws'         => 'Tiradas de Salvación',\n        'senses'                => 'Sentidos',\n        'size'                  => 'Tamaño',\n        'skills'                => 'Habilidades',\n        'speed'                 => 'Velocidad',\n        'spells_at_will'        => 'Hechizos a voluntad',\n        'str'                   => 'FUE',\n        'wis'                   => 'SAB',\n    ],\n    'hit_points'                    => 'Puntos de Golpe',\n    'innate_spellcasting'           => 'Lanzador Innato de Conjuros',\n    'int'                           => 'INT',\n    'languages'                     => 'Lenguajes',\n    'legendary_actions'             => 'Acciones Legendarias',\n    'legendary_resistance_count'    => 'Resistencia Legendaria|Resistencia Legendaria (:count/Día)',\n    'magic_resistance'              => 'Resistencia Mágica',\n    'magic_weapons'                 => 'Armas Mágicas',\n    'multiattack'                   => 'Ataque Múltiple',\n    'name'                          => 'D&D 5e Monster (ESP)',\n    'reactions'                     => 'Reacciones',\n    'regeneration'                  => 'Regeneración',\n    'saving_throws'                 => 'Tiradas de Salvación',\n    'senses'                        => 'Sentidos',\n    'skills'                        => 'Habilidades',\n    'speed'                         => 'Velocidad',\n    'spells_1'                      => '1/día cada uno',\n    'spells_3'                      => '3/día cada uno',\n    'str'                           => 'FUE',\n    'values'                        => [\n        'ability_1'             => 'Teleportar. {name} se teleporta mágicamente, junto con cualquier equipo que vista o cargue, hasta una distancia de 120 pies a un espacio no ocupado que pueda ver.',\n        'armor_class'           => '19 (armadura natural)',\n        'attack_1'              => 'Garras. Ataque cuerpo a cuerpo: +1 para golpear, alcance de 15 pies, un objetivo. Impacto: 14 (2d6 + 4) daño cortante.',\n        'attack_2'              => 'Aguijón. Ataque cuerpo a cuerpo: +1 para golpear, alcance de 5 pies, un objetivo. Impacto: 5 (1d4 + 2) daño perforante.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'encantado, apresado',\n        'damage_immunities'     => 'frío, fuego',\n        'damage_resistances'    => 'perforante',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => 'La característica para el lanzamiento de conjuros es Carisma. {name} puede lanzar los siguientes conjuros de forma innata, que no requieren componentes materiales:',\n        'int'                   => '8 (-1)',\n        'languages'             => 'común, infernal',\n        'legendary_action_1'    => 'Mirada Aterradora (Requiere 2 Acciones). {name} fija su mirada en una criatura que pueda ver a 10 pies. El objetivo debe superar una tirada de salvación de Sabiduría CD 18 contra esta magia o quedará asustado durante un minuto. El objetivo asustado puede repetir la tirada de salvación al final de cada uno de sus turnos. Si tiene éxito en la tirada de salvación o el efecto termina por sí mismo, el objetivo será inmune a la mirada aterradora durante las próximas 24 horas.',\n        'legendary_actions'     => '{name} puede seleccionar 3 acciones legendarias, elegir entre las siguientes opciones. Solo se puede utilizar una acción legendaria a la vez y solo al final del turno de otra criatura. {name} recupera las acciones legendarias gastadas al inicio de su turno.',\n        'legendary_resistance'  => 'Si {name} falla una tirada de salvación, puede elegir tener éxito en su lugar.',\n        'magic_resistance'      => '{name} tiene ventaja en las tiradas de salvación contra hechizos y otros efectos mágicos.',\n        'magic_weapons'         => 'Los ataques de {name} son mágicos.',\n        'multiattack'           => 'dos ataques: uno con sus garras y otro con su aguijón.',\n        'regeneration'          => '{name} recupera 5 puntos de golpe al comienzo de su turno.',\n        'saving_throws'         => 'Con +5',\n        'senses'                => 'visión en la oscuridad 60 pies',\n        'size'                  => 'Mediano',\n        'skills'                => 'Atletismo +4',\n        'speed'                 => '30 ft.',\n        'spells_at_will'        => 'alterar aspecto, detectar mágia, geas, tormenta de hielo, invisibilidad',\n        'spells_once'           => 'palabra sagrada, símbolo (de dolor solo)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'SAB',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/cs/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Akce',\n    'armor_class'                   => 'Druh brnění',\n    'at_will'                       => 'Libovolně',\n    'cha'                           => 'CHAR',\n    'challenge_rating'              => 'Úroveň obtížnosti',\n    'con'                           => 'ODO',\n    'condition_immunities'          => 'Imunita vůči prostředí',\n    'damage_immunities'             => 'Imunita vůči zranění',\n    'damage_resistance'             => 'Odolnost vůči zranění',\n    'dex'                           => 'OBR',\n    'fields'                        => [\n        'alignment'             => 'Přesvědčení',\n        'armor_class'           => 'Druh brnění',\n        'cha'                   => 'CHAR',\n        'challenge_rating'      => 'Úroveň obtížnosti',\n        'con'                   => 'ODO',\n        'condition_immunities'  => 'Imunita vůči prostředí',\n        'creature_race'         => 'Rasa stvoření',\n        'damage_immunities'     => 'Imunita vůči zranění',\n        'damage_resistances'    => 'Odolnost vůči zranění',\n        'dex'                   => 'OBR',\n        'hit_points'            => 'Životy',\n        'int'                   => 'INT',\n        'languages'             => 'Jazyky',\n        'multiattack'           => 'Vácenásobný útok',\n        'saving_throws'         => 'Záchranné hody',\n        'senses'                => 'Smysly',\n        'size'                  => 'Velikost',\n        'skills'                => 'Dovednosti',\n        'speed'                 => 'Rychlost',\n        'spells_at_will'        => 'Libovolná kouzla',\n        'str'                   => 'SIL',\n        'wis'                   => 'MOU',\n    ],\n    'hit_points'                    => 'Životy',\n    'innate_spellcasting'           => 'Vrozené schopnosti kouzlení',\n    'int'                           => 'INT',\n    'languages'                     => 'Jazyky',\n    'legendary_actions'             => 'Legendární akce',\n    'legendary_resistance_count'    => 'Legendární odolnost|Legendární odolnost (:count/den)',\n    'magic_resistance'              => 'Odolnost proti magii',\n    'magic_weapons'                 => 'Magické zbraně',\n    'multiattack'                   => 'Vácenásobný útok',\n    'name'                          => 'Nestvůra D&D 5. edice',\n    'reactions'                     => 'Reakce',\n    'regeneration'                  => 'Regenerace',\n    'saving_throws'                 => 'Záchranné hody',\n    'senses'                        => 'Smysly',\n    'skills'                        => 'Dovednosti',\n    'speed'                         => 'Rychlost',\n    'spells_1'                      => 'Jednou denně',\n    'spells_3'                      => 'Třikrát denně',\n    'str'                           => 'SIL',\n    'values'                        => [\n        'ability_1'             => 'Teleport. {name} magicky přenese, společně s vybavením, které postava nese nebo má u sebe, na vzdálenost až 40m na volné místo v dohledu.',\n        'armor_class'           => '19 (přirozené brnění)',\n        'attack_1'              => 'Drápy. Útok na blízko. +1 k zásahu, dosah 4,5m, jeden cíl. Zranění 14 (2k6+4) sečné zranění.',\n        'attack_2'              => 'Žihadlo. Útok na blízko. +1 k zásahu, dosah 1,5m, jeden cíl. Zranění 5 (1k4+2) bodné zranění.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 zkušeností)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'omámený, zachycený',\n        'damage_immunities'     => 'mráz, oheň',\n        'damage_resistances'    => 'bodné zranění',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12k12 + 55)',\n        'innate_spellcasting'   => 'Vrozenou schopnost kouzlení {name} určuje Charisma (záchranný hod proti třídě obtížnosti (DC) 12). Mohou přirozeně sesílat následující kouzla bez nároků na hmotné složky.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'běžné, pekelné',\n        'legendary_action_1'    => 'Strašidelná tvář. {name} zacílí na jednu bytost v dohledu do vzdálenosti 20m. Pokud cíl vidí {name}, musí cíl uspět v záchranném hodu na Moudrost proti třídě obtížnosti (DC) 13, jinak bude vyděšen vzhledem {name} do konce svého následujícího tahu.',\n        'legendary_actions'     => '{name} může provést 2 legendární akce. Vybrat si může z následujících akci. Najednou lze provést jen jednu legendární akci a vždy jen na konci tahu jiné bytosti. {name} znovu může akci použít se začátkem svého následujícího kola.',\n        'legendary_resistance'  => 'Pokud {name} není úspěšný v záchranném hodu, může si přesto zvolit úspěch.',\n        'magic_resistance'      => '{name} získá výhodu při záchranných hodech proti kouzlům a dalším magickým efektům.',\n        'magic_weapons'         => 'Zbraň postavy {name} nyní útočí jako kouzelná.',\n        'multiattack'           => 'Dva útoky: jeden drápy a druhý žihadlem.',\n        'regeneration'          => '{name} si na začátku kola vyléčí 5 životů.',\n        'saving_throws'         => 'Odo +5',\n        'senses'                => 'vnímání naslepo na 20m',\n        'size'                  => 'Střední',\n        'skills'                => 'Atletika +4',\n        'speed'                 => '10 m.',\n        'spells_at_will'        => 'Změnit sebe, najít magii, strach, ledová bouře, neviditelnost',\n        'spells_once'           => 'božské slovo, symbol (pouze bolest)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'MOU',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/de/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Aktionen',\n    'armor_class'                   => 'Rüstungsklasse',\n    'at_will'                       => 'Beliebig oft',\n    'cha'                           => 'CHA',\n    'challenge_rating'              => 'Herausforderungsgrad',\n    'con'                           => 'KON',\n    'condition_immunities'          => 'Zustandsimmunitäten',\n    'damage_immunities'             => 'Schadensimmunitäten',\n    'damage_resistance'             => 'Schadensresistenzen',\n    'dex'                           => 'GES',\n    'fields'                        => [\n        'alignment'             => 'Gesinnung',\n        'armor_class'           => 'Rüstungsklasse',\n        'cha'                   => 'CHA',\n        'challenge_rating'      => 'Herausforderungsgrad',\n        'con'                   => 'Kon',\n        'condition_immunities'  => 'Zustandsimmunitäten',\n        'creature_race'         => 'Kreaturenvolk',\n        'damage_immunities'     => 'Schadensimmunitäten',\n        'damage_resistances'    => 'Schadensresistenzen',\n        'dex'                   => 'GES',\n        'hit_points'            => 'Trefferpunkte',\n        'int'                   => 'INT',\n        'languages'             => 'Sprachen',\n        'multiattack'           => 'Mehrfachangriff',\n        'saving_throws'         => 'Rettungswürfe',\n        'senses'                => 'Sinne',\n        'size'                  => 'Größe',\n        'skills'                => 'Fertigkeiten',\n        'speed'                 => 'Bewegungsrate',\n        'spells_at_will'        => 'Zauber beliebig oft',\n        'str'                   => 'STR',\n        'wis'                   => 'WEI',\n    ],\n    'hit_points'                    => 'Trefferpunkte',\n    'innate_spellcasting'           => 'Angeborenes Zauberwirken',\n    'int'                           => 'INT',\n    'languages'                     => 'Sprachen',\n    'legendary_actions'             => 'Legendäre Aktionen',\n    'legendary_resistance_count'    => 'Legendäre Resistenzen|Legendäre Resistenzen (:count/Day)',\n    'magic_resistance'              => 'Magieresistenz',\n    'magic_weapons'                 => 'Magische Waffen',\n    'multiattack'                   => 'Mehrfachangriff',\n    'name'                          => 'D&D 5e Monster',\n    'reactions'                     => 'Reaktionen',\n    'regeneration'                  => 'Regeneration',\n    'saving_throws'                 => 'Rettungswürfe',\n    'senses'                        => 'Sinne',\n    'skills'                        => 'Fertigkeiten',\n    'speed'                         => 'Bewegungsrate',\n    'spells_1'                      => '1/Tag',\n    'spells_3'                      => '3/Tag',\n    'str'                           => 'STÄ',\n    'values'                        => [\n        'ability_1'             => 'Teleportieren. {name} teleportiert sich magisch mit jeglicher Ausrüstung die die Kreatur trägt oder in der Hand hält bis zu 36 Meter in einen nicht besetzten Bereich, den sie sehen kann.',\n        'armor_class'           => '19 (natürliche Rüstung)',\n        'attack_1'              => 'Klauen. Nahkampf-Waffenangriff: +1 zum Treffen, Reichweite 4,50m, ein Ziel. Treffer: 14 (2W6 + 4) Hiebschaden.',\n        'attack_2'              => 'Stachel. Nahkampf-Waffenangriff: +1 zum Treffen, Reichweite 1,50m, ein Ziel. Treffer: 5 (1W4 + 2) Stichschaden.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'verzaubert, gepackt',\n        'damage_immunities'     => 'Kälte, Feuer',\n        'damage_resistances'    => 'Stich',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => 'Das Attribute zum Wirken angeborener Zauber für {name} ist Charisma (Zauberrettungswurf-SC 12). {name} kann angeboren die folgenden Zauber wirken, wobei er keine Materialkomponenten verbraucht.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'Gemeinsprache, Infernalisch',\n        'legendary_action_1'    => 'Furchterregendes Gesicht. {name} wählt eine Kreatur aus, die er sehen kann und die sich innerhalb von 18m befindet. Falls das Ziel {name} sehen kann, muss ihm ein Weisheits-Rettungswurf gegen SG 13 gelingen oder es ist bis zum Ende seines nächsten Zuges verängstigt.',\n        'legendary_actions'     => '{name} kann zwei legendäre Aktionen durchführen, wobei er aus den unten beschrieben auswählt. Er kann nur eine legendäre Option auf einmal verwenden, und nur am Ende eines Zuges eines anderen Charakters. {name} erhält verbrauchte legendäre Aktionen zu Beginn seines Zuges zurück.',\n        'legendary_resistance'  => 'Wenn {name} einen Rettungswurf nicht schafft, kann er sich stattdessen entscheiden, ihn zu schaffen.',\n        'magic_resistance'      => '{name} hat Vorteil bei Rettungswürfen gegen Zauber oder andere magische Effekte.',\n        'magic_weapons'         => '{name}s Waffenangriffe sind magisch.',\n        'multiattack'           => 'zwei Angriffe: einen mit seinen Klauen und einen mit seinem Stachel.',\n        'regeneration'          => '{name} bekommt am Anfang seines Zuges 5 Trefferpunkte zurück.',\n        'saving_throws'         => 'Kon +5',\n        'senses'                => 'Blindsicht 18m',\n        'size'                  => 'Mittelgroß',\n        'skills'                => 'Athletik +4',\n        'speed'                 => '9m',\n        'spells_at_will'        => 'Gestalt verändern, Magie entdecken, Furcht, Eissturm, Unsichtbarkeit',\n        'spells_once'           => 'Göttliches Wort, Symbol (nur Schmerz)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'WEI',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/en/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Actions',\n    'armor_class'                   => 'Armor Class',\n    'at_will'                       => 'At will',\n    'cha'                           => 'CHA',\n    'challenge_rating'              => 'Challenge Rating',\n    'con'                           => 'CON',\n    'condition_immunities'          => 'Condition Immunities',\n    'damage_immunities'             => 'Damage Immunities',\n    'damage_resistance'             => 'Damage Resistances',\n    'dex'                           => 'DEX',\n    'fields'                        => [\n        'alignment'             => 'Alignment',\n        'armor_class'           => 'Armor Class',\n        'cha'                   => 'CHA',\n        'challenge_rating'      => 'Challenge Rating',\n        'con'                   => 'CON',\n        'condition_immunities'  => 'Condition Immunities',\n        'creature_race'         => 'Creature Race',\n        'damage_immunities'     => 'Damage Immunities',\n        'damage_resistances'    => 'Damage Resistances',\n        'dex'                   => 'DEX',\n        'hit_points'            => 'Hit Points',\n        'int'                   => 'INT',\n        'languages'             => 'Languages',\n        'multiattack'           => 'Multiattack',\n        'saving_throws'         => 'Saving Throws',\n        'senses'                => 'Senses',\n        'size'                  => 'Size',\n        'skills'                => 'Skills',\n        'speed'                 => 'Speed',\n        'spells_at_will'        => 'Spells at Will',\n        'str'                   => 'STR',\n        'wis'                   => 'WIS',\n    ],\n    'hit_points'                    => 'Hit Points',\n    'innate_spellcasting'           => 'Innate Spellcasting',\n    'int'                           => 'INT',\n    'languages'                     => 'Languages',\n    'legendary_actions'             => 'Legendary Actions',\n    'legendary_resistance_count'    => 'Legendary Resistance|Legendary Resistance (:count/Day)',\n    'magic_resistance'              => 'Magic Resistance',\n    'magic_weapons'                 => 'Magic Weapons',\n    'multiattack'                   => 'Multiattack',\n    'name'                          => 'D&D 5e Monster',\n    'reactions'                     => 'Reactions',\n    'regeneration'                  => 'Regeneration',\n    'saving_throws'                 => 'Saving Throws',\n    'senses'                        => 'Senses',\n    'skills'                        => 'Skills',\n    'speed'                         => 'Speed',\n    'spells_1'                      => '1/day each',\n    'spells_3'                      => '3/day each',\n    'str'                           => 'STR',\n    'values'                        => [\n        'ability_1'             => 'Teleport. {name} magically teleports, along with any equipment they are wearing and carrying, up to 120 feet to an unoccupied space they can see.',\n        'armor_class'           => '19 (natural armor)',\n        'attack_1'              => 'Claws. Melee Weapon Attack: +1 to hit, reach 15 ft., one target. Hit: 14 (2d6 + 4) slashing damage.',\n        'attack_2'              => 'Stinger. Melee Weapon Attack: +1 to hit, reach 5 ft., one target. Hit: 5 (1d4 + 2) piercing damage.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'charmed, grappled',\n        'damage_immunities'     => 'cold, fire',\n        'damage_resistances'    => 'piercing',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => '{name}\\'s innate spellcasting ability is Charisma (spell save DC12). They can innately cast the following spells, requiring no material components.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'common, infernal',\n        'legendary_action_1'    => 'Scary Face. {name} targets one creature they can see within 60 feet of them. If the target can see {name}, the target must succeed on a DC 13 Wisdom saving throw or become frightened of {name} until the end of its next turn.',\n        'legendary_actions'     => '{name} can take 2 legendary actions, choosing from the options below. Only one legendary action option can be used at a time and only at the end of another creature\\'s turn. {name} regains spent legendary actions at the start of their turn.',\n        'legendary_resistance'  => 'If {name} fails a saving throw, they can choose to succeed instead.',\n        'magic_resistance'      => '{name} has advantage on saving throws against spells and other magical effects.',\n        'magic_weapons'         => '{name}\\'s weapon attacks are magical.',\n        'multiattack'           => 'two attacks: one with its claws and one with its stinger.',\n        'regeneration'          => '{name} regains 5 hit points at the start of its turn.',\n        'saving_throws'         => 'Con +5',\n        'senses'                => 'blindsight 60 ft',\n        'size'                  => 'Medium',\n        'skills'                => 'Athletics +4',\n        'speed'                 => '30 ft.',\n        'spells_at_will'        => 'alter self, detect magic, fear, ice storm, invisibility',\n        'spells_once'           => 'divine word, symbol (pain only)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'WIS',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/es/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Acciones',\n    'armor_class'                   => 'Clase de Armadura',\n    'at_will'                       => 'A voluntad',\n    'cha'                           => 'CAR',\n    'challenge_rating'              => 'Desafío',\n    'con'                           => 'CON',\n    'condition_immunities'          => 'Inmunidad a las condiciones',\n    'damage_immunities'             => 'Inmunidad al daño',\n    'damage_resistance'             => 'Resistencia al daño',\n    'dex'                           => 'DES',\n    'fields'                        => [\n        'alignment'             => 'Alineamiento',\n        'armor_class'           => 'Clase de Armadura',\n        'cha'                   => 'CAR',\n        'challenge_rating'      => 'Desafío',\n        'con'                   => 'CON',\n        'condition_immunities'  => 'Inmunidad a las condiciones',\n        'creature_race'         => 'Raza',\n        'damage_immunities'     => 'Inmunidad al daño',\n        'damage_resistances'    => 'Resistencia al daño',\n        'dex'                   => 'DES',\n        'hit_points'            => 'Puntos de Golpe',\n        'int'                   => 'INT',\n        'languages'             => 'Lenguajes',\n        'multiattack'           => 'Ataque Múltiple',\n        'saving_throws'         => 'Tiradas de Salvación',\n        'senses'                => 'Sentidos',\n        'size'                  => 'Tamaño',\n        'skills'                => 'Habilidades',\n        'speed'                 => 'Velocidad',\n        'spells_at_will'        => 'Hechizos a voluntad',\n        'str'                   => 'FUE',\n        'wis'                   => 'SAB',\n    ],\n    'hit_points'                    => 'Puntos de Golpe',\n    'innate_spellcasting'           => 'Lanzador Innato de Conjuros',\n    'int'                           => 'INT',\n    'languages'                     => 'Lenguajes',\n    'legendary_actions'             => 'Acciones Legendarias',\n    'legendary_resistance_count'    => 'Resistencia Legendaria|Resistencia Legendaria (:count/Día)',\n    'magic_resistance'              => 'Resistencia Mágica',\n    'magic_weapons'                 => 'Armas Mágicas',\n    'multiattack'                   => 'Ataque Múltiple',\n    'name'                          => 'D&D 5e Monster (ESP)',\n    'reactions'                     => 'Reacciones',\n    'regeneration'                  => 'Regeneración',\n    'saving_throws'                 => 'Tiradas de Salvación',\n    'senses'                        => 'Sentidos',\n    'skills'                        => 'Habilidades',\n    'speed'                         => 'Velocidad',\n    'spells_1'                      => '1/día cada uno',\n    'spells_3'                      => '3/día cada uno',\n    'str'                           => 'FUE',\n    'values'                        => [\n        'ability_1'             => 'Teleportar. {name} se teleporta mágicamente, junto con cualquier equipo que vista o cargue, hasta una distancia de 120 pies a un espacio no ocupado que pueda ver.',\n        'armor_class'           => '19 (armadura natural)',\n        'attack_1'              => 'Garras. Ataque cuerpo a cuerpo: +1 para golpear, alcance de 15 pies, un objetivo. Impacto: 14 (2d6 + 4) daño cortante.',\n        'attack_2'              => 'Aguijón. Ataque cuerpo a cuerpo: +1 para golpear, alcance de 5 pies, un objetivo. Impacto: 5 (1d4 + 2) daño perforante.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'encantado, apresado',\n        'damage_immunities'     => 'frío, fuego',\n        'damage_resistances'    => 'perforante',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => 'La característica para el lanzamiento de conjuros es Carisma. {name} puede lanzar los siguientes conjuros de forma innata, que no requieren componentes materiales:',\n        'int'                   => '8 (-1)',\n        'languages'             => 'común, infernal',\n        'legendary_action_1'    => 'Mirada Aterradora (Requiere 2 Acciones). {name} fija su mirada en una criatura que pueda ver a 10 pies. El objetivo debe superar una tirada de salvación de Sabiduría CD 18 contra esta magia o quedará asustado durante un minuto. El objetivo asustado puede repetir la tirada de salvación al final de cada uno de sus turnos. Si tiene éxito en la tirada de salvación o el efecto termina por sí mismo, el objetivo será inmune a la mirada aterradora durante las próximas 24 horas.',\n        'legendary_actions'     => '{name} puede seleccionar 3 acciones legendarias, elegir entre las siguientes opciones. Solo se puede utilizar una acción legendaria a la vez y solo al final del turno de otra criatura. {name} recupera las acciones legendarias gastadas al inicio de su turno.',\n        'legendary_resistance'  => 'Si {name} falla una tirada de salvación, puede elegir tener éxito en su lugar.',\n        'magic_resistance'      => '{name} tiene ventaja en las tiradas de salvación contra hechizos y otros efectos mágicos.',\n        'magic_weapons'         => 'Los ataques de {name} son mágicos.',\n        'multiattack'           => 'dos ataques: uno con sus garras y otro con su aguijón.',\n        'regeneration'          => '{name} recupera 5 puntos de golpe al comienzo de su turno.',\n        'saving_throws'         => 'Con +5',\n        'senses'                => 'visión en la oscuridad 60 pies',\n        'size'                  => 'Mediano',\n        'skills'                => 'Atletismo +4',\n        'speed'                 => '30 ft.',\n        'spells_at_will'        => 'alterar aspecto, detectar mágia, geas, tormenta de hielo, invisibilidad',\n        'spells_once'           => 'palabra sagrada, símbolo (de dolor solo)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'SAB',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/fr/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Actions',\n    'armor_class'                   => 'Classe d\\'Armure',\n    'at_will'                       => 'A volonté',\n    'cha'                           => 'CHA',\n    'challenge_rating'              => 'Dangerosité',\n    'con'                           => 'CON',\n    'condition_immunities'          => 'Immunité contre les états',\n    'damage_immunities'             => 'Immunité contre_les_dégâts',\n    'damage_resistance'             => 'Résistance aux dégâts',\n    'dex'                           => 'DEX',\n    'fields'                        => [\n        'alignment'             => 'Alignement',\n        'armor_class'           => 'Classe d\\'Armure',\n        'cha'                   => 'CHA',\n        'challenge_rating'      => 'Dangerosité',\n        'con'                   => 'CON',\n        'condition_immunities'  => 'Immunité contre les états',\n        'creature_race'         => 'Race de la créature',\n        'damage_immunities'     => 'Immunité contre les dégâts',\n        'damage_resistances'    => 'Résistances aux dégâts',\n        'dex'                   => 'DEX',\n        'hit_points'            => 'Points de Vie',\n        'int'                   => 'INT',\n        'languages'             => 'Langues',\n        'multiattack'           => 'Attaques multiples',\n        'saving_throws'         => 'Jets de sauvegarde',\n        'senses'                => 'Sens',\n        'size'                  => 'Taille',\n        'skills'                => 'Compétences',\n        'speed'                 => 'Vitesse',\n        'spells_at_will'        => 'Sorts à volonté',\n        'str'                   => 'FOR',\n        'wis'                   => 'SAG',\n    ],\n    'hit_points'                    => 'Points de Vie',\n    'innate_spellcasting'           => 'Incantation innée',\n    'int'                           => 'INT',\n    'languages'                     => 'Langues',\n    'legendary_actions'             => 'Actions légendaires',\n    'legendary_resistance_count'    => 'Résistance légendaire|Résistance légendaire (:count/jour)',\n    'magic_resistance'              => 'Résistance à la magie',\n    'magic_weapons'                 => 'Armes magiques',\n    'multiattack'                   => 'Attaques multiples',\n    'name'                          => 'D&D 5e Monstre',\n    'reactions'                     => 'Réactions',\n    'regeneration'                  => 'Régénération',\n    'saving_throws'                 => 'Jets de Sauvegarde',\n    'senses'                        => 'Sens',\n    'skills'                        => 'Compétences',\n    'speed'                         => 'Vitesse',\n    'spells_1'                      => '1/jour chacun',\n    'spells_3'                      => '3/jour chacun',\n    'str'                           => 'FOR',\n    'values'                        => [\n        'ability_1'             => 'Téléportation. {name} se téléporte magiquement, avec tout l\\'équipement qu\\'il porte ou transporte, vers un espace inoccupé qu\\'il peut voir et situé dans un rayon de 36 mètres autour de lui.',\n        'armor_class'           => '19 (armure naturelle)',\n        'attack_1'              => 'Griffes. Attaque au corps à corps avec une arme: +1 au toucher, allonge 4.50 mètres, une cible. Touché: 14 (2d6 + 4) dégâts tranchants.',\n        'attack_2'              => 'Dard. Attaque au corps à corps avec une arme: +1 to hit, allonge 1.50 mètre, une cible. Touché: 5 (1d4 + 2) dégâts perforants.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'charmé, agrippé',\n        'damage_immunities'     => 'froid, feu',\n        'damage_resistances'    => 'perforant',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => '{name} a pour caractéristique d\\'incantation le Charisme (jet de sauvegarde contre ses sorts DD 12). Il peut naturellement lancer les sorts suivants, sans avoir besoin de composants matériels.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'commun, infernal',\n        'legendary_action_1'    => 'Visage effrayant. {name} cible une créature qu\\'il peut voir à une distance maximum de 18 mètres. Si la cible peut voir {name}, elle doit réussir un jet de sauvegarde de Sagesse de DD13 ou devenir effrayée par {name} jusqu\\'à la fin de son tour suivant.',\n        'legendary_actions'     => '{name} peut effectuer 2 actions légendaires, qu\\'il choisit parmi celles décrites ci-dessous. Il ne peut en effectuer qu\\'une à la fois et uniquement à la fin du tour d\\'une autre créature. {name} récupère au début de son tour l\\'utilisation des actions légendaires déjà effectuées.',\n        'legendary_resistance'  => '{name} peut remplacer l_échec d\\'un de des jets de sauvegardes par une réussite.',\n        'magic_resistance'      => '{name} a l\\'avantage à ses jets de sauvegarde contre les sorts et autres effets magiques.',\n        'magic_weapons'         => 'Les attaques avec une arme de {name} sont magiques.',\n        'multiattack'           => 'deux attaques: une avec ses griffes et une avec son dard.',\n        'regeneration'          => '{name} gagne 5 points de vie au début de son tour.',\n        'saving_throws'         => 'Con +5',\n        'senses'                => 'vision aveugle 18 mètres',\n        'size'                  => 'Moyenne',\n        'skills'                => 'Athlétisme +4',\n        'speed'                 => '9 mètres',\n        'spells_at_will'        => 'Modification d\\'apparence, détection de la magie, équipement, tempête de glace, invisibilité',\n        'spells_once'           => 'Parole divine, symbole (douleur seulement)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'SAG',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/gl/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Accións',\n    'armor_class'                   => 'Clase de Armadura',\n    'at_will'                       => 'A vontade',\n    'cha'                           => 'CAR',\n    'challenge_rating'              => 'Nivel de Desafío',\n    'con'                           => 'CON',\n    'condition_immunities'          => 'Inmunidade a condicións',\n    'damage_immunities'             => 'Inmunidade a tipos de dano',\n    'damage_resistance'             => 'Resistencia a tipos de dano',\n    'dex'                           => 'DES',\n    'fields'                        => [\n        'alignment'             => 'Aliñamento',\n        'armor_class'           => 'Clase de Armadura',\n        'cha'                   => 'CAR',\n        'challenge_rating'      => 'Nivel de Desafío',\n        'con'                   => 'CON',\n        'condition_immunities'  => 'Inmunidade a condicións',\n        'creature_race'         => 'Raza',\n        'damage_immunities'     => 'Inmunidade a tipos de dano',\n        'damage_resistances'    => 'Resistencia a tipos de dano',\n        'dex'                   => 'DES',\n        'hit_points'            => 'Puntos de Golpe',\n        'int'                   => 'INT',\n        'languages'             => 'Linguas',\n        'multiattack'           => 'Multiataque',\n        'saving_throws'         => 'Tiradas de Salvación',\n        'senses'                => 'Sentidos',\n        'size'                  => 'Tamaño',\n        'skills'                => 'Habilidades',\n        'speed'                 => 'Velocidade',\n        'spells_at_will'        => 'Feitizos a vontade',\n        'str'                   => 'FOR',\n        'wis'                   => 'SAB',\n    ],\n    'hit_points'                    => 'Puntos de Golpe',\n    'innate_spellcasting'           => 'Feiticería innata',\n    'int'                           => 'INT',\n    'languages'                     => 'Linguas',\n    'legendary_actions'             => 'Accións lendarias',\n    'legendary_resistance_count'    => 'Resistencia lendaria|Resistencia lendaria (:count/día)',\n    'magic_resistance'              => 'Resistencia máxica',\n    'magic_weapons'                 => 'Armas máxicas',\n    'multiattack'                   => 'Multiataque',\n    'name'                          => 'Monstro D&D 5e',\n    'reactions'                     => 'Reaccións',\n    'regeneration'                  => 'Rexeneración',\n    'saving_throws'                 => 'Tiradas de Salvación',\n    'senses'                        => 'Sentidos',\n    'skills'                        => 'Habilidades',\n    'speed'                         => 'Velocidade',\n    'spells_1'                      => '1/día cada un',\n    'spells_3'                      => '3/día cada un',\n    'str'                           => 'FOR',\n    'values'                        => [\n        'ability_1'             => 'Teleporte. {name} telepórtase máxicamente, xunto con calquer equipamento que leve, ata 120 pés nun espazo non ocupado que poida ver.',\n        'armor_class'           => '19 (armadura natural)',\n        'attack_1'              => 'Garras. Ataque corpo a corpo: +1 para golpear, alcance de 15 pés, un obxetivo. Impacto: 14 (2d6 + 4) dano cortante.',\n        'attack_2'              => 'Aguillón. Ataque corpo a corpo: +1 para golpear, alcance de 5 pés, un obxetivo. Impacto: 5 (1d4 + 2) dano perforante.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'encantado, apresado',\n        'damage_immunities'     => 'frío, lume',\n        'damage_resistances'    => 'perforante',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => 'A característica de lanzamento de feitizos innatos de {name} é Carisma (CD de salvación de maxia 12). Pode lanzar de forma innata os seguintes feitizos, sen precisar compoñentes materiais.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'común, infernal',\n        'legendary_action_1'    => 'Mirada aterradora. {name} selecciona unha criatura que poida ver que esté a ata 60 pés de distancia. Se o obxetivo pode ver a {name}, o obxetivo debe ter éxito nunha tirada de salvación de Sabiduría con CD 13 ou ficar asustado de {name} ata o final du seu seguinte turno.',\n        'legendary_actions'     => '{name} pode realizar 2 accións lendarias, escollendo das opcións de abaixo. Só unha opción de acción lendaria pode ser usada cada vez e ten que ser ao final do turno de outra criatura. {name} recupera as accións lendarias que gastou ao inicio do seu turno.',\n        'legendary_resistance'  => 'Se {name} fallar unha tirada de salvación, poderá escoller ter éxito no seu lugar.',\n        'magic_resistance'      => '{name} ten vantaxe en tiradas de salvación contra feitizos e outros efectos máxicos.',\n        'magic_weapons'         => 'Os ataques con armas de {name} son máxicos.',\n        'multiattack'           => 'dous ataques: un coas súas garras e outro co seu aguillón.',\n        'regeneration'          => '{name} recupera 5 puntos de golpe ao inicio do seu turno.',\n        'saving_throws'         => 'Con +5',\n        'senses'                => 'Visión a cegas 60 pés',\n        'size'                  => 'Medio',\n        'skills'                => 'Atletismo +4',\n        'speed'                 => '30 pés',\n        'spells_at_will'        => 'alterar aspecto, detectar maxia, medo, tormenta de xelo, invisibilidade',\n        'spells_once'           => 'palabra sagrada, símbolo (só de dor)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'SAB',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/hu/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Akciók',\n    'armor_class'                   => 'Védelem',\n    'at_will'                       => 'Akaratból',\n    'cha'                           => 'KAR',\n    'challenge_rating'              => 'Kihívási ráta',\n    'con'                           => 'ÁLL',\n    'condition_immunities'          => 'Kondíció immunitások',\n    'damage_immunities'             => 'Sebzésimmunitások',\n    'damage_resistance'             => 'Sebzésellenállások',\n    'dex'                           => 'ÜGY',\n    'fields'                        => [\n        'alignment'             => 'Jellem',\n        'armor_class'           => 'Védelem',\n        'cha'                   => 'KAR',\n        'challenge_rating'      => 'Kihívási ráta',\n        'con'                   => 'ÁLL',\n        'condition_immunities'  => 'Kondíció immunitások',\n        'creature_race'         => 'Teremtmény faja',\n        'damage_immunities'     => 'Sebzésimmunitások',\n        'damage_resistances'    => 'Sebzésellenállások',\n        'dex'                   => 'ÜGY',\n        'hit_points'            => 'Harcpontok',\n        'int'                   => 'INT',\n        'languages'             => 'Nyelvek',\n        'multiattack'           => 'Többszörös támadás',\n        'saving_throws'         => 'Mentődobások',\n        'senses'                => 'Érzékek',\n        'size'                  => 'Méret',\n        'skills'                => 'Képzettségek',\n        'speed'                 => 'Sebesség',\n        'spells_at_will'        => 'Varázslatok akaratból',\n        'str'                   => 'ERŐ',\n        'wis'                   => 'BÖL',\n    ],\n    'hit_points'                    => 'Harcpontok',\n    'innate_spellcasting'           => 'Ösztönös varázslás',\n    'int'                           => 'INT',\n    'languages'                     => 'Nyelvek',\n    'legendary_actions'             => 'Legendás akciók',\n    'legendary_resistance_count'    => 'Legendás ellenállás|Legendás ellenállás (:cound/Day)',\n    'magic_resistance'              => 'Mágaiellenállás',\n    'magic_weapons'                 => 'Mágikus fegyverek',\n    'multiattack'                   => 'Többszörös támadás',\n    'name'                          => 'D&D 5e Szörny',\n    'reactions'                     => 'Reakciók',\n    'regeneration'                  => 'Regeneráció',\n    'saving_throws'                 => 'Mentődobások',\n    'senses'                        => 'Érzékek',\n    'skills'                        => 'Képzettségek',\n    'speed'                         => 'Sebesség',\n    'spells_1'                      => 'Napi 1',\n    'spells_3'                      => 'Napi 3',\n    'str'                           => 'ERŐ',\n    'values'                        => [\n        'ability_1'             => 'Teleport. {name} mágikusan teleportál minden viselt felszerelésével együtt 120 lábnyira egy olyan helyre, ami üres és amit lát.',\n        'armor_class'           => '19 (természetes páncél)',\n        'attack_1'              => 'Karmok. Közelharci támadás: +1, elérés 15 láb, egy célpont. Találat: 14 (2d6 + 4) vágó sebzés.',\n        'attack_2'              => 'Fullánk. Közelharci támadás: +1, elérés 5 láb, egy célpont. Találat: 5 (1d4 + 2) szúró sebzés.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'elbűvölt, lefogott',\n        'damage_immunities'     => 'hideg, tűz',\n        'damage_resistances'    => 'szúró',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => '{name} ösztönös varázslás képessége karizma alapú (varázslatmentő NH12). Ösztönösen el tudja varázsolni a következő varázslatokat anyagi komponens nélkül.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'közös, pokoli',\n        'legendary_action_1'    => 'Ijesztő arc. {name} megcéloz egy teremtmény, amit lát és 60 lábon belül tartózkodik. Ha a célpont látja őt, a célpontnak 13-as nehézségű Bölcsesség mentődobást kell tennie, különben megijed {name} lénytől annak következő köréig.',\n        'legendary_actions'     => '{name} kaphat két legendás akciót az alábbiakból választva. Egyszerre csak egy legendás akciót tehet, és csak egy másik teremtmény körének végén. {name} visszakapja a legendás akciót a köre elején.',\n        'legendary_resistance'  => 'Ha {name} elrontja egy mentődobását, választhatja, hogy inkább mégis sikerült.',\n        'magic_resistance'      => '{name} előnnyel dobja a mentődobásait varázslatok és mágikus hatások ellen.',\n        'magic_weapons'         => '{name} fegyveres támadásai mágikusak.',\n        'multiattack'           => 'Két támadás: egy a karmaival, egy pedig a fullánkjával.',\n        'regeneration'          => '{name} visszakap 4 HP-t a köre kezdetén.',\n        'saving_throws'         => 'Áll +5',\n        'senses'                => 'sötétben látás 60 láb',\n        'size'                  => 'Közepes',\n        'skills'                => 'Atlétika +4',\n        'speed'                 => '30 láb',\n        'spells_at_will'        => 'önátalakítás, mágia érzékelése, félelem, jégvihar, láthatatlanság',\n        'spells_once'           => 'szent szó, szimbólum (csak fájdalom)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'BÖL',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/it/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Azioni',\n    'armor_class'                   => 'Classe Armatura',\n    'at_will'                       => 'A volontà',\n    'cha'                           => 'CAR',\n    'challenge_rating'              => 'Sfida',\n    'con'                           => 'COS',\n    'condition_immunities'          => 'Immunità alle Condizioni',\n    'damage_immunities'             => 'Immunità ai Danni',\n    'damage_resistance'             => 'Resistenze ai Danni',\n    'dex'                           => 'DES',\n    'fields'                        => [\n        'alignment'             => 'Allineamento',\n        'armor_class'           => 'Classe Armatura',\n        'cha'                   => 'CAR',\n        'challenge_rating'      => 'Sfida',\n        'con'                   => 'COS',\n        'condition_immunities'  => 'Immunità alle Condizioni',\n        'creature_race'         => 'Razza',\n        'damage_immunities'     => 'Immunità ai Danni',\n        'damage_resistances'    => 'Resistenze ai Danni',\n        'dex'                   => 'DES',\n        'hit_points'            => 'Punti Ferita',\n        'int'                   => 'INT',\n        'languages'             => 'Linguaggi',\n        'multiattack'           => 'Multiattacco',\n        'saving_throws'         => 'Tiri Salvezza',\n        'senses'                => 'Sensi',\n        'size'                  => 'Taglia',\n        'skills'                => 'Abilità',\n        'speed'                 => 'Velocità',\n        'spells_at_will'        => 'Incantesimi a Volontà',\n        'str'                   => 'FOR',\n        'wis'                   => 'SAG',\n    ],\n    'hit_points'                    => 'Punti Ferita',\n    'innate_spellcasting'           => 'Incantesimi Innati',\n    'int'                           => 'INT',\n    'languages'                     => 'Linguaggi',\n    'legendary_actions'             => 'Azioni Leggendarie',\n    'legendary_resistance_count'    => 'Resistenza Leggendaria|Resistenza Leggendaria (:count/Giorno)',\n    'magic_resistance'              => 'Resistenza alla Magia',\n    'magic_weapons'                 => 'Armi Magiche',\n    'multiattack'                   => 'Multiattacco',\n    'name'                          => 'Mostro D&D 5e',\n    'reactions'                     => 'Reazioni',\n    'regeneration'                  => 'Rigenerazione',\n    'saving_throws'                 => 'Tiri Salvezza',\n    'senses'                        => 'Sensi',\n    'skills'                        => 'Abilità',\n    'speed'                         => 'Velocità',\n    'spells_1'                      => '1/Giorno ciascuno',\n    'spells_3'                      => '3/Giorno ciascuno',\n    'str'                           => 'FOR',\n    'values'                        => [\n        'ability_1'             => 'Teletrasporto. {name} si teletrasporta magicamente, assieme a ogni oggetto che indossa o trasporta, fino a uno spazio libero situato entro 36 metri e che egli sia in grado di vedere.',\n        'armor_class'           => '19 (armatura naturale)',\n        'attack_1'              => 'Artigli. Attacco con Arma da Mischia +1 al tiro per colpire, portata 4,5 m, una creatura. Colpito: 14 (2d6 + 4) danni taglienti.',\n        'attack_2'              => 'Pungiglione. Attacco con Arma da Mischia: +1 al tiro per colpire, portata 1,5 m, una creatura. Colpito: 5 (1d4 + 2) danni perforanti.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 PE)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'affascinato, afferrato',\n        'damage_immunities'     => 'freddo, fuoco',\n        'damage_resistances'    => 'perforante',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => 'La caratteristica da incantatore di {name} è Carisma (tiro salvezza degli incantesimi DC12). {name} può lanciare i seguenti incantesimi innati, che non richiedono alcuna componente materiale.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'comune, infernale',\n        'legendary_action_1'    => 'Volto Terrificante. {name} bersaglia una creatura entro 18 metri e che sia in grado di vedere. Se il bersaglio può vedere {name}, deve superare un tiro salvezza su Saggezza con CD 13, altrimenti è spventato da {name} fino alla fine del suo prossimo turno.',\n        'legendary_actions'     => '{name} può effettuare 2 azioni leggendarie, scelte tra le opzioni sottostanti. Può usare solo un’opzione di azione leggendaria alla volta e solo alla fine del turno di un’altra creatura.{name} recupera le azioni leggendarie spese all’inizio del proprio turno',\n        'legendary_resistance'  => 'Se {name} fallisce un tiro salvezza, può scegliere invece di superarlo.',\n        'magic_resistance'      => '{name} dispone di vantaggio ai tiri salvezza contro incantesimi e altri effetti magici.',\n        'magic_weapons'         => 'Gli attacchi con arma di {name} sono magici.',\n        'multiattack'           => 'due attacchi: uno con i suoi artigli e uno con il suo pungiglione.',\n        'regeneration'          => '{name} recupera 5 punti ferita all\\'inizio del suo turno.',\n        'saving_throws'         => 'Cos +5',\n        'senses'                => 'vista cieca 18 m',\n        'size'                  => 'Media',\n        'skills'                => 'Atletica +4',\n        'speed'                 => '9 m',\n        'spells_at_will'        => 'alterare sé stesso, individuazione del magico, tempesta di ghiaccio, invisibilità',\n        'spells_once'           => 'parola divina, simbolo (solo Dolore)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'SAG',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/pl/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Akcje',\n    'armor_class'                   => 'Klasa Pancerza',\n    'at_will'                       => 'Bez ograniczeń',\n    'cha'                           => 'CHA',\n    'challenge_rating'              => 'Stopień wyzwania',\n    'con'                           => 'KON',\n    'condition_immunities'          => 'Niepodatność na stany',\n    'damage_immunities'             => 'Niepodatność na obrażenia',\n    'damage_resistance'             => 'Odporność na obrażenia',\n    'dex'                           => 'ZRC',\n    'fields'                        => [\n        'alignment'             => 'Charakter',\n        'armor_class'           => 'Klasa Pancerza',\n        'cha'                   => 'CHA',\n        'challenge_rating'      => 'Stopień wyzwania',\n        'con'                   => 'KON',\n        'condition_immunities'  => 'Niepodatność na stany',\n        'creature_race'         => 'Rasa istoty',\n        'damage_immunities'     => 'Niepodatność na obrażenia',\n        'damage_resistances'    => 'Odporność na obrażenia',\n        'dex'                   => 'ZRC',\n        'hit_points'            => 'Punkty wytrzymałości',\n        'int'                   => 'INT',\n        'languages'             => 'Języki',\n        'multiattack'           => 'Atak wielokrotny',\n        'saving_throws'         => 'Rzuty obronne',\n        'senses'                => 'Zmysły',\n        'size'                  => 'Rozmiar',\n        'skills'                => 'Umiejętności',\n        'speed'                 => 'Szybkość',\n        'spells_at_will'        => 'Czary bez ograniczeń',\n        'str'                   => 'SIŁ',\n        'wis'                   => 'MDR',\n    ],\n    'hit_points'                    => 'Punkty wytrzymałości',\n    'innate_spellcasting'           => 'Wrodzone czarowanie',\n    'int'                           => 'INT',\n    'languages'                     => 'Języki',\n    'legendary_actions'             => 'Legendarne akcje',\n    'legendary_resistance_count'    => 'Legendarna odporność|Legendarna odporność (:count/dziennie)',\n    'magic_resistance'              => 'Odporność na magię',\n    'magic_weapons'                 => 'Magiczna broń',\n    'multiattack'                   => 'Atak wielokrotny',\n    'name'                          => 'Powtór do D&D 5e',\n    'reactions'                     => 'Reakcje',\n    'regeneration'                  => 'Regeneracja',\n    'saving_throws'                 => 'Rzuty obronne',\n    'senses'                        => 'Zmysły',\n    'skills'                        => 'Umiejętności',\n    'speed'                         => 'Szybkość',\n    'spells_1'                      => '1/dzień każdy',\n    'spells_3'                      => '3/dzień każdy',\n    'str'                           => 'SIŁ',\n    'values'                        => [\n        'ability_1'             => 'Teleportacja. {name} magicznie się teleportuje wraz z całym noszonym ekwipunkiem, w odległe do 40 m., niezajęte miejsce.',\n        'armor_class'           => '19 (naturalny pancerz)',\n        'attack_1'              => 'Pazury. Atak wręcz bronią: +1 do trafienia, strefa ataku 5 metrów, jeden cel. Trafienie: 17 (2k6 + 4) obrażeń ciętych.',\n        'attack_2'              => 'Użądlenie. Atak wręcz bronią\" +1 do trafienia, strefa ataku 1,5 metra, jeden cel. Trafienie: 5 (1k4 + 2) obrażeń kłutych.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 PD)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'zauroczony, pochwycony',\n        'damage_immunities'     => 'zimno, ogień',\n        'damage_resistances'    => 'klute',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12k12 + 55)',\n        'innate_spellcasting'   => 'Cechą bazową wrodzonego czarowania {name} jest Charyzma (ST rzutu obronnego to 12). Potrafi instynktownie rzucać następujące czary, nie używając komponentów materialnych.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'wspólny, piekielny',\n        'legendary_action_1'    => 'Straszne oblicze. {name} wybiera jedną istotę którą widzi odległą o nie więcej niż 20 metrów. Jeżeli cel również ma w zasięgu wzroku {name}, musi wykonać rzut obronny na Mądrość o ST 13 albo {name} przeraża go do początku jego następnej tury.',\n        'legendary_actions'     => '{name} może wykonać 3 legendarne akcje wybierając z poniższych. Tylko jedna akcja legendarna może zostać użyta na raz i tylko pod koniec tury innego stworzenia. {name} odzyskuje wykorzystane akcje legendarne na początku swojej tury.',\n        'legendary_resistance'  => 'Jeżeli {name} nie zdoła wykonać rzutu obronnego, może zamiast tego uznać że się powiódł.',\n        'magic_resistance'      => '{name} na przewagę w rzutach obronnych przeciw czarom i innym efektom magicznym.',\n        'magic_weapons'         => '{name} wykonuje ataki bronią, które są magiczne.',\n        'multiattack'           => 'dwa ataki: jeden pazurami i jeden użądleniem.',\n        'regeneration'          => '{name} odzyskuje 5 punktów wytrzymałości na początku swojej tury.',\n        'saving_throws'         => 'Kon +5',\n        'senses'                => 'ślepowidzenie 30 m.',\n        'size'                  => 'Średni',\n        'skills'                => 'Atletyka +4',\n        'speed'                 => '10 m.',\n        'spells_at_will'        => 'zmiana siebie, wykrycie magii, strach, burza lodu, niewidzialność',\n        'spells_once'           => 'słowo boże, symbol (tylko ból)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'MDR',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/pt-BR/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Ações',\n    'armor_class'                   => 'Classe de Armadura',\n    'at_will'                       => 'Sem limite',\n    'cha'                           => 'CAR',\n    'challenge_rating'              => 'Nível de desafio',\n    'con'                           => 'CON',\n    'condition_immunities'          => 'Imunidade às condições',\n    'damage_immunities'             => 'Imunidade os danos',\n    'damage_resistance'             => 'Resistência a dano',\n    'dex'                           => 'DES',\n    'fields'                        => [\n        'alignment'             => 'Alinhamento',\n        'armor_class'           => 'Classe de Armadura',\n        'cha'                   => 'CAR',\n        'challenge_rating'      => 'Nível de Desafio',\n        'con'                   => 'CON',\n        'condition_immunities'  => 'Imunidade às condições',\n        'creature_race'         => 'Raça da criatura',\n        'damage_immunities'     => 'Imunidade os danos',\n        'damage_resistances'    => 'Resistência aos danos',\n        'dex'                   => 'DES',\n        'hit_points'            => 'Pontos de Vida',\n        'int'                   => 'INT',\n        'languages'             => 'Idiomas',\n        'multiattack'           => 'Ataques Múltiplos',\n        'saving_throws'         => 'Testes de Resistência',\n        'senses'                => 'Sentidos',\n        'size'                  => 'Tamanho',\n        'skills'                => 'Perícias',\n        'speed'                 => 'Velocidade',\n        'spells_at_will'        => 'Magias à vontade',\n        'str'                   => 'FOR',\n        'wis'                   => 'SAB',\n    ],\n    'hit_points'                    => 'Pontos de Vida',\n    'innate_spellcasting'           => 'Conjuração Inata',\n    'int'                           => 'INT',\n    'languages'                     => 'Idiomas',\n    'legendary_actions'             => 'Ações Lendárias',\n    'legendary_resistance_count'    => 'Resistência Lendária|Resistência Lendária (:count/Dia)',\n    'magic_resistance'              => 'Resistência Mágica',\n    'magic_weapons'                 => 'Armas Mágicas',\n    'multiattack'                   => 'Ataques Múltiplos',\n    'name'                          => 'Monstro D&D 5e',\n    'reactions'                     => 'Reações',\n    'regeneration'                  => 'Regeneração',\n    'saving_throws'                 => 'Testes de Resistência',\n    'senses'                        => 'Sentidos',\n    'skills'                        => 'Perícias',\n    'speed'                         => 'Velocidade',\n    'spells_1'                      => '1/dia cada',\n    'spells_3'                      => '3/dia cada',\n    'str'                           => 'FOR',\n    'values'                        => [\n        'ability_1'             => 'Teleporte. {name} se teletransporta magicamente, junto com qualquer equipamento que esteja usando e carregando, até 36 metros para um espaço desocupado que possa ver.',\n        'armor_class'           => '19 (armadura natural)',\n        'attack_1'              => 'Garras. Ataque corpo a corpo com arma: +1 para atingir, alcance 4,5 m, um alvo. Acerto: 14 (2d6 + 4) de dano cortante',\n        'attack_2'              => 'Ferrão. Ataque corpo a corpo com arma: +1 para atingir, alcance 1,5 m, um alvo. Acerto: 5 (1d4 + 2) de dano perfurante',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'enfeitiçado, garrado',\n        'damage_immunities'     => 'frio, fogo',\n        'damage_resistances'    => 'perfurante',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => 'A habilidade inata de lançar feitiços de {name} é Carisma (CD de resistência de magia 12). Eles podem lançar inatamente os seguintes feitiços, não exigindo componentes materiais.',\n        'int'                   => '8(-1)',\n        'languages'             => 'Comum, infernal',\n        'legendary_action_1'    => 'Rosto assustador. {name} tem como alvo uma criatura que ele possa ver a até 18 metros deles. Se o alvo puder ver {nome}, ele deve passar em um teste de resistência de Sabedoria CD 13 ou ficar com medo de {nome} até o final de seu próximo turno.',\n        'legendary_actions'     => '{name} pode realizar 2 ações lendárias, escolhendo uma das opções abaixo. Apenas uma opção de ação lendária pode ser usada por vez e apenas no final do turno de outra criatura. {name} recupera as ações lendárias gastas no início de seu turno.',\n        'legendary_resistance'  => 'Se {nome} falhar em um teste de resistência, ele pode escolher obter sucesso, no lugar',\n        'magic_resistance'      => '{name} tem vantagem em testes de resistência contra magias e outros efeitos mágicos.',\n        'magic_weapons'         => 'Os ataques com armas de {name} são mágicos.',\n        'multiattack'           => 'dois ataques: um com suas garras e outro com seu ferrão.',\n        'regeneration'          => '{name} regenera 5 pontos de vida no início de seu turno',\n        'saving_throws'         => 'Con +5',\n        'senses'                => 'Percepção às cegas 18 m',\n        'size'                  => 'Médio',\n        'skills'                => 'Ateltismo +4',\n        'speed'                 => '9 m',\n        'spells_at_will'        => 'Alterar, Detectar Magia, Medo, Tempestade de Gelo, Invisibilidade',\n        'spells_once'           => 'Palavra Sagrada, Símbolo (apenas Dor)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'SAB',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/ru/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Действия',\n    'armor_class'                   => 'Класс доспеха',\n    'at_will'                       => 'Неограниченно',\n    'cha'                           => 'ХАР',\n    'challenge_rating'              => 'Опасность',\n    'con'                           => 'ТЕЛ',\n    'condition_immunities'          => 'Иммунитет к состояниям',\n    'damage_immunities'             => 'Иммунитет к урону',\n    'damage_resistance'             => 'Сопротивление к урону',\n    'dex'                           => 'ЛОВ',\n    'fields'                        => [\n        'alignment'             => 'Мировоззрение',\n        'armor_class'           => 'Класс доспеха',\n        'cha'                   => 'ХАР',\n        'challenge_rating'      => 'Опасность',\n        'con'                   => 'ТЕЛ',\n        'condition_immunities'  => 'Иммунитет к состоянию',\n        'creature_race'         => 'Раса существа',\n        'damage_immunities'     => 'Иммунитет к урону',\n        'damage_resistances'    => 'Сопротивление к урону',\n        'dex'                   => 'ЛОВ',\n        'hit_points'            => 'Хиты',\n        'int'                   => 'ИНТ',\n        'languages'             => 'Языки',\n        'multiattack'           => 'Мультиатака',\n        'saving_throws'         => 'Спасброски',\n        'senses'                => 'Чувства',\n        'size'                  => 'Размер',\n        'skills'                => 'Навыки',\n        'speed'                 => 'Скорость',\n        'spells_at_will'        => 'Неограниченные заклинания',\n        'str'                   => 'СИЛ',\n        'wis'                   => 'МДР',\n    ],\n    'hit_points'                    => 'Хиты',\n    'innate_spellcasting'           => 'Врожденное колдовство',\n    'int'                           => 'ИНТ',\n    'languages'                     => 'Языки',\n    'legendary_actions'             => 'Легендарные действия',\n    'legendary_resistance_count'    => 'Легендарное сопротивление|Легендарное сопротивление (:count/день)',\n    'magic_resistance'              => 'Сопротивление магии',\n    'magic_weapons'                 => 'Магическое оружие',\n    'multiattack'                   => 'Мультиатака',\n    'name'                          => 'Монстр D&D 5 изд.',\n    'reactions'                     => 'Реакции',\n    'regeneration'                  => 'Регенерация',\n    'saving_throws'                 => 'Спасброски',\n    'senses'                        => 'Чувства',\n    'skills'                        => 'Навыки',\n    'speed'                         => 'Скорость',\n    'spells_1'                      => '1/день каждое',\n    'spells_3'                      => '3/день каждое',\n    'str'                           => 'СИЛ',\n    'values'                        => [\n        'ability_1'             => 'Телепортация. {name} магически телепортируется в незанятое пространство, которое может видеть в пределах 120 фт. от себя.',\n        'armor_class'           => '19 (природный доспех)',\n        'attack_1'              => 'Когти. Рукопашная атака оружием: +1 к попаданию, досягаемость 15 фт., одна цель. Попадание: 14 (2d6 + 4) рубящего урона.',\n        'attack_2'              => 'Когти. Рукопашная атака оружием: +1 к попаданию, досягаемость 5 фт., одна цель. Попадание: 5 (1d4 + 2) колющего урона.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 опыта)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'очарованный, схваченный',\n        'damage_immunities'     => 'холод, огонь',\n        'damage_resistances'    => 'колющий',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => 'Базовой характеристикой {name} является Харизма (Сл спасброска от заклинания 21). Он может накладывать следующие заклинания, не нуждаясь в материальных компонентах.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'общий, инфернальный',\n        'legendary_action_1'    => 'Страшное лицо. {name} атакует одно существо не дальше 60 фт., которое может видеть. Если существо видит {name}, то оно должно преуспеть в спасброске Мудрости Сл 13, иначе оно станет испуганным до конца его следующего хода.',\n        'legendary_actions'     => '{name} может совершить 2 легендарных действия, выбирая из представленных ниже вариантов. За один раз можно использовать только одно легендарное действие, и только в конце хода другого существа. {name} восстанавливает использованные легендарные действия в начале своего хода.',\n        'legendary_resistance'  => 'Если {name} проваливает спасбросок, он может вместо этого сделать спасбросок успешным.',\n        'magic_resistance'      => '{name} совершает с преимуществом спасброски от заклинаний и прочих магических эффектов.',\n        'magic_weapons'         => 'Атаки оружием {name} являются магическими.',\n        'multiattack'           => 'две атаки: одна своими Когтями и одна своим Жалом.',\n        'regeneration'          => '{name} восстанавливает 5 хитов в начале своего хода.',\n        'saving_throws'         => 'Тел +5',\n        'senses'                => 'слепое зрение 60 фт.',\n        'size'                  => 'Средний',\n        'skills'                => 'Атлетика +5',\n        'speed'                 => '30 фт.',\n        'spells_at_will'        => 'смена обличья, обнаружение магии, ужас, град, невидимость',\n        'spells_once'           => 'божественное слово, знак (только боль)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'МДР',\n];\n"
  },
  {
    "path": "lang/vendor/dnd5emonster/sk/template.php",
    "content": "<?php\n\nreturn [\n    'actions'                       => 'Akcie',\n    'armor_class'                   => 'Trieda brnenia',\n    'at_will'                       => 'Hocikedy',\n    'cha'                           => 'CHA',\n    'challenge_rating'              => 'Miera náročnosti',\n    'con'                           => 'CON',\n    'condition_immunities'          => 'Imunity voči stavom',\n    'damage_immunities'             => 'Imunity voči zraneniam',\n    'damage_resistance'             => 'Odolnosti voči zraneniam',\n    'dex'                           => 'DEX',\n    'fields'                        => [\n        'alignment'             => 'Presvedčenie',\n        'armor_class'           => 'Trieda brnenia',\n        'cha'                   => 'CHA',\n        'challenge_rating'      => 'Miera náročnosti',\n        'con'                   => 'CON',\n        'condition_immunities'  => 'Imunity voči stavom',\n        'creature_race'         => 'Druh bytosti',\n        'damage_immunities'     => 'Imunity voči zraneniam',\n        'damage_resistances'    => 'Odolnosti voči zraneniam',\n        'dex'                   => 'DEX',\n        'hit_points'            => 'Body výdrže',\n        'int'                   => 'INT',\n        'languages'             => 'Jazyky',\n        'multiattack'           => 'Viacnásobný útok',\n        'saving_throws'         => 'Záchranné hody',\n        'senses'                => 'Zmysly',\n        'size'                  => 'Veľkosť',\n        'skills'                => 'Zručnosti',\n        'speed'                 => 'Rýchlosť',\n        'spells_at_will'        => 'Kúzla na hocikedy',\n        'str'                   => 'STR',\n        'wis'                   => 'WIS',\n    ],\n    'hit_points'                    => 'Body výdrže',\n    'innate_spellcasting'           => 'Vrodené kúzlenie',\n    'int'                           => 'INT',\n    'languages'                     => 'Jazyky',\n    'legendary_actions'             => 'Legendárne akcie',\n    'legendary_resistance_count'    => 'Legendárne odolnosti|Legendárne odolnosti (:count/deň)',\n    'magic_resistance'              => 'Magická odolnosť',\n    'magic_weapons'                 => 'Magické zbrane',\n    'multiattack'                   => 'Viacnásobný útok',\n    'name'                          => 'D&D 5e Príšera',\n    'reactions'                     => 'Reakcie',\n    'regeneration'                  => 'Regenerácia',\n    'saving_throws'                 => 'Záchranné hody',\n    'senses'                        => 'Zmysly',\n    'skills'                        => 'Zručnosti',\n    'speed'                         => 'Rýchlosť',\n    'spells_1'                      => '1/deň',\n    'spells_3'                      => '3/deň',\n    'str'                           => 'STR',\n    'values'                        => [\n        'ability_1'             => 'Teleport. {name} magicky sa teleportuje spolu s hocijakým vybavení, ktoré nesie, do 120 stôp na neobsadené miesto, ktoré vidí.',\n        'armor_class'           => '19 (prirodzené brnenie)',\n        'attack_1'              => 'Pazúry. Útok zbraňou zblízka: +1 na zásah, dosah 15 st., jeden cieľ. Zásah: 14 (2d6 + 4) rezných zranení.',\n        'attack_2'              => 'Bodec.Útok zbraňou zblízka: +1 na zásah, dosah 5 st., jeden cieľ. Zásah: 5 (1d4 + 2) bodných zranení.',\n        'cha'                   => '14 (+2)',\n        'challenge_rating'      => '5 (300 xp)',\n        'con'                   => '10 (+0)',\n        'condition_immunities'  => 'opantaný, spútaný',\n        'damage_immunities'     => 'chlad, oheň',\n        'damage_resistances'    => 'bodné',\n        'dex'                   => '12 (+1)',\n        'hit_points'            => '139 (12d12 + 55)',\n        'innate_spellcasting'   => 'Vrodená schopnosť kúzliť pre {name} je Charisma (Spell Save DC 12). Vrodene môžu kúzliť nasledujúce kúzla, bez nutnosti použitia hmotných súčastí.',\n        'int'                   => '8 (-1)',\n        'languages'             => 'bežný, pekelný',\n        'legendary_action_1'    => 'Hrozivá tvár. {name} sa zacieli na jednu bytosť, ktorú vidí v dosahu 60 st. Ak cieľ vidí {name}, musí uspieť v záchrannom hode na Wisdom voči 13 alebo sa začne {name} báť do konca svojho ďalšieho kola.',\n        'legendary_actions'     => '{name} môže použiť 2 legendárne akcie, vyberá si z možností nižšie. Iba jednu legendárnu akciu môže použiť v danom čase a iba na konci kola inej bytosti. {name} získa svoje použité legendárne akcie opäť na začiatku ich kola.',\n        'legendary_resistance'  => 'Ak {name} neuspeje v záchrannom hode, môže sa rozhodnúť predsa len uspieť.',\n        'magic_resistance'      => '{name} má výhodu na záchranné hody proti kúzlam a ostatným magickým efektom.',\n        'magic_weapons'         => 'Zbraňové útoky vedené {name} sú magické.',\n        'multiattack'           => 'dva útoky: jeden s pazúrmi a jeden s bodcom.',\n        'regeneration'          => '{name} obdrží 5 bodov výdrže na začiatku ich kola.',\n        'saving_throws'         => 'Con +5',\n        'senses'                => 'Slepocit 60 st.',\n        'size'                  => 'Stredná',\n        'skills'                => 'Atletika +4',\n        'speed'                 => '30 st.',\n        'spells_at_will'        => 'Zmeň seba, Odhaľ mágiu, Strach, Ľadová búrka, Neviditeľnosť',\n        'spells_once'           => 'božské slovo, symbol (iba bolesť)',\n        'str'                   => '11 (+0)',\n        'wis'                   => '10 (+0)',\n    ],\n    'wis'                           => 'WIS',\n];\n"
  },
  {
    "path": "larastan.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n$packagesToInstall = [\n    'driftingly/rector-laravel',\n    'rector/rector',\n    'webmozart/assert',\n];\ncomposer_require(...$packagesToInstall);\n\n$hash = md5(implode(' ', $packagesToInstall));\n$rectorDir = cpx_path(\".exec_cache/$hash\");\n\n$rectorConfigFile = <<<'PHP'\n<?php declare(strict_types=1);\nuse Rector\\Config\\RectorConfig;\nreturn RectorConfig::configure()\n    ->withRules([\n        \\RectorLaravel\\Rector\\ClassMethod\\AddGenericReturnTypeToRelationsRector::class,\n    ]);\nPHP;\n\nfile_put_contents(\"$rectorDir/rector.php\", $rectorConfigFile);\n\nexec(\"$rectorDir/vendor/bin/rector process app --config=$rectorDir/rector.php --no-progress-bar\", $output, $return_var);\n\necho implode(\"\\n\", $output);\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev\": \"vite\",\n        \"build\": \"vite build\"\n    },\n    \"devDependencies\": {\n        \"@rollup/plugin-inject\": \"^5.0.3\",\n        \"@vitejs/plugin-vue\": \"^5.0.0\",\n        \"autoprefixer\": \"^10.4.20\",\n        \"axios\": \"^1.12\",\n        \"laravel-vite-plugin\": \"^2.0\",\n        \"postcss\": \"^8.5.1\",\n        \"tailwindcss\": \"^4.1\",\n        \"tinymce\": \"^4.9.11\",\n        \"vite\": \"^7.3.2\",\n        \"vite-plugin-static-copy\": \"^3.2.0\",\n        \"vue\": \"^3.3\"\n    },\n    \"dependencies\": {\n        \"@coddicat/vue-pinch-scroll-zoom\": \"^4.3.5\",\n        \"@codemirror/lang-html\": \"^6.4.11\",\n        \"@codemirror/theme-one-dark\": \"^6.1.3\",\n        \"@floating-ui/dom\": \"^1.0.0\",\n        \"@fontsource-variable/roboto\": \"^5.2.9\",\n        \"@laravel/echo-vue\": \"^2.3.0\",\n        \"@melloware/coloris\": \"^0.22.0\",\n        \"@syncfusion/ej2-vue-grids\": \"^24.2.7\",\n        \"@tailwindcss/vite\": \"^4.1.17\",\n        \"@tiptap/cli\": \"^3.11.1\",\n        \"@tiptap/core\": \"^3.20.0\",\n        \"@tiptap/extension-color\": \"^3.20.0\",\n        \"@tiptap/extension-details\": \"^3.20.0\",\n        \"@tiptap/extension-highlight\": \"^3.20.0\",\n        \"@tiptap/extension-image\": \"^3.20.0\",\n        \"@tiptap/extension-list\": \"^3.20.0\",\n        \"@tiptap/extension-mention\": \"^3.20.0\",\n        \"@tiptap/extension-table\": \"^3.20.0\",\n        \"@tiptap/extension-table-cell\": \"^3.20.0\",\n        \"@tiptap/extension-table-header\": \"^3.20.0\",\n        \"@tiptap/extension-table-row\": \"^3.20.0\",\n        \"@tiptap/extension-text-align\": \"^3.20.1\",\n        \"@tiptap/extension-text-style\": \"^3.20.0\",\n        \"@tiptap/pm\": \"^3.20.0\",\n        \"@tiptap/starter-kit\": \"^3.20.0\",\n        \"@tiptap/suggestion\": \"^3.20.0\",\n        \"@tiptap/vue-3\": \"^3.20.0\",\n        \"click-outside-vue3\": \"^4.0.1\",\n        \"codemirror\": \"^6.0.2\",\n        \"colord\": \"^2.9.3\",\n        \"cookieconsent\": \"3\",\n        \"cytoscape\": \"^3.27.0\",\n        \"cytoscape-cose-bilkent\": \"^4.1.0\",\n        \"cytoscape-dblclick\": \"^0.3.1\",\n        \"cytoscape-panzoom\": \"^2.5.3\",\n        \"cytoscape-popper\": \"^4.0.1\",\n        \"jspdf\": \"^4.2.1\",\n        \"konva\": \"^10.0.2\",\n        \"laravel-echo\": \"^2.3.0\",\n        \"laravel-vue-pagination\": \"^4.1.3\",\n        \"leaflet-editable\": \"^1.2.0\",\n        \"leaflet.markercluster\": \"^1.5.3\",\n        \"leaflet.markercluster.layersupport\": \"^2.0.1\",\n        \"leaflet.path.drag\": \"^0.0.6\",\n        \"mitt\": \"^3.0.0\",\n        \"pusher-js\": \"^8.4.0\",\n        \"rpg-awesome\": \"^0.2.0\",\n        \"sortablejs\": \"^1.15.0\",\n        \"spectrum-colorpicker\": \"^1.8.1\",\n        \"tippy.js\": \"^6.3.7\",\n        \"tom-select\": \"^2.5.2\",\n        \"vue-draggable-next\": \"^2.2.1\",\n        \"vue-konva\": \"^3.2.6\",\n        \"vue-panzoom\": \"^1.1.6\",\n        \"vue-tippy\": \"v6\"\n    }\n}\n"
  },
  {
    "path": "phpcs.xml",
    "content": "<?xml version=\"1.0\"?>\n<ruleset name=\"Laravel Standards\">\n    <description>The PSR12 coding standard for Laravel.</description>\n    <rule ref=\"PSR12\">\n        <exclude name=\"PSR12.Files.FileHeader.SpacingInsideBlock\"/>\n        <exclude name=\"PSR12.Operators.OperatorSpacing.NoSpaceBefore\"/>\n        <exclude name=\"PSR12.Operators.OperatorSpacing.NoSpaceAfter\"/>\n        <exclude name=\"PSR12.Classes.ClassInstantiation.MissingParentheses\"/>\n        <exclude name=\"PSR2.Classes.ClassDeclaration.OpenBraceNewLine\"/>\n        <exclude name=\"Squiz.WhiteSpace.ScopeClosingBrace.ContentBefore\"/>\n        <exclude name=\"Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine\"/>\n    </rule>\n\n    <rule ref=\"Squiz.WhiteSpace.ScopeClosingBrace\"/>\n\n    <file>app</file>\n    <file>config</file>\n    <file>resources</file>\n    <file>routes</file>\n    <file>tests</file>\n\n\n    <exclude-pattern>*/.phpstorm*</exclude-pattern>\n    <exclude-pattern>*/_ide_helper.php</exclude-pattern>\n\n    <exclude-pattern>*/cache/*</exclude-pattern>\n    <exclude-pattern>*/config/*</exclude-pattern>\n    <exclude-pattern>*/database/*</exclude-pattern>\n    <exclude-pattern>*/docs/*</exclude-pattern>\n    <exclude-pattern>*/migrations/*</exclude-pattern>\n    <exclude-pattern>*/storage/*</exclude-pattern>\n    <exclude-pattern>*/lang/*</exclude-pattern>\n    <exclude-pattern>*/vendor/*</exclude-pattern>\n    <exclude-pattern>*/tests/*</exclude-pattern>\n\n    <exclude-pattern>*/*.js</exclude-pattern>\n    <exclude-pattern>*/*.css</exclude-pattern>\n    <exclude-pattern>*/*.xml</exclude-pattern>\n    <exclude-pattern>*/*.blade.php</exclude-pattern>\n    <exclude-pattern>*/autoload.php</exclude-pattern>\n    <exclude-pattern>*/Console/Kernel.php</exclude-pattern>\n    <exclude-pattern>*/Exceptions/Handler.php</exclude-pattern>\n    <exclude-pattern>*/Http/Kernel.php</exclude-pattern>\n\n    <arg name=\"colors\"/>\n    <arg value=\"spv\"/>\n\n    <ini name=\"memory_limit\" value=\"128M\"/>\n</ruleset>\n"
  },
  {
    "path": "phpmd_ruleset.xml",
    "content": "<?xml version=\"1.0\"?>\n<ruleset name=\"Basic\"\n         xmlns=\"http://pmd.sf.net/ruleset/1.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://pmd.sf.net/ruleset/1.0.0\n                     http://pmd.sf.net/ruleset_xml_schema.xsd\"\n         xsi:noNamespaceSchemaLocation=\"\n                     http://pmd.sf.net/ruleset_xml_schema.xsd\">\n    <description>\n        Kanka Mess Detector\n    </description>\n\n    <!-- Import all rule sets -->\n    <rule ref=\"rulesets/cleancode.xml\">\n        <exclude name=\"ElseExpression\"/>\n        <exclude name=\"StaticAccess\"/>\n    </rule>\n    <rule ref=\"rulesets/codesize.xml\" />\n    <rule ref=\"rulesets/controversial.xml\" />\n    <rule ref=\"rulesets/design.xml\">\n        <exclude name=\"NumberOfChildren\"/>\n    </rule>\n    <rule ref=\"rulesets/design.xml/CouplingBetweenObjects\">\n        <properties>\n            <property name=\"minimum\" value=\"20\"/>\n        </properties>\n    </rule>\n    <rule ref=\"rulesets/naming.xml\">\n        <exclude name=\"ShortVariable\" />\n        <exclude name=\"LongVariable\" />\n    </rule>\n    <rule ref=\"rulesets/unusedcode.xml\"/>\n\n\n</ruleset>\n"
  },
  {
    "path": "phpstan.neon",
    "content": "includes:\n    - ./vendor/larastan/larastan/extension.neon\n\nparameters:\n    ignoreErrors:\n        - identifier: unset.possiblyHookedProperty\n        - identifier: function.alreadyNarrowedType\n        - identifier: trait.unused\n\n\n    paths:\n        - app/\n\n    # The level 9 is the highest level\n    level: 5\n\n    excludePaths:\n        - ./*/*/FileToBeExcluded.php\n        - ./app/Models/Concerns/*.php\n        - ./app/Console/Commands/*.php\n        - ./app/Models/Scopes/AclScope.php\n\n    treatPhpDocTypesAsCertain: false\n"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"https://schema.phpunit.de/10.2/phpunit.xsd\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n         processIsolation=\"false\"\n         stopOnFailure=\"true\"\n    >\n    <testsuites>\n        <testsuite name=\"Test Suite\">\n            <directory suffix=\"Test.php\">./tests</directory>\n        </testsuite>\n    </testsuites>\n    <coverage/>\n    <source>\n        <include>\n            <directory suffix=\".php\">./app</directory>\n        </include>\n    </source>\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\"/>\n        <env name=\"CACHE_DRIVER\" value=\"array\"/>\n        <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        <env name=\"QUEUE_DRIVER\" value=\"sync\"/>\n        <env name=\"DB_DATABASE\" value=\":memory:\" />\n        <env name=\"TELESCOPE_ENABLED\" value=\"false\"/>\n        <env name=\"MAIL_MAILER\" value=\"array\"/>\n        <env name=\"SCOUT_DRIVER\" value=\"null\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "pint.json",
    "content": "{\n    \"preset\": \"laravel\",\n    \"rules\": {\n        \"concat_space\": {\n            \"spacing\": \"one\"\n        }\n    },\n    \"exclude\": [\n        \"lang/\"\n    ]\n}\n"
  },
  {
    "path": "public/.well-known/security.txt",
    "content": "Contact: mailto:hello@kanka.io\nEncryption:\nAcknowledgements:\nPolicy:\nSignature:\nHiring:"
  },
  {
    "path": "public/build/assets/Browser.vue_vue_type_script_setup_true_lang-DjY0tfEc.js",
    "content": "import{f as j,L as z,E as S,o as a,c as s,a as t,b as g,n as v,F as N,r as $,h as E,i as o}from\"./vendor-tiptap-D5xFoo7B.js\";const F={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},V=[\"innerHTML\"],O={class:\"max-w-4xl p-4\"},X={key:0,class:\"flex gap-1 w-full\"},Y={class:\"grow\"},A=[\"placeholder\"],G=[\"title\"],J=[\"title\"],R={key:1,class:\"md:h-36 md:w-80 text-center flex items-center justify-center w-full\"},q=[\"onClick\"],K=[\"title\"],P=[\"innerHTML\"],Q=[\"innerHTML\"],U=300,ee=j({__name:\"Browser\",props:{api:{},opened:{type:Boolean},i18n:{}},emits:[\"selected\",\"closed\"],setup(C,{emit:L}){const r=C,i=o(null);z(()=>{r.i18n&&typeof r.i18n==\"string\"?i.value=JSON.parse(r.i18n):i.value=r.i18n});const x=L,u=o(!0),m=o(!1),f=o(),p=o([]),h=o(\"\"),w=o(\"\"),b=o(null),d=o(null),c=o(\"large\"),T=()=>{u.value=!0,f.value.showModal(),f.value.addEventListener(\"click\",function(e){let l=this.getBoundingClientRect();!(l.top<=e.clientY&&e.clientY<=l.top+l.height&&l.left<=e.clientX&&e.clientX<=l.left+l.width)&&e.target.tagName===\"DIALOG\"&&y()}),axios.get(r.api).then(e=>{p.value=e.data.images,u.value=!1}).catch(e=>{u.value=!1,e.response.status===403&&(d.value=e.response.data.message,d.value+=\"<p>\"+i.value.browse.unauthorized+\"</p>\")})},y=()=>{f.value.close(),x(\"closed\")},k=e=>(e=e??\"\",c.value===\"large\"?\"w-40 h-28 md:w-48 md:h-36 \"+e:\"w-20 h-16 \"+e),B=e=>(e=e??\"\",c.value===\"large\"?\"w-40 md:w-48 \"+e:\"w-20 text-xs \"+e),M=()=>c.value===\"small\"?\"flex flex-wrap justify-center gap-2 md:gap-3\":\"flex flex-wrap justify-center gap-2 md:gap-5\",I=e=>{if(e.folder){u.value=!0,axios.get(e.url).then(l=>{p.value=l.data.images,u.value=!1});return}x(\"selected\",e),y()};S(()=>r.opened,(e,l)=>{e&&T()});const D=e=>{h.value=e.target.value,b.value&&clearTimeout(b.value),b.value=setTimeout(()=>{H()},U)},H=()=>{w.value!=h.value&&(w.value=h.value,m.value=!0,axios.get(r.api+\"?term=\"+w.value).then(e=>{p.value=e.data.images,m.value=!1}))},_=e=>{c.value=e};return(e,l)=>(a(),s(\"dialog\",{class:\"dialog rounded-2xl text-center bg-base-100 text-base-content\",id:\"gallery-dialog\",ref_key:\"galleryDialog\",ref:f,\"aria-modal\":\"true\",\"aria-labelledby\":\"modal-card-label\"},[t(\"header\",F,[t(\"h4\",{innerHTML:i.value.browse.title,class:\"text-lg font-normal\"},null,8,V),t(\"button\",{type:\"button\",class:\"text-base-content\",onClick:l[0]||(l[0]=n=>y()),title:\"Close\"},[...l[3]||(l[3]=[t(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),t(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),t(\"article\",O,[!u.value&&!d.value?(a(),s(\"div\",X,[t(\"div\",Y,[t(\"input\",{type:\"text\",class:\"w-full\",placeholder:i.value.browse.search.placeholder,onInput:D},null,40,A)]),c.value!==\"large\"?(a(),s(\"div\",{key:0,class:\"flex-none cursor-pointer btn2 btn-ghost btn-sm\",onClick:l[1]||(l[1]=n=>_(\"large\")),title:i.value.browse.layouts.large},[...l[4]||(l[4]=[t(\"i\",{class:\"fa-regular fa-grid-2\",\"aria-label\":\"Large previews\"},null,-1)])],8,G)):g(\"\",!0),c.value!==\"small\"?(a(),s(\"div\",{key:1,class:\"flex-none cursor-pointer btn2 btn-ghost btn-sm\",onClick:l[2]||(l[2]=n=>_(\"small\")),title:i.value.browse.layouts.small},[...l[5]||(l[5]=[t(\"i\",{class:\"fa-regular fa-grid-4\",\"aria-label\":\"Small previews\"},null,-1)])],8,J)):g(\"\",!0)])):g(\"\",!0),u.value||m.value?(a(),s(\"div\",R,[...l[6]||(l[6]=[t(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):(a(),s(\"div\",{key:2,class:v(M())},[(a(!0),s(N,null,$(p.value,n=>(a(),s(\"div\",{class:\"cursor-pointer shadow-sm rounded hover:shadow-lg overflow-hidden\",onClick:W=>I(n)},[n.folder?(a(),s(\"div\",{key:1,class:v(k(\"flex items-center align-middle justify-center text-4xl\"))},[t(\"i\",{class:v(n.icon),\"aria-label\":\"Folder\"},null,2)],2)):(a(),s(\"div\",{key:0,class:v(k(\"cover-background\")),style:E({backgroundImage:\"url('\"+n.thumbnail+\"')\"})},null,6)),t(\"div\",{class:v(B(\"truncate px-2 py-1 \")),title:n.name},[t(\"span\",{innerHTML:n.name},null,8,P)],10,K)],8,q))),256)),d.value?(a(),s(\"div\",{key:0,class:\"alert alert-error p-2 rounded\",innerHTML:d.value},null,8,Q)):g(\"\",!0)],2))])],512))}});export{ee as _};\n"
  },
  {
    "path": "public/build/assets/GalleryDialog-B3Id-RLo.js",
    "content": "import{f as V,E as $,g as z,G as K,o as s,c as n,a as l,s as u,w as q,p as A,b as _,d as y,F as x,r as j,t as C,n as H,i as d}from\"./vendor-tiptap-D5xFoo7B.js\";import{a as B}from\"./index-D5GkNzM3.js\";import{_ as J}from\"./_plugin-vue_export-helper-DlAUqK2U.js\";const O={class:\"gallery-container w-[800px] max-w-[90vw] max-h-[80vh] flex flex-col\"},Q={class:\"gallery-header flex items-center justify-between p-4\"},W={class:\"p-4 space-y-3\"},X={class:\"flex gap-2\"},Y={class:\"relative flex-1\"},Z={key:0,class:\"flex items-center gap-2 text-sm\"},ee={class:\"text-base-content/70\"},te={class:\"gallery-content flex-1 min-h-0 overflow-y-auto p-4\"},le={key:0,class:\"flex items-center justify-center py-12\"},ae={key:1,class:\"flex items-center justify-center py-12 text-base-content/50\"},se={key:2,class:\"grid grid-cols-4 gap-4\"},ne=[\"onClick\"],re={key:0,class:\"absolute inset-0 flex flex-col items-center justify-center gap-2\"},oe={class:\"text-sm text-neutral-content truncate max-w-full px-2\"},ie=[\"src\",\"alt\"],ue={class:\"absolute inset-x-0 bottom-0 bg-gradient-to-t from-black/70 to-transparent p-2 opacity-0 group-hover:opacity-100 transition-opacity\"},de={class:\"text-white text-xs truncate block\"},ce={key:0,class:\"gallery-footer flex items-center justify-center gap-2 p-4 border-t border-base-300\"},ve=[\"disabled\"],fe=[\"disabled\"],pe=V({__name:\"GalleryDialog\",props:{galleryId:{}},setup(G){const R=G,m=d(null),b=d([]),h=d(!1),c=d(\"\"),o=d(\"\"),k=d(\"\"),f=d({first:null,last:null,prev:null,next:null}),v=d([]),T=d(null);let i=null,r=null;const S=t=>{t.detail.galleryId===R.galleryId&&(T.value=t.detail.editor,k.value=t.detail.galleryUrl,o.value=`${t.detail.galleryUrl}?setup`,v.value=[],c.value=\"\",p(o.value),m.value?.showModal())},w=()=>{r&&(clearTimeout(r),r=null),i&&(i.abort(),i=null),m.value?.close()},p=async t=>{i&&i.abort(),i=new AbortController,h.value=!0;try{const e=await B.get(t,{signal:i.signal});b.value=e.data.data||[],f.value={first:e.data.links?.first||null,last:e.data.links?.last||null,prev:e.data.links?.prev||null,next:e.data.links?.next||null}}catch(e){if(B.isCancel(e))return;console.error(\"Failed to load gallery images:\",e),b.value=[]}finally{h.value=!1}},g=()=>{r&&(clearTimeout(r),r=null),v.value=[];const t=new URL(k.value);t.searchParams.set(\"setup\",\"\"),c.value&&t.searchParams.set(\"term\",c.value),o.value=t.toString(),p(o.value)},D=()=>{r&&clearTimeout(r),r=setTimeout(()=>{g()},500)},E=t=>{t.key===\"Enter\"&&(t.preventDefault(),g())},L=()=>{c.value=\"\",g()};$(c,(t,e)=>{t!==e&&D()});const N=t=>{!t.folder||!t.url||(v.value.push({url:o.value,name:t.name}),o.value=t.url,p(t.url))},F=()=>{if(v.value.length===0)return;const t=v.value.pop();t&&(o.value=t.url,p(t.url))},M=()=>{v.value=[];const t=new URL(k.value);o.value=t.toString(),p(o.value)},U=t=>{t&&(o.value=t,p(t))},P=t=>{if(t.folder){N(t);return}T.value?.chain().focus().setImage({src:t.src,alt:t.name,\"data-gallery-id\":t.uuid}).run(),w()};return z(()=>{window.addEventListener(\"tiptap:open-gallery\",S)}),K(()=>{window.removeEventListener(\"tiptap:open-gallery\",S),r&&clearTimeout(r),i&&i.abort()}),(t,e)=>(s(),n(\"dialog\",{ref_key:\"dialogRef\",ref:m,class:\"gallery-dialog rounded-2xl bg-base-100 p-0 backdrop:bg-black/50\",onClick:u(w,[\"self\"])},[l(\"div\",O,[l(\"div\",Q,[e[4]||(e[4]=l(\"h2\",{class:\"\"},\"Gallery\",-1)),l(\"button\",{onClick:u(w,[\"prevent\"]),class:\"btn2 btn-ghost\"},[...e[3]||(e[3]=[l(\"i\",{class:\"fa-regular fa-times\",\"aria-hidden\":\"true\"},null,-1)])])]),l(\"div\",W,[l(\"div\",X,[l(\"div\",Y,[q(l(\"input\",{\"onUpdate:modelValue\":e[0]||(e[0]=a=>c.value=a),type:\"text\",placeholder:\"Search images...\",class:\"input input-bordered w-full pr-10\",onKeydown:E},null,544),[[A,c.value]]),c.value?(s(),n(\"button\",{key:0,onClick:u(L,[\"prevent\"]),class:\"absolute right-3 top-1/2 -translate-y-1/2 text-base-content/50 hover:text-base-content\"},[...e[5]||(e[5]=[l(\"i\",{class:\"fa-regular fa-times\",\"aria-hidden\":\"true\"},null,-1)])])):_(\"\",!0)]),l(\"button\",{onClick:u(g,[\"prevent\"]),class:\"btn2 btn-primary\"},[...e[6]||(e[6]=[l(\"i\",{class:\"fa-regular fa-search\",\"aria-hidden\":\"true\"},null,-1),y(\" Search \",-1)])])]),v.value.length>0?(s(),n(\"div\",Z,[l(\"button\",{onClick:u(M,[\"prevent\"]),class:\"btn2 btn-ghost btn-xs\"},[...e[7]||(e[7]=[l(\"i\",{class:\"fa-regular fa-home\",\"aria-hidden\":\"true\"},null,-1)])]),e[10]||(e[10]=l(\"span\",{class:\"text-base-content/50\"},\"/\",-1)),(s(!0),n(x,null,j(v.value,(a,I)=>(s(),n(x,{key:I},[l(\"span\",ee,C(a.name),1),e[8]||(e[8]=l(\"span\",{class:\"text-base-content/50\"},\"/\",-1))],64))),128)),l(\"button\",{onClick:u(F,[\"prevent\"]),class:\"btn2 btn-ghost btn-xs\"},[...e[9]||(e[9]=[l(\"i\",{class:\"fa-regular fa-arrow-left\",\"aria-hidden\":\"true\"},null,-1),y(\" Back \",-1)])])])):_(\"\",!0)]),l(\"div\",te,[h.value?(s(),n(\"div\",le,[...e[11]||(e[11]=[l(\"i\",{class:\"fa-solid fa-spinner fa-spin text-2xl\",\"aria-hidden\":\"true\"},null,-1)])])):b.value.length===0?(s(),n(\"div\",ae,\" No images found \")):(s(),n(\"div\",se,[(s(!0),n(x,null,j(b.value,a=>(s(),n(\"button\",{key:a.uuid,onClick:u(I=>P(a),[\"prevent\"]),class:\"gallery-item group relative aspect-square rounded-lg overflow-hidden border border-base-300 hover:border-primary transition-colors cursor-pointer bg-base-200\"},[a.folder?(s(),n(\"div\",re,[l(\"i\",{class:H([a.icon,\"text-4xl text-neutral-content\"]),\"aria-hidden\":\"true\"},null,2),l(\"span\",oe,C(a.name),1)])):(s(),n(x,{key:1},[l(\"img\",{src:a.thumbnail,alt:a.name,class:\"absolute inset-0 w-full h-full object-cover\",loading:\"lazy\"},null,8,ie),l(\"div\",ue,[l(\"span\",de,C(a.name),1)])],64))],8,ne))),128))]))]),f.value.prev||f.value.next?(s(),n(\"div\",ce,[l(\"button\",{onClick:e[1]||(e[1]=u(a=>U(f.value.prev),[\"prevent\"])),disabled:!f.value.prev,class:\"btn2 btn-ghost btn-xs\"},[...e[12]||(e[12]=[l(\"i\",{class:\"fa-regular fa-chevron-left\",\"aria-hidden\":\"true\"},null,-1),y(\" Previous \",-1)])],8,ve),l(\"button\",{onClick:e[2]||(e[2]=u(a=>U(f.value.next),[\"prevent\"])),disabled:!f.value.next,class:\"btn2 btn-ghost btn-xs\"},[...e[13]||(e[13]=[y(\" Next \",-1),l(\"i\",{class:\"fa-regular fa-chevron-right\",\"aria-hidden\":\"true\"},null,-1)])],8,fe)])):_(\"\",!0)])],512))}}),xe=J(pe,[[\"__scopeId\",\"data-v-1d30234a\"]]);export{xe as default};\n"
  },
  {
    "path": "public/build/assets/GalleryDialog-SGgOgWve.css",
    "content": ".gallery-dialog[data-v-1d30234a]::backdrop{background:#00000080}.gallery-dialog[open][data-v-1d30234a]{display:flex}.gallery-item[data-v-1d30234a]:focus{outline:2px solid oklch(var(--p));outline-offset:2px}\n"
  },
  {
    "path": "public/build/assets/SourceEditor-BKF0zshA.css",
    "content": ".source-editor[data-v-d2900713]{border:1px solid hsl(var(--bc)/.1);border-radius:var(--rounded-btn);overflow:hidden}.source-editor-toolbar[data-v-d2900713]{display:flex;justify-content:space-between;align-items:center;padding:.5rem .75rem;background:hsl(var(--b2));border-bottom:1px solid hsl(var(--bc)/.1)}.source-editor-content[data-v-d2900713]{min-height:200px;max-height:70vh;overflow-y:auto}.source-editor-content[data-v-d2900713] .cm-editor{height:100%;min-height:200px;max-height:calc(70vh - 40px);font-size:.875rem}.source-editor-content[data-v-d2900713] .cm-scroller{overflow:auto}.source-editor-content[data-v-d2900713] .cm-content{padding:.5rem}.source-editor-content[data-v-d2900713] .cm-focused{outline:none}\n"
  },
  {
    "path": "public/build/assets/SourceEditor-CaEGRaAo.js",
    "content": "import{ap as mg,aq as Og,ar as bg,f as hS,g as cS,E as fS,G as uS,o as dS,c as pS,a as zs,d as gS,i as mS}from\"./vendor-tiptap-D5xFoo7B.js\";import{_ as OS}from\"./_plugin-vue_export-helper-DlAUqK2U.js\";let Za=[],Sg=[];(()=>{let n=\"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e<n.length;e++)(e%2?Sg:Za).push(t=t+n[e])})();function bS(n){if(n<768)return!1;for(let e=0,t=Za.length;;){let i=e+t>>1;if(n<Za[i])t=i;else if(n>=Sg[i])e=i+1;else return!0;if(e==t)return!1}}function Xf(n){return n>=127462&&n<=127487}const Lf=8205;function SS(n,e,t=!0,i=!0){return(t?yg:yS)(n,e,i)}function yg(n,e,t){if(e==n.length)return e;e&&xg(n.charCodeAt(e))&&wg(n.charCodeAt(e-1))&&e--;let i=Rl(n,e);for(e+=Ef(i);e<n.length;){let s=Rl(n,e);if(i==Lf||s==Lf||t&&bS(s))e+=Ef(s),i=s;else if(Xf(s)){let r=0,o=e-2;for(;o>=0&&Xf(Rl(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function yS(n,e,t){for(;e>0;){let i=yg(n,e-2,t);if(i<e)return i;e--}return 0}function Rl(n,e){let t=n.charCodeAt(e);if(!wg(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return xg(i)?(t-55296<<10)+(i-56320)+65536:t}function xg(n){return n>=56320&&n<57344}function wg(n){return n>=55296&&n<56320}function Ef(n){return n<65536?1:2}class Z{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=Os(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Bt.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=Os(this,e,t);let i=[];return this.decompose(e,t,i,0),Bt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new hn(this),r=new hn(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new hn(this,e)}iterRange(e,t=this.length){return new kg(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Qg(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError(\"A document must have at least one line\");return e.length==1&&!e[0]?Z.empty:e.length<=32?new ue(e):Bt.from(ue.split(e,[]))}}class ue extends Z{constructor(e,t=xS(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new wS(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new ue(Wf(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=zr(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new ue(l,o.length+r.length));else{let a=l.length>>1;i.push(new ue(l.slice(0,a)),new ue(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof ue))return super.replace(e,t,i);[e,t]=Os(this,e,t);let s=zr(this.text,zr(i.text,Wf(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new ue(s,r):Bt.from(ue.split(s,[]),r)}sliceString(e,t=this.length,i=`\n`){[e,t]=Os(this,e,t);let s=\"\";for(let r=0,o=0;r<=t&&o<this.text.length;o++){let l=this.text[o],a=r+l.length;r>e&&o&&(s+=i),e<a&&t>r&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new ue(i,s)),i=[],s=-1);return s>-1&&t.push(new ue(i,s)),t}}class Bt extends Z{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r<this.children.length;r++){let l=this.children[r],a=o+l.length;if(e<=a&&t>=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=Os(this,e,t),i.lines<this.lines)for(let s=0,r=0;s<this.children.length;s++){let o=this.children[s],l=r+o.length;if(e>=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines<h>>4&&a.lines>h>>6){let c=this.children.slice();return c[s]=a,new Bt(c,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=`\n`){[e,t]=Os(this,e,t);let s=\"\";for(let r=0,o=0;r<this.children.length&&o<=t;r++){let l=this.children[r],a=o+l.length;o>e&&r&&(s+=i),e<a&&t>o&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Bt))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new ue(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof Bt)for(let g of d.children)f(g);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof ue&&a&&(p=c[c.length-1])instanceof ue&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new ue(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:Bt.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Bt(l,t)}}Z.empty=new ue([\"\"],0);function xS(n){let e=-1;for(let t of n)e+=t.length+1;return e}function zr(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r<n.length&&s<=i;r++){let l=n[r],a=s+l.length;a>=t&&(a>i&&(l=l.slice(0,i-s)),s<t&&(l=l.slice(t-s)),o?(e[e.length-1]+=l,o=!1):e.push(l)),s=a+1}return e}function Wf(n,e,t){return zr(n,[\"\"],e,t)}class hn{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value=\"\",this.nodes=[e],this.offsets=[t>0?1:(e instanceof ue?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof ue?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value=\"\",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=`\n`,this;e--}else if(s instanceof ue){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof ue?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class kg{constructor(e,t,i){this.value=\"\",this.done=!1,this.cursor=new hn(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value=\"\",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=\"\"}}class Qg{constructor(e){this.inner=e,this.afterBreak=!0,this.value=\"\",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value=\"\",this.afterBreak=!1):t?(this.done=!0,this.value=\"\"):i?this.afterBreak?this.value=\"\":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<\"u\"&&(Z.prototype[Symbol.iterator]=function(){return this.iter()},hn.prototype[Symbol.iterator]=kg.prototype[Symbol.iterator]=Qg.prototype[Symbol.iterator]=function(){return this});class wS{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}function Os(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function _(n,e,t=!0,i=!0){return SS(n,e,t,i)}function kS(n){return n>=56320&&n<57344}function QS(n){return n>=55296&&n<56320}function Me(n,e){let t=n.charCodeAt(e);if(!QS(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return kS(i)?(t-55296<<10)+(i-56320)+65536:t}function wc(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function ut(n){return n<65536?1:2}const Ba=/\\r\\n?|\\n/;var te=(function(n){return n[n.Simple=0]=\"Simple\",n[n.TrackDel=1]=\"TrackDel\",n[n.TrackBefore=2]=\"TrackBefore\",n[n.TrackAfter=3]=\"TrackAfter\",n})(te||(te={}));class qt{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t+1];e+=i<0?this.sections[t]:i}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,i=0,s=0;t<this.sections.length;){let r=this.sections[t++],o=this.sections[t++];o<0?(e(i,s,r),s+=r):s+=o,i+=r}}iterChangedRanges(e,t=!1){Xa(this,e,t)}get invertedDesc(){let e=[];for(let t=0;t<this.sections.length;){let i=this.sections[t++],s=this.sections[t++];s<0?e.push(i,s):e.push(s,i)}return new qt(e)}composeDesc(e){return this.empty?e:e.empty?this:vg(this,e)}mapDesc(e,t=!1){return e.empty?this:La(this,e,t)}mapPos(e,t=-1,i=te.Simple){let s=0,r=0;for(let o=0;o<this.sections.length;){let l=this.sections[o++],a=this.sections[o++],h=s+l;if(a<0){if(h>e)return r+(e-s);r+=l}else{if(i!=te.Simple&&h>=e&&(i==te.TrackDel&&s<e&&h>e||i==te.TrackBefore&&s<e||i==te.TrackAfter&&h>e))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i<this.sections.length&&s<=t;){let r=this.sections[i++],o=this.sections[i++],l=s+r;if(o>=0&&s<=t&&l>=e)return s<e&&l>t?\"cover\":!0;s=l}return!1}toString(){let e=\"\";for(let t=0;t<this.sections.length;){let i=this.sections[t++],s=this.sections[t++];e+=(e?\" \":\"\")+i+(s>=0?\":\"+s:\"\")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!=\"number\"))throw new RangeError(\"Invalid JSON representation of ChangeDesc\");return new qt(e)}static create(e){return new qt(e)}}class he extends qt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError(\"Applying change set to a document with the wrong length\");return Xa(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return La(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s<t.length;s+=2){let o=t[s],l=t[s+1];if(l>=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length<a;)i.push(Z.empty);i.push(o?e.slice(r,r+o):Z.empty)}r+=o}return new he(t,i)}compose(e){return this.empty?e:e.empty?this:vg(this,e,!0)}map(e,t=!1){return e.empty?this:La(this,e,t,!0)}iterChanges(e,t=!1){Xa(this,e,t)}get desc(){return qt.create(this.sections)}filter(e){let t=[],i=[],s=[],r=new xn(this);e:for(let o=0,l=0;;){let a=o==e.length?1e9:e[o++];for(;l<a||l==a&&r.len==0;){if(r.done)break e;let c=Math.min(r.len,a-l);Qe(s,c,-1);let f=r.ins==-1?-1:r.off==0?r.ins:0;Qe(t,c,f),f>0&&Oi(i,t,r.text),r.forward(c),l+=c}let h=e[o++];for(;l<h;){if(r.done)break e;let c=Math.min(r.len,h-l);Qe(t,c,-1),Qe(s,c,r.ins==-1?-1:r.off==0?r.ins:0),r.forward(c),l+=c}}return{changes:new he(t,i),filtered:qt.create(s)}}toJSON(){let e=[];for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t],s=this.sections[t+1];s<0?e.push(i):s==0?e.push([i]):e.push([i].concat(this.inserted[t>>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(c=!1){if(!c&&!s.length)return;o<t&&Qe(s,t-o,-1);let f=new he(s,r);l=l?l.compose(f.map(l)):f,s=[],r=[],o=0}function h(c){if(Array.isArray(c))for(let f of c)h(f);else if(c instanceof he){if(c.length!=t)throw new RangeError(`Mismatched change set length (got ${c.length}, expected ${t})`);a(),l=l?l.compose(c.map(l)):c}else{let{from:f,to:u=f,insert:d}=c;if(f>u||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let p=d?typeof d==\"string\"?Z.of(d.split(i||Ba)):d:Z.empty,g=p.length;if(f==u&&g==0)return;f<o&&a(),f>o&&Qe(s,f-o,-1),Qe(s,u-f,g),Oi(r,s,p),o=u}}return h(e),a(!l),l}static empty(e){return new he(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError(\"Invalid JSON representation of ChangeSet\");let t=[],i=[];for(let s=0;s<e.length;s++){let r=e[s];if(typeof r==\"number\")t.push(r,-1);else{if(!Array.isArray(r)||typeof r[0]!=\"number\"||r.some((o,l)=>l&&typeof o!=\"string\"))throw new RangeError(\"Invalid JSON representation of ChangeSet\");if(r.length==1)t.push(r[0],0);else{for(;i.length<s;)i.push(Z.empty);i[s]=Z.of(r.slice(1)),t.push(r[0],i[s].length)}}}return new he(t,i)}static createSet(e,t){return new he(e,t)}}function Qe(n,e,t,i=!1){if(e==0&&t<=0)return;let s=n.length-2;s>=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function Oi(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i<n.length)n[n.length-1]=n[n.length-1].append(t);else{for(;n.length<i;)n.push(Z.empty);n.push(t)}}function Xa(n,e,t){let i=n.inserted;for(let s=0,r=0,o=0;o<n.sections.length;){let l=n.sections[o++],a=n.sections[o++];if(a<0)s+=l,r+=l;else{let h=s,c=r,f=Z.empty;for(;h+=l,c+=a,a&&i&&(f=f.append(i[o-2>>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,c,f),s=h,r=c}}}function La(n,e,t,i=!1){let s=[],r=i?[]:null,o=new xn(n),l=new xn(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error(\"Mismatched change set lengths\");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);Qe(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len<o.len||l.len==o.len&&!t))){let h=l.len;for(Qe(s,l.ins,-1);h;){let c=Math.min(o.len,h);o.ins>=0&&a<o.i&&o.len<=c&&(Qe(s,0,o.ins),r&&Oi(r,s,o.text),a=o.i),o.forward(c),h-=c}l.next()}else if(o.ins>=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.len<c)c-=l.len,l.next();else break;Qe(s,h,a<o.i?o.ins:0),r&&a<o.i&&Oi(r,s,o.text),a=o.i,o.forward(o.len-c)}else{if(o.done&&l.done)return r?he.createSet(s,r):qt.create(s);throw new Error(\"Mismatched change set lengths\")}}}function vg(n,e,t=!1){let i=[],s=t?[]:null,r=new xn(n),o=new xn(e);for(let l=!1;;){if(r.done&&o.done)return s?he.createSet(i,s):qt.create(i);if(r.ins==0)Qe(i,r.len,0,l),r.next();else if(o.len==0&&!o.done)Qe(i,0,o.ins,l),s&&Oi(s,i,o.text),o.next();else{if(r.done||o.done)throw new Error(\"Mismatched change set lengths\");{let a=Math.min(r.len2,o.len),h=i.length;if(r.ins==-1){let c=o.ins==-1?-1:o.off?0:o.ins;Qe(i,a,c,l),s&&c&&Oi(s,i,o.text)}else o.ins==-1?(Qe(i,r.off?0:r.len,a,l),s&&Oi(s,i,r.textBit(a))):(Qe(i,r.off?0:r.len,o.off?0:o.ins,l),s&&!o.off&&Oi(s,i,o.text));l=(r.ins>a||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}class xn{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i<e.length?(this.len=e[this.i++],this.ins=e[this.i++]):(this.len=0,this.ins=-2),this.off=0}get done(){return this.ins==-2}get len2(){return this.ins<0?this.len:this.ins}get text(){let{inserted:e}=this.set,t=this.i-2>>1;return t>=e.length?Z.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?Z.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Xi{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new Xi(i,s,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return S.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return S.range(this.anchor,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!=\"number\"||typeof e.head!=\"number\")throw new RangeError(\"Invalid JSON representation for SelectionRange\");return S.range(e.anchor,e.head)}static create(e,t,i){return new Xi(e,t,i)}}class S{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:S.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;i<this.ranges.length;i++)if(!this.ranges[i].eq(e.ranges[i],t))return!1;return!0}get main(){return this.ranges[this.mainIndex]}asSingle(){return this.ranges.length==1?this:new S([this.main],0)}addRange(e,t=!0){return S.create([e].concat(this.ranges),t?0:this.mainIndex+1)}replaceRange(e,t=this.mainIndex){let i=this.ranges.slice();return i[t]=e,S.create(i,this.mainIndex)}toJSON(){return{ranges:this.ranges.map(e=>e.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!=\"number\"||e.main>=e.ranges.length)throw new RangeError(\"Invalid JSON representation for EditorSelection\");return new S(e.ranges.map(t=>Xi.fromJSON(t)),e.main)}static single(e,t=e){return new S([S.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError(\"A selection needs at least one range\");for(let i=0,s=0;s<e.length;s++){let r=e[s];if(r.empty?r.from<=i:r.from<i)return S.normalized(e.slice(),t);i=r.to}return new S(e,t)}static cursor(e,t=0,i,s){return Xi.create(e,e,(t==0?0:t<0?8:16)|(i==null?7:Math.min(6,i))|(s??16777215)<<6)}static range(e,t,i,s){let r=(i??16777215)<<6|(s==null?7:Math.min(6,s));return t<e?Xi.create(t,e,48|r):Xi.create(e,t,(t>e?8:0)|r)}static normalized(e,t=0){let i=e[t];e.sort((s,r)=>s.from-r.from),t=e.indexOf(i);for(let s=1;s<e.length;s++){let r=e[s],o=e[s-1];if(r.empty?r.from<=o.to:r.from<o.to){let l=o.from,a=Math.max(r.to,o.to);s<=t&&t--,e.splice(--s,2,r.anchor>r.head?S.range(a,l):S.range(l,a))}}return new S(e,t)}}function $g(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError(\"Selection points outside of document\")}let kc=0;class k{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=kc++,this.default=e([]),this.extensions=typeof r==\"function\"?r(this):r}get reader(){return this}static define(e={}){return new k(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:Qc),!!e.static,e.enables)}of(e){return new qr([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error(\"Can't compute a static facet\");return new qr(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error(\"Can't compute a static facet\");return new qr(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function Qc(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class qr{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=kc++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f==\"doc\"?a=!0:f==\"selection\"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||Ea(f,c)){let d=i(f);if(l?!Vf(d,f.values[o],s):!s(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,p=u.config.address[r];if(p!=null){let g=lo(u,p);if(this.dependencies.every(m=>m instanceof k?u.facet(m)===f.facet(m):m instanceof Se?u.field(m,!1)==f.field(m,!1):!0)||(l?Vf(d=i(f),g,s):s(d=i(f),g)))return f.values[o]=g,0}else d=i(f);return f.values[o]=d,1}}}}function Vf(n,e,t){if(n.length!=e.length)return!1;for(let i=0;i<n.length;i++)if(!t(n[i],e[i]))return!1;return!0}function Ea(n,e){let t=!1;for(let i of e)cn(n,i)&1&&(t=!0);return t}function vS(n,e,t){let i=t.map(a=>n[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;c<i.length;c++){let f=lo(a,i[c]);if(s[c]==2)for(let u of f)h.push(u);else h.push(f)}return e.combine(h)}return{create(a){for(let h of i)cn(a,h);return a.values[o]=l(a),1},update(a,h){if(!Ea(a,r))return 0;let c=l(a);return e.compare(c,a.values[o])?0:(a.values[o]=c,1)},reconfigure(a,h){let c=Ea(a,i),f=h.config.facets[e.id],u=h.facet(e);if(f&&!c&&Qc(t,f))return a.values[o]=u,0;let d=l(a);return e.compare(d,u)?(a.values[o]=u,0):(a.values[o]=d,1)}}}const ir=k.define({static:!0});class Se{constructor(e,t,i,s,r){this.id=e,this.createF=t,this.updateF=i,this.compareF=s,this.spec=r,this.provides=void 0}static define(e){let t=new Se(kc++,e.create,e.update,e.compare||((i,s)=>i===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(ir).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(ir),o=s.facet(ir),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,ir.of({field:this,create:e})]}get extension(){return this}}const Zi={lowest:4,low:3,default:2,high:1,highest:0};function qs(n){return e=>new Pg(e,n)}const xt={highest:qs(Zi.highest),high:qs(Zi.high),default:qs(Zi.default),low:qs(Zi.low),lowest:qs(Zi.lowest)};class Pg{constructor(e,t){this.inner=e,this.prec=t}}class il{of(e){return new Wa(this,e)}reconfigure(e){return il.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Wa{constructor(e,t){this.compartment=e,this.inner=t}}class oo{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length<i.length;)this.statusTemplate.push(0)}staticFacet(e){let t=this.address[e.id];return t==null?e.default:this.staticValues[t>>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of $S(e,t,o))u instanceof Se?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,g=c&&c[u]||[];if(d.every(m=>m.type==0))if(l[p.id]=a.length<<1|1,Qc(g,d))a.push(i.facet(p));else{let m=p.combine(d.map(O=>O.value));a.push(i&&p.compare(m,i.facet(p))?i.facet(p):m)}else{for(let m of d)m.type==0?(l[m.id]=a.length<<1|1,a.push(m.value)):(l[m.id]=h.length<<1,h.push(O=>m.dynamicSlot(O)));l[p.id]=h.length<<1,h.push(m=>vS(m,p,d))}}let f=h.map(u=>u(l));return new oo(e,o,f,l,a,r)}}function $S(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof Wa&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof Wa){if(t.has(o.compartment))throw new RangeError(\"Duplicate use of compartment in extensions\");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof Pg)r(o.inner,o.prec);else if(o instanceof Se)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof qr)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,Zi.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,Zi.default),i.reduce((o,l)=>o.concat(l))}function cn(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error(\"Cyclic dependency between fields and/or facets\");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function lo(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const Cg=k.define(),Va=k.define({combine:n=>n.some(e=>e),static:!0}),Tg=k.define({combine:n=>n.length?n[0]:void 0,static:!0}),Mg=k.define(),Ag=k.define(),Rg=k.define(),Dg=k.define({combine:n=>n.length?n[0]:!1});class wt{constructor(e,t){this.type=e,this.value=t}static define(){return new PS}}class PS{of(e){return new wt(this,e)}}class CS{constructor(e){this.map=e}of(e){return new B(this,e)}}class B{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new B(this.type,t)}is(e){return this.type==e}static define(e={}){return new CS(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}}B.reconfigure=B.define();B.appendConfig=B.define();class ce{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&$g(i,t.newLength),r.some(l=>l.type==ce.time)||(this.annotations=r.concat(ce.time.of(Date.now())))}static create(e,t,i,s,r,o){return new ce(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(ce.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]==\".\"))}}ce.time=wt.define();ce.userEvent=wt.define();ce.addToHistory=wt.define();ce.remote=wt.define();function TS(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i<n.length&&(s==e.length||e[s]>=n[i]))r=n[i++],o=n[i++];else if(s<e.length)r=e[s++],o=e[s++];else return t;!t.length||t[t.length-1]<r?t.push(r,o):t[t.length-1]<o&&(t[t.length-1]=o)}}function Zg(n,e,t){var i;let s,r,o;return t?(s=e.changes,r=he.empty(e.changes.length),o=n.changes.compose(e.changes)):(s=e.changes.map(n.changes),r=n.changes.mapDesc(e.changes,!0),o=n.changes.compose(s)),{changes:o,selection:e.selection?e.selection.map(r):(i=n.selection)===null||i===void 0?void 0:i.map(s),effects:B.mapEffects(n.effects,s).concat(B.mapEffects(e.effects,r)),annotations:n.annotations.length?n.annotations.concat(e.annotations):e.annotations,scrollIntoView:n.scrollIntoView||e.scrollIntoView}}function za(n,e,t){let i=e.selection,s=ts(e.annotations);return e.userEvent&&(s=s.concat(ce.userEvent.of(e.userEvent))),{changes:e.changes instanceof he?e.changes:he.of(e.changes||[],t,n.facet(Tg)),selection:i&&(i instanceof S?i:S.single(i.anchor,i.head)),effects:ts(e.effects),annotations:s,scrollIntoView:!!e.scrollIntoView}}function Bg(n,e,t){let i=za(n,e.length?e[0]:{},n.doc.length);e.length&&e[0].filter===!1&&(t=!1);for(let r=1;r<e.length;r++){e[r].filter===!1&&(t=!1);let o=!!e[r].sequential;i=Zg(i,za(n,e[r],o?i.changes.newLength:n.doc.length),o)}let s=ce.create(n,i.changes,i.selection,i.effects,i.annotations,i.scrollIntoView);return AS(t?MS(s):s)}function MS(n){let e=n.startState,t=!0;for(let s of e.facet(Mg)){let r=s(n);if(r===!1){t=!1;break}Array.isArray(r)&&(t=t===!0?r:TS(t,r))}if(t!==!0){let s,r;if(t===!1)r=n.changes.invertedDesc,s=he.empty(e.doc.length);else{let o=n.changes.filter(t);s=o.changes,r=o.filtered.mapDesc(o.changes).invertedDesc}n=ce.create(e,s,n.selection&&n.selection.map(r),B.mapEffects(n.effects,r),n.annotations,n.scrollIntoView)}let i=e.facet(Ag);for(let s=i.length-1;s>=0;s--){let r=i[s](n);r instanceof ce?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof ce?n=r[0]:n=Bg(e,ts(r),!1)}return n}function AS(n){let e=n.startState,t=e.facet(Rg),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=Zg(i,za(e,r,n.changes.newLength),!0))}return i==n?n:ce.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const RS=[];function ts(n){return n==null?RS:Array.isArray(n)?n:[n]}var oe=(function(n){return n[n.Word=0]=\"Word\",n[n.Space=1]=\"Space\",n[n.Other=2]=\"Other\",n})(oe||(oe={}));const DS=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;let qa;try{qa=new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\",\"u\")}catch{}function ZS(n){if(qa)return qa.test(n);for(let e=0;e<n.length;e++){let t=n[e];if(/\\w/.test(t)||t>\"\"&&(t.toUpperCase()!=t.toLowerCase()||DS.test(t)))return!0}return!1}function BS(n){return e=>{if(!/\\S/.test(e))return oe.Space;if(ZS(e))return oe.Word;for(let t=0;t<n.length;t++)if(e.indexOf(n[t])>-1)return oe.Word;return oe.Other}}class L{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;l<this.config.dynamicSlots.length;l++)cn(this,l<<1);this.computeSlot=null}field(e,t=!0){let i=this.config.address[e.id];if(i==null){if(t)throw new RangeError(\"Field is not present in this state\");return}return cn(this,i),lo(this,i)}update(...e){return Bg(this,e,!0)}applyTransaction(e){let t=this.config,{base:i,compartments:s}=t;for(let l of e.effects)l.is(il.reconfigure)?(t&&(s=new Map,t.compartments.forEach((a,h)=>s.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(B.reconfigure)?(t=null,i=l.value):l.is(B.appendConfig)&&(t=null,i=ts(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=oo.resolve(i,s,this),r=new L(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(Va)?e.newSelection:e.newSelection.asSingle();new L(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e==\"string\"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:S.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=ts(i.effects);for(let l=1;l<t.ranges.length;l++){let a=e(t.ranges[l]),h=this.changes(a.changes),c=h.map(s);for(let u=0;u<l;u++)r[u]=r[u].map(c);let f=s.mapDesc(h,!0);r.push(a.range.map(f)),s=s.compose(c),o=B.mapEffects(o,c).concat(B.mapEffects(ts(a.effects),f))}return{changes:s,selection:S.create(r,t.mainIndex),effects:o}}changes(e=[]){return e instanceof he?e:he.of(e,this.doc.length,this.facet(L.lineSeparator))}toText(e){return Z.of(e.split(this.facet(L.lineSeparator)||Ba))}sliceDoc(e=0,t=this.doc.length){return this.doc.sliceString(e,t,this.lineBreak)}facet(e){let t=this.config.address[e.id];return t==null?e.default:(cn(this,t),lo(this,t))}toJSON(e){let t={doc:this.sliceDoc(),selection:this.selection.toJSON()};if(e)for(let i in e){let s=e[i];s instanceof Se&&this.config.address[s.id]!=null&&(t[i]=s.spec.toJSON(this.field(e[i]),this))}return t}static fromJSON(e,t={},i){if(!e||typeof e.doc!=\"string\")throw new RangeError(\"Invalid JSON representation for EditorState\");let s=[];if(i){for(let r in i)if(Object.prototype.hasOwnProperty.call(e,r)){let o=i[r],l=e[r];s.push(o.init(a=>o.spec.fromJSON(l,a)))}}return L.create({doc:e.doc,selection:S.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=oo.resolve(e.extensions||[],new Map),i=e.doc instanceof Z?e.doc:Z.of((e.doc||\"\").split(t.staticFacet(L.lineSeparator)||Ba)),s=e.selection?e.selection instanceof S?e.selection:S.single(e.selection.anchor,e.selection.head):S.single(0);return $g(s,i.length),t.staticFacet(Va)||(s=s.asSingle()),new L(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(L.tabSize)}get lineBreak(){return this.facet(L.lineSeparator)||`\n`}get readOnly(){return this.facet(Dg)}phrase(e,...t){for(let i of this.facet(L.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\\$(\\$|\\d*)/g,(i,s)=>{if(s==\"$\")return\"$\";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(Cg))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){let t=this.languageDataAt(\"wordChars\",e);return BS(t.length?t[0]:\"\")}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=_(t,o,!1);if(r(t.slice(a,o))!=oe.Word)break;o=a}for(;l<s;){let a=_(t,l);if(r(t.slice(l,a))!=oe.Word)break;l=a}return o==l?null:S.range(o+i,l+i)}}L.allowMultipleSelections=Va;L.tabSize=k.define({combine:n=>n.length?n[0]:4});L.lineSeparator=Tg;L.readOnly=Dg;L.phrases=k.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});L.languageData=Cg;L.changeFilter=Mg;L.transactionFilter=Ag;L.transactionExtender=Rg;il.reconfigure=B.define();function _t(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error(\"Config merge conflict for field \"+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}class Ve{eq(e){return this==e}range(e,t=e){return Ia.create(e,t,this)}}Ve.prototype.startSide=Ve.prototype.endSide=0;Ve.prototype.point=!1;Ve.prototype.mapMode=te.TrackDel;function vc(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}let Ia=class Xg{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new Xg(e,t,i)}};function _a(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class $c{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);r<o;r++)if(s(this.from[r]+e,this.to[r]+e,this.value[r])===!1)return!1}map(e,t){let i=[],s=[],r=[],o=-1,l=-1;for(let a=0;a<this.value.length;a++){let h=this.value[a],c=this.from[a]+e,f=this.to[a]+e,u,d;if(c==f){let p=t.mapPos(c,h.startSide,h.mapMode);if(p==null||(u=d=p,h.startSide!=h.endSide&&(d=t.mapPos(c,h.endSide),d<u)))continue}else if(u=t.mapPos(c,h.startSide),d=t.mapPos(f,h.endSide),u>d||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new $c(s,r,i,l):null,pos:o}}}class M{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new M(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(_a)),this.isEmpty)return t.length?M.of(t):this;let l=new Lg(this,null,-1).goto(0),a=0,h=[],c=new ai;for(;l.value||a<t.length;)if(a<t.length&&(l.from-t[a].from||l.startSide-t[a].value.startSide)>=0){let f=t[a++];c.addInner(f.from,f.to,f.value)||h.push(f)}else l.rangeIndex==1&&l.chunkIndex<this.chunk.length&&(a==t.length||this.chunkEnd(l.chunkIndex)<t[a].from)&&(!o||s>this.chunkEnd(l.chunkIndex)||r<this.chunkPos[l.chunkIndex])&&c.addChunk(this.chunkPos[l.chunkIndex],this.chunk[l.chunkIndex])?l.nextChunk():((!o||s>l.to||r<l.from||o(l.from,l.to,l.value))&&(c.addInner(l.from,l.to,l.value)||h.push(Ia.create(l.from,l.to,l.value))),l.next());return c.finishInner(this.nextLayer.isEmpty&&!h.length?M.empty:this.nextLayer.update({add:h,filter:o,filterFrom:s,filterTo:r}))}map(e){if(e.empty||this.isEmpty)return this;let t=[],i=[],s=-1;for(let o=0;o<this.chunk.length;o++){let l=this.chunkPos[o],a=this.chunk[o],h=e.touchesRange(l,l+a.length);if(h===!1)s=Math.max(s,a.maxPoint),t.push(a),i.push(e.mapPos(l));else if(h===!0){let{mapped:c,pos:f}=a.map(l,e);c&&(s=Math.max(s,c.maxPoint),t.push(c),i.push(f))}}let r=this.nextLayer.map(e);return t.length==0?r:new M(i,t,r||M.empty,s)}between(e,t,i){if(!this.isEmpty){for(let s=0;s<this.chunk.length;s++){let r=this.chunkPos[s],o=this.chunk[s];if(t>=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return wn.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return wn.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),a=zf(o,l,i),h=new Is(o,a,r),c=new Is(l,a,r);i.iterGaps((f,u,d)=>qf(h,f,c,u,d,s)),i.empty&&i.length==0&&qf(h,0,c,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(c=>!c.isEmpty&&t.indexOf(c)<0),o=t.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=zf(r,o),a=new Is(r,l,0).goto(i),h=new Is(o,l,0).goto(i);for(;;){if(a.to!=h.to||!Ya(a.active,h.active)||a.point&&(!h.point||!vc(a.point,h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(e,t,i,s,r=-1){let o=new Is(e,null,r).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let c=o.activeForPoint(o.to),f=o.pointFrom<t?c.length+1:o.point.startSide<0?c.length:Math.min(c.length,a);s.point(l,h,o.point,c,f,o.pointRank),a=Math.min(o.openEnd(h),c.length)}else h>l&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new ai;for(let s of e instanceof Ia?[e]:t?XS(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return M.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=M.empty;s=s.nextLayer)t=new M(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}}M.empty=new M([],[],null,-1);function XS(n){if(n.length>1)for(let e=n[0],t=1;t<n.length;t++){let i=n[t];if(_a(e,i)>0)return n.slice().sort(_a);e=i}return n}M.empty.nextLayer=M.empty;class ai{finishChunk(e){this.chunks.push(new $c(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new ai)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(M.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=M.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function zf(n,e,t){let i=new Map;for(let r of n)for(let o=0;o<r.chunk.length;o++)r.chunk[o].maxPoint<=0&&i.set(r.chunk[o],r.chunkPos[o]);let s=new Set;for(let r of e)for(let o=0;o<r.chunk.length;o++){let l=i.get(r.chunk[o]);l!=null&&(t?t.mapPos(l):l)==r.chunkPos[o]&&!t?.touchesRange(l,l+r.chunk[o].length)&&s.add(r.chunk[o])}return s}class Lg{constructor(e,t,i,s=0){this.layer=e,this.skip=t,this.minPoint=i,this.rank=s}get startSide(){return this.value?this.value.startSide:0}get endSide(){return this.value?this.value.endSide:0}goto(e,t=-1e9){return this.chunkIndex=this.rangeIndex=0,this.gotoInner(e,t,!1),this}gotoInner(e,t,i){for(;this.chunkIndex<this.layer.chunk.length;){let s=this.layer.chunk[this.chunkIndex];if(!(this.skip&&this.skip.has(s)||this.layer.chunkEnd(this.chunkIndex)<e||s.maxPoint<this.minPoint))break;this.chunkIndex++,i=!1}if(this.chunkIndex<this.layer.chunk.length){let s=this.layer.chunk[this.chunkIndex].findIndex(e-this.layer.chunkPos[this.chunkIndex],t,!0);(!i||this.rangeIndex<s)&&this.setRangeIndex(s)}this.next()}forward(e,t){(this.to-e||this.endSide-t)<0&&this.gotoInner(e,t,!0)}next(){for(;;)if(this.chunkIndex==this.layer.chunk.length){this.from=this.to=1e9,this.value=null;break}else{let e=this.layer.chunkPos[this.chunkIndex],t=this.layer.chunk[this.chunkIndex],i=e+t.from[this.rangeIndex];if(this.from=i,this.to=e+t.to[this.rangeIndex],this.value=t.value[this.rangeIndex],this.setRangeIndex(this.rangeIndex+1),this.minPoint<0||this.value.point&&this.to-this.from>=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex<this.layer.chunk.length&&this.skip.has(this.layer.chunk[this.chunkIndex]);)this.chunkIndex++;this.rangeIndex=0}else this.rangeIndex=e}nextChunk(){this.chunkIndex++,this.rangeIndex=0,this.next()}compare(e){return this.from-e.from||this.startSide-e.startSide||this.rank-e.rank||this.to-e.to||this.endSide-e.endSide}}class wn{constructor(e){this.heap=e}static from(e,t=null,i=-1){let s=[];for(let r=0;r<e.length;r++)for(let o=e[r];!o.isEmpty;o=o.nextLayer)o.maxPoint>=i&&s.push(new Lg(o,t,i,r));return s.length==1?s[0]:new wn(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Dl(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Dl(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Dl(this.heap,0)}}}function Dl(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1<n.length&&s.compare(n[i+1])>=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}class Is{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=wn.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){sr(this.active,e),sr(this.activeTo,e),sr(this.activeRank,e),this.minActive=If(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t<this.activeRank.length&&(r-this.activeRank[t]||s-this.activeTo[t])>0;)t++;nr(this.active,t,i),nr(this.activeTo,t,s),nr(this.activeRank,t,r),e&&nr(e,t,this.cursor.from),this.minActive=If(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&sr(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from<this.cursor.to)this.cursor.next();else{this.point=r,this.pointFrom=this.cursor.from,this.pointRank=this.cursor.rank,this.to=this.cursor.to,this.endSide=r.endSide,this.cursor.next(),this.forward(this.to,this.endSide);break}}else{this.to=this.endSide=1e9;break}}if(i){this.openStart=0;for(let s=i.length-1;s>=0&&i[s]<e;s--)this.openStart++}}activeForPoint(e){if(!this.active.length)return this.active;let t=[];for(let i=this.active.length-1;i>=0&&!(this.activeRank[i]<this.pointRank);i--)(this.activeTo[i]>e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function qf(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,l=i,a=i-e,h=!!r.boundChange;for(let c=!1;;){let f=n.to+a-t.to,u=f||n.endSide-t.endSide,d=u<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&vc(n.point,t.point)&&Ya(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(l,p,n.point,t.point),c=!1):(c&&r.boundChange(l),p>l&&!Ya(n.active,t.active)&&r.compareRange(l,p,n.active,t.active),h&&p<o&&(f||n.openEnd(d)!=t.openEnd(d))&&(c=!0)),d>o)break;l=d,u<=0&&n.next(),u>=0&&t.next()}}function Ya(n,e){if(n.length!=e.length)return!1;for(let t=0;t<n.length;t++)if(n[t]!=e[t]&&!vc(n[t],e[t]))return!1;return!0}function sr(n,e){for(let t=e,i=n.length-1;t<i;t++)n[t]=n[t+1];n.pop()}function nr(n,e,t){for(let i=n.length-1;i>=e;i--)n[i+1]=n[i];n[e]=t}function If(n,e){let t=-1,i=1e9;for(let s=0;s<e.length;s++)(e[s]-i||n[s].endSide-n[t].endSide)<0&&(t=s,i=e[s]);return t}function Ls(n,e,t=n.length){let i=0;for(let s=0;s<t&&s<n.length;)n.charCodeAt(s)==9?(i+=e-i%e,s++):(i++,s=_(n,s));return i}function kn(n,e,t,i){for(let s=0,r=0;;){if(r>=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=_(n,s)}return i===!0?-1:n.length}const Na=\"ͼ\",_f=typeof Symbol>\"u\"?\"__\"+Na:Symbol.for(Na),ja=typeof Symbol>\"u\"?\"__styleSet\"+Math.floor(Math.random()*1e8):Symbol(\"styleSet\"),Yf=typeof globalThis<\"u\"?globalThis:typeof window<\"u\"?window:{};class me{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\\s*/)}function r(o,l,a,h){let c=[],f=/^@(\\w+)\\b/.exec(o[0]),u=f&&f[1]==\"keyframes\";if(f&&l==null)return a.push(o[0]+\";\");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\\s*/).map(g=>o.map(m=>g.replace(/&/,m))).reduce((g,m)=>g.concat(m)),p,a);else if(p&&typeof p==\"object\"){if(!f)throw new RangeError(\"The value of a property (\"+d+\") should be a primitive value.\");r(s(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,\"\").replace(/[A-Z]/g,g=>\"-\"+g.toLowerCase())+\": \"+p+\";\")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(\", \")+\" {\"+c.join(\" \")+\"}\")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(`\n`)}static newName(){let e=Yf[_f]||1;return Yf[_f]=e+1,Na+e.toString(36)}static mount(e,t,i){let s=e[ja],r=i&&i.nonce;s?r&&s.setNonce(r):s=new LS(e,r),s.mount(Array.isArray(t)?t:[t],e)}}let Nf=new Map;class LS{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=Nf.get(i);if(r)return e[ja]=r;this.sheet=new s.CSSStyleSheet,Nf.set(i,this)}else this.styleTag=i.createElement(\"style\"),t&&this.styleTag.setAttribute(\"nonce\",t);this.modules=[],e[ja]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o<e.length;o++){let l=e[o],a=this.modules.indexOf(l);if(a<r&&a>-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;h<l.rules.length;h++)i.insertRule(l.rules[h],s++)}else{for(;r<a;)s+=this.modules[r++].rules.length;s+=l.rules.length,r++}}if(i)t.adoptedStyleSheets.indexOf(this.sheet)<0&&(t.adoptedStyleSheets=[this.sheet,...t.adoptedStyleSheets]);else{let o=\"\";for(let a=0;a<this.modules.length;a++)o+=this.modules[a].getRules()+`\n`;this.styleTag.textContent=o;let l=t.head||t;this.styleTag.parentNode!=l&&l.insertBefore(this.styleTag,l.firstChild)}}setNonce(e){this.styleTag&&this.styleTag.getAttribute(\"nonce\")!=e&&this.styleTag.setAttribute(\"nonce\",e)}}function H(){var n=arguments[0];typeof n==\"string\"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t==\"object\"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s==\"string\"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;e<arguments.length;e++)Eg(n,arguments[e]);return n}function Eg(n,e){if(typeof e==\"string\")n.appendChild(document.createTextNode(e));else if(e!=null)if(e.nodeType!=null)n.appendChild(e);else if(Array.isArray(e))for(var t=0;t<e.length;t++)Eg(n,e[t]);else throw new RangeError(\"Unsupported child node: \"+e)}let Ce=typeof navigator<\"u\"?navigator:{userAgent:\"\",vendor:\"\",platform:\"\"},Ga=typeof document<\"u\"?document:{documentElement:{style:{}}};const Ha=/Edge\\/(\\d+)/.exec(Ce.userAgent),Wg=/MSIE \\d/.test(Ce.userAgent),Fa=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(Ce.userAgent),sl=!!(Wg||Fa||Ha),jf=!sl&&/gecko\\/(\\d+)/i.test(Ce.userAgent),Zl=!sl&&/Chrome\\/(\\d+)/.exec(Ce.userAgent),ES=\"webkitFontSmoothing\"in Ga.documentElement.style,Ua=!sl&&/Apple Computer/.test(Ce.vendor),Gf=Ua&&(/Mobile\\/\\w+/.test(Ce.userAgent)||Ce.maxTouchPoints>2);var C={mac:Gf||/Mac/.test(Ce.platform),windows:/Win/.test(Ce.platform),linux:/Linux|X11/.test(Ce.platform),ie:sl,ie_version:Wg?Ga.documentMode||6:Fa?+Fa[1]:Ha?+Ha[1]:0,gecko:jf,gecko_version:jf?+(/Firefox\\/(\\d+)/.exec(Ce.userAgent)||[0,0])[1]:0,chrome:!!Zl,chrome_version:Zl?+Zl[1]:0,ios:Gf,android:/Android\\b/.test(Ce.userAgent),webkit_version:ES?+(/\\bAppleWebKit\\/(\\d+)/.exec(Ce.userAgent)||[0,0])[1]:0,safari:Ua,safari_version:Ua?+(/\\bVersion\\/(\\d+(\\.\\d+)?)/.exec(Ce.userAgent)||[0,0])[1]:0,tabSize:Ga.documentElement.style.tabSize!=null?\"tab-size\":\"-moz-tab-size\"};function Pc(n,e){for(let t in n)t==\"class\"&&e.class?e.class+=\" \"+n.class:t==\"style\"&&e.style?e.style+=\";\"+n.style:e[t]=n[t];return e}const ao=Object.create(null);function Cc(n,e,t){if(n==e)return!0;n||(n=ao),e||(e=ao);let i=Object.keys(n),s=Object.keys(e);if(i.length-0!=s.length-0)return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function WS(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t==\"style\"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function Hf(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s==\"style\"?n.style.cssText=\"\":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s==\"style\"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function VS(n){let e=Object.create(null);for(let t=0;t<n.attributes.length;t++){let i=n.attributes[t];e[i.name]=i.value}return e}let Yt=class{eq(e){return!1}updateDOM(e,t){return!1}compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}get estimatedHeight(){return-1}get lineBreaks(){return 0}ignoreEvent(e){return!0}coordsAt(e,t,i){return null}get isHidden(){return!1}get editable(){return!1}destroy(e){}};var ke=(function(n){return n[n.Text=0]=\"Text\",n[n.WidgetBefore=1]=\"WidgetBefore\",n[n.WidgetAfter=2]=\"WidgetAfter\",n[n.WidgetRange=3]=\"WidgetRange\",n})(ke||(ke={}));let E=class extends Ve{constructor(e,t,i,s){super(),this.startSide=e,this.endSide=t,this.widget=i,this.spec=s}get heightRelevant(){return!1}static mark(e){return new Tc(e)}static widget(e){let t=Math.max(-1e4,Math.min(1e4,e.side||0)),i=!!e.block;return t+=i&&!e.inlineOrder?t>0?3e8:-4e8:t>0?1e8:-1e8,new Qn(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=Ig(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new Qn(e,i,s,t,e.widget||null,!0)}static line(e){return new Mc(e)}static set(e,t=!1){return M.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};E.none=M.empty;let Tc=class Vg extends E{constructor(e){let{start:t,end:i}=Ig(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||\"span\",this.attrs=e.class&&e.attributes?Pc(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||ao}eq(e){return this==e||e instanceof Vg&&this.tagName==e.tagName&&Cc(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError(\"Mark decorations may not be empty\");return super.range(e,t)}};Tc.prototype.point=!1;let Mc=class zg extends E{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof zg&&this.spec.class==e.spec.class&&Cc(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError(\"Line decoration ranges must be zero-length\");return super.range(e,t)}};Mc.prototype.mapMode=te.TrackBefore;Mc.prototype.point=!0;let Qn=class qg extends E{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?te.TrackBefore:te.TrackAfter:te.TrackDel}get type(){return this.startSide!=this.endSide?ke.WidgetRange:this.startSide<=0?ke.WidgetBefore:ke.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof qg&&zS(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError(\"Invalid range for replacement decoration\");if(!this.isReplace&&t!=e)throw new RangeError(\"Widget decorations can only have zero-length ranges\");return super.range(e,t)}};Qn.prototype.point=!0;function Ig(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function zS(n,e){return n==e||!!(n&&e&&n.compare(e))}function is(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}let Ff=class Ka extends Ve{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof Ka&&this.tagName==e.tagName&&Cc(this.attributes,e.attributes)}static create(e){return new Ka(e.tagName,e.attributes||ao)}static set(e,t=!1){return M.of(e,t)}};Ff.prototype.startSide=Ff.prototype.endSide=-1;function bs(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Ja(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function fn(n,e){if(!e.anchorNode)return!1;try{return Ja(n,e.anchorNode)}catch{return!1}}function Ir(n){return n.nodeType==3?vn(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function un(n,e,t,i){return t?Uf(n,e,t,i,-1)||Uf(n,e,t,i,1):!1}function wi(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function ho(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(n.nodeName)}function Uf(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:hi(n))){if(n.nodeName==\"DIV\")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=wi(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable==\"false\")return!1;e=s<0?hi(n):0}else return!1}}function hi(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function co(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function qS(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function _g(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function IS(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,g=1;if(d)u=qS(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let y=c.getBoundingClientRect();({scaleX:p,scaleY:g}=_g(c,y)),u={left:y.left,right:y.left+c.clientWidth*p,top:y.top,bottom:y.top+c.clientHeight*g}}let m=0,O=0;if(s==\"nearest\")e.top<u.top?(O=e.top-(u.top+o),t>0&&e.bottom>u.bottom+O&&(O=e.bottom-u.bottom+o)):e.bottom>u.bottom&&(O=e.bottom-u.bottom+o,t<0&&e.top-O<u.top&&(O=e.top-(u.top+o)));else{let y=e.bottom-e.top,x=u.bottom-u.top;O=(s==\"center\"&&y<=x?e.top+y/2-x/2:s==\"start\"||s==\"center\"&&t<0?e.top-o:e.bottom-x+o)-u.top}if(i==\"nearest\"?e.left<u.left?(m=e.left-(u.left+r),t>0&&e.right>u.right+m&&(m=e.right-u.right+r)):e.right>u.right&&(m=e.right-u.right+r,t<0&&e.left<u.left+m&&(m=e.left-(u.left+r))):m=(i==\"center\"?e.left+(e.right-e.left)/2-(u.right-u.left)/2:i==\"start\"==l?e.left-r:e.right-(u.right-u.left)+r)-u.left,m||O)if(d)h.scrollBy(m,O);else{let y=0,x=0;if(O){let v=c.scrollTop;c.scrollTop+=O/g,x=(c.scrollTop-v)*g}if(m){let v=c.scrollLeft;c.scrollLeft+=m/p,y=(c.scrollLeft-v)*p}e={left:e.left-y,top:e.top-x,right:e.right-y,bottom:e.bottom-x},y&&Math.abs(y-m)<1&&(i=\"nearest\"),x&&Math.abs(x-O)<1&&(s=\"nearest\")}if(d)break;(e.top<u.top||e.bottom>u.bottom||e.left<u.left||e.right>u.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function _S(n){let e=n.ownerDocument,t,i;for(let s=n.parentNode;s&&!(s==e.body||t&&i);)if(s.nodeType==1)!i&&s.scrollHeight>s.clientHeight&&(i=s),!t&&s.scrollWidth>s.clientWidth&&(t=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:t,y:i}}let YS=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?hi(t):0),i,Math.min(e.focusOffset,i?hi(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}},Ai=null;C.safari&&C.safari_version>=26&&(Ai=!1);function Yg(n){if(n.setActive)return n.setActive();if(Ai)return n.focus(Ai);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(Ai==null?{get preventScroll(){return Ai={preventScroll:!0},!0}}:void 0),!Ai){Ai=!1;for(let t=0;t<e.length;){let i=e[t++],s=e[t++],r=e[t++];i.scrollTop!=s&&(i.scrollTop=s),i.scrollLeft!=r&&(i.scrollLeft=r)}}}let Kf;function vn(n,e,t=e){let i=Kf||(Kf=document.createRange());return i.setEnd(n,t),i.setStart(n,e),i}function ss(n,e,t,i){let s={key:e,code:e,keyCode:t,which:t,cancelable:!0};i&&({altKey:s.altKey,ctrlKey:s.ctrlKey,shiftKey:s.shiftKey,metaKey:s.metaKey}=i);let r=new KeyboardEvent(\"keydown\",s);r.synthetic=!0,n.dispatchEvent(r);let o=new KeyboardEvent(\"keyup\",s);return o.synthetic=!0,n.dispatchEvent(o),r.defaultPrevented||o.defaultPrevented}function NS(n){for(;n;){if(n&&(n.nodeType==9||n.nodeType==11&&n.host))return n;n=n.assignedSlot||n.parentNode}return null}function jS(n,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(i=Math.min(i,hi(t));;)if(i){if(t.nodeType!=1)return!1;let s=t.childNodes[i-1];s.contentEditable==\"false\"?i--:(t=s,i=hi(t))}else{if(t==n)return!0;i=wi(t),t=t.parentNode}}function Ng(n){return n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function jg(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable==\"false\")return null;t=t.childNodes[i-1],i=hi(t)}else if(t.parentNode&&!ho(t))i=wi(t),t=t.parentNode;else return null}}function Gg(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i<t.nodeValue.length)return{node:t,offset:i};if(t.nodeType==1&&i<t.childNodes.length){if(t.contentEditable==\"false\")return null;t=t.childNodes[i],i=0}else if(t.parentNode&&!ho(t))i=wi(t)+1,t=t.parentNode;else return null}}let bi=class eh{constructor(e,t,i=!0){this.node=e,this.offset=t,this.precise=i}static before(e,t){return new eh(e.parentNode,wi(e),t)}static after(e,t){return new eh(e.parentNode,wi(e)+1,t)}};var le=(function(n){return n[n.LTR=0]=\"LTR\",n[n.RTL=1]=\"RTL\",n})(le||(le={}));const Vi=le.LTR,Ac=le.RTL;function Hg(n){let e=[];for(let t=0;t<n.length;t++)e.push(1<<+n[t]);return e}const GS=Hg(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\"),HS=Hg(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\"),th=Object.create(null),Pt=[];for(let n of[\"()\",\"[]\",\"{}\"]){let e=n.charCodeAt(0),t=n.charCodeAt(1);th[e]=t,th[t]=-e}function Fg(n){return n<=247?GS[n]:1424<=n&&n<=1524?2:1536<=n&&n<=1785?HS[n-1536]:1774<=n&&n<=2220?4:8192<=n&&n<=8204?256:64336<=n&&n<=65023?4:1}const FS=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;let ei=class{get dir(){return this.level%2?Ac:Vi}constructor(e,t,i){this.from=e,this.to=t,this.level=i}side(e,t){return this.dir==t==e?this.to:this.from}forward(e,t){return e==(this.dir==t)}static find(e,t,i,s){let r=-1;for(let o=0;o<e.length;o++){let l=e[o];if(l.from<=t&&l.to>=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.from<t:l.to>t:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError(\"Index out of range\");return r}};function Ug(n,e){if(n.length!=e.length)return!1;for(let t=0;t<n.length;t++){let i=n[t],s=e[t];if(i.from!=s.from||i.to!=s.to||i.direction!=s.direction||!Ug(i.inner,s.inner))return!1}return!0}const U=[];function US(n,e,t,i,s){for(let r=0;r<=i.length;r++){let o=r?i[r-1].to:e,l=r<i.length?i[r].from:t,a=r?256:s;for(let h=o,c=a,f=a;h<l;h++){let u=Fg(n.charCodeAt(h));u==512?u=c:u==8&&f==4&&(u=16),U[h]=u==4?2:u,u&7&&(f=u),c=u}for(let h=o,c=a,f=a;h<l;h++){let u=U[h];if(u==128)h<l-1&&c==U[h+1]&&c&24?u=U[h]=c:U[h]=256;else if(u==64){let d=h+1;for(;d<l&&U[d]==64;)d++;let p=h&&c==8||d<t&&U[d]==8?f==1?1:8:256;for(let g=h;g<d;g++)U[g]=p;h=d-1}else u==8&&f==1&&(U[h]=1);c=u,u&7&&(f=u)}}}function KS(n,e,t,i,s){let r=s==1?2:1;for(let o=0,l=0,a=0;o<=i.length;o++){let h=o?i[o-1].to:e,c=o<i.length?i[o].from:t;for(let f=h,u,d,p;f<c;f++)if(d=th[u=n.charCodeAt(f)])if(d<0){for(let g=l-3;g>=0;g-=3)if(Pt[g+1]==-d){let m=Pt[g+2],O=m&2?s:m&4?m&1?r:s:0;O&&(U[f]=U[Pt[g]]=O),l=g;break}}else{if(Pt.length==189)break;Pt[l++]=f,Pt[l++]=u,Pt[l++]=a}else if((p=U[f])==2||p==1){let g=p==s;a=g?0:1;for(let m=l-3;m>=0;m-=3){let O=Pt[m+2];if(O&2)break;if(g)Pt[m+2]|=2;else{if(O&4)break;Pt[m+2]|=4}}}}}function JS(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=s<t.length?t[s].from:e;for(let a=o;a<l;){let h=U[a];if(h==256){let c=a+1;for(;;)if(c==l){if(s==t.length)break;c=t[s++].to,l=s<t.length?t[s].from:e}else if(U[c]==256)c++;else break;let f=r==1,u=(c<e?U[c]:i)==1,d=f==u?f?1:2:i;for(let p=c,g=s,m=g?t[g-1].to:n;p>a;)p==m&&(p=t[--g].from,m=g?t[g-1].to:n),U[--p]=d;a=c}else r=h,a++}}}function ih(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;a<t;){let c=!0,f=!1;if(h==r.length||a<r[h].from){let g=U[a];g!=l&&(c=!1,f=g==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h<r.length&&p==r[h].from){if(f)break e;let g=r[h];if(!c)for(let m=g.to,O=h+1;;){if(m==t)break e;if(O<r.length&&r[O].from==m)m=r[O++].to;else{if(U[m]==l)break e;break}}if(h++,u)u.push(g);else{g.from>a&&o.push(new ei(a,g.from,d));let m=g.direction==Vi!=!(d%2);sh(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.to}p=g.to}else{if(p==t||(c?U[p]!=l:U[p]==l))break;p++}u?ih(n,a,p,i+1,s,u,o):a<p&&o.push(new ei(a,p,d)),a=p}else for(let a=t,h=r.length;a>e;){let c=!0,f=!1;if(!h||a>r[h-1].to){let g=U[a-1];g!=l&&(c=!1,f=g==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(f)break e;let g=r[--h];if(!c)for(let m=g.from,O=h;;){if(m==e)break e;if(O&&r[O-1].to==m)m=r[--O].from;else{if(U[m-1]==l)break e;break}}if(u)u.push(g);else{g.to<a&&o.push(new ei(g.to,a,d));let m=g.direction==Vi!=!(d%2);sh(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.from}p=g.from}else{if(p==e||(c?U[p-1]!=l:U[p-1]==l))break;p--}u?ih(n,p,a,i+1,s,u,o):p<a&&o.push(new ei(p,a,d)),a=p}}function sh(n,e,t,i,s,r,o){let l=e%2?2:1;US(n,s,r,i,l),KS(n,s,r,i,l),JS(s,r,i,l),ih(n,s,r,e,t,i,o)}function ey(n,e,t){if(!n)return[new ei(0,0,e==Ac?1:0)];if(e==Vi&&!t.length&&!FS.test(n))return Kg(n.length);if(t.length)for(;n.length>U.length;)U[U.length]=256;let i=[],s=e==Vi?0:1;return sh(n,s,s,t,0,n.length,i),i}function Kg(n){return[new ei(0,n,0)]}let Jg=\"\";function ty(n,e,t,i,s){var r;let o=i.head-n.from,l=ei.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let c=_(n.text,o,a.forward(s,t));(c<a.from||c>a.to)&&(c=h),Jg=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return f&&c==h&&f.level+(s?0:1)<a.level?S.cursor(f.side(!s,t)+n.from,f.forward(s,t)?1:-1,f.level):S.cursor(c+n.from,a.forward(s,t)?-1:1,a.level)}function iy(n,e,t){for(let i=e;i<t;i++){let s=Fg(n.charCodeAt(i));if(s==1)return Vi;if(s==2||s==4)return Ac}return Vi}const em=k.define(),tm=k.define(),im=k.define(),sm=k.define(),nh=k.define(),nm=k.define(),rm=k.define(),Rc=k.define(),Dc=k.define(),om=k.define({combine:n=>n.some(e=>e)}),lm=k.define({combine:n=>n.some(e=>e)}),am=k.define();let Bl=class rh{constructor(e,t=\"nearest\",i=\"nearest\",s=5,r=5,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new rh(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new rh(S.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}};const rr=B.define({map:(n,e)=>n.map(e)}),hm=B.define();function Le(n,e,t){let i=n.facet(sm);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+\":\",e):console.error(e))}const Ht=k.define({combine:n=>n.length?n[0]:!0});let sy=0;const Hi=k.define({combine(n){return n.filter((e,t)=>{for(let i=0;i<t;i++)if(n[i].plugin==e.plugin)return!1;return!0})}});let Re=class oh{constructor(e,t,i,s,r){this.id=e,this.create=t,this.domEventHandlers=i,this.domEventObservers=s,this.baseExtensions=r(this),this.extension=this.baseExtensions.concat(Hi.of({plugin:this,arg:void 0}))}of(e){return this.baseExtensions.concat(Hi.of({plugin:this,arg:e}))}static define(e,t){const{eventHandlers:i,eventObservers:s,provide:r,decorations:o}=t||{};return new oh(sy++,e,i,s,l=>{let a=[];return o&&a.push(nl.of(h=>{let c=h.plugin(l);return c?o(c):E.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return oh.define((i,s)=>new e(i,s),t)}},Xl=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(Le(t.state,i,\"CodeMirror plugin crashed\"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){Le(e.state,t,\"CodeMirror plugin crashed\"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){Le(e.state,i,\"CodeMirror plugin crashed\")}}deactivate(){this.spec=this.value=null}};const cm=k.define(),Zc=k.define(),nl=k.define(),fm=k.define(),Bc=k.define(),In=k.define(),um=k.define();function Jf(n,e){let t=n.state.facet(um);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return M.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,c=o-e.from,f=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=iy(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let g={from:h,to:c,direction:d,inner:[]};f.push(g),f=g.inner}}}}),s}const dm=k.define();function Xc(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(dm)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}const Hs=k.define();let ti=class lh{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new lh(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toA<i.fromA)break;i=i.join(s),e.splice(t-1,1)}}return e.splice(t,0,i),e}static extendWithRanges(e,t){if(t.length==0)return e;let i=[];for(let s=0,r=0,o=0;;){let l=s<e.length?e[s].fromB:1e9,a=r<t.length?t[r]:1e9,h=Math.min(l,a);if(h==1e9)break;let c=h+o,f=h,u=c;for(;;)if(r<t.length&&t[r]<=f){let d=t[r+1];r+=2,f=Math.max(f,d);for(let p=s;p<e.length&&e[p].fromB<=f;p++)o=e[p].toA-e[p].toB;u=Math.max(u,d+o)}else if(s<e.length&&e[s].fromB<=f){let d=e[s++];f=Math.max(f,d.toB),u=Math.max(u,d.toA),o=d.toA-d.toB}else break;i.push(new lh(c,u,h,f))}return i}},eu=class pm{constructor(e,t,i){this.view=e,this.state=t,this.transactions=i,this.flags=0,this.startState=e.state,this.changes=he.empty(this.startState.doc.length);for(let r of i)this.changes=this.changes.compose(r.changes);let s=[];this.changes.iterChangedRanges((r,o,l,a)=>s.push(new ti(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new pm(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}};const ny=[];let de=class{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return ny}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&WS(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:\"\")+(this.breakAfter?\"#\":\"\")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError(\"Invalid child in posBefore\")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=wi(this.dom),s=this.length?e>0:t>0;return new bi(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof ol)return e;return null}static get(e){return e.cmTile}},rl=class extends de{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==t)for(;s&&s!=l.dom;)s=tu(s);else t.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=tu(s);this.length=o}};function tu(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}let ol=class extends rl{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=de.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof ns)t.push(s),i=o,s=0;else{let l=r+o.length,a=e(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(a<e||e==h&&(t<-1?l.length:l.covers(1)))&&(!i||!l.isWidget()&&i.isWidget())&&(i=l,s=e-a),(h>e||e==a&&(t>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=e-a)}}),!i&&!r)throw new Error(\"No tile at position \"+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}},ns=class gm extends rl{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new gm(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},fo=class mm extends rl{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new mm(t||document.createElement(\"div\"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,l=-1;function a(c,f){for(let u=0,d=0;u<c.children.length&&d<=f;u++){let p=c.children[u],g=d+p.length;g>=f&&(p.isComposite()?a(p,f-d):(!o||o.isHidden&&(t>0||i&&oy(o,p)))&&(g>f||p.flags&32)?(o=p,l=f-d):(d<f||p.flags&16&&!p.isHidden)&&(s=p,r=f-d)),d=g}}a(this,e);let h=(t<0?s:o)||s||o;return h?{tile:h,offset:h==s?r:l}:null}coordsIn(e,t){let i=this.resolveInline(e,t,!0);return i?i.tile.coordsIn(Math.max(0,i.offset),t):ry(this)}domIn(e,t){let i=this.resolveInline(e,t);if(i){let{tile:s,offset:r}=i;if(this.dom.contains(s.dom))return s.isText()?new bi(s.dom,Math.min(s.dom.nodeValue.length,r)):s.domPosFor(r,s.flags&16?1:s.flags&32?-1:t);let o=i.tile.parent,l=!1;for(let a of o.children){if(l)return new bi(a.dom,0);a==i.tile&&(l=!0)}}return new bi(this.dom,0)}};function ry(n){let e=n.dom.lastChild;if(!e)return n.dom.getBoundingClientRect();let t=Ir(e);return t[t.length-1]||null}function oy(n,e){let t=n.coordsIn(0,1),i=e.coordsIn(0,1);return t&&i&&i.top<t.bottom}let Ke=class Om extends rl{constructor(e,t){super(e),this.mark=t}get domAttrs(){return this.mark.attrs}static of(e,t){let i=new Om(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},Fs=class bm extends de{constructor(e,t){super(e,t.length),this.text=t}sync(e){this.flags&2||(super.sync(e),this.dom.nodeValue!=this.text&&(e&&e.node==this.dom&&(e.written=!0),this.dom.nodeValue=this.text))}isText(){return!0}toString(){return JSON.stringify(this.text)}coordsIn(e,t){let i=this.dom.nodeValue.length;e>i&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?C.chrome||C.gecko||(e?(s--,o=1):r<i&&(r++,o=-1)):t<0?s--:r<i&&r++;let l=vn(this.dom,s,r).getClientRects();if(!l.length)return null;let a=l[(o?o<0:t>=0)?0:l.length-1];return C.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?co(a,o<0):a||null}static of(e,t){let i=new bm(t||document.createTextNode(e),e);return t||(i.flags|=2),i}},$n=class Sm extends de{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return co(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?r.length-1:0;o=r[a],!(e>0?a==0:a==r.length-1||o.top<o.bottom);a+=l?-1:1);return co(o,!l)}}get overrideDOMText(){if(!this.length)return Z.empty;let{root:e}=this;if(!e)return Z.empty;let t=this.posAtStart;return e.view.state.doc.slice(t,t+this.length)}destroy(){super.destroy(),this.widget.destroy(this.dom)}static of(e,t,i,s,r){return r||(r=e.toDOM(t),e.editable||(r.contentEditable=\"false\")),new Sm(r,i,e,s)}},uo=class extends de{constructor(e){let t=document.createElement(\"img\");t.className=\"cm-widgetBuffer\",t.setAttribute(\"aria-hidden\",\"true\"),super(t,0,e)}get isHidden(){return!0}get overrideDOMText(){return Z.empty}coordsIn(e){return this.dom.getBoundingClientRect()}},ly=class{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,i){let{tile:s,index:r,beforeBreak:o,parents:l}=this;for(;e||t>0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(t>0?a.length<=e:a.length<e)&&(!i||i.skip(a,0,a.length)!==!1||!a.isComposite)?(o=!!h,r++,e-=a.length):(l.push({tile:s,index:r}),s=a,r=0,i&&a.isComposite()&&i.enter(a))}else if(r==s.length)o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++;else if(e){let a=Math.min(e,s.length-r);i&&i.skip(s,r,r+a),e-=a,r+=a}else break;return this.tile=s,this.index=r,this.beforeBreak=o,this}get root(){return this.parents.length?this.parents[0].tile:this.tile}},ay=class{constructor(e,t,i,s){this.from=e,this.to=t,this.wrapper=i,this.rank=s}},hy=class{constructor(e,t,i){this.cache=e,this.root=t,this.blockWrappers=i,this.curLine=null,this.lastBlock=null,this.afterWidget=null,this.pos=0,this.wrappers=[],this.wrapperPos=0}addText(e,t,i,s){var r;this.flushBuffer();let o=this.ensureMarks(t,i),l=o.lastChild;if(l&&l.isText()&&!(l.flags&8)&&l.length+e.length<512){this.cache.reused.set(l,2);let a=o.children[o.children.length-1]=new Fs(l.dom,l.text+e);a.parent=o}else o.append(s||Fs.of(e,(r=this.cache.find(Fs))===null||r===void 0?void 0:r.dom));this.pos+=e.length,this.afterWidget=null}addComposition(e,t){let i=this.curLine;i.dom!=t.line.dom&&(i.setDOM(this.cache.reused.has(t.line)?Ll(t.line.dom):t.line.dom),this.cache.reused.set(t.line,2));let s=i;for(let l=t.marks.length-1;l>=0;l--){let a=t.marks[l],h=s.lastChild;if(h instanceof Ke&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(Ll(a.dom)),s=h;else{if(this.cache.reused.get(a)){let f=de.get(a.dom);f&&f.setDOM(Ll(a.dom))}let c=Ke.of(a.mark,a.dom);s.append(c),s=c}this.cache.reused.set(a,2)}let r=de.get(e.text);r&&this.cache.reused.set(r,2);let o=new Fs(e.text,e.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=ym);let s=fo.start(e,t||((i=this.cache.find(fo))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],l;if(t>0&&(l=s.lastChild)&&l instanceof Ke&&l.mark.eq(o))s=l,t--;else{let a=Ke.of(o,(i=this.cache.find(Ke,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!iu(this.curLine,!1)||e.dom.nodeName!=\"BR\"&&e.isWidget()&&!(C.ios&&iu(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(El,0,32)||new $n(El.toDOM(),0,El,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to<this.pos&&this.wrappers.splice(e,1);for(let e=this.blockWrappers;e.value&&e.from<=this.pos;e.next())if(e.to>=this.pos){let t=new ay(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.from<this.pos&&s instanceof ns&&s.wrapper.eq(i.wrapper))t=s;else{let r=ns.of(i.wrapper,(e=this.cache.find(ns,o=>o.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(uo,void 0,1);return i&&(i.flags=t),i||new uo(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},cy=class{constructor(e){this.skipCount=0,this.text=\"\",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text=\"\",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error(\"Ran out of text content when drawing inline views\");this.text=s;let l=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}};const po=[$n,fo,Fs,Ke,uo,ns,ol];for(let n=0;n<po.length;n++)po[n].bucket=n;let fy=class{constructor(e){this.view=e,this.buckets=po.map(()=>[]),this.index=po.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!t||t(h))&&!this.reused.has(h))return r.splice(a,1),a<o&&this.index[s]--,this.reused.set(h,i),h}return null}findWidget(e,t,i){let s=this.buckets[0];if(s.length)for(let r=0,o=0;;r++){if(r==s.length){if(o)return null;o=1,r=0}let l=s[r];if(!this.reused.has(l)&&(o==0?l.widget.compare(e):l.widget.constructor==e.constructor&&e.updateDOM(l.dom,this.view)))return s.splice(r,1),r<this.index[0]&&this.index[0]--,l.widget==e&&l.length==t&&(l.flags&497)==i?(this.reused.set(l,1),l):(this.reused.set(l,2),new $n(l.dom,t,e,l.flags&-498|i))}}reuse(e){return this.reused.set(e,1),e}maybeReuse(e,t=2){if(!this.reused.has(e))return this.reused.set(e,t),e.dom}clear(){for(let e=0;e<this.buckets.length;e++)this.buckets[e].length=this.index[e]=0}},uy=class{constructor(e,t,i,s,r){this.view=e,this.decorations=s,this.disallowBlockEffectsFor=r,this.openWidget=!1,this.openMarks=0,this.cache=new fy(e),this.text=new cy(e.state.doc),this.builder=new hy(this.cache,new ol(e,e.contentDOM),M.iter(i)),this.cache.reused.set(t,2),this.old=new ly(t),this.reuseWalker={skip:(o,l,a)=>{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let l=o<e.length?e[o++]:null,a=l?l.fromA:this.old.root.length;if(a>s){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA<t.range.toA?1:-1),this.emit(r,t.range.fromB),this.cache.clear(),this.builder.addComposition(t,i),this.text.skip(t.range.toB-t.range.fromB),this.forward(t.range.fromA,l.toA),this.emit(t.range.toB,l.toB)):(this.forward(l.fromA,l.toA),this.emit(r,l.toB)),r=l.toB,s=l.toA}return this.builder.curLine&&this.builder.endLine(),this.builder.root}preserve(e,t,i){let s=gy(this.old),r=this.openMarks;this.old.advance(e,i?1:-1,{skip:(o,l,a)=>{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l<o.length?$n.of(o.widget,this.view,a-l,o.flags&496,this.cache.maybeReuse(o)):this.cache.reuse(o);h.flags&256?(h.flags&=-2,this.builder.addBlockWidget(h)):(this.builder.ensureLine(null),this.builder.addInlineWidget(h,s,r),r=s.length)}else if(o.isText())this.builder.ensureLine(null),!l&&a==o.length?this.builder.addText(o.text,s,r,this.cache.reuse(o)):(this.cache.add(o),this.builder.addText(o.text.slice(l,a),s,r)),r=s.length;else if(o.isLine())o.flags&=-2,this.cache.reused.set(o,1),this.builder.addLine(o);else if(o instanceof uo)this.cache.add(o);else if(o instanceof Ke)this.builder.ensureLine(null),this.builder.addMark(o,s,r),this.cache.reused.set(o,1),r=s.length;else return!1;this.openWidget=!1},enter:o=>{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof Ke&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof Ke&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=0,o=M.spans(this.decorations,e,t,{point:(l,a,h,c,f,u)=>{if(h instanceof Qn){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError(\"Block decorations may not be specified via plugins\");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\")}if(r=c.length,f>c.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?Ss.block:Ss.inline),p=dy(h),g=this.cache.findWidget(d,a-l,p)||$n.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(g)):(s.ensureLine(i),s.addInlineWidget(g,c,f))}i=null}else i=py(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,c)=>{for(let f=l;f<a;){let u=this.text.next(Math.min(512,a-f));u==null?(s.addLineStartIfNotCovered(i),s.addBreak(),f++):(s.ensureLine(i),s.addText(u,h,f==l?c:h.length),f+=u.length),i=null}}});s.addLineStartIfNotCovered(i),this.openWidget=o>r,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=de.get(s);if(s==this.view.contentDOM)break;r instanceof Ke?t.push(r):r?.isLine()?i=r:s.nodeName==\"DIV\"&&!i&&s!=this.view.contentDOM?i=new fo(s,ym):t.push(Ke.of(new Tc({tagName:s.nodeName.toLowerCase(),attributes:VS(s)}),s))}return{line:i,marks:t}}};function iu(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function dy(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const ym={class:\"cm-line\"};function py(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:\"cm-line\"}),t&&Pc(t,n),i&&(n.class+=\" \"+i)),n}function gy(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof Ke&&e.push(i.mark)}return e}function Ll(n){let e=de.get(n);return e&&e.setDOM(n.cloneNode()),n}let Ss=class extends Yt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};Ss.inline=new Ss(\"span\");Ss.block=new Ss(\"div\");const El=new class extends Yt{toDOM(){return document.createElement(\"br\")}get isHidden(){return!0}get editable(){return!0}};let su=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=E.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new ol(e,e.contentDOM),this.updateInner([new ti(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:f})=>f<this.minWidthFrom||c>this.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!Qy(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?Oy(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:f}=this.hasComposition;i=new ti(c,f,e.changes.mapPos(c,-1),e.changes.mapPos(f,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(C.ie||C.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=yy(o,this.decorations,e.changes);a.length&&(i=ti.extendWithRanges(i,a));let h=wy(l,this.blockWrappers,e.changes);return h.length&&(i=ti.extendWithRanges(i,h)),r&&!i.some(c=>c.fromA<=r.range.fromA&&c.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new uy(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);this.tile=l.run(e,t),ah(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+\"px\",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+\"px\":\"\";let r=C.chrome||C.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=\"\"});let s=[];if(this.view.viewport.from||this.view.viewport.to<this.view.state.doc.length)for(let r of this.tile.children)r.isWidget()&&r.widget instanceof Wl&&s.push(r.dom);i.updateGaps(s)}updateEditContextFormatting(e){this.editContextFormatting=this.editContextFormatting.map(e.changes);for(let t of e.transactions)for(let i of t.effects)i.is(hm)&&(this.editContextFormatting=i.value)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let{dom:i}=this.tile,s=this.view.root.activeElement,r=s==i,o=!r&&!(this.view.state.facet(Ht)||i.tabIndex>-1)&&fn(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,c;if(a.empty?c=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(c=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),C.gecko&&a.empty&&!this.hasComposition&&my(h)){let u=document.createTextNode(\"\");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=c=new bi(u,0),l=!0}let f=this.view.observer.selectionRange;(l||!f.focusNode||(!un(h.node,h.offset,f.anchorNode,f.anchorOffset)||!un(c.node,c.offset,f.focusNode,f.focusOffset))&&!this.suppressWidgetCursorChange(f,a))&&(this.view.observer.ignore(()=>{C.android&&C.chrome&&i.contains(f.focusNode)&&ky(f.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=bs(this.view.root);if(u)if(a.empty){if(C.gecko){let d=by(h.node,h.offset);if(d&&d!=3){let p=(d==1?jg:Gg)(h.node,h.offset);p&&(h=new bi(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(c.node,c.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,c]=[c,h]),d.setEnd(c.node,c.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,c)),this.impreciseAnchor=h.precise?null:new bi(f.anchorNode,f.anchorOffset),this.impreciseHead=c.precise?null:new bi(f.focusNode,f.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&un(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=bs(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify(\"move\",t.assoc<0?\"forward\":\"backward\",\"lineboundary\"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=hi(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!de.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,c)=>{if(h.isWidget()){if(h.flags&32&&c>=e)return!0;h.flags&16&&(r=!0)}else{let f=c+h.length;if(c<=e&&(i=h,s=e-c,r=f<e),f>=e&&!o&&(o=h,l=e-c,a=c>e),c>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof Wl?null:i.coordsInWidget(s,t,!0):i.coordsIn(s,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&o<r.length){let l=_(r.text,o);if(l==o)return null;let a=vn(r.dom,o,l).getClientRects();for(let h=0;h<a.length;h++){let c=a[h];if(h==a.length-1||c.top<c.bottom&&c.left<c.right)return c}}return null}return s(t,i)}measureVisibleLineHeights(e){let t=[],{from:i,to:s}=e,r=this.view.contentDOM.clientWidth,o=r>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==le.LTR,h=0,c=(f,u,d)=>{for(let p=0;p<f.children.length&&!(u>s);p++){let g=f.children[p],m=u+g.length,O=g.dom.getBoundingClientRect(),{height:y}=O;if(d&&!p&&(h+=O.top-d.top),g instanceof ns)m>i&&c(g,u,O);else if(u>=i&&(h>0&&t.push(-h),t.push(y+h),h=0,o)){let x=g.dom.lastChild,v=x?Ir(x):[];if(v.length){let w=v[v.length-1],Q=a?w.right-O.left:O.right-w.left;Q>l&&(l=Q,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=m)}}d&&p==f.children.length-1&&(h+=d.bottom-O.bottom),u=m+g.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction==\"rtl\"?le.RTL:le.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let c=Ir(h.dom);if(c.length!=1)return;l+=c[0].width,a=c[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement(\"div\"),i,s,r;return t.className=\"cm-line\",t.style.width=\"99999px\",t.style.position=\"absolute\",t.textContent=\"abc def ghi jkl mno pqr stu\",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=Ir(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(E.replace({widget:new Wl(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return E.set(e)}updateDeco(){let e=1,t=this.view.state.facet(nl).map(r=>(this.dynamicDecorationMap[e++]=typeof r==\"function\")?r(this.view):r),i=!1,s=this.view.state.facet(Bc).map((r,o)=>{let l=typeof r==\"function\";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(M.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];e<this.decorations.length;)this.dynamicDecorationMap[e++]=!1;this.blockWrappers=this.view.state.facet(fm).map(r=>typeof r==\"function\"?r(this.view):r)}scrollIntoView(e){if(e.isSnapshot){let h=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=h.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let h of this.view.state.facet(am))try{if(h(this.view,e.range,e))return!0}catch(c){Le(this.view.state,c,\"scroll handler\")}let{range:t}=e,i=this.coordsAt(t.head,t.empty?t.assoc:t.head>t.anchor?-1:1),s;if(!i)return;!t.empty&&(s=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,s.left),top:Math.min(i.top,s.top),right:Math.max(i.right,s.right),bottom:Math.max(i.bottom,s.bottom)});let r=Xc(this.view),o={left:i.left-r.left,top:i.top-r.top,right:i.right+r.right,bottom:i.bottom+r.bottom},{offsetWidth:l,offsetHeight:a}=this.view.scrollDOM;IS(this.view.scrollDOM,o,t.head<t.anchor?-1:1,e.x,e.y,Math.max(Math.min(e.xMargin,l),-l),Math.max(Math.min(e.yMargin,a),-a),this.view.textDirection==le.LTR)}lineHasWidget(e){let t=i=>i.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){ah(this.tile)}};function ah(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)ah(i,e)}}function my(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable==\"false\")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable==\"false\")}function xm(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=jg(t.focusNode,t.focusOffset),s=Gg(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=de.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=de.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function Oy(n,e,t){let i=xm(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\\n\\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new ti(a.mapPos(r),a.mapPos(o),r,o),text:s}}function by(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable==\"false\"?1:0)|(e<n.childNodes.length&&n.childNodes[e].contentEditable==\"false\"?2:0)}let Sy=class{constructor(){this.changes=[]}compareRange(e,t){is(e,t,this.changes)}comparePoint(e,t){is(e,t,this.changes)}boundChange(e){is(e,e,this.changes)}};function yy(n,e,t){let i=new Sy;return M.compare(n,e,t,i),i.changes}let xy=class{constructor(){this.changes=[]}compareRange(e,t){is(e,t,this.changes)}comparePoint(){}boundChange(e){is(e,e,this.changes)}};function wy(n,e,t){let i=new xy;return M.compare(n,e,t,i),i.changes}function ky(n,e){for(let t=n;t&&t!=e;t=t.assignedSlot||t.parentNode)if(t.nodeType==1&&t.contentEditable==\"false\")return!0;return!1}function Qy(n,e){let t=!1;return e&&n.iterChangedRanges((i,s)=>{i<e.to&&s>e.from&&(t=!0)}),t}let Wl=class extends Yt{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement(\"div\");return e.className=\"cm-gap\",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+\"px\",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function vy(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return S.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=_(s.text,r,!1):l=_(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=_(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;l<s.length;){let h=_(s.text,l);if(i(s.text.slice(l,h))!=a)break;l=h}return S.range(o+s.from,l+s.from)}function $y(n,e,t,i,s){let r=Math.round((i-e.left)*n.defaultCharacterWidth);if(n.lineWrapping&&t.height>n.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+kn(o,r,n.state.tabSize)}function hh(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.to<e)){if(r.from<e&&r.to>e)return r;(!s||r.type==ke.Text&&(s.type!=r.type||(t<0?r.from<e:r.to>e)))&&(s=r)}}return s||i}return i}function Py(n,e,t,i){let s=hh(n,e.head,e.assoc||-1),r=!i||s.type!=ke.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==le.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return S.cursor(a,t?-1:1)}return S.cursor(t?s.to:s.from,t?-1:1)}function nu(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=ty(s,r,o,l,t),c=Jg;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;c=`\n`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function Cy(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==oe.Space&&(s=o),s==o}}function Ty(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return S.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,e.assoc||-1),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+c}let f=a.left+o,u=i??n.viewState.heightOracle.textHeight>>1,d=ch(n,{x:f,y:l+u*r},!1,r);return S.cursor(d.pos,d.assoc,void 0,o)}function dn(n,e,t){for(;;){let i=0;for(let s of n)s.between(e-1,e+1,(r,o,l)=>{if(e>r&&e<o){let a=i||t||(e-r<o-e?-1:1);e=a<0?r:o,i=a}});if(!i)return e}}function wm(n,e){let t=null;for(let i=0;i<e.ranges.length;i++){let s=e.ranges[i],r=null;if(s.empty){let o=dn(n,s.from,0);o!=s.from&&(r=S.cursor(o,-1))}else{let o=dn(n,s.from,-1),l=dn(n,s.to,1);(o!=s.from||l!=s.to)&&(r=S.range(s.from==s.anchor?o:l,s.from==s.head?o:l))}r&&(t||(t=e.ranges.slice()),t[i]=r)}return t?S.create(t,e.mainIndex):e}function Vl(n,e,t){let i=dn(n.state.facet(In).map(s=>s(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:S.cursor(i,i<t.from?1:-1)}let Xt=class{constructor(e,t){this.pos=e,this.assoc=t}};function ch(n,e,t,i){let s=n.contentDOM.getBoundingClientRect(),r=s.top+n.viewState.paddingTop,{x:o,y:l}=e,a=l-r,h;for(;;){if(a<0)return new Xt(0,1);if(a>n.viewState.docHeight)return new Xt(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==ke.Text){if(i<0?h.to<n.viewport.from:h.from>n.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let f=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+f:h.top-f}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==ke.Text){let f=$y(n,s,h,o,l);return new Xt(f,f==h.from?1:-1)}}if(h.type!=ke.Text)return a<(h.top+h.bottom)/2?new Xt(h.from,1):new Xt(h.to,-1);let c=n.docView.lineAt(h.from,2);return(!c||c.length!=h.length)&&(c=n.docView.lineAt(h.from,-2)),km(n,c,h.from,o,l)}function km(n,e,t,i,s){let r=-1,o=null,l=1e9,a=1e9,h=s,c=s,f=(u,d)=>{for(let p=0;p<u.length;p++){let g=u[p];if(g.top==g.bottom)continue;let m=g.left>i?g.left-i:g.right<i?i-g.right:0,O=g.top>s?g.top-s:g.bottom<s?s-g.bottom:0;g.top<=c&&g.bottom>=h&&(h=Math.min(g.top,h),c=Math.max(g.bottom,c),O=0),(r<0||(O-a||m-l)<0)&&(r>=0&&a&&l<m&&o.top<=c-2&&o.bottom>=h+2?a=0:(r=d,l=m,a=O,o=g))}};if(e.isText()){for(let d=0;d<e.length;){let p=_(e.text,d);if(f(vn(e.dom,d,p).getClientRects(),d),!l&&!a)break;d=p}return i>(o.left+o.right)/2==(ru(n,r+t)==le.LTR)?new Xt(t+_(e.text,r),-1):new Xt(t+r,1)}else{if(!e.length)return new Xt(t,1);for(let g=0;g<e.children.length;g++){let m=e.children[g];if(m.flags&48)continue;let O=(m.dom.nodeType==1?m.dom:vn(m.dom,0,m.length)).getClientRects();if(f(O,g),!l&&!a)break}let u=e.children[r],d=e.posBefore(u,t);return u.isComposite()||u.isText()?km(n,u,d,Math.max(o.left,Math.min(o.right,i)),s):i>(o.left+o.right)/2==(ru(n,r+t)==le.LTR)?new Xt(d+u.length,-1):new Xt(d,1)}}function ru(n,e){let t=n.state.doc.lineAt(e);return n.bidiSpans(t)[ei.find(n.bidiSpans(t),e-t.from,-1,1)].dir}const Us=\"￿\";let My=class{constructor(e,t){this.points=e,this.view=t,this.text=\"\",this.lineSeparator=t.state.facet(L.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=Us}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=de.get(s),l=s.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=de.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:ho(s))||ho(l)&&(s.nodeName!=\"BR\"||o?.isWidget())&&this.text.length>r)&&!Ry(l,t)&&this.lineBreak(),s=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\\r\\n?|\\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){let t=de.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName==\"BR\"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(Ay(e,i.node,i.offset)?t:0))}};function Ay(n,e,t){for(;;){if(!e||t<hi(e))return!1;if(e==n)return!0;t=wi(e)+1,e=e.parentNode}}function Ry(n,e){let t;for(;!(n==e||!n);n=n.nextSibling){let i=de.get(n);if(!i?.isWidget())return!1;i&&(t||(t=[])).push(i)}if(t)for(let i of t){let s=i.overrideDOMText;if(s?.length)return!1}return!0}let ou=class{constructor(e,t){this.node=e,this.offset=t,this.pos=-1}},Dy=class{constructor(e,t,i,s){this.typeOver=s,this.bounds=null,this.text=\"\",this.domChanged=t>-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Qm(e.docView.tile,t,i,0))){let l=r||o?[]:By(e),a=new My(l,e);a.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=a.text,this.newSel=Xy(l,this.bounds.from)}else{let l=e.observer.selectionRange,a=r&&r.node==l.focusNode&&r.offset==l.focusOffset||!Ja(e.contentDOM,l.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),h=o&&o.node==l.anchorNode&&o.offset==l.anchorOffset||!Ja(e.contentDOM,l.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((C.ios||C.chrome)&&e.state.selection.main.empty&&a!=h&&(c.from>0||c.to<e.state.doc.length)){let f=Math.min(a,h),u=Math.max(a,h),d=c.from-f,p=c.to-u;(d==0||d==1||f==0)&&(p==0||p==-1||u==e.state.doc.length)&&(a=0,h=e.state.doc.length)}e.inputState.composing>-1&&e.state.selection.ranges.length>1?this.newSel=e.state.selection.replaceRange(S.range(h,a)):this.newSel=S.single(h,a)}}};function Qm(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,c=i;a<n.children.length;a++){let f=n.children[a],u=h+f.length;if(h<e&&u>t)return Qm(f,e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&f.dom.parentNode==n.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o<n.children.length&&o>=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function vm(n,e){let t,{newSel:i}=e,s=n.state.selection.main,r=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,a=s.from,h=null;(r===8||C.android&&e.text.length<l-o)&&(a=s.to,h=\"end\");let c=$m(n.state.doc.sliceString(o,l,Us),e.text,a-o,h);c&&(C.chrome&&r==13&&c.toB==c.from+2&&e.text.slice(c.from,c.toB)==Us+Us&&c.toB--,t={from:o+c.from,to:o+c.toA,insert:Z.of(e.text.slice(c.from,c.toB).split(Us))})}else i&&(!n.hasFocus&&n.state.facet(Ht)||go(i,s))&&(i=null);if(!t&&!i)return!1;if(!t&&e.typeOver&&!s.empty&&i&&i.main.empty?t={from:s.from,to:s.to,insert:n.state.doc.slice(s.from,s.to)}:(C.mac||C.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute(\"autocorrect\")==\"off\"?(i&&t.insert.length==2&&(i=S.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:Z.of([t.insert.toString().replace(\".\",\" \")])}):t&&t.from>=s.from&&t.to<=s.to&&(t.from!=s.from||t.to!=s.to)&&s.to-s.from-(t.to-t.from)<=4?t={from:s.from,to:s.to,insert:n.state.doc.slice(s.from,t.from).append(t.insert).append(n.state.doc.slice(t.to,s.to))}:n.state.doc.lineAt(s.from).to<s.to&&n.docView.lineHasWidget(s.to)&&n.inputState.insertingTextAt>Date.now()-50?t={from:s.from,to:s.to,insert:n.state.toText(n.inputState.insertingText)}:C.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==`\n `&&n.lineWrapping&&(i&&(i=S.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:Z.of([\" \"])}),t)return Lc(n,t,i,r);if(i&&!go(i,s)){let o=!1,l=\"select\";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin==\"select\"&&(o=!0),l=n.inputState.lastSelectionOrigin,l==\"select.pointer\"&&(i=wm(n.state.facet(In).map(a=>a(n)),i))),n.dispatch({selection:i,scrollIntoView:o,userEvent:l}),!0}else return!1}function Lc(n,e,t,i=-1){if(C.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(C.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==\" \")&&e.insert.length==1&&e.insert.lines==2&&ss(n.contentDOM,\"Enter\",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.length<e.to-e.from&&e.to>s.head)&&ss(n.contentDOM,\"Backspace\",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&ss(n.contentDOM,\"Delete\",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=Zy(n,e,t));return n.state.facet(nm).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function Zy(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.from<r.from||e.from>r.to){let a=e.from<r.from?-1:1,h=a<0?r.from:r.to,c=dn(s.facet(In).map(f=>f(n)),h,a);e.from==c&&(o=c)}if(o>-1)i={changes:e,selection:S.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=r.from<e.from?s.sliceDoc(r.from,e.from):\"\",h=r.to>e.to?s.sliceDoc(e.to,r.to):\"\";i=s.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let c=n.state.sliceDoc(e.from,e.to),f,u=t&&xm(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);f={from:u.from,to:u.to-p}}else f=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let g=p.to-d,m=g-c.length;if(n.state.sliceDoc(m,g)!=c||g>=f.from&&m<=f.to)return{range:p};let O=s.changes({from:m,to:g,insert:e.insert}),y=p.to-r.to;return{changes:O,range:h?S.range(Math.max(0,h.anchor+y),Math.max(0,h.head+y)):p.map(O)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l=\"input.type\";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=\".compose\",n.inputState.compositionFirstChange&&(l+=\".start\",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function $m(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r<s&&n.charCodeAt(r)==e.charCodeAt(r);)r++;if(r==s&&n.length==e.length)return null;let o=n.length,l=e.length;for(;o>0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i==\"end\"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o<r&&n.length<e.length){let a=t<=r&&t>=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l<r){let a=t<=r&&t>=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function By(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new ou(t,i)),(s!=t||r!=i)&&e.push(new ou(s,r))),e}function Xy(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?S.single(t+e,i+e):null}function go(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}let Ly=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText=\"\",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,C.safari&&e.contentDOM.addEventListener(\"input\",()=>null),C.gecko&&Ky(e.contentDOM.ownerDocument)}handleEvent(e){!Yy(this.view,e)||this.ignoreDuringComposition(e)||e.type==\"keydown\"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Ey(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!=\"scroll\"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!=\"scroll\"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Cm.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),C.android&&C.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return C.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((t=Pm.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||Wy.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key==\"Enter\"&&e&&e.from<e.to&&/^\\S+$/.test(e.insert.toString())?!1:(this.pendingIOSKey=void 0,ss(this.view.contentDOM,t.key,t.keyCode,t instanceof KeyboardEvent?t:void 0))}ignoreDuringComposition(e){return!/^key/.test(e.type)||e.synthetic?!1:this.composing>0?!0:C.safari&&!C.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function lu(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){Le(t.state,s)}}}function Ey(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push(lu(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(lu(i.value,a))}}for(let i in bt)t(i).handlers.push(bt[i]);for(let i in ot)t(i).observers.push(ot[i]);return e}const Pm=[{key:\"Backspace\",keyCode:8,inputType:\"deleteContentBackward\"},{key:\"Enter\",keyCode:13,inputType:\"insertParagraph\"},{key:\"Enter\",keyCode:13,inputType:\"insertLineBreak\"},{key:\"Delete\",keyCode:46,inputType:\"deleteContentForward\"}],Wy=\"dthko\",Cm=[16,17,18,20,91,92,224,225],or=6;function lr(n){return Math.max(0,n)*.7+8}function Vy(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}let zy=class{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=_S(e.contentDOM),this.atoms=e.state.facet(In).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener(\"mousemove\",this.move=this.move.bind(this)),r.addEventListener(\"mouseup\",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(L.allowMultipleSelections)&&qy(e,t),this.dragging=_y(e,t)&&Am(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&Vy(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Xc(this.view);e.clientX-a.left<=s+or?t=-lr(s-e.clientX):e.clientX+a.right>=o-or&&(t=lr(e.clientX-o)),e.clientY-a.top<=r+or?i=-lr(r-e.clientY):e.clientY+a.bottom>=l-or&&(i=lr(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener(\"mousemove\",this.move),e.removeEventListener(\"mouseup\",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=wm(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:\"select.pointer\"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent(\"input.type\"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function qy(n,e){let t=n.state.facet(em);return t.length?t[0](e):C.mac?e.metaKey:e.ctrlKey}function Iy(n,e){let t=n.state.facet(tm);return t.length?t[0](e):C.mac?!e.altKey:!e.ctrlKey}function _y(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=bs(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r<s.length;r++){let o=s[r];if(o.left<=e.clientX&&o.right>=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Yy(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=de.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const bt=Object.create(null),ot=Object.create(null),Tm=C.ie&&C.ie_version<15||C.ios&&C.webkit_version<604;function Ny(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement(\"textarea\"));t.style.cssText=\"position: fixed; left: -10000px; top: 10px\",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Mm(n,t.value)},50)}function ll(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Mm(n,e){e=ll(n.state,Rc,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(fh!=null&&t.selection.ranges.every(a=>a.empty)&&fh==r.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:S.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:S.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:\"input.paste\",scrollIntoView:!0})}ot.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};bt.keydown=(n,e)=>(n.inputState.setSelectionOrigin(\"select\"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);ot.touchstart=(n,e)=>{n.inputState.lastTouchTime=Date.now(),n.inputState.setSelectionOrigin(\"select.pointer\")};ot.touchmove=n=>{n.inputState.setSelectionOrigin(\"select.pointer\")};bt.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(im))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=Gy(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new zy(n,e,t,i)),i&&n.observer.ignore(()=>{Yg(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin(\"select.pointer\");return!1};function au(n,e,t,i){if(i==1)return S.cursor(e,t);if(i==2)return vy(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return l<n.state.doc.length&&l==r.to&&l++,S.range(o,l)}}const jy=C.ie&&C.ie_version<=11;let hu=null,cu=0,fu=0;function Am(n){if(!jy)return n.detail;let e=hu,t=fu;return hu=n,fu=Date.now(),cu=!e||t>Date.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(cu+1)%3:1}function Gy(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=Am(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,c=au(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let f=au(n,t.pos,t.assoc,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u<c.from?S.range(u,d):S.range(d,u)}return o?s.replaceRange(s.main.extend(c.from,c.to)):l&&i==1&&s.ranges.length>1&&(h=Hy(s,a.pos))?h:l?s.addRange(c):S.create([c])}}}function Hy(n,e){for(let t=0;t<n.ranges.length;t++){let{from:i,to:s}=n.ranges[t];if(i<=e&&s>=e)return S.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}bt.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=S.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData(\"Text\",ll(n.state,Dc,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed=\"copyMove\"),!1};bt.dragend=n=>(n.inputState.draggedContent=null,!1);function uu(n,e,t,i){if(t=ll(n.state,Rc,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&Iy(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?\"move.drop\":\"input.drop\"}),n.inputState.draggedContent=null}bt.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&uu(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o<t.length;o++){let l=new FileReader;l.onerror=r,l.onload=()=>{/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData(\"Text\");if(i)return uu(n,e,i,!0),!0}return!1};bt.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=Tm?null:e.clipboardData;return t?(Mm(n,t.getData(\"text/plain\")||t.getData(\"text/uri-list\")),!0):(Ny(n),!1)};function Fy(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement(\"textarea\"));i.style.cssText=\"position: fixed; left: -10000px; top: 10px\",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function Uy(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:ll(n,Dc,e.join(n.lineBreak)),ranges:t,linewise:i}}let fh=null;bt.copy=bt.cut=(n,e)=>{let t=bs(n.root);if(t&&!fn(n.contentDOM,t))return!1;let{text:i,ranges:s,linewise:r}=Uy(n.state);if(!i&&!r)return!1;fh=r?i:null,e.type==\"cut\"&&!n.state.readOnly&&n.dispatch({changes:s,scrollIntoView:!0,userEvent:\"delete.cut\"});let o=Tm?null:e.clipboardData;return o?(o.clearData(),o.setData(\"text/plain\",i),!0):(Fy(n,i),!1)};const Rm=wt.define();function Dm(n,e){let t=[];for(let i of n.facet(rm)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:Rm.of(!0)}):null}function Zm(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=Dm(n.state,e);t?n.dispatch(t):n.update([])}},10)}ot.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),Zm(n)};ot.blur=n=>{n.observer.clearSelectionRange(),Zm(n)};ot.compositionstart=ot.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};ot.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,C.chrome&&C.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};ot.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};bt.beforeinput=(n,e)=>{var t,i;if((e.inputType==\"insertText\"||e.inputType==\"insertCompositionText\")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType==\"insertReplacementText\"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData(\"text/plain\"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return Lc(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(C.chrome&&C.android&&(s=Pm.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key==\"Backspace\"||s.key==\"Delete\")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return C.ios&&e.inputType==\"deleteContentForward\"&&n.observer.flushSoon(),C.safari&&e.inputType==\"insertText\"&&n.inputState.composing>=0&&setTimeout(()=>ot.compositionend(n,e),20),!1};const du=new Set;function Ky(n){du.has(n)||(du.add(n),n.addEventListener(\"copy\",()=>{}),n.addEventListener(\"cut\",()=>{}))}const pu=[\"pre-wrap\",\"normal\",\"pre-line\",\"break-spaces\"];let ys=!1;function gu(){ys=!1}let Jy=class{constructor(e){this.lineWrapping=e,this.doc=Z.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return pu.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i<e.length;i++){let s=e[i];s<0?i++:this.heightSamples[Math.floor(s*10)]||(t=!0,this.heightSamples[Math.floor(s*10)]=!0)}return t}refresh(e,t,i,s,r,o){let l=pu.indexOf(e)>-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h<o.length;h++){let c=o[h];c<0?h++:this.heightSamples[Math.floor(c*10)]=!0}}return a}},ex=class{constructor(e,t){this.from=e,this.heights=t,this.index=0}get more(){return this.index<this.heights.length}},Ft=class Bm{constructor(e,t,i,s,r){this.from=e,this.length=t,this.top=i,this.height=s,this._content=r}get type(){return typeof this._content==\"number\"?ke.Text:Array.isArray(this._content)?this._content:this._content.type}get to(){return this.from+this.length}get bottom(){return this.top+this.height}get widget(){return this._content instanceof Qn?this._content.widget:null}get widgetLineBreaks(){return typeof this._content==\"number\"?this._content:0}join(e){let t=(Array.isArray(this._content)?this._content:[this]).concat(Array.isArray(e._content)?e._content:[e]);return new Bm(this.from,this.length+e.length,this.top,this.height+e.height,t)}};var se=(function(n){return n[n.ByPos=0]=\"ByPos\",n[n.ByHeight=1]=\"ByHeight\",n[n.ByPosNoHeight=2]=\"ByPosNoHeight\",n})(se||(se={}));const _r=.001;let mt=class Yr{constructor(e,t,i=2){this.length=e,this.height=t,this.flags=i}get outdated(){return(this.flags&2)>0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>_r&&(ys=!0),this.height=e)}replace(e,t,i){return Yr.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=s[l],u=r.lineAt(a,se.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,se.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,c=s[l-1].fromB,l--,a<u.from&&(u=r.lineAt(a,se.ByPosNoHeight,i,0,0));c+=u.from-a,a=u.from;let p=nx.build(i.setDoc(o),e,c,f);r=mo(r,r.replace(a,h,p))}return r.updateHeight(i,0)}static empty(){return new Dt(0,0,0)}static of(e){if(e.length==1)return e[0];let t=0,i=e.length,s=0,r=0;for(;;)if(t==i)if(s>r*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s<r){let l=e[t++];l&&(s+=l.size)}else{let l=e[--i];l&&(r+=l.size)}let o=0;return e[t-1]==null?(o=1,t--):e[t]==null&&(o=1,i++),new ix(Yr.of(e.slice(0,t)),o,Yr.of(e.slice(i)))}};function mo(n,e){return n==e?n:(n.constructor!=e.constructor&&(ys=!0),e)}mt.prototype.size=1;const tx=E.replace({});let Xm=class extends mt{constructor(e,t,i){super(e,t),this.deco=i,this.spaceAbove=0}mainBlock(e,t){return new Ft(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.deco||0)}blockAt(e,t,i,s){return this.spaceAbove&&e<i+this.spaceAbove?new Ft(s,0,i,this.spaceAbove,tx):this.mainBlock(i,s)}lineAt(e,t,i,s,r){let o=this.mainBlock(s,r);return this.spaceAbove?this.blockAt(0,i,s,r).join(o):o}forEachLine(e,t,i,s,r,o){e<=r+this.length&&t>=r&&o(this.lineAt(0,se.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}},Dt=class uh extends Xm{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new Ft(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof uh||s instanceof rs&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof rs?s=new uh(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):mt.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:\"\"}${this.widgetHeight?\":\"+this.widgetHeight:\"\"})`}},rs=class ct extends mt{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e<t.lineHeight?0:Math.round(Math.max(0,Math.min(1,(e-i)/this.height))*this.length)),c=t.doc.lineAt(h),f=l+c.length*a,u=Math.max(i,e-f/2);return new Ft(c.from,c.length,u,f,0)}else{let h=Math.max(0,Math.min(o-r,Math.floor((e-i)/l))),{from:c,length:f}=t.doc.line(r+h);return new Ft(c,f,i+l*h,l,0)}}lineAt(e,t,i,s,r){if(t==se.ByHeight)return this.blockAt(e,i,s,r);if(t==se.ByPosNoHeight){let{from:d,to:p}=i.doc.lineAt(e);return new Ft(d,p-d,0,0,0)}let{firstLine:o,perLine:l,perChar:a}=this.heightMetrics(i,r),h=i.doc.lineAt(e),c=l+h.length*a,f=h.number-o,u=s+l*f+a*(h.from-r-f);return new Ft(h.from,h.length,Math.max(s,Math.min(u,s+this.height-c)),c,0)}forEachLine(e,t,i,s,r,o){e=Math.max(e,r),t=Math.min(t,r+this.length);let{firstLine:l,perLine:a,perChar:h}=this.heightMetrics(i,r);for(let c=e,f=s;c<=t;){let u=i.doc.lineAt(c);if(c==e){let p=u.number-l;f+=a*p+h*(e-r-p)}let d=a+h*u.length;o(new Ft(u.from,u.length,f,d,0)),f+=d,c=u.to+1}}replace(e,t,i){let s=this.length-t;if(s>0){let r=i[i.length-1];r instanceof ct?i[i.length-1]=new ct(r.length+s):i.push(null,new ct(s-1))}if(e>0){let r=i[0];r instanceof ct?i[0]=new ct(e+r.length):i.unshift(new ct(e-1),null)}return mt.of(i)}decomposeLeft(e,t){t.push(new ct(e-1),null)}decomposeRight(e,t){t.push(null,new ct(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new ct(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=s.heights[s.index++],u=0;f<0&&(u=-f,f=s.heights[s.index++]),a==-1?a=f:Math.abs(f-a)>=_r&&(a=-2);let d=new Dt(c,f,u);d.outdated=!1,o.push(d),l+=c+1}l<=r&&o.push(null,new ct(r-l).updateHeight(e,l));let h=mt.of(o);return(a<0||Math.abs(h.height-this.height)>=_r||Math.abs(a-this.heightMetrics(e,t).perLine)>=_r)&&(ys=!0),mo(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},ix=class extends mt{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return e<r?this.left.blockAt(e,t,i,s):this.right.blockAt(e,t,r,s+this.left.length+this.break)}lineAt(e,t,i,s,r){let o=s+this.left.height,l=r+this.left.length+this.break,a=t==se.ByHeight?e<o:e<l,h=a?this.left.lineAt(e,t,i,s,r):this.right.lineAt(e,t,i,o,l);if(this.break||(a?h.to<l:h.from>l))return h;let c=t==se.ByPosNoHeight?se.ByPosNoHeight:se.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e<a&&this.left.forEachLine(e,t,i,s,r,o),t>=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,se.ByPos,i,s,r);e<h.from&&this.left.forEachLine(e,h.from-1,i,s,r,o),h.to>=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(t<s)return this.balanced(this.left.replace(e,t,i),this.right);if(e>this.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&mu(r,o-1),t<this.length){let l=r.length;this.decomposeRight(t,r),mu(r,l)}return mt.of(r)}decomposeLeft(e,t){let i=this.left.length;if(e<=i)return this.left.decomposeLeft(e,t);t.push(this.left),this.break&&(i++,e>=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e<i&&this.left.decomposeRight(e,t),this.break&&e<s&&t.push(null),t.push(this.right)}balanced(e,t){return e.size>2*t.size||t.size>2*e.size?mt.of(this.break?[e,null,t]:[e,t]):(this.left=mo(this.left,e),this.right=mo(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?\" \":\"-\")+this.right}};function mu(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof rs&&(i=n[e+1])instanceof rs&&n.splice(e-1,3,new rs(t.length+1+i.length))}const sx=5;let nx=class Lm{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof Dt?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new Dt(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e<t||i.heightRelevant){let s=i.widget?i.widget.estimatedHeight:0,r=i.widget?i.widget.lineBreaks:0;s<0&&(s=this.oracle.lineHeight);let o=t-e;i.block?this.addBlock(new Xm(o,s,i)):(o||r||s>=sx)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd<this.pos&&(this.lineEnd=this.oracle.doc.lineAt(this.pos).to)}enterLine(){if(this.lineStart>-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenTo<e&&((this.writtenTo<e-1||this.nodes[this.nodes.length-1]==null)&&this.nodes.push(this.blankContent(this.writtenTo,e-1)),this.nodes.push(null)),this.pos>e&&this.nodes.push(new Dt(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new rs(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Dt)return e;let t=new Dt(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof Dt)&&!this.isCovered?this.nodes.push(new Dt(0,-1,0)):(this.writtenTo<this.pos||t==null)&&this.nodes.push(this.blankContent(this.writtenTo,this.pos));let i=e;for(let s of this.nodes)s instanceof Dt&&s.updateHeight(this.oracle,i),i+=s?s.length:1;return this.nodes}static build(e,t,i,s){let r=new Lm(i,e);return M.spans(t,i,s,r,0),r.finish(i)}};function rx(n,e,t){let i=new ox;return M.compare(n,e,t,i,0),i.changes}let ox=class{constructor(){this.changes=[]}compareRange(){}comparePoint(e,t,i,s){(e<t||i&&i.heightRelevant||s&&s.heightRelevant)&&is(e,t,this.changes,5)}};function lx(n,e){let t=n.getBoundingClientRect(),i=n.ownerDocument,s=i.defaultView||window,r=Math.max(0,t.left),o=Math.min(s.innerWidth,t.right),l=Math.max(0,t.top),a=Math.min(s.innerHeight,t.bottom);for(let h=n.parentNode;h&&h!=i.body;)if(h.nodeType==1){let c=h,f=window.getComputedStyle(c);if((c.scrollHeight>c.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!=\"visible\"){let u=c.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=f.position==\"absolute\"||f.position==\"fixed\"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function ax(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left<t.innerWidth&&e.right>0&&e.top<t.innerHeight&&e.bottom>0}function hx(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}let zl=class{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;i<e.length;i++){let s=e[i],r=t[i];if(s.from!=r.from||s.to!=r.to||s.size!=r.size)return!1}return!0}draw(e,t){return E.replace({widget:new cx(this.displaySize*(t?e.scaleY:e.scaleX),t)}).range(this.from,this.to)}},cx=class extends Yt{constructor(e,t){super(),this.size=e,this.vertical=t}eq(e){return e.size==this.size&&e.vertical==this.vertical}toDOM(){let e=document.createElement(\"div\");return this.vertical?e.style.height=this.size+\"px\":(e.style.width=this.size+\"px\",e.style.height=\"2px\",e.style.display=\"inline-block\"),e}get estimatedHeight(){return this.vertical?this.size:-1}},Ou=class{constructor(e){this.state=e,this.pixelViewport={left:0,right:window.innerWidth,top:0,bottom:0},this.inView=!0,this.paddingTop=0,this.paddingBottom=0,this.contentDOMWidth=0,this.contentDOMHeight=0,this.editorHeight=0,this.editorWidth=0,this.scrollTop=0,this.scrolledToBottom=!1,this.scaleX=1,this.scaleY=1,this.scrollAnchorPos=0,this.scrollAnchorHeight=-1,this.scaler=bu,this.scrollTarget=null,this.printing=!1,this.mustMeasureContent=!0,this.defaultTextDirection=le.LTR,this.visibleRanges=[],this.mustEnforceCursorAssoc=!1;let t=e.facet(Zc).some(i=>typeof i!=\"function\"&&i.class==\"cm-lineWrapping\");this.heightOracle=new Jy(t),this.stateDeco=Su(e),this.heightMap=mt.empty().applyChanges(this.stateDeco,Z.empty,this.heightOracle.setDoc(e.doc),[new ti(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=E.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new ar(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?bu:new dx(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(Ks(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Su(this.state);let s=e.changedRanges,r=ti.extendWithRanges(s,rx(i,this.stateDeco,e?e.changes:he.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);gu(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||ys)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.head<a.from||t.range.head>a.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(lm)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction==\"rtl\"?le.RTL:le.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent,l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:v,scaleY:w}=_g(t,l);(v>.005&&Math.abs(this.scaleX-v)>.005||w>.005&&Math.abs(this.scaleY-w)>.005)&&(this.scaleX=v,this.scaleY=w,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=Ng(e.scrollDOM);let p=(this.printing?hx:lx)(t,this.paddingTop),g=p.top-this.pixelViewport.top,m=p.bottom-this.pixelViewport.bottom;this.pixelViewport=p;let O=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(O!=this.inView&&(this.inView=O,O&&(a=!0)),!this.inView&&!this.scrollTarget&&!ax(e.dom))return 0;let y=l.width;if((this.contentDOMWidth!=y||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let v=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(v)&&(o=!0),o||s.lineWrapping&&Math.abs(y-this.contentDOMWidth)>s.charWidth){let{lineHeight:w,charWidth:Q,textHeight:$}=e.docView.measureTextSize();o=w>0&&s.refresh(r,w,Q,$,Math.max(5,y/Q),v),o&&(e.docView.minWidth=0,h|=16)}g>0&&m>0?c=Math.max(g,m):g<0&&m<0&&(c=Math.min(g,m)),gu();for(let w of this.viewports){let Q=w.from==this.viewport.from?v:e.docView.measureVisibleLineHeights(w);this.heightMap=(o?mt.empty().applyChanges(this.stateDeco,Z.empty,this.heightOracle,[new ti(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new ex(w.from,Q))}ys&&(h|=2)}let x=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.head<this.viewport.from||this.scrollTarget.range.head>this.viewport.to);return x&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||x)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new ar(s.lineAt(o-i*1e3,se.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,se.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(h<a.from||h>a.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=s.lineAt(h,se.ByPos,r,0,0),u;t.y==\"center\"?u=(f.top+f.bottom)/2-c/2:t.y==\"start\"||t.y==\"nearest\"&&h<a.from?u=f.top:u=f.bottom-c,a=new ar(s.lineAt(u-1e3/2,se.ByHeight,r,0,0).from,s.lineAt(u+c+1e3/2,se.ByHeight,r,0,0).to)}}return a}mapViewport(e,t){let i=t.mapPos(e.from,-1),s=t.mapPos(e.to,1);return new ar(this.heightMap.lineAt(i,se.ByPos,this.heightOracle,0,0).from,this.heightMap.lineAt(s,se.ByPos,this.heightOracle,0,0).to)}viewportIsAppropriate({from:e,to:t},i=0){if(!this.inView)return!0;let{top:s}=this.heightMap.lineAt(e,se.ByPos,this.heightOracle,0,0),{bottom:r}=this.heightMap.lineAt(t,se.ByPos,this.heightOracle,0,0),{visibleTop:o,visibleBottom:l}=this;return(e==0||s<=o-Math.max(10,Math.min(-i,250)))&&(t==this.state.doc.length||r>=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r<l+2*1e3}mapLineGaps(e,t){if(!e.length||t.empty)return e;let i=[];for(let s of e)t.touchesRange(s.from,s.to)||i.push(new zl(t.mapPos(s.from),t.mapPos(s.to),s.size,s.displaySize));return i}ensureLineGaps(e,t){let i=this.heightOracle.lineWrapping,s=i?1e4:2e3,r=s>>1,o=s<<1;if(this.defaultTextDirection!=le.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-c<r)return;let p=this.state.selection.main,g=[p.from];p.empty||g.push(p.to);for(let O of g)if(O>c&&O<f){a(c,O-10,u,d),a(O+10,f,u,d);return}let m=ux(e,O=>O.from>=u.from&&O.to<=u.to&&Math.abs(O.from-c)<r&&Math.abs(O.to-f)<r&&!g.some(y=>O.from<y&&O.to>y));if(!m){if(f<u.to&&t&&i&&t.visibleRanges.some(x=>x.from<=f&&x.to>=f)){let x=t.moveToLineBoundary(S.cursor(f),!1,!0).head;x>c&&(f=x)}let O=this.gapSize(u,c,f,d),y=i||O<2e6?O:2e6;m=new zl(c,f,O,y)}l.push(m)},h=c=>{if(c.length<o||c.type!=ke.Text)return;let f=fx(c.from,c.to,this.stateDeco);if(f.total<o)return;let u=this.scrollTarget?this.scrollTarget.range.head:null,d,p;if(i){let g=s/this.heightOracle.lineLength*this.heightOracle.lineHeight,m,O;if(u!=null){let y=cr(f,u),x=((this.visibleBottom-this.visibleTop)/2+g)/c.height;m=y-x,O=y+x}else m=(this.visibleTop-c.top-g)/c.height,O=(this.visibleBottom-c.top+g)/c.height;d=hr(f,m),p=hr(f,O)}else{let g=f.total*this.heightOracle.charWidth,m=s*this.heightOracle.charWidth,O=0;if(g>2e6)for(let Q of e)Q.from>=c.from&&Q.from<c.to&&Q.size!=Q.displaySize&&Q.from*this.heightOracle.charWidth+O<this.pixelViewport.left&&(O=Q.size-Q.displaySize);let y=this.pixelViewport.left+O,x=this.pixelViewport.right+O,v,w;if(u!=null){let Q=cr(f,u),$=((x-y)/2+m)/g;v=Q-$,w=Q+$}else v=(y-m)/g,w=(x+m)/g;d=hr(f,v),p=hr(f,w)}d>c.from&&a(c.from,d,c,f),p<c.to&&a(p,c.to,c,f)};for(let c of this.viewportLines)Array.isArray(c.type)?c.type.forEach(h):h(c);return l}gapSize(e,t,i,s){let r=cr(s,i)-cr(s,t);return this.heightOracle.lineWrapping?e.height*r:s.total*this.heightOracle.charWidth*r}updateLineGaps(e){zl.same(e,this.lineGaps)||(this.lineGaps=e,this.lineGapDeco=E.set(e.map(t=>t.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];M.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r<i.length&&!(s&8);r++){let o=this.visibleRanges[r],l=i[r];(o.from!=l.from||o.to!=l.to)&&(s|=4,e&&e.mapPos(o.from,-1)==l.from&&e.mapPos(o.to,1)==l.to||(s|=8))}return this.visibleRanges=i,s}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||Ks(this.heightMap.lineAt(e,se.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||Ks(this.heightMap.lineAt(this.scaler.fromDOM(e),se.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return Ks(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},ar=class{constructor(e,t){this.from=e,this.to=t}};function fx(n,e,t){let i=[],s=n,r=0;return M.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s<e&&(i.push({from:s,to:e}),r+=e-s),{total:r,ranges:i}}function hr({total:n,ranges:e},t){if(t<=0)return e[0].from;if(t>=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function cr(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function ux(n,e){for(let t of n)if(e(t))return t}const bu={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Su(n){let e=n.facet(nl).filter(i=>typeof i!=\"function\"),t=n.facet(Bc).filter(i=>typeof i!=\"function\");return t.length&&e.push(M.join(t)),e}let dx=class Em{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,se.ByPos,e,0,0).top,c=t.lineAt(a,se.ByPos,e,0,0).bottom;return s+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=t<this.viewports.length?this.viewports[t]:null;if(!r||e<r.top)return s+(e-i)*this.scale;if(e<=r.bottom)return r.domTop+(e-r.top);i=r.bottom,s=r.domBottom}}fromDOM(e){for(let t=0,i=0,s=0;;t++){let r=t<this.viewports.length?this.viewports[t]:null;if(!r||e<r.domTop)return i+(e-s)/this.scale;if(e<=r.domBottom)return r.top+(e-r.domTop);i=r.bottom,s=r.domBottom}}eq(e){return e instanceof Em?this.scale==e.scale&&this.viewports.length==e.viewports.length&&this.viewports.every((t,i)=>t.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}};function Ks(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new Ft(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>Ks(s,e)):n._content)}const fr=k.define({combine:n=>n.join(\" \")}),dh=k.define({combine:n=>n.indexOf(!0)>-1}),ph=me.newName(),Wm=me.newName(),Vm=me.newName(),zm={\"&light\":\".\"+Wm,\"&dark\":\".\"+Vm};function gh(n,e,t){return new me(e,{finish(i){return/&/.test(i)?i.replace(/&\\w*/,s=>{if(s==\"&\")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+\" \"+i}})}const px=gh(\".\"+ph,{\"&\":{position:\"relative !important\",boxSizing:\"border-box\",\"&.cm-focused\":{outline:\"1px dotted #212121\"},display:\"flex !important\",flexDirection:\"column\"},\".cm-scroller\":{display:\"flex !important\",alignItems:\"flex-start !important\",fontFamily:\"monospace\",lineHeight:1.4,height:\"100%\",overflowX:\"auto\",position:\"relative\",zIndex:0,overflowAnchor:\"none\"},\".cm-content\":{margin:0,flexGrow:2,flexShrink:0,display:\"block\",whiteSpace:\"pre\",wordWrap:\"normal\",boxSizing:\"border-box\",minHeight:\"100%\",padding:\"4px 0\",outline:\"none\",\"&[contenteditable=true]\":{WebkitUserModify:\"read-write-plaintext-only\"}},\".cm-lineWrapping\":{whiteSpace_fallback:\"pre-wrap\",whiteSpace:\"break-spaces\",wordBreak:\"break-word\",overflowWrap:\"anywhere\",flexShrink:1},\"&light .cm-content\":{caretColor:\"black\"},\"&dark .cm-content\":{caretColor:\"white\"},\".cm-line\":{display:\"block\",padding:\"0 2px 0 6px\"},\".cm-layer\":{position:\"absolute\",left:0,top:0,contain:\"size style\",\"& > *\":{position:\"absolute\"}},\"&light .cm-selectionBackground\":{background:\"#d9d9d9\"},\"&dark .cm-selectionBackground\":{background:\"#222\"},\"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\":{background:\"#d7d4f0\"},\"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\":{background:\"#233\"},\".cm-cursorLayer\":{pointerEvents:\"none\"},\"&.cm-focused > .cm-scroller > .cm-cursorLayer\":{animation:\"steps(1) cm-blink 1.2s infinite\"},\"@keyframes cm-blink\":{\"0%\":{},\"50%\":{opacity:0},\"100%\":{}},\"@keyframes cm-blink2\":{\"0%\":{},\"50%\":{opacity:0},\"100%\":{}},\".cm-cursor, .cm-dropCursor\":{borderLeft:\"1.2px solid black\",marginLeft:\"-0.6px\",pointerEvents:\"none\"},\".cm-cursor\":{display:\"none\"},\"&dark .cm-cursor\":{borderLeftColor:\"#ddd\"},\".cm-dropCursor\":{position:\"absolute\"},\"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\":{display:\"block\"},\".cm-iso\":{unicodeBidi:\"isolate\"},\".cm-announced\":{position:\"fixed\",top:\"-10000px\"},\"@media print\":{\".cm-announced\":{display:\"none\"}},\"&light .cm-activeLine\":{backgroundColor:\"#cceeff44\"},\"&dark .cm-activeLine\":{backgroundColor:\"#99eeff33\"},\"&light .cm-specialChar\":{color:\"red\"},\"&dark .cm-specialChar\":{color:\"#f78\"},\".cm-gutters\":{flexShrink:0,display:\"flex\",height:\"100%\",boxSizing:\"border-box\",zIndex:200},\".cm-gutters-before\":{insetInlineStart:0},\".cm-gutters-after\":{insetInlineEnd:0},\"&light .cm-gutters\":{backgroundColor:\"#f5f5f5\",color:\"#6c6c6c\",border:\"0px solid #ddd\",\"&.cm-gutters-before\":{borderRightWidth:\"1px\"},\"&.cm-gutters-after\":{borderLeftWidth:\"1px\"}},\"&dark .cm-gutters\":{backgroundColor:\"#333338\",color:\"#ccc\"},\".cm-gutter\":{display:\"flex !important\",flexDirection:\"column\",flexShrink:0,boxSizing:\"border-box\",minHeight:\"100%\",overflow:\"hidden\"},\".cm-gutterElement\":{boxSizing:\"border-box\"},\".cm-lineNumbers .cm-gutterElement\":{padding:\"0 3px 0 5px\",minWidth:\"20px\",textAlign:\"right\",whiteSpace:\"nowrap\"},\"&light .cm-activeLineGutter\":{backgroundColor:\"#e2f2ff\"},\"&dark .cm-activeLineGutter\":{backgroundColor:\"#222227\"},\".cm-panels\":{boxSizing:\"border-box\",position:\"sticky\",left:0,right:0,zIndex:300},\"&light .cm-panels\":{backgroundColor:\"#f5f5f5\",color:\"black\"},\"&light .cm-panels-top\":{borderBottom:\"1px solid #ddd\"},\"&light .cm-panels-bottom\":{borderTop:\"1px solid #ddd\"},\"&dark .cm-panels\":{backgroundColor:\"#333338\",color:\"white\"},\".cm-dialog\":{padding:\"2px 19px 4px 6px\",position:\"relative\",\"& label\":{fontSize:\"80%\"}},\".cm-dialog-close\":{position:\"absolute\",top:\"3px\",right:\"4px\",backgroundColor:\"inherit\",border:\"none\",font:\"inherit\",fontSize:\"14px\",padding:\"0\"},\".cm-tab\":{display:\"inline-block\",overflow:\"hidden\",verticalAlign:\"bottom\"},\".cm-widgetBuffer\":{verticalAlign:\"text-top\",height:\"1em\",width:0,display:\"inline\"},\".cm-placeholder\":{color:\"#888\",display:\"inline-block\",verticalAlign:\"top\",userSelect:\"none\"},\".cm-highlightSpace\":{backgroundImage:\"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",backgroundPosition:\"center\"},\".cm-highlightTab\":{backgroundImage:`url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,backgroundSize:\"auto 100%\",backgroundPosition:\"right 90%\",backgroundRepeat:\"no-repeat\"},\".cm-trailingSpace\":{backgroundColor:\"#ff332255\"},\".cm-button\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",padding:\".2em 1em\",borderRadius:\"1px\"},\"&light .cm-button\":{backgroundImage:\"linear-gradient(#eff1f5, #d9d9df)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#b4b4b4, #d0d3d6)\"}},\"&dark .cm-button\":{backgroundImage:\"linear-gradient(#393939, #111)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#111, #333)\"}},\".cm-textfield\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",border:\"1px solid silver\",padding:\".2em .5em\"},\"&light .cm-textfield\":{backgroundColor:\"white\"},\"&dark .cm-textfield\":{border:\"1px solid #555\",backgroundColor:\"inherit\"}},zm),gx={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},ql=C.ie&&C.ie_version<=11;let mx=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new YS,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(C.ie&&C.ie_version<=11||C.ios&&e.composing)&&t.some(i=>i.type==\"childList\"&&i.removedNodes.length||i.type==\"characterData\"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&C.android&&e.constructor.EDIT_CONTEXT!==!1&&!(C.chrome&&C.chrome_version<126)&&(this.editContext=new bx(e),e.state.facet(Ht)&&(e.contentDOM.editContext=this.editContext.editContext)),ql&&(this.onCharData=t=>{this.queue.push({target:t.target,type:\"characterData\",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia(\"print\")),typeof ResizeObserver==\"function\"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate)<Date.now()-75&&this.onResize()}),this.resizeScroll.observe(e.scrollDOM)),this.addWindowListeners(this.win=e.win),this.start(),typeof IntersectionObserver==\"function\"&&(this.intersection=new IntersectionObserver(t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent(\"Event\")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent(\"Event\"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers(\"scroll\",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type==\"change\"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Ht)?i.root.activeElement!=this.dom:!fn(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(C.ie&&C.ie_version<=11||C.android&&C.chrome)&&!i.state.selection.main.empty&&s.focusNode&&un(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=bs(e.root);if(!t)return!1;let i=C.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&Ox(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=fn(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime<Date.now()-300&&jS(this.dom,i)?(this.view.inputState.lastFocusTime=0,e.docView.updateSelection(),!1):(this.selectionRange.setRange(i),s&&(this.selectionChanged=!0),!0)}setSelectionRange(e,t){this.selectionRange.set(e.node,e.offset,t.node,t.offset),this.selectionChanged=!1}clearSelectionRange(){this.selectionRange.set(null,0,null,0)}listenForScroll(){this.parentCheck=-1;let e=0,t=null;for(let i=this.dom;i;)if(i.nodeType==1)!t&&e<this.scrollTargets.length&&this.scrollTargets[e]==i?e++:t||(t=this.scrollTargets.slice(0,e)),t&&t.push(i),i=i.assignedSlot||i.parentNode;else if(i.nodeType==11)i=i.host;else break;if(e<this.scrollTargets.length&&!t&&(t=this.scrollTargets.slice(0,e)),t){for(let i of this.scrollTargets)i.removeEventListener(\"scroll\",this.onScroll);for(let i of this.scrollTargets=t)i.addEventListener(\"scroll\",this.onScroll)}}ignore(e){if(!this.active)return e();try{return this.stop(),e()}finally{this.start(),this.clear()}}start(){this.active||(this.observer.observe(this.dom,gx),ql&&this.dom.addEventListener(\"DOMCharacterDataModified\",this.onCharData),this.active=!0)}stop(){this.active&&(this.active=!1,this.observer.disconnect(),ql&&this.dom.removeEventListener(\"DOMCharacterDataModified\",this.onCharData))}clear(){this.processRecords(),this.queue.length=0,this.selectionChanged=!1}delayAndroidKey(e,t){var i;if(!this.delayedAndroidKey){let s=()=>{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&ss(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e==\"Enter\")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange<Date.now()-50||!!(!((i=this.delayedAndroidKey)===null||i===void 0)&&i.force)})}clearDelayedAndroidKey(){this.win.cancelAnimationFrame(this.flushingAndroidKey),this.delayedAndroidKey=null,this.flushingAndroidKey=-1}flushSoon(){this.delayedFlush<0&&(this.delayedFlush=this.view.win.requestAnimationFrame(()=>{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&fn(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new Dy(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=vm(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!go(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type==\"attributes\"),e.type==\"childList\"){let i=yu(t,e.previousSibling||e.target.previousSibling,-1),s=yu(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type==\"characterData\"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener(\"resize\",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener(\"change\",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener(\"beforeprint\",this.onPrint),e.addEventListener(\"scroll\",this.onScroll),e.document.addEventListener(\"selectionchange\",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener(\"scroll\",this.onScroll),e.removeEventListener(\"resize\",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener(\"change\",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener(\"beforeprint\",this.onPrint),e.document.removeEventListener(\"selectionchange\",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Ht)!=e.state.facet(Ht)&&(e.view.contentDOM.editContext=e.state.facet(Ht)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener(\"scroll\",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function yu(n,e,t){for(;e;){let i=de.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function xu(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return un(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function Ox(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return xu(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener(\"beforeinput\",i,!0),n.dom.ownerDocument.execCommand(\"indent\"),n.contentDOM.removeEventListener(\"beforeinput\",i,!0),t?xu(n,t):null}let bx=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&r<this.from?l=r:a==this.to&&r>this.to&&(a=r);let c=$m(e.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?\"end\":null);if(!c){let u=S.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));go(u,s)||e.dispatch({selection:u,userEvent:\"select\"});return}let f={from:c.from+l,to:c.toA+l,insert:Z.of(i.text.slice(c.from,c.toB).split(`\n`))};if((C.mac||C.android)&&f.from==o-1&&/^\\. ?$/.test(i.text)&&e.contentDOM.getAttribute(\"autocorrect\")==\"off\"&&(f={from:l,to:a,insert:Z.of([i.text.replace(\".\",\" \")])}),this.pendingContextChange=f,!e.state.readOnly){let u=this.to-this.from+(f.to-f.from+f.insert.length);Lc(e,f,S.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),f.from<f.to&&!f.insert.length&&e.inputState.composing>=0&&!/[\\\\p{Alphabetic}\\\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o<l;o++){let a=e.coordsForChar(o);r=a&&new DOMRect(a.left,a.top,a.right-a.left,a.bottom-a.top)||r||new DOMRect,s.push(r)}t.updateCharacterBounds(i.rangeStart,s)},this.handlers.textformatupdate=i=>{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a<h){let c=`text-decoration: underline ${/^[a-z]/.test(o)?o+\" \":o==\"Dashed\"?\"dashed \":o==\"Squiggle\"?\"wavy \":\"\"}${/thin/i.test(l)?1:2}px`;s.push(E.mark({attributes:{style:c}}).range(a,h))}}}e.dispatch({effects:hm.of(E.set(s))})},this.handlers.compositionstart=()=>{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=bs(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let c=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=c,this.to+=c;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(r<this.to){if(r<this.from||o>this.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent(\"input.type\")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to<e.doc.length&&this.to-t<500||this.to-this.from>1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},D=class mh{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement(\"div\"),this.scrollDOM=document.createElement(\"div\"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className=\"cm-scroller\",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement(\"div\"),this.announceDOM.className=\"cm-announced\",this.announceDOM.setAttribute(\"aria-live\",\"polite\"),this.dom=document.createElement(\"div\"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||NS(e.parent)||document,this.viewState=new Ou(e.state||L.create(e)),e.scrollTo&&e.scrollTo.is(rr)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Hi).map(s=>new Xl(s));for(let s of this.plugins)s.update(this);this.observer=new mx(this),this.inputState=new Ly(this),this.inputState.ensureHandlers(this.plugins),this.docView=new su(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent=!0,this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof ce?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(Rm))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=Dm(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(c=null)):this.observer.clear(),r.facet(L.phrases)!=this.state.facet(L.phrases))return this.setState(r);s=eu.create(this,r,e),s.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection;f=new Bl(d.empty?d:S.cursor(d.head,d.head>d.anchor?-1:1))}for(let d of u.effects)d.is(rr)&&(f=d.value.clip(this.state))}this.viewState.update(s,f),this.bidiCache=ku.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(Hs)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent(\"select.pointer\")))}finally{this.updateState=0}if(s.startState.facet(fr)!=s.state.facet(fr)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(nh))try{u(s)}catch(d){Le(this.state,d,\"update listener\")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!vm(this,c)&&h.force&&ss(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new Ou(e),this.plugins=e.facet(Hi).map(i=>new Xl(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new su(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Hi),i=e.state.facet(Hi);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new Xl(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s<this.plugins.length;s++)this.plugins[s].update(this);t!=i&&this.inputState.ensureHandlers(this.plugins)}docViewUpdate(){for(let e of this.plugins){let t=e.value;if(t&&t.docViewUpdate)try{t.docViewUpdate(this)}catch(i){Le(this.state,i,\"doc view update listener\")}}}measure(e=!0){if(this.destroyed)return;if(this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.scrollDOM,s=i.scrollTop*this.scaleY,{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollTop)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(Ng(i))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure(this);if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?\"Measure loop restarted more than 5 times\":\"Viewport failed to stabilize\");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return Le(this.state,p),wu}}),f=eu.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d<h.length;d++)if(c[d]!=wu)try{let p=h[d];p.write&&p.write(c[d],this)}catch(p){Le(this.state,p)}if(u&&this.docView.updateSelection(!0),!f.viewportChanged&&this.measureRequests.length==0){if(this.viewState.editorHeight)if(this.viewState.scrollTarget){this.docView.scrollIntoView(this.viewState.scrollTarget),this.viewState.scrollTarget=null,o=-1;continue}else{let p=(r<0?this.viewState.heightMap.height:this.viewState.lineBlockAt(r).top)-o;if(p>1||p<-1){s=s+p,i.scrollTop=s/this.scaleY,o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(nh))l(t)}get themeClasses(){return ph+\" \"+(this.state.facet(dh)?Vm:Wm)+\" \"+this.state.facet(fr)}updateAttrs(){let e=Qu(this,cm,{class:\"cm-editor\"+(this.hasFocus?\" cm-focused \":\" \")+this.themeClasses}),t={spellcheck:\"false\",autocorrect:\"off\",autocapitalize:\"off\",writingsuggestions:\"false\",translate:\"no\",contenteditable:this.state.facet(Ht)?\"true\":\"false\",class:\"cm-content\",style:`${C.tabSize}: ${this.state.tabSize}`,role:\"textbox\",\"aria-multiline\":\"true\"};this.state.readOnly&&(t[\"aria-readonly\"]=\"true\"),Qu(this,Zc,t);let i=this.observer.ignore(()=>{let s=Hf(this.contentDOM,this.contentAttrs,t),r=Hf(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(mh.announce)){t&&(this.announceDOM.textContent=\"\"),t=!1;let r=this.announceDOM.appendChild(document.createElement(\"div\"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(Hs);let e=this.state.facet(mh.cspNonce);me.mount(this.root,this.styleModules.concat(px).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error(\"Reading the editor layout isn't allowed during an update\");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;t<this.measureRequests.length;t++)if(this.measureRequests[t].key===e.key){this.measureRequests[t]=e;return}}this.measureRequests.push(e)}}plugin(e){let t=this.pluginMap.get(e);return(t===void 0||t&&t.plugin!=e)&&this.pluginMap.set(e,t=this.plugins.find(i=>i.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return Vl(this,e,nu(this,e,t,i))}moveByGroup(e,t){return Vl(this,e,nu(this,e,t,i=>Cy(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return S.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return Py(this,e,t,i)}moveVertically(e,t,i){return Vl(this,e,Ty(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=ch(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),ch(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[ei.find(r,e-s.from,-1,t)];return co(i,o.dir==le.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(om)||e<this.viewport.from||e>this.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>Sx)return Kg(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||Ug(r.isolates,i=Jf(this,e))))return r.order;i||(i=Jf(this,e));let s=ey(e.text,t,i);return this.bidiCache.push(new ku(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||C.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{Yg(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return rr.of(new Bl(typeof e==\"number\"?S.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return rr.of(new Bl(S.cursor(i.from),\"start\",\"start\",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e==\"boolean\"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return Re.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Re.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=me.newName(),s=[fr.of(i),Hs.of(gh(`.${i}`,e))];return t&&t.dark&&s.push(dh.of(!0)),s}static baseTheme(e){return xt.lowest(Hs.of(gh(\".\"+ph,e,zm)))}static findFromDOM(e){var t;let i=e.querySelector(\".cm-content\"),s=i&&de.get(i)||de.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}};D.styleModule=Hs;D.inputHandler=nm;D.clipboardInputFilter=Rc;D.clipboardOutputFilter=Dc;D.scrollHandler=am;D.focusChangeEffect=rm;D.perLineTextDirection=om;D.exceptionSink=sm;D.updateListener=nh;D.editable=Ht;D.mouseSelectionStyle=im;D.dragMovesSelection=tm;D.clickAddsSelectionRange=em;D.decorations=nl;D.blockWrappers=fm;D.outerDecorations=Bc;D.atomicRanges=In;D.bidiIsolatedRanges=um;D.scrollMargins=dm;D.darkTheme=dh;D.cspNonce=k.define({combine:n=>n.length?n[0]:\"\"});D.contentAttributes=Zc;D.editorAttributes=cm;D.lineWrapping=D.contentAttributes.of({class:\"cm-lineWrapping\"});D.announce=B.define();const Sx=4096,wu={};let ku=class qm{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:le.LTR;for(let r=Math.max(0,e.length-10);r<e.length;r++){let o=e[r];o.dir==s&&!t.touchesRange(o.from,o.to)&&i.push(new qm(t.mapPos(o.from,1),t.mapPos(o.to,-1),o.dir,o.isolates,!1,o.order))}return i}};function Qu(n,e,t){for(let i=n.state.facet(e),s=i.length-1;s>=0;s--){let r=i[s],o=typeof r==\"function\"?r(n):r;o&&Pc(o,t)}return t}const yx=C.mac?\"mac\":C.windows?\"win\":C.linux?\"linux\":\"key\";function xx(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i==\"Space\"&&(i=\" \");let s,r,o,l;for(let a=0;a<t.length-1;++a){const h=t[a];if(/^(cmd|meta|m)$/i.test(h))l=!0;else if(/^a(lt)?$/i.test(h))s=!0;else if(/^(c|ctrl|control)$/i.test(h))r=!0;else if(/^s(hift)?$/i.test(h))o=!0;else if(/^mod$/i.test(h))e==\"mac\"?l=!0:r=!0;else throw new Error(\"Unrecognized modifier name: \"+h)}return s&&(i=\"Alt-\"+i),r&&(i=\"Ctrl-\"+i),l&&(i=\"Meta-\"+i),o&&(i=\"Shift-\"+i),i}function ur(n,e,t){return e.altKey&&(n=\"Alt-\"+n),e.ctrlKey&&(n=\"Ctrl-\"+n),e.metaKey&&(n=\"Meta-\"+n),t!==!1&&e.shiftKey&&(n=\"Shift-\"+n),n}const wx=xt.default(D.domEventHandlers({keydown(n,e){return $x(kx(e.state),n,e,\"editor\")}})),_n=k.define({enables:wx}),vu=new WeakMap;function kx(n){let e=n.facet(_n),t=vu.get(e);return t||vu.set(e,t=vx(e.reduce((i,s)=>i.concat(s),[]))),t}let gi=null;const Qx=4e3;function vx(n,e=yx){let t=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error(\"Key binding \"+o+\" is used both as a regular binding and as a multi-stroke prefix\")},r=(o,l,a,h,c)=>{var f,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(O=>xx(O,e));for(let O=1;O<p.length;O++){let y=p.slice(0,O).join(\" \");s(y,!0),d[y]||(d[y]={preventDefault:!0,stopPropagation:!1,run:[x=>{let v=gi={view:x,prefix:y,scope:o};return setTimeout(()=>{gi==v&&(gi=null)},Qx),!0}]})}let g=p.join(\" \");s(g,!1);let m=d[g]||(d[g]={preventDefault:!1,stopPropagation:!1,run:((u=(f=d._any)===null||f===void 0?void 0:f.run)===null||u===void 0?void 0:u.slice())||[]});a&&m.run.push(a),h&&(m.preventDefault=!0),c&&(m.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(\" \"):[\"editor\"];if(o.any)for(let h of l){let c=t[h]||(t[h]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:f}=o;for(let u in c)c[u].run.push(d=>f(d,Oh))}let a=o[e]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,\"Shift-\"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}let Oh=null;function $x(n,e,t,i){Oh=e;let s=mg(e),r=Me(s,0),o=ut(r)==s.length&&s!=\" \",l=\"\",a=!1,h=!1,c=!1;gi&&gi.view==t&&gi.scope==i&&(l=gi.prefix+\" \",Cm.indexOf(e.keyCode)<0&&(h=!0,gi=null));let f=new Set,u=m=>{if(m){for(let O of m.run)if(!f.has(O)&&(f.add(O),O(t)))return m.stopPropagation&&(c=!0),!0;m.preventDefault&&(m.stopPropagation&&(c=!0),h=!0)}return!1},d=n[i],p,g;return d&&(u(d[l+ur(s,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(C.windows&&e.ctrlKey&&e.altKey)&&!(C.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=Og[e.keyCode])&&p!=s?(u(d[l+ur(p,e,!0)])||e.shiftKey&&(g=bg[e.keyCode])!=s&&g!=p&&u(d[l+ur(g,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+ur(s,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&c&&e.stopPropagation(),Oh=null,a}class Yn{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement(\"div\");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+\"px\",e.style.top=this.top+\"px\",this.width!=null&&(e.style.width=this.width+\"px\"),e.style.height=this.height+\"px\"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=Im(e);return[new Yn(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return Px(e,t,i)}}function Im(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==le.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function $u(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function Px(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==le.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=Im(n),h=o.querySelector(\".cm-line\"),c=h&&window.getComputedStyle(h),f=l.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),u=l.right-(c?parseInt(c.paddingRight):0),d=hh(n,i,1),p=hh(n,s,-1),g=d.type==ke.Text?d:null,m=p.type==ke.Text?p:null;if(g&&(n.lineWrapping||d.widgetLineBreaks)&&(g=$u(n,i,1,g)),m&&(n.lineWrapping||p.widgetLineBreaks)&&(m=$u(n,s,-1,m)),g&&m&&g.from==m.from&&g.to==m.to)return y(x(t.from,t.to,g));{let w=g?x(t.from,null,g):v(d,!1),Q=m?x(null,t.to,m):v(p,!0),$=[];return(g||d).to<(m||p).from-(g&&m?1:0)||d.widgetLineBreaks>1&&w.bottom+n.defaultLineHeight/2<Q.top?$.push(O(f,w.bottom,u,Q.top)):w.bottom<Q.top&&n.elementAtHeight((w.bottom+Q.top)/2).type==ke.Text&&(w.bottom=Q.top=(w.bottom+Q.top)/2),y(w).concat($).concat(y(Q))}function O(w,Q,$,W){return new Yn(e,w-a.left,Q-a.top,Math.max(0,$-w),W-Q)}function y({top:w,bottom:Q,horizontal:$}){let W=[];for(let I=0;I<$.length;I+=2)W.push(O($[I],w,$[I+1],Q));return W}function x(w,Q,$){let W=1e9,I=-1e9,F=[];function q(N,ie,Pe,ze,vt){let ye=n.coordsAtPos(N,N==$.to?-2:2),He=n.coordsAtPos(Pe,Pe==$.from?2:-2);!ye||!He||(W=Math.min(ye.top,He.top,W),I=Math.max(ye.bottom,He.bottom,I),vt==le.LTR?F.push(r&&ie?f:ye.left,r&&ze?u:He.right):F.push(!r&&ze?f:He.left,!r&&ie?u:ye.right))}let X=w??$.from,G=Q??$.to;for(let N of n.visibleRanges)if(N.to>X&&N.from<G)for(let ie=Math.max(N.from,X),Pe=Math.min(N.to,G);;){let ze=n.state.doc.lineAt(ie);for(let vt of n.bidiSpans(ze)){let ye=vt.from+ze.from,He=vt.to+ze.from;if(ye>=Pe)break;He>ie&&q(Math.max(ye,ie),w==null&&ye<=X,Math.min(He,Pe),Q==null&&He>=G,vt.dir)}if(ie=ze.to+1,ie>=Pe)break}return F.length==0&&q(X,w==null,G,Q==null,n.textDirection),{top:W,bottom:I,horizontal:F}}function v(w,Q){let $=l.top+(Q?w.top:w.bottom);return{top:$,bottom:$,horizontal:[]}}}function Cx(n,e){return n.constructor==e.constructor&&n.eq(e)}class Tx{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement(\"div\")),this.dom.classList.add(\"cm-layer\"),t.above&&this.dom.classList.add(\"cm-layer-above\"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute(\"aria-hidden\",\"true\"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(Nr)!=e.state.facet(Nr)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(Nr);for(;t<i.length&&i[t]!=this.layer;)t++;this.dom.style.zIndex=String((this.layer.above?150:-1)-t)}measure(){return this.layer.markers(this.view)}scale(){let{scaleX:e,scaleY:t}=this.view;(e!=this.scaleX||t!=this.scaleY)&&(this.scaleX=e,this.scaleY=t,this.dom.style.transform=`scale(${1/e}, ${1/t})`)}draw(e){if(e.length!=this.drawn.length||e.some((t,i)=>!Cx(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e,C.safari&&C.safari_version>=26&&(this.dom.style.display=this.dom.firstChild?\"\":\"none\")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const Nr=k.define();function _m(n){return[Re.define(e=>new Tx(e,n)),Nr.of(n)]}const Pn=k.define({combine(n){return _t(n,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function Mx(n={}){return[Pn.of(n),Ax,Rx,Dx,lm.of(!0)]}function Ym(n){return n.startState.facet(Pn)!=n.state.facet(Pn)}const Ax=_m({above:!0,markers(n){let{state:e}=n,t=e.facet(Pn),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor){let o=r?\"cm-cursor cm-cursor-primary\":\"cm-cursor cm-cursor-secondary\",l=s.empty?s:S.cursor(s.head,s.head>s.anchor?-1:1);for(let a of Yn.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName==\"cm-blink\"?\"cm-blink2\":\"cm-blink\");let t=Ym(n);return t&&Pu(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){Pu(e.state,n)},class:\"cm-cursorLayer\"});function Pu(n,e){e.style.animationDuration=n.facet(Pn).cursorBlinkRate+\"ms\"}const Rx=_m({above:!1,markers(n){return n.state.selection.ranges.map(e=>e.empty?[]:Yn.forRange(n,\"cm-selectionBackground\",e)).reduce((e,t)=>e.concat(t))},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||Ym(n)},class:\"cm-selectionLayer\"}),Dx=xt.highest(D.theme({\".cm-line\":{\"& ::selection, &::selection\":{backgroundColor:\"transparent !important\"},caretColor:\"transparent !important\"},\".cm-content\":{caretColor:\"transparent !important\",\"& :focus\":{caretColor:\"initial !important\",\"&::selection, & ::selection\":{backgroundColor:\"Highlight !important\"}}}})),Nm=B.define({map(n,e){return n==null?null:e.mapPos(n)}}),Js=Se.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(Nm)?i.value:t,n)}}),Zx=Re.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(Js);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement(\"div\")),this.cursor.className=\"cm-dropCursor\"),(n.startState.field(Js)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(Js),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+\"px\",this.cursor.style.top=n.top/t+\"px\",this.cursor.style.height=n.height/t+\"px\"):this.cursor.style.left=\"-100000px\"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(Js)!=n&&this.view.dispatch({effects:Nm.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function Bx(){return[Js,Zx]}function Cu(n,e,t,i,s){e.lastIndex=0;for(let r=n.iterRange(t,i),o=t,l;!r.next().done;o+=r.value.length)if(!r.lineBreak)for(;l=e.exec(r.value);)s(o+l.index,l)}function Xx(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:s,to:r}of t)s=Math.max(n.state.doc.lineAt(s).from,s-e),r=Math.min(n.state.doc.lineAt(r).to,r+e),i.length&&i[i.length-1].to>=s?i[i.length-1].to=r:i.push({from:s,to:r});return i}class Lx{constructor(e){const{regexp:t,decoration:i,decorate:s,boundary:r,maxLength:o=1e3}=e;if(!t.global)throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");if(this.regexp=t,s)this.addMatch=(l,a,h,c)=>s(c,h,h+l[0].length,l,a);else if(typeof i==\"function\")this.addMatch=(l,a,h,c)=>{let f=i(l,a,h);f&&c(h,h+l[0].length,f)};else if(i)this.addMatch=(l,a,h,c)=>c(h,h+l[0].length,i);else throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");this.boundary=r,this.maxLength=o}createDeco(e){let t=new ai,i=t.add.bind(t);for(let{from:s,to:r}of Xx(e,this.maxLength))Cu(e.state.doc,this.regexp,s,r,(o,l)=>this.addMatch(l,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,s=-1;return e.docChanged&&e.changes.iterChanges((r,o,l,a)=>{a>=e.view.viewport.from&&l<=e.view.viewport.to&&(i=Math.min(l,i),s=Math.max(a,s))}),e.viewportMoved||s-i>1e3?this.createDeco(e.view):s>-1?this.updateRange(e.view,t.map(e.changes),i,s):t}updateRange(e,t,i,s){for(let r of e.visibleRanges){let o=Math.max(r.from,i),l=Math.min(r.to,s);if(l>=o){let a=e.state.doc.lineAt(o),h=a.to<l?e.state.doc.lineAt(l):a,c=Math.max(r.from,a.from),f=Math.min(r.to,h.to);if(this.boundary){for(;o>a.from;o--)if(this.boundary.test(a.text[o-1-a.from])){c=o;break}for(;l<h.to;l++)if(this.boundary.test(h.text[l-h.from])){f=l;break}}let u=[],d,p=(g,m,O)=>u.push(O.range(g,m));if(a==h)for(this.regexp.lastIndex=c-a.from;(d=this.regexp.exec(a.text))&&d.index<f-a.from;)this.addMatch(d,e,d.index+a.from,p);else Cu(e.state.doc,this.regexp,c,f,(g,m)=>this.addMatch(m,e,g,p));t=t.update({filterFrom:c,filterTo:f,filter:(g,m)=>g<c||m>f,add:u})}}return t}}const bh=/x/.unicode!=null?\"gu\":\"g\",Ex=new RegExp(`[\\0-\\b\n-\u001f-­؜​‎‏\\u2028\\u2029‭‮⁦⁧⁩\\uFEFF￹-￼]`,bh),Wx={0:\"null\",7:\"bell\",8:\"backspace\",10:\"newline\",11:\"vertical tab\",13:\"carriage return\",27:\"escape\",8203:\"zero width space\",8204:\"zero width non-joiner\",8205:\"zero width joiner\",8206:\"left-to-right mark\",8207:\"right-to-left mark\",8232:\"line separator\",8237:\"left-to-right override\",8238:\"right-to-left override\",8294:\"left-to-right isolate\",8295:\"right-to-left isolate\",8297:\"pop directional isolate\",8233:\"paragraph separator\",65279:\"zero width no-break space\",65532:\"object replacement\"};let Il=null;function Vx(){var n;if(Il==null&&typeof document<\"u\"&&document.body){let e=document.body.style;Il=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Il||!1}const jr=k.define({combine(n){let e=_t(n,{render:null,specialChars:Ex,addSpecialChars:null});return(e.replaceTabs=!Vx())&&(e.specialChars=new RegExp(\"\t|\"+e.specialChars.source,bh)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+\"|\"+e.addSpecialChars.source,bh)),e}});function zx(n={}){return[jr.of(n),qx()]}let Tu=null;function qx(){return Tu||(Tu=Re.fromClass(class{constructor(n){this.view=n,this.decorations=E.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(jr)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Lx({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=Me(e[0],0);if(r==9){let o=s.lineAt(i),l=t.state.tabSize,a=Ls(o.text,l,i-o.from);return E.replace({widget:new Nx((l-a%l)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=E.replace({widget:new Yx(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(jr);n.startState.facet(jr)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const Ix=\"•\";function _x(n){return n>=32?Ix:n==10?\"␤\":String.fromCharCode(9216+n)}class Yx extends Yt{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=_x(this.code),i=e.state.phrase(\"Control character\")+\" \"+(Wx[this.code]||\"0x\"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement(\"span\");return r.textContent=t,r.title=i,r.setAttribute(\"aria-label\",i),r.className=\"cm-specialChar\",r}ignoreEvent(){return!1}}class Nx extends Yt{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement(\"span\");return e.textContent=\"\t\",e.className=\"cm-tab\",e.style.width=this.width+\"px\",e}ignoreEvent(){return!1}}function jx(){return Hx}const Gx=E.line({class:\"cm-activeLine\"}),Hx=Re.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(Gx.range(s.from)),e=s.from)}return E.set(t)}},{decorations:n=>n.decorations}),Sh=2e3;function Fx(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>Sh||t.off>Sh||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let a=i;a<=s;a++){let h=n.doc.line(a);h.length<=l&&r.push(S.range(h.from+o,h.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let a=i;a<=s;a++){let h=n.doc.line(a),c=kn(h.text,o,n.tabSize,!0);if(c<0)r.push(S.cursor(h.to));else{let f=kn(h.text,l,n.tabSize);r.push(S.range(h.from+c,h.from+f))}}}return r}function Ux(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function Mu(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>Sh?-1:s==i.length?Ux(n,e.clientX):Ls(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function Kx(n,e){let t=Mu(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let l=Mu(n,s);if(!l)return i;let a=Fx(n.state,t,l);return a.length?o?S.create(a.concat(i.ranges)):S.create(a):i}}:null}function Jx(n){let e=(t=>t.altKey&&t.button==0);return D.mouseSelectionStyle.of((t,i)=>e(i)?Kx(t,i):null)}const ew={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},tw={style:\"cursor: crosshair\"};function iw(n={}){let[e,t]=ew[n.key||\"Alt\"],i=Re.fromClass(class{constructor(s){this.view=s,this.isDown=!1}set(s){this.isDown!=s&&(this.isDown=s,this.view.update([]))}},{eventObservers:{keydown(s){this.set(s.keyCode==e||t(s))},keyup(s){(s.keyCode==e||!t(s))&&this.set(!1)},mousemove(s){this.set(t(s))}}});return[i,D.contentAttributes.of(s=>{var r;return!((r=s.plugin(i))===null||r===void 0)&&r.isDown?tw:null})]}const dr=\"-10000px\";class jm{constructor(e,t,i,s){this.facet=t,this.createTooltipView=i,this.removeTooltipView=s,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let r=null;this.tooltipViews=this.tooltips.map(o=>r=i(o,r))}update(e,t){var i;let s=e.state.facet(this.facet),r=s.filter(a=>a);if(s===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;a<r.length;a++){let h=r[a],c=-1;if(h){for(let f=0;f<this.tooltips.length;f++){let u=this.tooltips[f];u&&u.create==h.create&&(c=f)}if(c<0)o[a]=this.createTooltipView(h,a?o[a-1]:null),l&&(l[a]=!!h.above);else{let f=o[a]=this.tooltipViews[c];l&&(l[a]=t[c]),f.update&&f.update(e)}}}for(let a of this.tooltipViews)o.indexOf(a)<0&&(this.removeTooltipView(a),(i=a.destroy)===null||i===void 0||i.call(a));return t&&(l.forEach((a,h)=>t[h]=a),t.length=l.length),this.input=s,this.tooltips=r,this.tooltipViews=o,!0}}function sw(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const _l=k.define({combine:n=>{var e,t,i;return{position:C.ios?\"absolute\":((e=n.find(s=>s.position))===null||e===void 0?void 0:e.position)||\"fixed\",parent:((t=n.find(s=>s.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(s=>s.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||sw}}}),Au=new WeakMap,Ec=Re.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(_l);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver==\"function\"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new jm(n,Wc,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver==\"function\"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener(\"resize\",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement(\"div\"),this.container.style.position=\"relative\",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(_l);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let s of this.manager.tooltipViews)s.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let s of this.manager.tooltipViews)this.container.appendChild(s.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add(\"cm-tooltip\"),n.arrow&&!t.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")){let s=document.createElement(\"div\");s.className=\"cm-tooltip-arrow\",t.dom.appendChild(s)}return t.dom.style.position=this.position,t.dom.style.top=dr,t.dom.style.left=\"0px\",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener(\"resize\",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position==\"fixed\"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(C.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position==\"absolute\")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(n=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),s=Xc(this.view);return{visible:{left:i.left+s.left,top:i.top+s.top,right:i.right-s.right,bottom:i.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(_l).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position=\"absolute\";for(let l of this.manager.tooltipViews)l.dom.style.position=\"absolute\"}let{visible:t,space:i,scaleX:s,scaleY:r}=n,o=[];for(let l=0;l<this.manager.tooltips.length;l++){let a=this.manager.tooltips[l],h=this.manager.tooltipViews[l],{dom:c}=h,f=n.pos[l],u=n.size[l];if(!f||a.clip!==!1&&(f.bottom<=Math.max(t.top,i.top)||f.top>=Math.min(t.bottom,i.bottom)||f.right<Math.max(t.left,i.left)-.1||f.left>Math.min(t.right,i.right)+.1)){c.style.top=dr;continue}let d=a.arrow?h.dom.querySelector(\".cm-tooltip-arrow\"):null,p=d?7:0,g=u.right-u.left,m=(e=Au.get(h))!==null&&e!==void 0?e:u.bottom-u.top,O=h.offset||rw,y=this.view.textDirection==le.LTR,x=u.width>i.right-i.left?y?i.left:i.right-u.width:y?Math.max(i.left,Math.min(f.left-(d?14:0)+O.x,i.right-g)):Math.min(Math.max(i.left,f.left-g+(d?14:0)-O.x),i.right-g),v=this.above[l];!a.strictSide&&(v?f.top-m-p-O.y<i.top:f.bottom+m+p+O.y>i.bottom)&&v==i.bottom-f.bottom>f.top-i.top&&(v=this.above[l]=!v);let w=(v?f.top-i.top:i.bottom-f.bottom)-p;if(w<m&&h.resize!==!1){if(w<this.view.defaultLineHeight){c.style.top=dr;continue}Au.set(h,m),c.style.height=(m=w)/r+\"px\"}else c.style.height&&(c.style.height=\"\");let Q=v?f.top-m-p-O.y:f.bottom+p+O.y,$=x+g;if(h.overlap!==!0)for(let W of o)W.left<$&&W.right>x&&W.top<Q+m&&W.bottom>Q&&(Q=v?W.top-m-2-p:W.bottom+p+2);if(this.position==\"absolute\"?(c.style.top=(Q-n.parent.top)/r+\"px\",Ru(c,(x-n.parent.left)/s)):(c.style.top=Q/r+\"px\",Ru(c,x/s)),d){let W=f.left+(y?O.x:-O.x)-(x+14-7);d.style.left=W/s+\"px\"}h.overlap!==!0&&o.push({left:x,top:Q,right:$,bottom:Q+m}),c.classList.toggle(\"cm-tooltip-above\",v),c.classList.toggle(\"cm-tooltip-below\",!v),h.positioned&&h.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=dr}},{eventObservers:{scroll(){this.maybeMeasure()}}});function Ru(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+\"px\")}const nw=D.baseTheme({\".cm-tooltip\":{zIndex:500,boxSizing:\"border-box\"},\"&light .cm-tooltip\":{border:\"1px solid #bbb\",backgroundColor:\"#f5f5f5\"},\"&light .cm-tooltip-section:not(:first-child)\":{borderTop:\"1px solid #bbb\"},\"&dark .cm-tooltip\":{backgroundColor:\"#333338\",color:\"white\"},\".cm-tooltip-arrow\":{height:\"7px\",width:\"14px\",position:\"absolute\",zIndex:-1,overflow:\"hidden\",\"&:before, &:after\":{content:\"''\",position:\"absolute\",width:0,height:0,borderLeft:\"7px solid transparent\",borderRight:\"7px solid transparent\"},\".cm-tooltip-above &\":{bottom:\"-7px\",\"&:before\":{borderTop:\"7px solid #bbb\"},\"&:after\":{borderTop:\"7px solid #f5f5f5\",bottom:\"1px\"}},\".cm-tooltip-below &\":{top:\"-7px\",\"&:before\":{borderBottom:\"7px solid #bbb\"},\"&:after\":{borderBottom:\"7px solid #f5f5f5\",top:\"1px\"}}},\"&dark .cm-tooltip .cm-tooltip-arrow\":{\"&:before\":{borderTopColor:\"#333338\",borderBottomColor:\"#333338\"},\"&:after\":{borderTopColor:\"transparent\",borderBottomColor:\"transparent\"}}}),rw={x:0,y:0},Wc=k.define({enables:[Ec,nw]}),Oo=k.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])});class al{static create(e){return new al(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement(\"div\"),this.dom.classList.add(\"cm-tooltip-hover\"),this.manager=new jm(e,Oo,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add(\"cm-tooltip-section\"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let s=i[e];if(s!==void 0){if(t===void 0)t=s;else if(t!==s)return}}return t}get offset(){return this.passProp(\"offset\")}get getCoords(){return this.passProp(\"getCoords\")}get overlap(){return this.passProp(\"overlap\")}get resize(){return this.passProp(\"resize\")}}const ow=Wc.compute([Oo],n=>{let e=n.facet(Oo);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:al.create,above:e[0].above,arrow:e.some(t=>t.arrow)}});class lw{constructor(e,t,i,s,r){this.view=e,this.source=t,this.field=i,this.setHover=s,this.hoverTime=r,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener(\"mouseleave\",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener(\"mousemove\",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;e<this.hoverTime?this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime-e):this.startHover()}startHover(){clearTimeout(this.restartTimeout);let{view:e,lastMove:t}=this,i=e.docView.tile.nearest(t.target);if(!i)return;let s,r=1;if(i.isWidget())s=i.posAtStart;else{if(s=e.posAtCoords(t),s==null)return;let l=e.coordsAtPos(s);if(!l||t.y<l.top||t.y>l.bottom||t.x<l.left-e.defaultCharacterWidth||t.x>l.right+e.defaultCharacterWidth)return;let a=e.bidiSpans(e.state.doc.lineAt(s)).find(c=>c.from<=s&&c.to>=s),h=a&&a.dir==le.RTL?-1:1;r=t.x<l.left?-h:h}let o=this.source(e,s,r);if(o?.then){let l=this.pending={pos:s};o.then(a=>{this.pending==l&&(this.pending=null,a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])}))},a=>Le(e.state,a,\"hover tooltip\"))}else o&&!(Array.isArray(o)&&!o.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(o)?o:[o])})}get tooltip(){let e=this.view.plugin(Ec),t=e?e.manager.tooltips.findIndex(i=>i.create==al.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:s,tooltip:r}=this;if(s.length&&r&&!aw(r.dom,e)||this.pending){let{pos:o}=s[0]||this.pending,l=(i=(t=s[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==l?this.view.posAtCoords(this.lastMove)!=o:!hw(this.view,o,l,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener(\"mouseleave\",t),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener(\"mouseleave\",t)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener(\"mouseleave\",this.mouseleave),this.view.dom.removeEventListener(\"mousemove\",this.mousemove)}}const pr=4;function aw(n,e){let{left:t,right:i,top:s,bottom:r}=n.getBoundingClientRect(),o;if(o=n.querySelector(\".cm-tooltip-arrow\")){let l=o.getBoundingClientRect();s=Math.min(l.top,s),r=Math.max(l.bottom,r)}return e.clientX>=t-pr&&e.clientX<=i+pr&&e.clientY>=s-pr&&e.clientY<=r+pr}function hw(n,e,t,i,s,r){let o=n.scrollDOM.getBoundingClientRect(),l=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.right<i||o.top>s||Math.min(o.bottom,l)<s)return!1;let a=n.posAtCoords({x:i,y:s},!1);return a>=e&&a<=t}function cw(n,e={}){let t=B.define(),i=Se.define({create(){return[]},update(s,r){if(s.length&&(e.hideOnChange&&(r.docChanged||r.selection)?s=[]:e.hideOn&&(s=s.filter(o=>!e.hideOn(r,o))),r.docChanged)){let o=[];for(let l of s){let a=r.changes.mapPos(l.pos,-1,te.TrackDel);if(a!=null){let h=Object.assign(Object.create(null),l);h.pos=a,h.end!=null&&(h.end=r.changes.mapPos(h.end)),o.push(h)}}s=o}for(let o of r.effects)o.is(t)&&(s=o.value),o.is(fw)&&(s=[]);return s},provide:s=>Oo.from(s)});return{active:i,extension:[i,Re.define(s=>new lw(s,n,i,t,e.hoverTime||300)),ow]}}function Gm(n,e){let t=n.plugin(Ec);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}const fw=B.define(),Du=k.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function uw(n,e){let t=n.plugin(Hm),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}const Hm=Re.fromClass(class{constructor(n){this.input=n.state.facet(yh),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(Du);this.top=new gr(n,!0,e.topContainer),this.bottom=new gr(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add(\"cm-panel\"),t.mount&&t.mount()}update(n){let e=n.state.facet(Du);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new gr(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new gr(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(yh);if(t!=this.input){let i=t.filter(a=>a),s=[],r=[],o=[],l=[];for(let a of i){let h=this.specs.indexOf(a),c;h<0?(c=a(n.view),l.push(c)):(c=this.panels[h],c.update&&c.update(n)),s.push(c),(c.top?r:o).push(c)}this.specs=i,this.panels=s,this.top.sync(r),this.bottom.sync(o);for(let a of l)a.dom.classList.add(\"cm-panel\"),a.mount&&a.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>D.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})});let gr=class{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes=\"\",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement(\"div\"),this.dom.className=this.top?\"cm-panels cm-panels-top\":\"cm-panels cm-panels-bottom\",this.dom.style[this.top?\"top\":\"bottom\"]=\"0\";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=Zu(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=Zu(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(\" \"))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(\" \"))e&&this.container.classList.add(e)}}};function Zu(n){let e=n.nextSibling;return n.remove(),e}const yh=k.define({enables:Hm});let ci=class extends Ve{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};ci.prototype.elementClass=\"\";ci.prototype.toDOM=void 0;ci.prototype.mapMode=te.TrackBefore;ci.prototype.startSide=ci.prototype.endSide=-1;ci.prototype.point=!0;const Gr=k.define(),dw=k.define(),pw={class:\"\",renderEmptyElements:!1,elementStyle:\"\",markers:()=>M.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:\"before\"},pn=k.define();function gw(n){return[Fm(),pn.of({...pw,...n})]}const Bu=k.define({combine:n=>n.some(e=>e)});function Fm(n){return[mw]}const mw=Re.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement(\"div\"),this.dom.className=\"cm-gutters cm-gutters-before\",this.dom.setAttribute(\"aria-hidden\",\"true\"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+\"px\",this.gutters=n.state.facet(pn).map(e=>new Lu(n,e)),this.fixed=!n.state.facet(Bu);for(let e of this.gutters)e.config.side==\"after\"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position=\"sticky\"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement(\"div\"),this.domAfter.className=\"cm-gutters cm-gutters-after\",this.domAfter.setAttribute(\"aria-hidden\",\"true\"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+\"px\",this.domAfter.style.position=this.fixed?\"sticky\":\"\",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+\"px\";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(Bu)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?\"sticky\":\"\",this.domAfter&&(this.domAfter.style.position=this.fixed?\"sticky\":\"\")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=M.iter(this.view.state.facet(Gr),this.view.viewport.from),i=[],s=this.gutters.map(r=>new Ow(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==ke.Text&&o){xh(t,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==ke.Text){xh(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(pn),t=n.state.facet(pn),i=n.docChanged||n.heightChanged||n.viewportChanged||!M.eq(n.startState.facet(Gr),n.state.facet(Gr),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new Lu(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side==\"after\"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>D.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==le.LTR?{left:i,right:s}:{right:i,left:s}})});function Xu(n){return Array.isArray(n)?n:[n]}function xh(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class Ow{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=M.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let l=new Um(e,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];xh(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(dw)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class Lu{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement(\"div\"),this.dom.className=\"cm-gutter\"+(this.config.class?\" \"+this.config.class:\"\");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,s)&&s.preventDefault()});this.markers=Xu(t.markers(e)),t.initialSpacer&&(this.spacer=new Um(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+=\"visibility: hidden; pointer-events: none\")}update(e){let t=this.markers;if(this.markers=Xu(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!M.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class Um{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement(\"div\"),this.dom.className=\"cm-gutterElement\",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+\"px\"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+\"px\":\"\"),bw(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i=\"cm-gutterElement\",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=r<t.length?t[r++]:null,h=!1;if(a){let c=a.elementClass;c&&(i+=\" \"+c);for(let f=o;f<this.markers.length;f++)if(this.markers[f].compare(a)){l=f,h=!0;break}}else l=this.markers.length;for(;o<l;){let c=this.markers[o++];if(c.toDOM){c.destroy(s);let f=s.nextSibling;s.remove(),s=f}}if(!a)break;a.toDOM&&(h?s=s.nextSibling:this.dom.insertBefore(a.toDOM(e),s)),h&&o++}this.dom.className=i,this.markers=t}destroy(){this.setMarkers(null,[])}}function bw(n,e){if(n.length!=e.length)return!1;for(let t=0;t<n.length;t++)if(!n[t].compare(e[t]))return!1;return!0}const Sw=k.define(),yw=k.define(),Fi=k.define({combine(n){return _t(n,{formatNumber:String,domEventHandlers:{}},{domEventHandlers(e,t){let i=Object.assign({},e);for(let s in t){let r=i[s],o=t[s];i[s]=r?(l,a,h)=>r(l,a,h)||o(l,a,h):o}return i}})}});class Yl extends ci{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function Nl(n,e){return n.state.facet(Fi).formatNumber(e,n.state)}const xw=pn.compute([Fi],n=>({class:\"cm-lineNumbers\",renderEmptyElements:!1,markers(e){return e.state.facet(Sw)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new Yl(Nl(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(yw)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(Fi)!=e.state.facet(Fi),initialSpacer(e){return new Yl(Nl(e,Eu(e.state.doc.lines)))},updateSpacer(e,t){let i=Nl(t.view,Eu(t.view.state.doc.lines));return i==e.number?e:new Yl(i)},domEventHandlers:n.facet(Fi).domEventHandlers,side:\"before\"}));function ww(n={}){return[Fi.of(n),Fm(),xw]}function Eu(n){let e=9;for(;e<n;)e=e*10+9;return e}const kw=new class extends ci{constructor(){super(...arguments),this.elementClass=\"cm-activeLineGutter\"}},Qw=Gr.compute([\"selection\"],n=>{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(kw.range(s)))}return M.of(e)});function vw(){return Qw}const Km=1024;let $w=0;class et{constructor(e,t){this.from=e,this.to=t}}class V{constructor(e={}){this.id=$w++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error(\"This node type doesn't define a deserialize function\")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError(\"Can't add per-node props to node types\");return typeof e!=\"function\"&&(e=De.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}V.closedBy=new V({deserialize:n=>n.split(\" \")});V.openedBy=new V({deserialize:n=>n.split(\" \")});V.group=new V({deserialize:n=>n.split(\" \")});V.isolate=new V({deserialize:n=>{if(n&&n!=\"rtl\"&&n!=\"ltr\"&&n!=\"auto\")throw new RangeError(\"Invalid value for isolate: \"+n);return n||\"auto\"}});V.contextHash=new V({perNode:!0});V.lookAhead=new V({perNode:!0});V.mounted=new V({perNode:!0});class os{constructor(e,t,i,s=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=s}static get(e){return e&&e.props&&e.props[V.mounted.id]}}const Pw=Object.create(null);class De{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):Pw,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new De(e.name||\"\",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError(\"Can't store a per-node prop on a node type\");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e==\"string\"){if(this.name==e)return!0;let t=this.prop(V.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(\" \"))t[s]=e[i];return i=>{for(let s=i.prop(V.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}}De.none=new De(\"\",Object.create(null),0,8);class Vc{constructor(e){this.types=e;for(let t=0;t<e.length;t++)if(e[t].id!=t)throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\")}extend(...e){let t=[];for(let i of this.types){let s=null;for(let r of e){let o=r(i);if(o){s||(s=Object.assign({},i.props));let l=o[1],a=o[0];a.combine&&a.id in s&&(l=a.combine(s[a.id],l)),s[a.id]=l}}t.push(s?new De(i.name,s,i.id,i.flags):i)}return new Vc(t)}}const mr=new WeakMap,Wu=new WeakMap;var j;(function(n){n[n.ExcludeBuffers=1]=\"ExcludeBuffers\",n[n.IncludeAnonymous=2]=\"IncludeAnonymous\",n[n.IgnoreMounts=4]=\"IgnoreMounts\",n[n.IgnoreOverlays=8]=\"IgnoreOverlays\",n[n.EnterBracketed=16]=\"EnterBracketed\"})(j||(j={}));class ae{constructor(e,t,i,s,r){if(this.type=e,this.children=t,this.positions=i,this.length=s,this.props=null,r&&r.length){this.props=Object.create(null);for(let[o,l]of r)this.props[typeof o==\"number\"?o:o.id]=l}}toString(){let e=os.get(this);if(e&&!e.overlay)return e.tree.toString();let t=\"\";for(let i of this.children){let s=i.toString();s&&(t&&(t+=\",\"),t+=s)}return this.type.name?(/\\W/.test(this.type.name)&&!this.type.isError?JSON.stringify(this.type.name):this.type.name)+(t.length?\"(\"+t+\")\":\"\"):t}cursor(e=0){return new bo(this.topNode,e)}cursorAt(e,t=0,i=0){let s=mr.get(this)||this.topNode,r=new bo(s);return r.moveTo(e,t),mr.set(this,r._tree),r}get topNode(){return new ve(this,0,0,null)}resolve(e,t=0){let i=Cn(mr.get(this)||this.topNode,e,t,!1);return mr.set(this,i),i}resolveInner(e,t=0){let i=Cn(Wu.get(this)||this.topNode,e,t,!0);return Wu.set(this,i),i}resolveStack(e,t=0){return Mw(this,e,t)}iterate(e){let{enter:t,leave:i,from:s=0,to:r=this.length}=e,o=e.mode||0,l=(o&j.IncludeAnonymous)>0;for(let a=this.cursor(o|j.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Ic(De.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new ae(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new ae(De.none,t,i,s)))}static build(e){return Aw(e)}}ae.empty=new ae(De.none,[],[],0);class zc{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new zc(this.buffer,this.index)}}class ki{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return De.none}toString(){let e=[];for(let t=0;t<this.buffer.length;)e.push(this.childString(t)),t=this.buffer[t+3];return e.join(\",\")}childString(e){let t=this.buffer[e],i=this.buffer[e+3],s=this.set.types[t],r=s.name;if(/\\W/.test(r)&&!s.isError&&(r=JSON.stringify(r)),e+=4,i==e)return r;let o=[];for(;e<i;)o.push(this.childString(e)),e=this.buffer[e+3];return r+\"(\"+o.join(\",\")+\")\"}findChild(e,t,i,s,r){let{buffer:o}=this,l=-1;for(let a=e;a!=t&&!(Jm(r,s,o[a+1],o[a+2])&&(l=a,i>0));a=o[a+3]);return l}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let l=e,a=0;l<t;){r[a++]=s[l++],r[a++]=s[l++]-i;let h=r[a++]=s[l++]-i;r[a++]=s[l++]-e,o=Math.max(o,h)}return new ki(r,o,this.set)}}function Jm(n,e,t,i){switch(n){case-2:return t<e;case-1:return i>=e&&t<e;case 0:return t<e&&i>e;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Cn(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to<e);){let o=!i&&n instanceof ve&&n.index<0?null:n.parent;if(!o)return n;n=o}let r=i?0:j.IgnoreOverlays;if(i)for(let o=n,l=o.parent;l;o=l,l=o.parent)o instanceof ve&&o.index<0&&((s=l.enter(e,t,r))===null||s===void 0?void 0:s.from)!=o.from&&(n=l);for(;;){let o=n.enter(e,t,r);if(!o)return n;n=o}}class eO{cursor(e=0){return new bo(this,e)}getChild(e,t=null,i=null){let s=Vu(this,e,t,i);return s.length?s[0]:null}getChildren(e,t=null,i=null){return Vu(this,e,t,i)}resolve(e,t=0){return Cn(this,e,t,!1)}resolveInner(e,t=0){return Cn(this,e,t,!0)}matchContext(e){return wh(this.parent,e)}enterUnfinishedNodesBefore(e){let t=this.childBefore(e),i=this;for(;t;){let s=t.lastChild;if(!s||s.to!=t.to)break;s.type.isError&&s.from==s.to?(i=t,t=s.prevSibling):t=s}return i}get node(){return this}get next(){return this.parent}}class ve extends eO{constructor(e,t,i,s){super(),this._tree=e,this.from=t,this.index=i,this._parent=s}get type(){return this._tree.type}get name(){return this._tree.type.name}get to(){return this.from+this._tree.length}nextChild(e,t,i,s,r=0){for(let o=this;;){for(let{children:l,positions:a}=o._tree,h=t>0?l.length:-1;e!=h;e+=t){let c=l[e],f=a[e]+o.from,u;if(!(!(r&j.EnterBracketed&&c instanceof ae&&(u=os.get(c))&&!u.overlay&&u.bracketed&&i>=f&&i<=f+c.length)&&!Jm(s,i,f,f+c.length))){if(c instanceof ki){if(r&j.ExcludeBuffers)continue;let d=c.findChild(0,c.buffer.length,t,i-f,s);if(d>-1)return new Wt(new Cw(o,c,e,f),null,d)}else if(r&j.IncludeAnonymous||!c.type.isAnonymous||qc(c)){let d;if(!(r&j.IgnoreMounts)&&(d=os.get(c))&&!d.overlay)return new ve(d.tree,f,e,o);let p=new ve(c,f,e,o);return r&j.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?c.children.length-1:0,t,i,s,r)}}}if(r&j.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let s;if(!(i&j.IgnoreOverlays)&&(s=os.get(this._tree))&&s.overlay){let r=e-this.from,o=i&j.EnterBracketed&&s.bracketed;for(let{from:l,to:a}of s.overlay)if((t>0||o?l<=r:l<r)&&(t<0||o?a>=r:a>r))return new ve(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function Vu(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function wh(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class Cw{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}}class Wt extends eO{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new Wt(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&j.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new Wt(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new Wt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new Wt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new ae(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function tO(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;r<n.length;r++){let o=n[r];(o.from>t.from||o.to<t.to)&&(t=o,e=r)}let i=t instanceof ve&&t.index<0?null:t.parent,s=n.slice();return i?s[e]=i:s.splice(e,1),new Tw(s,t)}class Tw{constructor(e,t){this.heads=e,this.node=t}get next(){return tO(this.heads)}}function Mw(n,e,t){let i=n.resolveInner(e,t),s=null;for(let r=i instanceof ve?i:i.context.parent;r;r=r.parent)if(r.index<0){let o=r.parent;(s||(s=[i])).push(o.resolve(e,t)),r=o}else{let o=os.get(r.tree);if(o&&o.overlay&&o.overlay[0].from<=e&&o.overlay[o.overlay.length-1].to>=e){let l=new ve(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(Cn(l,e,t,!1))}}return s?tO(s):i}class bo{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~j.EnterBracketed,e instanceof ve)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof ve?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&j.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&j.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&j.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index<s.buffer.buffer.length)return!1}else for(let r=0;r<this.index;r++)if(s.buffer.buffer[r+3]<this.index)return!1;({index:t,parent:i}=s)}else({index:t,_parent:i}=this._tree);for(;i;{index:t,_parent:i}=i)if(t>-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let l=i._tree.children[r];if(this.mode&j.IncludeAnonymous||l instanceof ki||!l.type.isAnonymous||qc(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to<e))&&this.parent(););for(;this.enterChild(1,e,t););return this}get node(){if(!this.buffer)return this._tree;let e=this.bufferNode,t=null,i=0;if(e&&e.context==this.buffer)e:for(let s=this.index,r=this.stack.length;r>=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s<this.stack.length;s++)t=new Wt(this.buffer,t,this.stack[s]);return this.bufferNode=new Wt(this.buffer,t,this.index)}get tree(){return this.buffer?null:this._tree._tree}iterate(e,t){for(let i=0;;){let s=!1;if(this.type.isAnonymous||e(this)!==!1){if(this.firstChild()){i++;continue}this.type.isAnonymous||(s=!0)}for(;;){if(s&&t&&t(this),s=this.type.isAnonymous,!i)return;if(this.nextSibling())break;this.parent(),i--,s=!0}}}matchContext(e){if(!this.buffer)return wh(this.node.parent,e);let{buffer:t}=this.buffer,{types:i}=t.set;for(let s=e.length-1,r=this.stack.length-1;s>=0;r--){if(r<0)return wh(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}}function qc(n){return n.children.some(e=>e instanceof ki||!e.type.isAnonymous||qc(e))}function Aw(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=Km,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new zc(t,t.length):t,a=i.types,h=0,c=0;function f(w,Q,$,W,I,F){let{id:q,start:X,end:G,size:N}=l,ie=c,Pe=h;if(N<0)if(l.next(),N==-1){let Nt=r[q];$.push(Nt),W.push(X-w);return}else if(N==-3){h=q;return}else if(N==-4){c=q;return}else throw new RangeError(`Unrecognized record size: ${N}`);let ze=a[q],vt,ye,He=X-w;if(G-X<=s&&(ye=m(l.pos-Q,I))){let Nt=new Uint16Array(ye.size-ye.skip),Fe=l.pos-ye.size,$t=Nt.length;for(;l.pos>Fe;)$t=O(ye.start,Nt,$t);vt=new ki(Nt,G-ye.start,i),He=ye.start-w}else{let Nt=l.pos-N;l.next();let Fe=[],$t=[],Ti=q>=o?q:-1,Ni=0,tr=G;for(;l.pos>Nt;)Ti>=0&&l.id==Ti&&l.size>=0?(l.end<=tr-s&&(p(Fe,$t,X,Ni,l.end,tr,Ti,ie,Pe),Ni=Fe.length,tr=l.end),l.next()):F>2500?u(X,Nt,Fe,$t):f(X,Nt,Fe,$t,Ti,F+1);if(Ti>=0&&Ni>0&&Ni<Fe.length&&p(Fe,$t,X,Ni,X,tr,Ti,ie,Pe),Fe.reverse(),$t.reverse(),Ti>-1&&Ni>0){let Bf=d(ze,Pe);vt=Ic(ze,Fe,$t,0,Fe.length,0,G-X,Bf,Bf)}else vt=g(ze,Fe,$t,G-X,ie-G,Pe)}$.push(vt),W.push(He)}function u(w,Q,$,W){let I=[],F=0,q=-1;for(;l.pos>Q;){let{id:X,start:G,end:N,size:ie}=l;if(ie>4)l.next();else{if(q>-1&&G<q)break;q<0&&(q=N-s),I.push(X,G,N),F++,l.next()}}if(F){let X=new Uint16Array(F*4),G=I[I.length-2];for(let N=I.length-3,ie=0;N>=0;N-=3)X[ie++]=I[N],X[ie++]=I[N+1]-G,X[ie++]=I[N+2]-G,X[ie++]=ie;$.push(new ki(X,I[2]-G,i)),W.push(G-w)}}function d(w,Q){return($,W,I)=>{let F=0,q=$.length-1,X,G;if(q>=0&&(X=$[q])instanceof ae){if(!q&&X.type==w&&X.length==I)return X;(G=X.prop(V.lookAhead))&&(F=W[q]+X.length+G)}return g(w,$,W,I,F,Q)}}function p(w,Q,$,W,I,F,q,X,G){let N=[],ie=[];for(;w.length>W;)N.push(w.pop()),ie.push(Q.pop()+$-I);w.push(g(i.types[q],N,ie,F-I,X-F,G)),Q.push(I-$)}function g(w,Q,$,W,I,F,q){if(F){let X=[V.contextHash,F];q=q?[X].concat(q):[X]}if(I>25){let X=[V.lookAhead,I];q=q?[X].concat(q):[X]}return new ae(w,Q,$,W,q)}function m(w,Q){let $=l.fork(),W=0,I=0,F=0,q=$.end-s,X={size:0,start:0,skip:0};e:for(let G=$.pos-w;$.pos>G;){let N=$.size;if($.id==Q&&N>=0){X.size=W,X.start=I,X.skip=F,F+=4,W+=4,$.next();continue}let ie=$.pos-N;if(N<0||ie<G||$.start<q)break;let Pe=$.id>=o?4:0,ze=$.start;for($.next();$.pos>ie;){if($.size<0)if($.size==-3||$.size==-4)Pe+=4;else break e;else $.id>=o&&(Pe+=4);$.next()}I=ze,W+=N,F+=Pe}return(Q<0||W==w)&&(X.size=W,X.start=I,X.skip=F),X.size>4?X:void 0}function O(w,Q,$){let{id:W,start:I,end:F,size:q}=l;if(l.next(),q>=0&&W<o){let X=$;if(q>4){let G=l.pos-(q-4);for(;l.pos>G;)$=O(w,Q,$)}Q[--$]=X,Q[--$]=F-w,Q[--$]=I-w,Q[--$]=W}else q==-3?h=W:q==-4&&(c=W);return $}let y=[],x=[];for(;l.pos>0;)f(n.start||0,n.bufferStart||0,y,x,-1,0);let v=(e=n.length)!==null&&e!==void 0?e:y.length?x[0]+y[0].length:0;return new ae(a[n.topID],y.reverse(),x.reverse(),v)}const zu=new WeakMap;function Hr(n,e){if(!n.isAnonymous||e instanceof ki||e.type!=n)return 1;let t=zu.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof ae)){t=1;break}t+=Hr(n,i)}zu.set(e,t)}return t}function Ic(n,e,t,i,s,r,o,l,a){let h=0;for(let p=i;p<s;p++)h+=Hr(n,e[p]);let c=Math.ceil(h*1.5/8),f=[],u=[];function d(p,g,m,O,y){for(let x=m;x<O;){let v=x,w=g[x],Q=Hr(n,p[x]);for(x++;x<O;x++){let $=Hr(n,p[x]);if(Q+$>=c)break;Q+=$}if(x==v+1){if(Q>c){let $=p[v];d($.children,$.positions,0,$.children.length,g[v]+y);continue}f.push(p[v])}else{let $=g[x-1]+p[x-1].length-w;f.push(Ic(n,p,g,v,x,w,$,null,a))}u.push(w+y-r)}}return d(e,t,i,s,0),(l||a)(f,u,o)}class iO{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let s=this.map.get(e);s||this.map.set(e,s=new Map),s.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Wt?this.setBuffer(e.context.buffer,e.index,t):e instanceof ve&&this.map.set(e.tree,t)}get(e){return e instanceof Wt?this.getBuffer(e.context.buffer,e.index):e instanceof ve?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class li{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new li(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let c=l<t.length?t[l]:null,f=c?c.fromA:1e9;if(f-a>=i)for(;o&&o.from<f;){let u=o;if(a>=u.from||f<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,f)-h;u=d>=p?null:new li(d,p,u.tree,u.offset+h,l>0,!!c)}if(u&&s.push(u),o.to>f)break;o=r<e.length?e[r++]:null}if(!c)break;a=c.toA,h=c.toA-c.toB}return s}}class sO{startParse(e,t,i){return typeof e==\"string\"&&(e=new Rw(e)),i=i?i.length?i.map(s=>new et(s.from,s.to)):[new et(0,0)]:[new et(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}}class Rw{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}function Dw(n){return(e,t,i,s)=>new Bw(e,n,t,i,s)}class qu{constructor(e,t,i,s,r,o){this.parser=e,this.parse=t,this.overlay=i,this.bracketed=s,this.target=r,this.from=o}}function Iu(n){if(!n.length||n.some(e=>e.from>=e.to))throw new RangeError(\"Invalid inner parse ranges given: \"+JSON.stringify(n))}class Zw{constructor(e,t,i,s,r,o,l,a){this.parser=e,this.predicate=t,this.mounts=i,this.index=s,this.start=r,this.bracketed=o,this.target=l,this.prev=a,this.depth=0,this.ranges=[]}}const kh=new V({perNode:!0});class Bw{constructor(e,t,i,s,r){this.nest=t,this.input=i,this.fragments=s,this.ranges=r,this.inner=[],this.innerDone=0,this.baseTree=null,this.stoppedAt=null,this.baseParse=e}advance(){if(this.baseParse){let i=this.baseParse.advance();if(!i)return null;if(this.baseParse=null,this.baseTree=i,this.startInner(),this.stoppedAt!=null)for(let s of this.inner)s.parse.stopAt(this.stoppedAt)}if(this.innerDone==this.inner.length){let i=this.baseTree;return this.stoppedAt!=null&&(i=new ae(i.type,i.children,i.positions,i.length,i.propValues.concat([[kh,this.stoppedAt]]))),i}let e=this.inner[this.innerDone],t=e.parse.advance();if(t){this.innerDone++;let i=Object.assign(Object.create(null),e.target.props);i[V.mounted.id]=new os(t,e.overlay,e.parser,e.bracketed),e.target.props=i}return null}get parsedPos(){if(this.baseParse)return 0;let e=this.input.length;for(let t=this.innerDone;t<this.inner.length;t++)this.inner[t].from<e&&(e=Math.min(e,this.inner[t].parse.parsedPos));return e}stopAt(e){if(this.stoppedAt=e,this.baseParse)this.baseParse.stopAt(e);else for(let t=this.innerDone;t<this.inner.length;t++)this.inner[t].parse.stopAt(e)}startInner(){let e=new Ew(this.fragments),t=null,i=null,s=new bo(new ve(this.baseTree,this.ranges[0].from,0,null),j.IncludeAnonymous|j.IgnoreMounts);e:for(let r,o;;){let l=!0,a;if(this.stoppedAt!=null&&s.from>=this.stoppedAt)l=!1;else if(e.hasNode(s)){if(t){let h=t.mounts.find(c=>c.frag.from<=s.from&&c.frag.to>=s.to&&c.mount.overlay);if(h)for(let c of h.mount.overlay){let f=c.from+h.pos,u=c.to+h.pos;f>=s.from&&u<=s.to&&!t.ranges.some(d=>d.from<u&&d.to>f)&&t.ranges.push({from:f,to:u})}}l=!1}else if(i&&(o=Xw(i.ranges,s.from,s.to)))l=o!=2;else if(!s.type.isAnonymous&&(r=this.nest(s,this.input))&&(s.from<s.to||!r.overlay)){s.tree||(Lw(s),t&&t.depth++,i&&i.depth++);let h=e.findMounts(s.from,r.parser);if(typeof r.overlay==\"function\")t=new Zw(r.parser,r.overlay,h,this.inner.length,s.from,!!r.bracketed,s.tree,t);else{let c=Nu(this.ranges,r.overlay||(s.from<s.to?[new et(s.from,s.to)]:[]));c.length&&Iu(c),(c.length||!r.overlay)&&this.inner.push(new qu(r.parser,c.length?r.parser.startParse(this.input,ju(h,c),c):r.parser.startParse(\"\"),r.overlay?r.overlay.map(f=>new et(f.from-s.from,f.to-s.from)):null,!!r.bracketed,s.tree,c.length?c[0].from:s.from)),r.overlay?c.length&&(i={ranges:c,depth:0,prev:i}):l=!1}}else if(t&&(a=t.predicate(s))&&(a===!0&&(a=new et(s.from,s.to)),a.from<a.to)){let h=t.ranges.length-1;h>=0&&t.ranges[h].to==a.from?t.ranges[h]={from:t.ranges[h].from,to:a.to}:t.ranges.push(a)}if(l&&s.firstChild())t&&t.depth++,i&&i.depth++;else for(;!s.nextSibling();){if(!s.parent())break e;if(t&&!--t.depth){let h=Nu(this.ranges,t.ranges);h.length&&(Iu(h),this.inner.splice(t.index,0,new qu(t.parser,t.parser.startParse(this.input,ju(t.mounts,h),h),t.ranges.map(c=>new et(c.from-t.start,c.to-t.start)),t.bracketed,t.target,h[0].from))),t=t.prev}i&&!--i.depth&&(i=i.prev)}}}}function Xw(n,e,t){for(let i of n){if(i.from>=t)break;if(i.to>e)return i.from<=e&&i.to>=t?2:1}return 0}function _u(n,e,t,i,s,r){if(e<t){let o=n.buffer[e+1];i.push(n.slice(e,t,o)),s.push(o-r)}}function Lw(n){let{node:e}=n,t=[],i=e.context.buffer;do t.push(n.index),n.parent();while(!n.tree);let s=n.tree,r=s.children.indexOf(i),o=s.children[r],l=o.buffer,a=[r];function h(c,f,u,d,p,g){let m=t[g],O=[],y=[];_u(o,c,m,O,y,d);let x=l[m+1],v=l[m+2];a.push(O.length);let w=g?h(m+4,l[m+3],o.set.types[l[m]],x,v-x,g-1):e.toTree();return O.push(w),y.push(x-d),_u(o,l[m+3],f,O,y,d),new ae(u,O,y,p)}s.children[r]=h(0,l.length,De.none,0,o.length,t.length-1);for(let c of a){let f=n.tree.children[c],u=n.tree.positions[c];n.yield(new ve(f,u+n.from,c,n._tree))}}class Yu{constructor(e,t){this.offset=t,this.done=!1,this.cursor=e.cursor(j.IncludeAnonymous|j.IgnoreMounts)}moveTo(e){let{cursor:t}=this,i=e-this.offset;for(;!this.done&&t.from<i;)t.to>=e&&t.enter(i,1,j.IgnoreOverlays|j.ExcludeBuffers)||t.next(!1)||(this.done=!0)}hasNode(e){if(this.moveTo(e.from),!this.done&&this.cursor.from+this.offset==e.from&&this.cursor.tree)for(let t=this.cursor.tree;;){if(t==e.tree)return!0;if(t.children.length&&t.positions[0]==0&&t.children[0]instanceof ae)t=t.children[0];else break}return!1}}let Ew=class{constructor(e){var t;if(this.fragments=e,this.curTo=0,this.fragI=0,e.length){let i=this.curFrag=e[0];this.curTo=(t=i.tree.prop(kh))!==null&&t!==void 0?t:i.to,this.inner=new Yu(i.tree,-i.offset)}else this.curFrag=this.inner=null}hasNode(e){for(;this.curFrag&&e.from>=this.curTo;)this.nextFrag();return this.curFrag&&this.curFrag.from<=e.from&&this.curTo>=e.to&&this.inner.hasNode(e)}nextFrag(){var e;if(this.fragI++,this.fragI==this.fragments.length)this.curFrag=this.inner=null;else{let t=this.curFrag=this.fragments[this.fragI];this.curTo=(e=t.tree.prop(kh))!==null&&e!==void 0?e:t.to,this.inner=new Yu(t.tree,-t.offset)}}findMounts(e,t){var i;let s=[];if(this.inner){this.inner.cursor.moveTo(e,1);for(let r=this.inner.cursor.node;r;r=r.parent){let o=(i=r.tree)===null||i===void 0?void 0:i.prop(V.mounted);if(o&&o.parser==t)for(let l=this.fragI;l<this.fragments.length;l++){let a=this.fragments[l];if(a.from>=r.to)break;a.tree==this.curFrag.tree&&s.push({frag:a,pos:r.from-a.offset,mount:o})}}}return s}};function Nu(n,e){let t=null,i=e;for(let s=1,r=0;s<n.length;s++){let o=n[s-1].to,l=n[s].from;for(;r<i.length;r++){let a=i[r];if(a.from>=l)break;a.to<=o||(t||(i=t=e.slice()),a.from<o?(t[r]=new et(a.from,o),a.to>l&&t.splice(r+1,0,new et(l,a.to))):a.to>l?t[r--]=new et(l,a.to):t.splice(r--,1))}}return i}function Ww(n,e,t,i){let s=0,r=0,o=!1,l=!1,a=-1e9,h=[];for(;;){let c=s==n.length?1e9:o?n[s].to:n[s].from,f=r==e.length?1e9:l?e[r].to:e[r].from;if(o!=l){let u=Math.max(a,t),d=Math.min(c,f,i);u<d&&h.push(new et(u,d))}if(a=Math.min(c,f),a==1e9)break;c==a&&(o?(o=!1,s++):o=!0),f==a&&(l?(l=!1,r++):l=!0)}return h}function ju(n,e){let t=[];for(let{pos:i,mount:s,frag:r}of n){let o=i+(s.overlay?s.overlay[0].from:0),l=o+s.tree.length,a=Math.max(r.from,o),h=Math.min(r.to,l);if(s.overlay){let c=s.overlay.map(u=>new et(u.from+i,u.to+i)),f=Ww(e,c,a,h);for(let u=0,d=a;;u++){let p=u==f.length,g=p?h:f[u].from;if(g>d&&t.push(new li(d,g,s.tree,-o,r.from>=d||r.openStart,r.to<=g||r.openEnd)),p)break;d=f[u].to}}else t.push(new li(a,h,s.tree,-o,r.from>=o||r.openStart,r.to<=l||r.openEnd))}return t}let Vw=0;class Ue{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=Vw++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e==\"string\"?e:\"?\";if(e instanceof Ue&&(t=e),t?.base)throw new Error(\"Can not derive from a modified tag\");let s=new Ue(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new So(e);return i=>i.modified.indexOf(t)>-1?i:So.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}}let zw=0;class So{constructor(e){this.name=e,this.instances=[],this.id=zw++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&qw(t,l.modified));if(i)return i;let s=[],r=new Ue(e.name,s,e,t);for(let l of t)l.instances.push(r);let o=Iw(t);for(let l of e.set)if(!l.modified.length)for(let a of o)s.push(So.get(l,a));return r}}function qw(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function Iw(n){let e=[[]];for(let t=0;t<n.length;t++)for(let i=0,s=e.length;i<s;i++)e.push(e[i].concat(n[t]));return e.sort((t,i)=>i.length-t.length)}function hl(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(\" \"))if(s){let r=[],o=2,l=s;for(let f=0;;){if(l==\"...\"&&f>0&&f+3==s.length){o=1;break}let u=/^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(l);if(!u)throw new RangeError(\"Invalid path: \"+s);if(r.push(u[0]==\"*\"?\"\":u[0][0]=='\"'?JSON.parse(u[0]):u[0]),f+=u[0].length,f==s.length)break;let d=s[f++];if(f==s.length&&d==\"!\"){o=0;break}if(d!=\"/\")throw new RangeError(\"Invalid path: \"+s);l=s.slice(f)}let a=r.length-1,h=r[a];if(!h)throw new RangeError(\"Invalid path: \"+s);let c=new Tn(i,o,a>0?r.slice(0,a):null);e[h]=c.sort(e[h])}}return nO.add(e)}const nO=new V({combine(n,e){let t,i,s;for(;n||e;){if(!n||e&&n.depth>=e.depth?(s=e,e=e.next):(s=n,n=n.next),t&&t.mode==s.mode&&!s.context&&!t.context)continue;let r=new Tn(s.tags,s.mode,s.context);t?t.next=r:i=r,t=r}return i}});class Tn{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth<this.depth?(this.next=e,this):(e.next=this.sort(e.next),e)}get depth(){return this.context?this.context.length:0}}Tn.empty=new Tn([],2,null);function rO(n,e){let t=Object.create(null);for(let r of n)if(!Array.isArray(r.tag))t[r.tag.id]=r.class;else for(let o of r.tag)t[o.id]=r.class;let{scope:i,all:s=null}=e||{};return{style:r=>{let o=s;for(let l of r)for(let a of l.set){let h=t[a.id];if(h){o=o?o+\" \"+h:h;break}}return o},scope:i}}function _w(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+\" \"+s:s)}return t}function Yw(n,e,t,i=0,s=n.length){let r=new Nw(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,\"\",r.highlighters),r.flush(s)}class Nw{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=\"\"}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,c=jw(e)||Tn.empty,f=_w(r,c.tags);if(f&&(h&&(h+=\" \"),h+=f,c.mode==1&&(s+=(s?\" \":\"\")+f)),this.startSpan(Math.max(t,l),h),c.opaque)return;let u=e.tree&&e.tree.prop(V.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(m=>!m.scope||m.scope(u.tree.type)),g=e.firstChild();for(let m=0,O=l;;m++){let y=m<u.overlay.length?u.overlay[m]:null,x=y?y.from+l:a,v=Math.max(t,O),w=Math.min(i,x);if(v<w&&g)for(;e.from<w&&(this.highlightRange(e,v,w,s,r),this.startSpan(Math.min(w,e.to),h),!(e.to>=x||!e.nextSibling())););if(!y||x>i)break;O=y.to+l,O>t&&(this.highlightRange(d.cursor(),Math.max(t,y.from+l),Math.min(i,O),\"\",p),this.startSpan(Math.min(i,O),h))}g&&e.parent()}else if(e.firstChild()){u&&(s=\"\");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}}function jw(n){let e=n.type.prop(nO);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const P=Ue.define,Or=P(),di=P(),Gu=P(di),Hu=P(di),pi=P(),br=P(pi),jl=P(pi),Rt=P(),Mi=P(Rt),Ct=P(),Tt=P(),Qh=P(),_s=P(Qh),Sr=P(),b={comment:Or,lineComment:P(Or),blockComment:P(Or),docComment:P(Or),name:di,variableName:P(di),typeName:Gu,tagName:P(Gu),propertyName:Hu,attributeName:P(Hu),className:P(di),labelName:P(di),namespace:P(di),macroName:P(di),literal:pi,string:br,docString:P(br),character:P(br),attributeValue:P(br),number:jl,integer:P(jl),float:P(jl),bool:P(pi),regexp:P(pi),escape:P(pi),color:P(pi),url:P(pi),keyword:Ct,self:P(Ct),null:P(Ct),atom:P(Ct),unit:P(Ct),modifier:P(Ct),operatorKeyword:P(Ct),controlKeyword:P(Ct),definitionKeyword:P(Ct),moduleKeyword:P(Ct),operator:Tt,derefOperator:P(Tt),arithmeticOperator:P(Tt),logicOperator:P(Tt),bitwiseOperator:P(Tt),compareOperator:P(Tt),updateOperator:P(Tt),definitionOperator:P(Tt),typeOperator:P(Tt),controlOperator:P(Tt),punctuation:Qh,separator:P(Qh),bracket:_s,angleBracket:P(_s),squareBracket:P(_s),paren:P(_s),brace:P(_s),content:Rt,heading:Mi,heading1:P(Mi),heading2:P(Mi),heading3:P(Mi),heading4:P(Mi),heading5:P(Mi),heading6:P(Mi),contentSeparator:P(Rt),list:P(Rt),quote:P(Rt),emphasis:P(Rt),strong:P(Rt),link:P(Rt),monospace:P(Rt),strikethrough:P(Rt),inserted:P(),deleted:P(),changed:P(),invalid:P(),meta:Sr,documentMeta:P(Sr),annotation:P(Sr),processingInstruction:P(Sr),definition:Ue.defineModifier(\"definition\"),constant:Ue.defineModifier(\"constant\"),function:Ue.defineModifier(\"function\"),standard:Ue.defineModifier(\"standard\"),local:Ue.defineModifier(\"local\"),special:Ue.defineModifier(\"special\")};for(let n in b){let e=b[n];e instanceof Ue&&(e.name=n)}rO([{tag:b.link,class:\"tok-link\"},{tag:b.heading,class:\"tok-heading\"},{tag:b.emphasis,class:\"tok-emphasis\"},{tag:b.strong,class:\"tok-strong\"},{tag:b.keyword,class:\"tok-keyword\"},{tag:b.atom,class:\"tok-atom\"},{tag:b.bool,class:\"tok-bool\"},{tag:b.url,class:\"tok-url\"},{tag:b.labelName,class:\"tok-labelName\"},{tag:b.inserted,class:\"tok-inserted\"},{tag:b.deleted,class:\"tok-deleted\"},{tag:b.literal,class:\"tok-literal\"},{tag:b.string,class:\"tok-string\"},{tag:b.number,class:\"tok-number\"},{tag:[b.regexp,b.escape,b.special(b.string)],class:\"tok-string2\"},{tag:b.variableName,class:\"tok-variableName\"},{tag:b.local(b.variableName),class:\"tok-variableName tok-local\"},{tag:b.definition(b.variableName),class:\"tok-variableName tok-definition\"},{tag:b.special(b.variableName),class:\"tok-variableName2\"},{tag:b.definition(b.propertyName),class:\"tok-propertyName tok-definition\"},{tag:b.typeName,class:\"tok-typeName\"},{tag:b.namespace,class:\"tok-namespace\"},{tag:b.className,class:\"tok-className\"},{tag:b.macroName,class:\"tok-macroName\"},{tag:b.propertyName,class:\"tok-propertyName\"},{tag:b.operator,class:\"tok-operator\"},{tag:b.comment,class:\"tok-comment\"},{tag:b.meta,class:\"tok-meta\"},{tag:b.invalid,class:\"tok-invalid\"},{tag:b.punctuation,class:\"tok-punctuation\"}]);var Gl;const Ui=new V;function oO(n){return k.define({combine:n?e=>e.concat(n):void 0})}const _c=new V;class pt{constructor(e,t,i=[],s=\"\"){this.data=e,this.name=s,L.prototype.hasOwnProperty(\"tree\")||Object.defineProperty(L.prototype,\"tree\",{get(){return fe(this)}}),this.parser=t,this.extension=[Qi.of(this),L.languageData.of((r,o,l)=>{let a=Fu(r,o,l),h=a.type.prop(Ui);if(!h)return[];let c=r.facet(h),f=a.type.prop(_c);if(f){let u=a.resolve(o-a.from,l);for(let d of f)if(d.test(u,r)){let p=r.facet(d.facet);return d.type==\"replace\"?p:p.concat(c)}}return c})].concat(i)}isActiveAt(e,t,i=-1){return Fu(e,t,i).type.prop(Ui)==this.data}findRegions(e){let t=e.facet(Qi);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Ui)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(V.mounted);if(l){if(l.tree.prop(Ui)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;a<r.children.length;a++){let h=r.children[a];h instanceof ae&&s(h,r.positions[a]+o)}};return s(fe(e),0),i}get allowsNesting(){return!0}}pt.setState=B.define();function Fu(n,e,t){let i=n.facet(Qi),s=fe(n).topNode;if(!i||i.allowsNesting)for(let r=s;r;r=r.enter(e,t,j.ExcludeBuffers|j.EnterBracketed))r.type.isTop&&(s=r);return s}class xs extends pt{constructor(e,t,i){super(e,t,[],i),this.parser=t}static define(e){let t=oO(e.languageData);return new xs(t,e.parser.configure({props:[Ui.add(i=>i.isTop?t:void 0)]}),e.name)}configure(e,t){return new xs(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function fe(n){let e=n.field(pt.state,!1);return e?e.tree:ae.empty}class Gw{constructor(e){this.doc=e,this.cursorPos=0,this.string=\"\",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e<i||t>=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let Ys=null;class yo{constructor(e,t,i=[],s,r,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new yo(e,t,[],ae.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Gw(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=ae.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e==\"number\"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t<this.state.doc.length&&this.parse.stopAt(t);;){let s=this.parse.advance();if(s)if(this.fragments=this.withoutTempSkipped(li.addTree(s,this.fragments,this.parse.stoppedAt!=null)),this.treeLen=(i=this.parse.stoppedAt)!==null&&i!==void 0?i:this.state.doc.length,this.tree=s,this.parse=null,this.treeLen<(t??this.state.doc.length))this.parse=this.startParse();else return!0;if(e())return!1}})}takeTree(){let e,t;this.parse&&(e=this.parse.parsedPos)>=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(li.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Ys;Ys=this;try{return e()}finally{Ys=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Uu(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,c,f,u)=>a.push({fromA:h,toA:c,fromB:f,toB:u})),i=li.applyChanges(i,a),s=ae.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let c=e.mapPos(h.from,1),f=e.mapPos(h.to,-1);c<f&&l.push({from:c,to:f})}}}return new yo(this.parser,t,i,s,r,o,l,this.scheduleOn)}updateViewport(e){if(this.viewport.from==e.from&&this.viewport.to==e.to)return!1;this.viewport=e;let t=this.skipped.length;for(let i=0;i<this.skipped.length;i++){let{from:s,to:r}=this.skipped[i];s<e.to&&r>e.from&&(this.fragments=Uu(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends sO{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=Ys;if(a){for(let h of s)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new ae(De.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return Ys}}function Uu(n,e,t){return li.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class ws{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new ws(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=yo.create(e.facet(Qi).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new ws(i)}}pt.state=Se.define({create:ws.init,update(n,e){for(let t of e.effects)if(t.is(pt.setState))return t.value;return e.startState.facet(Qi)!=e.state.facet(Qi)?ws.init(e.state):n.apply(e)}});let lO=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<\"u\"&&(lO=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Hl=typeof navigator<\"u\"&&(!((Gl=navigator.scheduling)===null||Gl===void 0)&&Gl.isInputPending)?()=>navigator.scheduling.isInputPending():null,Hw=Re.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(pt.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(pt.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=lO(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnd<t&&(this.chunkEnd<0||this.view.hasFocus)&&(this.chunkEnd=t+3e4,this.chunkBudget=3e3),this.chunkBudget<=0)return;let{state:i,viewport:{to:s}}=this.view,r=i.field(pt.state);if(r.tree==r.context.tree&&r.context.isDone(s+1e5))return;let o=Date.now()+Math.min(this.chunkBudget,100,e&&!Hl?Math.max(25,e.timeRemaining()-5):1e9),l=r.context.treeLen<s&&i.doc.length>s+1e3,a=r.context.work(()=>Hl&&Hl()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:pt.setState.of(new ws(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>Le(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Qi=k.define({combine(n){return n.length?n[0]:null},enables:n=>[pt.state,Hw,D.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{\"data-language\":t.name}:{}})]});class Yc{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const Fw=k.define(),cl=k.define({combine:n=>{if(!n.length)return\"  \";let e=n[0];if(!e||/\\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error(\"Invalid indent unit: \"+JSON.stringify(n[0]));return e}});function xo(n){let e=n.facet(cl);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Mn(n,e){let t=\"\",i=n.tabSize,s=n.facet(cl)[0];if(s==\"\t\"){for(;e>=i;)t+=\"\t\",e-=i;s=\" \"}for(let r=0;r<e;r++)t+=s;return t}function Nc(n,e){n instanceof L&&(n=new fl(n));for(let i of n.state.facet(Fw)){let s=i(n,e);if(s!==void 0)return s}let t=fe(n.state);return t.length>=e?Uw(n,t,e):null}class fl{constructor(e,t={}){this.state=e,this.options=t,this.unit=xo(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:\"\",from:e}:(t<0?s<e:s<=e)?{text:i.text.slice(s-i.from),from:s}:{text:i.text.slice(0,s-i.from),from:i.from}:i}textAfterPos(e,t=1){if(this.options.simulateDoubleBreak&&e==this.options.simulateBreak)return\"\";let{text:i,from:s}=this.lineAt(e,t);return i.slice(e-s,Math.min(i.length,e+100-s))}column(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.countColumn(i,e-s),o=this.options.overrideIndentation?this.options.overrideIndentation(s):-1;return o>-1&&(r+=o-this.countColumn(i,i.search(/\\S|$/))),r}countColumn(e,t=e.length){return Ls(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const ul=new V;function Uw(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.from<i.node.from||o.to>i.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return aO(i,n,t)}function aO(n,e,t){for(let i=n;i;i=i.next){let s=Jw(i.node);if(s)return s(jc.create(e,t,i))}return 0}function Kw(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function Jw(n){let e=n.type.prop(ul);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(V.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>hO(o,!0,1,void 0,r&&!Kw(o)?s.from:void 0)}return n.parent==null?ek:null}function ek(){return 0}class jc extends fl{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new jc(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(tk(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return aO(this.context.next,this.base,this.pos)}}function tk(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function ik(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function sk({closing:n,align:e=!0,units:t=1}){return i=>hO(i,e,t,n)}function hO(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=e?ik(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}const nk=n=>n.baseIndent;function Fr({except:n,units:e=1}={}){return t=>{let i=n&&n.test(t.textAfter);return t.baseIndent+(i?0:e*t.unit)}}const rk=200;function ok(){return L.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent(\"input.type\")&&!n.isUserEvent(\"input.complete\"))return n;let e=n.startState.languageDataAt(\"indentOnInput\",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+rk)return n;let r=t.sliceString(s.from,i);if(!e.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let c=o.doc.lineAt(h);if(c.from==l)continue;l=c.from;let f=Nc(o,c.from);if(f==null)continue;let u=/^\\s*/.exec(c.text)[0],d=Mn(o,f);u!=d&&a.push({from:c.from,to:c.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}const lk=k.define(),dl=new V;function cO(n){let e=n.firstChild,t=n.lastChild;return e&&e.to<t.from?{from:e.to,to:t.type.isError?n.to:t.from}:null}function ak(n,e,t){let i=fe(n);if(i.length<t)return null;let s=i.resolveStack(t,1),r=null;for(let o=s;o;o=o.next){let l=o.node;if(l.to<=t||l.from>t)continue;if(r&&l.from<e)break;let a=l.type.prop(dl);if(a&&(l.to<i.length-50||i.length==n.doc.length||!hk(l))){let h=a(l,n);h&&h.from<=t&&h.from>=e&&h.to>t&&(r=h)}}return r}function hk(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function wo(n,e,t){for(let i of n.facet(lk)){let s=i(n,e,t);if(s)return s}return ak(n,e,t)}function fO(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}const pl=B.define({map:fO}),Nn=B.define({map:fO});function uO(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}const zi=Se.define({create(){return E.none},update(n,e){e.isUserEvent(\"delete\")&&e.changes.iterChangedRanges((t,i)=>n=Ku(n,t,i)),n=n.map(e.changes);for(let t of e.effects)if(t.is(pl)&&!ck(n,t.value.from,t.value.to)){let{preparePlaceholder:i}=e.state.facet(gO),s=i?E.replace({widget:new Ok(i(e.state,t.value))}):Ju;n=n.update({add:[s.range(t.value.from,t.value.to)]})}else t.is(Nn)&&(n=n.update({filter:(i,s)=>t.value.from!=i||t.value.to!=s,filterFrom:t.value.from,filterTo:t.value.to}));return e.selection&&(n=Ku(n,e.selection.main.head)),n},provide:n=>D.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,s)=>{t.push(i,s)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError(\"Invalid JSON for fold state\");let e=[];for(let t=0;t<n.length;){let i=n[t++],s=n[t++];if(typeof i!=\"number\"||typeof s!=\"number\")throw new RangeError(\"Invalid JSON for fold state\");e.push(Ju.range(i,s))}return E.set(e,!0)}});function Ku(n,e,t=e){let i=!1;return n.between(e,t,(s,r)=>{s<t&&r>e&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(s,r)=>s>=t||r<=e}):n}function ko(n,e,t){var i;let s=null;return(i=n.field(zi,!1))===null||i===void 0||i.between(e,t,(r,o)=>{(!s||s.from>r)&&(s={from:r,to:o})}),s}function ck(n,e,t){let i=!1;return n.between(e,e,(s,r)=>{s==e&&r==t&&(i=!0)}),i}function dO(n,e){return n.field(zi,!1)?e:e.concat(B.appendConfig.of(mO()))}const fk=n=>{for(let e of uO(n)){let t=wo(n.state,e.from,e.to);if(t)return n.dispatch({effects:dO(n.state,[pl.of(t),pO(n,t)])}),!0}return!1},uk=n=>{if(!n.state.field(zi,!1))return!1;let e=[];for(let t of uO(n)){let i=ko(n.state,t.from,t.to);i&&e.push(Nn.of(i),pO(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function pO(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,s=n.state.doc.lineAt(e.to).number;return D.announce.of(`${n.state.phrase(t?\"Folded lines\":\"Unfolded lines\")} ${i} ${n.state.phrase(\"to\")} ${s}.`)}const dk=n=>{let{state:e}=n,t=[];for(let i=0;i<e.doc.length;){let s=n.lineBlockAt(i),r=wo(e,s.from,s.to);r&&t.push(pl.of(r)),i=(r?n.lineBlockAt(r.to):s).to+1}return t.length&&n.dispatch({effects:dO(n.state,t)}),!!t.length},pk=n=>{let e=n.state.field(zi,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,s)=>{t.push(Nn.of({from:i,to:s}))}),n.dispatch({effects:t}),!0},gk=[{key:\"Ctrl-Shift-[\",mac:\"Cmd-Alt-[\",run:fk},{key:\"Ctrl-Shift-]\",mac:\"Cmd-Alt-]\",run:uk},{key:\"Ctrl-Alt-[\",run:dk},{key:\"Ctrl-Alt-]\",run:pk}],mk={placeholderDOM:null,preparePlaceholder:null,placeholderText:\"…\"},gO=k.define({combine(n){return _t(n,mk)}});function mO(n){return[zi,yk]}function OO(n,e){let{state:t}=n,i=t.facet(gO),s=o=>{let l=n.lineBlockAt(n.posAtDOM(o.target)),a=ko(n.state,l.from,l.to);a&&n.dispatch({effects:Nn.of(a)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,s,e);let r=document.createElement(\"span\");return r.textContent=i.placeholderText,r.setAttribute(\"aria-label\",t.phrase(\"folded code\")),r.title=t.phrase(\"unfold\"),r.className=\"cm-foldPlaceholder\",r.onclick=s,r}const Ju=E.replace({widget:new class extends Yt{toDOM(n){return OO(n,null)}}});class Ok extends Yt{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return OO(e,this.value)}}const bk={openText:\"⌄\",closedText:\"›\",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class Fl extends ci{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement(\"span\");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?\"Fold line\":\"Unfold line\"),t}}function Sk(n={}){let e={...bk,...n},t=new Fl(e,!0),i=new Fl(e,!1),s=Re.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(Qi)!=o.state.facet(Qi)||o.startState.field(zi,!1)!=o.state.field(zi,!1)||fe(o.startState)!=fe(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let l=new ai;for(let a of o.viewportLineBlocks){let h=ko(o.state,a.from,a.to)?i:wo(o.state,a.from,a.to)?t:null;h&&l.add(a.from,a.from,h)}return l.finish()}}),{domEventHandlers:r}=e;return[s,gw({class:\"cm-foldGutter\",markers(o){var l;return((l=o.plugin(s))===null||l===void 0?void 0:l.markers)||M.empty},initialSpacer(){return new Fl(e,!1)},domEventHandlers:{...r,click:(o,l,a)=>{if(r.click&&r.click(o,l,a))return!0;let h=ko(o.state,l.from,l.to);if(h)return o.dispatch({effects:Nn.of(h)}),!0;let c=wo(o.state,l.from,l.to);return c?(o.dispatch({effects:pl.of(c)}),!0):!1}}}),mO()]}const yk=D.baseTheme({\".cm-foldPlaceholder\":{backgroundColor:\"#eee\",border:\"1px solid #ddd\",color:\"#888\",borderRadius:\".2em\",margin:\"0 1px\",padding:\"0 1px\",cursor:\"pointer\"},\".cm-foldGutter span\":{padding:\"0 1px\",cursor:\"pointer\"}});class jn{constructor(e,t){this.specs=e;let i;function s(l){let a=me.newName();return(i||(i=Object.create(null)))[\".\"+a]=l,a}const r=typeof t.all==\"string\"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof pt?l=>l.prop(Ui)==o.data:o?l=>l==o:void 0,this.style=rO(e.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new me(i):null,this.themeType=t.themeType}static define(e,t){return new jn(e,t||{})}}const vh=k.define(),bO=k.define({combine(n){return n.length?[n[0]]:null}});function Ul(n){let e=n.facet(vh);return e.length?e:n.facet(bO)}function SO(n,e){let t=[wk],i;return n instanceof jn&&(n.module&&t.push(D.styleModule.of(n.module)),i=n.themeType),e?.fallback?t.push(bO.of(n)):i?t.push(vh.computeN([D.darkTheme],s=>s.facet(D.darkTheme)==(i==\"dark\")?[n]:[])):t.push(vh.of(n)),t}class xk{constructor(e){this.markCache=Object.create(null),this.tree=fe(e.state),this.decorations=this.buildDeco(e,Ul(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=fe(e.state),i=Ul(e.state),s=i!=Ul(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length<r.to&&!s&&t.type==this.tree.type&&o>=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return E.none;let i=new ai;for(let{from:s,to:r}of e.visibleRanges)Yw(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=E.mark({class:a})))},s,r);return i.finish()}}const wk=xt.high(Re.fromClass(xk,{decorations:n=>n.decorations})),kk=jn.define([{tag:b.meta,color:\"#404740\"},{tag:b.link,textDecoration:\"underline\"},{tag:b.heading,textDecoration:\"underline\",fontWeight:\"bold\"},{tag:b.emphasis,fontStyle:\"italic\"},{tag:b.strong,fontWeight:\"bold\"},{tag:b.strikethrough,textDecoration:\"line-through\"},{tag:b.keyword,color:\"#708\"},{tag:[b.atom,b.bool,b.url,b.contentSeparator,b.labelName],color:\"#219\"},{tag:[b.literal,b.inserted],color:\"#164\"},{tag:[b.string,b.deleted],color:\"#a11\"},{tag:[b.regexp,b.escape,b.special(b.string)],color:\"#e40\"},{tag:b.definition(b.variableName),color:\"#00f\"},{tag:b.local(b.variableName),color:\"#30a\"},{tag:[b.typeName,b.namespace],color:\"#085\"},{tag:b.className,color:\"#167\"},{tag:[b.special(b.variableName),b.macroName],color:\"#256\"},{tag:b.definition(b.propertyName),color:\"#00c\"},{tag:b.comment,color:\"#940\"},{tag:b.invalid,color:\"#f00\"}]),Qk=D.baseTheme({\"&.cm-focused .cm-matchingBracket\":{backgroundColor:\"#328c8252\"},\"&.cm-focused .cm-nonmatchingBracket\":{backgroundColor:\"#bb555544\"}}),yO=1e4,xO=\"()[]{}\",wO=k.define({combine(n){return _t(n,{afterCursor:!0,brackets:xO,maxScanDistance:yO,renderMatch:Pk})}}),vk=E.mark({class:\"cm-matchingBracket\"}),$k=E.mark({class:\"cm-nonmatchingBracket\"});function Pk(n){let e=[],t=n.matched?vk:$k;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}const Ck=Se.define({create(){return E.none},update(n,e){if(!e.docChanged&&!e.selection)return n;let t=[],i=e.state.facet(wO);for(let s of e.state.selection.ranges){if(!s.empty)continue;let r=Vt(e.state,s.head,-1,i)||s.head>0&&Vt(e.state,s.head-1,1,i)||i.afterCursor&&(Vt(e.state,s.head,1,i)||s.head<e.state.doc.length&&Vt(e.state,s.head+1,-1,i));r&&(t=t.concat(i.renderMatch(r,e.state)))}return E.set(t,!0)},provide:n=>D.decorations.from(n)}),Tk=[Ck,Qk];function Mk(n={}){return[wO.of(n),Tk]}const kO=new V;function $h(n,e,t){let i=n.prop(e<0?V.openedBy:V.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function Ph(n){let e=n.type.prop(kO);return e?e(n.node):n}function Vt(n,e,t,i={}){let s=i.maxScanDistance||yO,r=i.brackets||xO,o=fe(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=$h(a.type,t,r);if(h&&a.from<a.to){let c=Ph(a);if(c&&(t>0?e>=c.from&&e<c.to:e>c.from&&e<=c.to))return Ak(n,e,t,a,c,h,r)}}return Rk(n,e,t,o,l.type,s,r)}function Ak(n,e,t,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,c=l?.cursor();if(c&&(t<0?c.childBefore(i.from):c.childAfter(i.to)))do if(t<0?c.to<=i.from:c.from>=i.to){if(h==0&&r.indexOf(c.type.name)>-1&&c.from<c.to){let f=Ph(c);return{start:a,end:f?{from:f.from,to:f.to}:void 0,matched:!0}}else if($h(c.type,t,o))h++;else if($h(c.type,-t,o)){if(h==0){let f=Ph(c);return{start:a,end:f&&f.from<f.to?{from:f.from,to:f.to}:void 0,matched:!1}}h--}}while(t<0?c.prevSibling():c.nextSibling());return{start:a,matched:!1}}function Rk(n,e,t,i,s,r,o){let l=t<0?n.sliceDoc(e-1,e):n.sliceDoc(e,e+1),a=o.indexOf(l);if(a<0||a%2==0!=t>0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},c=n.doc.iterRange(e,t>0?n.doc.length:0),f=0;for(let u=0;!c.next().done&&u<=r;){let d=c.value;t<0&&(u+=d.length);let p=e+u*t;for(let g=t>0?0:d.length-1,m=t>0?d.length:-1;g!=m;g+=t){let O=o.indexOf(d[g]);if(!(O<0||i.resolveInner(p+g,1).type!=s))if(O%2==0==t>0)f++;else{if(f==1)return{start:h,end:{from:p+g,to:p+g+1},matched:O>>1==a>>1};f--}}t>0&&(u+=d.length)}return c.done?{start:h,matched:!1}:null}const Dk=Object.create(null),ed=[De.none],td=[],id=Object.create(null),Zk=Object.create(null);for(let[n,e]of[[\"variable\",\"variableName\"],[\"variable-2\",\"variableName.special\"],[\"string-2\",\"string.special\"],[\"def\",\"variableName.definition\"],[\"tag\",\"tagName\"],[\"attribute\",\"attributeName\"],[\"type\",\"typeName\"],[\"builtin\",\"variableName.standard\"],[\"qualifier\",\"modifier\"],[\"error\",\"invalid\"],[\"header\",\"heading\"],[\"property\",\"propertyName\"]])Zk[n]=Bk(Dk,e);function Kl(n,e){td.indexOf(n)>-1||(td.push(n),console.warn(e))}function Bk(n,e){let t=[];for(let l of e.split(\" \")){let a=[];for(let h of l.split(\".\")){let c=n[h]||b[h];c?typeof c==\"function\"?a.length?a=a.map(c):Kl(h,`Modifier ${h} used at start of tag`):a.length?Kl(h,`Tag ${h} used as modifier`):a=Array.isArray(c)?c:[c]:Kl(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,\"_\"),s=i+\" \"+t.map(l=>l.id),r=id[s];if(r)return r.id;let o=id[s]=De.define({id:ed.length,name:i,props:[hl({[i]:t})]});return ed.push(o),o.id}le.RTL,le.LTR;let Ne=typeof navigator<\"u\"?navigator:{userAgent:\"\",vendor:\"\",platform:\"\"},Ch=typeof document<\"u\"?document:{documentElement:{style:{}}};const Th=/Edge\\/(\\d+)/.exec(Ne.userAgent),QO=/MSIE \\d/.test(Ne.userAgent),Mh=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(Ne.userAgent),gl=!!(QO||Mh||Th),sd=!gl&&/gecko\\/(\\d+)/i.test(Ne.userAgent),Jl=!gl&&/Chrome\\/(\\d+)/.exec(Ne.userAgent),Xk=\"webkitFontSmoothing\"in Ch.documentElement.style,Ah=!gl&&/Apple Computer/.test(Ne.vendor),nd=Ah&&(/Mobile\\/\\w+/.test(Ne.userAgent)||Ne.maxTouchPoints>2);var A={mac:nd||/Mac/.test(Ne.platform),ie:gl,ie_version:QO?Ch.documentMode||6:Mh?+Mh[1]:Th?+Th[1]:0,gecko:sd,gecko_version:sd?+(/Firefox\\/(\\d+)/.exec(Ne.userAgent)||[0,0])[1]:0,chrome:!!Jl,chrome_version:Jl?+Jl[1]:0,ios:nd,android:/Android\\b/.test(Ne.userAgent),webkit_version:Xk?+(/\\bAppleWebKit\\/(\\d+)/.exec(Ne.userAgent)||[0,0])[1]:0,safari:Ah,safari_version:Ah?+(/\\bVersion\\/(\\d+(\\.\\d+)?)/.exec(Ne.userAgent)||[0,0])[1]:0,tabSize:Ch.documentElement.style.tabSize!=null?\"tab-size\":\"-moz-tab-size\"};function Gc(n,e){for(let t in n)t==\"class\"&&e.class?e.class+=\" \"+n.class:t==\"style\"&&e.style?e.style+=\";\"+n.style:e[t]=n[t];return e}const Qo=Object.create(null);function Hc(n,e,t){if(n==e)return!0;n||(n=Qo),e||(e=Qo);let i=Object.keys(n),s=Object.keys(e);if(i.length-0!=s.length-0)return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function Lk(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t==\"style\"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function rd(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s==\"style\"?n.style.cssText=\"\":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s==\"style\"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function Ek(n){let e=Object.create(null);for(let t=0;t<n.attributes.length;t++){let i=n.attributes[t];e[i.name]=i.value}return e}let ml=class{eq(e){return!1}updateDOM(e,t){return!1}compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}get estimatedHeight(){return-1}get lineBreaks(){return 0}ignoreEvent(e){return!0}coordsAt(e,t,i){return null}get isHidden(){return!1}get editable(){return!1}destroy(e){}};var nt=(function(n){return n[n.Text=0]=\"Text\",n[n.WidgetBefore=1]=\"WidgetBefore\",n[n.WidgetAfter=2]=\"WidgetAfter\",n[n.WidgetRange=3]=\"WidgetRange\",n})(nt||(nt={}));let We=class extends Ve{constructor(e,t,i,s){super(),this.startSide=e,this.endSide=t,this.widget=i,this.spec=s}get heightRelevant(){return!1}static mark(e){return new Fc(e)}static widget(e){let t=Math.max(-1e4,Math.min(1e4,e.side||0)),i=!!e.block;return t+=i&&!e.inlineOrder?t>0?3e8:-4e8:t>0?1e8:-1e8,new An(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=CO(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new An(e,i,s,t,e.widget||null,!0)}static line(e){return new Uc(e)}static set(e,t=!1){return M.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};We.none=M.empty;let Fc=class vO extends We{constructor(e){let{start:t,end:i}=CO(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||\"span\",this.attrs=e.class&&e.attributes?Gc(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Qo}eq(e){return this==e||e instanceof vO&&this.tagName==e.tagName&&Hc(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError(\"Mark decorations may not be empty\");return super.range(e,t)}};Fc.prototype.point=!1;let Uc=class $O extends We{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof $O&&this.spec.class==e.spec.class&&Hc(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError(\"Line decoration ranges must be zero-length\");return super.range(e,t)}};Uc.prototype.mapMode=te.TrackBefore;Uc.prototype.point=!0;let An=class PO extends We{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?te.TrackBefore:te.TrackAfter:te.TrackDel}get type(){return this.startSide!=this.endSide?nt.WidgetRange:this.startSide<=0?nt.WidgetBefore:nt.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof PO&&Wk(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError(\"Invalid range for replacement decoration\");if(!this.isReplace&&t!=e)throw new RangeError(\"Widget decorations can only have zero-length ranges\");return super.range(e,t)}};An.prototype.point=!0;function CO(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function Wk(n,e){return n==e||!!(n&&e&&n.compare(e))}function ls(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}let od=class Rh extends Ve{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof Rh&&this.tagName==e.tagName&&Hc(this.attributes,e.attributes)}static create(e){return new Rh(e.tagName,e.attributes||Qo)}static set(e,t=!1){return M.of(e,t)}};od.prototype.startSide=od.prototype.endSide=-1;function ks(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Dh(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function gn(n,e){if(!e.anchorNode)return!1;try{return Dh(n,e.anchorNode)}catch{return!1}}function Ur(n){return n.nodeType==3?Rn(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function mn(n,e,t,i){return t?ld(n,e,t,i,-1)||ld(n,e,t,i,1):!1}function vi(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function vo(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(n.nodeName)}function ld(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:fi(n))){if(n.nodeName==\"DIV\")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=vi(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable==\"false\")return!1;e=s<0?fi(n):0}else return!1}}function fi(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function $o(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function Vk(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function TO(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function zk(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,g=1;if(d)u=Vk(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let y=c.getBoundingClientRect();({scaleX:p,scaleY:g}=TO(c,y)),u={left:y.left,right:y.left+c.clientWidth*p,top:y.top,bottom:y.top+c.clientHeight*g}}let m=0,O=0;if(s==\"nearest\")e.top<u.top?(O=e.top-(u.top+o),t>0&&e.bottom>u.bottom+O&&(O=e.bottom-u.bottom+o)):e.bottom>u.bottom&&(O=e.bottom-u.bottom+o,t<0&&e.top-O<u.top&&(O=e.top-(u.top+o)));else{let y=e.bottom-e.top,x=u.bottom-u.top;O=(s==\"center\"&&y<=x?e.top+y/2-x/2:s==\"start\"||s==\"center\"&&t<0?e.top-o:e.bottom-x+o)-u.top}if(i==\"nearest\"?e.left<u.left?(m=e.left-(u.left+r),t>0&&e.right>u.right+m&&(m=e.right-u.right+r)):e.right>u.right&&(m=e.right-u.right+r,t<0&&e.left<u.left+m&&(m=e.left-(u.left+r))):m=(i==\"center\"?e.left+(e.right-e.left)/2-(u.right-u.left)/2:i==\"start\"==l?e.left-r:e.right-(u.right-u.left)+r)-u.left,m||O)if(d)h.scrollBy(m,O);else{let y=0,x=0;if(O){let v=c.scrollTop;c.scrollTop+=O/g,x=(c.scrollTop-v)*g}if(m){let v=c.scrollLeft;c.scrollLeft+=m/p,y=(c.scrollLeft-v)*p}e={left:e.left-y,top:e.top-x,right:e.right-y,bottom:e.bottom-x},y&&Math.abs(y-m)<1&&(i=\"nearest\"),x&&Math.abs(x-O)<1&&(s=\"nearest\")}if(d)break;(e.top<u.top||e.bottom>u.bottom||e.left<u.left||e.right>u.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function qk(n){let e=n.ownerDocument,t,i;for(let s=n.parentNode;s&&!(s==e.body||t&&i);)if(s.nodeType==1)!i&&s.scrollHeight>s.clientHeight&&(i=s),!t&&s.scrollWidth>s.clientWidth&&(t=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:t,y:i}}let Ik=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?fi(t):0),i,Math.min(e.focusOffset,i?fi(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}},Ri=null;A.safari&&A.safari_version>=26&&(Ri=!1);function MO(n){if(n.setActive)return n.setActive();if(Ri)return n.focus(Ri);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(Ri==null?{get preventScroll(){return Ri={preventScroll:!0},!0}}:void 0),!Ri){Ri=!1;for(let t=0;t<e.length;){let i=e[t++],s=e[t++],r=e[t++];i.scrollTop!=s&&(i.scrollTop=s),i.scrollLeft!=r&&(i.scrollLeft=r)}}}let ad;function Rn(n,e,t=e){let i=ad||(ad=document.createRange());return i.setEnd(n,t),i.setStart(n,e),i}function as(n,e,t,i){let s={key:e,code:e,keyCode:t,which:t,cancelable:!0};i&&({altKey:s.altKey,ctrlKey:s.ctrlKey,shiftKey:s.shiftKey,metaKey:s.metaKey}=i);let r=new KeyboardEvent(\"keydown\",s);r.synthetic=!0,n.dispatchEvent(r);let o=new KeyboardEvent(\"keyup\",s);return o.synthetic=!0,n.dispatchEvent(o),r.defaultPrevented||o.defaultPrevented}function _k(n){for(;n;){if(n&&(n.nodeType==9||n.nodeType==11&&n.host))return n;n=n.assignedSlot||n.parentNode}return null}function Yk(n,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(i=Math.min(i,fi(t));;)if(i){if(t.nodeType!=1)return!1;let s=t.childNodes[i-1];s.contentEditable==\"false\"?i--:(t=s,i=fi(t))}else{if(t==n)return!0;i=vi(t),t=t.parentNode}}function AO(n){return n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function RO(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable==\"false\")return null;t=t.childNodes[i-1],i=fi(t)}else if(t.parentNode&&!vo(t))i=vi(t),t=t.parentNode;else return null}}function DO(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i<t.nodeValue.length)return{node:t,offset:i};if(t.nodeType==1&&i<t.childNodes.length){if(t.contentEditable==\"false\")return null;t=t.childNodes[i],i=0}else if(t.parentNode&&!vo(t))i=vi(t)+1,t=t.parentNode;else return null}}let Si=class Zh{constructor(e,t,i=!0){this.node=e,this.offset=t,this.precise=i}static before(e,t){return new Zh(e.parentNode,vi(e),t)}static after(e,t){return new Zh(e.parentNode,vi(e)+1,t)}};var be=(function(n){return n[n.LTR=0]=\"LTR\",n[n.RTL=1]=\"RTL\",n})(be||(be={}));const qi=be.LTR,Kc=be.RTL;function ZO(n){let e=[];for(let t=0;t<n.length;t++)e.push(1<<+n[t]);return e}const Nk=ZO(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\"),jk=ZO(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\"),Bh=Object.create(null),Mt=[];for(let n of[\"()\",\"[]\",\"{}\"]){let e=n.charCodeAt(0),t=n.charCodeAt(1);Bh[e]=t,Bh[t]=-e}function BO(n){return n<=247?Nk[n]:1424<=n&&n<=1524?2:1536<=n&&n<=1785?jk[n-1536]:1774<=n&&n<=2220?4:8192<=n&&n<=8204?256:64336<=n&&n<=65023?4:1}const Gk=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;let ii=class{get dir(){return this.level%2?Kc:qi}constructor(e,t,i){this.from=e,this.to=t,this.level=i}side(e,t){return this.dir==t==e?this.to:this.from}forward(e,t){return e==(this.dir==t)}static find(e,t,i,s){let r=-1;for(let o=0;o<e.length;o++){let l=e[o];if(l.from<=t&&l.to>=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.from<t:l.to>t:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError(\"Index out of range\");return r}};function XO(n,e){if(n.length!=e.length)return!1;for(let t=0;t<n.length;t++){let i=n[t],s=e[t];if(i.from!=s.from||i.to!=s.to||i.direction!=s.direction||!XO(i.inner,s.inner))return!1}return!0}const K=[];function Hk(n,e,t,i,s){for(let r=0;r<=i.length;r++){let o=r?i[r-1].to:e,l=r<i.length?i[r].from:t,a=r?256:s;for(let h=o,c=a,f=a;h<l;h++){let u=BO(n.charCodeAt(h));u==512?u=c:u==8&&f==4&&(u=16),K[h]=u==4?2:u,u&7&&(f=u),c=u}for(let h=o,c=a,f=a;h<l;h++){let u=K[h];if(u==128)h<l-1&&c==K[h+1]&&c&24?u=K[h]=c:K[h]=256;else if(u==64){let d=h+1;for(;d<l&&K[d]==64;)d++;let p=h&&c==8||d<t&&K[d]==8?f==1?1:8:256;for(let g=h;g<d;g++)K[g]=p;h=d-1}else u==8&&f==1&&(K[h]=1);c=u,u&7&&(f=u)}}}function Fk(n,e,t,i,s){let r=s==1?2:1;for(let o=0,l=0,a=0;o<=i.length;o++){let h=o?i[o-1].to:e,c=o<i.length?i[o].from:t;for(let f=h,u,d,p;f<c;f++)if(d=Bh[u=n.charCodeAt(f)])if(d<0){for(let g=l-3;g>=0;g-=3)if(Mt[g+1]==-d){let m=Mt[g+2],O=m&2?s:m&4?m&1?r:s:0;O&&(K[f]=K[Mt[g]]=O),l=g;break}}else{if(Mt.length==189)break;Mt[l++]=f,Mt[l++]=u,Mt[l++]=a}else if((p=K[f])==2||p==1){let g=p==s;a=g?0:1;for(let m=l-3;m>=0;m-=3){let O=Mt[m+2];if(O&2)break;if(g)Mt[m+2]|=2;else{if(O&4)break;Mt[m+2]|=4}}}}}function Uk(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=s<t.length?t[s].from:e;for(let a=o;a<l;){let h=K[a];if(h==256){let c=a+1;for(;;)if(c==l){if(s==t.length)break;c=t[s++].to,l=s<t.length?t[s].from:e}else if(K[c]==256)c++;else break;let f=r==1,u=(c<e?K[c]:i)==1,d=f==u?f?1:2:i;for(let p=c,g=s,m=g?t[g-1].to:n;p>a;)p==m&&(p=t[--g].from,m=g?t[g-1].to:n),K[--p]=d;a=c}else r=h,a++}}}function Xh(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;a<t;){let c=!0,f=!1;if(h==r.length||a<r[h].from){let g=K[a];g!=l&&(c=!1,f=g==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h<r.length&&p==r[h].from){if(f)break e;let g=r[h];if(!c)for(let m=g.to,O=h+1;;){if(m==t)break e;if(O<r.length&&r[O].from==m)m=r[O++].to;else{if(K[m]==l)break e;break}}if(h++,u)u.push(g);else{g.from>a&&o.push(new ii(a,g.from,d));let m=g.direction==qi!=!(d%2);Lh(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.to}p=g.to}else{if(p==t||(c?K[p]!=l:K[p]==l))break;p++}u?Xh(n,a,p,i+1,s,u,o):a<p&&o.push(new ii(a,p,d)),a=p}else for(let a=t,h=r.length;a>e;){let c=!0,f=!1;if(!h||a>r[h-1].to){let g=K[a-1];g!=l&&(c=!1,f=g==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(f)break e;let g=r[--h];if(!c)for(let m=g.from,O=h;;){if(m==e)break e;if(O&&r[O-1].to==m)m=r[--O].from;else{if(K[m-1]==l)break e;break}}if(u)u.push(g);else{g.to<a&&o.push(new ii(g.to,a,d));let m=g.direction==qi!=!(d%2);Lh(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.from}p=g.from}else{if(p==e||(c?K[p-1]!=l:K[p-1]==l))break;p--}u?Xh(n,p,a,i+1,s,u,o):p<a&&o.push(new ii(p,a,d)),a=p}}function Lh(n,e,t,i,s,r,o){let l=e%2?2:1;Hk(n,s,r,i,l),Fk(n,s,r,i,l),Uk(s,r,i,l),Xh(n,s,r,e,t,i,o)}function Kk(n,e,t){if(!n)return[new ii(0,0,e==Kc?1:0)];if(e==qi&&!t.length&&!Gk.test(n))return LO(n.length);if(t.length)for(;n.length>K.length;)K[K.length]=256;let i=[],s=e==qi?0:1;return Lh(n,s,s,t,0,n.length,i),i}function LO(n){return[new ii(0,n,0)]}let EO=\"\";function Jk(n,e,t,i,s){var r;let o=i.head-n.from,l=ii.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let c=_(n.text,o,a.forward(s,t));(c<a.from||c>a.to)&&(c=h),EO=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return f&&c==h&&f.level+(s?0:1)<a.level?S.cursor(f.side(!s,t)+n.from,f.forward(s,t)?1:-1,f.level):S.cursor(c+n.from,a.forward(s,t)?-1:1,a.level)}function eQ(n,e,t){for(let i=e;i<t;i++){let s=BO(n.charCodeAt(i));if(s==1)return qi;if(s==2||s==4)return Kc}return qi}const WO=k.define(),VO=k.define(),zO=k.define(),qO=k.define(),Eh=k.define(),IO=k.define(),_O=k.define(),Jc=k.define(),ef=k.define(),YO=k.define({combine:n=>n.some(e=>e)}),tQ=k.define({combine:n=>n.some(e=>e)}),NO=k.define();let ea=class Wh{constructor(e,t=\"nearest\",i=\"nearest\",s=5,r=5,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new Wh(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new Wh(S.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}};const yr=B.define({map:(n,e)=>n.map(e)}),jO=B.define();function si(n,e,t){let i=n.facet(qO);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+\":\",e):console.error(e))}const Ut=k.define({combine:n=>n.length?n[0]:!0});let iQ=0;const Ki=k.define({combine(n){return n.filter((e,t)=>{for(let i=0;i<t;i++)if(n[i].plugin==e.plugin)return!1;return!0})}});let hd=class Vh{constructor(e,t,i,s,r){this.id=e,this.create=t,this.domEventHandlers=i,this.domEventObservers=s,this.baseExtensions=r(this),this.extension=this.baseExtensions.concat(Ki.of({plugin:this,arg:void 0}))}of(e){return this.baseExtensions.concat(Ki.of({plugin:this,arg:e}))}static define(e,t){const{eventHandlers:i,eventObservers:s,provide:r,decorations:o}=t||{};return new Vh(iQ++,e,i,s,l=>{let a=[];return o&&a.push(Ol.of(h=>{let c=h.plugin(l);return c?o(c):We.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return Vh.define((i,s)=>new e(i,s),t)}},ta=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(si(t.state,i,\"CodeMirror plugin crashed\"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){si(e.state,t,\"CodeMirror plugin crashed\"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){si(e.state,i,\"CodeMirror plugin crashed\")}}deactivate(){this.spec=this.value=null}};const GO=k.define(),tf=k.define(),Ol=k.define(),HO=k.define(),sf=k.define(),Gn=k.define(),FO=k.define();function cd(n,e){let t=n.state.facet(FO);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return M.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,c=o-e.from,f=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=eQ(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let g={from:h,to:c,direction:d,inner:[]};f.push(g),f=g.inner}}}}),s}const UO=k.define();function KO(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(UO)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}const en=k.define();let ni=class zh{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new zh(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toA<i.fromA)break;i=i.join(s),e.splice(t-1,1)}}return e.splice(t,0,i),e}static extendWithRanges(e,t){if(t.length==0)return e;let i=[];for(let s=0,r=0,o=0;;){let l=s<e.length?e[s].fromB:1e9,a=r<t.length?t[r]:1e9,h=Math.min(l,a);if(h==1e9)break;let c=h+o,f=h,u=c;for(;;)if(r<t.length&&t[r]<=f){let d=t[r+1];r+=2,f=Math.max(f,d);for(let p=s;p<e.length&&e[p].fromB<=f;p++)o=e[p].toA-e[p].toB;u=Math.max(u,d+o)}else if(s<e.length&&e[s].fromB<=f){let d=e[s++];f=Math.max(f,d.toB),u=Math.max(u,d.toA),o=d.toA-d.toB}else break;i.push(new zh(c,u,h,f))}return i}},fd=class JO{constructor(e,t,i){this.view=e,this.state=t,this.transactions=i,this.flags=0,this.startState=e.state,this.changes=he.empty(this.startState.doc.length);for(let r of i)this.changes=this.changes.compose(r.changes);let s=[];this.changes.iterChangedRanges((r,o,l,a)=>s.push(new ni(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new JO(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}};const sQ=[];let pe=class{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return sQ}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&Lk(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:\"\")+(this.breakAfter?\"#\":\"\")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError(\"Invalid child in posBefore\")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=vi(this.dom),s=this.length?e>0:t>0;return new Si(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof Sl)return e;return null}static get(e){return e.cmTile}},bl=class extends pe{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==t)for(;s&&s!=l.dom;)s=ud(s);else t.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=ud(s);this.length=o}};function ud(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}let Sl=class extends bl{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=pe.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof hs)t.push(s),i=o,s=0;else{let l=r+o.length,a=e(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(a<e||e==h&&(t<-1?l.length:l.covers(1)))&&(!i||!l.isWidget()&&i.isWidget())&&(i=l,s=e-a),(h>e||e==a&&(t>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=e-a)}}),!i&&!r)throw new Error(\"No tile at position \"+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}},hs=class e0 extends bl{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new e0(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},Po=class t0 extends bl{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new t0(t||document.createElement(\"div\"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,l=-1;function a(c,f){for(let u=0,d=0;u<c.children.length&&d<=f;u++){let p=c.children[u],g=d+p.length;g>=f&&(p.isComposite()?a(p,f-d):(!o||o.isHidden&&(t>0||i&&rQ(o,p)))&&(g>f||p.flags&32)?(o=p,l=f-d):(d<f||p.flags&16&&!p.isHidden)&&(s=p,r=f-d)),d=g}}a(this,e);let h=(t<0?s:o)||s||o;return h?{tile:h,offset:h==s?r:l}:null}coordsIn(e,t){let i=this.resolveInline(e,t,!0);return i?i.tile.coordsIn(Math.max(0,i.offset),t):nQ(this)}domIn(e,t){let i=this.resolveInline(e,t);if(i){let{tile:s,offset:r}=i;if(this.dom.contains(s.dom))return s.isText()?new Si(s.dom,Math.min(s.dom.nodeValue.length,r)):s.domPosFor(r,s.flags&16?1:s.flags&32?-1:t);let o=i.tile.parent,l=!1;for(let a of o.children){if(l)return new Si(a.dom,0);a==i.tile&&(l=!0)}}return new Si(this.dom,0)}};function nQ(n){let e=n.dom.lastChild;if(!e)return n.dom.getBoundingClientRect();let t=Ur(e);return t[t.length-1]||null}function rQ(n,e){let t=n.coordsIn(0,1),i=e.coordsIn(0,1);return t&&i&&i.top<t.bottom}let Je=class i0 extends bl{constructor(e,t){super(e),this.mark=t}get domAttrs(){return this.mark.attrs}static of(e,t){let i=new i0(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},tn=class s0 extends pe{constructor(e,t){super(e,t.length),this.text=t}sync(e){this.flags&2||(super.sync(e),this.dom.nodeValue!=this.text&&(e&&e.node==this.dom&&(e.written=!0),this.dom.nodeValue=this.text))}isText(){return!0}toString(){return JSON.stringify(this.text)}coordsIn(e,t){let i=this.dom.nodeValue.length;e>i&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?A.chrome||A.gecko||(e?(s--,o=1):r<i&&(r++,o=-1)):t<0?s--:r<i&&r++;let l=Rn(this.dom,s,r).getClientRects();if(!l.length)return null;let a=l[(o?o<0:t>=0)?0:l.length-1];return A.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?$o(a,o<0):a||null}static of(e,t){let i=new s0(t||document.createTextNode(e),e);return t||(i.flags|=2),i}},Dn=class n0 extends pe{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return $o(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?r.length-1:0;o=r[a],!(e>0?a==0:a==r.length-1||o.top<o.bottom);a+=l?-1:1);return $o(o,!l)}}get overrideDOMText(){if(!this.length)return Z.empty;let{root:e}=this;if(!e)return Z.empty;let t=this.posAtStart;return e.view.state.doc.slice(t,t+this.length)}destroy(){super.destroy(),this.widget.destroy(this.dom)}static of(e,t,i,s,r){return r||(r=e.toDOM(t),e.editable||(r.contentEditable=\"false\")),new n0(r,i,e,s)}},Co=class extends pe{constructor(e){let t=document.createElement(\"img\");t.className=\"cm-widgetBuffer\",t.setAttribute(\"aria-hidden\",\"true\"),super(t,0,e)}get isHidden(){return!0}get overrideDOMText(){return Z.empty}coordsIn(e){return this.dom.getBoundingClientRect()}},oQ=class{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,i){let{tile:s,index:r,beforeBreak:o,parents:l}=this;for(;e||t>0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(t>0?a.length<=e:a.length<e)&&(!i||i.skip(a,0,a.length)!==!1||!a.isComposite)?(o=!!h,r++,e-=a.length):(l.push({tile:s,index:r}),s=a,r=0,i&&a.isComposite()&&i.enter(a))}else if(r==s.length)o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++;else if(e){let a=Math.min(e,s.length-r);i&&i.skip(s,r,r+a),e-=a,r+=a}else break;return this.tile=s,this.index=r,this.beforeBreak=o,this}get root(){return this.parents.length?this.parents[0].tile:this.tile}},lQ=class{constructor(e,t,i,s){this.from=e,this.to=t,this.wrapper=i,this.rank=s}},aQ=class{constructor(e,t,i){this.cache=e,this.root=t,this.blockWrappers=i,this.curLine=null,this.lastBlock=null,this.afterWidget=null,this.pos=0,this.wrappers=[],this.wrapperPos=0}addText(e,t,i,s){var r;this.flushBuffer();let o=this.ensureMarks(t,i),l=o.lastChild;if(l&&l.isText()&&!(l.flags&8)&&l.length+e.length<512){this.cache.reused.set(l,2);let a=o.children[o.children.length-1]=new tn(l.dom,l.text+e);a.parent=o}else o.append(s||tn.of(e,(r=this.cache.find(tn))===null||r===void 0?void 0:r.dom));this.pos+=e.length,this.afterWidget=null}addComposition(e,t){let i=this.curLine;i.dom!=t.line.dom&&(i.setDOM(this.cache.reused.has(t.line)?ia(t.line.dom):t.line.dom),this.cache.reused.set(t.line,2));let s=i;for(let l=t.marks.length-1;l>=0;l--){let a=t.marks[l],h=s.lastChild;if(h instanceof Je&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(ia(a.dom)),s=h;else{if(this.cache.reused.get(a)){let f=pe.get(a.dom);f&&f.setDOM(ia(a.dom))}let c=Je.of(a.mark,a.dom);s.append(c),s=c}this.cache.reused.set(a,2)}let r=pe.get(e.text);r&&this.cache.reused.set(r,2);let o=new tn(e.text,e.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=r0);let s=Po.start(e,t||((i=this.cache.find(Po))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],l;if(t>0&&(l=s.lastChild)&&l instanceof Je&&l.mark.eq(o))s=l,t--;else{let a=Je.of(o,(i=this.cache.find(Je,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!dd(this.curLine,!1)||e.dom.nodeName!=\"BR\"&&e.isWidget()&&!(A.ios&&dd(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(sa,0,32)||new Dn(sa.toDOM(),0,sa,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to<this.pos&&this.wrappers.splice(e,1);for(let e=this.blockWrappers;e.value&&e.from<=this.pos;e.next())if(e.to>=this.pos){let t=new lQ(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.from<this.pos&&s instanceof hs&&s.wrapper.eq(i.wrapper))t=s;else{let r=hs.of(i.wrapper,(e=this.cache.find(hs,o=>o.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Co,void 0,1);return i&&(i.flags=t),i||new Co(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},hQ=class{constructor(e){this.skipCount=0,this.text=\"\",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text=\"\",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error(\"Ran out of text content when drawing inline views\");this.text=s;let l=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}};const To=[Dn,Po,tn,Je,Co,hs,Sl];for(let n=0;n<To.length;n++)To[n].bucket=n;let cQ=class{constructor(e){this.view=e,this.buckets=To.map(()=>[]),this.index=To.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!t||t(h))&&!this.reused.has(h))return r.splice(a,1),a<o&&this.index[s]--,this.reused.set(h,i),h}return null}findWidget(e,t,i){let s=this.buckets[0];if(s.length)for(let r=0,o=0;;r++){if(r==s.length){if(o)return null;o=1,r=0}let l=s[r];if(!this.reused.has(l)&&(o==0?l.widget.compare(e):l.widget.constructor==e.constructor&&e.updateDOM(l.dom,this.view)))return s.splice(r,1),r<this.index[0]&&this.index[0]--,l.widget==e&&l.length==t&&(l.flags&497)==i?(this.reused.set(l,1),l):(this.reused.set(l,2),new Dn(l.dom,t,e,l.flags&-498|i))}}reuse(e){return this.reused.set(e,1),e}maybeReuse(e,t=2){if(!this.reused.has(e))return this.reused.set(e,t),e.dom}clear(){for(let e=0;e<this.buckets.length;e++)this.buckets[e].length=this.index[e]=0}},fQ=class{constructor(e,t,i,s,r){this.view=e,this.decorations=s,this.disallowBlockEffectsFor=r,this.openWidget=!1,this.openMarks=0,this.cache=new cQ(e),this.text=new hQ(e.state.doc),this.builder=new aQ(this.cache,new Sl(e,e.contentDOM),M.iter(i)),this.cache.reused.set(t,2),this.old=new oQ(t),this.reuseWalker={skip:(o,l,a)=>{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let l=o<e.length?e[o++]:null,a=l?l.fromA:this.old.root.length;if(a>s){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA<t.range.toA?1:-1),this.emit(r,t.range.fromB),this.cache.clear(),this.builder.addComposition(t,i),this.text.skip(t.range.toB-t.range.fromB),this.forward(t.range.fromA,l.toA),this.emit(t.range.toB,l.toB)):(this.forward(l.fromA,l.toA),this.emit(r,l.toB)),r=l.toB,s=l.toA}return this.builder.curLine&&this.builder.endLine(),this.builder.root}preserve(e,t,i){let s=pQ(this.old),r=this.openMarks;this.old.advance(e,i?1:-1,{skip:(o,l,a)=>{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l<o.length?Dn.of(o.widget,this.view,a-l,o.flags&496,this.cache.maybeReuse(o)):this.cache.reuse(o);h.flags&256?(h.flags&=-2,this.builder.addBlockWidget(h)):(this.builder.ensureLine(null),this.builder.addInlineWidget(h,s,r),r=s.length)}else if(o.isText())this.builder.ensureLine(null),!l&&a==o.length?this.builder.addText(o.text,s,r,this.cache.reuse(o)):(this.cache.add(o),this.builder.addText(o.text.slice(l,a),s,r)),r=s.length;else if(o.isLine())o.flags&=-2,this.cache.reused.set(o,1),this.builder.addLine(o);else if(o instanceof Co)this.cache.add(o);else if(o instanceof Je)this.builder.ensureLine(null),this.builder.addMark(o,s,r),this.cache.reused.set(o,1),r=s.length;else return!1;this.openWidget=!1},enter:o=>{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof Je&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof Je&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=0,o=M.spans(this.decorations,e,t,{point:(l,a,h,c,f,u)=>{if(h instanceof An){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError(\"Block decorations may not be specified via plugins\");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\")}if(r=c.length,f>c.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?Qs.block:Qs.inline),p=uQ(h),g=this.cache.findWidget(d,a-l,p)||Dn.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(g)):(s.ensureLine(i),s.addInlineWidget(g,c,f))}i=null}else i=dQ(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,c)=>{for(let f=l;f<a;){let u=this.text.next(Math.min(512,a-f));u==null?(s.addLineStartIfNotCovered(i),s.addBreak(),f++):(s.ensureLine(i),s.addText(u,h,f==l?c:h.length),f+=u.length),i=null}}});s.addLineStartIfNotCovered(i),this.openWidget=o>r,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=pe.get(s);if(s==this.view.contentDOM)break;r instanceof Je?t.push(r):r?.isLine()?i=r:s.nodeName==\"DIV\"&&!i&&s!=this.view.contentDOM?i=new Po(s,r0):t.push(Je.of(new Fc({tagName:s.nodeName.toLowerCase(),attributes:Ek(s)}),s))}return{line:i,marks:t}}};function dd(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function uQ(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const r0={class:\"cm-line\"};function dQ(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:\"cm-line\"}),t&&Gc(t,n),i&&(n.class+=\" \"+i)),n}function pQ(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof Je&&e.push(i.mark)}return e}function ia(n){let e=pe.get(n);return e&&e.setDOM(n.cloneNode()),n}let Qs=class extends ml{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};Qs.inline=new Qs(\"span\");Qs.block=new Qs(\"div\");const sa=new class extends ml{toDOM(){return document.createElement(\"br\")}get isHidden(){return!0}get editable(){return!0}};let pd=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=We.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Sl(e,e.contentDOM),this.updateInner([new ni(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:f})=>f<this.minWidthFrom||c>this.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!kQ(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?mQ(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:f}=this.hasComposition;i=new ni(c,f,e.changes.mapPos(c,-1),e.changes.mapPos(f,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(A.ie||A.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=SQ(o,this.decorations,e.changes);a.length&&(i=ni.extendWithRanges(i,a));let h=xQ(l,this.blockWrappers,e.changes);return h.length&&(i=ni.extendWithRanges(i,h)),r&&!i.some(c=>c.fromA<=r.range.fromA&&c.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new fQ(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);this.tile=l.run(e,t),qh(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+\"px\",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+\"px\":\"\";let r=A.chrome||A.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=\"\"});let s=[];if(this.view.viewport.from||this.view.viewport.to<this.view.state.doc.length)for(let r of this.tile.children)r.isWidget()&&r.widget instanceof na&&s.push(r.dom);i.updateGaps(s)}updateEditContextFormatting(e){this.editContextFormatting=this.editContextFormatting.map(e.changes);for(let t of e.transactions)for(let i of t.effects)i.is(jO)&&(this.editContextFormatting=i.value)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let{dom:i}=this.tile,s=this.view.root.activeElement,r=s==i,o=!r&&!(this.view.state.facet(Ut)||i.tabIndex>-1)&&gn(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,c;if(a.empty?c=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(c=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),A.gecko&&a.empty&&!this.hasComposition&&gQ(h)){let u=document.createTextNode(\"\");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=c=new Si(u,0),l=!0}let f=this.view.observer.selectionRange;(l||!f.focusNode||(!mn(h.node,h.offset,f.anchorNode,f.anchorOffset)||!mn(c.node,c.offset,f.focusNode,f.focusOffset))&&!this.suppressWidgetCursorChange(f,a))&&(this.view.observer.ignore(()=>{A.android&&A.chrome&&i.contains(f.focusNode)&&wQ(f.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=ks(this.view.root);if(u)if(a.empty){if(A.gecko){let d=OQ(h.node,h.offset);if(d&&d!=3){let p=(d==1?RO:DO)(h.node,h.offset);p&&(h=new Si(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(c.node,c.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,c]=[c,h]),d.setEnd(c.node,c.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,c)),this.impreciseAnchor=h.precise?null:new Si(f.anchorNode,f.anchorOffset),this.impreciseHead=c.precise?null:new Si(f.focusNode,f.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&mn(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=ks(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify(\"move\",t.assoc<0?\"forward\":\"backward\",\"lineboundary\"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=fi(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!pe.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,c)=>{if(h.isWidget()){if(h.flags&32&&c>=e)return!0;h.flags&16&&(r=!0)}else{let f=c+h.length;if(c<=e&&(i=h,s=e-c,r=f<e),f>=e&&!o&&(o=h,l=e-c,a=c>e),c>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof na?null:i.coordsInWidget(s,t,!0):i.coordsIn(s,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&o<r.length){let l=_(r.text,o);if(l==o)return null;let a=Rn(r.dom,o,l).getClientRects();for(let h=0;h<a.length;h++){let c=a[h];if(h==a.length-1||c.top<c.bottom&&c.left<c.right)return c}}return null}return s(t,i)}measureVisibleLineHeights(e){let t=[],{from:i,to:s}=e,r=this.view.contentDOM.clientWidth,o=r>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==be.LTR,h=0,c=(f,u,d)=>{for(let p=0;p<f.children.length&&!(u>s);p++){let g=f.children[p],m=u+g.length,O=g.dom.getBoundingClientRect(),{height:y}=O;if(d&&!p&&(h+=O.top-d.top),g instanceof hs)m>i&&c(g,u,O);else if(u>=i&&(h>0&&t.push(-h),t.push(y+h),h=0,o)){let x=g.dom.lastChild,v=x?Ur(x):[];if(v.length){let w=v[v.length-1],Q=a?w.right-O.left:O.right-w.left;Q>l&&(l=Q,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=m)}}d&&p==f.children.length-1&&(h+=d.bottom-O.bottom),u=m+g.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction==\"rtl\"?be.RTL:be.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let c=Ur(h.dom);if(c.length!=1)return;l+=c[0].width,a=c[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement(\"div\"),i,s,r;return t.className=\"cm-line\",t.style.width=\"99999px\",t.style.position=\"absolute\",t.textContent=\"abc def ghi jkl mno pqr stu\",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=Ur(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(We.replace({widget:new na(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return We.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Ol).map(r=>(this.dynamicDecorationMap[e++]=typeof r==\"function\")?r(this.view):r),i=!1,s=this.view.state.facet(sf).map((r,o)=>{let l=typeof r==\"function\";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(M.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];e<this.decorations.length;)this.dynamicDecorationMap[e++]=!1;this.blockWrappers=this.view.state.facet(HO).map(r=>typeof r==\"function\"?r(this.view):r)}scrollIntoView(e){if(e.isSnapshot){let h=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=h.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let h of this.view.state.facet(NO))try{if(h(this.view,e.range,e))return!0}catch(c){si(this.view.state,c,\"scroll handler\")}let{range:t}=e,i=this.coordsAt(t.head,t.empty?t.assoc:t.head>t.anchor?-1:1),s;if(!i)return;!t.empty&&(s=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,s.left),top:Math.min(i.top,s.top),right:Math.max(i.right,s.right),bottom:Math.max(i.bottom,s.bottom)});let r=KO(this.view),o={left:i.left-r.left,top:i.top-r.top,right:i.right+r.right,bottom:i.bottom+r.bottom},{offsetWidth:l,offsetHeight:a}=this.view.scrollDOM;zk(this.view.scrollDOM,o,t.head<t.anchor?-1:1,e.x,e.y,Math.max(Math.min(e.xMargin,l),-l),Math.max(Math.min(e.yMargin,a),-a),this.view.textDirection==be.LTR)}lineHasWidget(e){let t=i=>i.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){qh(this.tile)}};function qh(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)qh(i,e)}}function gQ(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable==\"false\")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable==\"false\")}function o0(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=RO(t.focusNode,t.focusOffset),s=DO(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=pe.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=pe.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function mQ(n,e,t){let i=o0(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\\n\\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new ni(a.mapPos(r),a.mapPos(o),r,o),text:s}}function OQ(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable==\"false\"?1:0)|(e<n.childNodes.length&&n.childNodes[e].contentEditable==\"false\"?2:0)}let bQ=class{constructor(){this.changes=[]}compareRange(e,t){ls(e,t,this.changes)}comparePoint(e,t){ls(e,t,this.changes)}boundChange(e){ls(e,e,this.changes)}};function SQ(n,e,t){let i=new bQ;return M.compare(n,e,t,i),i.changes}let yQ=class{constructor(){this.changes=[]}compareRange(e,t){ls(e,t,this.changes)}comparePoint(){}boundChange(e){ls(e,e,this.changes)}};function xQ(n,e,t){let i=new yQ;return M.compare(n,e,t,i),i.changes}function wQ(n,e){for(let t=n;t&&t!=e;t=t.assignedSlot||t.parentNode)if(t.nodeType==1&&t.contentEditable==\"false\")return!0;return!1}function kQ(n,e){let t=!1;return e&&n.iterChangedRanges((i,s)=>{i<e.to&&s>e.from&&(t=!0)}),t}let na=class extends ml{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement(\"div\");return e.className=\"cm-gap\",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+\"px\",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function QQ(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return S.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=_(s.text,r,!1):l=_(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=_(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;l<s.length;){let h=_(s.text,l);if(i(s.text.slice(l,h))!=a)break;l=h}return S.range(o+s.from,l+s.from)}function vQ(n,e,t,i,s){let r=Math.round((i-e.left)*n.defaultCharacterWidth);if(n.lineWrapping&&t.height>n.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+kn(o,r,n.state.tabSize)}function $Q(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.to<e)){if(r.from<e&&r.to>e)return r;(!s||r.type==nt.Text&&(s.type!=r.type||(t<0?r.from<e:r.to>e)))&&(s=r)}}return s||i}return i}function PQ(n,e,t,i){let s=$Q(n,e.head,e.assoc||-1),r=!i||s.type!=nt.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==be.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return S.cursor(a,t?-1:1)}return S.cursor(t?s.to:s.from,t?-1:1)}function gd(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=Jk(s,r,o,l,t),c=EO;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;c=`\n`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function CQ(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==oe.Space&&(s=o),s==o}}function TQ(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return S.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,(e.empty?e.assoc:0)||(t?1:-1)),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+c}let f=a.left+o,u=i??n.viewState.heightOracle.textHeight>>1,d=Ih(n,{x:f,y:l+u*r},!1,r);return S.cursor(d.pos,d.assoc,void 0,o)}function On(n,e,t){for(;;){let i=0;for(let s of n)s.between(e-1,e+1,(r,o,l)=>{if(e>r&&e<o){let a=i||t||(e-r<o-e?-1:1);e=a<0?r:o,i=a}});if(!i)return e}}function l0(n,e){let t=null;for(let i=0;i<e.ranges.length;i++){let s=e.ranges[i],r=null;if(s.empty){let o=On(n,s.from,0);o!=s.from&&(r=S.cursor(o,-1))}else{let o=On(n,s.from,-1),l=On(n,s.to,1);(o!=s.from||l!=s.to)&&(r=S.range(s.from==s.anchor?o:l,s.from==s.head?o:l))}r&&(t||(t=e.ranges.slice()),t[i]=r)}return t?S.create(t,e.mainIndex):e}function ra(n,e,t){let i=On(n.state.facet(Gn).map(s=>s(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:S.cursor(i,i<t.from?1:-1)}let Lt=class{constructor(e,t){this.pos=e,this.assoc=t}};function Ih(n,e,t,i){let s=n.contentDOM.getBoundingClientRect(),r=s.top+n.viewState.paddingTop,{x:o,y:l}=e,a=l-r,h;for(;;){if(a<0)return new Lt(0,1);if(a>n.viewState.docHeight)return new Lt(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==nt.Text){if(i<0?h.to<n.viewport.from:h.from>n.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let f=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+f:h.top-f}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==nt.Text){let f=vQ(n,s,h,o,l);return new Lt(f,f==h.from?1:-1)}}if(h.type!=nt.Text)return a<(h.top+h.bottom)/2?new Lt(h.from,1):new Lt(h.to,-1);let c=n.docView.lineAt(h.from,2);return(!c||c.length!=h.length)&&(c=n.docView.lineAt(h.from,-2)),a0(n,c,h.from,o,l)}function a0(n,e,t,i,s){let r=-1,o=null,l=1e9,a=1e9,h=s,c=s,f=(u,d)=>{for(let p=0;p<u.length;p++){let g=u[p];if(g.top==g.bottom)continue;let m=g.left>i?g.left-i:g.right<i?i-g.right:0,O=g.top>s?g.top-s:g.bottom<s?s-g.bottom:0;g.top<=c&&g.bottom>=h&&(h=Math.min(g.top,h),c=Math.max(g.bottom,c),O=0),(r<0||(O-a||m-l)<0)&&(r>=0&&a&&l<m&&o.top<=c-2&&o.bottom>=h+2?a=0:(r=d,l=m,a=O,o=g))}};if(e.isText()){for(let d=0;d<e.length;){let p=_(e.text,d);if(f(Rn(e.dom,d,p).getClientRects(),d),!l&&!a)break;d=p}return i>(o.left+o.right)/2==(md(n,r+t)==be.LTR)?new Lt(t+_(e.text,r),-1):new Lt(t+r,1)}else{if(!e.length)return new Lt(t,1);for(let g=0;g<e.children.length;g++){let m=e.children[g];if(m.flags&48)continue;let O=(m.dom.nodeType==1?m.dom:Rn(m.dom,0,m.length)).getClientRects();if(f(O,g),!l&&!a)break}let u=e.children[r],d=e.posBefore(u,t);return u.isComposite()||u.isText()?a0(n,u,d,Math.max(o.left,Math.min(o.right,i)),s):i>(o.left+o.right)/2==(md(n,r+t)==be.LTR)?new Lt(d+u.length,-1):new Lt(d,1)}}function md(n,e){let t=n.state.doc.lineAt(e);return n.bidiSpans(t)[ii.find(n.bidiSpans(t),e-t.from,-1,1)].dir}const sn=\"￿\";let MQ=class{constructor(e,t){this.points=e,this.view=t,this.text=\"\",this.lineSeparator=t.state.facet(L.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=sn}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=pe.get(s),l=s.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=pe.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:vo(s))||vo(l)&&(s.nodeName!=\"BR\"||o?.isWidget())&&this.text.length>r)&&!RQ(l,t)&&this.lineBreak(),s=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\\r\\n?|\\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){let t=pe.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName==\"BR\"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(AQ(e,i.node,i.offset)?t:0))}};function AQ(n,e,t){for(;;){if(!e||t<fi(e))return!1;if(e==n)return!0;t=vi(e)+1,e=e.parentNode}}function RQ(n,e){let t;for(;!(n==e||!n);n=n.nextSibling){let i=pe.get(n);if(!i?.isWidget())return!1;i&&(t||(t=[])).push(i)}if(t)for(let i of t){let s=i.overrideDOMText;if(s?.length)return!1}return!0}let Od=class{constructor(e,t){this.node=e,this.offset=t,this.pos=-1}},DQ=class{constructor(e,t,i,s){this.typeOver=s,this.bounds=null,this.text=\"\",this.domChanged=t>-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=h0(e.docView.tile,t,i,0))){let l=r||o?[]:BQ(e),a=new MQ(l,e);a.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=a.text,this.newSel=XQ(l,this.bounds.from)}else{let l=e.observer.selectionRange,a=r&&r.node==l.focusNode&&r.offset==l.focusOffset||!Dh(e.contentDOM,l.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),h=o&&o.node==l.anchorNode&&o.offset==l.anchorOffset||!Dh(e.contentDOM,l.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((A.ios||A.chrome)&&e.state.selection.main.empty&&a!=h&&(c.from>0||c.to<e.state.doc.length)){let f=Math.min(a,h),u=Math.max(a,h),d=c.from-f,p=c.to-u;(d==0||d==1||f==0)&&(p==0||p==-1||u==e.state.doc.length)&&(a=0,h=e.state.doc.length)}e.inputState.composing>-1&&e.state.selection.ranges.length>1?this.newSel=e.state.selection.replaceRange(S.range(h,a)):this.newSel=S.single(h,a)}}};function h0(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,c=i;a<n.children.length;a++){let f=n.children[a],u=h+f.length;if(h<e&&u>t)return h0(f,e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&f.dom.parentNode==n.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o<n.children.length&&o>=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function c0(n,e){let t,{newSel:i}=e,s=n.state.selection.main,r=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,a=s.from,h=null;(r===8||A.android&&e.text.length<l-o)&&(a=s.to,h=\"end\");let c=f0(n.state.doc.sliceString(o,l,sn),e.text,a-o,h);c&&(A.chrome&&r==13&&c.toB==c.from+2&&e.text.slice(c.from,c.toB)==sn+sn&&c.toB--,t={from:o+c.from,to:o+c.toA,insert:Z.of(e.text.slice(c.from,c.toB).split(sn))})}else i&&(!n.hasFocus&&n.state.facet(Ut)||Mo(i,s))&&(i=null);if(!t&&!i)return!1;if(!t&&e.typeOver&&!s.empty&&i&&i.main.empty?t={from:s.from,to:s.to,insert:n.state.doc.slice(s.from,s.to)}:(A.mac||A.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute(\"autocorrect\")==\"off\"?(i&&t.insert.length==2&&(i=S.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:Z.of([t.insert.toString().replace(\".\",\" \")])}):t&&t.from>=s.from&&t.to<=s.to&&(t.from!=s.from||t.to!=s.to)&&s.to-s.from-(t.to-t.from)<=4?t={from:s.from,to:s.to,insert:n.state.doc.slice(s.from,t.from).append(t.insert).append(n.state.doc.slice(t.to,s.to))}:n.state.doc.lineAt(s.from).to<s.to&&n.docView.lineHasWidget(s.to)&&n.inputState.insertingTextAt>Date.now()-50?t={from:s.from,to:s.to,insert:n.state.toText(n.inputState.insertingText)}:A.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==`\n `&&n.lineWrapping&&(i&&(i=S.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:Z.of([\" \"])}),t)return nf(n,t,i,r);if(i&&!Mo(i,s)){let o=!1,l=\"select\";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin==\"select\"&&(o=!0),l=n.inputState.lastSelectionOrigin,l==\"select.pointer\"&&(i=l0(n.state.facet(Gn).map(a=>a(n)),i))),n.dispatch({selection:i,scrollIntoView:o,userEvent:l}),!0}else return!1}function nf(n,e,t,i=-1){if(A.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(A.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==\" \")&&e.insert.length==1&&e.insert.lines==2&&as(n.contentDOM,\"Enter\",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.length<e.to-e.from&&e.to>s.head)&&as(n.contentDOM,\"Backspace\",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&as(n.contentDOM,\"Delete\",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=ZQ(n,e,t));return n.state.facet(IO).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function ZQ(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.from<r.from||e.from>r.to){let a=e.from<r.from?-1:1,h=a<0?r.from:r.to,c=On(s.facet(Gn).map(f=>f(n)),h,a);e.from==c&&(o=c)}if(o>-1)i={changes:e,selection:S.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=r.from<e.from?s.sliceDoc(r.from,e.from):\"\",h=r.to>e.to?s.sliceDoc(e.to,r.to):\"\";i=s.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let c=n.state.sliceDoc(e.from,e.to),f,u=t&&o0(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);f={from:u.from,to:u.to-p}}else f=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let g=p.to-d,m=g-c.length;if(n.state.sliceDoc(m,g)!=c||g>=f.from&&m<=f.to)return{range:p};let O=s.changes({from:m,to:g,insert:e.insert}),y=p.to-r.to;return{changes:O,range:h?S.range(Math.max(0,h.anchor+y),Math.max(0,h.head+y)):p.map(O)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l=\"input.type\";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=\".compose\",n.inputState.compositionFirstChange&&(l+=\".start\",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function f0(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r<s&&n.charCodeAt(r)==e.charCodeAt(r);)r++;if(r==s&&n.length==e.length)return null;let o=n.length,l=e.length;for(;o>0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i==\"end\"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o<r&&n.length<e.length){let a=t<=r&&t>=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l<r){let a=t<=r&&t>=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function BQ(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new Od(t,i)),(s!=t||r!=i)&&e.push(new Od(s,r))),e}function XQ(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?S.single(t+e,i+e):null}function Mo(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}let LQ=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText=\"\",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,A.safari&&e.contentDOM.addEventListener(\"input\",()=>null),A.gecko&&JQ(e.contentDOM.ownerDocument)}handleEvent(e){!NQ(this.view,e)||this.ignoreDuringComposition(e)||e.type==\"keydown\"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=EQ(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!=\"scroll\"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!=\"scroll\"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&VQ.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),A.android&&A.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return A.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((t=u0.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||WQ.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key==\"Enter\"&&e&&e.from<e.to&&/^\\S+$/.test(e.insert.toString())?!1:(this.pendingIOSKey=void 0,as(this.view.contentDOM,t.key,t.keyCode,t instanceof KeyboardEvent?t:void 0))}ignoreDuringComposition(e){return!/^key/.test(e.type)||e.synthetic?!1:this.composing>0?!0:A.safari&&!A.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function bd(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){si(t.state,s)}}}function EQ(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push(bd(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(bd(i.value,a))}}for(let i in St)t(i).handlers.push(St[i]);for(let i in lt)t(i).observers.push(lt[i]);return e}const u0=[{key:\"Backspace\",keyCode:8,inputType:\"deleteContentBackward\"},{key:\"Enter\",keyCode:13,inputType:\"insertParagraph\"},{key:\"Enter\",keyCode:13,inputType:\"insertLineBreak\"},{key:\"Delete\",keyCode:46,inputType:\"deleteContentForward\"}],WQ=\"dthko\",VQ=[16,17,18,20,91,92,224,225],xr=6;function wr(n){return Math.max(0,n)*.7+8}function zQ(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}let qQ=class{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=qk(e.contentDOM),this.atoms=e.state.facet(Gn).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener(\"mousemove\",this.move=this.move.bind(this)),r.addEventListener(\"mouseup\",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(L.allowMultipleSelections)&&IQ(e,t),this.dragging=YQ(e,t)&&g0(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&zQ(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=KO(this.view);e.clientX-a.left<=s+xr?t=-wr(s-e.clientX):e.clientX+a.right>=o-xr&&(t=wr(e.clientX-o)),e.clientY-a.top<=r+xr?i=-wr(r-e.clientY):e.clientY+a.bottom>=l-xr&&(i=wr(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener(\"mousemove\",this.move),e.removeEventListener(\"mouseup\",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=l0(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:\"select.pointer\"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent(\"input.type\"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function IQ(n,e){let t=n.state.facet(WO);return t.length?t[0](e):A.mac?e.metaKey:e.ctrlKey}function _Q(n,e){let t=n.state.facet(VO);return t.length?t[0](e):A.mac?!e.altKey:!e.ctrlKey}function YQ(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=ks(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r<s.length;r++){let o=s[r];if(o.left<=e.clientX&&o.right>=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function NQ(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=pe.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const St=Object.create(null),lt=Object.create(null),d0=A.ie&&A.ie_version<15||A.ios&&A.webkit_version<604;function jQ(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement(\"textarea\"));t.style.cssText=\"position: fixed; left: -10000px; top: 10px\",t.focus(),setTimeout(()=>{n.focus(),t.remove(),p0(n,t.value)},50)}function yl(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function p0(n,e){e=yl(n.state,Jc,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(_h!=null&&t.selection.ranges.every(a=>a.empty)&&_h==r.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:S.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:S.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:\"input.paste\",scrollIntoView:!0})}lt.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};St.keydown=(n,e)=>(n.inputState.setSelectionOrigin(\"select\"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);lt.touchstart=(n,e)=>{n.inputState.lastTouchTime=Date.now(),n.inputState.setSelectionOrigin(\"select.pointer\")};lt.touchmove=n=>{n.inputState.setSelectionOrigin(\"select.pointer\")};St.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(zO))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=HQ(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new qQ(n,e,t,i)),i&&n.observer.ignore(()=>{MO(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin(\"select.pointer\");return!1};function Sd(n,e,t,i){if(i==1)return S.cursor(e,t);if(i==2)return QQ(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return l<n.state.doc.length&&l==r.to&&l++,S.range(o,l)}}const GQ=A.ie&&A.ie_version<=11;let yd=null,xd=0,wd=0;function g0(n){if(!GQ)return n.detail;let e=yd,t=wd;return yd=n,wd=Date.now(),xd=!e||t>Date.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(xd+1)%3:1}function HQ(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=g0(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,c=Sd(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let f=Sd(n,t.pos,t.assoc,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u<c.from?S.range(u,d):S.range(d,u)}return o?s.replaceRange(s.main.extend(c.from,c.to)):l&&i==1&&s.ranges.length>1&&(h=FQ(s,a.pos))?h:l?s.addRange(c):S.create([c])}}}function FQ(n,e){for(let t=0;t<n.ranges.length;t++){let{from:i,to:s}=n.ranges[t];if(i<=e&&s>=e)return S.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}St.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=S.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData(\"Text\",yl(n.state,ef,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed=\"copyMove\"),!1};St.dragend=n=>(n.inputState.draggedContent=null,!1);function kd(n,e,t,i){if(t=yl(n.state,Jc,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&_Q(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?\"move.drop\":\"input.drop\"}),n.inputState.draggedContent=null}St.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&kd(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o<t.length;o++){let l=new FileReader;l.onerror=r,l.onload=()=>{/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData(\"Text\");if(i)return kd(n,e,i,!0),!0}return!1};St.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=d0?null:e.clipboardData;return t?(p0(n,t.getData(\"text/plain\")||t.getData(\"text/uri-list\")),!0):(jQ(n),!1)};function UQ(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement(\"textarea\"));i.style.cssText=\"position: fixed; left: -10000px; top: 10px\",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function KQ(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:yl(n,ef,e.join(n.lineBreak)),ranges:t,linewise:i}}let _h=null;St.copy=St.cut=(n,e)=>{let t=ks(n.root);if(t&&!gn(n.contentDOM,t))return!1;let{text:i,ranges:s,linewise:r}=KQ(n.state);if(!i&&!r)return!1;_h=r?i:null,e.type==\"cut\"&&!n.state.readOnly&&n.dispatch({changes:s,scrollIntoView:!0,userEvent:\"delete.cut\"});let o=d0?null:e.clipboardData;return o?(o.clearData(),o.setData(\"text/plain\",i),!0):(UQ(n,i),!1)};const m0=wt.define();function O0(n,e){let t=[];for(let i of n.facet(_O)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:m0.of(!0)}):null}function b0(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=O0(n.state,e);t?n.dispatch(t):n.update([])}},10)}lt.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),b0(n)};lt.blur=n=>{n.observer.clearSelectionRange(),b0(n)};lt.compositionstart=lt.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};lt.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,A.chrome&&A.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};lt.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};St.beforeinput=(n,e)=>{var t,i;if((e.inputType==\"insertText\"||e.inputType==\"insertCompositionText\")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType==\"insertReplacementText\"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData(\"text/plain\"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return nf(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(A.chrome&&A.android&&(s=u0.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key==\"Backspace\"||s.key==\"Delete\")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return A.ios&&e.inputType==\"deleteContentForward\"&&n.observer.flushSoon(),A.safari&&e.inputType==\"insertText\"&&n.inputState.composing>=0&&setTimeout(()=>lt.compositionend(n,e),20),!1};const Qd=new Set;function JQ(n){Qd.has(n)||(Qd.add(n),n.addEventListener(\"copy\",()=>{}),n.addEventListener(\"cut\",()=>{}))}const vd=[\"pre-wrap\",\"normal\",\"pre-line\",\"break-spaces\"];let vs=!1;function $d(){vs=!1}let ev=class{constructor(e){this.lineWrapping=e,this.doc=Z.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return vd.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i<e.length;i++){let s=e[i];s<0?i++:this.heightSamples[Math.floor(s*10)]||(t=!0,this.heightSamples[Math.floor(s*10)]=!0)}return t}refresh(e,t,i,s,r,o){let l=vd.indexOf(e)>-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h<o.length;h++){let c=o[h];c<0?h++:this.heightSamples[Math.floor(c*10)]=!0}}return a}},tv=class{constructor(e,t){this.from=e,this.heights=t,this.index=0}get more(){return this.index<this.heights.length}},Kt=class S0{constructor(e,t,i,s,r){this.from=e,this.length=t,this.top=i,this.height=s,this._content=r}get type(){return typeof this._content==\"number\"?nt.Text:Array.isArray(this._content)?this._content:this._content.type}get to(){return this.from+this.length}get bottom(){return this.top+this.height}get widget(){return this._content instanceof An?this._content.widget:null}get widgetLineBreaks(){return typeof this._content==\"number\"?this._content:0}join(e){let t=(Array.isArray(this._content)?this._content:[this]).concat(Array.isArray(e._content)?e._content:[e]);return new S0(this.from,this.length+e.length,this.top,this.height+e.height,t)}};var ne=(function(n){return n[n.ByPos=0]=\"ByPos\",n[n.ByHeight=1]=\"ByHeight\",n[n.ByPosNoHeight=2]=\"ByPosNoHeight\",n})(ne||(ne={}));const Kr=.001;let Ot=class Jr{constructor(e,t,i=2){this.length=e,this.height=t,this.flags=i}get outdated(){return(this.flags&2)>0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>Kr&&(vs=!0),this.height=e)}replace(e,t,i){return Jr.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=s[l],u=r.lineAt(a,ne.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,ne.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,c=s[l-1].fromB,l--,a<u.from&&(u=r.lineAt(a,ne.ByPosNoHeight,i,0,0));c+=u.from-a,a=u.from;let p=rv.build(i.setDoc(o),e,c,f);r=Ao(r,r.replace(a,h,p))}return r.updateHeight(i,0)}static empty(){return new Zt(0,0,0)}static of(e){if(e.length==1)return e[0];let t=0,i=e.length,s=0,r=0;for(;;)if(t==i)if(s>r*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s<r){let l=e[t++];l&&(s+=l.size)}else{let l=e[--i];l&&(r+=l.size)}let o=0;return e[t-1]==null?(o=1,t--):e[t]==null&&(o=1,i++),new sv(Jr.of(e.slice(0,t)),o,Jr.of(e.slice(i)))}};function Ao(n,e){return n==e?n:(n.constructor!=e.constructor&&(vs=!0),e)}Ot.prototype.size=1;const iv=We.replace({});let y0=class extends Ot{constructor(e,t,i){super(e,t),this.deco=i,this.spaceAbove=0}mainBlock(e,t){return new Kt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.deco||0)}blockAt(e,t,i,s){return this.spaceAbove&&e<i+this.spaceAbove?new Kt(s,0,i,this.spaceAbove,iv):this.mainBlock(i,s)}lineAt(e,t,i,s,r){let o=this.mainBlock(s,r);return this.spaceAbove?this.blockAt(0,i,s,r).join(o):o}forEachLine(e,t,i,s,r,o){e<=r+this.length&&t>=r&&o(this.lineAt(0,ne.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}},Zt=class Yh extends y0{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new Kt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof Yh||s instanceof cs&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof cs?s=new Yh(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):Ot.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:\"\"}${this.widgetHeight?\":\"+this.widgetHeight:\"\"})`}},cs=class ft extends Ot{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e<t.lineHeight?0:Math.round(Math.max(0,Math.min(1,(e-i)/this.height))*this.length)),c=t.doc.lineAt(h),f=l+c.length*a,u=Math.max(i,e-f/2);return new Kt(c.from,c.length,u,f,0)}else{let h=Math.max(0,Math.min(o-r,Math.floor((e-i)/l))),{from:c,length:f}=t.doc.line(r+h);return new Kt(c,f,i+l*h,l,0)}}lineAt(e,t,i,s,r){if(t==ne.ByHeight)return this.blockAt(e,i,s,r);if(t==ne.ByPosNoHeight){let{from:d,to:p}=i.doc.lineAt(e);return new Kt(d,p-d,0,0,0)}let{firstLine:o,perLine:l,perChar:a}=this.heightMetrics(i,r),h=i.doc.lineAt(e),c=l+h.length*a,f=h.number-o,u=s+l*f+a*(h.from-r-f);return new Kt(h.from,h.length,Math.max(s,Math.min(u,s+this.height-c)),c,0)}forEachLine(e,t,i,s,r,o){e=Math.max(e,r),t=Math.min(t,r+this.length);let{firstLine:l,perLine:a,perChar:h}=this.heightMetrics(i,r);for(let c=e,f=s;c<=t;){let u=i.doc.lineAt(c);if(c==e){let p=u.number-l;f+=a*p+h*(e-r-p)}let d=a+h*u.length;o(new Kt(u.from,u.length,f,d,0)),f+=d,c=u.to+1}}replace(e,t,i){let s=this.length-t;if(s>0){let r=i[i.length-1];r instanceof ft?i[i.length-1]=new ft(r.length+s):i.push(null,new ft(s-1))}if(e>0){let r=i[0];r instanceof ft?i[0]=new ft(e+r.length):i.unshift(new ft(e-1),null)}return Ot.of(i)}decomposeLeft(e,t){t.push(new ft(e-1),null)}decomposeRight(e,t){t.push(null,new ft(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new ft(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=s.heights[s.index++],u=0;f<0&&(u=-f,f=s.heights[s.index++]),a==-1?a=f:Math.abs(f-a)>=Kr&&(a=-2);let d=new Zt(c,f,u);d.outdated=!1,o.push(d),l+=c+1}l<=r&&o.push(null,new ft(r-l).updateHeight(e,l));let h=Ot.of(o);return(a<0||Math.abs(h.height-this.height)>=Kr||Math.abs(a-this.heightMetrics(e,t).perLine)>=Kr)&&(vs=!0),Ao(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},sv=class extends Ot{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return e<r?this.left.blockAt(e,t,i,s):this.right.blockAt(e,t,r,s+this.left.length+this.break)}lineAt(e,t,i,s,r){let o=s+this.left.height,l=r+this.left.length+this.break,a=t==ne.ByHeight?e<o:e<l,h=a?this.left.lineAt(e,t,i,s,r):this.right.lineAt(e,t,i,o,l);if(this.break||(a?h.to<l:h.from>l))return h;let c=t==ne.ByPosNoHeight?ne.ByPosNoHeight:ne.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e<a&&this.left.forEachLine(e,t,i,s,r,o),t>=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,ne.ByPos,i,s,r);e<h.from&&this.left.forEachLine(e,h.from-1,i,s,r,o),h.to>=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(t<s)return this.balanced(this.left.replace(e,t,i),this.right);if(e>this.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&Pd(r,o-1),t<this.length){let l=r.length;this.decomposeRight(t,r),Pd(r,l)}return Ot.of(r)}decomposeLeft(e,t){let i=this.left.length;if(e<=i)return this.left.decomposeLeft(e,t);t.push(this.left),this.break&&(i++,e>=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e<i&&this.left.decomposeRight(e,t),this.break&&e<s&&t.push(null),t.push(this.right)}balanced(e,t){return e.size>2*t.size||t.size>2*e.size?Ot.of(this.break?[e,null,t]:[e,t]):(this.left=Ao(this.left,e),this.right=Ao(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?\" \":\"-\")+this.right}};function Pd(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof cs&&(i=n[e+1])instanceof cs&&n.splice(e-1,3,new cs(t.length+1+i.length))}const nv=5;let rv=class x0{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof Zt?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new Zt(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e<t||i.heightRelevant){let s=i.widget?i.widget.estimatedHeight:0,r=i.widget?i.widget.lineBreaks:0;s<0&&(s=this.oracle.lineHeight);let o=t-e;i.block?this.addBlock(new y0(o,s,i)):(o||r||s>=nv)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd<this.pos&&(this.lineEnd=this.oracle.doc.lineAt(this.pos).to)}enterLine(){if(this.lineStart>-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenTo<e&&((this.writtenTo<e-1||this.nodes[this.nodes.length-1]==null)&&this.nodes.push(this.blankContent(this.writtenTo,e-1)),this.nodes.push(null)),this.pos>e&&this.nodes.push(new Zt(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new cs(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Zt)return e;let t=new Zt(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof Zt)&&!this.isCovered?this.nodes.push(new Zt(0,-1,0)):(this.writtenTo<this.pos||t==null)&&this.nodes.push(this.blankContent(this.writtenTo,this.pos));let i=e;for(let s of this.nodes)s instanceof Zt&&s.updateHeight(this.oracle,i),i+=s?s.length:1;return this.nodes}static build(e,t,i,s){let r=new x0(i,e);return M.spans(t,i,s,r,0),r.finish(i)}};function ov(n,e,t){let i=new lv;return M.compare(n,e,t,i,0),i.changes}let lv=class{constructor(){this.changes=[]}compareRange(){}comparePoint(e,t,i,s){(e<t||i&&i.heightRelevant||s&&s.heightRelevant)&&ls(e,t,this.changes,5)}};function av(n,e){let t=n.getBoundingClientRect(),i=n.ownerDocument,s=i.defaultView||window,r=Math.max(0,t.left),o=Math.min(s.innerWidth,t.right),l=Math.max(0,t.top),a=Math.min(s.innerHeight,t.bottom);for(let h=n.parentNode;h&&h!=i.body;)if(h.nodeType==1){let c=h,f=window.getComputedStyle(c);if((c.scrollHeight>c.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!=\"visible\"){let u=c.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=f.position==\"absolute\"||f.position==\"fixed\"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function hv(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left<t.innerWidth&&e.right>0&&e.top<t.innerHeight&&e.bottom>0}function cv(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}let oa=class{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;i<e.length;i++){let s=e[i],r=t[i];if(s.from!=r.from||s.to!=r.to||s.size!=r.size)return!1}return!0}draw(e,t){return We.replace({widget:new fv(this.displaySize*(t?e.scaleY:e.scaleX),t)}).range(this.from,this.to)}},fv=class extends ml{constructor(e,t){super(),this.size=e,this.vertical=t}eq(e){return e.size==this.size&&e.vertical==this.vertical}toDOM(){let e=document.createElement(\"div\");return this.vertical?e.style.height=this.size+\"px\":(e.style.width=this.size+\"px\",e.style.height=\"2px\",e.style.display=\"inline-block\"),e}get estimatedHeight(){return this.vertical?this.size:-1}},Cd=class{constructor(e){this.state=e,this.pixelViewport={left:0,right:window.innerWidth,top:0,bottom:0},this.inView=!0,this.paddingTop=0,this.paddingBottom=0,this.contentDOMWidth=0,this.contentDOMHeight=0,this.editorHeight=0,this.editorWidth=0,this.scrollTop=0,this.scrolledToBottom=!1,this.scaleX=1,this.scaleY=1,this.scrollAnchorPos=0,this.scrollAnchorHeight=-1,this.scaler=Td,this.scrollTarget=null,this.printing=!1,this.mustMeasureContent=!0,this.defaultTextDirection=be.LTR,this.visibleRanges=[],this.mustEnforceCursorAssoc=!1;let t=e.facet(tf).some(i=>typeof i!=\"function\"&&i.class==\"cm-lineWrapping\");this.heightOracle=new ev(t),this.stateDeco=Md(e),this.heightMap=Ot.empty().applyChanges(this.stateDeco,Z.empty,this.heightOracle.setDoc(e.doc),[new ni(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=We.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new kr(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?Td:new pv(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(nn(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Md(this.state);let s=e.changedRanges,r=ni.extendWithRanges(s,ov(i,this.stateDeco,e?e.changes:he.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);$d(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||vs)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.head<a.from||t.range.head>a.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(tQ)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction==\"rtl\"?be.RTL:be.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent,l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:v,scaleY:w}=TO(t,l);(v>.005&&Math.abs(this.scaleX-v)>.005||w>.005&&Math.abs(this.scaleY-w)>.005)&&(this.scaleX=v,this.scaleY=w,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=AO(e.scrollDOM);let p=(this.printing?cv:av)(t,this.paddingTop),g=p.top-this.pixelViewport.top,m=p.bottom-this.pixelViewport.bottom;this.pixelViewport=p;let O=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(O!=this.inView&&(this.inView=O,O&&(a=!0)),!this.inView&&!this.scrollTarget&&!hv(e.dom))return 0;let y=l.width;if((this.contentDOMWidth!=y||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let v=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(v)&&(o=!0),o||s.lineWrapping&&Math.abs(y-this.contentDOMWidth)>s.charWidth){let{lineHeight:w,charWidth:Q,textHeight:$}=e.docView.measureTextSize();o=w>0&&s.refresh(r,w,Q,$,Math.max(5,y/Q),v),o&&(e.docView.minWidth=0,h|=16)}g>0&&m>0?c=Math.max(g,m):g<0&&m<0&&(c=Math.min(g,m)),$d();for(let w of this.viewports){let Q=w.from==this.viewport.from?v:e.docView.measureVisibleLineHeights(w);this.heightMap=(o?Ot.empty().applyChanges(this.stateDeco,Z.empty,this.heightOracle,[new ni(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new tv(w.from,Q))}vs&&(h|=2)}let x=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.head<this.viewport.from||this.scrollTarget.range.head>this.viewport.to);return x&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||x)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new kr(s.lineAt(o-i*1e3,ne.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,ne.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(h<a.from||h>a.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=s.lineAt(h,ne.ByPos,r,0,0),u;t.y==\"center\"?u=(f.top+f.bottom)/2-c/2:t.y==\"start\"||t.y==\"nearest\"&&h<a.from?u=f.top:u=f.bottom-c,a=new kr(s.lineAt(u-1e3/2,ne.ByHeight,r,0,0).from,s.lineAt(u+c+1e3/2,ne.ByHeight,r,0,0).to)}}return a}mapViewport(e,t){let i=t.mapPos(e.from,-1),s=t.mapPos(e.to,1);return new kr(this.heightMap.lineAt(i,ne.ByPos,this.heightOracle,0,0).from,this.heightMap.lineAt(s,ne.ByPos,this.heightOracle,0,0).to)}viewportIsAppropriate({from:e,to:t},i=0){if(!this.inView)return!0;let{top:s}=this.heightMap.lineAt(e,ne.ByPos,this.heightOracle,0,0),{bottom:r}=this.heightMap.lineAt(t,ne.ByPos,this.heightOracle,0,0),{visibleTop:o,visibleBottom:l}=this;return(e==0||s<=o-Math.max(10,Math.min(-i,250)))&&(t==this.state.doc.length||r>=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r<l+2*1e3}mapLineGaps(e,t){if(!e.length||t.empty)return e;let i=[];for(let s of e)t.touchesRange(s.from,s.to)||i.push(new oa(t.mapPos(s.from),t.mapPos(s.to),s.size,s.displaySize));return i}ensureLineGaps(e,t){let i=this.heightOracle.lineWrapping,s=i?1e4:2e3,r=s>>1,o=s<<1;if(this.defaultTextDirection!=be.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-c<r)return;let p=this.state.selection.main,g=[p.from];p.empty||g.push(p.to);for(let O of g)if(O>c&&O<f){a(c,O-10,u,d),a(O+10,f,u,d);return}let m=dv(e,O=>O.from>=u.from&&O.to<=u.to&&Math.abs(O.from-c)<r&&Math.abs(O.to-f)<r&&!g.some(y=>O.from<y&&O.to>y));if(!m){if(f<u.to&&t&&i&&t.visibleRanges.some(x=>x.from<=f&&x.to>=f)){let x=t.moveToLineBoundary(S.cursor(f),!1,!0).head;x>c&&(f=x)}let O=this.gapSize(u,c,f,d),y=i||O<2e6?O:2e6;m=new oa(c,f,O,y)}l.push(m)},h=c=>{if(c.length<o||c.type!=nt.Text)return;let f=uv(c.from,c.to,this.stateDeco);if(f.total<o)return;let u=this.scrollTarget?this.scrollTarget.range.head:null,d,p;if(i){let g=s/this.heightOracle.lineLength*this.heightOracle.lineHeight,m,O;if(u!=null){let y=vr(f,u),x=((this.visibleBottom-this.visibleTop)/2+g)/c.height;m=y-x,O=y+x}else m=(this.visibleTop-c.top-g)/c.height,O=(this.visibleBottom-c.top+g)/c.height;d=Qr(f,m),p=Qr(f,O)}else{let g=f.total*this.heightOracle.charWidth,m=s*this.heightOracle.charWidth,O=0;if(g>2e6)for(let Q of e)Q.from>=c.from&&Q.from<c.to&&Q.size!=Q.displaySize&&Q.from*this.heightOracle.charWidth+O<this.pixelViewport.left&&(O=Q.size-Q.displaySize);let y=this.pixelViewport.left+O,x=this.pixelViewport.right+O,v,w;if(u!=null){let Q=vr(f,u),$=((x-y)/2+m)/g;v=Q-$,w=Q+$}else v=(y-m)/g,w=(x+m)/g;d=Qr(f,v),p=Qr(f,w)}d>c.from&&a(c.from,d,c,f),p<c.to&&a(p,c.to,c,f)};for(let c of this.viewportLines)Array.isArray(c.type)?c.type.forEach(h):h(c);return l}gapSize(e,t,i,s){let r=vr(s,i)-vr(s,t);return this.heightOracle.lineWrapping?e.height*r:s.total*this.heightOracle.charWidth*r}updateLineGaps(e){oa.same(e,this.lineGaps)||(this.lineGaps=e,this.lineGapDeco=We.set(e.map(t=>t.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];M.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r<i.length&&!(s&8);r++){let o=this.visibleRanges[r],l=i[r];(o.from!=l.from||o.to!=l.to)&&(s|=4,e&&e.mapPos(o.from,-1)==l.from&&e.mapPos(o.to,1)==l.to||(s|=8))}return this.visibleRanges=i,s}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||nn(this.heightMap.lineAt(e,ne.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||nn(this.heightMap.lineAt(this.scaler.fromDOM(e),ne.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return nn(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},kr=class{constructor(e,t){this.from=e,this.to=t}};function uv(n,e,t){let i=[],s=n,r=0;return M.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s<e&&(i.push({from:s,to:e}),r+=e-s),{total:r,ranges:i}}function Qr({total:n,ranges:e},t){if(t<=0)return e[0].from;if(t>=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function vr(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function dv(n,e){for(let t of n)if(e(t))return t}const Td={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Md(n){let e=n.facet(Ol).filter(i=>typeof i!=\"function\"),t=n.facet(sf).filter(i=>typeof i!=\"function\");return t.length&&e.push(M.join(t)),e}let pv=class w0{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,ne.ByPos,e,0,0).top,c=t.lineAt(a,ne.ByPos,e,0,0).bottom;return s+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=t<this.viewports.length?this.viewports[t]:null;if(!r||e<r.top)return s+(e-i)*this.scale;if(e<=r.bottom)return r.domTop+(e-r.top);i=r.bottom,s=r.domBottom}}fromDOM(e){for(let t=0,i=0,s=0;;t++){let r=t<this.viewports.length?this.viewports[t]:null;if(!r||e<r.domTop)return i+(e-s)/this.scale;if(e<=r.domBottom)return r.top+(e-r.domTop);i=r.bottom,s=r.domBottom}}eq(e){return e instanceof w0?this.scale==e.scale&&this.viewports.length==e.viewports.length&&this.viewports.every((t,i)=>t.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}};function nn(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new Kt(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>nn(s,e)):n._content)}const $r=k.define({combine:n=>n.join(\" \")}),Nh=k.define({combine:n=>n.indexOf(!0)>-1}),jh=me.newName(),k0=me.newName(),Q0=me.newName(),v0={\"&light\":\".\"+k0,\"&dark\":\".\"+Q0};function Gh(n,e,t){return new me(e,{finish(i){return/&/.test(i)?i.replace(/&\\w*/,s=>{if(s==\"&\")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+\" \"+i}})}const gv=Gh(\".\"+jh,{\"&\":{position:\"relative !important\",boxSizing:\"border-box\",\"&.cm-focused\":{outline:\"1px dotted #212121\"},display:\"flex !important\",flexDirection:\"column\"},\".cm-scroller\":{display:\"flex !important\",alignItems:\"flex-start !important\",fontFamily:\"monospace\",lineHeight:1.4,height:\"100%\",overflowX:\"auto\",position:\"relative\",zIndex:0,overflowAnchor:\"none\"},\".cm-content\":{margin:0,flexGrow:2,flexShrink:0,display:\"block\",whiteSpace:\"pre\",wordWrap:\"normal\",boxSizing:\"border-box\",minHeight:\"100%\",padding:\"4px 0\",outline:\"none\",\"&[contenteditable=true]\":{WebkitUserModify:\"read-write-plaintext-only\"}},\".cm-lineWrapping\":{whiteSpace_fallback:\"pre-wrap\",whiteSpace:\"break-spaces\",wordBreak:\"break-word\",overflowWrap:\"anywhere\",flexShrink:1},\"&light .cm-content\":{caretColor:\"black\"},\"&dark .cm-content\":{caretColor:\"white\"},\".cm-line\":{display:\"block\",padding:\"0 2px 0 6px\"},\".cm-layer\":{position:\"absolute\",left:0,top:0,contain:\"size style\",\"& > *\":{position:\"absolute\"}},\"&light .cm-selectionBackground\":{background:\"#d9d9d9\"},\"&dark .cm-selectionBackground\":{background:\"#222\"},\"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\":{background:\"#d7d4f0\"},\"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\":{background:\"#233\"},\".cm-cursorLayer\":{pointerEvents:\"none\"},\"&.cm-focused > .cm-scroller > .cm-cursorLayer\":{animation:\"steps(1) cm-blink 1.2s infinite\"},\"@keyframes cm-blink\":{\"0%\":{},\"50%\":{opacity:0},\"100%\":{}},\"@keyframes cm-blink2\":{\"0%\":{},\"50%\":{opacity:0},\"100%\":{}},\".cm-cursor, .cm-dropCursor\":{borderLeft:\"1.2px solid black\",marginLeft:\"-0.6px\",pointerEvents:\"none\"},\".cm-cursor\":{display:\"none\"},\"&dark .cm-cursor\":{borderLeftColor:\"#ddd\"},\".cm-dropCursor\":{position:\"absolute\"},\"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\":{display:\"block\"},\".cm-iso\":{unicodeBidi:\"isolate\"},\".cm-announced\":{position:\"fixed\",top:\"-10000px\"},\"@media print\":{\".cm-announced\":{display:\"none\"}},\"&light .cm-activeLine\":{backgroundColor:\"#cceeff44\"},\"&dark .cm-activeLine\":{backgroundColor:\"#99eeff33\"},\"&light .cm-specialChar\":{color:\"red\"},\"&dark .cm-specialChar\":{color:\"#f78\"},\".cm-gutters\":{flexShrink:0,display:\"flex\",height:\"100%\",boxSizing:\"border-box\",zIndex:200},\".cm-gutters-before\":{insetInlineStart:0},\".cm-gutters-after\":{insetInlineEnd:0},\"&light .cm-gutters\":{backgroundColor:\"#f5f5f5\",color:\"#6c6c6c\",border:\"0px solid #ddd\",\"&.cm-gutters-before\":{borderRightWidth:\"1px\"},\"&.cm-gutters-after\":{borderLeftWidth:\"1px\"}},\"&dark .cm-gutters\":{backgroundColor:\"#333338\",color:\"#ccc\"},\".cm-gutter\":{display:\"flex !important\",flexDirection:\"column\",flexShrink:0,boxSizing:\"border-box\",minHeight:\"100%\",overflow:\"hidden\"},\".cm-gutterElement\":{boxSizing:\"border-box\"},\".cm-lineNumbers .cm-gutterElement\":{padding:\"0 3px 0 5px\",minWidth:\"20px\",textAlign:\"right\",whiteSpace:\"nowrap\"},\"&light .cm-activeLineGutter\":{backgroundColor:\"#e2f2ff\"},\"&dark .cm-activeLineGutter\":{backgroundColor:\"#222227\"},\".cm-panels\":{boxSizing:\"border-box\",position:\"sticky\",left:0,right:0,zIndex:300},\"&light .cm-panels\":{backgroundColor:\"#f5f5f5\",color:\"black\"},\"&light .cm-panels-top\":{borderBottom:\"1px solid #ddd\"},\"&light .cm-panels-bottom\":{borderTop:\"1px solid #ddd\"},\"&dark .cm-panels\":{backgroundColor:\"#333338\",color:\"white\"},\".cm-dialog\":{padding:\"2px 19px 4px 6px\",position:\"relative\",\"& label\":{fontSize:\"80%\"}},\".cm-dialog-close\":{position:\"absolute\",top:\"3px\",right:\"4px\",backgroundColor:\"inherit\",border:\"none\",font:\"inherit\",fontSize:\"14px\",padding:\"0\"},\".cm-tab\":{display:\"inline-block\",overflow:\"hidden\",verticalAlign:\"bottom\"},\".cm-widgetBuffer\":{verticalAlign:\"text-top\",height:\"1em\",width:0,display:\"inline\"},\".cm-placeholder\":{color:\"#888\",display:\"inline-block\",verticalAlign:\"top\",userSelect:\"none\"},\".cm-highlightSpace\":{backgroundImage:\"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",backgroundPosition:\"center\"},\".cm-highlightTab\":{backgroundImage:`url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,backgroundSize:\"auto 100%\",backgroundPosition:\"right 90%\",backgroundRepeat:\"no-repeat\"},\".cm-trailingSpace\":{backgroundColor:\"#ff332255\"},\".cm-button\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",padding:\".2em 1em\",borderRadius:\"1px\"},\"&light .cm-button\":{backgroundImage:\"linear-gradient(#eff1f5, #d9d9df)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#b4b4b4, #d0d3d6)\"}},\"&dark .cm-button\":{backgroundImage:\"linear-gradient(#393939, #111)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#111, #333)\"}},\".cm-textfield\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",border:\"1px solid silver\",padding:\".2em .5em\"},\"&light .cm-textfield\":{backgroundColor:\"white\"},\"&dark .cm-textfield\":{border:\"1px solid #555\",backgroundColor:\"inherit\"}},v0),mv={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},la=A.ie&&A.ie_version<=11;let Ov=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Ik,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(A.ie&&A.ie_version<=11||A.ios&&e.composing)&&t.some(i=>i.type==\"childList\"&&i.removedNodes.length||i.type==\"characterData\"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&A.android&&e.constructor.EDIT_CONTEXT!==!1&&!(A.chrome&&A.chrome_version<126)&&(this.editContext=new Sv(e),e.state.facet(Ut)&&(e.contentDOM.editContext=this.editContext.editContext)),la&&(this.onCharData=t=>{this.queue.push({target:t.target,type:\"characterData\",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia(\"print\")),typeof ResizeObserver==\"function\"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate)<Date.now()-75&&this.onResize()}),this.resizeScroll.observe(e.scrollDOM)),this.addWindowListeners(this.win=e.win),this.start(),typeof IntersectionObserver==\"function\"&&(this.intersection=new IntersectionObserver(t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent(\"Event\")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent(\"Event\"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers(\"scroll\",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type==\"change\"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Ut)?i.root.activeElement!=this.dom:!gn(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(A.ie&&A.ie_version<=11||A.android&&A.chrome)&&!i.state.selection.main.empty&&s.focusNode&&mn(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=ks(e.root);if(!t)return!1;let i=A.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&bv(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=gn(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime<Date.now()-300&&Yk(this.dom,i)?(this.view.inputState.lastFocusTime=0,e.docView.updateSelection(),!1):(this.selectionRange.setRange(i),s&&(this.selectionChanged=!0),!0)}setSelectionRange(e,t){this.selectionRange.set(e.node,e.offset,t.node,t.offset),this.selectionChanged=!1}clearSelectionRange(){this.selectionRange.set(null,0,null,0)}listenForScroll(){this.parentCheck=-1;let e=0,t=null;for(let i=this.dom;i;)if(i.nodeType==1)!t&&e<this.scrollTargets.length&&this.scrollTargets[e]==i?e++:t||(t=this.scrollTargets.slice(0,e)),t&&t.push(i),i=i.assignedSlot||i.parentNode;else if(i.nodeType==11)i=i.host;else break;if(e<this.scrollTargets.length&&!t&&(t=this.scrollTargets.slice(0,e)),t){for(let i of this.scrollTargets)i.removeEventListener(\"scroll\",this.onScroll);for(let i of this.scrollTargets=t)i.addEventListener(\"scroll\",this.onScroll)}}ignore(e){if(!this.active)return e();try{return this.stop(),e()}finally{this.start(),this.clear()}}start(){this.active||(this.observer.observe(this.dom,mv),la&&this.dom.addEventListener(\"DOMCharacterDataModified\",this.onCharData),this.active=!0)}stop(){this.active&&(this.active=!1,this.observer.disconnect(),la&&this.dom.removeEventListener(\"DOMCharacterDataModified\",this.onCharData))}clear(){this.processRecords(),this.queue.length=0,this.selectionChanged=!1}delayAndroidKey(e,t){var i;if(!this.delayedAndroidKey){let s=()=>{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&as(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e==\"Enter\")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange<Date.now()-50||!!(!((i=this.delayedAndroidKey)===null||i===void 0)&&i.force)})}clearDelayedAndroidKey(){this.win.cancelAnimationFrame(this.flushingAndroidKey),this.delayedAndroidKey=null,this.flushingAndroidKey=-1}flushSoon(){this.delayedFlush<0&&(this.delayedFlush=this.view.win.requestAnimationFrame(()=>{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&gn(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new DQ(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=c0(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Mo(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type==\"attributes\"),e.type==\"childList\"){let i=Ad(t,e.previousSibling||e.target.previousSibling,-1),s=Ad(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type==\"characterData\"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener(\"resize\",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener(\"change\",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener(\"beforeprint\",this.onPrint),e.addEventListener(\"scroll\",this.onScroll),e.document.addEventListener(\"selectionchange\",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener(\"scroll\",this.onScroll),e.removeEventListener(\"resize\",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener(\"change\",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener(\"beforeprint\",this.onPrint),e.document.removeEventListener(\"selectionchange\",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Ut)!=e.state.facet(Ut)&&(e.view.contentDOM.editContext=e.state.facet(Ut)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener(\"scroll\",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function Ad(n,e,t){for(;e;){let i=pe.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function Rd(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return mn(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function bv(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return Rd(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener(\"beforeinput\",i,!0),n.dom.ownerDocument.execCommand(\"indent\"),n.contentDOM.removeEventListener(\"beforeinput\",i,!0),t?Rd(n,t):null}let Sv=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&r<this.from?l=r:a==this.to&&r>this.to&&(a=r);let c=f0(e.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?\"end\":null);if(!c){let u=S.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Mo(u,s)||e.dispatch({selection:u,userEvent:\"select\"});return}let f={from:c.from+l,to:c.toA+l,insert:Z.of(i.text.slice(c.from,c.toB).split(`\n`))};if((A.mac||A.android)&&f.from==o-1&&/^\\. ?$/.test(i.text)&&e.contentDOM.getAttribute(\"autocorrect\")==\"off\"&&(f={from:l,to:a,insert:Z.of([i.text.replace(\".\",\" \")])}),this.pendingContextChange=f,!e.state.readOnly){let u=this.to-this.from+(f.to-f.from+f.insert.length);nf(e,f,S.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),f.from<f.to&&!f.insert.length&&e.inputState.composing>=0&&!/[\\\\p{Alphabetic}\\\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o<l;o++){let a=e.coordsForChar(o);r=a&&new DOMRect(a.left,a.top,a.right-a.left,a.bottom-a.top)||r||new DOMRect,s.push(r)}t.updateCharacterBounds(i.rangeStart,s)},this.handlers.textformatupdate=i=>{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a<h){let c=`text-decoration: underline ${/^[a-z]/.test(o)?o+\" \":o==\"Dashed\"?\"dashed \":o==\"Squiggle\"?\"wavy \":\"\"}${/thin/i.test(l)?1:2}px`;s.push(We.mark({attributes:{style:c}}).range(a,h))}}}e.dispatch({effects:jO.of(We.set(s))})},this.handlers.compositionstart=()=>{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=ks(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let c=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=c,this.to+=c;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(r<this.to){if(r<this.from||o>this.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent(\"input.type\")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to<e.doc.length&&this.to-t<500||this.to-this.from>1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},Y=class Hh{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement(\"div\"),this.scrollDOM=document.createElement(\"div\"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className=\"cm-scroller\",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement(\"div\"),this.announceDOM.className=\"cm-announced\",this.announceDOM.setAttribute(\"aria-live\",\"polite\"),this.dom=document.createElement(\"div\"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||_k(e.parent)||document,this.viewState=new Cd(e.state||L.create(e)),e.scrollTo&&e.scrollTo.is(yr)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ki).map(s=>new ta(s));for(let s of this.plugins)s.update(this);this.observer=new Ov(this),this.inputState=new LQ(this),this.inputState.ensureHandlers(this.plugins),this.docView=new pd(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent=!0,this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof ce?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(m0))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=O0(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(c=null)):this.observer.clear(),r.facet(L.phrases)!=this.state.facet(L.phrases))return this.setState(r);s=fd.create(this,r,e),s.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection;f=new ea(d.empty?d:S.cursor(d.head,d.head>d.anchor?-1:1))}for(let d of u.effects)d.is(yr)&&(f=d.value.clip(this.state))}this.viewState.update(s,f),this.bidiCache=Zd.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(en)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent(\"select.pointer\")))}finally{this.updateState=0}if(s.startState.facet($r)!=s.state.facet($r)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(Eh))try{u(s)}catch(d){si(this.state,d,\"update listener\")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!c0(this,c)&&h.force&&as(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new Cd(e),this.plugins=e.facet(Ki).map(i=>new ta(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new pd(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ki),i=e.state.facet(Ki);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new ta(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s<this.plugins.length;s++)this.plugins[s].update(this);t!=i&&this.inputState.ensureHandlers(this.plugins)}docViewUpdate(){for(let e of this.plugins){let t=e.value;if(t&&t.docViewUpdate)try{t.docViewUpdate(this)}catch(i){si(this.state,i,\"doc view update listener\")}}}measure(e=!0){if(this.destroyed)return;if(this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.scrollDOM,s=i.scrollTop*this.scaleY,{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollTop)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(AO(i))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure(this);if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?\"Measure loop restarted more than 5 times\":\"Viewport failed to stabilize\");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return si(this.state,p),Dd}}),f=fd.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d<h.length;d++)if(c[d]!=Dd)try{let p=h[d];p.write&&p.write(c[d],this)}catch(p){si(this.state,p)}if(u&&this.docView.updateSelection(!0),!f.viewportChanged&&this.measureRequests.length==0){if(this.viewState.editorHeight)if(this.viewState.scrollTarget){this.docView.scrollIntoView(this.viewState.scrollTarget),this.viewState.scrollTarget=null,o=-1;continue}else{let p=(r<0?this.viewState.heightMap.height:this.viewState.lineBlockAt(r).top)-o;if(p>1||p<-1){s=s+p,i.scrollTop=s/this.scaleY,o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(Eh))l(t)}get themeClasses(){return jh+\" \"+(this.state.facet(Nh)?Q0:k0)+\" \"+this.state.facet($r)}updateAttrs(){let e=Bd(this,GO,{class:\"cm-editor\"+(this.hasFocus?\" cm-focused \":\" \")+this.themeClasses}),t={spellcheck:\"false\",autocorrect:\"off\",autocapitalize:\"off\",writingsuggestions:\"false\",translate:\"no\",contenteditable:this.state.facet(Ut)?\"true\":\"false\",class:\"cm-content\",style:`${A.tabSize}: ${this.state.tabSize}`,role:\"textbox\",\"aria-multiline\":\"true\"};this.state.readOnly&&(t[\"aria-readonly\"]=\"true\"),Bd(this,tf,t);let i=this.observer.ignore(()=>{let s=rd(this.contentDOM,this.contentAttrs,t),r=rd(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(Hh.announce)){t&&(this.announceDOM.textContent=\"\"),t=!1;let r=this.announceDOM.appendChild(document.createElement(\"div\"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(en);let e=this.state.facet(Hh.cspNonce);me.mount(this.root,this.styleModules.concat(gv).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error(\"Reading the editor layout isn't allowed during an update\");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;t<this.measureRequests.length;t++)if(this.measureRequests[t].key===e.key){this.measureRequests[t]=e;return}}this.measureRequests.push(e)}}plugin(e){let t=this.pluginMap.get(e);return(t===void 0||t&&t.plugin!=e)&&this.pluginMap.set(e,t=this.plugins.find(i=>i.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return ra(this,e,gd(this,e,t,i))}moveByGroup(e,t){return ra(this,e,gd(this,e,t,i=>CQ(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return S.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return PQ(this,e,t,i)}moveVertically(e,t,i){return ra(this,e,TQ(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=Ih(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),Ih(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[ii.find(r,e-s.from,-1,t)];return $o(i,o.dir==be.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(YO)||e<this.viewport.from||e>this.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>yv)return LO(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||XO(r.isolates,i=cd(this,e))))return r.order;i||(i=cd(this,e));let s=Kk(e.text,t,i);return this.bidiCache.push(new Zd(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||A.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{MO(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return yr.of(new ea(typeof e==\"number\"?S.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return yr.of(new ea(S.cursor(i.from),\"start\",\"start\",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e==\"boolean\"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return hd.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return hd.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=me.newName(),s=[$r.of(i),en.of(Gh(`.${i}`,e))];return t&&t.dark&&s.push(Nh.of(!0)),s}static baseTheme(e){return xt.lowest(en.of(Gh(\".\"+jh,e,v0)))}static findFromDOM(e){var t;let i=e.querySelector(\".cm-content\"),s=i&&pe.get(i)||pe.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}};Y.styleModule=en;Y.inputHandler=IO;Y.clipboardInputFilter=Jc;Y.clipboardOutputFilter=ef;Y.scrollHandler=NO;Y.focusChangeEffect=_O;Y.perLineTextDirection=YO;Y.exceptionSink=qO;Y.updateListener=Eh;Y.editable=Ut;Y.mouseSelectionStyle=zO;Y.dragMovesSelection=VO;Y.clickAddsSelectionRange=WO;Y.decorations=Ol;Y.blockWrappers=HO;Y.outerDecorations=sf;Y.atomicRanges=Gn;Y.bidiIsolatedRanges=FO;Y.scrollMargins=UO;Y.darkTheme=Nh;Y.cspNonce=k.define({combine:n=>n.length?n[0]:\"\"});Y.contentAttributes=tf;Y.editorAttributes=GO;Y.lineWrapping=Y.contentAttributes.of({class:\"cm-lineWrapping\"});Y.announce=B.define();const yv=4096,Dd={};let Zd=class $0{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:be.LTR;for(let r=Math.max(0,e.length-10);r<e.length;r++){let o=e[r];o.dir==s&&!t.touchesRange(o.from,o.to)&&i.push(new $0(t.mapPos(o.from,1),t.mapPos(o.to,-1),o.dir,o.isolates,!1,o.order))}return i}};function Bd(n,e,t){for(let i=n.state.facet(e),s=i.length-1;s>=0;s--){let r=i[s],o=typeof r==\"function\"?r(n):r;o&&Gc(o,t)}return t}let $s=class extends Ve{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};$s.prototype.elementClass=\"\";$s.prototype.toDOM=void 0;$s.prototype.mapMode=te.TrackBefore;$s.prototype.startSide=$s.prototype.endSide=-1;$s.prototype.point=!0;const xv=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=of(n.state,t.from);return i.line?wv(n):i.block?Qv(n):!1};function rf(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}const wv=rf(Pv,0),kv=rf(P0,0),Qv=rf((n,e)=>P0(n,e,$v(e)),0);function of(n,e){let t=n.languageDataAt(\"commentTokens\",e,1);return t.length?t[0]:{}}const Ns=50;function vv(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-Ns,i),o=n.sliceDoc(s,s+Ns),l=/\\s*$/.exec(r)[0].length,a=/^\\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let c,f;s-i<=2*Ns?c=f=n.sliceDoc(i,s):(c=n.sliceDoc(i,i+Ns),f=n.sliceDoc(s-Ns,s));let u=/^\\s*/.exec(c)[0].length,d=/\\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\\s/.test(c.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\\s/.test(f.charAt(p-1))?1:0}}:null}function $v(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\\s*/.exec(i.text)[0].length,to:s.to})}return e}function P0(n,e,t=e.selection.ranges){let i=t.map(r=>of(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>vv(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+\" \"},{from:r.to,insert:\" \"+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;o<s.length;o++)if(l=s[o]){let a=i[o],{open:h,close:c}=l;r.push({from:h.pos-a.open.length,to:h.pos+h.margin},{from:c.pos-c.margin,to:c.pos+a.close.length})}return{changes:r}}return null}function Pv(n,e,t=e.selection.ranges){let i=[],s=-1;e:for(let{from:r,to:o}of t){let l=i.length,a=1e9,h;for(let c=r;c<=o;){let f=e.doc.lineAt(c);if(h==null&&(h=of(e,f.from).line,!h))continue e;if(f.from>s&&(r==o||o>f.from)){s=f.from;let u=/^\\s*/.exec(f.text)[0].length,d=u==f.length,p=f.text.slice(u,u+h.length)==h?u:-1;u<f.text.length&&u<a&&(a=u),i.push({line:f,comment:p,token:h,indent:u,empty:d,single:!1})}c=f.to+1}if(a<1e9)for(let c=l;c<i.length;c++)i[c].indent<i[c].line.text.length&&(i[c].indent=a);i.length==l+1&&(i[l].single=!0)}if(n!=2&&i.some(r=>r.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:c,single:f}of i)(f||!c)&&r.push({from:l.from+h,insert:a+\" \"});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,c=h+a.length;o.text[c-o.from]==\" \"&&c++,r.push({from:h,to:c})}return{changes:r}}return null}const Fh=wt.define(),Cv=wt.define(),Tv=k.define(),C0=k.define({combine(n){return _t(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),T0=Se.define({create(){return zt.empty},update(n,e){let t=e.state.facet(C0),i=e.annotation(Fh);if(i){let a=Ee.fromTransaction(e,i.selection),h=i.side,c=h==0?n.undone:n.done;return a?c=Ro(c,c.length,t.minDepth,a):c=R0(c,e.startState.selection),new zt(h==0?i.rest:c,h==0?c:i.rest)}let s=e.annotation(Cv);if((s==\"full\"||s==\"before\")&&(n=n.isolate()),e.annotation(ce.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=Ee.fromTransaction(e),o=e.annotation(ce.time),l=e.annotation(ce.userEvent);return r?n=n.addChanges(r,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(s==\"full\"||s==\"after\")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new zt(n.done.map(Ee.fromJSON),n.undone.map(Ee.fromJSON))}});function Mv(n={}){return[T0,C0.of(n),Y.domEventHandlers({beforeinput(e,t){let i=e.inputType==\"historyUndo\"?M0:e.inputType==\"historyRedo\"?Uh:null;return i?(e.preventDefault(),i(t)):!1}})]}function xl(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(T0,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}const M0=xl(0,!1),Uh=xl(1,!1),Av=xl(0,!0),Rv=xl(1,!0);class Ee{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new Ee(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new Ee(e.changes&&he.fromJSON(e.changes),[],e.mapped&&qt.fromJSON(e.mapped),e.startSelection&&S.fromJSON(e.startSelection),e.selectionsAfter.map(S.fromJSON))}static fromTransaction(e,t){let i=tt;for(let s of e.startState.facet(Tv)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new Ee(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,tt)}static selection(e){return new Ee(void 0,tt,void 0,void 0,e)}}function Ro(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function Dv(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,l)=>{for(let a=0;a<t.length;){let h=t[a++],c=t[a++];l>=h&&o<=c&&(i=!0)}}),i}function Zv(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function A0(n,e){return n.length?e.length?n.concat(e):n:e}const tt=[],Bv=200;function R0(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-Bv));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),Ro(n,n.length-1,1e9,t.setSelAfter(i)))}else return[Ee.selection([e])]}function Xv(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function aa(n,e){if(!n.length)return n;let t=n.length,i=tt;for(;t;){let s=Lv(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[Ee.selection(i)]:tt}function Lv(n,e,t){let i=A0(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):tt,t);if(!n.changes)return Ee.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new Ee(s,B.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}const Ev=/^(input\\.type|delete)($|\\.)/;class zt{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new zt(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||Ev.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime<s.newGroupDelay&&s.joinToEvent(r,Dv(l.changes,e.changes))||i==\"input.type.compose\")?o=Ro(o,o.length-1,s.minDepth,new Ee(e.changes.compose(l.changes),A0(B.mapEffects(e.effects,l.changes),l.effects),l.mapped,l.startSelection,tt)):o=Ro(o,o.length,s.minDepth,e),new zt(o,tt,t,i)}addSelection(e,t,i,s){let r=this.done.length?this.done[this.done.length-1].selectionsAfter:tt;return r.length>0&&t-this.prevTime<s&&i==this.prevUserEvent&&i&&/^select($|\\.)/.test(i)&&Zv(r[r.length-1],e)?this:new zt(R0(this.done,e),this.undone,t,i)}addMapping(e){return new zt(aa(this.done,e),aa(this.undone,e),this.prevTime,this.prevUserEvent)}pop(e,t,i){let s=e==0?this.done:this.undone;if(s.length==0)return null;let r=s[s.length-1],o=r.selectionsAfter[0]||(r.startSelection?r.startSelection.map(r.changes.invertedDesc,1):t.selection);if(i&&r.selectionsAfter.length)return t.update({selection:r.selectionsAfter[r.selectionsAfter.length-1],annotations:Fh.of({side:e,rest:Xv(s),selection:o}),userEvent:e==0?\"select.undo\":\"select.redo\",scrollIntoView:!0});if(r.changes){let l=s.length==1?tt:s.slice(0,s.length-1);return r.mapped&&(l=aa(l,r.mapped)),t.update({changes:r.changes,selection:r.startSelection,effects:r.effects,annotations:Fh.of({side:e,rest:l,selection:o}),filter:!1,userEvent:e==0?\"undo\":\"redo\",scrollIntoView:!0})}else return null}}zt.empty=new zt(tt,tt);const Wv=[{key:\"Mod-z\",run:M0,preventDefault:!0},{key:\"Mod-y\",mac:\"Mod-Shift-z\",run:Uh,preventDefault:!0},{linux:\"Ctrl-Shift-z\",run:Uh,preventDefault:!0},{key:\"Mod-u\",run:Av,preventDefault:!0},{key:\"Alt-u\",mac:\"Mod-Shift-u\",run:Rv,preventDefault:!0}];function Es(n,e){return S.create(n.ranges.map(e),n.mainIndex)}function kt(n,e){return n.update({selection:e,scrollIntoView:!0,userEvent:\"select\"})}function Qt({state:n,dispatch:e},t){let i=Es(n.selection,t);return i.eq(n.selection,!0)?!1:(e(kt(n,i)),!0)}function wl(n,e){return S.cursor(e?n.to:n.from)}function D0(n,e){return Qt(n,t=>t.empty?n.moveByChar(t,e):wl(t,e))}function $e(n){return n.textDirectionAt(n.state.selection.main.head)==be.LTR}const Z0=n=>D0(n,!$e(n)),B0=n=>D0(n,$e(n));function X0(n,e){return Qt(n,t=>t.empty?n.moveByGroup(t,e):wl(t,e))}const Vv=n=>X0(n,!$e(n)),zv=n=>X0(n,$e(n));function qv(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function kl(n,e,t){let i=fe(n).resolveInner(e.head),s=t?V.closedBy:V.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;qv(n,h,s)?i=h:a=t?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=t?Vt(n,i.from,1):Vt(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,S.cursor(l,t?-1:1)}const Iv=n=>Qt(n,e=>kl(n.state,e,!$e(n))),_v=n=>Qt(n,e=>kl(n.state,e,$e(n)));function L0(n,e){return Qt(n,t=>{if(!t.empty)return wl(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const E0=n=>L0(n,!1),W0=n=>L0(n,!0);function V0(n){let e=n.scrollDOM.clientHeight<n.scrollDOM.scrollHeight-2,t=0,i=0,s;if(e){for(let r of n.state.facet(Y.scrollMargins)){let o=r(n);o?.top&&(t=Math.max(o?.top,t)),o?.bottom&&(i=Math.max(o?.bottom,i))}s=n.scrollDOM.clientHeight-t-i}else s=(n.dom.ownerDocument.defaultView||window).innerHeight;return{marginTop:t,marginBottom:i,selfScroll:e,height:Math.max(n.defaultLineHeight,s-5)}}function z0(n,e){let t=V0(n),{state:i}=n,s=Es(i.selection,o=>o.empty?n.moveVertically(o,e,t.height):wl(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottom<h&&(r=Y.scrollIntoView(s.main.head,{y:\"start\",yMargin:o.top-a}))}return n.dispatch(kt(i,s),{effects:r}),!0}const Xd=n=>z0(n,!1),Kh=n=>z0(n,!0);function Ci(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=S.cursor(i.from+r))}return s}const Yv=n=>Qt(n,e=>Ci(n,e,!0)),Nv=n=>Qt(n,e=>Ci(n,e,!1)),jv=n=>Qt(n,e=>Ci(n,e,!$e(n))),Gv=n=>Qt(n,e=>Ci(n,e,$e(n))),Hv=n=>Qt(n,e=>S.cursor(n.lineBlockAt(e.head).from,1)),Fv=n=>Qt(n,e=>S.cursor(n.lineBlockAt(e.head).to,-1));function Uv(n,e,t){let i=!1,s=Es(n.selection,r=>{let o=Vt(n,r.head,-1)||Vt(n,r.head,1)||r.head>0&&Vt(n,r.head-1,1)||r.head<n.doc.length&&Vt(n,r.head+1,-1);if(!o||!o.end)return r;i=!0;let l=o.start.from==r.head?o.end.to:o.end.from;return S.cursor(l)});return i?(e(kt(n,s)),!0):!1}const Kv=({state:n,dispatch:e})=>Uv(n,e);function ht(n,e){let t=Es(n.state.selection,i=>{let s=e(i);return S.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0)});return t.eq(n.state.selection)?!1:(n.dispatch(kt(n.state,t)),!0)}function q0(n,e){return ht(n,t=>n.moveByChar(t,e))}const I0=n=>q0(n,!$e(n)),_0=n=>q0(n,$e(n));function Y0(n,e){return ht(n,t=>n.moveByGroup(t,e))}const Jv=n=>Y0(n,!$e(n)),e$=n=>Y0(n,$e(n)),t$=n=>ht(n,e=>kl(n.state,e,!$e(n))),i$=n=>ht(n,e=>kl(n.state,e,$e(n)));function N0(n,e){return ht(n,t=>n.moveVertically(t,e))}const j0=n=>N0(n,!1),G0=n=>N0(n,!0);function H0(n,e){return ht(n,t=>n.moveVertically(t,e,V0(n).height))}const Ld=n=>H0(n,!1),Ed=n=>H0(n,!0),s$=n=>ht(n,e=>Ci(n,e,!0)),n$=n=>ht(n,e=>Ci(n,e,!1)),r$=n=>ht(n,e=>Ci(n,e,!$e(n))),o$=n=>ht(n,e=>Ci(n,e,$e(n))),l$=n=>ht(n,e=>S.cursor(n.lineBlockAt(e.head).from)),a$=n=>ht(n,e=>S.cursor(n.lineBlockAt(e.head).to)),Wd=({state:n,dispatch:e})=>(e(kt(n,{anchor:0})),!0),Vd=({state:n,dispatch:e})=>(e(kt(n,{anchor:n.doc.length})),!0),zd=({state:n,dispatch:e})=>(e(kt(n,{anchor:n.selection.main.anchor,head:0})),!0),qd=({state:n,dispatch:e})=>(e(kt(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),h$=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:\"select\"})),!0),c$=({state:n,dispatch:e})=>{let t=Ql(n).map(({from:i,to:s})=>S.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:S.create(t),userEvent:\"select\"})),!0},f$=({state:n,dispatch:e})=>{let t=Es(n.selection,i=>{let s=fe(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from<i.from&&l.to>=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return S.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(kt(n,t)),!0)};function F0(n,e){let{state:t}=n,i=t.selection,s=t.selection.ranges.slice();for(let r of t.selection.ranges){let o=t.doc.lineAt(r.head);if(e?o.to<n.state.doc.length:o.from>0)for(let l=r;;){let a=n.moveVertically(l,e);if(a.head<o.from||a.head>o.to){s.some(h=>h.head==a.head)||s.push(a);break}else{if(a.head==l.head)break;l=a}}}return s.length==i.ranges.length?!1:(n.dispatch(kt(t,S.create(s,s.length-1))),!0)}const u$=n=>F0(n,!1),d$=n=>F0(n,!0),p$=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=S.create([t.main]):t.main.empty||(i=S.create([S.cursor(t.main.head)])),i?(e(kt(n,i)),!0):!1};function Hn(n,e){if(n.state.readOnly)return!1;let t=\"delete.selection\",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=e(r);a<o?(t=\"delete.backward\",a=Pr(n,a,!1)):a>o&&(t=\"delete.forward\",a=Pr(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=Pr(n,o,!1),l=Pr(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:S.cursor(o,o<r.head?-1:1)}});return s.changes.empty?!1:(n.dispatch(i.update(s,{scrollIntoView:!0,userEvent:t,effects:t==\"delete.selection\"?Y.announce.of(i.phrase(\"Selection deleted\")):void 0})),!0)}function Pr(n,e,t){if(n instanceof Y)for(let i of n.state.facet(Y.atomicRanges).map(s=>s(n)))i.between(e,e,(s,r)=>{s<e&&r>e&&(e=t?r:s)});return e}const U0=(n,e,t)=>Hn(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(t&&!e&&s>o.from&&s<o.from+200&&!/[^ \\t]/.test(l=o.text.slice(0,s-o.from))){if(l[l.length-1]==\"\t\")return s-1;let h=Ls(l,r.tabSize),c=h%xo(r)||xo(r);for(let f=0;f<c&&l[l.length-1-f]==\" \";f++)s--;a=s}else a=_(o.text,s-o.from,e,e)+o.from,a==s&&o.number!=(e?r.doc.lines:1)?a+=e?1:-1:!e&&/[\\ufe00-\\ufe0f]/.test(o.text.slice(a-o.from,s-o.from))&&(a=_(o.text,a-o.from,!1,!1)+o.from);return a}),Jh=n=>U0(n,!1,!0),K0=n=>U0(n,!0,!1),J0=(n,e)=>Hn(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let a=_(r.text,i-r.from,e)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),c=o(h);if(l!=null&&c!=l)break;(h!=\" \"||i!=t.head)&&(l=c),i=a}return i}),eb=n=>J0(n,!1),g$=n=>J0(n,!0),m$=n=>Hn(n,e=>{let t=n.lineBlockAt(e.head).to;return e.head<t?t:Math.min(n.state.doc.length,e.head+1)}),O$=n=>Hn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),b$=n=>Hn(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head<t?t:Math.min(n.state.doc.length,e.head+1)}),S$=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:Z.of([\"\",\"\"])},range:S.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:\"input\"})),!0},y$=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:_(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:_(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:S.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:\"move.character\"})),!0)};function Ql(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function tb(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of Ql(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),l=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(S.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(S.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:S.create(s,n.selection.mainIndex),userEvent:\"move.line\"})),!0):!1}const x$=({state:n,dispatch:e})=>tb(n,e,!1),w$=({state:n,dispatch:e})=>tb(n,e,!0);function ib(n,e,t){if(n.readOnly)return!1;let i=[];for(let r of Ql(n))t?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return e(n.update({changes:s,selection:n.selection.map(s,t?1:-1),scrollIntoView:!0,userEvent:\"input.copyline\"})),!0}const k$=({state:n,dispatch:e})=>ib(n,e,!1),Q$=({state:n,dispatch:e})=>ib(n,e,!0),v$=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(Ql(e).map(({from:s,to:r})=>(s>0?s--:r<e.doc.length&&r++,{from:s,to:r}))),i=Es(e.selection,s=>{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:\"delete.line\"}),!0};function $$(n,e){if(/\\(\\)|\\[\\]|\\{\\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=fe(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(V.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}const Id=sb(!1),P$=sb(!0);function sb(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,l=e.doc.lineAt(r),a=!n&&r==o&&$$(e,r);n&&(r=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new fl(e,{simulateBreak:r,simulateDoubleBreak:!!a}),c=Nc(h,r);for(c==null&&(c=Ls(/^\\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));o<l.to&&/\\s/.test(l.text[o-l.from]);)o++;a?{from:r,to:o}=a:r>l.from&&r<l.from+100&&!/\\S/.test(l.text.slice(0,r))&&(r=l.from);let f=[\"\",Mn(e,c)];return a&&f.push(Mn(e,h.lineIndent(l.from,-1))),{changes:{from:r,to:o,insert:Z.of(f)},range:S.cursor(r+1+f[1].length)}});return t(e.update(i,{scrollIntoView:!0,userEvent:\"input\"})),!0}}function lf(n,e){let t=-1;return n.changeByRange(i=>{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,s,i),t=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:S.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}const C$=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new fl(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=lf(n,(r,o,l)=>{let a=Nc(i,r.from);if(a==null)return;/\\S/.test(r.text)||(a=0);let h=/^\\s*/.exec(r.text)[0],c=Mn(n,a);(h!=c||l.from<r.from+h.length)&&(t[r.from]=a,o.push({from:r.from,to:r.from+h.length,insert:c}))});return s.changes.empty||e(n.update(s,{userEvent:\"indent\"})),!0},nb=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(lf(n,(t,i)=>{i.push({from:t.from,insert:n.facet(cl)})}),{userEvent:\"input.indent\"})),!0),rb=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(lf(n,(t,i)=>{let s=/^\\s*/.exec(t.text)[0];if(!s)return;let r=Ls(s,n.tabSize),o=0,l=Mn(n,Math.max(0,r-xo(n)));for(;o<s.length&&o<l.length&&s.charCodeAt(o)==l.charCodeAt(o);)o++;i.push({from:t.from+o,to:t.from+s.length,insert:l.slice(o)})}),{userEvent:\"delete.dedent\"})),!0),T$=n=>(n.setTabFocusMode(),!0),M$=[{key:\"Ctrl-b\",run:Z0,shift:I0,preventDefault:!0},{key:\"Ctrl-f\",run:B0,shift:_0},{key:\"Ctrl-p\",run:E0,shift:j0},{key:\"Ctrl-n\",run:W0,shift:G0},{key:\"Ctrl-a\",run:Hv,shift:l$},{key:\"Ctrl-e\",run:Fv,shift:a$},{key:\"Ctrl-d\",run:K0},{key:\"Ctrl-h\",run:Jh},{key:\"Ctrl-k\",run:m$},{key:\"Ctrl-Alt-h\",run:eb},{key:\"Ctrl-o\",run:S$},{key:\"Ctrl-t\",run:y$},{key:\"Ctrl-v\",run:Kh}],A$=[{key:\"ArrowLeft\",run:Z0,shift:I0,preventDefault:!0},{key:\"Mod-ArrowLeft\",mac:\"Alt-ArrowLeft\",run:Vv,shift:Jv,preventDefault:!0},{mac:\"Cmd-ArrowLeft\",run:jv,shift:r$,preventDefault:!0},{key:\"ArrowRight\",run:B0,shift:_0,preventDefault:!0},{key:\"Mod-ArrowRight\",mac:\"Alt-ArrowRight\",run:zv,shift:e$,preventDefault:!0},{mac:\"Cmd-ArrowRight\",run:Gv,shift:o$,preventDefault:!0},{key:\"ArrowUp\",run:E0,shift:j0,preventDefault:!0},{mac:\"Cmd-ArrowUp\",run:Wd,shift:zd},{mac:\"Ctrl-ArrowUp\",run:Xd,shift:Ld},{key:\"ArrowDown\",run:W0,shift:G0,preventDefault:!0},{mac:\"Cmd-ArrowDown\",run:Vd,shift:qd},{mac:\"Ctrl-ArrowDown\",run:Kh,shift:Ed},{key:\"PageUp\",run:Xd,shift:Ld},{key:\"PageDown\",run:Kh,shift:Ed},{key:\"Home\",run:Nv,shift:n$,preventDefault:!0},{key:\"Mod-Home\",run:Wd,shift:zd},{key:\"End\",run:Yv,shift:s$,preventDefault:!0},{key:\"Mod-End\",run:Vd,shift:qd},{key:\"Enter\",run:Id,shift:Id},{key:\"Mod-a\",run:h$},{key:\"Backspace\",run:Jh,shift:Jh,preventDefault:!0},{key:\"Delete\",run:K0,preventDefault:!0},{key:\"Mod-Backspace\",mac:\"Alt-Backspace\",run:eb,preventDefault:!0},{key:\"Mod-Delete\",mac:\"Alt-Delete\",run:g$,preventDefault:!0},{mac:\"Mod-Backspace\",run:O$,preventDefault:!0},{mac:\"Mod-Delete\",run:b$,preventDefault:!0}].concat(M$.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),R$=[{key:\"Alt-ArrowLeft\",mac:\"Ctrl-ArrowLeft\",run:Iv,shift:t$},{key:\"Alt-ArrowRight\",mac:\"Ctrl-ArrowRight\",run:_v,shift:i$},{key:\"Alt-ArrowUp\",run:x$},{key:\"Shift-Alt-ArrowUp\",run:k$},{key:\"Alt-ArrowDown\",run:w$},{key:\"Shift-Alt-ArrowDown\",run:Q$},{key:\"Mod-Alt-ArrowUp\",run:u$},{key:\"Mod-Alt-ArrowDown\",run:d$},{key:\"Escape\",run:p$},{key:\"Mod-Enter\",run:P$},{key:\"Alt-l\",mac:\"Ctrl-l\",run:c$},{key:\"Mod-i\",run:f$,preventDefault:!0},{key:\"Mod-[\",run:rb},{key:\"Mod-]\",run:nb},{key:\"Mod-Alt-\\\\\",run:C$},{key:\"Shift-Mod-k\",run:v$},{key:\"Shift-Mod-\\\\\",run:Kv},{key:\"Mod-/\",run:xv},{key:\"Alt-A\",run:kv},{key:\"Ctrl-m\",mac:\"Shift-Alt-m\",run:T$}].concat(A$),D$={key:\"Tab\",run:nb,shift:rb};let Te=typeof navigator<\"u\"?navigator:{userAgent:\"\",vendor:\"\",platform:\"\"},ec=typeof document<\"u\"?document:{documentElement:{style:{}}};const tc=/Edge\\/(\\d+)/.exec(Te.userAgent),ob=/MSIE \\d/.test(Te.userAgent),ic=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(Te.userAgent),vl=!!(ob||ic||tc),_d=!vl&&/gecko\\/(\\d+)/i.test(Te.userAgent),ha=!vl&&/Chrome\\/(\\d+)/.exec(Te.userAgent),Z$=\"webkitFontSmoothing\"in ec.documentElement.style,sc=!vl&&/Apple Computer/.test(Te.vendor),Yd=sc&&(/Mobile\\/\\w+/.test(Te.userAgent)||Te.maxTouchPoints>2);var T={mac:Yd||/Mac/.test(Te.platform),windows:/Win/.test(Te.platform),linux:/Linux|X11/.test(Te.platform),ie:vl,ie_version:ob?ec.documentMode||6:ic?+ic[1]:tc?+tc[1]:0,gecko:_d,gecko_version:_d?+(/Firefox\\/(\\d+)/.exec(Te.userAgent)||[0,0])[1]:0,chrome:!!ha,chrome_version:ha?+ha[1]:0,ios:Yd,android:/Android\\b/.test(Te.userAgent),webkit_version:Z$?+(/\\bAppleWebKit\\/(\\d+)/.exec(Te.userAgent)||[0,0])[1]:0,safari:sc,safari_version:sc?+(/\\bVersion\\/(\\d+(\\.\\d+)?)/.exec(Te.userAgent)||[0,0])[1]:0,tabSize:ec.documentElement.style.tabSize!=null?\"tab-size\":\"-moz-tab-size\"};function af(n,e){for(let t in n)t==\"class\"&&e.class?e.class+=\" \"+n.class:t==\"style\"&&e.style?e.style+=\";\"+n.style:e[t]=n[t];return e}const Do=Object.create(null);function hf(n,e,t){if(n==e)return!0;n||(n=Do),e||(e=Do);let i=Object.keys(n),s=Object.keys(e);if(i.length-0!=s.length-0)return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function B$(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t==\"style\"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function Nd(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s==\"style\"?n.style.cssText=\"\":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s==\"style\"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function X$(n){let e=Object.create(null);for(let t=0;t<n.attributes.length;t++){let i=n.attributes[t];e[i.name]=i.value}return e}class $l{eq(e){return!1}updateDOM(e,t){return!1}compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}get estimatedHeight(){return-1}get lineBreaks(){return 0}ignoreEvent(e){return!0}coordsAt(e,t,i){return null}get isHidden(){return!1}get editable(){return!1}destroy(e){}}var rt=(function(n){return n[n.Text=0]=\"Text\",n[n.WidgetBefore=1]=\"WidgetBefore\",n[n.WidgetAfter=2]=\"WidgetAfter\",n[n.WidgetRange=3]=\"WidgetRange\",n})(rt||(rt={}));class ee extends Ve{constructor(e,t,i,s){super(),this.startSide=e,this.endSide=t,this.widget=i,this.spec=s}get heightRelevant(){return!1}static mark(e){return new Fn(e)}static widget(e){let t=Math.max(-1e4,Math.min(1e4,e.side||0)),i=!!e.block;return t+=i&&!e.inlineOrder?t>0?3e8:-4e8:t>0?1e8:-1e8,new Ii(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=lb(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new Ii(e,i,s,t,e.widget||null,!0)}static line(e){return new Un(e)}static set(e,t=!1){return M.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}ee.none=M.empty;class Fn extends ee{constructor(e){let{start:t,end:i}=lb(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||\"span\",this.attrs=e.class&&e.attributes?af(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Do}eq(e){return this==e||e instanceof Fn&&this.tagName==e.tagName&&hf(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError(\"Mark decorations may not be empty\");return super.range(e,t)}}Fn.prototype.point=!1;class Un extends ee{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Un&&this.spec.class==e.spec.class&&hf(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError(\"Line decoration ranges must be zero-length\");return super.range(e,t)}}Un.prototype.mapMode=te.TrackBefore;Un.prototype.point=!0;class Ii extends ee{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?te.TrackBefore:te.TrackAfter:te.TrackDel}get type(){return this.startSide!=this.endSide?rt.WidgetRange:this.startSide<=0?rt.WidgetBefore:rt.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Ii&&L$(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError(\"Invalid range for replacement decoration\");if(!this.isReplace&&t!=e)throw new RangeError(\"Widget decorations can only have zero-length ranges\");return super.range(e,t)}}Ii.prototype.point=!0;function lb(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function L$(n,e){return n==e||!!(n&&e&&n.compare(e))}function fs(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}class Zn extends Ve{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof Zn&&this.tagName==e.tagName&&hf(this.attributes,e.attributes)}static create(e){return new Zn(e.tagName,e.attributes||Do)}static set(e,t=!1){return M.of(e,t)}}Zn.prototype.startSide=Zn.prototype.endSide=-1;function Ps(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function nc(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function bn(n,e){if(!e.anchorNode)return!1;try{return nc(n,e.anchorNode)}catch{return!1}}function eo(n){return n.nodeType==3?Bn(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Sn(n,e,t,i){return t?jd(n,e,t,i,-1)||jd(n,e,t,i,1):!1}function $i(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function Zo(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(n.nodeName)}function jd(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:ui(n))){if(n.nodeName==\"DIV\")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=$i(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable==\"false\")return!1;e=s<0?ui(n):0}else return!1}}function ui(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Bo(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function E$(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function ab(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function W$(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,g=1;if(d)u=E$(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let y=c.getBoundingClientRect();({scaleX:p,scaleY:g}=ab(c,y)),u={left:y.left,right:y.left+c.clientWidth*p,top:y.top,bottom:y.top+c.clientHeight*g}}let m=0,O=0;if(s==\"nearest\")e.top<u.top?(O=e.top-(u.top+o),t>0&&e.bottom>u.bottom+O&&(O=e.bottom-u.bottom+o)):e.bottom>u.bottom&&(O=e.bottom-u.bottom+o,t<0&&e.top-O<u.top&&(O=e.top-(u.top+o)));else{let y=e.bottom-e.top,x=u.bottom-u.top;O=(s==\"center\"&&y<=x?e.top+y/2-x/2:s==\"start\"||s==\"center\"&&t<0?e.top-o:e.bottom-x+o)-u.top}if(i==\"nearest\"?e.left<u.left?(m=e.left-(u.left+r),t>0&&e.right>u.right+m&&(m=e.right-u.right+r)):e.right>u.right&&(m=e.right-u.right+r,t<0&&e.left<u.left+m&&(m=e.left-(u.left+r))):m=(i==\"center\"?e.left+(e.right-e.left)/2-(u.right-u.left)/2:i==\"start\"==l?e.left-r:e.right-(u.right-u.left)+r)-u.left,m||O)if(d)h.scrollBy(m,O);else{let y=0,x=0;if(O){let v=c.scrollTop;c.scrollTop+=O/g,x=(c.scrollTop-v)*g}if(m){let v=c.scrollLeft;c.scrollLeft+=m/p,y=(c.scrollLeft-v)*p}e={left:e.left-y,top:e.top-x,right:e.right-y,bottom:e.bottom-x},y&&Math.abs(y-m)<1&&(i=\"nearest\"),x&&Math.abs(x-O)<1&&(s=\"nearest\")}if(d)break;(e.top<u.top||e.bottom>u.bottom||e.left<u.left||e.right>u.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function V$(n){let e=n.ownerDocument,t,i;for(let s=n.parentNode;s&&!(s==e.body||t&&i);)if(s.nodeType==1)!i&&s.scrollHeight>s.clientHeight&&(i=s),!t&&s.scrollWidth>s.clientWidth&&(t=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:t,y:i}}class z${constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?ui(t):0),i,Math.min(e.focusOffset,i?ui(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}}let Di=null;T.safari&&T.safari_version>=26&&(Di=!1);function hb(n){if(n.setActive)return n.setActive();if(Di)return n.focus(Di);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(Di==null?{get preventScroll(){return Di={preventScroll:!0},!0}}:void 0),!Di){Di=!1;for(let t=0;t<e.length;){let i=e[t++],s=e[t++],r=e[t++];i.scrollTop!=s&&(i.scrollTop=s),i.scrollLeft!=r&&(i.scrollLeft=r)}}}let Gd;function Bn(n,e,t=e){let i=Gd||(Gd=document.createRange());return i.setEnd(n,t),i.setStart(n,e),i}function us(n,e,t,i){let s={key:e,code:e,keyCode:t,which:t,cancelable:!0};i&&({altKey:s.altKey,ctrlKey:s.ctrlKey,shiftKey:s.shiftKey,metaKey:s.metaKey}=i);let r=new KeyboardEvent(\"keydown\",s);r.synthetic=!0,n.dispatchEvent(r);let o=new KeyboardEvent(\"keyup\",s);return o.synthetic=!0,n.dispatchEvent(o),r.defaultPrevented||o.defaultPrevented}function q$(n){for(;n;){if(n&&(n.nodeType==9||n.nodeType==11&&n.host))return n;n=n.assignedSlot||n.parentNode}return null}function I$(n,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(i=Math.min(i,ui(t));;)if(i){if(t.nodeType!=1)return!1;let s=t.childNodes[i-1];s.contentEditable==\"false\"?i--:(t=s,i=ui(t))}else{if(t==n)return!0;i=$i(t),t=t.parentNode}}function cb(n){return n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function fb(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable==\"false\")return null;t=t.childNodes[i-1],i=ui(t)}else if(t.parentNode&&!Zo(t))i=$i(t),t=t.parentNode;else return null}}function ub(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i<t.nodeValue.length)return{node:t,offset:i};if(t.nodeType==1&&i<t.childNodes.length){if(t.contentEditable==\"false\")return null;t=t.childNodes[i],i=0}else if(t.parentNode&&!Zo(t))i=$i(t)+1,t=t.parentNode;else return null}}class gt{constructor(e,t,i=!0){this.node=e,this.offset=t,this.precise=i}static before(e,t){return new gt(e.parentNode,$i(e),t)}static after(e,t){return new gt(e.parentNode,$i(e)+1,t)}}var we=(function(n){return n[n.LTR=0]=\"LTR\",n[n.RTL=1]=\"RTL\",n})(we||(we={}));const _i=we.LTR,cf=we.RTL;function db(n){let e=[];for(let t=0;t<n.length;t++)e.push(1<<+n[t]);return e}const _$=db(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\"),Y$=db(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\"),rc=Object.create(null),At=[];for(let n of[\"()\",\"[]\",\"{}\"]){let e=n.charCodeAt(0),t=n.charCodeAt(1);rc[e]=t,rc[t]=-e}function pb(n){return n<=247?_$[n]:1424<=n&&n<=1524?2:1536<=n&&n<=1785?Y$[n-1536]:1774<=n&&n<=2220?4:8192<=n&&n<=8204?256:64336<=n&&n<=65023?4:1}const N$=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;class ri{get dir(){return this.level%2?cf:_i}constructor(e,t,i){this.from=e,this.to=t,this.level=i}side(e,t){return this.dir==t==e?this.to:this.from}forward(e,t){return e==(this.dir==t)}static find(e,t,i,s){let r=-1;for(let o=0;o<e.length;o++){let l=e[o];if(l.from<=t&&l.to>=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.from<t:l.to>t:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError(\"Index out of range\");return r}}function gb(n,e){if(n.length!=e.length)return!1;for(let t=0;t<n.length;t++){let i=n[t],s=e[t];if(i.from!=s.from||i.to!=s.to||i.direction!=s.direction||!gb(i.inner,s.inner))return!1}return!0}const J=[];function j$(n,e,t,i,s){for(let r=0;r<=i.length;r++){let o=r?i[r-1].to:e,l=r<i.length?i[r].from:t,a=r?256:s;for(let h=o,c=a,f=a;h<l;h++){let u=pb(n.charCodeAt(h));u==512?u=c:u==8&&f==4&&(u=16),J[h]=u==4?2:u,u&7&&(f=u),c=u}for(let h=o,c=a,f=a;h<l;h++){let u=J[h];if(u==128)h<l-1&&c==J[h+1]&&c&24?u=J[h]=c:J[h]=256;else if(u==64){let d=h+1;for(;d<l&&J[d]==64;)d++;let p=h&&c==8||d<t&&J[d]==8?f==1?1:8:256;for(let g=h;g<d;g++)J[g]=p;h=d-1}else u==8&&f==1&&(J[h]=1);c=u,u&7&&(f=u)}}}function G$(n,e,t,i,s){let r=s==1?2:1;for(let o=0,l=0,a=0;o<=i.length;o++){let h=o?i[o-1].to:e,c=o<i.length?i[o].from:t;for(let f=h,u,d,p;f<c;f++)if(d=rc[u=n.charCodeAt(f)])if(d<0){for(let g=l-3;g>=0;g-=3)if(At[g+1]==-d){let m=At[g+2],O=m&2?s:m&4?m&1?r:s:0;O&&(J[f]=J[At[g]]=O),l=g;break}}else{if(At.length==189)break;At[l++]=f,At[l++]=u,At[l++]=a}else if((p=J[f])==2||p==1){let g=p==s;a=g?0:1;for(let m=l-3;m>=0;m-=3){let O=At[m+2];if(O&2)break;if(g)At[m+2]|=2;else{if(O&4)break;At[m+2]|=4}}}}}function H$(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=s<t.length?t[s].from:e;for(let a=o;a<l;){let h=J[a];if(h==256){let c=a+1;for(;;)if(c==l){if(s==t.length)break;c=t[s++].to,l=s<t.length?t[s].from:e}else if(J[c]==256)c++;else break;let f=r==1,u=(c<e?J[c]:i)==1,d=f==u?f?1:2:i;for(let p=c,g=s,m=g?t[g-1].to:n;p>a;)p==m&&(p=t[--g].from,m=g?t[g-1].to:n),J[--p]=d;a=c}else r=h,a++}}}function oc(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;a<t;){let c=!0,f=!1;if(h==r.length||a<r[h].from){let g=J[a];g!=l&&(c=!1,f=g==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h<r.length&&p==r[h].from){if(f)break e;let g=r[h];if(!c)for(let m=g.to,O=h+1;;){if(m==t)break e;if(O<r.length&&r[O].from==m)m=r[O++].to;else{if(J[m]==l)break e;break}}if(h++,u)u.push(g);else{g.from>a&&o.push(new ri(a,g.from,d));let m=g.direction==_i!=!(d%2);lc(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.to}p=g.to}else{if(p==t||(c?J[p]!=l:J[p]==l))break;p++}u?oc(n,a,p,i+1,s,u,o):a<p&&o.push(new ri(a,p,d)),a=p}else for(let a=t,h=r.length;a>e;){let c=!0,f=!1;if(!h||a>r[h-1].to){let g=J[a-1];g!=l&&(c=!1,f=g==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(f)break e;let g=r[--h];if(!c)for(let m=g.from,O=h;;){if(m==e)break e;if(O&&r[O-1].to==m)m=r[--O].from;else{if(J[m-1]==l)break e;break}}if(u)u.push(g);else{g.to<a&&o.push(new ri(g.to,a,d));let m=g.direction==_i!=!(d%2);lc(n,m?i+1:i,s,g.inner,g.from,g.to,o),a=g.from}p=g.from}else{if(p==e||(c?J[p-1]!=l:J[p-1]==l))break;p--}u?oc(n,p,a,i+1,s,u,o):p<a&&o.push(new ri(p,a,d)),a=p}}function lc(n,e,t,i,s,r,o){let l=e%2?2:1;j$(n,s,r,i,l),G$(n,s,r,i,l),H$(s,r,i,l),oc(n,s,r,e,t,i,o)}function F$(n,e,t){if(!n)return[new ri(0,0,e==cf?1:0)];if(e==_i&&!t.length&&!N$.test(n))return mb(n.length);if(t.length)for(;n.length>J.length;)J[J.length]=256;let i=[],s=e==_i?0:1;return lc(n,s,s,t,0,n.length,i),i}function mb(n){return[new ri(0,n,0)]}let Ob=\"\";function U$(n,e,t,i,s){var r;let o=i.head-n.from,l=ri.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let c=_(n.text,o,a.forward(s,t));(c<a.from||c>a.to)&&(c=h),Ob=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return f&&c==h&&f.level+(s?0:1)<a.level?S.cursor(f.side(!s,t)+n.from,f.forward(s,t)?1:-1,f.level):S.cursor(c+n.from,a.forward(s,t)?-1:1,a.level)}function K$(n,e,t){for(let i=e;i<t;i++){let s=pb(n.charCodeAt(i));if(s==1)return _i;if(s==2||s==4)return cf}return _i}const bb=k.define(),Sb=k.define(),yb=k.define(),xb=k.define(),ac=k.define(),wb=k.define(),kb=k.define(),ff=k.define(),uf=k.define(),Qb=k.define({combine:n=>n.some(e=>e)}),J$=k.define({combine:n=>n.some(e=>e)}),vb=k.define();class ds{constructor(e,t=\"nearest\",i=\"nearest\",s=5,r=5,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new ds(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new ds(S.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const Cr=B.define({map:(n,e)=>n.map(e)}),$b=B.define();function oi(n,e,t){let i=n.facet(xb);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+\":\",e):console.error(e))}const Jt=k.define({combine:n=>n.length?n[0]:!0});let eP=0;const Ji=k.define({combine(n){return n.filter((e,t)=>{for(let i=0;i<t;i++)if(n[i].plugin==e.plugin)return!1;return!0})}});class Pi{constructor(e,t,i,s,r){this.id=e,this.create=t,this.domEventHandlers=i,this.domEventObservers=s,this.baseExtensions=r(this),this.extension=this.baseExtensions.concat(Ji.of({plugin:this,arg:void 0}))}of(e){return this.baseExtensions.concat(Ji.of({plugin:this,arg:e}))}static define(e,t){const{eventHandlers:i,eventObservers:s,provide:r,decorations:o}=t||{};return new Pi(eP++,e,i,s,l=>{let a=[];return o&&a.push(Pl.of(h=>{let c=h.plugin(l);return c?o(c):ee.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return Pi.define((i,s)=>new e(i,s),t)}}class ca{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(oi(t.state,i,\"CodeMirror plugin crashed\"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){oi(e.state,t,\"CodeMirror plugin crashed\"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){oi(e.state,i,\"CodeMirror plugin crashed\")}}deactivate(){this.spec=this.value=null}}const Pb=k.define(),df=k.define(),Pl=k.define(),Cb=k.define(),pf=k.define(),Kn=k.define(),Tb=k.define();function Hd(n,e){let t=n.state.facet(Tb);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return M.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,c=o-e.from,f=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=K$(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let g={from:h,to:c,direction:d,inner:[]};f.push(g),f=g.inner}}}}),s}const Mb=k.define();function Ab(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(Mb)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}const rn=k.define();class it{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new it(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toA<i.fromA)break;i=i.join(s),e.splice(t-1,1)}}return e.splice(t,0,i),e}static extendWithRanges(e,t){if(t.length==0)return e;let i=[];for(let s=0,r=0,o=0;;){let l=s<e.length?e[s].fromB:1e9,a=r<t.length?t[r]:1e9,h=Math.min(l,a);if(h==1e9)break;let c=h+o,f=h,u=c;for(;;)if(r<t.length&&t[r]<=f){let d=t[r+1];r+=2,f=Math.max(f,d);for(let p=s;p<e.length&&e[p].fromB<=f;p++)o=e[p].toA-e[p].toB;u=Math.max(u,d+o)}else if(s<e.length&&e[s].fromB<=f){let d=e[s++];f=Math.max(f,d.toB),u=Math.max(u,d.toA),o=d.toA-d.toB}else break;i.push(new it(c,u,h,f))}return i}}class Xo{constructor(e,t,i){this.view=e,this.state=t,this.transactions=i,this.flags=0,this.startState=e.state,this.changes=he.empty(this.startState.doc.length);for(let r of i)this.changes=this.changes.compose(r.changes);let s=[];this.changes.iterChangedRanges((r,o,l,a)=>s.push(new it(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new Xo(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const tP=[];class ge{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return tP}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&B$(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:\"\")+(this.breakAfter?\"#\":\"\")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError(\"Invalid child in posBefore\")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=$i(this.dom),s=this.length?e>0:t>0;return new gt(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof Tl)return e;return null}static get(e){return e.cmTile}}class Cl extends ge{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=l.dom&&(r.written=!0),l.dom.parentNode==t)for(;s&&s!=l.dom;)s=Fd(s);else t.insertBefore(l.dom,s);i=l.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=Fd(s);this.length=o}}function Fd(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}class Tl extends Cl{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=ge.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof yi)t.push(s),i=o,s=0;else{let l=r+o.length,a=e(o,r);if(a!==void 0)return a;r=l+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(a<e||e==h&&(t<-1?l.length:l.covers(1)))&&(!i||!l.isWidget()&&i.isWidget())&&(i=l,s=e-a),(h>e||e==a&&(t>1?l.length:l.covers(-1)))&&(!r||!l.isWidget()&&r.isWidget())&&(r=l,o=e-a)}}),!i&&!r)throw new Error(\"No tile at position \"+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}}class yi extends Cl{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new yi(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class Cs extends Cl{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new Cs(t||document.createElement(\"div\"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,l=-1;function a(c,f){for(let u=0,d=0;u<c.children.length&&d<=f;u++){let p=c.children[u],g=d+p.length;g>=f&&(p.isComposite()?a(p,f-d):(!o||o.isHidden&&(t>0||i&&sP(o,p)))&&(g>f||p.flags&32)?(o=p,l=f-d):(d<f||p.flags&16&&!p.isHidden)&&(s=p,r=f-d)),d=g}}a(this,e);let h=(t<0?s:o)||s||o;return h?{tile:h,offset:h==s?r:l}:null}coordsIn(e,t){let i=this.resolveInline(e,t,!0);return i?i.tile.coordsIn(Math.max(0,i.offset),t):iP(this)}domIn(e,t){let i=this.resolveInline(e,t);if(i){let{tile:s,offset:r}=i;if(this.dom.contains(s.dom))return s.isText()?new gt(s.dom,Math.min(s.dom.nodeValue.length,r)):s.domPosFor(r,s.flags&16?1:s.flags&32?-1:t);let o=i.tile.parent,l=!1;for(let a of o.children){if(l)return new gt(a.dom,0);a==i.tile&&(l=!0)}}return new gt(this.dom,0)}}function iP(n){let e=n.dom.lastChild;if(!e)return n.dom.getBoundingClientRect();let t=eo(e);return t[t.length-1]||null}function sP(n,e){let t=n.coordsIn(0,1),i=e.coordsIn(0,1);return t&&i&&i.top<t.bottom}class Xe extends Cl{constructor(e,t){super(e),this.mark=t}get domAttrs(){return this.mark.attrs}static of(e,t){let i=new Xe(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class Li extends ge{constructor(e,t){super(e,t.length),this.text=t}sync(e){this.flags&2||(super.sync(e),this.dom.nodeValue!=this.text&&(e&&e.node==this.dom&&(e.written=!0),this.dom.nodeValue=this.text))}isText(){return!0}toString(){return JSON.stringify(this.text)}coordsIn(e,t){let i=this.dom.nodeValue.length;e>i&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?T.chrome||T.gecko||(e?(s--,o=1):r<i&&(r++,o=-1)):t<0?s--:r<i&&r++;let l=Bn(this.dom,s,r).getClientRects();if(!l.length)return null;let a=l[(o?o<0:t>=0)?0:l.length-1];return T.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?Bo(a,o<0):a||null}static of(e,t){let i=new Li(t||document.createTextNode(e),e);return t||(i.flags|=2),i}}class Yi extends ge{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return Bo(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?r.length-1:0;o=r[a],!(e>0?a==0:a==r.length-1||o.top<o.bottom);a+=l?-1:1);return Bo(o,!l)}}get overrideDOMText(){if(!this.length)return Z.empty;let{root:e}=this;if(!e)return Z.empty;let t=this.posAtStart;return e.view.state.doc.slice(t,t+this.length)}destroy(){super.destroy(),this.widget.destroy(this.dom)}static of(e,t,i,s,r){return r||(r=e.toDOM(t),e.editable||(r.contentEditable=\"false\")),new Yi(r,i,e,s)}}class Lo extends ge{constructor(e){let t=document.createElement(\"img\");t.className=\"cm-widgetBuffer\",t.setAttribute(\"aria-hidden\",\"true\"),super(t,0,e)}get isHidden(){return!0}get overrideDOMText(){return Z.empty}coordsIn(e){return this.dom.getBoundingClientRect()}}class nP{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,i){let{tile:s,index:r,beforeBreak:o,parents:l}=this;for(;e||t>0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!l.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++}else{let a=s.children[r],h=a.breakAfter;(t>0?a.length<=e:a.length<e)&&(!i||i.skip(a,0,a.length)!==!1||!a.isComposite)?(o=!!h,r++,e-=a.length):(l.push({tile:s,index:r}),s=a,r=0,i&&a.isComposite()&&i.enter(a))}else if(r==s.length)o=!!s.breakAfter,{tile:s,index:r}=l.pop(),r++;else if(e){let a=Math.min(e,s.length-r);i&&i.skip(s,r,r+a),e-=a,r+=a}else break;return this.tile=s,this.index=r,this.beforeBreak=o,this}get root(){return this.parents.length?this.parents[0].tile:this.tile}}class rP{constructor(e,t,i,s){this.from=e,this.to=t,this.wrapper=i,this.rank=s}}class oP{constructor(e,t,i){this.cache=e,this.root=t,this.blockWrappers=i,this.curLine=null,this.lastBlock=null,this.afterWidget=null,this.pos=0,this.wrappers=[],this.wrapperPos=0}addText(e,t,i,s){var r;this.flushBuffer();let o=this.ensureMarks(t,i),l=o.lastChild;if(l&&l.isText()&&!(l.flags&8)&&l.length+e.length<512){this.cache.reused.set(l,2);let a=o.children[o.children.length-1]=new Li(l.dom,l.text+e);a.parent=o}else o.append(s||Li.of(e,(r=this.cache.find(Li))===null||r===void 0?void 0:r.dom));this.pos+=e.length,this.afterWidget=null}addComposition(e,t){let i=this.curLine;i.dom!=t.line.dom&&(i.setDOM(this.cache.reused.has(t.line)?fa(t.line.dom):t.line.dom),this.cache.reused.set(t.line,2));let s=i;for(let l=t.marks.length-1;l>=0;l--){let a=t.marks[l],h=s.lastChild;if(h instanceof Xe&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(fa(a.dom)),s=h;else{if(this.cache.reused.get(a)){let f=ge.get(a.dom);f&&f.setDOM(fa(a.dom))}let c=Xe.of(a.mark,a.dom);s.append(c),s=c}this.cache.reused.set(a,2)}let r=ge.get(e.text);r&&this.cache.reused.set(r,2);let o=new Li(e.text,e.text.nodeValue);o.flags|=8,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=Rb);let s=Cs.start(e,t||((i=this.cache.find(Cs))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],l;if(t>0&&(l=s.lastChild)&&l instanceof Xe&&l.mark.eq(o))s=l,t--;else{let a=Xe.of(o,(i=this.cache.find(Xe,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(a),s=a,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Ud(this.curLine,!1)||e.dom.nodeName!=\"BR\"&&e.isWidget()&&!(T.ios&&Ud(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(ua,0,32)||new Yi(ua.toDOM(),0,ua,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to<this.pos&&this.wrappers.splice(e,1);for(let e=this.blockWrappers;e.value&&e.from<=this.pos;e.next())if(e.to>=this.pos){let t=new rP(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.from<this.pos&&s instanceof yi&&s.wrapper.eq(i.wrapper))t=s;else{let r=yi.of(i.wrapper,(e=this.cache.find(yi,o=>o.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Lo,void 0,1);return i&&(i.flags=t),i||new Lo(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class lP{constructor(e){this.skipCount=0,this.text=\"\",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text=\"\",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error(\"Ran out of text content when drawing inline views\");this.text=s;let l=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}}const Eo=[Yi,Cs,Li,Xe,Lo,yi,Tl];for(let n=0;n<Eo.length;n++)Eo[n].bucket=n;class aP{constructor(e){this.view=e,this.buckets=Eo.map(()=>[]),this.index=Eo.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let l=r.length-1;l>=0;l--){let a=(l+o)%r.length,h=r[a];if((!t||t(h))&&!this.reused.has(h))return r.splice(a,1),a<o&&this.index[s]--,this.reused.set(h,i),h}return null}findWidget(e,t,i){let s=this.buckets[0];if(s.length)for(let r=0,o=0;;r++){if(r==s.length){if(o)return null;o=1,r=0}let l=s[r];if(!this.reused.has(l)&&(o==0?l.widget.compare(e):l.widget.constructor==e.constructor&&e.updateDOM(l.dom,this.view)))return s.splice(r,1),r<this.index[0]&&this.index[0]--,l.widget==e&&l.length==t&&(l.flags&497)==i?(this.reused.set(l,1),l):(this.reused.set(l,2),new Yi(l.dom,t,e,l.flags&-498|i))}}reuse(e){return this.reused.set(e,1),e}maybeReuse(e,t=2){if(!this.reused.has(e))return this.reused.set(e,t),e.dom}clear(){for(let e=0;e<this.buckets.length;e++)this.buckets[e].length=this.index[e]=0}}class hP{constructor(e,t,i,s,r){this.view=e,this.decorations=s,this.disallowBlockEffectsFor=r,this.openWidget=!1,this.openMarks=0,this.cache=new aP(e),this.text=new lP(e.state.doc),this.builder=new oP(this.cache,new Tl(e,e.contentDOM),M.iter(i)),this.cache.reused.set(t,2),this.old=new nP(t),this.reuseWalker={skip:(o,l,a)=>{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let l=o<e.length?e[o++]:null,a=l?l.fromA:this.old.root.length;if(a>s){let h=a-s;this.preserve(h,!o,!l),s=a,r+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA<t.range.toA?1:-1),this.emit(r,t.range.fromB),this.cache.clear(),this.builder.addComposition(t,i),this.text.skip(t.range.toB-t.range.fromB),this.forward(t.range.fromA,l.toA),this.emit(t.range.toB,l.toB)):(this.forward(l.fromA,l.toA),this.emit(r,l.toB)),r=l.toB,s=l.toA}return this.builder.curLine&&this.builder.endLine(),this.builder.root}preserve(e,t,i){let s=uP(this.old),r=this.openMarks;this.old.advance(e,i?1:-1,{skip:(o,l,a)=>{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l<o.length?Yi.of(o.widget,this.view,a-l,o.flags&496,this.cache.maybeReuse(o)):this.cache.reuse(o);h.flags&256?(h.flags&=-2,this.builder.addBlockWidget(h)):(this.builder.ensureLine(null),this.builder.addInlineWidget(h,s,r),r=s.length)}else if(o.isText())this.builder.ensureLine(null),!l&&a==o.length?this.builder.addText(o.text,s,r,this.cache.reuse(o)):(this.cache.add(o),this.builder.addText(o.text.slice(l,a),s,r)),r=s.length;else if(o.isLine())o.flags&=-2,this.cache.reused.set(o,1),this.builder.addLine(o);else if(o instanceof Lo)this.cache.add(o);else if(o instanceof Xe)this.builder.ensureLine(null),this.builder.addMark(o,s,r),this.cache.reused.set(o,1),r=s.length;else return!1;this.openWidget=!1},enter:o=>{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof Xe&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof Xe&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=0,o=M.spans(this.decorations,e,t,{point:(l,a,h,c,f,u)=>{if(h instanceof Ii){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError(\"Block decorations may not be specified via plugins\");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\")}if(r=c.length,f>c.length)s.continueWidget(a-l);else{let d=h.widget||(h.block?Ts.block:Ts.inline),p=cP(h),g=this.cache.findWidget(d,a-l,p)||Yi.of(d,this.view,a-l,p);h.block?(h.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(g)):(s.ensureLine(i),s.addInlineWidget(g,c,f))}i=null}else i=fP(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,c)=>{for(let f=l;f<a;){let u=this.text.next(Math.min(512,a-f));u==null?(s.addLineStartIfNotCovered(i),s.addBreak(),f++):(s.ensureLine(i),s.addText(u,h,f==l?c:h.length),f+=u.length),i=null}}});s.addLineStartIfNotCovered(i),this.openWidget=o>r,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=ge.get(s);if(s==this.view.contentDOM)break;r instanceof Xe?t.push(r):r?.isLine()?i=r:s.nodeName==\"DIV\"&&!i&&s!=this.view.contentDOM?i=new Cs(s,Rb):t.push(Xe.of(new Fn({tagName:s.nodeName.toLowerCase(),attributes:X$(s)}),s))}return{line:i,marks:t}}}function Ud(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function cP(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const Rb={class:\"cm-line\"};function fP(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:\"cm-line\"}),t&&af(t,n),i&&(n.class+=\" \"+i)),n}function uP(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof Xe&&e.push(i.mark)}return e}function fa(n){let e=ge.get(n);return e&&e.setDOM(n.cloneNode()),n}class Ts extends $l{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Ts.inline=new Ts(\"span\");Ts.block=new Ts(\"div\");const ua=new class extends $l{toDOM(){return document.createElement(\"br\")}get isHidden(){return!0}get editable(){return!0}};class Kd{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=ee.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Tl(e,e.contentDOM),this.updateInner([new it(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:f})=>f<this.minWidthFrom||c>this.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!xP(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?pP(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:f}=this.hasComposition;i=new it(c,f,e.changes.mapPos(c,-1),e.changes.mapPos(f,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(T.ie||T.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=OP(o,this.decorations,e.changes);a.length&&(i=it.extendWithRanges(i,a));let h=SP(l,this.blockWrappers,e.changes);return h.length&&(i=it.extendWithRanges(i,h)),r&&!i.some(c=>c.fromA<=r.range.fromA&&c.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new hP(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);this.tile=l.run(e,t),hc(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+\"px\",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+\"px\":\"\";let r=T.chrome||T.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=\"\"});let s=[];if(this.view.viewport.from||this.view.viewport.to<this.view.state.doc.length)for(let r of this.tile.children)r.isWidget()&&r.widget instanceof da&&s.push(r.dom);i.updateGaps(s)}updateEditContextFormatting(e){this.editContextFormatting=this.editContextFormatting.map(e.changes);for(let t of e.transactions)for(let i of t.effects)i.is($b)&&(this.editContextFormatting=i.value)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let{dom:i}=this.tile,s=this.view.root.activeElement,r=s==i,o=!r&&!(this.view.state.facet(Jt)||i.tabIndex>-1)&&bn(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,c;if(a.empty?c=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(c=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),T.gecko&&a.empty&&!this.hasComposition&&dP(h)){let u=document.createTextNode(\"\");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=c=new gt(u,0),l=!0}let f=this.view.observer.selectionRange;(l||!f.focusNode||(!Sn(h.node,h.offset,f.anchorNode,f.anchorOffset)||!Sn(c.node,c.offset,f.focusNode,f.focusOffset))&&!this.suppressWidgetCursorChange(f,a))&&(this.view.observer.ignore(()=>{T.android&&T.chrome&&i.contains(f.focusNode)&&yP(f.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=Ps(this.view.root);if(u)if(a.empty){if(T.gecko){let d=gP(h.node,h.offset);if(d&&d!=3){let p=(d==1?fb:ub)(h.node,h.offset);p&&(h=new gt(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(c.node,c.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,c]=[c,h]),d.setEnd(c.node,c.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(h,c)),this.impreciseAnchor=h.precise?null:new gt(f.anchorNode,f.anchorOffset),this.impreciseHead=c.precise?null:new gt(f.focusNode,f.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&Sn(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=Ps(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify(\"move\",t.assoc<0?\"forward\":\"backward\",\"lineboundary\"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=ui(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!ge.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,l=s;;o++){let a=i.children[o];if(a.dom==r)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,c)=>{if(h.isWidget()){if(h.flags&32&&c>=e)return!0;h.flags&16&&(r=!0)}else{let f=c+h.length;if(c<=e&&(i=h,s=e-c,r=f<e),f>=e&&!o&&(o=h,l=e-c,a=c>e),c>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof da?null:i.coordsInWidget(s,t,!0):i.coordsIn(s,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let l of r.children){if(l.length>=o){let a=s(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(r.isText()&&o<r.length){let l=_(r.text,o);if(l==o)return null;let a=Bn(r.dom,o,l).getClientRects();for(let h=0;h<a.length;h++){let c=a[h];if(h==a.length-1||c.top<c.bottom&&c.left<c.right)return c}}return null}return s(t,i)}measureVisibleLineHeights(e){let t=[],{from:i,to:s}=e,r=this.view.contentDOM.clientWidth,o=r>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==we.LTR,h=0,c=(f,u,d)=>{for(let p=0;p<f.children.length&&!(u>s);p++){let g=f.children[p],m=u+g.length,O=g.dom.getBoundingClientRect(),{height:y}=O;if(d&&!p&&(h+=O.top-d.top),g instanceof yi)m>i&&c(g,u,O);else if(u>=i&&(h>0&&t.push(-h),t.push(y+h),h=0,o)){let x=g.dom.lastChild,v=x?eo(x):[];if(v.length){let w=v[v.length-1],Q=a?w.right-O.left:O.right-w.left;Q>l&&(l=Q,this.minWidth=r,this.minWidthFrom=u,this.minWidthTo=m)}}d&&p==f.children.length-1&&(h+=d.bottom-O.bottom),u=m+g.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction==\"rtl\"?we.RTL:we.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let c=eo(h.dom);if(c.length!=1)return;l+=c[0].width,a=c[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement(\"div\"),i,s,r;return t.className=\"cm-line\",t.style.width=\"99999px\",t.style.position=\"absolute\",t.textContent=\"abc def ghi jkl mno pqr stu\",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=eo(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(ee.replace({widget:new da(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return ee.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Pl).map(r=>(this.dynamicDecorationMap[e++]=typeof r==\"function\")?r(this.view):r),i=!1,s=this.view.state.facet(pf).map((r,o)=>{let l=typeof r==\"function\";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(M.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];e<this.decorations.length;)this.dynamicDecorationMap[e++]=!1;this.blockWrappers=this.view.state.facet(Cb).map(r=>typeof r==\"function\"?r(this.view):r)}scrollIntoView(e){if(e.isSnapshot){let h=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=h.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let h of this.view.state.facet(vb))try{if(h(this.view,e.range,e))return!0}catch(c){oi(this.view.state,c,\"scroll handler\")}let{range:t}=e,i=this.coordsAt(t.head,t.empty?t.assoc:t.head>t.anchor?-1:1),s;if(!i)return;!t.empty&&(s=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,s.left),top:Math.min(i.top,s.top),right:Math.max(i.right,s.right),bottom:Math.max(i.bottom,s.bottom)});let r=Ab(this.view),o={left:i.left-r.left,top:i.top-r.top,right:i.right+r.right,bottom:i.bottom+r.bottom},{offsetWidth:l,offsetHeight:a}=this.view.scrollDOM;W$(this.view.scrollDOM,o,t.head<t.anchor?-1:1,e.x,e.y,Math.max(Math.min(e.xMargin,l),-l),Math.max(Math.min(e.yMargin,a),-a),this.view.textDirection==we.LTR)}lineHasWidget(e){let t=i=>i.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){hc(this.tile)}}function hc(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)hc(i,e)}}function dP(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable==\"false\")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable==\"false\")}function Db(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=fb(t.focusNode,t.focusOffset),s=ub(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let l=ge.get(s.node);if(!l||l.isText()&&l.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let a=ge.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function pP(n,e,t){let i=Db(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,l=s.nodeValue;if(/[\\n\\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new it(a.mapPos(r),a.mapPos(o),r,o),text:s}}function gP(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable==\"false\"?1:0)|(e<n.childNodes.length&&n.childNodes[e].contentEditable==\"false\"?2:0)}let mP=class{constructor(){this.changes=[]}compareRange(e,t){fs(e,t,this.changes)}comparePoint(e,t){fs(e,t,this.changes)}boundChange(e){fs(e,e,this.changes)}};function OP(n,e,t){let i=new mP;return M.compare(n,e,t,i),i.changes}class bP{constructor(){this.changes=[]}compareRange(e,t){fs(e,t,this.changes)}comparePoint(){}boundChange(e){fs(e,e,this.changes)}}function SP(n,e,t){let i=new bP;return M.compare(n,e,t,i),i.changes}function yP(n,e){for(let t=n;t&&t!=e;t=t.assignedSlot||t.parentNode)if(t.nodeType==1&&t.contentEditable==\"false\")return!0;return!1}function xP(n,e){let t=!1;return e&&n.iterChangedRanges((i,s)=>{i<e.to&&s>e.from&&(t=!0)}),t}class da extends $l{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement(\"div\");return e.className=\"cm-gap\",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+\"px\",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function wP(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return S.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=_(s.text,r,!1):l=_(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=_(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;l<s.length;){let h=_(s.text,l);if(i(s.text.slice(l,h))!=a)break;l=h}return S.range(o+s.from,l+s.from)}function kP(n,e,t,i,s){let r=Math.round((i-e.left)*n.defaultCharacterWidth);if(n.lineWrapping&&t.height>n.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+kn(o,r,n.state.tabSize)}function QP(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.to<e)){if(r.from<e&&r.to>e)return r;(!s||r.type==rt.Text&&(s.type!=r.type||(t<0?r.from<e:r.to>e)))&&(s=r)}}return s||i}return i}function vP(n,e,t,i){let s=QP(n,e.head,e.assoc||-1),r=!i||s.type!=rt.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==we.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return S.cursor(a,t?-1:1)}return S.cursor(t?s.to:s.from,t?-1:1)}function Jd(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=U$(s,r,o,l,t),c=Ob;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;c=`\n`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function $P(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==oe.Space&&(s=o),s==o}}function PP(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return S.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,(e.empty?e.assoc:0)||(t?1:-1)),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-p.from))),l=(r<0?p.top:p.bottom)+c}let f=a.left+o,u=i??n.viewState.heightOracle.textHeight>>1,d=cc(n,{x:f,y:l+u*r},!1,r);return S.cursor(d.pos,d.assoc,void 0,o)}function yn(n,e,t){for(;;){let i=0;for(let s of n)s.between(e-1,e+1,(r,o,l)=>{if(e>r&&e<o){let a=i||t||(e-r<o-e?-1:1);e=a<0?r:o,i=a}});if(!i)return e}}function Zb(n,e){let t=null;for(let i=0;i<e.ranges.length;i++){let s=e.ranges[i],r=null;if(s.empty){let o=yn(n,s.from,0);o!=s.from&&(r=S.cursor(o,-1))}else{let o=yn(n,s.from,-1),l=yn(n,s.to,1);(o!=s.from||l!=s.to)&&(r=S.range(s.from==s.anchor?o:l,s.from==s.head?o:l))}r&&(t||(t=e.ranges.slice()),t[i]=r)}return t?S.create(t,e.mainIndex):e}function pa(n,e,t){let i=yn(n.state.facet(Kn).map(s=>s(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:S.cursor(i,i<t.from?1:-1)}class Et{constructor(e,t){this.pos=e,this.assoc=t}}function cc(n,e,t,i){let s=n.contentDOM.getBoundingClientRect(),r=s.top+n.viewState.paddingTop,{x:o,y:l}=e,a=l-r,h;for(;;){if(a<0)return new Et(0,1);if(a>n.viewState.docHeight)return new Et(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==rt.Text){if(i<0?h.to<n.viewport.from:h.from>n.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+r:u.bottom>=a+r))break}let f=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+f:h.top-f}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==rt.Text){let f=kP(n,s,h,o,l);return new Et(f,f==h.from?1:-1)}}if(h.type!=rt.Text)return a<(h.top+h.bottom)/2?new Et(h.from,1):new Et(h.to,-1);let c=n.docView.lineAt(h.from,2);return(!c||c.length!=h.length)&&(c=n.docView.lineAt(h.from,-2)),Bb(n,c,h.from,o,l)}function Bb(n,e,t,i,s){let r=-1,o=null,l=1e9,a=1e9,h=s,c=s,f=(u,d)=>{for(let p=0;p<u.length;p++){let g=u[p];if(g.top==g.bottom)continue;let m=g.left>i?g.left-i:g.right<i?i-g.right:0,O=g.top>s?g.top-s:g.bottom<s?s-g.bottom:0;g.top<=c&&g.bottom>=h&&(h=Math.min(g.top,h),c=Math.max(g.bottom,c),O=0),(r<0||(O-a||m-l)<0)&&(r>=0&&a&&l<m&&o.top<=c-2&&o.bottom>=h+2?a=0:(r=d,l=m,a=O,o=g))}};if(e.isText()){for(let d=0;d<e.length;){let p=_(e.text,d);if(f(Bn(e.dom,d,p).getClientRects(),d),!l&&!a)break;d=p}return i>(o.left+o.right)/2==(ep(n,r+t)==we.LTR)?new Et(t+_(e.text,r),-1):new Et(t+r,1)}else{if(!e.length)return new Et(t,1);for(let g=0;g<e.children.length;g++){let m=e.children[g];if(m.flags&48)continue;let O=(m.dom.nodeType==1?m.dom:Bn(m.dom,0,m.length)).getClientRects();if(f(O,g),!l&&!a)break}let u=e.children[r],d=e.posBefore(u,t);return u.isComposite()||u.isText()?Bb(n,u,d,Math.max(o.left,Math.min(o.right,i)),s):i>(o.left+o.right)/2==(ep(n,r+t)==we.LTR)?new Et(d+u.length,-1):new Et(d,1)}}function ep(n,e){let t=n.state.doc.lineAt(e);return n.bidiSpans(t)[ri.find(n.bidiSpans(t),e-t.from,-1,1)].dir}const on=\"￿\";class CP{constructor(e,t){this.points=e,this.view=t,this.text=\"\",this.lineSeparator=t.state.facet(L.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=on}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=ge.get(s),l=s.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=ge.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:Zo(s))||Zo(l)&&(s.nodeName!=\"BR\"||o?.isWidget())&&this.text.length>r)&&!MP(l,t)&&this.lineBreak(),s=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\\r\\n?|\\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){let t=ge.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName==\"BR\"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(TP(e,i.node,i.offset)?t:0))}}function TP(n,e,t){for(;;){if(!e||t<ui(e))return!1;if(e==n)return!0;t=$i(e)+1,e=e.parentNode}}function MP(n,e){let t;for(;!(n==e||!n);n=n.nextSibling){let i=ge.get(n);if(!i?.isWidget())return!1;i&&(t||(t=[])).push(i)}if(t)for(let i of t){let s=i.overrideDOMText;if(s?.length)return!1}return!0}class tp{constructor(e,t){this.node=e,this.offset=t,this.pos=-1}}class AP{constructor(e,t,i,s){this.typeOver=s,this.bounds=null,this.text=\"\",this.domChanged=t>-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Xb(e.docView.tile,t,i,0))){let l=r||o?[]:DP(e),a=new CP(l,e);a.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=a.text,this.newSel=ZP(l,this.bounds.from)}else{let l=e.observer.selectionRange,a=r&&r.node==l.focusNode&&r.offset==l.focusOffset||!nc(e.contentDOM,l.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),h=o&&o.node==l.anchorNode&&o.offset==l.anchorOffset||!nc(e.contentDOM,l.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((T.ios||T.chrome)&&e.state.selection.main.empty&&a!=h&&(c.from>0||c.to<e.state.doc.length)){let f=Math.min(a,h),u=Math.max(a,h),d=c.from-f,p=c.to-u;(d==0||d==1||f==0)&&(p==0||p==-1||u==e.state.doc.length)&&(a=0,h=e.state.doc.length)}e.inputState.composing>-1&&e.state.selection.ranges.length>1?this.newSel=e.state.selection.replaceRange(S.range(h,a)):this.newSel=S.single(h,a)}}}function Xb(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,l=-1;for(let a=0,h=i,c=i;a<n.children.length;a++){let f=n.children[a],u=h+f.length;if(h<e&&u>t)return Xb(f,e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&f.dom.parentNode==n.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:r,to:l<0?i+n.length:l,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o<n.children.length&&o>=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function Lb(n,e){let t,{newSel:i}=e,s=n.state.selection.main,r=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,a=s.from,h=null;(r===8||T.android&&e.text.length<l-o)&&(a=s.to,h=\"end\");let c=Eb(n.state.doc.sliceString(o,l,on),e.text,a-o,h);c&&(T.chrome&&r==13&&c.toB==c.from+2&&e.text.slice(c.from,c.toB)==on+on&&c.toB--,t={from:o+c.from,to:o+c.toA,insert:Z.of(e.text.slice(c.from,c.toB).split(on))})}else i&&(!n.hasFocus&&n.state.facet(Jt)||Wo(i,s))&&(i=null);if(!t&&!i)return!1;if(!t&&e.typeOver&&!s.empty&&i&&i.main.empty?t={from:s.from,to:s.to,insert:n.state.doc.slice(s.from,s.to)}:(T.mac||T.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute(\"autocorrect\")==\"off\"?(i&&t.insert.length==2&&(i=S.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:Z.of([t.insert.toString().replace(\".\",\" \")])}):t&&t.from>=s.from&&t.to<=s.to&&(t.from!=s.from||t.to!=s.to)&&s.to-s.from-(t.to-t.from)<=4?t={from:s.from,to:s.to,insert:n.state.doc.slice(s.from,t.from).append(t.insert).append(n.state.doc.slice(t.to,s.to))}:n.state.doc.lineAt(s.from).to<s.to&&n.docView.lineHasWidget(s.to)&&n.inputState.insertingTextAt>Date.now()-50?t={from:s.from,to:s.to,insert:n.state.toText(n.inputState.insertingText)}:T.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==`\n `&&n.lineWrapping&&(i&&(i=S.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:Z.of([\" \"])}),t)return gf(n,t,i,r);if(i&&!Wo(i,s)){let o=!1,l=\"select\";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin==\"select\"&&(o=!0),l=n.inputState.lastSelectionOrigin,l==\"select.pointer\"&&(i=Zb(n.state.facet(Kn).map(a=>a(n)),i))),n.dispatch({selection:i,scrollIntoView:o,userEvent:l}),!0}else return!1}function gf(n,e,t,i=-1){if(T.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(T.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==\" \")&&e.insert.length==1&&e.insert.lines==2&&us(n.contentDOM,\"Enter\",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.length<e.to-e.from&&e.to>s.head)&&us(n.contentDOM,\"Backspace\",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&us(n.contentDOM,\"Delete\",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=RP(n,e,t));return n.state.facet(wb).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function RP(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.from<r.from||e.from>r.to){let a=e.from<r.from?-1:1,h=a<0?r.from:r.to,c=yn(s.facet(Kn).map(f=>f(n)),h,a);e.from==c&&(o=c)}if(o>-1)i={changes:e,selection:S.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=r.from<e.from?s.sliceDoc(r.from,e.from):\"\",h=r.to>e.to?s.sliceDoc(e.to,r.to):\"\";i=s.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=s.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let c=n.state.sliceDoc(e.from,e.to),f,u=t&&Db(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);f={from:u.from,to:u.to-p}}else f=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:a,range:h||p.map(a)};let g=p.to-d,m=g-c.length;if(n.state.sliceDoc(m,g)!=c||g>=f.from&&m<=f.to)return{range:p};let O=s.changes({from:m,to:g,insert:e.insert}),y=p.to-r.to;return{changes:O,range:h?S.range(Math.max(0,h.anchor+y),Math.max(0,h.head+y)):p.map(O)}})}else i={changes:a,selection:h&&s.selection.replaceRange(h)}}let l=\"input.type\";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=\".compose\",n.inputState.compositionFirstChange&&(l+=\".start\",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:l,scrollIntoView:!0})}function Eb(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r<s&&n.charCodeAt(r)==e.charCodeAt(r);)r++;if(r==s&&n.length==e.length)return null;let o=n.length,l=e.length;for(;o>0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i==\"end\"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o<r&&n.length<e.length){let a=t<=r&&t>=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l<r){let a=t<=r&&t>=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function DP(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new tp(t,i)),(s!=t||r!=i)&&e.push(new tp(s,r))),e}function ZP(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?S.single(t+e,i+e):null}function Wo(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}class BP{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText=\"\",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,T.safari&&e.contentDOM.addEventListener(\"input\",()=>null),T.gecko&&FP(e.contentDOM.ownerDocument)}handleEvent(e){!IP(this.view,e)||this.ignoreDuringComposition(e)||e.type==\"keydown\"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=XP(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!=\"scroll\"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!=\"scroll\"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Vb.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),T.android&&T.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return T.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((t=Wb.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||LP.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key==\"Enter\"&&e&&e.from<e.to&&/^\\S+$/.test(e.insert.toString())?!1:(this.pendingIOSKey=void 0,us(this.view.contentDOM,t.key,t.keyCode,t instanceof KeyboardEvent?t:void 0))}ignoreDuringComposition(e){return!/^key/.test(e.type)||e.synthetic?!1:this.composing>0?!0:T.safari&&!T.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function ip(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){oi(t.state,s)}}}function XP(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push(ip(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(ip(i.value,a))}}for(let i in yt)t(i).handlers.push(yt[i]);for(let i in at)t(i).observers.push(at[i]);return e}const Wb=[{key:\"Backspace\",keyCode:8,inputType:\"deleteContentBackward\"},{key:\"Enter\",keyCode:13,inputType:\"insertParagraph\"},{key:\"Enter\",keyCode:13,inputType:\"insertLineBreak\"},{key:\"Delete\",keyCode:46,inputType:\"deleteContentForward\"}],LP=\"dthko\",Vb=[16,17,18,20,91,92,224,225],Tr=6;function Mr(n){return Math.max(0,n)*.7+8}function EP(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class WP{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=V$(e.contentDOM),this.atoms=e.state.facet(Kn).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener(\"mousemove\",this.move=this.move.bind(this)),r.addEventListener(\"mouseup\",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(L.allowMultipleSelections)&&VP(e,t),this.dragging=qP(e,t)&&Ib(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&EP(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Ab(this.view);e.clientX-a.left<=s+Tr?t=-Mr(s-e.clientX):e.clientX+a.right>=o-Tr&&(t=Mr(e.clientX-o)),e.clientY-a.top<=r+Tr?i=-Mr(r-e.clientY):e.clientY+a.bottom>=l-Tr&&(i=Mr(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener(\"mousemove\",this.move),e.removeEventListener(\"mouseup\",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=Zb(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:\"select.pointer\"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent(\"input.type\"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function VP(n,e){let t=n.state.facet(bb);return t.length?t[0](e):T.mac?e.metaKey:e.ctrlKey}function zP(n,e){let t=n.state.facet(Sb);return t.length?t[0](e):T.mac?!e.altKey:!e.ctrlKey}function qP(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=Ps(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r<s.length;r++){let o=s[r];if(o.left<=e.clientX&&o.right>=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function IP(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=ge.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const yt=Object.create(null),at=Object.create(null),zb=T.ie&&T.ie_version<15||T.ios&&T.webkit_version<604;function _P(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement(\"textarea\"));t.style.cssText=\"position: fixed; left: -10000px; top: 10px\",t.focus(),setTimeout(()=>{n.focus(),t.remove(),qb(n,t.value)},50)}function Ml(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function qb(n,e){e=Ml(n.state,ff,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(fc!=null&&t.selection.ranges.every(a=>a.empty)&&fc==r.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:S.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:S.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:\"input.paste\",scrollIntoView:!0})}at.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};yt.keydown=(n,e)=>(n.inputState.setSelectionOrigin(\"select\"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);at.touchstart=(n,e)=>{n.inputState.lastTouchTime=Date.now(),n.inputState.setSelectionOrigin(\"select.pointer\")};at.touchmove=n=>{n.inputState.setSelectionOrigin(\"select.pointer\")};yt.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(yb))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=NP(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new WP(n,e,t,i)),i&&n.observer.ignore(()=>{hb(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin(\"select.pointer\");return!1};function sp(n,e,t,i){if(i==1)return S.cursor(e,t);if(i==2)return wP(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return l<n.state.doc.length&&l==r.to&&l++,S.range(o,l)}}const YP=T.ie&&T.ie_version<=11;let np=null,rp=0,op=0;function Ib(n){if(!YP)return n.detail;let e=np,t=op;return np=n,op=Date.now(),rp=!e||t>Date.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(rp+1)%3:1}function NP(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=Ib(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),h,c=sp(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let f=sp(n,t.pos,t.assoc,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u<c.from?S.range(u,d):S.range(d,u)}return o?s.replaceRange(s.main.extend(c.from,c.to)):l&&i==1&&s.ranges.length>1&&(h=jP(s,a.pos))?h:l?s.addRange(c):S.create([c])}}}function jP(n,e){for(let t=0;t<n.ranges.length;t++){let{from:i,to:s}=n.ranges[t];if(i<=e&&s>=e)return S.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}yt.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=S.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData(\"Text\",Ml(n.state,uf,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed=\"copyMove\"),!1};yt.dragend=n=>(n.inputState.draggedContent=null,!1);function lp(n,e,t,i){if(t=Ml(n.state,ff,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&zP(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?\"move.drop\":\"input.drop\"}),n.inputState.draggedContent=null}yt.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&lp(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o<t.length;o++){let l=new FileReader;l.onerror=r,l.onload=()=>{/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData(\"Text\");if(i)return lp(n,e,i,!0),!0}return!1};yt.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=zb?null:e.clipboardData;return t?(qb(n,t.getData(\"text/plain\")||t.getData(\"text/uri-list\")),!0):(_P(n),!1)};function GP(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement(\"textarea\"));i.style.cssText=\"position: fixed; left: -10000px; top: 10px\",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function HP(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:Ml(n,uf,e.join(n.lineBreak)),ranges:t,linewise:i}}let fc=null;yt.copy=yt.cut=(n,e)=>{let t=Ps(n.root);if(t&&!bn(n.contentDOM,t))return!1;let{text:i,ranges:s,linewise:r}=HP(n.state);if(!i&&!r)return!1;fc=r?i:null,e.type==\"cut\"&&!n.state.readOnly&&n.dispatch({changes:s,scrollIntoView:!0,userEvent:\"delete.cut\"});let o=zb?null:e.clipboardData;return o?(o.clearData(),o.setData(\"text/plain\",i),!0):(GP(n,i),!1)};const _b=wt.define();function Yb(n,e){let t=[];for(let i of n.facet(kb)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:_b.of(!0)}):null}function Nb(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=Yb(n.state,e);t?n.dispatch(t):n.update([])}},10)}at.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),Nb(n)};at.blur=n=>{n.observer.clearSelectionRange(),Nb(n)};at.compositionstart=at.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};at.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,T.chrome&&T.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};at.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};yt.beforeinput=(n,e)=>{var t,i;if((e.inputType==\"insertText\"||e.inputType==\"insertCompositionText\")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType==\"insertReplacementText\"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData(\"text/plain\"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return gf(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(T.chrome&&T.android&&(s=Wb.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key==\"Backspace\"||s.key==\"Delete\")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return T.ios&&e.inputType==\"deleteContentForward\"&&n.observer.flushSoon(),T.safari&&e.inputType==\"insertText\"&&n.inputState.composing>=0&&setTimeout(()=>at.compositionend(n,e),20),!1};const ap=new Set;function FP(n){ap.has(n)||(ap.add(n),n.addEventListener(\"copy\",()=>{}),n.addEventListener(\"cut\",()=>{}))}const hp=[\"pre-wrap\",\"normal\",\"pre-line\",\"break-spaces\"];let Ms=!1;function cp(){Ms=!1}class UP{constructor(e){this.lineWrapping=e,this.doc=Z.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return hp.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i<e.length;i++){let s=e[i];s<0?i++:this.heightSamples[Math.floor(s*10)]||(t=!0,this.heightSamples[Math.floor(s*10)]=!0)}return t}refresh(e,t,i,s,r,o){let l=hp.indexOf(e)>-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h<o.length;h++){let c=o[h];c<0?h++:this.heightSamples[Math.floor(c*10)]=!0}}return a}}class KP{constructor(e,t){this.from=e,this.heights=t,this.index=0}get more(){return this.index<this.heights.length}}class dt{constructor(e,t,i,s,r){this.from=e,this.length=t,this.top=i,this.height=s,this._content=r}get type(){return typeof this._content==\"number\"?rt.Text:Array.isArray(this._content)?this._content:this._content.type}get to(){return this.from+this.length}get bottom(){return this.top+this.height}get widget(){return this._content instanceof Ii?this._content.widget:null}get widgetLineBreaks(){return typeof this._content==\"number\"?this._content:0}join(e){let t=(Array.isArray(this._content)?this._content:[this]).concat(Array.isArray(e._content)?e._content:[e]);return new dt(this.from,this.length+e.length,this.top,this.height+e.height,t)}}var re=(function(n){return n[n.ByPos=0]=\"ByPos\",n[n.ByHeight=1]=\"ByHeight\",n[n.ByPosNoHeight=2]=\"ByPosNoHeight\",n})(re||(re={}));const to=.001;class Ae{constructor(e,t,i=2){this.length=e,this.height=t,this.flags=i}get outdated(){return(this.flags&2)>0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>to&&(Ms=!0),this.height=e)}replace(e,t,i){return Ae.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=s[l],u=r.lineAt(a,re.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,re.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,c=s[l-1].fromB,l--,a<u.from&&(u=r.lineAt(a,re.ByPosNoHeight,i,0,0));c+=u.from-a,a=u.from;let p=mf.build(i.setDoc(o),e,c,f);r=Vo(r,r.replace(a,h,p))}return r.updateHeight(i,0)}static empty(){return new Ye(0,0,0)}static of(e){if(e.length==1)return e[0];let t=0,i=e.length,s=0,r=0;for(;;)if(t==i)if(s>r*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s<r){let l=e[t++];l&&(s+=l.size)}else{let l=e[--i];l&&(r+=l.size)}let o=0;return e[t-1]==null?(o=1,t--):e[t]==null&&(o=1,i++),new eC(Ae.of(e.slice(0,t)),o,Ae.of(e.slice(i)))}}function Vo(n,e){return n==e?n:(n.constructor!=e.constructor&&(Ms=!0),e)}Ae.prototype.size=1;const JP=ee.replace({});class jb extends Ae{constructor(e,t,i){super(e,t),this.deco=i,this.spaceAbove=0}mainBlock(e,t){return new dt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.deco||0)}blockAt(e,t,i,s){return this.spaceAbove&&e<i+this.spaceAbove?new dt(s,0,i,this.spaceAbove,JP):this.mainBlock(i,s)}lineAt(e,t,i,s,r){let o=this.mainBlock(s,r);return this.spaceAbove?this.blockAt(0,i,s,r).join(o):o}forEachLine(e,t,i,s,r,o){e<=r+this.length&&t>=r&&o(this.lineAt(0,re.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}}class Ye extends jb{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new dt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof Ye||s instanceof xe&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof xe?s=new Ye(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):Ae.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:\"\"}${this.widgetHeight?\":\"+this.widgetHeight:\"\"})`}}class xe extends Ae{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e<t.lineHeight?0:Math.round(Math.max(0,Math.min(1,(e-i)/this.height))*this.length)),c=t.doc.lineAt(h),f=l+c.length*a,u=Math.max(i,e-f/2);return new dt(c.from,c.length,u,f,0)}else{let h=Math.max(0,Math.min(o-r,Math.floor((e-i)/l))),{from:c,length:f}=t.doc.line(r+h);return new dt(c,f,i+l*h,l,0)}}lineAt(e,t,i,s,r){if(t==re.ByHeight)return this.blockAt(e,i,s,r);if(t==re.ByPosNoHeight){let{from:d,to:p}=i.doc.lineAt(e);return new dt(d,p-d,0,0,0)}let{firstLine:o,perLine:l,perChar:a}=this.heightMetrics(i,r),h=i.doc.lineAt(e),c=l+h.length*a,f=h.number-o,u=s+l*f+a*(h.from-r-f);return new dt(h.from,h.length,Math.max(s,Math.min(u,s+this.height-c)),c,0)}forEachLine(e,t,i,s,r,o){e=Math.max(e,r),t=Math.min(t,r+this.length);let{firstLine:l,perLine:a,perChar:h}=this.heightMetrics(i,r);for(let c=e,f=s;c<=t;){let u=i.doc.lineAt(c);if(c==e){let p=u.number-l;f+=a*p+h*(e-r-p)}let d=a+h*u.length;o(new dt(u.from,u.length,f,d,0)),f+=d,c=u.to+1}}replace(e,t,i){let s=this.length-t;if(s>0){let r=i[i.length-1];r instanceof xe?i[i.length-1]=new xe(r.length+s):i.push(null,new xe(s-1))}if(e>0){let r=i[0];r instanceof xe?i[0]=new xe(e+r.length):i.unshift(new xe(e-1),null)}return Ae.of(i)}decomposeLeft(e,t){t.push(new xe(e-1),null)}decomposeRight(e,t){t.push(null,new xe(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new xe(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=s.heights[s.index++],u=0;f<0&&(u=-f,f=s.heights[s.index++]),a==-1?a=f:Math.abs(f-a)>=to&&(a=-2);let d=new Ye(c,f,u);d.outdated=!1,o.push(d),l+=c+1}l<=r&&o.push(null,new xe(r-l).updateHeight(e,l));let h=Ae.of(o);return(a<0||Math.abs(h.height-this.height)>=to||Math.abs(a-this.heightMetrics(e,t).perLine)>=to)&&(Ms=!0),Vo(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class eC extends Ae{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return e<r?this.left.blockAt(e,t,i,s):this.right.blockAt(e,t,r,s+this.left.length+this.break)}lineAt(e,t,i,s,r){let o=s+this.left.height,l=r+this.left.length+this.break,a=t==re.ByHeight?e<o:e<l,h=a?this.left.lineAt(e,t,i,s,r):this.right.lineAt(e,t,i,o,l);if(this.break||(a?h.to<l:h.from>l))return h;let c=t==re.ByPosNoHeight?re.ByPosNoHeight:re.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e<a&&this.left.forEachLine(e,t,i,s,r,o),t>=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,re.ByPos,i,s,r);e<h.from&&this.left.forEachLine(e,h.from-1,i,s,r,o),h.to>=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(t<s)return this.balanced(this.left.replace(e,t,i),this.right);if(e>this.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&fp(r,o-1),t<this.length){let l=r.length;this.decomposeRight(t,r),fp(r,l)}return Ae.of(r)}decomposeLeft(e,t){let i=this.left.length;if(e<=i)return this.left.decomposeLeft(e,t);t.push(this.left),this.break&&(i++,e>=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e<i&&this.left.decomposeRight(e,t),this.break&&e<s&&t.push(null),t.push(this.right)}balanced(e,t){return e.size>2*t.size||t.size>2*e.size?Ae.of(this.break?[e,null,t]:[e,t]):(this.left=Vo(this.left,e),this.right=Vo(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?\" \":\"-\")+this.right}}function fp(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof xe&&(i=n[e+1])instanceof xe&&n.splice(e-1,3,new xe(t.length+1+i.length))}const tC=5;class mf{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof Ye?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new Ye(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e<t||i.heightRelevant){let s=i.widget?i.widget.estimatedHeight:0,r=i.widget?i.widget.lineBreaks:0;s<0&&(s=this.oracle.lineHeight);let o=t-e;i.block?this.addBlock(new jb(o,s,i)):(o||r||s>=tC)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd<this.pos&&(this.lineEnd=this.oracle.doc.lineAt(this.pos).to)}enterLine(){if(this.lineStart>-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenTo<e&&((this.writtenTo<e-1||this.nodes[this.nodes.length-1]==null)&&this.nodes.push(this.blankContent(this.writtenTo,e-1)),this.nodes.push(null)),this.pos>e&&this.nodes.push(new Ye(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new xe(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Ye)return e;let t=new Ye(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof Ye)&&!this.isCovered?this.nodes.push(new Ye(0,-1,0)):(this.writtenTo<this.pos||t==null)&&this.nodes.push(this.blankContent(this.writtenTo,this.pos));let i=e;for(let s of this.nodes)s instanceof Ye&&s.updateHeight(this.oracle,i),i+=s?s.length:1;return this.nodes}static build(e,t,i,s){let r=new mf(i,e);return M.spans(t,i,s,r,0),r.finish(i)}}function iC(n,e,t){let i=new sC;return M.compare(n,e,t,i,0),i.changes}class sC{constructor(){this.changes=[]}compareRange(){}comparePoint(e,t,i,s){(e<t||i&&i.heightRelevant||s&&s.heightRelevant)&&fs(e,t,this.changes,5)}}function nC(n,e){let t=n.getBoundingClientRect(),i=n.ownerDocument,s=i.defaultView||window,r=Math.max(0,t.left),o=Math.min(s.innerWidth,t.right),l=Math.max(0,t.top),a=Math.min(s.innerHeight,t.bottom);for(let h=n.parentNode;h&&h!=i.body;)if(h.nodeType==1){let c=h,f=window.getComputedStyle(c);if((c.scrollHeight>c.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!=\"visible\"){let u=c.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=f.position==\"absolute\"||f.position==\"fixed\"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function rC(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left<t.innerWidth&&e.right>0&&e.top<t.innerHeight&&e.bottom>0}function oC(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class ga{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;i<e.length;i++){let s=e[i],r=t[i];if(s.from!=r.from||s.to!=r.to||s.size!=r.size)return!1}return!0}draw(e,t){return ee.replace({widget:new lC(this.displaySize*(t?e.scaleY:e.scaleX),t)}).range(this.from,this.to)}}class lC extends $l{constructor(e,t){super(),this.size=e,this.vertical=t}eq(e){return e.size==this.size&&e.vertical==this.vertical}toDOM(){let e=document.createElement(\"div\");return this.vertical?e.style.height=this.size+\"px\":(e.style.width=this.size+\"px\",e.style.height=\"2px\",e.style.display=\"inline-block\"),e}get estimatedHeight(){return this.vertical?this.size:-1}}class up{constructor(e){this.state=e,this.pixelViewport={left:0,right:window.innerWidth,top:0,bottom:0},this.inView=!0,this.paddingTop=0,this.paddingBottom=0,this.contentDOMWidth=0,this.contentDOMHeight=0,this.editorHeight=0,this.editorWidth=0,this.scrollTop=0,this.scrolledToBottom=!1,this.scaleX=1,this.scaleY=1,this.scrollAnchorPos=0,this.scrollAnchorHeight=-1,this.scaler=dp,this.scrollTarget=null,this.printing=!1,this.mustMeasureContent=!0,this.defaultTextDirection=we.LTR,this.visibleRanges=[],this.mustEnforceCursorAssoc=!1;let t=e.facet(df).some(i=>typeof i!=\"function\"&&i.class==\"cm-lineWrapping\");this.heightOracle=new UP(t),this.stateDeco=pp(e),this.heightMap=Ae.empty().applyChanges(this.stateDeco,Z.empty,this.heightOracle.setDoc(e.doc),[new it(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=ee.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new Ar(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?dp:new Of(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(ln(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=pp(this.state);let s=e.changedRanges,r=it.extendWithRanges(s,iC(i,this.stateDeco,e?e.changes:he.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);cp(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Ms)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.head<a.from||t.range.head>a.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(J$)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction==\"rtl\"?we.RTL:we.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent,l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:v,scaleY:w}=ab(t,l);(v>.005&&Math.abs(this.scaleX-v)>.005||w>.005&&Math.abs(this.scaleY-w)>.005)&&(this.scaleX=v,this.scaleY=w,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=cb(e.scrollDOM);let p=(this.printing?oC:nC)(t,this.paddingTop),g=p.top-this.pixelViewport.top,m=p.bottom-this.pixelViewport.bottom;this.pixelViewport=p;let O=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(O!=this.inView&&(this.inView=O,O&&(a=!0)),!this.inView&&!this.scrollTarget&&!rC(e.dom))return 0;let y=l.width;if((this.contentDOMWidth!=y||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let v=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(v)&&(o=!0),o||s.lineWrapping&&Math.abs(y-this.contentDOMWidth)>s.charWidth){let{lineHeight:w,charWidth:Q,textHeight:$}=e.docView.measureTextSize();o=w>0&&s.refresh(r,w,Q,$,Math.max(5,y/Q),v),o&&(e.docView.minWidth=0,h|=16)}g>0&&m>0?c=Math.max(g,m):g<0&&m<0&&(c=Math.min(g,m)),cp();for(let w of this.viewports){let Q=w.from==this.viewport.from?v:e.docView.measureVisibleLineHeights(w);this.heightMap=(o?Ae.empty().applyChanges(this.stateDeco,Z.empty,this.heightOracle,[new it(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new KP(w.from,Q))}Ms&&(h|=2)}let x=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.head<this.viewport.from||this.scrollTarget.range.head>this.viewport.to);return x&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||x)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new Ar(s.lineAt(o-i*1e3,re.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,re.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(h<a.from||h>a.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=s.lineAt(h,re.ByPos,r,0,0),u;t.y==\"center\"?u=(f.top+f.bottom)/2-c/2:t.y==\"start\"||t.y==\"nearest\"&&h<a.from?u=f.top:u=f.bottom-c,a=new Ar(s.lineAt(u-1e3/2,re.ByHeight,r,0,0).from,s.lineAt(u+c+1e3/2,re.ByHeight,r,0,0).to)}}return a}mapViewport(e,t){let i=t.mapPos(e.from,-1),s=t.mapPos(e.to,1);return new Ar(this.heightMap.lineAt(i,re.ByPos,this.heightOracle,0,0).from,this.heightMap.lineAt(s,re.ByPos,this.heightOracle,0,0).to)}viewportIsAppropriate({from:e,to:t},i=0){if(!this.inView)return!0;let{top:s}=this.heightMap.lineAt(e,re.ByPos,this.heightOracle,0,0),{bottom:r}=this.heightMap.lineAt(t,re.ByPos,this.heightOracle,0,0),{visibleTop:o,visibleBottom:l}=this;return(e==0||s<=o-Math.max(10,Math.min(-i,250)))&&(t==this.state.doc.length||r>=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r<l+2*1e3}mapLineGaps(e,t){if(!e.length||t.empty)return e;let i=[];for(let s of e)t.touchesRange(s.from,s.to)||i.push(new ga(t.mapPos(s.from),t.mapPos(s.to),s.size,s.displaySize));return i}ensureLineGaps(e,t){let i=this.heightOracle.lineWrapping,s=i?1e4:2e3,r=s>>1,o=s<<1;if(this.defaultTextDirection!=we.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-c<r)return;let p=this.state.selection.main,g=[p.from];p.empty||g.push(p.to);for(let O of g)if(O>c&&O<f){a(c,O-10,u,d),a(O+10,f,u,d);return}let m=hC(e,O=>O.from>=u.from&&O.to<=u.to&&Math.abs(O.from-c)<r&&Math.abs(O.to-f)<r&&!g.some(y=>O.from<y&&O.to>y));if(!m){if(f<u.to&&t&&i&&t.visibleRanges.some(x=>x.from<=f&&x.to>=f)){let x=t.moveToLineBoundary(S.cursor(f),!1,!0).head;x>c&&(f=x)}let O=this.gapSize(u,c,f,d),y=i||O<2e6?O:2e6;m=new ga(c,f,O,y)}l.push(m)},h=c=>{if(c.length<o||c.type!=rt.Text)return;let f=aC(c.from,c.to,this.stateDeco);if(f.total<o)return;let u=this.scrollTarget?this.scrollTarget.range.head:null,d,p;if(i){let g=s/this.heightOracle.lineLength*this.heightOracle.lineHeight,m,O;if(u!=null){let y=Dr(f,u),x=((this.visibleBottom-this.visibleTop)/2+g)/c.height;m=y-x,O=y+x}else m=(this.visibleTop-c.top-g)/c.height,O=(this.visibleBottom-c.top+g)/c.height;d=Rr(f,m),p=Rr(f,O)}else{let g=f.total*this.heightOracle.charWidth,m=s*this.heightOracle.charWidth,O=0;if(g>2e6)for(let Q of e)Q.from>=c.from&&Q.from<c.to&&Q.size!=Q.displaySize&&Q.from*this.heightOracle.charWidth+O<this.pixelViewport.left&&(O=Q.size-Q.displaySize);let y=this.pixelViewport.left+O,x=this.pixelViewport.right+O,v,w;if(u!=null){let Q=Dr(f,u),$=((x-y)/2+m)/g;v=Q-$,w=Q+$}else v=(y-m)/g,w=(x+m)/g;d=Rr(f,v),p=Rr(f,w)}d>c.from&&a(c.from,d,c,f),p<c.to&&a(p,c.to,c,f)};for(let c of this.viewportLines)Array.isArray(c.type)?c.type.forEach(h):h(c);return l}gapSize(e,t,i,s){let r=Dr(s,i)-Dr(s,t);return this.heightOracle.lineWrapping?e.height*r:s.total*this.heightOracle.charWidth*r}updateLineGaps(e){ga.same(e,this.lineGaps)||(this.lineGaps=e,this.lineGapDeco=ee.set(e.map(t=>t.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];M.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r<i.length&&!(s&8);r++){let o=this.visibleRanges[r],l=i[r];(o.from!=l.from||o.to!=l.to)&&(s|=4,e&&e.mapPos(o.from,-1)==l.from&&e.mapPos(o.to,1)==l.to||(s|=8))}return this.visibleRanges=i,s}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||ln(this.heightMap.lineAt(e,re.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||ln(this.heightMap.lineAt(this.scaler.fromDOM(e),re.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return ln(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class Ar{constructor(e,t){this.from=e,this.to=t}}function aC(n,e,t){let i=[],s=n,r=0;return M.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s<e&&(i.push({from:s,to:e}),r+=e-s),{total:r,ranges:i}}function Rr({total:n,ranges:e},t){if(t<=0)return e[0].from;if(t>=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function Dr(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function hC(n,e){for(let t of n)if(e(t))return t}const dp={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function pp(n){let e=n.facet(Pl).filter(i=>typeof i!=\"function\"),t=n.facet(pf).filter(i=>typeof i!=\"function\");return t.length&&e.push(M.join(t)),e}class Of{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,re.ByPos,e,0,0).top,c=t.lineAt(a,re.ByPos,e,0,0).bottom;return s+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=t<this.viewports.length?this.viewports[t]:null;if(!r||e<r.top)return s+(e-i)*this.scale;if(e<=r.bottom)return r.domTop+(e-r.top);i=r.bottom,s=r.domBottom}}fromDOM(e){for(let t=0,i=0,s=0;;t++){let r=t<this.viewports.length?this.viewports[t]:null;if(!r||e<r.domTop)return i+(e-s)/this.scale;if(e<=r.domBottom)return r.top+(e-r.domTop);i=r.bottom,s=r.domBottom}}eq(e){return e instanceof Of?this.scale==e.scale&&this.viewports.length==e.viewports.length&&this.viewports.every((t,i)=>t.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function ln(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new dt(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>ln(s,e)):n._content)}const Zr=k.define({combine:n=>n.join(\" \")}),uc=k.define({combine:n=>n.indexOf(!0)>-1}),dc=me.newName(),Gb=me.newName(),Hb=me.newName(),Fb={\"&light\":\".\"+Gb,\"&dark\":\".\"+Hb};function pc(n,e,t){return new me(e,{finish(i){return/&/.test(i)?i.replace(/&\\w*/,s=>{if(s==\"&\")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+\" \"+i}})}const cC=pc(\".\"+dc,{\"&\":{position:\"relative !important\",boxSizing:\"border-box\",\"&.cm-focused\":{outline:\"1px dotted #212121\"},display:\"flex !important\",flexDirection:\"column\"},\".cm-scroller\":{display:\"flex !important\",alignItems:\"flex-start !important\",fontFamily:\"monospace\",lineHeight:1.4,height:\"100%\",overflowX:\"auto\",position:\"relative\",zIndex:0,overflowAnchor:\"none\"},\".cm-content\":{margin:0,flexGrow:2,flexShrink:0,display:\"block\",whiteSpace:\"pre\",wordWrap:\"normal\",boxSizing:\"border-box\",minHeight:\"100%\",padding:\"4px 0\",outline:\"none\",\"&[contenteditable=true]\":{WebkitUserModify:\"read-write-plaintext-only\"}},\".cm-lineWrapping\":{whiteSpace_fallback:\"pre-wrap\",whiteSpace:\"break-spaces\",wordBreak:\"break-word\",overflowWrap:\"anywhere\",flexShrink:1},\"&light .cm-content\":{caretColor:\"black\"},\"&dark .cm-content\":{caretColor:\"white\"},\".cm-line\":{display:\"block\",padding:\"0 2px 0 6px\"},\".cm-layer\":{position:\"absolute\",left:0,top:0,contain:\"size style\",\"& > *\":{position:\"absolute\"}},\"&light .cm-selectionBackground\":{background:\"#d9d9d9\"},\"&dark .cm-selectionBackground\":{background:\"#222\"},\"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\":{background:\"#d7d4f0\"},\"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\":{background:\"#233\"},\".cm-cursorLayer\":{pointerEvents:\"none\"},\"&.cm-focused > .cm-scroller > .cm-cursorLayer\":{animation:\"steps(1) cm-blink 1.2s infinite\"},\"@keyframes cm-blink\":{\"0%\":{},\"50%\":{opacity:0},\"100%\":{}},\"@keyframes cm-blink2\":{\"0%\":{},\"50%\":{opacity:0},\"100%\":{}},\".cm-cursor, .cm-dropCursor\":{borderLeft:\"1.2px solid black\",marginLeft:\"-0.6px\",pointerEvents:\"none\"},\".cm-cursor\":{display:\"none\"},\"&dark .cm-cursor\":{borderLeftColor:\"#ddd\"},\".cm-dropCursor\":{position:\"absolute\"},\"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\":{display:\"block\"},\".cm-iso\":{unicodeBidi:\"isolate\"},\".cm-announced\":{position:\"fixed\",top:\"-10000px\"},\"@media print\":{\".cm-announced\":{display:\"none\"}},\"&light .cm-activeLine\":{backgroundColor:\"#cceeff44\"},\"&dark .cm-activeLine\":{backgroundColor:\"#99eeff33\"},\"&light .cm-specialChar\":{color:\"red\"},\"&dark .cm-specialChar\":{color:\"#f78\"},\".cm-gutters\":{flexShrink:0,display:\"flex\",height:\"100%\",boxSizing:\"border-box\",zIndex:200},\".cm-gutters-before\":{insetInlineStart:0},\".cm-gutters-after\":{insetInlineEnd:0},\"&light .cm-gutters\":{backgroundColor:\"#f5f5f5\",color:\"#6c6c6c\",border:\"0px solid #ddd\",\"&.cm-gutters-before\":{borderRightWidth:\"1px\"},\"&.cm-gutters-after\":{borderLeftWidth:\"1px\"}},\"&dark .cm-gutters\":{backgroundColor:\"#333338\",color:\"#ccc\"},\".cm-gutter\":{display:\"flex !important\",flexDirection:\"column\",flexShrink:0,boxSizing:\"border-box\",minHeight:\"100%\",overflow:\"hidden\"},\".cm-gutterElement\":{boxSizing:\"border-box\"},\".cm-lineNumbers .cm-gutterElement\":{padding:\"0 3px 0 5px\",minWidth:\"20px\",textAlign:\"right\",whiteSpace:\"nowrap\"},\"&light .cm-activeLineGutter\":{backgroundColor:\"#e2f2ff\"},\"&dark .cm-activeLineGutter\":{backgroundColor:\"#222227\"},\".cm-panels\":{boxSizing:\"border-box\",position:\"sticky\",left:0,right:0,zIndex:300},\"&light .cm-panels\":{backgroundColor:\"#f5f5f5\",color:\"black\"},\"&light .cm-panels-top\":{borderBottom:\"1px solid #ddd\"},\"&light .cm-panels-bottom\":{borderTop:\"1px solid #ddd\"},\"&dark .cm-panels\":{backgroundColor:\"#333338\",color:\"white\"},\".cm-dialog\":{padding:\"2px 19px 4px 6px\",position:\"relative\",\"& label\":{fontSize:\"80%\"}},\".cm-dialog-close\":{position:\"absolute\",top:\"3px\",right:\"4px\",backgroundColor:\"inherit\",border:\"none\",font:\"inherit\",fontSize:\"14px\",padding:\"0\"},\".cm-tab\":{display:\"inline-block\",overflow:\"hidden\",verticalAlign:\"bottom\"},\".cm-widgetBuffer\":{verticalAlign:\"text-top\",height:\"1em\",width:0,display:\"inline\"},\".cm-placeholder\":{color:\"#888\",display:\"inline-block\",verticalAlign:\"top\",userSelect:\"none\"},\".cm-highlightSpace\":{backgroundImage:\"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",backgroundPosition:\"center\"},\".cm-highlightTab\":{backgroundImage:`url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,backgroundSize:\"auto 100%\",backgroundPosition:\"right 90%\",backgroundRepeat:\"no-repeat\"},\".cm-trailingSpace\":{backgroundColor:\"#ff332255\"},\".cm-button\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",padding:\".2em 1em\",borderRadius:\"1px\"},\"&light .cm-button\":{backgroundImage:\"linear-gradient(#eff1f5, #d9d9df)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#b4b4b4, #d0d3d6)\"}},\"&dark .cm-button\":{backgroundImage:\"linear-gradient(#393939, #111)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#111, #333)\"}},\".cm-textfield\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",border:\"1px solid silver\",padding:\".2em .5em\"},\"&light .cm-textfield\":{backgroundColor:\"white\"},\"&dark .cm-textfield\":{border:\"1px solid #555\",backgroundColor:\"inherit\"}},Fb),fC={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},ma=T.ie&&T.ie_version<=11;class uC{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new z$,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(T.ie&&T.ie_version<=11||T.ios&&e.composing)&&t.some(i=>i.type==\"childList\"&&i.removedNodes.length||i.type==\"characterData\"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&T.android&&e.constructor.EDIT_CONTEXT!==!1&&!(T.chrome&&T.chrome_version<126)&&(this.editContext=new pC(e),e.state.facet(Jt)&&(e.contentDOM.editContext=this.editContext.editContext)),ma&&(this.onCharData=t=>{this.queue.push({target:t.target,type:\"characterData\",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia(\"print\")),typeof ResizeObserver==\"function\"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate)<Date.now()-75&&this.onResize()}),this.resizeScroll.observe(e.scrollDOM)),this.addWindowListeners(this.win=e.win),this.start(),typeof IntersectionObserver==\"function\"&&(this.intersection=new IntersectionObserver(t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent(\"Event\")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent(\"Event\"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers(\"scroll\",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type==\"change\"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Jt)?i.root.activeElement!=this.dom:!bn(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(T.ie&&T.ie_version<=11||T.android&&T.chrome)&&!i.state.selection.main.empty&&s.focusNode&&Sn(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Ps(e.root);if(!t)return!1;let i=T.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&dC(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=bn(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime<Date.now()-300&&I$(this.dom,i)?(this.view.inputState.lastFocusTime=0,e.docView.updateSelection(),!1):(this.selectionRange.setRange(i),s&&(this.selectionChanged=!0),!0)}setSelectionRange(e,t){this.selectionRange.set(e.node,e.offset,t.node,t.offset),this.selectionChanged=!1}clearSelectionRange(){this.selectionRange.set(null,0,null,0)}listenForScroll(){this.parentCheck=-1;let e=0,t=null;for(let i=this.dom;i;)if(i.nodeType==1)!t&&e<this.scrollTargets.length&&this.scrollTargets[e]==i?e++:t||(t=this.scrollTargets.slice(0,e)),t&&t.push(i),i=i.assignedSlot||i.parentNode;else if(i.nodeType==11)i=i.host;else break;if(e<this.scrollTargets.length&&!t&&(t=this.scrollTargets.slice(0,e)),t){for(let i of this.scrollTargets)i.removeEventListener(\"scroll\",this.onScroll);for(let i of this.scrollTargets=t)i.addEventListener(\"scroll\",this.onScroll)}}ignore(e){if(!this.active)return e();try{return this.stop(),e()}finally{this.start(),this.clear()}}start(){this.active||(this.observer.observe(this.dom,fC),ma&&this.dom.addEventListener(\"DOMCharacterDataModified\",this.onCharData),this.active=!0)}stop(){this.active&&(this.active=!1,this.observer.disconnect(),ma&&this.dom.removeEventListener(\"DOMCharacterDataModified\",this.onCharData))}clear(){this.processRecords(),this.queue.length=0,this.selectionChanged=!1}delayAndroidKey(e,t){var i;if(!this.delayedAndroidKey){let s=()=>{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&us(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e==\"Enter\")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange<Date.now()-50||!!(!((i=this.delayedAndroidKey)===null||i===void 0)&&i.force)})}clearDelayedAndroidKey(){this.win.cancelAnimationFrame(this.flushingAndroidKey),this.delayedAndroidKey=null,this.flushingAndroidKey=-1}flushSoon(){this.delayedFlush<0&&(this.delayedFlush=this.view.win.requestAnimationFrame(()=>{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&bn(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new AP(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=Lb(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Wo(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type==\"attributes\"),e.type==\"childList\"){let i=gp(t,e.previousSibling||e.target.previousSibling,-1),s=gp(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type==\"characterData\"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener(\"resize\",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener(\"change\",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener(\"beforeprint\",this.onPrint),e.addEventListener(\"scroll\",this.onScroll),e.document.addEventListener(\"selectionchange\",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener(\"scroll\",this.onScroll),e.removeEventListener(\"resize\",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener(\"change\",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener(\"beforeprint\",this.onPrint),e.document.removeEventListener(\"selectionchange\",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Jt)!=e.state.facet(Jt)&&(e.view.contentDOM.editContext=e.state.facet(Jt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener(\"scroll\",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function gp(n,e,t){for(;e;){let i=ge.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function mp(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return Sn(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function dC(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return mp(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener(\"beforeinput\",i,!0),n.dom.ownerDocument.execCommand(\"indent\"),n.contentDOM.removeEventListener(\"beforeinput\",i,!0),t?mp(n,t):null}class pC{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&r<this.from?l=r:a==this.to&&r>this.to&&(a=r);let c=Eb(e.state.sliceDoc(l,a),i.text,(h?s.from:s.to)-l,h?\"end\":null);if(!c){let u=S.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Wo(u,s)||e.dispatch({selection:u,userEvent:\"select\"});return}let f={from:c.from+l,to:c.toA+l,insert:Z.of(i.text.slice(c.from,c.toB).split(`\n`))};if((T.mac||T.android)&&f.from==o-1&&/^\\. ?$/.test(i.text)&&e.contentDOM.getAttribute(\"autocorrect\")==\"off\"&&(f={from:l,to:a,insert:Z.of([i.text.replace(\".\",\" \")])}),this.pendingContextChange=f,!e.state.readOnly){let u=this.to-this.from+(f.to-f.from+f.insert.length);gf(e,f,S.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),f.from<f.to&&!f.insert.length&&e.inputState.composing>=0&&!/[\\\\p{Alphabetic}\\\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o<l;o++){let a=e.coordsForChar(o);r=a&&new DOMRect(a.left,a.top,a.right-a.left,a.bottom-a.top)||r||new DOMRect,s.push(r)}t.updateCharacterBounds(i.rangeStart,s)},this.handlers.textformatupdate=i=>{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a<h){let c=`text-decoration: underline ${/^[a-z]/.test(o)?o+\" \":o==\"Dashed\"?\"dashed \":o==\"Squiggle\"?\"wavy \":\"\"}${/thin/i.test(l)?1:2}px`;s.push(ee.mark({attributes:{style:c}}).range(a,h))}}}e.dispatch({effects:$b.of(ee.set(s))})},this.handlers.compositionstart=()=>{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=Ps(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let c=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=c,this.to+=c;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(r<this.to){if(r<this.from||o>this.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent(\"input.type\")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to<e.doc.length&&this.to-t<500||this.to-this.from>1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class z{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement(\"div\"),this.scrollDOM=document.createElement(\"div\"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className=\"cm-scroller\",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement(\"div\"),this.announceDOM.className=\"cm-announced\",this.announceDOM.setAttribute(\"aria-live\",\"polite\"),this.dom=document.createElement(\"div\"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||q$(e.parent)||document,this.viewState=new up(e.state||L.create(e)),e.scrollTo&&e.scrollTo.is(Cr)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ji).map(s=>new ca(s));for(let s of this.plugins)s.update(this);this.observer=new uC(this),this.inputState=new BP(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Kd(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent=!0,this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof ce?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(_b))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=Yb(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(c=null)):this.observer.clear(),r.facet(L.phrases)!=this.state.facet(L.phrases))return this.setState(r);s=Xo.create(this,r,e),s.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection;f=new ds(d.empty?d:S.cursor(d.head,d.head>d.anchor?-1:1))}for(let d of u.effects)d.is(Cr)&&(f=d.value.clip(this.state))}this.viewState.update(s,f),this.bidiCache=zo.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(rn)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent(\"select.pointer\")))}finally{this.updateState=0}if(s.startState.facet(Zr)!=s.state.facet(Zr)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(ac))try{u(s)}catch(d){oi(this.state,d,\"update listener\")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!Lb(this,c)&&h.force&&us(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new up(e),this.plugins=e.facet(Ji).map(i=>new ca(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new Kd(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ji),i=e.state.facet(Ji);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new ca(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s<this.plugins.length;s++)this.plugins[s].update(this);t!=i&&this.inputState.ensureHandlers(this.plugins)}docViewUpdate(){for(let e of this.plugins){let t=e.value;if(t&&t.docViewUpdate)try{t.docViewUpdate(this)}catch(i){oi(this.state,i,\"doc view update listener\")}}}measure(e=!0){if(this.destroyed)return;if(this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.scrollDOM,s=i.scrollTop*this.scaleY,{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollTop)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(cb(i))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure(this);if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?\"Measure loop restarted more than 5 times\":\"Viewport failed to stabilize\");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return oi(this.state,p),Op}}),f=Xo.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d<h.length;d++)if(c[d]!=Op)try{let p=h[d];p.write&&p.write(c[d],this)}catch(p){oi(this.state,p)}if(u&&this.docView.updateSelection(!0),!f.viewportChanged&&this.measureRequests.length==0){if(this.viewState.editorHeight)if(this.viewState.scrollTarget){this.docView.scrollIntoView(this.viewState.scrollTarget),this.viewState.scrollTarget=null,o=-1;continue}else{let p=(r<0?this.viewState.heightMap.height:this.viewState.lineBlockAt(r).top)-o;if(p>1||p<-1){s=s+p,i.scrollTop=s/this.scaleY,o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(ac))l(t)}get themeClasses(){return dc+\" \"+(this.state.facet(uc)?Hb:Gb)+\" \"+this.state.facet(Zr)}updateAttrs(){let e=bp(this,Pb,{class:\"cm-editor\"+(this.hasFocus?\" cm-focused \":\" \")+this.themeClasses}),t={spellcheck:\"false\",autocorrect:\"off\",autocapitalize:\"off\",writingsuggestions:\"false\",translate:\"no\",contenteditable:this.state.facet(Jt)?\"true\":\"false\",class:\"cm-content\",style:`${T.tabSize}: ${this.state.tabSize}`,role:\"textbox\",\"aria-multiline\":\"true\"};this.state.readOnly&&(t[\"aria-readonly\"]=\"true\"),bp(this,df,t);let i=this.observer.ignore(()=>{let s=Nd(this.contentDOM,this.contentAttrs,t),r=Nd(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(z.announce)){t&&(this.announceDOM.textContent=\"\"),t=!1;let r=this.announceDOM.appendChild(document.createElement(\"div\"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(rn);let e=this.state.facet(z.cspNonce);me.mount(this.root,this.styleModules.concat(cC).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error(\"Reading the editor layout isn't allowed during an update\");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;t<this.measureRequests.length;t++)if(this.measureRequests[t].key===e.key){this.measureRequests[t]=e;return}}this.measureRequests.push(e)}}plugin(e){let t=this.pluginMap.get(e);return(t===void 0||t&&t.plugin!=e)&&this.pluginMap.set(e,t=this.plugins.find(i=>i.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return pa(this,e,Jd(this,e,t,i))}moveByGroup(e,t){return pa(this,e,Jd(this,e,t,i=>$P(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return S.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return vP(this,e,t,i)}moveVertically(e,t,i){return pa(this,e,PP(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=cc(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),cc(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[ri.find(r,e-s.from,-1,t)];return Bo(i,o.dir==we.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Qb)||e<this.viewport.from||e>this.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>gC)return mb(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||gb(r.isolates,i=Hd(this,e))))return r.order;i||(i=Hd(this,e));let s=F$(e.text,t,i);return this.bidiCache.push(new zo(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||T.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{hb(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return Cr.of(new ds(typeof e==\"number\"?S.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Cr.of(new ds(S.cursor(i.from),\"start\",\"start\",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e==\"boolean\"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return Pi.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Pi.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=me.newName(),s=[Zr.of(i),rn.of(pc(`.${i}`,e))];return t&&t.dark&&s.push(uc.of(!0)),s}static baseTheme(e){return xt.lowest(rn.of(pc(\".\"+dc,e,Fb)))}static findFromDOM(e){var t;let i=e.querySelector(\".cm-content\"),s=i&&ge.get(i)||ge.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}}z.styleModule=rn;z.inputHandler=wb;z.clipboardInputFilter=ff;z.clipboardOutputFilter=uf;z.scrollHandler=vb;z.focusChangeEffect=kb;z.perLineTextDirection=Qb;z.exceptionSink=xb;z.updateListener=ac;z.editable=Jt;z.mouseSelectionStyle=yb;z.dragMovesSelection=Sb;z.clickAddsSelectionRange=bb;z.decorations=Pl;z.blockWrappers=Cb;z.outerDecorations=pf;z.atomicRanges=Kn;z.bidiIsolatedRanges=Tb;z.scrollMargins=Mb;z.darkTheme=uc;z.cspNonce=k.define({combine:n=>n.length?n[0]:\"\"});z.contentAttributes=df;z.editorAttributes=Pb;z.lineWrapping=z.contentAttributes.of({class:\"cm-lineWrapping\"});z.announce=B.define();const gC=4096,Op={};class zo{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:we.LTR;for(let r=Math.max(0,e.length-10);r<e.length;r++){let o=e[r];o.dir==s&&!t.touchesRange(o.from,o.to)&&i.push(new zo(t.mapPos(o.from,1),t.mapPos(o.to,-1),o.dir,o.isolates,!1,o.order))}return i}}function bp(n,e,t){for(let i=n.state.facet(e),s=i.length-1;s>=0;s--){let r=i[s],o=typeof r==\"function\"?r(n):r;o&&af(o,t)}return t}const mC=T.mac?\"mac\":T.windows?\"win\":T.linux?\"linux\":\"key\";function OC(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i==\"Space\"&&(i=\" \");let s,r,o,l;for(let a=0;a<t.length-1;++a){const h=t[a];if(/^(cmd|meta|m)$/i.test(h))l=!0;else if(/^a(lt)?$/i.test(h))s=!0;else if(/^(c|ctrl|control)$/i.test(h))r=!0;else if(/^s(hift)?$/i.test(h))o=!0;else if(/^mod$/i.test(h))e==\"mac\"?l=!0:r=!0;else throw new Error(\"Unrecognized modifier name: \"+h)}return s&&(i=\"Alt-\"+i),r&&(i=\"Ctrl-\"+i),l&&(i=\"Meta-\"+i),o&&(i=\"Shift-\"+i),i}function Br(n,e,t){return e.altKey&&(n=\"Alt-\"+n),e.ctrlKey&&(n=\"Ctrl-\"+n),e.metaKey&&(n=\"Meta-\"+n),t!==!1&&e.shiftKey&&(n=\"Shift-\"+n),n}const bC=xt.default(z.domEventHandlers({keydown(n,e){return Kb(Ub(e.state),n,e,\"editor\")}})),SC=k.define({enables:bC}),Sp=new WeakMap;function Ub(n){let e=n.facet(SC),t=Sp.get(e);return t||Sp.set(e,t=wC(e.reduce((i,s)=>i.concat(s),[]))),t}function yC(n,e,t){return Kb(Ub(n.state),e,n,t)}let mi=null;const xC=4e3;function wC(n,e=mC){let t=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error(\"Key binding \"+o+\" is used both as a regular binding and as a multi-stroke prefix\")},r=(o,l,a,h,c)=>{var f,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(O=>OC(O,e));for(let O=1;O<p.length;O++){let y=p.slice(0,O).join(\" \");s(y,!0),d[y]||(d[y]={preventDefault:!0,stopPropagation:!1,run:[x=>{let v=mi={view:x,prefix:y,scope:o};return setTimeout(()=>{mi==v&&(mi=null)},xC),!0}]})}let g=p.join(\" \");s(g,!1);let m=d[g]||(d[g]={preventDefault:!1,stopPropagation:!1,run:((u=(f=d._any)===null||f===void 0?void 0:f.run)===null||u===void 0?void 0:u.slice())||[]});a&&m.run.push(a),h&&(m.preventDefault=!0),c&&(m.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(\" \"):[\"editor\"];if(o.any)for(let h of l){let c=t[h]||(t[h]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:f}=o;for(let u in c)c[u].run.push(d=>f(d,gc))}let a=o[e]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,\"Shift-\"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}let gc=null;function Kb(n,e,t,i){gc=e;let s=mg(e),r=Me(s,0),o=ut(r)==s.length&&s!=\" \",l=\"\",a=!1,h=!1,c=!1;mi&&mi.view==t&&mi.scope==i&&(l=mi.prefix+\" \",Vb.indexOf(e.keyCode)<0&&(h=!0,mi=null));let f=new Set,u=m=>{if(m){for(let O of m.run)if(!f.has(O)&&(f.add(O),O(t)))return m.stopPropagation&&(c=!0),!0;m.preventDefault&&(m.stopPropagation&&(c=!0),h=!0)}return!1},d=n[i],p,g;return d&&(u(d[l+Br(s,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(T.windows&&e.ctrlKey&&e.altKey)&&!(T.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=Og[e.keyCode])&&p!=s?(u(d[l+Br(p,e,!0)])||e.shiftKey&&(g=bg[e.keyCode])!=s&&g!=p&&u(d[l+Br(g,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+Br(s,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&c&&e.stopPropagation(),gc=null,a}const yp=k.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function Jb(n,e){let t=n.plugin(e1),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}const e1=Pi.fromClass(class{constructor(n){this.input=n.state.facet(qo),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(yp);this.top=new Xr(n,!0,e.topContainer),this.bottom=new Xr(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add(\"cm-panel\"),t.mount&&t.mount()}update(n){let e=n.state.facet(yp);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new Xr(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new Xr(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(qo);if(t!=this.input){let i=t.filter(a=>a),s=[],r=[],o=[],l=[];for(let a of i){let h=this.specs.indexOf(a),c;h<0?(c=a(n.view),l.push(c)):(c=this.panels[h],c.update&&c.update(n)),s.push(c),(c.top?r:o).push(c)}this.specs=i,this.panels=s,this.top.sync(r),this.bottom.sync(o);for(let a of l)a.dom.classList.add(\"cm-panel\"),a.mount&&a.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>z.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})});class Xr{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes=\"\",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement(\"div\"),this.dom.className=this.top?\"cm-panels cm-panels-top\":\"cm-panels cm-panels-bottom\",this.dom.style[this.top?\"top\":\"bottom\"]=\"0\";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=xp(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=xp(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(\" \"))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(\" \"))e&&this.container.classList.add(e)}}}function xp(n){let e=n.nextSibling;return n.remove(),e}const qo=k.define({enables:e1});function kC(n,e){let t,i=new Promise(o=>t=o),s=o=>QC(o,e,t);n.state.field(Oa,!1)?n.dispatch({effects:t1.of(s)}):n.dispatch({effects:B.appendConfig.of(Oa.init(()=>[s]))});let r=i1.of(s);return{close:r,result:i.then(o=>((n.win.queueMicrotask||(a=>n.win.setTimeout(a,10)))(()=>{n.state.field(Oa).indexOf(s)>-1&&n.dispatch({effects:r})}),o))}}const Oa=Se.define({create(){return[]},update(n,e){for(let t of e.effects)t.is(t1)?n=[t.value].concat(n):t.is(i1)&&(n=n.filter(i=>i!=t.value));return n},provide:n=>qo.computeN([n],e=>e.field(n))}),t1=B.define(),i1=B.define();function QC(n,e,t){let i=e.content?e.content(n,()=>o(null)):null;if(!i){if(i=H(\"form\"),e.input){let l=H(\"input\",e.input);/^(text|password|number|email|tel|url)$/.test(l.type)&&l.classList.add(\"cm-textfield\"),l.name||(l.name=\"input\"),i.appendChild(H(\"label\",(e.label||\"\")+\": \",l))}else i.appendChild(document.createTextNode(e.label||\"\"));i.appendChild(document.createTextNode(\" \")),i.appendChild(H(\"button\",{class:\"cm-button\",type:\"submit\"},e.submitLabel||\"OK\"))}let s=i.nodeName==\"FORM\"?[i]:i.querySelectorAll(\"form\");for(let l=0;l<s.length;l++){let a=s[l];a.addEventListener(\"keydown\",h=>{h.keyCode==27?(h.preventDefault(),o(null)):h.keyCode==13&&(h.preventDefault(),o(a))}),a.addEventListener(\"submit\",h=>{h.preventDefault(),o(a)})}let r=H(\"div\",i,H(\"button\",{onclick:()=>o(null),\"aria-label\":n.state.phrase(\"close\"),class:\"cm-dialog-close\",type:\"button\"},[\"×\"]));e.class&&(r.className=e.class),r.classList.add(\"cm-dialog\");function o(l){r.contains(r.ownerDocument.activeElement)&&n.focus(),t(l)}return{dom:r,top:e.top,mount:()=>{if(e.focus){let l;typeof e.focus==\"string\"?l=i.querySelector(e.focus):l=i.querySelector(\"input\")||i.querySelector(\"button\"),l&&\"select\"in l?l.select():l&&\"focus\"in l&&l.focus()}}}}class As extends Ve{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}As.prototype.elementClass=\"\";As.prototype.toDOM=void 0;As.prototype.mapMode=te.TrackBefore;As.prototype.startSide=As.prototype.endSide=-1;As.prototype.point=!0;const wp=typeof String.prototype.normalize==\"function\"?n=>n.normalize(\"NFKD\"):n=>n;class Rs{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer=\"\",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?l=>r(wp(l)):wp,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Me(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=wc(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=ut(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i;;r++){let l=s.charCodeAt(r),a=this.match(l,o,this.bufferPos+this.bufferStart);if(r==s.length-1){if(a)return this.value=a,this;break}o==i&&r<t.length&&t.charCodeAt(r)==l&&o++}}}match(e,t,i){let s=null;for(let r=0;r<this.matches.length;r+=2){let o=this.matches[r],l=!1;this.query.charCodeAt(o)==e&&(o==this.query.length-1?s={from:this.matches[r+1],to:i}:(this.matches[r]++,l=!0)),l||(this.matches.splice(r,2),r-=2)}return this.query.charCodeAt(0)==e&&(this.query.length==1?s={from:t,to:i}:this.matches.push(1,t)),s&&this.test&&!this.test(s.from,s.to,this.buffer,this.bufferStart)&&(s=null),s}}typeof Symbol<\"u\"&&(Rs.prototype[Symbol.iterator]=function(){return this});const s1={from:-1,to:-1,match:/.*/.exec(\"\")},bf=\"gm\"+(/x/.unicode==null?\"\":\"u\");class n1{constructor(e,t,i,s=0,r=e.length){if(this.text=e,this.to=r,this.curLine=\"\",this.done=!1,this.value=s1,/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(t))return new r1(e,t,i,s,r);this.re=new RegExp(t,bf+(i?.ignoreCase?\"i\":\"\")),this.test=i?.test,this.iter=e.iter();let o=e.lineAt(s);this.curLineStart=o.from,this.matchPos=Io(e,s),this.getLine(this.curLineStart)}getLine(e){this.iter.next(e),this.iter.lineBreak?this.curLine=\"\":(this.curLine=this.iter.value,this.curLineStart+this.curLine.length>this.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine=\"\":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=Io(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(i<s||i>this.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length<this.to)this.nextLine(),e=0;else return this.done=!0,this}}}const ba=new WeakMap;class ps{constructor(e,t){this.from=e,this.text=t}get to(){return this.from+this.text.length}static get(e,t,i){let s=ba.get(e);if(!s||s.from>=i||s.to<=t){let l=new ps(t,e.sliceString(t,i));return ba.set(e,l),l}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to<i&&(r+=e.sliceString(s.to,i)),ba.set(e,new ps(o,r)),new ps(t,r.slice(t-o,i-o))}}class r1{constructor(e,t,i,s,r){this.text=e,this.to=r,this.done=!1,this.value=s1,this.matchPos=Io(e,s),this.re=new RegExp(t,bf+(i?.ignoreCase?\"i\":\"\")),this.test=i?.test,this.flat=ps.get(e,s,this.chunkEnd(s+5e3))}chunkEnd(e){return e>=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,match:t},this.matchPos=Io(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=ps.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<\"u\"&&(n1.prototype[Symbol.iterator]=r1.prototype[Symbol.iterator]=function(){return this});function vC(n){try{return new RegExp(n,bf),!0}catch{return!1}}function Io(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e<t.to&&(i=t.text.charCodeAt(e-t.from))>=56320&&i<57344;)e++;return e}const $C=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:s}=kC(n,{label:e.phrase(\"Go to line\"),input:{type:\"text\",name:\"line\",value:t},focus:!0,submitLabel:e.phrase(\"go\")});return s.then(r=>{let o=r&&/^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(r.elements.line.value);if(!o){n.dispatch({effects:i});return}let l=e.doc.lineAt(e.selection.main.head),[,a,h,c,f]=o,u=c?+c.slice(1):0,d=h?+h:l.number;if(h&&f){let m=d/100;a&&(m=m*(a==\"-\"?-1:1)+l.number/e.doc.lines),d=Math.round(e.doc.lines*m)}else h&&a&&(d=d*(a==\"-\"?-1:1)+l.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),g=S.cursor(p.from+Math.max(0,Math.min(u,p.length)));n.dispatch({effects:[i,z.scrollIntoView(g.from,{y:\"center\"})],selection:g})}),!0},PC={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},CC=k.define({combine(n){return _t(n,PC,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function TC(n){return[ZC,DC]}const MC=ee.mark({class:\"cm-selectionMatch\"}),AC=ee.mark({class:\"cm-selectionMatch cm-selectionMatch-main\"});function kp(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=oe.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=oe.Word)}function RC(n,e,t,i){return n(e.sliceDoc(t,t+1))==oe.Word&&n(e.sliceDoc(i-1,i))==oe.Word}const DC=Pi.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(CC),{state:t}=n,i=t.selection;if(i.ranges.length>1)return ee.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return ee.none;let a=t.wordAt(s.head);if(!a)return ee.none;o=t.charCategorizer(s.head),r=t.sliceDoc(a.from,a.to)}else{let a=s.to-s.from;if(a<e.minSelectionLength||a>200)return ee.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(kp(o,t,s.from,s.to)&&RC(o,t,s.from,s.to)))return ee.none}else if(r=t.sliceDoc(s.from,s.to),!r)return ee.none}let l=[];for(let a of n.visibleRanges){let h=new Rs(t.doc,r,a.from,a.to);for(;!h.next().done;){let{from:c,to:f}=h.value;if((!o||kp(o,t,c,f))&&(s.empty&&c<=s.from&&f>=s.to?l.push(AC.range(c,f)):(c>=s.to||f<=s.from)&&l.push(MC.range(c,f)),l.length>e.maxMatches))return ee.none}}return ee.set(l)}},{decorations:n=>n.decorations}),ZC=z.baseTheme({\".cm-selectionMatch\":{backgroundColor:\"#99ff7780\"},\".cm-searchMatch .cm-selectionMatch\":{backgroundColor:\"transparent\"}}),BC=({state:n,dispatch:e})=>{let{selection:t}=n,i=S.create(t.ranges.map(s=>n.wordAt(s.head)||S.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function XC(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,l=new Rs(n.doc,e,i[i.length-1].to);;)if(l.next(),l.done){if(o)return null;l=new Rs(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(a=>a.from==l.value.from))continue;if(r){let a=n.wordAt(l.value.from);if(!a||a.from!=l.value.from||a.to!=l.value.to)continue}return l.value}}const LC=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return BC({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=XC(n,i);return s?(e(n.update({selection:n.selection.addRange(S.range(s.from,s.to),!1),effects:z.scrollIntoView(s.to)})),!0):!1},Ws=k.define({combine(n){return _t(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new UC(e),scrollToMatch:e=>z.scrollIntoView(e)})}});class o1{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||\"\",this.valid=!!this.search&&(!this.regexp||vC(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\\\([nrt\\\\])/g,(t,i)=>i==\"n\"?`\n`:i==\"r\"?\"\\r\":i==\"t\"?\"\t\":\"\\\\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new IC(this):new VC(this)}getCursor(e,t=0,i){let s=e.doc?e:L.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Gi(this,s,t,i):ji(this,s,t,i)}}class l1{constructor(e){this.spec=e}}function EC(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let l=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(l,e,i,s)}}function ji(n,e,t,i){let s;return n.wholeWord&&(s=WC(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=EC(n.test,e,s)),new Rs(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function WC(n,e){return(t,i,s,r)=>((r>t||r+s.length<i)&&(r=Math.max(0,t-2),s=n.sliceString(r,Math.min(n.length,i+2))),(e(_o(s,t-r))!=oe.Word||e(Yo(s,t-r))!=oe.Word)&&(e(Yo(s,i-r))!=oe.Word||e(_o(s,i-r))!=oe.Word))}class VC extends l1{constructor(e){super(e)}nextMatch(e,t,i){let s=ji(this.spec,e,i,e.doc.length).nextOverlapping();if(s.done){let r=Math.min(e.doc.length,t+this.spec.unquoted.length);s=ji(this.spec,e,0,r).nextOverlapping()}return s.done||s.value.from==t&&s.value.to==i?null:s.value}prevMatchInRange(e,t,i){for(let s=i;;){let r=Math.max(t,s-1e4-this.spec.unquoted.length),o=ji(this.spec,e,r,s),l=null;for(;!o.nextOverlapping().done;)l=o.value;if(l)return l;if(r==t)return null;s-=1e4}}prevMatch(e,t,i){let s=this.prevMatchInRange(e,0,t);return s||(s=this.prevMatchInRange(e,Math.max(0,i-this.spec.unquoted.length),e.doc.length)),s&&(s.from!=t||s.to!=i)?s:null}getReplacement(e){return this.spec.unquote(this.spec.replace)}matchAll(e,t){let i=ji(this.spec,e,0,e.doc.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=ji(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function zC(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Gi(n,e,t,i){let s;return n.wholeWord&&(s=qC(e.charCategorizer(e.selection.main.head))),n.test&&(s=zC(n.test,e,s)),new n1(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function _o(n,e){return n.slice(_(n,e,!1),e)}function Yo(n,e){return n.slice(e,_(n,e))}function qC(n){return(e,t,i)=>!i[0].length||(n(_o(i.input,i.index))!=oe.Word||n(Yo(i.input,i.index))!=oe.Word)&&(n(Yo(i.input,i.index+i[0].length))!=oe.Word||n(_o(i.input,i.index+i[0].length))!=oe.Word)}class IC extends l1{nextMatch(e,t,i){let s=Gi(this.spec,e,i,e.doc.length).next();return s.done&&(s=Gi(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Gi(this.spec,e,r,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(r==t||l.from>r+10))return l;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\\$([$&]|\\d+)/g,(t,i)=>{if(i==\"&\")return e.match[0];if(i==\"$\")return\"$\";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r<e.match.length)return e.match[r]+i.slice(s)}return t})}matchAll(e,t){let i=Gi(this.spec,e,0,e.doc.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Gi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const Xn=B.define(),Sf=B.define(),xi=Se.define({create(n){return new Sa(mc(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Xn)?n=new Sa(t.value.create(),n.panel):t.is(Sf)&&(n=new Sa(n.query,t.value?yf:null));return n},provide:n=>qo.from(n,e=>e.panel)});class Sa{constructor(e,t){this.query=e,this.panel=t}}const _C=ee.mark({class:\"cm-searchMatch\"}),YC=ee.mark({class:\"cm-searchMatch cm-searchMatch-selected\"}),NC=Pi.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(xi))}update(n){let e=n.state.field(xi);(e!=n.startState.field(xi)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return ee.none;let{view:t}=this,i=new ai;for(let s=0,r=t.visibleRanges,o=r.length;s<o;s++){let{from:l,to:a}=r[s];for(;s<o-1&&a>r[s+1].from-500;)a=r[++s].to;n.highlight(t.state,l,a,(h,c)=>{let f=t.state.selection.ranges.some(u=>u.from==h&&u.to==c);i.add(h,c,f?YC:_C)})}return i.finish()}},{decorations:n=>n.decorations});function Jn(n){return e=>{let t=e.state.field(xi,!1);return t&&t.query.spec.valid?n(e,t):c1(e)}}const No=Jn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=S.single(i.from,i.to),r=n.state.facet(Ws);return n.dispatch({selection:s,effects:[xf(n,i),r.scrollToMatch(s.main,n)],userEvent:\"select.search\"}),h1(n),!0}),jo=Jn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=S.single(s.from,s.to),o=n.state.facet(Ws);return n.dispatch({selection:r,effects:[xf(n,s),o.scrollToMatch(r.main,n)],userEvent:\"select.search\"}),h1(n),!0}),jC=Jn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:S.create(t.map(i=>S.range(i.from,i.to))),userEvent:\"select.search.matches\"}),!0)}),GC=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let l=new Rs(n.doc,n.sliceDoc(i,s));!l.next().done;){if(r.length>1e3)return!1;l.value.from==i&&(o=r.length),r.push(S.range(l.value.from,l.value.to))}return e(n.update({selection:S.create(r,o),userEvent:\"select.search.matches\"})),!0},Qp=Jn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,l=[],a,h,c=[];o.from==i&&o.to==s&&(h=t.toText(e.getReplacement(o)),l.push({from:o.from,to:o.to,insert:h}),o=e.nextMatch(t,o.from,o.to),c.push(z.announce.of(t.phrase(\"replaced match on line $\",t.doc.lineAt(i).number)+\".\")));let f=n.state.changes(l);return o&&(a=S.single(o.from,o.to).map(f),c.push(xf(n,o)),c.push(t.facet(Ws).scrollToMatch(a.main,n))),n.dispatch({changes:f,selection:a,effects:c,userEvent:\"input.replace\"}),!0}),HC=Jn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=e.matchAll(n.state,1e9).map(s=>{let{from:r,to:o}=s;return{from:r,to:o,insert:e.getReplacement(s)}});if(!t.length)return!1;let i=n.state.phrase(\"replaced $ matches\",t.length)+\".\";return n.dispatch({changes:t,effects:z.announce.of(i),userEvent:\"input.replace.all\"}),!0});function yf(n){return n.state.facet(Ws).createPanel(n)}function mc(n,e){var t,i,s,r,o;let l=n.selection.main,a=l.empty||l.to>l.from+100?\"\":n.sliceDoc(l.from,l.to);if(e&&!a)return e;let h=n.facet(Ws);return new o1({search:((t=e?.literal)!==null&&t!==void 0?t:h.literal)?a:a.replace(/\\n/g,\"\\\\n\"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:h.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:h.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:h.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:h.wholeWord})}function a1(n){let e=Jb(n,yf);return e&&e.dom.querySelector(\"[main-field]\")}function h1(n){let e=a1(n);e&&e==n.root.activeElement&&e.select()}const c1=n=>{let e=n.state.field(xi,!1);if(e&&e.panel){let t=a1(n);if(t&&t!=n.root.activeElement){let i=mc(n.state,e.query.spec);i.valid&&n.dispatch({effects:Xn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Sf.of(!0),e?Xn.of(mc(n.state,e.query.spec)):B.appendConfig.of(JC)]});return!0},f1=n=>{let e=n.state.field(xi,!1);if(!e||!e.panel)return!1;let t=Jb(n,yf);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Sf.of(!1)}),!0},FC=[{key:\"Mod-f\",run:c1,scope:\"editor search-panel\"},{key:\"F3\",run:No,shift:jo,scope:\"editor search-panel\",preventDefault:!0},{key:\"Mod-g\",run:No,shift:jo,scope:\"editor search-panel\",preventDefault:!0},{key:\"Escape\",run:f1,scope:\"editor search-panel\"},{key:\"Mod-Shift-l\",run:GC},{key:\"Mod-Alt-g\",run:$C},{key:\"Mod-d\",run:LC,preventDefault:!0}];class UC{constructor(e){this.view=e;let t=this.query=e.state.field(xi).query.spec;this.commit=this.commit.bind(this),this.searchField=H(\"input\",{value:t.search,placeholder:qe(e,\"Find\"),\"aria-label\":qe(e,\"Find\"),class:\"cm-textfield\",name:\"search\",form:\"\",\"main-field\":\"true\",onchange:this.commit,onkeyup:this.commit}),this.replaceField=H(\"input\",{value:t.replace,placeholder:qe(e,\"Replace\"),\"aria-label\":qe(e,\"Replace\"),class:\"cm-textfield\",name:\"replace\",form:\"\",onchange:this.commit,onkeyup:this.commit}),this.caseField=H(\"input\",{type:\"checkbox\",name:\"case\",form:\"\",checked:t.caseSensitive,onchange:this.commit}),this.reField=H(\"input\",{type:\"checkbox\",name:\"re\",form:\"\",checked:t.regexp,onchange:this.commit}),this.wordField=H(\"input\",{type:\"checkbox\",name:\"word\",form:\"\",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return H(\"button\",{class:\"cm-button\",name:s,onclick:r,type:\"button\"},o)}this.dom=H(\"div\",{onkeydown:s=>this.keydown(s),class:\"cm-search\"},[this.searchField,i(\"next\",()=>No(e),[qe(e,\"next\")]),i(\"prev\",()=>jo(e),[qe(e,\"previous\")]),i(\"select\",()=>jC(e),[qe(e,\"all\")]),H(\"label\",null,[this.caseField,qe(e,\"match case\")]),H(\"label\",null,[this.reField,qe(e,\"regexp\")]),H(\"label\",null,[this.wordField,qe(e,\"by word\")]),...e.state.readOnly?[]:[H(\"br\"),this.replaceField,i(\"replace\",()=>Qp(e),[qe(e,\"replace\")]),i(\"replaceAll\",()=>HC(e),[qe(e,\"replace all\")])],H(\"button\",{name:\"close\",onclick:()=>f1(e),\"aria-label\":qe(e,\"close\"),type:\"button\"},[\"×\"])])}commit(){let e=new o1({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Xn.of(e)}))}keydown(e){yC(this.view,e,\"search-panel\")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?jo:No)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),Qp(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Xn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Ws).top}}function qe(n,e){return n.state.phrase(e)}const Lr=30,Er=/[\\s\\.,:;?!]/;function xf(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-Lr),o=Math.min(s,t+Lr),l=n.state.sliceDoc(r,o);if(r!=i.from){for(let a=0;a<Lr;a++)if(!Er.test(l[a+1])&&Er.test(l[a])){l=l.slice(a);break}}if(o!=s){for(let a=l.length-1;a>l.length-Lr;a--)if(!Er.test(l[a-1])&&Er.test(l[a])){l=l.slice(0,a);break}}return z.announce.of(`${n.state.phrase(\"current match\")}. ${l} ${n.state.phrase(\"on line\")} ${i.number}.`)}const KC=z.baseTheme({\".cm-panel.cm-search\":{padding:\"2px 6px 4px\",position:\"relative\",\"& [name=close]\":{position:\"absolute\",top:\"0\",right:\"4px\",backgroundColor:\"inherit\",border:\"none\",font:\"inherit\",padding:0,margin:0},\"& input, & button, & label\":{margin:\".2em .6em .2em 0\"},\"& input[type=checkbox]\":{marginRight:\".2em\"},\"& label\":{fontSize:\"80%\",whiteSpace:\"pre\"}},\"&light .cm-searchMatch\":{backgroundColor:\"#ffff0054\"},\"&dark .cm-searchMatch\":{backgroundColor:\"#00ffff8a\"},\"&light .cm-searchMatch-selected\":{backgroundColor:\"#ff6a0054\"},\"&dark .cm-searchMatch-selected\":{backgroundColor:\"#ff00ff8a\"}}),JC=[xi,xt.low(NC),KC];class u1{constructor(e,t,i,s){this.state=e,this.pos=t,this.explicit=i,this.view=s,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=fe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),s=t.text.slice(i-t.from,this.pos-t.from),r=s.search(p1(e,!1));return r<0?null:{from:i+r,to:this.pos,text:s.slice(r)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e==\"abort\"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function vp(n){let e=Object.keys(n).join(\"\"),t=/\\w/.test(e);return t&&(e=e.replace(/\\w/g,\"\")),`[${t?\"\\\\w\":\"\"}${e.replace(/[^\\w\\s]/g,\"\\\\$&\")}]`}function eT(n){let e=Object.create(null),t=Object.create(null);for(let{label:s}of n){e[s[0]]=!0;for(let r=1;r<s.length;r++)t[s[r]]=!0}let i=vp(e)+vp(t)+\"*$\";return[new RegExp(\"^\"+i),new RegExp(i)]}function d1(n){let e=n.map(s=>typeof s==\"string\"?{label:s}:s),[t,i]=e.every(s=>/^\\w+$/.test(s.label))?[/\\w*$/,/\\w+$/]:eT(e);return s=>{let r=s.matchBefore(i);return r||s.explicit?{from:r?r.from:s.pos,options:e,validFor:t}:null}}function tT(n,e){return t=>{for(let i=fe(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}class $p{constructor(e,t,i,s){this.completion=e,this.source=t,this.match=i,this.score=s}}function Wi(n){return n.selection.main.from}function p1(n,e){var t;let{source:i}=n,s=e&&i[0]!=\"^\",r=i[i.length-1]!=\"$\";return!s&&!r?n:new RegExp(`${s?\"^\":\"\"}(?:${i})${r?\"$\":\"\"}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?\"i\":\"\")}const wf=wt.define();function iT(n,e,t,i){let{main:s}=n.selection,r=t-s.from,o=i-s.from;return{...n.changeByRange(l=>{if(l!=s&&t!=i&&n.sliceDoc(l.from+r,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+r,to:i==s.from?l.to:l.from+o,insert:a},range:S.cursor(l.from+r+a.length)}}),scrollIntoView:!0,userEvent:\"input.complete\"}}const Pp=new WeakMap;function sT(n){if(!Array.isArray(n))return n;let e=Pp.get(n);return e||Pp.set(n,e=d1(n)),e}const Go=B.define(),Ln=B.define();class nT{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t<e.length;){let i=Me(e,t),s=ut(i);this.chars.push(i);let r=e.slice(t,t+s),o=r.toUpperCase();this.folded.push(Me(o==r?r.toLowerCase():o,0)),t+=s}this.astral=e.length!=this.chars.length}ret(e,t){return this.score=e,this.matched=t,this}match(e){if(this.pattern.length==0)return this.ret(-100,[]);if(e.length<this.pattern.length)return null;let{chars:t,folded:i,any:s,precise:r,byWord:o}=this;if(t.length==1){let y=Me(e,0),x=ut(y),v=x==e.length?0:-100;if(y!=t[0])if(y==i[0])v+=-200;else return null;return this.ret(v,[0,x])}let l=e.indexOf(this.pattern);if(l==0)return this.ret(e.length==this.pattern.length?0:-100,[0,this.pattern.length]);let a=t.length,h=0;if(l<0){for(let y=0,x=Math.min(e.length,200);y<x&&h<a;){let v=Me(e,y);(v==t[h]||v==i[h])&&(s[h++]=y),y+=ut(v)}if(h<a)return null}let c=0,f=0,u=!1,d=0,p=-1,g=-1,m=/[a-z]/.test(e),O=!0;for(let y=0,x=Math.min(e.length,200),v=0;y<x&&f<a;){let w=Me(e,y);l<0&&(c<a&&w==t[c]&&(r[c++]=y),d<a&&(w==t[d]||w==i[d]?(d==0&&(p=y),g=y+1,d++):d=0));let Q,$=w<255?w>=48&&w<=57||w>=97&&w<=122?2:w>=65&&w<=90?1:0:(Q=wc(w))!=Q.toLowerCase()?1:Q!=Q.toUpperCase()?2:0;(!y||$==1&&m||v==0&&$!=0)&&(t[f]==w||i[f]==w&&(u=!0)?o[f++]=y:o.length&&(O=!1)),v=$,y+=ut(w)}return f==a&&o[0]==0&&O?this.result(-100+(u?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(g==e.length?0:-100),[0,g]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,g]):f==a?this.result(-100+(u?-200:0)+-700+(O?0:-1100),o,e):t.length==2?null:this.result((s[0]?-700:0)+-200+-1100,s,e)}result(e,t,i){let s=[],r=0;for(let o of t){let l=o+(this.astral?ut(Me(i,o)):1);r&&s[r-1]==o?s[r-1]=l:(s[r++]=o,s[r++]=l)}return this.ret(e-i.length,s)}}class rT{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length<this.pattern.length)return null;let t=e.slice(0,this.pattern.length),i=t==this.pattern?0:t.toLowerCase()==this.folded?-200:null;return i==null?null:(this.matched=[0,t.length],this.score=i+(e.length==this.pattern.length?0:-100),this)}}const Oe=k.define({combine(n){return _t(n,{activateOnTyping:!0,activateOnCompletion:()=>!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>\"\",optionClass:()=>\"\",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:oT,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>Cp(e(i),t(i)),optionClass:(e,t)=>i=>Cp(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Cp(n,e){return n?e?n+\" \"+e:n:e}function oT(n,e,t,i,s,r){let o=n.textDirection==le.RTL,l=o,a=!1,h=\"top\",c,f,u=e.left-s.left,d=s.right-e.right,p=i.right-i.left,g=i.bottom-i.top;if(l&&u<Math.min(p,d)?l=!1:!l&&d<Math.min(p,u)&&(l=!0),p<=(l?u:d))c=Math.max(s.top,Math.min(t.top,s.bottom-g))-e.top,f=Math.min(400,l?u:d);else{a=!0,f=Math.min(400,(o?e.right:s.right-e.left)-30);let y=s.bottom-e.bottom;y>=g||y>e.top?c=t.bottom-e.top:(h=\"bottom\",c=e.bottom-t.top)}let m=(e.bottom-e.top)/r.offsetHeight,O=(e.right-e.left)/r.offsetWidth;return{style:`${h}: ${c/m}px; max-width: ${f/O}px`,class:\"cm-completionInfo-\"+(a?o?\"left-narrow\":\"right-narrow\":l?\"left\":\"right\")}}function lT(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement(\"div\");return i.classList.add(\"cm-completionIcon\"),t.type&&i.classList.add(...t.type.split(/\\s+/g).map(s=>\"cm-completionIcon-\"+s)),i.setAttribute(\"aria-hidden\",\"true\"),i},position:20}),e.push({render(t,i,s,r){let o=document.createElement(\"span\");o.className=\"cm-completionLabel\";let l=t.displayLabel||t.label,a=0;for(let h=0;h<r.length;){let c=r[h++],f=r[h++];c>a&&o.appendChild(document.createTextNode(l.slice(a,c)));let u=o.appendChild(document.createElement(\"span\"));u.appendChild(document.createTextNode(l.slice(c,f))),u.className=\"cm-completionMatchedText\",a=f}return a<l.length&&o.appendChild(document.createTextNode(l.slice(a))),o},position:50},{render(t){if(!t.detail)return null;let i=document.createElement(\"span\");return i.className=\"cm-completionDetail\",i.textContent=t.detail,i},position:80}),e.sort((t,i)=>t.position-i.position).map(t=>t.render)}function ya(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let s=Math.floor(e/t);return{from:s*t,to:(s+1)*t}}let i=Math.floor((n-e)/t);return{from:n-(i+1)*t,to:n-i*t}}class aT{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass=\"\";let s=e.state.field(t),{options:r,selected:o}=s.open,l=e.state.facet(Oe);this.optionContent=lT(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=ya(r.length,o,l.maxRenderedOptions),this.dom=document.createElement(\"div\"),this.dom.className=\"cm-tooltip-autocomplete\",this.updateTooltipClass(e.state),this.dom.addEventListener(\"mousedown\",a=>{let{options:h}=e.state.field(t).open;for(let c=a.target,f;c&&c!=this.dom;c=c.parentNode)if(c.nodeName==\"LI\"&&(f=/-(\\d+)$/.exec(c.id))&&+f[1]<h.length){this.applyCompletion(e,h[+f[1]]),a.preventDefault();return}}),this.dom.addEventListener(\"focusout\",a=>{let h=e.state.field(this.stateField,!1);h&&h.tooltip&&e.state.facet(Oe).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:Ln.of(null)})}),this.showOptions(r,s.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener(\"scroll\",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),s=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=s){let{options:r,selected:o,disabled:l}=i.open;(!s.open||s.open.options!=r)&&(this.range=ya(r.length,o,e.state.facet(Oe).maxRenderedOptions),this.showOptions(r,i.id)),this.updateSel(),l!=((t=s.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(\" \"))i&&this.dom.classList.remove(i);for(let i of t.split(\" \"))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected<this.range.from||t.selected>=this.range.to)&&(this.range=ya(t.options.length,t.selected,this.view.state.facet(Oe).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:s}=t.options[t.selected],{info:r}=s;if(!r)return;let o=typeof r==\"string\"?document.createTextNode(r):r(s);if(!o)return;\"then\"in o?o.then(l=>{l&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(l,s)}).catch(l=>Le(this.view.state,l,\"completion info\")):(this.addInfoPane(o,s),i.setAttribute(\"aria-describedby\",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement(\"div\");if(i.className=\"cm-tooltip cm-completionInfo\",i.id=\"cm-completionInfo-\"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:s,destroy:r}=e;i.appendChild(s),this.infoDestroy=r||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,s=this.range.from;i;i=i.nextSibling,s++)i.nodeName!=\"LI\"||!i.id?s--:s==e?i.hasAttribute(\"aria-selected\")||(i.setAttribute(\"aria-selected\",\"true\"),t=i):i.hasAttribute(\"aria-selected\")&&(i.removeAttribute(\"aria-selected\"),i.removeAttribute(\"aria-describedby\"));return t&&cT(this.list,t),t}measureInfo(){let e=this.dom.querySelector(\"[aria-selected]\");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),s=e.getBoundingClientRect(),r=this.space;if(!r){let o=this.dom.ownerDocument.documentElement;r={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return s.top>Math.min(r.bottom,t.bottom)-10||s.bottom<Math.max(r.top,t.top)+10?null:this.view.state.facet(Oe).positionInfo(this.view,t,s,i,r,this.dom)}placeInfo(e){this.info&&(e?(e.style&&(this.info.style.cssText=e.style),this.info.className=\"cm-tooltip cm-completionInfo \"+(e.class||\"\")):this.info.style.cssText=\"top: -1e6px\")}createListBox(e,t,i){const s=document.createElement(\"ul\");s.id=t,s.setAttribute(\"role\",\"listbox\"),s.setAttribute(\"aria-expanded\",\"true\"),s.setAttribute(\"aria-label\",this.view.state.phrase(\"Completions\")),s.addEventListener(\"mousedown\",o=>{o.target==s&&o.preventDefault()});let r=null;for(let o=i.from;o<i.to;o++){let{completion:l,match:a}=e[o],{section:h}=l;if(h){let u=typeof h==\"string\"?h:h.name;if(u!=r&&(o>i.from||i.from==0))if(r=u,typeof h!=\"string\"&&h.header)s.appendChild(h.header(h));else{let d=s.appendChild(document.createElement(\"completion-section\"));d.textContent=u}}const c=s.appendChild(document.createElement(\"li\"));c.id=t+\"-\"+o,c.setAttribute(\"role\",\"option\");let f=this.optionClass(l);f&&(c.className=f);for(let u of this.optionContent){let d=u(l,this.view.state,this.view,a);d&&c.appendChild(d)}}return i.from&&s.classList.add(\"cm-completionListIncompleteTop\"),i.to<e.length&&s.classList.add(\"cm-completionListIncompleteBottom\"),s}destroyInfo(){this.info&&(this.infoDestroy&&this.infoDestroy(),this.info.remove(),this.info=null)}destroy(){this.destroyInfo()}}function hT(n,e){return t=>new aT(t,n,e)}function cT(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),s=t.height/n.offsetHeight;i.top<t.top?n.scrollTop-=(t.top-i.top)/s:i.bottom>t.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/s)}function Tp(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function fT(n,e){let t=[],i=null,s=null,r=c=>{t.push(c);let{section:f}=c.completion;if(f){i||(i=[]);let u=typeof f==\"string\"?f:f.name;i.some(d=>d.name==u)||i.push(typeof f==\"string\"?{name:u}:f)}},o=e.facet(Oe);for(let c of n)if(c.hasResult()){let f=c.result.getMatch;if(c.result.filter===!1)for(let u of c.result.options)r(new $p(u,c.source,f?f(u):[],1e9-t.length));else{let u=e.sliceDoc(c.from,c.to),d,p=o.filterStrict?new rT(u):new nT(u);for(let g of c.result.options)if(d=p.match(g.label)){let m=g.displayLabel?f?f(g,d.matched):[]:d.matched,O=d.score+(g.boost||0);if(r(new $p(g,c.source,m,O)),typeof g.section==\"object\"&&g.section.rank===\"dynamic\"){let{name:y}=g.section;s||(s=Object.create(null)),s[y]=Math.max(O,s[y]||-1e9)}}}}if(i){let c=Object.create(null),f=0,u=(d,p)=>(d.rank===\"dynamic\"&&p.rank===\"dynamic\"?s[p.name]-s[d.name]:0)||(typeof d.rank==\"number\"?d.rank:1e9)-(typeof p.rank==\"number\"?p.rank:1e9)||(d.name<p.name?-1:1);for(let d of i.sort(u))f-=1e5,c[d.name]=f;for(let d of t){let{section:p}=d.completion;p&&(d.score+=c[typeof p==\"string\"?p:p.name])}}let l=[],a=null,h=o.compareCompletions;for(let c of t.sort((f,u)=>u.score-f.score||h(f.completion,u.completion))){let f=c.completion;!a||a.label!=f.label||a.detail!=f.detail||a.type!=null&&f.type!=null&&a.type!=f.type||a.apply!=f.apply||a.boost!=f.boost?l.push(c):Tp(c.completion)>Tp(a)&&(l[l.length-1]=c),a=c.completion}return l}class es{constructor(e,t,i,s,r,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=s,this.selected=r,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new es(this.options,Mp(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,s,r,o){if(s&&!o&&e.some(h=>h.isPending))return s.setDisabled();let l=fT(e,t);if(!l.length)return s&&e.some(h=>h.isPending)?s.setDisabled():null;let a=t.facet(Oe).selectOnOpen?0:-1;if(s&&s.selected!=a&&s.selected!=-1){let h=s.options[s.selected].completion;for(let c=0;c<l.length;c++)if(l[c].completion==h){a=c;break}}return new es(l,Mp(i,a),{pos:e.reduce((h,c)=>c.hasResult()?Math.min(h,c.from):h,1e8),create:OT,above:r.aboveCursor},s?s.timestamp:Date.now(),a,!1)}map(e){return new es(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new es(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Ho{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new Ho(gT,\"cm-ac-\"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(Oe),r=(i.override||t.languageDataAt(\"autocomplete\",Wi(t)).map(sT)).map(a=>(this.active.find(c=>c.source==a)||new st(a,this.active.some(c=>c.state!=0)?1:0)).update(e,i));r.length==this.active.length&&r.every((a,h)=>a==this.active[h])&&(r=this.active);let o=this.open,l=e.effects.some(a=>a.is(kf));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||r.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!uT(r,this.active)||l?o=es.build(r,t,this.id,o,i,l):o&&o.disabled&&!r.some(a=>a.isPending)&&(o=null),!o&&r.every(a=>!a.isPending)&&r.some(a=>a.hasResult())&&(r=r.map(a=>a.hasResult()?new st(a.source,0):a));for(let a of e.effects)a.is(m1)&&(o=o&&o.setSelected(a.value,this.id));return r==this.active&&o==this.open?this:new Ho(r,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?dT:pT}}function uT(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t<n.length&&!n[t].hasResult();)t++;for(;i<e.length&&!e[i].hasResult();)i++;let s=t==n.length,r=i==e.length;if(s||r)return s==r;if(n[t++].result!=e[i++].result)return!1}}const dT={\"aria-autocomplete\":\"list\"},pT={};function Mp(n,e){let t={\"aria-autocomplete\":\"list\",\"aria-haspopup\":\"listbox\",\"aria-controls\":n};return e>-1&&(t[\"aria-activedescendant\"]=n+\"-\"+e),t}const gT=[];function g1(n,e){if(n.isUserEvent(\"input.complete\")){let i=n.annotation(wf);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent(\"input.type\");return t&&e.activateOnTyping?5:t?1:n.isUserEvent(\"delete.backward\")?2:n.selection?8:n.docChanged?16:0}class st{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=g1(e,t),s=this;(i&8||i&16&&this.touches(e))&&(s=new st(s.source,0)),i&4&&s.state==0&&(s=new st(this.source,1)),s=s.updateFor(e,i);for(let r of e.effects)if(r.is(Go))s=new st(s.source,1,r.value);else if(r.is(Ln))s=new st(s.source,0);else if(r.is(kf))for(let o of r.value)o.source==s.source&&(s=o);return s}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(Wi(e.state))}}class gs extends st{constructor(e,t,i,s,r,o){super(e,3,t),this.limit=i,this.result=s,this.from=r,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let s=this.result;s.map&&!e.changes.empty&&(s=s.map(s,e.changes));let r=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=Wi(e.state);if(l>o||!s||t&2&&(Wi(e.startState)==this.from||l<this.limit))return new st(this.source,t&4?1:0);let a=e.changes.mapPos(this.limit);return mT(s.validFor,e.state,r,o)?new gs(this.source,this.explicit,a,s,r,o):s.update&&(s=s.update(s,r,o,new u1(e.state,l,!1)))?new gs(this.source,this.explicit,a,s,s.from,(i=s.to)!==null&&i!==void 0?i:Wi(e.state)):new st(this.source,1,this.explicit)}map(e){return e.empty?this:(this.result.map?this.result.map(this.result,e):this.result)?new gs(this.source,this.explicit,e.mapPos(this.limit),this.result,e.mapPos(this.from),e.mapPos(this.to,1)):new st(this.source,0)}touches(e){return e.changes.touchesRange(this.from,this.to)}}function mT(n,e,t,i){if(!n)return!1;let s=e.sliceDoc(t,i);return typeof n==\"function\"?n(s,t,i,e):p1(n,!0).test(s)}const kf=B.define({map(n,e){return n.map(t=>t.map(e))}}),m1=B.define(),Be=Se.define({create(){return Ho.start()},update(n,e){return n.update(e)},provide:n=>[Wc.from(n,e=>e.tooltip),D.contentAttributes.from(n,e=>e.attrs)]});function Qf(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(Be).active.find(s=>s.source==e.source);return i instanceof gs?(typeof t==\"string\"?n.dispatch({...iT(n.state,t,i.from,i.to),annotations:wf.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const OT=hT(Be,Qf);function Wr(n,e=\"option\"){return t=>{let i=t.state.field(Be,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp<t.state.facet(Oe).interactionDelay)return!1;let s=1,r;e==\"page\"&&(r=Gm(t,i.open.tooltip))&&(s=Math.max(2,Math.floor(r.dom.offsetHeight/r.dom.querySelector(\"li\").offsetHeight)-1));let{length:o}=i.open.options,l=i.open.selected>-1?i.open.selected+s*(n?1:-1):n?0:o-1;return l<0?l=e==\"page\"?0:o-1:l>=o&&(l=e==\"page\"?o-1:0),t.dispatch({effects:m1.of(l)}),!0}}const bT=n=>{let e=n.state.field(Be,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestamp<n.state.facet(Oe).interactionDelay?!1:Qf(n,e.open.options[e.open.selected])},xa=n=>n.state.field(Be,!1)?(n.dispatch({effects:Go.of(!0)}),!0):!1,ST=n=>{let e=n.state.field(Be,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:Ln.of(null)}),!0)};class yT{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const xT=50,wT=1e3,kT=Re.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(Be).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(Be),t=n.state.facet(Oe);if(!n.selectionSet&&!n.docChanged&&n.startState.field(Be)==e)return;let i=n.transactions.some(r=>{let o=g1(r,t);return o&8||(r.selection||r.docChanged)&&!(o&3)});for(let r=0;r<this.running.length;r++){let o=this.running[r];if(i||o.context.abortOnDocChange&&n.docChanged||o.updates.length+n.transactions.length>xT&&Date.now()-o.time>wT){for(let l of o.context.abortListeners)try{l()}catch(a){Le(this.view.state,a)}o.context.abortListeners=null,this.running.splice(r--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(r=>r.effects.some(o=>o.is(Go)))&&(this.pendingStart=!0);let s=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(r=>r.isPending&&!this.running.some(o=>o.active.source==r.source))?setTimeout(()=>this.startUpdate(),s):-1,this.composing!=0)for(let r of n.transactions)r.isUserEvent(\"input.type\")?this.composing=2:this.composing==2&&r.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(Be);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Oe).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=Wi(e),i=new u1(e,t,n.explicit,this.view),s=new yT(n,i);this.running.push(s),Promise.resolve(n.source(i)).then(r=>{s.context.aborted||(s.done=r||null,this.scheduleAccept())},r=>{this.view.dispatch({effects:Ln.of(null)}),Le(this.view.state,r)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Oe).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Oe),i=this.view.state.field(Be);for(let s=0;s<this.running.length;s++){let r=this.running[s];if(r.done===void 0)continue;if(this.running.splice(s--,1),r.done){let l=Wi(r.updates.length?r.updates[0].startState:this.view.state),a=Math.min(l,r.done.from+(r.active.explicit?0:1)),h=new gs(r.active.source,r.active.explicit,a,r.done,r.done.from,(n=r.done.to)!==null&&n!==void 0?n:l);for(let c of r.updates)h=h.update(c,t);if(h.hasResult()){e.push(h);continue}}let o=i.active.find(l=>l.source==r.active.source);if(o&&o.isPending)if(r.done==null){let l=new st(r.active.source,0);for(let a of r.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:kf.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(Be,!1);if(e&&e.tooltip&&this.view.state.facet(Oe).closeOnBlur){let t=e.open&&Gm(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Ln.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Go.of(!1)}),20),this.composing=0}}}),QT=typeof navigator==\"object\"&&/Win/.test(navigator.platform),vT=xt.highest(D.domEventHandlers({keydown(n,e){let t=e.state.field(Be,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(QT&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],s=t.active.find(o=>o.source==i.source),r=i.completion.commitCharacters||s.result.commitCharacters;return r&&r.indexOf(n.key)>-1&&Qf(e,i),!1}})),O1=D.baseTheme({\".cm-tooltip.cm-tooltip-autocomplete\":{\"& > ul\":{fontFamily:\"monospace\",whiteSpace:\"nowrap\",overflow:\"hidden auto\",maxWidth_fallback:\"700px\",maxWidth:\"min(700px, 95vw)\",minWidth:\"250px\",maxHeight:\"10em\",height:\"100%\",listStyle:\"none\",margin:0,padding:0,\"& > li, & > completion-section\":{padding:\"1px 3px\",lineHeight:1.2},\"& > li\":{overflowX:\"hidden\",textOverflow:\"ellipsis\",cursor:\"pointer\"},\"& > completion-section\":{display:\"list-item\",borderBottom:\"1px solid silver\",paddingLeft:\"0.5em\",opacity:.7}}},\"&light .cm-tooltip-autocomplete ul li[aria-selected]\":{background:\"#17c\",color:\"white\"},\"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\":{background:\"#777\"},\"&dark .cm-tooltip-autocomplete ul li[aria-selected]\":{background:\"#347\",color:\"white\"},\"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\":{background:\"#444\"},\".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\":{content:'\"···\"',opacity:.5,display:\"block\",textAlign:\"center\"},\".cm-tooltip.cm-completionInfo\":{position:\"absolute\",padding:\"3px 9px\",width:\"max-content\",maxWidth:\"400px\",boxSizing:\"border-box\",whiteSpace:\"pre-line\"},\".cm-completionInfo.cm-completionInfo-left\":{right:\"100%\"},\".cm-completionInfo.cm-completionInfo-right\":{left:\"100%\"},\".cm-completionInfo.cm-completionInfo-left-narrow\":{right:\"30px\"},\".cm-completionInfo.cm-completionInfo-right-narrow\":{left:\"30px\"},\"&light .cm-snippetField\":{backgroundColor:\"#00000022\"},\"&dark .cm-snippetField\":{backgroundColor:\"#ffffff22\"},\".cm-snippetFieldPosition\":{verticalAlign:\"text-top\",width:0,height:\"1.15em\",display:\"inline-block\",margin:\"0 -0.7px -.7em\",borderLeft:\"1.4px dotted #888\"},\".cm-completionMatchedText\":{textDecoration:\"underline\"},\".cm-completionDetail\":{marginLeft:\"0.5em\",fontStyle:\"italic\"},\".cm-completionIcon\":{fontSize:\"90%\",width:\".8em\",display:\"inline-block\",textAlign:\"center\",paddingRight:\".6em\",opacity:\"0.6\",boxSizing:\"content-box\"},\".cm-completionIcon-function, .cm-completionIcon-method\":{\"&:after\":{content:\"'ƒ'\"}},\".cm-completionIcon-class\":{\"&:after\":{content:\"'○'\"}},\".cm-completionIcon-interface\":{\"&:after\":{content:\"'◌'\"}},\".cm-completionIcon-variable\":{\"&:after\":{content:\"'𝑥'\"}},\".cm-completionIcon-constant\":{\"&:after\":{content:\"'𝐶'\"}},\".cm-completionIcon-type\":{\"&:after\":{content:\"'𝑡'\"}},\".cm-completionIcon-enum\":{\"&:after\":{content:\"'∪'\"}},\".cm-completionIcon-property\":{\"&:after\":{content:\"'□'\"}},\".cm-completionIcon-keyword\":{\"&:after\":{content:\"'🔑︎'\"}},\".cm-completionIcon-namespace\":{\"&:after\":{content:\"'▢'\"}},\".cm-completionIcon-text\":{\"&:after\":{content:\"'abc'\",fontSize:\"50%\",verticalAlign:\"middle\"}}});class $T{constructor(e,t,i,s){this.field=e,this.line=t,this.from=i,this.to=s}}class vf{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,te.TrackDel),i=e.mapPos(this.to,1,te.TrackDel);return t==null||i==null?null:new vf(this.field,t,i)}}class $f{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],s=[t],r=e.doc.lineAt(t),o=/^\\s*/.exec(r.text)[0];for(let a of this.lines){if(i.length){let h=o,c=/^\\t*/.exec(a)[0].length;for(let f=0;f<c;f++)h+=e.facet(cl);s.push(t+h.length-c),a=h+a.slice(c)}i.push(a),t+=a.length+1}let l=this.fieldPositions.map(a=>new vf(a.field,s[a.line]+a.from,s[a.line]+a.to));return{text:i,ranges:l}}static parse(e){let t=[],i=[],s=[],r;for(let o of e.split(/\\r\\n?|\\n/)){for(;r=/[#$]\\{(?:(\\d+)(?::([^{}]*))?|((?:\\\\[{}]|[^{}])*))\\}/.exec(o);){let l=r[1]?+r[1]:null,a=r[2]||r[3]||\"\",h=-1,c=a.replace(/\\\\[{}]/g,f=>f[1]);for(let f=0;f<t.length;f++)(l!=null?t[f].seq==l:c&&t[f].name==c)&&(h=f);if(h<0){let f=0;for(;f<t.length&&(l==null||t[f].seq!=null&&t[f].seq<l);)f++;t.splice(f,0,{seq:l,name:c}),h=f;for(let u of s)u.field>=h&&u.field++}for(let f of s)if(f.line==i.length&&f.from>r.index){let u=r[2]?3+(r[1]||\"\").length:2;f.from-=u,f.to-=u}s.push(new $T(h,i.length,r.index,r.index+c.length)),o=o.slice(0,r.index)+a+o.slice(r.index+r[0].length)}o=o.replace(/\\\\([{}])/g,(l,a,h)=>{for(let c of s)c.line==i.length&&c.from>h&&(c.from--,c.to--);return a}),i.push(o)}return new $f(i,s)}}let PT=E.widget({widget:new class extends Yt{toDOM(){let n=document.createElement(\"span\");return n.className=\"cm-snippetFieldPosition\",n}ignoreEvent(){return!1}}}),CT=E.mark({class:\"cm-snippetField\"});class Vs{constructor(e,t){this.ranges=e,this.active=t,this.deco=E.set(e.map(i=>(i.from==i.to?PT:CT).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let s=i.map(e);if(!s)return null;t.push(s)}return new Vs(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}}const er=B.define({map(n,e){return n&&n.map(e)}}),TT=B.define(),En=Se.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(er))return t.value;if(t.is(TT)&&n)return new Vs(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>D.decorations.from(n,e=>e?e.deco:E.none)});function Pf(n,e){return S.create(n.filter(t=>t.field==e).map(t=>S.range(t.from,t.to)))}function MT(n){let e=$f.parse(n);return(t,i,s,r)=>{let{text:o,ranges:l}=e.instantiate(t.state,s),{main:a}=t.state.selection,h={changes:{from:s,to:r==a.from?a.to:r,insert:Z.of(o)},scrollIntoView:!0,annotations:i?[wf.of(i),ce.userEvent.of(\"input.complete\")]:void 0};if(l.length&&(h.selection=Pf(l,0)),l.some(c=>c.field>0)){let c=new Vs(l,0),f=h.effects=[er.of(c)];t.state.field(En,!1)===void 0&&f.push(B.appendConfig.of([En,BT,XT,O1]))}t.dispatch(t.state.update(h))}}function b1(n){return({state:e,dispatch:t})=>{let i=e.field(En,!1);if(!i||n<0&&i.active==0)return!1;let s=i.active+n,r=n>0&&!i.ranges.some(o=>o.field==s+n);return t(e.update({selection:Pf(i.ranges,s),effects:er.of(r?null:new Vs(i.ranges,s)),scrollIntoView:!0})),!0}}const AT=({state:n,dispatch:e})=>n.field(En,!1)?(e(n.update({effects:er.of(null)})),!0):!1,RT=b1(1),DT=b1(-1),ZT=[{key:\"Tab\",run:RT,shift:DT},{key:\"Escape\",run:AT}],Ap=k.define({combine(n){return n.length?n[0]:ZT}}),BT=xt.highest(_n.compute([Ap],n=>n.facet(Ap)));function Ze(n,e){return{...e,apply:MT(n)}}const XT=D.domEventHandlers({mousedown(n,e){let t=e.state.field(En,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let s=t.ranges.find(r=>r.from<=i&&r.to>=i);return!s||s.field==t.active?!1:(e.dispatch({selection:Pf(t.ranges,s.field),effects:er.of(t.ranges.some(r=>r.field>s.field)?new Vs(t.ranges,s.field):null),scrollIntoView:!0}),!0)}}),Wn={brackets:[\"(\",\"[\",\"{\",\"'\",'\"'],before:\")]}:;>\",stringPrefixes:[]},Ei=B.define({map(n,e){let t=e.mapPos(n,-1,te.TrackAfter);return t??void 0}}),Cf=new class extends Ve{};Cf.startSide=1;Cf.endSide=-1;const S1=Se.define({create(){return M.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(Ei)&&(n=n.update({add:[Cf.range(t.value,t.value+1)]}));return n}});function LT(){return[WT,S1]}const wa=\"()[]{}<>«»»«［］｛｝\";function y1(n){for(let e=0;e<wa.length;e+=2)if(wa.charCodeAt(e)==n)return wa.charAt(e+1);return wc(n<128?n:n+1)}function x1(n,e){return n.languageDataAt(\"closeBrackets\",e)[0]||Wn}const ET=typeof navigator==\"object\"&&/Android\\b/.test(navigator.userAgent),WT=D.inputHandler.of((n,e,t,i)=>{if((ET?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let s=n.state.selection.main;if(i.length>2||i.length==2&&ut(Me(i,0))==1||e!=s.from||t!=s.to)return!1;let r=qT(n.state,i);return r?(n.dispatch(r),!0):!1}),VT=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=x1(n,n.selection.main.head).brackets||Wn.brackets,s=null,r=n.changeByRange(o=>{if(o.empty){let l=IT(n.doc,o.head);for(let a of i)if(a==l&&Al(n.doc,o.head)==y1(Me(a,0)))return{changes:{from:o.head-a.length,to:o.head+a.length},range:S.cursor(o.head-a.length)}}return{range:s=o}});return s||e(n.update(r,{scrollIntoView:!0,userEvent:\"delete.backward\"})),!s},zT=[{key:\"Backspace\",run:VT}];function qT(n,e){let t=x1(n,n.selection.main.head),i=t.brackets||Wn.brackets;for(let s of i){let r=y1(Me(s,0));if(e==s)return r==s?NT(n,s,i.indexOf(s+s+s)>-1,t):_T(n,s,r,t.before||Wn.before);if(e==r&&w1(n,n.selection.main.from))return YT(n,s,r)}return null}function w1(n,e){let t=!1;return n.field(S1).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function Al(n,e){let t=n.sliceString(e,e+2);return t.slice(0,ut(Me(t,0)))}function IT(n,e){let t=n.sliceString(e-2,e);return ut(Me(t,0))==t.length?t:t.slice(1)}function _T(n,e,t,i){let s=null,r=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:Ei.of(o.to+e.length),range:S.range(o.anchor+e.length,o.head+e.length)};let l=Al(n.doc,o.head);return!l||/\\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:Ei.of(o.head+e.length),range:S.cursor(o.head+e.length)}:{range:s=o}});return s?null:n.update(r,{scrollIntoView:!0,userEvent:\"input.type\"})}function YT(n,e,t){let i=null,s=n.changeByRange(r=>r.empty&&Al(n.doc,r.head)==t?{changes:{from:r.head,to:r.head+t.length,insert:t},range:S.cursor(r.head+t.length)}:i={range:r});return i?null:n.update(s,{scrollIntoView:!0,userEvent:\"input.type\"})}function NT(n,e,t,i){let s=i.stringPrefixes||Wn.stringPrefixes,r=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:Ei.of(l.to+e.length),range:S.range(l.anchor+e.length,l.head+e.length)};let a=l.head,h=Al(n.doc,a),c;if(h==e){if(Rp(n,a))return{changes:{insert:e+e,from:a},effects:Ei.of(a+e.length),range:S.cursor(a+e.length)};if(w1(n,a)){let u=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+u.length,insert:u},range:S.cursor(a+u.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(c=Dp(n,a-2*e.length,s))>-1&&Rp(n,c))return{changes:{insert:e+e+e+e,from:a},effects:Ei.of(a+e.length),range:S.cursor(a+e.length)};if(n.charCategorizer(a)(h)!=oe.Word&&Dp(n,a,s)>-1&&!jT(n,a,e,s))return{changes:{insert:e+e,from:a},effects:Ei.of(a+e.length),range:S.cursor(a+e.length)}}return{range:r=l}});return r?null:n.update(o,{scrollIntoView:!0,userEvent:\"input.type\"})}function Rp(n,e){let t=fe(n).resolveInner(e+1);return t.parent&&t.from==e}function jT(n,e,t,i){let s=fe(n).resolveInner(e,-1),r=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(s.from,Math.min(s.to,s.from+t.length+r)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let c=s.firstChild;for(;c&&c.from==s.from&&c.to-c.from>t.length+a;){if(n.sliceDoc(c.to-t.length,c.to)==t)return!1;c=c.firstChild}return!0}let h=s.to==e&&s.parent;if(!h)break;s=h}return!1}function Dp(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=oe.Word)return e;for(let s of t){let r=e-s.length;if(n.sliceDoc(r,e)==s&&i(n.sliceDoc(r-1,r))!=oe.Word)return r}return-1}function GT(n={}){return[vT,Be,Oe.of(n),kT,HT,O1]}const k1=[{key:\"Ctrl-Space\",run:xa},{mac:\"Alt-`\",run:xa},{mac:\"Alt-i\",run:xa},{key:\"Escape\",run:ST},{key:\"ArrowDown\",run:Wr(!0)},{key:\"ArrowUp\",run:Wr(!1)},{key:\"PageDown\",run:Wr(!0,\"page\")},{key:\"PageUp\",run:Wr(!1,\"page\")},{key:\"Enter\",run:bT}],HT=xt.highest(_n.computeN([Oe],n=>n.facet(Oe).defaultKeymap?[k1]:[]));class Zp{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class Bi{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(Vn).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new ai,l=[],a=0,h=i.doc.iter(),c=0,f=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!l.length)break;let g,m;if(l.length)g=a,m=l.reduce((x,v)=>Math.min(x,v.to),p&&p.from>g?p.from:1e8);else{if(g=p.from,g>f)break;m=p.to,l.push(p),d++}for(;d<r.length;){let x=r[d];if(x.from==g&&(x.to>x.from||x.to==g))l.push(x),d++,m=Math.min(x.to,m);else{m=Math.min(x.from,m);break}}m=Math.min(m,f);let O=!1;if(l.some(x=>x.from==g&&(x.to==m||m==f))&&(O=g==m,!O&&m-g<10)){let x=g-(c+h.value.length);x>0&&(h.next(x),c=g);for(let v=g;;){if(v>=m){O=!0;break}if(!h.lineBreak&&c+h.value.length>v)break;v=c+h.value.length,c+=h.value.length,h.next()}}let y=a2(l);if(O)o.add(g,g,E.widget({widget:new n2(y),diagnostics:l.slice()}));else{let x=l.reduce((v,w)=>w.markClass?v+\" \"+w.markClass:v,\"\");o.add(g,m,E.mark({class:\"cm-lintRange cm-lintRange-\"+y+x,diagnostics:l.slice(),inclusiveEnd:l.some(v=>v.to>m)}))}if(a=m,a==f)break;for(let x=0;x<l.length;x++)l[x].to<=a&&l.splice(x--,1)}let u=o.finish();return new Bi(u,t,Ds(u))}}function Ds(n,e=null,t=0){let i=null;return n.between(t,1e9,(s,r,{spec:o})=>{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new Zp(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new Zp(i.from,r,i.diagnostic)}}),i}function FT(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(Vn).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Q1))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function UT(n,e){return n.field(je,!1)?e:e.concat(B.appendConfig.of(h2))}const Q1=B.define(),Tf=B.define(),v1=B.define(),je=Se.define({create(){return new Bi(E.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Ds(t,n.selected.diagnostic,r)||Ds(t,null,r)}!t.size&&s&&e.state.facet(Vn).autoPanel&&(s=null),n=new Bi(t,s,i)}for(let t of e.effects)if(t.is(Q1)){let i=e.state.facet(Vn).autoPanel?t.value.length?zn.open:null:n.panel;n=Bi.init(t.value,i,e.state)}else t.is(Tf)?n=new Bi(n.diagnostics,t.value?zn.open:null,n.selected):t.is(v1)&&(n=new Bi(n.diagnostics,n.panel,t.value));return n},provide:n=>[yh.from(n,e=>e.panel),D.decorations.from(n,e=>e.diagnostics)]}),KT=E.mark({class:\"cm-lintRange cm-lintRange-active\"});function JT(n,e,t){let{diagnostics:i}=n.state.field(je),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(a,h,{spec:c})=>{if(e>=a&&e<=h&&(a==h||(e>a||t>0)&&(e<h||t<0)))return s=c.diagnostics,r=a,o=h,!1});let l=n.state.facet(Vn).tooltipFilter;return s&&l&&(s=l(s,n.state)),s?{pos:r,end:o,above:n.state.doc.lineAt(r).to<o,create(){return{dom:e2(n,s)}}}:null}function e2(n,e){return H(\"ul\",{class:\"cm-tooltip-lint\"},e.map(t=>P1(n,t,!1)))}const t2=n=>{let e=n.state.field(je,!1);(!e||!e.panel)&&n.dispatch({effects:UT(n.state,[Tf.of(!0)])});let t=uw(n,zn.open);return t&&t.dom.querySelector(\".cm-panel-lint ul\").focus(),!0},Bp=n=>{let e=n.state.field(je,!1);return!e||!e.panel?!1:(n.dispatch({effects:Tf.of(!1)}),!0)},i2=n=>{let e=n.state.field(je,!1);if(!e)return!1;let t=n.state.selection.main,i=e.diagnostics.iter(t.to+1);return!i.value&&(i=e.diagnostics.iter(0),!i.value||i.from==t.from&&i.to==t.to)?!1:(n.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)},s2=[{key:\"Mod-Shift-m\",run:t2,preventDefault:!0},{key:\"F8\",run:i2}],Vn=k.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),..._t(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:Xp,tooltipFilter:Xp,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function Xp(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function $1(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;i<t.length;i++){let s=t[i];if(/[a-zA-Z]/.test(s)&&!e.some(r=>r.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push(\"\")}return e}function P1(n,e,t){var i;let s=t?$1(e.actions):[];return H(\"li\",{class:\"cm-diagnostic cm-diagnostic-\"+e.severity},H(\"span\",{class:\"cm-diagnosticText\"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let l=!1,a=d=>{if(d.preventDefault(),l)return;l=!0;let p=Ds(n.state.field(je).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:h}=r,c=s[o]?h.indexOf(s[o]):-1,f=c<0?h:[h.slice(0,c),H(\"u\",h.slice(c,c+1)),h.slice(c+1)],u=r.markClass?\" \"+r.markClass:\"\";return H(\"button\",{type:\"button\",class:\"cm-diagnosticAction\"+u,onclick:a,onmousedown:a,\"aria-label\":` Action: ${h}${c<0?\"\":` (access key \"${s[o]})\"`}.`},f)}),e.source&&H(\"div\",{class:\"cm-diagnosticSource\"},e.source))}class n2 extends Yt{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return H(\"span\",{class:\"cm-lintPoint cm-lintPoint-\"+this.sev})}}class Lp{constructor(e,t){this.diagnostic=t,this.id=\"item_\"+Math.floor(Math.random()*4294967295).toString(16),this.dom=P1(e,t,!0),this.dom.id=this.id,this.dom.setAttribute(\"role\",\"option\")}}class zn{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)Bp(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=$1(r.actions);for(let l=0;l<o.length;l++)if(o[l].toUpperCase().charCodeAt(0)==s.keyCode){let a=Ds(this.view.state.field(je).diagnostics,r);a&&r.actions[l].apply(e,a.from,a.to)}}else return;s.preventDefault()}},i=s=>{for(let r=0;r<this.items.length;r++)this.items[r].dom.contains(s.target)&&this.moveSelection(r)};this.list=H(\"ul\",{tabIndex:0,role:\"listbox\",\"aria-label\":this.view.state.phrase(\"Diagnostics\"),onkeydown:t,onclick:i}),this.dom=H(\"div\",{class:\"cm-panel-lint\"},this.list,H(\"button\",{type:\"button\",name:\"close\",\"aria-label\":this.view.state.phrase(\"close\"),onclick:()=>Bp(this.view)},\"×\")),this.update()}get selectedIndex(){let e=this.view.state.field(je).selected;if(!e)return-1;for(let t=0;t<this.items.length;t++)if(this.items[t].diagnostic==e.diagnostic)return t;return-1}update(){let{diagnostics:e,selected:t}=this.view.state.field(je),i=0,s=!1,r=null,o=new Set;for(e.between(0,this.view.state.doc.length,(l,a,{spec:h})=>{for(let c of h.diagnostics){if(o.has(c))continue;o.add(c);let f=-1,u;for(let d=i;d<this.items.length;d++)if(this.items[d].diagnostic==c){f=d;break}f<0?(u=new Lp(this.view,c),this.items.splice(i,0,u),s=!0):(u=this.items[f],f>i&&(this.items.splice(i,f-i),s=!0)),t&&u.diagnostic==t.diagnostic?u.dom.hasAttribute(\"aria-selected\")||(u.dom.setAttribute(\"aria-selected\",\"true\"),r=u):u.dom.hasAttribute(\"aria-selected\")&&u.dom.removeAttribute(\"aria-selected\"),i++}});i<this.items.length&&!(this.items.length==1&&this.items[0].diagnostic.from<0);)s=!0,this.items.pop();this.items.length==0&&(this.items.push(new Lp(this.view,{from:-1,to:-1,severity:\"info\",message:this.view.state.phrase(\"No diagnostics\")})),s=!0),r?(this.list.setAttribute(\"aria-activedescendant\",r.id),this.view.requestMeasure({key:this,read:()=>({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:l,panel:a})=>{let h=a.height/this.list.offsetHeight;l.top<a.top?this.list.scrollTop-=(a.top-l.top)/h:l.bottom>a.bottom&&(this.list.scrollTop+=(l.bottom-a.bottom)/h)}})):this.selectedIndex<0&&this.list.removeAttribute(\"aria-activedescendant\"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(je),i=Ds(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:v1.of(i)})}static open(e){return new zn(e)}}function r2(n,e='viewBox=\"0 0 40 40\"'){return`url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${e}>${encodeURIComponent(n)}</svg>')`}function Vr(n){return r2(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${n}\" fill=\"none\" stroke-width=\".7\"/>`,'width=\"6\" height=\"3\"')}const o2=D.baseTheme({\".cm-diagnostic\":{padding:\"3px 6px 3px 8px\",marginLeft:\"-1px\",display:\"block\",whiteSpace:\"pre-wrap\"},\".cm-diagnostic-error\":{borderLeft:\"5px solid #d11\"},\".cm-diagnostic-warning\":{borderLeft:\"5px solid orange\"},\".cm-diagnostic-info\":{borderLeft:\"5px solid #999\"},\".cm-diagnostic-hint\":{borderLeft:\"5px solid #66d\"},\".cm-diagnosticAction\":{font:\"inherit\",border:\"none\",padding:\"2px 4px\",backgroundColor:\"#444\",color:\"white\",borderRadius:\"3px\",marginLeft:\"8px\",cursor:\"pointer\"},\".cm-diagnosticSource\":{fontSize:\"70%\",opacity:.7},\".cm-lintRange\":{backgroundPosition:\"left bottom\",backgroundRepeat:\"repeat-x\",paddingBottom:\"0.7px\"},\".cm-lintRange-error\":{backgroundImage:Vr(\"#d11\")},\".cm-lintRange-warning\":{backgroundImage:Vr(\"orange\")},\".cm-lintRange-info\":{backgroundImage:Vr(\"#999\")},\".cm-lintRange-hint\":{backgroundImage:Vr(\"#66d\")},\".cm-lintRange-active\":{backgroundColor:\"#ffdd9980\"},\".cm-tooltip-lint\":{padding:0,margin:0},\".cm-lintPoint\":{position:\"relative\",\"&:after\":{content:'\"\"',position:\"absolute\",bottom:0,left:\"-2px\",borderLeft:\"3px solid transparent\",borderRight:\"3px solid transparent\",borderBottom:\"4px solid #d11\"}},\".cm-lintPoint-warning\":{\"&:after\":{borderBottomColor:\"orange\"}},\".cm-lintPoint-info\":{\"&:after\":{borderBottomColor:\"#999\"}},\".cm-lintPoint-hint\":{\"&:after\":{borderBottomColor:\"#66d\"}},\".cm-panel.cm-panel-lint\":{position:\"relative\",\"& ul\":{maxHeight:\"100px\",overflowY:\"auto\",\"& [aria-selected]\":{backgroundColor:\"#ddd\",\"& u\":{textDecoration:\"underline\"}},\"&:focus [aria-selected]\":{background_fallback:\"#bdf\",backgroundColor:\"Highlight\",color_fallback:\"white\",color:\"HighlightText\"},\"& u\":{textDecoration:\"none\"},padding:0,margin:0},\"& [name=close]\":{position:\"absolute\",top:\"0\",right:\"2px\",background:\"inherit\",border:\"none\",font:\"inherit\",padding:0,margin:0}}});function l2(n){return n==\"error\"?4:n==\"warning\"?3:n==\"info\"?2:1}function a2(n){let e=\"hint\",t=1;for(let i of n){let s=l2(i.severity);s>t&&(t=s,e=i.severity)}return e}const h2=[je,D.decorations.compute([je],n=>{let{selected:e,panel:t}=n.field(je);return!e||!t||e.from==e.to?E.none:E.set([KT.range(e.from,e.to)])}),cw(JT,{hideOn:FT}),o2],c2=[ww(),vw(),zx(),Mv(),Sk(),Mx(),Bx(),L.allowMultipleSelections.of(!0),ok(),SO(kk,{fallback:!0}),Mk(),LT(),GT(),Jx(),iw(),jx(),TC(),_n.of([...zT,...R$,...FC,...Wv,...gk,...k1,...s2])];var Ep={};class Fo{constructor(e,t,i,s,r,o,l,a,h,c=0,f){this.p=e,this.stack=t,this.state=i,this.reducePos=s,this.pos=r,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=h,this.lookAhead=c,this.parent=f}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?\"!\"+this.score:\"\"}`}static start(e,t,i=0){let s=e.parser.context;return new Fo(e,[],t,i,i,0,[],0,s?new Wp(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,s=e&65535,{parser:r}=this.p,o=this.reducePos<this.pos-25&&this.setLookAhead(this.pos),l=r.dynamicPrecedence(s);if(l&&(this.score+=l),i==0){this.pushState(r.getGoto(this.state,s,!0),this.reducePos),s<r.minRepeatTerm&&this.storeNode(s,this.reducePos,this.reducePos,o?8:4,!0),this.reduceContext(s,this.reducePos);return}let a=this.stack.length-(i-1)*3-(e&262144?6:0),h=a?this.stack[a-2]:this.p.ranges[0].from,c=this.reducePos-h;c>=2e3&&!(!((t=this.p.parser.nodeSet.types[s])===null||t===void 0)&&t.isAnonymous)&&(h==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSize<c&&(this.p.bigReductionCount=1,this.p.lastBigReductionStart=h,this.p.lastBigReductionSize=c));let f=a?this.stack[a-1]:0,u=this.bufferBase+this.buffer.length-f;if(s<r.minRepeatTerm||e&131072){let d=r.stateFlag(this.state,1)?this.pos:this.reducePos;this.storeNode(s,h,d,u+4,!0)}if(e&262144)this.state=this.stack[a];else{let d=this.stack[a-3];this.state=r.getGoto(d,s,!0)}for(;this.stack.length>a;)this.stack.pop();this.reduceContext(s,h)}storeNode(e,t,i,s=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]<this.buffer.length+this.bufferBase)){let o=this,l=this.buffer.length;if(l==0&&o.parent&&(l=o.bufferBase-o.parent.bufferBase,o=o.parent),l>0&&o.buffer[l-4]==0&&o.buffer[l-1]>-1){if(t==i)return;if(o.buffer[l-2]>=t){o.buffer[l-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,t,i,s);else{let o=this.buffer.length;if(o>0&&(this.buffer[o-4]!=0||this.buffer[o-1]<0)){let l=!1;for(let a=o;a>0&&this.buffer[a-2]>i;a-=4)if(this.buffer[a-1]>=0){l=!0;break}if(l)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,s>4&&(s-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=s}}shift(e,t,i,s){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:o}=this.p;this.pos=s;let l=o.stateFlag(r,1);!l&&(s>i||t<=o.maxNode)&&(this.reducePos=s),this.pushState(r,l?i:Math.min(i,this.reducePos)),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,s,4)}else this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4)}apply(e,t,i,s){e&65536?this.reduce(e):this.shift(e,t,i,s)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let s=this.pos;this.reducePos=this.pos=s+e.length,this.pushState(t,s),this.buffer.push(i,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),s=e.bufferBase+t;for(;e&&s==e.bufferBase;)e=e.parent;return new Fo(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,s,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new f2(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let s=[];for(let r=0,o;r<t.length;r+=2)(o=t[r+1])!=this.state&&this.p.parser.hasAction(o,e)&&s.push(t[r],o);if(this.stack.length<120)for(let r=0;s.length<8&&r<t.length;r+=2){let o=t[r+1];s.some((l,a)=>a&1&&l==o)||s.push(t[r],o)}t=s}let i=[];for(let s=0;s<t.length&&i.length<4;s+=2){let r=t[s+1];if(r==this.state)continue;let o=this.split();o.pushState(r,this.pos),o.storeNode(0,o.pos,o.pos,4,!0),o.shiftContext(t[s],this.pos),o.reducePos=this.pos,o.score-=200,i.push(o)}return i}forceReduce(){let{parser:e}=this.p,t=e.stateSlot(this.state,5);if((t&65536)==0)return!1;if(!e.validAction(this.state,t)){let i=t>>19,s=t&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],s,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(s,r)=>{if(!t.includes(s))return t.push(s),e.allActions(s,o=>{if(!(o&393216))if(o&65536){let l=(o>>19)-r;if(l>1){let a=o&65535,h=this.stack.length-l*3;if(h>=0&&e.getGoto(this.stack[h],a,!1)>=0)return l<<19|65536|a}}else{let l=i(o,r+1);if(l!=null)return l}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t<this.stack.length;t+=3)if(this.stack[t]!=e.stack[t])return!1;return!0}get parser(){return this.p.parser}dialectEnabled(e){return this.p.parser.dialect.flags[e]}shiftContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.shift(this.curContext.context,e,this,this.p.stream.reset(t)))}reduceContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.reduce(this.curContext.context,e,this,this.p.stream.reset(t)))}emitContext(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-3)&&this.buffer.push(this.curContext.hash,this.pos,this.pos,-3)}emitLookAhead(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-4)&&this.buffer.push(this.lookAhead,this.pos,this.pos,-4)}updateContext(e){if(e!=this.curContext.context){let t=new Wp(this.curContext.tracker,e);t.hash!=this.curContext.hash&&this.emitContext(),this.curContext=t}}setLookAhead(e){return e<=this.lookAhead?!1:(this.emitLookAhead(),this.lookAhead=e,!0)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}}class Wp{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class f2{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}}class Uo{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Uo(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Uo(this.stack,this.pos,this.index)}}function an(n,e=Uint16Array){if(typeof n!=\"string\")return n;let t=null;for(let i=0,s=0;i<n.length;){let r=0;for(;;){let o=n.charCodeAt(i++),l=!1;if(o==126){r=65535;break}o>=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),r+=a,l)break;r*=46}t?t[s++]=r:t=new e(r)}return t}class io{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Vp=new io;class u2{constructor(e,t){this.input=e,this.ranges=t,this.chunk=\"\",this.chunkOff=0,this.chunk2=\"\",this.chunk2Pos=0,this.next=-1,this.token=Vp,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,s=this.rangeIndex,r=this.pos+e;for(;r<i.from;){if(!s)return null;let o=this.ranges[--s];r-=i.from-o.to,i=o}for(;t<0?r>i.to:r>=i.to;){if(s==this.ranges.length-1)return null;let o=this.ranges[++s];r+=o.from-i.to,i=o}return r}clipPos(e){if(e>=this.range.from&&e<this.range.to)return e;for(let t of this.ranges)if(t.to>e)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,s;if(t>=0&&t<this.chunk.length)i=this.pos+e,s=this.chunk.charCodeAt(t);else{let r=this.resolveOffset(e,1);if(r==null)return-1;if(i=r,i>=this.chunk2Pos&&i<this.chunk2Pos+this.chunk2.length)s=this.chunk2.charCodeAt(i-this.chunk2Pos);else{let o=this.rangeIndex,l=this.range;for(;l.to<=i;)l=this.ranges[++o];this.chunk2=this.input.chunk(this.chunk2Pos=i),i+this.chunk2.length>l.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),s=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),s}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i<this.token.start)throw new RangeError(\"Token end out of bounds\");this.token.value=e,this.token.end=i}acceptTokenTo(e,t){this.token.value=e,this.token.end=t}getChunk(){if(this.pos>=this.chunk2Pos&&this.pos<this.chunk2Pos+this.chunk2.length){let{chunk:e,chunkPos:t}=this;this.chunk=this.chunk2,this.chunkPos=this.chunk2Pos,this.chunk2=e,this.chunk2Pos=t,this.chunkOff=this.pos-this.chunkPos}else{this.chunk2=this.chunk,this.chunk2Pos=this.chunkPos;let e=this.input.chunk(this.pos),t=this.pos+e.length;this.chunk=t>this.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk=\"\",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Vp,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e<this.range.from;)this.range=this.ranges[--this.rangeIndex];for(;e>=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e<this.chunkPos+this.chunk.length?this.chunkOff=e-this.chunkPos:(this.chunk=\"\",this.chunkOff=0),this.readNext()}return this}read(e,t){if(e>=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i=\"\";for(let s of this.ranges){if(s.from>=t)break;s.to>e&&(i+=this.input.read(Math.max(s.from,e),Math.min(s.to,t)))}return i}}class ms{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;C1(this.data,e,t,this.id,i.data,i.tokenPrecTable)}}ms.prototype.contextual=ms.prototype.fallback=ms.prototype.extend=!1;class Ko{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e==\"string\"?an(e):e}token(e,t){let i=e.pos,s=0;for(;;){let r=e.next<0,o=e.resolveOffset(1,1);if(C1(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(r||s++,o==null)break;e.reset(o,e.token)}s&&(e.reset(i,e.token),e.acceptToken(this.elseToken,s))}}Ko.prototype.contextual=ms.prototype.fallback=ms.prototype.extend=!1;class Ge{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function C1(n,e,t,i,s,r){let o=0,l=1<<i,{dialect:a}=t.p.parser;e:for(;(l&n[o])!=0;){let h=n[o+1];for(let d=o+3;d<h;d+=2)if((n[d+1]&l)>0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||d2(p,e.token.value,s,r))){e.acceptToken(p);break}}let c=e.next,f=0,u=n[o+2];if(e.next<0&&u>f&&n[h+u*3-3]==65535){o=n[h+u*3-1];continue e}for(;f<u;){let d=f+u>>1,p=h+d+(d<<1),g=n[p],m=n[p+1]||65536;if(c<g)u=d;else if(c>=m)f=d+1;else{o=n[p+2],e.advance();continue e}}break}}function zp(n,e,t){for(let i=e,s;(s=n[i])!=65535;i++)if(s==t)return i-e;return-1}function d2(n,e,t,i){let s=zp(t,i,e);return s<0||zp(t,i,n)<s}const Ie=typeof process<\"u\"&&Ep&&/\\bparse\\b/.test(Ep.LOG);let ka=null;function qp(n,e,t){let i=n.cursor(j.IncludeAnonymous);for(i.moveTo(e);;)if(!(t<0?i.childBefore(e):i.childAfter(e)))for(;;){if((t<0?i.to<e:i.from>e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}class p2{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?qp(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?qp(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(e<this.nextStart)return null;for(;this.fragment&&this.safeTo<=e;)this.nextFragment();if(!this.fragment)return null;for(;;){let t=this.trees.length-1;if(t<0)return this.nextFragment(),null;let i=this.trees[t],s=this.index[t];if(s==i.children.length){this.trees.pop(),this.start.pop(),this.index.pop();continue}let r=i.children[s],o=this.start[t]+i.positions[s];if(o>e)return this.nextStart=o,null;if(r instanceof ae){if(o==e){if(o<this.safeFrom)return null;let l=o+r.length;if(l<=this.safeTo){let a=r.prop(V.lookAhead);if(!a||l+a<this.fragment.to)return r}}this.index[t]++,o+r.length>=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}}}class g2{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new io)}getActions(e){let t=0,i=null,{parser:s}=e.p,{tokenizers:r}=s,o=s.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let h=0;h<r.length;h++){if((1<<h&o)==0)continue;let c=r[h],f=this.tokens[h];if(!(i&&!c.fallback)&&((c.contextual||f.start!=e.pos||f.mask!=o||f.context!=l)&&(this.updateCachedToken(f,c,e),f.mask=o,f.context=l),f.lookAhead>f.end+25&&(a=Math.max(f.lookAhead,a)),f.value!=0)){let u=t;if(f.extended>-1&&(t=this.addActions(e,f.extended,f.end,t)),t=this.addActions(e,f.value,f.end,t),!c.extend&&(i=f,t>u))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new io,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new io,{pos:i,p:s}=e;return t.start=i,t.end=Math.min(i+1,s.stream.end),t.value=i==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(e,t,i){let s=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(s,e),i),e.value>-1){let{parser:r}=i.p;for(let o=0;o<r.specialized.length;o++)if(r.specialized[o]==e.value){let l=r.specializers[o](this.stream.read(e.start,e.end),i);if(l>=0&&i.p.parser.dialect.allows(l>>1)){(l&1)==0?e.value=l>>1:e.extended=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(s+1)}putAction(e,t,i,s){for(let r=0;r<s;r+=3)if(this.actions[r]==e)return s;return this.actions[s++]=e,this.actions[s++]=t,this.actions[s++]=i,s}addActions(e,t,i,s){let{state:r}=e,{parser:o}=e.p,{data:l}=o;for(let a=0;a<2;a++)for(let h=o.stateSlot(r,a?2:1);;h+=3){if(l[h]==65535)if(l[h+1]==1)h=Gt(l,h+2);else{s==0&&l[h+1]==2&&(s=this.putAction(Gt(l,h+2),t,i,s));break}l[h]==t&&(s=this.putAction(Gt(l,h+1),t,i,s))}return s}}class m2{constructor(e,t,i,s){this.parser=e,this.input=t,this.ranges=s,this.recovering=0,this.nextStackID=9812,this.minStackPos=0,this.reused=[],this.stoppedAt=null,this.lastBigReductionStart=-1,this.lastBigReductionSize=0,this.bigReductionCount=0,this.stream=new u2(t,s),this.tokens=new g2(e,this.stream),this.topTerm=e.top[1];let{from:r}=s[0];this.stacks=[Fo.start(this,e.top[0],r)],this.fragments=i.length&&this.stream.end-r>e.bufferLength*4?new p2(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],s,r;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;o<e.length;o++){let l=e[o];for(;;){if(this.tokens.mainToken=null,l.pos>t)i.push(l);else{if(this.advanceStack(l,i,e))continue;{s||(s=[],r=[]),s.push(l);let a=this.tokens.getMainToken(l);r.push(a.value,a.end)}}break}}if(!i.length){let o=s&&b2(s);if(o)return Ie&&console.log(\"Finish with \"+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw Ie&&s&&console.log(\"Stuck with token \"+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):\"none\")),new SyntaxError(\"No parse at \"+t);this.recovering||(this.recovering=5)}if(this.recovering&&s){let o=this.stoppedAt!=null&&s[0].pos>this.stoppedAt?s[0]:this.runRecovery(s,r,i);if(o)return Ie&&console.log(\"Force-finish \"+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o<i.length-1;o++){let l=i[o];for(let a=o+1;a<i.length;a++){let h=i[a];if(l.sameState(h)||l.buffer.length>500&&h.buffer.length>500)if((l.score-h.score||l.buffer.length-h.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&(i.sort((o,l)=>l.score-o.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let o=1;o<i.length;o++)i[o].pos<this.minStackPos&&(this.minStackPos=i[o].pos);return null}stopAt(e){if(this.stoppedAt!=null&&this.stoppedAt<e)throw new RangeError(\"Can't move stoppedAt forward\");this.stoppedAt=e}advanceStack(e,t,i){let s=e.pos,{parser:r}=this,o=Ie?this.stackID(e)+\" -> \":\"\";if(this.stoppedAt!=null&&s>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let h=e.curContext&&e.curContext.tracker.strict,c=h?e.curContext.hash:0;for(let f=this.fragments.nodeAt(s);f;){let u=this.parser.nodeSet.types[f.type.id]==f.type?r.getGoto(e.state,f.type.id):-1;if(u>-1&&f.length&&(!h||(f.prop(V.contextHash)||0)==c))return e.useNode(f,u),Ie&&console.log(o+this.stackID(e)+` (via reuse of ${r.getName(f.type.id)})`),!0;if(!(f instanceof ae)||f.children.length==0||f.positions[0]>0)break;let d=f.children[0];if(d instanceof ae&&f.positions[0]==0)f=d;else break}}let l=r.stateSlot(e.state,4);if(l>0)return e.reduce(l),Ie&&console.log(o+this.stackID(e)+` (via always-reduce ${r.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let h=0;h<a.length;){let c=a[h++],f=a[h++],u=a[h++],d=h==a.length||!i,p=d?e:e.split(),g=this.tokens.mainToken;if(p.apply(c,f,g?g.start:p.pos,u),Ie&&console.log(o+this.stackID(p)+` (via ${(c&65536)==0?\"shift\":`reduce of ${r.getName(c&65535)}`} for ${r.getName(f)} @ ${s}${p==e?\"\":\", split\"})`),d)return!0;p.pos>s?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return Ip(e,t),!0}}runRecovery(e,t,i){let s=null,r=!1;for(let o=0;o<e.length;o++){let l=e[o],a=t[o<<1],h=t[(o<<1)+1],c=Ie?this.stackID(l)+\" -> \":\"\";if(l.deadEnd&&(r||(r=!0,l.restart(),Ie&&console.log(c+this.stackID(l)+\" (restarted)\"),this.advanceFully(l,i))))continue;let f=l.split(),u=c;for(let d=0;d<10&&f.forceReduce()&&(Ie&&console.log(u+this.stackID(f)+\" (via force-reduce)\"),!this.advanceFully(f,i));d++)Ie&&(u=this.stackID(f)+\" -> \");for(let d of l.recoverByInsert(a))Ie&&console.log(c+this.stackID(d)+\" (via recover-insert)\"),this.advanceFully(d,i);this.stream.end>l.pos?(h==l.pos&&(h++,a=0),l.recoverByDelete(a,h),Ie&&console.log(c+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),Ip(l,i)):(!s||s.score<f.score)&&(s=f)}return s}stackToTree(e){return e.close(),ae.build({buffer:Uo.create(e),nodeSet:this.parser.nodeSet,topID:this.topTerm,maxBufferLength:this.parser.bufferLength,reused:this.reused,start:this.ranges[0].from,length:e.pos-this.ranges[0].from,minRepeatType:this.parser.minRepeatTerm})}stackID(e){let t=(ka||(ka=new WeakMap)).get(e);return t||ka.set(e,t=String.fromCodePoint(this.nextStackID++)),t+e}}function Ip(n,e){for(let t=0;t<e.length;t++){let i=e[t];if(i.pos==n.pos&&i.sameState(n)){e[t].score<n.score&&(e[t]=n);return}}e.push(n)}class O2{constructor(e,t,i){this.source=e,this.flags=t,this.disabled=i}allows(e){return!this.disabled||this.disabled[e]==0}}const Qa=n=>n;class T1{constructor(e){this.start=e.start,this.shift=e.shift||Qa,this.reduce=e.reduce||Qa,this.reuse=e.reuse||Qa,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}}class Zs extends sO{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(\" \");this.minRepeatTerm=t.length;for(let l=0;l<e.repeatNodeCount;l++)t.push(\"\");let i=Object.keys(e.topRules).map(l=>e.topRules[l][1]),s=[];for(let l=0;l<t.length;l++)s.push([]);function r(l,a,h){s[l].push([a,a.deserialize(String(h))])}if(e.nodeProps)for(let l of e.nodeProps){let a=l[0];typeof a==\"string\"&&(a=V[a]);for(let h=1;h<l.length;){let c=l[h++];if(c>=0)r(c,a,l[h++]);else{let f=l[h+-c];for(let u=-c;u>0;u--)r(l[h++],a,f);h++}}}this.nodeSet=new Vc(t.map((l,a)=>De.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:s[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=Km;let o=an(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;l<this.specializerSpecs.length;l++)this.specialized[l]=this.specializerSpecs[l].term;this.specializers=this.specializerSpecs.map(_p),this.states=an(e.states,Uint32Array),this.data=an(e.stateData),this.goto=an(e.goto),this.maxTerm=e.maxTerm,this.tokenizers=e.tokenizers.map(l=>typeof l==\"number\"?new ms(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let s=new m2(this,e,t,i);for(let r of this.wrappers)s=r(s,e,t,i);return s}getGoto(e,t,i=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let o=s[r++],l=o&1,a=s[r++];if(l&&i)return a;for(let h=r+(o>>1);r<h;r++)if(s[r]==e)return a;if(l)return-1}}hasAction(e,t){let i=this.data;for(let s=0;s<2;s++)for(let r=this.stateSlot(e,s?2:1),o;;r+=3){if((o=i[r])==65535)if(i[r+1]==1)o=i[r=Gt(i,r+2)];else{if(i[r+1]==2)return Gt(i,r+2);break}if(o==t||o==0)return Gt(i,r+1)}return 0}stateSlot(e,t){return this.states[e*6+t]}stateFlag(e,t){return(this.stateSlot(e,0)&t)>0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),s=i?t(i):void 0;for(let r=this.stateSlot(e,1);s==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=Gt(this.data,r+2);else break;s=t(Gt(this.data,r+1))}return s}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=Gt(this.data,i+2);else break;if((this.data[i+2]&1)==0){let s=this.data[i+1];t.some((r,o)=>o&1&&r==s)||t.push(this.data[i],s)}}return t}configure(e){let t=Object.assign(Object.create(Zs.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let s=e.tokenizers.find(r=>r.from==i);return s?s.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,s)=>{let r=e.specializers.find(l=>l.from==i.external);if(!r)return i;let o=Object.assign(Object.assign({},i),{external:r.to});return t.specializers[s]=_p(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let r of e.split(\" \")){let o=t.indexOf(r);o>=0&&(i[o]=!0)}let s=null;for(let r=0;r<t.length;r++)if(!i[r])for(let o=this.dialects[t[r]],l;(l=this.data[o++])!=65535;)(s||(s=new Uint8Array(this.maxTerm+1)))[l]=1;return new O2(e,i,s)}static deserialize(e){return new Zs(e)}}function Gt(n,e){return n[e]|n[e+1]<<16}function b2(n){let e=null;for(let t of n){let i=t.p.stoppedAt;(t.pos==t.p.stream.end||i!=null&&t.pos>i)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.score<t.score)&&(e=t)}return e}function _p(n){if(n.external){let e=n.extend?1:0;return(t,i)=>n.external(t,i)<<1|e}return n.get}const S2=55,y2=1,x2=56,w2=2,k2=57,Q2=3,Yp=4,v2=5,Mf=6,M1=7,A1=8,R1=9,D1=10,$2=11,P2=12,C2=13,va=58,T2=14,M2=15,Np=59,Z1=21,A2=23,B1=24,R2=25,Oc=27,X1=28,D2=29,Z2=32,B2=35,X2=37,L2=38,E2=0,W2=1,V2={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},z2={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},jp={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function q2(n){return n==45||n==46||n==58||n>=65&&n<=90||n==95||n>=97&&n<=122||n>=161}let Gp=null,Hp=null,Fp=0;function bc(n,e){let t=n.pos+e;if(Fp==t&&Hp==n)return Gp;let i=n.peek(e),s=\"\";for(;q2(i);)s+=String.fromCharCode(i),i=n.peek(++e);return Hp=n,Fp=t,Gp=s?s.toLowerCase():i==I2||i==_2?void 0:null}const L1=60,Jo=62,Af=47,I2=63,_2=33,Y2=45;function Up(n,e){this.name=n,this.parent=e}const N2=[Mf,D1,M1,A1,R1],j2=new T1({start:null,shift(n,e,t,i){return N2.indexOf(e)>-1?new Up(bc(i,1)||\"\",n):n},reduce(n,e){return e==Z1&&n?n.parent:n},reuse(n,e,t,i){let s=e.type.id;return s==Mf||s==X2?new Up(bc(i,1)||\"\",n):n},strict:!1}),G2=new Ge((n,e)=>{if(n.next!=L1){n.next<0&&e.context&&n.acceptToken(va);return}n.advance();let t=n.next==Af;t&&n.advance();let i=bc(n,0);if(i===void 0)return;if(!i)return n.acceptToken(t?M2:T2);let s=e.context?e.context.name:null;if(t){if(i==s)return n.acceptToken($2);if(s&&z2[s])return n.acceptToken(va,-2);if(e.dialectEnabled(E2))return n.acceptToken(P2);for(let r=e.context;r;r=r.parent)if(r.name==i)return;n.acceptToken(C2)}else{if(i==\"script\")return n.acceptToken(M1);if(i==\"style\")return n.acceptToken(A1);if(i==\"textarea\")return n.acceptToken(R1);if(V2.hasOwnProperty(i))return n.acceptToken(D1);s&&jp[s]&&jp[s][i]?n.acceptToken(va,-1):n.acceptToken(Mf)}},{contextual:!0}),H2=new Ge(n=>{for(let e=0,t=0;;t++){if(n.next<0){t&&n.acceptToken(Np);break}if(n.next==Y2)e++;else if(n.next==Jo&&e>=2){t>=3&&n.acceptToken(Np,-2);break}else e=0;n.advance()}});function F2(n){for(;n;n=n.parent)if(n.name==\"svg\"||n.name==\"math\")return!0;return!1}const U2=new Ge((n,e)=>{if(n.next==Af&&n.peek(1)==Jo){let t=e.dialectEnabled(W2)||F2(e.context);n.acceptToken(t?v2:Yp,2)}else n.next==Jo&&n.acceptToken(Yp,1)});function Rf(n,e,t){let i=2+n.length;return new Ge(s=>{for(let r=0,o=0,l=0;;l++){if(s.next<0){l&&s.acceptToken(e);break}if(r==0&&s.next==L1||r==1&&s.next==Af||r>=2&&r<i&&s.next==n.charCodeAt(r-2))r++,o++;else if(r==i&&s.next==Jo){l>o?s.acceptToken(e,-o):s.acceptToken(t,-(o-2));break}else if((s.next==10||s.next==13)&&l){s.acceptToken(e,1);break}else r=o=0;s.advance()}})}const K2=Rf(\"script\",S2,y2),J2=Rf(\"style\",x2,w2),eM=Rf(\"textarea\",k2,Q2),tM=hl({\"Text RawText IncompleteTag IncompleteCloseTag\":b.content,\"StartTag StartCloseTag SelfClosingEndTag EndTag\":b.angleBracket,TagName:b.tagName,\"MismatchedCloseTag/TagName\":[b.tagName,b.invalid],AttributeName:b.attributeName,\"AttributeValue UnquotedAttributeValue\":b.attributeValue,Is:b.definitionOperator,\"EntityReference CharacterReference\":b.character,Comment:b.blockComment,ProcessingInst:b.processingInstruction,DoctypeDecl:b.documentMeta}),iM=Zs.deserialize({version:14,states:\",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[\",stateData:\",c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~\",goto:\"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp\",nodeNames:\"⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl\",maxTerm:68,context:j2,nodeProps:[[\"closedBy\",-10,1,2,3,7,8,9,10,11,12,13,\"EndTag\",6,\"EndTag SelfClosingEndTag\",-4,22,31,34,37,\"CloseTag\"],[\"openedBy\",4,\"StartTag StartCloseTag\",5,\"StartTag\",-4,30,33,36,38,\"OpenTag\"],[\"group\",-10,14,15,18,19,20,21,40,41,42,43,\"Entity\",17,\"Entity TextContent\",-3,29,32,35,\"TextContent Entity\"],[\"isolate\",-11,22,30,31,33,34,36,37,38,39,42,43,\"ltr\",-3,27,28,40,\"\"]],propSources:[tM],skippedNodes:[0],repeatNodeCount:9,tokenData:\"!<p!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs3_sv-_vw3}wxHYx}-_}!OH{!O!P-_!P!Q$q!Q![-_![!]Mz!]!^-_!^!_!$S!_!`!;x!`!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4U-_4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!Z$|caPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bXaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UVaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pTaPOv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!dpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({WaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!b`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!b`!dpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYlWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]`aP!b`!dp!_^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ebiSlWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0rXiSqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0mS1bP;=`<%l0m[1hP;=`<%l/^!V1vciSaP!b`!dpOq&Xqr1krs&}sv1kvw0mwx(tx!P1k!P!Q&X!Q!^1k!^!_*V!_!a&X!a#s1k#s$f&X$f;'S1k;'S;=`3R<%l?Ah1k?Ah?BY&X?BY?Mn1k?MnO&X!V3UP;=`<%l1k!_3[P;=`<%l-_!Z3hV!ahaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_4WiiSlWd!ROX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst>]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V<QciSOp7Sqr;{rs7Sst0mtw;{wx7Sx!P;{!P!Q7S!Q!];{!]!^=]!^!a7S!a#s;{#s$f7S$f;'S;{;'S;=`>P<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!<TXjSaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X\",tokenizers:[K2,J2,eM,U2,G2,H2,0,1,2,3,4,5],topRules:{Document:[0,16]},dialects:{noMatch:0,selfClosing:515},tokenPrec:517});function E1(n,e){let t=Object.create(null);for(let i of n.getChildren(B1)){let s=i.getChild(R2),r=i.getChild(Oc)||i.getChild(X1);s&&(t[e.read(s.from,s.to)]=r?r.type.id==Oc?e.read(r.from+1,r.to-1):e.read(r.from,r.to):\"\")}return t}function Kp(n,e){let t=n.getChild(A2);return t?e.read(t.from,t.to):\" \"}function $a(n,e,t){let i;for(let s of t)if(!s.attrs||s.attrs(i||(i=E1(n.node.parent.firstChild,e))))return{parser:s.parser,bracketed:!0};return null}function W1(n=[],e=[]){let t=[],i=[],s=[],r=[];for(let l of n)(l.tag==\"script\"?t:l.tag==\"style\"?i:l.tag==\"textarea\"?s:r).push(l);let o=e.length?Object.create(null):null;for(let l of e)(o[l.name]||(o[l.name]=[])).push(l);return Dw((l,a)=>{let h=l.type.id;if(h==D2)return $a(l,a,t);if(h==Z2)return $a(l,a,i);if(h==B2)return $a(l,a,s);if(h==Z1&&r.length){let c=l.node,f=c.firstChild,u=f&&Kp(f,a),d;if(u){for(let p of r)if(p.tag==u&&(!p.attrs||p.attrs(d||(d=E1(f,a))))){let g=c.lastChild,m=g.type.id==L2?g.from:c.to;if(m>f.to)return{parser:p.parser,overlay:[{from:f.to,to:m}]}}}}if(o&&h==B1){let c=l.node,f;if(f=c.firstChild){let u=o[a.read(f.from,f.to)];if(u)for(let d of u){if(d.tagName&&d.tagName!=Kp(c.parent,a))continue;let p=c.lastChild;if(p.type.id==Oc){let g=p.from+1,m=p.lastChild,O=p.to-(m&&m.isError?0:1);if(O>g)return{parser:d.parser,overlay:[{from:g,to:O}],bracketed:!0}}else if(p.type.id==X1)return{parser:d.parser,overlay:[{from:p.from,to:p.to}]}}}}return null})}const sM=122,Jp=1,nM=123,rM=124,V1=2,oM=125,lM=3,aM=4,z1=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],hM=58,cM=40,q1=95,fM=91,so=45,uM=46,dM=35,pM=37,gM=38,mM=92,OM=10,bM=42;function qn(n){return n>=65&&n<=90||n>=97&&n<=122||n>=161}function Df(n){return n>=48&&n<=57}function eg(n){return Df(n)||n>=97&&n<=102||n>=65&&n<=70}const I1=(n,e,t)=>(i,s)=>{for(let r=!1,o=0,l=0;;l++){let{next:a}=i;if(qn(a)||a==so||a==q1||r&&Df(a))!r&&(a!=so||l>0)&&(r=!0),o===l&&a==so&&o++,i.advance();else if(a==mM&&i.peek(1)!=OM){if(i.advance(),eg(i.next)){do i.advance();while(eg(i.next));i.next==32&&i.advance()}else i.next>-1&&i.advance();r=!0}else{r&&i.acceptToken(o==2&&s.canShift(V1)?e:a==cM?t:n);break}}},SM=new Ge(I1(nM,V1,rM)),yM=new Ge(I1(oM,lM,aM)),xM=new Ge(n=>{if(z1.includes(n.peek(-1))){let{next:e}=n;(qn(e)||e==q1||e==dM||e==uM||e==bM||e==fM||e==hM&&qn(n.peek(1))||e==so||e==gM)&&n.acceptToken(sM)}}),wM=new Ge(n=>{if(!z1.includes(n.peek(-1))){let{next:e}=n;if(e==pM&&(n.advance(),n.acceptToken(Jp)),qn(e)){do n.advance();while(qn(n.next)||Df(n.next));n.acceptToken(Jp)}}}),kM=hl({\"AtKeyword import charset namespace keyframes media supports\":b.definitionKeyword,\"from to selector\":b.keyword,NamespaceName:b.namespace,KeyframeName:b.labelName,KeyframeRangeName:b.operatorKeyword,TagName:b.tagName,ClassName:b.className,PseudoClassName:b.constant(b.className),IdName:b.labelName,\"FeatureName PropertyName\":b.propertyName,AttributeName:b.attributeName,NumberLiteral:b.number,KeywordQuery:b.keyword,UnaryQueryOp:b.operatorKeyword,\"CallTag ValueName\":b.atom,VariableName:b.variableName,Callee:b.operatorKeyword,Unit:b.unit,\"UniversalSelector NestingSelector\":b.definitionOperator,\"MatchOp CompareOp\":b.compareOperator,\"ChildOp SiblingOp, LogicOp\":b.logicOperator,BinOp:b.arithmeticOperator,Important:b.modifier,Comment:b.blockComment,ColorLiteral:b.color,\"ParenthesizedContent StringLiteral\":b.string,\":\":b.punctuation,\"PseudoOp #\":b.derefOperator,\"; ,\":b.separator,\"( )\":b.paren,\"[ ]\":b.squareBracket,\"{ }\":b.brace}),QM={__proto__:null,lang:38,\"nth-child\":38,\"nth-last-child\":38,\"nth-of-type\":38,\"nth-last-of-type\":38,dir:38,\"host-context\":38,if:84,url:124,\"url-prefix\":124,domain:124,regexp:124},vM={__proto__:null,or:98,and:98,not:106,only:106,layer:170},$M={__proto__:null,selector:112,layer:166},PM={__proto__:null,\"@import\":162,\"@media\":174,\"@charset\":178,\"@namespace\":182,\"@keyframes\":188,\"@supports\":200,\"@scope\":204},CM={__proto__:null,to:207},TM=Zs.deserialize({version:14,states:\"EbQYQdOOO#qQdOOP#xO`OOOOQP'#Cf'#CfOOQP'#Ce'#CeO#}QdO'#ChO$nQaO'#CcO$xQdO'#CkO%TQdO'#DpO%YQdO'#DrO%_QdO'#DuO%_QdO'#DxOOQP'#FV'#FVO&eQhO'#EhOOQS'#FU'#FUOOQS'#Ek'#EkQYQdOOO&lQdO'#EOO&PQhO'#EUO&lQdO'#EWO'aQdO'#EYO'lQdO'#E]O'tQhO'#EcO(VQdO'#EeO(bQaO'#CfO)VQ`O'#D{O)[Q`O'#F`O)gQdO'#F`QOQ`OOP)qO&jO'#CaPOOO)C@t)C@tOOQP'#Cj'#CjOOQP,59S,59SO#}QdO,59SO)|QdO,59VO%TQdO,5:[O%YQdO,5:^O%_QdO,5:aO%_QdO,5:cO%_QdO,5:dO%_QdO'#ErO*XQ`O,58}O*aQdO'#DzOOQS,58},58}OOQP'#Cn'#CnOOQO'#Dn'#DnOOQP,59V,59VO*hQ`O,59VO*mQ`O,59VOOQP'#Dq'#DqOOQP,5:[,5:[OOQO'#Ds'#DsO*rQpO,5:^O+]QaO,5:aO+sQaO,5:dOOQW'#DZ'#DZO,ZQhO'#DdO,xQhO'#FaO'tQhO'#DbO-WQ`O'#DhOOQW'#F['#F[O-]Q`O,5;SO-eQ`O'#DeOOQS-E8i-E8iOOQ['#Cs'#CsO-jQdO'#CtO.QQdO'#CzO.hQdO'#C}O/OQ!pO'#DPO1RQ!jO,5:jOOQO'#DU'#DUO*mQ`O'#DTO1cQ!nO'#FXO3`Q`O'#DVO3eQ`O'#DkOOQ['#FX'#FXO-`Q`O,5:pO3jQ!bO,5:rOOQS'#E['#E[O3rQ`O,5:tO3wQdO,5:tOOQO'#E_'#E_O4PQ`O,5:wO4UQhO,5:}O%_QdO'#DgOOQS,5;P,5;PO-eQ`O,5;PO4^QdO,5;PO4fQdO,5:gO4vQdO'#EtO5TQ`O,5;zO5TQ`O,5;zPOOO'#Ej'#EjP5`O&jO,58{POOO,58{,58{OOQP1G.n1G.nOOQP1G.q1G.qO*hQ`O1G.qO*mQ`O1G.qOOQP1G/v1G/vO5kQpO1G/xO5sQaO1G/{O6ZQaO1G/}O6qQaO1G0OO7XQaO,5;^OOQO-E8p-E8pOOQS1G.i1G.iO7cQ`O,5:fO7hQdO'#DoO7oQdO'#CrOOQP1G/x1G/xO&lQdO1G/xO7vQ!jO'#DZO8UQ!bO,59vO8^QhO,5:OOOQO'#F]'#F]O8XQ!bO,59zO'tQhO,59xO8fQhO'#EvO8sQ`O,5;{O9OQhO,59|O9uQhO'#DiOOQW,5:S,5:SOOQS1G0n1G0nOOQW,5:P,5:PO9|Q!fO'#FYOOQS'#FY'#FYOOQS'#Em'#EmO;^QdO,59`OOQ[,59`,59`O;tQdO,59fOOQ[,59f,59fO<[QdO,59iOOQ[,59i,59iOOQ[,59k,59kO&lQdO,59mO<rQhO'#EQOOQW'#EQ'#EQO=WQ`O1G0UO1[QhO1G0UOOQ[,59o,59oO'tQhO'#DXOOQ[,59q,59qO=]Q#tO,5:VOOQS1G0[1G0[OOQS1G0^1G0^OOQS1G0`1G0`O=hQ`O1G0`O=mQdO'#E`OOQS1G0c1G0cOOQS1G0i1G0iO=xQaO,5:RO-`Q`O1G0kOOQS1G0k1G0kO-eQ`O1G0kO>PQ!fO1G0ROOQO1G0R1G0ROOQO,5;`,5;`O>gQdO,5;`OOQO-E8r-E8rO>tQ`O1G1fPOOO-E8h-E8hPOOO1G.g1G.gOOQP7+$]7+$]OOQP7+%d7+%dO&lQdO7+%dOOQS1G0Q1G0QO?PQaO'#F_O?ZQ`O,5:ZO?`Q!fO'#ElO@^QdO'#FWO@hQ`O,59^O@mQ!bO7+%dO&lQdO1G/bO@uQhO1G/fOOQW1G/j1G/jOOQW1G/d1G/dOAWQhO,5;bOOQO-E8t-E8tOAfQhO'#DZOAtQhO'#F^OBPQ`O'#F^OBUQ`O,5:TOOQS-E8k-E8kOOQ[1G.z1G.zOOQ[1G/Q1G/QOOQ[1G/T1G/TOOQ[1G/X1G/XOBZQdO,5:lOOQS7+%p7+%pOB`Q`O7+%pOBeQhO'#DYOBmQ`O,59sO'tQhO,59sOOQ[1G/q1G/qOBuQ`O1G/qOOQS7+%z7+%zOBzQbO'#DPOOQO'#Eb'#EbOCYQ`O'#EaOOQO'#Ea'#EaOCeQ`O'#EwOCmQdO,5:zOOQS,5:z,5:zOOQ[1G/m1G/mOOQS7+&V7+&VO-`Q`O7+&VOCxQ!fO'#EsO&lQdO'#EsOEPQdO7+%mOOQO7+%m7+%mOOQO1G0z1G0zOEdQ!bO<<IOOElQdO'#EqOEvQ`O,5;yOOQP1G/u1G/uOOQS-E8j-E8jOFOQdO'#EpOFYQ`O,5;rOOQ]1G.x1G.xOOQP<<IO<<IOOFbQdO7+$|OOQO'#D]'#D]OFiQ!bO7+%QOFqQhO'#EoOF{Q`O,5;xO&lQdO,5;xOOQW1G/o1G/oOOQO'#ES'#ESOGTQ`O1G0WOOQS<<I[<<I[O&lQdO,59tOGnQhO1G/_OOQ[1G/_1G/_OGuQ`O1G/_OOQW-E8l-E8lOOQ[7+%]7+%]OOQO,5:{,5:{O=pQdO'#ExOCeQ`O,5;cOOQS,5;c,5;cOOQS-E8u-E8uOOQS1G0f1G0fOOQS<<Iq<<IqOG}Q!fO,5;_OOQS-E8q-E8qOOQO<<IX<<IXOOQPAN>jAN>jOIUQaO,5;]OOQO-E8o-E8oOI`QdO,5;[OOQO-E8n-E8nOOQW<<Hh<<HhOOQW<<Hl<<HlOIjQhO<<HlOI{QhO,5;ZOJWQ`O,5;ZOOQO-E8m-E8mOJ]QdO1G1dOBZQdO'#EuOJgQ`O7+%rOOQW7+%r7+%rOJoQ!bO1G/`OOQ[7+$y7+$yOJzQhO7+$yPKRQ`O'#EnOOQO,5;d,5;dOOQO-E8v-E8vOOQS1G0}1G0}OKWQ`OAN>WO&lQdO1G0uOK]Q`O7+'OOOQO,5;a,5;aOOQO-E8s-E8sOOQW<<I^<<I^OOQ[<<He<<HePOQW,5;Y,5;YOOQWG23rG23rOKeQdO7+&a\",stateData:\"Kx~O#sOS#tQQ~OW[OZ[O]TO`VOaVOi]OjWOmXO!jYO!mZO!saO!ybO!{cO!}dO#QeO#WfO#YgO#oRO~OQiOW[OZ[O]TO`VOaVOi]OjWOmXO!jYO!mZO!saO!ybO!{cO!}dO#QeO#WfO#YgO#ohO~O#m$SP~P!dO#tmO~O#ooO~O]qO`rOarOjsOmtO!juO!mwO#nvO~OpzO!^xO~P$SOc!QO#o|O#p}O~O#o!RO~O#o!TO~OW[OZ[O]TO`VOaVOjWOmXO!jYO!mZO#oRO~OS!]Oe!YO!V![O!Y!`O#q!XOp$TP~Ok$TP~P&POQ!jOe!cOm!dOp!eOr!mOt!mOz!kO!`!lO#o!bO#p!hO#}!fO~Ot!qO!`!lO#o!pO~Ot!sO#o!sO~OS!]Oe!YO!V![O!Y!`O#q!XO~Oe!vOpzO#Z!xO~O]YX`YX`!pXaYXjYXmYXpYX!^YX!jYX!mYX#nYX~O`!zO~Ok!{O#m$SXo$SX~O#m$SXo$SX~P!dO#u#OO#v#OO#w#QO~Oc#UO#o|O#p}O~OpzO!^xO~Oo$SP~P!dOe#`O~Oe#aO~Ol#bO!h#cO~O]qO`rOarOjsOmtO~Op!ia!^!ia!j!ia!m!ia#n!iad!ia~P*zOp!la!^!la!j!la!m!la#n!lad!la~P*zOR#gOS!]Oe!YOr#gOt#gO!V![O!Y!`O#q#dO#}!fO~O!R#iO!^#jOk$TXp$TX~Oe#mO~Ok#oOpzO~Oe!vO~O]#rO`#rOd#uOi#rOj#rOk#rO~P&lO]#rO`#rOi#rOj#rOk#rOl#wO~P&lO]#rO`#rOi#rOj#rOk#rOo#yO~P&lOP#zOSsXesXksXvsX!VsX!YsX!usX!wsX#qsX!TsXQsX]sX`sXdsXisXjsXmsXpsXrsXtsXzsX!`sX#osX#psX#}sXlsXosX!^sX!qsX#msX~Ov#{O!u#|O!w#}Ok$TP~P'tOe#aOS#{Xk#{Xv#{X!V#{X!Y#{X!u#{X!w#{X#q#{XQ#{X]#{X`#{Xd#{Xi#{Xj#{Xm#{Xp#{Xr#{Xt#{Xz#{X!`#{X#o#{X#p#{X#}#{Xl#{Xo#{X!^#{X!q#{X#m#{X~Oe$RO~Oe$TO~Ok$VOv#{O~Ok$WO~Ot$XO!`!lO~Op$YO~OpzO!R#iO~OpzO#Z$`O~O!q$bOk!oa#m!oao!oa~P&lOk#hX#m#hXo#hX~P!dOk!{O#m$Sao$Sa~O#u#OO#v#OO#w$hO~Ol$jO!h$kO~Op!ii!^!ii!j!ii!m!ii#n!iid!ii~P*zOp!ki!^!ki!j!ki!m!ki#n!kid!ki~P*zOp!li!^!li!j!li!m!li#n!lid!li~P*zOp#fa!^#fa~P$SOo$lO~Od$RP~P%_Od#zP~P&lO`!PXd}X!R}X!T!PX~O`$sO!T$tO~Od$uO!R#iO~Ok#jXp#jX!^#jX~P'tO!^#jOk$Tap$Ta~O!R#iOk!Uap!Ua!^!Uad!Ua`!Ua~OS!]Oe!YO!V![O!Y!`O#q$yO~Od$QP~P9dOv#{OQ#|X]#|X`#|Xd#|Xe#|Xi#|Xj#|Xk#|Xm#|Xp#|Xr#|Xt#|Xz#|X!`#|X#o#|X#p#|X#}#|Xl#|Xo#|X~O]#rO`#rOd%OOi#rOj#rOk#rO~P&lO]#rO`#rOi#rOj#rOk#rOl%PO~P&lO]#rO`#rOi#rOj#rOk#rOo%QO~P&lOe%SOS!tXk!tX!V!tX!Y!tX#q!tX~Ok%TO~Od%YOt%ZO!a%ZO~Ok%[O~Oo%cO#o%^O#}%]O~Od%dO~P$SOv#{O!^%hO!q%jOk!oi#m!oio!oi~P&lOk#ha#m#hao#ha~P!dOk!{O#m$Sio$Si~O!^%mOd$RX~P$SOd%oO~Ov#{OQ#`Xd#`Xe#`Xm#`Xp#`Xr#`Xt#`Xz#`X!^#`X!`#`X#o#`X#p#`X#}#`X~O!^%qOd#zX~P&lOd%sO~Ol%tOv#{O~OR#gOr#gOt#gO#q%vO#}!fO~O!R#iOk#jap#ja!^#ja~O`!PXd}X!R}X!^}X~O!R#iO!^%xOd$QX~O`%zO~Od%{O~O#o%|O~Ok&OO~O`&PO!R#iO~Od&ROk&QO~Od&UO~OP#zOpsX!^sXdsX~O#}%]Op#TX!^#TX~OpzO!^&WO~Oo&[O#o%^O#}%]O~Ov#{OQ#gXe#gXk#gXm#gXp#gXr#gXt#gXz#gX!^#gX!`#gX!q#gX#m#gX#o#gX#p#gX#}#gXo#gX~O!^%hO!q&`Ok!oq#m!oqo!oq~P&lOl&aOv#{O~Od#eX!^#eX~P%_O!^%mOd$Ra~Od#dX!^#dX~P&lO!^%qOd#za~Od&fO~P&lOd&gO!T&hO~Od#cX!^#cX~P9dO!^%xOd$Qa~O]&mOd&oO~OS#bae#ba!V#ba!Y#ba#q#ba~Od&qO~PG]Od&qOk&rO~Ov#{OQ#gae#gak#gam#gap#gar#gat#gaz#ga!^#ga!`#ga!q#ga#m#ga#o#ga#p#ga#}#gao#ga~Od#ea!^#ea~P$SOd#da!^#da~P&lOR#gOr#gOt#gO#q%vO#}%]O~O!R#iOd#ca!^#ca~O`&xO~O!^%xOd$Qi~P&lO]&mOd&|O~Ov#{Od|ik|i~Od&}O~PG]Ok'OO~Od'PO~O!^%xOd$Qq~Od#cq!^#cq~P&lO#s!a#t#}]#}v!m~\",goto:\"2h$UPPPPP$VP$YP$c$uP$cP%X$cPP%_PPP%e%o%oPPPPP%oPP%oP&]P%oP%o'W%oP't'w'}'}(^'}P'}P'}P'}'}P(m'}(yP(|PP)p)v$c)|$c*SP$cP$c$cP*Y*{+YP$YP+aP+dP$YP$YP$YP+j$YP+m+p+s+z$YP$YPP$YP,P,V,f,|-[-b-l-r-x.O.U.`.f.l.rPPPPPPPPPPP.x/R/w/z0|P1U1u2O2R2U2[RnQ_^OP`kz!{$dq[OPYZ`kuvwxz!v!{#`$d%mqSOPYZ`kuvwxz!v!{#`$d%mQpTR#RqQ!OVR#SrQ#S!QS$Q!i!jR$i#U!V!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'Q!U!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QU#g!Y$t&hU%`$Y%b&WR&V%_!V!iac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QR$S!kQ%W$RR&S%Xk!^]bf!Y![!g#i#j#m$P$R%X%xQ#e!YQ${#mQ%w$tQ&j%xR&w&hQ!ygQ#p!`Q$^!xR%f$`R#n!]!U!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QQ!qdR$X!rQ!PVR#TrQ#S!PR$i#TQ!SWR#VsQ!UXR#WtQ{UQ!wgQ#^yQ#o!_Q$U!nQ$[!uQ$_!yQ%e$^Q&Y%aQ&]%fR&v&XSjPzQ!}kQ$c!{R%k$dZiPkz!{$dR$P!gQ%}%SR&z&mR!rdR!teR$Z!tS%a$Y%bR&t&WV%_$Y%b&WQ#PmR$g#PQ`OSkPzU!a`k$dR$d!{Q$p#aY%p$p%u&d&l'QQ%u$sQ&d%qQ&l%zR'Q&xQ#t!cQ#v!dQ#x!eV$}#t#v#xQ%X$RR&T%XQ%y$zS&k%y&yR&y&lQ%r$pR&e%rQ%n$mR&c%nQyUR#]yQ%i$aR&_%iQ!|jS$e!|$fR$f!}Q&n%}R&{&nQ#k!ZR$x#kQ%b$YR&Z%bQ&X%aR&u&X__OP`kz!{$d^UOP`kz!{$dQ!VYQ!WZQ#XuQ#YvQ#ZwQ#[xQ$]!vQ$m#`R&b%mR$q#aQ!gaQ!oc[#q!c!d!e#t#v#xQ$a!zd$o#a$p$s%q%u%z&d&l&x'QQ$r#cQ%R#{S%g$a%iQ%l$kQ&^%hR&p&P]#s!c!d!e#t#v#xW!Z]b!g$PQ!ufQ#f!YQ#l![Q$v#iQ$w#jQ$z#mS%V$R%XR&i%xQ#h!YQ%w$tR&w&hR$|#mR$n#`QlPR#_zQ!_]Q!nbQ$O!gR%U$P\",nodeNames:\"⚠ Unit VariableName VariableName QueryCallee Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector . ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue AtKeyword # ; ] [ BracketedValue } { BracedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee IfExpression if ArgList IfBranch KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp ComparisonQuery CompareOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector ParenthesizedSelector CallQuery ArgList , CallLiteral CallTag ParenthesizedContent PseudoClassName ArgList IdSelector IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp Block Declaration PropertyName Important ImportStatement import Layer layer LayerName layer MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports ScopeStatement scope to AtRule Styles\",maxTerm:143,nodeProps:[[\"isolate\",-2,5,36,\"\"],[\"openedBy\",20,\"(\",28,\"[\",31,\"{\"],[\"closedBy\",21,\")\",29,\"]\",32,\"}\"]],propSources:[kM],skippedNodes:[0,5,106],repeatNodeCount:15,tokenData:\"JQ~R!YOX$qX^%i^p$qpq%iqr({rs-ust/itu6Wuv$qvw7Qwx7cxy9Qyz9cz{9h{|:R|}>t}!O?V!O!P?t!P!Q@]!Q![AU![!]BP!]!^B{!^!_C^!_!`DY!`!aDm!a!b$q!b!cEn!c!}$q!}#OG{#O#P$q#P#QH^#Q#R6W#R#o$q#o#pHo#p#q6W#q#rIQ#r#sIc#s#y$q#y#z%i#z$f$q$f$g%i$g#BY$q#BY#BZ%i#BZ$IS$q$IS$I_%i$I_$I|$q$I|$JO%i$JO$JT$q$JT$JU%i$JU$KV$q$KV$KW%i$KW&FU$q&FU&FV%i&FV;'S$q;'S;=`Iz<%lO$q`$tSOy%Qz;'S%Q;'S;=`%c<%lO%Q`%VS!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Q`%fP;=`<%l%Q~%nh#s~OX%QX^'Y^p%Qpq'Yqy%Qz#y%Q#y#z'Y#z$f%Q$f$g'Y$g#BY%Q#BY#BZ'Y#BZ$IS%Q$IS$I_'Y$I_$I|%Q$I|$JO'Y$JO$JT%Q$JT$JU'Y$JU$KV%Q$KV$KW'Y$KW&FU%Q&FU&FV'Y&FV;'S%Q;'S;=`%c<%lO%Q~'ah#s~!a`OX%QX^'Y^p%Qpq'Yqy%Qz#y%Q#y#z'Y#z$f%Q$f$g'Y$g#BY%Q#BY#BZ'Y#BZ$IS%Q$IS$I_'Y$I_$I|%Q$I|$JO'Y$JO$JT%Q$JT$JU'Y$JU$KV%Q$KV$KW'Y$KW&FU%Q&FU&FV'Y&FV;'S%Q;'S;=`%c<%lO%Qj)OUOy%Qz#]%Q#]#^)b#^;'S%Q;'S;=`%c<%lO%Qj)gU!a`Oy%Qz#a%Q#a#b)y#b;'S%Q;'S;=`%c<%lO%Qj*OU!a`Oy%Qz#d%Q#d#e*b#e;'S%Q;'S;=`%c<%lO%Qj*gU!a`Oy%Qz#c%Q#c#d*y#d;'S%Q;'S;=`%c<%lO%Qj+OU!a`Oy%Qz#f%Q#f#g+b#g;'S%Q;'S;=`%c<%lO%Qj+gU!a`Oy%Qz#h%Q#h#i+y#i;'S%Q;'S;=`%c<%lO%Qj,OU!a`Oy%Qz#T%Q#T#U,b#U;'S%Q;'S;=`%c<%lO%Qj,gU!a`Oy%Qz#b%Q#b#c,y#c;'S%Q;'S;=`%c<%lO%Qj-OU!a`Oy%Qz#h%Q#h#i-b#i;'S%Q;'S;=`%c<%lO%Qj-iS!qY!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Q~-xWOY-uZr-urs.bs#O-u#O#P.g#P;'S-u;'S;=`/c<%lO-u~.gOt~~.jRO;'S-u;'S;=`.s;=`O-u~.vXOY-uZr-urs.bs#O-u#O#P.g#P;'S-u;'S;=`/c;=`<%l-u<%lO-u~/fP;=`<%l-uj/nYjYOy%Qz!Q%Q!Q![0^![!c%Q!c!i0^!i#T%Q#T#Z0^#Z;'S%Q;'S;=`%c<%lO%Qj0cY!a`Oy%Qz!Q%Q!Q![1R![!c%Q!c!i1R!i#T%Q#T#Z1R#Z;'S%Q;'S;=`%c<%lO%Qj1WY!a`Oy%Qz!Q%Q!Q![1v![!c%Q!c!i1v!i#T%Q#T#Z1v#Z;'S%Q;'S;=`%c<%lO%Qj1}YrY!a`Oy%Qz!Q%Q!Q![2m![!c%Q!c!i2m!i#T%Q#T#Z2m#Z;'S%Q;'S;=`%c<%lO%Qj2tYrY!a`Oy%Qz!Q%Q!Q![3d![!c%Q!c!i3d!i#T%Q#T#Z3d#Z;'S%Q;'S;=`%c<%lO%Qj3iY!a`Oy%Qz!Q%Q!Q![4X![!c%Q!c!i4X!i#T%Q#T#Z4X#Z;'S%Q;'S;=`%c<%lO%Qj4`YrY!a`Oy%Qz!Q%Q!Q![5O![!c%Q!c!i5O!i#T%Q#T#Z5O#Z;'S%Q;'S;=`%c<%lO%Qj5TY!a`Oy%Qz!Q%Q!Q![5s![!c%Q!c!i5s!i#T%Q#T#Z5s#Z;'S%Q;'S;=`%c<%lO%Qj5zSrY!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Qd6ZUOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Qd6tS!hS!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Qb7VSZQOy%Qz;'S%Q;'S;=`%c<%lO%Q~7fWOY7cZw7cwx.bx#O7c#O#P8O#P;'S7c;'S;=`8z<%lO7c~8RRO;'S7c;'S;=`8[;=`O7c~8_XOY7cZw7cwx.bx#O7c#O#P8O#P;'S7c;'S;=`8z;=`<%l7c<%lO7c~8}P;=`<%l7cj9VSeYOy%Qz;'S%Q;'S;=`%c<%lO%Q~9hOd~n9oUWQvWOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Qj:YWvW!mQOy%Qz!O%Q!O!P:r!P!Q%Q!Q![=w![;'S%Q;'S;=`%c<%lO%Qj:wU!a`Oy%Qz!Q%Q!Q![;Z![;'S%Q;'S;=`%c<%lO%Qj;bY!a`#}YOy%Qz!Q%Q!Q![;Z![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%Qj<VY!a`Oy%Qz{%Q{|<u|}%Q}!O<u!O!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj<zU!a`Oy%Qz!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj=eU!a`#}YOy%Qz!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj>O[!a`#}YOy%Qz!O%Q!O!P;Z!P!Q%Q!Q![=w![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%Qj>yS!^YOy%Qz;'S%Q;'S;=`%c<%lO%Qj?[WvWOy%Qz!O%Q!O!P:r!P!Q%Q!Q![=w![;'S%Q;'S;=`%c<%lO%Qj?yU]YOy%Qz!Q%Q!Q![;Z![;'S%Q;'S;=`%c<%lO%Q~@bTvWOy%Qz{@q{;'S%Q;'S;=`%c<%lO%Q~@xS!a`#t~Oy%Qz;'S%Q;'S;=`%c<%lO%QjAZ[#}YOy%Qz!O%Q!O!P;Z!P!Q%Q!Q![=w![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%QjBUU`YOy%Qz![%Q![!]Bh!];'S%Q;'S;=`%c<%lO%QbBoSaQ!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QjCQSkYOy%Qz;'S%Q;'S;=`%c<%lO%QhCcU!TWOy%Qz!_%Q!_!`Cu!`;'S%Q;'S;=`%c<%lO%QhC|S!TW!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QlDaS!TW!hSOy%Qz;'S%Q;'S;=`%c<%lO%QjDtV!jQ!TWOy%Qz!_%Q!_!`Cu!`!aEZ!a;'S%Q;'S;=`%c<%lO%QbEbS!jQ!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QjEqYOy%Qz}%Q}!OFa!O!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjFfW!a`Oy%Qz!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjGV[iY!a`Oy%Qz}%Q}!OGO!O!Q%Q!Q![GO![!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjHQSmYOy%Qz;'S%Q;'S;=`%c<%lO%QnHcSl^Oy%Qz;'S%Q;'S;=`%c<%lO%QjHtSpYOy%Qz;'S%Q;'S;=`%c<%lO%QjIVSoYOy%Qz;'S%Q;'S;=`%c<%lO%QfIhU!mQOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Q`I}P;=`<%l$q\",tokenizers:[xM,wM,SM,yM,1,2,3,4,new Ko(\"m~RRYZ[z{a~~g~aO#v~~dP!P!Qg~lO#w~~\",28,129)],topRules:{StyleSheet:[0,6],Styles:[1,105]},specialized:[{term:124,get:n=>QM[n]||-1},{term:125,get:n=>vM[n]||-1},{term:4,get:n=>$M[n]||-1},{term:25,get:n=>PM[n]||-1},{term:123,get:n=>CM[n]||-1}],tokenPrec:1963});let Pa=null;function Ca(){if(!Pa&&typeof document==\"object\"&&document.body){let{style:n}=document.body,e=[],t=new Set;for(let i in n)i!=\"cssText\"&&i!=\"cssFloat\"&&typeof n[i]==\"string\"&&(/[A-Z]/.test(i)&&(i=i.replace(/[A-Z]/g,s=>\"-\"+s.toLowerCase())),t.has(i)||(e.push(i),t.add(i)));Pa=e.sort().map(i=>({type:\"property\",label:i,apply:i+\": \"}))}return Pa||[]}const tg=[\"active\",\"after\",\"any-link\",\"autofill\",\"backdrop\",\"before\",\"checked\",\"cue\",\"default\",\"defined\",\"disabled\",\"empty\",\"enabled\",\"file-selector-button\",\"first\",\"first-child\",\"first-letter\",\"first-line\",\"first-of-type\",\"focus\",\"focus-visible\",\"focus-within\",\"fullscreen\",\"has\",\"host\",\"host-context\",\"hover\",\"in-range\",\"indeterminate\",\"invalid\",\"is\",\"lang\",\"last-child\",\"last-of-type\",\"left\",\"link\",\"marker\",\"modal\",\"not\",\"nth-child\",\"nth-last-child\",\"nth-last-of-type\",\"nth-of-type\",\"only-child\",\"only-of-type\",\"optional\",\"out-of-range\",\"part\",\"placeholder\",\"placeholder-shown\",\"read-only\",\"read-write\",\"required\",\"right\",\"root\",\"scope\",\"selection\",\"slotted\",\"target\",\"target-text\",\"valid\",\"visited\",\"where\"].map(n=>({type:\"class\",label:n})),ig=[\"above\",\"absolute\",\"activeborder\",\"additive\",\"activecaption\",\"after-white-space\",\"ahead\",\"alias\",\"all\",\"all-scroll\",\"alphabetic\",\"alternate\",\"always\",\"antialiased\",\"appworkspace\",\"asterisks\",\"attr\",\"auto\",\"auto-flow\",\"avoid\",\"avoid-column\",\"avoid-page\",\"avoid-region\",\"axis-pan\",\"background\",\"backwards\",\"baseline\",\"below\",\"bidi-override\",\"blink\",\"block\",\"block-axis\",\"bold\",\"bolder\",\"border\",\"border-box\",\"both\",\"bottom\",\"break\",\"break-all\",\"break-word\",\"bullets\",\"button\",\"button-bevel\",\"buttonface\",\"buttonhighlight\",\"buttonshadow\",\"buttontext\",\"calc\",\"capitalize\",\"caps-lock-indicator\",\"caption\",\"captiontext\",\"caret\",\"cell\",\"center\",\"checkbox\",\"circle\",\"cjk-decimal\",\"clear\",\"clip\",\"close-quote\",\"col-resize\",\"collapse\",\"color\",\"color-burn\",\"color-dodge\",\"column\",\"column-reverse\",\"compact\",\"condensed\",\"contain\",\"content\",\"contents\",\"content-box\",\"context-menu\",\"continuous\",\"copy\",\"counter\",\"counters\",\"cover\",\"crop\",\"cross\",\"crosshair\",\"currentcolor\",\"cursive\",\"cyclic\",\"darken\",\"dashed\",\"decimal\",\"decimal-leading-zero\",\"default\",\"default-button\",\"dense\",\"destination-atop\",\"destination-in\",\"destination-out\",\"destination-over\",\"difference\",\"disc\",\"discard\",\"disclosure-closed\",\"disclosure-open\",\"document\",\"dot-dash\",\"dot-dot-dash\",\"dotted\",\"double\",\"down\",\"e-resize\",\"ease\",\"ease-in\",\"ease-in-out\",\"ease-out\",\"element\",\"ellipse\",\"ellipsis\",\"embed\",\"end\",\"ethiopic-abegede-gez\",\"ethiopic-halehame-aa-er\",\"ethiopic-halehame-gez\",\"ew-resize\",\"exclusion\",\"expanded\",\"extends\",\"extra-condensed\",\"extra-expanded\",\"fantasy\",\"fast\",\"fill\",\"fill-box\",\"fixed\",\"flat\",\"flex\",\"flex-end\",\"flex-start\",\"footnotes\",\"forwards\",\"from\",\"geometricPrecision\",\"graytext\",\"grid\",\"groove\",\"hand\",\"hard-light\",\"help\",\"hidden\",\"hide\",\"higher\",\"highlight\",\"highlighttext\",\"horizontal\",\"hsl\",\"hsla\",\"hue\",\"icon\",\"ignore\",\"inactiveborder\",\"inactivecaption\",\"inactivecaptiontext\",\"infinite\",\"infobackground\",\"infotext\",\"inherit\",\"initial\",\"inline\",\"inline-axis\",\"inline-block\",\"inline-flex\",\"inline-grid\",\"inline-table\",\"inset\",\"inside\",\"intrinsic\",\"invert\",\"italic\",\"justify\",\"keep-all\",\"landscape\",\"large\",\"larger\",\"left\",\"level\",\"lighter\",\"lighten\",\"line-through\",\"linear\",\"linear-gradient\",\"lines\",\"list-item\",\"listbox\",\"listitem\",\"local\",\"logical\",\"loud\",\"lower\",\"lower-hexadecimal\",\"lower-latin\",\"lower-norwegian\",\"lowercase\",\"ltr\",\"luminosity\",\"manipulation\",\"match\",\"matrix\",\"matrix3d\",\"medium\",\"menu\",\"menutext\",\"message-box\",\"middle\",\"min-intrinsic\",\"mix\",\"monospace\",\"move\",\"multiple\",\"multiple_mask_images\",\"multiply\",\"n-resize\",\"narrower\",\"ne-resize\",\"nesw-resize\",\"no-close-quote\",\"no-drop\",\"no-open-quote\",\"no-repeat\",\"none\",\"normal\",\"not-allowed\",\"nowrap\",\"ns-resize\",\"numbers\",\"numeric\",\"nw-resize\",\"nwse-resize\",\"oblique\",\"opacity\",\"open-quote\",\"optimizeLegibility\",\"optimizeSpeed\",\"outset\",\"outside\",\"outside-shape\",\"overlay\",\"overline\",\"padding\",\"padding-box\",\"painted\",\"page\",\"paused\",\"perspective\",\"pinch-zoom\",\"plus-darker\",\"plus-lighter\",\"pointer\",\"polygon\",\"portrait\",\"pre\",\"pre-line\",\"pre-wrap\",\"preserve-3d\",\"progress\",\"push-button\",\"radial-gradient\",\"radio\",\"read-only\",\"read-write\",\"read-write-plaintext-only\",\"rectangle\",\"region\",\"relative\",\"repeat\",\"repeating-linear-gradient\",\"repeating-radial-gradient\",\"repeat-x\",\"repeat-y\",\"reset\",\"reverse\",\"rgb\",\"rgba\",\"ridge\",\"right\",\"rotate\",\"rotate3d\",\"rotateX\",\"rotateY\",\"rotateZ\",\"round\",\"row\",\"row-resize\",\"row-reverse\",\"rtl\",\"run-in\",\"running\",\"s-resize\",\"sans-serif\",\"saturation\",\"scale\",\"scale3d\",\"scaleX\",\"scaleY\",\"scaleZ\",\"screen\",\"scroll\",\"scrollbar\",\"scroll-position\",\"se-resize\",\"self-start\",\"self-end\",\"semi-condensed\",\"semi-expanded\",\"separate\",\"serif\",\"show\",\"single\",\"skew\",\"skewX\",\"skewY\",\"skip-white-space\",\"slide\",\"slider-horizontal\",\"slider-vertical\",\"sliderthumb-horizontal\",\"sliderthumb-vertical\",\"slow\",\"small\",\"small-caps\",\"small-caption\",\"smaller\",\"soft-light\",\"solid\",\"source-atop\",\"source-in\",\"source-out\",\"source-over\",\"space\",\"space-around\",\"space-between\",\"space-evenly\",\"spell-out\",\"square\",\"start\",\"static\",\"status-bar\",\"stretch\",\"stroke\",\"stroke-box\",\"sub\",\"subpixel-antialiased\",\"svg_masks\",\"super\",\"sw-resize\",\"symbolic\",\"symbols\",\"system-ui\",\"table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row\",\"table-row-group\",\"text\",\"text-bottom\",\"text-top\",\"textarea\",\"textfield\",\"thick\",\"thin\",\"threeddarkshadow\",\"threedface\",\"threedhighlight\",\"threedlightshadow\",\"threedshadow\",\"to\",\"top\",\"transform\",\"translate\",\"translate3d\",\"translateX\",\"translateY\",\"translateZ\",\"transparent\",\"ultra-condensed\",\"ultra-expanded\",\"underline\",\"unidirectional-pan\",\"unset\",\"up\",\"upper-latin\",\"uppercase\",\"url\",\"var\",\"vertical\",\"vertical-text\",\"view-box\",\"visible\",\"visibleFill\",\"visiblePainted\",\"visibleStroke\",\"visual\",\"w-resize\",\"wait\",\"wave\",\"wider\",\"window\",\"windowframe\",\"windowtext\",\"words\",\"wrap\",\"wrap-reverse\",\"x-large\",\"x-small\",\"xor\",\"xx-large\",\"xx-small\"].map(n=>({type:\"keyword\",label:n})).concat([\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"grey\",\"green\",\"greenyellow\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"rebeccapurple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"].map(n=>({type:\"constant\",label:n}))),MM=[\"a\",\"abbr\",\"address\",\"article\",\"aside\",\"b\",\"bdi\",\"bdo\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\"figure\",\"footer\",\"form\",\"header\",\"hgroup\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"meter\",\"nav\",\"ol\",\"output\",\"p\",\"pre\",\"ruby\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"tr\",\"u\",\"ul\"].map(n=>({type:\"type\",label:n})),AM=[\"@charset\",\"@color-profile\",\"@container\",\"@counter-style\",\"@font-face\",\"@font-feature-values\",\"@font-palette-values\",\"@import\",\"@keyframes\",\"@layer\",\"@media\",\"@namespace\",\"@page\",\"@position-try\",\"@property\",\"@scope\",\"@starting-style\",\"@supports\",\"@view-transition\"].map(n=>({type:\"keyword\",label:n})),jt=/^(\\w[\\w-]*|-\\w[\\w-]*|)$/,RM=/^-(-[\\w-]*)?$/;function DM(n,e){var t;if((n.name==\"(\"||n.type.isError)&&(n=n.parent||n),n.name!=\"ArgList\")return!1;let i=(t=n.parent)===null||t===void 0?void 0:t.firstChild;return i?.name!=\"Callee\"?!1:e.sliceString(i.from,i.to)==\"var\"}const sg=new iO,ZM=[\"Declaration\"];function BM(n){for(let e=n;;){if(e.type.isTop)return e;if(!(e=e.parent))return n}}function _1(n,e,t){if(e.to-e.from>4096){let i=sg.get(e);if(i)return i;let s=[],r=new Set,o=e.cursor(j.IncludeAnonymous);if(o.firstChild())do for(let l of _1(n,o.node,t))r.has(l.label)||(r.add(l.label),s.push(l));while(o.nextSibling());return sg.set(e,s),s}else{let i=[],s=new Set;return e.cursor().iterate(r=>{var o;if(t(r)&&r.matchContext(ZM)&&((o=r.node.nextSibling)===null||o===void 0?void 0:o.name)==\":\"){let l=n.sliceString(r.from,r.to);s.has(l)||(s.add(l),i.push({label:l,type:\"variable\"}))}}),i}}const XM=n=>e=>{let{state:t,pos:i}=e,s=fe(t).resolveInner(i,-1),r=s.type.isError&&s.from==s.to-1&&t.doc.sliceString(s.from,s.to)==\"-\";if(s.name==\"PropertyName\"||(r||s.name==\"TagName\")&&/^(Block|Styles)$/.test(s.resolve(s.to).name))return{from:s.from,options:Ca(),validFor:jt};if(s.name==\"ValueName\")return{from:s.from,options:ig,validFor:jt};if(s.name==\"PseudoClassName\")return{from:s.from,options:tg,validFor:jt};if(n(s)||(e.explicit||r)&&DM(s,t.doc))return{from:n(s)||r?s.from:i,options:_1(t.doc,BM(s),n),validFor:RM};if(s.name==\"TagName\"){for(let{parent:a}=s;a;a=a.parent)if(a.name==\"Block\")return{from:s.from,options:Ca(),validFor:jt};return{from:s.from,options:MM,validFor:jt}}if(s.name==\"AtKeyword\")return{from:s.from,options:AM,validFor:jt};if(!e.explicit)return null;let o=s.resolve(i),l=o.childBefore(i);return l&&l.name==\":\"&&o.name==\"PseudoClassSelector\"?{from:i,options:tg,validFor:jt}:l&&l.name==\":\"&&o.name==\"Declaration\"||o.name==\"ArgList\"?{from:i,options:ig,validFor:jt}:o.name==\"Block\"||o.name==\"Styles\"?{from:i,options:Ca(),validFor:jt}:null},LM=XM(n=>n.name==\"VariableName\"),el=xs.define({name:\"css\",parser:TM.configure({props:[ul.add({Declaration:Fr()}),dl.add({\"Block KeyframeList\":cO})]}),languageData:{commentTokens:{block:{open:\"/*\",close:\"*/\"}},indentOnInput:/^\\s*\\}$/,wordChars:\"-\"}});function EM(){return new Yc(el,el.data.of({autocomplete:LM}))}const WM=316,VM=317,ng=1,zM=2,qM=3,IM=4,_M=318,YM=320,NM=321,jM=5,GM=6,HM=0,Sc=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],Y1=125,FM=59,yc=47,UM=42,KM=43,JM=45,eA=60,tA=44,iA=63,sA=46,nA=91,rA=new T1({start:!1,shift(n,e){return e==jM||e==GM||e==YM?n:e==NM},strict:!1}),oA=new Ge((n,e)=>{let{next:t}=n;(t==Y1||t==-1||e.context)&&n.acceptToken(_M)},{contextual:!0,fallback:!0}),lA=new Ge((n,e)=>{let{next:t}=n,i;Sc.indexOf(t)>-1||t==yc&&((i=n.peek(1))==yc||i==UM)||t!=Y1&&t!=FM&&t!=-1&&!e.context&&n.acceptToken(WM)},{contextual:!0}),aA=new Ge((n,e)=>{n.next==nA&&!e.context&&n.acceptToken(VM)},{contextual:!0}),hA=new Ge((n,e)=>{let{next:t}=n;if(t==KM||t==JM){if(n.advance(),t==n.next){n.advance();let i=!e.context&&e.canShift(ng);n.acceptToken(i?ng:zM)}}else t==iA&&n.peek(1)==sA&&(n.advance(),n.advance(),(n.next<48||n.next>57)&&n.acceptToken(qM))},{contextual:!0});function Ta(n,e){return n>=65&&n<=90||n>=97&&n<=122||n==95||n>=192||!e&&n>=48&&n<=57}const cA=new Ge((n,e)=>{if(n.next!=eA||!e.dialectEnabled(HM)||(n.advance(),n.next==yc))return;let t=0;for(;Sc.indexOf(n.next)>-1;)n.advance(),t++;if(Ta(n.next,!0)){for(n.advance(),t++;Ta(n.next,!1);)n.advance(),t++;for(;Sc.indexOf(n.next)>-1;)n.advance(),t++;if(n.next==tA)return;for(let i=0;;i++){if(i==7){if(!Ta(n.next,!0))return;break}if(n.next!=\"extends\".charCodeAt(i))break;n.advance(),t++}}n.acceptToken(IM,-t)}),fA=hl({\"get set async static\":b.modifier,\"for while do if else switch try catch finally return throw break continue default case defer\":b.controlKeyword,\"in of await yield void typeof delete instanceof as satisfies\":b.operatorKeyword,\"let var const using function class extends\":b.definitionKeyword,\"import export from\":b.moduleKeyword,\"with debugger new\":b.keyword,TemplateString:b.special(b.string),super:b.atom,BooleanLiteral:b.bool,this:b.self,null:b.null,Star:b.modifier,VariableName:b.variableName,\"CallExpression/VariableName TaggedTemplateExpression/VariableName\":b.function(b.variableName),VariableDefinition:b.definition(b.variableName),Label:b.labelName,PropertyName:b.propertyName,PrivatePropertyName:b.special(b.propertyName),\"CallExpression/MemberExpression/PropertyName\":b.function(b.propertyName),\"FunctionDeclaration/VariableDefinition\":b.function(b.definition(b.variableName)),\"ClassDeclaration/VariableDefinition\":b.definition(b.className),\"NewExpression/VariableName\":b.className,PropertyDefinition:b.definition(b.propertyName),PrivatePropertyDefinition:b.definition(b.special(b.propertyName)),UpdateOp:b.updateOperator,\"LineComment Hashbang\":b.lineComment,BlockComment:b.blockComment,Number:b.number,String:b.string,Escape:b.escape,ArithOp:b.arithmeticOperator,LogicOp:b.logicOperator,BitOp:b.bitwiseOperator,CompareOp:b.compareOperator,RegExp:b.regexp,Equals:b.definitionOperator,Arrow:b.function(b.punctuation),\": Spread\":b.punctuation,\"( )\":b.paren,\"[ ]\":b.squareBracket,\"{ }\":b.brace,\"InterpolationStart InterpolationEnd\":b.special(b.brace),\".\":b.derefOperator,\", ;\":b.separator,\"@\":b.meta,TypeName:b.typeName,TypeDefinition:b.definition(b.typeName),\"type enum interface implements namespace module declare\":b.definitionKeyword,\"abstract global Privacy readonly override\":b.modifier,\"is keyof unique infer asserts\":b.operatorKeyword,JSXAttributeValue:b.attributeValue,JSXText:b.content,\"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag\":b.angleBracket,\"JSXIdentifier JSXNameSpacedName\":b.tagName,\"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName\":b.attributeName,\"JSXBuiltin/JSXIdentifier\":b.standard(b.tagName)}),uA={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},dA={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},pA={__proto__:null,\"<\":193},gA=Zs.deserialize({version:14,states:\"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-E<j-E<jO9kQ`O,5=_O!$rQ`O,5=_O!$wQlO,5;ZO!&zQMhO'#EkO!(eQ`O,5;ZO!(jQlO'#DyO!(tQpO,5;dO!(|QpO,5;dO%[QlO,5;dOOQ['#FT'#FTOOQ['#FV'#FVO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eOOQ['#FZ'#FZO!)[QlO,5;tOOQ!0Lf,5;y,5;yOOQ!0Lf,5;z,5;zOOQ!0Lf,5;|,5;|O%[QlO'#IpO!+_Q!0LrO,5<iO%[QlO,5;eO!&zQMhO,5;eO!+|QMhO,5;eO!-nQMhO'#E^O%[QlO,5;wOOQ!0Lf,5;{,5;{O!-uQ,UO'#FjO!.rQ,UO'#KXO!.^Q,UO'#KXO!.yQ,UO'#KXOOQO'#KX'#KXO!/_Q,UO,5<SOOOW,5<`,5<`O!/pQlO'#FvOOOW'#Io'#IoO7VO7dO,5<QO!/wQ,UO'#FxOOQ!0Lf,5<Q,5<QO!0hQ$IUO'#CyOOQ!0Lh'#C}'#C}O!0{O#@ItO'#DRO!1iQMjO,5<eO!1pQ`O,5<hO!3YQ(CWO'#GXO!3jQ`O'#GYO!3oQ`O'#GYO!5_Q(CWO'#G^O!6dQpO'#GbOOQO'#Gn'#GnO!,TQMhO'#GmOOQO'#Gp'#GpO!,TQMhO'#GoO!7VQ$IUO'#JlOOQ!0Lh'#Jl'#JlO!7aQ`O'#JkO!7oQ`O'#JjO!7wQ`O'#CuOOQ!0Lh'#C{'#C{O!8YQ`O'#C}OOQ!0Lh'#DV'#DVOOQ!0Lh'#DX'#DXO!8_Q`O,5<eO1SQ`O'#DZO!,TQMhO'#GPO!,TQMhO'#GRO!8gQ`O'#GTO!8lQ`O'#GUO!3oQ`O'#G[O!,TQMhO'#GaO<]Q`O'#JkO!8qQ`O'#EqO!9`Q`O,5<gOOQ!0Lb'#Cr'#CrO!9hQ`O'#ErO!:bQpO'#EsOOQ!0Lb'#KR'#KRO!:iQ!0LrO'#KaO9uQ!0LrO,5=cO`QlO,5>tOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!<hQ!0MxO,5:bO!:]QpO,5:`O!?RQ!0MxO,5:jO%[QlO,5:jO!AiQ!0MxO,5:lOOQO,5@z,5@zO!BYQMhO,5=_O!BhQ!0LrO'#JiO9`Q`O'#JiO!ByQ!0LrO,59ZO!CUQpO,59ZO!C^QMhO,59ZO:dQMhO,59ZO!CiQ`O,5;ZO!CqQ`O'#HbO!DVQ`O'#KdO%[QlO,5;}O!:]QpO,5<PO!D_Q`O,5=zO!DdQ`O,5=zO!DiQ`O,5=zO!DwQ`O,5=zO9uQ!0LrO,5=zO<]Q`O,5=jOOQO'#Cy'#CyO!EOQpO,5=gO!EWQMhO,5=hO!EcQ`O,5=jO!EhQ!bO,5=mO!EpQ`O'#K`O?YQ`O'#HWO9kQ`O'#HYO!EuQ`O'#HYO:dQMhO'#H[O!EzQ`O'#H[OOQ[,5=p,5=pO!FPQ`O'#H]O!FbQ`O'#CoO!FgQ`O,59PO!FqQ`O,59PO!HvQlO,59POOQ[,59P,59PO!IWQ!0LrO,59PO%[QlO,59PO!KcQlO'#HeOOQ['#Hf'#HfOOQ['#Hg'#HgO`QlO,5=}O!KyQ`O,5=}O`QlO,5>TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-E<f-E<fO#)kQ!0MSO,5;RODWQpO,5:rO#)uQpO,5:rODWQpO,5;RO!ByQ!0LrO,5:rOOQ!0Lb'#Ej'#EjOOQO,5;R,5;RO%[QlO,5;RO#*SQ!0LrO,5;RO#*_Q!0LrO,5;RO!CUQpO,5:rOOQO,5;X,5;XO#*mQ!0LrO,5;RPOOO'#I^'#I^P#+RO&2DjO,58|POOO,58|,58|OOOO-E<^-E<^OOQ!0Lh1G.p1G.pOOOO-E<_-E<_OOOO,59},59}O#+^Q!bO,59}OOOO-E<a-E<aOOQ!0Lf1G/g1G/gO#+cQ!fO,5?OO+}QlO,5?OOOQO,5?U,5?UO#+mQlO'#IdOOQO-E<b-E<bO#+zQ`O,5@`O#,SQ!fO,5@`O#,ZQ`O,5@nOOQ!0Lf1G/m1G/mO%[QlO,5@oO#,cQ`O'#IjOOQO-E<h-E<hO#,ZQ`O,5@nOOQ!0Lb1G0x1G0xOOQ!0Ln1G/x1G/xOOQ!0Ln1G0Y1G0YO%[QlO,5@lO#,wQ!0LrO,5@lO#-YQ!0LrO,5@lO#-aQ`O,5@kO9eQ`O,5@kO#-iQ`O,5@kO#-wQ`O'#ImO#-aQ`O,5@kOOQ!0Lb1G0w1G0wO!(tQpO,5:uO!)PQpO,5:uOOQS,5:w,5:wO#.iQdO,5:wO#.qQMhO1G2yO9kQ`O1G2yOOQ!0Lf1G0u1G0uO#/PQ!0MxO1G0uO#0UQ!0MvO,5;VOOQ!0Lh'#GW'#GWO#0rQ!0MzO'#JlO!$wQlO1G0uO#2}Q!fO'#JwO%[QlO'#JwO#3XQ`O,5:eOOQ!0Lh'#D_'#D_OOQ!0Lf1G1O1G1OO%[QlO1G1OOOQ!0Lf1G1f1G1fO#3^Q`O1G1OO#5rQ!0MxO1G1PO#5yQ!0MxO1G1PO#8aQ!0MxO1G1PO#8hQ!0MxO1G1PO#;OQ!0MxO1G1PO#=fQ!0MxO1G1PO#=mQ!0MxO1G1PO#=tQ!0MxO1G1PO#@[Q!0MxO1G1PO#@cQ!0MxO1G1PO#BpQ?MtO'#CiO#DkQ?MtO1G1`O#DrQ?MtO'#JsO#EVQ!0MxO,5?[OOQ!0Lb-E<n-E<nO#GdQ!0MxO1G1PO#HaQ!0MzO1G1POOQ!0Lf1G1P1G1PO#IdQMjO'#J|O#InQ`O,5:xO#IsQ!0MxO1G1cO#JgQ,UO,5<WO#JoQ,UO,5<XO#JwQ,UO'#FoO#K`Q`O'#FnOOQO'#KY'#KYOOQO'#In'#InO#KeQ,UO1G1nOOQ!0Lf1G1n1G1nOOOW1G1y1G1yO#KvQ?MtO'#JrO#LQQ`O,5<bO!)[QlO,5<bOOOW-E<m-E<mOOQ!0Lf1G1l1G1lO#LVQpO'#KXOOQ!0Lf,5<d,5<dO#L_QpO,5<dO#LdQMhO'#DTOOOO'#Ib'#IbO#LkO#@ItO,59mOOQ!0Lh,59m,59mO%[QlO1G2PO!8lQ`O'#IrO#LvQ`O,5<zOOQ!0Lh,5<w,5<wO!,TQMhO'#IuO#MdQMjO,5=XO!,TQMhO'#IwO#NVQMjO,5=ZO!&zQMhO,5=]OOQO1G2S1G2SO#NaQ!dO'#CrO#NtQ(CWO'#ErO$ |QpO'#GbO$!dQ!dO,5<sO$!kQ`O'#K[O9eQ`O'#K[O$!yQ`O,5<uO$#aQ!dO'#C{O!,TQMhO,5<tO$#kQ`O'#GZO$$PQ`O,5<tO$$UQ!dO'#GWO$$cQ!dO'#K]O$$mQ`O'#K]O!&zQMhO'#K]O$$rQ`O,5<xO$$wQlO'#JvO$%RQpO'#GcO#$`QpO'#GcO$%dQ`O'#GgO!3oQ`O'#GkO$%iQ!0LrO'#ItO$%tQpO,5<|OOQ!0Lp,5<|,5<|O$%{QpO'#GcO$&YQpO'#GdO$&kQpO'#GdO$&pQMjO,5=XO$'QQMjO,5=ZOOQ!0Lh,5=^,5=^O!,TQMhO,5@VO!,TQMhO,5@VO$'bQ`O'#IyO$'vQ`O,5@UO$(OQ`O,59aOOQ!0Lh,59i,59iO$(TQ`O,5@VO$)TQ$IYO,59uOOQ!0Lh'#Jp'#JpO$)vQMjO,5<kO$*iQMjO,5<mO@zQ`O,5<oOOQ!0Lh,5<p,5<pO$*sQ`O,5<vO$*xQMjO,5<{O$+YQ`O'#KPO!$wQlO1G2RO$+_Q`O1G2RO9eQ`O'#KSO9eQ`O'#EtO%[QlO'#EtO9eQ`O'#I{O$+dQ!0LrO,5@{OOQ[1G2}1G2}OOQ[1G4`1G4`OOQ!0Lf1G/|1G/|OOQ!0Lf1G/z1G/zO$-fQ!0MxO1G0UOOQ[1G2y1G2yO!&zQMhO1G2yO%[QlO1G2yO#.tQ`O1G2yO$/jQMhO'#EkOOQ!0Lb,5@T,5@TO$/wQ!0LrO,5@TOOQ[1G.u1G.uO!ByQ!0LrO1G.uO!CUQpO1G.uO!C^QMhO1G.uO$0YQ`O1G0uO$0_Q`O'#CiO$0jQ`O'#KeO$0rQ`O,5=|O$0wQ`O'#KeO$0|Q`O'#KeO$1[Q`O'#JRO$1jQ`O,5AOO$1rQ!fO1G1iOOQ!0Lf1G1k1G1kO9kQ`O1G3fO@zQ`O1G3fO$1yQ`O1G3fO$2OQ`O1G3fO!DiQ`O1G3fO9uQ!0LrO1G3fOOQ[1G3f1G3fO!EcQ`O1G3UO!&zQMhO1G3RO$2TQ`O1G3ROOQ[1G3S1G3SO!&zQMhO1G3SO$2YQ`O1G3SO$2bQpO'#HQOOQ[1G3U1G3UO!6_QpO'#I}O!EhQ!bO1G3XOOQ[1G3X1G3XOOQ[,5=r,5=rO$2jQMhO,5=tO9kQ`O,5=tO$%dQ`O,5=vO9`Q`O,5=vO!CUQpO,5=vO!C^QMhO,5=vO:dQMhO,5=vO$2xQ`O'#KcO$3TQ`O,5=wOOQ[1G.k1G.kO$3YQ!0LrO1G.kO@zQ`O1G.kO$3eQ`O1G.kO9uQ!0LrO1G.kO$5mQ!fO,5AQO$5zQ`O,5AQO9eQ`O,5AQO$6VQlO,5>PO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5<iO$BOQ!fO1G4jOOQO1G4p1G4pO%[QlO,5?OO$BYQ`O1G5zO$BbQ`O1G6YO$BjQ!fO1G6ZO9eQ`O,5?UO$BtQ!0MxO1G6WO%[QlO1G6WO$CUQ!0LrO1G6WO$CgQ`O1G6VO$CgQ`O1G6VO9eQ`O1G6VO$CoQ`O,5?XO9eQ`O,5?XOOQO,5?X,5?XO$DTQ`O,5?XO$+YQ`O,5?XOOQO-E<k-E<kOOQS1G0a1G0aOOQS1G0c1G0cO#.lQ`O1G0cOOQ[7+(e7+(eO!&zQMhO7+(eO%[QlO7+(eO$DcQ`O7+(eO$DnQMhO7+(eO$D|Q!0MzO,5=XO$GXQ!0MzO,5=ZO$IdQ!0MzO,5=XO$KuQ!0MzO,5=ZO$NWQ!0MzO,59uO%!]Q!0MzO,5<kO%$hQ!0MzO,5<mO%&sQ!0MzO,5<{OOQ!0Lf7+&a7+&aO%)UQ!0MxO7+&aO%)xQlO'#IfO%*VQ`O,5@cO%*_Q!fO,5@cOOQ!0Lf1G0P1G0PO%*iQ`O7+&jOOQ!0Lf7+&j7+&jO%*nQ?MtO,5:fO%[QlO7+&zO%*xQ?MtO,5:bO%+VQ?MtO,5:jO%+aQ?MtO,5:lO%+kQMhO'#IiO%+uQ`O,5@hOOQ!0Lh1G0d1G0dOOQO1G1r1G1rOOQO1G1s1G1sO%+}Q!jO,5<ZO!)[QlO,5<YOOQO-E<l-E<lOOQ!0Lf7+'Y7+'YOOOW7+'e7+'eOOOW1G1|1G1|O%,YQ`O1G1|OOQ!0Lf1G2O1G2OOOOO,59o,59oO%,_Q!dO,59oOOOO-E<`-E<`OOQ!0Lh1G/X1G/XO%,fQ!0MxO7+'kOOQ!0Lh,5?^,5?^O%-YQMhO1G2fP%-aQ`O'#IrPOQ!0Lh-E<p-E<pO%-}QMjO,5?aOOQ!0Lh-E<s-E<sO%.pQMjO,5?cOOQ!0Lh-E<u-E<uO%.zQ!dO1G2wO%/RQ!dO'#CrO%/iQMhO'#KSO$$wQlO'#JvOOQ!0Lh1G2_1G2_O%/sQ`O'#IqO%0[Q`O,5@vO%0[Q`O,5@vO%0dQ`O,5@vO%0oQ`O,5@vOOQO1G2a1G2aO%0}QMjO1G2`O$+YQ`O'#K[O!,TQMhO1G2`O%1_Q(CWO'#IsO%1lQ`O,5@wO!&zQMhO,5@wO%1tQ!dO,5@wOOQ!0Lh1G2d1G2dO%4UQ!fO'#CiO%4`Q`O,5=POOQ!0Lb,5<},5<}O%4hQpO,5<}OOQ!0Lb,5=O,5=OOCwQ`O,5<}O%4sQpO,5<}OOQ!0Lb,5=R,5=RO$+YQ`O,5=VOOQO,5?`,5?`OOQO-E<r-E<rOOQ!0Lp1G2h1G2hO#$`QpO,5<}O$$wQlO,5=PO%5RQ`O,5=OO%5^QpO,5=OO!,TQMhO'#IuO%6WQMjO1G2sO!,TQMhO'#IwO%6yQMjO1G2uO%7TQMjO1G5qO%7_QMjO1G5qOOQO,5?e,5?eOOQO-E<w-E<wOOQO1G.{1G.{O!,TQMhO1G5qO!,TQMhO1G5qO!:]QpO,59wO%[QlO,59wOOQ!0Lh,5<j,5<jO%7lQ`O1G2ZO!,TQMhO1G2bO%7qQ!0MxO7+'mOOQ!0Lf7+'m7+'mO!$wQlO7+'mO%8eQ`O,5;`OOQ!0Lb,5?g,5?gOOQ!0Lb-E<y-E<yO%8jQ!dO'#K^O#(ZQ`O7+(eO4UQ!fO7+(eO$DfQ`O7+(eO%8tQ!0MvO'#CiO%9XQ!0MvO,5=SO%9lQ`O,5=SO%9tQ`O,5=SOOQ!0Lb1G5o1G5oOOQ[7+$a7+$aO!ByQ!0LrO7+$aO!CUQpO7+$aO!$wQlO7+&aO%9yQ`O'#JQO%:bQ`O,5APOOQO1G3h1G3hO9kQ`O,5APO%:bQ`O,5APO%:jQ`O,5APOOQO,5?m,5?mOOQO-E=P-E=POOQ!0Lf7+'T7+'TO%:oQ`O7+)QO9uQ!0LrO7+)QO9kQ`O7+)QO@zQ`O7+)QO%:tQ`O7+)QOOQ[7+)Q7+)QOOQ[7+(p7+(pO%:yQ!0MvO7+(mO!&zQMhO7+(mO!E^Q`O7+(nOOQ[7+(n7+(nO!&zQMhO7+(nO%;TQ`O'#KbO%;`Q`O,5=lOOQO,5?i,5?iOOQO-E<{-E<{OOQ[7+(s7+(sO%<rQpO'#HZOOQ[1G3`1G3`O!&zQMhO1G3`O%[QlO1G3`O%<yQ`O1G3`O%=UQMhO1G3`O9uQ!0LrO1G3bO$%dQ`O1G3bO9`Q`O1G3bO!CUQpO1G3bO!C^QMhO1G3bO%=dQ`O'#JPO%=xQ`O,5@}O%>QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-E<c-E<cOOQO,5?V,5?VOOQO-E<i-E<iO!CUQpO1G/sOOQO-E<e-E<eOOQ!0Ln1G0]1G0]OOQ!0Lf7+%u7+%uO#(ZQ`O7+%uOOQ!0Lf7+&`7+&`O?YQ`O7+&`O!CUQpO7+&`OOQO7+%x7+%xO$AlQ!0MxO7+&XOOQO7+&X7+&XO%[QlO7+&XO%@nQ!0LrO7+&XO!ByQ!0LrO7+%xO!CUQpO7+%xO%@yQ!0LrO7+&XO%AXQ!0MxO7++rO%[QlO7++rO%AiQ`O7++qO%AiQ`O7++qOOQO1G4s1G4sO9eQ`O1G4sO%AqQ`O1G4sOOQS7+%}7+%}O#(ZQ`O<<LPO4UQ!fO<<LPO%BPQ`O<<LPOOQ[<<LP<<LPO!&zQMhO<<LPO%[QlO<<LPO%BXQ`O<<LPO%BdQ!0MzO,5?aO%DoQ!0MzO,5?cO%FzQ!0MzO1G2`O%I]Q!0MzO1G2sO%KhQ!0MzO1G2uO%MsQ!fO,5?QO%[QlO,5?QOOQO-E<d-E<dO%M}Q`O1G5}OOQ!0Lf<<JU<<JUO%NVQ?MtO1G0uO&!^Q?MtO1G1PO&!eQ?MtO1G1PO&$fQ?MtO1G1PO&$mQ?MtO1G1PO&&nQ?MtO1G1PO&(oQ?MtO1G1PO&(vQ?MtO1G1PO&(}Q?MtO1G1PO&+OQ?MtO1G1PO&+VQ?MtO1G1PO&+^Q!0MxO<<JfO&-UQ?MtO1G1PO&.RQ?MvO1G1PO&/UQ?MvO'#JlO&1[Q?MtO1G1cO&1iQ?MtO1G0UO&1sQMjO,5?TOOQO-E<g-E<gO!)[QlO'#FqOOQO'#KZ'#KZOOQO1G1u1G1uO&1}Q`O1G1tO&2SQ?MtO,5?[OOOW7+'h7+'hOOOO1G/Z1G/ZO&2^Q!dO1G4xOOQ!0Lh7+(Q7+(QP!&zQMhO,5?^O!,TQMhO7+(cO&2eQ`O,5?]O9eQ`O,5?]O$+YQ`O,5?]OOQO-E<o-E<oO&2sQ`O1G6bO&2sQ`O1G6bO&2{Q`O1G6bO&3WQMjO7+'zO&3hQ!dO,5?_O&3rQ`O,5?_O!&zQMhO,5?_OOQO-E<q-E<qO&3wQ!dO1G6cO&4RQ`O1G6cO&4ZQ`O1G2kO!&zQMhO1G2kOOQ!0Lb1G2i1G2iOOQ!0Lb1G2j1G2jO%4hQpO1G2iO!CUQpO1G2iOCwQ`O1G2iOOQ!0Lb1G2q1G2qO&4`QpO1G2iO&4nQ`O1G2kO$+YQ`O1G2jOCwQ`O1G2jO$$wQlO1G2kO&4vQ`O1G2jO&5jQMjO,5?aOOQ!0Lh-E<t-E<tO&6]QMjO,5?cOOQ!0Lh-E<v-E<vO!,TQMhO7++]O&6gQMjO7++]O&6qQMjO7++]OOQ!0Lh1G/c1G/cO&7OQ`O1G/cOOQ!0Lh7+'u7+'uO&7TQMjO7+'|O&7eQ!0MxO<<KXOOQ!0Lf<<KX<<KXO&8XQ`O1G0zO!&zQMhO'#IzO&8^Q`O,5@xO&:`Q!fO<<LPO!&zQMhO1G2nO&:gQ!0LrO1G2nOOQ[<<G{<<G{O!ByQ!0LrO<<G{O&:xQ!0MxO<<I{OOQ!0Lf<<I{<<I{OOQO,5?l,5?lO&;lQ`O,5?lO&;qQ`O,5?lOOQO-E=O-E=OO&<PQ`O1G6kO&<PQ`O1G6kO9kQ`O1G6kO@zQ`O<<LlOOQ[<<Ll<<LlO&<XQ`O<<LlO9uQ!0LrO<<LlO9kQ`O<<LlOOQ[<<LX<<LXO%:yQ!0MvO<<LXOOQ[<<LY<<LYO!E^Q`O<<LYO&<^QpO'#I|O&<iQ`O,5@|O!)[QlO,5@|OOQ[1G3W1G3WOOQO'#JO'#JOO9uQ!0LrO'#JOO&<qQpO,5=uOOQ[,5=u,5=uO&<xQpO'#EgO&=PQpO'#GeO&=UQ`O7+(zO&=ZQ`O7+(zOOQ[7+(z7+(zO!&zQMhO7+(zO%[QlO7+(zO&=cQ`O7+(zOOQ[7+(|7+(|O9uQ!0LrO7+(|O$%dQ`O7+(|O9`Q`O7+(|O!CUQpO7+(|O&=nQ`O,5?kOOQO-E<}-E<}OOQO'#H^'#H^O&=yQ`O1G6iO9uQ!0LrO<<GqOOQ[<<Gq<<GqO@zQ`O<<GqO&>RQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<<Ly<<LyOOQ[<<L{<<L{OOQ[-E=Q-E=QOOQ[1G3z1G3zO&>nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<<Ia<<IaOOQ!0Lf<<Iz<<IzO?YQ`O<<IzOOQO<<Is<<IsO$AlQ!0MxO<<IsO%[QlO<<IsOOQO<<Id<<IdO!ByQ!0LrO<<IdO&?SQ!0LrO<<IsO&?_Q!0MxO<= ^O&?oQ`O<= ]OOQO7+*_7+*_O9eQ`O7+*_OOQ[ANAkANAkO&?wQ!fOANAkO!&zQMhOANAkO#(ZQ`OANAkO4UQ!fOANAkO&@OQ`OANAkO%[QlOANAkO&@WQ!0MzO7+'zO&BiQ!0MzO,5?aO&DtQ!0MzO,5?cO&GPQ!0MzO7+'|O&IbQ!fO1G4lO&IlQ?MtO7+&aO&KpQ?MvO,5=XO&MwQ?MvO,5=ZO&NXQ?MvO,5=XO&NiQ?MvO,5=ZO&NyQ?MvO,59uO'#PQ?MvO,5<kO'%SQ?MvO,5<mO''hQ?MvO,5<{O')^Q?MtO7+'kO')kQ?MtO7+'mO')xQ`O,5<]OOQO7+'`7+'`OOQ!0Lh7+*d7+*dO')}QMjO<<K}OOQO1G4w1G4wO'*UQ`O1G4wO'*aQ`O1G4wO'*oQ`O7++|O'*oQ`O7++|O!&zQMhO1G4yO'*wQ!dO1G4yO'+RQ`O7++}O'+ZQ`O7+(VO'+fQ!dO7+(VOOQ!0Lb7+(T7+(TOOQ!0Lb7+(U7+(UO!CUQpO7+(TOCwQ`O7+(TO'+pQ`O7+(VO!&zQMhO7+(VO$+YQ`O7+(UO'+uQ`O7+(VOCwQ`O7+(UO'+}QMjO<<NwO!,TQMhO<<NwOOQ!0Lh7+$}7+$}O',XQ!dO,5?fOOQO-E<x-E<xO',cQ!0MvO7+(YO!&zQMhO7+(YOOQ[AN=gAN=gO9kQ`O1G5WOOQO1G5W1G5WO',sQ`O1G5WO',xQ`O7+,VO',xQ`O7+,VO9uQ!0LrOANBWO@zQ`OANBWOOQ[ANBWANBWO'-QQ`OANBWOOQ[ANAsANAsOOQ[ANAtANAtO'-VQ`O,5?hOOQO-E<z-E<zO'-bQ?MtO1G6hOOQO,5?j,5?jOOQO-E<|-E<|OOQ[1G3a1G3aO'-lQ`O,5=POOQ[<<Lf<<LfO!&zQMhO<<LfO&=UQ`O<<LfO'-qQ`O<<LfO%[QlO<<LfOOQ[<<Lh<<LhO9uQ!0LrO<<LhO$%dQ`O<<LhO9`Q`O<<LhO'-yQpO1G5VO'.UQ`O7+,TOOQ[AN=]AN=]O9uQ!0LrOAN=]OOQ[<= r<= rOOQ[<= s<= sO'.^Q`O<= rO'.cQ`O<= sOOQ[<<Lq<<LqO'.hQ`O<<LqO'.mQlO<<LqOOQ[1G3{1G3{O?YQ`O7+)lO'.tQ`O<<JQO'/PQ?MtO<<JQOOQO<<Hy<<HyOOQ!0LfAN?fAN?fOOQOAN?_AN?_O$AlQ!0MxOAN?_OOQOAN?OAN?OO%[QlOAN?_OOQO<<My<<MyOOQ[G27VG27VO!&zQMhOG27VO#(ZQ`OG27VO'/ZQ!fOG27VO4UQ!fOG27VO'/bQ`OG27VO'/jQ?MtO<<JfO'/wQ?MvO1G2`O'1mQ?MvO,5?aO'3pQ?MvO,5?cO'5sQ?MvO1G2sO'7vQ?MvO1G2uO'9yQ?MtO<<KXO':WQ?MtO<<I{OOQO1G1w1G1wO!,TQMhOANAiOOQO7+*c7+*cO':eQ`O7+*cO':pQ`O<= hO':xQ!dO7+*eOOQ!0Lb<<Kq<<KqO$+YQ`O<<KqOCwQ`O<<KqO';SQ`O<<KqO!&zQMhO<<KqOOQ!0Lb<<Ko<<KoO!CUQpO<<KoO';_Q!dO<<KqOOQ!0Lb<<Kp<<KpO';iQ`O<<KqO!&zQMhO<<KqO$+YQ`O<<KpO';nQMjOANDcO';xQ!0MvO<<KtOOQO7+*r7+*rO9kQ`O7+*rO'<YQ`O<= qOOQ[G27rG27rO9uQ!0LrOG27rO@zQ`OG27rO!)[QlO1G5SO'<bQ`O7+,SO'<jQ`O1G2kO&=UQ`OANBQOOQ[ANBQANBQO!&zQMhOANBQO'<oQ`OANBQOOQ[ANBSANBSO9uQ!0LrOANBSO$%dQ`OANBSOOQO'#H_'#H_OOQO7+*q7+*qOOQ[G22wG22wOOQ[ANE^ANE^OOQ[ANE_ANE_OOQ[ANB]ANB]O'<wQ`OANB]OOQ[<<MW<<MWO!)[QlOAN?lOOQOG24yG24yO$AlQ!0MxOG24yO#(ZQ`OLD,qOOQ[LD,qLD,qO!&zQMhOLD,qO'<|Q!fOLD,qO'=TQ?MvO7+'zO'>yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<<M}<<M}OOQ!0LbANA]ANA]O$+YQ`OANA]OCwQ`OANA]O'EVQ!dOANA]OOQ!0LbANAZANAZO'E^Q`OANA]O!&zQMhOANA]O'EiQ!dOANA]OOQ!0LbANA[ANA[OOQO<<N^<<N^OOQ[LD-^LD-^O9uQ!0LrOLD-^O'EsQ?MtO7+*nOOQO'#Gf'#GfOOQ[G27lG27lO&=UQ`OG27lO!&zQMhOG27lOOQ[G27nG27nO9uQ!0LrOG27nOOQ[G27wG27wO'E}Q?MtOG25WOOQOLD*eLD*eOOQ[!$(!]!$(!]O#(ZQ`O!$(!]O!&zQMhO!$(!]O'FXQ!0MzOG27TOOQ!0LbG26wG26wO$+YQ`OG26wO'HjQ`OG26wOCwQ`OG26wO'HuQ!dOG26wO!&zQMhOG26wOOQ[!$(!x!$(!xOOQ[LD-WLD-WO&=UQ`OLD-WOOQ[LD-YLD-YOOQ[!)9Ew!)9EwO#(ZQ`O!)9EwOOQ!0LbLD,cLD,cO$+YQ`OLD,cOCwQ`OLD,cO'H|Q`OLD,cO'IXQ!dOLD,cOOQ[!$(!r!$(!rOOQ[!.K;c!.K;cO'I`Q?MvOG27TOOQ!0Lb!$( }!$( }O$+YQ`O!$( }OCwQ`O!$( }O'KUQ`O!$( }OOQ!0Lb!)9Ei!)9EiO$+YQ`O!)9EiOCwQ`O!)9EiOOQ!0Lb!.K;T!.K;TO$+YQ`O!.K;TOOQ!0Lb!4/0o!4/0oO!)[QlO'#DzO1PQ`O'#EXO'KaQ!fO'#JrO'KhQ!L^O'#DvO'KoQlO'#EOO'KvQ!fO'#CiO'N^Q!fO'#CiO!)[QlO'#EQO'NnQlO,5;ZO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO'#IpO(!qQ`O,5<iO!)[QlO,5;eO(!yQMhO,5;eO($dQMhO,5;eO!)[QlO,5;wO!&zQMhO'#GmO(!yQMhO'#GmO!&zQMhO'#GoO(!yQMhO'#GoO1SQ`O'#DZO1SQ`O'#DZO!&zQMhO'#GPO(!yQMhO'#GPO!&zQMhO'#GRO(!yQMhO'#GRO!&zQMhO'#GaO(!yQMhO'#GaO!)[QlO,5:jO($kQpO'#D_O($uQpO'#JvO!)[QlO,5@oO'NnQlO1G0uO(%PQ?MtO'#CiO!)[QlO1G2PO!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO(%ZQ!dO'#CrO!&zQMhO,5<tO(!yQMhO,5<tO'NnQlO1G2RO!)[QlO7+&zO!&zQMhO1G2`O(!yQMhO1G2`O!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO!&zQMhO1G2bO(!yQMhO1G2bO'NnQlO7+'mO'NnQlO7+&aO!&zQMhOANAiO(!yQMhOANAiO(%nQ`O'#EoO(%sQ`O'#EoO(%{Q`O'#F]O(&QQ`O'#EyO(&VQ`O'#KTO(&bQ`O'#KRO(&mQ`O,5;ZO(&rQMjO,5<eO(&yQ`O'#GYO('OQ`O'#GYO('TQ`O,5<eO(']Q`O,5<gO('eQ`O,5;ZO('mQ?MtO1G1`O('tQ`O,5<tO('yQ`O,5<tO((OQ`O,5<vO((TQ`O,5<vO((YQ`O1G2RO((_Q`O1G0uO((dQMjO<<K}O((kQMjO<<K}O((rQMhO'#F|O9`Q`O'#F{OAuQ`O'#EnO!)[QlO,5;tO!3oQ`O'#GYO!3oQ`O'#GYO!3oQ`O'#G[O!3oQ`O'#G[O!,TQMhO7+(cO!,TQMhO7+(cO%.zQ!dO1G2wO%.zQ!dO1G2wO!&zQMhO,5=]O!&zQMhO,5=]\",stateData:\"()x~O'|OS'}OSTOS(ORQ~OPYOQYOSfOY!VOaqOdzOeyOl!POpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!uwO!xxO!|]O$W|O$niO%h}O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO&W!WO&^!XO&`!YO&b!ZO&d![O&g!]O&m!^O&s!_O&u!`O&w!aO&y!bO&{!cO(TSO(VTO(YUO(aVO(o[O~OWtO~P`OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa!wOs!nO!S!oO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!xO#W!pO#X!pO#[!zO#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O(O!{O~OP]XR]X[]Xa]Xj]Xr]X!Q]X!S]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X'z]X(a]X(r]X(y]X(z]X~O!g%RX~P(qO_!}O(V#PO(W!}O(X#PO~O_#QO(X#PO(Y#PO(Z#QO~Ox#SO!U#TO(b#TO(c#VO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T<ZO(VTO(YUO(aVO(o[O~O![#ZO!]#WO!Y(hP!Y(vP~P+}O!^#cO~P`OPYOQYOSfOd!jOe!iOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(VTO(YUO(aVO(o[O~Op#mO![#iO!|]O#i#lO#j#iO(T<[O!k(sP~P.iO!l#oO(T#nO~O!x#sO!|]O%h#tO~O#k#uO~O!g#vO#k#uO~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!]$_O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa(fX'z(fX'w(fX!k(fX!Y(fX!_(fX%i(fX!g(fX~P1qO#S$dO#`$eO$Q$eOP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX!_(gX%i(gX~Oa(gX'z(gX'w(gX!Y(gX!k(gXv(gX!g(gX~P4UO#`$eO~O$]$hO$_$gO$f$mO~OSfO!_$nO$i$oO$k$qO~Oh%VOj%dOk%dOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T$sO(VTO(YUO(a$uO(y$}O(z%POg(^P~Ol%[O~P7eO!l%eO~O!S%hO!_%iO(T%gO~O!g%mO~Oa%nO'z%nO~O!Q%rO~P%[O(U!lO~P%[O%n%vO~P%[Oh%VO!l%eO(T%gO(U!lO~Oe%}O!l%eO(T%gO~Oj$RO~O!_&PO(T%gO(U!lO(VTO(YUO`)WP~O!Q&SO!l&RO%j&VO&T&WO~P;SO!x#sO~O%s&YO!S)SX!_)SX(T)SX~O(T&ZO~Ol!PO!u&`O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO~Od&eOe&dO!x&bO%h&cO%{&aO~P<bOd&hOeyOl!PO!_&gO!u&`O!xxO!|]O%h}O%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO~Ob&kO#`&nO%j&iO(U!lO~P=gO!l&oO!u&sO~O!l#oO~O!_XO~Oa%nO'x&{O'z%nO~Oa%nO'x'OO'z%nO~Oa%nO'x'QO'z%nO~O'w]X!Y]Xv]X!k]X&[]X!_]X%i]X!g]X~P(qO!b'_O!c'WO!d'WO(U!lO(VTO(YUO~Os'UO!S'TO!['XO(e'SO!^(iP!^(xP~P@nOn'bO!_'`O(T%gO~Oe'gO!l%eO(T%gO~O!Q&SO!l&RO~Os!nO!S!oO!|<VO#T!pO#U!pO#W!pO#X!pO(U!lO(VTO(YUO(e!mO(o!sO~O!b'mO!c'lO!d'lO#V!pO#['nO#]'nO~PBYOa%nOh%VO!g#vO!l%eO'z%nO(r'pO~O!p'tO#`'rO~PChOs!nO!S!oO(VTO(YUO(e!mO(o!sO~O!_XOs(mX!S(mX!b(mX!c(mX!d(mX!|(mX#T(mX#U(mX#V(mX#W(mX#X(mX#[(mX#](mX(U(mX(V(mX(Y(mX(e(mX(o(mX~O!c'lO!d'lO(U!lO~PDWO(P'xO(Q'xO(R'zO~O_!}O(V'|O(W!}O(X'|O~O_#QO(X'|O(Y'|O(Z#QO~Ov(OO~P%[Ox#SO!U#TO(b#TO(c(RO~O![(TO!Y'WX!Y'^X!]'WX!]'^X~P+}O!](VO!Y(hX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!](VO!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~O!Y(hX~PHRO!Y([O~O!Y(uX!](uX!g(uX!k(uX(r(uX~O#`(uX#k#dX!^(uX~PJUO#`(]O!Y(wX!](wX~O!](^O!Y(vX~O!Y(aO~O#`$eO~PJUO!^(bO~P`OR#zO!Q#yO!S#{O!l#xO(aVOP!na[!naj!nar!na!]!na!p!na#R!na#n!na#o!na#p!na#q!na#r!na#s!na#t!na#u!na#v!na#x!na#z!na#{!na(r!na(y!na(z!na~Oa!na'z!na'w!na!Y!na!k!nav!na!_!na%i!na!g!na~PKlO!k(cO~O!g#vO#`(dO(r'pO!](tXa(tX'z(tX~O!k(tX~PNXO!S%hO!_%iO!|]O#i(iO#j(hO(T%gO~O!](jO!k(sX~O!k(lO~O!S%hO!_%iO#j(hO(T%gO~OP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX~O!g#vO!k(gX~P! uOR(nO!Q(mO!l#xO#S$dO!|!{a!S!{a~O!x!{a%h!{a!_!{a#i!{a#j!{a(T!{a~P!#vO!x(rO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~O#k(xO~O![(zO!k(kP~P%[O(e(|O(o[O~O!S)OO!l#xO(e(|O(o[O~OP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S*YO!_*ZO!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(VTO(YUO(a$uO(y$}O(z%PO~Op*`O![*^O(T*XO!k)OP~P!1uO#k*aO~O!l*bO~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(T*dO(VTO(YUO(a$uO(y$}O(z%PO~O![*gO!Y)PP~P!3tOr*sOs!nO!S*iO!b*qO!c*kO!d*kO!l*bO#[*rO%`*mO(U!lO(VTO(YUO(e!mO~O!^*pO~P!5iO#S$dOn(`X!Q(`X'y(`X(y(`X(z(`X!](`X#`(`X~Og(`X$O(`X~P!6kOn*xO#`*wOg(_X!](_X~O!]*yOg(^X~Oj%dOk%dOl%dO(T&ZOg(^P~Os*|O~Og)}O(T&ZO~O!l+SO~O(T(vO~Op+WO!S%hO![#iO!_%iO!|]O#i#lO#j#iO(T%gO!k(sP~O!g#vO#k+XO~O!S%hO![+ZO!](^O!_%iO(T%gO!Y(vP~Os'[O!S+]O![+[O(VTO(YUO(e(|O~O!^(xP~P!9|O!]+^Oa)TX'z)TX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa!ja!]!ja'z!ja'w!ja!Y!ja!k!jav!ja!_!ja%i!ja!g!ja~P!:tOR#zO!Q#yO!S#{O!l#xO(aVOP!ra[!raj!rar!ra!]!ra!p!ra#R!ra#n!ra#o!ra#p!ra#q!ra#r!ra#s!ra#t!ra#u!ra#v!ra#x!ra#z!ra#{!ra(r!ra(y!ra(z!ra~Oa!ra'z!ra'w!ra!Y!ra!k!rav!ra!_!ra%i!ra!g!ra~P!=[OR#zO!Q#yO!S#{O!l#xO(aVOP!ta[!taj!tar!ta!]!ta!p!ta#R!ta#n!ta#o!ta#p!ta#q!ta#r!ta#s!ta#t!ta#u!ta#v!ta#x!ta#z!ta#{!ta(r!ta(y!ta(z!ta~Oa!ta'z!ta'w!ta!Y!ta!k!tav!ta!_!ta%i!ta!g!ta~P!?rOh%VOn+gO!_'`O%i+fO~O!g+iOa(]X!_(]X'z(]X!](]X~Oa%nO!_XO'z%nO~Oh%VO!l%eO~Oh%VO!l%eO(T%gO~O!g#vO#k(xO~Ob+tO%j+uO(T+qO(VTO(YUO!^)XP~O!]+vO`)WX~O[+zO~O`+{O~O!_&PO(T%gO(U!lO`)WP~O%j,OO~P;SOh%VO#`,SO~Oh%VOn,VO!_$|O~O!_,XO~O!Q,ZO!_XO~O%n%vO~O!x,`O~Oe,eO~Ob,fO(T#nO(VTO(YUO!^)VP~Oe%}O~O%j!QO(T&ZO~P=gO[,kO`,jO~OPYOQYOSfOdzOeyOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!iuO!lZO!oYO!pYO!qYO!svO!xxO!|]O$niO%h}O(VTO(YUO(aVO(o[O~O!_!eO!u!gO$W!kO(T!dO~P!FyO`,jOa%nO'z%nO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa,pOl!OO!uwO%l!OO%m!OO%n!OO~P!IcO!l&oO~O&^,vO~O!_,xO~O&o,zO&q,{OP&laQ&laS&laY&laa&lad&lae&lal&lap&lar&las&lat&laz&la|&la!O&la!S&la!W&la!X&la!_&la!i&la!l&la!o&la!p&la!q&la!s&la!u&la!x&la!|&la$W&la$n&la%h&la%j&la%l&la%m&la%n&la%q&la%s&la%v&la%w&la%y&la&W&la&^&la&`&la&b&la&d&la&g&la&m&la&s&la&u&la&w&la&y&la&{&la'w&la(T&la(V&la(Y&la(a&la(o&la!^&la&e&lab&la&j&la~O(T-QO~Oh!eX!]!RX!^!RX!g!RX!g!eX!l!eX#`!RX~O!]!eX!^!eX~P#!iO!g-VO#`-UOh(jX!]#hX!^#hX!g(jX!l(jX~O!](jX!^(jX~P##[Oh%VO!g-XO!l%eO!]!aX!^!aX~Os!nO!S!oO(VTO(YUO(e!mO~OP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO#x<eO#z<gO#{<hO(aVO(r$YO(y#|O(z#}O~O$O.{O~P#BwO#S$dO#`<nO$Q<nO$O(gX!^(gX~P! uOa'da!]'da'z'da'w'da!k'da!Y'dav'da!_'da%i'da!g'da~P!:tO[#mia#mij#mir#mi!]#mi#R#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO(y#mi(z#mi~P#EyOn>]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]<iO!^(fX~P#BwO!^/ZO~O!g)hO$f({X~O$f/]O~Ov/^O~P!&zOx)yO(b)zO(c/aO~O!S/dO~O(y$}On%aa!Q%aa'y%aa(z%aa!]%aa#`%aa~Og%aa$O%aa~P#L{O(z%POn%ca!Q%ca'y%ca(y%ca!]%ca#`%ca~Og%ca$O%ca~P#MnO!]fX!gfX!kfX!k$zX(rfX~P!0SOp%WO![/mO!](^O(T/lO!Y(vP!Y)PP~P!1uOr*sO!b*qO!c*kO!d*kO!l*bO#[*rO%`*mO(U!lO(VTO(YUO~Os<}O!S/nO![+[O!^*pO(e<|O!^(xP~P$ [O!k/oO~P#/sO!]/pO!g#vO(r'pO!k)OX~O!k/uO~OnoX!QoX'yoX(yoX(zoX~O!g#vO!koX~P$#OOp/wO!S%hO![*^O!_%iO(T%gO!k)OP~O#k/xO~O!Y$zX!]$zX!g%RX~P!0SO!]/yO!Y)PX~P#/sO!g/{O~O!Y/}O~OpkO(T0OO~P.iOh%VOr0TO!g#vO!l%eO(r'pO~O!g+iO~Oa%nO!]0XO'z%nO~O!^0ZO~P!5iO!c0[O!d0[O(U!lO~P#$`Os!nO!S0]O(VTO(YUO(e!mO~O#[0_O~Og%aa!]%aa#`%aa$O%aa~P!1WOg%ca!]%ca#`%ca$O%ca~P!1WOj%dOk%dOl%dO(T&ZOg'mX!]'mX~O!]*yOg(^a~Og0hO~On0jO#`0iOg(_a!](_a~OR0kO!Q0kO!S0lO#S$dOn}a'y}a(y}a(z}a!]}a#`}a~Og}a$O}a~P$(cO!Q*OO'y*POn$sa(y$sa(z$sa!]$sa#`$sa~Og$sa$O$sa~P$)_O!Q*OO'y*POn$ua(y$ua(z$ua!]$ua#`$ua~Og$ua$O$ua~P$*QO#k0oO~Og%Ta!]%Ta#`%Ta$O%Ta~P!1WO!g#vO~O#k0rO~O!]+^Oa)Ta'z)Ta~OR#zO!Q#yO!S#{O!l#xO(aVOP!ri[!rij!rir!ri!]!ri!p!ri#R!ri#n!ri#o!ri#p!ri#q!ri#r!ri#s!ri#t!ri#u!ri#v!ri#x!ri#z!ri#{!ri(r!ri(y!ri(z!ri~Oa!ri'z!ri'w!ri!Y!ri!k!riv!ri!_!ri%i!ri!g!ri~P$+oOh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(VTO(YUO(a$uO(y$}O(z%PO~Op0{O%]0|O(T0zO~P$.VO!g+iOa(]a!_(]a'z(]a!](]a~O#k1SO~O[]X!]fX!^fX~O!]1TO!^)XX~O!^1VO~O[1WO~Ob1YO(T+qO(VTO(YUO~O!_&PO(T%gO`'uX!]'uX~O!]+vO`)Wa~O!k1]O~P!:tO[1`O~O`1aO~O#`1fO~On1iO!_$|O~O(e(|O!^)UP~Oh%VOn1rO!_1oO%i1qO~O[1|O!]1zO!^)VX~O!^1}O~O`2POa%nO'z%nO~O(T#nO(VTO(YUO~O#S$dO#`$eO$Q$eOP(gXR(gX[(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX~Oj2SO&[2TOa(gX~P$3pOj2SO#`$eO&[2TO~Oa2VO~P%[Oa2XO~O&e2[OP&ciQ&ciS&ciY&cia&cid&cie&cil&cip&cir&cis&cit&ciz&ci|&ci!O&ci!S&ci!W&ci!X&ci!_&ci!i&ci!l&ci!o&ci!p&ci!q&ci!s&ci!u&ci!x&ci!|&ci$W&ci$n&ci%h&ci%j&ci%l&ci%m&ci%n&ci%q&ci%s&ci%v&ci%w&ci%y&ci&W&ci&^&ci&`&ci&b&ci&d&ci&g&ci&m&ci&s&ci&u&ci&w&ci&y&ci&{&ci'w&ci(T&ci(V&ci(Y&ci(a&ci(o&ci!^&cib&ci&j&ci~Ob2bO!^2`O&j2aO~P`O!_XO!l2dO~O&q,{OP&liQ&liS&liY&lia&lid&lie&lil&lip&lir&lis&lit&liz&li|&li!O&li!S&li!W&li!X&li!_&li!i&li!l&li!o&li!p&li!q&li!s&li!u&li!x&li!|&li$W&li$n&li%h&li%j&li%l&li%m&li%n&li%q&li%s&li%v&li%w&li%y&li&W&li&^&li&`&li&b&li&d&li&g&li&m&li&s&li&u&li&w&li&y&li&{&li'w&li(T&li(V&li(Y&li(a&li(o&li!^&li&e&lib&li&j&li~O!Y2jO~O!]!aa!^!aa~P#BwOs!nO!S!oO![2pO(e!mO!]'XX!^'XX~P@nO!]-]O!^(ia~O!]'_X!^'_X~P!9|O!]-`O!^(xa~O!^2wO~P'_Oa%nO#`3QO'z%nO~Oa%nO!g#vO#`3QO'z%nO~Oa%nO!g#vO!p3UO#`3QO'z%nO(r'pO~Oa%nO'z%nO~P!:tO!]$_Ov$qa~O!Y'Wi!]'Wi~P!:tO!](VO!Y(hi~O!](^O!Y(vi~O!Y(wi!](wi~P!:tO!](ti!k(tia(ti'z(ti~P!:tO#`3WO!](ti!k(tia(ti'z(ti~O!](jO!k(si~O!S%hO!_%iO!|]O#i3]O#j3[O(T%gO~O!S%hO!_%iO#j3[O(T%gO~On3dO!_'`O%i3cO~Oh%VOn3dO!_'`O%i3cO~O#k%aaP%aaR%aa[%aaa%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa'z%aa(a%aa(r%aa!k%aa!Y%aa'w%aav%aa!_%aa%i%aa!g%aa~P#L{O#k%caP%caR%ca[%caa%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca'z%ca(a%ca(r%ca!k%ca!Y%ca'w%cav%ca!_%ca%i%ca!g%ca~P#MnO#k%aaP%aaR%aa[%aaa%aaj%aar%aa!S%aa!]%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa'z%aa(a%aa(r%aa!k%aa!Y%aa'w%aa#`%aav%aa!_%aa%i%aa!g%aa~P#/sO#k%caP%caR%ca[%caa%caj%car%ca!S%ca!]%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca'z%ca(a%ca(r%ca!k%ca!Y%ca'w%ca#`%cav%ca!_%ca%i%ca!g%ca~P#/sO#k}aP}a[}aa}aj}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a'z}a(a}a(r}a!k}a!Y}a'w}av}a!_}a%i}a!g}a~P$(cO#k$saP$saR$sa[$saa$saj$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa'z$sa(a$sa(r$sa!k$sa!Y$sa'w$sav$sa!_$sa%i$sa!g$sa~P$)_O#k$uaP$uaR$ua[$uaa$uaj$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua'z$ua(a$ua(r$ua!k$ua!Y$ua'w$uav$ua!_$ua%i$ua!g$ua~P$*QO#k%TaP%TaR%Ta[%Taa%Taj%Tar%Ta!S%Ta!]%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta'z%Ta(a%Ta(r%Ta!k%Ta!Y%Ta'w%Ta#`%Tav%Ta!_%Ta%i%Ta!g%Ta~P#/sOa#cq!]#cq'z#cq'w#cq!Y#cq!k#cqv#cq!_#cq%i#cq!g#cq~P!:tO![3lO!]'YX!k'YX~P%[O!].tO!k(ka~O!].tO!k(ka~P!:tO!Y3oO~O$O!na!^!na~PKlO$O!ja!]!ja!^!ja~P#BwO$O!ra!^!ra~P!=[O$O!ta!^!ta~P!?rOg']X!]']X~P!,TO!]/POg(pa~OSfO!_4TO$d4UO~O!^4YO~Ov4ZO~P#/sOa$mq!]$mq'z$mq'w$mq!Y$mq!k$mqv$mq!_$mq%i$mq!g$mq~P!:tO!Y4]O~P!&zO!S4^O~O!Q*OO'y*PO(z%POn'ia(y'ia!]'ia#`'ia~Og'ia$O'ia~P%-fO!Q*OO'y*POn'ka(y'ka(z'ka!]'ka#`'ka~Og'ka$O'ka~P%.XO(r$YO~P#/sO!YfX!Y$zX!]fX!]$zX!g%RX#`fX~P!0SOp%WO(T=WO~P!1uOp4bO!S%hO![4aO!_%iO(T%gO!]'eX!k'eX~O!]/pO!k)Oa~O!]/pO!g#vO!k)Oa~O!]/pO!g#vO(r'pO!k)Oa~Og$|i!]$|i#`$|i$O$|i~P!1WO![4jO!Y'gX!]'gX~P!3tO!]/yO!Y)Pa~O!]/yO!Y)Pa~P#/sOP]XR]X[]Xj]Xr]X!Q]X!S]X!Y]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X~Oj%YX!g%YX~P%2OOj4oO!g#vO~Oh%VO!g#vO!l%eO~Oh%VOr4tO!l%eO(r'pO~Or4yO!g#vO(r'pO~Os!nO!S4zO(VTO(YUO(e!mO~O(y$}On%ai!Q%ai'y%ai(z%ai!]%ai#`%ai~Og%ai$O%ai~P%5oO(z%POn%ci!Q%ci'y%ci(y%ci!]%ci#`%ci~Og%ci$O%ci~P%6bOg(_i!](_i~P!1WO#`5QOg(_i!](_i~P!1WO!k5VO~Oa$oq!]$oq'z$oq'w$oq!Y$oq!k$oqv$oq!_$oq%i$oq!g$oq~P!:tO!Y5ZO~O!]5[O!_)QX~P#/sOa$zX!_$zX%^]X'z$zX!]$zX~P!0SO%^5_OaoX!_oX'zoX!]oX~P$#OOp5`O(T#nO~O%^5_O~Ob5fO%j5gO(T+qO(VTO(YUO!]'tX!^'tX~O!]1TO!^)Xa~O[5kO~O`5lO~O[5pO~Oa%nO'z%nO~P#/sO!]5uO#`5wO!^)UX~O!^5xO~Or6OOs!nO!S*iO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!pO#W!pO#X!pO#[5}O#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O!^5|O~P%;eOn6TO!_1oO%i6SO~Oh%VOn6TO!_1oO%i6SO~Ob6[O(T#nO(VTO(YUO!]'sX!^'sX~O!]1zO!^)Va~O(VTO(YUO(e6^O~O`6bO~Oj6eO&[6fO~PNXO!k6gO~P%[Oa6iO~Oa6iO~P%[Ob2bO!^6nO&j2aO~P`O!g6pO~O!g6rOh(ji!](ji!^(ji!g(ji!l(jir(ji(r(ji~O!]#hi!^#hi~P#BwO#`6sO!]#hi!^#hi~O!]!ai!^!ai~P#BwOa%nO#`6|O'z%nO~Oa%nO!g#vO#`6|O'z%nO~O!](tq!k(tqa(tq'z(tq~P!:tO!](jO!k(sq~O!S%hO!_%iO#j7TO(T%gO~O!_'`O%i7WO~On7[O!_'`O%i7WO~O#k'iaP'iaR'ia['iaa'iaj'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia'z'ia(a'ia(r'ia!k'ia!Y'ia'w'iav'ia!_'ia%i'ia!g'ia~P%-fO#k'kaP'kaR'ka['kaa'kaj'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka'z'ka(a'ka(r'ka!k'ka!Y'ka'w'kav'ka!_'ka%i'ka!g'ka~P%.XO#k$|iP$|iR$|i[$|ia$|ij$|ir$|i!S$|i!]$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i'z$|i(a$|i(r$|i!k$|i!Y$|i'w$|i#`$|iv$|i!_$|i%i$|i!g$|i~P#/sO#k%aiP%aiR%ai[%aia%aij%air%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai'z%ai(a%ai(r%ai!k%ai!Y%ai'w%aiv%ai!_%ai%i%ai!g%ai~P%5oO#k%ciP%ciR%ci[%cia%cij%cir%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci'z%ci(a%ci(r%ci!k%ci!Y%ci'w%civ%ci!_%ci%i%ci!g%ci~P%6bO!]'Ya!k'Ya~P!:tO!].tO!k(ki~O$O#ci!]#ci!^#ci~P#BwOP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mij#mir#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#n#mi~P%NdO#n<_O~P%NdOP$[OR#zOr<kO!Q#yO!S#{O!l#xO!p$[O#n<_O#o<`O#p<`O#q<`O(aVO[#mij#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#r#mi~P&!lO#r<aO~P&!lOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO(aVO#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#v#mi~P&$tOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO(aVO(z#}O#z#mi#{#mi$O#mi(r#mi(y#mi!]#mi!^#mi~O#x<eO~P&&uO#x#mi~P&&uO#v<cO~P&$tOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO#x<eO(aVO(y#|O(z#}O#{#mi$O#mi(r#mi!]#mi!^#mi~O#z#mi~P&)UO#z<gO~P&)UOa#|y!]#|y'z#|y'w#|y!Y#|y!k#|yv#|y!_#|y%i#|y!g#|y~P!:tO[#mij#mir#mi#R#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi!]#mi!^#mi~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#n<_O#o<`O#p<`O#q<`O(aVO(y#mi(z#mi~P&,QOn>^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOr<QO!g#vO(r'pO~Ov(fX~P1qO!Q%rO~P!)[O(U!lO~P!)[O!YfX!]fX#`fX~P%2OOP]XR]X[]Xj]Xr]X!Q]X!S]X!]]X!]fX!l]X!p]X#R]X#S]X#`]X#`fX#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X~O!gfX!k]X!kfX(rfX~P'LTOP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_XO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(T)]O(VTO(YUO(aVO(o[O~O!]<iO!^$qa~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<tO!S${O!_$|O!i>WO!l$xO#j<zO$W%`O$t<vO$v<xO$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Ol)dO~P(!yOr!eX(r!eX~P#!iOr(jX(r(jX~P##[O!^]X!^fX~P'LTO!YfX!Y$zX!]fX!]$zX#`fX~P!0SO#k<^O~O!g#vO#k<^O~O#`<nO~Oj<bO~O#`=OO!](wX!^(wX~O#`<nO!](uX!^(uX~O#k=PO~Og=RO~P!1WO#k=XO~O#k=YO~Og=RO(T&ZO~O!g#vO#k=ZO~O!g#vO#k=PO~O$O=[O~P#BwO#k=]O~O#k=^O~O#k=cO~O#k=dO~O#k=eO~O#k=fO~O$O=gO~P!1WO$O=hO~P!1WOl=sO~P7eOk#S#T#U#W#X#[#i#j#u$n$t$v$y%]%^%h%i%j%q%s%v%w%y%{~(OT#o!X'|(U#ps#n#qr!Q'}$]'}(T$_(e~\",goto:\"$9Y)]PPPPPP)^PP)aP)rP+W/]PPPP6mPP7TPP=QPPP@tPA^PA^PPPA^PCfPA^PA^PA^PCjPCoPD^PIWPPPI[PPPPI[L_PPPLeMVPI[PI[PP! eI[PPPI[PI[P!#lI[P!'S!(X!(bP!)U!)Y!)U!,gPPPPPPP!-W!(XPP!-h!/YP!2iI[I[!2n!5z!:h!:h!>gPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#<e#<k#<n)aP#<q)aP#<z#<z#<zP)aP)aP)aP)aPP)aP#=Q#=TP#=T)aP#=XP#=[P)aP)aP)aP)aP)aP)a)aPP#=b#=h#=s#=y#>P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{<Y%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_S#q]<V!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SU+P%]<s<tQ+t&PQ,f&gQ,m&oQ0x+gQ0}+iQ1Y+uQ2R,kQ3`.gQ5`0|Q5f1TQ6[1zQ7Y3dQ8`5gR9e7['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>R>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^o>U<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hW%Ti%V*y>PS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^T)z$u){V+P%]<s<tW'[!e%i*Z-`S(}#y#zQ+c%rQ+y&SS.b(m(nQ1j,XQ5T0kR8i5u'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=vT#TV#U'RkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=vS(o#p'iQ)P#zS+b%q.|S.c(n(pR3^.d'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SS#q]<VQ&t!XQ&u!YQ&w![Q&x!]R2Z,vQ'a!hQ+e%wQ-h'cS.e(q+hQ2x-gW3b.h.i0w0yQ6w2yW7U3_3a3e5^U9a7V7X7ZU:q9c9d9fS;b:p:sQ;p;cR;x;qU!wQ'`-eT5y1o5{!Q_OXZ`st!V!Z#d#h%e%m&i&k&r&t&u&w(j,s,x.[2[2_]!pQ!r'`-e1o5{T#q]<V%^{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S(}#y#zS.b(m(n!s=l$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uS<P;|;}R<S<QQ#wbQ's!uS(e#g2US(g#m+WQ+Y%fQ+j%xQ+p&OU-r'k't'wQ.W(fU/r*]*`/wQ0S*jQ0V*lQ1O+kQ1u,aS3R-s-vQ3Z.`S4e/s/tQ4n0PS4q0R0^Q4u0WQ6W1vQ7P3US7q4`4bQ7u4fU7|4r4x4{Q8P4wQ8v6XS9q7r7sQ9u7yQ9}8RQ:O8SQ:c8wQ:y9rS:z9v9xQ;S:QQ;^:dS;f:{;PS;r;g;hS;z;s;uS<O;{;}Q<R<PQ<T<SQ=o=jQ={=tR=|=uV!wQ'`-e%^aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S#wz!j!r=i$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<W!P<d)^)q-Z.|2k2n3p3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=v!f$Vc#Y%q(S(Y(t(y)W)X)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<W!T<f)^)q-Z.|2k2n3p3v3w3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=v!^$Zc#Y%q(S(Y(t(y)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<WQ4_/kz>S)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>ST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>ST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^Q+T%aQ/c*Oo4O<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!U$yi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n=r<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hQ=w>TQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^o4O<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hnoOXst!Z#d%m&r&t&u&w,s,x2[2_S*f${*YQ-R'OQ-S'QR4i/y%[%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f<o#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n<p<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!d=S(u)c*[*e.j.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f<q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n<r<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!h=U(u)c*[*e.k.l.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|<jQ-|<WR<j)qQ/q*]W4c/q4d7t9sU4d/r/s/tS7t4e4fR9s7u$e*Q$v(u)c)e*[*e*t*u+Q+R+V.l.m.o.p.q/_/g/i/k/v/|0d0e0v1e3f3g3h3}4R4[4g4h4l4|5O5R5S5W5r7]7^7_7`7e7f7h7i7j7p7w7z8U8X8Z9h9i9j9t9|:R:S:t:u:v:w:x:};R;e;j;v;y=p=}>O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.l<oQ.m<qQ.o<uQ.p<wQ.q<yQ/_)yQ/g*RQ/i*TQ/k*VQ/v*aS/|*g/mQ0d*wQ0e*xl0v+f,V.f1i1q3c6S7W8q9b:`:r;[;dQ1e,SQ3f=SQ3g=UQ3h=XS3}<l<mQ4R/PS4[/d4^Q4g/xQ4h/yQ4l/{Q4|0`Q5O0bQ5R0iQ5S0jQ5W0oQ5r1fQ7]=]Q7^=_Q7_=aQ7`=cQ7e<pQ7f<rQ7h<vQ7i<xQ7j<zQ7p4_Q7w4jQ7z4oQ8U5QQ8X5[Q8Z5_Q9h=YQ9i=TQ9j=VQ9t7vQ9|8QQ:R8VQ:S8[Q:t=^Q:u=`Q:v=bQ:w=dQ:x9pQ:}9yQ;R:PQ;e=gQ;j;QQ;v;kQ;y=hQ=p>PQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.n<sR7g<tnpOXst!Z#d%m&r&t&u&w,s,x2[2_Q!fPS#fZ#oQ&|!`W'h!o*i0]4zQ(P#SQ)Q#{Q)r$nS,l&k&nQ,q&oQ-O&{S-T'T/nQ-g'bQ.x)OQ/[)sQ0s+]Q0y+gQ2W,pQ2y-iQ3a.gQ4W/VQ5U0lQ6Q1rQ6c2SQ6d2TQ6h2VQ6j2XQ6o2aQ7Z3dQ7m4TQ8s6TQ9P6eQ9Q6fQ9S6iQ9f7[Q:a8tR:k9T#[cOPXZst!Z!`!o#d#o#{%m&k&n&o&r&t&u&w&{'T'b)O*i+]+g,p,s,x-i.g/n0]0l1r2S2T2V2X2[2_2a3d4z6T6e6f6i7[8t9TQ#YWQ#eYQ%quQ%svS%uw!gS(S#W(VQ(Y#ZQ(t#uQ(y#xQ)R$OQ)S$PQ)T$QQ)U$RQ)V$SQ)W$TQ)X$UQ)Y$VQ)Z$WQ)[$XQ)^$ZQ)`$_Q)b$aQ)g$eW)q$n)s/V4TQ+d%tQ+x&RS-Z'X2pQ-x'rS-}(T.PQ.S(]Q.U(dQ.s(xQ.v(zQ.z<UQ.|<XQ.}<YQ/O<]Q/b)}Q0p+XQ2k-UQ2n-XQ3O-qQ3V.VQ3k.tQ3p<^Q3q<_Q3r<`Q3s<aQ3t<bQ3u<cQ3v<dQ3w<eQ3x<fQ3y<gQ3z<hQ3{.{Q3|<kQ4P<nQ4Q<{Q4X<iQ5X0rQ5c1SQ6u=OQ6{3QQ7Q3WQ7a3lQ7b=PQ7k=RQ7l=ZQ8k5wQ9X6sQ9]6|Q9g=[Q9m=eQ9n=fQ:o9_Q;W:ZQ;`:mQ<W#SR=v>SR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i<VR)f$dY!uQ'`-e1o5{Q'k!rS'u!v!yS'w!z5}S-t'l'mQ-v'nR3T-uT#kZ%eS#jZ%eS%km,oU(g#h#i#lS.Y(h(iQ.^(jQ0t+^Q3Y.ZU3Z.[.]._S7S3[3]R9`7Td#^W#W#Z%h(T(^*Y+Z.T/mr#gZm#h#i#l%e(h(i(j+^.Z.[.]._3[3]7TS*]$x*bQ/t*^Q2U,oQ2l-VQ4`/pQ6q2dQ7s4aQ9W6rT=m'X+[V#aW%h*YU#`W%h*YS(U#W(^U(Z#Z+Z/mS-['X+[T.O(T.TV'^!e%i*ZQ$lfR)x$qT)m$l)nR4V/UT*_$x*bT*h${*YQ0w+fQ1g,VQ3_.fQ5t1iQ6P1qQ7X3cQ8r6SQ9c7WQ:^8qQ:p9bQ;Z:`Q;c:rQ;n;[R;q;dnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&l!VR,h&itmOXst!U!V!Z#d%m&i&r&t&u&w,s,x2[2_R,o&oT%lm,oR1k,XR,g&gQ&U|S+}&V&WR1^,OR+s&PT&p!W&sT&q!W&sT2^,x2_\",nodeNames:\"⚠ ArithOp ArithOp ?. JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem\",maxTerm:380,context:rA,nodeProps:[[\"isolate\",-8,5,6,14,37,39,51,53,55,\"\"],[\"group\",-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,\"Statement\",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,\"Expression\",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,\"Type\",-3,88,103,109,\"ClassItem\"],[\"openedBy\",23,\"<\",38,\"InterpolationStart\",56,\"[\",60,\"{\",73,\"(\",160,\"JSXStartCloseTag\"],[\"closedBy\",-2,24,168,\">\",40,\"InterpolationEnd\",50,\"]\",61,\"}\",74,\")\",165,\"JSXEndTag\"]],propSources:[fA],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:\"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$<r#p#q$=h#q#r$>x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__WS$i&j(Wp(Z!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]WS$i&j(Z!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S%9[C}i$i&j(o%1l(Wp(Z!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr%9[EoP;=`<%lCr07[FRk$i&j(Wp(Z!b$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$i&j(Wp(Z!b$]#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv07[JPP;=`<%lEr(KWJ_`$i&j(Wp(Z!b#p(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWKl_$i&j$Q(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,#xLva(z+JY$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWNW`$i&j#z(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At! c_(Y';W$i&j(WpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$i&j(WpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$i&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$d`$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(WpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$d`(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b/5|!'t_!l/.^$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&U!)O_!k!Lf$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z-!n!*[b$i&j(Wp(Z!b(U%&f#q(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW!+o`$i&j(Wp(Z!b#n(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;x!,|`$i&j(Wp(Z!br+4YOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,$U!.Z_!]+Jf$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!/ec$i&j(Wp(Z!b!Q.2^OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!0ya$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!2Z_![!L^$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!3eg$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!5Vg$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!6wc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!8_c$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!9uf$i&j(Wp(Z!b#o(ChOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z?O!;fb$i&j(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z>^!<w`$i&j(Z!b!X7`OY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n<z!>Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!?Td$i&j!X7`O!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c<z!C][$i&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DWX$i&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DvP;=`<%l!CW<z!EOX$i&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!EnP;=`<%l!=y>^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS>^!LYP;=`<%l!KS>^!L`P;=`<%l!<n=l!Ll`$i&j(Wp!X7`OY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc=l!Mwl$i&j(Wp!X7`OY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r8Q# vZ(Wp!X7`OY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# o8Q#!pe(Wp!X7`OY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)r8Q#$WX(WpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$R8Q#$vP;=`<%l#$R8Q#$|P;=`<%l# o=l#%W^$i&j(WpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P=l#&VP;=`<%l#%P=l#&]P;=`<%l!Lc?O#&kn$i&j(Wp(Z!b!X7`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z9d#(r](Wp(Z!b!X7`OY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i9d#)th(Wp(Z!b!X7`OY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g9d#+gZ(Wp(Z!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`9d#,]P;=`<%l#+`9d#,cP;=`<%l#(i?O#,o`$i&j(Wp(Z!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f?O#-tP;=`<%l#,f?O#-zP;=`<%l!;Z07[#.[b$i&j(Wp(Z!b(O0/l!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z07[#/o_$i&j(Wp(Z!bT0/lOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d06j#0w]$i&j(Z!bT0/lOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n05W#1wX$i&jT0/lOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p0/l#2iST0/lOY#2dZ;'S#2d;'S;=`#2u<%lO#2d0/l#2xP;=`<%l#2d05W#3OP;=`<%l#1p01O#3YW(Z!bT0/lOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R01O#3uP;=`<%l#3R06j#3{P;=`<%l#0n05x#4X]$i&j(WpT0/lOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O00^#5XW(WpT0/lOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q00^#5tP;=`<%l#5Q05x#5zP;=`<%l#4O01p#6WY(Wp(Z!bT0/lOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}01p#6yP;=`<%l#5}07[#7PP;=`<%l#/d)3h#7ab$i&j$Q(Ch(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;ZAt#8vb$Z#t$i&j(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z'Ad#:Zp$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#<jk$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-<U(Wp(Z!b$n7`OY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$k&j(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El#M}Z#r(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g(El#NyX$Q(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El$ oX#s(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g*)x$!ga#`*!Y$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(K[$#w_#k(Cl$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x$%Vag!*r#s(Ch$f#|$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$&g_#s(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$'qa#r(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$)R`#r(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(Kd$*`a(r(Ct$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!a%Z!a!b$+e!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$+p`$i&j#{(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`$,}_!|$Ip$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f$.X_!S0,v$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/]Z$i&jO!^$0O!^!_$0f!_#i$0O#i#j$0k#j#l$0O#l#m$2^#m#o$0O#o#p$0f#p;'S$0O;'S;=`$4i<%lO$0O(n$0VT_#S$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0kO_#S(n$0p[$i&jO!Q&c!Q![$1f![!^&c!_!c&c!c!i$1f!i#T&c#T#Z$1f#Z#o&c#o#p$3|#p;'S&c;'S;=`&w<%lO&c(n$1kZ$i&jO!Q&c!Q![$2^![!^&c!_!c&c!c!i$2^!i#T&c#T#Z$2^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2cZ$i&jO!Q&c!Q![$3U![!^&c!_!c&c!c!i$3U!i#T&c#T#Z$3U#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3ZZ$i&jO!Q&c!Q![$0O![!^&c!_!c&c!c!i$0O!i#T&c#T#Z$0O#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$4PR!Q![$4Y!c!i$4Y#T#Z$4Y#S$4]S!Q![$4Y!c!i$4Y#T#Z$4Y#q#r$0f(n$4lP;=`<%l$0O#1[$4z_!Y#)l$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$6U`#x(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;p$7c_$i&j(Wp(Z!b(a+4QOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$8qk$i&j(Wp(Z!b(T,2j$_#t(e$I[OY%ZYZ&cZr%Zrs&}st%Ztu$8buw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$8b![!^%Z!^!_*g!_!c%Z!c!}$8b!}#O%Z#O#P&c#P#R%Z#R#S$8b#S#T%Z#T#o$8b#o#p*g#p$g%Z$g;'S$8b;'S;=`$<l<%lO$8b+d$:qk$i&j(Wp(Z!b$_#tOY%ZYZ&cZr%Zrs&}st%Ztu$:fuw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$:f![!^%Z!^!_*g!_!c%Z!c!}$:f!}#O%Z#O#P&c#P#R%Z#R#S$:f#S#T%Z#T#o$:f#o#p*g#p$g%Z$g;'S$:f;'S;=`$<f<%lO$:f+d$<iP;=`<%l$:f07[$<oP;=`<%l$8b#Jf$<{X!_#Hb(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g,#x$=sa(y+JY$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+e#q;'S%Z;'S;=`+a<%lO%Z)>v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr\",tokenizers:[lA,aA,hA,cA,2,3,4,5,6,7,8,9,10,11,12,13,14,oA,new Ko(\"$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~\",141,340),new Ko(\"j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~\",25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:n=>uA[n]||-1},{term:343,get:n=>dA[n]||-1},{term:95,get:n=>pA[n]||-1}],tokenPrec:15201}),N1=[Ze(\"function ${name}(${params}) {\\n\t${}\\n}\",{label:\"function\",detail:\"definition\",type:\"keyword\"}),Ze(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\t${}\\n}\",{label:\"for\",detail:\"loop\",type:\"keyword\"}),Ze(\"for (let ${name} of ${collection}) {\\n\t${}\\n}\",{label:\"for\",detail:\"of loop\",type:\"keyword\"}),Ze(\"do {\\n\t${}\\n} while (${})\",{label:\"do\",detail:\"loop\",type:\"keyword\"}),Ze(\"while (${}) {\\n\t${}\\n}\",{label:\"while\",detail:\"loop\",type:\"keyword\"}),Ze(`try {\n\t\\${}\n} catch (\\${error}) {\n\t\\${}\n}`,{label:\"try\",detail:\"/ catch block\",type:\"keyword\"}),Ze(\"if (${}) {\\n\t${}\\n}\",{label:\"if\",detail:\"block\",type:\"keyword\"}),Ze(`if (\\${}) {\n\t\\${}\n} else {\n\t\\${}\n}`,{label:\"if\",detail:\"/ else block\",type:\"keyword\"}),Ze(`class \\${name} {\n\tconstructor(\\${params}) {\n\t\t\\${}\n\t}\n}`,{label:\"class\",detail:\"definition\",type:\"keyword\"}),Ze('import {${names}} from \"${module}\"\\n${}',{label:\"import\",detail:\"named\",type:\"keyword\"}),Ze('import ${name} from \"${module}\"\\n${}',{label:\"import\",detail:\"default\",type:\"keyword\"})],mA=N1.concat([Ze(\"interface ${name} {\\n\t${}\\n}\",{label:\"interface\",detail:\"definition\",type:\"keyword\"}),Ze(\"type ${name} = ${type}\",{label:\"type\",detail:\"definition\",type:\"keyword\"}),Ze(\"enum ${name} {\\n\t${}\\n}\",{label:\"enum\",detail:\"definition\",type:\"keyword\"})]),rg=new iO,j1=new Set([\"Script\",\"Block\",\"FunctionExpression\",\"FunctionDeclaration\",\"ArrowFunction\",\"MethodDeclaration\",\"ForStatement\"]);function js(n){return(e,t)=>{let i=e.node.getChild(\"VariableDefinition\");return i&&t(i,n),!0}}const OA=[\"FunctionDeclaration\"],bA={FunctionDeclaration:js(\"function\"),ClassDeclaration:js(\"class\"),ClassExpression:()=>!0,EnumDeclaration:js(\"constant\"),TypeAliasDeclaration:js(\"type\"),NamespaceDeclaration:js(\"namespace\"),VariableDefinition(n,e){n.matchContext(OA)||e(n,\"variable\")},TypeDefinition(n,e){e(n,\"type\")},__proto__:null};function G1(n,e){let t=rg.get(e);if(t)return t;let i=[],s=!0;function r(o,l){let a=n.sliceString(o.from,o.to);i.push({label:a,type:l})}return e.cursor(j.IncludeAnonymous).iterate(o=>{if(s)s=!1;else if(o.name){let l=bA[o.name];if(l&&l(o,r)||j1.has(o.name))return!1}else if(o.to-o.from>8192){for(let l of G1(n,o.node))i.push(l);return!1}}),rg.set(e,i),i}const og=/^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/,H1=[\"TemplateString\",\"String\",\"RegExp\",\"LineComment\",\"BlockComment\",\"VariableDefinition\",\"TypeDefinition\",\"Label\",\"PropertyDefinition\",\"PropertyName\",\"PrivatePropertyDefinition\",\"PrivatePropertyName\",\"JSXText\",\"JSXAttributeValue\",\"JSXOpenTag\",\"JSXCloseTag\",\"JSXSelfClosingTag\",\".\",\"?.\"];function SA(n){let e=fe(n.state).resolveInner(n.pos,-1);if(H1.indexOf(e.name)>-1)return null;let t=e.name==\"VariableName\"||e.to-e.from<20&&og.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)j1.has(s.name)&&(i=i.concat(G1(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:og}}const It=xs.define({name:\"javascript\",parser:gA.configure({props:[ul.add({IfStatement:Fr({except:/^\\s*({|else\\b)/}),TryStatement:Fr({except:/^\\s*({|catch\\b|finally\\b)/}),LabeledStatement:nk,SwitchBody:n=>{let e=n.textAfter,t=/^\\s*\\}/.test(e),i=/^\\s*(case|default)\\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:sk({closing:\"}\"}),ArrowFunction:n=>n.baseIndent+n.unit,\"TemplateString BlockComment\":()=>null,\"Statement Property\":Fr({except:/^\\s*{/}),JSXElement(n){let e=/^\\s*<\\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\\s*\\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},\"JSXOpenTag JSXSelfClosingTag\"(n){return n.column(n.node.from)+n.unit}}),dl.add({\"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\":cO,BlockComment(n){return{from:n.from+2,to:n.to-2}}})]}),languageData:{closeBrackets:{brackets:[\"(\",\"[\",\"{\",\"'\",'\"',\"`\"]},commentTokens:{line:\"//\",block:{open:\"/*\",close:\"*/\"}},indentOnInput:/^\\s*(?:case |default:|\\{|\\}|<\\/)$/,wordChars:\"$\"}}),F1={test:n=>/^JSX/.test(n.name),facet:oO({commentTokens:{block:{open:\"{/*\",close:\"*/}\"}}})},U1=It.configure({dialect:\"ts\"},\"typescript\"),K1=It.configure({dialect:\"jsx\",props:[_c.add(n=>n.isTop?[F1]:void 0)]}),J1=It.configure({dialect:\"jsx ts\",props:[_c.add(n=>n.isTop?[F1]:void 0)]},\"typescript\");let eS=n=>({label:n,type:\"keyword\"});const tS=\"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield\".split(\" \").map(eS),yA=tS.concat([\"declare\",\"implements\",\"private\",\"protected\",\"public\"].map(eS));function xA(n={}){let e=n.jsx?n.typescript?J1:K1:n.typescript?U1:It,t=n.typescript?mA.concat(yA):N1.concat(tS);return new Yc(e,[It.data.of({autocomplete:tT(H1,d1(t))}),It.data.of({autocomplete:SA}),n.jsx?QA:[]])}function wA(n){for(;;){if(n.name==\"JSXOpenTag\"||n.name==\"JSXSelfClosingTag\"||n.name==\"JSXFragmentTag\")return n;if(n.name==\"JSXEscape\"||!n.parent)return null;n=n.parent}}function lg(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name==\"JSXIdentifier\"||i.name==\"JSXBuiltin\"||i.name==\"JSXNamespacedName\"||i.name==\"JSXMemberExpression\")return n.sliceString(i.from,Math.min(i.to,t));return\"\"}const kA=typeof navigator==\"object\"&&/Android\\b/.test(navigator.userAgent),QA=D.inputHandler.of((n,e,t,i,s)=>{if((kA?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=\">\"&&i!=\"/\"||!It.isActiveAt(n.state,e,-1))return!1;let r=s(),{state:o}=r,l=o.changeByRange(a=>{var h;let{head:c}=a,f=fe(o).resolveInner(c-1,-1),u;if(f.name==\"JSXStartTag\"&&(f=f.parent),!(o.doc.sliceString(c-1,c)!=i||f.name==\"JSXAttributeValue\"&&f.to>c)){if(i==\">\"&&f.name==\"JSXFragmentTag\")return{range:a,changes:{from:c,insert:\"</>\"}};if(i==\"/\"&&f.name==\"JSXStartCloseTag\"){let d=f.parent,p=d.parent;if(p&&d.from==c-2&&((u=lg(o.doc,p.firstChild,c))||((h=p.firstChild)===null||h===void 0?void 0:h.name)==\"JSXFragmentTag\")){let g=`${u}>`;return{range:S.cursor(c+g.length,-1),changes:{from:c,insert:g}}}}else if(i==\">\"){let d=wA(f);if(d&&d.name==\"JSXOpenTag\"&&!/^\\/?>|^<\\//.test(o.doc.sliceString(c,c+2))&&(u=lg(o.doc,d,c)))return{range:a,changes:{from:c,insert:`</${u}>`}}}}return{range:a}});return l.changes.empty?!1:(n.dispatch([r,o.update(l,{userEvent:\"input.complete\",scrollIntoView:!0})]),!0)}),Gs=[\"_blank\",\"_self\",\"_top\",\"_parent\"],Ma=[\"ascii\",\"utf-8\",\"utf-16\",\"latin1\",\"latin1\"],Aa=[\"get\",\"post\",\"put\",\"delete\"],Ra=[\"application/x-www-form-urlencoded\",\"multipart/form-data\",\"text/plain\"],_e=[\"true\",\"false\"],R={},vA={a:{attrs:{href:null,ping:null,type:null,media:null,target:Gs,hreflang:null}},abbr:R,address:R,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[\"default\",\"rect\",\"circle\",\"poly\"]}},article:R,aside:R,audio:{attrs:{src:null,mediagroup:null,crossorigin:[\"anonymous\",\"use-credentials\"],preload:[\"none\",\"metadata\",\"auto\"],autoplay:[\"autoplay\"],loop:[\"loop\"],controls:[\"controls\"]}},b:R,base:{attrs:{href:null,target:Gs}},bdi:R,bdo:R,blockquote:{attrs:{cite:null}},body:R,br:R,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[\"autofocus\"],disabled:[\"autofocus\"],formenctype:Ra,formmethod:Aa,formnovalidate:[\"novalidate\"],formtarget:Gs,type:[\"submit\",\"reset\",\"button\"]}},canvas:{attrs:{width:null,height:null}},caption:R,center:R,cite:R,code:R,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[\"command\",\"checkbox\",\"radio\"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[\"disabled\"],checked:[\"checked\"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[\"disabled\"],multiple:[\"multiple\"]}},datalist:{attrs:{data:null}},dd:R,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[\"open\"]}},dfn:R,div:R,dl:R,dt:R,em:R,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[\"disabled\"],form:null,name:null}},figcaption:R,figure:R,footer:R,form:{attrs:{action:null,name:null,\"accept-charset\":Ma,autocomplete:[\"on\",\"off\"],enctype:Ra,method:Aa,novalidate:[\"novalidate\"],target:Gs}},h1:R,h2:R,h3:R,h4:R,h5:R,h6:R,head:{children:[\"title\",\"base\",\"link\",\"style\",\"meta\",\"script\",\"noscript\",\"command\"]},header:R,hgroup:R,hr:R,html:{attrs:{manifest:null}},i:R,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[\"allow-top-navigation\",\"allow-same-origin\",\"allow-forms\",\"allow-scripts\"],seamless:[\"seamless\"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[\"anonymous\",\"use-credentials\"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[\"audio/*\",\"video/*\",\"image/*\"],autocomplete:[\"on\",\"off\"],autofocus:[\"autofocus\"],checked:[\"checked\"],disabled:[\"disabled\"],formenctype:Ra,formmethod:Aa,formnovalidate:[\"novalidate\"],formtarget:Gs,multiple:[\"multiple\"],readonly:[\"readonly\"],required:[\"required\"],type:[\"hidden\",\"text\",\"search\",\"tel\",\"url\",\"email\",\"password\",\"datetime\",\"date\",\"month\",\"week\",\"time\",\"datetime-local\",\"number\",\"range\",\"color\",\"checkbox\",\"radio\",\"file\",\"submit\",\"image\",\"reset\",\"button\"]}},ins:{attrs:{cite:null,datetime:null}},kbd:R,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[\"autofocus\"],disabled:[\"disabled\"],keytype:[\"RSA\"]}},label:{attrs:{for:null,form:null}},legend:R,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[\"all\",\"16x16\",\"16x16 32x32\",\"16x16 32x32 64x64\"]}},map:{attrs:{name:null}},mark:R,menu:{attrs:{label:null,type:[\"list\",\"context\",\"toolbar\"]}},meta:{attrs:{content:null,charset:Ma,name:[\"viewport\",\"application-name\",\"author\",\"description\",\"generator\",\"keywords\"],\"http-equiv\":[\"content-language\",\"content-type\",\"default-style\",\"refresh\"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:R,noscript:R,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[\"typemustmatch\"]}},ol:{attrs:{reversed:[\"reversed\"],start:null,type:[\"1\",\"a\",\"A\",\"i\",\"I\"]},children:[\"li\",\"script\",\"template\",\"ul\",\"ol\"]},optgroup:{attrs:{disabled:[\"disabled\"],label:null}},option:{attrs:{disabled:[\"disabled\"],label:null,selected:[\"selected\"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:R,param:{attrs:{name:null,value:null}},pre:R,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:R,rt:R,ruby:R,samp:R,script:{attrs:{type:[\"text/javascript\"],src:null,async:[\"async\"],defer:[\"defer\"],charset:Ma}},section:R,select:{attrs:{form:null,name:null,size:null,autofocus:[\"autofocus\"],disabled:[\"disabled\"],multiple:[\"multiple\"]}},slot:{attrs:{name:null}},small:R,source:{attrs:{src:null,type:null,media:null}},span:R,strong:R,style:{attrs:{type:[\"text/css\"],media:null,scoped:null}},sub:R,summary:R,sup:R,table:R,tbody:R,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:R,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[\"autofocus\"],disabled:[\"disabled\"],readonly:[\"readonly\"],required:[\"required\"],wrap:[\"soft\",\"hard\"]}},tfoot:R,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[\"row\",\"col\",\"rowgroup\",\"colgroup\"]}},thead:R,time:{attrs:{datetime:null}},title:R,tr:R,track:{attrs:{src:null,label:null,default:null,kind:[\"subtitles\",\"captions\",\"descriptions\",\"chapters\",\"metadata\"],srclang:null}},ul:{children:[\"li\",\"script\",\"template\",\"ul\",\"ol\"]},var:R,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[\"anonymous\",\"use-credentials\"],preload:[\"auto\",\"metadata\",\"none\"],autoplay:[\"autoplay\"],mediagroup:[\"movie\"],muted:[\"muted\"],controls:[\"controls\"]}},wbr:R},iS={accesskey:null,class:null,contenteditable:_e,contextmenu:null,dir:[\"ltr\",\"rtl\",\"auto\"],draggable:[\"true\",\"false\",\"auto\"],dropzone:[\"copy\",\"move\",\"link\",\"string:\",\"file:\"],hidden:[\"hidden\"],id:null,inert:[\"inert\"],itemid:null,itemprop:null,itemref:null,itemscope:[\"itemscope\"],itemtype:null,lang:[\"ar\",\"bn\",\"de\",\"en-GB\",\"en-US\",\"es\",\"fr\",\"hi\",\"id\",\"ja\",\"pa\",\"pt\",\"ru\",\"tr\",\"zh\"],spellcheck:_e,autocorrect:_e,autocapitalize:_e,style:null,tabindex:null,title:null,translate:[\"yes\",\"no\"],rel:[\"stylesheet\",\"alternate\",\"author\",\"bookmark\",\"help\",\"license\",\"next\",\"nofollow\",\"noreferrer\",\"prefetch\",\"prev\",\"search\",\"tag\"],role:\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\"aria-activedescendant\":null,\"aria-atomic\":_e,\"aria-autocomplete\":[\"inline\",\"list\",\"both\",\"none\"],\"aria-busy\":_e,\"aria-checked\":[\"true\",\"false\",\"mixed\",\"undefined\"],\"aria-controls\":null,\"aria-describedby\":null,\"aria-disabled\":_e,\"aria-dropeffect\":null,\"aria-expanded\":[\"true\",\"false\",\"undefined\"],\"aria-flowto\":null,\"aria-grabbed\":[\"true\",\"false\",\"undefined\"],\"aria-haspopup\":_e,\"aria-hidden\":_e,\"aria-invalid\":[\"true\",\"false\",\"grammar\",\"spelling\"],\"aria-label\":null,\"aria-labelledby\":null,\"aria-level\":null,\"aria-live\":[\"off\",\"polite\",\"assertive\"],\"aria-multiline\":_e,\"aria-multiselectable\":_e,\"aria-owns\":null,\"aria-posinset\":null,\"aria-pressed\":[\"true\",\"false\",\"mixed\",\"undefined\"],\"aria-readonly\":_e,\"aria-relevant\":null,\"aria-required\":_e,\"aria-selected\":[\"true\",\"false\",\"undefined\"],\"aria-setsize\":null,\"aria-sort\":[\"ascending\",\"descending\",\"none\",\"other\"],\"aria-valuemax\":null,\"aria-valuemin\":null,\"aria-valuenow\":null,\"aria-valuetext\":null},sS=\"beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload\".split(\" \").map(n=>\"on\"+n);for(let n of sS)iS[n]=null;class tl{constructor(e,t){this.tags={...vA,...e},this.globalAttrs={...iS,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}}tl.default=new tl;function Bs(n,e,t=n.length){if(!e)return\"\";let i=e.firstChild,s=i&&i.getChild(\"TagName\");return s?n.sliceString(s.from,Math.min(s.to,t)):\"\"}function Xs(n,e=!1){for(;n;n=n.parent)if(n.name==\"Element\")if(e)e=!1;else return n;return null}function nS(n,e,t){let i=t.tags[Bs(n,Xs(e))];return i?.children||t.allTags}function Zf(n,e){let t=[];for(let i=Xs(e);i&&!i.type.isTop;i=Xs(i.parent)){let s=Bs(n,i);if(s&&i.lastChild.name==\"CloseTag\")break;s&&t.indexOf(s)<0&&(e.name==\"EndTag\"||e.from>=i.firstChild.to)&&t.push(s)}return t}const rS=/^[:\\-\\.\\w\\u00b7-\\uffff]*$/;function ag(n,e,t,i,s){let r=/\\s*>/.test(n.sliceDoc(s,s+5))?\"\":\">\",o=Xs(t,t.name==\"StartTag\"||t.name==\"TagName\");return{from:i,to:s,options:nS(n.doc,o,e).map(l=>({label:l,type:\"type\"})).concat(Zf(n.doc,t).map((l,a)=>({label:\"/\"+l,apply:\"/\"+l+r,type:\"type\",boost:99-a}))),validFor:/^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/}}function hg(n,e,t,i){let s=/\\s*>/.test(n.sliceDoc(i,i+5))?\"\":\">\";return{from:t,to:i,options:Zf(n.doc,e).map((r,o)=>({label:r,apply:r+s,type:\"type\",boost:99-o})),validFor:rS}}function $A(n,e,t,i){let s=[],r=0;for(let o of nS(n.doc,t,e))s.push({label:\"<\"+o,type:\"type\"});for(let o of Zf(n.doc,t))s.push({label:\"</\"+o+\">\",type:\"type\",boost:99-r++});return{from:i,to:i,options:s,validFor:/^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/}}function PA(n,e,t,i,s){let r=Xs(t),o=r?e.tags[Bs(n.doc,r)]:null,l=o&&o.attrs?Object.keys(o.attrs):[],a=o&&o.globalAttrs===!1?l:l.length?l.concat(e.globalAttrNames):e.globalAttrNames;return{from:i,to:s,options:a.map(h=>({label:h,type:\"property\"})),validFor:rS}}function CA(n,e,t,i,s){var r;let o=(r=t.parent)===null||r===void 0?void 0:r.getChild(\"AttributeName\"),l=[],a;if(o){let h=n.sliceDoc(o.from,o.to),c=e.globalAttrs[h];if(!c){let f=Xs(t),u=f?e.tags[Bs(n.doc,f)]:null;c=u?.attrs&&u.attrs[h]}if(c){let f=n.sliceDoc(i,s).toLowerCase(),u='\"',d='\"';/^['\"]/.test(f)?(a=f[0]=='\"'?/^[^\"]*$/:/^[^']*$/,u=\"\",d=n.sliceDoc(s,s+1)==f[0]?\"\":f[0],f=f.slice(1),i++):a=/^[^\\s<>='\"]*$/;for(let p of c)l.push({label:p,apply:u+p+d,type:\"constant\"})}}return{from:i,to:s,options:l,validFor:a}}function TA(n,e){let{state:t,pos:i}=e,s=fe(t).resolveInner(i,-1),r=s.resolve(i);for(let o=i,l;r==s&&(l=s.childBefore(o));){let a=l.lastChild;if(!a||!a.type.isError||a.from<a.to)break;r=s=l,o=a.from}return s.name==\"TagName\"?s.parent&&/CloseTag$/.test(s.parent.name)?hg(t,s,s.from,i):ag(t,n,s,s.from,i):s.name==\"StartTag\"||s.name==\"IncompleteTag\"?ag(t,n,s,i,i):s.name==\"StartCloseTag\"||s.name==\"IncompleteCloseTag\"?hg(t,s,i,i):s.name==\"OpenTag\"||s.name==\"SelfClosingTag\"||s.name==\"AttributeName\"?PA(t,n,s,s.name==\"AttributeName\"?s.from:i,i):s.name==\"Is\"||s.name==\"AttributeValue\"||s.name==\"UnquotedAttributeValue\"?CA(t,n,s,s.name==\"Is\"?i:s.from,i):e.explicit&&(r.name==\"Element\"||r.name==\"Text\"||r.name==\"Document\")?$A(t,n,s,i):null}function MA(n){let{extraTags:e,extraGlobalAttributes:t}=n,i=t||e?new tl(e,t):tl.default;return s=>TA(i,s)}const AA=It.parser.configure({top:\"SingleExpression\"}),oS=[{tag:\"script\",attrs:n=>n.type==\"text/typescript\"||n.lang==\"ts\",parser:U1.parser},{tag:\"script\",attrs:n=>n.type==\"text/babel\"||n.type==\"text/jsx\",parser:K1.parser},{tag:\"script\",attrs:n=>n.type==\"text/typescript-jsx\",parser:J1.parser},{tag:\"script\",attrs(n){return/^(importmap|speculationrules|application\\/(.+\\+)?json)$/i.test(n.type)},parser:AA},{tag:\"script\",attrs(n){return!n.type||/^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(n.type)},parser:It.parser},{tag:\"style\",attrs(n){return(!n.lang||n.lang==\"css\")&&(!n.type||/^(text\\/)?(x-)?(stylesheet|css)$/i.test(n.type))},parser:el.parser}],lS=[{name:\"style\",parser:el.parser.configure({top:\"Styles\"})}].concat(sS.map(n=>({name:n,parser:It.parser}))),aS=xs.define({name:\"html\",parser:iM.configure({props:[ul.add({Element(n){let e=/^(\\s*)(<\\/)?/.exec(n.textAfter);return n.node.to<=n.pos+e[0].length?n.continue():n.lineIndent(n.node.from)+(e[2]?0:n.unit)},\"OpenTag CloseTag SelfClosingTag\"(n){return n.column(n.node.from)+n.unit},Document(n){if(n.pos+/\\s*/.exec(n.textAfter)[0].length<n.node.to)return n.continue();let e=null,t;for(let i=n.node;;){let s=i.lastChild;if(!s||s.name!=\"Element\"||s.to!=i.to)break;e=i=s}return e&&!((t=e.lastChild)&&(t.name==\"CloseTag\"||t.name==\"SelfClosingTag\"))?n.lineIndent(e.from)+n.unit:null}}),dl.add({Element(n){let e=n.firstChild,t=n.lastChild;return!e||e.name!=\"OpenTag\"?null:{from:e.to,to:t.name==\"CloseTag\"?t.from:n.to}}}),kO.add({\"OpenTag CloseTag\":n=>n.getChild(\"TagName\")})]}),languageData:{commentTokens:{block:{open:\"<!--\",close:\"-->\"}},indentOnInput:/^\\s*<\\/\\w+\\W$/,wordChars:\"-_\"}}),no=aS.configure({wrap:W1(oS,lS)});function RA(n={}){let e=\"\",t;n.matchClosingTags===!1&&(e=\"noMatch\"),n.selfClosingTags===!0&&(e=(e?e+\" \":\"\")+\"selfClosing\"),(n.nestedLanguages&&n.nestedLanguages.length||n.nestedAttributes&&n.nestedAttributes.length)&&(t=W1((n.nestedLanguages||[]).concat(oS),(n.nestedAttributes||[]).concat(lS)));let i=t?aS.configure({wrap:t,dialect:e}):e?no.configure({dialect:e}):no;return new Yc(i,[no.data.of({autocomplete:MA(n)}),n.autoCloseTags!==!1?DA:[],xA().support,EM().support])}const cg=new Set(\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \")),DA=D.inputHandler.of((n,e,t,i,s)=>{if(n.composing||n.state.readOnly||e!=t||i!=\">\"&&i!=\"/\"||!no.isActiveAt(n.state,e,-1))return!1;let r=s(),{state:o}=r,l=o.changeByRange(a=>{var h,c,f;let u=o.doc.sliceString(a.from-1,a.to)==i,{head:d}=a,p=fe(o).resolveInner(d,-1),g;if(u&&i==\">\"&&p.name==\"EndTag\"){let m=p.parent;if(((c=(h=m.parent)===null||h===void 0?void 0:h.lastChild)===null||c===void 0?void 0:c.name)!=\"CloseTag\"&&(g=Bs(o.doc,m.parent,d))&&!cg.has(g)){let O=d+(o.doc.sliceString(d,d+1)===\">\"?1:0),y=`</${g}>`;return{range:a,changes:{from:d,to:O,insert:y}}}}else if(u&&i==\"/\"&&p.name==\"IncompleteCloseTag\"){let m=p.parent;if(p.from==d-2&&((f=m.lastChild)===null||f===void 0?void 0:f.name)!=\"CloseTag\"&&(g=Bs(o.doc,m,d))&&!cg.has(g)){let O=d+(o.doc.sliceString(d,d+1)===\">\"?1:0),y=`${g}>`;return{range:S.cursor(d+y.length,-1),changes:{from:d,to:O,insert:y}}}}return{range:a}});return l.changes.empty?!1:(n.dispatch([r,o.update(l,{userEvent:\"input.complete\",scrollIntoView:!0})]),!0)}),ZA=\"#e5c07b\",fg=\"#e06c75\",BA=\"#56b6c2\",XA=\"#ffffff\",ro=\"#abb2bf\",xc=\"#7d8799\",LA=\"#61afef\",EA=\"#98c379\",ug=\"#d19a66\",WA=\"#c678dd\",VA=\"#21252b\",dg=\"#2c313a\",pg=\"#282c34\",Da=\"#353a42\",zA=\"#3E4451\",gg=\"#528bff\",qA=D.theme({\"&\":{color:ro,backgroundColor:pg},\".cm-content\":{caretColor:gg},\".cm-cursor, .cm-dropCursor\":{borderLeftColor:gg},\"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection\":{backgroundColor:zA},\".cm-panels\":{backgroundColor:VA,color:ro},\".cm-panels.cm-panels-top\":{borderBottom:\"2px solid black\"},\".cm-panels.cm-panels-bottom\":{borderTop:\"2px solid black\"},\".cm-searchMatch\":{backgroundColor:\"#72a1ff59\",outline:\"1px solid #457dff\"},\".cm-searchMatch.cm-searchMatch-selected\":{backgroundColor:\"#6199ff2f\"},\".cm-activeLine\":{backgroundColor:\"#6699ff0b\"},\".cm-selectionMatch\":{backgroundColor:\"#aafe661a\"},\"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\":{backgroundColor:\"#bad0f847\"},\".cm-gutters\":{backgroundColor:pg,color:xc,border:\"none\"},\".cm-activeLineGutter\":{backgroundColor:dg},\".cm-foldPlaceholder\":{backgroundColor:\"transparent\",border:\"none\",color:\"#ddd\"},\".cm-tooltip\":{border:\"none\",backgroundColor:Da},\".cm-tooltip .cm-tooltip-arrow:before\":{borderTopColor:\"transparent\",borderBottomColor:\"transparent\"},\".cm-tooltip .cm-tooltip-arrow:after\":{borderTopColor:Da,borderBottomColor:Da},\".cm-tooltip-autocomplete\":{\"& > ul > li[aria-selected]\":{backgroundColor:dg,color:ro}}},{dark:!0}),IA=jn.define([{tag:b.keyword,color:WA},{tag:[b.name,b.deleted,b.character,b.propertyName,b.macroName],color:fg},{tag:[b.function(b.variableName),b.labelName],color:LA},{tag:[b.color,b.constant(b.name),b.standard(b.name)],color:ug},{tag:[b.definition(b.name),b.separator],color:ro},{tag:[b.typeName,b.className,b.number,b.changed,b.annotation,b.modifier,b.self,b.namespace],color:ZA},{tag:[b.operator,b.operatorKeyword,b.url,b.escape,b.regexp,b.link,b.special(b.string)],color:BA},{tag:[b.meta,b.comment],color:xc},{tag:b.strong,fontWeight:\"bold\"},{tag:b.emphasis,fontStyle:\"italic\"},{tag:b.strikethrough,textDecoration:\"line-through\"},{tag:b.link,color:xc,textDecoration:\"underline\"},{tag:b.heading,fontWeight:\"bold\",color:fg},{tag:[b.atom,b.bool,b.special(b.variableName)],color:ug},{tag:[b.processingInstruction,b.string,b.inserted],color:EA},{tag:b.invalid,color:XA}]),_A=[qA,SO(IA)],YA={class:\"source-editor\"},NA=hS({__name:\"SourceEditor\",props:{modelValue:{}},emits:[\"update:modelValue\",\"exit\"],setup(n,{emit:e}){const t=n,i=e,s=mS(null);let r=null;const o=()=>document.documentElement.getAttribute(\"data-theme\")?.includes(\"dark\")||window.matchMedia(\"(prefers-color-scheme: dark)\").matches,l=c=>{const u=new DOMParser().parseFromString(c,\"text/html\");return u.querySelectorAll('a[data-type=\"mention\"]').forEach(p=>{const g=p.getAttribute(\"data-mention\");if(g){const m=u.createTextNode(g);p.parentNode?.replaceChild(m,p)}}),u.body.innerHTML},a=c=>{const f=\"    \";let u=\"\",d=0;const p=[\"a\",\"span\",\"strong\",\"em\",\"b\",\"i\",\"u\",\"s\",\"mark\",\"small\",\"sub\",\"sup\",\"code\",\"br\",\"img\"],g=[\"br\",\"hr\",\"img\",\"input\",\"meta\",\"link\",\"area\",\"base\",\"col\",\"embed\",\"param\",\"source\",\"track\",\"wbr\"];c=c.replace(/>\\s+</g,\"><\").trim();const m=c.split(/(<[^>]+>)/g).filter(O=>O.trim());for(const O of m)if(O.startsWith(\"</\")){d=Math.max(0,d-1);const y=O.match(/<\\/([a-zA-Z0-9]+)/)?.[1]?.toLowerCase();y&&!p.includes(y)&&(u+=`\n`+f.repeat(d)),u+=O}else if(O.startsWith(\"<\")){const y=O.match(/<([a-zA-Z0-9]+)/)?.[1]?.toLowerCase(),x=g.includes(y||\"\")||O.endsWith(\"/>\");y&&!p.includes(y)&&u&&(u+=`\n`+f.repeat(d)),u+=O,!x&&y&&!p.includes(y)&&d++}else u+=O;return u.trim()};cS(()=>{if(!s.value)return;const c=l(t.modelValue),f=a(c),u=[c2,RA(),_n.of([D$]),D.updateListener.of(p=>{p.docChanged&&i(\"update:modelValue\",p.state.doc.toString())}),D.lineWrapping];o()&&u.push(_A);const d=L.create({doc:f,extensions:u});r=new D({state:d,parent:s.value}),i(\"update:modelValue\",f)}),fS(()=>t.modelValue,c=>{r&&c!==r.state.doc.toString()&&r.dispatch({changes:{from:0,to:r.state.doc.length,insert:c}})}),uS(()=>{r?.destroy()});const h=()=>{i(\"exit\")};return(c,f)=>(dS(),pS(\"div\",YA,[zs(\"div\",{class:\"source-editor-toolbar\"},[f[1]||(f[1]=zs(\"span\",{class:\"text-xs text-neutral-content\"},\"Source Mode\",-1)),zs(\"button\",{type:\"button\",onClick:h,class:\"btn btn-xs btn-ghost\",title:\"Exit source mode\"},[...f[0]||(f[0]=[zs(\"i\",{class:\"fa-regular fa-eye\",\"aria-hidden\":\"true\"},null,-1),gS(\" Visual Editor \",-1)])])]),zs(\"div\",{ref_key:\"editorContainer\",ref:s,class:\"source-editor-content\"},null,512)]))}}),xD=OS(NA,[[\"__scopeId\",\"data-v-d2900713\"]]);export{xD as default};\n"
  },
  {
    "path": "public/build/assets/Tiptap-B5LGKvdR.css",
    "content": ".mention-list[data-v-c99f4ece]{min-width:200px}.mention-item[data-v-c99f4ece],.slash-command-item[data-v-aa19753b]{transition:background-color .1s}.bubble-menu[data-v-539a3ede]{z-index:845;position:relative}[data-v-539a3ede] .ProseMirror{min-height:200px;max-height:70vh;overflow-y:auto;border:1px solid hsl(var(--bc)/.1);border-radius:var(--rounded-btn);background-color:hsl(var(--b1)/1);padding:.6rem .8rem;margin-bottom:1rem}[data-v-539a3ede] .ProseMirror:focus{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:hsl(var(--p)/.3);border-color:transparent}[data-v-539a3ede] .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);--tw-text-opacity: .4;color:hsl(var(--bc)/var(--tw-text-opacity));pointer-events:none;float:left;height:0}[data-v-539a3ede] .iframe-wrapper{margin:1rem 0}[data-v-539a3ede] .iframe-wrapper iframe{max-width:100%;border:0}[data-v-539a3ede] .details{flex-direction:row}[data-v-539a3ede] .details summary{display:inline}.tiptap-editor table td,.tiptap-editor table th{box-sizing:border-box}.tiptap-editor table .selectedCell{background:hsl(var(--p)/1);color:hsl(var(--pc)/1)}.tiptap-editor table .selectedCell:after{content:\"\";inset:0;pointer-events:none;position:absolute;z-index:2}.tiptap-editor table .column-resize-handle{background:hsl(var(--p)/1);bottom:-2px;margin:0;pointer-events:none;position:absolute;right:-2px;top:0;width:4px}.tiptap-editor .tableWrapper{margin:1.5rem 0;overflow-x:auto}.tiptap-editor.resize-cursor{cursor:ew-resize;cursor:col-resize}.tiptap-editor .ProseMirror-selectednode img{outline:2px solid hsl(var(--p)/1)}.tiptap-editor [data-resize-handle]{position:absolute;background:hsl(var(--pc)/1);border:1px solid hsl(var(--pc)/1);border-radius:2px;z-index:10}.tiptap-editor [data-resize-handle]:hover{background:hsl(var(--p)/1)}.tiptap-editor [data-resize-handle][data-resize-handle=top-left],.tiptap-editor [data-resize-handle][data-resize-handle=top-right],.tiptap-editor [data-resize-handle][data-resize-handle=bottom-left],.tiptap-editor [data-resize-handle][data-resize-handle=bottom-right]{width:8px;height:8px}.tiptap-editor [data-resize-handle][data-resize-handle=top-left]{top:-4px;left:-4px;cursor:nwse-resize}.tiptap-editor [data-resize-handle][data-resize-handle=top-right]{top:-4px;right:-4px;cursor:nesw-resize}.tiptap-editor [data-resize-handle][data-resize-handle=bottom-left]{bottom:-4px;left:-4px;cursor:nesw-resize}.tiptap-editor [data-resize-handle][data-resize-handle=bottom-right]{bottom:-4px;right:-4px;cursor:nwse-resize}.tiptap-editor [data-resize-handle][data-resize-handle=top],.tiptap-editor [data-resize-handle][data-resize-handle=bottom]{height:6px;left:8px;right:8px}.tiptap-editor [data-resize-handle][data-resize-handle=top]{top:-3px;cursor:ns-resize}.tiptap-editor [data-resize-handle][data-resize-handle=bottom]{bottom:-3px;cursor:ns-resize}.tiptap-editor [data-resize-handle][data-resize-handle=left],.tiptap-editor [data-resize-handle][data-resize-handle=right]{width:6px;top:8px;bottom:8px}.tiptap-editor [data-resize-handle][data-resize-handle=left]{left:-3px;cursor:ew-resize}.tiptap-editor [data-resize-handle][data-resize-handle=right]{right:-3px;cursor:ew-resize}.tiptap-editor [data-resize-state=true] [data-resize-wrapper]{outline:2px solid hsl(var(--p)/1);border-radius:.125rem}\n"
  },
  {
    "path": "public/build/assets/Tiptap-Bd5ZGSft.js",
    "content": "const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[\"assets/GalleryDialog-B3Id-RLo.js\",\"assets/vendor-tiptap-D5xFoo7B.js\",\"assets/index-D5GkNzM3.js\",\"assets/_plugin-vue_export-helper-DlAUqK2U.js\",\"assets/GalleryDialog-SGgOgWve.css\",\"assets/SourceEditor-CaEGRaAo.js\",\"assets/SourceEditor-BKF0zshA.css\"])))=>i.map(i=>d[i]);\nimport{_ as de}from\"./preload-helper-I4rgV-VL.js\";import{U as Le,V as Te,W as Me,X as te,Y as re,Z as ve,_ as ae,f as O,E as Y,o as p,c as b,F as j,r as Q,a as n,n as x,d as D,t as _,b as S,i as R,z as B,$ as ye,a0 as xe,a1 as we,a2 as ke,a3 as Ce,a4 as oe,a5 as $e,a6 as He,a7 as Ee,a8 as Ie,w as q,p as ee,s as y,u as h,g as Ae,G as Fe,h as se,C as le,m as Se,q as U,J as Re,a9 as De,aa as Be,ab as Pe,ac as Ue,ad as je,ae as Ke,af as ze,ag as Oe,ah as Ne,ai as Ve,aj as qe,ak as We,al as Ge,j as ce,x as Z,am as J,an as fe,ao as Ze,M as ge}from\"./vendor-tiptap-D5xFoo7B.js\";import{_ as ue}from\"./_plugin-vue_export-helper-DlAUqK2U.js\";import{a as Je}from\"./index-D5GkNzM3.js\";const Qe=Le.extend({addAttributes(){return{...this.parent?.(),colwidth:{default:null,parseHTML:e=>{const s=e.getAttribute(\"colwidth\");if(s)return s.split(\",\").map(l=>parseInt(l,10));const t=e.style.width;return t&&t.endsWith(\"px\")?[parseInt(t,10)]:null},renderHTML:e=>e.colwidth?{colwidth:e.colwidth.join(\",\"),style:`width: ${e.colwidth[0]}px`}:{}}}}}),Xe=Te.extend({addAttributes(){return{...this.parent?.(),colwidth:{default:null,parseHTML:e=>{const s=e.getAttribute(\"colwidth\");if(s)return s.split(\",\").map(l=>parseInt(l,10));const t=e.style.width;return t&&t.endsWith(\"px\")?[parseInt(t,10)]:null},renderHTML:e=>e.colwidth?{colwidth:e.colwidth.join(\",\"),style:`width: ${e.colwidth[0]}px`}:{}}}}}),Ye=Me.extend({addAttributes(){return{...this.parent?.(),class:{default:null,parseHTML:e=>e.getAttribute(\"class\"),renderHTML:e=>e.class?{class:e.class}:{}}}},renderHTML({HTMLAttributes:e}){return[\"table\",te(this.options.HTMLAttributes,e),[\"tbody\",0]]}}),_e=new ae(\"mention\"),et=re.create({name:\"mention\",addOptions(){return{HTMLAttributes:{},renderLabel({options:e,node:s}){return s.attrs.label||s.attrs.name||s.attrs.id},suggestion:{char:\"@\",pluginKey:_e,command:({editor:e,range:s,props:t})=>{e.view.state.selection.$to.nodeAfter?.text?.startsWith(\" \")&&(s.to+=1);const o=t.section===\"entities\"?t.mention:t.inject;e.chain().focus().insertContentAt(s,[{type:\"text\",text:o},{type:\"text\",text:\" \"}]).run(),window.getSelection()?.collapseToEnd()},allow:({state:e,range:s})=>{const t=e.doc.resolve(s.from),l=e.schema.nodes[this.name];return!!t.parent.type.contentMatch.matchType(l)}}}},group:\"inline\",inline:!0,selectable:!0,atom:!0,draggable:!0,addAttributes(){return{id:{default:null,parseHTML:e=>e.getAttribute(\"data-id\"),renderHTML:e=>e.id?{\"data-id\":e.id}:{}},label:{default:null,parseHTML:e=>e.getAttribute(\"data-label\"),renderHTML:e=>({})},name:{default:null,parseHTML:e=>e.getAttribute(\"data-name\"),renderHTML:e=>e.name?{\"data-name\":e.name}:{}},mention:{default:null,parseHTML:e=>{const s=e.getAttribute(\"data-mention\");if(!s)return null;const t=s.match(/\\[?([a-zA-Z_]+:\\d+)/);return t?t[1]:s},renderHTML:e=>e.mention?{\"data-mention\":`[${e.mention}]`}:{}},image:{default:null,parseHTML:e=>e.getAttribute(\"data-image\"),renderHTML:e=>({})},entity:{default:null,parseHTML:e=>e.getAttribute(\"data-entity\"),renderHTML:e=>({})},url:{default:null,parseHTML:e=>e.getAttribute(\"data-url\"),renderHTML:e=>({})},config:{default:null,parseHTML:e=>e.getAttribute(\"data-config\"),renderHTML:e=>e.config?{\"data-config\":e.config}:{\"data-config\":\"\"}}}},parseHTML(){return[{tag:\"span[data-mention]\"}]},renderHTML({node:e,HTMLAttributes:s}){const t=this.options.renderLabel({options:this.options,node:e}),l=[];return e.attrs.image&&l.push([\"img\",{src:e.attrs.image,class:\"inline-block w-4 h-4 rounded-full object-cover mr-1 align-middle\",alt:t}]),l.push(t),e.attrs.config&&e.attrs.config.split(\"|\").find(o=>o.startsWith(\"alias:\"))&&l.push([\"i\",{class:\"fa-regular fa-masks-theater\"}]),[\"a\",te({\"data-type\":\"mention\"},this.options.HTMLAttributes,s),[\"span\",{class:\"rounded-xl bg-base-200 hover:bg-base-300 text-base-content px-2 py-0.5 inline-flex items-center gap-1 cursor-pointer\"},...l]]},renderText({node:e}){return e.attrs.mention||`[${e.attrs.label}]`},addKeyboardShortcuts(){return{Backspace:()=>this.editor.commands.command(({tr:e,state:s})=>{let t=!1;const{selection:l}=s,{empty:d,anchor:o}=l;return d?(s.doc.nodesBetween(o-1,o,(c,f)=>{if(c.type.name===this.name)return t=!0,e.insertText(this.options.suggestion.char||\"\",f,f+c.nodeSize),!1}),t):!1})}},addProseMirrorPlugins(){return[ve({editor:this.editor,...this.options.suggestion})]}}),tt={class:\"mention-list bg-base-100 shadow-lg rounded-lg z-50 max-h-[300px] overflow-y-auto\"},nt={class:\"section-header px-3 py-1 text-xs font-semibold text-neutral-content/70 bg-base-200/50 flex items-center gap-2\"},st=[\"onClick\"],it={class:\"flex gap-2 items-center\"},lt={key:0,class:\"fa-regular fa-plus text-success\",\"aria-hidden\":\"true\"},rt=[\"src\",\"alt\"],at={class:\"mention-name flex gap-1\"},ot=[\"innerHTML\"],ut=[\"innerHTML\"],dt=[\"innerHTML\"],ct={key:1,class:\"px-3 py-2 text-neutral-content text-xs\"},ft={key:0},gt={key:1},mt={key:2},pt=O({__name:\"MentionList\",props:{items:{},command:{type:Function},loading:{type:Boolean},query:{}},setup(e,{expose:s}){const t=e,l=R(0);Y(()=>t.items,()=>{l.value=0});const d={entities:{label:\"Entries\",icon:\"fa-regular fa-bookmark\"},posts:{label:\"Articles\",icon:\"fa-regular fa-newspaper\"},attributes:{label:\"Properties\",icon:\"fa-regular fa-heart\"},new:{label:\"Create New\",icon:\"fa-regular fa-plus\"}},o=B(()=>[\"entities\",\"posts\",\"attributes\",\"new\"].map(m=>({key:m,label:d[m].label,icon:d[m].icon,items:t.items.filter(L=>L.section===m)})).filter(m=>m.items.length>0)),c=B(()=>t.query.length<3),f=B(()=>!c.value&&t.loading),a=B(()=>!c.value&&!t.loading&&t.items.length===0),w=({event:M})=>M.key===\"ArrowUp\"?(E(),!0):M.key===\"ArrowDown\"?(F(),!0):M.key===\"Enter\"?(A(),!0):!1,E=()=>{l.value=(l.value+t.items.length-1)%t.items.length},F=()=>{l.value=(l.value+1)%t.items.length},A=()=>{C(l.value)},C=M=>{const m=t.items[M];m&&t.command(m)},I=(M,m)=>{let L=0;for(const T of o.value){if(T.key===M)return L+m;L+=T.items.length}return L};return s({onKeyDown:w}),(M,m)=>(p(),b(\"div\",tt,[e.items.length?(p(!0),b(j,{key:0},Q(o.value,L=>(p(),b(\"div\",{key:L.key,class:\"mention-section\"},[n(\"div\",nt,[n(\"i\",{class:x(L.icon),\"aria-hidden\":\"true\"},null,2),D(\" \"+_(L.label),1)]),(p(!0),b(j,null,Q(L.items,(T,g)=>(p(),b(\"button\",{key:T.id??`${L.key}-${g}`,onClick:v=>C(I(L.key,g)),class:x([\"mention-item flex items-center gap-2 w-full text-left px-3 py-2 hover:bg-base-200 text-xs justify-between cursor-pointer\",{\"bg-base-200\":I(L.key,g)===l.value}])},[n(\"div\",it,[L.key===\"new\"?(p(),b(\"i\",lt)):T.image?(p(),b(\"img\",{key:1,src:T.image,alt:T.name,loading:\"lazy\",class:\"w-6 h-6 rounded-full object-cover\"},null,8,rt)):S(\"\",!0),n(\"span\",at,[n(\"span\",{innerHTML:T.name},null,8,ot),T.alias_name?(p(),b(j,{key:0},[m[0]||(m[0]=n(\"i\",{class:\"fa-regular fa-masks-theater\",\"aria-hidden\":\"true\"},null,-1)),D(\" (\"+_(T.alias_name)+\") \",1)],64)):S(\"\",!0)])]),T.type?(p(),b(\"span\",{key:0,class:\"mention-type text-neutral-content\",innerHTML:T.type},null,8,ut)):S(\"\",!0),T.value?(p(),b(\"span\",{key:1,class:\"text-neutral-content\",innerHTML:T.value},null,8,dt)):S(\"\",!0)],10,st))),128))]))),128)):(p(),b(\"div\",ct,[c.value?(p(),b(\"span\",ft,\" Type at least 3 characters \")):f.value?(p(),b(\"span\",gt,[...m[1]||(m[1]=[n(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},null,-1),D(\" Loading... \",-1)])])):a.value?(p(),b(\"span\",mt,\" No results \")):S(\"\",!0)]))]))}}),ht=ue(pt,[[\"__scopeId\",\"data-v-c99f4ece\"]]),me=(e,s)=>{xe({getBoundingClientRect:()=>Ce(e.view,e.state.selection.from,e.state.selection.to)},s,{placement:\"bottom-start\",strategy:\"absolute\",middleware:[we(),ke()]}).then(({x:l,y:d,strategy:o})=>{s.style.width=\"max-content\",s.style.position=o,s.style.left=`${l}px`,s.style.top=`${d}px`})},bt=(e,s)=>{let t=null;return{char:\"@\",items:async({query:l})=>{if(l.length<3)return[];t&&t.abort(),t=new AbortController;try{const d=new URL(e);d.searchParams.set(\"q\",l);const o=await fetch(d.toString(),{signal:t.signal});if(!o.ok)return[];const c=await o.json(),f=[];return c.entities?.length&&c.entities.forEach(a=>{f.push({id:a.id,name:a.name,image:a.image,url:a.url,aliases:a.aliases,alias_name:a.alias_name,alias_id:a.alias_id,mention:a.mention,type:a.type,section:\"entities\"})}),c.posts?.length&&c.posts.forEach(a=>{f.push({id:a.id,name:a.name,inject:a.inject,section:\"posts\"})}),c.attributes?.length&&c.attributes.forEach(a=>{f.push({id:a.id,name:a.name,value:a.value,inject:a.inject,section:\"attributes\"})}),c.new?.length&&c.new.forEach(a=>{f.push({name:a.name,type:a.type,inject:a.inject,section:\"new\"})}),f}catch(d){return d.name===\"AbortError\"?[]:(console.error(\"Error fetching mentions:\",d),[])}},render:()=>{let l;return{onStart:d=>{l=new ye(ht,{props:{items:d.items,command:o=>{s&&o.section===\"entities\"&&s({id:parseInt(o.id),name:o.name,type:o.type,image:o.image,url:o.url,aliases:o.aliases}),d.command(o)},loading:d.query&&d.query.length>=3,query:d.query||\"\"},editor:d.editor}),d.clientRect&&(l.element.style.position=\"absolute\",document.body.appendChild(l.element),me(d.editor,l.element))},onUpdate(d){const o=d.query&&d.query.length>=3&&d.items.length===0,c=f=>{s&&f.section===\"entities\"&&s({id:parseInt(f.id),name:f.name,type:f.type,image:f.image,url:f.url,aliases:f.aliases}),d.command(f)};l.updateProps({items:d.items,command:c,loading:o,query:d.query||\"\"}),d.clientRect&&me(d.editor,l.element)},onKeyDown(d){return d.event.key===\"Escape\"?(l.destroy(),!0):l.ref?.onKeyDown(d)},onExit(){l.destroy()}}}}},vt=new ae(\"mentionParser\"),yt=oe.create({name:\"mentionParser\",addOptions(){return{entities:[]}},addProseMirrorPlugins(){return[new $e({key:vt,appendTransaction:(e,s,t)=>{if(!e.some(a=>a.docChanged))return null;const d=\"value\"in this.options.entities?this.options.entities.value:this.options.entities||[],o=t.tr;let c=!1;const f=/\\[([a-zA-Z_]+):(\\d+)(?:\\|[^\\]]+)?\\]/g;return t.doc.descendants((a,w)=>{if(a.isText&&a.text){const E=a.text;let F;const A=[];for(;(F=f.exec(E))!==null;){const C=F[0],I=F[1],M=F[2];if(I===\"post\")continue;const m=`${I}:${M}`;let L,T;const g=C.indexOf(\"|\");if(g!==-1){const v=C.substring(g+1,C.length-1).split(\"|\"),u=[];for(const r of v)r.includes(\":\")?u.push(r):L||(L=r);u.length>0&&(T=u.join(\"|\"))}A.push({start:w+F.index,end:w+F.index+F[0].length,mention:m,module:I,id:M,customLabel:L,config:T})}for(let C=A.length-1;C>=0;C--){const{start:I,end:M,mention:m,module:L,id:T,customLabel:g,config:v}=A[C],u=o.mapping.map(I),r=o.mapping.map(M);if(o.doc.resolve(u),o.doc.nodeAt(u)?.type.name!==\"mention\"){const k=t.schema.nodes.mention;if(k){const $=d.find(z=>z.id===parseInt(T));$?$.name:`${L}${T}`;const N=g||\"\",P=$?.image||null,G=$?.url||null;let W=$?$.name:`${L}:${T}`;if(v&&$?.aliases){const z=v.match(/alias:(\\d+)/);if(z){const V=$.aliases.find(X=>X.id===parseInt(z[1]));V&&(W=V.name)}}const K=k.create({id:T,name:W,label:N,mention:m,image:P,url:G,config:v||null,entity:$});o.replaceWith(u,r,K),c=!0}}}}}),c?o:null}})]}}),xt=new ae(\"slashCommand\"),wt=oe.create({name:\"slashCommand\",addOptions(){return{suggestion:{char:\"/\",pluginKey:xt,command:({editor:e,range:s,props:t})=>{e.chain().focus().deleteRange(s).run(),t.command(e)}}}},addProseMirrorPlugins(){return[ve({editor:this.editor,...this.options.suggestion})]}}),kt={class:\"slash-command-list bg-base-100 shadow-lg rounded-lg z-50 max-h-[300px] overflow-y-auto min-w-[200px]\"},Ct=[\"onClick\"],At={class:\"w-6 h-6 rounded bg-base-200 flex items-center justify-center\"},Ft={class:\"flex flex-col\"},Lt={class:\"font-medium text-sm\"},Tt={class:\"text-xs text-neutral-content\"},Mt={key:1,class:\"px-3 py-2 text-neutral-content text-sm\"},$t=O({__name:\"SlashCommandList\",props:{items:{},command:{type:Function}},setup(e,{expose:s}){const t=e,l=R(0);Y(()=>t.items,()=>{l.value=0});const d=({event:w})=>w.key===\"ArrowUp\"?(o(),!0):w.key===\"ArrowDown\"?(c(),!0):w.key===\"Enter\"?(f(),!0):!1,o=()=>{l.value=(l.value+t.items.length-1)%t.items.length},c=()=>{l.value=(l.value+1)%t.items.length},f=()=>{a(l.value)},a=w=>{const E=t.items[w];E&&t.command(E)};return s({onKeyDown:d}),(w,E)=>(p(),b(\"div\",kt,[e.items.length?(p(!0),b(j,{key:0},Q(e.items,(F,A)=>(p(),b(\"button\",{key:F.title,onClick:C=>a(A),class:x([\"slash-command-item flex items-center gap-2 w-full text-left px-3 py-2 hover:bg-base-300 text-sm cursor-pointer\",{\"bg-base-300\":A===l.value}])},[n(\"div\",At,[n(\"i\",{class:x([F.icon,\"text-xs\"]),\"aria-hidden\":\"true\"},null,2)]),n(\"div\",Ft,[n(\"span\",Lt,_(F.title),1),n(\"span\",Tt,_(F.description),1)])],10,Ct))),128)):(p(),b(\"div\",Mt,\" No commands found \"))]))}}),Ht=ue($t,[[\"__scopeId\",\"data-v-aa19753b\"]]),pe=(e,s)=>{xe({getBoundingClientRect:()=>Ce(e.view,e.state.selection.from,e.state.selection.to)},s,{placement:\"bottom-start\",strategy:\"absolute\",middleware:[we(),ke()]}).then(({x:l,y:d,strategy:o})=>{s.style.width=\"max-content\",s.style.position=o,s.style.left=`${l}px`,s.style.top=`${d}px`})},Et=`\n  <table class=\"table table-striped table-bordered\" style=\"width: 200px;\">\n    <thead>\n        <tr>\n            <th><p></p></th>\n            <th><p></p></th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n          <td><p></p></td>\n          <td><p></p></td>\n        </tr>\n        <tr>\n          <td><p></p></td>\n          <td><p></p></td>\n        </tr>\n    </tbody>\n  </table>`,It=[{title:\"Source\",description:\"Edit raw HTML source\",icon:\"fa-regular fa-code\",command:e=>{window.dispatchEvent(new CustomEvent(\"tiptap:source-mode\"))}},{title:\"Gallery\",description:\"Insert an image from gallery\",icon:\"fa-regular fa-images\",searchTerms:[\"image\",\"photo\",\"picture\",\"media\"],command:e=>{e.commands.openGallery()}},{title:\"Insert Media\",description:\"Upload an image from your device\",icon:\"fa-regular fa-upload\",searchTerms:[\"image\",\"photo\",\"picture\",\"media\",\"upload\",\"file\"],command:e=>{e.commands.uploadMedia()}},{title:\"Table\",description:\"Insert a table\",icon:\"fa-regular fa-table\",command:e=>{e.chain().focus().insertContent(Et,{parseOptions:{preserveWhitespace:!0}}).run()}},{title:\"Heading 1\",description:\"Huge heading\",icon:\"fa-regular fa-heading\",command:e=>{e.chain().focus().toggleHeading({level:1}).run()}},{title:\"Heading 2\",description:\"Large heading\",icon:\"fa-regular fa-heading\",command:e=>{e.chain().focus().toggleHeading({level:2}).run()}},{title:\"Heading 3\",description:\"Medium heading\",icon:\"fa-regular fa-heading\",command:e=>{e.chain().focus().toggleHeading({level:3}).run()}},{title:\"Bullet List\",description:\"Create a bullet list\",icon:\"fa-regular fa-list-ul\",command:e=>{e.chain().focus().toggleBulletList().run()}},{title:\"Numbered List\",description:\"Create a numbered list\",icon:\"fa-regular fa-list-ol\",command:e=>{e.chain().focus().toggleOrderedList().run()}},{title:\"Task List\",description:\"Create a checklist\",icon:\"fa-regular fa-square-check\",searchTerms:[\"checkbox\",\"checklist\",\"todo\",\"task\"],command:e=>{e.chain().focus().toggleTaskList().run()}},{title:\"Quote\",description:\"Insert a quote block\",icon:\"fa-regular fa-quote-right\",command:e=>{e.chain().focus().toggleBlockquote().run()}},{title:\"Code Block\",description:\"Insert a code block\",icon:\"fa-regular fa-code\",command:e=>{e.chain().focus().toggleCodeBlock().run()}},{title:\"Horizontal Rule\",description:\"Insert a divider\",icon:\"fa-regular fa-minus\",command:e=>{e.chain().focus().setHorizontalRule().run()}}],St=()=>({items:({query:e})=>{const s=e.toLowerCase();return It.filter(t=>t.title.toLowerCase().includes(s)||t.searchTerms?.some(l=>l.includes(s)))},render:()=>{let e;return{onStart:s=>{e=new ye(Ht,{props:{items:s.items,command:s.command},editor:s.editor}),s.clientRect&&(e.element.style.position=\"absolute\",document.body.appendChild(e.element),pe(s.editor,e.element))},onUpdate(s){e.updateProps({items:s.items,command:s.command}),s.clientRect&&pe(s.editor,e.element)},onKeyDown(s){return s.event.key===\"Escape\"?(e.destroy(),!0):e.ref?.onKeyDown(s)},onExit(){e.destroy()}}}}),Rt=oe.create({name:\"gallery\",addOptions(){return{galleryUrl:\"\",galleryId:\"\"}},addCommands(){return{openGallery:()=>({editor:e})=>{const s=new CustomEvent(\"tiptap:open-gallery\",{detail:{editor:e,galleryUrl:this.options.galleryUrl,galleryId:this.options.galleryId}});return window.dispatchEvent(s),!0},uploadMedia:()=>({editor:e})=>{const s=this.options.galleryUrl,t=document.createElement(\"input\");return t.type=\"file\",t.accept=\"image/png,image/jpg,image/jpeg,image/gif,image/webp\",t.onchange=async()=>{const l=t.files?.[0];if(!l)return;const d=new FormData;d.append(\"file\",l);try{const o=await Je.post(s,d);o.status===200&&o.data&&e.chain().focus().setImage({src:o.data.src,\"data-uuid\":o.data.uuid}).run()}catch(o){if(o.response?.status===204||o.response?.data){const c=o.response?.data?.errors||o.response?.data||\"Upload failed\";window.showToast(c,\"error\")}else window.showToast(\"Upload failed\",\"error\")}},t.click(),!0}}}}),Dt=He.extend({name:\"image\",addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null},\"data-gallery-id\":{default:null},class:{default:null,parseHTML:e=>(e.getAttribute(\"class\")||\"\").split(/\\s+/).filter(l=>![\"note-float-left\",\"note-float-right\",\"float-left\",\"float-right\"].includes(l)).join(\" \").trim()||null},width:{default:null,parseHTML:e=>{const t=(e.getAttribute(\"style\")||\"\").match(/width:\\s*(\\d+(?:\\.\\d+)?)px/);if(t)return parseFloat(t[1]);const l=e.getAttribute(\"width\");return l?parseFloat(l):null},renderHTML:()=>({})},height:{default:null,parseHTML:e=>{const t=(e.getAttribute(\"style\")||\"\").match(/height:\\s*(\\d+(?:\\.\\d+)?)px/);if(t)return parseFloat(t[1]);const l=e.getAttribute(\"height\");return l?parseFloat(l):null},renderHTML:()=>({})},widthStyle:{default:null,parseHTML:e=>{const t=(e.getAttribute(\"style\")||\"\").match(/width:\\s*(\\d+%)/);return t?t[1]:null},renderHTML:()=>({})},floatStyle:{default:null,parseHTML:e=>{const t=(e.getAttribute(\"style\")||\"\").match(/float:\\s*(left|right)/);if(t)return t[1];const l=e.getAttribute(\"class\")||\"\";return l.includes(\"note-float-left\")||l.includes(\"float-left\")?\"left\":l.includes(\"note-float-right\")||l.includes(\"float-right\")?\"right\":null},renderHTML:()=>({})}}},renderHTML({node:e,HTMLAttributes:s}){const{width:t,height:l,widthStyle:d,floatStyle:o}=e.attrs,c=[];d?c.push(`width: ${d}`):t!=null&&c.push(`width: ${typeof t==\"number\"?`${t}px`:t}`),!d&&l!=null&&c.push(`height: ${typeof l==\"number\"?`${l}px`:l}`),o&&(c.push(`float: ${o}`),o===\"left\"&&c.push(\"margin-right: 0.5rem\"),o===\"right\"&&c.push(\"margin-left: 0.5rem\"));const f=c.length>0?{style:c.join(\"; \")}:{};return[\"img\",te(this.options.HTMLAttributes,s,f)]},addCommands(){return{...this.parent?.(),setImageWidth:e=>({commands:s})=>s.updateAttributes(\"image\",{widthStyle:e,width:null,height:null}),setImageFloat:e=>({commands:s})=>s.updateAttributes(\"image\",{floatStyle:e})}},addNodeView(){if(!this.options.resize?.enabled||typeof document>\"u\")return null;const{directions:e,minWidth:s,minHeight:t,alwaysPreserveAspectRatio:l}=this.options.resize;return({node:d,getPos:o,HTMLAttributes:c,editor:f})=>{const a=document.createElement(\"img\");Object.entries(c).forEach(([A,C])=>{if(C!=null)switch(A){case\"width\":case\"height\":break;default:a.setAttribute(A,C);break}}),a.src=c.src;const w=(A,C)=>{const{widthStyle:I,floatStyle:M}=A;I?(C.style.width=I,a.style.width=\"100%\",a.style.height=\"auto\"):C.style.width=\"\",C.style.float=M||\"\",C.style.marginRight=M===\"left\"?\"0.5rem\":\"\",C.style.marginLeft=M===\"right\"?\"0.5rem\":\"\"},E=new Ee({element:a,editor:f,node:d,getPos:o,onResize:(A,C)=>{a.style.width=`${A}px`,a.style.height=`${C}px`},onCommit:(A,C)=>{const I=o();I!==void 0&&this.editor.chain().setNodeSelection(I).updateAttributes(this.name,{width:A,height:C,widthStyle:null}).run()},onUpdate:A=>A.type!==d.type?!1:(w(A.attrs,E.dom),!0),options:{directions:e,min:{width:s,height:t},preserveAspectRatio:l===!0}}),F=E.dom;return F.style.visibility=\"hidden\",F.style.pointerEvents=\"none\",a.onload=()=>{F.style.visibility=\"\",F.style.pointerEvents=\"\"},w(d.attrs,F),E}}}),Bt=re.create({name:\"iframe\",group:\"block\",atom:!0,addOptions(){return{allowFullscreen:!0,HTMLAttributes:{class:\"iframe-wrapper relative overflow-hidden max-w-full h-fit\"}}},addAttributes(){return{src:{default:null,parseHTML:e=>e.getAttribute(\"src\")},frameborder:{default:0,parseHTML:e=>e.getAttribute(\"frameborder\")||0},allowfullscreen:{default:this.options.allowFullscreen,parseHTML:e=>e.hasAttribute(\"allowfullscreen\")},width:{default:\"100%\",parseHTML:e=>e.getAttribute(\"width\")||\"100%\"},height:{default:315,parseHTML:e=>e.getAttribute(\"height\")||315},allow:{default:\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\",parseHTML:e=>e.getAttribute(\"allow\")},title:{default:null,parseHTML:e=>e.getAttribute(\"title\")},style:{default:null,parseHTML:e=>e.getAttribute(\"style\")}}},parseHTML(){return[{tag:\"iframe\"}]},renderHTML({HTMLAttributes:e}){return[\"div\",this.options.HTMLAttributes,[\"iframe\",e]]},addCommands(){return{setIframe:e=>({tr:s,dispatch:t})=>{const{selection:l}=s,d=this.type.create(e);return t&&s.replaceRangeWith(l.from,l.to,d),!0}}}}),Pt=re.create({name:\"div\",group:\"block\",content:\"block+\",defining:!0,addAttributes(){return{class:{default:null,parseHTML:e=>e.getAttribute(\"class\")},style:{default:null,parseHTML:e=>e.getAttribute(\"style\")}}},parseHTML(){return[{tag:\"div\",getAttrs:e=>e.parentElement?.getAttribute(\"data-type\")===\"taskItem\"?!1:{}}]},renderHTML({HTMLAttributes:e}){return[\"div\",te(e),0]}}),Ut=Ie.extend({addAttributes(){return{...this.parent?.(),style:{default:null,parseHTML:e=>e.getAttribute(\"style\")||null,renderHTML:e=>e.style?{style:e.style}:{}}}}}),jt={class:\"flex items-center gap-2 text-xs text-neutral-content px-2\"},Kt=[\"placeholder\"],zt=[\"href\"],Ot={key:1,class:\"text-neutral-content flex items-center gap-1\"},Nt=O({__name:\"MentionBubbleMenu\",props:{editor:{},mentions:{}},setup(e,{expose:s}){const t=e,l=R(null),d=R(\"\"),o=R(null),c=R(\"\"),f=R(!1);s({syncLabel:()=>{const g=t.editor.getAttributes(\"mention\");g?.entity&&(d.value=g?.label||\"\")}});const w=()=>{t.editor.chain().focus().deleteSelection().run()},E=()=>{},F=()=>{let g=d.value.trim();const u=t.editor.getAttributes(\"mention\")?.id,r=t.mentions.find(i=>i.id===parseInt(u));g===r?.name&&(g=\"\"),t.editor.chain().focus().updateAttributes(\"mention\",{label:g}).run(),d.value=\"\"},A=g=>{const v=g.relatedTarget;v&&v.closest(\".bubble-menu\")||F()},C=g=>{g.key===\"Enter\"?(g.preventDefault(),F()):g.key===\"Escape\"&&(g.preventDefault(),d.value=\"\",t.editor.commands.focus())},I=()=>{const g=t.editor.getAttributes(\"mention\");c.value=g?.config||\"\",f.value=!0,setTimeout(()=>{o.value?.focus(),o.value?.select()},10)},M=()=>{const g=c.value.trim();t.editor.chain().focus().updateAttributes(\"mention\",{config:g||null}).run(),f.value=!1,c.value=\"\"},m=g=>{const v=g.relatedTarget;v&&v.closest(\".bubble-menu\")||M()},L=()=>{t.editor.chain().focus().updateAttributes(\"mention\",{config:null}).run(),f.value=!1,c.value=\"\"},T=g=>{g.key===\"Enter\"?(g.preventDefault(),M()):g.key===\"Escape\"&&(g.preventDefault(),f.value=!1,c.value=\"\",t.editor.commands.focus())};return(g,v)=>(p(),b(\"div\",jt,[f.value?(p(),b(j,{key:0},[q(n(\"input\",{ref_key:\"mentionConfigInput\",ref:o,\"onUpdate:modelValue\":v[0]||(v[0]=u=>c.value=u),type:\"text\",placeholder:\"page:abilities|anchor:#ability-1\",class:\"p-0 px-1 rounded text-xs outline-none focus:ring-1 focus:ring-primary min-w-[250px]\",onBlur:m,onKeydown:T},null,544),[[ee,c.value]]),e.editor.getAttributes(\"mention\").config?(p(),b(\"button\",{key:0,onClick:y(L,[\"prevent\"]),class:\"hover:text-warning\",title:\"Clear config\"},[...v[2]||(v[2]=[n(\"i\",{class:\"fa-regular fa-times\"},null,-1)])])):S(\"\",!0)],64)):(p(),b(j,{key:1},[e.editor.getAttributes(\"mention\").entity?(p(),b(j,{key:0},[q(n(\"input\",{ref_key:\"mentionLabelInput\",ref:l,\"onUpdate:modelValue\":v[1]||(v[1]=u=>d.value=u),type:\"text\",placeholder:e.editor.getAttributes(\"mention\").entity.name,class:\"p-0 px-1 rounded text-xs outline-none focus:ring-1 focus:ring-primary min-w-[150px]\",onFocus:E,onBlur:A,onKeydown:C},null,40,Kt),[[ee,d.value]]),e.editor.getAttributes(\"mention\").url?(p(),b(\"a\",{key:0,class:\"text-link\",href:e.editor.getAttributes(\"mention\").url,title:\"Go to entity\"},[...v[3]||(v[3]=[n(\"i\",{class:\"fa-regular fa-external-link-alt\",\"aria-hidden\":\"true\"},null,-1)])],8,zt)):S(\"\",!0)],64)):(p(),b(\"span\",Ot,[...v[4]||(v[4]=[n(\"i\",{class:\"fa-regular fa-exclamation-triangle\",\"aria-hidden\":\"true\"},null,-1),D(\" Unknown entity \",-1)])])),n(\"button\",{onClick:y(I,[\"prevent\"]),class:x([\"hover:text-primary\",{\"text-primary\":e.editor.getAttributes(\"mention\").config}]),title:\"Customize mention\"},[...v[5]||(v[5]=[n(\"i\",{class:\"fa-regular fa-cog\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:y(w,[\"prevent\"]),class:\"hover:text-error-content\",title:\"Remove mention\"},[...v[6]||(v[6]=[n(\"i\",{class:\"fa-regular fa-trash\",\"aria-hidden\":\"true\"},null,-1)])])],64))]))}}),Vt={class:\"flex gap-2 items-center text-xs text-neutral-content px-2\"},qt=[\"href\"],Wt=O({__name:\"LinkBubbleMenu\",props:{editor:{}},setup(e){const s=e,t=R(null),l=R(\"\");Y(()=>s.editor.getAttributes(\"link\").href,a=>{l.value=a||\"\"},{immediate:!0}),Y(()=>s.editor.isActive(\"link\")&&s.editor.state.selection.empty,a=>{a&&setTimeout(()=>t.value?.focus(),10)});const d=()=>{if(!l.value){s.editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();return}let a=l.value;/^https?:\\/\\//i.test(a)||(a=\"https://\"+a),s.editor.chain().focus().extendMarkRange(\"link\").setLink({href:a}).run()},o=()=>{s.editor.chain().focus().extendMarkRange(\"link\").unsetLink().run()},c=()=>{s.editor.getAttributes(\"link\").href?s.editor.commands.focus():s.editor.chain().focus().extendMarkRange(\"link\").unsetLink().run()},f=a=>{a.key===\"Enter\"?(a.preventDefault(),d()):a.key===\"Escape\"&&(a.preventDefault(),c())};return(a,w)=>(p(),b(\"div\",Vt,[q(n(\"input\",{ref_key:\"linkInputRef\",ref:t,\"onUpdate:modelValue\":w[0]||(w[0]=E=>l.value=E),type:\"text\",placeholder:\"Enter URL...\",class:\"p-0 px-1 rounded text-xs outline-none focus:ring-1 focus:ring-primary min-w-[200px]\",onKeydown:f},null,544),[[ee,l.value]]),e.editor.isActive(\"link\")?(p(),b(\"a\",{key:0,href:e.editor.getAttributes(\"link\").href,target:\"_blank\",class:\"hover:text-base-content\",title:\"Open in a new window\"},[...w[1]||(w[1]=[n(\"i\",{class:\"fa-regular fa-external-link-alt\"},null,-1)])],8,qt)):S(\"\",!0),e.editor.isActive(\"link\")?(p(),b(\"button\",{key:1,onClick:y(o,[\"prevent\"]),class:\"hover:text-error-content\",title:\"Remove link\"},[...w[2]||(w[2]=[n(\"i\",{class:\"fa-regular fa-unlink\",\"aria-label\":\"Removal icon\"},null,-1)])])):S(\"\",!0)]))}}),H=e=>{const s=\"px-2 py-1 rounded-lg hover:bg-base-200 block hover:text-base-content \",t=e?\"bg-base-300 border-primary text-base-content\":\"text-neutral-content \";return s+\" \"+t},Gt={class:\"flex gap-1 items-center text-xs text-neutral-content px-2\"},Zt=O({__name:\"TableBubbleMenu\",props:{editor:{}},setup(e){const s=e,t=()=>{const{selection:u}=s.editor.state,{$from:r}=u;for(let i=r.depth;i>0;i--){const k=r.node(i);if(k.type.name===\"table\")return{node:k,pos:r.before(i)}}return null},l=()=>(t()?.node.attrs.class||\"\").split(\" \").filter(Boolean),d=u=>l().includes(u),o=B(()=>d(\"table-bordered\")),c=B(()=>d(\"table-striped\")),f=B(()=>d(\"table-left\")),a=B(()=>d(\"table-right\")),w=u=>{const r=t();if(!r)return;u.some(k=>k.startsWith(\"table-\"))&&!u.includes(\"table\")&&u.unshift(\"table\");const{tr:i}=s.editor.state;i.setNodeMarkup(r.pos,void 0,{...r.node.attrs,class:u.join(\" \")||null}),s.editor.view.dispatch(i)},E=(u,r=[])=>{const i=l(),k=i.filter($=>!r.includes($));i.includes(u)?w(k.filter($=>$!==u)):w([...k,u])},F=()=>E(\"table-bordered\"),A=()=>E(\"table-striped\"),C=()=>E(\"table-left\",[\"table-right\"]),I=()=>E(\"table-right\",[\"table-left\"]),M=()=>{s.editor.chain().focus().addColumnAfter().run()},m=()=>{s.editor.chain().focus().addRowAfter().run()},L=()=>{s.editor.chain().focus().deleteTable().run()},T=()=>{s.editor.chain().focus().deleteRow().run()},g=()=>{s.editor.chain().focus().deleteColumn().run()},v=()=>{s.editor.chain().focus().toggleHeaderRow().run()};return(u,r)=>(p(),b(\"div\",Gt,[n(\"button\",{onClick:y(M,[\"prevent\"]),class:x(h(H)(!1)),title:\"Add column\"},[...r[0]||(r[0]=[n(\"i\",{class:\"fa-regular fa-table-columns\",\"aria-hidden\":\"true\"},null,-1),n(\"i\",{class:\"fa-regular fa-plus text-[8px]\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:y(m,[\"prevent\"]),class:x(h(H)(!1)),title:\"Add row\"},[...r[1]||(r[1]=[n(\"i\",{class:\"fa-regular fa-table-rows\",\"aria-hidden\":\"true\"},null,-1),n(\"i\",{class:\"fa-regular fa-plus text-[8px]\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:y(g,[\"prevent\"]),class:x(h(H)(!1)),title:\"Delete column\"},[...r[2]||(r[2]=[n(\"i\",{class:\"fa-regular fa-table-columns\",\"aria-hidden\":\"true\"},null,-1),n(\"i\",{class:\"fa-regular fa-minus text-[8px]\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:y(T,[\"prevent\"]),class:x(h(H)(!1)),title:\"Delete row\"},[...r[3]||(r[3]=[n(\"i\",{class:\"fa-regular fa-table-rows\",\"aria-hidden\":\"true\"},null,-1),n(\"i\",{class:\"fa-regular fa-minus text-[8px]\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:y(v,[\"prevent\"]),class:x(h(H)(!1)),title:\"Toggle header row\"},[...r[4]||(r[4]=[n(\"i\",{class:\"fa-regular fa-heading\",\"aria-hidden\":\"true\"},null,-1)])],2),r[10]||(r[10]=n(\"span\",{class:\"w-px h-4 bg-base-content/20 mx-1\"},null,-1)),n(\"button\",{onClick:y(F,[\"prevent\"]),class:x(h(H)(o.value)),title:\"Toggle bordered\"},[...r[5]||(r[5]=[n(\"i\",{class:\"fa-regular fa-border-all\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:y(A,[\"prevent\"]),class:x(h(H)(c.value)),title:\"Toggle striped\"},[...r[6]||(r[6]=[n(\"i\",{class:\"fa-regular fa-bars\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:y(C,[\"prevent\"]),class:x(h(H)(f.value)),title:\"Align left\"},[...r[7]||(r[7]=[n(\"i\",{class:\"fa-regular fa-align-left\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:y(I,[\"prevent\"]),class:x(h(H)(a.value)),title:\"Align right\"},[...r[8]||(r[8]=[n(\"i\",{class:\"fa-regular fa-align-right\",\"aria-hidden\":\"true\"},null,-1)])],2),r[11]||(r[11]=n(\"span\",{class:\"w-px h-4 bg-base-content/20 mx-1\"},null,-1)),n(\"button\",{onClick:y(L,[\"prevent\"]),class:\"hover:text-error-content px-2 py-1\",title:\"Delete table\"},[...r[9]||(r[9]=[n(\"i\",{class:\"fa-regular fa-trash\",\"aria-hidden\":\"true\"},null,-1)])])]))}}),Jt={class:\"flex gap-1 items-center text-xs text-neutral-content px-2\"},Qt={class:\"flex items-center gap-0.5 border-r border-base-300 pr-2 mr-1\"},Xt={class:\"flex items-center gap-0.5 border-r border-base-300 pr-2 mr-1\"},Yt=O({__name:\"ImageBubbleMenu\",props:{editor:{}},setup(e){const s=e,t=f=>{s.editor.commands.setImageWidth(f)},l=f=>{s.editor.commands.setImageFloat(f)},d=()=>{s.editor.chain().focus().deleteSelection().run()},o=()=>s.editor.getAttributes(\"image\").widthStyle||null,c=()=>s.editor.getAttributes(\"image\").floatStyle||null;return(f,a)=>(p(),b(\"div\",Jt,[n(\"div\",Qt,[n(\"button\",{onClick:a[0]||(a[0]=y(w=>t(\"25%\"),[\"prevent\"])),class:x(h(H)(o()===\"25%\")),title:\"25% width\"},\" 25% \",2),n(\"button\",{onClick:a[1]||(a[1]=y(w=>t(\"50%\"),[\"prevent\"])),class:x(h(H)(o()===\"50%\")),title:\"50% width\"},\" 50% \",2),n(\"button\",{onClick:a[2]||(a[2]=y(w=>t(\"100%\"),[\"prevent\"])),class:x(h(H)(o()===\"100%\")),title:\"100% width\"},\" 100% \",2),n(\"button\",{onClick:a[3]||(a[3]=y(w=>t(null),[\"prevent\"])),class:x(h(H)(o()===null)),title:\"Reset width\"},[...a[7]||(a[7]=[n(\"i\",{class:\"fa-regular fa-undo\",\"aria-hidden\":\"true\"},null,-1)])],2)]),n(\"div\",Xt,[n(\"button\",{onClick:a[4]||(a[4]=y(w=>l(\"left\"),[\"prevent\"])),class:x(h(H)(c()===\"left\")),title:\"Float left\"},[...a[8]||(a[8]=[n(\"i\",{class:\"fa-regular fa-align-left\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:a[5]||(a[5]=y(w=>l(\"right\"),[\"prevent\"])),class:x(h(H)(c()===\"right\")),title:\"Float right\"},[...a[9]||(a[9]=[n(\"i\",{class:\"fa-regular fa-align-right\",\"aria-hidden\":\"true\"},null,-1)])],2),n(\"button\",{onClick:a[6]||(a[6]=y(w=>l(null),[\"prevent\"])),class:x(h(H)(c()===null)),title:\"No float\"},[...a[10]||(a[10]=[n(\"i\",{class:\"fa-regular fa-align-justify\",\"aria-hidden\":\"true\"},null,-1)])],2)]),n(\"button\",{onClick:y(d,[\"prevent\"]),class:\"hover:text-error-content px-2 py-1\",title:\"Delete image\"},[...a[11]||(a[11]=[n(\"i\",{class:\"fa-regular fa-trash\",\"aria-hidden\":\"true\"},null,-1)])])]))}}),_t={class:\"relative\"},en=[\"title\"],tn={class:\"absolute top-full left-0 mt-1 bg-base-100 shadow-lg rounded-lg p-3 z-50 w-[220px]\"},nn={key:0,class:\"mb-2\"},sn={class:\"flex flex-wrap gap-1\"},ln=[\"onMousedown\",\"title\"],rn={class:\"mb-2\"},an={class:\"grid grid-cols-7 gap-1\"},on=[\"onMousedown\",\"title\"],un={class:\"mb-2\"},dn=[\"onKeydown\"],ie=\"recent_colors\",he=10,be=O({__name:\"ColorPicker\",props:{currentColor:{},icon:{},title:{}},emits:[\"select\"],setup(e,{emit:s}){const t=e,l=s,d=Math.random().toString(36).substring(7),o=R(!1),c=R(\"\"),f=R([]),a=[\"#000000\",\"#434343\",\"#666666\",\"#999999\",\"#cccccc\",\"#efefef\",\"#ffffff\",\"#FB0300\",\"#FF9900\",\"#FFFF01\",\"#00FF00\",\"#00FFFF\",\"#0000FF\",\"#9900FF\",\"#FB3533\",\"#FFAD33\",\"#FFFF34\",\"#33FF33\",\"#33FFFF\",\"#3333FF\",\"#AD33FF\",\"#FC6866\",\"#FFC266\",\"#FFFF67\",\"#66FF66\",\"#66FFFF\",\"#6666FF\",\"#C266FF\",\"#FD9B99\",\"#FFD699\",\"#FFFF9A\",\"#99FF99\",\"#99FFFF\",\"#9999FF\",\"#D699FF\",\"#FECECC\",\"#FFEBCC\",\"#FFFFCD\",\"#CCFFCC\",\"#CCFFFF\",\"#CCCCFF\",\"#EBCCFF\",\"#FEE1E0\",\"#FFF3E0\",\"#FFFFE1\",\"#E0FFE0\",\"#E0FFFF\",\"#E0E0FF\",\"#F3E0FF\",\"#FFF5F4\",\"#FFF9F4\",\"#FFFFF5\",\"#F4FFF4\",\"#F4FFFF\",\"#F4F4FF\",\"#F9F4FF\"],w=()=>document.cookie.split(\";\").reduce((g,v)=>{const[u,r]=v.split(\"=\").map(i=>i.trim());return u&&r&&(g[u]=decodeURIComponent(r)),g},{}),E=(g,v,u=30)=>{const r=new Date;r.setTime(r.getTime()+u*24*60*60*1e3),document.cookie=`${g}=${encodeURIComponent(v)}; expires=${r.toUTCString()}; path=/`},F=()=>{const g=w();f.value=g[ie]?JSON.parse(g[ie]):[]},A=g=>{f.value=[g,...f.value.filter(v=>v!==g)],f.value.length>he&&(f.value=f.value.slice(0,he)),E(ie,JSON.stringify(f.value))},C=g=>{A(g),l(\"select\",g),o.value=!1},I=()=>{c.value&&/^#[0-9A-Fa-f]{6}$/.test(c.value)&&(C(c.value),c.value=\"\")},M=()=>{l(\"select\",null),o.value=!1},m=g=>{g.detail!==d&&(o.value=!1)},L=()=>{o.value||(window.dispatchEvent(new CustomEvent(\"colorpicker:close\",{detail:d})),F()),o.value=!o.value},T=B(()=>!!t.currentColor);return Ae(()=>{F(),window.addEventListener(\"colorpicker:close\",m)}),Fe(()=>{window.removeEventListener(\"colorpicker:close\",m)}),(g,v)=>(p(),b(\"div\",_t,[n(\"button\",{onClick:y(L,[\"prevent\"]),class:x([h(H)(T.value),\"flex items-center gap-0.5\"]),title:e.title},[n(\"i\",{class:x(e.icon),\"aria-hidden\":\"true\"},null,2),e.currentColor?(p(),b(\"span\",{key:0,class:\"w-2 h-2 rounded-full border border-base-300\",style:se({backgroundColor:e.currentColor})},null,4)):S(\"\",!0)],10,en),q(n(\"div\",tn,[f.value.length>0?(p(),b(\"div\",nn,[v[1]||(v[1]=n(\"div\",{class:\"text-xs text-neutral-content mb-1\"},\"Recent\",-1)),n(\"div\",sn,[(p(!0),b(j,null,Q(f.value,u=>(p(),b(\"button\",{key:u,onMousedown:y(r=>C(u),[\"prevent\"]),class:\"w-5 h-5 rounded border border-base-300 hover:scale-110 transition-transform\",style:se({backgroundColor:u}),title:u},null,44,ln))),128))])])):S(\"\",!0),n(\"div\",rn,[v[2]||(v[2]=n(\"div\",{class:\"text-xs text-neutral-content mb-1\"},\"Colors\",-1)),n(\"div\",an,[(p(),b(j,null,Q(a,u=>n(\"button\",{key:u,onMousedown:y(r=>C(u),[\"prevent\"]),class:\"w-5 h-5 rounded border border-base-300 hover:scale-110 transition-transform\",style:se({backgroundColor:u}),title:u},null,44,on)),64))])]),n(\"div\",un,[q(n(\"input\",{\"onUpdate:modelValue\":v[0]||(v[0]=u=>c.value=u),type:\"text\",placeholder:\"#000000\",maxlength:\"7\",class:\"w-full p-1 text-xs rounded border border-base-300 outline-none focus:ring-1 focus:ring-primary\",onKeydown:Se(y(I,[\"prevent\"]),[\"enter\"]),onBlur:I},null,40,dn),[[ee,c.value]])]),n(\"button\",{onMousedown:y(M,[\"prevent\"]),class:\"w-full text-xs text-neutral-content hover:text-error-content py-1 flex items-center justify-center gap-1 cursor-pointer\"},[...v[3]||(v[3]=[n(\"i\",{class:\"fa-regular fa-eraser\",\"aria-hidden\":\"true\"},null,-1),D(\" Remove color \",-1)])],32)],512),[[le,o.value]])]))}}),cn={class:\"relative\"},fn={key:0,class:\"text-xs\"},gn=[\"innerHTML\"],mn={key:0,class:\"fa-regular fa-check\"},pn={key:0,class:\"fa-regular fa-check\"},hn={key:0,class:\"fa-regular fa-check\"},bn={key:0,class:\"fa-regular fa-check\"},vn={key:0,class:\"fa-regular fa-check\"},yn={key:0,class:\"fa-regular fa-check\"},xn={class:\"flex items-center gap-0.5 border-r border-base-300 pr-2 mr-1\"},wn={class:\"flex items-center gap-0.5 border-r border-base-300 pr-2 mr-1\"},kn={class:\"relative\"},Cn={key:0,class:\"fa-regular fa-check\"},An={key:0,class:\"fa-regular fa-check\"},Fn=O({__name:\"TextBubbleMenu\",props:{editor:{}},emits:[\"openLink\"],setup(e,{emit:s}){const t=e,l=s,d=R(!1),o=R(!1),c=B(()=>t.editor.getAttributes(\"textStyle\").color||null),f=B(()=>t.editor.getAttributes(\"highlight\").color||null),a=r=>{r?t.editor.chain().focus().setColor(r).run():t.editor.chain().focus().unsetColor().run()},w=r=>{r?t.editor.chain().focus().setHighlight({color:r}).run():t.editor.chain().focus().unsetHighlight().run()},E=B(()=>!t.editor||t.editor.isActive(\"paragraph\")?\"fa-regular fa-paragraph\":\"fa-regular fa-heading\"),F=()=>t.editor.isActive(\"heading\",{level:1})?\"1\":t.editor.isActive(\"heading\",{level:2})?\"2\":t.editor.isActive(\"heading\",{level:3})?\"3\":t.editor.isActive(\"heading\",{level:4})?\"4\":t.editor.isActive(\"heading\",{level:5})?\"5\":0,A=r=>{r===null?t.editor.chain().focus().setParagraph().run():t.editor.chain().focus().toggleHeading({level:r}).run(),d.value=!1},C=()=>{d.value=!d.value},I=()=>{d.value=!1},M=B(()=>t.editor?t.editor.isActive(\"bulletList\")?\"fa-regular fa-list-ul\":t.editor.isActive(\"orderedList\")?\"fa-regular fa-list-ol\":\"fa-regular fa-list-ul\":\"fa-regular fa-list-ol\"),m=r=>{r===\"bullet\"?t.editor.chain().focus().toggleBulletList().run():t.editor.chain().focus().toggleOrderedList().run(),o.value=!1},L=()=>{o.value=!o.value},T=()=>{o.value=!1},g=B(()=>t.editor.isActive({textAlign:\"center\"})?\"fa-regular fa-align-center\":t.editor.isActive({textAlign:\"right\"})?\"fa-regular fa-align-right\":\"fa-regular fa-align-left\"),v=()=>{t.editor.isActive({textAlign:\"center\"})?t.editor.chain().focus().setTextAlign(\"right\").run():t.editor.isActive({textAlign:\"right\"})?t.editor.chain().focus().setTextAlign(\"left\").run():t.editor.chain().focus().setTextAlign(\"center\").run()},u=()=>{t.editor.chain().focus().unsetAllMarks().clearNodes().run()};return(r,i)=>(p(),b(j,null,[n(\"div\",cn,[n(\"button\",{onClick:y(C,[\"prevent\"]),class:x([h(H)(!1),\"flex items-center gap-0.5\"]),onBlur:I},[n(\"i\",{class:x(E.value)},null,2),e.editor.isActive(\"heading\")?(p(),b(\"sub\",fn,[n(\"span\",{innerHTML:F()},null,8,gn)])):S(\"\",!0),i[16]||(i[16]=n(\"i\",{class:\"fa-regular fa-chevron-down\",\"aria-label\":\"Toggle paragraph styles\"},null,-1))],34),q(n(\"div\",{class:\"absolute top-full left-0 mt-1 bg-base-100 shadow-lg rounded-lg py-1 z-50 min-w-[200px]\",onMousedown:i[6]||(i[6]=y(()=>{},[\"prevent\"]))},[n(\"button\",{onClick:i[0]||(i[0]=y(k=>A(null),[\"prevent\"])),class:x([\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1\",{\"text-semibold text-base-content\":e.editor.isActive(\"paragraph\")}])},[i[17]||(i[17]=D(\" Paragraph \",-1)),e.editor.isActive(\"paragraph\")?(p(),b(\"i\",mn)):S(\"\",!0)],2),n(\"button\",{onClick:i[1]||(i[1]=y(k=>A(1),[\"prevent\"])),class:x([\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content flex items-center justify-between gap-1 text-[1.4rem]\",{\"font-semibold text-base-content\":e.editor.isActive(\"heading\",{level:1})}])},[i[18]||(i[18]=D(\" Heading 1 \",-1)),e.editor.isActive(\"heading\",{level:1})?(p(),b(\"i\",pn)):S(\"\",!0)],2),n(\"button\",{onClick:i[2]||(i[2]=y(k=>A(2),[\"prevent\"])),class:x([\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content flex items-center justify-between gap-1 text-[1.3rem]\",{\"font-semibold text-base-content\":e.editor.isActive(\"heading\",{level:2})}])},[i[19]||(i[19]=D(\" Heading 2 \",-1)),e.editor.isActive(\"heading\",{level:2})?(p(),b(\"i\",hn)):S(\"\",!0)],2),n(\"button\",{onClick:i[3]||(i[3]=y(k=>A(3),[\"prevent\"])),class:x([\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content flex items-center justify-between gap-1 text-[1.2rem]\",{\"font-semibold text-base-content\":e.editor.isActive(\"heading\",{level:3})}])},[i[20]||(i[20]=D(\" Heading 3 \",-1)),e.editor.isActive(\"heading\",{level:3})?(p(),b(\"i\",bn)):S(\"\",!0)],2),n(\"button\",{onClick:i[4]||(i[4]=y(k=>A(4),[\"prevent\"])),class:x([\"w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1 text[1.1rem]\",{\"font-semibold text-base-content\":e.editor.isActive(\"heading\",{level:4})}])},[i[21]||(i[21]=D(\" Heading 4 \",-1)),e.editor.isActive(\"heading\",{level:4})?(p(),b(\"i\",vn)):S(\"\",!0)],2),n(\"button\",{onClick:i[5]||(i[5]=y(k=>A(5),[\"prevent\"])),class:x([\"w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1\",{\"font-semibold text-base-content\":e.editor.isActive(\"heading\",{level:5})}])},[i[22]||(i[22]=D(\" Heading 5 \",-1)),e.editor.isActive(\"heading\",{level:5})?(p(),b(\"i\",yn)):S(\"\",!0)],2)],544),[[le,d.value]])]),n(\"button\",{onClick:i[7]||(i[7]=y(k=>e.editor.chain().focus().toggleBold().run(),[\"prevent\"])),class:x(h(H)(e.editor.isActive(\"bold\")))},[...i[23]||(i[23]=[n(\"i\",{class:\"fa-regular fa-bold\",\"aria-label\":\"Bold\"},null,-1)])],2),n(\"button\",{onClick:i[8]||(i[8]=y(k=>e.editor.chain().focus().toggleItalic().run(),[\"prevent\"])),class:x(h(H)(e.editor.isActive(\"italic\")))},[...i[24]||(i[24]=[n(\"i\",{class:\"fa-regular fa-italic\",\"aria-label\":\"Italic\"},null,-1)])],2),n(\"button\",{onClick:i[9]||(i[9]=y(k=>e.editor.chain().focus().toggleStrike().run(),[\"prevent\"])),class:x(h(H)(e.editor.isActive(\"strike\")))},[...i[25]||(i[25]=[n(\"i\",{class:\"fa-regular fa-strikethrough\",\"aria-label\":\"Strikethrough\"},null,-1)])],2),n(\"button\",{onClick:i[10]||(i[10]=y(k=>e.editor.chain().focus().toggleUnderline().run(),[\"prevent\"])),class:x(h(H)(e.editor.isActive(\"underline\")))},[...i[26]||(i[26]=[n(\"i\",{class:\"fa-regular fa-underline\",\"aria-label\":\"Underline\"},null,-1)])],2),n(\"div\",xn,[U(be,{\"current-color\":c.value,icon:\"fa-regular fa-font\",title:\"Text color\",onSelect:a},null,8,[\"current-color\"]),U(be,{\"current-color\":f.value,icon:\"fa-regular fa-fill\",title:\"Highlight color\",onSelect:w},null,8,[\"current-color\"])]),n(\"div\",wn,[n(\"button\",{onClick:i[11]||(i[11]=y(k=>l(\"openLink\"),[\"prevent\"])),class:x(h(H)(e.editor.isActive(\"link\")))},[...i[27]||(i[27]=[n(\"i\",{class:\"fa-regular fa-link\",\"aria-label\":\"Link\"},null,-1)])],2),n(\"button\",{onClick:i[12]||(i[12]=y(k=>e.editor.chain().focus().toggleBlockquote().run(),[\"prevent\"])),class:x(h(H)(e.editor.isActive(\"blockquote\")))},[...i[28]||(i[28]=[n(\"i\",{class:\"fa-regular fa-quote-right\",\"aria-label\":\"Quote\"},null,-1)])],2),n(\"button\",{onClick:y(v,[\"prevent\"]),class:x(h(H)(e.editor.isActive({textAlign:\"center\"})||e.editor.isActive({textAlign:\"right\"}))),title:\"Text alignment\"},[n(\"i\",{class:x(g.value),\"aria-label\":\"Text alignment\"},null,2)],2),n(\"div\",kn,[n(\"button\",{onClick:y(L,[\"prevent\"]),class:x([h(H)(!1),\"flex items-center gap-0.5\"]),onBlur:T},[n(\"i\",{class:x(M.value)},null,2),i[29]||(i[29]=n(\"i\",{class:\"fa-regular fa-chevron-down\",\"aria-label\":\"Toggle paragraph styles\"},null,-1))],34),q(n(\"div\",{class:\"absolute top-full left-0 mt-1 bg-base-100 shadow-lg rounded-lg py-1 z-50 min-w-[200px]\",onMousedown:i[15]||(i[15]=y(()=>{},[\"prevent\"]))},[n(\"button\",{onClick:i[13]||(i[13]=y(k=>m(\"bullet\"),[\"prevent\"])),class:x([\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1\",{\"text-semibold text-base-content\":e.editor.isActive(\"bulletList\")}])},[i[30]||(i[30]=n(\"div\",{class:\"flex gap-1 items-center\"},[n(\"i\",{class:\"fa-regular fa-list-ul\",\"aria-hidden\":\"true\"}),D(\" List \")],-1)),e.editor.isActive(\"bulletList\")?(p(),b(\"i\",Cn)):S(\"\",!0)],2),n(\"button\",{onClick:i[14]||(i[14]=y(k=>m(\"ordered\"),[\"prevent\"])),class:x([\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1\",{\"text-semibold text-base-content\":e.editor.isActive(\"orderedList\")}])},[i[31]||(i[31]=n(\"div\",{class:\"flex gap-1 items-center\"},[n(\"i\",{class:\"fa-regular fa-list-ol\",\"aria-hidden\":\"true\"}),D(\" Numbered list \")],-1)),e.editor.isActive(\"orderedList\")?(p(),b(\"i\",An)):S(\"\",!0)],2)],544),[[le,o.value]])])]),n(\"button\",{onClick:y(u,[\"prevent\"]),class:x(h(H)(!1)),title:\"Clear formatting\"},[...i[32]||(i[32]=[n(\"i\",{class:\"fa-regular fa-paint-roller\",\"aria-label\":\"Clear formatting\"},null,-1)])],2)],64))}}),Ln={class:\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\"},Tn={class:\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\"},Mn={class:\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\"},$n={class:\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\"},Hn={class:\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\"},En={key:1,class:\"text-neutral-content text-xs mt-2 flex items-center gap-5\"},In=[\"name\",\"value\"],Sn=O({__name:\"Tiptap\",props:{modelValue:{},content:{},gallery:{},mentions:{},galleryUpload:{},fieldName:{default:\"entry\"}},setup(e){const s=ge(()=>de(()=>import(\"./GalleryDialog-B3Id-RLo.js\"),__vite__mapDeps([0,1,2,3,4]))),t=ge(()=>de(()=>import(\"./SourceEditor-CaEGRaAo.js\"),__vite__mapDeps([5,1,3,6]))),l=e,d=Re().uid.toString(),o=R(l.content??l.modelValue??\"\"),c=R([]),f=R(!1),a=R(!1),w=R(!1),E=B(()=>f.value&&!a.value&&m.value?.isEmpty),F=()=>{w.value=!0},A=()=>{m.value?.commands.setContent(o.value),w.value=!1,setTimeout(()=>{m.value?.commands.focus()},50)},C=R(null),I=u=>{c.value.find(i=>i.id===u.id)||c.value.push(u)},M=[Ke.configure({link:!1,bulletList:!1,orderedList:!1,listItem:!1,listKeymap:!1,heading:!1}),Ut,ze.configure({placeholder:\"Start writing...\"}),Oe.configure({openOnClick:!1,defaultProtocol:\"https\",HTMLAttributes:{class:\"text-link\"}}),Ne.configure({taskItem:{nested:!0}}),Ye.configure({resizable:!0,allowTableNodeSelection:!0}),De,Qe.configure({}),Xe.configure({}),wt.configure({suggestion:St()}),Dt.configure({inline:!0,allowBase64:!1,resize:{enabled:!0,minWidth:20,minHeight:20,alwaysPreserveAspectRatio:!0}}),Bt,Pt,Ve.configure({persist:!0,HTMLAttributes:{class:\"details\"}}),Be,Pe,Ue,je,qe.configure({multicolor:!0}),We.configure({types:[\"heading\",\"paragraph\"]}),window.tiptapCustomExtensions??[]];l.gallery&&M.push(Rt.configure({galleryUrl:l.gallery,galleryId:d})),l.mentions&&M.push(et.configure({HTMLAttributes:{class:\"mention\"},suggestion:bt(l.mentions,I),renderText({node:u}){const r=u.attrs.mention,i=u.attrs.label,k=u.attrs.id,$=u.attrs.config,N=r?.match(/\\[([^:]+):(\\d+)/),P=N?N[1]:null;if(P&&k){const G=c.value.find(z=>z.id===parseInt(k)),W=G?G.name:null,K=[`${P}:${k}`];return i&&W&&i!==W&&K.push(i),$&&K.push($),`[${K.join(\"|\")}]`}return r||`[${i}]`}}),yt.configure({entities:c}));const m=Ge({content:o.value,extensions:M,onFocus:()=>{f.value=!0},onBlur:()=>{f.value=!1},onUpdate:({editor:u})=>{o.value=u.getHTML().replace(/<table([^>]*) data-table-class=\"([^\"]+)\"([^>]*)>/g,'<table$1 class=\"$2\"$3>'),!a.value&&!u.isEmpty&&(a.value=!0)},onSelectionUpdate:({editor:u})=>{u.isActive(\"mention\")&&C.value?.syncLabel()},editorProps:{clipboardTextSerializer:u=>{let r=\"\";return u.content.forEach(i=>{r+=L(i)}),r},handlePaste:(u,r,i)=>{if(l.galleryUpload){const z=Array.from(r.clipboardData?.items||[]).find(V=>V.type.startsWith(\"image/\"));if(z){const V=z.getAsFile();if(V){const X=new FormData;return X.append(\"file[]\",V),axios.post(l.galleryUpload,X).then(ne=>{ne.data?.url&&m.value?.chain().focus().setImage({src:ne.data.url,\"data-gallery-id\":String(ne.data.id)}).run()}).catch(()=>{window.showToast(\"Image upload failed\",\"error\")}),!0}}}const k=r.clipboardData?.getData(\"text/plain\")||\"\",$=r.clipboardData?.getData(\"text/html\")||\"\";if(($||k).match(/<iframe[^>]*src=[\"']([^\"']+)[\"'][^>]*>/i)||k.includes(\"<iframe\")){const K=$||k;return m.value?.commands.insertContent(K,{parseOptions:{preserveWhitespace:!1}}),!0}const P=k.trim();if(/^https?:\\/\\/\\S+$/i.test(P)&&!$)try{const K=new URL(P);if(/\\.(jpe?g|png|gif|webp|svg|bmp|avif|tiff?)$/i.test(K.pathname))return m.value?.chain().focus().setImage({src:P}).run(),!0}catch{}return/\\[([a-zA-Z_]+):(\\d+)(?:\\|[^\\]]+)?\\]/.test(k)?(m.value?.commands.insertContent(k),!0):!1},handleKeyDown:(u,r)=>(r.ctrlKey||r.metaKey)&&r.key===\"k\"&&!u.state.selection.empty?(r.preventDefault(),g(),!0):!1}}),L=u=>{if(u.type.name===\"mention\")return T(u);if(u.isText)return u.text||\"\";let r=\"\";return u.content&&u.content.forEach(i=>{r+=L(i)}),u.isBlock&&r&&(r+=`\n`),r},T=u=>{const r=u.attrs.config,i=u.attrs.id,$=[`${u.attrs.type}:${i}`];return r&&$.push(r),`[${$.join(\"|\")}]`},g=()=>{if(!m.value)return;const u=m.value.getAttributes(\"link\").href||\"\",{to:r}=m.value.state.selection;m.value.chain().focus().setLink({href:u}).setTextSelection(r).run()},v=u=>{const r=[],i=[],k=/\\[([a-zA-Z_]+):(\\d+)(?:\\|[^\\]]+)?\\]/g;let $;for(;($=k.exec(u))!==null;){const N=$[1],P=parseInt($[2],10);N===\"post\"?i.includes(P)||i.push(P):r.includes(P)||r.push(P)}return{entityIds:r,postIds:i}};return Ae(()=>{if(window.addEventListener(\"tiptap:source-mode\",F),l.mentions&&l.content){const{entityIds:u,postIds:r}=v(l.content);(u.length>0||r.length>0)&&axios.post(l.mentions,{entities:u,posts:r}).then(i=>{c.value=i.data,m.value?.commands.setContent(l.content)})}}),Fe(()=>{window.removeEventListener(\"tiptap:source-mode\",F),m?.value.destroy()}),(u,r)=>(p(),b(j,null,[w.value?(p(),ce(h(t),{key:0,modelValue:o.value,\"onUpdate:modelValue\":r[0]||(r[0]=i=>o.value=i),onExit:A},null,8,[\"modelValue\"])):(p(),b(j,{key:1},[h(m)?(p(),b(j,{key:0},[U(h(J),{editor:h(m),\"plugin-key\":\"mentionBubbleMenu\",\"should-show\":({editor:i})=>i.isActive(\"mention\")},{default:Z(()=>[n(\"div\",Ln,[U(Nt,{ref_key:\"mentionBubbleRef\",ref:C,editor:h(m),mentions:c.value},null,8,[\"editor\",\"mentions\"])])]),_:1},8,[\"editor\",\"should-show\"]),U(h(J),{editor:h(m),\"plugin-key\":\"linkBubbleMenu\",\"should-show\":({editor:i})=>i.isActive(\"link\")&&i.state.selection.empty},{default:Z(()=>[n(\"div\",Tn,[U(Wt,{editor:h(m)},null,8,[\"editor\"])])]),_:1},8,[\"editor\",\"should-show\"]),U(h(J),{editor:h(m),\"plugin-key\":\"tableBubbleMenu\",\"should-show\":({editor:i})=>i.state.selection instanceof h(fe)},{default:Z(()=>[n(\"div\",Mn,[U(Zt,{editor:h(m)},null,8,[\"editor\"])])]),_:1},8,[\"editor\",\"should-show\"]),U(h(J),{editor:h(m),\"plugin-key\":\"imageBubbleMenu\",\"should-show\":({editor:i})=>i.isActive(\"image\")},{default:Z(()=>[n(\"div\",$n,[U(Yt,{editor:h(m)},null,8,[\"editor\"])])]),_:1},8,[\"editor\",\"should-show\"]),U(h(J),{editor:h(m),\"plugin-key\":\"textBubbleMenu\",\"should-show\":({editor:i})=>!(i.state.selection.empty||i.isActive(\"mention\")||i.state.selection instanceof h(fe)||i.isActive(\"image\"))},{default:Z(()=>[n(\"div\",Hn,[U(Fn,{editor:h(m),onOpenLink:g},null,8,[\"editor\"])])]),_:1},8,[\"editor\",\"should-show\"])],64)):S(\"\",!0),U(h(Ze),{editor:h(m),class:\"\"},null,8,[\"editor\"]),E.value?(p(),b(\"p\",En,[...r[1]||(r[1]=[n(\"span\",null,[D(\" Use \"),n(\"kbd\",null,\"@\"),D(\" to reference entities \")],-1),n(\"span\",null,[n(\"kbd\",null,\"/\"),D(\" for commands \")],-1)])])):S(\"\",!0)],64)),n(\"input\",{type:\"hidden\",name:l.fieldName,value:o.value},null,8,In),e.gallery?(p(),ce(h(s),{key:2,\"gallery-id\":h(d)},null,8,[\"gallery-id\"])):S(\"\",!0)],64))}}),Un=ue(Sn,[[\"__scopeId\",\"data-v-539a3ede\"]]);export{Un as default};\n"
  },
  {
    "path": "public/build/assets/_commonjsHelpers-Cpj98o6Y.js",
    "content": "var o=typeof globalThis<\"u\"?globalThis:typeof window<\"u\"?window:typeof global<\"u\"?global:typeof self<\"u\"?self:{};function l(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}export{o as c,l as g};\n"
  },
  {
    "path": "public/build/assets/_plugin-vue_export-helper-DlAUqK2U.js",
    "content": "const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _};\n"
  },
  {
    "path": "public/build/assets/abilities-_1tR-hmN.js",
    "content": "import{f as k,o as t,c as i,a as s,h as x,b as n,F as f,r as v,n as T,j as p,i as b,g as M,B as w,e as H}from\"./vendor-tiptap-D5xFoo7B.js\";const _=[\"data-tags\"],$={class:\"ability-box p-4 rounded-lg bg-box shadow-xs flex flex-col md:flex-row items-center md:items-start gap-2 md:gap-4\"},C={key:0,class:\"\"},A=[\"href\"],B={class:\"flex flex-col gap-4 w-full\"},j={class:\"flex gap-2 md:gap-4 items-center w-full\"},I={class:\"flex gap-2 items-center text-lg grow\"},N=[\"href\",\"innerHTML\"],z=[\"title\"],D=[\"title\"],E=[\"title\"],F=[\"title\"],V=[\"title\"],P=[\"innerHTML\"],S={key:1,class:\"\"},U=[\"title\"],q=[\"innerHTML\"],G={key:0,class:\"visible md:hidden\"},J=[\"innerHTML\"],K=[\"innerHTML\"],O={key:2,class:\"flex gap-2 items-center ability-tags\"},Q=[\"href\",\"data-url\",\"innerHTML\"],R=[\"innerHTML\"],W={key:4,class:\"flex gap-2 md:gap-4 ability-charges w-full items-end\"},X={class:\"flex gap-1 flex-wrap grow\"},Y=[\"onClick\"],Z=[\"innerHTML\"],ee={class:\"flex-none\"},te=[\"innerHTML\"],ie=[\"innerHTML\"],se=k({__name:\"Ability\",props:{ability:{},permission:{}},setup(e){const o=e,r=()=>o.permission.value,u=()=>o.ability.images.thumb?{backgroundImage:\"url(\"+o.ability.images.thumb+\")\"}:{},g=a=>{window.openDialog(\"abilities-dialog\",a.actions.edit)},h=()=>o.ability.charges-o.ability.used_charges,y=()=>o.ability.i18n.left.replace(/:amount/,\"\"),c=a=>{let d=\"rounded-xl bg-base-200 text-xs py-1 px-3 text-base-content\";return d+=\" \"+a.class},m=(a,d)=>{d>a.used_charges?a.used_charges+=1:a.used_charges-=1,axios.post(a.actions.use,{used:a.used_charges}).then(l=>{l.data.success||(a.used_charges-=1)}).catch(()=>{a.used_charges-=1})};return(a,d)=>(t(),i(\"div\",{class:\"ability\",\"data-tags\":e.ability.class},[s(\"div\",$,[e.ability.images.has?(t(),i(\"div\",C,[s(\"a\",{class:\"ability-image rounded-lg block w-40 h-40 cover-background\",href:e.ability.images.url,style:x(u())},null,12,A)])):n(\"\",!0),s(\"div\",B,[s(\"div\",j,[s(\"div\",I,[s(\"a\",{href:e.ability.actions.view,class:\"ability-name text-lg text-link\",innerHTML:e.ability.name},null,8,N),e.ability.visibility_id===2?(t(),i(\"i\",{key:0,class:\"fa-regular fa-lock\",title:e.ability.visibility},null,8,z)):n(\"\",!0),e.ability.visibility_id===3?(t(),i(\"i\",{key:1,class:\"fa-regular fa-user-lock\",title:e.ability.visibility},null,8,D)):n(\"\",!0),e.ability.visibility_id===5?(t(),i(\"i\",{key:2,class:\"fa-regular fa-users\",title:e.ability.visibility},null,8,E)):n(\"\",!0),e.ability.visibility_id===4?(t(),i(\"i\",{key:3,class:\"fa-regular fa-user-secret\",title:e.ability.visibility},null,8,F)):n(\"\",!0),e.ability.visibility_id===1?(t(),i(\"i\",{key:4,class:\"fa-regular fa-eye\",title:e.ability.visibility},null,8,V)):n(\"\",!0)]),e.ability.type?(t(),i(\"div\",{key:0,class:\"hidden md:inline bg-base-200 p-2 px-3 rounded-2xl flex-none\",innerHTML:e.ability.type},null,8,P)):n(\"\",!0),e.permission?(t(),i(\"div\",S,[r?(t(),i(\"a\",{key:0,role:\"button\",onClick:d[0]||(d[0]=l=>g(e.ability)),class:\"btn2 btn-ghost btn-sm\",title:e.ability.i18n.edit},[d[1]||(d[1]=s(\"i\",{class:\"fa-regular fa-pencil\",\"aria-hidden\":\"true\"},null,-1)),s(\"span\",{class:\"sr-only\",innerHTML:e.ability.i18n.edit},null,8,q)],8,U)):n(\"\",!0)])):n(\"\",!0)]),e.ability.type?(t(),i(\"div\",G,[s(\"div\",{class:\"inline-block bg-base-200 p-2 rounded-xl\",innerHTML:e.ability.type},null,8,J)])):n(\"\",!0),e.ability.entry?(t(),i(\"div\",{key:1,class:\"entity-content\",innerHTML:e.ability.entry},null,8,K)):n(\"\",!0),e.ability.tags?(t(),i(\"div\",O,[(t(!0),i(f,null,v(e.ability.tags,l=>(t(),i(\"a\",{class:T(c(l)),style:x(l.style||\"\"),href:l.url,\"data-toggle\":\"tooltip-ajax\",\"data-url\":l.tooltip,innerHTML:l.name},null,14,Q))),256))])):n(\"\",!0),e.ability.note?(t(),i(\"div\",{key:3,class:\"entity-content text-sm text-neutral-content\",innerHTML:e.ability.note},null,8,R)):n(\"\",!0),e.ability.charges&&e.permission?(t(),i(\"div\",W,[s(\"div\",X,[(t(!0),i(f,null,v(e.ability.charges,l=>(t(),i(\"div\",{class:T([\"charge cursor-pointer rounded-full p-2 hover:bg-accent hover:text-accent-content w-8 h-8 flex items-center justify-center\",{\"bg-base-200 charge-used\":e.ability.used_charges>=l}]),onClick:pe=>m(e.ability,l)},[s(\"span\",{innerHTML:l},null,8,Z)],10,Y))),256))]),s(\"div\",ee,[s(\"span\",{class:\"text-lg\",innerHTML:h()},null,8,te),s(\"span\",{innerHTML:y()},null,8,ie)])])):n(\"\",!0)])])],8,_))}}),ne={class:\"ability-parent flex flex-col gap-5 w-full\"},ae={class:\"parent-head flex gap-2 md:gap-5 items-center\"},le={class:\"flex flex-col gap-1 grow overflow-hidden\"},oe={key:0},re=[\"href\",\"innerHTML\"],ce=[\"innerHTML\"],de=[\"innerHTML\",\"data-title\"],ue={class:\"flex-none self-end\"},ge={key:0,\"aria-hidden\":\"true\",class:\"fa-thin fa-chevron-circle-up fa-2x\"},ye={key:1,\"aria-hidden\":\"true\",class:\"fa-thin fa-chevron-circle-down fa-2x\"},he={key:2,class:\"sr-only\"},be={key:3,class:\"sr-only\"},me={key:0,class:\"parent-abilities flex flex-col gap-5\"},fe=k({__name:\"Parent\",props:{group:{},permission:{},meta:{}},setup(e){const o=e,r=b(!1),u=()=>o.group.has_image?{backgroundImage:\"url(\"+o.group.image+\")\"}:{},g=h=>{r.value=!r.value};return(h,y)=>(t(),i(\"div\",ne,[s(\"div\",ae,[e.group.has_image?(t(),i(\"div\",{key:0,class:\"parent-image rounded-full w-12 h-12 md:w-16 md:h-16 cover-background flex-none\",style:x(u())},null,4)):n(\"\",!0),s(\"div\",le,[e.group.url?(t(),i(\"div\",oe,[s(\"a\",{href:e.group.url,innerHTML:e.group.name,class:\"parent-name text-xl\"},null,8,re)])):(t(),i(\"span\",{key:1,class:\"parent-name text-xl\",innerHTML:e.group.name},null,8,ce)),s(\"p\",{class:\"truncate\",innerHTML:e.group.type,\"data-toggle\":\"tooltip\",\"data-title\":e.group.type},null,8,de)]),s(\"div\",ue,[s(\"span\",{role:\"button\",onClick:y[0]||(y[0]=c=>g(e.group)),class:\"cursor-pointer inline-block\"},[r.value?(t(),i(\"i\",ye)):(t(),i(\"i\",ge)),r.value?(t(),i(\"span\",be,\"Collapse section\")):(t(),i(\"span\",he,\"Expand section\"))])])]),r.value?n(\"\",!0):(t(),i(\"div\",me,[(t(!0),i(f,null,v(e.group.abilities,c=>(t(),p(se,{key:c.id,ability:c,permission:e.permission,meta:e.meta},null,8,[\"ability\",\"permission\",\"meta\"]))),128))]))]))}}),ve={class:\"viewport box-abilities relative flex flex-col gap-5\"},xe={key:0,class:\"load more text-center text-2xl\"},ke={class:\"flex gap-5 flex-wrap\"},Te=k({__name:\"Abilities\",props:{id:{},api:{},permission:{}},setup(e){const o=e,r=b([]),u=b([]),g=b(!0),h=b(!0),y=()=>{axios.get(o.api).then(c=>{r.value=c.data.data.groups,u.value=c.data.data.meta,g.value=!1,h.value=!1})};return M(()=>{y()}),w(()=>{window.ajaxTooltip(),window.initTooltips()}),(c,m)=>(t(),i(\"div\",ve,[g.value?(t(),i(\"div\",xe,[...m[0]||(m[0]=[s(\"i\",{class:\"fa-solid fa-spin fa-spinner\",\"aria-hidden\":\"true\"},null,-1)])])):n(\"\",!0),s(\"div\",ke,[(t(!0),i(f,null,v(r.value,a=>(t(),p(fe,{key:a.id,group:a,permission:e.permission,meta:u.value},null,8,[\"group\",\"permission\",\"meta\"]))),128))])]))}}),L=H({});L.component(\"abilities\",Te);L.mount(\"#abilities\");\n"
  },
  {
    "path": "public/build/assets/app-7Sr4fLAQ.css",
    "content": ".clr-picker{display:none;flex-wrap:wrap;position:absolute;width:200px;z-index:1000;border-radius:10px;background-color:#fff;justify-content:flex-end;direction:ltr;box-shadow:0 0 5px #0000000d,0 5px 20px #0000001a;-moz-user-select:none;-webkit-user-select:none;user-select:none}.clr-picker.clr-open,.clr-picker[data-inline=true]{display:flex}.clr-picker[data-inline=true]{position:relative}.clr-gradient{position:relative;width:100%;height:100px;margin-bottom:15px;border-radius:3px 3px 0 0;background-image:linear-gradient(#0000,#000),linear-gradient(90deg,#fff,currentColor);cursor:pointer}.clr-marker{position:absolute;width:12px;height:12px;margin:-6px 0 0 -6px;border:1px solid #fff;border-radius:50%;background-color:currentColor;cursor:pointer}.clr-picker input[type=range]::-webkit-slider-runnable-track{width:100%;height:16px}.clr-picker input[type=range]::-webkit-slider-thumb{width:16px;height:16px;-webkit-appearance:none}.clr-picker input[type=range]::-moz-range-track{width:100%;height:16px;border:0}.clr-picker input[type=range]::-moz-range-thumb{width:16px;height:16px;border:0}.clr-hue{background-image:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.clr-hue,.clr-alpha{position:relative;width:calc(100% - 40px);height:8px;margin:5px 20px;border-radius:4px}.clr-alpha span{display:block;height:100%;width:100%;border-radius:inherit;background-image:linear-gradient(90deg,rgba(0,0,0,0),currentColor)}.clr-hue input,.clr-alpha input{position:absolute;width:calc(100% + 32px);height:16px;left:-16px;top:-4px;margin:0;background-color:transparent;opacity:0;cursor:pointer;appearance:none;-webkit-appearance:none}.clr-hue div,.clr-alpha div{position:absolute;width:16px;height:16px;left:0;top:50%;margin-left:-8px;transform:translateY(-50%);border:2px solid #fff;border-radius:50%;background-color:currentColor;box-shadow:0 0 1px #888;pointer-events:none}.clr-alpha div:before{content:\"\";position:absolute;height:100%;width:100%;left:0;top:0;border-radius:50%;background-color:currentColor}.clr-format{display:none;order:1;width:calc(100% - 40px);margin:0 20px 20px}.clr-segmented{display:flex;position:relative;width:100%;margin:0;padding:0;border:1px solid #ddd;border-radius:15px;box-sizing:border-box;color:#999;font-size:12px}.clr-segmented input,.clr-segmented legend{position:absolute;width:100%;height:100%;margin:0;padding:0;border:0;left:0;top:0;opacity:0;pointer-events:none}.clr-segmented label{flex-grow:1;margin:0;padding:4px 0;font-size:inherit;font-weight:400;line-height:initial;text-align:center;cursor:pointer}.clr-segmented label:first-of-type{border-radius:10px 0 0 10px}.clr-segmented label:last-of-type{border-radius:0 10px 10px 0}.clr-segmented input:checked+label{color:#fff;background-color:#666}.clr-swatches{order:2;width:calc(100% - 32px);margin:0 16px}.clr-swatches div{display:flex;flex-wrap:wrap;padding-bottom:12px;justify-content:center}.clr-swatches button{position:relative;width:20px;height:20px;margin:0 4px 6px;padding:0;border:0;border-radius:50%;color:inherit;text-indent:-1000px;white-space:nowrap;overflow:hidden;cursor:pointer}.clr-swatches button:after{content:\"\";display:block;position:absolute;width:100%;height:100%;left:0;top:0;border-radius:inherit;background-color:currentColor;box-shadow:inset 0 0 0 1px #0000001a}input.clr-color{order:1;width:calc(100% - 80px);height:32px;margin:15px 20px 20px auto;padding:0 10px;border:1px solid #ddd;border-radius:16px;color:#444;background-color:#fff;font-family:sans-serif;font-size:14px;text-align:center;box-shadow:none}input.clr-color:focus{outline:none;border:1px solid #1e90ff}.clr-close,.clr-clear{display:none;order:2;height:24px;margin:0 20px 20px;padding:0 20px;border:0;border-radius:12px;color:#fff;background-color:#666;font-family:inherit;font-size:12px;font-weight:400;cursor:pointer}.clr-close{display:block;margin:0 20px 20px auto}.clr-preview{position:relative;width:32px;height:32px;margin:15px 0 20px 20px;border-radius:50%;overflow:hidden}.clr-preview:before,.clr-preview:after{content:\"\";position:absolute;height:100%;width:100%;left:0;top:0;border:1px solid #fff;border-radius:50%}.clr-preview:after{border:0;background-color:currentColor;box-shadow:inset 0 0 0 1px #0000001a}.clr-preview button{position:absolute;width:100%;height:100%;z-index:1;margin:0;padding:0;border:0;border-radius:50%;outline-offset:-2px;background-color:transparent;text-indent:-9999px;cursor:pointer;overflow:hidden}.clr-marker,.clr-hue div,.clr-alpha div,.clr-color{box-sizing:border-box}.clr-field{display:inline-block;position:relative;color:transparent}.clr-field input{margin:0;direction:ltr}.clr-field.clr-rtl input{text-align:right}.clr-field button{position:absolute;width:30px;height:100%;right:0;top:50%;transform:translateY(-50%);margin:0;padding:0;border:0;color:inherit;text-indent:-1000px;white-space:nowrap;overflow:hidden;pointer-events:none}.clr-field.clr-rtl button{right:auto;left:0}.clr-field button:after{content:\"\";display:block;position:absolute;width:100%;height:100%;left:0;top:0;border-radius:inherit;background-color:currentColor;box-shadow:inset 0 0 1px #00000080}.clr-alpha,.clr-alpha div,.clr-swatches button,.clr-preview:before,.clr-field button{background-image:repeating-linear-gradient(45deg,#aaa 25%,transparent 25%,transparent 75%,#aaa 75%,#aaa),repeating-linear-gradient(45deg,#aaa 25%,#fff 25% 75%,#aaa 75%,#aaa);background-position:0 0,4px 4px;background-size:8px 8px}.clr-marker:focus{outline:none}.clr-keyboard-nav .clr-marker:focus,.clr-keyboard-nav .clr-hue input:focus+div,.clr-keyboard-nav .clr-alpha input:focus+div,.clr-keyboard-nav .clr-segmented input:focus+label{outline:none;box-shadow:0 0 0 2px #1e90ff,0 0 2px 2px #fff}.clr-picker[data-alpha=false] .clr-alpha{display:none}.clr-picker[data-minimal=true]{padding-top:16px}.clr-picker[data-minimal=true] .clr-gradient,.clr-picker[data-minimal=true] .clr-hue,.clr-picker[data-minimal=true] .clr-alpha,.clr-picker[data-minimal=true] .clr-color,.clr-picker[data-minimal=true] .clr-preview{display:none}.clr-dark{background-color:#444}.clr-dark .clr-segmented{border-color:#777}.clr-dark .clr-swatches button:after{box-shadow:inset 0 0 0 1px #ffffff4d}.clr-dark input.clr-color{color:#fff;border-color:#777;background-color:#555}.clr-dark input.clr-color:focus{border-color:#1e90ff}.clr-dark .clr-preview:after{box-shadow:inset 0 0 0 1px #ffffff80}.clr-dark .clr-alpha,.clr-dark .clr-alpha div,.clr-dark .clr-swatches button,.clr-dark .clr-preview:before{background-image:repeating-linear-gradient(45deg,#666 25%,transparent 25%,transparent 75%,#888 75%,#888),repeating-linear-gradient(45deg,#888 25%,#444 25% 75%,#888 75%,#888)}.clr-picker.clr-polaroid{border-radius:6px;box-shadow:0 0 5px #0000001a,0 5px 30px #0003}.clr-picker.clr-polaroid:before{content:\"\";display:block;position:absolute;width:16px;height:10px;left:20px;top:-10px;border:solid transparent;border-width:0 8px 10px 8px;border-bottom-color:currentColor;box-sizing:border-box;color:#fff;filter:drop-shadow(0 -4px 3px rgba(0,0,0,.1));pointer-events:none}.clr-picker.clr-polaroid.clr-dark:before{color:#444}.clr-picker.clr-polaroid.clr-left:before{left:auto;right:20px}.clr-picker.clr-polaroid.clr-top:before{top:auto;bottom:-10px;transform:rotate(180deg)}.clr-polaroid .clr-gradient{width:calc(100% - 20px);height:120px;margin:10px;border-radius:3px}.clr-polaroid .clr-hue,.clr-polaroid .clr-alpha{width:calc(100% - 30px);height:10px;margin:6px 15px;border-radius:5px}.clr-polaroid .clr-hue div,.clr-polaroid .clr-alpha div{box-shadow:0 0 5px #0003}.clr-polaroid .clr-format{width:calc(100% - 20px);margin:0 10px 15px}.clr-polaroid .clr-swatches{width:calc(100% - 12px);margin:0 6px}.clr-polaroid .clr-swatches div{padding-bottom:10px}.clr-polaroid .clr-swatches button{width:22px;height:22px}.clr-polaroid input.clr-color{width:calc(100% - 60px);margin:10px 10px 15px auto}.clr-polaroid .clr-clear{margin:0 10px 15px}.clr-polaroid .clr-close{margin:0 10px 15px auto}.clr-polaroid .clr-preview{margin:10px 0 15px 10px}.clr-picker.clr-large{width:275px}.clr-large .clr-gradient{height:150px}.clr-large .clr-swatches button{width:22px;height:22px}.clr-picker.clr-pill{width:380px;padding-left:180px;box-sizing:border-box}.clr-pill .clr-gradient{position:absolute;width:180px;height:100%;left:0;top:0;margin-bottom:0;border-radius:3px 0 0 3px}.clr-pill .clr-hue{margin-top:20px}\n"
  },
  {
    "path": "public/build/assets/app-B8BXQiap.js",
    "content": "import{S as Wt}from\"./sortable.esm-DdTU3J9A.js\";import\"./dialog-DkrH_pRQ.js\";import{C as Oe}from\"./coloris-DsKOFKq5.js\";import{c as p,a as l,t as v,b,F as P,w as ee,v as yt,n as D,d as z,o as f,e as we,f as J,g as Fe,h as oe,r as j,i as k,j as re,k as Ve,l as Gt,m as me,p as ke,q as ge,s as Le,u as Yt,x as bt,y as Qt,z as fe,A as zn}from\"./vendor-tiptap-D5xFoo7B.js\";import{a as Jt}from\"./index-D5GkNzM3.js\";import{_ as ot}from\"./_plugin-vue_export-helper-DlAUqK2U.js\";import{t as ye}from\"./tippy.esm-CnBRltuW.js\";import{v as Xt}from\"./v-click-outside.umd-Cl-Y_A58.js\";import{_ as Wn}from\"./Browser.vue_vue_type_script_setup_true_lang-DjY0tfEc.js\";import{T as Gn,p as Yn}from\"./vue-tippy.esm-browser-B_r0Ygiv.js\";import\"./_commonjsHelpers-Cpj98o6Y.js\";const Zt=\"kanka.default\";window.triggerEvent=function(t){t=t||Zt;const e=new Event(t);document.dispatchEvent(e)};window.onEvent=function(t,e){e=e||Zt,document.addEventListener(e,t)};window.onReady=function(t){document.readyState===\"complete\"||document.readyState===\"interactive\"?setTimeout(t,1):document.addEventListener(\"DOMContentLoaded\",t)};function je(t,e){t.split(/\\s+/).forEach(n=>{e(n)})}class Qn{constructor(){this._events={}}on(e,n){je(e,s=>{const i=this._events[s]||[];i.push(n),this._events[s]=i})}off(e,n){var s=arguments.length;if(s===0){this._events={};return}je(e,i=>{if(s===1){delete this._events[i];return}const r=this._events[i];r!==void 0&&(r.splice(r.indexOf(n),1),this._events[i]=r)})}trigger(e,...n){var s=this;je(e,i=>{const r=s._events[i];r!==void 0&&r.forEach(o=>{o.apply(s,n)})})}}function Jn(t){return t.plugins={},class extends t{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(e,n){t.plugins[e]={name:e,fn:n}}initializePlugins(e){var n,s;const i=this,r=[];if(Array.isArray(e))e.forEach(o=>{typeof o==\"string\"?r.push(o):(i.plugins.settings[o.name]=o.options,r.push(o.name))});else if(e)for(n in e)e.hasOwnProperty(n)&&(i.plugins.settings[n]=e[n],r.push(n));for(;s=r.shift();)i.require(s)}loadPlugin(e){var n=this,s=n.plugins,i=t.plugins[e];if(!t.plugins.hasOwnProperty(e))throw new Error('Unable to find \"'+e+'\" plugin');s.requested[e]=!0,s.loaded[e]=i.fn.apply(n,[n.plugins.settings[e]||{}]),s.names.push(e)}require(e){var n=this,s=n.plugins;if(!n.plugins.loaded.hasOwnProperty(e)){if(s.requested[e])throw new Error('Plugin has circular dependency (\"'+e+'\")');n.loadPlugin(e)}return s.loaded[e]}}}const Ne=t=>(t=t.filter(Boolean),t.length<2?t[0]||\"\":Zn(t)==1?\"[\"+t.join(\"\")+\"]\":\"(?:\"+t.join(\"|\")+\")\"),en=t=>{if(!Xn(t))return t.join(\"\");let e=\"\",n=0;const s=()=>{n>1&&(e+=\"{\"+n+\"}\")};return t.forEach((i,r)=>{if(i===t[r-1]){n++;return}s(),e+=i,n=1}),s(),e},tn=t=>{let e=Array.from(t);return Ne(e)},Xn=t=>new Set(t).size!==t.length,Se=t=>(t+\"\").replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu,\"\\\\$1\"),Zn=t=>t.reduce((e,n)=>Math.max(e,es(n)),0),es=t=>Array.from(t).length,nn=t=>{if(t.length===1)return[[t]];let e=[];const n=t.substring(1);return nn(n).forEach(function(i){let r=i.slice(0);r[0]=t.charAt(0)+r[0],e.push(r),r=i.slice(0),r.unshift(t.charAt(0)),e.push(r)}),e},ts=[[0,65535]],ns=\"[̀-ͯ·ʾʼ]\";let Ie,sn;const ss=3,lt={},_t={\"/\":\"⁄∕\",0:\"߀\",a:\"ⱥɐɑ\",aa:\"ꜳ\",ae:\"æǽǣ\",ao:\"ꜵ\",au:\"ꜷ\",av:\"ꜹꜻ\",ay:\"ꜽ\",b:\"ƀɓƃ\",c:\"ꜿƈȼↄ\",d:\"đɗɖᴅƌꮷԁɦ\",e:\"ɛǝᴇɇ\",f:\"ꝼƒ\",g:\"ǥɠꞡᵹꝿɢ\",h:\"ħⱨⱶɥ\",i:\"ɨı\",j:\"ɉȷ\",k:\"ƙⱪꝁꝃꝅꞣ\",l:\"łƚɫⱡꝉꝇꞁɭ\",m:\"ɱɯϻ\",n:\"ꞥƞɲꞑᴎлԉ\",o:\"øǿɔɵꝋꝍᴑ\",oe:\"œ\",oi:\"ƣ\",oo:\"ꝏ\",ou:\"ȣ\",p:\"ƥᵽꝑꝓꝕρ\",q:\"ꝗꝙɋ\",r:\"ɍɽꝛꞧꞃ\",s:\"ßȿꞩꞅʂ\",t:\"ŧƭʈⱦꞇ\",th:\"þ\",tz:\"ꜩ\",u:\"ʉ\",v:\"ʋꝟʌ\",vy:\"ꝡ\",w:\"ⱳ\",y:\"ƴɏỿ\",z:\"ƶȥɀⱬꝣ\",hv:\"ƕ\"};for(let t in _t){let e=_t[t]||\"\";for(let n=0;n<e.length;n++){let s=e.substring(n,n+1);lt[s]=t}}const is=new RegExp(Object.keys(lt).join(\"|\")+\"|\"+ns,\"gu\"),rs=t=>{Ie===void 0&&(Ie=cs(ts))},xt=(t,e=\"NFKD\")=>t.normalize(e),Me=t=>Array.from(t).reduce((e,n)=>e+os(n),\"\"),os=t=>(t=xt(t).toLowerCase().replace(is,e=>lt[e]||\"\"),xt(t,\"NFC\"));function*ls(t){for(const[e,n]of t)for(let s=e;s<=n;s++){let i=String.fromCharCode(s),r=Me(i);r!=i.toLowerCase()&&(r.length>ss||r.length!=0&&(yield{folded:r,composed:i,code_point:s}))}}const as=t=>{const e={},n=(s,i)=>{const r=e[s]||new Set,o=new RegExp(\"^\"+tn(r)+\"$\",\"iu\");i.match(o)||(r.add(Se(i)),e[s]=r)};for(let s of ls(t))n(s.folded,s.folded),n(s.folded,s.composed);return e},cs=t=>{const e=as(t),n={};let s=[];for(let r in e){let o=e[r];o&&(n[r]=tn(o)),r.length>1&&s.push(Se(r))}s.sort((r,o)=>o.length-r.length);const i=Ne(s);return sn=new RegExp(\"^\"+i,\"u\"),n},ds=(t,e=1)=>{let n=0;return t=t.map(s=>(Ie[s]&&(n+=s.length),Ie[s]||s)),n>=e?en(t):\"\"},us=(t,e=1)=>(e=Math.max(e,t.length-1),Ne(nn(t).map(n=>ds(n,e)))),wt=(t,e=!0)=>{let n=t.length>1?1:0;return Ne(t.map(s=>{let i=[];const r=e?s.length():s.length()-1;for(let o=0;o<r;o++)i.push(us(s.substrs[o]||\"\",n));return en(i)}))},fs=(t,e)=>{for(const n of e){if(n.start!=t.start||n.end!=t.end||n.substrs.join(\"\")!==t.substrs.join(\"\"))continue;let s=t.parts;const i=o=>{for(const a of s){if(a.start===o.start&&a.substr===o.substr)return!1;if(!(o.length==1||a.length==1)&&(o.start<a.start&&o.end>a.start||a.start<o.start&&a.end>o.start))return!0}return!1};if(!(n.parts.filter(i).length>0))return!0}return!1};class He{parts;substrs;start;end;constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(e){e&&(this.parts.push(e),this.substrs.push(e.substr),this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(e,n){let s=new He,i=JSON.parse(JSON.stringify(this.parts)),r=i.pop();for(const d of i)s.add(d);let o=n.substr.substring(0,e-r.start),a=o.length;return s.add({start:r.start,end:r.start+a,length:a,substr:o}),s}}const ps=t=>{rs(),t=Me(t);let e=\"\",n=[new He];for(let s=0;s<t.length;s++){let r=t.substring(s).match(sn);const o=t.substring(s,s+1),a=r?r[0]:null;let d=[],c=new Set;for(const u of n){const m=u.last();if(!m||m.length==1||m.end<=s)if(a){const h=a.length;u.add({start:s,end:s+h,length:h,substr:a}),c.add(\"1\")}else u.add({start:s,end:s+1,length:1,substr:o}),c.add(\"2\");else if(a){let h=u.clone(s,m);const y=a.length;h.add({start:s,end:s+y,length:y,substr:a}),d.push(h)}else c.add(\"3\")}if(d.length>0){d=d.sort((u,m)=>u.length()-m.length());for(let u of d)fs(u,n)||n.push(u);continue}if(s>0&&c.size==1&&!c.has(\"3\")){e+=wt(n,!1);let u=new He;const m=n[0];m&&u.add(m.last()),n=[u]}}return e+=wt(n,!0),e},ms=(t,e)=>{if(t)return t[e]},hs=(t,e)=>{if(t){for(var n,s=e.split(\".\");(n=s.shift())&&(t=t[n]););return t}},Re=(t,e,n)=>{var s,i;return!t||(t=t+\"\",e.regex==null)||(i=t.search(e.regex),i===-1)?0:(s=e.string.length/t.length,i===0&&(s+=.5),s*n)},Ue=(t,e)=>{var n=t[e];if(typeof n==\"function\")return n;n&&!Array.isArray(n)&&(t[e]=[n])},Ce=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},gs=(t,e)=>typeof t==\"number\"&&typeof e==\"number\"?t>e?1:t<e?-1:0:(t=Me(t+\"\").toLowerCase(),e=Me(e+\"\").toLowerCase(),t>e?1:e>t?-1:0);class vs{items;settings;constructor(e,n){this.items=e,this.settings=n||{diacritics:!0}}tokenize(e,n,s){if(!e||!e.length)return[];const i=[],r=e.split(/\\s+/);var o;return s&&(o=new RegExp(\"^(\"+Object.keys(s).map(Se).join(\"|\")+\"):(.*)$\")),r.forEach(a=>{let d,c=null,u=null;o&&(d=a.match(o))&&(c=d[1],a=d[2]),a.length>0&&(this.settings.diacritics?u=ps(a)||null:u=Se(a),u&&n&&(u=\"\\\\b\"+u)),i.push({string:a,regex:u?new RegExp(u,\"iu\"):null,field:c})}),i}getScoreFunction(e,n){var s=this.prepareSearch(e,n);return this._getScoreFunction(s)}_getScoreFunction(e){const n=e.tokens,s=n.length;if(!s)return function(){return 0};const i=e.options.fields,r=e.weights,o=i.length,a=e.getAttrFn;if(!o)return function(){return 1};const d=(function(){return o===1?function(c,u){const m=i[0].field;return Re(a(u,m),c,r[m]||1)}:function(c,u){var m=0;if(c.field){const h=a(u,c.field);!c.regex&&h?m+=1/o:m+=Re(h,c,1)}else Ce(r,(h,y)=>{m+=Re(a(u,y),c,h)});return m/o}})();return s===1?function(c){return d(n[0],c)}:e.options.conjunction===\"and\"?function(c){var u,m=0;for(let h of n){if(u=d(h,c),u<=0)return 0;m+=u}return m/s}:function(c){var u=0;return Ce(n,m=>{u+=d(m,c)}),u/s}}getSortFunction(e,n){var s=this.prepareSearch(e,n);return this._getSortFunction(s)}_getSortFunction(e){var n,s=[];const i=this,r=e.options,o=!e.query&&r.sort_empty?r.sort_empty:r.sort;if(typeof o==\"function\")return o.bind(this);const a=function(c,u){return c===\"$score\"?u.score:e.getAttrFn(i.items[u.id],c)};if(o)for(let c of o)(e.query||c.field!==\"$score\")&&s.push(c);if(e.query){n=!0;for(let c of s)if(c.field===\"$score\"){n=!1;break}n&&s.unshift({field:\"$score\",direction:\"desc\"})}else s=s.filter(c=>c.field!==\"$score\");return s.length?function(c,u){var m,h;for(let y of s)if(h=y.field,m=(y.direction===\"desc\"?-1:1)*gs(a(h,c),a(h,u)),m)return m;return 0}:null}prepareSearch(e,n){const s={};var i=Object.assign({},n);if(Ue(i,\"sort\"),Ue(i,\"sort_empty\"),i.fields){Ue(i,\"fields\");const r=[];i.fields.forEach(o=>{typeof o==\"string\"&&(o={field:o,weight:1}),r.push(o),s[o.field]=\"weight\"in o?o.weight:1}),i.fields=r}return{options:i,query:e.toLowerCase().trim(),tokens:this.tokenize(e,i.respect_word_boundaries,s),total:0,items:[],weights:s,getAttrFn:i.nesting?hs:ms}}search(e,n){var s=this,i,r;r=this.prepareSearch(e,n),n=r.options,e=r.query;const o=n.score||s._getScoreFunction(r);e.length?Ce(s.items,(d,c)=>{i=o(d),(n.filter===!1||i>0)&&r.items.push({score:i,id:c})}):Ce(s.items,(d,c)=>{r.items.push({score:1,id:c})});const a=s._getSortFunction(r);return a&&r.items.sort(a),r.total=r.items.length,typeof n.limit==\"number\"&&(r.items=r.items.slice(0,n.limit)),r}}const Q=t=>typeof t>\"u\"||t===null?null:$e(t),$e=t=>typeof t==\"boolean\"?t?\"1\":\"0\":t+\"\",Ke=t=>(t+\"\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\"),ys=(t,e)=>e>0?window.setTimeout(t,e):(t.call(null),null),bs=(t,e)=>{var n;return function(s,i){var r=this;n&&(r.loading=Math.max(r.loading-1,0),clearTimeout(n)),n=setTimeout(function(){n=null,r.loadedSearches[s]=!0,t.call(r,s,i)},e)}},kt=(t,e,n)=>{var s,i=t.trigger,r={};t.trigger=function(){var o=arguments[0];if(e.indexOf(o)!==-1)r[o]=arguments;else return i.apply(t,arguments)},n.apply(t,[]),t.trigger=i;for(s of e)s in r&&i.apply(t,r[s])},_s=t=>({start:t.selectionStart||0,length:(t.selectionEnd||0)-(t.selectionStart||0)}),B=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},W=(t,e,n,s)=>{t.addEventListener(e,n,s)},de=(t,e)=>{if(!e||!e[t])return!1;var n=(e.altKey?1:0)+(e.ctrlKey?1:0)+(e.shiftKey?1:0)+(e.metaKey?1:0);return n===1},ze=(t,e)=>{const n=t.getAttribute(\"id\");return n||(t.setAttribute(\"id\",e),e)},Lt=t=>t.replace(/[\\\\\"']/g,\"\\\\$&\"),ue=(t,e)=>{e&&t.append(e)},U=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},ie=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(rn(t)){var e=document.createElement(\"template\");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},rn=t=>typeof t==\"string\"&&t.indexOf(\"<\")>-1,xs=t=>t.replace(/['\"\\\\]/g,\"\\\\$&\"),We=(t,e)=>{var n=document.createEvent(\"HTMLEvents\");n.initEvent(e,!0,!1),t.dispatchEvent(n)},Ae=(t,e)=>{Object.assign(t.style,e)},Y=(t,...e)=>{var n=on(e);t=ln(t),t.map(s=>{n.map(i=>{s.classList.add(i)})})},le=(t,...e)=>{var n=on(e);t=ln(t),t.map(s=>{n.map(i=>{s.classList.remove(i)})})},on=t=>{var e=[];return U(t,n=>{typeof n==\"string\"&&(n=n.trim().split(/[\\t\\n\\f\\r\\s]/)),Array.isArray(n)&&(e=e.concat(n))}),e.filter(Boolean)},ln=t=>(Array.isArray(t)||(t=[t]),t),Ge=(t,e,n)=>{if(!(n&&!n.contains(t)))for(;t&&t.matches;){if(t.matches(e))return t;t=t.parentNode}},St=(t,e=0)=>e>0?t[t.length-1]:t[0],ws=t=>Object.keys(t).length===0,Et=(t,e)=>{if(!t)return-1;e=e||t.nodeName;for(var n=0;t=t.previousElementSibling;)t.matches(e)&&n++;return n},N=(t,e)=>{U(e,(n,s)=>{n==null?t.removeAttribute(s):t.setAttribute(s,\"\"+n)})},tt=(t,e)=>{t.parentNode&&t.parentNode.replaceChild(e,t)},ks=(t,e)=>{if(e===null)return;if(typeof e==\"string\"){if(!e.length)return;e=new RegExp(e,\"i\")}const n=r=>{var o=r.data.match(e);if(o&&r.data.length>0){var a=document.createElement(\"span\");a.className=\"highlight\";var d=r.splitText(o.index);d.splitText(o[0].length);var c=d.cloneNode(!0);return a.appendChild(c),tt(d,a),1}return 0},s=r=>{r.nodeType===1&&r.childNodes&&!/(script|style)/i.test(r.tagName)&&(r.className!==\"highlight\"||r.tagName!==\"SPAN\")&&Array.from(r.childNodes).forEach(o=>{i(o)})},i=r=>r.nodeType===3?n(r):(s(r),0);i(t)},Ls=t=>{var e=t.querySelectorAll(\"span.highlight\");Array.prototype.forEach.call(e,function(n){var s=n.parentNode;s.replaceChild(n.firstChild,n),s.normalize()})},Ss=65,Es=13,Cs=27,As=37,Ts=38,qs=39,Os=40,Ct=8,$s=46,At=9,Is=typeof navigator>\"u\"?!1:/Mac/.test(navigator.userAgent),Te=Is?\"metaKey\":\"ctrlKey\",Tt={options:[],optgroups:[],plugins:[],delimiter:\",\",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,clearAfterSelect:!1,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:\"loading\",dataAttr:null,optgroupField:\"optgroup\",valueField:\"value\",labelField:\"text\",disabledField:\"disabled\",optgroupLabelField:\"label\",optgroupValueField:\"value\",lockOptgroupOrder:!1,sortField:\"$order\",searchField:[\"text\"],searchConjunction:\"and\",mode:null,wrapperClass:\"ts-wrapper\",controlClass:\"ts-control\",dropdownClass:\"ts-dropdown\",dropdownContentClass:\"ts-dropdown-content\",itemClass:\"item\",optionClass:\"option\",dropdownParent:null,controlInput:'<input type=\"text\" autocomplete=\"off\" size=\"1\" />',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(t){return t.length>0},render:{}};function qt(t,e){var n=Object.assign({},Tt,e),s=n.dataAttr,i=n.labelField,r=n.valueField,o=n.disabledField,a=n.optgroupField,d=n.optgroupLabelField,c=n.optgroupValueField,u=t.tagName.toLowerCase(),m=t.getAttribute(\"placeholder\")||t.getAttribute(\"data-placeholder\");if(!m&&!n.allowEmptyOption){let _=t.querySelector('option[value=\"\"]');_&&(m=_.textContent)}var h={placeholder:m,options:[],optgroups:[],items:[],maxItems:null},y=()=>{var _,C=h.options,E={},$=1;let w=0;var H=M=>{var q=Object.assign({},M.dataset),L=s&&q[s];return typeof L==\"string\"&&L.length&&(q=Object.assign(q,JSON.parse(L))),q},te=(M,q)=>{var L=Q(M.value);if(L!=null&&!(!L&&!n.allowEmptyOption)){if(E.hasOwnProperty(L)){if(q){var F=E[L][a];F?Array.isArray(F)?F.push(q):E[L][a]=[F,q]:E[L][a]=q}}else{var S=H(M);S[i]=S[i]||M.textContent,S[r]=S[r]||L,S[o]=S[o]||M.disabled,S[a]=S[a]||q,S.$option=M,S.$order=S.$order||++w,E[L]=S,C.push(S)}M.selected&&h.items.push(L)}},ne=M=>{var q,L;L=H(M),L[d]=L[d]||M.getAttribute(\"label\")||\"\",L[c]=L[c]||$++,L[o]=L[o]||M.disabled,L.$order=L.$order||++w,h.optgroups.push(L),q=L[c],U(M.children,F=>{te(F,q)})};h.maxItems=t.hasAttribute(\"multiple\")?null:1,U(t.children,M=>{_=M.tagName.toLowerCase(),_===\"optgroup\"?ne(M):_===\"option\"&&te(M)})},g=()=>{const _=t.getAttribute(s);if(_)h.options=JSON.parse(_),U(h.options,E=>{h.items.push(E[r])});else{var C=t.value.trim()||\"\";if(!n.allowEmptyOption&&!C.length)return;const E=C.split(n.delimiter);U(E,$=>{const w={};w[i]=$,w[r]=$,h.options.push(w)}),h.items=E}};return u===\"select\"?y():g(),Object.assign({},Tt,h,e)}var Ot=0;class V extends Jn(Qn){constructor(e,n){super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue=\"\",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,Ot++;var s,i=ie(e);if(i.tomselect)throw new Error(\"Tom Select already initialized on this element\");i.tomselect=this;var r=window.getComputedStyle&&window.getComputedStyle(i,null);s=r.getPropertyValue(\"direction\");const o=qt(i,n);this.settings=o,this.input=i,this.tabIndex=i.tabIndex||0,this.is_select_tag=i.tagName.toLowerCase()===\"select\",this.rtl=/rtl/i.test(s),this.inputId=ze(i,\"tomselect-\"+Ot),this.isRequired=i.required,this.sifter=new vs(this.options,{diacritics:o.diacritics}),o.mode=o.mode||(o.maxItems===1?\"single\":\"multi\"),typeof o.hideSelected!=\"boolean\"&&(o.hideSelected=o.mode===\"multi\"),typeof o.hidePlaceholder!=\"boolean\"&&(o.hidePlaceholder=o.mode!==\"multi\");var a=o.createFilter;typeof a!=\"function\"&&(typeof a==\"string\"&&(a=new RegExp(a)),a instanceof RegExp?o.createFilter=C=>a.test(C):o.createFilter=C=>this.settings.duplicates||!this.options[C]),this.initializePlugins(o.plugins),this.setupCallbacks(),this.setupTemplates();const d=ie(\"<div>\"),c=ie(\"<div>\"),u=this._render(\"dropdown\"),m=ie('<div role=\"listbox\" tabindex=\"-1\">'),h=this.input.getAttribute(\"class\")||\"\",y=o.mode;var g;if(Y(d,o.wrapperClass,h,y),Y(c,o.controlClass),ue(d,c),Y(u,o.dropdownClass,y),o.copyClassesToDropdown&&Y(u,h),Y(m,o.dropdownContentClass),ue(u,m),ie(o.dropdownParent||d).appendChild(u),rn(o.controlInput)){g=ie(o.controlInput);var _=[\"autocorrect\",\"autocapitalize\",\"autocomplete\",\"spellcheck\",\"aria-label\"];U(_,C=>{i.getAttribute(C)&&N(g,{[C]:i.getAttribute(C)})}),g.tabIndex=-1,c.appendChild(g),this.focus_node=g}else o.controlInput?(g=ie(o.controlInput),this.focus_node=g):(g=ie(\"<input/>\"),this.focus_node=c);this.wrapper=d,this.dropdown=u,this.dropdown_content=m,this.control=c,this.control_input=g,this.setup()}setup(){const e=this,n=e.settings,s=e.control_input,i=e.dropdown,r=e.dropdown_content,o=e.wrapper,a=e.control,d=e.input,c=e.focus_node,u={passive:!0},m=e.inputId+\"-ts-dropdown\";N(r,{id:m}),N(c,{role:\"combobox\",\"aria-haspopup\":\"listbox\",\"aria-expanded\":\"false\",\"aria-controls\":m});const h=ze(c,e.inputId+\"-ts-control\"),y=\"label[for='\"+xs(e.inputId)+\"']\",g=document.querySelector(y),_=e.focus.bind(e);if(g){W(g,\"click\",_),N(g,{for:h});const w=ze(g,e.inputId+\"-ts-label\");N(c,{\"aria-labelledby\":w}),N(r,{\"aria-labelledby\":w})}if(o.style.width=d.style.width,o.style.minWidth=d.style.minWidth,o.style.maxWidth=d.style.maxWidth,e.plugins.names.length){const w=\"plugin-\"+e.plugins.names.join(\" plugin-\");Y([o,i],w)}(n.maxItems===null||n.maxItems>1)&&e.is_select_tag&&N(d,{multiple:\"multiple\"}),n.placeholder&&N(s,{placeholder:n.placeholder}),!n.splitOn&&n.delimiter&&(n.splitOn=new RegExp(\"\\\\s*\"+Se(n.delimiter)+\"+\\\\s*\")),n.load&&n.loadThrottle&&(n.load=bs(n.load,n.loadThrottle)),W(i,\"mousemove\",()=>{e.ignoreHover=!1}),W(i,\"mouseenter\",w=>{var H=Ge(w.target,\"[data-selectable]\",i);H&&e.onOptionHover(w,H)},{capture:!0}),W(i,\"click\",w=>{const H=Ge(w.target,\"[data-selectable]\");H&&(e.onOptionSelect(w,H),B(w,!0))}),W(a,\"click\",w=>{var H=Ge(w.target,\"[data-ts-item]\",a);if(H&&e.onItemSelect(w,H)){B(w,!0);return}s.value==\"\"&&(e.onClick(),B(w,!0))}),W(c,\"keydown\",w=>e.onKeyDown(w)),W(s,\"keypress\",w=>e.onKeyPress(w)),W(s,\"input\",w=>e.onInput(w)),W(c,\"blur\",w=>e.onBlur(w)),W(c,\"focus\",w=>e.onFocus(w)),W(s,\"paste\",w=>e.onPaste(w));const C=w=>{const H=w.composedPath()[0];if(!o.contains(H)&&!i.contains(H)){e.isFocused&&e.blur(),e.inputState();return}H==s&&e.isOpen?w.stopPropagation():B(w,!0)},E=()=>{e.isOpen&&e.positionDropdown()},$=()=>{e.isValid&&(e.isValid=!1,e.isInvalid=!0,e.refreshState())};W(d,\"invalid\",$),W(document,\"mousedown\",C),W(window,\"scroll\",E,u),W(window,\"resize\",E,u),this._destroy=()=>{d.removeEventListener(\"invalid\",$),document.removeEventListener(\"mousedown\",C),window.removeEventListener(\"scroll\",E),window.removeEventListener(\"resize\",E),g&&g.removeEventListener(\"click\",_)},this.revertSettings={innerHTML:d.innerHTML,tabIndex:d.tabIndex},d.tabIndex=-1,d.insertAdjacentElement(\"afterend\",e.wrapper),e.sync(!1),n.items=[],delete n.optgroups,delete n.options,e.refreshItems(),e.close(!1),e.inputState(),e.isSetup=!0,d.disabled?e.disable():d.readOnly?e.setReadOnly(!0):e.enable(),e.on(\"change\",this.onChange),Y(d,\"tomselected\",\"ts-hidden-accessible\"),e.trigger(\"initialize\"),n.preload===!0&&e.preload()}setupOptions(e=[],n=[]){this.addOptions(e),U(n,s=>{this.registerOptionGroup(s)})}setupTemplates(){var e=this,n=e.settings.labelField,s=e.settings.optgroupLabelField,i={optgroup:r=>{let o=document.createElement(\"div\");return o.className=\"optgroup\",o.appendChild(r.options),o},optgroup_header:(r,o)=>'<div class=\"optgroup-header\">'+o(r[s])+\"</div>\",option:(r,o)=>\"<div>\"+o(r[n])+\"</div>\",item:(r,o)=>\"<div>\"+o(r[n])+\"</div>\",option_create:(r,o)=>'<div class=\"create\">Add <strong>'+o(r.input)+\"</strong>&hellip;</div>\",no_results:()=>'<div class=\"no-results\">No results found</div>',loading:()=>'<div class=\"spinner\"></div>',not_loading:()=>{},dropdown:()=>\"<div></div>\"};e.settings.render=Object.assign({},i,e.settings.render)}setupCallbacks(){var e,n,s={initialize:\"onInitialize\",change:\"onChange\",item_add:\"onItemAdd\",item_remove:\"onItemRemove\",item_select:\"onItemSelect\",clear:\"onClear\",option_add:\"onOptionAdd\",option_remove:\"onOptionRemove\",option_clear:\"onOptionClear\",optgroup_add:\"onOptionGroupAdd\",optgroup_remove:\"onOptionGroupRemove\",optgroup_clear:\"onOptionGroupClear\",dropdown_open:\"onDropdownOpen\",dropdown_close:\"onDropdownClose\",type:\"onType\",load:\"onLoad\",focus:\"onFocus\",blur:\"onBlur\"};for(e in s)n=this.settings[s[e]],n&&this.on(e,n)}sync(e=!0){const n=this,s=e?qt(n.input,{delimiter:n.settings.delimiter,allowEmptyOption:n.settings.allowEmptyOption}):n.settings;n.setupOptions(s.options,s.optgroups),n.setValue(s.items||[],!0),n.lastQuery=null}onClick(){var e=this;if(e.activeItems.length>0){e.clearActiveItems(),e.focus();return}e.isFocused&&e.isOpen?e.blur():e.focus()}onMouseDown(){}onChange(){We(this.input,\"input\"),We(this.input,\"change\")}onPaste(e){var n=this;if(n.isInputHidden||n.isLocked){B(e);return}n.settings.splitOn&&setTimeout(()=>{var s=n.inputValue();if(s.match(n.settings.splitOn)){var i=s.trim().split(n.settings.splitOn);U(i,r=>{Q(r)&&(this.options[r]?n.addItem(r):n.createItem(r))})}},0)}onKeyPress(e){var n=this;if(n.isLocked){B(e);return}var s=String.fromCharCode(e.keyCode||e.which);if(n.settings.create&&n.settings.mode===\"multi\"&&s===n.settings.delimiter){n.createItem(),B(e);return}}onKeyDown(e){var n=this;if(n.ignoreHover=!0,n.isLocked){e.keyCode!==At&&B(e);return}switch(e.keyCode){case Ss:if(de(Te,e)&&n.control_input.value==\"\"){B(e),n.selectAll();return}break;case Cs:n.isOpen&&(B(e,!0),n.close()),n.clearActiveItems();return;case Os:if(!n.isOpen&&n.hasOptions)n.open();else if(n.activeOption){let s=n.getAdjacent(n.activeOption,1);s&&n.setActiveOption(s)}B(e);return;case Ts:if(n.activeOption){let s=n.getAdjacent(n.activeOption,-1);s&&n.setActiveOption(s)}B(e);return;case Es:n.canSelect(n.activeOption)?(n.onOptionSelect(e,n.activeOption),B(e)):(n.settings.create&&n.createItem()||document.activeElement==n.control_input&&n.isOpen)&&B(e);return;case As:n.advanceSelection(-1,e);return;case qs:n.advanceSelection(1,e);return;case At:n.settings.selectOnTab&&(n.canSelect(n.activeOption)?(n.onOptionSelect(e,n.activeOption),B(e)):n.settings.create&&n.createItem()&&B(e));return;case Ct:case $s:n.deleteSelection(e);return}n.isInputHidden&&!de(Te,e)&&B(e)}onInput(e){if(this.isLocked)return;const n=this.inputValue();if(this.lastValue!==n){if(this.lastValue=n,n==\"\"){this._onInput();return}this.refreshTimeout&&window.clearTimeout(this.refreshTimeout),this.refreshTimeout=ys(()=>{this.refreshTimeout=null,this._onInput()},this.settings.refreshThrottle)}}_onInput(){const e=this.lastValue;this.settings.shouldLoad.call(this,e)&&this.load(e),this.refreshOptions(),this.trigger(\"type\",e)}onOptionHover(e,n){this.ignoreHover||this.setActiveOption(n,!1)}onFocus(e){var n=this,s=n.isFocused;if(n.isDisabled||n.isReadOnly){n.blur(),B(e);return}n.ignoreFocus||(n.isFocused=!0,n.settings.preload===\"focus\"&&n.preload(),s||n.trigger(\"focus\"),n.activeItems.length||(n.inputState(),n.refreshOptions(!!n.settings.openOnFocus)),n.refreshState())}onBlur(e){if(document.hasFocus()!==!1){var n=this;if(n.isFocused){n.isFocused=!1,n.ignoreFocus=!1;var s=()=>{n.close(),n.setActiveItem(),n.setCaret(n.items.length),n.trigger(\"blur\")};n.settings.create&&n.settings.createOnBlur?n.createItem(null,s):s()}}}onOptionSelect(e,n){var s,i=this;n.parentElement&&n.parentElement.matches(\"[data-disabled]\")||(n.classList.contains(\"create\")?i.createItem(null,()=>{i.settings.closeAfterSelect?i.close():i.settings.clearAfterSelect&&i.setTextboxValue()}):(s=n.dataset.value,typeof s<\"u\"&&(i.lastQuery=null,i.addItem(s),i.settings.closeAfterSelect?i.close():i.settings.clearAfterSelect&&i.setTextboxValue(),!i.settings.hideSelected&&e.type&&/click/.test(e.type)&&i.setActiveOption(n))))}canSelect(e){return!!(this.isOpen&&e&&this.dropdown_content.contains(e))}onItemSelect(e,n){var s=this;return!s.isLocked&&s.settings.mode===\"multi\"?(B(e),s.setActiveItem(n,e),!0):!1}canLoad(e){return!(!this.settings.load||this.loadedSearches.hasOwnProperty(e))}load(e){const n=this;if(!n.canLoad(e))return;Y(n.wrapper,n.settings.loadingClass),n.loading++;const s=n.loadCallback.bind(n);n.settings.load.call(n,e,s)}loadCallback(e,n){const s=this;s.loading=Math.max(s.loading-1,0),s.lastQuery=null,s.clearActiveOption(),s.setupOptions(e,n),s.refreshOptions(s.isFocused&&!s.isInputHidden),s.loading||le(s.wrapper,s.settings.loadingClass),s.trigger(\"load\",e,n)}preload(){var e=this.wrapper.classList;e.contains(\"preloaded\")||(e.add(\"preloaded\"),this.load(\"\"))}setTextboxValue(e=\"\"){var n=this.control_input,s=n.value!==e;s&&(n.value=e,We(n,\"update\"),this.lastValue=e)}getValue(){return this.is_select_tag&&this.input.hasAttribute(\"multiple\")?this.items:this.items.join(this.settings.delimiter)}setValue(e,n){var s=n?[]:[\"change\"];kt(this,s,()=>{this.clear(n),this.addItems(e,n)})}setMaxItems(e){e===0&&(e=null),this.settings.maxItems=e,this.refreshState()}setActiveItem(e,n){var s=this,i,r,o,a,d,c;if(s.settings.mode!==\"single\"){if(!e){s.clearActiveItems(),s.isFocused&&s.inputState();return}if(i=n&&n.type.toLowerCase(),i===\"click\"&&de(\"shiftKey\",n)&&s.activeItems.length){for(c=s.getLastActive(),o=Array.prototype.indexOf.call(s.control.children,c),a=Array.prototype.indexOf.call(s.control.children,e),o>a&&(d=o,o=a,a=d),r=o;r<=a;r++)e=s.control.children[r],s.activeItems.indexOf(e)===-1&&s.setActiveItemClass(e);B(n)}else i===\"click\"&&de(Te,n)||i===\"keydown\"&&de(\"shiftKey\",n)?e.classList.contains(\"active\")?s.removeActiveItem(e):s.setActiveItemClass(e):(s.clearActiveItems(),s.setActiveItemClass(e));s.inputState(),s.isFocused||s.focus()}}setActiveItemClass(e){const n=this,s=n.control.querySelector(\".last-active\");s&&le(s,\"last-active\"),Y(e,\"active last-active\"),n.trigger(\"item_select\",e),n.activeItems.indexOf(e)==-1&&n.activeItems.push(e)}removeActiveItem(e){var n=this.activeItems.indexOf(e);this.activeItems.splice(n,1),le(e,\"active\")}clearActiveItems(){le(this.activeItems,\"active\"),this.activeItems=[]}setActiveOption(e,n=!0){e!==this.activeOption&&(this.clearActiveOption(),e&&(this.activeOption=e,N(this.focus_node,{\"aria-activedescendant\":e.getAttribute(\"id\")}),N(e,{\"aria-selected\":\"true\"}),Y(e,\"active\"),n&&this.scrollToOption(e)))}scrollToOption(e,n){if(!e)return;const s=this.dropdown_content,i=s.clientHeight,r=s.scrollTop||0,o=e.offsetHeight,a=e.getBoundingClientRect().top-s.getBoundingClientRect().top+r;a+o>i+r?this.scroll(a-i+o,n):a<r&&this.scroll(a,n)}scroll(e,n){const s=this.dropdown_content;n&&(s.style.scrollBehavior=n),s.scrollTop=e,s.style.scrollBehavior=\"\"}clearActiveOption(){this.activeOption&&(le(this.activeOption,\"active\"),N(this.activeOption,{\"aria-selected\":null})),this.activeOption=null,N(this.focus_node,{\"aria-activedescendant\":null})}selectAll(){const e=this;if(e.settings.mode===\"single\")return;const n=e.controlChildren();n.length&&(e.inputState(),e.close(),e.activeItems=n,U(n,s=>{e.setActiveItemClass(s)}))}inputState(){var e=this;e.control.contains(e.control_input)&&(N(e.control_input,{placeholder:e.settings.placeholder}),e.activeItems.length>0||!e.isFocused&&e.settings.hidePlaceholder&&e.items.length>0?(e.setTextboxValue(),e.isInputHidden=!0):(e.settings.hidePlaceholder&&e.items.length>0&&N(e.control_input,{placeholder:\"\"}),e.isInputHidden=!1),e.wrapper.classList.toggle(\"input-hidden\",e.isInputHidden))}inputValue(){return this.control_input.value.trim()}focus(){var e=this;e.isDisabled||e.isReadOnly||(e.ignoreFocus=!0,e.control_input.offsetWidth?e.control_input.focus():e.focus_node.focus(),setTimeout(()=>{e.ignoreFocus=!1,e.onFocus()},0))}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(e){return this.sifter.getScoreFunction(e,this.getSearchOptions())}getSearchOptions(){var e=this.settings,n=e.sortField;return typeof e.sortField==\"string\"&&(n=[{field:e.sortField}]),{fields:e.searchField,conjunction:e.searchConjunction,sort:n,nesting:e.nesting}}search(e){var n,s,i=this,r=this.getSearchOptions();if(i.settings.score&&(s=i.settings.score.call(i,e),typeof s!=\"function\"))throw new Error('Tom Select \"score\" setting must be a function that returns a function');return e!==i.lastQuery?(i.lastQuery=e,/(.)\\1{15,}/.test(e)&&(e=\"\"),n=i.sifter.search(e,Object.assign(r,{score:s})),i.currentResults=n):n=Object.assign({},i.currentResults),i.settings.hideSelected&&(n.items=n.items.filter(o=>{let a=Q(o.id);return!(a!==null&&i.items.indexOf(a)!==-1)})),n}refreshOptions(e=!0){var n,s,i,r,o,a,d,c,u,m;const h={},y=[];var g=this,_=g.inputValue();const C=_===g.lastQuery||_==\"\"&&g.lastQuery==null;var E=g.search(_),$=null,w=g.settings.shouldOpen||!1,H=g.dropdown_content;C&&($=g.activeOption,$&&(u=$.closest(\"[data-group]\"))),r=E.items.length,typeof g.settings.maxOptions==\"number\"&&(r=Math.min(r,g.settings.maxOptions)),r>0&&(w=!0);const te=(q,L)=>{let F=h[q];if(F!==void 0){let T=y[F];if(T!==void 0)return[F,T.fragment]}let S=document.createDocumentFragment();return F=y.length,y.push({fragment:S,order:L,optgroup:q}),[F,S]};for(n=0;n<r;n++){let q=E.items[n];if(!q)continue;let L=q.id,F=g.options[L];if(F===void 0)continue;let S=$e(L),T=g.getOption(S,!0);for(g.settings.hideSelected||T.classList.toggle(\"selected\",g.items.includes(S)),o=F[g.settings.optgroupField]||\"\",a=Array.isArray(o)?o:[o],s=0,i=a&&a.length;s<i;s++){o=a[s];let O=F.$order,x=g.optgroups[o];if(x===void 0&&typeof g.settings.optionGroupRegister==\"function\"){var ne;(ne=g.settings.optionGroupRegister.apply(g,[o]))&&g.registerOptionGroup(ne)}x=g.optgroups[o],x===void 0?o=\"\":O=x.$order;const[X,R]=te(o,O);s>0&&(T=T.cloneNode(!0),N(T,{id:F.$id+\"-clone-\"+s,\"aria-selected\":null}),T.classList.add(\"ts-cloned\"),le(T,\"active\"),g.activeOption&&g.activeOption.dataset.value==L&&u&&u.dataset.group===o.toString()&&($=T)),R.appendChild(T),o!=\"\"&&(h[o]=X)}}g.settings.lockOptgroupOrder&&y.sort((q,L)=>q.order-L.order),d=document.createDocumentFragment(),U(y,q=>{let L=q.fragment,F=q.optgroup;if(!L||!L.children.length)return;let S=g.optgroups[F];if(S!==void 0){let T=document.createDocumentFragment(),O=g.render(\"optgroup_header\",S);ue(T,O),ue(T,L);let x=g.render(\"optgroup\",{group:S,options:T});ue(d,x)}else ue(d,L)}),H.innerHTML=\"\",ue(H,d),g.settings.highlight&&(Ls(H),E.query.length&&E.tokens.length&&U(E.tokens,q=>{ks(H,q.regex)}));var M=q=>{let L=g.render(q,{input:_});return L&&(w=!0,H.insertBefore(L,H.firstChild)),L};if(g.loading?M(\"loading\"):g.settings.shouldLoad.call(g,_)?E.items.length===0&&M(\"no_results\"):M(\"not_loading\"),c=g.canCreate(_),c&&(m=M(\"option_create\")),g.hasOptions=E.items.length>0||c,w){if(E.items.length>0){if(!$&&g.settings.mode===\"single\"&&g.items[0]!=null&&($=g.getOption(g.items[0])),!H.contains($)){let q=0;m&&!g.settings.addPrecedence&&(q=1),$=g.selectable()[q]}}else m&&($=m);e&&!g.isOpen&&(g.open(),g.scrollToOption($,\"auto\")),g.setActiveOption($)}else g.clearActiveOption(),e&&g.isOpen&&g.close(!1)}selectable(){return this.dropdown_content.querySelectorAll(\"[data-selectable]\")}addOption(e,n=!1){const s=this;if(Array.isArray(e))return s.addOptions(e,n),!1;const i=Q(e[s.settings.valueField]);return i===null||s.options.hasOwnProperty(i)?!1:(e.$order=e.$order||++s.order,e.$id=s.inputId+\"-opt-\"+e.$order,s.options[i]=e,s.lastQuery=null,n&&(s.userOptions[i]=n,s.trigger(\"option_add\",i,e)),i)}addOptions(e,n=!1){U(e,s=>{this.addOption(s,n)})}registerOption(e){return this.addOption(e)}registerOptionGroup(e){var n=Q(e[this.settings.optgroupValueField]);return n===null?!1:(e.$order=e.$order||++this.order,this.optgroups[n]=e,n)}addOptionGroup(e,n){var s;n[this.settings.optgroupValueField]=e,(s=this.registerOptionGroup(n))&&this.trigger(\"optgroup_add\",s,n)}removeOptionGroup(e){this.optgroups.hasOwnProperty(e)&&(delete this.optgroups[e],this.clearCache(),this.trigger(\"optgroup_remove\",e))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger(\"optgroup_clear\")}updateOption(e,n){const s=this;var i,r;const o=Q(e),a=Q(n[s.settings.valueField]);if(o===null)return;const d=s.options[o];if(d==null)return;if(typeof a!=\"string\")throw new Error(\"Value must be set in option data\");const c=s.getOption(o),u=s.getItem(o);if(n.$order=n.$order||d.$order,delete s.options[o],s.uncacheValue(a),s.options[a]=n,c){if(s.dropdown_content.contains(c)){const m=s._render(\"option\",n);tt(c,m),s.activeOption===c&&s.setActiveOption(m)}c.remove()}u&&(r=s.items.indexOf(o),r!==-1&&s.items.splice(r,1,a),i=s._render(\"item\",n),u.classList.contains(\"active\")&&Y(i,\"active\"),tt(u,i)),s.lastQuery=null}removeOption(e,n){const s=this;e=$e(e),s.uncacheValue(e),delete s.userOptions[e],delete s.options[e],s.lastQuery=null,s.trigger(\"option_remove\",e),s.removeItem(e,n)}clearOptions(e){const n=(e||this.clearFilter).bind(this);this.loadedSearches={},this.userOptions={},this.clearCache();const s={};U(this.options,(i,r)=>{n(i,r)&&(s[r]=i)}),this.options=this.sifter.items=s,this.lastQuery=null,this.trigger(\"option_clear\")}clearFilter(e,n){return this.items.indexOf(n)>=0}getOption(e,n=!1){const s=Q(e);if(s===null)return null;const i=this.options[s];if(i!=null){if(i.$div)return i.$div;if(n)return this._render(\"option\",i)}return null}getAdjacent(e,n,s=\"option\"){var i=this,r;if(!e)return null;s==\"item\"?r=i.controlChildren():r=i.dropdown_content.querySelectorAll(\"[data-selectable]\");for(let o=0;o<r.length;o++)if(r[o]==e)return n>0?r[o+1]:r[o-1];return null}getItem(e){if(typeof e==\"object\")return e;var n=Q(e);return n!==null?this.control.querySelector(`[data-value=\"${Lt(n)}\"]`):null}addItems(e,n){var s=this,i=Array.isArray(e)?e:[e];i=i.filter(o=>s.items.indexOf(o)===-1);const r=i[i.length-1];i.forEach(o=>{s.isPending=o!==r,s.addItem(o,n)})}addItem(e,n){var s=n?[]:[\"change\",\"dropdown_close\"];kt(this,s,()=>{var i,r;const o=this,a=o.settings.mode,d=Q(e);if(!(d&&o.items.indexOf(d)!==-1&&(a===\"single\"&&o.close(),a===\"single\"||!o.settings.duplicates))&&!(d===null||!o.options.hasOwnProperty(d))&&(a===\"single\"&&o.clear(n),!(a===\"multi\"&&o.isFull()))){if(i=o._render(\"item\",o.options[d]),o.control.contains(i)&&(i=i.cloneNode(!0)),r=o.isFull(),o.items.splice(o.caretPos,0,d),o.insertAtCaret(i),o.isSetup){if(!o.isPending&&o.settings.hideSelected){let c=o.getOption(d),u=o.getAdjacent(c,1);u&&o.setActiveOption(u)}o.settings.clearAfterSelect&&o.setTextboxValue(),!o.isPending&&!o.settings.closeAfterSelect&&o.refreshOptions(o.isFocused&&a!==\"single\"),o.settings.closeAfterSelect!=!1&&o.isFull()?o.close():o.isPending||o.positionDropdown(),o.trigger(\"item_add\",d,i),o.isPending||o.updateOriginalInput({silent:n})}(!o.isPending||!r&&o.isFull())&&(o.inputState(),o.refreshState())}})}removeItem(e=null,n){const s=this;if(e=s.getItem(e),!e)return;var i,r;const o=e.dataset.value;i=Et(e),e.remove(),e.classList.contains(\"active\")&&(r=s.activeItems.indexOf(e),s.activeItems.splice(r,1),le(e,\"active\")),s.items.splice(i,1),s.lastQuery=null,!s.settings.persist&&s.userOptions.hasOwnProperty(o)&&s.removeOption(o,n),i<s.caretPos&&s.setCaret(s.caretPos-1),s.updateOriginalInput({silent:n}),s.refreshState(),s.positionDropdown(),s.trigger(\"item_remove\",o,e)}createItem(e=null,n=()=>{}){arguments.length===3&&(n=arguments[2]),typeof n!=\"function\"&&(n=()=>{});var s=this,i=s.caretPos,r;if(e=e||s.inputValue(),!s.canCreate(e))return Q(e)&&this.options[e]&&s.addItem(e),n(),!1;s.lock();var o=!1,a=d=>{if(s.unlock(),!d||typeof d!=\"object\")return n();var c=Q(d[s.settings.valueField]);if(typeof c!=\"string\")return n();s.setTextboxValue(),s.addOption(d,!0),s.setCaret(i),s.addItem(c),n(d),o=!0};return typeof s.settings.create==\"function\"?r=s.settings.create.call(this,e,a):r={[s.settings.labelField]:e,[s.settings.valueField]:e},o||a(r),!0}refreshItems(){var e=this;e.lastQuery=null,e.isSetup&&e.addItems(e.items),e.updateOriginalInput(),e.refreshState()}refreshState(){const e=this;e.refreshValidityState();const n=e.isFull(),s=e.isLocked;e.wrapper.classList.toggle(\"rtl\",e.rtl);const i=e.wrapper.classList;i.toggle(\"focus\",e.isFocused),i.toggle(\"disabled\",e.isDisabled),i.toggle(\"readonly\",e.isReadOnly),i.toggle(\"required\",e.isRequired),i.toggle(\"invalid\",!e.isValid),i.toggle(\"locked\",s),i.toggle(\"full\",n),i.toggle(\"input-active\",e.isFocused&&!e.isInputHidden),i.toggle(\"dropdown-active\",e.isOpen),i.toggle(\"has-options\",ws(e.options)),i.toggle(\"has-items\",e.items.length>0)}refreshValidityState(){var e=this;e.input.validity&&(e.isValid=e.input.validity.valid,e.isInvalid=!e.isValid)}isFull(){return this.settings.maxItems!==null&&this.items.length>=this.settings.maxItems}updateOriginalInput(e={}){const n=this;var s,i;const r=n.input.querySelector('option[value=\"\"]');if(n.is_select_tag){let d=function(c,u,m){return c||(c=ie('<option value=\"'+Ke(u)+'\">'+Ke(m)+\"</option>\")),c!=r&&n.input.append(c),o.push(c),(c!=r||a>0)&&(c.selected=!0),c};const o=[],a=n.input.querySelectorAll(\"option:checked\").length;n.input.querySelectorAll(\"option:checked\").forEach(c=>{c.selected=!1}),n.items.length==0&&n.settings.mode==\"single\"?d(r,\"\",\"\"):n.items.forEach(c=>{if(s=n.options[c],i=s[n.settings.labelField]||\"\",o.includes(s.$option)){const u=n.input.querySelector(`option[value=\"${Lt(c)}\"]:not(:checked)`);d(u,c,i)}else s.$option=d(s.$option,c,i)})}else n.input.value=n.getValue();n.isSetup&&(e.silent||n.trigger(\"change\",n.getValue()))}open(){var e=this;e.isLocked||e.isOpen||e.settings.mode===\"multi\"&&e.isFull()||(e.isOpen=!0,N(e.focus_node,{\"aria-expanded\":\"true\"}),e.refreshState(),Ae(e.dropdown,{visibility:\"hidden\",display:\"block\"}),e.positionDropdown(),Ae(e.dropdown,{visibility:\"visible\",display:\"block\"}),e.focus(),e.trigger(\"dropdown_open\",e.dropdown))}close(e=!0){var n=this,s=n.isOpen;e&&(n.setTextboxValue(),n.settings.mode===\"single\"&&n.items.length&&n.inputState()),n.isOpen=!1,N(n.focus_node,{\"aria-expanded\":\"false\"}),Ae(n.dropdown,{display:\"none\"}),n.settings.hideSelected&&n.clearActiveOption(),n.refreshState(),s&&n.trigger(\"dropdown_close\",n.dropdown)}positionDropdown(){if(this.settings.dropdownParent===\"body\"){var e=this.control,n=e.getBoundingClientRect(),s=e.offsetHeight+n.top+window.scrollY,i=n.left+window.scrollX;Ae(this.dropdown,{width:n.width+\"px\",top:s+\"px\",left:i+\"px\"})}}clear(e){var n=this;if(n.items.length){var s=n.controlChildren();U(s,i=>{n.removeItem(i,!0)}),n.inputState(),e||n.updateOriginalInput(),n.trigger(\"clear\")}}insertAtCaret(e){const n=this,s=n.caretPos,i=n.control;i.insertBefore(e,i.children[s]||null),n.setCaret(s+1)}deleteSelection(e){var n,s,i,r,o=this;n=e&&e.keyCode===Ct?-1:1,s=_s(o.control_input);const a=[];if(o.activeItems.length)r=St(o.activeItems,n),i=Et(r),n>0&&i++,U(o.activeItems,d=>a.push(d));else if((o.isFocused||o.settings.mode===\"single\")&&o.items.length){const d=o.controlChildren();let c;n<0&&s.start===0&&s.length===0?c=d[o.caretPos-1]:n>0&&s.start===o.inputValue().length&&(c=d[o.caretPos]),c!==void 0&&a.push(c)}if(!o.shouldDelete(a,e))return!1;for(B(e,!0),typeof i<\"u\"&&o.setCaret(i);a.length;)o.removeItem(a.pop());return o.inputState(),o.positionDropdown(),o.refreshOptions(!1),!0}shouldDelete(e,n){const s=e.map(i=>i.dataset.value);return!(!s.length||typeof this.settings.onDelete==\"function\"&&this.settings.onDelete.call(this,s,n)===!1)}advanceSelection(e,n){var s,i,r=this;r.rtl&&(e*=-1),!r.inputValue().length&&(de(Te,n)||de(\"shiftKey\",n)?(s=r.getLastActive(e),s?s.classList.contains(\"active\")?i=r.getAdjacent(s,e,\"item\"):i=s:e>0?i=r.control_input.nextElementSibling:i=r.control_input.previousElementSibling,i&&(i.classList.contains(\"active\")&&r.removeActiveItem(s),r.setActiveItemClass(i))):r.moveCaret(e))}moveCaret(e){}getLastActive(e){let n=this.control.querySelector(\".last-active\");if(n)return n;var s=this.control.querySelectorAll(\".active\");if(s)return St(s,e)}setCaret(e){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll(\"[data-ts-item]\"))}lock(){this.setLocked(!0)}unlock(){this.setLocked(!1)}setLocked(e=this.isReadOnly||this.isDisabled){this.isLocked=e,this.refreshState()}disable(){this.setDisabled(!0),this.close()}enable(){this.setDisabled(!1)}setDisabled(e){this.focus_node.tabIndex=e?-1:this.tabIndex,this.isDisabled=e,this.input.disabled=e,this.control_input.disabled=e,this.setLocked()}setReadOnly(e){this.isReadOnly=e,this.input.readOnly=e,this.control_input.readOnly=e,this.setLocked()}destroy(){var e=this,n=e.revertSettings;e.trigger(\"destroy\"),e.off(),e.wrapper.remove(),e.dropdown.remove(),e.input.innerHTML=n.innerHTML,e.input.tabIndex=n.tabIndex,le(e.input,\"tomselected\",\"ts-hidden-accessible\"),e._destroy(),delete e.input.tomselect}render(e,n){var s,i;const r=this;if(typeof this.settings.render[e]!=\"function\"||(i=r.settings.render[e].call(this,n,Ke),!i))return null;if(i=ie(i),e===\"option\"||e===\"option_create\"?n[r.settings.disabledField]?N(i,{\"aria-disabled\":\"true\"}):N(i,{\"data-selectable\":\"\"}):e===\"optgroup\"&&(s=n.group[r.settings.optgroupValueField],N(i,{\"data-group\":s}),n.group[r.settings.disabledField]&&N(i,{\"data-disabled\":\"\"})),e===\"option\"||e===\"item\"){const o=$e(n[r.settings.valueField]);N(i,{\"data-value\":o}),e===\"item\"?(Y(i,r.settings.itemClass),N(i,{\"data-ts-item\":\"\"})):(Y(i,r.settings.optionClass),N(i,{role:\"option\",id:n.$id}),n.$div=i,r.options[o]=n)}return i}_render(e,n){const s=this.render(e,n);if(s==null)throw\"HTMLElement expected\";return s}clearCache(){U(this.options,e=>{e.$div&&(e.$div.remove(),delete e.$div)})}uncacheValue(e){const n=this.getOption(e);n&&n.remove()}canCreate(e){return this.settings.create&&e.length>0&&this.settings.createFilter.call(this,e)}hook(e,n,s){var i=this,r=i[n];i[n]=function(){var o,a;return e===\"after\"&&(o=r.apply(i,arguments)),a=s.apply(i,arguments),e===\"instead\"?a:(e===\"before\"&&(o=r.apply(i,arguments)),o)}}}const Ms=(t,e,n,s)=>{t.addEventListener(e,n,s)};function Hs(){Ms(this.input,\"change\",()=>{this.sync()})}const Ds=t=>typeof t>\"u\"||t===null?null:Ps(t),Ps=t=>typeof t==\"boolean\"?t?\"1\":\"0\":t+\"\",$t=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},Fs=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Ns(t)){var e=document.createElement(\"template\");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},Ns=t=>typeof t==\"string\"&&t.indexOf(\"<\")>-1;function Bs(t){var e=this,n=e.onOptionSelect;e.settings.hideSelected=!1;const s=Object.assign({className:\"tomselect-checkbox\",checkedClassNames:void 0,uncheckedClassNames:void 0},t);var i=function(a,d){d?(a.checked=!0,s.uncheckedClassNames&&a.classList.remove(...s.uncheckedClassNames),s.checkedClassNames&&a.classList.add(...s.checkedClassNames)):(a.checked=!1,s.checkedClassNames&&a.classList.remove(...s.checkedClassNames),s.uncheckedClassNames&&a.classList.add(...s.uncheckedClassNames))},r=function(a){setTimeout(()=>{var d=a.querySelector(\"input.\"+s.className);d instanceof HTMLInputElement&&i(d,a.classList.contains(\"selected\"))},1)};e.hook(\"after\",\"setupTemplates\",()=>{var o=e.settings.render.option;e.settings.render.option=(a,d)=>{var c=Fs(o.call(e,a,d)),u=document.createElement(\"input\");s.className&&u.classList.add(s.className),u.addEventListener(\"click\",function(h){$t(h)}),u.type=\"checkbox\";const m=Ds(a[e.settings.valueField]);return i(u,!!(m&&e.items.indexOf(m)>-1)),c.prepend(u),c}}),e.on(\"item_remove\",o=>{var a=e.getOption(o);a&&(a.classList.remove(\"selected\"),r(a))}),e.on(\"item_add\",o=>{var a=e.getOption(o);a&&r(a)}),e.hook(\"instead\",\"onOptionSelect\",(o,a)=>{if(a.classList.contains(\"selected\")){a.classList.remove(\"selected\"),e.removeItem(a.dataset.value),e.refreshOptions(),$t(o,!0);return}n.call(e,o,a),r(a)})}const Vs=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(js(t)){var e=document.createElement(\"template\");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},js=t=>typeof t==\"string\"&&t.indexOf(\"<\")>-1;function Rs(t){const e=this,n=Object.assign({className:\"clear-button\",title:\"Clear All\",role:\"button\",tabindex:0,html:s=>`<div class=\"${s.className}\" title=\"${s.title}\" role=\"${s.role}\" tabindex=\"${s.tabindex}\">&times;</div>`},t);e.on(\"initialize\",()=>{var s=Vs(n.html(n));s.addEventListener(\"click\",i=>{e.isLocked||(e.clear(),e.settings.mode===\"single\"&&e.settings.allowEmptyOption&&e.addItem(\"\"),e.refreshOptions(!1),i.preventDefault(),i.stopPropagation())}),e.control.appendChild(s)})}const Us=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},he=(t,e,n,s)=>{t.addEventListener(e,n,s)},Ks=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},zs=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Ws(t)){var e=document.createElement(\"template\");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},Ws=t=>typeof t==\"string\"&&t.indexOf(\"<\")>-1,Gs=(t,e)=>{Ks(e,(n,s)=>{n==null?t.removeAttribute(s):t.setAttribute(s,\"\"+n)})},Ys=(t,e)=>{var n;(n=t.parentNode)==null||n.insertBefore(e,t.nextSibling)},Qs=(t,e)=>{var n;(n=t.parentNode)==null||n.insertBefore(e,t)},Js=(t,e)=>{do{var n;if(e=(n=e)==null?void 0:n.previousElementSibling,t==e)return!0}while(e&&e.previousElementSibling);return!1};function Xs(){var t=this;if(t.settings.mode!==\"multi\")return;var e=t.lock,n=t.unlock;let s=!0,i;t.hook(\"after\",\"setupTemplates\",()=>{var r=t.settings.render.item;t.settings.render.item=(o,a)=>{const d=zs(r.call(t,o,a));Gs(d,{draggable:\"true\"});const c=_=>{s||Us(_),_.stopPropagation()},u=_=>{i=d,setTimeout(()=>{d.classList.add(\"ts-dragging\")},0)},m=_=>{_.preventDefault(),d.classList.add(\"ts-drag-over\"),y(d,i)},h=()=>{d.classList.remove(\"ts-drag-over\")},y=(_,C)=>{C!==void 0&&(Js(C,d)?Ys(_,C):Qs(_,C))},g=()=>{var _;document.querySelectorAll(\".ts-drag-over\").forEach(E=>E.classList.remove(\"ts-drag-over\")),(_=i)==null||_.classList.remove(\"ts-dragging\"),i=void 0;var C=[];t.control.querySelectorAll(\"[data-value]\").forEach(E=>{if(E.dataset.value){let $=E.dataset.value;$&&C.push($)}}),t.setValue(C)};return he(d,\"mousedown\",c),he(d,\"dragstart\",u),he(d,\"dragenter\",m),he(d,\"dragover\",m),he(d,\"dragleave\",h),he(d,\"dragend\",g),d}}),t.hook(\"instead\",\"lock\",()=>(s=!1,e.call(t))),t.hook(\"instead\",\"unlock\",()=>(s=!0,n.call(t)))}const Zs=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},ei=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(ti(t)){var e=document.createElement(\"template\");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},ti=t=>typeof t==\"string\"&&t.indexOf(\"<\")>-1;function ni(t){const e=this,n=Object.assign({title:\"Untitled\",headerClass:\"dropdown-header\",titleRowClass:\"dropdown-header-title\",labelClass:\"dropdown-header-label\",closeClass:\"dropdown-header-close\",html:s=>'<div class=\"'+s.headerClass+'\"><div class=\"'+s.titleRowClass+'\"><span class=\"'+s.labelClass+'\">'+s.title+'</span><a class=\"'+s.closeClass+'\">&times;</a></div></div>'},t);e.on(\"initialize\",()=>{var s=ei(n.html(n)),i=s.querySelector(\".\"+n.closeClass);i&&i.addEventListener(\"click\",r=>{Zs(r,!0),e.close()}),e.dropdown.insertBefore(s,e.dropdown.firstChild)})}const si=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},ii=(t,...e)=>{var n=ri(e);t=oi(t),t.map(s=>{n.map(i=>{s.classList.remove(i)})})},ri=t=>{var e=[];return si(t,n=>{typeof n==\"string\"&&(n=n.trim().split(/[\\t\\n\\f\\r\\s]/)),Array.isArray(n)&&(e=e.concat(n))}),e.filter(Boolean)},oi=t=>(Array.isArray(t)||(t=[t]),t),li=(t,e)=>{if(!t)return-1;e=e||t.nodeName;for(var n=0;t=t.previousElementSibling;)t.matches(e)&&n++;return n};function ai(){var t=this;t.hook(\"instead\",\"setCaret\",e=>{t.settings.mode===\"single\"||!t.control.contains(t.control_input)?e=t.items.length:(e=Math.max(0,Math.min(t.items.length,e)),e!=t.caretPos&&!t.isPending&&t.controlChildren().forEach((n,s)=>{s<e?t.control_input.insertAdjacentElement(\"beforebegin\",n):t.control.appendChild(n)})),t.caretPos=e}),t.hook(\"instead\",\"moveCaret\",e=>{if(!t.isFocused)return;const n=t.getLastActive(e);if(n){const s=li(n);t.setCaret(e>0?s+1:s),t.setActiveItem(),ii(n,\"last-active\")}else t.setCaret(t.caretPos+e)})}const ci=27,di=9,ui=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},fi=(t,e,n,s)=>{t.addEventListener(e,n,s)},pi=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},It=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(mi(t)){var e=document.createElement(\"template\");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},mi=t=>typeof t==\"string\"&&t.indexOf(\"<\")>-1,hi=(t,...e)=>{var n=gi(e);t=vi(t),t.map(s=>{n.map(i=>{s.classList.add(i)})})},gi=t=>{var e=[];return pi(t,n=>{typeof n==\"string\"&&(n=n.trim().split(/[\\t\\n\\f\\r\\s]/)),Array.isArray(n)&&(e=e.concat(n))}),e.filter(Boolean)},vi=t=>(Array.isArray(t)||(t=[t]),t);function yi(){const t=this;t.settings.shouldOpen=!0,t.hook(\"before\",\"setup\",()=>{var e;t.focus_node=t.control,hi(t.control_input,\"dropdown-input\");const n=It('<div class=\"dropdown-input-wrap\">');n.append(t.control_input),t.dropdown.insertBefore(n,t.dropdown.firstChild);const s=It('<input class=\"items-placeholder\" tabindex=\"-1\" />');s.placeholder=t.settings.placeholder||\"\",t.control.append(s);const i=(e=t.input)==null?void 0:e.getAttribute(\"aria-label\");i&&s.setAttribute(\"aria-label\",i)}),t.on(\"initialize\",()=>{t.control_input.addEventListener(\"keydown\",n=>{switch(n.keyCode){case ci:t.isOpen&&(ui(n,!0),t.close()),t.clearActiveItems();return;case di:t.focus_node.tabIndex=-1;break}return t.onKeyDown.call(t,n)}),t.on(\"blur\",()=>{t.focus_node.tabIndex=t.isDisabled?-1:t.tabIndex}),t.on(\"dropdown_open\",()=>{t.control_input.focus()});const e=t.onBlur;t.hook(\"instead\",\"onBlur\",n=>{if(!(n&&n.relatedTarget==t.control_input))return e.call(t)}),fi(t.control_input,\"blur\",()=>t.onBlur()),t.hook(\"before\",\"close\",()=>{t.isOpen&&t.focus_node.focus({preventScroll:!0})})})}const qe=(t,e,n,s)=>{t.addEventListener(e,n,s)};function bi(){var t=this;t.on(\"initialize\",()=>{var e=document.createElement(\"span\"),n=t.control_input;e.style.cssText=\"position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; \",t.wrapper.appendChild(e);var s=[\"letterSpacing\",\"fontSize\",\"fontFamily\",\"fontWeight\",\"textTransform\"];for(const r of s)e.style[r]=n.style[r];var i=()=>{e.textContent=n.value,n.style.width=e.clientWidth+\"px\"};i(),t.on(\"update item_add item_remove\",i),qe(n,\"input\",i),qe(n,\"keyup\",i),qe(n,\"blur\",i),qe(n,\"update\",i)})}function _i(){var t=this,e=t.deleteSelection;this.hook(\"instead\",\"deleteSelection\",n=>t.activeItems.length?e.call(t,n):!1)}function xi(){this.hook(\"instead\",\"setActiveItem\",()=>{}),this.hook(\"instead\",\"selectAll\",()=>{})}const Mt=37,wi=39,ki=(t,e,n)=>{for(;t&&t.matches;){if(t.matches(e))return t;t=t.parentNode}},Li=(t,e)=>{if(!t)return-1;e=e||t.nodeName;for(var n=0;t=t.previousElementSibling;)t.matches(e)&&n++;return n};function Si(){var t=this,e=t.onKeyDown;t.hook(\"instead\",\"onKeyDown\",n=>{var s,i,r,o;if(!t.isOpen||!(n.keyCode===Mt||n.keyCode===wi))return e.call(t,n);t.ignoreHover=!0,o=ki(t.activeOption,\"[data-group]\"),s=Li(t.activeOption,\"[data-selectable]\"),o&&(n.keyCode===Mt?o=o.previousSibling:o=o.nextSibling,o&&(r=o.querySelectorAll(\"[data-selectable]\"),i=r[Math.min(r.length-1,s)],i&&t.setActiveOption(i)))})}const Ei=t=>(t+\"\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\"),Ht=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},Dt=(t,e,n,s)=>{t.addEventListener(e,n,s)},Pt=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Ci(t)){var e=document.createElement(\"template\");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},Ci=t=>typeof t==\"string\"&&t.indexOf(\"<\")>-1;function Ai(t){const e=Object.assign({label:\"&times;\",title:\"Remove\",className:\"remove\",append:!0},t);var n=this;if(e.append){var s='<a href=\"javascript:void(0)\" class=\"'+e.className+'\" tabindex=\"-1\" title=\"'+Ei(e.title)+'\">'+e.label+\"</a>\";n.hook(\"after\",\"setupTemplates\",()=>{var i=n.settings.render.item;n.settings.render.item=(r,o)=>{var a=Pt(i.call(n,r,o)),d=Pt(s);return a.appendChild(d),Dt(d,\"mousedown\",c=>{Ht(c,!0)}),Dt(d,\"click\",c=>{n.isLocked||(Ht(c,!0),!n.isLocked&&n.shouldDelete([a],c)&&(n.removeItem(a),n.refreshOptions(!1),n.inputState()))}),a}})}}function Ti(t){const e=this,n=Object.assign({text:s=>s[e.settings.labelField]},t);e.on(\"item_remove\",function(s){if(e.isFocused&&e.control_input.value.trim()===\"\"){var i=e.options[s];i&&e.setTextboxValue(n.text.call(e,i))}})}const qi=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},Oi=(t,...e)=>{var n=$i(e);t=Ii(t),t.map(s=>{n.map(i=>{s.classList.add(i)})})},$i=t=>{var e=[];return qi(t,n=>{typeof n==\"string\"&&(n=n.trim().split(/[\\t\\n\\f\\r\\s]/)),Array.isArray(n)&&(e=e.concat(n))}),e.filter(Boolean)},Ii=t=>(Array.isArray(t)||(t=[t]),t);function Mi(){const t=this,e=t.canLoad,n=t.clearActiveOption,s=t.loadCallback;var i={},r,o=!1,a,d=[];if(t.settings.shouldLoadMore||(t.settings.shouldLoadMore=()=>{if(r.clientHeight/(r.scrollHeight-r.scrollTop)>.9)return!0;if(t.activeOption){var h=t.selectable(),y=Array.from(h).indexOf(t.activeOption);if(y>=h.length-2)return!0}return!1}),!t.settings.firstUrl)throw\"virtual_scroll plugin requires a firstUrl() method\";t.settings.sortField=[{field:\"$order\"},{field:\"$score\"}];const c=m=>typeof t.settings.maxOptions==\"number\"&&r.children.length>=t.settings.maxOptions?!1:!!(m in i&&i[m]),u=(m,h)=>t.items.indexOf(h)>=0||d.indexOf(h)>=0;t.setNextUrl=(m,h)=>{i[m]=h},t.getUrl=m=>{if(m in i){const h=i[m];return i[m]=!1,h}return t.clearPagination(),t.settings.firstUrl.call(t,m)},t.clearPagination=()=>{i={}},t.hook(\"instead\",\"clearActiveOption\",()=>{if(!o)return n.call(t)}),t.hook(\"instead\",\"canLoad\",m=>m in i?c(m):e.call(t,m)),t.hook(\"instead\",\"loadCallback\",(m,h)=>{if(!o)t.clearOptions(u);else if(a){const y=m[0];y!==void 0&&(a.dataset.value=y[t.settings.valueField])}s.call(t,m,h),o=!1}),t.hook(\"after\",\"refreshOptions\",()=>{const m=t.lastValue;var h;c(m)?(h=t.render(\"loading_more\",{query:m}),h&&(h.setAttribute(\"data-selectable\",\"\"),a=h)):m in i&&!r.querySelector(\".no-results\")&&(h=t.render(\"no_more_results\",{query:m})),h&&(Oi(h,t.settings.optionClass),r.append(h))}),t.on(\"initialize\",()=>{d=Object.keys(t.options),r=t.dropdown_content,t.settings.render=Object.assign({},{loading_more:()=>'<div class=\"loading-more-results\">Loading more results ... </div>',no_more_results:()=>'<div class=\"no-more-results\">No more results</div>'},t.settings.render),r.addEventListener(\"scroll\",()=>{t.settings.shouldLoadMore.call(t)&&c(t.lastValue)&&(o||(o=!0,t.load.call(t,t.lastValue)))})})}V.define(\"change_listener\",Hs);V.define(\"checkbox_options\",Bs);V.define(\"clear_button\",Rs);V.define(\"drag_drop\",Xs);V.define(\"dropdown_header\",ni);V.define(\"caret_position\",ai);V.define(\"dropdown_input\",yi);V.define(\"input_autogrow\",bi);V.define(\"no_backspace_delete\",_i);V.define(\"no_active_items\",xi);V.define(\"optgroup_columns\",Si);V.define(\"remove_button\",Ai);V.define(\"restore_on_backspace\",Ti);V.define(\"virtual_scroll\",Mi);window.initTags=function(){document.querySelectorAll(\"select.form-tags\")?.forEach(function(t){if(t.tomselect)return;const e=t.dataset.allowNew===\"true\",n=[\"dropdown_input\",\"remove_button\"];t.dataset.allowClear===\"true\"&&n.push(\"clear_button\"),new V(t,{plugins:n,allowEmptyOption:!0,preload:\"focus\",loadThrottle:500,valueField:\"id\",labelField:\"text\",searchField:\"text\",placeholder:t.dataset.placeholder||\"\",create:e?function(s,i){const r=s.trim();r&&i({id:r,text:r,newTag:!0})}:!1,load:function(s,i){fetch(t.dataset.url+(t.dataset.url.includes(\"?\")?\"&\":\"?\")+\"q=\"+encodeURIComponent(s.trim()),{headers:{\"X-Requested-With\":\"XMLHttpRequest\"}}).then(r=>r.json()).then(r=>i(r)).catch(()=>i())},render:{option:function(s,i){return s.colour?'<div class=\"flex gap-2 items-center text-left\"><span class=\"rounded-full flex-none w-6 h-6\" style=\"'+(s.colour_style||\"background-color: \"+i(s.colour)+\"; color: #fff;\")+'\"></span><span class=\"grow\">'+i(s.text)+\"</span></div>\":'<div class=\"block grow text-left\">'+i(s.text)+\"</div>\"},item:function(s,i){const r=document.createElement(\"div\");return s.newTag?(r.title=t.dataset.newTag||\"\",r.innerHTML=i(s.text)+' <i class=\"fa-solid fa-flag\" aria-hidden=\"true\"></i>'):r.innerHTML=i(s.text),s.colour_style?r.setAttribute(\"style\",s.colour_style):s.colour&&(r.style.backgroundColor=s.colour,r.style.color=\"#fff\"),r.classList.add(\"text-left\"),r}}})}),document.querySelectorAll(\"select.position-dropdown\")?.forEach(function(t){t.tomselect||new V(t,{plugins:[\"remove_button\",\"clear_button\"],placeholder:t.dataset.placeholder||\"\",allowEmptyOption:!0,dropdownParent:t.dataset.dropdownParent||null,create:function(e,n){const s=e.trim();s&&n({value:s,text:s})}})})};window.initTags();const Ye={},be={},Hi=(t,e)=>{const n=t+(t.includes(\"?\")?\"&\":\"?\")+\"q=\"+e;if(Ye[n]!==void 0)return Promise.resolve(Ye[n]);if(be[n])return be[n];const s=fetch(n,{headers:{\"X-Requested-With\":\"XMLHttpRequest\"}}).then(i=>i.ok?i.json():(i.status===503&&i.json().then(r=>window.showToast(r.message,\"error\")),[])).then(i=>(Ye[n]=i,delete be[n],i)).catch(()=>(delete be[n],[]));return be[n]=s,s};window.initForeignSelect=function(){document.querySelectorAll(\"select.select2\").forEach(t=>{if(t.tomselect)return;if(t.classList.contains(\"campaign-genres\")){new V(t,{maxItems:3,plugins:[\"remove_button\"]});return}const e=t.dataset.url,n=t.dataset.allowClear===\"true\",s=t.dataset.placeholder||\"\",i=t.dataset.allowNew===\"true\";t.dataset.dropdownParent;const r=[\"dropdown_input\"];t.multiple&&r.push(\"remove_button\"),n&&r.push(\"clear_button\");const o={plugins:r,placeholder:s,allowEmptyOption:!0,valueField:\"id\",labelField:\"text\",searchField:\"text\"};if(!e){new V(t,{...o});return}new V(t,{...o,preload:\"focus\",loadThrottle:500,create:i?function(a,d){const c=a.trim();c&&d({id:\"new:\"+c,text:c+\" (\"+(t.dataset.newTag||\"\")+\")\"})}:!1,load:function(a,d){Hi(e,a.trim()).then(c=>d(c)).catch(()=>d())},render:{option:function(a,d){return a.image?'<div class=\"flex gap-2 items-center text-left\"><img src=\"'+d(a.image)+'\" class=\"rounded-full flex-none w-6 h-6\"/><span class=\"grow\">'+d(a.text)+\"</span></div>\":\"<div>\"+d(a.text)+\"</div>\"},item:function(a,d){return\"<div>\"+d(a.text)+\"</div>\"}}})}),Di(),Pi()};const Di=()=>{document.querySelectorAll(\"select.select2-local\").forEach(t=>{t.tomselect||new V(t,{placeholder:t.dataset.placeholder||\"\",allowEmptyOption:!0,plugins:[\"clear_button\"]})})},Pi=()=>{document.querySelectorAll(\"select.select2-colour\").forEach(t=>{t.tomselect||new V(t,{placeholder:t.dataset.placeholder||\"\",allowEmptyOption:!0,render:{option:function(e,n){return e.value===\"none\"||!e.value?\"<div>\"+n(e.text)+\"</div>\":'<div class=\"flex items-center gap-2\"><span class=\"badge label bg-'+n(e.value)+' inline-block w-4 h-4 rounded-sm mr-1\"> </span>'+n(e.text)+\"</div>\"},item:function(e,n){return e.value===\"none\"||!e.value?\"<div>\"+n(e.text)+\"</div>\":'<div class=\"flex items-center gap-2\"><span class=\"badge label bg-'+n(e.value)+' inline-block w-4 h-4 rounded-sm mr-1\"> </span>'+n(e.text)+\"</div>\"}}})})},Fi=t=>{const e=t.toLowerCase().split(\"+\").map(n=>n.trim());return{ctrl:e.includes(\"ctrl\")||e.includes(\"cmd\")||e.includes(\"meta\"),alt:e.includes(\"alt\"),shift:e.includes(\"shift\"),key:e.filter(n=>![\"ctrl\",\"cmd\",\"meta\",\"alt\",\"shift\"].includes(n))[0]||null}},Ni=(t,e)=>{if(!e.key)return!1;const n=e.ctrl===(t.ctrlKey||t.metaKey),s=e.alt===t.altKey,i=e.shift===t.shiftKey,r=t.key.toLowerCase()===e.key;return n&&s&&i&&r},an=()=>{document.addEventListener(\"keydown\",function(t){const e=t.target,n=document.getElementById(\"primary-dialog\");if(t.key===\"Escape\"){n?.classList.contains(\"qq-modal-selection\")&&window.closeDialog(n);return}const s=document.querySelectorAll(\"[data-shortcut]\");for(const i of s){if(i.tagName.toLowerCase()===\"form\")continue;const r=Fi(i.dataset.shortcut);if(Ni(t,r)){if(!r.ctrl&&!r.alt&&!r.shift&&(Bi(e)||n?.open))return;t.preventDefault(),i.dataset.shortcutAction===\"focus\"?i.focus():(i.click(),i.blur());return}}})},Bi=t=>!t||t.length===0?!1:[\"input\",\"textarea\",\"select\"].includes(t.tagName.toLowerCase())||t.getAttribute(\"contentEditable\")===\"true\"?!0:!!t.classList.contains(\"CodeMirror\"),cn=()=>{document.querySelectorAll(\"form[data-shortcut]\").forEach(function(e){Vi(e)})},Vi=t=>{t.dataset.shortcutInit||(t.dataset.shortcutInit=1,document.addEventListener(\"keydown\",function(e){if((e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===\"s\")return e.preventDefault(),t.dataset.unload&&(window.entityFormHasUnsavedChanges=!1),e.shiftKey?Qe(\"submit-update\"):e.altKey&&Qe(\"submit-new\"),t.requestSubmit(),!1;if((e.ctrlKey||e.metaKey)&&e.altKey&&e.key===\"c\")return t.dataset.unload&&(window.entityFormHasUnsavedChanges=!1),Qe(\"submit-copy\"),t.submit(),!1}))},Qe=t=>{const e=document.getElementById(\"form-submit-main\");e&&(e.name=t,document.getElementById(\"submit-mode\").name=t)},dn=()=>{document.querySelectorAll('input[data-paste=\"fontawesome\"]').forEach(function(e){e.addEventListener(\"paste\",function(n){n.preventDefault();const s=(n.clipboardData||window.clipboardData).getData(\"text\");if(s.startsWith('<i class=\"fa')||s.startsWith('<i class=\"ra')){const i=document.createElement(\"div\");i.innerHTML=s;let o=i.querySelector(\"i\").getAttribute(\"class\");if(o){e.value=o;return}}e.value=s})})};cn();an();dn();window.onEvent(function(){dn(),an(),cn()});function ji(){window.onEvent(function(){un()})}function Ri(){const t=document.querySelector('#form-entry input[name=\"name\"]');if(!t||t.dataset.liveDisabled)return;let e=\"\";t.addEventListener(\"focusout\",function(n){if(!t.value||t.value===e)return;e=t.value;const s=this.dataset.duplicate,i=document.querySelector(s);if(!i)return;const r=this.dataset.live+\"?q=\"+encodeURIComponent(this.value)+\"&exclude=\"+this.dataset.id;i.classList.add(\"hidden\");const o=i.querySelector(\".duplicates\");fetch(r).then(a=>a.json()).then(a=>{o.innerHTML=\"\",a.forEach(d=>{const c=document.createElement(\"a\");c.href=d.url,c.text=d.name,o.appendChild(c)}),a.length>0&&i.classList.remove(\"hidden\")})})}const un=()=>{const t=document.querySelectorAll(\".form-submit-actions\");if(t.length===0)return;let e=document.getElementById(\"form-submit-main\"),n=document.getElementById(\"submit-mode\");if(n===void 0)throw new Error(\"No submit mode hidden input found\");t.forEach(s=>{s.addEventListener(\"click\",function(i){return i.preventDefault(),n.name=s.dataset.action,e.click(),!1})})};function Ui(){if(document.querySelectorAll('form[data-unload=\"1\"]').length===0)return;const e=document.querySelector(\"#form-submit-main\");document.querySelectorAll('form[data-unload=\"1\"] input, form[data-unload=\"1\"] select, form[data-unload=\"1\"] textarea').forEach(s=>{s.dataset.skipUnsaved||s.classList.contains(\"form-control\")||s.addEventListener(\"change\",function(){window.entityFormHasUnsavedChanges=!0})}),e&&window.addEventListener(\"beforeunload\",function(s){window.entityFormHasUnsavedChanges&&(s.preventDefault(),s.returnValue=\"Unsaved data warning\")})}const Ki=()=>{document.querySelectorAll(\".dynamic-row-add\").forEach(e=>{e.addEventListener(\"click\",function(n){n.preventDefault();const s=e.dataset.target,i=e.dataset.template,r=document.createElement(\"div\");return r.innerHTML=document.querySelector(\"#\"+i).innerHTML,document.querySelector(\".\"+s).append(r),Ft(),window.triggerEvent(),!1})}),Ft()},Ft=()=>{document.querySelectorAll(\".dynamic-row-delete\").forEach(e=>{e.dataset.init!==1&&(e.dataset.init=1,e.addEventListener(\"click\",function(n){n.preventDefault(),e.closest(\".parent-delete-row\").remove()}),e.addEventListener(\"keydown\",function(n){n.key===\"Enter\"&&e.click()}))})};Ki();un();Ui();ji();Ri();const fn=()=>{document.querySelector(\".btn-post-collapse\")?.addEventListener(\"click\",function(n){n.preventDefault(),document.querySelectorAll(\".element-toggle\").forEach(i=>{i.classList.add(\"animate-collapsed\"),document.querySelector(i.dataset.target).classList.add(\"hidden\")})}),document.querySelector(\".btn-post-expand\")?.addEventListener(\"click\",function(n){n.preventDefault(),document.querySelectorAll(\".element-toggle\").forEach(i=>{i.classList.remove(\"animate-collapsed\"),document.querySelector(i.dataset.target).classList.remove(\"hidden\")})})},pn=()=>{const t=document.querySelector(\".story-load-more\");t?.addEventListener(\"click\",function(e){return e.preventDefault(),this.classList.add(\"loading\"),axios.get(this.dataset.url).then(n=>{t.parentNode.remove(),console.log(n),document.querySelector(\".entity-posts\").insertAdjacentHTML(\"beforeend\",n.data),pn(),fn(),window.triggerEvent()}).catch(()=>{t.classList.remove(\"loading\")}),!1})},zi=()=>{const t=document.querySelector(\".domain-trust\");t&&t.addEventListener(\"click\",function(e){const n=\"kanka_trusted_domains\";let s=document.cookie.match(\"(^|;) ?\"+n+\"=([^;]*)(;|$)\");s=s?s[2]:\"\";const i=t.dataset.domain;s.includes(i)||(s&&(s+=\"|\"),s+=i);let r=new Date;r.setTime(r.getTime()+720*60*60*1e3),document.cookie=n+\"=\"+s+\";path=/;expires=\"+r.toUTCString()+\";sameSite=Strict\"})},Wi=()=>{let t=window.location.hash.substring(1);if(!t)return;let e=document.getElementById(t);if(e)return;let n=document.getElementById(\"post-anchor-loader\");if(!n)return;let s=t.match(/\\d+$/),i=n.dataset.url.replace(\"/0\",\"/\"+s);axios.get(i).then(r=>{n.insertAdjacentHTML(\"afterbegin\",r.data),e=document.getElementById(t),window.scrollTo({top:e.offsetTop,behavior:\"smooth\"})})};fn();pn();zi();Wi();const mn=document.querySelectorAll(\".post-perm-add\"),Gi=()=>{window.onEvent(function(){Qi()}),mn.length!==0&&(Yi(),hn())},Yi=()=>{mn.forEach(t=>{t.addEventListener(\"click\",function(e){e.preventDefault();let n=this.dataset.type,s=document.querySelector('select[name=\"'+n+'\"]');if(!s||!s.selectedOptions)return!1;let i=document.getElementById(this.dataset.template);for(const o of s.selectedOptions){const a=i.cloneNode(!0);a.classList.remove(\"hidden\"),a.removeAttribute(\"id\"),a.innerHTML=a.innerHTML.replace(/\\$SELECTEDID\\$/g,o.value).replace(/\\$SELECTEDNAME\\$/g,o.text),document.getElementById(\"post-perm-target\").insertAdjacentElement(\"beforebegin\",a)}document.getElementById(this.dataset.dialog).close(),hn();for(const o of s.options)o.selected=!1;return s.value=null,s.dispatchEvent(new Event(\"change\")),!1})})},hn=()=>{document.querySelectorAll(\".post-delete-perm\").forEach(e=>{e.closest(\".hidden\")||e.dataset.init!==\"1\"&&(e.dataset.init=\"1\",e.addEventListener(\"click\",function(n){console.log(\"clicking\",e,e.closest(\".perm-row\")),e.closest(\".perm-row\").remove(),n.preventDefault()}))})},Qi=()=>{const t=document.querySelector(\"form.post-visibility\");t&&(t.onsubmit=function(e){return e.preventDefault(),axios.post(this.getAttribute(\"action\"),{visibility_id:this.querySelector('[name=\"visibility_id\"]').value}).then(n=>{document.getElementById(\"primary-dialog\").close(),document.getElementById(\"visibility-icon-\"+n.data.post_id).firstElementChild.className=n.data.icon.class,window.showToast(n.data.toast)}),!1})};Gi();const Ji=()=>{if(!document.querySelector(\"#calendar-year-switcher\"))return;document.querySelectorAll(\".calendar-event-block\").forEach(e=>{e.dataset.toggle!==\"dialog\"&&e.dataset.url&&e.addEventListener(\"click\",function(){window.location=e.dataset.url})}),document.querySelectorAll(\"[data-dbclick]\").forEach(function(e){e.addEventListener(\"dblclick\",function(){window.openDialog(\"primary-dialog\",e.dataset.url)})})},gn=()=>{const t=document.querySelector('select[name=\"recurring_periodicity\"]');if(!t)return;const e=()=>{const n=document.querySelector(\".field-recurring-until\");n&&(t.value?n.classList.remove(\"hidden\"):n.classList.add(\"hidden\"))};t.addEventListener(\"change\",e),e()},Xi=()=>{(document.querySelector('[data-calendar-nav=\"previous\"]')||document.querySelector('[data-calendar-nav=\"next\"]'))&&document.addEventListener(\"keydown\",function(e){if(e.ctrlKey||e.metaKey){if(e.key===\"ArrowLeft\"){const n=document.querySelector('[data-calendar-nav=\"previous\"]');n&&(n.classList.add(\"loading\"),n.click())}else if(e.key===\"ArrowRight\"){const n=document.querySelector('[data-calendar-nav=\"next\"]');n&&(n.classList.add(\"loading\"),n.click())}}})};Ji();Xi();gn();window.onEvent(function(){gn()});let xe,G,Je,ce,ae,Z,Nt,De,pe;window.onEvent(function(){er()});const Zi=()=>{xe=document.querySelector(\"#entity-calendar-form-add\"),G=document.querySelector('select[name=\"calendar_id\"]'),Je=document.querySelector('[name=\"calendar_id\"]'),document.querySelector(\".entity-calendar-modal-form\"),pe=document.querySelector(\".entity-calendar-subform\"),Nt=document.querySelector(\"#entity-calendar-form-cancel\"),document.querySelector(\".entity-calendar-form\"),ae=document.querySelector('input[name=\"calendar_year\"]'),ce=document.querySelector('[name=\"calendar_month\"]'),Z=document.querySelector(\"#reminder_day\"),De=document.querySelector(\".entity-calendar-loading\"),xe&&(xe.addEventListener(\"click\",function(t){t.preventDefault();let e=xe.dataset.defaultCalendar;return e&&(Je.value=e,pe.classList.remove(\"hidden\"),Pe(e)),!1}),Nt.addEventListener(\"click\",function(t){t.preventDefault(),G&&(G.value=null),Je.value=null})),G&&(G.onchange=t=>{if(console.log(\"hello mlord\"),!G.value)return pe.classList.add(\"hidden\"),!1;pe.classList.remove(\"hidden\"),ae=document.querySelector('input[name=\"calendar_year\"]'),ce=document.querySelector('[name=\"calendar_month\"]'),Z=document.querySelector(\"#reminder_day\"),!ae&&document.querySelector('input[name=\"year\"]')&&(ae=document.querySelector('input[name=\"year\"]'),ce=document.querySelector('select[name=\"month\"]'),Z=document.querySelector(\"#reminder_day\")),Pe(G.value)}),vn()},er=()=>{if(!document.getElementById(\"entity-calendar-modal-add\"))return;xe=document.querySelector(\"input[name=calendar-data-url]\"),G=document.querySelector('[name=\"calendar_id\"]'),ae=document.querySelector('input[name=\"year\"]'),ce=document.querySelector('select[name=\"month\"]'),Z=document.querySelector(\"#reminder_day\"),De=document.querySelector(\".entity-calendar-loading\"),pe=document.querySelector(\".entity-calendar-subform\"),G&&(G.onchange=e=>{if(!G.value){pe.classList.add(\"hidden\");return}Pe(G.value),pe.classList.remove(\"hidden\")},G?.value&&Pe(G.value));const t=document.querySelector('.entity-calendar-subform input[name=\"length\"]');t&&t.addEventListener(\"focusout\",function(){if(!this.value)return;const e=this.dataset.url.replace(\"/0/\",\"/\"+G.value+\"/\"),n={day:Z.value,month:ce.value,year:ae.value,length:this.value};axios.get(e,{data:n}).then(s=>{const i=document.querySelector(\".length-warning\");s.data.overflow==!0?i.classList.remove(\"hidden\"):i.classList.add(\"hidden\")})}),vn()},Pe=t=>{De.classList.remove(\"hidden\"),t=parseInt(t);const e=document.querySelector('input[name=\"calendar-data-url\"]').dataset.url.replace(\"/0/\",\"/\"+t+\"/\");fetch(e).then(n=>n.json()).then(n=>{let s=Z.value;ae.innerHTML=\"\",ce.innerHTML=\"\",Z.innerHTML=\"\";let i=1,r=1;s||(s=n.current.day);let o=parseInt(n.current.month);Object.entries(n.months).forEach((u,m)=>{const h=document.createElement(\"option\");h.text=u[1].name,h.value=m+1,u[0]===o&&(h.selected=!0),h.dataset.length=u[1].length,ce.appendChild(h),i===o&&(r=u[1].length),i++});for(let u=1;u<=r;u++){const m=document.createElement(\"option\");m.text=u,m.value=u,u==s&&(m.selected=!0),Z.appendChild(m)}De.classList.add(\"hidden\"),ae.value=n.current.year;const d=document.querySelector(\"select.reminder-periodicity\");for(;d.options.length>0;)d.options.remove(0);Object.entries(n.recurring).forEach((u,m)=>{const h=document.createElement(\"option\");h.value=u[0],h.text=u[1],d.appendChild(h)}),document.querySelector(\"#reminder_length\").value=1,n.length===1&&(ce.value=n[0].id)})},vn=()=>{const t=document.querySelector(\"#reminder_month\");t&&t.addEventListener(\"change\",function(e){const s=t.options[t.selectedIndex].dataset.length;tr(s)})},tr=t=>{let e=parseInt(Z.value);t=parseInt(t),e>t&&(e=t),Z.innerHTML=\"\";for(let n=1;n<=t;n++){const s=document.createElement(\"option\");s.text=n,s.value=n,n===e&&(s.selected=!0),Z.appendChild(s)}};Zi();const yn=document.querySelector(\"dialog#edit-warning\"),nt=300*1e3;let nr=document.querySelector('input[name=\"edit-warning\"]'),bn,st=!0;const sr=()=>{yn&&(window.openDialog(\"edit-warning\",nr.dataset.url),window.onEvent(function(){ir()}),rr())};function ir(){st=!1;const t=document.getElementById(\"entity-edit-warning-ignore\");t.addEventListener(\"click\",function(e){e.preventDefault(),st=!0,axios.post(t.dataset.url).then(()=>{yn.close()})})}const rr=()=>{const t=document.getElementById(\"editing-keep-alive\");t&&(bn=t.dataset.url,setTimeout(it,nt))},it=()=>{if(!st){setTimeout(it,nt);return}axios.post(bn).then(()=>{setTimeout(it,nt)})};window.onReady(()=>{sr()});let _e;const at=()=>{document.querySelector(\"#qq-modal-loading\"),document.querySelector(\"#qq-modal-selection\"),document.querySelector(\"#qq-modal-form\"),document.querySelectorAll('[data-toggle=\"entity-creator\"]').forEach(t=>{t.addEventListener(\"click\",or)})},or=t=>{t.preventDefault();const e=t.currentTarget;return e.dataset.type===\"inline\"?(document.querySelector(\".quick-creator-body\").classList.add(\"hidden\"),document.querySelector(\".quick-creator-footer\")?.classList.add(\"hidden\"),document.querySelector(\".quick-creator-loading\").classList.remove(\"hidden!\")):lr(),axios.get(e.dataset.url).then(s=>{document.querySelector(\"#primary-dialog\").innerHTML=s.data,ct(),dt(),window.triggerEvent()}),!1},_n=()=>{const t=document.querySelector(\"#qq-name-field\");!t||t.dataset.init===\"1\"||(t.dataset.init=\"1\",t.addEventListener(\"focusout\",function(){if(!this.value)return;const e=this.parentNode.querySelector(\".duplicate-entity-warning\");if(!e)return;e.classList.add(\"hidden\");const n=this.dataset.live+\"?q=\"+this.value+\"&type=\"+this.dataset.type;axios.get(n).then(s=>{if(s.data.length===0){e.classList.add(\"hidden\");return}const i=Object.keys(s.data).map(function(r){return'<a href=\"'+s.data[r].url+'\" class=\"text-link\">'+s.data[r].name+\"</a>\"}).join(\", \");t.parentNode.querySelector(\".duplicate-entities\").innerHTML=i,e.classList.remove(\"hidden\")})}))},lr=()=>{document.querySelector(\"#qq-modal-form\")?.classList.add(\"hidden!\"),document.querySelector(\"#qq-modal-selection\")?.classList.add(\"hidden!\"),document.querySelector(\"#qq-modal-loading\")?.classList.remove(\"hidden!\")},ct=()=>{_e=document.querySelectorAll(\".quick-creator-submit\"),_e.length!==0&&(_n(),dt(),_e.forEach(t=>{t.addEventListener(\"click\",function(e){let n=this.value;return n&&(document.querySelector('#entity-creator-form [name=\"action\"]').value=n),!0})}),document.getElementById(\"entity-creator-form\").onsubmit=function(t){const e=t.target;t.preventDefault(),_e.forEach(i=>i.classList.add(\"btn-disabled\",\"loading\")),document.querySelectorAll(\"div.text-error-content\").forEach(i=>i.remove());const s=new FormData(e);axios.post(e.getAttribute(\"action\"),s).then(i=>{if(typeof i.data==\"object\"){if(i.data.redirect){window.location.replace(i.data.redirect);return}let o=new Option(i.data._name,i.data._id,!0,!0),a=document.querySelector(\"#\"+i.data._target);a.appendChild(o),a.dispatchEvent(new Event(\"change\"));const d=document.querySelector(\"#qq-modal-form\");d&&(d.innerHTML=\"\",d.classList.remove(\"hidden!\")),document.querySelector(\"#qq-modal-loading\")?.classList.add(\"hidden!\"),document.querySelector(\"#qq-modal-selection\")?.classList.remove(\"hidden!\"),document.getElementById(\"primary-dialog\").close(),Bt();return}let r=document.getElementById(\"primary-dialog\");r.innerHTML=i.data,window.triggerEvent(),Alpine.initTree(r),at(),Bt()}).catch(i=>{i.response&&window.formErrorHandler(i.response,e),_e.forEach(r=>r.classList.remove(\"btn-disabled\",\"loading\")),document.querySelector('#entity-creator-form [name=\"action\"]').value=\"\"})})},dt=()=>{at()},Bt=()=>{dt(),_n(),ct()};window.onEvent(function(){at(),ct()});const xn=()=>{document.querySelectorAll(\"[data-bulk-action]\")?.forEach(n=>{n.addEventListener(\"click\",s=>{s.preventDefault(),cr(n.dataset.bulkAction)})}),document.querySelectorAll(\".bulk-print\")?.forEach(n=>{n.addEventListener(\"click\",s=>{s.preventDefault(),n.closest(\"form\").requestSubmit()})})},wn=()=>{ar(),document.querySelectorAll(\"input[name='model[]']\")?.forEach(e=>{e.dataset.initiated!==\"1\"&&(e.dataset.initiated=\"1\",e.addEventListener(\"change\",n=>{console.log(\"change\"),n.preventDefault(),ut()}))})},ar=()=>{const t=document.querySelector(\"#datagrid-select-all\");t&&t.dataset.loaded!==\"1\"&&(t.dataset.loaded=\"1\",t.addEventListener(\"click\",function(e){const n=document.querySelectorAll(\"input[name='model[]']\");t.checked?n?.forEach(s=>{s.checked=!0}):n?.forEach(s=>{s.checked=!1}),ut()}))},cr=t=>{let e=[];document.querySelectorAll(\"input[name='model[]']\")?.forEach(s=>{s.checked&&e.push(s.value)}),t===\"ajax\"?window.onEvent(function(){document.querySelector('#primary-dialog input[name=\"models\"]').value=e.toString()}):document.querySelector(\"#datagrid-bulk-\"+t+\"-models\").value=e.toString()},ut=()=>{let t=!0;document.querySelectorAll(\"input[name='model[]']\")?.forEach(s=>{s.checked&&(t=!1)}),document.querySelectorAll(\".datagrid-bulk-actions .btn2\")?.forEach(s=>{t?(s.disabled=!0,s.classList.add(\"btn-disabled\")):(s.disabled=!1,s.classList.remove(\"btn-disabled\",\"disabled\"))})},dr=()=>{const t=document.querySelector(\".list-treeview\");if(!t)return;let e=t.dataset.url;document.querySelectorAll(\".table-nested > tbody > tr\").forEach(function(s){let i=s.dataset.children;parseInt(i)>0&&(s.classList.add(\"tr-hover\"),s.classList.add(\"cursor-pointer\"),s.addEventListener(\"click\",function(r){const o=r.target;r.target.type!==\"checkbox\"&&o.dataset.tree!==\"escape\"&&(window.location=e+\"?parent_id=\"+s.dataset.id+\"&m=table\")}))})};wn();xn();ut();dr();window.onEvent(function(){xn(),wn()});let ve;const ur=new IntersectionObserver(function(t){t.forEach(e=>{e.isIntersecting===!0&&ft(e.target)})},{threshold:[0]}),kn=()=>{document.querySelectorAll('table[data-render=\"datagrid2\"]')?.forEach(e=>{ft(e)})},ft=t=>{mr(t),t.dataset.initiated!==\"1\"&&(t.dataset.initiated=\"1\",fr(t),t.dataset.url&&rt(t,t))},fr=t=>{t.querySelectorAll(\"thead a\")?.forEach(e=>{e.dataset.loaded!==\"1\"&&(e.dataset.loaded=\"1\",e.addEventListener(\"click\",function(n){n.preventDefault(),rt(e,t)}))}),t.parentNode.querySelectorAll('nav[role=\"navigation\"] a')?.forEach(e=>{e.dataset.loaded!==\"1\"&&(e.dataset.loaded=\"1\",e.addEventListener(\"click\",n=>{n.preventDefault(),rt(e,t)}))})},pr=()=>{const t=document.querySelectorAll('[data-render=\"datagrid2-onload\"]');t.length!==0&&t.forEach(e=>{ur.observe(e)})},rt=(t,e)=>{e.querySelector(\"thead\")?.classList.add(\"hidden\"),e.querySelector(\"tbody\")?.classList.add(\"hidden\"),e.querySelector(\"tfoot\")?.classList.remove(\"hidden\");let n=t.getAttribute(\"href\");t.dataset.url&&(n=t.dataset.url),e.parentNode&&axios.get(n).then(s=>{const i=e.parentNode;if(s.data.html&&(i.innerHTML=s.data.html),s.data.deletes){const o=document.querySelector(\"#datagrid-delete-forms\");o&&(o.innerHTML=s.data.deletes)}s.data.url&&window.history.pushState({},\"\",s.data.url);const r=i.querySelector('[data-render=\"datagrid2\"]');ft(r),window.triggerEvent()}).catch(s=>{})},mr=t=>{const e=t.parentNode;e.querySelectorAll(\".datagrid-bulk\")?.forEach(i=>{jt(t,i)}),e.querySelectorAll(\".datagrid-submit\")?.forEach(i=>{Vt(t,i)}),e.querySelectorAll(\".datagrid-bulk-actions [data-dropdown]\")?.forEach(i=>{i._tippy?.popper&&(i._tippy.popper.querySelectorAll(\".datagrid-bulk\")?.forEach(r=>{jt(t,r)}),i._tippy.popper.querySelectorAll(\".datagrid-submit\")?.forEach(r=>{Vt(t,r)}))}),document.querySelector(\"#datagrid-action-confirm\")?.addEventListener(\"click\",function(){window.closeDialog(\"datagrid-bulk-delete\"),ve.submit()})},Vt=(t,e)=>{e.parentNode.classList.contains(\"hidden\")||e.dataset.loaded!==\"1\"&&(e.dataset.loaded=\"1\",console.log(\"register bulk submit\",e,e.parentNode),e.addEventListener(\"click\",function(n){n.preventDefault(),ve=e.closest(\"form\")||t.closest(\"form\");const s=ve.querySelector('input[name=\"action\"]');if(s.value=e.dataset.action,e.dataset.action===\"delete\")return window.openDialog(\"datagrid-bulk-delete\"),!1;t.parentNode.querySelectorAll(\".datagrid-bulk-actions .btn2\")?.forEach(i=>i.classList.add(\"btn-disabled\")),t.parentNode.querySelector(\".datagrid-bulk-actions .btn2\").classList.add(\"loading\"),ve.submit()}))},jt=(t,e)=>{e.parentNode.classList.contains(\"hidden\")||e.dataset.loaded!==\"1\"&&(e.dataset.loaded=\"1\",e.addEventListener(\"click\",function(n){console.log(\"real click\"),n.preventDefault(),ve=t.closest(\"form\"),axios.post(ve.getAttribute(\"action\")+\"?action=edit\",{model:hr(t)}).then(s=>{const i=document.getElementById(\"primary-dialog\");i.innerHTML=s.data,window.openDialog(\"primary-dialog\"),window.triggerEvent()})}))},hr=t=>{let e=[];return t.querySelectorAll(\"input[name='model[]']\")?.forEach(s=>{s.checked&&e.push(s.value)}),e};pr();kn();window.onEvent(function(){kn()});const Ln=()=>{document.querySelectorAll('[data-animate=\"collapse\"]').forEach(i=>{i.addEventListener(\"click\",vr)}),document.querySelectorAll('[data-animate=\"reveal\"]').forEach(i=>{i.addEventListener(\"change\",yr)}),document.querySelectorAll(\"[data-pulse]\").forEach(i=>{i.addEventListener(\"click\",gr)}),document.querySelectorAll(\"select.permission-control\").forEach(i=>{Sn(i),i.addEventListener(\"change\",br)})},gr=t=>{t.preventDefault();let e=document.querySelector(t.currentTarget.dataset.pulse),n=t.currentTarget.dataset.content;window.showTooltip(e,{content:n,theme:\"kanka\",placement:t.currentTarget.dataset.placement??\"bottom\",allowHTML:!0,arrow:!0,interactive:!0,trigger:\"manual\"})};function vr(t){t.target.type!==\"checkbox\"&&t.target.closest(\"a\")===null&&t.preventDefault();let e=this.dataset.target;e||(e=this.hash),document.querySelectorAll(e).forEach(s=>{s.classList.toggle(\"hidden\")}),this.classList.toggle(\"animate-collapsed\")}function yr(t){let e=document.querySelector(this.dataset.target);this.value?e.classList.remove(\"hidden\"):e.classList.add(\"hidden\")}function br(t){Sn(this)}function Sn(t){t.classList.remove(\"text-red-500\",\"text-green-500\"),t.value===\"deny\"?t.classList.add(\"text-red-500\"):t.value===\"allow\"&&t.classList.add(\"text-green-500\")}window.onEvent(function(){Ln()});Ln();const _r=()=>{const t=document.getElementById(\"bookmark-selector\");if(!t)return!1;t.addEventListener(\"change\",function(e){e.preventDefault();const n=t.options[t.selectedIndex];document.querySelectorAll(\".bookmark-subform\").forEach(r=>{r.classList.add(\"opacity-0\",\"invisible\",\"h-0\")});let i=document.querySelector(n.dataset.target);i&&i.classList.remove(\"opacity-0\",\"invisible\",\"h-0\")})};_r();const xr=()=>{let t=document.getElementById(\"webhook-selector\");if(!t)return!1;t.addEventListener(\"change\",function(e){e.preventDefault();let n=this.options[this.selectedIndex];document.querySelector(\".webhook-subform\").classList.add(\"hidden\"),document.querySelector(n.dataset.target)?.classList.remove(\"hidden\")})};xr();window.onEvent(function(){En()});const En=()=>{document.querySelectorAll(\".form-members\").forEach(t=>{if(t.tomselect)return;const e=[\"remove_button\"];t.dataset.allowClear===\"true\"&&e.push(\"clear_button\"),new V(t,{plugins:e,placeholder:t.dataset.placeholder||\"\",allowEmptyOption:!0,loadThrottle:500,shouldLoad:function(n){return n.length>=2},valueField:\"id\",labelField:\"text\",searchField:\"text\",create:!1,load:function(n,s){if(n.length<2){s();return}fetch(t.dataset.url+\"?q=\"+encodeURIComponent(n.trim()),{headers:{\"X-Requested-With\":\"XMLHttpRequest\"}}).then(i=>i.json()).then(i=>s(i)).catch(()=>s())},render:{item:function(n,s){return\"<div>\"+s(n.text)+\"</div>\"}}})})};En();const wr=()=>{if(!document.getElementById(\"campaign-modules\"))return;document.querySelectorAll('input[name=\"enabled\"]').forEach(function(n){kr(n)})},kr=t=>{t.addEventListener(\"change\",function(e){e.preventDefault(),t.closest(\".toggle\").classList.add(\"hidden!\"),t.closest(\".box-module\").querySelector(\".action-loading\").classList.remove(\"hidden\"),axios.post(t.dataset.url).then(n=>{t.closest(\".toggle\").classList.remove(\"hidden!\"),t.closest(\".box-module\").querySelector(\".action-loading\").classList.add(\"hidden\"),n.data.success&&(n.data.status?t.closest(\".box-module\").classList.add(\"module-enabled\"):t.closest(\".box-module\").classList.remove(\"module-enabled\"),window.showToast(n.data.toast))})})},Lr=()=>{document.querySelectorAll(\".public-permission\").forEach(e=>{e.addEventListener(\"click\",Sr)})},Sr=t=>{t.preventDefault();let e=t.currentTarget;e.querySelector(\".module-icon\").classList.add(\"hidden\"),e.querySelector(\".loading-animation\").classList.remove(\"hidden\"),axios.post(e.dataset.url).then(n=>{e.querySelector(\".module-icon\").classList.remove(\"hidden\"),e.querySelector(\".loading-animation\").classList.add(\"hidden\"),n.data.success&&(n.data.status?e.classList.add(\"enabled\"):e.classList.remove(\"enabled\"),window.showToast(n.data.toast))})},Er=()=>{document.querySelectorAll(\".codemirror\").forEach(function(e){CodeMirror.fromTextArea(document.getElementById(e.id),{extraKeys:{\"Ctrl-Space\":\"autocomplete\"},lineNumbers:!0,lineWrapping:!0,theme:\"dracula\"})})},Cr=()=>{let t=[].slice.call(document.querySelectorAll(\".nested-sortable\"));for(let e=0;e<t.length;e++)new Wt(t[e],{group:\"nested\",handle:\".dnd-handle\",animation:150,fallbackOnBody:!0,swapThreshold:.65,onMove:function(n,s){let i=n.dragged,o=n.related.parentNode.closest(\".fixed-position\")!=null;return!(i.classList.contains(\"fixed-position\")&&o)}})},Ar=()=>{const t=document.querySelector(\"form#campaign-style\");t&&t.addEventListener(\"submit\",function(e){let n=document.querySelector(t.dataset.error);return document.querySelector('textarea[name=\"content\"]').value.length<t.dataset.maxContent?(n.classList.add(\"hidden\"),!0):(n.classList.remove(\"hidden\"),e.preventDefault(),!1)})},Tr=()=>{const t=document.querySelector('input[name=\"vanity\"]');t&&t.addEventListener(\"focusout\",function(e){let n=this.value,s=document.getElementById(\"vanity-error\"),i=document.getElementById(\"vanity-success\"),r=document.getElementById(\"vanity-loading\");if(s.innerHTML=\"\",s.classList.add(\"hidden\"),i.classList.add(\"hidden\"),!n)return;i.classList.remove(\"hidden\");let o={};o.vanity=n,axios.post(this.dataset.url,o).then(a=>{t.value=a.data.vanity,i.querySelector(\"code\").innerHTML=a.data.vanity,s.classList.add(\"hidden\"),r.classList.add(\"hidden\"),i.classList.remove(\"hidden\")}).catch(a=>{let d=\"\";a.response.data.errors.vanity.forEach(c=>d+=c+\" \"),s.innerHTML=d,s.classList.remove(\"hidden\"),i.classList.add(\"hidden\"),r.classList.add(\"hidden\")})})},qr=()=>{document.querySelectorAll(\".permission-toggle\").forEach(e=>{e.addEventListener(\"click\",function(n){n.preventDefault();let s=this.dataset.action,i=document.querySelectorAll('input[data-action=\"'+s+'\"]'),r=this.dataset.checked!==\"1\";this.dataset.checked=r?1:0,i.forEach(o=>{r?o.checked=!0:o.checked=!1})})})};wr();Er();Cr();Lr();Ar();Tr();qr();const Cn=()=>{document.querySelectorAll(\"[data-clipboard]\").forEach(e=>{e.addEventListener(\"click\",Or,!1)})};function Or(t){t.preventDefault(),$r(this.dataset.clipboard,this);let e=this.dataset.toast;return e&&window.showToast(e),!1}async function $r(t,e){if(navigator.clipboard&&window.isSecureContext)await navigator.clipboard.writeText(t);else{const n=document.createElement(\"textarea\");n.value=t,n.style.position=\"absolute\",n.style.left=\"-999999px\",e.append(n),n.select();try{document.execCommand(\"copy\")}catch(s){console.error(s)}finally{n.remove()}}}Cn();window.onEvent(function(){Cn()});const An=()=>{document.querySelectorAll('.toast-container [data-toggle=\"dismiss\"]').forEach(e=>{e.dataset.init!==\"1\"&&(e.dataset.init=\"1\",e.addEventListener(\"click\",function(n){n.preventDefault();let s=e.closest(\".toast-message\");s.classList.remove(\"opacity-100\"),s.classList.add(\"opacity-0\"),setTimeout(function(){s.remove()},150)}))})};window.showToast=function(t,e){e=e||\"bg-success text-success-content\",e===\"error\"&&(e=\"bg-error text-error-content\");const n=document.createElement(\"div\");n.classList.add(\"opacity-100\",\"duration-150\",\"transition-opacity\",\"rounded-lg\",\"px-1\"),e&&e.split(\" \").forEach(i=>{n.classList.add(i)}),n.innerHTML='<div class=\"toast-message p-2 flex gap-2 items-center\"><span class=\"grow\"> '+t+'</span><span class=\"flex-none\"><i class=\"fa-regular fa-circle-xmark cursor-pointer \" data-toggle=\"dismiss\"></i></span></div>',document.querySelector(\".toast-container\").appendChild(n),setTimeout(function(){n.classList.remove(\"opacity-100\"),n.classList.add(\"opacity-0\"),setTimeout(function(){n.remove()},150)},3e3),An()};An();const Ir=()=>{document.querySelectorAll(\".banner-notification-dismiss\").forEach(t=>{t.addEventListener(\"click\",Mr,!1)}),document.querySelectorAll('[data-dismiss=\"tutorial\"]').forEach(t=>{t.addEventListener(\"click\",Hr,!1)})};function Mr(t){t.preventDefault();let e=this.dataset.dismiss;axios.post(this.dataset.url).then(()=>{if(!e)return;let n=document.querySelector(e);n&&n.classList.add(\"hidden\")})}function Hr(t){t.preventDefault();let e=this.dataset.target,n=t.currentTarget;n.classList.add(\"loading\"),n.disabled=!0,n.querySelector(\"i\")?.remove(),axios.post(this.dataset.url).then(()=>{if(!e)return;let s=document.querySelector(e);s&&s.classList.add(\"hidden\")})}Ir();let Tn;const Dr=()=>{const t=document.getElementById(\"element-era-id\");t&&(Tn=t.value,t.addEventListener(\"change\",function(){Pr(t.value)}))},Pr=t=>{t=parseInt(t);let e=document.querySelector('input[name=\"era-data-url\"]').dataset.url.replace(\"/0/\",\"/\"+t+\"/\"),n=document.querySelector('input[name=\"oldPosition\"]').dataset.url;axios.get(e).then(s=>{let i=document.querySelector('select[name=\"position\"]');i.innerHTML=\"\";let r=1;Object.entries(s.data.positions).forEach(function(a,d){const c=document.createElement(\"option\");c.text=a[1],n&&!d&&Tn==t&&(c.value=1,i.appendChild(c)),d&&(c.value=r,i.appendChild(c)),r++})})};Dr();window.initSortable=function(){let t=document.querySelectorAll(\".sortable-elements\");t.length!==0&&t.forEach(e=>{let n={},s=e.dataset.handle;s&&(n.handle=s),Wt.create(e,n)})};window.initSortable();window.formErrorHandler=function(t,e){document.querySelectorAll(\".input-error\").forEach(u=>{u.classList.remove(\"input-error\")});const s=document.querySelector(\".text-error-content\");s&&s.remove();const i=e.querySelector(\".btn-primary\");if(i&&(i.disabled=!1,i.classList.remove(\"loading\")),t.status===503){window.showToast(t.data.message,\"error\");return}if(t.status===403){document.querySelector(\"#entity-form-403-error\").classList.remove(\"hidden\");return}if(!t.data.errors){window.showToast(\"Backend error\",\"error\");return}const r=t.data.errors;let o=[];const a=Object.keys(r);let d=!0;a.forEach(function(u){let m=document.querySelector('[name=\"'+u+'\"]');if(m){m.classList.add(\"input-error\");const h=document.createElement(\"div\");h.classList.add(\"text-error-content\"),h.innerHTML=r[u][0],m.parentNode.append(h)}else d=!1,o.push(r[u][0]);window.showToast(r[u][0],\"error\")});const c=document.querySelector(\"#entity-form-generic-error .error-logs\");!d&&c&&(c.innerHTML=\"\",o.forEach(function(u){c.append(u)}),document.querySelector(\"#entity-form-generic-error\").classList.remove(\"hidden\")),Fr(e,r)};const Fr=(t,e)=>{const n=Object.keys(e)[0],s=t.querySelector('[name=\"'+n+'\"]');if(!s)return;if(!t.querySelector(\".tab-content\")){Rt(s);return}document.querySelector(\".tab-content .active\").classList.remove(\"active\"),document.querySelector(\".nav-tabs li.active\").classList.remove(\"active\");const i=document.querySelector('[name=\"'+n+'\"').closest(\".tab-pane\");i&&(i.classList.add(\"active\"),document.querySelector('a[href=\"#'+i.id+'\"]').closest(\"li\").classList.add(\"active\")),Rt(s)},Rt=t=>{t.focus(),t.scrollIntoView({behavior:\"smooth\"})},Xe=\"recent_colors\",Ut=10;function Nr(){return document.cookie.split(\";\").reduce((t,e)=>{const[n,s]=e.split(\"=\").map(i=>i.trim());return n&&s&&(t[n]=decodeURIComponent(s)),t},{})}function Br(t,e,n=30){const s=new Date;s.setTime(s.getTime()+n*24*60*60*1e3),document.cookie=`${t}=${encodeURIComponent(e)}; expires=${s.toUTCString()}; path=/`}function Vr(t){Oe({swatches:t})}function qn(){const t=Nr();let e=t[Xe]?JSON.parse(t[Xe]):[];Oe.init(),Oe({el:\".spectrum\",format:\"hex\",alpha:!1,theme:\"pill\",clearButton:!0,closeButton:!0,swatches:e}),document.querySelectorAll(\".spectrum\").forEach(n=>{n.dataset.init!==\"1\"&&(n.dataset.init=1,n.addEventListener(\"click\",function(s){Oe({parent:n.dataset.appendTo??\".container\"})}),n.addEventListener(\"change\",function(s){const i=event.target.value;e=[i,...e.filter(r=>r!==i)],e.length>Ut&&(e=e.slice(0,Ut)),Br(Xe,JSON.stringify(e)),Vr(e)}),n.addEventListener(\"close\",s=>{s.stopPropagation()}))})}window.onEvent(function(){qn()});qn();const jr={props:{initialCampaignVisibility:{type:String,required:!0},initialEntityPrivate:{type:Boolean,required:!0},url:{type:String,required:!0},saveEndpoint:{type:String,required:!0},trans:{type:Object,required:!0}},data(){return{loading:!1,errorMessage:null,justMadeCampaignPublic:!1,campaignVisibility:this.initialCampaignVisibility,isEntityPrivate:this.initialEntityPrivate,form:{visibility_mode:\"entity\"}}},mounted(){window.triggerEvent?.()},computed:{isCampaignPublic(){return this.campaignVisibility===\"public\"||this.campaignVisibility===\"unlisted\"},isEntityPublic(){return this.isCampaignPublic&&!this.isEntityPrivate},clipboardToast(){return this.isEntityPublic?this.trans.success_copied_public:this.trans.success_copied_members},isCampaignUnlisted(){return this.campaignVisibility===\"unlisted\"},entityVisibleStatus(){return this.isCampaignUnlisted?this.trans.status_unlisted:this.trans.status_public},entityVisibleHelper(){return this.isCampaignUnlisted?this.trans.helper_unlisted:this.trans.helper_public},entityHiddenHelper(){return this.isCampaignUnlisted?this.trans.helper_hidden_unlisted:this.trans.helper_hidden},showSaveButton(){return this.isCampaignPublic?this.isEntityPrivate:!0}},methods:{async saveChanges(){this.loading=!0,this.errorMessage=null;try{let t={};this.isCampaignPublic?t.visibility_mode=this.form.visibility_mode:t.campaign_visibility=\"public\";const e=await Jt.post(this.saveEndpoint,t);this.isCampaignPublic?this.isEntityPrivate=!1:(this.campaignVisibility=\"public\",this.isEntityPrivate=!0,this.justMadeCampaignPublic=!0),window.showToast(this.trans.success_updated),this.$emit(\"updated\",e.data)}catch(t){console.error(t),this.errorMessage=t.response?.data?.message||this.trans.error_generic}finally{this.loading=!1}},closeModal(){const t=this.$el.closest(\"dialog\");t&&t.close()}}},Rr={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},Ur={class:\"text-lg font-normal\"},Kr=[\"title\"],zr={class:\"container\"},Wr={class:\"max-w-2xl flex flex-col gap-4 py-4 px-4 md:px-6\"},Gr={key:0,class:\"alert alert-error p-4 flex gap-2 rounded-2xl\"},Yr={key:1,class:\"alert alert-info p-4 flex gap-2 rounded-2xl\"},Qr={class:\"text-sm\"},Jr={class:\"alert alert-warning p-4 flex gap-2 rounded-2xl\"},Xr={class:\"flex flex-col gap-1\"},Zr={class:\"text-sm font-bold\"},eo={class:\"text-xs\"},to={class:\"flex flex-col gap-1 w-full\"},no={class:\"font-semibold text-xs opacity-80\"},so={class:\"flex flex-col gap-2\"},io={class:\"flex items-center gap-3 p-3 border border-base-300 rounded-xl cursor-pointer hover:bg-base-200 transition\"},ro={class:\"text-sm\"},oo={class:\"flex items-center gap-3 p-3 border border-base-300 rounded-xl cursor-pointer hover:bg-base-200 transition\"},lo={class:\"text-sm\"},ao={key:1,class:\"alert alert-success p-4 flex gap-2 rounded-2xl\"},co={class:\"flex flex-col gap-1\"},uo={class:\"text-sm font-bold\"},fo={class:\"text-xs\"},po={class:\"alert alert-warning p-4 flex gap-2 rounded-2xl\"},mo={class:\"flex flex-col gap-1\"},ho={class:\"text-sm font-bold\"},go={class:\"text-xs\"},vo={class:\"alert alert-info p-4 flex gap-2 rounded-2xl\"},yo={class:\"text-sm\"},bo={class:\"flex flex-col gap-1 w-full\"},_o={class:\"font-semibold text-xs opacity-80\"},xo={class:\"flex items-center gap-2\"},wo=[\"value\"],ko=[\"data-clipboard\",\"data-toast\",\"title\"],Lo=[\"innerHTML\"],So={class:\"p-4 md:px-6\"},Eo={class:\"flex justify-end gap-3\"},Co=[\"disabled\"],Ao={key:0,class:\"loading loading-spinner loading-xs mr-2\"};function To(t,e,n,s,i,r){return f(),p(P,null,[l(\"header\",Rr,[l(\"h4\",Ur,v(n.trans.title),1),l(\"button\",{type:\"button\",class:\"text-2xl opacity-60 hover:opacity-100 hover:bg-base-200 focus:bg-base-200 cursor-pointer w-8 h-8 flex items-center justify-center rounded-lg\",title:n.trans.btn_close,onClick:e[0]||(e[0]=(...o)=>r.closeModal&&r.closeModal(...o)),\"aria-label\":\"Close dialog\"},[...e[4]||(e[4]=[l(\"svg\",{class:\"w-3 h-3\",\"aria-hidden\":\"true\",xmlns:\"http://www.w3.org/2000/svg\",fill:\"none\",viewBox:\"0 0 14 14\"},[l(\"path\",{stroke:\"currentColor\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\"})],-1)])],8,Kr)]),l(\"div\",zr,[l(\"article\",Wr,[i.errorMessage?(f(),p(\"div\",Gr,[e[5]||(e[5]=l(\"i\",{class:\"fa-solid fa-circle-exclamation shrink-0\"},null,-1)),l(\"span\",null,v(i.errorMessage),1)])):b(\"\",!0),i.justMadeCampaignPublic?(f(),p(\"div\",Yr,[e[6]||(e[6]=l(\"i\",{class:\"fa-solid fa-circle-info shrink-0 mt-0.5\"},null,-1)),l(\"p\",Qr,v(n.trans.warning_entity_permissions),1)])):b(\"\",!0),r.isCampaignPublic?(f(),p(P,{key:2},[i.isEntityPrivate?(f(),p(P,{key:0},[l(\"div\",Jr,[e[7]||(e[7]=l(\"i\",{class:\"fa-solid fa-eye-slash shrink-0 mt-0.5\"},null,-1)),l(\"div\",Xr,[l(\"span\",Zr,v(n.trans.status_hidden),1),l(\"p\",eo,v(r.entityHiddenHelper),1)])]),l(\"div\",to,[l(\"label\",no,v(n.trans.field_visibility_mode),1),l(\"div\",so,[l(\"label\",io,[ee(l(\"input\",{type:\"radio\",name:\"visibility_mode\",value:\"entity\",class:\"radio radio-primary radio-sm\",\"onUpdate:modelValue\":e[1]||(e[1]=o=>i.form.visibility_mode=o)},null,512),[[yt,i.form.visibility_mode]]),l(\"span\",ro,v(n.trans.option_entity_public),1)]),l(\"label\",oo,[ee(l(\"input\",{type:\"radio\",name:\"visibility_mode\",value:\"global\",class:\"radio radio-primary radio-sm\",\"onUpdate:modelValue\":e[2]||(e[2]=o=>i.form.visibility_mode=o)},null,512),[[yt,i.form.visibility_mode]]),l(\"span\",lo,v(n.trans.option_global_public),1)])])])],64)):(f(),p(\"div\",ao,[l(\"i\",{class:D([r.isCampaignUnlisted?\"fa-solid fa-link\":\"fa-solid fa-globe\",\"shrink-0 mt-0.5\"])},null,2),l(\"div\",co,[l(\"span\",uo,v(r.entityVisibleStatus),1),l(\"p\",fo,v(r.entityVisibleHelper),1)])]))],64)):(f(),p(P,{key:3},[l(\"div\",po,[e[8]||(e[8]=l(\"i\",{class:\"fa-solid fa-lock shrink-0 mt-0.5\"},null,-1)),l(\"div\",mo,[l(\"span\",ho,v(n.trans.status_private),1),l(\"p\",go,v(n.trans.helper_private),1)])]),l(\"div\",vo,[e[9]||(e[9]=l(\"i\",{class:\"fa-solid fa-circle-info shrink-0 mt-0.5\"},null,-1)),l(\"p\",yo,v(n.trans.warning_entity_permissions),1)])],64)),l(\"div\",bo,[l(\"label\",_o,v(r.isEntityPublic?n.trans.label_public_link:n.trans.label_member_link),1),l(\"div\",xo,[l(\"input\",{type:\"text\",class:\"input input-bordered w-full text-sm font-mono bg-base-200\",readonly:\"\",value:n.url},null,8,wo),l(\"button\",{class:\"btn2 btn-sm btn-outline shrink-0\",\"data-clipboard\":n.url,\"data-toast\":r.clipboardToast,title:n.trans.btn_copy},[...e[10]||(e[10]=[l(\"i\",{class:\"fa-solid fa-copy\"},null,-1)])],8,ko)]),r.isEntityPublic?b(\"\",!0):(f(),p(\"p\",{key:0,class:\"text-xs text-neutral-content\",innerHTML:n.trans.helper_member_link},null,8,Lo))])])]),l(\"footer\",So,[l(\"menu\",Eo,[r.showSaveButton?(f(),p(\"button\",{key:0,type:\"submit\",class:\"btn2 btn-primary\",disabled:i.loading,onClick:e[3]||(e[3]=(...o)=>r.saveChanges&&r.saveChanges(...o))},[i.loading?(f(),p(\"span\",Ao)):b(\"\",!0),z(\" \"+v(r.isCampaignPublic?n.trans.btn_save:n.trans.btn_make_public),1)],8,Co)):b(\"\",!0)])])],64)}const qo=ot(jr,[[\"render\",To]]),Oo={props:{initialVisibility:{type:String,required:!0},url:{type:String,required:!0},saveEndpoint:{type:String,required:!0},settingsUrl:{type:String,required:!0},trans:{type:Object,required:!0}},data(){return{loading:!1,errorMessage:null,visibility:this.initialVisibility}},computed:{isCampaignPublic(){return this.visibility===\"public\"||this.visibility===\"unlisted\"},isCampaignUnlisted(){return this.visibility===\"unlisted\"}},mounted(){window.triggerEvent?.()},methods:{async makePublic(){this.loading=!0,this.errorMessage=null;try{if(await Jt.post(this.saveEndpoint,{campaign_visibility:\"public\"}),this.visibility=\"public\",navigator.clipboard)await navigator.clipboard.writeText(this.url);else{const t=document.createElement(\"textarea\");t.value=this.url,document.body.appendChild(t),t.select(),document.execCommand(\"copy\"),document.body.removeChild(t)}window.showToast(this.trans.success_copied_public),this.closeModal()}catch(t){console.error(t),this.errorMessage=t.response?.data?.message||this.trans.error_generic}finally{this.loading=!1}},openVisibilityDialog(){window.openDialog(\"primary-dialog\",this.settingsUrl)},closeModal(){const t=this.$el.closest(\"dialog\");t&&t.close()}}},$o={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},Io={class:\"text-lg font-normal\"},Mo=[\"title\"],Ho={class:\"max-w-2xl flex flex-col gap-4 py-4 px-4 md:px-6\"},Do={key:0,class:\"alert alert-error p-4 flex gap-2 rounded-2xl\"},Po={key:1,class:\"flex flex-col gap-4\"},Fo={class:\"alert alert-info p-4 flex gap-2 rounded-2xl\"},No={class:\"flex flex-col gap-1\"},Bo={class:\"text-sm font-bold\"},Vo={class:\"text-xs\"},jo={class:\"flex flex-col gap-1\"},Ro={class:\"font-normal text-sm\"},Uo={class:\"flex items-center gap-2\"},Ko=[\"value\"],zo=[\"data-clipboard\",\"data-toast\",\"title\"],Wo={key:2,class:\"flex flex-col gap-4\"},Go={key:0,class:\"alert alert-success p-4 flex gap-2 rounded-2xl\"},Yo={class:\"flex flex-col gap-1\"},Qo={class:\"text-sm font-bold\"},Jo={class:\"text-xs\"},Xo={key:1,class:\"alert alert-success p-4 flex gap-2 rounded-2xl\"},Zo={class:\"flex flex-col gap-1\"},el={class:\"text-sm font-bold\"},tl={class:\"text-xs\"},nl={class:\"flex flex-col gap-1\"},sl={class:\"font-normal text-sm\"},il={class:\"flex items-center gap-2\"},rl=[\"value\"],ol=[\"data-clipboard\",\"data-toast\",\"title\"],ll={class:\"p-4 md:px-6\"},al={class:\"flex justify-end gap-3\"},cl=[\"disabled\"],dl={key:0,class:\"loading loading-spinner loading-xs mr-2\"},ul=[\"data-clipboard\",\"data-toast\"];function fl(t,e,n,s,i,r){return f(),p(\"div\",null,[l(\"header\",$o,[l(\"h4\",Io,v(n.trans.title),1),l(\"button\",{type:\"button\",class:\"text-2xl opacity-60 hover:opacity-100 hover:bg-base-200 focus:bg-base-200 cursor-pointer w-8 h-8 flex items-center justify-center rounded-lg\",title:n.trans.btn_close,onClick:e[0]||(e[0]=(...o)=>r.closeModal&&r.closeModal(...o)),\"aria-label\":\"Close dialog\"},[...e[4]||(e[4]=[l(\"svg\",{class:\"w-3 h-3\",\"aria-hidden\":\"true\",xmlns:\"http://www.w3.org/2000/svg\",fill:\"none\",viewBox:\"0 0 14 14\"},[l(\"path\",{stroke:\"currentColor\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\"})],-1)])],8,Mo)]),l(\"article\",Ho,[i.errorMessage?(f(),p(\"div\",Do,[e[5]||(e[5]=l(\"i\",{class:\"fa-solid fa-circle-exclamation shrink-0\"},null,-1)),l(\"span\",null,v(i.errorMessage),1)])):b(\"\",!0),r.isCampaignPublic?(f(),p(\"div\",Wo,[r.isCampaignUnlisted?(f(),p(\"div\",Go,[e[8]||(e[8]=l(\"i\",{class:\"fa-solid fa-link shrink-0 mt-0.5\"},null,-1)),l(\"div\",Yo,[l(\"span\",Qo,v(n.trans.status_unlisted),1),l(\"p\",Jo,v(n.trans.helper_unlisted),1)])])):(f(),p(\"div\",Xo,[e[9]||(e[9]=l(\"i\",{class:\"fa-solid fa-globe shrink-0 mt-0.5\"},null,-1)),l(\"div\",Zo,[l(\"span\",el,v(n.trans.status_public),1),l(\"p\",tl,v(n.trans.helper_public),1)])])),l(\"div\",nl,[l(\"label\",sl,v(n.trans.label_public_link),1),l(\"div\",il,[l(\"input\",{type:\"text\",class:\"input input-bordered w-full text-sm font-mono bg-base-200\",readonly:\"\",value:n.url},null,8,rl),l(\"button\",{class:\"btn2 btn-sm btn-outline shrink-0\",\"data-clipboard\":n.url,\"data-toast\":n.trans.success_copied_public,title:n.trans.btn_copy},[...e[10]||(e[10]=[l(\"i\",{class:\"fa-solid fa-copy\"},null,-1)])],8,ol)])])])):(f(),p(\"div\",Po,[l(\"div\",Fo,[e[6]||(e[6]=l(\"i\",{class:\"fa-solid fa-lock shrink-0 mt-0.5\"},null,-1)),l(\"div\",No,[l(\"span\",Bo,v(n.trans.status_private),1),l(\"p\",Vo,v(n.trans.helper_private),1)])]),l(\"div\",jo,[l(\"label\",Ro,v(n.trans.label_member_link),1),l(\"div\",Uo,[l(\"input\",{type:\"text\",class:\"input input-bordered w-full text-sm font-mono bg-base-200\",readonly:\"\",value:n.url},null,8,Ko),l(\"button\",{class:\"btn2 btn-sm btn-outline shrink-0\",\"data-clipboard\":n.url,\"data-toast\":n.trans.success_copied_members,title:n.trans.btn_copy},[...e[7]||(e[7]=[l(\"i\",{class:\"fa-solid fa-copy\"},null,-1)])],8,zo)])])]))]),l(\"footer\",ll,[l(\"menu\",al,[r.isCampaignPublic?(f(),p(\"button\",{key:0,type:\"button\",class:\"btn2 btn-sm btn-outline\",onClick:e[1]||(e[1]=(...o)=>r.openVisibilityDialog&&r.openVisibilityDialog(...o))},v(n.trans.btn_change_visibility),1)):b(\"\",!0),r.isCampaignPublic?(f(),p(\"button\",{key:2,type:\"button\",class:\"btn2 btn-primary\",\"data-clipboard\":n.url,\"data-toast\":n.trans.success_copied_public,onClick:e[3]||(e[3]=(...o)=>r.closeModal&&r.closeModal(...o))},v(n.trans.btn_copy_public_link),9,ul)):(f(),p(\"button\",{key:1,type:\"submit\",class:\"btn2 btn-primary\",disabled:i.loading,onClick:e[2]||(e[2]=(...o)=>r.makePublic&&r.makePublic(...o))},[i.loading?(f(),p(\"span\",dl)):b(\"\",!0),z(\" \"+v(n.trans.btn_make_public),1)],8,cl))])])])}const pl=ot(Oo,[[\"render\",fl]]),ml=()=>{const t=document.getElementById(\"entity-share-container\");if(t&&t.dataset.init!==\"1\"){t.dataset.init=\"1\";const n=we({});n.component(\"entity-share-modal\",qo),n.mount(t)}const e=document.getElementById(\"campaign-share-container\");if(e&&e.dataset.init!==\"1\"){e.dataset.init=\"1\";const n=we({});n.component(\"campaign-share-modal\",pl),n.mount(e)}};document.addEventListener(\"dialog.loaded\",ml);const On=()=>{document.querySelectorAll(\".visibility-picker\").forEach(t=>{const e=t.querySelector(\".visibility-picker-trigger\"),n=t.querySelector(\".visibility-picker-dropdown\");!e||!n||e._vPickerInit||(e._vPickerInit=!0,ye(e,{content:n,theme:\"kanka-dropdown\",placement:\"bottom\",allowHTML:!0,interactive:!0,trigger:\"click\",zIndex:890,appendTo:t,onShow:()=>n.classList.remove(\"hidden\"),onHide:()=>n.classList.add(\"hidden\")}),n.querySelectorAll(\".visibility-picker-option\").forEach(s=>{s.addEventListener(\"click\",()=>{const i=parseInt(s.dataset.value),r=parseInt(t.dataset.selected),o=t.dataset.url;if(i===r||s.dataset.loading===\"1\")return;s.dataset.loading=\"1\";const a=s.querySelector(\".visibility-picker-status\");a.innerHTML='<i class=\"fa-solid fa-spinner fa-spin text-primary\" aria-hidden=\"true\"></i>';const d=n.querySelector('.visibility-picker-option[aria-checked=\"true\"]');d&&d!==s&&(d.querySelector(\".visibility-picker-status\").innerHTML=\"\"),axios.post(o,{visibility_id:i}).then(c=>{t.dataset.selected=i;const u=e.querySelector(\"i\");u.className=s.dataset.icon,n.querySelectorAll(\".visibility-picker-option\").forEach(m=>{const h=parseInt(m.dataset.value)===i;m.setAttribute(\"aria-checked\",h?\"true\":\"false\"),m.classList.toggle(\"bg-primary/5\",h),m.classList.toggle(\"ring-1\",h),m.classList.toggle(\"ring-primary/30\",h);const y=m.querySelector(\".visibility-picker-status\");y.innerHTML=h?'<i class=\"fa-regular fa-check text-primary\" aria-hidden=\"true\"></i>':\"\"}),s.dataset.loading=\"0\"}).catch(()=>{s.dataset.loading=\"0\",a.innerHTML=\"\",d&&(d.querySelector(\".visibility-picker-status\").innerHTML='<i class=\"fa-regular fa-check text-primary\" aria-hidden=\"true\"></i>'),window.showToast(\"Failed to update visibility.\",\"error\")})})}))})},$n=()=>{document.querySelectorAll(\".visibility-picker-field\").forEach(t=>{const e=t.querySelector(\".visibility-picker-field-trigger\"),n=t.querySelector(\".visibility-picker-field-dropdown\"),s=t.querySelector('input[name=\"visibility_id\"]');if(!e||!n||!s||e._vPickerFieldInit)return;e._vPickerFieldInit=!0;const i=ye(e,{content:n,theme:\"kanka-dropdown\",placement:\"bottom\",allowHTML:!0,interactive:!0,trigger:\"click\",zIndex:890,appendTo:t,onShow:()=>n.classList.remove(\"hidden\"),onHide:()=>n.classList.add(\"hidden\")});n.querySelectorAll(\".visibility-picker-field-option\").forEach(r=>{r.addEventListener(\"click\",()=>{const o=parseInt(r.dataset.value),a=parseInt(t.dataset.selected);if(o===a){i.hide();return}s.value=o,t.dataset.selected=o;const d=e.querySelector(\"i\");d.className=r.dataset.icon,n.querySelectorAll(\".visibility-picker-field-option\").forEach(c=>{const u=parseInt(c.dataset.value)===o;c.setAttribute(\"aria-checked\",u?\"true\":\"false\"),c.classList.toggle(\"bg-primary/5\",u),c.classList.toggle(\"ring-1\",u),c.classList.toggle(\"ring-primary/30\",u);const m=c.querySelector(\".visibility-picker-field-status\");m.innerHTML=u?'<i class=\"fa-regular fa-check text-primary\" aria-hidden=\"true\"></i>':\"\"}),i.hide()})})})};On();$n();window.onEvent(function(){On(),$n()});const hl={class:\"\"},gl=[\"data-title\"],vl={class:\"sr-only\"},yl=J({__name:\"NavToggler\",props:{text:{},title:{}},setup(t){const e=t,n=()=>{const o=document.querySelector(\"body\");o.classList.contains(\"sidebar-collapse\")?(o.classList.remove(\"sidebar-collapse\"),s(!1)):(o.classList.add(\"sidebar-collapse\"),s(!0))},s=o=>{let a=new Date;a.setTime(a.getTime()+90*24*60*60*1e3);let c=\" expires=\"+a.toGMTString(),u=location.protocol===\"https:\"?\"secure; \":\"\";document.cookie=\"toggleState=\"+(o?\"collapsed\":\"open\")+\"; path=/; \"+u+\"samesite=lax; \"+c},i=()=>window.innerWidth<768,r=()=>{if(i()){document.body.classList.remove(\"sidebar-collapse\");return}let a=new RegExp(\"toggleState=([^;]+)\").exec(document.cookie);(a!=null?decodeURI(a[1]):null)===\"collapsed\"&&document.querySelector(\"body\").classList.add(\"sidebar-collapse\")};return Fe(()=>{r()}),(o,a)=>(f(),p(\"div\",hl,[l(\"span\",{role:\"button\",class:\"sidebar-toggle text-center cursor-pointer fill-current hover:text-primary-focus\",\"data-toggle\":\"tooltip\",\"data-title\":e.title,\"data-placement\":\"right\",\"data-html\":\"true\",tabindex:\"\",\"data-shortcut\":\"]\",onClick:a[0]||(a[0]=d=>n())},[a[1]||(a[1]=l(\"svg\",{class:\"h-6 w-6 transition-all duration-150 hover:rotate-45\",\"data-sidebar\":\"collapse\",xmlns:\"http://www.w3.org/2000/svg\",x:\"0px\",y:\"0px\",viewBox:\"0 0 50 50\"},[l(\"path\",{d:\"M 7.71875 6.28125 L 6.28125 7.71875 L 23.5625 25 L 6.28125 42.28125 L 7.71875 43.71875 L 25 26.4375 L 42.28125 43.71875 L 43.71875 42.28125 L 26.4375 25 L 43.71875 7.71875 L 42.28125 6.28125 L 25 23.5625 Z\"})],-1)),a[2]||(a[2]=l(\"svg\",{class:\"h-6 w-6 transition-all duration-150 hover:rotate-90\",\"data-sidebar\":\"expand\",xmlns:\"http://www.w3.org/2000/svg\",x:\"0px\",y:\"0px\",viewBox:\"0 0 50 50\"},[l(\"path\",{d:\"M 0 9 L 0 11 L 50 11 L 50 9 Z M 0 24 L 0 26 L 50 26 L 50 24 Z M 0 39 L 0 41 L 50 41 L 50 39 Z\"})],-1)),l(\"span\",vl,v(e.text),1)],8,gl)]))}}),bl=[\"data-id\",\"href\"],_l={class:\"flex-none\"},xl=[\"title\"],wl=[\"title\",\"innerHTML\"],kl=[\"innerHTML\"],In=J({__name:\"LookupEntity\",props:{entity:{}},emits:[\"preview\"],setup(t,{emit:e}){const n=e,s=t,i=a=>\"url('\"+a.image+\"')\",r=a=>{a.stopPropagation(),a.preventDefault(),n(\"preview\",s.entity)},o=()=>\"flex justify-center gap-1 cursor-pointer hover:bg-base-200 rounded w-full focus:bg-base-200\";return(a,d)=>(f(),p(\"a\",{class:D(o()),\"data-id\":t.entity.id,href:t.entity.link},[l(\"div\",_l,[l(\"div\",{style:oe({backgroundImage:i(t.entity)}),title:t.entity.name,class:\"rounded cover-background block h-16 w-16\"},null,12,xl)]),l(\"div\",{class:\"grow truncate pl-1 text-base-content\",onClick:r},[l(\"div\",{class:\"font-extrabold entity-name truncate\",title:t.entity.name,innerHTML:t.entity.name},null,8,wl),l(\"div\",{class:\"entity-type text-xs\",innerHTML:t.entity.type},null,8,kl)])],10,bl))}}),Ll=[\"href\"],Sl={class:\"grow truncate\"},El=[\"title\",\"innerHTML\"],Cl=J({__name:\"LookupPage\",props:{page:{}},setup(t){const e=()=>\"flex justify-center gap-2 cursor-pointer w-full text-link\";return(n,s)=>(f(),p(\"a\",{class:D(e()),href:t.page.url,tabindex:\"0\"},[s[0]||(s[0]=l(\"div\",{class:\"flex-none h-4 w-4\"},[l(\"i\",{class:\"fa-solid fa-angles-right\",\"aria-hidden\":\"true\"})],-1)),l(\"div\",Sl,[l(\"div\",{class:\"entity-name truncate\",title:t.page.name,innerHTML:t.page.name},null,8,El)])],10,Ll))}}),Al={class:\"entity-header p-3 bg-entity-focus\"},Tl={class:\"w-full flex items-center\"},ql=[\"href\",\"title\",\"innerHTML\"],Ol=[\"title\"],$l=[\"href\"],Il=[\"innerHTML\"],Ml={key:1,class:\"my-1 w-full flex flex-wrap gap-1\"},Hl=[\"href\",\"data-tag-id\",\"data-tag-slug\"],Dl=[\"innerHTML\"],Pl=[\"href\",\"data-tag\"],Fl=[\"innerHTML\"],Nl={key:3,class:\"flex gap-1 items-center my-2\"},Bl=[\"href\",\"data-tag\"],Vl=[\"innerHTML\"],jl=[\"href\",\"title\"],Rl={class:\"entity-sections\"},Ul={class:\"tabs flex my-2 justify-center items-center border-solid border-slate-600 border-b-2 border-r-0 border-t-0 border-l-0\"},Kl={key:0,class:\"tab-profile p-5 flex flex-col gap-5\"},zl={key:0,class:\"entity-pinned-attributes flex flex-col gap-3\"},Wl=[\"data-attribute\",\"data-target\"],Gl=[\"innerHTML\"],Yl=[\"innerHTML\"],Ql={key:1},Jl={class:\"flex flex-col gap-3\"},Xl=[\"innerHTML\"],Zl=[\"innerHTML\"],ea={key:1,class:\"tab-links p-3\"},ta={key:0,class:\"text-center italic\"},na=J({__name:\"EntityPreview\",props:{entity:{}},setup(t){const e=t,n=k(!0),s=k(!1),i=k(!1),r=()=>e.entity.title,o=m=>\"inline-block rounded-xl px-3 py-1 bg-base-100 text-base-content text-xs\",a=()=>\"url('\"+e.entity.image+\"')\",d=m=>{let h=\"p-1 px-1 mx-1 pt-2 select-none text-center truncate border-b-2 border-solid border-r-0 border-t-0 border-l-0\";return m===\"profile\"&&n.value||m===\"links\"&&s.value||m===\"access\"&&i.value?h+=\" font-black border-slate-600\":h+=\" cursor-pointer border-base-100\",h},c=m=>{n.value=!1,s.value=!1,i.value=!1,m===\"profile\"?n.value=!0:m===\"links\"?s.value=!0:m===\"access\"&&(i.value=!0)},u=m=>\"entity-profile-\"+m.slug;return(m,h)=>(f(),p(P,null,[l(\"div\",Al,[l(\"div\",Tl,[l(\"a\",{class:\"text-2xl font-extrabold entity-name\",href:t.entity.link,title:t.entity.name,innerHTML:t.entity.name},null,8,ql),t.entity.status?(f(),p(\"i\",{key:0,class:D(t.entity.status.icon+\" mx-2\"),\"aria-hidden\":\"true\",title:t.entity.status.tooltip},null,10,Ol)):b(\"\",!0),l(\"a\",{class:\"ml-2 text-xs\",target:\"_blank\",href:t.entity.link},[...h[3]||(h[3]=[l(\"i\",{class:\"fa-regular fa-external-link\",\"aria-hidden\":\"true\",\"aria-label\":\"Open in a new window\"},null,-1)])],8,$l)]),r()?(f(),p(\"div\",{key:0,class:\"block w-full\",innerHTML:t.entity.title},null,8,Il)):b(\"\",!0),t.entity.tags.length>0?(f(),p(\"div\",Ml,[(f(!0),p(P,null,j(t.entity.tags,y=>(f(),p(\"a\",{class:D(o()),style:oe(y.style||\"\"),href:y.link,\"data-tag-id\":y.id,\"data-tag-slug\":y.slug},[y.icon?(f(),p(\"i\",{key:0,class:D(y.icon),\"aria-hidden\":\"true\"},null,2)):(f(),p(\"span\",{key:1,innerHTML:y.name},null,8,Dl))],14,Hl))),256))])):b(\"\",!0),t.entity.location?(f(),p(\"a\",{key:2,class:\"block w-full cursor-pointer my-2\",href:t.entity.location.link,\"data-tag\":t.entity.id},[h[4]||(h[4]=l(\"i\",{class:\"fa-duotone circle-location-arrow\",\"aria-hidden\":\"true\",\"aria-label\":\"Location\"},null,-1)),l(\"span\",{innerHTML:t.entity.location.name},null,8,Fl)],8,Pl)):t.entity.locations?(f(),p(\"div\",Nl,[(f(!0),p(P,null,j(t.entity.locations,y=>(f(),p(\"a\",{class:\"cursor-pointer\",href:y.link,\"data-tag\":y.id},[h[5]||(h[5]=l(\"i\",{class:\"fa-duotone circle-location-arrow\",\"aria-hidden\":\"true\",\"aria-label\":\"Location\"},null,-1)),l(\"span\",{innerHTML:y.name},null,8,Vl)],8,Bl))),256))])):b(\"\",!0),t.entity.image?(f(),p(\"a\",{key:4,href:t.entity.link,style:oe({backgroundImage:a()}),title:t.entity.name,class:\"rounded cover-background block w-full aspect-square\"},null,12,jl)):b(\"\",!0)]),l(\"div\",Rl,[l(\"div\",Ul,[l(\"div\",{class:D(d(\"profile\")),onClick:h[0]||(h[0]=y=>c(\"profile\"))},v(t.entity.texts.profile),3),l(\"div\",{class:D(d(\"links\")),onClick:h[1]||(h[1]=y=>c(\"links\"))},v(t.entity.texts.connections),3),l(\"div\",{class:D(d(\"access\")),onClick:h[2]||(h[2]=y=>c(\"access\"))},null,2)]),n.value?(f(),p(\"div\",Kl,[t.entity.attributes.length>0?(f(),p(\"div\",zl,[(f(!0),p(P,null,j(t.entity.attributes,y=>(f(),p(\"div\",{class:\"\",\"data-attribute\":y.name,\"data-target\":y.id},[l(\"span\",{class:\"inline-block uppercase font-extrabold mr-1\",innerHTML:y.name},null,8,Gl),l(\"span\",{innerHTML:y.value},null,8,Yl)],8,Wl))),256))])):b(\"\",!0),t.entity.attributes.length>0?(f(),p(\"hr\",Ql)):b(\"\",!0),l(\"div\",Jl,[(f(!0),p(P,null,j(t.entity.profile,y=>(f(),p(\"div\",{class:D([\"\",u(y)])},[l(\"div\",{class:\"uppercase font-extrabold truncate\",innerHTML:y.field},null,8,Xl),l(\"div\",{innerHTML:y.value},null,8,Zl)],2))),256))])])):b(\"\",!0),s.value?(f(),p(\"div\",ea,[(f(!0),p(P,null,j(t.entity.connections,y=>(f(),re(In,{entity:y},null,8,[\"entity\"]))),256)),t.entity.connections.length===0?(f(),p(\"p\",ta,v(t.entity.texts[\"no-connections\"]),1)):b(\"\",!0)])):b(\"\",!0)])],64))}}),sa={directives:{clickOutside:Xt.directive},props:{api_lookup:String,api_recent:String,placeholder:String,keyboard_tooltip:String},components:{LookupEntity:In,EntityPreview:na,LookupPage:Cl},data(){return{has_drawer:!1,term:null,show_loading:!1,show_recent:!1,show_preview:!1,show_results:!1,show_bookmarks:!1,recent:[],bookmarks:[],indexes:[],results:[],pages:[],cached:{},cachedPages:{},has_recent:!1,texts:{},timeout_id:null,preview_entity:null}},watch:{term(t,e){this.termChanged()}},methods:{termChanged(){this.term.trim().length<3||(this.timeout_id!==void 0&&clearTimeout(this.timeout_id),this.show_loading=!0,this.timeout_id=setTimeout(()=>this.lookup(),500))},lookup(){let t=this.term.trim(),e=t.toLowerCase().replace(/ /g,\"-\").replace(/ [^\\w-]+/g,\"\");if(this.cached[e])return this.displayCached(e);fetch(this.api_lookup+\"?\"+new URLSearchParams({q:t,v2:!0})).then(n=>n.json()).then(n=>this.parseLookupResponse(n,e))},focus(){this.api_recent&&(this.show_preview=!1,this.has_drawer=!0,this.fetch())},escape(){this.timeout_id!==void 0&&clearTimeout(this.timeout_id),this.close()},fetch(){if(this.has_recent){this.show_recent=!0;return}this.show_loading=!0,fetch(this.api_recent).then(t=>t.json()).then(t=>{this.recent=t.recent,this.bookmarks=t.bookmarks,this.indexes=t.indexes,this.texts.recents=t.texts.recents,this.texts.results=t.texts.results,this.texts.hint=t.texts.hint,this.texts.bookmarks=t.texts.bookmarks,this.texts.index=t.texts.index,this.texts.keyboard=t.texts.keyboard,this.texts.empty_results=t.texts.empty_results,this.texts.fulltext=t.texts.fulltext,this.texts.fulltext_route=t.fulltext_route,this.show_loading=!1,this.show_recent=!0,this.has_recent=!0,this.show_bookmarks=this.bookmarks.length>0}).catch(t=>{this.show_loading=!1,this.show_recent=!0,this.has_recent=!1})},parseLookupResponse(t,e){this.results=t.entities,this.pages=t.pages,this.cached[e]=t.entities,this.cachedPages[e]=t.pages,this.showResults()},displayCached(t){this.results=this.cached[t],this.pages=this.cachedPages[t],this.showResults()},showResults(){this.timeout_id=null,this.show_preview=!1,this.show_loading=!1,this.show_results=!0},loadPreview(t){this.show_loading=!0,fetch(t.preview).then(e=>e.json()).then(e=>this.parsePreviewResponse(e))},parsePreviewResponse(t){this.preview_entity=t,this.show_loading=!1,this.show_preview=!0,this.show_recent=!1},onClickOutside(t){this.close()},close(){this.show_recent=!1,this.show_loading=!1,this.show_preview=!1,this.$refs.searchField.blur()},showBookmarks(){this.show_bookmarks=!0},searchFullTextUrl(){return`${this.texts.fulltext_route}?term=${this.term}`},showIndexes(){this.show_bookmarks=!1},modeClass(t){return t&&this.show_bookmarks||!t&&!this.show_bookmarks?\" underline\":\"\"}}},ia={class:\"flex grow mr-2\"},ra={class:\"relative grow field flex items-center\"},oa=[\"placeholder\"],la={class:\"absolute right-1 hidden md:inline\"},aa=[\"data-title\"],ca={key:0,class:\"search-drawer absolute top-0 left-0 mt-12 h-sidebar w-sidebar bg-navbar bg-base-100 shadow-r overflow-y-auto\",tabindex:\"-1\"},da={key:0,class:\"text-center\"},ua={key:1,class:\"search-recent bg-lookup p-2 min-h-full shadow-r flex flex-col items-stretch\"},fa={key:0,class:\"flex-none\"},pa={class:\"italic text-xs text-center\"},ma={class:\"grow flex flex-col gap-5 p-2\"},ha={key:0,class:\"search-results flex flex-col gap-2\"},ga={class:\"text-sm uppercase\"},va={key:0,class:\"text-neutral-content text-sm\"},ya={key:1,class:\"flex flex-col gap-2\"},ba=[\"href\"],_a={key:1,class:\"recent-searches flex flex-col gap-2\"},xa={class:\"text-sm uppercase\"},wa={key:2,class:\"flex gap-5 justify-center\"},ka={key:3,class:\"flex flex-col gap-4\"},La=[\"href\",\"title\"],Sa=[\"innerHTML\"],Ea={key:4,class:\"flex flex-col gap-4\"},Ca=[\"href\",\"title\"],Aa=[\"innerHTML\"],Ta={key:1,class:\"flex-none text-xs text-center\"},qa=[\"innerHTML\"],Oa={key:2,class:\"search-preview bg-lookup min-h-full shadow-r\"};function $a(t,e,n,s,i,r){const o=Ve(\"LookupEntity\"),a=Ve(\"LookupPage\"),d=Ve(\"EntityPreview\"),c=Gt(\"click-outside\");return ee((f(),p(\"div\",ia,[l(\"div\",ra,[ee(l(\"input\",{type:\"text\",class:\"leading-4 w-20 md:w-full\",maxlength:\"25\",ref:\"searchField\",id:\"entity-lookup\",\"data-shortcut\":\"k\",\"data-shortcut-action\":\"focus\",\"onUpdate:modelValue\":e[0]||(e[0]=u=>i.term=u),onClick:e[1]||(e[1]=u=>r.focus()),onFocus:e[2]||(e[2]=u=>r.focus()),onKeydown:e[3]||(e[3]=me(u=>r.escape(),[\"esc\"])),placeholder:n.placeholder},null,40,oa),[[ke,i.term]]),l(\"span\",la,[l(\"span\",{class:\"flex-none keyboard-shortcut py-1\",id:\"lookup-kb-shortcut\",\"data-toggle\":\"tooltip\",\"data-title\":n.keyboard_tooltip,\"data-html\":\"true\",\"data-placement\":\"bottom\"},\" K \",8,aa)])]),i.show_recent||i.show_loading||i.show_preview?(f(),p(\"aside\",ca,[i.show_loading?(f(),p(\"div\",da,[...e[10]||(e[10]=[l(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\",\"aria-label\":\"Loading\"},null,-1)])])):b(\"\",!0),i.show_recent?(f(),p(\"div\",ua,[i.show_results?b(\"\",!0):(f(),p(\"div\",fa,[l(\"p\",pa,v(i.texts.hint),1)])),l(\"div\",ma,[i.show_results?(f(),p(\"div\",ha,[l(\"div\",ga,v(i.texts.results),1),i.results.length===0&&i.pages.length===0?(f(),p(\"div\",va,v(i.texts.empty_results),1)):(f(),p(\"div\",ya,[(f(!0),p(P,null,j(i.results,u=>(f(),re(o,{entity:u,onKeydown:e[4]||(e[4]=me(m=>r.escape(),[\"esc\"])),onPreview:r.loadPreview},null,8,[\"entity\",\"onPreview\"]))),256)),(f(!0),p(P,null,j(i.pages,u=>(f(),re(a,{page:u},null,8,[\"page\"]))),256))])),l(\"a\",{class:\"grow text-sm uppercase hover:underline text-link\",href:r.searchFullTextUrl()},v(i.texts.fulltext),9,ba)])):b(\"\",!0),i.recent.length>0?(f(),p(\"div\",_a,[l(\"div\",xa,v(i.texts.recents),1),(f(!0),p(P,null,j(i.recent,u=>(f(),re(o,{entity:u,onPreview:r.loadPreview,onKeydown:e[5]||(e[5]=me(m=>r.escape(),[\"esc\"]))},null,8,[\"entity\",\"onPreview\"]))),256))])):b(\"\",!0),i.bookmarks.length>0?(f(),p(\"div\",wa,[i.bookmarks.length>0?(f(),p(\"button\",{key:0,class:D([\"grow text-sm uppercase hover:underline\",this.modeClass(!0)]),onClick:e[6]||(e[6]=u=>r.showBookmarks())},v(i.texts.bookmarks),3)):b(\"\",!0),l(\"button\",{class:D([\"grow text-sm uppercase hover:underline\",this.modeClass(!1)]),onClick:e[7]||(e[7]=u=>r.showIndexes())},v(i.texts.index),3)])):b(\"\",!0),i.show_bookmarks?(f(),p(\"div\",ka,[(f(!0),p(P,null,j(i.bookmarks,u=>(f(),p(\"a\",{href:u.url,onClick:e[8]||(e[8]=Le(()=>{},[\"stop\"])),title:u.text,class:\"flex gap-2 items-center text-link\"},[l(\"i\",{class:D([\"w-4\",u.icon]),\"aria-hidden\":\"true\"},null,2),l(\"span\",{innerHTML:u.text},null,8,Sa)],8,La))),256))])):(f(),p(\"div\",Ea,[(f(!0),p(P,null,j(i.indexes,u=>(f(),p(\"a\",{href:u.url,onClick:e[9]||(e[9]=Le(()=>{},[\"stop\"])),title:u.name,class:\"flex gap-2 items-center text-link\"},[l(\"i\",{class:D([\"w-4 text-center\",u.icon]),\"aria-hidden\":\"true\"},null,2),l(\"span\",{innerHTML:u.name},null,8,Aa)],8,Ca))),256))]))]),i.show_loading?b(\"\",!0):(f(),p(\"div\",Ta,[e[11]||(e[11]=l(\"hr\",null,null,-1)),l(\"p\",{class:\"italic text-xs text-center\",innerHTML:i.texts.keyboard},null,8,qa)]))])):b(\"\",!0),i.show_preview?(f(),p(\"div\",Oa,[ge(d,{entity:i.preview_entity},null,8,[\"entity\"])])):b(\"\",!0)])):b(\"\",!0)])),[[c,r.onClickOutside]])}const Ia=ot(sa,[[\"render\",$a]]),Ma=[\"href\",\"title\"],Ha={key:0,class:\"absolute top-2 right-2 text-sm text-boost\"},Da=[\"innerHTML\"],Kt=J({__name:\"Campaign\",props:{campaign:{}},setup(t){const e=t,n=()=>e.campaign.image?\"url(\"+e.campaign.image+\")\":\"\",s=()=>\"campaign flex items-end border border-solid rounded-lg cover-background relative h-24 overflow-hidden text-break shadow-xs hover:shadow-md border-0\";return(i,r)=>(f(),p(\"a\",{class:D(s()),href:t.campaign.url,style:oe({backgroundImage:n()}),title:t.campaign.name},[t.campaign.is_boosted?(f(),p(\"div\",Ha,[...r[0]||(r[0]=[l(\"i\",{class:\"fa-regular fa-gem\",\"aria-label\":\"Premium campaign\"},null,-1)])])):b(\"\",!0),l(\"div\",{class:\"flex items-end justify-center name w-full text-xs p-2 pt-6 text-center\",innerHTML:t.campaign.name},null,8,Da)],14,Ma))}}),Pa=[\"data-id\"],Fa={class:\"flex-none p-2\"},Na=[\"innerHTML\",\"href\"],Ba=[\"title\"],Va={key:1,class:\"flex-none p-2\"},ja=[\"data-id\"],Ra={class:\"flex-none p-2\"},Ua=[\"innerHTML\"],Ka=[\"title\"],za={key:1,class:\"flex-none p-2\"},Wa=J({__name:\"Notification\",props:{notification:{}},emits:[\"read\"],setup(t,{emit:e}){const n=e,s=k(!1),i=k(!1),r=d=>{let c=\"notification bg-base-200 flex justify-center items-center p-2 rounded-md\";return d.is_read?c:c+\" unread\"},o=d=>{let c=\"fa-regular fa-\"+d.icon;return d.colour===\"red\"&&(c+=\" text-red\"),c},a=d=>{i.value=!0,axios.post(d.dismiss).then(()=>{s.value=!0,n(\"read\",d)})};return(d,c)=>t.notification.url&&!s.value?(f(),p(\"div\",{key:0,class:D(r(t.notification)),\"data-id\":t.notification.id},[l(\"div\",Fa,[l(\"i\",{class:D(o(t.notification)),\"aria-hidden\":\"true\"},null,2)]),l(\"a\",{class:\"grow p-2 break-all text-link\",innerHTML:t.notification.text,href:t.notification.url},null,8,Na),i.value?(f(),p(\"div\",Va,[...c[3]||(c[3]=[l(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},null,-1)])])):(f(),p(\"div\",{key:0,class:\"flex-none p-2 cursor-pointer dismissable\",onClick:c[0]||(c[0]=u=>a(t.notification)),title:t.notification.dismiss_text},[...c[2]||(c[2]=[l(\"i\",{class:\"fa-solid fa-times\",\"aria-hidden\":\"true\"},null,-1)])],8,Ba))],10,Pa)):s.value?b(\"\",!0):(f(),p(\"div\",{key:1,class:D(r(t.notification)),\"data-id\":t.notification.id},[l(\"div\",Ra,[l(\"i\",{class:D(o(t.notification)),\"aria-hidden\":\"true\"},null,2)]),l(\"div\",{class:\"grow p-2\",innerHTML:t.notification.text},null,8,Ua),i.value?(f(),p(\"div\",za,[...c[5]||(c[5]=[l(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},null,-1)])])):(f(),p(\"div\",{key:0,class:\"flex-none p-2 cursor-pointer dismissable\",onClick:c[1]||(c[1]=u=>a(t.notification)),title:t.notification.dismiss_text},[...c[4]||(c[4]=[l(\"i\",{class:\"fa-regular fa-times\",\"aria-hidden\":\"true\"},null,-1)])],8,Ka))],10,ja))}}),Ga=[\"data-id\"],Ya={class:\"grow p-2\"},Qa=[\"innerHTML\",\"href\"],Ja=[\"innerHTML\"],Xa=[\"title\"],Za={key:1,class:\"flex-none p-2\"},ec=J({__name:\"Release\",props:{release:{}},emits:[\"read\"],setup(t,{emit:e}){const n=e,s=k(!1),i=k(!1),r=a=>\"release bg-base-200 flex justify-center items-center p-2  rounded-md\",o=a=>{i.value=!0,axios.post(a.dismiss).then(()=>{s.value=!0,n(\"read\",a)})};return(a,d)=>s.value?b(\"\",!0):(f(),p(\"div\",{key:0,class:D(r(t.release)),\"data-id\":t.release.id},[l(\"div\",Ya,[l(\"a\",{innerHTML:t.release.title,class:\"font-bold cursor-pointer block w-full text-link\",href:t.release.url,target:\"_blank\"},null,8,Qa),l(\"p\",{innerHTML:t.release.text},null,8,Ja)]),i.value?(f(),p(\"div\",Za,[...d[2]||(d[2]=[l(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},null,-1)])])):(f(),p(\"div\",{key:0,class:\"flex-none p-2 cursor-pointer dismissable\",onClick:d[0]||(d[0]=c=>o(t.release)),title:t.release.dismiss_text},[...d[1]||(d[1]=[l(\"i\",{class:\"fa-solid fa-times\",\"aria-hidden\":\"true\"},null,-1)])],8,Xa))],10,Ga))}}),Ze={__name:\"GridSvg\",props:{size:Number},setup(t){const e=t;function n(){return\"w-\"+e.size+\" h-\"+e.size}return(s,i)=>(f(),p(\"svg\",{class:D(n()),viewBox:\"0 -0.5 21 21\",xmlns:\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"aria-hidden\":\"true\"},[...i[0]||(i[0]=[l(\"g\",{stroke:\"none\",\"stroke-width\":\"1\",fill:\"none\",\"fill-rule\":\"evenodd\"},[l(\"g\",{transform:\"translate(-219.000000, -200.000000)\",fill:\"currentcolor\"},[l(\"g\",{id:\"icons\",transform:\"translate(56.000000, 160.000000)\"},[l(\"path\",{d:\"M181.9,54 L179.8,54 C178.63975,54 177.7,54.895 177.7,56 L177.7,58 C177.7,59.105 178.63975,60 179.8,60 L181.9,60 C183.06025,60 184,59.105 184,58 L184,56 C184,54.895 183.06025,54 181.9,54 M174.55,54 L172.45,54 C171.28975,54 170.35,54.895 170.35,56 L170.35,58 C170.35,59.105 171.28975,60 172.45,60 L174.55,60 C175.71025,60 176.65,59.105 176.65,58 L176.65,56 C176.65,54.895 175.71025,54 174.55,54 M167.2,54 L165.1,54 C163.93975,54 163,54.895 163,56 L163,58 C163,59.105 163.93975,60 165.1,60 L167.2,60 C168.36025,60 169.3,59.105 169.3,58 L169.3,56 C169.3,54.895 168.36025,54 167.2,54 M181.9,47 L179.8,47 C178.63975,47 177.7,47.895 177.7,49 L177.7,51 C177.7,52.105 178.63975,53 179.8,53 L181.9,53 C183.06025,53 184,52.105 184,51 L184,49 C184,47.895 183.06025,47 181.9,47 M174.55,47 L172.45,47 C171.28975,47 170.35,47.895 170.35,49 L170.35,51 C170.35,52.105 171.28975,53 172.45,53 L174.55,53 C175.71025,53 176.65,52.105 176.65,51 L176.65,49 C176.65,47.895 175.71025,47 174.55,47 M167.2,47 L165.1,47 C163.93975,47 163,47.895 163,49 L163,51 C163,52.105 163.93975,53 165.1,53 L167.2,53 C168.36025,53 169.3,52.105 169.3,51 L169.3,49 C169.3,47.895 168.36025,47 167.2,47 M181.9,40 L179.8,40 C178.63975,40 177.7,40.895 177.7,42 L177.7,44 C177.7,45.105 178.63975,46 179.8,46 L181.9,46 C183.06025,46 184,45.105 184,44 L184,42 C184,40.895 183.06025,40 181.9,40 M174.55,40 L172.45,40 C171.28975,40 170.35,40.895 170.35,42 L170.35,44 C170.35,45.105 171.28975,46 172.45,46 L174.55,46 C175.71025,46 176.65,45.105 176.65,44 L176.65,42 C176.65,40.895 175.71025,40 174.55,40 M169.3,42 L169.3,44 C169.3,45.105 168.36025,46 167.2,46 L165.1,46 C163.93975,46 163,45.105 163,44 L163,42 C163,40.895 163.93975,40 165.1,40 L167.2,40 C168.36025,40 169.3,40.895 169.3,42\"})])])],-1)])],2))}},tc={class:\"nav-switcher flex items-center justify-center align-middle h-12 gap-2\"},nc={class:\"indicator relative inline-flex w-max\"},sc={key:0,class:\"notification-badge left-auto top-auto w-fit inline-flex absolute content-center items-center z-10\"},ic={key:1,class:\"profile-box rounded-lg p-2 text-center font-bold\"},rc={key:0,class:\"navigation-drawer bg-base-100 h-full fixed top-0 right-0 rounded-l-2xl shadow-lg flex flex-col\"},oc={key:0,class:\"temporary p-8 text-center\"},lc={class:\"header flex flex-none\"},ac={key:0,class:\"full flex items-center gap-4\"},cc={class:\"flex-none\"},dc={class:\"grow\"},uc={class:\"text-sm font-semibold\"},fc={class:\"text-xs text-neutral-content\"},pc=[\"title\"],mc={key:0,class:\"full flex items-center gap-4\"},hc={key:0,class:\"flex-none profile-box rounded-lg p-2 text-center uppercase font-bold\"},gc={class:\"grow\"},vc={class:\"text-sm font-semibold\"},yc={class:\"text-xs text-neutral-content\"},bc=[\"title\"],_c={key:0,class:\"flex-none profile-box rounded-lg p-2 text-center uppercase font-bold\"},xc={class:\"grow overflow-y-auto\"},wc={key:0,class:\"profile p-5 flex flex-col gap-5\"},kc={key:0,class:\"notifications\"},Lc={class:\"flex w-full py-2 items-center text-xs justify-between\"},Sc={class:\"font-semibold text-neutral-content uppercase\"},Ec=[\"href\"],Cc={class:\"flex flex-col gap-2\"},Ac={key:0,class:\"no-notifications help-block text-neutral-content italic\"},Tc={key:1,class:\"releases\"},qc={class:\"flex w-full py-2 text-xs\"},Oc={class:\"font-semibold text-neutral-content uppercase\"},$c={class:\"flex flex-col gap-2\"},Ic={key:2,class:\"subscription\"},Mc={class:\"uppercase font-bold py-2 text-xs font-semibold text-neutral-content\"},Hc=[\"href\"],Dc={class:\"flex-none p-2\"},Pc=[\"src\",\"alt\"],Fc={class:\"grow p-2\"},Nc={class:\"font-semibold text-md\"},Bc={key:0,class:\"text-base-content\"},Vc={key:1,class:\"text-base-content\"},jc={class:\"link flex gap-1 items-center\"},Rc={key:0,class:\"fa-duotone fa-credit-card\",\"aria-hidden\":\"true\"},Uc={key:1,class:\"fa-regular fa-credit-card\",\"aria-hidden\":\"true\"},Kc={key:1,class:\"campaigns p-5\"},zc={key:0,class:\"campaigns flex flex-col gap-5\"},Wc={class:\"flex flex-col gap-2\"},Gc={class:\"flex w-full gap-2 text-xs justify-between\"},Yc={class:\"uppercase font-semibold text-neutral-content\"},Qc=[\"href\"],Jc={class:\"grid grid-cols-2 md:grid-cols-3 gap-5\"},Xc=[\"href\"],Zc={class:\"text-xs text-break uppercase\"},ed={class:\"flex flex-col gap-2\"},td={key:0,class:\"uppercase text-xs font-semibold text-neutral-content\"},nd={key:1,class:\"grid grid-cols-2 md:grid-cols-3 gap-5 following\"},sd=[\"href\"],id={class:\"text-xs uppercase text-break\"},rd={key:0,class:\"flex-none p-5\"},od={key:0,class:\"flex flex-col\"},ld=[\"href\"],ad=[\"href\"],cd={href:\"https://plugins.kanka.io\",class:\"p-2 text-link flex items-center gap-3\"},dd={href:\"https://docs.kanka.io/en/latest/\",class:\"p-2 text-link flex items-center gap-3\",target:\"_blank\"},ud={key:1,class:\"flex flex-col\"},fd=[\"href\"],pd=J({__name:\"NavSwitcher\",props:{user_id:{},api:{},fetch:{},initials:{},avatar:{},campaign_id:{},has_alerts:{}},setup(t){const e=t,n=k(!1),s=k(!1),i=k(!1),r=k(!1),o=k(!1),a=k({}),d=k({}),c=k({}),u=k({}),m=k({}),h=k(!1),y=k(!1),g=k(!1),_=()=>{r.value=!0,o.value=!1,E()},C=()=>{o.value=!0,r.value=!1,E()},E=()=>{s.value=!0,!i.value&&(n.value=!0,axios.get(e.api).then(O=>{a.value=O.data.profile,d.value=O.data.campaigns,c.value=O.data.notifications,u.value=O.data.marketplace,m.value=O.data.releases,h.value=O.data.has_unread,i.value=!0,n.value=!1,y.value=!0,g.value=O.data.fontawesome_pro}))},$=O=>O?\"block p-4 grow items-center focus:box-shadow\":\"block p-4  items-center bg-base-200 cursor-pointer flex-none focus:box-shadow\",w=()=>{document.getElementById(\"logout-form\").submit()},H=O=>{s.value=!1},te=O=>{let x=m.value.releases.findIndex(X=>X.id===O.id);m.value.releases.slice(x,1),M()},ne=O=>{let x=c.value.messages.findIndex(X=>X.id==O.id);c.value.messages.slice(x,1),M()},M=()=>{c.value.messages.length===0&&m.value.releases.length===0&&(h.value=!1)},q=()=>{let O=localStorage.getItem(\"last_notification-\"+e.user_id),X=new Date().getTime()-60*5e3;if(!O||O<X)L();else if(h.value=localStorage.getItem(\"notification-has-alerts-\"+e.user_id)===\"true\",F(),!y.value)return},L=()=>{let O=new Date().getTime();localStorage.setItem(\"last_notification-\"+e.user_id,O),axios.get(e.fetch).then(x=>{localStorage.setItem(\"notification-has-alerts-\"+e.user_id,x.data.has_alerts),q()})},F=()=>{setTimeout(function(){q()},e.alert_delta)},S=()=>e.avatar.startsWith(\"/images/\"),T=()=>\"url(\"+e.avatar+\")\";return Fe(()=>{h.value=e.has_alerts,F()}),(O,x)=>{const X=Gt(\"click-outside\");return f(),p(P,null,[l(\"div\",tc,[l(\"div\",{class:\"campaigns inline cursor-pointer text-center text-2xl hover:text-primary-focus\",onClick:x[0]||(x[0]=R=>_()),\"aria-label\":\"Switch campaigns\",tabindex:\"0\",role:\"button\"},[ge(Ze,{size:7}),x[5]||(x[5]=l(\"span\",{class:\"sr-only\"},\"Campaigns\",-1))]),l(\"div\",{class:\"profile flex items-center cursor-pointer text-center uppercase\",onClick:x[1]||(x[1]=R=>C()),\"aria-label\":\"Profile settings\",tabindex:\"0\",role:\"button\"},[l(\"div\",nc,[h.value?(f(),p(\"span\",sc)):b(\"\",!0),S()?(f(),p(\"div\",ic,v(t.initials),1)):(f(),p(\"div\",{key:2,class:\"w-9 h-9 rounded-lg cover-background\",style:oe({backgroundImage:T()})},null,4))])])]),s.value?ee((f(),p(\"div\",rc,[n.value?(f(),p(\"div\",oc,[...x[6]||(x[6]=[l(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},null,-1)])])):(f(),p(P,{key:1},[l(\"div\",lc,[l(\"div\",{class:D($(r.value)),onClick:x[2]||(x[2]=R=>_()),tabindex:\"0\",role:\"button\",\"aria-label\":\"Campaign list\"},[r.value?(f(),p(\"div\",ac,[l(\"div\",cc,[ge(Ze,{size:6})]),l(\"div\",dc,[l(\"div\",uc,v(d.value.texts.campaigns),1),l(\"div\",fc,v(d.value.texts.count),1)])])):(f(),p(\"div\",{key:1,class:\"flex items-center justify-center h-full\",title:d.value.texts.campaigns},[ge(Ze,{size:6})],8,pc))],2),l(\"div\",{class:D($(o.value)),onClick:x[3]||(x[3]=R=>C()),tabindex:\"0\",role:\"button\",\"aria-label\":\"Profile pane\"},[o.value?(f(),p(\"div\",mc,[S()?(f(),p(\"div\",hc,v(t.initials),1)):(f(),p(\"div\",{key:1,class:\"flex-none w-9 h-9 rounded-lg cover-background\",style:oe({backgroundImage:T()})},null,4)),l(\"div\",gc,[l(\"div\",vc,v(a.value.name),1),l(\"div\",yc,v(a.value.email),1)])])):(f(),p(\"div\",{key:1,class:\"\",title:a.value.your_profile},[S()?(f(),p(\"div\",_c,v(t.initials),1)):(f(),p(\"div\",{key:1,class:\"flex-none w-9 h-9 rounded-lg cover-background\",style:oe({backgroundImage:T()})},null,4))],8,bc))],2)]),l(\"div\",xc,[o.value?(f(),p(\"div\",wc,[c.value.title?(f(),p(\"div\",kc,[l(\"div\",Lc,[l(\"div\",Sc,v(c.value.title),1),l(\"a\",{href:c.value.all.url,class:\"text-link\"},v(c.value.all.text),9,Ec)]),l(\"div\",Cc,[(f(!0),p(P,null,j(c.value.messages,R=>(f(),re(Wa,{notification:R,onRead:ne},null,8,[\"notification\"]))),256))]),c.value.messages.length===0?(f(),p(\"div\",Ac,v(c.value.none),1)):b(\"\",!0)])):b(\"\",!0),m.value.title&&m.value.releases.length>0?(f(),p(\"div\",Tc,[l(\"div\",qc,[l(\"div\",Oc,v(m.value.title),1)]),l(\"div\",$c,[(f(!0),p(P,null,j(m.value.releases,R=>(f(),re(ec,{release:R,onRead:te},null,8,[\"release\"]))),256))])])):b(\"\",!0),!a.value.is_impersonating&&a.value.subscription?(f(),p(\"div\",Ic,[l(\"div\",Mc,v(a.value.subscription.title),1),l(\"a\",{class:\"border rounded-lg flex justify-center items-center hover:shadow-md border-base-300 text-link\",href:a.value.urls.subscription},[l(\"div\",Dc,[l(\"img\",{class:\"w-16 h-16\",src:a.value.subscription.image,alt:a.value.subscription.tier},null,8,Pc)]),l(\"div\",Fc,[l(\"div\",Nc,v(a.value.subscription.tier),1),a.value.subscription.tier!==\"Kobold\"?(f(),p(\"div\",Bc,[z(v(a.value.subscription.created),1),x[7]||(x[7]=l(\"br\",null,null,-1)),z(\" \"+v(a.value.subscription.boosters),1)])):(f(),p(\"div\",Vc,[z(v(a.value.subscription.call_to_action)+\" \",1),l(\"div\",jc,[z(v(a.value.subscription.call_to_action_2)+\" \",1),g.value?(f(),p(\"i\",Rc)):(f(),p(\"i\",Uc)),x[8]||(x[8]=l(\"i\",{class:\"fa-brands fa-paypal\",\"aria-hidden\":\"true\"},null,-1))])]))])],8,Hc)])):b(\"\",!0)])):(f(),p(\"div\",Kc,[a.value.is_impersonating?b(\"\",!0):(f(),p(\"div\",zc,[l(\"div\",Wc,[l(\"div\",Gc,[l(\"div\",Yc,v(d.value.texts.campaigns),1),d.value.member.length>0?(f(),p(\"a\",{key:0,href:d.value.urls.reorder,class:\"text-link\"},[x[9]||(x[9]=l(\"i\",{class:\"fa-regular fa-arrow-up-arrow-down\",\"aria-hidden\":\"true\"},null,-1)),z(\" \"+v(d.value.texts.reorder),1)],8,Qc)):b(\"\",!0)]),l(\"div\",Jc,[(f(!0),p(P,null,j(d.value.member,R=>(f(),re(Kt,{campaign:R},null,8,[\"campaign\"]))),256)),l(\"a\",{href:d.value.urls.new,class:\"new-campaign flex items-center text-center border-dashed border rounded-lg h-24 p-2 overflow-hidden text-link\"},[l(\"span\",Zc,[x[10]||(x[10]=l(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\",style:{display:\"none\"}},null,-1)),z(\" \"+v(d.value.texts.new),1)])],8,Xc)])]),l(\"div\",ed,[a.value.is_impersonating?b(\"\",!0):(f(),p(\"p\",td,v(d.value.texts.followed),1)),a.value.is_impersonating?b(\"\",!0):(f(),p(\"div\",nd,[(f(!0),p(P,null,j(d.value.following,R=>(f(),re(Kt,{campaign:R},null,8,[\"campaign\"]))),256)),l(\"a\",{href:d.value.urls.follow,class:\"new-campaign flex items-center text-center border-dashed border rounded-lg h-24 p-2 overflow-hidden text-link\"},[l(\"span\",id,v(d.value.texts.follow),1)],8,sd)]))])]))]))]),o.value?(f(),p(\"div\",rd,[a.value.is_impersonating?(f(),p(\"div\",ud,[l(\"a\",{href:a.value.return.url,class:\"p-2 text-link flex items-center gap-3\"},[x[17]||(x[17]=l(\"i\",{class:\"fa-regular fa-sign-out-alt\",\"aria-hidden\":\"true\"},null,-1)),z(\" \"+v(a.value.return.name),1)],8,fd)])):(f(),p(\"div\",od,[l(\"a\",{href:a.value.urls.settings.url,class:\"p-2 text-link flex items-center gap-3\"},[x[11]||(x[11]=l(\"i\",{class:\"fa-regular fa-cog text-neutral-content\",\"aria-hidden\":\"true\"},null,-1)),z(\" \"+v(a.value.urls.settings.name),1)],8,ld),l(\"a\",{href:a.value.urls.profile.url,class:\"p-2 text-link flex items-center gap-3\"},[x[12]||(x[12]=l(\"i\",{class:\"fa-regular fa-user text-neutral-content\",\"aria-hidden\":\"true\"},null,-1)),z(\" \"+v(a.value.urls.profile.name),1)],8,ad),l(\"a\",cd,[x[13]||(x[13]=l(\"i\",{class:\"fa-regular fa-puzzle-piece text-neutral-content\",\"aria-hidden\":\"true\"},null,-1)),z(\" \"+v(u.value.title),1)]),l(\"a\",dd,[x[14]||(x[14]=l(\"i\",{class:\"fa-regular fa-question-circle text-neutral-content\",\"aria-hidden\":\"true\"},null,-1)),z(\" \"+v(a.value.urls.help.name),1)]),x[16]||(x[16]=l(\"hr\",{class:\"my-2\"},null,-1)),l(\"a\",{href:\"#\",onClick:x[4]||(x[4]=R=>w()),class:\"p-2 text-link flex items-center gap-3\"},[x[15]||(x[15]=l(\"i\",{class:\"fa-regular fa-sign-out\",\"aria-hidden\":\"true\"},null,-1)),z(\" \"+v(a.value.urls.logout.name),1)])]))])):b(\"\",!0)],64))])),[[X,H]]):b(\"\",!0)],64)}}}),Ee=we({});Ee.component(\"nav-toggler\",yl);Ee.component(\"nav-search\",Ia);Ee.component(\"nav-switcher\",pd);Ee.use(Xt);Ee.mount(\"header\");const md={key:0},hd=[\"innerHTML\"],gd={key:1,class:\"flex items-center gap-1\"},vd=[\"accept\"],yd={key:2,class:\"flex items-center gap-1\"},bd=[\"placeholder\"],_d={key:0,class:\"fa-solid fa-spin fa-spinner\",\"aria-label\":\"Downloading\"},xd={key:3,class:\"flex items-center gap-1\"},wd=[\"innerHTML\"],kd={key:0,class:\"flex gap-2 flex-col w-full\"},Ld={class:\"progress h-1 w-full\"},Sd=[\"innerHTML\"],Ed=[\"innerHTML\"],Cd=[\"name\"],Ad={key:2,type:\"hidden\",name:\"remove-image\",value:\"1\"},Td={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},qd=[\"innerHTML\"],Od={class:\"max-w-4xl flex flex-col gap-2 text-left p-4 md:px-6\"},$d={class:\"flex flex-col gap-1 w-full\"},Id=[\"innerHTML\"],Md=[\"innerHTML\"],Hd={key:0,class:\"p-4 md:px-6\"},Dd={class:\"\"},Pd=[\"href\"],Fd=[\"innerHTML\"],Nd=J({__name:\"Selection\",props:{file:{},url:{},accepts:{},uuid:{},thumbnail:{},browse:{},field:{},old:{},i18n:{},cta:{},premium:{}},setup(t){const e=t,n=k(!0),s=k(!1),i=k(!1),r=k(),o=k(),a=k(),d=k(),c=k(),u=k(!1),m=k(0),h=k(null);let y;const g=k(null),_=k(!1),C=k(!1),E=k(!1),$=k(null),w=k(),H=k();Fe(()=>{n.value=!1,d.value=e.thumbnail,c.value=e.uuid,e.old===\"true\"&&(_.value=!0),e.premium===\"true\"&&(C.value=!0),$.value=JSON.parse(e.i18n)});const te=()=>{let A=\"relative flex items-end align-middle rounded overflow-hidden bg-no-repeat \";return q()?A+=\" cover-background preview-bg w-48 h-36 p-2 \":A+=\"w-full\",A},ne=()=>i.value?\"hidden\":\"flex gap-2 flex-col w-full\",M=()=>_.value||c.value!==null&&c.value!==\"\",q=()=>h.value||_.value?!0:c.value!==null&&c.value!==\"\",L=()=>{c.value=null,d.value=null,_.value&&(_.value=!1,E.value=!0)},F=()=>h.value?\"url('\"+h.value+\"')\":d.value?\"url('\"+d.value+\"')\":\"\",S=()=>m.value+\"%\",T=()=>{u.value=!0},O=A=>{r.value=A.clipboardData.getData(\"text\"),x()},x=()=>{!r.value||r.value==y||(y=r.value,s.value=!0,o.value.disabled=!0,axios.post(e.url,{url:r.value}).then(A=>{o.value.disabled=!1,s.value=!1,r.value=null,d.value=A.data.thumbnail,c.value=A.data.uuid}).catch(A=>{o.value.disabled=!1,s.value=!1,o.value.focus(),R(A)}))},X=async A=>{const I=A.target.files[0];if(!I){i.value=!1;return}const K=new FileReader;K.onload=se=>{h.value=se.target.result},K.readAsDataURL(I),i.value=!0,document.addEventListener(\"keydown\",Be),g.value=axios.CancelToken.source(),a.value.disabled=!0;const vt=new FormData;vt.append(\"file\",I),axios.post(e.file,vt,{headers:{\"Content-Type\":\"multipart/form-data\"},cancelToken:g.value.token,onUploadProgress:function(se){m.value=Math.round(se.loaded*100/se.total)}}).then(se=>{i.value=!1,a.value.disabled=!1,a.value=null,d.value=se.data.thumbnail,c.value=se.data.uuid,h.value=null,document.removeEventListener(\"keydown\",Be)}).catch(se=>{i.value=!1,a.value.disabled=!1,h.value=null,axios.isCancel(se)?a.value=null:R(se),document.removeEventListener(\"keydown\",Be)})},R=A=>{if(!A.response)return;if(A.response.data.error){window.showToast(A.response.data.error,\"error\");return}if(A.response&&A.response.status===403&&A.response.data.message){window.showToast($.value.unauthorized,\"error\");return}Object.keys(A.response.data.errors).forEach(K=>{if(A.response.data.errors[K][0].includes(\"(storage_full)\")){H.value=A.response.data.errors[K][0].replace(\"(storage_full)\",\"\"),Kn(w.value);return}window.showToast(A.response.data.errors[K][0],\"error\")})},Rn=A=>{c.value=A.uuid,d.value=A.thumbnail},Un=()=>{u.value=!1},Be=A=>{A.key===\"Escape\"&&i.value&&mt()},mt=A=>{g.value.cancel(\"Upload canceled by user.\")},Kn=A=>{A.showModal(),A.addEventListener(\"click\",gt)},ht=A=>{A.removeEventListener(\"click\",gt),A.close()},gt=A=>{let I=A.target.getBoundingClientRect();!(I.top<=A.clientY&&A.clientY<=I.top+I.height&&I.left<=A.clientX&&A.clientX<=I.left+I.width)&&A.target.tagName===\"DIALOG\"&&ht(A.target)};return(A,I)=>(f(),p(P,null,[n.value?(f(),p(\"div\",md,[...I[7]||(I[7]=[l(\"i\",{class:\"fa-solid fa-spin fa-spinner\",\"aria-label\":\"Loading\"},null,-1)])])):(f(),p(\"div\",{key:1,class:D(te()),style:oe({backgroundImage:F()})},[l(\"div\",{class:D(ne())},[q()?(f(),p(\"div\",{key:0,class:\"rounded p-2 cursor-pointer backdrop-blur-sm backdrop-opacity-30 bg-red-700/50 text-white hover:backdrop-opacity-100 transition\",onClick:I[0]||(I[0]=K=>L()),innerHTML:$.value.remove},null,8,hd)):b(\"\",!0),M()?b(\"\",!0):(f(),p(\"div\",gd,[l(\"input\",{type:\"file\",accept:e.accepts,class:\"w-full\",onChange:X,ref_key:\"fileField\",ref:a},null,40,vd)])),M()?b(\"\",!0):(f(),p(\"div\",yd,[ee(l(\"input\",{ref_key:\"urlField\",ref:o,type:\"text\",class:\"w-full\",\"onUpdate:modelValue\":I[1]||(I[1]=K=>r.value=K),onBlur:I[2]||(I[2]=K=>x()),onPaste:O,placeholder:$.value.url},null,40,bd),[[ke,r.value]]),s.value?(f(),p(\"i\",_d)):b(\"\",!0)])),M()?b(\"\",!0):(f(),p(\"div\",xd,[l(\"span\",{role:\"button\",class:\"btn2 btn-outline btn-sm\",onClick:I[3]||(I[3]=K=>T()),innerHTML:$.value.gallery},null,8,wd)]))],2),i.value?(f(),p(\"div\",kd,[l(\"div\",Ld,[l(\"div\",{class:\"h-1 bg-accent shadow-xs\",role:\"progressbar\",\"aria-valuenow\":\"0\",\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\",style:oe({width:S()})},[...I[8]||(I[8]=[l(\"span\",{class:\"sr-only\"},null,-1)])],4)]),l(\"div\",{class:\"rounded p-2 cursor-pointer backdrop-blur-sm backdrop-opacity-30 bg-red-700/50 text-white hover:backdrop-opacity-100 transition flex items-center gap-2\",onClick:I[4]||(I[4]=K=>mt())},[l(\"span\",{class:\"grow\",innerHTML:$.value.cancel},null,8,Sd),l(\"span\",{class:\"text-xs flex-none\",innerHTML:S()},null,8,Ed)])])):b(\"\",!0)],6)),ee(l(\"input\",{type:\"hidden\",name:e.field,\"onUpdate:modelValue\":I[5]||(I[5]=K=>c.value=K)},null,8,Cd),[[ke,c.value]]),E.value?(f(),p(\"input\",Ad)):b(\"\",!0),ge(Wn,{api:e.browse,opened:u.value,i18n:t.i18n,onSelected:Rn,onClosed:Un},null,8,[\"api\",\"opened\",\"i18n\"]),n.value?b(\"\",!0):(f(),p(\"dialog\",{key:3,ref_key:\"cta\",ref:w,class:\"dialog rounded-2xl text-center\"},[l(\"header\",Td,[l(\"h4\",{innerHTML:$.value.cta_title,class:\"text-lg font-normal\"},null,8,qd),l(\"button\",{type:\"button\",class:\"text-base-content\",onClick:I[6]||(I[6]=K=>ht(w.value)),title:\"Close\"},[...I[9]||(I[9]=[l(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),l(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),l(\"article\",Od,[l(\"div\",$d,[l(\"p\",{innerHTML:H.value},null,8,Id),C.value?b(\"\",!0):(f(),p(\"p\",{key:0,innerHTML:$.value.cta_helper},null,8,Md))])]),C.value?b(\"\",!0):(f(),p(\"footer\",Hd,[l(\"menu\",Dd,[l(\"a\",{href:e.cta,class:\"btn2 btn-primary\"},[I[10]||(I[10]=l(\"i\",{class:\"fa-regular fa-gem\",\"aria-hidden\":\"true\"},null,-1)),l(\"span\",{innerHTML:$.value.cta_action},null,8,Fd)],8,Pd)])]))],512))],64))}}),Mn=()=>{document.querySelectorAll(\".gallery-selection\").forEach(e=>{if(e.dataset.init===\"1\")return;e.dataset.init=\"1\";const n=we({});n.component(\"gallery-selection\",Nd),n.mount(e)})};Mn();window.onEvent(function(){Mn()});const Bd={class:\"max-w-28 truncate\"},Vd={class:\"opacity-60 text-[10px]\"},jd=[\"aria-label\"],Rd={class:\"flex flex-col gap-4 p-3 w-52\"},Ud={class:\"flex flex-col gap-2\"},Kd={class:\"text-xs font-medium opacity-80\"},zd=[\"onKeydown\"],Wd={class:\"flex flex-col gap-2\"},Gd={class:\"text-xs font-medium opacity-80\"},Yd=[\"value\"],Qd={class:\"flex gap-1 justify-between\"},Jd=[\"onClick\"],Xd=[\"onClick\"],Zd=J({__name:\"AliasPill\",props:{alias:{},visibilityOptions:{},saveLabel:{},deleteLabel:{},aliasNameLabel:{},visibleToLabel:{}},emits:[\"update\",\"delete\"],setup(t,{emit:e}){const n=t,s=e,i=k(),r=k(null),o=k(n.alias.name),a=k(n.alias.visibility),d={all:\"bg-sky-100 text-sky-700\",members:\"bg-stone-200 text-stone-700\",admin:\"bg-amber-100 text-amber-700\",\"admin-self\":\"bg-orange-100 text-orange-700\",self:\"bg-purple-100 text-purple-700\"},c=fe(()=>{const g=\"flex items-center gap-2 px-3 py-1 rounded-full text-xs cursor-pointer select-none\",_=d[n.alias.visibility]??\"bg-base-200 text-base-content\";return`${g} ${_}`}),u=fe(()=>n.visibilityOptions.find(g=>g.value===n.alias.visibility)?.label??n.alias.visibility),m=()=>{o.value=n.alias.name,a.value=n.alias.visibility,setTimeout(()=>r.value?.focus(),50)},h=()=>{o.value.trim()&&s(\"update\",{...n.alias,name:o.value.trim(),visibility:a.value})},y=()=>{s(\"delete\",n.alias)};return(g,_)=>(f(),re(Yt(Gn),{placement:\"bottom-start\",trigger:\"click\",interactive:!0,arrow:!1,theme:\"kanka\",onShow:m,ref_key:\"tippyRef\",ref:i},{content:bt(({hide:C})=>[l(\"div\",Rd,[l(\"div\",Ud,[l(\"label\",Kd,v(t.aliasNameLabel),1),ee(l(\"input\",{\"onUpdate:modelValue\":_[1]||(_[1]=E=>o.value=E),type:\"text\",class:\"w-full text-sm\",maxlength:\"45\",ref_key:\"popoverInput\",ref:r,onKeydown:[me(Le(()=>{h(),C()},[\"prevent\"]),[\"enter\"]),me(C,[\"esc\"])]},null,40,zd),[[ke,o.value]])]),l(\"div\",Wd,[l(\"label\",Gd,v(t.visibleToLabel),1),ee(l(\"select\",{\"onUpdate:modelValue\":_[2]||(_[2]=E=>a.value=E),class:\"w-full text-sm\"},[(f(!0),p(P,null,j(t.visibilityOptions,E=>(f(),p(\"option\",{key:E.value,value:E.value},v(E.label),9,Yd))),128))],512),[[Qt,a.value]])]),l(\"div\",Qd,[l(\"button\",{type:\"button\",class:\"btn2 btn-error btn-xs btn-outline\",onClick:()=>{y(),C()}},v(t.deleteLabel),9,Jd),l(\"button\",{type:\"button\",class:\"btn2 btn-primary btn-xs\",onClick:()=>{h(),C()}},v(t.saveLabel),9,Xd)])])]),default:bt(()=>[l(\"button\",{type:\"button\",class:D(c.value)},[l(\"span\",Bd,v(t.alias.name),1),l(\"span\",Vd,v(u.value),1),l(\"span\",{class:\"leading-none flex-none opacity-60 hover:opacity-100 border border-inherit rounded-full flex items-center align-middle w-4 h-4 justify-center\",onClick:_[0]||(_[0]=Le(C=>s(\"delete\",t.alias),[\"stop\"])),\"aria-label\":t.deleteLabel},\"×\",8,jd)],2)]),_:1},512))}}),eu={key:0,class:\"flex items-start gap-1.5 text-warning-content text-xs\"},tu={class:\"flex flex-wrap gap-1 mt-0.5\"},nu=[\"href\"],su=J({__name:\"SimilarEntityAlert\",props:{entities:{},label:{}},setup(t){return(e,n)=>t.entities.length>0?(f(),p(\"div\",eu,[n[0]||(n[0]=l(\"i\",{class:\"fa-regular fa-triangle-exclamation mt-0.5 flex-none\",\"aria-hidden\":\"true\"},null,-1)),l(\"span\",null,[z(v(t.label)+\" \",1),l(\"span\",tu,[(f(!0),p(P,null,j(t.entities,s=>(f(),p(\"a\",{key:s.url,href:s.url,target:\"_blank\",class:\"text-link underline\"},v(s.name),9,nu))),128))])])])):b(\"\",!0)}});function iu(){const t=k([]),e=k(!1);let n=null,s=\"\",i=\"\",r=null;return{similarEntities:t,isChecking:e,setup:(c,u)=>{i=c,r=u},setName:c=>{if(n&&clearTimeout(n),!c||c.length<3){t.value=[];return}n=setTimeout(()=>{if(c===s)return;s=c,e.value=!0;const u=i+\"?q=\"+encodeURIComponent(c)+\"&exclude=\"+(r||\"\");fetch(u).then(m=>m.json()).then(m=>{t.value=m,e.value=!1}).catch(()=>{e.value=!1})},400)},clear:()=>{t.value=[],s=\"\"}}}const ru={class:\"flex flex-col gap-2\"},ou=[\"disabled\"],lu=[\"value\",\"placeholder\",\"required\"],au={key:0,class:\"flex flex-wrap gap-1 items-center\"},cu=[\"placeholder\",\"onKeydown\"],du={class:\"flex gap-2\"},uu=[\"value\"],fu={key:1,class:\"flex flex-wrap gap-1\"},pu={key:0,class:\"flex gap-0.5 items-center\"},mu={key:1,class:\"bg-amber-100 text-amber-700 border-amber-700 p-3 rounded-xl text-xs flex gap-1\"},hu=[\"innerHTML\"],gu=[\"value\"],vu=J({__name:\"EntityName\",props:{label:{},placeholder:{},modelValue:{},endPoint:{},entityId:{},aliases:{},aliasLimit:{},upgradeUrl:{},required:{type:Boolean},i18n:{}},emits:[\"update:modelValue\",\"update:aliases\"],setup(t,{emit:e}){const n=t,s=e,i=`entity-name-${Math.random().toString(36).slice(2)}`,r={addAlias:\"+ Alias\",aliasPlaceholder:\"Alias name\",aliasNameLabel:\"Alias name\",visibleToLabel:\"Visible to\",duplicateWarning:\"Similar entities found:\",save:\"Save\",delete:\"Delete\",aliasLimitReached:\"Alias limit reached.\",upgrade:\"Upgrade\",visibilityAll:\"All\",visibilityMembers:\"Members\",visibilityAdmin:\"Admins\",visibilityAdminSelf:\"Me & Admins\",visibilitySelf:\"Only me\"},o=fe(()=>{const S=n.i18n?JSON.parse(n.i18n):{};return{...r,...S}}),a=fe(()=>[{value:\"all\",label:o.value.visibilityAll},{value:\"members\",label:o.value.visibilityMembers},{value:\"admin\",label:o.value.visibilityAdmin},{value:\"admin-self\",label:o.value.visibilityAdminSelf},{value:\"self\",label:o.value.visibilitySelf}]),d=fe(()=>n.aliases!==void 0),c=k(n.modelValue??\"\"),u=k(n.aliases?JSON.parse(n.aliases):[]),m=k(!1),h=k(\"\"),y=k(\"all\"),g=k(null);let _=-1;const C=fe(()=>n.aliasLimit!==null&&n.aliasLimit!==void 0&&u.value.length>=n.aliasLimit),E=fe(()=>{const S=\"text-link text-xs\";return C.value?`${S} opacity-40 cursor-not-allowed`:S}),{similarEntities:$,setup:w,setName:H}=iu();Fe(()=>{n.endPoint&&w(n.endPoint,n.entityId??null)});const te=S=>{const T=S.target.value;c.value=T,s(\"update:modelValue\",T),n.endPoint&&H(T)},ne=()=>{C.value||(m.value=!m.value,m.value&&(h.value=\"\",y.value=\"all\",zn(()=>g.value?.focus())))},M=()=>{const S=h.value.trim();S&&(u.value=[...u.value,{id:_--,name:S,visibility:y.value}],s(\"update:aliases\",u.value),q())},q=()=>{m.value=!1,h.value=\"\"},L=S=>{u.value=u.value.map(T=>T.id===S.id?S:T),s(\"update:aliases\",u.value)},F=S=>{u.value=u.value.filter(T=>T.id!==S.id),s(\"update:aliases\",u.value)};return(S,T)=>(f(),p(\"div\",ru,[l(\"div\",{class:D([\"flex items-center justify-between\",{required:t.required}])},[l(\"label\",{for:i,class:\"text-xs font-medium opacity-80\"},v(t.label),1),d.value?(f(),p(\"button\",{key:0,type:\"button\",disabled:C.value,class:D(E.value),onClick:ne},[T[2]||(T[2]=l(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),z(\" \"+v(o.value.addAlias),1)],10,ou)):b(\"\",!0)],2),l(\"input\",{id:i,type:\"text\",name:\"name\",value:c.value,placeholder:t.placeholder,required:t.required,maxlength:\"191\",class:\"w-full\",\"data-1p-ignore\":\"true\",onInput:te},null,40,lu),ge(su,{entities:Yt($),label:o.value.duplicateWarning},null,8,[\"entities\",\"label\"]),m.value?(f(),p(\"div\",au,[ee(l(\"input\",{\"onUpdate:modelValue\":T[0]||(T[0]=O=>h.value=O),type:\"text\",class:\"grow min-w-0 text-sm !min-h-3 !py-0.5\",maxlength:\"45\",placeholder:o.value.aliasPlaceholder,ref_key:\"addInput\",ref:g,onKeydown:[me(Le(M,[\"prevent\"]),[\"enter\"]),me(q,[\"esc\"])]},null,40,cu),[[ke,h.value]]),l(\"div\",du,[ee(l(\"select\",{\"onUpdate:modelValue\":T[1]||(T[1]=O=>y.value=O),class:\"text-sm !min-h-3 !py-0.5\"},[(f(!0),p(P,null,j(a.value,O=>(f(),p(\"option\",{key:O.value,value:O.value},v(O.label),9,uu))),128))],512),[[Qt,y.value]]),l(\"div\",{class:\"flex gap-1 flex-none\"},[l(\"button\",{type:\"button\",class:\"px-3 py-2 rounded-lg bg-primary text-primary-content text-sm hover:opacity-80\",onClick:M},[...T[3]||(T[3]=[l(\"span\",null,\"Add\",-1)])]),l(\"button\",{type:\"button\",class:\"px-2 py-1 rounded-lg hover:bg-base-300 text-xs text-neutral-content\",onClick:q},[...T[4]||(T[4]=[l(\"i\",{class:\"fa-regular fa-xmark\",\"aria-hidden\":\"true\"},null,-1)])])])])])):b(\"\",!0),u.value.length>0?(f(),p(\"div\",fu,[(f(!0),p(P,null,j(u.value,O=>(f(),re(Zd,{key:O.id,alias:O,\"visibility-options\":a.value,\"save-label\":o.value.save,\"delete-label\":o.value.delete,\"alias-name-label\":o.value.aliasNameLabel,\"visible-to-label\":o.value.visibleToLabel,onUpdate:L,onDelete:F},null,8,[\"alias\",\"visibility-options\",\"save-label\",\"delete-label\",\"alias-name-label\",\"visible-to-label\"]))),128))])):b(\"\",!0),t.aliasLimit!==null&&t.aliasLimit!==void 0?(f(),p(P,{key:2},[C.value?b(\"\",!0):(f(),p(\"div\",pu,[(f(!0),p(P,null,j(t.aliasLimit,O=>(f(),p(\"span\",{key:O,class:D([O<=u.value.length?\"bg-accent\":\"bg-base-300\",\"h-1.5 w-4 rounded-full transition-colors\"])},null,2))),128))])),C.value?(f(),p(\"div\",mu,[T[5]||(T[5]=l(\"i\",{class:\"fa-regular fa-warning text-base\",\"aria-hidden\":\"true\"},null,-1)),l(\"span\",{innerHTML:o.value.aliasLimitReached},null,8,hu)])):b(\"\",!0)],64)):b(\"\",!0),l(\"input\",{type:\"hidden\",name:\"aliases\",value:JSON.stringify(u.value)},null,8,gu)]))}}),Hn=()=>{document.querySelectorAll(\".field-entity-name\").forEach(e=>{if(e.dataset.init===\"1\")return;e.dataset.init=\"1\";const n=we({});n.use(Yn,{defaultProps:{interactive:!0}}),n.component(\"entity-name\",vu),n.mount(e)})};Hn();window.onEvent(function(){Hn()});const et=Array(),Dn=()=>{if(window.innerWidth<768)return;document.querySelectorAll('[data-toggle=\"tooltip-ajax\"]').forEach(e=>{e._tippy||ye(e,{theme:\"entity-tooltip\",placement:e.dataset.direction??\"bottom\",allowHTML:!0,interactive:!0,delay:500,appendTo:e.dataset.append??document.body,content:'<i class=\"fa-solid fa-spin fa-spinner\" aria-hidden=\"true\" aria-label=\"loading...\" />',arrow:!0,onShow(n){let s=e.dataset.id;if(s&&s in et){n.setContent(et[s]);return}fetch(e.dataset.url).then(i=>i.json()).then(i=>{n.setContent(i[0]),et[s]=i[0]}).catch(i=>{n.setContent(`Failed loading tooltip. ${i}`)})}})})},Pn=()=>{let t=document.querySelectorAll('[data-toggle=\"tooltip\"]');t.forEach(e=>{zt(e)}),t=document.querySelectorAll(\"[data-tooltip]\"),t.forEach(e=>{zt(e)})},zt=t=>{t._tippy||ye(t,{content:t.dataset.title??t.title,theme:\"kanka\",delay:250,placement:t.dataset.direction??\"bottom\",allowHTML:t.dataset.html??!1,appendTo:t.dataset.append?document.querySelector(t.dataset.append):document.body,arrow:!0})},Fn=()=>{document.querySelectorAll(\"[data-dropdown]\").forEach(e=>{if(e._tippy)return;let n=e.parentNode.querySelectorAll(\".dropdown-menu\")[0];ye(e,{content:'<div class=\"dd-menu flex flex-col max-w-2xl\">'+n.innerHTML+\"</div>\",theme:\"kanka-dropdown\",placement:e.dataset.direction??\"bottom\",appendTo:e.dataset.append?document.querySelector(e.dataset.append):document.body,zIndex:1060,allowHTML:!0,arrow:!0,interactive:!0,trigger:\"click\",onShown(s){window.triggerEvent()}})})},yu=(t,e)=>{ye(t,e).show()};Pn();Dn();Fn();window.initTooltips=Pn;window.ajaxTooltip=Dn;window.showTooltip=yu;window.initDropdowns=Fn;const Nn=()=>{document.querySelectorAll('form[data-maintenance=\"1\"]').forEach(function(e){e.addEventListener(\"submit\",bu)})},bu=t=>{window.entityFormHasUnsavedChanges=!1,t.preventDefault();const e=t.target;_u(e);let n=new FormData(e);axios.post(e.getAttribute(\"action\"),n).then(()=>{e.submit()}).catch(s=>{s.response&&window.formErrorHandler(s.response,e),xu(e)})},_u=t=>{t.querySelectorAll(\".btn-primary\").forEach((n,s)=>{s===0&&n.classList.add(\"loading\"),n.classList.add(\"btn-disabled\")})},xu=t=>{t.querySelectorAll(\".btn-primary\").forEach(n=>{n.classList.remove(\"btn-disabled\",\"loading\")})};Nn();window.onEvent(function(){Nn()});window.onEvent(function(){window.initForeignSelect(),window.initTags(),window.initDialogs(),window.initTooltips(),window.ajaxTooltip(),window.initDropdowns(),window.initSortable(),pt(),Vn(),Bn(),jn(),Su()});function wu(){let t=document.getElementById(\"ad-client\");t&&fetch(t.src,{method:\"HEAD\",mode:\"no-cors\"}).catch(()=>{document.getElementById(\"adblock-plea\")?.classList.remove(\"hidden\")})}const ku=()=>{document.querySelectorAll(\".nav-tabs li a\")?.forEach(function(e){e.addEventListener(\"click\",function(n){n.preventDefault();const s=e.closest(\".nav-tabs-custom\");s.querySelector(\".nav-tabs li.active\")?.classList.remove(\"active\"),s.querySelector(\".tab-pane.active\")?.classList.remove(\"active\"),e.parentElement.classList.add(\"active\"),document.querySelector(e.getAttribute(\"href\"))?.classList.add(\"active\")})})},Bn=()=>{document.querySelectorAll('[data-img=\"delete\"]')?.forEach(function(t){t.addEventListener(\"click\",function(e){e.preventDefault(),document.querySelector(\"input[name=\"+t.dataset.target+\"]\").value=1,t.closest(\".preview\").classList.add(\"hidden\")})})},pt=()=>{document.querySelectorAll(\".pagination-ajax-links a\").forEach(function(t){t.dataset.loaded!==\"1\"&&(t.dataset.loaded=\"1\",t.addEventListener(\"click\",function(e){e.preventDefault();const n=document.querySelector(\".pagination-ajax-body\");n.querySelector(\".modal-loading\").classList.remove(\"hidden\"),n.querySelector(\".pagination-ajax-content\").classList.add(\"hidden\"),fetch(t.getAttribute(\"href\")).then(s=>s.text()).then(s=>{n.parentNode.innerHTML=s,pt(),window.triggerEvent()})}))})},Vn=()=>{document.querySelectorAll('[data-toggle=\"confirm-delete\"]')?.forEach(function(t){t.dataset.loaded!==\"1\"&&(t.dataset.loaded=\"1\",t.addEventListener(\"click\",function(e){if(e.preventDefault(),t.dataset.confirming===\"1\"){t.classList.add(\"loading\"),t.innerHTML=\"\";const s=document.querySelector(t.dataset.target);s?s.requestSubmit():console.error(\"Unknown target\",s);return}const n=t.innerHTML;t.dataset.confirming=\"1\",t.querySelector(\"span\").classList.add(\"md:inline\"),t.querySelector(\"span\").innerHTML=t.dataset.confirm,t.addEventListener(\"blur\",function(){t.dataset.confirming=\"0\",t.innerHTML=n},{once:!0})}))}),document.querySelectorAll('a[data-toggle=\"delete-form\"]')?.forEach(function(t){t.dataset.loaded!==\"1\"&&(t.dataset.loaded=\"1\",t.addEventListener(\"click\",function(e){e.preventDefault(),document.querySelector(t.dataset.target).requestSubmit()}))})},Lu=()=>{document.querySelector(\".submenu-switcher\")?.addEventListener(\"change\",function(t){t.preventDefault();const e=t.target,n=e.options[e.selectedIndex];window.location.href=n.dataset.route})},jn=()=>{document.querySelectorAll(\"[data-dismisses]\").forEach(e=>{e.addEventListener(\"click\",function(n){n.preventDefault();let s=document.querySelector(this.dataset.dismisses);s.classList.remove(\"opacity-100\"),s.classList.add(\"opacity-0\"),s.addEventListener(\"transitionend\",()=>{s.remove()},{once:!0})})})},Su=()=>{const t=document.querySelector(\".btn-manage-perm\");t&&t.addEventListener(\"click\",function(e){e.preventDefault(),window.closeDialog(\"primary-dialog\");let n=t.dataset.target;document.querySelector(n).click()})};window.initForeignSelect();window.initDialogs();Lu();ku();pt();Vn();Bn();jn();wu();\n"
  },
  {
    "path": "public/build/assets/app-CcekkIPy.css",
    "content": "@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:\"\";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-700:oklch(55.5% .163 48.998);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-teal-500:oklch(70.4% .14 182.503);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-600:oklch(51.1% .262 276.966);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-700:oklch(49.6% .265 301.924);--color-pink-500:oklch(65.6% .241 354.308);--color-pink-800:oklch(45.9% .187 3.815);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-700:oklch(37.4% .01 67.558);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--blur-sm:8px;--blur-lg:16px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-base-100:hsl(var(--b1)/1);--color-base-200:hsl(var(--b2)/1);--color-base-300:hsl(var(--b3)/1);--color-base-content:hsl(var(--bc)/1);--color-error:hsl(var(--er)/1);--color-error-content:hsl(var(--erc)/1);--color-primary:hsl(var(--p)/1);--color-primary-content:hsl(var(--pc)/1);--color-primary-focus:hsl(var(--pf)/1);--color-secondary:hsl(var(--s)/1);--color-accent:hsl(var(--a)/1);--color-accent-content:hsl(var(--ac)/1);--color-neutral:hsl(var(--n)/1);--color-neutral-content:hsl(var(--nc)/1);--color-success:hsl(var(--su)/1);--color-success-content:hsl(var(--suc)/1);--color-warning:hsl(var(--wa)/1);--color-warning-content:hsl(var(--wac)/1);--color-info:hsl(var(--in)/1)}html{color-scheme:light;accent-color:hsl(var(--a)/1)}:root{--content-wrapper-background:#f6f6f6;--boosted:338 78% 48%;--p:223 73% 24%;--pf:213 100% 24.9%;--pc:255 0% 100%;--s:210 50% 96.1%;--sf:210 52.2% 91%;--sc:223 61.8% 30.8%;--a:41 74% 53%;--af:41 74% 46%;--ac:151 21% 13%;--n:220 22% 92%;--nf:227 12% 71%;--nc:218 14.6% 54.9%;--b1:0 0% 100%;--b2:0 0% 93%;--b3:0 0% 86%;--bc:233 27% 13%;--in:210 50% 93.1%;--inc:223 61.8% 30.8%;--wa:48 96.5% 88.8%;--wac:26 90.5% 37.1%;--er:352.65 96.08% 90%;--erc:350 89.2% 60.2%;--su:152 81% 95.9%;--suc:163 88.1% 19.8%;--si:0 0% 20%;--sif:0 0% 10%;--sic:0 0% 90%;--rounded-btn:.678rem;--rounded-badge:.25rem;--animation-btn:0;--btn-focus-scale:1;--btn-text-case:inherit;--tab-radius:.25rem;--tab-border:0px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}h1{letter-spacing:-.5px;font-size:2rem;font-weight:300}h2{letter-spacing:-.5px;font-size:1.8rem;font-weight:300}h3{font-size:1.5rem;font-style:normal;font-weight:400}h4{letter-spacing:.25px;font-size:1.1rem;font-style:normal;font-weight:400}h5{font-size:1rem;font-style:normal;font-weight:400}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\\!sticky{position:sticky!important}.absolute{position:absolute}.absolute\\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-1{inset:calc(var(--spacing)*1)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\\.5{top:calc(var(--spacing)*1.5)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-12{top:calc(var(--spacing)*12)}.top-14{top:calc(var(--spacing)*14)}.top-auto{top:auto}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-4{left:calc(var(--spacing)*4)}.left-auto{left:auto}.isolate{isolation:isolate}.z-0{z-index:0}.z-5{z-index:5}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-700{z-index:700}.z-820{z-index:820}.z-821{z-index:821}.z-840{z-index:840}.z-900{z-index:900}.z-1000{z-index:1000}.z-1001{z-index:1001}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.col-1{grid-column:1}.col-2{grid-column:2}.col-3{grid-column:3}.col-4{grid-column:4}.col-5{grid-column:5}.col-6{grid-column:6}.col-7{grid-column:7}.col-8{grid-column:8}.col-9{grid-column:9}.col-10{grid-column:10}.col-11{grid-column:11}.col-12{grid-column:12}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.row-span-2{grid-row:span 2/span 2}.float-left{float:left}.float-none{float:none}.float-right{float:right}.clear-both{clear:both}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.container\\!{width:100%!important}@media(min-width:40rem){.container\\!{max-width:40rem!important}}@media(min-width:48rem){.container\\!{max-width:48rem!important}}@media(min-width:64rem){.container\\!{max-width:64rem!important}}@media(min-width:80rem){.container\\!{max-width:80rem!important}}@media(min-width:96rem){.container\\!{max-width:96rem!important}}.m-0{margin:calc(var(--spacing)*0)}.m-1{margin:calc(var(--spacing)*1)}.m-2{margin:calc(var(--spacing)*2)}.m-3{margin:calc(var(--spacing)*3)}.m-4{margin:calc(var(--spacing)*4)}.m-5{margin:calc(var(--spacing)*5)}.m-1386{margin:calc(var(--spacing)*1386)}.m-3601{margin:calc(var(--spacing)*3601)}.m-4512{margin:calc(var(--spacing)*4512)}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0{margin-block:calc(var(--spacing)*0)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.my-8{margin-block:calc(var(--spacing)*8)}.my-auto{margin-block:auto}.ms-0{margin-inline-start:calc(var(--spacing)*0)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-px{margin-top:1px}.mr-0\\!{margin-right:calc(var(--spacing)*0)!important}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-5{margin-right:calc(var(--spacing)*5)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-20{margin-bottom:calc(var(--spacing)*20)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-11{margin-left:calc(var(--spacing)*11)}.ml-16{margin-left:calc(var(--spacing)*16)}.ml-21{margin-left:calc(var(--spacing)*21)}.ml-\\[-8px\\]{margin-left:-8px}.ml-auto{margin-left:auto}.\\!flex{display:flex!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\\!{display:flex!important}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.hidden\\!{display:none!important}.inline{display:inline}.inline\\!{display:inline!important}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table\\!{display:table!important}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-3\\/1{aspect-ratio:3}.aspect-4\\/3{aspect-ratio:4/3}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-0{height:calc(var(--spacing)*0)}.h-0\\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-1\\/2{height:50%}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-25{height:calc(var(--spacing)*25)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-44{height:calc(var(--spacing)*44)}.h-50{height:calc(var(--spacing)*50)}.h-52{height:calc(var(--spacing)*52)}.h-60{height:calc(var(--spacing)*60)}.h-75{height:calc(var(--spacing)*75)}.h-100{height:calc(var(--spacing)*100)}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-14{max-height:calc(var(--spacing)*14)}.max-h-52{max-height:calc(var(--spacing)*52)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-\\[80vh\\]{max-height:80vh}.max-h-\\[300px\\]{max-height:300px}.max-h-\\[400px\\]{max-height:400px}.max-h-full{max-height:100%}.\\!min-h-3{min-height:calc(var(--spacing)*3)!important}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-12{min-height:calc(var(--spacing)*12)}.min-h-50{min-height:calc(var(--spacing)*50)}.min-h-80{min-height:calc(var(--spacing)*80)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-25{width:calc(var(--spacing)*25)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-46{width:calc(var(--spacing)*46)}.w-48{width:calc(var(--spacing)*48)}.w-50{width:calc(var(--spacing)*50)}.w-52{width:calc(var(--spacing)*52)}.w-60{width:calc(var(--spacing)*60)}.w-72{width:calc(var(--spacing)*72)}.w-75{width:calc(var(--spacing)*75)}.w-80{width:calc(var(--spacing)*80)}.w-100{width:calc(var(--spacing)*100)}.w-\\[25\\%\\]{width:25%}.w-\\[47\\%\\]{width:47%}.w-\\[220px\\]{width:220px}.w-\\[800px\\]{width:800px}.w-auto{width:auto}.w-fit{width:fit-content}.w-fit\\!{width:fit-content!important}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-28{max-width:calc(var(--spacing)*28)}.max-w-32{max-width:calc(var(--spacing)*32)}.max-w-\\[90vw\\]{max-width:90vw}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-56{min-width:calc(var(--spacing)*56)}.min-w-72{min-width:calc(var(--spacing)*72)}.min-w-\\[150px\\]{min-width:150px}.min-w-\\[200px\\]{min-width:200px}.min-w-\\[250px\\]{min-width:250px}.min-w-fit{min-width:fit-content}.min-w-max{min-width:max-content}.flex-0{flex:0}.flex-1{flex:1}.flex-3{flex:3}.flex-initial{flex:0 auto}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.flex-shrink-1,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-0{flex-grow:0}.flex-grow-1,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-1\\/4{flex-basis:25%}.basis-2\\/4{flex-basis:50%}.basis-3\\/4{flex-basis:75%}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-270{rotate:270deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform\\!{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)!important}.animate-ping{animation:var(--animate-ping)}.cursor-crosshair{cursor:crosshair}.cursor-move{cursor:move}.cursor-move\\!{cursor:move!important}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-pt-16{scroll-padding-top:calc(var(--spacing)*16)}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-flow-row-dense{grid-auto-flow:dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.content-center{align-content:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-items-stretch{justify-items:stretch}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-16{gap:calc(var(--spacing)*16)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-2xl{border-top-left-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-2xl{border-top-left-radius:var(--radius-2xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-2xl{border-top-right-radius:var(--radius-2xl);border-bottom-right-radius:var(--radius-2xl)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-tr-2xl{border-top-right-radius:var(--radius-2xl)}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-0\\!{border-style:var(--tw-border-style)!important;border-width:0!important}.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-accent{border-color:var(--color-accent)}.border-amber-700{border-color:var(--color-amber-700)}.border-base-100{border-color:var(--color-base-100)}.border-base-200{border-color:var(--color-base-200)}.border-base-300{border-color:var(--color-base-300)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-blue-900{border-color:var(--color-blue-900)}.border-error{border-color:var(--color-error)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-800{border-color:var(--color-gray-800)}.border-info{border-color:var(--color-info)}.border-inherit{border-color:inherit}.border-primary{border-color:var(--color-primary)}.border-red-300{border-color:var(--color-red-300)}.border-red-400{border-color:var(--color-red-400)}.border-red-500{border-color:var(--color-red-500)}.border-secondary{border-color:var(--color-secondary)}.border-slate-600{border-color:var(--color-slate-600)}.border-success{border-color:var(--color-success)}.border-warning{border-color:var(--color-warning)}.border-white{border-color:var(--color-white)}.\\!bg-accent{background-color:var(--color-accent)!important}.\\!bg-base-100{background-color:var(--color-base-100)!important}.\\!bg-error{background-color:var(--color-error)!important}.\\!bg-info{background-color:var(--color-info)!important}.\\!bg-neutral{background-color:var(--color-neutral)!important}.\\!bg-primary{background-color:var(--color-primary)!important}.\\!bg-secondary{background-color:var(--color-secondary)!important}.\\!bg-success{background-color:var(--color-success)!important}.\\!bg-warning{background-color:var(--color-warning)!important}.bg-accent{background-color:var(--color-accent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-base-100{background-color:var(--color-base-100)}.bg-base-100\\/70{background-color:color-mix(in srgb,hsl(var(--b1)/1)70%,transparent)}@supports (color:color-mix(in lab,red,red)){.bg-base-100\\/70{background-color:color-mix(in oklab,var(--color-base-100)70%,transparent)}}.bg-base-100\\/80{background-color:color-mix(in srgb,hsl(var(--b1)/1)80%,transparent)}@supports (color:color-mix(in lab,red,red)){.bg-base-100\\/80{background-color:color-mix(in oklab,var(--color-base-100)80%,transparent)}}.bg-base-200{background-color:var(--color-base-200)}.bg-base-200\\/50{background-color:color-mix(in srgb,hsl(var(--b2)/1)50%,transparent)}@supports (color:color-mix(in lab,red,red)){.bg-base-200\\/50{background-color:color-mix(in oklab,var(--color-base-200)50%,transparent)}}.bg-base-300{background-color:var(--color-base-300)}.bg-base-content\\/20{background-color:color-mix(in srgb,hsl(var(--bc)/1)20%,transparent)}@supports (color:color-mix(in lab,red,red)){.bg-base-content\\/20{background-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.bg-black\\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-error{background-color:var(--color-error)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-info{background-color:var(--color-info)}.bg-neutral{background-color:var(--color-neutral)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-300{background-color:var(--color-orange-300)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-primary{background-color:var(--color-primary)}.bg-primary-content{background-color:var(--color-primary-content)}.bg-primary\\/5{background-color:color-mix(in srgb,hsl(var(--p)/1)5%,transparent)}@supports (color:color-mix(in lab,red,red)){.bg-primary\\/5{background-color:color-mix(in oklab,var(--color-primary)5%,transparent)}}.bg-primary\\/20{background-color:color-mix(in srgb,hsl(var(--p)/1)20%,transparent)}@supports (color:color-mix(in lab,red,red)){.bg-primary\\/20{background-color:color-mix(in oklab,var(--color-primary)20%,transparent)}}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-300{background-color:var(--color-red-300)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-700\\/50{background-color:#bf000f80}@supports (color:color-mix(in lab,red,red)){.bg-red-700\\/50{background-color:color-mix(in oklab,var(--color-red-700)50%,transparent)}}.bg-red-900\\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.bg-red-900\\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.bg-secondary{background-color:var(--color-secondary)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-stone-200{background-color:var(--color-stone-200)}.bg-success{background-color:var(--color-success)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-white{background-color:var(--color-white)}.bg-yellow-300{background-color:var(--color-yellow-300)}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-none{background-image:none}.from-black\\/60{--tw-gradient-from:#0009}@supports (color:color-mix(in lab,red,red)){.from-black\\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent)}}.from-black\\/60{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-black\\/70{--tw-gradient-from:#000000b3}@supports (color:color-mix(in lab,red,red)){.from-black\\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent)}}.from-black\\/70{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-700\\/50{--tw-gradient-from:#36415380}@supports (color:color-mix(in lab,red,red)){.from-gray-700\\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.from-gray-700\\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\!{padding:calc(var(--spacing)*1)!important}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\\!{padding-inline:calc(var(--spacing)*0)!important}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-16{padding-inline:calc(var(--spacing)*16)}.\\!py-0\\.5{padding-block:calc(var(--spacing)*.5)!important}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-12{padding-top:calc(var(--spacing)*12)}.pr-0{padding-right:calc(var(--spacing)*0)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-10{padding-right:calc(var(--spacing)*10)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-left\\!{text-align:left!important}.text-right{text-align:right}.align-baseline{vertical-align:baseline}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-middle\\!{vertical-align:middle!important}.align-text-bottom{vertical-align:text-bottom}.align-text-top{vertical-align:text-top}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-xs\\!{font-size:var(--text-xs)!important;line-height:var(--tw-leading,var(--text-xs--line-height))!important}.text-\\[1\\.2rem\\]{font-size:1.2rem}.text-\\[1\\.3rem\\]{font-size:1.3rem}.text-\\[1\\.4rem\\]{font-size:1.4rem}.text-\\[8px\\]{font-size:8px}.text-\\[10px\\]{font-size:10px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-nowrap{text-wrap:nowrap}.text-wrap{text-wrap:wrap}.break-normal{overflow-wrap:normal;word-break:normal}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-accent{color:var(--color-accent)}.text-amber-700{color:var(--color-amber-700)}.text-base-content{color:var(--color-base-content)}.text-base-content\\/50{color:color-mix(in srgb,hsl(var(--bc)/1)50%,transparent)}@supports (color:color-mix(in lab,red,red)){.text-base-content\\/50{color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.text-base-content\\/70{color:color-mix(in srgb,hsl(var(--bc)/1)70%,transparent)}@supports (color:color-mix(in lab,red,red)){.text-base-content\\/70{color:color-mix(in oklab,var(--color-base-content)70%,transparent)}}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-error{color:var(--color-error)}.text-error-content{color:var(--color-error-content)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-info{color:var(--color-info)}.text-inherit{color:inherit}.text-neutral-content{color:var(--color-neutral-content)}.text-neutral-content\\/70{color:color-mix(in srgb,hsl(var(--nc)/1)70%,transparent)}@supports (color:color-mix(in lab,red,red)){.text-neutral-content\\/70{color:color-mix(in oklab,var(--color-neutral-content)70%,transparent)}}.text-orange-300{color:var(--color-orange-300)}.text-orange-500{color:var(--color-orange-500)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-800{color:var(--color-pink-800)}.text-primary{color:var(--color-primary)}.text-primary-content{color:var(--color-primary-content)}.text-purple-500{color:var(--color-purple-500)}.text-purple-700{color:var(--color-purple-700)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-800{color:var(--color-red-800)}.text-secondary{color:var(--color-secondary)}.text-sky-700{color:var(--color-sky-700)}.text-slate-800{color:var(--color-slate-800)}.text-stone-700{color:var(--color-stone-700)}.text-success{color:var(--color-success)}.text-success-content{color:var(--color-success-content)}.text-teal-500{color:var(--color-teal-500)}.text-warning{color:var(--color-warning)}.text-warning-content{color:var(--color-warning-content)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.italic\\!{font-style:italic!important}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline\\!{text-decoration-line:underline!important}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.mix-blend-color-dodge{mix-blend-mode:color-dodge}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-gray-500\\/20{--tw-shadow-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.shadow-gray-500\\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-gray-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}.ring-primary\\/30{--tw-ring-color:color-mix(in srgb,hsl(var(--p)/1)30%,transparent)}@supports (color:color-mix(in lab,red,red)){.ring-primary\\/30{--tw-ring-color:color-mix(in oklab,var(--color-primary)30%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur\\!{--tw-blur:blur(8px)!important;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-30{--tw-backdrop-opacity:opacity(30%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\\[character\\:76\\]{character:76}.\\[character\\:123\\]{character:123}.\\[character\\:4092\\]{character:4092}.\\[entity\\:2\\]{entity:2}.\\[entity\\:10\\]{entity:10}.\\[entity\\:123\\]{entity:123}.\\[type\\:id\\]{type:id}.\\[type\\:id\\|config\\.\\.\\.\\]{type:id|config...}@media(hover:hover){.group-hover\\:-translate-y-0\\.5:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\\:translate-y-0\\.5:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\\:bg-base-100:is(:where(.group):hover *){background-color:var(--color-base-100)}.group-hover\\:text-primary:is(:where(.group):hover *){color:var(--color-primary)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-\\[\\.status-down\\]\\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.selection\\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\\:text-white ::selection{color:var(--color-white)}.selection\\:text-white::selection{color:var(--color-white)}.backdrop\\:bg-black\\/50::backdrop{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.backdrop\\:bg-black\\/50::backdrop{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.after\\:mr-1:after{content:var(--tw-content);margin-right:calc(var(--spacing)*1)}.after\\:content-\\[\\'\\,\\'\\]:after{--tw-content:\",\";content:var(--tw-content)}.last\\:after\\:content-none:last-child:after{content:var(--tw-content);--tw-content:none;content:none}.odd\\:bg-base-200:nth-child(odd){background-color:var(--color-base-200)}@media(hover:hover){.hover\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:rotate-45:hover{rotate:45deg}.hover\\:rotate-90:hover{rotate:90deg}.hover\\:border-b-2:hover{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hover\\:border-primary:hover{border-color:var(--color-primary)}.hover\\:bg-accent:hover{background-color:var(--color-accent)}.hover\\:bg-base-100:hover{background-color:var(--color-base-100)}.hover\\:bg-base-200:hover{background-color:var(--color-base-200)}.hover\\:bg-base-200\\/50:hover{background-color:color-mix(in srgb,hsl(var(--b2)/1)50%,transparent)}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-base-200\\/50:hover{background-color:color-mix(in oklab,var(--color-base-200)50%,transparent)}}.hover\\:bg-base-300:hover{background-color:var(--color-base-300)}.hover\\:bg-blue-300:hover{background-color:var(--color-blue-300)}.hover\\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\\:bg-error:hover{background-color:var(--color-error)}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-primary-content:hover{background-color:var(--color-primary-content)}.hover\\:bg-primary-focus:hover{background-color:var(--color-primary-focus)}.hover\\:bg-red-400:hover{background-color:var(--color-red-400)}.hover\\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\\:bg-red-900\\/90:hover{background-color:#82181ae6}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-red-900\\/90:hover{background-color:color-mix(in oklab,var(--color-red-900)90%,transparent)}}.hover\\:font-bold:hover{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.hover\\:font-semibold:hover{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.hover\\:text-accent:hover{color:var(--color-accent)}.hover\\:text-accent-content:hover{color:var(--color-accent-content)}.hover\\:text-base-content:hover{color:var(--color-base-content)}.hover\\:text-blue-800:hover{color:var(--color-blue-800)}.hover\\:text-blue-900:hover{color:var(--color-blue-900)}.hover\\:text-error-content:hover{color:var(--color-error-content)}.hover\\:text-orange-500:hover{color:var(--color-orange-500)}.hover\\:text-primary:hover{color:var(--color-primary)}.hover\\:text-primary-focus:hover{color:var(--color-primary-focus)}.hover\\:text-red-300:hover{color:var(--color-red-300)}.hover\\:text-warning:hover{color:var(--color-warning)}.hover\\:text-white:hover{color:var(--color-white)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-xs:hover{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:backdrop-opacity-100:hover{--tw-backdrop-opacity:opacity(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}}.focus\\:z-20:focus{z-index:20}.focus\\:border-primary:focus{border-color:var(--color-primary)}.focus\\:bg-base-200:focus{background-color:var(--color-base-200)}.focus\\:text-primary:focus{color:var(--color-primary)}.focus\\:opacity-100:focus{opacity:1}.focus\\:shadow-md:focus{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-primary:focus{--tw-ring-color:var(--color-primary)}.focus\\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\\:opacity-50:disabled{opacity:.5}@media not all and (min-width:40rem){.max-sm\\:hidden{display:none}}@media(min-width:40rem){.sm\\:col-span-3{grid-column:span 3/span 3}.sm\\:block{display:block}.sm\\:flex{display:flex}.sm\\:hidden{display:none}.sm\\:inline{display:inline}.sm\\:inline-block{display:inline-block}.sm\\:table-cell{display:table-cell}.sm\\:w-3\\/4{width:75%}.sm\\:w-48{width:calc(var(--spacing)*48)}.sm\\:w-60{width:calc(var(--spacing)*60)}.sm\\:w-80{width:calc(var(--spacing)*80)}.sm\\:w-96{width:calc(var(--spacing)*96)}.sm\\:flex-1{flex:1}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\:flex-row{flex-direction:row}.sm\\:items-center{align-items:center}.sm\\:justify-between{justify-content:space-between}.sm\\:gap-3{gap:calc(var(--spacing)*3)}.sm\\:gap-5{gap:calc(var(--spacing)*5)}.sm\\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.sm\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.sm\\:pr-4{padding-right:calc(var(--spacing)*4)}}@media(min-width:48rem){.md\\:relative{position:relative}.md\\:sticky{position:sticky}.md\\:top-24{top:calc(var(--spacing)*24)}.md\\:col-span-1{grid-column:span 1/span 1}.md\\:col-span-2{grid-column:span 2/span 2}.md\\:col-span-3{grid-column:span 3/span 3}.md\\:col-span-4{grid-column:span 4/span 4}.md\\:col-span-5{grid-column:span 5/span 5}.md\\:col-span-6{grid-column:span 6/span 6}.md\\:col-span-7{grid-column:span 7/span 7}.md\\:col-span-8{grid-column:span 8/span 8}.md\\:col-span-9{grid-column:span 9/span 9}.md\\:col-span-10{grid-column:span 10/span 10}.md\\:col-span-11{grid-column:span 11/span 11}.md\\:col-span-12{grid-column:span 12/span 12}.md\\:mt-6{margin-top:calc(var(--spacing)*6)}.md\\:mt-28{margin-top:calc(var(--spacing)*28)}.md\\:block{display:block}.md\\:flex{display:flex}.md\\:grid{display:grid}.md\\:hidden{display:none}.md\\:inline{display:inline}.md\\:inline\\!{display:inline!important}.md\\:inline-block{display:inline-block}.md\\:table-cell{display:table-cell}.md\\:h-16{height:calc(var(--spacing)*16)}.md\\:h-32{height:calc(var(--spacing)*32)}.md\\:h-36{height:calc(var(--spacing)*36)}.md\\:w-8{width:calc(var(--spacing)*8)}.md\\:w-16{width:calc(var(--spacing)*16)}.md\\:w-40{width:calc(var(--spacing)*40)}.md\\:w-48{width:calc(var(--spacing)*48)}.md\\:w-80{width:calc(var(--spacing)*80)}.md\\:w-96{width:calc(var(--spacing)*96)}.md\\:w-fit{width:fit-content}.md\\:w-full{width:100%}.md\\:flex-none{flex:none}.md\\:grow-0{flex-grow:0}.md\\:basis-1\\/4{flex-basis:25%}.md\\:basis-3\\/4{flex-basis:75%}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\\:flex-col{flex-direction:column}.md\\:flex-row{flex-direction:row}.md\\:flex-nowrap{flex-wrap:nowrap}.md\\:flex-wrap{flex-wrap:wrap}.md\\:items-center{align-items:center}.md\\:items-start{align-items:flex-start}.md\\:justify-between{justify-content:space-between}.md\\:justify-start{justify-content:flex-start}.md\\:gap-0{gap:calc(var(--spacing)*0)}.md\\:gap-2{gap:calc(var(--spacing)*2)}.md\\:gap-3{gap:calc(var(--spacing)*3)}.md\\:gap-4{gap:calc(var(--spacing)*4)}.md\\:gap-5{gap:calc(var(--spacing)*5)}.md\\:gap-6{gap:calc(var(--spacing)*6)}.md\\:gap-10{gap:calc(var(--spacing)*10)}.md\\:self-auto{align-self:auto}.md\\:rounded-2xl{border-radius:var(--radius-2xl)}.md\\:rounded-xl{border-radius:var(--radius-xl)}.md\\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.md\\:p-4{padding:calc(var(--spacing)*4)}.md\\:p-5{padding:calc(var(--spacing)*5)}.md\\:p-6{padding:calc(var(--spacing)*6)}.md\\:px-3{padding-inline:calc(var(--spacing)*3)}.md\\:px-6{padding-inline:calc(var(--spacing)*6)}.md\\:px-10{padding-inline:calc(var(--spacing)*10)}.md\\:py-14{padding-block:calc(var(--spacing)*14)}.md\\:pt-24{padding-top:calc(var(--spacing)*24)}.md\\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.md\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(min-width:64rem){.lg\\:col-span-1{grid-column:span 1/span 1}.lg\\:col-span-2{grid-column:span 2/span 2}.lg\\:col-span-3{grid-column:span 3/span 3}.lg\\:col-span-4{grid-column:span 4/span 4}.lg\\:col-span-5{grid-column:span 5/span 5}.lg\\:col-span-6{grid-column:span 6/span 6}.lg\\:col-span-7{grid-column:span 7/span 7}.lg\\:col-span-8{grid-column:span 8/span 8}.lg\\:col-span-9{grid-column:span 9/span 9}.lg\\:col-span-10{grid-column:span 10/span 10}.lg\\:col-span-11{grid-column:span 11/span 11}.lg\\:col-span-12{grid-column:span 12/span 12}.lg\\:mx-0{margin-inline:calc(var(--spacing)*0)}.lg\\:mx-auto{margin-inline:auto}.lg\\:block{display:block}.lg\\:flex{display:flex}.lg\\:hidden{display:none}.lg\\:inline{display:inline}.lg\\:table-cell{display:table-cell}.lg\\:w-16{width:calc(var(--spacing)*16)}.lg\\:w-40{width:calc(var(--spacing)*40)}.lg\\:w-80{width:calc(var(--spacing)*80)}.lg\\:max-w-2xl{max-width:var(--container-2xl)}.lg\\:max-w-7xl{max-width:var(--container-7xl)}.lg\\:max-w-none{max-width:none}.lg\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\\:flex-row{flex-direction:row}.lg\\:gap-2{gap:calc(var(--spacing)*2)}.lg\\:gap-3{gap:calc(var(--spacing)*3)}.lg\\:gap-4{gap:calc(var(--spacing)*4)}.lg\\:gap-5{gap:calc(var(--spacing)*5)}.lg\\:gap-6{gap:calc(var(--spacing)*6)}.lg\\:gap-8{gap:calc(var(--spacing)*8)}.lg\\:gap-10{gap:calc(var(--spacing)*10)}.lg\\:gap-12{gap:calc(var(--spacing)*12)}.lg\\:gap-20{gap:calc(var(--spacing)*20)}.lg\\:p-3{padding:calc(var(--spacing)*3)}.lg\\:py-12{padding-block:calc(var(--spacing)*12)}}@media(min-width:80rem){.xl\\:col-span-2{grid-column:span 2/span 2}.xl\\:col-span-3{grid-column:span 3/span 3}.xl\\:col-span-4{grid-column:span 4/span 4}.xl\\:flex{display:flex}.xl\\:hidden{display:none}.xl\\:inline{display:inline}.xl\\:aspect-auto{aspect-ratio:auto}.xl\\:w-1\\/2{width:50%}.xl\\:w-80{width:calc(var(--spacing)*80)}.xl\\:w-auto{width:auto}.xl\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\\:gap-4{gap:calc(var(--spacing)*4)}.xl\\:gap-5{gap:calc(var(--spacing)*5)}.xl\\:gap-8{gap:calc(var(--spacing)*8)}.xl\\:px-0{padding-inline:calc(var(--spacing)*0)}.xl\\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:96rem){.\\32xl\\:mx-auto{margin-inline:auto}.\\32xl\\:min-w-7xl{min-width:var(--container-7xl)}.\\32xl\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.ltr\\:flex-row:where(:dir(ltr),[dir=ltr],[dir=ltr] *){flex-direction:row}.rtl\\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}@media(prefers-color-scheme:dark){.dark\\:hidden{display:none}.dark\\:inline{display:inline}.dark\\:border-gray-700{border-color:var(--color-gray-700)}.dark\\:border-slate-500{border-color:var(--color-slate-500)}.dark\\:bg-gray-900{background-color:var(--color-gray-900)}.dark\\:bg-slate-800{background-color:var(--color-slate-800)}.dark\\:text-gray-400{color:var(--color-gray-400)}.dark\\:text-orange-300{color:var(--color-orange-300)}.dark\\:text-slate-200{color:var(--color-slate-200)}.dark\\:text-slate-400{color:var(--color-slate-400)}.dark\\:text-white{color:var(--color-white)}}@media print{.print\\:hidden{display:none}}}.text-red{color:#dd4b39!important}.text-yellow{color:#f39c12!important}.text-black{color:#111!important}.text-white{color:#fff!important}.text-sidebar-content{--tw-text-opacity:1;color:hsl(var(--sic)/var(--tw-text-opacity))}.\\!text-sidebar-content{--tw-text-opacity:1;color:hsl(var(--sic)/var(--tw-text-opacity))!important}.help-block{--tw-text-opacity:1;color:hsl(var(--nc)/var(--tw-text-opacity))}.gradient-to-base-100{background:linear-gradient(transparent 0px,var(--dashboard-preview-gradient,hsl(var(--b1)/1)))}body{--tw-background-opacity:1;background-color:var(--body-background,var(--content-wrapper-background,hsl(var(--b1)/var(--tw-background-opacity))));--tw-text-opacity:1;color:var(--body-text,hsl(var(--bc)/var(--tw-text-opacity)))}hr{border-color:hsl(var(--bc)/var(--tw-border-opacity));--tw-border-opacity:.1}.entity-content a,.text-link{--tw-text-opacity:1;color:var(--link-text,hsl(var(--p)/var(--tw-text-opacity)))}:is(.entity-content a,.text-link):hover{--tw-text-opacity:1;color:var(--link-text,hsl(var(--pf)/var(--tw-text-opacity)))}:is(.entity-content a,.text-link):focus{--tw-text-opacity:1;color:var(--link-focus,hsl(var(--pf)/var(--tw-text-opacity)))}a.neutral-link,a.neutral-link:hover,a.neutral-link:focus{--tw-text-opacity:1;color:hsl(var(--nc)/var(--tw-text-opacity))}h1,h2,h3,h4,h5,h6,h1>small,.panel-title{--tw-text-opacity:1;color:var(--header-text,hsl(var(--bc)/var(--tw-text-opacity)))}.bg-wrapper{background-color:var(--content-wrapper-background,hsl(var(--b1)/var(--tw-background-opacity)));--tw-background-opacity:1}input,textarea,.ts-wrapper,select,.form-control{border-width:1px;border-color:hsl(var(--bc)/var(--tw-border-opacity));--tw-border-opacity:.1;--tw-bg-opacity:1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));border-radius:var(--rounded-btn,.5rem);box-shadow:none;color:inherit;line-height:normal}input,textarea,select{padding:.6rem .8rem}input::placeholder,textarea::placeholder,select::placeholder,.form-control::placeholder{--tw-text-opacity:.4;color:hsl(var(--bc)/var(--tw-text-opacity))}input[type=text],input[type=date],input[type=number],input[type=file],select{min-height:2.1rem}input:focus,select:focus,.textarea:focus,.form-control:focus{outline-offset:2px;outline-width:2px;outline-style:solid;outline-color:hsl(var(--p)/.3);box-shadow:none;border-color:#0000}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{--tw-border-opacity:1;border-color:hsl(var(--b2)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--b2)/var(--tw-bg-opacity));--tw-text-opacity:.2}input[type=checkbox]{-webkit-appearance:none;--tw-accent-opacity:1;accent-color:hsl(var(--p)/var(--tw-accent-opacity));margin:0;padding:.8rem;position:relative}input[type=checkbox]:checked{--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}input[type=checkbox]:checked:after{content:var(--checkbox-content,\"✔\");font-size:1.4rem;position:absolute;top:0;left:.2rem}.ts-wrapper{border:none;padding:0}.modal-content .modal-body{background-color:hsl(var(--b1)/1)}.modal-content .modal-header,.modal-content .modal-footer{background-color:hsl(var(--b1)/1);border-color:hsl(var(--bc)/var(--tw-border-opacity,1));--tw-border-opacity:.1}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus,.pagination>li>a{--tw-bg-opacity:1;background-color:hsl(var(--b2)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity));border-color:hsl(var(--b2)/var(--tw-border-opacity));border-width:0}:is(.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus,.pagination>li>a):hover{--tw-border-opacity:1;border-color:hsl(var(--b3)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--b3)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity));border-width:0}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity));border-width:0}.box,.panel{border:var(--box-border,none);--tw-background-opacity:1;background-color:var(--box-background,hsl(var(--b1)/1))}:is(.box,.panel) .box-header,:is(.box,.panel) .panel-heading{background-color:var(--box-header-background,transparent);color:var(--box-header-text)}:is(.box,.panel) .box-footer{background:var(--box-footer-background);--tw-border-opacity:.1;border-top-color:hsl(var(--bc)/var(--tw-border-opacity))}.panel-default>.panel-heading{--tw-border-opacity:.1;border-color:hsl(var(--bc)/var(--tw-border-opacity))}blockquote{--tw-border-opacity:1;border-color:hsl(var(--b3)/var(--tw-border-opacity));border-left-style:solid;border-left-width:.25rem;padding:.6rem 1.1rem;font-size:1.1rem}.dd-menu{min-width:160px}.table-striped tbody>tr:nth-of-type(odd),.table-hover tbody tr:hover{--tw-bg-opacity:1;background-color:hsl(var(--b2)/var(--tw-bg-opacity))}.border-base-content{--tw-border-opacity:1;border-color:hsl(var(--bc)/var(--tw-border-opacity))}.bg-opacity-50{--tw-bg-opacity:.5}.bg-opacity-60{--tw-bg-opacity:.6}.bg-opacity-70{--tw-bg-opacity:.7}.bg-opacity-80{--tw-bg-opacity:.8}.bg-opacity-90{--tw-bg-opacity:.9}body,a,h1,h2,h3,h4,h5,h6{font-family:Roboto Variable,Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}html{font-size:16px}body{letter-spacing:.5px;font-size:14px;font-style:normal;font-weight:400}a:hover,a:active,a:focus{outline:none;text-decoration:none}:is(.entity-content,.note-editing-area) p{margin-bottom:.75rem}:is(.entity-content,.note-editing-area) p:last-child,:is(.entity-content,.note-editing-area) td>p:last-of-type,:is(.entity-content,.note-editing-area) th>p:last-of-type{margin-bottom:0}:is(.entity-content,.note-editing-area) hr{border-color:hsl(var(--bc)/var(--tw-bg-opacity));--tw-bg-opacity:.1;margin-top:1.1rem;margin-bottom:1.1rem}:is(.entity-content,.note-editing-area) h1{margin-top:1rem}:is(.entity-content,.note-editing-area) h2{margin-top:.9rem}:is(.entity-content,.note-editing-area) h3{margin-top:.8rem}:is(.entity-content,.note-editing-area) h4{margin-top:.7rem}:is(.entity-content,.note-editing-area) h5{margin-top:.6rem}:is(.entity-content,.note-editing-area) h6{margin-top:.5rem}.alert{background-color:var(--alert-bg);--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity))}.alert p:last-of-type{margin-bottom:0}.alert a{color:inherit;text-decoration:underline}.alert-success{color:hsl(var(--suc)/var(--tw-text-opacity));--alert-bg:hsl(var(--su))}.alert-error{color:hsl(var(--erc)/var(--tw-text-opacity));--alert-bg:hsl(var(--er))}.alert-warning{color:hsl(var(--wac)/var(--tw-text-opacity));--alert-bg:hsl(var(--wa))}.alert-info{color:hsl(var(--inc)/var(--tw-text-opacity));--alert-bg:hsl(var(--in))}.join{border-radius:var(--rounded-btn,.5rem);align-items:stretch;display:inline-flex}.join>.join-item:first-child:not(:last-child),.join :first-child:not(:last-child) .join-item{border-top-right-radius:0;border-bottom-right-radius:0}.join .join-item:not(:first-child):not(:last-child),.join :not(:first-child):not(:last-child) .join-item{border-radius:0}.join .join-item:last-child:not(:first-child),.join :last-child:not(:first-child) .join-item{border-top-left-radius:0;border-bottom-left-radius:0}.join .ts-wrapper .ts-control{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;min-height:2.3rem}.btn2{cursor:pointer;-webkit-user-select:none;user-select:none;text-align:center;border-radius:var(--rounded-btn,.25rem);border-width:var(--border-btn,0px);border-color:hsl(var(--b3)/var(--tw-border-opacity,1));min-height:2.25rem;animation:button-pop var(--animation-btn,.25s)ease-out;text-transform:var(--btn-text-case,inherit);--tw-border-opacity:1;background-color:hsl(var(--b1)/var(--tw-bg-opacity,1));color:hsl(var(--bc)/var(--tw-text-opacity,1));flex-wrap:wrap;flex-shrink:0;justify-content:center;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-flex}.btn2.btn-disabled,.btn2.btn[disabled],.btn2.btn:disabled{pointer-events:none;--tw-border-opacity:0;background-color:hsl(var(--n)/var(--tw-bg-opacity));--tw-bg-opacity:.2;color:hsl(var(--bc)/var(--tw-text-opacity));--tw-text-opacity:.2}.btn2.btn-square{width:3rem;height:3rem;padding:0}.btn2.btn-circle{border-radius:9999px;width:3rem;height:3rem;padding:0}.btn2.btn-group{display:inline-flex}.btn2.btn-group>input[type=radio].btn{appearance:none}.btn2.btn-group>input[type=radio].btn:before{content:attr(data-title)}.btn2.btn:is(input[type=checkbox]),.btn2.btn:is(input[type=radio]){appearance:none}.btn2.btn:is(input[type=checkbox]):after,.btn2.btn:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}@media(hover:hover){.btn2:hover{--tw-border-opacity:1;border-color:hsl(var(--b3)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--b2)/var(--tw-bg-opacity));color:hsl(var(--bc)/var(--tw-text-opacity))}.btn2.btn-primary:hover{--tw-border-opacity:1;border-color:hsl(var(--pf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--pf)/var(--tw-bg-opacity));color:hsl(var(--pc)/var(--tw-text-opacity))}.btn2.btn-secondary:hover{--tw-border-opacity:1;border-color:hsl(var(--sf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--sf)/var(--tw-bg-opacity));color:hsl(var(--sc)/var(--tw-text-opacity))}.btn2.btn-accent:hover{--tw-border-opacity:1;border-color:hsl(var(--af)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--af)/var(--tw-bg-opacity));color:hsl(var(--ac)/var(--tw-text-opacity))}.btn2.btn-neutral:hover{--tw-border-opacity:1;border-color:hsl(var(--nf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--nf)/var(--tw-bg-opacity));color:hsl(var(--fc)/var(--tw-text-opacity))}.btn2.btn-info:hover{--tw-border-opacity:1;border-color:hsl(var(--in)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--in)/var(--tw-bg-opacity))}.btn2.btn-success:hover{--tw-border-opacity:1;border-color:hsl(var(--su)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--su)/var(--tw-bg-opacity))}.btn2.btn-warning:hover{--tw-border-opacity:1;border-color:hsl(var(--wa)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--wa)/var(--tw-bg-opacity))}.btn2.btn-error:hover{--tw-border-opacity:1;border-color:hsl(var(--er)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--er)/var(--tw-bg-opacity))}.btn2.btn-glass:hover{--glass-opacity:25%;--glass-border-opacity:15%}.btn2.btn-ghost:hover{--tw-border-opacity:0;background-color:hsl(var(--bc)/var(--tw-bg-opacity));--tw-bg-opacity:.2}.btn2.btn-link:hover{color:hsl(var(--pf)/1);background-color:#0000;border-color:#0000;text-decoration-line:underline}.btn2.btn-outline:hover{--tw-border-opacity:1;border-color:hsl(var(--b2)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--b2)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-primary:hover{--tw-border-opacity:1;border-color:hsl(var(--pf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--pf)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-secondary:hover{--tw-border-opacity:1;border-color:hsl(var(--sf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--sf)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--sc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-accent:hover{--tw-border-opacity:1;border-color:hsl(var(--af)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--af)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--ac)/var(--tw-text-opacity))}.btn2.btn-outline.btn-success:hover{--tw-border-opacity:1;border-color:hsl(var(--su)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--su)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--suc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-info:hover{--tw-border-opacity:1;border-color:hsl(var(--in)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--in)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--inc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-warning:hover{--tw-border-opacity:1;border-color:hsl(var(--wa)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--wa)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--wac)/var(--tw-text-opacity))}.btn2.btn-outline.btn-error:hover{--tw-border-opacity:1;border-color:hsl(var(--er)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--er)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--erc)/var(--tw-text-opacity))}.btn2.btn-disabled:hover,.btn2.btn[disabled]:hover,.btn2.btn:disabled:hover{--tw-border-opacity:0;background-color:hsl(var(--n)/var(--tw-bg-opacity));--tw-bg-opacity:.2;color:hsl(var(--bc)/var(--tw-text-opacity));--tw-text-opacity:.2}.btn2.btn:is(input[type=checkbox]:checked):hover,.btn2.btn:is(input[type=radio]:checked):hover{--tw-border-opacity:1;border-color:hsl(var(--pf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--pf)/var(--tw-bg-opacity))}}.btn2.btn:active:hover,.btn2.btn:active:focus{transform:scale(var(--btn-focus-scale,.97));animation:ease-out button-pop}.btn2.btn-active{--tw-border-opacity:1;border-color:hsl(var(--b3)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--b3)/var(--tw-bg-opacity))}.btn2:focus-visible{outline-offset:2px;outline-width:2px;outline-style:solid;outline-color:hsl(var(--bc)/1)}.btn2.btn-primary{--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity));font-weight:500}.btn2.btn-primary.btn-active{--tw-border-opacity:1;border-color:hsl(var(--pf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--pf)/var(--tw-bg-opacity))}.btn2.btn-primary:focus-visible{outline-color:hsl(var(--p)/1)}.btn2.btn-secondary{--tw-border-opacity:1;border-color:hsl(var(--s)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--s)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--sc)/var(--tw-text-opacity));font-weight:500}.btn2.btn-secondary.btn-active{--tw-border-opacity:1;border-color:hsl(var(--sf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--sf)/var(--tw-bg-opacity))}.btn2.btn-secondary:focus-visible{outline-color:hsl(var(--s)/1)}.btn2.btn-accent{--tw-border-opacity:1;border-color:hsl(var(--a)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--a)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--ac)/var(--tw-text-opacity))}.btn2.btn-accent.btn-active{--tw-border-opacity:1;border-color:hsl(var(--af)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--af)/var(--tw-bg-opacity))}.btn2.btn-accent:focus-visible{outline-color:hsl(var(--a)/1)}.btn2.btn-neutral{--tw-border-opacity:1;border-color:hsl(var(--n)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--n)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--nc)/var(--tw-text-opacity))}.btn2.btn-neutral.btn-active{--tw-border-opacity:1;border-color:hsl(var(--nf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--nf)/var(--tw-bg-opacity))}.btn2.btn-neutral:focus-visible{outline-color:hsl(var(--n)/1)}.btn2.btn-info{--tw-border-opacity:1;border-color:hsl(var(--in)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--in)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--inc)/var(--tw-text-opacity))}.btn2.btn-info.btn-active{--tw-border-opacity:1;border-color:hsl(var(--in)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--in)/var(--tw-bg-opacity))}.btn2.btn-info:focus-visible{outline-color:hsl(var(--in)/1)}.btn2.btn-success{--tw-border-opacity:1;border-color:hsl(var(--su)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--su)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--suc)/var(--tw-text-opacity))}.btn2.btn-success.btn-active{--tw-border-opacity:1;border-color:hsl(var(--su)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--su)/var(--tw-bg-opacity))}.btn2.btn-success:focus-visible{outline-color:hsl(var(--su)/1)}.btn2.btn-warning{--tw-border-opacity:1;border-color:hsl(var(--wa)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--wa)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--wac)/var(--tw-text-opacity))}.btn2.btn-warning.btn-active{--tw-border-opacity:1;border-color:hsl(var(--wa)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--wa)/var(--tw-bg-opacity))}.btn2.btn-warning:focus-visible{outline-color:hsl(var(--wa)/1)}.btn2.btn-error{--tw-border-opacity:1;border-color:hsl(var(--er)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--er)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--erc)/var(--tw-text-opacity))}.btn2.btn-error.btn-active{--tw-border-opacity:1;border-color:hsl(var(--er)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--er)/var(--tw-bg-opacity))}.btn2.btn-error:focus-visible{outline-color:hsl(var(--er)/1)}.btn2.btn-glass{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background-color:unset;--bc:var(--n)}.btn2.btn-glass.btn-active{--glass-opacity:25%;--glass-border-opacity:15%}.btn2.btn-glass:focus-visible{outline-color:currentColor}.btn2.btn-ghost{color:currentColor;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);background-color:#0000;border-width:1px;border-color:#0000}.btn2.btn-ghost.btn-active{--tw-border-opacity:0;background-color:hsl(var(--bc)/var(--tw-bg-opacity));--tw-bg-opacity:.2}.btn2.btn-ghost:focus-visible{outline-color:currentColor}.btn2.btn-link{--tw-text-opacity:1;color:hsl(var(--p)/var(--tw-text-opacity));--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);background-color:#0000;border-color:#0000;text-decoration-line:underline}.btn2.btn-link.btn-active{background-color:#0000;border-color:#0000;text-decoration-line:underline}.btn2.btn-link:focus-visible{outline-color:currentColor}.btn2.btn-outline{--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity));--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--border-btn:1px;background-color:#0000}.btn2.btn-outline.btn-active{--tw-border-opacity:1;border-color:hsl(var(--b2)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--b2)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-primary{--tw-text-opacity:1;color:hsl(var(--p)/var(--tw-text-opacity))}.btn2.btn-outline.btn-primary.btn-active{--tw-border-opacity:1;border-color:hsl(var(--pf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--pf)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-secondary{--tw-text-opacity:1;color:hsl(var(--s)/var(--tw-text-opacity))}.btn2.btn-outline.btn-secondary.btn-active{--tw-border-opacity:1;border-color:hsl(var(--sf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--sf)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--sc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-accent{--tw-text-opacity:1;color:hsl(var(--a)/var(--tw-text-opacity))}.btn2.btn-outline.btn-accent.btn-active{--tw-border-opacity:1;border-color:hsl(var(--af)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--af)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--ac)/var(--tw-text-opacity))}.btn2.btn-outline.btn-success{--tw-text-opacity:1;color:hsl(var(--su)/var(--tw-text-opacity))}.btn2.btn-outline.btn-success.btn-active{--tw-border-opacity:1;border-color:hsl(var(--su)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--su)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--suc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-info{--tw-text-opacity:1;color:hsl(var(--in)/var(--tw-text-opacity))}.btn2.btn-outline.btn-info.btn-active{--tw-border-opacity:1;border-color:hsl(var(--in)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--in)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--inc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-warning{--tw-text-opacity:1;color:hsl(var(--wa)/var(--tw-text-opacity))}.btn2.btn-outline.btn-warning.btn-active{--tw-border-opacity:1;border-color:hsl(var(--wa)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--wa)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--wac)/var(--tw-text-opacity))}.btn2.btn-outline.btn-error{--tw-text-opacity:1;color:hsl(var(--erc)/var(--tw-text-opacity))}.btn2.btn-outline.btn-error.btn-active{--tw-border-opacity:1;border-color:hsl(var(--er)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--er)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--erc)/var(--tw-text-opacity))}.btn2.btn-group>input[type=radio]:checked.btn,.btn2.btn-group>.btn-active{--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}.btn2.btn-group>input[type=radio]:checked.btn:focus-visible,.btn2.btn-group>.btn-active:focus-visible{outline-width:2px;outline-style:solid;outline-color:hsl(var(--p)/1)}.btn2.btn:is(input[type=checkbox]:checked),.btn2.btn:is(input[type=radio]:checked){--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}.btn2.btn:is(input[type=checkbox]:checked):focus-visible,.btn2.btn:is(input[type=radio]:checked):focus-visible{outline-color:hsl(var(--p)/1)}.btn2.btn-xs{min-height:1.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.75rem}.btn2.btn-sm{min-height:2rem;padding:.375rem .75rem;font-size:.75rem;font-weight:400}.btn2.btn-lg{min-height:4rem;padding-left:1.5rem;padding-right:1.5rem;font-size:1.125rem}.btn2.btn-wide{width:16rem}.btn2.btn-block{width:100%}.btn2.btn-square:where(.btn-xs){width:1.5rem;height:1.5rem;padding:0}.btn2.btn-square:where(.btn-sm){width:2rem;height:2rem;padding:0}.btn2.btn-square:where(.btn-md){width:3rem;height:3rem;padding:0}.btn2.btn-square:where(.btn-lg){width:4rem;height:4rem;padding:0}.btn2.btn-circle:where(.btn-xs){border-radius:9999px;width:1.5rem;height:1.5rem;padding:0}.btn2.btn-circle:where(.btn-sm){border-radius:9999px;width:2rem;height:2rem;padding:0}.btn2.btn-circle:where(.btn-md){border-radius:9999px;width:3rem;height:3rem;padding:0}.btn2.btn-circle:where(.btn-lg){border-radius:9999px;width:4rem;height:4rem;padding:0}[role=button]{cursor:pointer}.badge{--tw-border-opacity:1;border-color:hsl(var(--n)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));--tw-text-opacity:1;width:fit-content;height:1.5rem;color:hsl(var(--bc)/var(--tw-text-opacity));border-radius:var(--rounded-badge,1rem);justify-content:center;align-items:center;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;display:inline-flex;overflow:hidden}.badge-accent{--tw-border-opacity:1;border-color:hsl(var(--a)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--a)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--ac)/var(--tw-text-opacity))}.badge-primary{--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}.badge-secondary{--tw-border-opacity:1;border-color:hsl(var(--s)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--s)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--sc)/var(--tw-text-opacity))}.badge-xs{height:.75rem;padding-left:.313rem;padding-right:.313rem;font-size:.75rem;line-height:.75rem}.badge-sm{height:1rem;padding-left:.438rem;padding-right:.438rem;font-size:.75rem;line-height:1rem}.badge-md{height:1.25rem;padding-left:.563rem;padding-right:.563rem;font-size:.875rem;line-height:1.25rem}.badge-lg{height:1.5rem;padding-left:.688rem;padding-right:.688rem;font-size:1rem;line-height:1.5rem}.bg-season{--tw-bg-opacity:.5;background-color:hsl(var(--a)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--ac)/var(--tw-text-opacity))}.bg-week{--tw-bg-opacity:.3;background-color:hsl(var(--a)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--ac)/var(--tw-text-opacity))}.calendar tbody td .julian-number{display:var(--calendar-julian,none)}.calendar tbody td .day-number{display:var(--calendar-monthday,inline)}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}code,samp,kbd{--tw-bg-opacity:1;background-color:hsl(var(--n)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--nc)/var(--tw-text-opacity));border-radius:var(--rounded-btn);direction:ltr;padding:.2rem .4rem}pre{white-space:pre-wrap;word-wrap:break-word;--tw-bg-opacity:1;background-color:hsl(var(--n)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--nc)/var(--tw-text-opacity));border-radius:var(--rounded-btn);padding:.5rem;display:block;overflow-x:auto}pre code{background-color:#0000;border-radius:0;padding:0}.tooltip-content{max-width:378px!important}.tooltip-content .tooltip-header{background:linear-gradient(180deg,#3330,hsl(var(--b1)/var(--tw-bg-opacity,1))),var(--tooltip-background);background-position:50%;background-repeat:no-repeat;background-size:cover}.tooltip-content .tooltip-text h1{font-size:1.16rem}.tooltip-content .tooltip-text h2{font-size:1.12rem}.tooltip-content .tooltip-text h3{font-size:1.09rem}.tooltip-content .tooltip-text h4,.tooltip-content .tooltip-text h5,.tooltip-content .tooltip-text h6{font-size:.95rem}.panel .panel-body .preview{position:unset}.keyboard-shortcut{--tw-border-opacity:.2;border:1px solid hsl(var(--bc)/var(--tw-border-opacity));pointer-events:unset;border-radius:5px;margin-right:5px;padding:.1rem .4rem;font-size:.75rem}.keyboard-shortcut.form-control-feedback{width:30px;height:30px;margin-top:3px;line-height:24px}.dropdown-menu .keyboard-shortcut{margin-right:0;font-size:.75rem;line-height:1rem}.tippy-box{border-radius:var(--rounded-btn,.25rem);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-bg-opacity:1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity))}.tippy-box .tippy-content{padding:.5rem;font-size:.8rem}.tippy-box[data-placement^=top]>.tippy-arrow:before{--tw-bg-opacity:1;border-top-color:hsl(var(--b1)/var(--tw-bg-opacity))}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{--tw-bg-opacity:1;border-bottom-color:hsl(var(--b1)/var(--tw-bg-opacity))}.tippy-box[data-placement^=left]>.tippy-arrow:before{--tw-bg-opacity:1;border-left-color:hsl(var(--b1)/var(--tw-bg-opacity))}.tippy-box[data-placement^=right]>.tippy-arrow:before{--tw-bg-opacity:1;border-right-color:hsl(var(--b1)/var(--tw-bg-opacity))}.tippy-box[data-theme~=kanka-dropdown]{--n:var(--b1)}.tippy-box[data-theme~=entity-tooltip]{background-color:hsl(var(--b1)/var(--tw-bg-opacity))}.tippy-box[data-theme~=entity-tooltip] .tippy-content{padding:0}.timeline>li>i:is(.ra,.fa,.fab,.far,.fas,.fa-solid,.fa-regular,.fa-brands,.fa-thin,.fa-duotone){--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity));--tw-background-opacity:1;background:hsl(var(--b1)/var(--tw-background-opacity));line-height:30px;left:18px}.timeline>li:before{content:\"\";background:hsl(var(--b1)/1);border-radius:2px;width:4px;margin:0;position:absolute;top:0;bottom:0;left:31px}.timeline>li:last-of-type:before{content:\" \";display:table}.timeline>li:after{content:\" \";clear:both;display:table}@media(max-width:767px){.content-header{padding-top:5px}.table-responsive{border:none;overflow:auto}.keyboard-shortcut{display:none}}.entity-privacy-icon .fa-lock-open{display:inline-block}.entity-privacy-icon .fa-lock,.kanka-entity-private .entity-privacy-icon .fa-lock-open{display:none}.kanka-entity-private .entity-privacy-icon .fa-lock{display:inline-block}.sidebar-section-box{background:var(--sidebar-section-background,none);padding:var(--sidebar-section-padding,0)}.entity-header .entity-breadcrumb li+li:before{content:\"> \";--tw-text-opacity:.6;color:hsl(var(--bc)/var(--tw-text-opacity));padding:0 5px}.entity-grid>.entity-header.with-entity-banner .entity-name-header>.entity-name,.entity-grid>.entity-header.with-entity-banner .entity-name-header>.entity-title{text-shadow:0 1px 4px #00000080;color:#fff}.entity-grid>.entity-header.with-entity-banner .entity-name-header>.entity-icons,.entity-grid>.entity-header.with-entity-banner .entity-header-sub{color:#fff}.entity-grid>.entity-header.with-entity-banner .entity-header-sub .entity-header-sub-element>a{color:#fff;text-underline-offset:.2rem;text-decoration:underline}.entity-grid>.entity-header.with-entity-banner .entity-breadcrumb,.entity-grid>.entity-header.with-entity-banner .entity-breadcrumb a,.entity-grid>.entity-header.with-entity-banner .entity-breadcrumb li:before{color:#fff}.entity-content table{max-width:100%}.entity-content ul{padding:0 1.5rem;list-style:outside}.entity-content ol{padding:0 1.5rem;list-style:decimal}.entity-content>ol,.entity-content>ul{margin-top:0;margin-bottom:.5rem}.comma-separated .element~.element:before{content:\", \"}body.entity-with-banner .content-wrapper>.content{padding-top:0;padding-left:0;padding-right:0}body.entity-with-banner .content-wrapper>.content .entity-body{padding-left:1rem;padding-right:1rem}body.entity-with-banner .content-wrapper>.content>.alert{border-radius:0;margin-bottom:-.5rem}ul[data-type=taskList]{margin-left:0;padding:0;list-style:none}ul[data-type=taskList] li{align-items:flex-start;display:flex}ul[data-type=taskList] li p{margin-bottom:unset}ul[data-type=taskList] li>label{-webkit-user-select:none;user-select:none;flex:none;margin-right:.5rem}ul[data-type=taskList] li>div{flex:auto}ul[data-type=taskList] input[type=checkbox]{cursor:pointer;padding:.5rem;position:relative}ul[data-type=taskList] input[type=checkbox]:checked:after{font-size:1.2rem;left:.1rem}ul[data-type=taskList] ul[data-type=taskList]{margin:0}:is(.entity-posts,.entity-notes) img{max-width:100%}:is(.entity-posts,.entity-notes) .post-details .post-detail-element:not(:last-child):after,:is(.entity-posts,.entity-notes) .post-footer .post-updated:before{content:\"|\"}:is(.element-toggle,.post-block) .icon-hide{display:none}:is(.element-toggle.collapsed,.post-block .collapsed,.element-toggle.animate-collapsed) .icon-hide{display:inline-block}:is(.element-toggle.collapsed,.post-block .collapsed,.element-toggle.animate-collapsed) .icon-show{display:none}.collapsed\\:show{--fa-display:none}.animate-collapsed .collapsed\\:flip{rotate:180deg}.box-quest-element .widget-user-username a{color:#fff}:is(.box-quest-element .bg-gray,.box-quest-element .bg-none) .widget-user-username a{color:hsl(var(--p)/1)}@media(min-width:768px){.quick-creator-body .selection .option .full-form{display:none}.quick-creator-body .selection .option:hover .full-form{display:inline}}.element-live-reorder .element{cursor:grab}.element-live-reorder .element select{height:28px;padding:3px 6px}.element-live-reorder .element .children{flex:0 0 100%}.public-permission{border:1px solid var(--box-border,none);background-color:var(--box-background,hsl(var(--b3)/1));--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity));flex-flow:column wrap;transition:all .3s ease-in-out}.public-permission.enabled{--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}.public-permission:hover{--tw-border-opacity:1;border-color:hsl(var(--pf)/var(--tw-border-opacity));--tw-bg-opacity:1;--tw-text-opacity:1;background-color:hsl(var(--pf)/var(--tw-bg-opacity));color:hsl(var(--pc)/var(--tw-text-opacity))}#campaign-modules .module-actions .btn-module-disable{display:none}#campaign-modules .module-enabled .header{background-color:hsl(var(--p)/1);color:hsl(var(--pc)/1)}#campaign-modules .module-enabled .module-actions .btn-module-enable{display:none}#campaign-modules .module-enabled .module-actions .btn-module-disable{display:block}.live-edit{min-width:1rem;min-height:1rem;display:inline-block}.live-edit-parsed{cursor:pointer}.live-edit-parsed:after{-webkit-font-smoothing:antialiased;font-variant:normal;text-rendering:auto;color:var(--link-hover);font-family:\"Font Awesome 6 Pro\";font-style:normal;font-weight:900;line-height:1}.live-edit-parsed:hover:after{content:\" \"}.live-edit.empty-value{--tw-border-opacity:.2;border-bottom:1px dotted hsl(var(--bc)/var(--tw-border-opacity));width:24px;display:inline-block}@media(max-width:767px){.live-edit-parsed:after{content:\" \"}}:root{--toggle-width:60px;--toggle-height:calc(var(--toggle-width)/3)}.toggle{width:var(--toggle-width);height:var(--toggle-height);border-radius:var(--toggle-height);cursor:pointer;margin-bottom:0;display:inline-block;position:relative;box-shadow:0 1px 3px #0000004d}.toggle .slider{background-color:hsl(var(--n)/.1);border-radius:.5rem;width:100%;height:100%;transition:all .4s ease-in-out;position:absolute;top:0;left:0}.toggle .slider:before{content:\"\";width:calc(var(--toggle-height));height:calc(var(--toggle-height));border-radius:calc(var(--toggle-height)/2);background-color:hsl(var(--p)/1);transition:all .4s ease-in-out;position:absolute;top:0;left:0;box-shadow:0 1px 3px #0000004d}.toggle input{display:none}.toggle input:checked+.slider{--tw-bg-opacity:.7;background-color:hsl(var(--p)/var(--tw-bg-opacity))}.toggle input:checked+.slider:before{transform:translate(calc(var(--toggle-width) - var(--toggle-height)))}input[type=range]{--range-fill:50%;appearance:none;accent-color:hsl(var(--p));background:hsl(var(--bc)/.15);cursor:pointer;border-radius:3px;outline:none;height:6px;padding:0}input[type=range]:focus{outline:none}input[type=range]::-moz-range-progress{background:hsl(var(--p));border-radius:3px;height:6px}input[type=range]::-moz-range-track{background:hsl(var(--bc)/.15);border-radius:3px;height:6px}input[type=range]::-webkit-slider-thumb{appearance:none;background:hsl(var(--p));border:2px solid hsl(var(--b1));border-radius:50%;width:18px;height:18px;transition:transform .15s;box-shadow:0 1px 3px #0003}input[type=range]::-moz-range-thumb{background:hsl(var(--p));border:2px solid hsl(var(--b1));border-radius:50%;width:18px;height:18px;transition:transform .15s;box-shadow:0 1px 3px #0003}input[type=range]:hover::-webkit-slider-thumb{transform:scale(1.15)}input[type=range]:hover::-moz-range-thumb{transform:scale(1.15)}.nav-tabs{margin:0;padding:0;list-style:none;display:flex}.nav-tabs>li{margin:0}.nav-tabs>li>a{border-radius:var(--tab-radius,.25rem)var(--tab-radius,.25rem)0 0;border-width:var(--tab-border,0);--tw-bg-opacity:.5;--tab-bg:hsl(var(--b1)/var(--tw-bg-opacity,1));background-color:var(--tab-bg);--tw-text-opacity:.5;--tab-color:hsl(var(--bc)/var(--tw-text-opacity,1));color:var(--tab-color);padding:.4rem .6rem;line-height:1.25rem;display:block}.nav-tabs>li.active{color:hsl(var(--p)/var(--tw-text-opacity));font-weight:500}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{--tw-bg-opacity:1;--tw-text-opacity:1}.nav-tabs>li>a:hover{cursor:pointer;--tw-text-opacity:1}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}div.mce-fullscreen{z-index:1400}.editor-panel{padding:5px}.editor-panel .form-group{margin-bottom:0}.editor-panel .form-group .mce-container{box-shadow:none;border:0}.note-editable p{font-size:14px}.note-editable img{max-width:100%}.note-editable ul,.note-editable ol{margin-top:0;padding:0 1.5rem;list-style:outside}.note-editable ul{list-style-type:disc}.note-editable ol{list-style-type:decimal}.note-editable>ul:first-of-type,.note-editable>ol:first-of-type{margin-bottom:.5rem}.note-editable a{color:var(--link-text,hsl(var(--p)/var(--tw-text-opacity)))}.note-popover{z-index:99;padding:1px;display:none;position:absolute;top:0;left:0}img.note-float-right{float:right;padding-left:.5rem}img.note-float-left{float:left;padding-right:.5rem}.note-btn i.fa,.note-btn i.fas,.note-btn i.fa-brands,.note-btn i.far,.note-btn i.fa-solid,.note-btn i.fa-sharp,.note-icon-code{height:18px;min-height:18px;line-height:20px;display:inline-block}:is(.note-btn i.fa,.note-btn i.fas,.note-btn i.fa-brands,.note-btn i.far,.note-btn i.fa-solid,.note-btn i.fa-sharp,.note-icon-code):before{height:20px;font-style:normal;font-size:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;display:inline-block}.note-hint-popover{background-color:hsl(var(--b1)/1)}.note-hint-item .entity-hint{grid-template-columns:45px auto;align-items:center;display:grid}.note-editing-area .mention,.note-editing-area .attribute,.note-editing-area .post-mention{background-color:var(--mention-background,hsl(var(--in)/1));color:var(--mention-text,hsl(var(--inc)/1));border-radius:.25rem;padding:3px 5px;text-decoration:none}.images-list .img-item .img-thumbnail .text{vertical-align:middle;line-height:normal;display:inline-block}.images-list .img-item .img-thumbnail .text i{display:block}.note-editor .note-popover{box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a}.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover,.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover{color:hsl(var(--bc)/1)}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{--tw-bg-opacity:1;white-space:normal!important;background-color:hsl(var(--b2)/var(--tw-bg-opacity))!important;color:hsl(var(--bc))!important;line-height:inherit!important}.note-placeholder{--tw-text-opacity:.5;color:hsl(var(--bc)/var(--tw-text-opacity))!important}.note-editor.fullscreen{background-color:hsl(var(--b1)/1)}.note-editor.panel{border-radius:var(--rounded-btn);margin-bottom:0}.note-editor.note-airframe,.note-editor.note-frame{border:1px solid hsl(var(--bc)/.1)!important}.mce-btn-group:not(:first-child){border-left:none!important}.mce-edit-area,.mce-content-body{filter:var(--tinymce-filter,none)!important}.mce-panel{--tw-bg-opacity:1;--tw-border-opacity:1;background-color:var(--tinymce-background,hsl(var(--b1)/var(--tw-bg-opacity)))!important;border-color:hsl(var(--b2)/var(--tw-border-opacity))!important;border:0 solid hsl(var(--b2)/var(--tw-border-opacity))!important}.mce-menubar{border:none}.mce-edit-area,.mce-content-body{--tw-bg-opacity:1;background-color:var(--tinymce-background,hsl(var(--b1)/var(--tw-bg-opacity)))!important}.mce-btn{background:0 0!important;border-color:#0000!important}.mce-btn .mce-txt{--tw-text-opacity:1;color:var(--tinymce-input-text,hsl(var(--bc)/var(--tw-text-opacity)))!important}:is(.mce-btn.mce-active,.mce-btn.mce-active:hover,.mce-btn.mce-active:focus,.mce-btn.mce-active:active) i{text-shadow:1px 1px #000}.mce-tabs,.mce-tabs+.mce-container-body,.mce-tab{background:0 0!important}.mce-textbox{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-border-opacity:.2;background-color:var(--tinymce-background,hsl(var(--b1)/var(--tw-bg-opacity)))!important;color:var(--tinymce-input-text,hsl(var(--bc)/var(--tw-text-opacity)))!important;border-color:var(--tinymce-input-border,hsl(var(--bc)/var(--tw-border-opacity)))!important}#mce-modal-block{--tw-bg-opacity:1;background-color:var(--tinymce-background,hsl(var(--b2)/var(--tw-bg-opacity)))!important}.mce-label{text-shadow:none!important}.rte-autocomplete{z-index:9920}.CodeMirror{resize:vertical}.advanced-mention-name{text-decoration:none}.advanced-mention-name:after{content:attr(data-name);background-color:var(--advanced-mention-background,hsl(var(--in)/1));color:var(--mention-text,hsl(var(--inc)/1));border-radius:.25rem;margin-left:.1rem;padding:.15rem;font-size:.7rem}.btn-default{border-width:1px;border-color:hsl(var(--bc)/var(--tw-border-opacity));--tw-border-opacity:.2;--tw-bg-opacity:1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));border-radius:var(--rounded-btn,.5rem);box-shadow:none;color:inherit;line-height:1.5rem}.btn-default:hover,.btn-default:focus,.btn-default:active{box-shadow:none;background-color:hsl(var(--b2)/1);color:hsl(var(--bc)/1);border-color:#0000}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus,.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-color:hsl(var(--b2)/1);border-color:hsl(var(--b2)/1);color:hsl(var(--bc)/1)}.btn.btn-primary{--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity));color:hsl(var(--pc)/1)}.btn.btn-primary:hover{--tw-border-opacity:1;border-color:hsl(var(--pf)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--pf)/var(--tw-bg-opacity));color:hsl(var(--pc)/var(--tw-text-opacity))}.modal-content .modal-header .close{float:right;font-size:1.2rem}.bg-red,.bg-yellow,.bg-brown,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-orange,.bg-purple,.bg-maroon,.bg-gray,.bg-pink,.bg-black{color:#fff!important}.bg-gray{background-color:#797676!important}.bg-black{background-color:#111!important}.bg-red{background-color:#d93d33!important}.bg-yellow{background-color:#f39c12!important}.bg-aqua{background-color:#00829b!important}.bg-blue{background-color:#0073b7!important}.bg-light-blue{background-color:#3a7cad!important}.bg-green{background-color:#058943!important}.bg-navy{background-color:#001f3f!important}.bg-teal{background-color:#2d8289!important}.bg-orange{background-color:#c85208!important}.bg-purple{background-color:#605ca8!important}.bg-maroon{background-color:#d81b60!important}.bg-pink{background-color:#c822d7!important}.bg-brown{background-color:#a35831!important}@media print{body{-webkit-print-color-adjust:exact}}.table{width:100%}.table th,.table td{padding:.5rem;line-height:1.5rem}.table th,.table tr:not(:last-of-type) td{border-bottom-width:1px}.table tbody td{border-color:hsl(var(--bc)/var(--tw-border-opacity));--tw-border-opacity:.2}.table thead th{text-align:left;border-color:hsl(var(--bc)/var(--tw-border-opacity));--tw-border-opacity:.2}.entity-content table,.tiptap-editor table{width:inherit;border-collapse:collapse;border:1px solid hsl(var(--bc)/var(--tw-border-opacity));table-layout:fixed;overflow:hidden}:is(.entity-content table,.tiptap-editor table) th,:is(.entity-content table,.tiptap-editor table) td{--tw-border-opacity:.2;border:1px solid hsl(var(--bc)/var(--tw-border-opacity));min-width:1em;padding:.5rem;line-height:1.5rem;position:relative}:is(:is(.entity-content table,.tiptap-editor table) th,:is(.entity-content table,.tiptap-editor table) td)>*{margin-bottom:0}:is(.entity-content table,.tiptap-editor table) th{vertical-align:top}:is(.entity-content table,.tiptap-editor table) tr:not(:last-of-type) td{border-bottom-width:1px}.table-bordered{--tw-border-opacity:.2;border-width:1px;border-color:hsl(var(--bc)/var(--tw-border-opacity))}.table-bordered th,.table-bordered td{border-color:hsl(var(--bc)/var(--tw-border-opacity));border-width:1px}.table tr.warning :is(td,th){background-color:hsl(var(--a)/1);color:hsl(var(--ac)/1)}.table tr.warning:hover :is(td,th){background-color:hsl(var(--af)/1);color:hsl(var(--ac)/1)}.table-responsive{overflow-x:unset}.table-compact{width:auto}.table-left{float:left;width:auto;margin-bottom:.5rem;margin-right:1rem}.table-right{float:right;width:auto;margin-bottom:.5rem;margin-left:1rem}.table-centered{margin-left:auto;margin-right:auto}.table-condensed>:is(thead,tbody,tfoot)>tr>:is(th,td){padding:.25rem}legend{width:100%;font-size:21px;line-height:inherit;color:hsl(var(--nc)/1);border-bottom:1px solid hsl(var(--n)/1);margin-bottom:22px;display:block}:is(.entity-content,.note-editing-area) table{margin-bottom:.75rem}dialog{max-inline-size:min(90vw,var(--size-content-3));z-index:1050;border:0;flex-direction:column;max-block-size:min(80dvh,100%);margin:auto;padding:0;transition:opacity .5s ease-in-out;display:flex;position:fixed;inset:0}dialog>form{flex-direction:column;min-block-size:0;display:flex;overflow:hidden}dialog header{flex-shrink:0}dialog article{overscroll-behavior-y:contain;min-block-size:0;overflow-y:auto}dialog footer{flex-shrink:0}dialog footer menu:only-child{margin-inline-start:auto}dialog:not([open]){pointer-events:none;opacity:0}dialog::backdrop{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);transition:-webkit-backdrop-filter .3s,backdrop-filter .3s}html:has(dialog[open]){overflow:hidden}@media(max-width:768px){dialog{border-end-end-radius:0;border-end-start-radius:0;margin-block-end:0}dialog article{flex:initial;max-height:70dvh}}.dl-horizontal dd:after,.dl-horizontal dd:before{content:\" \";display:table}.dl-horizontal dd:after{clear:both}@media(min-width:768px){.dl-horizontal dt{float:left;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px;overflow:hidden}.dl-horizontal dd{margin-left:180px}}.details{border:1px solid hsl(var(--bc)/var(--tw-bg-opacity));--tw-bg-opacity:.1;border-radius:var(--rounded-btn);flex-direction:column;gap:.25rem;margin:1.5rem 0;padding:.5rem;display:flex}.details summary{font-weight:600}.details summary:hover{cursor:pointer}.details>button{background:0 0;border-radius:4px;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;margin-top:.1rem;padding:0;font-size:.625rem;line-height:1;display:flex}.details>button:hover{background-color:var(--gray-3)}.details>button:before{content:\"▶\"}.details.is-open>button:before{transform:rotate(90deg)}.details>div{flex-direction:column;gap:.5rem;width:100%;display:flex}.details>div>[data-type=detailsContent]>:last-child{margin-bottom:.5rem}.details .details{margin:.5rem 0}:root{--sidebar-width:15rem;--sidebar-expanded:16rem}.content-wrapper{margin-left:var(--sidebar-width)}.w-sidebar{width:min(var(--sidebar-width),90vw)}.h-sidebar{height:calc(100vh - 3rem)}.main-sidebar{width:var(--sidebar-width);--tw-bg-opacity:1;background-color:var(--sidebar-background,hsl(var(--si)/var(--tw-bg-opacity)));--tw-text-opacity:1;color:var(--sidebar-text,hsl(var(--sic)/var(--tw-text-opacity)));background-size:var(--sidebar-width)208px;background-repeat:no-repeat;transition:all .3s ease-in-out,width .3s ease-in-out}.main-sidebar .campaign-updated{color:hsl(var(--sic)/var(--tw-text-opacity,.7))}.main-sidebar .sidebar-menu{color:var(--sidebar-text,hsl(var(--sic)/var(--tw-text-opacity,1)))}.main-sidebar .sidebar-menu li a,.main-sidebar .sidebar-menu li span{color:var(--sidebar-text,hsl(var(--sic)/var(--tw-text-opacity,1)));letter-spacing:1.5px}.main-sidebar .sidebar-menu li a:hover{--tw-bg-opacity:.7;background:hsl(var(--sif)/var(--tw-bg-opacity));color:var(--sidebar-text,hsl(var(--sic)/var(--tw-text-opacity,1)))}.main-sidebar .sidebar-menu li.active>a,.main-sidebar .sidebar-menu li.active.sidebar-section{background:hsl(var(--sif)/var(--tw-bg-opacity,.7))}.main-sidebar-placeholder{background-image:var(--sidebar-placeholder,url(https://th.kanka.io/kZFdGAs5iN41r9mDqNqix8BxaAA=/240x208/smart/src/app/backgrounds/mountain-background-medium.jpg))}section.sidebar-campaign{background:linear-gradient(180deg,#3330 0%,var(--sidebar-background,hsl(var(--si)/var(--tw-bg-opacity,1)))100%)}.bg-sidebar{background:var(--sidebar-background,hsl(var(--si)/var(--tw-bg-opacity,1)))}.main-footer{margin-left:var(--sidebar-width)}.sidebar-toggle [data-sidebar=collapse]{display:none}.sidebar-toggle [data-sidebar=expand],body.sidebar-collapse .sidebar-toggle [data-sidebar=collapse]{display:unset}body.sidebar-collapse .sidebar-toggle [data-sidebar=expand]{display:none}@media(max-width:767px){.main-sidebar{margin-left:calc(0px - var(--sidebar-width))}.content-wrapper,.main-footer,.sidebar-collapse .main-sidebar,.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media(min-width:768px){.md\\:w-sidebar{width:min(var(--sidebar-width),90vw)}.sidebar-collapse .main-sidebar{margin-left:calc(0px - var(--sidebar-width));z-index:850}.sidebar-collapse .content-wrapper,.sidebar-collapse .right-side,.sidebar-collapse .main-footer{margin-left:0!important}.sidebar-toggle [data-sidebar=collapse]{display:unset}.sidebar-toggle [data-sidebar=expand],body.sidebar-collapse .sidebar-toggle [data-sidebar=collapse]{display:none}body.sidebar-collapse .sidebar-toggle [data-sidebar=expand]{display:unset}}.bg-entity-focus{--tw-bg-opacity:1;background-color:var(--lookup-entity-background,hsl(var(--b3)/var(--tw-bg-opacity)))}.navigation-drawer{z-index:20;width:82%}.navigation-drawer .header .inactive{min-width:72px}.navigation-drawer .header .inactive:hover{color:var(--header-block-hover-text,#2b2e2e)}.navigation-drawer .header .inactive .profile-box:hover{background-color:var(--header-profile-hover,#2b2e2e)}.navigation-drawer .header .profile-box{background-color:var(--header-profile-background,#333);color:var(--header-profile-text,white)}.navigation-drawer .campaigns .campaign{background-image:url(https://th.kanka.io/c26cVXHRNnJXThmKZry4xpUuBS8=/100x96/smart/src/app/backgrounds/mountain-background-medium.jpg)}.navigation-drawer .campaigns .campaign .name{background:linear-gradient(180deg,#fff0,hsl(var(--b2)/1));color:var(--campaign-switcher-text,hsl(var(--bc)/1))}.navigation-drawer .profile .marketplace .icon,.navigation-drawer .link{color:var(--link-text)}.nav-switcher .profile .profile-box{background-color:var(--header-profile-background,#333);color:var(--header-profile-text,white)}.nav-switcher .profile .profile-box:hover{background-color:var(--header-profile-hover,#2b2e2e)}@media(min-width:768px){.sidebar-collapse .main-header .navbar{margin-left:0}.navigation-drawer{width:380px}.toggle-and-search .w-sidebar{width:300px}}.indicator .notification-badge{--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skew(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:hsl(var(--boosted)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--boosted)/var(--tw-text-opacity));border-radius:var(--rounded-badge,1.9rem);padding:.3rem;line-height:.5rem;bottom:-.2rem;right:-.2rem}.search-recent,.search-preview{color:var(--lookup-text,hsl(var(--bc)/1));box-shadow:0 10px 10px #0000004d}.hover\\:lookup-entity:hover{background-color:var(--lookup-entity-hover,#0000001a)}.cc-window{opacity:1;transition:opacity 1s}.cc-window.cc-invisible{opacity:0}.cc-animate.cc-revoke{transition:transform 1s}.cc-animate.cc-revoke.cc-top{transform:translateY(-2em)}.cc-animate.cc-revoke.cc-bottom{transform:translateY(2em)}.cc-animate.cc-revoke.cc-active.cc-top,.cc-animate.cc-revoke.cc-active.cc-bottom,.cc-revoke:hover{transform:translateY(0)}.cc-grower{max-height:0;transition:max-height 1s;overflow:hidden}.cc-revoke,.cc-window{box-sizing:border-box;z-index:9999;flex-wrap:nowrap;font-family:Helvetica,Calibri,Arial,sans-serif;font-size:16px;line-height:1.5em;display:flex;position:fixed;overflow:hidden}.cc-window.cc-static{position:static}.cc-window.cc-floating{flex-direction:column;max-width:24em;padding:2em}.cc-window.cc-banner{flex-direction:row;width:100%;padding:1em 1.8em}.cc-revoke{padding:.5em}.cc-revoke:hover{text-decoration:underline}.cc-header{font-size:18px;font-weight:700}.cc-btn,.cc-close,.cc-link,.cc-revoke{cursor:pointer}.cc-link{opacity:.8;padding:.2em;text-decoration:underline;display:inline-block}.cc-link:hover{opacity:1}.cc-link:active,.cc-link:visited{color:initial}.cc-btn{text-align:center;white-space:nowrap;border-style:solid;border-width:2px;padding:.4em .8em;font-size:.9em;font-weight:700;display:block}.cc-highlight .cc-btn:first-child{background-color:#0000;border-color:#0000}.cc-highlight .cc-btn:first-child:focus,.cc-highlight .cc-btn:first-child:hover{background-color:#0000;text-decoration:underline}.cc-close{opacity:.9;font-size:1.6em;line-height:.75;display:block;position:absolute;top:.5em;right:.5em}.cc-close:focus,.cc-close:hover{opacity:1}.cc-revoke.cc-top{border-bottom-right-radius:.5em;border-bottom-left-radius:.5em;top:0;left:3em}.cc-revoke.cc-bottom{border-top-left-radius:.5em;border-top-right-radius:.5em;bottom:0;left:3em}.cc-revoke.cc-left{left:3em;right:unset}.cc-revoke.cc-right{right:3em;left:unset}.cc-top{top:1em}.cc-left{left:1em}.cc-right{right:1em}.cc-bottom{bottom:1em}.cc-floating>.cc-link{margin-bottom:1em}.cc-floating .cc-message{margin-bottom:1em;display:block}.cc-window.cc-floating .cc-compliance{flex:1 0 auto}.cc-window.cc-banner{align-items:center}.cc-banner.cc-top{top:0;left:0;right:0}.cc-banner.cc-bottom{bottom:0;left:0;right:0}.cc-banner .cc-message{flex:auto;max-width:100%;margin-right:1em;display:block}.cc-compliance{align-content:space-between;align-items:center;display:flex}.cc-floating .cc-compliance>.cc-btn{flex:1}.cc-btn+.cc-btn{margin-left:.5em}@media print{.cc-revoke,.cc-window{display:none}}@media screen and (max-width:900px){.cc-btn{white-space:normal}}@media screen and (max-width:414px)and (orientation:portrait),screen and (max-width:736px)and (orientation:landscape){.cc-window.cc-top{top:0}.cc-window.cc-bottom{bottom:0}.cc-window.cc-banner,.cc-window.cc-floating,.cc-window.cc-left,.cc-window.cc-right{left:0;right:0}.cc-window.cc-banner{flex-direction:column}.cc-window.cc-banner .cc-compliance{flex:auto}.cc-window.cc-floating{max-width:none}.cc-window .cc-message{margin-bottom:1em}.cc-window.cc-banner{-webkit-box-align:unset;-ms-flex-align:unset;align-items:unset}.cc-window.cc-banner .cc-message{margin-right:0}}.cc-floating.cc-theme-classic{border-radius:5px;padding:1.2em}.cc-floating.cc-type-info.cc-theme-classic .cc-compliance{text-align:center;flex:none;display:inline}.cc-theme-classic .cc-btn{border-radius:5px}.cc-theme-classic .cc-btn:last-child{min-width:140px}.cc-floating.cc-type-info.cc-theme-classic .cc-btn{display:inline-block}.cc-theme-edgeless.cc-window{padding:0}.cc-floating.cc-theme-edgeless .cc-message{margin:2em 2em 1.5em}.cc-banner.cc-theme-edgeless .cc-btn{height:100%;margin:0;padding:.8em 1.8em}.cc-banner.cc-theme-edgeless .cc-message{margin-left:1em}.cc-floating.cc-theme-edgeless .cc-btn+.cc-btn{margin-left:0}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-cyrillic-ext-wdth-normal-Dhyce-Pj.woff2)format(\"woff2-variations\");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-cyrillic-wdth-normal-BsksX6tq.woff2)format(\"woff2-variations\");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-greek-ext-wdth-normal-BYpwsbQR.woff2)format(\"woff2-variations\");unicode-range:U+1F??}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-greek-wdth-normal-BfW7Njdt.woff2)format(\"woff2-variations\");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-math-wdth-normal-UmVxaSdA.woff2)format(\"woff2-variations\");unicode-range:U+302-303,U+305,U+307-308,U+310,U+312,U+315,U+31A,U+326-327,U+32C,U+32F-330,U+332-333,U+338,U+33A,U+346,U+34D,U+391-3A1,U+3A3-3A9,U+3B1-3C9,U+3D1,U+3D5-3D6,U+3F0-3F1,U+3F4-3F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE??}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-symbols-wdth-normal-CLw08Y-f.woff2)format(\"woff2-variations\");unicode-range:U+1-C,U+E-1F,U+7F-9F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+28??,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B??,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F0??,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F7??,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB??}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-vietnamese-wdth-normal-DDpurHh1.woff2)format(\"woff2-variations\");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-latin-ext-wdth-normal-DRS-BNlt.woff2)format(\"woff2-variations\");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:75% 100%;src:url(/build/assets/roboto-latin-wdth-normal-ClS9VhqK.woff2)format(\"woff2-variations\");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--kanka-boost-accent:338 78% 48%}.content-header .breadcrumb{max-width:100%;padding-block:.5rem;overflow-x:auto}.content-header .breadcrumb>li+:before{content:\"\";opacity:.4;background-color:#0000;border-top:1px solid;border-right:1px solid;width:.375rem;height:.375rem;margin-left:.5rem;margin-right:.75rem;display:block;rotate:45deg}div.required label:after{content:\" *\";color:var(--input-required-text,var(--error,\"red\"))}:is(.tab-content,.box-body) table{max-width:100%!important}:is(.tab-content,.box-body) img{max-width:100%}.entity-image{border-radius:50%;display:block}.cover-background{background-position:50%;background-repeat:no-repeat;background-size:cover}tr.tr-hover{font-weight:700}tr.tr-hover:hover{background-color:#0000001a!important}.field>input,.field>select,.field>textarea{padding:.6rem .8rem}:is(.field>input,.field>select,.field>textarea):placeholder-shown{text-overflow:ellipsis}.attribute,.note-editing-area>.attribute{--tw-border-opacity:1;background-color:hsl(var(--n)/var(--tw-border-opacity));--tw-text-opacity:1;color:hsl(var(--nc)/var(--tw-text-opacity));border-radius:.25rem;padding:.1rem .25rem;font-style:italic}summary{display:list-item}.dropdown-menu>li>a>:is(.fas,.fab,.far,.ra,.fa-solid,.fa-light,.fa-thin,.fa-regular){width:14px;margin-right:10px}button.dropdown-item{white-space:nowrap;width:100%;color:var(--dropdown-link);text-align:left;background:0 0;border:none;padding:3px 20px;font-weight:400;line-height:1.6;display:block}button.dropdown-item:hover{background-color:var(--dropdown-hover-background)}.dropdown-menu-top{top:unset;bottom:100%}.banner-notification a{color:hsl(var(--ac)/1)}.skip-nav-link{z-index:1040;transition:transform .325s ease-in;transform:translateY(-120%)}.skip-nav-link:focus{color:var(--link-text);transform:translateY(0)}.bg-boost{background-color:hsl(var(--kanka-boost-accent)/1);--b1:var(--kanka-boost-accent);--b2:var(--kanka-boost-accent);--bc:0 0% 100%}.text-boost{color:hsl(var(--kanka-boost-accent)/1)}.form-group>.help-block{margin-top:0}.grid>.form-group{margin:0}button.loading{cursor:wait}.loading,.loading:hover{pointer-events:none}.loading:before{content:\"\";margin-right:.5rem;font-family:\"Font Awesome 6 Pro\";font-weight:900;animation:2s linear infinite fa-spin;display:inline-block}.bg-box{--tw-bg-opacity:1;background-color:var(--box-background,hsl(var(--b1)/var(--tw-bg-opacity)))}.stack>*{z-index:1;grid-row-start:1;grid-column-start:1;transform:translateY(10%)translate(10%)scale(.9)}.stack>:first-child{transform:unset;z-index:3}.stack>:first-child:has(.tooltip){z-index:4}.stack>:nth-child(2){z-index:2;transform:translateY(5%)translate(5%)scale(.95)}.entity-story-block :is(.box-entity-entry,.entity-content.collapse.in){display:flow-root}.table-entities td{vertical-align:middle!important}.input-error{--tw-border-opacity:1;border-color:hsl(var(--er)/var(--tw-border-opacity))}ul.entity-menu li a{color:hsl(var(--bc)/.8)}ul.entity-menu li a:hover,ul.entity-menu li.active a{background-color:hsl(var(--b2)/1);color:hsl(var(--bc)/1)}.glass,.glass.btn-active{-webkit-backdrop-filter:blur(var(--glass-blur,40px));backdrop-filter:blur(var(--glass-blur,40px));background-color:#0000;background-image:linear-gradient(135deg,rgb(255 255 255/var(--glass-opacity,30%)),#0000),linear-gradient(var(--glass-reflex-degree,100deg),rgb(255 255 255/var(--glass-reflex-opacity,10%))25%,#0000 25%);box-shadow:0 0 0 1px rgb(255 255 255/var(--glass-border-opacity,10%)) inset,0 0 0 2px #0000000d;text-shadow:0 1px rgb(0 0 0/var(--glass-text-shadow-opacity,5%));border:none}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}\n"
  },
  {
    "path": "public/build/assets/attributes-BgyqIZFe.js",
    "content": "let s,r;const l=()=>{if(u(),!document.getElementById(\"add_attribute_target\"))return;const e=document.querySelector(\"[data-max-fields]\");e&&e.dataset.maxFields},u=()=>{const e=document.querySelector('[name=\"live-attribute-config\"]');if(!e)return;s=e.dataset.live,r=document.getElementById(\"live-attribute-dialog\");let a=1;document.querySelectorAll(\".live-edit\").forEach(i=>{i.classList.add(\"live-edit-parsed\"),i.dataset.uid=a,a++}),document.querySelectorAll(\".live-edit-parsed\").forEach(i=>{i.addEventListener(\"click\",function(t){if(t.target.tagName===\"A\")return;const d=i.dataset.id,c=s+\"?id=\"+d+\"&uid=\"+i.dataset.uid;window.onEvent(function(){m()}),window.openDialog(\"live-attribute-dialog\",c)})}),window.onEvent(function(){v()})},m=()=>{r.querySelector(\"form\").onsubmit=function(e){e.preventDefault();const a=e.target,n=new FormData(a);return axios.post(a.getAttribute(\"action\"),n).then(o=>{r.querySelector(\"article\").innerHTML=\"\",document.getElementById(\"live-attribute-dialog\").close();const t=document.querySelector('[data-uid=\"'+o.data.uid+'\"]');t.dataset.attribute=o.data.attribute,t.innerHTML=o.data.value,o.data.value?t.classList.remove(\"empty-value\"):t.classList.add(\"empty-value\"),window.showToast(o.data.success)}).catch(()=>{document.getElementById(\"live-attribute-dialog\").close()}),!1}},v=()=>{const e=document.querySelectorAll(\"form.live-attribute-form\"),a=document.getElementById(\"primary-dialog\");e.forEach(function(n){n.onsubmit=o=>{o.preventDefault();const i=new FormData(n);axios.post(n.getAttribute(\"action\"),i).then(t=>{a.querySelector(\"article\").innerHTML=\"\",a.close();const d=document.querySelector('[data-live-id=\"'+t.data.id+'\"]');d.dataset.dataAttribute=t.data.attribute,d.innerHTML=t.data.value,window.showToast(t.data.success)}).catch(t=>{t.response.data.message&&window.showToast(t.response.data.message,\"error\"),a.close()})}})};l();\n"
  },
  {
    "path": "public/build/assets/attributes-manager-Of4dtl9o.js",
    "content": "import{f as Ze,g as bt,G as bn,k as Ye,l as en,o as S,c as k,a as m,n as re,b as J,w as ae,p as Je,D as ct,q as ft,x as wn,F as Ne,r as Ue,j as tn,u as Re,y as nn,i as V,m as xe,s as yt,A as rt,I as xt,z as yn,J as xn,e as _n}from\"./vendor-tiptap-D5xFoo7B.js\";import{v as En}from\"./v-click-outside.umd-Cl-Y_A58.js\";import\"./_commonjsHelpers-Cpj98o6Y.js\";const Tn={key:0,class:\"text-center text-4xl p-4\"},Dn={key:1,class:\"flex flex-col gap-2 lg:gap-5 relative h-full min-h-0\"},Sn={class:\"attributes-toolbar flex gap-2 lg:gap-2 items-center flex-wrap flex-none\"},Cn=[\"innerHTML\"],kn=[\"innerHTML\"],Mn=[\"innerHTML\"],An=[\"innerHTML\"],In=[\"placeholder\"],On={key:3,class:\"relative\"},Ln=[\"innerHTML\"],Nn={key:0,class:\"border border-base-300 shadow-sm rounded bg-base-100 p-4 absolute right-0 flex flex-col gap-5 w-60\"},Pn={class:\"flex gap-2\"},Hn=[\"innerHTML\"],$n={key:4,href:\"https://docs.kanka.io/en/latest/features/properties.html\",class:\"btn2 btn-ghost btn-sm\"},Fn=[\"innerHTML\"],Bn={class:\"w-full flex flex-col gap-2 flex-1 min-h-0 overflow-hidden\"},Rn={class:\"flex gap-2 border-b border-base-300 text-neutral-content items-center text-xs font-light px-4 flex-none\"},Vn={class:\"w-6 md:w-8 flex-none\"},Xn=[\"innerHTML\"],jn=[\"innerHTML\"],Yn={class:\"hidden lg:block w-16 flex-none text-center\"},Un=[\"innerHTML\"],Gn={key:0,class:\"hidden lg:block w-16 flex-none text-center\"},zn=[\"innerHTML\"],Wn={class:\"hidden lg:block w-16 flex-none text-center\"},qn=[\"innerHTML\"],Kn=[\"innerHTML\"],Jn={class:\"flex-1 min-h-0 overflow-y-auto\"},Zn=[\"innerHTML\"],Qn={class:\"flex-none\"},ei={key:2,class:\"dialog rounded-top md:rounded-2xl bg-base-100 min-w-fit shadow-md text-base-content\",id:\"templates-dialog\",\"aria-modal\":\"true\"},ti={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},ni=[\"innerHTML\"],ii={class:\"flex flex-col gap-4 p-4 md:p-6\"},oi=[\"innerHTML\"],ri=[\"innerHTML\"],ai=[\"label\"],li=[\"value\",\"innerHTML\"],si={class:\"flex flex-wrap gap-3 justify-end items-center p-4 md:px-6\"},ui={class:\"flex flex-wrap gap-3 ps-0\"},di={class:\"submit-group\"},ci=[\"innerHTML\"],fi=Ze({__name:\"Manager\",props:{api:{}},setup(e){const t=e,n=V([]),i=V([]);let o=[],r=[],a=[];const s=V(!0),d=V(!1),c=V([]),h=V(!1),u=V(!1),g=V(!1),A=V(null),y=V(null),T=V(0);bt(()=>{fetch(t.api).then(E=>E.json()).then(E=>{E.attributes.forEach(l=>{n.value.push(l),i.value.push(l)}),r=E.meta,o=E.i18n,a=E.templates,s.value=!1}),window.addEventListener(\"keydown\",$)}),bn(()=>{window.removeEventListener(\"keydown\",$)});const $=E=>{const b=document.activeElement.tagName.toLowerCase();if(![\"select\",\"input\",\"textarea\",\"button\"].includes(b)&&E.ctrlKey&&E.key===\"z\"){if(c.value.length===0)return;E.preventDefault();let D=c.value.pop(),j=n.value.find(B=>B.id===D);j&&(j.is_deleted=!1),se()}},w=E=>{if(!E.includes(\".\"))return E;let l=E.split(\".\");return o[l[0]][l[1]]},I=()=>{let E=d.value;n.value.forEach(l=>{l.is_hidden&&!h.value||(l.is_checked=E)})},O=E=>{E.is_deleted=!0,E.is_checked=!1,c.value.push(E.id)},H=E=>{O(E),se()},X=()=>n.value.find(l=>l.is_checked==!0)?\"btn2 btn-error btn-outline  btn-sm\":\"btn2 btn-ghost  btn-sm\",f=()=>n.value.filter(E=>E.is_checked==!0),v=()=>f().length>0,F=()=>f().length,M=()=>{let E=f();if(E.length===0)return window.showToast(w(\"toasts.no_attributes_selected\"),\"error\");E.forEach(l=>{O(l)}),se(),d.value=!1,window.showToast(w(\"toasts.toggle_deleted\"))},z=()=>n.value.find(l=>l.is_checked==!0)?\"btn2 btn-outline  btn-sm\":\"btn2 btn-ghost btn-sm\",Z=()=>{let E=n.value.filter(b=>b.is_checked);if(E.length===0)return window.showToast(w(\"toasts.no_attributes_selected\"),\"error\");let l=null;E.forEach(b=>{l===null&&(l=!b.is_private),b.is_private=l}),window.showToast(w(\"toasts.toggled_privacy\"))},se=()=>{i.value=ue()},Q=()=>r.is_admin,ue=()=>n.value.filter(E=>!E.is_deleted),he=()=>{u.value=!0},ne=()=>{g.value=!0,window.openDialog(\"templates-dialog\")},ce=()=>{window.closeDialog(\"templates-dialog\")},me=()=>{u.value=!1,g.value=!1},Fe=()=>{if(!y.value){ce();return}let E=r.template+\"?template=\"+y.value;fetch(E).then(l=>l.json()).then(l=>{l.forEach(b=>Ae(b)),ce(),window.showToast(w(\"toasts.template\")),y.value=null})},Ae=E=>{let l=n.value.find(b=>b.name==E.name);l&&!l.is_deleted||(E.id=T.value--,n.value.push(E),i.value.push(E))},De=()=>{T.value--};return(E,l)=>{const b=Ye(\"attributes-manager-attribute\"),D=Ye(\"draggable\"),j=Ye(\"attributes-manager-form\"),B=en(\"click-outside\");return S(),k(Ne,null,[s.value?(S(),k(\"div\",Tn,[...l[11]||(l[11]=[m(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):(S(),k(\"div\",Dn,[m(\"div\",Sn,[v()?(S(),k(\"a\",{key:0,role:\"button\",class:re(X()),onClick:l[0]||(l[0]=N=>M())},[l[12]||(l[12]=m(\"i\",{class:\"fa-regular fa-trash-can\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:w(\"columns.delete\")},null,8,Cn),m(\"span\",{innerHTML:F(),class:\"font-extrabold\"},null,8,kn)],2)):J(\"\",!0),Q()&&v()?(S(),k(\"a\",{key:1,role:\"button\",onClick:l[1]||(l[1]=N=>Z()),class:re(z())},[l[13]||(l[13]=m(\"i\",{class:\"fa-regular fa-lock-open\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:w(\"actions.toggle\")},null,8,Mn),m(\"span\",{innerHTML:F(),class:\"font-extrabold\"},null,8,An)],2)):J(\"\",!0),v()?J(\"\",!0):ae((S(),k(\"input\",{key:2,type:\"text\",placeholder:w(\"actions.search\"),class:\"grow md:flex-none md:w-80\",\"onUpdate:modelValue\":l[2]||(l[2]=N=>A.value=N)},null,8,In)),[[Je,A.value]]),v()?J(\"\",!0):(S(),k(\"div\",On,[m(\"a\",{role:\"button\",onClick:l[3]||(l[3]=N=>he()),class:\"btn2 btn-outline btn-sm\"},[l[14]||(l[14]=m(\"i\",{class:\"fa-regular fa-bars-filter\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:w(\"actions.filters\")},null,8,Ln)]),u.value?ae((S(),k(\"div\",Nn,[m(\"div\",Pn,[m(\"div\",null,[ae(m(\"input\",{type:\"checkbox\",\"onUpdate:modelValue\":l[4]||(l[4]=N=>h.value=N),value:\"1\",id:\"_show_hidden_attributes\"},null,512),[[ct,h.value]])]),m(\"label\",{for:\"_show_hidden_attributes\",innerHTML:w(\"filters.show_hidden\")},null,8,Hn)])])),[[B,me]]):J(\"\",!0)])),v()?J(\"\",!0):(S(),k(\"a\",$n,[l[15]||(l[15]=m(\"i\",{class:\"fa-regular fa-question-circle\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:w(\"actions.help\")},null,8,Fn)]))]),m(\"div\",Bn,[m(\"div\",Rn,[l[16]||(l[16]=m(\"div\",{class:\"w-6 md:w-8 flex-none\"},null,-1)),m(\"div\",Vn,[ae(m(\"input\",{type:\"checkbox\",onChange:l[5]||(l[5]=N=>I()),\"onUpdate:modelValue\":l[6]||(l[6]=N=>d.value=N)},null,544),[[ct,d.value]])]),m(\"div\",{class:\"grow md:w-40 md:grow-0 flex-none\",innerHTML:w(\"columns.attribute\")},null,8,Xn),m(\"div\",{class:\"hidden md:block grow\",innerHTML:w(\"columns.value\")},null,8,jn),m(\"div\",Yn,[m(\"span\",{class:\"truncate inline-block\",innerHTML:w(\"columns.pinned\")},null,8,Un)]),Q()?(S(),k(\"div\",Gn,[m(\"span\",{class:\"truncate inline-block\",innerHTML:w(\"columns.private\")},null,8,zn)])):J(\"\",!0),m(\"div\",Wn,[m(\"span\",{class:\"truncate inline-block\",innerHTML:w(\"columns.delete\")},null,8,qn)]),m(\"div\",{class:\"lg:hidden flex-none text-center\",innerHTML:w(\"columns.preferences\")},null,8,Kn)]),m(\"div\",Jn,[ft(D,{modelValue:i.value,\"onUpdate:modelValue\":l[7]||(l[7]=N=>i.value=N),handle:\".handle\",class:\"w-full flex flex-col gap-2\"},{default:wn(()=>[(S(!0),k(Ne,null,Ue(i.value,N=>(S(),tn(b,{key:N.id,attribute:N,attributes:n.value,isAdmin:Q(),showHidden:h.value,i18n:Re(o),\"search-term\":A.value,\"mention-api\":Re(r).mentions,onRemove:H},null,8,[\"attribute\",\"attributes\",\"isAdmin\",\"showHidden\",\"i18n\",\"search-term\",\"mention-api\"]))),128))]),_:1},8,[\"modelValue\"])]),i.value.length===0?(S(),k(\"div\",{key:0,class:\"w-full px-5 italic\",innerHTML:w(\"filters.no_results\")},null,8,Zn)):J(\"\",!0)]),m(\"div\",Qn,[ft(j,{attributes:n.value,\"visible-attributes\":i.value,i18n:Re(o),newAttributeID:T.value,max:Re(r).max,onIncrementNewAttributeID:De,onOpenTemplates:ne},null,8,[\"attributes\",\"visible-attributes\",\"i18n\",\"newAttributeID\",\"max\"])])])),s.value?J(\"\",!0):(S(),k(\"dialog\",ei,[m(\"header\",ti,[m(\"h4\",{innerHTML:w(\"templates.title\"),class:\"text-lg font-normal\"},null,8,ni),m(\"button\",{autofocus:\"\",type:\"button\",class:\"text-xl opacity-50 hover:opacity-100 focus:opacity-100 cursor-pointer text-decoration-none\",\"aria-label\":\"Close\",onClick:l[8]||(l[8]=N=>ce())},[...l[17]||(l[17]=[m(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),m(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),m(\"article\",ii,[m(\"p\",{class:\"text-neutral-content\",innerHTML:w(\"templates.helper\")},null,8,oi),m(\"label\",{for:\"template_id\",innerHTML:w(\"templates.template\")},null,8,ri),ae(m(\"select\",{\"onUpdate:modelValue\":l[9]||(l[9]=N=>y.value=N),class:\"w-full\",id:\"template_id\"},[(S(!0),k(Ne,null,Ue(Re(a),(N,Be)=>(S(),k(\"optgroup\",{label:Be},[(S(!0),k(Ne,null,Ue(N,(gn,vn)=>(S(),k(\"option\",{value:vn,innerHTML:gn},null,8,li))),256))],8,ai))),256))],512),[[nn,y.value]])]),m(\"footer\",si,[m(\"menu\",ui,[m(\"div\",di,[m(\"a\",{role:\"button\",class:\"btn2 btn-primary\",onClick:l[10]||(l[10]=N=>Fe()),innerHTML:w(\"templates.load\")},null,8,ci)])])])]))],64)}}}),hi={class:\"flex gap-4 justify-between flex-wrap text-xs\"},mi={class:\"flex items-center flex-wrap gap-4\"},pi=[\"innerHTML\"],gi=[\"innerHTML\"],vi=[\"innerHTML\"],bi=[\"innerHTML\"],wi=[\"innerHTML\"],yi=[\"innerHTML\"],xi=[\"data-title\"],_i=[\"innerHTML\"],Ei=Ze({__name:\"Form\",props:{attributes:{},visibleAttributes:{},i18n:{},newAttributeID:{},max:{}},emits:[\"incrementNewAttributeID\",\"openTemplates\"],setup(e,{emit:t}){const n=e,i=t;bt(()=>{window.initTooltips()});const o=h=>{if(!h.includes(\".\"))return h;let u=h.split(\".\");return n.i18n[u[0]][u[1]]},r=(h,u)=>{if(h.preventDefault(),c(h))return;i(\"incrementNewAttributeID\");let g={id:n.newAttributeID,name:\"\",value:\"\",is_deleted:!1,is_hidden:!1,is_pinned:!1,is_private:!1,is_checked:!1,is_section:u===\"section\",is_number:u===\"number\",is_multiline:u===\"multiline\",is_checkbox:u===\"checkbox\",is_random:u===\"random\"};n.attributes.push(g),n.visibleAttributes.push(g)},a=h=>{h.preventDefault(),i(\"openTemplates\")},s=()=>\"flex flex-col gap-1 items-center hover:bg-base-200 text-xs border border-base-200 rounded-xl px-4 py-3 cursor-pointer\",d=(h=\"\")=>\"flex flex-col gap-1 items-center hover:bg-base-200 text-xs border border-base-300 rounded-xl px-4 py-3 cursor-pointer text-neutral-content \"+h,c=h=>{const u=h.target.closest(\"form\"),g=u.getElementsByTagName(\"input\"),A=u.getElementsByTagName(\"select\"),y=u.getElementsByTagName(\"button\"),T=Array.from(g).filter(O=>O.hasAttribute(\"name\")),$=Array.from(A).filter(O=>O.hasAttribute(\"name\")),w=Array.from(y).filter(O=>O.hasAttribute(\"name\")),I=T.length+$.length+w.length;return I>=n.max-1?(window.showToast(n.i18n.toasts.max_reached.replace(/:count/,I),\"error\"),!0):!1};return(h,u)=>(S(),k(\"div\",hi,[m(\"div\",mi,[m(\"button\",{onClick:u[0]||(u[0]=g=>r(g,\"\")),class:re(s())},[u[7]||(u[7]=m(\"i\",{class:\"fa-regular fa-shield md:text-xl\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:o(\"types.attribute\")},null,8,pi)],2),m(\"button\",{onClick:u[1]||(u[1]=g=>r(g,\"multiline\")),class:re(s())},[u[8]||(u[8]=m(\"i\",{class:\"fa-regular fa-align-justify md:text-xl\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:o(\"types.multiline\")},null,8,gi)],2),m(\"button\",{onClick:u[2]||(u[2]=g=>r(g,\"number\")),class:re(s())},[u[9]||(u[9]=m(\"i\",{class:\"fa-regular fa-hashtag md:text-xl\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:o(\"types.number\")},null,8,vi)],2),m(\"button\",{onClick:u[3]||(u[3]=g=>r(g,\"section\")),class:re(s())},[u[10]||(u[10]=m(\"i\",{class:\"fa-regular fa-layer-group md:text-xl\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:o(\"types.section\")},null,8,bi)],2),m(\"button\",{onClick:u[4]||(u[4]=g=>r(g,\"checkbox\")),class:re(d())},[u[11]||(u[11]=m(\"i\",{class:\"fa-regular fa-check-square md:text-xl\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:o(\"types.checkbox\")},null,8,wi)],2),m(\"button\",{onClick:u[5]||(u[5]=g=>r(g,\"random\")),class:re(d())},[u[12]||(u[12]=m(\"i\",{class:\"fa-regular fa-question-circle md:text-xl\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:o(\"types.random\"),class:\"text-xs truncate\"},null,8,yi)],2)]),m(\"button\",{onClick:u[6]||(u[6]=g=>a(g)),class:re(d()),\"data-tooltip\":\"\",\"data-title\":o(\"actions.load\")},[u[13]||(u[13]=m(\"i\",{class:\"fa-regular fa-file-import md:text-xl\",\"aria-hidden\":\"true\"},null,-1)),m(\"span\",{innerHTML:o(\"types.templates\"),class:\"text-xs truncate\"},null,8,_i)],10,xi)]))}}),Ti={key:0,class:\"basis-full w-full\"},Di=[\"innerHTML\"],Si={key:1,class:\"w-6 md:w-8 pt-2\"},Ci={key:2,class:\"w-6 md:w-8 pt-2\"},ki={class:\"w-6 md:w-8 pt-2\"},Mi=[\"value\",\"placeholder\"],Ai={class:\"grow flex flex-col md:flex-row gap-2\"},Ii={key:0,class:\"grow\"},Oi=[\"id\",\"placeholder\"],Li={key:1,class:\"md:w-40 flex-none bg-base-200 rounded flex items-center\"},Ni=[\"innerHTML\"],Pi={key:2,class:\"md:w-40 flex-none\"},Hi={key:3,class:\"grow\"},$i={key:4,class:\"grow flex items-center\"},Fi=[\"id\",\"placeholder\"],Bi={key:5,class:\"grow relative\"},Ri=[\"id\",\"placeholder\",\"min\",\"max\"],Vi={key:6,class:\"grow bg-base-200 rounded flex items-center select-none\"},Xi=[\"innerHTML\"],ji={key:7,class:\"grow\"},Yi=[\"id\"],Ui=[\"value\",\"innerHTML\"],Gi={class:\"flex gap-2 pt-2 flex-none\"},zi=[\"aria-label\"],Wi=[\"aria-label\"],qi=[\"aria-label\",\"title\"],Ki=[\"value\"],Ji=Ze({__name:\"Attribute\",props:{attribute:{},attributes:{},i18n:{},isAdmin:{},showHidden:{},searchTerm:{},mentionApi:{}},emits:[\"remove\"],setup(e,{emit:t}){const n=e,i=V(!1);bt(()=>{O()});const o=f=>{if(!f.includes(\".\"))return f;let v=f.split(\".\");return n.i18n[v[0]][v[1]]},r=f=>{if(n.searchTerm){let v=n.searchTerm.toLowerCase();if(!f.name.toLowerCase().includes(v)&&!(f.value&&f.value.toLowerCase().includes(v)))return\"hidden\"}return!n.showHidden&&f.is_hidden?\"hidden\":\"flex gap-2 w-full px-4 \"+(f.template?\"flex-wrap\":null)},a=f=>f.is_checkbox?o(\"placeholders.checkbox_name\"):f.is_section?o(\"placeholders.section_name\"):f.is_multiline?o(\"placeholders.multiline_name\"):o(\"placeholders.name\"),s=f=>f.placeholder?f.placeholder:o(\"placeholders.value\"),d=f=>f.is_checkbox?3:f.is_multiline?2:f.is_section?4:f.is_random?5:f.is_number?6:1,c=f=>f.is_pinned?\"fa-solid fa-thumbtack rotate-45 transition-all\":\"fa-regular fa-thumbtack transition-all\",h=f=>f.is_pinned?\"Pinned\":\"Unpinned\",u=f=>{f.is_pinned=!f.is_pinned},g=f=>f.is_private?\"fa-solid fa-lock-keyhole\":\"fa-regular fa-unlock-keyhole\",A=f=>f.is_private?\"Private\":\"Public\",y=f=>{f.is_private=!f.is_private},T=f=>f.is_hidden||f.name===\"_layout\",$=f=>JSON.stringify({id:f.id,name:f.name,value:f.value,type:d(f),is_private:f.is_private,is_pinned:f.is_pinned,is_hidden:f.is_hidden,source_id:f.source_id}),w=f=>{const v=/\\[range:(\\d+),(\\d+)\\]/,F=f.name.match(v);return F?parseInt(F[1]):null},I=f=>{const v=/\\[range:(\\d+),(\\d+)\\]/,F=f.name.match(v);return F?parseInt(F[2]):null},O=()=>{const f=/\\[range:(.*)+\\]/;n.attribute.name.match(f)?i.value=!0:i.value=!1},H=f=>{const v=/\\[range:(.*)+\\]/,F=f.name.match(v);let M=[];return F&&(M=F[1].split(\",\").map(z=>z.trim()).map(z=>X(z)),M.unshift([])),M},X=f=>{const v=/\\{(.*)+\\}/,F=f.match(v);if(!F)return f;const M=F[1],z=n.attributes.filter(Z=>Z.name==M);return z.length===0?f:z[0].value.trim()};return(f,v)=>{const F=Ye(\"attributes-manager-mention-field\");return S(),k(\"div\",{class:re(r(e.attribute))},[e.attribute.template?(S(),k(\"div\",Ti,[m(\"p\",{innerHTML:e.attribute.template.text,class:\"text-neutral-content\"},null,8,Di)])):J(\"\",!0),e.attribute.is_hidden?(S(),k(\"div\",Ci,[...v[10]||(v[10]=[m(\"i\",{class:\"fa-regular fa-user-secret\",\"aria-hidden\":\"true\"},null,-1)])])):(S(),k(\"div\",Si,[...v[9]||(v[9]=[m(\"i\",{class:\"fa-light fa-grip-vertical handle cursor-move\",\"aria-hidden\":\"true\"},null,-1)])])),m(\"div\",ki,[ae(m(\"input\",{type:\"checkbox\",\"onUpdate:modelValue\":v[0]||(v[0]=M=>e.attribute.is_checked=M),tabindex:\"-1\",value:e.attribute.id,placeholder:a(e.attribute)},null,8,Mi),[[ct,e.attribute.is_checked]])]),m(\"div\",Ai,[e.attribute.is_section?(S(),k(\"div\",Ii,[ae(m(\"input\",{type:\"text\",class:\"w-full\",\"onUpdate:modelValue\":v[1]||(v[1]=M=>e.attribute.name=M),id:\"name-\"+e.attribute.id,placeholder:a(e.attribute)},null,8,Oi),[[Je,e.attribute.name]])])):e.attribute.is_hidden?(S(),k(\"div\",Li,[m(\"div\",{class:\"w-full break-normal px-2\",innerHTML:e.attribute.name},null,8,Ni)])):(S(),k(\"div\",Pi,[ft(F,{attribute:e.attribute,placeholder:a(e.attribute),type:\"text\",property:\"name\",mentionApi:e.mentionApi,onFieldBlur:v[2]||(v[2]=M=>O())},null,8,[\"attribute\",\"placeholder\",\"mentionApi\"])])),e.attribute.is_multiline?(S(),k(\"div\",Hi,[ft(F,{attribute:e.attribute,placeholder:s(e.attribute),type:\"textarea\",property:\"value\",mentionApi:e.mentionApi},null,8,[\"attribute\",\"placeholder\",\"mentionApi\"])])):e.attribute.is_checkbox?(S(),k(\"div\",$i,[ae(m(\"input\",{type:\"checkbox\",\"onUpdate:modelValue\":v[3]||(v[3]=M=>e.attribute.value=M),id:\"value-\"+e.attribute.id,placeholder:s(e.attribute)},null,8,Fi),[[ct,e.attribute.value]])])):e.attribute.is_number?(S(),k(\"div\",Bi,[ae(m(\"input\",{type:\"number\",class:\"w-full\",\"onUpdate:modelValue\":v[4]||(v[4]=M=>e.attribute.value=M),id:\"value-\"+e.attribute.id,placeholder:s(e.attribute),min:w(e.attribute),max:I(e.attribute)},null,8,Ri),[[Je,e.attribute.value]])])):T(e.attribute)?(S(),k(\"div\",Vi,[m(\"div\",{class:\"w-full break-normal px-2 text-xs\",innerHTML:e.attribute.value},null,8,Xi)])):e.attribute.is_section?J(\"\",!0):(S(),k(\"div\",ji,[i.value?ae((S(),k(\"select\",{key:1,class:\"w-full\",\"onUpdate:modelValue\":v[5]||(v[5]=M=>e.attribute.value=M),id:\"value-\"+e.attribute.id},[(S(!0),k(Ne,null,Ue(H(e.attribute),(M,z)=>(S(),k(\"option\",{key:z,value:M,innerHTML:M},null,8,Ui))),128))],8,Yi)),[[nn,e.attribute.value]]):(S(),tn(F,{key:0,attribute:e.attribute,placeholder:s(e.attribute),type:\"text\",property:\"value\",mentionApi:e.mentionApi},null,8,[\"attribute\",\"placeholder\",\"mentionApi\"]))]))]),m(\"div\",Gi,[e.attribute.is_hidden?J(\"\",!0):(S(),k(\"a\",{key:0,role:\"button\",onClick:v[6]||(v[6]=M=>u(e.attribute)),class:\"w-6 lg:w-16 text-center inline-block cursor-pointer text-base-content hover:text-accent\"},[m(\"i\",{class:re(c(e.attribute)),\"aria-label\":h(e.attribute)},null,10,zi)])),n.isAdmin&&!e.attribute.is_hidden?(S(),k(\"a\",{key:1,role:\"button\",onClick:v[7]||(v[7]=M=>y(e.attribute)),class:\"w-6 lg:w-16 inline-block text-center cursor-pointer text-base-content hover:text-accent\"},[m(\"i\",{class:re(g(e.attribute)),\"aria-label\":A(e.attribute)},null,10,Wi)])):J(\"\",!0),e.attribute.is_hidden?J(\"\",!0):(S(),k(\"a\",{key:2,role:\"button\",class:\"w-6 lg:w-16 inline-block text-center flex-none cursor-pointer hover:text-error-content text-base-content\",onClick:v[8]||(v[8]=M=>f.$emit(\"remove\",e.attribute))},[m(\"i\",{class:\"fa-regular fa-trash-can\",\"aria-label\":o(\"columns.delete\"),title:o(\"columns.delete\")},null,8,qi)]))]),m(\"input\",{type:\"hidden\",name:\"attribute[]\",value:$(e.attribute)},null,8,Ki)],2)}}}),Zi={class:\"relative\"},Qi=[\"id\",\"placeholder\",\"onKeydown\"],eo=[\"id\",\"placeholder\"],to={key:2,class:\"absolute w-full left-0 bg-base-100 shadow-sm list-none p-2 m-0 z-1000\"},no=[\"onClick\",\"innerHTML\"],io=Ze({__name:\"MentionField\",props:{attribute:{},placeholder:{},type:{},property:{},mentionApi:{}},emits:[\"update:modelValue\",\"field-blur\"],setup(e,{emit:t}){const n=e,i=V([]),o=V(-1),r=V(null),a=V(null),s=t,d=w=>{const I=w.target.value,O=w.target.selectionStart,X=I.substring(0,O).match(/@(\\w{3,})$/);if(r.value=w.target.dataset.type,X){let f=n.mentionApi+\"?q=\"+X[1];fetch(f).then(v=>v.json()).then(v=>{i.value=v,o.value=0})}else i.value=[]},c=w=>{o.value!==-1&&(w.preventDefault(),o.value<i.value.length-1?o.value++:i.value.length>0&&(o.value=0))},h=w=>{o.value!==-1&&(w.preventDefault(),o.value>0?o.value--:i.value.length>0&&(o.value=i.value.length-1))},u=w=>{i.value.length>0&&o.value>=0&&(w.preventDefault(),g())},g=()=>{o.value>=0&&o.value<i.value.length&&T(i.value[o.value])},A=w=>w===o.value?\"p-1 bg-primary text-primary-content\":\"p-1\",y=()=>{i.value=[],o.value=-1},T=w=>{const I=a.value.selectionStart,O=n.attribute[n.property].substring(0,I),H=O.match(/@(\\w{3,})$/);if(H){const X=`@${H[1]}`,f=O.lastIndexOf(X),v=`[${w.model_type}:${w.id}] `;n.attribute[n.property]=n.attribute[n.property].replace(X,v),i.value=[],o.value=-1,rt(()=>{a.value.setSelectionRange(f+v.length,f+v.length),a.value.focus()})}},$=()=>{s(\"field-blur\")};return(w,I)=>{const O=en(\"click-outside\");return S(),k(\"div\",Zi,[e.type===\"text\"?ae((S(),k(\"input\",{key:0,type:\"text\",class:\"w-full\",\"onUpdate:modelValue\":I[0]||(I[0]=H=>e.attribute[e.property]=H),id:e.property+\"-\"+e.attribute.id,placeholder:e.placeholder,onInput:d,ref_key:\"textarea\",ref:a,onKeydown:[xe(yt(c,[\"prevent\"]),[\"down\"]),xe(yt(h,[\"prevent\"]),[\"up\"]),xe(yt(g,[\"prevent\"]),[\"enter\"]),xe(y,[\"esc\"])],onBlur:$},null,40,Qi)),[[Je,e.attribute[e.property]]]):e.type===\"textarea\"?ae((S(),k(\"textarea\",{key:1,type:\"text\",class:\"w-full\",\"onUpdate:modelValue\":I[1]||(I[1]=H=>e.attribute[e.property]=H),id:e.property+\"-\"+e.attribute.id,placeholder:e.placeholder,onInput:d,rows:\"3\",ref_key:\"textarea\",ref:a,onKeydown:[xe(c,[\"down\"]),xe(h,[\"up\"]),xe(u,[\"enter\"]),xe(y,[\"esc\"])],onBlur:$},null,40,eo)),[[Je,e.attribute[e.property]]]):J(\"\",!0),i.value.length?ae((S(),k(\"ul\",to,[(S(!0),k(Ne,null,Ue(i.value,(H,X)=>(S(),k(\"li\",{key:H.id,class:re(A(X)),onClick:f=>T(H),innerHTML:H.name},null,10,no))),128))])),[[O,y]]):J(\"\",!0)])}}});function oo(){return typeof window<\"u\"?window.console:global.console}const ro=oo();function ao(e){const t=Object.create(null);return function(i){return t[i]||(t[i]=e(i))}}const lo=/-(\\w)/g,Xt=ao(e=>e.replace(lo,(t,n)=>n?n.toUpperCase():\"\"));function _t(e){e.parentElement!==null&&e.parentElement.removeChild(e)}function jt(e,t,n){const i=n===0?e.children[0]:e.children[n-1].nextSibling;e.insertBefore(t,i)}function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,i)}return n}function ve(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Yt(Object(n),!0).forEach(function(i){so(e,i,n[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})}return e}function at(e){\"@babel/helpers - typeof\";return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?at=function(t){return typeof t}:at=function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},at(e)}function so(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(){return we=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},we.apply(this,arguments)}function uo(e,t){if(e==null)return{};var n={},i=Object.keys(e),o,r;for(r=0;r<i.length;r++)o=i[r],!(t.indexOf(o)>=0)&&(n[o]=e[o]);return n}function co(e,t){if(e==null)return{};var n=uo(e,t),i,o;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)i=r[o],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var fo=\"1.14.0\";function be(e){if(typeof window<\"u\"&&window.navigator)return!!navigator.userAgent.match(e)}var ye=be(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i),Qe=be(/Edge/i),Ut=be(/firefox/i),Ge=be(/safari/i)&&!be(/chrome/i)&&!be(/android/i),on=be(/iP(ad|od|hone)/i),ho=be(/chrome/i)&&be(/android/i),rn={capture:!1,passive:!1};function P(e,t,n){e.addEventListener(t,n,!ye&&rn)}function L(e,t,n){e.removeEventListener(t,n,!ye&&rn)}function ht(e,t){if(t){if(t[0]===\">\"&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch{return!1}return!1}}function mo(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function pe(e,t,n,i){if(e){n=n||document;do{if(t!=null&&(t[0]===\">\"?e.parentNode===n&&ht(e,t):ht(e,t))||i&&e===n)return e;if(e===n)break}while(e=mo(e))}return null}var Gt=/\\s+/g;function ie(e,t,n){if(e&&t)if(e.classList)e.classList[n?\"add\":\"remove\"](t);else{var i=(\" \"+e.className+\" \").replace(Gt,\" \").replace(\" \"+t+\" \",\" \");e.className=(i+(n?\" \"+t:\"\")).replace(Gt,\" \")}}function x(e,t,n){var i=e&&e.style;if(i){if(n===void 0)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(e,\"\"):e.currentStyle&&(n=e.currentStyle),t===void 0?n:n[t];!(t in i)&&t.indexOf(\"webkit\")===-1&&(t=\"-webkit-\"+t),i[t]=n+(typeof n==\"string\"?\"\":\"px\")}}function He(e,t){var n=\"\";if(typeof e==\"string\")n=e;else do{var i=x(e,\"transform\");i&&i!==\"none\"&&(n=i+\" \"+n)}while(!t&&(e=e.parentNode));var o=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return o&&new o(n)}function an(e,t,n){if(e){var i=e.getElementsByTagName(t),o=0,r=i.length;if(n)for(;o<r;o++)n(i[o],o);return i}return[]}function ge(){var e=document.scrollingElement;return e||document.documentElement}function W(e,t,n,i,o){if(!(!e.getBoundingClientRect&&e!==window)){var r,a,s,d,c,h,u;if(e!==window&&e.parentNode&&e!==ge()?(r=e.getBoundingClientRect(),a=r.top,s=r.left,d=r.bottom,c=r.right,h=r.height,u=r.width):(a=0,s=0,d=window.innerHeight,c=window.innerWidth,h=window.innerHeight,u=window.innerWidth),(t||n)&&e!==window&&(o=o||e.parentNode,!ye))do if(o&&o.getBoundingClientRect&&(x(o,\"transform\")!==\"none\"||n&&x(o,\"position\")!==\"static\")){var g=o.getBoundingClientRect();a-=g.top+parseInt(x(o,\"border-top-width\")),s-=g.left+parseInt(x(o,\"border-left-width\")),d=a+r.height,c=s+r.width;break}while(o=o.parentNode);if(i&&e!==window){var A=He(o||e),y=A&&A.a,T=A&&A.d;A&&(a/=T,s/=y,u/=y,h/=T,d=a+h,c=s+u)}return{top:a,left:s,bottom:d,right:c,width:u,height:h}}}function zt(e,t,n){for(var i=Te(e,!0),o=W(e)[t];i;){var r=W(i)[n],a=void 0;if(a=o>=r,!a)return i;if(i===ge())break;i=Te(i,!1)}return!1}function $e(e,t,n,i){for(var o=0,r=0,a=e.children;r<a.length;){if(a[r].style.display!==\"none\"&&a[r]!==_.ghost&&(i||a[r]!==_.dragged)&&pe(a[r],n.draggable,e,!1)){if(o===t)return a[r];o++}r++}return null}function Bt(e,t){for(var n=e.lastElementChild;n&&(n===_.ghost||x(n,\"display\")===\"none\"||t&&!ht(n,t));)n=n.previousElementSibling;return n||null}function de(e,t){var n=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)e.nodeName.toUpperCase()!==\"TEMPLATE\"&&e!==_.clone&&(!t||ht(e,t))&&n++;return n}function Wt(e){var t=0,n=0,i=ge();if(e)do{var o=He(e),r=o.a,a=o.d;t+=e.scrollLeft*r,n+=e.scrollTop*a}while(e!==i&&(e=e.parentNode));return[t,n]}function po(e,t){for(var n in e)if(e.hasOwnProperty(n)){for(var i in t)if(t.hasOwnProperty(i)&&t[i]===e[n][i])return Number(n)}return-1}function Te(e,t){if(!e||!e.getBoundingClientRect)return ge();var n=e,i=!1;do if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var o=x(n);if(n.clientWidth<n.scrollWidth&&(o.overflowX==\"auto\"||o.overflowX==\"scroll\")||n.clientHeight<n.scrollHeight&&(o.overflowY==\"auto\"||o.overflowY==\"scroll\")){if(!n.getBoundingClientRect||n===document.body)return ge();if(i||t)return n;i=!0}}while(n=n.parentNode);return ge()}function go(e,t){if(e&&t)for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function Et(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}var ze;function ln(e,t){return function(){if(!ze){var n=arguments,i=this;n.length===1?e.call(i,n[0]):e.apply(i,n),ze=setTimeout(function(){ze=void 0},t)}}}function vo(){clearTimeout(ze),ze=void 0}function sn(e,t,n){e.scrollLeft+=t,e.scrollTop+=n}function un(e){var t=window.Polymer,n=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):n?n(e).clone(!0)[0]:e.cloneNode(!0)}var le=\"Sortable\"+new Date().getTime();function bo(){var e=[],t;return{captureAnimationState:function(){if(e=[],!!this.options.animation){var i=[].slice.call(this.el.children);i.forEach(function(o){if(!(x(o,\"display\")===\"none\"||o===_.ghost)){e.push({target:o,rect:W(o)});var r=ve({},e[e.length-1].rect);if(o.thisAnimationDuration){var a=He(o,!0);a&&(r.top-=a.f,r.left-=a.e)}o.fromRect=r}})}},addAnimationState:function(i){e.push(i)},removeAnimationState:function(i){e.splice(po(e,{target:i}),1)},animateAll:function(i){var o=this;if(!this.options.animation){clearTimeout(t),typeof i==\"function\"&&i();return}var r=!1,a=0;e.forEach(function(s){var d=0,c=s.target,h=c.fromRect,u=W(c),g=c.prevFromRect,A=c.prevToRect,y=s.rect,T=He(c,!0);T&&(u.top-=T.f,u.left-=T.e),c.toRect=u,c.thisAnimationDuration&&Et(g,u)&&!Et(h,u)&&(y.top-u.top)/(y.left-u.left)===(h.top-u.top)/(h.left-u.left)&&(d=yo(y,g,A,o.options)),Et(u,h)||(c.prevFromRect=h,c.prevToRect=u,d||(d=o.options.animation),o.animate(c,y,u,d)),d&&(r=!0,a=Math.max(a,d),clearTimeout(c.animationResetTimer),c.animationResetTimer=setTimeout(function(){c.animationTime=0,c.prevFromRect=null,c.fromRect=null,c.prevToRect=null,c.thisAnimationDuration=null},d),c.thisAnimationDuration=d)}),clearTimeout(t),r?t=setTimeout(function(){typeof i==\"function\"&&i()},a):typeof i==\"function\"&&i(),e=[]},animate:function(i,o,r,a){if(a){x(i,\"transition\",\"\"),x(i,\"transform\",\"\");var s=He(this.el),d=s&&s.a,c=s&&s.d,h=(o.left-r.left)/(d||1),u=(o.top-r.top)/(c||1);i.animatingX=!!h,i.animatingY=!!u,x(i,\"transform\",\"translate3d(\"+h+\"px,\"+u+\"px,0)\"),this.forRepaintDummy=wo(i),x(i,\"transition\",\"transform \"+a+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),x(i,\"transform\",\"translate3d(0,0,0)\"),typeof i.animated==\"number\"&&clearTimeout(i.animated),i.animated=setTimeout(function(){x(i,\"transition\",\"\"),x(i,\"transform\",\"\"),i.animated=!1,i.animatingX=!1,i.animatingY=!1},a)}}}}function wo(e){return e.offsetWidth}function yo(e,t,n,i){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))/Math.sqrt(Math.pow(t.top-n.top,2)+Math.pow(t.left-n.left,2))*i.animation}var Ie=[],Tt={initializeByDefault:!0},et={mount:function(t){for(var n in Tt)Tt.hasOwnProperty(n)&&!(n in t)&&(t[n]=Tt[n]);Ie.forEach(function(i){if(i.pluginName===t.pluginName)throw\"Sortable: Cannot mount plugin \".concat(t.pluginName,\" more than once\")}),Ie.push(t)},pluginEvent:function(t,n,i){var o=this;this.eventCanceled=!1,i.cancel=function(){o.eventCanceled=!0};var r=t+\"Global\";Ie.forEach(function(a){n[a.pluginName]&&(n[a.pluginName][r]&&n[a.pluginName][r](ve({sortable:n},i)),n.options[a.pluginName]&&n[a.pluginName][t]&&n[a.pluginName][t](ve({sortable:n},i)))})},initializePlugins:function(t,n,i,o){Ie.forEach(function(s){var d=s.pluginName;if(!(!t.options[d]&&!s.initializeByDefault)){var c=new s(t,n,t.options);c.sortable=t,c.options=t.options,t[d]=c,we(i,c.defaults)}});for(var r in t.options)if(t.options.hasOwnProperty(r)){var a=this.modifyOption(t,r,t.options[r]);typeof a<\"u\"&&(t.options[r]=a)}},getEventProperties:function(t,n){var i={};return Ie.forEach(function(o){typeof o.eventProperties==\"function\"&&we(i,o.eventProperties.call(n[o.pluginName],t))}),i},modifyOption:function(t,n,i){var o;return Ie.forEach(function(r){t[r.pluginName]&&r.optionListeners&&typeof r.optionListeners[n]==\"function\"&&(o=r.optionListeners[n].call(t[r.pluginName],i))}),o}};function xo(e){var t=e.sortable,n=e.rootEl,i=e.name,o=e.targetEl,r=e.cloneEl,a=e.toEl,s=e.fromEl,d=e.oldIndex,c=e.newIndex,h=e.oldDraggableIndex,u=e.newDraggableIndex,g=e.originalEvent,A=e.putSortable,y=e.extraEventProperties;if(t=t||n&&n[le],!!t){var T,$=t.options,w=\"on\"+i.charAt(0).toUpperCase()+i.substr(1);window.CustomEvent&&!ye&&!Qe?T=new CustomEvent(i,{bubbles:!0,cancelable:!0}):(T=document.createEvent(\"Event\"),T.initEvent(i,!0,!0)),T.to=a||n,T.from=s||n,T.item=o||n,T.clone=r,T.oldIndex=d,T.newIndex=c,T.oldDraggableIndex=h,T.newDraggableIndex=u,T.originalEvent=g,T.pullMode=A?A.lastPutMode:void 0;var I=ve(ve({},y),et.getEventProperties(i,t));for(var O in I)T[O]=I[O];n&&n.dispatchEvent(T),$[w]&&$[w].call(t,T)}}var _o=[\"evt\"],te=function(t,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=i.evt,r=co(i,_o);et.pluginEvent.bind(_)(t,n,ve({dragEl:p,parentEl:Y,ghostEl:C,rootEl:R,nextEl:ke,lastDownEl:lt,cloneEl:U,cloneHidden:Ee,dragStarted:Ve,putSortable:q,activeSortable:_.active,originalEvent:o,oldIndex:Pe,oldDraggableIndex:We,newIndex:oe,newDraggableIndex:_e,hideGhostForTarget:hn,unhideGhostForTarget:mn,cloneNowHidden:function(){Ee=!0},cloneNowShown:function(){Ee=!1},dispatchSortableEvent:function(s){ee({sortable:n,name:s,originalEvent:o})}},r))};function ee(e){xo(ve({putSortable:q,cloneEl:U,targetEl:p,rootEl:R,oldIndex:Pe,oldDraggableIndex:We,newIndex:oe,newDraggableIndex:_e},e))}var p,Y,C,R,ke,lt,U,Ee,Pe,oe,We,_e,tt,q,Le=!1,mt=!1,pt=[],Se,fe,Dt,St,qt,Kt,Ve,Oe,qe,Ke=!1,nt=!1,st,K,Ct=[],Lt=!1,gt=[],wt=typeof document<\"u\",it=on,Jt=Qe||ye?\"cssFloat\":\"float\",Eo=wt&&!ho&&!on&&\"draggable\"in document.createElement(\"div\"),dn=(function(){if(wt){if(ye)return!1;var e=document.createElement(\"x\");return e.style.cssText=\"pointer-events:auto\",e.style.pointerEvents===\"auto\"}})(),cn=function(t,n){var i=x(t),o=parseInt(i.width)-parseInt(i.paddingLeft)-parseInt(i.paddingRight)-parseInt(i.borderLeftWidth)-parseInt(i.borderRightWidth),r=$e(t,0,n),a=$e(t,1,n),s=r&&x(r),d=a&&x(a),c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+W(r).width,h=d&&parseInt(d.marginLeft)+parseInt(d.marginRight)+W(a).width;if(i.display===\"flex\")return i.flexDirection===\"column\"||i.flexDirection===\"column-reverse\"?\"vertical\":\"horizontal\";if(i.display===\"grid\")return i.gridTemplateColumns.split(\" \").length<=1?\"vertical\":\"horizontal\";if(r&&s.float&&s.float!==\"none\"){var u=s.float===\"left\"?\"left\":\"right\";return a&&(d.clear===\"both\"||d.clear===u)?\"vertical\":\"horizontal\"}return r&&(s.display===\"block\"||s.display===\"flex\"||s.display===\"table\"||s.display===\"grid\"||c>=o&&i[Jt]===\"none\"||a&&i[Jt]===\"none\"&&c+h>o)?\"vertical\":\"horizontal\"},To=function(t,n,i){var o=i?t.left:t.top,r=i?t.right:t.bottom,a=i?t.width:t.height,s=i?n.left:n.top,d=i?n.right:n.bottom,c=i?n.width:n.height;return o===s||r===d||o+a/2===s+c/2},Do=function(t,n){var i;return pt.some(function(o){var r=o[le].options.emptyInsertThreshold;if(!(!r||Bt(o))){var a=W(o),s=t>=a.left-r&&t<=a.right+r,d=n>=a.top-r&&n<=a.bottom+r;if(s&&d)return i=o}}),i},fn=function(t){function n(r,a){return function(s,d,c,h){var u=s.options.group.name&&d.options.group.name&&s.options.group.name===d.options.group.name;if(r==null&&(a||u))return!0;if(r==null||r===!1)return!1;if(a&&r===\"clone\")return r;if(typeof r==\"function\")return n(r(s,d,c,h),a)(s,d,c,h);var g=(a?s:d).options.group.name;return r===!0||typeof r==\"string\"&&r===g||r.join&&r.indexOf(g)>-1}}var i={},o=t.group;(!o||at(o)!=\"object\")&&(o={name:o}),i.name=o.name,i.checkPull=n(o.pull,!0),i.checkPut=n(o.put),i.revertClone=o.revertClone,t.group=i},hn=function(){!dn&&C&&x(C,\"display\",\"none\")},mn=function(){!dn&&C&&x(C,\"display\",\"\")};wt&&document.addEventListener(\"click\",function(e){if(mt)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),mt=!1,!1},!0);var Ce=function(t){if(p){t=t.touches?t.touches[0]:t;var n=Do(t.clientX,t.clientY);if(n){var i={};for(var o in t)t.hasOwnProperty(o)&&(i[o]=t[o]);i.target=i.rootEl=n,i.preventDefault=void 0,i.stopPropagation=void 0,n[le]._onDragOver(i)}}},So=function(t){p&&p.parentNode[le]._isOutsideThisEl(t.target)};function _(e,t){if(!(e&&e.nodeType&&e.nodeType===1))throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(e));this.el=e,this.options=t=we({},t),e[le]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return cn(e,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(a,s){a.setData(\"Text\",s.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:_.supportPointer!==!1&&\"PointerEvent\"in window&&!Ge,emptyInsertThreshold:5};et.initializePlugins(this,e,n);for(var i in n)!(i in t)&&(t[i]=n[i]);fn(t);for(var o in this)o.charAt(0)===\"_\"&&typeof this[o]==\"function\"&&(this[o]=this[o].bind(this));this.nativeDraggable=t.forceFallback?!1:Eo,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?P(e,\"pointerdown\",this._onTapStart):(P(e,\"mousedown\",this._onTapStart),P(e,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(P(e,\"dragover\",this),P(e,\"dragenter\",this)),pt.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),we(this,bo())}_.prototype={constructor:_,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(Oe=null)},_getDirection:function(t,n){return typeof this.options.direction==\"function\"?this.options.direction.call(this,t,n,p):this.options.direction},_onTapStart:function(t){if(t.cancelable){var n=this,i=this.el,o=this.options,r=o.preventOnFilter,a=t.type,s=t.touches&&t.touches[0]||t.pointerType&&t.pointerType===\"touch\"&&t,d=(s||t).target,c=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||d,h=o.filter;if(No(i),!p&&!(/mousedown|pointerdown/.test(a)&&t.button!==0||o.disabled)&&!c.isContentEditable&&!(!this.nativeDraggable&&Ge&&d&&d.tagName.toUpperCase()===\"SELECT\")&&(d=pe(d,o.draggable,i,!1),!(d&&d.animated)&&lt!==d)){if(Pe=de(d),We=de(d,o.draggable),typeof h==\"function\"){if(h.call(this,t,d,this)){ee({sortable:n,rootEl:c,name:\"filter\",targetEl:d,toEl:i,fromEl:i}),te(\"filter\",n,{evt:t}),r&&t.cancelable&&t.preventDefault();return}}else if(h&&(h=h.split(\",\").some(function(u){if(u=pe(c,u.trim(),i,!1),u)return ee({sortable:n,rootEl:u,name:\"filter\",targetEl:d,fromEl:i,toEl:i}),te(\"filter\",n,{evt:t}),!0}),h)){r&&t.cancelable&&t.preventDefault();return}o.handle&&!pe(c,o.handle,i,!1)||this._prepareDragStart(t,s,d)}}},_prepareDragStart:function(t,n,i){var o=this,r=o.el,a=o.options,s=r.ownerDocument,d;if(i&&!p&&i.parentNode===r){var c=W(i);if(R=r,p=i,Y=p.parentNode,ke=p.nextSibling,lt=i,tt=a.group,_.dragged=p,Se={target:p,clientX:(n||t).clientX,clientY:(n||t).clientY},qt=Se.clientX-c.left,Kt=Se.clientY-c.top,this._lastX=(n||t).clientX,this._lastY=(n||t).clientY,p.style[\"will-change\"]=\"all\",d=function(){if(te(\"delayEnded\",o,{evt:t}),_.eventCanceled){o._onDrop();return}o._disableDelayedDragEvents(),!Ut&&o.nativeDraggable&&(p.draggable=!0),o._triggerDragStart(t,n),ee({sortable:o,name:\"choose\",originalEvent:t}),ie(p,a.chosenClass,!0)},a.ignore.split(\",\").forEach(function(h){an(p,h.trim(),kt)}),P(s,\"dragover\",Ce),P(s,\"mousemove\",Ce),P(s,\"touchmove\",Ce),P(s,\"mouseup\",o._onDrop),P(s,\"touchend\",o._onDrop),P(s,\"touchcancel\",o._onDrop),Ut&&this.nativeDraggable&&(this.options.touchStartThreshold=4,p.draggable=!0),te(\"delayStart\",this,{evt:t}),a.delay&&(!a.delayOnTouchOnly||n)&&(!this.nativeDraggable||!(Qe||ye))){if(_.eventCanceled){this._onDrop();return}P(s,\"mouseup\",o._disableDelayedDrag),P(s,\"touchend\",o._disableDelayedDrag),P(s,\"touchcancel\",o._disableDelayedDrag),P(s,\"mousemove\",o._delayedDragTouchMoveHandler),P(s,\"touchmove\",o._delayedDragTouchMoveHandler),a.supportPointer&&P(s,\"pointermove\",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(d,a.delay)}else d()}},_delayedDragTouchMoveHandler:function(t){var n=t.touches?t.touches[0]:t;Math.max(Math.abs(n.clientX-this._lastX),Math.abs(n.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){p&&kt(p),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;L(t,\"mouseup\",this._disableDelayedDrag),L(t,\"touchend\",this._disableDelayedDrag),L(t,\"touchcancel\",this._disableDelayedDrag),L(t,\"mousemove\",this._delayedDragTouchMoveHandler),L(t,\"touchmove\",this._delayedDragTouchMoveHandler),L(t,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,n){n=n||t.pointerType==\"touch\"&&t,!this.nativeDraggable||n?this.options.supportPointer?P(document,\"pointermove\",this._onTouchMove):n?P(document,\"touchmove\",this._onTouchMove):P(document,\"mousemove\",this._onTouchMove):(P(p,\"dragend\",this),P(R,\"dragstart\",this._onDragStart));try{document.selection?ut(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,n){if(Le=!1,R&&p){te(\"dragStarted\",this,{evt:n}),this.nativeDraggable&&P(document,\"dragover\",So);var i=this.options;!t&&ie(p,i.dragClass,!1),ie(p,i.ghostClass,!0),_.active=this,t&&this._appendGhost(),ee({sortable:this,name:\"start\",originalEvent:n})}else this._nulling()},_emulateDragOver:function(){if(fe){this._lastX=fe.clientX,this._lastY=fe.clientY,hn();for(var t=document.elementFromPoint(fe.clientX,fe.clientY),n=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(fe.clientX,fe.clientY),t!==n);)n=t;if(p.parentNode[le]._isOutsideThisEl(t),n)do{if(n[le]){var i=void 0;if(i=n[le]._onDragOver({clientX:fe.clientX,clientY:fe.clientY,target:t,rootEl:n}),i&&!this.options.dragoverBubble)break}t=n}while(n=n.parentNode);mn()}},_onTouchMove:function(t){if(Se){var n=this.options,i=n.fallbackTolerance,o=n.fallbackOffset,r=t.touches?t.touches[0]:t,a=C&&He(C,!0),s=C&&a&&a.a,d=C&&a&&a.d,c=it&&K&&Wt(K),h=(r.clientX-Se.clientX+o.x)/(s||1)+(c?c[0]-Ct[0]:0)/(s||1),u=(r.clientY-Se.clientY+o.y)/(d||1)+(c?c[1]-Ct[1]:0)/(d||1);if(!_.active&&!Le){if(i&&Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))<i)return;this._onDragStart(t,!0)}if(C){a?(a.e+=h-(Dt||0),a.f+=u-(St||0)):a={a:1,b:0,c:0,d:1,e:h,f:u};var g=\"matrix(\".concat(a.a,\",\").concat(a.b,\",\").concat(a.c,\",\").concat(a.d,\",\").concat(a.e,\",\").concat(a.f,\")\");x(C,\"webkitTransform\",g),x(C,\"mozTransform\",g),x(C,\"msTransform\",g),x(C,\"transform\",g),Dt=h,St=u,fe=r}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!C){var t=this.options.fallbackOnBody?document.body:R,n=W(p,!0,it,!0,t),i=this.options;if(it){for(K=t;x(K,\"position\")===\"static\"&&x(K,\"transform\")===\"none\"&&K!==document;)K=K.parentNode;K!==document.body&&K!==document.documentElement?(K===document&&(K=ge()),n.top+=K.scrollTop,n.left+=K.scrollLeft):K=ge(),Ct=Wt(K)}C=p.cloneNode(!0),ie(C,i.ghostClass,!1),ie(C,i.fallbackClass,!0),ie(C,i.dragClass,!0),x(C,\"transition\",\"\"),x(C,\"transform\",\"\"),x(C,\"box-sizing\",\"border-box\"),x(C,\"margin\",0),x(C,\"top\",n.top),x(C,\"left\",n.left),x(C,\"width\",n.width),x(C,\"height\",n.height),x(C,\"opacity\",\"0.8\"),x(C,\"position\",it?\"absolute\":\"fixed\"),x(C,\"zIndex\",\"100000\"),x(C,\"pointerEvents\",\"none\"),_.ghost=C,t.appendChild(C),x(C,\"transform-origin\",qt/parseInt(C.style.width)*100+\"% \"+Kt/parseInt(C.style.height)*100+\"%\")}},_onDragStart:function(t,n){var i=this,o=t.dataTransfer,r=i.options;if(te(\"dragStart\",this,{evt:t}),_.eventCanceled){this._onDrop();return}te(\"setupClone\",this),_.eventCanceled||(U=un(p),U.draggable=!1,U.style[\"will-change\"]=\"\",this._hideClone(),ie(U,this.options.chosenClass,!1),_.clone=U),i.cloneId=ut(function(){te(\"clone\",i),!_.eventCanceled&&(i.options.removeCloneOnHide||R.insertBefore(U,p),i._hideClone(),ee({sortable:i,name:\"clone\"}))}),!n&&ie(p,r.dragClass,!0),n?(mt=!0,i._loopId=setInterval(i._emulateDragOver,50)):(L(document,\"mouseup\",i._onDrop),L(document,\"touchend\",i._onDrop),L(document,\"touchcancel\",i._onDrop),o&&(o.effectAllowed=\"move\",r.setData&&r.setData.call(i,o,p)),P(document,\"drop\",i),x(p,\"transform\",\"translateZ(0)\")),Le=!0,i._dragStartId=ut(i._dragStarted.bind(i,n,t)),P(document,\"selectstart\",i),Ve=!0,Ge&&x(document.body,\"user-select\",\"none\")},_onDragOver:function(t){var n=this.el,i=t.target,o,r,a,s=this.options,d=s.group,c=_.active,h=tt===d,u=s.sort,g=q||c,A,y=this,T=!1;if(Lt)return;function $(me,Fe){te(me,y,ve({evt:t,isOwner:h,axis:A?\"vertical\":\"horizontal\",revert:a,dragRect:o,targetRect:r,canSort:u,fromSortable:g,target:i,completed:I,onMove:function(De,E){return ot(R,n,p,o,De,W(De),t,E)},changed:O},Fe))}function w(){$(\"dragOverAnimationCapture\"),y.captureAnimationState(),y!==g&&g.captureAnimationState()}function I(me){return $(\"dragOverCompleted\",{insertion:me}),me&&(h?c._hideClone():c._showClone(y),y!==g&&(ie(p,q?q.options.ghostClass:c.options.ghostClass,!1),ie(p,s.ghostClass,!0)),q!==y&&y!==_.active?q=y:y===_.active&&q&&(q=null),g===y&&(y._ignoreWhileAnimating=i),y.animateAll(function(){$(\"dragOverAnimationComplete\"),y._ignoreWhileAnimating=null}),y!==g&&(g.animateAll(),g._ignoreWhileAnimating=null)),(i===p&&!p.animated||i===n&&!i.animated)&&(Oe=null),!s.dragoverBubble&&!t.rootEl&&i!==document&&(p.parentNode[le]._isOutsideThisEl(t.target),!me&&Ce(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),T=!0}function O(){oe=de(p),_e=de(p,s.draggable),ee({sortable:y,name:\"change\",toEl:n,newIndex:oe,newDraggableIndex:_e,originalEvent:t})}if(t.preventDefault!==void 0&&t.cancelable&&t.preventDefault(),i=pe(i,s.draggable,n,!0),$(\"dragOver\"),_.eventCanceled)return T;if(p.contains(t.target)||i.animated&&i.animatingX&&i.animatingY||y._ignoreWhileAnimating===i)return I(!1);if(mt=!1,c&&!s.disabled&&(h?u||(a=Y!==R):q===this||(this.lastPutMode=tt.checkPull(this,c,p,t))&&d.checkPut(this,c,p,t))){if(A=this._getDirection(t,i)===\"vertical\",o=W(p),$(\"dragOverValid\"),_.eventCanceled)return T;if(a)return Y=R,w(),this._hideClone(),$(\"revert\"),_.eventCanceled||(ke?R.insertBefore(p,ke):R.appendChild(p)),I(!0);var H=Bt(n,s.draggable);if(!H||Ao(t,A,this)&&!H.animated){if(H===p)return I(!1);if(H&&n===t.target&&(i=H),i&&(r=W(i)),ot(R,n,p,o,i,r,t,!!i)!==!1)return w(),n.appendChild(p),Y=n,O(),I(!0)}else if(H&&Mo(t,A,this)){var X=$e(n,0,s,!0);if(X===p)return I(!1);if(i=X,r=W(i),ot(R,n,p,o,i,r,t,!1)!==!1)return w(),n.insertBefore(p,X),Y=n,O(),I(!0)}else if(i.parentNode===n){r=W(i);var f=0,v,F=p.parentNode!==n,M=!To(p.animated&&p.toRect||o,i.animated&&i.toRect||r,A),z=A?\"top\":\"left\",Z=zt(i,\"top\",\"top\")||zt(p,\"top\",\"top\"),se=Z?Z.scrollTop:void 0;Oe!==i&&(v=r[z],Ke=!1,nt=!M&&s.invertSwap||F),f=Io(t,i,r,A,M?1:s.swapThreshold,s.invertedSwapThreshold==null?s.swapThreshold:s.invertedSwapThreshold,nt,Oe===i);var Q;if(f!==0){var ue=de(p);do ue-=f,Q=Y.children[ue];while(Q&&(x(Q,\"display\")===\"none\"||Q===C))}if(f===0||Q===i)return I(!1);Oe=i,qe=f;var he=i.nextElementSibling,ne=!1;ne=f===1;var ce=ot(R,n,p,o,i,r,t,ne);if(ce!==!1)return(ce===1||ce===-1)&&(ne=ce===1),Lt=!0,setTimeout(ko,30),w(),ne&&!he?n.appendChild(p):i.parentNode.insertBefore(p,ne?he:i),Z&&sn(Z,0,se-Z.scrollTop),Y=p.parentNode,v!==void 0&&!nt&&(st=Math.abs(v-W(i)[z])),O(),I(!0)}if(n.contains(p))return I(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){L(document,\"mousemove\",this._onTouchMove),L(document,\"touchmove\",this._onTouchMove),L(document,\"pointermove\",this._onTouchMove),L(document,\"dragover\",Ce),L(document,\"mousemove\",Ce),L(document,\"touchmove\",Ce)},_offUpEvents:function(){var t=this.el.ownerDocument;L(t,\"mouseup\",this._onDrop),L(t,\"touchend\",this._onDrop),L(t,\"pointerup\",this._onDrop),L(t,\"touchcancel\",this._onDrop),L(document,\"selectstart\",this)},_onDrop:function(t){var n=this.el,i=this.options;if(oe=de(p),_e=de(p,i.draggable),te(\"drop\",this,{evt:t}),Y=p&&p.parentNode,oe=de(p),_e=de(p,i.draggable),_.eventCanceled){this._nulling();return}Le=!1,nt=!1,Ke=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Nt(this.cloneId),Nt(this._dragStartId),this.nativeDraggable&&(L(document,\"drop\",this),L(n,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Ge&&x(document.body,\"user-select\",\"\"),x(p,\"transform\",\"\"),t&&(Ve&&(t.cancelable&&t.preventDefault(),!i.dropBubble&&t.stopPropagation()),C&&C.parentNode&&C.parentNode.removeChild(C),(R===Y||q&&q.lastPutMode!==\"clone\")&&U&&U.parentNode&&U.parentNode.removeChild(U),p&&(this.nativeDraggable&&L(p,\"dragend\",this),kt(p),p.style[\"will-change\"]=\"\",Ve&&!Le&&ie(p,q?q.options.ghostClass:this.options.ghostClass,!1),ie(p,this.options.chosenClass,!1),ee({sortable:this,name:\"unchoose\",toEl:Y,newIndex:null,newDraggableIndex:null,originalEvent:t}),R!==Y?(oe>=0&&(ee({rootEl:Y,name:\"add\",toEl:Y,fromEl:R,originalEvent:t}),ee({sortable:this,name:\"remove\",toEl:Y,originalEvent:t}),ee({rootEl:Y,name:\"sort\",toEl:Y,fromEl:R,originalEvent:t}),ee({sortable:this,name:\"sort\",toEl:Y,originalEvent:t})),q&&q.save()):oe!==Pe&&oe>=0&&(ee({sortable:this,name:\"update\",toEl:Y,originalEvent:t}),ee({sortable:this,name:\"sort\",toEl:Y,originalEvent:t})),_.active&&((oe==null||oe===-1)&&(oe=Pe,_e=We),ee({sortable:this,name:\"end\",toEl:Y,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){te(\"nulling\",this),R=p=Y=C=ke=U=lt=Ee=Se=fe=Ve=oe=_e=Pe=We=Oe=qe=q=tt=_.dragged=_.ghost=_.clone=_.active=null,gt.forEach(function(t){t.checked=!0}),gt.length=Dt=St=0},handleEvent:function(t){switch(t.type){case\"drop\":case\"dragend\":this._onDrop(t);break;case\"dragenter\":case\"dragover\":p&&(this._onDragOver(t),Co(t));break;case\"selectstart\":t.preventDefault();break}},toArray:function(){for(var t=[],n,i=this.el.children,o=0,r=i.length,a=this.options;o<r;o++)n=i[o],pe(n,a.draggable,this.el,!1)&&t.push(n.getAttribute(a.dataIdAttr)||Lo(n));return t},sort:function(t,n){var i={},o=this.el;this.toArray().forEach(function(r,a){var s=o.children[a];pe(s,this.options.draggable,o,!1)&&(i[r]=s)},this),n&&this.captureAnimationState(),t.forEach(function(r){i[r]&&(o.removeChild(i[r]),o.appendChild(i[r]))}),n&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,n){return pe(t,n||this.options.draggable,this.el,!1)},option:function(t,n){var i=this.options;if(n===void 0)return i[t];var o=et.modifyOption(this,t,n);typeof o<\"u\"?i[t]=o:i[t]=n,t===\"group\"&&fn(i)},destroy:function(){te(\"destroy\",this);var t=this.el;t[le]=null,L(t,\"mousedown\",this._onTapStart),L(t,\"touchstart\",this._onTapStart),L(t,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(L(t,\"dragover\",this),L(t,\"dragenter\",this)),Array.prototype.forEach.call(t.querySelectorAll(\"[draggable]\"),function(n){n.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),pt.splice(pt.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!Ee){if(te(\"hideClone\",this),_.eventCanceled)return;x(U,\"display\",\"none\"),this.options.removeCloneOnHide&&U.parentNode&&U.parentNode.removeChild(U),Ee=!0}},_showClone:function(t){if(t.lastPutMode!==\"clone\"){this._hideClone();return}if(Ee){if(te(\"showClone\",this),_.eventCanceled)return;p.parentNode==R&&!this.options.group.revertClone?R.insertBefore(U,p):ke?R.insertBefore(U,ke):R.appendChild(U),this.options.group.revertClone&&this.animate(p,U),x(U,\"display\",\"\"),Ee=!1}}};function Co(e){e.dataTransfer&&(e.dataTransfer.dropEffect=\"move\"),e.cancelable&&e.preventDefault()}function ot(e,t,n,i,o,r,a,s){var d,c=e[le],h=c.options.onMove,u;return window.CustomEvent&&!ye&&!Qe?d=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}):(d=document.createEvent(\"Event\"),d.initEvent(\"move\",!0,!0)),d.to=t,d.from=e,d.dragged=n,d.draggedRect=i,d.related=o||t,d.relatedRect=r||W(t),d.willInsertAfter=s,d.originalEvent=a,e.dispatchEvent(d),h&&(u=h.call(c,d,a)),u}function kt(e){e.draggable=!1}function ko(){Lt=!1}function Mo(e,t,n){var i=W($e(n.el,0,n.options,!0)),o=10;return t?e.clientX<i.left-o||e.clientY<i.top&&e.clientX<i.right:e.clientY<i.top-o||e.clientY<i.bottom&&e.clientX<i.left}function Ao(e,t,n){var i=W(Bt(n.el,n.options.draggable)),o=10;return t?e.clientX>i.right+o||e.clientX<=i.right&&e.clientY>i.bottom&&e.clientX>=i.left:e.clientX>i.right&&e.clientY>i.top||e.clientX<=i.right&&e.clientY>i.bottom+o}function Io(e,t,n,i,o,r,a,s){var d=i?e.clientY:e.clientX,c=i?n.height:n.width,h=i?n.top:n.left,u=i?n.bottom:n.right,g=!1;if(!a){if(s&&st<c*o){if(!Ke&&(qe===1?d>h+c*r/2:d<u-c*r/2)&&(Ke=!0),Ke)g=!0;else if(qe===1?d<h+st:d>u-st)return-qe}else if(d>h+c*(1-o)/2&&d<u-c*(1-o)/2)return Oo(t)}return g=g||a,g&&(d<h+c*r/2||d>u-c*r/2)?d>h+c/2?1:-1:0}function Oo(e){return de(p)<de(e)?1:-1}function Lo(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,n=t.length,i=0;n--;)i+=t.charCodeAt(n);return i.toString(36)}function No(e){gt.length=0;for(var t=e.getElementsByTagName(\"input\"),n=t.length;n--;){var i=t[n];i.checked&&gt.push(i)}}function ut(e){return setTimeout(e,0)}function Nt(e){return clearTimeout(e)}wt&&P(document,\"touchmove\",function(e){(_.active||Le)&&e.cancelable&&e.preventDefault()});_.utils={on:P,off:L,css:x,find:an,is:function(t,n){return!!pe(t,n,t,!1)},extend:go,throttle:ln,closest:pe,toggleClass:ie,clone:un,index:de,nextTick:ut,cancelNextTick:Nt,detectDirection:cn,getChild:$e};_.get=function(e){return e[le]};_.mount=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t[0].constructor===Array&&(t=t[0]),t.forEach(function(i){if(!i.prototype||!i.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(i));i.utils&&(_.utils=ve(ve({},_.utils),i.utils)),et.mount(i)})};_.create=function(e,t){return new _(e,t)};_.version=fo;var G=[],Xe,Pt,Ht=!1,Mt,At,vt,je;function Po(){function e(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var t in this)t.charAt(0)===\"_\"&&typeof this[t]==\"function\"&&(this[t]=this[t].bind(this))}return e.prototype={dragStarted:function(n){var i=n.originalEvent;this.sortable.nativeDraggable?P(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?P(document,\"pointermove\",this._handleFallbackAutoScroll):i.touches?P(document,\"touchmove\",this._handleFallbackAutoScroll):P(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(n){var i=n.originalEvent;!this.options.dragOverBubble&&!i.rootEl&&this._handleAutoScroll(i)},drop:function(){this.sortable.nativeDraggable?L(document,\"dragover\",this._handleAutoScroll):(L(document,\"pointermove\",this._handleFallbackAutoScroll),L(document,\"touchmove\",this._handleFallbackAutoScroll),L(document,\"mousemove\",this._handleFallbackAutoScroll)),Zt(),dt(),vo()},nulling:function(){vt=Pt=Xe=Ht=je=Mt=At=null,G.length=0},_handleFallbackAutoScroll:function(n){this._handleAutoScroll(n,!0)},_handleAutoScroll:function(n,i){var o=this,r=(n.touches?n.touches[0]:n).clientX,a=(n.touches?n.touches[0]:n).clientY,s=document.elementFromPoint(r,a);if(vt=n,i||this.options.forceAutoScrollFallback||Qe||ye||Ge){It(n,this.options,s,i);var d=Te(s,!0);Ht&&(!je||r!==Mt||a!==At)&&(je&&Zt(),je=setInterval(function(){var c=Te(document.elementFromPoint(r,a),!0);c!==d&&(d=c,dt()),It(n,o.options,c,i)},10),Mt=r,At=a)}else{if(!this.options.bubbleScroll||Te(s,!0)===ge()){dt();return}It(n,this.options,Te(s,!1),!1)}}},we(e,{pluginName:\"scroll\",initializeByDefault:!0})}function dt(){G.forEach(function(e){clearInterval(e.pid)}),G=[]}function Zt(){clearInterval(je)}var It=ln(function(e,t,n,i){if(t.scroll){var o=(e.touches?e.touches[0]:e).clientX,r=(e.touches?e.touches[0]:e).clientY,a=t.scrollSensitivity,s=t.scrollSpeed,d=ge(),c=!1,h;Pt!==n&&(Pt=n,dt(),Xe=t.scroll,h=t.scrollFn,Xe===!0&&(Xe=Te(n,!0)));var u=0,g=Xe;do{var A=g,y=W(A),T=y.top,$=y.bottom,w=y.left,I=y.right,O=y.width,H=y.height,X=void 0,f=void 0,v=A.scrollWidth,F=A.scrollHeight,M=x(A),z=A.scrollLeft,Z=A.scrollTop;A===d?(X=O<v&&(M.overflowX===\"auto\"||M.overflowX===\"scroll\"||M.overflowX===\"visible\"),f=H<F&&(M.overflowY===\"auto\"||M.overflowY===\"scroll\"||M.overflowY===\"visible\")):(X=O<v&&(M.overflowX===\"auto\"||M.overflowX===\"scroll\"),f=H<F&&(M.overflowY===\"auto\"||M.overflowY===\"scroll\"));var se=X&&(Math.abs(I-o)<=a&&z+O<v)-(Math.abs(w-o)<=a&&!!z),Q=f&&(Math.abs($-r)<=a&&Z+H<F)-(Math.abs(T-r)<=a&&!!Z);if(!G[u])for(var ue=0;ue<=u;ue++)G[ue]||(G[ue]={});(G[u].vx!=se||G[u].vy!=Q||G[u].el!==A)&&(G[u].el=A,G[u].vx=se,G[u].vy=Q,clearInterval(G[u].pid),(se!=0||Q!=0)&&(c=!0,G[u].pid=setInterval((function(){i&&this.layer===0&&_.active._onTouchMove(vt);var he=G[this.layer].vy?G[this.layer].vy*s:0,ne=G[this.layer].vx?G[this.layer].vx*s:0;typeof h==\"function\"&&h.call(_.dragged.parentNode[le],ne,he,e,vt,G[this.layer].el)!==\"continue\"||sn(G[this.layer].el,ne,he)}).bind({layer:u}),24))),u++}while(t.bubbleScroll&&g!==d&&(g=Te(g,!1)));Ht=c}},30),pn=function(t){var n=t.originalEvent,i=t.putSortable,o=t.dragEl,r=t.activeSortable,a=t.dispatchSortableEvent,s=t.hideGhostForTarget,d=t.unhideGhostForTarget;if(n){var c=i||r;s();var h=n.changedTouches&&n.changedTouches.length?n.changedTouches[0]:n,u=document.elementFromPoint(h.clientX,h.clientY);d(),c&&!c.el.contains(u)&&(a(\"spill\"),this.onSpill({dragEl:o,putSortable:i}))}};function Rt(){}Rt.prototype={startIndex:null,dragStart:function(t){var n=t.oldDraggableIndex;this.startIndex=n},onSpill:function(t){var n=t.dragEl,i=t.putSortable;this.sortable.captureAnimationState(),i&&i.captureAnimationState();var o=$e(this.sortable.el,this.startIndex,this.options);o?this.sortable.el.insertBefore(n,o):this.sortable.el.appendChild(n),this.sortable.animateAll(),i&&i.animateAll()},drop:pn};we(Rt,{pluginName:\"revertOnSpill\"});function Vt(){}Vt.prototype={onSpill:function(t){var n=t.dragEl,i=t.putSortable,o=i||this.sortable;o.captureAnimationState(),n.parentNode&&n.parentNode.removeChild(n),o.animateAll()},drop:pn};we(Vt,{pluginName:\"removeOnSpill\"});_.mount(new Po);_.mount(Vt,Rt);function Ho(e,t){return Object.values(e).indexOf(t)}function $o(e,t,n,i){if(!e)return[];const o=Object.values(e),r=t.length-i;return[...t].map((s,d)=>d>=r?o.length:o.indexOf(s))}function Fo(e){return[\"transition-group\",\"TransitionGroup\"].includes(e)}function Qt(e){if(!e||e.length!==1)return!1;const[{type:t}]=e;return t?Fo(t.name):!1}function Bo(e,t){return t?{...t.props,...t.attrs}:e}const $t=[\"Start\",\"Add\",\"Remove\",\"Update\",\"End\"],Ft=[\"Choose\",\"Unchoose\",\"Sort\",\"Filter\",\"Clone\"],Ro=[\"Move\",...$t,...Ft].map(e=>\"on\"+e);let Ot=null;const Vo=Ze({name:\"VueDraggableNext\",inheritAttrs:!1,props:{options:Object,list:{type:Array,required:!1,default:null},noTransitionOnDrag:{type:Boolean,default:!1},clone:{type:Function,default:e=>e},tag:{type:String,default:\"div\"},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null},component:{type:String,default:null},modelValue:{type:Array,required:!1,default:null}},emits:[\"update:modelValue\",\"move\",\"change\",...$t.map(e=>e.toLowerCase()),...Ft.map(e=>e.toLowerCase())],setup(e,{emit:t,slots:n,attrs:i}){const o=V(!1),r=V(!1),a=V(0),s=V(0),d=V([]),c=V(null),h=V(null),u=yn(()=>e.list?e.list:e.modelValue),g=xn();function A(){return e.component?Ye(e.component):e.tag}function y(l){if(h.value)for(const b in l){const D=Xt(b);Ro.indexOf(D)===-1&&h.value.option(D,l[b])}}function T(){return g?.proxy?.$el.children||[]}async function $(){await rt(),d.value=$o(T(),g?.proxy?.$el.children||[],o.value,s.value)}function w(l){const b=Ho(T()||[],l);if(b===-1)return null;const D=u.value?u.value[b]:null;return{index:b,element:D}}function I(l){rt(()=>t(\"change\",l))}function O(l){if(e.list){l(e.list);return}const b=[...e.modelValue||[]];l(b),t(\"update:modelValue\",b)}function H(...l){O(D=>D.splice(...l))}function X(l,b){O(j=>j.splice(b,0,j.splice(l,1)[0]))}function f(l){const b=d.value,D=b.length;return l>D-1?D:b[l]}function v(){return n.default&&n.default()[0]?.component?.proxy||null}function F(l){if(!e.noTransitionOnDrag||!o.value)return;const b=T();b[l]&&(b[l].data=null);const D=v();D&&(D.children=[],D.kept=void 0)}function M(l){$(),c.value=w(l.item),c.value&&(l.item._underlying_vm_=e.clone(c.value.element),Ot=l.item)}function z(l){const b=l.item._underlying_vm_;if(b===void 0)return;_t(l.item);const D=f(l.newIndex);H(D,0,b),$(),I({added:{element:b,newIndex:D}})}function Z(l){if(jt(g?.proxy?.$el,l.item,l.oldIndex),l.pullMode===\"clone\"){_t(l.clone);return}if(!c.value)return;const b=c.value.index;H(b,1),F(b),I({removed:{element:c.value.element,oldIndex:b}})}function se(l){_t(l.item),jt(l.from,l.item,l.oldIndex);const b=c.value?.index,D=f(l.newIndex);X(b,D),I({moved:{element:c.value?.element,oldIndex:b,newIndex:D}})}function Q(l,b){Object.prototype.hasOwnProperty.call(l,b)&&(l[b]+=a.value)}function ue(l){return l.__draggable_component__}function he({to:l,related:b}){const D=ue(l);if(!D)return{component:D};const j=D.realList,B={list:j,component:D};if(l!==b&&j&&D.getUnderlyingVm){const N=D.getUnderlyingVm(b);if(N)return Object.assign(N,B)}return B}function ne(l,b){const D=[...b.to.children].filter(Be=>Be.style.display!==\"none\");if(D.length===0)return 0;const j=D.indexOf(b.related),B=l.component.getVmIndex(j);return D.indexOf(Ot)!==-1||!b.willInsertAfter?B:B+1}const ce=()=>{const l={};$t.forEach(B=>{l[\"on\"+B]=Fe(B)}),Ft.forEach(B=>{l[\"on\"+B]=me.bind(null,B)});const b=Object.keys(i).reduce((B,N)=>(B[Xt(N)]=i[N],B),{}),D=Object.assign({},b,l,{onMove:(B,N)=>Ae(B,N)});\"draggable\"in D||(D.draggable=\">*\");const j=g?.proxy?.$el.nodeType===1?g.proxy.$el:g?.proxy?.$el.parentElement||null;j&&(h.value=new _(j,D),j.__draggable_component__=g?.proxy,$())};function me(l,b){rt(()=>t(l.toLowerCase(),b))}function Fe(l){return b=>{if(u.value!==null){const D=\"onDrag\"+l,j=E[D];j&&j(b)}me(l,b)}}function Ae(l,b){const D=e.move;if(!D||!u.value)return!0;const j=he(l),B=c.value,N=ne(j,l);B&&Object.assign(B,{futureIndex:N});const Be=Object.assign({},l,{relatedContext:j,draggedContext:B});return D(Be,b)}function De(){$(),Ot=null}const E={onDragStart:M,onDragAdd:z,onDragRemove:Z,onDragUpdate:se,onDragMove:Ae,onDragEnd:De};return bt(()=>{ce()}),e.list!==null&&e.modelValue!==null&&ro.error(\"list props are mutually exclusive! Please set one.\"),{getTag:A,realList:u,visibleIndexes:d,noneFunctionalComponentMode:r,headerOffset:a,footerOffset:s,transitionMode:o,computeIndexes:$,updateOptions:y,getChildrenNodes:T,getUnderlyingVm:w,emitChanges:I,alterList:O,spliceList:H,updatePosition:X,getVmIndex:f,getComponent:v,resetTransitionData:F,onDragStart:M,onDragAdd:z,onDragRemove:Z,onDragUpdate:se,updateProperty:Q,onDragMove:Ae,onDragEnd:De,mounted:ce,context:c,sortableInstance:h,getRelatedContextFromMoveEvent:he,getTargetedComponent:ue,computeFutureIndex:ne}},render(){const e=this.getTag(),t=Bo(this.$attrs,this.componentData);if(typeof e==\"string\"){const i=this.$slots.default&&typeof this.$slots.default==\"function\"?this.$slots.default():null;return i?(this.transitionMode=Qt(i),xt(e,t,i)):xt(e,t,[])}const n=this.$slots.default?{default:this.$slots.default}:{};if(this.$slots.default){const i=typeof this.$slots.default==\"function\"?this.$slots.default():null;this.transitionMode=Qt(i||[])}return xt(e,t,n)}}),Me=_n({});Me.component(\"attributes-manager\",fi);Me.component(\"attributes-manager-form\",Ei);Me.component(\"attributes-manager-attribute\",Ji);Me.component(\"attributes-manager-mention-field\",io);Me.component(\"draggable\",Vo);Me.use(En);Me.mount(\"#attributes-manager\");\n"
  },
  {
    "path": "public/build/assets/auth-Bh9mDens.css",
    "content": "@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:\"\";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-700:oklch(55.5% .163 48.998);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-teal-500:oklch(70.4% .14 182.503);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-600:oklch(51.1% .262 276.966);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-700:oklch(49.6% .265 301.924);--color-pink-500:oklch(65.6% .241 354.308);--color-pink-800:oklch(45.9% .187 3.815);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-700:oklch(37.4% .01 67.558);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--blur-sm:8px;--blur-lg:16px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\\!sticky{position:sticky!important}.absolute{position:absolute}.absolute\\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-1{inset:calc(var(--spacing)*1)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\\.5{top:calc(var(--spacing)*1.5)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-12{top:calc(var(--spacing)*12)}.top-14{top:calc(var(--spacing)*14)}.top-auto{top:auto}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-4{left:calc(var(--spacing)*4)}.left-auto{left:auto}.isolate{isolation:isolate}.z-0{z-index:0}.z-5{z-index:5}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-700{z-index:700}.z-820{z-index:820}.z-821{z-index:821}.z-840{z-index:840}.z-900{z-index:900}.z-1000{z-index:1000}.z-1001{z-index:1001}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.col-1{grid-column:1}.col-2{grid-column:2}.col-3{grid-column:3}.col-4{grid-column:4}.col-5{grid-column:5}.col-6{grid-column:6}.col-7{grid-column:7}.col-8{grid-column:8}.col-9{grid-column:9}.col-10{grid-column:10}.col-11{grid-column:11}.col-12{grid-column:12}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.row-span-2{grid-row:span 2/span 2}.float-left{float:left}.float-none{float:none}.float-right{float:right}.clear-both{clear:both}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.container\\!{width:100%!important}@media(min-width:40rem){.container\\!{max-width:40rem!important}}@media(min-width:48rem){.container\\!{max-width:48rem!important}}@media(min-width:64rem){.container\\!{max-width:64rem!important}}@media(min-width:80rem){.container\\!{max-width:80rem!important}}@media(min-width:96rem){.container\\!{max-width:96rem!important}}.m-0{margin:calc(var(--spacing)*0)}.m-1{margin:calc(var(--spacing)*1)}.m-2{margin:calc(var(--spacing)*2)}.m-3{margin:calc(var(--spacing)*3)}.m-4{margin:calc(var(--spacing)*4)}.m-5{margin:calc(var(--spacing)*5)}.m-1386{margin:calc(var(--spacing)*1386)}.m-3601{margin:calc(var(--spacing)*3601)}.m-4512{margin:calc(var(--spacing)*4512)}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0{margin-block:calc(var(--spacing)*0)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.my-8{margin-block:calc(var(--spacing)*8)}.my-auto{margin-block:auto}.ms-0{margin-inline-start:calc(var(--spacing)*0)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-px{margin-top:1px}.mr-0\\!{margin-right:calc(var(--spacing)*0)!important}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-5{margin-right:calc(var(--spacing)*5)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-20{margin-bottom:calc(var(--spacing)*20)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-11{margin-left:calc(var(--spacing)*11)}.ml-16{margin-left:calc(var(--spacing)*16)}.ml-21{margin-left:calc(var(--spacing)*21)}.ml-\\[-8px\\]{margin-left:-8px}.ml-auto{margin-left:auto}.\\!flex{display:flex!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\\!{display:flex!important}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.hidden\\!{display:none!important}.inline{display:inline}.inline\\!{display:inline!important}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table\\!{display:table!important}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-3\\/1{aspect-ratio:3}.aspect-4\\/3{aspect-ratio:4/3}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-0{height:calc(var(--spacing)*0)}.h-0\\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-1\\/2{height:50%}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-25{height:calc(var(--spacing)*25)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-44{height:calc(var(--spacing)*44)}.h-50{height:calc(var(--spacing)*50)}.h-52{height:calc(var(--spacing)*52)}.h-60{height:calc(var(--spacing)*60)}.h-75{height:calc(var(--spacing)*75)}.h-100{height:calc(var(--spacing)*100)}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-14{max-height:calc(var(--spacing)*14)}.max-h-52{max-height:calc(var(--spacing)*52)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-\\[80vh\\]{max-height:80vh}.max-h-\\[300px\\]{max-height:300px}.max-h-\\[400px\\]{max-height:400px}.max-h-full{max-height:100%}.\\!min-h-3{min-height:calc(var(--spacing)*3)!important}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-12{min-height:calc(var(--spacing)*12)}.min-h-50{min-height:calc(var(--spacing)*50)}.min-h-80{min-height:calc(var(--spacing)*80)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-25{width:calc(var(--spacing)*25)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-46{width:calc(var(--spacing)*46)}.w-48{width:calc(var(--spacing)*48)}.w-50{width:calc(var(--spacing)*50)}.w-52{width:calc(var(--spacing)*52)}.w-60{width:calc(var(--spacing)*60)}.w-72{width:calc(var(--spacing)*72)}.w-75{width:calc(var(--spacing)*75)}.w-80{width:calc(var(--spacing)*80)}.w-100{width:calc(var(--spacing)*100)}.w-\\[25\\%\\]{width:25%}.w-\\[47\\%\\]{width:47%}.w-\\[220px\\]{width:220px}.w-\\[800px\\]{width:800px}.w-auto{width:auto}.w-fit{width:fit-content}.w-fit\\!{width:fit-content!important}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-28{max-width:calc(var(--spacing)*28)}.max-w-32{max-width:calc(var(--spacing)*32)}.max-w-\\[90vw\\]{max-width:90vw}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-56{min-width:calc(var(--spacing)*56)}.min-w-72{min-width:calc(var(--spacing)*72)}.min-w-\\[150px\\]{min-width:150px}.min-w-\\[200px\\]{min-width:200px}.min-w-\\[250px\\]{min-width:250px}.min-w-fit{min-width:fit-content}.min-w-max{min-width:max-content}.flex-0{flex:0}.flex-1{flex:1}.flex-3{flex:3}.flex-initial{flex:0 auto}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.flex-shrink-1,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-0{flex-grow:0}.flex-grow-1,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-1\\/4{flex-basis:25%}.basis-2\\/4{flex-basis:50%}.basis-3\\/4{flex-basis:75%}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-270{rotate:270deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform\\!{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)!important}.animate-ping{animation:var(--animate-ping)}.cursor-crosshair{cursor:crosshair}.cursor-move{cursor:move}.cursor-move\\!{cursor:move!important}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-pt-16{scroll-padding-top:calc(var(--spacing)*16)}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-flow-row-dense{grid-auto-flow:dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.content-center{align-content:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-items-stretch{justify-items:stretch}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-16{gap:calc(var(--spacing)*16)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-2xl{border-top-left-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-2xl{border-top-left-radius:var(--radius-2xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-2xl{border-top-right-radius:var(--radius-2xl);border-bottom-right-radius:var(--radius-2xl)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-tr-2xl{border-top-right-radius:var(--radius-2xl)}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-0\\!{border-style:var(--tw-border-style)!important;border-width:0!important}.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-amber-700{border-color:var(--color-amber-700)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-blue-900{border-color:var(--color-blue-900)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-800{border-color:var(--color-gray-800)}.border-inherit{border-color:inherit}.border-red-300{border-color:var(--color-red-300)}.border-red-400{border-color:var(--color-red-400)}.border-red-500{border-color:var(--color-red-500)}.border-slate-600{border-color:var(--color-slate-600)}.border-white{border-color:var(--color-white)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black\\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-300{background-color:var(--color-orange-300)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-300{background-color:var(--color-red-300)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-700\\/50{background-color:#bf000f80}@supports (color:color-mix(in lab,red,red)){.bg-red-700\\/50{background-color:color-mix(in oklab,var(--color-red-700)50%,transparent)}}.bg-red-900\\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.bg-red-900\\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.bg-sky-100{background-color:var(--color-sky-100)}.bg-stone-200{background-color:var(--color-stone-200)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-300{background-color:var(--color-yellow-300)}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-none{background-image:none}.from-black\\/60{--tw-gradient-from:#0009}@supports (color:color-mix(in lab,red,red)){.from-black\\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent)}}.from-black\\/60{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-black\\/70{--tw-gradient-from:#000000b3}@supports (color:color-mix(in lab,red,red)){.from-black\\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent)}}.from-black\\/70{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-700\\/50{--tw-gradient-from:#36415380}@supports (color:color-mix(in lab,red,red)){.from-gray-700\\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.from-gray-700\\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\!{padding:calc(var(--spacing)*1)!important}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\\!{padding-inline:calc(var(--spacing)*0)!important}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-16{padding-inline:calc(var(--spacing)*16)}.\\!py-0\\.5{padding-block:calc(var(--spacing)*.5)!important}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-12{padding-top:calc(var(--spacing)*12)}.pr-0{padding-right:calc(var(--spacing)*0)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-10{padding-right:calc(var(--spacing)*10)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-left\\!{text-align:left!important}.text-right{text-align:right}.align-baseline{vertical-align:baseline}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-middle\\!{vertical-align:middle!important}.align-text-bottom{vertical-align:text-bottom}.align-text-top{vertical-align:text-top}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-xs\\!{font-size:var(--text-xs)!important;line-height:var(--tw-leading,var(--text-xs--line-height))!important}.text-\\[1\\.2rem\\]{font-size:1.2rem}.text-\\[1\\.3rem\\]{font-size:1.3rem}.text-\\[1\\.4rem\\]{font-size:1.4rem}.text-\\[8px\\]{font-size:8px}.text-\\[10px\\]{font-size:10px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-nowrap{text-wrap:nowrap}.text-wrap{text-wrap:wrap}.break-normal{overflow-wrap:normal;word-break:normal}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-amber-700{color:var(--color-amber-700)}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-inherit{color:inherit}.text-orange-300{color:var(--color-orange-300)}.text-orange-500{color:var(--color-orange-500)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-800{color:var(--color-pink-800)}.text-purple-500{color:var(--color-purple-500)}.text-purple-700{color:var(--color-purple-700)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-800{color:var(--color-red-800)}.text-sky-700{color:var(--color-sky-700)}.text-slate-800{color:var(--color-slate-800)}.text-stone-700{color:var(--color-stone-700)}.text-teal-500{color:var(--color-teal-500)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.italic\\!{font-style:italic!important}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline\\!{text-decoration-line:underline!important}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.mix-blend-color-dodge{mix-blend-mode:color-dodge}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-gray-500\\/20{--tw-shadow-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.shadow-gray-500\\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-gray-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur\\!{--tw-blur:blur(8px)!important;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-30{--tw-backdrop-opacity:opacity(30%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\\[character\\:76\\]{character:76}.\\[character\\:123\\]{character:123}.\\[character\\:4092\\]{character:4092}.\\[entity\\:2\\]{entity:2}.\\[entity\\:10\\]{entity:10}.\\[entity\\:123\\]{entity:123}.\\[type\\:id\\]{type:id}.\\[type\\:id\\|config\\.\\.\\.\\]{type:id|config...}@media(hover:hover){.group-hover\\:-translate-y-0\\.5:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\\:translate-y-0\\.5:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-\\[\\.status-down\\]\\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.selection\\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\\:text-white ::selection{color:var(--color-white)}.selection\\:text-white::selection{color:var(--color-white)}.backdrop\\:bg-black\\/50::backdrop{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.backdrop\\:bg-black\\/50::backdrop{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.after\\:mr-1:after{content:var(--tw-content);margin-right:calc(var(--spacing)*1)}.after\\:content-\\[\\'\\,\\'\\]:after{--tw-content:\",\";content:var(--tw-content)}.last\\:after\\:content-none:last-child:after{content:var(--tw-content);--tw-content:none;content:none}@media(hover:hover){.hover\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:rotate-45:hover{rotate:45deg}.hover\\:rotate-90:hover{rotate:90deg}.hover\\:border-b-2:hover{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hover\\:bg-blue-300:hover{background-color:var(--color-blue-300)}.hover\\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-red-400:hover{background-color:var(--color-red-400)}.hover\\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\\:bg-red-900\\/90:hover{background-color:#82181ae6}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-red-900\\/90:hover{background-color:color-mix(in oklab,var(--color-red-900)90%,transparent)}}.hover\\:font-bold:hover{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.hover\\:font-semibold:hover{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.hover\\:text-blue-800:hover{color:var(--color-blue-800)}.hover\\:text-blue-900:hover{color:var(--color-blue-900)}.hover\\:text-orange-500:hover{color:var(--color-orange-500)}.hover\\:text-red-300:hover{color:var(--color-red-300)}.hover\\:text-white:hover{color:var(--color-white)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-xs:hover{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:backdrop-opacity-100:hover{--tw-backdrop-opacity:opacity(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}}.focus\\:z-20:focus{z-index:20}.focus\\:opacity-100:focus{opacity:1}.focus\\:shadow-md:focus{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\\:opacity-50:disabled{opacity:.5}@media not all and (min-width:40rem){.max-sm\\:hidden{display:none}}@media(min-width:40rem){.sm\\:col-span-3{grid-column:span 3/span 3}.sm\\:block{display:block}.sm\\:flex{display:flex}.sm\\:hidden{display:none}.sm\\:inline{display:inline}.sm\\:inline-block{display:inline-block}.sm\\:table-cell{display:table-cell}.sm\\:w-3\\/4{width:75%}.sm\\:w-48{width:calc(var(--spacing)*48)}.sm\\:w-60{width:calc(var(--spacing)*60)}.sm\\:w-80{width:calc(var(--spacing)*80)}.sm\\:w-96{width:calc(var(--spacing)*96)}.sm\\:flex-1{flex:1}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\:flex-row{flex-direction:row}.sm\\:items-center{align-items:center}.sm\\:justify-between{justify-content:space-between}.sm\\:gap-3{gap:calc(var(--spacing)*3)}.sm\\:gap-5{gap:calc(var(--spacing)*5)}.sm\\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.sm\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.sm\\:pr-4{padding-right:calc(var(--spacing)*4)}}@media(min-width:48rem){.md\\:relative{position:relative}.md\\:sticky{position:sticky}.md\\:top-24{top:calc(var(--spacing)*24)}.md\\:col-span-1{grid-column:span 1/span 1}.md\\:col-span-2{grid-column:span 2/span 2}.md\\:col-span-3{grid-column:span 3/span 3}.md\\:col-span-4{grid-column:span 4/span 4}.md\\:col-span-5{grid-column:span 5/span 5}.md\\:col-span-6{grid-column:span 6/span 6}.md\\:col-span-7{grid-column:span 7/span 7}.md\\:col-span-8{grid-column:span 8/span 8}.md\\:col-span-9{grid-column:span 9/span 9}.md\\:col-span-10{grid-column:span 10/span 10}.md\\:col-span-11{grid-column:span 11/span 11}.md\\:col-span-12{grid-column:span 12/span 12}.md\\:mt-6{margin-top:calc(var(--spacing)*6)}.md\\:mt-28{margin-top:calc(var(--spacing)*28)}.md\\:block{display:block}.md\\:flex{display:flex}.md\\:grid{display:grid}.md\\:hidden{display:none}.md\\:inline{display:inline}.md\\:inline\\!{display:inline!important}.md\\:inline-block{display:inline-block}.md\\:table-cell{display:table-cell}.md\\:h-16{height:calc(var(--spacing)*16)}.md\\:h-32{height:calc(var(--spacing)*32)}.md\\:h-36{height:calc(var(--spacing)*36)}.md\\:w-8{width:calc(var(--spacing)*8)}.md\\:w-16{width:calc(var(--spacing)*16)}.md\\:w-40{width:calc(var(--spacing)*40)}.md\\:w-48{width:calc(var(--spacing)*48)}.md\\:w-80{width:calc(var(--spacing)*80)}.md\\:w-96{width:calc(var(--spacing)*96)}.md\\:w-fit{width:fit-content}.md\\:w-full{width:100%}.md\\:flex-none{flex:none}.md\\:grow-0{flex-grow:0}.md\\:basis-1\\/4{flex-basis:25%}.md\\:basis-3\\/4{flex-basis:75%}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\\:flex-col{flex-direction:column}.md\\:flex-row{flex-direction:row}.md\\:flex-nowrap{flex-wrap:nowrap}.md\\:flex-wrap{flex-wrap:wrap}.md\\:items-center{align-items:center}.md\\:items-start{align-items:flex-start}.md\\:justify-between{justify-content:space-between}.md\\:justify-start{justify-content:flex-start}.md\\:gap-0{gap:calc(var(--spacing)*0)}.md\\:gap-2{gap:calc(var(--spacing)*2)}.md\\:gap-3{gap:calc(var(--spacing)*3)}.md\\:gap-4{gap:calc(var(--spacing)*4)}.md\\:gap-5{gap:calc(var(--spacing)*5)}.md\\:gap-6{gap:calc(var(--spacing)*6)}.md\\:gap-10{gap:calc(var(--spacing)*10)}.md\\:self-auto{align-self:auto}.md\\:rounded-2xl{border-radius:var(--radius-2xl)}.md\\:rounded-xl{border-radius:var(--radius-xl)}.md\\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.md\\:p-4{padding:calc(var(--spacing)*4)}.md\\:p-5{padding:calc(var(--spacing)*5)}.md\\:p-6{padding:calc(var(--spacing)*6)}.md\\:px-3{padding-inline:calc(var(--spacing)*3)}.md\\:px-6{padding-inline:calc(var(--spacing)*6)}.md\\:px-10{padding-inline:calc(var(--spacing)*10)}.md\\:py-14{padding-block:calc(var(--spacing)*14)}.md\\:pt-24{padding-top:calc(var(--spacing)*24)}.md\\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.md\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(min-width:64rem){.lg\\:col-span-1{grid-column:span 1/span 1}.lg\\:col-span-2{grid-column:span 2/span 2}.lg\\:col-span-3{grid-column:span 3/span 3}.lg\\:col-span-4{grid-column:span 4/span 4}.lg\\:col-span-5{grid-column:span 5/span 5}.lg\\:col-span-6{grid-column:span 6/span 6}.lg\\:col-span-7{grid-column:span 7/span 7}.lg\\:col-span-8{grid-column:span 8/span 8}.lg\\:col-span-9{grid-column:span 9/span 9}.lg\\:col-span-10{grid-column:span 10/span 10}.lg\\:col-span-11{grid-column:span 11/span 11}.lg\\:col-span-12{grid-column:span 12/span 12}.lg\\:mx-0{margin-inline:calc(var(--spacing)*0)}.lg\\:mx-auto{margin-inline:auto}.lg\\:block{display:block}.lg\\:flex{display:flex}.lg\\:hidden{display:none}.lg\\:inline{display:inline}.lg\\:table-cell{display:table-cell}.lg\\:w-16{width:calc(var(--spacing)*16)}.lg\\:w-40{width:calc(var(--spacing)*40)}.lg\\:w-80{width:calc(var(--spacing)*80)}.lg\\:max-w-2xl{max-width:var(--container-2xl)}.lg\\:max-w-7xl{max-width:var(--container-7xl)}.lg\\:max-w-none{max-width:none}.lg\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\\:flex-row{flex-direction:row}.lg\\:gap-2{gap:calc(var(--spacing)*2)}.lg\\:gap-3{gap:calc(var(--spacing)*3)}.lg\\:gap-4{gap:calc(var(--spacing)*4)}.lg\\:gap-5{gap:calc(var(--spacing)*5)}.lg\\:gap-6{gap:calc(var(--spacing)*6)}.lg\\:gap-8{gap:calc(var(--spacing)*8)}.lg\\:gap-10{gap:calc(var(--spacing)*10)}.lg\\:gap-12{gap:calc(var(--spacing)*12)}.lg\\:gap-20{gap:calc(var(--spacing)*20)}.lg\\:p-3{padding:calc(var(--spacing)*3)}.lg\\:py-12{padding-block:calc(var(--spacing)*12)}}@media(min-width:80rem){.xl\\:col-span-2{grid-column:span 2/span 2}.xl\\:col-span-3{grid-column:span 3/span 3}.xl\\:col-span-4{grid-column:span 4/span 4}.xl\\:flex{display:flex}.xl\\:hidden{display:none}.xl\\:inline{display:inline}.xl\\:aspect-auto{aspect-ratio:auto}.xl\\:w-1\\/2{width:50%}.xl\\:w-80{width:calc(var(--spacing)*80)}.xl\\:w-auto{width:auto}.xl\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\\:gap-4{gap:calc(var(--spacing)*4)}.xl\\:gap-5{gap:calc(var(--spacing)*5)}.xl\\:gap-8{gap:calc(var(--spacing)*8)}.xl\\:px-0{padding-inline:calc(var(--spacing)*0)}.xl\\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:96rem){.\\32xl\\:mx-auto{margin-inline:auto}.\\32xl\\:min-w-7xl{min-width:var(--container-7xl)}.\\32xl\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.ltr\\:flex-row:where(:dir(ltr),[dir=ltr],[dir=ltr] *){flex-direction:row}.rtl\\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}@media(prefers-color-scheme:dark){.dark\\:hidden{display:none}.dark\\:inline{display:inline}.dark\\:border-gray-700{border-color:var(--color-gray-700)}.dark\\:border-slate-500{border-color:var(--color-slate-500)}.dark\\:bg-gray-900{background-color:var(--color-gray-900)}.dark\\:bg-slate-800{background-color:var(--color-slate-800)}.dark\\:text-gray-400{color:var(--color-gray-400)}.dark\\:text-orange-300{color:var(--color-orange-300)}.dark\\:text-slate-200{color:var(--color-slate-200)}.dark\\:text-slate-400{color:var(--color-slate-400)}.dark\\:text-white{color:var(--color-white)}}@media print{.print\\:hidden{display:none}}}.cc-window{opacity:1;transition:opacity 1s}.cc-window.cc-invisible{opacity:0}.cc-animate.cc-revoke{transition:transform 1s}.cc-animate.cc-revoke.cc-top{transform:translateY(-2em)}.cc-animate.cc-revoke.cc-bottom{transform:translateY(2em)}.cc-animate.cc-revoke.cc-active.cc-top,.cc-animate.cc-revoke.cc-active.cc-bottom,.cc-revoke:hover{transform:translateY(0)}.cc-grower{max-height:0;transition:max-height 1s;overflow:hidden}.cc-revoke,.cc-window{box-sizing:border-box;z-index:9999;flex-wrap:nowrap;font-family:Helvetica,Calibri,Arial,sans-serif;font-size:16px;line-height:1.5em;display:flex;position:fixed;overflow:hidden}.cc-window.cc-static{position:static}.cc-window.cc-floating{flex-direction:column;max-width:24em;padding:2em}.cc-window.cc-banner{flex-direction:row;width:100%;padding:1em 1.8em}.cc-revoke{padding:.5em}.cc-revoke:hover{text-decoration:underline}.cc-header{font-size:18px;font-weight:700}.cc-btn,.cc-close,.cc-link,.cc-revoke{cursor:pointer}.cc-link{opacity:.8;padding:.2em;text-decoration:underline;display:inline-block}.cc-link:hover{opacity:1}.cc-link:active,.cc-link:visited{color:initial}.cc-btn{text-align:center;white-space:nowrap;border-style:solid;border-width:2px;padding:.4em .8em;font-size:.9em;font-weight:700;display:block}.cc-highlight .cc-btn:first-child{background-color:#0000;border-color:#0000}.cc-highlight .cc-btn:first-child:focus,.cc-highlight .cc-btn:first-child:hover{background-color:#0000;text-decoration:underline}.cc-close{opacity:.9;font-size:1.6em;line-height:.75;display:block;position:absolute;top:.5em;right:.5em}.cc-close:focus,.cc-close:hover{opacity:1}.cc-revoke.cc-top{border-bottom-right-radius:.5em;border-bottom-left-radius:.5em;top:0;left:3em}.cc-revoke.cc-bottom{border-top-left-radius:.5em;border-top-right-radius:.5em;bottom:0;left:3em}.cc-revoke.cc-left{left:3em;right:unset}.cc-revoke.cc-right{right:3em;left:unset}.cc-top{top:1em}.cc-left{left:1em}.cc-right{right:1em}.cc-bottom{bottom:1em}.cc-floating>.cc-link{margin-bottom:1em}.cc-floating .cc-message{margin-bottom:1em;display:block}.cc-window.cc-floating .cc-compliance{flex:1 0 auto}.cc-window.cc-banner{align-items:center}.cc-banner.cc-top{top:0;left:0;right:0}.cc-banner.cc-bottom{bottom:0;left:0;right:0}.cc-banner .cc-message{flex:auto;max-width:100%;margin-right:1em;display:block}.cc-compliance{align-content:space-between;align-items:center;display:flex}.cc-floating .cc-compliance>.cc-btn{flex:1}.cc-btn+.cc-btn{margin-left:.5em}@media print{.cc-revoke,.cc-window{display:none}}@media screen and (max-width:900px){.cc-btn{white-space:normal}}@media screen and (max-width:414px)and (orientation:portrait),screen and (max-width:736px)and (orientation:landscape){.cc-window.cc-top{top:0}.cc-window.cc-bottom{bottom:0}.cc-window.cc-banner,.cc-window.cc-floating,.cc-window.cc-left,.cc-window.cc-right{left:0;right:0}.cc-window.cc-banner{flex-direction:column}.cc-window.cc-banner .cc-compliance{flex:auto}.cc-window.cc-floating{max-width:none}.cc-window .cc-message{margin-bottom:1em}.cc-window.cc-banner{-webkit-box-align:unset;-ms-flex-align:unset;align-items:unset}.cc-window.cc-banner .cc-message{margin-right:0}}.cc-floating.cc-theme-classic{border-radius:5px;padding:1.2em}.cc-floating.cc-type-info.cc-theme-classic .cc-compliance{text-align:center;flex:none;display:inline}.cc-theme-classic .cc-btn{border-radius:5px}.cc-theme-classic .cc-btn:last-child{min-width:140px}.cc-floating.cc-type-info.cc-theme-classic .cc-btn{display:inline-block}.cc-theme-edgeless.cc-window{padding:0}.cc-floating.cc-theme-edgeless .cc-message{margin:2em 2em 1.5em}.cc-banner.cc-theme-edgeless .cc-btn{height:100%;margin:0;padding:.8em 1.8em}.cc-banner.cc-theme-edgeless .cc-message{margin-left:1em}.cc-floating.cc-theme-edgeless .cc-btn+.cc-btn{margin-left:0}.login-page,.register-page{background-color:#eef1f4;background-image:url(https://th.kanka.io/smu57gaTzoPAMo9OQYfsHFTi-fA=/560x600/smart/src/app/backgrounds/mountain-background-desktop.jp);background-position:50%;background-repeat:no-repeat;background-size:cover;background-attachment:fixed}@media(min-width:992px){.login-box,.register-box{width:450px}.login-page,.register-page,header.masthead-img{background-image:url(https://th.kanka.io/9764KQH7QXGYsnWsRGVKTCzQWgA=/1050x600/smart/src/app/backgrounds/mountain-background-desktop.jpg)}}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}\n"
  },
  {
    "path": "public/build/assets/auth-DX8SCiWG.js",
    "content": "s();o();function o(){let e=document.getElementsByClassName(\"submit-lock\");for(const t of e)t.onsubmit=function(){document.getElementById(\"btn-save\").style.display=\"none\",document.getElementById(\"btn-wait\").style.display=\"\"}}function s(){let e=document.getElementById(\"password\");document.getElementById(\"toggle-password-icon\");var t=document.getElementById(\"toggle-password\");t&&(t.onclick=function(n){return n.preventDefault(),e.type===\"text\"?e.type=\"password\":e.type=\"text\",!1})}\n"
  },
  {
    "path": "public/build/assets/billing-CAEv3gKN.js",
    "content": "import{o as r,c as h,w as m,C as c,a as t,F as y,r as f,t as i,s as g,d as b,p as M,b as _,n as S,e as v}from\"./vendor-tiptap-D5xFoo7B.js\";import{_ as w}from\"./_plugin-vue_export-helper-DlAUqK2U.js\";const P={props:[\"api_token\",\"trans\"],data(){return{stripe:\"\",elements:\"\",card:\"\",intentToken:\"\",name:\"\",addPaymentStatus:0,addPaymentStatusError:\"\",paymentMethods:[],paymentMethodsLoadStatus:0,paymentMethodSelected:0,showNewPaymentMethod:!1,savePaymentMethodStatus:0,deletingPaymentMethodStatus:0,json_trans:[],isLoading:!1}},mounted(){this.includeStripe(\"js.stripe.com/v3/\",(function(){this.configureStripe()}).bind(this)),this.loadIntent(),this.loadPaymentMethods(),this.json_trans=JSON.parse(this.trans)},methods:{includeStripe(s,e){let l=document,d=\"script\",o=l.createElement(d),a=l.getElementsByTagName(d)[0];o.src=\"https://\"+s,e&&o.addEventListener(\"load\",function(n){e(null,n)},!1),a.parentNode.insertBefore(o,a)},configureStripe(){this.stripe=Stripe(this.api_token),this.elements=this.stripe.elements(),this.card=this.elements.create(\"card\",{hidePostalCode:!0}),this.card.mount(\"#card-element\")},loadIntent(){axios.get(\"/subscription-api/setup-intent\").then((function(s){this.intentToken=s.data}).bind(this))},submitPaymentMethod(){this.addPaymentStatus=1,this.savePaymentMethodStatus=1,this.isLoading=!0,console.log(\"wa\"),this.stripe.confirmCardSetup(this.intentToken.client_secret,{payment_method:{card:this.card,billing_details:{name:this.name}}}).then((function(s){this.savePaymentMethodStatus=0,this.isLoading=!1,s.error?(console.log(\"error\",s.error.message),this.addPaymentStatus=3,this.addPaymentStatusError=s.error.message):(this.savePaymentMethod(s.setupIntent.payment_method),this.addPaymentStatus=2,this.addPaymentStatusError=\"\",this.card.clear(),this.name=\"\",this.closeModal(\"cardModal\"))}).bind(this))},savePaymentMethod(s){console.log(\"save?\"),this.paymentMethodsLoadStatus=0,axios.post(\"/subscription-api/payments\",{payment_method:s}).then((function(){this.loadPaymentMethods()}).bind(this))},loadPaymentMethods(){this.paymentMethodsLoadStatus=1,axios.get(\"/subscription-api/payment-methods\").then((function(s){this.paymentMethods=s.data,this.paymentMethodsLoadStatus=2}).bind(this))},removePaymentMethod(s){this.paymentMethodsLoadStatus=0,axios.post(\"/subscription-api/remove-payment\",{id:s}).then((function(e){this.loadPaymentMethods()}).bind(this))},toggleShowNewPaymentMethod(){this.openModal(\"cardModal\"),this.showNewPaymentMethod=!this.showNewPaymentMethod},translate(s){return this.json_trans[s]??\"unknown\"},openModal(s){this.$refs[s].showModal(),this.$refs[s].addEventListener(\"click\",function(e){let l=this.getBoundingClientRect();!(l.top<=e.clientY&&e.clientY<=l.top+l.height&&l.left<=e.clientX&&e.clientX<=l.left+l.width)&&e.target.tagName===\"DIALOG\"&&this.close()})},closeModal(s){this.$refs[s].close()},saveBtnClass(){let s=\"btn2 btn-primary\";return this.isLoading&&(s+=\" loading\"),s}}},x={class:\"text-center\"},k={class:\"grow\"},C={class:\"font-extrabold\"},L={class:\"\"},N={class:\"\"},E=[\"onClick\"],B={class:\"flex gap-2 mb-5\"},T={class:\"help-block text-neutral-content grow\"},j={class:\"dialog rounded-2xl text-center\",id:\"modal-card\",ref:\"cardModal\",\"aria-modal\":\"true\",\"aria-labelledby\":\"modal-card-label\"},I={class:\"flex gap-6 items-center p-4 md:p-6 justify-between w-full\"},D={id:\"modal-card-label\",class:\"text-lg font-normal\"},V={class:\"text-justify py-4 px-4 md:px-6\"},A={class:\"mb-2 w-full field text-left\"},R={class:\"mb-2 w-full\"},F=[\"innerHTML\"],H={class:\"help-block text-neutral-content mb-2\"},O={class:\"flex justify-between items-center gap-2 w-full\"};function U(s,e,l,d,o,a){return r(),h(\"div\",null,[m(t(\"div\",x,[...e[5]||(e[5]=[t(\"i\",{class:\"fa-solid fa-spin fa-spinner\"},null,-1)])],512),[[c,o.paymentMethodsLoadStatus!=2]]),m(t(\"div\",null,[(r(!0),h(y,null,f(o.paymentMethods,(n,p)=>(r(),h(\"div\",{key:\"method-\"+p,class:\"bg-box shadow-xs mb-5 p-4 rounded flex gap-2 md:gap-4\"},[t(\"div\",k,[t(\"div\",C,i(n.brand.charAt(0).toUpperCase())+i(n.brand.slice(1))+\" ending in \"+i(n.last_four),1),t(\"div\",L,\" Expires \"+i(n.exp_month)+\" \"+i(n.exp_year),1)]),t(\"div\",N,[t(\"button\",{role:\"button\",onClick:g(Y=>a.removePaymentMethod(n.id),[\"stop\"]),title:\"Remove\",class:\"btn2 btn-outline btn-error btn-sm\"},\" Remove card \",8,E)])]))),128))],512),[[c,o.paymentMethodsLoadStatus==2&&o.paymentMethods.length>0]]),m(t(\"div\",B,[t(\"p\",T,i(a.translate(\"add_one\")),1),t(\"a\",{href:\"#\",onClick:e[0]||(e[0]=(...n)=>a.toggleShowNewPaymentMethod&&a.toggleShowNewPaymentMethod(...n)),class:\"btn2 btn-outline\"},[e[6]||(e[6]=t(\"i\",{class:\"fa-regular fa-credit-card\",\"aria-hidden\":\"true\"},null,-1)),b(\" \"+i(a.translate(\"actions.add_new\")),1)])],512),[[c,o.paymentMethodsLoadStatus==2&&o.paymentMethods.length==0]]),t(\"dialog\",j,[t(\"header\",I,[t(\"h4\",D,i(a.translate(\"new_card\")),1),t(\"button\",{type:\"button\",class:\"rounded-full\",onClick:e[1]||(e[1]=n=>a.closeModal(\"cardModal\")),title:\"Close\"},[...e[7]||(e[7]=[t(\"i\",{class:\"fa-solid fa-times\",\"aria-hidden\":\"true\"},null,-1),t(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),t(\"article\",V,[t(\"div\",A,[t(\"label\",null,i(a.translate(\"card_name\")),1),m(t(\"input\",{id:\"card-holder-name\",type:\"text\",\"onUpdate:modelValue\":e[2]||(e[2]=n=>o.name=n),class:\"w-full\"},null,512),[[M,o.name]])]),t(\"div\",R,[t(\"label\",null,i(a.translate(\"card\")),1),e[8]||(e[8]=t(\"div\",{id:\"card-element\"},null,-1)),o.addPaymentStatusError?(r(),h(\"p\",{key:0,class:\"text-red-500 my-2\",innerHTML:o.addPaymentStatusError},null,8,F)):_(\"\",!0)]),t(\"p\",H,i(a.translate(\"helper\")),1),t(\"div\",O,[t(\"button\",{type:\"button\",class:\"btn2 btn-outline\",onClick:e[3]||(e[3]=n=>a.closeModal(\"cardModal\"))},\"Close\"),t(\"button\",{type:\"button\",class:S(a.saveBtnClass()),onClick:e[4]||(e[4]=(...n)=>a.submitPaymentMethod&&a.submitPaymentMethod(...n)),ref:\"formBtn\"},i(a.translate(\"actions.save\")),3)])])],512)])}const X=w(P,[[\"render\",U]]),u=v({});u.component(\"billing-management\",X);u.mount(\"#billing\");\n"
  },
  {
    "path": "public/build/assets/calendar-9Uf0XYJF.js",
    "content": "const e=document.querySelector(\"input#has_leap_year\");e.addEventListener(\"change\",function(){const c=document.getElementById(\"calendar-leap-year\");console.log(\"me\",e.checked),e.checked?c.classList.remove(\"hidden\"):c.classList.add(\"hidden\")});\n"
  },
  {
    "path": "public/build/assets/character-BYzNtBCs.js",
    "content": "const n=document.querySelector(\".character-organisations\"),o=document.querySelector(\"#add_organisation\"),i=document.querySelector(\"#template_organisation\"),c=()=>{n&&(o.addEventListener(\"click\",function(r){r.preventDefault();const e=document.createElement(\"div\");return e.classList.add(\"parent-row\"),e.innerHTML=i.innerHTML,n.append(e),n.querySelectorAll(\".tmp-org\")?.forEach(t=>{t.classList.remove(\"tmp-org\"),t.classList.add(\"select2\")}),a(),window.triggerEvent(),!1}),a())},a=()=>{document.querySelectorAll(\".member-delete\")?.forEach(e=>{e.dataset.init!==\"1\"&&(e.dataset.init=\"1\",e.addEventListener(\"click\",t=>{t.preventDefault(),e.closest(e.dataset.target).remove()}),e.addEventListener(\"keydown\",t=>{t.key===\"Enter\"&&e.click()}))}),window.initSortable(),window.initForeignSelect()};window.onReady(()=>{c()});\n"
  },
  {
    "path": "public/build/assets/coloris-DsKOFKq5.js",
    "content": "const C=(()=>{return(($,c,y,L)=>{const W=c.createElement(\"canvas\").getContext(\"2d\"),H={r:0,g:0,b:0,h:0,s:0,v:0,a:1};let w,o,g,d,q,v,I,M,O,z,F,E,u,D,A,J,m={};const r={el:\"[data-coloris]\",parent:\"body\",theme:\"default\",themeMode:\"light\",rtl:!1,wrap:!0,margin:2,format:\"hex\",formatToggle:!1,swatches:[],swatchesOnly:!1,alpha:!0,forceAlpha:!1,focusInput:!0,selectInput:!1,inline:!1,defaultColor:\"#000000\",clearButton:!1,clearLabel:\"Clear\",closeButton:!1,closeLabel:\"Close\",onChange:()=>L,a11y:{open:\"Open color picker\",close:\"Close color picker\",clear:\"Clear the selected color\",marker:\"Saturation: {s}. Brightness: {v}.\",hueSlider:\"Hue slider\",alphaSlider:\"Opacity slider\",input:\"Color value field\",format:\"Color format\",swatch:\"Color swatch\",instruction:\"Saturation and brightness selector. Use up, down, left and right arrow keys to select.\"}},N={};let Q=\"\",R={},j=!1;function Y(e){if(typeof e==\"object\")for(const t in e)switch(t){case\"el\":_(e.el),e.wrap!==!1&&K(e.el);break;case\"parent\":w=c.querySelector(e.parent),w&&(w.appendChild(o),r.parent=e.parent,w===c.body&&(w=L));break;case\"themeMode\":r.themeMode=e.themeMode,e.themeMode===\"auto\"&&$.matchMedia&&$.matchMedia(\"(prefers-color-scheme: dark)\").matches&&(r.themeMode=\"dark\");case\"theme\":e.theme&&(r.theme=e.theme),o.className=`clr-picker clr-${r.theme} clr-${r.themeMode}`,r.inline&&V();break;case\"rtl\":r.rtl=!!e.rtl,c.querySelectorAll(\".clr-field\").forEach(s=>s.classList.toggle(\"clr-rtl\",r.rtl));break;case\"margin\":e.margin*=1,r.margin=isNaN(e.margin)?r.margin:e.margin;break;case\"wrap\":e.el&&e.wrap&&K(e.el);break;case\"formatToggle\":r.formatToggle=!!e.formatToggle,h(\"clr-format\").style.display=r.formatToggle?\"block\":\"none\",r.formatToggle&&(r.format=\"auto\");break;case\"swatches\":if(Array.isArray(e.swatches)){const s=[];e.swatches.forEach((n,f)=>{s.push(`<button type=\"button\" id=\"clr-swatch-${f}\" aria-labelledby=\"clr-swatch-label clr-swatch-${f}\" style=\"color: ${n};\">${n}</button>`)}),h(\"clr-swatches\").innerHTML=s.length?`<div>${s.join(\"\")}</div>`:\"\",r.swatches=e.swatches.slice()}break;case\"swatchesOnly\":r.swatchesOnly=!!e.swatchesOnly,o.setAttribute(\"data-minimal\",r.swatchesOnly);break;case\"alpha\":r.alpha=!!e.alpha,o.setAttribute(\"data-alpha\",r.alpha);break;case\"inline\":if(r.inline=!!e.inline,o.setAttribute(\"data-inline\",r.inline),r.inline){const s=e.defaultColor||r.defaultColor;D=ee(s),V(),G(s)}break;case\"clearButton\":typeof e.clearButton==\"object\"&&(e.clearButton.label&&(r.clearLabel=e.clearButton.label,I.innerHTML=r.clearLabel),e.clearButton=e.clearButton.show),r.clearButton=!!e.clearButton,I.style.display=r.clearButton?\"block\":\"none\";break;case\"clearLabel\":r.clearLabel=e.clearLabel,I.innerHTML=r.clearLabel;break;case\"closeButton\":r.closeButton=!!e.closeButton,r.closeButton?o.insertBefore(M,q):q.appendChild(M);break;case\"closeLabel\":r.closeLabel=e.closeLabel,M.innerHTML=r.closeLabel;break;case\"a11y\":const l=e.a11y;let a=!1;if(typeof l==\"object\")for(const s in l)l[s]&&r.a11y[s]&&(r.a11y[s]=l[s],a=!0);if(a){const s=h(\"clr-open-label\"),n=h(\"clr-swatch-label\");s.innerHTML=r.a11y.open,n.innerHTML=r.a11y.swatch,M.setAttribute(\"aria-label\",r.a11y.close),I.setAttribute(\"aria-label\",r.a11y.clear),O.setAttribute(\"aria-label\",r.a11y.hueSlider),F.setAttribute(\"aria-label\",r.a11y.alphaSlider),v.setAttribute(\"aria-label\",r.a11y.input),g.setAttribute(\"aria-label\",r.a11y.instruction)}break;default:r[t]=e[t]}}function oe(e,t){typeof e==\"string\"&&typeof t==\"object\"&&(N[e]=t,j=!0)}function ce(e){delete N[e],Object.keys(N).length===0&&(j=!1,e===Q&&Z())}function le(e){if(j){const t=[\"el\",\"wrap\",\"rtl\",\"inline\",\"defaultColor\",\"a11y\"];for(let l in N){const a=N[l];if(e.matches(l)){Q=l,R={},t.forEach(s=>delete a[s]);for(let s in a)R[s]=Array.isArray(r[s])?r[s].slice():r[s];Y(a);break}}}}function Z(){Object.keys(R).length>0&&(Y(R),Q=\"\",R={})}function _(e){i(c,\"click\",e,t=>{r.inline||(le(t.target),u=t.target,A=u.value,D=ee(A),o.classList.add(\"clr-open\"),V(),G(A),(r.focusInput||r.selectInput)&&(v.focus({preventScroll:!0}),v.setSelectionRange(u.selectionStart,u.selectionEnd)),r.selectInput&&v.select(),(J||r.swatchesOnly)&&ne().shift().focus(),u.dispatchEvent(new Event(\"open\",{bubbles:!0})))}),i(c,\"input\",e,t=>{const l=t.target.parentNode;l.classList.contains(\"clr-field\")&&(l.style.color=t.target.value)})}function V(){if(!o||!u&&!r.inline)return;const e=w,t=$.scrollY,l=o.offsetWidth,a=o.offsetHeight,s={left:!1,top:!1};let n,f,k,p={x:0,y:0};if(e&&(n=$.getComputedStyle(e),f=parseFloat(n.marginTop),k=parseFloat(n.borderTopWidth),p=e.getBoundingClientRect(),p.y+=k+t),!r.inline){const b=u.getBoundingClientRect();let S=b.x,T=t+b.y+b.height+r.margin;e?(S-=p.x,T-=p.y,S+l>e.clientWidth&&(S+=b.width-l,s.left=!0),T+a>e.clientHeight-f&&a+r.margin<=b.top-(p.y-t)&&(T-=b.height+a+r.margin*2,s.top=!0),T+=e.scrollTop):(S+l>c.documentElement.clientWidth&&(S+=b.width-l,s.left=!0),T+a-t>c.documentElement.clientHeight&&a+r.margin<=b.top&&(T=t+b.y-a-r.margin,s.top=!0)),o.classList.toggle(\"clr-left\",s.left),o.classList.toggle(\"clr-top\",s.top),o.style.left=`${S}px`,o.style.top=`${T}px`,p.x+=o.offsetLeft,p.y+=o.offsetTop}m={width:g.offsetWidth,height:g.offsetHeight,x:g.offsetLeft+p.x,y:g.offsetTop+p.y}}function K(e){c.querySelectorAll(e).forEach(t=>{const l=t.parentNode;if(!l.classList.contains(\"clr-field\")){const a=c.createElement(\"div\");let s=\"clr-field\";(r.rtl||t.classList.contains(\"clr-rtl\"))&&(s+=\" clr-rtl\"),a.innerHTML='<button type=\"button\" aria-labelledby=\"clr-open-label\"></button>',l.insertBefore(a,t),a.setAttribute(\"class\",s),a.style.color=t.value,a.appendChild(t)}})}function P(e){if(u&&!r.inline){const t=u;e&&(u=L,A!==t.value&&(t.value=A,t.dispatchEvent(new Event(\"input\",{bubbles:!0})))),setTimeout(()=>{A!==t.value&&t.dispatchEvent(new Event(\"change\",{bubbles:!0}))}),o.classList.remove(\"clr-open\"),j&&Z(),t.dispatchEvent(new Event(\"close\",{bubbles:!0})),r.focusInput&&t.focus({preventScroll:!0}),u=L}}function G(e){const t=ye(e),l=be(t);ae(l.s,l.v),X(t,l),O.value=l.h,o.style.color=`hsl(${l.h}, 100%, 50%)`,z.style.left=`${l.h/360*100}%`,d.style.left=`${m.width*l.s/100}px`,d.style.top=`${m.height-m.height*l.v/100}px`,F.value=l.a*100,E.style.left=`${l.a*100}%`}function ee(e){const t=e.substring(0,3).toLowerCase();return t===\"rgb\"||t===\"hsl\"?t:\"hex\"}function x(e){e=e!==L?e:v.value,u&&(u.value=e,u.dispatchEvent(new Event(\"input\",{bubbles:!0}))),r.onChange&&r.onChange.call($,e,u),c.dispatchEvent(new CustomEvent(\"coloris:pick\",{detail:{color:e,currentEl:u}}))}function re(e,t){const l={h:O.value*1,s:e/m.width*100,v:100-t/m.height*100,a:F.value/100},a=de(l);ae(l.s,l.v),X(a,l),x()}function ae(e,t){let l=r.a11y.marker;e=e.toFixed(1)*1,t=t.toFixed(1)*1,l=l.replace(\"{s}\",e),l=l.replace(\"{v}\",t),d.setAttribute(\"aria-label\",l)}function ie(e){return{pageX:e.changedTouches?e.changedTouches[0].pageX:e.pageX,pageY:e.changedTouches?e.changedTouches[0].pageY:e.pageY}}function B(e){const t=ie(e);let l=t.pageX-m.x,a=t.pageY-m.y;w&&(a+=w.scrollTop),se(l,a),e.preventDefault(),e.stopPropagation()}function fe(e,t){let l=d.style.left.replace(\"px\",\"\")*1+e,a=d.style.top.replace(\"px\",\"\")*1+t;se(l,a)}function se(e,t){e=e<0?0:e>m.width?m.width:e,t=t<0?0:t>m.height?m.height:t,d.style.left=`${e}px`,d.style.top=`${t}px`,re(e,t),d.focus()}function X(e,t){e===void 0&&(e={}),t===void 0&&(t={});let l=r.format;for(const n in e)H[n]=e[n];for(const n in t)H[n]=t[n];const a=ge(H),s=a.substring(0,7);switch(d.style.color=s,E.parentNode.style.color=s,E.style.color=a,q.style.color=a,g.style.display=\"none\",g.offsetHeight,g.style.display=\"\",E.nextElementSibling.style.display=\"none\",E.nextElementSibling.offsetHeight,E.nextElementSibling.style.display=\"\",l===\"mixed\"?l=H.a===1?\"hex\":\"rgb\":l===\"auto\"&&(l=D),l){case\"hex\":v.value=a;break;case\"rgb\":v.value=me(H);break;case\"hsl\":v.value=ve(he(H));break}c.querySelector(`.clr-format [value=\"${l}\"]`).checked=!0}function ue(){const e=O.value*1,t=d.style.left.replace(\"px\",\"\")*1,l=d.style.top.replace(\"px\",\"\")*1;o.style.color=`hsl(${e}, 100%, 50%)`,z.style.left=`${e/360*100}%`,re(t,l)}function pe(){const e=F.value/100;E.style.left=`${e*100}%`,X({a:e}),x()}function de(e){const t=e.s/100,l=e.v/100;let a=t*l,s=e.h/60,n=a*(1-y.abs(s%2-1)),f=l-a;a=a+f,n=n+f;const k=y.floor(s)%6,p=[a,n,f,f,n,a][k],b=[n,a,a,n,f,f][k],S=[f,f,n,a,a,n][k];return{r:y.round(p*255),g:y.round(b*255),b:y.round(S*255),a:e.a}}function he(e){const t=e.v/100,l=t*(1-e.s/100/2);let a;return l>0&&l<1&&(a=y.round((t-l)/y.min(l,1-l)*100)),{h:e.h,s:a||0,l:y.round(l*100),a:e.a}}function be(e){const t=e.r/255,l=e.g/255,a=e.b/255,s=y.max(t,l,a),n=y.min(t,l,a),f=s-n,k=s;let p=0,b=0;return f&&(s===t&&(p=(l-a)/f),s===l&&(p=2+(a-t)/f),s===a&&(p=4+(t-l)/f),s&&(b=f/s)),p=y.floor(p*60),{h:p<0?p+360:p,s:y.round(b*100),v:y.round(k*100),a:e.a}}function ye(e){const t=/^((rgba)|rgb)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i;let l,a;return W.fillStyle=\"#000\",W.fillStyle=e,l=t.exec(W.fillStyle),l?(a={r:l[3]*1,g:l[4]*1,b:l[5]*1,a:l[6]*1},a.a=+a.a.toFixed(2)):(l=W.fillStyle.replace(\"#\",\"\").match(/.{2}/g).map(s=>parseInt(s,16)),a={r:l[0],g:l[1],b:l[2],a:1}),a}function ge(e){let t=e.r.toString(16),l=e.g.toString(16),a=e.b.toString(16),s=\"\";if(e.r<16&&(t=\"0\"+t),e.g<16&&(l=\"0\"+l),e.b<16&&(a=\"0\"+a),r.alpha&&(e.a<1||r.forceAlpha)){const n=e.a*255|0;s=n.toString(16),n<16&&(s=\"0\"+s)}return\"#\"+t+l+a+s}function me(e){return!r.alpha||e.a===1&&!r.forceAlpha?`rgb(${e.r}, ${e.g}, ${e.b})`:`rgba(${e.r}, ${e.g}, ${e.b}, ${e.a})`}function ve(e){return!r.alpha||e.a===1&&!r.forceAlpha?`hsl(${e.h}, ${e.s}%, ${e.l}%)`:`hsla(${e.h}, ${e.s}%, ${e.l}%, ${e.a})`}function ke(){c.getElementById(\"clr-picker\")||(w=L,o=c.createElement(\"div\"),o.setAttribute(\"id\",\"clr-picker\"),o.className=\"clr-picker\",o.innerHTML=`<input id=\"clr-color-value\" name=\"clr-color-value\" class=\"clr-color\" type=\"text\" value=\"\" spellcheck=\"false\" aria-label=\"${r.a11y.input}\"><div id=\"clr-color-area\" class=\"clr-gradient\" role=\"application\" aria-label=\"${r.a11y.instruction}\"><div id=\"clr-color-marker\" class=\"clr-marker\" tabindex=\"0\"></div></div><div class=\"clr-hue\"><input id=\"clr-hue-slider\" name=\"clr-hue-slider\" type=\"range\" min=\"0\" max=\"360\" step=\"1\" aria-label=\"${r.a11y.hueSlider}\"><div id=\"clr-hue-marker\"></div></div><div class=\"clr-alpha\"><input id=\"clr-alpha-slider\" name=\"clr-alpha-slider\" type=\"range\" min=\"0\" max=\"100\" step=\"1\" aria-label=\"${r.a11y.alphaSlider}\"><div id=\"clr-alpha-marker\"></div><span></span></div><div id=\"clr-format\" class=\"clr-format\"><fieldset class=\"clr-segmented\"><legend>${r.a11y.format}</legend><input id=\"clr-f1\" type=\"radio\" name=\"clr-format\" value=\"hex\"><label for=\"clr-f1\">Hex</label><input id=\"clr-f2\" type=\"radio\" name=\"clr-format\" value=\"rgb\"><label for=\"clr-f2\">RGB</label><input id=\"clr-f3\" type=\"radio\" name=\"clr-format\" value=\"hsl\"><label for=\"clr-f3\">HSL</label><span></span></fieldset></div><div id=\"clr-swatches\" class=\"clr-swatches\"></div><button type=\"button\" id=\"clr-clear\" class=\"clr-clear\" aria-label=\"${r.a11y.clear}\">${r.clearLabel}</button><div id=\"clr-color-preview\" class=\"clr-preview\"><button type=\"button\" id=\"clr-close\" class=\"clr-close\" aria-label=\"${r.a11y.close}\">${r.closeLabel}</button></div><span id=\"clr-open-label\" hidden>${r.a11y.open}</span><span id=\"clr-swatch-label\" hidden>${r.a11y.swatch}</span>`,c.body.appendChild(o),g=h(\"clr-color-area\"),d=h(\"clr-color-marker\"),I=h(\"clr-clear\"),M=h(\"clr-close\"),q=h(\"clr-color-preview\"),v=h(\"clr-color-value\"),O=h(\"clr-hue-slider\"),z=h(\"clr-hue-marker\"),F=h(\"clr-alpha-slider\"),E=h(\"clr-alpha-marker\"),_(r.el),K(r.el),i(o,\"mousedown\",e=>{o.classList.remove(\"clr-keyboard-nav\"),e.stopPropagation()}),i(g,\"mousedown\",e=>{i(c,\"mousemove\",B)}),i(g,\"touchstart\",e=>{c.addEventListener(\"touchmove\",B,{passive:!1})}),i(d,\"mousedown\",e=>{i(c,\"mousemove\",B)}),i(d,\"touchstart\",e=>{c.addEventListener(\"touchmove\",B,{passive:!1})}),i(v,\"change\",e=>{const t=v.value;if(u||r.inline){const l=t===\"\"?t:G(t);x(l)}}),i(I,\"click\",e=>{x(\"\"),P()}),i(M,\"click\",e=>{x(),P()}),i(h(\"clr-format\"),\"click\",\".clr-format input\",e=>{D=e.target.value,X(),x()}),i(o,\"click\",\".clr-swatches button\",e=>{G(e.target.textContent),x(),r.swatchesOnly&&P()}),i(c,\"mouseup\",e=>{c.removeEventListener(\"mousemove\",B)}),i(c,\"touchend\",e=>{c.removeEventListener(\"touchmove\",B)}),i(c,\"mousedown\",e=>{J=!1,o.classList.remove(\"clr-keyboard-nav\"),P()}),i(c,\"keydown\",e=>{const t=e.key,l=e.target,a=e.shiftKey;if(t===\"Escape\"?P(!0):[\"Tab\",\"ArrowUp\",\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\"].includes(t)&&(J=!0,o.classList.add(\"clr-keyboard-nav\")),t===\"Tab\"&&l.matches(\".clr-picker *\")){const n=ne(),f=n.shift(),k=n.pop();a&&l===f?(k.focus(),e.preventDefault()):!a&&l===k&&(f.focus(),e.preventDefault())}}),i(c,\"click\",\".clr-field button\",e=>{j&&Z(),e.target.nextElementSibling.dispatchEvent(new Event(\"click\",{bubbles:!0}))}),i(d,\"keydown\",e=>{const t={ArrowUp:[0,-1],ArrowDown:[0,1],ArrowLeft:[-1,0],ArrowRight:[1,0]};Object.keys(t).includes(e.key)&&(fe(...t[e.key]),e.preventDefault())}),i(g,\"click\",B),i(O,\"input\",ue),i(F,\"input\",pe))}function ne(){return Array.from(o.querySelectorAll(\"input, button\")).filter(l=>!!l.offsetWidth)}function h(e){return c.getElementById(e)}function i(e,t,l,a){const s=Element.prototype.matches||Element.prototype.msMatchesSelector;typeof l==\"string\"?e.addEventListener(t,n=>{s.call(n.target,l)&&a.call(n.target,n)}):(a=l,e.addEventListener(t,a))}function U(e,t){t=t!==L?t:[],c.readyState!==\"loading\"?e(...t):c.addEventListener(\"DOMContentLoaded\",()=>{e(...t)})}NodeList!==L&&NodeList.prototype&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach);function we(e,t){u=t,A=u.value,le(t),D=ee(e),V(),G(e),x(),A!==e&&u.dispatchEvent(new Event(\"change\",{bubbles:!0}))}const te=(()=>{const e={init:ke,set:Y,wrap:K,close:P,setInstance:oe,setColor:we,removeInstance:ce,updatePosition:V,ready:U};function t(l){U(()=>{l&&(typeof l==\"string\"?_(l):Y(l))})}for(const l in e)t[l]=function(){for(var a=arguments.length,s=new Array(a),n=0;n<a;n++)s[n]=arguments[n];U(e[l],s)};return U(()=>{$.addEventListener(\"resize\",l=>{t.updatePosition()}),$.addEventListener(\"scroll\",l=>{t.updatePosition()})}),t})();return te.coloris=te,te})(window,document,Math)})();C.coloris;C.init;C.set;C.wrap;C.close;C.setInstance;C.removeInstance;C.updatePosition;export{C};\n"
  },
  {
    "path": "public/build/assets/colours-Dh8441-n.js",
    "content": "function a(r){return getComputedStyle(document.documentElement).getPropertyValue(r).trim()}function l(r){const t=a(r);if(!t)return null;const[u,n]=t.split(\"/\").map(i=>i.trim()),e=u.split(/\\s+/);if(e.length<3)return null;const s=Number(e[0]),o=Number(e[1].replace(\"%\",\"\")),c=Number(e[2].replace(\"%\",\"\"));return{h:s,s:o,l:c,a:n?Number(n):void 0}}function m(r){return typeof r.a==\"number\"?`hsl(${r.h} ${r.s}% ${r.l}% / ${r.a})`:`hsl(${r.h} ${r.s}% ${r.l}%)`}function p(r){const t=l(r);return t?m(t):`hsl(${a(\"--p\")})`}export{m as a,p as c,l as h,a as r};\n"
  },
  {
    "path": "public/build/assets/conversation-hoDojmhJ.js",
    "content": "import{l as U,o as n,c as l,a as r,t as c,b as h,w as x,d as V,n as k,y as I,F as w,r as C,p as z,f as K,g as L,j as P,q,i as m,e as A}from\"./vendor-tiptap-D5xFoo7B.js\";import{v as J}from\"./v-click-outside.umd-Cl-Y_A58.js\";import{_ as M}from\"./_plugin-vue_export-helper-DlAUqK2U.js\";import\"./_commonjsHelpers-Cpj98o6Y.js\";const G={directives:{clickOutside:J.directive},props:[\"message\",\"trans\"],data(){return{openedDropdown:!1}},computed:{isUser:function(){return this.message.user!==null},isCharacter:function(){return this.message.character!==null}},emits:[\"delete_message\",\"edit_message\"],methods:{deleteMessage:function(e){this.$emit(\"delete_message\",e),this.onClickOutside()},editMessage:function(e){this.$emit(\"edit_message\",e),this.onClickOutside()},translate(e){return this.trans[e]??\"unknown\"},dropdownClass(){return this.openedDropdown?\"open dropdown relative\":\"dropdown relative\"},openDropdown(){return this.openedDropdown=!0},boxClasses:function(e){let s=\"box-comment bg-base-100 p-2 flex flex-col gap-1\";return s+=\" message-author-\"+e.from_id,s+=\" message-real-author-\"+e.created_by,e.group?s+=\" message-followup\":s+=\" message-first rounded-t-lg\",s},onClickOutside(e){this.openedDropdown=!1}}},Q={key:0,class:\"flex items-center gap-1\"},R={class:\"message-author\"},W={key:0,class:\"user\"},X={key:1,class:\"character\"},Y={key:2,class:\"unknown\"},Z={class:\"grow\"},$={key:0,class:\"text-xs text-neutral-content\"},ee={key:0,class:\"message-options\"},se={class:\"\"},te={key:1,class:\"flex gap-1\"},ae={class:\"comment-text\"},ne=[\"title\"];function ie(e,s,t,d,g,a){const o=U(\"click-outside\");return n(),l(\"div\",{class:k(a.boxClasses(t.message))},[t.message.group?h(\"\",!0):(n(),l(\"div\",Q,[r(\"div\",R,[a.isUser?(n(),l(\"strong\",W,c(t.message.user),1)):a.isCharacter?(n(),l(\"strong\",X,[r(\"span\",null,c(t.message.character),1)])):(n(),l(\"strong\",Y,c(a.translate(\"user_unknown\")),1))]),r(\"div\",Z,[t.message.group?h(\"\",!0):(n(),l(\"span\",$,c(t.message.created_at),1))]),t.message.can_delete?(n(),l(\"div\",ee,[x((n(),l(\"div\",se,[this.openedDropdown?(n(),l(\"div\",te,[r(\"a\",{class:\"btn2 btn-xs btn-default\",onClick:s[1]||(s[1]=u=>a.editMessage(t.message))},c(a.translate(\"edit\")),1),r(\"a\",{class:\"btn2 btn-xs btn-error\",onClick:s[2]||(s[2]=u=>a.deleteMessage(t.message))},c(a.translate(\"remove\")),1)])):(n(),l(\"a\",{key:0,onClick:s[0]||(s[0]=u=>a.openDropdown()),role:\"button\"},[...s[3]||(s[3]=[r(\"i\",{class:\"fa-solid fa-caret-down\",\"aria-hidden\":\"true\"},null,-1)])]))])),[[o,a.onClickOutside]])])):h(\"\",!0)])),r(\"div\",ae,[V(c(t.message.message)+\" \",1),t.message.is_updated?(n(),l(\"span\",{key:0,class:\"text-xs text-neutral-content italic float-right\",title:t.message.updated_at},c(a.translate(\"is_updated\")),9,ne)):h(\"\",!0)])],2)}const le=M(G,[[\"render\",ie]]),re={props:{target:void 0,api:void 0,targets:void 0,disabled:{type:Boolean},current_message:{type:Object,default:null},trans:void 0},emits:[\"sending_message\",\"edited_message\",\"sent_message\"],data(){return{body:null,sending:!1,character_id:null,message_id:null,edit_message:null}},methods:{typing(e){e.keyCode===13&&!e.shiftKey&&(e.preventDefault(),this.sendMessage())},editMessage(e){this.message_id=e.id,this.edit_message=e,this.body=e.message,this.character_id=e.from_id,document.getElementById(\"message\").focus()},sendMessage(){if(!this.body||this.body.trim()===\"\"||this.targetCharacter&&this.character_id===null)return;this.sending=!0,this.$emit(\"sending_message\");let e=this.api,s={message:this.body.trim()};this.targetCharacter&&(s.character_id=this.character_id),this.message_id?(e+=\"/\"+this.message_id,axios.put(e,s).then(t=>{this.$emit(\"edited_message\",t.data.data),this.messageHandler()}).catch(()=>{this.sending=!1})):axios.post(e,s).then(()=>{this.messageHandler()}).catch(()=>{this.sending=!1})},messageHandler(){this.sending=!1,this.body=null,this.message_id=null,this.$emit(\"sent_message\")},translate(e){return this.json_trans[e]??\"unknown\"},boxClass(){let e=\"bg-base-100\";return this.current_message&&(e=\"bg-accent\"),\"rounded p-2 \"+e}},computed:{targetCharacter:function(){return this.target===\"character\"},inputFormDisabled:function(){return this.sending},commentable:function(){return this.targetCharacter?this.targets!==null:!0}},watch:{current_message:{handler(e,s){e!==s&&e&&this.editMessage(e)}}}},de={class:\"flex items-center gap-2\"},oe={key:0,class:\"max-w-xs\"},ue=[\"value\"],ce={class:\"field grow\"},ge=[\"placeholder\",\"disabled\"];function me(e,s,t,d,g,a){return a.commentable?(n(),l(\"div\",{key:0,class:k(a.boxClass())},[r(\"div\",de,[a.targetCharacter?(n(),l(\"div\",oe,[x(r(\"select\",{class:\"w-full\",\"onUpdate:modelValue\":s[0]||(s[0]=o=>g.character_id=o)},[(n(!0),l(w,null,C(t.targets,(o,u)=>(n(),l(\"option\",{value:u,key:u},c(o),9,ue))),128))],512),[[I,g.character_id]])])):h(\"\",!0),r(\"div\",ce,[x(r(\"input\",{type:\"text\",id:\"message\",maxlength:\"1000\",autocomplete:\"off\",class:\"w-full\",onKeydown:s[1]||(s[1]=(...o)=>a.typing&&a.typing(...o)),\"onUpdate:modelValue\":s[2]||(s[2]=o=>g.body=o),placeholder:t.disabled?a.translate(\"is_closed\"):\"\",disabled:a.inputFormDisabled||t.disabled},null,40,ge),[[z,g.body]])])])],2)):h(\"\",!0)}const he=M(re,[[\"render\",me]]),_e={class:\"viewport box-conversation p-2 flex flex-col gap-2\"},fe={key:1,class:\"load-more text-center text-2xl\"},ve={key:2,class:\"text-center\"},pe=K({__name:\"Conversation\",props:{id:{},send:{},target:{},api:{},targets:{},trans:{},disabled:{type:Boolean}},setup(e){const s=e,t=m(),d=m([]),g=m(!1),a=m(null),o=m(!1),u=m(!1),b=m(!0),v=m(null),p=m(null),y=()=>{axios.get(s.api,{params:{newest:a.value}}).then(i=>{g.value=!1,d.value.push(...i.data.data.messages),o.value=i.data.data.previous,b.value=!1,B()})},B=()=>{setTimeout(()=>{v.value.scrollTop=v.value.scrollHeight},50),d.value.length>0?a.value=d.value[d.value.length-1].id:a.value=void 0},O=()=>{u.value=!0,axios.get(s.api,{params:{oldest:d.value[0].id}}).then(i=>{d.value.unshift(...i.data.data.messages),o.value=i.data.data.previous,u.value=!1})},F=i=>{axios.delete(i.delete_url).then(()=>{const _=d.value.findIndex(f=>f.id===i.id);d.value.splice(_,1)})},N=i=>t.value[i]??\"unknown\",S=i=>{g.value=!0},T=i=>{p.value=i},j=i=>{const _=d.value.findIndex(f=>f.id===i.id);d.value[_]=i},E=i=>{p.value=null,y()},H=i=>{F(i)};return L(()=>{t.value=JSON.parse(s.trans),y()}),(i,_)=>(n(),l(\"div\",_e,[r(\"div\",{class:\"flex flex-col gap-2 box-comments overflow-auto\",ref_key:\"messageBox\",ref:v},[o.value&&!u.value?(n(),l(\"div\",{key:0,class:\"load-more cursor-pointer text-center hover:text-primary\",onClick:O},c(N(\"load_previous\")),1)):h(\"\",!0),u.value||b.value?(n(),l(\"div\",fe,[..._[0]||(_[0]=[r(\"i\",{class:\"fa-solid fa-spin fa-spinner\",\"aria-label\":\"Loading\"},null,-1)])])):h(\"\",!0),(n(!0),l(w,null,C(d.value,f=>(n(),P(le,{key:f.id,message:f,trans:t.value,onDelete_message:H,onEdit_message:T},null,8,[\"message\",\"trans\"]))),128)),g.value?(n(),l(\"div\",ve,[..._[1]||(_[1]=[r(\"i\",{class:\"fa-solid fa-spin fa-spinner\"},null,-1)])])):h(\"\",!0)],512),q(he,{api:e.send,target:e.target,targets:e.targets,disabled:e.disabled,trans:t.value,current_message:p.value,onSending_message:S,onEdited_message:j,onSent_message:E},null,8,[\"api\",\"target\",\"targets\",\"disabled\",\"trans\",\"current_message\"])]))}}),D=A({});D.component(\"conversation\",pe);D.mount(\"#conversation\");\n"
  },
  {
    "path": "public/build/assets/cookieconsent-DM0O5r9k.js",
    "content": "var B={},M;function _(){return M||(M=1,(function(c){if(!c.hasInitialised){var r={escapeRegExp:function(e){return e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")},hasClass:function(e,t){var o=\" \";return e.nodeType===1&&(o+e.className+o).replace(/[\\n\\t]/g,o).indexOf(o+t+o)>=0},addClass:function(e,t){e.className+=\" \"+t},removeClass:function(e,t){var o=new RegExp(\"\\\\b\"+this.escapeRegExp(t)+\"\\\\b\");e.className=e.className.replace(o,\"\")},interpolateString:function(e,t){return e.replace(/{{([a-z][a-z0-9\\-_]*)}}/gi,function(o){return t(arguments[1])||\"\"})},getCookie:function(e){var t=(\"; \"+document.cookie).split(\"; \"+e+\"=\");return t.length<2?void 0:t.pop().split(\";\").shift()},setCookie:function(e,t,o,h,v,i){var a=new Date;a.setHours(a.getHours()+24*(o||365));var u=[e+\"=\"+t,\"expires=\"+a.toUTCString(),\"path=\"+(v||\"/\")];h&&u.push(\"domain=\"+h),i&&u.push(\"secure\"),document.cookie=u.join(\";\")},deepExtend:function(e,t){for(var o in t)t.hasOwnProperty(o)&&(o in e&&this.isPlainObject(e[o])&&this.isPlainObject(t[o])?this.deepExtend(e[o],t[o]):e[o]=t[o]);return e},throttle:function(e,t){var o=!1;return function(){o||(e.apply(this,arguments),o=!0,setTimeout(function(){o=!1},t))}},hash:function(e){var t,o,h=0;if(e.length===0)return h;for(t=0,o=e.length;t<o;++t)h=(h<<5)-h+e.charCodeAt(t),h|=0;return h},normaliseHex:function(e){return e[0]==\"#\"&&(e=e.substr(1)),e.length==3&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),e},getContrast:function(e){return e=this.normaliseHex(e),(299*parseInt(e.substr(0,2),16)+587*parseInt(e.substr(2,2),16)+114*parseInt(e.substr(4,2),16))/1e3>=128?\"#000\":\"#fff\"},getLuminance:function(e){var t=parseInt(this.normaliseHex(e),16),o=38+(t>>16),h=38+(t>>8&255),v=38+(255&t);return\"#\"+(16777216+65536*(o<255?o<1?0:o:255)+256*(h<255?h<1?0:h:255)+(v<255?v<1?0:v:255)).toString(16).slice(1)},isMobile:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},isPlainObject:function(e){return typeof e==\"object\"&&e!==null&&e.constructor==Object},traverseDOMPath:function(e,t){return e&&e.parentNode?r.hasClass(e,t)?e:this.traverseDOMPath(e.parentNode,t):null}};c.status={deny:\"deny\",allow:\"allow\",dismiss:\"dismiss\"},c.transitionEnd=(function(){var e=document.createElement(\"div\"),t={t:\"transitionend\",OT:\"oTransitionEnd\",msT:\"MSTransitionEnd\",MozT:\"transitionend\",WebkitT:\"webkitTransitionEnd\"};for(var o in t)if(t.hasOwnProperty(o)&&e.style[o+\"ransition\"]!==void 0)return t[o];return\"\"})(),c.hasTransition=!!c.transitionEnd;var N=Object.keys(c.status).map(r.escapeRegExp);c.customStyles={},c.Popup=(function(){var e={enabled:!0,container:null,cookie:{name:\"cookieconsent_status\",path:\"/\",domain:\"\",expiryDays:365,secure:!1},onPopupOpen:function(){},onPopupClose:function(){},onInitialise:function(n){},onStatusChange:function(n,s){},onRevokeChoice:function(){},onNoCookieLaw:function(n,s){},content:{header:\"Cookies used on the website!\",message:\"This website uses cookies to ensure you get the best experience on our website.\",dismiss:\"Got it!\",allow:\"Allow cookies\",deny:\"Decline\",link:\"Learn more\",href:\"https://www.cookiesandyou.com\",close:\"&#x274c;\",target:\"_blank\",policy:\"Cookie Policy\"},elements:{header:'<span class=\"cc-header\">{{header}}</span>&nbsp;',message:'<span id=\"cookieconsent:desc\" class=\"cc-message\">{{message}}</span>',messagelink:'<span id=\"cookieconsent:desc\" class=\"cc-message\">{{message}} <a aria-label=\"learn more about cookies\" role=button tabindex=\"0\" class=\"cc-link\" href=\"{{href}}\" rel=\"noopener noreferrer nofollow\" target=\"{{target}}\">{{link}}</a></span>',dismiss:'<a aria-label=\"dismiss cookie message\" role=button tabindex=\"0\" class=\"cc-btn cc-dismiss\">{{dismiss}}</a>',allow:'<a aria-label=\"allow cookies\" role=button tabindex=\"0\"  class=\"cc-btn cc-allow\">{{allow}}</a>',deny:'<a aria-label=\"deny cookies\" role=button tabindex=\"0\" class=\"cc-btn cc-deny\">{{deny}}</a>',link:'<a aria-label=\"learn more about cookies\" role=button tabindex=\"0\" class=\"cc-link\" href=\"{{href}}\" rel=\"noopener noreferrer nofollow\" target=\"{{target}}\">{{link}}</a>',close:'<span aria-label=\"dismiss cookie message\" role=button tabindex=\"0\" class=\"cc-close\">{{close}}</span>'},window:'<div role=\"dialog\" aria-live=\"polite\" aria-label=\"cookieconsent\" aria-describedby=\"cookieconsent:desc\" class=\"cc-window {{classes}}\"><!--googleoff: all-->{{children}}<!--googleon: all--></div>',revokeBtn:'<div class=\"cc-revoke {{classes}}\">{{policy}}</div>',compliance:{info:'<div class=\"cc-compliance\">{{dismiss}}</div>',\"opt-in\":'<div class=\"cc-compliance cc-highlight\">{{deny}}{{allow}}</div>',\"opt-out\":'<div class=\"cc-compliance cc-highlight\">{{deny}}{{allow}}</div>'},type:\"info\",layouts:{basic:\"{{messagelink}}{{compliance}}\",\"basic-close\":\"{{messagelink}}{{compliance}}{{close}}\",\"basic-header\":\"{{header}}{{message}}{{link}}{{compliance}}\"},layout:\"basic\",position:\"bottom\",theme:\"block\",static:!1,palette:null,revokable:!1,animateRevokable:!0,showLink:!0,dismissOnScroll:!1,dismissOnTimeout:!1,dismissOnWindowClick:!1,ignoreClicksFrom:[\"cc-revoke\",\"cc-btn\"],autoOpen:!0,autoAttach:!0,whitelistPage:[],blacklistPage:[],overrideHTML:null};function t(){this.initialise.apply(this,arguments)}function o(n){this.openingTimeout=null,r.removeClass(n,\"cc-invisible\")}function h(n){n.style.display=\"none\",n.removeEventListener(c.transitionEnd,this.afterTransition),this.afterTransition=null}function v(){var n=this.options.position.split(\"-\"),s=[];return n.forEach(function(p){s.push(\"cc-\"+p)}),s}function i(n){var s=this.options,p=document.createElement(\"div\"),m=s.container&&s.container.nodeType===1?s.container:document.body;p.innerHTML=n;var l=p.children[0];return l.style.display=\"none\",r.hasClass(l,\"cc-window\")&&c.hasTransition&&r.addClass(l,\"cc-invisible\"),this.onButtonClick=(function(d){var f=r.traverseDOMPath(d.target,\"cc-btn\")||d.target;if(r.hasClass(f,\"cc-btn\")){var g=f.className.match(new RegExp(\"\\\\bcc-(\"+N.join(\"|\")+\")\\\\b\")),k=g&&g[1]||!1;k&&(this.setStatus(k),this.close(!0))}r.hasClass(f,\"cc-close\")&&(this.setStatus(c.status.dismiss),this.close(!0)),r.hasClass(f,\"cc-revoke\")&&this.revokeChoice()}).bind(this),l.addEventListener(\"click\",this.onButtonClick),s.autoAttach&&(m.firstChild?m.insertBefore(l,m.firstChild):m.appendChild(l)),l}function a(n){return(n=r.normaliseHex(n))==\"000000\"?\"#222\":r.getLuminance(n)}function u(n,s){for(var p=0,m=n.length;p<m;++p){var l=n[p];if(l instanceof RegExp&&l.test(s)||typeof l==\"string\"&&l.length&&l===s)return!0}return!1}return t.prototype.initialise=function(n){this.options&&this.destroy(),r.deepExtend(this.options={},e),r.isPlainObject(n)&&r.deepExtend(this.options,n),(function(){var l=this.options.onInitialise.bind(this);if(!window.navigator.cookieEnabled)return l(c.status.deny),!0;if(window.CookiesOK||window.navigator.CookiesOK)return l(c.status.allow),!0;var d=Object.keys(c.status),f=this.getStatus(),g=d.indexOf(f)>=0;return g&&l(f),g}).call(this)&&(this.options.enabled=!1),u(this.options.blacklistPage,location.pathname)&&(this.options.enabled=!1),u(this.options.whitelistPage,location.pathname)&&(this.options.enabled=!0);var s=this.options.window.replace(\"{{classes}}\",(function(){var l=this.options,d=l.position==\"top\"||l.position==\"bottom\"?\"banner\":\"floating\";r.isMobile()&&(d=\"floating\");var f=[\"cc-\"+d,\"cc-type-\"+l.type,\"cc-theme-\"+l.theme];return l.static&&f.push(\"cc-static\"),f.push.apply(f,v.call(this)),(function(g){var k=r.hash(JSON.stringify(g)),O=\"cc-color-override-\"+k,x=r.isPlainObject(g);return this.customStyleSelector=x?O:null,x&&(function(E,T,w){if(c.customStyles[E])return void++c.customStyles[E].references;var S={},y=T.popup,b=T.button,C=T.highlight;y&&(y.text=y.text?y.text:r.getContrast(y.background),y.link=y.link?y.link:y.text,S[w+\".cc-window\"]=[\"color: \"+y.text,\"background-color: \"+y.background],S[w+\".cc-revoke\"]=[\"color: \"+y.text,\"background-color: \"+y.background],S[w+\" .cc-link,\"+w+\" .cc-link:active,\"+w+\" .cc-link:visited\"]=[\"color: \"+y.link],b&&(b.text=b.text?b.text:r.getContrast(b.background),b.border=b.border?b.border:\"transparent\",S[w+\" .cc-btn\"]=[\"color: \"+b.text,\"border-color: \"+b.border,\"background-color: \"+b.background],b.padding&&S[w+\" .cc-btn\"].push(\"padding: \"+b.padding),b.background!=\"transparent\"&&(S[w+\" .cc-btn:hover, \"+w+\" .cc-btn:focus\"]=[\"background-color: \"+(b.hover||a(b.background))]),C?(C.text=C.text?C.text:r.getContrast(C.background),C.border=C.border?C.border:\"transparent\",S[w+\" .cc-highlight .cc-btn:first-child\"]=[\"color: \"+C.text,\"border-color: \"+C.border,\"background-color: \"+C.background]):S[w+\" .cc-highlight .cc-btn:first-child\"]=[\"color: \"+y.text]));var P=document.createElement(\"style\");document.head.appendChild(P),c.customStyles[E]={references:1,element:P.sheet};var A=-1;for(var j in S)S.hasOwnProperty(j)&&P.sheet.insertRule(j+\"{\"+S[j].join(\";\")+\"}\",++A)})(k,g,\".\"+O),x}).call(this,this.options.palette),this.customStyleSelector&&f.push(this.customStyleSelector),f}).call(this).join(\" \")).replace(\"{{children}}\",(function(){var l={},d=this.options;d.showLink||(d.elements.link=\"\",d.elements.messagelink=d.elements.message),Object.keys(d.elements).forEach(function(k){l[k]=r.interpolateString(d.elements[k],function(O){var x=d.content[O];return O&&typeof x==\"string\"&&x.length?x:\"\"})});var f=d.compliance[d.type];f||(f=d.compliance.info),l.compliance=r.interpolateString(f,function(k){return l[k]});var g=d.layouts[d.layout];return g||(g=d.layouts.basic),r.interpolateString(g,function(k){return l[k]})}).call(this)),p=this.options.overrideHTML;if(typeof p==\"string\"&&p.length&&(s=p),this.options.static){var m=i.call(this,'<div class=\"cc-grower\">'+s+\"</div>\");m.style.display=\"\",this.element=m.firstChild,this.element.style.display=\"none\",r.addClass(this.element,\"cc-invisible\")}else this.element=i.call(this,s);(function(){var l=this.setStatus.bind(this),d=this.close.bind(this),f=this.options.dismissOnTimeout;typeof f==\"number\"&&f>=0&&(this.dismissTimeout=window.setTimeout(function(){l(c.status.dismiss),d(!0)},Math.floor(f)));var g=this.options.dismissOnScroll;if(typeof g==\"number\"&&g>=0){var k=function(T){window.pageYOffset>Math.floor(g)&&(l(c.status.dismiss),d(!0),window.removeEventListener(\"scroll\",k),this.onWindowScroll=null)};this.options.enabled&&(this.onWindowScroll=k,window.addEventListener(\"scroll\",k))}var O=this.options.dismissOnWindowClick,x=this.options.ignoreClicksFrom;if(O){var E=(function(T){for(var w=!1,S=T.path.length,y=x.length,b=0;b<S;b++)if(!w)for(var C=0;C<y;C++)w||(w=r.hasClass(T.path[b],x[C]));w||(l(c.status.dismiss),d(!0),window.removeEventListener(\"click\",E),window.removeEventListener(\"touchend\",E),this.onWindowClick=null)}).bind(this);this.options.enabled&&(this.onWindowClick=E,window.addEventListener(\"click\",E),window.addEventListener(\"touchend\",E))}}).call(this),(function(){if(this.options.type!=\"info\"&&(this.options.revokable=!0),r.isMobile()&&(this.options.animateRevokable=!1),this.options.revokable){var l=v.call(this);this.options.animateRevokable&&l.push(\"cc-animate\"),this.customStyleSelector&&l.push(this.customStyleSelector);var d=this.options.revokeBtn.replace(\"{{classes}}\",l.join(\" \")).replace(\"{{policy}}\",this.options.content.policy);this.revokeBtn=i.call(this,d);var f=this.revokeBtn;if(this.options.animateRevokable){var g=r.throttle(function(k){var O=!1,x=window.innerHeight-20;r.hasClass(f,\"cc-top\")&&k.clientY<20&&(O=!0),r.hasClass(f,\"cc-bottom\")&&k.clientY>x&&(O=!0),O?r.hasClass(f,\"cc-active\")||r.addClass(f,\"cc-active\"):r.hasClass(f,\"cc-active\")&&r.removeClass(f,\"cc-active\")},200);this.onMouseMove=g,window.addEventListener(\"mousemove\",g)}}}).call(this),this.options.autoOpen&&this.autoOpen()},t.prototype.destroy=function(){this.onButtonClick&&this.element&&(this.element.removeEventListener(\"click\",this.onButtonClick),this.onButtonClick=null),this.dismissTimeout&&(clearTimeout(this.dismissTimeout),this.dismissTimeout=null),this.onWindowScroll&&(window.removeEventListener(\"scroll\",this.onWindowScroll),this.onWindowScroll=null),this.onWindowClick&&(window.removeEventListener(\"click\",this.onWindowClick),this.onWindowClick=null),this.onMouseMove&&(window.removeEventListener(\"mousemove\",this.onMouseMove),this.onMouseMove=null),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=null,this.revokeBtn&&this.revokeBtn.parentNode&&this.revokeBtn.parentNode.removeChild(this.revokeBtn),this.revokeBtn=null,(function(n){if(r.isPlainObject(n)){var s=r.hash(JSON.stringify(n)),p=c.customStyles[s];if(p&&!--p.references){var m=p.element.ownerNode;m&&m.parentNode&&m.parentNode.removeChild(m),c.customStyles[s]=null}}})(this.options.palette),this.options=null},t.prototype.open=function(n){if(this.element)return this.isOpen()||(c.hasTransition?this.fadeIn():this.element.style.display=\"\",this.options.revokable&&this.toggleRevokeButton(),this.options.onPopupOpen.call(this)),this},t.prototype.close=function(n){if(this.element)return this.isOpen()&&(c.hasTransition?this.fadeOut():this.element.style.display=\"none\",n&&this.options.revokable&&this.toggleRevokeButton(!0),this.options.onPopupClose.call(this)),this},t.prototype.fadeIn=function(){var n=this.element;if(c.hasTransition&&n&&(this.afterTransition&&h.call(this,n),r.hasClass(n,\"cc-invisible\"))){if(n.style.display=\"\",this.options.static){var s=this.element.clientHeight;this.element.parentNode.style.maxHeight=s+\"px\"}this.openingTimeout=setTimeout(o.bind(this,n),20)}},t.prototype.fadeOut=function(){var n=this.element;c.hasTransition&&n&&(this.openingTimeout&&(clearTimeout(this.openingTimeout),o.bind(this,n)),r.hasClass(n,\"cc-invisible\")||(this.options.static&&(this.element.parentNode.style.maxHeight=\"\"),this.afterTransition=h.bind(this,n),n.addEventListener(c.transitionEnd,this.afterTransition),r.addClass(n,\"cc-invisible\")))},t.prototype.isOpen=function(){return this.element&&this.element.style.display==\"\"&&(!c.hasTransition||!r.hasClass(this.element,\"cc-invisible\"))},t.prototype.toggleRevokeButton=function(n){this.revokeBtn&&(this.revokeBtn.style.display=n?\"\":\"none\")},t.prototype.revokeChoice=function(n){this.options.enabled=!0,this.clearStatus(),this.options.onRevokeChoice.call(this),n||this.autoOpen()},t.prototype.hasAnswered=function(n){return Object.keys(c.status).indexOf(this.getStatus())>=0},t.prototype.hasConsented=function(n){var s=this.getStatus();return s==c.status.allow||s==c.status.dismiss},t.prototype.autoOpen=function(n){!this.hasAnswered()&&this.options.enabled?this.open():this.hasAnswered()&&this.options.revokable&&this.toggleRevokeButton(!0)},t.prototype.setStatus=function(n){var s=this.options.cookie,p=r.getCookie(s.name),m=Object.keys(c.status).indexOf(p)>=0;Object.keys(c.status).indexOf(n)>=0?(r.setCookie(s.name,n,s.expiryDays,s.domain,s.path,s.secure),this.options.onStatusChange.call(this,n,m)):this.clearStatus()},t.prototype.getStatus=function(){return r.getCookie(this.options.cookie.name)},t.prototype.clearStatus=function(){var n=this.options.cookie;r.setCookie(n.name,\"\",-1,n.domain,n.path)},t})(),c.Location=(function(){var e={timeout:5e3,services:[\"ipinfo\"],serviceDefinitions:{ipinfo:function(){return{url:\"//ipinfo.io\",headers:[\"Accept: application/json\"],callback:function(i,a){try{var u=JSON.parse(a);return u.error?v(u):{code:u.country}}catch(n){return v({error:\"Invalid response (\"+n+\")\"})}}}},ipinfodb:function(i){return{url:\"//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}\",isScript:!0,callback:function(a,u){try{var n=JSON.parse(u);return n.statusCode==\"ERROR\"?v({error:n.statusMessage}):{code:n.countryCode}}catch(s){return v({error:\"Invalid response (\"+s+\")\"})}}}},maxmind:function(){return{url:\"//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js\",isScript:!0,callback:function(i){window.geoip2?geoip2.country(function(a){try{i({code:a.country.iso_code})}catch(u){i(v(u))}},function(a){i(v(a))}):i(new Error(\"Unexpected response format. The downloaded script should have exported `geoip2` to the global scope\"))}}}}};function t(i){r.deepExtend(this.options={},e),r.isPlainObject(i)&&r.deepExtend(this.options,i),this.currentServiceIndex=-1}function o(i,a,u){var n,s=document.createElement(\"script\");s.type=\"text/\"+(i.type||\"javascript\"),s.src=i.src||i,s.async=!1,s.onreadystatechange=s.onload=function(){var p=s.readyState;clearTimeout(n),a.done||p&&!/loaded|complete/.test(p)||(a.done=!0,a(),s.onreadystatechange=s.onload=null)},document.body.appendChild(s),n=setTimeout(function(){a.done=!0,a(),s.onreadystatechange=s.onload=null},u)}function h(i,a,u,n,s){var p=new(window.XMLHttpRequest||window.ActiveXObject)(\"MSXML2.XMLHTTP.3.0\");if(p.open(n?\"POST\":\"GET\",i,1),p.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\"),Array.isArray(s))for(var m=0,l=s.length;m<l;++m){var d=s[m].split(\":\",2);p.setRequestHeader(d[0].replace(/^\\s+|\\s+$/g,\"\"),d[1].replace(/^\\s+|\\s+$/g,\"\"))}typeof a==\"function\"&&(p.onreadystatechange=function(){p.readyState>3&&a(p)}),p.send(n)}function v(i){return new Error(\"Error [\"+(i.code||\"UNKNOWN\")+\"]: \"+i.error)}return t.prototype.getNextService=function(){var i;do i=this.getServiceByIdx(++this.currentServiceIndex);while(this.currentServiceIndex<this.options.services.length&&!i);return i},t.prototype.getServiceByIdx=function(i){var a=this.options.services[i];if(typeof a==\"function\"){var u=a();return u.name&&r.deepExtend(u,this.options.serviceDefinitions[u.name](u)),u}return typeof a==\"string\"?this.options.serviceDefinitions[a]():r.isPlainObject(a)?this.options.serviceDefinitions[a.name](a):null},t.prototype.locate=function(i,a){var u=this.getNextService();u?(this.callbackComplete=i,this.callbackError=a,this.runService(u,this.runNextServiceOnError.bind(this))):a(new Error(\"No services to run\"))},t.prototype.setupUrl=function(i){var a=this.getCurrentServiceOpts();return i.url.replace(/\\{(.*?)\\}/g,function(u,n){if(n===\"callback\"){var s=\"callback\"+Date.now();return window[s]=function(p){i.__JSONP_DATA=JSON.stringify(p)},s}if(n in a.interpolateUrl)return a.interpolateUrl[n]})},t.prototype.runService=function(i,a){var u=this;i&&i.url&&i.callback&&(i.isScript?o:h)(this.setupUrl(i),function(n){var s=n?n.responseText:\"\";i.__JSONP_DATA&&(s=i.__JSONP_DATA,delete i.__JSONP_DATA),u.runServiceCallback.call(u,a,i,s)},this.options.timeout,i.data,i.headers)},t.prototype.runServiceCallback=function(i,a,u){var n=this,s=a.callback(function(p){s||n.onServiceResult.call(n,i,p)},u);s&&this.onServiceResult.call(this,i,s)},t.prototype.onServiceResult=function(i,a){a instanceof Error||a&&a.error?i.call(this,a,null):i.call(this,null,a)},t.prototype.runNextServiceOnError=function(i,a){if(i){this.logError(i);var u=this.getNextService();u?this.runService(u,this.runNextServiceOnError.bind(this)):this.completeService.call(this,this.callbackError,new Error(\"All services failed\"))}else this.completeService.call(this,this.callbackComplete,a)},t.prototype.getCurrentServiceOpts=function(){var i=this.options.services[this.currentServiceIndex];return typeof i==\"string\"?{name:i}:typeof i==\"function\"?i():r.isPlainObject(i)?i:{}},t.prototype.completeService=function(i,a){this.currentServiceIndex=-1,i&&i(a)},t.prototype.logError=function(i){var a=this.currentServiceIndex,u=this.getServiceByIdx(a);console.warn(\"The service[\"+a+\"] (\"+u.url+\") responded with the following error\",i)},t})(),c.Law=(function(){var e={regionalLaw:!0,hasLaw:[\"AT\",\"BE\",\"BG\",\"HR\",\"CZ\",\"CY\",\"DK\",\"EE\",\"FI\",\"FR\",\"DE\",\"EL\",\"HU\",\"IE\",\"IT\",\"LV\",\"LT\",\"LU\",\"MT\",\"NL\",\"PL\",\"PT\",\"SK\",\"ES\",\"SE\",\"GB\",\"UK\",\"GR\",\"EU\"],revokable:[\"HR\",\"CY\",\"DK\",\"EE\",\"FR\",\"DE\",\"LV\",\"LT\",\"NL\",\"PT\",\"ES\"],explicitAction:[\"HR\",\"IT\",\"ES\"]};function t(o){this.initialise.apply(this,arguments)}return t.prototype.initialise=function(o){r.deepExtend(this.options={},e),r.isPlainObject(o)&&r.deepExtend(this.options,o)},t.prototype.get=function(o){var h=this.options;return{hasLaw:h.hasLaw.indexOf(o)>=0,revokable:h.revokable.indexOf(o)>=0,explicitAction:h.explicitAction.indexOf(o)>=0}},t.prototype.applyLaw=function(o,h){var v=this.get(h);return v.hasLaw||(o.enabled=!1,typeof o.onNoCookieLaw==\"function\"&&o.onNoCookieLaw(h,v)),this.options.regionalLaw&&(v.revokable&&(o.revokable=!0),v.explicitAction&&(o.dismissOnScroll=!1,o.dismissOnTimeout=!1)),o},t})(),c.initialise=function(e,t,o){var h=new c.Law(e.law);t||(t=function(){}),o||(o=function(){});var v=Object.keys(c.status),i=r.getCookie(\"cookieconsent_status\");v.indexOf(i)>=0?t(new c.Popup(e)):c.getCountryCode(e,function(a){delete e.law,delete e.location,a.code&&(e=h.applyLaw(e,a.code)),t(new c.Popup(e))},function(a){delete e.law,delete e.location,o(a,new c.Popup(e))})},c.getCountryCode=function(e,t,o){e.law&&e.law.countryCode?t({code:e.law.countryCode}):e.location?new c.Location(e.location).locate(function(h){t(h||{})},o):t({})},c.utils=r,c.hasInitialised=!0,window.cookieconsent=c}})(window.cookieconsent||{})),B}_();const L=document.getElementById(\"cookieconsent\");let I;const D=()=>{L&&(I=L.dataset.setup,L.dataset.api,window.cookieconsent.initialise({type:\"opt-in\",layout:\"basic\",content:JSON.parse(I),law:{countryCode:L.dataset.country},palette:{popup:{background:\"#08083c\",text:\"#ffffff\"},button:{background:\"#007bff\",text:\"#ffffff\"}},onPopupOpen:function(){},onPopupClose:function(){},onInitialise:function(c){c===\"allow\"&&R()},onStatusChange:function(c){c===\"allow\"&&R()},onRevokeChoice:function(){},onNoCookieLaw:function(){R()}}))},R=()=>{L.dataset.gtag&&W(),L.dataset.gtm&&H(window,document,\"script\",\"dataLayer\",L.dataset.gtm)},H=(c,r,N,e,t)=>{c[e]=c[e]||[],c[e].push({\"gtm.start\":new Date().getTime(),event:\"gtm.js\"});var o=r.getElementsByTagName(N)[0],h=r.createElement(N),v=\"\";h.async=!0,h.src=\"https://www.googletagmanager.com/gtm.js?id=\"+t+v,o.parentNode.insertBefore(h,o)},W=()=>{gtag(\"consent\",\"update\",{ad_user_data:\"granted\",ad_personalization:\"granted\",ad_storage:\"granted\",analytics_storage:\"granted\"})};D();\n"
  },
  {
    "path": "public/build/assets/cytoscape-cose-bilkent-DRrwnnKV.js",
    "content": "import{g as tt}from\"./_commonjsHelpers-Cpj98o6Y.js\";function et(b,B){for(var C=0;C<B.length;C++){const R=B[C];if(typeof R!=\"string\"&&!Array.isArray(R)){for(const T in R)if(T!==\"default\"&&!(T in b)){const o=Object.getOwnPropertyDescriptor(R,T);o&&Object.defineProperty(b,T,o.get?o:{enumerable:!0,get:()=>R[T]})}}}return Object.freeze(Object.defineProperty(b,Symbol.toStringTag,{value:\"Module\"}))}var V={exports:{}},k={exports:{}},$={exports:{}},rt=$.exports,K;function it(){return K||(K=1,(function(b,B){(function(R,T){b.exports=T()})(rt,function(){return(function(C){var R={};function T(o){if(R[o])return R[o].exports;var e=R[o]={i:o,l:!1,exports:{}};return C[o].call(e.exports,e,e.exports,T),e.l=!0,e.exports}return T.m=C,T.c=R,T.i=function(o){return o},T.d=function(o,e,t){T.o(o,e)||Object.defineProperty(o,e,{configurable:!1,enumerable:!0,get:t})},T.n=function(o){var e=o&&o.__esModule?function(){return o.default}:function(){return o};return T.d(e,\"a\",e),e},T.o=function(o,e){return Object.prototype.hasOwnProperty.call(o,e)},T.p=\"\",T(T.s=26)})([(function(C,R,T){function o(){}o.QUALITY=1,o.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,o.DEFAULT_INCREMENTAL=!1,o.DEFAULT_ANIMATION_ON_LAYOUT=!0,o.DEFAULT_ANIMATION_DURING_LAYOUT=!1,o.DEFAULT_ANIMATION_PERIOD=50,o.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,o.DEFAULT_GRAPH_MARGIN=15,o.NODE_DIMENSIONS_INCLUDE_LABELS=!1,o.SIMPLE_NODE_SIZE=40,o.SIMPLE_NODE_HALF_SIZE=o.SIMPLE_NODE_SIZE/2,o.EMPTY_COMPOUND_NODE_SIZE=40,o.MIN_EDGE_LENGTH=1,o.WORLD_BOUNDARY=1e6,o.INITIAL_WORLD_BOUNDARY=o.WORLD_BOUNDARY/1e3,o.WORLD_CENTER_X=1200,o.WORLD_CENTER_Y=900,C.exports=o}),(function(C,R,T){var o=T(2),e=T(8),t=T(9);function i(g,n,d){o.call(this,d),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=d,this.bendpoints=[],this.source=g,this.target=n}i.prototype=Object.create(o.prototype);for(var h in o)i[h]=o[h];i.prototype.getSource=function(){return this.source},i.prototype.getTarget=function(){return this.target},i.prototype.isInterGraph=function(){return this.isInterGraph},i.prototype.getLength=function(){return this.length},i.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},i.prototype.getBendpoints=function(){return this.bendpoints},i.prototype.getLca=function(){return this.lca},i.prototype.getSourceInLca=function(){return this.sourceInLca},i.prototype.getTargetInLca=function(){return this.targetInLca},i.prototype.getOtherEnd=function(g){if(this.source===g)return this.target;if(this.target===g)return this.source;throw\"Node is not incident with this edge\"},i.prototype.getOtherEndInGraph=function(g,n){for(var d=this.getOtherEnd(g),r=n.getGraphManager().getRoot();;){if(d.getOwner()==n)return d;if(d.getOwner()==r)break;d=d.getOwner().getParent()}return null},i.prototype.updateLength=function(){var g=new Array(4);this.isOverlapingSourceAndTarget=e.getIntersection(this.target.getRect(),this.source.getRect(),g),this.isOverlapingSourceAndTarget||(this.lengthX=g[0]-g[2],this.lengthY=g[1]-g[3],Math.abs(this.lengthX)<1&&(this.lengthX=t.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=t.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},i.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=t.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=t.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},C.exports=i}),(function(C,R,T){function o(e){this.vGraphObject=e}C.exports=o}),(function(C,R,T){var o=T(2),e=T(10),t=T(13),i=T(0),h=T(16),g=T(4);function n(r,l,s,c){s==null&&c==null&&(c=l),o.call(this,c),r.graphManager!=null&&(r=r.graphManager),this.estimatedSize=e.MIN_VALUE,this.inclusionTreeDepth=e.MAX_VALUE,this.vGraphObject=c,this.edges=[],this.graphManager=r,s!=null&&l!=null?this.rect=new t(l.x,l.y,s.width,s.height):this.rect=new t}n.prototype=Object.create(o.prototype);for(var d in o)n[d]=o[d];n.prototype.getEdges=function(){return this.edges},n.prototype.getChild=function(){return this.child},n.prototype.getOwner=function(){return this.owner},n.prototype.getWidth=function(){return this.rect.width},n.prototype.setWidth=function(r){this.rect.width=r},n.prototype.getHeight=function(){return this.rect.height},n.prototype.setHeight=function(r){this.rect.height=r},n.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},n.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},n.prototype.getCenter=function(){return new g(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},n.prototype.getLocation=function(){return new g(this.rect.x,this.rect.y)},n.prototype.getRect=function(){return this.rect},n.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},n.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},n.prototype.setRect=function(r,l){this.rect.x=r.x,this.rect.y=r.y,this.rect.width=l.width,this.rect.height=l.height},n.prototype.setCenter=function(r,l){this.rect.x=r-this.rect.width/2,this.rect.y=l-this.rect.height/2},n.prototype.setLocation=function(r,l){this.rect.x=r,this.rect.y=l},n.prototype.moveBy=function(r,l){this.rect.x+=r,this.rect.y+=l},n.prototype.getEdgeListToNode=function(r){var l=[],s=this;return s.edges.forEach(function(c){if(c.target==r){if(c.source!=s)throw\"Incorrect edge source!\";l.push(c)}}),l},n.prototype.getEdgesBetween=function(r){var l=[],s=this;return s.edges.forEach(function(c){if(!(c.source==s||c.target==s))throw\"Incorrect edge source and/or target\";(c.target==r||c.source==r)&&l.push(c)}),l},n.prototype.getNeighborsList=function(){var r=new Set,l=this;return l.edges.forEach(function(s){if(s.source==l)r.add(s.target);else{if(s.target!=l)throw\"Incorrect incidency!\";r.add(s.source)}}),r},n.prototype.withChildren=function(){var r=new Set,l,s;if(r.add(this),this.child!=null)for(var c=this.child.getNodes(),v=0;v<c.length;v++)l=c[v],s=l.withChildren(),s.forEach(function(L){r.add(L)});return r},n.prototype.getNoOfChildren=function(){var r=0,l;if(this.child==null)r=1;else for(var s=this.child.getNodes(),c=0;c<s.length;c++)l=s[c],r+=l.getNoOfChildren();return r==0&&(r=1),r},n.prototype.getEstimatedSize=function(){if(this.estimatedSize==e.MIN_VALUE)throw\"assert failed\";return this.estimatedSize},n.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},n.prototype.scatter=function(){var r,l,s=-i.INITIAL_WORLD_BOUNDARY,c=i.INITIAL_WORLD_BOUNDARY;r=i.WORLD_CENTER_X+h.nextDouble()*(c-s)+s;var v=-i.INITIAL_WORLD_BOUNDARY,L=i.INITIAL_WORLD_BOUNDARY;l=i.WORLD_CENTER_Y+h.nextDouble()*(L-v)+v,this.rect.x=r,this.rect.y=l},n.prototype.updateBounds=function(){if(this.getChild()==null)throw\"assert failed\";if(this.getChild().getNodes().length!=0){var r=this.getChild();if(r.updateBounds(!0),this.rect.x=r.getLeft(),this.rect.y=r.getTop(),this.setWidth(r.getRight()-r.getLeft()),this.setHeight(r.getBottom()-r.getTop()),i.NODE_DIMENSIONS_INCLUDE_LABELS){var l=r.getRight()-r.getLeft(),s=r.getBottom()-r.getTop();this.labelWidth>l&&(this.rect.x-=(this.labelWidth-l)/2,this.setWidth(this.labelWidth)),this.labelHeight>s&&(this.labelPos==\"center\"?this.rect.y-=(this.labelHeight-s)/2:this.labelPos==\"top\"&&(this.rect.y-=this.labelHeight-s),this.setHeight(this.labelHeight))}}},n.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==e.MAX_VALUE)throw\"assert failed\";return this.inclusionTreeDepth},n.prototype.transform=function(r){var l=this.rect.x;l>i.WORLD_BOUNDARY?l=i.WORLD_BOUNDARY:l<-i.WORLD_BOUNDARY&&(l=-i.WORLD_BOUNDARY);var s=this.rect.y;s>i.WORLD_BOUNDARY?s=i.WORLD_BOUNDARY:s<-i.WORLD_BOUNDARY&&(s=-i.WORLD_BOUNDARY);var c=new g(l,s),v=r.inverseTransformPoint(c);this.setLocation(v.x,v.y)},n.prototype.getLeft=function(){return this.rect.x},n.prototype.getRight=function(){return this.rect.x+this.rect.width},n.prototype.getTop=function(){return this.rect.y},n.prototype.getBottom=function(){return this.rect.y+this.rect.height},n.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},C.exports=n}),(function(C,R,T){function o(e,t){e==null&&t==null?(this.x=0,this.y=0):(this.x=e,this.y=t)}o.prototype.getX=function(){return this.x},o.prototype.getY=function(){return this.y},o.prototype.setX=function(e){this.x=e},o.prototype.setY=function(e){this.y=e},o.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},o.prototype.getCopy=function(){return new o(this.x,this.y)},o.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},C.exports=o}),(function(C,R,T){var o=T(2),e=T(10),t=T(0),i=T(6),h=T(3),g=T(1),n=T(13),d=T(12),r=T(11);function l(c,v,L){o.call(this,L),this.estimatedSize=e.MIN_VALUE,this.margin=t.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=c,v!=null&&v instanceof i?this.graphManager=v:v!=null&&v instanceof Layout&&(this.graphManager=v.graphManager)}l.prototype=Object.create(o.prototype);for(var s in o)l[s]=o[s];l.prototype.getNodes=function(){return this.nodes},l.prototype.getEdges=function(){return this.edges},l.prototype.getGraphManager=function(){return this.graphManager},l.prototype.getParent=function(){return this.parent},l.prototype.getLeft=function(){return this.left},l.prototype.getRight=function(){return this.right},l.prototype.getTop=function(){return this.top},l.prototype.getBottom=function(){return this.bottom},l.prototype.isConnected=function(){return this.isConnected},l.prototype.add=function(c,v,L){if(v==null&&L==null){var p=c;if(this.graphManager==null)throw\"Graph has no graph mgr!\";if(this.getNodes().indexOf(p)>-1)throw\"Node already in graph!\";return p.owner=this,this.getNodes().push(p),p}else{var A=c;if(!(this.getNodes().indexOf(v)>-1&&this.getNodes().indexOf(L)>-1))throw\"Source or target not in graph!\";if(!(v.owner==L.owner&&v.owner==this))throw\"Both owners must be this graph!\";return v.owner!=L.owner?null:(A.source=v,A.target=L,A.isInterGraph=!1,this.getEdges().push(A),v.edges.push(A),L!=v&&L.edges.push(A),A)}},l.prototype.remove=function(c){var v=c;if(c instanceof h){if(v==null)throw\"Node is null!\";if(!(v.owner!=null&&v.owner==this))throw\"Owner graph is invalid!\";if(this.graphManager==null)throw\"Owner graph manager is invalid!\";for(var L=v.edges.slice(),p,A=L.length,E=0;E<A;E++)p=L[E],p.isInterGraph?this.graphManager.remove(p):p.source.owner.remove(p);var O=this.nodes.indexOf(v);if(O==-1)throw\"Node not in owner node list!\";this.nodes.splice(O,1)}else if(c instanceof g){var p=c;if(p==null)throw\"Edge is null!\";if(!(p.source!=null&&p.target!=null))throw\"Source and/or target is null!\";if(!(p.source.owner!=null&&p.target.owner!=null&&p.source.owner==this&&p.target.owner==this))throw\"Source and/or target owner is invalid!\";var a=p.source.edges.indexOf(p),u=p.target.edges.indexOf(p);if(!(a>-1&&u>-1))throw\"Source and/or target doesn't know this edge!\";p.source.edges.splice(a,1),p.target!=p.source&&p.target.edges.splice(u,1);var O=p.source.owner.getEdges().indexOf(p);if(O==-1)throw\"Not in owner's edge list!\";p.source.owner.getEdges().splice(O,1)}},l.prototype.updateLeftTop=function(){for(var c=e.MAX_VALUE,v=e.MAX_VALUE,L,p,A,E=this.getNodes(),O=E.length,a=0;a<O;a++){var u=E[a];L=u.getTop(),p=u.getLeft(),c>L&&(c=L),v>p&&(v=p)}return c==e.MAX_VALUE?null:(E[0].getParent().paddingLeft!=null?A=E[0].getParent().paddingLeft:A=this.margin,this.left=v-A,this.top=c-A,new d(this.left,this.top))},l.prototype.updateBounds=function(c){for(var v=e.MAX_VALUE,L=-e.MAX_VALUE,p=e.MAX_VALUE,A=-e.MAX_VALUE,E,O,a,u,f,y=this.nodes,D=y.length,N=0;N<D;N++){var I=y[N];c&&I.child!=null&&I.updateBounds(),E=I.getLeft(),O=I.getRight(),a=I.getTop(),u=I.getBottom(),v>E&&(v=E),L<O&&(L=O),p>a&&(p=a),A<u&&(A=u)}var m=new n(v,p,L-v,A-p);v==e.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),y[0].getParent().paddingLeft!=null?f=y[0].getParent().paddingLeft:f=this.margin,this.left=m.x-f,this.right=m.x+m.width+f,this.top=m.y-f,this.bottom=m.y+m.height+f},l.calculateBounds=function(c){for(var v=e.MAX_VALUE,L=-e.MAX_VALUE,p=e.MAX_VALUE,A=-e.MAX_VALUE,E,O,a,u,f=c.length,y=0;y<f;y++){var D=c[y];E=D.getLeft(),O=D.getRight(),a=D.getTop(),u=D.getBottom(),v>E&&(v=E),L<O&&(L=O),p>a&&(p=a),A<u&&(A=u)}var N=new n(v,p,L-v,A-p);return N},l.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},l.prototype.getEstimatedSize=function(){if(this.estimatedSize==e.MIN_VALUE)throw\"assert failed\";return this.estimatedSize},l.prototype.calcEstimatedSize=function(){for(var c=0,v=this.nodes,L=v.length,p=0;p<L;p++){var A=v[p];c+=A.calcEstimatedSize()}return c==0?this.estimatedSize=t.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=c/Math.sqrt(this.nodes.length),this.estimatedSize},l.prototype.updateConnected=function(){var c=this;if(this.nodes.length==0){this.isConnected=!0;return}var v=new r,L=new Set,p=this.nodes[0],A,E,O=p.withChildren();for(O.forEach(function(N){v.push(N),L.add(N)});v.length!==0;){p=v.shift(),A=p.getEdges();for(var a=A.length,u=0;u<a;u++){var f=A[u];if(E=f.getOtherEndInGraph(p,this),E!=null&&!L.has(E)){var y=E.withChildren();y.forEach(function(N){v.push(N),L.add(N)})}}}if(this.isConnected=!1,L.size>=this.nodes.length){var D=0;L.forEach(function(N){N.owner==c&&D++}),D==this.nodes.length&&(this.isConnected=!0)}},C.exports=l}),(function(C,R,T){var o,e=T(1);function t(i){o=T(5),this.layout=i,this.graphs=[],this.edges=[]}t.prototype.addRoot=function(){var i=this.layout.newGraph(),h=this.layout.newNode(null),g=this.add(i,h);return this.setRootGraph(g),this.rootGraph},t.prototype.add=function(i,h,g,n,d){if(g==null&&n==null&&d==null){if(i==null)throw\"Graph is null!\";if(h==null)throw\"Parent node is null!\";if(this.graphs.indexOf(i)>-1)throw\"Graph already in this graph mgr!\";if(this.graphs.push(i),i.parent!=null)throw\"Already has a parent!\";if(h.child!=null)throw\"Already has a child!\";return i.parent=h,h.child=i,i}else{d=g,n=h,g=i;var r=n.getOwner(),l=d.getOwner();if(!(r!=null&&r.getGraphManager()==this))throw\"Source not in this graph mgr!\";if(!(l!=null&&l.getGraphManager()==this))throw\"Target not in this graph mgr!\";if(r==l)return g.isInterGraph=!1,r.add(g,n,d);if(g.isInterGraph=!0,g.source=n,g.target=d,this.edges.indexOf(g)>-1)throw\"Edge already in inter-graph edge list!\";if(this.edges.push(g),!(g.source!=null&&g.target!=null))throw\"Edge source and/or target is null!\";if(!(g.source.edges.indexOf(g)==-1&&g.target.edges.indexOf(g)==-1))throw\"Edge already in source and/or target incidency list!\";return g.source.edges.push(g),g.target.edges.push(g),g}},t.prototype.remove=function(i){if(i instanceof o){var h=i;if(h.getGraphManager()!=this)throw\"Graph not in this graph mgr\";if(!(h==this.rootGraph||h.parent!=null&&h.parent.graphManager==this))throw\"Invalid parent node!\";var g=[];g=g.concat(h.getEdges());for(var n,d=g.length,r=0;r<d;r++)n=g[r],h.remove(n);var l=[];l=l.concat(h.getNodes());var s;d=l.length;for(var r=0;r<d;r++)s=l[r],h.remove(s);h==this.rootGraph&&this.setRootGraph(null);var c=this.graphs.indexOf(h);this.graphs.splice(c,1),h.parent=null}else if(i instanceof e){if(n=i,n==null)throw\"Edge is null!\";if(!n.isInterGraph)throw\"Not an inter-graph edge!\";if(!(n.source!=null&&n.target!=null))throw\"Source and/or target is null!\";if(!(n.source.edges.indexOf(n)!=-1&&n.target.edges.indexOf(n)!=-1))throw\"Source and/or target doesn't know this edge!\";var c=n.source.edges.indexOf(n);if(n.source.edges.splice(c,1),c=n.target.edges.indexOf(n),n.target.edges.splice(c,1),!(n.source.owner!=null&&n.source.owner.getGraphManager()!=null))throw\"Edge owner graph or owner graph manager is null!\";if(n.source.owner.getGraphManager().edges.indexOf(n)==-1)throw\"Not in owner graph manager's edge list!\";var c=n.source.owner.getGraphManager().edges.indexOf(n);n.source.owner.getGraphManager().edges.splice(c,1)}},t.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},t.prototype.getGraphs=function(){return this.graphs},t.prototype.getAllNodes=function(){if(this.allNodes==null){for(var i=[],h=this.getGraphs(),g=h.length,n=0;n<g;n++)i=i.concat(h[n].getNodes());this.allNodes=i}return this.allNodes},t.prototype.resetAllNodes=function(){this.allNodes=null},t.prototype.resetAllEdges=function(){this.allEdges=null},t.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},t.prototype.getAllEdges=function(){if(this.allEdges==null){var i=[],h=this.getGraphs();h.length;for(var g=0;g<h.length;g++)i=i.concat(h[g].getEdges());i=i.concat(this.edges),this.allEdges=i}return this.allEdges},t.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},t.prototype.setAllNodesToApplyGravitation=function(i){if(this.allNodesToApplyGravitation!=null)throw\"assert failed\";this.allNodesToApplyGravitation=i},t.prototype.getRoot=function(){return this.rootGraph},t.prototype.setRootGraph=function(i){if(i.getGraphManager()!=this)throw\"Root not in this graph mgr!\";this.rootGraph=i,i.parent==null&&(i.parent=this.layout.newNode(\"Root node\"))},t.prototype.getLayout=function(){return this.layout},t.prototype.isOneAncestorOfOther=function(i,h){if(!(i!=null&&h!=null))throw\"assert failed\";if(i==h)return!0;var g=i.getOwner(),n;do{if(n=g.getParent(),n==null)break;if(n==h)return!0;if(g=n.getOwner(),g==null)break}while(!0);g=h.getOwner();do{if(n=g.getParent(),n==null)break;if(n==i)return!0;if(g=n.getOwner(),g==null)break}while(!0);return!1},t.prototype.calcLowestCommonAncestors=function(){for(var i,h,g,n,d,r=this.getAllEdges(),l=r.length,s=0;s<l;s++){if(i=r[s],h=i.source,g=i.target,i.lca=null,i.sourceInLca=h,i.targetInLca=g,h==g){i.lca=h.getOwner();continue}for(n=h.getOwner();i.lca==null;){for(i.targetInLca=g,d=g.getOwner();i.lca==null;){if(d==n){i.lca=d;break}if(d==this.rootGraph)break;if(i.lca!=null)throw\"assert failed\";i.targetInLca=d.getParent(),d=i.targetInLca.getOwner()}if(n==this.rootGraph)break;i.lca==null&&(i.sourceInLca=n.getParent(),n=i.sourceInLca.getOwner())}if(i.lca==null)throw\"assert failed\"}},t.prototype.calcLowestCommonAncestor=function(i,h){if(i==h)return i.getOwner();var g=i.getOwner();do{if(g==null)break;var n=h.getOwner();do{if(n==null)break;if(n==g)return n;n=n.getParent().getOwner()}while(!0);g=g.getParent().getOwner()}while(!0);return g},t.prototype.calcInclusionTreeDepths=function(i,h){i==null&&h==null&&(i=this.rootGraph,h=1);for(var g,n=i.getNodes(),d=n.length,r=0;r<d;r++)g=n[r],g.inclusionTreeDepth=h,g.child!=null&&this.calcInclusionTreeDepths(g.child,h+1)},t.prototype.includesInvalidEdge=function(){for(var i,h=this.edges.length,g=0;g<h;g++)if(i=this.edges[g],this.isOneAncestorOfOther(i.source,i.target))return!0;return!1},C.exports=t}),(function(C,R,T){var o=T(0);function e(){}for(var t in o)e[t]=o[t];e.MAX_ITERATIONS=2500,e.DEFAULT_EDGE_LENGTH=50,e.DEFAULT_SPRING_STRENGTH=.45,e.DEFAULT_REPULSION_STRENGTH=4500,e.DEFAULT_GRAVITY_STRENGTH=.4,e.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,e.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,e.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,e.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,e.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,e.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,e.COOLING_ADAPTATION_FACTOR=.33,e.ADAPTATION_LOWER_NODE_LIMIT=1e3,e.ADAPTATION_UPPER_NODE_LIMIT=5e3,e.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,e.MAX_NODE_DISPLACEMENT=e.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,e.MIN_REPULSION_DIST=e.DEFAULT_EDGE_LENGTH/10,e.CONVERGENCE_CHECK_PERIOD=100,e.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,e.MIN_EDGE_LENGTH=1,e.GRID_CALCULATION_CHECK_PERIOD=10,C.exports=e}),(function(C,R,T){var o=T(12);function e(){}e.calcSeparationAmount=function(t,i,h,g){if(!t.intersects(i))throw\"assert failed\";var n=new Array(2);this.decideDirectionsForOverlappingNodes(t,i,n),h[0]=Math.min(t.getRight(),i.getRight())-Math.max(t.x,i.x),h[1]=Math.min(t.getBottom(),i.getBottom())-Math.max(t.y,i.y),t.getX()<=i.getX()&&t.getRight()>=i.getRight()?h[0]+=Math.min(i.getX()-t.getX(),t.getRight()-i.getRight()):i.getX()<=t.getX()&&i.getRight()>=t.getRight()&&(h[0]+=Math.min(t.getX()-i.getX(),i.getRight()-t.getRight())),t.getY()<=i.getY()&&t.getBottom()>=i.getBottom()?h[1]+=Math.min(i.getY()-t.getY(),t.getBottom()-i.getBottom()):i.getY()<=t.getY()&&i.getBottom()>=t.getBottom()&&(h[1]+=Math.min(t.getY()-i.getY(),i.getBottom()-t.getBottom()));var d=Math.abs((i.getCenterY()-t.getCenterY())/(i.getCenterX()-t.getCenterX()));i.getCenterY()===t.getCenterY()&&i.getCenterX()===t.getCenterX()&&(d=1);var r=d*h[0],l=h[1]/d;h[0]<l?l=h[0]:r=h[1],h[0]=-1*n[0]*(l/2+g),h[1]=-1*n[1]*(r/2+g)},e.decideDirectionsForOverlappingNodes=function(t,i,h){t.getCenterX()<i.getCenterX()?h[0]=-1:h[0]=1,t.getCenterY()<i.getCenterY()?h[1]=-1:h[1]=1},e.getIntersection2=function(t,i,h){var g=t.getCenterX(),n=t.getCenterY(),d=i.getCenterX(),r=i.getCenterY();if(t.intersects(i))return h[0]=g,h[1]=n,h[2]=d,h[3]=r,!0;var l=t.getX(),s=t.getY(),c=t.getRight(),v=t.getX(),L=t.getBottom(),p=t.getRight(),A=t.getWidthHalf(),E=t.getHeightHalf(),O=i.getX(),a=i.getY(),u=i.getRight(),f=i.getX(),y=i.getBottom(),D=i.getRight(),N=i.getWidthHalf(),I=i.getHeightHalf(),m=!1,M=!1;if(g===d){if(n>r)return h[0]=g,h[1]=s,h[2]=d,h[3]=y,!1;if(n<r)return h[0]=g,h[1]=L,h[2]=d,h[3]=a,!1}else if(n===r){if(g>d)return h[0]=l,h[1]=n,h[2]=u,h[3]=r,!1;if(g<d)return h[0]=c,h[1]=n,h[2]=O,h[3]=r,!1}else{var F=t.height/t.width,P=i.height/i.width,w=(r-n)/(d-g),G=void 0,x=void 0,S=void 0,U=void 0,Y=void 0,_=void 0;if(-F===w?g>d?(h[0]=v,h[1]=L,m=!0):(h[0]=c,h[1]=s,m=!0):F===w&&(g>d?(h[0]=l,h[1]=s,m=!0):(h[0]=p,h[1]=L,m=!0)),-P===w?d>g?(h[2]=f,h[3]=y,M=!0):(h[2]=u,h[3]=a,M=!0):P===w&&(d>g?(h[2]=O,h[3]=a,M=!0):(h[2]=D,h[3]=y,M=!0)),m&&M)return!1;if(g>d?n>r?(G=this.getCardinalDirection(F,w,4),x=this.getCardinalDirection(P,w,2)):(G=this.getCardinalDirection(-F,w,3),x=this.getCardinalDirection(-P,w,1)):n>r?(G=this.getCardinalDirection(-F,w,1),x=this.getCardinalDirection(-P,w,3)):(G=this.getCardinalDirection(F,w,2),x=this.getCardinalDirection(P,w,4)),!m)switch(G){case 1:U=s,S=g+-E/w,h[0]=S,h[1]=U;break;case 2:S=p,U=n+A*w,h[0]=S,h[1]=U;break;case 3:U=L,S=g+E/w,h[0]=S,h[1]=U;break;case 4:S=v,U=n+-A*w,h[0]=S,h[1]=U;break}if(!M)switch(x){case 1:_=a,Y=d+-I/w,h[2]=Y,h[3]=_;break;case 2:Y=D,_=r+N*w,h[2]=Y,h[3]=_;break;case 3:_=y,Y=d+I/w,h[2]=Y,h[3]=_;break;case 4:Y=f,_=r+-N*w,h[2]=Y,h[3]=_;break}}return!1},e.getCardinalDirection=function(t,i,h){return t>i?h:1+h%4},e.getIntersection=function(t,i,h,g){if(g==null)return this.getIntersection2(t,i,h);var n=t.x,d=t.y,r=i.x,l=i.y,s=h.x,c=h.y,v=g.x,L=g.y,p=void 0,A=void 0,E=void 0,O=void 0,a=void 0,u=void 0,f=void 0,y=void 0,D=void 0;return E=l-d,a=n-r,f=r*d-n*l,O=L-c,u=s-v,y=v*c-s*L,D=E*u-O*a,D===0?null:(p=(a*y-u*f)/D,A=(O*f-E*y)/D,new o(p,A))},e.angleOfVector=function(t,i,h,g){var n=void 0;return t!==h?(n=Math.atan((g-i)/(h-t)),h<t?n+=Math.PI:g<i&&(n+=this.TWO_PI)):g<i?n=this.ONE_AND_HALF_PI:n=this.HALF_PI,n},e.doIntersect=function(t,i,h,g){var n=t.x,d=t.y,r=i.x,l=i.y,s=h.x,c=h.y,v=g.x,L=g.y,p=(r-n)*(L-c)-(v-s)*(l-d);if(p===0)return!1;var A=((L-c)*(v-n)+(s-v)*(L-d))/p,E=((d-l)*(v-n)+(r-n)*(L-d))/p;return 0<A&&A<1&&0<E&&E<1},e.HALF_PI=.5*Math.PI,e.ONE_AND_HALF_PI=1.5*Math.PI,e.TWO_PI=2*Math.PI,e.THREE_PI=3*Math.PI,C.exports=e}),(function(C,R,T){function o(){}o.sign=function(e){return e>0?1:e<0?-1:0},o.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},o.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},C.exports=o}),(function(C,R,T){function o(){}o.MAX_VALUE=2147483647,o.MIN_VALUE=-2147483648,C.exports=o}),(function(C,R,T){var o=(function(){function n(d,r){for(var l=0;l<r.length;l++){var s=r[l];s.enumerable=s.enumerable||!1,s.configurable=!0,\"value\"in s&&(s.writable=!0),Object.defineProperty(d,s.key,s)}}return function(d,r,l){return r&&n(d.prototype,r),l&&n(d,l),d}})();function e(n,d){if(!(n instanceof d))throw new TypeError(\"Cannot call a class as a function\")}var t=function(d){return{value:d,next:null,prev:null}},i=function(d,r,l,s){return d!==null?d.next=r:s.head=r,l!==null?l.prev=r:s.tail=r,r.prev=d,r.next=l,s.length++,r},h=function(d,r){var l=d.prev,s=d.next;return l!==null?l.next=s:r.head=s,s!==null?s.prev=l:r.tail=l,d.prev=d.next=null,r.length--,d},g=(function(){function n(d){var r=this;e(this,n),this.length=0,this.head=null,this.tail=null,d?.forEach(function(l){return r.push(l)})}return o(n,[{key:\"size\",value:function(){return this.length}},{key:\"insertBefore\",value:function(r,l){return i(l.prev,t(r),l,this)}},{key:\"insertAfter\",value:function(r,l){return i(l,t(r),l.next,this)}},{key:\"insertNodeBefore\",value:function(r,l){return i(l.prev,r,l,this)}},{key:\"insertNodeAfter\",value:function(r,l){return i(l,r,l.next,this)}},{key:\"push\",value:function(r){return i(this.tail,t(r),null,this)}},{key:\"unshift\",value:function(r){return i(null,t(r),this.head,this)}},{key:\"remove\",value:function(r){return h(r,this)}},{key:\"pop\",value:function(){return h(this.tail,this).value}},{key:\"popNode\",value:function(){return h(this.tail,this)}},{key:\"shift\",value:function(){return h(this.head,this).value}},{key:\"shiftNode\",value:function(){return h(this.head,this)}},{key:\"get_object_at\",value:function(r){if(r<=this.length()){for(var l=1,s=this.head;l<r;)s=s.next,l++;return s.value}}},{key:\"set_object_at\",value:function(r,l){if(r<=this.length()){for(var s=1,c=this.head;s<r;)c=c.next,s++;c.value=l}}}]),n})();C.exports=g}),(function(C,R,T){function o(e,t,i){this.x=null,this.y=null,e==null&&t==null&&i==null?(this.x=0,this.y=0):typeof e==\"number\"&&typeof t==\"number\"&&i==null?(this.x=e,this.y=t):e.constructor.name==\"Point\"&&t==null&&i==null&&(i=e,this.x=i.x,this.y=i.y)}o.prototype.getX=function(){return this.x},o.prototype.getY=function(){return this.y},o.prototype.getLocation=function(){return new o(this.x,this.y)},o.prototype.setLocation=function(e,t,i){e.constructor.name==\"Point\"&&t==null&&i==null?(i=e,this.setLocation(i.x,i.y)):typeof e==\"number\"&&typeof t==\"number\"&&i==null&&(parseInt(e)==e&&parseInt(t)==t?this.move(e,t):(this.x=Math.floor(e+.5),this.y=Math.floor(t+.5)))},o.prototype.move=function(e,t){this.x=e,this.y=t},o.prototype.translate=function(e,t){this.x+=e,this.y+=t},o.prototype.equals=function(e){if(e.constructor.name==\"Point\"){var t=e;return this.x==t.x&&this.y==t.y}return this==e},o.prototype.toString=function(){return new o().constructor.name+\"[x=\"+this.x+\",y=\"+this.y+\"]\"},C.exports=o}),(function(C,R,T){function o(e,t,i,h){this.x=0,this.y=0,this.width=0,this.height=0,e!=null&&t!=null&&i!=null&&h!=null&&(this.x=e,this.y=t,this.width=i,this.height=h)}o.prototype.getX=function(){return this.x},o.prototype.setX=function(e){this.x=e},o.prototype.getY=function(){return this.y},o.prototype.setY=function(e){this.y=e},o.prototype.getWidth=function(){return this.width},o.prototype.setWidth=function(e){this.width=e},o.prototype.getHeight=function(){return this.height},o.prototype.setHeight=function(e){this.height=e},o.prototype.getRight=function(){return this.x+this.width},o.prototype.getBottom=function(){return this.y+this.height},o.prototype.intersects=function(e){return!(this.getRight()<e.x||this.getBottom()<e.y||e.getRight()<this.x||e.getBottom()<this.y)},o.prototype.getCenterX=function(){return this.x+this.width/2},o.prototype.getMinX=function(){return this.getX()},o.prototype.getMaxX=function(){return this.getX()+this.width},o.prototype.getCenterY=function(){return this.y+this.height/2},o.prototype.getMinY=function(){return this.getY()},o.prototype.getMaxY=function(){return this.getY()+this.height},o.prototype.getWidthHalf=function(){return this.width/2},o.prototype.getHeightHalf=function(){return this.height/2},C.exports=o}),(function(C,R,T){var o=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(t){return typeof t}:function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t};function e(){}e.lastID=0,e.createID=function(t){return e.isPrimitive(t)?t:(t.uniqueID!=null||(t.uniqueID=e.getString(),e.lastID++),t.uniqueID)},e.getString=function(t){return t==null&&(t=e.lastID),\"Object#\"+t},e.isPrimitive=function(t){var i=typeof t>\"u\"?\"undefined\":o(t);return t==null||i!=\"object\"&&i!=\"function\"},C.exports=e}),(function(C,R,T){function o(s){if(Array.isArray(s)){for(var c=0,v=Array(s.length);c<s.length;c++)v[c]=s[c];return v}else return Array.from(s)}var e=T(0),t=T(6),i=T(3),h=T(1),g=T(5),n=T(4),d=T(17),r=T(27);function l(s){r.call(this),this.layoutQuality=e.QUALITY,this.createBendsAsNeeded=e.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=e.DEFAULT_INCREMENTAL,this.animationOnLayout=e.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=e.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=e.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=e.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new t(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,s!=null&&(this.isRemoteUse=s)}l.RANDOM_SEED=1,l.prototype=Object.create(r.prototype),l.prototype.getGraphManager=function(){return this.graphManager},l.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},l.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},l.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},l.prototype.newGraphManager=function(){var s=new t(this);return this.graphManager=s,s},l.prototype.newGraph=function(s){return new g(null,this.graphManager,s)},l.prototype.newNode=function(s){return new i(this.graphManager,s)},l.prototype.newEdge=function(s){return new h(null,null,s)},l.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},l.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var s;return this.checkLayoutSuccess()?s=!1:s=this.layout(),e.ANIMATE===\"during\"?!1:(s&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,s)},l.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},l.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var s=this.graphManager.getAllEdges(),c=0;c<s.length;c++)s[c];for(var v=this.graphManager.getRoot().getNodes(),c=0;c<v.length;c++)v[c];this.update(this.graphManager.getRoot())}},l.prototype.update=function(s){if(s==null)this.update2();else if(s instanceof i){var c=s;if(c.getChild()!=null)for(var v=c.getChild().getNodes(),L=0;L<v.length;L++)update(v[L]);if(c.vGraphObject!=null){var p=c.vGraphObject;p.update(c)}}else if(s instanceof h){var A=s;if(A.vGraphObject!=null){var E=A.vGraphObject;E.update(A)}}else if(s instanceof g){var O=s;if(O.vGraphObject!=null){var a=O.vGraphObject;a.update(O)}}},l.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=e.QUALITY,this.animationDuringLayout=e.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=e.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=e.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=e.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=e.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=e.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},l.prototype.transform=function(s){if(s==null)this.transform(new n(0,0));else{var c=new d,v=this.graphManager.getRoot().updateLeftTop();if(v!=null){c.setWorldOrgX(s.x),c.setWorldOrgY(s.y),c.setDeviceOrgX(v.x),c.setDeviceOrgY(v.y);for(var L=this.getAllNodes(),p,A=0;A<L.length;A++)p=L[A],p.transform(c)}}},l.prototype.positionNodesRandomly=function(s){if(s==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var c,v,L=s.getNodes(),p=0;p<L.length;p++)c=L[p],v=c.getChild(),v==null||v.getNodes().length==0?c.scatter():(this.positionNodesRandomly(v),c.updateBounds())},l.prototype.getFlatForest=function(){for(var s=[],c=!0,v=this.graphManager.getRoot().getNodes(),L=!0,p=0;p<v.length;p++)v[p].getChild()!=null&&(L=!1);if(!L)return s;var A=new Set,E=[],O=new Map,a=[];for(a=a.concat(v);a.length>0&&c;){for(E.push(a[0]);E.length>0&&c;){var u=E[0];E.splice(0,1),A.add(u);for(var f=u.getEdges(),p=0;p<f.length;p++){var y=f[p].getOtherEnd(u);if(O.get(u)!=y)if(!A.has(y))E.push(y),O.set(y,u);else{c=!1;break}}}if(!c)s=[];else{var D=[].concat(o(A));s.push(D);for(var p=0;p<D.length;p++){var N=D[p],I=a.indexOf(N);I>-1&&a.splice(I,1)}A=new Set,O=new Map}}return s},l.prototype.createDummyNodesForBendpoints=function(s){for(var c=[],v=s.source,L=this.graphManager.calcLowestCommonAncestor(s.source,s.target),p=0;p<s.bendpoints.length;p++){var A=this.newNode(null);A.setRect(new Point(0,0),new Dimension(1,1)),L.add(A);var E=this.newEdge(null);this.graphManager.add(E,v,A),c.add(A),v=A}var E=this.newEdge(null);return this.graphManager.add(E,v,s.target),this.edgeToDummyNodes.set(s,c),s.isInterGraph()?this.graphManager.remove(s):L.remove(s),c},l.prototype.createBendpointsFromDummyNodes=function(){var s=[];s=s.concat(this.graphManager.getAllEdges()),s=[].concat(o(this.edgeToDummyNodes.keys())).concat(s);for(var c=0;c<s.length;c++){var v=s[c];if(v.bendpoints.length>0){for(var L=this.edgeToDummyNodes.get(v),p=0;p<L.length;p++){var A=L[p],E=new n(A.getCenterX(),A.getCenterY()),O=v.bendpoints.get(p);O.x=E.x,O.y=E.y,A.getOwner().remove(A)}this.graphManager.add(v,v.source,v.target)}}},l.transform=function(s,c,v,L){if(v!=null&&L!=null){var p=c;if(s<=50){var A=c/v;p-=(c-A)/50*(50-s)}else{var E=c*L;p+=(E-c)/50*(s-50)}return p}else{var O,a;return s<=50?(O=9*c/500,a=c/10):(O=9*c/50,a=-8*c),O*s+a}},l.findCenterOfTree=function(s){var c=[];c=c.concat(s);var v=[],L=new Map,p=!1,A=null;(c.length==1||c.length==2)&&(p=!0,A=c[0]);for(var E=0;E<c.length;E++){var O=c[E],a=O.getNeighborsList().size;L.set(O,O.getNeighborsList().size),a==1&&v.push(O)}var u=[];for(u=u.concat(v);!p;){var f=[];f=f.concat(u),u=[];for(var E=0;E<c.length;E++){var O=c[E],y=c.indexOf(O);y>=0&&c.splice(y,1);var D=O.getNeighborsList();D.forEach(function(m){if(v.indexOf(m)<0){var M=L.get(m),F=M-1;F==1&&u.push(m),L.set(m,F)}})}v=v.concat(u),(c.length==1||c.length==2)&&(p=!0,A=c[0])}return A},l.prototype.setGraphManager=function(s){this.graphManager=s},C.exports=l}),(function(C,R,T){function o(){}o.seed=1,o.x=0,o.nextDouble=function(){return o.x=Math.sin(o.seed++)*1e4,o.x-Math.floor(o.x)},C.exports=o}),(function(C,R,T){var o=T(4);function e(t,i){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}e.prototype.getWorldOrgX=function(){return this.lworldOrgX},e.prototype.setWorldOrgX=function(t){this.lworldOrgX=t},e.prototype.getWorldOrgY=function(){return this.lworldOrgY},e.prototype.setWorldOrgY=function(t){this.lworldOrgY=t},e.prototype.getWorldExtX=function(){return this.lworldExtX},e.prototype.setWorldExtX=function(t){this.lworldExtX=t},e.prototype.getWorldExtY=function(){return this.lworldExtY},e.prototype.setWorldExtY=function(t){this.lworldExtY=t},e.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},e.prototype.setDeviceOrgX=function(t){this.ldeviceOrgX=t},e.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},e.prototype.setDeviceOrgY=function(t){this.ldeviceOrgY=t},e.prototype.getDeviceExtX=function(){return this.ldeviceExtX},e.prototype.setDeviceExtX=function(t){this.ldeviceExtX=t},e.prototype.getDeviceExtY=function(){return this.ldeviceExtY},e.prototype.setDeviceExtY=function(t){this.ldeviceExtY=t},e.prototype.transformX=function(t){var i=0,h=this.lworldExtX;return h!=0&&(i=this.ldeviceOrgX+(t-this.lworldOrgX)*this.ldeviceExtX/h),i},e.prototype.transformY=function(t){var i=0,h=this.lworldExtY;return h!=0&&(i=this.ldeviceOrgY+(t-this.lworldOrgY)*this.ldeviceExtY/h),i},e.prototype.inverseTransformX=function(t){var i=0,h=this.ldeviceExtX;return h!=0&&(i=this.lworldOrgX+(t-this.ldeviceOrgX)*this.lworldExtX/h),i},e.prototype.inverseTransformY=function(t){var i=0,h=this.ldeviceExtY;return h!=0&&(i=this.lworldOrgY+(t-this.ldeviceOrgY)*this.lworldExtY/h),i},e.prototype.inverseTransformPoint=function(t){var i=new o(this.inverseTransformX(t.x),this.inverseTransformY(t.y));return i},C.exports=e}),(function(C,R,T){function o(r){if(Array.isArray(r)){for(var l=0,s=Array(r.length);l<r.length;l++)s[l]=r[l];return s}else return Array.from(r)}var e=T(15),t=T(7),i=T(0),h=T(8),g=T(9);function n(){e.call(this),this.useSmartIdealEdgeLengthCalculation=t.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=t.DEFAULT_EDGE_LENGTH,this.springConstant=t.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=t.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=t.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=t.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=t.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=t.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*t.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=t.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=t.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=t.MAX_ITERATIONS}n.prototype=Object.create(e.prototype);for(var d in e)n[d]=e[d];n.prototype.initParameters=function(){e.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=t.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},n.prototype.calcIdealEdgeLengths=function(){for(var r,l,s,c,v,L,p=this.getGraphManager().getAllEdges(),A=0;A<p.length;A++)r=p[A],r.idealLength=this.idealEdgeLength,r.isInterGraph&&(s=r.getSource(),c=r.getTarget(),v=r.getSourceInLca().getEstimatedSize(),L=r.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(r.idealLength+=v+L-2*i.SIMPLE_NODE_SIZE),l=r.getLca().getInclusionTreeDepth(),r.idealLength+=t.DEFAULT_EDGE_LENGTH*t.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(s.getInclusionTreeDepth()+c.getInclusionTreeDepth()-2*l))},n.prototype.initSpringEmbedder=function(){var r=this.getAllNodes().length;this.incremental?(r>t.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*t.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(r-t.ADAPTATION_LOWER_NODE_LIMIT)/(t.ADAPTATION_UPPER_NODE_LIMIT-t.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-t.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=t.MAX_NODE_DISPLACEMENT_INCREMENTAL):(r>t.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(t.COOLING_ADAPTATION_FACTOR,1-(r-t.ADAPTATION_LOWER_NODE_LIMIT)/(t.ADAPTATION_UPPER_NODE_LIMIT-t.ADAPTATION_LOWER_NODE_LIMIT)*(1-t.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=t.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},n.prototype.calcSpringForces=function(){for(var r=this.getAllEdges(),l,s=0;s<r.length;s++)l=r[s],this.calcSpringForce(l,l.idealLength)},n.prototype.calcRepulsionForces=function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,s,c,v,L,p=this.getAllNodes(),A;if(this.useFRGridVariant)for(this.totalIterations%t.GRID_CALCULATION_CHECK_PERIOD==1&&r&&this.updateGrid(),A=new Set,s=0;s<p.length;s++)v=p[s],this.calculateRepulsionForceOfANode(v,A,r,l),A.add(v);else for(s=0;s<p.length;s++)for(v=p[s],c=s+1;c<p.length;c++)L=p[c],v.getOwner()==L.getOwner()&&this.calcRepulsionForce(v,L)},n.prototype.calcGravitationalForces=function(){for(var r,l=this.getAllNodesToApplyGravitation(),s=0;s<l.length;s++)r=l[s],this.calcGravitationalForce(r)},n.prototype.moveNodes=function(){for(var r=this.getAllNodes(),l,s=0;s<r.length;s++)l=r[s],l.move()},n.prototype.calcSpringForce=function(r,l){var s=r.getSource(),c=r.getTarget(),v,L,p,A;if(this.uniformLeafNodeSizes&&s.getChild()==null&&c.getChild()==null)r.updateLengthSimple();else if(r.updateLength(),r.isOverlapingSourceAndTarget)return;v=r.getLength(),v!=0&&(L=this.springConstant*(v-l),p=L*(r.lengthX/v),A=L*(r.lengthY/v),s.springForceX+=p,s.springForceY+=A,c.springForceX-=p,c.springForceY-=A)},n.prototype.calcRepulsionForce=function(r,l){var s=r.getRect(),c=l.getRect(),v=new Array(2),L=new Array(4),p,A,E,O,a,u,f;if(s.intersects(c)){h.calcSeparationAmount(s,c,v,t.DEFAULT_EDGE_LENGTH/2),u=2*v[0],f=2*v[1];var y=r.noOfChildren*l.noOfChildren/(r.noOfChildren+l.noOfChildren);r.repulsionForceX-=y*u,r.repulsionForceY-=y*f,l.repulsionForceX+=y*u,l.repulsionForceY+=y*f}else this.uniformLeafNodeSizes&&r.getChild()==null&&l.getChild()==null?(p=c.getCenterX()-s.getCenterX(),A=c.getCenterY()-s.getCenterY()):(h.getIntersection(s,c,L),p=L[2]-L[0],A=L[3]-L[1]),Math.abs(p)<t.MIN_REPULSION_DIST&&(p=g.sign(p)*t.MIN_REPULSION_DIST),Math.abs(A)<t.MIN_REPULSION_DIST&&(A=g.sign(A)*t.MIN_REPULSION_DIST),E=p*p+A*A,O=Math.sqrt(E),a=this.repulsionConstant*r.noOfChildren*l.noOfChildren/E,u=a*p/O,f=a*A/O,r.repulsionForceX-=u,r.repulsionForceY-=f,l.repulsionForceX+=u,l.repulsionForceY+=f},n.prototype.calcGravitationalForce=function(r){var l,s,c,v,L,p,A,E;l=r.getOwner(),s=(l.getRight()+l.getLeft())/2,c=(l.getTop()+l.getBottom())/2,v=r.getCenterX()-s,L=r.getCenterY()-c,p=Math.abs(v)+r.getWidth()/2,A=Math.abs(L)+r.getHeight()/2,r.getOwner()==this.graphManager.getRoot()?(E=l.getEstimatedSize()*this.gravityRangeFactor,(p>E||A>E)&&(r.gravitationForceX=-this.gravityConstant*v,r.gravitationForceY=-this.gravityConstant*L)):(E=l.getEstimatedSize()*this.compoundGravityRangeFactor,(p>E||A>E)&&(r.gravitationForceX=-this.gravityConstant*v*this.compoundGravityConstant,r.gravitationForceY=-this.gravityConstant*L*this.compoundGravityConstant))},n.prototype.isConverged=function(){var r,l=!1;return this.totalIterations>this.maxIterations/3&&(l=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),r=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,r||l},n.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},n.prototype.calcNoOfChildrenForAllNodes=function(){for(var r,l=this.graphManager.getAllNodes(),s=0;s<l.length;s++)r=l[s],r.noOfChildren=r.getNoOfChildren()},n.prototype.calcGrid=function(r){var l=0,s=0;l=parseInt(Math.ceil((r.getRight()-r.getLeft())/this.repulsionRange)),s=parseInt(Math.ceil((r.getBottom()-r.getTop())/this.repulsionRange));for(var c=new Array(l),v=0;v<l;v++)c[v]=new Array(s);for(var v=0;v<l;v++)for(var L=0;L<s;L++)c[v][L]=new Array;return c},n.prototype.addNodeToGrid=function(r,l,s){var c=0,v=0,L=0,p=0;c=parseInt(Math.floor((r.getRect().x-l)/this.repulsionRange)),v=parseInt(Math.floor((r.getRect().width+r.getRect().x-l)/this.repulsionRange)),L=parseInt(Math.floor((r.getRect().y-s)/this.repulsionRange)),p=parseInt(Math.floor((r.getRect().height+r.getRect().y-s)/this.repulsionRange));for(var A=c;A<=v;A++)for(var E=L;E<=p;E++)this.grid[A][E].push(r),r.setGridCoordinates(c,v,L,p)},n.prototype.updateGrid=function(){var r,l,s=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),r=0;r<s.length;r++)l=s[r],this.addNodeToGrid(l,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},n.prototype.calculateRepulsionForceOfANode=function(r,l,s,c){if(this.totalIterations%t.GRID_CALCULATION_CHECK_PERIOD==1&&s||c){var v=new Set;r.surrounding=new Array;for(var L,p=this.grid,A=r.startX-1;A<r.finishX+2;A++)for(var E=r.startY-1;E<r.finishY+2;E++)if(!(A<0||E<0||A>=p.length||E>=p[0].length)){for(var O=0;O<p[A][E].length;O++)if(L=p[A][E][O],!(r.getOwner()!=L.getOwner()||r==L)&&!l.has(L)&&!v.has(L)){var a=Math.abs(r.getCenterX()-L.getCenterX())-(r.getWidth()/2+L.getWidth()/2),u=Math.abs(r.getCenterY()-L.getCenterY())-(r.getHeight()/2+L.getHeight()/2);a<=this.repulsionRange&&u<=this.repulsionRange&&v.add(L)}}r.surrounding=[].concat(o(v))}for(A=0;A<r.surrounding.length;A++)this.calcRepulsionForce(r,r.surrounding[A])},n.prototype.calcRepulsionRange=function(){return 0},C.exports=n}),(function(C,R,T){var o=T(1),e=T(7);function t(h,g,n){o.call(this,h,g,n),this.idealLength=e.DEFAULT_EDGE_LENGTH}t.prototype=Object.create(o.prototype);for(var i in o)t[i]=o[i];C.exports=t}),(function(C,R,T){var o=T(3);function e(i,h,g,n){o.call(this,i,h,g,n),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}e.prototype=Object.create(o.prototype);for(var t in o)e[t]=o[t];e.prototype.setGridCoordinates=function(i,h,g,n){this.startX=i,this.finishX=h,this.startY=g,this.finishY=n},C.exports=e}),(function(C,R,T){function o(e,t){this.width=0,this.height=0,e!==null&&t!==null&&(this.height=t,this.width=e)}o.prototype.getWidth=function(){return this.width},o.prototype.setWidth=function(e){this.width=e},o.prototype.getHeight=function(){return this.height},o.prototype.setHeight=function(e){this.height=e},C.exports=o}),(function(C,R,T){var o=T(14);function e(){this.map={},this.keys=[]}e.prototype.put=function(t,i){var h=o.createID(t);this.contains(h)||(this.map[h]=i,this.keys.push(t))},e.prototype.contains=function(t){return o.createID(t),this.map[t]!=null},e.prototype.get=function(t){var i=o.createID(t);return this.map[i]},e.prototype.keySet=function(){return this.keys},C.exports=e}),(function(C,R,T){var o=T(14);function e(){this.set={}}e.prototype.add=function(t){var i=o.createID(t);this.contains(i)||(this.set[i]=t)},e.prototype.remove=function(t){delete this.set[o.createID(t)]},e.prototype.clear=function(){this.set={}},e.prototype.contains=function(t){return this.set[o.createID(t)]==t},e.prototype.isEmpty=function(){return this.size()===0},e.prototype.size=function(){return Object.keys(this.set).length},e.prototype.addAllTo=function(t){for(var i=Object.keys(this.set),h=i.length,g=0;g<h;g++)t.push(this.set[i[g]])},e.prototype.size=function(){return Object.keys(this.set).length},e.prototype.addAll=function(t){for(var i=t.length,h=0;h<i;h++){var g=t[h];this.add(g)}},C.exports=e}),(function(C,R,T){var o=(function(){function h(g,n){for(var d=0;d<n.length;d++){var r=n[d];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(g,r.key,r)}}return function(g,n,d){return n&&h(g.prototype,n),d&&h(g,d),g}})();function e(h,g){if(!(h instanceof g))throw new TypeError(\"Cannot call a class as a function\")}var t=T(11),i=(function(){function h(g,n){e(this,h),(n!==null||n!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var d=void 0;g instanceof t?d=g.size():d=g.length,this._quicksort(g,0,d-1)}return o(h,[{key:\"_quicksort\",value:function(n,d,r){if(d<r){var l=this._partition(n,d,r);this._quicksort(n,d,l),this._quicksort(n,l+1,r)}}},{key:\"_partition\",value:function(n,d,r){for(var l=this._get(n,d),s=d,c=r;;){for(;this.compareFunction(l,this._get(n,c));)c--;for(;this.compareFunction(this._get(n,s),l);)s++;if(s<c)this._swap(n,s,c),s++,c--;else return c}}},{key:\"_get\",value:function(n,d){return n instanceof t?n.get_object_at(d):n[d]}},{key:\"_set\",value:function(n,d,r){n instanceof t?n.set_object_at(d,r):n[d]=r}},{key:\"_swap\",value:function(n,d,r){var l=this._get(n,d);this._set(n,d,this._get(n,r)),this._set(n,r,l)}},{key:\"_defaultCompareFunction\",value:function(n,d){return d>n}}]),h})();C.exports=i}),(function(C,R,T){var o=(function(){function i(h,g){for(var n=0;n<g.length;n++){var d=g[n];d.enumerable=d.enumerable||!1,d.configurable=!0,\"value\"in d&&(d.writable=!0),Object.defineProperty(h,d.key,d)}}return function(h,g,n){return g&&i(h.prototype,g),n&&i(h,n),h}})();function e(i,h){if(!(i instanceof h))throw new TypeError(\"Cannot call a class as a function\")}var t=(function(){function i(h,g){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;e(this,i),this.sequence1=h,this.sequence2=g,this.match_score=n,this.mismatch_penalty=d,this.gap_penalty=r,this.iMax=h.length+1,this.jMax=g.length+1,this.grid=new Array(this.iMax);for(var l=0;l<this.iMax;l++){this.grid[l]=new Array(this.jMax);for(var s=0;s<this.jMax;s++)this.grid[l][s]=0}this.tracebackGrid=new Array(this.iMax);for(var c=0;c<this.iMax;c++){this.tracebackGrid[c]=new Array(this.jMax);for(var v=0;v<this.jMax;v++)this.tracebackGrid[c][v]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(i,[{key:\"getScore\",value:function(){return this.score}},{key:\"getAlignments\",value:function(){return this.alignments}},{key:\"computeGrids\",value:function(){for(var g=1;g<this.jMax;g++)this.grid[0][g]=this.grid[0][g-1]+this.gap_penalty,this.tracebackGrid[0][g]=[!1,!1,!0];for(var n=1;n<this.iMax;n++)this.grid[n][0]=this.grid[n-1][0]+this.gap_penalty,this.tracebackGrid[n][0]=[!1,!0,!1];for(var d=1;d<this.iMax;d++)for(var r=1;r<this.jMax;r++){var l=void 0;this.sequence1[d-1]===this.sequence2[r-1]?l=this.grid[d-1][r-1]+this.match_score:l=this.grid[d-1][r-1]+this.mismatch_penalty;var s=this.grid[d-1][r]+this.gap_penalty,c=this.grid[d][r-1]+this.gap_penalty,v=[l,s,c],L=this.arrayAllMaxIndexes(v);this.grid[d][r]=v[L[0]],this.tracebackGrid[d][r]=[L.includes(0),L.includes(1),L.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]}},{key:\"alignmentTraceback\",value:function(){var g=[];for(g.push({pos:[this.sequence1.length,this.sequence2.length],seq1:\"\",seq2:\"\"});g[0];){var n=g[0],d=this.tracebackGrid[n.pos[0]][n.pos[1]];d[0]&&g.push({pos:[n.pos[0]-1,n.pos[1]-1],seq1:this.sequence1[n.pos[0]-1]+n.seq1,seq2:this.sequence2[n.pos[1]-1]+n.seq2}),d[1]&&g.push({pos:[n.pos[0]-1,n.pos[1]],seq1:this.sequence1[n.pos[0]-1]+n.seq1,seq2:\"-\"+n.seq2}),d[2]&&g.push({pos:[n.pos[0],n.pos[1]-1],seq1:\"-\"+n.seq1,seq2:this.sequence2[n.pos[1]-1]+n.seq2}),n.pos[0]===0&&n.pos[1]===0&&this.alignments.push({sequence1:n.seq1,sequence2:n.seq2}),g.shift()}return this.alignments}},{key:\"getAllIndexes\",value:function(g,n){for(var d=[],r=-1;(r=g.indexOf(n,r+1))!==-1;)d.push(r);return d}},{key:\"arrayAllMaxIndexes\",value:function(g){return this.getAllIndexes(g,Math.max.apply(null,g))}}]),i})();C.exports=t}),(function(C,R,T){var o=function(){};o.FDLayout=T(18),o.FDLayoutConstants=T(7),o.FDLayoutEdge=T(19),o.FDLayoutNode=T(20),o.DimensionD=T(21),o.HashMap=T(22),o.HashSet=T(23),o.IGeometry=T(8),o.IMath=T(9),o.Integer=T(10),o.Point=T(12),o.PointD=T(4),o.RandomSeed=T(16),o.RectangleD=T(13),o.Transform=T(17),o.UniqueIDGeneretor=T(14),o.Quicksort=T(24),o.LinkedList=T(11),o.LGraphObject=T(2),o.LGraph=T(5),o.LEdge=T(1),o.LGraphManager=T(6),o.LNode=T(3),o.Layout=T(15),o.LayoutConstants=T(0),o.NeedlemanWunsch=T(25),C.exports=o}),(function(C,R,T){function o(){this.listeners=[]}var e=o.prototype;e.addListener=function(t,i){this.listeners.push({event:t,callback:i})},e.removeListener=function(t,i){for(var h=this.listeners.length;h>=0;h--){var g=this.listeners[h];g.event===t&&g.callback===i&&this.listeners.splice(h,1)}},e.emit=function(t,i){for(var h=0;h<this.listeners.length;h++){var g=this.listeners[h];t===g.event&&g.callback(i)}},C.exports=o})])})})($)),$.exports}var nt=k.exports,j;function ot(){return j||(j=1,(function(b,B){(function(R,T){b.exports=T(it())})(nt,function(C){return(function(R){var T={};function o(e){if(T[e])return T[e].exports;var t=T[e]={i:e,l:!1,exports:{}};return R[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=R,o.c=T,o.i=function(e){return e},o.d=function(e,t,i){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,\"a\",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p=\"\",o(o.s=7)})([(function(R,T){R.exports=C}),(function(R,T,o){var e=o(0).FDLayoutConstants;function t(){}for(var i in e)t[i]=e[i];t.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,t.DEFAULT_RADIAL_SEPARATION=e.DEFAULT_EDGE_LENGTH,t.DEFAULT_COMPONENT_SEPERATION=60,t.TILE=!0,t.TILING_PADDING_VERTICAL=10,t.TILING_PADDING_HORIZONTAL=10,t.TREE_REDUCTION_ON_INCREMENTAL=!1,R.exports=t}),(function(R,T,o){var e=o(0).FDLayoutEdge;function t(h,g,n){e.call(this,h,g,n)}t.prototype=Object.create(e.prototype);for(var i in e)t[i]=e[i];R.exports=t}),(function(R,T,o){var e=o(0).LGraph;function t(h,g,n){e.call(this,h,g,n)}t.prototype=Object.create(e.prototype);for(var i in e)t[i]=e[i];R.exports=t}),(function(R,T,o){var e=o(0).LGraphManager;function t(h){e.call(this,h)}t.prototype=Object.create(e.prototype);for(var i in e)t[i]=e[i];R.exports=t}),(function(R,T,o){var e=o(0).FDLayoutNode,t=o(0).IMath;function i(g,n,d,r){e.call(this,g,n,d,r)}i.prototype=Object.create(e.prototype);for(var h in e)i[h]=e[h];i.prototype.move=function(){var g=this.graphManager.getLayout();this.displacementX=g.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=g.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>g.coolingFactor*g.maxNodeDisplacement&&(this.displacementX=g.coolingFactor*g.maxNodeDisplacement*t.sign(this.displacementX)),Math.abs(this.displacementY)>g.coolingFactor*g.maxNodeDisplacement&&(this.displacementY=g.coolingFactor*g.maxNodeDisplacement*t.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),g.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},i.prototype.propogateDisplacementToChildren=function(g,n){for(var d=this.getChild().getNodes(),r,l=0;l<d.length;l++)r=d[l],r.getChild()==null?(r.moveBy(g,n),r.displacementX+=g,r.displacementY+=n):r.propogateDisplacementToChildren(g,n)},i.prototype.setPred1=function(g){this.pred1=g},i.prototype.getPred1=function(){return pred1},i.prototype.getPred2=function(){return pred2},i.prototype.setNext=function(g){this.next=g},i.prototype.getNext=function(){return next},i.prototype.setProcessed=function(g){this.processed=g},i.prototype.isProcessed=function(){return processed},R.exports=i}),(function(R,T,o){var e=o(0).FDLayout,t=o(4),i=o(3),h=o(5),g=o(2),n=o(1),d=o(0).FDLayoutConstants,r=o(0).LayoutConstants,l=o(0).Point,s=o(0).PointD,c=o(0).Layout,v=o(0).Integer,L=o(0).IGeometry,p=o(0).LGraph,A=o(0).Transform;function E(){e.call(this),this.toBeTiled={}}E.prototype=Object.create(e.prototype);for(var O in e)E[O]=e[O];E.prototype.newGraphManager=function(){var a=new t(this);return this.graphManager=a,a},E.prototype.newGraph=function(a){return new i(null,this.graphManager,a)},E.prototype.newNode=function(a){return new h(this.graphManager,a)},E.prototype.newEdge=function(a){return new g(null,null,a)},E.prototype.initParameters=function(){e.prototype.initParameters.call(this,arguments),this.isSubLayout||(n.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=n.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=n.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=d.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=d.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=d.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=d.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=d.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=d.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/d.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=d.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},E.prototype.layout=function(){var a=r.DEFAULT_CREATE_BENDS_AS_NEEDED;return a&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},E.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(n.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var u=new Set(this.getAllNodes()),f=this.nodesWithGravity.filter(function(N){return u.has(N)});this.graphManager.setAllNodesToApplyGravitation(f)}}else{var a=this.getFlatForest();if(a.length>0)this.positionNodesRadially(a);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var u=new Set(this.getAllNodes()),f=this.nodesWithGravity.filter(function(y){return u.has(y)});this.graphManager.setAllNodesToApplyGravitation(f),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},E.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%d.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var a=new Set(this.getAllNodes()),u=this.nodesWithGravity.filter(function(D){return a.has(D)});this.graphManager.setAllNodesToApplyGravitation(u),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=d.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=d.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var f=!this.isTreeGrowing&&!this.isGrowthFinished,y=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(f,y),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},E.prototype.getPositionsData=function(){for(var a=this.graphManager.getAllNodes(),u={},f=0;f<a.length;f++){var y=a[f].rect,D=a[f].id;u[D]={id:D,x:y.getCenterX(),y:y.getCenterY(),w:y.width,h:y.height}}return u},E.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var a=!1;if(d.ANIMATE===\"during\")this.emit(\"layoutstarted\");else{for(;!a;)a=this.tick();this.graphManager.updateBounds()}},E.prototype.calculateNodesToApplyGravitationTo=function(){var a=[],u,f=this.graphManager.getGraphs(),y=f.length,D;for(D=0;D<y;D++)u=f[D],u.updateConnected(),u.isConnected||(a=a.concat(u.getNodes()));return a},E.prototype.createBendpoints=function(){var a=[];a=a.concat(this.graphManager.getAllEdges());var u=new Set,f;for(f=0;f<a.length;f++){var y=a[f];if(!u.has(y)){var D=y.getSource(),N=y.getTarget();if(D==N)y.getBendpoints().push(new s),y.getBendpoints().push(new s),this.createDummyNodesForBendpoints(y),u.add(y);else{var I=[];if(I=I.concat(D.getEdgeListToNode(N)),I=I.concat(N.getEdgeListToNode(D)),!u.has(I[0])){if(I.length>1){var m;for(m=0;m<I.length;m++){var M=I[m];M.getBendpoints().push(new s),this.createDummyNodesForBendpoints(M)}}I.forEach(function(F){u.add(F)})}}}if(u.size==a.length)break}},E.prototype.positionNodesRadially=function(a){for(var u=new l(0,0),f=Math.ceil(Math.sqrt(a.length)),y=0,D=0,N=0,I=new s(0,0),m=0;m<a.length;m++){m%f==0&&(N=0,D=y,m!=0&&(D+=n.DEFAULT_COMPONENT_SEPERATION),y=0);var M=a[m],F=c.findCenterOfTree(M);u.x=N,u.y=D,I=E.radialLayout(M,F,u),I.y>y&&(y=Math.floor(I.y)),N=Math.floor(I.x+n.DEFAULT_COMPONENT_SEPERATION)}this.transform(new s(r.WORLD_CENTER_X-I.x/2,r.WORLD_CENTER_Y-I.y/2))},E.radialLayout=function(a,u,f){var y=Math.max(this.maxDiagonalInTree(a),n.DEFAULT_RADIAL_SEPARATION);E.branchRadialLayout(u,null,0,359,0,y);var D=p.calculateBounds(a),N=new A;N.setDeviceOrgX(D.getMinX()),N.setDeviceOrgY(D.getMinY()),N.setWorldOrgX(f.x),N.setWorldOrgY(f.y);for(var I=0;I<a.length;I++){var m=a[I];m.transform(N)}var M=new s(D.getMaxX(),D.getMaxY());return N.inverseTransformPoint(M)},E.branchRadialLayout=function(a,u,f,y,D,N){var I=(y-f+1)/2;I<0&&(I+=180);var m=(I+f)%360,M=m*L.TWO_PI/360,F=D*Math.cos(M),P=D*Math.sin(M);a.setCenter(F,P);var w=[];w=w.concat(a.getEdges());var G=w.length;u!=null&&G--;for(var x=0,S=w.length,U,Y=a.getEdgesBetween(u);Y.length>1;){var _=Y[0];Y.splice(0,1);var X=w.indexOf(_);X>=0&&w.splice(X,1),S--,G--}u!=null?U=(w.indexOf(Y[0])+1)%S:U=0;for(var H=Math.abs(y-f)/G,W=U;x!=G;W=++W%S){var Z=w[W].getOtherEnd(a);if(Z!=u){var Q=(f+x*H)%360,q=(Q+H)%360;E.branchRadialLayout(Z,a,Q,q,D+N,N),x++}}},E.maxDiagonalInTree=function(a){for(var u=v.MIN_VALUE,f=0;f<a.length;f++){var y=a[f],D=y.getDiagonal();D>u&&(u=D)}return u},E.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},E.prototype.groupZeroDegreeMembers=function(){var a=this,u={};this.memberGroups={},this.idToDummyNode={};for(var f=[],y=this.graphManager.getAllNodes(),D=0;D<y.length;D++){var N=y[D],I=N.getParent();this.getNodeDegreeWithChildren(N)===0&&(I.id==null||!this.getToBeTiled(I))&&f.push(N)}for(var D=0;D<f.length;D++){var N=f[D],m=N.getParent().id;typeof u[m]>\"u\"&&(u[m]=[]),u[m]=u[m].concat(N)}Object.keys(u).forEach(function(M){if(u[M].length>1){var F=\"DummyCompound_\"+M;a.memberGroups[F]=u[M];var P=u[M][0].getParent(),w=new h(a.graphManager);w.id=F,w.paddingLeft=P.paddingLeft||0,w.paddingRight=P.paddingRight||0,w.paddingBottom=P.paddingBottom||0,w.paddingTop=P.paddingTop||0,a.idToDummyNode[F]=w;var G=a.getGraphManager().add(a.newGraph(),w),x=P.getChild();x.add(w);for(var S=0;S<u[M].length;S++){var U=u[M][S];x.remove(U),G.add(U)}}})},E.prototype.clearCompounds=function(){var a={},u={};this.performDFSOnCompounds();for(var f=0;f<this.compoundOrder.length;f++)u[this.compoundOrder[f].id]=this.compoundOrder[f],a[this.compoundOrder[f].id]=[].concat(this.compoundOrder[f].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[f].getChild()),this.compoundOrder[f].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(a,u)},E.prototype.clearZeroDegreeMembers=function(){var a=this,u=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(f){var y=a.idToDummyNode[f];u[f]=a.tileNodes(a.memberGroups[f],y.paddingLeft+y.paddingRight),y.rect.width=u[f].width,y.rect.height=u[f].height})},E.prototype.repopulateCompounds=function(){for(var a=this.compoundOrder.length-1;a>=0;a--){var u=this.compoundOrder[a],f=u.id,y=u.paddingLeft,D=u.paddingTop;this.adjustLocations(this.tiledMemberPack[f],u.rect.x,u.rect.y,y,D)}},E.prototype.repopulateZeroDegreeMembers=function(){var a=this,u=this.tiledZeroDegreePack;Object.keys(u).forEach(function(f){var y=a.idToDummyNode[f],D=y.paddingLeft,N=y.paddingTop;a.adjustLocations(u[f],y.rect.x,y.rect.y,D,N)})},E.prototype.getToBeTiled=function(a){var u=a.id;if(this.toBeTiled[u]!=null)return this.toBeTiled[u];var f=a.getChild();if(f==null)return this.toBeTiled[u]=!1,!1;for(var y=f.getNodes(),D=0;D<y.length;D++){var N=y[D];if(this.getNodeDegree(N)>0)return this.toBeTiled[u]=!1,!1;if(N.getChild()==null){this.toBeTiled[N.id]=!1;continue}if(!this.getToBeTiled(N))return this.toBeTiled[u]=!1,!1}return this.toBeTiled[u]=!0,!0},E.prototype.getNodeDegree=function(a){a.id;for(var u=a.getEdges(),f=0,y=0;y<u.length;y++){var D=u[y];D.getSource().id!==D.getTarget().id&&(f=f+1)}return f},E.prototype.getNodeDegreeWithChildren=function(a){var u=this.getNodeDegree(a);if(a.getChild()==null)return u;for(var f=a.getChild().getNodes(),y=0;y<f.length;y++){var D=f[y];u+=this.getNodeDegreeWithChildren(D)}return u},E.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},E.prototype.fillCompexOrderByDFS=function(a){for(var u=0;u<a.length;u++){var f=a[u];f.getChild()!=null&&this.fillCompexOrderByDFS(f.getChild().getNodes()),this.getToBeTiled(f)&&this.compoundOrder.push(f)}},E.prototype.adjustLocations=function(a,u,f,y,D){u+=y,f+=D;for(var N=u,I=0;I<a.rows.length;I++){var m=a.rows[I];u=N;for(var M=0,F=0;F<m.length;F++){var P=m[F];P.rect.x=u,P.rect.y=f,u+=P.rect.width+a.horizontalPadding,P.rect.height>M&&(M=P.rect.height)}f+=M+a.verticalPadding}},E.prototype.tileCompoundMembers=function(a,u){var f=this;this.tiledMemberPack=[],Object.keys(a).forEach(function(y){var D=u[y];f.tiledMemberPack[y]=f.tileNodes(a[y],D.paddingLeft+D.paddingRight),D.rect.width=f.tiledMemberPack[y].width,D.rect.height=f.tiledMemberPack[y].height})},E.prototype.tileNodes=function(a,u){var f=n.TILING_PADDING_VERTICAL,y=n.TILING_PADDING_HORIZONTAL,D={rows:[],rowWidth:[],rowHeight:[],width:0,height:u,verticalPadding:f,horizontalPadding:y};a.sort(function(m,M){return m.rect.width*m.rect.height>M.rect.width*M.rect.height?-1:m.rect.width*m.rect.height<M.rect.width*M.rect.height?1:0});for(var N=0;N<a.length;N++){var I=a[N];D.rows.length==0?this.insertNodeToRow(D,I,0,u):this.canAddHorizontal(D,I.rect.width,I.rect.height)?this.insertNodeToRow(D,I,this.getShortestRowIndex(D),u):this.insertNodeToRow(D,I,D.rows.length,u),this.shiftToLastRow(D)}return D},E.prototype.insertNodeToRow=function(a,u,f,y){var D=y;if(f==a.rows.length){var N=[];a.rows.push(N),a.rowWidth.push(D),a.rowHeight.push(0)}var I=a.rowWidth[f]+u.rect.width;a.rows[f].length>0&&(I+=a.horizontalPadding),a.rowWidth[f]=I,a.width<I&&(a.width=I);var m=u.rect.height;f>0&&(m+=a.verticalPadding);var M=0;m>a.rowHeight[f]&&(M=a.rowHeight[f],a.rowHeight[f]=m,M=a.rowHeight[f]-M),a.height+=M,a.rows[f].push(u)},E.prototype.getShortestRowIndex=function(a){for(var u=-1,f=Number.MAX_VALUE,y=0;y<a.rows.length;y++)a.rowWidth[y]<f&&(u=y,f=a.rowWidth[y]);return u},E.prototype.getLongestRowIndex=function(a){for(var u=-1,f=Number.MIN_VALUE,y=0;y<a.rows.length;y++)a.rowWidth[y]>f&&(u=y,f=a.rowWidth[y]);return u},E.prototype.canAddHorizontal=function(a,u,f){var y=this.getShortestRowIndex(a);if(y<0)return!0;var D=a.rowWidth[y];if(D+a.horizontalPadding+u<=a.width)return!0;var N=0;a.rowHeight[y]<f&&y>0&&(N=f+a.verticalPadding-a.rowHeight[y]);var I;a.width-D>=u+a.horizontalPadding?I=(a.height+N)/(D+u+a.horizontalPadding):I=(a.height+N)/a.width,N=f+a.verticalPadding;var m;return a.width<u?m=(a.height+N)/u:m=(a.height+N)/a.width,m<1&&(m=1/m),I<1&&(I=1/I),I<m},E.prototype.shiftToLastRow=function(a){var u=this.getLongestRowIndex(a),f=a.rowWidth.length-1,y=a.rows[u],D=y[y.length-1],N=D.width+a.horizontalPadding;if(a.width-a.rowWidth[f]>N&&u!=f){y.splice(-1,1),a.rows[f].push(D),a.rowWidth[u]=a.rowWidth[u]-N,a.rowWidth[f]=a.rowWidth[f]+N,a.width=a.rowWidth[instance.getLongestRowIndex(a)];for(var I=Number.MIN_VALUE,m=0;m<y.length;m++)y[m].height>I&&(I=y[m].height);u>0&&(I+=a.verticalPadding);var M=a.rowHeight[u]+a.rowHeight[f];a.rowHeight[u]=I,a.rowHeight[f]<D.height+a.verticalPadding&&(a.rowHeight[f]=D.height+a.verticalPadding);var F=a.rowHeight[u]+a.rowHeight[f];a.height+=F-M,this.shiftToLastRow(a)}},E.prototype.tilingPreLayout=function(){n.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},E.prototype.tilingPostLayout=function(){n.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},E.prototype.reduceTrees=function(){for(var a=[],u=!0,f;u;){var y=this.graphManager.getAllNodes(),D=[];u=!1;for(var N=0;N<y.length;N++)f=y[N],f.getEdges().length==1&&!f.getEdges()[0].isInterGraph&&f.getChild()==null&&(D.push([f,f.getEdges()[0],f.getOwner()]),u=!0);if(u==!0){for(var I=[],m=0;m<D.length;m++)D[m][0].getEdges().length==1&&(I.push(D[m]),D[m][0].getOwner().remove(D[m][0]));a.push(I),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=a},E.prototype.growTree=function(a){for(var u=a.length,f=a[u-1],y,D=0;D<f.length;D++)y=f[D],this.findPlaceforPrunedNode(y),y[2].add(y[0]),y[2].add(y[1],y[1].source,y[1].target);a.splice(a.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},E.prototype.findPlaceforPrunedNode=function(a){var u,f,y=a[0];y==a[1].source?f=a[1].target:f=a[1].source;var D=f.startX,N=f.finishX,I=f.startY,m=f.finishY,M=0,F=0,P=0,w=0,G=[M,P,F,w];if(I>0)for(var x=D;x<=N;x++)G[0]+=this.grid[x][I-1].length+this.grid[x][I].length-1;if(N<this.grid.length-1)for(var x=I;x<=m;x++)G[1]+=this.grid[N+1][x].length+this.grid[N][x].length-1;if(m<this.grid[0].length-1)for(var x=D;x<=N;x++)G[2]+=this.grid[x][m+1].length+this.grid[x][m].length-1;if(D>0)for(var x=I;x<=m;x++)G[3]+=this.grid[D-1][x].length+this.grid[D][x].length-1;for(var S=v.MAX_VALUE,U,Y,_=0;_<G.length;_++)G[_]<S?(S=G[_],U=1,Y=_):G[_]==S&&U++;if(U==3&&S==0)G[0]==0&&G[1]==0&&G[2]==0?u=1:G[0]==0&&G[1]==0&&G[3]==0?u=0:G[0]==0&&G[2]==0&&G[3]==0?u=3:G[1]==0&&G[2]==0&&G[3]==0&&(u=2);else if(U==2&&S==0){var X=Math.floor(Math.random()*2);G[0]==0&&G[1]==0?X==0?u=0:u=1:G[0]==0&&G[2]==0?X==0?u=0:u=2:G[0]==0&&G[3]==0?X==0?u=0:u=3:G[1]==0&&G[2]==0?X==0?u=1:u=2:G[1]==0&&G[3]==0?X==0?u=1:u=3:X==0?u=2:u=3}else if(U==4&&S==0){var X=Math.floor(Math.random()*4);u=X}else u=Y;u==0?y.setCenter(f.getCenterX(),f.getCenterY()-f.getHeight()/2-d.DEFAULT_EDGE_LENGTH-y.getHeight()/2):u==1?y.setCenter(f.getCenterX()+f.getWidth()/2+d.DEFAULT_EDGE_LENGTH+y.getWidth()/2,f.getCenterY()):u==2?y.setCenter(f.getCenterX(),f.getCenterY()+f.getHeight()/2+d.DEFAULT_EDGE_LENGTH+y.getHeight()/2):y.setCenter(f.getCenterX()-f.getWidth()/2-d.DEFAULT_EDGE_LENGTH-y.getWidth()/2,f.getCenterY())},R.exports=E}),(function(R,T,o){var e={};e.layoutBase=o(0),e.CoSEConstants=o(1),e.CoSEEdge=o(2),e.CoSEGraph=o(3),e.CoSEGraphManager=o(4),e.CoSELayout=o(6),e.CoSENode=o(5),R.exports=e})])})})(k)),k.exports}var at=V.exports,z;function st(){return z||(z=1,(function(b,B){(function(R,T){b.exports=T(ot())})(at,function(C){return(function(R){var T={};function o(e){if(T[e])return T[e].exports;var t=T[e]={i:e,l:!1,exports:{}};return R[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=R,o.c=T,o.i=function(e){return e},o.d=function(e,t,i){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,\"a\",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p=\"\",o(o.s=1)})([(function(R,T){R.exports=C}),(function(R,T,o){var e=o(0).layoutBase.LayoutConstants,t=o(0).layoutBase.FDLayoutConstants,i=o(0).CoSEConstants,h=o(0).CoSELayout,g=o(0).CoSENode,n=o(0).layoutBase.PointD,d=o(0).layoutBase.DimensionD,r={ready:function(){},stop:function(){},quality:\"default\",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:\"end\",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function l(L,p){var A={};for(var E in L)A[E]=L[E];for(var E in p)A[E]=p[E];return A}function s(L){this.options=l(r,L),c(this.options)}var c=function(p){p.nodeRepulsion!=null&&(i.DEFAULT_REPULSION_STRENGTH=t.DEFAULT_REPULSION_STRENGTH=p.nodeRepulsion),p.idealEdgeLength!=null&&(i.DEFAULT_EDGE_LENGTH=t.DEFAULT_EDGE_LENGTH=p.idealEdgeLength),p.edgeElasticity!=null&&(i.DEFAULT_SPRING_STRENGTH=t.DEFAULT_SPRING_STRENGTH=p.edgeElasticity),p.nestingFactor!=null&&(i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=t.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=p.nestingFactor),p.gravity!=null&&(i.DEFAULT_GRAVITY_STRENGTH=t.DEFAULT_GRAVITY_STRENGTH=p.gravity),p.numIter!=null&&(i.MAX_ITERATIONS=t.MAX_ITERATIONS=p.numIter),p.gravityRange!=null&&(i.DEFAULT_GRAVITY_RANGE_FACTOR=t.DEFAULT_GRAVITY_RANGE_FACTOR=p.gravityRange),p.gravityCompound!=null&&(i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=t.DEFAULT_COMPOUND_GRAVITY_STRENGTH=p.gravityCompound),p.gravityRangeCompound!=null&&(i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=t.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=p.gravityRangeCompound),p.initialEnergyOnIncremental!=null&&(i.DEFAULT_COOLING_FACTOR_INCREMENTAL=t.DEFAULT_COOLING_FACTOR_INCREMENTAL=p.initialEnergyOnIncremental),p.quality==\"draft\"?e.QUALITY=0:p.quality==\"proof\"?e.QUALITY=2:e.QUALITY=1,i.NODE_DIMENSIONS_INCLUDE_LABELS=t.NODE_DIMENSIONS_INCLUDE_LABELS=e.NODE_DIMENSIONS_INCLUDE_LABELS=p.nodeDimensionsIncludeLabels,i.DEFAULT_INCREMENTAL=t.DEFAULT_INCREMENTAL=e.DEFAULT_INCREMENTAL=!p.randomize,i.ANIMATE=t.ANIMATE=e.ANIMATE=p.animate,i.TILE=p.tile,i.TILING_PADDING_VERTICAL=typeof p.tilingPaddingVertical==\"function\"?p.tilingPaddingVertical.call():p.tilingPaddingVertical,i.TILING_PADDING_HORIZONTAL=typeof p.tilingPaddingHorizontal==\"function\"?p.tilingPaddingHorizontal.call():p.tilingPaddingHorizontal};s.prototype.run=function(){var L,p,A=this.options;this.idToLNode={};var E=this.layout=new h,O=this;O.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:\"layoutstart\",layout:this});var a=E.newGraphManager();this.gm=a;var u=this.options.eles.nodes(),f=this.options.eles.edges();this.root=a.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(u),E);for(var y=0;y<f.length;y++){var D=f[y],N=this.idToLNode[D.data(\"source\")],I=this.idToLNode[D.data(\"target\")];if(N!==I&&N.getEdgesBetween(I).length==0){var m=a.add(E.newEdge(),N,I);m.id=D.id()}}var M=function(w,G){typeof w==\"number\"&&(w=G);var x=w.data(\"id\"),S=O.idToLNode[x];return{x:S.getRect().getCenterX(),y:S.getRect().getCenterY()}},F=function P(){for(var w=function(){A.fit&&A.cy.fit(A.eles,A.padding),L||(L=!0,O.cy.one(\"layoutready\",A.ready),O.cy.trigger({type:\"layoutready\",layout:O}))},G=O.options.refresh,x,S=0;S<G&&!x;S++)x=O.stopped||O.layout.tick();if(x){E.checkLayoutSuccess()&&!E.isSubLayout&&E.doPostLayout(),E.tilingPostLayout&&E.tilingPostLayout(),E.isLayoutFinished=!0,O.options.eles.nodes().positions(M),w(),O.cy.one(\"layoutstop\",O.options.stop),O.cy.trigger({type:\"layoutstop\",layout:O}),p&&cancelAnimationFrame(p),L=!1;return}var U=O.layout.getPositionsData();A.eles.nodes().positions(function(Y,_){if(typeof Y==\"number\"&&(Y=_),!Y.isParent()){for(var X=Y.id(),H=U[X],W=Y;H==null&&(H=U[W.data(\"parent\")]||U[\"DummyCompound_\"+W.data(\"parent\")],U[X]=H,W=W.parent()[0],W!=null););return H!=null?{x:H.x,y:H.y}:{x:Y.position(\"x\"),y:Y.position(\"y\")}}}),w(),p=requestAnimationFrame(P)};return E.addListener(\"layoutstarted\",function(){O.options.animate===\"during\"&&(p=requestAnimationFrame(F))}),E.runLayout(),this.options.animate!==\"during\"&&(O.options.eles.nodes().not(\":parent\").layoutPositions(O,O.options,M),L=!1),this},s.prototype.getTopMostNodes=function(L){for(var p={},A=0;A<L.length;A++)p[L[A].id()]=!0;var E=L.filter(function(O,a){typeof O==\"number\"&&(O=a);for(var u=O.parent()[0];u!=null;){if(p[u.id()])return!1;u=u.parent()[0]}return!0});return E},s.prototype.processChildrenList=function(L,p,A){for(var E=p.length,O=0;O<E;O++){var a=p[O],u=a.children(),f,y=a.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if(a.outerWidth()!=null&&a.outerHeight()!=null?f=L.add(new g(A.graphManager,new n(a.position(\"x\")-y.w/2,a.position(\"y\")-y.h/2),new d(parseFloat(y.w),parseFloat(y.h)))):f=L.add(new g(this.graphManager)),f.id=a.data(\"id\"),f.paddingLeft=parseInt(a.css(\"padding\")),f.paddingTop=parseInt(a.css(\"padding\")),f.paddingRight=parseInt(a.css(\"padding\")),f.paddingBottom=parseInt(a.css(\"padding\")),this.options.nodeDimensionsIncludeLabels&&a.isParent()){var D=a.boundingBox({includeLabels:!0,includeNodes:!1}).w,N=a.boundingBox({includeLabels:!0,includeNodes:!1}).h,I=a.css(\"text-halign\");f.labelWidth=D,f.labelHeight=N,f.labelPos=I}if(this.idToLNode[a.data(\"id\")]=f,isNaN(f.rect.x)&&(f.rect.x=0),isNaN(f.rect.y)&&(f.rect.y=0),u!=null&&u.length>0){var m;m=A.getGraphManager().add(A.newGraph(),f),this.processChildrenList(m,u,A)}}},s.prototype.stop=function(){return this.stopped=!0,this};var v=function(p){p(\"layout\",\"cose-bilkent\",s)};typeof cytoscape<\"u\"&&v(cytoscape),R.exports=v})])})})(V)),V.exports}var J=st();const ht=tt(J),gt=et({__proto__:null,default:ht},[J]);export{gt as c};\n"
  },
  {
    "path": "public/build/assets/cytoscape-panzoom-Del_Rz3u.js",
    "content": "import{g as $r}from\"./_commonjsHelpers-Cpj98o6Y.js\";function Ur(Re,A){for(var Se=0;Se<A.length;Se++){const Q=A[Se];if(typeof Q!=\"string\"&&!Array.isArray(Q)){for(const ae in Q)if(ae!==\"default\"&&!(ae in Re)){const Z=Object.getOwnPropertyDescriptor(Q,ae);Z&&Object.defineProperty(Re,ae,Z.get?Z:{enumerable:!0,get:()=>Q[ae]})}}}return Object.freeze(Object.defineProperty(Re,Symbol.toStringTag,{value:\"Module\"}))}var hn={exports:{}},Wt={exports:{}};var Vr=Wt.exports,Qn;function Xr(){return Qn||(Qn=1,(function(Re){(function(A,Se){Re.exports=A.document?Se(A,!0):function(Q){if(!Q.document)throw new Error(\"jQuery requires a window with a document\");return Se(Q)}})(typeof window<\"u\"?window:Vr,function(A,Se){var Q=[],ae=Object.getPrototypeOf,Z=Q.slice,V=Q.flat?function(e){return Q.flat.call(e)}:function(e){return Q.concat.apply([],e)},ne=Q.push,N=Q.indexOf,De={},Ke=De.toString,he=De.hasOwnProperty,ge=he.toString,Ee=ge.call(Object),j={},H=function(t){return typeof t==\"function\"&&typeof t.nodeType!=\"number\"&&typeof t.item!=\"function\"},qe=function(t){return t!=null&&t===t.window},q=A.document,ye={type:!0,src:!0,nonce:!0,noModule:!0};function lt(e,t,n){n=n||q;var r,o,a=n.createElement(\"script\");if(a.text=e,t)for(r in ye)o=t[r]||t.getAttribute&&t.getAttribute(r),o&&a.setAttribute(r,o);n.head.appendChild(a).parentNode.removeChild(a)}function Oe(e){return e==null?e+\"\":typeof e==\"object\"||typeof e==\"function\"?De[Ke.call(e)]||\"object\":typeof e}var dt=\"3.7.1\",ve=/HTML$/i,i=function(e,t){return new i.fn.init(e,t)};i.fn=i.prototype={jquery:dt,constructor:i,length:0,toArray:function(){return Z.call(this)},get:function(e){return e==null?Z.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=i.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return i.each(this,e)},map:function(e){return this.pushStack(i.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(Z.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(i.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(i.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ne,sort:Q.sort,splice:Q.splice},i.extend=i.fn.extend=function(){var e,t,n,r,o,a,u=arguments[0]||{},c=1,f=arguments.length,d=!1;for(typeof u==\"boolean\"&&(d=u,u=arguments[c]||{},c++),typeof u!=\"object\"&&!H(u)&&(u={}),c===f&&(u=this,c--);c<f;c++)if((e=arguments[c])!=null)for(t in e)r=e[t],!(t===\"__proto__\"||u===r)&&(d&&r&&(i.isPlainObject(r)||(o=Array.isArray(r)))?(n=u[t],o&&!Array.isArray(n)?a=[]:!o&&!i.isPlainObject(n)?a={}:a=n,o=!1,u[t]=i.extend(d,a,r)):r!==void 0&&(u[t]=r));return u},i.extend({expando:\"jQuery\"+(dt+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!e||Ke.call(e)!==\"[object Object]\"?!1:(t=ae(e),t?(n=he.call(t,\"constructor\")&&t.constructor,typeof n==\"function\"&&ge.call(n)===Ee):!0)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){lt(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(Ue(e))for(n=e.length;r<n&&t.call(e[r],r,e[r])!==!1;r++);else for(r in e)if(t.call(e[r],r,e[r])===!1)break;return e},text:function(e){var t,n=\"\",r=0,o=e.nodeType;if(!o)for(;t=e[r++];)n+=i.text(t);return o===1||o===11?e.textContent:o===9?e.documentElement.textContent:o===3||o===4?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return e!=null&&(Ue(Object(e))?i.merge(n,typeof e==\"string\"?[e]:e):ne.call(n,e)),n},inArray:function(e,t,n){return t==null?-1:N.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!ve.test(t||n&&n.nodeName||\"HTML\")},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r,o=[],a=0,u=e.length,c=!n;a<u;a++)r=!t(e[a],a),r!==c&&o.push(e[a]);return o},map:function(e,t,n){var r,o,a=0,u=[];if(Ue(e))for(r=e.length;a<r;a++)o=t(e[a],a,n),o!=null&&u.push(o);else for(a in e)o=t(e[a],a,n),o!=null&&u.push(o);return V(u)},guid:1,support:j}),typeof Symbol==\"function\"&&(i.fn[Symbol.iterator]=Q[Symbol.iterator]),i.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){De[\"[object \"+t+\"]\"]=t.toLowerCase()});function Ue(e){var t=!!e&&\"length\"in e&&e.length,n=Oe(e);return H(e)||qe(e)?!1:n===\"array\"||t===0||typeof t==\"number\"&&t>0&&t-1 in e}function _(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var pt=Q.pop,Bt=Q.sort,$t=Q.splice,U=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",Ve=new RegExp(\"^\"+U+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+U+\"+$\",\"g\");i.contains=function(e,t){var n=t&&t.parentNode;return e===n||!!(n&&n.nodeType===1&&(e.contains?e.contains(n):e.compareDocumentPosition&&e.compareDocumentPosition(n)&16))};var et=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;function Ut(e,t){return t?e===\"\\0\"?\"�\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e}i.escapeSelector=function(e){return(e+\"\").replace(et,Ut)};var me=q,ht=ne;(function(){var e,t,n,r,o,a=ht,u,c,f,d,y,m=i.expando,h=0,x=0,P=It(),W=It(),L=It(),ue=It(),oe=function(s,l){return s===l&&(o=!0),0},Ae=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",Ne=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+U+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",F=\"\\\\[\"+U+\"*(\"+Ne+\")(?:\"+U+\"*([*^$|!~]?=)\"+U+`*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(`+Ne+\"))|)\"+U+\"*\\\\]\",Ye=\":(\"+Ne+`)(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|`+F+\")*)|.*)\\\\)|)\",B=new RegExp(U+\"+\",\"g\"),te=new RegExp(\"^\"+U+\"*,\"+U+\"*\"),Nt=new RegExp(\"^\"+U+\"*([>+~]|\"+U+\")\"+U+\"*\"),un=new RegExp(U+\"|>\"),ke=new RegExp(Ye),kt=new RegExp(\"^\"+Ne+\"$\"),je={ID:new RegExp(\"^#(\"+Ne+\")\"),CLASS:new RegExp(\"^\\\\.(\"+Ne+\")\"),TAG:new RegExp(\"^(\"+Ne+\"|[*])\"),ATTR:new RegExp(\"^\"+F),PSEUDO:new RegExp(\"^\"+Ye),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+U+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+U+\"*(?:([+-]|)\"+U+\"*(\\\\d+)|))\"+U+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+Ae+\")$\",\"i\"),needsContext:new RegExp(\"^\"+U+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+U+\"*((?:-\\\\d)?\\\\d*)\"+U+\"*\\\\)|)(?=[^-]|$)\",\"i\")},We=/^(?:input|select|textarea|button)$/i,Be=/^h\\d$/i,be=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,sn=/[+~]/,ze=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+U+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),Ie=function(s,l){var p=\"0x\"+s.slice(1)-65536;return l||(p<0?String.fromCharCode(p+65536):String.fromCharCode(p>>10|55296,p&1023|56320))},zr=function(){$e()},Ir=_t(function(s){return s.disabled===!0&&_(s,\"fieldset\")},{dir:\"parentNode\",next:\"legend\"});function Rr(){try{return u.activeElement}catch{}}try{a.apply(Q=Z.call(me.childNodes),me.childNodes),Q[me.childNodes.length].nodeType}catch{a={apply:function(l,p){ht.apply(l,Z.call(p))},call:function(l){ht.apply(l,Z.call(arguments,1))}}}function X(s,l,p,g){var v,b,T,w,C,I,k,O=l&&l.ownerDocument,R=l?l.nodeType:9;if(p=p||[],typeof s!=\"string\"||!s||R!==1&&R!==9&&R!==11)return p;if(!g&&($e(l),l=l||u,f)){if(R!==11&&(C=be.exec(s)))if(v=C[1]){if(R===9)if(T=l.getElementById(v)){if(T.id===v)return a.call(p,T),p}else return p;else if(O&&(T=O.getElementById(v))&&X.contains(l,T)&&T.id===v)return a.call(p,T),p}else{if(C[2])return a.apply(p,l.getElementsByTagName(s)),p;if((v=C[3])&&l.getElementsByClassName)return a.apply(p,l.getElementsByClassName(v)),p}if(!ue[s+\" \"]&&(!d||!d.test(s))){if(k=s,O=l,R===1&&(un.test(s)||Nt.test(s))){for(O=sn.test(s)&&fn(l.parentNode)||l,(O!=l||!j.scope)&&((w=l.getAttribute(\"id\"))?w=i.escapeSelector(w):l.setAttribute(\"id\",w=m)),I=jt(s),b=I.length;b--;)I[b]=(w?\"#\"+w:\":scope\")+\" \"+Rt(I[b]);k=I.join(\",\")}try{return a.apply(p,O.querySelectorAll(k)),p}catch{ue(s,!0)}finally{w===m&&l.removeAttribute(\"id\")}}}return Zn(s.replace(Ve,\"$1\"),l,p,g)}function It(){var s=[];function l(p,g){return s.push(p+\" \")>t.cacheLength&&delete l[s.shift()],l[p+\" \"]=g}return l}function we(s){return s[m]=!0,s}function ft(s){var l=u.createElement(\"fieldset\");try{return!!s(l)}catch{return!1}finally{l.parentNode&&l.parentNode.removeChild(l),l=null}}function _r(s){return function(l){return _(l,\"input\")&&l.type===s}}function Fr(s){return function(l){return(_(l,\"input\")||_(l,\"button\"))&&l.type===s}}function Vn(s){return function(l){return\"form\"in l?l.parentNode&&l.disabled===!1?\"label\"in l?\"label\"in l.parentNode?l.parentNode.disabled===s:l.disabled===s:l.isDisabled===s||l.isDisabled!==!s&&Ir(l)===s:l.disabled===s:\"label\"in l?l.disabled===s:!1}}function Je(s){return we(function(l){return l=+l,we(function(p,g){for(var v,b=s([],p.length,l),T=b.length;T--;)p[v=b[T]]&&(p[v]=!(g[v]=p[v]))})})}function fn(s){return s&&typeof s.getElementsByTagName<\"u\"&&s}function $e(s){var l,p=s?s.ownerDocument||s:me;return p==u||p.nodeType!==9||!p.documentElement||(u=p,c=u.documentElement,f=!i.isXMLDoc(u),y=c.matches||c.webkitMatchesSelector||c.msMatchesSelector,c.msMatchesSelector&&me!=u&&(l=u.defaultView)&&l.top!==l&&l.addEventListener(\"unload\",zr),j.getById=ft(function(g){return c.appendChild(g).id=i.expando,!u.getElementsByName||!u.getElementsByName(i.expando).length}),j.disconnectedMatch=ft(function(g){return y.call(g,\"*\")}),j.scope=ft(function(){return u.querySelectorAll(\":scope\")}),j.cssHas=ft(function(){try{return u.querySelector(\":has(*,:jqfake)\"),!1}catch{return!0}}),j.getById?(t.filter.ID=function(g){var v=g.replace(ze,Ie);return function(b){return b.getAttribute(\"id\")===v}},t.find.ID=function(g,v){if(typeof v.getElementById<\"u\"&&f){var b=v.getElementById(g);return b?[b]:[]}}):(t.filter.ID=function(g){var v=g.replace(ze,Ie);return function(b){var T=typeof b.getAttributeNode<\"u\"&&b.getAttributeNode(\"id\");return T&&T.value===v}},t.find.ID=function(g,v){if(typeof v.getElementById<\"u\"&&f){var b,T,w,C=v.getElementById(g);if(C){if(b=C.getAttributeNode(\"id\"),b&&b.value===g)return[C];for(w=v.getElementsByName(g),T=0;C=w[T++];)if(b=C.getAttributeNode(\"id\"),b&&b.value===g)return[C]}return[]}}),t.find.TAG=function(g,v){return typeof v.getElementsByTagName<\"u\"?v.getElementsByTagName(g):v.querySelectorAll(g)},t.find.CLASS=function(g,v){if(typeof v.getElementsByClassName<\"u\"&&f)return v.getElementsByClassName(g)},d=[],ft(function(g){var v;c.appendChild(g).innerHTML=\"<a id='\"+m+\"' href='' disabled='disabled'></a><select id='\"+m+\"-\\r\\\\' disabled='disabled'><option selected=''></option></select>\",g.querySelectorAll(\"[selected]\").length||d.push(\"\\\\[\"+U+\"*(?:value|\"+Ae+\")\"),g.querySelectorAll(\"[id~=\"+m+\"-]\").length||d.push(\"~=\"),g.querySelectorAll(\"a#\"+m+\"+*\").length||d.push(\".#.+[+~]\"),g.querySelectorAll(\":checked\").length||d.push(\":checked\"),v=u.createElement(\"input\"),v.setAttribute(\"type\",\"hidden\"),g.appendChild(v).setAttribute(\"name\",\"D\"),c.appendChild(g).disabled=!0,g.querySelectorAll(\":disabled\").length!==2&&d.push(\":enabled\",\":disabled\"),v=u.createElement(\"input\"),v.setAttribute(\"name\",\"\"),g.appendChild(v),g.querySelectorAll(\"[name='']\").length||d.push(\"\\\\[\"+U+\"*name\"+U+\"*=\"+U+`*(?:''|\"\")`)}),j.cssHas||d.push(\":has\"),d=d.length&&new RegExp(d.join(\"|\")),oe=function(g,v){if(g===v)return o=!0,0;var b=!g.compareDocumentPosition-!v.compareDocumentPosition;return b||(b=(g.ownerDocument||g)==(v.ownerDocument||v)?g.compareDocumentPosition(v):1,b&1||!j.sortDetached&&v.compareDocumentPosition(g)===b?g===u||g.ownerDocument==me&&X.contains(me,g)?-1:v===u||v.ownerDocument==me&&X.contains(me,v)?1:r?N.call(r,g)-N.call(r,v):0:b&4?-1:1)}),u}X.matches=function(s,l){return X(s,null,null,l)},X.matchesSelector=function(s,l){if($e(s),f&&!ue[l+\" \"]&&(!d||!d.test(l)))try{var p=y.call(s,l);if(p||j.disconnectedMatch||s.document&&s.document.nodeType!==11)return p}catch{ue(l,!0)}return X(l,u,null,[s]).length>0},X.contains=function(s,l){return(s.ownerDocument||s)!=u&&$e(s),i.contains(s,l)},X.attr=function(s,l){(s.ownerDocument||s)!=u&&$e(s);var p=t.attrHandle[l.toLowerCase()],g=p&&he.call(t.attrHandle,l.toLowerCase())?p(s,l,!f):void 0;return g!==void 0?g:s.getAttribute(l)},X.error=function(s){throw new Error(\"Syntax error, unrecognized expression: \"+s)},i.uniqueSort=function(s){var l,p=[],g=0,v=0;if(o=!j.sortStable,r=!j.sortStable&&Z.call(s,0),Bt.call(s,oe),o){for(;l=s[v++];)l===s[v]&&(g=p.push(v));for(;g--;)$t.call(s,p[g],1)}return r=null,s},i.fn.uniqueSort=function(){return this.pushStack(i.uniqueSort(Z.apply(this)))},t=i.expr={cacheLength:50,createPseudo:we,match:je,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(s){return s[1]=s[1].replace(ze,Ie),s[3]=(s[3]||s[4]||s[5]||\"\").replace(ze,Ie),s[2]===\"~=\"&&(s[3]=\" \"+s[3]+\" \"),s.slice(0,4)},CHILD:function(s){return s[1]=s[1].toLowerCase(),s[1].slice(0,3)===\"nth\"?(s[3]||X.error(s[0]),s[4]=+(s[4]?s[5]+(s[6]||1):2*(s[3]===\"even\"||s[3]===\"odd\")),s[5]=+(s[7]+s[8]||s[3]===\"odd\")):s[3]&&X.error(s[0]),s},PSEUDO:function(s){var l,p=!s[6]&&s[2];return je.CHILD.test(s[0])?null:(s[3]?s[2]=s[4]||s[5]||\"\":p&&ke.test(p)&&(l=jt(p,!0))&&(l=p.indexOf(\")\",p.length-l)-p.length)&&(s[0]=s[0].slice(0,l),s[2]=p.slice(0,l)),s.slice(0,3))}},filter:{TAG:function(s){var l=s.replace(ze,Ie).toLowerCase();return s===\"*\"?function(){return!0}:function(p){return _(p,l)}},CLASS:function(s){var l=P[s+\" \"];return l||(l=new RegExp(\"(^|\"+U+\")\"+s+\"(\"+U+\"|$)\"))&&P(s,function(p){return l.test(typeof p.className==\"string\"&&p.className||typeof p.getAttribute<\"u\"&&p.getAttribute(\"class\")||\"\")})},ATTR:function(s,l,p){return function(g){var v=X.attr(g,s);return v==null?l===\"!=\":l?(v+=\"\",l===\"=\"?v===p:l===\"!=\"?v!==p:l===\"^=\"?p&&v.indexOf(p)===0:l===\"*=\"?p&&v.indexOf(p)>-1:l===\"$=\"?p&&v.slice(-p.length)===p:l===\"~=\"?(\" \"+v.replace(B,\" \")+\" \").indexOf(p)>-1:l===\"|=\"?v===p||v.slice(0,p.length+1)===p+\"-\":!1):!0}},CHILD:function(s,l,p,g,v){var b=s.slice(0,3)!==\"nth\",T=s.slice(-4)!==\"last\",w=l===\"of-type\";return g===1&&v===0?function(C){return!!C.parentNode}:function(C,I,k){var O,R,D,Y,de,se=b!==T?\"nextSibling\":\"previousSibling\",Te=C.parentNode,Pe=w&&C.nodeName.toLowerCase(),ct=!k&&!w,fe=!1;if(Te){if(b){for(;se;){for(D=C;D=D[se];)if(w?_(D,Pe):D.nodeType===1)return!1;de=se=s===\"only\"&&!de&&\"nextSibling\"}return!0}if(de=[T?Te.firstChild:Te.lastChild],T&&ct){for(R=Te[m]||(Te[m]={}),O=R[s]||[],Y=O[0]===h&&O[1],fe=Y&&O[2],D=Y&&Te.childNodes[Y];D=++Y&&D&&D[se]||(fe=Y=0)||de.pop();)if(D.nodeType===1&&++fe&&D===C){R[s]=[h,Y,fe];break}}else if(ct&&(R=C[m]||(C[m]={}),O=R[s]||[],Y=O[0]===h&&O[1],fe=Y),fe===!1)for(;(D=++Y&&D&&D[se]||(fe=Y=0)||de.pop())&&!((w?_(D,Pe):D.nodeType===1)&&++fe&&(ct&&(R=D[m]||(D[m]={}),R[s]=[h,fe]),D===C)););return fe-=v,fe===g||fe%g===0&&fe/g>=0}}},PSEUDO:function(s,l){var p,g=t.pseudos[s]||t.setFilters[s.toLowerCase()]||X.error(\"unsupported pseudo: \"+s);return g[m]?g(l):g.length>1?(p=[s,s,\"\",l],t.setFilters.hasOwnProperty(s.toLowerCase())?we(function(v,b){for(var T,w=g(v,l),C=w.length;C--;)T=N.call(v,w[C]),v[T]=!(b[T]=w[C])}):function(v){return g(v,0,p)}):g}},pseudos:{not:we(function(s){var l=[],p=[],g=pn(s.replace(Ve,\"$1\"));return g[m]?we(function(v,b,T,w){for(var C,I=g(v,null,w,[]),k=v.length;k--;)(C=I[k])&&(v[k]=!(b[k]=C))}):function(v,b,T){return l[0]=v,g(l,null,T,p),l[0]=null,!p.pop()}}),has:we(function(s){return function(l){return X(s,l).length>0}}),contains:we(function(s){return s=s.replace(ze,Ie),function(l){return(l.textContent||i.text(l)).indexOf(s)>-1}}),lang:we(function(s){return kt.test(s||\"\")||X.error(\"unsupported lang: \"+s),s=s.replace(ze,Ie).toLowerCase(),function(l){var p;do if(p=f?l.lang:l.getAttribute(\"xml:lang\")||l.getAttribute(\"lang\"))return p=p.toLowerCase(),p===s||p.indexOf(s+\"-\")===0;while((l=l.parentNode)&&l.nodeType===1);return!1}}),target:function(s){var l=A.location&&A.location.hash;return l&&l.slice(1)===s.id},root:function(s){return s===c},focus:function(s){return s===Rr()&&u.hasFocus()&&!!(s.type||s.href||~s.tabIndex)},enabled:Vn(!1),disabled:Vn(!0),checked:function(s){return _(s,\"input\")&&!!s.checked||_(s,\"option\")&&!!s.selected},selected:function(s){return s.parentNode&&s.parentNode.selectedIndex,s.selected===!0},empty:function(s){for(s=s.firstChild;s;s=s.nextSibling)if(s.nodeType<6)return!1;return!0},parent:function(s){return!t.pseudos.empty(s)},header:function(s){return Be.test(s.nodeName)},input:function(s){return We.test(s.nodeName)},button:function(s){return _(s,\"input\")&&s.type===\"button\"||_(s,\"button\")},text:function(s){var l;return _(s,\"input\")&&s.type===\"text\"&&((l=s.getAttribute(\"type\"))==null||l.toLowerCase()===\"text\")},first:Je(function(){return[0]}),last:Je(function(s,l){return[l-1]}),eq:Je(function(s,l,p){return[p<0?p+l:p]}),even:Je(function(s,l){for(var p=0;p<l;p+=2)s.push(p);return s}),odd:Je(function(s,l){for(var p=1;p<l;p+=2)s.push(p);return s}),lt:Je(function(s,l,p){var g;for(p<0?g=p+l:p>l?g=l:g=p;--g>=0;)s.push(g);return s}),gt:Je(function(s,l,p){for(var g=p<0?p+l:p;++g<l;)s.push(g);return s})}},t.pseudos.nth=t.pseudos.eq;for(e in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})t.pseudos[e]=_r(e);for(e in{submit:!0,reset:!0})t.pseudos[e]=Fr(e);function Xn(){}Xn.prototype=t.filters=t.pseudos,t.setFilters=new Xn;function jt(s,l){var p,g,v,b,T,w,C,I=W[s+\" \"];if(I)return l?0:I.slice(0);for(T=s,w=[],C=t.preFilter;T;){(!p||(g=te.exec(T)))&&(g&&(T=T.slice(g[0].length)||T),w.push(v=[])),p=!1,(g=Nt.exec(T))&&(p=g.shift(),v.push({value:p,type:g[0].replace(Ve,\" \")}),T=T.slice(p.length));for(b in t.filter)(g=je[b].exec(T))&&(!C[b]||(g=C[b](g)))&&(p=g.shift(),v.push({value:p,type:b,matches:g}),T=T.slice(p.length));if(!p)break}return l?T.length:T?X.error(s):W(s,w).slice(0)}function Rt(s){for(var l=0,p=s.length,g=\"\";l<p;l++)g+=s[l].value;return g}function _t(s,l,p){var g=l.dir,v=l.next,b=v||g,T=p&&b===\"parentNode\",w=x++;return l.first?function(C,I,k){for(;C=C[g];)if(C.nodeType===1||T)return s(C,I,k);return!1}:function(C,I,k){var O,R,D=[h,w];if(k){for(;C=C[g];)if((C.nodeType===1||T)&&s(C,I,k))return!0}else for(;C=C[g];)if(C.nodeType===1||T)if(R=C[m]||(C[m]={}),v&&_(C,v))C=C[g]||C;else{if((O=R[b])&&O[0]===h&&O[1]===w)return D[2]=O[2];if(R[b]=D,D[2]=s(C,I,k))return!0}return!1}}function cn(s){return s.length>1?function(l,p,g){for(var v=s.length;v--;)if(!s[v](l,p,g))return!1;return!0}:s[0]}function Wr(s,l,p){for(var g=0,v=l.length;g<v;g++)X(s,l[g],p);return p}function Ft(s,l,p,g,v){for(var b,T=[],w=0,C=s.length,I=l!=null;w<C;w++)(b=s[w])&&(!p||p(b,g,v))&&(T.push(b),I&&l.push(w));return T}function ln(s,l,p,g,v,b){return g&&!g[m]&&(g=ln(g)),v&&!v[m]&&(v=ln(v,b)),we(function(T,w,C,I){var k,O,R,D,Y=[],de=[],se=w.length,Te=T||Wr(l||\"*\",C.nodeType?[C]:C,[]),Pe=s&&(T||!l)?Ft(Te,Y,s,C,I):Te;if(p?(D=v||(T?s:se||g)?[]:w,p(Pe,D,C,I)):D=Pe,g)for(k=Ft(D,de),g(k,[],C,I),O=k.length;O--;)(R=k[O])&&(D[de[O]]=!(Pe[de[O]]=R));if(T){if(v||s){if(v){for(k=[],O=D.length;O--;)(R=D[O])&&k.push(Pe[O]=R);v(null,D=[],k,I)}for(O=D.length;O--;)(R=D[O])&&(k=v?N.call(T,R):Y[O])>-1&&(T[k]=!(w[k]=R))}}else D=Ft(D===w?D.splice(se,D.length):D),v?v(null,w,D,I):a.apply(w,D)})}function dn(s){for(var l,p,g,v=s.length,b=t.relative[s[0].type],T=b||t.relative[\" \"],w=b?1:0,C=_t(function(O){return O===l},T,!0),I=_t(function(O){return N.call(l,O)>-1},T,!0),k=[function(O,R,D){var Y=!b&&(D||R!=n)||((l=R).nodeType?C(O,R,D):I(O,R,D));return l=null,Y}];w<v;w++)if(p=t.relative[s[w].type])k=[_t(cn(k),p)];else{if(p=t.filter[s[w].type].apply(null,s[w].matches),p[m]){for(g=++w;g<v&&!t.relative[s[g].type];g++);return ln(w>1&&cn(k),w>1&&Rt(s.slice(0,w-1).concat({value:s[w-2].type===\" \"?\"*\":\"\"})).replace(Ve,\"$1\"),p,w<g&&dn(s.slice(w,g)),g<v&&dn(s=s.slice(g)),g<v&&Rt(s))}k.push(p)}return cn(k)}function Br(s,l){var p=l.length>0,g=s.length>0,v=function(b,T,w,C,I){var k,O,R,D=0,Y=\"0\",de=b&&[],se=[],Te=n,Pe=b||g&&t.find.TAG(\"*\",I),ct=h+=Te==null?1:Math.random()||.1,fe=Pe.length;for(I&&(n=T==u||T||I);Y!==fe&&(k=Pe[Y])!=null;Y++){if(g&&k){for(O=0,!T&&k.ownerDocument!=u&&($e(k),w=!f);R=s[O++];)if(R(k,T||u,w)){a.call(C,k);break}I&&(h=ct)}p&&((k=!R&&k)&&D--,b&&de.push(k))}if(D+=Y,p&&Y!==D){for(O=0;R=l[O++];)R(de,se,T,w);if(b){if(D>0)for(;Y--;)de[Y]||se[Y]||(se[Y]=pt.call(C));se=Ft(se)}a.apply(C,se),I&&!b&&se.length>0&&D+l.length>1&&i.uniqueSort(C)}return I&&(h=ct,n=Te),de};return p?we(v):v}function pn(s,l){var p,g=[],v=[],b=L[s+\" \"];if(!b){for(l||(l=jt(s)),p=l.length;p--;)b=dn(l[p]),b[m]?g.push(b):v.push(b);b=L(s,Br(v,g)),b.selector=s}return b}function Zn(s,l,p,g){var v,b,T,w,C,I=typeof s==\"function\"&&s,k=!g&&jt(s=I.selector||s);if(p=p||[],k.length===1){if(b=k[0]=k[0].slice(0),b.length>2&&(T=b[0]).type===\"ID\"&&l.nodeType===9&&f&&t.relative[b[1].type]){if(l=(t.find.ID(T.matches[0].replace(ze,Ie),l)||[])[0],l)I&&(l=l.parentNode);else return p;s=s.slice(b.shift().value.length)}for(v=je.needsContext.test(s)?0:b.length;v--&&(T=b[v],!t.relative[w=T.type]);)if((C=t.find[w])&&(g=C(T.matches[0].replace(ze,Ie),sn.test(b[0].type)&&fn(l.parentNode)||l))){if(b.splice(v,1),s=g.length&&Rt(b),!s)return a.apply(p,g),p;break}}return(I||pn(s,k))(g,l,!f,p,!l||sn.test(s)&&fn(l.parentNode)||l),p}j.sortStable=m.split(\"\").sort(oe).join(\"\")===m,$e(),j.sortDetached=ft(function(s){return s.compareDocumentPosition(u.createElement(\"fieldset\"))&1}),i.find=X,i.expr[\":\"]=i.expr.pseudos,i.unique=i.uniqueSort,X.compile=pn,X.select=Zn,X.setDocument=$e,X.tokenize=jt,X.escape=i.escapeSelector,X.getText=i.text,X.isXML=i.isXMLDoc,X.selectors=i.expr,X.support=i.support,X.uniqueSort=i.uniqueSort})();var He=function(e,t,n){for(var r=[],o=n!==void 0;(e=e[t])&&e.nodeType!==9;)if(e.nodeType===1){if(o&&i(e).is(n))break;r.push(e)}return r},tt=function(e,t){for(var n=[];e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n},gt=i.expr.match.needsContext,yt=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function nt(e,t,n){return H(t)?i.grep(e,function(r,o){return!!t.call(r,o,r)!==n}):t.nodeType?i.grep(e,function(r){return r===t!==n}):typeof t!=\"string\"?i.grep(e,function(r){return N.call(t,r)>-1!==n}):i.filter(t,e,n)}i.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),t.length===1&&r.nodeType===1?i.find.matchesSelector(r,e)?[r]:[]:i.find.matches(e,i.grep(t,function(o){return o.nodeType===1}))},i.fn.extend({find:function(e){var t,n,r=this.length,o=this;if(typeof e!=\"string\")return this.pushStack(i(e).filter(function(){for(t=0;t<r;t++)if(i.contains(o[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)i.find(e,o[t],n);return r>1?i.uniqueSort(n):n},filter:function(e){return this.pushStack(nt(this,e||[],!1))},not:function(e){return this.pushStack(nt(this,e||[],!0))},is:function(e){return!!nt(this,typeof e==\"string\"&&gt.test(e)?i(e):e||[],!1).length}});var vt,Pt=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,mt=i.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||vt,typeof e==\"string\")if(e[0]===\"<\"&&e[e.length-1]===\">\"&&e.length>=3?r=[null,e,null]:r=Pt.exec(e),r&&(r[1]||!t))if(r[1]){if(t=t instanceof i?t[0]:t,i.merge(this,i.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:q,!0)),yt.test(r[1])&&i.isPlainObject(t))for(r in t)H(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}else return o=q.getElementById(r[2]),o&&(this[0]=o,this.length=1),this;else return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);else{if(e.nodeType)return this[0]=e,this.length=1,this;if(H(e))return n.ready!==void 0?n.ready(e):e(i)}return i.makeArray(e,this)};mt.prototype=i.fn,vt=i(q);var xt=/^(?:parents|prev(?:Until|All))/,bt={children:!0,contents:!0,next:!0,prev:!0};i.fn.extend({has:function(e){var t=i(e,this),n=t.length;return this.filter(function(){for(var r=0;r<n;r++)if(i.contains(this,t[r]))return!0})},closest:function(e,t){var n,r=0,o=this.length,a=[],u=typeof e!=\"string\"&&i(e);if(!gt.test(e)){for(;r<o;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(u?u.index(n)>-1:n.nodeType===1&&i.find.matchesSelector(n,e))){a.push(n);break}}return this.pushStack(a.length>1?i.uniqueSort(a):a)},index:function(e){return e?typeof e==\"string\"?N.call(i(e),this[0]):N.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(i.uniqueSort(i.merge(this.get(),i(e,t))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});function _e(e,t){for(;(e=e[t])&&e.nodeType!==1;);return e}i.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return He(e,\"parentNode\")},parentsUntil:function(e,t,n){return He(e,\"parentNode\",n)},next:function(e){return _e(e,\"nextSibling\")},prev:function(e){return _e(e,\"previousSibling\")},nextAll:function(e){return He(e,\"nextSibling\")},prevAll:function(e){return He(e,\"previousSibling\")},nextUntil:function(e,t,n){return He(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return He(e,\"previousSibling\",n)},siblings:function(e){return tt((e.parentNode||{}).firstChild,e)},children:function(e){return tt(e.firstChild)},contents:function(e){return e.contentDocument!=null&&ae(e.contentDocument)?e.contentDocument:(_(e,\"template\")&&(e=e.content||e),i.merge([],e.childNodes))}},function(e,t){i.fn[e]=function(n,r){var o=i.map(this,t,n);return e.slice(-5)!==\"Until\"&&(r=n),r&&typeof r==\"string\"&&(o=i.filter(r,o)),this.length>1&&(bt[e]||i.uniqueSort(o),xt.test(e)&&o.reverse()),this.pushStack(o)}});var pe=/[^\\x20\\t\\r\\n\\f]+/g;function qt(e){var t={};return i.each(e.match(pe)||[],function(n,r){t[r]=!0}),t}i.Callbacks=function(e){e=typeof e==\"string\"?qt(e):i.extend({},e);var t,n,r,o,a=[],u=[],c=-1,f=function(){for(o=o||e.once,r=t=!0;u.length;c=-1)for(n=u.shift();++c<a.length;)a[c].apply(n[0],n[1])===!1&&e.stopOnFalse&&(c=a.length,n=!1);e.memory||(n=!1),t=!1,o&&(n?a=[]:a=\"\")},d={add:function(){return a&&(n&&!t&&(c=a.length-1,u.push(n)),(function y(m){i.each(m,function(h,x){H(x)?(!e.unique||!d.has(x))&&a.push(x):x&&x.length&&Oe(x)!==\"string\"&&y(x)})})(arguments),n&&!t&&f()),this},remove:function(){return i.each(arguments,function(y,m){for(var h;(h=i.inArray(m,a,h))>-1;)a.splice(h,1),h<=c&&c--}),this},has:function(y){return y?i.inArray(y,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return o=u=[],a=n=\"\",this},disabled:function(){return!a},lock:function(){return o=u=[],!n&&!t&&(a=n=\"\"),this},locked:function(){return!!o},fireWith:function(y,m){return o||(m=m||[],m=[y,m.slice?m.slice():m],u.push(m),t||f()),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!r}};return d};function Me(e){return e}function Xe(e){throw e}function Tt(e,t,n,r){var o;try{e&&H(o=e.promise)?o.call(e).done(t).fail(n):e&&H(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(a){n.apply(void 0,[a])}}i.extend({Deferred:function(e){var t=[[\"notify\",\"progress\",i.Callbacks(\"memory\"),i.Callbacks(\"memory\"),2],[\"resolve\",\"done\",i.Callbacks(\"once memory\"),i.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",i.Callbacks(\"once memory\"),i.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",r={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(a){return r.then(null,a)},pipe:function(){var a=arguments;return i.Deferred(function(u){i.each(t,function(c,f){var d=H(a[f[4]])&&a[f[4]];o[f[1]](function(){var y=d&&d.apply(this,arguments);y&&H(y.promise)?y.promise().progress(u.notify).done(u.resolve).fail(u.reject):u[f[0]+\"With\"](this,d?[y]:arguments)})}),a=null}).promise()},then:function(a,u,c){var f=0;function d(y,m,h,x){return function(){var P=this,W=arguments,L=function(){var oe,Ae;if(!(y<f)){if(oe=h.apply(P,W),oe===m.promise())throw new TypeError(\"Thenable self-resolution\");Ae=oe&&(typeof oe==\"object\"||typeof oe==\"function\")&&oe.then,H(Ae)?x?Ae.call(oe,d(f,m,Me,x),d(f,m,Xe,x)):(f++,Ae.call(oe,d(f,m,Me,x),d(f,m,Xe,x),d(f,m,Me,m.notifyWith))):(h!==Me&&(P=void 0,W=[oe]),(x||m.resolveWith)(P,W))}},ue=x?L:function(){try{L()}catch(oe){i.Deferred.exceptionHook&&i.Deferred.exceptionHook(oe,ue.error),y+1>=f&&(h!==Xe&&(P=void 0,W=[oe]),m.rejectWith(P,W))}};y?ue():(i.Deferred.getErrorHook?ue.error=i.Deferred.getErrorHook():i.Deferred.getStackHook&&(ue.error=i.Deferred.getStackHook()),A.setTimeout(ue))}}return i.Deferred(function(y){t[0][3].add(d(0,y,H(c)?c:Me,y.notifyWith)),t[1][3].add(d(0,y,H(a)?a:Me)),t[2][3].add(d(0,y,H(u)?u:Xe))}).promise()},promise:function(a){return a!=null?i.extend(a,r):r}},o={};return i.each(t,function(a,u){var c=u[2],f=u[5];r[u[1]]=c.add,f&&c.add(function(){n=f},t[3-a][2].disable,t[3-a][3].disable,t[0][2].lock,t[0][3].lock),c.add(u[3].fire),o[u[0]]=function(){return o[u[0]+\"With\"](this===o?void 0:this,arguments),this},o[u[0]+\"With\"]=c.fireWith}),r.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),o=Z.call(arguments),a=i.Deferred(),u=function(c){return function(f){r[c]=this,o[c]=arguments.length>1?Z.call(arguments):f,--t||a.resolveWith(r,o)}};if(t<=1&&(Tt(e,a.done(u(n)).resolve,a.reject,!t),a.state()===\"pending\"||H(o[n]&&o[n].then)))return a.then();for(;n--;)Tt(o[n],u(n),a.reject);return a.promise()}});var M=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;i.Deferred.exceptionHook=function(e,t){A.console&&A.console.warn&&e&&M.test(e.name)&&A.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},i.readyException=function(e){A.setTimeout(function(){throw e})};var E=i.Deferred();i.fn.ready=function(e){return E.then(e).catch(function(t){i.readyException(t)}),this},i.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--i.readyWait:i.isReady)||(i.isReady=!0,!(e!==!0&&--i.readyWait>0)&&E.resolveWith(q,[i]))}}),i.ready.then=E.then;function $(){q.removeEventListener(\"DOMContentLoaded\",$),A.removeEventListener(\"load\",$),i.ready()}q.readyState===\"complete\"||q.readyState!==\"loading\"&&!q.documentElement.doScroll?A.setTimeout(i.ready):(q.addEventListener(\"DOMContentLoaded\",$),A.addEventListener(\"load\",$));var z=function(e,t,n,r,o,a,u){var c=0,f=e.length,d=n==null;if(Oe(n)===\"object\"){o=!0;for(c in n)z(e,t,c,n[c],!0,a,u)}else if(r!==void 0&&(o=!0,H(r)||(u=!0),d&&(u?(t.call(e,r),t=null):(d=t,t=function(y,m,h){return d.call(i(y),h)})),t))for(;c<f;c++)t(e[c],n,u?r:r.call(e[c],c,t(e[c],n)));return o?e:d?t.call(e):f?t(e[0],n):a},K=/^-ms-/,ee=/-([a-z])/g;function re(e,t){return t.toUpperCase()}function J(e){return e.replace(K,\"ms-\").replace(ee,re)}var G=function(e){return e.nodeType===1||e.nodeType===9||!+e.nodeType};function Fe(){this.expando=i.expando+Fe.uid++}Fe.uid=1,Fe.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if(typeof t==\"string\")o[J(t)]=n;else for(r in t)o[J(r)]=t[r];return o},get:function(e,t){return t===void 0?this.cache(e):e[this.expando]&&e[this.expando][J(t)]},access:function(e,t,n){return t===void 0||t&&typeof t==\"string\"&&n===void 0?this.get(e,t):(this.set(e,t,n),n!==void 0?n:t)},remove:function(e,t){var n,r=e[this.expando];if(r!==void 0){if(t!==void 0)for(Array.isArray(t)?t=t.map(J):(t=J(t),t=t in r?[t]:t.match(pe)||[]),n=t.length;n--;)delete r[t[n]];(t===void 0||i.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return t!==void 0&&!i.isEmptyObject(t)}};var S=new Fe,ie=new Fe,Jn=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Kn=/[A-Z]/g;function er(e){return e===\"true\"?!0:e===\"false\"?!1:e===\"null\"?null:e===+e+\"\"?+e:Jn.test(e)?JSON.parse(e):e}function gn(e,t,n){var r;if(n===void 0&&e.nodeType===1)if(r=\"data-\"+t.replace(Kn,\"-$&\").toLowerCase(),n=e.getAttribute(r),typeof n==\"string\"){try{n=er(n)}catch{}ie.set(e,t,n)}else n=void 0;return n}i.extend({hasData:function(e){return ie.hasData(e)||S.hasData(e)},data:function(e,t,n){return ie.access(e,t,n)},removeData:function(e,t){ie.remove(e,t)},_data:function(e,t,n){return S.access(e,t,n)},_removeData:function(e,t){S.remove(e,t)}}),i.fn.extend({data:function(e,t){var n,r,o,a=this[0],u=a&&a.attributes;if(e===void 0){if(this.length&&(o=ie.get(a),a.nodeType===1&&!S.get(a,\"hasDataAttrs\"))){for(n=u.length;n--;)u[n]&&(r=u[n].name,r.indexOf(\"data-\")===0&&(r=J(r.slice(5)),gn(a,r,o[r])));S.set(a,\"hasDataAttrs\",!0)}return o}return typeof e==\"object\"?this.each(function(){ie.set(this,e)}):z(this,function(c){var f;if(a&&c===void 0)return f=ie.get(a,e),f!==void 0||(f=gn(a,e),f!==void 0)?f:void 0;this.each(function(){ie.set(this,e,c)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){ie.remove(this,e)})}}),i.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=S.get(e,t),n&&(!r||Array.isArray(n)?r=S.access(e,t,i.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=i.queue(e,t),r=n.length,o=n.shift(),a=i._queueHooks(e,t),u=function(){i.dequeue(e,t)};o===\"inprogress\"&&(o=n.shift(),r--),o&&(t===\"fx\"&&n.unshift(\"inprogress\"),delete a.stop,o.call(e,u,a)),!r&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return S.get(e,n)||S.access(e,n,{empty:i.Callbacks(\"once memory\").add(function(){S.remove(e,[t+\"queue\",n])})})}}),i.fn.extend({queue:function(e,t){var n=2;return typeof e!=\"string\"&&(t=e,e=\"fx\",n--),arguments.length<n?i.queue(this[0],e):t===void 0?this:this.each(function(){var r=i.queue(this,e,t);i._queueHooks(this,e),e===\"fx\"&&r[0]!==\"inprogress\"&&i.dequeue(this,e)})},dequeue:function(e){return this.each(function(){i.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,o=i.Deferred(),a=this,u=this.length,c=function(){--r||o.resolveWith(a,[a])};for(typeof e!=\"string\"&&(t=e,e=void 0),e=e||\"fx\";u--;)n=S.get(a[u],e+\"queueHooks\"),n&&n.empty&&(r++,n.empty.add(c));return c(),o.promise(t)}});var yn=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Ct=new RegExp(\"^(?:([+-])=|)(\"+yn+\")([a-z%]*)$\",\"i\"),Le=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Ze=q.documentElement,rt=function(e){return i.contains(e.ownerDocument,e)},tr={composed:!0};Ze.getRootNode&&(rt=function(e){return i.contains(e.ownerDocument,e)||e.getRootNode(tr)===e.ownerDocument});var Ot=function(e,t){return e=t||e,e.style.display===\"none\"||e.style.display===\"\"&&rt(e)&&i.css(e,\"display\")===\"none\"};function vn(e,t,n,r){var o,a,u=20,c=r?function(){return r.cur()}:function(){return i.css(e,t,\"\")},f=c(),d=n&&n[3]||(i.cssNumber[t]?\"\":\"px\"),y=e.nodeType&&(i.cssNumber[t]||d!==\"px\"&&+f)&&Ct.exec(i.css(e,t));if(y&&y[3]!==d){for(f=f/2,d=d||y[3],y=+f||1;u--;)i.style(e,t,y+d),(1-a)*(1-(a=c()/f||.5))<=0&&(u=0),y=y/a;y=y*2,i.style(e,t,y+d),n=n||[]}return n&&(y=+y||+f||0,o=n[1]?y+(n[1]+1)*n[2]:+n[2],r&&(r.unit=d,r.start=y,r.end=o)),o}var mn={};function nr(e){var t,n=e.ownerDocument,r=e.nodeName,o=mn[r];return o||(t=n.body.appendChild(n.createElement(r)),o=i.css(t,\"display\"),t.parentNode.removeChild(t),o===\"none\"&&(o=\"block\"),mn[r]=o,o)}function it(e,t){for(var n,r,o=[],a=0,u=e.length;a<u;a++)r=e[a],r.style&&(n=r.style.display,t?(n===\"none\"&&(o[a]=S.get(r,\"display\")||null,o[a]||(r.style.display=\"\")),r.style.display===\"\"&&Ot(r)&&(o[a]=nr(r))):n!==\"none\"&&(o[a]=\"none\",S.set(r,\"display\",n)));for(a=0;a<u;a++)o[a]!=null&&(e[a].style.display=o[a]);return e}i.fn.extend({show:function(){return it(this,!0)},hide:function(){return it(this)},toggle:function(e){return typeof e==\"boolean\"?e?this.show():this.hide():this.each(function(){Ot(this)?i(this).show():i(this).hide()})}});var wt=/^(?:checkbox|radio)$/i,xn=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,bn=/^$|^module$|\\/(?:java|ecma)script/i;(function(){var e=q.createDocumentFragment(),t=e.appendChild(q.createElement(\"div\")),n=q.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),j.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"<textarea>x</textarea>\",j.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,t.innerHTML=\"<option></option>\",j.option=!!t.lastChild})();var xe={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};xe.tbody=xe.tfoot=xe.colgroup=xe.caption=xe.thead,xe.th=xe.td,j.option||(xe.optgroup=xe.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);function ce(e,t){var n;return typeof e.getElementsByTagName<\"u\"?n=e.getElementsByTagName(t||\"*\"):typeof e.querySelectorAll<\"u\"?n=e.querySelectorAll(t||\"*\"):n=[],t===void 0||t&&_(e,t)?i.merge([e],n):n}function Vt(e,t){for(var n=0,r=e.length;n<r;n++)S.set(e[n],\"globalEval\",!t||S.get(t[n],\"globalEval\"))}var rr=/<|&#?\\w+;/;function Tn(e,t,n,r,o){for(var a,u,c,f,d,y,m=t.createDocumentFragment(),h=[],x=0,P=e.length;x<P;x++)if(a=e[x],a||a===0)if(Oe(a)===\"object\")i.merge(h,a.nodeType?[a]:a);else if(!rr.test(a))h.push(t.createTextNode(a));else{for(u=u||m.appendChild(t.createElement(\"div\")),c=(xn.exec(a)||[\"\",\"\"])[1].toLowerCase(),f=xe[c]||xe._default,u.innerHTML=f[1]+i.htmlPrefilter(a)+f[2],y=f[0];y--;)u=u.lastChild;i.merge(h,u.childNodes),u=m.firstChild,u.textContent=\"\"}for(m.textContent=\"\",x=0;a=h[x++];){if(r&&i.inArray(a,r)>-1){o&&o.push(a);continue}if(d=rt(a),u=ce(m.appendChild(a),\"script\"),d&&Vt(u),n)for(y=0;a=u[y++];)bn.test(a.type||\"\")&&n.push(a)}return m}var Cn=/^([^.]*)(?:\\.(.+)|)/;function ot(){return!0}function at(){return!1}function Xt(e,t,n,r,o,a){var u,c;if(typeof t==\"object\"){typeof n!=\"string\"&&(r=r||n,n=void 0);for(c in t)Xt(e,c,n,r,t[c],a);return e}if(r==null&&o==null?(o=n,r=n=void 0):o==null&&(typeof n==\"string\"?(o=r,r=void 0):(o=r,r=n,n=void 0)),o===!1)o=at;else if(!o)return e;return a===1&&(u=o,o=function(f){return i().off(f),u.apply(this,arguments)},o.guid=u.guid||(u.guid=i.guid++)),e.each(function(){i.event.add(this,t,o,r,n)})}i.event={global:{},add:function(e,t,n,r,o){var a,u,c,f,d,y,m,h,x,P,W,L=S.get(e);if(G(e))for(n.handler&&(a=n,n=a.handler,o=a.selector),o&&i.find.matchesSelector(Ze,o),n.guid||(n.guid=i.guid++),(f=L.events)||(f=L.events=Object.create(null)),(u=L.handle)||(u=L.handle=function(ue){return typeof i<\"u\"&&i.event.triggered!==ue.type?i.event.dispatch.apply(e,arguments):void 0}),t=(t||\"\").match(pe)||[\"\"],d=t.length;d--;)c=Cn.exec(t[d])||[],x=W=c[1],P=(c[2]||\"\").split(\".\").sort(),x&&(m=i.event.special[x]||{},x=(o?m.delegateType:m.bindType)||x,m=i.event.special[x]||{},y=i.extend({type:x,origType:W,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&i.expr.match.needsContext.test(o),namespace:P.join(\".\")},a),(h=f[x])||(h=f[x]=[],h.delegateCount=0,(!m.setup||m.setup.call(e,r,P,u)===!1)&&e.addEventListener&&e.addEventListener(x,u)),m.add&&(m.add.call(e,y),y.handler.guid||(y.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,y):h.push(y),i.event.global[x]=!0)},remove:function(e,t,n,r,o){var a,u,c,f,d,y,m,h,x,P,W,L=S.hasData(e)&&S.get(e);if(!(!L||!(f=L.events))){for(t=(t||\"\").match(pe)||[\"\"],d=t.length;d--;){if(c=Cn.exec(t[d])||[],x=W=c[1],P=(c[2]||\"\").split(\".\").sort(),!x){for(x in f)i.event.remove(e,x+t[d],n,r,!0);continue}for(m=i.event.special[x]||{},x=(r?m.delegateType:m.bindType)||x,h=f[x]||[],c=c[2]&&new RegExp(\"(^|\\\\.)\"+P.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),u=a=h.length;a--;)y=h[a],(o||W===y.origType)&&(!n||n.guid===y.guid)&&(!c||c.test(y.namespace))&&(!r||r===y.selector||r===\"**\"&&y.selector)&&(h.splice(a,1),y.selector&&h.delegateCount--,m.remove&&m.remove.call(e,y));u&&!h.length&&((!m.teardown||m.teardown.call(e,P,L.handle)===!1)&&i.removeEvent(e,x,L.handle),delete f[x])}i.isEmptyObject(f)&&S.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,o,a,u,c=new Array(arguments.length),f=i.event.fix(e),d=(S.get(this,\"events\")||Object.create(null))[f.type]||[],y=i.event.special[f.type]||{};for(c[0]=f,t=1;t<arguments.length;t++)c[t]=arguments[t];if(f.delegateTarget=this,!(y.preDispatch&&y.preDispatch.call(this,f)===!1)){for(u=i.event.handlers.call(this,f,d),t=0;(o=u[t++])&&!f.isPropagationStopped();)for(f.currentTarget=o.elem,n=0;(a=o.handlers[n++])&&!f.isImmediatePropagationStopped();)(!f.rnamespace||a.namespace===!1||f.rnamespace.test(a.namespace))&&(f.handleObj=a,f.data=a.data,r=((i.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,c),r!==void 0&&(f.result=r)===!1&&(f.preventDefault(),f.stopPropagation()));return y.postDispatch&&y.postDispatch.call(this,f),f.result}},handlers:function(e,t){var n,r,o,a,u,c=[],f=t.delegateCount,d=e.target;if(f&&d.nodeType&&!(e.type===\"click\"&&e.button>=1)){for(;d!==this;d=d.parentNode||this)if(d.nodeType===1&&!(e.type===\"click\"&&d.disabled===!0)){for(a=[],u={},n=0;n<f;n++)r=t[n],o=r.selector+\" \",u[o]===void 0&&(u[o]=r.needsContext?i(o,this).index(d)>-1:i.find(o,this,null,[d]).length),u[o]&&a.push(r);a.length&&c.push({elem:d,handlers:a})}}return d=this,f<t.length&&c.push({elem:d,handlers:t.slice(f)}),c},addProp:function(e,t){Object.defineProperty(i.Event.prototype,e,{enumerable:!0,configurable:!0,get:H(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(n){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:n})}})},fix:function(e){return e[i.expando]?e:new i.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return wt.test(t.type)&&t.click&&_(t,\"input\")&&Ht(t,\"click\",!0),!1},trigger:function(e){var t=this||e;return wt.test(t.type)&&t.click&&_(t,\"input\")&&Ht(t,\"click\"),!0},_default:function(e){var t=e.target;return wt.test(t.type)&&t.click&&_(t,\"input\")&&S.get(t,\"click\")||_(t,\"a\")}},beforeunload:{postDispatch:function(e){e.result!==void 0&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}};function Ht(e,t,n){if(!n){S.get(e,t)===void 0&&i.event.add(e,t,ot);return}S.set(e,t,!1),i.event.add(e,t,{namespace:!1,handler:function(r){var o,a=S.get(this,t);if(r.isTrigger&1&&this[t]){if(a)(i.event.special[t]||{}).delegateType&&r.stopPropagation();else if(a=Z.call(arguments),S.set(this,t,a),this[t](),o=S.get(this,t),S.set(this,t,!1),a!==o)return r.stopImmediatePropagation(),r.preventDefault(),o}else a&&(S.set(this,t,i.event.trigger(a[0],a.slice(1),this)),r.stopPropagation(),r.isImmediatePropagationStopped=ot)}})}i.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},i.Event=function(e,t){if(!(this instanceof i.Event))return new i.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.defaultPrevented===void 0&&e.returnValue===!1?ot:at,this.target=e.target&&e.target.nodeType===3?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&i.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[i.expando]=!0},i.Event.prototype={constructor:i.Event,isDefaultPrevented:at,isPropagationStopped:at,isImmediatePropagationStopped:at,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ot,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ot,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ot,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},i.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},i.event.addProp),i.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){function n(r){if(q.documentMode){var o=S.get(this,\"handle\"),a=i.event.fix(r);a.type=r.type===\"focusin\"?\"focus\":\"blur\",a.isSimulated=!0,o(r),a.target===a.currentTarget&&o(a)}else i.event.simulate(t,r.target,i.event.fix(r))}i.event.special[e]={setup:function(){var r;if(Ht(this,e,!0),q.documentMode)r=S.get(this,t),r||this.addEventListener(t,n),S.set(this,t,(r||0)+1);else return!1},trigger:function(){return Ht(this,e),!0},teardown:function(){var r;if(q.documentMode)r=S.get(this,t)-1,r?S.set(this,t,r):(this.removeEventListener(t,n),S.remove(this,t));else return!1},_default:function(r){return S.get(r.target,e)},delegateType:t},i.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,o=q.documentMode?this:r,a=S.get(o,t);a||(q.documentMode?this.addEventListener(t,n):r.addEventListener(e,n,!0)),S.set(o,t,(a||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,o=q.documentMode?this:r,a=S.get(o,t)-1;a?S.set(o,t,a):(q.documentMode?this.removeEventListener(t,n):r.removeEventListener(e,n,!0),S.remove(o,t))}}}),i.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){i.event.special[e]={delegateType:t,bindType:t,handle:function(n){var r,o=this,a=n.relatedTarget,u=n.handleObj;return(!a||a!==o&&!i.contains(o,a))&&(n.type=u.origType,r=u.handler.apply(this,arguments),n.type=t),r}}}),i.fn.extend({on:function(e,t,n,r){return Xt(this,e,t,n,r)},one:function(e,t,n,r){return Xt(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,i(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(typeof e==\"object\"){for(o in e)this.off(o,t,e[o]);return this}return(t===!1||typeof t==\"function\")&&(n=t,t=void 0),n===!1&&(n=at),this.each(function(){i.event.remove(this,e,n,t)})}});var ir=/<script|<style|<link/i,or=/checked\\s*(?:[^=]|=\\s*.checked.)/i,ar=/^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;function wn(e,t){return _(e,\"table\")&&_(t.nodeType!==11?t:t.firstChild,\"tr\")&&i(e).children(\"tbody\")[0]||e}function ur(e){return e.type=(e.getAttribute(\"type\")!==null)+\"/\"+e.type,e}function sr(e){return(e.type||\"\").slice(0,5)===\"true/\"?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Sn(e,t){var n,r,o,a,u,c,f;if(t.nodeType===1){if(S.hasData(e)&&(a=S.get(e),f=a.events,f)){S.remove(t,\"handle events\");for(o in f)for(n=0,r=f[o].length;n<r;n++)i.event.add(t,o,f[o][n])}ie.hasData(e)&&(u=ie.access(e),c=i.extend({},u),ie.set(t,c))}}function fr(e,t){var n=t.nodeName.toLowerCase();n===\"input\"&&wt.test(e.type)?t.checked=e.checked:(n===\"input\"||n===\"textarea\")&&(t.defaultValue=e.defaultValue)}function ut(e,t,n,r){t=V(t);var o,a,u,c,f,d,y=0,m=e.length,h=m-1,x=t[0],P=H(x);if(P||m>1&&typeof x==\"string\"&&!j.checkClone&&or.test(x))return e.each(function(W){var L=e.eq(W);P&&(t[0]=x.call(this,W,L.html())),ut(L,t,n,r)});if(m&&(o=Tn(t,e[0].ownerDocument,!1,e,r),a=o.firstChild,o.childNodes.length===1&&(o=a),a||r)){for(u=i.map(ce(o,\"script\"),ur),c=u.length;y<m;y++)f=o,y!==h&&(f=i.clone(f,!0,!0),c&&i.merge(u,ce(f,\"script\"))),n.call(e[y],f,y);if(c)for(d=u[u.length-1].ownerDocument,i.map(u,sr),y=0;y<c;y++)f=u[y],bn.test(f.type||\"\")&&!S.access(f,\"globalEval\")&&i.contains(d,f)&&(f.src&&(f.type||\"\").toLowerCase()!==\"module\"?i._evalUrl&&!f.noModule&&i._evalUrl(f.src,{nonce:f.nonce||f.getAttribute(\"nonce\")},d):lt(f.textContent.replace(ar,\"\"),f,d))}return e}function Dn(e,t,n){for(var r,o=t?i.filter(t,e):e,a=0;(r=o[a])!=null;a++)!n&&r.nodeType===1&&i.cleanData(ce(r)),r.parentNode&&(n&&rt(r)&&Vt(ce(r,\"script\")),r.parentNode.removeChild(r));return e}i.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,o,a,u,c=e.cloneNode(!0),f=rt(e);if(!j.noCloneChecked&&(e.nodeType===1||e.nodeType===11)&&!i.isXMLDoc(e))for(u=ce(c),a=ce(e),r=0,o=a.length;r<o;r++)fr(a[r],u[r]);if(t)if(n)for(a=a||ce(e),u=u||ce(c),r=0,o=a.length;r<o;r++)Sn(a[r],u[r]);else Sn(e,c);return u=ce(c,\"script\"),u.length>0&&Vt(u,!f&&ce(e,\"script\")),c},cleanData:function(e){for(var t,n,r,o=i.event.special,a=0;(n=e[a])!==void 0;a++)if(G(n)){if(t=n[S.expando]){if(t.events)for(r in t.events)o[r]?i.event.remove(n,r):i.removeEvent(n,r,t.handle);n[S.expando]=void 0}n[ie.expando]&&(n[ie.expando]=void 0)}}}),i.fn.extend({detach:function(e){return Dn(this,e,!0)},remove:function(e){return Dn(this,e)},text:function(e){return z(this,function(t){return t===void 0?i.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=t)})},null,e,arguments.length)},append:function(){return ut(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=wn(this,e);t.appendChild(e)}})},prepend:function(){return ut(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=wn(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return ut(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return ut(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;(e=this[t])!=null;t++)e.nodeType===1&&(i.cleanData(ce(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=e??!1,t=t??e,this.map(function(){return i.clone(this,e,t)})},html:function(e){return z(this,function(t){var n=this[0]||{},r=0,o=this.length;if(t===void 0&&n.nodeType===1)return n.innerHTML;if(typeof t==\"string\"&&!ir.test(t)&&!xe[(xn.exec(t)||[\"\",\"\"])[1].toLowerCase()]){t=i.htmlPrefilter(t);try{for(;r<o;r++)n=this[r]||{},n.nodeType===1&&(i.cleanData(ce(n,!1)),n.innerHTML=t);n=0}catch{}}n&&this.empty().append(t)},null,e,arguments.length)},replaceWith:function(){var e=[];return ut(this,arguments,function(t){var n=this.parentNode;i.inArray(this,e)<0&&(i.cleanData(ce(this)),n&&n.replaceChild(t,this))},e)}}),i.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){i.fn[e]=function(n){for(var r,o=[],a=i(n),u=a.length-1,c=0;c<=u;c++)r=c===u?this:this.clone(!0),i(a[c])[t](r),ne.apply(o,r.get());return this.pushStack(o)}});var Zt=new RegExp(\"^(\"+yn+\")(?!px)[a-z%]+$\",\"i\"),Qt=/^--/,Mt=function(e){var t=e.ownerDocument.defaultView;return(!t||!t.opener)&&(t=A),t.getComputedStyle(e)},En=function(e,t,n){var r,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];r=n.call(e);for(o in t)e.style[o]=a[o];return r},cr=new RegExp(Le.join(\"|\"),\"i\");(function(){function e(){if(d){f.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",d.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",Ze.appendChild(f).appendChild(d);var y=A.getComputedStyle(d);n=y.top!==\"1%\",c=t(y.marginLeft)===12,d.style.right=\"60%\",a=t(y.right)===36,r=t(y.width)===36,d.style.position=\"absolute\",o=t(d.offsetWidth/3)===12,Ze.removeChild(f),d=null}}function t(y){return Math.round(parseFloat(y))}var n,r,o,a,u,c,f=q.createElement(\"div\"),d=q.createElement(\"div\");d.style&&(d.style.backgroundClip=\"content-box\",d.cloneNode(!0).style.backgroundClip=\"\",j.clearCloneStyle=d.style.backgroundClip===\"content-box\",i.extend(j,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),a},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),c},scrollboxSize:function(){return e(),o},reliableTrDimensions:function(){var y,m,h,x;return u==null&&(y=q.createElement(\"table\"),m=q.createElement(\"tr\"),h=q.createElement(\"div\"),y.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",m.style.cssText=\"box-sizing:content-box;border:1px solid\",m.style.height=\"1px\",h.style.height=\"9px\",h.style.display=\"block\",Ze.appendChild(y).appendChild(m).appendChild(h),x=A.getComputedStyle(m),u=parseInt(x.height,10)+parseInt(x.borderTopWidth,10)+parseInt(x.borderBottomWidth,10)===m.offsetHeight,Ze.removeChild(y)),u}}))})();function St(e,t,n){var r,o,a,u,c=Qt.test(t),f=e.style;return n=n||Mt(e),n&&(u=n.getPropertyValue(t)||n[t],c&&u&&(u=u.replace(Ve,\"$1\")||void 0),u===\"\"&&!rt(e)&&(u=i.style(e,t)),!j.pixelBoxStyles()&&Zt.test(u)&&cr.test(t)&&(r=f.width,o=f.minWidth,a=f.maxWidth,f.minWidth=f.maxWidth=f.width=u,u=n.width,f.width=r,f.minWidth=o,f.maxWidth=a)),u!==void 0?u+\"\":u}function An(e,t){return{get:function(){if(e()){delete this.get;return}return(this.get=t).apply(this,arguments)}}}var Nn=[\"Webkit\",\"Moz\",\"ms\"],kn=q.createElement(\"div\").style,jn={};function lr(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Nn.length;n--;)if(e=Nn[n]+t,e in kn)return e}function Gt(e){var t=i.cssProps[e]||jn[e];return t||(e in kn?e:jn[e]=lr(e)||e)}var dr=/^(none|table(?!-c[ea]).+)/,pr={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Pn={letterSpacing:\"0\",fontWeight:\"400\"};function qn(e,t,n){var r=Ct.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Yt(e,t,n,r,o,a){var u=t===\"width\"?1:0,c=0,f=0,d=0;if(n===(r?\"border\":\"content\"))return 0;for(;u<4;u+=2)n===\"margin\"&&(d+=i.css(e,n+Le[u],!0,o)),r?(n===\"content\"&&(f-=i.css(e,\"padding\"+Le[u],!0,o)),n!==\"margin\"&&(f-=i.css(e,\"border\"+Le[u]+\"Width\",!0,o))):(f+=i.css(e,\"padding\"+Le[u],!0,o),n!==\"padding\"?f+=i.css(e,\"border\"+Le[u]+\"Width\",!0,o):c+=i.css(e,\"border\"+Le[u]+\"Width\",!0,o));return!r&&a>=0&&(f+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-a-f-c-.5))||0),f+d}function On(e,t,n){var r=Mt(e),o=!j.boxSizingReliable()||n,a=o&&i.css(e,\"boxSizing\",!1,r)===\"border-box\",u=a,c=St(e,t,r),f=\"offset\"+t[0].toUpperCase()+t.slice(1);if(Zt.test(c)){if(!n)return c;c=\"auto\"}return(!j.boxSizingReliable()&&a||!j.reliableTrDimensions()&&_(e,\"tr\")||c===\"auto\"||!parseFloat(c)&&i.css(e,\"display\",!1,r)===\"inline\")&&e.getClientRects().length&&(a=i.css(e,\"boxSizing\",!1,r)===\"border-box\",u=f in e,u&&(c=e[f])),c=parseFloat(c)||0,c+Yt(e,t,n||(a?\"border\":\"content\"),u,r,c)+\"px\"}i.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=St(e,\"opacity\");return n===\"\"?\"1\":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(!(!e||e.nodeType===3||e.nodeType===8||!e.style)){var o,a,u,c=J(t),f=Qt.test(t),d=e.style;if(f||(t=Gt(c)),u=i.cssHooks[t]||i.cssHooks[c],n!==void 0){if(a=typeof n,a===\"string\"&&(o=Ct.exec(n))&&o[1]&&(n=vn(e,t,o),a=\"number\"),n==null||n!==n)return;a===\"number\"&&!f&&(n+=o&&o[3]||(i.cssNumber[c]?\"\":\"px\")),!j.clearCloneStyle&&n===\"\"&&t.indexOf(\"background\")===0&&(d[t]=\"inherit\"),(!u||!(\"set\"in u)||(n=u.set(e,n,r))!==void 0)&&(f?d.setProperty(t,n):d[t]=n)}else return u&&\"get\"in u&&(o=u.get(e,!1,r))!==void 0?o:d[t]}},css:function(e,t,n,r){var o,a,u,c=J(t),f=Qt.test(t);return f||(t=Gt(c)),u=i.cssHooks[t]||i.cssHooks[c],u&&\"get\"in u&&(o=u.get(e,!0,n)),o===void 0&&(o=St(e,t,r)),o===\"normal\"&&t in Pn&&(o=Pn[t]),n===\"\"||n?(a=parseFloat(o),n===!0||isFinite(a)?a||0:o):o}}),i.each([\"height\",\"width\"],function(e,t){i.cssHooks[t]={get:function(n,r,o){if(r)return dr.test(i.css(n,\"display\"))&&(!n.getClientRects().length||!n.getBoundingClientRect().width)?En(n,pr,function(){return On(n,t,o)}):On(n,t,o)},set:function(n,r,o){var a,u=Mt(n),c=!j.scrollboxSize()&&u.position===\"absolute\",f=c||o,d=f&&i.css(n,\"boxSizing\",!1,u)===\"border-box\",y=o?Yt(n,t,o,d,u):0;return d&&c&&(y-=Math.ceil(n[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(u[t])-Yt(n,t,\"border\",!1,u)-.5)),y&&(a=Ct.exec(r))&&(a[3]||\"px\")!==\"px\"&&(n.style[t]=r,r=i.css(n,t)),qn(n,r,y)}}}),i.cssHooks.marginLeft=An(j.reliableMarginLeft,function(e,t){if(t)return(parseFloat(St(e,\"marginLeft\"))||e.getBoundingClientRect().left-En(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),i.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){i.cssHooks[e+t]={expand:function(n){for(var r=0,o={},a=typeof n==\"string\"?n.split(\" \"):[n];r<4;r++)o[e+Le[r]+t]=a[r]||a[r-2]||a[0];return o}},e!==\"margin\"&&(i.cssHooks[e+t].set=qn)}),i.fn.extend({css:function(e,t){return z(this,function(n,r,o){var a,u,c={},f=0;if(Array.isArray(r)){for(a=Mt(n),u=r.length;f<u;f++)c[r[f]]=i.css(n,r[f],!1,a);return c}return o!==void 0?i.style(n,r,o):i.css(n,r)},e,t,arguments.length>1)}});function le(e,t,n,r,o){return new le.prototype.init(e,t,n,r,o)}i.Tween=le,le.prototype={constructor:le,init:function(e,t,n,r,o,a){this.elem=e,this.prop=n,this.easing=o||i.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=a||(i.cssNumber[n]?\"\":\"px\")},cur:function(){var e=le.propHooks[this.prop];return e&&e.get?e.get(this):le.propHooks._default.get(this)},run:function(e){var t,n=le.propHooks[this.prop];return this.options.duration?this.pos=t=i.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):le.propHooks._default.set(this),this}},le.prototype.init.prototype=le.prototype,le.propHooks={_default:{get:function(e){var t;return e.elem.nodeType!==1||e.elem[e.prop]!=null&&e.elem.style[e.prop]==null?e.elem[e.prop]:(t=i.css(e.elem,e.prop,\"\"),!t||t===\"auto\"?0:t)},set:function(e){i.fx.step[e.prop]?i.fx.step[e.prop](e):e.elem.nodeType===1&&(i.cssHooks[e.prop]||e.elem.style[Gt(e.prop)]!=null)?i.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},le.propHooks.scrollTop=le.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},i.easing={linear:function(e){return e},swing:function(e){return .5-Math.cos(e*Math.PI)/2},_default:\"swing\"},i.fx=le.prototype.init,i.fx.step={};var st,Lt,hr=/^(?:toggle|show|hide)$/,gr=/queueHooks$/;function Jt(){Lt&&(q.hidden===!1&&A.requestAnimationFrame?A.requestAnimationFrame(Jt):A.setTimeout(Jt,i.fx.interval),i.fx.tick())}function Hn(){return A.setTimeout(function(){st=void 0}),st=Date.now()}function zt(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=Le[r],o[\"margin\"+n]=o[\"padding\"+n]=e;return t&&(o.opacity=o.width=e),o}function Mn(e,t,n){for(var r,o=(Ce.tweeners[t]||[]).concat(Ce.tweeners[\"*\"]),a=0,u=o.length;a<u;a++)if(r=o[a].call(n,t,e))return r}function yr(e,t,n){var r,o,a,u,c,f,d,y,m=\"width\"in t||\"height\"in t,h=this,x={},P=e.style,W=e.nodeType&&Ot(e),L=S.get(e,\"fxshow\");n.queue||(u=i._queueHooks(e,\"fx\"),u.unqueued==null&&(u.unqueued=0,c=u.empty.fire,u.empty.fire=function(){u.unqueued||c()}),u.unqueued++,h.always(function(){h.always(function(){u.unqueued--,i.queue(e,\"fx\").length||u.empty.fire()})}));for(r in t)if(o=t[r],hr.test(o)){if(delete t[r],a=a||o===\"toggle\",o===(W?\"hide\":\"show\"))if(o===\"show\"&&L&&L[r]!==void 0)W=!0;else continue;x[r]=L&&L[r]||i.style(e,r)}if(f=!i.isEmptyObject(t),!(!f&&i.isEmptyObject(x))){m&&e.nodeType===1&&(n.overflow=[P.overflow,P.overflowX,P.overflowY],d=L&&L.display,d==null&&(d=S.get(e,\"display\")),y=i.css(e,\"display\"),y===\"none\"&&(d?y=d:(it([e],!0),d=e.style.display||d,y=i.css(e,\"display\"),it([e]))),(y===\"inline\"||y===\"inline-block\"&&d!=null)&&i.css(e,\"float\")===\"none\"&&(f||(h.done(function(){P.display=d}),d==null&&(y=P.display,d=y===\"none\"?\"\":y)),P.display=\"inline-block\")),n.overflow&&(P.overflow=\"hidden\",h.always(function(){P.overflow=n.overflow[0],P.overflowX=n.overflow[1],P.overflowY=n.overflow[2]})),f=!1;for(r in x)f||(L?\"hidden\"in L&&(W=L.hidden):L=S.access(e,\"fxshow\",{display:d}),a&&(L.hidden=!W),W&&it([e],!0),h.done(function(){W||it([e]),S.remove(e,\"fxshow\");for(r in x)i.style(e,r,x[r])})),f=Mn(W?L[r]:0,r,h),r in L||(L[r]=f.start,W&&(f.end=f.start,f.start=0))}}function vr(e,t){var n,r,o,a,u;for(n in e)if(r=J(n),o=t[r],a=e[n],Array.isArray(a)&&(o=a[1],a=e[n]=a[0]),n!==r&&(e[r]=a,delete e[n]),u=i.cssHooks[r],u&&\"expand\"in u){a=u.expand(a),delete e[r];for(n in a)n in e||(e[n]=a[n],t[n]=o)}else t[r]=o}function Ce(e,t,n){var r,o,a=0,u=Ce.prefilters.length,c=i.Deferred().always(function(){delete f.elem}),f=function(){if(o)return!1;for(var m=st||Hn(),h=Math.max(0,d.startTime+d.duration-m),x=h/d.duration||0,P=1-x,W=0,L=d.tweens.length;W<L;W++)d.tweens[W].run(P);return c.notifyWith(e,[d,P,h]),P<1&&L?h:(L||c.notifyWith(e,[d,1,0]),c.resolveWith(e,[d]),!1)},d=c.promise({elem:e,props:i.extend({},t),opts:i.extend(!0,{specialEasing:{},easing:i.easing._default},n),originalProperties:t,originalOptions:n,startTime:st||Hn(),duration:n.duration,tweens:[],createTween:function(m,h){var x=i.Tween(e,d.opts,m,h,d.opts.specialEasing[m]||d.opts.easing);return d.tweens.push(x),x},stop:function(m){var h=0,x=m?d.tweens.length:0;if(o)return this;for(o=!0;h<x;h++)d.tweens[h].run(1);return m?(c.notifyWith(e,[d,1,0]),c.resolveWith(e,[d,m])):c.rejectWith(e,[d,m]),this}}),y=d.props;for(vr(y,d.opts.specialEasing);a<u;a++)if(r=Ce.prefilters[a].call(d,e,y,d.opts),r)return H(r.stop)&&(i._queueHooks(d.elem,d.opts.queue).stop=r.stop.bind(r)),r;return i.map(y,Mn,d),H(d.opts.start)&&d.opts.start.call(e,d),d.progress(d.opts.progress).done(d.opts.done,d.opts.complete).fail(d.opts.fail).always(d.opts.always),i.fx.timer(i.extend(f,{elem:e,anim:d,queue:d.opts.queue})),d}i.Animation=i.extend(Ce,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return vn(n.elem,e,Ct.exec(t),n),n}]},tweener:function(e,t){H(e)?(t=e,e=[\"*\"]):e=e.match(pe);for(var n,r=0,o=e.length;r<o;r++)n=e[r],Ce.tweeners[n]=Ce.tweeners[n]||[],Ce.tweeners[n].unshift(t)},prefilters:[yr],prefilter:function(e,t){t?Ce.prefilters.unshift(e):Ce.prefilters.push(e)}}),i.speed=function(e,t,n){var r=e&&typeof e==\"object\"?i.extend({},e):{complete:n||!n&&t||H(e)&&e,duration:e,easing:n&&t||t&&!H(t)&&t};return i.fx.off?r.duration=0:typeof r.duration!=\"number\"&&(r.duration in i.fx.speeds?r.duration=i.fx.speeds[r.duration]:r.duration=i.fx.speeds._default),(r.queue==null||r.queue===!0)&&(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){H(r.old)&&r.old.call(this),r.queue&&i.dequeue(this,r.queue)},r},i.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Ot).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=i.isEmptyObject(e),a=i.speed(t,n,r),u=function(){var c=Ce(this,i.extend({},e),a);(o||S.get(this,\"finish\"))&&c.stop(!0)};return u.finish=u,o||a.queue===!1?this.each(u):this.queue(a.queue,u)},stop:function(e,t,n){var r=function(o){var a=o.stop;delete o.stop,a(n)};return typeof e!=\"string\"&&(n=t,t=e,e=void 0),t&&this.queue(e||\"fx\",[]),this.each(function(){var o=!0,a=e!=null&&e+\"queueHooks\",u=i.timers,c=S.get(this);if(a)c[a]&&c[a].stop&&r(c[a]);else for(a in c)c[a]&&c[a].stop&&gr.test(a)&&r(c[a]);for(a=u.length;a--;)u[a].elem===this&&(e==null||u[a].queue===e)&&(u[a].anim.stop(n),o=!1,u.splice(a,1));(o||!n)&&i.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=S.get(this),r=n[e+\"queue\"],o=n[e+\"queueHooks\"],a=i.timers,u=r?r.length:0;for(n.finish=!0,i.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=a.length;t--;)a[t].elem===this&&a[t].queue===e&&(a[t].anim.stop(!0),a.splice(t,1));for(t=0;t<u;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),i.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=i.fn[t];i.fn[t]=function(r,o,a){return r==null||typeof r==\"boolean\"?n.apply(this,arguments):this.animate(zt(t,!0),r,o,a)}}),i.each({slideDown:zt(\"show\"),slideUp:zt(\"hide\"),slideToggle:zt(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){i.fn[e]=function(n,r,o){return this.animate(t,n,r,o)}}),i.timers=[],i.fx.tick=function(){var e,t=0,n=i.timers;for(st=Date.now();t<n.length;t++)e=n[t],!e()&&n[t]===e&&n.splice(t--,1);n.length||i.fx.stop(),st=void 0},i.fx.timer=function(e){i.timers.push(e),i.fx.start()},i.fx.interval=13,i.fx.start=function(){Lt||(Lt=!0,Jt())},i.fx.stop=function(){Lt=null},i.fx.speeds={slow:600,fast:200,_default:400},i.fn.delay=function(e,t){return e=i.fx&&i.fx.speeds[e]||e,t=t||\"fx\",this.queue(t,function(n,r){var o=A.setTimeout(n,e);r.stop=function(){A.clearTimeout(o)}})},(function(){var e=q.createElement(\"input\"),t=q.createElement(\"select\"),n=t.appendChild(q.createElement(\"option\"));e.type=\"checkbox\",j.checkOn=e.value!==\"\",j.optSelected=n.selected,e=q.createElement(\"input\"),e.value=\"t\",e.type=\"radio\",j.radioValue=e.value===\"t\"})();var Ln,Dt=i.expr.attrHandle;i.fn.extend({attr:function(e,t){return z(this,i.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){i.removeAttr(this,e)})}}),i.extend({attr:function(e,t,n){var r,o,a=e.nodeType;if(!(a===3||a===8||a===2)){if(typeof e.getAttribute>\"u\")return i.prop(e,t,n);if((a!==1||!i.isXMLDoc(e))&&(o=i.attrHooks[t.toLowerCase()]||(i.expr.match.bool.test(t)?Ln:void 0)),n!==void 0){if(n===null){i.removeAttr(e,t);return}return o&&\"set\"in o&&(r=o.set(e,n,t))!==void 0?r:(e.setAttribute(t,n+\"\"),n)}return o&&\"get\"in o&&(r=o.get(e,t))!==null?r:(r=i.find.attr(e,t),r??void 0)}},attrHooks:{type:{set:function(e,t){if(!j.radioValue&&t===\"radio\"&&_(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(pe);if(o&&e.nodeType===1)for(;n=o[r++];)e.removeAttribute(n)}}),Ln={set:function(e,t,n){return t===!1?i.removeAttr(e,n):e.setAttribute(n,n),n}},i.each(i.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=Dt[t]||i.find.attr;Dt[t]=function(r,o,a){var u,c,f=o.toLowerCase();return a||(c=Dt[f],Dt[f]=u,u=n(r,o,a)!=null?f:null,Dt[f]=c),u}});var mr=/^(?:input|select|textarea|button)$/i,xr=/^(?:a|area)$/i;i.fn.extend({prop:function(e,t){return z(this,i.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[i.propFix[e]||e]})}}),i.extend({prop:function(e,t,n){var r,o,a=e.nodeType;if(!(a===3||a===8||a===2))return(a!==1||!i.isXMLDoc(e))&&(t=i.propFix[t]||t,o=i.propHooks[t]),n!==void 0?o&&\"set\"in o&&(r=o.set(e,n,t))!==void 0?r:e[t]=n:o&&\"get\"in o&&(r=o.get(e,t))!==null?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=i.find.attr(e,\"tabindex\");return t?parseInt(t,10):mr.test(e.nodeName)||xr.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),j.optSelected||(i.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),i.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){i.propFix[this.toLowerCase()]=this});function Qe(e){var t=e.match(pe)||[];return t.join(\" \")}function Ge(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function Kt(e){return Array.isArray(e)?e:typeof e==\"string\"?e.match(pe)||[]:[]}i.fn.extend({addClass:function(e){var t,n,r,o,a,u;return H(e)?this.each(function(c){i(this).addClass(e.call(this,c,Ge(this)))}):(t=Kt(e),t.length?this.each(function(){if(r=Ge(this),n=this.nodeType===1&&\" \"+Qe(r)+\" \",n){for(a=0;a<t.length;a++)o=t[a],n.indexOf(\" \"+o+\" \")<0&&(n+=o+\" \");u=Qe(n),r!==u&&this.setAttribute(\"class\",u)}}):this)},removeClass:function(e){var t,n,r,o,a,u;return H(e)?this.each(function(c){i(this).removeClass(e.call(this,c,Ge(this)))}):arguments.length?(t=Kt(e),t.length?this.each(function(){if(r=Ge(this),n=this.nodeType===1&&\" \"+Qe(r)+\" \",n){for(a=0;a<t.length;a++)for(o=t[a];n.indexOf(\" \"+o+\" \")>-1;)n=n.replace(\" \"+o+\" \",\" \");u=Qe(n),r!==u&&this.setAttribute(\"class\",u)}}):this):this.attr(\"class\",\"\")},toggleClass:function(e,t){var n,r,o,a,u=typeof e,c=u===\"string\"||Array.isArray(e);return H(e)?this.each(function(f){i(this).toggleClass(e.call(this,f,Ge(this),t),t)}):typeof t==\"boolean\"&&c?t?this.addClass(e):this.removeClass(e):(n=Kt(e),this.each(function(){if(c)for(a=i(this),o=0;o<n.length;o++)r=n[o],a.hasClass(r)?a.removeClass(r):a.addClass(r);else(e===void 0||u===\"boolean\")&&(r=Ge(this),r&&S.set(this,\"__className__\",r),this.setAttribute&&this.setAttribute(\"class\",r||e===!1?\"\":S.get(this,\"__className__\")||\"\"))}))},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(n.nodeType===1&&(\" \"+Qe(Ge(n))+\" \").indexOf(t)>-1)return!0;return!1}});var br=/\\r/g;i.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=H(e),this.each(function(a){var u;this.nodeType===1&&(r?u=e.call(this,a,i(this).val()):u=e,u==null?u=\"\":typeof u==\"number\"?u+=\"\":Array.isArray(u)&&(u=i.map(u,function(c){return c==null?\"\":c+\"\"})),t=i.valHooks[this.type]||i.valHooks[this.nodeName.toLowerCase()],(!t||!(\"set\"in t)||t.set(this,u,\"value\")===void 0)&&(this.value=u))})):o?(t=i.valHooks[o.type]||i.valHooks[o.nodeName.toLowerCase()],t&&\"get\"in t&&(n=t.get(o,\"value\"))!==void 0?n:(n=o.value,typeof n==\"string\"?n.replace(br,\"\"):n??\"\")):void 0}}),i.extend({valHooks:{option:{get:function(e){var t=i.find.attr(e,\"value\");return t??Qe(i.text(e))}},select:{get:function(e){var t,n,r,o=e.options,a=e.selectedIndex,u=e.type===\"select-one\",c=u?null:[],f=u?a+1:o.length;for(a<0?r=f:r=u?a:0;r<f;r++)if(n=o[r],(n.selected||r===a)&&!n.disabled&&(!n.parentNode.disabled||!_(n.parentNode,\"optgroup\"))){if(t=i(n).val(),u)return t;c.push(t)}return c},set:function(e,t){for(var n,r,o=e.options,a=i.makeArray(t),u=o.length;u--;)r=o[u],(r.selected=i.inArray(i.valHooks.option.get(r),a)>-1)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),i.each([\"radio\",\"checkbox\"],function(){i.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=i.inArray(i(e).val(),t)>-1}},j.checkOn||(i.valHooks[this].get=function(e){return e.getAttribute(\"value\")===null?\"on\":e.value})});var Et=A.location,zn={guid:Date.now()},en=/\\?/;i.parseXML=function(e){var t,n;if(!e||typeof e!=\"string\")return null;try{t=new A.DOMParser().parseFromString(e,\"text/xml\")}catch{}return n=t&&t.getElementsByTagName(\"parsererror\")[0],(!t||n)&&i.error(\"Invalid XML: \"+(n?i.map(n.childNodes,function(r){return r.textContent}).join(`\n`):e)),t};var In=/^(?:focusinfocus|focusoutblur)$/,Rn=function(e){e.stopPropagation()};i.extend(i.event,{trigger:function(e,t,n,r){var o,a,u,c,f,d,y,m,h=[n||q],x=he.call(e,\"type\")?e.type:e,P=he.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(a=m=u=n=n||q,!(n.nodeType===3||n.nodeType===8)&&!In.test(x+i.event.triggered)&&(x.indexOf(\".\")>-1&&(P=x.split(\".\"),x=P.shift(),P.sort()),f=x.indexOf(\":\")<0&&\"on\"+x,e=e[i.expando]?e:new i.Event(x,typeof e==\"object\"&&e),e.isTrigger=r?2:3,e.namespace=P.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+P.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=t==null?[e]:i.makeArray(t,[e]),y=i.event.special[x]||{},!(!r&&y.trigger&&y.trigger.apply(n,t)===!1))){if(!r&&!y.noBubble&&!qe(n)){for(c=y.delegateType||x,In.test(c+x)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(n.ownerDocument||q)&&h.push(u.defaultView||u.parentWindow||A)}for(o=0;(a=h[o++])&&!e.isPropagationStopped();)m=a,e.type=o>1?c:y.bindType||x,d=(S.get(a,\"events\")||Object.create(null))[e.type]&&S.get(a,\"handle\"),d&&d.apply(a,t),d=f&&a[f],d&&d.apply&&G(a)&&(e.result=d.apply(a,t),e.result===!1&&e.preventDefault());return e.type=x,!r&&!e.isDefaultPrevented()&&(!y._default||y._default.apply(h.pop(),t)===!1)&&G(n)&&f&&H(n[x])&&!qe(n)&&(u=n[f],u&&(n[f]=null),i.event.triggered=x,e.isPropagationStopped()&&m.addEventListener(x,Rn),n[x](),e.isPropagationStopped()&&m.removeEventListener(x,Rn),i.event.triggered=void 0,u&&(n[f]=u)),e.result}},simulate:function(e,t,n){var r=i.extend(new i.Event,n,{type:e,isSimulated:!0});i.event.trigger(r,null,t)}}),i.fn.extend({trigger:function(e,t){return this.each(function(){i.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return i.event.trigger(e,t,n,!0)}});var Tr=/\\[\\]$/,_n=/\\r?\\n/g,Cr=/^(?:submit|button|image|reset|file)$/i,wr=/^(?:input|select|textarea|keygen)/i;function tn(e,t,n,r){var o;if(Array.isArray(t))i.each(t,function(a,u){n||Tr.test(e)?r(e,u):tn(e+\"[\"+(typeof u==\"object\"&&u!=null?a:\"\")+\"]\",u,n,r)});else if(!n&&Oe(t)===\"object\")for(o in t)tn(e+\"[\"+o+\"]\",t[o],n,r);else r(e,t)}i.param=function(e,t){var n,r=[],o=function(a,u){var c=H(u)?u():u;r[r.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(c??\"\")};if(e==null)return\"\";if(Array.isArray(e)||e.jquery&&!i.isPlainObject(e))i.each(e,function(){o(this.name,this.value)});else for(n in e)tn(n,e[n],t,o);return r.join(\"&\")},i.fn.extend({serialize:function(){return i.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=i.prop(this,\"elements\");return e?i.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!i(this).is(\":disabled\")&&wr.test(this.nodeName)&&!Cr.test(e)&&(this.checked||!wt.test(e))}).map(function(e,t){var n=i(this).val();return n==null?null:Array.isArray(n)?i.map(n,function(r){return{name:t.name,value:r.replace(_n,`\\r\n`)}}):{name:t.name,value:n.replace(_n,`\\r\n`)}}).get()}});var Sr=/%20/g,Dr=/#.*$/,Er=/([?&])_=[^&]*/,Ar=/^(.*?):[ \\t]*([^\\r\\n]*)$/mg,Nr=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kr=/^(?:GET|HEAD)$/,jr=/^\\/\\//,Fn={},nn={},Wn=\"*/\".concat(\"*\"),rn=q.createElement(\"a\");rn.href=Et.href;function Bn(e){return function(t,n){typeof t!=\"string\"&&(n=t,t=\"*\");var r,o=0,a=t.toLowerCase().match(pe)||[];if(H(n))for(;r=a[o++];)r[0]===\"+\"?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function $n(e,t,n,r){var o={},a=e===nn;function u(c){var f;return o[c]=!0,i.each(e[c]||[],function(d,y){var m=y(t,n,r);if(typeof m==\"string\"&&!a&&!o[m])return t.dataTypes.unshift(m),u(m),!1;if(a)return!(f=m)}),f}return u(t.dataTypes[0])||!o[\"*\"]&&u(\"*\")}function on(e,t){var n,r,o=i.ajaxSettings.flatOptions||{};for(n in t)t[n]!==void 0&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&i.extend(!0,e,r),e}function Pr(e,t,n){for(var r,o,a,u,c=e.contents,f=e.dataTypes;f[0]===\"*\";)f.shift(),r===void 0&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r){for(o in c)if(c[o]&&c[o].test(r)){f.unshift(o);break}}if(f[0]in n)a=f[0];else{for(o in n){if(!f[0]||e.converters[o+\" \"+f[0]]){a=o;break}u||(u=o)}a=a||u}if(a)return a!==f[0]&&f.unshift(a),n[a]}function qr(e,t,n,r){var o,a,u,c,f,d={},y=e.dataTypes.slice();if(y[1])for(u in e.converters)d[u.toLowerCase()]=e.converters[u];for(a=y.shift();a;)if(e.responseFields[a]&&(n[e.responseFields[a]]=t),!f&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),f=a,a=y.shift(),a){if(a===\"*\")a=f;else if(f!==\"*\"&&f!==a){if(u=d[f+\" \"+a]||d[\"* \"+a],!u){for(o in d)if(c=o.split(\" \"),c[1]===a&&(u=d[f+\" \"+c[0]]||d[\"* \"+c[0]],u)){u===!0?u=d[o]:d[o]!==!0&&(a=c[0],y.unshift(c[1]));break}}if(u!==!0)if(u&&e.throws)t=u(t);else try{t=u(t)}catch(m){return{state:\"parsererror\",error:u?m:\"No conversion from \"+f+\" to \"+a}}}}return{state:\"success\",data:t}}i.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:\"GET\",isLocal:Nr.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Wn,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":i.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?on(on(e,i.ajaxSettings),t):on(i.ajaxSettings,e)},ajaxPrefilter:Bn(Fn),ajaxTransport:Bn(nn),ajax:function(e,t){typeof e==\"object\"&&(t=e,e=void 0),t=t||{};var n,r,o,a,u,c,f,d,y,m,h=i.ajaxSetup({},t),x=h.context||h,P=h.context&&(x.nodeType||x.jquery)?i(x):i.event,W=i.Deferred(),L=i.Callbacks(\"once memory\"),ue=h.statusCode||{},oe={},Ae={},Ne=\"canceled\",F={readyState:0,getResponseHeader:function(B){var te;if(f){if(!a)for(a={};te=Ar.exec(o);)a[te[1].toLowerCase()+\" \"]=(a[te[1].toLowerCase()+\" \"]||[]).concat(te[2]);te=a[B.toLowerCase()+\" \"]}return te==null?null:te.join(\", \")},getAllResponseHeaders:function(){return f?o:null},setRequestHeader:function(B,te){return f==null&&(B=Ae[B.toLowerCase()]=Ae[B.toLowerCase()]||B,oe[B]=te),this},overrideMimeType:function(B){return f==null&&(h.mimeType=B),this},statusCode:function(B){var te;if(B)if(f)F.always(B[F.status]);else for(te in B)ue[te]=[ue[te],B[te]];return this},abort:function(B){var te=B||Ne;return n&&n.abort(te),Ye(0,te),this}};if(W.promise(F),h.url=((e||h.url||Et.href)+\"\").replace(jr,Et.protocol+\"//\"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(pe)||[\"\"],h.crossDomain==null){c=q.createElement(\"a\");try{c.href=h.url,c.href=c.href,h.crossDomain=rn.protocol+\"//\"+rn.host!=c.protocol+\"//\"+c.host}catch{h.crossDomain=!0}}if(h.data&&h.processData&&typeof h.data!=\"string\"&&(h.data=i.param(h.data,h.traditional)),$n(Fn,h,t,F),f)return F;d=i.event&&h.global,d&&i.active++===0&&i.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!kr.test(h.type),r=h.url.replace(Dr,\"\"),h.hasContent?h.data&&h.processData&&(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")===0&&(h.data=h.data.replace(Sr,\"+\")):(m=h.url.slice(r.length),h.data&&(h.processData||typeof h.data==\"string\")&&(r+=(en.test(r)?\"&\":\"?\")+h.data,delete h.data),h.cache===!1&&(r=r.replace(Er,\"$1\"),m=(en.test(r)?\"&\":\"?\")+\"_=\"+zn.guid+++m),h.url=r+m),h.ifModified&&(i.lastModified[r]&&F.setRequestHeader(\"If-Modified-Since\",i.lastModified[r]),i.etag[r]&&F.setRequestHeader(\"If-None-Match\",i.etag[r])),(h.data&&h.hasContent&&h.contentType!==!1||t.contentType)&&F.setRequestHeader(\"Content-Type\",h.contentType),F.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(h.dataTypes[0]!==\"*\"?\", \"+Wn+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(y in h.headers)F.setRequestHeader(y,h.headers[y]);if(h.beforeSend&&(h.beforeSend.call(x,F,h)===!1||f))return F.abort();if(Ne=\"abort\",L.add(h.complete),F.done(h.success),F.fail(h.error),n=$n(nn,h,t,F),!n)Ye(-1,\"No Transport\");else{if(F.readyState=1,d&&P.trigger(\"ajaxSend\",[F,h]),f)return F;h.async&&h.timeout>0&&(u=A.setTimeout(function(){F.abort(\"timeout\")},h.timeout));try{f=!1,n.send(oe,Ye)}catch(B){if(f)throw B;Ye(-1,B)}}function Ye(B,te,Nt,un){var ke,kt,je,We,Be,be=te;f||(f=!0,u&&A.clearTimeout(u),n=void 0,o=un||\"\",F.readyState=B>0?4:0,ke=B>=200&&B<300||B===304,Nt&&(We=Pr(h,F,Nt)),!ke&&i.inArray(\"script\",h.dataTypes)>-1&&i.inArray(\"json\",h.dataTypes)<0&&(h.converters[\"text script\"]=function(){}),We=qr(h,We,F,ke),ke?(h.ifModified&&(Be=F.getResponseHeader(\"Last-Modified\"),Be&&(i.lastModified[r]=Be),Be=F.getResponseHeader(\"etag\"),Be&&(i.etag[r]=Be)),B===204||h.type===\"HEAD\"?be=\"nocontent\":B===304?be=\"notmodified\":(be=We.state,kt=We.data,je=We.error,ke=!je)):(je=be,(B||!be)&&(be=\"error\",B<0&&(B=0))),F.status=B,F.statusText=(te||be)+\"\",ke?W.resolveWith(x,[kt,be,F]):W.rejectWith(x,[F,be,je]),F.statusCode(ue),ue=void 0,d&&P.trigger(ke?\"ajaxSuccess\":\"ajaxError\",[F,h,ke?kt:je]),L.fireWith(x,[F,be]),d&&(P.trigger(\"ajaxComplete\",[F,h]),--i.active||i.event.trigger(\"ajaxStop\")))}return F},getJSON:function(e,t,n){return i.get(e,t,n,\"json\")},getScript:function(e,t){return i.get(e,void 0,t,\"script\")}}),i.each([\"get\",\"post\"],function(e,t){i[t]=function(n,r,o,a){return H(r)&&(a=a||o,o=r,r=void 0),i.ajax(i.extend({url:n,type:t,dataType:a,data:r,success:o},i.isPlainObject(n)&&n))}}),i.ajaxPrefilter(function(e){var t;for(t in e.headers)t.toLowerCase()===\"content-type\"&&(e.contentType=e.headers[t]||\"\")}),i._evalUrl=function(e,t,n){return i.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(r){i.globalEval(r,t,n)}})},i.fn.extend({wrapAll:function(e){var t;return this[0]&&(H(e)&&(e=e.call(this[0])),t=i(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var n=this;n.firstElementChild;)n=n.firstElementChild;return n}).append(this)),this},wrapInner:function(e){return H(e)?this.each(function(t){i(this).wrapInner(e.call(this,t))}):this.each(function(){var t=i(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=H(e);return this.each(function(n){i(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){i(this).replaceWith(this.childNodes)}),this}}),i.expr.pseudos.hidden=function(e){return!i.expr.pseudos.visible(e)},i.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},i.ajaxSettings.xhr=function(){try{return new A.XMLHttpRequest}catch{}};var Or={0:200,1223:204},At=i.ajaxSettings.xhr();j.cors=!!At&&\"withCredentials\"in At,j.ajax=At=!!At,i.ajaxTransport(function(e){var t,n;if(j.cors||At&&!e.crossDomain)return{send:function(r,o){var a,u=e.xhr();if(u.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)u[a]=e.xhrFields[a];e.mimeType&&u.overrideMimeType&&u.overrideMimeType(e.mimeType),!e.crossDomain&&!r[\"X-Requested-With\"]&&(r[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in r)u.setRequestHeader(a,r[a]);t=function(c){return function(){t&&(t=n=u.onload=u.onerror=u.onabort=u.ontimeout=u.onreadystatechange=null,c===\"abort\"?u.abort():c===\"error\"?typeof u.status!=\"number\"?o(0,\"error\"):o(u.status,u.statusText):o(Or[u.status]||u.status,u.statusText,(u.responseType||\"text\")!==\"text\"||typeof u.responseText!=\"string\"?{binary:u.response}:{text:u.responseText},u.getAllResponseHeaders()))}},u.onload=t(),n=u.onerror=u.ontimeout=t(\"error\"),u.onabort!==void 0?u.onabort=n:u.onreadystatechange=function(){u.readyState===4&&A.setTimeout(function(){t&&n()})},t=t(\"abort\");try{u.send(e.hasContent&&e.data||null)}catch(c){if(t)throw c}},abort:function(){t&&t()}}}),i.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),i.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return i.globalEval(e),e}}}),i.ajaxPrefilter(\"script\",function(e){e.cache===void 0&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),i.ajaxTransport(\"script\",function(e){if(e.crossDomain||e.scriptAttrs){var t,n;return{send:function(r,o){t=i(\"<script>\").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(a){t.remove(),n=null,a&&o(a.type===\"error\"?404:200,a.type)}),q.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Un=[],an=/(=)\\?(?=&|$)|\\?\\?/;i.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Un.pop()||i.expando+\"_\"+zn.guid++;return this[e]=!0,e}}),i.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,o,a,u=e.jsonp!==!1&&(an.test(e.url)?\"url\":typeof e.data==\"string\"&&(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")===0&&an.test(e.data)&&\"data\");if(u||e.dataTypes[0]===\"jsonp\")return r=e.jsonpCallback=H(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,u?e[u]=e[u].replace(an,\"$1\"+r):e.jsonp!==!1&&(e.url+=(en.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return a||i.error(r+\" was not called\"),a[0]},e.dataTypes[0]=\"json\",o=A[r],A[r]=function(){a=arguments},n.always(function(){o===void 0?i(A).removeProp(r):A[r]=o,e[r]&&(e.jsonpCallback=t.jsonpCallback,Un.push(r)),a&&H(o)&&o(a[0]),a=o=void 0}),\"script\"}),j.createHTMLDocument=(function(){var e=q.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",e.childNodes.length===2})(),i.parseHTML=function(e,t,n){if(typeof e!=\"string\")return[];typeof t==\"boolean\"&&(n=t,t=!1);var r,o,a;return t||(j.createHTMLDocument?(t=q.implementation.createHTMLDocument(\"\"),r=t.createElement(\"base\"),r.href=q.location.href,t.head.appendChild(r)):t=q),o=yt.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=Tn([e],t,a),a&&a.length&&i(a).remove(),i.merge([],o.childNodes))},i.fn.load=function(e,t,n){var r,o,a,u=this,c=e.indexOf(\" \");return c>-1&&(r=Qe(e.slice(c)),e=e.slice(0,c)),H(t)?(n=t,t=void 0):t&&typeof t==\"object\"&&(o=\"POST\"),u.length>0&&i.ajax({url:e,type:o||\"GET\",dataType:\"html\",data:t}).done(function(f){a=arguments,u.html(r?i(\"<div>\").append(i.parseHTML(f)).find(r):f)}).always(n&&function(f,d){u.each(function(){n.apply(this,a||[f.responseText,d,f])})}),this},i.expr.pseudos.animated=function(e){return i.grep(i.timers,function(t){return e===t.elem}).length},i.offset={setOffset:function(e,t,n){var r,o,a,u,c,f,d,y=i.css(e,\"position\"),m=i(e),h={};y===\"static\"&&(e.style.position=\"relative\"),c=m.offset(),a=i.css(e,\"top\"),f=i.css(e,\"left\"),d=(y===\"absolute\"||y===\"fixed\")&&(a+f).indexOf(\"auto\")>-1,d?(r=m.position(),u=r.top,o=r.left):(u=parseFloat(a)||0,o=parseFloat(f)||0),H(t)&&(t=t.call(e,n,i.extend({},c))),t.top!=null&&(h.top=t.top-c.top+u),t.left!=null&&(h.left=t.left-c.left+o),\"using\"in t?t.using.call(e,h):m.css(h)}},i.fn.extend({offset:function(e){if(arguments.length)return e===void 0?this:this.each(function(o){i.offset.setOffset(this,e,o)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if(i.css(r,\"position\")===\"fixed\")t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&i.css(e,\"position\")===\"static\";)e=e.parentNode;e&&e!==r&&e.nodeType===1&&(o=i(e).offset(),o.top+=i.css(e,\"borderTopWidth\",!0),o.left+=i.css(e,\"borderLeftWidth\",!0))}return{top:t.top-o.top-i.css(r,\"marginTop\",!0),left:t.left-o.left-i.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&i.css(e,\"position\")===\"static\";)e=e.offsetParent;return e||Ze})}}),i.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=t===\"pageYOffset\";i.fn[e]=function(r){return z(this,function(o,a,u){var c;if(qe(o)?c=o:o.nodeType===9&&(c=o.defaultView),u===void 0)return c?c[t]:o[a];c?c.scrollTo(n?c.pageXOffset:u,n?u:c.pageYOffset):o[a]=u},e,r,arguments.length)}}),i.each([\"top\",\"left\"],function(e,t){i.cssHooks[t]=An(j.pixelPosition,function(n,r){if(r)return r=St(n,t),Zt.test(r)?i(n).position()[t]+\"px\":r})}),i.each({Height:\"height\",Width:\"width\"},function(e,t){i.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){i.fn[r]=function(o,a){var u=arguments.length&&(n||typeof o!=\"boolean\"),c=n||(o===!0||a===!0?\"margin\":\"border\");return z(this,function(f,d,y){var m;return qe(f)?r.indexOf(\"outer\")===0?f[\"inner\"+e]:f.document.documentElement[\"client\"+e]:f.nodeType===9?(m=f.documentElement,Math.max(f.body[\"scroll\"+e],m[\"scroll\"+e],f.body[\"offset\"+e],m[\"offset\"+e],m[\"client\"+e])):y===void 0?i.css(f,d,c):i.style(f,d,y,c)},t,u?o:void 0,u)}})}),i.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){i.fn[t]=function(n){return this.on(t,n)}}),i.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.on(\"mouseenter\",e).on(\"mouseleave\",t||e)}}),i.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){i.fn[t]=function(n,r){return arguments.length>0?this.on(t,null,n,r):this.trigger(t)}});var Hr=/^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;i.proxy=function(e,t){var n,r,o;if(typeof t==\"string\"&&(n=e[t],t=e,e=n),!!H(e))return r=Z.call(arguments,2),o=function(){return e.apply(t||this,r.concat(Z.call(arguments)))},o.guid=e.guid=e.guid||i.guid++,o},i.holdReady=function(e){e?i.readyWait++:i.ready(!0)},i.isArray=Array.isArray,i.parseJSON=JSON.parse,i.nodeName=_,i.isFunction=H,i.isWindow=qe,i.camelCase=J,i.type=Oe,i.now=Date.now,i.isNumeric=function(e){var t=i.type(e);return(t===\"number\"||t===\"string\")&&!isNaN(e-parseFloat(e))},i.trim=function(e){return e==null?\"\":(e+\"\").replace(Hr,\"$1\")};var Mr=A.jQuery,Lr=A.$;return i.noConflict=function(e){return A.$===i&&(A.$=Lr),e&&A.jQuery===i&&(A.jQuery=Mr),i},typeof Se>\"u\"&&(A.jQuery=A.$=i),i})})(Wt)),Wt.exports}var Gn;function Zr(){return Gn||(Gn=1,(function(Re){(function(){var A=function(ae,Z){!ae||!Z||(Z.fn.cyPanzoom=Z.fn.cytoscapePanzoom=function(V){return Q.apply(this,[V,ae,Z]),this},ae(\"core\",\"panzoom\",function(V){return Q.apply(this,[V,ae,Z]),this}))},Se={zoomFactor:.05,zoomDelay:45,minZoom:.1,maxZoom:10,fitPadding:50,panSpeed:10,panDistance:10,panDragAreaSize:75,panMinPercentSpeed:.25,panInactiveArea:8,panIndicatorMinOpacity:.5,zoomOnly:!1,fitSelector:void 0,animateOnFit:function(){return!1},fitAnimationDuration:1e3,sliderHandleIcon:\"fa fa-minus\",zoomInIcon:\"fa fa-plus\",zoomOutIcon:\"fa fa-minus\",resetIcon:\"fa fa-expand\"},Q=function(ae,Z,V){var ne=this,N=V.extend(!0,{},Se,ae),De=ae,Ke={destroy:function(){var he=V(ne.container()),ge=he.find(\".cy-panzoom\");ge.data(\"winbdgs\").forEach(function(Ee){V(window).unbind(Ee.evt,Ee.fn)}),ge.data(\"cybdgs\").forEach(function(Ee){ne.off(Ee.evt,Ee.fn)}),ge.remove()},init:function(){return V(ne.container()).each(function(){var he=V(this);he.cytoscape=Z;var ge=[],Ee=V(window),j=function(M,E){ge.push({evt:M,fn:E}),Ee.bind(M,E)},H=function(M,E){for(var $=0;$<ge.length;$++){var z=ge[$];if(z.evt===M&&z.fn===E){ge.splice($,1);break}}Ee.unbind(M,E)},qe=[],q=function(M,E){qe.push({evt:M,fn:E}),ne.on(M,E)},ye=V('<div class=\"cy-panzoom\"></div>');he.prepend(ye),ye.css(\"position\",\"absolute\"),ye.data(\"winbdgs\",ge),ye.data(\"cybdgs\",qe),N.zoomOnly&&ye.addClass(\"cy-panzoom-zoom-only\");var lt=V('<div class=\"cy-panzoom-zoom-in cy-panzoom-zoom-button\"><span class=\"icon '+N.zoomInIcon+'\"></span></div>');ye.append(lt);var Oe=V('<div class=\"cy-panzoom-zoom-out cy-panzoom-zoom-button\"><span class=\"icon '+N.zoomOutIcon+'\"></span></div>');ye.append(Oe);var dt=V('<div class=\"cy-panzoom-reset cy-panzoom-zoom-button\"><span class=\"icon '+N.resetIcon+'\"></span></div>');ye.append(dt);var ve=V('<div class=\"cy-panzoom-slider\"></div>');ye.append(ve),ve.append('<div class=\"cy-panzoom-slider-background\"></div>');var i=V('<div class=\"cy-panzoom-slider-handle\"><span class=\"icon '+N.sliderHandleIcon+'\"></span></div>');ve.append(i);var Ue=V('<div class=\"cy-panzoom-no-zoom-tick\"></div>');ve.append(Ue);var _=V('<div class=\"cy-panzoom-panner\"></div>');ye.append(_);var pt=V('<div class=\"cy-panzoom-panner-handle\"></div>');_.append(pt);var Bt=V('<div class=\"cy-panzoom-pan-up cy-panzoom-pan-button\"></div>'),$t=V('<div class=\"cy-panzoom-pan-down cy-panzoom-pan-button\"></div>'),U=V('<div class=\"cy-panzoom-pan-left cy-panzoom-pan-button\"></div>'),Ve=V('<div class=\"cy-panzoom-pan-right cy-panzoom-pan-button\"></div>');_.append(Bt).append($t).append(U).append(Ve);var et=V('<div class=\"cy-panzoom-pan-indicator\"></div>');_.append(et);function Ut(M){var E={x:M.originalEvent.pageX-_.offset().left-_.width()/2,y:M.originalEvent.pageY-_.offset().top-_.height()/2},$=N.panDragAreaSize,z=Math.sqrt(E.x*E.x+E.y*E.y),K=Math.min(z/$,1);if(z<N.panInactiveArea)return{x:NaN,y:NaN};E={x:E.x/z,y:E.y/z},K=Math.max(N.panMinPercentSpeed,K);var ee={x:-1*E.x*(K*N.panDistance),y:-1*E.y*(K*N.panDistance)};return ee}function me(){clearInterval(mt),H(\"mousemove\",xt),et.hide()}function ht(M){var E=M,$=Math.sqrt(E.x*E.x+E.y*E.y),z={x:-1*E.x/$,y:-1*E.y/$},K=_.width(),ee=_.height(),re=$/N.panDistance,J=Math.max(N.panIndicatorMinOpacity,re),G=255-Math.round(J*255);et.show().css({left:K/2*z.x+K/2,top:ee/2*z.y+ee/2,background:\"rgb(\"+G+\", \"+G+\", \"+G+\")\"})}function He(){ne.pan(),ne.zoom(),nt=he.width()/2,vt=he.height()/2}var tt=!1;function gt(){tt=!0,He()}function yt(){tt=!1}var nt,vt;function Pt(M){tt||He(),ne.zoom({level:M,renderedPosition:{x:nt,y:vt}})}var mt,xt=function(M){M.stopPropagation(),M.preventDefault(),clearInterval(mt);var E=Ut(M);if(isNaN(E.x)||isNaN(E.y)){et.hide();return}ht(E),mt=setInterval(function(){ne.panBy(E)},N.panSpeed)};pt.bind(\"mousedown\",function(M){xt(M),j(\"mousemove\",xt)}),pt.bind(\"mouseup\",function(){me()}),j(\"mouseup blur\",function(){me()}),ve.bind(\"mousedown\",function(){return!1});var bt=!1,_e=2;function pe(M,E){E===void 0&&(E=0);var $=_e,z=0+$,K=ve.height()-i.height()-2*$,ee=M.pageY-ve.offset().top-E;ee<z&&(ee=z),ee>K&&(ee=K);var re=1-(ee-z)/(K-z);i.css(\"top\",ee);var J=N.minZoom,G=N.maxZoom,Fe=Math.log(J)/Math.log(G),S=(1-Fe)*re+Fe,ie=Math.pow(G,S);ie<J?ie=J:ie>G&&(ie=G),Pt(ie)}var qt,Me;i.bind(\"mousedown\",qt=function(M){var E=M.target===i[0]?M.offsetY:0;bt=!0,gt(),i.addClass(\"active\");var $=0;return j(\"mousemove\",Me=function(z){var K=+new Date;if(K>$+10)$=K;else return!1;return pe(z,E),!1}),j(\"mouseup\",function(){H(\"mousemove\",Me),bt=!1,i.removeClass(\"active\"),yt()}),!1}),ve.bind(\"mousedown\",function(M){M.target!==i[0]&&(qt(M),pe(M))});function Xe(){var M=ne.zoom(),E=N.minZoom,$=N.maxZoom,z=Math.log(E)/Math.log($),K=Math.log(M)/Math.log($),ee=1-(K-z)/(1-z),re=_e,J=ve.height()-i.height()-2*_e,G=ee*(J-re);G<re&&(G=re),G>J&&(G=J),i.css(\"top\",G)}Xe(),q(\"zoom\",function(){bt||Xe()}),(function(){var M=1,E=N.minZoom,$=N.maxZoom,z=Math.log(E)/Math.log($),K=Math.log(M)/Math.log($),ee=1-(K-z)/(1-z);if(ee>1||ee<0){Ue.hide();return}var re=_e,J=ve.height()-i.height()-2*_e,G=ee*(J-re);G<re&&(G=re),G>J&&(G=J),Ue.css(\"top\",G)})();function Tt(M,E){var $;M.bind(\"mousedown\",function(z){if(z.preventDefault(),z.stopPropagation(),z.button==0){var K=function(){var ee=ne.zoom(),re=ne.zoom()*E;re<N.minZoom&&(re=N.minZoom),re>N.maxZoom&&(re=N.maxZoom),!(re==N.maxZoom&&ee==N.maxZoom||re==N.minZoom&&ee==N.minZoom)&&Pt(re)};return gt(),K(),$=setInterval(K,N.zoomDelay),!1}}),j(\"mouseup blur\",function(){clearInterval($),yt()})}Tt(lt,1+N.zoomFactor),Tt(Oe,1-N.zoomFactor),dt.bind(\"mousedown\",function(M){if(M.button==0){var E=N.fitSelector?ne.elements(N.fitSelector):ne.elements();if(E.size()===0)ne.reset();else{var $=typeof N.animateOnFit==\"function\"?N.animateOnFit.call():N.animateOnFit;$?ne.animate({fit:{eles:E,padding:N.fitPadding}},{duration:N.fitAnimationDuration}):ne.fit(E,N.fitPadding)}return!1}})})}};return Ke[De]?Ke[De].apply(this,Array.prototype.slice.call(arguments,1)):typeof De==\"object\"||!De?Ke.init.apply(this,arguments):(V.error(\"No such function `\"+De+\"` for jquery.cytoscapePanzoom\"),V(this))};Re.exports&&(Re.exports=function(ae,Z){A(ae,Z||Xr())}),typeof cytoscape<\"u\"&&typeof jQuery<\"u\"&&A(cytoscape,jQuery)})()})(hn)),hn.exports}var Yn=Zr();const Qr=$r(Yn),Yr=Ur({__proto__:null,default:Qr},[Yn]);export{Yr as c};\n"
  },
  {
    "path": "public/build/assets/cytoscape.esm-BJ4qIETX.js",
    "content": "function Bs(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,a=Array(e);t<e;t++)a[t]=r[t];return a}function ec(r){if(Array.isArray(r))return r}function rc(r){if(Array.isArray(r))return Bs(r)}function ht(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function tc(r,e){for(var t=0;t<e.length;t++){var a=e[t];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(r,jl(a.key),a)}}function gt(r,e,t){return e&&tc(r.prototype,e),Object.defineProperty(r,\"prototype\",{writable:!1}),r}function kr(r,e){var t=typeof Symbol<\"u\"&&r[Symbol.iterator]||r[\"@@iterator\"];if(!t){if(Array.isArray(r)||(t=Xs(r))||e){t&&(r=t);var a=0,n=function(){};return{s:n,n:function(){return a>=r.length?{done:!0}:{done:!1,value:r[a++]}},e:function(l){throw l},f:n}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i,s=!0,o=!1;return{s:function(){t=t.call(r)},n:function(){var l=t.next();return s=l.done,l},e:function(l){o=!0,i=l},f:function(){try{s||t.return==null||t.return()}finally{if(o)throw i}}}}function Jl(r,e,t){return(e=jl(e))in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function ac(r){if(typeof Symbol<\"u\"&&r[Symbol.iterator]!=null||r[\"@@iterator\"]!=null)return Array.from(r)}function nc(r,e){var t=r==null?null:typeof Symbol<\"u\"&&r[Symbol.iterator]||r[\"@@iterator\"];if(t!=null){var a,n,i,s,o=[],l=!0,u=!1;try{if(i=(t=t.call(r)).next,e===0){if(Object(t)!==t)return;l=!1}else for(;!(l=(a=i.call(t)).done)&&(o.push(a.value),o.length!==e);l=!0);}catch(v){u=!0,n=v}finally{try{if(!l&&t.return!=null&&(s=t.return(),Object(s)!==s))return}finally{if(u)throw n}}return o}}function ic(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function sc(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Je(r,e){return ec(r)||nc(r,e)||Xs(r,e)||ic()}function mn(r){return rc(r)||ac(r)||Xs(r)||sc()}function oc(r,e){if(typeof r!=\"object\"||!r)return r;var t=r[Symbol.toPrimitive];if(t!==void 0){var a=t.call(r,e);if(typeof a!=\"object\")return a;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(r)}function jl(r){var e=oc(r,\"string\");return typeof e==\"symbol\"?e:e+\"\"}function ar(r){\"@babel/helpers - typeof\";return ar=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(e){return typeof e}:function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},ar(r)}function Xs(r,e){if(r){if(typeof r==\"string\")return Bs(r,e);var t={}.toString.call(r).slice(8,-1);return t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\"?Array.from(r):t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Bs(r,e):void 0}}var rr=typeof window>\"u\"?null:window,To=rr?rr.navigator:null;rr&&rr.document;var uc=ar(\"\"),ev=ar({}),lc=ar(function(){}),vc=typeof HTMLElement>\"u\"?\"undefined\":ar(HTMLElement),La=function(e){return e&&e.instanceString&&Ue(e.instanceString)?e.instanceString():null},ge=function(e){return e!=null&&ar(e)==uc},Ue=function(e){return e!=null&&ar(e)===lc},_e=function(e){return!Dr(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},Le=function(e){return e!=null&&ar(e)===ev&&!_e(e)&&e.constructor===Object},fc=function(e){return e!=null&&ar(e)===ev},ae=function(e){return e!=null&&ar(e)===ar(1)&&!isNaN(e)},cc=function(e){return ae(e)&&Math.floor(e)===e},bn=function(e){if(vc!==\"undefined\")return e!=null&&e instanceof HTMLElement},Dr=function(e){return Ia(e)||rv(e)},Ia=function(e){return La(e)===\"collection\"&&e._private.single},rv=function(e){return La(e)===\"collection\"&&!e._private.single},Ys=function(e){return La(e)===\"core\"},tv=function(e){return La(e)===\"stylesheet\"},dc=function(e){return La(e)===\"event\"},ut=function(e){return e==null?!0:!!(e===\"\"||e.match(/^\\s+$/))},hc=function(e){return typeof HTMLElement>\"u\"?!1:e instanceof HTMLElement},gc=function(e){return Le(e)&&ae(e.x1)&&ae(e.x2)&&ae(e.y1)&&ae(e.y2)},pc=function(e){return fc(e)&&Ue(e.then)},yc=function(){return To&&To.userAgent.match(/msie|trident|edge/i)},Qt=function(e,t){t||(t=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return\"undefined\";for(var i=[],s=0;s<arguments.length;s++)i.push(arguments[s]);return i.join(\"$\")});var a=function(){var i=this,s=arguments,o,l=t.apply(i,s),u=a.cache;return(o=u[l])||(o=u[l]=e.apply(i,s)),o};return a.cache={},a},Zs=Qt(function(r){return r.replace(/([A-Z])/g,function(e){return\"-\"+e.toLowerCase()})}),Mn=Qt(function(r){return r.replace(/(-\\w)/g,function(e){return e[1].toUpperCase()})}),av=Qt(function(r,e){return r+e[0].toUpperCase()+e.substring(1)},function(r,e){return r+\"$\"+e}),So=function(e){return ut(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},at=function(e,t){return e.slice(-1*t.length)===t},tr=\"(?:[-+]?(?:(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[Ee][+-]?\\\\d+)?))\",mc=\"rgb[a]?\\\\((\"+tr+\"[%]?)\\\\s*,\\\\s*(\"+tr+\"[%]?)\\\\s*,\\\\s*(\"+tr+\"[%]?)(?:\\\\s*,\\\\s*(\"+tr+\"))?\\\\)\",bc=\"rgb[a]?\\\\((?:\"+tr+\"[%]?)\\\\s*,\\\\s*(?:\"+tr+\"[%]?)\\\\s*,\\\\s*(?:\"+tr+\"[%]?)(?:\\\\s*,\\\\s*(?:\"+tr+\"))?\\\\)\",wc=\"hsl[a]?\\\\((\"+tr+\")\\\\s*,\\\\s*(\"+tr+\"[%])\\\\s*,\\\\s*(\"+tr+\"[%])(?:\\\\s*,\\\\s*(\"+tr+\"))?\\\\)\",xc=\"hsl[a]?\\\\((?:\"+tr+\")\\\\s*,\\\\s*(?:\"+tr+\"[%])\\\\s*,\\\\s*(?:\"+tr+\"[%])(?:\\\\s*,\\\\s*(?:\"+tr+\"))?\\\\)\",Ec=\"\\\\#[0-9a-fA-F]{3}\",Cc=\"\\\\#[0-9a-fA-F]{6}\",nv=function(e,t){return e<t?-1:e>t?1:0},Tc=function(e,t){return-1*nv(e,t)},be=Object.assign!=null?Object.assign.bind(Object):function(r){for(var e=arguments,t=1;t<e.length;t++){var a=e[t];if(a!=null)for(var n=Object.keys(a),i=0;i<n.length;i++){var s=n[i];r[s]=a[s]}}return r},Sc=function(e){if(!(!(e.length===4||e.length===7)||e[0]!==\"#\")){var t=e.length===4,a,n,i,s=16;return t?(a=parseInt(e[1]+e[1],s),n=parseInt(e[2]+e[2],s),i=parseInt(e[3]+e[3],s)):(a=parseInt(e[1]+e[2],s),n=parseInt(e[3]+e[4],s),i=parseInt(e[5]+e[6],s)),[a,n,i]}},kc=function(e){var t,a,n,i,s,o,l,u;function v(d,y,g){return g<0&&(g+=1),g>1&&(g-=1),g<1/6?d+(y-d)*6*g:g<1/2?y:g<2/3?d+(y-d)*(2/3-g)*6:d}var f=new RegExp(\"^\"+wc+\"$\").exec(e);if(f){if(a=parseInt(f[1]),a<0?a=(360- -1*a%360)%360:a>360&&(a=a%360),a/=360,n=parseFloat(f[2]),n<0||n>100||(n=n/100,i=parseFloat(f[3]),i<0||i>100)||(i=i/100,s=f[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(n===0)o=l=u=Math.round(i*255);else{var c=i<.5?i*(1+n):i+n-i*n,h=2*i-c;o=Math.round(255*v(h,c,a+1/3)),l=Math.round(255*v(h,c,a)),u=Math.round(255*v(h,c,a-1/3))}t=[o,l,u,s]}return t},Dc=function(e){var t,a=new RegExp(\"^\"+mc+\"$\").exec(e);if(a){t=[];for(var n=[],i=1;i<=3;i++){var s=a[i];if(s[s.length-1]===\"%\"&&(n[i]=!0),s=parseFloat(s),n[i]&&(s=s/100*255),s<0||s>255)return;t.push(Math.floor(s))}var o=n[1]||n[2]||n[3],l=n[1]&&n[2]&&n[3];if(o&&!l)return;var u=a[4];if(u!==void 0){if(u=parseFloat(u),u<0||u>1)return;t.push(u)}}return t},Bc=function(e){return Pc[e.toLowerCase()]},iv=function(e){return(_e(e)?e:null)||Bc(e)||Sc(e)||Dc(e)||kc(e)},Pc={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},sv=function(e){for(var t=e.map,a=e.keys,n=a.length,i=0;i<n;i++){var s=a[i];if(Le(s))throw Error(\"Tried to set map with object key\");i<a.length-1?(t[s]==null&&(t[s]={}),t=t[s]):t[s]=e.value}},ov=function(e){for(var t=e.map,a=e.keys,n=a.length,i=0;i<n;i++){var s=a[i];if(Le(s))throw Error(\"Tried to get map with object key\");if(t=t[s],t==null)return t}return t},Ka=typeof globalThis<\"u\"?globalThis:typeof window<\"u\"?window:typeof global<\"u\"?global:typeof self<\"u\"?self:{};function Oa(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,\"default\")?r.default:r}var Jn,ko;function Na(){if(ko)return Jn;ko=1;function r(e){var t=typeof e;return e!=null&&(t==\"object\"||t==\"function\")}return Jn=r,Jn}var jn,Do;function Ac(){if(Do)return jn;Do=1;var r=typeof Ka==\"object\"&&Ka&&Ka.Object===Object&&Ka;return jn=r,jn}var ei,Bo;function Ln(){if(Bo)return ei;Bo=1;var r=Ac(),e=typeof self==\"object\"&&self&&self.Object===Object&&self,t=r||e||Function(\"return this\")();return ei=t,ei}var ri,Po;function Rc(){if(Po)return ri;Po=1;var r=Ln(),e=function(){return r.Date.now()};return ri=e,ri}var ti,Ao;function Mc(){if(Ao)return ti;Ao=1;var r=/\\s/;function e(t){for(var a=t.length;a--&&r.test(t.charAt(a)););return a}return ti=e,ti}var ai,Ro;function Lc(){if(Ro)return ai;Ro=1;var r=Mc(),e=/^\\s+/;function t(a){return a&&a.slice(0,r(a)+1).replace(e,\"\")}return ai=t,ai}var ni,Mo;function Qs(){if(Mo)return ni;Mo=1;var r=Ln(),e=r.Symbol;return ni=e,ni}var ii,Lo;function Ic(){if(Lo)return ii;Lo=1;var r=Qs(),e=Object.prototype,t=e.hasOwnProperty,a=e.toString,n=r?r.toStringTag:void 0;function i(s){var o=t.call(s,n),l=s[n];try{s[n]=void 0;var u=!0}catch{}var v=a.call(s);return u&&(o?s[n]=l:delete s[n]),v}return ii=i,ii}var si,Io;function Oc(){if(Io)return si;Io=1;var r=Object.prototype,e=r.toString;function t(a){return e.call(a)}return si=t,si}var oi,Oo;function uv(){if(Oo)return oi;Oo=1;var r=Qs(),e=Ic(),t=Oc(),a=\"[object Null]\",n=\"[object Undefined]\",i=r?r.toStringTag:void 0;function s(o){return o==null?o===void 0?n:a:i&&i in Object(o)?e(o):t(o)}return oi=s,oi}var ui,No;function Nc(){if(No)return ui;No=1;function r(e){return e!=null&&typeof e==\"object\"}return ui=r,ui}var li,zo;function za(){if(zo)return li;zo=1;var r=uv(),e=Nc(),t=\"[object Symbol]\";function a(n){return typeof n==\"symbol\"||e(n)&&r(n)==t}return li=a,li}var vi,Fo;function zc(){if(Fo)return vi;Fo=1;var r=Lc(),e=Na(),t=za(),a=NaN,n=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,s=/^0o[0-7]+$/i,o=parseInt;function l(u){if(typeof u==\"number\")return u;if(t(u))return a;if(e(u)){var v=typeof u.valueOf==\"function\"?u.valueOf():u;u=e(v)?v+\"\":v}if(typeof u!=\"string\")return u===0?u:+u;u=r(u);var f=i.test(u);return f||s.test(u)?o(u.slice(2),f?2:8):n.test(u)?a:+u}return vi=l,vi}var fi,Vo;function Fc(){if(Vo)return fi;Vo=1;var r=Na(),e=Rc(),t=zc(),a=\"Expected a function\",n=Math.max,i=Math.min;function s(o,l,u){var v,f,c,h,d,y,g=0,p=!1,m=!1,b=!0;if(typeof o!=\"function\")throw new TypeError(a);l=t(l)||0,r(u)&&(p=!!u.leading,m=\"maxWait\"in u,c=m?n(t(u.maxWait)||0,l):c,b=\"trailing\"in u?!!u.trailing:b);function w(A){var R=v,L=f;return v=f=void 0,g=A,h=o.apply(L,R),h}function E(A){return g=A,d=setTimeout(T,l),p?w(A):h}function C(A){var R=A-y,L=A-g,I=l-R;return m?i(I,c-L):I}function x(A){var R=A-y,L=A-g;return y===void 0||R>=l||R<0||m&&L>=c}function T(){var A=e();if(x(A))return k(A);d=setTimeout(T,C(A))}function k(A){return d=void 0,b&&v?w(A):(v=f=void 0,h)}function D(){d!==void 0&&clearTimeout(d),g=0,v=y=f=d=void 0}function B(){return d===void 0?h:k(e())}function P(){var A=e(),R=x(A);if(v=arguments,f=this,y=A,R){if(d===void 0)return E(y);if(m)return clearTimeout(d),d=setTimeout(T,l),w(y)}return d===void 0&&(d=setTimeout(T,l)),h}return P.cancel=D,P.flush=B,P}return fi=s,fi}var Vc=Fc(),Fa=Oa(Vc),ci=rr?rr.performance:null,lv=ci&&ci.now?function(){return ci.now()}:function(){return Date.now()},qc=(function(){if(rr){if(rr.requestAnimationFrame)return function(r){rr.requestAnimationFrame(r)};if(rr.mozRequestAnimationFrame)return function(r){rr.mozRequestAnimationFrame(r)};if(rr.webkitRequestAnimationFrame)return function(r){rr.webkitRequestAnimationFrame(r)};if(rr.msRequestAnimationFrame)return function(r){rr.msRequestAnimationFrame(r)}}return function(r){r&&setTimeout(function(){r(lv())},1e3/60)}})(),wn=function(e){return qc(e)},Yr=lv,Tt=9261,vv=65599,Ht=5381,fv=function(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Tt,a=t,n;n=e.next(),!n.done;)a=a*vv+n.value|0;return a},Ca=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Tt;return t*vv+e|0},Ta=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ht;return(t<<5)+t+e|0},_c=function(e,t){return e*2097152+t},et=function(e){return e[0]*2097152+e[1]},Xa=function(e,t){return[Ca(e[0],t[0]),Ta(e[1],t[1])]},qo=function(e,t){var a={value:0,done:!1},n=0,i=e.length,s={next:function(){return n<i?a.value=e[n++]:a.done=!0,a}};return fv(s,t)},Dt=function(e,t){var a={value:0,done:!1},n=0,i=e.length,s={next:function(){return n<i?a.value=e.charCodeAt(n++):a.done=!0,a}};return fv(s,t)},cv=function(){return Gc(arguments)},Gc=function(e){for(var t,a=0;a<e.length;a++){var n=e[a];a===0?t=Dt(n):t=Dt(n,t)}return t};function Hc(r,e,t,a,n){var i=n*Math.PI/180,s=Math.cos(i)*(r-t)-Math.sin(i)*(e-a)+t,o=Math.sin(i)*(r-t)+Math.cos(i)*(e-a)+a;return{x:s,y:o}}var Wc=function(e,t,a,n,i,s){return{x:(e-a)*i+a,y:(t-n)*s+n}};function $c(r,e,t){if(t===0)return r;var a=(e.x1+e.x2)/2,n=(e.y1+e.y2)/2,i=e.w/e.h,s=1/i,o=Hc(r.x,r.y,a,n,t),l=Wc(o.x,o.y,a,n,i,s);return{x:l.x,y:l.y}}var _o=!0,Uc=console.warn!=null,Kc=console.trace!=null,Js=Number.MAX_SAFE_INTEGER||9007199254740991,dv=function(){return!0},xn=function(){return!1},Go=function(){return 0},js=function(){},$e=function(e){throw new Error(e)},hv=function(e){if(e!==void 0)_o=!!e;else return _o},Ve=function(e){hv()&&(Uc?console.warn(e):(console.log(e),Kc&&console.trace()))},Xc=function(e){return be({},e)},qr=function(e){return e==null?e:_e(e)?e.slice():Le(e)?Xc(e):e},Yc=function(e){return e.slice()},gv=function(e,t){for(t=e=\"\";e++<36;t+=e*51&52?(e^15?8^Math.random()*(e^20?16:4):4).toString(16):\"-\");return t},Zc={},pv=function(){return Zc},cr=function(e){var t=Object.keys(e);return function(a){for(var n={},i=0;i<t.length;i++){var s=t[i],o=a?.[s];n[s]=o===void 0?e[s]:o}return n}},lt=function(e,t,a){for(var n=e.length-1;n>=0;n--)e[n]===t&&e.splice(n,1)},eo=function(e){e.splice(0,e.length)},Qc=function(e,t){for(var a=0;a<t.length;a++){var n=t[a];e.push(n)}},Tr=function(e,t,a){return a&&(t=av(a,t)),e[t]},Kr=function(e,t,a,n){a&&(t=av(a,t)),e[t]=n},Jc=(function(){function r(){ht(this,r),this._obj={}}return gt(r,[{key:\"set\",value:function(t,a){return this._obj[t]=a,this}},{key:\"delete\",value:function(t){return this._obj[t]=void 0,this}},{key:\"clear\",value:function(){this._obj={}}},{key:\"has\",value:function(t){return this._obj[t]!==void 0}},{key:\"get\",value:function(t){return this._obj[t]}}])})(),Xr=typeof Map<\"u\"?Map:Jc,jc=\"undefined\",ed=(function(){function r(e){if(ht(this,r),this._obj=Object.create(null),this.size=0,e!=null){var t;e.instanceString!=null&&e.instanceString()===this.instanceString()?t=e.toArray():t=e;for(var a=0;a<t.length;a++)this.add(t[a])}}return gt(r,[{key:\"instanceString\",value:function(){return\"set\"}},{key:\"add\",value:function(t){var a=this._obj;a[t]!==1&&(a[t]=1,this.size++)}},{key:\"delete\",value:function(t){var a=this._obj;a[t]===1&&(a[t]=0,this.size--)}},{key:\"clear\",value:function(){this._obj=Object.create(null)}},{key:\"has\",value:function(t){return this._obj[t]===1}},{key:\"toArray\",value:function(){var t=this;return Object.keys(this._obj).filter(function(a){return t.has(a)})}},{key:\"forEach\",value:function(t,a){return this.toArray().forEach(t,a)}}])})(),ra=(typeof Set>\"u\"?\"undefined\":ar(Set))!==jc?Set:ed,In=function(e,t){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||t===void 0||!Ys(e)){$e(\"An element must have a core reference and parameters set\");return}var n=t.group;if(n==null&&(t.data&&t.data.source!=null&&t.data.target!=null?n=\"edges\":n=\"nodes\"),n!==\"nodes\"&&n!==\"edges\"){$e(\"An element must be of type `nodes` or `edges`; you specified `\"+n+\"`\");return}this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:n,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:t.selectable===void 0?!0:!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:t.grabbable===void 0?!0:!!t.grabbable,pannable:t.pannable===void 0?n===\"edges\":!!t.pannable,active:!1,classes:new ra,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,\"mid-source\":null,\"mid-target\":null}};if(i.position.x==null&&(i.position.x=0),i.position.y==null&&(i.position.y=0),t.renderedPosition){var s=t.renderedPosition,o=e.pan(),l=e.zoom();i.position={x:(s.x-o.x)/l,y:(s.y-o.y)/l}}var u=[];_e(t.classes)?u=t.classes:ge(t.classes)&&(u=t.classes.split(/\\s+/));for(var v=0,f=u.length;v<f;v++){var c=u[v];!c||c===\"\"||i.classes.add(c)}this.createEmitter(),(a===void 0||a)&&this.restore();var h=t.style||t.css;h&&(Ve(\"Setting a `style` bypass at element creation should be done only when absolutely necessary.  Try to use the stylesheet instead.\"),this.style(h))},Ho=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(a,n,i){var s;Le(a)&&!Dr(a)&&(s=a,a=s.roots||s.root,n=s.visit,i=s.directed),i=arguments.length===2&&!Ue(n)?n:i,n=Ue(n)?n:function(){};for(var o=this._private.cy,l=a=ge(a)?this.filter(a):a,u=[],v=[],f={},c={},h={},d=0,y,g=this.byGroup(),p=g.nodes,m=g.edges,b=0;b<l.length;b++){var w=l[b],E=w.id();w.isNode()&&(u.unshift(w),e.bfs&&(h[E]=!0,v.push(w)),c[E]=0)}for(var C=function(){var A=e.bfs?u.shift():u.pop(),R=A.id();if(e.dfs){if(h[R])return 0;h[R]=!0,v.push(A)}var L=c[R],I=f[R],M=I!=null?I.source():null,O=I!=null?I.target():null,V=I==null?void 0:A.same(M)?O[0]:M[0],G;if(G=n(A,I,V,d++,L),G===!0)return y=A,1;if(G===!1)return 1;for(var N=A.connectedEdges().filter(function(j){return(!i||j.source().same(A))&&m.has(j)}),F=0;F<N.length;F++){var U=N[F],Q=U.connectedNodes().filter(function(j){return!j.same(A)&&p.has(j)}),K=Q.id();Q.length!==0&&!h[K]&&(Q=Q[0],u.push(Q),e.bfs&&(h[K]=!0,v.push(Q)),f[K]=U,c[K]=c[R]+1)}},x;u.length!==0&&(x=C(),!(x!==0&&x===1)););for(var T=o.collection(),k=0;k<v.length;k++){var D=v[k],B=f[D.id()];B!=null&&T.push(B),T.push(D)}return{path:o.collection(T),found:o.collection(y)}}},Sa={breadthFirstSearch:Ho({bfs:!0}),depthFirstSearch:Ho({dfs:!0})};Sa.bfs=Sa.breadthFirstSearch;Sa.dfs=Sa.depthFirstSearch;var on={exports:{}},rd=on.exports,Wo;function td(){return Wo||(Wo=1,(function(r,e){(function(){var t,a,n,i,s,o,l,u,v,f,c,h,d,y,g;n=Math.floor,f=Math.min,a=function(p,m){return p<m?-1:p>m?1:0},v=function(p,m,b,w,E){var C;if(b==null&&(b=0),E==null&&(E=a),b<0)throw new Error(\"lo must be non-negative\");for(w==null&&(w=p.length);b<w;)C=n((b+w)/2),E(m,p[C])<0?w=C:b=C+1;return[].splice.apply(p,[b,b-b].concat(m)),m},o=function(p,m,b){return b==null&&(b=a),p.push(m),y(p,0,p.length-1,b)},s=function(p,m){var b,w;return m==null&&(m=a),b=p.pop(),p.length?(w=p[0],p[0]=b,g(p,0,m)):w=b,w},u=function(p,m,b){var w;return b==null&&(b=a),w=p[0],p[0]=m,g(p,0,b),w},l=function(p,m,b){var w;return b==null&&(b=a),p.length&&b(p[0],m)<0&&(w=[p[0],m],m=w[0],p[0]=w[1],g(p,0,b)),m},i=function(p,m){var b,w,E,C,x,T;for(m==null&&(m=a),C=(function(){T=[];for(var k=0,D=n(p.length/2);0<=D?k<D:k>D;0<=D?k++:k--)T.push(k);return T}).apply(this).reverse(),x=[],w=0,E=C.length;w<E;w++)b=C[w],x.push(g(p,b,m));return x},d=function(p,m,b){var w;if(b==null&&(b=a),w=p.indexOf(m),w!==-1)return y(p,0,w,b),g(p,w,b)},c=function(p,m,b){var w,E,C,x,T;if(b==null&&(b=a),E=p.slice(0,m),!E.length)return E;for(i(E,b),T=p.slice(m),C=0,x=T.length;C<x;C++)w=T[C],l(E,w,b);return E.sort(b).reverse()},h=function(p,m,b){var w,E,C,x,T,k,D,B,P;if(b==null&&(b=a),m*10<=p.length){if(C=p.slice(0,m).sort(b),!C.length)return C;for(E=C[C.length-1],D=p.slice(m),x=0,k=D.length;x<k;x++)w=D[x],b(w,E)<0&&(v(C,w,0,null,b),C.pop(),E=C[C.length-1]);return C}for(i(p,b),P=[],T=0,B=f(m,p.length);0<=B?T<B:T>B;0<=B?++T:--T)P.push(s(p,b));return P},y=function(p,m,b,w){var E,C,x;for(w==null&&(w=a),E=p[b];b>m;){if(x=b-1>>1,C=p[x],w(E,C)<0){p[b]=C,b=x;continue}break}return p[b]=E},g=function(p,m,b){var w,E,C,x,T;for(b==null&&(b=a),E=p.length,T=m,C=p[m],w=2*m+1;w<E;)x=w+1,x<E&&!(b(p[w],p[x])<0)&&(w=x),p[m]=p[w],m=w,w=2*m+1;return p[m]=C,y(p,T,m,b)},t=(function(){p.push=o,p.pop=s,p.replace=u,p.pushpop=l,p.heapify=i,p.updateItem=d,p.nlargest=c,p.nsmallest=h;function p(m){this.cmp=m??a,this.nodes=[]}return p.prototype.push=function(m){return o(this.nodes,m,this.cmp)},p.prototype.pop=function(){return s(this.nodes,this.cmp)},p.prototype.peek=function(){return this.nodes[0]},p.prototype.contains=function(m){return this.nodes.indexOf(m)!==-1},p.prototype.replace=function(m){return u(this.nodes,m,this.cmp)},p.prototype.pushpop=function(m){return l(this.nodes,m,this.cmp)},p.prototype.heapify=function(){return i(this.nodes,this.cmp)},p.prototype.updateItem=function(m){return d(this.nodes,m,this.cmp)},p.prototype.clear=function(){return this.nodes=[]},p.prototype.empty=function(){return this.nodes.length===0},p.prototype.size=function(){return this.nodes.length},p.prototype.clone=function(){var m;return m=new p,m.nodes=this.nodes.slice(0),m},p.prototype.toArray=function(){return this.nodes.slice(0)},p.prototype.insert=p.prototype.push,p.prototype.top=p.prototype.peek,p.prototype.front=p.prototype.peek,p.prototype.has=p.prototype.contains,p.prototype.copy=p.prototype.clone,p})(),(function(p,m){return r.exports=m()})(this,function(){return t})}).call(rd)})(on)),on.exports}var di,$o;function ad(){return $o||($o=1,di=td()),di}var nd=ad(),Va=Oa(nd),id=cr({root:null,weight:function(e){return 1},directed:!1}),sd={dijkstra:function(e){if(!Le(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var a=id(e),n=a.root,i=a.weight,s=a.directed,o=this,l=i,u=ge(n)?this.filter(n)[0]:n[0],v={},f={},c={},h=this.byGroup(),d=h.nodes,y=h.edges;y.unmergeBy(function(L){return L.isLoop()});for(var g=function(I){return v[I.id()]},p=function(I,M){v[I.id()]=M,m.updateItem(I)},m=new Va(function(L,I){return g(L)-g(I)}),b=0;b<d.length;b++){var w=d[b];v[w.id()]=w.same(u)?0:1/0,m.push(w)}for(var E=function(I,M){for(var O=(s?I.edgesTo(M):I.edgesWith(M)).intersect(y),V=1/0,G,N=0;N<O.length;N++){var F=O[N],U=l(F);(U<V||!G)&&(V=U,G=F)}return{edge:G,dist:V}};m.size()>0;){var C=m.pop(),x=g(C),T=C.id();if(c[T]=x,x!==1/0)for(var k=C.neighborhood().intersect(d),D=0;D<k.length;D++){var B=k[D],P=B.id(),A=E(C,B),R=x+A.dist;R<g(B)&&(p(B,R),f[P]={node:C,edge:A.edge})}}return{distanceTo:function(I){var M=ge(I)?d.filter(I)[0]:I[0];return c[M.id()]},pathTo:function(I){var M=ge(I)?d.filter(I)[0]:I[0],O=[],V=M,G=V.id();if(M.length>0)for(O.unshift(M);f[G];){var N=f[G];O.unshift(N.edge),O.unshift(N.node),V=N.node,G=V.id()}return o.spawn(O)}}}},od={kruskal:function(e){e=e||function(b){return 1};for(var t=this.byGroup(),a=t.nodes,n=t.edges,i=a.length,s=new Array(i),o=a,l=function(w){for(var E=0;E<s.length;E++){var C=s[E];if(C.has(w))return E}},u=0;u<i;u++)s[u]=this.spawn(a[u]);for(var v=n.sort(function(b,w){return e(b)-e(w)}),f=0;f<v.length;f++){var c=v[f],h=c.source()[0],d=c.target()[0],y=l(h),g=l(d),p=s[y],m=s[g];y!==g&&(o.merge(c),p.merge(m),s.splice(g,1))}return o}},ud=cr({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),ld={aStar:function(e){var t=this.cy(),a=ud(e),n=a.root,i=a.goal,s=a.heuristic,o=a.directed,l=a.weight;n=t.collection(n)[0],i=t.collection(i)[0];var u=n.id(),v=i.id(),f={},c={},h={},d=new Va(function(G,N){return c[G.id()]-c[N.id()]}),y=new ra,g={},p={},m=function(N,F){d.push(N),y.add(F)},b,w,E=function(){b=d.pop(),w=b.id(),y.delete(w)},C=function(N){return y.has(N)};m(n,u),f[u]=0,c[u]=s(n);for(var x=0;d.size()>0;){if(E(),x++,w===v){for(var T=[],k=i,D=v,B=p[D];T.unshift(k),B!=null&&T.unshift(B),k=g[D],k!=null;)D=k.id(),B=p[D];return{found:!0,distance:f[w],path:this.spawn(T),steps:x}}h[w]=!0;for(var P=b._private.edges,A=0;A<P.length;A++){var R=P[A];if(this.hasElementWithId(R.id())&&!(o&&R.data(\"source\")!==w)){var L=R.source(),I=R.target(),M=L.id()!==w?L:I,O=M.id();if(this.hasElementWithId(O)&&!h[O]){var V=f[w]+l(R);if(!C(O)){f[O]=V,c[O]=V+s(M),m(M,O),g[O]=b,p[O]=R;continue}V<f[O]&&(f[O]=V,c[O]=V+s(M),g[O]=b,p[O]=R)}}}}return{found:!1,distance:void 0,path:void 0,steps:x}}},vd=cr({weight:function(e){return 1},directed:!1}),fd={floydWarshall:function(e){for(var t=this.cy(),a=vd(e),n=a.weight,i=a.directed,s=n,o=this.byGroup(),l=o.nodes,u=o.edges,v=l.length,f=v*v,c=function(U){return l.indexOf(U)},h=function(U){return l[U]},d=new Array(f),y=0;y<f;y++){var g=y%v,p=(y-g)/v;p===g?d[y]=0:d[y]=1/0}for(var m=new Array(f),b=new Array(f),w=0;w<u.length;w++){var E=u[w],C=E.source()[0],x=E.target()[0];if(C!==x){var T=c(C),k=c(x),D=T*v+k,B=s(E);if(d[D]>B&&(d[D]=B,m[D]=k,b[D]=E),!i){var P=k*v+T;!i&&d[P]>B&&(d[P]=B,m[P]=T,b[P]=E)}}}for(var A=0;A<v;A++)for(var R=0;R<v;R++)for(var L=R*v+A,I=0;I<v;I++){var M=R*v+I,O=A*v+I;d[L]+d[O]<d[M]&&(d[M]=d[L]+d[O],m[M]=m[L])}var V=function(U){return(ge(U)?t.filter(U):U)[0]},G=function(U){return c(V(U))},N={distance:function(U,Q){var K=G(U),j=G(Q);return d[K*v+j]},path:function(U,Q){var K=G(U),j=G(Q),re=h(K);if(K===j)return re.collection();if(m[K*v+j]==null)return t.collection();var ne=t.collection(),J=K,z;for(ne.merge(re);K!==j;)J=K,K=m[K*v+j],z=b[J*v+K],ne.merge(z),ne.merge(h(K));return ne}};return N}},cd=cr({weight:function(e){return 1},directed:!1,root:null}),dd={bellmanFord:function(e){var t=this,a=cd(e),n=a.weight,i=a.directed,s=a.root,o=n,l=this,u=this.cy(),v=this.byGroup(),f=v.edges,c=v.nodes,h=c.length,d=new Xr,y=!1,g=[];s=u.collection(s)[0],f.unmergeBy(function(Ce){return Ce.isLoop()});for(var p=f.length,m=function(we){var ye=d.get(we.id());return ye||(ye={},d.set(we.id(),ye)),ye},b=function(we){return(ge(we)?u.$(we):we)[0]},w=function(we){return m(b(we)).dist},E=function(we){for(var ye=arguments.length>1&&arguments[1]!==void 0?arguments[1]:s,ie=b(we),de=[],he=ie;;){if(he==null)return t.spawn();var Ee=m(he),pe=Ee.edge,Se=Ee.pred;if(de.unshift(he[0]),he.same(ye)&&de.length>0)break;pe!=null&&de.unshift(pe),he=Se}return l.spawn(de)},C=0;C<h;C++){var x=c[C],T=m(x);x.same(s)?T.dist=0:T.dist=1/0,T.pred=null,T.edge=null}for(var k=!1,D=function(we,ye,ie,de,he,Ee){var pe=de.dist+Ee;pe<he.dist&&!ie.same(de.edge)&&(he.dist=pe,he.pred=we,he.edge=ie,k=!0)},B=1;B<h;B++){k=!1;for(var P=0;P<p;P++){var A=f[P],R=A.source(),L=A.target(),I=o(A),M=m(R),O=m(L);D(R,L,A,M,O,I),i||D(L,R,A,O,M,I)}if(!k)break}if(k)for(var V=[],G=0;G<p;G++){var N=f[G],F=N.source(),U=N.target(),Q=o(N),K=m(F).dist,j=m(U).dist;if(K+Q<j||!i&&j+Q<K)if(y||(Ve(\"Graph contains a negative weight cycle for Bellman-Ford\"),y=!0),e.findNegativeWeightCycles!==!1){var re=[];K+Q<j&&re.push(F),!i&&j+Q<K&&re.push(U);for(var ne=re.length,J=0;J<ne;J++){var z=re[J],q=[z];q.push(m(z).edge);for(var H=m(z).pred;q.indexOf(H)===-1;)q.push(H),q.push(m(H).edge),H=m(H).pred;q=q.slice(q.indexOf(H));for(var Y=q[0].id(),te=0,ce=2;ce<q.length;ce+=2)q[ce].id()<Y&&(Y=q[ce].id(),te=ce);q=q.slice(te).concat(q.slice(0,te)),q.push(q[0]);var Ae=q.map(function(Ce){return Ce.id()}).join(\",\");V.indexOf(Ae)===-1&&(g.push(l.spawn(q)),V.push(Ae))}}else break}return{distanceTo:w,pathTo:E,hasNegativeWeightCycle:y,negativeWeightCycles:g}}},hd=Math.sqrt(2),gd=function(e,t,a){a.length===0&&$e(\"Karger-Stein must be run on a connected (sub)graph\");for(var n=a[e],i=n[1],s=n[2],o=t[i],l=t[s],u=a,v=u.length-1;v>=0;v--){var f=u[v],c=f[1],h=f[2];(t[c]===o&&t[h]===l||t[c]===l&&t[h]===o)&&u.splice(v,1)}for(var d=0;d<u.length;d++){var y=u[d];y[1]===l?(u[d]=y.slice(),u[d][1]=o):y[2]===l&&(u[d]=y.slice(),u[d][2]=o)}for(var g=0;g<t.length;g++)t[g]===l&&(t[g]=o);return u},hi=function(e,t,a,n){for(;a>n;){var i=Math.floor(Math.random()*t.length);t=gd(i,e,t),a--}return t},pd={kargerStein:function(){var e=this,t=this.byGroup(),a=t.nodes,n=t.edges;n.unmergeBy(function(O){return O.isLoop()});var i=a.length,s=n.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),l=Math.floor(i/hd);if(i<2){$e(\"At least 2 nodes are required for Karger-Stein algorithm\");return}for(var u=[],v=0;v<s;v++){var f=n[v];u.push([v,a.indexOf(f.source()),a.indexOf(f.target())])}for(var c=1/0,h=[],d=new Array(i),y=new Array(i),g=new Array(i),p=function(V,G){for(var N=0;N<i;N++)G[N]=V[N]},m=0;m<=o;m++){for(var b=0;b<i;b++)y[b]=b;var w=hi(y,u.slice(),i,l),E=w.slice();p(y,g);var C=hi(y,w,l,2),x=hi(g,E,l,2);C.length<=x.length&&C.length<c?(c=C.length,h=C,p(y,d)):x.length<=C.length&&x.length<c&&(c=x.length,h=x,p(g,d))}for(var T=this.spawn(h.map(function(O){return n[O[0]]})),k=this.spawn(),D=this.spawn(),B=d[0],P=0;P<d.length;P++){var A=d[P],R=a[P];A===B?k.merge(R):D.merge(R)}var L=function(V){var G=e.spawn();return V.forEach(function(N){G.merge(N),N.connectedEdges().forEach(function(F){e.contains(F)&&!T.contains(F)&&G.merge(F)})}),G},I=[L(k),L(D)],M={cut:T,components:I,partition1:k,partition2:D};return M}},gi,yd=function(e){return{x:e.x,y:e.y}},On=function(e,t,a){return{x:e.x*t+a.x,y:e.y*t+a.y}},yv=function(e,t,a){return{x:(e.x-a.x)/t,y:(e.y-a.y)/t}},Wt=function(e){return{x:e[0],y:e[1]}},md=function(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=1/0,i=t;i<a;i++){var s=e[i];isFinite(s)&&(n=Math.min(s,n))}return n},bd=function(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=-1/0,i=t;i<a;i++){var s=e[i];isFinite(s)&&(n=Math.max(s,n))}return n},wd=function(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=0,i=0,s=t;s<a;s++){var o=e[s];isFinite(o)&&(n+=o,i++)}return n/i},xd=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;n?e=e.slice(t,a):(a<e.length&&e.splice(a,e.length-a),t>0&&e.splice(0,t));for(var o=0,l=e.length-1;l>=0;l--){var u=e[l];s?isFinite(u)||(e[l]=-1/0,o++):e.splice(l,1)}i&&e.sort(function(c,h){return c-h});var v=e.length,f=Math.floor(v/2);return v%2!==0?e[f+1+o]:(e[f-1+o]+e[f+o])/2},Ed=function(e){return Math.PI*e/180},Ya=function(e,t){return Math.atan2(t,e)-Math.PI/2},ro=Math.log2||function(r){return Math.log(r)/Math.log(2)},to=function(e){return e>0?1:e<0?-1:0},Bt=function(e,t){return Math.sqrt(Et(e,t))},Et=function(e,t){var a=t.x-e.x,n=t.y-e.y;return a*a+n*n},Cd=function(e){for(var t=e.length,a=0,n=0;n<t;n++)a+=e[n];for(var i=0;i<t;i++)e[i]=e[i]/a;return e},sr=function(e,t,a,n){return(1-n)*(1-n)*e+2*(1-n)*n*t+n*n*a},Kt=function(e,t,a,n){return{x:sr(e.x,t.x,a.x,n),y:sr(e.y,t.y,a.y,n)}},Td=function(e,t,a,n){var i={x:t.x-e.x,y:t.y-e.y},s=Bt(e,t),o={x:i.x/s,y:i.y/s};return a=a??0,n=n??a*s,{x:e.x+o.x*n,y:e.y+o.y*n}},ka=function(e,t,a){return Math.max(e,Math.min(a,t))},wr=function(e){if(e==null)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(e.x1!=null&&e.y1!=null){if(e.x2!=null&&e.y2!=null&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},Sd=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},kd=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},Dd=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},mv=function(e,t,a){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,a),e.y2=Math.max(e.y2,a),e.h=e.y2-e.y1},un=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},ln=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],a,n,i,s;if(t.length===1)a=n=i=s=t[0];else if(t.length===2)a=i=t[0],s=n=t[1];else if(t.length===4){var o=Je(t,4);a=o[0],n=o[1],i=o[2],s=o[3]}return e.x1-=s,e.x2+=n,e.y1-=a,e.y2+=i,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Uo=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},ao=function(e,t){return!(e.x1>t.x2||t.x1>e.x2||e.x2<t.x1||t.x2<e.x1||e.y2<t.y1||t.y2<e.y1||e.y1>t.y2||t.y1>e.y2)},nt=function(e,t,a){return e.x1<=t&&t<=e.x2&&e.y1<=a&&a<=e.y2},Ko=function(e,t){return nt(e,t.x,t.y)},bv=function(e,t){return nt(e,t.x1,t.y1)&&nt(e,t.x2,t.y2)},Bd=(gi=Math.hypot)!==null&&gi!==void 0?gi:function(r,e){return Math.sqrt(r*r+e*e)};function Pd(r,e){if(r.length<3)throw new Error(\"Need at least 3 vertices\");var t=function(T,k){return{x:T.x+k.x,y:T.y+k.y}},a=function(T,k){return{x:T.x-k.x,y:T.y-k.y}},n=function(T,k){return{x:T.x*k,y:T.y*k}},i=function(T,k){return T.x*k.y-T.y*k.x},s=function(T){var k=Bd(T.x,T.y);return k===0?{x:0,y:0}:{x:T.x/k,y:T.y/k}},o=function(T){for(var k=0,D=0;D<T.length;D++){var B=T[D],P=T[(D+1)%T.length];k+=B.x*P.y-P.x*B.y}return k/2},l=function(T,k,D,B){var P=a(k,T),A=a(B,D),R=i(P,A);if(Math.abs(R)<1e-9)return t(T,n(P,.5));var L=i(a(D,T),A)/R;return t(T,n(P,L))},u=r.map(function(x){return{x:x.x,y:x.y}});o(u)<0&&u.reverse();for(var v=u.length,f=[],c=0;c<v;c++){var h=u[c],d=u[(c+1)%v],y=a(d,h),g=s({x:y.y,y:-y.x});f.push(g)}for(var p=f.map(function(x,T){var k=t(u[T],n(x,e)),D=t(u[(T+1)%v],n(x,e));return{p1:k,p2:D}}),m=[],b=0;b<v;b++){var w=p[(b-1+v)%v],E=p[b],C=l(w.p1,w.p2,E.p1,E.p2);m.push(C)}return m}function Ad(r,e,t,a,n,i){var s=Vd(r,e,t,a,n),o=Pd(s,i),l=wr();return o.forEach(function(u){return mv(l,u.x,u.y)}),l}var wv=function(e,t,a,n,i,s,o){var l=arguments.length>7&&arguments[7]!==void 0?arguments[7]:\"auto\",u=l===\"auto\"?vt(i,s):l,v=i/2,f=s/2;u=Math.min(u,v,f);var c=u!==v,h=u!==f,d;if(c){var y=a-v+u-o,g=n-f-o,p=a+v-u+o,m=g;if(d=it(e,t,a,n,y,g,p,m,!1),d.length>0)return d}if(h){var b=a+v+o,w=n-f+u-o,E=b,C=n+f-u+o;if(d=it(e,t,a,n,b,w,E,C,!1),d.length>0)return d}if(c){var x=a-v+u-o,T=n+f+o,k=a+v-u+o,D=T;if(d=it(e,t,a,n,x,T,k,D,!1),d.length>0)return d}if(h){var B=a-v-o,P=n-f+u-o,A=B,R=n+f-u+o;if(d=it(e,t,a,n,B,P,A,R,!1),d.length>0)return d}var L;{var I=a-v+u,M=n-f+u;if(L=ya(e,t,a,n,I,M,u+o),L.length>0&&L[0]<=I&&L[1]<=M)return[L[0],L[1]]}{var O=a+v-u,V=n-f+u;if(L=ya(e,t,a,n,O,V,u+o),L.length>0&&L[0]>=O&&L[1]<=V)return[L[0],L[1]]}{var G=a+v-u,N=n+f-u;if(L=ya(e,t,a,n,G,N,u+o),L.length>0&&L[0]>=G&&L[1]>=N)return[L[0],L[1]]}{var F=a-v+u,U=n+f-u;if(L=ya(e,t,a,n,F,U,u+o),L.length>0&&L[0]<=F&&L[1]>=U)return[L[0],L[1]]}return[]},Rd=function(e,t,a,n,i,s,o){var l=o,u=Math.min(a,i),v=Math.max(a,i),f=Math.min(n,s),c=Math.max(n,s);return u-l<=e&&e<=v+l&&f-l<=t&&t<=c+l},Md=function(e,t,a,n,i,s,o,l,u){var v={x1:Math.min(a,o,i)-u,x2:Math.max(a,o,i)+u,y1:Math.min(n,l,s)-u,y2:Math.max(n,l,s)+u};return!(e<v.x1||e>v.x2||t<v.y1||t>v.y2)},Ld=function(e,t,a,n){a-=n;var i=t*t-4*e*a;if(i<0)return[];var s=Math.sqrt(i),o=2*e,l=(-t+s)/o,u=(-t-s)/o;return[l,u]},Id=function(e,t,a,n,i){var s=1e-5;e===0&&(e=s),t/=e,a/=e,n/=e;var o,l,u,v,f,c,h,d;if(l=(3*a-t*t)/9,u=-(27*n)+t*(9*a-2*(t*t)),u/=54,o=l*l*l+u*u,i[1]=0,h=t/3,o>0){f=u+Math.sqrt(o),f=f<0?-Math.pow(-f,1/3):Math.pow(f,1/3),c=u-Math.sqrt(o),c=c<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-h+f+c,h+=(f+c)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-c+f)/2,i[3]=h,i[5]=-h;return}if(i[5]=i[3]=0,o===0){d=u<0?-Math.pow(-u,1/3):Math.pow(u,1/3),i[0]=-h+2*d,i[4]=i[2]=-(d+h);return}l=-l,v=l*l*l,v=Math.acos(u/Math.sqrt(v)),d=2*Math.sqrt(l),i[0]=-h+d*Math.cos(v/3),i[2]=-h+d*Math.cos((v+2*Math.PI)/3),i[4]=-h+d*Math.cos((v+4*Math.PI)/3)},Od=function(e,t,a,n,i,s,o,l){var u=1*a*a-4*a*i+2*a*o+4*i*i-4*i*o+o*o+n*n-4*n*s+2*n*l+4*s*s-4*s*l+l*l,v=9*a*i-3*a*a-3*a*o-6*i*i+3*i*o+9*n*s-3*n*n-3*n*l-6*s*s+3*s*l,f=3*a*a-6*a*i+a*o-a*e+2*i*i+2*i*e-o*e+3*n*n-6*n*s+n*l-n*t+2*s*s+2*s*t-l*t,c=1*a*i-a*a+a*e-i*e+n*s-n*n+n*t-s*t,h=[];Id(u,v,f,c,h);for(var d=1e-7,y=[],g=0;g<6;g+=2)Math.abs(h[g+1])<d&&h[g]>=0&&h[g]<=1&&y.push(h[g]);y.push(1),y.push(0);for(var p=-1,m,b,w,E=0;E<y.length;E++)m=Math.pow(1-y[E],2)*a+2*(1-y[E])*y[E]*i+y[E]*y[E]*o,b=Math.pow(1-y[E],2)*n+2*(1-y[E])*y[E]*s+y[E]*y[E]*l,w=Math.pow(m-e,2)+Math.pow(b-t,2),p>=0?w<p&&(p=w):p=w;return p},Nd=function(e,t,a,n,i,s){var o=[e-a,t-n],l=[i-a,s-n],u=l[0]*l[0]+l[1]*l[1],v=o[0]*o[0]+o[1]*o[1],f=o[0]*l[0]+o[1]*l[1],c=f*f/u;return f<0?v:c>u?(e-i)*(e-i)+(t-s)*(t-s):v-c},Sr=function(e,t,a){for(var n,i,s,o,l,u=0,v=0;v<a.length/2;v++)if(n=a[v*2],i=a[v*2+1],v+1<a.length/2?(s=a[(v+1)*2],o=a[(v+1)*2+1]):(s=a[(v+1-a.length/2)*2],o=a[(v+1-a.length/2)*2+1]),!(n==e&&s==e))if(n>=e&&e>=s||n<=e&&e<=s)l=(e-n)/(s-n)*(o-i)+i,l>t&&u++;else continue;return u%2!==0},Zr=function(e,t,a,n,i,s,o,l,u){var v=new Array(a.length),f;l[0]!=null?(f=Math.atan(l[1]/l[0]),l[0]<0?f=f+Math.PI/2:f=-f-Math.PI/2):f=l;for(var c=Math.cos(-f),h=Math.sin(-f),d=0;d<v.length/2;d++)v[d*2]=s/2*(a[d*2]*c-a[d*2+1]*h),v[d*2+1]=o/2*(a[d*2+1]*c+a[d*2]*h),v[d*2]+=n,v[d*2+1]+=i;var y;if(u>0){var g=Cn(v,-u);y=En(g)}else y=v;return Sr(e,t,y)},zd=function(e,t,a,n,i,s,o,l){for(var u=new Array(a.length*2),v=0;v<l.length;v++){var f=l[v];u[v*4+0]=f.startX,u[v*4+1]=f.startY,u[v*4+2]=f.stopX,u[v*4+3]=f.stopY;var c=Math.pow(f.cx-e,2)+Math.pow(f.cy-t,2);if(c<=Math.pow(f.radius,2))return!0}return Sr(e,t,u)},En=function(e){for(var t=new Array(e.length/2),a,n,i,s,o,l,u,v,f=0;f<e.length/4;f++){a=e[f*4],n=e[f*4+1],i=e[f*4+2],s=e[f*4+3],f<e.length/4-1?(o=e[(f+1)*4],l=e[(f+1)*4+1],u=e[(f+1)*4+2],v=e[(f+1)*4+3]):(o=e[0],l=e[1],u=e[2],v=e[3]);var c=it(a,n,i,s,o,l,u,v,!0);t[f*2]=c[0],t[f*2+1]=c[1]}return t},Cn=function(e,t){for(var a=new Array(e.length*2),n,i,s,o,l=0;l<e.length/2;l++){n=e[l*2],i=e[l*2+1],l<e.length/2-1?(s=e[(l+1)*2],o=e[(l+1)*2+1]):(s=e[0],o=e[1]);var u=o-i,v=-(s-n),f=Math.sqrt(u*u+v*v),c=u/f,h=v/f;a[l*4]=n+c*t,a[l*4+1]=i+h*t,a[l*4+2]=s+c*t,a[l*4+3]=o+h*t}return a},Fd=function(e,t,a,n,i,s){var o=a-e,l=n-t;o/=i,l/=s;var u=Math.sqrt(o*o+l*l),v=u-1;if(v<0)return[];var f=v/u;return[(a-e)*f+e,(n-t)*f+t]},kt=function(e,t,a,n,i,s,o){return e-=i,t-=s,e/=a/2+o,t/=n/2+o,e*e+t*t<=1},ya=function(e,t,a,n,i,s,o){var l=[a-e,n-t],u=[e-i,t-s],v=l[0]*l[0]+l[1]*l[1],f=2*(u[0]*l[0]+u[1]*l[1]),c=u[0]*u[0]+u[1]*u[1]-o*o,h=f*f-4*v*c;if(h<0)return[];var d=(-f+Math.sqrt(h))/(2*v),y=(-f-Math.sqrt(h))/(2*v),g=Math.min(d,y),p=Math.max(d,y),m=[];if(g>=0&&g<=1&&m.push(g),p>=0&&p<=1&&m.push(p),m.length===0)return[];var b=m[0]*l[0]+e,w=m[0]*l[1]+t;if(m.length>1){if(m[0]==m[1])return[b,w];var E=m[1]*l[0]+e,C=m[1]*l[1]+t;return[b,w,E,C]}else return[b,w]},pi=function(e,t,a){return t<=e&&e<=a||a<=e&&e<=t?e:e<=t&&t<=a||a<=t&&t<=e?t:a},it=function(e,t,a,n,i,s,o,l,u){var v=e-i,f=a-e,c=o-i,h=t-s,d=n-t,y=l-s,g=c*h-y*v,p=f*h-d*v,m=y*f-c*d;if(m!==0){var b=g/m,w=p/m,E=.001,C=0-E,x=1+E;return C<=b&&b<=x&&C<=w&&w<=x?[e+b*f,t+b*d]:u?[e+b*f,t+b*d]:[]}else return g===0||p===0?pi(e,a,o)===o?[o,l]:pi(e,a,i)===i?[i,s]:pi(i,o,a)===a?[a,n]:[]:[]},Vd=function(e,t,a,n,i){var s=[],o=n/2,l=i/2,u=t,v=a;s.push({x:u+o*e[0],y:v+l*e[1]});for(var f=1;f<e.length/2;f++)s.push({x:u+o*e[f*2],y:v+l*e[f*2+1]});return s},Da=function(e,t,a,n,i,s,o,l){var u=[],v,f=new Array(a.length),c=!0;s==null&&(c=!1);var h;if(c){for(var d=0;d<f.length/2;d++)f[d*2]=a[d*2]*s+n,f[d*2+1]=a[d*2+1]*o+i;if(l>0){var y=Cn(f,-l);h=En(y)}else h=f}else h=a;for(var g,p,m,b,w=0;w<h.length/2;w++)g=h[w*2],p=h[w*2+1],w<h.length/2-1?(m=h[(w+1)*2],b=h[(w+1)*2+1]):(m=h[0],b=h[1]),v=it(e,t,n,i,g,p,m,b),v.length!==0&&u.push(v[0],v[1]);return u},qd=function(e,t,a,n,i,s,o,l,u){var v=[],f,c=new Array(a.length*2);u.forEach(function(m,b){b===0?(c[c.length-2]=m.startX,c[c.length-1]=m.startY):(c[b*4-2]=m.startX,c[b*4-1]=m.startY),c[b*4]=m.stopX,c[b*4+1]=m.stopY,f=ya(e,t,n,i,m.cx,m.cy,m.radius),f.length!==0&&v.push(f[0],f[1])});for(var h=0;h<c.length/4;h++)f=it(e,t,n,i,c[h*4],c[h*4+1],c[h*4+2],c[h*4+3],!1),f.length!==0&&v.push(f[0],f[1]);if(v.length>2){for(var d=[v[0],v[1]],y=Math.pow(d[0]-e,2)+Math.pow(d[1]-t,2),g=1;g<v.length/2;g++){var p=Math.pow(v[g*2]-e,2)+Math.pow(v[g*2+1]-t,2);p<=y&&(d[0]=v[g*2],d[1]=v[g*2+1],y=p)}return d}return v},Za=function(e,t,a){var n=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(n[0]*n[0]+n[1]*n[1]),s=(i-a)/i;return s<0&&(s=1e-5),[t[0]+s*n[0],t[1]+s*n[1]]},br=function(e,t){var a=Ps(e,t);return a=xv(a),a},xv=function(e){for(var t,a,n=e.length/2,i=1/0,s=1/0,o=-1/0,l=-1/0,u=0;u<n;u++)t=e[2*u],a=e[2*u+1],i=Math.min(i,t),o=Math.max(o,t),s=Math.min(s,a),l=Math.max(l,a);for(var v=2/(o-i),f=2/(l-s),c=0;c<n;c++)t=e[2*c]=e[2*c]*v,a=e[2*c+1]=e[2*c+1]*f,i=Math.min(i,t),o=Math.max(o,t),s=Math.min(s,a),l=Math.max(l,a);if(s<-1)for(var h=0;h<n;h++)a=e[2*h+1]=e[2*h+1]+(-1-s);return e},Ps=function(e,t){var a=1/e*2*Math.PI,n=e%2===0?Math.PI/2+a/2:Math.PI/2;n+=t;for(var i=new Array(e*2),s,o=0;o<e;o++)s=o*a+n,i[2*o]=Math.cos(s),i[2*o+1]=Math.sin(-s);return i},vt=function(e,t){return Math.min(e/4,t/4,8)},Ev=function(e,t){return Math.min(e/10,t/10,8)},no=function(){return 8},_d=function(e,t,a){return[e-2*t+a,2*(t-e),e]},As=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}};function yi(r,e){function t(f){for(var c=[],h=0;h<f.length;h++){var d=f[h],y=f[(h+1)%f.length],g={x:y.x-d.x,y:y.y-d.y},p={x:-g.y,y:g.x},m=Math.sqrt(p.x*p.x+p.y*p.y);c.push({x:p.x/m,y:p.y/m})}return c}function a(f,c){var h=1/0,d=-1/0,y=kr(f),g;try{for(y.s();!(g=y.n()).done;){var p=g.value,m=p.x*c.x+p.y*c.y;h=Math.min(h,m),d=Math.max(d,m)}}catch(b){y.e(b)}finally{y.f()}return{min:h,max:d}}function n(f,c){return!(f.max<c.min||c.max<f.min)}var i=[].concat(mn(t(r)),mn(t(e))),s=kr(i),o;try{for(s.s();!(o=s.n()).done;){var l=o.value,u=a(r,l),v=a(e,l);if(!n(u,v))return!1}}catch(f){s.e(f)}finally{s.f()}return!0}var Gd=cr({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),Hd={pageRank:function(e){for(var t=Gd(e),a=t.dampingFactor,n=t.precision,i=t.iterations,s=t.weight,o=this._private.cy,l=this.byGroup(),u=l.nodes,v=l.edges,f=u.length,c=f*f,h=v.length,d=new Array(c),y=new Array(f),g=(1-a)/f,p=0;p<f;p++){for(var m=0;m<f;m++){var b=p*f+m;d[b]=0}y[p]=0}for(var w=0;w<h;w++){var E=v[w],C=E.data(\"source\"),x=E.data(\"target\");if(C!==x){var T=u.indexOfId(C),k=u.indexOfId(x),D=s(E),B=k*f+T;d[B]+=D,y[T]+=D}}for(var P=1/f+g,A=0;A<f;A++)if(y[A]===0)for(var R=0;R<f;R++){var L=R*f+A;d[L]=P}else for(var I=0;I<f;I++){var M=I*f+A;d[M]=d[M]/y[A]+g}for(var O=new Array(f),V=new Array(f),G,N=0;N<f;N++)O[N]=1;for(var F=0;F<i;F++){for(var U=0;U<f;U++)V[U]=0;for(var Q=0;Q<f;Q++)for(var K=0;K<f;K++){var j=Q*f+K;V[Q]+=d[j]*O[K]}Cd(V),G=O,O=V,V=G;for(var re=0,ne=0;ne<f;ne++){var J=G[ne]-O[ne];re+=J*J}if(re<n)break}var z={rank:function(H){return H=o.collection(H)[0],O[u.indexOf(H)]}};return z}},Xo=cr({root:null,weight:function(e){return 1},directed:!1,alpha:0}),Xt={degreeCentralityNormalized:function(e){e=Xo(e);var t=this.cy(),a=this.nodes(),n=a.length;if(e.directed){for(var v={},f={},c=0,h=0,d=0;d<n;d++){var y=a[d],g=y.id();e.root=y;var p=this.degreeCentrality(e);c<p.indegree&&(c=p.indegree),h<p.outdegree&&(h=p.outdegree),v[g]=p.indegree,f[g]=p.outdegree}return{indegree:function(b){return c==0?0:(ge(b)&&(b=t.filter(b)),v[b.id()]/c)},outdegree:function(b){return h===0?0:(ge(b)&&(b=t.filter(b)),f[b.id()]/h)}}}else{for(var i={},s=0,o=0;o<n;o++){var l=a[o];e.root=l;var u=this.degreeCentrality(e);s<u.degree&&(s=u.degree),i[l.id()]=u.degree}return{degree:function(b){return s===0?0:(ge(b)&&(b=t.filter(b)),i[b.id()]/s)}}}},degreeCentrality:function(e){e=Xo(e);var t=this.cy(),a=this,n=e,i=n.root,s=n.weight,o=n.directed,l=n.alpha;if(i=t.collection(i)[0],o){for(var h=i.connectedEdges(),d=h.filter(function(C){return C.target().same(i)&&a.has(C)}),y=h.filter(function(C){return C.source().same(i)&&a.has(C)}),g=d.length,p=y.length,m=0,b=0,w=0;w<d.length;w++)m+=s(d[w]);for(var E=0;E<y.length;E++)b+=s(y[E]);return{indegree:Math.pow(g,1-l)*Math.pow(m,l),outdegree:Math.pow(p,1-l)*Math.pow(b,l)}}else{for(var u=i.connectedEdges().intersection(a),v=u.length,f=0,c=0;c<u.length;c++)f+=s(u[c]);return{degree:Math.pow(v,1-l)*Math.pow(f,l)}}}};Xt.dc=Xt.degreeCentrality;Xt.dcn=Xt.degreeCentralityNormalised=Xt.degreeCentralityNormalized;var Yo=cr({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),Yt={closenessCentralityNormalized:function(e){for(var t=Yo(e),a=t.harmonic,n=t.weight,i=t.directed,s=this.cy(),o={},l=0,u=this.nodes(),v=this.floydWarshall({weight:n,directed:i}),f=0;f<u.length;f++){for(var c=0,h=u[f],d=0;d<u.length;d++)if(f!==d){var y=v.distance(h,u[d]);a?c+=1/y:c+=y}a||(c=1/c),l<c&&(l=c),o[h.id()]=c}return{closeness:function(p){return l==0?0:(ge(p)?p=s.filter(p)[0].id():p=p.id(),o[p]/l)}}},closenessCentrality:function(e){var t=Yo(e),a=t.root,n=t.weight,i=t.directed,s=t.harmonic;a=this.filter(a)[0];for(var o=this.dijkstra({root:a,weight:n,directed:i}),l=0,u=this.nodes(),v=0;v<u.length;v++){var f=u[v];if(!f.same(a)){var c=o.distanceTo(f);s?l+=1/c:l+=c}}return s?l:1/l}};Yt.cc=Yt.closenessCentrality;Yt.ccn=Yt.closenessCentralityNormalised=Yt.closenessCentralityNormalized;var Wd=cr({weight:null,directed:!1}),Rs={betweennessCentrality:function(e){for(var t=Wd(e),a=t.directed,n=t.weight,i=n!=null,s=this.cy(),o=this.nodes(),l={},u={},v=0,f={set:function(b,w){u[b]=w,w>v&&(v=w)},get:function(b){return u[b]}},c=0;c<o.length;c++){var h=o[c],d=h.id();a?l[d]=h.outgoers().nodes():l[d]=h.openNeighborhood().nodes(),f.set(d,0)}for(var y=function(){for(var b=o[g].id(),w=[],E={},C={},x={},T=new Va(function(Q,K){return x[Q]-x[K]}),k=0;k<o.length;k++){var D=o[k].id();E[D]=[],C[D]=0,x[D]=1/0}for(C[b]=1,x[b]=0,T.push(b);!T.empty();){var B=T.pop();if(w.push(B),i)for(var P=0;P<l[B].length;P++){var A=l[B][P],R=s.getElementById(B),L=void 0;R.edgesTo(A).length>0?L=R.edgesTo(A)[0]:L=A.edgesTo(R)[0];var I=n(L);A=A.id(),x[A]>x[B]+I&&(x[A]=x[B]+I,T.nodes.indexOf(A)<0?T.push(A):T.updateItem(A),C[A]=0,E[A]=[]),x[A]==x[B]+I&&(C[A]=C[A]+C[B],E[A].push(B))}else for(var M=0;M<l[B].length;M++){var O=l[B][M].id();x[O]==1/0&&(T.push(O),x[O]=x[B]+1),x[O]==x[B]+1&&(C[O]=C[O]+C[B],E[O].push(B))}}for(var V={},G=0;G<o.length;G++)V[o[G].id()]=0;for(;w.length>0;){for(var N=w.pop(),F=0;F<E[N].length;F++){var U=E[N][F];V[U]=V[U]+C[U]/C[N]*(1+V[N])}N!=o[g].id()&&f.set(N,f.get(N)+V[N])}},g=0;g<o.length;g++)y();var p={betweenness:function(b){var w=s.collection(b).id();return f.get(w)},betweennessNormalized:function(b){if(v==0)return 0;var w=s.collection(b).id();return f.get(w)/v}};return p.betweennessNormalised=p.betweennessNormalized,p}};Rs.bc=Rs.betweennessCentrality;var $d=cr({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(r){return 1}]}),Ud=function(e){return $d(e)},Kd=function(e,t){for(var a=0,n=0;n<t.length;n++)a+=t[n](e);return a},Xd=function(e,t,a){for(var n=0;n<t;n++)e[n*t+n]=a},Cv=function(e,t){for(var a,n=0;n<t;n++){a=0;for(var i=0;i<t;i++)a+=e[i*t+n];for(var s=0;s<t;s++)e[s*t+n]=e[s*t+n]/a}},Yd=function(e,t,a){for(var n=new Array(a*a),i=0;i<a;i++){for(var s=0;s<a;s++)n[i*a+s]=0;for(var o=0;o<a;o++)for(var l=0;l<a;l++)n[i*a+l]+=e[i*a+o]*t[o*a+l]}return n},Zd=function(e,t,a){for(var n=e.slice(0),i=1;i<a;i++)e=Yd(e,n,t);return e},Qd=function(e,t,a){for(var n=new Array(t*t),i=0;i<t*t;i++)n[i]=Math.pow(e[i],a);return Cv(n,t),n},Jd=function(e,t,a,n){for(var i=0;i<a;i++){var s=Math.round(e[i]*Math.pow(10,n))/Math.pow(10,n),o=Math.round(t[i]*Math.pow(10,n))/Math.pow(10,n);if(s!==o)return!1}return!0},jd=function(e,t,a,n){for(var i=[],s=0;s<t;s++){for(var o=[],l=0;l<t;l++)Math.round(e[s*t+l]*1e3)/1e3>0&&o.push(a[l]);o.length!==0&&i.push(n.collection(o))}return i},eh=function(e,t){for(var a=0;a<e.length;a++)if(!t[a]||e[a].id()!==t[a].id())return!1;return!0},rh=function(e){for(var t=0;t<e.length;t++)for(var a=0;a<e.length;a++)t!=a&&eh(e[t],e[a])&&e.splice(a,1);return e},Zo=function(e){for(var t=this.nodes(),a=this.edges(),n=this.cy(),i=Ud(e),s={},o=0;o<t.length;o++)s[t[o].id()]=o;for(var l=t.length,u=l*l,v=new Array(u),f,c=0;c<u;c++)v[c]=0;for(var h=0;h<a.length;h++){var d=a[h],y=s[d.source().id()],g=s[d.target().id()],p=Kd(d,i.attributes);v[y*l+g]+=p,v[g*l+y]+=p}Xd(v,l,i.multFactor),Cv(v,l);for(var m=!0,b=0;m&&b<i.maxIterations;)m=!1,f=Zd(v,l,i.expandFactor),v=Qd(f,l,i.inflateFactor),Jd(v,f,u,4)||(m=!0),b++;var w=jd(v,l,t,n);return w=rh(w),w},th={markovClustering:Zo,mcl:Zo},ah=function(e){return e},Tv=function(e,t){return Math.abs(t-e)},Qo=function(e,t,a){return e+Tv(t,a)},Jo=function(e,t,a){return e+Math.pow(a-t,2)},nh=function(e){return Math.sqrt(e)},ih=function(e,t,a){return Math.max(e,Tv(t,a))},va=function(e,t,a,n,i){for(var s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:ah,o=n,l,u,v=0;v<e;v++)l=t(v),u=a(v),o=i(o,l,u);return s(o)},Jt={euclidean:function(e,t,a){return e>=2?va(e,t,a,0,Jo,nh):va(e,t,a,0,Qo)},squaredEuclidean:function(e,t,a){return va(e,t,a,0,Jo)},manhattan:function(e,t,a){return va(e,t,a,0,Qo)},max:function(e,t,a){return va(e,t,a,-1/0,ih)}};Jt[\"squared-euclidean\"]=Jt.squaredEuclidean;Jt.squaredeuclidean=Jt.squaredEuclidean;function Nn(r,e,t,a,n,i){var s;return Ue(r)?s=r:s=Jt[r]||Jt.euclidean,e===0&&Ue(r)?s(n,i):s(e,t,a,n,i)}var sh=cr({k:2,m:2,sensitivityThreshold:1e-4,distance:\"euclidean\",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),io=function(e){return sh(e)},Tn=function(e,t,a,n,i){var s=i!==\"kMedoids\",o=s?function(f){return a[f]}:function(f){return n[f](a)},l=function(c){return n[c](t)},u=a,v=t;return Nn(e,n.length,o,l,u,v)},mi=function(e,t,a){for(var n=a.length,i=new Array(n),s=new Array(n),o=new Array(t),l=null,u=0;u<n;u++)i[u]=e.min(a[u]).value,s[u]=e.max(a[u]).value;for(var v=0;v<t;v++){l=[];for(var f=0;f<n;f++)l[f]=Math.random()*(s[f]-i[f])+i[f];o[v]=l}return o},Sv=function(e,t,a,n,i){for(var s=1/0,o=0,l=0;l<t.length;l++){var u=Tn(a,e,t[l],n,i);u<s&&(s=u,o=l)}return o},kv=function(e,t,a){for(var n=[],i=null,s=0;s<t.length;s++)i=t[s],a[i.id()]===e&&n.push(i);return n},oh=function(e,t,a){return Math.abs(t-e)<=a},uh=function(e,t,a){for(var n=0;n<e.length;n++)for(var i=0;i<e[n].length;i++){var s=Math.abs(e[n][i]-t[n][i]);if(s>a)return!1}return!0},lh=function(e,t,a){for(var n=0;n<a;n++)if(e===t[n])return!0;return!1},jo=function(e,t){var a=new Array(t);if(e.length<50)for(var n=0;n<t;n++){for(var i=e[Math.floor(Math.random()*e.length)];lh(i,a,n);)i=e[Math.floor(Math.random()*e.length)];a[n]=i}else for(var s=0;s<t;s++)a[s]=e[Math.floor(Math.random()*e.length)];return a},eu=function(e,t,a){for(var n=0,i=0;i<t.length;i++)n+=Tn(\"manhattan\",t[i],e,a,\"kMedoids\");return n},vh=function(e){var t=this.cy(),a=this.nodes(),n=null,i=io(e),s=new Array(i.k),o={},l;i.testMode?typeof i.testCentroids==\"number\"?(i.testCentroids,l=mi(a,i.k,i.attributes)):ar(i.testCentroids)===\"object\"?l=i.testCentroids:l=mi(a,i.k,i.attributes):l=mi(a,i.k,i.attributes);for(var u=!0,v=0;u&&v<i.maxIterations;){for(var f=0;f<a.length;f++)n=a[f],o[n.id()]=Sv(n,l,i.distance,i.attributes,\"kMeans\");u=!1;for(var c=0;c<i.k;c++){var h=kv(c,a,o);if(h.length!==0){for(var d=i.attributes.length,y=l[c],g=new Array(d),p=new Array(d),m=0;m<d;m++){p[m]=0;for(var b=0;b<h.length;b++)n=h[b],p[m]+=i.attributes[m](n);g[m]=p[m]/h.length,oh(g[m],y[m],i.sensitivityThreshold)||(u=!0)}l[c]=g,s[c]=t.collection(h)}}v++}return s},fh=function(e){var t=this.cy(),a=this.nodes(),n=null,i=io(e),s=new Array(i.k),o,l={},u,v=new Array(i.k);i.testMode?typeof i.testCentroids==\"number\"||(ar(i.testCentroids)===\"object\"?o=i.testCentroids:o=jo(a,i.k)):o=jo(a,i.k);for(var f=!0,c=0;f&&c<i.maxIterations;){for(var h=0;h<a.length;h++)n=a[h],l[n.id()]=Sv(n,o,i.distance,i.attributes,\"kMedoids\");f=!1;for(var d=0;d<o.length;d++){var y=kv(d,a,l);if(y.length!==0){v[d]=eu(o[d],y,i.attributes);for(var g=0;g<y.length;g++)u=eu(y[g],y,i.attributes),u<v[d]&&(v[d]=u,o[d]=y[g],f=!0);s[d]=t.collection(y)}}c++}return s},ch=function(e,t,a,n,i){for(var s,o,l=0;l<t.length;l++)for(var u=0;u<e.length;u++)n[l][u]=Math.pow(a[l][u],i.m);for(var v=0;v<e.length;v++)for(var f=0;f<i.attributes.length;f++){s=0,o=0;for(var c=0;c<t.length;c++)s+=n[c][v]*i.attributes[f](t[c]),o+=n[c][v];e[v][f]=s/o}},dh=function(e,t,a,n,i){for(var s=0;s<e.length;s++)t[s]=e[s].slice();for(var o,l,u,v=2/(i.m-1),f=0;f<a.length;f++)for(var c=0;c<n.length;c++){o=0;for(var h=0;h<a.length;h++)l=Tn(i.distance,n[c],a[f],i.attributes,\"cmeans\"),u=Tn(i.distance,n[c],a[h],i.attributes,\"cmeans\"),o+=Math.pow(l/u,v);e[c][f]=1/o}},hh=function(e,t,a,n){for(var i=new Array(a.k),s=0;s<i.length;s++)i[s]=[];for(var o,l,u=0;u<t.length;u++){o=-1/0,l=-1;for(var v=0;v<t[0].length;v++)t[u][v]>o&&(o=t[u][v],l=v);i[l].push(e[u])}for(var f=0;f<i.length;f++)i[f]=n.collection(i[f]);return i},ru=function(e){var t=this.cy(),a=this.nodes(),n=io(e),i,s,o,l,u;l=new Array(a.length);for(var v=0;v<a.length;v++)l[v]=new Array(n.k);o=new Array(a.length);for(var f=0;f<a.length;f++)o[f]=new Array(n.k);for(var c=0;c<a.length;c++){for(var h=0,d=0;d<n.k;d++)o[c][d]=Math.random(),h+=o[c][d];for(var y=0;y<n.k;y++)o[c][y]=o[c][y]/h}s=new Array(n.k);for(var g=0;g<n.k;g++)s[g]=new Array(n.attributes.length);u=new Array(a.length);for(var p=0;p<a.length;p++)u[p]=new Array(n.k);for(var m=!0,b=0;m&&b<n.maxIterations;)m=!1,ch(s,a,o,u,n),dh(o,l,s,a,n),uh(o,l,n.sensitivityThreshold)||(m=!0),b++;return i=hh(a,o,n,t),{clusters:i,degreeOfMembership:o}},gh={kMeans:vh,kMedoids:fh,fuzzyCMeans:ru,fcm:ru},ph=cr({distance:\"euclidean\",linkage:\"min\",mode:\"threshold\",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),yh={single:\"min\",complete:\"max\"},mh=function(e){var t=ph(e),a=yh[t.linkage];return a!=null&&(t.linkage=a),t},tu=function(e,t,a,n,i){for(var s=0,o=1/0,l,u=i.attributes,v=function(k,D){return Nn(i.distance,u.length,function(B){return u[B](k)},function(B){return u[B](D)},k,D)},f=0;f<e.length;f++){var c=e[f].key,h=a[c][n[c]];h<o&&(s=c,o=h)}if(i.mode===\"threshold\"&&o>=i.threshold||i.mode===\"dendrogram\"&&e.length===1)return!1;var d=t[s],y=t[n[s]],g;i.mode===\"dendrogram\"?g={left:d,right:y,key:d.key}:g={value:d.value.concat(y.value),key:d.key},e[d.index]=g,e.splice(y.index,1),t[d.key]=g;for(var p=0;p<e.length;p++){var m=e[p];d.key===m.key?l=1/0:i.linkage===\"min\"?(l=a[d.key][m.key],a[d.key][m.key]>a[y.key][m.key]&&(l=a[y.key][m.key])):i.linkage===\"max\"?(l=a[d.key][m.key],a[d.key][m.key]<a[y.key][m.key]&&(l=a[y.key][m.key])):i.linkage===\"mean\"?l=(a[d.key][m.key]*d.size+a[y.key][m.key]*y.size)/(d.size+y.size):i.mode===\"dendrogram\"?l=v(m.value,d.value):l=v(m.value[0],d.value[0]),a[d.key][m.key]=a[m.key][d.key]=l}for(var b=0;b<e.length;b++){var w=e[b].key;if(n[w]===d.key||n[w]===y.key){for(var E=w,C=0;C<e.length;C++){var x=e[C].key;a[w][x]<a[w][E]&&(E=x)}n[w]=E}e[b].index=b}return d.key=y.key=d.index=y.index=null,!0},$t=function(e,t,a){e&&(e.value?t.push(e.value):(e.left&&$t(e.left,t),e.right&&$t(e.right,t)))},Ms=function(e,t){if(!e)return\"\";if(e.left&&e.right){var a=Ms(e.left,t),n=Ms(e.right,t),i=t.add({group:\"nodes\",data:{id:a+\",\"+n}});return t.add({group:\"edges\",data:{source:a,target:i.id()}}),t.add({group:\"edges\",data:{source:n,target:i.id()}}),i.id()}else if(e.value)return e.value.id()},Ls=function(e,t,a){if(!e)return[];var n=[],i=[],s=[];return t===0?(e.left&&$t(e.left,n),e.right&&$t(e.right,i),s=n.concat(i),[a.collection(s)]):t===1?e.value?[a.collection(e.value)]:(e.left&&$t(e.left,n),e.right&&$t(e.right,i),[a.collection(n),a.collection(i)]):e.value?[a.collection(e.value)]:(e.left&&(n=Ls(e.left,t-1,a)),e.right&&(i=Ls(e.right,t-1,a)),n.concat(i))},au=function(e){for(var t=this.cy(),a=this.nodes(),n=mh(e),i=n.attributes,s=function(b,w){return Nn(n.distance,i.length,function(E){return i[E](b)},function(E){return i[E](w)},b,w)},o=[],l=[],u=[],v=[],f=0;f<a.length;f++){var c={value:n.mode===\"dendrogram\"?a[f]:[a[f]],key:f,index:f};o[f]=c,v[f]=c,l[f]=[],u[f]=0}for(var h=0;h<o.length;h++)for(var d=0;d<=h;d++){var y=void 0;n.mode===\"dendrogram\"?y=h===d?1/0:s(o[h].value,o[d].value):y=h===d?1/0:s(o[h].value[0],o[d].value[0]),l[h][d]=y,l[d][h]=y,y<l[h][u[h]]&&(u[h]=d)}for(var g=tu(o,v,l,u,n);g;)g=tu(o,v,l,u,n);var p;return n.mode===\"dendrogram\"?(p=Ls(o[0],n.dendrogramDepth,t),n.addDendrogram&&Ms(o[0],t)):(p=new Array(o.length),o.forEach(function(m,b){m.key=m.index=null,p[b]=t.collection(m.value)})),p},bh={hierarchicalClustering:au,hca:au},wh=cr({distance:\"euclidean\",preference:\"median\",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),xh=function(e){var t=e.damping,a=e.preference;.5<=t&&t<1||$e(\"Damping must range on [0.5, 1).  Got: \".concat(t));var n=[\"median\",\"mean\",\"min\",\"max\"];return n.some(function(i){return i===a})||ae(a)||$e(\"Preference must be one of [\".concat(n.map(function(i){return\"'\".concat(i,\"'\")}).join(\", \"),\"] or a number.  Got: \").concat(a)),wh(e)},Eh=function(e,t,a,n){var i=function(o,l){return n[l](o)};return-Nn(e,n.length,function(s){return i(t,s)},function(s){return i(a,s)},t,a)},Ch=function(e,t){var a=null;return t===\"median\"?a=xd(e):t===\"mean\"?a=wd(e):t===\"min\"?a=md(e):t===\"max\"?a=bd(e):a=t,a},Th=function(e,t,a){for(var n=[],i=0;i<e;i++)t[i*e+i]+a[i*e+i]>0&&n.push(i);return n},nu=function(e,t,a){for(var n=[],i=0;i<e;i++){for(var s=-1,o=-1/0,l=0;l<a.length;l++){var u=a[l];t[i*e+u]>o&&(s=u,o=t[i*e+u])}s>0&&n.push(s)}for(var v=0;v<a.length;v++)n[a[v]]=a[v];return n},Sh=function(e,t,a){for(var n=nu(e,t,a),i=0;i<a.length;i++){for(var s=[],o=0;o<n.length;o++)n[o]===a[i]&&s.push(o);for(var l=-1,u=-1/0,v=0;v<s.length;v++){for(var f=0,c=0;c<s.length;c++)f+=t[s[c]*e+s[v]];f>u&&(l=v,u=f)}a[i]=s[l]}return n=nu(e,t,a),n},iu=function(e){for(var t=this.cy(),a=this.nodes(),n=xh(e),i={},s=0;s<a.length;s++)i[a[s].id()]=s;var o,l,u,v,f,c;o=a.length,l=o*o,u=new Array(l);for(var h=0;h<l;h++)u[h]=-1/0;for(var d=0;d<o;d++)for(var y=0;y<o;y++)d!==y&&(u[d*o+y]=Eh(n.distance,a[d],a[y],n.attributes));v=Ch(u,n.preference);for(var g=0;g<o;g++)u[g*o+g]=v;f=new Array(l);for(var p=0;p<l;p++)f[p]=0;c=new Array(l);for(var m=0;m<l;m++)c[m]=0;for(var b=new Array(o),w=new Array(o),E=new Array(o),C=0;C<o;C++)b[C]=0,w[C]=0,E[C]=0;for(var x=new Array(o*n.minIterations),T=0;T<x.length;T++)x[T]=0;var k;for(k=0;k<n.maxIterations;k++){for(var D=0;D<o;D++){for(var B=-1/0,P=-1/0,A=-1,R=0,L=0;L<o;L++)b[L]=f[D*o+L],R=c[D*o+L]+u[D*o+L],R>=B?(P=B,B=R,A=L):R>P&&(P=R);for(var I=0;I<o;I++)f[D*o+I]=(1-n.damping)*(u[D*o+I]-B)+n.damping*b[I];f[D*o+A]=(1-n.damping)*(u[D*o+A]-P)+n.damping*b[A]}for(var M=0;M<o;M++){for(var O=0,V=0;V<o;V++)b[V]=c[V*o+M],w[V]=Math.max(0,f[V*o+M]),O+=w[V];O-=w[M],w[M]=f[M*o+M],O+=w[M];for(var G=0;G<o;G++)c[G*o+M]=(1-n.damping)*Math.min(0,O-w[G])+n.damping*b[G];c[M*o+M]=(1-n.damping)*(O-w[M])+n.damping*b[M]}for(var N=0,F=0;F<o;F++){var U=c[F*o+F]+f[F*o+F]>0?1:0;x[k%n.minIterations*o+F]=U,N+=U}if(N>0&&(k>=n.minIterations-1||k==n.maxIterations-1)){for(var Q=0,K=0;K<o;K++){E[K]=0;for(var j=0;j<n.minIterations;j++)E[K]+=x[j*o+K];(E[K]===0||E[K]===n.minIterations)&&Q++}if(Q===o)break}}for(var re=Th(o,f,c),ne=Sh(o,u,re),J={},z=0;z<re.length;z++)J[re[z]]=[];for(var q=0;q<a.length;q++){var H=i[a[q].id()],Y=ne[H];Y!=null&&J[Y].push(a[q])}for(var te=new Array(re.length),ce=0;ce<re.length;ce++)te[ce]=t.collection(J[re[ce]]);return te},kh={affinityPropagation:iu,ap:iu},Dh=cr({root:void 0,directed:!1}),Bh={hierholzer:function(e){if(!Le(e)){var t=arguments;e={root:t[0],directed:t[1]}}var a=Dh(e),n=a.root,i=a.directed,s=this,o=!1,l,u,v;n&&(v=ge(n)?this.filter(n)[0].id():n[0].id());var f={},c={};i?s.forEach(function(m){var b=m.id();if(m.isNode()){var w=m.indegree(!0),E=m.outdegree(!0),C=w-E,x=E-w;C==1?l?o=!0:l=b:x==1?u?o=!0:u=b:(x>1||C>1)&&(o=!0),f[b]=[],m.outgoers().forEach(function(T){T.isEdge()&&f[b].push(T.id())})}else c[b]=[void 0,m.target().id()]}):s.forEach(function(m){var b=m.id();if(m.isNode()){var w=m.degree(!0);w%2&&(l?u?o=!0:u=b:l=b),f[b]=[],m.connectedEdges().forEach(function(E){return f[b].push(E.id())})}else c[b]=[m.source().id(),m.target().id()]});var h={found:!1,trail:void 0};if(o)return h;if(u&&l)if(i){if(v&&u!=v)return h;v=u}else{if(v&&u!=v&&l!=v)return h;v||(v=u)}else v||(v=s[0].id());var d=function(b){for(var w=b,E=[b],C,x,T;f[w].length;)C=f[w].shift(),x=c[C][0],T=c[C][1],w!=T?(f[T]=f[T].filter(function(k){return k!=C}),w=T):!i&&w!=x&&(f[x]=f[x].filter(function(k){return k!=C}),w=x),E.unshift(C),E.unshift(w);return E},y=[],g=[];for(g=d(v);g.length!=1;)f[g[0]].length==0?(y.unshift(s.getElementById(g.shift())),y.unshift(s.getElementById(g.shift()))):g=d(g.shift()).concat(g);y.unshift(s.getElementById(g.shift()));for(var p in f)if(f[p].length)return h;return h.found=!0,h.trail=this.spawn(y,!0),h}},Qa=function(){var e=this,t={},a=0,n=0,i=[],s=[],o={},l=function(c,h){for(var d=s.length-1,y=[],g=e.spawn();s[d].x!=c||s[d].y!=h;)y.push(s.pop().edge),d--;y.push(s.pop().edge),y.forEach(function(p){var m=p.connectedNodes().intersection(e);g.merge(p),m.forEach(function(b){var w=b.id(),E=b.connectedEdges().intersection(e);g.merge(b),t[w].cutVertex?g.merge(E.filter(function(C){return C.isLoop()})):g.merge(E)})}),i.push(g)},u=function(c,h,d){c===d&&(n+=1),t[h]={id:a,low:a++,cutVertex:!1};var y=e.getElementById(h).connectedEdges().intersection(e);if(y.size()===0)i.push(e.spawn(e.getElementById(h)));else{var g,p,m,b;y.forEach(function(w){g=w.source().id(),p=w.target().id(),m=g===h?p:g,m!==d&&(b=w.id(),o[b]||(o[b]=!0,s.push({x:h,y:m,edge:w})),m in t?t[h].low=Math.min(t[h].low,t[m].id):(u(c,m,h),t[h].low=Math.min(t[h].low,t[m].low),t[h].id<=t[m].low&&(t[h].cutVertex=!0,l(h,m))))})}};e.forEach(function(f){if(f.isNode()){var c=f.id();c in t||(n=0,u(c,c),t[c].cutVertex=n>1)}});var v=Object.keys(t).filter(function(f){return t[f].cutVertex}).map(function(f){return e.getElementById(f)});return{cut:e.spawn(v),components:i}},Ph={hopcroftTarjanBiconnected:Qa,htbc:Qa,htb:Qa,hopcroftTarjanBiconnectedComponents:Qa},Ja=function(){var e=this,t={},a=0,n=[],i=[],s=e.spawn(e),o=function(u){i.push(u),t[u]={index:a,low:a++,explored:!1};var v=e.getElementById(u).connectedEdges().intersection(e);if(v.forEach(function(y){var g=y.target().id();g!==u&&(g in t||o(g),t[g].explored||(t[u].low=Math.min(t[u].low,t[g].low)))}),t[u].index===t[u].low){for(var f=e.spawn();;){var c=i.pop();if(f.merge(e.getElementById(c)),t[c].low=t[u].index,t[c].explored=!0,c===u)break}var h=f.edgesWith(f),d=f.merge(h);n.push(d),s=s.difference(d)}};return e.forEach(function(l){if(l.isNode()){var u=l.id();u in t||o(u)}}),{cut:s,components:n}},Ah={tarjanStronglyConnected:Ja,tsc:Ja,tscc:Ja,tarjanStronglyConnectedComponents:Ja},Dv={};[Sa,sd,od,ld,fd,dd,pd,Hd,Xt,Yt,Rs,th,gh,bh,kh,Bh,Ph,Ah].forEach(function(r){be(Dv,r)});var Bv=0,Pv=1,Av=2,Nr=function(e){if(!(this instanceof Nr))return new Nr(e);this.id=\"Thenable/1.0.7\",this.state=Bv,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e==\"function\"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))};Nr.prototype={fulfill:function(e){return su(this,Pv,\"fulfillValue\",e)},reject:function(e){return su(this,Av,\"rejectReason\",e)},then:function(e,t){var a=this,n=new Nr;return a.onFulfilled.push(uu(e,n,\"fulfill\")),a.onRejected.push(uu(t,n,\"reject\")),Rv(a),n.proxy}};var su=function(e,t,a,n){return e.state===Bv&&(e.state=t,e[a]=n,Rv(e)),e},Rv=function(e){e.state===Pv?ou(e,\"onFulfilled\",e.fulfillValue):e.state===Av&&ou(e,\"onRejected\",e.rejectReason)},ou=function(e,t,a){if(e[t].length!==0){var n=e[t];e[t]=[];var i=function(){for(var o=0;o<n.length;o++)n[o](a)};typeof setImmediate==\"function\"?setImmediate(i):setTimeout(i,0)}},uu=function(e,t,a){return function(n){if(typeof e!=\"function\")t[a].call(t,n);else{var i;try{i=e(n)}catch(s){t.reject(s);return}Mv(t,i)}}},Mv=function(e,t){if(e===t||e.proxy===t){e.reject(new TypeError(\"cannot resolve promise with itself\"));return}var a;if(ar(t)===\"object\"&&t!==null||typeof t==\"function\")try{a=t.then}catch(i){e.reject(i);return}if(typeof a==\"function\"){var n=!1;try{a.call(t,function(i){n||(n=!0,i===t?e.reject(new TypeError(\"circular thenable chain\")):Mv(e,i))},function(i){n||(n=!0,e.reject(i))})}catch(i){n||e.reject(i)}return}e.fulfill(t)};Nr.all=function(r){return new Nr(function(e,t){for(var a=new Array(r.length),n=0,i=function(l,u){a[l]=u,n++,n===r.length&&e(a)},s=0;s<r.length;s++)(function(o){var l=r[o],u=l!=null&&l.then!=null;if(u)l.then(function(f){i(o,f)},function(f){t(f)});else{var v=l;i(o,v)}})(s)})};Nr.resolve=function(r){return new Nr(function(e,t){e(r)})};Nr.reject=function(r){return new Nr(function(e,t){t(r)})};var ta=typeof Promise<\"u\"?Promise:Nr,Is=function(e,t,a){var n=Ys(e),i=!n,s=this._private=be({duration:1e3},t,a);if(s.target=e,s.style=s.style||s.css,s.started=!1,s.playing=!1,s.hooked=!1,s.applying=!1,s.progress=0,s.completes=[],s.frames=[],s.complete&&Ue(s.complete)&&s.completes.push(s.complete),i){var o=e.position();s.startPosition=s.startPosition||{x:o.x,y:o.y},s.startStyle=s.startStyle||e.cy().style().getAnimationStartStyle(e,s.style)}if(n){var l=e.pan();s.startPan={x:l.x,y:l.y},s.startZoom=e.zoom()}this.length=1,this[0]=this},Pt=Is.prototype;be(Pt,{instanceString:function(){return\"animation\"},hook:function(){var e=this._private;if(!e.hooked){var t,a=e.target._private.animation;e.queue?t=a.queue:t=a.current,t.push(this),Dr(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return e.progress===1&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return e===void 0?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,a=t.playing;return e===void 0?t.progress:(a&&this.pause(),t.progress=e,t.started=!1,a&&this.play(),this)},completed:function(){return this._private.progress===1},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var a=function(u,v){var f=e[u];f!=null&&(e[u]=e[v],e[v]=f)};if(a(\"zoom\",\"startZoom\"),a(\"pan\",\"startPan\"),a(\"position\",\"startPosition\"),e.style)for(var n=0;n<e.style.length;n++){var i=e.style[n],s=i.name,o=e.startStyle[s];e.startStyle[s]=i,e.style[n]=o}return t&&this.play(),this},promise:function(e){var t=this._private,a;switch(e){case\"frame\":a=t.frames;break;default:case\"complete\":case\"completed\":a=t.completes}return new ta(function(n,i){a.push(function(){n()})})}});Pt.complete=Pt.completed;Pt.run=Pt.play;Pt.running=Pt.playing;var Rh={animated:function(){return function(){var t=this,a=t.length!==void 0,n=a?t:[t],i=this._private.cy||this;if(!i.styleEnabled())return!1;var s=n[0];if(s)return s._private.animation.current.length>0}},clearQueue:function(){return function(){var t=this,a=t.length!==void 0,n=a?t:[t],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var s=0;s<n.length;s++){var o=n[s];o._private.animation.queue=[]}return this}},delay:function(){return function(t,a){var n=this._private.cy||this;return n.styleEnabled()?this.animate({delay:t,duration:t,complete:a}):this}},delayAnimation:function(){return function(t,a){var n=this._private.cy||this;return n.styleEnabled()?this.animation({delay:t,duration:t,complete:a}):this}},animation:function(){return function(t,a){var n=this,i=n.length!==void 0,s=i?n:[n],o=this._private.cy||this,l=!i,u=!l;if(!o.styleEnabled())return this;var v=o.style();t=be({},t,a);var f=Object.keys(t).length===0;if(f)return new Is(s[0],t);switch(t.duration===void 0&&(t.duration=400),t.duration){case\"slow\":t.duration=600;break;case\"fast\":t.duration=200;break}if(u&&(t.style=v.getPropsList(t.style||t.css),t.css=void 0),u&&t.renderedPosition!=null){var c=t.renderedPosition,h=o.pan(),d=o.zoom();t.position=yv(c,d,h)}if(l&&t.panBy!=null){var y=t.panBy,g=o.pan();t.pan={x:g.x+y.x,y:g.y+y.y}}var p=t.center||t.centre;if(l&&p!=null){var m=o.getCenterPan(p.eles,t.zoom);m!=null&&(t.pan=m)}if(l&&t.fit!=null){var b=t.fit,w=o.getFitViewport(b.eles||b.boundingBox,b.padding);w!=null&&(t.pan=w.pan,t.zoom=w.zoom)}if(l&&Le(t.zoom)){var E=o.getZoomedViewport(t.zoom);E!=null?(E.zoomed&&(t.zoom=E.zoom),E.panned&&(t.pan=E.pan)):t.zoom=null}return new Is(s[0],t)}},animate:function(){return function(t,a){var n=this,i=n.length!==void 0,s=i?n:[n],o=this._private.cy||this;if(!o.styleEnabled())return this;a&&(t=be({},t,a));for(var l=0;l<s.length;l++){var u=s[l],v=u.animated()&&(t.queue===void 0||t.queue),f=u.animation(t,v?{queue:!0}:void 0);f.play()}return this}},stop:function(){return function(t,a){var n=this,i=n.length!==void 0,s=i?n:[n],o=this._private.cy||this;if(!o.styleEnabled())return this;for(var l=0;l<s.length;l++){for(var u=s[l],v=u._private,f=v.animation.current,c=0;c<f.length;c++){var h=f[c],d=h._private;a&&(d.duration=0)}t&&(v.animation.queue=[]),a||(v.animation.current=[])}return o.notify(\"draw\"),this}}},bi,lu;function zn(){if(lu)return bi;lu=1;var r=Array.isArray;return bi=r,bi}var wi,vu;function Mh(){if(vu)return wi;vu=1;var r=zn(),e=za(),t=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,a=/^\\w*$/;function n(i,s){if(r(i))return!1;var o=typeof i;return o==\"number\"||o==\"symbol\"||o==\"boolean\"||i==null||e(i)?!0:a.test(i)||!t.test(i)||s!=null&&i in Object(s)}return wi=n,wi}var xi,fu;function Lh(){if(fu)return xi;fu=1;var r=uv(),e=Na(),t=\"[object AsyncFunction]\",a=\"[object Function]\",n=\"[object GeneratorFunction]\",i=\"[object Proxy]\";function s(o){if(!e(o))return!1;var l=r(o);return l==a||l==n||l==t||l==i}return xi=s,xi}var Ei,cu;function Ih(){if(cu)return Ei;cu=1;var r=Ln(),e=r[\"__core-js_shared__\"];return Ei=e,Ei}var Ci,du;function Oh(){if(du)return Ci;du=1;var r=Ih(),e=(function(){var a=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||\"\");return a?\"Symbol(src)_1.\"+a:\"\"})();function t(a){return!!e&&e in a}return Ci=t,Ci}var Ti,hu;function Nh(){if(hu)return Ti;hu=1;var r=Function.prototype,e=r.toString;function t(a){if(a!=null){try{return e.call(a)}catch{}try{return a+\"\"}catch{}}return\"\"}return Ti=t,Ti}var Si,gu;function zh(){if(gu)return Si;gu=1;var r=Lh(),e=Oh(),t=Na(),a=Nh(),n=/[\\\\^$.*+?()[\\]{}|]/g,i=/^\\[object .+?Constructor\\]$/,s=Function.prototype,o=Object.prototype,l=s.toString,u=o.hasOwnProperty,v=RegExp(\"^\"+l.call(u).replace(n,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function f(c){if(!t(c)||e(c))return!1;var h=r(c)?v:i;return h.test(a(c))}return Si=f,Si}var ki,pu;function Fh(){if(pu)return ki;pu=1;function r(e,t){return e?.[t]}return ki=r,ki}var Di,yu;function so(){if(yu)return Di;yu=1;var r=zh(),e=Fh();function t(a,n){var i=e(a,n);return r(i)?i:void 0}return Di=t,Di}var Bi,mu;function Fn(){if(mu)return Bi;mu=1;var r=so(),e=r(Object,\"create\");return Bi=e,Bi}var Pi,bu;function Vh(){if(bu)return Pi;bu=1;var r=Fn();function e(){this.__data__=r?r(null):{},this.size=0}return Pi=e,Pi}var Ai,wu;function qh(){if(wu)return Ai;wu=1;function r(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}return Ai=r,Ai}var Ri,xu;function _h(){if(xu)return Ri;xu=1;var r=Fn(),e=\"__lodash_hash_undefined__\",t=Object.prototype,a=t.hasOwnProperty;function n(i){var s=this.__data__;if(r){var o=s[i];return o===e?void 0:o}return a.call(s,i)?s[i]:void 0}return Ri=n,Ri}var Mi,Eu;function Gh(){if(Eu)return Mi;Eu=1;var r=Fn(),e=Object.prototype,t=e.hasOwnProperty;function a(n){var i=this.__data__;return r?i[n]!==void 0:t.call(i,n)}return Mi=a,Mi}var Li,Cu;function Hh(){if(Cu)return Li;Cu=1;var r=Fn(),e=\"__lodash_hash_undefined__\";function t(a,n){var i=this.__data__;return this.size+=this.has(a)?0:1,i[a]=r&&n===void 0?e:n,this}return Li=t,Li}var Ii,Tu;function Wh(){if(Tu)return Ii;Tu=1;var r=Vh(),e=qh(),t=_h(),a=Gh(),n=Hh();function i(s){var o=-1,l=s==null?0:s.length;for(this.clear();++o<l;){var u=s[o];this.set(u[0],u[1])}}return i.prototype.clear=r,i.prototype.delete=e,i.prototype.get=t,i.prototype.has=a,i.prototype.set=n,Ii=i,Ii}var Oi,Su;function $h(){if(Su)return Oi;Su=1;function r(){this.__data__=[],this.size=0}return Oi=r,Oi}var Ni,ku;function Lv(){if(ku)return Ni;ku=1;function r(e,t){return e===t||e!==e&&t!==t}return Ni=r,Ni}var zi,Du;function Vn(){if(Du)return zi;Du=1;var r=Lv();function e(t,a){for(var n=t.length;n--;)if(r(t[n][0],a))return n;return-1}return zi=e,zi}var Fi,Bu;function Uh(){if(Bu)return Fi;Bu=1;var r=Vn(),e=Array.prototype,t=e.splice;function a(n){var i=this.__data__,s=r(i,n);if(s<0)return!1;var o=i.length-1;return s==o?i.pop():t.call(i,s,1),--this.size,!0}return Fi=a,Fi}var Vi,Pu;function Kh(){if(Pu)return Vi;Pu=1;var r=Vn();function e(t){var a=this.__data__,n=r(a,t);return n<0?void 0:a[n][1]}return Vi=e,Vi}var qi,Au;function Xh(){if(Au)return qi;Au=1;var r=Vn();function e(t){return r(this.__data__,t)>-1}return qi=e,qi}var _i,Ru;function Yh(){if(Ru)return _i;Ru=1;var r=Vn();function e(t,a){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,a])):n[i][1]=a,this}return _i=e,_i}var Gi,Mu;function Zh(){if(Mu)return Gi;Mu=1;var r=$h(),e=Uh(),t=Kh(),a=Xh(),n=Yh();function i(s){var o=-1,l=s==null?0:s.length;for(this.clear();++o<l;){var u=s[o];this.set(u[0],u[1])}}return i.prototype.clear=r,i.prototype.delete=e,i.prototype.get=t,i.prototype.has=a,i.prototype.set=n,Gi=i,Gi}var Hi,Lu;function Qh(){if(Lu)return Hi;Lu=1;var r=so(),e=Ln(),t=r(e,\"Map\");return Hi=t,Hi}var Wi,Iu;function Jh(){if(Iu)return Wi;Iu=1;var r=Wh(),e=Zh(),t=Qh();function a(){this.size=0,this.__data__={hash:new r,map:new(t||e),string:new r}}return Wi=a,Wi}var $i,Ou;function jh(){if(Ou)return $i;Ou=1;function r(e){var t=typeof e;return t==\"string\"||t==\"number\"||t==\"symbol\"||t==\"boolean\"?e!==\"__proto__\":e===null}return $i=r,$i}var Ui,Nu;function qn(){if(Nu)return Ui;Nu=1;var r=jh();function e(t,a){var n=t.__data__;return r(a)?n[typeof a==\"string\"?\"string\":\"hash\"]:n.map}return Ui=e,Ui}var Ki,zu;function eg(){if(zu)return Ki;zu=1;var r=qn();function e(t){var a=r(this,t).delete(t);return this.size-=a?1:0,a}return Ki=e,Ki}var Xi,Fu;function rg(){if(Fu)return Xi;Fu=1;var r=qn();function e(t){return r(this,t).get(t)}return Xi=e,Xi}var Yi,Vu;function tg(){if(Vu)return Yi;Vu=1;var r=qn();function e(t){return r(this,t).has(t)}return Yi=e,Yi}var Zi,qu;function ag(){if(qu)return Zi;qu=1;var r=qn();function e(t,a){var n=r(this,t),i=n.size;return n.set(t,a),this.size+=n.size==i?0:1,this}return Zi=e,Zi}var Qi,_u;function ng(){if(_u)return Qi;_u=1;var r=Jh(),e=eg(),t=rg(),a=tg(),n=ag();function i(s){var o=-1,l=s==null?0:s.length;for(this.clear();++o<l;){var u=s[o];this.set(u[0],u[1])}}return i.prototype.clear=r,i.prototype.delete=e,i.prototype.get=t,i.prototype.has=a,i.prototype.set=n,Qi=i,Qi}var Ji,Gu;function ig(){if(Gu)return Ji;Gu=1;var r=ng(),e=\"Expected a function\";function t(a,n){if(typeof a!=\"function\"||n!=null&&typeof n!=\"function\")throw new TypeError(e);var i=function(){var s=arguments,o=n?n.apply(this,s):s[0],l=i.cache;if(l.has(o))return l.get(o);var u=a.apply(this,s);return i.cache=l.set(o,u)||l,u};return i.cache=new(t.Cache||r),i}return t.Cache=r,Ji=t,Ji}var ji,Hu;function sg(){if(Hu)return ji;Hu=1;var r=ig(),e=500;function t(a){var n=r(a,function(s){return i.size===e&&i.clear(),s}),i=n.cache;return n}return ji=t,ji}var es,Wu;function Iv(){if(Wu)return es;Wu=1;var r=sg(),e=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,t=/\\\\(\\\\)?/g,a=r(function(n){var i=[];return n.charCodeAt(0)===46&&i.push(\"\"),n.replace(e,function(s,o,l,u){i.push(l?u.replace(t,\"$1\"):o||s)}),i});return es=a,es}var rs,$u;function Ov(){if($u)return rs;$u=1;function r(e,t){for(var a=-1,n=e==null?0:e.length,i=Array(n);++a<n;)i[a]=t(e[a],a,e);return i}return rs=r,rs}var ts,Uu;function og(){if(Uu)return ts;Uu=1;var r=Qs(),e=Ov(),t=zn(),a=za(),n=r?r.prototype:void 0,i=n?n.toString:void 0;function s(o){if(typeof o==\"string\")return o;if(t(o))return e(o,s)+\"\";if(a(o))return i?i.call(o):\"\";var l=o+\"\";return l==\"0\"&&1/o==-1/0?\"-0\":l}return ts=s,ts}var as,Ku;function Nv(){if(Ku)return as;Ku=1;var r=og();function e(t){return t==null?\"\":r(t)}return as=e,as}var ns,Xu;function zv(){if(Xu)return ns;Xu=1;var r=zn(),e=Mh(),t=Iv(),a=Nv();function n(i,s){return r(i)?i:e(i,s)?[i]:t(a(i))}return ns=n,ns}var is,Yu;function oo(){if(Yu)return is;Yu=1;var r=za();function e(t){if(typeof t==\"string\"||r(t))return t;var a=t+\"\";return a==\"0\"&&1/t==-1/0?\"-0\":a}return is=e,is}var ss,Zu;function ug(){if(Zu)return ss;Zu=1;var r=zv(),e=oo();function t(a,n){n=r(n,a);for(var i=0,s=n.length;a!=null&&i<s;)a=a[e(n[i++])];return i&&i==s?a:void 0}return ss=t,ss}var os,Qu;function lg(){if(Qu)return os;Qu=1;var r=ug();function e(t,a,n){var i=t==null?void 0:r(t,a);return i===void 0?n:i}return os=e,os}var vg=lg(),fg=Oa(vg),us,Ju;function cg(){if(Ju)return us;Ju=1;var r=so(),e=(function(){try{var t=r(Object,\"defineProperty\");return t({},\"\",{}),t}catch{}})();return us=e,us}var ls,ju;function dg(){if(ju)return ls;ju=1;var r=cg();function e(t,a,n){a==\"__proto__\"&&r?r(t,a,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[a]=n}return ls=e,ls}var vs,el;function hg(){if(el)return vs;el=1;var r=dg(),e=Lv(),t=Object.prototype,a=t.hasOwnProperty;function n(i,s,o){var l=i[s];(!(a.call(i,s)&&e(l,o))||o===void 0&&!(s in i))&&r(i,s,o)}return vs=n,vs}var fs,rl;function gg(){if(rl)return fs;rl=1;var r=9007199254740991,e=/^(?:0|[1-9]\\d*)$/;function t(a,n){var i=typeof a;return n=n??r,!!n&&(i==\"number\"||i!=\"symbol\"&&e.test(a))&&a>-1&&a%1==0&&a<n}return fs=t,fs}var cs,tl;function pg(){if(tl)return cs;tl=1;var r=hg(),e=zv(),t=gg(),a=Na(),n=oo();function i(s,o,l,u){if(!a(s))return s;o=e(o,s);for(var v=-1,f=o.length,c=f-1,h=s;h!=null&&++v<f;){var d=n(o[v]),y=l;if(d===\"__proto__\"||d===\"constructor\"||d===\"prototype\")return s;if(v!=c){var g=h[d];y=u?u(g,d,h):void 0,y===void 0&&(y=a(g)?g:t(o[v+1])?[]:{})}r(h,d,y),h=h[d]}return s}return cs=i,cs}var ds,al;function yg(){if(al)return ds;al=1;var r=pg();function e(t,a,n){return t==null?t:r(t,a,n)}return ds=e,ds}var mg=yg(),bg=Oa(mg),hs,nl;function wg(){if(nl)return hs;nl=1;function r(e,t){var a=-1,n=e.length;for(t||(t=Array(n));++a<n;)t[a]=e[a];return t}return hs=r,hs}var gs,il;function xg(){if(il)return gs;il=1;var r=Ov(),e=wg(),t=zn(),a=za(),n=Iv(),i=oo(),s=Nv();function o(l){return t(l)?r(l,i):a(l)?[l]:e(n(s(l)))}return gs=o,gs}var Eg=xg(),Cg=Oa(Eg),Tg={data:function(e){var t={field:\"data\",bindingEvent:\"data\",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:\"data\",settingTriggersEvent:!1,triggerFnName:\"trigger\",immutableKeys:{},updateStyle:!1,beforeGet:function(n){},beforeSet:function(n,i){},onSet:function(n){},canSet:function(n){return!0}};return e=be({},t,e),function(n,i){var s=e,o=this,l=o.length!==void 0,u=l?o:[o],v=l?o[0]:o;if(ge(n)){var f=n.indexOf(\".\")!==-1,c=f&&Cg(n);if(s.allowGetting&&i===void 0){var h;return v&&(s.beforeGet(v),c&&v._private[s.field][n]===void 0?h=fg(v._private[s.field],c):h=v._private[s.field][n]),h}else if(s.allowSetting&&i!==void 0){var d=!s.immutableKeys[n];if(d){var y=Jl({},n,i);s.beforeSet(o,y);for(var g=0,p=u.length;g<p;g++){var m=u[g];s.canSet(m)&&(c&&v._private[s.field][n]===void 0?bg(m._private[s.field],c,i):m._private[s.field][n]=i)}s.updateStyle&&o.updateStyle(),s.onSet(o),s.settingTriggersEvent&&o[s.triggerFnName](s.settingEvent)}}}else if(s.allowSetting&&Le(n)){var b=n,w,E,C=Object.keys(b);s.beforeSet(o,b);for(var x=0;x<C.length;x++){w=C[x],E=b[w];var T=!s.immutableKeys[w];if(T)for(var k=0;k<u.length;k++){var D=u[k];s.canSet(D)&&(D._private[s.field][w]=E)}}s.updateStyle&&o.updateStyle(),s.onSet(o),s.settingTriggersEvent&&o[s.triggerFnName](s.settingEvent)}else if(s.allowBinding&&Ue(n)){var B=n;o.on(s.bindingEvent,B)}else if(s.allowGetting&&n===void 0){var P;return v&&(s.beforeGet(v),P=v._private[s.field]),P}return o}},removeData:function(e){var t={field:\"data\",event:\"data\",triggerFnName:\"trigger\",triggerEvent:!1,immutableKeys:{}};return e=be({},t,e),function(n){var i=e,s=this,o=s.length!==void 0,l=o?s:[s];if(ge(n)){for(var u=n.split(/\\s+/),v=u.length,f=0;f<v;f++){var c=u[f];if(!ut(c)){var h=!i.immutableKeys[c];if(h)for(var d=0,y=l.length;d<y;d++)l[d]._private[i.field][c]=void 0}}i.triggerEvent&&s[i.triggerFnName](i.event)}else if(n===void 0){for(var g=0,p=l.length;g<p;g++)for(var m=l[g]._private[i.field],b=Object.keys(m),w=0;w<b.length;w++){var E=b[w],C=!i.immutableKeys[E];C&&(m[E]=void 0)}i.triggerEvent&&s[i.triggerFnName](i.event)}return s}}},Sg={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(a,n){var i=this,s=Array.prototype.slice.call(arguments,0);return new ta(function(o,l){var u=function(h){i.off.apply(i,f),o(h)},v=s.concat([u]),f=v.concat([]);i.on.apply(i,v)})}}},Fe={};[Rh,Tg,Sg].forEach(function(r){be(Fe,r)});var kg={animate:Fe.animate(),animation:Fe.animation(),animated:Fe.animated(),clearQueue:Fe.clearQueue(),delay:Fe.delay(),delayAnimation:Fe.delayAnimation(),stop:Fe.stop()},vn={classes:function(e){var t=this;if(e===void 0){var a=[];return t[0]._private.classes.forEach(function(d){return a.push(d)}),a}else _e(e)||(e=(e||\"\").match(/\\S+/g)||[]);for(var n=[],i=new ra(e),s=0;s<t.length;s++){for(var o=t[s],l=o._private,u=l.classes,v=!1,f=0;f<e.length;f++){var c=e[f],h=u.has(c);if(!h){v=!0;break}}v||(v=u.size!==e.length),v&&(l.classes=i,n.push(o))}return n.length>0&&this.spawn(n).updateStyle().emit(\"class\"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return t!=null&&t._private.classes.has(e)},toggleClass:function(e,t){_e(e)||(e=e.match(/\\S+/g)||[]);for(var a=this,n=t===void 0,i=[],s=0,o=a.length;s<o;s++)for(var l=a[s],u=l._private.classes,v=!1,f=0;f<e.length;f++){var c=e[f],h=u.has(c),d=!1;t||n&&!h?(u.add(c),d=!0):(!t||n&&h)&&(u.delete(c),d=!0),!v&&d&&(i.push(l),v=!0)}return i.length>0&&this.spawn(i).updateStyle().emit(\"class\"),a},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var a=this;if(t==null)t=250;else if(t===0)return a;return a.addClass(e),setTimeout(function(){a.removeClass(e)},t),a}};vn.className=vn.classNames=vn.classes;var Me={metaChar:\"[\\\\!\\\\\\\"\\\\#\\\\$\\\\%\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\.\\\\/\\\\:\\\\;\\\\<\\\\=\\\\>\\\\?\\\\@\\\\[\\\\]\\\\^\\\\`\\\\{\\\\|\\\\}\\\\~]\",comparatorOp:\"=|\\\\!=|>|>=|<|<=|\\\\$=|\\\\^=|\\\\*=\",boolOp:\"\\\\?|\\\\!|\\\\^\",string:`\"(?:\\\\\\\\\"|[^\"])*\"|'(?:\\\\\\\\'|[^'])*'`,number:tr,meta:\"degree|indegree|outdegree\",separator:\"\\\\s*,\\\\s*\",descendant:\"\\\\s+\",child:\"\\\\s+>\\\\s+\",subject:\"\\\\$\",group:\"node|edge|\\\\*\",directedEdge:\"\\\\s+->\\\\s+\",undirectedEdge:\"\\\\s+<->\\\\s+\"};Me.variable=\"(?:[\\\\w-.]|(?:\\\\\\\\\"+Me.metaChar+\"))+\";Me.className=\"(?:[\\\\w-]|(?:\\\\\\\\\"+Me.metaChar+\"))+\";Me.value=Me.string+\"|\"+Me.number;Me.id=Me.variable;(function(){var r,e,t;for(r=Me.comparatorOp.split(\"|\"),t=0;t<r.length;t++)e=r[t],Me.comparatorOp+=\"|@\"+e;for(r=Me.comparatorOp.split(\"|\"),t=0;t<r.length;t++)e=r[t],!(e.indexOf(\"!\")>=0)&&e!==\"=\"&&(Me.comparatorOp+=\"|\\\\!\"+e)})();var qe=function(){return{checks:[]}},se={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},Os=[{selector:\":selected\",matches:function(e){return e.selected()}},{selector:\":unselected\",matches:function(e){return!e.selected()}},{selector:\":selectable\",matches:function(e){return e.selectable()}},{selector:\":unselectable\",matches:function(e){return!e.selectable()}},{selector:\":locked\",matches:function(e){return e.locked()}},{selector:\":unlocked\",matches:function(e){return!e.locked()}},{selector:\":visible\",matches:function(e){return e.visible()}},{selector:\":hidden\",matches:function(e){return!e.visible()}},{selector:\":transparent\",matches:function(e){return e.transparent()}},{selector:\":grabbed\",matches:function(e){return e.grabbed()}},{selector:\":free\",matches:function(e){return!e.grabbed()}},{selector:\":removed\",matches:function(e){return e.removed()}},{selector:\":inside\",matches:function(e){return!e.removed()}},{selector:\":grabbable\",matches:function(e){return e.grabbable()}},{selector:\":ungrabbable\",matches:function(e){return!e.grabbable()}},{selector:\":animated\",matches:function(e){return e.animated()}},{selector:\":unanimated\",matches:function(e){return!e.animated()}},{selector:\":parent\",matches:function(e){return e.isParent()}},{selector:\":childless\",matches:function(e){return e.isChildless()}},{selector:\":child\",matches:function(e){return e.isChild()}},{selector:\":orphan\",matches:function(e){return e.isOrphan()}},{selector:\":nonorphan\",matches:function(e){return e.isChild()}},{selector:\":compound\",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:\":loop\",matches:function(e){return e.isLoop()}},{selector:\":simple\",matches:function(e){return e.isSimple()}},{selector:\":active\",matches:function(e){return e.active()}},{selector:\":inactive\",matches:function(e){return!e.active()}},{selector:\":backgrounding\",matches:function(e){return e.backgrounding()}},{selector:\":nonbackgrounding\",matches:function(e){return!e.backgrounding()}}].sort(function(r,e){return Tc(r.selector,e.selector)}),Dg=(function(){for(var r={},e,t=0;t<Os.length;t++)e=Os[t],r[e.selector]=e.matches;return r})(),Bg=function(e,t){return Dg[e](t)},Pg=\"(\"+Os.map(function(r){return r.selector}).join(\"|\")+\")\",Ot=function(e){return e.replace(new RegExp(\"\\\\\\\\(\"+Me.metaChar+\")\",\"g\"),function(t,a){return a})},rt=function(e,t,a){e[e.length-1]=a},Ns=[{name:\"group\",query:!0,regex:\"(\"+Me.group+\")\",populate:function(e,t,a){var n=Je(a,1),i=n[0];t.checks.push({type:se.GROUP,value:i===\"*\"?i:i+\"s\"})}},{name:\"state\",query:!0,regex:Pg,populate:function(e,t,a){var n=Je(a,1),i=n[0];t.checks.push({type:se.STATE,value:i})}},{name:\"id\",query:!0,regex:\"\\\\#(\"+Me.id+\")\",populate:function(e,t,a){var n=Je(a,1),i=n[0];t.checks.push({type:se.ID,value:Ot(i)})}},{name:\"className\",query:!0,regex:\"\\\\.(\"+Me.className+\")\",populate:function(e,t,a){var n=Je(a,1),i=n[0];t.checks.push({type:se.CLASS,value:Ot(i)})}},{name:\"dataExists\",query:!0,regex:\"\\\\[\\\\s*(\"+Me.variable+\")\\\\s*\\\\]\",populate:function(e,t,a){var n=Je(a,1),i=n[0];t.checks.push({type:se.DATA_EXIST,field:Ot(i)})}},{name:\"dataCompare\",query:!0,regex:\"\\\\[\\\\s*(\"+Me.variable+\")\\\\s*(\"+Me.comparatorOp+\")\\\\s*(\"+Me.value+\")\\\\s*\\\\]\",populate:function(e,t,a){var n=Je(a,3),i=n[0],s=n[1],o=n[2],l=new RegExp(\"^\"+Me.string+\"$\").exec(o)!=null;l?o=o.substring(1,o.length-1):o=parseFloat(o),t.checks.push({type:se.DATA_COMPARE,field:Ot(i),operator:s,value:o})}},{name:\"dataBool\",query:!0,regex:\"\\\\[\\\\s*(\"+Me.boolOp+\")\\\\s*(\"+Me.variable+\")\\\\s*\\\\]\",populate:function(e,t,a){var n=Je(a,2),i=n[0],s=n[1];t.checks.push({type:se.DATA_BOOL,field:Ot(s),operator:i})}},{name:\"metaCompare\",query:!0,regex:\"\\\\[\\\\[\\\\s*(\"+Me.meta+\")\\\\s*(\"+Me.comparatorOp+\")\\\\s*(\"+Me.number+\")\\\\s*\\\\]\\\\]\",populate:function(e,t,a){var n=Je(a,3),i=n[0],s=n[1],o=n[2];t.checks.push({type:se.META_COMPARE,field:Ot(i),operator:s,value:parseFloat(o)})}},{name:\"nextQuery\",separator:!0,regex:Me.separator,populate:function(e,t){var a=e.currentSubject,n=e.edgeCount,i=e.compoundCount,s=e[e.length-1];a!=null&&(s.subject=a,e.currentSubject=null),s.edgeCount=n,s.compoundCount=i,e.edgeCount=0,e.compoundCount=0;var o=e[e.length++]=qe();return o}},{name:\"directedEdge\",separator:!0,regex:Me.directedEdge,populate:function(e,t){if(e.currentSubject==null){var a=qe(),n=t,i=qe();return a.checks.push({type:se.DIRECTED_EDGE,source:n,target:i}),rt(e,t,a),e.edgeCount++,i}else{var s=qe(),o=t,l=qe();return s.checks.push({type:se.NODE_SOURCE,source:o,target:l}),rt(e,t,s),e.edgeCount++,l}}},{name:\"undirectedEdge\",separator:!0,regex:Me.undirectedEdge,populate:function(e,t){if(e.currentSubject==null){var a=qe(),n=t,i=qe();return a.checks.push({type:se.UNDIRECTED_EDGE,nodes:[n,i]}),rt(e,t,a),e.edgeCount++,i}else{var s=qe(),o=t,l=qe();return s.checks.push({type:se.NODE_NEIGHBOR,node:o,neighbor:l}),rt(e,t,s),l}}},{name:\"child\",separator:!0,regex:Me.child,populate:function(e,t){if(e.currentSubject==null){var a=qe(),n=qe(),i=e[e.length-1];return a.checks.push({type:se.CHILD,parent:i,child:n}),rt(e,t,a),e.compoundCount++,n}else if(e.currentSubject===t){var s=qe(),o=e[e.length-1],l=qe(),u=qe(),v=qe(),f=qe();return s.checks.push({type:se.COMPOUND_SPLIT,left:o,right:l,subject:u}),u.checks=t.checks,t.checks=[{type:se.TRUE}],f.checks.push({type:se.TRUE}),l.checks.push({type:se.PARENT,parent:f,child:v}),rt(e,o,s),e.currentSubject=u,e.compoundCount++,v}else{var c=qe(),h=qe(),d=[{type:se.PARENT,parent:c,child:h}];return c.checks=t.checks,t.checks=d,e.compoundCount++,h}}},{name:\"descendant\",separator:!0,regex:Me.descendant,populate:function(e,t){if(e.currentSubject==null){var a=qe(),n=qe(),i=e[e.length-1];return a.checks.push({type:se.DESCENDANT,ancestor:i,descendant:n}),rt(e,t,a),e.compoundCount++,n}else if(e.currentSubject===t){var s=qe(),o=e[e.length-1],l=qe(),u=qe(),v=qe(),f=qe();return s.checks.push({type:se.COMPOUND_SPLIT,left:o,right:l,subject:u}),u.checks=t.checks,t.checks=[{type:se.TRUE}],f.checks.push({type:se.TRUE}),l.checks.push({type:se.ANCESTOR,ancestor:f,descendant:v}),rt(e,o,s),e.currentSubject=u,e.compoundCount++,v}else{var c=qe(),h=qe(),d=[{type:se.ANCESTOR,ancestor:c,descendant:h}];return c.checks=t.checks,t.checks=d,e.compoundCount++,h}}},{name:\"subject\",modifier:!0,regex:Me.subject,populate:function(e,t){if(e.currentSubject!=null&&e.currentSubject!==t)return Ve(\"Redefinition of subject in selector `\"+e.toString()+\"`\"),!1;e.currentSubject=t;var a=e[e.length-1],n=a.checks[0],i=n==null?null:n.type;i===se.DIRECTED_EDGE?n.type=se.NODE_TARGET:i===se.UNDIRECTED_EDGE&&(n.type=se.NODE_NEIGHBOR,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];Ns.forEach(function(r){return r.regexObj=new RegExp(\"^\"+r.regex)});var Ag=function(e){for(var t,a,n,i=0;i<Ns.length;i++){var s=Ns[i],o=s.name,l=e.match(s.regexObj);if(l!=null){a=l,t=s,n=o;var u=l[0];e=e.substring(u.length);break}}return{expr:t,match:a,name:n,remaining:e}},Rg=function(e){var t=e.match(/^\\s+/);if(t){var a=t[0];e=e.substring(a.length)}return e},Mg=function(e){var t=this,a=t.inputText=e,n=t[0]=qe();for(t.length=1,a=Rg(a);;){var i=Ag(a);if(i.expr==null)return Ve(\"The selector `\"+e+\"`is invalid\"),!1;var s=i.match.slice(1),o=i.expr.populate(t,n,s);if(o===!1)return!1;if(o!=null&&(n=o),a=i.remaining,a.match(/^\\s*$/))break}var l=t[t.length-1];t.currentSubject!=null&&(l.subject=t.currentSubject),l.edgeCount=t.edgeCount,l.compoundCount=t.compoundCount;for(var u=0;u<t.length;u++){var v=t[u];if(v.compoundCount>0&&v.edgeCount>0)return Ve(\"The selector `\"+e+\"` is invalid because it uses both a compound selector and an edge selector\"),!1;if(v.edgeCount>1)return Ve(\"The selector `\"+e+\"` is invalid because it uses multiple edge selectors\"),!1;v.edgeCount===1&&Ve(\"The selector `\"+e+\"` is deprecated.  Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons.  Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.\")}return!0},Lg=function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=function(v){return v??\"\"},t=function(v){return ge(v)?'\"'+v+'\"':e(v)},a=function(v){return\" \"+v+\" \"},n=function(v,f){var c=v.type,h=v.value;switch(c){case se.GROUP:{var d=e(h);return d.substring(0,d.length-1)}case se.DATA_COMPARE:{var y=v.field,g=v.operator;return\"[\"+y+a(e(g))+t(h)+\"]\"}case se.DATA_BOOL:{var p=v.operator,m=v.field;return\"[\"+e(p)+m+\"]\"}case se.DATA_EXIST:{var b=v.field;return\"[\"+b+\"]\"}case se.META_COMPARE:{var w=v.operator,E=v.field;return\"[[\"+E+a(e(w))+t(h)+\"]]\"}case se.STATE:return h;case se.ID:return\"#\"+h;case se.CLASS:return\".\"+h;case se.PARENT:case se.CHILD:return i(v.parent,f)+a(\">\")+i(v.child,f);case se.ANCESTOR:case se.DESCENDANT:return i(v.ancestor,f)+\" \"+i(v.descendant,f);case se.COMPOUND_SPLIT:{var C=i(v.left,f),x=i(v.subject,f),T=i(v.right,f);return C+(C.length>0?\" \":\"\")+x+T}case se.TRUE:return\"\"}},i=function(v,f){return v.checks.reduce(function(c,h,d){return c+(f===v&&d===0?\"$\":\"\")+n(h,f)},\"\")},s=\"\",o=0;o<this.length;o++){var l=this[o];s+=i(l,l.subject),this.length>1&&o<this.length-1&&(s+=\", \")}return this.toStringCache=s,s},Ig={parse:Mg,toString:Lg},Fv=function(e,t,a){var n,i=ge(e),s=ae(e),o=ge(a),l,u,v=!1,f=!1,c=!1;switch(t.indexOf(\"!\")>=0&&(t=t.replace(\"!\",\"\"),f=!0),t.indexOf(\"@\")>=0&&(t=t.replace(\"@\",\"\"),v=!0),(i||o||v)&&(l=!i&&!s?\"\":\"\"+e,u=\"\"+a),v&&(e=l=l.toLowerCase(),a=u=u.toLowerCase()),t){case\"*=\":n=l.indexOf(u)>=0;break;case\"$=\":n=l.indexOf(u,l.length-u.length)>=0;break;case\"^=\":n=l.indexOf(u)===0;break;case\"=\":n=e===a;break;case\">\":c=!0,n=e>a;break;case\">=\":c=!0,n=e>=a;break;case\"<\":c=!0,n=e<a;break;case\"<=\":c=!0,n=e<=a;break;default:n=!1;break}return f&&(e!=null||!c)&&(n=!n),n},Og=function(e,t){switch(t){case\"?\":return!!e;case\"!\":return!e;case\"^\":return e===void 0}},Ng=function(e){return e!==void 0},uo=function(e,t){return e.data(t)},zg=function(e,t){return e[t]()},Xe=[],We=function(e,t){return e.checks.every(function(a){return Xe[a.type](a,t)})};Xe[se.GROUP]=function(r,e){var t=r.value;return t===\"*\"||t===e.group()};Xe[se.STATE]=function(r,e){var t=r.value;return Bg(t,e)};Xe[se.ID]=function(r,e){var t=r.value;return e.id()===t};Xe[se.CLASS]=function(r,e){var t=r.value;return e.hasClass(t)};Xe[se.META_COMPARE]=function(r,e){var t=r.field,a=r.operator,n=r.value;return Fv(zg(e,t),a,n)};Xe[se.DATA_COMPARE]=function(r,e){var t=r.field,a=r.operator,n=r.value;return Fv(uo(e,t),a,n)};Xe[se.DATA_BOOL]=function(r,e){var t=r.field,a=r.operator;return Og(uo(e,t),a)};Xe[se.DATA_EXIST]=function(r,e){var t=r.field;return r.operator,Ng(uo(e,t))};Xe[se.UNDIRECTED_EDGE]=function(r,e){var t=r.nodes[0],a=r.nodes[1],n=e.source(),i=e.target();return We(t,n)&&We(a,i)||We(a,n)&&We(t,i)};Xe[se.NODE_NEIGHBOR]=function(r,e){return We(r.node,e)&&e.neighborhood().some(function(t){return t.isNode()&&We(r.neighbor,t)})};Xe[se.DIRECTED_EDGE]=function(r,e){return We(r.source,e.source())&&We(r.target,e.target())};Xe[se.NODE_SOURCE]=function(r,e){return We(r.source,e)&&e.outgoers().some(function(t){return t.isNode()&&We(r.target,t)})};Xe[se.NODE_TARGET]=function(r,e){return We(r.target,e)&&e.incomers().some(function(t){return t.isNode()&&We(r.source,t)})};Xe[se.CHILD]=function(r,e){return We(r.child,e)&&We(r.parent,e.parent())};Xe[se.PARENT]=function(r,e){return We(r.parent,e)&&e.children().some(function(t){return We(r.child,t)})};Xe[se.DESCENDANT]=function(r,e){return We(r.descendant,e)&&e.ancestors().some(function(t){return We(r.ancestor,t)})};Xe[se.ANCESTOR]=function(r,e){return We(r.ancestor,e)&&e.descendants().some(function(t){return We(r.descendant,t)})};Xe[se.COMPOUND_SPLIT]=function(r,e){return We(r.subject,e)&&We(r.left,e)&&We(r.right,e)};Xe[se.TRUE]=function(){return!0};Xe[se.COLLECTION]=function(r,e){var t=r.value;return t.has(e)};Xe[se.FILTER]=function(r,e){var t=r.value;return t(e)};var Fg=function(e){var t=this;if(t.length===1&&t[0].checks.length===1&&t[0].checks[0].type===se.ID)return e.getElementById(t[0].checks[0].value).collection();var a=function(i){for(var s=0;s<t.length;s++){var o=t[s];if(We(o,i))return!0}return!1};return t.text()==null&&(a=function(){return!0}),e.filter(a)},Vg=function(e){for(var t=this,a=0;a<t.length;a++){var n=t[a];if(We(n,e))return!0}return!1},qg={matches:Vg,filter:Fg},ft=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,e==null||ge(e)&&e.match(/^\\s*$/)||(Dr(e)?this.addQuery({checks:[{type:se.COLLECTION,value:e.collection()}]}):Ue(e)?this.addQuery({checks:[{type:se.FILTER,value:e}]}):ge(e)?this.parse(e)||(this.invalid=!0):$e(\"A selector must be created from a string; found \"))},ct=ft.prototype;[Ig,qg].forEach(function(r){return be(ct,r)});ct.text=function(){return this.inputText};ct.size=function(){return this.length};ct.eq=function(r){return this[r]};ct.sameText=function(r){return!this.invalid&&!r.invalid&&this.text()===r.text()};ct.addQuery=function(r){this[this.length++]=r};ct.selector=ct.toString;var st={allAre:function(e){var t=new ft(e);return this.every(function(a){return t.matches(a)})},is:function(e){var t=new ft(e);return this.some(function(a){return t.matches(a)})},some:function(e,t){for(var a=0;a<this.length;a++){var n=t?e.apply(t,[this[a],a,this]):e(this[a],a,this);if(n)return!0}return!1},every:function(e,t){for(var a=0;a<this.length;a++){var n=t?e.apply(t,[this[a],a,this]):e(this[a],a,this);if(!n)return!1}return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length,a=e.length;return t!==a?!1:t===1?this[0]===e[0]:this.every(function(n){return e.hasElementWithId(n.id())})},anySame:function(e){return e=this.cy().collection(e),this.some(function(t){return e.hasElementWithId(t.id())})},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every(function(a){return t.hasElementWithId(a.id())})},contains:function(e){e=this.cy().collection(e);var t=this;return e.every(function(a){return t.hasElementWithId(a.id())})}};st.allAreNeighbours=st.allAreNeighbors;st.has=st.contains;st.equal=st.equals=st.same;var Rr=function(e,t){return function(n,i,s,o){var l=n,u=this,v;if(l==null?v=\"\":Dr(l)&&l.length===1&&(v=l.id()),u.length===1&&v){var f=u[0]._private,c=f.traversalCache=f.traversalCache||{},h=c[t]=c[t]||[],d=Dt(v),y=h[d];return y||(h[d]=e.call(u,n,i,s,o))}else return e.call(u,n,i,s,o)}},jt={parent:function(e){var t=[];if(this.length===1){var a=this[0]._private.parent;if(a)return a}for(var n=0;n<this.length;n++){var i=this[n],s=i._private.parent;s&&t.push(s)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],a=this.parent();a.nonempty();){for(var n=0;n<a.length;n++){var i=a[n];t.push(i)}a=a.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,a=0;a<this.length;a++){var n=this[a],i=n.parents();t=t||i,t=t.intersect(i)}return t.filter(e)},orphans:function(e){return this.stdFilter(function(t){return t.isOrphan()}).filter(e)},nonorphans:function(e){return this.stdFilter(function(t){return t.isChild()}).filter(e)},children:Rr(function(r){for(var e=[],t=0;t<this.length;t++)for(var a=this[t],n=a._private.children,i=0;i<n.length;i++)e.push(n[i]);return this.spawn(e,!0).filter(r)},\"children\"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length!==0},isChildless:function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length===0},isChild:function(){var e=this[0];if(e)return e.isNode()&&e._private.parent!=null},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&e._private.parent==null},descendants:function(e){var t=[];function a(n){for(var i=0;i<n.length;i++){var s=n[i];t.push(s),s.children().nonempty()&&a(s.children())}}return a(this.children()),this.spawn(t,!0).filter(e)}};function lo(r,e,t,a){for(var n=[],i=new ra,s=r.cy(),o=s.hasCompoundNodes(),l=0;l<r.length;l++){var u=r[l];t?n.push(u):o&&a(n,i,u)}for(;n.length>0;){var v=n.shift();e(v),i.add(v.id()),o&&a(n,i,v)}return r}function Vv(r,e,t){if(t.isParent())for(var a=t._private.children,n=0;n<a.length;n++){var i=a[n];e.has(i.id())||r.push(i)}}jt.forEachDown=function(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return lo(this,r,e,Vv)};function qv(r,e,t){if(t.isChild()){var a=t._private.parent;e.has(a.id())||r.push(a)}}jt.forEachUp=function(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return lo(this,r,e,qv)};function _g(r,e,t){qv(r,e,t),Vv(r,e,t)}jt.forEachUpAndDown=function(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return lo(this,r,e,_g)};jt.ancestors=jt.parents;var Ba,_v;Ba=_v={data:Fe.data({field:\"data\",bindingEvent:\"data\",allowBinding:!0,allowSetting:!0,settingEvent:\"data\",settingTriggersEvent:!0,triggerFnName:\"trigger\",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Fe.removeData({field:\"data\",event:\"data\",triggerFnName:\"trigger\",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Fe.data({field:\"scratch\",bindingEvent:\"scratch\",allowBinding:!0,allowSetting:!0,settingEvent:\"scratch\",settingTriggersEvent:!0,triggerFnName:\"trigger\",allowGetting:!0,updateStyle:!0}),removeScratch:Fe.removeData({field:\"scratch\",event:\"scratch\",triggerFnName:\"trigger\",triggerEvent:!0,updateStyle:!0}),rscratch:Fe.data({field:\"rscratch\",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Fe.removeData({field:\"rscratch\",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}};Ba.attr=Ba.data;Ba.removeAttr=Ba.removeData;var Gg=_v,_n={};function ps(r){return function(e){var t=this;if(e===void 0&&(e=!0),t.length!==0)if(t.isNode()&&!t.removed()){for(var a=0,n=t[0],i=n._private.edges,s=0;s<i.length;s++){var o=i[s];!e&&o.isLoop()||(a+=r(n,o))}return a}else return}}be(_n,{degree:ps(function(r,e){return e.source().same(e.target())?2:1}),indegree:ps(function(r,e){return e.target().same(r)?1:0}),outdegree:ps(function(r,e){return e.source().same(r)?1:0})});function Nt(r,e){return function(t){for(var a,n=this.nodes(),i=0;i<n.length;i++){var s=n[i],o=s[r](t);o!==void 0&&(a===void 0||e(o,a))&&(a=o)}return a}}be(_n,{minDegree:Nt(\"degree\",function(r,e){return r<e}),maxDegree:Nt(\"degree\",function(r,e){return r>e}),minIndegree:Nt(\"indegree\",function(r,e){return r<e}),maxIndegree:Nt(\"indegree\",function(r,e){return r>e}),minOutdegree:Nt(\"outdegree\",function(r,e){return r<e}),maxOutdegree:Nt(\"outdegree\",function(r,e){return r>e})});be(_n,{totalDegree:function(e){for(var t=0,a=this.nodes(),n=0;n<a.length;n++)t+=a[n].degree(e);return t}});var Or,Gv,Hv=function(e,t,a){for(var n=0;n<e.length;n++){var i=e[n];if(!i.locked()){var s=i._private.position,o={x:t.x!=null?t.x-s.x:0,y:t.y!=null?t.y-s.y:0};i.isParent()&&!(o.x===0&&o.y===0)&&i.children().shift(o,a),i.dirtyBoundingBoxCache()}}},sl={field:\"position\",bindingEvent:\"position\",allowBinding:!0,allowSetting:!0,settingEvent:\"position\",settingTriggersEvent:!0,triggerFnName:\"emitAndNotify\",allowGetting:!0,validKeys:[\"x\",\"y\"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){Hv(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};Or=Gv={position:Fe.data(sl),silentPosition:Fe.data(be({},sl,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){Hv(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(Le(e))t?this.silentPosition(e):this.position(e);else if(Ue(e)){var a=e,n=this.cy();n.startBatch();for(var i=0;i<this.length;i++){var s=this[i],o=void 0;(o=a(s,i))&&(t?s.silentPosition(o):s.position(o))}n.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,a){var n;if(Le(e)?(n={x:ae(e.x)?e.x:0,y:ae(e.y)?e.y:0},a=t):ge(e)&&ae(t)&&(n={x:0,y:0},n[e]=t),n!=null){var i=this.cy();i.startBatch();for(var s=0;s<this.length;s++){var o=this[s];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var l=o.position(),u={x:l.x+n.x,y:l.y+n.y};a?o.silentPosition(u):o.position(u)}}i.endBatch()}return this},silentShift:function(e,t){return Le(e)?this.shift(e,!0):ge(e)&&ae(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var a=this[0],n=this.cy(),i=n.zoom(),s=n.pan(),o=Le(e)?e:void 0,l=o!==void 0||t!==void 0&&ge(e);if(a&&a.isNode())if(l)for(var u=0;u<this.length;u++){var v=this[u];t!==void 0?v.position(e,(t-s[e])/i):o!==void 0&&v.position(yv(o,i,s))}else{var f=a.position();return o=On(f,i,s),e===void 0?o:o[e]}else if(!l)return;return this},relativePosition:function(e,t){var a=this[0],n=this.cy(),i=Le(e)?e:void 0,s=i!==void 0||t!==void 0&&ge(e),o=n.hasCompoundNodes();if(a&&a.isNode())if(s)for(var l=0;l<this.length;l++){var u=this[l],v=o?u.parent():null,f=v&&v.length>0,c=f;f&&(v=v[0]);var h=c?v.position():{x:0,y:0};t!==void 0?u.position(e,t+h[e]):i!==void 0&&u.position({x:i.x+h.x,y:i.y+h.y})}else{var d=a.position(),y=o?a.parent():null,g=y&&y.length>0,p=g;g&&(y=y[0]);var m=p?y.position():{x:0,y:0};return i={x:d.x-m.x,y:d.y-m.y},e===void 0?i:i[e]}else if(!s)return;return this}};Or.modelPosition=Or.point=Or.position;Or.modelPositions=Or.points=Or.positions;Or.renderedPoint=Or.renderedPosition;Or.relativePoint=Or.relativePosition;var Hg=Gv,Zt,pt;Zt=pt={};pt.renderedBoundingBox=function(r){var e=this.boundingBox(r),t=this.cy(),a=t.zoom(),n=t.pan(),i=e.x1*a+n.x,s=e.x2*a+n.x,o=e.y1*a+n.y,l=e.y2*a+n.y;return{x1:i,x2:s,y1:o,y2:l,w:s-i,h:l-o}};pt.dirtyCompoundBoundsCache=function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(t){if(t.isParent()){var a=t._private;a.compoundBoundsClean=!1,a.bbCache=null,r||t.emitAndNotify(\"bounds\")}}),this)};pt.updateCompoundBounds=function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!r&&e.batching())return this;function t(s){if(!s.isParent())return;var o=s._private,l=s.children(),u=s.pstyle(\"compound-sizing-wrt-labels\").value===\"include\",v={width:{val:s.pstyle(\"min-width\").pfValue,left:s.pstyle(\"min-width-bias-left\"),right:s.pstyle(\"min-width-bias-right\")},height:{val:s.pstyle(\"min-height\").pfValue,top:s.pstyle(\"min-height-bias-top\"),bottom:s.pstyle(\"min-height-bias-bottom\")}},f=l.boundingBox({includeLabels:u,includeOverlays:!1,useCache:!1}),c=o.position;(f.w===0||f.h===0)&&(f={w:s.pstyle(\"width\").pfValue,h:s.pstyle(\"height\").pfValue},f.x1=c.x-f.w/2,f.x2=c.x+f.w/2,f.y1=c.y-f.h/2,f.y2=c.y+f.h/2);function h(k,D,B){var P=0,A=0,R=D+B;return k>0&&R>0&&(P=D/R*k,A=B/R*k),{biasDiff:P,biasComplementDiff:A}}function d(k,D,B,P){if(B.units===\"%\")switch(P){case\"width\":return k>0?B.pfValue*k:0;case\"height\":return D>0?B.pfValue*D:0;case\"average\":return k>0&&D>0?B.pfValue*(k+D)/2:0;case\"min\":return k>0&&D>0?k>D?B.pfValue*D:B.pfValue*k:0;case\"max\":return k>0&&D>0?k>D?B.pfValue*k:B.pfValue*D:0;default:return 0}else return B.units===\"px\"?B.pfValue:0}var y=v.width.left.value;v.width.left.units===\"px\"&&v.width.val>0&&(y=y*100/v.width.val);var g=v.width.right.value;v.width.right.units===\"px\"&&v.width.val>0&&(g=g*100/v.width.val);var p=v.height.top.value;v.height.top.units===\"px\"&&v.height.val>0&&(p=p*100/v.height.val);var m=v.height.bottom.value;v.height.bottom.units===\"px\"&&v.height.val>0&&(m=m*100/v.height.val);var b=h(v.width.val-f.w,y,g),w=b.biasDiff,E=b.biasComplementDiff,C=h(v.height.val-f.h,p,m),x=C.biasDiff,T=C.biasComplementDiff;o.autoPadding=d(f.w,f.h,s.pstyle(\"padding\"),s.pstyle(\"padding-relative-to\").value),o.autoWidth=Math.max(f.w,v.width.val),c.x=(-w+f.x1+f.x2+E)/2,o.autoHeight=Math.max(f.h,v.height.val),c.y=(-x+f.y1+f.y2+T)/2}for(var a=0;a<this.length;a++){var n=this[a],i=n._private;(!i.compoundBoundsClean||r)&&(t(n),e.batching()||(i.compoundBoundsClean=!0))}return this};var Ar=function(e){return e===1/0||e===-1/0?0:e},Ir=function(e,t,a,n,i){n-t===0||i-a===0||t==null||a==null||n==null||i==null||(e.x1=t<e.x1?t:e.x1,e.x2=n>e.x2?n:e.x2,e.y1=a<e.y1?a:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},tt=function(e,t){return t==null?e:Ir(e,t.x1,t.y1,t.x2,t.y2)},fa=function(e,t,a){return Tr(e,t,a)},ja=function(e,t,a){if(!t.cy().headless()){var n=t._private,i=n.rstyle,s=i.arrowWidth/2,o=t.pstyle(a+\"-arrow-shape\").value,l,u;if(o!==\"none\"){a===\"source\"?(l=i.srcX,u=i.srcY):a===\"target\"?(l=i.tgtX,u=i.tgtY):(l=i.midX,u=i.midY);var v=n.arrowBounds=n.arrowBounds||{},f=v[a]=v[a]||{};f.x1=l-s,f.y1=u-s,f.x2=l+s,f.y2=u+s,f.w=f.x2-f.x1,f.h=f.y2-f.y1,un(f,1),Ir(e,f.x1,f.y1,f.x2,f.y2)}}},ys=function(e,t,a){if(!t.cy().headless()){var n;a?n=a+\"-\":n=\"\";var i=t._private,s=i.rstyle,o=t.pstyle(n+\"label\").strValue;if(o){var l=t.pstyle(\"text-halign\"),u=t.pstyle(\"text-valign\"),v=fa(s,\"labelWidth\",a),f=fa(s,\"labelHeight\",a),c=fa(s,\"labelX\",a),h=fa(s,\"labelY\",a),d=t.pstyle(n+\"text-margin-x\").pfValue,y=t.pstyle(n+\"text-margin-y\").pfValue,g=t.isEdge(),p=t.pstyle(n+\"text-rotation\"),m=t.pstyle(\"text-outline-width\").pfValue,b=t.pstyle(\"text-border-width\").pfValue,w=b/2,E=t.pstyle(\"text-background-padding\").pfValue,C=2,x=f,T=v,k=T/2,D=x/2,B,P,A,R;if(g)B=c-k,P=c+k,A=h-D,R=h+D;else{switch(l.value){case\"left\":B=c-T,P=c;break;case\"center\":B=c-k,P=c+k;break;case\"right\":B=c,P=c+T;break}switch(u.value){case\"top\":A=h-x,R=h;break;case\"center\":A=h-D,R=h+D;break;case\"bottom\":A=h,R=h+x;break}}var L=d-Math.max(m,w)-E-C,I=d+Math.max(m,w)+E+C,M=y-Math.max(m,w)-E-C,O=y+Math.max(m,w)+E+C;B+=L,P+=I,A+=M,R+=O;var V=a||\"main\",G=i.labelBounds,N=G[V]=G[V]||{};N.x1=B,N.y1=A,N.x2=P,N.y2=R,N.w=P-B,N.h=R-A,N.leftPad=L,N.rightPad=I,N.topPad=M,N.botPad=O;var F=g&&p.strValue===\"autorotate\",U=p.pfValue!=null&&p.pfValue!==0;if(F||U){var Q=F?fa(i.rstyle,\"labelAngle\",a):p.pfValue,K=Math.cos(Q),j=Math.sin(Q),re=(B+P)/2,ne=(A+R)/2;if(!g){switch(l.value){case\"left\":re=P;break;case\"right\":re=B;break}switch(u.value){case\"top\":ne=R;break;case\"bottom\":ne=A;break}}var J=function(Ce,we){return Ce=Ce-re,we=we-ne,{x:Ce*K-we*j+re,y:Ce*j+we*K+ne}},z=J(B,A),q=J(B,R),H=J(P,A),Y=J(P,R);B=Math.min(z.x,q.x,H.x,Y.x),P=Math.max(z.x,q.x,H.x,Y.x),A=Math.min(z.y,q.y,H.y,Y.y),R=Math.max(z.y,q.y,H.y,Y.y)}var te=V+\"Rot\",ce=G[te]=G[te]||{};ce.x1=B,ce.y1=A,ce.x2=P,ce.y2=R,ce.w=P-B,ce.h=R-A,Ir(e,B,A,P,R),Ir(i.labelBounds.all,B,A,P,R)}return e}},ol=function(e,t){if(!t.cy().headless()){var a=t.pstyle(\"outline-opacity\").value,n=t.pstyle(\"outline-width\").value,i=t.pstyle(\"outline-offset\").value,s=n+i;Wv(e,t,a,s,\"outside\",s/2)}},Wv=function(e,t,a,n,i,s){if(!(a===0||n<=0||i===\"inside\")){var o=t.cy(),l=t.pstyle(\"shape\").value,u=o.renderer().nodeShapes[l],v=t.position(),f=v.x,c=v.y,h=t.width(),d=t.height();if(u.hasMiterBounds){i===\"center\"&&(n/=2);var y=u.miterBounds(f,c,h,d,n);tt(e,y)}else s!=null&&s>0&&ln(e,[s,s,s,s])}},Wg=function(e,t){if(!t.cy().headless()){var a=t.pstyle(\"border-opacity\").value,n=t.pstyle(\"border-width\").pfValue,i=t.pstyle(\"border-position\").value;Wv(e,t,a,n,i)}},$g=function(e,t){var a=e._private.cy,n=a.styleEnabled(),i=a.headless(),s=wr(),o=e._private,l=e.isNode(),u=e.isEdge(),v,f,c,h,d,y,g=o.rstyle,p=l&&n?e.pstyle(\"bounds-expansion\").pfValue:[0],m=function(Ae){return Ae.pstyle(\"display\").value!==\"none\"},b=!n||m(e)&&(!u||m(e.source())&&m(e.target()));if(b){var w=0,E=0;n&&t.includeOverlays&&(w=e.pstyle(\"overlay-opacity\").value,w!==0&&(E=e.pstyle(\"overlay-padding\").value));var C=0,x=0;n&&t.includeUnderlays&&(C=e.pstyle(\"underlay-opacity\").value,C!==0&&(x=e.pstyle(\"underlay-padding\").value));var T=Math.max(E,x),k=0,D=0;if(n&&(k=e.pstyle(\"width\").pfValue,D=k/2),l&&t.includeNodes){var B=e.position();d=B.x,y=B.y;var P=e.outerWidth(),A=P/2,R=e.outerHeight(),L=R/2;v=d-A,f=d+A,c=y-L,h=y+L,Ir(s,v,c,f,h),n&&ol(s,e),n&&t.includeOutlines&&!i&&ol(s,e),n&&Wg(s,e)}else if(u&&t.includeEdges)if(n&&!i){var I=e.pstyle(\"curve-style\").strValue;if(v=Math.min(g.srcX,g.midX,g.tgtX),f=Math.max(g.srcX,g.midX,g.tgtX),c=Math.min(g.srcY,g.midY,g.tgtY),h=Math.max(g.srcY,g.midY,g.tgtY),v-=D,f+=D,c-=D,h+=D,Ir(s,v,c,f,h),I===\"haystack\"){var M=g.haystackPts;if(M&&M.length===2){if(v=M[0].x,c=M[0].y,f=M[1].x,h=M[1].y,v>f){var O=v;v=f,f=O}if(c>h){var V=c;c=h,h=V}Ir(s,v-D,c-D,f+D,h+D)}}else if(I===\"bezier\"||I===\"unbundled-bezier\"||at(I,\"segments\")||at(I,\"taxi\")){var G;switch(I){case\"bezier\":case\"unbundled-bezier\":G=g.bezierPts;break;case\"segments\":case\"taxi\":case\"round-segments\":case\"round-taxi\":G=g.linePts;break}if(G!=null)for(var N=0;N<G.length;N++){var F=G[N];v=F.x-D,f=F.x+D,c=F.y-D,h=F.y+D,Ir(s,v,c,f,h)}}}else{var U=e.source(),Q=U.position(),K=e.target(),j=K.position();if(v=Q.x,f=j.x,c=Q.y,h=j.y,v>f){var re=v;v=f,f=re}if(c>h){var ne=c;c=h,h=ne}v-=D,f+=D,c-=D,h+=D,Ir(s,v,c,f,h)}if(n&&t.includeEdges&&u&&(ja(s,e,\"mid-source\"),ja(s,e,\"mid-target\"),ja(s,e,\"source\"),ja(s,e,\"target\")),n){var J=e.pstyle(\"ghost\").value===\"yes\";if(J){var z=e.pstyle(\"ghost-offset-x\").pfValue,q=e.pstyle(\"ghost-offset-y\").pfValue;Ir(s,s.x1+z,s.y1+q,s.x2+z,s.y2+q)}}var H=o.bodyBounds=o.bodyBounds||{};Uo(H,s),ln(H,p),un(H,1),n&&(v=s.x1,f=s.x2,c=s.y1,h=s.y2,Ir(s,v-T,c-T,f+T,h+T));var Y=o.overlayBounds=o.overlayBounds||{};Uo(Y,s),ln(Y,p),un(Y,1);var te=o.labelBounds=o.labelBounds||{};te.all!=null?kd(te.all):te.all=wr(),n&&t.includeLabels&&(t.includeMainLabels&&ys(s,e,null),u&&(t.includeSourceLabels&&ys(s,e,\"source\"),t.includeTargetLabels&&ys(s,e,\"target\")))}return s.x1=Ar(s.x1),s.y1=Ar(s.y1),s.x2=Ar(s.x2),s.y2=Ar(s.y2),s.w=Ar(s.x2-s.x1),s.h=Ar(s.y2-s.y1),s.w>0&&s.h>0&&b&&(ln(s,p),un(s,1)),s},$v=function(e){var t=0,a=function(s){return(s?1:0)<<t++},n=0;return n+=a(e.incudeNodes),n+=a(e.includeEdges),n+=a(e.includeLabels),n+=a(e.includeMainLabels),n+=a(e.includeSourceLabels),n+=a(e.includeTargetLabels),n+=a(e.includeOverlays),n+=a(e.includeOutlines),n},Uv=function(e){var t=function(o){return Math.round(o)};if(e.isEdge()){var a=e.source().position(),n=e.target().position();return qo([t(a.x),t(a.y),t(n.x),t(n.y)])}else{var i=e.position();return qo([t(i.x),t(i.y)])}},ul=function(e,t){var a=e._private,n,i=e.isEdge(),s=t==null?ll:$v(t),o=s===ll;if(a.bbCache==null?(n=$g(e,Pa),a.bbCache=n,a.bbCachePosKey=Uv(e)):n=a.bbCache,!o){var l=e.isNode();n=wr(),(t.includeNodes&&l||t.includeEdges&&!l)&&(t.includeOverlays?tt(n,a.overlayBounds):tt(n,a.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?tt(n,a.labelBounds.all):(t.includeMainLabels&&tt(n,a.labelBounds.mainRot),t.includeSourceLabels&&tt(n,a.labelBounds.sourceRot),t.includeTargetLabels&&tt(n,a.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},Pa={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,includeOutlines:!0,useCache:!0},ll=$v(Pa),vl=cr(Pa);pt.boundingBox=function(r){var e,t=r===void 0||r.useCache===void 0||r.useCache===!0,a=Qt(function(v){var f=v._private;return f.bbCache==null||f.styleDirty||f.bbCachePosKey!==Uv(v)},function(v){return v.id()});if(t&&this.length===1&&!a(this[0]))r===void 0?r=Pa:r=vl(r),e=ul(this[0],r);else{e=wr(),r=r||Pa;var n=vl(r),i=this,s=i.cy(),o=s.styleEnabled();this.edges().forEach(a),this.nodes().forEach(a),o&&this.recalculateRenderedStyle(t),this.updateCompoundBounds(!t);for(var l=0;l<i.length;l++){var u=i[l];a(u)&&u.dirtyBoundingBoxCache(),tt(e,ul(u,n))}}return e.x1=Ar(e.x1),e.y1=Ar(e.y1),e.x2=Ar(e.x2),e.y2=Ar(e.y2),e.w=Ar(e.x2-e.x1),e.h=Ar(e.y2-e.y1),e};pt.dirtyBoundingBoxCache=function(){for(var r=0;r<this.length;r++){var e=this[r]._private;e.bbCache=null,e.bbCachePosKey=null,e.bodyBounds=null,e.overlayBounds=null,e.labelBounds.all=null,e.labelBounds.source=null,e.labelBounds.target=null,e.labelBounds.main=null,e.labelBounds.sourceRot=null,e.labelBounds.targetRot=null,e.labelBounds.mainRot=null,e.arrowBounds.source=null,e.arrowBounds.target=null,e.arrowBounds[\"mid-source\"]=null,e.arrowBounds[\"mid-target\"]=null}return this.emitAndNotify(\"bounds\"),this};pt.boundingBoxAt=function(r){var e=this.nodes(),t=this.cy(),a=t.hasCompoundNodes(),n=t.collection();if(a&&(n=e.filter(function(u){return u.isParent()}),e=e.not(n)),Le(r)){var i=r;r=function(){return i}}var s=function(v,f){return v._private.bbAtOldPos=r(v,f)},o=function(v){return v._private.bbAtOldPos};t.startBatch(),e.forEach(s).silentPositions(r),a&&(n.dirtyCompoundBoundsCache(),n.dirtyBoundingBoxCache(),n.updateCompoundBounds(!0));var l=Sd(this.boundingBox({useCache:!1}));return e.silentPositions(o),a&&(n.dirtyCompoundBoundsCache(),n.dirtyBoundingBoxCache(),n.updateCompoundBounds(!0)),t.endBatch(),l};Zt.boundingbox=Zt.bb=Zt.boundingBox;Zt.renderedBoundingbox=Zt.renderedBoundingBox;var Ug=pt,ma,qa;ma=qa={};var Kv=function(e){e.uppercaseName=So(e.name),e.autoName=\"auto\"+e.uppercaseName,e.labelName=\"label\"+e.uppercaseName,e.outerName=\"outer\"+e.uppercaseName,e.uppercaseOuterName=So(e.outerName),ma[e.name]=function(){var a=this[0],n=a._private,i=n.cy,s=i._private.styleEnabled;if(a)if(s){if(a.isParent())return a.updateCompoundBounds(),n[e.autoName]||0;var o=a.pstyle(e.name);return o.strValue===\"label\"?(a.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):o.pfValue}else return 1},ma[\"outer\"+e.uppercaseName]=function(){var a=this[0],n=a._private,i=n.cy,s=i._private.styleEnabled;if(a)if(s){var o=a[e.name](),l=a.pstyle(\"border-position\").value,u;l===\"center\"?u=a.pstyle(\"border-width\").pfValue:l===\"outside\"?u=2*a.pstyle(\"border-width\").pfValue:u=0;var v=2*a.padding();return o+u+v}else return 1},ma[\"rendered\"+e.uppercaseName]=function(){var a=this[0];if(a){var n=a[e.name]();return n*this.cy().zoom()}},ma[\"rendered\"+e.uppercaseOuterName]=function(){var a=this[0];if(a){var n=a[e.outerName]();return n*this.cy().zoom()}}};Kv({name:\"width\"});Kv({name:\"height\"});qa.padding=function(){var r=this[0],e=r._private;return r.isParent()?(r.updateCompoundBounds(),e.autoPadding!==void 0?e.autoPadding:r.pstyle(\"padding\").pfValue):r.pstyle(\"padding\").pfValue};qa.paddedHeight=function(){var r=this[0];return r.height()+2*r.padding()};qa.paddedWidth=function(){var r=this[0];return r.width()+2*r.padding()};var Kg=qa,Xg=function(e,t){if(e.isEdge()&&e.takesUpSpace())return t(e)},Yg=function(e,t){if(e.isEdge()&&e.takesUpSpace()){var a=e.cy();return On(t(e),a.zoom(),a.pan())}},Zg=function(e,t){if(e.isEdge()&&e.takesUpSpace()){var a=e.cy(),n=a.pan(),i=a.zoom();return t(e).map(function(s){return On(s,i,n)})}},Qg=function(e){return e.renderer().getControlPoints(e)},Jg=function(e){return e.renderer().getSegmentPoints(e)},jg=function(e){return e.renderer().getSourceEndpoint(e)},ep=function(e){return e.renderer().getTargetEndpoint(e)},rp=function(e){return e.renderer().getEdgeMidpoint(e)},fl={controlPoints:{get:Qg,mult:!0},segmentPoints:{get:Jg,mult:!0},sourceEndpoint:{get:jg},targetEndpoint:{get:ep},midpoint:{get:rp}},tp=function(e){return\"rendered\"+e[0].toUpperCase()+e.substr(1)},ap=Object.keys(fl).reduce(function(r,e){var t=fl[e],a=tp(e);return r[e]=function(){return Xg(this,t.get)},t.mult?r[a]=function(){return Zg(this,t.get)}:r[a]=function(){return Yg(this,t.get)},r},{}),np=be({},Hg,Ug,Kg,ap);var Xv=function(e,t){this.recycle(e,t)};function ca(){return!1}function en(){return!0}Xv.prototype={instanceString:function(){return\"event\"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=ca,e!=null&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?en:ca):e!=null&&e.type?t=e:this.type=e,t!=null&&(this.originalEvent=t.originalEvent,this.type=t.type!=null?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),this.cy!=null&&this.position!=null&&this.renderedPosition==null){var a=this.position,n=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:a.x*n+i.x,y:a.y*n+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=en;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=en;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=en,this.stopPropagation()},isDefaultPrevented:ca,isPropagationStopped:ca,isImmediatePropagationStopped:ca};var Yv=/^([^.]+)(\\.(?:[^.]+))?$/,ip=\".*\",Zv={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},cl=Object.keys(Zv),sp={};function Gn(){for(var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:sp,e=arguments.length>1?arguments[1]:void 0,t=0;t<cl.length;t++){var a=cl[t];this[a]=r[a]||Zv[a]}this.context=e||this.context,this.listeners=[],this.emitting=0}var dt=Gn.prototype,Qv=function(e,t,a,n,i,s,o){Ue(n)&&(i=n,n=null),o&&(s==null?s=o:s=be({},s,o));for(var l=_e(a)?a:a.split(/\\s+/),u=0;u<l.length;u++){var v=l[u];if(!ut(v)){var f=v.match(Yv);if(f){var c=f[1],h=f[2]?f[2]:null,d=t(e,v,c,h,n,i,s);if(d===!1)break}}}},dl=function(e,t){return e.addEventFields(e.context,t),new Xv(t.type,t)},op=function(e,t,a){if(dc(a)){t(e,a);return}else if(Le(a)){t(e,dl(e,a));return}for(var n=_e(a)?a:a.split(/\\s+/),i=0;i<n.length;i++){var s=n[i];if(!ut(s)){var o=s.match(Yv);if(o){var l=o[1],u=o[2]?o[2]:null,v=dl(e,{type:l,namespace:u,target:e.context});t(e,v)}}}};dt.on=dt.addListener=function(r,e,t,a,n){return Qv(this,function(i,s,o,l,u,v,f){Ue(v)&&i.listeners.push({event:s,callback:v,type:o,namespace:l,qualifier:u,conf:f})},r,e,t,a,n),this};dt.one=function(r,e,t,a){return this.on(r,e,t,a,{one:!0})};dt.removeListener=dt.off=function(r,e,t,a){var n=this;this.emitting!==0&&(this.listeners=Yc(this.listeners));for(var i=this.listeners,s=function(u){var v=i[u];Qv(n,function(f,c,h,d,y,g){if((v.type===h||r===\"*\")&&(!d&&v.namespace!==\".*\"||v.namespace===d)&&(!y||f.qualifierCompare(v.qualifier,y))&&(!g||v.callback===g))return i.splice(u,1),!1},r,e,t,a)},o=i.length-1;o>=0;o--)s(o);return this};dt.removeAllListeners=function(){return this.removeListener(\"*\")};dt.emit=dt.trigger=function(r,e,t){var a=this.listeners,n=a.length;return this.emitting++,_e(e)||(e=[e]),op(this,function(i,s){t!=null&&(a=[{event:s.event,type:s.type,namespace:s.namespace,callback:t}],n=a.length);for(var o=function(){var v=a[l];if(v.type===s.type&&(!v.namespace||v.namespace===s.namespace||v.namespace===ip)&&i.eventMatches(i.context,v,s)){var f=[s];e!=null&&Qc(f,e),i.beforeEmit(i.context,v,s),v.conf&&v.conf.one&&(i.listeners=i.listeners.filter(function(d){return d!==v}));var c=i.callbackContext(i.context,v,s),h=v.callback.apply(c,f);i.afterEmit(i.context,v,s),h===!1&&(s.stopPropagation(),s.preventDefault())}},l=0;l<n;l++)o();i.bubble(i.context)&&!s.isPropagationStopped()&&i.parent(i.context).emit(s,e)},r),this.emitting--,this};var up={qualifierCompare:function(e,t){return e==null||t==null?e==null&&t==null:e.sameText(t)},eventMatches:function(e,t,a){var n=t.qualifier;return n!=null?e!==a.target&&Ia(a.target)&&n.matches(a.target):!0},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,a){return t.qualifier!=null?a.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},rn=function(e){return ge(e)?new ft(e):e},Jv={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],a=t._private;a.emitter||(a.emitter=new Gn(up,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,a){for(var n=rn(t),i=0;i<this.length;i++){var s=this[i];s.emitter().on(e,n,a)}return this},removeListener:function(e,t,a){for(var n=rn(t),i=0;i<this.length;i++){var s=this[i];s.emitter().removeListener(e,n,a)}return this},removeAllListeners:function(){for(var e=0;e<this.length;e++){var t=this[e];t.emitter().removeAllListeners()}return this},one:function(e,t,a){for(var n=rn(t),i=0;i<this.length;i++){var s=this[i];s.emitter().one(e,n,a)}return this},once:function(e,t,a){for(var n=rn(t),i=0;i<this.length;i++){var s=this[i];s.emitter().on(e,n,a,{once:!0,onceCollection:this})}},emit:function(e,t){for(var a=0;a<this.length;a++){var n=this[a];n.emitter().emit(e,t)}return this},emitAndNotify:function(e,t){if(this.length!==0)return this.cy().notify(e,this),this.emit(e,t),this}};Fe.eventAliasesOn(Jv);var jv={nodes:function(e){return this.filter(function(t){return t.isNode()}).filter(e)},edges:function(e){return this.filter(function(t){return t.isEdge()}).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),a=0;a<this.length;a++){var n=this[a];n.isNode()?e.push(n):t.push(n)}return{nodes:e,edges:t}},filter:function(e,t){if(e===void 0)return this;if(ge(e)||Dr(e))return new ft(e).filter(this);if(Ue(e)){for(var a=this.spawn(),n=this,i=0;i<n.length;i++){var s=n[i],o=t?e.apply(t,[s,i,n]):e(s,i,n);o&&a.push(s)}return a}return this.spawn()},not:function(e){if(e){ge(e)&&(e=this.filter(e));for(var t=this.spawn(),a=0;a<this.length;a++){var n=this[a],i=e.has(n);i||t.push(n)}return t}else return this},absoluteComplement:function(){var e=this.cy();return e.mutableElements().not(this)},intersect:function(e){if(ge(e)){var t=e;return this.filter(t)}for(var a=this.spawn(),n=this,i=e,s=this.length<e.length,o=s?n:i,l=s?i:n,u=0;u<o.length;u++){var v=o[u];l.has(v)&&a.push(v)}return a},xor:function(e){var t=this._private.cy;ge(e)&&(e=t.$(e));var a=this.spawn(),n=this,i=e,s=function(l,u){for(var v=0;v<l.length;v++){var f=l[v],c=f._private.data.id,h=u.hasElementWithId(c);h||a.push(f)}};return s(n,i),s(i,n),a},diff:function(e){var t=this._private.cy;ge(e)&&(e=t.$(e));var a=this.spawn(),n=this.spawn(),i=this.spawn(),s=this,o=e,l=function(v,f,c){for(var h=0;h<v.length;h++){var d=v[h],y=d._private.data.id,g=f.hasElementWithId(y);g?i.merge(d):c.push(d)}};return l(s,o,a),l(o,s,n),{left:a,right:n,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(ge(e)){var a=e;e=t.mutableElements().filter(a)}for(var n=this.spawnSelf(),i=0;i<e.length;i++){var s=e[i],o=!this.has(s);o&&n.push(s)}return n},merge:function(e){var t=this._private,a=t.cy;if(!e)return this;if(e&&ge(e)){var n=e;e=a.mutableElements().filter(n)}for(var i=t.map,s=0;s<e.length;s++){var o=e[s],l=o._private.data.id,u=!i.has(l);if(u){var v=this.length++;this[v]=o,i.set(l,{ele:o,index:v})}}return this},unmergeAt:function(e){var t=this[e],a=t.id(),n=this._private,i=n.map;this[e]=void 0,i.delete(a);var s=e===this.length-1;if(this.length>1&&!s){var o=this.length-1,l=this[o],u=l._private.data.id;this[o]=void 0,this[e]=l,i.set(u,{ele:l,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,a=e._private.data.id,n=t.map,i=n.get(a);if(!i)return this;var s=i.index;return this.unmergeAt(s),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&ge(e)){var a=e;e=t.mutableElements().filter(a)}for(var n=0;n<e.length;n++)this.unmergeOne(e[n]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--){var a=this[t];e(a)&&this.unmergeAt(t)}return this},map:function(e,t){for(var a=[],n=this,i=0;i<n.length;i++){var s=n[i],o=t?e.apply(t,[s,i,n]):e(s,i,n);a.push(o)}return a},reduce:function(e,t){for(var a=t,n=this,i=0;i<n.length;i++)a=e(a,n[i],i,n);return a},max:function(e,t){for(var a=-1/0,n,i=this,s=0;s<i.length;s++){var o=i[s],l=t?e.apply(t,[o,s,i]):e(o,s,i);l>a&&(a=l,n=o)}return{value:a,ele:n}},min:function(e,t){for(var a=1/0,n,i=this,s=0;s<i.length;s++){var o=i[s],l=t?e.apply(t,[o,s,i]):e(o,s,i);l<a&&(a=l,n=o)}return{value:a,ele:n}}},Ie=jv;Ie.u=Ie[\"|\"]=Ie[\"+\"]=Ie.union=Ie.or=Ie.add;Ie[\"\\\\\"]=Ie[\"!\"]=Ie[\"-\"]=Ie.difference=Ie.relativeComplement=Ie.subtract=Ie.not;Ie.n=Ie[\"&\"]=Ie[\".\"]=Ie.and=Ie.intersection=Ie.intersect;Ie[\"^\"]=Ie[\"(+)\"]=Ie[\"(-)\"]=Ie.symmetricDifference=Ie.symdiff=Ie.xor;Ie.fnFilter=Ie.filterFn=Ie.stdFilter=Ie.filter;Ie.complement=Ie.abscomp=Ie.absoluteComplement;var lp={isNode:function(){return this.group()===\"nodes\"},isEdge:function(){return this.group()===\"edges\"},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},ef=function(e,t){var a=e.cy(),n=a.hasCompoundNodes();function i(v){var f=v.pstyle(\"z-compound-depth\");return f.value===\"auto\"?n?v.zDepth():0:f.value===\"bottom\"?-1:f.value===\"top\"?Js:0}var s=i(e)-i(t);if(s!==0)return s;function o(v){var f=v.pstyle(\"z-index-compare\");return f.value===\"auto\"&&v.isNode()?1:0}var l=o(e)-o(t);if(l!==0)return l;var u=e.pstyle(\"z-index\").value-t.pstyle(\"z-index\").value;return u!==0?u:e.poolIndex()-t.poolIndex()},Sn={forEach:function(e,t){if(Ue(e))for(var a=this.length,n=0;n<a;n++){var i=this[n],s=t?e.apply(t,[i,n,this]):e(i,n,this);if(s===!1)break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var a=[],n=this.length;t==null&&(t=n),e==null&&(e=0),e<0&&(e=n+e),t<0&&(t=n+t);for(var i=e;i>=0&&i<t&&i<n;i++)a.push(this[i]);return this.spawn(a)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return this.length===0},nonempty:function(){return!this.empty()},sort:function(e){if(!Ue(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(ef)},zDepth:function(){var e=this[0];if(e){var t=e._private,a=t.group;if(a===\"nodes\"){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:Js-1}else{var i=t.source,s=t.target,o=i.zDepth(),l=s.zDepth();return Math.max(o,l,0)}}}};Sn.each=Sn.forEach;var vp=function(){var e=\"undefined\",t=(typeof Symbol>\"u\"?\"undefined\":ar(Symbol))!=e&&ar(Symbol.iterator)!=e;t&&(Sn[Symbol.iterator]=function(){var a=this,n={value:void 0,done:!1},i=0,s=this.length;return Jl({next:function(){return i<s?n.value=a[i++]:(n.value=void 0,n.done=!0),n}},Symbol.iterator,function(){return this})})};vp();var fp=cr({nodeDimensionsIncludeLabels:!1}),fn={layoutDimensions:function(e){e=fp(e);var t;if(!this.takesUpSpace())t={w:0,h:0};else if(e.nodeDimensionsIncludeLabels){var a=this.boundingBox();t={w:a.w,h:a.h}}else t={w:this.outerWidth(),h:this.outerHeight()};return(t.w===0||t.h===0)&&(t.w=t.h=1),t},layoutPositions:function(e,t,a){var n=this.nodes().filter(function(E){return!E.isParent()}),i=this.cy(),s=t.eles,o=function(C){return C.id()},l=Qt(a,o);e.emit({type:\"layoutstart\",layout:e}),e.animations=[];var u=function(C,x,T){var k={x:x.x1+x.w/2,y:x.y1+x.h/2},D={x:(T.x-k.x)*C,y:(T.y-k.y)*C};return{x:k.x+D.x,y:k.y+D.y}},v=t.spacingFactor&&t.spacingFactor!==1,f=function(){if(!v)return null;for(var C=wr(),x=0;x<n.length;x++){var T=n[x],k=l(T,x);mv(C,k.x,k.y)}return C},c=f(),h=Qt(function(E,C){var x=l(E,C);if(v){var T=Math.abs(t.spacingFactor);x=u(T,c,x)}return t.transform!=null&&(x=t.transform(E,x)),x},o);if(t.animate){for(var d=0;d<n.length;d++){var y=n[d],g=h(y,d),p=t.animateFilter==null||t.animateFilter(y,d);if(p){var m=y.animation({position:g,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(m)}else y.position(g)}if(t.fit){var b=i.animation({fit:{boundingBox:s.boundingBoxAt(h),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(b)}else if(t.zoom!==void 0&&t.pan!==void 0){var w=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(w)}e.animations.forEach(function(E){return E.play()}),e.one(\"layoutready\",t.ready),e.emit({type:\"layoutready\",layout:e}),ta.all(e.animations.map(function(E){return E.promise()})).then(function(){e.one(\"layoutstop\",t.stop),e.emit({type:\"layoutstop\",layout:e})})}else n.positions(h),t.fit&&i.fit(t.eles,t.padding),t.zoom!=null&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one(\"layoutready\",t.ready),e.emit({type:\"layoutready\",layout:e}),e.one(\"layoutstop\",t.stop),e.emit({type:\"layoutstop\",layout:e});return this},layout:function(e){var t=this.cy();return t.makeLayout(be({},e,{eles:this}))}};fn.createLayout=fn.makeLayout=fn.layout;function rf(r,e,t){var a=t._private,n=a.styleCache=a.styleCache||[],i;return(i=n[r])!=null||(i=n[r]=e(t)),i}function Hn(r,e){return r=Dt(r),function(a){return rf(r,e,a)}}function Wn(r,e){r=Dt(r);var t=function(n){return e.call(n)};return function(){var n=this[0];if(n)return rf(r,t,n)}}var vr={recalculateRenderedStyle:function(e){var t=this.cy(),a=t.renderer(),n=t.styleEnabled();return a&&n&&a.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e=this.cy(),t=function(i){return i._private.styleCache=null};if(e.hasCompoundNodes()){var a;a=this.spawnSelf().merge(this.descendants()).merge(this.parents()),a.merge(a.connectedEdges()),a.forEach(t)}else this.forEach(function(n){t(n),n.connectedEdges().forEach(t)});return this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching()){var a=t._private.batchStyleEles;return a.merge(this),this}var n=t.hasCompoundNodes(),i=this;e=!!(e||e===void 0),n&&(i=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var s=i;return e?s.emitAndNotify(\"style\"):s.emit(\"style\"),i.forEach(function(o){return o._private.styleDirty=!0}),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var a=this[t];a._private.styleDirty&&(a._private.styleDirty=!1,e.style().apply(a))}},parsedStyle:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,a=this[0],n=a.cy();if(n.styleEnabled()&&a){a._private.styleDirty&&(a._private.styleDirty=!1,n.style().apply(a));var i=a._private.style[e];return i??(t?n.style().getDefaultProperty(e):null)}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var a=t.pstyle(e);return a.pfValue!==void 0?a.pfValue:a.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled()&&t)return t.pstyle(e).units},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var a=this[0];if(a)return t.style().getRenderedStyle(a,e)},style:function(e,t){var a=this.cy();if(!a.styleEnabled())return this;var n=!1,i=a.style();if(Le(e)){var s=e;i.applyBypass(this,s,n),this.emitAndNotify(\"style\")}else if(ge(e))if(t===void 0){var o=this[0];return o?i.getStylePropertyValue(o,e):void 0}else i.applyBypass(this,e,t,n),this.emitAndNotify(\"style\");else if(e===void 0){var l=this[0];return l?i.getRawStyle(l):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var a=!1,n=t.style(),i=this;if(e===void 0)for(var s=0;s<i.length;s++){var o=i[s];n.removeAllBypasses(o,a)}else{e=e.split(/\\s+/);for(var l=0;l<i.length;l++){var u=i[l];n.removeBypasses(u,e,a)}}return this.emitAndNotify(\"style\"),this},show:function(){return this.css(\"display\",\"element\"),this},hide:function(){return this.css(\"display\",\"none\"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),a=this[0];if(a){var n=a._private,i=a.pstyle(\"opacity\").value;if(!t)return i;var s=n.data.parent?a.parents():null;if(s)for(var o=0;o<s.length;o++){var l=s[o],u=l.pstyle(\"opacity\").value;i=u*i}return i}},transparent:function(){var e=this.cy();if(!e.styleEnabled())return!1;var t=this[0],a=t.cy().hasCompoundNodes();if(t)return a?t.effectiveOpacity()===0:t.pstyle(\"opacity\").value===0},backgrounding:function(){var e=this.cy();if(!e.styleEnabled())return!1;var t=this[0];return!!t._private.backgrounding}};function ms(r,e){var t=r._private,a=t.data.parent?r.parents():null;if(a)for(var n=0;n<a.length;n++){var i=a[n];if(!e(i))return!1}return!0}function vo(r){var e=r.ok,t=r.edgeOkViaNode||r.ok,a=r.parentOk||r.ok;return function(){var n=this.cy();if(!n.styleEnabled())return!0;var i=this[0],s=n.hasCompoundNodes();if(i){var o=i._private;if(!e(i))return!1;if(i.isNode())return!s||ms(i,a);var l=o.source,u=o.target;return t(l)&&(!s||ms(l,t))&&(l===u||t(u)&&(!s||ms(u,t)))}}}var aa=Hn(\"eleTakesUpSpace\",function(r){return r.pstyle(\"display\").value===\"element\"&&r.width()!==0&&(r.isNode()?r.height()!==0:!0)});vr.takesUpSpace=Wn(\"takesUpSpace\",vo({ok:aa}));var cp=Hn(\"eleInteractive\",function(r){return r.pstyle(\"events\").value===\"yes\"&&r.pstyle(\"visibility\").value===\"visible\"&&aa(r)}),dp=Hn(\"parentInteractive\",function(r){return r.pstyle(\"visibility\").value===\"visible\"&&aa(r)});vr.interactive=Wn(\"interactive\",vo({ok:cp,parentOk:dp,edgeOkViaNode:aa}));vr.noninteractive=function(){var r=this[0];if(r)return!r.interactive()};var hp=Hn(\"eleVisible\",function(r){return r.pstyle(\"visibility\").value===\"visible\"&&r.pstyle(\"opacity\").pfValue!==0&&aa(r)}),gp=aa;vr.visible=Wn(\"visible\",vo({ok:hp,edgeOkViaNode:gp}));vr.hidden=function(){var r=this[0];if(r)return!r.visible()};vr.isBundledBezier=Wn(\"isBundledBezier\",function(){return this.cy().styleEnabled()?!this.removed()&&this.pstyle(\"curve-style\").value===\"bezier\"&&this.takesUpSpace():!1});vr.bypass=vr.css=vr.style;vr.renderedCss=vr.renderedStyle;vr.removeBypass=vr.removeCss=vr.removeStyle;vr.pstyle=vr.parsedStyle;var ot={};function hl(r){return function(){var e=arguments,t=[];if(e.length===2){var a=e[0],n=e[1];this.on(r.event,a,n)}else if(e.length===1&&Ue(e[0])){var i=e[0];this.on(r.event,i)}else if(e.length===0||e.length===1&&_e(e[0])){for(var s=e.length===1?e[0]:null,o=0;o<this.length;o++){var l=this[o],u=!r.ableField||l._private[r.ableField],v=l._private[r.field]!=r.value;if(r.overrideAble){var f=r.overrideAble(l);if(f!==void 0&&(u=f,!f))return this}u&&(l._private[r.field]=r.value,v&&t.push(l))}var c=this.spawn(t);c.updateStyle(),c.emit(r.event),s&&c.emit(s)}return this}}function na(r){ot[r.field]=function(){var e=this[0];if(e){if(r.overrideField){var t=r.overrideField(e);if(t!==void 0)return t}return e._private[r.field]}},ot[r.on]=hl({event:r.on,field:r.field,ableField:r.ableField,overrideAble:r.overrideAble,value:!0}),ot[r.off]=hl({event:r.off,field:r.field,ableField:r.ableField,overrideAble:r.overrideAble,value:!1})}na({field:\"locked\",overrideField:function(e){return e.cy().autolock()?!0:void 0},on:\"lock\",off:\"unlock\"});na({field:\"grabbable\",overrideField:function(e){return e.cy().autoungrabify()||e.pannable()?!1:void 0},on:\"grabify\",off:\"ungrabify\"});na({field:\"selected\",ableField:\"selectable\",overrideAble:function(e){return e.cy().autounselectify()?!1:void 0},on:\"select\",off:\"unselect\"});na({field:\"selectable\",overrideField:function(e){return e.cy().autounselectify()?!1:void 0},on:\"selectify\",off:\"unselectify\"});ot.deselect=ot.unselect;ot.grabbed=function(){var r=this[0];if(r)return r._private.grabbed};na({field:\"active\",on:\"activate\",off:\"unactivate\"});na({field:\"pannable\",on:\"panify\",off:\"unpanify\"});ot.inactive=function(){var r=this[0];if(r)return!r._private.active};var gr={},gl=function(e){return function(a){for(var n=this,i=[],s=0;s<n.length;s++){var o=n[s];if(o.isNode()){for(var l=!1,u=o.connectedEdges(),v=0;v<u.length;v++){var f=u[v],c=f.source(),h=f.target();if(e.noIncomingEdges&&h===o&&c!==o||e.noOutgoingEdges&&c===o&&h!==o){l=!0;break}}l||i.push(o)}}return this.spawn(i,!0).filter(a)}},pl=function(e){return function(t){for(var a=this,n=[],i=0;i<a.length;i++){var s=a[i];if(s.isNode())for(var o=s.connectedEdges(),l=0;l<o.length;l++){var u=o[l],v=u.source(),f=u.target();e.outgoing&&v===s?(n.push(u),n.push(f)):e.incoming&&f===s&&(n.push(u),n.push(v))}}return this.spawn(n,!0).filter(t)}},yl=function(e){return function(t){for(var a=this,n=[],i={};;){var s=e.outgoing?a.outgoers():a.incomers();if(s.length===0)break;for(var o=!1,l=0;l<s.length;l++){var u=s[l],v=u.id();i[v]||(i[v]=!0,n.push(u),o=!0)}if(!o)break;a=s}return this.spawn(n,!0).filter(t)}};gr.clearTraversalCache=function(){for(var r=0;r<this.length;r++)this[r]._private.traversalCache=null};be(gr,{roots:gl({noIncomingEdges:!0}),leaves:gl({noOutgoingEdges:!0}),outgoers:Rr(pl({outgoing:!0}),\"outgoers\"),successors:yl({outgoing:!0}),incomers:Rr(pl({incoming:!0}),\"incomers\"),predecessors:yl({})});be(gr,{neighborhood:Rr(function(r){for(var e=[],t=this.nodes(),a=0;a<t.length;a++)for(var n=t[a],i=n.connectedEdges(),s=0;s<i.length;s++){var o=i[s],l=o.source(),u=o.target(),v=n===l?u:l;v.length>0&&e.push(v[0]),e.push(o[0])}return this.spawn(e,!0).filter(r)},\"neighborhood\"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}});gr.neighbourhood=gr.neighborhood;gr.closedNeighbourhood=gr.closedNeighborhood;gr.openNeighbourhood=gr.openNeighborhood;be(gr,{source:Rr(function(e){var t=this[0],a;return t&&(a=t._private.source||t.cy().collection()),a&&e?a.filter(e):a},\"source\"),target:Rr(function(e){var t=this[0],a;return t&&(a=t._private.target||t.cy().collection()),a&&e?a.filter(e):a},\"target\"),sources:ml({attr:\"source\"}),targets:ml({attr:\"target\"})});function ml(r){return function(t){for(var a=[],n=0;n<this.length;n++){var i=this[n],s=i._private[r.attr];s&&a.push(s)}return this.spawn(a,!0).filter(t)}}be(gr,{edgesWith:Rr(bl(),\"edgesWith\"),edgesTo:Rr(bl({thisIsSrc:!0}),\"edgesTo\")});function bl(r){return function(t){var a=[],n=this._private.cy,i=r||{};ge(t)&&(t=n.$(t));for(var s=0;s<t.length;s++)for(var o=t[s]._private.edges,l=0;l<o.length;l++){var u=o[l],v=u._private.data,f=this.hasElementWithId(v.source)&&t.hasElementWithId(v.target),c=t.hasElementWithId(v.source)&&this.hasElementWithId(v.target),h=f||c;h&&((i.thisIsSrc||i.thisIsTgt)&&(i.thisIsSrc&&!f||i.thisIsTgt&&!c)||a.push(u))}return this.spawn(a,!0)}}be(gr,{connectedEdges:Rr(function(r){for(var e=[],t=this,a=0;a<t.length;a++){var n=t[a];if(n.isNode())for(var i=n._private.edges,s=0;s<i.length;s++){var o=i[s];e.push(o)}}return this.spawn(e,!0).filter(r)},\"connectedEdges\"),connectedNodes:Rr(function(r){for(var e=[],t=this,a=0;a<t.length;a++){var n=t[a];n.isEdge()&&(e.push(n.source()[0]),e.push(n.target()[0]))}return this.spawn(e,!0).filter(r)},\"connectedNodes\"),parallelEdges:Rr(wl(),\"parallelEdges\"),codirectedEdges:Rr(wl({codirected:!0}),\"codirectedEdges\")});function wl(r){var e={codirected:!1};return r=be({},e,r),function(a){for(var n=[],i=this.edges(),s=r,o=0;o<i.length;o++)for(var l=i[o],u=l._private,v=u.source,f=v._private.data.id,c=u.data.target,h=v._private.edges,d=0;d<h.length;d++){var y=h[d],g=y._private.data,p=g.target,m=g.source,b=p===c&&m===f,w=f===p&&c===m;(s.codirected&&b||!s.codirected&&(b||w))&&n.push(y)}return this.spawn(n,!0).filter(a)}}be(gr,{components:function(e){var t=this,a=t.cy(),n=a.collection(),i=e==null?t.nodes():e.nodes(),s=[];e!=null&&i.empty()&&(i=e.sources());var o=function(v,f){n.merge(v),i.unmerge(v),f.merge(v)};if(i.empty())return t.spawn();var l=function(){var v=a.collection();s.push(v);var f=i[0];o(f,v),t.bfs({directed:!1,roots:f,visit:function(h){return o(h,v)}}),v.forEach(function(c){c.connectedEdges().forEach(function(h){t.has(h)&&v.has(h.source())&&v.has(h.target())&&v.merge(h)})})};do l();while(i.length>0);return s},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}});gr.componentsOf=gr.components;var fr=function(e,t){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){$e(\"A collection must have a reference to the core\");return}var i=new Xr,s=!1;if(!t)t=[];else if(t.length>0&&Le(t[0])&&!Ia(t[0])){s=!0;for(var o=[],l=new ra,u=0,v=t.length;u<v;u++){var f=t[u];f.data==null&&(f.data={});var c=f.data;if(c.id==null)c.id=gv();else if(e.hasElementWithId(c.id)||l.has(c.id))continue;var h=new In(e,f,!1);o.push(h),l.add(c.id)}t=o}this.length=0;for(var d=0,y=t.length;d<y;d++){var g=t[d][0];if(g!=null){var p=g._private.data.id;(!a||!i.has(p))&&(a&&i.set(p,{index:this.length,ele:g}),this[this.length]=g,this.length++)}}this._private={eles:this,cy:e,get map(){return this.lazyMap==null&&this.rebuildMap(),this.lazyMap},set map(m){this.lazyMap=m},rebuildMap:function(){for(var b=this.lazyMap=new Xr,w=this.eles,E=0;E<w.length;E++){var C=w[E];b.set(C.id(),{index:E,ele:C})}}},a&&(this._private.map=i),s&&!n&&this.restore()},He=In.prototype=fr.prototype=Object.create(Array.prototype);He.instanceString=function(){return\"collection\"};He.spawn=function(r,e){return new fr(this.cy(),r,e)};He.spawnSelf=function(){return this.spawn(this)};He.cy=function(){return this._private.cy};He.renderer=function(){return this._private.cy.renderer()};He.element=function(){return this[0]};He.collection=function(){return rv(this)?this:new fr(this._private.cy,[this])};He.unique=function(){return new fr(this._private.cy,this,!0)};He.hasElementWithId=function(r){return r=\"\"+r,this._private.map.has(r)};He.getElementById=function(r){r=\"\"+r;var e=this._private.cy,t=this._private.map.get(r);return t?t.ele:new fr(e)};He.$id=He.getElementById;He.poolIndex=function(){var r=this._private.cy,e=r._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index};He.indexOf=function(r){var e=r[0]._private.data.id;return this._private.map.get(e).index};He.indexOfId=function(r){return r=\"\"+r,this._private.map.get(r).index};He.json=function(r){var e=this.element(),t=this.cy();if(e==null&&r)return this;if(e!=null){var a=e._private;if(Le(r)){if(t.startBatch(),r.data){e.data(r.data);var n=a.data;if(e.isEdge()){var i=!1,s={},o=r.data.source,l=r.data.target;o!=null&&o!=n.source&&(s.source=\"\"+o,i=!0),l!=null&&l!=n.target&&(s.target=\"\"+l,i=!0),i&&(e=e.move(s))}else{var u=\"parent\"in r.data,v=r.data.parent;u&&(v!=null||n.parent!=null)&&v!=n.parent&&(v===void 0&&(v=null),v!=null&&(v=\"\"+v),e=e.move({parent:v}))}}r.position&&e.position(r.position);var f=function(y,g,p){var m=r[y];m!=null&&m!==a[y]&&(m?e[g]():e[p]())};return f(\"removed\",\"remove\",\"restore\"),f(\"selected\",\"select\",\"unselect\"),f(\"selectable\",\"selectify\",\"unselectify\"),f(\"locked\",\"lock\",\"unlock\"),f(\"grabbable\",\"grabify\",\"ungrabify\"),f(\"pannable\",\"panify\",\"unpanify\"),r.classes!=null&&e.classes(r.classes),t.endBatch(),this}else if(r===void 0){var c={data:qr(a.data),position:qr(a.position),group:a.group,removed:a.removed,selected:a.selected,selectable:a.selectable,locked:a.locked,grabbable:a.grabbable,pannable:a.pannable,classes:null};c.classes=\"\";var h=0;return a.classes.forEach(function(d){return c.classes+=h++===0?d:\" \"+d}),c}}};He.jsons=function(){for(var r=[],e=0;e<this.length;e++){var t=this[e],a=t.json();r.push(a)}return r};He.clone=function(){for(var r=this.cy(),e=[],t=0;t<this.length;t++){var a=this[t],n=a.json(),i=new In(r,n,!1);e.push(i)}return new fr(r,e)};He.copy=He.clone;He.restore=function(){for(var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,t=this,a=t.cy(),n=a._private,i=[],s=[],o,l=0,u=t.length;l<u;l++){var v=t[l];e&&!v.removed()||(v.isNode()?i.push(v):s.push(v))}o=i.concat(s);var f,c=function(){o.splice(f,1),f--};for(f=0;f<o.length;f++){var h=o[f],d=h._private,y=d.data;if(h.clearTraversalCache(),!(!e&&!d.removed)){if(y.id===void 0)y.id=gv();else if(ae(y.id))y.id=\"\"+y.id;else if(ut(y.id)||!ge(y.id)){$e(\"Can not create element with invalid string ID `\"+y.id+\"`\"),c();continue}else if(a.hasElementWithId(y.id)){$e(\"Can not create second element with ID `\"+y.id+\"`\"),c();continue}}var g=y.id;if(h.isNode()){var p=d.position;p.x==null&&(p.x=0),p.y==null&&(p.y=0)}if(h.isEdge()){for(var m=h,b=[\"source\",\"target\"],w=b.length,E=!1,C=0;C<w;C++){var x=b[C],T=y[x];ae(T)&&(T=y[x]=\"\"+y[x]),T==null||T===\"\"?($e(\"Can not create edge `\"+g+\"` with unspecified \"+x),E=!0):a.hasElementWithId(T)||($e(\"Can not create edge `\"+g+\"` with nonexistant \"+x+\" `\"+T+\"`\"),E=!0)}if(E){c();continue}var k=a.getElementById(y.source),D=a.getElementById(y.target);k.same(D)?k._private.edges.push(m):(k._private.edges.push(m),D._private.edges.push(m)),m._private.source=k,m._private.target=D}d.map=new Xr,d.map.set(g,{ele:h,index:0}),d.removed=!1,e&&a.addToPool(h)}for(var B=0;B<i.length;B++){var P=i[B],A=P._private.data;ae(A.parent)&&(A.parent=\"\"+A.parent);var R=A.parent,L=R!=null;if(L||P._private.parent){var I=P._private.parent?a.collection().merge(P._private.parent):a.getElementById(R);if(I.empty())A.parent=void 0;else if(I[0].removed())Ve(\"Node added with missing parent, reference to parent removed\"),A.parent=void 0,P._private.parent=null;else{for(var M=!1,O=I;!O.empty();){if(P.same(O)){M=!0,A.parent=void 0;break}O=O.parent()}M||(I[0]._private.children.push(P),P._private.parent=I[0],n.hasCompoundNodes=!0)}}}if(o.length>0){for(var V=o.length===t.length?t:new fr(a,o),G=0;G<V.length;G++){var N=V[G];N.isNode()||(N.parallelEdges().clearTraversalCache(),N.source().clearTraversalCache(),N.target().clearTraversalCache())}var F;n.hasCompoundNodes?F=a.collection().merge(V).merge(V.connectedNodes()).merge(V.parent()):F=V,F.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(r),r?V.emitAndNotify(\"add\"):e&&V.emit(\"add\")}return t};He.removed=function(){var r=this[0];return r&&r._private.removed};He.inside=function(){var r=this[0];return r&&!r._private.removed};He.remove=function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,t=this,a=[],n={},i=t._private.cy;function s(R){for(var L=R._private.edges,I=0;I<L.length;I++)l(L[I])}function o(R){for(var L=R._private.children,I=0;I<L.length;I++)l(L[I])}function l(R){var L=n[R.id()];e&&R.removed()||L||(n[R.id()]=!0,R.isNode()?(a.push(R),s(R),o(R)):a.unshift(R))}for(var u=0,v=t.length;u<v;u++){var f=t[u];l(f)}function c(R,L){var I=R._private.edges;lt(I,L),R.clearTraversalCache()}function h(R){R.clearTraversalCache()}var d=[];d.ids={};function y(R,L){L=L[0],R=R[0];var I=R._private.children,M=R.id();lt(I,L),L._private.parent=null,d.ids[M]||(d.ids[M]=!0,d.push(R))}t.dirtyCompoundBoundsCache(),e&&i.removeFromPool(a);for(var g=0;g<a.length;g++){var p=a[g];if(p.isEdge()){var m=p.source()[0],b=p.target()[0];c(m,p),c(b,p);for(var w=p.parallelEdges(),E=0;E<w.length;E++){var C=w[E];h(C),C.isBundledBezier()&&C.dirtyBoundingBoxCache()}}else{var x=p.parent();x.length!==0&&y(x,p)}e&&(p._private.removed=!0)}var T=i._private.elements;i._private.hasCompoundNodes=!1;for(var k=0;k<T.length;k++){var D=T[k];if(D.isParent()){i._private.hasCompoundNodes=!0;break}}var B=new fr(this.cy(),a);B.size()>0&&(r?B.emitAndNotify(\"remove\"):e&&B.emit(\"remove\"));for(var P=0;P<d.length;P++){var A=d[P];(!e||!A.removed())&&A.updateStyle()}return B};He.move=function(r){var e=this._private.cy,t=this,a=!1,n=!1,i=function(d){return d==null?d:\"\"+d};if(r.source!==void 0||r.target!==void 0){var s=i(r.source),o=i(r.target),l=s!=null&&e.hasElementWithId(s),u=o!=null&&e.hasElementWithId(o);(l||u)&&(e.batch(function(){t.remove(a,n),t.emitAndNotify(\"moveout\");for(var h=0;h<t.length;h++){var d=t[h],y=d._private.data;d.isEdge()&&(l&&(y.source=s),u&&(y.target=o))}t.restore(a,n)}),t.emitAndNotify(\"move\"))}else if(r.parent!==void 0){var v=i(r.parent),f=v===null||e.hasElementWithId(v);if(f){var c=v===null?void 0:v;e.batch(function(){var h=t.remove(a,n);h.emitAndNotify(\"moveout\");for(var d=0;d<t.length;d++){var y=t[d],g=y._private.data;y.isNode()&&(g.parent=c)}h.restore(a,n)}),t.emitAndNotify(\"move\")}}return this};[Dv,kg,vn,st,jt,Gg,_n,np,Jv,jv,lp,Sn,fn,vr,ot,gr].forEach(function(r){be(He,r)});var pp={add:function(e){var t,a=this;if(Dr(e)){var n=e;if(n._private.cy===a)t=n.restore();else{for(var i=[],s=0;s<n.length;s++){var o=n[s];i.push(o.json())}t=new fr(a,i)}}else if(_e(e)){var l=e;t=new fr(a,l)}else if(Le(e)&&(_e(e.nodes)||_e(e.edges))){for(var u=e,v=[],f=[\"nodes\",\"edges\"],c=0,h=f.length;c<h;c++){var d=f[c],y=u[d];if(_e(y))for(var g=0,p=y.length;g<p;g++){var m=be({group:d},y[g]);v.push(m)}}t=new fr(a,v)}else{var b=e;t=new In(a,b).collection()}return t},remove:function(e){if(!Dr(e)){if(ge(e)){var t=e;e=this.$(t)}}return e.remove()}};function yp(r,e,t,a){var n=4,i=.001,s=1e-7,o=10,l=11,u=1/(l-1),v=typeof Float32Array<\"u\";if(arguments.length!==4)return!1;for(var f=0;f<4;++f)if(typeof arguments[f]!=\"number\"||isNaN(arguments[f])||!isFinite(arguments[f]))return!1;r=Math.min(r,1),t=Math.min(t,1),r=Math.max(r,0),t=Math.max(t,0);var c=v?new Float32Array(l):new Array(l);function h(D,B){return 1-3*B+3*D}function d(D,B){return 3*B-6*D}function y(D){return 3*D}function g(D,B,P){return((h(B,P)*D+d(B,P))*D+y(B))*D}function p(D,B,P){return 3*h(B,P)*D*D+2*d(B,P)*D+y(B)}function m(D,B){for(var P=0;P<n;++P){var A=p(B,r,t);if(A===0)return B;var R=g(B,r,t)-D;B-=R/A}return B}function b(){for(var D=0;D<l;++D)c[D]=g(D*u,r,t)}function w(D,B,P){var A,R,L=0;do R=B+(P-B)/2,A=g(R,r,t)-D,A>0?P=R:B=R;while(Math.abs(A)>s&&++L<o);return R}function E(D){for(var B=0,P=1,A=l-1;P!==A&&c[P]<=D;++P)B+=u;--P;var R=(D-c[P])/(c[P+1]-c[P]),L=B+R*u,I=p(L,r,t);return I>=i?m(D,L):I===0?L:w(D,B,B+u)}var C=!1;function x(){C=!0,(r!==e||t!==a)&&b()}var T=function(B){return C||x(),r===e&&t===a?B:B===0?0:B===1?1:g(E(B),e,a)};T.getControlPoints=function(){return[{x:r,y:e},{x:t,y:a}]};var k=\"generateBezier(\"+[r,e,t,a]+\")\";return T.toString=function(){return k},T}var mp=(function(){function r(a){return-a.tension*a.x-a.friction*a.v}function e(a,n,i){var s={x:a.x+i.dx*n,v:a.v+i.dv*n,tension:a.tension,friction:a.friction};return{dx:s.v,dv:r(s)}}function t(a,n){var i={dx:a.v,dv:r(a)},s=e(a,n*.5,i),o=e(a,n*.5,s),l=e(a,n,o),u=1/6*(i.dx+2*(s.dx+o.dx)+l.dx),v=1/6*(i.dv+2*(s.dv+o.dv)+l.dv);return a.x=a.x+u*n,a.v=a.v+v*n,a}return function a(n,i,s){var o={x:-1,v:0,tension:null,friction:null},l=[0],u=0,v=1/1e4,f=16/1e3,c,h,d;for(n=parseFloat(n)||500,i=parseFloat(i)||20,s=s||null,o.tension=n,o.friction=i,c=s!==null,c?(u=a(n,i),h=u/s*f):h=f;d=t(d||o,h),l.push(1+d.x),u+=16,Math.abs(d.x)>v&&Math.abs(d.v)>v;);return c?function(y){return l[y*(l.length-1)|0]}:u}})(),Ge=function(e,t,a,n){var i=yp(e,t,a,n);return function(s,o,l){return s+(o-s)*i(l)}},cn={linear:function(e,t,a){return e+(t-e)*a},ease:Ge(.25,.1,.25,1),\"ease-in\":Ge(.42,0,1,1),\"ease-out\":Ge(0,0,.58,1),\"ease-in-out\":Ge(.42,0,.58,1),\"ease-in-sine\":Ge(.47,0,.745,.715),\"ease-out-sine\":Ge(.39,.575,.565,1),\"ease-in-out-sine\":Ge(.445,.05,.55,.95),\"ease-in-quad\":Ge(.55,.085,.68,.53),\"ease-out-quad\":Ge(.25,.46,.45,.94),\"ease-in-out-quad\":Ge(.455,.03,.515,.955),\"ease-in-cubic\":Ge(.55,.055,.675,.19),\"ease-out-cubic\":Ge(.215,.61,.355,1),\"ease-in-out-cubic\":Ge(.645,.045,.355,1),\"ease-in-quart\":Ge(.895,.03,.685,.22),\"ease-out-quart\":Ge(.165,.84,.44,1),\"ease-in-out-quart\":Ge(.77,0,.175,1),\"ease-in-quint\":Ge(.755,.05,.855,.06),\"ease-out-quint\":Ge(.23,1,.32,1),\"ease-in-out-quint\":Ge(.86,0,.07,1),\"ease-in-expo\":Ge(.95,.05,.795,.035),\"ease-out-expo\":Ge(.19,1,.22,1),\"ease-in-out-expo\":Ge(1,0,0,1),\"ease-in-circ\":Ge(.6,.04,.98,.335),\"ease-out-circ\":Ge(.075,.82,.165,1),\"ease-in-out-circ\":Ge(.785,.135,.15,.86),spring:function(e,t,a){if(a===0)return cn.linear;var n=mp(e,t,a);return function(i,s,o){return i+(s-i)*n(o)}},\"cubic-bezier\":Ge};function xl(r,e,t,a,n){if(a===1||e===t)return t;var i=n(e,t,a);return r==null||((r.roundValue||r.color)&&(i=Math.round(i)),r.min!==void 0&&(i=Math.max(i,r.min)),r.max!==void 0&&(i=Math.min(i,r.max))),i}function El(r,e){return r.pfValue!=null||r.value!=null?r.pfValue!=null&&(e==null||e.type.units!==\"%\")?r.pfValue:r.value:r}function zt(r,e,t,a,n){var i=n!=null?n.type:null;t<0?t=0:t>1&&(t=1);var s=El(r,n),o=El(e,n);if(ae(s)&&ae(o))return xl(i,s,o,t,a);if(_e(s)&&_e(o)){for(var l=[],u=0;u<o.length;u++){var v=s[u],f=o[u];if(v!=null&&f!=null){var c=xl(i,v,f,t,a);l.push(c)}else l.push(f)}return l}}function bp(r,e,t,a){var n=!a,i=r._private,s=e._private,o=s.easing,l=s.startTime,u=a?r:r.cy(),v=u.style();if(!s.easingImpl)if(o==null)s.easingImpl=cn.linear;else{var f;if(ge(o)){var c=v.parse(\"transition-timing-function\",o);f=c.value}else f=o;var h,d;ge(f)?(h=f,d=[]):(h=f[1],d=f.slice(2).map(function(V){return+V})),d.length>0?(h===\"spring\"&&d.push(s.duration),s.easingImpl=cn[h].apply(null,d)):s.easingImpl=cn[h]}var y=s.easingImpl,g;if(s.duration===0?g=1:g=(t-l)/s.duration,s.applying&&(g=s.progress),g<0?g=0:g>1&&(g=1),s.delay==null){var p=s.startPosition,m=s.position;if(m&&n&&!r.locked()){var b={};da(p.x,m.x)&&(b.x=zt(p.x,m.x,g,y)),da(p.y,m.y)&&(b.y=zt(p.y,m.y,g,y)),r.position(b)}var w=s.startPan,E=s.pan,C=i.pan,x=E!=null&&a;x&&(da(w.x,E.x)&&(C.x=zt(w.x,E.x,g,y)),da(w.y,E.y)&&(C.y=zt(w.y,E.y,g,y)),r.emit(\"pan\"));var T=s.startZoom,k=s.zoom,D=k!=null&&a;D&&(da(T,k)&&(i.zoom=ka(i.minZoom,zt(T,k,g,y),i.maxZoom)),r.emit(\"zoom\")),(x||D)&&r.emit(\"viewport\");var B=s.style;if(B&&B.length>0&&n){for(var P=0;P<B.length;P++){var A=B[P],R=A.name,L=A,I=s.startStyle[R],M=v.properties[I.name],O=zt(I,L,g,y,M);v.overrideBypass(r,R,O)}r.emit(\"style\")}}return s.progress=g,g}function da(r,e){return r==null||e==null?!1:ae(r)&&ae(e)?!0:!!(r&&e)}function wp(r,e,t,a){var n=e._private;n.started=!0,n.startTime=t-n.progress*n.duration}function Cl(r,e){var t=e._private.aniEles,a=[];function n(v,f){var c=v._private,h=c.animation.current,d=c.animation.queue,y=!1;if(h.length===0){var g=d.shift();g&&h.push(g)}for(var p=function(C){for(var x=C.length-1;x>=0;x--){var T=C[x];T()}C.splice(0,C.length)},m=h.length-1;m>=0;m--){var b=h[m],w=b._private;if(w.stopped){h.splice(m,1),w.hooked=!1,w.playing=!1,w.started=!1,p(w.frames);continue}!w.playing&&!w.applying||(w.playing&&w.applying&&(w.applying=!1),w.started||wp(v,b,r),bp(v,b,r,f),w.applying&&(w.applying=!1),p(w.frames),w.step!=null&&w.step(r),b.completed()&&(h.splice(m,1),w.hooked=!1,w.playing=!1,w.started=!1,p(w.completes)),y=!0)}return!f&&h.length===0&&d.length===0&&a.push(v),y}for(var i=!1,s=0;s<t.length;s++){var o=t[s],l=n(o);i=i||l}var u=n(e,!0);(i||u)&&(t.length>0?e.notify(\"draw\",t):e.notify(\"draw\")),t.unmerge(a),e.emit(\"step\")}var xp={animate:Fe.animate(),animation:Fe.animation(),animated:Fe.animated(),clearQueue:Fe.clearQueue(),delay:Fe.delay(),delayAnimation:Fe.delayAnimation(),stop:Fe.stop(),addToAnimationPool:function(e){var t=this;t.styleEnabled()&&t._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function t(){e._private.animationsRunning&&wn(function(i){Cl(i,e),t()})}var a=e.renderer();a&&a.beforeRender?a.beforeRender(function(i,s){Cl(s,e)},a.beforeRenderPriorities.animations):t()}},Ep={qualifierCompare:function(e,t){return e==null||t==null?e==null&&t==null:e.sameText(t)},eventMatches:function(e,t,a){var n=t.qualifier;return n!=null?e!==a.target&&Ia(a.target)&&n.matches(a.target):!0},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,a){return t.qualifier!=null?a.target:e}},tn=function(e){return ge(e)?new ft(e):e},tf={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Gn(Ep,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,a){return this.emitter().on(e,tn(t),a),this},removeListener:function(e,t,a){return this.emitter().removeListener(e,tn(t),a),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,a){return this.emitter().one(e,tn(t),a),this},once:function(e,t,a){return this.emitter().one(e,tn(t),a),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};Fe.eventAliasesOn(tf);var zs={png:function(e){var t=this._private.renderer;return e=e||{},t.png(e)},jpg:function(e){var t=this._private.renderer;return e=e||{},e.bg=e.bg||\"#fff\",t.jpg(e)}};zs.jpeg=zs.jpg;var dn={layout:function(e){var t=this;if(e==null){$e(\"Layout options must be specified to make a layout\");return}if(e.name==null){$e(\"A `name` must be specified to make a layout\");return}var a=e.name,n=t.extension(\"layout\",a);if(n==null){$e(\"No such layout `\"+a+\"` found.  Did you forget to import it and `cytoscape.use()` it?\");return}var i;ge(e.eles)?i=t.$(e.eles):i=e.eles!=null?e.eles:t.$();var s=new n(be({},e,{cy:t,eles:i}));return s}};dn.createLayout=dn.makeLayout=dn.layout;var Cp={notify:function(e,t){var a=this._private;if(this.batching()){a.batchNotifications=a.batchNotifications||{};var n=a.batchNotifications[e]=a.batchNotifications[e]||this.collection();t!=null&&n.merge(t);return}if(a.notificationsEnabled){var i=this.renderer();this.destroyed()||!i||i.notify(e,t)}},notifications:function(e){var t=this._private;return e===void 0?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach(function(a){var n=e.batchNotifications[a];n.empty()?t.notify(a):t.notify(a,n)})}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch(function(){for(var a=Object.keys(e),n=0;n<a.length;n++){var i=a[n],s=e[i],o=t.getElementById(i);o.data(s)}})}},Tp=cr({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1,webgl:!1,webglDebug:!1,webglDebugShowAtlases:!1,webglTexSize:2048,webglTexRows:36,webglTexRowsNodes:18,webglBatchSize:2048,webglTexPerBatch:14,webglBgColor:[255,255,255]}),Fs={renderTo:function(e,t,a,n){var i=this._private.renderer;return i.renderTo(e,t,a,n),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify(\"draw\"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify(\"resize\"),this},initRenderer:function(e){var t=this,a=t.extension(\"renderer\",e.name);if(a==null){$e(\"Can not initialise: No such renderer `\".concat(e.name,\"` found. Did you forget to import it and `cytoscape.use()` it?\"));return}e.wheelSensitivity!==void 0&&Ve(\"You have set a custom wheel sensitivity.  This will make your app zoom unnaturally when using mainstream mice.  You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.\");var n=Tp(e);n.cy=t,t._private.renderer=new a(n),this.notify(\"init\")},destroyRenderer:function(){var e=this;e.notify(\"destroy\");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(a){var n=a._private;n.rscratch={},n.rstyle={},n.animation.current=[],n.animation.queue=[]})},onRender:function(e){return this.on(\"render\",e)},offRender:function(e){return this.off(\"render\",e)}};Fs.invalidateDimensions=Fs.resize;var hn={collection:function(e,t){return ge(e)?this.$(e):Dr(e)?e.collection():_e(e)?(t||(t={}),new fr(this,e,t.unique,t.removed)):new fr(this)},nodes:function(e){var t=this.$(function(a){return a.isNode()});return e?t.filter(e):t},edges:function(e){var t=this.$(function(a){return a.isEdge()});return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};hn.elements=hn.filter=hn.$;var ur={},wa=\"t\",Sp=\"f\";ur.apply=function(r){for(var e=this,t=e._private,a=t.cy,n=a.collection(),i=0;i<r.length;i++){var s=r[i],o=e.getContextMeta(s);if(!o.empty){var l=e.getContextStyle(o),u=e.applyContextStyle(o,l,s);s._private.appliedInitStyle?e.updateTransitions(s,u.diffProps):s._private.appliedInitStyle=!0;var v=e.updateStyleHints(s);v&&n.push(s)}}return n};ur.getPropertiesDiff=function(r,e){var t=this,a=t._private.propDiffs=t._private.propDiffs||{},n=r+\"-\"+e,i=a[n];if(i)return i;for(var s=[],o={},l=0;l<t.length;l++){var u=t[l],v=r[l]===wa,f=e[l]===wa,c=v!==f,h=u.mappedProperties.length>0;if(c||f&&h){var d=void 0;c&&h||c?d=u.properties:h&&(d=u.mappedProperties);for(var y=0;y<d.length;y++){for(var g=d[y],p=g.name,m=!1,b=l+1;b<t.length;b++){var w=t[b],E=e[b]===wa;if(E&&(m=w.properties[g.name]!=null,m))break}!o[p]&&!m&&(o[p]=!0,s.push(p))}}}return a[n]=s,s};ur.getContextMeta=function(r){for(var e=this,t=\"\",a,n=r._private.styleCxtKey||\"\",i=0;i<e.length;i++){var s=e[i],o=s.selector&&s.selector.matches(r);o?t+=wa:t+=Sp}return a=e.getPropertiesDiff(n,t),r._private.styleCxtKey=t,{key:t,diffPropNames:a,empty:a.length===0}};ur.getContextStyle=function(r){var e=r.key,t=this,a=this._private.contextStyles=this._private.contextStyles||{};if(a[e])return a[e];for(var n={_private:{key:e}},i=0;i<t.length;i++){var s=t[i],o=e[i]===wa;if(o)for(var l=0;l<s.properties.length;l++){var u=s.properties[l];n[u.name]=u}}return a[e]=n,n};ur.applyContextStyle=function(r,e,t){for(var a=this,n=r.diffPropNames,i={},s=a.types,o=0;o<n.length;o++){var l=n[o],u=e[l],v=t.pstyle(l);if(!u)if(v)v.bypass?u={name:l,deleteBypassed:!0}:u={name:l,delete:!0};else continue;if(v!==u){if(u.mapped===s.fn&&v!=null&&v.mapping!=null&&v.mapping.value===u.value){var f=v.mapping,c=f.fnValue=u.value(t);if(c===f.prevFnValue)continue}var h=i[l]={prev:v};a.applyParsedProperty(t,u),h.next=t.pstyle(l),h.next&&h.next.bypass&&(h.next=h.next.bypassed)}}return{diffProps:i}};ur.updateStyleHints=function(r){var e=r._private,t=this,a=t.propertyGroupNames,n=t.propertyGroupKeys,i=function(H,Y,te){return t.getPropertiesHash(H,Y,te)},s=e.styleKey;if(r.removed())return!1;var o=e.group===\"nodes\",l=r._private.style;a=Object.keys(l);for(var u=0;u<n.length;u++){var v=n[u];e.styleKeys[v]=[Tt,Ht]}for(var f=function(H,Y){return e.styleKeys[Y][0]=Ca(H,e.styleKeys[Y][0])},c=function(H,Y){return e.styleKeys[Y][1]=Ta(H,e.styleKeys[Y][1])},h=function(H,Y){f(H,Y),c(H,Y)},d=function(H,Y){for(var te=0;te<H.length;te++){var ce=H.charCodeAt(te);f(ce,Y),c(ce,Y)}},y=2e9,g=function(H){return-128<H&&H<128&&Math.floor(H)!==H?y-(H*1024|0):H},p=0;p<a.length;p++){var m=a[p],b=l[m];if(b!=null){var w=this.properties[m],E=w.type,C=w.groupKey,x=void 0;w.hashOverride!=null?x=w.hashOverride(r,b):b.pfValue!=null&&(x=b.pfValue);var T=w.enums==null?b.value:null,k=x!=null,D=T!=null,B=k||D,P=b.units;if(E.number&&B&&!E.multiple){var A=k?x:T;h(g(A),C),!k&&P!=null&&d(P,C)}else d(b.strValue,C)}}for(var R=[Tt,Ht],L=0;L<n.length;L++){var I=n[L],M=e.styleKeys[I];R[0]=Ca(M[0],R[0]),R[1]=Ta(M[1],R[1])}e.styleKey=_c(R[0],R[1]);var O=e.styleKeys;e.labelDimsKey=et(O.labelDimensions);var V=i(r,[\"label\"],O.labelDimensions);if(e.labelKey=et(V),e.labelStyleKey=et(Xa(O.commonLabel,V)),!o){var G=i(r,[\"source-label\"],O.labelDimensions);e.sourceLabelKey=et(G),e.sourceLabelStyleKey=et(Xa(O.commonLabel,G));var N=i(r,[\"target-label\"],O.labelDimensions);e.targetLabelKey=et(N),e.targetLabelStyleKey=et(Xa(O.commonLabel,N))}if(o){var F=e.styleKeys,U=F.nodeBody,Q=F.nodeBorder,K=F.nodeOutline,j=F.backgroundImage,re=F.compound,ne=F.pie,J=F.stripe,z=[U,Q,K,j,re,ne,J].filter(function(q){return q!=null}).reduce(Xa,[Tt,Ht]);e.nodeKey=et(z),e.hasPie=ne!=null&&ne[0]!==Tt&&ne[1]!==Ht,e.hasStripe=J!=null&&J[0]!==Tt&&J[1]!==Ht}return s!==e.styleKey};ur.clearStyleHints=function(r){var e=r._private;e.styleCxtKey=\"\",e.styleKeys={},e.styleKey=null,e.labelKey=null,e.labelStyleKey=null,e.sourceLabelKey=null,e.sourceLabelStyleKey=null,e.targetLabelKey=null,e.targetLabelStyleKey=null,e.nodeKey=null,e.hasPie=null,e.hasStripe=null};ur.applyParsedProperty=function(r,e){var t=this,a=e,n=r._private.style,i,s=t.types,o=t.properties[a.name].type,l=a.bypass,u=n[a.name],v=u&&u.bypass,f=r._private,c=\"mapping\",h=function(U){return U==null?null:U.pfValue!=null?U.pfValue:U.value},d=function(){var U=h(u),Q=h(a);t.checkTriggers(r,a.name,U,Q)};if(e.name===\"curve-style\"&&r.isEdge()&&(e.value!==\"bezier\"&&r.isLoop()||e.value===\"haystack\"&&(r.source().isParent()||r.target().isParent()))&&(a=e=this.parse(e.name,\"bezier\",l)),a.delete)return n[a.name]=void 0,d(),!0;if(a.deleteBypassed)return u?u.bypass?(u.bypassed=void 0,d(),!0):!1:(d(),!0);if(a.deleteBypass)return u?u.bypass?(n[a.name]=u.bypassed,d(),!0):!1:(d(),!0);var y=function(){Ve(\"Do not assign mappings to elements without corresponding data (i.e. ele `\"+r.id()+\"` has no mapping for property `\"+a.name+\"` with data field `\"+a.field+\"`); try a `[\"+a.field+\"]` selector to limit scope to elements with `\"+a.field+\"` defined\")};switch(a.mapped){case s.mapData:{for(var g=a.field.split(\".\"),p=f.data,m=0;m<g.length&&p;m++){var b=g[m];p=p[b]}if(p==null)return y(),!1;var w;if(ae(p)){var E=a.fieldMax-a.fieldMin;E===0?w=0:w=(p-a.fieldMin)/E}else return Ve(\"Do not use continuous mappers without specifying numeric data (i.e. `\"+a.field+\": \"+p+\"` for `\"+r.id()+\"` is non-numeric)\"),!1;if(w<0?w=0:w>1&&(w=1),o.color){var C=a.valueMin[0],x=a.valueMax[0],T=a.valueMin[1],k=a.valueMax[1],D=a.valueMin[2],B=a.valueMax[2],P=a.valueMin[3]==null?1:a.valueMin[3],A=a.valueMax[3]==null?1:a.valueMax[3],R=[Math.round(C+(x-C)*w),Math.round(T+(k-T)*w),Math.round(D+(B-D)*w),Math.round(P+(A-P)*w)];i={bypass:a.bypass,name:a.name,value:R,strValue:\"rgb(\"+R[0]+\", \"+R[1]+\", \"+R[2]+\")\"}}else if(o.number){var L=a.valueMin+(a.valueMax-a.valueMin)*w;i=this.parse(a.name,L,a.bypass,c)}else return!1;if(!i)return y(),!1;i.mapping=a,a=i;break}case s.data:{for(var I=a.field.split(\".\"),M=f.data,O=0;O<I.length&&M;O++){var V=I[O];M=M[V]}if(M!=null&&(i=this.parse(a.name,M,a.bypass,c)),!i)return y(),!1;i.mapping=a,a=i;break}case s.fn:{var G=a.value,N=a.fnValue!=null?a.fnValue:G(r);if(a.prevFnValue=N,N==null)return Ve(\"Custom function mappers may not return null (i.e. `\"+a.name+\"` for ele `\"+r.id()+\"` is null)\"),!1;if(i=this.parse(a.name,N,a.bypass,c),!i)return Ve(\"Custom function mappers may not return invalid values for the property type (i.e. `\"+a.name+\"` for ele `\"+r.id()+\"` is invalid)\"),!1;i.mapping=qr(a),a=i;break}case void 0:break;default:return!1}return l?(v?a.bypassed=u.bypassed:a.bypassed=u,n[a.name]=a):v?u.bypassed=a:n[a.name]=a,d(),!0};ur.cleanElements=function(r,e){for(var t=0;t<r.length;t++){var a=r[t];if(this.clearStyleHints(a),a.dirtyCompoundBoundsCache(),a.dirtyBoundingBoxCache(),!e)a._private.style={};else for(var n=a._private.style,i=Object.keys(n),s=0;s<i.length;s++){var o=i[s],l=n[o];l!=null&&(l.bypass?l.bypassed=null:n[o]=null)}}};ur.update=function(){var r=this._private.cy,e=r.mutableElements();e.updateStyle()};ur.updateTransitions=function(r,e){var t=this,a=r._private,n=r.pstyle(\"transition-property\").value,i=r.pstyle(\"transition-duration\").pfValue,s=r.pstyle(\"transition-delay\").pfValue;if(n.length>0&&i>0){for(var o={},l=!1,u=0;u<n.length;u++){var v=n[u],f=r.pstyle(v),c=e[v];if(c){var h=c.prev,d=h,y=c.next!=null?c.next:f,g=!1,p=void 0,m=1e-6;d&&(ae(d.pfValue)&&ae(y.pfValue)?(g=y.pfValue-d.pfValue,p=d.pfValue+m*g):ae(d.value)&&ae(y.value)?(g=y.value-d.value,p=d.value+m*g):_e(d.value)&&_e(y.value)&&(g=d.value[0]!==y.value[0]||d.value[1]!==y.value[1]||d.value[2]!==y.value[2],p=d.strValue),g&&(o[v]=y.strValue,this.applyBypass(r,v,p),l=!0))}}if(!l)return;a.transitioning=!0,new ta(function(b){s>0?r.delayAnimation(s).play().promise().then(b):b()}).then(function(){return r.animation({style:o,duration:i,easing:r.pstyle(\"transition-timing-function\").value,queue:!1}).play().promise()}).then(function(){t.removeBypasses(r,n),r.emitAndNotify(\"style\"),a.transitioning=!1})}else a.transitioning&&(this.removeBypasses(r,n),r.emitAndNotify(\"style\"),a.transitioning=!1)};ur.checkTrigger=function(r,e,t,a,n,i){var s=this.properties[e],o=n(s);r.removed()||o!=null&&o(t,a,r)&&i(s)};ur.checkZOrderTrigger=function(r,e,t,a){var n=this;this.checkTrigger(r,e,t,a,function(i){return i.triggersZOrder},function(){n._private.cy.notify(\"zorder\",r)})};ur.checkBoundsTrigger=function(r,e,t,a){this.checkTrigger(r,e,t,a,function(n){return n.triggersBounds},function(n){r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache()})};ur.checkConnectedEdgesBoundsTrigger=function(r,e,t,a){this.checkTrigger(r,e,t,a,function(n){return n.triggersBoundsOfConnectedEdges},function(n){r.connectedEdges().forEach(function(i){i.dirtyBoundingBoxCache()})})};ur.checkParallelEdgesBoundsTrigger=function(r,e,t,a){this.checkTrigger(r,e,t,a,function(n){return n.triggersBoundsOfParallelEdges},function(n){r.parallelEdges().forEach(function(i){i.dirtyBoundingBoxCache()})})};ur.checkTriggers=function(r,e,t,a){r.dirtyStyleCache(),this.checkZOrderTrigger(r,e,t,a),this.checkBoundsTrigger(r,e,t,a),this.checkConnectedEdgesBoundsTrigger(r,e,t,a),this.checkParallelEdgesBoundsTrigger(r,e,t,a)};var _a={};_a.applyBypass=function(r,e,t,a){var n=this,i=[],s=!0;if(e===\"*\"||e===\"**\"){if(t!==void 0)for(var o=0;o<n.properties.length;o++){var l=n.properties[o],u=l.name,v=this.parse(u,t,!0);v&&i.push(v)}}else if(ge(e)){var f=this.parse(e,t,!0);f&&i.push(f)}else if(Le(e)){var c=e;a=t;for(var h=Object.keys(c),d=0;d<h.length;d++){var y=h[d],g=c[y];if(g===void 0&&(g=c[Mn(y)]),g!==void 0){var p=this.parse(y,g,!0);p&&i.push(p)}}}else return!1;if(i.length===0)return!1;for(var m=!1,b=0;b<r.length;b++){for(var w=r[b],E={},C=void 0,x=0;x<i.length;x++){var T=i[x];if(a){var k=w.pstyle(T.name);C=E[T.name]={prev:k}}m=this.applyParsedProperty(w,qr(T))||m,a&&(C.next=w.pstyle(T.name))}m&&this.updateStyleHints(w),a&&this.updateTransitions(w,E,s)}return m};_a.overrideBypass=function(r,e,t){e=Zs(e);for(var a=0;a<r.length;a++){var n=r[a],i=n._private.style[e],s=this.properties[e].type,o=s.color,l=s.mutiple,u=i?i.pfValue!=null?i.pfValue:i.value:null;!i||!i.bypass?this.applyBypass(n,e,t):(i.value=t,i.pfValue!=null&&(i.pfValue=t),o?i.strValue=\"rgb(\"+t.join(\",\")+\")\":l?i.strValue=t.join(\" \"):i.strValue=\"\"+t,this.updateStyleHints(n)),this.checkTriggers(n,e,u,t)}};_a.removeAllBypasses=function(r,e){return this.removeBypasses(r,this.propertyNames,e)};_a.removeBypasses=function(r,e,t){for(var a=!0,n=0;n<r.length;n++){for(var i=r[n],s={},o=0;o<e.length;o++){var l=e[o],u=this.properties[l],v=i.pstyle(u.name);if(!(!v||!v.bypass)){var f=\"\",c=this.parse(l,f,!0),h=s[u.name]={prev:v};this.applyParsedProperty(i,c),h.next=i.pstyle(u.name)}}this.updateStyleHints(i),t&&this.updateTransitions(i,s,a)}};var fo={};fo.getEmSizeInPixels=function(){var r=this.containerCss(\"font-size\");return r!=null?parseFloat(r):1};fo.containerCss=function(r){var e=this._private.cy,t=e.container(),a=e.window();if(a&&t&&a.getComputedStyle)return a.getComputedStyle(t).getPropertyValue(r)};var _r={};_r.getRenderedStyle=function(r,e){return e?this.getStylePropertyValue(r,e,!0):this.getRawStyle(r,!0)};_r.getRawStyle=function(r,e){var t=this;if(r=r[0],r){for(var a={},n=0;n<t.properties.length;n++){var i=t.properties[n],s=t.getStylePropertyValue(r,i.name,e);s!=null&&(a[i.name]=s,a[Mn(i.name)]=s)}return a}};_r.getIndexedStyle=function(r,e,t,a){var n=r.pstyle(e)[t][a];return n??r.cy().style().getDefaultProperty(e)[t][0]};_r.getStylePropertyValue=function(r,e,t){var a=this;if(r=r[0],r){var n=a.properties[e];n.alias&&(n=n.pointsTo);var i=n.type,s=r.pstyle(n.name);if(s){var o=s.value,l=s.units,u=s.strValue;if(t&&i.number&&o!=null&&ae(o)){var v=r.cy().zoom(),f=function(g){return g*v},c=function(g,p){return f(g)+p},h=_e(o),d=h?l.every(function(y){return y!=null}):l!=null;return d?h?o.map(function(y,g){return c(y,l[g])}).join(\" \"):c(o,l):h?o.map(function(y){return ge(y)?y:\"\"+f(y)}).join(\" \"):\"\"+f(o)}else if(u!=null)return u}return null}};_r.getAnimationStartStyle=function(r,e){for(var t={},a=0;a<e.length;a++){var n=e[a],i=n.name,s=r.pstyle(i);s!==void 0&&(Le(s)?s=this.parse(i,s.strValue):s=this.parse(i,s)),s&&(t[i]=s)}return t};_r.getPropsList=function(r){var e=this,t=[],a=r,n=e.properties;if(a)for(var i=Object.keys(a),s=0;s<i.length;s++){var o=i[s],l=a[o],u=n[o]||n[Zs(o)],v=this.parse(u.name,l);v&&t.push(v)}return t};_r.getNonDefaultPropertiesHash=function(r,e,t){var a=t.slice(),n,i,s,o,l,u;for(l=0;l<e.length;l++)if(n=e[l],i=r.pstyle(n,!1),i!=null)if(i.pfValue!=null)a[0]=Ca(o,a[0]),a[1]=Ta(o,a[1]);else for(s=i.strValue,u=0;u<s.length;u++)o=s.charCodeAt(u),a[0]=Ca(o,a[0]),a[1]=Ta(o,a[1]);return a};_r.getPropertiesHash=_r.getNonDefaultPropertiesHash;var $n={};$n.appendFromJson=function(r){for(var e=this,t=0;t<r.length;t++){var a=r[t],n=a.selector,i=a.style||a.css,s=Object.keys(i);e.selector(n);for(var o=0;o<s.length;o++){var l=s[o],u=i[l];e.css(l,u)}}return e};$n.fromJson=function(r){var e=this;return e.resetToDefault(),e.appendFromJson(r),e};$n.json=function(){for(var r=[],e=this.defaultLength;e<this.length;e++){for(var t=this[e],a=t.selector,n=t.properties,i={},s=0;s<n.length;s++){var o=n[s];i[o.name]=o.strValue}r.push({selector:a?a.toString():\"core\",style:i})}return r};var co={};co.appendFromString=function(r){var e=this,t=this,a=\"\"+r,n,i,s;a=a.replace(/[/][*](\\s|.)+?[*][/]/g,\"\");function o(){a.length>n.length?a=a.substr(n.length):a=\"\"}function l(){i.length>s.length?i=i.substr(s.length):i=\"\"}for(;;){var u=a.match(/^\\s*$/);if(u)break;var v=a.match(/^\\s*((?:.|\\s)+?)\\s*\\{((?:.|\\s)+?)\\}/);if(!v){Ve(\"Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: \"+a);break}n=v[0];var f=v[1];if(f!==\"core\"){var c=new ft(f);if(c.invalid){Ve(\"Skipping parsing of block: Invalid selector found in string stylesheet: \"+f),o();continue}}var h=v[2],d=!1;i=h;for(var y=[];;){var g=i.match(/^\\s*$/);if(g)break;var p=i.match(/^\\s*(.+?)\\s*:\\s*(.+?)(?:\\s*;|\\s*$)/);if(!p){Ve(\"Skipping parsing of block: Invalid formatting of style property and value definitions found in:\"+h),d=!0;break}s=p[0];var m=p[1],b=p[2],w=e.properties[m];if(!w){Ve(\"Skipping property: Invalid property name in: \"+s),l();continue}var E=t.parse(m,b);if(!E){Ve(\"Skipping property: Invalid property definition in: \"+s),l();continue}y.push({name:m,val:b}),l()}if(d){o();break}t.selector(f);for(var C=0;C<y.length;C++){var x=y[C];t.css(x.name,x.val)}o()}return t};co.fromString=function(r){var e=this;return e.resetToDefault(),e.appendFromString(r),e};var Qe={};(function(){var r=tr,e=bc,t=xc,a=Ec,n=Cc,i=function(q){return\"^\"+q+\"\\\\s*\\\\(\\\\s*([\\\\w\\\\.]+)\\\\s*\\\\)$\"},s=function(q){var H=r+\"|\\\\w+|\"+e+\"|\"+t+\"|\"+a+\"|\"+n;return\"^\"+q+\"\\\\s*\\\\(([\\\\w\\\\.]+)\\\\s*\\\\,\\\\s*(\"+r+\")\\\\s*\\\\,\\\\s*(\"+r+\")\\\\s*,\\\\s*(\"+H+\")\\\\s*\\\\,\\\\s*(\"+H+\")\\\\)$\"},o=[`^url\\\\s*\\\\(\\\\s*['\"]?(.+?)['\"]?\\\\s*\\\\)$`,\"^(none)$\",\"^(.+)$\"];Qe.types={time:{number:!0,min:0,units:\"s|ms\",implicitUnits:\"ms\"},percent:{number:!0,min:0,max:100,units:\"%\",implicitUnits:\"%\"},percentages:{number:!0,min:0,max:100,units:\"%\",implicitUnits:\"%\",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},nonNegativeNumber:{number:!0,min:0,unitless:!0},position:{enums:[\"parent\",\"origin\"]},nodeSize:{number:!0,min:0,enums:[\"label\"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:[\"horizontal\",\"leftward\",\"rightward\",\"vertical\",\"upward\",\"downward\",\"auto\"]},axisDirectionExplicit:{enums:[\"leftward\",\"rightward\",\"upward\",\"downward\"]},axisDirectionPrimary:{enums:[\"horizontal\",\"vertical\"]},paddingRelativeTo:{enums:[\"width\",\"height\",\"average\",\"min\",\"max\"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:[\"auto\"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:[\"inner\",\"include-padding\"],multiple:!0},bgRepeat:{enums:[\"repeat\",\"repeat-x\",\"repeat-y\",\"no-repeat\"],multiple:!0},bgFit:{enums:[\"none\",\"contain\",\"cover\"],multiple:!0},bgCrossOrigin:{enums:[\"anonymous\",\"use-credentials\",\"null\"],multiple:!0},bgClip:{enums:[\"none\",\"node\"],multiple:!0},bgContainment:{enums:[\"inside\",\"over\"],multiple:!0},boxSelection:{enums:[\"contain\",\"overlap\",\"none\"]},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:[\"solid\",\"linear-gradient\",\"radial-gradient\"]},bool:{enums:[\"yes\",\"no\"]},bools:{enums:[\"yes\",\"no\"],multiple:!0},lineStyle:{enums:[\"solid\",\"dotted\",\"dashed\"]},lineCap:{enums:[\"butt\",\"round\",\"square\"]},linePosition:{enums:[\"center\",\"inside\",\"outside\"]},lineJoin:{enums:[\"round\",\"bevel\",\"miter\"]},borderStyle:{enums:[\"solid\",\"dotted\",\"dashed\",\"double\"]},curveStyle:{enums:[\"bezier\",\"unbundled-bezier\",\"haystack\",\"segments\",\"straight\",\"straight-triangle\",\"taxi\",\"round-segments\",\"round-taxi\"]},radiusType:{enums:[\"arc-radius\",\"influence-radius\"],multiple:!0},fontFamily:{regex:'^([\\\\w- \\\\\"]+(?:\\\\s*,\\\\s*[\\\\w- \\\\\"]+)*)$'},fontStyle:{enums:[\"italic\",\"normal\",\"oblique\"]},fontWeight:{enums:[\"normal\",\"bold\",\"bolder\",\"lighter\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"800\",\"900\",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:[\"none\",\"underline\",\"overline\",\"line-through\"]},textTransform:{enums:[\"none\",\"uppercase\",\"lowercase\"]},textWrap:{enums:[\"none\",\"wrap\",\"ellipsis\"]},textOverflowWrap:{enums:[\"whitespace\",\"anywhere\"]},textBackgroundShape:{enums:[\"rectangle\",\"roundrectangle\",\"round-rectangle\",\"circle\"]},nodeShape:{enums:[\"rectangle\",\"roundrectangle\",\"round-rectangle\",\"cutrectangle\",\"cut-rectangle\",\"bottomroundrectangle\",\"bottom-round-rectangle\",\"barrel\",\"ellipse\",\"triangle\",\"round-triangle\",\"square\",\"pentagon\",\"round-pentagon\",\"hexagon\",\"round-hexagon\",\"concavehexagon\",\"concave-hexagon\",\"heptagon\",\"round-heptagon\",\"octagon\",\"round-octagon\",\"tag\",\"round-tag\",\"star\",\"diamond\",\"round-diamond\",\"vee\",\"rhomboid\",\"right-rhomboid\",\"polygon\"]},overlayShape:{enums:[\"roundrectangle\",\"round-rectangle\",\"ellipse\"]},cornerRadius:{number:!0,min:0,units:\"px|em\",implicitUnits:\"px\",enums:[\"auto\"]},compoundIncludeLabels:{enums:[\"include\",\"exclude\"]},arrowShape:{enums:[\"tee\",\"triangle\",\"triangle-tee\",\"circle-triangle\",\"triangle-cross\",\"triangle-backcurve\",\"vee\",\"square\",\"circle\",\"diamond\",\"chevron\",\"none\"]},arrowFill:{enums:[\"filled\",\"hollow\"]},arrowWidth:{number:!0,units:\"%|px|em\",implicitUnits:\"px\",enums:[\"match-line\"]},display:{enums:[\"element\",\"none\"]},visibility:{enums:[\"hidden\",\"visible\"]},zCompoundDepth:{enums:[\"bottom\",\"orphan\",\"auto\",\"top\"]},zIndexCompare:{enums:[\"auto\",\"manual\"]},valign:{enums:[\"top\",\"center\",\"bottom\"]},halign:{enums:[\"left\",\"center\",\"right\"]},justification:{enums:[\"left\",\"center\",\"right\",\"auto\"]},text:{string:!0},data:{mapping:!0,regex:i(\"data\")},layoutData:{mapping:!0,regex:i(\"layoutData\")},scratch:{mapping:!0,regex:i(\"scratch\")},mapData:{mapping:!0,regex:s(\"mapData\")},mapLayoutData:{mapping:!0,regex:s(\"mapLayoutData\")},mapScratch:{mapping:!0,regex:s(\"mapScratch\")},fn:{mapping:!0,fn:!0},url:{regexes:o,singleRegexMatchValue:!0},urls:{regexes:o,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:\"deg|rad\",implicitUnits:\"rad\"},textRotation:{number:!0,units:\"deg|rad\",implicitUnits:\"rad\",enums:[\"none\",\"autorotate\"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:[\"intersection\",\"node-position\",\"endpoints\"]},edgeEndpoint:{number:!0,multiple:!0,units:\"%|px|em|deg|rad\",implicitUnits:\"px\",enums:[\"inside-to-node\",\"outside-to-node\",\"outside-to-node-or-label\",\"outside-to-line\",\"outside-to-line-or-label\"],singleEnum:!0,validate:function(q,H){switch(q.length){case 2:return H[0]!==\"deg\"&&H[0]!==\"rad\"&&H[1]!==\"deg\"&&H[1]!==\"rad\";case 1:return ge(q[0])||H[0]===\"deg\"||H[0]===\"rad\";default:return!1}}},easing:{regexes:[\"^(spring)\\\\s*\\\\(\\\\s*(\"+r+\")\\\\s*,\\\\s*(\"+r+\")\\\\s*\\\\)$\",\"^(cubic-bezier)\\\\s*\\\\(\\\\s*(\"+r+\")\\\\s*,\\\\s*(\"+r+\")\\\\s*,\\\\s*(\"+r+\")\\\\s*,\\\\s*(\"+r+\")\\\\s*\\\\)$\"],enums:[\"linear\",\"ease\",\"ease-in\",\"ease-out\",\"ease-in-out\",\"ease-in-sine\",\"ease-out-sine\",\"ease-in-out-sine\",\"ease-in-quad\",\"ease-out-quad\",\"ease-in-out-quad\",\"ease-in-cubic\",\"ease-out-cubic\",\"ease-in-out-cubic\",\"ease-in-quart\",\"ease-out-quart\",\"ease-in-out-quart\",\"ease-in-quint\",\"ease-out-quint\",\"ease-in-out-quint\",\"ease-in-expo\",\"ease-out-expo\",\"ease-in-out-expo\",\"ease-in-circ\",\"ease-out-circ\",\"ease-in-out-circ\"]},gradientDirection:{enums:[\"to-bottom\",\"to-top\",\"to-left\",\"to-right\",\"to-bottom-right\",\"to-bottom-left\",\"to-top-right\",\"to-top-left\",\"to-right-bottom\",\"to-left-bottom\",\"to-right-top\",\"to-left-top\"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(q){var H=q.length;return H===1||H===2||H===4}}};var l={zeroNonZero:function(q,H){return(q==null||H==null)&&q!==H||q==0&&H!=0?!0:q!=0&&H==0},any:function(q,H){return q!=H},emptyNonEmpty:function(q,H){var Y=ut(q),te=ut(H);return Y&&!te||!Y&&te}},u=Qe.types,v=[{name:\"label\",type:u.text,triggersBounds:l.any,triggersZOrder:l.emptyNonEmpty},{name:\"text-rotation\",type:u.textRotation,triggersBounds:l.any},{name:\"text-margin-x\",type:u.bidirectionalSize,triggersBounds:l.any},{name:\"text-margin-y\",type:u.bidirectionalSize,triggersBounds:l.any}],f=[{name:\"source-label\",type:u.text,triggersBounds:l.any},{name:\"source-text-rotation\",type:u.textRotation,triggersBounds:l.any},{name:\"source-text-margin-x\",type:u.bidirectionalSize,triggersBounds:l.any},{name:\"source-text-margin-y\",type:u.bidirectionalSize,triggersBounds:l.any},{name:\"source-text-offset\",type:u.size,triggersBounds:l.any}],c=[{name:\"target-label\",type:u.text,triggersBounds:l.any},{name:\"target-text-rotation\",type:u.textRotation,triggersBounds:l.any},{name:\"target-text-margin-x\",type:u.bidirectionalSize,triggersBounds:l.any},{name:\"target-text-margin-y\",type:u.bidirectionalSize,triggersBounds:l.any},{name:\"target-text-offset\",type:u.size,triggersBounds:l.any}],h=[{name:\"font-family\",type:u.fontFamily,triggersBounds:l.any},{name:\"font-style\",type:u.fontStyle,triggersBounds:l.any},{name:\"font-weight\",type:u.fontWeight,triggersBounds:l.any},{name:\"font-size\",type:u.size,triggersBounds:l.any},{name:\"text-transform\",type:u.textTransform,triggersBounds:l.any},{name:\"text-wrap\",type:u.textWrap,triggersBounds:l.any},{name:\"text-overflow-wrap\",type:u.textOverflowWrap,triggersBounds:l.any},{name:\"text-max-width\",type:u.size,triggersBounds:l.any},{name:\"text-outline-width\",type:u.size,triggersBounds:l.any},{name:\"line-height\",type:u.positiveNumber,triggersBounds:l.any}],d=[{name:\"text-valign\",type:u.valign,triggersBounds:l.any},{name:\"text-halign\",type:u.halign,triggersBounds:l.any},{name:\"color\",type:u.color},{name:\"text-outline-color\",type:u.color},{name:\"text-outline-opacity\",type:u.zeroOneNumber},{name:\"text-background-color\",type:u.color},{name:\"text-background-opacity\",type:u.zeroOneNumber},{name:\"text-background-padding\",type:u.size,triggersBounds:l.any},{name:\"text-border-opacity\",type:u.zeroOneNumber},{name:\"text-border-color\",type:u.color},{name:\"text-border-width\",type:u.size,triggersBounds:l.any},{name:\"text-border-style\",type:u.borderStyle,triggersBounds:l.any},{name:\"text-background-shape\",type:u.textBackgroundShape,triggersBounds:l.any},{name:\"text-justification\",type:u.justification},{name:\"box-select-labels\",type:u.bool,triggersBounds:l.any}],y=[{name:\"events\",type:u.bool,triggersZOrder:l.any},{name:\"text-events\",type:u.bool,triggersZOrder:l.any},{name:\"box-selection\",type:u.boxSelection,triggersZOrder:l.any}],g=[{name:\"display\",type:u.display,triggersZOrder:l.any,triggersBounds:l.any,triggersBoundsOfConnectedEdges:l.any,triggersBoundsOfParallelEdges:function(q,H,Y){return q===H?!1:Y.pstyle(\"curve-style\").value===\"bezier\"}},{name:\"visibility\",type:u.visibility,triggersZOrder:l.any},{name:\"opacity\",type:u.zeroOneNumber,triggersZOrder:l.zeroNonZero},{name:\"text-opacity\",type:u.zeroOneNumber},{name:\"min-zoomed-font-size\",type:u.size},{name:\"z-compound-depth\",type:u.zCompoundDepth,triggersZOrder:l.any},{name:\"z-index-compare\",type:u.zIndexCompare,triggersZOrder:l.any},{name:\"z-index\",type:u.number,triggersZOrder:l.any}],p=[{name:\"overlay-padding\",type:u.size,triggersBounds:l.any},{name:\"overlay-color\",type:u.color},{name:\"overlay-opacity\",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:\"overlay-shape\",type:u.overlayShape,triggersBounds:l.any},{name:\"overlay-corner-radius\",type:u.cornerRadius}],m=[{name:\"underlay-padding\",type:u.size,triggersBounds:l.any},{name:\"underlay-color\",type:u.color},{name:\"underlay-opacity\",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:\"underlay-shape\",type:u.overlayShape,triggersBounds:l.any},{name:\"underlay-corner-radius\",type:u.cornerRadius}],b=[{name:\"transition-property\",type:u.propList},{name:\"transition-duration\",type:u.time},{name:\"transition-delay\",type:u.time},{name:\"transition-timing-function\",type:u.easing}],w=function(q,H){return H.value===\"label\"?-q.poolIndex():H.pfValue},E=[{name:\"height\",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:\"width\",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:\"shape\",type:u.nodeShape,triggersBounds:l.any},{name:\"shape-polygon-points\",type:u.polygonPointList,triggersBounds:l.any},{name:\"corner-radius\",type:u.cornerRadius},{name:\"background-color\",type:u.color},{name:\"background-fill\",type:u.fill},{name:\"background-opacity\",type:u.zeroOneNumber},{name:\"background-blacken\",type:u.nOneOneNumber},{name:\"background-gradient-stop-colors\",type:u.colors},{name:\"background-gradient-stop-positions\",type:u.percentages},{name:\"background-gradient-direction\",type:u.gradientDirection},{name:\"padding\",type:u.sizeMaybePercent,triggersBounds:l.any},{name:\"padding-relative-to\",type:u.paddingRelativeTo,triggersBounds:l.any},{name:\"bounds-expansion\",type:u.boundsExpansion,triggersBounds:l.any}],C=[{name:\"border-color\",type:u.color},{name:\"border-opacity\",type:u.zeroOneNumber},{name:\"border-width\",type:u.size,triggersBounds:l.any},{name:\"border-style\",type:u.borderStyle},{name:\"border-cap\",type:u.lineCap},{name:\"border-join\",type:u.lineJoin},{name:\"border-dash-pattern\",type:u.numbers},{name:\"border-dash-offset\",type:u.number},{name:\"border-position\",type:u.linePosition}],x=[{name:\"outline-color\",type:u.color},{name:\"outline-opacity\",type:u.zeroOneNumber},{name:\"outline-width\",type:u.size,triggersBounds:l.any},{name:\"outline-style\",type:u.borderStyle},{name:\"outline-offset\",type:u.size,triggersBounds:l.any}],T=[{name:\"background-image\",type:u.urls},{name:\"background-image-crossorigin\",type:u.bgCrossOrigin},{name:\"background-image-opacity\",type:u.zeroOneNumbers},{name:\"background-image-containment\",type:u.bgContainment},{name:\"background-image-smoothing\",type:u.bools},{name:\"background-position-x\",type:u.bgPos},{name:\"background-position-y\",type:u.bgPos},{name:\"background-width-relative-to\",type:u.bgRelativeTo},{name:\"background-height-relative-to\",type:u.bgRelativeTo},{name:\"background-repeat\",type:u.bgRepeat},{name:\"background-fit\",type:u.bgFit},{name:\"background-clip\",type:u.bgClip},{name:\"background-width\",type:u.bgWH},{name:\"background-height\",type:u.bgWH},{name:\"background-offset-x\",type:u.bgPos},{name:\"background-offset-y\",type:u.bgPos}],k=[{name:\"position\",type:u.position,triggersBounds:l.any},{name:\"compound-sizing-wrt-labels\",type:u.compoundIncludeLabels,triggersBounds:l.any},{name:\"min-width\",type:u.size,triggersBounds:l.any},{name:\"min-width-bias-left\",type:u.sizeMaybePercent,triggersBounds:l.any},{name:\"min-width-bias-right\",type:u.sizeMaybePercent,triggersBounds:l.any},{name:\"min-height\",type:u.size,triggersBounds:l.any},{name:\"min-height-bias-top\",type:u.sizeMaybePercent,triggersBounds:l.any},{name:\"min-height-bias-bottom\",type:u.sizeMaybePercent,triggersBounds:l.any}],D=[{name:\"line-style\",type:u.lineStyle},{name:\"line-color\",type:u.color},{name:\"line-fill\",type:u.fill},{name:\"line-cap\",type:u.lineCap},{name:\"line-opacity\",type:u.zeroOneNumber},{name:\"line-dash-pattern\",type:u.numbers},{name:\"line-dash-offset\",type:u.number},{name:\"line-outline-width\",type:u.size},{name:\"line-outline-color\",type:u.color},{name:\"line-gradient-stop-colors\",type:u.colors},{name:\"line-gradient-stop-positions\",type:u.percentages},{name:\"curve-style\",type:u.curveStyle,triggersBounds:l.any,triggersBoundsOfParallelEdges:function(q,H){return q===H?!1:q===\"bezier\"||H===\"bezier\"}},{name:\"haystack-radius\",type:u.zeroOneNumber,triggersBounds:l.any},{name:\"source-endpoint\",type:u.edgeEndpoint,triggersBounds:l.any},{name:\"target-endpoint\",type:u.edgeEndpoint,triggersBounds:l.any},{name:\"control-point-step-size\",type:u.size,triggersBounds:l.any},{name:\"control-point-distances\",type:u.bidirectionalSizes,triggersBounds:l.any},{name:\"control-point-weights\",type:u.numbers,triggersBounds:l.any},{name:\"segment-distances\",type:u.bidirectionalSizes,triggersBounds:l.any},{name:\"segment-weights\",type:u.numbers,triggersBounds:l.any},{name:\"segment-radii\",type:u.numbers,triggersBounds:l.any},{name:\"radius-type\",type:u.radiusType,triggersBounds:l.any},{name:\"taxi-turn\",type:u.bidirectionalSizeMaybePercent,triggersBounds:l.any},{name:\"taxi-turn-min-distance\",type:u.size,triggersBounds:l.any},{name:\"taxi-direction\",type:u.axisDirection,triggersBounds:l.any},{name:\"taxi-radius\",type:u.number,triggersBounds:l.any},{name:\"edge-distances\",type:u.edgeDistances,triggersBounds:l.any},{name:\"arrow-scale\",type:u.positiveNumber,triggersBounds:l.any},{name:\"loop-direction\",type:u.angle,triggersBounds:l.any},{name:\"loop-sweep\",type:u.angle,triggersBounds:l.any},{name:\"source-distance-from-node\",type:u.size,triggersBounds:l.any},{name:\"target-distance-from-node\",type:u.size,triggersBounds:l.any}],B=[{name:\"ghost\",type:u.bool,triggersBounds:l.any},{name:\"ghost-offset-x\",type:u.bidirectionalSize,triggersBounds:l.any},{name:\"ghost-offset-y\",type:u.bidirectionalSize,triggersBounds:l.any},{name:\"ghost-opacity\",type:u.zeroOneNumber}],P=[{name:\"selection-box-color\",type:u.color},{name:\"selection-box-opacity\",type:u.zeroOneNumber},{name:\"selection-box-border-color\",type:u.color},{name:\"selection-box-border-width\",type:u.size},{name:\"active-bg-color\",type:u.color},{name:\"active-bg-opacity\",type:u.zeroOneNumber},{name:\"active-bg-size\",type:u.size},{name:\"outside-texture-bg-color\",type:u.color},{name:\"outside-texture-bg-opacity\",type:u.zeroOneNumber}],A=[];Qe.pieBackgroundN=16,A.push({name:\"pie-size\",type:u.sizeMaybePercent}),A.push({name:\"pie-hole\",type:u.sizeMaybePercent}),A.push({name:\"pie-start-angle\",type:u.angle});for(var R=1;R<=Qe.pieBackgroundN;R++)A.push({name:\"pie-\"+R+\"-background-color\",type:u.color}),A.push({name:\"pie-\"+R+\"-background-size\",type:u.percent}),A.push({name:\"pie-\"+R+\"-background-opacity\",type:u.zeroOneNumber});var L=[];Qe.stripeBackgroundN=16,L.push({name:\"stripe-size\",type:u.sizeMaybePercent}),L.push({name:\"stripe-direction\",type:u.axisDirectionPrimary});for(var I=1;I<=Qe.stripeBackgroundN;I++)L.push({name:\"stripe-\"+I+\"-background-color\",type:u.color}),L.push({name:\"stripe-\"+I+\"-background-size\",type:u.percent}),L.push({name:\"stripe-\"+I+\"-background-opacity\",type:u.zeroOneNumber});var M=[],O=Qe.arrowPrefixes=[\"source\",\"mid-source\",\"target\",\"mid-target\"];[{name:\"arrow-shape\",type:u.arrowShape,triggersBounds:l.any},{name:\"arrow-color\",type:u.color},{name:\"arrow-fill\",type:u.arrowFill},{name:\"arrow-width\",type:u.arrowWidth}].forEach(function(z){O.forEach(function(q){var H=q+\"-\"+z.name,Y=z.type,te=z.triggersBounds;M.push({name:H,type:Y,triggersBounds:te})})},{});var V=Qe.properties=[].concat(y,b,g,p,m,B,d,h,v,f,c,E,C,x,T,A,L,k,D,M,P),G=Qe.propertyGroups={behavior:y,transition:b,visibility:g,overlay:p,underlay:m,ghost:B,commonLabel:d,labelDimensions:h,mainLabel:v,sourceLabel:f,targetLabel:c,nodeBody:E,nodeBorder:C,nodeOutline:x,backgroundImage:T,pie:A,stripe:L,compound:k,edgeLine:D,edgeArrow:M,core:P},N=Qe.propertyGroupNames={},F=Qe.propertyGroupKeys=Object.keys(G);F.forEach(function(z){N[z]=G[z].map(function(q){return q.name}),G[z].forEach(function(q){return q.groupKey=z})});var U=Qe.aliases=[{name:\"content\",pointsTo:\"label\"},{name:\"control-point-distance\",pointsTo:\"control-point-distances\"},{name:\"control-point-weight\",pointsTo:\"control-point-weights\"},{name:\"segment-distance\",pointsTo:\"segment-distances\"},{name:\"segment-weight\",pointsTo:\"segment-weights\"},{name:\"segment-radius\",pointsTo:\"segment-radii\"},{name:\"edge-text-rotation\",pointsTo:\"text-rotation\"},{name:\"padding-left\",pointsTo:\"padding\"},{name:\"padding-right\",pointsTo:\"padding\"},{name:\"padding-top\",pointsTo:\"padding\"},{name:\"padding-bottom\",pointsTo:\"padding\"}];Qe.propertyNames=V.map(function(z){return z.name});for(var Q=0;Q<V.length;Q++){var K=V[Q];V[K.name]=K}for(var j=0;j<U.length;j++){var re=U[j],ne=V[re.pointsTo],J={name:re.name,alias:!0,pointsTo:ne};V.push(J),V[re.name]=J}})();Qe.getDefaultProperty=function(r){return this.getDefaultProperties()[r]};Qe.getDefaultProperties=function(){var r=this._private;if(r.defaultProperties!=null)return r.defaultProperties;for(var e=be({\"selection-box-color\":\"#ddd\",\"selection-box-opacity\":.65,\"selection-box-border-color\":\"#aaa\",\"selection-box-border-width\":1,\"active-bg-color\":\"black\",\"active-bg-opacity\":.15,\"active-bg-size\":30,\"outside-texture-bg-color\":\"#000\",\"outside-texture-bg-opacity\":.125,events:\"yes\",\"text-events\":\"no\",\"text-valign\":\"top\",\"text-halign\":\"center\",\"text-justification\":\"auto\",\"line-height\":1,color:\"#000\",\"box-selection\":\"contain\",\"text-outline-color\":\"#000\",\"text-outline-width\":0,\"text-outline-opacity\":1,\"text-opacity\":1,\"text-decoration\":\"none\",\"text-transform\":\"none\",\"text-wrap\":\"none\",\"text-overflow-wrap\":\"whitespace\",\"text-max-width\":9999,\"text-background-color\":\"#000\",\"text-background-opacity\":0,\"text-background-shape\":\"rectangle\",\"text-background-padding\":0,\"text-border-opacity\":0,\"text-border-width\":0,\"text-border-style\":\"solid\",\"text-border-color\":\"#000\",\"font-family\":\"Helvetica Neue, Helvetica, sans-serif\",\"font-style\":\"normal\",\"font-weight\":\"normal\",\"font-size\":16,\"min-zoomed-font-size\":0,\"text-rotation\":\"none\",\"source-text-rotation\":\"none\",\"target-text-rotation\":\"none\",visibility:\"visible\",display:\"element\",opacity:1,\"z-compound-depth\":\"auto\",\"z-index-compare\":\"auto\",\"z-index\":0,label:\"\",\"text-margin-x\":0,\"text-margin-y\":0,\"source-label\":\"\",\"source-text-offset\":0,\"source-text-margin-x\":0,\"source-text-margin-y\":0,\"target-label\":\"\",\"target-text-offset\":0,\"target-text-margin-x\":0,\"target-text-margin-y\":0,\"overlay-opacity\":0,\"overlay-color\":\"#000\",\"overlay-padding\":10,\"overlay-shape\":\"round-rectangle\",\"overlay-corner-radius\":\"auto\",\"underlay-opacity\":0,\"underlay-color\":\"#000\",\"underlay-padding\":10,\"underlay-shape\":\"round-rectangle\",\"underlay-corner-radius\":\"auto\",\"transition-property\":\"none\",\"transition-duration\":0,\"transition-delay\":0,\"transition-timing-function\":\"linear\",\"box-select-labels\":\"no\",\"background-blacken\":0,\"background-color\":\"#999\",\"background-fill\":\"solid\",\"background-opacity\":1,\"background-image\":\"none\",\"background-image-crossorigin\":\"anonymous\",\"background-image-opacity\":1,\"background-image-containment\":\"inside\",\"background-image-smoothing\":\"yes\",\"background-position-x\":\"50%\",\"background-position-y\":\"50%\",\"background-offset-x\":0,\"background-offset-y\":0,\"background-width-relative-to\":\"include-padding\",\"background-height-relative-to\":\"include-padding\",\"background-repeat\":\"no-repeat\",\"background-fit\":\"none\",\"background-clip\":\"node\",\"background-width\":\"auto\",\"background-height\":\"auto\",\"border-color\":\"#000\",\"border-opacity\":1,\"border-width\":0,\"border-style\":\"solid\",\"border-dash-pattern\":[4,2],\"border-dash-offset\":0,\"border-cap\":\"butt\",\"border-join\":\"miter\",\"border-position\":\"center\",\"outline-color\":\"#999\",\"outline-opacity\":1,\"outline-width\":0,\"outline-offset\":0,\"outline-style\":\"solid\",height:30,width:30,shape:\"ellipse\",\"shape-polygon-points\":\"-1, -1,   1, -1,   1, 1,   -1, 1\",\"corner-radius\":\"auto\",\"bounds-expansion\":0,\"background-gradient-direction\":\"to-bottom\",\"background-gradient-stop-colors\":\"#999\",\"background-gradient-stop-positions\":\"0%\",ghost:\"no\",\"ghost-offset-y\":0,\"ghost-offset-x\":0,\"ghost-opacity\":0,padding:0,\"padding-relative-to\":\"width\",position:\"origin\",\"compound-sizing-wrt-labels\":\"include\",\"min-width\":0,\"min-width-bias-left\":0,\"min-width-bias-right\":0,\"min-height\":0,\"min-height-bias-top\":0,\"min-height-bias-bottom\":0},{\"pie-size\":\"100%\",\"pie-hole\":0,\"pie-start-angle\":\"0deg\"},[{name:\"pie-{{i}}-background-color\",value:\"black\"},{name:\"pie-{{i}}-background-size\",value:\"0%\"},{name:\"pie-{{i}}-background-opacity\",value:1}].reduce(function(l,u){for(var v=1;v<=Qe.pieBackgroundN;v++){var f=u.name.replace(\"{{i}}\",v),c=u.value;l[f]=c}return l},{}),{\"stripe-size\":\"100%\",\"stripe-direction\":\"horizontal\"},[{name:\"stripe-{{i}}-background-color\",value:\"black\"},{name:\"stripe-{{i}}-background-size\",value:\"0%\"},{name:\"stripe-{{i}}-background-opacity\",value:1}].reduce(function(l,u){for(var v=1;v<=Qe.stripeBackgroundN;v++){var f=u.name.replace(\"{{i}}\",v),c=u.value;l[f]=c}return l},{}),{\"line-style\":\"solid\",\"line-color\":\"#999\",\"line-fill\":\"solid\",\"line-cap\":\"butt\",\"line-opacity\":1,\"line-outline-width\":0,\"line-outline-color\":\"#000\",\"line-gradient-stop-colors\":\"#999\",\"line-gradient-stop-positions\":\"0%\",\"control-point-step-size\":40,\"control-point-weights\":.5,\"segment-weights\":.5,\"segment-distances\":20,\"segment-radii\":15,\"radius-type\":\"arc-radius\",\"taxi-turn\":\"50%\",\"taxi-radius\":15,\"taxi-turn-min-distance\":10,\"taxi-direction\":\"auto\",\"edge-distances\":\"intersection\",\"curve-style\":\"haystack\",\"haystack-radius\":0,\"arrow-scale\":1,\"loop-direction\":\"-45deg\",\"loop-sweep\":\"-90deg\",\"source-distance-from-node\":0,\"target-distance-from-node\":0,\"source-endpoint\":\"outside-to-node\",\"target-endpoint\":\"outside-to-node\",\"line-dash-pattern\":[6,3],\"line-dash-offset\":0},[{name:\"arrow-shape\",value:\"none\"},{name:\"arrow-color\",value:\"#999\"},{name:\"arrow-fill\",value:\"filled\"},{name:\"arrow-width\",value:1}].reduce(function(l,u){return Qe.arrowPrefixes.forEach(function(v){var f=v+\"-\"+u.name,c=u.value;l[f]=c}),l},{})),t={},a=0;a<this.properties.length;a++){var n=this.properties[a];if(!n.pointsTo){var i=n.name,s=e[i],o=this.parse(i,s);t[i]=o}}return r.defaultProperties=t,r.defaultProperties};Qe.addDefaultStylesheet=function(){this.selector(\":parent\").css({shape:\"rectangle\",padding:10,\"background-color\":\"#eee\",\"border-color\":\"#ccc\",\"border-width\":1}).selector(\"edge\").css({width:3}).selector(\":loop\").css({\"curve-style\":\"bezier\"}).selector(\"edge:compound\").css({\"curve-style\":\"bezier\",\"source-endpoint\":\"outside-to-line\",\"target-endpoint\":\"outside-to-line\"}).selector(\":selected\").css({\"background-color\":\"#0169D9\",\"line-color\":\"#0169D9\",\"source-arrow-color\":\"#0169D9\",\"target-arrow-color\":\"#0169D9\",\"mid-source-arrow-color\":\"#0169D9\",\"mid-target-arrow-color\":\"#0169D9\"}).selector(\":parent:selected\").css({\"background-color\":\"#CCE1F9\",\"border-color\":\"#aec8e5\"}).selector(\":active\").css({\"overlay-color\":\"black\",\"overlay-padding\":10,\"overlay-opacity\":.25}),this.defaultLength=this.length};var Un={};Un.parse=function(r,e,t,a){var n=this;if(Ue(e))return n.parseImplWarn(r,e,t,a);var i=a===\"mapping\"||a===!0||a===!1||a==null?\"dontcare\":a,s=t?\"t\":\"f\",o=\"\"+e,l=cv(r,o,s,i),u=n.propCache=n.propCache||[],v;return(v=u[l])||(v=u[l]=n.parseImplWarn(r,e,t,a)),(t||a===\"mapping\")&&(v=qr(v),v&&(v.value=qr(v.value))),v};Un.parseImplWarn=function(r,e,t,a){var n=this.parseImpl(r,e,t,a);return!n&&e!=null&&Ve(\"The style property `\".concat(r,\": \").concat(e,\"` is invalid\")),n&&(n.name===\"width\"||n.name===\"height\")&&e===\"label\"&&Ve(\"The style value of `label` is deprecated for `\"+n.name+\"`\"),n};Un.parseImpl=function(r,e,t,a){var n=this;r=Zs(r);var i=n.properties[r],s=e,o=n.types;if(!i||e===void 0)return null;i.alias&&(i=i.pointsTo,r=i.name);var l=ge(e);l&&(e=e.trim());var u=i.type;if(!u)return null;if(t&&(e===\"\"||e===null))return{name:r,value:e,bypass:!0,deleteBypass:!0};if(Ue(e))return{name:r,value:e,strValue:\"fn\",mapped:o.fn,bypass:t};var v,f;if(!(!l||a||e.length<7||e[1]!==\"a\")){if(e.length>=7&&e[0]===\"d\"&&(v=new RegExp(o.data.regex).exec(e))){if(t)return!1;var c=o.data;return{name:r,value:v,strValue:\"\"+e,mapped:c,field:v[1],bypass:t}}else if(e.length>=10&&e[0]===\"m\"&&(f=new RegExp(o.mapData.regex).exec(e))){if(t||u.multiple)return!1;var h=o.mapData;if(!(u.color||u.number))return!1;var d=this.parse(r,f[4]);if(!d||d.mapped)return!1;var y=this.parse(r,f[5]);if(!y||y.mapped)return!1;if(d.pfValue===y.pfValue||d.strValue===y.strValue)return Ve(\"`\"+r+\": \"+e+\"` is not a valid mapper because the output range is zero; converting to `\"+r+\": \"+d.strValue+\"`\"),this.parse(r,d.strValue);if(u.color){var g=d.value,p=y.value,m=g[0]===p[0]&&g[1]===p[1]&&g[2]===p[2]&&(g[3]===p[3]||(g[3]==null||g[3]===1)&&(p[3]==null||p[3]===1));if(m)return!1}return{name:r,value:f,strValue:\"\"+e,mapped:h,field:f[1],fieldMin:parseFloat(f[2]),fieldMax:parseFloat(f[3]),valueMin:d.value,valueMax:y.value,bypass:t}}}if(u.multiple&&a!==\"multiple\"){var b;if(l?b=e.split(/\\s+/):_e(e)?b=e:b=[e],u.evenMultiple&&b.length%2!==0)return null;for(var w=[],E=[],C=[],x=\"\",T=!1,k=0;k<b.length;k++){var D=n.parse(r,b[k],t,\"multiple\");T=T||ge(D.value),w.push(D.value),C.push(D.pfValue!=null?D.pfValue:D.value),E.push(D.units),x+=(k>0?\" \":\"\")+D.strValue}return u.validate&&!u.validate(w,E)?null:u.singleEnum&&T?w.length===1&&ge(w[0])?{name:r,value:w[0],strValue:w[0],bypass:t}:null:{name:r,value:w,pfValue:C,strValue:x,bypass:t,units:E}}var B=function(){for(var J=0;J<u.enums.length;J++){var z=u.enums[J];if(z===e)return{name:r,value:e,strValue:\"\"+e,bypass:t}}return null};if(u.number){var P,A=\"px\";if(u.units&&(P=u.units),u.implicitUnits&&(A=u.implicitUnits),!u.unitless)if(l){var R=\"px|em\"+(u.allowPercent?\"|\\\\%\":\"\");P&&(R=P);var L=e.match(\"^(\"+tr+\")(\"+R+\")?$\");L&&(e=L[1],P=L[2]||A)}else(!P||u.implicitUnits)&&(P=A);if(e=parseFloat(e),isNaN(e)&&u.enums===void 0)return null;if(isNaN(e)&&u.enums!==void 0)return e=s,B();if(u.integer&&!cc(e)||u.min!==void 0&&(e<u.min||u.strictMin&&e===u.min)||u.max!==void 0&&(e>u.max||u.strictMax&&e===u.max))return null;var I={name:r,value:e,strValue:\"\"+e+(P||\"\"),units:P,bypass:t};return u.unitless||P!==\"px\"&&P!==\"em\"?I.pfValue=e:I.pfValue=P===\"px\"||!P?e:this.getEmSizeInPixels()*e,(P===\"ms\"||P===\"s\")&&(I.pfValue=P===\"ms\"?e:1e3*e),(P===\"deg\"||P===\"rad\")&&(I.pfValue=P===\"rad\"?e:Ed(e)),P===\"%\"&&(I.pfValue=e/100),I}else if(u.propList){var M=[],O=\"\"+e;if(O!==\"none\"){for(var V=O.split(/\\s*,\\s*|\\s+/),G=0;G<V.length;G++){var N=V[G].trim();n.properties[N]?M.push(N):Ve(\"`\"+N+\"` is not a valid property name\")}if(M.length===0)return null}return{name:r,value:M,strValue:M.length===0?\"none\":M.join(\" \"),bypass:t}}else if(u.color){var F=iv(e);return F?{name:r,value:F,pfValue:F,strValue:\"rgb(\"+F[0]+\",\"+F[1]+\",\"+F[2]+\")\",bypass:t}:null}else if(u.regex||u.regexes){if(u.enums){var U=B();if(U)return U}for(var Q=u.regexes?u.regexes:[u.regex],K=0;K<Q.length;K++){var j=new RegExp(Q[K]),re=j.exec(e);if(re)return{name:r,value:u.singleRegexMatchValue?re[1]:re,strValue:\"\"+e,bypass:t}}return null}else return u.string?{name:r,value:\"\"+e,strValue:\"\"+e,bypass:t}:u.enums?B():null};var or=function(e){if(!(this instanceof or))return new or(e);if(!Ys(e)){$e(\"A style must have a core reference\");return}this._private={cy:e,coreStyle:{}},this.length=0,this.resetToDefault()},pr=or.prototype;pr.instanceString=function(){return\"style\"};pr.clear=function(){for(var r=this._private,e=r.cy,t=e.elements(),a=0;a<this.length;a++)this[a]=void 0;return this.length=0,r.contextStyles={},r.propDiffs={},this.cleanElements(t,!0),t.forEach(function(n){var i=n[0]._private;i.styleDirty=!0,i.appliedInitStyle=!1}),this};pr.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this};pr.core=function(r){return this._private.coreStyle[r]||this.getDefaultProperty(r)};pr.selector=function(r){var e=r===\"core\"?null:new ft(r),t=this.length++;return this[t]={selector:e,properties:[],mappedProperties:[],index:t},this};pr.css=function(){var r=this,e=arguments;if(e.length===1)for(var t=e[0],a=0;a<r.properties.length;a++){var n=r.properties[a],i=t[n.name];i===void 0&&(i=t[Mn(n.name)]),i!==void 0&&this.cssRule(n.name,i)}else e.length===2&&this.cssRule(e[0],e[1]);return this};pr.style=pr.css;pr.cssRule=function(r,e){var t=this.parse(r,e);if(t){var a=this.length-1;this[a].properties.push(t),this[a].properties[t.name]=t,t.name.match(/pie-(\\d+)-background-size/)&&t.value&&(this._private.hasPie=!0),t.name.match(/stripe-(\\d+)-background-size/)&&t.value&&(this._private.hasStripe=!0),t.mapped&&this[a].mappedProperties.push(t);var n=!this[a].selector;n&&(this._private.coreStyle[t.name]=t)}return this};pr.append=function(r){return tv(r)?r.appendToStyle(this):_e(r)?this.appendFromJson(r):ge(r)&&this.appendFromString(r),this};or.fromJson=function(r,e){var t=new or(r);return t.fromJson(e),t};or.fromString=function(r,e){return new or(r).fromString(e)};[ur,_a,fo,_r,$n,co,Qe,Un].forEach(function(r){be(pr,r)});or.types=pr.types;or.properties=pr.properties;or.propertyGroups=pr.propertyGroups;or.propertyGroupNames=pr.propertyGroupNames;or.propertyGroupKeys=pr.propertyGroupKeys;var kp={style:function(e){if(e){var t=this.setStyle(e);t.update()}return this._private.style},setStyle:function(e){var t=this._private;return tv(e)?t.style=e.generateStyle(this):_e(e)?t.style=or.fromJson(this,e):ge(e)?t.style=or.fromString(this,e):t.style=or(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},Dp=\"single\",At={autolock:function(e){if(e!==void 0)this._private.autolock=!!e;else return this._private.autolock;return this},autoungrabify:function(e){if(e!==void 0)this._private.autoungrabify=!!e;else return this._private.autoungrabify;return this},autounselectify:function(e){if(e!==void 0)this._private.autounselectify=!!e;else return this._private.autounselectify;return this},selectionType:function(e){var t=this._private;if(t.selectionType==null&&(t.selectionType=Dp),e!==void 0)(e===\"additive\"||e===\"single\")&&(t.selectionType=e);else return t.selectionType;return this},panningEnabled:function(e){if(e!==void 0)this._private.panningEnabled=!!e;else return this._private.panningEnabled;return this},userPanningEnabled:function(e){if(e!==void 0)this._private.userPanningEnabled=!!e;else return this._private.userPanningEnabled;return this},zoomingEnabled:function(e){if(e!==void 0)this._private.zoomingEnabled=!!e;else return this._private.zoomingEnabled;return this},userZoomingEnabled:function(e){if(e!==void 0)this._private.userZoomingEnabled=!!e;else return this._private.userZoomingEnabled;return this},boxSelectionEnabled:function(e){if(e!==void 0)this._private.boxSelectionEnabled=!!e;else return this._private.boxSelectionEnabled;return this},pan:function(){var e=arguments,t=this._private.pan,a,n,i,s,o;switch(e.length){case 0:return t;case 1:if(ge(e[0]))return a=e[0],t[a];if(Le(e[0])){if(!this._private.panningEnabled)return this;i=e[0],s=i.x,o=i.y,ae(s)&&(t.x=s),ae(o)&&(t.y=o),this.emit(\"pan viewport\")}break;case 2:if(!this._private.panningEnabled)return this;a=e[0],n=e[1],(a===\"x\"||a===\"y\")&&ae(n)&&(t[a]=n),this.emit(\"pan viewport\");break}return this.notify(\"viewport\"),this},panBy:function(e,t){var a=arguments,n=this._private.pan,i,s,o,l,u;if(!this._private.panningEnabled)return this;switch(a.length){case 1:Le(e)&&(o=a[0],l=o.x,u=o.y,ae(l)&&(n.x+=l),ae(u)&&(n.y+=u),this.emit(\"pan viewport\"));break;case 2:i=e,s=t,(i===\"x\"||i===\"y\")&&ae(s)&&(n[i]+=s),this.emit(\"pan viewport\");break}return this.notify(\"viewport\"),this},gc:function(){this.notify(\"gc\")},fit:function(e,t){var a=this.getFitViewport(e,t);if(a){var n=this._private;n.zoom=a.zoom,n.pan=a.pan,this.emit(\"pan zoom viewport\"),this.notify(\"viewport\")}return this},getFitViewport:function(e,t){if(ae(e)&&t===void 0&&(t=e,e=void 0),!(!this._private.panningEnabled||!this._private.zoomingEnabled)){var a;if(ge(e)){var n=e;e=this.$(n)}else if(gc(e)){var i=e;a={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},a.w=a.x2-a.x1,a.h=a.y2-a.y1}else Dr(e)||(e=this.mutableElements());if(!(Dr(e)&&e.empty())){a=a||e.boundingBox();var s=this.width(),o=this.height(),l;if(t=ae(t)?t:0,!isNaN(s)&&!isNaN(o)&&s>0&&o>0&&!isNaN(a.w)&&!isNaN(a.h)&&a.w>0&&a.h>0){l=Math.min((s-2*t)/a.w,(o-2*t)/a.h),l=l>this._private.maxZoom?this._private.maxZoom:l,l=l<this._private.minZoom?this._private.minZoom:l;var u={x:(s-l*(a.x1+a.x2))/2,y:(o-l*(a.y1+a.y2))/2};return{zoom:l,pan:u}}}}},zoomRange:function(e,t){var a=this._private;if(t==null){var n=e;e=n.min,t=n.max}return ae(e)&&ae(t)&&e<=t?(a.minZoom=e,a.maxZoom=t):ae(e)&&t===void 0&&e<=a.maxZoom?a.minZoom=e:ae(t)&&e===void 0&&t>=a.minZoom&&(a.maxZoom=t),this},minZoom:function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t=this._private,a=t.pan,n=t.zoom,i,s,o=!1;if(t.zoomingEnabled||(o=!0),ae(e)?s=e:Le(e)&&(s=e.level,e.position!=null?i=On(e.position,n,a):e.renderedPosition!=null&&(i=e.renderedPosition),i!=null&&!t.panningEnabled&&(o=!0)),s=s>t.maxZoom?t.maxZoom:s,s=s<t.minZoom?t.minZoom:s,o||!ae(s)||s===n||i!=null&&(!ae(i.x)||!ae(i.y)))return null;if(i!=null){var l=a,u=n,v=s,f={x:-v/u*(i.x-l.x)+i.x,y:-v/u*(i.y-l.y)+i.y};return{zoomed:!0,panned:!0,zoom:v,pan:f}}else return{zoomed:!0,panned:!1,zoom:s,pan:a}},zoom:function(e){if(e===void 0)return this._private.zoom;var t=this.getZoomedViewport(e),a=this._private;return t==null||!t.zoomed?this:(a.zoom=t.zoom,t.panned&&(a.pan.x=t.pan.x,a.pan.y=t.pan.y),this.emit(\"zoom\"+(t.panned?\" pan\":\"\")+\" viewport\"),this.notify(\"viewport\"),this)},viewport:function(e){var t=this._private,a=!0,n=!0,i=[],s=!1,o=!1;if(!e)return this;if(ae(e.zoom)||(a=!1),Le(e.pan)||(n=!1),!a&&!n)return this;if(a){var l=e.zoom;l<t.minZoom||l>t.maxZoom||!t.zoomingEnabled?s=!0:(t.zoom=l,i.push(\"zoom\"))}if(n&&(!s||!e.cancelOnFailedZoom)&&t.panningEnabled){var u=e.pan;ae(u.x)&&(t.pan.x=u.x,o=!1),ae(u.y)&&(t.pan.y=u.y,o=!1),o||i.push(\"pan\")}return i.length>0&&(i.push(\"viewport\"),this.emit(i.join(\" \")),this.notify(\"viewport\")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit(\"pan viewport\"),this.notify(\"viewport\")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(ge(e)){var a=e;e=this.mutableElements().filter(a)}else Dr(e)||(e=this.mutableElements());if(e.length!==0){var n=e.boundingBox(),i=this.width(),s=this.height();t=t===void 0?this._private.zoom:t;var o={x:(i-t*(n.x1+n.x2))/2,y:(s-t*(n.y1+n.y2))/2};return o}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e=this._private,t=e.container,a=this;return e.sizeCache=e.sizeCache||(t?(function(){var n=a.window().getComputedStyle(t),i=function(o){return parseFloat(n.getPropertyValue(o))};return{width:t.clientWidth-i(\"padding-left\")-i(\"padding-right\"),height:t.clientHeight-i(\"padding-top\")-i(\"padding-bottom\")}})():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,a=this.renderedExtent(),n={x1:(a.x1-e.x)/t,x2:(a.x2-e.x)/t,y1:(a.y1-e.y)/t,y2:(a.y2-e.y)/t};return n.w=n.x2-n.x1,n.h=n.y2-n.y1,n},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this}};At.centre=At.center;At.autolockNodes=At.autolock;At.autoungrabifyNodes=At.autoungrabify;var Aa={data:Fe.data({field:\"data\",bindingEvent:\"data\",allowBinding:!0,allowSetting:!0,settingEvent:\"data\",settingTriggersEvent:!0,triggerFnName:\"trigger\",allowGetting:!0,updateStyle:!0}),removeData:Fe.removeData({field:\"data\",event:\"data\",triggerFnName:\"trigger\",triggerEvent:!0,updateStyle:!0}),scratch:Fe.data({field:\"scratch\",bindingEvent:\"scratch\",allowBinding:!0,allowSetting:!0,settingEvent:\"scratch\",settingTriggersEvent:!0,triggerFnName:\"trigger\",allowGetting:!0,updateStyle:!0}),removeScratch:Fe.removeData({field:\"scratch\",event:\"scratch\",triggerFnName:\"trigger\",triggerEvent:!0,updateStyle:!0})};Aa.attr=Aa.data;Aa.removeAttr=Aa.removeData;var Ra=function(e){var t=this;e=be({},e);var a=e.container;a&&!bn(a)&&bn(a[0])&&(a=a[0]);var n=a?a._cyreg:null;n=n||{},n&&n.cy&&(n.cy.destroy(),n={});var i=n.readies=n.readies||[];a&&(a._cyreg=n),n.cy=t;var s=rr!==void 0&&a!==void 0&&!e.headless,o=e;o.layout=be({name:s?\"grid\":\"null\"},o.layout),o.renderer=be({name:s?\"canvas\":\"null\"},o.renderer);var l=function(d,y,g){return y!==void 0?y:g!==void 0?g:d},u=this._private={container:a,ready:!1,options:o,elements:new fr(this),listeners:[],aniEles:new fr(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:l(!0,o.zoomingEnabled),userZoomingEnabled:l(!0,o.userZoomingEnabled),panningEnabled:l(!0,o.panningEnabled),userPanningEnabled:l(!0,o.userPanningEnabled),boxSelectionEnabled:l(!0,o.boxSelectionEnabled),autolock:l(!1,o.autolock,o.autolockNodes),autoungrabify:l(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:l(!1,o.autounselectify),styleEnabled:o.styleEnabled===void 0?s:o.styleEnabled,zoom:ae(o.zoom)?o.zoom:1,pan:{x:Le(o.pan)&&ae(o.pan.x)?o.pan.x:0,y:Le(o.pan)&&ae(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:l(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});var v=function(d,y){var g=d.some(pc);if(g)return ta.all(d).then(y);y(d)};u.styleEnabled&&t.setStyle([]);var f=be({},o,o.renderer);t.initRenderer(f);var c=function(d,y,g){t.notifications(!1);var p=t.mutableElements();p.length>0&&p.remove(),d!=null&&(Le(d)||_e(d))&&t.add(d),t.one(\"layoutready\",function(b){t.notifications(!0),t.emit(b),t.one(\"load\",y),t.emitAndNotify(\"load\")}).one(\"layoutstop\",function(){t.one(\"done\",g),t.emit(\"done\")});var m=be({},t._private.options.layout);m.eles=t.elements(),t.layout(m).run()};v([o.style,o.elements],function(h){var d=h[0],y=h[1];u.styleEnabled&&t.style().append(d),c(y,function(){t.startAnimationLoop(),u.ready=!0,Ue(o.ready)&&t.on(\"ready\",o.ready);for(var g=0;g<i.length;g++){var p=i[g];t.on(\"ready\",p)}n&&(n.readies=[]),t.emit(\"ready\")},o.done)})},kn=Ra.prototype;be(kn,{instanceString:function(){return\"core\"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit(\"ready\",[],e):this.on(\"ready\",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit(\"destroy\"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},window:function(){var e=this._private.container;if(e==null)return rr;var t=this._private.container.ownerDocument;return t===void 0||t==null?rr:t.defaultView||rr},mount:function(e){if(e!=null){var t=this,a=t._private,n=a.options;return!bn(e)&&bn(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),a.container=e,a.styleEnabled=!0,t.invalidateSize(),t.initRenderer(be({},n,n.renderer,{name:n.renderer.name===\"null\"?\"canvas\":n.renderer.name})),t.startAnimationLoop(),t.style(n.style),t.emit(\"mount\"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:\"null\"}),e.emit(\"unmount\"),e},options:function(){return qr(this._private.options)},json:function(e){var t=this,a=t._private,n=t.mutableElements(),i=function(w){return t.getElementById(w.id())};if(Le(e)){if(t.startBatch(),e.elements){var s={},o=function(w,E){for(var C=[],x=[],T=0;T<w.length;T++){var k=w[T];if(!k.data.id){Ve(\"cy.json() cannot handle elements without an ID attribute\");continue}var D=\"\"+k.data.id,B=t.getElementById(D);s[D]=!0,B.length!==0?x.push({ele:B,json:k}):(E&&(k.group=E),C.push(k))}t.add(C);for(var P=0;P<x.length;P++){var A=x[P],R=A.ele,L=A.json;R.json(L)}};if(_e(e.elements))o(e.elements);else for(var l=[\"nodes\",\"edges\"],u=0;u<l.length;u++){var v=l[u],f=e.elements[v];_e(f)&&o(f,v)}var c=t.collection();n.filter(function(b){return!s[b.id()]}).forEach(function(b){b.isParent()?c.merge(b):b.remove()}),c.forEach(function(b){return b.children().move({parent:null})}),c.forEach(function(b){return i(b).remove()})}e.style&&t.style(e.style),e.zoom!=null&&e.zoom!==a.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x!==a.pan.x||e.pan.y!==a.pan.y)&&t.pan(e.pan),e.data&&t.data(e.data);for(var h=[\"minZoom\",\"maxZoom\",\"zoomingEnabled\",\"userZoomingEnabled\",\"panningEnabled\",\"userPanningEnabled\",\"boxSelectionEnabled\",\"autolock\",\"autoungrabify\",\"autounselectify\",\"multiClickDebounceTime\"],d=0;d<h.length;d++){var y=h[d];e[y]!=null&&t[y](e[y])}return t.endBatch(),this}else{var g=!!e,p={};g?p.elements=this.elements().map(function(b){return b.json()}):(p.elements={},n.forEach(function(b){var w=b.group();p.elements[w]||(p.elements[w]=[]),p.elements[w].push(b.json())})),this._private.styleEnabled&&(p.style=t.style().json()),p.data=qr(t.data());var m=a.options;return p.zoomingEnabled=a.zoomingEnabled,p.userZoomingEnabled=a.userZoomingEnabled,p.zoom=a.zoom,p.minZoom=a.minZoom,p.maxZoom=a.maxZoom,p.panningEnabled=a.panningEnabled,p.userPanningEnabled=a.userPanningEnabled,p.pan=qr(a.pan),p.boxSelectionEnabled=a.boxSelectionEnabled,p.renderer=qr(m.renderer),p.hideEdgesOnViewport=m.hideEdgesOnViewport,p.textureOnViewport=m.textureOnViewport,p.wheelSensitivity=m.wheelSensitivity,p.motionBlur=m.motionBlur,p.multiClickDebounceTime=m.multiClickDebounceTime,p}}});kn.$id=kn.getElementById;[pp,xp,tf,zs,dn,Cp,Fs,hn,kp,At,Aa].forEach(function(r){be(kn,r)});var Bp={fit:!0,directed:!1,direction:\"downward\",padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}},Pp={maximal:!1,acyclic:!1},Ft=function(e){return e.scratch(\"breadthfirst\")},Tl=function(e,t){return e.scratch(\"breadthfirst\",t)};function af(r){this.options=be({},Bp,Pp,r)}af.prototype.run=function(){var r=this.options,e=r.cy,t=r.eles,a=t.nodes().filter(function(ye){return ye.isChildless()}),n=t,i=r.directed,s=r.acyclic||r.maximal||r.maximalAdjustments>0,o=!!r.boundingBox,l=wr(o?r.boundingBox:structuredClone(e.extent())),u;if(Dr(r.roots))u=r.roots;else if(_e(r.roots)){for(var v=[],f=0;f<r.roots.length;f++){var c=r.roots[f],h=e.getElementById(c);v.push(h)}u=e.collection(v)}else if(ge(r.roots))u=e.$(r.roots);else if(i)u=a.roots();else{var d=t.components();u=e.collection();for(var y=function(){var ie=d[g],de=ie.maxDegree(!1),he=ie.filter(function(Ee){return Ee.degree(!1)===de});u=u.add(he)},g=0;g<d.length;g++)y()}var p=[],m={},b=function(ie,de){p[de]==null&&(p[de]=[]);var he=p[de].length;p[de].push(ie),Tl(ie,{index:he,depth:de})},w=function(ie,de){var he=Ft(ie),Ee=he.depth,pe=he.index;p[Ee][pe]=null,ie.isChildless()&&b(ie,de)};n.bfs({roots:u,directed:r.directed,visit:function(ie,de,he,Ee,pe){var Se=ie[0],Re=Se.id();Se.isChildless()&&b(Se,pe),m[Re]=!0}});for(var E=[],C=0;C<a.length;C++){var x=a[C];m[x.id()]||E.push(x)}var T=function(ie){for(var de=p[ie],he=0;he<de.length;he++){var Ee=de[he];if(Ee==null){de.splice(he,1),he--;continue}Tl(Ee,{depth:ie,index:he})}},k=function(ie,de){for(var he=Ft(ie),Ee=ie.incomers().filter(function(xe){return xe.isNode()&&t.has(xe)}),pe=-1,Se=ie.id(),Re=0;Re<Ee.length;Re++){var Oe=Ee[Re],Ne=Ft(Oe);pe=Math.max(pe,Ne.depth)}if(he.depth<=pe){if(!r.acyclic&&de[Se])return null;var ze=pe+1;return w(ie,ze),de[Se]=ze,!0}return!1};if(i&&s){var D=[],B={},P=function(ie){return D.push(ie)},A=function(){return D.shift()};for(a.forEach(function(ye){return D.push(ye)});D.length>0;){var R=A(),L=k(R,B);if(L)R.outgoers().filter(function(ye){return ye.isNode()&&t.has(ye)}).forEach(P);else if(L===null){Ve(\"Detected double maximal shift for node `\"+R.id()+\"`.  Bailing maximal adjustment due to cycle.  Use `options.maximal: true` only on DAGs.\");break}}}var I=0;if(r.avoidOverlap)for(var M=0;M<a.length;M++){var O=a[M],V=O.layoutDimensions(r),G=V.w,N=V.h;I=Math.max(I,G,N)}var F={},U=function(ie){if(F[ie.id()])return F[ie.id()];for(var de=Ft(ie).depth,he=ie.neighborhood(),Ee=0,pe=0,Se=0;Se<he.length;Se++){var Re=he[Se];if(!(Re.isEdge()||Re.isParent()||!a.has(Re))){var Oe=Ft(Re);if(Oe!=null){var Ne=Oe.index,ze=Oe.depth;if(!(Ne==null||ze==null)){var xe=p[ze].length;ze<de&&(Ee+=Ne/xe,pe++)}}}}return pe=Math.max(1,pe),Ee=Ee/pe,pe===0&&(Ee=0),F[ie.id()]=Ee,Ee},Q=function(ie,de){var he=U(ie),Ee=U(de),pe=he-Ee;return pe===0?nv(ie.id(),de.id()):pe};r.depthSort!==void 0&&(Q=r.depthSort);for(var K=p.length,j=0;j<K;j++)p[j].sort(Q),T(j);for(var re=[],ne=0;ne<E.length;ne++)re.push(E[ne]);var J=function(){for(var ie=0;ie<K;ie++)T(ie)};re.length&&(p.unshift(re),K=p.length,J());for(var z=0,q=0;q<K;q++)z=Math.max(p[q].length,z);var H={x:l.x1+l.w/2,y:l.y1+l.h/2},Y=a.reduce(function(ye,ie){return(function(de){return{w:ye.w===-1?de.w:(ye.w+de.w)/2,h:ye.h===-1?de.h:(ye.h+de.h)/2}})(ie.boundingBox({includeLabels:r.nodeDimensionsIncludeLabels}))},{w:-1,h:-1}),te=Math.max(K===1?0:o?(l.h-r.padding*2-Y.h)/(K-1):(l.h-r.padding*2-Y.h)/(K+1),I),ce=p.reduce(function(ye,ie){return Math.max(ye,ie.length)},0),Ae=function(ie){var de=Ft(ie),he=de.depth,Ee=de.index;if(r.circle){var pe=Math.min(l.w/2/K,l.h/2/K);pe=Math.max(pe,I);var Se=pe*he+pe-(K>0&&p[0].length<=3?pe/2:0),Re=2*Math.PI/p[he].length*Ee;return he===0&&p[0].length===1&&(Se=1),{x:H.x+Se*Math.cos(Re),y:H.y+Se*Math.sin(Re)}}else{var Oe=p[he].length,Ne=Math.max(Oe===1?0:o?(l.w-r.padding*2-Y.w)/((r.grid?ce:Oe)-1):(l.w-r.padding*2-Y.w)/((r.grid?ce:Oe)+1),I),ze={x:H.x+(Ee+1-(Oe+1)/2)*Ne,y:H.y+(he+1-(K+1)/2)*te};return ze}},Ce={downward:0,leftward:90,upward:180,rightward:-90};Object.keys(Ce).indexOf(r.direction)===-1&&$e(\"Invalid direction '\".concat(r.direction,\"' specified for breadthfirst layout. Valid values are: \").concat(Object.keys(Ce).join(\", \")));var we=function(ie){return $c(Ae(ie),l,Ce[r.direction])};return t.nodes().layoutPositions(this,r,we),this};var Ap={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function nf(r){this.options=be({},Ap,r)}nf.prototype.run=function(){var r=this.options,e=r,t=r.cy,a=e.eles,n=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,i=a.nodes().not(\":parent\");e.sort&&(i=i.sort(e.sort));for(var s=wr(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),o={x:s.x1+s.w/2,y:s.y1+s.h/2},l=e.sweep===void 0?2*Math.PI-2*Math.PI/i.length:e.sweep,u=l/Math.max(1,i.length-1),v,f=0,c=0;c<i.length;c++){var h=i[c],d=h.layoutDimensions(e),y=d.w,g=d.h;f=Math.max(f,y,g)}if(ae(e.radius)?v=e.radius:i.length<=1?v=0:v=Math.min(s.h,s.w)/2-f,i.length>1&&e.avoidOverlap){f*=1.75;var p=Math.cos(u)-Math.cos(0),m=Math.sin(u)-Math.sin(0),b=Math.sqrt(f*f/(p*p+m*m));v=Math.max(b,v)}var w=function(C,x){var T=e.startAngle+x*u*(n?1:-1),k=v*Math.cos(T),D=v*Math.sin(T),B={x:o.x+k,y:o.y+D};return B};return a.nodes().layoutPositions(this,e,w),this};var Rp={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function sf(r){this.options=be({},Rp,r)}sf.prototype.run=function(){for(var r=this.options,e=r,t=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=r.cy,n=e.eles,i=n.nodes().not(\":parent\"),s=wr(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:a.width(),h:a.height()}),o={x:s.x1+s.w/2,y:s.y1+s.h/2},l=[],u=0,v=0;v<i.length;v++){var f=i[v],c=void 0;c=e.concentric(f),l.push({value:c,node:f}),f._private.scratch.concentric=c}i.updateStyle();for(var h=0;h<i.length;h++){var d=i[h],y=d.layoutDimensions(e);u=Math.max(u,y.w,y.h)}l.sort(function(te,ce){return ce.value-te.value});for(var g=e.levelWidth(i),p=[[]],m=p[0],b=0;b<l.length;b++){var w=l[b];if(m.length>0){var E=Math.abs(m[0].value-w.value);E>=g&&(m=[],p.push(m))}m.push(w)}var C=u+e.minNodeSpacing;if(!e.avoidOverlap){var x=p.length>0&&p[0].length>1,T=Math.min(s.w,s.h)/2-C,k=T/(p.length+x?1:0);C=Math.min(C,k)}for(var D=0,B=0;B<p.length;B++){var P=p[B],A=e.sweep===void 0?2*Math.PI-2*Math.PI/P.length:e.sweep,R=P.dTheta=A/Math.max(1,P.length-1);if(P.length>1&&e.avoidOverlap){var L=Math.cos(R)-Math.cos(0),I=Math.sin(R)-Math.sin(0),M=Math.sqrt(C*C/(L*L+I*I));D=Math.max(M,D)}P.r=D,D+=C}if(e.equidistant){for(var O=0,V=0,G=0;G<p.length;G++){var N=p[G],F=N.r-V;O=Math.max(O,F)}V=0;for(var U=0;U<p.length;U++){var Q=p[U];U===0&&(V=Q.r),Q.r=V,V+=O}}for(var K={},j=0;j<p.length;j++)for(var re=p[j],ne=re.dTheta,J=re.r,z=0;z<re.length;z++){var q=re[z],H=e.startAngle+(t?1:-1)*ne*z,Y={x:o.x+J*Math.cos(H),y:o.y+J*Math.sin(H)};K[q.node.id()]=Y}return n.nodes().layoutPositions(this,e,function(te){var ce=te.id();return K[ce]}),this};var bs,Mp={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function Kn(r){this.options=be({},Mp,r),this.options.layout=this;var e=this.options.eles.nodes(),t=this.options.eles.edges(),a=t.filter(function(n){var i=n.source().data(\"id\"),s=n.target().data(\"id\"),o=e.some(function(u){return u.data(\"id\")===i}),l=e.some(function(u){return u.data(\"id\")===s});return!o||!l});this.options.eles=this.options.eles.not(a)}Kn.prototype.run=function(){var r=this.options,e=r.cy,t=this;t.stopped=!1,(r.animate===!0||r.animate===!1)&&t.emit({type:\"layoutstart\",layout:t}),r.debug===!0?bs=!0:bs=!1;var a=Lp(e,t,r);bs&&Op(a),r.randomize&&Np(a);var n=Yr(),i=function(){zp(a,e,r),r.fit===!0&&e.fit(r.padding)},s=function(c){return!(t.stopped||c>=r.numIter||(Fp(a,r),a.temperature=a.temperature*r.coolingFactor,a.temperature<r.minTemp))},o=function(){if(r.animate===!0||r.animate===!1)i(),t.one(\"layoutstop\",r.stop),t.emit({type:\"layoutstop\",layout:t});else{var c=r.eles.nodes(),h=uf(a,r,c);c.layoutPositions(t,r,h)}},l=0,u=!0;if(r.animate===!0){var v=function(){for(var c=0;u&&c<r.refresh;)u=s(l),l++,c++;if(!u)kl(a,r),o();else{var h=Yr();h-n>=r.animationThreshold&&i(),wn(v)}};v()}else{for(;u;)u=s(l),l++;kl(a,r),o()}return this};Kn.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit(\"layoutstop\"),this};Kn.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var Lp=function(e,t,a){for(var n=a.eles.edges(),i=a.eles.nodes(),s=wr(a.boundingBox?a.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:n.size(),temperature:a.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},l=a.eles.components(),u={},v=0;v<l.length;v++)for(var f=l[v],c=0;c<f.length;c++){var h=f[c];u[h.id()]=v}for(var v=0;v<o.nodeSize;v++){var d=i[v],y=d.layoutDimensions(a),g={};g.isLocked=d.locked(),g.id=d.data(\"id\"),g.parentId=d.data(\"parent\"),g.cmptId=u[d.id()],g.children=[],g.positionX=d.position(\"x\"),g.positionY=d.position(\"y\"),g.offsetX=0,g.offsetY=0,g.height=y.w,g.width=y.h,g.maxX=g.positionX+g.width/2,g.minX=g.positionX-g.width/2,g.maxY=g.positionY+g.height/2,g.minY=g.positionY-g.height/2,g.padLeft=parseFloat(d.style(\"padding\")),g.padRight=parseFloat(d.style(\"padding\")),g.padTop=parseFloat(d.style(\"padding\")),g.padBottom=parseFloat(d.style(\"padding\")),g.nodeRepulsion=Ue(a.nodeRepulsion)?a.nodeRepulsion(d):a.nodeRepulsion,o.layoutNodes.push(g),o.idToIndex[g.id]=v}for(var p=[],m=0,b=-1,w=[],v=0;v<o.nodeSize;v++){var d=o.layoutNodes[v],E=d.parentId;E!=null?o.layoutNodes[o.idToIndex[E]].children.push(d.id):(p[++b]=d.id,w.push(d.id))}for(o.graphSet.push(w);m<=b;){var C=p[m++],x=o.idToIndex[C],h=o.layoutNodes[x],T=h.children;if(T.length>0){o.graphSet.push(T);for(var v=0;v<T.length;v++)p[++b]=T[v]}}for(var v=0;v<o.graphSet.length;v++)for(var k=o.graphSet[v],c=0;c<k.length;c++){var D=o.idToIndex[k[c]];o.indexToGraph[D]=v}for(var v=0;v<o.edgeSize;v++){var B=n[v],P={};P.id=B.data(\"id\"),P.sourceId=B.data(\"source\"),P.targetId=B.data(\"target\");var A=Ue(a.idealEdgeLength)?a.idealEdgeLength(B):a.idealEdgeLength,R=Ue(a.edgeElasticity)?a.edgeElasticity(B):a.edgeElasticity,L=o.idToIndex[P.sourceId],I=o.idToIndex[P.targetId],M=o.indexToGraph[L],O=o.indexToGraph[I];if(M!=O){for(var V=Ip(P.sourceId,P.targetId,o),G=o.graphSet[V],N=0,g=o.layoutNodes[L];G.indexOf(g.id)===-1;)g=o.layoutNodes[o.idToIndex[g.parentId]],N++;for(g=o.layoutNodes[I];G.indexOf(g.id)===-1;)g=o.layoutNodes[o.idToIndex[g.parentId]],N++;A*=N*a.nestingFactor}P.idealLength=A,P.elasticity=R,o.layoutEdges.push(P)}return o},Ip=function(e,t,a){var n=of(e,t,0,a);return 2>n.count?0:n.graph},of=function(e,t,a,n){var i=n.graphSet[a];if(-1<i.indexOf(e)&&-1<i.indexOf(t))return{count:2,graph:a};for(var s=0,o=0;o<i.length;o++){var l=i[o],u=n.idToIndex[l],v=n.layoutNodes[u].children;if(v.length!==0){var f=n.indexToGraph[n.idToIndex[v[0]]],c=of(e,t,f,n);if(c.count!==0)if(c.count===1){if(s++,s===2)break}else return c}}return{count:s,graph:a}},Op,Np=function(e,t){for(var a=e.clientWidth,n=e.clientHeight,i=0;i<e.nodeSize;i++){var s=e.layoutNodes[i];s.children.length===0&&!s.isLocked&&(s.positionX=Math.random()*a,s.positionY=Math.random()*n)}},uf=function(e,t,a){var n=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(a.forEach(function(s){var o=e.layoutNodes[e.idToIndex[s.data(\"id\")]];i.x1=Math.min(i.x1,o.positionX),i.x2=Math.max(i.x2,o.positionX),i.y1=Math.min(i.y1,o.positionY),i.y2=Math.max(i.y2,o.positionY)}),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(s,o){var l=e.layoutNodes[e.idToIndex[s.data(\"id\")]];if(t.boundingBox){var u=i.w===0?.5:(l.positionX-i.x1)/i.w,v=i.h===0?.5:(l.positionY-i.y1)/i.h;return{x:n.x1+u*n.w,y:n.y1+v*n.h}}else return{x:l.positionX,y:l.positionY}}},zp=function(e,t,a){var n=a.layout,i=a.eles.nodes(),s=uf(e,a,i);i.positions(s),e.ready!==!0&&(e.ready=!0,n.one(\"layoutready\",a.ready),n.emit({type:\"layoutready\",layout:this}))},Fp=function(e,t,a){Vp(e,t),Gp(e),Hp(e,t),Wp(e),$p(e)},Vp=function(e,t){for(var a=0;a<e.graphSet.length;a++)for(var n=e.graphSet[a],i=n.length,s=0;s<i;s++)for(var o=e.layoutNodes[e.idToIndex[n[s]]],l=s+1;l<i;l++){var u=e.layoutNodes[e.idToIndex[n[l]]];qp(o,u,e,t)}},Sl=function(e){return-1+2*e*Math.random()},qp=function(e,t,a,n){var i=e.cmptId,s=t.cmptId;if(!(i!==s&&!a.isCompound)){var o=t.positionX-e.positionX,l=t.positionY-e.positionY,u=1;o===0&&l===0&&(o=Sl(u),l=Sl(u));var v=_p(e,t,o,l);if(v>0)var f=n.nodeOverlap*v,c=Math.sqrt(o*o+l*l),h=f*o/c,d=f*l/c;else var y=Dn(e,o,l),g=Dn(t,-1*o,-1*l),p=g.x-y.x,m=g.y-y.y,b=p*p+m*m,c=Math.sqrt(b),f=(e.nodeRepulsion+t.nodeRepulsion)/b,h=f*p/c,d=f*m/c;e.isLocked||(e.offsetX-=h,e.offsetY-=d),t.isLocked||(t.offsetX+=h,t.offsetY+=d)}},_p=function(e,t,a,n){if(a>0)var i=e.maxX-t.minX;else var i=t.maxX-e.minX;if(n>0)var s=e.maxY-t.minY;else var s=t.maxY-e.minY;return i>=0&&s>=0?Math.sqrt(i*i+s*s):0},Dn=function(e,t,a){var n=e.positionX,i=e.positionY,s=e.height||1,o=e.width||1,l=a/t,u=s/o,v={};return t===0&&0<a||t===0&&0>a?(v.x=n,v.y=i+s/2,v):0<t&&-1*u<=l&&l<=u?(v.x=n+o/2,v.y=i+o*a/2/t,v):0>t&&-1*u<=l&&l<=u?(v.x=n-o/2,v.y=i-o*a/2/t,v):0<a&&(l<=-1*u||l>=u)?(v.x=n+s*t/2/a,v.y=i+s/2,v):(0>a&&(l<=-1*u||l>=u)&&(v.x=n-s*t/2/a,v.y=i-s/2),v)},Gp=function(e,t){for(var a=0;a<e.edgeSize;a++){var n=e.layoutEdges[a],i=e.idToIndex[n.sourceId],s=e.layoutNodes[i],o=e.idToIndex[n.targetId],l=e.layoutNodes[o],u=l.positionX-s.positionX,v=l.positionY-s.positionY;if(!(u===0&&v===0)){var f=Dn(s,u,v),c=Dn(l,-1*u,-1*v),h=c.x-f.x,d=c.y-f.y,y=Math.sqrt(h*h+d*d),g=Math.pow(n.idealLength-y,2)/n.elasticity;if(y!==0)var p=g*h/y,m=g*d/y;else var p=0,m=0;s.isLocked||(s.offsetX+=p,s.offsetY+=m),l.isLocked||(l.offsetX-=p,l.offsetY-=m)}}},Hp=function(e,t){if(t.gravity!==0)for(var a=1,n=0;n<e.graphSet.length;n++){var i=e.graphSet[n],s=i.length;if(n===0)var o=e.clientHeight/2,l=e.clientWidth/2;else var u=e.layoutNodes[e.idToIndex[i[0]]],v=e.layoutNodes[e.idToIndex[u.parentId]],o=v.positionX,l=v.positionY;for(var f=0;f<s;f++){var c=e.layoutNodes[e.idToIndex[i[f]]];if(!c.isLocked){var h=o-c.positionX,d=l-c.positionY,y=Math.sqrt(h*h+d*d);if(y>a){var g=t.gravity*h/y,p=t.gravity*d/y;c.offsetX+=g,c.offsetY+=p}}}}},Wp=function(e,t){var a=[],n=0,i=-1;for(a.push.apply(a,e.graphSet[0]),i+=e.graphSet[0].length;n<=i;){var s=a[n++],o=e.idToIndex[s],l=e.layoutNodes[o],u=l.children;if(0<u.length&&!l.isLocked){for(var v=l.offsetX,f=l.offsetY,c=0;c<u.length;c++){var h=e.layoutNodes[e.idToIndex[u[c]]];h.offsetX+=v,h.offsetY+=f,a[++i]=u[c]}l.offsetX=0,l.offsetY=0}}},$p=function(e,t){for(var a=0;a<e.nodeSize;a++){var n=e.layoutNodes[a];0<n.children.length&&(n.maxX=void 0,n.minX=void 0,n.maxY=void 0,n.minY=void 0)}for(var a=0;a<e.nodeSize;a++){var n=e.layoutNodes[a];if(!(0<n.children.length||n.isLocked)){var i=Up(n.offsetX,n.offsetY,e.temperature);n.positionX+=i.x,n.positionY+=i.y,n.offsetX=0,n.offsetY=0,n.minX=n.positionX-n.width,n.maxX=n.positionX+n.width,n.minY=n.positionY-n.height,n.maxY=n.positionY+n.height,lf(n,e)}}for(var a=0;a<e.nodeSize;a++){var n=e.layoutNodes[a];0<n.children.length&&!n.isLocked&&(n.positionX=(n.maxX+n.minX)/2,n.positionY=(n.maxY+n.minY)/2,n.width=n.maxX-n.minX,n.height=n.maxY-n.minY)}},Up=function(e,t,a){var n=Math.sqrt(e*e+t*t);if(n>a)var i={x:a*e/n,y:a*t/n};else var i={x:e,y:t};return i},lf=function(e,t){var a=e.parentId;if(a!=null){var n=t.layoutNodes[t.idToIndex[a]],i=!1;if((n.maxX==null||e.maxX+n.padRight>n.maxX)&&(n.maxX=e.maxX+n.padRight,i=!0),(n.minX==null||e.minX-n.padLeft<n.minX)&&(n.minX=e.minX-n.padLeft,i=!0),(n.maxY==null||e.maxY+n.padBottom>n.maxY)&&(n.maxY=e.maxY+n.padBottom,i=!0),(n.minY==null||e.minY-n.padTop<n.minY)&&(n.minY=e.minY-n.padTop,i=!0),i)return lf(n,t)}},kl=function(e,t){for(var a=e.layoutNodes,n=[],i=0;i<a.length;i++){var s=a[i],o=s.cmptId,l=n[o]=n[o]||[];l.push(s)}for(var u=0,i=0;i<n.length;i++){var v=n[i];if(v){v.x1=1/0,v.x2=-1/0,v.y1=1/0,v.y2=-1/0;for(var f=0;f<v.length;f++){var c=v[f];v.x1=Math.min(v.x1,c.positionX-c.width/2),v.x2=Math.max(v.x2,c.positionX+c.width/2),v.y1=Math.min(v.y1,c.positionY-c.height/2),v.y2=Math.max(v.y2,c.positionY+c.height/2)}v.w=v.x2-v.x1,v.h=v.y2-v.y1,u+=v.w*v.h}}n.sort(function(m,b){return b.w*b.h-m.w*m.h});for(var h=0,d=0,y=0,g=0,p=Math.sqrt(u)*e.clientWidth/e.clientHeight,i=0;i<n.length;i++){var v=n[i];if(v){for(var f=0;f<v.length;f++){var c=v[f];c.isLocked||(c.positionX+=h-v.x1,c.positionY+=d-v.y1)}h+=v.w+t.componentSpacing,y+=v.w+t.componentSpacing,g=Math.max(g,v.h),y>p&&(d+=g+t.componentSpacing,h=0,y=0,g=0)}}},Kp={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function vf(r){this.options=be({},Kp,r)}vf.prototype.run=function(){var r=this.options,e=r,t=r.cy,a=e.eles,n=a.nodes().not(\":parent\");e.sort&&(n=n.sort(e.sort));var i=wr(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()});if(i.h===0||i.w===0)a.nodes().layoutPositions(this,e,function(U){return{x:i.x1,y:i.y1}});else{var s=n.size(),o=Math.sqrt(s*i.h/i.w),l=Math.round(o),u=Math.round(i.w/i.h*o),v=function(Q){if(Q==null)return Math.min(l,u);var K=Math.min(l,u);K==l?l=Q:u=Q},f=function(Q){if(Q==null)return Math.max(l,u);var K=Math.max(l,u);K==l?l=Q:u=Q},c=e.rows,h=e.cols!=null?e.cols:e.columns;if(c!=null&&h!=null)l=c,u=h;else if(c!=null&&h==null)l=c,u=Math.ceil(s/l);else if(c==null&&h!=null)u=h,l=Math.ceil(s/u);else if(u*l>s){var d=v(),y=f();(d-1)*y>=s?v(d-1):(y-1)*d>=s&&f(y-1)}else for(;u*l<s;){var g=v(),p=f();(p+1)*g>=s?f(p+1):v(g+1)}var m=i.w/u,b=i.h/l;if(e.condense&&(m=0,b=0),e.avoidOverlap)for(var w=0;w<n.length;w++){var E=n[w],C=E._private.position;(C.x==null||C.y==null)&&(C.x=0,C.y=0);var x=E.layoutDimensions(e),T=e.avoidOverlapPadding,k=x.w+T,D=x.h+T;m=Math.max(m,k),b=Math.max(b,D)}for(var B={},P=function(Q,K){return!!B[\"c-\"+Q+\"-\"+K]},A=function(Q,K){B[\"c-\"+Q+\"-\"+K]=!0},R=0,L=0,I=function(){L++,L>=u&&(L=0,R++)},M={},O=0;O<n.length;O++){var V=n[O],G=e.position(V);if(G&&(G.row!==void 0||G.col!==void 0)){var N={row:G.row,col:G.col};if(N.col===void 0)for(N.col=0;P(N.row,N.col);)N.col++;else if(N.row===void 0)for(N.row=0;P(N.row,N.col);)N.row++;M[V.id()]=N,A(N.row,N.col)}}var F=function(Q,K){var j,re;if(Q.locked()||Q.isParent())return!1;var ne=M[Q.id()];if(ne)j=ne.col*m+m/2+i.x1,re=ne.row*b+b/2+i.y1;else{for(;P(R,L);)I();j=L*m+m/2+i.x1,re=R*b+b/2+i.y1,A(R,L),I()}return{x:j,y:re}};n.layoutPositions(this,e,F)}return this};var Xp={ready:function(){},stop:function(){}};function ho(r){this.options=be({},Xp,r)}ho.prototype.run=function(){var r=this.options,e=r.eles,t=this;return r.cy,t.emit(\"layoutstart\"),e.nodes().positions(function(){return{x:0,y:0}}),t.one(\"layoutready\",r.ready),t.emit(\"layoutready\"),t.one(\"layoutstop\",r.stop),t.emit(\"layoutstop\"),this};ho.prototype.stop=function(){return this};var Yp={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,spacingFactor:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function ff(r){this.options=be({},Yp,r)}ff.prototype.run=function(){var r=this.options,e=r.eles,t=e.nodes(),a=Ue(r.positions);function n(i){if(r.positions==null)return yd(i.position());if(a)return r.positions(i);var s=r.positions[i._private.data.id];return s??null}return t.layoutPositions(this,r,function(i,s){var o=n(i);return i.locked()||o==null?!1:o}),this};var Zp={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function cf(r){this.options=be({},Zp,r)}cf.prototype.run=function(){var r=this.options,e=r.cy,t=r.eles,a=wr(r.boundingBox?r.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),n=function(s,o){return{x:a.x1+Math.round(Math.random()*a.w),y:a.y1+Math.round(Math.random()*a.h)}};return t.nodes().layoutPositions(this,r,n),this};var Qp=[{name:\"breadthfirst\",impl:af},{name:\"circle\",impl:nf},{name:\"concentric\",impl:sf},{name:\"cose\",impl:Kn},{name:\"grid\",impl:vf},{name:\"null\",impl:ho},{name:\"preset\",impl:ff},{name:\"random\",impl:cf}];function df(r){this.options=r,this.notifications=0}var Dl=function(){},Bl=function(){throw new Error(\"A headless instance can not render images\")};df.prototype={recalculateRenderedStyle:Dl,notify:function(){this.notifications++},init:Dl,isHeadless:function(){return!0},png:Bl,jpg:Bl};var go={};go.arrowShapeWidth=.3;go.registerArrowShapes=function(){var r=this.arrowShapes={},e=this,t=function(u,v,f,c,h,d,y){var g=h.x-f/2-y,p=h.x+f/2+y,m=h.y-f/2-y,b=h.y+f/2+y,w=g<=u&&u<=p&&m<=v&&v<=b;return w},a=function(u,v,f,c,h){var d=u*Math.cos(c)-v*Math.sin(c),y=u*Math.sin(c)+v*Math.cos(c),g=d*f,p=y*f,m=g+h.x,b=p+h.y;return{x:m,y:b}},n=function(u,v,f,c){for(var h=[],d=0;d<u.length;d+=2){var y=u[d],g=u[d+1];h.push(a(y,g,v,f,c))}return h},i=function(u){for(var v=[],f=0;f<u.length;f++){var c=u[f];v.push(c.x,c.y)}return v},s=function(u){return u.pstyle(\"width\").pfValue*u.pstyle(\"arrow-scale\").pfValue*2},o=function(u,v){ge(v)&&(v=r[v]),r[u]=be({name:u,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(c,h,d,y,g,p){var m=i(n(this.points,d+2*p,y,g)),b=Sr(c,h,m);return b},roughCollide:t,draw:function(c,h,d,y){var g=n(this.points,h,d,y);e.arrowShapeImpl(\"polygon\")(c,g)},spacing:function(c){return 0},gap:s},v)};o(\"none\",{collide:xn,roughCollide:xn,draw:js,spacing:Go,gap:Go}),o(\"triangle\",{points:[-.15,-.3,0,0,.15,-.3]}),o(\"arrow\",\"triangle\"),o(\"triangle-backcurve\",{points:r.triangle.points,controlPoint:[0,-.15],roughCollide:t,draw:function(u,v,f,c,h){var d=n(this.points,v,f,c),y=this.controlPoint,g=a(y[0],y[1],v,f,c);e.arrowShapeImpl(this.name)(u,d,g)},gap:function(u){return s(u)*.8}}),o(\"triangle-tee\",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(u,v,f,c,h,d,y){var g=i(n(this.points,f+2*y,c,h)),p=i(n(this.pointsTee,f+2*y,c,h)),m=Sr(u,v,g)||Sr(u,v,p);return m},draw:function(u,v,f,c,h){var d=n(this.points,v,f,c),y=n(this.pointsTee,v,f,c);e.arrowShapeImpl(this.name)(u,d,y)}}),o(\"circle-triangle\",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(u,v,f,c,h,d,y){var g=h,p=Math.pow(g.x-u,2)+Math.pow(g.y-v,2)<=Math.pow((f+2*y)*this.radius,2),m=i(n(this.points,f+2*y,c,h));return Sr(u,v,m)||p},draw:function(u,v,f,c,h){var d=n(this.pointsTr,v,f,c);e.arrowShapeImpl(this.name)(u,d,c.x,c.y,this.radius*v)},spacing:function(u){return e.getArrowWidth(u.pstyle(\"width\").pfValue,u.pstyle(\"arrow-scale\").value)*this.radius}}),o(\"triangle-cross\",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(u,v){var f=this.baseCrossLinePts.slice(),c=v/u,h=3,d=5;return f[h]=f[h]-c,f[d]=f[d]-c,f},collide:function(u,v,f,c,h,d,y){var g=i(n(this.points,f+2*y,c,h)),p=i(n(this.crossLinePts(f,d),f+2*y,c,h)),m=Sr(u,v,g)||Sr(u,v,p);return m},draw:function(u,v,f,c,h){var d=n(this.points,v,f,c),y=n(this.crossLinePts(v,h),v,f,c);e.arrowShapeImpl(this.name)(u,d,y)}}),o(\"vee\",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(u){return s(u)*.525}}),o(\"circle\",{radius:.15,collide:function(u,v,f,c,h,d,y){var g=h,p=Math.pow(g.x-u,2)+Math.pow(g.y-v,2)<=Math.pow((f+2*y)*this.radius,2);return p},draw:function(u,v,f,c,h){e.arrowShapeImpl(this.name)(u,c.x,c.y,this.radius*v)},spacing:function(u){return e.getArrowWidth(u.pstyle(\"width\").pfValue,u.pstyle(\"arrow-scale\").value)*this.radius}}),o(\"tee\",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(u){return 1},gap:function(u){return 1}}),o(\"square\",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),o(\"diamond\",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(u){return u.pstyle(\"width\").pfValue*u.pstyle(\"arrow-scale\").value}}),o(\"chevron\",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(u){return .95*u.pstyle(\"width\").pfValue*u.pstyle(\"arrow-scale\").value}})};var Mt={};Mt.projectIntoViewport=function(r,e){var t=this.cy,a=this.findContainerClientCoords(),n=a[0],i=a[1],s=a[4],o=t.pan(),l=t.zoom(),u=((r-n)/s-o.x)/l,v=((e-i)/s-o.y)/l;return[u,v]};Mt.findContainerClientCoords=function(){if(this.containerBB)return this.containerBB;var r=this.container,e=r.getBoundingClientRect(),t=this.cy.window().getComputedStyle(r),a=function(p){return parseFloat(t.getPropertyValue(p))},n={left:a(\"padding-left\"),right:a(\"padding-right\"),top:a(\"padding-top\"),bottom:a(\"padding-bottom\")},i={left:a(\"border-left-width\"),right:a(\"border-right-width\"),top:a(\"border-top-width\"),bottom:a(\"border-bottom-width\")},s=r.clientWidth,o=r.clientHeight,l=n.left+n.right,u=n.top+n.bottom,v=i.left+i.right,f=e.width/(s+v),c=s-l,h=o-u,d=e.left+n.left+i.left,y=e.top+n.top+i.top;return this.containerBB=[d,y,c,h,f]};Mt.invalidateContainerClientCoordsCache=function(){this.containerBB=null};Mt.findNearestElement=function(r,e,t,a){return this.findNearestElements(r,e,t,a)[0]};Mt.findNearestElements=function(r,e,t,a){var n=this,i=this,s=i.getCachedZSortedEles(),o=[],l=i.cy.zoom(),u=i.cy.hasCompoundNodes(),v=(a?24:8)/l,f=(a?8:2)/l,c=(a?8:2)/l,h=1/0,d,y;t&&(s=s.interactive);function g(x,T){if(x.isNode()){if(y)return;y=x,o.push(x)}if(x.isEdge()&&(T==null||T<h))if(d){if(d.pstyle(\"z-compound-depth\").value===x.pstyle(\"z-compound-depth\").value&&d.pstyle(\"z-compound-depth\").value===x.pstyle(\"z-compound-depth\").value){for(var k=0;k<o.length;k++)if(o[k].isEdge()){o[k]=x,d=x,h=T??h;break}}}else o.push(x),d=x,h=T??h}function p(x){var T=x.outerWidth()+2*f,k=x.outerHeight()+2*f,D=T/2,B=k/2,P=x.position(),A=x.pstyle(\"corner-radius\").value===\"auto\"?\"auto\":x.pstyle(\"corner-radius\").pfValue,R=x._private.rscratch;if(P.x-D<=r&&r<=P.x+D&&P.y-B<=e&&e<=P.y+B){var L=i.nodeShapes[n.getNodeShape(x)];if(L.checkPoint(r,e,0,T,k,P.x,P.y,A,R))return g(x,0),!0}}function m(x){var T=x._private,k=T.rscratch,D=x.pstyle(\"width\").pfValue,B=x.pstyle(\"arrow-scale\").value,P=D/2+v,A=P*P,R=P*2,O=T.source,V=T.target,L;if(k.edgeType===\"segments\"||k.edgeType===\"straight\"||k.edgeType===\"haystack\"){for(var I=k.allpts,M=0;M+3<I.length;M+=2)if(Rd(r,e,I[M],I[M+1],I[M+2],I[M+3],R)&&A>(L=Nd(r,e,I[M],I[M+1],I[M+2],I[M+3])))return g(x,L),!0}else if(k.edgeType===\"bezier\"||k.edgeType===\"multibezier\"||k.edgeType===\"self\"||k.edgeType===\"compound\"){for(var I=k.allpts,M=0;M+5<k.allpts.length;M+=4)if(Md(r,e,I[M],I[M+1],I[M+2],I[M+3],I[M+4],I[M+5],R)&&A>(L=Od(r,e,I[M],I[M+1],I[M+2],I[M+3],I[M+4],I[M+5])))return g(x,L),!0}for(var O=O||T.source,V=V||T.target,G=n.getArrowWidth(D,B),N=[{name:\"source\",x:k.arrowStartX,y:k.arrowStartY,angle:k.srcArrowAngle},{name:\"target\",x:k.arrowEndX,y:k.arrowEndY,angle:k.tgtArrowAngle},{name:\"mid-source\",x:k.midX,y:k.midY,angle:k.midsrcArrowAngle},{name:\"mid-target\",x:k.midX,y:k.midY,angle:k.midtgtArrowAngle}],M=0;M<N.length;M++){var F=N[M],U=i.arrowShapes[x.pstyle(F.name+\"-arrow-shape\").value],Q=x.pstyle(\"width\").pfValue;if(U.roughCollide(r,e,G,F.angle,{x:F.x,y:F.y},Q,v)&&U.collide(r,e,G,F.angle,{x:F.x,y:F.y},Q,v))return g(x),!0}u&&o.length>0&&(p(O),p(V))}function b(x,T,k){return Tr(x,T,k)}function w(x,T){var k=x._private,D=c,B;T?B=T+\"-\":B=\"\",x.boundingBox();var P=k.labelBounds[T||\"main\"],A=x.pstyle(B+\"label\").value,R=x.pstyle(\"text-events\").strValue===\"yes\";if(!(!R||!A)){var L=b(k.rscratch,\"labelX\",T),I=b(k.rscratch,\"labelY\",T),M=b(k.rscratch,\"labelAngle\",T),O=x.pstyle(B+\"text-margin-x\").pfValue,V=x.pstyle(B+\"text-margin-y\").pfValue,G=P.x1-D-O,N=P.x2+D-O,F=P.y1-D-V,U=P.y2+D-V;if(M){var Q=Math.cos(M),K=Math.sin(M),j=function(Y,te){return Y=Y-L,te=te-I,{x:Y*Q-te*K+L,y:Y*K+te*Q+I}},re=j(G,F),ne=j(G,U),J=j(N,F),z=j(N,U),q=[re.x+O,re.y+V,J.x+O,J.y+V,z.x+O,z.y+V,ne.x+O,ne.y+V];if(Sr(r,e,q))return g(x),!0}else if(nt(P,r,e))return g(x),!0}}for(var E=s.length-1;E>=0;E--){var C=s[E];C.isNode()?p(C)||w(C):m(C)||w(C)||w(C,\"source\")||w(C,\"target\")}return o};Mt.getAllInBox=function(r,e,t,a){var n=this.getCachedZSortedEles().interactive,i=this.cy.zoom(),s=2/i,o=[],l=Math.min(r,t),u=Math.max(r,t),v=Math.min(e,a),f=Math.max(e,a);r=l,t=u,e=v,a=f;var c=wr({x1:r,y1:e,x2:t,y2:a}),h=[{x:c.x1,y:c.y1},{x:c.x2,y:c.y1},{x:c.x2,y:c.y2},{x:c.x1,y:c.y2}],d=[[h[0],h[1]],[h[1],h[2]],[h[2],h[3]],[h[3],h[0]]];function y(Y,te,ce){return Tr(Y,te,ce)}function g(Y,te){var ce=Y._private,Ae=s,Ce=\"\";Y.boundingBox();var we=ce.labelBounds.main;if(!we)return null;var ye=y(ce.rscratch,\"labelX\",te),ie=y(ce.rscratch,\"labelY\",te),de=y(ce.rscratch,\"labelAngle\",te),he=Y.pstyle(Ce+\"text-margin-x\").pfValue,Ee=Y.pstyle(Ce+\"text-margin-y\").pfValue,pe=we.x1-Ae-he,Se=we.x2+Ae-he,Re=we.y1-Ae-Ee,Oe=we.y2+Ae-Ee;if(de){var Ne=Math.cos(de),ze=Math.sin(de),xe=function(X,S){return X=X-ye,S=S-ie,{x:X*Ne-S*ze+ye,y:X*ze+S*Ne+ie}};return[xe(pe,Re),xe(Se,Re),xe(Se,Oe),xe(pe,Oe)]}else return[{x:pe,y:Re},{x:Se,y:Re},{x:Se,y:Oe},{x:pe,y:Oe}]}function p(Y,te,ce,Ae){function Ce(we,ye,ie){return(ie.y-we.y)*(ye.x-we.x)>(ye.y-we.y)*(ie.x-we.x)}return Ce(Y,ce,Ae)!==Ce(te,ce,Ae)&&Ce(Y,te,ce)!==Ce(Y,te,Ae)}for(var m=0;m<n.length;m++){var b=n[m];if(b.isNode()){var w=b,E=w.pstyle(\"text-events\").strValue===\"yes\",C=w.pstyle(\"box-selection\").strValue,x=w.pstyle(\"box-select-labels\").strValue===\"yes\";if(C===\"none\")continue;var T=(C===\"overlap\"||x)&&E,k=w.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:T});if(C===\"contain\"){var D=!1;if(x&&E){var B=g(w);B&&yi(B,h)&&(o.push(w),D=!0)}!D&&bv(c,k)&&o.push(w)}else if(C===\"overlap\"&&ao(c,k)){var P=w.boundingBox({includeNodes:!0,includeEdges:!0,includeLabels:!1,includeMainLabels:!1,includeSourceLabels:!1,includeTargetLabels:!1}),A=[{x:P.x1,y:P.y1},{x:P.x2,y:P.y1},{x:P.x2,y:P.y2},{x:P.x1,y:P.y2}];if(yi(A,h))o.push(w);else{var R=g(w);R&&yi(R,h)&&o.push(w)}}}else{var L=b,I=L._private,M=I.rscratch,O=L.pstyle(\"box-selection\").strValue;if(O===\"none\")continue;if(O===\"contain\"){if(M.startX!=null&&M.startY!=null&&!nt(c,M.startX,M.startY)||M.endX!=null&&M.endY!=null&&!nt(c,M.endX,M.endY))continue;if(M.edgeType===\"bezier\"||M.edgeType===\"multibezier\"||M.edgeType===\"self\"||M.edgeType===\"compound\"||M.edgeType===\"segments\"||M.edgeType===\"haystack\"){for(var V=I.rstyle.bezierPts||I.rstyle.linePts||I.rstyle.haystackPts,G=!0,N=0;N<V.length;N++)if(!Ko(c,V[N])){G=!1;break}G&&o.push(L)}else M.edgeType===\"straight\"&&o.push(L)}else if(O===\"overlap\"){var F=!1;if(M.startX!=null&&M.startY!=null&&M.endX!=null&&M.endY!=null&&(nt(c,M.startX,M.startY)||nt(c,M.endX,M.endY)))o.push(L),F=!0;else if(!F&&M.edgeType===\"haystack\"){for(var U=I.rstyle.haystackPts,Q=0;Q<U.length;Q++)if(Ko(c,U[Q])){o.push(L),F=!0;break}}if(!F){var K=I.rstyle.bezierPts||I.rstyle.linePts||I.rstyle.haystackPts;if((!K||K.length<2)&&M.edgeType===\"straight\"&&M.startX!=null&&M.startY!=null&&M.endX!=null&&M.endY!=null&&(K=[{x:M.startX,y:M.startY},{x:M.endX,y:M.endY}]),!K||K.length<2)continue;for(var j=0;j<K.length-1;j++){for(var re=K[j],ne=K[j+1],J=0;J<d.length;J++){var z=Je(d[J],2),q=z[0],H=z[1];if(p(re,ne,q,H)){o.push(L),F=!0;break}}if(F)break}}}}}return o};var Bn={};Bn.calculateArrowAngles=function(r){var e=r._private.rscratch,t=e.edgeType===\"haystack\",a=e.edgeType===\"bezier\",n=e.edgeType===\"multibezier\",i=e.edgeType===\"segments\",s=e.edgeType===\"compound\",o=e.edgeType===\"self\",l,u,v,f,c,h,p,m;if(t?(v=e.haystackPts[0],f=e.haystackPts[1],c=e.haystackPts[2],h=e.haystackPts[3]):(v=e.arrowStartX,f=e.arrowStartY,c=e.arrowEndX,h=e.arrowEndY),p=e.midX,m=e.midY,i)l=v-e.segpts[0],u=f-e.segpts[1];else if(n||s||o||a){var d=e.allpts,y=sr(d[0],d[2],d[4],.1),g=sr(d[1],d[3],d[5],.1);l=v-y,u=f-g}else l=v-p,u=f-m;e.srcArrowAngle=Ya(l,u);var p=e.midX,m=e.midY;if(t&&(p=(v+c)/2,m=(f+h)/2),l=c-v,u=h-f,i){var d=e.allpts;if(d.length/2%2===0){var b=d.length/2,w=b-2;l=d[b]-d[w],u=d[b+1]-d[w+1]}else if(e.isRound)l=e.midVector[1],u=-e.midVector[0];else{var b=d.length/2-1,w=b-2;l=d[b]-d[w],u=d[b+1]-d[w+1]}}else if(n||s||o){var d=e.allpts,E=e.ctrlpts,C,x,T,k;if(E.length/2%2===0){var D=d.length/2-1,B=D+2,P=B+2;C=sr(d[D],d[B],d[P],0),x=sr(d[D+1],d[B+1],d[P+1],0),T=sr(d[D],d[B],d[P],1e-4),k=sr(d[D+1],d[B+1],d[P+1],1e-4)}else{var B=d.length/2-1,D=B-2,P=B+2;C=sr(d[D],d[B],d[P],.4999),x=sr(d[D+1],d[B+1],d[P+1],.4999),T=sr(d[D],d[B],d[P],.5),k=sr(d[D+1],d[B+1],d[P+1],.5)}l=T-C,u=k-x}if(e.midtgtArrowAngle=Ya(l,u),e.midDispX=l,e.midDispY=u,l*=-1,u*=-1,i){var d=e.allpts;if(d.length/2%2!==0){if(!e.isRound){var b=d.length/2-1,A=b+2;l=-(d[A]-d[b]),u=-(d[A+1]-d[b+1])}}}if(e.midsrcArrowAngle=Ya(l,u),i)l=c-e.segpts[e.segpts.length-2],u=h-e.segpts[e.segpts.length-1];else if(n||s||o||a){var d=e.allpts,R=d.length,y=sr(d[R-6],d[R-4],d[R-2],.9),g=sr(d[R-5],d[R-3],d[R-1],.9);l=c-y,u=h-g}else l=c-p,u=h-m;e.tgtArrowAngle=Ya(l,u)};Bn.getArrowWidth=Bn.getArrowHeight=function(r,e){var t=this.arrowWidthCache=this.arrowWidthCache||{},a=t[r+\", \"+e];return a||(a=Math.max(Math.pow(r*13.37,.9),29)*e,t[r+\", \"+e]=a,a)};var Vs,qs,Vr={},Pr={},Pl,Al,St,gn,Ur,wt,Ct,zr,Vt,an,hf,gf,_s,Gs,Rl,Ml=function(e,t,a){a.x=t.x-e.x,a.y=t.y-e.y,a.len=Math.sqrt(a.x*a.x+a.y*a.y),a.nx=a.x/a.len,a.ny=a.y/a.len,a.ang=Math.atan2(a.ny,a.nx)},Jp=function(e,t){t.x=e.x*-1,t.y=e.y*-1,t.nx=e.nx*-1,t.ny=e.ny*-1,t.ang=e.ang>0?-(Math.PI-e.ang):Math.PI+e.ang},jp=function(e,t,a,n,i){if(e!==Rl?Ml(t,e,Vr):Jp(Pr,Vr),Ml(t,a,Pr),Pl=Vr.nx*Pr.ny-Vr.ny*Pr.nx,Al=Vr.nx*Pr.nx-Vr.ny*-Pr.ny,Ur=Math.asin(Math.max(-1,Math.min(1,Pl))),Math.abs(Ur)<1e-6){Vs=t.x,qs=t.y,Ct=Vt=0;return}St=1,gn=!1,Al<0?Ur<0?Ur=Math.PI+Ur:(Ur=Math.PI-Ur,St=-1,gn=!0):Ur>0&&(St=-1,gn=!0),t.radius!==void 0?Vt=t.radius:Vt=n,wt=Ur/2,an=Math.min(Vr.len/2,Pr.len/2),i?(zr=Math.abs(Math.cos(wt)*Vt/Math.sin(wt)),zr>an?(zr=an,Ct=Math.abs(zr*Math.sin(wt)/Math.cos(wt))):Ct=Vt):(zr=Math.min(an,Vt),Ct=Math.abs(zr*Math.sin(wt)/Math.cos(wt))),_s=t.x+Pr.nx*zr,Gs=t.y+Pr.ny*zr,Vs=_s-Pr.ny*Ct*St,qs=Gs+Pr.nx*Ct*St,hf=t.x+Vr.nx*zr,gf=t.y+Vr.ny*zr,Rl=t};function pf(r,e){e.radius===0?r.lineTo(e.cx,e.cy):r.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function po(r,e,t,a){var n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return a===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(jp(r,e,t,a,n),{cx:Vs,cy:qs,radius:Ct,startX:hf,startY:gf,stopX:_s,stopY:Gs,startAngle:Vr.ang+Math.PI/2*St,endAngle:Pr.ang-Math.PI/2*St,counterClockwise:gn})}var Ma=.01,ey=Math.sqrt(2*Ma),yr={};yr.findMidptPtsEtc=function(r,e){var t=e.posPts,a=e.intersectionPts,n=e.vectorNormInverse,i,s=r.pstyle(\"source-endpoint\"),o=r.pstyle(\"target-endpoint\"),l=s.units!=null&&o.units!=null,u=function(E,C,x,T){var k=T-C,D=x-E,B=Math.sqrt(D*D+k*k);return{x:-k/B,y:D/B}},v=r.pstyle(\"edge-distances\").value;switch(v){case\"node-position\":i=t;break;case\"intersection\":i=a;break;case\"endpoints\":{if(l){var f=this.manualEndptToPx(r.source()[0],s),c=Je(f,2),h=c[0],d=c[1],y=this.manualEndptToPx(r.target()[0],o),g=Je(y,2),p=g[0],m=g[1],b={x1:h,y1:d,x2:p,y2:m};n=u(h,d,p,m),i=b}else Ve(\"Edge \".concat(r.id(),\" has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint.  Falling back on edge-distances:intersection (default).\")),i=a;break}}return{midptPts:i,vectorNormInverse:n}};yr.findHaystackPoints=function(r){for(var e=0;e<r.length;e++){var t=r[e],a=t._private,n=a.rscratch;if(!n.haystack){var i=Math.random()*2*Math.PI;n.source={x:Math.cos(i),y:Math.sin(i)},i=Math.random()*2*Math.PI,n.target={x:Math.cos(i),y:Math.sin(i)}}var s=a.source,o=a.target,l=s.position(),u=o.position(),v=s.width(),f=o.width(),c=s.height(),h=o.height(),d=t.pstyle(\"haystack-radius\").value,y=d/2;n.haystackPts=n.allpts=[n.source.x*v*y+l.x,n.source.y*c*y+l.y,n.target.x*f*y+u.x,n.target.y*h*y+u.y],n.midX=(n.allpts[0]+n.allpts[2])/2,n.midY=(n.allpts[1]+n.allpts[3])/2,n.edgeType=\"haystack\",n.haystack=!0,this.storeEdgeProjections(t),this.calculateArrowAngles(t),this.recalculateEdgeLabelProjections(t),this.calculateLabelAngles(t)}};yr.findSegmentsPoints=function(r,e){var t=r._private.rscratch,a=r.pstyle(\"segment-weights\"),n=r.pstyle(\"segment-distances\"),i=r.pstyle(\"segment-radii\"),s=r.pstyle(\"radius-type\"),o=Math.min(a.pfValue.length,n.pfValue.length),l=i.pfValue[i.pfValue.length-1],u=s.pfValue[s.pfValue.length-1];t.edgeType=\"segments\",t.segpts=[],t.radii=[],t.isArcRadius=[];for(var v=0;v<o;v++){var f=a.pfValue[v],c=n.pfValue[v],h=1-f,d=f,y=this.findMidptPtsEtc(r,e),g=y.midptPts,p=y.vectorNormInverse,m={x:g.x1*h+g.x2*d,y:g.y1*h+g.y2*d};t.segpts.push(m.x+p.x*c,m.y+p.y*c),t.radii.push(i.pfValue[v]!==void 0?i.pfValue[v]:l),t.isArcRadius.push((s.pfValue[v]!==void 0?s.pfValue[v]:u)===\"arc-radius\")}};yr.findLoopPoints=function(r,e,t,a){var n=r._private.rscratch,i=e.dirCounts,s=e.srcPos,o=r.pstyle(\"control-point-distances\"),l=o?o.pfValue[0]:void 0,u=r.pstyle(\"loop-direction\").pfValue,v=r.pstyle(\"loop-sweep\").pfValue,f=r.pstyle(\"control-point-step-size\").pfValue;n.edgeType=\"self\";var c=t,h=f;a&&(c=0,h=l);var d=u-Math.PI/2,y=d-v/2,g=d+v/2,p=u+\"_\"+v;c=i[p]===void 0?i[p]=0:++i[p],n.ctrlpts=[s.x+Math.cos(y)*1.4*h*(c/3+1),s.y+Math.sin(y)*1.4*h*(c/3+1),s.x+Math.cos(g)*1.4*h*(c/3+1),s.y+Math.sin(g)*1.4*h*(c/3+1)]};yr.findCompoundLoopPoints=function(r,e,t,a){var n=r._private.rscratch;n.edgeType=\"compound\";var i=e.srcPos,s=e.tgtPos,o=e.srcW,l=e.srcH,u=e.tgtW,v=e.tgtH,f=r.pstyle(\"control-point-step-size\").pfValue,c=r.pstyle(\"control-point-distances\"),h=c?c.pfValue[0]:void 0,d=t,y=f;a&&(d=0,y=h);var g=50,p={x:i.x-o/2,y:i.y-l/2},m={x:s.x-u/2,y:s.y-v/2},b={x:Math.min(p.x,m.x),y:Math.min(p.y,m.y)},w=.5,E=Math.max(w,Math.log(o*Ma)),C=Math.max(w,Math.log(u*Ma));n.ctrlpts=[b.x,b.y-(1+Math.pow(g,1.12)/100)*y*(d/3+1)*E,b.x-(1+Math.pow(g,1.12)/100)*y*(d/3+1)*C,b.y]};yr.findStraightEdgePoints=function(r){r._private.rscratch.edgeType=\"straight\"};yr.findBezierPoints=function(r,e,t,a,n){var i=r._private.rscratch,s=r.pstyle(\"control-point-step-size\").pfValue,o=r.pstyle(\"control-point-distances\"),l=r.pstyle(\"control-point-weights\"),u=o&&l?Math.min(o.value.length,l.value.length):1,v=o?o.pfValue[0]:void 0,f=l.value[0],c=a;i.edgeType=c?\"multibezier\":\"bezier\",i.ctrlpts=[];for(var h=0;h<u;h++){var d=(.5-e.eles.length/2+t)*s*(n?-1:1),y=void 0,g=to(d);c&&(v=o?o.pfValue[h]:s,f=l.value[h]),a?y=v:y=v!==void 0?g*v:void 0;var p=y!==void 0?y:d,m=1-f,b=f,w=this.findMidptPtsEtc(r,e),E=w.midptPts,C=w.vectorNormInverse,x={x:E.x1*m+E.x2*b,y:E.y1*m+E.y2*b};i.ctrlpts.push(x.x+C.x*p,x.y+C.y*p)}};yr.findTaxiPoints=function(r,e){var t=r._private.rscratch;t.edgeType=\"segments\";var a=\"vertical\",n=\"horizontal\",i=\"leftward\",s=\"rightward\",o=\"downward\",l=\"upward\",u=\"auto\",v=e.posPts,f=e.srcW,c=e.srcH,h=e.tgtW,d=e.tgtH,y=r.pstyle(\"edge-distances\").value,g=y!==\"node-position\",p=r.pstyle(\"taxi-direction\").value,m=p,b=r.pstyle(\"taxi-turn\"),w=b.units===\"%\",E=b.pfValue,C=E<0,x=r.pstyle(\"taxi-turn-min-distance\").pfValue,T=g?(f+h)/2:0,k=g?(c+d)/2:0,D=v.x2-v.x1,B=v.y2-v.y1,P=function(S,_){return S>0?Math.max(S-_,0):Math.min(S+_,0)},A=P(D,T),R=P(B,k),L=!1;m===u?p=Math.abs(A)>Math.abs(R)?n:a:m===l||m===o?(p=a,L=!0):(m===i||m===s)&&(p=n,L=!0);var I=p===a,M=I?R:A,O=I?B:D,V=to(O),G=!1;!(L&&(w||C))&&(m===o&&O<0||m===l&&O>0||m===i&&O>0||m===s&&O<0)&&(V*=-1,M=V*Math.abs(M),G=!0);var N;if(w){var F=E<0?1+E:E;N=F*M}else{var U=E<0?M:0;N=U+E*V}var Q=function(S){return Math.abs(S)<x||Math.abs(S)>=Math.abs(M)},K=Q(N),j=Q(Math.abs(M)-Math.abs(N)),re=K||j;if(re&&!G)if(I){var ne=Math.abs(O)<=c/2,J=Math.abs(D)<=h/2;if(ne){var z=(v.x1+v.x2)/2,q=v.y1,H=v.y2;t.segpts=[z,q,z,H]}else if(J){var Y=(v.y1+v.y2)/2,te=v.x1,ce=v.x2;t.segpts=[te,Y,ce,Y]}else t.segpts=[v.x1,v.y2]}else{var Ae=Math.abs(O)<=f/2,Ce=Math.abs(B)<=d/2;if(Ae){var we=(v.y1+v.y2)/2,ye=v.x1,ie=v.x2;t.segpts=[ye,we,ie,we]}else if(Ce){var de=(v.x1+v.x2)/2,he=v.y1,Ee=v.y2;t.segpts=[de,he,de,Ee]}else t.segpts=[v.x2,v.y1]}else if(I){var pe=v.y1+N+(g?c/2*V:0),Se=v.x1,Re=v.x2;t.segpts=[Se,pe,Re,pe]}else{var Oe=v.x1+N+(g?f/2*V:0),Ne=v.y1,ze=v.y2;t.segpts=[Oe,Ne,Oe,ze]}if(t.isRound){var xe=r.pstyle(\"taxi-radius\").value,ue=r.pstyle(\"radius-type\").value[0]===\"arc-radius\";t.radii=new Array(t.segpts.length/2).fill(xe),t.isArcRadius=new Array(t.segpts.length/2).fill(ue)}};yr.tryToCorrectInvalidPoints=function(r,e){var t=r._private.rscratch;if(t.edgeType===\"bezier\"){var a=e.srcPos,n=e.tgtPos,i=e.srcW,s=e.srcH,o=e.tgtW,l=e.tgtH,u=e.srcShape,v=e.tgtShape,f=e.srcCornerRadius,c=e.tgtCornerRadius,h=e.srcRs,d=e.tgtRs,y=!ae(t.startX)||!ae(t.startY),g=!ae(t.arrowStartX)||!ae(t.arrowStartY),p=!ae(t.endX)||!ae(t.endY),m=!ae(t.arrowEndX)||!ae(t.arrowEndY),b=3,w=this.getArrowWidth(r.pstyle(\"width\").pfValue,r.pstyle(\"arrow-scale\").value)*this.arrowShapeWidth,E=b*w,C=Bt({x:t.ctrlpts[0],y:t.ctrlpts[1]},{x:t.startX,y:t.startY}),x=C<E,T=Bt({x:t.ctrlpts[0],y:t.ctrlpts[1]},{x:t.endX,y:t.endY}),k=T<E,D=!1;if(y||g||x){D=!0;var B={x:t.ctrlpts[0]-a.x,y:t.ctrlpts[1]-a.y},P=Math.sqrt(B.x*B.x+B.y*B.y),A={x:B.x/P,y:B.y/P},R=Math.max(i,s),L={x:t.ctrlpts[0]+A.x*2*R,y:t.ctrlpts[1]+A.y*2*R},I=u.intersectLine(a.x,a.y,i,s,L.x,L.y,0,f,h);x?(t.ctrlpts[0]=t.ctrlpts[0]+A.x*(E-C),t.ctrlpts[1]=t.ctrlpts[1]+A.y*(E-C)):(t.ctrlpts[0]=I[0]+A.x*E,t.ctrlpts[1]=I[1]+A.y*E)}if(p||m||k){D=!0;var M={x:t.ctrlpts[0]-n.x,y:t.ctrlpts[1]-n.y},O=Math.sqrt(M.x*M.x+M.y*M.y),V={x:M.x/O,y:M.y/O},G=Math.max(i,s),N={x:t.ctrlpts[0]+V.x*2*G,y:t.ctrlpts[1]+V.y*2*G},F=v.intersectLine(n.x,n.y,o,l,N.x,N.y,0,c,d);k?(t.ctrlpts[0]=t.ctrlpts[0]+V.x*(E-T),t.ctrlpts[1]=t.ctrlpts[1]+V.y*(E-T)):(t.ctrlpts[0]=F[0]+V.x*E,t.ctrlpts[1]=F[1]+V.y*E)}D&&this.findEndpoints(r)}};yr.storeAllpts=function(r){var e=r._private.rscratch;if(e.edgeType===\"multibezier\"||e.edgeType===\"bezier\"||e.edgeType===\"self\"||e.edgeType===\"compound\"){e.allpts=[],e.allpts.push(e.startX,e.startY);for(var t=0;t+1<e.ctrlpts.length;t+=2)e.allpts.push(e.ctrlpts[t],e.ctrlpts[t+1]),t+3<e.ctrlpts.length&&e.allpts.push((e.ctrlpts[t]+e.ctrlpts[t+2])/2,(e.ctrlpts[t+1]+e.ctrlpts[t+3])/2);e.allpts.push(e.endX,e.endY);var a,n;e.ctrlpts.length/2%2===0?(a=e.allpts.length/2-1,e.midX=e.allpts[a],e.midY=e.allpts[a+1]):(a=e.allpts.length/2-3,n=.5,e.midX=sr(e.allpts[a],e.allpts[a+2],e.allpts[a+4],n),e.midY=sr(e.allpts[a+1],e.allpts[a+3],e.allpts[a+5],n))}else if(e.edgeType===\"straight\")e.allpts=[e.startX,e.startY,e.endX,e.endY],e.midX=(e.startX+e.endX+e.arrowStartX+e.arrowEndX)/4,e.midY=(e.startY+e.endY+e.arrowStartY+e.arrowEndY)/4;else if(e.edgeType===\"segments\"){if(e.allpts=[],e.allpts.push(e.startX,e.startY),e.allpts.push.apply(e.allpts,e.segpts),e.allpts.push(e.endX,e.endY),e.isRound){e.roundCorners=[];for(var i=2;i+3<e.allpts.length;i+=2){var s=e.radii[i/2-1],o=e.isArcRadius[i/2-1];e.roundCorners.push(po({x:e.allpts[i-2],y:e.allpts[i-1]},{x:e.allpts[i],y:e.allpts[i+1],radius:s},{x:e.allpts[i+2],y:e.allpts[i+3]},s,o))}}if(e.segpts.length%4===0){var l=e.segpts.length/2,u=l-2;e.midX=(e.segpts[u]+e.segpts[l])/2,e.midY=(e.segpts[u+1]+e.segpts[l+1])/2}else{var v=e.segpts.length/2-1;if(!e.isRound)e.midX=e.segpts[v],e.midY=e.segpts[v+1];else{var f={x:e.segpts[v],y:e.segpts[v+1]},c=e.roundCorners[v/2];if(c.radius===0){var h={x:e.segpts[v+2],y:e.segpts[v+3]};e.midX=f.x,e.midY=f.y,e.midVector=[f.y-h.y,h.x-f.x]}else{var d=[f.x-c.cx,f.y-c.cy],y=c.radius/Math.sqrt(Math.pow(d[0],2)+Math.pow(d[1],2));d=d.map(function(g){return g*y}),e.midX=c.cx+d[0],e.midY=c.cy+d[1],e.midVector=d}}}}};yr.checkForInvalidEdgeWarning=function(r){var e=r[0]._private.rscratch;e.nodesOverlap||ae(e.startX)&&ae(e.startY)&&ae(e.endX)&&ae(e.endY)?e.loggedErr=!1:e.loggedErr||(e.loggedErr=!0,Ve(\"Edge `\"+r.id()+\"` has invalid endpoints and so it is impossible to draw.  Adjust your edge style (e.g. control points) accordingly or use an alternative edge type.  This is expected behaviour when the source node and the target node overlap.\"))};yr.findEdgeControlPoints=function(r){var e=this;if(!(!r||r.length===0)){for(var t=this,a=t.cy,n=a.hasCompoundNodes(),i=new Xr,s=function(k,D){return[].concat(mn(k),[D?1:0]).join(\"-\")},o=[],l=[],u=0;u<r.length;u++){var v=r[u],f=v._private,c=v.pstyle(\"curve-style\").value;if(!(v.removed()||!v.takesUpSpace())){if(c===\"haystack\"){l.push(v);continue}var h=c===\"unbundled-bezier\"||at(c,\"segments\")||c===\"straight\"||c===\"straight-triangle\"||at(c,\"taxi\"),d=c===\"unbundled-bezier\"||c===\"bezier\",y=f.source,g=f.target,p=y.poolIndex(),m=g.poolIndex(),b=[p,m].sort(),w=s(b,h),E=i.get(w);E==null&&(E={eles:[]},o.push({pairId:b,edgeIsUnbundled:h}),i.set(w,E)),E.eles.push(v),h&&(E.hasUnbundled=!0),d&&(E.hasBezier=!0)}}for(var C=function(){var k=o[x],D=k.pairId,B=k.edgeIsUnbundled,P=s(D,B),A=i.get(P),R;if(!A.hasUnbundled){var L=A.eles[0].parallelEdges().filter(function(ue){return ue.isBundledBezier()});eo(A.eles),L.forEach(function(ue){return A.eles.push(ue)}),A.eles.sort(function(ue,X){return ue.poolIndex()-X.poolIndex()})}var I=A.eles[0],M=I.source(),O=I.target();if(M.poolIndex()>O.poolIndex()){var V=M;M=O,O=V}var G=A.srcPos=M.position(),N=A.tgtPos=O.position(),F=A.srcW=M.outerWidth(),U=A.srcH=M.outerHeight(),Q=A.tgtW=O.outerWidth(),K=A.tgtH=O.outerHeight(),j=A.srcShape=t.nodeShapes[e.getNodeShape(M)],re=A.tgtShape=t.nodeShapes[e.getNodeShape(O)],ne=A.srcCornerRadius=M.pstyle(\"corner-radius\").value===\"auto\"?\"auto\":M.pstyle(\"corner-radius\").pfValue,J=A.tgtCornerRadius=O.pstyle(\"corner-radius\").value===\"auto\"?\"auto\":O.pstyle(\"corner-radius\").pfValue,z=A.tgtRs=O._private.rscratch,q=A.srcRs=M._private.rscratch;A.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var H=0;H<A.eles.length;H++){var Y=A.eles[H],te=Y[0]._private.rscratch,ce=Y.pstyle(\"curve-style\").value,Ae=ce===\"unbundled-bezier\"||at(ce,\"segments\")||at(ce,\"taxi\"),Ce=!M.same(Y.source());if(!A.calculatedIntersection&&M!==O&&(A.hasBezier||A.hasUnbundled)){A.calculatedIntersection=!0;var we=j.intersectLine(G.x,G.y,F,U,N.x,N.y,0,ne,q),ye=A.srcIntn=we,ie=re.intersectLine(N.x,N.y,Q,K,G.x,G.y,0,J,z),de=A.tgtIntn=ie,he=A.intersectionPts={x1:we[0],x2:ie[0],y1:we[1],y2:ie[1]},Ee=A.posPts={x1:G.x,x2:N.x,y1:G.y,y2:N.y},pe=ie[1]-we[1],Se=ie[0]-we[0],Re=Math.sqrt(Se*Se+pe*pe);ae(Re)&&Re>=ey||(Re=Math.sqrt(Math.max(Se*Se,Ma)+Math.max(pe*pe,Ma)));var Oe=A.vector={x:Se,y:pe},Ne=A.vectorNorm={x:Oe.x/Re,y:Oe.y/Re},ze={x:-Ne.y,y:Ne.x};A.nodesOverlap=!ae(Re)||re.checkPoint(we[0],we[1],0,Q,K,N.x,N.y,J,z)||j.checkPoint(ie[0],ie[1],0,F,U,G.x,G.y,ne,q),A.vectorNormInverse=ze,R={nodesOverlap:A.nodesOverlap,dirCounts:A.dirCounts,calculatedIntersection:!0,hasBezier:A.hasBezier,hasUnbundled:A.hasUnbundled,eles:A.eles,srcPos:N,srcRs:z,tgtPos:G,tgtRs:q,srcW:Q,srcH:K,tgtW:F,tgtH:U,srcIntn:de,tgtIntn:ye,srcShape:re,tgtShape:j,posPts:{x1:Ee.x2,y1:Ee.y2,x2:Ee.x1,y2:Ee.y1},intersectionPts:{x1:he.x2,y1:he.y2,x2:he.x1,y2:he.y1},vector:{x:-Oe.x,y:-Oe.y},vectorNorm:{x:-Ne.x,y:-Ne.y},vectorNormInverse:{x:-ze.x,y:-ze.y}}}var xe=Ce?R:A;te.nodesOverlap=xe.nodesOverlap,te.srcIntn=xe.srcIntn,te.tgtIntn=xe.tgtIntn,te.isRound=ce.startsWith(\"round\"),n&&(M.isParent()||M.isChild()||O.isParent()||O.isChild())&&(M.parents().anySame(O)||O.parents().anySame(M)||M.same(O)&&M.isParent())?e.findCompoundLoopPoints(Y,xe,H,Ae):M===O?e.findLoopPoints(Y,xe,H,Ae):ce.endsWith(\"segments\")?e.findSegmentsPoints(Y,xe):ce.endsWith(\"taxi\")?e.findTaxiPoints(Y,xe):ce===\"straight\"||!Ae&&A.eles.length%2===1&&H===Math.floor(A.eles.length/2)?e.findStraightEdgePoints(Y):e.findBezierPoints(Y,xe,H,Ae,Ce),e.findEndpoints(Y),e.tryToCorrectInvalidPoints(Y,xe),e.checkForInvalidEdgeWarning(Y),e.storeAllpts(Y),e.storeEdgeProjections(Y),e.calculateArrowAngles(Y),e.recalculateEdgeLabelProjections(Y),e.calculateLabelAngles(Y)}},x=0;x<o.length;x++)C();this.findHaystackPoints(l)}};function yf(r){var e=[];if(r!=null){for(var t=0;t<r.length;t+=2){var a=r[t],n=r[t+1];e.push({x:a,y:n})}return e}}yr.getSegmentPoints=function(r){var e=r[0]._private.rscratch;this.recalculateRenderedStyle(r);var t=e.edgeType;if(t===\"segments\")return yf(e.segpts)};yr.getControlPoints=function(r){var e=r[0]._private.rscratch;this.recalculateRenderedStyle(r);var t=e.edgeType;if(t===\"bezier\"||t===\"multibezier\"||t===\"self\"||t===\"compound\")return yf(e.ctrlpts)};yr.getEdgeMidpoint=function(r){var e=r[0]._private.rscratch;return this.recalculateRenderedStyle(r),{x:e.midX,y:e.midY}};var Ga={};Ga.manualEndptToPx=function(r,e){var t=this,a=r.position(),n=r.outerWidth(),i=r.outerHeight(),s=r._private.rscratch;if(e.value.length===2){var o=[e.pfValue[0],e.pfValue[1]];return e.units[0]===\"%\"&&(o[0]=o[0]*n),e.units[1]===\"%\"&&(o[1]=o[1]*i),o[0]+=a.x,o[1]+=a.y,o}else{var l=e.pfValue[0];l=-Math.PI/2+l;var u=2*Math.max(n,i),v=[a.x+Math.cos(l)*u,a.y+Math.sin(l)*u];return t.nodeShapes[this.getNodeShape(r)].intersectLine(a.x,a.y,n,i,v[0],v[1],0,r.pstyle(\"corner-radius\").value===\"auto\"?\"auto\":r.pstyle(\"corner-radius\").pfValue,s)}};Ga.findEndpoints=function(r){var e,t,a,n,i=this,s,o=r.source()[0],l=r.target()[0],u=o.position(),v=l.position(),f=r.pstyle(\"target-arrow-shape\").value,c=r.pstyle(\"source-arrow-shape\").value,h=r.pstyle(\"target-distance-from-node\").pfValue,d=r.pstyle(\"source-distance-from-node\").pfValue,y=o._private.rscratch,g=l._private.rscratch,p=r.pstyle(\"curve-style\").value,m=r._private.rscratch,b=m.edgeType,w=at(p,\"taxi\"),E=b===\"self\"||b===\"compound\",C=b===\"bezier\"||b===\"multibezier\"||E,x=b!==\"bezier\",T=b===\"straight\"||b===\"segments\",k=b===\"segments\",D=C||x||T,B=E||w,P=r.pstyle(\"source-endpoint\"),A=B?\"outside-to-node\":P.value,R=o.pstyle(\"corner-radius\").value===\"auto\"?\"auto\":o.pstyle(\"corner-radius\").pfValue,L=r.pstyle(\"target-endpoint\"),I=B?\"outside-to-node\":L.value,M=l.pstyle(\"corner-radius\").value===\"auto\"?\"auto\":l.pstyle(\"corner-radius\").pfValue;m.srcManEndpt=P,m.tgtManEndpt=L;var O,V,G,N,F=(e=(L==null||(t=L.pfValue)===null||t===void 0?void 0:t.length)===2?L.pfValue:null)!==null&&e!==void 0?e:[0,0],U=(a=(P==null||(n=P.pfValue)===null||n===void 0?void 0:n.length)===2?P.pfValue:null)!==null&&a!==void 0?a:[0,0];if(C){var Q=[m.ctrlpts[0],m.ctrlpts[1]],K=x?[m.ctrlpts[m.ctrlpts.length-2],m.ctrlpts[m.ctrlpts.length-1]]:Q;O=K,V=Q}else if(T){var j=k?m.segpts.slice(0,2):[v.x+F[0],v.y+F[1]],re=k?m.segpts.slice(m.segpts.length-2):[u.x+U[0],u.y+U[1]];O=re,V=j}if(I===\"inside-to-node\")s=[v.x,v.y];else if(L.units)s=this.manualEndptToPx(l,L);else if(I===\"outside-to-line\")s=m.tgtIntn;else if(I===\"outside-to-node\"||I===\"outside-to-node-or-label\"?G=O:(I===\"outside-to-line\"||I===\"outside-to-line-or-label\")&&(G=[u.x,u.y]),s=i.nodeShapes[this.getNodeShape(l)].intersectLine(v.x,v.y,l.outerWidth(),l.outerHeight(),G[0],G[1],0,M,g),I===\"outside-to-node-or-label\"||I===\"outside-to-line-or-label\"){var ne=l._private.rscratch,J=ne.labelWidth,z=ne.labelHeight,q=ne.labelX,H=ne.labelY,Y=J/2,te=z/2,ce=l.pstyle(\"text-valign\").value;ce===\"top\"?H-=te:ce===\"bottom\"&&(H+=te);var Ae=l.pstyle(\"text-halign\").value;Ae===\"left\"?q-=Y:Ae===\"right\"&&(q+=Y);var Ce=Da(G[0],G[1],[q-Y,H-te,q+Y,H-te,q+Y,H+te,q-Y,H+te],v.x,v.y);if(Ce.length>0){var we=u,ye=Et(we,Wt(s)),ie=Et(we,Wt(Ce)),de=ye;if(ie<ye&&(s=Ce,de=ie),Ce.length>2){var he=Et(we,{x:Ce[2],y:Ce[3]});he<de&&(s=[Ce[2],Ce[3]])}}}var Ee=Za(s,O,i.arrowShapes[f].spacing(r)+h),pe=Za(s,O,i.arrowShapes[f].gap(r)+h);if(m.endX=pe[0],m.endY=pe[1],m.arrowEndX=Ee[0],m.arrowEndY=Ee[1],A===\"inside-to-node\")s=[u.x,u.y];else if(P.units)s=this.manualEndptToPx(o,P);else if(A===\"outside-to-line\")s=m.srcIntn;else if(A===\"outside-to-node\"||A===\"outside-to-node-or-label\"?N=V:(A===\"outside-to-line\"||A===\"outside-to-line-or-label\")&&(N=[v.x,v.y]),s=i.nodeShapes[this.getNodeShape(o)].intersectLine(u.x,u.y,o.outerWidth(),o.outerHeight(),N[0],N[1],0,R,y),A===\"outside-to-node-or-label\"||A===\"outside-to-line-or-label\"){var Se=o._private.rscratch,Re=Se.labelWidth,Oe=Se.labelHeight,Ne=Se.labelX,ze=Se.labelY,xe=Re/2,ue=Oe/2,X=o.pstyle(\"text-valign\").value;X===\"top\"?ze-=ue:X===\"bottom\"&&(ze+=ue);var S=o.pstyle(\"text-halign\").value;S===\"left\"?Ne-=xe:S===\"right\"&&(Ne+=xe);var _=Da(N[0],N[1],[Ne-xe,ze-ue,Ne+xe,ze-ue,Ne+xe,ze+ue,Ne-xe,ze+ue],u.x,u.y);if(_.length>0){var W=v,$=Et(W,Wt(s)),Z=Et(W,Wt(_)),oe=$;if(Z<$&&(s=[_[0],_[1]],oe=Z),_.length>2){var ee=Et(W,{x:_[2],y:_[3]});ee<oe&&(s=[_[2],_[3]])}}}var ve=Za(s,V,i.arrowShapes[c].spacing(r)+d),le=Za(s,V,i.arrowShapes[c].gap(r)+d);m.startX=le[0],m.startY=le[1],m.arrowStartX=ve[0],m.arrowStartY=ve[1],D&&(!ae(m.startX)||!ae(m.startY)||!ae(m.endX)||!ae(m.endY)?m.badLine=!0:m.badLine=!1)};Ga.getSourceEndpoint=function(r){var e=r[0]._private.rscratch;return this.recalculateRenderedStyle(r),e.edgeType===\"haystack\"?{x:e.haystackPts[0],y:e.haystackPts[1]}:{x:e.arrowStartX,y:e.arrowStartY}};Ga.getTargetEndpoint=function(r){var e=r[0]._private.rscratch;return this.recalculateRenderedStyle(r),e.edgeType===\"haystack\"?{x:e.haystackPts[2],y:e.haystackPts[3]}:{x:e.arrowEndX,y:e.arrowEndY}};var yo={};function ry(r,e,t){for(var a=function(u,v,f,c){return sr(u,v,f,c)},n=e._private,i=n.rstyle.bezierPts,s=0;s<r.bezierProjPcts.length;s++){var o=r.bezierProjPcts[s];i.push({x:a(t[0],t[2],t[4],o),y:a(t[1],t[3],t[5],o)})}}yo.storeEdgeProjections=function(r){var e=r._private,t=e.rscratch,a=t.edgeType;if(e.rstyle.bezierPts=null,e.rstyle.linePts=null,e.rstyle.haystackPts=null,a===\"multibezier\"||a===\"bezier\"||a===\"self\"||a===\"compound\"){e.rstyle.bezierPts=[];for(var n=0;n+5<t.allpts.length;n+=4)ry(this,r,t.allpts.slice(n,n+6))}else if(a===\"segments\")for(var i=e.rstyle.linePts=[],n=0;n+1<t.allpts.length;n+=2)i.push({x:t.allpts[n],y:t.allpts[n+1]});else if(a===\"haystack\"){var s=t.haystackPts;e.rstyle.haystackPts=[{x:s[0],y:s[1]},{x:s[2],y:s[3]}]}e.rstyle.arrowWidth=this.getArrowWidth(r.pstyle(\"width\").pfValue,r.pstyle(\"arrow-scale\").value)*this.arrowShapeWidth};yo.recalculateEdgeProjections=function(r){this.findEdgeControlPoints(r)};var Gr={};Gr.recalculateNodeLabelProjection=function(r){var e=r.pstyle(\"label\").strValue;if(!ut(e)){var t,a,n=r._private,i=r.width(),s=r.height(),o=r.padding(),l=r.position(),u=r.pstyle(\"text-halign\").strValue,v=r.pstyle(\"text-valign\").strValue,f=n.rscratch,c=n.rstyle;switch(u){case\"left\":t=l.x-i/2-o;break;case\"right\":t=l.x+i/2+o;break;default:t=l.x}switch(v){case\"top\":a=l.y-s/2-o;break;case\"bottom\":a=l.y+s/2+o;break;default:a=l.y}f.labelX=t,f.labelY=a,c.labelX=t,c.labelY=a,this.calculateLabelAngles(r),this.applyLabelDimensions(r)}};var mf=function(e,t){var a=Math.atan(t/e);return e===0&&a<0&&(a=a*-1),a},bf=function(e,t){var a=t.x-e.x,n=t.y-e.y;return mf(a,n)},ty=function(e,t,a,n){var i=ka(0,n-.001,1),s=ka(0,n+.001,1),o=Kt(e,t,a,i),l=Kt(e,t,a,s);return bf(o,l)};Gr.recalculateEdgeLabelProjections=function(r){var e,t=r._private,a=t.rscratch,n=this,i={mid:r.pstyle(\"label\").strValue,source:r.pstyle(\"source-label\").strValue,target:r.pstyle(\"target-label\").strValue};if(i.mid||i.source||i.target){e={x:a.midX,y:a.midY};var s=function(f,c,h){Kr(t.rscratch,f,c,h),Kr(t.rstyle,f,c,h)};s(\"labelX\",null,e.x),s(\"labelY\",null,e.y);var o=mf(a.midDispX,a.midDispY);s(\"labelAutoAngle\",null,o);var l=function(){if(l.cache)return l.cache;for(var f=[],c=0;c+5<a.allpts.length;c+=4){var h={x:a.allpts[c],y:a.allpts[c+1]},d={x:a.allpts[c+2],y:a.allpts[c+3]},y={x:a.allpts[c+4],y:a.allpts[c+5]};f.push({p0:h,p1:d,p2:y,startDist:0,length:0,segments:[]})}var g=t.rstyle.bezierPts,p=n.bezierProjPcts.length;function m(x,T,k,D,B){var P=Bt(T,k),A=x.segments[x.segments.length-1],R={p0:T,p1:k,t0:D,t1:B,startDist:A?A.startDist+A.length:0,length:P};x.segments.push(R),x.length+=P}for(var b=0;b<f.length;b++){var w=f[b],E=f[b-1];E&&(w.startDist=E.startDist+E.length),m(w,w.p0,g[b*p],0,n.bezierProjPcts[0]);for(var C=0;C<p-1;C++)m(w,g[b*p+C],g[b*p+C+1],n.bezierProjPcts[C],n.bezierProjPcts[C+1]);m(w,g[b*p+p-1],w.p2,n.bezierProjPcts[p-1],1)}return l.cache=f},u=function(f){var c,h=f===\"source\";if(i[f]){var d=r.pstyle(f+\"-text-offset\").pfValue;switch(a.edgeType){case\"self\":case\"compound\":case\"bezier\":case\"multibezier\":{for(var y=l(),g,p=0,m=0,b=0;b<y.length;b++){for(var w=y[h?b:y.length-1-b],E=0;E<w.segments.length;E++){var C=w.segments[h?E:w.segments.length-1-E],x=b===y.length-1&&E===w.segments.length-1;if(p=m,m+=C.length,m>=d||x){g={cp:w,segment:C};break}}if(g)break}var T=g.cp,k=g.segment,D=(d-p)/k.length,B=k.t1-k.t0,P=h?k.t0+B*D:k.t1-B*D;P=ka(0,P,1),e=Kt(T.p0,T.p1,T.p2,P),c=ty(T.p0,T.p1,T.p2,P);break}case\"straight\":case\"segments\":case\"haystack\":{for(var A=0,R,L,I,M,O=a.allpts.length,V=0;V+3<O&&(h?(I={x:a.allpts[V],y:a.allpts[V+1]},M={x:a.allpts[V+2],y:a.allpts[V+3]}):(I={x:a.allpts[O-2-V],y:a.allpts[O-1-V]},M={x:a.allpts[O-4-V],y:a.allpts[O-3-V]}),R=Bt(I,M),L=A,A+=R,!(A>=d));V+=2);var G=d-L,N=G/R;N=ka(0,N,1),e=Td(I,M,N),c=bf(I,M);break}}s(\"labelX\",f,e.x),s(\"labelY\",f,e.y),s(\"labelAutoAngle\",f,c)}};u(\"source\"),u(\"target\"),this.applyLabelDimensions(r)}};Gr.applyLabelDimensions=function(r){this.applyPrefixedLabelDimensions(r),r.isEdge()&&(this.applyPrefixedLabelDimensions(r,\"source\"),this.applyPrefixedLabelDimensions(r,\"target\"))};Gr.applyPrefixedLabelDimensions=function(r,e){var t=r._private,a=this.getLabelText(r,e),n=Dt(a,r._private.labelDimsKey);if(Tr(t.rscratch,\"prefixedLabelDimsKey\",e)!==n){Kr(t.rscratch,\"prefixedLabelDimsKey\",e,n);var i=this.calculateLabelDimensions(r,a),s=r.pstyle(\"line-height\").pfValue,o=r.pstyle(\"text-wrap\").strValue,l=Tr(t.rscratch,\"labelWrapCachedLines\",e)||[],u=o!==\"wrap\"?1:Math.max(l.length,1),v=i.height/u,f=v*s,c=i.width,h=i.height+(u-1)*(s-1)*v;Kr(t.rstyle,\"labelWidth\",e,c),Kr(t.rscratch,\"labelWidth\",e,c),Kr(t.rstyle,\"labelHeight\",e,h),Kr(t.rscratch,\"labelHeight\",e,h),Kr(t.rscratch,\"labelLineHeight\",e,f)}};Gr.getLabelText=function(r,e){var t=r._private,a=e?e+\"-\":\"\",n=r.pstyle(a+\"label\").strValue,i=r.pstyle(\"text-transform\").value,s=function(U,Q){return Q?(Kr(t.rscratch,U,e,Q),Q):Tr(t.rscratch,U,e)};if(!n)return\"\";i==\"none\"||(i==\"uppercase\"?n=n.toUpperCase():i==\"lowercase\"&&(n=n.toLowerCase()));var o=r.pstyle(\"text-wrap\").value;if(o===\"wrap\"){var l=s(\"labelKey\");if(l!=null&&s(\"labelWrapKey\")===l)return s(\"labelWrapCachedText\");for(var u=\"​\",v=n.split(`\n`),f=r.pstyle(\"text-max-width\").pfValue,c=r.pstyle(\"text-overflow-wrap\").value,h=c===\"anywhere\",d=[],y=/[\\s\\u200b]+|$/g,g=0;g<v.length;g++){var p=v[g],m=this.calculateLabelDimensions(r,p),b=m.width;if(h){var w=p.split(\"\").join(u);p=w}if(b>f){var E=p.matchAll(y),C=\"\",x=0,T=kr(E),k;try{for(T.s();!(k=T.n()).done;){var D=k.value,B=D[0],P=p.substring(x,D.index);x=D.index+B.length;var A=C.length===0?P:C+P+B,R=this.calculateLabelDimensions(r,A),L=R.width;L<=f?C+=P+B:(C&&d.push(C),C=P+B)}}catch(F){T.e(F)}finally{T.f()}C.match(/^[\\s\\u200b]+$/)||d.push(C)}else d.push(p)}s(\"labelWrapCachedLines\",d),n=s(\"labelWrapCachedText\",d.join(`\n`)),s(\"labelWrapKey\",l)}else if(o===\"ellipsis\"){var I=r.pstyle(\"text-max-width\").pfValue,M=\"\",O=\"…\",V=!1;if(this.calculateLabelDimensions(r,n).width<I)return n;for(var G=0;G<n.length;G++){var N=this.calculateLabelDimensions(r,M+n[G]+O).width;if(N>I)break;M+=n[G],G===n.length-1&&(V=!0)}return V||(M+=O),M}return n};Gr.getLabelJustification=function(r){var e=r.pstyle(\"text-justification\").strValue,t=r.pstyle(\"text-halign\").strValue;if(e===\"auto\")if(r.isNode())switch(t){case\"left\":return\"right\";case\"right\":return\"left\";default:return\"center\"}else return\"center\";else return e};Gr.calculateLabelDimensions=function(r,e){var t=this,a=t.cy.window(),n=a.document,i=0,s=r.pstyle(\"font-style\").strValue,o=r.pstyle(\"font-size\").pfValue,l=r.pstyle(\"font-family\").strValue,u=r.pstyle(\"font-weight\").strValue,v=this.labelCalcCanvas,f=this.labelCalcCanvasContext;if(!v){v=this.labelCalcCanvas=n.createElement(\"canvas\"),f=this.labelCalcCanvasContext=v.getContext(\"2d\");var c=v.style;c.position=\"absolute\",c.left=\"-9999px\",c.top=\"-9999px\",c.zIndex=\"-1\",c.visibility=\"hidden\",c.pointerEvents=\"none\"}f.font=\"\".concat(s,\" \").concat(u,\" \").concat(o,\"px \").concat(l);for(var h=0,d=0,y=e.split(`\n`),g=0;g<y.length;g++){var p=y[g],m=f.measureText(p),b=Math.ceil(m.width),w=o;h=Math.max(b,h),d+=w}return h+=i,d+=i,{width:h,height:d}};Gr.calculateLabelAngle=function(r,e){var t=r._private,a=t.rscratch,n=r.isEdge(),i=e?e+\"-\":\"\",s=r.pstyle(i+\"text-rotation\"),o=s.strValue;return o===\"none\"?0:n&&o===\"autorotate\"?a.labelAutoAngle:o===\"autorotate\"?0:s.pfValue};Gr.calculateLabelAngles=function(r){var e=this,t=r.isEdge(),a=r._private,n=a.rscratch;n.labelAngle=e.calculateLabelAngle(r),t&&(n.sourceLabelAngle=e.calculateLabelAngle(r,\"source\"),n.targetLabelAngle=e.calculateLabelAngle(r,\"target\"))};var wf={},Ll=28,Il=!1;wf.getNodeShape=function(r){var e=this,t=r.pstyle(\"shape\").value;if(t===\"cutrectangle\"&&(r.width()<Ll||r.height()<Ll))return Il||(Ve(\"The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead\"),Il=!0),\"rectangle\";if(r.isParent())return t===\"rectangle\"||t===\"roundrectangle\"||t===\"round-rectangle\"||t===\"cutrectangle\"||t===\"cut-rectangle\"||t===\"barrel\"?t:\"rectangle\";if(t===\"polygon\"){var a=r.pstyle(\"shape-polygon-points\").value;return e.nodeShapes.makePolygon(a).name}return t};var Xn={};Xn.registerCalculationListeners=function(){var r=this.cy,e=r.collection(),t=this,a=function(s){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),o)for(var l=0;l<s.length;l++){var u=s[l],v=u._private,f=v.rstyle;f.clean=!1,f.cleanConnected=!1}};t.binder(r).on(\"bounds.* dirty.*\",function(s){var o=s.target;a(o)}).on(\"style.* background.*\",function(s){var o=s.target;a(o,!1)});var n=function(s){if(s){var o=t.onUpdateEleCalcsFns;e.cleanStyle();for(var l=0;l<e.length;l++){var u=e[l],v=u._private.rstyle;u.isNode()&&!v.cleanConnected&&(a(u.connectedEdges()),v.cleanConnected=!0)}if(o)for(var f=0;f<o.length;f++){var c=o[f];c(s,e)}t.recalculateRenderedStyle(e),e=r.collection()}};t.flushRenderedStyleQueue=function(){n(!0)},t.beforeRender(n,t.beforeRenderPriorities.eleCalcs)};Xn.onUpdateEleCalcs=function(r){var e=this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[];e.push(r)};Xn.recalculateRenderedStyle=function(r,e){var t=function(w){return w._private.rstyle.cleanConnected};if(r.length!==0){var a=[],n=[];if(!this.destroyed){e===void 0&&(e=!0);for(var i=0;i<r.length;i++){var s=r[i],o=s._private,l=o.rstyle;s.isEdge()&&(!t(s.source())||!t(s.target()))&&(l.clean=!1),s.isEdge()&&s.isBundledBezier()&&s.parallelEdges().some(function(b){return!b._private.rstyle.clean&&b.isBundledBezier()})&&(l.clean=!1),!(e&&l.clean||s.removed())&&s.pstyle(\"display\").value!==\"none\"&&(o.group===\"nodes\"?n.push(s):a.push(s),l.clean=!0)}for(var u=0;u<n.length;u++){var v=n[u],f=v._private,c=f.rstyle,h=v.position();this.recalculateNodeLabelProjection(v),c.nodeX=h.x,c.nodeY=h.y,c.nodeW=v.pstyle(\"width\").pfValue,c.nodeH=v.pstyle(\"height\").pfValue}this.recalculateEdgeProjections(a);for(var d=0;d<a.length;d++){var y=a[d],g=y._private,p=g.rstyle,m=g.rscratch;p.srcX=m.arrowStartX,p.srcY=m.arrowStartY,p.tgtX=m.arrowEndX,p.tgtY=m.arrowEndY,p.midX=m.midX,p.midY=m.midY,p.labelAngle=m.labelAngle,p.sourceLabelAngle=m.sourceLabelAngle,p.targetLabelAngle=m.targetLabelAngle}}}};var Yn={};Yn.updateCachedGrabbedEles=function(){var r=this.cachedZSortedEles;if(r){r.drag=[],r.nondrag=[];for(var e=[],t=0;t<r.length;t++){var a=r[t],n=a._private.rscratch;a.grabbed()&&!a.isParent()?e.push(a):n.inDragLayer?r.drag.push(a):r.nondrag.push(a)}for(var t=0;t<e.length;t++){var a=e[t];r.drag.push(a)}}};Yn.invalidateCachedZSortedEles=function(){this.cachedZSortedEles=null};Yn.getCachedZSortedEles=function(r){if(r||!this.cachedZSortedEles){var e=this.cy.mutableElements().toArray();e.sort(ef),e.interactive=e.filter(function(t){return t.interactive()}),this.cachedZSortedEles=e,this.updateCachedGrabbedEles()}else e=this.cachedZSortedEles;return e};var xf={};[Mt,Bn,yr,Ga,yo,Gr,wf,Xn,Yn].forEach(function(r){be(xf,r)});var Ef={};Ef.getCachedImage=function(r,e,t){var a=this,n=a.imageCache=a.imageCache||{},i=n[r];if(i)return i.image.complete||i.image.addEventListener(\"load\",t),i.image;i=n[r]=n[r]||{};var s=i.image=new Image;s.addEventListener(\"load\",t),s.addEventListener(\"error\",function(){s.error=!0});var o=\"data:\",l=r.substring(0,o.length).toLowerCase()===o;return l||(e=e===\"null\"?null:e,s.crossOrigin=e),s.src=r,s};var ia={};ia.registerBinding=function(r,e,t,a){var n=Array.prototype.slice.apply(arguments,[1]);if(Array.isArray(r)){for(var i=[],s=0;s<r.length;s++){var o=r[s];if(o!==void 0){var l=this.binder(o);i.push(l.on.apply(l,n))}}return i}var l=this.binder(r);return l.on.apply(l,n)};ia.binder=function(r){var e=this,t=e.cy.window(),a=r===t||r===t.document||r===t.document.body||hc(r);if(e.supportsPassiveEvents==null){var n=!1;try{var i=Object.defineProperty({},\"passive\",{get:function(){return n=!0,!0}});t.addEventListener(\"test\",null,i)}catch{}e.supportsPassiveEvents=n}var s=function(l,u,v){var f=Array.prototype.slice.call(arguments);return a&&e.supportsPassiveEvents&&(f[2]={capture:v??!1,passive:!1,once:!1}),e.bindings.push({target:r,args:f}),(r.addEventListener||r.on).apply(r,f),this};return{on:s,addEventListener:s,addListener:s,bind:s}};ia.nodeIsDraggable=function(r){return r&&r.isNode()&&!r.locked()&&r.grabbable()};ia.nodeIsGrabbable=function(r){return this.nodeIsDraggable(r)&&r.interactive()};ia.load=function(){var r=this,e=r.cy.window(),t=function(S){return S.selected()},a=function(S){var _=S.getRootNode();if(_&&_.nodeType===11&&_.host!==void 0)return _},n=function(S,_,W,$){S==null&&(S=r.cy);for(var Z=0;Z<_.length;Z++){var oe=_[Z];S.emit({originalEvent:W,type:oe,position:$})}},i=function(S){return S.shiftKey||S.metaKey||S.ctrlKey},s=function(S,_){var W=!0;if(r.cy.hasCompoundNodes()&&S&&S.pannable())for(var $=0;_&&$<_.length;$++){var S=_[$];if(S.isNode()&&S.isParent()&&!S.pannable()){W=!1;break}}else W=!0;return W},o=function(S){S[0]._private.grabbed=!0},l=function(S){S[0]._private.grabbed=!1},u=function(S){S[0]._private.rscratch.inDragLayer=!0},v=function(S){S[0]._private.rscratch.inDragLayer=!1},f=function(S){S[0]._private.rscratch.isGrabTarget=!0},c=function(S){S[0]._private.rscratch.isGrabTarget=!1},h=function(S,_){var W=_.addToList,$=W.has(S);!$&&S.grabbable()&&!S.locked()&&(W.merge(S),o(S))},d=function(S,_){if(S.cy().hasCompoundNodes()&&!(_.inDragLayer==null&&_.addToList==null)){var W=S.descendants();_.inDragLayer&&(W.forEach(u),W.connectedEdges().forEach(u)),_.addToList&&h(W,_)}},y=function(S,_){_=_||{};var W=S.cy().hasCompoundNodes();_.inDragLayer&&(S.forEach(u),S.neighborhood().stdFilter(function($){return!W||$.isEdge()}).forEach(u)),_.addToList&&S.forEach(function($){h($,_)}),d(S,_),m(S,{inDragLayer:_.inDragLayer}),r.updateCachedGrabbedEles()},g=y,p=function(S){S&&(r.getCachedZSortedEles().forEach(function(_){l(_),v(_),c(_)}),r.updateCachedGrabbedEles())},m=function(S,_){if(!(_.inDragLayer==null&&_.addToList==null)&&S.cy().hasCompoundNodes()){var W=S.ancestors().orphans();if(!W.same(S)){var $=W.descendants().spawnSelf().merge(W).unmerge(S).unmerge(S.descendants()),Z=$.connectedEdges();_.inDragLayer&&(Z.forEach(u),$.forEach(u)),_.addToList&&$.forEach(function(oe){h(oe,_)})}}},b=function(){document.activeElement!=null&&document.activeElement.blur!=null&&document.activeElement.blur()},w=typeof MutationObserver<\"u\",E=typeof ResizeObserver<\"u\";w?(r.removeObserver=new MutationObserver(function(X){for(var S=0;S<X.length;S++){var _=X[S],W=_.removedNodes;if(W)for(var $=0;$<W.length;$++){var Z=W[$];if(Z===r.container){r.destroy();break}}}}),r.container.parentNode&&r.removeObserver.observe(r.container.parentNode,{childList:!0})):r.registerBinding(r.container,\"DOMNodeRemoved\",function(X){r.destroy()});var C=Fa(function(){r.cy.resize()},100);w&&(r.styleObserver=new MutationObserver(C),r.styleObserver.observe(r.container,{attributes:!0})),r.registerBinding(e,\"resize\",C),E&&(r.resizeObserver=new ResizeObserver(C),r.resizeObserver.observe(r.container));var x=function(S,_){for(;S!=null;)_(S),S=S.parentNode},T=function(){r.invalidateContainerClientCoordsCache()};x(r.container,function(X){r.registerBinding(X,\"transitionend\",T),r.registerBinding(X,\"animationend\",T),r.registerBinding(X,\"scroll\",T)}),r.registerBinding(r.container,\"contextmenu\",function(X){X.preventDefault()});var k=function(){return r.selection[4]!==0},D=function(S){for(var _=r.findContainerClientCoords(),W=_[0],$=_[1],Z=_[2],oe=_[3],ee=S.touches?S.touches:[S],ve=!1,le=0;le<ee.length;le++){var me=ee[le];if(W<=me.clientX&&me.clientX<=W+Z&&$<=me.clientY&&me.clientY<=$+oe){ve=!0;break}}if(!ve)return!1;for(var De=r.container,Te=S.target,fe=Te.parentNode,Pe=!1;fe;){if(fe===De){Pe=!0;break}fe=fe.parentNode}return!!Pe};r.registerBinding(r.container,\"mousedown\",function(S){if(D(S)&&!(r.hoverData.which===1&&S.which!==1)){S.preventDefault(),b(),r.hoverData.capture=!0,r.hoverData.which=S.which;var _=r.cy,W=[S.clientX,S.clientY],$=r.projectIntoViewport(W[0],W[1]),Z=r.selection,oe=r.findNearestElements($[0],$[1],!0,!1),ee=oe[0],ve=r.dragData.possibleDragElements;r.hoverData.mdownPos=$,r.hoverData.mdownGPos=W;var le=function(Be){return{originalEvent:S,type:Be,position:{x:$[0],y:$[1]}}},me=function(){r.hoverData.tapholdCancelled=!1,clearTimeout(r.hoverData.tapholdTimeout),r.hoverData.tapholdTimeout=setTimeout(function(){if(!r.hoverData.tapholdCancelled){var Be=r.hoverData.down;Be?Be.emit(le(\"taphold\")):_.emit(le(\"taphold\"))}},r.tapholdDuration)};if(S.which==3){r.hoverData.cxtStarted=!0;var De={originalEvent:S,type:\"cxttapstart\",position:{x:$[0],y:$[1]}};ee?(ee.activate(),ee.emit(De),r.hoverData.down=ee):_.emit(De),r.hoverData.downTime=new Date().getTime(),r.hoverData.cxtDragged=!1}else if(S.which==1){ee&&ee.activate();{if(ee!=null&&r.nodeIsGrabbable(ee)){var Te=function(Be){Be.emit(le(\"grab\"))};if(f(ee),!ee.selected())ve=r.dragData.possibleDragElements=_.collection(),g(ee,{addToList:ve}),ee.emit(le(\"grabon\")).emit(le(\"grab\"));else{ve=r.dragData.possibleDragElements=_.collection();var fe=_.$(function(Pe){return Pe.isNode()&&Pe.selected()&&r.nodeIsGrabbable(Pe)});y(fe,{addToList:ve}),ee.emit(le(\"grabon\")),fe.forEach(Te)}r.redrawHint(\"eles\",!0),r.redrawHint(\"drag\",!0)}r.hoverData.down=ee,r.hoverData.downs=oe,r.hoverData.downTime=new Date().getTime()}n(ee,[\"mousedown\",\"tapstart\",\"vmousedown\"],S,{x:$[0],y:$[1]}),ee==null?(Z[4]=1,r.data.bgActivePosistion={x:$[0],y:$[1]},r.redrawHint(\"select\",!0),r.redraw()):ee.pannable()&&(Z[4]=1),me()}Z[0]=Z[2]=$[0],Z[1]=Z[3]=$[1]}},!1);var B=a(r.container);r.registerBinding([e,B],\"mousemove\",function(S){var _=r.hoverData.capture;if(!(!_&&!D(S))){var W=!1,$=r.cy,Z=$.zoom(),oe=[S.clientX,S.clientY],ee=r.projectIntoViewport(oe[0],oe[1]),ve=r.hoverData.mdownPos,le=r.hoverData.mdownGPos,me=r.selection,De=null;!r.hoverData.draggingEles&&!r.hoverData.dragging&&!r.hoverData.selecting&&(De=r.findNearestElement(ee[0],ee[1],!0,!1));var Te=r.hoverData.last,fe=r.hoverData.down,Pe=[ee[0]-me[2],ee[1]-me[3]],Be=r.dragData.possibleDragElements,je;if(le){var Ke=oe[0]-le[0],mr=Ke*Ke,Ye=oe[1]-le[1],ir=Ye*Ye,er=mr+ir;r.hoverData.isOverThresholdDrag=je=er>=r.desktopTapThreshold2}var lr=i(S);je&&(r.hoverData.tapholdCancelled=!0);var jr=function(){var Br=r.hoverData.dragDelta=r.hoverData.dragDelta||[];Br.length===0?(Br.push(Pe[0]),Br.push(Pe[1])):(Br[0]+=Pe[0],Br[1]+=Pe[1])};W=!0,n(De,[\"mousemove\",\"vmousemove\",\"tapdrag\"],S,{x:ee[0],y:ee[1]});var Ze=function(Br){return{originalEvent:S,type:Br,position:{x:ee[0],y:ee[1]}}},Wr=function(){r.data.bgActivePosistion=void 0,r.hoverData.selecting||$.emit(Ze(\"boxstart\")),me[4]=1,r.hoverData.selecting=!0,r.redrawHint(\"select\",!0),r.redraw()};if(r.hoverData.which===3){if(je){var $r=Ze(\"cxtdrag\");fe?fe.emit($r):$.emit($r),r.hoverData.cxtDragged=!0,(!r.hoverData.cxtOver||De!==r.hoverData.cxtOver)&&(r.hoverData.cxtOver&&r.hoverData.cxtOver.emit(Ze(\"cxtdragout\")),r.hoverData.cxtOver=De,De&&De.emit(Ze(\"cxtdragover\")))}}else if(r.hoverData.dragging){if(W=!0,$.panningEnabled()&&$.userPanningEnabled()){var It;if(r.hoverData.justStartedPan){var $a=r.hoverData.mdownPos;It={x:(ee[0]-$a[0])*Z,y:(ee[1]-$a[1])*Z},r.hoverData.justStartedPan=!1}else It={x:Pe[0]*Z,y:Pe[1]*Z};$.panBy(It),$.emit(Ze(\"dragpan\")),r.hoverData.dragged=!0}ee=r.projectIntoViewport(S.clientX,S.clientY)}else if(me[4]==1&&(fe==null||fe.pannable())){if(je){if(!r.hoverData.dragging&&$.boxSelectionEnabled()&&(lr||!$.panningEnabled()||!$.userPanningEnabled()))Wr();else if(!r.hoverData.selecting&&$.panningEnabled()&&$.userPanningEnabled()){var bt=s(fe,r.hoverData.downs);bt&&(r.hoverData.dragging=!0,r.hoverData.justStartedPan=!0,me[4]=0,r.data.bgActivePosistion=Wt(ve),r.redrawHint(\"select\",!0),r.redraw())}fe&&fe.pannable()&&fe.active()&&fe.unactivate()}}else{if(fe&&fe.pannable()&&fe.active()&&fe.unactivate(),(!fe||!fe.grabbed())&&De!=Te&&(Te&&n(Te,[\"mouseout\",\"tapdragout\"],S,{x:ee[0],y:ee[1]}),De&&n(De,[\"mouseover\",\"tapdragover\"],S,{x:ee[0],y:ee[1]}),r.hoverData.last=De),fe)if(je){if($.boxSelectionEnabled()&&lr)fe&&fe.grabbed()&&(p(Be),fe.emit(Ze(\"freeon\")),Be.emit(Ze(\"free\")),r.dragData.didDrag&&(fe.emit(Ze(\"dragfreeon\")),Be.emit(Ze(\"dragfree\")))),Wr();else if(fe&&fe.grabbed()&&r.nodeIsDraggable(fe)){var Er=!r.dragData.didDrag;Er&&r.redrawHint(\"eles\",!0),r.dragData.didDrag=!0,r.hoverData.draggingEles||y(Be,{inDragLayer:!0});var hr={x:0,y:0};if(ae(Pe[0])&&ae(Pe[1])&&(hr.x+=Pe[0],hr.y+=Pe[1],Er)){var Cr=r.hoverData.dragDelta;Cr&&ae(Cr[0])&&ae(Cr[1])&&(hr.x+=Cr[0],hr.y+=Cr[1])}r.hoverData.draggingEles=!0,Be.silentShift(hr).emit(Ze(\"position\")).emit(Ze(\"drag\")),r.redrawHint(\"drag\",!0),r.redraw()}}else jr();W=!0}if(me[2]=ee[0],me[3]=ee[1],W)return S.stopPropagation&&S.stopPropagation(),S.preventDefault&&S.preventDefault(),!1}},!1);var P,A,R;r.registerBinding(e,\"mouseup\",function(S){if(!(r.hoverData.which===1&&S.which!==1&&r.hoverData.capture)){var _=r.hoverData.capture;if(_){r.hoverData.capture=!1;var W=r.cy,$=r.projectIntoViewport(S.clientX,S.clientY),Z=r.selection,oe=r.findNearestElement($[0],$[1],!0,!1),ee=r.dragData.possibleDragElements,ve=r.hoverData.down,le=i(S);r.data.bgActivePosistion&&(r.redrawHint(\"select\",!0),r.redraw()),r.hoverData.tapholdCancelled=!0,r.data.bgActivePosistion=void 0,ve&&ve.unactivate();var me=function(Ke){return{originalEvent:S,type:Ke,position:{x:$[0],y:$[1]}}};if(r.hoverData.which===3){var De=me(\"cxttapend\");if(ve?ve.emit(De):W.emit(De),!r.hoverData.cxtDragged){var Te=me(\"cxttap\");ve?ve.emit(Te):W.emit(Te)}r.hoverData.cxtDragged=!1,r.hoverData.which=null}else if(r.hoverData.which===1){if(n(oe,[\"mouseup\",\"tapend\",\"vmouseup\"],S,{x:$[0],y:$[1]}),!r.dragData.didDrag&&!r.hoverData.dragged&&!r.hoverData.selecting&&!r.hoverData.isOverThresholdDrag&&(n(ve,[\"click\",\"tap\",\"vclick\"],S,{x:$[0],y:$[1]}),A=!1,S.timeStamp-R<=W.multiClickDebounceTime()?(P&&clearTimeout(P),A=!0,R=null,n(ve,[\"dblclick\",\"dbltap\",\"vdblclick\"],S,{x:$[0],y:$[1]})):(P=setTimeout(function(){A||n(ve,[\"oneclick\",\"onetap\",\"voneclick\"],S,{x:$[0],y:$[1]})},W.multiClickDebounceTime()),R=S.timeStamp)),ve==null&&!r.dragData.didDrag&&!r.hoverData.selecting&&!r.hoverData.dragged&&!i(S)&&(W.$(t).unselect([\"tapunselect\"]),ee.length>0&&r.redrawHint(\"eles\",!0),r.dragData.possibleDragElements=ee=W.collection()),oe==ve&&!r.dragData.didDrag&&!r.hoverData.selecting&&oe!=null&&oe._private.selectable&&(r.hoverData.dragging||(W.selectionType()===\"additive\"||le?oe.selected()?oe.unselect([\"tapunselect\"]):oe.select([\"tapselect\"]):le||(W.$(t).unmerge(oe).unselect([\"tapunselect\"]),oe.select([\"tapselect\"]))),r.redrawHint(\"eles\",!0)),r.hoverData.selecting){var fe=W.collection(r.getAllInBox(Z[0],Z[1],Z[2],Z[3]));r.redrawHint(\"select\",!0),fe.length>0&&r.redrawHint(\"eles\",!0),W.emit(me(\"boxend\"));var Pe=function(Ke){return Ke.selectable()&&!Ke.selected()};W.selectionType()===\"additive\"||le||W.$(t).unmerge(fe).unselect(),fe.emit(me(\"box\")).stdFilter(Pe).select().emit(me(\"boxselect\")),r.redraw()}if(r.hoverData.dragging&&(r.hoverData.dragging=!1,r.redrawHint(\"select\",!0),r.redrawHint(\"eles\",!0),r.redraw()),!Z[4]){r.redrawHint(\"drag\",!0),r.redrawHint(\"eles\",!0);var Be=ve&&ve.grabbed();p(ee),Be&&(ve.emit(me(\"freeon\")),ee.emit(me(\"free\")),r.dragData.didDrag&&(ve.emit(me(\"dragfreeon\")),ee.emit(me(\"dragfree\"))))}}Z[4]=0,r.hoverData.down=null,r.hoverData.cxtStarted=!1,r.hoverData.draggingEles=!1,r.hoverData.selecting=!1,r.hoverData.isOverThresholdDrag=!1,r.dragData.didDrag=!1,r.hoverData.dragged=!1,r.hoverData.dragDelta=[],r.hoverData.mdownPos=null,r.hoverData.mdownGPos=null,r.hoverData.which=null}}},!1);var L=[],I=4,M,O=1e5,V=function(S,_){for(var W=0;W<S.length;W++)if(S[W]%_!==0)return!1;return!0},G=function(S){for(var _=Math.abs(S[0]),W=1;W<S.length;W++)if(Math.abs(S[W])!==_)return!1;return!0},N=function(S){var _=!1,W=S.deltaY;if(W==null&&(S.wheelDeltaY!=null?W=S.wheelDeltaY/4:S.wheelDelta!=null&&(W=S.wheelDelta/4)),W!==0){if(M==null)if(L.length>=I){var $=L;if(M=V($,5),!M){var Z=Math.abs($[0]);M=G($)&&Z>5}if(M)for(var oe=0;oe<$.length;oe++)O=Math.min(Math.abs($[oe]),O)}else L.push(W),_=!0;else M&&(O=Math.min(Math.abs(W),O));if(!r.scrollingPage){var ee=r.cy,ve=ee.zoom(),le=ee.pan(),me=r.projectIntoViewport(S.clientX,S.clientY),De=[me[0]*ve+le.x,me[1]*ve+le.y];if(r.hoverData.draggingEles||r.hoverData.dragging||r.hoverData.cxtStarted||k()){S.preventDefault();return}if(ee.panningEnabled()&&ee.userPanningEnabled()&&ee.zoomingEnabled()&&ee.userZoomingEnabled()){S.preventDefault(),r.data.wheelZooming=!0,clearTimeout(r.data.wheelTimeout),r.data.wheelTimeout=setTimeout(function(){r.data.wheelZooming=!1,r.redrawHint(\"eles\",!0),r.redraw()},150);var Te;_&&Math.abs(W)>5&&(W=to(W)*5),Te=W/-250,M&&(Te/=O,Te*=3),Te=Te*r.wheelSensitivity;var fe=S.deltaMode===1;fe&&(Te*=33);var Pe=ee.zoom()*Math.pow(10,Te);S.type===\"gesturechange\"&&(Pe=r.gestureStartZoom*S.scale),ee.zoom({level:Pe,renderedPosition:{x:De[0],y:De[1]}}),ee.emit({type:S.type===\"gesturechange\"?\"pinchzoom\":\"scrollzoom\",originalEvent:S,position:{x:me[0],y:me[1]}})}}}};r.registerBinding(r.container,\"wheel\",N,!0),r.registerBinding(e,\"scroll\",function(S){r.scrollingPage=!0,clearTimeout(r.scrollingPageTimeout),r.scrollingPageTimeout=setTimeout(function(){r.scrollingPage=!1},250)},!0),r.registerBinding(r.container,\"gesturestart\",function(S){r.gestureStartZoom=r.cy.zoom(),r.hasTouchStarted||S.preventDefault()},!0),r.registerBinding(r.container,\"gesturechange\",function(X){r.hasTouchStarted||N(X)},!0),r.registerBinding(r.container,\"mouseout\",function(S){var _=r.projectIntoViewport(S.clientX,S.clientY);r.cy.emit({originalEvent:S,type:\"mouseout\",position:{x:_[0],y:_[1]}})},!1),r.registerBinding(r.container,\"mouseover\",function(S){var _=r.projectIntoViewport(S.clientX,S.clientY);r.cy.emit({originalEvent:S,type:\"mouseover\",position:{x:_[0],y:_[1]}})},!1);var F,U,Q,K,j,re,ne,J,z,q,H,Y,te,ce=function(S,_,W,$){return Math.sqrt((W-S)*(W-S)+($-_)*($-_))},Ae=function(S,_,W,$){return(W-S)*(W-S)+($-_)*($-_)},Ce;r.registerBinding(r.container,\"touchstart\",Ce=function(S){if(r.hasTouchStarted=!0,!!D(S)){b(),r.touchData.capture=!0,r.data.bgActivePosistion=void 0;var _=r.cy,W=r.touchData.now,$=r.touchData.earlier;if(S.touches[0]){var Z=r.projectIntoViewport(S.touches[0].clientX,S.touches[0].clientY);W[0]=Z[0],W[1]=Z[1]}if(S.touches[1]){var Z=r.projectIntoViewport(S.touches[1].clientX,S.touches[1].clientY);W[2]=Z[0],W[3]=Z[1]}if(S.touches[2]){var Z=r.projectIntoViewport(S.touches[2].clientX,S.touches[2].clientY);W[4]=Z[0],W[5]=Z[1]}var oe=function(lr){return{originalEvent:S,type:lr,position:{x:W[0],y:W[1]}}};if(S.touches[1]){r.touchData.singleTouchMoved=!0,p(r.dragData.touchDragEles);var ee=r.findContainerClientCoords();z=ee[0],q=ee[1],H=ee[2],Y=ee[3],F=S.touches[0].clientX-z,U=S.touches[0].clientY-q,Q=S.touches[1].clientX-z,K=S.touches[1].clientY-q,te=0<=F&&F<=H&&0<=Q&&Q<=H&&0<=U&&U<=Y&&0<=K&&K<=Y;var ve=_.pan(),le=_.zoom();j=ce(F,U,Q,K),re=Ae(F,U,Q,K),ne=[(F+Q)/2,(U+K)/2],J=[(ne[0]-ve.x)/le,(ne[1]-ve.y)/le];var me=200,De=me*me;if(re<De&&!S.touches[2]){var Te=r.findNearestElement(W[0],W[1],!0,!0),fe=r.findNearestElement(W[2],W[3],!0,!0);Te&&Te.isNode()?(Te.activate().emit(oe(\"cxttapstart\")),r.touchData.start=Te):fe&&fe.isNode()?(fe.activate().emit(oe(\"cxttapstart\")),r.touchData.start=fe):_.emit(oe(\"cxttapstart\")),r.touchData.start&&(r.touchData.start._private.grabbed=!1),r.touchData.cxt=!0,r.touchData.cxtDragged=!1,r.data.bgActivePosistion=void 0,r.redraw();return}}if(S.touches[2])_.boxSelectionEnabled()&&S.preventDefault();else if(!S.touches[1]){if(S.touches[0]){var Pe=r.findNearestElements(W[0],W[1],!0,!0),Be=Pe[0];if(Be!=null&&(Be.activate(),r.touchData.start=Be,r.touchData.starts=Pe,r.nodeIsGrabbable(Be))){var je=r.dragData.touchDragEles=_.collection(),Ke=null;r.redrawHint(\"eles\",!0),r.redrawHint(\"drag\",!0),Be.selected()?(Ke=_.$(function(er){return er.selected()&&r.nodeIsGrabbable(er)}),y(Ke,{addToList:je})):g(Be,{addToList:je}),f(Be),Be.emit(oe(\"grabon\")),Ke?Ke.forEach(function(er){er.emit(oe(\"grab\"))}):Be.emit(oe(\"grab\"))}n(Be,[\"touchstart\",\"tapstart\",\"vmousedown\"],S,{x:W[0],y:W[1]}),Be==null&&(r.data.bgActivePosistion={x:Z[0],y:Z[1]},r.redrawHint(\"select\",!0),r.redraw()),r.touchData.singleTouchMoved=!1,r.touchData.singleTouchStartTime=+new Date,clearTimeout(r.touchData.tapholdTimeout),r.touchData.tapholdTimeout=setTimeout(function(){r.touchData.singleTouchMoved===!1&&!r.pinching&&!r.touchData.selecting&&n(r.touchData.start,[\"taphold\"],S,{x:W[0],y:W[1]})},r.tapholdDuration)}}if(S.touches.length>=1){for(var mr=r.touchData.startPosition=[null,null,null,null,null,null],Ye=0;Ye<W.length;Ye++)mr[Ye]=$[Ye]=W[Ye];var ir=S.touches[0];r.touchData.startGPosition=[ir.clientX,ir.clientY]}}},!1);var we;r.registerBinding(e,\"touchmove\",we=function(S){var _=r.touchData.capture;if(!(!_&&!D(S))){var W=r.selection,$=r.cy,Z=r.touchData.now,oe=r.touchData.earlier,ee=$.zoom();if(S.touches[0]){var ve=r.projectIntoViewport(S.touches[0].clientX,S.touches[0].clientY);Z[0]=ve[0],Z[1]=ve[1]}if(S.touches[1]){var ve=r.projectIntoViewport(S.touches[1].clientX,S.touches[1].clientY);Z[2]=ve[0],Z[3]=ve[1]}if(S.touches[2]){var ve=r.projectIntoViewport(S.touches[2].clientX,S.touches[2].clientY);Z[4]=ve[0],Z[5]=ve[1]}var le=function(jf){return{originalEvent:S,type:jf,position:{x:Z[0],y:Z[1]}}},me=r.touchData.startGPosition,De;if(_&&S.touches[0]&&me){for(var Te=[],fe=0;fe<Z.length;fe++)Te[fe]=Z[fe]-oe[fe];var Pe=S.touches[0].clientX-me[0],Be=Pe*Pe,je=S.touches[0].clientY-me[1],Ke=je*je,mr=Be+Ke;De=mr>=r.touchTapThreshold2}if(_&&r.touchData.cxt){S.preventDefault();var Ye=S.touches[0].clientX-z,ir=S.touches[0].clientY-q,er=S.touches[1].clientX-z,lr=S.touches[1].clientY-q,jr=Ae(Ye,ir,er,lr),Ze=jr/re,Wr=150,$r=Wr*Wr,It=1.5,$a=It*It;if(Ze>=$a||jr>=$r){r.touchData.cxt=!1,r.data.bgActivePosistion=void 0,r.redrawHint(\"select\",!0);var bt=le(\"cxttapend\");r.touchData.start?(r.touchData.start.unactivate().emit(bt),r.touchData.start=null):$.emit(bt)}}if(_&&r.touchData.cxt){var bt=le(\"cxtdrag\");r.data.bgActivePosistion=void 0,r.redrawHint(\"select\",!0),r.touchData.start?r.touchData.start.emit(bt):$.emit(bt),r.touchData.start&&(r.touchData.start._private.grabbed=!1),r.touchData.cxtDragged=!0;var Er=r.findNearestElement(Z[0],Z[1],!0,!0);(!r.touchData.cxtOver||Er!==r.touchData.cxtOver)&&(r.touchData.cxtOver&&r.touchData.cxtOver.emit(le(\"cxtdragout\")),r.touchData.cxtOver=Er,Er&&Er.emit(le(\"cxtdragover\")))}else if(_&&S.touches[2]&&$.boxSelectionEnabled())S.preventDefault(),r.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,r.touchData.selecting||$.emit(le(\"boxstart\")),r.touchData.selecting=!0,r.touchData.didSelect=!0,W[4]=1,!W||W.length===0||W[0]===void 0?(W[0]=(Z[0]+Z[2]+Z[4])/3,W[1]=(Z[1]+Z[3]+Z[5])/3,W[2]=(Z[0]+Z[2]+Z[4])/3+1,W[3]=(Z[1]+Z[3]+Z[5])/3+1):(W[2]=(Z[0]+Z[2]+Z[4])/3,W[3]=(Z[1]+Z[3]+Z[5])/3),r.redrawHint(\"select\",!0),r.redraw();else if(_&&S.touches[1]&&!r.touchData.didSelect&&$.zoomingEnabled()&&$.panningEnabled()&&$.userZoomingEnabled()&&$.userPanningEnabled()){S.preventDefault(),r.data.bgActivePosistion=void 0,r.redrawHint(\"select\",!0);var hr=r.dragData.touchDragEles;if(hr){r.redrawHint(\"drag\",!0);for(var Cr=0;Cr<hr.length;Cr++){var oa=hr[Cr]._private;oa.grabbed=!1,oa.rscratch.inDragLayer=!1}}var Br=r.touchData.start,Ye=S.touches[0].clientX-z,ir=S.touches[0].clientY-q,er=S.touches[1].clientX-z,lr=S.touches[1].clientY-q,wo=ce(Ye,ir,er,lr),Wf=wo/j;if(te){var $f=Ye-F,Uf=ir-U,Kf=er-Q,Xf=lr-K,Yf=($f+Kf)/2,Zf=(Uf+Xf)/2,ua=$.zoom(),Zn=ua*Wf,Ua=$.pan(),xo=J[0]*ua+Ua.x,Eo=J[1]*ua+Ua.y,Qf={x:-Zn/ua*(xo-Ua.x-Yf)+xo,y:-Zn/ua*(Eo-Ua.y-Zf)+Eo};if(Br&&Br.active()){var hr=r.dragData.touchDragEles;p(hr),r.redrawHint(\"drag\",!0),r.redrawHint(\"eles\",!0),Br.unactivate().emit(le(\"freeon\")),hr.emit(le(\"free\")),r.dragData.didDrag&&(Br.emit(le(\"dragfreeon\")),hr.emit(le(\"dragfree\")))}$.viewport({zoom:Zn,pan:Qf,cancelOnFailedZoom:!0}),$.emit(le(\"pinchzoom\")),j=wo,F=Ye,U=ir,Q=er,K=lr,r.pinching=!0}if(S.touches[0]){var ve=r.projectIntoViewport(S.touches[0].clientX,S.touches[0].clientY);Z[0]=ve[0],Z[1]=ve[1]}if(S.touches[1]){var ve=r.projectIntoViewport(S.touches[1].clientX,S.touches[1].clientY);Z[2]=ve[0],Z[3]=ve[1]}if(S.touches[2]){var ve=r.projectIntoViewport(S.touches[2].clientX,S.touches[2].clientY);Z[4]=ve[0],Z[5]=ve[1]}}else if(S.touches[0]&&!r.touchData.didSelect){var Mr=r.touchData.start,Qn=r.touchData.last,Er;if(!r.hoverData.draggingEles&&!r.swipePanning&&(Er=r.findNearestElement(Z[0],Z[1],!0,!0)),_&&Mr!=null&&S.preventDefault(),_&&Mr!=null&&r.nodeIsDraggable(Mr))if(De){var hr=r.dragData.touchDragEles,Co=!r.dragData.didDrag;Co&&y(hr,{inDragLayer:!0}),r.dragData.didDrag=!0;var la={x:0,y:0};if(ae(Te[0])&&ae(Te[1])&&(la.x+=Te[0],la.y+=Te[1],Co)){r.redrawHint(\"eles\",!0);var Lr=r.touchData.dragDelta;Lr&&ae(Lr[0])&&ae(Lr[1])&&(la.x+=Lr[0],la.y+=Lr[1])}r.hoverData.draggingEles=!0,hr.silentShift(la).emit(le(\"position\")).emit(le(\"drag\")),r.redrawHint(\"drag\",!0),r.touchData.startPosition[0]==oe[0]&&r.touchData.startPosition[1]==oe[1]&&r.redrawHint(\"eles\",!0),r.redraw()}else{var Lr=r.touchData.dragDelta=r.touchData.dragDelta||[];Lr.length===0?(Lr.push(Te[0]),Lr.push(Te[1])):(Lr[0]+=Te[0],Lr[1]+=Te[1])}if(n(Mr||Er,[\"touchmove\",\"tapdrag\",\"vmousemove\"],S,{x:Z[0],y:Z[1]}),(!Mr||!Mr.grabbed())&&Er!=Qn&&(Qn&&Qn.emit(le(\"tapdragout\")),Er&&Er.emit(le(\"tapdragover\"))),r.touchData.last=Er,_)for(var Cr=0;Cr<Z.length;Cr++)Z[Cr]&&r.touchData.startPosition[Cr]&&De&&(r.touchData.singleTouchMoved=!0);if(_&&(Mr==null||Mr.pannable())&&$.panningEnabled()&&$.userPanningEnabled()){var Jf=s(Mr,r.touchData.starts);Jf&&(S.preventDefault(),r.data.bgActivePosistion||(r.data.bgActivePosistion=Wt(r.touchData.startPosition)),r.swipePanning?($.panBy({x:Te[0]*ee,y:Te[1]*ee}),$.emit(le(\"dragpan\"))):De&&(r.swipePanning=!0,$.panBy({x:Pe*ee,y:je*ee}),$.emit(le(\"dragpan\")),Mr&&(Mr.unactivate(),r.redrawHint(\"select\",!0),r.touchData.start=null)));var ve=r.projectIntoViewport(S.touches[0].clientX,S.touches[0].clientY);Z[0]=ve[0],Z[1]=ve[1]}}for(var fe=0;fe<Z.length;fe++)oe[fe]=Z[fe];_&&S.touches.length>0&&!r.hoverData.draggingEles&&!r.swipePanning&&r.data.bgActivePosistion!=null&&(r.data.bgActivePosistion=void 0,r.redrawHint(\"select\",!0),r.redraw())}},!1);var ye;r.registerBinding(e,\"touchcancel\",ye=function(S){var _=r.touchData.start;r.touchData.capture=!1,_&&_.unactivate()});var ie,de,he,Ee;if(r.registerBinding(e,\"touchend\",ie=function(S){var _=r.touchData.start,W=r.touchData.capture;if(W)S.touches.length===0&&(r.touchData.capture=!1),S.preventDefault();else return;var $=r.selection;r.swipePanning=!1,r.hoverData.draggingEles=!1;var Z=r.cy,oe=Z.zoom(),ee=r.touchData.now,ve=r.touchData.earlier;if(S.touches[0]){var le=r.projectIntoViewport(S.touches[0].clientX,S.touches[0].clientY);ee[0]=le[0],ee[1]=le[1]}if(S.touches[1]){var le=r.projectIntoViewport(S.touches[1].clientX,S.touches[1].clientY);ee[2]=le[0],ee[3]=le[1]}if(S.touches[2]){var le=r.projectIntoViewport(S.touches[2].clientX,S.touches[2].clientY);ee[4]=le[0],ee[5]=le[1]}var me=function($r){return{originalEvent:S,type:$r,position:{x:ee[0],y:ee[1]}}};_&&_.unactivate();var De;if(r.touchData.cxt){if(De=me(\"cxttapend\"),_?_.emit(De):Z.emit(De),!r.touchData.cxtDragged){var Te=me(\"cxttap\");_?_.emit(Te):Z.emit(Te)}r.touchData.start&&(r.touchData.start._private.grabbed=!1),r.touchData.cxt=!1,r.touchData.start=null,r.redraw();return}if(!S.touches[2]&&Z.boxSelectionEnabled()&&r.touchData.selecting){r.touchData.selecting=!1;var fe=Z.collection(r.getAllInBox($[0],$[1],$[2],$[3]));$[0]=void 0,$[1]=void 0,$[2]=void 0,$[3]=void 0,$[4]=0,r.redrawHint(\"select\",!0),Z.emit(me(\"boxend\"));var Pe=function($r){return $r.selectable()&&!$r.selected()};fe.emit(me(\"box\")).stdFilter(Pe).select().emit(me(\"boxselect\")),fe.nonempty()&&r.redrawHint(\"eles\",!0),r.redraw()}if(_?.unactivate(),S.touches[2])r.data.bgActivePosistion=void 0,r.redrawHint(\"select\",!0);else if(!S.touches[1]){if(!S.touches[0]){if(!S.touches[0]){r.data.bgActivePosistion=void 0,r.redrawHint(\"select\",!0);var Be=r.dragData.touchDragEles;if(_!=null){var je=_._private.grabbed;p(Be),r.redrawHint(\"drag\",!0),r.redrawHint(\"eles\",!0),je&&(_.emit(me(\"freeon\")),Be.emit(me(\"free\")),r.dragData.didDrag&&(_.emit(me(\"dragfreeon\")),Be.emit(me(\"dragfree\")))),n(_,[\"touchend\",\"tapend\",\"vmouseup\",\"tapdragout\"],S,{x:ee[0],y:ee[1]}),_.unactivate(),r.touchData.start=null}else{var Ke=r.findNearestElement(ee[0],ee[1],!0,!0);n(Ke,[\"touchend\",\"tapend\",\"vmouseup\",\"tapdragout\"],S,{x:ee[0],y:ee[1]})}var mr=r.touchData.startPosition[0]-ee[0],Ye=mr*mr,ir=r.touchData.startPosition[1]-ee[1],er=ir*ir,lr=Ye+er,jr=lr*oe*oe;r.touchData.singleTouchMoved||(_||Z.$(\":selected\").unselect([\"tapunselect\"]),n(_,[\"tap\",\"vclick\"],S,{x:ee[0],y:ee[1]}),de=!1,S.timeStamp-Ee<=Z.multiClickDebounceTime()?(he&&clearTimeout(he),de=!0,Ee=null,n(_,[\"dbltap\",\"vdblclick\"],S,{x:ee[0],y:ee[1]})):(he=setTimeout(function(){de||n(_,[\"onetap\",\"voneclick\"],S,{x:ee[0],y:ee[1]})},Z.multiClickDebounceTime()),Ee=S.timeStamp)),_!=null&&!r.dragData.didDrag&&_._private.selectable&&jr<r.touchTapThreshold2&&!r.pinching&&(Z.selectionType()===\"single\"?(Z.$(t).unmerge(_).unselect([\"tapunselect\"]),_.select([\"tapselect\"])):_.selected()?_.unselect([\"tapunselect\"]):_.select([\"tapselect\"]),r.redrawHint(\"eles\",!0)),r.touchData.singleTouchMoved=!0}}}for(var Ze=0;Ze<ee.length;Ze++)ve[Ze]=ee[Ze];r.dragData.didDrag=!1,S.touches.length===0&&(r.touchData.dragDelta=[],r.touchData.startPosition=[null,null,null,null,null,null],r.touchData.startGPosition=null,r.touchData.didSelect=!1),S.touches.length<2&&(S.touches.length===1&&(r.touchData.startGPosition=[S.touches[0].clientX,S.touches[0].clientY]),r.pinching=!1,r.redrawHint(\"eles\",!0),r.redraw())},!1),typeof TouchEvent>\"u\"){var pe=[],Se=function(S){return{clientX:S.clientX,clientY:S.clientY,force:1,identifier:S.pointerId,pageX:S.pageX,pageY:S.pageY,radiusX:S.width/2,radiusY:S.height/2,screenX:S.screenX,screenY:S.screenY,target:S.target}},Re=function(S){return{event:S,touch:Se(S)}},Oe=function(S){pe.push(Re(S))},Ne=function(S){for(var _=0;_<pe.length;_++){var W=pe[_];if(W.event.pointerId===S.pointerId){pe.splice(_,1);return}}},ze=function(S){var _=pe.filter(function(W){return W.event.pointerId===S.pointerId})[0];_.event=S,_.touch=Se(S)},xe=function(S){S.touches=pe.map(function(_){return _.touch})},ue=function(S){return S.pointerType===\"mouse\"||S.pointerType===4};r.registerBinding(r.container,\"pointerdown\",function(X){ue(X)||(X.preventDefault(),Oe(X),xe(X),Ce(X))}),r.registerBinding(r.container,\"pointerup\",function(X){ue(X)||(Ne(X),xe(X),ie(X))}),r.registerBinding(r.container,\"pointercancel\",function(X){ue(X)||(Ne(X),xe(X),ye(X))}),r.registerBinding(r.container,\"pointermove\",function(X){ue(X)||(X.preventDefault(),ze(X),xe(X),we(X))})}};var Qr={};Qr.generatePolygon=function(r,e){return this.nodeShapes[r]={renderer:this,name:r,points:e,draw:function(a,n,i,s,o,l){this.renderer.nodeShapeImpl(\"polygon\",a,n,i,s,o,this.points)},intersectLine:function(a,n,i,s,o,l,u,v){return Da(o,l,this.points,a,n,i/2,s/2,u)},checkPoint:function(a,n,i,s,o,l,u,v){return Zr(a,n,this.points,l,u,s,o,[0,-1],i)},hasMiterBounds:r!==\"rectangle\",miterBounds:function(a,n,i,s,o,l){return Ad(this.points,a,n,i,s,o)}}};Qr.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:\"ellipse\",draw:function(e,t,a,n,i,s){this.renderer.nodeShapeImpl(this.name,e,t,a,n,i)},intersectLine:function(e,t,a,n,i,s,o,l){return Fd(i,s,e,t,a/2+o,n/2+o)},checkPoint:function(e,t,a,n,i,s,o,l){return kt(e,t,n,i,s,o,a)}}};Qr.generateRoundPolygon=function(r,e){return this.nodeShapes[r]={renderer:this,name:r,points:e,getOrCreateCorners:function(a,n,i,s,o,l,u){if(l[u]!==void 0&&l[u+\"-cx\"]===a&&l[u+\"-cy\"]===n)return l[u];l[u]=new Array(e.length/2),l[u+\"-cx\"]=a,l[u+\"-cy\"]=n;var v=i/2,f=s/2;o=o===\"auto\"?Ev(i,s):o;for(var c=new Array(e.length/2),h=0;h<e.length/2;h++)c[h]={x:a+v*e[h*2],y:n+f*e[h*2+1]};var d,y,g,p,m=c.length;for(y=c[m-1],d=0;d<m;d++)g=c[d%m],p=c[(d+1)%m],l[u][d]=po(y,g,p,o),y=g,g=p;return l[u]},draw:function(a,n,i,s,o,l,u){this.renderer.nodeShapeImpl(\"round-polygon\",a,n,i,s,o,this.points,this.getOrCreateCorners(n,i,s,o,l,u,\"drawCorners\"))},intersectLine:function(a,n,i,s,o,l,u,v,f){return qd(o,l,this.points,a,n,i,s,u,this.getOrCreateCorners(a,n,i,s,v,f,\"corners\"))},checkPoint:function(a,n,i,s,o,l,u,v,f){return zd(a,n,this.points,l,u,s,o,this.getOrCreateCorners(l,u,s,o,v,f,\"corners\"))}}};Qr.generateRoundRectangle=function(){return this.nodeShapes[\"round-rectangle\"]=this.nodeShapes.roundrectangle={renderer:this,name:\"round-rectangle\",points:br(4,0),draw:function(e,t,a,n,i,s){this.renderer.nodeShapeImpl(this.name,e,t,a,n,i,this.points,s)},intersectLine:function(e,t,a,n,i,s,o,l){return wv(i,s,e,t,a,n,o,l)},checkPoint:function(e,t,a,n,i,s,o,l){var u=n/2,v=i/2;l=l===\"auto\"?vt(n,i):l,l=Math.min(u,v,l);var f=l*2;return!!(Zr(e,t,this.points,s,o,n,i-f,[0,-1],a)||Zr(e,t,this.points,s,o,n-f,i,[0,-1],a)||kt(e,t,f,f,s-u+l,o-v+l,a)||kt(e,t,f,f,s+u-l,o-v+l,a)||kt(e,t,f,f,s+u-l,o+v-l,a)||kt(e,t,f,f,s-u+l,o+v-l,a))}}};Qr.generateCutRectangle=function(){return this.nodeShapes[\"cut-rectangle\"]=this.nodeShapes.cutrectangle={renderer:this,name:\"cut-rectangle\",cornerLength:no(),points:br(4,0),draw:function(e,t,a,n,i,s){this.renderer.nodeShapeImpl(this.name,e,t,a,n,i,null,s)},generateCutTrianglePts:function(e,t,a,n,i){var s=i===\"auto\"?this.cornerLength:i,o=t/2,l=e/2,u=a-l,v=a+l,f=n-o,c=n+o;return{topLeft:[u,f+s,u+s,f,u+s,f+s],topRight:[v-s,f,v,f+s,v-s,f+s],bottomRight:[v,c-s,v-s,c,v-s,c-s],bottomLeft:[u+s,c,u,c-s,u+s,c-s]}},intersectLine:function(e,t,a,n,i,s,o,l){var u=this.generateCutTrianglePts(a+2*o,n+2*o,e,t,l),v=[].concat.apply([],[u.topLeft.splice(0,4),u.topRight.splice(0,4),u.bottomRight.splice(0,4),u.bottomLeft.splice(0,4)]);return Da(i,s,v,e,t)},checkPoint:function(e,t,a,n,i,s,o,l){var u=l===\"auto\"?this.cornerLength:l;if(Zr(e,t,this.points,s,o,n,i-2*u,[0,-1],a)||Zr(e,t,this.points,s,o,n-2*u,i,[0,-1],a))return!0;var v=this.generateCutTrianglePts(n,i,s,o);return Sr(e,t,v.topLeft)||Sr(e,t,v.topRight)||Sr(e,t,v.bottomRight)||Sr(e,t,v.bottomLeft)}}};Qr.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:\"barrel\",points:br(4,0),draw:function(e,t,a,n,i,s){this.renderer.nodeShapeImpl(this.name,e,t,a,n,i)},intersectLine:function(e,t,a,n,i,s,o,l){var u=.15,v=.5,f=.85,c=this.generateBarrelBezierPts(a+2*o,n+2*o,e,t),h=function(g){var p=Kt({x:g[0],y:g[1]},{x:g[2],y:g[3]},{x:g[4],y:g[5]},u),m=Kt({x:g[0],y:g[1]},{x:g[2],y:g[3]},{x:g[4],y:g[5]},v),b=Kt({x:g[0],y:g[1]},{x:g[2],y:g[3]},{x:g[4],y:g[5]},f);return[g[0],g[1],p.x,p.y,m.x,m.y,b.x,b.y,g[4],g[5]]},d=[].concat(h(c.topLeft),h(c.topRight),h(c.bottomRight),h(c.bottomLeft));return Da(i,s,d,e,t)},generateBarrelBezierPts:function(e,t,a,n){var i=t/2,s=e/2,o=a-s,l=a+s,u=n-i,v=n+i,f=As(e,t),c=f.heightOffset,h=f.widthOffset,d=f.ctrlPtOffsetPct*e,y={topLeft:[o,u+c,o+d,u,o+h,u],topRight:[l-h,u,l-d,u,l,u+c],bottomRight:[l,v-c,l-d,v,l-h,v],bottomLeft:[o+h,v,o+d,v,o,v-c]};return y.topLeft.isTop=!0,y.topRight.isTop=!0,y.bottomLeft.isBottom=!0,y.bottomRight.isBottom=!0,y},checkPoint:function(e,t,a,n,i,s,o,l){var u=As(n,i),v=u.heightOffset,f=u.widthOffset;if(Zr(e,t,this.points,s,o,n,i-2*v,[0,-1],a)||Zr(e,t,this.points,s,o,n-2*f,i,[0,-1],a))return!0;for(var c=this.generateBarrelBezierPts(n,i,s,o),h=function(T,k,D){var B=D[4],P=D[2],A=D[0],R=D[5],L=D[1],I=Math.min(B,A),M=Math.max(B,A),O=Math.min(R,L),V=Math.max(R,L);if(I<=T&&T<=M&&O<=k&&k<=V){var G=_d(B,P,A),N=Ld(G[0],G[1],G[2],T),F=N.filter(function(U){return 0<=U&&U<=1});if(F.length>0)return F[0]}return null},d=Object.keys(c),y=0;y<d.length;y++){var g=d[y],p=c[g],m=h(e,t,p);if(m!=null){var b=p[5],w=p[3],E=p[1],C=sr(b,w,E,m);if(p.isTop&&C<=t||p.isBottom&&t<=C)return!0}}return!1}}};Qr.generateBottomRoundrectangle=function(){return this.nodeShapes[\"bottom-round-rectangle\"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:\"bottom-round-rectangle\",points:br(4,0),draw:function(e,t,a,n,i,s){this.renderer.nodeShapeImpl(this.name,e,t,a,n,i,this.points,s)},intersectLine:function(e,t,a,n,i,s,o,l){var u=e-(a/2+o),v=t-(n/2+o),f=v,c=e+(a/2+o),h=it(i,s,e,t,u,v,c,f,!1);return h.length>0?h:wv(i,s,e,t,a,n,o,l)},checkPoint:function(e,t,a,n,i,s,o,l){l=l===\"auto\"?vt(n,i):l;var u=2*l;if(Zr(e,t,this.points,s,o,n,i-u,[0,-1],a)||Zr(e,t,this.points,s,o,n-u,i,[0,-1],a))return!0;var v=n/2+2*a,f=i/2+2*a,c=[s-v,o-f,s-v,o,s+v,o,s+v,o-f];return!!(Sr(e,t,c)||kt(e,t,u,u,s+n/2-l,o+i/2-l,a)||kt(e,t,u,u,s-n/2+l,o+i/2-l,a))}}};Qr.registerNodeShapes=function(){var r=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon(\"triangle\",br(3,0)),this.generateRoundPolygon(\"round-triangle\",br(3,0)),this.generatePolygon(\"rectangle\",br(4,0)),r.square=r.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var t=[0,1,1,0,0,-1,-1,0];this.generatePolygon(\"diamond\",t),this.generateRoundPolygon(\"round-diamond\",t)}this.generatePolygon(\"pentagon\",br(5,0)),this.generateRoundPolygon(\"round-pentagon\",br(5,0)),this.generatePolygon(\"hexagon\",br(6,0)),this.generateRoundPolygon(\"round-hexagon\",br(6,0)),this.generatePolygon(\"heptagon\",br(7,0)),this.generateRoundPolygon(\"round-heptagon\",br(7,0)),this.generatePolygon(\"octagon\",br(8,0)),this.generateRoundPolygon(\"round-octagon\",br(8,0));var a=new Array(20);{var n=Ps(5,0),i=Ps(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var o=0;o<i.length/2;o++)i[o*2]*=s,i[o*2+1]*=s;for(var o=0;o<20/4;o++)a[o*4]=n[o*2],a[o*4+1]=n[o*2+1],a[o*4+2]=i[o*2],a[o*4+3]=i[o*2+1]}a=xv(a),this.generatePolygon(\"star\",a),this.generatePolygon(\"vee\",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon(\"rhomboid\",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon(\"right-rhomboid\",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon(\"concave-hexagon\",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);{var l=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon(\"tag\",l),this.generateRoundPolygon(\"round-tag\",l)}r.makePolygon=function(u){var v=u.join(\"$\"),f=\"polygon-\"+v,c;return(c=this[f])?c:e.generatePolygon(f,u)}};var Ha={};Ha.timeToRender=function(){return this.redrawTotalTime/this.redrawCount};Ha.redraw=function(r){r=r||pv();var e=this;e.averageRedrawTime===void 0&&(e.averageRedrawTime=0),e.lastRedrawTime===void 0&&(e.lastRedrawTime=0),e.lastDrawTime===void 0&&(e.lastDrawTime=0),e.requestedFrame=!0,e.renderOptions=r};Ha.beforeRender=function(r,e){if(!this.destroyed){e==null&&$e(\"Priority is not optional for beforeRender\");var t=this.beforeRenderCallbacks;t.push({fn:r,priority:e}),t.sort(function(a,n){return n.priority-a.priority})}};var Ol=function(e,t,a){for(var n=e.beforeRenderCallbacks,i=0;i<n.length;i++)n[i].fn(t,a)};Ha.startRenderLoop=function(){var r=this,e=r.cy;if(!r.renderLoopStarted){r.renderLoopStarted=!0;var t=function(n){if(!r.destroyed){if(!e.batching())if(r.requestedFrame&&!r.skipFrame){Ol(r,!0,n);var i=Yr();r.render(r.renderOptions);var s=r.lastDrawTime=Yr();r.averageRedrawTime===void 0&&(r.averageRedrawTime=s-i),r.redrawCount===void 0&&(r.redrawCount=0),r.redrawCount++,r.redrawTotalTime===void 0&&(r.redrawTotalTime=0);var o=s-i;r.redrawTotalTime+=o,r.lastRedrawTime=o,r.averageRedrawTime=r.averageRedrawTime/2+o/2,r.requestedFrame=!1}else Ol(r,!1,n);r.skipFrame=!1,wn(t)}};wn(t)}};var ay=function(e){this.init(e)},Cf=ay,sa=Cf.prototype;sa.clientFunctions=[\"redrawHint\",\"render\",\"renderTo\",\"matchCanvasSize\",\"nodeShapeImpl\",\"arrowShapeImpl\"];sa.init=function(r){var e=this;e.options=r,e.cy=r.cy;var t=e.container=r.cy.container(),a=e.cy.window();if(a){var n=a.document,i=n.head,s=\"__________cytoscape_stylesheet\",o=\"__________cytoscape_container\",l=n.getElementById(s)!=null;if(t.className.indexOf(o)<0&&(t.className=(t.className||\"\")+\" \"+o),!l){var u=n.createElement(\"style\");u.id=s,u.textContent=\".\"+o+\" { position: relative; }\",i.insertBefore(u,i.children[0])}var v=a.getComputedStyle(t),f=v.getPropertyValue(\"position\");f===\"static\"&&Ve(\"A Cytoscape container has style position:static and so can not use UI extensions properly\")}e.selection=[void 0,void 0,void 0,void 0,0],e.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],e.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},e.dragData={possibleDragElements:[]},e.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},e.redraws=0,e.showFps=r.showFps,e.debug=r.debug,e.webgl=r.webgl,e.hideEdgesOnViewport=r.hideEdgesOnViewport,e.textureOnViewport=r.textureOnViewport,e.wheelSensitivity=r.wheelSensitivity,e.motionBlurEnabled=r.motionBlur,e.forcedPixelRatio=ae(r.pixelRatio)?r.pixelRatio:null,e.motionBlur=r.motionBlur,e.motionBlurOpacity=r.motionBlurOpacity,e.motionBlurTransparency=1-e.motionBlurOpacity,e.motionBlurPxRatio=1,e.mbPxRBlurry=1,e.minMbLowQualFrames=4,e.fullQualityMb=!1,e.clearedForMotionBlur=[],e.desktopTapThreshold=r.desktopTapThreshold,e.desktopTapThreshold2=r.desktopTapThreshold*r.desktopTapThreshold,e.touchTapThreshold=r.touchTapThreshold,e.touchTapThreshold2=r.touchTapThreshold*r.touchTapThreshold,e.tapholdDuration=500,e.bindings=[],e.beforeRenderCallbacks=[],e.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},e.registerNodeShapes(),e.registerArrowShapes(),e.registerCalculationListeners()};sa.notify=function(r,e){var t=this,a=t.cy;if(!this.destroyed){if(r===\"init\"){t.load();return}if(r===\"destroy\"){t.destroy();return}(r===\"add\"||r===\"remove\"||r===\"move\"&&a.hasCompoundNodes()||r===\"load\"||r===\"zorder\"||r===\"mount\")&&t.invalidateCachedZSortedEles(),r===\"viewport\"&&t.redrawHint(\"select\",!0),r===\"gc\"&&t.redrawHint(\"gc\",!0),(r===\"load\"||r===\"resize\"||r===\"mount\")&&(t.invalidateContainerClientCoordsCache(),t.matchCanvasSize(t.container)),t.redrawHint(\"eles\",!0),t.redrawHint(\"drag\",!0),this.startRenderLoop(),this.redraw()}};sa.destroy=function(){var r=this;r.destroyed=!0,r.cy.stopAnimationLoop();for(var e=0;e<r.bindings.length;e++){var t=r.bindings[e],a=t,n=a.target;(n.off||n.removeEventListener).apply(n,a.args)}if(r.bindings=[],r.beforeRenderCallbacks=[],r.onUpdateEleCalcsFns=[],r.removeObserver&&r.removeObserver.disconnect(),r.styleObserver&&r.styleObserver.disconnect(),r.resizeObserver&&r.resizeObserver.disconnect(),r.labelCalcDiv)try{document.body.removeChild(r.labelCalcDiv)}catch{}};sa.isHeadless=function(){return!1};[go,xf,Ef,ia,Qr,Ha].forEach(function(r){be(sa,r)});var ws=1e3/60,Tf={setupDequeueing:function(e){return function(){var a=this,n=this.renderer;if(!a.dequeueingSetup){a.dequeueingSetup=!0;var i=Fa(function(){n.redrawHint(\"eles\",!0),n.redrawHint(\"drag\",!0),n.redraw()},e.deqRedrawThreshold),s=function(u,v){var f=Yr(),c=n.averageRedrawTime,h=n.lastRedrawTime,d=[],y=n.cy.extent(),g=n.getPixelRatio();for(u||n.flushRenderedStyleQueue();;){var p=Yr(),m=p-f,b=p-v;if(h<ws){var w=ws-(u?c:0);if(b>=e.deqFastCost*w)break}else if(u){if(m>=e.deqCost*h||m>=e.deqAvgCost*c)break}else if(b>=e.deqNoDrawCost*ws)break;var E=e.deq(a,g,y);if(E.length>0)for(var C=0;C<E.length;C++)d.push(E[C]);else break}d.length>0&&(e.onDeqd(a,d),!u&&e.shouldRedraw(a,d,g,y)&&i())},o=e.priority||js;n.beforeRender(s,o(a))}}}},ny=(function(){function r(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:xn;ht(this,r),this.idsByKey=new Xr,this.keyForId=new Xr,this.cachesByLvl=new Xr,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=t}return gt(r,[{key:\"getIdsFor\",value:function(t){t==null&&$e(\"Can not get id list for null key\");var a=this.idsByKey,n=this.idsByKey.get(t);return n||(n=new ra,a.set(t,n)),n}},{key:\"addIdForKey\",value:function(t,a){t!=null&&this.getIdsFor(t).add(a)}},{key:\"deleteIdForKey\",value:function(t,a){t!=null&&this.getIdsFor(t).delete(a)}},{key:\"getNumberOfIdsForKey\",value:function(t){return t==null?0:this.getIdsFor(t).size}},{key:\"updateKeyMappingFor\",value:function(t){var a=t.id(),n=this.keyForId.get(a),i=this.getKey(t);this.deleteIdForKey(n,a),this.addIdForKey(i,a),this.keyForId.set(a,i)}},{key:\"deleteKeyMappingFor\",value:function(t){var a=t.id(),n=this.keyForId.get(a);this.deleteIdForKey(n,a),this.keyForId.delete(a)}},{key:\"keyHasChangedFor\",value:function(t){var a=t.id(),n=this.keyForId.get(a),i=this.getKey(t);return n!==i}},{key:\"isInvalid\",value:function(t){return this.keyHasChangedFor(t)||this.doesEleInvalidateKey(t)}},{key:\"getCachesAt\",value:function(t){var a=this.cachesByLvl,n=this.lvls,i=a.get(t);return i||(i=new Xr,a.set(t,i),n.push(t)),i}},{key:\"getCache\",value:function(t,a){return this.getCachesAt(a).get(t)}},{key:\"get\",value:function(t,a){var n=this.getKey(t),i=this.getCache(n,a);return i!=null&&this.updateKeyMappingFor(t),i}},{key:\"getForCachedKey\",value:function(t,a){var n=this.keyForId.get(t.id()),i=this.getCache(n,a);return i}},{key:\"hasCache\",value:function(t,a){return this.getCachesAt(a).has(t)}},{key:\"has\",value:function(t,a){var n=this.getKey(t);return this.hasCache(n,a)}},{key:\"setCache\",value:function(t,a,n){n.key=t,this.getCachesAt(a).set(t,n)}},{key:\"set\",value:function(t,a,n){var i=this.getKey(t);this.setCache(i,a,n),this.updateKeyMappingFor(t)}},{key:\"deleteCache\",value:function(t,a){this.getCachesAt(a).delete(t)}},{key:\"delete\",value:function(t,a){var n=this.getKey(t);this.deleteCache(n,a)}},{key:\"invalidateKey\",value:function(t){var a=this;this.lvls.forEach(function(n){return a.deleteCache(t,n)})}},{key:\"invalidate\",value:function(t){var a=t.id(),n=this.keyForId.get(a);this.deleteKeyMappingFor(t);var i=this.doesEleInvalidateKey(t);return i&&this.invalidateKey(n),i||this.getNumberOfIdsForKey(n)===0}}])})(),Nl=25,nn=50,pn=-4,Hs=3,Sf=7.99,iy=8,sy=1024,oy=1024,uy=1024,ly=.2,vy=.8,fy=10,cy=.15,dy=.1,hy=.9,gy=.9,py=100,yy=1,Ut={dequeue:\"dequeue\",downscale:\"downscale\",highQuality:\"highQuality\"},my=cr({getKey:null,doesEleInvalidateKey:xn,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:dv,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),ba=function(e,t){var a=this;a.renderer=e,a.onDequeues=[];var n=my(t);be(a,n),a.lookup=new ny(n.getKey,n.doesEleInvalidateKey),a.setupDequeueing()},nr=ba.prototype;nr.reasons=Ut;nr.getTextureQueue=function(r){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[r]=e.eleImgCaches[r]||[]};nr.getRetiredTextureQueue=function(r){var e=this,t=e.eleImgCaches.retired=e.eleImgCaches.retired||{},a=t[r]=t[r]||[];return a};nr.getElementQueue=function(){var r=this,e=r.eleCacheQueue=r.eleCacheQueue||new Va(function(t,a){return a.reqs-t.reqs});return e};nr.getElementKeyToQueue=function(){var r=this,e=r.eleKeyToCacheQueue=r.eleKeyToCacheQueue||{};return e};nr.getElement=function(r,e,t,a,n){var i=this,s=this.renderer,o=s.cy.zoom(),l=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!r.visible()||r.removed()||!i.allowEdgeTxrCaching&&r.isEdge()||!i.allowParentTxrCaching&&r.isParent())return null;if(a==null&&(a=Math.ceil(ro(o*t))),a<pn)a=pn;else if(o>=Sf||a>Hs)return null;var u=Math.pow(2,a),v=e.h*u,f=e.w*u,c=s.eleTextBiggerThanMin(r,u);if(!this.isVisible(r,c))return null;var h=l.get(r,a);if(h&&h.invalidated&&(h.invalidated=!1,h.texture.invalidatedWidth-=h.width),h)return h;var d;if(v<=Nl?d=Nl:v<=nn?d=nn:d=Math.ceil(v/nn)*nn,v>uy||f>oy)return null;var y=i.getTextureQueue(d),g=y[y.length-2],p=function(){return i.recycleTexture(d,f)||i.addTexture(d,f)};g||(g=y[y.length-1]),g||(g=p()),g.width-g.usedWidth<f&&(g=p());for(var m=function(I){return I&&I.scaledLabelShown===c},b=n&&n===Ut.dequeue,w=n&&n===Ut.highQuality,E=n&&n===Ut.downscale,C,x=a+1;x<=Hs;x++){var T=l.get(r,x);if(T){C=T;break}}var k=C&&C.level===a+1?C:null,D=function(){g.context.drawImage(k.texture.canvas,k.x,0,k.width,k.height,g.usedWidth,0,f,v)};if(g.context.setTransform(1,0,0,1,0,0),g.context.clearRect(g.usedWidth,0,f,d),m(k))D();else if(m(C))if(w){for(var B=C.level;B>a;B--)k=i.getElement(r,e,t,B,Ut.downscale);D()}else return i.queueElement(r,C.level-1),C;else{var P;if(!b&&!w&&!E)for(var A=a-1;A>=pn;A--){var R=l.get(r,A);if(R){P=R;break}}if(m(P))return i.queueElement(r,a),P;g.context.translate(g.usedWidth,0),g.context.scale(u,u),this.drawElement(g.context,r,e,c,!1),g.context.scale(1/u,1/u),g.context.translate(-g.usedWidth,0)}return h={x:g.usedWidth,texture:g,level:a,scale:u,width:f,height:v,scaledLabelShown:c},g.usedWidth+=Math.ceil(f+iy),g.eleCaches.push(h),l.set(r,a,h),i.checkTextureFullness(g),h};nr.invalidateElements=function(r){for(var e=0;e<r.length;e++)this.invalidateElement(r[e])};nr.invalidateElement=function(r){var e=this,t=e.lookup,a=[],n=t.isInvalid(r);if(n){for(var i=pn;i<=Hs;i++){var s=t.getForCachedKey(r,i);s&&a.push(s)}var o=t.invalidate(r);if(o)for(var l=0;l<a.length;l++){var u=a[l],v=u.texture;v.invalidatedWidth+=u.width,u.invalidated=!0,e.checkTextureUtility(v)}e.removeFromQueue(r)}};nr.checkTextureUtility=function(r){r.invalidatedWidth>=ly*r.width&&this.retireTexture(r)};nr.checkTextureFullness=function(r){var e=this,t=e.getTextureQueue(r.height);r.usedWidth/r.width>vy&&r.fullnessChecks>=fy?lt(t,r):r.fullnessChecks++};nr.retireTexture=function(r){var e=this,t=r.height,a=e.getTextureQueue(t),n=this.lookup;lt(a,r),r.retired=!0;for(var i=r.eleCaches,s=0;s<i.length;s++){var o=i[s];n.deleteCache(o.key,o.level)}eo(i);var l=e.getRetiredTextureQueue(t);l.push(r)};nr.addTexture=function(r,e){var t=this,a=t.getTextureQueue(r),n={};return a.push(n),n.eleCaches=[],n.height=r,n.width=Math.max(sy,e),n.usedWidth=0,n.invalidatedWidth=0,n.fullnessChecks=0,n.canvas=t.renderer.makeOffscreenCanvas(n.width,n.height),n.context=n.canvas.getContext(\"2d\"),n};nr.recycleTexture=function(r,e){for(var t=this,a=t.getTextureQueue(r),n=t.getRetiredTextureQueue(r),i=0;i<n.length;i++){var s=n[i];if(s.width>=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,eo(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),lt(n,s),a.push(s),s}};nr.queueElement=function(r,e){var t=this,a=t.getElementQueue(),n=t.getElementKeyToQueue(),i=this.getKey(r),s=n[i];if(s)s.level=Math.max(s.level,e),s.eles.merge(r),s.reqs++,a.updateItem(s);else{var o={eles:r.spawn().merge(r),level:e,reqs:1,key:i};a.push(o),n[i]=o}};nr.dequeue=function(r){for(var e=this,t=e.getElementQueue(),a=e.getElementKeyToQueue(),n=[],i=e.lookup,s=0;s<yy&&t.size()>0;s++){var o=t.pop(),l=o.key,u=o.eles[0],v=i.hasCache(u,o.level);if(a[l]=null,v)continue;n.push(o);var f=e.getBoundingBox(u);e.getElement(u,f,r,o.level,Ut.dequeue)}return n};nr.removeFromQueue=function(r){var e=this,t=e.getElementQueue(),a=e.getElementKeyToQueue(),n=this.getKey(r),i=a[n];i!=null&&(i.eles.length===1?(i.reqs=Js,t.updateItem(i),t.pop(),a[n]=null):i.eles.unmerge(r))};nr.onDequeue=function(r){this.onDequeues.push(r)};nr.offDequeue=function(r){lt(this.onDequeues,r)};nr.setupDequeueing=Tf.setupDequeueing({deqRedrawThreshold:py,deqCost:cy,deqAvgCost:dy,deqNoDrawCost:hy,deqFastCost:gy,deq:function(e,t,a){return e.dequeue(t,a)},onDeqd:function(e,t){for(var a=0;a<e.onDequeues.length;a++){var n=e.onDequeues[a];n(t)}},shouldRedraw:function(e,t,a,n){for(var i=0;i<t.length;i++)for(var s=t[i].eles,o=0;o<s.length;o++){var l=s[o].boundingBox();if(ao(l,n))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var by=1,xa=-4,Pn=2,wy=3.99,xy=50,Ey=50,Cy=.15,Ty=.1,Sy=.9,ky=.9,Dy=1,zl=250,By=4e3*4e3,Fl=32767,Py=!0,kf=function(e){var t=this,a=t.renderer=e,n=a.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=Yr()-2*zl,t.skipping=!1,t.eleTxrDeqs=n.collection(),t.scheduleElementRefinement=Fa(function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)},Ey),a.beforeRender(function(s,o){o-t.lastInvalidationTime<=zl?t.skipping=!0:t.skipping=!1},a.beforeRenderPriorities.lyrTxrSkip);var i=function(o,l){return l.reqs-o.reqs};t.layersQueue=new Va(i),t.setupDequeueing()},dr=kf.prototype,Vl=0,Ay=Math.pow(2,53)-1;dr.makeLayer=function(r,e){var t=Math.pow(2,e),a=Math.ceil(r.w*t),n=Math.ceil(r.h*t),i=this.renderer.makeOffscreenCanvas(a,n),s={id:Vl=++Vl%Ay,bb:r,level:e,width:a,height:n,canvas:i,context:i.getContext(\"2d\"),eles:[],elesQueue:[],reqs:0},o=s.context,l=-s.bb.x1,u=-s.bb.y1;return o.scale(t,t),o.translate(l,u),s};dr.getLayers=function(r,e,t){var a=this,n=a.renderer,i=n.cy,s=i.zoom(),o=a.firstGet;if(a.firstGet=!1,t==null){if(t=Math.ceil(ro(s*e)),t<xa)t=xa;else if(s>=wy||t>Pn)return null}a.validateLayersElesOrdering(t,r);var l=a.layersByLevel,u=Math.pow(2,t),v=l[t]=l[t]||[],f,c=a.levelIsComplete(t,r),h,d=function(){var D=function(L){if(a.validateLayersElesOrdering(L,r),a.levelIsComplete(L,r))return h=l[L],!0},B=function(L){if(!h)for(var I=t+L;xa<=I&&I<=Pn&&!D(I);I+=L);};B(1),B(-1);for(var P=v.length-1;P>=0;P--){var A=v[P];A.invalid&&lt(v,A)}};if(!c)d();else return v;var y=function(){if(!f){f=wr();for(var D=0;D<r.length;D++)Dd(f,r[D].boundingBox())}return f},g=function(D){D=D||{};var B=D.after;y();var P=Math.ceil(f.w*u),A=Math.ceil(f.h*u);if(P>Fl||A>Fl)return null;var R=P*A;if(R>By)return null;var L=a.makeLayer(f,t);if(B!=null){var I=v.indexOf(B)+1;v.splice(I,0,L)}else(D.insert===void 0||D.insert)&&v.unshift(L);return L};if(a.skipping&&!o)return null;for(var p=null,m=r.length/by,b=!o,w=0;w<r.length;w++){var E=r[w],C=E._private.rscratch,x=C.imgLayerCaches=C.imgLayerCaches||{},T=x[t];if(T){p=T;continue}if((!p||p.eles.length>=m||!bv(p.bb,E.boundingBox()))&&(p=g({insert:!0,after:p}),!p))return null;h||b?a.queueLayer(p,E):a.drawEleInLayer(p,E,t,e),p.eles.push(E),x[t]=p}return h||(b?null:v)};dr.getEleLevelForLayerLevel=function(r,e){return r};dr.drawEleInLayer=function(r,e,t,a){var n=this,i=this.renderer,s=r.context,o=e.boundingBox();o.w===0||o.h===0||!e.visible()||(t=n.getEleLevelForLayerLevel(t,a),i.setImgSmoothing(s,!1),i.drawCachedElement(s,e,null,null,t,Py),i.setImgSmoothing(s,!0))};dr.levelIsComplete=function(r,e){var t=this,a=t.layersByLevel[r];if(!a||a.length===0)return!1;for(var n=0,i=0;i<a.length;i++){var s=a[i];if(s.reqs>0||s.invalid)return!1;n+=s.eles.length}return n===e.length};dr.validateLayersElesOrdering=function(r,e){var t=this.layersByLevel[r];if(t)for(var a=0;a<t.length;a++){for(var n=t[a],i=-1,s=0;s<e.length;s++)if(n.eles[0]===e[s]){i=s;break}if(i<0){this.invalidateLayer(n);continue}for(var o=i,s=0;s<n.eles.length;s++)if(n.eles[s]!==e[o+s]){this.invalidateLayer(n);break}}};dr.updateElementsInLayers=function(r,e){for(var t=this,a=Ia(r[0]),n=0;n<r.length;n++)for(var i=a?null:r[n],s=a?r[n]:r[n].ele,o=s._private.rscratch,l=o.imgLayerCaches=o.imgLayerCaches||{},u=xa;u<=Pn;u++){var v=l[u];v&&(i&&t.getEleLevelForLayerLevel(v.level)!==i.level||e(v,s,i))}};dr.haveLayers=function(){for(var r=this,e=!1,t=xa;t<=Pn;t++){var a=r.layersByLevel[t];if(a&&a.length>0){e=!0;break}}return e};dr.invalidateElements=function(r){var e=this;r.length!==0&&(e.lastInvalidationTime=Yr(),!(r.length===0||!e.haveLayers())&&e.updateElementsInLayers(r,function(a,n,i){e.invalidateLayer(a)}))};dr.invalidateLayer=function(r){if(this.lastInvalidationTime=Yr(),!r.invalid){var e=r.level,t=r.eles,a=this.layersByLevel[e];lt(a,r),r.elesQueue=[],r.invalid=!0,r.replacement&&(r.replacement.invalid=!0);for(var n=0;n<t.length;n++){var i=t[n]._private.rscratch.imgLayerCaches;i&&(i[e]=null)}}};dr.refineElementTextures=function(r){var e=this;e.updateElementsInLayers(r,function(a,n,i){var s=a.replacement;if(s||(s=a.replacement=e.makeLayer(a.bb,a.level),s.replaces=a,s.eles=a.eles),!s.reqs)for(var o=0;o<s.eles.length;o++)e.queueLayer(s,s.eles[o])})};dr.enqueueElementRefinement=function(r){this.eleTxrDeqs.merge(r),this.scheduleElementRefinement()};dr.queueLayer=function(r,e){var t=this,a=t.layersQueue,n=r.elesQueue,i=n.hasId=n.hasId||{};if(!r.replacement){if(e){if(i[e.id()])return;n.push(e),i[e.id()]=!0}r.reqs?(r.reqs++,a.updateItem(r)):(r.reqs=1,a.push(r))}};dr.dequeue=function(r){for(var e=this,t=e.layersQueue,a=[],n=0;n<Dy&&t.size()!==0;){var i=t.peek();if(i.replacement){t.pop();continue}if(i.replaces&&i!==i.replaces.replacement){t.pop();continue}if(i.invalid){t.pop();continue}var s=i.elesQueue.shift();s&&(e.drawEleInLayer(i,s,i.level,r),n++),a.length===0&&a.push(!0),i.elesQueue.length===0&&(t.pop(),i.reqs=0,i.replaces&&e.applyLayerReplacement(i),e.requestRedraw())}return a};dr.applyLayerReplacement=function(r){var e=this,t=e.layersByLevel[r.level],a=r.replaces,n=t.indexOf(a);if(!(n<0||a.invalid)){t[n]=r;for(var i=0;i<r.eles.length;i++){var s=r.eles[i]._private,o=s.imgLayerCaches=s.imgLayerCaches||{};o&&(o[r.level]=r)}e.requestRedraw()}};dr.requestRedraw=Fa(function(){var r=this.renderer;r.redrawHint(\"eles\",!0),r.redrawHint(\"drag\",!0),r.redraw()},100);dr.setupDequeueing=Tf.setupDequeueing({deqRedrawThreshold:xy,deqCost:Cy,deqAvgCost:Ty,deqNoDrawCost:Sy,deqFastCost:ky,deq:function(e,t){return e.dequeue(t)},onDeqd:js,shouldRedraw:dv,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var Df={},ql;function Ry(r,e){for(var t=0;t<e.length;t++){var a=e[t];r.lineTo(a.x,a.y)}}function My(r,e,t){for(var a,n=0;n<e.length;n++){var i=e[n];n===0&&(a=i),r.lineTo(i.x,i.y)}r.quadraticCurveTo(t.x,t.y,a.x,a.y)}function _l(r,e,t){r.beginPath&&r.beginPath();for(var a=e,n=0;n<a.length;n++){var i=a[n];r.lineTo(i.x,i.y)}var s=t,o=t[0];r.moveTo(o.x,o.y);for(var n=1;n<s.length;n++){var i=s[n];r.lineTo(i.x,i.y)}r.closePath&&r.closePath()}function Ly(r,e,t,a,n){r.beginPath&&r.beginPath(),r.arc(t,a,n,0,Math.PI*2,!1);var i=e,s=i[0];r.moveTo(s.x,s.y);for(var o=0;o<i.length;o++){var l=i[o];r.lineTo(l.x,l.y)}r.closePath&&r.closePath()}function Iy(r,e,t,a){r.arc(e,t,a,0,Math.PI*2,!1)}Df.arrowShapeImpl=function(r){return(ql||(ql={polygon:Ry,\"triangle-backcurve\":My,\"triangle-tee\":_l,\"circle-triangle\":Ly,\"triangle-cross\":_l,circle:Iy}))[r]};var Hr={};Hr.drawElement=function(r,e,t,a,n,i){var s=this;e.isNode()?s.drawNode(r,e,t,a,n,i):s.drawEdge(r,e,t,a,n,i)};Hr.drawElementOverlay=function(r,e){var t=this;e.isNode()?t.drawNodeOverlay(r,e):t.drawEdgeOverlay(r,e)};Hr.drawElementUnderlay=function(r,e){var t=this;e.isNode()?t.drawNodeUnderlay(r,e):t.drawEdgeUnderlay(r,e)};Hr.drawCachedElementPortion=function(r,e,t,a,n,i,s,o){var l=this,u=t.getBoundingBox(e);if(!(u.w===0||u.h===0)){var v=t.getElement(e,u,a,n,i);if(v!=null){var f=o(l,e);if(f===0)return;var c=s(l,e),h=u.x1,d=u.y1,y=u.w,g=u.h,p,m,b,w,E;if(c!==0){var C=t.getRotationPoint(e);b=C.x,w=C.y,r.translate(b,w),r.rotate(c),E=l.getImgSmoothing(r),E||l.setImgSmoothing(r,!0);var x=t.getRotationOffset(e);p=x.x,m=x.y}else p=h,m=d;var T;f!==1&&(T=r.globalAlpha,r.globalAlpha=T*f),r.drawImage(v.texture.canvas,v.x,0,v.width,v.height,p,m,y,g),f!==1&&(r.globalAlpha=T),c!==0&&(r.rotate(-c),r.translate(-b,-w),E||l.setImgSmoothing(r,!1))}else t.drawElement(r,e)}};var Oy=function(){return 0},Ny=function(e,t){return e.getTextAngle(t,null)},zy=function(e,t){return e.getTextAngle(t,\"source\")},Fy=function(e,t){return e.getTextAngle(t,\"target\")},Vy=function(e,t){return t.effectiveOpacity()},xs=function(e,t){return t.pstyle(\"text-opacity\").pfValue*t.effectiveOpacity()};Hr.drawCachedElement=function(r,e,t,a,n,i){var s=this,o=s.data,l=o.eleTxrCache,u=o.lblTxrCache,v=o.slbTxrCache,f=o.tlbTxrCache,c=e.boundingBox(),h=i===!0?l.reasons.highQuality:null;if(!(c.w===0||c.h===0||!e.visible())&&(!a||ao(c,a))){var d=e.isEdge(),y=e.element()._private.rscratch.badLine;s.drawElementUnderlay(r,e),s.drawCachedElementPortion(r,e,l,t,n,h,Oy,Vy),(!d||!y)&&s.drawCachedElementPortion(r,e,u,t,n,h,Ny,xs),d&&!y&&(s.drawCachedElementPortion(r,e,v,t,n,h,zy,xs),s.drawCachedElementPortion(r,e,f,t,n,h,Fy,xs)),s.drawElementOverlay(r,e)}};Hr.drawElements=function(r,e){for(var t=this,a=0;a<e.length;a++){var n=e[a];t.drawElement(r,n)}};Hr.drawCachedElements=function(r,e,t,a){for(var n=this,i=0;i<e.length;i++){var s=e[i];n.drawCachedElement(r,s,t,a)}};Hr.drawCachedNodes=function(r,e,t,a){for(var n=this,i=0;i<e.length;i++){var s=e[i];s.isNode()&&n.drawCachedElement(r,s,t,a)}};Hr.drawLayeredElements=function(r,e,t,a){var n=this,i=n.data.lyrTxrCache.getLayers(e,t);if(i)for(var s=0;s<i.length;s++){var o=i[s],l=o.bb;l.w===0||l.h===0||r.drawImage(o.canvas,l.x1,l.y1,l.w,l.h)}else n.drawCachedElements(r,e,t,a)};var Jr={};Jr.drawEdge=function(r,e,t){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,o=e._private.rscratch;if(!(i&&!e.visible())&&!(o.badLine||o.allpts==null||isNaN(o.allpts[0]))){var l;t&&(l=t,r.translate(-l.x1,-l.y1));var u=i?e.pstyle(\"opacity\").value:1,v=i?e.pstyle(\"line-opacity\").value:1,f=e.pstyle(\"curve-style\").value,c=e.pstyle(\"line-style\").value,h=e.pstyle(\"width\").pfValue,d=e.pstyle(\"line-cap\").value,y=e.pstyle(\"line-outline-width\").value,g=e.pstyle(\"line-outline-color\").value,p=u*v,m=u*v,b=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p;f===\"straight-triangle\"?(s.eleStrokeStyle(r,e,L),s.drawEdgeTrianglePath(e,r,o.allpts)):(r.lineWidth=h,r.lineCap=d,s.eleStrokeStyle(r,e,L),s.drawEdgePath(e,r,o.allpts,c),r.lineCap=\"butt\")},w=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p;if(r.lineWidth=h+y,r.lineCap=d,y>0)s.colorStrokeStyle(r,g[0],g[1],g[2],L);else{r.lineCap=\"butt\";return}f===\"straight-triangle\"?s.drawEdgeTrianglePath(e,r,o.allpts):(s.drawEdgePath(e,r,o.allpts,c),r.lineCap=\"butt\")},E=function(){n&&s.drawEdgeOverlay(r,e)},C=function(){n&&s.drawEdgeUnderlay(r,e)},x=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:m;s.drawArrowheads(r,e,L)},T=function(){s.drawElementText(r,e,null,a)};r.lineJoin=\"round\";var k=e.pstyle(\"ghost\").value===\"yes\";if(k){var D=e.pstyle(\"ghost-offset-x\").pfValue,B=e.pstyle(\"ghost-offset-y\").pfValue,P=e.pstyle(\"ghost-opacity\").value,A=p*P;r.translate(D,B),b(A),x(A),r.translate(-D,-B)}else w();C(),b(),x(),E(),T(),t&&r.translate(l.x1,l.y1)}};var Bf=function(e){if(![\"overlay\",\"underlay\"].includes(e))throw new Error(\"Invalid state\");return function(t,a){if(a.visible()){var n=a.pstyle(\"\".concat(e,\"-opacity\")).value;if(n!==0){var i=this,s=i.usePaths(),o=a._private.rscratch,l=a.pstyle(\"\".concat(e,\"-padding\")).pfValue,u=2*l,v=a.pstyle(\"\".concat(e,\"-color\")).value;t.lineWidth=u,o.edgeType===\"self\"&&!s?t.lineCap=\"butt\":t.lineCap=\"round\",i.colorStrokeStyle(t,v[0],v[1],v[2],n),i.drawEdgePath(a,t,o.allpts,\"solid\")}}}};Jr.drawEdgeOverlay=Bf(\"overlay\");Jr.drawEdgeUnderlay=Bf(\"underlay\");Jr.drawEdgePath=function(r,e,t,a){var n=r._private.rscratch,i=e,s,o=!1,l=this.usePaths(),u=r.pstyle(\"line-dash-pattern\").pfValue,v=r.pstyle(\"line-dash-offset\").pfValue;if(l){var f=t.join(\"$\"),c=n.pathCacheKey&&n.pathCacheKey===f;c?(s=e=n.pathCache,o=!0):(s=e=new Path2D,n.pathCacheKey=f,n.pathCache=s)}if(i.setLineDash)switch(a){case\"dotted\":i.setLineDash([1,1]);break;case\"dashed\":i.setLineDash(u),i.lineDashOffset=v;break;case\"solid\":i.setLineDash([]);break}if(!o&&!n.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(t[0],t[1]),n.edgeType){case\"bezier\":case\"self\":case\"compound\":case\"multibezier\":for(var h=2;h+3<t.length;h+=4)e.quadraticCurveTo(t[h],t[h+1],t[h+2],t[h+3]);break;case\"straight\":case\"haystack\":for(var d=2;d+1<t.length;d+=2)e.lineTo(t[d],t[d+1]);break;case\"segments\":if(n.isRound){var y=kr(n.roundCorners),g;try{for(y.s();!(g=y.n()).done;){var p=g.value;pf(e,p)}}catch(b){y.e(b)}finally{y.f()}e.lineTo(t[t.length-2],t[t.length-1])}else for(var m=2;m+1<t.length;m+=2)e.lineTo(t[m],t[m+1]);break}e=i,l?e.stroke(s):e.stroke(),e.setLineDash&&e.setLineDash([])};Jr.drawEdgeTrianglePath=function(r,e,t){e.fillStyle=e.strokeStyle;for(var a=r.pstyle(\"width\").pfValue,n=0;n+1<t.length;n+=2){var i=[t[n+2]-t[n],t[n+3]-t[n+1]],s=Math.sqrt(i[0]*i[0]+i[1]*i[1]),o=[i[1]/s,-i[0]/s],l=[o[0]*a/2,o[1]*a/2];e.beginPath(),e.moveTo(t[n]-l[0],t[n+1]-l[1]),e.lineTo(t[n]+l[0],t[n+1]+l[1]),e.lineTo(t[n+2],t[n+3]),e.closePath(),e.fill()}};Jr.drawArrowheads=function(r,e,t){var a=e._private.rscratch,n=a.edgeType===\"haystack\";n||this.drawArrowhead(r,e,\"source\",a.arrowStartX,a.arrowStartY,a.srcArrowAngle,t),this.drawArrowhead(r,e,\"mid-target\",a.midX,a.midY,a.midtgtArrowAngle,t),this.drawArrowhead(r,e,\"mid-source\",a.midX,a.midY,a.midsrcArrowAngle,t),n||this.drawArrowhead(r,e,\"target\",a.arrowEndX,a.arrowEndY,a.tgtArrowAngle,t)};Jr.drawArrowhead=function(r,e,t,a,n,i,s){if(!(isNaN(a)||a==null||isNaN(n)||n==null||isNaN(i)||i==null)){var o=this,l=e.pstyle(t+\"-arrow-shape\").value;if(l!==\"none\"){var u=e.pstyle(t+\"-arrow-fill\").value===\"hollow\"?\"both\":\"filled\",v=e.pstyle(t+\"-arrow-fill\").value,f=e.pstyle(\"width\").pfValue,c=e.pstyle(t+\"-arrow-width\"),h=c.value===\"match-line\"?f:c.pfValue;c.units===\"%\"&&(h*=f);var d=e.pstyle(\"opacity\").value;s===void 0&&(s=d);var y=r.globalCompositeOperation;(s!==1||v===\"hollow\")&&(r.globalCompositeOperation=\"destination-out\",o.colorFillStyle(r,255,255,255,1),o.colorStrokeStyle(r,255,255,255,1),o.drawArrowShape(e,r,u,f,l,h,a,n,i),r.globalCompositeOperation=y);var g=e.pstyle(t+\"-arrow-color\").value;o.colorFillStyle(r,g[0],g[1],g[2],s),o.colorStrokeStyle(r,g[0],g[1],g[2],s),o.drawArrowShape(e,r,v,f,l,h,a,n,i)}}};Jr.drawArrowShape=function(r,e,t,a,n,i,s,o,l){var u=this,v=this.usePaths()&&n!==\"triangle-cross\",f=!1,c,h=e,d={x:s,y:o},y=r.pstyle(\"arrow-scale\").value,g=this.getArrowWidth(a,y),p=u.arrowShapes[n];if(v){var m=u.arrowPathCache=u.arrowPathCache||[],b=Dt(n),w=m[b];w!=null?(c=e=w,f=!0):(c=e=new Path2D,m[b]=c)}f||(e.beginPath&&e.beginPath(),v?p.draw(e,1,0,{x:0,y:0},1):p.draw(e,g,l,d,a),e.closePath&&e.closePath()),e=h,v&&(e.translate(s,o),e.rotate(l),e.scale(g,g)),(t===\"filled\"||t===\"both\")&&(v?e.fill(c):e.fill()),(t===\"hollow\"||t===\"both\")&&(e.lineWidth=i/(v?g:1),e.lineJoin=\"miter\",v?e.stroke(c):e.stroke()),v&&(e.scale(1/g,1/g),e.rotate(-l),e.translate(-s,-o))};var mo={};mo.safeDrawImage=function(r,e,t,a,n,i,s,o,l,u){if(!(n<=0||i<=0||l<=0||u<=0))try{r.drawImage(e,t,a,n,i,s,o,l,u)}catch(v){Ve(v)}};mo.drawInscribedImage=function(r,e,t,a,n){var i=this,s=t.position(),o=s.x,l=s.y,u=t.cy().style(),v=u.getIndexedStyle.bind(u),f=v(t,\"background-fit\",\"value\",a),c=v(t,\"background-repeat\",\"value\",a),h=t.width(),d=t.height(),y=t.padding()*2,g=h+(v(t,\"background-width-relative-to\",\"value\",a)===\"inner\"?0:y),p=d+(v(t,\"background-height-relative-to\",\"value\",a)===\"inner\"?0:y),m=t._private.rscratch,b=v(t,\"background-clip\",\"value\",a),w=b===\"node\",E=v(t,\"background-image-opacity\",\"value\",a)*n,C=v(t,\"background-image-smoothing\",\"value\",a),x=t.pstyle(\"corner-radius\").value;x!==\"auto\"&&(x=t.pstyle(\"corner-radius\").pfValue);var T=e.width||e.cachedW,k=e.height||e.cachedH;(T==null||k==null)&&(document.body.appendChild(e),T=e.cachedW=e.width||e.offsetWidth,k=e.cachedH=e.height||e.offsetHeight,document.body.removeChild(e));var D=T,B=k;if(v(t,\"background-width\",\"value\",a)!==\"auto\"&&(v(t,\"background-width\",\"units\",a)===\"%\"?D=v(t,\"background-width\",\"pfValue\",a)*g:D=v(t,\"background-width\",\"pfValue\",a)),v(t,\"background-height\",\"value\",a)!==\"auto\"&&(v(t,\"background-height\",\"units\",a)===\"%\"?B=v(t,\"background-height\",\"pfValue\",a)*p:B=v(t,\"background-height\",\"pfValue\",a)),!(D===0||B===0)){if(f===\"contain\"){var P=Math.min(g/D,p/B);D*=P,B*=P}else if(f===\"cover\"){var P=Math.max(g/D,p/B);D*=P,B*=P}var A=o-g/2,R=v(t,\"background-position-x\",\"units\",a),L=v(t,\"background-position-x\",\"pfValue\",a);R===\"%\"?A+=(g-D)*L:A+=L;var I=v(t,\"background-offset-x\",\"units\",a),M=v(t,\"background-offset-x\",\"pfValue\",a);I===\"%\"?A+=(g-D)*M:A+=M;var O=l-p/2,V=v(t,\"background-position-y\",\"units\",a),G=v(t,\"background-position-y\",\"pfValue\",a);V===\"%\"?O+=(p-B)*G:O+=G;var N=v(t,\"background-offset-y\",\"units\",a),F=v(t,\"background-offset-y\",\"pfValue\",a);N===\"%\"?O+=(p-B)*F:O+=F,m.pathCache&&(A-=o,O-=l,o=0,l=0);var U=r.globalAlpha;r.globalAlpha=E;var Q=i.getImgSmoothing(r),K=!1;if(C===\"no\"&&Q?(i.setImgSmoothing(r,!1),K=!0):C===\"yes\"&&!Q&&(i.setImgSmoothing(r,!0),K=!0),c===\"no-repeat\")w&&(r.save(),m.pathCache?r.clip(m.pathCache):(i.nodeShapes[i.getNodeShape(t)].draw(r,o,l,g,p,x,m),r.clip())),i.safeDrawImage(r,e,0,0,T,k,A,O,D,B),w&&r.restore();else{var j=r.createPattern(e,c);r.fillStyle=j,i.nodeShapes[i.getNodeShape(t)].draw(r,o,l,g,p,x,m),r.translate(A,O),r.fill(),r.translate(-A,-O)}r.globalAlpha=U,K&&i.setImgSmoothing(r,Q)}};var Lt={};Lt.eleTextBiggerThanMin=function(r,e){if(!e){var t=r.cy().zoom(),a=this.getPixelRatio(),n=Math.ceil(ro(t*a));e=Math.pow(2,n)}var i=r.pstyle(\"font-size\").pfValue*e,s=r.pstyle(\"min-zoomed-font-size\").pfValue;return!(i<s)};Lt.drawElementText=function(r,e,t,a,n){var i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(a==null){if(i&&!s.eleTextBiggerThanMin(e))return}else if(a===!1)return;if(e.isNode()){var o=e.pstyle(\"label\");if(!o||!o.value)return;var l=s.getLabelJustification(e);r.textAlign=l,r.textBaseline=\"bottom\"}else{var u=e.element()._private.rscratch.badLine,v=e.pstyle(\"label\"),f=e.pstyle(\"source-label\"),c=e.pstyle(\"target-label\");if(u||(!v||!v.value)&&(!f||!f.value)&&(!c||!c.value))return;r.textAlign=\"center\",r.textBaseline=\"bottom\"}var h=!t,d;t&&(d=t,r.translate(-d.x1,-d.y1)),n==null?(s.drawText(r,e,null,h,i),e.isEdge()&&(s.drawText(r,e,\"source\",h,i),s.drawText(r,e,\"target\",h,i))):s.drawText(r,e,n,h,i),t&&r.translate(d.x1,d.y1)};Lt.getFontCache=function(r){var e;this.fontCaches=this.fontCaches||[];for(var t=0;t<this.fontCaches.length;t++)if(e=this.fontCaches[t],e.context===r)return e;return e={context:r},this.fontCaches.push(e),e};Lt.setupTextStyle=function(r,e){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=e.pstyle(\"font-style\").strValue,n=e.pstyle(\"font-size\").pfValue+\"px\",i=e.pstyle(\"font-family\").strValue,s=e.pstyle(\"font-weight\").strValue,o=t?e.effectiveOpacity()*e.pstyle(\"text-opacity\").value:1,l=e.pstyle(\"text-outline-opacity\").value*o,u=e.pstyle(\"color\").value,v=e.pstyle(\"text-outline-color\").value;r.font=a+\" \"+s+\" \"+n+\" \"+i,r.lineJoin=\"round\",this.colorFillStyle(r,u[0],u[1],u[2],o),this.colorStrokeStyle(r,v[0],v[1],v[2],l)};function qy(r,e,t,a,n){var i=Math.min(a,n),s=i/2,o=e+a/2,l=t+n/2;r.beginPath(),r.arc(o,l,s,0,Math.PI*2),r.closePath()}function Gl(r,e,t,a,n){var i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,s=Math.min(i,a/2,n/2);r.beginPath(),r.moveTo(e+s,t),r.lineTo(e+a-s,t),r.quadraticCurveTo(e+a,t,e+a,t+s),r.lineTo(e+a,t+n-s),r.quadraticCurveTo(e+a,t+n,e+a-s,t+n),r.lineTo(e+s,t+n),r.quadraticCurveTo(e,t+n,e,t+n-s),r.lineTo(e,t+s),r.quadraticCurveTo(e,t,e+s,t),r.closePath()}Lt.getTextAngle=function(r,e){var t,a=r._private,n=a.rscratch,i=e?e+\"-\":\"\",s=r.pstyle(i+\"text-rotation\");if(s.strValue===\"autorotate\"){var o=Tr(n,\"labelAngle\",e);t=r.isEdge()?o:0}else s.strValue===\"none\"?t=0:t=s.pfValue;return t};Lt.drawText=function(r,e,t){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=e._private,s=i.rscratch,o=n?e.effectiveOpacity():1;if(!(n&&(o===0||e.pstyle(\"text-opacity\").value===0))){t===\"main\"&&(t=null);var l=Tr(s,\"labelX\",t),u=Tr(s,\"labelY\",t),v,f,c=this.getLabelText(e,t);if(c!=null&&c!==\"\"&&!isNaN(l)&&!isNaN(u)){this.setupTextStyle(r,e,n);var h=t?t+\"-\":\"\",d=Tr(s,\"labelWidth\",t),y=Tr(s,\"labelHeight\",t),g=e.pstyle(h+\"text-margin-x\").pfValue,p=e.pstyle(h+\"text-margin-y\").pfValue,m=e.isEdge(),b=e.pstyle(\"text-halign\").value,w=e.pstyle(\"text-valign\").value;m&&(b=\"center\",w=\"center\"),l+=g,u+=p;var E;switch(a?E=this.getTextAngle(e,t):E=0,E!==0&&(v=l,f=u,r.translate(v,f),r.rotate(E),l=0,u=0),w){case\"top\":break;case\"center\":u+=y/2;break;case\"bottom\":u+=y;break}var C=e.pstyle(\"text-background-opacity\").value,x=e.pstyle(\"text-border-opacity\").value,T=e.pstyle(\"text-border-width\").pfValue,k=e.pstyle(\"text-background-padding\").pfValue,D=e.pstyle(\"text-background-shape\").strValue,B=D===\"round-rectangle\"||D===\"roundrectangle\",P=D===\"circle\",A=2;if(C>0||T>0&&x>0){var R=r.fillStyle,L=r.strokeStyle,I=r.lineWidth,M=e.pstyle(\"text-background-color\").value,O=e.pstyle(\"text-border-color\").value,V=e.pstyle(\"text-border-style\").value,G=C>0,N=T>0&&x>0,F=l-k;switch(b){case\"left\":F-=d;break;case\"center\":F-=d/2;break}var U=u-y-k,Q=d+2*k,K=y+2*k;if(G&&(r.fillStyle=\"rgba(\".concat(M[0],\",\").concat(M[1],\",\").concat(M[2],\",\").concat(C*o,\")\")),N&&(r.strokeStyle=\"rgba(\".concat(O[0],\",\").concat(O[1],\",\").concat(O[2],\",\").concat(x*o,\")\"),r.lineWidth=T,r.setLineDash))switch(V){case\"dotted\":r.setLineDash([1,1]);break;case\"dashed\":r.setLineDash([4,2]);break;case\"double\":r.lineWidth=T/4,r.setLineDash([]);break;default:r.setLineDash([]);break}if(B?(r.beginPath(),Gl(r,F,U,Q,K,A)):P?(r.beginPath(),qy(r,F,U,Q,K)):(r.beginPath(),r.rect(F,U,Q,K)),G&&r.fill(),N&&r.stroke(),N&&V===\"double\"){var j=T/2;r.beginPath(),B?Gl(r,F+j,U+j,Q-2*j,K-2*j,A):r.rect(F+j,U+j,Q-2*j,K-2*j),r.stroke()}r.fillStyle=R,r.strokeStyle=L,r.lineWidth=I,r.setLineDash&&r.setLineDash([])}var re=2*e.pstyle(\"text-outline-width\").pfValue;if(re>0&&(r.lineWidth=re),e.pstyle(\"text-wrap\").value===\"wrap\"){var ne=Tr(s,\"labelWrapCachedLines\",t),J=Tr(s,\"labelLineHeight\",t),z=d/2,q=this.getLabelJustification(e);switch(q===\"auto\"||(b===\"left\"?q===\"left\"?l+=-d:q===\"center\"&&(l+=-z):b===\"center\"?q===\"left\"?l+=-z:q===\"right\"&&(l+=z):b===\"right\"&&(q===\"center\"?l+=z:q===\"right\"&&(l+=d))),w){case\"top\":u-=(ne.length-1)*J;break;case\"center\":case\"bottom\":u-=(ne.length-1)*J;break}for(var H=0;H<ne.length;H++)re>0&&r.strokeText(ne[H],l,u),r.fillText(ne[H],l,u),u+=J}else re>0&&r.strokeText(c,l,u),r.fillText(c,l,u);E!==0&&(r.rotate(-E),r.translate(-v,-f))}}};var yt={};yt.drawNode=function(r,e,t){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,o,l,u=e._private,v=u.rscratch,f=e.position();if(!(!ae(f.x)||!ae(f.y))&&!(i&&!e.visible())){var c=i?e.effectiveOpacity():1,h=s.usePaths(),d,y=!1,g=e.padding();o=e.width()+2*g,l=e.height()+2*g;var p;t&&(p=t,r.translate(-p.x1,-p.y1));for(var m=e.pstyle(\"background-image\"),b=m.value,w=new Array(b.length),E=new Array(b.length),C=0,x=0;x<b.length;x++){var T=b[x],k=w[x]=T!=null&&T!==\"none\";if(k){var D=e.cy().style().getIndexedStyle(e,\"background-image-crossorigin\",\"value\",x);C++,E[x]=s.getCachedImage(T,D,function(){u.backgroundTimestamp=Date.now(),e.emitAndNotify(\"background\")})}}var B=e.pstyle(\"background-blacken\").value,P=e.pstyle(\"border-width\").pfValue,A=e.pstyle(\"background-opacity\").value*c,R=e.pstyle(\"border-color\").value,L=e.pstyle(\"border-style\").value,I=e.pstyle(\"border-join\").value,M=e.pstyle(\"border-cap\").value,O=e.pstyle(\"border-position\").value,V=e.pstyle(\"border-dash-pattern\").pfValue,G=e.pstyle(\"border-dash-offset\").pfValue,N=e.pstyle(\"border-opacity\").value*c,F=e.pstyle(\"outline-width\").pfValue,U=e.pstyle(\"outline-color\").value,Q=e.pstyle(\"outline-style\").value,K=e.pstyle(\"outline-opacity\").value*c,j=e.pstyle(\"outline-offset\").value,re=e.pstyle(\"corner-radius\").value;re!==\"auto\"&&(re=e.pstyle(\"corner-radius\").pfValue);var ne=function(){var ue=arguments.length>0&&arguments[0]!==void 0?arguments[0]:A;s.eleFillStyle(r,e,ue)},J=function(){var ue=arguments.length>0&&arguments[0]!==void 0?arguments[0]:N;s.colorStrokeStyle(r,R[0],R[1],R[2],ue)},z=function(){var ue=arguments.length>0&&arguments[0]!==void 0?arguments[0]:K;s.colorStrokeStyle(r,U[0],U[1],U[2],ue)},q=function(ue,X,S,_){var W=s.nodePathCache=s.nodePathCache||[],$=cv(S===\"polygon\"?S+\",\"+_.join(\",\"):S,\"\"+X,\"\"+ue,\"\"+re),Z=W[$],oe,ee=!1;return Z!=null?(oe=Z,ee=!0,v.pathCache=oe):(oe=new Path2D,W[$]=v.pathCache=oe),{path:oe,cacheHit:ee}},H=e.pstyle(\"shape\").strValue,Y=e.pstyle(\"shape-polygon-points\").pfValue;if(h){r.translate(f.x,f.y);var te=q(o,l,H,Y);d=te.path,y=te.cacheHit}var ce=function(){if(!y){var ue=f;h&&(ue={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(d||r,ue.x,ue.y,o,l,re,v)}h?r.fill(d):r.fill()},Ae=function(){for(var ue=arguments.length>0&&arguments[0]!==void 0?arguments[0]:c,X=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,S=u.backgrounding,_=0,W=0;W<E.length;W++){var $=e.cy().style().getIndexedStyle(e,\"background-image-containment\",\"value\",W);if(X&&$===\"over\"||!X&&$===\"inside\"){_++;continue}w[W]&&E[W].complete&&!E[W].error&&(_++,s.drawInscribedImage(r,E[W],e,W,ue))}u.backgrounding=_!==C,S!==u.backgrounding&&e.updateStyle(!1)},Ce=function(){var ue=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,X=arguments.length>1&&arguments[1]!==void 0?arguments[1]:c;s.hasPie(e)&&(s.drawPie(r,e,X),ue&&(h||s.nodeShapes[s.getNodeShape(e)].draw(r,f.x,f.y,o,l,re,v)))},we=function(){var ue=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,X=arguments.length>1&&arguments[1]!==void 0?arguments[1]:c;s.hasStripe(e)&&(r.save(),h?r.clip(v.pathCache):(s.nodeShapes[s.getNodeShape(e)].draw(r,f.x,f.y,o,l,re,v),r.clip()),s.drawStripe(r,e,X),r.restore(),ue&&(h||s.nodeShapes[s.getNodeShape(e)].draw(r,f.x,f.y,o,l,re,v)))},ye=function(){var ue=arguments.length>0&&arguments[0]!==void 0?arguments[0]:c,X=(B>0?B:-B)*ue,S=B>0?0:255;B!==0&&(s.colorFillStyle(r,S,S,S,X),h?r.fill(d):r.fill())},ie=function(){if(P>0){if(r.lineWidth=P,r.lineCap=M,r.lineJoin=I,r.setLineDash)switch(L){case\"dotted\":r.setLineDash([1,1]);break;case\"dashed\":r.setLineDash(V),r.lineDashOffset=G;break;case\"solid\":case\"double\":r.setLineDash([]);break}if(O!==\"center\"){if(r.save(),r.lineWidth*=2,O===\"inside\")h?r.clip(d):r.clip();else{var ue=new Path2D;ue.rect(-o/2-P,-l/2-P,o+2*P,l+2*P),ue.addPath(d),r.clip(ue,\"evenodd\")}h?r.stroke(d):r.stroke(),r.restore()}else h?r.stroke(d):r.stroke();if(L===\"double\"){r.lineWidth=P/3;var X=r.globalCompositeOperation;r.globalCompositeOperation=\"destination-out\",h?r.stroke(d):r.stroke(),r.globalCompositeOperation=X}r.setLineDash&&r.setLineDash([])}},de=function(){if(F>0){if(r.lineWidth=F,r.lineCap=\"butt\",r.setLineDash)switch(Q){case\"dotted\":r.setLineDash([1,1]);break;case\"dashed\":r.setLineDash([4,2]);break;case\"solid\":case\"double\":r.setLineDash([]);break}var ue=f;h&&(ue={x:0,y:0});var X=s.getNodeShape(e),S=P;O===\"inside\"&&(S=0),O===\"outside\"&&(S*=2);var _=(o+S+(F+j))/o,W=(l+S+(F+j))/l,$=o*_,Z=l*W,oe=s.nodeShapes[X].points,ee;if(h){var ve=q($,Z,X,oe);ee=ve.path}if(X===\"ellipse\")s.drawEllipsePath(ee||r,ue.x,ue.y,$,Z);else if([\"round-diamond\",\"round-heptagon\",\"round-hexagon\",\"round-octagon\",\"round-pentagon\",\"round-polygon\",\"round-triangle\",\"round-tag\"].includes(X)){var le=0,me=0,De=0;X===\"round-diamond\"?le=(S+j+F)*1.4:X===\"round-heptagon\"?(le=(S+j+F)*1.075,De=-(S/2+j+F)/35):X===\"round-hexagon\"?le=(S+j+F)*1.12:X===\"round-pentagon\"?(le=(S+j+F)*1.13,De=-(S/2+j+F)/15):X===\"round-tag\"?(le=(S+j+F)*1.12,me=(S/2+F+j)*.07):X===\"round-triangle\"&&(le=(S+j+F)*(Math.PI/2),De=-(S+j/2+F)/Math.PI),le!==0&&(_=(o+le)/o,$=o*_,[\"round-hexagon\",\"round-tag\"].includes(X)||(W=(l+le)/l,Z=l*W)),re=re===\"auto\"?Ev($,Z):re;for(var Te=$/2,fe=Z/2,Pe=re+(S+F+j)/2,Be=new Array(oe.length/2),je=new Array(oe.length/2),Ke=0;Ke<oe.length/2;Ke++)Be[Ke]={x:ue.x+me+Te*oe[Ke*2],y:ue.y+De+fe*oe[Ke*2+1]};var mr,Ye,ir,er,lr=Be.length;for(Ye=Be[lr-1],mr=0;mr<lr;mr++)ir=Be[mr%lr],er=Be[(mr+1)%lr],je[mr]=po(Ye,ir,er,Pe),Ye=ir,ir=er;s.drawRoundPolygonPath(ee||r,ue.x+me,ue.y+De,o*_,l*W,oe,je)}else if([\"roundrectangle\",\"round-rectangle\"].includes(X))re=re===\"auto\"?vt($,Z):re,s.drawRoundRectanglePath(ee||r,ue.x,ue.y,$,Z,re+(S+F+j)/2);else if([\"cutrectangle\",\"cut-rectangle\"].includes(X))re=re===\"auto\"?no():re,s.drawCutRectanglePath(ee||r,ue.x,ue.y,$,Z,null,re+(S+F+j)/4);else if([\"bottomroundrectangle\",\"bottom-round-rectangle\"].includes(X))re=re===\"auto\"?vt($,Z):re,s.drawBottomRoundRectanglePath(ee||r,ue.x,ue.y,$,Z,re+(S+F+j)/2);else if(X===\"barrel\")s.drawBarrelPath(ee||r,ue.x,ue.y,$,Z);else if(X.startsWith(\"polygon\")||[\"rhomboid\",\"right-rhomboid\",\"round-tag\",\"tag\",\"vee\"].includes(X)){var jr=(S+F+j)/o;oe=En(Cn(oe,jr)),s.drawPolygonPath(ee||r,ue.x,ue.y,o,l,oe)}else{var Ze=(S+F+j)/o;oe=En(Cn(oe,-Ze)),s.drawPolygonPath(ee||r,ue.x,ue.y,o,l,oe)}if(h?r.stroke(ee):r.stroke(),Q===\"double\"){r.lineWidth=S/3;var Wr=r.globalCompositeOperation;r.globalCompositeOperation=\"destination-out\",h?r.stroke(ee):r.stroke(),r.globalCompositeOperation=Wr}r.setLineDash&&r.setLineDash([])}},he=function(){n&&s.drawNodeOverlay(r,e,f,o,l)},Ee=function(){n&&s.drawNodeUnderlay(r,e,f,o,l)},pe=function(){s.drawElementText(r,e,null,a)},Se=e.pstyle(\"ghost\").value===\"yes\";if(Se){var Re=e.pstyle(\"ghost-offset-x\").pfValue,Oe=e.pstyle(\"ghost-offset-y\").pfValue,Ne=e.pstyle(\"ghost-opacity\").value,ze=Ne*c;r.translate(Re,Oe),z(),de(),ne(Ne*A),ce(),Ae(ze,!0),J(Ne*N),ie(),Ce(B!==0||P!==0),we(B!==0||P!==0),Ae(ze,!1),ye(ze),r.translate(-Re,-Oe)}h&&r.translate(-f.x,-f.y),Ee(),h&&r.translate(f.x,f.y),z(),de(),ne(),ce(),Ae(c,!0),J(),ie(),Ce(B!==0||P!==0),we(B!==0||P!==0),Ae(c,!1),ye(),h&&r.translate(-f.x,-f.y),pe(),he(),t&&r.translate(p.x1,p.y1)}};var Pf=function(e){if(![\"overlay\",\"underlay\"].includes(e))throw new Error(\"Invalid state\");return function(t,a,n,i,s){var o=this;if(a.visible()){var l=a.pstyle(\"\".concat(e,\"-padding\")).pfValue,u=a.pstyle(\"\".concat(e,\"-opacity\")).value,v=a.pstyle(\"\".concat(e,\"-color\")).value,f=a.pstyle(\"\".concat(e,\"-shape\")).value,c=a.pstyle(\"\".concat(e,\"-corner-radius\")).value;if(u>0){if(n=n||a.position(),i==null||s==null){var h=a.padding();i=a.width()+2*h,s=a.height()+2*h}o.colorFillStyle(t,v[0],v[1],v[2],u),o.nodeShapes[f].draw(t,n.x,n.y,i+l*2,s+l*2,c),t.fill()}}}};yt.drawNodeOverlay=Pf(\"overlay\");yt.drawNodeUnderlay=Pf(\"underlay\");yt.hasPie=function(r){return r=r[0],r._private.hasPie};yt.hasStripe=function(r){return r=r[0],r._private.hasStripe};yt.drawPie=function(r,e,t,a){e=e[0],a=a||e.position();var n=e.cy().style(),i=e.pstyle(\"pie-size\"),s=e.pstyle(\"pie-hole\"),o=e.pstyle(\"pie-start-angle\").pfValue,l=a.x,u=a.y,v=e.width(),f=e.height(),c=Math.min(v,f)/2,h,d=0,y=this.usePaths();if(y&&(l=0,u=0),i.units===\"%\"?c=c*i.pfValue:i.pfValue!==void 0&&(c=i.pfValue/2),s.units===\"%\"?h=c*s.pfValue:s.pfValue!==void 0&&(h=s.pfValue/2),!(h>=c))for(var g=1;g<=n.pieBackgroundN;g++){var p=e.pstyle(\"pie-\"+g+\"-background-size\").value,m=e.pstyle(\"pie-\"+g+\"-background-color\").value,b=e.pstyle(\"pie-\"+g+\"-background-opacity\").value*t,w=p/100;w+d>1&&(w=1-d);var E=1.5*Math.PI+2*Math.PI*d;E+=o;var C=2*Math.PI*w,x=E+C;p===0||d>=1||d+w>1||(h===0?(r.beginPath(),r.moveTo(l,u),r.arc(l,u,c,E,x),r.closePath()):(r.beginPath(),r.arc(l,u,c,E,x),r.arc(l,u,h,x,E,!0),r.closePath()),this.colorFillStyle(r,m[0],m[1],m[2],b),r.fill(),d+=w)}};yt.drawStripe=function(r,e,t,a){e=e[0],a=a||e.position();var n=e.cy().style(),i=a.x,s=a.y,o=e.width(),l=e.height(),u=0,v=this.usePaths();r.save();var f=e.pstyle(\"stripe-direction\").value,c=e.pstyle(\"stripe-size\");switch(f){case\"vertical\":break;case\"righward\":r.rotate(-Math.PI/2);break}var h=o,d=l;c.units===\"%\"?(h=h*c.pfValue,d=d*c.pfValue):c.pfValue!==void 0&&(h=c.pfValue,d=c.pfValue),v&&(i=0,s=0),s-=h/2,i-=d/2;for(var y=1;y<=n.stripeBackgroundN;y++){var g=e.pstyle(\"stripe-\"+y+\"-background-size\").value,p=e.pstyle(\"stripe-\"+y+\"-background-color\").value,m=e.pstyle(\"stripe-\"+y+\"-background-opacity\").value*t,b=g/100;b+u>1&&(b=1-u),!(g===0||u>=1||u+b>1)&&(r.beginPath(),r.rect(i,s+d*u,h,d*b),r.closePath(),this.colorFillStyle(r,p[0],p[1],p[2],m),r.fill(),u+=b)}r.restore()};var xr={},_y=100;xr.getPixelRatio=function(){var r=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),t=r.backingStorePixelRatio||r.webkitBackingStorePixelRatio||r.mozBackingStorePixelRatio||r.msBackingStorePixelRatio||r.oBackingStorePixelRatio||r.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/t};xr.paintCache=function(r){for(var e=this.paintCaches=this.paintCaches||[],t=!0,a,n=0;n<e.length;n++)if(a=e[n],a.context===r){t=!1;break}return t&&(a={context:r},e.push(a)),a};xr.createGradientStyleFor=function(r,e,t,a,n){var i,s=this.usePaths(),o=t.pstyle(e+\"-gradient-stop-colors\").value,l=t.pstyle(e+\"-gradient-stop-positions\").pfValue;if(a===\"radial-gradient\")if(t.isEdge()){var u=t.sourceEndpoint(),v=t.targetEndpoint(),f=t.midpoint(),c=Bt(u,f),h=Bt(v,f);i=r.createRadialGradient(f.x,f.y,0,f.x,f.y,Math.max(c,h))}else{var d=s?{x:0,y:0}:t.position(),y=t.paddedWidth(),g=t.paddedHeight();i=r.createRadialGradient(d.x,d.y,0,d.x,d.y,Math.max(y,g))}else if(t.isEdge()){var p=t.sourceEndpoint(),m=t.targetEndpoint();i=r.createLinearGradient(p.x,p.y,m.x,m.y)}else{var b=s?{x:0,y:0}:t.position(),w=t.paddedWidth(),E=t.paddedHeight(),C=w/2,x=E/2,T=t.pstyle(\"background-gradient-direction\").value;switch(T){case\"to-bottom\":i=r.createLinearGradient(b.x,b.y-x,b.x,b.y+x);break;case\"to-top\":i=r.createLinearGradient(b.x,b.y+x,b.x,b.y-x);break;case\"to-left\":i=r.createLinearGradient(b.x+C,b.y,b.x-C,b.y);break;case\"to-right\":i=r.createLinearGradient(b.x-C,b.y,b.x+C,b.y);break;case\"to-bottom-right\":case\"to-right-bottom\":i=r.createLinearGradient(b.x-C,b.y-x,b.x+C,b.y+x);break;case\"to-top-right\":case\"to-right-top\":i=r.createLinearGradient(b.x-C,b.y+x,b.x+C,b.y-x);break;case\"to-bottom-left\":case\"to-left-bottom\":i=r.createLinearGradient(b.x+C,b.y-x,b.x-C,b.y+x);break;case\"to-top-left\":case\"to-left-top\":i=r.createLinearGradient(b.x+C,b.y+x,b.x-C,b.y-x);break}}if(!i)return null;for(var k=l.length===o.length,D=o.length,B=0;B<D;B++)i.addColorStop(k?l[B]:B/(D-1),\"rgba(\"+o[B][0]+\",\"+o[B][1]+\",\"+o[B][2]+\",\"+n+\")\");return i};xr.gradientFillStyle=function(r,e,t,a){var n=this.createGradientStyleFor(r,\"background\",e,t,a);if(!n)return null;r.fillStyle=n};xr.colorFillStyle=function(r,e,t,a,n){r.fillStyle=\"rgba(\"+e+\",\"+t+\",\"+a+\",\"+n+\")\"};xr.eleFillStyle=function(r,e,t){var a=e.pstyle(\"background-fill\").value;if(a===\"linear-gradient\"||a===\"radial-gradient\")this.gradientFillStyle(r,e,a,t);else{var n=e.pstyle(\"background-color\").value;this.colorFillStyle(r,n[0],n[1],n[2],t)}};xr.gradientStrokeStyle=function(r,e,t,a){var n=this.createGradientStyleFor(r,\"line\",e,t,a);if(!n)return null;r.strokeStyle=n};xr.colorStrokeStyle=function(r,e,t,a,n){r.strokeStyle=\"rgba(\"+e+\",\"+t+\",\"+a+\",\"+n+\")\"};xr.eleStrokeStyle=function(r,e,t){var a=e.pstyle(\"line-fill\").value;if(a===\"linear-gradient\"||a===\"radial-gradient\")this.gradientStrokeStyle(r,e,a,t);else{var n=e.pstyle(\"line-color\").value;this.colorStrokeStyle(r,n[0],n[1],n[2],t)}};xr.matchCanvasSize=function(r){var e=this,t=e.data,a=e.findContainerClientCoords(),n=a[2],i=a[3],s=e.getPixelRatio(),o=e.motionBlurPxRatio;(r===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE]||r===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG])&&(s=o);var l=n*s,u=i*s,v;if(!(l===e.canvasWidth&&u===e.canvasHeight)){e.fontCaches=null;var f=t.canvasContainer;f.style.width=n+\"px\",f.style.height=i+\"px\";for(var c=0;c<e.CANVAS_LAYERS;c++)v=t.canvases[c],v.width=l,v.height=u,v.style.width=n+\"px\",v.style.height=i+\"px\";for(var c=0;c<e.BUFFER_COUNT;c++)v=t.bufferCanvases[c],v.width=l,v.height=u,v.style.width=n+\"px\",v.style.height=i+\"px\";e.textureMult=1,s<=1&&(v=t.bufferCanvases[e.TEXTURE_BUFFER],e.textureMult=2,v.width=l*e.textureMult,v.height=u*e.textureMult),e.canvasWidth=l,e.canvasHeight=u,e.pixelRatio=s}};xr.renderTo=function(r,e,t,a){this.render({forcedContext:r,forcedZoom:e,forcedPan:t,drawAllLayers:!0,forcedPxRatio:a})};xr.clearCanvas=function(){var r=this,e=r.data;function t(a){a.clearRect(0,0,r.canvasWidth,r.canvasHeight)}t(e.contexts[r.NODE]),t(e.contexts[r.DRAG])};xr.render=function(r){var e=this;r=r||pv();var t=e.cy,a=r.forcedContext,n=r.drawAllLayers,i=r.drawOnlyNodeLayer,s=r.forcedZoom,o=r.forcedPan,l=r.forcedPxRatio===void 0?this.getPixelRatio():r.forcedPxRatio,u=e.data,v=u.canvasNeedsRedraw,f=e.textureOnViewport&&!a&&(e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming),c=r.motionBlur!==void 0?r.motionBlur:e.motionBlur,h=e.motionBlurPxRatio,d=t.hasCompoundNodes(),y=e.hoverData.draggingEles,g=!!(e.hoverData.selecting||e.touchData.selecting);c=c&&!a&&e.motionBlurEnabled&&!g;var p=c;a||(e.prevPxRatio!==l&&(e.invalidateContainerClientCoordsCache(),e.matchCanvasSize(e.container),e.redrawHint(\"eles\",!0),e.redrawHint(\"drag\",!0)),e.prevPxRatio=l),!a&&e.motionBlurTimeout&&clearTimeout(e.motionBlurTimeout),c&&(e.mbFrames==null&&(e.mbFrames=0),e.mbFrames++,e.mbFrames<3&&(p=!1),e.mbFrames>e.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!f&&(v[e.NODE]=!0,v[e.SELECT_BOX]=!0);var m=t.style(),b=t.zoom(),w=s!==void 0?s:b,E=t.pan(),C={x:E.x,y:E.y},x={zoom:b,pan:{x:E.x,y:E.y}},T=e.prevViewport,k=T===void 0||x.zoom!==T.zoom||x.pan.x!==T.pan.x||x.pan.y!==T.pan.y;!k&&!(y&&!d)&&(e.motionBlurPxRatio=1),o&&(C=o),w*=l,C.x*=l,C.y*=l;var D=e.getCachedZSortedEles();function B(J,z,q,H,Y){var te=J.globalCompositeOperation;J.globalCompositeOperation=\"destination-out\",e.colorFillStyle(J,255,255,255,e.motionBlurTransparency),J.fillRect(z,q,H,Y),J.globalCompositeOperation=te}function P(J,z){var q,H,Y,te;!e.clearingMotionBlur&&(J===u.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||J===u.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(q={x:E.x*h,y:E.y*h},H=b*h,Y=e.canvasWidth*h,te=e.canvasHeight*h):(q=C,H=w,Y=e.canvasWidth,te=e.canvasHeight),J.setTransform(1,0,0,1,0,0),z===\"motionBlur\"?B(J,0,0,Y,te):!a&&(z===void 0||z)&&J.clearRect(0,0,Y,te),n||(J.translate(q.x,q.y),J.scale(H,H)),o&&J.translate(o.x,o.y),s&&J.scale(s,s)}if(f||(e.textureDrawLastFrame=!1),f){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=t.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var A=e.data.bufferContexts[e.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:l*e.textureMult});var x=e.textureCache.viewport={zoom:t.zoom(),pan:t.pan(),width:e.canvasWidth,height:e.canvasHeight};x.mpan={x:(0-x.pan.x)/x.zoom,y:(0-x.pan.y)/x.zoom}}v[e.DRAG]=!1,v[e.NODE]=!1;var R=u.contexts[e.NODE],L=e.textureCache.texture,x=e.textureCache.viewport;R.setTransform(1,0,0,1,0,0),c?B(R,0,0,x.width,x.height):R.clearRect(0,0,x.width,x.height);var I=m.core(\"outside-texture-bg-color\").value,M=m.core(\"outside-texture-bg-opacity\").value;e.colorFillStyle(R,I[0],I[1],I[2],M),R.fillRect(0,0,x.width,x.height);var b=t.zoom();P(R,!1),R.clearRect(x.mpan.x,x.mpan.y,x.width/x.zoom/l,x.height/x.zoom/l),R.drawImage(L,x.mpan.x,x.mpan.y,x.width/x.zoom/l,x.height/x.zoom/l)}else e.textureOnViewport&&!a&&(e.textureCache=null);var O=t.extent(),V=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),G=e.hideEdgesOnViewport&&V,N=[];if(N[e.NODE]=!v[e.NODE]&&c&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,N[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),N[e.DRAG]=!v[e.DRAG]&&c&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,N[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),v[e.NODE]||n||i||N[e.NODE]){var F=c&&!N[e.NODE]&&h!==1,R=a||(F?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:u.contexts[e.NODE]),U=c&&!F?\"motionBlur\":void 0;P(R,U),G?e.drawCachedNodes(R,D.nondrag,l,O):e.drawLayeredElements(R,D.nondrag,l,O),e.debug&&e.drawDebugPoints(R,D.nondrag),!n&&!c&&(v[e.NODE]=!1)}if(!i&&(v[e.DRAG]||n||N[e.DRAG])){var F=c&&!N[e.DRAG]&&h!==1,R=a||(F?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:u.contexts[e.DRAG]);P(R,c&&!F?\"motionBlur\":void 0),G?e.drawCachedNodes(R,D.drag,l,O):e.drawCachedElements(R,D.drag,l,O),e.debug&&e.drawDebugPoints(R,D.drag),!n&&!c&&(v[e.DRAG]=!1)}if(this.drawSelectionRectangle(r,P),c&&h!==1){var Q=u.contexts[e.NODE],K=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],j=u.contexts[e.DRAG],re=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],ne=function(z,q,H){z.setTransform(1,0,0,1,0,0),H||!p?z.clearRect(0,0,e.canvasWidth,e.canvasHeight):B(z,0,0,e.canvasWidth,e.canvasHeight);var Y=h;z.drawImage(q,0,0,e.canvasWidth*Y,e.canvasHeight*Y,0,0,e.canvasWidth,e.canvasHeight)};(v[e.NODE]||N[e.NODE])&&(ne(Q,K,N[e.NODE]),v[e.NODE]=!1),(v[e.DRAG]||N[e.DRAG])&&(ne(j,re,N[e.DRAG]),v[e.DRAG]=!1)}e.prevViewport=x,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),c&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!f,e.mbFrames=0,v[e.NODE]=!0,v[e.DRAG]=!0,e.redraw()},_y)),a||t.emit(\"render\")};var ha;xr.drawSelectionRectangle=function(r,e){var t=this,a=t.cy,n=t.data,i=a.style(),s=r.drawOnlyNodeLayer,o=r.drawAllLayers,l=n.canvasNeedsRedraw,u=r.forcedContext;if(t.showFps||!s&&l[t.SELECT_BOX]&&!o){var v=u||n.contexts[t.SELECT_BOX];if(e(v),t.selection[4]==1&&(t.hoverData.selecting||t.touchData.selecting)){var f=t.cy.zoom(),c=i.core(\"selection-box-border-width\").value/f;v.lineWidth=c,v.fillStyle=\"rgba(\"+i.core(\"selection-box-color\").value[0]+\",\"+i.core(\"selection-box-color\").value[1]+\",\"+i.core(\"selection-box-color\").value[2]+\",\"+i.core(\"selection-box-opacity\").value+\")\",v.fillRect(t.selection[0],t.selection[1],t.selection[2]-t.selection[0],t.selection[3]-t.selection[1]),c>0&&(v.strokeStyle=\"rgba(\"+i.core(\"selection-box-border-color\").value[0]+\",\"+i.core(\"selection-box-border-color\").value[1]+\",\"+i.core(\"selection-box-border-color\").value[2]+\",\"+i.core(\"selection-box-opacity\").value+\")\",v.strokeRect(t.selection[0],t.selection[1],t.selection[2]-t.selection[0],t.selection[3]-t.selection[1]))}if(n.bgActivePosistion&&!t.hoverData.selecting){var f=t.cy.zoom(),h=n.bgActivePosistion;v.fillStyle=\"rgba(\"+i.core(\"active-bg-color\").value[0]+\",\"+i.core(\"active-bg-color\").value[1]+\",\"+i.core(\"active-bg-color\").value[2]+\",\"+i.core(\"active-bg-opacity\").value+\")\",v.beginPath(),v.arc(h.x,h.y,i.core(\"active-bg-size\").pfValue/f,0,2*Math.PI),v.fill()}var d=t.lastRedrawTime;if(t.showFps&&d){d=Math.round(d);var y=Math.round(1e3/d),g=\"1 frame = \"+d+\" ms = \"+y+\" fps\";if(v.setTransform(1,0,0,1,0,0),v.fillStyle=\"rgba(255, 0, 0, 0.75)\",v.strokeStyle=\"rgba(255, 0, 0, 0.75)\",v.font=\"30px Arial\",!ha){var p=v.measureText(g);ha=p.actualBoundingBoxAscent}v.fillText(g,0,ha);var m=60;v.strokeRect(0,ha+10,250,20),v.fillRect(0,ha+10,250*Math.min(y/m,1),20)}o||(l[t.SELECT_BOX]=!1)}};function Hl(r,e,t){var a=r.createShader(e);if(r.shaderSource(a,t),r.compileShader(a),!r.getShaderParameter(a,r.COMPILE_STATUS))throw new Error(r.getShaderInfoLog(a));return a}function Gy(r,e,t){var a=Hl(r,r.VERTEX_SHADER,e),n=Hl(r,r.FRAGMENT_SHADER,t),i=r.createProgram();if(r.attachShader(i,a),r.attachShader(i,n),r.linkProgram(i),!r.getProgramParameter(i,r.LINK_STATUS))throw new Error(\"Could not initialize shaders\");return i}function Hy(r,e,t){t===void 0&&(t=e);var a=r.makeOffscreenCanvas(e,t),n=a.context=a.getContext(\"2d\");return a.clear=function(){return n.clearRect(0,0,a.width,a.height)},a.clear(),a}function bo(r){var e=r.pixelRatio,t=r.cy.zoom(),a=r.cy.pan();return{zoom:t*e,pan:{x:a.x*e,y:a.y*e}}}function Wy(r){var e=r.pixelRatio,t=r.cy.zoom();return t*e}function $y(r,e,t,a,n){var i=a*t+e.x,s=n*t+e.y;return s=Math.round(r.canvasHeight-s),[i,s]}function Uy(r){return r.pstyle(\"background-fill\").value!==\"solid\"||r.pstyle(\"background-image\").strValue!==\"none\"?!1:r.pstyle(\"border-width\").value===0||r.pstyle(\"border-opacity\").value===0?!0:r.pstyle(\"border-style\").value===\"solid\"}function Ky(r,e){if(r.length!==e.length)return!1;for(var t=0;t<r.length;t++)if(r[t]!==e[t])return!1;return!0}function xt(r,e,t){var a=r[0]/255,n=r[1]/255,i=r[2]/255,s=e,o=t||new Array(4);return o[0]=a*s,o[1]=n*s,o[2]=i*s,o[3]=s,o}function qt(r,e){var t=e||new Array(4);return t[0]=(r>>0&255)/255,t[1]=(r>>8&255)/255,t[2]=(r>>16&255)/255,t[3]=(r>>24&255)/255,t}function Xy(r){return r[0]+(r[1]<<8)+(r[2]<<16)+(r[3]<<24)}function Yy(r,e){var t=r.createTexture();return t.buffer=function(a){r.bindTexture(r.TEXTURE_2D,t),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR_MIPMAP_NEAREST),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,a),r.generateMipmap(r.TEXTURE_2D),r.bindTexture(r.TEXTURE_2D,null)},t.deleteTexture=function(){r.deleteTexture(t)},t}function Af(r,e){switch(e){case\"float\":return[1,r.FLOAT,4];case\"vec2\":return[2,r.FLOAT,4];case\"vec3\":return[3,r.FLOAT,4];case\"vec4\":return[4,r.FLOAT,4];case\"int\":return[1,r.INT,4];case\"ivec2\":return[2,r.INT,4]}}function Rf(r,e,t){switch(e){case r.FLOAT:return new Float32Array(t);case r.INT:return new Int32Array(t)}}function Zy(r,e,t,a,n,i){switch(e){case r.FLOAT:return new Float32Array(t.buffer,i*a,n);case r.INT:return new Int32Array(t.buffer,i*a,n)}}function Qy(r,e,t,a){var n=Af(r,e),i=Je(n,2),s=i[0],o=i[1],l=Rf(r,o,a),u=r.createBuffer();return r.bindBuffer(r.ARRAY_BUFFER,u),r.bufferData(r.ARRAY_BUFFER,l,r.STATIC_DRAW),o===r.FLOAT?r.vertexAttribPointer(t,s,o,!1,0,0):o===r.INT&&r.vertexAttribIPointer(t,s,o,0,0),r.enableVertexAttribArray(t),r.bindBuffer(r.ARRAY_BUFFER,null),u}function Fr(r,e,t,a){var n=Af(r,t),i=Je(n,3),s=i[0],o=i[1],l=i[2],u=Rf(r,o,e*s),v=s*l,f=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,f),r.bufferData(r.ARRAY_BUFFER,e*v,r.DYNAMIC_DRAW),r.enableVertexAttribArray(a),o===r.FLOAT?r.vertexAttribPointer(a,s,o,!1,v,0):o===r.INT&&r.vertexAttribIPointer(a,s,o,v,0),r.vertexAttribDivisor(a,1),r.bindBuffer(r.ARRAY_BUFFER,null);for(var c=new Array(e),h=0;h<e;h++)c[h]=Zy(r,o,u,v,s,h);return f.dataArray=u,f.stride=v,f.size=s,f.getView=function(d){return c[d]},f.setPoint=function(d,y,g){var p=c[d];p[0]=y,p[1]=g},f.bufferSubData=function(d){r.bindBuffer(r.ARRAY_BUFFER,f),d?r.bufferSubData(r.ARRAY_BUFFER,0,u,0,d*s):r.bufferSubData(r.ARRAY_BUFFER,0,u)},f}function Jy(r,e,t){for(var a=9,n=new Float32Array(e*a),i=new Array(e),s=0;s<e;s++){var o=s*a*4;i[s]=new Float32Array(n.buffer,o,a)}var l=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,l),r.bufferData(r.ARRAY_BUFFER,n.byteLength,r.DYNAMIC_DRAW);for(var u=0;u<3;u++){var v=t+u;r.enableVertexAttribArray(v),r.vertexAttribPointer(v,3,r.FLOAT,!1,36,u*12),r.vertexAttribDivisor(v,1)}return r.bindBuffer(r.ARRAY_BUFFER,null),l.getMatrixView=function(f){return i[f]},l.setData=function(f,c){i[c].set(f,0)},l.bufferSubData=function(){r.bindBuffer(r.ARRAY_BUFFER,l),r.bufferSubData(r.ARRAY_BUFFER,0,n)},l}function jy(r){var e=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,e);var t=r.createTexture();return r.bindTexture(r.TEXTURE_2D,t),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0),r.bindFramebuffer(r.FRAMEBUFFER,null),e.setFramebufferAttachmentSizes=function(a,n){r.bindTexture(r.TEXTURE_2D,t),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,a,n,0,r.RGBA,r.UNSIGNED_BYTE,null)},e}var Wl=typeof Float32Array<\"u\"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var r=0,e=arguments.length;e--;)r+=arguments[e]*arguments[e];return Math.sqrt(r)});function Es(){var r=new Wl(9);return Wl!=Float32Array&&(r[1]=0,r[2]=0,r[3]=0,r[5]=0,r[6]=0,r[7]=0),r[0]=1,r[4]=1,r[8]=1,r}function $l(r){return r[0]=1,r[1]=0,r[2]=0,r[3]=0,r[4]=1,r[5]=0,r[6]=0,r[7]=0,r[8]=1,r}function em(r,e,t){var a=e[0],n=e[1],i=e[2],s=e[3],o=e[4],l=e[5],u=e[6],v=e[7],f=e[8],c=t[0],h=t[1],d=t[2],y=t[3],g=t[4],p=t[5],m=t[6],b=t[7],w=t[8];return r[0]=c*a+h*s+d*u,r[1]=c*n+h*o+d*v,r[2]=c*i+h*l+d*f,r[3]=y*a+g*s+p*u,r[4]=y*n+g*o+p*v,r[5]=y*i+g*l+p*f,r[6]=m*a+b*s+w*u,r[7]=m*n+b*o+w*v,r[8]=m*i+b*l+w*f,r}function yn(r,e,t){var a=e[0],n=e[1],i=e[2],s=e[3],o=e[4],l=e[5],u=e[6],v=e[7],f=e[8],c=t[0],h=t[1];return r[0]=a,r[1]=n,r[2]=i,r[3]=s,r[4]=o,r[5]=l,r[6]=c*a+h*s+u,r[7]=c*n+h*o+v,r[8]=c*i+h*l+f,r}function Ul(r,e,t){var a=e[0],n=e[1],i=e[2],s=e[3],o=e[4],l=e[5],u=e[6],v=e[7],f=e[8],c=Math.sin(t),h=Math.cos(t);return r[0]=h*a+c*s,r[1]=h*n+c*o,r[2]=h*i+c*l,r[3]=h*s-c*a,r[4]=h*o-c*n,r[5]=h*l-c*i,r[6]=u,r[7]=v,r[8]=f,r}function Ws(r,e,t){var a=t[0],n=t[1];return r[0]=a*e[0],r[1]=a*e[1],r[2]=a*e[2],r[3]=n*e[3],r[4]=n*e[4],r[5]=n*e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r}function rm(r,e,t){return r[0]=2/e,r[1]=0,r[2]=0,r[3]=0,r[4]=-2/t,r[5]=0,r[6]=-1,r[7]=1,r[8]=1,r}var tm=(function(){function r(e,t,a,n){ht(this,r),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.texSize=t,this.texRows=a,this.texHeight=Math.floor(t/a),this.enableWrapping=!0,this.locked=!1,this.texture=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=n(e,t,t),this.scratch=n(e,t,this.texHeight,\"scratch\")}return gt(r,[{key:\"lock\",value:function(){this.locked=!0}},{key:\"getKeys\",value:function(){return new Set(this.keyToLocation.keys())}},{key:\"getScale\",value:function(t){var a=t.w,n=t.h,i=this.texHeight,s=this.texSize,o=i/n,l=a*o,u=n*o;return l>s&&(o=s/a,l=a*o,u=n*o),{scale:o,texW:l,texH:u}}},{key:\"draw\",value:function(t,a,n){var i=this;if(this.locked)throw new Error(\"can't draw, atlas is locked\");var s=this.texSize,o=this.texRows,l=this.texHeight,u=this.getScale(a),v=u.scale,f=u.texW,c=u.texH,h=function(b,w){if(n&&w){var E=w.context,C=b.x,x=b.row,T=C,k=l*x;E.save(),E.translate(T,k),E.scale(v,v),n(E,a),E.restore()}},d=[null,null],y=function(){h(i.freePointer,i.canvas),d[0]={x:i.freePointer.x,y:i.freePointer.row*l,w:f,h:c},d[1]={x:i.freePointer.x+f,y:i.freePointer.row*l,w:0,h:c},i.freePointer.x+=f,i.freePointer.x==s&&(i.freePointer.x=0,i.freePointer.row++)},g=function(){var b=i.scratch,w=i.canvas;b.clear(),h({x:0,row:0},b);var E=s-i.freePointer.x,C=f-E,x=l;{var T=i.freePointer.x,k=i.freePointer.row*l,D=E;w.context.drawImage(b,0,0,D,x,T,k,D,x),d[0]={x:T,y:k,w:D,h:c}}{var B=E,P=(i.freePointer.row+1)*l,A=C;w&&w.context.drawImage(b,B,0,A,x,0,P,A,x),d[1]={x:0,y:P,w:A,h:c}}i.freePointer.x=C,i.freePointer.row++},p=function(){i.freePointer.x=0,i.freePointer.row++};if(this.freePointer.x+f<=s)y();else{if(this.freePointer.row>=o-1)return!1;this.freePointer.x===s?(p(),y()):this.enableWrapping?g():(p(),y())}return this.keyToLocation.set(t,d),this.needsBuffer=!0,d}},{key:\"getOffsets\",value:function(t){return this.keyToLocation.get(t)}},{key:\"isEmpty\",value:function(){return this.freePointer.x===0&&this.freePointer.row===0}},{key:\"canFit\",value:function(t){if(this.locked)return!1;var a=this.texSize,n=this.texRows,i=this.getScale(t),s=i.texW;return this.freePointer.x+s>a?this.freePointer.row<n-1:!0}},{key:\"bufferIfNeeded\",value:function(t){this.texture||(this.texture=Yy(t,this.debugID)),this.needsBuffer&&(this.texture.buffer(this.canvas),this.needsBuffer=!1,this.locked&&(this.canvas=null,this.scratch=null))}},{key:\"dispose\",value:function(){this.texture&&(this.texture.deleteTexture(),this.texture=null),this.canvas=null,this.scratch=null,this.locked=!0}}])})(),am=(function(){function r(e,t,a,n){ht(this,r),this.r=e,this.texSize=t,this.texRows=a,this.createTextureCanvas=n,this.atlases=[],this.styleKeyToAtlas=new Map,this.markedKeys=new Set}return gt(r,[{key:\"getKeys\",value:function(){return new Set(this.styleKeyToAtlas.keys())}},{key:\"_createAtlas\",value:function(){var t=this.r,a=this.texSize,n=this.texRows,i=this.createTextureCanvas;return new tm(t,a,n,i)}},{key:\"_getScratchCanvas\",value:function(){if(!this.scratch){var t=this.r,a=this.texSize,n=this.texRows,i=this.createTextureCanvas,s=Math.floor(a/n);this.scratch=i(t,a,s,\"scratch\")}return this.scratch}},{key:\"draw\",value:function(t,a,n){var i=this.styleKeyToAtlas.get(t);return i||(i=this.atlases[this.atlases.length-1],(!i||!i.canFit(a))&&(i&&i.lock(),i=this._createAtlas(),this.atlases.push(i)),i.draw(t,a,n),this.styleKeyToAtlas.set(t,i)),i}},{key:\"getAtlas\",value:function(t){return this.styleKeyToAtlas.get(t)}},{key:\"hasAtlas\",value:function(t){return this.styleKeyToAtlas.has(t)}},{key:\"markKeyForGC\",value:function(t){this.markedKeys.add(t)}},{key:\"gc\",value:function(){var t=this,a=this.markedKeys;if(a.size===0){console.log(\"nothing to garbage collect\");return}var n=[],i=new Map,s=null,o=kr(this.atlases),l;try{var u=function(){var f=l.value,c=f.getKeys(),h=nm(a,c);if(h.size===0)return n.push(f),c.forEach(function(E){return i.set(E,f)}),1;s||(s=t._createAtlas(),n.push(s));var d=kr(c),y;try{for(d.s();!(y=d.n()).done;){var g=y.value;if(!h.has(g)){var p=f.getOffsets(g),m=Je(p,2),b=m[0],w=m[1];s.canFit({w:b.w+w.w,h:b.h})||(s.lock(),s=t._createAtlas(),n.push(s)),f.canvas&&(t._copyTextureToNewAtlas(g,f,s),i.set(g,s))}}}catch(E){d.e(E)}finally{d.f()}f.dispose()};for(o.s();!(l=o.n()).done;)u()}catch(v){o.e(v)}finally{o.f()}this.atlases=n,this.styleKeyToAtlas=i,this.markedKeys=new Set}},{key:\"_copyTextureToNewAtlas\",value:function(t,a,n){var i=a.getOffsets(t),s=Je(i,2),o=s[0],l=s[1];if(l.w===0)n.draw(t,o,function(c){c.drawImage(a.canvas,o.x,o.y,o.w,o.h,0,0,o.w,o.h)});else{var u=this._getScratchCanvas();u.clear(),u.context.drawImage(a.canvas,o.x,o.y,o.w,o.h,0,0,o.w,o.h),u.context.drawImage(a.canvas,l.x,l.y,l.w,l.h,o.w,0,l.w,l.h);var v=o.w+l.w,f=o.h;n.draw(t,{w:v,h:f},function(c){c.drawImage(u,0,0,v,f,0,0,v,f)})}}},{key:\"getCounts\",value:function(){return{keyCount:this.styleKeyToAtlas.size,atlasCount:new Set(this.styleKeyToAtlas.values()).size}}}])})();function nm(r,e){return r.intersection?r.intersection(e):new Set(mn(r).filter(function(t){return e.has(t)}))}var im=(function(){function r(e,t){ht(this,r),this.r=e,this.globalOptions=t,this.atlasSize=t.webglTexSize,this.maxAtlasesPerBatch=t.webglTexPerBatch,this.renderTypes=new Map,this.collections=new Map,this.typeAndIdToKey=new Map}return gt(r,[{key:\"getAtlasSize\",value:function(){return this.atlasSize}},{key:\"addAtlasCollection\",value:function(t,a){var n=this.globalOptions,i=n.webglTexSize,s=n.createTextureCanvas,o=a.texRows,l=this._cacheScratchCanvas(s),u=new am(this.r,i,o,l);this.collections.set(t,u)}},{key:\"addRenderType\",value:function(t,a){var n=a.collection;if(!this.collections.has(n))throw new Error(\"invalid atlas collection name '\".concat(n,\"'\"));var i=this.collections.get(n),s=be({type:t,atlasCollection:i},a);this.renderTypes.set(t,s)}},{key:\"getRenderTypeOpts\",value:function(t){return this.renderTypes.get(t)}},{key:\"getAtlasCollection\",value:function(t){return this.collections.get(t)}},{key:\"_cacheScratchCanvas\",value:function(t){var a=-1,n=-1,i=null;return function(s,o,l,u){return u?((!i||o!=a||l!=n)&&(a=o,n=l,i=t(s,o,l)),i):t(s,o,l)}}},{key:\"_key\",value:function(t,a){return\"\".concat(t,\"-\").concat(a)}},{key:\"invalidate\",value:function(t){var a=this,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.forceRedraw,s=i===void 0?!1:i,o=n.filterEle,l=o===void 0?function(){return!0}:o,u=n.filterType,v=u===void 0?function(){return!0}:u,f=!1,c=!1,h=kr(t),d;try{for(h.s();!(d=h.n()).done;){var y=d.value;if(l(y)){var g=kr(this.renderTypes.values()),p;try{var m=function(){var w=p.value,E=w.type;if(v(E)){var C=a.collections.get(w.collection),x=w.getKey(y),T=Array.isArray(x)?x:[x];if(s)T.forEach(function(P){return C.markKeyForGC(P)}),c=!0;else{var k=w.getID?w.getID(y):y.id(),D=a._key(E,k),B=a.typeAndIdToKey.get(D);B!==void 0&&!Ky(T,B)&&(f=!0,a.typeAndIdToKey.delete(D),B.forEach(function(P){return C.markKeyForGC(P)}))}}};for(g.s();!(p=g.n()).done;)m()}catch(b){g.e(b)}finally{g.f()}}}}catch(b){h.e(b)}finally{h.f()}return c&&(this.gc(),f=!1),f}},{key:\"gc\",value:function(){var t=kr(this.collections.values()),a;try{for(t.s();!(a=t.n()).done;){var n=a.value;n.gc()}}catch(i){t.e(i)}finally{t.f()}}},{key:\"getOrCreateAtlas\",value:function(t,a,n,i){var s=this.renderTypes.get(a),o=this.collections.get(s.collection),l=!1,u=o.draw(i,n,function(c){s.drawClipped?(c.save(),c.beginPath(),c.rect(0,0,n.w,n.h),c.clip(),s.drawElement(c,t,n,!0,!0),c.restore()):s.drawElement(c,t,n,!0,!0),l=!0});if(l){var v=s.getID?s.getID(t):t.id(),f=this._key(a,v);this.typeAndIdToKey.has(f)?this.typeAndIdToKey.get(f).push(i):this.typeAndIdToKey.set(f,[i])}return u}},{key:\"getAtlasInfo\",value:function(t,a){var n=this,i=this.renderTypes.get(a),s=i.getKey(t),o=Array.isArray(s)?s:[s];return o.map(function(l){var u=i.getBoundingBox(t,l),v=n.getOrCreateAtlas(t,a,u,l),f=v.getOffsets(l),c=Je(f,2),h=c[0],d=c[1];return{atlas:v,tex:h,tex1:h,tex2:d,bb:u}})}},{key:\"getDebugInfo\",value:function(){var t=[],a=kr(this.collections),n;try{for(a.s();!(n=a.n()).done;){var i=Je(n.value,2),s=i[0],o=i[1],l=o.getCounts(),u=l.keyCount,v=l.atlasCount;t.push({type:s,keyCount:u,atlasCount:v})}}catch(f){a.e(f)}finally{a.f()}return t}}])})(),sm=(function(){function r(e){ht(this,r),this.globalOptions=e,this.atlasSize=e.webglTexSize,this.maxAtlasesPerBatch=e.webglTexPerBatch,this.batchAtlases=[]}return gt(r,[{key:\"getMaxAtlasesPerBatch\",value:function(){return this.maxAtlasesPerBatch}},{key:\"getAtlasSize\",value:function(){return this.atlasSize}},{key:\"getIndexArray\",value:function(){return Array.from({length:this.maxAtlasesPerBatch},function(t,a){return a})}},{key:\"startBatch\",value:function(){this.batchAtlases=[]}},{key:\"getAtlasCount\",value:function(){return this.batchAtlases.length}},{key:\"getAtlases\",value:function(){return this.batchAtlases}},{key:\"canAddToCurrentBatch\",value:function(t){return this.batchAtlases.length===this.maxAtlasesPerBatch?this.batchAtlases.includes(t):!0}},{key:\"getAtlasIndexForBatch\",value:function(t){var a=this.batchAtlases.indexOf(t);if(a<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error(\"cannot add more atlases to batch\");this.batchAtlases.push(t),a=this.batchAtlases.length-1}return a}}])})(),om=`\n  float circleSD(vec2 p, float r) {\n    return distance(vec2(0), p) - r; // signed distance\n  }\n`,um=`\n  float rectangleSD(vec2 p, vec2 b) {\n    vec2 d = abs(p)-b;\n    return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0);\n  }\n`,lm=`\n  float roundRectangleSD(vec2 p, vec2 b, vec4 cr) {\n    cr.xy = (p.x > 0.0) ? cr.xy : cr.zw;\n    cr.x  = (p.y > 0.0) ? cr.x  : cr.y;\n    vec2 q = abs(p) - b + cr.x;\n    return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x;\n  }\n`,vm=`\n  float ellipseSD(vec2 p, vec2 ab) {\n    p = abs( p ); // symmetry\n\n    // find root with Newton solver\n    vec2 q = ab*(p-ab);\n    float w = (q.x<q.y)? 1.570796327 : 0.0;\n    for( int i=0; i<5; i++ ) {\n      vec2 cs = vec2(cos(w),sin(w));\n      vec2 u = ab*vec2( cs.x,cs.y);\n      vec2 v = ab*vec2(-cs.y,cs.x);\n      w = w + dot(p-u,v)/(dot(p-u,u)+dot(v,v));\n    }\n    \n    // compute final point and distance\n    float d = length(p-ab*vec2(cos(w),sin(w)));\n    \n    // return signed distance\n    return (dot(p/ab,p/ab)>1.0) ? d : -d;\n  }\n`,Ea={SCREEN:{name:\"screen\",screen:!0},PICKING:{name:\"picking\",picking:!0}},An={IGNORE:1,USE_BB:2},Cs=0,Kl=1,Xl=2,Ts=3,_t=4,sn=5,ga=6,pa=7,fm=(function(){function r(e,t,a){ht(this,r),this.r=e,this.gl=t,this.maxInstances=a.webglBatchSize,this.atlasSize=a.webglTexSize,this.bgColor=a.bgColor,this.debug=a.webglDebug,this.batchDebugInfo=[],a.enableWrapping=!0,a.createTextureCanvas=Hy,this.atlasManager=new im(e,a),this.batchManager=new sm(a),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(Ea.SCREEN),this.pickingProgram=this._createShaderProgram(Ea.PICKING),this.vao=this._createVAO()}return gt(r,[{key:\"addAtlasCollection\",value:function(t,a){this.atlasManager.addAtlasCollection(t,a)}},{key:\"addTextureAtlasRenderType\",value:function(t,a){this.atlasManager.addRenderType(t,a)}},{key:\"addSimpleShapeRenderType\",value:function(t,a){this.simpleShapeOptions.set(t,a)}},{key:\"invalidate\",value:function(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=a.type,i=this.atlasManager;return n?i.invalidate(t,{filterType:function(o){return o===n},forceRedraw:!0}):i.invalidate(t)}},{key:\"gc\",value:function(){this.atlasManager.gc()}},{key:\"_createShaderProgram\",value:function(t){var a=this.gl,n=`#version 300 es\n      precision highp float;\n\n      uniform mat3 uPanZoomMatrix;\n      uniform int  uAtlasSize;\n      \n      // instanced\n      in vec2 aPosition; // a vertex from the unit square\n      \n      in mat3 aTransform; // used to transform verticies, eg into a bounding box\n      in int aVertType; // the type of thing we are rendering\n\n      // the z-index that is output when using picking mode\n      in vec4 aIndex;\n      \n      // For textures\n      in int aAtlasId; // which shader unit/atlas to use\n      in vec4 aTex; // x/y/w/h of texture in atlas\n\n      // for edges\n      in vec4 aPointAPointB;\n      in vec4 aPointCPointD;\n      in vec2 aLineWidth; // also used for node border width\n\n      // simple shapes\n      in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left]\n      in vec4 aColor; // also used for edges\n      in vec4 aBorderColor; // aLineWidth is used for border width\n\n      // output values passed to the fragment shader\n      out vec2 vTexCoord;\n      out vec4 vColor;\n      out vec2 vPosition;\n      // flat values are not interpolated\n      flat out int vAtlasId; \n      flat out int vVertType;\n      flat out vec2 vTopRight;\n      flat out vec2 vBotLeft;\n      flat out vec4 vCornerRadius;\n      flat out vec4 vBorderColor;\n      flat out vec2 vBorderWidth;\n      flat out vec4 vIndex;\n      \n      void main(void) {\n        int vid = gl_VertexID;\n        vec2 position = aPosition; // TODO make this a vec3, simplifies some code below\n\n        if(aVertType == `.concat(Cs,`) {\n          float texX = aTex.x; // texture coordinates\n          float texY = aTex.y;\n          float texW = aTex.z;\n          float texH = aTex.w;\n\n          if(vid == 1 || vid == 2 || vid == 4) {\n            texX += texW;\n          }\n          if(vid == 2 || vid == 4 || vid == 5) {\n            texY += texH;\n          }\n\n          float d = float(uAtlasSize);\n          vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1\n\n          gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n        }\n        else if(aVertType == `).concat(_t,\" || aVertType == \").concat(pa,` \n             || aVertType == `).concat(sn,\" || aVertType == \").concat(ga,`) { // simple shapes\n\n          // the bounding box is needed by the fragment shader\n          vBotLeft  = (aTransform * vec3(0, 0, 1)).xy; // flat\n          vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat\n          vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated\n\n          // calculations are done in the fragment shader, just pass these along\n          vColor = aColor;\n          vCornerRadius = aCornerRadius;\n          vBorderColor = aBorderColor;\n          vBorderWidth = aLineWidth;\n\n          gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n        }\n        else if(aVertType == `).concat(Kl,`) {\n          vec2 source = aPointAPointB.xy;\n          vec2 target = aPointAPointB.zw;\n\n          // adjust the geometry so that the line is centered on the edge\n          position.y = position.y - 0.5;\n\n          // stretch the unit square into a long skinny rectangle\n          vec2 xBasis = target - source;\n          vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\n          vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y;\n\n          gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);\n          vColor = aColor;\n        } \n        else if(aVertType == `).concat(Xl,`) {\n          vec2 pointA = aPointAPointB.xy;\n          vec2 pointB = aPointAPointB.zw;\n          vec2 pointC = aPointCPointD.xy;\n          vec2 pointD = aPointCPointD.zw;\n\n          // adjust the geometry so that the line is centered on the edge\n          position.y = position.y - 0.5;\n\n          vec2 p0, p1, p2, pos;\n          if(position.x == 0.0) { // The left side of the unit square\n            p0 = pointA;\n            p1 = pointB;\n            p2 = pointC;\n            pos = position;\n          } else { // The right side of the unit square, use same approach but flip the geometry upside down\n            p0 = pointD;\n            p1 = pointC;\n            p2 = pointB;\n            pos = vec2(0.0, -position.y);\n          }\n\n          vec2 p01 = p1 - p0;\n          vec2 p12 = p2 - p1;\n          vec2 p21 = p1 - p2;\n\n          // Find the normal vector.\n          vec2 tangent = normalize(normalize(p12) + normalize(p01));\n          vec2 normal = vec2(-tangent.y, tangent.x);\n\n          // Find the vector perpendicular to p0 -> p1.\n          vec2 p01Norm = normalize(vec2(-p01.y, p01.x));\n\n          // Determine the bend direction.\n          float sigma = sign(dot(p01 + p21, normal));\n          float width = aLineWidth[0];\n\n          if(sign(pos.y) == -sigma) {\n            // This is an intersecting vertex. Adjust the position so that there's no overlap.\n            vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);\n            gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n          } else {\n            // This is a non-intersecting vertex. Treat it like a mitre join.\n            vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);\n            gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n          }\n\n          vColor = aColor;\n        } \n        else if(aVertType == `).concat(Ts,` && vid < 3) {\n          // massage the first triangle into an edge arrow\n          if(vid == 0)\n            position = vec2(-0.15, -0.3);\n          if(vid == 1)\n            position = vec2(  0.0,  0.0);\n          if(vid == 2)\n            position = vec2( 0.15, -0.3);\n\n          gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n          vColor = aColor;\n        }\n        else {\n          gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space\n        }\n\n        vAtlasId = aAtlasId;\n        vVertType = aVertType;\n        vIndex = aIndex;\n      }\n    `),i=this.batchManager.getIndexArray(),s=`#version 300 es\n      precision highp float;\n\n      // declare texture unit for each texture atlas in the batch\n      `.concat(i.map(function(u){return\"uniform sampler2D uTexture\".concat(u,\";\")}).join(`\n\t`),`\n\n      uniform vec4 uBGColor;\n      uniform float uZoom;\n\n      in vec2 vTexCoord;\n      in vec4 vColor;\n      in vec2 vPosition; // model coordinates\n\n      flat in int vAtlasId;\n      flat in vec4 vIndex;\n      flat in int vVertType;\n      flat in vec2 vTopRight;\n      flat in vec2 vBotLeft;\n      flat in vec4 vCornerRadius;\n      flat in vec4 vBorderColor;\n      flat in vec2 vBorderWidth;\n\n      out vec4 outColor;\n\n      `).concat(om,`\n      `).concat(um,`\n      `).concat(lm,`\n      `).concat(vm,`\n\n      vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha\n        return vec4( \n          top.rgb + (bot.rgb * (1.0 - top.a)),\n          top.a   + (bot.a   * (1.0 - top.a)) \n        );\n      }\n\n      vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance\n        // scale to the zoom level so that borders don't look blurry when zoomed in\n        // note 1.5 is an aribitrary value chosen because it looks good\n        return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); \n      }\n\n      void main(void) {\n        if(vVertType == `).concat(Cs,`) {\n          // look up the texel from the texture unit\n          `).concat(i.map(function(u){return\"if(vAtlasId == \".concat(u,\") outColor = texture(uTexture\").concat(u,\", vTexCoord);\")}).join(`\n\telse `),`\n        } \n        else if(vVertType == `).concat(Ts,`) {\n          // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out';\n          outColor = blend(vColor, uBGColor);\n          outColor.a = 1.0; // make opaque, masks out line under arrow\n        }\n        else if(vVertType == `).concat(_t,` && vBorderWidth == vec2(0.0)) { // simple rectangle with no border\n          outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done\n        }\n        else if(vVertType == `).concat(_t,\" || vVertType == \").concat(pa,` \n          || vVertType == `).concat(sn,\" || vVertType == \").concat(ga,`) { // use SDF\n\n          float outerBorder = vBorderWidth[0];\n          float innerBorder = vBorderWidth[1];\n          float borderPadding = outerBorder * 2.0;\n          float w = vTopRight.x - vBotLeft.x - borderPadding;\n          float h = vTopRight.y - vBotLeft.y - borderPadding;\n          vec2 b = vec2(w/2.0, h/2.0); // half width, half height\n          vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center\n\n          float d; // signed distance\n          if(vVertType == `).concat(_t,`) {\n            d = rectangleSD(p, b);\n          } else if(vVertType == `).concat(pa,` && w == h) {\n            d = circleSD(p, b.x); // faster than ellipse\n          } else if(vVertType == `).concat(pa,`) {\n            d = ellipseSD(p, b);\n          } else {\n            d = roundRectangleSD(p, b, vCornerRadius.wzyx);\n          }\n\n          // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling\n          // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box\n          if(d > 0.0) {\n            if(d > outerBorder) {\n              discard;\n            } else {\n              outColor = distInterp(vBorderColor, vec4(0), d - outerBorder);\n            }\n          } else {\n            if(d > innerBorder) {\n              vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor;\n              vec4 innerBorderColor = blend(vBorderColor, vColor);\n              outColor = distInterp(innerBorderColor, outerColor, d);\n            } \n            else {\n              vec4 outerColor;\n              if(innerBorder == 0.0 && outerBorder == 0.0) {\n                outerColor = vec4(0);\n              } else if(innerBorder == 0.0) {\n                outerColor = vBorderColor;\n              } else {\n                outerColor = blend(vBorderColor, vColor);\n              }\n              outColor = distInterp(vColor, outerColor, d - innerBorder);\n            }\n          }\n        }\n        else {\n          outColor = vColor;\n        }\n\n        `).concat(t.picking?`if(outColor.a == 0.0) discard;\n             else outColor = vIndex;`:\"\",`\n      }\n    `),o=Gy(a,n,s);o.aPosition=a.getAttribLocation(o,\"aPosition\"),o.aIndex=a.getAttribLocation(o,\"aIndex\"),o.aVertType=a.getAttribLocation(o,\"aVertType\"),o.aTransform=a.getAttribLocation(o,\"aTransform\"),o.aAtlasId=a.getAttribLocation(o,\"aAtlasId\"),o.aTex=a.getAttribLocation(o,\"aTex\"),o.aPointAPointB=a.getAttribLocation(o,\"aPointAPointB\"),o.aPointCPointD=a.getAttribLocation(o,\"aPointCPointD\"),o.aLineWidth=a.getAttribLocation(o,\"aLineWidth\"),o.aColor=a.getAttribLocation(o,\"aColor\"),o.aCornerRadius=a.getAttribLocation(o,\"aCornerRadius\"),o.aBorderColor=a.getAttribLocation(o,\"aBorderColor\"),o.uPanZoomMatrix=a.getUniformLocation(o,\"uPanZoomMatrix\"),o.uAtlasSize=a.getUniformLocation(o,\"uAtlasSize\"),o.uBGColor=a.getUniformLocation(o,\"uBGColor\"),o.uZoom=a.getUniformLocation(o,\"uZoom\"),o.uTextures=[];for(var l=0;l<this.batchManager.getMaxAtlasesPerBatch();l++)o.uTextures.push(a.getUniformLocation(o,\"uTexture\".concat(l)));return o}},{key:\"_createVAO\",value:function(){var t=[0,0,1,0,1,1,0,0,1,1,0,1];this.vertexCount=t.length/2;var a=this.maxInstances,n=this.gl,i=this.program,s=n.createVertexArray();return n.bindVertexArray(s),Qy(n,\"vec2\",i.aPosition,t),this.transformBuffer=Jy(n,a,i.aTransform),this.indexBuffer=Fr(n,a,\"vec4\",i.aIndex),this.vertTypeBuffer=Fr(n,a,\"int\",i.aVertType),this.atlasIdBuffer=Fr(n,a,\"int\",i.aAtlasId),this.texBuffer=Fr(n,a,\"vec4\",i.aTex),this.pointAPointBBuffer=Fr(n,a,\"vec4\",i.aPointAPointB),this.pointCPointDBuffer=Fr(n,a,\"vec4\",i.aPointCPointD),this.lineWidthBuffer=Fr(n,a,\"vec2\",i.aLineWidth),this.colorBuffer=Fr(n,a,\"vec4\",i.aColor),this.cornerRadiusBuffer=Fr(n,a,\"vec4\",i.aCornerRadius),this.borderColorBuffer=Fr(n,a,\"vec4\",i.aBorderColor),n.bindVertexArray(null),s}},{key:\"buffers\",get:function(){var t=this;return this._buffers||(this._buffers=Object.keys(this).filter(function(a){return at(a,\"Buffer\")}).map(function(a){return t[a]})),this._buffers}},{key:\"startFrame\",value:function(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ea.SCREEN;this.panZoomMatrix=t,this.renderTarget=a,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()}},{key:\"startBatch\",value:function(){this.instanceCount=0,this.batchManager.startBatch()}},{key:\"endFrame\",value:function(){this.endBatch()}},{key:\"_isVisible\",value:function(t,a){return t.visible()?a&&a.isVisible?a.isVisible(t):!0:!1}},{key:\"drawTexture\",value:function(t,a,n){var i=this.atlasManager,s=this.batchManager,o=i.getRenderTypeOpts(n);if(this._isVisible(t,o)&&!(t.isEdge()&&!this._isValidEdge(t))){if(this.renderTarget.picking&&o.getTexPickingMode){var l=o.getTexPickingMode(t);if(l===An.IGNORE)return;if(l==An.USE_BB){this.drawPickingRectangle(t,a,n);return}}var u=i.getAtlasInfo(t,n),v=kr(u),f;try{for(v.s();!(f=v.n()).done;){var c=f.value,h=c.atlas,d=c.tex1,y=c.tex2;s.canAddToCurrentBatch(h)||this.endBatch();for(var g=s.getAtlasIndexForBatch(h),p=0,m=[[d,!0],[y,!1]];p<m.length;p++){var b=Je(m[p],2),w=b[0],E=b[1];if(w.w!=0){var C=this.instanceCount;this.vertTypeBuffer.getView(C)[0]=Cs;var x=this.indexBuffer.getView(C);qt(a,x);var T=this.atlasIdBuffer.getView(C);T[0]=g;var k=this.texBuffer.getView(C);k[0]=w.x,k[1]=w.y,k[2]=w.w,k[3]=w.h;var D=this.transformBuffer.getMatrixView(C);this.setTransformMatrix(t,D,o,c,E),this.instanceCount++,E||this.wrappedCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}}catch(B){v.e(B)}finally{v.f()}}}},{key:\"setTransformMatrix\",value:function(t,a,n,i){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,o=0;if(n.shapeProps&&n.shapeProps.padding&&(o=t.pstyle(n.shapeProps.padding).pfValue),i){var l=i.bb,u=i.tex1,v=i.tex2,f=u.w/(u.w+v.w);s||(f=1-f);var c=this._getAdjustedBB(l,o,s,f);this._applyTransformMatrix(a,c,n,t)}else{var h=n.getBoundingBox(t),d=this._getAdjustedBB(h,o,!0,1);this._applyTransformMatrix(a,d,n,t)}}},{key:\"_applyTransformMatrix\",value:function(t,a,n,i){var s,o;$l(t);var l=n.getRotation?n.getRotation(i):0;if(l!==0){var u=n.getRotationPoint(i),v=u.x,f=u.y;yn(t,t,[v,f]),Ul(t,t,l);var c=n.getRotationOffset(i);s=c.x+(a.xOffset||0),o=c.y+(a.yOffset||0)}else s=a.x1,o=a.y1;yn(t,t,[s,o]),Ws(t,t,[a.w,a.h])}},{key:\"_getAdjustedBB\",value:function(t,a,n,i){var s=t.x1,o=t.y1,l=t.w,u=t.h,v=t.yOffset;a&&(s-=a,o-=a,l+=2*a,u+=2*a);var f=0,c=l*i;return n&&i<1?l=c:!n&&i<1&&(f=l-c,s+=f,l=c),{x1:s,y1:o,w:l,h:u,xOffset:f,yOffset:v}}},{key:\"drawPickingRectangle\",value:function(t,a,n){var i=this.atlasManager.getRenderTypeOpts(n),s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=_t;var o=this.indexBuffer.getView(s);qt(a,o);var l=this.colorBuffer.getView(s);xt([0,0,0],1,l);var u=this.transformBuffer.getMatrixView(s);this.setTransformMatrix(t,u,i),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},{key:\"drawNode\",value:function(t,a,n){var i=this.simpleShapeOptions.get(n);if(this._isVisible(t,i)){var s=i.shapeProps,o=this._getVertTypeForShape(t,s.shape);if(o===void 0||i.isSimple&&!i.isSimple(t)){this.drawTexture(t,a,n);return}var l=this.instanceCount;if(this.vertTypeBuffer.getView(l)[0]=o,o===sn||o===ga){var u=i.getBoundingBox(t),v=this._getCornerRadius(t,s.radius,u),f=this.cornerRadiusBuffer.getView(l);f[0]=v,f[1]=v,f[2]=v,f[3]=v,o===ga&&(f[0]=0,f[2]=0)}var c=this.indexBuffer.getView(l);qt(a,c);var h=t.pstyle(s.color).value,d=t.pstyle(s.opacity).value,y=this.colorBuffer.getView(l);xt(h,d,y);var g=this.lineWidthBuffer.getView(l);if(g[0]=0,g[1]=0,s.border){var p=t.pstyle(\"border-width\").value;if(p>0){var m=t.pstyle(\"border-color\").value,b=t.pstyle(\"border-opacity\").value,w=this.borderColorBuffer.getView(l);xt(m,b,w);var E=t.pstyle(\"border-position\").value;if(E===\"inside\")g[0]=0,g[1]=-p;else if(E===\"outside\")g[0]=p,g[1]=0;else{var C=p/2;g[0]=C,g[1]=-C}}}var x=this.transformBuffer.getMatrixView(l);this.setTransformMatrix(t,x,i),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}},{key:\"_getVertTypeForShape\",value:function(t,a){var n=t.pstyle(a).value;switch(n){case\"rectangle\":return _t;case\"ellipse\":return pa;case\"roundrectangle\":case\"round-rectangle\":return sn;case\"bottom-round-rectangle\":return ga;default:return}}},{key:\"_getCornerRadius\",value:function(t,a,n){var i=n.w,s=n.h;if(t.pstyle(a).value===\"auto\")return vt(i,s);var o=t.pstyle(a).pfValue,l=i/2,u=s/2;return Math.min(o,u,l)}},{key:\"drawEdgeArrow\",value:function(t,a,n){if(t.visible()){var i=t._private.rscratch,s,o,l;if(n===\"source\"?(s=i.arrowStartX,o=i.arrowStartY,l=i.srcArrowAngle):(s=i.arrowEndX,o=i.arrowEndY,l=i.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(o)||o==null||isNaN(l)||l==null)){var u=t.pstyle(n+\"-arrow-shape\").value;if(u!==\"none\"){var v=t.pstyle(n+\"-arrow-color\").value,f=t.pstyle(\"opacity\").value,c=t.pstyle(\"line-opacity\").value,h=f*c,d=t.pstyle(\"width\").pfValue,y=t.pstyle(\"arrow-scale\").value,g=this.r.getArrowWidth(d,y),p=this.instanceCount,m=this.transformBuffer.getMatrixView(p);$l(m),yn(m,m,[s,o]),Ws(m,m,[g,g]),Ul(m,m,l),this.vertTypeBuffer.getView(p)[0]=Ts;var b=this.indexBuffer.getView(p);qt(a,b);var w=this.colorBuffer.getView(p);xt(v,h,w),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}}},{key:\"drawEdgeLine\",value:function(t,a){if(t.visible()){var n=this._getEdgePoints(t);if(n){var i=t.pstyle(\"opacity\").value,s=t.pstyle(\"line-opacity\").value,o=t.pstyle(\"width\").pfValue,l=t.pstyle(\"line-color\").value,u=i*s;if(n.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),n.length==4){var v=this.instanceCount;this.vertTypeBuffer.getView(v)[0]=Kl;var f=this.indexBuffer.getView(v);qt(a,f);var c=this.colorBuffer.getView(v);xt(l,u,c);var h=this.lineWidthBuffer.getView(v);h[0]=o;var d=this.pointAPointBBuffer.getView(v);d[0]=n[0],d[1]=n[1],d[2]=n[2],d[3]=n[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y<n.length-2;y+=2){var g=this.instanceCount;this.vertTypeBuffer.getView(g)[0]=Xl;var p=this.indexBuffer.getView(g);qt(a,p);var m=this.colorBuffer.getView(g);xt(l,u,m);var b=this.lineWidthBuffer.getView(g);b[0]=o;var w=n[y-2],E=n[y-1],C=n[y],x=n[y+1],T=n[y+2],k=n[y+3],D=n[y+4],B=n[y+5];y==0&&(w=2*C-T+.001,E=2*x-k+.001),y==n.length-4&&(D=2*T-C+.001,B=2*k-x+.001);var P=this.pointAPointBBuffer.getView(g);P[0]=w,P[1]=E,P[2]=C,P[3]=x;var A=this.pointCPointDBuffer.getView(g);A[0]=T,A[1]=k,A[2]=D,A[3]=B,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}}},{key:\"_isValidEdge\",value:function(t){var a=t._private.rscratch;return!(a.badLine||a.allpts==null||isNaN(a.allpts[0]))}},{key:\"_getEdgePoints\",value:function(t){var a=t._private.rscratch;if(this._isValidEdge(t)){var n=a.allpts;if(n.length==4)return n;var i=this._getNumSegments(t);return this._getCurveSegmentPoints(n,i)}}},{key:\"_getNumSegments\",value:function(t){var a=15;return Math.min(Math.max(a,5),this.maxInstances)}},{key:\"_getCurveSegmentPoints\",value:function(t,a){if(t.length==4)return t;for(var n=Array((a+1)*2),i=0;i<=a;i++)if(i==0)n[0]=t[0],n[1]=t[1];else if(i==a)n[i*2]=t[t.length-2],n[i*2+1]=t[t.length-1];else{var s=i/a;this._setCurvePoint(t,s,n,i*2)}return n}},{key:\"_setCurvePoint\",value:function(t,a,n,i){if(t.length<=2)n[i]=t[0],n[i+1]=t[1];else{for(var s=Array(t.length-2),o=0;o<s.length;o+=2){var l=(1-a)*t[o]+a*t[o+2],u=(1-a)*t[o+1]+a*t[o+3];s[o]=l,s[o+1]=u}return this._setCurvePoint(s,a,n,i)}}},{key:\"endBatch\",value:function(){var t=this.gl,a=this.vao,n=this.vertexCount,i=this.instanceCount;if(i!==0){var s=this.renderTarget.picking?this.pickingProgram:this.program;t.useProgram(s),t.bindVertexArray(a);var o=kr(this.buffers),l;try{for(o.s();!(l=o.n()).done;){var u=l.value;u.bufferSubData(i)}}catch(d){o.e(d)}finally{o.f()}for(var v=this.batchManager.getAtlases(),f=0;f<v.length;f++)v[f].bufferIfNeeded(t);for(var c=0;c<v.length;c++)t.activeTexture(t.TEXTURE0+c),t.bindTexture(t.TEXTURE_2D,v[c].texture),t.uniform1i(s.uTextures[c],c);t.uniform1f(s.uZoom,Wy(this.r)),t.uniformMatrix3fv(s.uPanZoomMatrix,!1,this.panZoomMatrix),t.uniform1i(s.uAtlasSize,this.batchManager.getAtlasSize());var h=xt(this.bgColor,1);t.uniform4fv(s.uBGColor,h),t.drawArraysInstanced(t.TRIANGLES,0,n,i),t.bindVertexArray(null),t.bindTexture(t.TEXTURE_2D,null),this.debug&&this.batchDebugInfo.push({count:i,atlasCount:v.length}),this.startBatch()}}},{key:\"getDebugInfo\",value:function(){var t=this.atlasManager.getDebugInfo(),a=t.reduce(function(s,o){return s+o.atlasCount},0),n=this.batchDebugInfo,i=n.reduce(function(s,o){return s+o.count},0);return{atlasInfo:t,totalAtlases:a,wrappedCount:this.wrappedCount,simpleCount:this.simpleCount,batchCount:n.length,batchInfo:n,totalInstances:i}}}])})(),Mf={};Mf.initWebgl=function(r,e){var t=this,a=t.data.contexts[t.WEBGL];r.bgColor=cm(t),r.webglTexSize=Math.min(r.webglTexSize,a.getParameter(a.MAX_TEXTURE_SIZE)),r.webglTexRows=Math.min(r.webglTexRows,54),r.webglTexRowsNodes=Math.min(r.webglTexRowsNodes,54),r.webglBatchSize=Math.min(r.webglBatchSize,16384),r.webglTexPerBatch=Math.min(r.webglTexPerBatch,a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS)),t.webglDebug=r.webglDebug,t.webglDebugShowAtlases=r.webglDebugShowAtlases,t.pickingFrameBuffer=jy(a),t.pickingFrameBuffer.needsDraw=!0,t.drawing=new fm(t,a,r);var n=function(f){return function(c){return t.getTextAngle(c,f)}},i=function(f){return function(c){var h=c.pstyle(f);return h&&h.value}},s=function(f){return function(c){return c.pstyle(\"\".concat(f,\"-opacity\")).value>0}},o=function(f){var c=f.pstyle(\"text-events\").strValue===\"yes\";return c?An.USE_BB:An.IGNORE},l=function(f){var c=f.position(),h=c.x,d=c.y,y=f.outerWidth(),g=f.outerHeight();return{w:y,h:g,x1:h-y/2,y1:d-g/2}};t.drawing.addAtlasCollection(\"node\",{texRows:r.webglTexRowsNodes}),t.drawing.addAtlasCollection(\"label\",{texRows:r.webglTexRows}),t.drawing.addTextureAtlasRenderType(\"node-body\",{collection:\"node\",getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement}),t.drawing.addSimpleShapeRenderType(\"node-body\",{getBoundingBox:l,isSimple:Uy,shapeProps:{shape:\"shape\",color:\"background-color\",opacity:\"background-opacity\",radius:\"corner-radius\",border:!0}}),t.drawing.addSimpleShapeRenderType(\"node-overlay\",{getBoundingBox:l,isVisible:s(\"overlay\"),shapeProps:{shape:\"overlay-shape\",color:\"overlay-color\",opacity:\"overlay-opacity\",padding:\"overlay-padding\",radius:\"overlay-corner-radius\"}}),t.drawing.addSimpleShapeRenderType(\"node-underlay\",{getBoundingBox:l,isVisible:s(\"underlay\"),shapeProps:{shape:\"underlay-shape\",color:\"underlay-color\",opacity:\"underlay-opacity\",padding:\"underlay-padding\",radius:\"underlay-corner-radius\"}}),t.drawing.addTextureAtlasRenderType(\"label\",{collection:\"label\",getTexPickingMode:o,getKey:Ss(e.getLabelKey,null),getBoundingBox:ks(e.getLabelBox,null),drawClipped:!0,drawElement:e.drawLabel,getRotation:n(null),getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:i(\"label\")}),t.drawing.addTextureAtlasRenderType(\"edge-source-label\",{collection:\"label\",getTexPickingMode:o,getKey:Ss(e.getSourceLabelKey,\"source\"),getBoundingBox:ks(e.getSourceLabelBox,\"source\"),drawClipped:!0,drawElement:e.drawSourceLabel,getRotation:n(\"source\"),getRotationPoint:e.getSourceLabelRotationPoint,getRotationOffset:e.getSourceLabelRotationOffset,isVisible:i(\"source-label\")}),t.drawing.addTextureAtlasRenderType(\"edge-target-label\",{collection:\"label\",getTexPickingMode:o,getKey:Ss(e.getTargetLabelKey,\"target\"),getBoundingBox:ks(e.getTargetLabelBox,\"target\"),drawClipped:!0,drawElement:e.drawTargetLabel,getRotation:n(\"target\"),getRotationPoint:e.getTargetLabelRotationPoint,getRotationOffset:e.getTargetLabelRotationOffset,isVisible:i(\"target-label\")});var u=Fa(function(){console.log(\"garbage collect flag set\"),t.data.gc=!0},1e4);t.onUpdateEleCalcs(function(v,f){var c=!1;f&&f.length>0&&(c|=t.drawing.invalidate(f)),c&&u()}),dm(t)};function cm(r){var e=r.cy.container(),t=e&&e.style&&e.style.backgroundColor||\"white\";return iv(t)}function Lf(r,e){var t=r._private.rscratch;return Tr(t,\"labelWrapCachedLines\",e)||[]}var Ss=function(e,t){return function(a){var n=e(a),i=Lf(a,t);return i.length>1?i.map(function(s,o){return\"\".concat(n,\"_\").concat(o)}):n}},ks=function(e,t){return function(a,n){var i=e(a);if(typeof n==\"string\"){var s=n.indexOf(\"_\");if(s>0){var o=Number(n.substring(s+1)),l=Lf(a,t),u=i.h/l.length,v=u*o,f=i.y1+v;return{x1:i.x1,w:i.w,y1:f,h:u,yOffset:v}}}return i}};function dm(r){{var e=r.render;r.render=function(i){i=i||{};var s=r.cy;r.webgl&&(s.zoom()>Sf?(hm(r),e.call(r,i)):(gm(r),Of(r,i,Ea.SCREEN)))}}{var t=r.matchCanvasSize;r.matchCanvasSize=function(i){t.call(r,i),r.pickingFrameBuffer.setFramebufferAttachmentSizes(r.canvasWidth,r.canvasHeight),r.pickingFrameBuffer.needsDraw=!0}}r.findNearestElements=function(i,s,o,l){return xm(r,i,s)};{var a=r.invalidateCachedZSortedEles;r.invalidateCachedZSortedEles=function(){a.call(r),r.pickingFrameBuffer.needsDraw=!0}}{var n=r.notify;r.notify=function(i,s){n.call(r,i,s),i===\"viewport\"||i===\"bounds\"?r.pickingFrameBuffer.needsDraw=!0:i===\"background\"&&r.drawing.invalidate(s,{type:\"node-body\"})}}}function hm(r){var e=r.data.contexts[r.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function gm(r){var e=function(a){a.save(),a.setTransform(1,0,0,1,0,0),a.clearRect(0,0,r.canvasWidth,r.canvasHeight),a.restore()};e(r.data.contexts[r.NODE]),e(r.data.contexts[r.DRAG])}function pm(r){var e=r.canvasWidth,t=r.canvasHeight,a=bo(r),n=a.pan,i=a.zoom,s=Es();yn(s,s,[n.x,n.y]),Ws(s,s,[i,i]);var o=Es();rm(o,e,t);var l=Es();return em(l,o,s),l}function If(r,e){var t=r.canvasWidth,a=r.canvasHeight,n=bo(r),i=n.pan,s=n.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,t,a),e.translate(i.x,i.y),e.scale(s,s)}function ym(r,e){r.drawSelectionRectangle(e,function(t){return If(r,t)})}function mm(r){var e=r.data.contexts[r.NODE];e.save(),If(r,e),e.strokeStyle=\"rgba(0, 0, 0, 0.3)\",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function bm(r){var e=function(n,i,s){for(var o=n.atlasManager.getAtlasCollection(i),l=r.data.contexts[r.NODE],u=o.atlases,v=0;v<u.length;v++){var f=u[v],c=f.canvas;if(c){var h=c.width,d=c.height,y=h*v,g=c.height*s,p=.4;l.save(),l.scale(p,p),l.drawImage(c,y,g),l.strokeStyle=\"black\",l.rect(y,g,h,d),l.stroke(),l.restore()}}},t=0;e(r.drawing,\"node\",t++),e(r.drawing,\"label\",t++)}function wm(r,e,t,a,n){var i,s,o,l,u=bo(r),v=u.pan,f=u.zoom;{var c=$y(r,v,f,e,t),h=Je(c,2),d=h[0],y=h[1],g=6;i=d-g/2,s=y-g/2,o=g,l=g}if(o===0||l===0)return[];var p=r.data.contexts[r.WEBGL];p.bindFramebuffer(p.FRAMEBUFFER,r.pickingFrameBuffer),r.pickingFrameBuffer.needsDraw&&(p.viewport(0,0,p.canvas.width,p.canvas.height),Of(r,null,Ea.PICKING),r.pickingFrameBuffer.needsDraw=!1);var m=o*l,b=new Uint8Array(m*4);p.readPixels(i,s,o,l,p.RGBA,p.UNSIGNED_BYTE,b),p.bindFramebuffer(p.FRAMEBUFFER,null);for(var w=new Set,E=0;E<m;E++){var C=b.slice(E*4,E*4+4),x=Xy(C)-1;x>=0&&w.add(x)}return w}function xm(r,e,t){var a=wm(r,e,t),n=r.getCachedZSortedEles(),i,s,o=kr(a),l;try{for(o.s();!(l=o.n()).done;){var u=l.value,v=n[u];if(!i&&v.isNode()&&(i=v),!s&&v.isEdge()&&(s=v),i&&s)break}}catch(f){o.e(f)}finally{o.f()}return[i,s].filter(Boolean)}function Ds(r,e,t){var a=r.drawing;e+=1,t.isNode()?(a.drawNode(t,e,\"node-underlay\"),a.drawNode(t,e,\"node-body\"),a.drawTexture(t,e,\"label\"),a.drawNode(t,e,\"node-overlay\")):(a.drawEdgeLine(t,e),a.drawEdgeArrow(t,e,\"source\"),a.drawEdgeArrow(t,e,\"target\"),a.drawTexture(t,e,\"label\"),a.drawTexture(t,e,\"edge-source-label\"),a.drawTexture(t,e,\"edge-target-label\"))}function Of(r,e,t){var a;r.webglDebug&&(a=performance.now());var n=r.drawing,i=0;if(t.screen&&r.data.canvasNeedsRedraw[r.SELECT_BOX]&&ym(r,e),r.data.canvasNeedsRedraw[r.NODE]||t.picking){var s=r.data.contexts[r.WEBGL];t.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var o=pm(r),l=r.getCachedZSortedEles();if(i=l.length,n.startFrame(o,t),t.screen){for(var u=0;u<l.nondrag.length;u++)Ds(r,u,l.nondrag[u]);for(var v=0;v<l.drag.length;v++)Ds(r,v,l.drag[v])}else if(t.picking)for(var f=0;f<l.length;f++)Ds(r,f,l[f]);n.endFrame(),t.screen&&r.webglDebugShowAtlases&&(mm(r),bm(r)),r.data.canvasNeedsRedraw[r.NODE]=!1,r.data.canvasNeedsRedraw[r.DRAG]=!1}if(r.webglDebug){var c=performance.now(),h=!1,d=Math.ceil(c-a),y=n.getDebugInfo(),g=[\"\".concat(i,\" elements\"),\"\".concat(y.totalInstances,\" instances\"),\"\".concat(y.batchCount,\" batches\"),\"\".concat(y.totalAtlases,\" atlases\"),\"\".concat(y.wrappedCount,\" wrapped textures\"),\"\".concat(y.simpleCount,\" simple shapes\")].join(\", \");if(h)console.log(\"WebGL (\".concat(t.name,\") - time \").concat(d,\"ms, \").concat(g));else{console.log(\"WebGL (\".concat(t.name,\") - frame time \").concat(d,\"ms\")),console.log(\"Totals:\"),console.log(\"  \".concat(g)),console.log(\"Texture Atlases Used:\");var p=y.atlasInfo,m=kr(p),b;try{for(m.s();!(b=m.n()).done;){var w=b.value;console.log(\"  \".concat(w.type,\": \").concat(w.keyCount,\" keys, \").concat(w.atlasCount,\" atlases\"))}}catch(E){m.e(E)}finally{m.f()}console.log(\"\")}}r.data.gc&&(console.log(\"Garbage Collect!\"),r.data.gc=!1,n.gc())}var mt={};mt.drawPolygonPath=function(r,e,t,a,n,i){var s=a/2,o=n/2;r.beginPath&&r.beginPath(),r.moveTo(e+s*i[0],t+o*i[1]);for(var l=1;l<i.length/2;l++)r.lineTo(e+s*i[l*2],t+o*i[l*2+1]);r.closePath()};mt.drawRoundPolygonPath=function(r,e,t,a,n,i,s){s.forEach(function(o){return pf(r,o)}),r.closePath()};mt.drawRoundRectanglePath=function(r,e,t,a,n,i){var s=a/2,o=n/2,l=i===\"auto\"?vt(a,n):Math.min(i,o,s);r.beginPath&&r.beginPath(),r.moveTo(e,t-o),r.arcTo(e+s,t-o,e+s,t,l),r.arcTo(e+s,t+o,e,t+o,l),r.arcTo(e-s,t+o,e-s,t,l),r.arcTo(e-s,t-o,e,t-o,l),r.lineTo(e,t-o),r.closePath()};mt.drawBottomRoundRectanglePath=function(r,e,t,a,n,i){var s=a/2,o=n/2,l=i===\"auto\"?vt(a,n):i;r.beginPath&&r.beginPath(),r.moveTo(e,t-o),r.lineTo(e+s,t-o),r.lineTo(e+s,t),r.arcTo(e+s,t+o,e,t+o,l),r.arcTo(e-s,t+o,e-s,t,l),r.lineTo(e-s,t-o),r.lineTo(e,t-o),r.closePath()};mt.drawCutRectanglePath=function(r,e,t,a,n,i,s){var o=a/2,l=n/2,u=s===\"auto\"?no():s;r.beginPath&&r.beginPath(),r.moveTo(e-o+u,t-l),r.lineTo(e+o-u,t-l),r.lineTo(e+o,t-l+u),r.lineTo(e+o,t+l-u),r.lineTo(e+o-u,t+l),r.lineTo(e-o+u,t+l),r.lineTo(e-o,t+l-u),r.lineTo(e-o,t-l+u),r.closePath()};mt.drawBarrelPath=function(r,e,t,a,n){var i=a/2,s=n/2,o=e-i,l=e+i,u=t-s,v=t+s,f=As(a,n),c=f.widthOffset,h=f.heightOffset,d=f.ctrlPtOffsetPct*c;r.beginPath&&r.beginPath(),r.moveTo(o,u+h),r.lineTo(o,v-h),r.quadraticCurveTo(o+d,v,o+c,v),r.lineTo(l-c,v),r.quadraticCurveTo(l-d,v,l,v-h),r.lineTo(l,u+h),r.quadraticCurveTo(l-d,u,l-c,u),r.lineTo(o+c,u),r.quadraticCurveTo(o+d,u,o,u+h),r.closePath()};var Yl=Math.sin(0),Zl=Math.cos(0),$s={},Us={},Nf=Math.PI/40;for(var Gt=0*Math.PI;Gt<2*Math.PI;Gt+=Nf)$s[Gt]=Math.sin(Gt),Us[Gt]=Math.cos(Gt);mt.drawEllipsePath=function(r,e,t,a,n){if(r.beginPath&&r.beginPath(),r.ellipse)r.ellipse(e,t,a/2,n/2,0,0,2*Math.PI);else for(var i,s,o=a/2,l=n/2,u=0*Math.PI;u<2*Math.PI;u+=Nf)i=e-o*$s[u]*Yl+o*Us[u]*Zl,s=t+l*Us[u]*Yl+l*$s[u]*Zl,u===0?r.moveTo(i,s):r.lineTo(i,s);r.closePath()};var Wa={};Wa.createBuffer=function(r,e){var t=document.createElement(\"canvas\");return t.width=r,t.height=e,[t,t.getContext(\"2d\")]};Wa.bufferCanvasImage=function(r){var e=this.cy,t=e.mutableElements(),a=t.boundingBox(),n=this.findContainerClientCoords(),i=r.full?Math.ceil(a.w):n[2],s=r.full?Math.ceil(a.h):n[3],o=ae(r.maxWidth)||ae(r.maxHeight),l=this.getPixelRatio(),u=1;if(r.scale!==void 0)i*=r.scale,s*=r.scale,u=r.scale;else if(o){var v=1/0,f=1/0;ae(r.maxWidth)&&(v=u*r.maxWidth/i),ae(r.maxHeight)&&(f=u*r.maxHeight/s),u=Math.min(v,f),i*=u,s*=u}o||(i*=l,s*=l,u*=l);var c=document.createElement(\"canvas\");c.width=i,c.height=s,c.style.width=i+\"px\",c.style.height=s+\"px\";var h=c.getContext(\"2d\");if(i>0&&s>0){h.clearRect(0,0,i,s),h.globalCompositeOperation=\"source-over\";var d=this.getCachedZSortedEles();if(r.full)h.translate(-a.x1*u,-a.y1*u),h.scale(u,u),this.drawElements(h,d),h.scale(1/u,1/u),h.translate(a.x1*u,a.y1*u);else{var y=e.pan(),g={x:y.x*u,y:y.y*u};u*=e.zoom(),h.translate(g.x,g.y),h.scale(u,u),this.drawElements(h,d),h.scale(1/u,1/u),h.translate(-g.x,-g.y)}r.bg&&(h.globalCompositeOperation=\"destination-over\",h.fillStyle=r.bg,h.rect(0,0,i,s),h.fill())}return c};function Em(r,e){for(var t=atob(r),a=new ArrayBuffer(t.length),n=new Uint8Array(a),i=0;i<t.length;i++)n[i]=t.charCodeAt(i);return new Blob([a],{type:e})}function Ql(r){var e=r.indexOf(\",\");return r.substr(e+1)}function zf(r,e,t){var a=function(){return e.toDataURL(t,r.quality)};switch(r.output){case\"blob-promise\":return new ta(function(n,i){try{e.toBlob(function(s){s!=null?n(s):i(new Error(\"`canvas.toBlob()` sent a null value in its callback\"))},t,r.quality)}catch(s){i(s)}});case\"blob\":return Em(Ql(a()),t);case\"base64\":return Ql(a());default:return a()}}Wa.png=function(r){return zf(r,this.bufferCanvasImage(r),\"image/png\")};Wa.jpg=function(r){return zf(r,this.bufferCanvasImage(r),\"image/jpeg\")};var Ff={};Ff.nodeShapeImpl=function(r,e,t,a,n,i,s,o){switch(r){case\"ellipse\":return this.drawEllipsePath(e,t,a,n,i);case\"polygon\":return this.drawPolygonPath(e,t,a,n,i,s);case\"round-polygon\":return this.drawRoundPolygonPath(e,t,a,n,i,s,o);case\"roundrectangle\":case\"round-rectangle\":return this.drawRoundRectanglePath(e,t,a,n,i,o);case\"cutrectangle\":case\"cut-rectangle\":return this.drawCutRectanglePath(e,t,a,n,i,s,o);case\"bottomroundrectangle\":case\"bottom-round-rectangle\":return this.drawBottomRoundRectanglePath(e,t,a,n,i,o);case\"barrel\":return this.drawBarrelPath(e,t,a,n,i)}};var Cm=Vf,ke=Vf.prototype;ke.CANVAS_LAYERS=3;ke.SELECT_BOX=0;ke.DRAG=1;ke.NODE=2;ke.WEBGL=3;ke.CANVAS_TYPES=[\"2d\",\"2d\",\"2d\",\"webgl2\"];ke.BUFFER_COUNT=3;ke.TEXTURE_BUFFER=0;ke.MOTIONBLUR_BUFFER_NODE=1;ke.MOTIONBLUR_BUFFER_DRAG=2;function Vf(r){var e=this,t=e.cy.window(),a=t.document;r.webgl&&(ke.CANVAS_LAYERS=e.CANVAS_LAYERS=4,console.log(\"webgl rendering enabled\")),e.data={canvases:new Array(ke.CANVAS_LAYERS),contexts:new Array(ke.CANVAS_LAYERS),canvasNeedsRedraw:new Array(ke.CANVAS_LAYERS),bufferCanvases:new Array(ke.BUFFER_COUNT),bufferContexts:new Array(ke.CANVAS_LAYERS)};var n=\"-webkit-tap-highlight-color\",i=\"rgba(0,0,0,0)\";e.data.canvasContainer=a.createElement(\"div\");var s=e.data.canvasContainer.style;e.data.canvasContainer.style[n]=i,s.position=\"relative\",s.zIndex=\"0\",s.overflow=\"hidden\";var o=r.cy.container();o.appendChild(e.data.canvasContainer),o.style[n]=i;var l={\"-webkit-user-select\":\"none\",\"-moz-user-select\":\"-moz-none\",\"user-select\":\"none\",\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\",\"outline-style\":\"none\"};yc()&&(l[\"-ms-touch-action\"]=\"none\",l[\"touch-action\"]=\"none\");for(var u=0;u<ke.CANVAS_LAYERS;u++){var v=e.data.canvases[u]=a.createElement(\"canvas\"),f=ke.CANVAS_TYPES[u];e.data.contexts[u]=v.getContext(f),e.data.contexts[u]||$e(\"Could not create canvas of type \"+f),Object.keys(l).forEach(function(J){v.style[J]=l[J]}),v.style.position=\"absolute\",v.setAttribute(\"data-id\",\"layer\"+u),v.style.zIndex=String(ke.CANVAS_LAYERS-u),e.data.canvasContainer.appendChild(v),e.data.canvasNeedsRedraw[u]=!1}e.data.topCanvas=e.data.canvases[0],e.data.canvases[ke.NODE].setAttribute(\"data-id\",\"layer\"+ke.NODE+\"-node\"),e.data.canvases[ke.SELECT_BOX].setAttribute(\"data-id\",\"layer\"+ke.SELECT_BOX+\"-selectbox\"),e.data.canvases[ke.DRAG].setAttribute(\"data-id\",\"layer\"+ke.DRAG+\"-drag\"),e.data.canvases[ke.WEBGL]&&e.data.canvases[ke.WEBGL].setAttribute(\"data-id\",\"layer\"+ke.WEBGL+\"-webgl\");for(var u=0;u<ke.BUFFER_COUNT;u++)e.data.bufferCanvases[u]=a.createElement(\"canvas\"),e.data.bufferContexts[u]=e.data.bufferCanvases[u].getContext(\"2d\"),e.data.bufferCanvases[u].style.position=\"absolute\",e.data.bufferCanvases[u].setAttribute(\"data-id\",\"buffer\"+u),e.data.bufferCanvases[u].style.zIndex=String(-u-1),e.data.bufferCanvases[u].style.visibility=\"hidden\";e.pathsEnabled=!0;var c=wr(),h=function(z){return{x:(z.x1+z.x2)/2,y:(z.y1+z.y2)/2}},d=function(z){return{x:-z.w/2,y:-z.h/2}},y=function(z){var q=z[0]._private,H=q.oldBackgroundTimestamp===q.backgroundTimestamp;return!H},g=function(z){return z[0]._private.nodeKey},p=function(z){return z[0]._private.labelStyleKey},m=function(z){return z[0]._private.sourceLabelStyleKey},b=function(z){return z[0]._private.targetLabelStyleKey},w=function(z,q,H,Y,te){return e.drawElement(z,q,H,!1,!1,te)},E=function(z,q,H,Y,te){return e.drawElementText(z,q,H,Y,\"main\",te)},C=function(z,q,H,Y,te){return e.drawElementText(z,q,H,Y,\"source\",te)},x=function(z,q,H,Y,te){return e.drawElementText(z,q,H,Y,\"target\",te)},T=function(z){return z.boundingBox(),z[0]._private.bodyBounds},k=function(z){return z.boundingBox(),z[0]._private.labelBounds.main||c},D=function(z){return z.boundingBox(),z[0]._private.labelBounds.source||c},B=function(z){return z.boundingBox(),z[0]._private.labelBounds.target||c},P=function(z,q){return q},A=function(z){return h(T(z))},R=function(z,q,H){var Y=z?z+\"-\":\"\";return{x:q.x+H.pstyle(Y+\"text-margin-x\").pfValue,y:q.y+H.pstyle(Y+\"text-margin-y\").pfValue}},L=function(z,q,H){var Y=z[0]._private.rscratch;return{x:Y[q],y:Y[H]}},I=function(z){return R(\"\",L(z,\"labelX\",\"labelY\"),z)},M=function(z){return R(\"source\",L(z,\"sourceLabelX\",\"sourceLabelY\"),z)},O=function(z){return R(\"target\",L(z,\"targetLabelX\",\"targetLabelY\"),z)},V=function(z){return d(T(z))},G=function(z){return d(D(z))},N=function(z){return d(B(z))},F=function(z){var q=k(z),H=d(k(z));if(z.isNode()){switch(z.pstyle(\"text-halign\").value){case\"left\":H.x=-q.w-(q.leftPad||0);break;case\"right\":H.x=-(q.rightPad||0);break}switch(z.pstyle(\"text-valign\").value){case\"top\":H.y=-q.h-(q.topPad||0);break;case\"bottom\":H.y=-(q.botPad||0);break}}return H},U=e.data.eleTxrCache=new ba(e,{getKey:g,doesEleInvalidateKey:y,drawElement:w,getBoundingBox:T,getRotationPoint:A,getRotationOffset:V,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),Q=e.data.lblTxrCache=new ba(e,{getKey:p,drawElement:E,getBoundingBox:k,getRotationPoint:I,getRotationOffset:F,isVisible:P}),K=e.data.slbTxrCache=new ba(e,{getKey:m,drawElement:C,getBoundingBox:D,getRotationPoint:M,getRotationOffset:G,isVisible:P}),j=e.data.tlbTxrCache=new ba(e,{getKey:b,drawElement:x,getBoundingBox:B,getRotationPoint:O,getRotationOffset:N,isVisible:P}),re=e.data.lyrTxrCache=new kf(e);e.onUpdateEleCalcs(function(z,q){U.invalidateElements(q),Q.invalidateElements(q),K.invalidateElements(q),j.invalidateElements(q),re.invalidateElements(q);for(var H=0;H<q.length;H++){var Y=q[H]._private;Y.oldBackgroundTimestamp=Y.backgroundTimestamp}});var ne=function(z){for(var q=0;q<z.length;q++)re.enqueueElementRefinement(z[q].ele)};U.onDequeue(ne),Q.onDequeue(ne),K.onDequeue(ne),j.onDequeue(ne),r.webgl&&e.initWebgl(r,{getStyleKey:g,getLabelKey:p,getSourceLabelKey:m,getTargetLabelKey:b,drawElement:w,drawLabel:E,drawSourceLabel:C,drawTargetLabel:x,getElementBox:T,getLabelBox:k,getSourceLabelBox:D,getTargetLabelBox:B,getElementRotationPoint:A,getElementRotationOffset:V,getLabelRotationPoint:I,getSourceLabelRotationPoint:M,getTargetLabelRotationPoint:O,getLabelRotationOffset:F,getSourceLabelRotationOffset:G,getTargetLabelRotationOffset:N})}ke.redrawHint=function(r,e){var t=this;switch(r){case\"eles\":t.data.canvasNeedsRedraw[ke.NODE]=e;break;case\"drag\":t.data.canvasNeedsRedraw[ke.DRAG]=e;break;case\"select\":t.data.canvasNeedsRedraw[ke.SELECT_BOX]=e;break;case\"gc\":t.data.gc=!0;break}};var Tm=typeof Path2D<\"u\";ke.path2dEnabled=function(r){if(r===void 0)return this.pathsEnabled;this.pathsEnabled=!!r};ke.usePaths=function(){return Tm&&this.pathsEnabled};ke.setImgSmoothing=function(r,e){r.imageSmoothingEnabled!=null?r.imageSmoothingEnabled=e:(r.webkitImageSmoothingEnabled=e,r.mozImageSmoothingEnabled=e,r.msImageSmoothingEnabled=e)};ke.getImgSmoothing=function(r){return r.imageSmoothingEnabled!=null?r.imageSmoothingEnabled:r.webkitImageSmoothingEnabled||r.mozImageSmoothingEnabled||r.msImageSmoothingEnabled};ke.makeOffscreenCanvas=function(r,e){var t;if((typeof OffscreenCanvas>\"u\"?\"undefined\":ar(OffscreenCanvas))!==\"undefined\")t=new OffscreenCanvas(r,e);else{var a=this.cy.window(),n=a.document;t=n.createElement(\"canvas\"),t.width=r,t.height=e}return t};[Df,Hr,Jr,mo,Lt,yt,xr,Mf,mt,Wa,Ff].forEach(function(r){be(ke,r)});var Sm=[{name:\"null\",impl:df},{name:\"base\",impl:Cf},{name:\"canvas\",impl:Cm}],km=[{type:\"layout\",extensions:Qp},{type:\"renderer\",extensions:Sm}],qf={},_f={};function Gf(r,e,t){var a=t,n=function(T){Ve(\"Can not register `\"+e+\"` for `\"+r+\"` since `\"+T+\"` already exists in the prototype and can not be overridden\")};if(r===\"core\"){if(Ra.prototype[e])return n(e);Ra.prototype[e]=t}else if(r===\"collection\"){if(fr.prototype[e])return n(e);fr.prototype[e]=t}else if(r===\"layout\"){for(var i=function(T){this.options=T,t.call(this,T),Le(this._private)||(this._private={}),this._private.cy=T.cy,this._private.listeners=[],this.createEmitter()},s=i.prototype=Object.create(t.prototype),o=[],l=0;l<o.length;l++){var u=o[l];s[u]=s[u]||function(){return this}}s.start&&!s.run?s.run=function(){return this.start(),this}:!s.start&&s.run&&(s.start=function(){return this.run(),this});var v=t.prototype.stop;s.stop=function(){var x=this.options;if(x&&x.animate){var T=this.animations;if(T)for(var k=0;k<T.length;k++)T[k].stop()}return v?v.call(this):this.emit(\"layoutstop\"),this},s.destroy||(s.destroy=function(){return this}),s.cy=function(){return this._private.cy};var f=function(T){return T._private.cy},c={addEventFields:function(T,k){k.layout=T,k.cy=f(T),k.target=T},bubble:function(){return!0},parent:function(T){return f(T)}};be(s,{createEmitter:function(){return this._private.emitter=new Gn(c,this),this},emitter:function(){return this._private.emitter},on:function(T,k){return this.emitter().on(T,k),this},one:function(T,k){return this.emitter().one(T,k),this},once:function(T,k){return this.emitter().one(T,k),this},removeListener:function(T,k){return this.emitter().removeListener(T,k),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(T,k){return this.emitter().emit(T,k),this}}),Fe.eventAliasesOn(s),a=i}else if(r===\"renderer\"&&e!==\"null\"&&e!==\"base\"){var h=Hf(\"renderer\",\"base\"),d=h.prototype,y=t,g=t.prototype,p=function(){h.apply(this,arguments),y.apply(this,arguments)},m=p.prototype;for(var b in d){var w=d[b],E=g[b]!=null;if(E)return n(b);m[b]=w}for(var C in g)m[C]=g[C];d.clientFunctions.forEach(function(x){m[x]=m[x]||function(){$e(\"Renderer does not implement `renderer.\"+x+\"()` on its prototype\")}}),a=p}else if(r===\"__proto__\"||r===\"constructor\"||r===\"prototype\")return $e(r+\" is an illegal type to be registered, possibly lead to prototype pollutions\");return sv({map:qf,keys:[r,e],value:a})}function Hf(r,e){return ov({map:qf,keys:[r,e]})}function Dm(r,e,t,a,n){return sv({map:_f,keys:[r,e,t,a],value:n})}function Bm(r,e,t,a){return ov({map:_f,keys:[r,e,t,a]})}var Ks=function(){if(arguments.length===2)return Hf.apply(null,arguments);if(arguments.length===3)return Gf.apply(null,arguments);if(arguments.length===4)return Bm.apply(null,arguments);if(arguments.length===5)return Dm.apply(null,arguments);$e(\"Invalid extension access syntax\")};Ra.prototype.extension=Ks;km.forEach(function(r){r.extensions.forEach(function(e){Gf(r.type,e.name,e.impl)})});var Rn=function(){if(!(this instanceof Rn))return new Rn;this.length=0},Rt=Rn.prototype;Rt.instanceString=function(){return\"stylesheet\"};Rt.selector=function(r){var e=this.length++;return this[e]={selector:r,properties:[]},this};Rt.css=function(r,e){var t=this.length-1;if(ge(r))this[t].properties.push({name:r,value:e});else if(Le(r))for(var a=r,n=Object.keys(a),i=0;i<n.length;i++){var s=n[i],o=a[s];if(o!=null){var l=or.properties[s]||or.properties[Mn(s)];if(l!=null){var u=l.name,v=o;this[t].properties.push({name:u,value:v})}}}return this};Rt.style=Rt.css;Rt.generateStyle=function(r){var e=new or(r);return this.appendToStyle(e)};Rt.appendToStyle=function(r){for(var e=0;e<this.length;e++){var t=this[e],a=t.selector,n=t.properties;r.selector(a);for(var i=0;i<n.length;i++){var s=n[i];r.css(s.name,s.value)}}return r};var Pm=\"3.33.1\",ea=function(e){if(e===void 0&&(e={}),Le(e))return new Ra(e);if(ge(e))return Ks.apply(Ks,arguments)};ea.use=function(r){var e=Array.prototype.slice.call(arguments,1);return e.unshift(ea),r.apply(null,e),this};ea.warnings=function(r){return hv(r)};ea.version=Pm;ea.stylesheet=ea.Stylesheet=Rn;export{ea as default};\n"
  },
  {
    "path": "public/build/assets/dark-Pb_2oqsz.css",
    "content": "@layer theme{html{color-scheme:dark;accent-color:hsl(var(--a)/1)}:root{--base: 240 21% 15%;--crust: 240 23% 9%;--mantle: 240 21% 12%;--content-wrapper-background: hsl(var(--base)/1);--surface0: 237 16% 23%;--surface1: 234 13% 31%;--surface2: 233 12% 39%;--text: 226 64% 88%;--subtext0: 228 24% 72%;--subtext1: 227 35% 80%;--mauve: 287 84% 81%;--pink: 316 72% 86%;--tinymce-filter: invert(90%) !important;--body-background: hsl(var(--base)/1);--sf: 316 70% 43%;--af: 175 70% 34%;--su: 144 31% 76%;--wa: 23 92% 75%;--inc: 199 76% 89%;--in: 223 61.8% 20.8%;--suc: 163 88.1% 15.8%;--wac: 26 90.5% 17.1%;--p: 287 84% 81%;--pc: 287 78% 1%;--pf: 287 88% 62%;--s: 316 70% 50%;--sc: var(--text);--a: 175 70% 41%;--ac: var(--text);--n: 213 18% 20%;--nf: 212 17% 17%;--nc: 228 17% 64%;--b1: var(--mantle);--b2: var(--base);--b3: 240 23% 9%;--bc: var(--text);--si: var(--mantle);--sif: var(--surface1)}}.alert{border:1px solid var(--alert-bg)}\n"
  },
  {
    "path": "public/build/assets/dashboard-CsClHCyP.css",
    "content": ".widget table{max-width:100%!important;word-break:break-all}.widget iframe,.widget img{max-width:100%!important}.widget .entity-attributes{min-height:24rem}\n"
  },
  {
    "path": "public/build/assets/dashboard-DzoSMhdl.js",
    "content": "import{S as I}from\"./sortable.esm-DdTU3J9A.js\";import{f as H,g as C,A as B,o,c as l,a as s,w as E,p as A,b as k,n as L,s as F,i as f,l as O,F as K,r as N,e as M}from\"./vendor-tiptap-D5xFoo7B.js\";import{p as P}from\"./vue-tippy.esm-browser-B_r0Ygiv.js\";import{v as T}from\"./v-click-outside.umd-Cl-Y_A58.js\";import\"./_commonjsHelpers-Cpj98o6Y.js\";const U={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},V=[\"innerHTML\"],j={class:\"max-w-4xl p-4\"},z={class:\"flex flex-col gap-4 lg:gap-6\"},G=[\"innerHTML\"],W={class:\"flex flex-col gap-1\"},J=[\"innerHTML\"],R=[\"placeholder\"],Q=[\"innerHTML\"],X=[\"innerHTML\"],Y={class:\"flex flex-col gap-2\"},Z=[\"innerHTML\"],ee=[\"innerHTML\"],te={class:\"flex flex-col gap-4\"},ne={key:0,class:\"fa-regular fa-check-square text-xl\",\"aria-label\":\"Selected\"},se={key:1,class:\"fa-regular fa-globe text-xl\",\"aria-hidden\":\"true\"},ae={class:\"flex flex-col gap-1\"},ie=[\"innerHTML\"],oe=[\"innerHTML\"],le={key:0,class:\"fa-regular fa-check-square text-xl\",\"aria-label\":\"Selected\"},re={key:1,class:\"fa-regular fa-dice-d20 text-xl\",\"aria-hidden\":\"true\"},de={class:\"flex flex-col gap-1\"},ce=[\"innerHTML\"],ue=[\"innerHTML\"],pe={key:0,class:\"fa-regular fa-check-square text-xl\",\"aria-label\":\"Selected\"},ge={key:1,class:\"fa-regular fa-pen-fancy text-xl\",\"aria-hidden\":\"true\"},me={class:\"flex flex-col gap-1\"},fe=[\"innerHTML\"],he=[\"innerHTML\"],ve=[\"innerHTML\"],xe={class:\"flex justify-between w-full gap-4 items-center mt-6\"},be=[\"innerHTML\"],we=[\"innerHTML\"],_e={key:1,class:\"btn2 btn-primary btn-disabled\",disabled:\"disabled\"},ye=H({__name:\"Onboarding\",props:{api:{},skip:{},i18n:{},campaign:{}},setup(h){const t=h,e=f(null),i=f(\"\"),a=f(null),r=f(),g=f(!1),u=f(),m=f(!1),b=f(),d=c=>r.value[c]??\"unknown\",S=()=>{v(\"x\")},w=()=>{window.closeDialog(\"onboarding-dialog\")},v=c=>{axios.post(t.skip,{reason:c}),w()},$=c=>{c.target===e.value&&v(\"backdrop\")},q=()=>{v(\"skip\"),w()},D=()=>{if(m.value)return;m.value=!0;let c={name:i.value,type:u.value};axios.post(t.api,c).then(n=>{n.data.redirect?window.location.href=n.data.redirect:w()}).catch(n=>{n.response.data.message?(b.value=n.response.data.message,a.value.focus(),a.value.scrollIntoView({behavior:\"smooth\"})):console.error(\"onboarding saving error\",n),m.value=!1})},x=c=>{u.value=c},_=c=>{let n=\"flex items-center gap-4 rounded-xl border p-2 px-4 hover:border-primary hover:text-primary focus:border-primary focus:text-primary\";return u.value!==c?n+\" cursor-pointer\":n+\"border-primary text-primary\"},y=(c,n)=>{(c.key===\"Enter\"||c.key===\" \")&&(c.preventDefault(),x(n))};return C(async()=>{r.value=JSON.parse(t.i18n),i.value=t.campaign,g.value=!0,await B(),e.value.showModal()}),(c,n)=>g.value?(o(),l(\"dialog\",{key:0,class:\"dialog rounded-2xl bg-base-100 text-base-content\",id:\"onboarding-dialog\",ref_key:\"onboardingDialog\",ref:e,\"aria-modal\":\"true\",\"aria-labelledby\":\"modal-card-label\",onClick:$,onCancel:n[10]||(n[10]=F(p=>v(\"esc\"),[\"prevent\"]))},[s(\"header\",U,[s(\"h4\",{innerHTML:d(\"title\"),class:\"text-lg font-normal\"},null,8,V),s(\"button\",{type:\"button\",class:\"text-base-content\",onClick:n[0]||(n[0]=p=>S()),title:\"Close\"},[...n[11]||(n[11]=[s(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),s(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),s(\"article\",j,[s(\"div\",z,[s(\"p\",{class:\"text-neutral-content\",innerHTML:d(\"intro\")},null,8,G),s(\"div\",W,[s(\"label\",{for:\"name\",innerHTML:d(\"name\")},null,8,J),E(s(\"input\",{type:\"text\",name:\"name\",id:\"name\",ref_key:\"nameField\",ref:a,class:\"\",\"onUpdate:modelValue\":n[1]||(n[1]=p=>i.value=p),placeholder:d(\"name\"),\"data-1p-ignore\":\"true\"},null,8,R),[[A,i.value]]),s(\"p\",{class:\"text-xs text-neutral-content\",innerHTML:d(\"placeholder\")},null,8,Q),b.value?(o(),l(\"p\",{key:0,innerHTML:b.value,class:\"text-error-content\"},null,8,X)):k(\"\",!0)]),s(\"div\",Y,[s(\"h3\",{innerHTML:d(\"type-title\")},null,8,Z),s(\"p\",{innerHTML:d(\"type-intro\")},null,8,ee),s(\"div\",te,[s(\"div\",{class:L(_(\"worldbuilding\")),onClick:n[2]||(n[2]=p=>x(\"worldbuilding\")),tabindex:\"0\",onKeydown:n[3]||(n[3]=p=>y(p,\"worldbuilding\"))},[u.value===\"worldbuilding\"?(o(),l(\"i\",ne)):(o(),l(\"i\",se)),s(\"div\",ae,[s(\"span\",{class:\"text-lg\",innerHTML:d(\"worldbuilding\")},null,8,ie),s(\"p\",{class:\"text-xs text-neutral-content\",innerHTML:d(\"worldbuilding-description\")},null,8,oe)])],34),s(\"div\",{class:L(_(\"campaign\")),onClick:n[4]||(n[4]=p=>x(\"campaign\")),tabindex:\"0\",onKeydown:n[5]||(n[5]=p=>y(p,\"campaign\"))},[u.value===\"campaign\"?(o(),l(\"i\",le)):(o(),l(\"i\",re)),s(\"div\",de,[s(\"span\",{class:\"text-lg\",innerHTML:d(\"campaign\")},null,8,ce),s(\"p\",{class:\"text-xs text-neutral-content\",innerHTML:d(\"campaign-description\")},null,8,ue)])],34),s(\"div\",{class:L(_(\"story\")),onClick:n[6]||(n[6]=p=>x(\"story\")),tabindex:\"0\",onKeydown:n[7]||(n[7]=p=>y(p,\"story\"))},[u.value===\"story\"?(o(),l(\"i\",pe)):(o(),l(\"i\",ge)),s(\"div\",me,[s(\"span\",{class:\"text-lg\",innerHTML:d(\"story\")},null,8,fe),s(\"p\",{class:\"text-xs text-neutral-content\",innerHTML:d(\"story-description\")},null,8,he)])],34)]),s(\"p\",{class:\"text-xs text-neutral-content\",innerHTML:d(\"type-helper\")},null,8,ve)])]),s(\"div\",xe,[s(\"button\",{class:\"btn2 btn-sm btn-outline\",onClick:n[8]||(n[8]=p=>q()),innerHTML:d(\"skip\")},null,8,be),m.value?(o(),l(\"span\",_e,[...n[12]||(n[12]=[s(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Saving\"},null,-1)])])):(o(),l(\"button\",{key:0,class:\"btn2 btn-primary\",onClick:n[9]||(n[9]=p=>D()),innerHTML:d(\"continue\")},null,8,we))])])],544)):k(\"\",!0)}}),Le={key:0,class:\"flex items-center align-middle\"},ke={key:1,class:\"flex flex-col gap-2\"},Me={class:\"flex items-center justify-between gap-2 mb-3\"},Te=[\"innerHTML\"],He=[\"innerHTML\"],Ce={class:\"tasks flex flex-col gap-2 lg:gap-3 xl:gap-4\"},Ee={class:\"flex items-center gap-2 task\"},Se={class:\"task-icon\"},$e={key:0,class:\"fa-regular fa-square-check\",\"aria-label\":\"Completed\"},qe={key:1,class:\"fa-regular fa-square\",\"aria-label\":\"Pending\"},De=[\"href\",\"innerHTML\"],Ie=[\"innerHTML\"],Be=H({__name:\"GettingStarted\",props:{api:{},name:{}},setup(h){const t=h,e=f(!0),i=f([]);C(()=>{axios.get(t.api).then(r=>{i.value=r.data,e.value=!1})});const a=()=>{let r=i.value.length,g=i.value.filter(u=>u.completed).length;return r==g?\"\":g+\" / \"+r};return(r,g)=>{const u=O(\"tippy\");return e.value?(o(),l(\"div\",Le,[...g[0]||(g[0]=[s(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading tasks\"},null,-1)])])):(o(),l(\"div\",ke,[s(\"div\",Me,[s(\"span\",{class:\"widget-title block text-lg\",innerHTML:h.name},null,8,Te),s(\"span\",{class:\"text-xs text-neutral-content\",innerHTML:a()},null,8,He)]),s(\"div\",Ce,[(o(!0),l(K,null,N(i.value,m=>E((o(),l(\"div\",Ee,[s(\"div\",Se,[m.completed?(o(),l(\"i\",$e)):(o(),l(\"i\",qe))]),m.completed?(o(),l(\"span\",{key:1,innerHTML:m.name,class:\"line-through\"},null,8,Ie)):(o(),l(\"a\",{key:0,href:m.url,innerHTML:m.name},null,8,De))])),[[u,m.helper]])),256))])]))}}});class Ae{constructor(){this.init()}init(){this.initDashboardCalendars(),this.initPreviewExpander(),this.initDashboardAdminUI(),this.initFollow(),this.initOnboarding(),this.initGettingStarted(),this.initLazyLoader()}initLazyLoader(){const t=new IntersectionObserver(e=>{e.forEach(i=>{if(i.isIntersecting){const a=i.target;this.renderWidget(a),t.unobserve(a)}})},{threshold:[0]});document.querySelectorAll(\"[data-render]\")?.forEach(e=>{t.observe(e)})}renderWidget(t){axios.get(t.dataset.render).then(e=>{const i=t.dataset.id;this.renderCalendar(i,e.data)}).catch(e=>console.error(`Error loading widget ${t.dataset.id}:`,e))}renderCalendar(t,e){const i=document.querySelector(\"#widget-loading-\"+t),a=document.querySelector(\"#widget-body-\"+t);i&&i.classList.add(\"hidden\"),a&&(a.innerHTML=e,a.classList.remove(\"hidden\")),window.triggerEvent&&window.triggerEvent()}initDashboardCalendars(){document.addEventListener(\"click\",t=>{const e=t.target.closest(\".widget-calendar-switch\");if(!e)return;t.preventDefault();const i=e.dataset.url,a=e.dataset.widget,r=document.querySelector(\"#widget-body-\"+a),g=document.querySelector(\"#widget-loading-\"+a);r&&r.classList.add(\"hidden\"),g&&g.classList.remove(\"hidden\"),axios.post(i).then(u=>{this.renderCalendar(a,u.data)}).catch(u=>console.error(\"Error switching calendar:\",u))})}initDashboardAdminUI(){const t=document.getElementById(\"widgets\");t&&this.initSortable(t),document.addEventListener(\"click\",e=>{const i=e.target.closest('[data-img=\"delete\"]');if(!i)return;e.preventDefault();const a=document.querySelector('input[name=\"'+i.dataset.target+'\"]');a&&(a.value=1);const r=i.closest(\".preview\");r&&r.classList.add(\"hidden\")}),window.onEvent&&window.onEvent(()=>{document.getElementById(\"summernote-config\")&&window.initSummernote&&window.initSummernote()})}initSortable(t){new I(t,{handle:\".handle\",onEnd:()=>{const e=t.dataset.url,i=new URLSearchParams;document.querySelectorAll('input[name=\"widgets[]\"]').forEach(a=>{i.append(a.name,a.value)}),axios.post(e,i).then(a=>{a.data.success&&a.data.message&&window.showToast&&window.showToast(a.data.message)}).catch(a=>console.error(\"Error saving order:\",a))}})}initFollow(){const t=document.querySelector(\"#campaign-follow\"),e=document.querySelector(\"#campaign-follow-text\");if(!t||!e)return;const i=a=>{e.innerHTML=a?t.dataset.unfollow:t.dataset.follow};i(!!t.dataset.following),t.classList.remove(\"hidden\"),t.addEventListener(\"click\",a=>{a.preventDefault(),t.classList.add(\"loading\"),axios.post(t.dataset.url).then(r=>{t.classList.remove(\"loading\"),i(r.data.following)}).catch(()=>t.classList.remove(\"loading\"))})}initPreviewExpander(){document.addEventListener(\"click\",t=>{const e=t.target.closest(\".preview-switch\");if(!e)return;t.preventDefault();const i=document.querySelector(\"#widget-preview-body-\"+e.dataset.widget);if(!i)return;const a=e.parentNode.querySelector(\".gradient-to-base-100\");!i.classList.contains(\"max-h-52\")?(i.classList.add(\"max-h-52\"),e.innerHTML='<i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>',a&&a.classList.remove(\"hidden\")):(i.classList.remove(\"max-h-52\"),e.innerHTML='<i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>',a&&a.classList.add(\"hidden\"))})}initOnboarding(){if(!document.getElementById(\"onboarding\"))return;const e=M({});e.component(\"onboarding\",ye),e.use(T),e.mount(\"#onboarding\")}initGettingStarted(){if(!document.getElementById(\"getting-started\"))return;const e=M({});e.component(\"getting-started\",Be),e.use(T),e.use(P,{theme:\"kanka\"}),e.mount(\"#getting-started\")}}new Ae;\n"
  },
  {
    "path": "public/build/assets/dialog-DkrH_pRQ.js",
    "content": "const l=document.getElementById(\"dialog-backdrop\");let d;const u=()=>{document.querySelectorAll('[data-toggle=\"dialog\"]').forEach(e=>{e.addEventListener(\"click\",s)}),document.querySelectorAll('[data-toggle=\"dialog-ajax\"]').forEach(e=>{e.addEventListener(\"click\",s)})},r=new Event(\"dialog.loaded\");function s(e){e.preventDefault();let n=this.dataset.target??\"primary-dialog\",i=this.dataset.url??this.url,t=this.dataset.focus;a(n,i,t)}const a=(e,n,i)=>{if(e=document.getElementById(e),e.removeAttribute(\"open\"),e.setAttribute(\"aria-hidden\",!1),e.show(),document.addEventListener(\"keydown\",c),l.classList.remove(\"hidden\"),e.dataset.dismissible!==\"false\"&&l.addEventListener(\"click\",function(t){e.close()}),e.addEventListener(\"click\",function(t){let o=e.getBoundingClientRect();!(o.top<=t.clientY&&t.clientY<=o.top+o.height&&o.left<=t.clientX&&t.clientX<=o.left+o.width)&&t.target.tagName===\"DIALOG\"&&e.close()}),e.addEventListener(\"close\",function(t){l.classList.add(\"hidden\"),e.setAttribute(\"aria-hidden\",!0),document.removeEventListener(\"keydown\",c)}),n)f(n,e);else if(i){let t=document.querySelector(i);if(!t)return;t.focus()}},c=e=>{if(e.key===\"Escape\"){const n=document.activeElement;if([\"INPUT\",\"SELECT\",\"TEXTAREA\"].includes(n.tagName)){document.activeElement.blur();return}const t=document.querySelector('dialog[aria-hidden=\"false\"]');t||document.removeEventListener(\"keydown\",c),t.close()}},f=(e,n)=>{d?n.innerHTML=d:d=n.innerHTML,fetch(e,{headers:{\"X-Requested-With\":\"XMLHttpRequest\"}}).then(i=>i.text()).then(i=>{n.innerHTML=i,n.show(),window.triggerEvent(),document.dispatchEvent(r),Alpine.initTree(n)})},m=e=>{document.getElementById(e).close()};window.initDialogs=u;window.openDialog=a;window.closeDialog=m;\n"
  },
  {
    "path": "public/build/assets/explore-PT_Dl9lc.js",
    "content": "import{k as be,o as n,j as J,x as Ue,c as a,O as z,a as t,P as ie,N as ve,F as E,r as O,t as V,b as p,f as Y,u,s as oe,h as te,n as B,z as D,g as ue,q as xe,G as ke,E as ne,l as we,w as G,i as x,A as re,B as Ee,d as Re,e as Be}from\"./vendor-tiptap-D5xFoo7B.js\";import{p as je}from\"./vue-tippy.esm-browser-B_r0Ygiv.js\";import{t as Te}from\"./tippy.esm-CnBRltuW.js\";const Ae={emits:[\"pagination-change-page\"],props:{data:{type:Object,default:()=>{}},limit:{type:Number,default:0},keepLength:{type:Boolean,default:!1}},computed:{isApiResource(){return!!this.data.meta},currentPage(){var e;return this.isApiResource?this.data.meta.current_page:(e=this.data.current_page)!=null?e:null},firstPageUrl(){var e,o,s,r,d;return(d=(r=(o=this.data.first_page_url)!=null?o:(e=this.data.meta)==null?void 0:e.first_page_url)!=null?r:(s=this.data.links)==null?void 0:s.first)!=null?d:null},from(){var e;return this.isApiResource?this.data.meta.from:(e=this.data.from)!=null?e:null},lastPage(){var e;return this.isApiResource?this.data.meta.last_page:(e=this.data.last_page)!=null?e:null},lastPageUrl(){var e,o,s,r,d;return(d=(r=(o=this.data.last_page_url)!=null?o:(e=this.data.meta)==null?void 0:e.last_page_url)!=null?r:(s=this.data.links)==null?void 0:s.last)!=null?d:null},nextPageUrl(){var e,o,s,r,d;return(d=(r=(o=this.data.next_page_url)!=null?o:(e=this.data.meta)==null?void 0:e.next_page_url)!=null?r:(s=this.data.links)==null?void 0:s.next)!=null?d:null},perPage(){var e;return this.isApiResource?this.data.meta.per_page:(e=this.data.per_page)!=null?e:null},prevPageUrl(){var e,o,s,r,d;return(d=(r=(o=this.data.prev_page_url)!=null?o:(e=this.data.meta)==null?void 0:e.prev_page_url)!=null?r:(s=this.data.links)==null?void 0:s.prev)!=null?d:null},to(){var e;return this.isApiResource?this.data.meta.to:(e=this.data.to)!=null?e:null},total(){var e;return this.isApiResource?this.data.meta.total:(e=this.data.total)!=null?e:null},pageRange(){if(this.limit===-1)return 0;if(this.limit===0)return this.lastPage;for(var e=this.currentPage,o=this.keepLength,s=this.lastPage,r=this.limit,d=e-r,k=e+r,g=(r+2)*2,y=(r+2)*2-1,T=[],$=[],i,m=1;m<=s;m++)(m===1||m===s||m>=d&&m<=k||o&&m<g&&e<g-2||o&&m>s-y&&e>s-y+2)&&T.push(m);return T.forEach(function(h){i&&(h-i===2?$.push(i+1):h-i!==1&&$.push(\"...\")),$.push(h),i=h}),$}},methods:{previousPage(){this.selectPage(this.currentPage-1)},nextPage(){this.selectPage(this.currentPage+1)},selectPage(e){e===\"...\"||e===this.currentPage||this.$emit(\"pagination-change-page\",e)}},render(){return this.$slots.default({data:this.data,limit:this.limit,computed:{isApiResource:this.isApiResource,currentPage:this.currentPage,firstPageUrl:this.firstPageUrl,from:this.from,lastPage:this.lastPage,lastPageUrl:this.lastPageUrl,nextPageUrl:this.nextPageUrl,perPage:this.perPage,prevPageUrl:this.prevPageUrl,to:this.to,total:this.total,pageRange:this.pageRange},prevButtonEvents:{click:e=>{e.preventDefault(),this.previousPage()}},nextButtonEvents:{click:e=>{e.preventDefault(),this.nextPage()}},pageButtonEvents:e=>({click:o=>{o.preventDefault(),this.selectPage(e)}})})}},Oe=(e,o)=>{const s=e.__vccOpts||e;for(const[r,d]of o)s[r]=d;return s},De={compatConfig:{MODE:3},inheritAttrs:!1,emits:[\"pagination-change-page\"],components:{RenderlessPagination:Ae},props:{data:{type:Object,default:()=>{}},limit:{type:Number,default:0},keepLength:{type:Boolean,default:!1},itemClasses:{type:Array,default:()=>[\"bg-white\",\"text-gray-500\",\"border-gray-300\",\"hover:bg-gray-50\"]},activeClasses:{type:Array,default:()=>[\"bg-blue-50\",\"border-blue-500\",\"text-blue-600\"]}},methods:{onPaginationChangePage(e){this.$emit(\"pagination-change-page\",e)}}},Ie=[\"disabled\"],Ne=t(\"span\",{class:\"sr-only\"},\"Previous\",-1),Fe=t(\"svg\",{class:\"w-5 h-5\",\"aria-hidden\":\"true\",xmlns:\"http://www.w3.org/2000/svg\",fill:\"none\",viewBox:\"0 0 24 24\",\"stroke-width\":\"1.5\",stroke:\"currentColor\"},[t(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",d:\"M15.75 19.5L8.25 12l7.5-7.5\"})],-1),Ke=[\"aria-current\",\"disabled\"],_e=[\"disabled\"],qe=t(\"span\",{class:\"sr-only\"},\"Next\",-1),ze=t(\"svg\",{class:\"w-5 h-5\",\"aria-hidden\":\"true\",xmlns:\"http://www.w3.org/2000/svg\",fill:\"none\",viewBox:\"0 0 24 24\",\"stroke-width\":\"1.5\",stroke:\"currentColor\"},[t(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",d:\"M8.25 4.5l7.5 7.5-7.5 7.5\"})],-1);function Ve(e,o,s,r,d,k){const g=be(\"RenderlessPagination\");return n(),J(g,{data:s.data,limit:s.limit,\"keep-length\":s.keepLength,onPaginationChangePage:k.onPaginationChangePage},{default:Ue(y=>[y.computed.total>y.computed.perPage?(n(),a(\"nav\",z({key:0},e.$attrs,{class:\"inline-flex -space-x-px rounded-md shadow-sm isolate ltr:flex-row rtl:flex-row-reverse\",\"aria-label\":\"Pagination\"}),[t(\"button\",z({class:[\"relative inline-flex items-center px-2 py-2 text-sm font-medium border rounded-l-md focus:z-20 disabled:opacity-50\",s.itemClasses],disabled:!y.computed.prevPageUrl},ie(y.prevButtonEvents,!0)),[ve(e.$slots,\"prev-nav\",{},()=>[Ne,Fe])],16,Ie),(n(!0),a(E,null,O(y.computed.pageRange,(T,$)=>(n(),a(\"button\",z({class:[\"relative inline-flex items-center px-4 py-2 text-sm font-medium border focus:z-20\",[T==y.computed.currentPage?s.activeClasses:s.itemClasses,T==y.computed.currentPage?\"z-30\":\"\"]],\"aria-current\":y.computed.currentPage?\"page\":null,key:$},ie(y.pageButtonEvents(T),!0),{disabled:T===y.computed.currentPage}),V(T),17,Ke))),128)),t(\"button\",z({class:[\"relative inline-flex items-center px-2 py-2 text-sm font-medium border rounded-r-md focus:z-20 disabled:opacity-50\",s.itemClasses],disabled:!y.computed.nextPageUrl},ie(y.nextButtonEvents,!0)),[ve(e.$slots,\"next-nav\",{},()=>[qe,ze])],16,_e)],16)):p(\"\",!0)]),_:3},8,[\"data\",\"limit\",\"keep-length\",\"onPaginationChangePage\"])}const Ge=Oe(De,[[\"render\",Ve]]),Xe=500,me=10;function Pe(e){let o=null,s=0,r=0;const d=y=>{y.pointerType!==\"mouse\"&&(s=y.clientX,r=y.clientY,o=setTimeout(()=>{o=null,e()},Xe))},k=()=>{o!==null&&(clearTimeout(o),o=null)};return{start:d,cancel:k,move:y=>{(Math.abs(y.clientX-s)>me||Math.abs(y.clientY-r)>me)&&k()}}}const Je=[\"href\",\"title\"],Ye=[\"title\"],Qe=[\"aria-label\"],We={key:0,class:\"fa-regular fa-check\",\"aria-label\":\"selected\"},Ze={key:2,class:\"absolute bottom-2 right-2 flex flex-row-reverse\"},et={key:0,class:\"w-7 h-7 rounded-full bg-primary border-1 border-box flex items-center justify-center text-primary-content font-bold ml-[-8px] z-0\"},tt=[\"title\"],nt={key:0},at=[\"href\",\"data-id\",\"data-url\",\"innerHTML\"],lt=[\"href\",\"title\"],st=[\"title\"],it=[\"aria-label\"],rt={key:0,class:\"fa-regular fa-check\",\"aria-label\":\"selected\"},ot=[\"href\",\"data-id\",\"data-url\",\"innerHTML\"],ut=Y({__name:\"EntityCard\",props:{entity:{},selecting:{type:Boolean},nested:{type:Boolean},i18n:{}},emits:[\"navigate\",\"startSelecting\"],setup(e,{emit:o}){const s=e,r=o;let d=!1,k=\"mouse\";const g=L=>{k!==\"mouse\"&&L.preventDefault()},{start:y,cancel:T,move:$}=Pe(()=>{s.selecting||(d=!0,r(\"startSelecting\",s.entity.id))}),i=L=>{k=L.pointerType,y(L)},m=D(()=>s.nested&&s.entity.children>0),h=D(()=>({backgroundImage:`url('${s.entity.images.thumb}')`})),H=D(()=>\"entity overflow-hidden rounded shadow-xs hover:shadow-md w-[47%] xs:w-[25%] sm:w-48 aspect-square flex flex-col bg-box\"),U=D(()=>{const L=\"rounded-full opacity-80 h-6 w-6 absolute left-1.5 top-1.5 border border-primary flex items-center justify-center text-xl\";return s.entity.selected?L+\" bg-primary text-primary-content\":L+\" bg-base-100\"}),I=D(()=>{const L={\"data-entity\":s.entity.id,\"data-entity-type\":s.entity.entityType?.code,\"data-type\":s.entity.type_slug||s.entity.type};return s.entity.attributes?.forEach(S=>{L[`data-${S}`]=!0}),L}),q=L=>L.split(\" \").map(S=>S[0]).join(\"\").slice(0,2).toUpperCase(),R=(L,S)=>{const f={zIndex:3-S};return L.image&&(f.backgroundImage=`url('${L.image}')`),f},C=L=>{if(d){L.preventDefault(),d=!1;return}if(s.selecting){L.preventDefault(),s.entity.selected=!s.entity.selected;return}if(s.nested&&s.entity.children>0){L.preventDefault(),r(\"navigate\",s.entity.id,s.entity.urls.children_api);return}window.location.href=L.currentTarget.href},K=L=>{if(d){L.preventDefault(),d=!1;return}s.selecting&&(L.preventDefault(),s.entity.selected=!s.entity.selected)};return(L,S)=>m.value?(n(),a(\"div\",{key:0,class:\"stack inline-grid items-center align-items-end w-[47%] xs:w-[25%] sm:w-48\",onPointerdown:i,onPointerup:S[0]||(S[0]=(...f)=>u(T)&&u(T)(...f)),onPointermove:S[1]||(S[1]=(...f)=>u($)&&u($)(...f)),onPointercancel:S[2]||(S[2]=(...f)=>u(T)&&u(T)(...f)),onContextmenu:g},[t(\"div\",z({class:\"entity overflow-hidden rounded shadow-xs hover:shadow-md aspect-square w-full flex flex-col bg-box\"},I.value),[t(\"a\",{href:e.entity.urls.show,title:e.entity.name,class:\"block avatar grow relative cover-background overflow-hidden text-center text-link\",style:te(h.value),onClick:oe(C,[\"prevent\"])},[e.entity.is_private&&!e.selecting?(n(),a(\"div\",{key:0,class:\"bubble-private absolute left-1.5 top-1.5 text-xs shadow-xs flex justify-center items-center aspect-square rounded-full w-6 h-6 bg-box opacity-80 text-base-content\",title:e.i18n.is_private},[t(\"i\",{class:\"fa-regular fa-lock\",\"aria-label\":e.i18n.is_private},null,8,Qe)],8,Ye)):e.selecting?(n(),a(\"div\",{key:1,class:B(U.value)},[e.entity.selected?(n(),a(\"i\",We)):p(\"\",!0)],2)):p(\"\",!0),e.nested&&e.entity.children_preview?.length?(n(),a(\"div\",Ze,[e.entity.children>3?(n(),a(\"div\",et,\" +\"+V(e.entity.children-3),1)):p(\"\",!0),(n(!0),a(E,null,O(e.entity.children_preview.slice(0,3),(f,M)=>(n(),a(\"div\",{key:f.id,class:B([\"w-7 h-7 rounded-full border-1 border-box flex items-center justify-center ml-[-8px] cover-background\",f.image?\"\":\"bg-base-200 text-base-content\"]),style:te(R(f,M)),title:f.name},[f.image?p(\"\",!0):(n(),a(\"span\",nt,V(q(f.name)),1))],14,tt))),128))])):p(\"\",!0)],12,Je),t(\"a\",{href:e.entity.urls.show,class:\"block text-center relative truncate h-12 p-4 text-link\",\"data-toggle\":\"tooltip-ajax\",\"data-id\":e.entity.id,\"data-url\":e.entity.urls.tooltip,innerHTML:e.entity.name,onClick:K},null,8,at)],16),(n(!0),a(E,null,O(Math.min(e.entity.children,2),f=>(n(),a(\"div\",{key:f,class:\"entity entity-stack bg-base-300 w-full overflow-hidden rounded aspect-square flex flex-col shadow-xs\"},[...S[6]||(S[6]=[t(\"div\",{class:\"block grow\"},null,-1),t(\"div\",{class:\"block h-12 p-4 bg-box\"},null,-1)])]))),128))],32)):(n(),a(\"div\",z({key:1,class:H.value},I.value,{onPointerdown:i,onPointerup:S[3]||(S[3]=(...f)=>u(T)&&u(T)(...f)),onPointermove:S[4]||(S[4]=(...f)=>u($)&&u($)(...f)),onPointercancel:S[5]||(S[5]=(...f)=>u(T)&&u(T)(...f)),onContextmenu:g}),[t(\"a\",{href:e.entity.urls.show,class:\"block avatar grow relative cover-background\",style:te(h.value),title:e.entity.name,onClick:oe(C,[\"prevent\"])},[e.entity.is_private&&!e.selecting?(n(),a(\"div\",{key:0,class:\"bubble-private absolute left-1.5 top-1.5 text-xs shadow-xs flex justify-center items-center aspect-square rounded-full w-6 h-6 bg-box opacity-80 text-base-content\",title:e.i18n.is_private},[t(\"i\",{class:\"fa-regular fa-lock\",\"aria-label\":e.i18n.is_private},null,8,it)],8,st)):e.selecting?(n(),a(\"div\",{key:1,class:B(U.value)},[e.entity.selected?(n(),a(\"i\",rt)):p(\"\",!0)],2)):p(\"\",!0)],12,lt),t(\"a\",{href:e.entity.urls.show,class:\"block text-center relative truncate h-12 p-4 text-link\",\"data-toggle\":\"tooltip-ajax\",\"data-id\":e.entity.id,\"data-url\":e.entity.urls.tooltip,innerHTML:e.entity.name,onClick:K},null,8,ot)],16))}}),dt=[\"id\"],ct=Y({__name:\"EntityAdSlot\",props:{idx:{}},setup(e){const o=e,s=D(()=>`nitro-grid-${o.idx}`),r=new URLSearchParams(window.location.search).has(\"nitro_demo\");return ue(()=>{window.nitroAds&&window.nitroAds.createAd(s.value,{sizes:[[\"180\",\"150\"]],report:{enabled:!0,icon:!0,wording:\"Report Ad\",position:\"bottom-right\"},demo:r})}),(d,k)=>(n(),a(\"div\",{id:s.value,class:\"w-[47%] xs:w-[25%] sm:w-48 aspect-square flex items-center justify-center overflow-hidden\"},null,8,dt))}}),ft={class:\"flex flex-wrap gap-3 lg:gap-5 w-full\"},gt=[\"href\"],yt={class:\"block text-center p-4 h-12 bg-box\"},ht=[\"innerHTML\"],pt=Y({__name:\"EntityGrid\",props:{entities:{},parent:{},selecting:{type:Boolean},nested:{type:Boolean},i18n:{},ads:{}},emits:[\"navigate\",\"back\",\"startSelecting\"],setup(e){return(o,s)=>(n(),a(\"div\",ft,[e.parent?(n(),a(\"a\",{key:0,href:e.parent.urls.parent,class:\"entity w-[47%] xs:w-[25%] sm:w-48 overflow-hidden rounded flex flex-col shadow-xs hover:shadow-md text-link\",onClick:s[0]||(s[0]=oe(r=>o.$emit(\"back\"),[\"prevent\"]))},[s[3]||(s[3]=t(\"div\",{class:\"flex items-center justify-center grow text-6xl\"},[t(\"i\",{class:\"fa-regular fa-arrow-left\",\"aria-hidden\":\"true\"})],-1)),t(\"div\",yt,[t(\"span\",{innerHTML:e.parent.links.back},null,8,ht)])],8,gt)):p(\"\",!0),(n(!0),a(E,null,O(e.entities,(r,d)=>(n(),a(E,{key:r.id},[xe(ut,{entity:r,selecting:e.selecting,nested:e.nested,i18n:e.i18n,onNavigate:s[1]||(s[1]=(k,g)=>o.$emit(\"navigate\",k,g)),onStartSelecting:s[2]||(s[2]=k=>o.$emit(\"startSelecting\",k))},null,8,[\"entity\",\"selecting\",\"nested\",\"i18n\"]),e.ads.enabled&&(d+1)%e.ads.frequency===0?(n(),J(ct,{key:0,idx:d},null,8,[\"idx\"])):p(\"\",!0)],64))),128))]))}}),vt=[\"data-id\"],mt=[\"checked\"],bt={key:0,class:\"w-8 text-center\"},xt={key:0,class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},kt={key:1,class:\"fa-regular fa-angle-down\",\"aria-hidden\":\"true\"},wt={key:2,class:\"fa-regular fa-angle-right\",\"aria-hidden\":\"true\"},Tt=[\"href\"],Pt=[\"href\",\"title\"],Lt=[\"href\",\"data-id\",\"data-url\"],Ct=[\"innerHTML\"],Mt=[\"innerHTML\"],$t=[\"innerHTML\"],Ht=[\"href\",\"innerHTML\"],St={key:0},Ut=[\"href\",\"innerHTML\"],Et={key:0},Rt={key:6,class:\"flex items-center gap-1 flex-wrap\"},Bt=[\"href\",\"innerHTML\",\"title\"],jt=[\"aria-label\",\"title\"],At=[\"innerHTML\"],Ot=[\"href\",\"innerHTML\"],Dt=[\"href\",\"title\"],It=[\"title\"],Nt={key:2,class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},Ft=[\"href\",\"title\"],Kt={class:\"w-10 text-center\"},_t={class:\"dropdown\"},qt=[\"href\"],zt=[\"innerHTML\"],Vt=[\"href\"],Gt=[\"innerHTML\"],Xt=[\"href\"],Jt=[\"innerHTML\"],Yt={key:0},Qt=[\"colspan\"],Wt=[\"disabled\"],Zt={key:0,class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},en=[\"innerHTML\"],tn=Y({__name:\"EntityRow\",props:{entity:{},visibleColumns:{},selecting:{type:Boolean},nested:{type:Boolean},i18n:{},features:{},depth:{default:0},maxDepth:{default:3},showExpandColumn:{type:Boolean},onToggleChild:{}},emits:[\"startSelecting\"],setup(e,{emit:o}){const s=o,r=e,d=x(!1),k=x([]),g=x(!1),y=x(!1),T=x(null),$=x(null),i=x(null);let m=null;ue(()=>{$.value&&i.value&&(i.value.style.display=\"\",m=Te($.value,{content:i.value,theme:\"kanka-dropdown\",placement:\"bottom-end\",interactive:!0,trigger:\"click\",allowHTML:!0,arrow:!0,zIndex:890}))}),ke(()=>{m?.destroy()});const h=D(()=>{const w={\"data-entity-id\":r.entity.id,\"data-entity-type\":r.entity.entityType?.code};return r.nested&&r.depth>0&&(w[\"aria-level\"]=r.depth+1),r.entity.children>0&&r.nested&&(w[\"aria-expanded\"]=d.value),w}),H=D(()=>{if(r.depth<=0)return\"\";let w=\"\";for(let P=0;P<r.depth;P++)w+=\"&nbsp;&nbsp;\";return w+\"└\"}),U=w=>w.type===\"avatar\"?\"w-10\":w.type===\"name\"?\"truncate max-w-fit\":w.type===\"private\"||w.type===\"icon\"||w.type===\"explore\"||w.type===\"draw\"?\"w-10 text-center\":\"hidden lg:table-cell truncate max-w-fit\",I=w=>w===\"parent\"?r.entity.parent_entity||null:r.entity[w]||null,q=()=>{if(!r.selecting){r.depth>0&&(r.entity.selected=!0),s(\"startSelecting\",r.entity.id);return}r.entity.selected=!r.entity.selected,r.depth>0&&r.onToggleChild?.(r.entity.id)};ne(()=>r.selecting,w=>{w||k.value.forEach(P=>{P.selected=!1})});let R=!1,C=\"mouse\";const K=w=>{C!==\"mouse\"&&w.preventDefault()},{start:L,cancel:S,move:f}=Pe(()=>{r.selecting||(R=!0,s(\"startSelecting\",r.entity.id))}),M=w=>{C=w.pointerType,L(w)},Q=w=>{if(R){w.preventDefault(),w.stopPropagation(),R=!1;return}if(r.selecting){if(w.target.closest('input[type=\"checkbox\"]'))return;w.preventDefault(),w.stopPropagation(),r.entity.selected=!r.entity.selected,r.depth>0&&r.onToggleChild?.(r.entity.id)}},W=D(()=>T.value!==null&&T.value.current_page<T.value.last_page),Z=D(()=>{let w=r.visibleColumns.length+1;return w++,r.showExpandColumn&&w++,w}),X=async()=>{if(d.value){d.value=!1;return}g.value=!0;try{const w=await fetch(r.entity.urls.children_api);if(!w.ok)return;const P=await w.json();k.value=P.entities?.data??[],T.value=P.entities?.meta??null,d.value=!0}catch{}finally{g.value=!1}},F=async()=>{if(!(!T.value||y.value)){y.value=!0;try{const w=new URL(r.entity.urls.children_api,window.location.origin);w.searchParams.set(\"page\",String(T.value.current_page+1));const P=await fetch(w.toString());if(!P.ok)return;const _=await P.json();k.value=[...k.value,..._.entities?.data??[]],T.value=_.entities?.meta??null}catch{}finally{y.value=!1}}};return(w,P)=>{const _=be(\"EntityRow\",!0),j=we(\"tippy\");return n(),a(E,null,[t(\"tr\",z({\"data-id\":e.entity.id},h.value,{onPointerdown:M,onPointerup:P[0]||(P[0]=(...v)=>u(S)&&u(S)(...v)),onPointermove:P[1]||(P[1]=(...v)=>u(f)&&u(f)(...v)),onPointercancel:P[2]||(P[2]=(...v)=>u(S)&&u(S)(...v)),onContextmenu:K,onClickCapture:Q}),[t(\"td\",{class:B([\"w-8\",e.selecting?\"\":\"hidden sm:table-cell\"])},[t(\"input\",{type:\"checkbox\",checked:e.entity.selected,onChange:q},null,40,mt)],2),e.showExpandColumn?(n(),a(\"td\",bt,[e.entity.children>0&&e.depth<e.maxDepth?(n(),a(\"button\",{key:0,onClick:X,class:\"text-link hover:text-primary\"},[g.value?(n(),a(\"i\",xt)):d.value?(n(),a(\"i\",kt)):(n(),a(\"i\",wt))])):e.entity.children>0?(n(),a(\"a\",{key:1,href:e.entity.urls.children,class:\"text-link text-xs\"},[...P[4]||(P[4]=[t(\"i\",{class:\"fa-regular fa-arrow-right\",\"aria-hidden\":\"true\"},null,-1)])],8,Tt)):p(\"\",!0)])):p(\"\",!0),(n(!0),a(E,null,O(e.visibleColumns,v=>(n(),a(\"td\",{key:v.key,class:B(U(v))},[v.type===\"avatar\"?(n(),a(\"a\",{key:0,href:e.entity.urls.show,class:\"block avatar w-8 h-8 rounded-full cover-background\",style:te({backgroundImage:`url('${e.entity.images.thumb}')`}),title:e.entity.name},null,12,Pt)):v.type===\"name\"?(n(),a(\"a\",{key:1,href:e.entity.urls.show,class:\"text-link truncate\",\"data-toggle\":\"tooltip-ajax\",\"data-id\":e.entity.id,\"data-url\":e.entity.urls.tooltip},[e.depth>0?(n(),a(\"span\",{key:0,class:\"text-neutral-content mr-1\",innerHTML:H.value},null,8,Ct)):p(\"\",!0),t(\"span\",{innerHTML:e.entity.name},null,8,Mt)],8,Lt)):v.type===\"text\"?(n(),a(\"span\",{key:2,class:\"truncate\",innerHTML:e.entity[v.key]},null,8,$t)):v.type===\"icon\"?(n(),a(E,{key:3},[e.entity[v.key]?.icon?G((n(),a(\"i\",{key:0,class:B(e.entity[v.key].icon),\"aria-hidden\":\"true\"},null,2)),[[j,e.entity[v.key].tooltip]]):v.icons&&v.icons[e.entity[v.key]]?G((n(),a(\"i\",{key:1,class:B(v.icons[e.entity[v.key]].icon),\"aria-hidden\":\"true\"},null,2)),[[j,v.icons[e.entity[v.key]].tooltip]]):!v.icons&&e.entity[v.key]?G((n(),a(\"i\",{key:2,class:B(v.icon),\"aria-hidden\":\"true\"},null,2)),[[j,v.tooltip]]):p(\"\",!0)],64)):v.type===\"entity\"?(n(),a(E,{key:4},[I(v.key)?(n(),a(\"a\",{key:0,href:I(v.key).url,class:\"text-link truncate\",innerHTML:I(v.key).name},null,8,Ht)):p(\"\",!0)],64)):v.type===\"entities\"?(n(),a(E,{key:5},[e.entity[v.key]?.length?(n(),a(\"span\",St,[(n(!0),a(E,null,O(e.entity[v.key],(A,ee)=>(n(),a(E,{key:A.id},[t(\"a\",{href:A.url,class:\"text-link\",innerHTML:A.name},null,8,Ut),ee<e.entity[v.key].length-1?(n(),a(\"span\",Et,\", \")):p(\"\",!0)],64))),128))])):p(\"\",!0)],64)):v.type===\"tags\"?(n(),a(\"div\",Rt,[(n(!0),a(E,null,O(e.entity.tags,A=>(n(),a(\"a\",{key:A.id,href:A.urls.show,class:B(\"tag rounded-full text-xs badge cursor-pointer hover:shadow-xs \"+A.colour),style:te(A.colour_style||\"\"),innerHTML:A.shortname,title:A.name},null,14,Bt))),128))])):v.type===\"private\"?(n(),a(E,{key:7},[e.entity.is_private?(n(),a(\"i\",{key:0,class:\"fa-regular fa-lock\",\"aria-label\":e.i18n.is_private,title:e.i18n.is_private},null,8,jt)):p(\"\",!0)],64)):v.type===\"count\"?(n(),a(\"span\",{key:8,innerHTML:e.entity[v.key]},null,8,At)):v.type===\"calendar_date\"?(n(),a(E,{key:9},[e.entity.calendar_date?(n(),a(\"a\",{key:0,href:e.entity.calendar_date.url,class:\"text-link\",innerHTML:e.entity.calendar_date.date},null,8,Ot)):p(\"\",!0)],64)):v.type===\"explore\"?(n(),a(E,{key:10},[e.entity.explore?.url?(n(),a(\"a\",{key:0,href:e.entity.explore.url,target:\"_blank\",class:\"text-link\",title:v.tooltip},[...P[5]||(P[5]=[t(\"i\",{class:\"fa-regular fa-map\",\"aria-hidden\":\"true\"},null,-1)])],8,Dt)):e.entity.explore?.status===\"error\"?(n(),a(\"i\",{key:1,class:\"fa-regular fa-exclamation-triangle text-warning\",title:v.tooltip,\"aria-hidden\":\"true\"},null,8,It)):e.entity.explore?.status===\"running\"?(n(),a(\"i\",Nt)):p(\"\",!0)],64)):v.type===\"draw\"?(n(),a(E,{key:11},[e.entity.draw?.url?(n(),a(\"a\",{key:0,href:e.entity.draw.url,target:\"_blank\",class:\"text-link\",title:v.tooltip},[...P[6]||(P[6]=[t(\"i\",{class:\"fa-regular fa-chalkboard\",\"aria-hidden\":\"true\"},null,-1)])],8,Ft)):p(\"\",!0)],64)):p(\"\",!0)],2))),128)),t(\"td\",Kt,[t(\"div\",_t,[t(\"button\",{class:\"cursor-pointer rounded-full w-8 h-8 aspect-square hover:bg-base-200 flex items-center justify-center\",ref:v=>$.value=v,\"data-tree\":\"escape\"},[...P[7]||(P[7]=[t(\"i\",{class:\"fa-regular fa-ellipsis-v\",\"data-tree\":\"escape\",\"aria-hidden\":\"true\"},null,-1)])],512),t(\"div\",{ref_key:\"actionsMenuRef\",ref:i,class:\"flex flex-col gap-1\"},[t(\"a\",{href:e.entity.urls.relations,class:\"flex items-center gap-2 px-2 py-1.5 hover:bg-base-200 rounded-xl text-xs text-base-content\"},[P[8]||(P[8]=t(\"i\",{class:\"fa-regular fa-circle-nodes w-5 text-center text-neutral-content\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:e.i18n.relations},null,8,zt)],8,qt),e.features?.inventories?(n(),a(\"a\",{key:0,href:e.entity.urls.inventory,class:\"flex items-center gap-2 px-2 py-1.5 hover:bg-base-200 rounded-xl text-xs text-base-content\"},[P[9]||(P[9]=t(\"i\",{class:\"fa-regular fa-gem w-5 text-center text-neutral-content\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:e.i18n.inventory},null,8,Gt)],8,Vt)):p(\"\",!0),e.entity.can_edit?(n(),a(E,{key:1},[P[11]||(P[11]=t(\"hr\",{class:\"m-0\"},null,-1)),t(\"a\",{href:e.entity.urls.edit,class:\"flex items-center gap-2 px-2 py-1.5 hover:bg-base-200 rounded-xl text-xs text-base-content\"},[P[10]||(P[10]=t(\"i\",{class:\"fa-regular fa-pencil w-5 text-center text-neutral-content\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:e.i18n.edit},null,8,Jt)],8,Xt)],64)):p(\"\",!0)],512)])])],16,vt),d.value&&k.value.length?(n(),a(E,{key:0},[(n(!0),a(E,null,O(k.value,v=>(n(),J(_,{key:v.id,entity:v,\"visible-columns\":e.visibleColumns,selecting:e.selecting,nested:e.nested,i18n:e.i18n,features:e.features,depth:e.depth+1,\"max-depth\":e.maxDepth,\"show-expand-column\":e.showExpandColumn,\"on-toggle-child\":e.onToggleChild,onStartSelecting:P[3]||(P[3]=A=>s(\"startSelecting\",A))},null,8,[\"entity\",\"visible-columns\",\"selecting\",\"nested\",\"i18n\",\"features\",\"depth\",\"max-depth\",\"show-expand-column\",\"on-toggle-child\"]))),128)),W.value?(n(),a(\"tr\",Yt,[t(\"td\",{colspan:Z.value,class:\"text-center py-1\"},[t(\"button\",{class:\"btn2 btn-sm btn-ghost text-xs\",disabled:y.value,onClick:F},[y.value?(n(),a(\"i\",Zt)):p(\"\",!0),t(\"span\",{innerHTML:e.i18n.loadMore||\"Load more\"},null,8,en)],8,Wt)],8,Qt)])):p(\"\",!0)],64)):p(\"\",!0)],64)}}}),nn={class:\"w-full overflow-x-auto\"},an=[\"role\"],ln=[\"checked\"],sn={key:0,class:\"w-8\"},rn=[\"onClick\"],on=[\"innerHTML\"],un={key:1,class:\"fa-regular fa-sort text-neutral-content\",\"aria-hidden\":\"true\"},dn=[\"innerHTML\"],cn={key:0,class:\"adrow\"},fn=[\"colspan\",\"innerHTML\"],gn={key:0},yn=[\"colspan\",\"innerHTML\"],hn=Y({__name:\"EntityTable\",props:{entities:{},visibleColumns:{},selecting:{type:Boolean},allSelected:{type:Boolean},nested:{type:Boolean},i18n:{},entityType:{},features:{},ads:{},isOrdering:{type:Function},orderByIcon:{type:Function},adContent:{},onToggleChild:{type:Function}},emits:[\"orderBy\",\"toggleAll\",\"startSelecting\"],setup(e){const o=e,s=D(()=>{let d=o.visibleColumns.length+1;return d++,o.nested&&o.entityType?.is_nested&&d++,d}),r=d=>d.type===\"avatar\"?\"w-10\":d.type===\"name\"?\"dg-name\":d.type===\"private\"||d.type===\"icon\"||d.type===\"explore\"||d.type===\"draw\"?\"w-10 text-center\":\"hidden lg:table-cell\";return(d,k)=>(n(),a(\"div\",nn,[t(\"table\",{class:\"table table-striped table-entities mb-0 w-full bg-base-100 rounded-2xl\",role:e.nested?\"treegrid\":\"grid\"},[t(\"thead\",null,[t(\"tr\",null,[t(\"th\",{class:B([\"w-8\",e.selecting?\"\":\"hidden sm:table-cell\"])},[e.selecting?(n(),a(\"input\",{key:0,type:\"checkbox\",checked:e.allSelected,onChange:k[0]||(k[0]=g=>d.$emit(\"toggleAll\"))},null,40,ln)):p(\"\",!0)],2),e.nested&&e.entityType?.is_nested?(n(),a(\"th\",sn)):p(\"\",!0),(n(!0),a(E,null,O(e.visibleColumns,g=>(n(),a(\"th\",{key:g.key,class:B(r(g))},[g.sortable?(n(),a(\"button\",{key:0,onClick:y=>d.$emit(\"orderBy\",g.key,g.sortKey),class:\"text-link flex items-center gap-1\"},[t(\"span\",{innerHTML:g.label},null,8,on),e.isOrdering(g.sortKey||g.key)?(n(),a(\"i\",{key:0,class:B(e.orderByIcon(g.sortKey||g.key))},null,2)):(n(),a(\"i\",un))],8,rn)):(n(),a(\"span\",{key:1,innerHTML:g.label},null,8,dn))],2))),128)),k[2]||(k[2]=t(\"th\",{class:\"w-10\"},null,-1))])]),t(\"tbody\",null,[(n(!0),a(E,null,O(e.entities,(g,y)=>(n(),a(E,{key:g.id},[xe(tn,{entity:g,\"visible-columns\":e.visibleColumns,selecting:e.selecting,nested:e.nested,i18n:e.i18n,features:e.features,\"show-expand-column\":e.nested&&e.entityType?.is_nested,\"on-toggle-child\":e.onToggleChild,onStartSelecting:k[1]||(k[1]=T=>d.$emit(\"startSelecting\",T))},null,8,[\"entity\",\"visible-columns\",\"selecting\",\"nested\",\"i18n\",\"features\",\"show-expand-column\",\"on-toggle-child\"]),e.ads.enabled&&(y+1)%e.ads.frequency===0?(n(),a(\"tr\",cn,[t(\"td\",{colspan:s.value,class:\"adrow\",innerHTML:e.adContent},null,8,fn)])):p(\"\",!0)],64))),128)),e.entities.length===0?(n(),a(\"tr\",gn,[t(\"td\",{colspan:s.value,class:\"italic\",innerHTML:e.i18n.noResults},null,8,yn)])):p(\"\",!0)])],8,an)]))}});function pn(e){const o=x([]),s=x(null),r=x(null),d=x(\"\"),k=x(!0),g=x(!1),y=x(!1),T=x([]),$=x([]),i=x({enabled:!1,frequency:7}),m=R=>{o.value=[],s.value=R.entities,R.entities.data.forEach(C=>{o.value.push(C)}),d.value=R.csrf,T.value=R.columns??[],$.value=R.columnPreferences??[],i.value=R.ads??{enabled:!1,frequency:7}},h=R=>fetch(R).then(C=>C.json()).then(C=>C.error?(y.value=!0,C):(y.value=!1,m(C),C)).catch(()=>{y.value=!0}),H=()=>h(U()),U=()=>{const R=new URL(e.api,window.location.origin);return R.search=\"\",new URLSearchParams(window.location.search).forEach((K,L)=>{R.searchParams.append(L,K)}),R.toString()},I=R=>{g.value=!0;const C=q(U(),\"page\",String(R));return h(C).then(()=>{g.value=!1})},q=(R,C,K)=>{const L=new URL(R,window.location.origin);return L.searchParams.set(C,K),L.toString()};return{entities:o,entitiesData:s,parent:r,csrf:d,loading:k,paginating:g,apiError:y,columns:T,columnPreferences:$,ads:i,fetchEntities:h,loadInitial:H,loadPage:I,addToUrl:q,currentApiUrl:U}}function vn(e){const o=x(!1),s=x(new Set),r=()=>{o.value=!o.value,e.value.forEach(i=>{i.selected=!1}),s.value=new Set},d=()=>e.value.length>0&&e.value.every(i=>i.selected),k=()=>{if(!e.value.length)return;const i=!d();e.value.forEach(m=>{m.selected=i}),i||(s.value=new Set)},g=i=>{const m=new Set(s.value);m.has(i)?m.delete(i):m.add(i),s.value=m},y=()=>{const i=e.value.filter(m=>m.selected).map(m=>m.id);return[...new Set([...i,...s.value])]};return{selecting:o,toggleSelecting:r,toggleAll:k,allSelected:d,selectedEntityIds:y,toggleChildId:g,bulkDialog:(i,m)=>{m?._tippy?.hide();const h=y();if(h.length===0)return;const H=new URL(i,window.location.origin);h.forEach(U=>{H.searchParams.append(\"entities[]\",String(U))}),window.openDialog(\"primary-dialog\",H.toString())},bulkPrint:(i,m)=>{m?._tippy?.hide(),y().length!==0&&i?.submit()}}}function mn(e){const o=x({}),s=x(!1),r=i=>{o.value=i},d=()=>{const i=new URL(e.api,window.location.origin);return new URLSearchParams(window.location.search).forEach((h,H)=>{i.searchParams.set(H,h)}),i.toString()},k=(i,m)=>{s.value=!0;const h=m||i,H=new URL(d()),U=new URL(window.location.href);H.searchParams.delete(\"reset-filter\"),U.searchParams.delete(\"reset-filter\"),y(h)?(H.searchParams.set(\"order\",h),H.searchParams.set(\"desc\",\"1\"),U.searchParams.set(\"order\",h),U.searchParams.set(\"desc\",\"1\"),o.value={[h]:\"DESC\"}):g(h)?(H.searchParams.set(\"order\",\"clear\"),H.searchParams.delete(\"desc\"),U.searchParams.delete(\"order\"),U.searchParams.delete(\"desc\"),o.value={}):(H.searchParams.set(\"order\",h),H.searchParams.delete(\"desc\"),U.searchParams.set(\"order\",h),U.searchParams.delete(\"desc\"),o.value={[h]:\"ASC\"}),e.fetchEntities(H.toString()).then(()=>{s.value=!1}),window.history.pushState({},\"\",U)},g=i=>!!o.value[i],y=i=>o.value[i]===\"ASC\";return{order:o,ordering:s,setOrder:r,orderBy:k,isOrdering:g,isOrderingAscending:y,orderByClass:i=>{const m=\"flex items-center gap-2 px-2\";return g(i)?m+\" font-extrabold\":m},orderByIcon:i=>y(i)?\"fa-regular fa-arrow-down-a-z\":\"fa-regular fa-arrow-down-z-a\"}}function bn(e){const o=x(e.initialMode),s=()=>o.value===\"grid\",r=()=>{const k=new URL(e.api,window.location.origin);return new URLSearchParams(window.location.search).forEach((y,T)=>{k.searchParams.set(T,y)}),k.toString()};return{layout:o,isGrid:s,switchLayout:()=>{o.value=s()?\"table\":\"grid\";const k=e.addToUrl(r(),\"m\",o.value);e.fetchEntities(k);const g=new URL(window.location.href);g.searchParams.set(\"m\",o.value),window.history.pushState({},\"\",g),e.preferencesUrl&&fetch(e.preferencesUrl,{method:\"PATCH\",headers:{\"Content-Type\":\"application/json\",\"X-CSRF-TOKEN\":e.csrf},body:JSON.stringify({layout:o.value})})}}}function xn(e){const o=x(!0),s=x(!1),r=g=>{o.value=g},d=()=>{const g=new URL(e.api,window.location.origin);return new URLSearchParams(window.location.search).forEach((T,$)=>{g.searchParams.set($,T)}),g.toString()};return{nested:o,nesting:s,setNested:r,switchMode:()=>{s.value=!0,o.value=!o.value;const g=e.addToUrl(d(),\"n\",o.value?\"1\":\"0\");e.fetchEntities(g).then(()=>{s.value=!1});const y=new URL(window.location.href);y.searchParams.set(\"n\",o.value?\"1\":\"0\"),window.history.pushState({},\"\",y),e.preferencesUrl&&fetch(e.preferencesUrl,{method:\"PATCH\",headers:{\"Content-Type\":\"application/json\",\"X-CSRF-TOKEN\":e.csrf},body:JSON.stringify({nested:o.value})})}}}function kn(e){const o=x([]),s=x([]);let r=null;const d=(i,m)=>{o.value=i,s.value=m},k=D(()=>o.value.filter(i=>i.alwaysVisible||s.value.includes(i.key))),g=i=>o.value.find(h=>h.key===i)?.alwaysVisible?!0:s.value.includes(i),y=i=>{if(o.value.find(H=>H.key===i)?.alwaysVisible)return;const h=s.value.indexOf(i);h>-1?s.value.splice(h,1):s.value.push(i),$()},T=()=>{e.preferencesUrl&&fetch(e.preferencesUrl,{method:\"DELETE\",headers:{\"X-CSRF-TOKEN\":e.csrf}}).then(()=>{window.location.reload()})},$=()=>{e.preferencesUrl&&(r&&clearTimeout(r),r=setTimeout(()=>{fetch(e.preferencesUrl,{method:\"PATCH\",headers:{\"Content-Type\":\"application/json\",\"X-CSRF-TOKEN\":e.csrf},body:JSON.stringify({columns:s.value})})},500))};return{availableColumns:o,visibleColumnKeys:s,visibleColumns:k,setColumns:d,isColumnVisible:g,toggleColumn:y,resetToDefaults:T}}function wn(e){const o=x(25),s=x(e.isSubscriber),r=x(!1),d=x([]),k=x([]),g=h=>{o.value=h},y=h=>{s.value=h},T=(h,H)=>{d.value=h,k.value=H},$=h=>k.value.includes(h),i=()=>{const h=new URL(e.api,window.location.origin);return new URLSearchParams(window.location.search).forEach((U,I)=>{h.searchParams.set(I,U)}),h.toString()};return{perPage:o,isSubscriber:s,loading:r,perPageOptions:d,subscriberPerPageOptions:k,setPerPage:g,setSubscriber:y,setOptions:T,isSubscriberOnly:$,selectPerPage:h=>{if(!d.value.includes(h))return;if($(h)&&!s.value){window.openDialog(\"primary-dialog\",e.subscribeUrl);return}o.value=h;const H=e.addToUrl(e.addToUrl(i(),\"pp\",String(h)),\"page\",\"1\");r.value=!0,e.fetchEntities(H).finally(()=>{r.value=!1});const U=new URL(window.location.href);U.searchParams.set(\"pp\",String(h)),U.searchParams.delete(\"page\"),window.history.pushState({},\"\",U),e.preferencesUrl&&fetch(e.preferencesUrl,{method:\"PATCH\",headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\",\"X-CSRF-TOKEN\":e.csrf},body:JSON.stringify({per_page:h})})}}}const Tn={key:0,class:\"flex flex-col gap-4 w-full\"},Pn={class:\"flex gap-2 justify-between items-center\"},Ln=[\"innerHTML\"],Cn={class:\"flex gap-2 justify-between items-center flex-wrap\"},Mn={key:0,class:\"flex gap-2 items-center flex-wrap\"},$n=[\"innerHTML\"],Hn=[\"aria-label\",\"title\"],Sn=[\"innerHTML\"],Un={key:1,class:\"join\"},En=[\"innerHTML\"],Rn={class:\"rounded-full bg-primary text-primary-content px-1.5 text-xs font-bold leading-5\"},Bn=[\"title\"],jn=[\"title\"],An={key:1,class:\"flex gap-2 items-center flex-wrap\"},On={key:0,class:\"btn2 btn-disabled\",disabled:\"\"},Dn={key:1,class:\"flex items-center rounded-xl bg-base-200 overflow-hidden p-0.5 gap-0.5\"},In={key:2,class:\"flex items-center rounded-xl bg-base-200 overflow-hidden p-0.5 gap-0.5\"},Nn=[\"title\"],Fn=[\"innerHTML\"],Kn=[\"innerHTML\"],_n={key:4,class:\"join\"},qn=[\"href\"],zn=[\"innerHTML\"],Vn={key:0},Gn={key:2,class:\"flex gap-2 items-center flex-wrap w-full\"},Xn={class:\"rounded-full bg-primary text-primary-content px-3 py-1 text-xs font-bold\"},Jn=[\"innerHTML\"],Yn={key:0,class:\"join\"},Qn=[\"innerHTML\"],Wn={key:1,class:\"join\"},Zn=[\"innerHTML\"],ea=[\"innerHTML\"],ta={class:\"flex gap-1 items-start\"},na={key:0,class:\"flex flex-col gap-2 items-center justify-center w-full py-12 text-center text-neutral-content\"},aa=[\"innerHTML\"],la={key:0,class:\"flex items-center justify-end gap-1 h-12\"},sa={key:1,class:\"flex items-center\"},ia={key:1,class:\"flex flex-col gap-4 items-center justify-center mx-auto text-center\"},ra=[\"innerHTML\"],oa=[\"innerHTML\"],ua=[\"href\"],da=[\"innerHTML\"],ca={class:\"flex gap-4 items-center justify-center flex-wrap\"},fa=[\"href\"],ga=[\"innerHTML\"],ya=[\"href\"],ha=[\"innerHTML\"],pa=[\"innerHTML\"],va={key:0},ma=[\"innerHTML\"],ba={class:\"flex flex-wrap gap-1.5\"},xa=[\"onClick\"],ka=[\"innerHTML\"],wa=[\"innerHTML\"],Ta={class:\"flex gap-1.5\"},Pa=[\"onClick\"],La={key:0,class:\"fa-regular fa-gem ml-1\",\"aria-hidden\":\"true\"},Ca={key:1},Ma=[\"innerHTML\"],$a={class:\"flex flex-col gap-0.5\"},Ha=[\"onClick\"],Sa=[\"innerHTML\"],Ua=[\"innerHTML\"],Ea=[\"href\"],Ra=[\"innerHTML\"],Ba={key:0,class:\"m-0\"},ja={href:\"https://docs.kanka.io/en/latest/guides/templates.html\",class:\"px-2 py-2 hover:bg-base-200 rounded-xl flex items-center gap-1.5 transition-all duration-150 text-base-content text-xs\"},Aa=[\"innerHTML\"],Oa=[\"innerHTML\"],Da=[\"innerHTML\"],Ia=[\"innerHTML\"],Na=[\"innerHTML\"],Fa=[\"innerHTML\"],Ka=[\"innerHTML\"],_a=[\"action\"],qa=[\"value\"],za=[\"value\"],Va=Y({__name:\"EntityListing\",props:{api:{},module:{},mode:{}},setup(e){const o=e,s=x(null),r=x({}),d=x({}),k=x([]),g=x(0),y=x({}),T=x(!1),$=x({}),i=x({}),m=x(null),h=x(!0),H=x(null),U=x(),I=x(),q=x(),R=x(),C=x(),K=x(),L=x(),S=x(),f=pn({api:o.api}),M=vn(f.entities),Q={initialMode:o.mode,api:o.api,preferencesUrl:\"\",csrf:\"\",fetchEntities:c=>f.fetchEntities(c),addToUrl:f.addToUrl},W={api:o.api,preferencesUrl:\"\",csrf:\"\",fetchEntities:c=>f.fetchEntities(c),addToUrl:f.addToUrl},Z={preferencesUrl:\"\",csrf:\"\"},X={api:o.api,preferencesUrl:\"\",csrf:\"\",fetchEntities:c=>f.fetchEntities(c),addToUrl:f.addToUrl,subscribeUrl:\"\",isSubscriber:!1},F=mn({api:o.api,fetchEntities:c=>f.fetchEntities(c),addToUrl:f.addToUrl}),w=bn(Q),P=xn(W),_=kn(Z),j=wn(X),v=D(()=>f.columns.value.filter(c=>c.sortable&&c.label)),A=D(()=>f.columns.value.filter(c=>!c.alwaysVisible&&c.label)),ee=()=>s.value,ce=()=>{window.openDialog(\"datagrid-filters\",y.value.form)},Le=()=>{window.openDialog(\"primary-dialog\",d.value.bookmark)},Ce=()=>{window.location.href=y.value.clear},Me=async(c=1)=>{f.loadPage(c),H.value?.scrollIntoView({behavior:\"smooth\",block:\"start\"})},fe=(c,l)=>{F.orderBy(c,l)},$e=c=>{j.selectPerPage(c)},He=(c,l)=>{f.fetchEntities(l).then(b=>{f.parent.value=b.parent});const N=new URL(window.location.href);N.searchParams.set(\"parent_id\",String(c)),window.history.pushState({},\"\",N)},ge=c=>{M.toggleSelecting();const l=f.entities.value.find(N=>N.id===c);l?l.selected=!0:M.toggleChildId(c)},Se=()=>{const c=f.parent.value;if(!c)return;const l=new URL(window.location.href);c.parent_id?l.searchParams.set(\"parent_id\",String(c.parent_id)):l.searchParams.delete(\"parent_id\"),window.history.pushState({},\"\",l),f.fetchEntities(f.currentApiUrl()).then(N=>{f.parent.value=N.parent})};let ae=[];const ye=()=>{ae.forEach(c=>{const l=c.props.content;l instanceof Element&&L.value&&L.value.appendChild(l),c.destroy()}),ae=[]},le=(c,l,N=\"bottom\")=>{if(!c.value||!l.value)return;const b=Te(c.value,{content:l.value,theme:\"kanka-dropdown\",placement:N,interactive:!0,trigger:\"click\",allowHTML:!0,arrow:!0,zIndex:890});ae.push(b)},se=()=>{ye(),le(U,I,\"bottom-end\"),le(q,R,\"bottom-end\"),le(C,K,\"bottom-end\")};ue(()=>{f.loadInitial().then(c=>{if(!c){h.value=!1;return}g.value=c.filters?.count??0,y.value=c.filters?.urls??{},i.value=c.i18n,f.parent.value=c.parent,k.value=c.templates,s.value=c.permissions,T.value=c.bookmarkable,$.value=c.features??{},d.value=c.urls,r.value=c.entityType,m.value=c.emptyState??null,P.setNested(c.nested),F.setOrder(c.order),_.setColumns(c.columns??[],c.columnPreferences??[]),c.urls?.preferences&&(Q.preferencesUrl=c.urls.preferences,Q.csrf=c.csrf,W.preferencesUrl=c.urls.preferences,W.csrf=c.csrf,Z.preferencesUrl=c.urls.preferences,Z.csrf=c.csrf),j.setPerPage(c.preferences?.per_page??25),j.setSubscriber(c.subscription?.isSubscriber??!1),j.setOptions(c.perPageOptions??[],c.subscriberPerPageOptions??[]),c.urls?.preferences&&(X.preferencesUrl=c.urls.preferences,X.csrf=c.csrf,X.subscribeUrl=c.subscription?.url??\"\"),h.value=!1}),window.addEventListener(\"keydown\",he)}),ne(h,c=>{c||re(()=>{se()})}),ne(()=>M.selecting.value,()=>{re(se)}),ne(()=>w.layout.value,()=>{re(se)});const he=c=>{c.key===\"Escape\"&&M.selecting.value&&M.toggleSelecting()};return ke(()=>{window.removeEventListener(\"keydown\",he),ye()}),Ee(()=>{window.ajaxTooltip?.()}),(c,l)=>{const N=we(\"tippy\");return h.value?(n(),a(\"div\",Tn,[t(\"div\",Pn,[t(\"h1\",{class:\"grow text-2xl category-title truncate\",innerHTML:o.module},null,8,Ln),l[17]||(l[17]=t(\"div\",{class:\"flex gap-2 items-center\"},[t(\"button\",{class:\"btn2 btn-disabled\",disabled:\"disabled\"},[t(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"})])],-1))]),l[18]||(l[18]=t(\"div\",{class:\"flex gap-2 items-start\"},[t(\"div\",{class:\"rounded shadow-xs w-[47%] xs:w-[25%] sm:w-48 aspect-square flex items-center justify-center text-xl text-neutral-content\"},[t(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"})])],-1))])):(n(),a(\"div\",{key:1,class:\"flex flex-col gap-4 w-full\",ref_key:\"listingRef\",ref:H},[t(\"div\",Cn,[u(M).selecting.value?p(\"\",!0):(n(),a(\"div\",Mn,[t(\"h1\",{class:\"text-2xl category-title truncate\",innerHTML:o.module},null,8,$n),!u(M).selecting.value&&g.value===0?(n(),a(\"button\",{key:0,class:\"btn2 btn-sm\",\"aria-label\":i.value.filters,title:i.value.filters,onClick:ce},[l[19]||(l[19]=t(\"i\",{class:\"fa-regular fa-filter\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{class:\"hidden sm:inline\",innerHTML:i.value.filters},null,8,Sn)],8,Hn)):!u(M).selecting.value&&g.value>0?(n(),a(\"div\",Un,[t(\"button\",{class:\"btn2 btn-sm join-item\",onClick:ce},[l[20]||(l[20]=t(\"i\",{class:\"fa-regular fa-filter\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{class:\"hidden sm:inline\",innerHTML:i.value.filters},null,8,En),t(\"span\",Rn,V(g.value),1)]),T.value?(n(),a(\"button\",{key:0,class:\"btn2 btn-sm join-item\",title:i.value.bookmark,onClick:Le},[...l[21]||(l[21]=[t(\"i\",{class:\"fa-regular fa-bookmark\",\"aria-hidden\":\"true\"},null,-1)])],8,Bn)):p(\"\",!0),t(\"button\",{class:\"btn2 btn-sm join-item\",title:i.value.clearFilters,onClick:Ce},[...l[22]||(l[22]=[t(\"i\",{class:\"fa-regular fa-times\",\"aria-hidden\":\"true\"},null,-1)])],8,jn)])):p(\"\",!0)])),u(M).selecting.value?(n(),a(\"div\",Gn,[t(\"span\",Xn,V(u(M).selectedEntityIds().length)+\" \"+V(i.value.selected),1),t(\"button\",{onClick:l[5]||(l[5]=b=>u(M).toggleAll()),class:\"btn2 btn-sm\",innerHTML:i.value.selectAll},null,8,Jn),l[37]||(l[37]=t(\"div\",{class:\"flex-1\"},null,-1)),s.value.admin?(n(),a(\"div\",Yn,[t(\"button\",{class:\"btn2 btn-primary btn-sm join-item\",onClick:l[6]||(l[6]=b=>u(M).bulkDialog(d.value.batch,C.value))},[l[32]||(l[32]=t(\"i\",{class:\"fa-regular fa-pencil\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{class:\"hidden md:inline\",innerHTML:i.value.bulkEdit},null,8,Qn)]),t(\"div\",null,[t(\"button\",{ref_key:\"actionsBtn\",ref:C,type:\"button\",class:\"btn2 btn-primary btn-sm join-item\",\"aria-expanded\":\"false\",\"aria-label\":\"More bulk actions\",\"aria-haspopup\":\"menu\"},[...l[33]||(l[33]=[t(\"i\",{class:\"fa-regular fa-caret-down\",\"aria-hidden\":\"true\"},null,-1)])],512)])])):(n(),a(\"div\",Wn,[t(\"button\",{class:\"btn2 btn-primary join-item\",onClick:l[7]||(l[7]=b=>u(M).bulkPrint(S.value,C.value))},[l[34]||(l[34]=t(\"i\",{class:\"fa-regular fa-print\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{class:\"hidden md:inline\",innerHTML:i.value.bulkPrint},null,8,Zn)]),t(\"div\",null,[t(\"button\",{ref_key:\"actionsBtn\",ref:C,type:\"button\",class:\"btn2 btn-primary join-item\",\"aria-expanded\":\"false\",\"aria-label\":\"More bulk actions\",\"aria-haspopup\":\"menu\"},[...l[35]||(l[35]=[t(\"i\",{class:\"fa-regular fa-caret-down\",\"aria-hidden\":\"true\"},null,-1)])],512)])])),t(\"button\",{onClick:l[8]||(l[8]=b=>u(M).toggleSelecting()),class:\"btn2 btn-ghost btn-sm\"},[l[36]||(l[36]=t(\"i\",{class:\"fa-regular fa-times\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:i.value.done},null,8,ea)])])):(n(),a(\"div\",An,[u(F).ordering.value||u(j).loading.value?(n(),a(\"button\",On,[...l[23]||(l[23]=[t(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):p(\"\",!0),r.value.is_nested&&!u(F).ordering.value?(n(),a(\"div\",Dn,[G((n(),a(\"button\",{onClick:l[0]||(l[0]=b=>u(P).switchMode()),class:B([\"flex items-center justify-center rounded-lg px-2 py-2 text-sm transition-all\",u(P).nested.value?\"bg-base-100 text-base-content shadow-xs\":\"text-neutral-content cursor-pointer hover:text-base-content\"])},[...l[24]||(l[24]=[t(\"i\",{class:\"fa-regular fa-layer-group\",\"aria-hidden\":\"true\"},null,-1)])],2)),[[N,i.value.nest]]),G((n(),a(\"button\",{onClick:l[1]||(l[1]=b=>u(P).switchMode()),class:B([\"flex items-center justify-center rounded-lg px-2 py-2 text-sm transition-all\",u(P).nested.value?\"text-neutral-content cursor-pointer hover:text-base-content\":\"bg-base-100 text-base-content shadow-xs\"])},[...l[25]||(l[25]=[t(\"i\",{class:\"fa-regular fa-boxes-stacked\",\"aria-hidden\":\"true\"},null,-1)])],2)),[[N,i.value.flatten]])])):p(\"\",!0),r.value.has_table&&!u(F).ordering.value?(n(),a(\"div\",In,[G((n(),a(\"button\",{onClick:l[2]||(l[2]=b=>!u(w).isGrid()&&u(w).switchLayout()),class:B([\"flex items-center justify-center rounded-lg px-2 py-2 text-sm transition-all\",u(w).isGrid()?\"bg-base-100 text-base-content shadow-xs\":\"text-neutral-content cursor-pointer hover:text-base-content\"])},[...l[26]||(l[26]=[t(\"i\",{class:\"fa-regular fa-grid-2\",\"aria-hidden\":\"true\"},null,-1)])],2)),[[N,i.value.layout_grid]]),G((n(),a(\"button\",{onClick:l[3]||(l[3]=b=>u(w).isGrid()&&u(w).switchLayout()),class:B([\"flex items-center justify-center rounded-lg px-2 py-2 text-sm transition-all\",u(w).isGrid()?\"text-neutral-content cursor-pointer hover:text-base-content\":\"bg-base-100 text-base-content shadow-xs\"])},[...l[27]||(l[27]=[t(\"i\",{class:\"fa-regular fa-list-ul\",\"aria-hidden\":\"true\"},null,-1)])],2)),[[N,i.value.layout_table]])])):p(\"\",!0),t(\"div\",null,[t(\"button\",{ref_key:\"displayBtn\",ref:U,class:\"btn2 btn-sm\",title:i.value.display},[l[28]||(l[28]=t(\"i\",{class:\"fa-regular fa-gear\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{class:\"hidden sm:inline\",innerHTML:i.value.display},null,8,Fn)],8,Nn)]),ee()?(n(),a(\"button\",{key:3,onClick:l[4]||(l[4]=b=>u(M).toggleSelecting()),class:\"btn2 hidden btn-sm sm:flex\"},[l[29]||(l[29]=t(\"i\",{class:\"fa-regular fa-check-square\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{class:\"hidden sm:inline\",innerHTML:i.value.select},null,8,Kn)])):p(\"\",!0),ee()&&s.value.create?(n(),a(\"div\",_n,[t(\"a\",{href:d.value.create,class:\"btn2 btn-primary btn-sm join-item btn-new-entity\"},[l[30]||(l[30]=t(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{class:\"hidden md:inline\",innerHTML:r.value.singular},null,8,zn)],8,qn),s.value.template?(n(),a(\"div\",Vn,[t(\"button\",{ref_key:\"templateBtn\",ref:q,type:\"button\",class:\"btn2 btn-primary btn-sm join-item\",\"aria-expanded\":\"false\",\"aria-label\":\"Create from template\",\"aria-haspopup\":\"menu\"},[...l[31]||(l[31]=[t(\"i\",{class:\"fa-regular fa-caret-down\",\"aria-hidden\":\"true\"},null,-1)])],512)])):p(\"\",!0)])):p(\"\",!0)]))]),t(\"div\",ta,[u(f).apiError.value?(n(),a(\"div\",na,[l[38]||(l[38]=t(\"i\",{class:\"fa-regular fa-triangle-exclamation text-2xl\",\"aria-hidden\":\"true\"},null,-1)),t(\"p\",{innerHTML:i.value.loadError||\"Something went wrong loading this list. Please try refreshing the page.\"},null,8,aa)])):u(w).isGrid()?(n(),J(pt,{key:1,entities:u(f).entities.value,parent:u(f).parent.value,selecting:u(M).selecting.value,nested:u(P).nested.value,i18n:i.value,ads:u(f).ads.value,onNavigate:He,onBack:Se,onStartSelecting:ge},null,8,[\"entities\",\"parent\",\"selecting\",\"nested\",\"i18n\",\"ads\"])):(n(),J(hn,{key:2,entities:u(f).entities.value,\"visible-columns\":u(_).visibleColumns.value,selecting:u(M).selecting.value,\"all-selected\":u(M).allSelected(),nested:u(P).nested.value,i18n:i.value,\"entity-type\":r.value,features:$.value,ads:u(f).ads.value,\"is-ordering\":u(F).isOrdering,\"order-by-icon\":u(F).orderByIcon,\"on-toggle-child\":u(M).toggleChildId,onOrderBy:fe,onToggleAll:l[9]||(l[9]=b=>u(M).toggleAll()),onStartSelecting:ge},null,8,[\"entities\",\"visible-columns\",\"selecting\",\"all-selected\",\"nested\",\"i18n\",\"entity-type\",\"features\",\"ads\",\"is-ordering\",\"order-by-icon\",\"on-toggle-child\"]))]),(u(f).entitiesData.value?.meta.last_page??1)>1?(n(),a(\"div\",la,[u(f).paginating.value?(n(),a(\"div\",sa,[...l[39]||(l[39]=[t(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):(n(),J(u(Ge),{key:0,data:u(f).entitiesData.value,limit:2,itemClasses:[\"bg-base-200\",\"text-base-content\",\"border-none\",\"hover:bg-base-300\"],activeClasses:[\"bg-base-100\",\"border-none\",\"text-base-content\"],onPaginationChangePage:Me},null,8,[\"data\"]))])):p(\"\",!0),u(f).entities.value.length===0&&m.value&&!u(f).apiError.value?(n(),a(\"div\",ia,[t(\"h2\",{innerHTML:m.value.title},null,8,ra),r.value.is_standard?(n(),a(\"p\",{key:0,class:\"help-block max-w-sm\",innerHTML:m.value.helper},null,8,oa)):p(\"\",!0),ee()&&s.value.create?(n(),a(\"a\",{key:1,href:d.value.create,class:\"btn2 btn-primary mb-2\"},[l[40]||(l[40]=t(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:r.value.singular},null,8,da)],8,ua)):p(\"\",!0),t(\"div\",ca,[t(\"a\",{href:m.value.publicUrl,class:\"text-link flex gap-1 items-center\"},[l[41]||(l[41]=t(\"i\",{class:\"fa-regular fa-sparkles\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:m.value.public},null,8,ga)],8,fa),r.value.is_standard?(n(),a(\"a\",{key:0,href:m.value.docsUrl,class:\"text-link flex gap-1 items-center\",target:\"_blank\"},[l[42]||(l[42]=t(\"i\",{class:\"fa-regular fa-book\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:m.value.learn},null,8,ha)],8,ya)):p(\"\",!0)])])):u(f).entities.value.length===0&&!u(f).apiError.value?(n(),a(\"p\",{key:2,class:\"help-text italic\",innerHTML:i.value.noResults},null,8,pa)):p(\"\",!0),t(\"div\",{ref_key:\"hiddenMenus\",ref:L,style:{display:\"none\"}},[t(\"div\",{ref_key:\"displayMenu\",ref:I,class:\"flex flex-col gap-3 p-1 min-w-56\"},[v.value.length>0?(n(),a(\"div\",va,[t(\"div\",{class:\"text-xs uppercase tracking-wide text-neutral-content px-1 mb-1.5\",innerHTML:i.value.sortBy},null,8,ma),t(\"div\",ba,[(n(!0),a(E,null,O(v.value,b=>(n(),a(\"button\",{key:b.key,onClick:pe=>fe(b.key,b.sortKey),class:B([\"px-2.5 py-1 rounded-full text-xs border transition-all cursor-pointer\",u(F).isOrdering(b.sortKey||b.key)?\"bg-primary text-primary-content border-primary font-semibold\":\"bg-base-200 border-base-300 text-base-content hover:border-primary\"])},[u(F).isOrdering(b.sortKey||b.key)?(n(),a(\"i\",{key:0,class:B([u(F).orderByIcon(b.sortKey||b.key),\"mr-1\"])},null,2)):p(\"\",!0),t(\"span\",{innerHTML:b.label},null,8,ka)],10,xa))),128))])])):p(\"\",!0),t(\"div\",null,[t(\"div\",{class:\"text-xs uppercase tracking-wide text-neutral-content px-1 mb-1.5\",innerHTML:i.value.perPage},null,8,wa),t(\"div\",Ta,[(n(!0),a(E,null,O(u(j).perPageOptions.value,b=>(n(),a(\"button\",{key:b,onClick:pe=>$e(b),class:B([\"px-3 py-1 rounded-md text-xs border transition-all\",[u(j).perPage.value===b?\"bg-primary text-primary-content border-primary font-semibold\":\"bg-base-200 border-base-300 text-base-content hover:border-primary\",u(j).isSubscriberOnly(b)&&!u(j).isSubscriber.value?\"opacity-60\":\"\"]])},[Re(V(b),1),u(j).isSubscriberOnly(b)&&!u(j).isSubscriber.value?(n(),a(\"i\",La)):p(\"\",!0)],10,Pa))),128))])]),!u(w).isGrid()&&r.value.has_table&&A.value.length>0?(n(),a(\"div\",Ca,[l[44]||(l[44]=t(\"hr\",{class:\"border-base-300 -mx-1 mb-3\"},null,-1)),t(\"div\",{class:\"text-xs uppercase tracking-wide text-neutral-content px-1 mb-1.5\",innerHTML:i.value.columns},null,8,Ma),t(\"div\",$a,[(n(!0),a(E,null,O(A.value,b=>(n(),a(\"div\",{key:b.key,class:B([\"px-2 py-1.5 hover:bg-base-200 rounded-lg flex items-center justify-between gap-2 text-xs cursor-pointer text-base-content\",u(_).isColumnVisible(b.key)?\"text-primary\":\"\"]),onClick:pe=>u(_).toggleColumn(b.key)},[t(\"span\",{innerHTML:b.label},null,8,Sa),t(\"i\",{class:B(u(_).isColumnVisible(b.key)?\"fa-regular fa-check text-primary\":\"fa-regular fa-circle text-neutral-content\")},null,2)],10,Ha))),128))]),t(\"button\",{onClick:l[10]||(l[10]=b=>u(_).resetToDefaults()),class:\"mt-1.5 px-2 py-1.5 hover:bg-base-200 rounded-lg flex items-center gap-2 text-xs text-base-content w-full\"},[l[43]||(l[43]=t(\"i\",{class:\"fa-regular fa-rotate-left\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:i.value.resetDefaults},null,8,Ua)])])):p(\"\",!0)],512),t(\"div\",{ref_key:\"templateMenu\",ref:R,class:\"flex flex-col gap-1\"},[(n(!0),a(E,null,O(k.value,b=>(n(),a(\"a\",{href:b.url,key:b.id,class:\"px-2 py-2 hover:bg-base-200 rounded-xl flex items-center gap-1.5 text-xs transition-all duration-150 text-base-content\"},[l[45]||(l[45]=t(\"i\",{class:\"fa-regular fa-star text-neutral-content w-5\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:b.name},null,8,Ra)],8,Ea))),128)),k.value.length>0?(n(),a(\"hr\",Ba)):p(\"\",!0),t(\"a\",ja,[l[46]||(l[46]=t(\"i\",{class:\"fa-regular fa-external-link text-neutral-content w-5\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{class:\"text-nowrap\",innerHTML:i.value.templates},null,8,Aa)])],512),s.value?(n(),a(\"div\",{key:0,ref_key:\"actionsMenu\",ref:K,class:\"flex flex-col gap-1\"},[s.value?.admin?(n(),a(\"button\",{key:0,onClick:l[11]||(l[11]=b=>u(M).bulkDialog(d.value.permissions,C.value)),class:\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"},[l[47]||(l[47]=t(\"i\",{class:\"fa-regular fa-lock\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:i.value.bulkPermissions},null,8,Oa)])):p(\"\",!0),s.value?.admin?(n(),a(\"button\",{key:1,onClick:l[12]||(l[12]=b=>u(M).bulkDialog(d.value.transform,C.value)),class:\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"},[l[48]||(l[48]=t(\"i\",{class:\"fa-regular fa-exchange-alt\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:i.value.bulkTransform},null,8,Da)])):p(\"\",!0),t(\"button\",{onClick:l[13]||(l[13]=b=>u(M).bulkDialog(d.value.copy,C.value)),class:\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"},[l[49]||(l[49]=t(\"i\",{class:\"fa-regular fa-clone\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:i.value.bulkCopy},null,8,Ia)]),s.value?.admin?(n(),a(\"button\",{key:2,onClick:l[14]||(l[14]=b=>u(M).bulkDialog(d.value.template,C.value)),class:\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"},[l[50]||(l[50]=t(\"i\",{class:\"fa-regular fa-table\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:i.value.bulkTemplate},null,8,Na)])):p(\"\",!0),s.value?.admin?(n(),a(\"button\",{key:3,onClick:l[15]||(l[15]=b=>u(M).bulkPrint(S.value,C.value)),class:\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"},[l[51]||(l[51]=t(\"i\",{class:\"fa-regular fa-print\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:i.value.bulkPrint},null,8,Fa)])):p(\"\",!0),s.value?.delete?(n(),a(\"button\",{key:4,onClick:l[16]||(l[16]=b=>u(M).bulkDialog(d.value.delete,C.value)),class:\"flex items-center gap-2 px-2 py-1 cursor-pointer text-error-content hover:bg-error rounded\"},[l[52]||(l[52]=t(\"i\",{class:\"fa-regular fa-trash-can\",\"aria-hidden\":\"true\"},null,-1)),t(\"span\",{innerHTML:i.value.bulkDelete},null,8,Ka)])):p(\"\",!0)],512)):p(\"\",!0)],512),t(\"form\",{method:\"POST\",action:d.value.print,ref_key:\"printForm\",ref:S},[(n(!0),a(E,null,O(u(M).selectedEntityIds(),b=>(n(),a(\"input\",{type:\"hidden\",name:\"model[]\",value:b,key:b},null,8,qa))),128)),t(\"input\",{type:\"hidden\",name:\"_token\",value:u(f).csrf.value},null,8,za)],8,_a)],512))}}}),de=Be({});de.use(je,{theme:\"kanka\"});de.component(\"entities-explorer\",Va);de.mount(\"#entities-explorer\");\n"
  },
  {
    "path": "public/build/assets/family-tree-vue-BhAkMdmq.js",
    "content": "import{f as z_,K as U_,g as Y_,G as O_,E as We,o as R,c as O,a as b,N as F_,h as jt,n as Be,z as Nr,i as T_,k as Gt,d as Pe,t as I,b as G,q as Oi,x as N_,F as Qt,r as Mr,j as qe,w as Wt,C as Ve,D as D_,m as so,p as ao,y as M_,e as L_}from\"./vendor-tiptap-D5xFoo7B.js\";import{a as Ie}from\"./index-D5GkNzM3.js\";import{_ as ve}from\"./_plugin-vue_export-helper-DlAUqK2U.js\";function W_(c){return{all:c=c||new Map,on:function(l,n){var _=c.get(l);_?_.push(n):c.set(l,[n])},off:function(l,n){var _=c.get(l);_&&(n?_.splice(_.indexOf(n)>>>0,1):c.set(l,[]))},emit:function(l,n){var _=c.get(l);_&&_.slice().map(function(g){g(n)}),(_=c.get(\"*\"))&&_.slice().map(function(g){g(l,n)})}}}var P_=Object.defineProperty,I_=(c,l,n)=>l in c?P_(c,l,{enumerable:!0,configurable:!0,writable:!0,value:n}):c[l]=n,hr=(c,l,n)=>(I_(c,typeof l!=\"symbol\"?l+\"\":l,n),n),Dr=typeof globalThis<\"u\"?globalThis:typeof window<\"u\"?window:typeof global<\"u\"?global:typeof self<\"u\"?self:{},Fi={exports:{}};Fi.exports;(function(c,l){(function(){var n,_=\"4.17.21\",g=200,m=\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\",N=\"Expected a function\",tt=\"Invalid `variable` option passed into `_.template`\",z=\"__lodash_hash_undefined__\",k=500,$t=\"__lodash_placeholder__\",te=1,Lr=2,Ut=4,oe=1,pt=2,dt=1,ye=2,Wr=4,mt=8,Xe=16,Pt=32,Re=64,ot=128,gt=256,dr=512,Je=30,Ke=\"...\",Ti=800,Ni=16,Ze=1,Di=2,Se=3,It=1/0,ee=9007199254740991,C=17976931348623157e292,B=NaN,Q=4294967295,Ht=Q-1,ze=Q>>>1,Mi=[[\"ary\",ot],[\"bind\",dt],[\"bindKey\",ye],[\"curry\",mt],[\"curryRight\",Xe],[\"flip\",dr],[\"partial\",Pt],[\"partialRight\",Re],[\"rearg\",gt]],je=\"[object Arguments]\",Pr=\"[object Array]\",Vs=\"[object AsyncFunction]\",gr=\"[object Boolean]\",_r=\"[object Date]\",Bs=\"[object DOMException]\",Ir=\"[object Error]\",Hr=\"[object Function]\",lo=\"[object GeneratorFunction]\",Vt=\"[object Map]\",vr=\"[object Number]\",qs=\"[object Null]\",ue=\"[object Object]\",co=\"[object Promise]\",Js=\"[object Proxy]\",yr=\"[object RegExp]\",Bt=\"[object Set]\",pr=\"[object String]\",Vr=\"[object Symbol]\",Ks=\"[object Undefined]\",mr=\"[object WeakMap]\",Zs=\"[object WeakSet]\",wr=\"[object ArrayBuffer]\",Ge=\"[object DataView]\",Li=\"[object Float32Array]\",Wi=\"[object Float64Array]\",Pi=\"[object Int8Array]\",Ii=\"[object Int16Array]\",Hi=\"[object Int32Array]\",Vi=\"[object Uint8Array]\",Bi=\"[object Uint8ClampedArray]\",qi=\"[object Uint16Array]\",Ji=\"[object Uint32Array]\",js=/\\b__p \\+= '';/g,Gs=/\\b(__p \\+=) '' \\+/g,Qs=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,fo=/&(?:amp|lt|gt|quot|#39);/g,ho=/[&<>\"']/g,$s=RegExp(fo.source),ta=RegExp(ho.source),ea=/<%-([\\s\\S]+?)%>/g,ra=/<%([\\s\\S]+?)%>/g,go=/<%=([\\s\\S]+?)%>/g,ia=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,na=/^\\w*$/,oa=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,Ki=/[\\\\^$.*+?()[\\]{}|]/g,ua=RegExp(Ki.source),Zi=/^\\s+/,sa=/\\s/,aa=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,la=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ca=/,? & /,fa=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ha=/[()=,{}\\[\\]\\/\\s]/,da=/\\\\(\\\\)?/g,ga=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,_o=/\\w*$/,_a=/^[-+]0x[0-9a-f]+$/i,va=/^0b[01]+$/i,ya=/^\\[object .+?Constructor\\]$/,pa=/^0o[0-7]+$/i,ma=/^(?:0|[1-9]\\d*)$/,wa=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,Br=/($^)/,xa=/['\\n\\r\\u2028\\u2029\\\\]/g,qr=\"\\\\ud800-\\\\udfff\",ba=\"\\\\u0300-\\\\u036f\",ka=\"\\\\ufe20-\\\\ufe2f\",Ca=\"\\\\u20d0-\\\\u20ff\",vo=ba+ka+Ca,yo=\"\\\\u2700-\\\\u27bf\",po=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ea=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",Aa=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",Xa=\"\\\\u2000-\\\\u206f\",Ra=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",mo=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",wo=\"\\\\ufe0e\\\\ufe0f\",xo=Ea+Aa+Xa+Ra,ji=\"['’]\",Sa=\"[\"+qr+\"]\",bo=\"[\"+xo+\"]\",Jr=\"[\"+vo+\"]\",ko=\"\\\\d+\",za=\"[\"+yo+\"]\",Co=\"[\"+po+\"]\",Eo=\"[^\"+qr+xo+ko+yo+po+mo+\"]\",Gi=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Ua=\"(?:\"+Jr+\"|\"+Gi+\")\",Ao=\"[^\"+qr+\"]\",Qi=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",$i=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Qe=\"[\"+mo+\"]\",Xo=\"\\\\u200d\",Ro=\"(?:\"+Co+\"|\"+Eo+\")\",Ya=\"(?:\"+Qe+\"|\"+Eo+\")\",So=\"(?:\"+ji+\"(?:d|ll|m|re|s|t|ve))?\",zo=\"(?:\"+ji+\"(?:D|LL|M|RE|S|T|VE))?\",Uo=Ua+\"?\",Yo=\"[\"+wo+\"]?\",Oa=\"(?:\"+Xo+\"(?:\"+[Ao,Qi,$i].join(\"|\")+\")\"+Yo+Uo+\")*\",Fa=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Ta=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",Oo=Yo+Uo+Oa,Na=\"(?:\"+[za,Qi,$i].join(\"|\")+\")\"+Oo,Da=\"(?:\"+[Ao+Jr+\"?\",Jr,Qi,$i,Sa].join(\"|\")+\")\",Ma=RegExp(ji,\"g\"),La=RegExp(Jr,\"g\"),tn=RegExp(Gi+\"(?=\"+Gi+\")|\"+Da+Oo,\"g\"),Wa=RegExp([Qe+\"?\"+Co+\"+\"+So+\"(?=\"+[bo,Qe,\"$\"].join(\"|\")+\")\",Ya+\"+\"+zo+\"(?=\"+[bo,Qe+Ro,\"$\"].join(\"|\")+\")\",Qe+\"?\"+Ro+\"+\"+So,Qe+\"+\"+zo,Ta,Fa,ko,Na].join(\"|\"),\"g\"),Pa=RegExp(\"[\"+Xo+qr+vo+wo+\"]\"),Ia=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Ha=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],Va=-1,j={};j[Li]=j[Wi]=j[Pi]=j[Ii]=j[Hi]=j[Vi]=j[Bi]=j[qi]=j[Ji]=!0,j[je]=j[Pr]=j[wr]=j[gr]=j[Ge]=j[_r]=j[Ir]=j[Hr]=j[Vt]=j[vr]=j[ue]=j[yr]=j[Bt]=j[pr]=j[mr]=!1;var Z={};Z[je]=Z[Pr]=Z[wr]=Z[Ge]=Z[gr]=Z[_r]=Z[Li]=Z[Wi]=Z[Pi]=Z[Ii]=Z[Hi]=Z[Vt]=Z[vr]=Z[ue]=Z[yr]=Z[Bt]=Z[pr]=Z[Vr]=Z[Vi]=Z[Bi]=Z[qi]=Z[Ji]=!0,Z[Ir]=Z[Hr]=Z[mr]=!1;var Ba={À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"},qa={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},Ja={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"},Ka={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},Za=parseFloat,ja=parseInt,Fo=typeof Dr==\"object\"&&Dr&&Dr.Object===Object&&Dr,Ga=typeof self==\"object\"&&self&&self.Object===Object&&self,lt=Fo||Ga||Function(\"return this\")(),en=l&&!l.nodeType&&l,Ue=en&&!0&&c&&!c.nodeType&&c,To=Ue&&Ue.exports===en,rn=To&&Fo.process,Yt=(function(){try{var h=Ue&&Ue.require&&Ue.require(\"util\").types;return h||rn&&rn.binding&&rn.binding(\"util\")}catch{}})(),No=Yt&&Yt.isArrayBuffer,Do=Yt&&Yt.isDate,Mo=Yt&&Yt.isMap,Lo=Yt&&Yt.isRegExp,Wo=Yt&&Yt.isSet,Po=Yt&&Yt.isTypedArray;function Ct(h,y,v){switch(v.length){case 0:return h.call(y);case 1:return h.call(y,v[0]);case 2:return h.call(y,v[0],v[1]);case 3:return h.call(y,v[0],v[1],v[2])}return h.apply(y,v)}function Qa(h,y,v,A){for(var F=-1,V=h==null?0:h.length;++F<V;){var ut=h[F];y(A,ut,v(ut),h)}return A}function Ot(h,y){for(var v=-1,A=h==null?0:h.length;++v<A&&y(h[v],v,h)!==!1;);return h}function $a(h,y){for(var v=h==null?0:h.length;v--&&y(h[v],v,h)!==!1;);return h}function Io(h,y){for(var v=-1,A=h==null?0:h.length;++v<A;)if(!y(h[v],v,h))return!1;return!0}function pe(h,y){for(var v=-1,A=h==null?0:h.length,F=0,V=[];++v<A;){var ut=h[v];y(ut,v,h)&&(V[F++]=ut)}return V}function Kr(h,y){var v=h==null?0:h.length;return!!v&&$e(h,y,0)>-1}function nn(h,y,v){for(var A=-1,F=h==null?0:h.length;++A<F;)if(v(y,h[A]))return!0;return!1}function $(h,y){for(var v=-1,A=h==null?0:h.length,F=Array(A);++v<A;)F[v]=y(h[v],v,h);return F}function me(h,y){for(var v=-1,A=y.length,F=h.length;++v<A;)h[F+v]=y[v];return h}function on(h,y,v,A){var F=-1,V=h==null?0:h.length;for(A&&V&&(v=h[++F]);++F<V;)v=y(v,h[F],F,h);return v}function tl(h,y,v,A){var F=h==null?0:h.length;for(A&&F&&(v=h[--F]);F--;)v=y(v,h[F],F,h);return v}function un(h,y){for(var v=-1,A=h==null?0:h.length;++v<A;)if(y(h[v],v,h))return!0;return!1}var el=sn(\"length\");function rl(h){return h.split(\"\")}function il(h){return h.match(fa)||[]}function Ho(h,y,v){var A;return v(h,function(F,V,ut){if(y(F,V,ut))return A=V,!1}),A}function Zr(h,y,v,A){for(var F=h.length,V=v+(A?1:-1);A?V--:++V<F;)if(y(h[V],V,h))return V;return-1}function $e(h,y,v){return y===y?_l(h,y,v):Zr(h,Vo,v)}function nl(h,y,v,A){for(var F=v-1,V=h.length;++F<V;)if(A(h[F],y))return F;return-1}function Vo(h){return h!==h}function Bo(h,y){var v=h==null?0:h.length;return v?ln(h,y)/v:B}function sn(h){return function(y){return y==null?n:y[h]}}function an(h){return function(y){return h==null?n:h[y]}}function qo(h,y,v,A,F){return F(h,function(V,ut,K){v=A?(A=!1,V):y(v,V,ut,K)}),v}function ol(h,y){var v=h.length;for(h.sort(y);v--;)h[v]=h[v].value;return h}function ln(h,y){for(var v,A=-1,F=h.length;++A<F;){var V=y(h[A]);V!==n&&(v=v===n?V:v+V)}return v}function cn(h,y){for(var v=-1,A=Array(h);++v<h;)A[v]=y(v);return A}function ul(h,y){return $(y,function(v){return[v,h[v]]})}function Jo(h){return h&&h.slice(0,Go(h)+1).replace(Zi,\"\")}function Et(h){return function(y){return h(y)}}function fn(h,y){return $(y,function(v){return h[v]})}function xr(h,y){return h.has(y)}function Ko(h,y){for(var v=-1,A=h.length;++v<A&&$e(y,h[v],0)>-1;);return v}function Zo(h,y){for(var v=h.length;v--&&$e(y,h[v],0)>-1;);return v}function sl(h,y){for(var v=h.length,A=0;v--;)h[v]===y&&++A;return A}var al=an(Ba),ll=an(qa);function cl(h){return\"\\\\\"+Ka[h]}function fl(h,y){return h==null?n:h[y]}function tr(h){return Pa.test(h)}function hl(h){return Ia.test(h)}function dl(h){for(var y,v=[];!(y=h.next()).done;)v.push(y.value);return v}function hn(h){var y=-1,v=Array(h.size);return h.forEach(function(A,F){v[++y]=[F,A]}),v}function jo(h,y){return function(v){return h(y(v))}}function we(h,y){for(var v=-1,A=h.length,F=0,V=[];++v<A;){var ut=h[v];(ut===y||ut===$t)&&(h[v]=$t,V[F++]=v)}return V}function jr(h){var y=-1,v=Array(h.size);return h.forEach(function(A){v[++y]=A}),v}function gl(h){var y=-1,v=Array(h.size);return h.forEach(function(A){v[++y]=[A,A]}),v}function _l(h,y,v){for(var A=v-1,F=h.length;++A<F;)if(h[A]===y)return A;return-1}function vl(h,y,v){for(var A=v+1;A--;)if(h[A]===y)return A;return A}function er(h){return tr(h)?pl(h):el(h)}function qt(h){return tr(h)?ml(h):rl(h)}function Go(h){for(var y=h.length;y--&&sa.test(h.charAt(y)););return y}var yl=an(Ja);function pl(h){for(var y=tn.lastIndex=0;tn.test(h);)++y;return y}function ml(h){return h.match(tn)||[]}function wl(h){return h.match(Wa)||[]}var xl=function h(y){y=y==null?lt:rr.defaults(lt.Object(),y,rr.pick(lt,Ha));var v=y.Array,A=y.Date,F=y.Error,V=y.Function,ut=y.Math,K=y.Object,dn=y.RegExp,bl=y.String,Ft=y.TypeError,Gr=v.prototype,kl=V.prototype,ir=K.prototype,Qr=y[\"__core-js_shared__\"],$r=kl.toString,J=ir.hasOwnProperty,Cl=0,Qo=(function(){var t=/[^.]+$/.exec(Qr&&Qr.keys&&Qr.keys.IE_PROTO||\"\");return t?\"Symbol(src)_1.\"+t:\"\"})(),ti=ir.toString,El=$r.call(K),Al=lt._,Xl=dn(\"^\"+$r.call(J).replace(Ki,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),ei=To?y.Buffer:n,xe=y.Symbol,ri=y.Uint8Array,$o=ei?ei.allocUnsafe:n,ii=jo(K.getPrototypeOf,K),tu=K.create,eu=ir.propertyIsEnumerable,ni=Gr.splice,ru=xe?xe.isConcatSpreadable:n,br=xe?xe.iterator:n,Ye=xe?xe.toStringTag:n,oi=(function(){try{var t=De(K,\"defineProperty\");return t({},\"\",{}),t}catch{}})(),Rl=y.clearTimeout!==lt.clearTimeout&&y.clearTimeout,Sl=A&&A.now!==lt.Date.now&&A.now,zl=y.setTimeout!==lt.setTimeout&&y.setTimeout,ui=ut.ceil,si=ut.floor,gn=K.getOwnPropertySymbols,Ul=ei?ei.isBuffer:n,iu=y.isFinite,Yl=Gr.join,Ol=jo(K.keys,K),st=ut.max,ft=ut.min,Fl=A.now,Tl=y.parseInt,nu=ut.random,Nl=Gr.reverse,_n=De(y,\"DataView\"),kr=De(y,\"Map\"),vn=De(y,\"Promise\"),nr=De(y,\"Set\"),Cr=De(y,\"WeakMap\"),Er=De(K,\"create\"),ai=Cr&&new Cr,or={},Dl=Me(_n),Ml=Me(kr),Ll=Me(vn),Wl=Me(nr),Pl=Me(Cr),li=xe?xe.prototype:n,Ar=li?li.valueOf:n,ou=li?li.toString:n;function u(t){if(rt(t)&&!T(t)&&!(t instanceof P)){if(t instanceof Tt)return t;if(J.call(t,\"__wrapped__\"))return us(t)}return new Tt(t)}var ur=(function(){function t(){}return function(e){if(!et(e))return{};if(tu)return tu(e);t.prototype=e;var r=new t;return t.prototype=n,r}})();function ci(){}function Tt(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=n}u.templateSettings={escape:ea,evaluate:ra,interpolate:go,variable:\"\",imports:{_:u}},u.prototype=ci.prototype,u.prototype.constructor=u,Tt.prototype=ur(ci.prototype),Tt.prototype.constructor=Tt;function P(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Q,this.__views__=[]}function Il(){var t=new P(this.__wrapped__);return t.__actions__=wt(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=wt(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=wt(this.__views__),t}function Hl(){if(this.__filtered__){var t=new P(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function Vl(){var t=this.__wrapped__.value(),e=this.__dir__,r=T(t),i=e<0,o=r?t.length:0,s=rf(0,o,this.__views__),a=s.start,f=s.end,d=f-a,p=i?f:a-1,w=this.__iteratees__,x=w.length,E=0,X=ft(d,this.__takeCount__);if(!r||!i&&o==d&&X==d)return Su(t,this.__actions__);var U=[];t:for(;d--&&E<X;){p+=e;for(var M=-1,Y=t[p];++M<x;){var W=w[M],H=W.iteratee,Rt=W.type,yt=H(Y);if(Rt==Di)Y=yt;else if(!yt){if(Rt==Ze)continue t;break t}}U[E++]=Y}return U}P.prototype=ur(ci.prototype),P.prototype.constructor=P;function Oe(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var i=t[e];this.set(i[0],i[1])}}function Bl(){this.__data__=Er?Er(null):{},this.size=0}function ql(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function Jl(t){var e=this.__data__;if(Er){var r=e[t];return r===z?n:r}return J.call(e,t)?e[t]:n}function Kl(t){var e=this.__data__;return Er?e[t]!==n:J.call(e,t)}function Zl(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Er&&e===n?z:e,this}Oe.prototype.clear=Bl,Oe.prototype.delete=ql,Oe.prototype.get=Jl,Oe.prototype.has=Kl,Oe.prototype.set=Zl;function se(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var i=t[e];this.set(i[0],i[1])}}function jl(){this.__data__=[],this.size=0}function Gl(t){var e=this.__data__,r=fi(e,t);if(r<0)return!1;var i=e.length-1;return r==i?e.pop():ni.call(e,r,1),--this.size,!0}function Ql(t){var e=this.__data__,r=fi(e,t);return r<0?n:e[r][1]}function $l(t){return fi(this.__data__,t)>-1}function tc(t,e){var r=this.__data__,i=fi(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}se.prototype.clear=jl,se.prototype.delete=Gl,se.prototype.get=Ql,se.prototype.has=$l,se.prototype.set=tc;function ae(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var i=t[e];this.set(i[0],i[1])}}function ec(){this.size=0,this.__data__={hash:new Oe,map:new(kr||se),string:new Oe}}function rc(t){var e=ki(this,t).delete(t);return this.size-=e?1:0,e}function ic(t){return ki(this,t).get(t)}function nc(t){return ki(this,t).has(t)}function oc(t,e){var r=ki(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}ae.prototype.clear=ec,ae.prototype.delete=rc,ae.prototype.get=ic,ae.prototype.has=nc,ae.prototype.set=oc;function Fe(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new ae;++e<r;)this.add(t[e])}function uc(t){return this.__data__.set(t,z),this}function sc(t){return this.__data__.has(t)}Fe.prototype.add=Fe.prototype.push=uc,Fe.prototype.has=sc;function Jt(t){var e=this.__data__=new se(t);this.size=e.size}function ac(){this.__data__=new se,this.size=0}function lc(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}function cc(t){return this.__data__.get(t)}function fc(t){return this.__data__.has(t)}function hc(t,e){var r=this.__data__;if(r instanceof se){var i=r.__data__;if(!kr||i.length<g-1)return i.push([t,e]),this.size=++r.size,this;r=this.__data__=new ae(i)}return r.set(t,e),this.size=r.size,this}Jt.prototype.clear=ac,Jt.prototype.delete=lc,Jt.prototype.get=cc,Jt.prototype.has=fc,Jt.prototype.set=hc;function uu(t,e){var r=T(t),i=!r&&Le(t),o=!r&&!i&&Ae(t),s=!r&&!i&&!o&&cr(t),a=r||i||o||s,f=a?cn(t.length,bl):[],d=f.length;for(var p in t)(e||J.call(t,p))&&!(a&&(p==\"length\"||o&&(p==\"offset\"||p==\"parent\")||s&&(p==\"buffer\"||p==\"byteLength\"||p==\"byteOffset\")||he(p,d)))&&f.push(p);return f}function su(t){var e=t.length;return e?t[Xn(0,e-1)]:n}function dc(t,e){return Ci(wt(t),Te(e,0,t.length))}function gc(t){return Ci(wt(t))}function yn(t,e,r){(r!==n&&!Kt(t[e],r)||r===n&&!(e in t))&&le(t,e,r)}function Xr(t,e,r){var i=t[e];(!(J.call(t,e)&&Kt(i,r))||r===n&&!(e in t))&&le(t,e,r)}function fi(t,e){for(var r=t.length;r--;)if(Kt(t[r][0],e))return r;return-1}function _c(t,e,r,i){return be(t,function(o,s,a){e(i,o,r(o),a)}),i}function au(t,e){return t&&ie(e,at(e),t)}function vc(t,e){return t&&ie(e,bt(e),t)}function le(t,e,r){e==\"__proto__\"&&oi?oi(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}function pn(t,e){for(var r=-1,i=e.length,o=v(i),s=t==null;++r<i;)o[r]=s?n:Qn(t,e[r]);return o}function Te(t,e,r){return t===t&&(r!==n&&(t=t<=r?t:r),e!==n&&(t=t>=e?t:e)),t}function Nt(t,e,r,i,o,s){var a,f=e&te,d=e&Lr,p=e&Ut;if(r&&(a=o?r(t,i,o,s):r(t)),a!==n)return a;if(!et(t))return t;var w=T(t);if(w){if(a=of(t),!f)return wt(t,a)}else{var x=ht(t),E=x==Hr||x==lo;if(Ae(t))return Yu(t,f);if(x==ue||x==je||E&&!o){if(a=d||E?{}:Gu(t),!f)return d?Jc(t,vc(a,t)):qc(t,au(a,t))}else{if(!Z[x])return o?t:{};a=uf(t,x,f)}}s||(s=new Jt);var X=s.get(t);if(X)return X;s.set(t,a),As(t)?t.forEach(function(Y){a.add(Nt(Y,e,r,Y,t,s))}):Cs(t)&&t.forEach(function(Y,W){a.set(W,Nt(Y,e,r,W,t,s))});var U=p?d?Mn:Dn:d?bt:at,M=w?n:U(t);return Ot(M||t,function(Y,W){M&&(W=Y,Y=t[W]),Xr(a,W,Nt(Y,e,r,W,t,s))}),a}function yc(t){var e=at(t);return function(r){return lu(r,t,e)}}function lu(t,e,r){var i=r.length;if(t==null)return!i;for(t=K(t);i--;){var o=r[i],s=e[o],a=t[o];if(a===n&&!(o in t)||!s(a))return!1}return!0}function cu(t,e,r){if(typeof t!=\"function\")throw new Ft(N);return Fr(function(){t.apply(n,r)},e)}function Rr(t,e,r,i){var o=-1,s=Kr,a=!0,f=t.length,d=[],p=e.length;if(!f)return d;r&&(e=$(e,Et(r))),i?(s=nn,a=!1):e.length>=g&&(s=xr,a=!1,e=new Fe(e));t:for(;++o<f;){var w=t[o],x=r==null?w:r(w);if(w=i||w!==0?w:0,a&&x===x){for(var E=p;E--;)if(e[E]===x)continue t;d.push(w)}else s(e,x,i)||d.push(w)}return d}var be=Du(re),fu=Du(wn,!0);function pc(t,e){var r=!0;return be(t,function(i,o,s){return r=!!e(i,o,s),r}),r}function hi(t,e,r){for(var i=-1,o=t.length;++i<o;){var s=t[i],a=e(s);if(a!=null&&(f===n?a===a&&!Xt(a):r(a,f)))var f=a,d=s}return d}function mc(t,e,r,i){var o=t.length;for(r=D(r),r<0&&(r=-r>o?0:o+r),i=i===n||i>o?o:D(i),i<0&&(i+=o),i=r>i?0:Rs(i);r<i;)t[r++]=e;return t}function hu(t,e){var r=[];return be(t,function(i,o,s){e(i,o,s)&&r.push(i)}),r}function ct(t,e,r,i,o){var s=-1,a=t.length;for(r||(r=af),o||(o=[]);++s<a;){var f=t[s];e>0&&r(f)?e>1?ct(f,e-1,r,i,o):me(o,f):i||(o[o.length]=f)}return o}var mn=Mu(),du=Mu(!0);function re(t,e){return t&&mn(t,e,at)}function wn(t,e){return t&&du(t,e,at)}function di(t,e){return pe(e,function(r){return de(t[r])})}function Ne(t,e){e=Ce(e,t);for(var r=0,i=e.length;t!=null&&r<i;)t=t[ne(e[r++])];return r&&r==i?t:n}function gu(t,e,r){var i=e(t);return T(t)?i:me(i,r(t))}function _t(t){return t==null?t===n?Ks:qs:Ye&&Ye in K(t)?ef(t):_f(t)}function xn(t,e){return t>e}function wc(t,e){return t!=null&&J.call(t,e)}function xc(t,e){return t!=null&&e in K(t)}function bc(t,e,r){return t>=ft(e,r)&&t<st(e,r)}function bn(t,e,r){for(var i=r?nn:Kr,o=t[0].length,s=t.length,a=s,f=v(s),d=1/0,p=[];a--;){var w=t[a];a&&e&&(w=$(w,Et(e))),d=ft(w.length,d),f[a]=!r&&(e||o>=120&&w.length>=120)?new Fe(a&&w):n}w=t[0];var x=-1,E=f[0];t:for(;++x<o&&p.length<d;){var X=w[x],U=e?e(X):X;if(X=r||X!==0?X:0,!(E?xr(E,U):i(p,U,r))){for(a=s;--a;){var M=f[a];if(!(M?xr(M,U):i(t[a],U,r)))continue t}E&&E.push(U),p.push(X)}}return p}function kc(t,e,r,i){return re(t,function(o,s,a){e(i,r(o),s,a)}),i}function Sr(t,e,r){e=Ce(e,t),t=es(t,e);var i=t==null?t:t[ne(Mt(e))];return i==null?n:Ct(i,t,r)}function _u(t){return rt(t)&&_t(t)==je}function Cc(t){return rt(t)&&_t(t)==wr}function Ec(t){return rt(t)&&_t(t)==_r}function zr(t,e,r,i,o){return t===e?!0:t==null||e==null||!rt(t)&&!rt(e)?t!==t&&e!==e:Ac(t,e,r,i,zr,o)}function Ac(t,e,r,i,o,s){var a=T(t),f=T(e),d=a?Pr:ht(t),p=f?Pr:ht(e);d=d==je?ue:d,p=p==je?ue:p;var w=d==ue,x=p==ue,E=d==p;if(E&&Ae(t)){if(!Ae(e))return!1;a=!0,w=!1}if(E&&!w)return s||(s=new Jt),a||cr(t)?Ku(t,e,r,i,o,s):$c(t,e,d,r,i,o,s);if(!(r&oe)){var X=w&&J.call(t,\"__wrapped__\"),U=x&&J.call(e,\"__wrapped__\");if(X||U){var M=X?t.value():t,Y=U?e.value():e;return s||(s=new Jt),o(M,Y,r,i,s)}}return E?(s||(s=new Jt),tf(t,e,r,i,o,s)):!1}function Xc(t){return rt(t)&&ht(t)==Vt}function kn(t,e,r,i){var o=r.length,s=o,a=!i;if(t==null)return!s;for(t=K(t);o--;){var f=r[o];if(a&&f[2]?f[1]!==t[f[0]]:!(f[0]in t))return!1}for(;++o<s;){f=r[o];var d=f[0],p=t[d],w=f[1];if(a&&f[2]){if(p===n&&!(d in t))return!1}else{var x=new Jt;if(i)var E=i(p,w,d,t,e,x);if(!(E===n?zr(w,p,oe|pt,i,x):E))return!1}}return!0}function vu(t){if(!et(t)||cf(t))return!1;var e=de(t)?Xl:ya;return e.test(Me(t))}function Rc(t){return rt(t)&&_t(t)==yr}function Sc(t){return rt(t)&&ht(t)==Bt}function zc(t){return rt(t)&&zi(t.length)&&!!j[_t(t)]}function yu(t){return typeof t==\"function\"?t:t==null?kt:typeof t==\"object\"?T(t)?wu(t[0],t[1]):mu(t):Ls(t)}function Cn(t){if(!Or(t))return Ol(t);var e=[];for(var r in K(t))J.call(t,r)&&r!=\"constructor\"&&e.push(r);return e}function Uc(t){if(!et(t))return gf(t);var e=Or(t),r=[];for(var i in t)i==\"constructor\"&&(e||!J.call(t,i))||r.push(i);return r}function En(t,e){return t<e}function pu(t,e){var r=-1,i=xt(t)?v(t.length):[];return be(t,function(o,s,a){i[++r]=e(o,s,a)}),i}function mu(t){var e=Wn(t);return e.length==1&&e[0][2]?$u(e[0][0],e[0][1]):function(r){return r===t||kn(r,t,e)}}function wu(t,e){return In(t)&&Qu(e)?$u(ne(t),e):function(r){var i=Qn(r,t);return i===n&&i===e?$n(r,t):zr(e,i,oe|pt)}}function gi(t,e,r,i,o){t!==e&&mn(e,function(s,a){if(o||(o=new Jt),et(s))Yc(t,e,a,r,gi,i,o);else{var f=i?i(Vn(t,a),s,a+\"\",t,e,o):n;f===n&&(f=s),yn(t,a,f)}},bt)}function Yc(t,e,r,i,o,s,a){var f=Vn(t,r),d=Vn(e,r),p=a.get(d);if(p){yn(t,r,p);return}var w=s?s(f,d,r+\"\",t,e,a):n,x=w===n;if(x){var E=T(d),X=!E&&Ae(d),U=!E&&!X&&cr(d);w=d,E||X||U?T(f)?w=f:it(f)?w=wt(f):X?(x=!1,w=Yu(d,!0)):U?(x=!1,w=Ou(d,!0)):w=[]:Tr(d)||Le(d)?(w=f,Le(f)?w=Ss(f):(!et(f)||de(f))&&(w=Gu(d))):x=!1}x&&(a.set(d,w),o(w,d,i,s,a),a.delete(d)),yn(t,r,w)}function xu(t,e){var r=t.length;if(r)return e+=e<0?r:0,he(e,r)?t[e]:n}function bu(t,e,r){e.length?e=$(e,function(s){return T(s)?function(a){return Ne(a,s.length===1?s[0]:s)}:s}):e=[kt];var i=-1;e=$(e,Et(S()));var o=pu(t,function(s,a,f){var d=$(e,function(p){return p(s)});return{criteria:d,index:++i,value:s}});return ol(o,function(s,a){return Bc(s,a,r)})}function Oc(t,e){return ku(t,e,function(r,i){return $n(t,i)})}function ku(t,e,r){for(var i=-1,o=e.length,s={};++i<o;){var a=e[i],f=Ne(t,a);r(f,a)&&Ur(s,Ce(a,t),f)}return s}function Fc(t){return function(e){return Ne(e,t)}}function An(t,e,r,i){var o=i?nl:$e,s=-1,a=e.length,f=t;for(t===e&&(e=wt(e)),r&&(f=$(t,Et(r)));++s<a;)for(var d=0,p=e[s],w=r?r(p):p;(d=o(f,w,d,i))>-1;)f!==t&&ni.call(f,d,1),ni.call(t,d,1);return t}function Cu(t,e){for(var r=t?e.length:0,i=r-1;r--;){var o=e[r];if(r==i||o!==s){var s=o;he(o)?ni.call(t,o,1):zn(t,o)}}return t}function Xn(t,e){return t+si(nu()*(e-t+1))}function Tc(t,e,r,i){for(var o=-1,s=st(ui((e-t)/(r||1)),0),a=v(s);s--;)a[i?s:++o]=t,t+=r;return a}function Rn(t,e){var r=\"\";if(!t||e<1||e>ee)return r;do e%2&&(r+=t),e=si(e/2),e&&(t+=t);while(e);return r}function L(t,e){return Bn(ts(t,e,kt),t+\"\")}function Nc(t){return su(fr(t))}function Dc(t,e){var r=fr(t);return Ci(r,Te(e,0,r.length))}function Ur(t,e,r,i){if(!et(t))return t;e=Ce(e,t);for(var o=-1,s=e.length,a=s-1,f=t;f!=null&&++o<s;){var d=ne(e[o]),p=r;if(d===\"__proto__\"||d===\"constructor\"||d===\"prototype\")return t;if(o!=a){var w=f[d];p=i?i(w,d,f):n,p===n&&(p=et(w)?w:he(e[o+1])?[]:{})}Xr(f,d,p),f=f[d]}return t}var Eu=ai?function(t,e){return ai.set(t,e),t}:kt,Mc=oi?function(t,e){return oi(t,\"toString\",{configurable:!0,enumerable:!1,value:eo(e),writable:!0})}:kt;function Lc(t){return Ci(fr(t))}function Dt(t,e,r){var i=-1,o=t.length;e<0&&(e=-e>o?0:o+e),r=r>o?o:r,r<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var s=v(o);++i<o;)s[i]=t[i+e];return s}function Wc(t,e){var r;return be(t,function(i,o,s){return r=e(i,o,s),!r}),!!r}function _i(t,e,r){var i=0,o=t==null?i:t.length;if(typeof e==\"number\"&&e===e&&o<=ze){for(;i<o;){var s=i+o>>>1,a=t[s];a!==null&&!Xt(a)&&(r?a<=e:a<e)?i=s+1:o=s}return o}return Sn(t,e,kt,r)}function Sn(t,e,r,i){var o=0,s=t==null?0:t.length;if(s===0)return 0;e=r(e);for(var a=e!==e,f=e===null,d=Xt(e),p=e===n;o<s;){var w=si((o+s)/2),x=r(t[w]),E=x!==n,X=x===null,U=x===x,M=Xt(x);if(a)var Y=i||U;else p?Y=U&&(i||E):f?Y=U&&E&&(i||!X):d?Y=U&&E&&!X&&(i||!M):X||M?Y=!1:Y=i?x<=e:x<e;Y?o=w+1:s=w}return ft(s,Ht)}function Au(t,e){for(var r=-1,i=t.length,o=0,s=[];++r<i;){var a=t[r],f=e?e(a):a;if(!r||!Kt(f,d)){var d=f;s[o++]=a===0?0:a}}return s}function Xu(t){return typeof t==\"number\"?t:Xt(t)?B:+t}function At(t){if(typeof t==\"string\")return t;if(T(t))return $(t,At)+\"\";if(Xt(t))return ou?ou.call(t):\"\";var e=t+\"\";return e==\"0\"&&1/t==-It?\"-0\":e}function ke(t,e,r){var i=-1,o=Kr,s=t.length,a=!0,f=[],d=f;if(r)a=!1,o=nn;else if(s>=g){var p=e?null:Gc(t);if(p)return jr(p);a=!1,o=xr,d=new Fe}else d=e?[]:f;t:for(;++i<s;){var w=t[i],x=e?e(w):w;if(w=r||w!==0?w:0,a&&x===x){for(var E=d.length;E--;)if(d[E]===x)continue t;e&&d.push(x),f.push(w)}else o(d,x,r)||(d!==f&&d.push(x),f.push(w))}return f}function zn(t,e){return e=Ce(e,t),t=es(t,e),t==null||delete t[ne(Mt(e))]}function Ru(t,e,r,i){return Ur(t,e,r(Ne(t,e)),i)}function vi(t,e,r,i){for(var o=t.length,s=i?o:-1;(i?s--:++s<o)&&e(t[s],s,t););return r?Dt(t,i?0:s,i?s+1:o):Dt(t,i?s+1:0,i?o:s)}function Su(t,e){var r=t;return r instanceof P&&(r=r.value()),on(e,function(i,o){return o.func.apply(o.thisArg,me([i],o.args))},r)}function Un(t,e,r){var i=t.length;if(i<2)return i?ke(t[0]):[];for(var o=-1,s=v(i);++o<i;)for(var a=t[o],f=-1;++f<i;)f!=o&&(s[o]=Rr(s[o]||a,t[f],e,r));return ke(ct(s,1),e,r)}function zu(t,e,r){for(var i=-1,o=t.length,s=e.length,a={};++i<o;){var f=i<s?e[i]:n;r(a,t[i],f)}return a}function Yn(t){return it(t)?t:[]}function On(t){return typeof t==\"function\"?t:kt}function Ce(t,e){return T(t)?t:In(t,e)?[t]:os(q(t))}var Pc=L;function Ee(t,e,r){var i=t.length;return r=r===n?i:r,!e&&r>=i?t:Dt(t,e,r)}var Uu=Rl||function(t){return lt.clearTimeout(t)};function Yu(t,e){if(e)return t.slice();var r=t.length,i=$o?$o(r):new t.constructor(r);return t.copy(i),i}function Fn(t){var e=new t.constructor(t.byteLength);return new ri(e).set(new ri(t)),e}function Ic(t,e){var r=e?Fn(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}function Hc(t){var e=new t.constructor(t.source,_o.exec(t));return e.lastIndex=t.lastIndex,e}function Vc(t){return Ar?K(Ar.call(t)):{}}function Ou(t,e){var r=e?Fn(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Fu(t,e){if(t!==e){var r=t!==n,i=t===null,o=t===t,s=Xt(t),a=e!==n,f=e===null,d=e===e,p=Xt(e);if(!f&&!p&&!s&&t>e||s&&a&&d&&!f&&!p||i&&a&&d||!r&&d||!o)return 1;if(!i&&!s&&!p&&t<e||p&&r&&o&&!i&&!s||f&&r&&o||!a&&o||!d)return-1}return 0}function Bc(t,e,r){for(var i=-1,o=t.criteria,s=e.criteria,a=o.length,f=r.length;++i<a;){var d=Fu(o[i],s[i]);if(d){if(i>=f)return d;var p=r[i];return d*(p==\"desc\"?-1:1)}}return t.index-e.index}function Tu(t,e,r,i){for(var o=-1,s=t.length,a=r.length,f=-1,d=e.length,p=st(s-a,0),w=v(d+p),x=!i;++f<d;)w[f]=e[f];for(;++o<a;)(x||o<s)&&(w[r[o]]=t[o]);for(;p--;)w[f++]=t[o++];return w}function Nu(t,e,r,i){for(var o=-1,s=t.length,a=-1,f=r.length,d=-1,p=e.length,w=st(s-f,0),x=v(w+p),E=!i;++o<w;)x[o]=t[o];for(var X=o;++d<p;)x[X+d]=e[d];for(;++a<f;)(E||o<s)&&(x[X+r[a]]=t[o++]);return x}function wt(t,e){var r=-1,i=t.length;for(e||(e=v(i));++r<i;)e[r]=t[r];return e}function ie(t,e,r,i){var o=!r;r||(r={});for(var s=-1,a=e.length;++s<a;){var f=e[s],d=i?i(r[f],t[f],f,r,t):n;d===n&&(d=t[f]),o?le(r,f,d):Xr(r,f,d)}return r}function qc(t,e){return ie(t,Pn(t),e)}function Jc(t,e){return ie(t,Zu(t),e)}function yi(t,e){return function(r,i){var o=T(r)?Qa:_c,s=e?e():{};return o(r,t,S(i,2),s)}}function sr(t){return L(function(e,r){var i=-1,o=r.length,s=o>1?r[o-1]:n,a=o>2?r[2]:n;for(s=t.length>3&&typeof s==\"function\"?(o--,s):n,a&&vt(r[0],r[1],a)&&(s=o<3?n:s,o=1),e=K(e);++i<o;){var f=r[i];f&&t(e,f,i,s)}return e})}function Du(t,e){return function(r,i){if(r==null)return r;if(!xt(r))return t(r,i);for(var o=r.length,s=e?o:-1,a=K(r);(e?s--:++s<o)&&i(a[s],s,a)!==!1;);return r}}function Mu(t){return function(e,r,i){for(var o=-1,s=K(e),a=i(e),f=a.length;f--;){var d=a[t?f:++o];if(r(s[d],d,s)===!1)break}return e}}function Kc(t,e,r){var i=e&dt,o=Yr(t);function s(){var a=this&&this!==lt&&this instanceof s?o:t;return a.apply(i?r:this,arguments)}return s}function Lu(t){return function(e){e=q(e);var r=tr(e)?qt(e):n,i=r?r[0]:e.charAt(0),o=r?Ee(r,1).join(\"\"):e.slice(1);return i[t]()+o}}function ar(t){return function(e){return on(Ds(Ns(e).replace(Ma,\"\")),t,\"\")}}function Yr(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var r=ur(t.prototype),i=t.apply(r,e);return et(i)?i:r}}function Zc(t,e,r){var i=Yr(t);function o(){for(var s=arguments.length,a=v(s),f=s,d=lr(o);f--;)a[f]=arguments[f];var p=s<3&&a[0]!==d&&a[s-1]!==d?[]:we(a,d);if(s-=p.length,s<r)return Vu(t,e,pi,o.placeholder,n,a,p,n,n,r-s);var w=this&&this!==lt&&this instanceof o?i:t;return Ct(w,this,a)}return o}function Wu(t){return function(e,r,i){var o=K(e);if(!xt(e)){var s=S(r,3);e=at(e),r=function(f){return s(o[f],f,o)}}var a=t(e,r,i);return a>-1?o[s?e[a]:a]:n}}function Pu(t){return fe(function(e){var r=e.length,i=r,o=Tt.prototype.thru;for(t&&e.reverse();i--;){var s=e[i];if(typeof s!=\"function\")throw new Ft(N);if(o&&!a&&bi(s)==\"wrapper\")var a=new Tt([],!0)}for(i=a?i:r;++i<r;){s=e[i];var f=bi(s),d=f==\"wrapper\"?Ln(s):n;d&&Hn(d[0])&&d[1]==(ot|mt|Pt|gt)&&!d[4].length&&d[9]==1?a=a[bi(d[0])].apply(a,d[3]):a=s.length==1&&Hn(s)?a[f]():a.thru(s)}return function(){var p=arguments,w=p[0];if(a&&p.length==1&&T(w))return a.plant(w).value();for(var x=0,E=r?e[x].apply(this,p):w;++x<r;)E=e[x].call(this,E);return E}})}function pi(t,e,r,i,o,s,a,f,d,p){var w=e&ot,x=e&dt,E=e&ye,X=e&(mt|Xe),U=e&dr,M=E?n:Yr(t);function Y(){for(var W=arguments.length,H=v(W),Rt=W;Rt--;)H[Rt]=arguments[Rt];if(X)var yt=lr(Y),St=sl(H,yt);if(i&&(H=Tu(H,i,o,X)),s&&(H=Nu(H,s,a,X)),W-=St,X&&W<p){var nt=we(H,yt);return Vu(t,e,pi,Y.placeholder,r,H,nt,f,d,p-W)}var Zt=x?r:this,_e=E?Zt[t]:t;return W=H.length,f?H=vf(H,f):U&&W>1&&H.reverse(),w&&d<W&&(H.length=d),this&&this!==lt&&this instanceof Y&&(_e=M||Yr(_e)),_e.apply(Zt,H)}return Y}function Iu(t,e){return function(r,i){return kc(r,t,e(i),{})}}function mi(t,e){return function(r,i){var o;if(r===n&&i===n)return e;if(r!==n&&(o=r),i!==n){if(o===n)return i;typeof r==\"string\"||typeof i==\"string\"?(r=At(r),i=At(i)):(r=Xu(r),i=Xu(i)),o=t(r,i)}return o}}function Tn(t){return fe(function(e){return e=$(e,Et(S())),L(function(r){var i=this;return t(e,function(o){return Ct(o,i,r)})})})}function wi(t,e){e=e===n?\" \":At(e);var r=e.length;if(r<2)return r?Rn(e,t):e;var i=Rn(e,ui(t/er(e)));return tr(e)?Ee(qt(i),0,t).join(\"\"):i.slice(0,t)}function jc(t,e,r,i){var o=e&dt,s=Yr(t);function a(){for(var f=-1,d=arguments.length,p=-1,w=i.length,x=v(w+d),E=this&&this!==lt&&this instanceof a?s:t;++p<w;)x[p]=i[p];for(;d--;)x[p++]=arguments[++f];return Ct(E,o?r:this,x)}return a}function Hu(t){return function(e,r,i){return i&&typeof i!=\"number\"&&vt(e,r,i)&&(r=i=n),e=ge(e),r===n?(r=e,e=0):r=ge(r),i=i===n?e<r?1:-1:ge(i),Tc(e,r,i,t)}}function xi(t){return function(e,r){return typeof e==\"string\"&&typeof r==\"string\"||(e=Lt(e),r=Lt(r)),t(e,r)}}function Vu(t,e,r,i,o,s,a,f,d,p){var w=e&mt,x=w?a:n,E=w?n:a,X=w?s:n,U=w?n:s;e|=w?Pt:Re,e&=~(w?Re:Pt),e&Wr||(e&=-4);var M=[t,e,o,X,x,U,E,f,d,p],Y=r.apply(n,M);return Hn(t)&&rs(Y,M),Y.placeholder=i,is(Y,t,e)}function Nn(t){var e=ut[t];return function(r,i){if(r=Lt(r),i=i==null?0:ft(D(i),292),i&&iu(r)){var o=(q(r)+\"e\").split(\"e\"),s=e(o[0]+\"e\"+(+o[1]+i));return o=(q(s)+\"e\").split(\"e\"),+(o[0]+\"e\"+(+o[1]-i))}return e(r)}}var Gc=nr&&1/jr(new nr([,-0]))[1]==It?function(t){return new nr(t)}:no;function Bu(t){return function(e){var r=ht(e);return r==Vt?hn(e):r==Bt?gl(e):ul(e,t(e))}}function ce(t,e,r,i,o,s,a,f){var d=e&ye;if(!d&&typeof t!=\"function\")throw new Ft(N);var p=i?i.length:0;if(p||(e&=-97,i=o=n),a=a===n?a:st(D(a),0),f=f===n?f:D(f),p-=o?o.length:0,e&Re){var w=i,x=o;i=o=n}var E=d?n:Ln(t),X=[t,e,r,i,o,w,x,s,a,f];if(E&&df(X,E),t=X[0],e=X[1],r=X[2],i=X[3],o=X[4],f=X[9]=X[9]===n?d?0:t.length:st(X[9]-p,0),!f&&e&(mt|Xe)&&(e&=-25),!e||e==dt)var U=Kc(t,e,r);else e==mt||e==Xe?U=Zc(t,e,f):(e==Pt||e==(dt|Pt))&&!o.length?U=jc(t,e,r,i):U=pi.apply(n,X);var M=E?Eu:rs;return is(M(U,X),t,e)}function qu(t,e,r,i){return t===n||Kt(t,ir[r])&&!J.call(i,r)?e:t}function Ju(t,e,r,i,o,s){return et(t)&&et(e)&&(s.set(e,t),gi(t,e,n,Ju,s),s.delete(e)),t}function Qc(t){return Tr(t)?n:t}function Ku(t,e,r,i,o,s){var a=r&oe,f=t.length,d=e.length;if(f!=d&&!(a&&d>f))return!1;var p=s.get(t),w=s.get(e);if(p&&w)return p==e&&w==t;var x=-1,E=!0,X=r&pt?new Fe:n;for(s.set(t,e),s.set(e,t);++x<f;){var U=t[x],M=e[x];if(i)var Y=a?i(M,U,x,e,t,s):i(U,M,x,t,e,s);if(Y!==n){if(Y)continue;E=!1;break}if(X){if(!un(e,function(W,H){if(!xr(X,H)&&(U===W||o(U,W,r,i,s)))return X.push(H)})){E=!1;break}}else if(!(U===M||o(U,M,r,i,s))){E=!1;break}}return s.delete(t),s.delete(e),E}function $c(t,e,r,i,o,s,a){switch(r){case Ge:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case wr:return!(t.byteLength!=e.byteLength||!s(new ri(t),new ri(e)));case gr:case _r:case vr:return Kt(+t,+e);case Ir:return t.name==e.name&&t.message==e.message;case yr:case pr:return t==e+\"\";case Vt:var f=hn;case Bt:var d=i&oe;if(f||(f=jr),t.size!=e.size&&!d)return!1;var p=a.get(t);if(p)return p==e;i|=pt,a.set(t,e);var w=Ku(f(t),f(e),i,o,s,a);return a.delete(t),w;case Vr:if(Ar)return Ar.call(t)==Ar.call(e)}return!1}function tf(t,e,r,i,o,s){var a=r&oe,f=Dn(t),d=f.length,p=Dn(e),w=p.length;if(d!=w&&!a)return!1;for(var x=d;x--;){var E=f[x];if(!(a?E in e:J.call(e,E)))return!1}var X=s.get(t),U=s.get(e);if(X&&U)return X==e&&U==t;var M=!0;s.set(t,e),s.set(e,t);for(var Y=a;++x<d;){E=f[x];var W=t[E],H=e[E];if(i)var Rt=a?i(H,W,E,e,t,s):i(W,H,E,t,e,s);if(!(Rt===n?W===H||o(W,H,r,i,s):Rt)){M=!1;break}Y||(Y=E==\"constructor\")}if(M&&!Y){var yt=t.constructor,St=e.constructor;yt!=St&&\"constructor\"in t&&\"constructor\"in e&&!(typeof yt==\"function\"&&yt instanceof yt&&typeof St==\"function\"&&St instanceof St)&&(M=!1)}return s.delete(t),s.delete(e),M}function fe(t){return Bn(ts(t,n,ls),t+\"\")}function Dn(t){return gu(t,at,Pn)}function Mn(t){return gu(t,bt,Zu)}var Ln=ai?function(t){return ai.get(t)}:no;function bi(t){for(var e=t.name+\"\",r=or[e],i=J.call(or,e)?r.length:0;i--;){var o=r[i],s=o.func;if(s==null||s==t)return o.name}return e}function lr(t){var e=J.call(u,\"placeholder\")?u:t;return e.placeholder}function S(){var t=u.iteratee||ro;return t=t===ro?yu:t,arguments.length?t(arguments[0],arguments[1]):t}function ki(t,e){var r=t.__data__;return lf(e)?r[typeof e==\"string\"?\"string\":\"hash\"]:r.map}function Wn(t){for(var e=at(t),r=e.length;r--;){var i=e[r],o=t[i];e[r]=[i,o,Qu(o)]}return e}function De(t,e){var r=fl(t,e);return vu(r)?r:n}function ef(t){var e=J.call(t,Ye),r=t[Ye];try{t[Ye]=n;var i=!0}catch{}var o=ti.call(t);return i&&(e?t[Ye]=r:delete t[Ye]),o}var Pn=gn?function(t){return t==null?[]:(t=K(t),pe(gn(t),function(e){return eu.call(t,e)}))}:oo,Zu=gn?function(t){for(var e=[];t;)me(e,Pn(t)),t=ii(t);return e}:oo,ht=_t;(_n&&ht(new _n(new ArrayBuffer(1)))!=Ge||kr&&ht(new kr)!=Vt||vn&&ht(vn.resolve())!=co||nr&&ht(new nr)!=Bt||Cr&&ht(new Cr)!=mr)&&(ht=function(t){var e=_t(t),r=e==ue?t.constructor:n,i=r?Me(r):\"\";if(i)switch(i){case Dl:return Ge;case Ml:return Vt;case Ll:return co;case Wl:return Bt;case Pl:return mr}return e});function rf(t,e,r){for(var i=-1,o=r.length;++i<o;){var s=r[i],a=s.size;switch(s.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=ft(e,t+a);break;case\"takeRight\":t=st(t,e-a);break}}return{start:t,end:e}}function nf(t){var e=t.match(la);return e?e[1].split(ca):[]}function ju(t,e,r){e=Ce(e,t);for(var i=-1,o=e.length,s=!1;++i<o;){var a=ne(e[i]);if(!(s=t!=null&&r(t,a)))break;t=t[a]}return s||++i!=o?s:(o=t==null?0:t.length,!!o&&zi(o)&&he(a,o)&&(T(t)||Le(t)))}function of(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]==\"string\"&&J.call(t,\"index\")&&(r.index=t.index,r.input=t.input),r}function Gu(t){return typeof t.constructor==\"function\"&&!Or(t)?ur(ii(t)):{}}function uf(t,e,r){var i=t.constructor;switch(e){case wr:return Fn(t);case gr:case _r:return new i(+t);case Ge:return Ic(t,r);case Li:case Wi:case Pi:case Ii:case Hi:case Vi:case Bi:case qi:case Ji:return Ou(t,r);case Vt:return new i;case vr:case pr:return new i(t);case yr:return Hc(t);case Bt:return new i;case Vr:return Vc(t)}}function sf(t,e){var r=e.length;if(!r)return t;var i=r-1;return e[i]=(r>1?\"& \":\"\")+e[i],e=e.join(r>2?\", \":\" \"),t.replace(aa,`{\n/* [wrapped with `+e+`] */\n`)}function af(t){return T(t)||Le(t)||!!(ru&&t&&t[ru])}function he(t,e){var r=typeof t;return e=e??ee,!!e&&(r==\"number\"||r!=\"symbol\"&&ma.test(t))&&t>-1&&t%1==0&&t<e}function vt(t,e,r){if(!et(r))return!1;var i=typeof e;return(i==\"number\"?xt(r)&&he(e,r.length):i==\"string\"&&e in r)?Kt(r[e],t):!1}function In(t,e){if(T(t))return!1;var r=typeof t;return r==\"number\"||r==\"symbol\"||r==\"boolean\"||t==null||Xt(t)?!0:na.test(t)||!ia.test(t)||e!=null&&t in K(e)}function lf(t){var e=typeof t;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?t!==\"__proto__\":t===null}function Hn(t){var e=bi(t),r=u[e];if(typeof r!=\"function\"||!(e in P.prototype))return!1;if(t===r)return!0;var i=Ln(r);return!!i&&t===i[0]}function cf(t){return!!Qo&&Qo in t}var ff=Qr?de:uo;function Or(t){var e=t&&t.constructor,r=typeof e==\"function\"&&e.prototype||ir;return t===r}function Qu(t){return t===t&&!et(t)}function $u(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==n||t in K(r))}}function hf(t){var e=Ri(t,function(i){return r.size===k&&r.clear(),i}),r=e.cache;return e}function df(t,e){var r=t[1],i=e[1],o=r|i,s=o<(dt|ye|ot),a=i==ot&&r==mt||i==ot&&r==gt&&t[7].length<=e[8]||i==(ot|gt)&&e[7].length<=e[8]&&r==mt;if(!(s||a))return t;i&dt&&(t[2]=e[2],o|=r&dt?0:Wr);var f=e[3];if(f){var d=t[3];t[3]=d?Tu(d,f,e[4]):f,t[4]=d?we(t[3],$t):e[4]}return f=e[5],f&&(d=t[5],t[5]=d?Nu(d,f,e[6]):f,t[6]=d?we(t[5],$t):e[6]),f=e[7],f&&(t[7]=f),i&ot&&(t[8]=t[8]==null?e[8]:ft(t[8],e[8])),t[9]==null&&(t[9]=e[9]),t[0]=e[0],t[1]=o,t}function gf(t){var e=[];if(t!=null)for(var r in K(t))e.push(r);return e}function _f(t){return ti.call(t)}function ts(t,e,r){return e=st(e===n?t.length-1:e,0),function(){for(var i=arguments,o=-1,s=st(i.length-e,0),a=v(s);++o<s;)a[o]=i[e+o];o=-1;for(var f=v(e+1);++o<e;)f[o]=i[o];return f[e]=r(a),Ct(t,this,f)}}function es(t,e){return e.length<2?t:Ne(t,Dt(e,0,-1))}function vf(t,e){for(var r=t.length,i=ft(e.length,r),o=wt(t);i--;){var s=e[i];t[i]=he(s,r)?o[s]:n}return t}function Vn(t,e){if(!(e===\"constructor\"&&typeof t[e]==\"function\")&&e!=\"__proto__\")return t[e]}var rs=ns(Eu),Fr=zl||function(t,e){return lt.setTimeout(t,e)},Bn=ns(Mc);function is(t,e,r){var i=e+\"\";return Bn(t,sf(i,yf(nf(i),r)))}function ns(t){var e=0,r=0;return function(){var i=Fl(),o=Ni-(i-r);if(r=i,o>0){if(++e>=Ti)return arguments[0]}else e=0;return t.apply(n,arguments)}}function Ci(t,e){var r=-1,i=t.length,o=i-1;for(e=e===n?i:e;++r<e;){var s=Xn(r,o),a=t[s];t[s]=t[r],t[r]=a}return t.length=e,t}var os=hf(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(\"\"),t.replace(oa,function(r,i,o,s){e.push(o?s.replace(da,\"$1\"):i||r)}),e});function ne(t){if(typeof t==\"string\"||Xt(t))return t;var e=t+\"\";return e==\"0\"&&1/t==-It?\"-0\":e}function Me(t){if(t!=null){try{return $r.call(t)}catch{}try{return t+\"\"}catch{}}return\"\"}function yf(t,e){return Ot(Mi,function(r){var i=\"_.\"+r[0];e&r[1]&&!Kr(t,i)&&t.push(i)}),t.sort()}function us(t){if(t instanceof P)return t.clone();var e=new Tt(t.__wrapped__,t.__chain__);return e.__actions__=wt(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}function pf(t,e,r){(r?vt(t,e,r):e===n)?e=1:e=st(D(e),0);var i=t==null?0:t.length;if(!i||e<1)return[];for(var o=0,s=0,a=v(ui(i/e));o<i;)a[s++]=Dt(t,o,o+=e);return a}function mf(t){for(var e=-1,r=t==null?0:t.length,i=0,o=[];++e<r;){var s=t[e];s&&(o[i++]=s)}return o}function wf(){var t=arguments.length;if(!t)return[];for(var e=v(t-1),r=arguments[0],i=t;i--;)e[i-1]=arguments[i];return me(T(r)?wt(r):[r],ct(e,1))}var xf=L(function(t,e){return it(t)?Rr(t,ct(e,1,it,!0)):[]}),bf=L(function(t,e){var r=Mt(e);return it(r)&&(r=n),it(t)?Rr(t,ct(e,1,it,!0),S(r,2)):[]}),kf=L(function(t,e){var r=Mt(e);return it(r)&&(r=n),it(t)?Rr(t,ct(e,1,it,!0),n,r):[]});function Cf(t,e,r){var i=t==null?0:t.length;return i?(e=r||e===n?1:D(e),Dt(t,e<0?0:e,i)):[]}function Ef(t,e,r){var i=t==null?0:t.length;return i?(e=r||e===n?1:D(e),e=i-e,Dt(t,0,e<0?0:e)):[]}function Af(t,e){return t&&t.length?vi(t,S(e,3),!0,!0):[]}function Xf(t,e){return t&&t.length?vi(t,S(e,3),!0):[]}function Rf(t,e,r,i){var o=t==null?0:t.length;return o?(r&&typeof r!=\"number\"&&vt(t,e,r)&&(r=0,i=o),mc(t,e,r,i)):[]}function ss(t,e,r){var i=t==null?0:t.length;if(!i)return-1;var o=r==null?0:D(r);return o<0&&(o=st(i+o,0)),Zr(t,S(e,3),o)}function as(t,e,r){var i=t==null?0:t.length;if(!i)return-1;var o=i-1;return r!==n&&(o=D(r),o=r<0?st(i+o,0):ft(o,i-1)),Zr(t,S(e,3),o,!0)}function ls(t){var e=t==null?0:t.length;return e?ct(t,1):[]}function Sf(t){var e=t==null?0:t.length;return e?ct(t,It):[]}function zf(t,e){var r=t==null?0:t.length;return r?(e=e===n?1:D(e),ct(t,e)):[]}function Uf(t){for(var e=-1,r=t==null?0:t.length,i={};++e<r;){var o=t[e];i[o[0]]=o[1]}return i}function cs(t){return t&&t.length?t[0]:n}function Yf(t,e,r){var i=t==null?0:t.length;if(!i)return-1;var o=r==null?0:D(r);return o<0&&(o=st(i+o,0)),$e(t,e,o)}function Of(t){var e=t==null?0:t.length;return e?Dt(t,0,-1):[]}var Ff=L(function(t){var e=$(t,Yn);return e.length&&e[0]===t[0]?bn(e):[]}),Tf=L(function(t){var e=Mt(t),r=$(t,Yn);return e===Mt(r)?e=n:r.pop(),r.length&&r[0]===t[0]?bn(r,S(e,2)):[]}),Nf=L(function(t){var e=Mt(t),r=$(t,Yn);return e=typeof e==\"function\"?e:n,e&&r.pop(),r.length&&r[0]===t[0]?bn(r,n,e):[]});function Df(t,e){return t==null?\"\":Yl.call(t,e)}function Mt(t){var e=t==null?0:t.length;return e?t[e-1]:n}function Mf(t,e,r){var i=t==null?0:t.length;if(!i)return-1;var o=i;return r!==n&&(o=D(r),o=o<0?st(i+o,0):ft(o,i-1)),e===e?vl(t,e,o):Zr(t,Vo,o,!0)}function Lf(t,e){return t&&t.length?xu(t,D(e)):n}var Wf=L(fs);function fs(t,e){return t&&t.length&&e&&e.length?An(t,e):t}function Pf(t,e,r){return t&&t.length&&e&&e.length?An(t,e,S(r,2)):t}function If(t,e,r){return t&&t.length&&e&&e.length?An(t,e,n,r):t}var Hf=fe(function(t,e){var r=t==null?0:t.length,i=pn(t,e);return Cu(t,$(e,function(o){return he(o,r)?+o:o}).sort(Fu)),i});function Vf(t,e){var r=[];if(!(t&&t.length))return r;var i=-1,o=[],s=t.length;for(e=S(e,3);++i<s;){var a=t[i];e(a,i,t)&&(r.push(a),o.push(i))}return Cu(t,o),r}function qn(t){return t==null?t:Nl.call(t)}function Bf(t,e,r){var i=t==null?0:t.length;return i?(r&&typeof r!=\"number\"&&vt(t,e,r)?(e=0,r=i):(e=e==null?0:D(e),r=r===n?i:D(r)),Dt(t,e,r)):[]}function qf(t,e){return _i(t,e)}function Jf(t,e,r){return Sn(t,e,S(r,2))}function Kf(t,e){var r=t==null?0:t.length;if(r){var i=_i(t,e);if(i<r&&Kt(t[i],e))return i}return-1}function Zf(t,e){return _i(t,e,!0)}function jf(t,e,r){return Sn(t,e,S(r,2),!0)}function Gf(t,e){var r=t==null?0:t.length;if(r){var i=_i(t,e,!0)-1;if(Kt(t[i],e))return i}return-1}function Qf(t){return t&&t.length?Au(t):[]}function $f(t,e){return t&&t.length?Au(t,S(e,2)):[]}function th(t){var e=t==null?0:t.length;return e?Dt(t,1,e):[]}function eh(t,e,r){return t&&t.length?(e=r||e===n?1:D(e),Dt(t,0,e<0?0:e)):[]}function rh(t,e,r){var i=t==null?0:t.length;return i?(e=r||e===n?1:D(e),e=i-e,Dt(t,e<0?0:e,i)):[]}function ih(t,e){return t&&t.length?vi(t,S(e,3),!1,!0):[]}function nh(t,e){return t&&t.length?vi(t,S(e,3)):[]}var oh=L(function(t){return ke(ct(t,1,it,!0))}),uh=L(function(t){var e=Mt(t);return it(e)&&(e=n),ke(ct(t,1,it,!0),S(e,2))}),sh=L(function(t){var e=Mt(t);return e=typeof e==\"function\"?e:n,ke(ct(t,1,it,!0),n,e)});function ah(t){return t&&t.length?ke(t):[]}function lh(t,e){return t&&t.length?ke(t,S(e,2)):[]}function ch(t,e){return e=typeof e==\"function\"?e:n,t&&t.length?ke(t,n,e):[]}function Jn(t){if(!(t&&t.length))return[];var e=0;return t=pe(t,function(r){if(it(r))return e=st(r.length,e),!0}),cn(e,function(r){return $(t,sn(r))})}function hs(t,e){if(!(t&&t.length))return[];var r=Jn(t);return e==null?r:$(r,function(i){return Ct(e,n,i)})}var fh=L(function(t,e){return it(t)?Rr(t,e):[]}),hh=L(function(t){return Un(pe(t,it))}),dh=L(function(t){var e=Mt(t);return it(e)&&(e=n),Un(pe(t,it),S(e,2))}),gh=L(function(t){var e=Mt(t);return e=typeof e==\"function\"?e:n,Un(pe(t,it),n,e)}),_h=L(Jn);function vh(t,e){return zu(t||[],e||[],Xr)}function yh(t,e){return zu(t||[],e||[],Ur)}var ph=L(function(t){var e=t.length,r=e>1?t[e-1]:n;return r=typeof r==\"function\"?(t.pop(),r):n,hs(t,r)});function ds(t){var e=u(t);return e.__chain__=!0,e}function mh(t,e){return e(t),t}function Ei(t,e){return e(t)}var wh=fe(function(t){var e=t.length,r=e?t[0]:0,i=this.__wrapped__,o=function(s){return pn(s,t)};return e>1||this.__actions__.length||!(i instanceof P)||!he(r)?this.thru(o):(i=i.slice(r,+r+(e?1:0)),i.__actions__.push({func:Ei,args:[o],thisArg:n}),new Tt(i,this.__chain__).thru(function(s){return e&&!s.length&&s.push(n),s}))});function xh(){return ds(this)}function bh(){return new Tt(this.value(),this.__chain__)}function kh(){this.__values__===n&&(this.__values__=Xs(this.value()));var t=this.__index__>=this.__values__.length,e=t?n:this.__values__[this.__index__++];return{done:t,value:e}}function Ch(){return this}function Eh(t){for(var e,r=this;r instanceof ci;){var i=us(r);i.__index__=0,i.__values__=n,e?o.__wrapped__=i:e=i;var o=i;r=r.__wrapped__}return o.__wrapped__=t,e}function Ah(){var t=this.__wrapped__;if(t instanceof P){var e=t;return this.__actions__.length&&(e=new P(this)),e=e.reverse(),e.__actions__.push({func:Ei,args:[qn],thisArg:n}),new Tt(e,this.__chain__)}return this.thru(qn)}function Xh(){return Su(this.__wrapped__,this.__actions__)}var Rh=yi(function(t,e,r){J.call(t,r)?++t[r]:le(t,r,1)});function Sh(t,e,r){var i=T(t)?Io:pc;return r&&vt(t,e,r)&&(e=n),i(t,S(e,3))}function zh(t,e){var r=T(t)?pe:hu;return r(t,S(e,3))}var Uh=Wu(ss),Yh=Wu(as);function Oh(t,e){return ct(Ai(t,e),1)}function Fh(t,e){return ct(Ai(t,e),It)}function Th(t,e,r){return r=r===n?1:D(r),ct(Ai(t,e),r)}function gs(t,e){var r=T(t)?Ot:be;return r(t,S(e,3))}function _s(t,e){var r=T(t)?$a:fu;return r(t,S(e,3))}var Nh=yi(function(t,e,r){J.call(t,r)?t[r].push(e):le(t,r,[e])});function Dh(t,e,r,i){t=xt(t)?t:fr(t),r=r&&!i?D(r):0;var o=t.length;return r<0&&(r=st(o+r,0)),Ui(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&$e(t,e,r)>-1}var Mh=L(function(t,e,r){var i=-1,o=typeof e==\"function\",s=xt(t)?v(t.length):[];return be(t,function(a){s[++i]=o?Ct(e,a,r):Sr(a,e,r)}),s}),Lh=yi(function(t,e,r){le(t,r,e)});function Ai(t,e){var r=T(t)?$:pu;return r(t,S(e,3))}function Wh(t,e,r,i){return t==null?[]:(T(e)||(e=e==null?[]:[e]),r=i?n:r,T(r)||(r=r==null?[]:[r]),bu(t,e,r))}var Ph=yi(function(t,e,r){t[r?0:1].push(e)},function(){return[[],[]]});function Ih(t,e,r){var i=T(t)?on:qo,o=arguments.length<3;return i(t,S(e,4),r,o,be)}function Hh(t,e,r){var i=T(t)?tl:qo,o=arguments.length<3;return i(t,S(e,4),r,o,fu)}function Vh(t,e){var r=T(t)?pe:hu;return r(t,Si(S(e,3)))}function Bh(t){var e=T(t)?su:Nc;return e(t)}function qh(t,e,r){(r?vt(t,e,r):e===n)?e=1:e=D(e);var i=T(t)?dc:Dc;return i(t,e)}function Jh(t){var e=T(t)?gc:Lc;return e(t)}function Kh(t){if(t==null)return 0;if(xt(t))return Ui(t)?er(t):t.length;var e=ht(t);return e==Vt||e==Bt?t.size:Cn(t).length}function Zh(t,e,r){var i=T(t)?un:Wc;return r&&vt(t,e,r)&&(e=n),i(t,S(e,3))}var jh=L(function(t,e){if(t==null)return[];var r=e.length;return r>1&&vt(t,e[0],e[1])?e=[]:r>2&&vt(e[0],e[1],e[2])&&(e=[e[0]]),bu(t,ct(e,1),[])}),Xi=Sl||function(){return lt.Date.now()};function Gh(t,e){if(typeof e!=\"function\")throw new Ft(N);return t=D(t),function(){if(--t<1)return e.apply(this,arguments)}}function vs(t,e,r){return e=r?n:e,e=t&&e==null?t.length:e,ce(t,ot,n,n,n,n,e)}function ys(t,e){var r;if(typeof e!=\"function\")throw new Ft(N);return t=D(t),function(){return--t>0&&(r=e.apply(this,arguments)),t<=1&&(e=n),r}}var Kn=L(function(t,e,r){var i=dt;if(r.length){var o=we(r,lr(Kn));i|=Pt}return ce(t,i,e,r,o)}),ps=L(function(t,e,r){var i=dt|ye;if(r.length){var o=we(r,lr(ps));i|=Pt}return ce(e,i,t,r,o)});function ms(t,e,r){e=r?n:e;var i=ce(t,mt,n,n,n,n,n,e);return i.placeholder=ms.placeholder,i}function ws(t,e,r){e=r?n:e;var i=ce(t,Xe,n,n,n,n,n,e);return i.placeholder=ws.placeholder,i}function xs(t,e,r){var i,o,s,a,f,d,p=0,w=!1,x=!1,E=!0;if(typeof t!=\"function\")throw new Ft(N);e=Lt(e)||0,et(r)&&(w=!!r.leading,x=\"maxWait\"in r,s=x?st(Lt(r.maxWait)||0,e):s,E=\"trailing\"in r?!!r.trailing:E);function X(nt){var Zt=i,_e=o;return i=o=n,p=nt,a=t.apply(_e,Zt),a}function U(nt){return p=nt,f=Fr(W,e),w?X(nt):a}function M(nt){var Zt=nt-d,_e=nt-p,Ws=e-Zt;return x?ft(Ws,s-_e):Ws}function Y(nt){var Zt=nt-d,_e=nt-p;return d===n||Zt>=e||Zt<0||x&&_e>=s}function W(){var nt=Xi();if(Y(nt))return H(nt);f=Fr(W,M(nt))}function H(nt){return f=n,E&&i?X(nt):(i=o=n,a)}function Rt(){f!==n&&Uu(f),p=0,i=d=o=f=n}function yt(){return f===n?a:H(Xi())}function St(){var nt=Xi(),Zt=Y(nt);if(i=arguments,o=this,d=nt,Zt){if(f===n)return U(d);if(x)return Uu(f),f=Fr(W,e),X(d)}return f===n&&(f=Fr(W,e)),a}return St.cancel=Rt,St.flush=yt,St}var Qh=L(function(t,e){return cu(t,1,e)}),$h=L(function(t,e,r){return cu(t,Lt(e)||0,r)});function td(t){return ce(t,dr)}function Ri(t,e){if(typeof t!=\"function\"||e!=null&&typeof e!=\"function\")throw new Ft(N);var r=function(){var i=arguments,o=e?e.apply(this,i):i[0],s=r.cache;if(s.has(o))return s.get(o);var a=t.apply(this,i);return r.cache=s.set(o,a)||s,a};return r.cache=new(Ri.Cache||ae),r}Ri.Cache=ae;function Si(t){if(typeof t!=\"function\")throw new Ft(N);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function ed(t){return ys(2,t)}var rd=Pc(function(t,e){e=e.length==1&&T(e[0])?$(e[0],Et(S())):$(ct(e,1),Et(S()));var r=e.length;return L(function(i){for(var o=-1,s=ft(i.length,r);++o<s;)i[o]=e[o].call(this,i[o]);return Ct(t,this,i)})}),Zn=L(function(t,e){var r=we(e,lr(Zn));return ce(t,Pt,n,e,r)}),bs=L(function(t,e){var r=we(e,lr(bs));return ce(t,Re,n,e,r)}),id=fe(function(t,e){return ce(t,gt,n,n,n,e)});function nd(t,e){if(typeof t!=\"function\")throw new Ft(N);return e=e===n?e:D(e),L(t,e)}function od(t,e){if(typeof t!=\"function\")throw new Ft(N);return e=e==null?0:st(D(e),0),L(function(r){var i=r[e],o=Ee(r,0,e);return i&&me(o,i),Ct(t,this,o)})}function ud(t,e,r){var i=!0,o=!0;if(typeof t!=\"function\")throw new Ft(N);return et(r)&&(i=\"leading\"in r?!!r.leading:i,o=\"trailing\"in r?!!r.trailing:o),xs(t,e,{leading:i,maxWait:e,trailing:o})}function sd(t){return vs(t,1)}function ad(t,e){return Zn(On(e),t)}function ld(){if(!arguments.length)return[];var t=arguments[0];return T(t)?t:[t]}function cd(t){return Nt(t,Ut)}function fd(t,e){return e=typeof e==\"function\"?e:n,Nt(t,Ut,e)}function hd(t){return Nt(t,te|Ut)}function dd(t,e){return e=typeof e==\"function\"?e:n,Nt(t,te|Ut,e)}function gd(t,e){return e==null||lu(t,e,at(e))}function Kt(t,e){return t===e||t!==t&&e!==e}var _d=xi(xn),vd=xi(function(t,e){return t>=e}),Le=_u((function(){return arguments})())?_u:function(t){return rt(t)&&J.call(t,\"callee\")&&!eu.call(t,\"callee\")},T=v.isArray,yd=No?Et(No):Cc;function xt(t){return t!=null&&zi(t.length)&&!de(t)}function it(t){return rt(t)&&xt(t)}function pd(t){return t===!0||t===!1||rt(t)&&_t(t)==gr}var Ae=Ul||uo,md=Do?Et(Do):Ec;function wd(t){return rt(t)&&t.nodeType===1&&!Tr(t)}function xd(t){if(t==null)return!0;if(xt(t)&&(T(t)||typeof t==\"string\"||typeof t.splice==\"function\"||Ae(t)||cr(t)||Le(t)))return!t.length;var e=ht(t);if(e==Vt||e==Bt)return!t.size;if(Or(t))return!Cn(t).length;for(var r in t)if(J.call(t,r))return!1;return!0}function bd(t,e){return zr(t,e)}function kd(t,e,r){r=typeof r==\"function\"?r:n;var i=r?r(t,e):n;return i===n?zr(t,e,n,r):!!i}function jn(t){if(!rt(t))return!1;var e=_t(t);return e==Ir||e==Bs||typeof t.message==\"string\"&&typeof t.name==\"string\"&&!Tr(t)}function Cd(t){return typeof t==\"number\"&&iu(t)}function de(t){if(!et(t))return!1;var e=_t(t);return e==Hr||e==lo||e==Vs||e==Js}function ks(t){return typeof t==\"number\"&&t==D(t)}function zi(t){return typeof t==\"number\"&&t>-1&&t%1==0&&t<=ee}function et(t){var e=typeof t;return t!=null&&(e==\"object\"||e==\"function\")}function rt(t){return t!=null&&typeof t==\"object\"}var Cs=Mo?Et(Mo):Xc;function Ed(t,e){return t===e||kn(t,e,Wn(e))}function Ad(t,e,r){return r=typeof r==\"function\"?r:n,kn(t,e,Wn(e),r)}function Xd(t){return Es(t)&&t!=+t}function Rd(t){if(ff(t))throw new F(m);return vu(t)}function Sd(t){return t===null}function zd(t){return t==null}function Es(t){return typeof t==\"number\"||rt(t)&&_t(t)==vr}function Tr(t){if(!rt(t)||_t(t)!=ue)return!1;var e=ii(t);if(e===null)return!0;var r=J.call(e,\"constructor\")&&e.constructor;return typeof r==\"function\"&&r instanceof r&&$r.call(r)==El}var Gn=Lo?Et(Lo):Rc;function Ud(t){return ks(t)&&t>=-ee&&t<=ee}var As=Wo?Et(Wo):Sc;function Ui(t){return typeof t==\"string\"||!T(t)&&rt(t)&&_t(t)==pr}function Xt(t){return typeof t==\"symbol\"||rt(t)&&_t(t)==Vr}var cr=Po?Et(Po):zc;function Yd(t){return t===n}function Od(t){return rt(t)&&ht(t)==mr}function Fd(t){return rt(t)&&_t(t)==Zs}var Td=xi(En),Nd=xi(function(t,e){return t<=e});function Xs(t){if(!t)return[];if(xt(t))return Ui(t)?qt(t):wt(t);if(br&&t[br])return dl(t[br]());var e=ht(t),r=e==Vt?hn:e==Bt?jr:fr;return r(t)}function ge(t){if(!t)return t===0?t:0;if(t=Lt(t),t===It||t===-It){var e=t<0?-1:1;return e*C}return t===t?t:0}function D(t){var e=ge(t),r=e%1;return e===e?r?e-r:e:0}function Rs(t){return t?Te(D(t),0,Q):0}function Lt(t){if(typeof t==\"number\")return t;if(Xt(t))return B;if(et(t)){var e=typeof t.valueOf==\"function\"?t.valueOf():t;t=et(e)?e+\"\":e}if(typeof t!=\"string\")return t===0?t:+t;t=Jo(t);var r=va.test(t);return r||pa.test(t)?ja(t.slice(2),r?2:8):_a.test(t)?B:+t}function Ss(t){return ie(t,bt(t))}function Dd(t){return t?Te(D(t),-ee,ee):t===0?t:0}function q(t){return t==null?\"\":At(t)}var Md=sr(function(t,e){if(Or(e)||xt(e)){ie(e,at(e),t);return}for(var r in e)J.call(e,r)&&Xr(t,r,e[r])}),zs=sr(function(t,e){ie(e,bt(e),t)}),Yi=sr(function(t,e,r,i){ie(e,bt(e),t,i)}),Ld=sr(function(t,e,r,i){ie(e,at(e),t,i)}),Wd=fe(pn);function Pd(t,e){var r=ur(t);return e==null?r:au(r,e)}var Id=L(function(t,e){t=K(t);var r=-1,i=e.length,o=i>2?e[2]:n;for(o&&vt(e[0],e[1],o)&&(i=1);++r<i;)for(var s=e[r],a=bt(s),f=-1,d=a.length;++f<d;){var p=a[f],w=t[p];(w===n||Kt(w,ir[p])&&!J.call(t,p))&&(t[p]=s[p])}return t}),Hd=L(function(t){return t.push(n,Ju),Ct(Us,n,t)});function Vd(t,e){return Ho(t,S(e,3),re)}function Bd(t,e){return Ho(t,S(e,3),wn)}function qd(t,e){return t==null?t:mn(t,S(e,3),bt)}function Jd(t,e){return t==null?t:du(t,S(e,3),bt)}function Kd(t,e){return t&&re(t,S(e,3))}function Zd(t,e){return t&&wn(t,S(e,3))}function jd(t){return t==null?[]:di(t,at(t))}function Gd(t){return t==null?[]:di(t,bt(t))}function Qn(t,e,r){var i=t==null?n:Ne(t,e);return i===n?r:i}function Qd(t,e){return t!=null&&ju(t,e,wc)}function $n(t,e){return t!=null&&ju(t,e,xc)}var $d=Iu(function(t,e,r){e!=null&&typeof e.toString!=\"function\"&&(e=ti.call(e)),t[e]=r},eo(kt)),tg=Iu(function(t,e,r){e!=null&&typeof e.toString!=\"function\"&&(e=ti.call(e)),J.call(t,e)?t[e].push(r):t[e]=[r]},S),eg=L(Sr);function at(t){return xt(t)?uu(t):Cn(t)}function bt(t){return xt(t)?uu(t,!0):Uc(t)}function rg(t,e){var r={};return e=S(e,3),re(t,function(i,o,s){le(r,e(i,o,s),i)}),r}function ig(t,e){var r={};return e=S(e,3),re(t,function(i,o,s){le(r,o,e(i,o,s))}),r}var ng=sr(function(t,e,r){gi(t,e,r)}),Us=sr(function(t,e,r,i){gi(t,e,r,i)}),og=fe(function(t,e){var r={};if(t==null)return r;var i=!1;e=$(e,function(s){return s=Ce(s,t),i||(i=s.length>1),s}),ie(t,Mn(t),r),i&&(r=Nt(r,te|Lr|Ut,Qc));for(var o=e.length;o--;)zn(r,e[o]);return r});function ug(t,e){return Ys(t,Si(S(e)))}var sg=fe(function(t,e){return t==null?{}:Oc(t,e)});function Ys(t,e){if(t==null)return{};var r=$(Mn(t),function(i){return[i]});return e=S(e),ku(t,r,function(i,o){return e(i,o[0])})}function ag(t,e,r){e=Ce(e,t);var i=-1,o=e.length;for(o||(o=1,t=n);++i<o;){var s=t==null?n:t[ne(e[i])];s===n&&(i=o,s=r),t=de(s)?s.call(t):s}return t}function lg(t,e,r){return t==null?t:Ur(t,e,r)}function cg(t,e,r,i){return i=typeof i==\"function\"?i:n,t==null?t:Ur(t,e,r,i)}var Os=Bu(at),Fs=Bu(bt);function fg(t,e,r){var i=T(t),o=i||Ae(t)||cr(t);if(e=S(e,4),r==null){var s=t&&t.constructor;o?r=i?new s:[]:et(t)?r=de(s)?ur(ii(t)):{}:r={}}return(o?Ot:re)(t,function(a,f,d){return e(r,a,f,d)}),r}function hg(t,e){return t==null?!0:zn(t,e)}function dg(t,e,r){return t==null?t:Ru(t,e,On(r))}function gg(t,e,r,i){return i=typeof i==\"function\"?i:n,t==null?t:Ru(t,e,On(r),i)}function fr(t){return t==null?[]:fn(t,at(t))}function _g(t){return t==null?[]:fn(t,bt(t))}function vg(t,e,r){return r===n&&(r=e,e=n),r!==n&&(r=Lt(r),r=r===r?r:0),e!==n&&(e=Lt(e),e=e===e?e:0),Te(Lt(t),e,r)}function yg(t,e,r){return e=ge(e),r===n?(r=e,e=0):r=ge(r),t=Lt(t),bc(t,e,r)}function pg(t,e,r){if(r&&typeof r!=\"boolean\"&&vt(t,e,r)&&(e=r=n),r===n&&(typeof e==\"boolean\"?(r=e,e=n):typeof t==\"boolean\"&&(r=t,t=n)),t===n&&e===n?(t=0,e=1):(t=ge(t),e===n?(e=t,t=0):e=ge(e)),t>e){var i=t;t=e,e=i}if(r||t%1||e%1){var o=nu();return ft(t+o*(e-t+Za(\"1e-\"+((o+\"\").length-1))),e)}return Xn(t,e)}var mg=ar(function(t,e,r){return e=e.toLowerCase(),t+(r?Ts(e):e)});function Ts(t){return to(q(t).toLowerCase())}function Ns(t){return t=q(t),t&&t.replace(wa,al).replace(La,\"\")}function wg(t,e,r){t=q(t),e=At(e);var i=t.length;r=r===n?i:Te(D(r),0,i);var o=r;return r-=e.length,r>=0&&t.slice(r,o)==e}function xg(t){return t=q(t),t&&ta.test(t)?t.replace(ho,ll):t}function bg(t){return t=q(t),t&&ua.test(t)?t.replace(Ki,\"\\\\$&\"):t}var kg=ar(function(t,e,r){return t+(r?\"-\":\"\")+e.toLowerCase()}),Cg=ar(function(t,e,r){return t+(r?\" \":\"\")+e.toLowerCase()}),Eg=Lu(\"toLowerCase\");function Ag(t,e,r){t=q(t),e=D(e);var i=e?er(t):0;if(!e||i>=e)return t;var o=(e-i)/2;return wi(si(o),r)+t+wi(ui(o),r)}function Xg(t,e,r){t=q(t),e=D(e);var i=e?er(t):0;return e&&i<e?t+wi(e-i,r):t}function Rg(t,e,r){t=q(t),e=D(e);var i=e?er(t):0;return e&&i<e?wi(e-i,r)+t:t}function Sg(t,e,r){return r||e==null?e=0:e&&(e=+e),Tl(q(t).replace(Zi,\"\"),e||0)}function zg(t,e,r){return(r?vt(t,e,r):e===n)?e=1:e=D(e),Rn(q(t),e)}function Ug(){var t=arguments,e=q(t[0]);return t.length<3?e:e.replace(t[1],t[2])}var Yg=ar(function(t,e,r){return t+(r?\"_\":\"\")+e.toLowerCase()});function Og(t,e,r){return r&&typeof r!=\"number\"&&vt(t,e,r)&&(e=r=n),r=r===n?Q:r>>>0,r?(t=q(t),t&&(typeof e==\"string\"||e!=null&&!Gn(e))&&(e=At(e),!e&&tr(t))?Ee(qt(t),0,r):t.split(e,r)):[]}var Fg=ar(function(t,e,r){return t+(r?\" \":\"\")+to(e)});function Tg(t,e,r){return t=q(t),r=r==null?0:Te(D(r),0,t.length),e=At(e),t.slice(r,r+e.length)==e}function Ng(t,e,r){var i=u.templateSettings;r&&vt(t,e,r)&&(e=n),t=q(t),e=Yi({},e,i,qu);var o=Yi({},e.imports,i.imports,qu),s=at(o),a=fn(o,s),f,d,p=0,w=e.interpolate||Br,x=\"__p += '\",E=dn((e.escape||Br).source+\"|\"+w.source+\"|\"+(w===go?ga:Br).source+\"|\"+(e.evaluate||Br).source+\"|$\",\"g\"),X=\"//# sourceURL=\"+(J.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++Va+\"]\")+`\n`;t.replace(E,function(Y,W,H,Rt,yt,St){return H||(H=Rt),x+=t.slice(p,St).replace(xa,cl),W&&(f=!0,x+=`' +\n__e(`+W+`) +\n'`),yt&&(d=!0,x+=`';\n`+yt+`;\n__p += '`),H&&(x+=`' +\n((__t = (`+H+`)) == null ? '' : __t) +\n'`),p=St+Y.length,Y}),x+=`';\n`;var U=J.call(e,\"variable\")&&e.variable;if(!U)x=`with (obj) {\n`+x+`\n}\n`;else if(ha.test(U))throw new F(tt);x=(d?x.replace(js,\"\"):x).replace(Gs,\"$1\").replace(Qs,\"$1;\"),x=\"function(\"+(U||\"obj\")+`) {\n`+(U?\"\":`obj || (obj = {});\n`)+\"var __t, __p = ''\"+(f?\", __e = _.escape\":\"\")+(d?`, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n`:`;\n`)+x+`return __p\n}`;var M=Ms(function(){return V(s,X+\"return \"+x).apply(n,a)});if(M.source=x,jn(M))throw M;return M}function Dg(t){return q(t).toLowerCase()}function Mg(t){return q(t).toUpperCase()}function Lg(t,e,r){if(t=q(t),t&&(r||e===n))return Jo(t);if(!t||!(e=At(e)))return t;var i=qt(t),o=qt(e),s=Ko(i,o),a=Zo(i,o)+1;return Ee(i,s,a).join(\"\")}function Wg(t,e,r){if(t=q(t),t&&(r||e===n))return t.slice(0,Go(t)+1);if(!t||!(e=At(e)))return t;var i=qt(t),o=Zo(i,qt(e))+1;return Ee(i,0,o).join(\"\")}function Pg(t,e,r){if(t=q(t),t&&(r||e===n))return t.replace(Zi,\"\");if(!t||!(e=At(e)))return t;var i=qt(t),o=Ko(i,qt(e));return Ee(i,o).join(\"\")}function Ig(t,e){var r=Je,i=Ke;if(et(e)){var o=\"separator\"in e?e.separator:o;r=\"length\"in e?D(e.length):r,i=\"omission\"in e?At(e.omission):i}t=q(t);var s=t.length;if(tr(t)){var a=qt(t);s=a.length}if(r>=s)return t;var f=r-er(i);if(f<1)return i;var d=a?Ee(a,0,f).join(\"\"):t.slice(0,f);if(o===n)return d+i;if(a&&(f+=d.length-f),Gn(o)){if(t.slice(f).search(o)){var p,w=d;for(o.global||(o=dn(o.source,q(_o.exec(o))+\"g\")),o.lastIndex=0;p=o.exec(w);)var x=p.index;d=d.slice(0,x===n?f:x)}}else if(t.indexOf(At(o),f)!=f){var E=d.lastIndexOf(o);E>-1&&(d=d.slice(0,E))}return d+i}function Hg(t){return t=q(t),t&&$s.test(t)?t.replace(fo,yl):t}var Vg=ar(function(t,e,r){return t+(r?\" \":\"\")+e.toUpperCase()}),to=Lu(\"toUpperCase\");function Ds(t,e,r){return t=q(t),e=r?n:e,e===n?hl(t)?wl(t):il(t):t.match(e)||[]}var Ms=L(function(t,e){try{return Ct(t,n,e)}catch(r){return jn(r)?r:new F(r)}}),Bg=fe(function(t,e){return Ot(e,function(r){r=ne(r),le(t,r,Kn(t[r],t))}),t});function qg(t){var e=t==null?0:t.length,r=S();return t=e?$(t,function(i){if(typeof i[1]!=\"function\")throw new Ft(N);return[r(i[0]),i[1]]}):[],L(function(i){for(var o=-1;++o<e;){var s=t[o];if(Ct(s[0],this,i))return Ct(s[1],this,i)}})}function Jg(t){return yc(Nt(t,te))}function eo(t){return function(){return t}}function Kg(t,e){return t==null||t!==t?e:t}var Zg=Pu(),jg=Pu(!0);function kt(t){return t}function ro(t){return yu(typeof t==\"function\"?t:Nt(t,te))}function Gg(t){return mu(Nt(t,te))}function Qg(t,e){return wu(t,Nt(e,te))}var $g=L(function(t,e){return function(r){return Sr(r,t,e)}}),t_=L(function(t,e){return function(r){return Sr(t,r,e)}});function io(t,e,r){var i=at(e),o=di(e,i);r==null&&!(et(e)&&(o.length||!i.length))&&(r=e,e=t,t=this,o=di(e,at(e)));var s=!(et(r)&&\"chain\"in r)||!!r.chain,a=de(t);return Ot(o,function(f){var d=e[f];t[f]=d,a&&(t.prototype[f]=function(){var p=this.__chain__;if(s||p){var w=t(this.__wrapped__),x=w.__actions__=wt(this.__actions__);return x.push({func:d,args:arguments,thisArg:t}),w.__chain__=p,w}return d.apply(t,me([this.value()],arguments))})}),t}function e_(){return lt._===this&&(lt._=Al),this}function no(){}function r_(t){return t=D(t),L(function(e){return xu(e,t)})}var i_=Tn($),n_=Tn(Io),o_=Tn(un);function Ls(t){return In(t)?sn(ne(t)):Fc(t)}function u_(t){return function(e){return t==null?n:Ne(t,e)}}var s_=Hu(),a_=Hu(!0);function oo(){return[]}function uo(){return!1}function l_(){return{}}function c_(){return\"\"}function f_(){return!0}function h_(t,e){if(t=D(t),t<1||t>ee)return[];var r=Q,i=ft(t,Q);e=S(e),t-=Q;for(var o=cn(i,e);++r<t;)e(r);return o}function d_(t){return T(t)?$(t,ne):Xt(t)?[t]:wt(os(q(t)))}function g_(t){var e=++Cl;return q(t)+e}var __=mi(function(t,e){return t+e},0),v_=Nn(\"ceil\"),y_=mi(function(t,e){return t/e},1),p_=Nn(\"floor\");function m_(t){return t&&t.length?hi(t,kt,xn):n}function w_(t,e){return t&&t.length?hi(t,S(e,2),xn):n}function x_(t){return Bo(t,kt)}function b_(t,e){return Bo(t,S(e,2))}function k_(t){return t&&t.length?hi(t,kt,En):n}function C_(t,e){return t&&t.length?hi(t,S(e,2),En):n}var E_=mi(function(t,e){return t*e},1),A_=Nn(\"round\"),X_=mi(function(t,e){return t-e},0);function R_(t){return t&&t.length?ln(t,kt):0}function S_(t,e){return t&&t.length?ln(t,S(e,2)):0}return u.after=Gh,u.ary=vs,u.assign=Md,u.assignIn=zs,u.assignInWith=Yi,u.assignWith=Ld,u.at=Wd,u.before=ys,u.bind=Kn,u.bindAll=Bg,u.bindKey=ps,u.castArray=ld,u.chain=ds,u.chunk=pf,u.compact=mf,u.concat=wf,u.cond=qg,u.conforms=Jg,u.constant=eo,u.countBy=Rh,u.create=Pd,u.curry=ms,u.curryRight=ws,u.debounce=xs,u.defaults=Id,u.defaultsDeep=Hd,u.defer=Qh,u.delay=$h,u.difference=xf,u.differenceBy=bf,u.differenceWith=kf,u.drop=Cf,u.dropRight=Ef,u.dropRightWhile=Af,u.dropWhile=Xf,u.fill=Rf,u.filter=zh,u.flatMap=Oh,u.flatMapDeep=Fh,u.flatMapDepth=Th,u.flatten=ls,u.flattenDeep=Sf,u.flattenDepth=zf,u.flip=td,u.flow=Zg,u.flowRight=jg,u.fromPairs=Uf,u.functions=jd,u.functionsIn=Gd,u.groupBy=Nh,u.initial=Of,u.intersection=Ff,u.intersectionBy=Tf,u.intersectionWith=Nf,u.invert=$d,u.invertBy=tg,u.invokeMap=Mh,u.iteratee=ro,u.keyBy=Lh,u.keys=at,u.keysIn=bt,u.map=Ai,u.mapKeys=rg,u.mapValues=ig,u.matches=Gg,u.matchesProperty=Qg,u.memoize=Ri,u.merge=ng,u.mergeWith=Us,u.method=$g,u.methodOf=t_,u.mixin=io,u.negate=Si,u.nthArg=r_,u.omit=og,u.omitBy=ug,u.once=ed,u.orderBy=Wh,u.over=i_,u.overArgs=rd,u.overEvery=n_,u.overSome=o_,u.partial=Zn,u.partialRight=bs,u.partition=Ph,u.pick=sg,u.pickBy=Ys,u.property=Ls,u.propertyOf=u_,u.pull=Wf,u.pullAll=fs,u.pullAllBy=Pf,u.pullAllWith=If,u.pullAt=Hf,u.range=s_,u.rangeRight=a_,u.rearg=id,u.reject=Vh,u.remove=Vf,u.rest=nd,u.reverse=qn,u.sampleSize=qh,u.set=lg,u.setWith=cg,u.shuffle=Jh,u.slice=Bf,u.sortBy=jh,u.sortedUniq=Qf,u.sortedUniqBy=$f,u.split=Og,u.spread=od,u.tail=th,u.take=eh,u.takeRight=rh,u.takeRightWhile=ih,u.takeWhile=nh,u.tap=mh,u.throttle=ud,u.thru=Ei,u.toArray=Xs,u.toPairs=Os,u.toPairsIn=Fs,u.toPath=d_,u.toPlainObject=Ss,u.transform=fg,u.unary=sd,u.union=oh,u.unionBy=uh,u.unionWith=sh,u.uniq=ah,u.uniqBy=lh,u.uniqWith=ch,u.unset=hg,u.unzip=Jn,u.unzipWith=hs,u.update=dg,u.updateWith=gg,u.values=fr,u.valuesIn=_g,u.without=fh,u.words=Ds,u.wrap=ad,u.xor=hh,u.xorBy=dh,u.xorWith=gh,u.zip=_h,u.zipObject=vh,u.zipObjectDeep=yh,u.zipWith=ph,u.entries=Os,u.entriesIn=Fs,u.extend=zs,u.extendWith=Yi,io(u,u),u.add=__,u.attempt=Ms,u.camelCase=mg,u.capitalize=Ts,u.ceil=v_,u.clamp=vg,u.clone=cd,u.cloneDeep=hd,u.cloneDeepWith=dd,u.cloneWith=fd,u.conformsTo=gd,u.deburr=Ns,u.defaultTo=Kg,u.divide=y_,u.endsWith=wg,u.eq=Kt,u.escape=xg,u.escapeRegExp=bg,u.every=Sh,u.find=Uh,u.findIndex=ss,u.findKey=Vd,u.findLast=Yh,u.findLastIndex=as,u.findLastKey=Bd,u.floor=p_,u.forEach=gs,u.forEachRight=_s,u.forIn=qd,u.forInRight=Jd,u.forOwn=Kd,u.forOwnRight=Zd,u.get=Qn,u.gt=_d,u.gte=vd,u.has=Qd,u.hasIn=$n,u.head=cs,u.identity=kt,u.includes=Dh,u.indexOf=Yf,u.inRange=yg,u.invoke=eg,u.isArguments=Le,u.isArray=T,u.isArrayBuffer=yd,u.isArrayLike=xt,u.isArrayLikeObject=it,u.isBoolean=pd,u.isBuffer=Ae,u.isDate=md,u.isElement=wd,u.isEmpty=xd,u.isEqual=bd,u.isEqualWith=kd,u.isError=jn,u.isFinite=Cd,u.isFunction=de,u.isInteger=ks,u.isLength=zi,u.isMap=Cs,u.isMatch=Ed,u.isMatchWith=Ad,u.isNaN=Xd,u.isNative=Rd,u.isNil=zd,u.isNull=Sd,u.isNumber=Es,u.isObject=et,u.isObjectLike=rt,u.isPlainObject=Tr,u.isRegExp=Gn,u.isSafeInteger=Ud,u.isSet=As,u.isString=Ui,u.isSymbol=Xt,u.isTypedArray=cr,u.isUndefined=Yd,u.isWeakMap=Od,u.isWeakSet=Fd,u.join=Df,u.kebabCase=kg,u.last=Mt,u.lastIndexOf=Mf,u.lowerCase=Cg,u.lowerFirst=Eg,u.lt=Td,u.lte=Nd,u.max=m_,u.maxBy=w_,u.mean=x_,u.meanBy=b_,u.min=k_,u.minBy=C_,u.stubArray=oo,u.stubFalse=uo,u.stubObject=l_,u.stubString=c_,u.stubTrue=f_,u.multiply=E_,u.nth=Lf,u.noConflict=e_,u.noop=no,u.now=Xi,u.pad=Ag,u.padEnd=Xg,u.padStart=Rg,u.parseInt=Sg,u.random=pg,u.reduce=Ih,u.reduceRight=Hh,u.repeat=zg,u.replace=Ug,u.result=ag,u.round=A_,u.runInContext=h,u.sample=Bh,u.size=Kh,u.snakeCase=Yg,u.some=Zh,u.sortedIndex=qf,u.sortedIndexBy=Jf,u.sortedIndexOf=Kf,u.sortedLastIndex=Zf,u.sortedLastIndexBy=jf,u.sortedLastIndexOf=Gf,u.startCase=Fg,u.startsWith=Tg,u.subtract=X_,u.sum=R_,u.sumBy=S_,u.template=Ng,u.times=h_,u.toFinite=ge,u.toInteger=D,u.toLength=Rs,u.toLower=Dg,u.toNumber=Lt,u.toSafeInteger=Dd,u.toString=q,u.toUpper=Mg,u.trim=Lg,u.trimEnd=Wg,u.trimStart=Pg,u.truncate=Ig,u.unescape=Hg,u.uniqueId=g_,u.upperCase=Vg,u.upperFirst=to,u.each=gs,u.eachRight=_s,u.first=cs,io(u,(function(){var t={};return re(u,function(e,r){J.call(u.prototype,r)||(t[r]=e)}),t})(),{chain:!1}),u.VERSION=_,Ot([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){u[t].placeholder=u}),Ot([\"drop\",\"take\"],function(t,e){P.prototype[t]=function(r){r=r===n?1:st(D(r),0);var i=this.__filtered__&&!e?new P(this):this.clone();return i.__filtered__?i.__takeCount__=ft(r,i.__takeCount__):i.__views__.push({size:ft(r,Q),type:t+(i.__dir__<0?\"Right\":\"\")}),i},P.prototype[t+\"Right\"]=function(r){return this.reverse()[t](r).reverse()}}),Ot([\"filter\",\"map\",\"takeWhile\"],function(t,e){var r=e+1,i=r==Ze||r==Se;P.prototype[t]=function(o){var s=this.clone();return s.__iteratees__.push({iteratee:S(o,3),type:r}),s.__filtered__=s.__filtered__||i,s}}),Ot([\"head\",\"last\"],function(t,e){var r=\"take\"+(e?\"Right\":\"\");P.prototype[t]=function(){return this[r](1).value()[0]}}),Ot([\"initial\",\"tail\"],function(t,e){var r=\"drop\"+(e?\"\":\"Right\");P.prototype[t]=function(){return this.__filtered__?new P(this):this[r](1)}}),P.prototype.compact=function(){return this.filter(kt)},P.prototype.find=function(t){return this.filter(t).head()},P.prototype.findLast=function(t){return this.reverse().find(t)},P.prototype.invokeMap=L(function(t,e){return typeof t==\"function\"?new P(this):this.map(function(r){return Sr(r,t,e)})}),P.prototype.reject=function(t){return this.filter(Si(S(t)))},P.prototype.slice=function(t,e){t=D(t);var r=this;return r.__filtered__&&(t>0||e<0)?new P(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),e!==n&&(e=D(e),r=e<0?r.dropRight(-e):r.take(e-t)),r)},P.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},P.prototype.toArray=function(){return this.take(Q)},re(P.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=u[i?\"take\"+(e==\"last\"?\"Right\":\"\"):e],s=i||/^find/.test(e);o&&(u.prototype[e]=function(){var a=this.__wrapped__,f=i?[1]:arguments,d=a instanceof P,p=f[0],w=d||T(a),x=function(W){var H=o.apply(u,me([W],f));return i&&E?H[0]:H};w&&r&&typeof p==\"function\"&&p.length!=1&&(d=w=!1);var E=this.__chain__,X=!!this.__actions__.length,U=s&&!E,M=d&&!X;if(!s&&w){a=M?a:new P(this);var Y=t.apply(a,f);return Y.__actions__.push({func:Ei,args:[x],thisArg:n}),new Tt(Y,E)}return U&&M?t.apply(this,f):(Y=this.thru(x),U?i?Y.value()[0]:Y.value():Y)})}),Ot([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Gr[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",i=/^(?:pop|shift)$/.test(t);u.prototype[t]=function(){var o=arguments;if(i&&!this.__chain__){var s=this.value();return e.apply(T(s)?s:[],o)}return this[r](function(a){return e.apply(T(a)?a:[],o)})}}),re(P.prototype,function(t,e){var r=u[e];if(r){var i=r.name+\"\";J.call(or,i)||(or[i]=[]),or[i].push({name:e,func:r})}}),or[pi(n,ye).name]=[{name:\"wrapper\",func:n}],P.prototype.clone=Il,P.prototype.reverse=Hl,P.prototype.value=Vl,u.prototype.at=wh,u.prototype.chain=xh,u.prototype.commit=bh,u.prototype.next=kh,u.prototype.plant=Eh,u.prototype.reverse=Ah,u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=Xh,u.prototype.first=u.prototype.head,br&&(u.prototype[br]=Ch),u},rr=xl();Ue?((Ue.exports=rr)._=rr,en._=rr):lt._=rr}).call(Dr)})(Fi,Fi.exports);var Ps=Fi.exports;class Is{constructor(l){hr(this,\"_point\",0),hr(this,\"_start1\",0),hr(this,\"_start2\",0),hr(this,\"_origin\"),hr(this,\"_size\"),hr(this,\"_contentSize\"),this._origin=l.origin??l.size/2,this._size=l.size,this._point=l.translate,this._contentSize=l.contentSize}get point(){return this._point}get origin(){return this._origin}get start1(){return this._start1}get start2(){return this._start2}touch(l){this._start1=l-this._point}pinch(l,n,_){const g=this._origin,m=(l+n)/2;this._origin=g+(m-g-this._point)/_;const N=g-this._origin;this._point+=N-N*_,this._start1=l-this._point,this._start2=n-this._point}dragPinch(l,n){const _=(this._start1+this._start2)/2,g=(l+n)/2;this._point=g-_}dragTouch(l){this._point=l-this._start1}checkAndResetToWithin(l){const n=this._contentSize??this._size;if(n*l<this._size){this._origin=this._size/2,this._point=(this._size-n)*l/2;return}const _=(n-this._size)*l,g=(this._size-this._size*l)/2,m=this._size/2-this._origin-(this._size/2-this._origin)*l;this._point>m-g?this._point=m-g:this._point<g+m-_&&(this._point=g+m-_)}setPoint(l){this._point=l}setOrigin(l){this._origin=l}}var He=(c=>(c[c.zoomIn=0]=\"zoomIn\",c[c.zoomOut=1]=\"zoomOut\",c[c.moveLeft=2]=\"moveLeft\",c[c.moveRight=3]=\"moveRight\",c[c.moveUp=4]=\"moveUp\",c[c.moveDown=5]=\"moveDown\",c))(He||{});const H_={\"+\":0,\"-\":1,ArrowLeft:2,ArrowRight:3,ArrowUp:4,ArrowDown:5};function Hs(c,l,n,_){const g=(c-n)**2+(l-_)**2;return Math.sqrt(g)}const V_=[\"tabindex\"],B_=z_({__name:\"pinch-scroll-zoom\",props:{contentWidth:{},contentHeight:{},width:{},height:{},originX:{},originY:{},translateX:{default:0},translateY:{default:0},scale:{default:1},throttleDelay:{default:25},within:{type:Boolean,default:!0},minScale:{default:.3},maxScale:{default:5},wheelVelocity:{default:.001},draggable:{type:Boolean,default:!0},centered:{type:Boolean},keyActions:{type:Boolean,default:!1},tabindex:{},keyZoomVelocity:{default:.2},keyMoveVelocity:{default:10},keyControls:{},translate3d:{type:Boolean,default:!0}},emits:[\"stopDrag\",\"startDrag\",\"dragging\",\"scaling\"],setup(c,{expose:l,emit:n}){l({setData:oe,centralize:Ze,manualMove:Se,manualZoom:It});const _=c,g=Nr(()=>_.keyControls??H_),m=Nr(()=>_.tabindex===void 0&&_.keyActions?0:_.tabindex),N=T_(),tt=Ps.throttle(Xe,_.throttleDelay),z=Ps.debounce(Re,200),k=U_({touch1:!1,touch2:!1,currentScale:_.scale,startScale:_.scale,zoomIn:!1,zoomOut:!1,axisX:new Is({size:_.width,origin:_.originX,translate:_.translateX,contentSize:_.contentWidth}),axisY:new Is({size:_.height,origin:_.originY,translate:_.translateY,contentSize:_.contentHeight})});_.centered&&Ze();const $t=Nr(()=>({\"pinch-scroll-zoom--zoom-out\":k.zoomOut,\"pinch-scroll-zoom--zoom-in\":k.zoomIn})),te=Nr(()=>({width:`${_.width}px`,height:`${_.height}px`})),Lr=Nr(()=>{const C=`${k.axisX.point}px`,B=`${k.axisY.point}px`,Q=_.translate3d?`translate3d(${C}, ${B}, 0) scale(${k.currentScale})`:`translate(${C}, ${B}) scale(${k.currentScale})`,Ht=`${k.axisX.origin}px ${k.axisY.origin}px`;return{transform:Q,\"transform-origin\":Ht}}),Ut=n;function oe(C){return C.scale!==void 0&&(k.currentScale=C.scale),C.translateX!==void 0&&k.axisX.setPoint(C.translateX),C.translateY!==void 0&&k.axisY.setPoint(C.translateY),C.originX!==void 0&&k.axisX.setOrigin(C.originX),C.originY!==void 0&&k.axisY.setOrigin(C.originY),Ke(),pt()}function pt(){return{x:k.axisX.point,y:k.axisY.point,scale:k.currentScale,originX:k.axisX.origin,originY:k.axisY.origin,translateX:k.axisX.point,translateY:k.axisY.point}}function dt(){k.touch1=!1,k.touch2=!1,k.zoomIn=!1,k.zoomOut=!1,Ut(\"stopDrag\",pt())}function ye(C){if(!_.draggable)return;const B=[{clientX:C.clientX,clientY:C.clientY}];mt(B)}function Wr(C){if(!_.draggable)return;const B=Array.from(C.touches);mt(B)}function mt(C){if(C.length===0){dt();return}const B=ot(C[0].clientX),Q=gt(C[0].clientY);if(C.length>1){k.touch1=!0,k.touch2=!0,k.startScale=k.currentScale;const Ht=ot(C[1].clientX),ze=gt(C[1].clientY);k.axisX.pinch(B,Ht,k.currentScale),k.axisY.pinch(Q,ze,k.currentScale)}else k.touch1=!0,k.touch2=!1,k.axisX.touch(B),k.axisY.touch(Q);Ut(\"startDrag\",pt())}function Xe(C){!k.touch1&&!k.touch2||C.length!==0&&(k.touch1&&k.touch2&&C.length===1&&mt(C),(!k.touch1||!k.touch2&&C.length===2)&&mt(C),k.touch1&&k.touch2?(k.axisX.dragPinch(ot(C[0].clientX),ot(C[1].clientX)),k.axisY.dragPinch(gt(C[0].clientY),gt(C[1].clientY))):(k.axisX.dragTouch(ot(C[0].clientX)),k.axisY.dragTouch(gt(C[0].clientY))),dr(C),Pt())}function Pt(){Ut(\"dragging\",pt())}function Re(){k.zoomIn=!1,k.zoomOut=!1}function ot(C){return C-N.value.getBoundingClientRect().left}function gt(C){return C-N.value.getBoundingClientRect().top}function dr(C){if(C.length<2||!k.touch1||!k.touch2){Ke();return}const B=C[0],Q=C[1],Ht=Hs(ot(B.clientX),gt(B.clientY),ot(Q.clientX),gt(Q.clientY)),ze=Hs(k.axisX.start1,k.axisY.start1,k.axisX.start2,k.axisY.start2),Mi=k.startScale*(Ht/ze);Je(Mi)}function Je(C){C<_.minScale&&(C=_.minScale),C>_.maxScale&&(C=_.maxScale),k.currentScale!==C&&(k.zoomIn=k.currentScale<C,k.zoomOut=k.currentScale>C,k.currentScale=C,z()),Ke(),Ut(\"scaling\",pt())}function Ke(){_.within&&(k.axisY.checkAndResetToWithin(k.currentScale),k.axisX.checkAndResetToWithin(k.currentScale))}function Ti(C){if(!_.draggable)return;const B=[{clientX:C.clientX,clientY:C.clientY}];tt(B)}function Ni(C){if(!_.draggable)return;const B=Array.from(C.touches);tt(B)}function Ze(){return oe({scale:k.currentScale,originX:(_.contentWidth??_.width)/2,originY:(_.contentHeight??_.height)/2,translateX:_.contentWidth?(_.width-_.contentWidth)/2:0,translateY:_.contentHeight?(_.height-_.contentHeight)/2:0}),pt()}function Di(C){if(_.keyActions)switch(C.preventDefault(),g.value[C.key]){case He.zoomIn:It(1+_.keyZoomVelocity);break;case He.zoomOut:It(1-_.keyZoomVelocity);break;case He.moveUp:Se(0,-_.keyMoveVelocity);break;case He.moveDown:Se(0,_.keyMoveVelocity);break;case He.moveLeft:Se(-_.keyMoveVelocity,0);break;case He.moveRight:Se(_.keyMoveVelocity,0);break}}function Se(C,B){return k.axisX.setPoint(k.axisX.point+C),k.axisY.setPoint(k.axisY.point+B),Ut(\"dragging\",pt()),pt()}function It(C){const B=ot(_.width/2),Q=gt(_.height/2);k.axisX.pinch(B,B,k.currentScale),k.axisY.pinch(Q,Q,k.currentScale);const Ht=k.currentScale*C;return Je(Ht),pt()}function ee(C){C.preventDefault();const B=ot(C.clientX),Q=gt(C.clientY);k.axisX.pinch(B,B,k.currentScale),k.axisY.pinch(Q,Q,k.currentScale);const Ht=1-C.deltaY*_.wheelVelocity,ze=k.currentScale*Ht;Je(ze)}return Y_(()=>{window.addEventListener(\"mouseup\",dt)}),O_(()=>{window.removeEventListener(\"mouseup\",dt)}),We(()=>_.centered,Ze),We(()=>_.scale,Je),We(()=>_.translateX,C=>k.axisX.setPoint(C)),We(()=>_.translateY,C=>k.axisY.setPoint(C)),We(()=>_.originX,C=>k.axisX.setOrigin(C??0)),We(()=>_.originY,C=>k.axisY.setOrigin(C??0)),We(()=>_.within,()=>Ke()),(C,B)=>(R(),O(\"div\",{ref_key:\"$el\",ref:N,class:Be([\"pinch-scroll-zoom\",$t.value]),onMousedown:ye,onMousemove:Ti,onTouchstart:Wr,onTouchmove:Ni,onWheel:ee,onKeydown:Di,tabindex:m.value,style:jt(te.value)},[b(\"div\",{ref:\"content\",class:\"pinch-scroll-zoom__content\",style:jt(Lr.value)},[F_(C.$slots,\"default\")],4)],46,V_))}}),q_={props:{api:void 0,save_api:void 0,entity_api:void 0,search_api:void 0,permission:void 0,subscribe_url:void 0},components:{PinchScrollZoom:B_},data(){return{nodes:[],entities:[],texts:void 0,suggestions:[],isEditing:!1,isLoading:!0,isDirty:!1,originalNodes:void 0,originalEntities:void 0,currentUuid:void 0,isAddingRelation:!1,isAddingChild:!1,isEditingEntity:!1,isAddingCharacter:!1,isEditingRelation:!1,isAddingNewFounder:!1,isNotPremium:!1,relation:void 0,entity:void 0,cssClass:void 0,colour:void 0,visibility:void 0,isUnknown:void 0,maxX:0,maxY:0,modal:\"family-tree-modal\",pitchModal:\"family-tree-pitch\",founderField:'select[name=\"founder_id_ft\"]',entityField:'select[name=\"character_id_ft\"]',newUuid:1}},methods:{zoom(){const c=new KeyboardEvent(\"keydown\",{key:\"+\",code:\"Equal\",which:187,keyCode:187});document.getElementById(\"treeMap\").dispatchEvent(c)},unzoom(){const c=new KeyboardEvent(\"keydown\",{key:\"-\",code:\"Minus\",which:189,keyCode:189});document.getElementById(\"treeMap\").dispatchEvent(c)},startEditing(){this.isEditing=!0},resetTree(){(!this.isDirty||confirm(this.texts.modals.reset.confirm))&&(this.isEditing=!1,this.isDirty=!1,this.nodes=JSON.parse(JSON.stringify(this.originalNodes)),this.entities=JSON.parse(JSON.stringify(this.originalEntities)),window.showToast(this.texts.toasts.reseted))},saveTree(){Ie.post(this.save_api,{data:this.nodes}).then(c=>{if(c.status===204){this.showPitchDialog();return}window.showToast(this.texts.toasts.saved),this.isDirty=!1}).catch(c=>{console.log(\"save tree error\",c),this.showPitchDialog()})},clearTree(){confirm(this.texts.modals.clear.confirm)&&(this.nodes=[],this.entities=[],this.isDirty=this.originalNodes.length>0,this.resetVariables(),window.showToast(this.texts.toasts.cleared))},deleteUuid(c){confirm(this.texts.modals.entity.remove.confirm)&&(this.deleteUuidFromNodes(c),window.showToast(this.texts.toasts.entity.removed),this.isDirty=!0)},deleteUuidFromNodes(c){this.nodes=this.filter(this.nodes,c)},filter(c,l){const n=(_,g)=>{if(g.uuid===l)return _;if(Array.isArray(g.children)){const m=g.children.reduce(n,[]);g.children=m}else if(Array.isArray(g.relations)){const m=g.relations.reduce(n,[]);g.relations=m}return _.push(g),_};return c[0].uuid===l?[]:c.reduce(n,[])},closePitchModal(){window.closeDialog(this.pitchModal)},closeModal(){this.isAddingChild=!1,this.isAddingRelation=!1,this.isEditingRelation=!1,this.isEditingEntity=!1,this.isAddingCharacter=!1,this.isAddingNewFounder=!1,this.currentUuid=void 0,this.relation=void 0,this.cssClass=void 0,this.colour=void 0,this.entity=void 0,this.visibility=1,this.isUnknown=void 0,window.closeDialog(this.modal),document.querySelector(this.entityField)?.tomselect?.clear(),document.querySelector(this.founderField)?.tomselect?.clear()},showDialog(){window.openDialog(this.modal),window.initForeignSelect(),window.triggerEvent()},showPitchDialog(){window.openDialog(this.pitchModal)},resetVariables(){this.isAddingChild=!1,this.isAddingRelation=!1,this.isEditingRelation=!1,this.isEditingEntity=!1,this.isAddingCharacter=!1,this.isAddingNewFounder=!1,this.currentUuid=void 0,this.relation=void 0,this.cssClass=void 0,this.colour=void 0,this.visibility=1,this.isUnknown=void 0,this.entity=void 0,window.closeDialog(this.modal),document.querySelector(this.founderField)?.tomselect?.clear(),document.querySelector(this.entityField)?.tomselect?.clear()},saveSuggestion:function(c){this.emitter.emit(\"saveModal\",[c]),this.saveModal(c)},saveModal(c=null){this.isEditingRelation?this.editRelation():this.isAddingRelation?this.addRelation():this.isAddingChild?this.addChild():this.isEditingEntity?this.editEntity():this.isAddingCharacter?this.editEntity(c):this.isAddingNewFounder&&this.addFounder()},showCreateNode(){return this.nodes.length===0&&this.isEditing},showEditFounder(){return this.nodes.length>0&&this.isEditing},showMembers(){return this.suggestions.length>0},createNode(){this.isAddingCharacter=!0,this.currentUuid=0,this.showDialog()},createNewFounder(){this.resetVariables(),this.isAddingNewFounder=!0,this.currentUuid=0,this.showDialog()},editRelation(){this.isDirty=!0;const c=(l,n)=>{if(n.uuid===this.currentUuid)return n.role=this.relation,n.cssClass=this.cssClass,n.colour=this.colour,n.visibility=this.visibility,n.isUnknown=this.isUnknown,l.push(n),l;if(Array.isArray(n.children)){const _=n.children.reduce(c,[]);n.children=_}else if(Array.isArray(n.relations)){const _=n.relations.reduce(c,[]);n.relations=_}return l.push(n),l};this.nodes=this.nodes.reduce(c,[]),window.showToast(this.texts.toasts.relations.edit),this.closeModal()},addRelation(){let c=document.querySelector(this.entityField)?.tomselect?.getValue();if(this.isUnknown&&(this.insertUnknownRelation(),this.isDirty=!0,window.showToast(this.texts.toasts.relations.add),this.closeModal()),c&&!this.isUnknown){let l=this.entity_api.replace(\"/0\",\"/\"+c);Ie.get(l).then(n=>{let _=n.data;this.insertRelation(_),this.isDirty=!0,window.showToast(this.texts.toasts.relations.add),this.closeModal()})}},insertUnknownRelation(){let c=\"\";const l=(n,_)=>{if(_.uuid===this.currentUuid)return Array.isArray(_.relations)?_.relations.push({entity_id:c,role:this.relation,cssClass:this.cssClass,colour:this.colour,isUnknown:this.isUnknown,visibility:this.visibility,uuid:JSON.stringify(this.newUuid)}):_.relations=[{entity_id:c,role:this.relation,cssClass:this.cssClass,colour:this.colour,isUnknown:this.isUnknown,visibility:this.visibility,uuid:JSON.stringify(this.newUuid)}],this.newUuid++,n.push(_),n;if(Array.isArray(_.children)){const g=_.children.reduce(l,[]);_.children=g}else if(Array.isArray(_.relations)){const g=_.relations.reduce(l,[]);_.relations=g}return n.push(_),n};this.nodes=this.nodes.reduce(l,[])},insertRelation(c){let l=c.id;this.entities[c.id]||(this.entities[c.id]=c);const n=(_,g)=>{if(g.uuid===this.currentUuid)return Array.isArray(g.relations)?g.relations.push({entity_id:l,role:this.relation,cssClass:this.cssClass,colour:this.colour,isUnknown:this.isUnknown,visibility:this.visibility,uuid:JSON.stringify(this.newUuid)}):g.relations=[{entity_id:l,role:this.relation,cssClass:this.cssClass,colour:this.colour,isUnknown:this.isUnknown,visibility:this.visibility,uuid:JSON.stringify(this.newUuid)}],this.newUuid++,_.push(g),_;if(Array.isArray(g.children)){const m=g.children.reduce(n,[]);g.children=m}else if(Array.isArray(g.relations)){const m=g.relations.reduce(n,[]);g.relations=m}return _.push(g),_};this.nodes=this.nodes.reduce(n,[])},addChild(){let c=document.querySelector(this.entityField)?.tomselect?.getValue();if(!c){this.closeModal();return}let l=this.entity_api.replace(\"/0\",\"/\"+c);Ie.get(l).then(n=>{let _=n.data;this.insertChild(_),window.showToast(this.texts.toasts.entity.child),this.isDirty=!0,this.closeModal()})},insertChild(c){var l=c.id;this.entities[c.id]||(this.entities[c.id]=c);const n=(_,g)=>{if(g.uuid===this.currentUuid)return Array.isArray(g.children)?g.children.push({entity_id:l,role:this.relation,cssClass:this.cssClass,colour:this.colour,visibility:this.visibility,uuid:JSON.stringify(this.newUuid)}):g.children=[{entity_id:l,role:this.relation,cssClass:this.cssClass,colour:this.colour,visibility:this.visibility,uuid:JSON.stringify(this.newUuid)}],this.newUuid++,_.push(g),_;if(Array.isArray(g.children)){const m=g.children.reduce(n,[]);g.children=m}else if(Array.isArray(g.relations)){const m=g.relations.reduce(n,[]);g.relations=m}return _.push(g),_};return this.nodes=this.nodes.reduce(n,[])},editEntity(c=null){let l=document.querySelector(this.entityField)?.tomselect?.getValue();if(c&&(l=c),!l){this.currentUuid!==0&&(this.editEntityNode(),window.showToast(this.texts.toasts.entity.edit),this.isDirty=!0),this.closeModal();return}let n=this.entity_api.replace(\"/0\",\"/\"+l);Ie.get(n).then(_=>{let g=_.data;this.currentUuid===0?(this.newUuid=1,this.addEntity(g),window.showToast(this.texts.toasts.entity.add)):(this.replaceEntity(g),window.showToast(this.texts.toasts.entity.edit)),this.isDirty=!0,this.closeModal()})},addFounder(){let c=document.querySelector(this.founderField)?.tomselect?.getValue(),l=document.querySelector(this.entityField)?.tomselect?.getValue();if(!c){this.closeModal();return}let n=this.entity_api.replace(\"/0\",\"/\"+c);Ie.get(n).then(_=>{let g=_.data;if(l){let m=this.entity_api.replace(\"/0\",\"/\"+l);Ie.get(m).then(N=>{let tt=N.data;this.addFounderEntity(g,tt),this.isDirty=!0,window.showToast(this.texts.toasts.entity.add),this.closeModal()});return}this.addFounderEntity(g),this.isDirty=!0,window.showToast(this.texts.toasts.entity.add),this.closeModal()})},addFounderEntity(c,l=null){let n=\"\";this.entities[c.id]=Object.freeze(c),l&&(this.entities[l.id]=Object.freeze(l),n=l.id),this.nodes=[{entity_id:n,role:this.relation,cssClass:this.cssClass,colour:this.colour,visibility:this.visibility,uuid:JSON.stringify(this.newUuid),children:this.nodes,isUnknown:this.isUnknown}],this.newUuid++,this.nodes=[{entity_id:c.id,role:this.relation,cssClass:this.cssClass,colour:this.colour,visibility:this.visibility,uuid:JSON.stringify(this.newUuid),relations:this.nodes}],this.newUuid++},addEntity(c){this.entities[c.id]=Object.freeze(c),this.nodes.push({entity_id:c.id,role:this.relation,cssClass:this.cssClass,colour:this.colour,visibility:this.visibility,uuid:JSON.stringify(this.newUuid)}),this.newUuid++},editEntityNode(){const c=(l,n)=>{if(n.uuid===this.currentUuid)return n.role=this.relation,n.isUnknown=this.isUnknown,n.cssClass=this.cssClass,n.colour=this.colour,n.visibility=this.visibility,n.entity_id=n.entity_id,l.push(n),l;if(Array.isArray(n.children)){const _=n.children.reduce(c,[]);n.children=_}else if(Array.isArray(n.relations)){const _=n.relations.reduce(c,[]);n.relations=_}return l.push(n),l};return this.nodes=this.nodes.reduce(c,[])},replaceEntity(c){let l=c.id;this.entities[c.id]||(this.entities[c.id]=c);const n=(_,g)=>{if(g.uuid===this.currentUuid)return g.uuid===0&&(g.uuid=JSON.stringify(this.newUuid),this.newUuid++),g.role=this.relation,g.cssClass=this.cssClass,g.colour=this.colour,g.visibility=this.visibility,g.isUnknown=this.isUnknown,g.entity_id=l,_.push(g),_;if(Array.isArray(g.children)){const m=g.children.reduce(n,[]);g.children=m}else if(Array.isArray(g.relations)){const m=g.relations.reduce(n,[]);g.relations=m}return _.push(g),_};return this.nodes=this.nodes.reduce(n,[])},dragHeight(){return this.maxY+80},dragWidth(){return this.maxX+200},pincherWidth(){let c=this.dragWidth(),l=this.$refs.familytree.clientWidth;return Math.max(c,l)},pincherHeight(){let c=this.dragHeight(),l=this.$refs.familytree.clientHeight;return Math.max(c,l)}},mounted(){Ie.get(this.api).then(c=>{this.nodes=c.data.nodes,this.entities=c.data.entities,this.texts=c.data.texts,this.suggestions=c.data.suggestions,window.ftTexts=this.texts,this.originalNodes=JSON.parse(JSON.stringify(c.data.nodes)),this.originalEntities=JSON.parse(JSON.stringify(c.data.entities)),this.isLoading=!1}),this.emitter.on(\"editEntity\",c=>{if(this.resetVariables(),this.entity=c.relation.entity_id,this.currentUuid=c.uuid,this.relation=c.relation.role,this.cssClass=c.relation.cssClass,this.colour=c.relation.colour,this.visibility=c.relation.visibility,this.isUnknown=c.relation.isUnknown,this.isEditingEntity=!0,this.entity){const l=document.querySelector(this.entityField)?.tomselect;l&&(l.addOption({id:this.entity,text:this.entities[this.entity].name}),l.setValue(this.entity))}this.showDialog()}),this.emitter.on(\"deleteEntity\",c=>{this.resetVariables(),this.deleteUuid(c)}),this.emitter.on(\"addRelation\",c=>{this.resetVariables(),this.currentUuid=c,this.isAddingRelation=!0,this.showDialog()}),this.emitter.on(\"editRelation\",c=>{this.resetVariables(),this.currentUuid=c.uuid,this.relation=c.relation.role,this.cssClass=c.relation.cssClass,this.colour=c.relation.colour,this.visibility=c.relation.visibility,this.isUnknown=c.relation.isUnknown,this.isEditingRelation=!0,this.showDialog()}),this.emitter.on(\"addChild\",c=>{this.resetVariables(),this.currentUuid=c,this.isAddingChild=!0,this.showDialog()}),this.emitter.on(\"trackX\",c=>{c>this.maxX&&(this.maxX=c)}),this.emitter.on(\"trackY\",c=>{c>this.maxY&&(this.maxY=c)})}},J_={key:0,class:\"flex gap-2 mb-5 justify-end items-center align-right\"},K_={class:\"family-tree overflow-auto w-full h-full min-h-50 block relative\",ref:\"familytree\"},Z_={class:\"absolute top-0 right-0 z-10\"},j_={key:0,class:\"text-center px-5\"},G_={key:1,class:\"relative\",style:{width:\"100%\"}},Q_={key:1,class:\"dialog rounded-top md:rounded-2xl bg-base-100 min-w-fit shadow-md text-base-content\",id:\"family-tree-modal\",\"aria-modal\":\"true\"},$_={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},tv={key:0,class:\"text-lg font-normal\"},ev={key:1,class:\"text-lg font-normal\"},rv={key:2,class:\"text-lg font-normal\"},iv={key:3,class:\"text-lg font-normal\"},nv={key:4,class:\"text-lg font-normal\"},ov={key:5,class:\"text-lg font-normal\"},uv={class:\"max-w-2xl py-4 px-4 md:px-6\"},sv={class:\"flex flex-col gap-5 w-full\"},av={class:\"field field-founder flex flex-col gap-1 w-full\"},lv=[\"data-url\"],cv={class:\"field field-character flex flex-col gap-1 w-full\"},fv=[\"data-url\"],hv={class:\"field field-member flex flex-col gap-1\"},dv=[\"onClick\"],gv={class:\"flex flex-col gap-5 w-full\"},_v={key:0,class:\"field field-unknown checkbox flex flex-col gap-1\"},vv={class:\"help-block text-neutral-content\"},yv={key:1,class:\"field field-relation flex flex-col gap-1\"},pv={class:\"grid grid-cols-2 gap-5\"},mv={class:\"field field field-colour flex flex-col gap-1\"},wv={class:\"field field-visibility flex flex-col gap-1\"},xv={value:\"1\"},bv={value:\"2\"},kv={value:\"5\"},Cv={class:\"field field-css flex flex-col gap-1\"},Ev={class:\"flex flex-wrap gap-3 justify-end items-center p-4 md:px-6\"},Av={class:\"flex flex-wrap gap-3 ps-0\"},Xv={class:\"submit-group\"},Rv=[\"innerHTML\"],Sv={key:2,class:\"dialog rounded-top md:rounded-2xl bg-base-100 min-w-fit shadow-md text-base-content\",id:\"family-tree-pitch\",\"aria-modal\":\"true\"},zv={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},Uv=[\"innerHTML\"],Yv={class:\"max-w-2xl py-4 px-4 md:px-6\"},Ov=[\"innerHTML\"],Fv={class:\"flex flex-col sm:flex-row gap-3 flex-wrap w-full\"},Tv=[\"innerHTML\"],Nv=[\"href\",\"innerHTML\"];function Dv(c,l,n,_,g,m){const N=Gt(\"FamilyNode\"),tt=Gt(\"PinchScrollZoom\");return R(),O(Qt,null,[!g.isLoading&&n.permission?(R(),O(\"div\",J_,[g.isEditing?G(\"\",!0):(R(),O(\"button\",{key:0,class:\"btn2 btn-sm btn-primary\",onClick:l[0]||(l[0]=z=>m.startEditing())},[l[19]||(l[19]=b(\"i\",{class:\"fa-regular fa-edit\",\"aria-hidden\":\"true\"},null,-1)),Pe(\" \"+I(this.texts.actions.edit),1)])),m.showEditFounder()?(R(),O(\"button\",{key:1,class:\"btn2 btn-sm\",onClick:l[1]||(l[1]=z=>m.createNewFounder())},[l[20]||(l[20]=b(\"i\",{class:\"fa-regular fa-user\",\"aria-hidden\":\"true\"},null,-1)),Pe(\" \"+I(this.texts.actions.founder),1)])):G(\"\",!0),g.isEditing?(R(),O(\"button\",{key:2,class:\"btn2 btn-sm\",onClick:l[2]||(l[2]=z=>m.resetTree())},[l[21]||(l[21]=b(\"i\",{class:\"fa-regular fa-redo\",\"aria-hidden\":\"true\"},null,-1)),Pe(\" \"+I(this.texts.actions.reset),1)])):G(\"\",!0),g.isEditing?(R(),O(\"button\",{key:3,class:\"btn2 btn-sm\",onClick:l[3]||(l[3]=z=>m.clearTree())},[l[22]||(l[22]=b(\"i\",{class:\"fa-regular fa-eraser\",\"aria-hidden\":\"true\"},null,-1)),Pe(\" \"+I(this.texts.actions.clear),1)])):G(\"\",!0),g.isEditing&&g.isDirty?(R(),O(\"button\",{key:4,class:\"btn2 btn-primary\",onClick:l[4]||(l[4]=z=>m.saveTree())},[l[23]||(l[23]=b(\"i\",{class:\"fa-regular fa-save\",\"aria-hidden\":\"true\"},null,-1)),Pe(\" \"+I(this.texts.actions.save),1)])):G(\"\",!0)])):G(\"\",!0),b(\"div\",K_,[b(\"div\",Z_,[b(\"button\",{class:\"btn2 btn-ghost btn-sm\",\"aria-label\":\"Close\",onClick:l[5]||(l[5]=z=>m.zoom())},[...l[24]||(l[24]=[b(\"i\",{class:\"fa-regular fa-square-plus\",\"aria-hidden\":\"true\"},null,-1)])]),b(\"button\",{class:\"btn-sm btn2 btn-ghost\",\"aria-label\":\"Close\",onClick:l[6]||(l[6]=z=>m.unzoom())},[...l[25]||(l[25]=[b(\"i\",{class:\"fa-regular fa-square-minus\",\"aria-hidden\":\"true\"},null,-1)])])]),g.isLoading?(R(),O(\"div\",j_,[...l[26]||(l[26]=[b(\"i\",{class:\"fa-solid fa-spinner fa-spin fa-2x\",\"aria-hidden\":\"true\"},null,-1),b(\"span\",{class:\"sr-only\"},\"Loading...\",-1)])])):(R(),O(\"div\",G_,[Oi(tt,{id:\"treeMap\",ref:\"zoomer\",\"key-actions\":\"\",width:m.pincherWidth(),height:m.pincherHeight(),contentWidth:m.dragWidth(),contentHeight:m.dragHeight(),scale:1,maxScale:3,within:!1,class:\"cursor-move!\"},{default:N_(()=>[b(\"div\",{class:\"relative\",style:jt({width:m.dragWidth()+\"px\",height:m.dragHeight()+\"px\"})},[m.showCreateNode()?(R(),O(\"a\",{key:0,class:\"btn2 btn-primary\",onClick:l[7]||(l[7]=z=>m.createNode())},[l[27]||(l[27]=b(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),Pe(\" \"+I(this.texts.actions.first),1)])):G(\"\",!0),(R(!0),O(Qt,null,Mr(g.nodes,z=>(R(),qe(N,{node:z,entities:g.entities,sourceX:0,sourceY:0,drawX:0,drawY:0,column:0,row:0,sourceColumn:0,sourceRow:0,isEditing:g.isEditing,isFirst:!0},null,8,[\"node\",\"entities\",\"isEditing\"]))),256))],4)]),_:1},8,[\"width\",\"height\",\"contentWidth\",\"contentHeight\"])]))],512),g.isLoading?G(\"\",!0):(R(),O(\"dialog\",Q_,[b(\"header\",$_,[g.isAddingChild?(R(),O(\"h4\",tv,I(this.texts.modals.entity.child.title),1)):g.isAddingCharacter?(R(),O(\"h4\",ev,I(this.texts.modals.entity.add.title),1)):g.isEditingEntity?(R(),O(\"h4\",rv,I(this.texts.modals.entity.edit.title),1)):g.isAddingRelation?(R(),O(\"h4\",iv,I(this.texts.modals.relation.add.title),1)):g.isEditingRelation?(R(),O(\"h4\",nv,I(this.texts.modals.relation.edit.title),1)):g.isAddingNewFounder?(R(),O(\"h4\",ov,I(this.texts.modals.entity.founder.title),1)):G(\"\",!0),b(\"button\",{autofocus:\"\",type:\"button\",class:\"text-xl opacity-50 hover:opacity-100 focus:opacity-100 cursor-pointer text-decoration-none\",\"aria-label\":\"Close\",onClick:l[8]||(l[8]=z=>m.closeModal())},[...l[28]||(l[28]=[b(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),b(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),b(\"article\",uv,[b(\"div\",sv,[Wt(b(\"div\",av,[b(\"label\",null,I(this.texts.modals.fields.founder),1),b(\"select\",{class:\"select2 w-full\",style:{width:\"100%\"},\"data-url\":this.search_api,\"data-placeholder\":\"Choose a character\",\"data-language\":\"en\",\"data-allow-clear\":\"true\",name:\"founder_id_ft\",\"data-dropdown-parent\":\"#family-tree-modal\",tabindex:\"-1\",\"aria-hidden\":\"true\"},null,8,lv)],512),[[Ve,g.isAddingNewFounder]]),Wt(b(\"div\",cv,[b(\"label\",null,I(this.texts.modals.fields.character),1),b(\"select\",{class:\"select2 w-full\",style:{width:\"100%\"},\"data-url\":this.search_api,\"data-placeholder\":\"Choose a character\",\"data-language\":\"en\",\"data-allow-clear\":\"true\",name:\"character_id_ft\",\"data-dropdown-parent\":\"#family-tree-modal\",tabindex:\"-1\",\"aria-hidden\":\"true\"},null,8,fv)],512),[[Ve,g.isAddingRelation||g.isAddingChild||g.isEditingEntity||g.isAddingCharacter||g.isAddingNewFounder]]),Wt(b(\"div\",hv,[b(\"label\",null,I(this.texts.modals.fields.member),1),b(\"ul\",null,[(R(!0),O(Qt,null,Mr(this.suggestions,z=>(R(),O(\"li\",null,[b(\"a\",{class:\"cursor-pointer\",onClick:k=>this.saveSuggestion(z.id)},I(z.name),9,dv)]))),256))])],512),[[Ve,g.isAddingCharacter&&this.showMembers()]])]),Wt(b(\"div\",gv,[g.isAddingRelation||g.isEditingEntity||g.isAddingNewFounder?(R(),O(\"div\",_v,[b(\"label\",null,[Wt(b(\"input\",{type:\"checkbox\",\"onUpdate:modelValue\":l[9]||(l[9]=z=>g.isUnknown=z),id:\"family_tree_unknown\",name:\"isUnknown\",value:\"isUnknown\"},null,512),[[D_,g.isUnknown]]),Pe(\" \"+I(this.texts.modals.fields.unknown),1)]),b(\"p\",vv,I(this.texts.modals.entity.edit.helper),1)])):G(\"\",!0),g.isAddingChild?G(\"\",!0):(R(),O(\"div\",yv,[b(\"label\",null,I(this.texts.modals.fields.relation),1),Wt(b(\"input\",{\"onUpdate:modelValue\":l[10]||(l[10]=z=>g.relation=z),type:\"text\",maxlength:\"70\",class:\"w-full\",id:\"family_tree_relation\",onKeyup:l[11]||(l[11]=so(z=>m.saveModal(),[\"enter\"]))},null,544),[[ao,g.relation]])])),Wt(b(\"div\",pv,[b(\"div\",mv,[b(\"label\",null,I(this.texts.modals.fields.colour),1),b(\"div\",null,[Wt(b(\"input\",{\"onUpdate:modelValue\":l[12]||(l[12]=z=>g.colour=z),name:\"colour\",type:\"text\",maxlength:\"7\",\"data-append-to\":\"#family-tree-modal\",class:\"w-full spectrum\",id:\"family_tree_colour\",onKeyup:l[13]||(l[13]=so(z=>m.saveModal(),[\"enter\"])),ref:\"colour\"},null,544),[[ao,g.colour]])])]),b(\"div\",wv,[b(\"label\",null,I(this.texts.modals.fields.visibility.title),1),Wt(b(\"select\",{\"onUpdate:modelValue\":l[14]||(l[14]=z=>g.visibility=z),name:\"visibility\",id:\"family_tree_visibility\",class:\"w-full\"},[b(\"option\",xv,I(this.texts.modals.fields.visibility.all),1),b(\"option\",bv,I(this.texts.modals.fields.visibility.admins),1),b(\"option\",kv,I(this.texts.modals.fields.visibility.members),1)],512),[[M_,g.visibility]])]),b(\"div\",Cv,[b(\"label\",null,I(this.texts.modals.fields.css),1),Wt(b(\"input\",{\"onUpdate:modelValue\":l[15]||(l[15]=z=>g.cssClass=z),type:\"text\",maxlength:\"70\",class:\"w-full\",id:\"family_tree_class\",onKeyup:l[16]||(l[16]=so(z=>m.saveModal(),[\"enter\"]))},null,544),[[ao,g.cssClass]])])],512),[[Ve,g.isAddingRelation||g.isAddingNewFounder||g.isAddingChild||g.isEditingEntity]])],512),[[Ve,g.isEditingRelation||g.isAddingRelation||g.isAddingChild||g.isEditingEntity||g.isAddingNewFounder]])]),b(\"footer\",Ev,[b(\"menu\",Av,[b(\"div\",Xv,[b(\"button\",{class:\"btn2 btn-primary\",onClick:l[17]||(l[17]=z=>m.saveModal()),innerHTML:g.texts.actions.save},null,8,Rv)])])])])),g.isLoading?G(\"\",!0):(R(),O(\"dialog\",Sv,[b(\"header\",zv,[b(\"h4\",{class:\"text-lg font-normal\",innerHTML:g.texts.modals.pitch.title},null,8,Uv),b(\"button\",{autofocus:\"\",type:\"button\",class:\"text-xl opacity-50 hover:opacity-100 focus:opacity-100 cursor-pointer text-decoration-none\",\"aria-label\":\"Close\",onClick:l[18]||(l[18]=z=>m.closePitchModal())},[...l[29]||(l[29]=[b(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),b(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),b(\"article\",Yv,[b(\"p\",{innerHTML:g.texts.modals.pitch.content,class:\"text-neutral-content\"},null,8,Ov),b(\"div\",Fv,[b(\"a\",{href:\"https://kanka.io/premium\",class:\"btn2 btn-outline btn-sm\",innerHTML:g.texts.modals.pitch.more},null,8,Tv),b(\"a\",{href:this.subscribe_url,class:\"btn2 bg-boost text-white btn-sm\",innerHTML:g.texts.modals.pitch.subscription},null,8,Nv)])])]))],64)}const Mv=ve(q_,[[\"render\",Dv]]),Lv={props:{node:void 0,entities:void 0,sourceColumn:0,sourceRow:0,column:0,row:0,sourceX:0,sourceY:0,drawX:0,drawY:0,drawLine:!1,lineX:0,isEditing:void 0,isFirst:!1,offset:void 0},methods:{drawChildrenLine(){return this.drawLine},entity(c){return this.entities[c]},hasRelations(){return this.node.relations&&this.node.relations.length>0}}};function Wv(c,l,n,_,g,m){const N=Gt(\"ChildrenLine\"),tt=Gt(\"FamilyEntity\"),z=Gt(\"FamilyRelations\");return R(),O(Qt,null,[m.drawChildrenLine()?(R(),qe(N,{key:0,originX:n.lineX,originY:n.sourceY,targetX:n.drawX,column:n.column,row:n.row,node:n.node},null,8,[\"originX\",\"originY\",\"targetX\",\"column\",\"row\",\"node\"])):G(\"\",!0),Oi(tt,{entity:m.entity(n.node.entity_id),uuid:n.node.uuid,drawX:n.drawX,drawY:n.drawY,column:n.column,row:n.row,isEditing:n.isEditing,node:n.node,isFounder:n.isFirst},null,8,[\"entity\",\"uuid\",\"drawX\",\"drawY\",\"column\",\"row\",\"isEditing\",\"node\",\"isFounder\"]),m.hasRelations()?(R(),qe(z,{key:1,relations:n.node.relations,entities:n.entities,sourceX:n.sourceX,sourceY:n.sourceY,drawX:n.drawX,drawY:n.drawY,sourceColumn:n.sourceColumn,sourceRow:n.sourceRow,column:n.column,row:n.row,isEditing:n.isEditing},null,8,[\"relations\",\"entities\",\"sourceX\",\"sourceY\",\"drawX\",\"drawY\",\"sourceColumn\",\"sourceRow\",\"column\",\"row\",\"isEditing\"])):G(\"\",!0)],64)}const Pv=ve(Lv,[[\"render\",Wv]]),Iv={props:{entity:void 0,uuid:void 0,drawX:0,drawY:0,column:0,row:0,isRelation:!1,isFounder:!1,isEditing:void 0,node:void 0},methods:{boxClasses(){let c=\"family-node-entity rounded-2xl px-2 flex items-center absolute overflow-hidden text-base leading-none ft-col-\"+this.column+\" ft-row-\"+this.row;return this.isRelation&&(c+=\" family-node-entity-relation\"),this.isFounder&&(c+=\" family-node-entity-founder\"),this.entity&&(this.entity.status&&(c+=\" kanka-status-\"+this.entity.status.key),this.entity.tags.forEach(function(l){c+=\" \"+l})),this.node.isUnknown&&(c+=\" unknown-character\"),this.node.cssClass&&(c+=\" \"+this.node.cssClass),c},position(){return{left:`calc(${this.column} * var(--family-tree-column-width))`,top:`calc(${this.row} * var(--family-tree-row-height))`}},editEntity(c,l){this.emitter.emit(\"editEntity\",{uuid:c,relation:l})},deleteEntity(c){this.emitter.emit(\"deleteEntity\",c)},addRelation(c){this.emitter.emit(\"addRelation\",c)},cssClasses(){let c=\"\";return this.entity&&this.entity.status?c+=\"flex grid-cols-2 items-center gap-1\":c+=\"block\",this.isEditing&&(c+=\" font-bold\"),c},tags(){return\"\"},i18n(c,l){return window.ftTexts.modals[c][l].title},fields(c){return window.ftTexts.modals.fields[c]}},mounted(){this.emitter.emit(\"trackX\",this.drawX),this.emitter.emit(\"trackY\",this.drawY)}},Hv=[\"data-uuid\",\"data-entity\",\"data-tags\"],Vv={class:\"flex items-center gap-1 max-w-full\"},Bv={class:\"flex-none\"},qv={key:0,class:\"truncate\"},Jv=[\"href\"],Kv=[\"src\",\"alt\"],Zv={class:\"grow justify-center truncate\"},jv=[\"href\",\"title\"],Gv={class:\"truncate\"},Qv={key:0,class:\"self-end\"},$v=[\"title\"],ty={key:2,class:\"text-xs\"};const ey={key:4,class:\"flex gap-1\"},ry=[\"title\"],iy={class:\"sr-only\"},ny=[\"title\"],oy={class:\"sr-only\"},uy=[\"title\"],sy={class:\"sr-only\"};function ay(c,l,n,_,g,m){return R(),O(\"div\",{class:Be(m.boxClasses()),style:jt(m.position()),\"data-uuid\":n.uuid,\"data-entity\":n.entity?n.entity.id:void 0,\"data-tags\":m.tags()},[b(\"div\",Vv,[b(\"div\",Bv,[n.node.isUnknown?(R(),O(\"span\",qv,[...l[3]||(l[3]=[b(\"i\",{class:\"fa-regular fa-3x fa-question\",\"aria-hidden\":\"true\"},null,-1)])])):G(\"\",!0),n.node.isUnknown?G(\"\",!0):(R(),O(\"a\",{key:1,href:n.entity.url},[b(\"img\",{src:n.entity.thumb,class:\"rounded-full entity-image w-10 h-10\",alt:n.entity.name},null,8,Kv)],8,Jv))]),b(\"div\",Zv,[n.node.isUnknown?G(\"\",!0):(R(),O(\"a\",{key:0,href:n.entity.url,class:Be(m.cssClasses()),title:n.entity.name},[b(\"span\",Gv,I(n.entity.name),1),n.entity.status?(R(),O(\"span\",Qv,[b(\"i\",{class:Be(n.entity.status.icon),title:n.entity.status.name,\"aria-hidden\":\"true\"},null,10,$v)])):G(\"\",!0)],10,jv)),n.node.isUnknown?(R(),O(\"span\",{key:1,class:Be(m.cssClasses())},[b(\"i\",null,I(m.fields(\"unknown\")),1)],2)):G(\"\",!0),Wt(b(\"span\",{class:\"text-xs\"},I(n.entity?n.entity.birth:\"\"),513),[[Ve,n.entity?n.entity.birth:void 0]]),n.entity&&n.entity.birth&&n.entity.death?(R(),O(\"span\",ty,\" - \")):G(\"\",!0),Wt(b(\"span\",{class:\"text-xs\"},\" ✝ \"+I(n.entity?n.entity.death:\"\"),513),[[Ve,n.entity?n.entity.death:void 0]]),(n.isEditing,G(\"\",!0)),n.isEditing?(R(),O(\"div\",ey,[b(\"a\",{onClick:l[0]||(l[0]=N=>m.editEntity(n.uuid,n.node)),class:\"cursor-pointer\",title:m.i18n(\"entity\",\"edit\")},[l[4]||(l[4]=b(\"i\",{class:\"fa-regular fa-pencil\",\"aria-hidden\":\"true\"},null,-1)),b(\"span\",iy,I(m.i18n(\"entity\",\"edit\")),1)],8,ry),n.isRelation?G(\"\",!0):(R(),O(\"a\",{key:0,onClick:l[1]||(l[1]=N=>m.addRelation(n.uuid)),class:\"cursor-pointer\",title:m.i18n(\"relation\",\"add\")},[l[5]||(l[5]=b(\"i\",{class:\"fa-regular fa-user-plus\",\"aria-hidden\":\"true\"},null,-1)),b(\"span\",oy,I(m.i18n(\"relation\",\"add\")),1)],8,ny)),b(\"a\",{onClick:l[2]||(l[2]=N=>m.deleteEntity(n.uuid)),class:\"align-end cursor-pointer\",title:m.i18n(\"entity\",\"remove\")},[l[6]||(l[6]=b(\"i\",{class:\"fa-regular fa-trash-can\",\"aria-hidden\":\"true\"},null,-1)),b(\"span\",sy,I(m.i18n(\"entity\",\"remove\")),1)],8,uy)])):G(\"\",!0)])])],14,Hv)}const ly=ve(Iv,[[\"render\",ay]]),cy={props:{relations:void 0,entities:void 0,isEditing:void 0,sourceX:0,sourceY:0,drawX:0,drawY:0,sourceColumn:0,sourceRow:0,column:0,row:0},data(){return{}},methods:{nextDrawX(c,l){return this.calcPreviousRelations(l)},calcPreviousRelations(c){let l=0;c===0&&(l=1);let n=this.entityWidth+20;for(let _=0;_<c;_++){let g=window.familyTreeRelationWidth(this.relations[_],_);l+=g}return n*=l,this.drawX+n},nextColumn(c,l){return this.calcPreviousRelationsCol(l)},calcPreviousRelationsCol(c){let l=0;c===0&&(l=1);for(let n=0;n<c;n++){let _=window.familyTreeRelationWidth(this.relations[n],n);l+=_}return this.column+l}},mounted(){}};function fy(c,l,n,_,g,m){const N=Gt(\"FamilyRelation\");return R(!0),O(Qt,null,Mr(n.relations,(tt,z)=>(R(),qe(N,{relation:tt,index:z,entities:n.entities,sourceX:n.drawX,sourceY:n.sourceY,drawX:m.nextDrawX(tt,z),drawY:n.drawY,sourceColumn:n.column,sourceRow:n.sourceRow,column:m.nextColumn(tt,z),row:n.row,isEditing:this.isEditing},null,8,[\"relation\",\"index\",\"entities\",\"sourceX\",\"sourceY\",\"drawX\",\"drawY\",\"sourceColumn\",\"sourceRow\",\"column\",\"row\",\"isEditing\"]))),256)}const hy=ve(cy,[[\"render\",fy]]),dy={props:{relation:void 0,entities:void 0,sourceX:0,sourceY:0,drawX:0,drawY:0,sourceColumn:0,sourceRow:0,column:0,row:0,index:0,isEditing:!1},methods:{entity(c){return this.entities[c]},hasChildren(){return this.relation.children&&this.relation.children.length>0},nextX(c){return c===0?this.sourceX:this.drawX},startY(){return this.sourceY+this.entityHeight+50},nextCol(c){return c===0?this.sourceColumn:this.column},startRow(){return this.sourceRow+1},lineX(){return this.index===0?this.drawX+this.entityWidth+20:this.sourceX}},mounted(){}};function gy(c,l,n,_,g,m){const N=Gt(\"FamilyEntity\"),tt=Gt(\"RelationLine\"),z=Gt(\"FamilyChildren\");return R(),O(Qt,null,[Oi(N,{entity:m.entity(n.relation.entity_id),uuid:n.relation.uuid,drawX:n.drawX,drawY:n.drawY,column:n.column,row:n.row,isRelation:!0,isEditing:n.isEditing,node:n.relation},null,8,[\"entity\",\"uuid\",\"drawX\",\"drawY\",\"column\",\"row\",\"isEditing\",\"node\"]),Oi(tt,{drawX:n.drawX,drawY:n.drawY,sourceX:n.sourceX,sourceY:n.sourceY,column:n.column,row:n.row,sourceColumn:n.sourceColumn,sourceRow:n.sourceRow,relation:n.relation,uuid:n.relation.uuid,isEditing:n.isEditing},null,8,[\"drawX\",\"drawY\",\"sourceX\",\"sourceY\",\"column\",\"row\",\"sourceColumn\",\"sourceRow\",\"relation\",\"uuid\",\"isEditing\"]),m.hasChildren()?(R(),qe(z,{key:0,children:n.relation.children,entities:n.entities,sourceX:n.sourceX,sourceY:n.sourceY,drawX:m.nextX(n.index),drawY:m.startY(),startX:n.sourceX,startY:m.startY(),sourceColumn:n.sourceColumn,sourceRow:n.sourceRow,column:m.nextCol(n.index),row:m.startRow(),startColumn:n.sourceColumn,startRow:m.startRow(),index:n.index,lineX:this.lineX(),isEditing:this.isEditing},null,8,[\"children\",\"entities\",\"sourceX\",\"sourceY\",\"drawX\",\"drawY\",\"startX\",\"startY\",\"sourceColumn\",\"sourceRow\",\"column\",\"row\",\"startColumn\",\"startRow\",\"index\",\"lineX\",\"isEditing\"])):G(\"\",!0)],64)}const _y=ve(dy,[[\"render\",gy]]),vy={props:{children:{type:Array},entities:void 0,sourceX:0,sourceY:0,drawX:0,drawY:0,startX:0,startY:0,sourceColumn:0,sourceRow:0,row:0,column:0,startColumn:0,startRow:0,lineX:0,index:0,isEditing:!1},methods:{getLineX(c){return c===0?this.sourceX+this.entityWidth+20:this.drawX},getColumn(c){let l=this.column,n=this.getNodeSize(c);return l+n},getDrawX(c){return this.getRealDrawX(c)},getRealDrawX(c){let l=this.drawX,n=this.getNodeSize(c);return l+=n*(this.entityWidth+20),l},getNodeSize(c){let l=0;for(let n=0;n<c;n++){let _=this.children[n];l+=window.familyTreeChildWidth(_,n)}return l}}};function yy(c,l,n,_,g,m){const N=Gt(\"FamilyParentChildrenLine\"),tt=Gt(\"FamilyNode\");return R(),O(Qt,null,[(R(!0),O(Qt,null,Mr(n.children,(z,k)=>(R(),qe(N,{node:z,sourceX:m.getLineX(n.index),sourceY:n.drawY,index:n.index,column:n.column,row:n.row},null,8,[\"node\",\"sourceX\",\"sourceY\",\"index\",\"column\",\"row\"]))),256)),(R(!0),O(Qt,null,Mr(n.children,(z,k)=>(R(),qe(tt,{node:z,entities:n.entities,sourceX:this.startX,sourceY:this.startY,drawX:m.getDrawX(k),drawY:this.drawY,sourceColumn:n.startColumn,sourceRow:n.startRow,column:m.getColumn(k),row:n.row,drawLine:!0,lineX:m.getLineX(n.index),isEditing:this.isEditing,offset:m.getNodeSize(k)},null,8,[\"node\",\"entities\",\"sourceX\",\"sourceY\",\"drawX\",\"drawY\",\"sourceColumn\",\"sourceRow\",\"column\",\"row\",\"lineX\",\"isEditing\",\"offset\"]))),256))],64)}const py=ve(vy,[[\"render\",yy]]),my={props:{relation:\"\",uuid:void 0,sourceX:0,sourceY:0,drawX:0,drawY:0,sourceColumn:0,sourceRow:0,column:0,row:0,isEditing:!1},data(){return{height:15}},methods:{cssClass(c){let l=\"family-tree-line family-tree-relation-line absolute\";return c===\"vertical\"?l+=\" family-tree-line-vertical\":c===\"horizontal\"&&(l+=\" family-tree-line-horizontal\"),l},verticalSource(){return(this.relation.colour?\"--family-tree-line: \"+this.relation.colour+\";\":\"\")+\"width: 1px; height: \"+this.height+\"px;left: \"+(this.sourceX+this.entityWidth/2)+\"px; top: \"+(this.sourceY+this.entityHeight)+\"px;background-color:\"+this.relation.colour+\";\"},verticalTarget(){return(this.relation.colour?\"--family-tree-line: \"+this.relation.colour+\";\":\"\")+\"width: 1px; height: \"+this.height+\"px;left: \"+(this.drawX+this.entityWidth/2)+\"px; top: \"+(this.drawY+this.entityHeight)+\"px; background-color:\"+this.relation.colour+\";\"},horizontal(){return(this.relation.colour?\"--family-tree-line: \"+this.relation.colour+\";\":\"\")+\"height: 1px;left: \"+(this.sourceX+this.entityWidth/2)+\"px; width: \"+(this.drawX-this.sourceX)+\"px; top: \"+(this.drawY+this.entityHeight+15)+\"px\"},relationBox(){return\"height: 10px;left: \"+(this.drawX-(this.entityWidth/2+20))+\"px; width: \"+(this.entityWidth+20)+\"px; top: \"+(this.drawY+57)+\"px\"},relationText(){return this.relation.role?this.relation.role:window.ftTexts.unknown},editRelation(c,l){this.emitter.emit(\"editRelation\",{uuid:c,relation:l})},addChild(c){this.emitter.emit(\"addChild\",c)},i18n(c,l){return window.ftTexts.modals[c][l].title}}},wy=[\"data-row\",\"data-col\"],xy=[\"data-row\",\"data-col\"],by=[\"data-row\",\"data-col\"],ky=[\"data-row\",\"data-col\"],Cy=[\"title\"],Ey={class:\"truncate\"},Ay={class:\"fa-regular fa-pencil\",\"aria-hidden\":\"true\"},Xy={class:\"sr-only\"},Ry={key:1},Sy=[\"title\"],zy={class:\"sr-only\"};function Uy(c,l,n,_,g,m){return R(),O(Qt,null,[b(\"div\",{class:Be(m.cssClass(\"vertical\")),style:jt(m.verticalSource()),\"data-row\":n.row,\"data-col\":n.column},null,14,wy),b(\"div\",{class:Be(m.cssClass(\"horizontal\")),style:jt(m.horizontal()),\"data-row\":n.row,\"data-col\":n.column},null,14,xy),b(\"div\",{class:\"family-tree-line family-tree-relation-line family-tree-line-vertical absolute\",style:jt(m.verticalTarget()),\"data-row\":n.row,\"data-col\":n.column},null,12,by),b(\"div\",{class:\"family-tree-relation text-center absolute text-sm\",style:jt(m.relationBox()),\"data-row\":n.row,\"data-col\":n.column},[n.isEditing?(R(),O(\"a\",{key:0,onClick:l[0]||(l[0]=N=>m.editRelation(n.uuid,n.relation)),class:\"cursor-pointer\",title:m.i18n(\"relation\",\"edit\")},[b(\"span\",Ey,I(m.relationText()),1),b(\"i\",Ay,[b(\"span\",Xy,I(m.i18n(\"relation\",\"edit\")),1)])],8,Cy)):(R(),O(\"span\",Ry,I(m.relationText()),1)),l[4]||(l[4]=b(\"br\",null,null,-1)),n.isEditing?(R(),O(\"a\",{key:2,onClick:l[1]||(l[1]=N=>m.addChild(n.uuid)),class:\"cursor-pointer\",title:m.i18n(\"entity\",\"child\")},[l[2]||(l[2]=b(\"i\",{class:\"fa-regular fa-baby\",\"aria-hidden\":\"true\"},null,-1)),l[3]||(l[3]=b(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),b(\"span\",zy,I(m.i18n(\"entity\",\"child\")),1)],8,Sy)):G(\"\",!0)],12,ky)],64)}const Yy=ve(my,[[\"render\",Uy]]),Oy={props:{node:void 0,index:0,originX:0,originY:0,targetX:0,column:0,row:0},data(){return{height:\"15\",left:100}},methods:{vertical(){let c=\"width: 1px; height: \"+this.height+\"px;left: \"+(this.targetX+this.left)+\"px; top: \"+(this.originY-15)+\"px;\";return this.node.colour&&(c+=\" background-color:\"+this.node.colour+\";\"),c},horizontal(){let c=110,l=this.targetX-10;this.originX>this.targetX&&(l=this.originX-120);let n=this.targetX-this.originX;return n>=this.entityWidth+20&&(c=n+(this.entityWidth+20)/2,l=this.originX-10),\"height: 1px;width: \"+c+\"px;left: \"+l+\"px; top: \"+(this.originY-15)+\"px; background-color:\"+this.node.colour+\";\"}}},Fy=[\"data-row\",\"data-col\"],Ty=[\"data-ori-x\",\"data-tar-x\",\"data-row\",\"data-col\"];function Ny(c,l,n,_,g,m){return R(),O(Qt,null,[b(\"div\",{class:\"family-tree-line family-tree-child-line family-tree-line-vertical absolute\",style:jt(m.vertical()),\"data-row\":n.row,\"data-col\":n.column},null,12,Fy),b(\"div\",{class:\"family-tree-line family-tree-child-line family-tree-line-horizontal absolute\",style:jt(m.horizontal()),\"data-ori-x\":n.originX,\"data-tar-x\":n.targetX,\"data-row\":n.row,\"data-col\":n.column},null,12,Ty)],64)}const Dy=ve(Oy,[[\"render\",Ny]]),My={props:{sourceX:0,sourceY:0,index:0,column:void 0,row:void 0,node:void 0},data(){return{height:20}},methods:{vertical(){let c=this.sourceY-35,l=this.sourceX-10;return\"width: 1px; height: \"+this.height+\"px;left: \"+l+\"px; top: \"+c+\"px;background-color:\"+this.node.colour+\";\"}}},Ly=[\"data-row\",\"data-col\"];function Wy(c,l,n,_,g,m){return R(),O(\"div\",{class:\"family-tree-line family-tree-child-parent-line family-tree-line-vertical absolute\",style:jt(m.vertical()),\"data-row\":n.row,\"data-col\":n.column},null,12,Ly)}const Py=ve(My,[[\"render\",Wy]]),Iy=W_(),zt=L_({});zt.config.globalProperties.emitter=Iy;zt.config.globalProperties.entityHeight=60;zt.config.globalProperties.entityWidth=200;zt.component(\"family-tree\",Mv);zt.component(\"FamilyNode\",Pv);zt.component(\"FamilyEntity\",ly);zt.component(\"FamilyRelations\",hy);zt.component(\"FamilyRelation\",_y);zt.component(\"FamilyChildren\",py);zt.component(\"RelationLine\",Yy);zt.component(\"ChildrenLine\",Dy);zt.component(\"FamilyParentChildrenLine\",Py);zt.mount(\"#family-tree\");window.ftTexts={};window.familyTreeChildWidth=function(c,l){if(c.relations===void 0||c.relations.length===0)return 1;let n=-1;c.relations.forEach(g=>{n++,g.children!==void 0&&g.children.length>0&&g.children.forEach((m,N)=>{let tt=window.familyTreeChildWidth(m,l);n+=tt})});let _=c.relations.length+1;return Math.max(_,n)};window.familyTreeRelationWidth=function(c,l){let n=l===0?2:1;if(c.children===void 0||c.children.length===0)return n;let _=0,g=0,m=!1;return c.children.forEach((N,tt)=>{g++,tt>0&&_++,N.relations!==void 0&&N.relations.length>0&&N.relations.forEach((z,k)=>{g++,z.children!==void 0&&z.children.length>0&&(m=!0);let $t=window.familyTreeRelationWidth(z,k);tt===0&&$t>2&&(g+=$t-2),_+=$t})}),m?(n=Math.max(g,n),Math.max(n,_)):Math.max(g,n)};\n"
  },
  {
    "path": "public/build/assets/front-BDaha8uH.js",
    "content": "import{a as n}from\"./index-D5GkNzM3.js\";import\"./dialog-DkrH_pRQ.js\";window.axios=n;window.axios.defaults.headers.common[\"X-Requested-With\"]=\"XMLHttpRequest\";let t=document.head.querySelector('meta[name=\"csrf-token\"]');t&&(window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"]=t.content);window.onload=function(e){const o=document.getElementById(\"nav-mobile-toggler\");o.addEventListener(\"click\",()=>{o.classList.toggle(\"open\")}),window.initDialogs(),a()};const a=()=>{const e=document.querySelector('[name=\"open-dialog\"]');e&&window.openDialog(e.value)};\n"
  },
  {
    "path": "public/build/assets/front-CZW4xdyL.css",
    "content": "@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:\"\";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-700:oklch(55.5% .163 48.998);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-teal-500:oklch(70.4% .14 182.503);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-600:oklch(51.1% .262 276.966);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-700:oklch(49.6% .265 301.924);--color-pink-500:oklch(65.6% .241 354.308);--color-pink-800:oklch(45.9% .187 3.815);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-700:oklch(37.4% .01 67.558);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--blur-sm:8px;--blur-lg:16px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}h1,.text-xl{font-size:2.1875rem;font-weight:700;line-height:2.89875rem}h2,.text-lg{font-size:1.8125rem;font-weight:700;line-height:2.71875rem}h3,.text-md{font-size:1.375rem;font-weight:800;line-height:1.66438rem}h4,.text-sm{font-size:1.175rem;font-weight:600;line-height:1.46438rem}p,li{font-size:.875rem;font-weight:400;line-height:1.41313rem}.text-nav{font-size:1.25rem;font-weight:500;line-height:1.875rem}@media(min-width:768px){h1,.text-xl{font-size:3.125rem;font-weight:700;line-height:4.6875rem}h2,.text-lg{font-size:2.8125rem;font-weight:700;line-height:4.21875rem}h3,.text-md{font-size:1.5625rem;font-weight:800;line-height:1.89125rem}p,li{font-size:1rem;font-weight:400;line-height:1.615rem}}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\\!sticky{position:sticky!important}.absolute{position:absolute}.absolute\\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-1{inset:calc(var(--spacing)*1)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\\.5{top:calc(var(--spacing)*1.5)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-12{top:calc(var(--spacing)*12)}.top-14{top:calc(var(--spacing)*14)}.top-auto{top:auto}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-4{left:calc(var(--spacing)*4)}.left-auto{left:auto}.isolate{isolation:isolate}.z-0{z-index:0}.z-5{z-index:5}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-700{z-index:700}.z-820{z-index:820}.z-821{z-index:821}.z-840{z-index:840}.z-900{z-index:900}.z-1000{z-index:1000}.z-1001{z-index:1001}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.col-1{grid-column:1}.col-2{grid-column:2}.col-3{grid-column:3}.col-4{grid-column:4}.col-5{grid-column:5}.col-6{grid-column:6}.col-7{grid-column:7}.col-8{grid-column:8}.col-9{grid-column:9}.col-10{grid-column:10}.col-11{grid-column:11}.col-12{grid-column:12}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.row-span-2{grid-row:span 2/span 2}.float-left{float:left}.float-none{float:none}.float-right{float:right}.clear-both{clear:both}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.container\\!{width:100%!important}@media(min-width:40rem){.container\\!{max-width:40rem!important}}@media(min-width:48rem){.container\\!{max-width:48rem!important}}@media(min-width:64rem){.container\\!{max-width:64rem!important}}@media(min-width:80rem){.container\\!{max-width:80rem!important}}@media(min-width:96rem){.container\\!{max-width:96rem!important}}.m-0{margin:calc(var(--spacing)*0)}.m-1{margin:calc(var(--spacing)*1)}.m-2{margin:calc(var(--spacing)*2)}.m-3{margin:calc(var(--spacing)*3)}.m-4{margin:calc(var(--spacing)*4)}.m-5{margin:calc(var(--spacing)*5)}.m-1386{margin:calc(var(--spacing)*1386)}.m-3601{margin:calc(var(--spacing)*3601)}.m-4512{margin:calc(var(--spacing)*4512)}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0{margin-block:calc(var(--spacing)*0)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.my-8{margin-block:calc(var(--spacing)*8)}.my-auto{margin-block:auto}.ms-0{margin-inline-start:calc(var(--spacing)*0)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-px{margin-top:1px}.mr-0\\!{margin-right:calc(var(--spacing)*0)!important}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-5{margin-right:calc(var(--spacing)*5)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-20{margin-bottom:calc(var(--spacing)*20)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-11{margin-left:calc(var(--spacing)*11)}.ml-16{margin-left:calc(var(--spacing)*16)}.ml-21{margin-left:calc(var(--spacing)*21)}.ml-\\[-8px\\]{margin-left:-8px}.ml-auto{margin-left:auto}.\\!flex{display:flex!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\\!{display:flex!important}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.hidden\\!{display:none!important}.inline{display:inline}.inline\\!{display:inline!important}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table\\!{display:table!important}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-3\\/1{aspect-ratio:3}.aspect-4\\/3{aspect-ratio:4/3}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-0{height:calc(var(--spacing)*0)}.h-0\\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-1\\/2{height:50%}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-25{height:calc(var(--spacing)*25)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-44{height:calc(var(--spacing)*44)}.h-50{height:calc(var(--spacing)*50)}.h-52{height:calc(var(--spacing)*52)}.h-60{height:calc(var(--spacing)*60)}.h-75{height:calc(var(--spacing)*75)}.h-100{height:calc(var(--spacing)*100)}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-14{max-height:calc(var(--spacing)*14)}.max-h-52{max-height:calc(var(--spacing)*52)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-\\[80vh\\]{max-height:80vh}.max-h-\\[300px\\]{max-height:300px}.max-h-\\[400px\\]{max-height:400px}.max-h-full{max-height:100%}.\\!min-h-3{min-height:calc(var(--spacing)*3)!important}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-12{min-height:calc(var(--spacing)*12)}.min-h-50{min-height:calc(var(--spacing)*50)}.min-h-80{min-height:calc(var(--spacing)*80)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-25{width:calc(var(--spacing)*25)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-46{width:calc(var(--spacing)*46)}.w-48{width:calc(var(--spacing)*48)}.w-50{width:calc(var(--spacing)*50)}.w-52{width:calc(var(--spacing)*52)}.w-60{width:calc(var(--spacing)*60)}.w-72{width:calc(var(--spacing)*72)}.w-75{width:calc(var(--spacing)*75)}.w-80{width:calc(var(--spacing)*80)}.w-100{width:calc(var(--spacing)*100)}.w-\\[25\\%\\]{width:25%}.w-\\[47\\%\\]{width:47%}.w-\\[220px\\]{width:220px}.w-\\[800px\\]{width:800px}.w-auto{width:auto}.w-fit{width:fit-content}.w-fit\\!{width:fit-content!important}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-28{max-width:calc(var(--spacing)*28)}.max-w-32{max-width:calc(var(--spacing)*32)}.max-w-\\[90vw\\]{max-width:90vw}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-56{min-width:calc(var(--spacing)*56)}.min-w-72{min-width:calc(var(--spacing)*72)}.min-w-\\[150px\\]{min-width:150px}.min-w-\\[200px\\]{min-width:200px}.min-w-\\[250px\\]{min-width:250px}.min-w-fit{min-width:fit-content}.min-w-max{min-width:max-content}.flex-0{flex:0}.flex-1{flex:1}.flex-3{flex:3}.flex-initial{flex:0 auto}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.flex-shrink-1,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-0{flex-grow:0}.flex-grow-1,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-1\\/4{flex-basis:25%}.basis-2\\/4{flex-basis:50%}.basis-3\\/4{flex-basis:75%}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-270{rotate:270deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform\\!{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)!important}.animate-ping{animation:var(--animate-ping)}.cursor-crosshair{cursor:crosshair}.cursor-move{cursor:move}.cursor-move\\!{cursor:move!important}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-pt-16{scroll-padding-top:calc(var(--spacing)*16)}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-flow-row-dense{grid-auto-flow:dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.content-center{align-content:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-items-stretch{justify-items:stretch}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-16{gap:calc(var(--spacing)*16)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-2xl{border-top-left-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-2xl{border-top-left-radius:var(--radius-2xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-2xl{border-top-right-radius:var(--radius-2xl);border-bottom-right-radius:var(--radius-2xl)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-tr-2xl{border-top-right-radius:var(--radius-2xl)}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-0\\!{border-style:var(--tw-border-style)!important;border-width:0!important}.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-amber-700{border-color:var(--color-amber-700)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-blue-900{border-color:var(--color-blue-900)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-800{border-color:var(--color-gray-800)}.border-inherit{border-color:inherit}.border-red-300{border-color:var(--color-red-300)}.border-red-400{border-color:var(--color-red-400)}.border-red-500{border-color:var(--color-red-500)}.border-slate-600{border-color:var(--color-slate-600)}.border-white{border-color:var(--color-white)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black\\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-300{background-color:var(--color-orange-300)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-300{background-color:var(--color-red-300)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-700\\/50{background-color:#bf000f80}@supports (color:color-mix(in lab,red,red)){.bg-red-700\\/50{background-color:color-mix(in oklab,var(--color-red-700)50%,transparent)}}.bg-red-900\\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.bg-red-900\\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.bg-sky-100{background-color:var(--color-sky-100)}.bg-stone-200{background-color:var(--color-stone-200)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-300{background-color:var(--color-yellow-300)}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-none{background-image:none}.from-black\\/60{--tw-gradient-from:#0009}@supports (color:color-mix(in lab,red,red)){.from-black\\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent)}}.from-black\\/60{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-black\\/70{--tw-gradient-from:#000000b3}@supports (color:color-mix(in lab,red,red)){.from-black\\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent)}}.from-black\\/70{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-700\\/50{--tw-gradient-from:#36415380}@supports (color:color-mix(in lab,red,red)){.from-gray-700\\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.from-gray-700\\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\!{padding:calc(var(--spacing)*1)!important}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\\!{padding-inline:calc(var(--spacing)*0)!important}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-16{padding-inline:calc(var(--spacing)*16)}.\\!py-0\\.5{padding-block:calc(var(--spacing)*.5)!important}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-12{padding-top:calc(var(--spacing)*12)}.pr-0{padding-right:calc(var(--spacing)*0)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-10{padding-right:calc(var(--spacing)*10)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-left\\!{text-align:left!important}.text-right{text-align:right}.align-baseline{vertical-align:baseline}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-middle\\!{vertical-align:middle!important}.align-text-bottom{vertical-align:text-bottom}.align-text-top{vertical-align:text-top}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-xs\\!{font-size:var(--text-xs)!important;line-height:var(--tw-leading,var(--text-xs--line-height))!important}.text-\\[1\\.2rem\\]{font-size:1.2rem}.text-\\[1\\.3rem\\]{font-size:1.3rem}.text-\\[1\\.4rem\\]{font-size:1.4rem}.text-\\[8px\\]{font-size:8px}.text-\\[10px\\]{font-size:10px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-nowrap{text-wrap:nowrap}.text-wrap{text-wrap:wrap}.break-normal{overflow-wrap:normal;word-break:normal}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-amber-700{color:var(--color-amber-700)}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-inherit{color:inherit}.text-orange-300{color:var(--color-orange-300)}.text-orange-500{color:var(--color-orange-500)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-800{color:var(--color-pink-800)}.text-purple-500{color:var(--color-purple-500)}.text-purple-700{color:var(--color-purple-700)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-800{color:var(--color-red-800)}.text-sky-700{color:var(--color-sky-700)}.text-slate-800{color:var(--color-slate-800)}.text-stone-700{color:var(--color-stone-700)}.text-teal-500{color:var(--color-teal-500)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.italic\\!{font-style:italic!important}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline\\!{text-decoration-line:underline!important}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.mix-blend-color-dodge{mix-blend-mode:color-dodge}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-gray-500\\/20{--tw-shadow-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.shadow-gray-500\\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-gray-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur\\!{--tw-blur:blur(8px)!important;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-30{--tw-backdrop-opacity:opacity(30%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\\[character\\:76\\]{character:76}.\\[character\\:123\\]{character:123}.\\[character\\:4092\\]{character:4092}.\\[entity\\:2\\]{entity:2}.\\[entity\\:10\\]{entity:10}.\\[entity\\:123\\]{entity:123}.\\[type\\:id\\]{type:id}.\\[type\\:id\\|config\\.\\.\\.\\]{type:id|config...}@media(hover:hover){.group-hover\\:-translate-y-0\\.5:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\\:translate-y-0\\.5:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-\\[\\.status-down\\]\\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.selection\\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\\:text-white ::selection{color:var(--color-white)}.selection\\:text-white::selection{color:var(--color-white)}.backdrop\\:bg-black\\/50::backdrop{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.backdrop\\:bg-black\\/50::backdrop{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.after\\:mr-1:after{content:var(--tw-content);margin-right:calc(var(--spacing)*1)}.after\\:content-\\[\\'\\,\\'\\]:after{--tw-content:\",\";content:var(--tw-content)}.last\\:after\\:content-none:last-child:after{content:var(--tw-content);--tw-content:none;content:none}@media(hover:hover){.hover\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:rotate-45:hover{rotate:45deg}.hover\\:rotate-90:hover{rotate:90deg}.hover\\:border-b-2:hover{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hover\\:bg-blue-300:hover{background-color:var(--color-blue-300)}.hover\\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-red-400:hover{background-color:var(--color-red-400)}.hover\\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\\:bg-red-900\\/90:hover{background-color:#82181ae6}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-red-900\\/90:hover{background-color:color-mix(in oklab,var(--color-red-900)90%,transparent)}}.hover\\:font-bold:hover{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.hover\\:font-semibold:hover{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.hover\\:text-blue-800:hover{color:var(--color-blue-800)}.hover\\:text-blue-900:hover{color:var(--color-blue-900)}.hover\\:text-orange-500:hover{color:var(--color-orange-500)}.hover\\:text-red-300:hover{color:var(--color-red-300)}.hover\\:text-white:hover{color:var(--color-white)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-xs:hover{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:backdrop-opacity-100:hover{--tw-backdrop-opacity:opacity(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}}.focus\\:z-20:focus{z-index:20}.focus\\:opacity-100:focus{opacity:1}.focus\\:shadow-md:focus{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\\:opacity-50:disabled{opacity:.5}@media not all and (min-width:40rem){.max-sm\\:hidden{display:none}}@media(min-width:40rem){.sm\\:col-span-3{grid-column:span 3/span 3}.sm\\:block{display:block}.sm\\:flex{display:flex}.sm\\:hidden{display:none}.sm\\:inline{display:inline}.sm\\:inline-block{display:inline-block}.sm\\:table-cell{display:table-cell}.sm\\:w-3\\/4{width:75%}.sm\\:w-48{width:calc(var(--spacing)*48)}.sm\\:w-60{width:calc(var(--spacing)*60)}.sm\\:w-80{width:calc(var(--spacing)*80)}.sm\\:w-96{width:calc(var(--spacing)*96)}.sm\\:flex-1{flex:1}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\:flex-row{flex-direction:row}.sm\\:items-center{align-items:center}.sm\\:justify-between{justify-content:space-between}.sm\\:gap-3{gap:calc(var(--spacing)*3)}.sm\\:gap-5{gap:calc(var(--spacing)*5)}.sm\\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.sm\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.sm\\:pr-4{padding-right:calc(var(--spacing)*4)}}@media(min-width:48rem){.md\\:relative{position:relative}.md\\:sticky{position:sticky}.md\\:top-24{top:calc(var(--spacing)*24)}.md\\:col-span-1{grid-column:span 1/span 1}.md\\:col-span-2{grid-column:span 2/span 2}.md\\:col-span-3{grid-column:span 3/span 3}.md\\:col-span-4{grid-column:span 4/span 4}.md\\:col-span-5{grid-column:span 5/span 5}.md\\:col-span-6{grid-column:span 6/span 6}.md\\:col-span-7{grid-column:span 7/span 7}.md\\:col-span-8{grid-column:span 8/span 8}.md\\:col-span-9{grid-column:span 9/span 9}.md\\:col-span-10{grid-column:span 10/span 10}.md\\:col-span-11{grid-column:span 11/span 11}.md\\:col-span-12{grid-column:span 12/span 12}.md\\:mt-6{margin-top:calc(var(--spacing)*6)}.md\\:mt-28{margin-top:calc(var(--spacing)*28)}.md\\:block{display:block}.md\\:flex{display:flex}.md\\:grid{display:grid}.md\\:hidden{display:none}.md\\:inline{display:inline}.md\\:inline\\!{display:inline!important}.md\\:inline-block{display:inline-block}.md\\:table-cell{display:table-cell}.md\\:h-16{height:calc(var(--spacing)*16)}.md\\:h-32{height:calc(var(--spacing)*32)}.md\\:h-36{height:calc(var(--spacing)*36)}.md\\:w-8{width:calc(var(--spacing)*8)}.md\\:w-16{width:calc(var(--spacing)*16)}.md\\:w-40{width:calc(var(--spacing)*40)}.md\\:w-48{width:calc(var(--spacing)*48)}.md\\:w-80{width:calc(var(--spacing)*80)}.md\\:w-96{width:calc(var(--spacing)*96)}.md\\:w-fit{width:fit-content}.md\\:w-full{width:100%}.md\\:flex-none{flex:none}.md\\:grow-0{flex-grow:0}.md\\:basis-1\\/4{flex-basis:25%}.md\\:basis-3\\/4{flex-basis:75%}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\\:flex-col{flex-direction:column}.md\\:flex-row{flex-direction:row}.md\\:flex-nowrap{flex-wrap:nowrap}.md\\:flex-wrap{flex-wrap:wrap}.md\\:items-center{align-items:center}.md\\:items-start{align-items:flex-start}.md\\:justify-between{justify-content:space-between}.md\\:justify-start{justify-content:flex-start}.md\\:gap-0{gap:calc(var(--spacing)*0)}.md\\:gap-2{gap:calc(var(--spacing)*2)}.md\\:gap-3{gap:calc(var(--spacing)*3)}.md\\:gap-4{gap:calc(var(--spacing)*4)}.md\\:gap-5{gap:calc(var(--spacing)*5)}.md\\:gap-6{gap:calc(var(--spacing)*6)}.md\\:gap-10{gap:calc(var(--spacing)*10)}.md\\:self-auto{align-self:auto}.md\\:rounded-2xl{border-radius:var(--radius-2xl)}.md\\:rounded-xl{border-radius:var(--radius-xl)}.md\\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.md\\:p-4{padding:calc(var(--spacing)*4)}.md\\:p-5{padding:calc(var(--spacing)*5)}.md\\:p-6{padding:calc(var(--spacing)*6)}.md\\:px-3{padding-inline:calc(var(--spacing)*3)}.md\\:px-6{padding-inline:calc(var(--spacing)*6)}.md\\:px-10{padding-inline:calc(var(--spacing)*10)}.md\\:py-14{padding-block:calc(var(--spacing)*14)}.md\\:pt-24{padding-top:calc(var(--spacing)*24)}.md\\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.md\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(min-width:64rem){.lg\\:col-span-1{grid-column:span 1/span 1}.lg\\:col-span-2{grid-column:span 2/span 2}.lg\\:col-span-3{grid-column:span 3/span 3}.lg\\:col-span-4{grid-column:span 4/span 4}.lg\\:col-span-5{grid-column:span 5/span 5}.lg\\:col-span-6{grid-column:span 6/span 6}.lg\\:col-span-7{grid-column:span 7/span 7}.lg\\:col-span-8{grid-column:span 8/span 8}.lg\\:col-span-9{grid-column:span 9/span 9}.lg\\:col-span-10{grid-column:span 10/span 10}.lg\\:col-span-11{grid-column:span 11/span 11}.lg\\:col-span-12{grid-column:span 12/span 12}.lg\\:mx-0{margin-inline:calc(var(--spacing)*0)}.lg\\:mx-auto{margin-inline:auto}.lg\\:block{display:block}.lg\\:flex{display:flex}.lg\\:hidden{display:none}.lg\\:inline{display:inline}.lg\\:table-cell{display:table-cell}.lg\\:w-16{width:calc(var(--spacing)*16)}.lg\\:w-40{width:calc(var(--spacing)*40)}.lg\\:w-80{width:calc(var(--spacing)*80)}.lg\\:max-w-2xl{max-width:var(--container-2xl)}.lg\\:max-w-7xl{max-width:var(--container-7xl)}.lg\\:max-w-none{max-width:none}.lg\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\\:flex-row{flex-direction:row}.lg\\:gap-2{gap:calc(var(--spacing)*2)}.lg\\:gap-3{gap:calc(var(--spacing)*3)}.lg\\:gap-4{gap:calc(var(--spacing)*4)}.lg\\:gap-5{gap:calc(var(--spacing)*5)}.lg\\:gap-6{gap:calc(var(--spacing)*6)}.lg\\:gap-8{gap:calc(var(--spacing)*8)}.lg\\:gap-10{gap:calc(var(--spacing)*10)}.lg\\:gap-12{gap:calc(var(--spacing)*12)}.lg\\:gap-20{gap:calc(var(--spacing)*20)}.lg\\:p-3{padding:calc(var(--spacing)*3)}.lg\\:py-12{padding-block:calc(var(--spacing)*12)}}@media(min-width:80rem){.xl\\:col-span-2{grid-column:span 2/span 2}.xl\\:col-span-3{grid-column:span 3/span 3}.xl\\:col-span-4{grid-column:span 4/span 4}.xl\\:flex{display:flex}.xl\\:hidden{display:none}.xl\\:inline{display:inline}.xl\\:aspect-auto{aspect-ratio:auto}.xl\\:w-1\\/2{width:50%}.xl\\:w-80{width:calc(var(--spacing)*80)}.xl\\:w-auto{width:auto}.xl\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\\:gap-4{gap:calc(var(--spacing)*4)}.xl\\:gap-5{gap:calc(var(--spacing)*5)}.xl\\:gap-8{gap:calc(var(--spacing)*8)}.xl\\:px-0{padding-inline:calc(var(--spacing)*0)}.xl\\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:96rem){.\\32xl\\:mx-auto{margin-inline:auto}.\\32xl\\:min-w-7xl{min-width:var(--container-7xl)}.\\32xl\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.ltr\\:flex-row:where(:dir(ltr),[dir=ltr],[dir=ltr] *){flex-direction:row}.rtl\\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}@media(prefers-color-scheme:dark){.dark\\:hidden{display:none}.dark\\:inline{display:inline}.dark\\:border-gray-700{border-color:var(--color-gray-700)}.dark\\:border-slate-500{border-color:var(--color-slate-500)}.dark\\:bg-gray-900{background-color:var(--color-gray-900)}.dark\\:bg-slate-800{background-color:var(--color-slate-800)}.dark\\:text-gray-400{color:var(--color-gray-400)}.dark\\:text-orange-300{color:var(--color-orange-300)}.dark\\:text-slate-200{color:var(--color-slate-200)}.dark\\:text-slate-400{color:var(--color-slate-400)}.dark\\:text-white{color:var(--color-white)}}@media print{.print\\:hidden{display:none}}}dialog{max-inline-size:min(90vw,var(--size-content-3));z-index:1050;border:0;flex-direction:column;max-block-size:min(80dvh,100%);margin:auto;padding:0;transition:opacity .5s ease-in-out;display:flex;position:fixed;inset:0}dialog>form{flex-direction:column;min-block-size:0;display:flex;overflow:hidden}dialog header{flex-shrink:0}dialog article{overscroll-behavior-y:contain;min-block-size:0;overflow-y:auto}dialog footer{flex-shrink:0}dialog footer menu:only-child{margin-inline-start:auto}dialog:not([open]){pointer-events:none;opacity:0}dialog::backdrop{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);transition:-webkit-backdrop-filter .3s,backdrop-filter .3s}html:has(dialog[open]){overflow:hidden}@media(max-width:768px){dialog{border-end-end-radius:0;border-end-start-radius:0;margin-block-end:0}dialog article{flex:initial;max-height:70dvh}}:root{--dark:#112b6b;--purple:#40479e;--light:#95b5d8;--blue:#4a58ff;--switcher:#d8dbff}.bg-dark{background-color:var(--dark)}.bg-purple{background-color:var(--purple)}.bg-light{background-color:var(--light)}.bg-blue{background-color:var(--blue)}.bg-switcher{background-color:var(--switcher)}.border-dark{border-color:var(--dark)}.border-blue{border-color:var(--blue)}.hover\\:bg-light:hover{background-color:var(--light)}.hover\\:text-light:hover{color:var(--light)}.hover\\:text-dark:hover{color:var(--dark)}.hover\\:text-purple:hover{color:var(--purple)}.hover\\:text-blue:hover{color:var(--blue)}.link,.link-light{color:var(--dark);font-weight:500;transition:all .2s}:is(.link,.link-light):hover,:is(.link,.link-light):focus{color:var(--light)}:is(.link,.link-light).active{font-weight:700}.link-light{color:var(--light)}.link-light:hover,.link-light:focus,.link-blue{color:var(--blue)}.btn-round{background-color:var(--blue);color:#fff;align-items:center;gap:.5rem;padding:1rem 2rem;font-size:1rem;font-weight:500;transition:all .2s;display:flex}.btn-round:hover,.btn-round:focus{background-color:var(--dark);color:#fff}.btn-sm{padding:.8rem 1.3rem;font-size:.875rem}.block-input,.block-btn{border:1px solid var(--purple);color:var(--purple);padding:1rem 2rem;transition:all .2s}.block-btn:hover,.block-btn:focus{background-color:var(--purple);color:#fff}.btn-register,.btn-login{border-radius:2rem;padding:.45rem 1.88rem;font-size:1rem}.btn-register{color:#fff;background-color:var(--purple)}.btn-register:hover{background-color:var(--dark)}.btn-login{border:1px solid var(--purple);color:var(--purple)}.btn-login:hover{background-color:var(--purple);color:#fff}.btn-primary{background-color:var(--dark);color:#fff;text-align:center;border-radius:.2rem;padding:13px 32px}.btn-primary:hover{background-color:var(--purple)}nav.text-nav a:hover{color:var(--blue)}nav.text-nav a.active,nav.text-nav a .active{color:var(--light)}.text-dark{color:var(--dark)}.text-light{color:var(--light)}.text-blue{color:var(--blue)}.text-purple{color:var(--purple)}.text-sm{font-size:.875rem;font-weight:400;line-height:1.41313rem}.btn{font-size:1rem;font-weight:500;line-height:1.615rem}code{color:var(--light)}html{scroll-behavior:smooth}#nav-mobile-toggler .close,#nav-mobile-toggler .mobile-menu,#nav-mobile-toggler.open .open{display:none}#nav-mobile-toggler.open .close,#nav-mobile-toggler.open .mobile-menu{display:unset}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}\n"
  },
  {
    "path": "public/build/assets/gallery-DqcxhMJm.js",
    "content": "import{f as Te,o as t,c as s,n as de,w as B,D as Ne,b as u,h as S,a as e,E as _l,g as je,p as Ae,y as _e,F as R,r as Y,i as n,A as xl,G as bl,H as kl,l as yl,j as Ml,q as Tl,m as wl,e as Ll}from\"./vendor-tiptap-D5xFoo7B.js\";import{v as Hl}from\"./v-click-outside.umd-Cl-Y_A58.js\";import\"./_commonjsHelpers-Cpj98o6Y.js\";const $l={key:1,class:\"flex-none w-20 md:w-full h-16 md:h-32\"},Cl={key:1,class:\"w-full h-full flex gap-0.5\"},Fl={key:2,class:\"w-full h-full flex gap-0.5\"},Pl={class:\"flex flex-col gap-0.5 w-1/2 h-full\"},Il={key:3,class:\"h-full w-full flex items-center justify-center align-middle text-6xl text-neutral-content\"},Sl={key:3,class:\"w-full h-20 md:h-32\"},Ul={class:\"flex gap-1 md:gap-2 items-center md:p-4 truncate\"},Bl={key:0,class:\"grow-0 md:hidden\"},Dl=[\"title\"],El={class:\"grow truncate\"},Vl=[\"innerHTML\"],Nl={key:1,class:\"hidden md:block grow-0\"},jl=[\"title\"],Al=Te({__name:\"Preview\",props:{file:{},isBulking:{},i18n:{}},emits:[\"select\"],setup(r,{emit:le}){const o=le,h=r,V=()=>h.file.thumbnail!==null,T=$=>\"url('\"+$+\"')\",w=()=>{o(\"select\",h.file)},D=()=>{let $=\"rounded-xl shadow-sm bg-base-100 overflow-hidden sm:w-48 cursor-pointer hover:shadow-lg relative flex flex-row md:flex-col gap-2 md:gap-0\";return!h.file.is_selected||!h.isBulking?$+\"  \":$+\" bg-base-300\"},p=()=>{switch(parseInt(h.file.visibility_id)){case 2:return\"fa-regular fa-lock\";case 3:return\"fa-regular fa-user-lock\";case 4:return\"fa-regular fa-user-secret\";case 5:return\"fa-regular fa-users\";default:return\"fa-regular fa-eye\"}},U=()=>h.i18n[\"visibility.\"+h.file.visibility_id];return($,C)=>(t(),s(\"div\",{class:de(D()),onClick:w},[r.isBulking?B((t(),s(\"input\",{key:0,type:\"checkbox\",\"onUpdate:modelValue\":C[0]||(C[0]=I=>r.file.is_selected=I),class:\"absolute! top-4 left-4\"},null,512)),[[Ne,r.file.is_selected]]):u(\"\",!0),r.file.is_folder?(t(),s(\"div\",$l,[r.file.thumbnails.length===1?(t(),s(\"div\",{key:0,class:\"w-full h-full\",style:S({backgroundImage:T(r.file.thumbnails[0])})},null,4)):r.file.thumbnails.length===2?(t(),s(\"div\",Cl,[e(\"div\",{class:\"w-1/2 h-full cover-background\",style:S({backgroundImage:T(r.file.thumbnails[0])})},null,4),e(\"div\",{class:\"w-1/2 h-full cover-background\",style:S({backgroundImage:T(r.file.thumbnails[1])})},null,4)])):r.file.thumbnails.length===3?(t(),s(\"div\",Fl,[e(\"div\",{class:\"w-1/2 h-full cover-background\",style:S({backgroundImage:T(r.file.thumbnails[0])})},null,4),e(\"div\",Pl,[e(\"div\",{class:\"w-full h-1/2 cover-background\",style:S({backgroundImage:T(r.file.thumbnails[1])})},null,4),e(\"div\",{class:\"w-full h-1/2 cover-background\",style:S({backgroundImage:T(r.file.thumbnails[2])})},null,4)])])):(t(),s(\"div\",Il,[...C[1]||(C[1]=[e(\"i\",{class:\"fa-regular fa-folder\",\"aria-hidden\":\"true\"},null,-1)])]))])):V()?(t(),s(\"div\",{key:2,class:\"flex-none w-20 md:w-full h-16 md:h-32 cover-background\",style:S({backgroundImage:T(r.file.thumbnail)})},null,4)):(t(),s(\"div\",Sl)),e(\"div\",Ul,[r.file.visibility_id>1?(t(),s(\"div\",Bl,[e(\"i\",{class:de(p()),\"aria-hidden\":\"true\",title:U()},null,10,Dl)])):u(\"\",!0),e(\"div\",El,[e(\"span\",{innerHTML:r.file.name,class:\"\"},null,8,Vl)]),r.file.visibility_id>1?(t(),s(\"div\",Nl,[e(\"i\",{class:de(p()),\"aria-hidden\":\"true\",title:U()},null,10,jl)])):u(\"\",!0)])],2))}}),Rl={class:\"bg-base-100 p-2 md:p-4 rounded flex flex-col gap-2 md:gap-4 md:sticky md:top-24\"},zl={key:0,class:\"text-2xl flex items-center justify-center h-32\"},Xl={key:1,class:\"flex flex-col gap-4\"},Yl={class:\"flex items-center gap-2\"},Kl={class:\"flex items-center gap-1 grow\"},Ol=[\"innerHTML\"],Wl={class:\"flex flex-col gap-1\"},Gl=[\"innerHTML\"],ql=[\"innerHTML\"],Jl={key:0,class:\"flex flex-col gap-1\"},Ql={class:\"font-extrabold flex gap-1 items-center\"},Zl=[\"innerHTML\"],ea=[\"value\",\"innerHTML\"],la={key:1,class:\"flex flex-col gap-1\"},aa={class:\"grow font-bold flex gap-1 items-center\"},ta=[\"innerHTML\"],sa={key:0,class:\"fa-solid fa-chevron-up\",\"aria-label\":\"Hide mentions\"},na={key:1,class:\"fa-solid fa-chevron-down\",\"aria-label\":\"Show mentions\"},ia={key:0,class:\"flex flex-wrap gap-2\"},oa=[\"href\"],ua={key:0,class:\"fa-regular fa-image\",\"aria-hidden\":\"true\"},ra={key:1,class:\"fa-regular fa-pen\",\"aria-hidden\":\"true\"},da=[\"innerHTML\"],ca=[\"innerHTML\"],fa={key:2,class:\"grid grid-cols-2 gap-2\"},va=[\"innerHTML\"],ga=[\"innerHTML\"],pa=[\"innerHTML\"],ha=[\"innerHTML\"],ma=[\"innerHTML\"],_a=[\"innerHTML\"],xa=[\"innerHTML\"],ba=[\"href\"],ka=[\"innerHTML\"],ya={class:\"flex gap-2 items-center justify-between\"},Ma={key:0,class:\"fa-solid fa-spinner fa-spin text-error-content\",\"aria-label\":\"Deleting\"},Ta=[\"innerHTML\"],wa=[\"innerHTML\"],La=[\"innerHTML\"],Ha={key:3,class:\"grow text-right text-neutral-content\"},$a=[\"innerHTML\"],Ca={key:3,class:\"text-right text-neutral-content flex gap-1 self-end items-center text-xs\"},Fa=[\"innerHTML\"],Pa={key:2,class:\"flex flex-col gap-4 overflow-hidden\"},Ia={key:0,class:\"alert alert-warning p-4 flex flex-col gap-2\"},Sa=[\"innerHTML\"],Ua={key:1,class:\"max-w-32 flex items-center justify-center\"},Ba={class:\"relative inline-block\"},Da=[\"src\"],Ea={class:\"flex gap-2 items-center flex-wrap justify-between\"},Va=[\"innerHTML\"],Na=[\"innerHTML\"],ja=Te({__name:\"File\",props:{file:{},visibilities:{},i18n:{},premium:{},canManage:{}},emits:[\"updated\",\"deleted\",\"moved\",\"closed\"],setup(r,{emit:le}){const o=r,h=le,V=n(),T=n(),w=n(!1),D=n(!1),p=n(),U=n(!0),$=n(!1),C=n(!1),I=n(!0),N=n(!1),k=n(),m=n(),F=n();_l(()=>o.file,(x,i)=>{x&&K()}),je(()=>{K()});const b=x=>o.i18n[x]?o.i18n[x]:\"_\"+x+\"_\",K=()=>{U.value=!0,w.value=!1,D.value=!1,T.value=o.file.name,p.value=o.file.visibility_id,m.value=o.file.focus_x,F.value=o.file.focus_y,$.value=!1,C.value=!1,N.value=!1,axios.get(o.file.api.show).then(x=>{V.value=x.data.data.mentions,U.value=!1})},O=()=>{T.value!==o.file.name&&f()},c=()=>{p.value!==o.file.visibility_id&&f()},f=()=>{if(w.value)return;w.value=!0;const x={name:T.value,visibility_id:p.value};axios.post(o.file.api.update,x).then(i=>{o.file.name=T.value,o.file.visibility_id=p.value,o.file.visibility=i.data.data.visibility,w.value=!1,D.value=!0,h(\"updated\",o.file)})},E=()=>{I.value=!I.value},L=()=>V.value.length>0,j=()=>{if(!$.value){if(!C.value){C.value=!0;return}$.value=!0,axios.post(o.file.api.delete,{_method:\"delete\"}).then(x=>{window.showToast(\"Removed \"+o.file.name),h(\"deleted\",o.file,x.data.used)})}},W=()=>{h(\"closed\")},xe=()=>{N.value=!0},G=()=>{N.value=!1},ce=x=>{const i=k.value.naturalWidth,y=k.value.naturalHeight,H=x.clientX-k.value.getBoundingClientRect().left,P=x.clientY-k.value.getBoundingClientRect().top,ae=H/k.value.clientWidth*i,ve=P/k.value.clientHeight*y;m.value=parseInt(String(ae),10),F.value=parseInt(String(ve),10)},q=x=>{if(!m.value||!k.value)return\"display: none;\";const i=k.value.naturalWidth,y=k.value.naturalHeight,H=m.value/i*100,P=F.value/y*100;return\"left: \"+H+\"%; top: \"+P+\"%\"},J=()=>{m.value=null,F.value=null,z()},fe=()=>{z()},z=()=>{if(w.value)return;w.value=!0,N.value=!1;const x={focus_x:m.value,focus_y:F.value};axios.post(o.file.api.focus,x).then(i=>{w.value=!1,D.value=!0,o.file.focus_x=m.value,o.file.focus_y=F.value,console.log(i.data),o.file.thumbnail=i.data.data.thumbnail,h(\"updated\",o.file)})};return(x,i)=>(t(),s(\"div\",Rl,[U.value?(t(),s(\"div\",zl,[...i[2]||(i[2]=[e(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):N.value?(t(),s(\"div\",Pa,[o.premium?(t(),s(\"div\",Ua,[e(\"div\",Ba,[e(\"div\",{class:\"absolute cursor-pointer text-4xl text-accent\",style:S(q()),onClick:J},[...i[13]||(i[13]=[e(\"i\",{class:\"fa-duotone fa-arrow-up-left-from-circle hover:text-error-content\",\"aria-label\":\"Focus point\"},null,-1)])],4),e(\"img\",{class:\"cursor-crosshair\",src:o.file.original,alt:\"img\",ref_key:\"focusImage\",ref:k,onClick:ce},null,8,Da)])])):(t(),s(\"div\",Ia,[e(\"p\",{innerHTML:b(\"focus_locked\")},null,8,Sa),i[12]||(i[12]=e(\"a\",{href:\"https://kanka.io/premium\",class:\"text-link\"},\"Learn more\",-1))])),e(\"div\",Ea,[r.premium?(t(),s(\"button\",{key:0,class:\"btn2 btn-primary btn-sm\",onClick:fe},[e(\"span\",{innerHTML:b(\"save\")},null,8,Va)])):u(\"\",!0),e(\"button\",{class:\"btn2 btn-ghost btn-sm\",onClick:G,innerHTML:b(\"cancel\")},null,8,Na)])])):(t(),s(\"div\",Xl,[e(\"div\",Yl,[e(\"div\",Kl,[i[3]||(i[3]=e(\"i\",{class:\"fa-regular fa-clipboard\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{class:\"font-extrabold\",innerHTML:b(\"details\")},null,8,Ol)]),e(\"div\",{class:\"cursor-pointer\",onClick:W},[...i[4]||(i[4]=[e(\"i\",{class:\"fa-solid fa-xmark\",\"aria-label\":\"Close\"},null,-1)])])]),e(\"div\",Wl,[e(\"label\",{class:\"font-extrabold\",innerHTML:b(\"name\")},null,8,Gl),r.canManage?B((t(),s(\"input\",{key:0,type:\"text\",class:\"\",maxlength:\"191\",\"onUpdate:modelValue\":i[0]||(i[0]=y=>T.value=y),onChange:O},null,544)),[[Ae,T.value]]):(t(),s(\"span\",{key:1,innerHTML:T.value},null,8,ql))]),r.canManage?(t(),s(\"div\",Jl,[e(\"label\",Ql,[i[5]||(i[5]=e(\"i\",{class:\"fa-regular fa-users\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:b(\"visibility\")},null,8,Zl)]),B(e(\"select\",{class:\"w-full\",\"onUpdate:modelValue\":i[1]||(i[1]=y=>p.value=y),onChange:c},[(t(!0),s(R,null,Y(r.visibilities,(y,H)=>(t(),s(\"option\",{value:H,innerHTML:y},null,8,ea))),256))],544),[[_e,p.value]])])):u(\"\",!0),o.file.is_folder?u(\"\",!0):(t(),s(\"div\",la,[e(\"div\",{class:\"flex gap-2 items-center cursor-pointer\",onClick:E},[e(\"div\",aa,[i[6]||(i[6]=e(\"i\",{class:\"fa-regular fa-cubes\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:b(\"used_in\")},null,8,ta)]),I.value?(t(),s(\"i\",sa)):(t(),s(\"i\",na))]),I.value?(t(),s(\"div\",ia,[(t(!0),s(R,null,Y(V.value,y=>(t(),s(\"a\",{href:y.url,class:\"rounded-xl bg-base-200 px-4 py-1 flex gap-1 items-center\"},[y.type===\"image\"?(t(),s(\"i\",ua)):(t(),s(\"i\",ra)),e(\"span\",{class:\"truncate\",innerHTML:y.name},null,8,da)],8,oa))),256)),L()?u(\"\",!0):(t(),s(\"span\",{key:0,class:\"text-neutral-content\",innerHTML:b(\"unused\")},null,8,ca))])):u(\"\",!0)])),o.file.is_folder?u(\"\",!0):(t(),s(\"div\",fa,[e(\"div\",{class:\"text-neutral-content\",innerHTML:b(\"size\")},null,8,va),e(\"div\",{class:\"text-right\",innerHTML:r.file.size},null,8,ga),e(\"div\",{class:\"text-neutral-content\",innerHTML:b(\"uploaded_by\")},null,8,pa),e(\"div\",{class:\"text-right\",innerHTML:r.file.creator},null,8,ha),e(\"div\",{class:\"text-neutral-content\",innerHTML:b(\"file_type\")},null,8,ma),e(\"div\",{class:\"text-right uppercase\",innerHTML:r.file.ext},null,8,_a),e(\"div\",{class:\"text-neutral-content\",innerHTML:b(\"link\")},null,8,xa),e(\"a\",{href:r.file.link,class:\"flex gap-1 items-center justify-end text-link\",target:\"_blank\"},[i[7]||(i[7]=e(\"i\",{class:\"fa-solid fa-external-link\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:b(\"open\")},null,8,ka)],8,ba)])),e(\"div\",ya,[$.value?(t(),s(\"i\",Ma)):r.canManage?(t(),s(\"span\",{key:1,role:\"button\",class:\"text-neutral-content hover:text-error-content hover:bg-error flex items-center gap-1 p-2 rounded\",onClick:j},[i[8]||(i[8]=e(\"i\",{class:\"fa-regular fa-trash-can\",\"aria-hidden\":\"true\"},null,-1)),C.value?(t(),s(\"span\",{key:1,innerHTML:b(\"confirm\")},null,8,wa)):(t(),s(\"span\",{key:0,innerHTML:b(\"delete\")},null,8,Ta))])):u(\"\",!0),!o.file.is_folder&&r.canManage?(t(),s(\"button\",{key:2,onClick:xe,class:\"rounded border p-2 flex gap-1 items-center\"},[i[9]||(i[9]=e(\"i\",{class:\"fa-regular fa-bullseye\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{class:\"truncate\",innerHTML:b(\"focus_point\")},null,8,La)])):u(\"\",!0),w.value?(t(),s(\"div\",Ha,[i[10]||(i[10]=e(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:b(\"saving\")},null,8,$a)])):u(\"\",!0)]),D.value?(t(),s(\"div\",Ca,[i[11]||(i[11]=e(\"i\",{class:\"fa-regular fa-check-double\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:b(\"saved\")},null,8,Fa)])):u(\"\",!0)]))]))}}),Aa={key:0,class:\"text-center text-4xl p-4\"},Ra={key:1,class:\"flex flex-col gap-4 md:gap-5\"},za={class:\"flex gap-4 items-end\"},Xa={class:\"flex flex-col gap-1 grow\"},Ya={class:\"flex gap-1 items-center\"},Ka=[\"innerHTML\"],Oa={class:\"flex gap-1 items-center\"},Wa=[\"innerHTML\"],Ga=[\"innerHTML\"],qa=[\"innerHTML\"],Ja={class:\"bg-base-300 rounded h-2 w-full overflow-hidden transition-all duration-300\"},Qa={key:0},Za=[\"href\",\"innerHTML\"],et={class:\"flex gap-4 flex-wrap sticky top-14 z-50\"},lt={class:\"flex gap-2 grow\"},at={class:\"flex gap-0.5\"},tt={class:\"relative\"},st=[\"innerHTML\"],nt={key:0},it={key:0,class:\"border shadow-sm rounded bg-base-100 p-4 absolute right-0 flex flex-col gap-5 w-60\"},ot={class:\"flex gap-2 items-center\"},ut=[\"innerHTML\"],rt={class:\"relative\"},dt=[\"innerHTML\"],ct={key:0},ft={key:0,class:\"border shadow-sm rounded bg-base-100 p-4 absolute right-0 top-full mt-2 flex flex-col gap-1 w-60 z-50\"},vt={class:\"flex flex-col gap-1 list-none m-0 p-0\"},gt={key:0,class:\"fa-regular fa-check\",\"aria-hidden\":\"true\"},pt=[\"innerHTML\"],ht={key:0,class:\"fa-regular fa-check\",\"aria-hidden\":\"true\"},mt=[\"innerHTML\"],_t={key:0,class:\"fa-regular fa-check\",\"aria-hidden\":\"true\"},xt=[\"innerHTML\"],bt={class:\"flex gap-2 self-end flex-wrap\"},kt=[\"innerHTML\"],yt=[\"innerHTML\"],Mt=[\"innerHTML\"],Tt=[\"innerHTML\"],wt=[\"innerHTML\"],Lt=[\"innerHTML\"],Ht=[\"innerHTML\"],$t=[\"innerHTML\"],Ct={key:0,class:\"text-center text-4xl p-4\"},Ft={key:1,class:\"flex flex-col gap-4\"},Pt={key:0,class:\"flex gap-1 flex-wrap text-xl\"},It=[\"innerHTML\"],St={class:\"flex gap-1 items-center\"},Ut=[\"onClick\",\"innerHTML\"],Bt={class:\"flex gap-2 flex-row\"},Dt={key:0,class:\"flex flex-col gap-4 p-2\"},Et={class:\"text-center text-xs\"},Vt=[\"innerHTML\"],Nt={class:\"progress h-1 w-full self-end\"},jt={key:0,class:\"fixed bottom-0 w-full left-0 right-0 shadow-md md:shadow-none md:relative md:basis-1/4\"},At={key:0,class:\"text-center text-4xl p-4\"},Rt={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},zt=[\"innerHTML\"],Xt={class:\"max-w-4xl flex flex-col gap-2 text-left p-4 md:px-6\"},Yt={class:\"flex flex-col gap-1 w-full\"},Kt=[\"innerHTML\"],Ot={class:\"flex flex-col gap-1 w-full\"},Wt=[\"innerHTML\"],Gt=[\"value\",\"innerHTML\"],qt={class:\"bp-4 md:px-6\"},Jt={class:\"\"},Qt=[\"innerHTML\"],Zt={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},es=[\"innerHTML\"],ls={class:\"max-w-4xl flex flex-col gap-2 text-left p-4 md:px-6\"},as={class:\"flex flex-col gap-1 w-full\"},ts=[\"innerHTML\"],ss=[\"value\",\"innerHTML\"],ns={class:\"flex flex-col gap-1 w-full\"},is=[\"innerHTML\"],os=[\"value\",\"innerHTML\"],us={class:\"bg-base-200 p-2\"},rs={class:\"\"},ds=[\"innerHTML\"],cs=Te({__name:\"Gallery\",props:{api:{}},setup(r){const le=r,o=n(!1),h=n(!1),V=n(),T=n(!1),w=n(!1),D=n(!1),p=n(!1),U=n(!1),$=n(!1),C=n(!1),I=n(!1),N=n(),k=n(),m=n(),F=n(),b=n(),K=n(null),O=n(),c=n([]),f=n([]),E=n([]),L=n(),j=n(),W=n(!0),xe=n(),G=n(!1),ce=n(),q=n(),J=n(),fe=n(),z=n(1),x=n(),i=n(),y=n(),H=n(),P=n(),ae=n(),ve=n(),be=n(!1),Le=n(),X=n(),Q=n(!1),te=n(null),ke=n(null),He=n(0),Z=n(!1),se=n(!1),ge=n(!1),ne=n(!1),ie=n(!1),pe=n(!0),oe=n(),ee=n(),$e=n(),ue=n(null);let he=null;je(()=>{axios.get(le.api).then(l=>{o.value=!0,f.value=l.data.files,E.value=l.data.files,xe.value=l.data.url,j.value=l.data.i18n,O.value=l.data.api.search,V.value=l.data.api.delete,ve.value=l.data.api.update,ce.value=l.data.api.create,Le.value=l.data.api.upload,k.value=l.data.next,x.value=l.data.visibilities,i.value=l.data.bulkVisibilities,D.value=l.data.acl.upload,U.value=l.data.acl.premium,$.value=l.data.acl.wyvern,C.value=l.data.acl.elemental,I.value=l.data.acl.manage,ae.value=l.data.folders,oe.value=l.data.space.total,ee.value=l.data.space.used,$e.value=l.data.upgrade,xl(()=>{he=new IntersectionObserver(a=>{a.forEach(v=>{v.isIntersecting&&qe()})}),ue.value&&he.observe(ue.value)})}),window.addEventListener(\"keydown\",Ce)}),bl(()=>{he&&ue.value&&he.unobserve(ue.value)}),kl(()=>{window.removeEventListener(\"keydown\",Ce)});const Ce=l=>{(l.key===\"Escape\"||l.key===\"Esc\")&&(Q.value&&tl(),m.value&&(m.value=null),p.value?p.value=null:Z.value&&(Z.value=!1))},g=l=>j.value[l]?j.value[l]:(console.error(\"Missing trans\",l,j),\"MISSING\"),Re=()=>{p.value=!0},ze=()=>{p.value=!1},Xe=()=>{Pe(y.value),H.value=null,P.value=null},Ye=()=>{let l=\"grid grid-cols-2 sm:grid-cols-3 md:flex gap-2 sm:gap-3 md:gap-4 md:flex-wrap\";return m.value&&(l+=\" basis-2/4 md:basis-3/4\"),l},Ke=()=>{let l=f.value.filter(a=>a.is_selected).map(a=>a.id);l.length!==0&&(T.value=!0,axios.post(V.value,{images:l}).then(a=>{f.value=f.value.filter(v=>!v.is_selected),W.value&&(E.value=f.value),ee.value=a.data.used,p.value=!1,window.showToast(a.data.toast)}))},Oe=l=>{if(p.value){let a=f.value.find(v=>v.id===l.id);a.is_selected=!a.is_selected;return}if(l.is_folder){Fe(l);return}m.value&&m.value.id===l.id?m.value=null:m.value=l},Fe=l=>{h.value=!0,axios.get(l.open).then(a=>{L.value=l,N.value=a.data.breadcrumbs,f.value=a.data.files,k.value=a.data.next,h.value=!1,W.value=!1})},me=()=>{h.value=!0,f.value=E.value,m.value=null,L.value=null,h.value=!1,W.value=!0,p.value=!1},We=l=>{F.value=l.target.value,K.value&&clearTimeout(K.value),K.value=setTimeout(()=>{Ge()},300)},Ge=()=>{if(b.value!=F.value){if(b.value=F.value,!F.value){c.value.searchParam=\"\",me();return}h.value=!0,c.value.searchParam=\"term=\"+F.value;var l=\"\";c.value.searchParam&&(l+=c.value.searchParam+\"&\"),c.value.sortParam&&(l+=c.value.sortParam+\"&\"),c.value.toggleParam&&(l+=c.value.toggleParam+\"&\"),axios.get(O.value+\"/?\"+l).then(a=>{De(a.data)})}},qe=()=>{if(!(k.value==null||w.value==!0)){w.value=!0;var l=\"\";c.value.searchParam&&(l+=c.value.searchParam+\"&\"),c.value.sortParam&&(l+=c.value.sortParam+\"&\"),c.value.toggleParam&&(l+=c.value.toggleParam+\"&\"),axios.get(k.value+\"&\"+l).then(a=>{a.data.files.forEach(v=>{f.value.push(v)}),k.value=a.data.next,w.value=!1})}},Je=()=>{Pe(q.value),fe.value.focus()},Pe=l=>{l.showModal(),l.addEventListener(\"click\",Ie)},Ie=l=>{let a=l.target.getBoundingClientRect();!(a.top<=l.clientY&&l.clientY<=a.top+a.height&&a.left<=l.clientX&&l.clientX<=a.left+a.width)&&l.target.tagName===\"DIALOG\"&&re(l.target)},re=l=>{G.value||(l.removeEventListener(\"click\",Ie),l.close())},Se=()=>{if(G.value)return;let l={};G.value=!0,l.name=J.value,l.visibility_id=z.value,L.value&&(l.folder_id=L.value.id),axios.post(ce.value,l).then(a=>{J.value=null,z.value=1,G.value=!1,f.value.unshift(a.data.folder),ae.value[a.data.folder.id]=a.data.folder.name,re(q.value)})},Qe=()=>{if(be.value)return;let l=f.value.filter(v=>v.is_selected).map(v=>v.id);if(l.length===0)return;be.value=!0;let a={};P.value&&(P.value===\"0\"?a.folder_home=1:a.folder_id=P.value),H.value&&(a.visibility_id=H.value),a.files=l,axios.post(ve.value,a).then(v=>{be.value=!1,a.folder_home&&(console.log(\"move home\"),f.value.filter(M=>M.is_selected).forEach(M=>{E.value.unshift(M)})),P.value&&(f.value=f.value.filter(_=>!_.is_selected),W.value&&(E.value=E.value.filter(_=>!_.is_selected))),H.value&&f.value.forEach(_=>{l.includes(_.id)&&(_.visibility_id=H.value)}),P.value=null,H.value=null,p.value=!1,E.value.filter(_=>_.is_selected).forEach(_=>{_.is_selected=!1}),window.showToast(v.data.toast),re(y.value)})},Ze=()=>{X.value.click()},el=async l=>{const a=l.target.files[0],v=l.target.files;if(!v){Q.value=!1;return}const d=new FileReader;d.onload=M=>{te.value=M.target.result},d.readAsDataURL(a),Q.value=!0,ke.value=axios.CancelToken.source(),X.value.disabled=!0;const _=new FormData;L.value&&_.append(\"folder_id\",L.value.id),Array.from(v).forEach(M=>{_.append(\"files[]\",M)}),axios.post(Le.value,_,{headers:{\"Content-Type\":\"multipart/form-data\"},cancelToken:ke.value.token,onUploadProgress:function(M){He.value=Math.round(M.loaded*100/M.total)}}).then(M=>{Q.value=!1,X.value.disabled=!1,X.value=null,te.value=null;const hl=A=>A.is_folder,Ve=f.value.map((A,ml)=>hl(A)?ml:-1).filter(A=>A!==-1).pop();M.data.files.forEach(A=>{Ve!==void 0?f.value.splice(Ve+1,0,A):f.value.push(A)}),ee.value=M.data.used}).catch(M=>{console.error(M),Q.value=!1,X.value.disabled=!1,te.value=null,axios.isCancel(M)?X.value=null:ll(M)})},ll=l=>{if(!l.response)return;if(l.response.data.error){window.showToast(l.response.data.error,\"error\");return}if(l.response&&l.response.status===403&&l.response.data.message){window.showToast(g.value.unauthorized,\"error\");return}Object.keys(l.response.data.errors).forEach(v=>{window.showToast(l.response.data.errors[v][0],\"error\")})},Ue=()=>{let l=f.value.filter(a=>a.is_selected).length;if(l!==0)return\"(\"+l+\")\"},al=()=>He.value+\"%\",tl=()=>{ke.value.cancel(\"Upload canceled by user.\")},sl=l=>{},nl=(l,a)=>{f.value=f.value.filter(v=>v.id!==l.id),m.value=null,l.is_folder&&(l.folder_id||me()),ee.value=a},il=()=>{m.value=null},ol=()=>{if(m.value===L.value){m.value=null;return}m.value=L.value},ul=()=>{Z.value=!Z.value},rl=()=>{ge.value=!ge.value},Be=()=>{Z.value=!1,ge.value=!1},dl=()=>{if(!se.value){c.value.toggleParam=\"\",me();return}console.log(\"filter\"),h.value=!0,c.value.toggleParam=\"unused=1\";var l=\"\";c.value.searchParam&&(l+=c.value.searchParam+\"&\"),c.value.sortParam&&(l+=c.value.sortParam+\"&\"),c.value.toggleParam&&(l+=c.value.toggleParam+\"&\"),axios.get(O.value+\"/?\"+l).then(a=>{De(a.data)})},ye=(l=\"default\")=>{l==\"asc\"?(ie.value=!1,pe.value=!1,ne.value=!0):l==\"desc\"?(ne.value=!1,pe.value=!1,ie.value=!0):l==\"default\"&&(ne.value=!1,ie.value=!1,pe.value=!0),h.value=!0,c.value.sortParam=\"sort=\"+l;var a=\"\";c.value.searchParam&&(a+=c.value.searchParam+\"&\"),c.value.sortParam&&(a+=c.value.sortParam+\"&\"),c.value.toggleParam&&(a+=c.value.toggleParam+\"&\");let v=O.value;L.value?.open&&(v=L.value.open),axios.get(v+\"/?\"+a).then(d=>{cl(d.data)})},cl=l=>{f.value=l.files,k.value=l.next,h.value=!1},De=l=>{f.value=l.files,k.value=l.next,L.value=null,h.value=!1},fl=()=>Ee(ee.value),vl=()=>oe.value===0?\"∞\":Ee(oe.value),Ee=l=>l==0?\"0\":l>1e6?(l/(1024*1024)).toFixed(2)+\" GiB\":l>1e3?(l/1024).toFixed(2)+\" MiB\":(l*1).toFixed(2)+\" KiB\",gl=()=>{let l=\"rounded h-2 transition-all duration-300\",a=Me();return a<60?l+\" bg-primary\":a<90?l+\" bg-orange-400\":l+\" bg-red-500\"},Me=()=>oe.value===0?0:Math.round(ee.value/oe.value*100),pl=()=>te.value!==null;return(l,a)=>{const v=yl(\"click-outside\");return t(),s(R,null,[o.value?(t(),s(\"div\",Ra,[e(\"div\",za,[e(\"div\",Xa,[e(\"div\",Ya,[a[11]||(a[11]=e(\"i\",{class:\"fa-regular fa-cloud text-xl\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{class:\"font-extrabold\",innerHTML:g(\"storage\")},null,8,Ka)]),e(\"div\",Oa,[e(\"span\",{innerHTML:fl()},null,8,Wa),e(\"span\",{innerHTML:g(\"of\")},null,8,Ga),e(\"span\",{innerHTML:vl()},null,8,qa)]),e(\"div\",Ja,[e(\"div\",{class:de(gl()),style:S({width:Me()+\"%\"})},null,6)])]),!U.value||Me()>89&&($.value||C.value)?(t(),s(\"div\",Qa,[e(\"a\",{href:$e.value,innerHTML:g(\"upgrade\"),class:\"btn2 btn-default\"},null,8,Za)])):u(\"\",!0)]),e(\"div\",et,[e(\"div\",lt,[e(\"div\",at,[e(\"input\",{type:\"text\",placeholder:\"Search\",onInput:We},null,32)]),e(\"div\",tt,[e(\"button\",{class:\"btn2 btn-default btn-sm\",onClick:ul},[a[12]||(a[12]=e(\"i\",{class:\"fa-regular fa-filter\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"filters\"),class:\"hidden md:inline\"},null,8,st),se.value?(t(),s(\"span\",nt,\"(1)\")):u(\"\",!0)]),Z.value?B((t(),s(\"div\",it,[e(\"div\",ot,[B(e(\"input\",{type:\"checkbox\",\"onUpdate:modelValue\":a[0]||(a[0]=d=>se.value=d),value:\"1\",id:\"_show_unused\",onChange:dl},null,544),[[Ne,se.value]]),e(\"label\",{for:\"_show_unused\",class:\"cursor-pointer\",innerHTML:g(\"filter_only_unused\")},null,8,ut)])])),[[v,Be]]):u(\"\",!0)]),e(\"div\",rt,[e(\"button\",{class:\"btn2 btn-default btn-sm\",onClick:rl},[a[13]||(a[13]=e(\"i\",{class:\"fa-regular fa-arrow-up-arrow-down\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"sort\"),class:\"hidden md:inline\"},null,8,dt),ne.value||ie.value?(t(),s(\"span\",ct,\"(1)\")):u(\"\",!0)]),ge.value?B((t(),s(\"div\",ft,[e(\"ul\",vt,[e(\"li\",null,[e(\"span\",{class:\"cursor-pointer flex items-center gap-2 px-2 py-2 rounded hover:bg-gray-100 transition\",onClick:a[1]||(a[1]=d=>ye(\"default\"))},[pe.value?(t(),s(\"i\",gt)):u(\"\",!0),e(\"span\",{innerHTML:g(\"sort_default\"),class:\"inline\"},null,8,pt)])]),e(\"li\",null,[e(\"span\",{class:\"cursor-pointer flex items-center gap-2 px-2 py-2 rounded hover:bg-gray-100 transition\",onClick:a[2]||(a[2]=d=>ye(\"asc\"))},[ne.value?(t(),s(\"i\",ht)):u(\"\",!0),e(\"span\",{innerHTML:g(\"sort_asc\"),class:\"inline\"},null,8,mt)])]),e(\"li\",null,[e(\"span\",{class:\"cursor-pointer flex items-center gap-2 px-2 py-2 rounded hover:bg-gray-100 transition\",onClick:a[3]||(a[3]=d=>ye(\"desc\"))},[ie.value?(t(),s(\"i\",_t)):u(\"\",!0),e(\"span\",{innerHTML:g(\"sort_desc\"),class:\"inline\"},null,8,xt)])])])])),[[v,Be]]):u(\"\",!0)])]),e(\"div\",bt,[!p.value&&L.value?(t(),s(\"button\",{key:0,class:\"btn2 btn-default btn-sm\",onClick:ol},[a[14]||(a[14]=e(\"i\",{class:\"fa-regular fa-clipboard\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"details\")},null,8,kt)])):u(\"\",!0),!p.value&&I.value?(t(),s(\"button\",{key:1,class:\"btn2 btn-default btn-sm\",onClick:Je},[a[15]||(a[15]=e(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"new_folder\")},null,8,yt)])):u(\"\",!0),!p.value&&I.value?(t(),s(\"button\",{key:2,class:\"btn2 btn-default btn-sm\",onClick:Re},[a[16]||(a[16]=e(\"i\",{class:\"fa-regular fa-list-check\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"select\")},null,8,Mt)])):u(\"\",!0),p.value?(t(),s(\"button\",{key:3,class:\"btn2 btn-primary btn-sm\",onClick:Xe},[a[17]||(a[17]=e(\"i\",{class:\"fa-regular fa-pencil\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"update\")},null,8,Tt),e(\"span\",{innerHTML:Ue()},null,8,wt)])):u(\"\",!0),p.value?(t(),s(\"button\",{key:4,class:\"btn2 btn-error btn-sm\",onClick:Ke},[a[18]||(a[18]=e(\"i\",{class:\"fa-regular fa-trash-can\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"remove\")},null,8,Lt),e(\"span\",{innerHTML:Ue()},null,8,Ht)])):u(\"\",!0),p.value?(t(),s(\"button\",{key:5,class:\"btn2 btn-default btn-sm\",onClick:ze},[a[19]||(a[19]=e(\"i\",{class:\"fa-solid fa-xmark\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"cancel\")},null,8,$t)])):u(\"\",!0)])]),h.value?(t(),s(\"div\",Ct,[...a[20]||(a[20]=[e(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):(t(),s(\"div\",Ft,[L.value?(t(),s(\"div\",Pt,[e(\"a\",{onClick:me,innerHTML:g(\"home\"),class:\"text-base-content cursor-pointer\"},null,8,It),(t(!0),s(R,null,Y(N.value,(d,_)=>(t(),s(\"span\",St,[a[21]||(a[21]=e(\"i\",{class:\"fa-solid fa-chevron-right text-base\",\"aria-hidden\":\"true\"},null,-1)),e(\"a\",{onClick:M=>Fe(d),innerHTML:d.name,class:\"text-base-content cursor-pointer\"},null,8,Ut)]))),256))])):u(\"\",!0),e(\"div\",Bt,[e(\"div\",{class:de(Ye())},[D.value&&!se.value?(t(),s(\"div\",{key:0,class:\"rounded-xl shadow bg-base-100 overflow-hidden col-span-2 sm:col-span-3 md:w-48 cursor-pointer flex justify-center items-center flex-col gap-4\",onClick:Ze},[Q.value?pl()?(t(),s(\"div\",{key:1,class:\"cover-background w-full h-full flex p-2\",style:S({backgroundImage:\"url('\"+te.value+\"')\"})},[e(\"div\",Nt,[e(\"div\",{class:\"h-1 bg-accent shadow-xs\",role:\"progressbar\",\"aria-valuenow\":\"0\",\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\",style:S({width:al()})},[...a[24]||(a[24]=[e(\"span\",{class:\"sr-only\"},null,-1)])],4)])],4)):u(\"\",!0):(t(),s(\"div\",Dt,[a[23]||(a[23]=e(\"div\",{class:\"flex flex-col gap-2 items-center\"},[e(\"i\",{class:\"fa-regular fa-image text-4xl text-neutral-content\",\"aria-hidden\":\"true\"}),e(\"span\",null,\"Upload files\")],-1)),e(\"div\",Et,[a[22]||(a[22]=e(\"i\",{class:\"fa-regular fa-info-circle mr-1 text-base\",\"aria-hidden\":\"true\"},null,-1)),e(\"span\",{innerHTML:g(\"upload_hint\"),class:\"text-neutral-content\"},null,8,Vt)])])),e(\"input\",{type:\"file\",multiple:\"\",accept:\"image/*, font/woff2\",class:\"hidden\",onChange:el,ref_key:\"fileField\",ref:X},null,544)])):u(\"\",!0),(t(!0),s(R,null,Y(f.value,d=>(t(),Ml(Al,{file:d,isBulking:p.value,i18n:j.value,onSelect:_=>Oe(d)},null,8,[\"file\",\"isBulking\",\"i18n\",\"onSelect\"]))),256))],2),m.value?(t(),s(\"div\",jt,[Tl(ja,{file:m.value,visibilities:x.value,premium:U.value,canManage:I.value,i18n:j.value,onUpdated:sl,onDeleted:nl,onClosed:il},null,8,[\"file\",\"visibilities\",\"premium\",\"canManage\",\"i18n\"])])):u(\"\",!0)])]))])):(t(),s(\"div\",Aa,[...a[10]||(a[10]=[e(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])),e(\"div\",{ref_key:\"infiniteScrollTrigger\",ref:ue,class:\"h-4\"},[w.value?(t(),s(\"div\",At,[...a[25]||(a[25]=[e(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):u(\"\",!0)],512),o.value?(t(),s(\"dialog\",{key:2,ref_key:\"newDialog\",ref:q,class:\"dialog rounded-2xl text-center bg-base-100 text-base-content\"},[e(\"header\",Rt,[e(\"h4\",{innerHTML:g(\"new_folder\"),class:\"text-lg font-normal\"},null,8,zt),e(\"button\",{type:\"button\",class:\"text-base-content\",onClick:a[4]||(a[4]=d=>re(q.value)),title:\"Close\"},[...a[26]||(a[26]=[e(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),e(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),e(\"article\",Xt,[e(\"div\",Yt,[e(\"label\",{innerHTML:g(\"name\")},null,8,Kt),B(e(\"input\",{type:\"text\",class:\"w-full\",\"onUpdate:modelValue\":a[5]||(a[5]=d=>J.value=d),ref_key:\"folderNameField\",ref:fe,onKeyup:wl(Se,[\"enter\"])},null,544),[[Ae,J.value]])]),e(\"div\",Ot,[e(\"label\",{innerHTML:g(\"visibility\")},null,8,Wt),B(e(\"select\",{class:\"w-full\",\"onUpdate:modelValue\":a[6]||(a[6]=d=>z.value=d)},[(t(!0),s(R,null,Y(x.value,(d,_)=>(t(),s(\"option\",{value:_,innerHTML:d},null,8,Gt))),256))],512),[[_e,z.value]])])]),e(\"footer\",qt,[e(\"menu\",Jt,[e(\"button\",{type:\"submit\",class:\"btn2 btn-primary\",onClick:Se,innerHTML:g(\"create\")},null,8,Qt)])])],512)):u(\"\",!0),o.value?(t(),s(\"dialog\",{key:3,ref_key:\"updateDialog\",ref:y,class:\"dialog rounded-2xl text-center bg-base-100 text-base-content\"},[e(\"header\",Zt,[e(\"h4\",{innerHTML:g(\"update\"),class:\"text-lg font-normal\"},null,8,es),e(\"button\",{type:\"button\",class:\"text-base-content\",onClick:a[7]||(a[7]=d=>re(y.value)),title:\"Close\"},[...a[27]||(a[27]=[e(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),e(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),e(\"article\",ls,[e(\"div\",as,[e(\"label\",{innerHTML:g(\"visibility\")},null,8,ts),B(e(\"select\",{class:\"w-full\",\"onUpdate:modelValue\":a[8]||(a[8]=d=>H.value=d)},[(t(!0),s(R,null,Y(i.value,(d,_)=>(t(),s(\"option\",{value:_,innerHTML:d},null,8,ss))),256))],512),[[_e,H.value]])]),e(\"div\",ns,[e(\"label\",{innerHTML:g(\"folder\")},null,8,is),B(e(\"select\",{class:\"w-full\",\"onUpdate:modelValue\":a[9]||(a[9]=d=>P.value=d)},[(t(!0),s(R,null,Y(ae.value,(d,_)=>(t(),s(\"option\",{value:_,innerHTML:d},null,8,os))),256))],512),[[_e,P.value]])])]),e(\"footer\",us,[e(\"menu\",rs,[e(\"button\",{type:\"submit\",class:\"btn2 btn-primary\",onClick:Qe,innerHTML:g(\"change\")},null,8,ds)])])],512)):u(\"\",!0)],64)}}}),we=Ll({});we.component(\"gallery\",cs);we.use(Hl);we.mount(\"#gallery\");\n"
  },
  {
    "path": "public/build/assets/history-Bum1jYKg.js",
    "content": "const o=()=>{const t=document.querySelector(\"form.history-filters\"),e=document.querySelectorAll(\".history-filters select\");e.forEach(r=>{r.addEventListener(\"change\",function(){document.querySelector(\".filters-loading\").classList.remove(\"hidden\"),t.requestSubmit(),e.disabled=!0})})};o();\n"
  },
  {
    "path": "public/build/assets/html2canvas.esm-DXEQVQnt.js",
    "content": "var mr=function(e,A){return mr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var B in r)Object.prototype.hasOwnProperty.call(r,B)&&(t[B]=r[B])},mr(e,A)};function tA(e,A){if(typeof A!=\"function\"&&A!==null)throw new TypeError(\"Class extends value \"+String(A)+\" is not a constructor or null\");mr(e,A);function t(){this.constructor=e}e.prototype=A===null?Object.create(A):(t.prototype=A.prototype,new t)}var Lr=function(){return Lr=Object.assign||function(A){for(var t,r=1,B=arguments.length;r<B;r++){t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(A[n]=t[n])}return A},Lr.apply(this,arguments)};function P(e,A,t,r){function B(n){return n instanceof t?n:new t(function(s){s(n)})}return new(t||(t=Promise))(function(n,s){function i(Q){try{o(r.next(Q))}catch(g){s(g)}}function a(Q){try{o(r.throw(Q))}catch(g){s(g)}}function o(Q){Q.done?n(Q.value):B(Q.value).then(i,a)}o((r=r.apply(e,[])).next())})}function _(e,A){var t={label:0,sent:function(){if(n[0]&1)throw n[1];return n[1]},trys:[],ops:[]},r,B,n,s;return s={next:i(0),throw:i(1),return:i(2)},typeof Symbol==\"function\"&&(s[Symbol.iterator]=function(){return this}),s;function i(o){return function(Q){return a([o,Q])}}function a(o){if(r)throw new TypeError(\"Generator is already executing.\");for(;t;)try{if(r=1,B&&(n=o[0]&2?B.return:o[0]?B.throw||((n=B.return)&&n.call(B),0):B.next)&&!(n=n.call(B,o[1])).done)return n;switch(B=0,n&&(o=[o[0]&2,n.value]),o[0]){case 0:case 1:n=o;break;case 4:return t.label++,{value:o[1],done:!1};case 5:t.label++,B=o[1],o=[0];continue;case 7:o=t.ops.pop(),t.trys.pop();continue;default:if(n=t.trys,!(n=n.length>0&&n[n.length-1])&&(o[0]===6||o[0]===2)){t=0;continue}if(o[0]===3&&(!n||o[1]>n[0]&&o[1]<n[3])){t.label=o[1];break}if(o[0]===6&&t.label<n[1]){t.label=n[1],n=o;break}if(n&&t.label<n[2]){t.label=n[2],t.ops.push(o);break}n[2]&&t.ops.pop(),t.trys.pop();continue}o=A.call(e,t)}catch(Q){o=[6,Q],B=0}finally{r=n=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}}function ue(e,A,t){if(arguments.length===2)for(var r=0,B=A.length,n;r<B;r++)(n||!(r in A))&&(n||(n=Array.prototype.slice.call(A,0,r)),n[r]=A[r]);return e.concat(n||A)}var cA=(function(){function e(A,t,r,B){this.left=A,this.top=t,this.width=r,this.height=B}return e.prototype.add=function(A,t,r,B){return new e(this.left+A,this.top+t,this.width+r,this.height+B)},e.fromClientRect=function(A,t){return new e(t.left+A.windowBounds.left,t.top+A.windowBounds.top,t.width,t.height)},e.fromDOMRectList=function(A,t){var r=Array.from(t).find(function(B){return B.width!==0});return r?new e(r.left+A.windowBounds.left,r.top+A.windowBounds.top,r.width,r.height):e.EMPTY},e.EMPTY=new e(0,0,0,0),e})(),ze=function(e,A){return cA.fromClientRect(e,A.getBoundingClientRect())},an=function(e){var A=e.body,t=e.documentElement;if(!A||!t)throw new Error(\"Unable to get document size\");var r=Math.max(Math.max(A.scrollWidth,t.scrollWidth),Math.max(A.offsetWidth,t.offsetWidth),Math.max(A.clientWidth,t.clientWidth)),B=Math.max(Math.max(A.scrollHeight,t.scrollHeight),Math.max(A.offsetHeight,t.offsetHeight),Math.max(A.clientHeight,t.clientHeight));return new cA(0,0,r,B)},$e=function(e){for(var A=[],t=0,r=e.length;t<r;){var B=e.charCodeAt(t++);if(B>=55296&&B<=56319&&t<r){var n=e.charCodeAt(t++);(n&64512)===56320?A.push(((B&1023)<<10)+(n&1023)+65536):(A.push(B),t--)}else A.push(B)}return A},S=function(){for(var e=[],A=0;A<arguments.length;A++)e[A]=arguments[A];if(String.fromCodePoint)return String.fromCodePoint.apply(String,e);var t=e.length;if(!t)return\"\";for(var r=[],B=-1,n=\"\";++B<t;){var s=e[B];s<=65535?r.push(s):(s-=65536,r.push((s>>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},nt=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",on=typeof Uint8Array>\"u\"?[]:new Uint8Array(256);for(var le=0;le<nt.length;le++)on[nt.charCodeAt(le)]=le;var st=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",zA=typeof Uint8Array>\"u\"?[]:new Uint8Array(256);for(var fe=0;fe<st.length;fe++)zA[st.charCodeAt(fe)]=fe;var Qn=function(e){var A=e.length*.75,t=e.length,r,B=0,n,s,i,a;e[e.length-1]===\"=\"&&(A--,e[e.length-2]===\"=\"&&A--);var o=typeof ArrayBuffer<\"u\"&&typeof Uint8Array<\"u\"&&typeof Uint8Array.prototype.slice<\"u\"?new ArrayBuffer(A):new Array(A),Q=Array.isArray(o)?o:new Uint8Array(o);for(r=0;r<t;r+=4)n=zA[e.charCodeAt(r)],s=zA[e.charCodeAt(r+1)],i=zA[e.charCodeAt(r+2)],a=zA[e.charCodeAt(r+3)],Q[B++]=n<<2|s>>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},gn=function(e){for(var A=e.length,t=[],r=0;r<A;r+=2)t.push(e[r+1]<<8|e[r]);return t},wn=function(e){for(var A=e.length,t=[],r=0;r<A;r+=4)t.push(e[r+3]<<24|e[r+2]<<16|e[r+1]<<8|e[r]);return t},bA=5,zr=11,ir=2,cn=zr-bA,BB=65536>>bA,Cn=1<<bA,or=Cn-1,un=1024>>bA,ln=BB+un,fn=ln,Un=32,Fn=fn+Un,hn=65536>>zr,dn=1<<cn,En=dn-1,at=function(e,A,t){return e.slice?e.slice(A,t):new Uint16Array(Array.prototype.slice.call(e,A,t))},Hn=function(e,A,t){return e.slice?e.slice(A,t):new Uint32Array(Array.prototype.slice.call(e,A,t))},pn=function(e,A){var t=Qn(e),r=Array.isArray(t)?wn(t):new Uint32Array(t),B=Array.isArray(t)?gn(t):new Uint16Array(t),n=24,s=at(B,n/2,r[4]/2),i=r[5]===2?at(B,(n+r[4])/2):Hn(r,Math.ceil((n+r[4])/4));return new In(r[0],r[1],r[2],r[3],s,i)},In=(function(){function e(A,t,r,B,n,s){this.initialValue=A,this.errorValue=t,this.highStart=r,this.highValueIndex=B,this.index=n,this.data=s}return e.prototype.get=function(A){var t;if(A>=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>bA],t=(t<<ir)+(A&or),this.data[t];if(A<=65535)return t=this.index[BB+(A-55296>>bA)],t=(t<<ir)+(A&or),this.data[t];if(A<this.highStart)return t=Fn-hn+(A>>zr),t=this.index[t],t+=A>>bA&En,t=this.index[t],t=(t<<ir)+(A&or),this.data[t];if(A<=1114111)return this.data[this.highValueIndex]}return this.errorValue},e})(),it=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",vn=typeof Uint8Array>\"u\"?[]:new Uint8Array(256);for(var Ue=0;Ue<it.length;Ue++)vn[it.charCodeAt(Ue)]=Ue;var yn=\"KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==\",ot=50,Kn=1,nB=2,sB=3,mn=4,Ln=5,Qt=7,aB=8,gt=9,FA=10,Dr=11,wt=12,br=13,Dn=14,$A=15,xr=16,Fe=17,WA=18,bn=19,ct=20,Tr=21,ZA=22,Qr=23,SA=24,j=25,Ae=26,ee=27,OA=28,xn=29,LA=30,Tn=31,he=32,de=33,Sr=34,Or=35,Mr=36,Qe=37,Gr=38,Ge=39,Re=40,gr=41,iB=42,Sn=43,On=[9001,65288],oB=\"!\",I=\"×\",Ee=\"÷\",Rr=pn(yn),QA=[LA,Mr],Vr=[Kn,nB,sB,Ln],QB=[FA,aB],Ct=[ee,Ae],Mn=Vr.concat(QB),ut=[Gr,Ge,Re,Sr,Or],Gn=[$A,br],Rn=function(e,A){A===void 0&&(A=\"strict\");var t=[],r=[],B=[];return e.forEach(function(n,s){var i=Rr.get(n);if(i>ot?(B.push(!0),i-=ot):B.push(!1),[\"normal\",\"auto\",\"loose\"].indexOf(A)!==-1&&[8208,8211,12316,12448].indexOf(n)!==-1)return r.push(s),t.push(xr);if(i===mn||i===Dr){if(s===0)return r.push(s),t.push(LA);var a=t[s-1];return Mn.indexOf(a)===-1?(r.push(r[s-1]),t.push(a)):(r.push(s),t.push(LA))}if(r.push(s),i===Tn)return t.push(A===\"strict\"?Tr:Qe);if(i===iB||i===xn)return t.push(LA);if(i===Sn)return n>=131072&&n<=196605||n>=196608&&n<=262141?t.push(Qe):t.push(LA);t.push(i)}),[r,t,B]},wr=function(e,A,t,r){var B=r[t];if(Array.isArray(e)?e.indexOf(B)!==-1:e===B)for(var n=t;n<=r.length;){n++;var s=r[n];if(s===A)return!0;if(s!==FA)break}if(B===FA)for(var n=t;n>0;){n--;var i=r[n];if(Array.isArray(e)?e.indexOf(i)!==-1:e===i)for(var a=t;a<=r.length;){a++;var s=r[a];if(s===A)return!0;if(s!==FA)break}if(i!==FA)break}return!1},lt=function(e,A){for(var t=e;t>=0;){var r=A[t];if(r===FA)t--;else return r}return 0},Vn=function(e,A,t,r,B){if(t[r]===0)return I;var n=r-1;if(Array.isArray(B)&&B[n]===!0)return I;var s=n-1,i=n+1,a=A[n],o=s>=0?A[s]:0,Q=A[i];if(a===nB&&Q===sB)return I;if(Vr.indexOf(a)!==-1)return oB;if(Vr.indexOf(Q)!==-1||QB.indexOf(Q)!==-1)return I;if(lt(n,A)===aB)return Ee;if(Rr.get(e[n])===Dr||(a===he||a===de)&&Rr.get(e[i])===Dr||a===Qt||Q===Qt||a===gt||[FA,br,$A].indexOf(a)===-1&&Q===gt||[Fe,WA,bn,SA,OA].indexOf(Q)!==-1||lt(n,A)===ZA||wr(Qr,ZA,n,A)||wr([Fe,WA],Tr,n,A)||wr(wt,wt,n,A))return I;if(a===FA)return Ee;if(a===Qr||Q===Qr)return I;if(Q===xr||a===xr)return Ee;if([br,$A,Tr].indexOf(Q)!==-1||a===Dn||o===Mr&&Gn.indexOf(a)!==-1||a===OA&&Q===Mr||Q===ct||QA.indexOf(Q)!==-1&&a===j||QA.indexOf(a)!==-1&&Q===j||a===ee&&[Qe,he,de].indexOf(Q)!==-1||[Qe,he,de].indexOf(a)!==-1&&Q===Ae||QA.indexOf(a)!==-1&&Ct.indexOf(Q)!==-1||Ct.indexOf(a)!==-1&&QA.indexOf(Q)!==-1||[ee,Ae].indexOf(a)!==-1&&(Q===j||[ZA,$A].indexOf(Q)!==-1&&A[i+1]===j)||[ZA,$A].indexOf(a)!==-1&&Q===j||a===j&&[j,OA,SA].indexOf(Q)!==-1)return I;if([j,OA,SA,Fe,WA].indexOf(Q)!==-1)for(var g=n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if([ee,Ae].indexOf(Q)!==-1)for(var g=[Fe,WA].indexOf(a)!==-1?s:n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if(Gr===a&&[Gr,Ge,Sr,Or].indexOf(Q)!==-1||[Ge,Sr].indexOf(a)!==-1&&[Ge,Re].indexOf(Q)!==-1||[Re,Or].indexOf(a)!==-1&&Q===Re||ut.indexOf(a)!==-1&&[ct,Ae].indexOf(Q)!==-1||ut.indexOf(Q)!==-1&&a===ee||QA.indexOf(a)!==-1&&QA.indexOf(Q)!==-1||a===SA&&QA.indexOf(Q)!==-1||QA.concat(j).indexOf(a)!==-1&&Q===ZA&&On.indexOf(e[i])===-1||QA.concat(j).indexOf(Q)!==-1&&a===WA)return I;if(a===gr&&Q===gr){for(var f=t[n],c=1;f>0&&(f--,A[f]===gr);)c++;if(c%2!==0)return I}return a===he&&Q===de?I:Ee},Nn=function(e,A){A||(A={lineBreak:\"normal\",wordBreak:\"normal\"});var t=Rn(e,A.lineBreak),r=t[0],B=t[1],n=t[2];(A.wordBreak===\"break-all\"||A.wordBreak===\"break-word\")&&(B=B.map(function(i){return[j,LA,iB].indexOf(i)!==-1?Qe:i}));var s=A.wordBreak===\"keep-all\"?n.map(function(i,a){return i&&e[a]>=19968&&e[a]<=40959}):void 0;return[r,B,s]},Xn=(function(){function e(A,t,r,B){this.codePoints=A,this.required=t===oB,this.start=r,this.end=B}return e.prototype.slice=function(){return S.apply(void 0,this.codePoints.slice(this.start,this.end))},e})(),_n=function(e,A){var t=$e(e),r=Nn(t,A),B=r[0],n=r[1],s=r[2],i=t.length,a=0,o=0;return{next:function(){if(o>=i)return{done:!0,value:null};for(var Q=I;o<i&&(Q=Vn(t,n,B,++o,s))===I;);if(Q!==I||o===i){var g=new Xn(t,Q,a,o);return a=o,{value:g,done:!1}}return{done:!0,value:null}}}},Jn=1,Pn=2,ce=4,ft=8,Xe=10,Ut=47,ne=92,kn=9,Yn=32,He=34,qA=61,Wn=35,Zn=36,qn=37,pe=39,Ie=40,jA=41,jn=95,Z=45,zn=33,$n=60,As=62,es=64,rs=91,ts=93,Bs=61,ns=123,ve=63,ss=125,Ft=124,as=126,is=128,ht=65533,cr=42,DA=43,os=44,Qs=58,gs=59,ge=46,ws=0,cs=8,Cs=11,us=14,ls=31,fs=127,nA=-1,gB=48,wB=97,cB=101,Us=102,Fs=117,hs=122,CB=65,uB=69,lB=70,ds=85,Es=90,J=function(e){return e>=gB&&e<=57},Hs=function(e){return e>=55296&&e<=57343},MA=function(e){return J(e)||e>=CB&&e<=lB||e>=wB&&e<=Us},ps=function(e){return e>=wB&&e<=hs},Is=function(e){return e>=CB&&e<=Es},vs=function(e){return ps(e)||Is(e)},ys=function(e){return e>=is},ye=function(e){return e===Xe||e===kn||e===Yn},_e=function(e){return vs(e)||ys(e)||e===jn},dt=function(e){return _e(e)||J(e)||e===Z},Ks=function(e){return e>=ws&&e<=cs||e===Cs||e>=us&&e<=ls||e===fs},UA=function(e,A){return e!==ne?!1:A!==Xe},Ke=function(e,A,t){return e===Z?_e(A)||UA(A,t):_e(e)?!0:!!(e===ne&&UA(e,A))},Cr=function(e,A,t){return e===DA||e===Z?J(A)?!0:A===ge&&J(t):J(e===ge?A:e)},ms=function(e){var A=0,t=1;(e[A]===DA||e[A]===Z)&&(e[A]===Z&&(t=-1),A++);for(var r=[];J(e[A]);)r.push(e[A++]);var B=r.length?parseInt(S.apply(void 0,r),10):0;e[A]===ge&&A++;for(var n=[];J(e[A]);)n.push(e[A++]);var s=n.length,i=s?parseInt(S.apply(void 0,n),10):0;(e[A]===uB||e[A]===cB)&&A++;var a=1;(e[A]===DA||e[A]===Z)&&(e[A]===Z&&(a=-1),A++);for(var o=[];J(e[A]);)o.push(e[A++]);var Q=o.length?parseInt(S.apply(void 0,o),10):0;return t*(B+i*Math.pow(10,-s))*Math.pow(10,a*Q)},Ls={type:2},Ds={type:3},bs={type:4},xs={type:13},Ts={type:8},Ss={type:21},Os={type:9},Ms={type:10},Gs={type:11},Rs={type:12},Vs={type:14},me={type:23},Ns={type:1},Xs={type:25},_s={type:24},Js={type:26},Ps={type:27},ks={type:28},Ys={type:29},Ws={type:31},Nr={type:32},fB=(function(){function e(){this._value=[]}return e.prototype.write=function(A){this._value=this._value.concat($e(A))},e.prototype.read=function(){for(var A=[],t=this.consumeToken();t!==Nr;)A.push(t),t=this.consumeToken();return A},e.prototype.consumeToken=function(){var A=this.consumeCodePoint();switch(A){case He:return this.consumeStringToken(He);case Wn:var t=this.peekCodePoint(0),r=this.peekCodePoint(1),B=this.peekCodePoint(2);if(dt(t)||UA(r,B)){var n=Ke(t,r,B)?Pn:Jn,s=this.consumeName();return{type:5,value:s,flags:n}}break;case Zn:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),xs;break;case pe:return this.consumeStringToken(pe);case Ie:return Ls;case jA:return Ds;case cr:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),Vs;break;case DA:if(Cr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case os:return bs;case Z:var i=A,a=this.peekCodePoint(0),o=this.peekCodePoint(1);if(Cr(i,a,o))return this.reconsumeCodePoint(A),this.consumeNumericToken();if(Ke(i,a,o))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();if(a===Z&&o===As)return this.consumeCodePoint(),this.consumeCodePoint(),_s;break;case ge:if(Cr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case Ut:if(this.peekCodePoint(0)===cr)for(this.consumeCodePoint();;){var Q=this.consumeCodePoint();if(Q===cr&&(Q=this.consumeCodePoint(),Q===Ut))return this.consumeToken();if(Q===nA)return this.consumeToken()}break;case Qs:return Js;case gs:return Ps;case $n:if(this.peekCodePoint(0)===zn&&this.peekCodePoint(1)===Z&&this.peekCodePoint(2)===Z)return this.consumeCodePoint(),this.consumeCodePoint(),Xs;break;case es:var g=this.peekCodePoint(0),w=this.peekCodePoint(1),f=this.peekCodePoint(2);if(Ke(g,w,f)){var s=this.consumeName();return{type:7,value:s}}break;case rs:return ks;case ne:if(UA(A,this.peekCodePoint(0)))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();break;case ts:return Ys;case Bs:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),Ts;break;case ns:return Gs;case ss:return Rs;case Fs:case ds:var c=this.peekCodePoint(0),C=this.peekCodePoint(1);return c===DA&&(MA(C)||C===ve)&&(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(A),this.consumeIdentLikeToken();case Ft:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),Os;if(this.peekCodePoint(0)===Ft)return this.consumeCodePoint(),Ss;break;case as:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),Ms;break;case nA:return Nr}return ye(A)?(this.consumeWhiteSpace(),Ws):J(A)?(this.reconsumeCodePoint(A),this.consumeNumericToken()):_e(A)?(this.reconsumeCodePoint(A),this.consumeIdentLikeToken()):{type:6,value:S(A)}},e.prototype.consumeCodePoint=function(){var A=this._value.shift();return typeof A>\"u\"?-1:A},e.prototype.reconsumeCodePoint=function(A){this._value.unshift(A)},e.prototype.peekCodePoint=function(A){return A>=this._value.length?-1:this._value[A]},e.prototype.consumeUnicodeRangeToken=function(){for(var A=[],t=this.consumeCodePoint();MA(t)&&A.length<6;)A.push(t),t=this.consumeCodePoint();for(var r=!1;t===ve&&A.length<6;)A.push(t),t=this.consumeCodePoint(),r=!0;if(r){var B=parseInt(S.apply(void 0,A.map(function(a){return a===ve?gB:a})),16),n=parseInt(S.apply(void 0,A.map(function(a){return a===ve?lB:a})),16);return{type:30,start:B,end:n}}var s=parseInt(S.apply(void 0,A),16);if(this.peekCodePoint(0)===Z&&MA(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var i=[];MA(t)&&i.length<6;)i.push(t),t=this.consumeCodePoint();var n=parseInt(S.apply(void 0,i),16);return{type:30,start:s,end:n}}else return{type:30,start:s,end:s}},e.prototype.consumeIdentLikeToken=function(){var A=this.consumeName();return A.toLowerCase()===\"url\"&&this.peekCodePoint(0)===Ie?(this.consumeCodePoint(),this.consumeUrlToken()):this.peekCodePoint(0)===Ie?(this.consumeCodePoint(),{type:19,value:A}):{type:20,value:A}},e.prototype.consumeUrlToken=function(){var A=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===nA)return{type:22,value:\"\"};var t=this.peekCodePoint(0);if(t===pe||t===He){var r=this.consumeStringToken(this.consumeCodePoint());return r.type===0&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===nA||this.peekCodePoint(0)===jA)?(this.consumeCodePoint(),{type:22,value:r.value}):(this.consumeBadUrlRemnants(),me)}for(;;){var B=this.consumeCodePoint();if(B===nA||B===jA)return{type:22,value:S.apply(void 0,A)};if(ye(B))return this.consumeWhiteSpace(),this.peekCodePoint(0)===nA||this.peekCodePoint(0)===jA?(this.consumeCodePoint(),{type:22,value:S.apply(void 0,A)}):(this.consumeBadUrlRemnants(),me);if(B===He||B===pe||B===Ie||Ks(B))return this.consumeBadUrlRemnants(),me;if(B===ne)if(UA(B,this.peekCodePoint(0)))A.push(this.consumeEscapedCodePoint());else return this.consumeBadUrlRemnants(),me;else A.push(B)}},e.prototype.consumeWhiteSpace=function(){for(;ye(this.peekCodePoint(0));)this.consumeCodePoint()},e.prototype.consumeBadUrlRemnants=function(){for(;;){var A=this.consumeCodePoint();if(A===jA||A===nA)return;UA(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},e.prototype.consumeStringSlice=function(A){for(var t=5e4,r=\"\";A>0;){var B=Math.min(t,A);r+=S.apply(void 0,this._value.splice(0,B)),A-=B}return this._value.shift(),r},e.prototype.consumeStringToken=function(A){var t=\"\",r=0;do{var B=this._value[r];if(B===nA||B===void 0||B===A)return t+=this.consumeStringSlice(r),{type:0,value:t};if(B===Xe)return this._value.splice(0,r),Ns;if(B===ne){var n=this._value[r+1];n!==nA&&n!==void 0&&(n===Xe?(t+=this.consumeStringSlice(r),r=-1,this._value.shift()):UA(B,n)&&(t+=this.consumeStringSlice(r),t+=S(this.consumeEscapedCodePoint()),r=-1))}r++}while(!0)},e.prototype.consumeNumber=function(){var A=[],t=ce,r=this.peekCodePoint(0);for((r===DA||r===Z)&&A.push(this.consumeCodePoint());J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0);var B=this.peekCodePoint(1);if(r===ge&&J(B))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=ft;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0),B=this.peekCodePoint(1);var n=this.peekCodePoint(2);if((r===uB||r===cB)&&((B===DA||B===Z)&&J(n)||J(B)))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=ft;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());return[ms(A),t]},e.prototype.consumeNumericToken=function(){var A=this.consumeNumber(),t=A[0],r=A[1],B=this.peekCodePoint(0),n=this.peekCodePoint(1),s=this.peekCodePoint(2);if(Ke(B,n,s)){var i=this.consumeName();return{type:15,number:t,flags:r,unit:i}}return B===qn?(this.consumeCodePoint(),{type:16,number:t,flags:r}):{type:17,number:t,flags:r}},e.prototype.consumeEscapedCodePoint=function(){var A=this.consumeCodePoint();if(MA(A)){for(var t=S(A);MA(this.peekCodePoint(0))&&t.length<6;)t+=S(this.consumeCodePoint());ye(this.peekCodePoint(0))&&this.consumeCodePoint();var r=parseInt(t,16);return r===0||Hs(r)||r>1114111?ht:r}return A===nA?ht:A},e.prototype.consumeName=function(){for(var A=\"\";;){var t=this.consumeCodePoint();if(dt(t))A+=S(t);else if(UA(t,this.peekCodePoint(0)))A+=S(this.consumeEscapedCodePoint());else return this.reconsumeCodePoint(t),A}},e})(),UB=(function(){function e(A){this._tokens=A}return e.create=function(A){var t=new fB;return t.write(A),new e(t.read())},e.parseValue=function(A){return e.create(A).parseComponentValue()},e.parseValues=function(A){return e.create(A).parseComponentValues()},e.prototype.parseComponentValue=function(){for(var A=this.consumeToken();A.type===31;)A=this.consumeToken();if(A.type===32)throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");this.reconsumeToken(A);var t=this.consumeComponentValue();do A=this.consumeToken();while(A.type===31);if(A.type===32)return t;throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\")},e.prototype.parseComponentValues=function(){for(var A=[];;){var t=this.consumeComponentValue();if(t.type===32)return A;A.push(t),A.push()}},e.prototype.consumeComponentValue=function(){var A=this.consumeToken();switch(A.type){case 11:case 28:case 2:return this.consumeSimpleBlock(A.type);case 19:return this.consumeFunction(A)}return A},e.prototype.consumeSimpleBlock=function(A){for(var t={type:A,values:[]},r=this.consumeToken();;){if(r.type===32||qs(r,A))return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue()),r=this.consumeToken()}},e.prototype.consumeFunction=function(A){for(var t={name:A.value,values:[],type:18};;){var r=this.consumeToken();if(r.type===32||r.type===3)return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue())}},e.prototype.consumeToken=function(){var A=this._tokens.shift();return typeof A>\"u\"?Nr:A},e.prototype.reconsumeToken=function(A){this._tokens.unshift(A)},e})(),Ce=function(e){return e.type===15},kA=function(e){return e.type===17},D=function(e){return e.type===20},Zs=function(e){return e.type===0},Xr=function(e,A){return D(e)&&e.value===A},FB=function(e){return e.type!==31},PA=function(e){return e.type!==31&&e.type!==4},sA=function(e){var A=[],t=[];return e.forEach(function(r){if(r.type===4){if(t.length===0)throw new Error(\"Error parsing function args, zero tokens for arg\");A.push(t),t=[];return}r.type!==31&&t.push(r)}),t.length&&A.push(t),A},qs=function(e,A){return A===11&&e.type===12||A===28&&e.type===29?!0:A===2&&e.type===3},pA=function(e){return e.type===17||e.type===15},M=function(e){return e.type===16||pA(e)},hB=function(e){return e.length>1?[e[0],e[1]]:[e[0]]},X={type:17,number:0,flags:ce},$r={type:16,number:50,flags:ce},hA={type:16,number:100,flags:ce},re=function(e,A,t){var r=e[0],B=e[1];return[b(r,A),b(typeof B<\"u\"?B:r,t)]},b=function(e,A){if(e.type===16)return e.number/100*A;if(Ce(e))switch(e.unit){case\"rem\":case\"em\":return 16*e.number;default:return e.number}return e.number},dB=\"deg\",EB=\"grad\",HB=\"rad\",pB=\"turn\",Ar={name:\"angle\",parse:function(e,A){if(A.type===15)switch(A.unit){case dB:return Math.PI*A.number/180;case EB:return Math.PI/200*A.number;case HB:return A.number;case pB:return Math.PI*2*A.number}throw new Error(\"Unsupported angle type\")}},IB=function(e){return e.type===15&&(e.unit===dB||e.unit===EB||e.unit===HB||e.unit===pB)},vB=function(e){var A=e.filter(D).map(function(t){return t.value}).join(\" \");switch(A){case\"to bottom right\":case\"to right bottom\":case\"left top\":case\"top left\":return[X,X];case\"to top\":case\"bottom\":return AA(0);case\"to bottom left\":case\"to left bottom\":case\"right top\":case\"top right\":return[X,hA];case\"to right\":case\"left\":return AA(90);case\"to top left\":case\"to left top\":case\"right bottom\":case\"bottom right\":return[hA,hA];case\"to bottom\":case\"top\":return AA(180);case\"to top right\":case\"to right top\":case\"left bottom\":case\"bottom left\":return[hA,X];case\"to left\":case\"right\":return AA(270)}return 0},AA=function(e){return Math.PI*e/180},EA={name:\"color\",parse:function(e,A){if(A.type===18){var t=js[A.name];if(typeof t>\"u\")throw new Error('Attempting to parse an unsupported color function \"'+A.name+'\"');return t(e,A.values)}if(A.type===5){if(A.value.length===3){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3);return dA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),1)}if(A.value.length===4){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3),s=A.value.substring(3,4);return dA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),parseInt(s+s,16)/255)}if(A.value.length===6){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6);return dA(parseInt(r,16),parseInt(B,16),parseInt(n,16),1)}if(A.value.length===8){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6),s=A.value.substring(6,8);return dA(parseInt(r,16),parseInt(B,16),parseInt(n,16),parseInt(s,16)/255)}}if(A.type===20){var i=wA[A.value.toUpperCase()];if(typeof i<\"u\")return i}return wA.TRANSPARENT}},HA=function(e){return(255&e)===0},R=function(e){var A=255&e,t=255&e>>8,r=255&e>>16,B=255&e>>24;return A<255?\"rgba(\"+B+\",\"+r+\",\"+t+\",\"+A/255+\")\":\"rgb(\"+B+\",\"+r+\",\"+t+\")\"},dA=function(e,A,t,r){return(e<<24|A<<16|t<<8|Math.round(r*255)<<0)>>>0},Et=function(e,A){if(e.type===17)return e.number;if(e.type===16){var t=A===3?1:255;return A===3?e.number/100*t:Math.round(e.number/100*t)}return 0},Ht=function(e,A){var t=A.filter(PA);if(t.length===3){var r=t.map(Et),B=r[0],n=r[1],s=r[2];return dA(B,n,s,1)}if(t.length===4){var i=t.map(Et),B=i[0],n=i[1],s=i[2],a=i[3];return dA(B,n,s,a)}return 0};function ur(e,A,t){return t<0&&(t+=1),t>=1&&(t-=1),t<1/6?(A-e)*t*6+e:t<1/2?A:t<2/3?(A-e)*6*(2/3-t)+e:e}var pt=function(e,A){var t=A.filter(PA),r=t[0],B=t[1],n=t[2],s=t[3],i=(r.type===17?AA(r.number):Ar.parse(e,r))/(Math.PI*2),a=M(B)?B.number/100:0,o=M(n)?n.number/100:0,Q=typeof s<\"u\"&&M(s)?b(s,1):1;if(a===0)return dA(o*255,o*255,o*255,1);var g=o<=.5?o*(a+1):o+a-o*a,w=o*2-g,f=ur(w,g,i+1/3),c=ur(w,g,i),C=ur(w,g,i-1/3);return dA(f*255,c*255,C*255,Q)},js={hsl:pt,hsla:pt,rgb:Ht,rgba:Ht},se=function(e,A){return EA.parse(e,UB.create(A).parseComponentValue())},wA={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},zs={name:\"background-clip\",initialValue:\"border-box\",prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(D(t))switch(t.value){case\"padding-box\":return 1;case\"content-box\":return 2}return 0})}},$s={name:\"background-color\",initialValue:\"transparent\",prefix:!1,type:3,format:\"color\"},er=function(e,A){var t=EA.parse(e,A[0]),r=A[1];return r&&M(r)?{color:t,stop:r}:{color:t,stop:null}},It=function(e,A){var t=e[0],r=e[e.length-1];t.stop===null&&(t.stop=X),r.stop===null&&(r.stop=hA);for(var B=[],n=0,s=0;s<e.length;s++){var i=e[s].stop;if(i!==null){var a=b(i,A);a>n?B.push(a):B.push(n),n=a}else B.push(null)}for(var o=null,s=0;s<B.length;s++){var Q=B[s];if(Q===null)o===null&&(o=s);else if(o!==null){for(var g=s-o,w=B[o-1],f=(Q-w)/(g+1),c=1;c<=g;c++)B[o+c-1]=f*c;o=null}}return e.map(function(C,H){var h=C.color;return{color:h,stop:Math.max(Math.min(1,B[H]/A),0)}})},Aa=function(e,A,t){var r=A/2,B=t/2,n=b(e[0],A)-r,s=B-b(e[1],t);return(Math.atan2(s,n)+Math.PI*2)%(Math.PI*2)},ea=function(e,A,t){var r=typeof e==\"number\"?e:Aa(e,A,t),B=Math.abs(A*Math.sin(r))+Math.abs(t*Math.cos(r)),n=A/2,s=t/2,i=B/2,a=Math.sin(r-Math.PI/2)*i,o=Math.cos(r-Math.PI/2)*i;return[B,n-o,n+o,s-a,s+a]},rA=function(e,A){return Math.sqrt(e*e+A*A)},vt=function(e,A,t,r,B){var n=[[0,0],[0,A],[e,0],[e,A]];return n.reduce(function(s,i){var a=i[0],o=i[1],Q=rA(t-a,r-o);return(B?Q<s.optimumDistance:Q>s.optimumDistance)?{optimumCorner:i,optimumDistance:Q}:s},{optimumDistance:B?1/0:-1/0,optimumCorner:null}).optimumCorner},ra=function(e,A,t,r,B){var n=0,s=0;switch(e.size){case 0:e.shape===0?n=s=Math.min(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.min(Math.abs(A),Math.abs(A-r)),s=Math.min(Math.abs(t),Math.abs(t-B)));break;case 2:if(e.shape===0)n=s=Math.min(rA(A,t),rA(A,t-B),rA(A-r,t),rA(A-r,t-B));else if(e.shape===1){var i=Math.min(Math.abs(t),Math.abs(t-B))/Math.min(Math.abs(A),Math.abs(A-r)),a=vt(r,B,A,t,!0),o=a[0],Q=a[1];n=rA(o-A,(Q-t)/i),s=i*n}break;case 1:e.shape===0?n=s=Math.max(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.max(Math.abs(A),Math.abs(A-r)),s=Math.max(Math.abs(t),Math.abs(t-B)));break;case 3:if(e.shape===0)n=s=Math.max(rA(A,t),rA(A,t-B),rA(A-r,t),rA(A-r,t-B));else if(e.shape===1){var i=Math.max(Math.abs(t),Math.abs(t-B))/Math.max(Math.abs(A),Math.abs(A-r)),g=vt(r,B,A,t,!1),o=g[0],Q=g[1];n=rA(o-A,(Q-t)/i),s=i*n}break}return Array.isArray(e.size)&&(n=b(e.size[0],r),s=e.size.length===2?b(e.size[1],B):n),[n,s]},ta=function(e,A){var t=AA(180),r=[];return sA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&s.value===\"to\"){t=vB(B);return}else if(IB(s)){t=Ar.parse(e,s);return}}var i=er(e,B);r.push(i)}),{angle:t,stops:r,type:1}},Le=function(e,A){var t=AA(180),r=[];return sA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&[\"top\",\"left\",\"right\",\"bottom\"].indexOf(s.value)!==-1){t=vB(B);return}else if(IB(s)){t=(Ar.parse(e,s)+AA(270))%AA(360);return}}var i=er(e,B);r.push(i)}),{angle:t,stops:r,type:1}},Ba=function(e,A){var t=AA(180),r=[],B=1,n=0,s=3,i=[];return sA(A).forEach(function(a,o){var Q=a[0];if(o===0){if(D(Q)&&Q.value===\"linear\"){B=1;return}else if(D(Q)&&Q.value===\"radial\"){B=2;return}}if(Q.type===18){if(Q.name===\"from\"){var g=EA.parse(e,Q.values[0]);r.push({stop:X,color:g})}else if(Q.name===\"to\"){var g=EA.parse(e,Q.values[0]);r.push({stop:hA,color:g})}else if(Q.name===\"color-stop\"){var w=Q.values.filter(PA);if(w.length===2){var g=EA.parse(e,w[1]),f=w[0];kA(f)&&r.push({stop:{type:16,number:f.number*100,flags:f.flags},color:g})}}}}),B===1?{angle:(t+AA(180))%AA(360),stops:r,type:B}:{size:s,shape:n,stops:r,position:i,type:B}},yB=\"closest-side\",KB=\"farthest-side\",mB=\"closest-corner\",LB=\"farthest-corner\",DB=\"circle\",bB=\"ellipse\",xB=\"cover\",TB=\"contain\",na=function(e,A){var t=0,r=3,B=[],n=[];return sA(A).forEach(function(s,i){var a=!0;if(i===0){var o=!1;a=s.reduce(function(g,w){if(o)if(D(w))switch(w.value){case\"center\":return n.push($r),g;case\"top\":case\"left\":return n.push(X),g;case\"right\":case\"bottom\":return n.push(hA),g}else(M(w)||pA(w))&&n.push(w);else if(D(w))switch(w.value){case DB:return t=0,!1;case bB:return t=1,!1;case\"at\":return o=!0,!1;case yB:return r=0,!1;case xB:case KB:return r=1,!1;case TB:case mB:return r=2,!1;case LB:return r=3,!1}else if(pA(w)||M(w))return Array.isArray(r)||(r=[]),r.push(w),!1;return g},a)}if(a){var Q=er(e,s);B.push(Q)}}),{size:r,shape:t,stops:B,position:n,type:2}},De=function(e,A){var t=0,r=3,B=[],n=[];return sA(A).forEach(function(s,i){var a=!0;if(i===0?a=s.reduce(function(Q,g){if(D(g))switch(g.value){case\"center\":return n.push($r),!1;case\"top\":case\"left\":return n.push(X),!1;case\"right\":case\"bottom\":return n.push(hA),!1}else if(M(g)||pA(g))return n.push(g),!1;return Q},a):i===1&&(a=s.reduce(function(Q,g){if(D(g))switch(g.value){case DB:return t=0,!1;case bB:return t=1,!1;case TB:case yB:return r=0,!1;case KB:return r=1,!1;case mB:return r=2,!1;case xB:case LB:return r=3,!1}else if(pA(g)||M(g))return Array.isArray(r)||(r=[]),r.push(g),!1;return Q},a)),a){var o=er(e,s);B.push(o)}}),{size:r,shape:t,stops:B,position:n,type:2}},sa=function(e){return e.type===1},aa=function(e){return e.type===2},At={name:\"image\",parse:function(e,A){if(A.type===22){var t={url:A.value,type:0};return e.cache.addImage(A.value),t}if(A.type===18){var r=SB[A.name];if(typeof r>\"u\")throw new Error('Attempting to parse an unsupported image function \"'+A.name+'\"');return r(e,A.values)}throw new Error(\"Unsupported image type \"+A.type)}};function ia(e){return!(e.type===20&&e.value===\"none\")&&(e.type!==18||!!SB[e.name])}var SB={\"linear-gradient\":ta,\"-moz-linear-gradient\":Le,\"-ms-linear-gradient\":Le,\"-o-linear-gradient\":Le,\"-webkit-linear-gradient\":Le,\"radial-gradient\":na,\"-moz-radial-gradient\":De,\"-ms-radial-gradient\":De,\"-o-radial-gradient\":De,\"-webkit-radial-gradient\":De,\"-webkit-gradient\":Ba},oa={name:\"background-image\",initialValue:\"none\",type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value===\"none\"?[]:A.filter(function(r){return PA(r)&&ia(r)}).map(function(r){return At.parse(e,r)})}},Qa={name:\"background-origin\",initialValue:\"border-box\",prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(D(t))switch(t.value){case\"padding-box\":return 1;case\"content-box\":return 2}return 0})}},ga={name:\"background-position\",initialValue:\"0% 0%\",type:1,prefix:!1,parse:function(e,A){return sA(A).map(function(t){return t.filter(M)}).map(hB)}},wa={name:\"background-repeat\",initialValue:\"repeat\",prefix:!1,type:1,parse:function(e,A){return sA(A).map(function(t){return t.filter(D).map(function(r){return r.value}).join(\" \")}).map(ca)}},ca=function(e){switch(e){case\"no-repeat\":return 1;case\"repeat-x\":case\"repeat no-repeat\":return 2;case\"repeat-y\":case\"no-repeat repeat\":return 3;default:return 0}},JA;(function(e){e.AUTO=\"auto\",e.CONTAIN=\"contain\",e.COVER=\"cover\"})(JA||(JA={}));var Ca={name:\"background-size\",initialValue:\"0\",prefix:!1,type:1,parse:function(e,A){return sA(A).map(function(t){return t.filter(ua)})}},ua=function(e){return D(e)||M(e)},rr=function(e){return{name:\"border-\"+e+\"-color\",initialValue:\"transparent\",prefix:!1,type:3,format:\"color\"}},la=rr(\"top\"),fa=rr(\"right\"),Ua=rr(\"bottom\"),Fa=rr(\"left\"),tr=function(e){return{name:\"border-radius-\"+e,initialValue:\"0 0\",prefix:!1,type:1,parse:function(A,t){return hB(t.filter(M))}}},ha=tr(\"top-left\"),da=tr(\"top-right\"),Ea=tr(\"bottom-right\"),Ha=tr(\"bottom-left\"),Br=function(e){return{name:\"border-\"+e+\"-style\",initialValue:\"solid\",prefix:!1,type:2,parse:function(A,t){switch(t){case\"none\":return 0;case\"dashed\":return 2;case\"dotted\":return 3;case\"double\":return 4}return 1}}},pa=Br(\"top\"),Ia=Br(\"right\"),va=Br(\"bottom\"),ya=Br(\"left\"),nr=function(e){return{name:\"border-\"+e+\"-width\",initialValue:\"0\",type:0,prefix:!1,parse:function(A,t){return Ce(t)?t.number:0}}},Ka=nr(\"top\"),ma=nr(\"right\"),La=nr(\"bottom\"),Da=nr(\"left\"),ba={name:\"color\",initialValue:\"transparent\",prefix:!1,type:3,format:\"color\"},xa={name:\"direction\",initialValue:\"ltr\",prefix:!1,type:2,parse:function(e,A){return A===\"rtl\"?1:0}},Ta={name:\"display\",initialValue:\"inline-block\",prefix:!1,type:1,parse:function(e,A){return A.filter(D).reduce(function(t,r){return t|Sa(r.value)},0)}},Sa=function(e){switch(e){case\"block\":case\"-webkit-box\":return 2;case\"inline\":return 4;case\"run-in\":return 8;case\"flow\":return 16;case\"flow-root\":return 32;case\"table\":return 64;case\"flex\":case\"-webkit-flex\":return 128;case\"grid\":case\"-ms-grid\":return 256;case\"ruby\":return 512;case\"subgrid\":return 1024;case\"list-item\":return 2048;case\"table-row-group\":return 4096;case\"table-header-group\":return 8192;case\"table-footer-group\":return 16384;case\"table-row\":return 32768;case\"table-cell\":return 65536;case\"table-column-group\":return 131072;case\"table-column\":return 262144;case\"table-caption\":return 524288;case\"ruby-base\":return 1048576;case\"ruby-text\":return 2097152;case\"ruby-base-container\":return 4194304;case\"ruby-text-container\":return 8388608;case\"contents\":return 16777216;case\"inline-block\":return 33554432;case\"inline-list-item\":return 67108864;case\"inline-table\":return 134217728;case\"inline-flex\":return 268435456;case\"inline-grid\":return 536870912}return 0},Oa={name:\"float\",initialValue:\"none\",prefix:!1,type:2,parse:function(e,A){switch(A){case\"left\":return 1;case\"right\":return 2;case\"inline-start\":return 3;case\"inline-end\":return 4}return 0}},Ma={name:\"letter-spacing\",initialValue:\"0\",prefix:!1,type:0,parse:function(e,A){return A.type===20&&A.value===\"normal\"?0:A.type===17||A.type===15?A.number:0}},Je;(function(e){e.NORMAL=\"normal\",e.STRICT=\"strict\"})(Je||(Je={}));var Ga={name:\"line-break\",initialValue:\"normal\",prefix:!1,type:2,parse:function(e,A){return A===\"strict\"?Je.STRICT:Je.NORMAL}},Ra={name:\"line-height\",initialValue:\"normal\",prefix:!1,type:4},yt=function(e,A){return D(e)&&e.value===\"normal\"?1.2*A:e.type===17?A*e.number:M(e)?b(e,A):A},Va={name:\"list-style-image\",initialValue:\"none\",type:0,prefix:!1,parse:function(e,A){return A.type===20&&A.value===\"none\"?null:At.parse(e,A)}},Na={name:\"list-style-position\",initialValue:\"outside\",prefix:!1,type:2,parse:function(e,A){return A===\"inside\"?0:1}},_r={name:\"list-style-type\",initialValue:\"none\",prefix:!1,type:2,parse:function(e,A){switch(A){case\"disc\":return 0;case\"circle\":return 1;case\"square\":return 2;case\"decimal\":return 3;case\"cjk-decimal\":return 4;case\"decimal-leading-zero\":return 5;case\"lower-roman\":return 6;case\"upper-roman\":return 7;case\"lower-greek\":return 8;case\"lower-alpha\":return 9;case\"upper-alpha\":return 10;case\"arabic-indic\":return 11;case\"armenian\":return 12;case\"bengali\":return 13;case\"cambodian\":return 14;case\"cjk-earthly-branch\":return 15;case\"cjk-heavenly-stem\":return 16;case\"cjk-ideographic\":return 17;case\"devanagari\":return 18;case\"ethiopic-numeric\":return 19;case\"georgian\":return 20;case\"gujarati\":return 21;case\"gurmukhi\":return 22;case\"hebrew\":return 22;case\"hiragana\":return 23;case\"hiragana-iroha\":return 24;case\"japanese-formal\":return 25;case\"japanese-informal\":return 26;case\"kannada\":return 27;case\"katakana\":return 28;case\"katakana-iroha\":return 29;case\"khmer\":return 30;case\"korean-hangul-formal\":return 31;case\"korean-hanja-formal\":return 32;case\"korean-hanja-informal\":return 33;case\"lao\":return 34;case\"lower-armenian\":return 35;case\"malayalam\":return 36;case\"mongolian\":return 37;case\"myanmar\":return 38;case\"oriya\":return 39;case\"persian\":return 40;case\"simp-chinese-formal\":return 41;case\"simp-chinese-informal\":return 42;case\"tamil\":return 43;case\"telugu\":return 44;case\"thai\":return 45;case\"tibetan\":return 46;case\"trad-chinese-formal\":return 47;case\"trad-chinese-informal\":return 48;case\"upper-armenian\":return 49;case\"disclosure-open\":return 50;case\"disclosure-closed\":return 51;default:return-1}}},sr=function(e){return{name:\"margin-\"+e,initialValue:\"0\",prefix:!1,type:4}},Xa=sr(\"top\"),_a=sr(\"right\"),Ja=sr(\"bottom\"),Pa=sr(\"left\"),ka={name:\"overflow\",initialValue:\"visible\",prefix:!1,type:1,parse:function(e,A){return A.filter(D).map(function(t){switch(t.value){case\"hidden\":return 1;case\"scroll\":return 2;case\"clip\":return 3;case\"auto\":return 4;default:return 0}})}},Ya={name:\"overflow-wrap\",initialValue:\"normal\",prefix:!1,type:2,parse:function(e,A){return A===\"break-word\"?\"break-word\":\"normal\"}},ar=function(e){return{name:\"padding-\"+e,initialValue:\"0\",prefix:!1,type:3,format:\"length-percentage\"}},Wa=ar(\"top\"),Za=ar(\"right\"),qa=ar(\"bottom\"),ja=ar(\"left\"),za={name:\"text-align\",initialValue:\"left\",prefix:!1,type:2,parse:function(e,A){switch(A){case\"right\":return 2;case\"center\":case\"justify\":return 1;default:return 0}}},$a={name:\"position\",initialValue:\"static\",prefix:!1,type:2,parse:function(e,A){switch(A){case\"relative\":return 1;case\"absolute\":return 2;case\"fixed\":return 3;case\"sticky\":return 4}return 0}},Ai={name:\"text-shadow\",initialValue:\"none\",type:1,prefix:!1,parse:function(e,A){return A.length===1&&Xr(A[0],\"none\")?[]:sA(A).map(function(t){for(var r={color:wA.TRANSPARENT,offsetX:X,offsetY:X,blur:X},B=0,n=0;n<t.length;n++){var s=t[n];pA(s)?(B===0?r.offsetX=s:B===1?r.offsetY=s:r.blur=s,B++):r.color=EA.parse(e,s)}return r})}},ei={name:\"text-transform\",initialValue:\"none\",prefix:!1,type:2,parse:function(e,A){switch(A){case\"uppercase\":return 2;case\"lowercase\":return 1;case\"capitalize\":return 3}return 0}},ri={name:\"transform\",initialValue:\"none\",prefix:!0,type:0,parse:function(e,A){if(A.type===20&&A.value===\"none\")return null;if(A.type===18){var t=ni[A.name];if(typeof t>\"u\")throw new Error('Attempting to parse an unsupported transform function \"'+A.name+'\"');return t(A.values)}return null}},ti=function(e){var A=e.filter(function(t){return t.type===17}).map(function(t){return t.number});return A.length===6?A:null},Bi=function(e){var A=e.filter(function(a){return a.type===17}).map(function(a){return a.number}),t=A[0],r=A[1];A[2],A[3];var B=A[4],n=A[5];A[6],A[7],A[8],A[9],A[10],A[11];var s=A[12],i=A[13];return A[14],A[15],A.length===16?[t,r,B,n,s,i]:null},ni={matrix:ti,matrix3d:Bi},Kt={type:16,number:50,flags:ce},si=[Kt,Kt],ai={name:\"transform-origin\",initialValue:\"50% 50%\",prefix:!0,type:1,parse:function(e,A){var t=A.filter(M);return t.length!==2?si:[t[0],t[1]]}},ii={name:\"visible\",initialValue:\"none\",prefix:!1,type:2,parse:function(e,A){switch(A){case\"hidden\":return 1;case\"collapse\":return 2;default:return 0}}},ae;(function(e){e.NORMAL=\"normal\",e.BREAK_ALL=\"break-all\",e.KEEP_ALL=\"keep-all\"})(ae||(ae={}));var oi={name:\"word-break\",initialValue:\"normal\",prefix:!1,type:2,parse:function(e,A){switch(A){case\"break-all\":return ae.BREAK_ALL;case\"keep-all\":return ae.KEEP_ALL;default:return ae.NORMAL}}},Qi={name:\"z-index\",initialValue:\"auto\",prefix:!1,type:0,parse:function(e,A){if(A.type===20)return{auto:!0,order:0};if(kA(A))return{auto:!1,order:A.number};throw new Error(\"Invalid z-index number parsed\")}},OB={name:\"time\",parse:function(e,A){if(A.type===15)switch(A.unit.toLowerCase()){case\"s\":return 1e3*A.number;case\"ms\":return A.number}throw new Error(\"Unsupported time type\")}},gi={name:\"opacity\",initialValue:\"1\",type:0,prefix:!1,parse:function(e,A){return kA(A)?A.number:1}},wi={name:\"text-decoration-color\",initialValue:\"transparent\",prefix:!1,type:3,format:\"color\"},ci={name:\"text-decoration-line\",initialValue:\"none\",prefix:!1,type:1,parse:function(e,A){return A.filter(D).map(function(t){switch(t.value){case\"underline\":return 1;case\"overline\":return 2;case\"line-through\":return 3;case\"none\":return 4}return 0}).filter(function(t){return t!==0})}},Ci={name:\"font-family\",initialValue:\"\",prefix:!1,type:1,parse:function(e,A){var t=[],r=[];return A.forEach(function(B){switch(B.type){case 20:case 0:t.push(B.value);break;case 17:t.push(B.number.toString());break;case 4:r.push(t.join(\" \")),t.length=0;break}}),t.length&&r.push(t.join(\" \")),r.map(function(B){return B.indexOf(\" \")===-1?B:\"'\"+B+\"'\"})}},ui={name:\"font-size\",initialValue:\"0\",prefix:!1,type:3,format:\"length\"},li={name:\"font-weight\",initialValue:\"normal\",type:0,prefix:!1,parse:function(e,A){return kA(A)?A.number:D(A)&&A.value===\"bold\"?700:400}},fi={name:\"font-variant\",initialValue:\"none\",type:1,prefix:!1,parse:function(e,A){return A.filter(D).map(function(t){return t.value})}},Ui={name:\"font-style\",initialValue:\"normal\",prefix:!1,type:2,parse:function(e,A){switch(A){case\"oblique\":return\"oblique\";case\"italic\":return\"italic\";default:return\"normal\"}}},G=function(e,A){return(e&A)!==0},Fi={name:\"content\",initialValue:\"none\",type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value===\"none\"?[]:A}},hi={name:\"counter-increment\",initialValue:\"none\",prefix:!0,type:1,parse:function(e,A){if(A.length===0)return null;var t=A[0];if(t.type===20&&t.value===\"none\")return null;for(var r=[],B=A.filter(FB),n=0;n<B.length;n++){var s=B[n],i=B[n+1];if(s.type===20){var a=i&&kA(i)?i.number:1;r.push({counter:s.value,increment:a})}}return r}},di={name:\"counter-reset\",initialValue:\"none\",prefix:!0,type:1,parse:function(e,A){if(A.length===0)return[];for(var t=[],r=A.filter(FB),B=0;B<r.length;B++){var n=r[B],s=r[B+1];if(D(n)&&n.value!==\"none\"){var i=s&&kA(s)?s.number:0;t.push({counter:n.value,reset:i})}}return t}},Ei={name:\"duration\",initialValue:\"0s\",prefix:!1,type:1,parse:function(e,A){return A.filter(Ce).map(function(t){return OB.parse(e,t)})}},Hi={name:\"quotes\",initialValue:\"none\",prefix:!0,type:1,parse:function(e,A){if(A.length===0)return null;var t=A[0];if(t.type===20&&t.value===\"none\")return null;var r=[],B=A.filter(Zs);if(B.length%2!==0)return null;for(var n=0;n<B.length;n+=2){var s=B[n].value,i=B[n+1].value;r.push({open:s,close:i})}return r}},mt=function(e,A,t){if(!e)return\"\";var r=e[Math.min(A,e.length-1)];return r?t?r.open:r.close:\"\"},pi={name:\"box-shadow\",initialValue:\"none\",type:1,prefix:!1,parse:function(e,A){return A.length===1&&Xr(A[0],\"none\")?[]:sA(A).map(function(t){for(var r={color:255,offsetX:X,offsetY:X,blur:X,spread:X,inset:!1},B=0,n=0;n<t.length;n++){var s=t[n];Xr(s,\"inset\")?r.inset=!0:pA(s)?(B===0?r.offsetX=s:B===1?r.offsetY=s:B===2?r.blur=s:r.spread=s,B++):r.color=EA.parse(e,s)}return r})}},Ii={name:\"paint-order\",initialValue:\"normal\",prefix:!1,type:1,parse:function(e,A){var t=[0,1,2],r=[];return A.filter(D).forEach(function(B){switch(B.value){case\"stroke\":r.push(1);break;case\"fill\":r.push(0);break;case\"markers\":r.push(2);break}}),t.forEach(function(B){r.indexOf(B)===-1&&r.push(B)}),r}},vi={name:\"-webkit-text-stroke-color\",initialValue:\"currentcolor\",prefix:!1,type:3,format:\"color\"},yi={name:\"-webkit-text-stroke-width\",initialValue:\"0\",type:0,prefix:!1,parse:function(e,A){return Ce(A)?A.number:0}},Ki=(function(){function e(A,t){var r,B;this.animationDuration=U(A,Ei,t.animationDuration),this.backgroundClip=U(A,zs,t.backgroundClip),this.backgroundColor=U(A,$s,t.backgroundColor),this.backgroundImage=U(A,oa,t.backgroundImage),this.backgroundOrigin=U(A,Qa,t.backgroundOrigin),this.backgroundPosition=U(A,ga,t.backgroundPosition),this.backgroundRepeat=U(A,wa,t.backgroundRepeat),this.backgroundSize=U(A,Ca,t.backgroundSize),this.borderTopColor=U(A,la,t.borderTopColor),this.borderRightColor=U(A,fa,t.borderRightColor),this.borderBottomColor=U(A,Ua,t.borderBottomColor),this.borderLeftColor=U(A,Fa,t.borderLeftColor),this.borderTopLeftRadius=U(A,ha,t.borderTopLeftRadius),this.borderTopRightRadius=U(A,da,t.borderTopRightRadius),this.borderBottomRightRadius=U(A,Ea,t.borderBottomRightRadius),this.borderBottomLeftRadius=U(A,Ha,t.borderBottomLeftRadius),this.borderTopStyle=U(A,pa,t.borderTopStyle),this.borderRightStyle=U(A,Ia,t.borderRightStyle),this.borderBottomStyle=U(A,va,t.borderBottomStyle),this.borderLeftStyle=U(A,ya,t.borderLeftStyle),this.borderTopWidth=U(A,Ka,t.borderTopWidth),this.borderRightWidth=U(A,ma,t.borderRightWidth),this.borderBottomWidth=U(A,La,t.borderBottomWidth),this.borderLeftWidth=U(A,Da,t.borderLeftWidth),this.boxShadow=U(A,pi,t.boxShadow),this.color=U(A,ba,t.color),this.direction=U(A,xa,t.direction),this.display=U(A,Ta,t.display),this.float=U(A,Oa,t.cssFloat),this.fontFamily=U(A,Ci,t.fontFamily),this.fontSize=U(A,ui,t.fontSize),this.fontStyle=U(A,Ui,t.fontStyle),this.fontVariant=U(A,fi,t.fontVariant),this.fontWeight=U(A,li,t.fontWeight),this.letterSpacing=U(A,Ma,t.letterSpacing),this.lineBreak=U(A,Ga,t.lineBreak),this.lineHeight=U(A,Ra,t.lineHeight),this.listStyleImage=U(A,Va,t.listStyleImage),this.listStylePosition=U(A,Na,t.listStylePosition),this.listStyleType=U(A,_r,t.listStyleType),this.marginTop=U(A,Xa,t.marginTop),this.marginRight=U(A,_a,t.marginRight),this.marginBottom=U(A,Ja,t.marginBottom),this.marginLeft=U(A,Pa,t.marginLeft),this.opacity=U(A,gi,t.opacity);var n=U(A,ka,t.overflow);this.overflowX=n[0],this.overflowY=n[n.length>1?1:0],this.overflowWrap=U(A,Ya,t.overflowWrap),this.paddingTop=U(A,Wa,t.paddingTop),this.paddingRight=U(A,Za,t.paddingRight),this.paddingBottom=U(A,qa,t.paddingBottom),this.paddingLeft=U(A,ja,t.paddingLeft),this.paintOrder=U(A,Ii,t.paintOrder),this.position=U(A,$a,t.position),this.textAlign=U(A,za,t.textAlign),this.textDecorationColor=U(A,wi,(r=t.textDecorationColor)!==null&&r!==void 0?r:t.color),this.textDecorationLine=U(A,ci,(B=t.textDecorationLine)!==null&&B!==void 0?B:t.textDecoration),this.textShadow=U(A,Ai,t.textShadow),this.textTransform=U(A,ei,t.textTransform),this.transform=U(A,ri,t.transform),this.transformOrigin=U(A,ai,t.transformOrigin),this.visibility=U(A,ii,t.visibility),this.webkitTextStrokeColor=U(A,vi,t.webkitTextStrokeColor),this.webkitTextStrokeWidth=U(A,yi,t.webkitTextStrokeWidth),this.wordBreak=U(A,oi,t.wordBreak),this.zIndex=U(A,Qi,t.zIndex)}return e.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===0},e.prototype.isTransparent=function(){return HA(this.backgroundColor)},e.prototype.isTransformed=function(){return this.transform!==null},e.prototype.isPositioned=function(){return this.position!==0},e.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},e.prototype.isFloating=function(){return this.float!==0},e.prototype.isInlineLevel=function(){return G(this.display,4)||G(this.display,33554432)||G(this.display,268435456)||G(this.display,536870912)||G(this.display,67108864)||G(this.display,134217728)},e})(),mi=(function(){function e(A,t){this.content=U(A,Fi,t.content),this.quotes=U(A,Hi,t.quotes)}return e})(),Lt=(function(){function e(A,t){this.counterIncrement=U(A,hi,t.counterIncrement),this.counterReset=U(A,di,t.counterReset)}return e})(),U=function(e,A,t){var r=new fB,B=t!==null&&typeof t<\"u\"?t.toString():A.initialValue;r.write(B);var n=new UB(r.read());switch(A.type){case 2:var s=n.parseComponentValue();return A.parse(e,D(s)?s.value:A.initialValue);case 0:return A.parse(e,n.parseComponentValue());case 1:return A.parse(e,n.parseComponentValues());case 4:return n.parseComponentValue();case 3:switch(A.format){case\"angle\":return Ar.parse(e,n.parseComponentValue());case\"color\":return EA.parse(e,n.parseComponentValue());case\"image\":return At.parse(e,n.parseComponentValue());case\"length\":var i=n.parseComponentValue();return pA(i)?i:X;case\"length-percentage\":var a=n.parseComponentValue();return M(a)?a:X;case\"time\":return OB.parse(e,n.parseComponentValue())}break}},Li=\"data-html2canvas-debug\",Di=function(e){var A=e.getAttribute(Li);switch(A){case\"all\":return 1;case\"clone\":return 2;case\"parse\":return 3;case\"render\":return 4;default:return 0}},Jr=function(e,A){var t=Di(e);return t===1||A===t},aA=(function(){function e(A,t){if(this.context=A,this.textNodes=[],this.elements=[],this.flags=0,Jr(t,3))debugger;this.styles=new Ki(A,window.getComputedStyle(t,null)),Yr(t)&&(this.styles.animationDuration.some(function(r){return r>0})&&(t.style.animationDuration=\"0s\"),this.styles.transform!==null&&(t.style.transform=\"none\")),this.bounds=ze(this.context,t),Jr(t,4)&&(this.flags|=16)}return e})(),bi=\"AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=\",Dt=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",te=typeof Uint8Array>\"u\"?[]:new Uint8Array(256);for(var be=0;be<Dt.length;be++)te[Dt.charCodeAt(be)]=be;var xi=function(e){var A=e.length*.75,t=e.length,r,B=0,n,s,i,a;e[e.length-1]===\"=\"&&(A--,e[e.length-2]===\"=\"&&A--);var o=typeof ArrayBuffer<\"u\"&&typeof Uint8Array<\"u\"&&typeof Uint8Array.prototype.slice<\"u\"?new ArrayBuffer(A):new Array(A),Q=Array.isArray(o)?o:new Uint8Array(o);for(r=0;r<t;r+=4)n=te[e.charCodeAt(r)],s=te[e.charCodeAt(r+1)],i=te[e.charCodeAt(r+2)],a=te[e.charCodeAt(r+3)],Q[B++]=n<<2|s>>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},Ti=function(e){for(var A=e.length,t=[],r=0;r<A;r+=2)t.push(e[r+1]<<8|e[r]);return t},Si=function(e){for(var A=e.length,t=[],r=0;r<A;r+=4)t.push(e[r+3]<<24|e[r+2]<<16|e[r+1]<<8|e[r]);return t},xA=5,et=11,lr=2,Oi=et-xA,MB=65536>>xA,Mi=1<<xA,fr=Mi-1,Gi=1024>>xA,Ri=MB+Gi,Vi=Ri,Ni=32,Xi=Vi+Ni,_i=65536>>et,Ji=1<<Oi,Pi=Ji-1,bt=function(e,A,t){return e.slice?e.slice(A,t):new Uint16Array(Array.prototype.slice.call(e,A,t))},ki=function(e,A,t){return e.slice?e.slice(A,t):new Uint32Array(Array.prototype.slice.call(e,A,t))},Yi=function(e,A){var t=xi(e),r=Array.isArray(t)?Si(t):new Uint32Array(t),B=Array.isArray(t)?Ti(t):new Uint16Array(t),n=24,s=bt(B,n/2,r[4]/2),i=r[5]===2?bt(B,(n+r[4])/2):ki(r,Math.ceil((n+r[4])/4));return new Wi(r[0],r[1],r[2],r[3],s,i)},Wi=(function(){function e(A,t,r,B,n,s){this.initialValue=A,this.errorValue=t,this.highStart=r,this.highValueIndex=B,this.index=n,this.data=s}return e.prototype.get=function(A){var t;if(A>=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>xA],t=(t<<lr)+(A&fr),this.data[t];if(A<=65535)return t=this.index[MB+(A-55296>>xA)],t=(t<<lr)+(A&fr),this.data[t];if(A<this.highStart)return t=Xi-_i+(A>>et),t=this.index[t],t+=A>>xA&Pi,t=this.index[t],t=(t<<lr)+(A&fr),this.data[t];if(A<=1114111)return this.data[this.highValueIndex]}return this.errorValue},e})(),xt=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",Zi=typeof Uint8Array>\"u\"?[]:new Uint8Array(256);for(var xe=0;xe<xt.length;xe++)Zi[xt.charCodeAt(xe)]=xe;var qi=1,Ur=2,Fr=3,Tt=4,St=5,ji=7,Ot=8,hr=9,dr=10,Mt=11,Gt=12,Rt=13,Vt=14,Er=15,zi=function(e){for(var A=[],t=0,r=e.length;t<r;){var B=e.charCodeAt(t++);if(B>=55296&&B<=56319&&t<r){var n=e.charCodeAt(t++);(n&64512)===56320?A.push(((B&1023)<<10)+(n&1023)+65536):(A.push(B),t--)}else A.push(B)}return A},$i=function(){for(var e=[],A=0;A<arguments.length;A++)e[A]=arguments[A];if(String.fromCodePoint)return String.fromCodePoint.apply(String,e);var t=e.length;if(!t)return\"\";for(var r=[],B=-1,n=\"\";++B<t;){var s=e[B];s<=65535?r.push(s):(s-=65536,r.push((s>>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},Ao=Yi(bi),z=\"×\",Hr=\"÷\",eo=function(e){return Ao.get(e)},ro=function(e,A,t){var r=t-2,B=A[r],n=A[t-1],s=A[t];if(n===Ur&&s===Fr)return z;if(n===Ur||n===Fr||n===Tt||s===Ur||s===Fr||s===Tt)return Hr;if(n===Ot&&[Ot,hr,Mt,Gt].indexOf(s)!==-1||(n===Mt||n===hr)&&(s===hr||s===dr)||(n===Gt||n===dr)&&s===dr||s===Rt||s===St||s===ji||n===qi)return z;if(n===Rt&&s===Vt){for(;B===St;)B=A[--r];if(B===Vt)return z}if(n===Er&&s===Er){for(var i=0;B===Er;)i++,B=A[--r];if(i%2===0)return z}return Hr},to=function(e){var A=zi(e),t=A.length,r=0,B=0,n=A.map(eo);return{next:function(){if(r>=t)return{done:!0,value:null};for(var s=z;r<t&&(s=ro(A,n,++r))===z;);if(s!==z||r===t){var i=$i.apply(null,A.slice(B,r));return B=r,{value:i,done:!1}}return{done:!0,value:null}}}},Bo=function(e){for(var A=to(e),t=[],r;!(r=A.next()).done;)r.value&&t.push(r.value.slice());return t},no=function(e){var A=123;if(e.createRange){var t=e.createRange();if(t.getBoundingClientRect){var r=e.createElement(\"boundtest\");r.style.height=A+\"px\",r.style.display=\"block\",e.body.appendChild(r),t.selectNode(r);var B=t.getBoundingClientRect(),n=Math.round(B.height);if(e.body.removeChild(r),n===A)return!0}}return!1},so=function(e){var A=e.createElement(\"boundtest\");A.style.width=\"50px\",A.style.display=\"block\",A.style.fontSize=\"12px\",A.style.letterSpacing=\"0px\",A.style.wordSpacing=\"0px\",e.body.appendChild(A);var t=e.createRange();A.innerHTML=typeof\"\".repeat==\"function\"?\"&#128104;\".repeat(10):\"\";var r=A.firstChild,B=$e(r.data).map(function(a){return S(a)}),n=0,s={},i=B.every(function(a,o){t.setStart(r,n),t.setEnd(r,n+a.length);var Q=t.getBoundingClientRect();n+=a.length;var g=Q.x>s.x||Q.y>s.y;return s=Q,o===0?!0:g});return e.body.removeChild(A),i},ao=function(){return typeof new Image().crossOrigin<\"u\"},io=function(){return typeof new XMLHttpRequest().responseType==\"string\"},oo=function(e){var A=new Image,t=e.createElement(\"canvas\"),r=t.getContext(\"2d\");if(!r)return!1;A.src=\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";try{r.drawImage(A,0,0),t.toDataURL()}catch{return!1}return!0},Nt=function(e){return e[0]===0&&e[1]===255&&e[2]===0&&e[3]===255},Qo=function(e){var A=e.createElement(\"canvas\"),t=100;A.width=t,A.height=t;var r=A.getContext(\"2d\");if(!r)return Promise.reject(!1);r.fillStyle=\"rgb(0, 255, 0)\",r.fillRect(0,0,t,t);var B=new Image,n=A.toDataURL();B.src=n;var s=Pr(t,t,0,0,B);return r.fillStyle=\"red\",r.fillRect(0,0,t,t),Xt(s).then(function(i){r.drawImage(i,0,0);var a=r.getImageData(0,0,t,t).data;r.fillStyle=\"red\",r.fillRect(0,0,t,t);var o=e.createElement(\"div\");return o.style.backgroundImage=\"url(\"+n+\")\",o.style.height=t+\"px\",Nt(a)?Xt(Pr(t,t,0,0,o)):Promise.reject(!1)}).then(function(i){return r.drawImage(i,0,0),Nt(r.getImageData(0,0,t,t).data)}).catch(function(){return!1})},Pr=function(e,A,t,r,B){var n=\"http://www.w3.org/2000/svg\",s=document.createElementNS(n,\"svg\"),i=document.createElementNS(n,\"foreignObject\");return s.setAttributeNS(null,\"width\",e.toString()),s.setAttributeNS(null,\"height\",A.toString()),i.setAttributeNS(null,\"width\",\"100%\"),i.setAttributeNS(null,\"height\",\"100%\"),i.setAttributeNS(null,\"x\",t.toString()),i.setAttributeNS(null,\"y\",r.toString()),i.setAttributeNS(null,\"externalResourcesRequired\",\"true\"),s.appendChild(i),i.appendChild(B),s},Xt=function(e){return new Promise(function(A,t){var r=new Image;r.onload=function(){return A(r)},r.onerror=t,r.src=\"data:image/svg+xml;charset=utf-8,\"+encodeURIComponent(new XMLSerializer().serializeToString(e))})},N={get SUPPORT_RANGE_BOUNDS(){var e=no(document);return Object.defineProperty(N,\"SUPPORT_RANGE_BOUNDS\",{value:e}),e},get SUPPORT_WORD_BREAKING(){var e=N.SUPPORT_RANGE_BOUNDS&&so(document);return Object.defineProperty(N,\"SUPPORT_WORD_BREAKING\",{value:e}),e},get SUPPORT_SVG_DRAWING(){var e=oo(document);return Object.defineProperty(N,\"SUPPORT_SVG_DRAWING\",{value:e}),e},get SUPPORT_FOREIGNOBJECT_DRAWING(){var e=typeof Array.from==\"function\"&&typeof window.fetch==\"function\"?Qo(document):Promise.resolve(!1);return Object.defineProperty(N,\"SUPPORT_FOREIGNOBJECT_DRAWING\",{value:e}),e},get SUPPORT_CORS_IMAGES(){var e=ao();return Object.defineProperty(N,\"SUPPORT_CORS_IMAGES\",{value:e}),e},get SUPPORT_RESPONSE_TYPE(){var e=io();return Object.defineProperty(N,\"SUPPORT_RESPONSE_TYPE\",{value:e}),e},get SUPPORT_CORS_XHR(){var e=\"withCredentials\"in new XMLHttpRequest;return Object.defineProperty(N,\"SUPPORT_CORS_XHR\",{value:e}),e},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){var e=!!(typeof Intl<\"u\"&&Intl.Segmenter);return Object.defineProperty(N,\"SUPPORT_NATIVE_TEXT_SEGMENTATION\",{value:e}),e}},ie=(function(){function e(A,t){this.text=A,this.bounds=t}return e})(),go=function(e,A,t,r){var B=Co(A,t),n=[],s=0;return B.forEach(function(i){if(t.textDecorationLine.length||i.trim().length>0)if(N.SUPPORT_RANGE_BOUNDS){var a=_t(r,s,i.length).getClientRects();if(a.length>1){var o=rt(i),Q=0;o.forEach(function(w){n.push(new ie(w,cA.fromDOMRectList(e,_t(r,Q+s,w.length).getClientRects()))),Q+=w.length})}else n.push(new ie(i,cA.fromDOMRectList(e,a)))}else{var g=r.splitText(i.length);n.push(new ie(i,wo(e,r))),r=g}else N.SUPPORT_RANGE_BOUNDS||(r=r.splitText(i.length));s+=i.length}),n},wo=function(e,A){var t=A.ownerDocument;if(t){var r=t.createElement(\"html2canvaswrapper\");r.appendChild(A.cloneNode(!0));var B=A.parentNode;if(B){B.replaceChild(r,A);var n=ze(e,r);return r.firstChild&&B.replaceChild(r.firstChild,r),n}}return cA.EMPTY},_t=function(e,A,t){var r=e.ownerDocument;if(!r)throw new Error(\"Node has no owner document\");var B=r.createRange();return B.setStart(e,A),B.setEnd(e,A+t),B},rt=function(e){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var A=new Intl.Segmenter(void 0,{granularity:\"grapheme\"});return Array.from(A.segment(e)).map(function(t){return t.segment})}return Bo(e)},co=function(e,A){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var t=new Intl.Segmenter(void 0,{granularity:\"word\"});return Array.from(t.segment(e)).map(function(r){return r.segment})}return lo(e,A)},Co=function(e,A){return A.letterSpacing!==0?rt(e):co(e,A)},uo=[32,160,4961,65792,65793,4153,4241],lo=function(e,A){for(var t=_n(e,{lineBreak:A.lineBreak,wordBreak:A.overflowWrap===\"break-word\"?\"break-word\":A.wordBreak}),r=[],B,n=function(){if(B.value){var s=B.value.slice(),i=$e(s),a=\"\";i.forEach(function(o){uo.indexOf(o)===-1?a+=S(o):(a.length&&r.push(a),r.push(S(o)),a=\"\")}),a.length&&r.push(a)}};!(B=t.next()).done;)n();return r},fo=(function(){function e(A,t,r){this.text=Uo(t.data,r.textTransform),this.textBounds=go(A,this.text,r,t)}return e})(),Uo=function(e,A){switch(A){case 1:return e.toLowerCase();case 3:return e.replace(Fo,ho);case 2:return e.toUpperCase();default:return e}},Fo=/(^|\\s|:|-|\\(|\\))([a-z])/g,ho=function(e,A,t){return e.length>0?A+t.toUpperCase():e},GB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.src=r.currentSrc||r.src,B.intrinsicWidth=r.naturalWidth,B.intrinsicHeight=r.naturalHeight,B.context.cache.addImage(B.src),B}return A})(aA),RB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.canvas=r,B.intrinsicWidth=r.width,B.intrinsicHeight=r.height,B}return A})(aA),VB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this,n=new XMLSerializer,s=ze(t,r);return r.setAttribute(\"width\",s.width+\"px\"),r.setAttribute(\"height\",s.height+\"px\"),B.svg=\"data:image/svg+xml,\"+encodeURIComponent(n.serializeToString(r)),B.intrinsicWidth=r.width.baseVal.value,B.intrinsicHeight=r.height.baseVal.value,B.context.cache.addImage(B.svg),B}return A})(aA),NB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.value=r.value,B}return A})(aA),kr=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.start=r.start,B.reversed=typeof r.reversed==\"boolean\"&&r.reversed===!0,B}return A})(aA),Eo=[{type:15,flags:0,unit:\"px\",number:3}],Ho=[{type:16,flags:0,number:50}],po=function(e){return e.width>e.height?new cA(e.left+(e.width-e.height)/2,e.top,e.height,e.height):e.width<e.height?new cA(e.left,e.top+(e.height-e.width)/2,e.width,e.width):e},Io=function(e){var A=e.type===vo?new Array(e.value.length+1).join(\"•\"):e.value;return A.length===0?e.placeholder||\"\":A},Pe=\"checkbox\",ke=\"radio\",vo=\"password\",Jt=707406591,tt=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;switch(B.type=r.type.toLowerCase(),B.checked=r.checked,B.value=Io(r),(B.type===Pe||B.type===ke)&&(B.styles.backgroundColor=3739148031,B.styles.borderTopColor=B.styles.borderRightColor=B.styles.borderBottomColor=B.styles.borderLeftColor=2779096575,B.styles.borderTopWidth=B.styles.borderRightWidth=B.styles.borderBottomWidth=B.styles.borderLeftWidth=1,B.styles.borderTopStyle=B.styles.borderRightStyle=B.styles.borderBottomStyle=B.styles.borderLeftStyle=1,B.styles.backgroundClip=[0],B.styles.backgroundOrigin=[0],B.bounds=po(B.bounds)),B.type){case Pe:B.styles.borderTopRightRadius=B.styles.borderTopLeftRadius=B.styles.borderBottomRightRadius=B.styles.borderBottomLeftRadius=Eo;break;case ke:B.styles.borderTopRightRadius=B.styles.borderTopLeftRadius=B.styles.borderBottomRightRadius=B.styles.borderBottomLeftRadius=Ho;break}return B}return A})(aA),XB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this,n=r.options[r.selectedIndex||0];return B.value=n&&n.text||\"\",B}return A})(aA),_B=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.value=r.value,B}return A})(aA),JB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;B.src=r.src,B.width=parseInt(r.width,10)||0,B.height=parseInt(r.height,10)||0,B.backgroundColor=B.styles.backgroundColor;try{if(r.contentWindow&&r.contentWindow.document&&r.contentWindow.document.documentElement){B.tree=kB(t,r.contentWindow.document.documentElement);var n=r.contentWindow.document.documentElement?se(t,getComputedStyle(r.contentWindow.document.documentElement).backgroundColor):wA.TRANSPARENT,s=r.contentWindow.document.body?se(t,getComputedStyle(r.contentWindow.document.body).backgroundColor):wA.TRANSPARENT;B.backgroundColor=HA(n)?HA(s)?B.styles.backgroundColor:s:n}}catch{}return B}return A})(aA),yo=[\"OL\",\"UL\",\"MENU\"],Ve=function(e,A,t,r){for(var B=A.firstChild,n=void 0;B;B=n)if(n=B.nextSibling,YB(B)&&B.data.trim().length>0)t.textNodes.push(new fo(e,B,t.styles));else if(_A(B))if(jB(B)&&B.assignedNodes)B.assignedNodes().forEach(function(i){return Ve(e,i,t,r)});else{var s=PB(e,B);s.styles.isVisible()&&(Ko(B,s,r)?s.flags|=4:mo(s.styles)&&(s.flags|=2),yo.indexOf(B.tagName)!==-1&&(s.flags|=8),t.elements.push(s),B.slot,B.shadowRoot?Ve(e,B.shadowRoot,s,r):!Ye(B)&&!WB(B)&&!We(B)&&Ve(e,B,s,r))}},PB=function(e,A){return Wr(A)?new GB(e,A):ZB(A)?new RB(e,A):WB(A)?new VB(e,A):Lo(A)?new NB(e,A):Do(A)?new kr(e,A):bo(A)?new tt(e,A):We(A)?new XB(e,A):Ye(A)?new _B(e,A):qB(A)?new JB(e,A):new aA(e,A)},kB=function(e,A){var t=PB(e,A);return t.flags|=4,Ve(e,A,t,t),t},Ko=function(e,A,t){return A.styles.isPositionedWithZIndex()||A.styles.opacity<1||A.styles.isTransformed()||Bt(e)&&t.styles.isTransparent()},mo=function(e){return e.isPositioned()||e.isFloating()},YB=function(e){return e.nodeType===Node.TEXT_NODE},_A=function(e){return e.nodeType===Node.ELEMENT_NODE},Yr=function(e){return _A(e)&&typeof e.style<\"u\"&&!Ne(e)},Ne=function(e){return typeof e.className==\"object\"},Lo=function(e){return e.tagName===\"LI\"},Do=function(e){return e.tagName===\"OL\"},bo=function(e){return e.tagName===\"INPUT\"},xo=function(e){return e.tagName===\"HTML\"},WB=function(e){return e.tagName===\"svg\"},Bt=function(e){return e.tagName===\"BODY\"},ZB=function(e){return e.tagName===\"CANVAS\"},Pt=function(e){return e.tagName===\"VIDEO\"},Wr=function(e){return e.tagName===\"IMG\"},qB=function(e){return e.tagName===\"IFRAME\"},kt=function(e){return e.tagName===\"STYLE\"},To=function(e){return e.tagName===\"SCRIPT\"},Ye=function(e){return e.tagName===\"TEXTAREA\"},We=function(e){return e.tagName===\"SELECT\"},jB=function(e){return e.tagName===\"SLOT\"},Yt=function(e){return e.tagName.indexOf(\"-\")>0},So=(function(){function e(){this.counters={}}return e.prototype.getCounterValue=function(A){var t=this.counters[A];return t&&t.length?t[t.length-1]:1},e.prototype.getCounterValues=function(A){var t=this.counters[A];return t||[]},e.prototype.pop=function(A){var t=this;A.forEach(function(r){return t.counters[r].pop()})},e.prototype.parse=function(A){var t=this,r=A.counterIncrement,B=A.counterReset,n=!0;r!==null&&r.forEach(function(i){var a=t.counters[i.counter];a&&i.increment!==0&&(n=!1,a.length||a.push(1),a[Math.max(0,a.length-1)]+=i.increment)});var s=[];return n&&B.forEach(function(i){var a=t.counters[i.counter];s.push(i.counter),a||(a=t.counters[i.counter]=[]),a.push(i.reset)}),s},e})(),Wt={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[\"M\",\"CM\",\"D\",\"CD\",\"C\",\"XC\",\"L\",\"XL\",\"X\",\"IX\",\"V\",\"IV\",\"I\"]},Zt={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"Ք\",\"Փ\",\"Ւ\",\"Ց\",\"Ր\",\"Տ\",\"Վ\",\"Ս\",\"Ռ\",\"Ջ\",\"Պ\",\"Չ\",\"Ո\",\"Շ\",\"Ն\",\"Յ\",\"Մ\",\"Ճ\",\"Ղ\",\"Ձ\",\"Հ\",\"Կ\",\"Ծ\",\"Խ\",\"Լ\",\"Ի\",\"Ժ\",\"Թ\",\"Ը\",\"Է\",\"Զ\",\"Ե\",\"Դ\",\"Գ\",\"Բ\",\"Ա\"]},Oo={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:[\"י׳\",\"ט׳\",\"ח׳\",\"ז׳\",\"ו׳\",\"ה׳\",\"ד׳\",\"ג׳\",\"ב׳\",\"א׳\",\"ת\",\"ש\",\"ר\",\"ק\",\"צ\",\"פ\",\"ע\",\"ס\",\"נ\",\"מ\",\"ל\",\"כ\",\"יט\",\"יח\",\"יז\",\"טז\",\"טו\",\"י\",\"ט\",\"ח\",\"ז\",\"ו\",\"ה\",\"ד\",\"ג\",\"ב\",\"א\"]},Mo={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"ჵ\",\"ჰ\",\"ჯ\",\"ჴ\",\"ხ\",\"ჭ\",\"წ\",\"ძ\",\"ც\",\"ჩ\",\"შ\",\"ყ\",\"ღ\",\"ქ\",\"ფ\",\"ჳ\",\"ტ\",\"ს\",\"რ\",\"ჟ\",\"პ\",\"ო\",\"ჲ\",\"ნ\",\"მ\",\"ლ\",\"კ\",\"ი\",\"თ\",\"ჱ\",\"ზ\",\"ვ\",\"ე\",\"დ\",\"გ\",\"ბ\",\"ა\"]},GA=function(e,A,t,r,B,n){return e<A||e>t?we(e,B,n.length>0):r.integers.reduce(function(s,i,a){for(;e>=i;)e-=i,s+=r.values[a];return s},\"\")+n},zB=function(e,A,t,r){var B=\"\";do t||e--,B=r(e)+B,e/=A;while(e*A>=A);return B},T=function(e,A,t,r,B){var n=t-A+1;return(e<0?\"-\":\"\")+(zB(Math.abs(e),n,r,function(s){return S(Math.floor(s%n)+A)})+B)},mA=function(e,A,t){t===void 0&&(t=\". \");var r=A.length;return zB(Math.abs(e),r,!1,function(B){return A[Math.floor(B%r)]})+t},NA=1,lA=2,fA=4,Be=8,gA=function(e,A,t,r,B,n){if(e<-9999||e>9999)return we(e,4,B.length>0);var s=Math.abs(e),i=B;if(s===0)return A[0]+i;for(var a=0;s>0&&a<=4;a++){var o=s%10;o===0&&G(n,NA)&&i!==\"\"?i=A[o]+i:o>1||o===1&&a===0||o===1&&a===1&&G(n,lA)||o===1&&a===1&&G(n,fA)&&e>100||o===1&&a>1&&G(n,Be)?i=A[o]+(a>0?t[a-1]:\"\")+i:o===1&&a>0&&(i=t[a-1]+i),s=Math.floor(s/10)}return(e<0?r:\"\")+i},qt=\"十百千萬\",jt=\"拾佰仟萬\",zt=\"マイナス\",pr=\"마이너스\",we=function(e,A,t){var r=t?\". \":\"\",B=t?\"、\":\"\",n=t?\", \":\"\",s=t?\" \":\"\";switch(A){case 0:return\"•\"+s;case 1:return\"◦\"+s;case 2:return\"◾\"+s;case 5:var i=T(e,48,57,!0,r);return i.length<4?\"0\"+i:i;case 4:return mA(e,\"〇一二三四五六七八九\",B);case 6:return GA(e,1,3999,Wt,3,r).toLowerCase();case 7:return GA(e,1,3999,Wt,3,r);case 8:return T(e,945,969,!1,r);case 9:return T(e,97,122,!1,r);case 10:return T(e,65,90,!1,r);case 11:return T(e,1632,1641,!0,r);case 12:case 49:return GA(e,1,9999,Zt,3,r);case 35:return GA(e,1,9999,Zt,3,r).toLowerCase();case 13:return T(e,2534,2543,!0,r);case 14:case 30:return T(e,6112,6121,!0,r);case 15:return mA(e,\"子丑寅卯辰巳午未申酉戌亥\",B);case 16:return mA(e,\"甲乙丙丁戊己庚辛壬癸\",B);case 17:case 48:return gA(e,\"零一二三四五六七八九\",qt,\"負\",B,lA|fA|Be);case 47:return gA(e,\"零壹貳參肆伍陸柒捌玖\",jt,\"負\",B,NA|lA|fA|Be);case 42:return gA(e,\"零一二三四五六七八九\",qt,\"负\",B,lA|fA|Be);case 41:return gA(e,\"零壹贰叁肆伍陆柒捌玖\",jt,\"负\",B,NA|lA|fA|Be);case 26:return gA(e,\"〇一二三四五六七八九\",\"十百千万\",zt,B,0);case 25:return gA(e,\"零壱弐参四伍六七八九\",\"拾百千万\",zt,B,NA|lA|fA);case 31:return gA(e,\"영일이삼사오육칠팔구\",\"십백천만\",pr,n,NA|lA|fA);case 33:return gA(e,\"零一二三四五六七八九\",\"十百千萬\",pr,n,0);case 32:return gA(e,\"零壹貳參四五六七八九\",\"拾百千\",pr,n,NA|lA|fA);case 18:return T(e,2406,2415,!0,r);case 20:return GA(e,1,19999,Mo,3,r);case 21:return T(e,2790,2799,!0,r);case 22:return T(e,2662,2671,!0,r);case 22:return GA(e,1,10999,Oo,3,r);case 23:return mA(e,\"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん\");case 24:return mA(e,\"いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす\");case 27:return T(e,3302,3311,!0,r);case 28:return mA(e,\"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン\",B);case 29:return mA(e,\"イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス\",B);case 34:return T(e,3792,3801,!0,r);case 37:return T(e,6160,6169,!0,r);case 38:return T(e,4160,4169,!0,r);case 39:return T(e,2918,2927,!0,r);case 40:return T(e,1776,1785,!0,r);case 43:return T(e,3046,3055,!0,r);case 44:return T(e,3174,3183,!0,r);case 45:return T(e,3664,3673,!0,r);case 46:return T(e,3872,3881,!0,r);default:return T(e,48,57,!0,r)}},$B=\"data-html2canvas-ignore\",$t=(function(){function e(A,t,r){if(this.context=A,this.options=r,this.scrolledElements=[],this.referenceElement=t,this.counters=new So,this.quoteDepth=0,!t.ownerDocument)throw new Error(\"Cloned element does not have an owner document\");this.documentElement=this.cloneNode(t.ownerDocument.documentElement,!1)}return e.prototype.toIFrame=function(A,t){var r=this,B=Go(A,t);if(!B.contentWindow)return Promise.reject(\"Unable to find iframe window\");var n=A.defaultView.pageXOffset,s=A.defaultView.pageYOffset,i=B.contentWindow,a=i.document,o=No(B).then(function(){return P(r,void 0,void 0,function(){var Q,g;return _(this,function(w){switch(w.label){case 0:return this.scrolledElements.forEach(Po),i&&(i.scrollTo(t.left,t.top),/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&(i.scrollY!==t.top||i.scrollX!==t.left)&&(this.context.logger.warn(\"Unable to restore scroll position for cloned document\"),this.context.windowBounds=this.context.windowBounds.add(i.scrollX-t.left,i.scrollY-t.top,0,0))),Q=this.options.onclone,g=this.clonedReferenceElement,typeof g>\"u\"?[2,Promise.reject(\"Error finding the \"+this.referenceElement.nodeName+\" in the cloned document\")]:a.fonts&&a.fonts.ready?[4,a.fonts.ready]:[3,2];case 1:w.sent(),w.label=2;case 2:return/(AppleWebKit)/g.test(navigator.userAgent)?[4,Vo(a)]:[3,4];case 3:w.sent(),w.label=4;case 4:return typeof Q==\"function\"?[2,Promise.resolve().then(function(){return Q(a,g)}).then(function(){return B})]:[2,B]}})})});return a.open(),a.write(_o(document.doctype)+\"<html></html>\"),Jo(this.referenceElement.ownerDocument,n,s),a.replaceChild(a.adoptNode(this.documentElement),a.documentElement),a.close(),o},e.prototype.createElementClone=function(A){if(Jr(A,2))debugger;if(ZB(A))return this.createCanvasClone(A);if(Pt(A))return this.createVideoClone(A);if(kt(A))return this.createStyleClone(A);var t=A.cloneNode(!1);return Wr(t)&&(Wr(A)&&A.currentSrc&&A.currentSrc!==A.src&&(t.src=A.currentSrc,t.srcset=\"\"),t.loading===\"lazy\"&&(t.loading=\"eager\")),Yt(t)?this.createCustomElementClone(t):t},e.prototype.createCustomElementClone=function(A){var t=document.createElement(\"html2canvascustomelement\");return Ir(A.style,t),t},e.prototype.createStyleClone=function(A){try{var t=A.sheet;if(t&&t.cssRules){var r=[].slice.call(t.cssRules,0).reduce(function(n,s){return s&&typeof s.cssText==\"string\"?n+s.cssText:n},\"\"),B=A.cloneNode(!1);return B.textContent=r,B}}catch(n){if(this.context.logger.error(\"Unable to access cssRules property\",n),n.name!==\"SecurityError\")throw n}return A.cloneNode(!1)},e.prototype.createCanvasClone=function(A){var t;if(this.options.inlineImages&&A.ownerDocument){var r=A.ownerDocument.createElement(\"img\");try{return r.src=A.toDataURL(),r}catch{this.context.logger.info(\"Unable to inline canvas contents, canvas is tainted\",A)}}var B=A.cloneNode(!1);try{B.width=A.width,B.height=A.height;var n=A.getContext(\"2d\"),s=B.getContext(\"2d\");if(s)if(!this.options.allowTaint&&n)s.putImageData(n.getImageData(0,0,A.width,A.height),0,0);else{var i=(t=A.getContext(\"webgl2\"))!==null&&t!==void 0?t:A.getContext(\"webgl\");if(i){var a=i.getContextAttributes();a?.preserveDrawingBuffer===!1&&this.context.logger.warn(\"Unable to clone WebGL context as it has preserveDrawingBuffer=false\",A)}s.drawImage(A,0,0)}return B}catch{this.context.logger.info(\"Unable to clone canvas as it is tainted\",A)}return B},e.prototype.createVideoClone=function(A){var t=A.ownerDocument.createElement(\"canvas\");t.width=A.offsetWidth,t.height=A.offsetHeight;var r=t.getContext(\"2d\");try{return r&&(r.drawImage(A,0,0,t.width,t.height),this.options.allowTaint||r.getImageData(0,0,t.width,t.height)),t}catch{this.context.logger.info(\"Unable to clone video as it is tainted\",A)}var B=A.ownerDocument.createElement(\"canvas\");return B.width=A.offsetWidth,B.height=A.offsetHeight,B},e.prototype.appendChildNode=function(A,t,r){(!_A(t)||!To(t)&&!t.hasAttribute($B)&&(typeof this.options.ignoreElements!=\"function\"||!this.options.ignoreElements(t)))&&(!this.options.copyStyles||!_A(t)||!kt(t))&&A.appendChild(this.cloneNode(t,r))},e.prototype.cloneChildNodes=function(A,t,r){for(var B=this,n=A.shadowRoot?A.shadowRoot.firstChild:A.firstChild;n;n=n.nextSibling)if(_A(n)&&jB(n)&&typeof n.assignedNodes==\"function\"){var s=n.assignedNodes();s.length&&s.forEach(function(i){return B.appendChildNode(t,i,r)})}else this.appendChildNode(t,n,r)},e.prototype.cloneNode=function(A,t){if(YB(A))return document.createTextNode(A.data);if(!A.ownerDocument)return A.cloneNode(!1);var r=A.ownerDocument.defaultView;if(r&&_A(A)&&(Yr(A)||Ne(A))){var B=this.createElementClone(A);B.style.transitionProperty=\"none\";var n=r.getComputedStyle(A),s=r.getComputedStyle(A,\":before\"),i=r.getComputedStyle(A,\":after\");this.referenceElement===A&&Yr(B)&&(this.clonedReferenceElement=B),Bt(B)&&Wo(B);var a=this.counters.parse(new Lt(this.context,n)),o=this.resolvePseudoContent(A,B,s,oe.BEFORE);Yt(A)&&(t=!0),Pt(A)||this.cloneChildNodes(A,B,t),o&&B.insertBefore(o,B.firstChild);var Q=this.resolvePseudoContent(A,B,i,oe.AFTER);return Q&&B.appendChild(Q),this.counters.pop(a),(n&&(this.options.copyStyles||Ne(A))&&!qB(A)||t)&&Ir(n,B),(A.scrollTop!==0||A.scrollLeft!==0)&&this.scrolledElements.push([B,A.scrollLeft,A.scrollTop]),(Ye(A)||We(A))&&(Ye(B)||We(B))&&(B.value=A.value),B}return A.cloneNode(!1)},e.prototype.resolvePseudoContent=function(A,t,r,B){var n=this;if(r){var s=r.content,i=t.ownerDocument;if(!(!i||!s||s===\"none\"||s===\"-moz-alt-content\"||r.display===\"none\")){this.counters.parse(new Lt(this.context,r));var a=new mi(this.context,r),o=i.createElement(\"html2canvaspseudoelement\");Ir(r,o),a.content.forEach(function(g){if(g.type===0)o.appendChild(i.createTextNode(g.value));else if(g.type===22){var w=i.createElement(\"img\");w.src=g.value,w.style.opacity=\"1\",o.appendChild(w)}else if(g.type===18){if(g.name===\"attr\"){var f=g.values.filter(D);f.length&&o.appendChild(i.createTextNode(A.getAttribute(f[0].value)||\"\"))}else if(g.name===\"counter\"){var c=g.values.filter(PA),C=c[0],H=c[1];if(C&&D(C)){var h=n.counters.getCounterValue(C.value),F=H&&D(H)?_r.parse(n.context,H.value):3;o.appendChild(i.createTextNode(we(h,F,!1)))}}else if(g.name===\"counters\"){var K=g.values.filter(PA),C=K[0],p=K[1],H=K[2];if(C&&D(C)){var d=n.counters.getCounterValues(C.value),l=H&&D(H)?_r.parse(n.context,H.value):3,v=p&&p.type===0?p.value:\"\",y=d.map(function(k){return we(k,l,!1)}).join(v);o.appendChild(i.createTextNode(y))}}}else if(g.type===20)switch(g.value){case\"open-quote\":o.appendChild(i.createTextNode(mt(a.quotes,n.quoteDepth++,!0)));break;case\"close-quote\":o.appendChild(i.createTextNode(mt(a.quotes,--n.quoteDepth,!1)));break;default:o.appendChild(i.createTextNode(g.value))}}),o.className=Zr+\" \"+qr;var Q=B===oe.BEFORE?\" \"+Zr:\" \"+qr;return Ne(t)?t.className.baseValue+=Q:t.className+=Q,o}}},e.destroy=function(A){return A.parentNode?(A.parentNode.removeChild(A),!0):!1},e})(),oe;(function(e){e[e.BEFORE=0]=\"BEFORE\",e[e.AFTER=1]=\"AFTER\"})(oe||(oe={}));var Go=function(e,A){var t=e.createElement(\"iframe\");return t.className=\"html2canvas-container\",t.style.visibility=\"hidden\",t.style.position=\"fixed\",t.style.left=\"-10000px\",t.style.top=\"0px\",t.style.border=\"0\",t.width=A.width.toString(),t.height=A.height.toString(),t.scrolling=\"no\",t.setAttribute($B,\"true\"),e.body.appendChild(t),t},Ro=function(e){return new Promise(function(A){if(e.complete){A();return}if(!e.src){A();return}e.onload=A,e.onerror=A})},Vo=function(e){return Promise.all([].slice.call(e.images,0).map(Ro))},No=function(e){return new Promise(function(A,t){var r=e.contentWindow;if(!r)return t(\"No window assigned for iframe\");var B=r.document;r.onload=e.onload=function(){r.onload=e.onload=null;var n=setInterval(function(){B.body.childNodes.length>0&&B.readyState===\"complete\"&&(clearInterval(n),A(e))},50)}})},Xo=[\"all\",\"d\",\"content\"],Ir=function(e,A){for(var t=e.length-1;t>=0;t--){var r=e.item(t);Xo.indexOf(r)===-1&&A.style.setProperty(r,e.getPropertyValue(r))}return A},_o=function(e){var A=\"\";return e&&(A+=\"<!DOCTYPE \",e.name&&(A+=e.name),e.internalSubset&&(A+=e.internalSubset),e.publicId&&(A+='\"'+e.publicId+'\"'),e.systemId&&(A+='\"'+e.systemId+'\"'),A+=\">\"),A},Jo=function(e,A,t){e&&e.defaultView&&(A!==e.defaultView.pageXOffset||t!==e.defaultView.pageYOffset)&&e.defaultView.scrollTo(A,t)},Po=function(e){var A=e[0],t=e[1],r=e[2];A.scrollLeft=t,A.scrollTop=r},ko=\":before\",Yo=\":after\",Zr=\"___html2canvas___pseudoelement_before\",qr=\"___html2canvas___pseudoelement_after\",AB=`{\n    content: \"\" !important;\n    display: none !important;\n}`,Wo=function(e){Zo(e,\".\"+Zr+ko+AB+`\n         .`+qr+Yo+AB)},Zo=function(e,A){var t=e.ownerDocument;if(t){var r=t.createElement(\"style\");r.textContent=A,e.appendChild(r)}},An=(function(){function e(){}return e.getOrigin=function(A){var t=e._link;return t?(t.href=A,t.href=t.href,t.protocol+t.hostname+t.port):\"about:blank\"},e.isSameOrigin=function(A){return e.getOrigin(A)===e._origin},e.setContext=function(A){e._link=A.document.createElement(\"a\"),e._origin=e.getOrigin(A.location.href)},e._origin=\"about:blank\",e})(),qo=(function(){function e(A,t){this.context=A,this._options=t,this._cache={}}return e.prototype.addImage=function(A){var t=Promise.resolve();return this.has(A)||(yr(A)||AQ(A))&&(this._cache[A]=this.loadImage(A)).catch(function(){}),t},e.prototype.match=function(A){return this._cache[A]},e.prototype.loadImage=function(A){return P(this,void 0,void 0,function(){var t,r,B,n,s=this;return _(this,function(i){switch(i.label){case 0:return t=An.isSameOrigin(A),r=!vr(A)&&this._options.useCORS===!0&&N.SUPPORT_CORS_IMAGES&&!t,B=!vr(A)&&!t&&!yr(A)&&typeof this._options.proxy==\"string\"&&N.SUPPORT_CORS_XHR&&!r,!t&&this._options.allowTaint===!1&&!vr(A)&&!yr(A)&&!B&&!r?[2]:(n=A,B?[4,this.proxy(n)]:[3,2]);case 1:n=i.sent(),i.label=2;case 2:return this.context.logger.debug(\"Added image \"+A.substring(0,256)),[4,new Promise(function(a,o){var Q=new Image;Q.onload=function(){return a(Q)},Q.onerror=o,(eQ(n)||r)&&(Q.crossOrigin=\"anonymous\"),Q.src=n,Q.complete===!0&&setTimeout(function(){return a(Q)},500),s._options.imageTimeout>0&&setTimeout(function(){return o(\"Timed out (\"+s._options.imageTimeout+\"ms) loading image\")},s._options.imageTimeout)})];case 3:return[2,i.sent()]}})})},e.prototype.has=function(A){return typeof this._cache[A]<\"u\"},e.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},e.prototype.proxy=function(A){var t=this,r=this._options.proxy;if(!r)throw new Error(\"No proxy defined\");var B=A.substring(0,256);return new Promise(function(n,s){var i=N.SUPPORT_RESPONSE_TYPE?\"blob\":\"text\",a=new XMLHttpRequest;a.onload=function(){if(a.status===200)if(i===\"text\")n(a.response);else{var g=new FileReader;g.addEventListener(\"load\",function(){return n(g.result)},!1),g.addEventListener(\"error\",function(w){return s(w)},!1),g.readAsDataURL(a.response)}else s(\"Failed to proxy resource \"+B+\" with status code \"+a.status)},a.onerror=s;var o=r.indexOf(\"?\")>-1?\"&\":\"?\";if(a.open(\"GET\",\"\"+r+o+\"url=\"+encodeURIComponent(A)+\"&responseType=\"+i),i!==\"text\"&&a instanceof XMLHttpRequest&&(a.responseType=i),t._options.imageTimeout){var Q=t._options.imageTimeout;a.timeout=Q,a.ontimeout=function(){return s(\"Timed out (\"+Q+\"ms) proxying \"+B)}}a.send()})},e})(),jo=/^data:image\\/svg\\+xml/i,zo=/^data:image\\/.*;base64,/i,$o=/^data:image\\/.*/i,AQ=function(e){return N.SUPPORT_SVG_DRAWING||!rQ(e)},vr=function(e){return $o.test(e)},eQ=function(e){return zo.test(e)},yr=function(e){return e.substr(0,4)===\"blob\"},rQ=function(e){return e.substr(-3).toLowerCase()===\"svg\"||jo.test(e)},u=(function(){function e(A,t){this.type=0,this.x=A,this.y=t}return e.prototype.add=function(A,t){return new e(this.x+A,this.y+t)},e})(),RA=function(e,A,t){return new u(e.x+(A.x-e.x)*t,e.y+(A.y-e.y)*t)},Te=(function(){function e(A,t,r,B){this.type=1,this.start=A,this.startControl=t,this.endControl=r,this.end=B}return e.prototype.subdivide=function(A,t){var r=RA(this.start,this.startControl,A),B=RA(this.startControl,this.endControl,A),n=RA(this.endControl,this.end,A),s=RA(r,B,A),i=RA(B,n,A),a=RA(s,i,A);return t?new e(this.start,r,s,a):new e(a,i,n,this.end)},e.prototype.add=function(A,t){return new e(this.start.add(A,t),this.startControl.add(A,t),this.endControl.add(A,t),this.end.add(A,t))},e.prototype.reverse=function(){return new e(this.end,this.endControl,this.startControl,this.start)},e})(),$=function(e){return e.type===1},tQ=(function(){function e(A){var t=A.styles,r=A.bounds,B=re(t.borderTopLeftRadius,r.width,r.height),n=B[0],s=B[1],i=re(t.borderTopRightRadius,r.width,r.height),a=i[0],o=i[1],Q=re(t.borderBottomRightRadius,r.width,r.height),g=Q[0],w=Q[1],f=re(t.borderBottomLeftRadius,r.width,r.height),c=f[0],C=f[1],H=[];H.push((n+a)/r.width),H.push((c+g)/r.width),H.push((s+C)/r.height),H.push((o+w)/r.height);var h=Math.max.apply(Math,H);h>1&&(n/=h,s/=h,a/=h,o/=h,g/=h,w/=h,c/=h,C/=h);var F=r.width-a,K=r.height-w,p=r.width-g,d=r.height-C,l=t.borderTopWidth,v=t.borderRightWidth,y=t.borderBottomWidth,E=t.borderLeftWidth,O=b(t.paddingTop,A.bounds.width),k=b(t.paddingRight,A.bounds.width),q=b(t.paddingBottom,A.bounds.width),L=b(t.paddingLeft,A.bounds.width);this.topLeftBorderDoubleOuterBox=n>0||s>0?x(r.left+E/3,r.top+l/3,n-E/3,s-l/3,m.TOP_LEFT):new u(r.left+E/3,r.top+l/3),this.topRightBorderDoubleOuterBox=n>0||s>0?x(r.left+F,r.top+l/3,a-v/3,o-l/3,m.TOP_RIGHT):new u(r.left+r.width-v/3,r.top+l/3),this.bottomRightBorderDoubleOuterBox=g>0||w>0?x(r.left+p,r.top+K,g-v/3,w-y/3,m.BOTTOM_RIGHT):new u(r.left+r.width-v/3,r.top+r.height-y/3),this.bottomLeftBorderDoubleOuterBox=c>0||C>0?x(r.left+E/3,r.top+d,c-E/3,C-y/3,m.BOTTOM_LEFT):new u(r.left+E/3,r.top+r.height-y/3),this.topLeftBorderDoubleInnerBox=n>0||s>0?x(r.left+E*2/3,r.top+l*2/3,n-E*2/3,s-l*2/3,m.TOP_LEFT):new u(r.left+E*2/3,r.top+l*2/3),this.topRightBorderDoubleInnerBox=n>0||s>0?x(r.left+F,r.top+l*2/3,a-v*2/3,o-l*2/3,m.TOP_RIGHT):new u(r.left+r.width-v*2/3,r.top+l*2/3),this.bottomRightBorderDoubleInnerBox=g>0||w>0?x(r.left+p,r.top+K,g-v*2/3,w-y*2/3,m.BOTTOM_RIGHT):new u(r.left+r.width-v*2/3,r.top+r.height-y*2/3),this.bottomLeftBorderDoubleInnerBox=c>0||C>0?x(r.left+E*2/3,r.top+d,c-E*2/3,C-y*2/3,m.BOTTOM_LEFT):new u(r.left+E*2/3,r.top+r.height-y*2/3),this.topLeftBorderStroke=n>0||s>0?x(r.left+E/2,r.top+l/2,n-E/2,s-l/2,m.TOP_LEFT):new u(r.left+E/2,r.top+l/2),this.topRightBorderStroke=n>0||s>0?x(r.left+F,r.top+l/2,a-v/2,o-l/2,m.TOP_RIGHT):new u(r.left+r.width-v/2,r.top+l/2),this.bottomRightBorderStroke=g>0||w>0?x(r.left+p,r.top+K,g-v/2,w-y/2,m.BOTTOM_RIGHT):new u(r.left+r.width-v/2,r.top+r.height-y/2),this.bottomLeftBorderStroke=c>0||C>0?x(r.left+E/2,r.top+d,c-E/2,C-y/2,m.BOTTOM_LEFT):new u(r.left+E/2,r.top+r.height-y/2),this.topLeftBorderBox=n>0||s>0?x(r.left,r.top,n,s,m.TOP_LEFT):new u(r.left,r.top),this.topRightBorderBox=a>0||o>0?x(r.left+F,r.top,a,o,m.TOP_RIGHT):new u(r.left+r.width,r.top),this.bottomRightBorderBox=g>0||w>0?x(r.left+p,r.top+K,g,w,m.BOTTOM_RIGHT):new u(r.left+r.width,r.top+r.height),this.bottomLeftBorderBox=c>0||C>0?x(r.left,r.top+d,c,C,m.BOTTOM_LEFT):new u(r.left,r.top+r.height),this.topLeftPaddingBox=n>0||s>0?x(r.left+E,r.top+l,Math.max(0,n-E),Math.max(0,s-l),m.TOP_LEFT):new u(r.left+E,r.top+l),this.topRightPaddingBox=a>0||o>0?x(r.left+Math.min(F,r.width-v),r.top+l,F>r.width+v?0:Math.max(0,a-v),Math.max(0,o-l),m.TOP_RIGHT):new u(r.left+r.width-v,r.top+l),this.bottomRightPaddingBox=g>0||w>0?x(r.left+Math.min(p,r.width-E),r.top+Math.min(K,r.height-y),Math.max(0,g-v),Math.max(0,w-y),m.BOTTOM_RIGHT):new u(r.left+r.width-v,r.top+r.height-y),this.bottomLeftPaddingBox=c>0||C>0?x(r.left+E,r.top+Math.min(d,r.height-y),Math.max(0,c-E),Math.max(0,C-y),m.BOTTOM_LEFT):new u(r.left+E,r.top+r.height-y),this.topLeftContentBox=n>0||s>0?x(r.left+E+L,r.top+l+O,Math.max(0,n-(E+L)),Math.max(0,s-(l+O)),m.TOP_LEFT):new u(r.left+E+L,r.top+l+O),this.topRightContentBox=a>0||o>0?x(r.left+Math.min(F,r.width+E+L),r.top+l+O,F>r.width+E+L?0:a-E+L,o-(l+O),m.TOP_RIGHT):new u(r.left+r.width-(v+k),r.top+l+O),this.bottomRightContentBox=g>0||w>0?x(r.left+Math.min(p,r.width-(E+L)),r.top+Math.min(K,r.height+l+O),Math.max(0,g-(v+k)),w-(y+q),m.BOTTOM_RIGHT):new u(r.left+r.width-(v+k),r.top+r.height-(y+q)),this.bottomLeftContentBox=c>0||C>0?x(r.left+E+L,r.top+d,Math.max(0,c-(E+L)),C-(y+q),m.BOTTOM_LEFT):new u(r.left+E+L,r.top+r.height-(y+q))}return e})(),m;(function(e){e[e.TOP_LEFT=0]=\"TOP_LEFT\",e[e.TOP_RIGHT=1]=\"TOP_RIGHT\",e[e.BOTTOM_RIGHT=2]=\"BOTTOM_RIGHT\",e[e.BOTTOM_LEFT=3]=\"BOTTOM_LEFT\"})(m||(m={}));var x=function(e,A,t,r,B){var n=4*((Math.sqrt(2)-1)/3),s=t*n,i=r*n,a=e+t,o=A+r;switch(B){case m.TOP_LEFT:return new Te(new u(e,o),new u(e,o-i),new u(a-s,A),new u(a,A));case m.TOP_RIGHT:return new Te(new u(e,A),new u(e+s,A),new u(a,o-i),new u(a,o));case m.BOTTOM_RIGHT:return new Te(new u(a,A),new u(a,A+i),new u(e+s,o),new u(e,o));case m.BOTTOM_LEFT:default:return new Te(new u(a,o),new u(a-s,o),new u(e,A+i),new u(e,A))}},Ze=function(e){return[e.topLeftBorderBox,e.topRightBorderBox,e.bottomRightBorderBox,e.bottomLeftBorderBox]},BQ=function(e){return[e.topLeftContentBox,e.topRightContentBox,e.bottomRightContentBox,e.bottomLeftContentBox]},qe=function(e){return[e.topLeftPaddingBox,e.topRightPaddingBox,e.bottomRightPaddingBox,e.bottomLeftPaddingBox]},nQ=(function(){function e(A,t,r){this.offsetX=A,this.offsetY=t,this.matrix=r,this.type=0,this.target=6}return e})(),Se=(function(){function e(A,t){this.path=A,this.target=t,this.type=1}return e})(),sQ=(function(){function e(A){this.opacity=A,this.type=2,this.target=6}return e})(),aQ=function(e){return e.type===0},en=function(e){return e.type===1},iQ=function(e){return e.type===2},eB=function(e,A){return e.length===A.length?e.some(function(t,r){return t===A[r]}):!1},oQ=function(e,A,t,r,B){return e.map(function(n,s){switch(s){case 0:return n.add(A,t);case 1:return n.add(A+r,t);case 2:return n.add(A+r,t+B);case 3:return n.add(A,t+B)}return n})},rn=(function(){function e(A){this.element=A,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]}return e})(),tn=(function(){function e(A,t){if(this.container=A,this.parent=t,this.effects=[],this.curves=new tQ(this.container),this.container.styles.opacity<1&&this.effects.push(new sQ(this.container.styles.opacity)),this.container.styles.transform!==null){var r=this.container.bounds.left+this.container.styles.transformOrigin[0].number,B=this.container.bounds.top+this.container.styles.transformOrigin[1].number,n=this.container.styles.transform;this.effects.push(new nQ(r,B,n))}if(this.container.styles.overflowX!==0){var s=Ze(this.curves),i=qe(this.curves);eB(s,i)?this.effects.push(new Se(s,6)):(this.effects.push(new Se(s,2)),this.effects.push(new Se(i,4)))}}return e.prototype.getEffects=function(A){for(var t=[2,3].indexOf(this.container.styles.position)===-1,r=this.parent,B=this.effects.slice(0);r;){var n=r.effects.filter(function(a){return!en(a)});if(t||r.container.styles.position!==0||!r.parent){if(B.unshift.apply(B,n),t=[2,3].indexOf(r.container.styles.position)===-1,r.container.styles.overflowX!==0){var s=Ze(r.curves),i=qe(r.curves);eB(s,i)||B.unshift(new Se(i,6))}}else B.unshift.apply(B,n);r=r.parent}return B.filter(function(a){return G(a.target,A)})},e})(),jr=function(e,A,t,r){e.container.elements.forEach(function(B){var n=G(B.flags,4),s=G(B.flags,2),i=new tn(B,e);G(B.styles.display,2048)&&r.push(i);var a=G(B.flags,8)?[]:r;if(n||s){var o=n||B.styles.isPositioned()?t:A,Q=new rn(i);if(B.styles.isPositioned()||B.styles.opacity<1||B.styles.isTransformed()){var g=B.styles.zIndex.order;if(g<0){var w=0;o.negativeZIndex.some(function(c,C){return g>c.element.container.styles.zIndex.order?(w=C,!1):w>0}),o.negativeZIndex.splice(w,0,Q)}else if(g>0){var f=0;o.positiveZIndex.some(function(c,C){return g>=c.element.container.styles.zIndex.order?(f=C+1,!1):f>0}),o.positiveZIndex.splice(f,0,Q)}else o.zeroOrAutoZIndexOrTransformedOrOpacity.push(Q)}else B.styles.isFloating()?o.nonPositionedFloats.push(Q):o.nonPositionedInlineLevel.push(Q);jr(i,Q,n?Q:t,a)}else B.styles.isInlineLevel()?A.inlineLevel.push(i):A.nonInlineLevel.push(i),jr(i,A,t,a);G(B.flags,8)&&Bn(B,a)})},Bn=function(e,A){for(var t=e instanceof kr?e.start:1,r=e instanceof kr?e.reversed:!1,B=0;B<A.length;B++){var n=A[B];n.container instanceof NB&&typeof n.container.value==\"number\"&&n.container.value!==0&&(t=n.container.value),n.listValue=we(t,n.container.styles.listStyleType,!0),t+=r?-1:1}},QQ=function(e){var A=new tn(e,null),t=new rn(A),r=[];return jr(A,t,t,r),Bn(A.container,r),t},rB=function(e,A){switch(A){case 0:return eA(e.topLeftBorderBox,e.topLeftPaddingBox,e.topRightBorderBox,e.topRightPaddingBox);case 1:return eA(e.topRightBorderBox,e.topRightPaddingBox,e.bottomRightBorderBox,e.bottomRightPaddingBox);case 2:return eA(e.bottomRightBorderBox,e.bottomRightPaddingBox,e.bottomLeftBorderBox,e.bottomLeftPaddingBox);default:return eA(e.bottomLeftBorderBox,e.bottomLeftPaddingBox,e.topLeftBorderBox,e.topLeftPaddingBox)}},gQ=function(e,A){switch(A){case 0:return eA(e.topLeftBorderBox,e.topLeftBorderDoubleOuterBox,e.topRightBorderBox,e.topRightBorderDoubleOuterBox);case 1:return eA(e.topRightBorderBox,e.topRightBorderDoubleOuterBox,e.bottomRightBorderBox,e.bottomRightBorderDoubleOuterBox);case 2:return eA(e.bottomRightBorderBox,e.bottomRightBorderDoubleOuterBox,e.bottomLeftBorderBox,e.bottomLeftBorderDoubleOuterBox);default:return eA(e.bottomLeftBorderBox,e.bottomLeftBorderDoubleOuterBox,e.topLeftBorderBox,e.topLeftBorderDoubleOuterBox)}},wQ=function(e,A){switch(A){case 0:return eA(e.topLeftBorderDoubleInnerBox,e.topLeftPaddingBox,e.topRightBorderDoubleInnerBox,e.topRightPaddingBox);case 1:return eA(e.topRightBorderDoubleInnerBox,e.topRightPaddingBox,e.bottomRightBorderDoubleInnerBox,e.bottomRightPaddingBox);case 2:return eA(e.bottomRightBorderDoubleInnerBox,e.bottomRightPaddingBox,e.bottomLeftBorderDoubleInnerBox,e.bottomLeftPaddingBox);default:return eA(e.bottomLeftBorderDoubleInnerBox,e.bottomLeftPaddingBox,e.topLeftBorderDoubleInnerBox,e.topLeftPaddingBox)}},cQ=function(e,A){switch(A){case 0:return Oe(e.topLeftBorderStroke,e.topRightBorderStroke);case 1:return Oe(e.topRightBorderStroke,e.bottomRightBorderStroke);case 2:return Oe(e.bottomRightBorderStroke,e.bottomLeftBorderStroke);default:return Oe(e.bottomLeftBorderStroke,e.topLeftBorderStroke)}},Oe=function(e,A){var t=[];return $(e)?t.push(e.subdivide(.5,!1)):t.push(e),$(A)?t.push(A.subdivide(.5,!0)):t.push(A),t},eA=function(e,A,t,r){var B=[];return $(e)?B.push(e.subdivide(.5,!1)):B.push(e),$(t)?B.push(t.subdivide(.5,!0)):B.push(t),$(r)?B.push(r.subdivide(.5,!0).reverse()):B.push(r),$(A)?B.push(A.subdivide(.5,!1).reverse()):B.push(A),B},nn=function(e){var A=e.bounds,t=e.styles;return A.add(t.borderLeftWidth,t.borderTopWidth,-(t.borderRightWidth+t.borderLeftWidth),-(t.borderTopWidth+t.borderBottomWidth))},je=function(e){var A=e.styles,t=e.bounds,r=b(A.paddingLeft,t.width),B=b(A.paddingRight,t.width),n=b(A.paddingTop,t.width),s=b(A.paddingBottom,t.width);return t.add(r+A.borderLeftWidth,n+A.borderTopWidth,-(A.borderRightWidth+A.borderLeftWidth+r+B),-(A.borderTopWidth+A.borderBottomWidth+n+s))},CQ=function(e,A){return e===0?A.bounds:e===2?je(A):nn(A)},uQ=function(e,A){return e===0?A.bounds:e===2?je(A):nn(A)},Kr=function(e,A,t){var r=CQ(XA(e.styles.backgroundOrigin,A),e),B=uQ(XA(e.styles.backgroundClip,A),e),n=lQ(XA(e.styles.backgroundSize,A),t,r),s=n[0],i=n[1],a=re(XA(e.styles.backgroundPosition,A),r.width-s,r.height-i),o=fQ(XA(e.styles.backgroundRepeat,A),a,n,r,B),Q=Math.round(r.left+a[0]),g=Math.round(r.top+a[1]);return[o,Q,g,s,i]},VA=function(e){return D(e)&&e.value===JA.AUTO},Me=function(e){return typeof e==\"number\"},lQ=function(e,A,t){var r=A[0],B=A[1],n=A[2],s=e[0],i=e[1];if(!s)return[0,0];if(M(s)&&i&&M(i))return[b(s,t.width),b(i,t.height)];var a=Me(n);if(D(s)&&(s.value===JA.CONTAIN||s.value===JA.COVER)){if(Me(n)){var o=t.width/t.height;return o<n!=(s.value===JA.COVER)?[t.width,t.width/n]:[t.height*n,t.height]}return[t.width,t.height]}var Q=Me(r),g=Me(B),w=Q||g;if(VA(s)&&(!i||VA(i))){if(Q&&g)return[r,B];if(!a&&!w)return[t.width,t.height];if(w&&a){var f=Q?r:B*n,c=g?B:r/n;return[f,c]}var C=Q?r:t.width,H=g?B:t.height;return[C,H]}if(a){var h=0,F=0;return M(s)?h=b(s,t.width):M(i)&&(F=b(i,t.height)),VA(s)?h=F*n:(!i||VA(i))&&(F=h/n),[h,F]}var K=null,p=null;if(M(s)?K=b(s,t.width):i&&M(i)&&(p=b(i,t.height)),K!==null&&(!i||VA(i))&&(p=Q&&g?K/r*B:t.height),p!==null&&VA(s)&&(K=Q&&g?p/B*r:t.width),K!==null&&p!==null)return[K,p];throw new Error(\"Unable to calculate background-size for element\")},XA=function(e,A){var t=e[A];return typeof t>\"u\"?e[0]:t},fQ=function(e,A,t,r,B){var n=A[0],s=A[1],i=t[0],a=t[1];switch(e){case 2:return[new u(Math.round(r.left),Math.round(r.top+s)),new u(Math.round(r.left+r.width),Math.round(r.top+s)),new u(Math.round(r.left+r.width),Math.round(a+r.top+s)),new u(Math.round(r.left),Math.round(a+r.top+s))];case 3:return[new u(Math.round(r.left+n),Math.round(r.top)),new u(Math.round(r.left+n+i),Math.round(r.top)),new u(Math.round(r.left+n+i),Math.round(r.height+r.top)),new u(Math.round(r.left+n),Math.round(r.height+r.top))];case 1:return[new u(Math.round(r.left+n),Math.round(r.top+s)),new u(Math.round(r.left+n+i),Math.round(r.top+s)),new u(Math.round(r.left+n+i),Math.round(r.top+s+a)),new u(Math.round(r.left+n),Math.round(r.top+s+a))];default:return[new u(Math.round(B.left),Math.round(B.top)),new u(Math.round(B.left+B.width),Math.round(B.top)),new u(Math.round(B.left+B.width),Math.round(B.height+B.top)),new u(Math.round(B.left),Math.round(B.height+B.top))]}},UQ=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",tB=\"Hidden Text\",FQ=(function(){function e(A){this._data={},this._document=A}return e.prototype.parseMetrics=function(A,t){var r=this._document.createElement(\"div\"),B=this._document.createElement(\"img\"),n=this._document.createElement(\"span\"),s=this._document.body;r.style.visibility=\"hidden\",r.style.fontFamily=A,r.style.fontSize=t,r.style.margin=\"0\",r.style.padding=\"0\",r.style.whiteSpace=\"nowrap\",s.appendChild(r),B.src=UQ,B.width=1,B.height=1,B.style.margin=\"0\",B.style.padding=\"0\",B.style.verticalAlign=\"baseline\",n.style.fontFamily=A,n.style.fontSize=t,n.style.margin=\"0\",n.style.padding=\"0\",n.appendChild(this._document.createTextNode(tB)),r.appendChild(n),r.appendChild(B);var i=B.offsetTop-n.offsetTop+2;r.removeChild(n),r.appendChild(this._document.createTextNode(tB)),r.style.lineHeight=\"normal\",B.style.verticalAlign=\"super\";var a=B.offsetTop-r.offsetTop+2;return s.removeChild(r),{baseline:i,middle:a}},e.prototype.getMetrics=function(A,t){var r=A+\" \"+t;return typeof this._data[r]>\"u\"&&(this._data[r]=this.parseMetrics(A,t)),this._data[r]},e})(),sn=(function(){function e(A,t){this.context=A,this.options=t}return e})(),hQ=1e4,dQ=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B._activeEffects=[],B.canvas=r.canvas?r.canvas:document.createElement(\"canvas\"),B.ctx=B.canvas.getContext(\"2d\"),r.canvas||(B.canvas.width=Math.floor(r.width*r.scale),B.canvas.height=Math.floor(r.height*r.scale),B.canvas.style.width=r.width+\"px\",B.canvas.style.height=r.height+\"px\"),B.fontMetrics=new FQ(document),B.ctx.scale(B.options.scale,B.options.scale),B.ctx.translate(-r.x,-r.y),B.ctx.textBaseline=\"bottom\",B._activeEffects=[],B.context.logger.debug(\"Canvas renderer initialized (\"+r.width+\"x\"+r.height+\") with scale \"+r.scale),B}return A.prototype.applyEffects=function(t){for(var r=this;this._activeEffects.length;)this.popEffect();t.forEach(function(B){return r.applyEffect(B)})},A.prototype.applyEffect=function(t){this.ctx.save(),iQ(t)&&(this.ctx.globalAlpha=t.opacity),aQ(t)&&(this.ctx.translate(t.offsetX,t.offsetY),this.ctx.transform(t.matrix[0],t.matrix[1],t.matrix[2],t.matrix[3],t.matrix[4],t.matrix[5]),this.ctx.translate(-t.offsetX,-t.offsetY)),en(t)&&(this.path(t.path),this.ctx.clip()),this._activeEffects.push(t)},A.prototype.popEffect=function(){this._activeEffects.pop(),this.ctx.restore()},A.prototype.renderStack=function(t){return P(this,void 0,void 0,function(){var r;return _(this,function(B){switch(B.label){case 0:return r=t.element.container.styles,r.isVisible()?[4,this.renderStackContent(t)]:[3,2];case 1:B.sent(),B.label=2;case 2:return[2]}})})},A.prototype.renderNode=function(t){return P(this,void 0,void 0,function(){return _(this,function(r){switch(r.label){case 0:if(G(t.container.flags,16))debugger;return t.container.styles.isVisible()?[4,this.renderNodeBackgroundAndBorders(t)]:[3,3];case 1:return r.sent(),[4,this.renderNodeContent(t)];case 2:r.sent(),r.label=3;case 3:return[2]}})})},A.prototype.renderTextWithLetterSpacing=function(t,r,B){var n=this;if(r===0)this.ctx.fillText(t.text,t.bounds.left,t.bounds.top+B);else{var s=rt(t.text);s.reduce(function(i,a){return n.ctx.fillText(a,i,t.bounds.top+B),i+n.ctx.measureText(a).width},t.bounds.left)}},A.prototype.createFontStyle=function(t){var r=t.fontVariant.filter(function(s){return s===\"normal\"||s===\"small-caps\"}).join(\"\"),B=vQ(t.fontFamily).join(\", \"),n=Ce(t.fontSize)?\"\"+t.fontSize.number+t.fontSize.unit:t.fontSize.number+\"px\";return[[t.fontStyle,r,t.fontWeight,n,B].join(\" \"),B,n]},A.prototype.renderTextNode=function(t,r){return P(this,void 0,void 0,function(){var B,n,s,i,a,o,Q,g,w=this;return _(this,function(f){return B=this.createFontStyle(r),n=B[0],s=B[1],i=B[2],this.ctx.font=n,this.ctx.direction=r.direction===1?\"rtl\":\"ltr\",this.ctx.textAlign=\"left\",this.ctx.textBaseline=\"alphabetic\",a=this.fontMetrics.getMetrics(s,i),o=a.baseline,Q=a.middle,g=r.paintOrder,t.textBounds.forEach(function(c){g.forEach(function(C){switch(C){case 0:w.ctx.fillStyle=R(r.color),w.renderTextWithLetterSpacing(c,r.letterSpacing,o);var H=r.textShadow;H.length&&c.text.trim().length&&(H.slice(0).reverse().forEach(function(h){w.ctx.shadowColor=R(h.color),w.ctx.shadowOffsetX=h.offsetX.number*w.options.scale,w.ctx.shadowOffsetY=h.offsetY.number*w.options.scale,w.ctx.shadowBlur=h.blur.number,w.renderTextWithLetterSpacing(c,r.letterSpacing,o)}),w.ctx.shadowColor=\"\",w.ctx.shadowOffsetX=0,w.ctx.shadowOffsetY=0,w.ctx.shadowBlur=0),r.textDecorationLine.length&&(w.ctx.fillStyle=R(r.textDecorationColor||r.color),r.textDecorationLine.forEach(function(h){switch(h){case 1:w.ctx.fillRect(c.bounds.left,Math.round(c.bounds.top+o),c.bounds.width,1);break;case 2:w.ctx.fillRect(c.bounds.left,Math.round(c.bounds.top),c.bounds.width,1);break;case 3:w.ctx.fillRect(c.bounds.left,Math.ceil(c.bounds.top+Q),c.bounds.width,1);break}}));break;case 1:r.webkitTextStrokeWidth&&c.text.trim().length&&(w.ctx.strokeStyle=R(r.webkitTextStrokeColor),w.ctx.lineWidth=r.webkitTextStrokeWidth,w.ctx.lineJoin=window.chrome?\"miter\":\"round\",w.ctx.strokeText(c.text,c.bounds.left,c.bounds.top+o)),w.ctx.strokeStyle=\"\",w.ctx.lineWidth=0,w.ctx.lineJoin=\"miter\";break}})}),[2]})})},A.prototype.renderReplacedElement=function(t,r,B){if(B&&t.intrinsicWidth>0&&t.intrinsicHeight>0){var n=je(t),s=qe(r);this.path(s),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(B,0,0,t.intrinsicWidth,t.intrinsicHeight,n.left,n.top,n.width,n.height),this.ctx.restore()}},A.prototype.renderNodeContent=function(t){return P(this,void 0,void 0,function(){var r,B,n,s,i,a,F,F,o,Q,g,w,p,f,c,d,C,H,h,F,K,p,d;return _(this,function(l){switch(l.label){case 0:this.applyEffects(t.getEffects(4)),r=t.container,B=t.curves,n=r.styles,s=0,i=r.textNodes,l.label=1;case 1:return s<i.length?(a=i[s],[4,this.renderTextNode(a,n)]):[3,4];case 2:l.sent(),l.label=3;case 3:return s++,[3,1];case 4:if(!(r instanceof GB))return[3,8];l.label=5;case 5:return l.trys.push([5,7,,8]),[4,this.context.cache.match(r.src)];case 6:return F=l.sent(),this.renderReplacedElement(r,B,F),[3,8];case 7:return l.sent(),this.context.logger.error(\"Error loading image \"+r.src),[3,8];case 8:if(r instanceof RB&&this.renderReplacedElement(r,B,r.canvas),!(r instanceof VB))return[3,12];l.label=9;case 9:return l.trys.push([9,11,,12]),[4,this.context.cache.match(r.svg)];case 10:return F=l.sent(),this.renderReplacedElement(r,B,F),[3,12];case 11:return l.sent(),this.context.logger.error(\"Error loading svg \"+r.svg.substring(0,255)),[3,12];case 12:return r instanceof JB&&r.tree?(o=new A(this.context,{scale:this.options.scale,backgroundColor:r.backgroundColor,x:0,y:0,width:r.width,height:r.height}),[4,o.render(r.tree)]):[3,14];case 13:Q=l.sent(),r.width&&r.height&&this.ctx.drawImage(Q,0,0,r.width,r.height,r.bounds.left,r.bounds.top,r.bounds.width,r.bounds.height),l.label=14;case 14:if(r instanceof tt&&(g=Math.min(r.bounds.width,r.bounds.height),r.type===Pe?r.checked&&(this.ctx.save(),this.path([new u(r.bounds.left+g*.39363,r.bounds.top+g*.79),new u(r.bounds.left+g*.16,r.bounds.top+g*.5549),new u(r.bounds.left+g*.27347,r.bounds.top+g*.44071),new u(r.bounds.left+g*.39694,r.bounds.top+g*.5649),new u(r.bounds.left+g*.72983,r.bounds.top+g*.23),new u(r.bounds.left+g*.84,r.bounds.top+g*.34085),new u(r.bounds.left+g*.39363,r.bounds.top+g*.79)]),this.ctx.fillStyle=R(Jt),this.ctx.fill(),this.ctx.restore()):r.type===ke&&r.checked&&(this.ctx.save(),this.ctx.beginPath(),this.ctx.arc(r.bounds.left+g/2,r.bounds.top+g/2,g/4,0,Math.PI*2,!0),this.ctx.fillStyle=R(Jt),this.ctx.fill(),this.ctx.restore())),EQ(r)&&r.value.length){switch(w=this.createFontStyle(n),p=w[0],f=w[1],c=this.fontMetrics.getMetrics(p,f).baseline,this.ctx.font=p,this.ctx.fillStyle=R(n.color),this.ctx.textBaseline=\"alphabetic\",this.ctx.textAlign=pQ(r.styles.textAlign),d=je(r),C=0,r.styles.textAlign){case 1:C+=d.width/2;break;case 2:C+=d.width;break}H=d.add(C,0,0,-d.height/2+1),this.ctx.save(),this.path([new u(d.left,d.top),new u(d.left+d.width,d.top),new u(d.left+d.width,d.top+d.height),new u(d.left,d.top+d.height)]),this.ctx.clip(),this.renderTextWithLetterSpacing(new ie(r.value,H),n.letterSpacing,c),this.ctx.restore(),this.ctx.textBaseline=\"alphabetic\",this.ctx.textAlign=\"left\"}if(!G(r.styles.display,2048))return[3,20];if(r.styles.listStyleImage===null)return[3,19];if(h=r.styles.listStyleImage,h.type!==0)return[3,18];F=void 0,K=h.url,l.label=15;case 15:return l.trys.push([15,17,,18]),[4,this.context.cache.match(K)];case 16:return F=l.sent(),this.ctx.drawImage(F,r.bounds.left-(F.width+10),r.bounds.top),[3,18];case 17:return l.sent(),this.context.logger.error(\"Error loading list-style-image \"+K),[3,18];case 18:return[3,20];case 19:t.listValue&&r.styles.listStyleType!==-1&&(p=this.createFontStyle(n)[0],this.ctx.font=p,this.ctx.fillStyle=R(n.color),this.ctx.textBaseline=\"middle\",this.ctx.textAlign=\"right\",d=new cA(r.bounds.left,r.bounds.top+b(r.styles.paddingTop,r.bounds.width),r.bounds.width,yt(n.lineHeight,n.fontSize.number)/2+1),this.renderTextWithLetterSpacing(new ie(t.listValue,d),n.letterSpacing,yt(n.lineHeight,n.fontSize.number)/2+2),this.ctx.textBaseline=\"bottom\",this.ctx.textAlign=\"left\"),l.label=20;case 20:return[2]}})})},A.prototype.renderStackContent=function(t){return P(this,void 0,void 0,function(){var r,B,h,n,s,h,i,a,h,o,Q,h,g,w,h,f,c,h,C,H,h;return _(this,function(F){switch(F.label){case 0:if(G(t.element.container.flags,16))debugger;return[4,this.renderNodeBackgroundAndBorders(t.element)];case 1:F.sent(),r=0,B=t.negativeZIndex,F.label=2;case 2:return r<B.length?(h=B[r],[4,this.renderStack(h)]):[3,5];case 3:F.sent(),F.label=4;case 4:return r++,[3,2];case 5:return[4,this.renderNodeContent(t.element)];case 6:F.sent(),n=0,s=t.nonInlineLevel,F.label=7;case 7:return n<s.length?(h=s[n],[4,this.renderNode(h)]):[3,10];case 8:F.sent(),F.label=9;case 9:return n++,[3,7];case 10:i=0,a=t.nonPositionedFloats,F.label=11;case 11:return i<a.length?(h=a[i],[4,this.renderStack(h)]):[3,14];case 12:F.sent(),F.label=13;case 13:return i++,[3,11];case 14:o=0,Q=t.nonPositionedInlineLevel,F.label=15;case 15:return o<Q.length?(h=Q[o],[4,this.renderStack(h)]):[3,18];case 16:F.sent(),F.label=17;case 17:return o++,[3,15];case 18:g=0,w=t.inlineLevel,F.label=19;case 19:return g<w.length?(h=w[g],[4,this.renderNode(h)]):[3,22];case 20:F.sent(),F.label=21;case 21:return g++,[3,19];case 22:f=0,c=t.zeroOrAutoZIndexOrTransformedOrOpacity,F.label=23;case 23:return f<c.length?(h=c[f],[4,this.renderStack(h)]):[3,26];case 24:F.sent(),F.label=25;case 25:return f++,[3,23];case 26:C=0,H=t.positiveZIndex,F.label=27;case 27:return C<H.length?(h=H[C],[4,this.renderStack(h)]):[3,30];case 28:F.sent(),F.label=29;case 29:return C++,[3,27];case 30:return[2]}})})},A.prototype.mask=function(t){this.ctx.beginPath(),this.ctx.moveTo(0,0),this.ctx.lineTo(this.canvas.width,0),this.ctx.lineTo(this.canvas.width,this.canvas.height),this.ctx.lineTo(0,this.canvas.height),this.ctx.lineTo(0,0),this.formatPath(t.slice(0).reverse()),this.ctx.closePath()},A.prototype.path=function(t){this.ctx.beginPath(),this.formatPath(t),this.ctx.closePath()},A.prototype.formatPath=function(t){var r=this;t.forEach(function(B,n){var s=$(B)?B.start:B;n===0?r.ctx.moveTo(s.x,s.y):r.ctx.lineTo(s.x,s.y),$(B)&&r.ctx.bezierCurveTo(B.startControl.x,B.startControl.y,B.endControl.x,B.endControl.y,B.end.x,B.end.y)})},A.prototype.renderRepeat=function(t,r,B,n){this.path(t),this.ctx.fillStyle=r,this.ctx.translate(B,n),this.ctx.fill(),this.ctx.translate(-B,-n)},A.prototype.resizeImage=function(t,r,B){var n;if(t.width===r&&t.height===B)return t;var s=(n=this.canvas.ownerDocument)!==null&&n!==void 0?n:document,i=s.createElement(\"canvas\");i.width=Math.max(1,r),i.height=Math.max(1,B);var a=i.getContext(\"2d\");return a.drawImage(t,0,0,t.width,t.height,0,0,r,B),i},A.prototype.renderBackgroundImage=function(t){return P(this,void 0,void 0,function(){var r,B,n,s,i,a;return _(this,function(o){switch(o.label){case 0:r=t.styles.backgroundImage.length-1,B=function(Q){var g,w,f,O,Y,W,L,V,y,c,O,Y,W,L,V,C,H,h,F,K,p,d,l,v,y,E,O,k,q,L,V,CA,Y,W,IA,BA,uA,vA,yA,iA,KA,oA;return _(this,function(TA){switch(TA.label){case 0:if(Q.type!==0)return[3,5];g=void 0,w=Q.url,TA.label=1;case 1:return TA.trys.push([1,3,,4]),[4,n.context.cache.match(w)];case 2:return g=TA.sent(),[3,4];case 3:return TA.sent(),n.context.logger.error(\"Error loading background-image \"+w),[3,4];case 4:return g&&(f=Kr(t,r,[g.width,g.height,g.width/g.height]),O=f[0],Y=f[1],W=f[2],L=f[3],V=f[4],y=n.ctx.createPattern(n.resizeImage(g,L,V),\"repeat\"),n.renderRepeat(O,y,Y,W)),[3,6];case 5:sa(Q)?(c=Kr(t,r,[null,null,null]),O=c[0],Y=c[1],W=c[2],L=c[3],V=c[4],C=ea(Q.angle,L,V),H=C[0],h=C[1],F=C[2],K=C[3],p=C[4],d=document.createElement(\"canvas\"),d.width=L,d.height=V,l=d.getContext(\"2d\"),v=l.createLinearGradient(h,K,F,p),It(Q.stops,H).forEach(function(YA){return v.addColorStop(YA.stop,R(YA.color))}),l.fillStyle=v,l.fillRect(0,0,L,V),L>0&&V>0&&(y=n.ctx.createPattern(d,\"repeat\"),n.renderRepeat(O,y,Y,W))):aa(Q)&&(E=Kr(t,r,[null,null,null]),O=E[0],k=E[1],q=E[2],L=E[3],V=E[4],CA=Q.position.length===0?[$r]:Q.position,Y=b(CA[0],L),W=b(CA[CA.length-1],V),IA=ra(Q,Y,W,L,V),BA=IA[0],uA=IA[1],BA>0&&uA>0&&(vA=n.ctx.createRadialGradient(k+Y,q+W,0,k+Y,q+W,BA),It(Q.stops,BA*2).forEach(function(YA){return vA.addColorStop(YA.stop,R(YA.color))}),n.path(O),n.ctx.fillStyle=vA,BA!==uA?(yA=t.bounds.left+.5*t.bounds.width,iA=t.bounds.top+.5*t.bounds.height,KA=uA/BA,oA=1/KA,n.ctx.save(),n.ctx.translate(yA,iA),n.ctx.transform(1,0,0,KA,0,0),n.ctx.translate(-yA,-iA),n.ctx.fillRect(k,oA*(q-iA)+iA,L,V*oA),n.ctx.restore()):n.ctx.fill())),TA.label=6;case 6:return r--,[2]}})},n=this,s=0,i=t.styles.backgroundImage.slice(0).reverse(),o.label=1;case 1:return s<i.length?(a=i[s],[5,B(a)]):[3,4];case 2:o.sent(),o.label=3;case 3:return s++,[3,1];case 4:return[2]}})})},A.prototype.renderSolidBorder=function(t,r,B){return P(this,void 0,void 0,function(){return _(this,function(n){return this.path(rB(B,r)),this.ctx.fillStyle=R(t),this.ctx.fill(),[2]})})},A.prototype.renderDoubleBorder=function(t,r,B,n){return P(this,void 0,void 0,function(){var s,i;return _(this,function(a){switch(a.label){case 0:return r<3?[4,this.renderSolidBorder(t,B,n)]:[3,2];case 1:return a.sent(),[2];case 2:return s=gQ(n,B),this.path(s),this.ctx.fillStyle=R(t),this.ctx.fill(),i=wQ(n,B),this.path(i),this.ctx.fill(),[2]}})})},A.prototype.renderNodeBackgroundAndBorders=function(t){return P(this,void 0,void 0,function(){var r,B,n,s,i,a,o,Q,g=this;return _(this,function(w){switch(w.label){case 0:return this.applyEffects(t.getEffects(2)),r=t.container.styles,B=!HA(r.backgroundColor)||r.backgroundImage.length,n=[{style:r.borderTopStyle,color:r.borderTopColor,width:r.borderTopWidth},{style:r.borderRightStyle,color:r.borderRightColor,width:r.borderRightWidth},{style:r.borderBottomStyle,color:r.borderBottomColor,width:r.borderBottomWidth},{style:r.borderLeftStyle,color:r.borderLeftColor,width:r.borderLeftWidth}],s=HQ(XA(r.backgroundClip,0),t.curves),B||r.boxShadow.length?(this.ctx.save(),this.path(s),this.ctx.clip(),HA(r.backgroundColor)||(this.ctx.fillStyle=R(r.backgroundColor),this.ctx.fill()),[4,this.renderBackgroundImage(t.container)]):[3,2];case 1:w.sent(),this.ctx.restore(),r.boxShadow.slice(0).reverse().forEach(function(f){g.ctx.save();var c=Ze(t.curves),C=f.inset?0:hQ,H=oQ(c,-C+(f.inset?1:-1)*f.spread.number,(f.inset?1:-1)*f.spread.number,f.spread.number*(f.inset?-2:2),f.spread.number*(f.inset?-2:2));f.inset?(g.path(c),g.ctx.clip(),g.mask(H)):(g.mask(c),g.ctx.clip(),g.path(H)),g.ctx.shadowOffsetX=f.offsetX.number+C,g.ctx.shadowOffsetY=f.offsetY.number,g.ctx.shadowColor=R(f.color),g.ctx.shadowBlur=f.blur.number,g.ctx.fillStyle=f.inset?R(f.color):\"rgba(0,0,0,1)\",g.ctx.fill(),g.ctx.restore()}),w.label=2;case 2:i=0,a=0,o=n,w.label=3;case 3:return a<o.length?(Q=o[a],Q.style!==0&&!HA(Q.color)&&Q.width>0?Q.style!==2?[3,5]:[4,this.renderDashedDottedBorder(Q.color,Q.width,i,t.curves,2)]:[3,11]):[3,13];case 4:return w.sent(),[3,11];case 5:return Q.style!==3?[3,7]:[4,this.renderDashedDottedBorder(Q.color,Q.width,i,t.curves,3)];case 6:return w.sent(),[3,11];case 7:return Q.style!==4?[3,9]:[4,this.renderDoubleBorder(Q.color,Q.width,i,t.curves)];case 8:return w.sent(),[3,11];case 9:return[4,this.renderSolidBorder(Q.color,i,t.curves)];case 10:w.sent(),w.label=11;case 11:i++,w.label=12;case 12:return a++,[3,3];case 13:return[2]}})})},A.prototype.renderDashedDottedBorder=function(t,r,B,n,s){return P(this,void 0,void 0,function(){var i,a,o,Q,g,w,f,c,C,H,h,F,K,p,d,l,d,l;return _(this,function(v){return this.ctx.save(),i=cQ(n,B),a=rB(n,B),s===2&&(this.path(a),this.ctx.clip()),$(a[0])?(o=a[0].start.x,Q=a[0].start.y):(o=a[0].x,Q=a[0].y),$(a[1])?(g=a[1].end.x,w=a[1].end.y):(g=a[1].x,w=a[1].y),B===0||B===2?f=Math.abs(o-g):f=Math.abs(Q-w),this.ctx.beginPath(),s===3?this.formatPath(i):this.formatPath(a.slice(0,2)),c=r<3?r*3:r*2,C=r<3?r*2:r,s===3&&(c=r,C=r),H=!0,f<=c*2?H=!1:f<=c*2+C?(h=f/(2*c+C),c*=h,C*=h):(F=Math.floor((f+C)/(c+C)),K=(f-F*c)/(F-1),p=(f-(F+1)*c)/F,C=p<=0||Math.abs(C-K)<Math.abs(C-p)?K:p),H&&(s===3?this.ctx.setLineDash([0,c+C]):this.ctx.setLineDash([c,C])),s===3?(this.ctx.lineCap=\"round\",this.ctx.lineWidth=r):this.ctx.lineWidth=r*2+1.1,this.ctx.strokeStyle=R(t),this.ctx.stroke(),this.ctx.setLineDash([]),s===2&&($(a[0])&&(d=a[3],l=a[0],this.ctx.beginPath(),this.formatPath([new u(d.end.x,d.end.y),new u(l.start.x,l.start.y)]),this.ctx.stroke()),$(a[1])&&(d=a[1],l=a[2],this.ctx.beginPath(),this.formatPath([new u(d.end.x,d.end.y),new u(l.start.x,l.start.y)]),this.ctx.stroke())),this.ctx.restore(),[2]})})},A.prototype.render=function(t){return P(this,void 0,void 0,function(){var r;return _(this,function(B){switch(B.label){case 0:return this.options.backgroundColor&&(this.ctx.fillStyle=R(this.options.backgroundColor),this.ctx.fillRect(this.options.x,this.options.y,this.options.width,this.options.height)),r=QQ(t),[4,this.renderStack(r)];case 1:return B.sent(),this.applyEffects([]),[2,this.canvas]}})})},A})(sn),EQ=function(e){return e instanceof _B||e instanceof XB?!0:e instanceof tt&&e.type!==ke&&e.type!==Pe},HQ=function(e,A){switch(e){case 0:return Ze(A);case 2:return BQ(A);default:return qe(A)}},pQ=function(e){switch(e){case 1:return\"center\";case 2:return\"right\";default:return\"left\"}},IQ=[\"-apple-system\",\"system-ui\"],vQ=function(e){return/iPhone OS 15_(0|1)/.test(window.navigator.userAgent)?e.filter(function(A){return IQ.indexOf(A)===-1}):e},yQ=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.canvas=r.canvas?r.canvas:document.createElement(\"canvas\"),B.ctx=B.canvas.getContext(\"2d\"),B.options=r,B.canvas.width=Math.floor(r.width*r.scale),B.canvas.height=Math.floor(r.height*r.scale),B.canvas.style.width=r.width+\"px\",B.canvas.style.height=r.height+\"px\",B.ctx.scale(B.options.scale,B.options.scale),B.ctx.translate(-r.x,-r.y),B.context.logger.debug(\"EXPERIMENTAL ForeignObject renderer initialized (\"+r.width+\"x\"+r.height+\" at \"+r.x+\",\"+r.y+\") with scale \"+r.scale),B}return A.prototype.render=function(t){return P(this,void 0,void 0,function(){var r,B;return _(this,function(n){switch(n.label){case 0:return r=Pr(this.options.width*this.options.scale,this.options.height*this.options.scale,this.options.scale,this.options.scale,t),[4,KQ(r)];case 1:return B=n.sent(),this.options.backgroundColor&&(this.ctx.fillStyle=R(this.options.backgroundColor),this.ctx.fillRect(0,0,this.options.width*this.options.scale,this.options.height*this.options.scale)),this.ctx.drawImage(B,-this.options.x*this.options.scale,-this.options.y*this.options.scale),[2,this.canvas]}})})},A})(sn),KQ=function(e){return new Promise(function(A,t){var r=new Image;r.onload=function(){A(r)},r.onerror=t,r.src=\"data:image/svg+xml;charset=utf-8,\"+encodeURIComponent(new XMLSerializer().serializeToString(e))})},mQ=(function(){function e(A){var t=A.id,r=A.enabled;this.id=t,this.enabled=r,this.start=Date.now()}return e.prototype.debug=function(){for(var A=[],t=0;t<arguments.length;t++)A[t]=arguments[t];this.enabled&&(typeof window<\"u\"&&window.console&&typeof console.debug==\"function\"?console.debug.apply(console,ue([this.id,this.getTime()+\"ms\"],A)):this.info.apply(this,A))},e.prototype.getTime=function(){return Date.now()-this.start},e.prototype.info=function(){for(var A=[],t=0;t<arguments.length;t++)A[t]=arguments[t];this.enabled&&typeof window<\"u\"&&window.console&&typeof console.info==\"function\"&&console.info.apply(console,ue([this.id,this.getTime()+\"ms\"],A))},e.prototype.warn=function(){for(var A=[],t=0;t<arguments.length;t++)A[t]=arguments[t];this.enabled&&(typeof window<\"u\"&&window.console&&typeof console.warn==\"function\"?console.warn.apply(console,ue([this.id,this.getTime()+\"ms\"],A)):this.info.apply(this,A))},e.prototype.error=function(){for(var A=[],t=0;t<arguments.length;t++)A[t]=arguments[t];this.enabled&&(typeof window<\"u\"&&window.console&&typeof console.error==\"function\"?console.error.apply(console,ue([this.id,this.getTime()+\"ms\"],A)):this.info.apply(this,A))},e.instances={},e})(),LQ=(function(){function e(A,t){var r;this.windowBounds=t,this.instanceName=\"#\"+e.instanceCount++,this.logger=new mQ({id:this.instanceName,enabled:A.logging}),this.cache=(r=A.cache)!==null&&r!==void 0?r:new qo(this,A)}return e.instanceCount=1,e})(),xQ=function(e,A){return A===void 0&&(A={}),DQ(e,A)};typeof window<\"u\"&&An.setContext(window);var DQ=function(e,A){return P(void 0,void 0,void 0,function(){var t,r,B,n,s,i,a,o,Q,g,w,f,c,C,H,h,F,K,p,d,v,l,v,y,E,O,k,q,L,V,CA,Y,W,IA,BA,uA,vA,yA,iA,KA;return _(this,function(oA){switch(oA.label){case 0:if(!e||typeof e!=\"object\")return[2,Promise.reject(\"Invalid element provided as first argument\")];if(t=e.ownerDocument,!t)throw new Error(\"Element is not attached to a Document\");if(r=t.defaultView,!r)throw new Error(\"Document is not attached to a Window\");return B={allowTaint:(y=A.allowTaint)!==null&&y!==void 0?y:!1,imageTimeout:(E=A.imageTimeout)!==null&&E!==void 0?E:15e3,proxy:A.proxy,useCORS:(O=A.useCORS)!==null&&O!==void 0?O:!1},n=Lr({logging:(k=A.logging)!==null&&k!==void 0?k:!0,cache:A.cache},B),s={windowWidth:(q=A.windowWidth)!==null&&q!==void 0?q:r.innerWidth,windowHeight:(L=A.windowHeight)!==null&&L!==void 0?L:r.innerHeight,scrollX:(V=A.scrollX)!==null&&V!==void 0?V:r.pageXOffset,scrollY:(CA=A.scrollY)!==null&&CA!==void 0?CA:r.pageYOffset},i=new cA(s.scrollX,s.scrollY,s.windowWidth,s.windowHeight),a=new LQ(n,i),o=(Y=A.foreignObjectRendering)!==null&&Y!==void 0?Y:!1,Q={allowTaint:(W=A.allowTaint)!==null&&W!==void 0?W:!1,onclone:A.onclone,ignoreElements:A.ignoreElements,inlineImages:o,copyStyles:o},a.logger.debug(\"Starting document clone with size \"+i.width+\"x\"+i.height+\" scrolled to \"+-i.left+\",\"+-i.top),g=new $t(a,e,Q),w=g.clonedReferenceElement,w?[4,g.toIFrame(t,i)]:[2,Promise.reject(\"Unable to find element in cloned iframe\")];case 1:return f=oA.sent(),c=Bt(w)||xo(w)?an(w.ownerDocument):ze(a,w),C=c.width,H=c.height,h=c.left,F=c.top,K=bQ(a,w,A.backgroundColor),p={canvas:A.canvas,backgroundColor:K,scale:(BA=(IA=A.scale)!==null&&IA!==void 0?IA:r.devicePixelRatio)!==null&&BA!==void 0?BA:1,x:((uA=A.x)!==null&&uA!==void 0?uA:0)+h,y:((vA=A.y)!==null&&vA!==void 0?vA:0)+F,width:(yA=A.width)!==null&&yA!==void 0?yA:Math.ceil(C),height:(iA=A.height)!==null&&iA!==void 0?iA:Math.ceil(H)},o?(a.logger.debug(\"Document cloned, using foreign object rendering\"),v=new yQ(a,p),[4,v.render(w)]):[3,3];case 2:return d=oA.sent(),[3,5];case 3:return a.logger.debug(\"Document cloned, element located at \"+h+\",\"+F+\" with size \"+C+\"x\"+H+\" using computed rendering\"),a.logger.debug(\"Starting DOM parsing\"),l=kB(a,w),K===l.styles.backgroundColor&&(l.styles.backgroundColor=wA.TRANSPARENT),a.logger.debug(\"Starting renderer for element at \"+p.x+\",\"+p.y+\" with size \"+p.width+\"x\"+p.height),v=new dQ(a,p),[4,v.render(l)];case 4:d=oA.sent(),oA.label=5;case 5:return(!((KA=A.removeContainer)!==null&&KA!==void 0)||KA)&&($t.destroy(f)||a.logger.error(\"Cannot detach cloned iframe as it is not in the DOM anymore\")),a.logger.debug(\"Finished rendering\"),[2,d]}})})},bQ=function(e,A,t){var r=A.ownerDocument,B=r.documentElement?se(e,getComputedStyle(r.documentElement).backgroundColor):wA.TRANSPARENT,n=r.body?se(e,getComputedStyle(r.body).backgroundColor):wA.TRANSPARENT,s=typeof t==\"string\"?se(e,t):t===null?wA.TRANSPARENT:4294967295;return A===r.documentElement?HA(B)?HA(n)?s:n:B:s};export{xQ as default};\n"
  },
  {
    "path": "public/build/assets/import-CRZICNET.js",
    "content": "import{a as p}from\"./index-D5GkNzM3.js\";const l=document.querySelector(\".progress-uploading\"),c=document.querySelector(\".progress-validating\");let a;const m=()=>{const s=document.getElementById(\"campaign-import-form\");s&&(a=document.querySelector(\".progress\"),s.onsubmit=i=>{i.preventDefault();let n=0,e=new FormData,o=document.getElementById(\"export-files\");Array.from(o.files).forEach(t=>{(t.name.endsWith(\".zip\")||t.name.endsWith(\".csv\"))&&(n++,e.append(\"files[]\",t))});let r=document.querySelector('input[name=\"campaign\"]');e.append(\"campaign\",r.value);let d=document.querySelector('input[name=\"token\"]');if(e.append(\"token\",d.value),n>0&&n<2)u(s,e);else{alert(\"Please select the campaign export zip files.\");let t=document.querySelector(\".loading\");return t&&t.classList.remove(\"loading\"),!1}})},u=(s,i)=>{s.classList.add(\"hidden\");let n={headers:{\"Content-Type\":\"multipart/form-data\"},onUploadProgress:function(e){let o=Math.round(e.loaded*100/e.total);document.querySelector('[role=\"progressbar\"]').style.width=o+\"%\",o===100&&(l.classList.add(\"hidden\"),c.classList.remove(\"hidden\"));const r=document.querySelector(\".progress-percent\");r.classList.remove(\"hidden\"),r.innerHTML=o}};a.classList.remove(\"hidden\"),l.classList.remove(\"hidden\"),c.classList.add(\"hidden\"),p.post(s.action,i,n).then(function(e){a.classList.add(\"hidden\"),e.data.success&&window.location.reload()}).catch(function(e){if(s.classList.remove(\"hidden\"),a.classList.add(\"hidden\"),e.status===413)window.showToast(\"File is too big for our servers to handle.\",\"error\");else if(e.code==\"ERR_NETWORK\")window.showToast(\"Network error, the upload server seems to be down.\",\"error\");else if(e.response&&e.response.data.errors){let r=e.response.data.errors;Object.keys(r).forEach(t=>{window.showToast(r[t],\"error\")})}let o=document.querySelector(\".loading\");o&&o.classList.remove(\"loading\")})};m();\n"
  },
  {
    "path": "public/build/assets/index-Bajpoqb9.js",
    "content": "const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[\"assets/Tiptap-Bd5ZGSft.js\",\"assets/preload-helper-I4rgV-VL.js\",\"assets/vendor-tiptap-D5xFoo7B.js\",\"assets/_plugin-vue_export-helper-DlAUqK2U.js\",\"assets/index-D5GkNzM3.js\",\"assets/Tiptap-B5LGKvdR.css\"])))=>i.map(i=>d[i]);\nimport{_ as r}from\"./preload-helper-I4rgV-VL.js\";import{e as d,I as p,M as s}from\"./vendor-tiptap-D5xFoo7B.js\";const c=s(()=>r(()=>import(\"./Tiptap-Bd5ZGSft.js\"),__vite__mapDeps([0,1,2,3,4,5]))),n=()=>{document.querySelectorAll(\".tiptap-editor\").forEach(t=>{if(t.dataset.init===\"1\")return;t.dataset.init=\"1\";const o=t.dataset.content||\"\",a=t.dataset.fieldName||\"entry\",e=t.querySelector(\"tiptap\"),i={content:o,fieldName:a,mentions:e?.getAttribute(\"mentions\")||void 0,gallery:e?.getAttribute(\"gallery\")||void 0,galleryUpload:e?.getAttribute(\"galleryUpload\")||void 0};e&&e.remove(),d({render(){return p(c,i)}}).mount(t)})};n();window.onEvent(function(){n()});\n"
  },
  {
    "path": "public/build/assets/index-D5GkNzM3.js",
    "content": "function ze(e,t){return function(){return e.apply(t,arguments)}}const{toString:pt}=Object.prototype,{getPrototypeOf:be}=Object,{iterator:re,toStringTag:Je}=Symbol,se=(e=>t=>{const n=pt.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),_=e=>(e=e.toLowerCase(),t=>se(t)===e),oe=e=>t=>typeof t===e,{isArray:M}=Array,H=oe(\"undefined\");function J(e){return e!==null&&!H(e)&&e.constructor!==null&&!H(e.constructor)&&T(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ve=_(\"ArrayBuffer\");function ht(e){let t;return typeof ArrayBuffer<\"u\"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Ve(e.buffer),t}const mt=oe(\"string\"),T=oe(\"function\"),We=oe(\"number\"),V=e=>e!==null&&typeof e==\"object\",yt=e=>e===!0||e===!1,Y=e=>{if(se(e)!==\"object\")return!1;const t=be(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Je in e)&&!(re in e)},bt=e=>{if(!V(e)||J(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},wt=_(\"Date\"),Et=_(\"File\"),Rt=_(\"Blob\"),gt=_(\"FileList\"),St=e=>V(e)&&T(e.pipe),Ot=e=>{let t;return e&&(typeof FormData==\"function\"&&e instanceof FormData||T(e.append)&&((t=se(e))===\"formdata\"||t===\"object\"&&T(e.toString)&&e.toString()===\"[object FormData]\"))},Tt=_(\"URLSearchParams\"),[At,Ct,xt,Nt]=[\"ReadableStream\",\"Request\",\"Response\",\"Headers\"].map(_),_t=e=>e.trim?e.trim():e.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\");function W(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>\"u\")return;let r,s;if(typeof e!=\"object\"&&(e=[e]),M(e))for(r=0,s=e.length;r<s;r++)t.call(null,e[r],r,e);else{if(J(e))return;const i=n?Object.getOwnPropertyNames(e):Object.keys(e),o=i.length;let c;for(r=0;r<o;r++)c=i[r],t.call(null,e[c],c,e)}}function Ke(e,t){if(J(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r=n.length,s;for(;r-- >0;)if(s=n[r],t===s.toLowerCase())return s;return null}const k=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:typeof window<\"u\"?window:global,ve=e=>!H(e)&&e!==k;function pe(){const{caseless:e,skipUndefined:t}=ve(this)&&this||{},n={},r=(s,i)=>{const o=e&&Ke(n,i)||i;Y(n[o])&&Y(s)?n[o]=pe(n[o],s):Y(s)?n[o]=pe({},s):M(s)?n[o]=s.slice():(!t||!H(s))&&(n[o]=s)};for(let s=0,i=arguments.length;s<i;s++)arguments[s]&&W(arguments[s],r);return n}const Pt=(e,t,n,{allOwnKeys:r}={})=>(W(t,(s,i)=>{n&&T(s)?Object.defineProperty(e,i,{value:ze(s,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,i,{value:s,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),Ft=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Ut=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,\"constructor\",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,\"super\",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Dt=(e,t,n,r)=>{let s,i,o;const c={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),i=s.length;i-- >0;)o=s[i],(!r||r(o,e,t))&&!c[o]&&(t[o]=e[o],c[o]=!0);e=n!==!1&&be(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Lt=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},Bt=e=>{if(!e)return null;if(M(e))return e;let t=e.length;if(!We(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},kt=(e=>t=>e&&t instanceof e)(typeof Uint8Array<\"u\"&&be(Uint8Array)),jt=(e,t)=>{const r=(e&&e[re]).call(e);let s;for(;(s=r.next())&&!s.done;){const i=s.value;t.call(e,i[0],i[1])}},qt=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},It=_(\"HTMLFormElement\"),Ht=e=>e.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,function(n,r,s){return r.toUpperCase()+s}),xe=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Mt=_(\"RegExp\"),Xe=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};W(n,(s,i)=>{let o;(o=t(s,i,e))!==!1&&(r[i]=o||s)}),Object.defineProperties(e,r)},$t=e=>{Xe(e,(t,n)=>{if(T(e)&&[\"arguments\",\"caller\",\"callee\"].indexOf(n)!==-1)return!1;const r=e[n];if(T(r)){if(t.enumerable=!1,\"writable\"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error(\"Can not rewrite read-only method '\"+n+\"'\")})}})},zt=(e,t)=>{const n={},r=s=>{s.forEach(i=>{n[i]=!0})};return M(e)?r(e):r(String(e).split(t)),n},Jt=()=>{},Vt=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Wt(e){return!!(e&&T(e.append)&&e[Je]===\"FormData\"&&e[re])}const Kt=e=>{const t=new Array(10),n=(r,s)=>{if(V(r)){if(t.indexOf(r)>=0)return;if(J(r))return r;if(!(\"toJSON\"in r)){t[s]=r;const i=M(r)?[]:{};return W(r,(o,c)=>{const d=n(o,s+1);!H(d)&&(i[c]=d)}),t[s]=void 0,i}}return r};return n(e,0)},vt=_(\"AsyncFunction\"),Xt=e=>e&&(V(e)||T(e))&&T(e.then)&&T(e.catch),Ge=((e,t)=>e?setImmediate:t?((n,r)=>(k.addEventListener(\"message\",({source:s,data:i})=>{s===k&&i===n&&r.length&&r.shift()()},!1),s=>{r.push(s),k.postMessage(n,\"*\")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate==\"function\",T(k.postMessage)),Gt=typeof queueMicrotask<\"u\"?queueMicrotask.bind(k):typeof process<\"u\"&&process.nextTick||Ge,Qt=e=>e!=null&&T(e[re]),a={isArray:M,isArrayBuffer:Ve,isBuffer:J,isFormData:Ot,isArrayBufferView:ht,isString:mt,isNumber:We,isBoolean:yt,isObject:V,isPlainObject:Y,isEmptyObject:bt,isReadableStream:At,isRequest:Ct,isResponse:xt,isHeaders:Nt,isUndefined:H,isDate:wt,isFile:Et,isBlob:Rt,isRegExp:Mt,isFunction:T,isStream:St,isURLSearchParams:Tt,isTypedArray:kt,isFileList:gt,forEach:W,merge:pe,extend:Pt,trim:_t,stripBOM:Ft,inherits:Ut,toFlatObject:Dt,kindOf:se,kindOfTest:_,endsWith:Lt,toArray:Bt,forEachEntry:jt,matchAll:qt,isHTMLForm:It,hasOwnProperty:xe,hasOwnProp:xe,reduceDescriptors:Xe,freezeMethods:$t,toObjectSet:zt,toCamelCase:Ht,noop:Jt,toFiniteNumber:Vt,findKey:Ke,global:k,isContextDefined:ve,isSpecCompliantForm:Wt,toJSONObject:Kt,isAsyncFn:vt,isThenable:Xt,setImmediate:Ge,asap:Gt,isIterable:Qt};let m=class Qe extends Error{static from(t,n,r,s,i,o){const c=new Qe(t.message,n||t.code,r,s,i);return c.cause=t,c.name=t.name,o&&Object.assign(c,o),c}constructor(t,n,r,s,i){super(t),this.name=\"AxiosError\",this.isAxiosError=!0,n&&(this.code=n),r&&(this.config=r),s&&(this.request=s),i&&(this.response=i,this.status=i.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:a.toJSONObject(this.config),code:this.code,status:this.status}}};m.ERR_BAD_OPTION_VALUE=\"ERR_BAD_OPTION_VALUE\";m.ERR_BAD_OPTION=\"ERR_BAD_OPTION\";m.ECONNABORTED=\"ECONNABORTED\";m.ETIMEDOUT=\"ETIMEDOUT\";m.ERR_NETWORK=\"ERR_NETWORK\";m.ERR_FR_TOO_MANY_REDIRECTS=\"ERR_FR_TOO_MANY_REDIRECTS\";m.ERR_DEPRECATED=\"ERR_DEPRECATED\";m.ERR_BAD_RESPONSE=\"ERR_BAD_RESPONSE\";m.ERR_BAD_REQUEST=\"ERR_BAD_REQUEST\";m.ERR_CANCELED=\"ERR_CANCELED\";m.ERR_NOT_SUPPORT=\"ERR_NOT_SUPPORT\";m.ERR_INVALID_URL=\"ERR_INVALID_URL\";const Zt=null;function he(e){return a.isPlainObject(e)||a.isArray(e)}function Ze(e){return a.endsWith(e,\"[]\")?e.slice(0,-2):e}function Ne(e,t,n){return e?e.concat(t).map(function(s,i){return s=Ze(s),!n&&i?\"[\"+s+\"]\":s}).join(n?\".\":\"\"):t}function Yt(e){return a.isArray(e)&&!e.some(he)}const en=a.toFlatObject(a,{},null,function(t){return/^is[A-Z]/.test(t)});function ie(e,t,n){if(!a.isObject(e))throw new TypeError(\"target must be an object\");t=t||new FormData,n=a.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y,p){return!a.isUndefined(p[y])});const r=n.metaTokens,s=n.visitor||l,i=n.dots,o=n.indexes,d=(n.Blob||typeof Blob<\"u\"&&Blob)&&a.isSpecCompliantForm(t);if(!a.isFunction(s))throw new TypeError(\"visitor must be a function\");function f(u){if(u===null)return\"\";if(a.isDate(u))return u.toISOString();if(a.isBoolean(u))return u.toString();if(!d&&a.isBlob(u))throw new m(\"Blob is not supported. Use a Buffer instead.\");return a.isArrayBuffer(u)||a.isTypedArray(u)?d&&typeof Blob==\"function\"?new Blob([u]):Buffer.from(u):u}function l(u,y,p){let E=u;if(u&&!p&&typeof u==\"object\"){if(a.endsWith(y,\"{}\"))y=r?y:y.slice(0,-2),u=JSON.stringify(u);else if(a.isArray(u)&&Yt(u)||(a.isFileList(u)||a.endsWith(y,\"[]\"))&&(E=a.toArray(u)))return y=Ze(y),E.forEach(function(R,O){!(a.isUndefined(R)||R===null)&&t.append(o===!0?Ne([y],O,i):o===null?y:y+\"[]\",f(R))}),!1}return he(u)?!0:(t.append(Ne(p,y,i),f(u)),!1)}const h=[],b=Object.assign(en,{defaultVisitor:l,convertValue:f,isVisitable:he});function g(u,y){if(!a.isUndefined(u)){if(h.indexOf(u)!==-1)throw Error(\"Circular reference detected in \"+y.join(\".\"));h.push(u),a.forEach(u,function(E,C){(!(a.isUndefined(E)||E===null)&&s.call(t,E,a.isString(C)?C.trim():C,y,b))===!0&&g(E,y?y.concat(C):[C])}),h.pop()}}if(!a.isObject(e))throw new TypeError(\"data must be an object\");return g(e),t}function _e(e){const t={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\",\"%00\":\"\\0\"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function we(e,t){this._pairs=[],e&&ie(e,this,t)}const Ye=we.prototype;Ye.append=function(t,n){this._pairs.push([t,n])};Ye.toString=function(t){const n=t?function(r){return t.call(this,r,_e)}:_e;return this._pairs.map(function(s){return n(s[0])+\"=\"+n(s[1])},\"\").join(\"&\")};function tn(e){return encodeURIComponent(e).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\")}function et(e,t,n){if(!t)return e;const r=n&&n.encode||tn,s=a.isFunction(n)?{serialize:n}:n,i=s&&s.serialize;let o;if(i?o=i(t,s):o=a.isURLSearchParams(t)?t.toString():new we(t,s).toString(r),o){const c=e.indexOf(\"#\");c!==-1&&(e=e.slice(0,c)),e+=(e.indexOf(\"?\")===-1?\"?\":\"&\")+o}return e}class Pe{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){a.forEach(this.handlers,function(r){r!==null&&t(r)})}}const tt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},nn=typeof URLSearchParams<\"u\"?URLSearchParams:we,rn=typeof FormData<\"u\"?FormData:null,sn=typeof Blob<\"u\"?Blob:null,on={isBrowser:!0,classes:{URLSearchParams:nn,FormData:rn,Blob:sn},protocols:[\"http\",\"https\",\"file\",\"blob\",\"url\",\"data\"]},Ee=typeof window<\"u\"&&typeof document<\"u\",me=typeof navigator==\"object\"&&navigator||void 0,an=Ee&&(!me||[\"ReactNative\",\"NativeScript\",\"NS\"].indexOf(me.product)<0),cn=typeof WorkerGlobalScope<\"u\"&&self instanceof WorkerGlobalScope&&typeof self.importScripts==\"function\",ln=Ee&&window.location.href||\"http://localhost\",un=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Ee,hasStandardBrowserEnv:an,hasStandardBrowserWebWorkerEnv:cn,navigator:me,origin:ln},Symbol.toStringTag,{value:\"Module\"})),S={...un,...on};function fn(e,t){return ie(e,new S.classes.URLSearchParams,{visitor:function(n,r,s,i){return S.isNode&&a.isBuffer(n)?(this.append(r,n.toString(\"base64\")),!1):i.defaultVisitor.apply(this,arguments)},...t})}function dn(e){return a.matchAll(/\\w+|\\[(\\w*)]/g,e).map(t=>t[0]===\"[]\"?\"\":t[1]||t[0])}function pn(e){const t={},n=Object.keys(e);let r;const s=n.length;let i;for(r=0;r<s;r++)i=n[r],t[i]=e[i];return t}function nt(e){function t(n,r,s,i){let o=n[i++];if(o===\"__proto__\")return!0;const c=Number.isFinite(+o),d=i>=n.length;return o=!o&&a.isArray(s)?s.length:o,d?(a.hasOwnProp(s,o)?s[o]=[s[o],r]:s[o]=r,!c):((!s[o]||!a.isObject(s[o]))&&(s[o]=[]),t(n,r,s[o],i)&&a.isArray(s[o])&&(s[o]=pn(s[o])),!c)}if(a.isFormData(e)&&a.isFunction(e.entries)){const n={};return a.forEachEntry(e,(r,s)=>{t(dn(r),s,n,0)}),n}return null}function hn(e,t,n){if(a.isString(e))try{return(t||JSON.parse)(e),a.trim(e)}catch(r){if(r.name!==\"SyntaxError\")throw r}return(n||JSON.stringify)(e)}const K={transitional:tt,adapter:[\"xhr\",\"http\",\"fetch\"],transformRequest:[function(t,n){const r=n.getContentType()||\"\",s=r.indexOf(\"application/json\")>-1,i=a.isObject(t);if(i&&a.isHTMLForm(t)&&(t=new FormData(t)),a.isFormData(t))return s?JSON.stringify(nt(t)):t;if(a.isArrayBuffer(t)||a.isBuffer(t)||a.isStream(t)||a.isFile(t)||a.isBlob(t)||a.isReadableStream(t))return t;if(a.isArrayBufferView(t))return t.buffer;if(a.isURLSearchParams(t))return n.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\",!1),t.toString();let c;if(i){if(r.indexOf(\"application/x-www-form-urlencoded\")>-1)return fn(t,this.formSerializer).toString();if((c=a.isFileList(t))||r.indexOf(\"multipart/form-data\")>-1){const d=this.env&&this.env.FormData;return ie(c?{\"files[]\":t}:t,d&&new d,this.formSerializer)}}return i||s?(n.setContentType(\"application/json\",!1),hn(t)):t}],transformResponse:[function(t){const n=this.transitional||K.transitional,r=n&&n.forcedJSONParsing,s=this.responseType===\"json\";if(a.isResponse(t)||a.isReadableStream(t))return t;if(t&&a.isString(t)&&(r&&!this.responseType||s)){const o=!(n&&n.silentJSONParsing)&&s;try{return JSON.parse(t,this.parseReviver)}catch(c){if(o)throw c.name===\"SyntaxError\"?m.from(c,m.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,env:{FormData:S.classes.FormData,Blob:S.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:\"application/json, text/plain, */*\",\"Content-Type\":void 0}}};a.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\"],e=>{K.headers[e]={}});const mn=a.toObjectSet([\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"]),yn=e=>{const t={};let n,r,s;return e&&e.split(`\n`).forEach(function(o){s=o.indexOf(\":\"),n=o.substring(0,s).trim().toLowerCase(),r=o.substring(s+1).trim(),!(!n||t[n]&&mn[n])&&(n===\"set-cookie\"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+\", \"+r:r)}),t},Fe=Symbol(\"internals\");function z(e){return e&&String(e).trim().toLowerCase()}function ee(e){return e===!1||e==null?e:a.isArray(e)?e.map(ee):String(e)}function bn(e){const t=Object.create(null),n=/([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const wn=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function ue(e,t,n,r,s){if(a.isFunction(r))return r.call(this,t,n);if(s&&(t=n),!!a.isString(t)){if(a.isString(r))return t.indexOf(r)!==-1;if(a.isRegExp(r))return r.test(t)}}function En(e){return e.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function Rn(e,t){const n=a.toCamelCase(\" \"+t);[\"get\",\"set\",\"has\"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(s,i,o){return this[r].call(this,t,s,i,o)},configurable:!0})})}let A=class{constructor(t){t&&this.set(t)}set(t,n,r){const s=this;function i(c,d,f){const l=z(d);if(!l)throw new Error(\"header name must be a non-empty string\");const h=a.findKey(s,l);(!h||s[h]===void 0||f===!0||f===void 0&&s[h]!==!1)&&(s[h||d]=ee(c))}const o=(c,d)=>a.forEach(c,(f,l)=>i(f,l,d));if(a.isPlainObject(t)||t instanceof this.constructor)o(t,n);else if(a.isString(t)&&(t=t.trim())&&!wn(t))o(yn(t),n);else if(a.isObject(t)&&a.isIterable(t)){let c={},d,f;for(const l of t){if(!a.isArray(l))throw TypeError(\"Object iterator must return a key-value pair\");c[f=l[0]]=(d=c[f])?a.isArray(d)?[...d,l[1]]:[d,l[1]]:l[1]}o(c,n)}else t!=null&&i(n,t,r);return this}get(t,n){if(t=z(t),t){const r=a.findKey(this,t);if(r){const s=this[r];if(!n)return s;if(n===!0)return bn(s);if(a.isFunction(n))return n.call(this,s,r);if(a.isRegExp(n))return n.exec(s);throw new TypeError(\"parser must be boolean|regexp|function\")}}}has(t,n){if(t=z(t),t){const r=a.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||ue(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let s=!1;function i(o){if(o=z(o),o){const c=a.findKey(r,o);c&&(!n||ue(r,r[c],c,n))&&(delete r[c],s=!0)}}return a.isArray(t)?t.forEach(i):i(t),s}clear(t){const n=Object.keys(this);let r=n.length,s=!1;for(;r--;){const i=n[r];(!t||ue(this,this[i],i,t,!0))&&(delete this[i],s=!0)}return s}normalize(t){const n=this,r={};return a.forEach(this,(s,i)=>{const o=a.findKey(r,i);if(o){n[o]=ee(s),delete n[i];return}const c=t?En(i):String(i).trim();c!==i&&delete n[i],n[c]=ee(s),r[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return a.forEach(this,(r,s)=>{r!=null&&r!==!1&&(n[s]=t&&a.isArray(r)?r.join(\", \"):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+\": \"+n).join(`\n`)}getSetCookie(){return this.get(\"set-cookie\")||[]}get[Symbol.toStringTag](){return\"AxiosHeaders\"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(s=>r.set(s)),r}static accessor(t){const r=(this[Fe]=this[Fe]={accessors:{}}).accessors,s=this.prototype;function i(o){const c=z(o);r[c]||(Rn(s,o),r[c]=!0)}return a.isArray(t)?t.forEach(i):i(t),this}};A.accessor([\"Content-Type\",\"Content-Length\",\"Accept\",\"Accept-Encoding\",\"User-Agent\",\"Authorization\"]);a.reduceDescriptors(A.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});a.freezeMethods(A);function fe(e,t){const n=this||K,r=t||n,s=A.from(r.headers);let i=r.data;return a.forEach(e,function(c){i=c.call(n,i,s.normalize(),t?t.status:void 0)}),s.normalize(),i}function rt(e){return!!(e&&e.__CANCEL__)}let v=class extends m{constructor(t,n,r){super(t??\"canceled\",m.ERR_CANCELED,n,r),this.name=\"CanceledError\",this.__CANCEL__=!0}};function st(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new m(\"Request failed with status code \"+n.status,[m.ERR_BAD_REQUEST,m.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function gn(e){const t=/^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(e);return t&&t[1]||\"\"}function Sn(e,t){e=e||10;const n=new Array(e),r=new Array(e);let s=0,i=0,o;return t=t!==void 0?t:1e3,function(d){const f=Date.now(),l=r[i];o||(o=f),n[s]=d,r[s]=f;let h=i,b=0;for(;h!==s;)b+=n[h++],h=h%e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),f-o<t)return;const g=l&&f-l;return g?Math.round(b*1e3/g):void 0}}function On(e,t){let n=0,r=1e3/t,s,i;const o=(f,l=Date.now())=>{n=l,s=null,i&&(clearTimeout(i),i=null),e(...f)};return[(...f)=>{const l=Date.now(),h=l-n;h>=r?o(f,l):(s=f,i||(i=setTimeout(()=>{i=null,o(s)},r-h)))},()=>s&&o(s)]}const ne=(e,t,n=3)=>{let r=0;const s=Sn(50,250);return On(i=>{const o=i.loaded,c=i.lengthComputable?i.total:void 0,d=o-r,f=s(d),l=o<=c;r=o;const h={loaded:o,total:c,progress:c?o/c:void 0,bytes:d,rate:f||void 0,estimated:f&&c&&l?(c-o)/f:void 0,event:i,lengthComputable:c!=null,[t?\"download\":\"upload\"]:!0};e(h)},n)},Ue=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},De=e=>(...t)=>a.asap(()=>e(...t)),Tn=S.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,S.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(S.origin),S.navigator&&/(msie|trident)/i.test(S.navigator.userAgent)):()=>!0,An=S.hasStandardBrowserEnv?{write(e,t,n,r,s,i,o){if(typeof document>\"u\")return;const c=[`${e}=${encodeURIComponent(t)}`];a.isNumber(n)&&c.push(`expires=${new Date(n).toUTCString()}`),a.isString(r)&&c.push(`path=${r}`),a.isString(s)&&c.push(`domain=${s}`),i===!0&&c.push(\"secure\"),a.isString(o)&&c.push(`SameSite=${o}`),document.cookie=c.join(\"; \")},read(e){if(typeof document>\"u\")return null;const t=document.cookie.match(new RegExp(\"(?:^|; )\"+e+\"=([^;]*)\"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,\"\",Date.now()-864e5,\"/\")}}:{write(){},read(){return null},remove(){}};function Cn(e){return/^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(e)}function xn(e,t){return t?e.replace(/\\/?\\/$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}function ot(e,t,n){let r=!Cn(t);return e&&(r||n==!1)?xn(e,t):t}const Le=e=>e instanceof A?{...e}:e;function q(e,t){t=t||{};const n={};function r(f,l,h,b){return a.isPlainObject(f)&&a.isPlainObject(l)?a.merge.call({caseless:b},f,l):a.isPlainObject(l)?a.merge({},l):a.isArray(l)?l.slice():l}function s(f,l,h,b){if(a.isUndefined(l)){if(!a.isUndefined(f))return r(void 0,f,h,b)}else return r(f,l,h,b)}function i(f,l){if(!a.isUndefined(l))return r(void 0,l)}function o(f,l){if(a.isUndefined(l)){if(!a.isUndefined(f))return r(void 0,f)}else return r(void 0,l)}function c(f,l,h){if(h in t)return r(f,l);if(h in e)return r(void 0,f)}const d={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:c,headers:(f,l,h)=>s(Le(f),Le(l),h,!0)};return a.forEach(Object.keys({...e,...t}),function(l){const h=d[l]||s,b=h(e[l],t[l],l);a.isUndefined(b)&&h!==c||(n[l]=b)}),n}const it=e=>{const t=q({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:s,xsrfCookieName:i,headers:o,auth:c}=t;if(t.headers=o=A.from(o),t.url=et(ot(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&o.set(\"Authorization\",\"Basic \"+btoa((c.username||\"\")+\":\"+(c.password?unescape(encodeURIComponent(c.password)):\"\"))),a.isFormData(n)){if(S.hasStandardBrowserEnv||S.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(a.isFunction(n.getHeaders)){const d=n.getHeaders(),f=[\"content-type\",\"content-length\"];Object.entries(d).forEach(([l,h])=>{f.includes(l.toLowerCase())&&o.set(l,h)})}}if(S.hasStandardBrowserEnv&&(r&&a.isFunction(r)&&(r=r(t)),r||r!==!1&&Tn(t.url))){const d=s&&i&&An.read(i);d&&o.set(s,d)}return t},Nn=typeof XMLHttpRequest<\"u\",_n=Nn&&function(e){return new Promise(function(n,r){const s=it(e);let i=s.data;const o=A.from(s.headers).normalize();let{responseType:c,onUploadProgress:d,onDownloadProgress:f}=s,l,h,b,g,u;function y(){g&&g(),u&&u(),s.cancelToken&&s.cancelToken.unsubscribe(l),s.signal&&s.signal.removeEventListener(\"abort\",l)}let p=new XMLHttpRequest;p.open(s.method.toUpperCase(),s.url,!0),p.timeout=s.timeout;function E(){if(!p)return;const R=A.from(\"getAllResponseHeaders\"in p&&p.getAllResponseHeaders()),N={data:!c||c===\"text\"||c===\"json\"?p.responseText:p.response,status:p.status,statusText:p.statusText,headers:R,config:e,request:p};st(function(x){n(x),y()},function(x){r(x),y()},N),p=null}\"onloadend\"in p?p.onloadend=E:p.onreadystatechange=function(){!p||p.readyState!==4||p.status===0&&!(p.responseURL&&p.responseURL.indexOf(\"file:\")===0)||setTimeout(E)},p.onabort=function(){p&&(r(new m(\"Request aborted\",m.ECONNABORTED,e,p)),p=null)},p.onerror=function(O){const N=O&&O.message?O.message:\"Network Error\",L=new m(N,m.ERR_NETWORK,e,p);L.event=O||null,r(L),p=null},p.ontimeout=function(){let O=s.timeout?\"timeout of \"+s.timeout+\"ms exceeded\":\"timeout exceeded\";const N=s.transitional||tt;s.timeoutErrorMessage&&(O=s.timeoutErrorMessage),r(new m(O,N.clarifyTimeoutError?m.ETIMEDOUT:m.ECONNABORTED,e,p)),p=null},i===void 0&&o.setContentType(null),\"setRequestHeader\"in p&&a.forEach(o.toJSON(),function(O,N){p.setRequestHeader(N,O)}),a.isUndefined(s.withCredentials)||(p.withCredentials=!!s.withCredentials),c&&c!==\"json\"&&(p.responseType=s.responseType),f&&([b,u]=ne(f,!0),p.addEventListener(\"progress\",b)),d&&p.upload&&([h,g]=ne(d),p.upload.addEventListener(\"progress\",h),p.upload.addEventListener(\"loadend\",g)),(s.cancelToken||s.signal)&&(l=R=>{p&&(r(!R||R.type?new v(null,e,p):R),p.abort(),p=null)},s.cancelToken&&s.cancelToken.subscribe(l),s.signal&&(s.signal.aborted?l():s.signal.addEventListener(\"abort\",l)));const C=gn(s.url);if(C&&S.protocols.indexOf(C)===-1){r(new m(\"Unsupported protocol \"+C+\":\",m.ERR_BAD_REQUEST,e));return}p.send(i||null)})},Pn=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,s;const i=function(f){if(!s){s=!0,c();const l=f instanceof Error?f:this.reason;r.abort(l instanceof m?l:new v(l instanceof Error?l.message:l))}};let o=t&&setTimeout(()=>{o=null,i(new m(`timeout of ${t}ms exceeded`,m.ETIMEDOUT))},t);const c=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(f=>{f.unsubscribe?f.unsubscribe(i):f.removeEventListener(\"abort\",i)}),e=null)};e.forEach(f=>f.addEventListener(\"abort\",i));const{signal:d}=r;return d.unsubscribe=()=>a.asap(c),d}},Fn=function*(e,t){let n=e.byteLength;if(n<t){yield e;return}let r=0,s;for(;r<n;)s=r+t,yield e.slice(r,s),r=s},Un=async function*(e,t){for await(const n of Dn(e))yield*Fn(n,t)},Dn=async function*(e){if(e[Symbol.asyncIterator]){yield*e;return}const t=e.getReader();try{for(;;){const{done:n,value:r}=await t.read();if(n)break;yield r}}finally{await t.cancel()}},Be=(e,t,n,r)=>{const s=Un(e,t);let i=0,o,c=d=>{o||(o=!0,r&&r(d))};return new ReadableStream({async pull(d){try{const{done:f,value:l}=await s.next();if(f){c(),d.close();return}let h=l.byteLength;if(n){let b=i+=h;n(b)}d.enqueue(new Uint8Array(l))}catch(f){throw c(f),f}},cancel(d){return c(d),s.return()}},{highWaterMark:2})},ke=64*1024,{isFunction:Z}=a,Ln=(({Request:e,Response:t})=>({Request:e,Response:t}))(a.global),{ReadableStream:je,TextEncoder:qe}=a.global,Ie=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Bn=e=>{e=a.merge.call({skipUndefined:!0},Ln,e);const{fetch:t,Request:n,Response:r}=e,s=t?Z(t):typeof fetch==\"function\",i=Z(n),o=Z(r);if(!s)return!1;const c=s&&Z(je),d=s&&(typeof qe==\"function\"?(u=>y=>u.encode(y))(new qe):async u=>new Uint8Array(await new n(u).arrayBuffer())),f=i&&c&&Ie(()=>{let u=!1;const y=new n(S.origin,{body:new je,method:\"POST\",get duplex(){return u=!0,\"half\"}}).headers.has(\"Content-Type\");return u&&!y}),l=o&&c&&Ie(()=>a.isReadableStream(new r(\"\").body)),h={stream:l&&(u=>u.body)};s&&[\"text\",\"arrayBuffer\",\"blob\",\"formData\",\"stream\"].forEach(u=>{!h[u]&&(h[u]=(y,p)=>{let E=y&&y[u];if(E)return E.call(y);throw new m(`Response type '${u}' is not supported`,m.ERR_NOT_SUPPORT,p)})});const b=async u=>{if(u==null)return 0;if(a.isBlob(u))return u.size;if(a.isSpecCompliantForm(u))return(await new n(S.origin,{method:\"POST\",body:u}).arrayBuffer()).byteLength;if(a.isArrayBufferView(u)||a.isArrayBuffer(u))return u.byteLength;if(a.isURLSearchParams(u)&&(u=u+\"\"),a.isString(u))return(await d(u)).byteLength},g=async(u,y)=>{const p=a.toFiniteNumber(u.getContentLength());return p??b(y)};return async u=>{let{url:y,method:p,data:E,signal:C,cancelToken:R,timeout:O,onDownloadProgress:N,onUploadProgress:L,responseType:x,headers:ce,withCredentials:X=\"same-origin\",fetchOptions:ge}=it(u),Se=t||fetch;x=x?(x+\"\").toLowerCase():\"text\";let G=Pn([C,R&&R.toAbortSignal()],O),$=null;const B=G&&G.unsubscribe&&(()=>{G.unsubscribe()});let Oe;try{if(L&&f&&p!==\"get\"&&p!==\"head\"&&(Oe=await g(ce,E))!==0){let D=new n(y,{method:\"POST\",body:E,duplex:\"half\"}),I;if(a.isFormData(E)&&(I=D.headers.get(\"content-type\"))&&ce.setContentType(I),D.body){const[le,Q]=Ue(Oe,ne(De(L)));E=Be(D.body,ke,le,Q)}}a.isString(X)||(X=X?\"include\":\"omit\");const P=i&&\"credentials\"in n.prototype,Te={...ge,signal:G,method:p.toUpperCase(),headers:ce.normalize().toJSON(),body:E,duplex:\"half\",credentials:P?X:void 0};$=i&&new n(y,Te);let U=await(i?Se($,ge):Se(y,Te));const Ae=l&&(x===\"stream\"||x===\"response\");if(l&&(N||Ae&&B)){const D={};[\"status\",\"statusText\",\"headers\"].forEach(Ce=>{D[Ce]=U[Ce]});const I=a.toFiniteNumber(U.headers.get(\"content-length\")),[le,Q]=N&&Ue(I,ne(De(N),!0))||[];U=new r(Be(U.body,ke,le,()=>{Q&&Q(),B&&B()}),D)}x=x||\"text\";let dt=await h[a.findKey(h,x)||\"text\"](U,u);return!Ae&&B&&B(),await new Promise((D,I)=>{st(D,I,{data:dt,headers:A.from(U.headers),status:U.status,statusText:U.statusText,config:u,request:$})})}catch(P){throw B&&B(),P&&P.name===\"TypeError\"&&/Load failed|fetch/i.test(P.message)?Object.assign(new m(\"Network Error\",m.ERR_NETWORK,u,$),{cause:P.cause||P}):m.from(P,P&&P.code,u,$)}}},kn=new Map,at=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:s}=t,i=[r,s,n];let o=i.length,c=o,d,f,l=kn;for(;c--;)d=i[c],f=l.get(d),f===void 0&&l.set(d,f=c?new Map:Bn(t)),l=f;return f};at();const Re={http:Zt,xhr:_n,fetch:{get:at}};a.forEach(Re,(e,t)=>{if(e){try{Object.defineProperty(e,\"name\",{value:t})}catch{}Object.defineProperty(e,\"adapterName\",{value:t})}});const He=e=>`- ${e}`,jn=e=>a.isFunction(e)||e===null||e===!1;function qn(e,t){e=a.isArray(e)?e:[e];const{length:n}=e;let r,s;const i={};for(let o=0;o<n;o++){r=e[o];let c;if(s=r,!jn(r)&&(s=Re[(c=String(r)).toLowerCase()],s===void 0))throw new m(`Unknown adapter '${c}'`);if(s&&(a.isFunction(s)||(s=s.get(t))))break;i[c||\"#\"+o]=s}if(!s){const o=Object.entries(i).map(([d,f])=>`adapter ${d} `+(f===!1?\"is not supported by the environment\":\"is not available in the build\"));let c=n?o.length>1?`since :\n`+o.map(He).join(`\n`):\" \"+He(o[0]):\"as no adapter specified\";throw new m(\"There is no suitable adapter to dispatch the request \"+c,\"ERR_NOT_SUPPORT\")}return s}const ct={getAdapter:qn,adapters:Re};function de(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new v(null,e)}function Me(e){return de(e),e.headers=A.from(e.headers),e.data=fe.call(e,e.transformRequest),[\"post\",\"put\",\"patch\"].indexOf(e.method)!==-1&&e.headers.setContentType(\"application/x-www-form-urlencoded\",!1),ct.getAdapter(e.adapter||K.adapter,e)(e).then(function(r){return de(e),r.data=fe.call(e,e.transformResponse,r),r.headers=A.from(r.headers),r},function(r){return rt(r)||(de(e),r&&r.response&&(r.response.data=fe.call(e,e.transformResponse,r.response),r.response.headers=A.from(r.response.headers))),Promise.reject(r)})}const lt=\"1.13.4\",ae={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach((e,t)=>{ae[e]=function(r){return typeof r===e||\"a\"+(t<1?\"n \":\" \")+e}});const $e={};ae.transitional=function(t,n,r){function s(i,o){return\"[Axios v\"+lt+\"] Transitional option '\"+i+\"'\"+o+(r?\". \"+r:\"\")}return(i,o,c)=>{if(t===!1)throw new m(s(o,\" has been removed\"+(n?\" in \"+n:\"\")),m.ERR_DEPRECATED);return n&&!$e[o]&&($e[o]=!0,console.warn(s(o,\" has been deprecated since v\"+n+\" and will be removed in the near future\"))),t?t(i,o,c):!0}};ae.spelling=function(t){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${t}`),!0)};function In(e,t,n){if(typeof e!=\"object\")throw new m(\"options must be an object\",m.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let s=r.length;for(;s-- >0;){const i=r[s],o=t[i];if(o){const c=e[i],d=c===void 0||o(c,i,e);if(d!==!0)throw new m(\"option \"+i+\" must be \"+d,m.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new m(\"Unknown option \"+i,m.ERR_BAD_OPTION)}}const te={assertOptions:In,validators:ae},F=te.validators;let j=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Pe,response:new Pe}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let s={};Error.captureStackTrace?Error.captureStackTrace(s):s=new Error;const i=s.stack?s.stack.replace(/^.+\\n/,\"\"):\"\";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\\n.+\\n/,\"\"))&&(r.stack+=`\n`+i):r.stack=i}catch{}}throw r}}_request(t,n){typeof t==\"string\"?(n=n||{},n.url=t):n=t||{},n=q(this.defaults,n);const{transitional:r,paramsSerializer:s,headers:i}=n;r!==void 0&&te.assertOptions(r,{silentJSONParsing:F.transitional(F.boolean),forcedJSONParsing:F.transitional(F.boolean),clarifyTimeoutError:F.transitional(F.boolean)},!1),s!=null&&(a.isFunction(s)?n.paramsSerializer={serialize:s}:te.assertOptions(s,{encode:F.function,serialize:F.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),te.assertOptions(n,{baseUrl:F.spelling(\"baseURL\"),withXsrfToken:F.spelling(\"withXSRFToken\")},!0),n.method=(n.method||this.defaults.method||\"get\").toLowerCase();let o=i&&a.merge(i.common,i[n.method]);i&&a.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],u=>{delete i[u]}),n.headers=A.concat(o,i);const c=[];let d=!0;this.interceptors.request.forEach(function(y){typeof y.runWhen==\"function\"&&y.runWhen(n)===!1||(d=d&&y.synchronous,c.unshift(y.fulfilled,y.rejected))});const f=[];this.interceptors.response.forEach(function(y){f.push(y.fulfilled,y.rejected)});let l,h=0,b;if(!d){const u=[Me.bind(this),void 0];for(u.unshift(...c),u.push(...f),b=u.length,l=Promise.resolve(n);h<b;)l=l.then(u[h++],u[h++]);return l}b=c.length;let g=n;for(;h<b;){const u=c[h++],y=c[h++];try{g=u(g)}catch(p){y.call(this,p);break}}try{l=Me.call(this,g)}catch(u){return Promise.reject(u)}for(h=0,b=f.length;h<b;)l=l.then(f[h++],f[h++]);return l}getUri(t){t=q(this.defaults,t);const n=ot(t.baseURL,t.url,t.allowAbsoluteUrls);return et(n,t.params,t.paramsSerializer)}};a.forEach([\"delete\",\"get\",\"head\",\"options\"],function(t){j.prototype[t]=function(n,r){return this.request(q(r||{},{method:t,url:n,data:(r||{}).data}))}});a.forEach([\"post\",\"put\",\"patch\"],function(t){function n(r){return function(i,o,c){return this.request(q(c||{},{method:t,headers:r?{\"Content-Type\":\"multipart/form-data\"}:{},url:i,data:o}))}}j.prototype[t]=n(),j.prototype[t+\"Form\"]=n(!0)});let Hn=class ut{constructor(t){if(typeof t!=\"function\")throw new TypeError(\"executor must be a function.\");let n;this.promise=new Promise(function(i){n=i});const r=this;this.promise.then(s=>{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](s);r._listeners=null}),this.promise.then=s=>{let i;const o=new Promise(c=>{r.subscribe(c),i=c}).then(s);return o.cancel=function(){r.unsubscribe(i)},o},t(function(i,o,c){r.reason||(r.reason=new v(i,o,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new ut(function(s){t=s}),cancel:t}}};function Mn(e){return function(n){return e.apply(null,n)}}function $n(e){return a.isObject(e)&&e.isAxiosError===!0}const ye={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ye).forEach(([e,t])=>{ye[t]=e});function ft(e){const t=new j(e),n=ze(j.prototype.request,t);return a.extend(n,j.prototype,t,{allOwnKeys:!0}),a.extend(n,t,null,{allOwnKeys:!0}),n.create=function(s){return ft(q(e,s))},n}const w=ft(K);w.Axios=j;w.CanceledError=v;w.CancelToken=Hn;w.isCancel=rt;w.VERSION=lt;w.toFormData=ie;w.AxiosError=m;w.Cancel=w.CanceledError;w.all=function(t){return Promise.all(t)};w.spread=Mn;w.isAxiosError=$n;w.mergeConfig=q;w.AxiosHeaders=A;w.formToJSON=e=>nt(a.isHTMLForm(e)?new FormData(e):e);w.getAdapter=ct.getAdapter;w.HttpStatusCode=ye;w.default=w;const{Axios:Wn,AxiosError:Kn,CanceledError:vn,isCancel:Xn,CancelToken:Gn,VERSION:Qn,all:Zn,Cancel:Yn,isAxiosError:er,spread:tr,toFormData:nr,AxiosHeaders:rr,HttpStatusCode:sr,formToJSON:or,getAdapter:ir,mergeConfig:ar}=w;export{w as a};\n"
  },
  {
    "path": "public/build/assets/index.es-MeewMCO3.js",
    "content": "import{c as Da,g as il}from\"./_commonjsHelpers-Cpj98o6Y.js\";import{_ as Va}from\"./jspdf.es.min-DI22nqbU.js\";import\"./preload-helper-I4rgV-VL.js\";var fn={},cn={},cr,vn;function Q(){if(vn)return cr;vn=1;var n=function(e){return e&&e.Math===Math&&e};return cr=n(typeof globalThis==\"object\"&&globalThis)||n(typeof window==\"object\"&&window)||n(typeof self==\"object\"&&self)||n(typeof Da==\"object\"&&Da)||n(typeof cr==\"object\"&&cr)||(function(){return this})()||Function(\"return this\")(),cr}var Qr={},Zr,gn;function Z(){return gn||(gn=1,Zr=function(n){try{return!!n()}catch{return!0}}),Zr}var Jr,dn;function we(){if(dn)return Jr;dn=1;var n=Z();return Jr=!n(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Jr}var et,pn;function Ar(){if(pn)return et;pn=1;var n=Z();return et=!n(function(){var e=(function(){}).bind();return typeof e!=\"function\"||e.hasOwnProperty(\"prototype\")}),et}var rt,yn;function ne(){if(yn)return rt;yn=1;var n=Ar(),e=Function.prototype.call;return rt=n?e.bind(e):function(){return e.apply(e,arguments)},rt}var tt={},mn;function Yl(){if(mn)return tt;mn=1;var n={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,r=e&&!n.call({1:2},1);return tt.f=r?function(i){var a=e(this,i);return!!a&&a.enumerable}:n,tt}var it,bn;function Fa(){return bn||(bn=1,it=function(n,e){return{enumerable:!(n&1),configurable:!(n&2),writable:!(n&4),value:e}}),it}var at,xn;function J(){if(xn)return at;xn=1;var n=Ar(),e=Function.prototype,r=e.call,t=n&&e.bind.bind(r,r);return at=n?t:function(i){return function(){return r.apply(i,arguments)}},at}var nt,On;function er(){if(On)return nt;On=1;var n=J(),e=n({}.toString),r=n(\"\".slice);return nt=function(t){return r(e(t),8,-1)},nt}var st,Tn;function al(){if(Tn)return st;Tn=1;var n=J(),e=Z(),r=er(),t=Object,i=n(\"\".split);return st=e(function(){return!t(\"z\").propertyIsEnumerable(0)})?function(a){return r(a)===\"String\"?i(a,\"\"):t(a)}:t,st}var ot,Sn;function Ir(){return Sn||(Sn=1,ot=function(n){return n==null}),ot}var ut,En;function Pe(){if(En)return ut;En=1;var n=Ir(),e=TypeError;return ut=function(r){if(n(r))throw new e(\"Can't call method on \"+r);return r},ut}var lt,Rn;function dr(){if(Rn)return lt;Rn=1;var n=al(),e=Pe();return lt=function(r){return n(e(r))},lt}var ht,Cn;function re(){if(Cn)return ht;Cn=1;var n=typeof document==\"object\"&&document.all;return ht=typeof n>\"u\"&&n!==void 0?function(e){return typeof e==\"function\"||e===n}:function(e){return typeof e==\"function\"},ht}var ft,wn;function pe(){if(wn)return ft;wn=1;var n=re();return ft=function(e){return typeof e==\"object\"?e!==null:n(e)},ft}var ct,Pn;function rr(){if(Pn)return ct;Pn=1;var n=Q(),e=re(),r=function(t){return e(t)?t:void 0};return ct=function(t,i){return arguments.length<2?r(n[t]):n[t]&&n[t][i]},ct}var vt,An;function Nr(){if(An)return vt;An=1;var n=J();return vt=n({}.isPrototypeOf),vt}var gt,In;function pr(){if(In)return gt;In=1;var n=Q(),e=n.navigator,r=e&&e.userAgent;return gt=r?String(r):\"\",gt}var dt,Nn;function Ua(){if(Nn)return dt;Nn=1;var n=Q(),e=pr(),r=n.process,t=n.Deno,i=r&&r.versions||t&&t.version,a=i&&i.v8,s,o;return a&&(s=a.split(\".\"),o=s[0]>0&&s[0]<4?1:+(s[0]+s[1])),!o&&e&&(s=e.match(/Edge\\/(\\d+)/),(!s||s[1]>=74)&&(s=e.match(/Chrome\\/(\\d+)/),s&&(o=+s[1]))),dt=o,dt}var pt,_n;function nl(){if(_n)return pt;_n=1;var n=Ua(),e=Z(),r=Q(),t=r.String;return pt=!!Object.getOwnPropertySymbols&&!e(function(){var i=Symbol(\"symbol detection\");return!t(i)||!(Object(i)instanceof Symbol)||!Symbol.sham&&n&&n<41}),pt}var yt,Mn;function sl(){if(Mn)return yt;Mn=1;var n=nl();return yt=n&&!Symbol.sham&&typeof Symbol.iterator==\"symbol\",yt}var mt,qn;function ol(){if(qn)return mt;qn=1;var n=rr(),e=re(),r=Nr(),t=sl(),i=Object;return mt=t?function(a){return typeof a==\"symbol\"}:function(a){var s=n(\"Symbol\");return e(s)&&r(s.prototype,i(a))},mt}var bt,Dn;function _r(){if(Dn)return bt;Dn=1;var n=String;return bt=function(e){try{return n(e)}catch{return\"Object\"}},bt}var xt,Vn;function Fe(){if(Vn)return xt;Vn=1;var n=re(),e=_r(),r=TypeError;return xt=function(t){if(n(t))return t;throw new r(e(t)+\" is not a function\")},xt}var Ot,Ln;function nr(){if(Ln)return Ot;Ln=1;var n=Fe(),e=Ir();return Ot=function(r,t){var i=r[t];return e(i)?void 0:n(i)},Ot}var Tt,kn;function Xl(){if(kn)return Tt;kn=1;var n=ne(),e=re(),r=pe(),t=TypeError;return Tt=function(i,a){var s,o;if(a===\"string\"&&e(s=i.toString)&&!r(o=n(s,i))||e(s=i.valueOf)&&!r(o=n(s,i))||a!==\"string\"&&e(s=i.toString)&&!r(o=n(s,i)))return o;throw new t(\"Can't convert object to primitive value\")},Tt}var St={exports:{}},Et,jn;function Me(){return jn||(jn=1,Et=!1),Et}var Rt,Bn;function Ga(){if(Bn)return Rt;Bn=1;var n=Q(),e=Object.defineProperty;return Rt=function(r,t){try{e(n,r,{value:t,configurable:!0,writable:!0})}catch{n[r]=t}return t},Rt}var Fn;function $a(){if(Fn)return St.exports;Fn=1;var n=Me(),e=Q(),r=Ga(),t=\"__core-js_shared__\",i=St.exports=e[t]||r(t,{});return(i.versions||(i.versions=[])).push({version:\"3.48.0\",mode:n?\"pure\":\"global\",copyright:\"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.\",license:\"https://github.com/zloirock/core-js/blob/v3.48.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"}),St.exports}var Ct,Un;function za(){if(Un)return Ct;Un=1;var n=$a();return Ct=function(e,r){return n[e]||(n[e]=r||{})},Ct}var wt,Gn;function Mr(){if(Gn)return wt;Gn=1;var n=Pe(),e=Object;return wt=function(r){return e(n(r))},wt}var Pt,$n;function Ae(){if($n)return Pt;$n=1;var n=J(),e=Mr(),r=n({}.hasOwnProperty);return Pt=Object.hasOwn||function(i,a){return r(e(i),a)},Pt}var At,zn;function ul(){if(zn)return At;zn=1;var n=J(),e=0,r=Math.random(),t=n(1.1.toString);return At=function(i){return\"Symbol(\"+(i===void 0?\"\":i)+\")_\"+t(++e+r,36)},At}var It,Hn;function ae(){if(Hn)return It;Hn=1;var n=Q(),e=za(),r=Ae(),t=ul(),i=nl(),a=sl(),s=n.Symbol,o=e(\"wks\"),u=a?s.for||s:s&&s.withoutSetter||t;return It=function(l){return r(o,l)||(o[l]=i&&r(s,l)?s[l]:u(\"Symbol.\"+l)),o[l]},It}var Nt,Wn;function Kl(){if(Wn)return Nt;Wn=1;var n=ne(),e=pe(),r=ol(),t=nr(),i=Xl(),a=ae(),s=TypeError,o=a(\"toPrimitive\");return Nt=function(u,l){if(!e(u)||r(u))return u;var h=t(u,o),c;if(h){if(l===void 0&&(l=\"default\"),c=n(h,u,l),!e(c)||r(c))return c;throw new s(\"Can't convert object to primitive value\")}return l===void 0&&(l=\"number\"),i(u,l)},Nt}var _t,Yn;function ll(){if(Yn)return _t;Yn=1;var n=Kl(),e=ol();return _t=function(r){var t=n(r,\"string\");return e(t)?t:t+\"\"},_t}var Mt,Xn;function qr(){if(Xn)return Mt;Xn=1;var n=Q(),e=pe(),r=n.document,t=e(r)&&e(r.createElement);return Mt=function(i){return t?r.createElement(i):{}},Mt}var qt,Kn;function hl(){if(Kn)return qt;Kn=1;var n=we(),e=Z(),r=qr();return qt=!n&&!e(function(){return Object.defineProperty(r(\"div\"),\"a\",{get:function(){return 7}}).a!==7}),qt}var Qn;function Dr(){if(Qn)return Qr;Qn=1;var n=we(),e=ne(),r=Yl(),t=Fa(),i=dr(),a=ll(),s=Ae(),o=hl(),u=Object.getOwnPropertyDescriptor;return Qr.f=n?u:function(h,c){if(h=i(h),c=a(c),o)try{return u(h,c)}catch{}if(s(h,c))return t(!e(r.f,h,c),h[c])},Qr}var Dt={},Vt,Zn;function fl(){if(Zn)return Vt;Zn=1;var n=we(),e=Z();return Vt=n&&e(function(){return Object.defineProperty(function(){},\"prototype\",{value:42,writable:!1}).prototype!==42}),Vt}var Lt,Jn;function le(){if(Jn)return Lt;Jn=1;var n=pe(),e=String,r=TypeError;return Lt=function(t){if(n(t))return t;throw new r(e(t)+\" is not an object\")},Lt}var es;function Ye(){if(es)return Dt;es=1;var n=we(),e=hl(),r=fl(),t=le(),i=ll(),a=TypeError,s=Object.defineProperty,o=Object.getOwnPropertyDescriptor,u=\"enumerable\",l=\"configurable\",h=\"writable\";return Dt.f=n?r?function(v,f,g){if(t(v),f=i(f),t(g),typeof v==\"function\"&&f===\"prototype\"&&\"value\"in g&&h in g&&!g[h]){var d=o(v,f);d&&d[h]&&(v[f]=g.value,g={configurable:l in g?g[l]:d[l],enumerable:u in g?g[u]:d[u],writable:!1})}return s(v,f,g)}:s:function(v,f,g){if(t(v),f=i(f),t(g),e)try{return s(v,f,g)}catch{}if(\"get\"in g||\"set\"in g)throw new a(\"Accessors not supported\");return\"value\"in g&&(v[f]=g.value),v},Dt}var kt,rs;function yr(){if(rs)return kt;rs=1;var n=we(),e=Ye(),r=Fa();return kt=n?function(t,i,a){return e.f(t,i,r(1,a))}:function(t,i,a){return t[i]=a,t},kt}var jt={exports:{}},Bt,ts;function Vr(){if(ts)return Bt;ts=1;var n=we(),e=Ae(),r=Function.prototype,t=n&&Object.getOwnPropertyDescriptor,i=e(r,\"name\"),a=i&&(function(){}).name===\"something\",s=i&&(!n||n&&t(r,\"name\").configurable);return Bt={EXISTS:i,PROPER:a,CONFIGURABLE:s},Bt}var Ft,is;function Ha(){if(is)return Ft;is=1;var n=J(),e=re(),r=$a(),t=n(Function.toString);return e(r.inspectSource)||(r.inspectSource=function(i){return t(i)}),Ft=r.inspectSource,Ft}var Ut,as;function Ql(){if(as)return Ut;as=1;var n=Q(),e=re(),r=n.WeakMap;return Ut=e(r)&&/native code/.test(String(r)),Ut}var Gt,ns;function Wa(){if(ns)return Gt;ns=1;var n=za(),e=ul(),r=n(\"keys\");return Gt=function(t){return r[t]||(r[t]=e(t))},Gt}var $t,ss;function Ya(){return ss||(ss=1,$t={}),$t}var zt,os;function Lr(){if(os)return zt;os=1;var n=Ql(),e=Q(),r=pe(),t=yr(),i=Ae(),a=$a(),s=Wa(),o=Ya(),u=\"Object already initialized\",l=e.TypeError,h=e.WeakMap,c,v,f,g=function(m){return f(m)?v(m):c(m,{})},d=function(m){return function(b){var x;if(!r(b)||(x=v(b)).type!==m)throw new l(\"Incompatible receiver, \"+m+\" required\");return x}};if(n||a.state){var p=a.state||(a.state=new h);p.get=p.get,p.has=p.has,p.set=p.set,c=function(m,b){if(p.has(m))throw new l(u);return b.facade=m,p.set(m,b),b},v=function(m){return p.get(m)||{}},f=function(m){return p.has(m)}}else{var y=s(\"state\");o[y]=!0,c=function(m,b){if(i(m,y))throw new l(u);return b.facade=m,t(m,y,b),b},v=function(m){return i(m,y)?m[y]:{}},f=function(m){return i(m,y)}}return zt={set:c,get:v,has:f,enforce:g,getterFor:d},zt}var us;function cl(){if(us)return jt.exports;us=1;var n=J(),e=Z(),r=re(),t=Ae(),i=we(),a=Vr().CONFIGURABLE,s=Ha(),o=Lr(),u=o.enforce,l=o.get,h=String,c=Object.defineProperty,v=n(\"\".slice),f=n(\"\".replace),g=n([].join),d=i&&!e(function(){return c(function(){},\"length\",{value:8}).length!==8}),p=String(String).split(\"String\"),y=jt.exports=function(m,b,x){v(h(b),0,7)===\"Symbol(\"&&(b=\"[\"+f(h(b),/^Symbol\\(([^)]*)\\).*$/,\"$1\")+\"]\"),x&&x.getter&&(b=\"get \"+b),x&&x.setter&&(b=\"set \"+b),(!t(m,\"name\")||a&&m.name!==b)&&(i?c(m,\"name\",{value:b,configurable:!0}):m.name=b),d&&x&&t(x,\"arity\")&&m.length!==x.arity&&c(m,\"length\",{value:x.arity});try{x&&t(x,\"constructor\")&&x.constructor?i&&c(m,\"prototype\",{writable:!1}):m.prototype&&(m.prototype=void 0)}catch{}var S=u(m);return t(S,\"source\")||(S.source=g(p,typeof b==\"string\"?b:\"\")),m};return Function.prototype.toString=y(function(){return r(this)&&l(this).source||s(this)},\"toString\"),jt.exports}var Ht,ls;function tr(){if(ls)return Ht;ls=1;var n=re(),e=Ye(),r=cl(),t=Ga();return Ht=function(i,a,s,o){o||(o={});var u=o.enumerable,l=o.name!==void 0?o.name:a;if(n(s)&&r(s,l,o),o.global)u?i[a]=s:t(a,s);else{try{o.unsafe?i[a]&&(u=!0):delete i[a]}catch{}u?i[a]=s:e.f(i,a,{value:s,enumerable:!1,configurable:!o.nonConfigurable,writable:!o.nonWritable})}return i},Ht}var Wt={},Yt,hs;function Zl(){if(hs)return Yt;hs=1;var n=Math.ceil,e=Math.floor;return Yt=Math.trunc||function(t){var i=+t;return(i>0?e:n)(i)},Yt}var Xt,fs;function kr(){if(fs)return Xt;fs=1;var n=Zl();return Xt=function(e){var r=+e;return r!==r||r===0?0:n(r)},Xt}var Kt,cs;function Jl(){if(cs)return Kt;cs=1;var n=kr(),e=Math.max,r=Math.min;return Kt=function(t,i){var a=n(t);return a<0?e(a+i,0):r(a,i)},Kt}var Qt,vs;function sr(){if(vs)return Qt;vs=1;var n=kr(),e=Math.min;return Qt=function(r){var t=n(r);return t>0?e(t,9007199254740991):0},Qt}var Zt,gs;function Xa(){if(gs)return Zt;gs=1;var n=sr();return Zt=function(e){return n(e.length)},Zt}var Jt,ds;function vl(){if(ds)return Jt;ds=1;var n=dr(),e=Jl(),r=Xa(),t=function(i){return function(a,s,o){var u=n(a),l=r(u);if(l===0)return!i&&-1;var h=e(o,l),c;if(i&&s!==s){for(;l>h;)if(c=u[h++],c!==c)return!0}else for(;l>h;h++)if((i||h in u)&&u[h]===s)return i||h||0;return!i&&-1}};return Jt={includes:t(!0),indexOf:t(!1)},Jt}var ei,ps;function gl(){if(ps)return ei;ps=1;var n=J(),e=Ae(),r=dr(),t=vl().indexOf,i=Ya(),a=n([].push);return ei=function(s,o){var u=r(s),l=0,h=[],c;for(c in u)!e(i,c)&&e(u,c)&&a(h,c);for(;o.length>l;)e(u,c=o[l++])&&(~t(h,c)||a(h,c));return h},ei}var ri,ys;function Ka(){return ys||(ys=1,ri=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]),ri}var ms;function eh(){if(ms)return Wt;ms=1;var n=gl(),e=Ka(),r=e.concat(\"length\",\"prototype\");return Wt.f=Object.getOwnPropertyNames||function(i){return n(i,r)},Wt}var ti={},bs;function rh(){return bs||(bs=1,ti.f=Object.getOwnPropertySymbols),ti}var ii,xs;function th(){if(xs)return ii;xs=1;var n=rr(),e=J(),r=eh(),t=rh(),i=le(),a=e([].concat);return ii=n(\"Reflect\",\"ownKeys\")||function(o){var u=r.f(i(o)),l=t.f;return l?a(u,l(o)):u},ii}var ai,Os;function ih(){if(Os)return ai;Os=1;var n=Ae(),e=th(),r=Dr(),t=Ye();return ai=function(i,a,s){for(var o=e(a),u=t.f,l=r.f,h=0;h<o.length;h++){var c=o[h];!n(i,c)&&!(s&&n(s,c))&&u(i,c,l(a,c))}},ai}var ni,Ts;function dl(){if(Ts)return ni;Ts=1;var n=Z(),e=re(),r=/#|\\.prototype\\./,t=function(u,l){var h=a[i(u)];return h===o?!0:h===s?!1:e(l)?n(l):!!l},i=t.normalize=function(u){return String(u).replace(r,\".\").toLowerCase()},a=t.data={},s=t.NATIVE=\"N\",o=t.POLYFILL=\"P\";return ni=t,ni}var si,Ss;function he(){if(Ss)return si;Ss=1;var n=Q(),e=Dr().f,r=yr(),t=tr(),i=Ga(),a=ih(),s=dl();return si=function(o,u){var l=o.target,h=o.global,c=o.stat,v,f,g,d,p,y;if(h?f=n:c?f=n[l]||i(l,{}):f=n[l]&&n[l].prototype,f)for(g in u){if(p=u[g],o.dontCallGetSet?(y=e(f,g),d=y&&y.value):d=f[g],v=s(h?g:l+(c?\".\":\"#\")+g,o.forced),!v&&d!==void 0){if(typeof p==typeof d)continue;a(p,d)}(o.sham||d&&d.sham)&&r(p,\"sham\",!0),t(f,g,p,o)}},si}var oi,Es;function pl(){if(Es)return oi;Es=1;var n=Q(),e=pr(),r=er(),t=function(i){return e.slice(0,i.length)===i};return oi=(function(){return t(\"Bun/\")?\"BUN\":t(\"Cloudflare-Workers\")?\"CLOUDFLARE\":t(\"Deno/\")?\"DENO\":t(\"Node.js/\")?\"NODE\":n.Bun&&typeof Bun.version==\"string\"?\"BUN\":n.Deno&&typeof Deno.version==\"object\"?\"DENO\":r(n.process)===\"process\"?\"NODE\":n.window&&n.document?\"BROWSER\":\"REST\"})(),oi}var ui,Rs;function jr(){if(Rs)return ui;Rs=1;var n=pl();return ui=n===\"NODE\",ui}var li,Cs;function ah(){if(Cs)return li;Cs=1;var n=Q();return li=n,li}var hi,ws;function nh(){if(ws)return hi;ws=1;var n=J(),e=Fe();return hi=function(r,t,i){try{return n(e(Object.getOwnPropertyDescriptor(r,t)[i]))}catch{}},hi}var fi,Ps;function sh(){if(Ps)return fi;Ps=1;var n=pe();return fi=function(e){return n(e)||e===null},fi}var ci,As;function oh(){if(As)return ci;As=1;var n=sh(),e=String,r=TypeError;return ci=function(t){if(n(t))return t;throw new r(\"Can't set \"+e(t)+\" as a prototype\")},ci}var vi,Is;function yl(){if(Is)return vi;Is=1;var n=nh(),e=pe(),r=Pe(),t=oh();return vi=Object.setPrototypeOf||(\"__proto__\"in{}?(function(){var i=!1,a={},s;try{s=n(Object.prototype,\"__proto__\",\"set\"),s(a,[]),i=a instanceof Array}catch{}return function(u,l){return r(u),t(l),e(u)&&(i?s(u,l):u.__proto__=l),u}})():void 0),vi}var gi,Ns;function Br(){if(Ns)return gi;Ns=1;var n=Ye().f,e=Ae(),r=ae(),t=r(\"toStringTag\");return gi=function(i,a,s){i&&!s&&(i=i.prototype),i&&!e(i,t)&&n(i,t,{configurable:!0,value:a})},gi}var di,_s;function uh(){if(_s)return di;_s=1;var n=cl(),e=Ye();return di=function(r,t,i){return i.get&&n(i.get,t,{getter:!0}),i.set&&n(i.set,t,{setter:!0}),e.f(r,t,i)},di}var pi,Ms;function lh(){if(Ms)return pi;Ms=1;var n=rr(),e=uh(),r=ae(),t=we(),i=r(\"species\");return pi=function(a){var s=n(a);t&&s&&!s[i]&&e(s,i,{configurable:!0,get:function(){return this}})},pi}var yi,qs;function hh(){if(qs)return yi;qs=1;var n=Nr(),e=TypeError;return yi=function(r,t){if(n(t,r))return r;throw new e(\"Incorrect invocation\")},yi}var mi,Ds;function fh(){if(Ds)return mi;Ds=1;var n=ae(),e=n(\"toStringTag\"),r={};return r[e]=\"z\",mi=String(r)===\"[object z]\",mi}var bi,Vs;function Qa(){if(Vs)return bi;Vs=1;var n=fh(),e=re(),r=er(),t=ae(),i=t(\"toStringTag\"),a=Object,s=r((function(){return arguments})())===\"Arguments\",o=function(u,l){try{return u[l]}catch{}};return bi=n?r:function(u){var l,h,c;return u===void 0?\"Undefined\":u===null?\"Null\":typeof(h=o(l=a(u),i))==\"string\"?h:s?r(l):(c=r(l))===\"Object\"&&e(l.callee)?\"Arguments\":c},bi}var xi,Ls;function ch(){if(Ls)return xi;Ls=1;var n=J(),e=Z(),r=re(),t=Qa(),i=rr(),a=Ha(),s=function(){},o=i(\"Reflect\",\"construct\"),u=/^\\s*(?:class|function)\\b/,l=n(u.exec),h=!u.test(s),c=function(g){if(!r(g))return!1;try{return o(s,[],g),!0}catch{return!1}},v=function(g){if(!r(g))return!1;switch(t(g)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return h||!!l(u,a(g))}catch{return!0}};return v.sham=!0,xi=!o||e(function(){var f;return c(c.call)||!c(Object)||!c(function(){f=!0})||f})?v:c,xi}var Oi,ks;function vh(){if(ks)return Oi;ks=1;var n=ch(),e=_r(),r=TypeError;return Oi=function(t){if(n(t))return t;throw new r(e(t)+\" is not a constructor\")},Oi}var Ti,js;function ml(){if(js)return Ti;js=1;var n=le(),e=vh(),r=Ir(),t=ae(),i=t(\"species\");return Ti=function(a,s){var o=n(a).constructor,u;return o===void 0||r(u=n(o)[i])?s:e(u)},Ti}var Si,Bs;function bl(){if(Bs)return Si;Bs=1;var n=Ar(),e=Function.prototype,r=e.apply,t=e.call;return Si=typeof Reflect==\"object\"&&Reflect.apply||(n?t.bind(r):function(){return t.apply(r,arguments)}),Si}var Ei,Fs;function Fr(){if(Fs)return Ei;Fs=1;var n=er(),e=J();return Ei=function(r){if(n(r)===\"Function\")return e(r)},Ei}var Ri,Us;function Za(){if(Us)return Ri;Us=1;var n=Fr(),e=Fe(),r=Ar(),t=n(n.bind);return Ri=function(i,a){return e(i),a===void 0?i:r?t(i,a):function(){return i.apply(a,arguments)}},Ri}var Ci,Gs;function xl(){if(Gs)return Ci;Gs=1;var n=rr();return Ci=n(\"document\",\"documentElement\"),Ci}var wi,$s;function gh(){if($s)return wi;$s=1;var n=J();return wi=n([].slice),wi}var Pi,zs;function dh(){if(zs)return Pi;zs=1;var n=TypeError;return Pi=function(e,r){if(e<r)throw new n(\"Not enough arguments\");return e},Pi}var Ai,Hs;function Ol(){if(Hs)return Ai;Hs=1;var n=pr();return Ai=/(?:ipad|iphone|ipod).*applewebkit/i.test(n),Ai}var Ii,Ws;function Tl(){if(Ws)return Ii;Ws=1;var n=Q(),e=bl(),r=Za(),t=re(),i=Ae(),a=Z(),s=xl(),o=gh(),u=qr(),l=dh(),h=Ol(),c=jr(),v=n.setImmediate,f=n.clearImmediate,g=n.process,d=n.Dispatch,p=n.Function,y=n.MessageChannel,m=n.String,b=0,x={},S=\"onreadystatechange\",E,O,P,_;a(function(){E=n.location});var A=function(C){if(i(x,C)){var w=x[C];delete x[C],w()}},q=function(C){return function(){A(C)}},I=function(C){A(C.data)},j=function(C){n.postMessage(m(C),E.protocol+\"//\"+E.host)};return(!v||!f)&&(v=function(w){l(arguments.length,1);var U=t(w)?w:p(w),L=o(arguments,1);return x[++b]=function(){e(U,void 0,L)},O(b),b},f=function(w){delete x[w]},c?O=function(C){g.nextTick(q(C))}:d&&d.now?O=function(C){d.now(q(C))}:y&&!h?(P=new y,_=P.port2,P.port1.onmessage=I,O=r(_.postMessage,_)):n.addEventListener&&t(n.postMessage)&&!n.importScripts&&E&&E.protocol!==\"file:\"&&!a(j)?(O=j,n.addEventListener(\"message\",I,!1)):S in u(\"script\")?O=function(C){s.appendChild(u(\"script\"))[S]=function(){s.removeChild(this),A(C)}}:O=function(C){setTimeout(q(C),0)}),Ii={set:v,clear:f},Ii}var Ni,Ys;function ph(){if(Ys)return Ni;Ys=1;var n=Q(),e=we(),r=Object.getOwnPropertyDescriptor;return Ni=function(t){if(!e)return n[t];var i=r(n,t);return i&&i.value},Ni}var _i,Xs;function Sl(){if(Xs)return _i;Xs=1;var n=function(){this.head=null,this.tail=null};return n.prototype={add:function(e){var r={item:e,next:null},t=this.tail;t?t.next=r:this.head=r,this.tail=r},get:function(){var e=this.head;if(e){var r=this.head=e.next;return r===null&&(this.tail=null),e.item}}},_i=n,_i}var Mi,Ks;function yh(){if(Ks)return Mi;Ks=1;var n=pr();return Mi=/ipad|iphone|ipod/i.test(n)&&typeof Pebble<\"u\",Mi}var qi,Qs;function mh(){if(Qs)return qi;Qs=1;var n=pr();return qi=/web0s(?!.*chrome)/i.test(n),qi}var Di,Zs;function bh(){if(Zs)return Di;Zs=1;var n=Q(),e=ph(),r=Za(),t=Tl().set,i=Sl(),a=Ol(),s=yh(),o=mh(),u=jr(),l=n.MutationObserver||n.WebKitMutationObserver,h=n.document,c=n.process,v=n.Promise,f=e(\"queueMicrotask\"),g,d,p,y,m;if(!f){var b=new i,x=function(){var S,E;for(u&&(S=c.domain)&&S.exit();E=b.get();)try{E()}catch(O){throw b.head&&g(),O}S&&S.enter()};!a&&!u&&!o&&l&&h?(d=!0,p=h.createTextNode(\"\"),new l(x).observe(p,{characterData:!0}),g=function(){p.data=d=!d}):!s&&v&&v.resolve?(y=v.resolve(void 0),y.constructor=v,m=r(y.then,y),g=function(){m(x)}):u?g=function(){c.nextTick(x)}:(t=r(t,n),g=function(){t(x)}),f=function(S){b.head||g(),b.add(S)}}return Di=f,Di}var Vi,Js;function xh(){return Js||(Js=1,Vi=function(n,e){try{arguments.length===1?console.error(n):console.error(n,e)}catch{}}),Vi}var Li,eo;function Ja(){return eo||(eo=1,Li=function(n){try{return{error:!1,value:n()}}catch(e){return{error:!0,value:e}}}),Li}var ki,ro;function mr(){if(ro)return ki;ro=1;var n=Q();return ki=n.Promise,ki}var ji,to;function br(){if(to)return ji;to=1;var n=Q(),e=mr(),r=re(),t=dl(),i=Ha(),a=ae(),s=pl(),o=Me(),u=Ua(),l=e&&e.prototype,h=a(\"species\"),c=!1,v=r(n.PromiseRejectionEvent),f=t(\"Promise\",function(){var g=i(e),d=g!==String(e);if(!d&&u===66||o&&!(l.catch&&l.finally))return!0;if(!u||u<51||!/native code/.test(g)){var p=new e(function(b){b(1)}),y=function(b){b(function(){},function(){})},m=p.constructor={};if(m[h]=y,c=p.then(function(){})instanceof y,!c)return!0}return!d&&(s===\"BROWSER\"||s===\"DENO\")&&!v});return ji={CONSTRUCTOR:f,REJECTION_EVENT:v,SUBCLASSING:c},ji}var Bi={},io;function xr(){if(io)return Bi;io=1;var n=Fe(),e=TypeError,r=function(t){var i,a;this.promise=new t(function(s,o){if(i!==void 0||a!==void 0)throw new e(\"Bad Promise constructor\");i=s,a=o}),this.resolve=n(i),this.reject=n(a)};return Bi.f=function(t){return new r(t)},Bi}var ao;function Oh(){if(ao)return cn;ao=1;var n=he(),e=Me(),r=jr(),t=Q(),i=ah(),a=ne(),s=tr(),o=yl(),u=Br(),l=lh(),h=Fe(),c=re(),v=pe(),f=hh(),g=ml(),d=Tl().set,p=bh(),y=xh(),m=Ja(),b=Sl(),x=Lr(),S=mr(),E=br(),O=xr(),P=\"Promise\",_=E.CONSTRUCTOR,A=E.REJECTION_EVENT,q=E.SUBCLASSING,I=x.getterFor(P),j=x.set,C=S&&S.prototype,w=S,U=C,L=t.TypeError,V=t.document,M=t.process,N=O.f,k=N,z=!!(V&&V.createEvent&&t.dispatchEvent),H=\"unhandledrejection\",X=\"rejectionhandled\",se=0,be=1,oe=2,Ue=1,Ge=2,fe,Ne,_e,me,ce=function(R){var B;return v(R)&&c(B=R.then)?B:!1},xe=function(R,B){var G=B.value,$=B.state===be,W=$?R.ok:R.fail,Te=R.resolve,Le=R.reject,Se=R.domain,Ee,lr,hr;try{W?($||(B.rejection===Ge&&$e(B),B.rejection=Ue),W===!0?Ee=G:(Se&&Se.enter(),Ee=W(G),Se&&(Se.exit(),hr=!0)),Ee===R.promise?Le(new L(\"Promise-chain cycle\")):(lr=ce(Ee))?a(lr,Ee,Te,Le):Te(Ee)):Le(G)}catch(fr){Se&&!hr&&Se.exit(),Le(fr)}},De=function(R,B){R.notified||(R.notified=!0,p(function(){for(var G=R.reactions,$;$=G.get();)xe($,R);R.notified=!1,B&&!R.rejection&&Xe(R)}))},Ve=function(R,B,G){var $,W;z?($=V.createEvent(\"Event\"),$.promise=B,$.reason=G,$.initEvent(R,!1,!0),t.dispatchEvent($)):$={promise:B,reason:G},!A&&(W=t[\"on\"+R])?W($):R===H&&y(\"Unhandled promise rejection\",G)},Xe=function(R){a(d,t,function(){var B=R.facade,G=R.value,$=ur(R),W;if($&&(W=m(function(){r?M.emit(\"unhandledRejection\",G,B):Ve(H,B,G)}),R.rejection=r||ur(R)?Ge:Ue,W.error))throw W.value})},ur=function(R){return R.rejection!==Ue&&!R.parent},$e=function(R){a(d,t,function(){var B=R.facade;r?M.emit(\"rejectionHandled\",B):Ve(X,B,R.value)})},ve=function(R,B,G){return function($){R(B,$,G)}},ge=function(R,B,G){R.done||(R.done=!0,G&&(R=G),R.value=B,R.state=oe,De(R,!0))},Oe=function(R,B,G){if(!R.done){R.done=!0,G&&(R=G);try{if(R.facade===B)throw new L(\"Promise can't be resolved itself\");var $=ce(B);$?p(function(){var W={done:!1};try{a($,B,ve(Oe,W,R),ve(ge,W,R))}catch(Te){ge(W,Te,R)}}):(R.value=B,R.state=be,De(R,!1))}catch(W){ge({done:!1},W,R)}}};if(_&&(w=function(B){f(this,U),h(B),a(fe,this);var G=I(this);try{B(ve(Oe,G),ve(ge,G))}catch($){ge(G,$)}},U=w.prototype,fe=function(B){j(this,{type:P,done:!1,notified:!1,parent:!1,reactions:new b,rejection:!1,state:se,value:null})},fe.prototype=s(U,\"then\",function(B,G){var $=I(this),W=N(g(this,w));return $.parent=!0,W.ok=c(B)?B:!0,W.fail=c(G)&&G,W.domain=r?M.domain:void 0,$.state===se?$.reactions.add(W):p(function(){xe(W,$)}),W.promise}),Ne=function(){var R=new fe,B=I(R);this.promise=R,this.resolve=ve(Oe,B),this.reject=ve(ge,B)},O.f=N=function(R){return R===w||R===_e?new Ne(R):k(R)},!e&&c(S)&&C!==Object.prototype)){me=C.then,q||s(C,\"then\",function(B,G){var $=this;return new w(function(W,Te){a(me,$,W,Te)}).then(B,G)},{unsafe:!0});try{delete C.constructor}catch{}o&&o(C,U)}return n({global:!0,constructor:!0,wrap:!0,forced:_},{Promise:w}),_e=i.Promise,u(w,P,!1,!0),l(P),cn}var no={},Fi,so;function Or(){return so||(so=1,Fi={}),Fi}var Ui,oo;function Th(){if(oo)return Ui;oo=1;var n=ae(),e=Or(),r=n(\"iterator\"),t=Array.prototype;return Ui=function(i){return i!==void 0&&(e.Array===i||t[r]===i)},Ui}var Gi,uo;function El(){if(uo)return Gi;uo=1;var n=Qa(),e=nr(),r=Ir(),t=Or(),i=ae(),a=i(\"iterator\");return Gi=function(s){if(!r(s))return e(s,a)||e(s,\"@@iterator\")||t[n(s)]},Gi}var $i,lo;function Sh(){if(lo)return $i;lo=1;var n=ne(),e=Fe(),r=le(),t=_r(),i=El(),a=TypeError;return $i=function(s,o){var u=arguments.length<2?i(s):o;if(e(u))return r(n(u,s));throw new a(t(s)+\" is not iterable\")},$i}var zi,ho;function Eh(){if(ho)return zi;ho=1;var n=ne(),e=le(),r=nr();return zi=function(t,i,a){var s,o;e(t);try{if(s=r(t,\"return\"),!s){if(i===\"throw\")throw a;return a}s=n(s,t)}catch(u){o=!0,s=u}if(i===\"throw\")throw a;if(o)throw s;return e(s),a},zi}var Hi,fo;function Rl(){if(fo)return Hi;fo=1;var n=Za(),e=ne(),r=le(),t=_r(),i=Th(),a=Xa(),s=Nr(),o=Sh(),u=El(),l=Eh(),h=TypeError,c=function(f,g){this.stopped=f,this.result=g},v=c.prototype;return Hi=function(f,g,d){var p=d&&d.that,y=!!(d&&d.AS_ENTRIES),m=!!(d&&d.IS_RECORD),b=!!(d&&d.IS_ITERATOR),x=!!(d&&d.INTERRUPTED),S=n(g,p),E,O,P,_,A,q,I,j=function(w){return E&&l(E,\"normal\"),new c(!0,w)},C=function(w){return y?(r(w),x?S(w[0],w[1],j):S(w[0],w[1])):x?S(w,j):S(w)};if(m)E=f.iterator;else if(b)E=f;else{if(O=u(f),!O)throw new h(t(f)+\" is not iterable\");if(i(O)){for(P=0,_=a(f);_>P;P++)if(A=C(f[P]),A&&s(v,A))return A;return new c(!1)}E=o(f,O)}for(q=m?f.next:E.next;!(I=e(q,E)).done;){try{A=C(I.value)}catch(w){l(E,\"throw\",w)}if(typeof A==\"object\"&&A&&s(v,A))return A}return new c(!1)},Hi}var Wi,co;function Rh(){if(co)return Wi;co=1;var n=ae(),e=n(\"iterator\"),r=!1;try{var t=0,i={next:function(){return{done:!!t++}},return:function(){r=!0}};i[e]=function(){return this},Array.from(i,function(){throw 2})}catch{}return Wi=function(a,s){try{if(!s&&!r)return!1}catch{return!1}var o=!1;try{var u={};u[e]=function(){return{next:function(){return{done:o=!0}}}},a(u)}catch{}return o},Wi}var Yi,vo;function Cl(){if(vo)return Yi;vo=1;var n=mr(),e=Rh(),r=br().CONSTRUCTOR;return Yi=r||!e(function(t){n.all(t).then(void 0,function(){})}),Yi}var go;function Ch(){if(go)return no;go=1;var n=he(),e=ne(),r=Fe(),t=xr(),i=Ja(),a=Rl(),s=Cl();return n({target:\"Promise\",stat:!0,forced:s},{all:function(u){var l=this,h=t.f(l),c=h.resolve,v=h.reject,f=i(function(){var g=r(l.resolve),d=[],p=0,y=1;a(u,function(m){var b=p++,x=!1;y++,e(g,l,m).then(function(S){x||(x=!0,d[b]=S,--y||c(d))},v)}),--y||c(d)});return f.error&&v(f.value),h.promise}}),no}var po={},yo;function wh(){if(yo)return po;yo=1;var n=he(),e=Me(),r=br().CONSTRUCTOR,t=mr(),i=rr(),a=re(),s=tr(),o=t&&t.prototype;if(n({target:\"Promise\",proto:!0,forced:r,real:!0},{catch:function(l){return this.then(void 0,l)}}),!e&&a(t)){var u=i(\"Promise\").prototype.catch;o.catch!==u&&s(o,\"catch\",u,{unsafe:!0})}return po}var mo={},bo;function Ph(){if(bo)return mo;bo=1;var n=he(),e=ne(),r=Fe(),t=xr(),i=Ja(),a=Rl(),s=Cl();return n({target:\"Promise\",stat:!0,forced:s},{race:function(u){var l=this,h=t.f(l),c=h.reject,v=i(function(){var f=r(l.resolve);a(u,function(g){e(f,l,g).then(h.resolve,c)})});return v.error&&c(v.value),h.promise}}),mo}var xo={},Oo;function Ah(){if(Oo)return xo;Oo=1;var n=he(),e=xr(),r=br().CONSTRUCTOR;return n({target:\"Promise\",stat:!0,forced:r},{reject:function(i){var a=e.f(this),s=a.reject;return s(i),a.promise}}),xo}var To={},Xi,So;function Ih(){if(So)return Xi;So=1;var n=le(),e=pe(),r=xr();return Xi=function(t,i){if(n(t),e(i)&&i.constructor===t)return i;var a=r.f(t),s=a.resolve;return s(i),a.promise},Xi}var Eo;function Nh(){if(Eo)return To;Eo=1;var n=he(),e=rr(),r=Me(),t=mr(),i=br().CONSTRUCTOR,a=Ih(),s=e(\"Promise\"),o=r&&!i;return n({target:\"Promise\",stat:!0,forced:r||i},{resolve:function(l){return a(o&&this===s?t:this,l)}}),To}var Ro;function _h(){return Ro||(Ro=1,Oh(),Ch(),wh(),Ph(),Ah(),Nh()),fn}_h();function Co(n,e,r,t,i,a,s){try{var o=n[a](s),u=o.value}catch(l){return void r(l)}o.done?e(u):Promise.resolve(u).then(t,i)}function Be(n){return function(){var e=this,r=arguments;return new Promise(function(t,i){var a=n.apply(e,r);function s(u){Co(a,t,i,s,o,\"next\",u)}function o(u){Co(a,t,i,s,o,\"throw\",u)}s(void 0)})}}var wo={},Po={},Ki,Ao;function qe(){if(Ao)return Ki;Ao=1;var n=Qa(),e=String;return Ki=function(r){if(n(r)===\"Symbol\")throw new TypeError(\"Cannot convert a Symbol value to a string\");return e(r)},Ki}var Qi,Io;function wl(){if(Io)return Qi;Io=1;var n=le();return Qi=function(){var e=n(this),r=\"\";return e.hasIndices&&(r+=\"d\"),e.global&&(r+=\"g\"),e.ignoreCase&&(r+=\"i\"),e.multiline&&(r+=\"m\"),e.dotAll&&(r+=\"s\"),e.unicode&&(r+=\"u\"),e.unicodeSets&&(r+=\"v\"),e.sticky&&(r+=\"y\"),r},Qi}var Zi,No;function Pl(){if(No)return Zi;No=1;var n=Z(),e=Q(),r=e.RegExp,t=n(function(){var s=r(\"a\",\"y\");return s.lastIndex=2,s.exec(\"abcd\")!==null}),i=t||n(function(){return!r(\"a\",\"y\").sticky}),a=t||n(function(){var s=r(\"^r\",\"gy\");return s.lastIndex=2,s.exec(\"str\")!==null});return Zi={BROKEN_CARET:a,MISSED_STICKY:i,UNSUPPORTED_Y:t},Zi}var Ji={},ea,_o;function Mh(){if(_o)return ea;_o=1;var n=gl(),e=Ka();return ea=Object.keys||function(t){return n(t,e)},ea}var Mo;function qh(){if(Mo)return Ji;Mo=1;var n=we(),e=fl(),r=Ye(),t=le(),i=dr(),a=Mh();return Ji.f=n&&!e?Object.defineProperties:function(o,u){t(o);for(var l=i(u),h=a(u),c=h.length,v=0,f;c>v;)r.f(o,f=h[v++],l[f]);return o},Ji}var ra,qo;function Ur(){if(qo)return ra;qo=1;var n=le(),e=qh(),r=Ka(),t=Ya(),i=xl(),a=qr(),s=Wa(),o=\">\",u=\"<\",l=\"prototype\",h=\"script\",c=s(\"IE_PROTO\"),v=function(){},f=function(m){return u+h+o+m+u+\"/\"+h+o},g=function(m){m.write(f(\"\")),m.close();var b=m.parentWindow.Object;return m=null,b},d=function(){var m=a(\"iframe\"),b=\"java\"+h+\":\",x;return m.style.display=\"none\",i.appendChild(m),m.src=String(b),x=m.contentWindow.document,x.open(),x.write(f(\"document.F=Object\")),x.close(),x.F},p,y=function(){try{p=new ActiveXObject(\"htmlfile\")}catch{}y=typeof document<\"u\"?document.domain&&p?g(p):d():g(p);for(var m=r.length;m--;)delete y[l][r[m]];return y()};return t[c]=!0,ra=Object.create||function(b,x){var S;return b!==null?(v[l]=n(b),S=new v,v[l]=null,S[c]=b):S=y(),x===void 0?S:e.f(S,x)},ra}var ta,Do;function Dh(){if(Do)return ta;Do=1;var n=Z(),e=Q(),r=e.RegExp;return ta=n(function(){var t=r(\".\",\"s\");return!(t.dotAll&&t.test(`\n`)&&t.flags===\"s\")}),ta}var ia,Vo;function Vh(){if(Vo)return ia;Vo=1;var n=Z(),e=Q(),r=e.RegExp;return ia=n(function(){var t=r(\"(?<a>b)\",\"g\");return t.exec(\"b\").groups.a!==\"b\"||\"b\".replace(t,\"$<a>c\")!==\"bc\"}),ia}var aa,Lo;function en(){if(Lo)return aa;Lo=1;var n=ne(),e=J(),r=qe(),t=wl(),i=Pl(),a=za(),s=Ur(),o=Lr().get,u=Dh(),l=Vh(),h=a(\"native-string-replace\",String.prototype.replace),c=RegExp.prototype.exec,v=c,f=e(\"\".charAt),g=e(\"\".indexOf),d=e(\"\".replace),p=e(\"\".slice),y=(function(){var S=/a/,E=/b*/g;return n(c,S,\"a\"),n(c,E,\"a\"),S.lastIndex!==0||E.lastIndex!==0})(),m=i.BROKEN_CARET,b=/()??/.exec(\"\")[1]!==void 0,x=y||b||m||u||l;return x&&(v=function(E){var O=this,P=o(O),_=r(E),A=P.raw,q,I,j,C,w,U,L;if(A)return A.lastIndex=O.lastIndex,q=n(v,A,_),O.lastIndex=A.lastIndex,q;var V=P.groups,M=m&&O.sticky,N=n(t,O),k=O.source,z=0,H=_;if(M&&(N=d(N,\"y\",\"\"),g(N,\"g\")===-1&&(N+=\"g\"),H=p(_,O.lastIndex),O.lastIndex>0&&(!O.multiline||O.multiline&&f(_,O.lastIndex-1)!==`\n`)&&(k=\"(?: \"+k+\")\",H=\" \"+H,z++),I=new RegExp(\"^(?:\"+k+\")\",N)),b&&(I=new RegExp(\"^\"+k+\"$(?!\\\\s)\",N)),y&&(j=O.lastIndex),C=n(c,M?I:O,H),M?C?(C.input=p(C.input,z),C[0]=p(C[0],z),C.index=O.lastIndex,O.lastIndex+=C[0].length):O.lastIndex=0:y&&C&&(O.lastIndex=O.global?C.index+C[0].length:j),b&&C&&C.length>1&&n(h,C[0],I,function(){for(w=1;w<arguments.length-2;w++)arguments[w]===void 0&&(C[w]=void 0)}),C&&V)for(C.groups=U=s(null),w=0;w<V.length;w++)L=V[w],U[L[0]]=C[L[1]];return C}),aa=v,aa}var ko;function Lh(){if(ko)return Po;ko=1;var n=he(),e=en();return n({target:\"RegExp\",proto:!0,forced:/./.exec!==e},{exec:e}),Po}var na,jo;function rn(){if(jo)return na;jo=1,Lh();var n=ne(),e=tr(),r=en(),t=Z(),i=ae(),a=yr(),s=i(\"species\"),o=RegExp.prototype;return na=function(u,l,h,c){var v=i(u),f=!t(function(){var y={};return y[v]=function(){return 7},\"\"[u](y)!==7}),g=f&&!t(function(){var y=!1,m=/a/;if(u===\"split\"){var b={};b[s]=function(){return m},m={constructor:b,flags:\"\"},m[v]=/./[v]}return m.exec=function(){return y=!0,null},m[v](\"\"),!y});if(!f||!g||h){var d=/./[v],p=l(v,\"\"[u],function(y,m,b,x,S){var E=m.exec;return E===r||E===o.exec?f&&!S?{done:!0,value:n(d,m,b,x)}:{done:!0,value:n(y,b,m,x)}:{done:!1}});e(String.prototype,u,p[0]),e(o,v,p[1])}c&&a(o[v],\"sham\",!0)},na}var sa,Bo;function kh(){if(Bo)return sa;Bo=1;var n=J(),e=kr(),r=qe(),t=Pe(),i=n(\"\".charAt),a=n(\"\".charCodeAt),s=n(\"\".slice),o=function(u){return function(l,h){var c=r(t(l)),v=e(h),f=c.length,g,d;return v<0||v>=f?u?\"\":void 0:(g=a(c,v),g<55296||g>56319||v+1===f||(d=a(c,v+1))<56320||d>57343?u?i(c,v):g:u?s(c,v,v+2):(g-55296<<10)+(d-56320)+65536)}};return sa={codeAt:o(!1),charAt:o(!0)},sa}var oa,Fo;function tn(){if(Fo)return oa;Fo=1;var n=kh().charAt;return oa=function(e,r,t){return r+(t?n(e,r).length:1)},oa}var ua,Uo;function jh(){if(Uo)return ua;Uo=1;var n=Q(),e=Z(),r=n.RegExp,t=!e(function(){var i=!0;try{r(\".\",\"d\")}catch{i=!1}var a={},s=\"\",o=i?\"dgimsy\":\"gimsy\",u=function(v,f){Object.defineProperty(a,v,{get:function(){return s+=f,!0}})},l={dotAll:\"s\",global:\"g\",ignoreCase:\"i\",multiline:\"m\",sticky:\"y\"};i&&(l.hasIndices=\"d\");for(var h in l)u(h,l[h]);var c=Object.getOwnPropertyDescriptor(r.prototype,\"flags\").get.call(a);return c!==o||s!==o});return ua={correct:t},ua}var la,Go;function an(){if(Go)return la;Go=1;var n=ne(),e=Ae(),r=Nr(),t=jh(),i=wl(),a=RegExp.prototype;return la=t.correct?function(s){return s.flags}:function(s){return!t.correct&&r(a,s)&&!e(s,\"flags\")?n(i,s):s.flags},la}var ha,$o;function nn(){if($o)return ha;$o=1;var n=ne(),e=le(),r=re(),t=er(),i=en(),a=TypeError;return ha=function(s,o){var u=s.exec;if(r(u)){var l=n(u,s,o);return l!==null&&e(l),l}if(t(s)===\"RegExp\")return n(i,s,o);throw new a(\"RegExp#exec called on incompatible receiver\")},ha}var zo;function Bh(){if(zo)return wo;zo=1;var n=ne(),e=J(),r=rn(),t=le(),i=pe(),a=sr(),s=qe(),o=Pe(),u=nr(),l=tn(),h=an(),c=nn(),v=e(\"\".indexOf);return r(\"match\",function(f,g,d){return[function(y){var m=o(this),b=i(y)?u(y,f):void 0;return b?n(b,y,m):new RegExp(y)[f](s(m))},function(p){var y=t(this),m=s(p),b=d(g,y,m);if(b.done)return b.value;var x=s(h(y));if(v(x,\"g\")===-1)return c(y,m);var S=v(x,\"u\")!==-1;y.lastIndex=0;for(var E=[],O=0,P;(P=c(y,m))!==null;){var _=s(P[0]);E[O]=_,_===\"\"&&(y.lastIndex=l(m,a(y.lastIndex),S)),O++}return O===0?null:E}]}),wo}Bh();var Ho={},fa,Wo;function Fh(){if(Wo)return fa;Wo=1;var n=J(),e=Mr(),r=Math.floor,t=n(\"\".charAt),i=n(\"\".replace),a=n(\"\".slice),s=/\\$([$&'`]|\\d{1,2}|<[^>]*>)/g,o=/\\$([$&'`]|\\d{1,2})/g;return fa=function(u,l,h,c,v,f){var g=h+u.length,d=c.length,p=o;return v!==void 0&&(v=e(v),p=s),i(f,p,function(y,m){var b;switch(t(m,0)){case\"$\":return\"$\";case\"&\":return u;case\"`\":return a(l,0,h);case\"'\":return a(l,g);case\"<\":b=v[a(m,1,-1)];break;default:var x=+m;if(x===0)return y;if(x>d){var S=r(x/10);return S===0?y:S<=d?c[S-1]===void 0?t(m,1):c[S-1]+t(m,1):y}b=c[x-1]}return b===void 0?\"\":b})},fa}var Yo;function Uh(){if(Yo)return Ho;Yo=1;var n=bl(),e=ne(),r=J(),t=rn(),i=Z(),a=le(),s=re(),o=pe(),u=kr(),l=sr(),h=qe(),c=Pe(),v=tn(),f=nr(),g=Fh(),d=an(),p=nn(),y=ae(),m=y(\"replace\"),b=Math.max,x=Math.min,S=r([].concat),E=r([].push),O=r(\"\".indexOf),P=r(\"\".slice),_=function(j){return j===void 0?j:String(j)},A=(function(){return\"a\".replace(/./,\"$0\")===\"$0\"})(),q=(function(){return/./[m]?/./[m](\"a\",\"$0\")===\"\":!1})(),I=!i(function(){var j=/./;return j.exec=function(){var C=[];return C.groups={a:\"7\"},C},\"\".replace(j,\"$<a>\")!==\"7\"});return t(\"replace\",function(j,C,w){var U=q?\"$\":\"$0\";return[function(V,M){var N=c(this),k=o(V)?f(V,m):void 0;return k?e(k,V,N,M):e(C,h(N),V,M)},function(L,V){var M=a(this),N=h(L);if(typeof V==\"string\"&&O(V,U)===-1&&O(V,\"$<\")===-1){var k=w(C,M,N,V);if(k.done)return k.value}var z=s(V);z||(V=h(V));var H=h(d(M)),X=O(H,\"g\")!==-1,se;X&&(se=O(H,\"u\")!==-1,M.lastIndex=0);for(var be=[],oe;oe=p(M,N),!(oe===null||(E(be,oe),!X));){var Ue=h(oe[0]);Ue===\"\"&&(M.lastIndex=v(N,l(M.lastIndex),se))}for(var Ge=\"\",fe=0,Ne=0;Ne<be.length;Ne++){oe=be[Ne];for(var _e=h(oe[0]),me=b(x(u(oe.index),N.length),0),ce=[],xe,De=1;De<oe.length;De++)E(ce,_(oe[De]));var Ve=oe.groups;if(z){var Xe=S([_e],ce,me,N);Ve!==void 0&&E(Xe,Ve),xe=h(n(V,void 0,Xe))}else xe=g(_e,N,me,ce,Ve,V);me>=fe&&(Ge+=P(N,fe,me)+xe,fe=me+_e.length)}return Ge+P(N,fe)}]},!I||!A||q),Ho}Uh();var Xo={},ca,Ko;function Gh(){if(Ko)return ca;Ko=1;var n=pe(),e=er(),r=ae(),t=r(\"match\");return ca=function(i){var a;return n(i)&&((a=i[t])!==void 0?!!a:e(i)===\"RegExp\")},ca}var va,Qo;function sn(){if(Qo)return va;Qo=1;var n=Gh(),e=TypeError;return va=function(r){if(n(r))throw new e(\"The method doesn't accept regular expressions\");return r},va}var ga,Zo;function on(){if(Zo)return ga;Zo=1;var n=ae(),e=n(\"match\");return ga=function(r){var t=/./;try{\"/./\"[r](t)}catch{try{return t[e]=!1,\"/./\"[r](t)}catch{}}return!1},ga}var Jo;function $h(){if(Jo)return Xo;Jo=1;var n=he(),e=Fr(),r=Dr().f,t=sr(),i=qe(),a=sn(),s=Pe(),o=on(),u=Me(),l=e(\"\".slice),h=Math.min,c=o(\"startsWith\"),v=!u&&!c&&!!(function(){var f=r(String.prototype,\"startsWith\");return f&&!f.writable})();return n({target:\"String\",proto:!0,forced:!v&&!c},{startsWith:function(g){var d=i(s(this));a(g);var p=t(h(arguments.length>1?arguments[1]:void 0,d.length)),y=i(g);return l(d,p,p+y.length)===y}}),Xo}$h();var da,eu;function zh(){if(eu)return da;eu=1;var n=ae(),e=Ur(),r=Ye().f,t=n(\"unscopables\"),i=Array.prototype;return i[t]===void 0&&r(i,t,{configurable:!0,value:e(null)}),da=function(a){i[t][a]=!0},da}var pa,ru;function Hh(){if(ru)return pa;ru=1;var n=Z();return pa=!n(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),pa}var ya,tu;function Al(){if(tu)return ya;tu=1;var n=Ae(),e=re(),r=Mr(),t=Wa(),i=Hh(),a=t(\"IE_PROTO\"),s=Object,o=s.prototype;return ya=i?s.getPrototypeOf:function(u){var l=r(u);if(n(l,a))return l[a];var h=l.constructor;return e(h)&&l instanceof h?h.prototype:l instanceof s?o:null},ya}var ma,iu;function Il(){if(iu)return ma;iu=1;var n=Z(),e=re(),r=pe(),t=Ur(),i=Al(),a=tr(),s=ae(),o=Me(),u=s(\"iterator\"),l=!1,h,c,v;[].keys&&(v=[].keys(),\"next\"in v?(c=i(i(v)),c!==Object.prototype&&(h=c)):l=!0);var f=!r(h)||n(function(){var g={};return h[u].call(g)!==g});return f?h={}:o&&(h=t(h)),e(h[u])||a(h,u,function(){return this}),ma={IteratorPrototype:h,BUGGY_SAFARI_ITERATORS:l},ma}var ba,au;function Wh(){if(au)return ba;au=1;var n=Il().IteratorPrototype,e=Ur(),r=Fa(),t=Br(),i=Or(),a=function(){return this};return ba=function(s,o,u,l){var h=o+\" Iterator\";return s.prototype=e(n,{next:r(+!l,u)}),t(s,h,!1,!0),i[h]=a,s},ba}var xa,nu;function Yh(){if(nu)return xa;nu=1;var n=he(),e=ne(),r=Me(),t=Vr(),i=re(),a=Wh(),s=Al(),o=yl(),u=Br(),l=yr(),h=tr(),c=ae(),v=Or(),f=Il(),g=t.PROPER,d=t.CONFIGURABLE,p=f.IteratorPrototype,y=f.BUGGY_SAFARI_ITERATORS,m=c(\"iterator\"),b=\"keys\",x=\"values\",S=\"entries\",E=function(){return this};return xa=function(O,P,_,A,q,I,j){a(_,P,A);var C=function(X){if(X===q&&M)return M;if(!y&&X&&X in L)return L[X];switch(X){case b:return function(){return new _(this,X)};case x:return function(){return new _(this,X)};case S:return function(){return new _(this,X)}}return function(){return new _(this)}},w=P+\" Iterator\",U=!1,L=O.prototype,V=L[m]||L[\"@@iterator\"]||q&&L[q],M=!y&&V||C(q),N=P===\"Array\"&&L.entries||V,k,z,H;if(N&&(k=s(N.call(new O)),k!==Object.prototype&&k.next&&(!r&&s(k)!==p&&(o?o(k,p):i(k[m])||h(k,m,E)),u(k,w,!0,!0),r&&(v[w]=E))),g&&q===x&&V&&V.name!==x&&(!r&&d?l(L,\"name\",x):(U=!0,M=function(){return e(V,this)})),q)if(z={values:C(x),keys:I?M:C(b),entries:C(S)},j)for(H in z)(y||U||!(H in L))&&h(L,H,z[H]);else n({target:P,proto:!0,forced:y||U},z);return(!r||j)&&L[m]!==M&&h(L,m,M,{name:q}),v[P]=M,z},xa}var Oa,su;function Xh(){return su||(su=1,Oa=function(n,e){return{value:n,done:e}}),Oa}var Ta,ou;function Nl(){if(ou)return Ta;ou=1;var n=dr(),e=zh(),r=Or(),t=Lr(),i=Ye().f,a=Yh(),s=Xh(),o=Me(),u=we(),l=\"Array Iterator\",h=t.set,c=t.getterFor(l);Ta=a(Array,\"Array\",function(f,g){h(this,{type:l,target:n(f),index:0,kind:g})},function(){var f=c(this),g=f.target,d=f.index++;if(!g||d>=g.length)return f.target=null,s(void 0,!0);switch(f.kind){case\"keys\":return s(d,!1);case\"values\":return s(g[d],!1)}return s([d,g[d]],!1)},\"values\");var v=r.Arguments=r.Array;if(e(\"keys\"),e(\"values\"),e(\"entries\"),!o&&u&&v.name!==\"values\")try{i(v,\"name\",{value:\"values\"})}catch{}return Ta}Nl();var uu={},Sa,lu;function Kh(){return lu||(lu=1,Sa={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}),Sa}var Ea,hu;function Qh(){if(hu)return Ea;hu=1;var n=qr(),e=n(\"span\").classList,r=e&&e.constructor&&e.constructor.prototype;return Ea=r===Object.prototype?void 0:r,Ea}var fu;function Zh(){if(fu)return uu;fu=1;var n=Q(),e=Kh(),r=Qh(),t=Nl(),i=yr(),a=Br(),s=ae(),o=s(\"iterator\"),u=t.values,l=function(c,v){if(c){if(c[o]!==u)try{i(c,o,u)}catch{c[o]=u}if(a(c,v,!0),e[v]){for(var f in t)if(c[f]!==t[f])try{i(c,f,t[f])}catch{c[f]=t[f]}}}};for(var h in e)l(n[h]&&n[h].prototype,h);return l(r,\"DOMTokenList\"),uu}Zh();function Jh(n,e){if(Va(n)!=\"object\"||!n)return n;var r=n[Symbol.toPrimitive];if(r!==void 0){var t=r.call(n,e);if(Va(t)!=\"object\")return t;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(e===\"string\"?String:Number)(n)}function ef(n){var e=Jh(n,\"string\");return Va(e)==\"symbol\"?e:e+\"\"}function un(n,e,r){return(e=ef(e))in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}var cu={},Ra,vu;function rf(){if(vu)return Ra;vu=1;var n=Fe(),e=Mr(),r=al(),t=Xa(),i=TypeError,a=\"Reduce of empty array with no initial value\",s=function(o){return function(u,l,h,c){var v=e(u),f=r(v),g=t(v);if(n(l),g===0&&h<2)throw new i(a);var d=o?g-1:0,p=o?-1:1;if(h<2)for(;;){if(d in f){c=f[d],d+=p;break}if(d+=p,o?d<0:g<=d)throw new i(a)}for(;o?d>=0:g>d;d+=p)d in f&&(c=l(c,f[d],d,v));return c}};return Ra={left:s(!1),right:s(!0)},Ra}var Ca,gu;function _l(){if(gu)return Ca;gu=1;var n=Z();return Ca=function(e,r){var t=[][e];return!!t&&n(function(){t.call(null,r||function(){return 1},1)})},Ca}var du;function tf(){if(du)return cu;du=1;var n=he(),e=rf().left,r=_l(),t=Ua(),i=jr(),a=!i&&t>79&&t<83,s=a||!r(\"reduce\");return n({target:\"Array\",proto:!0,forced:s},{reduce:function(u){var l=arguments.length;return e(this,u,l,l>1?arguments[1]:void 0)}}),cu}tf();var pu={},yu;function af(){if(yu)return pu;yu=1;var n=he(),e=Fr(),r=Dr().f,t=sr(),i=qe(),a=sn(),s=Pe(),o=on(),u=Me(),l=e(\"\".slice),h=Math.min,c=o(\"endsWith\"),v=!u&&!c&&!!(function(){var f=r(String.prototype,\"endsWith\");return f&&!f.writable})();return n({target:\"String\",proto:!0,forced:!v&&!c},{endsWith:function(g){var d=i(s(this));a(g);var p=arguments.length>1?arguments[1]:void 0,y=d.length,m=p===void 0?y:h(t(p),y),b=i(g);return l(d,m-b.length,m)===b}}),pu}af();var mu={},bu;function nf(){if(bu)return mu;bu=1;var n=ne(),e=J(),r=rn(),t=le(),i=pe(),a=Pe(),s=ml(),o=tn(),u=sr(),l=qe(),h=nr(),c=nn(),v=Pl(),f=Z(),g=v.UNSUPPORTED_Y,d=4294967295,p=Math.min,y=e([].push),m=e(\"\".slice),b=!f(function(){var S=/(?:)/,E=S.exec;S.exec=function(){return E.apply(this,arguments)};var O=\"ab\".split(S);return O.length!==2||O[0]!==\"a\"||O[1]!==\"b\"}),x=\"abbc\".split(/(b)*/)[1]===\"c\"||\"test\".split(/(?:)/,-1).length!==4||\"ab\".split(/(?:ab)*/).length!==2||\".\".split(/(.?)(.?)/).length!==4||\".\".split(/()()/).length>1||\"\".split(/.?/).length;return r(\"split\",function(S,E,O){var P=\"0\".split(void 0,0).length?function(_,A){return _===void 0&&A===0?[]:n(E,this,_,A)}:E;return[function(A,q){var I=a(this),j=i(A)?h(A,S):void 0;return j?n(j,A,I,q):n(P,l(I),A,q)},function(_,A){var q=t(this),I=l(_);if(!x){var j=O(P,q,I,A,P!==E);if(j.done)return j.value}var C=s(q,RegExp),w=q.unicode,U=(q.ignoreCase?\"i\":\"\")+(q.multiline?\"m\":\"\")+(q.unicode?\"u\":\"\")+(g?\"g\":\"y\"),L=new C(g?\"^(?:\"+q.source+\")\":q,U),V=A===void 0?d:A>>>0;if(V===0)return[];if(I.length===0)return c(L,I)===null?[I]:[];for(var M=0,N=0,k=[];N<I.length;){L.lastIndex=g?0:N;var z=c(L,g?m(I,N):I),H;if(z===null||(H=p(u(L.lastIndex+(g?N:0)),I.length))===M)N=o(I,N,w);else{if(y(k,m(I,M,N)),k.length===V)return k;for(var X=1;X<=z.length-1;X++)if(y(k,z[X]),k.length===V)return k;N=M=H}}return y(k,m(I,M)),k}]},x||!b,g),mu}nf();var vr={exports:{}},Ze={exports:{}},sf=Ze.exports,xu;function of(){return xu||(xu=1,(function(){var n,e,r,t,i,a;typeof performance<\"u\"&&performance!==null&&performance.now?Ze.exports=function(){return performance.now()}:typeof process<\"u\"&&process!==null&&process.hrtime?(Ze.exports=function(){return(n()-i)/1e6},e=process.hrtime,n=function(){var s;return s=e(),s[0]*1e9+s[1]},t=n(),a=process.uptime()*1e9,i=t-a):Date.now?(Ze.exports=function(){return Date.now()-r},r=Date.now()):(Ze.exports=function(){return new Date().getTime()-r},r=new Date().getTime())}).call(sf)),Ze.exports}var Ou;function uf(){if(Ou)return vr.exports;Ou=1;for(var n=of(),e=typeof window>\"u\"?Da:window,r=[\"moz\",\"webkit\"],t=\"AnimationFrame\",i=e[\"request\"+t],a=e[\"cancel\"+t]||e[\"cancelRequest\"+t],s=0;!i&&s<r.length;s++)i=e[r[s]+\"Request\"+t],a=e[r[s]+\"Cancel\"+t]||e[r[s]+\"CancelRequest\"+t];if(!i||!a){var o=0,u=0,l=[],h=1e3/60;i=function(c){if(l.length===0){var v=n(),f=Math.max(0,h-(v-o));o=f+v,setTimeout(function(){var g=l.slice(0);l.length=0;for(var d=0;d<g.length;d++)if(!g[d].cancelled)try{g[d].callback(o)}catch(p){setTimeout(function(){throw p},0)}},Math.round(f))}return l.push({handle:++u,callback:c,cancelled:!1}),u},a=function(c){for(var v=0;v<l.length;v++)l[v].handle===c&&(l[v].cancelled=!0)}}return vr.exports=function(c){return i.call(e,c)},vr.exports.cancel=function(){a.apply(e,arguments)},vr.exports.polyfill=function(c){c||(c=e),c.requestAnimationFrame=i,c.cancelAnimationFrame=a},vr.exports}var lf=uf();const wa=il(lf);var Tu={},Pa,Su;function Ml(){return Su||(Su=1,Pa=`\t\n\\v\\f\\r                　\\u2028\\u2029\\uFEFF`),Pa}var Aa,Eu;function hf(){if(Eu)return Aa;Eu=1;var n=J(),e=Pe(),r=qe(),t=Ml(),i=n(\"\".replace),a=RegExp(\"^[\"+t+\"]+\"),s=RegExp(\"(^|[^\"+t+\"])[\"+t+\"]+$\"),o=function(u){return function(l){var h=r(e(l));return u&1&&(h=i(h,a,\"\")),u&2&&(h=i(h,s,\"$1\")),h}};return Aa={start:o(1),end:o(2),trim:o(3)},Aa}var Ia,Ru;function ff(){if(Ru)return Ia;Ru=1;var n=Vr().PROPER,e=Z(),r=Ml(),t=\"​᠎\";return Ia=function(i){return e(function(){return!!r[i]()||t[i]()!==t||n&&r[i].name!==i})},Ia}var Cu;function cf(){if(Cu)return Tu;Cu=1;var n=he(),e=hf().trim,r=ff();return n({target:\"String\",proto:!0,forced:r(\"trim\")},{trim:function(){return e(this)}}),Tu}cf();var Na,wu;function vf(){return wu||(wu=1,Na=function(n){this.ok=!1,this.alpha=1,n.charAt(0)==\"#\"&&(n=n.substr(1,6)),n=n.replace(/ /g,\"\"),n=n.toLowerCase();var e={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"};n=e[n]||n;for(var r=[{re:/^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*((?:\\d?\\.)?\\d)\\)$/,example:[\"rgba(123, 234, 45, 0.8)\",\"rgba(255,234,245,1.0)\"],process:function(u){return[parseInt(u[1]),parseInt(u[2]),parseInt(u[3]),parseFloat(u[4])]}},{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(u){return[parseInt(u[1]),parseInt(u[2]),parseInt(u[3])]}},{re:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,example:[\"#00ff00\",\"336699\"],process:function(u){return[parseInt(u[1],16),parseInt(u[2],16),parseInt(u[3],16)]}},{re:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,example:[\"#fb0\",\"f0f\"],process:function(u){return[parseInt(u[1]+u[1],16),parseInt(u[2]+u[2],16),parseInt(u[3]+u[3],16)]}}],t=0;t<r.length;t++){var i=r[t].re,a=r[t].process,s=i.exec(n);if(s){var o=a(s);this.r=o[0],this.g=o[1],this.b=o[2],o.length>3&&(this.alpha=o[3]),this.ok=!0}}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha<0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toRGBA=function(){return\"rgba(\"+this.r+\", \"+this.g+\", \"+this.b+\", \"+this.alpha+\")\"},this.toHex=function(){var u=this.r.toString(16),l=this.g.toString(16),h=this.b.toString(16);return u.length==1&&(u=\"0\"+u),l.length==1&&(l=\"0\"+l),h.length==1&&(h=\"0\"+h),\"#\"+u+l+h},this.getHelpXML=function(){for(var u=new Array,l=0;l<r.length;l++)for(var h=r[l].example,c=0;c<h.length;c++)u[u.length]=h[c];for(var v in e)u[u.length]=v;var f=document.createElement(\"ul\");f.setAttribute(\"id\",\"rgbcolor-examples\");for(var l=0;l<u.length;l++)try{var g=document.createElement(\"li\"),d=new RGBColor(u[l]),p=document.createElement(\"div\");p.style.cssText=\"margin: 3px; border: 1px solid black; background:\"+d.toHex()+\"; color:\"+d.toHex(),p.appendChild(document.createTextNode(\"test\"));var y=document.createTextNode(\" \"+u[l]+\" -> \"+d.toRGB()+\" -> \"+d.toHex());g.appendChild(p),g.appendChild(y),f.appendChild(g)}catch{}return f}}),Na}var gf=vf();const La=il(gf);var Pu={},Au;function df(){if(Au)return Pu;Au=1;var n=he(),e=Fr(),r=vl().indexOf,t=_l(),i=e([].indexOf),a=!!i&&1/i([1],1,-0)<0,s=a||!t(\"indexOf\");return n({target:\"Array\",proto:!0,forced:s},{indexOf:function(u){var l=arguments.length>1?arguments[1]:void 0;return a?i(this,u,l)||0:r(this,u,l)}}),Pu}df();var Iu={},Nu;function pf(){if(Nu)return Iu;Nu=1;var n=he(),e=J(),r=sn(),t=Pe(),i=qe(),a=on(),s=e(\"\".indexOf);return n({target:\"String\",proto:!0,forced:!a(\"includes\")},{includes:function(u){return!!~s(i(t(this)),i(r(u)),arguments.length>1?arguments[1]:void 0)}}),Iu}pf();var _u={},_a,Mu;function yf(){if(Mu)return _a;Mu=1;var n=er();return _a=Array.isArray||function(r){return n(r)===\"Array\"},_a}var qu;function mf(){if(qu)return _u;qu=1;var n=he(),e=J(),r=yf(),t=e([].reverse),i=[1,2];return n({target:\"Array\",proto:!0,forced:String(i)===String(i.reverse())},{reverse:function(){return r(this)&&(this.length=this.length),t(this)}}),_u}mf();var ql=function(n,e){return(ql=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,t){r.__proto__=t}||function(r,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])})(n,e)};function Dl(n,e){if(typeof e!=\"function\"&&e!==null)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=n}ql(n,e),n.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}function bf(n){var e=\"\";Array.isArray(n)||(n=[n]);for(var r=0;r<n.length;r++){var t=n[r];if(t.type===T.CLOSE_PATH)e+=\"z\";else if(t.type===T.HORIZ_LINE_TO)e+=(t.relative?\"h\":\"H\")+t.x;else if(t.type===T.VERT_LINE_TO)e+=(t.relative?\"v\":\"V\")+t.y;else if(t.type===T.MOVE_TO)e+=(t.relative?\"m\":\"M\")+t.x+\" \"+t.y;else if(t.type===T.LINE_TO)e+=(t.relative?\"l\":\"L\")+t.x+\" \"+t.y;else if(t.type===T.CURVE_TO)e+=(t.relative?\"c\":\"C\")+t.x1+\" \"+t.y1+\" \"+t.x2+\" \"+t.y2+\" \"+t.x+\" \"+t.y;else if(t.type===T.SMOOTH_CURVE_TO)e+=(t.relative?\"s\":\"S\")+t.x2+\" \"+t.y2+\" \"+t.x+\" \"+t.y;else if(t.type===T.QUAD_TO)e+=(t.relative?\"q\":\"Q\")+t.x1+\" \"+t.y1+\" \"+t.x+\" \"+t.y;else if(t.type===T.SMOOTH_QUAD_TO)e+=(t.relative?\"t\":\"T\")+t.x+\" \"+t.y;else{if(t.type!==T.ARC)throw new Error('Unexpected command type \"'+t.type+'\" at index '+r+\".\");e+=(t.relative?\"a\":\"A\")+t.rX+\" \"+t.rY+\" \"+t.xRot+\" \"+ +t.lArcFlag+\" \"+ +t.sweepFlag+\" \"+t.x+\" \"+t.y}}return e}function ka(n,e){var r=n[0],t=n[1];return[r*Math.cos(e)-t*Math.sin(e),r*Math.sin(e)+t*Math.cos(e)]}function Ce(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];for(var r=0;r<n.length;r++)if(typeof n[r]!=\"number\")throw new Error(\"assertNumbers arguments[\"+r+\"] is not a number. \"+typeof n[r]+\" == typeof \"+n[r]);return!0}var ze=Math.PI;function Ma(n,e,r){n.lArcFlag=n.lArcFlag===0?0:1,n.sweepFlag=n.sweepFlag===0?0:1;var t=n.rX,i=n.rY,a=n.x,s=n.y;t=Math.abs(n.rX),i=Math.abs(n.rY);var o=ka([(e-a)/2,(r-s)/2],-n.xRot/180*ze),u=o[0],l=o[1],h=Math.pow(u,2)/Math.pow(t,2)+Math.pow(l,2)/Math.pow(i,2);1<h&&(t*=Math.sqrt(h),i*=Math.sqrt(h)),n.rX=t,n.rY=i;var c=Math.pow(t,2)*Math.pow(l,2)+Math.pow(i,2)*Math.pow(u,2),v=(n.lArcFlag!==n.sweepFlag?1:-1)*Math.sqrt(Math.max(0,(Math.pow(t,2)*Math.pow(i,2)-c)/c)),f=t*l/i*v,g=-i*u/t*v,d=ka([f,g],n.xRot/180*ze);n.cX=d[0]+(e+a)/2,n.cY=d[1]+(r+s)/2,n.phi1=Math.atan2((l-g)/i,(u-f)/t),n.phi2=Math.atan2((-l-g)/i,(-u-f)/t),n.sweepFlag===0&&n.phi2>n.phi1&&(n.phi2-=2*ze),n.sweepFlag===1&&n.phi2<n.phi1&&(n.phi2+=2*ze),n.phi1*=180/ze,n.phi2*=180/ze}function Du(n,e,r){Ce(n,e,r);var t=n*n+e*e-r*r;if(0>t)return[];if(t===0)return[[n*r/(n*n+e*e),e*r/(n*n+e*e)]];var i=Math.sqrt(t);return[[(n*r+e*i)/(n*n+e*e),(e*r-n*i)/(n*n+e*e)],[(n*r-e*i)/(n*n+e*e),(e*r+n*i)/(n*n+e*e)]]}var ie,ke=Math.PI/180;function Vu(n,e,r){return(1-r)*n+r*e}function Lu(n,e,r,t){return n+Math.cos(t/180*ze)*e+Math.sin(t/180*ze)*r}function ku(n,e,r,t){var i=1e-6,a=e-n,s=r-e,o=3*a+3*(t-r)-6*s,u=6*(s-a),l=3*a;return Math.abs(o)<i?[-l/u]:(function(h,c,v){var f=h*h/4-c;if(f<-v)return[];if(f<=v)return[-h/2];var g=Math.sqrt(f);return[-h/2-g,-h/2+g]})(u/o,l/o,i)}function ju(n,e,r,t,i){var a=1-i;return n*(a*a*a)+e*(3*a*a*i)+r*(3*a*i*i)+t*(i*i*i)}(function(n){function e(){return i((function(o,u,l){return o.relative&&(o.x1!==void 0&&(o.x1+=u),o.y1!==void 0&&(o.y1+=l),o.x2!==void 0&&(o.x2+=u),o.y2!==void 0&&(o.y2+=l),o.x!==void 0&&(o.x+=u),o.y!==void 0&&(o.y+=l),o.relative=!1),o}))}function r(){var o=NaN,u=NaN,l=NaN,h=NaN;return i((function(c,v,f){return c.type&T.SMOOTH_CURVE_TO&&(c.type=T.CURVE_TO,o=isNaN(o)?v:o,u=isNaN(u)?f:u,c.x1=c.relative?v-o:2*v-o,c.y1=c.relative?f-u:2*f-u),c.type&T.CURVE_TO?(o=c.relative?v+c.x2:c.x2,u=c.relative?f+c.y2:c.y2):(o=NaN,u=NaN),c.type&T.SMOOTH_QUAD_TO&&(c.type=T.QUAD_TO,l=isNaN(l)?v:l,h=isNaN(h)?f:h,c.x1=c.relative?v-l:2*v-l,c.y1=c.relative?f-h:2*f-h),c.type&T.QUAD_TO?(l=c.relative?v+c.x1:c.x1,h=c.relative?f+c.y1:c.y1):(l=NaN,h=NaN),c}))}function t(){var o=NaN,u=NaN;return i((function(l,h,c){if(l.type&T.SMOOTH_QUAD_TO&&(l.type=T.QUAD_TO,o=isNaN(o)?h:o,u=isNaN(u)?c:u,l.x1=l.relative?h-o:2*h-o,l.y1=l.relative?c-u:2*c-u),l.type&T.QUAD_TO){o=l.relative?h+l.x1:l.x1,u=l.relative?c+l.y1:l.y1;var v=l.x1,f=l.y1;l.type=T.CURVE_TO,l.x1=((l.relative?0:h)+2*v)/3,l.y1=((l.relative?0:c)+2*f)/3,l.x2=(l.x+2*v)/3,l.y2=(l.y+2*f)/3}else o=NaN,u=NaN;return l}))}function i(o){var u=0,l=0,h=NaN,c=NaN;return function(v){if(isNaN(h)&&!(v.type&T.MOVE_TO))throw new Error(\"path must start with moveto\");var f=o(v,u,l,h,c);return v.type&T.CLOSE_PATH&&(u=h,l=c),v.x!==void 0&&(u=v.relative?u+v.x:v.x),v.y!==void 0&&(l=v.relative?l+v.y:v.y),v.type&T.MOVE_TO&&(h=u,c=l),f}}function a(o,u,l,h,c,v){return Ce(o,u,l,h,c,v),i((function(f,g,d,p){var y=f.x1,m=f.x2,b=f.relative&&!isNaN(p),x=f.x!==void 0?f.x:b?0:g,S=f.y!==void 0?f.y:b?0:d;function E(z){return z*z}f.type&T.HORIZ_LINE_TO&&u!==0&&(f.type=T.LINE_TO,f.y=f.relative?0:d),f.type&T.VERT_LINE_TO&&l!==0&&(f.type=T.LINE_TO,f.x=f.relative?0:g),f.x!==void 0&&(f.x=f.x*o+S*l+(b?0:c)),f.y!==void 0&&(f.y=x*u+f.y*h+(b?0:v)),f.x1!==void 0&&(f.x1=f.x1*o+f.y1*l+(b?0:c)),f.y1!==void 0&&(f.y1=y*u+f.y1*h+(b?0:v)),f.x2!==void 0&&(f.x2=f.x2*o+f.y2*l+(b?0:c)),f.y2!==void 0&&(f.y2=m*u+f.y2*h+(b?0:v));var O=o*h-u*l;if(f.xRot!==void 0&&(o!==1||u!==0||l!==0||h!==1))if(O===0)delete f.rX,delete f.rY,delete f.xRot,delete f.lArcFlag,delete f.sweepFlag,f.type=T.LINE_TO;else{var P=f.xRot*Math.PI/180,_=Math.sin(P),A=Math.cos(P),q=1/E(f.rX),I=1/E(f.rY),j=E(A)*q+E(_)*I,C=2*_*A*(q-I),w=E(_)*q+E(A)*I,U=j*h*h-C*u*h+w*u*u,L=C*(o*h+u*l)-2*(j*l*h+w*o*u),V=j*l*l-C*o*l+w*o*o,M=(Math.atan2(L,U-V)+Math.PI)%Math.PI/2,N=Math.sin(M),k=Math.cos(M);f.rX=Math.abs(O)/Math.sqrt(U*E(k)+L*N*k+V*E(N)),f.rY=Math.abs(O)/Math.sqrt(U*E(N)-L*N*k+V*E(k)),f.xRot=180*M/Math.PI}return f.sweepFlag!==void 0&&0>O&&(f.sweepFlag=+!f.sweepFlag),f}))}function s(){return function(o){var u={};for(var l in o)u[l]=o[l];return u}}n.ROUND=function(o){function u(l){return Math.round(l*o)/o}return o===void 0&&(o=1e13),Ce(o),function(l){return l.x1!==void 0&&(l.x1=u(l.x1)),l.y1!==void 0&&(l.y1=u(l.y1)),l.x2!==void 0&&(l.x2=u(l.x2)),l.y2!==void 0&&(l.y2=u(l.y2)),l.x!==void 0&&(l.x=u(l.x)),l.y!==void 0&&(l.y=u(l.y)),l.rX!==void 0&&(l.rX=u(l.rX)),l.rY!==void 0&&(l.rY=u(l.rY)),l}},n.TO_ABS=e,n.TO_REL=function(){return i((function(o,u,l){return o.relative||(o.x1!==void 0&&(o.x1-=u),o.y1!==void 0&&(o.y1-=l),o.x2!==void 0&&(o.x2-=u),o.y2!==void 0&&(o.y2-=l),o.x!==void 0&&(o.x-=u),o.y!==void 0&&(o.y-=l),o.relative=!0),o}))},n.NORMALIZE_HVZ=function(o,u,l){return o===void 0&&(o=!0),u===void 0&&(u=!0),l===void 0&&(l=!0),i((function(h,c,v,f,g){if(isNaN(f)&&!(h.type&T.MOVE_TO))throw new Error(\"path must start with moveto\");return u&&h.type&T.HORIZ_LINE_TO&&(h.type=T.LINE_TO,h.y=h.relative?0:v),l&&h.type&T.VERT_LINE_TO&&(h.type=T.LINE_TO,h.x=h.relative?0:c),o&&h.type&T.CLOSE_PATH&&(h.type=T.LINE_TO,h.x=h.relative?f-c:f,h.y=h.relative?g-v:g),h.type&T.ARC&&(h.rX===0||h.rY===0)&&(h.type=T.LINE_TO,delete h.rX,delete h.rY,delete h.xRot,delete h.lArcFlag,delete h.sweepFlag),h}))},n.NORMALIZE_ST=r,n.QT_TO_C=t,n.INFO=i,n.SANITIZE=function(o){o===void 0&&(o=0),Ce(o);var u=NaN,l=NaN,h=NaN,c=NaN;return i((function(v,f,g,d,p){var y=Math.abs,m=!1,b=0,x=0;if(v.type&T.SMOOTH_CURVE_TO&&(b=isNaN(u)?0:f-u,x=isNaN(l)?0:g-l),v.type&(T.CURVE_TO|T.SMOOTH_CURVE_TO)?(u=v.relative?f+v.x2:v.x2,l=v.relative?g+v.y2:v.y2):(u=NaN,l=NaN),v.type&T.SMOOTH_QUAD_TO?(h=isNaN(h)?f:2*f-h,c=isNaN(c)?g:2*g-c):v.type&T.QUAD_TO?(h=v.relative?f+v.x1:v.x1,c=v.relative?g+v.y1:v.y2):(h=NaN,c=NaN),v.type&T.LINE_COMMANDS||v.type&T.ARC&&(v.rX===0||v.rY===0||!v.lArcFlag)||v.type&T.CURVE_TO||v.type&T.SMOOTH_CURVE_TO||v.type&T.QUAD_TO||v.type&T.SMOOTH_QUAD_TO){var S=v.x===void 0?0:v.relative?v.x:v.x-f,E=v.y===void 0?0:v.relative?v.y:v.y-g;b=isNaN(h)?v.x1===void 0?b:v.relative?v.x:v.x1-f:h-f,x=isNaN(c)?v.y1===void 0?x:v.relative?v.y:v.y1-g:c-g;var O=v.x2===void 0?0:v.relative?v.x:v.x2-f,P=v.y2===void 0?0:v.relative?v.y:v.y2-g;y(S)<=o&&y(E)<=o&&y(b)<=o&&y(x)<=o&&y(O)<=o&&y(P)<=o&&(m=!0)}return v.type&T.CLOSE_PATH&&y(f-d)<=o&&y(g-p)<=o&&(m=!0),m?[]:v}))},n.MATRIX=a,n.ROTATE=function(o,u,l){u===void 0&&(u=0),l===void 0&&(l=0),Ce(o,u,l);var h=Math.sin(o),c=Math.cos(o);return a(c,h,-h,c,u-u*c+l*h,l-u*h-l*c)},n.TRANSLATE=function(o,u){return u===void 0&&(u=0),Ce(o,u),a(1,0,0,1,o,u)},n.SCALE=function(o,u){return u===void 0&&(u=o),Ce(o,u),a(o,0,0,u,0,0)},n.SKEW_X=function(o){return Ce(o),a(1,0,Math.atan(o),1,0,0)},n.SKEW_Y=function(o){return Ce(o),a(1,Math.atan(o),0,1,0,0)},n.X_AXIS_SYMMETRY=function(o){return o===void 0&&(o=0),Ce(o),a(-1,0,0,1,o,0)},n.Y_AXIS_SYMMETRY=function(o){return o===void 0&&(o=0),Ce(o),a(1,0,0,-1,0,o)},n.A_TO_C=function(){return i((function(o,u,l){return T.ARC===o.type?(function(h,c,v){var f,g,d,p;h.cX||Ma(h,c,v);for(var y=Math.min(h.phi1,h.phi2),m=Math.max(h.phi1,h.phi2)-y,b=Math.ceil(m/90),x=new Array(b),S=c,E=v,O=0;O<b;O++){var P=Vu(h.phi1,h.phi2,O/b),_=Vu(h.phi1,h.phi2,(O+1)/b),A=_-P,q=4/3*Math.tan(A*ke/4),I=[Math.cos(P*ke)-q*Math.sin(P*ke),Math.sin(P*ke)+q*Math.cos(P*ke)],j=I[0],C=I[1],w=[Math.cos(_*ke),Math.sin(_*ke)],U=w[0],L=w[1],V=[U+q*Math.sin(_*ke),L-q*Math.cos(_*ke)],M=V[0],N=V[1];x[O]={relative:h.relative,type:T.CURVE_TO};var k=function(z,H){var X=ka([z*h.rX,H*h.rY],h.xRot),se=X[0],be=X[1];return[h.cX+se,h.cY+be]};f=k(j,C),x[O].x1=f[0],x[O].y1=f[1],g=k(M,N),x[O].x2=g[0],x[O].y2=g[1],d=k(U,L),x[O].x=d[0],x[O].y=d[1],h.relative&&(x[O].x1-=S,x[O].y1-=E,x[O].x2-=S,x[O].y2-=E,x[O].x-=S,x[O].y-=E),S=(p=[x[O].x,x[O].y])[0],E=p[1]}return x})(o,o.relative?0:u,o.relative?0:l):o}))},n.ANNOTATE_ARCS=function(){return i((function(o,u,l){return o.relative&&(u=0,l=0),T.ARC===o.type&&Ma(o,u,l),o}))},n.CLONE=s,n.CALCULATE_BOUNDS=function(){var o=function(v){var f={};for(var g in v)f[g]=v[g];return f},u=e(),l=t(),h=r(),c=i((function(v,f,g){var d=h(l(u(o(v))));function p(N){N>c.maxX&&(c.maxX=N),N<c.minX&&(c.minX=N)}function y(N){N>c.maxY&&(c.maxY=N),N<c.minY&&(c.minY=N)}if(d.type&T.DRAWING_COMMANDS&&(p(f),y(g)),d.type&T.HORIZ_LINE_TO&&p(d.x),d.type&T.VERT_LINE_TO&&y(d.y),d.type&T.LINE_TO&&(p(d.x),y(d.y)),d.type&T.CURVE_TO){p(d.x),y(d.y);for(var m=0,b=ku(f,d.x1,d.x2,d.x);m<b.length;m++)0<(M=b[m])&&1>M&&p(ju(f,d.x1,d.x2,d.x,M));for(var x=0,S=ku(g,d.y1,d.y2,d.y);x<S.length;x++)0<(M=S[x])&&1>M&&y(ju(g,d.y1,d.y2,d.y,M))}if(d.type&T.ARC){p(d.x),y(d.y),Ma(d,f,g);for(var E=d.xRot/180*Math.PI,O=Math.cos(E)*d.rX,P=Math.sin(E)*d.rX,_=-Math.sin(E)*d.rY,A=Math.cos(E)*d.rY,q=d.phi1<d.phi2?[d.phi1,d.phi2]:-180>d.phi2?[d.phi2+360,d.phi1+360]:[d.phi2,d.phi1],I=q[0],j=q[1],C=function(N){var k=N[0],z=N[1],H=180*Math.atan2(z,k)/Math.PI;return H<I?H+360:H},w=0,U=Du(_,-O,0).map(C);w<U.length;w++)(M=U[w])>I&&M<j&&p(Lu(d.cX,O,_,M));for(var L=0,V=Du(A,-P,0).map(C);L<V.length;L++){var M;(M=V[L])>I&&M<j&&y(Lu(d.cY,P,A,M))}}return v}));return c.minX=1/0,c.maxX=-1/0,c.minY=1/0,c.maxY=-1/0,c}})(ie||(ie={}));var Re,Vl=(function(){function n(){}return n.prototype.round=function(e){return this.transform(ie.ROUND(e))},n.prototype.toAbs=function(){return this.transform(ie.TO_ABS())},n.prototype.toRel=function(){return this.transform(ie.TO_REL())},n.prototype.normalizeHVZ=function(e,r,t){return this.transform(ie.NORMALIZE_HVZ(e,r,t))},n.prototype.normalizeST=function(){return this.transform(ie.NORMALIZE_ST())},n.prototype.qtToC=function(){return this.transform(ie.QT_TO_C())},n.prototype.aToC=function(){return this.transform(ie.A_TO_C())},n.prototype.sanitize=function(e){return this.transform(ie.SANITIZE(e))},n.prototype.translate=function(e,r){return this.transform(ie.TRANSLATE(e,r))},n.prototype.scale=function(e,r){return this.transform(ie.SCALE(e,r))},n.prototype.rotate=function(e,r,t){return this.transform(ie.ROTATE(e,r,t))},n.prototype.matrix=function(e,r,t,i,a,s){return this.transform(ie.MATRIX(e,r,t,i,a,s))},n.prototype.skewX=function(e){return this.transform(ie.SKEW_X(e))},n.prototype.skewY=function(e){return this.transform(ie.SKEW_Y(e))},n.prototype.xSymmetry=function(e){return this.transform(ie.X_AXIS_SYMMETRY(e))},n.prototype.ySymmetry=function(e){return this.transform(ie.Y_AXIS_SYMMETRY(e))},n.prototype.annotateArcs=function(){return this.transform(ie.ANNOTATE_ARCS())},n})(),xf=function(n){return n===\" \"||n===\"\t\"||n===\"\\r\"||n===`\n`},Bu=function(n){return 48<=n.charCodeAt(0)&&n.charCodeAt(0)<=57},Of=(function(n){function e(){var r=n.call(this)||this;return r.curNumber=\"\",r.curCommandType=-1,r.curCommandRelative=!1,r.canParseCommandOrComma=!0,r.curNumberHasExp=!1,r.curNumberHasExpDigits=!1,r.curNumberHasDecimal=!1,r.curArgs=[],r}return Dl(e,n),e.prototype.finish=function(r){if(r===void 0&&(r=[]),this.parse(\" \",r),this.curArgs.length!==0||!this.canParseCommandOrComma)throw new SyntaxError(\"Unterminated command at the path end.\");return r},e.prototype.parse=function(r,t){var i=this;t===void 0&&(t=[]);for(var a=function(c){t.push(c),i.curArgs.length=0,i.canParseCommandOrComma=!0},s=0;s<r.length;s++){var o=r[s],u=!(this.curCommandType!==T.ARC||this.curArgs.length!==3&&this.curArgs.length!==4||this.curNumber.length!==1||this.curNumber!==\"0\"&&this.curNumber!==\"1\"),l=Bu(o)&&(this.curNumber===\"0\"&&o===\"0\"||u);if(!Bu(o)||l)if(o!==\"e\"&&o!==\"E\")if(o!==\"-\"&&o!==\"+\"||!this.curNumberHasExp||this.curNumberHasExpDigits)if(o!==\".\"||this.curNumberHasExp||this.curNumberHasDecimal||u){if(this.curNumber&&this.curCommandType!==-1){var h=Number(this.curNumber);if(isNaN(h))throw new SyntaxError(\"Invalid number ending at \"+s);if(this.curCommandType===T.ARC){if(this.curArgs.length===0||this.curArgs.length===1){if(0>h)throw new SyntaxError('Expected positive number, got \"'+h+'\" at index \"'+s+'\"')}else if((this.curArgs.length===3||this.curArgs.length===4)&&this.curNumber!==\"0\"&&this.curNumber!==\"1\")throw new SyntaxError('Expected a flag, got \"'+this.curNumber+'\" at index \"'+s+'\"')}this.curArgs.push(h),this.curArgs.length===Tf[this.curCommandType]&&(T.HORIZ_LINE_TO===this.curCommandType?a({type:T.HORIZ_LINE_TO,relative:this.curCommandRelative,x:h}):T.VERT_LINE_TO===this.curCommandType?a({type:T.VERT_LINE_TO,relative:this.curCommandRelative,y:h}):this.curCommandType===T.MOVE_TO||this.curCommandType===T.LINE_TO||this.curCommandType===T.SMOOTH_QUAD_TO?(a({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),T.MOVE_TO===this.curCommandType&&(this.curCommandType=T.LINE_TO)):this.curCommandType===T.CURVE_TO?a({type:T.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===T.SMOOTH_CURVE_TO?a({type:T.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===T.QUAD_TO?a({type:T.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===T.ARC&&a({type:T.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber=\"\",this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!xf(o))if(o===\",\"&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if(o!==\"+\"&&o!==\"-\"&&o!==\".\")if(l)this.curNumber=o,this.curNumberHasDecimal=!1;else{if(this.curArgs.length!==0)throw new SyntaxError(\"Unterminated command at index \"+s+\".\");if(!this.canParseCommandOrComma)throw new SyntaxError('Unexpected character \"'+o+'\" at index '+s+\". Command cannot follow comma\");if(this.canParseCommandOrComma=!1,o!==\"z\"&&o!==\"Z\")if(o===\"h\"||o===\"H\")this.curCommandType=T.HORIZ_LINE_TO,this.curCommandRelative=o===\"h\";else if(o===\"v\"||o===\"V\")this.curCommandType=T.VERT_LINE_TO,this.curCommandRelative=o===\"v\";else if(o===\"m\"||o===\"M\")this.curCommandType=T.MOVE_TO,this.curCommandRelative=o===\"m\";else if(o===\"l\"||o===\"L\")this.curCommandType=T.LINE_TO,this.curCommandRelative=o===\"l\";else if(o===\"c\"||o===\"C\")this.curCommandType=T.CURVE_TO,this.curCommandRelative=o===\"c\";else if(o===\"s\"||o===\"S\")this.curCommandType=T.SMOOTH_CURVE_TO,this.curCommandRelative=o===\"s\";else if(o===\"q\"||o===\"Q\")this.curCommandType=T.QUAD_TO,this.curCommandRelative=o===\"q\";else if(o===\"t\"||o===\"T\")this.curCommandType=T.SMOOTH_QUAD_TO,this.curCommandRelative=o===\"t\";else{if(o!==\"a\"&&o!==\"A\")throw new SyntaxError('Unexpected character \"'+o+'\" at index '+s+\".\");this.curCommandType=T.ARC,this.curCommandRelative=o===\"a\"}else t.push({type:T.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=o,this.curNumberHasDecimal=o===\".\"}else this.curNumber+=o,this.curNumberHasDecimal=!0;else this.curNumber+=o;else this.curNumber+=o,this.curNumberHasExp=!0;else this.curNumber+=o,this.curNumberHasExpDigits=this.curNumberHasExp}return t},e.prototype.transform=function(r){return Object.create(this,{parse:{value:function(t,i){i===void 0&&(i=[]);for(var a=0,s=Object.getPrototypeOf(this).parse.call(this,t);a<s.length;a++){var o=s[a],u=r(o);Array.isArray(u)?i.push.apply(i,u):i.push(u)}return i}}})},e})(Vl),T=(function(n){function e(r){var t=n.call(this)||this;return t.commands=typeof r==\"string\"?e.parse(r):r,t}return Dl(e,n),e.prototype.encode=function(){return e.encode(this.commands)},e.prototype.getBounds=function(){var r=ie.CALCULATE_BOUNDS();return this.transform(r),r},e.prototype.transform=function(r){for(var t=[],i=0,a=this.commands;i<a.length;i++){var s=r(a[i]);Array.isArray(s)?t.push.apply(t,s):t.push(s)}return this.commands=t,this},e.encode=function(r){return bf(r)},e.parse=function(r){var t=new Of,i=[];return t.parse(r,i),t.finish(i),i},e.CLOSE_PATH=1,e.MOVE_TO=2,e.HORIZ_LINE_TO=4,e.VERT_LINE_TO=8,e.LINE_TO=16,e.CURVE_TO=32,e.SMOOTH_CURVE_TO=64,e.QUAD_TO=128,e.SMOOTH_QUAD_TO=256,e.ARC=512,e.LINE_COMMANDS=e.LINE_TO|e.HORIZ_LINE_TO|e.VERT_LINE_TO,e.DRAWING_COMMANDS=e.HORIZ_LINE_TO|e.VERT_LINE_TO|e.LINE_TO|e.CURVE_TO|e.SMOOTH_CURVE_TO|e.QUAD_TO|e.SMOOTH_QUAD_TO|e.ARC,e})(Vl),Tf=((Re={})[T.MOVE_TO]=2,Re[T.LINE_TO]=2,Re[T.HORIZ_LINE_TO]=1,Re[T.VERT_LINE_TO]=1,Re[T.CLOSE_PATH]=0,Re[T.QUAD_TO]=4,Re[T.SMOOTH_QUAD_TO]=2,Re[T.CURVE_TO]=6,Re[T.SMOOTH_CURVE_TO]=4,Re[T.ARC]=7,Re),Fu={},Uu;function Sf(){if(Uu)return Fu;Uu=1;var n=Vr().PROPER,e=tr(),r=le(),t=qe(),i=Z(),a=an(),s=\"toString\",o=RegExp.prototype,u=o[s],l=i(function(){return u.call({source:\"a\",flags:\"b\"})!==\"/a/b\"}),h=n&&u.name!==s;return(l||h)&&e(o,s,function(){var v=r(this),f=t(v.source),g=t(a(v));return\"/\"+f+\"/\"+g},{unsafe:!0}),Fu}Sf();function Pr(n){\"@babel/helpers - typeof\";return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?Pr=function(e){return typeof e}:Pr=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},Pr(n)}function Ef(n,e){if(!(n instanceof e))throw new TypeError(\"Cannot call a class as a function\")}var Rf=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],Cf=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function wf(n,e,r,t,i){if(typeof n==\"string\"&&(n=document.getElementById(n)),!n||Pr(n)!==\"object\"||!(\"getContext\"in n))throw new TypeError(\"Expecting canvas with `getContext` method in processCanvasRGB(A) calls!\");var a=n.getContext(\"2d\");try{return a.getImageData(e,r,t,i)}catch(s){throw new Error(\"unable to access image data: \"+s)}}function Pf(n,e,r,t,i,a){if(!(isNaN(a)||a<1)){a|=0;var s=wf(n,e,r,t,i);s=Af(s,e,r,t,i,a),n.getContext(\"2d\").putImageData(s,e,r)}}function Af(n,e,r,t,i,a){for(var s=n.data,o=2*a+1,u=t-1,l=i-1,h=a+1,c=h*(h+1)/2,v=new Gu,f=v,g,d=1;d<o;d++)f=f.next=new Gu,d===h&&(g=f);f.next=v;for(var p=null,y=null,m=0,b=0,x=Rf[a],S=Cf[a],E=0;E<i;E++){f=v;for(var O=s[b],P=s[b+1],_=s[b+2],A=s[b+3],q=0;q<h;q++)f.r=O,f.g=P,f.b=_,f.a=A,f=f.next;for(var I=0,j=0,C=0,w=0,U=h*O,L=h*P,V=h*_,M=h*A,N=c*O,k=c*P,z=c*_,H=c*A,X=1;X<h;X++){var se=b+((u<X?u:X)<<2),be=s[se],oe=s[se+1],Ue=s[se+2],Ge=s[se+3],fe=h-X;N+=(f.r=be)*fe,k+=(f.g=oe)*fe,z+=(f.b=Ue)*fe,H+=(f.a=Ge)*fe,I+=be,j+=oe,C+=Ue,w+=Ge,f=f.next}p=v,y=g;for(var Ne=0;Ne<t;Ne++){var _e=H*x>>>S;if(s[b+3]=_e,_e!==0){var me=255/_e;s[b]=(N*x>>>S)*me,s[b+1]=(k*x>>>S)*me,s[b+2]=(z*x>>>S)*me}else s[b]=s[b+1]=s[b+2]=0;N-=U,k-=L,z-=V,H-=M,U-=p.r,L-=p.g,V-=p.b,M-=p.a;var ce=Ne+a+1;ce=m+(ce<u?ce:u)<<2,I+=p.r=s[ce],j+=p.g=s[ce+1],C+=p.b=s[ce+2],w+=p.a=s[ce+3],N+=I,k+=j,z+=C,H+=w,p=p.next;var xe=y,De=xe.r,Ve=xe.g,Xe=xe.b,ur=xe.a;U+=De,L+=Ve,V+=Xe,M+=ur,I-=De,j-=Ve,C-=Xe,w-=ur,y=y.next,b+=4}m+=t}for(var $e=0;$e<t;$e++){b=$e<<2;var ve=s[b],ge=s[b+1],Oe=s[b+2],R=s[b+3],B=h*ve,G=h*ge,$=h*Oe,W=h*R,Te=c*ve,Le=c*ge,Se=c*Oe,Ee=c*R;f=v;for(var lr=0;lr<h;lr++)f.r=ve,f.g=ge,f.b=Oe,f.a=R,f=f.next;for(var hr=t,fr=0,Wr=0,Yr=0,Xr=0,Sr=1;Sr<=a;Sr++){b=hr+$e<<2;var Er=h-Sr;Te+=(f.r=ve=s[b])*Er,Le+=(f.g=ge=s[b+1])*Er,Se+=(f.b=Oe=s[b+2])*Er,Ee+=(f.a=R=s[b+3])*Er,Xr+=ve,fr+=ge,Wr+=Oe,Yr+=R,f=f.next,Sr<l&&(hr+=t)}b=$e,p=v,y=g;for(var Kr=0;Kr<i;Kr++){var de=b<<2;s[de+3]=R=Ee*x>>>S,R>0?(R=255/R,s[de]=(Te*x>>>S)*R,s[de+1]=(Le*x>>>S)*R,s[de+2]=(Se*x>>>S)*R):s[de]=s[de+1]=s[de+2]=0,Te-=B,Le-=G,Se-=$,Ee-=W,B-=p.r,G-=p.g,$-=p.b,W-=p.a,de=$e+((de=Kr+h)<l?de:l)*t<<2,Te+=Xr+=p.r=s[de],Le+=fr+=p.g=s[de+1],Se+=Wr+=p.b=s[de+2],Ee+=Yr+=p.a=s[de+3],p=p.next,B+=ve=y.r,G+=ge=y.g,$+=Oe=y.b,W+=R=y.a,Xr-=ve,fr-=ge,Wr-=Oe,Yr-=R,y=y.next,b+=t}}return n}var Gu=function n(){Ef(this,n),this.r=0,this.g=0,this.b=0,this.a=0,this.next=null};function If(){var{DOMParser:n}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:n,createCanvas(r,t){return new OffscreenCanvas(r,t)},createImage(r){return Be(function*(){var t=yield fetch(r),i=yield t.blob(),a=yield createImageBitmap(i);return a})()}};return(typeof DOMParser<\"u\"||typeof n>\"u\")&&Reflect.deleteProperty(e,\"DOMParser\"),e}function Nf(n){var{DOMParser:e,canvas:r,fetch:t}=n;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:e,fetch:t,createCanvas:r.createCanvas,createImage:r.loadImage}}var zc=Object.freeze({__proto__:null,offscreen:If,node:Nf});function or(n){return n.replace(/(?!\\u3000)\\s+/gm,\" \")}function _f(n){return n.replace(/^[\\n \\t]+/,\"\")}function Mf(n){return n.replace(/[\\n \\t]+$/,\"\")}function ye(n){var e=(n||\"\").match(/-?(\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?|\\.\\d+)(?=\\D|$)/gm)||[];return e.map(parseFloat)}var qf=/^[A-Z-]+$/;function Df(n){return qf.test(n)?n.toLowerCase():n}function Ll(n){var e=/url\\(('([^']+)'|\"([^\"]+)\"|([^'\")]+))\\)/.exec(n)||[];return e[2]||e[3]||e[4]}function Vf(n){if(!n.startsWith(\"rgb\"))return n;var e=3,r=n.replace(/\\d+(\\.\\d+)?/g,(t,i)=>e--&&i?String(Math.round(parseFloat(t))):t);return r}var Lf=/(\\[[^\\]]+\\])/g,kf=/(#[^\\s+>~.[:]+)/g,jf=/(\\.[^\\s+>~.[:]+)/g,Bf=/(::[^\\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi,Ff=/(:[\\w-]+\\([^)]*\\))/gi,Uf=/(:[^\\s+>~.[:]+)/g,Gf=/([^\\s+>~.[:]+)/g;function Ke(n,e){var r=e.exec(n);return r?[n.replace(e,\" \"),r.length]:[n,0]}function $f(n){var e=[0,0,0],r=n.replace(/:not\\(([^)]*)\\)/g,\"     $1 \").replace(/{[\\s\\S]*/gm,\" \"),t=0;return[r,t]=Ke(r,Lf),e[1]+=t,[r,t]=Ke(r,kf),e[0]+=t,[r,t]=Ke(r,jf),e[1]+=t,[r,t]=Ke(r,Bf),e[2]+=t,[r,t]=Ke(r,Ff),e[1]+=t,[r,t]=Ke(r,Uf),e[1]+=t,r=r.replace(/[*\\s+>~]/g,\" \").replace(/[#.]/g,\" \"),[r,t]=Ke(r,Gf),e[2]+=t,e.join(\"\")}var ar=1e-8;function $u(n){return Math.sqrt(Math.pow(n[0],2)+Math.pow(n[1],2))}function ja(n,e){return(n[0]*e[0]+n[1]*e[1])/($u(n)*$u(e))}function zu(n,e){return(n[0]*e[1]<n[1]*e[0]?-1:1)*Math.acos(ja(n,e))}function Hu(n){return n*n*n}function Wu(n){return 3*n*n*(1-n)}function Yu(n){return 3*n*(1-n)*(1-n)}function Xu(n){return(1-n)*(1-n)*(1-n)}function Ku(n){return n*n}function Qu(n){return 2*n*(1-n)}function Zu(n){return(1-n)*(1-n)}class D{constructor(e,r,t){this.document=e,this.name=r,this.value=t,this.isNormalizedColor=!1}static empty(e){return new D(e,\"EMPTY\",\"\")}split(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:\" \",{document:r,name:t}=this;return or(this.getString()).trim().split(e).map(i=>new D(r,t,i))}hasValue(e){var{value:r}=this;return r!==null&&r!==\"\"&&(e||r!==0)&&typeof r<\"u\"}isString(e){var{value:r}=this,t=typeof r==\"string\";return!t||!e?t:e.test(r)}isUrlDefinition(){return this.isString(/^url\\(/)}isPixels(){if(!this.hasValue())return!1;var e=this.getString();switch(!0){case e.endsWith(\"px\"):case/^[0-9]+$/.test(e):return!0;default:return!1}}setValue(e){return this.value=e,this}getValue(e){return typeof e>\"u\"||this.hasValue()?this.value:e}getNumber(e){if(!this.hasValue())return typeof e>\"u\"?0:parseFloat(e);var{value:r}=this,t=parseFloat(r);return this.isString(/%$/)&&(t/=100),t}getString(e){return typeof e>\"u\"||this.hasValue()?typeof this.value>\"u\"?\"\":String(this.value):String(e)}getColor(e){var r=this.getString(e);return this.isNormalizedColor||(this.isNormalizedColor=!0,r=Vf(r),this.value=r),r}getDpi(){return 96}getRem(){return this.document.rootEmSize}getEm(){return this.document.emSize}getUnits(){return this.getString().replace(/[0-9.-]/g,\"\")}getPixels(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(!this.hasValue())return 0;var[t,i]=typeof e==\"boolean\"?[void 0,e]:[e],{viewPort:a}=this.document.screen;switch(!0){case this.isString(/vmin$/):return this.getNumber()/100*Math.min(a.computeSize(\"x\"),a.computeSize(\"y\"));case this.isString(/vmax$/):return this.getNumber()/100*Math.max(a.computeSize(\"x\"),a.computeSize(\"y\"));case this.isString(/vw$/):return this.getNumber()/100*a.computeSize(\"x\");case this.isString(/vh$/):return this.getNumber()/100*a.computeSize(\"y\");case this.isString(/rem$/):return this.getNumber()*this.getRem();case this.isString(/em$/):return this.getNumber()*this.getEm();case this.isString(/ex$/):return this.getNumber()*this.getEm()/2;case this.isString(/px$/):return this.getNumber();case this.isString(/pt$/):return this.getNumber()*this.getDpi()*(1/72);case this.isString(/pc$/):return this.getNumber()*15;case this.isString(/cm$/):return this.getNumber()*this.getDpi()/2.54;case this.isString(/mm$/):return this.getNumber()*this.getDpi()/25.4;case this.isString(/in$/):return this.getNumber()*this.getDpi();case(this.isString(/%$/)&&i):return this.getNumber()*this.getEm();case this.isString(/%$/):return this.getNumber()*a.computeSize(t);default:{var s=this.getNumber();return r&&s<1?s*a.computeSize(t):s}}}getMilliseconds(){return this.hasValue()?this.isString(/ms$/)?this.getNumber():this.getNumber()*1e3:0}getRadians(){if(!this.hasValue())return 0;switch(!0){case this.isString(/deg$/):return this.getNumber()*(Math.PI/180);case this.isString(/grad$/):return this.getNumber()*(Math.PI/200);case this.isString(/rad$/):return this.getNumber();default:return this.getNumber()*(Math.PI/180)}}getDefinition(){var e=this.getString(),r=/#([^)'\"]+)/.exec(e);return r&&(r=r[1]),r||(r=e),this.document.definitions[r]}getFillStyleDefinition(e,r){var t=this.getDefinition();if(!t)return null;if(typeof t.createGradient==\"function\")return t.createGradient(this.document.ctx,e,r);if(typeof t.createPattern==\"function\"){if(t.getHrefAttribute().hasValue()){var i=t.getAttribute(\"patternTransform\");t=t.getHrefAttribute().getDefinition(),i.hasValue()&&t.getAttribute(\"patternTransform\",!0).setValue(i.value)}return t.createPattern(this.document.ctx,e,r)}return null}getTextBaseline(){return this.hasValue()?D.textBaselineMapping[this.getString()]:null}addOpacity(e){for(var r=this.getColor(),t=r.length,i=0,a=0;a<t&&(r[a]===\",\"&&i++,i!==3);a++);if(e.hasValue()&&this.isString()&&i!==3){var s=new La(r);s.ok&&(s.alpha=e.getNumber(),r=s.toRGBA())}return new D(this.document,this.name,r)}}D.textBaselineMapping={baseline:\"alphabetic\",\"before-edge\":\"top\",\"text-before-edge\":\"top\",middle:\"middle\",central:\"middle\",\"after-edge\":\"bottom\",\"text-after-edge\":\"bottom\",ideographic:\"ideographic\",alphabetic:\"alphabetic\",hanging:\"hanging\",mathematical:\"alphabetic\"};class zf{constructor(){this.viewPorts=[]}clear(){this.viewPorts=[]}setCurrent(e,r){this.viewPorts.push({width:e,height:r})}removeCurrent(){this.viewPorts.pop()}getCurrent(){var{viewPorts:e}=this;return e[e.length-1]}get width(){return this.getCurrent().width}get height(){return this.getCurrent().height}computeSize(e){return typeof e==\"number\"?e:e===\"x\"?this.width:e===\"y\"?this.height:Math.sqrt(Math.pow(this.width,2)+Math.pow(this.height,2))/Math.sqrt(2)}}class ee{constructor(e,r){this.x=e,this.y=r}static parse(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,[t=r,i=r]=ye(e);return new ee(t,i)}static parseScale(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,[t=r,i=t]=ye(e);return new ee(t,i)}static parsePath(e){for(var r=ye(e),t=r.length,i=[],a=0;a<t;a+=2)i.push(new ee(r[a],r[a+1]));return i}angleTo(e){return Math.atan2(e.y-this.y,e.x-this.x)}applyTransform(e){var{x:r,y:t}=this,i=r*e[0]+t*e[2]+e[4],a=r*e[1]+t*e[3]+e[5];this.x=i,this.y=a}}class Hf{constructor(e){this.screen=e,this.working=!1,this.events=[],this.eventElements=[],this.onClick=this.onClick.bind(this),this.onMouseMove=this.onMouseMove.bind(this)}isWorking(){return this.working}start(){if(!this.working){var{screen:e,onClick:r,onMouseMove:t}=this,i=e.ctx.canvas;i.onclick=r,i.onmousemove=t,this.working=!0}}stop(){if(this.working){var e=this.screen.ctx.canvas;this.working=!1,e.onclick=null,e.onmousemove=null}}hasEvents(){return this.working&&this.events.length>0}runEvents(){if(this.working){var{screen:e,events:r,eventElements:t}=this,{style:i}=e.ctx.canvas;i&&(i.cursor=\"\"),r.forEach((a,s)=>{for(var{run:o}=a,u=t[s];u;)o(u),u=u.parent}),this.events=[],this.eventElements=[]}}checkPath(e,r){if(!(!this.working||!r)){var{events:t,eventElements:i}=this;t.forEach((a,s)=>{var{x:o,y:u}=a;!i[s]&&r.isPointInPath&&r.isPointInPath(o,u)&&(i[s]=e)})}}checkBoundingBox(e,r){if(!(!this.working||!r)){var{events:t,eventElements:i}=this;t.forEach((a,s)=>{var{x:o,y:u}=a;!i[s]&&r.isPointInBox(o,u)&&(i[s]=e)})}}mapXY(e,r){for(var{window:t,ctx:i}=this.screen,a=new ee(e,r),s=i.canvas;s;)a.x-=s.offsetLeft,a.y-=s.offsetTop,s=s.offsetParent;return t.scrollX&&(a.x+=t.scrollX),t.scrollY&&(a.y+=t.scrollY),a}onClick(e){var{x:r,y:t}=this.mapXY(e.clientX,e.clientY);this.events.push({type:\"onclick\",x:r,y:t,run(i){i.onClick&&i.onClick()}})}onMouseMove(e){var{x:r,y:t}=this.mapXY(e.clientX,e.clientY);this.events.push({type:\"onmousemove\",x:r,y:t,run(i){i.onMouseMove&&i.onMouseMove()}})}}var kl=typeof window<\"u\"?window:null,jl=typeof fetch<\"u\"?fetch.bind(void 0):null;class Gr{constructor(e){var{fetch:r=jl,window:t=kl}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.ctx=e,this.FRAMERATE=30,this.MAX_VIRTUAL_PIXELS=3e4,this.CLIENT_WIDTH=800,this.CLIENT_HEIGHT=600,this.viewPort=new zf,this.mouse=new Hf(this),this.animations=[],this.waits=[],this.frameDuration=0,this.isReadyLock=!1,this.isFirstRender=!0,this.intervalId=null,this.window=t,this.fetch=r}wait(e){this.waits.push(e)}ready(){return this.readyPromise?this.readyPromise:Promise.resolve()}isReady(){if(this.isReadyLock)return!0;var e=this.waits.every(r=>r());return e&&(this.waits=[],this.resolveReady&&this.resolveReady()),this.isReadyLock=e,e}setDefaults(e){e.strokeStyle=\"rgba(0,0,0,0)\",e.lineCap=\"butt\",e.lineJoin=\"miter\",e.miterLimit=4}setViewBox(e){var{document:r,ctx:t,aspectRatio:i,width:a,desiredWidth:s,height:o,desiredHeight:u,minX:l=0,minY:h=0,refX:c,refY:v,clip:f=!1,clipX:g=0,clipY:d=0}=e,p=or(i).replace(/^defer\\s/,\"\"),[y,m]=p.split(\" \"),b=y||\"xMidYMid\",x=m||\"meet\",S=a/s,E=o/u,O=Math.min(S,E),P=Math.max(S,E),_=s,A=u;x===\"meet\"&&(_*=O,A*=O),x===\"slice\"&&(_*=P,A*=P);var q=new D(r,\"refX\",c),I=new D(r,\"refY\",v),j=q.hasValue()&&I.hasValue();if(j&&t.translate(-O*q.getPixels(\"x\"),-O*I.getPixels(\"y\")),f){var C=O*g,w=O*d;t.beginPath(),t.moveTo(C,w),t.lineTo(a,w),t.lineTo(a,o),t.lineTo(C,o),t.closePath(),t.clip()}if(!j){var U=x===\"meet\"&&O===E,L=x===\"slice\"&&P===E,V=x===\"meet\"&&O===S,M=x===\"slice\"&&P===S;b.startsWith(\"xMid\")&&(U||L)&&t.translate(a/2-_/2,0),b.endsWith(\"YMid\")&&(V||M)&&t.translate(0,o/2-A/2),b.startsWith(\"xMax\")&&(U||L)&&t.translate(a-_,0),b.endsWith(\"YMax\")&&(V||M)&&t.translate(0,o-A)}switch(!0){case b===\"none\":t.scale(S,E);break;case x===\"meet\":t.scale(O,O);break;case x===\"slice\":t.scale(P,P);break}t.translate(-l,-h)}start(e){var{enableRedraw:r=!1,ignoreMouse:t=!1,ignoreAnimation:i=!1,ignoreDimensions:a=!1,ignoreClear:s=!1,forceRedraw:o,scaleWidth:u,scaleHeight:l,offsetX:h,offsetY:c}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{FRAMERATE:v,mouse:f}=this,g=1e3/v;if(this.frameDuration=g,this.readyPromise=new Promise(b=>{this.resolveReady=b}),this.isReady()&&this.render(e,a,s,u,l,h,c),!!r){var d=Date.now(),p=d,y=0,m=()=>{d=Date.now(),y=d-p,y>=g&&(p=d-y%g,this.shouldUpdate(i,o)&&(this.render(e,a,s,u,l,h,c),f.runEvents())),this.intervalId=wa(m)};t||f.start(),this.intervalId=wa(m)}}stop(){this.intervalId&&(wa.cancel(this.intervalId),this.intervalId=null),this.mouse.stop()}shouldUpdate(e,r){if(!e){var{frameDuration:t}=this,i=this.animations.reduce((a,s)=>s.update(t)||a,!1);if(i)return!0}return!!(typeof r==\"function\"&&r()||!this.isReadyLock&&this.isReady()||this.mouse.hasEvents())}render(e,r,t,i,a,s,o){var{CLIENT_WIDTH:u,CLIENT_HEIGHT:l,viewPort:h,ctx:c,isFirstRender:v}=this,f=c.canvas;h.clear(),f.width&&f.height?h.setCurrent(f.width,f.height):h.setCurrent(u,l);var g=e.getStyle(\"width\"),d=e.getStyle(\"height\");!r&&(v||typeof i!=\"number\"&&typeof a!=\"number\")&&(g.hasValue()&&(f.width=g.getPixels(\"x\"),f.style&&(f.style.width=\"\".concat(f.width,\"px\"))),d.hasValue()&&(f.height=d.getPixels(\"y\"),f.style&&(f.style.height=\"\".concat(f.height,\"px\"))));var p=f.clientWidth||f.width,y=f.clientHeight||f.height;if(r&&g.hasValue()&&d.hasValue()&&(p=g.getPixels(\"x\"),y=d.getPixels(\"y\")),h.setCurrent(p,y),typeof s==\"number\"&&e.getAttribute(\"x\",!0).setValue(s),typeof o==\"number\"&&e.getAttribute(\"y\",!0).setValue(o),typeof i==\"number\"||typeof a==\"number\"){var m=ye(e.getAttribute(\"viewBox\").getString()),b=0,x=0;if(typeof i==\"number\"){var S=e.getStyle(\"width\");S.hasValue()?b=S.getPixels(\"x\")/i:isNaN(m[2])||(b=m[2]/i)}if(typeof a==\"number\"){var E=e.getStyle(\"height\");E.hasValue()?x=E.getPixels(\"y\")/a:isNaN(m[3])||(x=m[3]/a)}b||(b=x),x||(x=b),e.getAttribute(\"width\",!0).setValue(i),e.getAttribute(\"height\",!0).setValue(a);var O=e.getStyle(\"transform\",!0,!0);O.setValue(\"\".concat(O.getString(),\" scale(\").concat(1/b,\", \").concat(1/x,\")\"))}t||c.clearRect(0,0,p,y),e.render(c),v&&(this.isFirstRender=!1)}}Gr.defaultWindow=kl;Gr.defaultFetch=jl;var{defaultFetch:Wf}=Gr,Yf=typeof DOMParser<\"u\"?DOMParser:null;class qa{constructor(){var{fetch:e=Wf,DOMParser:r=Yf}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.fetch=e,this.DOMParser=r}parse(e){var r=this;return Be(function*(){return e.startsWith(\"<\")?r.parseFromString(e):r.load(e)})()}parseFromString(e){var r=new this.DOMParser;try{return this.checkDocument(r.parseFromString(e,\"image/svg+xml\"))}catch{return this.checkDocument(r.parseFromString(e,\"text/xml\"))}}checkDocument(e){var r=e.getElementsByTagName(\"parsererror\")[0];if(r)throw new Error(r.textContent);return e}load(e){var r=this;return Be(function*(){var t=yield r.fetch(e),i=yield t.text();return r.parseFromString(i)})()}}class Xf{constructor(e,r){this.type=\"translate\",this.point=null,this.point=ee.parse(r)}apply(e){var{x:r,y:t}=this.point;e.translate(r||0,t||0)}unapply(e){var{x:r,y:t}=this.point;e.translate(-1*r||0,-1*t||0)}applyToPoint(e){var{x:r,y:t}=this.point;e.applyTransform([1,0,0,1,r||0,t||0])}}class Kf{constructor(e,r,t){this.type=\"rotate\",this.angle=null,this.originX=null,this.originY=null,this.cx=0,this.cy=0;var i=ye(r);this.angle=new D(e,\"angle\",i[0]),this.originX=t[0],this.originY=t[1],this.cx=i[1]||0,this.cy=i[2]||0}apply(e){var{cx:r,cy:t,originX:i,originY:a,angle:s}=this,o=r+i.getPixels(\"x\"),u=t+a.getPixels(\"y\");e.translate(o,u),e.rotate(s.getRadians()),e.translate(-o,-u)}unapply(e){var{cx:r,cy:t,originX:i,originY:a,angle:s}=this,o=r+i.getPixels(\"x\"),u=t+a.getPixels(\"y\");e.translate(o,u),e.rotate(-1*s.getRadians()),e.translate(-o,-u)}applyToPoint(e){var{cx:r,cy:t,angle:i}=this,a=i.getRadians();e.applyTransform([1,0,0,1,r||0,t||0]),e.applyTransform([Math.cos(a),Math.sin(a),-Math.sin(a),Math.cos(a),0,0]),e.applyTransform([1,0,0,1,-r||0,-t||0])}}class Qf{constructor(e,r,t){this.type=\"scale\",this.scale=null,this.originX=null,this.originY=null;var i=ee.parseScale(r);(i.x===0||i.y===0)&&(i.x=ar,i.y=ar),this.scale=i,this.originX=t[0],this.originY=t[1]}apply(e){var{scale:{x:r,y:t},originX:i,originY:a}=this,s=i.getPixels(\"x\"),o=a.getPixels(\"y\");e.translate(s,o),e.scale(r,t||r),e.translate(-s,-o)}unapply(e){var{scale:{x:r,y:t},originX:i,originY:a}=this,s=i.getPixels(\"x\"),o=a.getPixels(\"y\");e.translate(s,o),e.scale(1/r,1/t||r),e.translate(-s,-o)}applyToPoint(e){var{x:r,y:t}=this.scale;e.applyTransform([r||0,0,0,t||0,0,0])}}class Bl{constructor(e,r,t){this.type=\"matrix\",this.matrix=[],this.originX=null,this.originY=null,this.matrix=ye(r),this.originX=t[0],this.originY=t[1]}apply(e){var{originX:r,originY:t,matrix:i}=this,a=r.getPixels(\"x\"),s=t.getPixels(\"y\");e.translate(a,s),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),e.translate(-a,-s)}unapply(e){var{originX:r,originY:t,matrix:i}=this,a=i[0],s=i[2],o=i[4],u=i[1],l=i[3],h=i[5],c=0,v=0,f=1,g=1/(a*(l*f-h*v)-s*(u*f-h*c)+o*(u*v-l*c)),d=r.getPixels(\"x\"),p=t.getPixels(\"y\");e.translate(d,p),e.transform(g*(l*f-h*v),g*(h*c-u*f),g*(o*v-s*f),g*(a*f-o*c),g*(s*h-o*l),g*(o*u-a*h)),e.translate(-d,-p)}applyToPoint(e){e.applyTransform(this.matrix)}}class Fl extends Bl{constructor(e,r,t){super(e,r,t),this.type=\"skew\",this.angle=null,this.angle=new D(e,\"angle\",r)}}class Zf extends Fl{constructor(e,r,t){super(e,r,t),this.type=\"skewX\",this.matrix=[1,0,Math.tan(this.angle.getRadians()),1,0,0]}}class Jf extends Fl{constructor(e,r,t){super(e,r,t),this.type=\"skewY\",this.matrix=[1,Math.tan(this.angle.getRadians()),0,1,0,0]}}function ec(n){return or(n).trim().replace(/\\)([a-zA-Z])/g,\") $1\").replace(/\\)(\\s?,\\s?)/g,\") \").split(/\\s(?=[a-z])/)}function rc(n){var[e,r]=n.split(\"(\");return[e.trim(),r.trim().replace(\")\",\"\")]}class Je{constructor(e,r,t){this.document=e,this.transforms=[];var i=ec(r);i.forEach(a=>{if(a!==\"none\"){var[s,o]=rc(a),u=Je.transformTypes[s];typeof u<\"u\"&&this.transforms.push(new u(this.document,o,t))}})}static fromElement(e,r){var t=r.getStyle(\"transform\",!1,!0),[i,a=i]=r.getStyle(\"transform-origin\",!1,!0).split(),s=[i,a];return t.hasValue()?new Je(e,t.getString(),s):null}apply(e){for(var{transforms:r}=this,t=r.length,i=0;i<t;i++)r[i].apply(e)}unapply(e){for(var{transforms:r}=this,t=r.length,i=t-1;i>=0;i--)r[i].unapply(e)}applyToPoint(e){for(var{transforms:r}=this,t=r.length,i=0;i<t;i++)r[i].applyToPoint(e)}}Je.transformTypes={translate:Xf,rotate:Kf,scale:Qf,matrix:Bl,skewX:Zf,skewY:Jf};class K{constructor(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(this.document=e,this.node=r,this.captureTextNodes=t,this.attributes=Object.create(null),this.styles=Object.create(null),this.stylesSpecificity=Object.create(null),this.animationFrozen=!1,this.animationFrozenValue=\"\",this.parent=null,this.children=[],!(!r||r.nodeType!==1)){if(Array.from(r.attributes).forEach(o=>{var u=Df(o.nodeName);this.attributes[u]=new D(e,u,o.value)}),this.addStylesFromStyleDefinition(),this.getAttribute(\"style\").hasValue()){var i=this.getAttribute(\"style\").getString().split(\";\").map(o=>o.trim());i.forEach(o=>{if(o){var[u,l]=o.split(\":\").map(h=>h.trim());this.styles[u]=new D(e,u,l)}})}var{definitions:a}=e,s=this.getAttribute(\"id\");s.hasValue()&&(a[s.getString()]||(a[s.getString()]=this)),Array.from(r.childNodes).forEach(o=>{if(o.nodeType===1)this.addChild(o);else if(t&&(o.nodeType===3||o.nodeType===4)){var u=e.createTextNode(o);u.getText().length>0&&this.addChild(u)}})}}getAttribute(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,t=this.attributes[e];if(!t&&r){var i=new D(this.document,e,\"\");return this.attributes[e]=i,i}return t||D.empty(this.document)}getHrefAttribute(){for(var e in this.attributes)if(e===\"href\"||e.endsWith(\":href\"))return this.attributes[e];return D.empty(this.document)}getStyle(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=this.styles[e];if(i)return i;var a=this.getAttribute(e);if(a!=null&&a.hasValue())return this.styles[e]=a,a;if(!t){var{parent:s}=this;if(s){var o=s.getStyle(e);if(o!=null&&o.hasValue())return o}}if(r){var u=new D(this.document,e,\"\");return this.styles[e]=u,u}return i||D.empty(this.document)}render(e){if(!(this.getStyle(\"display\").getString()===\"none\"||this.getStyle(\"visibility\").getString()===\"hidden\")){if(e.save(),this.getStyle(\"mask\").hasValue()){var r=this.getStyle(\"mask\").getDefinition();r&&(this.applyEffects(e),r.apply(e,this))}else if(this.getStyle(\"filter\").getValue(\"none\")!==\"none\"){var t=this.getStyle(\"filter\").getDefinition();t&&(this.applyEffects(e),t.apply(e,this))}else this.setContext(e),this.renderChildren(e),this.clearContext(e);e.restore()}}setContext(e){}applyEffects(e){var r=Je.fromElement(this.document,this);r&&r.apply(e);var t=this.getStyle(\"clip-path\",!1,!0);if(t.hasValue()){var i=t.getDefinition();i&&i.apply(e)}}clearContext(e){}renderChildren(e){this.children.forEach(r=>{r.render(e)})}addChild(e){var r=e instanceof K?e:this.document.createElement(e);r.parent=this,K.ignoreChildTypes.includes(r.type)||this.children.push(r)}matchesSelector(e){var r,{node:t}=this;if(typeof t.matches==\"function\")return t.matches(e);var i=(r=t.getAttribute)===null||r===void 0?void 0:r.call(t,\"class\");return!i||i===\"\"?!1:i.split(\" \").some(a=>\".\".concat(a)===e)}addStylesFromStyleDefinition(){var{styles:e,stylesSpecificity:r}=this.document;for(var t in e)if(!t.startsWith(\"@\")&&this.matchesSelector(t)){var i=e[t],a=r[t];if(i)for(var s in i){var o=this.stylesSpecificity[s];typeof o>\"u\"&&(o=\"000\"),a>=o&&(this.styles[s]=i[s],this.stylesSpecificity[s]=a)}}}removeStyles(e,r){var t=r.reduce((i,a)=>{var s=e.getStyle(a);if(!s.hasValue())return i;var o=s.getString();return s.setValue(\"\"),[...i,[a,o]]},[]);return t}restoreStyles(e,r){r.forEach(t=>{var[i,a]=t;e.getStyle(i,!0).setValue(a)})}isFirstChild(){var e;return((e=this.parent)===null||e===void 0?void 0:e.children.indexOf(this))===0}}K.ignoreChildTypes=[\"title\"];class tc extends K{constructor(e,r,t){super(e,r,t)}}function ic(n){var e=n.trim();return/^('|\")/.test(e)?e:'\"'.concat(e,'\"')}function ac(n){return typeof process>\"u\"?n:n.trim().split(\",\").map(ic).join(\",\")}function nc(n){if(!n)return\"\";var e=n.trim().toLowerCase();switch(e){case\"normal\":case\"italic\":case\"oblique\":case\"inherit\":case\"initial\":case\"unset\":return e;default:return/^oblique\\s+(-|)\\d+deg$/.test(e)?e:\"\"}}function sc(n){if(!n)return\"\";var e=n.trim().toLowerCase();switch(e){case\"normal\":case\"bold\":case\"lighter\":case\"bolder\":case\"inherit\":case\"initial\":case\"unset\":return e;default:return/^[\\d.]+$/.test(e)?e:\"\"}}class ue{constructor(e,r,t,i,a,s){var o=s?typeof s==\"string\"?ue.parse(s):s:{};this.fontFamily=a||o.fontFamily,this.fontSize=i||o.fontSize,this.fontStyle=e||o.fontStyle,this.fontWeight=t||o.fontWeight,this.fontVariant=r||o.fontVariant}static parse(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:\"\",r=arguments.length>1?arguments[1]:void 0,t=\"\",i=\"\",a=\"\",s=\"\",o=\"\",u=or(e).trim().split(\" \"),l={fontSize:!1,fontStyle:!1,fontWeight:!1,fontVariant:!1};return u.forEach(h=>{switch(!0){case(!l.fontStyle&&ue.styles.includes(h)):h!==\"inherit\"&&(t=h),l.fontStyle=!0;break;case(!l.fontVariant&&ue.variants.includes(h)):h!==\"inherit\"&&(i=h),l.fontStyle=!0,l.fontVariant=!0;break;case(!l.fontWeight&&ue.weights.includes(h)):h!==\"inherit\"&&(a=h),l.fontStyle=!0,l.fontVariant=!0,l.fontWeight=!0;break;case!l.fontSize:h!==\"inherit\"&&([s]=h.split(\"/\")),l.fontStyle=!0,l.fontVariant=!0,l.fontWeight=!0,l.fontSize=!0;break;default:h!==\"inherit\"&&(o+=h)}}),new ue(t,i,a,s,o,r)}toString(){return[nc(this.fontStyle),this.fontVariant,sc(this.fontWeight),this.fontSize,ac(this.fontFamily)].join(\" \").trim()}}ue.styles=\"normal|italic|oblique|inherit\";ue.variants=\"normal|small-caps|inherit\";ue.weights=\"normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit\";class Ie{constructor(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Number.NaN,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Number.NaN,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Number.NaN,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.NaN;this.x1=e,this.y1=r,this.x2=t,this.y2=i,this.addPoint(e,r),this.addPoint(t,i)}get x(){return this.x1}get y(){return this.y1}get width(){return this.x2-this.x1}get height(){return this.y2-this.y1}addPoint(e,r){typeof e<\"u\"&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),e<this.x1&&(this.x1=e),e>this.x2&&(this.x2=e)),typeof r<\"u\"&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=r,this.y2=r),r<this.y1&&(this.y1=r),r>this.y2&&(this.y2=r))}addX(e){this.addPoint(e,null)}addY(e){this.addPoint(null,e)}addBoundingBox(e){if(e){var{x1:r,y1:t,x2:i,y2:a}=e;this.addPoint(r,t),this.addPoint(i,a)}}sumCubic(e,r,t,i,a){return Math.pow(1-e,3)*r+3*Math.pow(1-e,2)*e*t+3*(1-e)*Math.pow(e,2)*i+Math.pow(e,3)*a}bezierCurveAdd(e,r,t,i,a){var s=6*r-12*t+6*i,o=-3*r+9*t-9*i+3*a,u=3*t-3*r;if(o===0){if(s===0)return;var l=-u/s;0<l&&l<1&&(e?this.addX(this.sumCubic(l,r,t,i,a)):this.addY(this.sumCubic(l,r,t,i,a)));return}var h=Math.pow(s,2)-4*u*o;if(!(h<0)){var c=(-s+Math.sqrt(h))/(2*o);0<c&&c<1&&(e?this.addX(this.sumCubic(c,r,t,i,a)):this.addY(this.sumCubic(c,r,t,i,a)));var v=(-s-Math.sqrt(h))/(2*o);0<v&&v<1&&(e?this.addX(this.sumCubic(v,r,t,i,a)):this.addY(this.sumCubic(v,r,t,i,a)))}}addBezierCurve(e,r,t,i,a,s,o,u){this.addPoint(e,r),this.addPoint(o,u),this.bezierCurveAdd(!0,e,t,a,o),this.bezierCurveAdd(!1,r,i,s,u)}addQuadraticCurve(e,r,t,i,a,s){var o=e+.6666666666666666*(t-e),u=r+2/3*(i-r),l=o+1/3*(a-e),h=u+1/3*(s-r);this.addBezierCurve(e,r,o,l,u,h,a,s)}isPointInBox(e,r){var{x1:t,y1:i,x2:a,y2:s}=this;return t<=e&&e<=a&&i<=r&&r<=s}}class F extends T{constructor(e){super(e.replace(/([+\\-.])\\s+/gm,\"$1\").replace(/[^MmZzLlHhVvCcSsQqTtAae\\d\\s.,+-].*/g,\"\")),this.control=null,this.start=null,this.current=null,this.command=null,this.commands=this.commands,this.i=-1,this.previousCommand=null,this.points=[],this.angles=[]}reset(){this.i=-1,this.command=null,this.previousCommand=null,this.start=new ee(0,0),this.control=new ee(0,0),this.current=new ee(0,0),this.points=[],this.angles=[]}isEnd(){var{i:e,commands:r}=this;return e>=r.length-1}next(){var e=this.commands[++this.i];return this.previousCommand=this.command,this.command=e,e}getPoint(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:\"x\",r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:\"y\",t=new ee(this.command[e],this.command[r]);return this.makeAbsolute(t)}getAsControlPoint(e,r){var t=this.getPoint(e,r);return this.control=t,t}getAsCurrentPoint(e,r){var t=this.getPoint(e,r);return this.current=t,t}getReflectedControlPoint(){var e=this.previousCommand.type;if(e!==T.CURVE_TO&&e!==T.SMOOTH_CURVE_TO&&e!==T.QUAD_TO&&e!==T.SMOOTH_QUAD_TO)return this.current;var{current:{x:r,y:t},control:{x:i,y:a}}=this,s=new ee(2*r-i,2*t-a);return s}makeAbsolute(e){if(this.command.relative){var{x:r,y:t}=this.current;e.x+=r,e.y+=t}return e}addMarker(e,r,t){var{points:i,angles:a}=this;t&&a.length>0&&!a[a.length-1]&&(a[a.length-1]=i[i.length-1].angleTo(t)),this.addMarkerAngle(e,r?r.angleTo(e):null)}addMarkerAngle(e,r){this.points.push(e),this.angles.push(r)}getMarkerPoints(){return this.points}getMarkerAngles(){for(var{angles:e}=this,r=e.length,t=0;t<r;t++)if(!e[t]){for(var i=t+1;i<r;i++)if(e[i]){e[t]=e[i];break}}return e}}class ir extends K{constructor(){super(...arguments),this.modifiedEmSizeStack=!1}calculateOpacity(){for(var e=1,r=this;r;){var t=r.getStyle(\"opacity\",!1,!0);t.hasValue(!0)&&(e*=t.getNumber()),r=r.parent}return e}setContext(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(!r){var t=this.getStyle(\"fill\"),i=this.getStyle(\"fill-opacity\"),a=this.getStyle(\"stroke\"),s=this.getStyle(\"stroke-opacity\");if(t.isUrlDefinition()){var o=t.getFillStyleDefinition(this,i);o&&(e.fillStyle=o)}else if(t.hasValue()){t.getString()===\"currentColor\"&&t.setValue(this.getStyle(\"color\").getColor());var u=t.getColor();u!==\"inherit\"&&(e.fillStyle=u===\"none\"?\"rgba(0,0,0,0)\":u)}if(i.hasValue()){var l=new D(this.document,\"fill\",e.fillStyle).addOpacity(i).getColor();e.fillStyle=l}if(a.isUrlDefinition()){var h=a.getFillStyleDefinition(this,s);h&&(e.strokeStyle=h)}else if(a.hasValue()){a.getString()===\"currentColor\"&&a.setValue(this.getStyle(\"color\").getColor());var c=a.getString();c!==\"inherit\"&&(e.strokeStyle=c===\"none\"?\"rgba(0,0,0,0)\":c)}if(s.hasValue()){var v=new D(this.document,\"stroke\",e.strokeStyle).addOpacity(s).getString();e.strokeStyle=v}var f=this.getStyle(\"stroke-width\");if(f.hasValue()){var g=f.getPixels();e.lineWidth=g||ar}var d=this.getStyle(\"stroke-linecap\"),p=this.getStyle(\"stroke-linejoin\"),y=this.getStyle(\"stroke-miterlimit\"),m=this.getStyle(\"stroke-dasharray\"),b=this.getStyle(\"stroke-dashoffset\");if(d.hasValue()&&(e.lineCap=d.getString()),p.hasValue()&&(e.lineJoin=p.getString()),y.hasValue()&&(e.miterLimit=y.getNumber()),m.hasValue()&&m.getString()!==\"none\"){var x=ye(m.getString());typeof e.setLineDash<\"u\"?e.setLineDash(x):typeof e.webkitLineDash<\"u\"?e.webkitLineDash=x:typeof e.mozDash<\"u\"&&!(x.length===1&&x[0]===0)&&(e.mozDash=x);var S=b.getPixels();typeof e.lineDashOffset<\"u\"?e.lineDashOffset=S:typeof e.webkitLineDashOffset<\"u\"?e.webkitLineDashOffset=S:typeof e.mozDashOffset<\"u\"&&(e.mozDashOffset=S)}}if(this.modifiedEmSizeStack=!1,typeof e.font<\"u\"){var E=this.getStyle(\"font\"),O=this.getStyle(\"font-style\"),P=this.getStyle(\"font-variant\"),_=this.getStyle(\"font-weight\"),A=this.getStyle(\"font-size\"),q=this.getStyle(\"font-family\"),I=new ue(O.getString(),P.getString(),_.getString(),A.hasValue()?\"\".concat(A.getPixels(!0),\"px\"):\"\",q.getString(),ue.parse(E.getString(),e.font));O.setValue(I.fontStyle),P.setValue(I.fontVariant),_.setValue(I.fontWeight),A.setValue(I.fontSize),q.setValue(I.fontFamily),e.font=I.toString(),A.isPixels()&&(this.document.emSize=A.getPixels(),this.modifiedEmSizeStack=!0)}r||(this.applyEffects(e),e.globalAlpha=this.calculateOpacity())}clearContext(e){super.clearContext(e),this.modifiedEmSizeStack&&this.document.popEmSize()}}class Y extends ir{constructor(e,r,t){super(e,r,t),this.type=\"path\",this.pathParser=null,this.pathParser=new F(this.getAttribute(\"d\").getString())}path(e){var{pathParser:r}=this,t=new Ie;for(r.reset(),e&&e.beginPath();!r.isEnd();)switch(r.next().type){case F.MOVE_TO:this.pathM(e,t);break;case F.LINE_TO:this.pathL(e,t);break;case F.HORIZ_LINE_TO:this.pathH(e,t);break;case F.VERT_LINE_TO:this.pathV(e,t);break;case F.CURVE_TO:this.pathC(e,t);break;case F.SMOOTH_CURVE_TO:this.pathS(e,t);break;case F.QUAD_TO:this.pathQ(e,t);break;case F.SMOOTH_QUAD_TO:this.pathT(e,t);break;case F.ARC:this.pathA(e,t);break;case F.CLOSE_PATH:this.pathZ(e,t);break}return t}getBoundingBox(e){return this.path()}getMarkers(){var{pathParser:e}=this,r=e.getMarkerPoints(),t=e.getMarkerAngles(),i=r.map((a,s)=>[a,t[s]]);return i}renderChildren(e){this.path(e),this.document.screen.mouse.checkPath(this,e);var r=this.getStyle(\"fill-rule\");e.fillStyle!==\"\"&&(r.getString(\"inherit\")!==\"inherit\"?e.fill(r.getString()):e.fill()),e.strokeStyle!==\"\"&&(this.getAttribute(\"vector-effect\").getString()===\"non-scaling-stroke\"?(e.save(),e.setTransform(1,0,0,1,0,0),e.stroke(),e.restore()):e.stroke());var t=this.getMarkers();if(t){var i=t.length-1,a=this.getStyle(\"marker-start\"),s=this.getStyle(\"marker-mid\"),o=this.getStyle(\"marker-end\");if(a.isUrlDefinition()){var u=a.getDefinition(),[l,h]=t[0];u.render(e,l,h)}if(s.isUrlDefinition())for(var c=s.getDefinition(),v=1;v<i;v++){var[f,g]=t[v];c.render(e,f,g)}if(o.isUrlDefinition()){var d=o.getDefinition(),[p,y]=t[i];d.render(e,p,y)}}}static pathM(e){var r=e.getAsCurrentPoint();return e.start=e.current,{point:r}}pathM(e,r){var{pathParser:t}=this,{point:i}=Y.pathM(t),{x:a,y:s}=i;t.addMarker(i),r.addPoint(a,s),e&&e.moveTo(a,s)}static pathL(e){var{current:r}=e,t=e.getAsCurrentPoint();return{current:r,point:t}}pathL(e,r){var{pathParser:t}=this,{current:i,point:a}=Y.pathL(t),{x:s,y:o}=a;t.addMarker(a,i),r.addPoint(s,o),e&&e.lineTo(s,o)}static pathH(e){var{current:r,command:t}=e,i=new ee((t.relative?r.x:0)+t.x,r.y);return e.current=i,{current:r,point:i}}pathH(e,r){var{pathParser:t}=this,{current:i,point:a}=Y.pathH(t),{x:s,y:o}=a;t.addMarker(a,i),r.addPoint(s,o),e&&e.lineTo(s,o)}static pathV(e){var{current:r,command:t}=e,i=new ee(r.x,(t.relative?r.y:0)+t.y);return e.current=i,{current:r,point:i}}pathV(e,r){var{pathParser:t}=this,{current:i,point:a}=Y.pathV(t),{x:s,y:o}=a;t.addMarker(a,i),r.addPoint(s,o),e&&e.lineTo(s,o)}static pathC(e){var{current:r}=e,t=e.getPoint(\"x1\",\"y1\"),i=e.getAsControlPoint(\"x2\",\"y2\"),a=e.getAsCurrentPoint();return{current:r,point:t,controlPoint:i,currentPoint:a}}pathC(e,r){var{pathParser:t}=this,{current:i,point:a,controlPoint:s,currentPoint:o}=Y.pathC(t);t.addMarker(o,s,a),r.addBezierCurve(i.x,i.y,a.x,a.y,s.x,s.y,o.x,o.y),e&&e.bezierCurveTo(a.x,a.y,s.x,s.y,o.x,o.y)}static pathS(e){var{current:r}=e,t=e.getReflectedControlPoint(),i=e.getAsControlPoint(\"x2\",\"y2\"),a=e.getAsCurrentPoint();return{current:r,point:t,controlPoint:i,currentPoint:a}}pathS(e,r){var{pathParser:t}=this,{current:i,point:a,controlPoint:s,currentPoint:o}=Y.pathS(t);t.addMarker(o,s,a),r.addBezierCurve(i.x,i.y,a.x,a.y,s.x,s.y,o.x,o.y),e&&e.bezierCurveTo(a.x,a.y,s.x,s.y,o.x,o.y)}static pathQ(e){var{current:r}=e,t=e.getAsControlPoint(\"x1\",\"y1\"),i=e.getAsCurrentPoint();return{current:r,controlPoint:t,currentPoint:i}}pathQ(e,r){var{pathParser:t}=this,{current:i,controlPoint:a,currentPoint:s}=Y.pathQ(t);t.addMarker(s,a,a),r.addQuadraticCurve(i.x,i.y,a.x,a.y,s.x,s.y),e&&e.quadraticCurveTo(a.x,a.y,s.x,s.y)}static pathT(e){var{current:r}=e,t=e.getReflectedControlPoint();e.control=t;var i=e.getAsCurrentPoint();return{current:r,controlPoint:t,currentPoint:i}}pathT(e,r){var{pathParser:t}=this,{current:i,controlPoint:a,currentPoint:s}=Y.pathT(t);t.addMarker(s,a,a),r.addQuadraticCurve(i.x,i.y,a.x,a.y,s.x,s.y),e&&e.quadraticCurveTo(a.x,a.y,s.x,s.y)}static pathA(e){var{current:r,command:t}=e,{rX:i,rY:a,xRot:s,lArcFlag:o,sweepFlag:u}=t,l=s*(Math.PI/180),h=e.getAsCurrentPoint(),c=new ee(Math.cos(l)*(r.x-h.x)/2+Math.sin(l)*(r.y-h.y)/2,-Math.sin(l)*(r.x-h.x)/2+Math.cos(l)*(r.y-h.y)/2),v=Math.pow(c.x,2)/Math.pow(i,2)+Math.pow(c.y,2)/Math.pow(a,2);v>1&&(i*=Math.sqrt(v),a*=Math.sqrt(v));var f=(o===u?-1:1)*Math.sqrt((Math.pow(i,2)*Math.pow(a,2)-Math.pow(i,2)*Math.pow(c.y,2)-Math.pow(a,2)*Math.pow(c.x,2))/(Math.pow(i,2)*Math.pow(c.y,2)+Math.pow(a,2)*Math.pow(c.x,2)));isNaN(f)&&(f=0);var g=new ee(f*i*c.y/a,f*-a*c.x/i),d=new ee((r.x+h.x)/2+Math.cos(l)*g.x-Math.sin(l)*g.y,(r.y+h.y)/2+Math.sin(l)*g.x+Math.cos(l)*g.y),p=zu([1,0],[(c.x-g.x)/i,(c.y-g.y)/a]),y=[(c.x-g.x)/i,(c.y-g.y)/a],m=[(-c.x-g.x)/i,(-c.y-g.y)/a],b=zu(y,m);return ja(y,m)<=-1&&(b=Math.PI),ja(y,m)>=1&&(b=0),{currentPoint:h,rX:i,rY:a,sweepFlag:u,xAxisRotation:l,centp:d,a1:p,ad:b}}pathA(e,r){var{pathParser:t}=this,{currentPoint:i,rX:a,rY:s,sweepFlag:o,xAxisRotation:u,centp:l,a1:h,ad:c}=Y.pathA(t),v=1-o?1:-1,f=h+v*(c/2),g=new ee(l.x+a*Math.cos(f),l.y+s*Math.sin(f));if(t.addMarkerAngle(g,f-v*Math.PI/2),t.addMarkerAngle(i,f-v*Math.PI),r.addPoint(i.x,i.y),e&&!isNaN(h)&&!isNaN(c)){var d=a>s?a:s,p=a>s?1:a/s,y=a>s?s/a:1;e.translate(l.x,l.y),e.rotate(u),e.scale(p,y),e.arc(0,0,d,h,h+c,!!(1-o)),e.scale(1/p,1/y),e.rotate(-u),e.translate(-l.x,-l.y)}}static pathZ(e){e.current=e.start}pathZ(e,r){Y.pathZ(this.pathParser),e&&r.x1!==r.x2&&r.y1!==r.y2&&e.closePath()}}class Ul extends Y{constructor(e,r,t){super(e,r,t),this.type=\"glyph\",this.horizAdvX=this.getAttribute(\"horiz-adv-x\").getNumber(),this.unicode=this.getAttribute(\"unicode\").getString(),this.arabicForm=this.getAttribute(\"arabic-form\").getString()}}class We extends ir{constructor(e,r,t){super(e,r,new.target===We?!0:t),this.type=\"text\",this.x=0,this.y=0,this.measureCache=-1}setContext(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;super.setContext(e,r);var t=this.getStyle(\"dominant-baseline\").getTextBaseline()||this.getStyle(\"alignment-baseline\").getTextBaseline();t&&(e.textBaseline=t)}initializeCoordinates(){this.x=0,this.y=0,this.leafTexts=[],this.textChunkStart=0,this.minX=Number.POSITIVE_INFINITY,this.maxX=Number.NEGATIVE_INFINITY}getBoundingBox(e){if(this.type!==\"text\")return this.getTElementBoundingBox(e);this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(e);var r=null;return this.children.forEach((t,i)=>{var a=this.getChildBoundingBox(e,this,this,i);r?r.addBoundingBox(a):r=a}),r}getFontSize(){var{document:e,parent:r}=this,t=ue.parse(e.ctx.font).fontSize,i=r.getStyle(\"font-size\").getNumber(t);return i}getTElementBoundingBox(e){var r=this.getFontSize();return new Ie(this.x,this.y-r,this.x+this.measureText(e),this.y)}getGlyph(e,r,t){var i=r[t],a=null;if(e.isArabic){var s=r.length,o=r[t-1],u=r[t+1],l=\"isolated\";if((t===0||o===\" \")&&t<s-1&&u!==\" \"&&(l=\"terminal\"),t>0&&o!==\" \"&&t<s-1&&u!==\" \"&&(l=\"medial\"),t>0&&o!==\" \"&&(t===s-1||u===\" \")&&(l=\"initial\"),typeof e.glyphs[i]<\"u\"){var h=e.glyphs[i];a=h instanceof Ul?h:h[l]}}else a=e.glyphs[i];return a||(a=e.missingGlyph),a}getText(){return\"\"}getTextFromNode(e){var r=e||this.node,t=Array.from(r.parentNode.childNodes),i=t.indexOf(r),a=t.length-1,s=or(r.textContent||\"\");return i===0&&(s=_f(s)),i===a&&(s=Mf(s)),s}renderChildren(e){if(this.type!==\"text\"){this.renderTElementChildren(e);return}this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(e),this.children.forEach((t,i)=>{this.renderChild(e,this,this,i)});var{mouse:r}=this.document.screen;r.isWorking()&&r.checkBoundingBox(this,this.getBoundingBox(e))}renderTElementChildren(e){var{document:r,parent:t}=this,i=this.getText(),a=t.getStyle(\"font-family\").getDefinition();if(a){for(var{unitsPerEm:s}=a.fontFace,o=ue.parse(r.ctx.font),u=t.getStyle(\"font-size\").getNumber(o.fontSize),l=t.getStyle(\"font-style\").getString(o.fontStyle),h=u/s,c=a.isRTL?i.split(\"\").reverse().join(\"\"):i,v=ye(t.getAttribute(\"dx\").getString()),f=c.length,g=0;g<f;g++){var d=this.getGlyph(a,c,g);e.translate(this.x,this.y),e.scale(h,-h);var p=e.lineWidth;e.lineWidth=e.lineWidth*s/u,l===\"italic\"&&e.transform(1,0,.4,1,0,0),d.render(e),l===\"italic\"&&e.transform(1,0,-.4,1,0,0),e.lineWidth=p,e.scale(1/h,-1/h),e.translate(-this.x,-this.y),this.x+=u*(d.horizAdvX||a.horizAdvX)/s,typeof v[g]<\"u\"&&!isNaN(v[g])&&(this.x+=v[g])}return}var{x:y,y:m}=this;e.fillStyle&&e.fillText(i,y,m),e.strokeStyle&&e.strokeText(i,y,m)}applyAnchoring(){if(!(this.textChunkStart>=this.leafTexts.length)){var e=this.leafTexts[this.textChunkStart],r=e.getStyle(\"text-anchor\").getString(\"start\"),t=!1,i=0;r===\"start\"&&!t||r===\"end\"&&t?i=e.x-this.minX:r===\"end\"&&!t||r===\"start\"&&t?i=e.x-this.maxX:i=e.x-(this.minX+this.maxX)/2;for(var a=this.textChunkStart;a<this.leafTexts.length;a++)this.leafTexts[a].x+=i;this.minX=Number.POSITIVE_INFINITY,this.maxX=Number.NEGATIVE_INFINITY,this.textChunkStart=this.leafTexts.length}}adjustChildCoordinatesRecursive(e){this.children.forEach((r,t)=>{this.adjustChildCoordinatesRecursiveCore(e,this,this,t)}),this.applyAnchoring()}adjustChildCoordinatesRecursiveCore(e,r,t,i){var a=t.children[i];a.children.length>0?a.children.forEach((s,o)=>{r.adjustChildCoordinatesRecursiveCore(e,r,a,o)}):this.adjustChildCoordinates(e,r,t,i)}adjustChildCoordinates(e,r,t,i){var a=t.children[i];if(typeof a.measureText!=\"function\")return a;e.save(),a.setContext(e,!0);var s=a.getAttribute(\"x\"),o=a.getAttribute(\"y\"),u=a.getAttribute(\"dx\"),l=a.getAttribute(\"dy\"),h=a.getStyle(\"font-family\").getDefinition(),c=!!h&&h.isRTL;i===0&&(s.hasValue()||s.setValue(a.getInheritedAttribute(\"x\")),o.hasValue()||o.setValue(a.getInheritedAttribute(\"y\")),u.hasValue()||u.setValue(a.getInheritedAttribute(\"dx\")),l.hasValue()||l.setValue(a.getInheritedAttribute(\"dy\")));var v=a.measureText(e);return c&&(r.x-=v),s.hasValue()?(r.applyAnchoring(),a.x=s.getPixels(\"x\"),u.hasValue()&&(a.x+=u.getPixels(\"x\"))):(u.hasValue()&&(r.x+=u.getPixels(\"x\")),a.x=r.x),r.x=a.x,c||(r.x+=v),o.hasValue()?(a.y=o.getPixels(\"y\"),l.hasValue()&&(a.y+=l.getPixels(\"y\"))):(l.hasValue()&&(r.y+=l.getPixels(\"y\")),a.y=r.y),r.y=a.y,r.leafTexts.push(a),r.minX=Math.min(r.minX,a.x,a.x+v),r.maxX=Math.max(r.maxX,a.x,a.x+v),a.clearContext(e),e.restore(),a}getChildBoundingBox(e,r,t,i){var a=t.children[i];if(typeof a.getBoundingBox!=\"function\")return null;var s=a.getBoundingBox(e);return s?(a.children.forEach((o,u)=>{var l=r.getChildBoundingBox(e,r,a,u);s.addBoundingBox(l)}),s):null}renderChild(e,r,t,i){var a=t.children[i];a.render(e),a.children.forEach((s,o)=>{r.renderChild(e,r,a,o)})}measureText(e){var{measureCache:r}=this;if(~r)return r;var t=this.getText(),i=this.measureTargetText(e,t);return this.measureCache=i,i}measureTargetText(e,r){if(!r.length)return 0;var{parent:t}=this,i=t.getStyle(\"font-family\").getDefinition();if(i){for(var a=this.getFontSize(),s=i.isRTL?r.split(\"\").reverse().join(\"\"):r,o=ye(t.getAttribute(\"dx\").getString()),u=s.length,l=0,h=0;h<u;h++){var c=this.getGlyph(i,s,h);l+=(c.horizAdvX||i.horizAdvX)*a/i.fontFace.unitsPerEm,typeof o[h]<\"u\"&&!isNaN(o[h])&&(l+=o[h])}return l}if(!e.measureText)return r.length*10;e.save(),this.setContext(e,!0);var{width:v}=e.measureText(r);return this.clearContext(e),e.restore(),v}getInheritedAttribute(e){for(var r=this;r instanceof We&&r.isFirstChild();){var t=r.parent.getAttribute(e);if(t.hasValue(!0))return t.getValue(\"0\");r=r.parent}return null}}class $r extends We{constructor(e,r,t){super(e,r,new.target===$r?!0:t),this.type=\"tspan\",this.text=this.children.length>0?\"\":this.getTextFromNode()}getText(){return this.text}}class oc extends $r{constructor(){super(...arguments),this.type=\"textNode\"}}class Tr extends ir{constructor(){super(...arguments),this.type=\"svg\",this.root=!1}setContext(e){var r,{document:t}=this,{screen:i,window:a}=t,s=e.canvas;if(i.setDefaults(e),s.style&&typeof e.font<\"u\"&&a&&typeof a.getComputedStyle<\"u\"){e.font=a.getComputedStyle(s).getPropertyValue(\"font\");var o=new D(t,\"fontSize\",ue.parse(e.font).fontSize);o.hasValue()&&(t.rootEmSize=o.getPixels(\"y\"),t.emSize=t.rootEmSize)}this.getAttribute(\"x\").hasValue()||this.getAttribute(\"x\",!0).setValue(0),this.getAttribute(\"y\").hasValue()||this.getAttribute(\"y\",!0).setValue(0);var{width:u,height:l}=i.viewPort;this.getStyle(\"width\").hasValue()||this.getStyle(\"width\",!0).setValue(\"100%\"),this.getStyle(\"height\").hasValue()||this.getStyle(\"height\",!0).setValue(\"100%\"),this.getStyle(\"color\").hasValue()||this.getStyle(\"color\",!0).setValue(\"black\");var h=this.getAttribute(\"refX\"),c=this.getAttribute(\"refY\"),v=this.getAttribute(\"viewBox\"),f=v.hasValue()?ye(v.getString()):null,g=!this.root&&this.getStyle(\"overflow\").getValue(\"hidden\")!==\"visible\",d=0,p=0,y=0,m=0;f&&(d=f[0],p=f[1]),this.root||(u=this.getStyle(\"width\").getPixels(\"x\"),l=this.getStyle(\"height\").getPixels(\"y\"),this.type===\"marker\"&&(y=d,m=p,d=0,p=0)),i.viewPort.setCurrent(u,l),this.node&&(!this.parent||((r=this.node.parentNode)===null||r===void 0?void 0:r.nodeName)===\"foreignObject\")&&this.getStyle(\"transform\",!1,!0).hasValue()&&!this.getStyle(\"transform-origin\",!1,!0).hasValue()&&this.getStyle(\"transform-origin\",!0,!0).setValue(\"50% 50%\"),super.setContext(e),e.translate(this.getAttribute(\"x\").getPixels(\"x\"),this.getAttribute(\"y\").getPixels(\"y\")),f&&(u=f[2],l=f[3]),t.setViewBox({ctx:e,aspectRatio:this.getAttribute(\"preserveAspectRatio\").getString(),width:i.viewPort.width,desiredWidth:u,height:i.viewPort.height,desiredHeight:l,minX:d,minY:p,refX:h.getValue(),refY:c.getValue(),clip:g,clipX:y,clipY:m}),f&&(i.viewPort.removeCurrent(),i.viewPort.setCurrent(u,l))}clearContext(e){super.clearContext(e),this.document.screen.viewPort.removeCurrent()}resize(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=this.getAttribute(\"width\",!0),a=this.getAttribute(\"height\",!0),s=this.getAttribute(\"viewBox\"),o=this.getAttribute(\"style\"),u=i.getNumber(0),l=a.getNumber(0);if(t)if(typeof t==\"string\")this.getAttribute(\"preserveAspectRatio\",!0).setValue(t);else{var h=this.getAttribute(\"preserveAspectRatio\");h.hasValue()&&h.setValue(h.getString().replace(/^\\s*(\\S.*\\S)\\s*$/,\"$1\"))}if(i.setValue(e),a.setValue(r),s.hasValue()||s.setValue(\"0 0 \".concat(u||e,\" \").concat(l||r)),o.hasValue()){var c=this.getStyle(\"width\"),v=this.getStyle(\"height\");c.hasValue()&&c.setValue(\"\".concat(e,\"px\")),v.hasValue()&&v.setValue(\"\".concat(r,\"px\"))}}}class Gl extends Y{constructor(){super(...arguments),this.type=\"rect\"}path(e){var r=this.getAttribute(\"x\").getPixels(\"x\"),t=this.getAttribute(\"y\").getPixels(\"y\"),i=this.getStyle(\"width\",!1,!0).getPixels(\"x\"),a=this.getStyle(\"height\",!1,!0).getPixels(\"y\"),s=this.getAttribute(\"rx\"),o=this.getAttribute(\"ry\"),u=s.getPixels(\"x\"),l=o.getPixels(\"y\");if(s.hasValue()&&!o.hasValue()&&(l=u),o.hasValue()&&!s.hasValue()&&(u=l),u=Math.min(u,i/2),l=Math.min(l,a/2),e){var h=4*((Math.sqrt(2)-1)/3);e.beginPath(),a>0&&i>0&&(e.moveTo(r+u,t),e.lineTo(r+i-u,t),e.bezierCurveTo(r+i-u+h*u,t,r+i,t+l-h*l,r+i,t+l),e.lineTo(r+i,t+a-l),e.bezierCurveTo(r+i,t+a-l+h*l,r+i-u+h*u,t+a,r+i-u,t+a),e.lineTo(r+u,t+a),e.bezierCurveTo(r+u-h*u,t+a,r,t+a-l+h*l,r,t+a-l),e.lineTo(r,t+l),e.bezierCurveTo(r,t+l-h*l,r+u-h*u,t,r+u,t),e.closePath())}return new Ie(r,t,r+i,t+a)}getMarkers(){return null}}class uc extends Y{constructor(){super(...arguments),this.type=\"circle\"}path(e){var r=this.getAttribute(\"cx\").getPixels(\"x\"),t=this.getAttribute(\"cy\").getPixels(\"y\"),i=this.getAttribute(\"r\").getPixels();return e&&i>0&&(e.beginPath(),e.arc(r,t,i,0,Math.PI*2,!1),e.closePath()),new Ie(r-i,t-i,r+i,t+i)}getMarkers(){return null}}class lc extends Y{constructor(){super(...arguments),this.type=\"ellipse\"}path(e){var r=4*((Math.sqrt(2)-1)/3),t=this.getAttribute(\"rx\").getPixels(\"x\"),i=this.getAttribute(\"ry\").getPixels(\"y\"),a=this.getAttribute(\"cx\").getPixels(\"x\"),s=this.getAttribute(\"cy\").getPixels(\"y\");return e&&t>0&&i>0&&(e.beginPath(),e.moveTo(a+t,s),e.bezierCurveTo(a+t,s+r*i,a+r*t,s+i,a,s+i),e.bezierCurveTo(a-r*t,s+i,a-t,s+r*i,a-t,s),e.bezierCurveTo(a-t,s-r*i,a-r*t,s-i,a,s-i),e.bezierCurveTo(a+r*t,s-i,a+t,s-r*i,a+t,s),e.closePath()),new Ie(a-t,s-i,a+t,s+i)}getMarkers(){return null}}class hc extends Y{constructor(){super(...arguments),this.type=\"line\"}getPoints(){return[new ee(this.getAttribute(\"x1\").getPixels(\"x\"),this.getAttribute(\"y1\").getPixels(\"y\")),new ee(this.getAttribute(\"x2\").getPixels(\"x\"),this.getAttribute(\"y2\").getPixels(\"y\"))]}path(e){var[{x:r,y:t},{x:i,y:a}]=this.getPoints();return e&&(e.beginPath(),e.moveTo(r,t),e.lineTo(i,a)),new Ie(r,t,i,a)}getMarkers(){var[e,r]=this.getPoints(),t=e.angleTo(r);return[[e,t],[r,t]]}}class $l extends Y{constructor(e,r,t){super(e,r,t),this.type=\"polyline\",this.points=[],this.points=ee.parsePath(this.getAttribute(\"points\").getString())}path(e){var{points:r}=this,[{x:t,y:i}]=r,a=new Ie(t,i);return e&&(e.beginPath(),e.moveTo(t,i)),r.forEach(s=>{var{x:o,y:u}=s;a.addPoint(o,u),e&&e.lineTo(o,u)}),a}getMarkers(){var{points:e}=this,r=e.length-1,t=[];return e.forEach((i,a)=>{a!==r&&t.push([i,i.angleTo(e[a+1])])}),t.length>0&&t.push([e[e.length-1],t[t.length-1][1]]),t}}class fc extends $l{constructor(){super(...arguments),this.type=\"polygon\"}path(e){var r=super.path(e),[{x:t,y:i}]=this.points;return e&&(e.lineTo(t,i),e.closePath()),r}}class cc extends K{constructor(){super(...arguments),this.type=\"pattern\"}createPattern(e,r,t){var i=this.getStyle(\"width\").getPixels(\"x\",!0),a=this.getStyle(\"height\").getPixels(\"y\",!0),s=new Tr(this.document,null);s.attributes.viewBox=new D(this.document,\"viewBox\",this.getAttribute(\"viewBox\").getValue()),s.attributes.width=new D(this.document,\"width\",\"\".concat(i,\"px\")),s.attributes.height=new D(this.document,\"height\",\"\".concat(a,\"px\")),s.attributes.transform=new D(this.document,\"transform\",this.getAttribute(\"patternTransform\").getValue()),s.children=this.children;var o=this.document.createCanvas(i,a),u=o.getContext(\"2d\"),l=this.getAttribute(\"x\"),h=this.getAttribute(\"y\");l.hasValue()&&h.hasValue()&&u.translate(l.getPixels(\"x\",!0),h.getPixels(\"y\",!0)),t.hasValue()?this.styles[\"fill-opacity\"]=t:Reflect.deleteProperty(this.styles,\"fill-opacity\");for(var c=-1;c<=1;c++)for(var v=-1;v<=1;v++)u.save(),s.attributes.x=new D(this.document,\"x\",c*o.width),s.attributes.y=new D(this.document,\"y\",v*o.height),s.render(u),u.restore();var f=e.createPattern(o,\"repeat\");return f}}class vc extends K{constructor(){super(...arguments),this.type=\"marker\"}render(e,r,t){if(r){var{x:i,y:a}=r,s=this.getAttribute(\"orient\").getString(\"auto\"),o=this.getAttribute(\"markerUnits\").getString(\"strokeWidth\");e.translate(i,a),s===\"auto\"&&e.rotate(t),o===\"strokeWidth\"&&e.scale(e.lineWidth,e.lineWidth),e.save();var u=new Tr(this.document,null);u.type=this.type,u.attributes.viewBox=new D(this.document,\"viewBox\",this.getAttribute(\"viewBox\").getValue()),u.attributes.refX=new D(this.document,\"refX\",this.getAttribute(\"refX\").getValue()),u.attributes.refY=new D(this.document,\"refY\",this.getAttribute(\"refY\").getValue()),u.attributes.width=new D(this.document,\"width\",this.getAttribute(\"markerWidth\").getValue()),u.attributes.height=new D(this.document,\"height\",this.getAttribute(\"markerHeight\").getValue()),u.attributes.overflow=new D(this.document,\"overflow\",this.getAttribute(\"overflow\").getValue()),u.attributes.fill=new D(this.document,\"fill\",this.getAttribute(\"fill\").getColor(\"black\")),u.attributes.stroke=new D(this.document,\"stroke\",this.getAttribute(\"stroke\").getValue(\"none\")),u.children=this.children,u.render(e),e.restore(),o===\"strokeWidth\"&&e.scale(1/e.lineWidth,1/e.lineWidth),s===\"auto\"&&e.rotate(-t),e.translate(-i,-a)}}}class gc extends K{constructor(){super(...arguments),this.type=\"defs\"}render(){}}class ln extends ir{constructor(){super(...arguments),this.type=\"g\"}getBoundingBox(e){var r=new Ie;return this.children.forEach(t=>{r.addBoundingBox(t.getBoundingBox(e))}),r}}class zl extends K{constructor(e,r,t){super(e,r,t),this.attributesToInherit=[\"gradientUnits\"],this.stops=[];var{stops:i,children:a}=this;a.forEach(s=>{s.type===\"stop\"&&i.push(s)})}getGradientUnits(){return this.getAttribute(\"gradientUnits\").getString(\"objectBoundingBox\")}createGradient(e,r,t){var i=this;this.getHrefAttribute().hasValue()&&(i=this.getHrefAttribute().getDefinition(),this.inheritStopContainer(i));var{stops:a}=i,s=this.getGradient(e,r);if(!s)return this.addParentOpacity(t,a[a.length-1].color);if(a.forEach(p=>{s.addColorStop(p.offset,this.addParentOpacity(t,p.color))}),this.getAttribute(\"gradientTransform\").hasValue()){var{document:o}=this,{MAX_VIRTUAL_PIXELS:u,viewPort:l}=o.screen,[h]=l.viewPorts,c=new Gl(o,null);c.attributes.x=new D(o,\"x\",-u/3),c.attributes.y=new D(o,\"y\",-u/3),c.attributes.width=new D(o,\"width\",u),c.attributes.height=new D(o,\"height\",u);var v=new ln(o,null);v.attributes.transform=new D(o,\"transform\",this.getAttribute(\"gradientTransform\").getValue()),v.children=[c];var f=new Tr(o,null);f.attributes.x=new D(o,\"x\",0),f.attributes.y=new D(o,\"y\",0),f.attributes.width=new D(o,\"width\",h.width),f.attributes.height=new D(o,\"height\",h.height),f.children=[v];var g=o.createCanvas(h.width,h.height),d=g.getContext(\"2d\");return d.fillStyle=s,f.render(d),d.createPattern(g,\"no-repeat\")}return s}inheritStopContainer(e){this.attributesToInherit.forEach(r=>{!this.getAttribute(r).hasValue()&&e.getAttribute(r).hasValue()&&this.getAttribute(r,!0).setValue(e.getAttribute(r).getValue())})}addParentOpacity(e,r){if(e.hasValue()){var t=new D(this.document,\"color\",r);return t.addOpacity(e).getColor()}return r}}class dc extends zl{constructor(e,r,t){super(e,r,t),this.type=\"linearGradient\",this.attributesToInherit.push(\"x1\",\"y1\",\"x2\",\"y2\")}getGradient(e,r){var t=this.getGradientUnits()===\"objectBoundingBox\",i=t?r.getBoundingBox(e):null;if(t&&!i)return null;!this.getAttribute(\"x1\").hasValue()&&!this.getAttribute(\"y1\").hasValue()&&!this.getAttribute(\"x2\").hasValue()&&!this.getAttribute(\"y2\").hasValue()&&(this.getAttribute(\"x1\",!0).setValue(0),this.getAttribute(\"y1\",!0).setValue(0),this.getAttribute(\"x2\",!0).setValue(1),this.getAttribute(\"y2\",!0).setValue(0));var a=t?i.x+i.width*this.getAttribute(\"x1\").getNumber():this.getAttribute(\"x1\").getPixels(\"x\"),s=t?i.y+i.height*this.getAttribute(\"y1\").getNumber():this.getAttribute(\"y1\").getPixels(\"y\"),o=t?i.x+i.width*this.getAttribute(\"x2\").getNumber():this.getAttribute(\"x2\").getPixels(\"x\"),u=t?i.y+i.height*this.getAttribute(\"y2\").getNumber():this.getAttribute(\"y2\").getPixels(\"y\");return a===o&&s===u?null:e.createLinearGradient(a,s,o,u)}}class pc extends zl{constructor(e,r,t){super(e,r,t),this.type=\"radialGradient\",this.attributesToInherit.push(\"cx\",\"cy\",\"r\",\"fx\",\"fy\",\"fr\")}getGradient(e,r){var t=this.getGradientUnits()===\"objectBoundingBox\",i=r.getBoundingBox(e);if(t&&!i)return null;this.getAttribute(\"cx\").hasValue()||this.getAttribute(\"cx\",!0).setValue(\"50%\"),this.getAttribute(\"cy\").hasValue()||this.getAttribute(\"cy\",!0).setValue(\"50%\"),this.getAttribute(\"r\").hasValue()||this.getAttribute(\"r\",!0).setValue(\"50%\");var a=t?i.x+i.width*this.getAttribute(\"cx\").getNumber():this.getAttribute(\"cx\").getPixels(\"x\"),s=t?i.y+i.height*this.getAttribute(\"cy\").getNumber():this.getAttribute(\"cy\").getPixels(\"y\"),o=a,u=s;this.getAttribute(\"fx\").hasValue()&&(o=t?i.x+i.width*this.getAttribute(\"fx\").getNumber():this.getAttribute(\"fx\").getPixels(\"x\")),this.getAttribute(\"fy\").hasValue()&&(u=t?i.y+i.height*this.getAttribute(\"fy\").getNumber():this.getAttribute(\"fy\").getPixels(\"y\"));var l=t?(i.width+i.height)/2*this.getAttribute(\"r\").getNumber():this.getAttribute(\"r\").getPixels(),h=this.getAttribute(\"fr\").getPixels();return e.createRadialGradient(o,u,h,a,s,l)}}class yc extends K{constructor(e,r,t){super(e,r,t),this.type=\"stop\";var i=Math.max(0,Math.min(1,this.getAttribute(\"offset\").getNumber())),a=this.getStyle(\"stop-opacity\"),s=this.getStyle(\"stop-color\",!0);s.getString()===\"\"&&s.setValue(\"#000\"),a.hasValue()&&(s=s.addOpacity(a)),this.offset=i,this.color=s.getColor()}}class hn extends K{constructor(e,r,t){super(e,r,t),this.type=\"animate\",this.duration=0,this.initialValue=null,this.initialUnits=\"\",this.removed=!1,this.frozen=!1,e.screen.animations.push(this),this.begin=this.getAttribute(\"begin\").getMilliseconds(),this.maxDuration=this.begin+this.getAttribute(\"dur\").getMilliseconds(),this.from=this.getAttribute(\"from\"),this.to=this.getAttribute(\"to\"),this.values=new D(e,\"values\",null);var i=this.getAttribute(\"values\");i.hasValue()&&this.values.setValue(i.getString().split(\";\"))}getProperty(){var e=this.getAttribute(\"attributeType\").getString(),r=this.getAttribute(\"attributeName\").getString();return e===\"CSS\"?this.parent.getStyle(r,!0):this.parent.getAttribute(r,!0)}calcValue(){var{initialUnits:e}=this,{progress:r,from:t,to:i}=this.getProgress(),a=t.getNumber()+(i.getNumber()-t.getNumber())*r;return e===\"%\"&&(a*=100),\"\".concat(a).concat(e)}update(e){var{parent:r}=this,t=this.getProperty();if(this.initialValue||(this.initialValue=t.getString(),this.initialUnits=t.getUnits()),this.duration>this.maxDuration){var i=this.getAttribute(\"fill\").getString(\"remove\");if(this.getAttribute(\"repeatCount\").getString()===\"indefinite\"||this.getAttribute(\"repeatDur\").getString()===\"indefinite\")this.duration=0;else if(i===\"freeze\"&&!this.frozen)this.frozen=!0,r.animationFrozen=!0,r.animationFrozenValue=t.getString();else if(i===\"remove\"&&!this.removed)return this.removed=!0,t.setValue(r.animationFrozen?r.animationFrozenValue:this.initialValue),!0;return!1}this.duration+=e;var a=!1;if(this.begin<this.duration){var s=this.calcValue(),o=this.getAttribute(\"type\");if(o.hasValue()){var u=o.getString();s=\"\".concat(u,\"(\").concat(s,\")\")}t.setValue(s),a=!0}return a}getProgress(){var{document:e,values:r}=this,t={progress:(this.duration-this.begin)/(this.maxDuration-this.begin)};if(r.hasValue()){var i=t.progress*(r.getValue().length-1),a=Math.floor(i),s=Math.ceil(i);t.from=new D(e,\"from\",parseFloat(r.getValue()[a])),t.to=new D(e,\"to\",parseFloat(r.getValue()[s])),t.progress=(i-a)/(s-a)}else t.from=this.from,t.to=this.to;return t}}class mc extends hn{constructor(){super(...arguments),this.type=\"animateColor\"}calcValue(){var{progress:e,from:r,to:t}=this.getProgress(),i=new La(r.getColor()),a=new La(t.getColor());if(i.ok&&a.ok){var s=i.r+(a.r-i.r)*e,o=i.g+(a.g-i.g)*e,u=i.b+(a.b-i.b)*e;return\"rgb(\".concat(Math.floor(s),\", \").concat(Math.floor(o),\", \").concat(Math.floor(u),\")\")}return this.getAttribute(\"from\").getColor()}}class bc extends hn{constructor(){super(...arguments),this.type=\"animateTransform\"}calcValue(){var{progress:e,from:r,to:t}=this.getProgress(),i=ye(r.getString()),a=ye(t.getString()),s=i.map((o,u)=>{var l=a[u];return o+(l-o)*e}).join(\" \");return s}}class xc extends K{constructor(e,r,t){super(e,r,t),this.type=\"font\",this.glyphs=Object.create(null),this.horizAdvX=this.getAttribute(\"horiz-adv-x\").getNumber();var{definitions:i}=e,{children:a}=this;for(var s of a)switch(s.type){case\"font-face\":{this.fontFace=s;var o=s.getStyle(\"font-family\");o.hasValue()&&(i[o.getString()]=this);break}case\"missing-glyph\":this.missingGlyph=s;break;case\"glyph\":{var u=s;u.arabicForm?(this.isRTL=!0,this.isArabic=!0,typeof this.glyphs[u.unicode]>\"u\"&&(this.glyphs[u.unicode]=Object.create(null)),this.glyphs[u.unicode][u.arabicForm]=u):this.glyphs[u.unicode]=u;break}}}render(){}}class Oc extends K{constructor(e,r,t){super(e,r,t),this.type=\"font-face\",this.ascent=this.getAttribute(\"ascent\").getNumber(),this.descent=this.getAttribute(\"descent\").getNumber(),this.unitsPerEm=this.getAttribute(\"units-per-em\").getNumber()}}class Tc extends Y{constructor(){super(...arguments),this.type=\"missing-glyph\",this.horizAdvX=0}}class Sc extends We{constructor(){super(...arguments),this.type=\"tref\"}getText(){var e=this.getHrefAttribute().getDefinition();if(e){var r=e.children[0];if(r)return r.getText()}return\"\"}}class Ec extends We{constructor(e,r,t){super(e,r,t),this.type=\"a\";var{childNodes:i}=r,a=i[0],s=i.length>0&&Array.from(i).every(o=>o.nodeType===3);this.hasText=s,this.text=s?this.getTextFromNode(a):\"\"}getText(){return this.text}renderChildren(e){if(this.hasText){super.renderChildren(e);var{document:r,x:t,y:i}=this,{mouse:a}=r.screen,s=new D(r,\"fontSize\",ue.parse(r.ctx.font).fontSize);a.isWorking()&&a.checkBoundingBox(this,new Ie(t,i-s.getPixels(\"y\"),t+this.measureText(e),i))}else if(this.children.length>0){var o=new ln(this.document,null);o.children=this.children,o.parent=this,o.render(e)}}onClick(){var{window:e}=this.document;e&&e.open(this.getHrefAttribute().getString())}onMouseMove(){var e=this.document.ctx;e.canvas.style.cursor=\"pointer\"}}function Ju(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(i){return Object.getOwnPropertyDescriptor(n,i).enumerable})),r.push.apply(r,t)}return r}function Rr(n){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Ju(Object(r),!0).forEach(function(t){un(n,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):Ju(Object(r)).forEach(function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(r,t))})}return n}class Rc extends We{constructor(e,r,t){super(e,r,t),this.type=\"textPath\",this.textWidth=0,this.textHeight=0,this.pathLength=-1,this.glyphInfo=null,this.letterSpacingCache=[],this.measuresCache=new Map([[\"\",0]]);var i=this.getHrefAttribute().getDefinition();this.text=this.getTextFromNode(),this.dataArray=this.parsePathData(i)}getText(){return this.text}path(e){var{dataArray:r}=this;e&&e.beginPath(),r.forEach(t=>{var{type:i,points:a}=t;switch(i){case F.LINE_TO:e&&e.lineTo(a[0],a[1]);break;case F.MOVE_TO:e&&e.moveTo(a[0],a[1]);break;case F.CURVE_TO:e&&e.bezierCurveTo(a[0],a[1],a[2],a[3],a[4],a[5]);break;case F.QUAD_TO:e&&e.quadraticCurveTo(a[0],a[1],a[2],a[3]);break;case F.ARC:{var[s,o,u,l,h,c,v,f]=a,g=u>l?u:l,d=u>l?1:u/l,p=u>l?l/u:1;e&&(e.translate(s,o),e.rotate(v),e.scale(d,p),e.arc(0,0,g,h,h+c,!!(1-f)),e.scale(1/d,1/p),e.rotate(-v),e.translate(-s,-o));break}case F.CLOSE_PATH:e&&e.closePath();break}})}renderChildren(e){this.setTextData(e),e.save();var r=this.parent.getStyle(\"text-decoration\").getString(),t=this.getFontSize(),{glyphInfo:i}=this,a=e.fillStyle;r===\"underline\"&&e.beginPath(),i.forEach((s,o)=>{var{p0:u,p1:l,rotation:h,text:c}=s;e.save(),e.translate(u.x,u.y),e.rotate(h),e.fillStyle&&e.fillText(c,0,0),e.strokeStyle&&e.strokeText(c,0,0),e.restore(),r===\"underline\"&&(o===0&&e.moveTo(u.x,u.y+t/8),e.lineTo(l.x,l.y+t/5))}),r===\"underline\"&&(e.lineWidth=t/20,e.strokeStyle=a,e.stroke(),e.closePath()),e.restore()}getLetterSpacingAt(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return this.letterSpacingCache[e]||0}findSegmentToFitChar(e,r,t,i,a,s,o,u,l){var h=s,c=this.measureText(e,u);u===\" \"&&r===\"justify\"&&t<i&&(c+=(i-t)/a),l>-1&&(h+=this.getLetterSpacingAt(l));var v=this.textHeight/20,f=this.getEquidistantPointOnPath(h,v,0),g=this.getEquidistantPointOnPath(h+c,v,0),d={p0:f,p1:g},p=f&&g?Math.atan2(g.y-f.y,g.x-f.x):0;if(o){var y=Math.cos(Math.PI/2+p)*o,m=Math.cos(-p)*o;d.p0=Rr(Rr({},f),{},{x:f.x+y,y:f.y+m}),d.p1=Rr(Rr({},g),{},{x:g.x+y,y:g.y+m})}return h+=c,{offset:h,segment:d,rotation:p}}measureText(e,r){var{measuresCache:t}=this,i=r||this.getText();if(t.has(i))return t.get(i);var a=this.measureTargetText(e,i);return t.set(i,a),a}setTextData(e){if(!this.glyphInfo){var r=this.getText(),t=r.split(\"\"),i=r.split(\" \").length-1,a=this.parent.getAttribute(\"dx\").split().map(x=>x.getPixels(\"x\")),s=this.parent.getAttribute(\"dy\").getPixels(\"y\"),o=this.parent.getStyle(\"text-anchor\").getString(\"start\"),u=this.getStyle(\"letter-spacing\"),l=this.parent.getStyle(\"letter-spacing\"),h=0;!u.hasValue()||u.getValue()===\"inherit\"?h=l.getPixels():u.hasValue()&&u.getValue()!==\"initial\"&&u.getValue()!==\"unset\"&&(h=u.getPixels());var c=[],v=r.length;this.letterSpacingCache=c;for(var f=0;f<v;f++)c.push(typeof a[f]<\"u\"?a[f]:h);var g=c.reduce((x,S,E)=>E===0?0:x+S||0,0),d=this.measureText(e),p=Math.max(d+g,0);this.textWidth=d,this.textHeight=this.getFontSize(),this.glyphInfo=[];var y=this.getPathLength(),m=this.getStyle(\"startOffset\").getNumber(0)*y,b=0;(o===\"middle\"||o===\"center\")&&(b=-p/2),(o===\"end\"||o===\"right\")&&(b=-p),b+=m,t.forEach((x,S)=>{var{offset:E,segment:O,rotation:P}=this.findSegmentToFitChar(e,o,p,y,i,b,s,x,S);b=E,!(!O.p0||!O.p1)&&this.glyphInfo.push({text:t[S],p0:O.p0,p1:O.p1,rotation:P})})}}parsePathData(e){if(this.pathLength=-1,!e)return[];var r=[],{pathParser:t}=e;for(t.reset();!t.isEnd();){var{current:i}=t,a=i?i.x:0,s=i?i.y:0,o=t.next(),u=o.type,l=[];switch(o.type){case F.MOVE_TO:this.pathM(t,l);break;case F.LINE_TO:u=this.pathL(t,l);break;case F.HORIZ_LINE_TO:u=this.pathH(t,l);break;case F.VERT_LINE_TO:u=this.pathV(t,l);break;case F.CURVE_TO:this.pathC(t,l);break;case F.SMOOTH_CURVE_TO:u=this.pathS(t,l);break;case F.QUAD_TO:this.pathQ(t,l);break;case F.SMOOTH_QUAD_TO:u=this.pathT(t,l);break;case F.ARC:l=this.pathA(t);break;case F.CLOSE_PATH:Y.pathZ(t);break}o.type!==F.CLOSE_PATH?r.push({type:u,points:l,start:{x:a,y:s},pathLength:this.calcLength(a,s,u,l)}):r.push({type:F.CLOSE_PATH,points:[],pathLength:0})}return r}pathM(e,r){var{x:t,y:i}=Y.pathM(e).point;r.push(t,i)}pathL(e,r){var{x:t,y:i}=Y.pathL(e).point;return r.push(t,i),F.LINE_TO}pathH(e,r){var{x:t,y:i}=Y.pathH(e).point;return r.push(t,i),F.LINE_TO}pathV(e,r){var{x:t,y:i}=Y.pathV(e).point;return r.push(t,i),F.LINE_TO}pathC(e,r){var{point:t,controlPoint:i,currentPoint:a}=Y.pathC(e);r.push(t.x,t.y,i.x,i.y,a.x,a.y)}pathS(e,r){var{point:t,controlPoint:i,currentPoint:a}=Y.pathS(e);return r.push(t.x,t.y,i.x,i.y,a.x,a.y),F.CURVE_TO}pathQ(e,r){var{controlPoint:t,currentPoint:i}=Y.pathQ(e);r.push(t.x,t.y,i.x,i.y)}pathT(e,r){var{controlPoint:t,currentPoint:i}=Y.pathT(e);return r.push(t.x,t.y,i.x,i.y),F.QUAD_TO}pathA(e){var{rX:r,rY:t,sweepFlag:i,xAxisRotation:a,centp:s,a1:o,ad:u}=Y.pathA(e);return i===0&&u>0&&(u-=2*Math.PI),i===1&&u<0&&(u+=2*Math.PI),[s.x,s.y,r,t,o,u,a,i]}calcLength(e,r,t,i){var a=0,s=null,o=null,u=0;switch(t){case F.LINE_TO:return this.getLineLength(e,r,i[0],i[1]);case F.CURVE_TO:for(a=0,s=this.getPointOnCubicBezier(0,e,r,i[0],i[1],i[2],i[3],i[4],i[5]),u=.01;u<=1;u+=.01)o=this.getPointOnCubicBezier(u,e,r,i[0],i[1],i[2],i[3],i[4],i[5]),a+=this.getLineLength(s.x,s.y,o.x,o.y),s=o;return a;case F.QUAD_TO:for(a=0,s=this.getPointOnQuadraticBezier(0,e,r,i[0],i[1],i[2],i[3]),u=.01;u<=1;u+=.01)o=this.getPointOnQuadraticBezier(u,e,r,i[0],i[1],i[2],i[3]),a+=this.getLineLength(s.x,s.y,o.x,o.y),s=o;return a;case F.ARC:{a=0;var l=i[4],h=i[5],c=i[4]+h,v=Math.PI/180;if(Math.abs(l-c)<v&&(v=Math.abs(l-c)),s=this.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],l,0),h<0)for(u=l-v;u>c;u-=v)o=this.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],u,0),a+=this.getLineLength(s.x,s.y,o.x,o.y),s=o;else for(u=l+v;u<c;u+=v)o=this.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],u,0),a+=this.getLineLength(s.x,s.y,o.x,o.y),s=o;return o=this.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],c,0),a+=this.getLineLength(s.x,s.y,o.x,o.y),a}}return 0}getPointOnLine(e,r,t,i,a){var s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:r,o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:t,u=(a-t)/(i-r+ar),l=Math.sqrt(e*e/(1+u*u));i<r&&(l*=-1);var h=u*l,c=null;if(i===r)c={x:s,y:o+h};else if((o-t)/(s-r+ar)===u)c={x:s+l,y:o+h};else{var v=0,f=0,g=this.getLineLength(r,t,i,a);if(g<ar)return null;var d=(s-r)*(i-r)+(o-t)*(a-t);d/=g*g,v=r+d*(i-r),f=t+d*(a-t);var p=this.getLineLength(s,o,v,f),y=Math.sqrt(e*e-p*p);l=Math.sqrt(y*y/(1+u*u)),i<r&&(l*=-1),h=u*l,c={x:v+l,y:f+h}}return c}getPointOnPath(e){var r=this.getPathLength(),t=0,i=null;if(e<-5e-5||e-5e-5>r)return null;var{dataArray:a}=this;for(var s of a){if(s&&(s.pathLength<5e-5||t+s.pathLength+5e-5<e)){t+=s.pathLength;continue}var o=e-t,u=0;switch(s.type){case F.LINE_TO:i=this.getPointOnLine(o,s.start.x,s.start.y,s.points[0],s.points[1],s.start.x,s.start.y);break;case F.ARC:{var l=s.points[4],h=s.points[5],c=s.points[4]+h;if(u=l+o/s.pathLength*h,h<0&&u<c||h>=0&&u>c)break;i=this.getPointOnEllipticalArc(s.points[0],s.points[1],s.points[2],s.points[3],u,s.points[6]);break}case F.CURVE_TO:u=o/s.pathLength,u>1&&(u=1),i=this.getPointOnCubicBezier(u,s.start.x,s.start.y,s.points[0],s.points[1],s.points[2],s.points[3],s.points[4],s.points[5]);break;case F.QUAD_TO:u=o/s.pathLength,u>1&&(u=1),i=this.getPointOnQuadraticBezier(u,s.start.x,s.start.y,s.points[0],s.points[1],s.points[2],s.points[3]);break}if(i)return i;break}return null}getLineLength(e,r,t,i){return Math.sqrt((t-e)*(t-e)+(i-r)*(i-r))}getPathLength(){return this.pathLength===-1&&(this.pathLength=this.dataArray.reduce((e,r)=>r.pathLength>0?e+r.pathLength:e,0)),this.pathLength}getPointOnCubicBezier(e,r,t,i,a,s,o,u,l){var h=u*Hu(e)+s*Wu(e)+i*Yu(e)+r*Xu(e),c=l*Hu(e)+o*Wu(e)+a*Yu(e)+t*Xu(e);return{x:h,y:c}}getPointOnQuadraticBezier(e,r,t,i,a,s,o){var u=s*Ku(e)+i*Qu(e)+r*Zu(e),l=o*Ku(e)+a*Qu(e)+t*Zu(e);return{x:u,y:l}}getPointOnEllipticalArc(e,r,t,i,a,s){var o=Math.cos(s),u=Math.sin(s),l={x:t*Math.cos(a),y:i*Math.sin(a)};return{x:e+(l.x*o-l.y*u),y:r+(l.x*u+l.y*o)}}buildEquidistantCache(e,r){var t=this.getPathLength(),i=r||.25,a=e||t/100;if(!this.equidistantCache||this.equidistantCache.step!==a||this.equidistantCache.precision!==i){this.equidistantCache={step:a,precision:i,points:[]};for(var s=0,o=0;o<=t;o+=i){var u=this.getPointOnPath(o),l=this.getPointOnPath(o+i);!u||!l||(s+=this.getLineLength(u.x,u.y,l.x,l.y),s>=a&&(this.equidistantCache.points.push({x:u.x,y:u.y,distance:o}),s-=a))}}}getEquidistantPointOnPath(e,r,t){if(this.buildEquidistantCache(r,t),e<0||e-this.getPathLength()>5e-5)return null;var i=Math.round(e/this.getPathLength()*(this.equidistantCache.points.length-1));return this.equidistantCache.points[i]||null}}var Cc=/^\\s*data:(([^/,;]+\\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i;class wc extends ir{constructor(e,r,t){super(e,r,t),this.type=\"image\",this.loaded=!1;var i=this.getHrefAttribute().getString();if(i){var a=i.endsWith(\".svg\")||/^\\s*data:image\\/svg\\+xml/i.test(i);e.images.push(this),a?this.loadSvg(i):this.loadImage(i),this.isSvg=a}}loadImage(e){var r=this;return Be(function*(){try{var t=yield r.document.createImage(e);r.image=t}catch(i){console.error('Error while loading image \"'.concat(e,'\":'),i)}r.loaded=!0})()}loadSvg(e){var r=this;return Be(function*(){var t=Cc.exec(e);if(t){var i=t[5];t[4]===\"base64\"?r.image=atob(i):r.image=decodeURIComponent(i)}else try{var a=yield r.document.fetch(e),s=yield a.text();r.image=s}catch(o){console.error('Error while loading image \"'.concat(e,'\":'),o)}r.loaded=!0})()}renderChildren(e){var{document:r,image:t,loaded:i}=this,a=this.getAttribute(\"x\").getPixels(\"x\"),s=this.getAttribute(\"y\").getPixels(\"y\"),o=this.getStyle(\"width\").getPixels(\"x\"),u=this.getStyle(\"height\").getPixels(\"y\");if(!(!i||!t||!o||!u)){if(e.save(),e.translate(a,s),this.isSvg){var l=r.canvg.forkString(e,this.image,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:0,offsetY:0,scaleWidth:o,scaleHeight:u});l.document.documentElement.parent=this,l.render()}else{var h=this.image;r.setViewBox({ctx:e,aspectRatio:this.getAttribute(\"preserveAspectRatio\").getString(),width:o,desiredWidth:h.width,height:u,desiredHeight:h.height}),this.loaded&&(typeof h.complete>\"u\"||h.complete)&&e.drawImage(h,0,0)}e.restore()}}getBoundingBox(){var e=this.getAttribute(\"x\").getPixels(\"x\"),r=this.getAttribute(\"y\").getPixels(\"y\"),t=this.getStyle(\"width\").getPixels(\"x\"),i=this.getStyle(\"height\").getPixels(\"y\");return new Ie(e,r,e+t,r+i)}}class Pc extends ir{constructor(){super(...arguments),this.type=\"symbol\"}render(e){}}class Ac{constructor(e){this.document=e,this.loaded=!1,e.fonts.push(this)}load(e,r){var t=this;return Be(function*(){try{var{document:i}=t,a=yield i.canvg.parser.load(r),s=a.getElementsByTagName(\"font\");Array.from(s).forEach(o=>{var u=i.createElement(o);i.definitions[e]=u})}catch(o){console.error('Error while loading font \"'.concat(r,'\":'),o)}t.loaded=!0})()}}class Hl extends K{constructor(e,r,t){super(e,r,t),this.type=\"style\";var i=or(Array.from(r.childNodes).map(s=>s.textContent).join(\"\").replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm,\"\").replace(/@import.*;/g,\"\")),a=i.split(\"}\");a.forEach(s=>{var o=s.trim();if(o){var u=o.split(\"{\"),l=u[0].split(\",\"),h=u[1].split(\";\");l.forEach(c=>{var v=c.trim();if(v){var f=e.styles[v]||{};if(h.forEach(p=>{var y=p.indexOf(\":\"),m=p.substr(0,y).trim(),b=p.substr(y+1,p.length-y).trim();m&&b&&(f[m]=new D(e,m,b))}),e.styles[v]=f,e.stylesSpecificity[v]=$f(v),v===\"@font-face\"){var g=f[\"font-family\"].getString().replace(/\"|'/g,\"\"),d=f.src.getString().split(\",\");d.forEach(p=>{if(p.indexOf('format(\"svg\")')>0){var y=Ll(p);y&&new Ac(e).load(g,y)}})}}})}})}}Hl.parseExternalUrl=Ll;class Ic extends ir{constructor(){super(...arguments),this.type=\"use\"}setContext(e){super.setContext(e);var r=this.getAttribute(\"x\"),t=this.getAttribute(\"y\");r.hasValue()&&e.translate(r.getPixels(\"x\"),0),t.hasValue()&&e.translate(0,t.getPixels(\"y\"))}path(e){var{element:r}=this;r&&r.path(e)}renderChildren(e){var{document:r,element:t}=this;if(t){var i=t;if(t.type===\"symbol\"&&(i=new Tr(r,null),i.attributes.viewBox=new D(r,\"viewBox\",t.getAttribute(\"viewBox\").getString()),i.attributes.preserveAspectRatio=new D(r,\"preserveAspectRatio\",t.getAttribute(\"preserveAspectRatio\").getString()),i.attributes.overflow=new D(r,\"overflow\",t.getAttribute(\"overflow\").getString()),i.children=t.children,t.styles.opacity=new D(r,\"opacity\",this.calculateOpacity())),i.type===\"svg\"){var a=this.getStyle(\"width\",!1,!0),s=this.getStyle(\"height\",!1,!0);a.hasValue()&&(i.attributes.width=new D(r,\"width\",a.getString())),s.hasValue()&&(i.attributes.height=new D(r,\"height\",s.getString()))}var o=i.parent;i.parent=this,i.render(e),i.parent=o}}getBoundingBox(e){var{element:r}=this;return r?r.getBoundingBox(e):null}elementTransform(){var{document:e,element:r}=this;return Je.fromElement(e,r)}get element(){return this.cachedElement||(this.cachedElement=this.getHrefAttribute().getDefinition()),this.cachedElement}}function Cr(n,e,r,t,i,a){return n[r*t*4+e*4+a]}function wr(n,e,r,t,i,a,s){n[r*t*4+e*4+a]=s}function te(n,e,r){var t=n[e];return t*r}function je(n,e,r,t){return e+Math.cos(n)*r+Math.sin(n)*t}class Wl extends K{constructor(e,r,t){super(e,r,t),this.type=\"feColorMatrix\";var i=ye(this.getAttribute(\"values\").getString());switch(this.getAttribute(\"type\").getString(\"matrix\")){case\"saturate\":{var a=i[0];i=[.213+.787*a,.715-.715*a,.072-.072*a,0,0,.213-.213*a,.715+.285*a,.072-.072*a,0,0,.213-.213*a,.715-.715*a,.072+.928*a,0,0,0,0,0,1,0,0,0,0,0,1];break}case\"hueRotate\":{var s=i[0]*Math.PI/180;i=[je(s,.213,.787,-.213),je(s,.715,-.715,-.715),je(s,.072,-.072,.928),0,0,je(s,.213,-.213,.143),je(s,.715,.285,.14),je(s,.072,-.072,-.283),0,0,je(s,.213,-.213,-.787),je(s,.715,-.715,.715),je(s,.072,.928,.072),0,0,0,0,0,1,0,0,0,0,0,1];break}case\"luminanceToAlpha\":i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.2125,.7154,.0721,0,0,0,0,0,0,1];break}this.matrix=i,this.includeOpacity=this.getAttribute(\"includeOpacity\").hasValue()}apply(e,r,t,i,a){for(var{includeOpacity:s,matrix:o}=this,u=e.getImageData(0,0,i,a),l=0;l<a;l++)for(var h=0;h<i;h++){var c=Cr(u.data,h,l,i,a,0),v=Cr(u.data,h,l,i,a,1),f=Cr(u.data,h,l,i,a,2),g=Cr(u.data,h,l,i,a,3),d=te(o,0,c)+te(o,1,v)+te(o,2,f)+te(o,3,g)+te(o,4,1),p=te(o,5,c)+te(o,6,v)+te(o,7,f)+te(o,8,g)+te(o,9,1),y=te(o,10,c)+te(o,11,v)+te(o,12,f)+te(o,13,g)+te(o,14,1),m=te(o,15,c)+te(o,16,v)+te(o,17,f)+te(o,18,g)+te(o,19,1);s&&(d=0,p=0,y=0,m*=g/255),wr(u.data,h,l,i,a,0,d),wr(u.data,h,l,i,a,1,p),wr(u.data,h,l,i,a,2,y),wr(u.data,h,l,i,a,3,m)}e.clearRect(0,0,i,a),e.putImageData(u,0,0)}}class zr extends K{constructor(){super(...arguments),this.type=\"mask\"}apply(e,r){var{document:t}=this,i=this.getAttribute(\"x\").getPixels(\"x\"),a=this.getAttribute(\"y\").getPixels(\"y\"),s=this.getStyle(\"width\").getPixels(\"x\"),o=this.getStyle(\"height\").getPixels(\"y\");if(!s&&!o){var u=new Ie;this.children.forEach(g=>{u.addBoundingBox(g.getBoundingBox(e))}),i=Math.floor(u.x1),a=Math.floor(u.y1),s=Math.floor(u.width),o=Math.floor(u.height)}var l=this.removeStyles(r,zr.ignoreStyles),h=t.createCanvas(i+s,a+o),c=h.getContext(\"2d\");t.screen.setDefaults(c),this.renderChildren(c),new Wl(t,{nodeType:1,childNodes:[],attributes:[{nodeName:\"type\",value:\"luminanceToAlpha\"},{nodeName:\"includeOpacity\",value:\"true\"}]}).apply(c,0,0,i+s,a+o);var v=t.createCanvas(i+s,a+o),f=v.getContext(\"2d\");t.screen.setDefaults(f),r.render(f),f.globalCompositeOperation=\"destination-in\",f.fillStyle=c.createPattern(h,\"no-repeat\"),f.fillRect(0,0,i+s,a+o),e.fillStyle=f.createPattern(v,\"no-repeat\"),e.fillRect(0,0,i+s,a+o),this.restoreStyles(r,l)}render(e){}}zr.ignoreStyles=[\"mask\",\"transform\",\"clip-path\"];var el=()=>{};class Nc extends K{constructor(){super(...arguments),this.type=\"clipPath\"}apply(e){var{document:r}=this,t=Reflect.getPrototypeOf(e),{beginPath:i,closePath:a}=e;t&&(t.beginPath=el,t.closePath=el),Reflect.apply(i,e,[]),this.children.forEach(s=>{if(!(typeof s.path>\"u\")){var o=typeof s.elementTransform<\"u\"?s.elementTransform():null;o||(o=Je.fromElement(r,s)),o&&o.apply(e),s.path(e),t&&(t.closePath=a),o&&o.unapply(e)}}),Reflect.apply(a,e,[]),e.clip(),t&&(t.beginPath=i,t.closePath=a)}render(e){}}class Hr extends K{constructor(){super(...arguments),this.type=\"filter\"}apply(e,r){var{document:t,children:i}=this,a=r.getBoundingBox(e);if(a){var s=0,o=0;i.forEach(y=>{var m=y.extraFilterDistance||0;s=Math.max(s,m),o=Math.max(o,m)});var u=Math.floor(a.width),l=Math.floor(a.height),h=u+2*s,c=l+2*o;if(!(h<1||c<1)){var v=Math.floor(a.x),f=Math.floor(a.y),g=this.removeStyles(r,Hr.ignoreStyles),d=t.createCanvas(h,c),p=d.getContext(\"2d\");t.screen.setDefaults(p),p.translate(-v+s,-f+o),r.render(p),i.forEach(y=>{typeof y.apply==\"function\"&&y.apply(p,0,0,h,c)}),e.drawImage(d,0,0,h,c,v-s,f-o,h,c),this.restoreStyles(r,g)}}}render(e){}}Hr.ignoreStyles=[\"filter\",\"transform\",\"clip-path\"];class _c extends K{constructor(e,r,t){super(e,r,t),this.type=\"feDropShadow\",this.addStylesFromStyleDefinition()}apply(e,r,t,i,a){}}class Mc extends K{constructor(){super(...arguments),this.type=\"feMorphology\"}apply(e,r,t,i,a){}}class qc extends K{constructor(){super(...arguments),this.type=\"feComposite\"}apply(e,r,t,i,a){}}class Dc extends K{constructor(e,r,t){super(e,r,t),this.type=\"feGaussianBlur\",this.blurRadius=Math.floor(this.getAttribute(\"stdDeviation\").getNumber()),this.extraFilterDistance=this.blurRadius}apply(e,r,t,i,a){var{document:s,blurRadius:o}=this,u=s.window?s.window.document.body:null,l=e.canvas;l.id=s.getUniqueId(),u&&(l.style.display=\"none\",u.appendChild(l)),Pf(l,r,t,i,a,o),u&&u.removeChild(l)}}class Vc extends K{constructor(){super(...arguments),this.type=\"title\"}}class Lc extends K{constructor(){super(...arguments),this.type=\"desc\"}}var kc={svg:Tr,rect:Gl,circle:uc,ellipse:lc,line:hc,polyline:$l,polygon:fc,path:Y,pattern:cc,marker:vc,defs:gc,linearGradient:dc,radialGradient:pc,stop:yc,animate:hn,animateColor:mc,animateTransform:bc,font:xc,\"font-face\":Oc,\"missing-glyph\":Tc,glyph:Ul,text:We,tspan:$r,tref:Sc,a:Ec,textPath:Rc,image:wc,g:ln,symbol:Pc,style:Hl,use:Ic,mask:zr,clipPath:Nc,filter:Hr,feDropShadow:_c,feMorphology:Mc,feComposite:qc,feColorMatrix:Wl,feGaussianBlur:Dc,title:Vc,desc:Lc};function rl(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(i){return Object.getOwnPropertyDescriptor(n,i).enumerable})),r.push.apply(r,t)}return r}function jc(n){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?rl(Object(r),!0).forEach(function(t){un(n,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):rl(Object(r)).forEach(function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(r,t))})}return n}function Bc(n,e){var r=document.createElement(\"canvas\");return r.width=n,r.height=e,r}function Fc(n){return Ba.apply(this,arguments)}function Ba(){return Ba=Be(function*(n){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,r=document.createElement(\"img\");return e&&(r.crossOrigin=\"Anonymous\"),new Promise((t,i)=>{r.onload=()=>{t(r)},r.onerror=(a,s,o,u,l)=>{i(l)},r.src=n})}),Ba.apply(this,arguments)}class He{constructor(e){var{rootEmSize:r=12,emSize:t=12,createCanvas:i=He.createCanvas,createImage:a=He.createImage,anonymousCrossOrigin:s}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.canvg=e,this.definitions=Object.create(null),this.styles=Object.create(null),this.stylesSpecificity=Object.create(null),this.images=[],this.fonts=[],this.emSizeStack=[],this.uniqueId=0,this.screen=e.screen,this.rootEmSize=r,this.emSize=t,this.createCanvas=i,this.createImage=this.bindCreateImage(a,s),this.screen.wait(this.isImagesLoaded.bind(this)),this.screen.wait(this.isFontsLoaded.bind(this))}bindCreateImage(e,r){return typeof r==\"boolean\"?(t,i)=>e(t,typeof i==\"boolean\"?i:r):e}get window(){return this.screen.window}get fetch(){return this.screen.fetch}get ctx(){return this.screen.ctx}get emSize(){var{emSizeStack:e}=this;return e[e.length-1]}set emSize(e){var{emSizeStack:r}=this;r.push(e)}popEmSize(){var{emSizeStack:e}=this;e.pop()}getUniqueId(){return\"canvg\".concat(++this.uniqueId)}isImagesLoaded(){return this.images.every(e=>e.loaded)}isFontsLoaded(){return this.fonts.every(e=>e.loaded)}createDocumentElement(e){var r=this.createElement(e.documentElement);return r.root=!0,r.addStylesFromStyleDefinition(),this.documentElement=r,r}createElement(e){var r=e.nodeName.replace(/^[^:]+:/,\"\"),t=He.elementTypes[r];return typeof t<\"u\"?new t(this,e):new tc(this,e)}createTextNode(e){return new oc(this,e)}setViewBox(e){this.screen.setViewBox(jc({document:this},e))}}He.createCanvas=Bc;He.createImage=Fc;He.elementTypes=kc;function tl(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter(function(i){return Object.getOwnPropertyDescriptor(n,i).enumerable})),r.push.apply(r,t)}return r}function Qe(n){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?tl(Object(r),!0).forEach(function(t){un(n,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):tl(Object(r)).forEach(function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(r,t))})}return n}class gr{constructor(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.parser=new qa(t),this.screen=new Gr(e,t),this.options=t;var i=new He(this,t),a=i.createDocumentElement(r);this.document=i,this.documentElement=a}static from(e,r){var t=arguments;return Be(function*(){var i=t.length>2&&t[2]!==void 0?t[2]:{},a=new qa(i),s=yield a.parse(r);return new gr(e,s,i)})()}static fromString(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=new qa(t),a=i.parseFromString(r);return new gr(e,a,t)}fork(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return gr.from(e,r,Qe(Qe({},this.options),t))}forkString(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return gr.fromString(e,r,Qe(Qe({},this.options),t))}ready(){return this.screen.ready()}isReady(){return this.screen.isReady()}render(){var e=arguments,r=this;return Be(function*(){var t=e.length>0&&e[0]!==void 0?e[0]:{};r.start(Qe({enableRedraw:!0,ignoreAnimation:!0,ignoreMouse:!0},t)),yield r.ready(),r.stop()})()}start(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{documentElement:r,screen:t,options:i}=this;t.start(r,Qe(Qe({enableRedraw:!0},i),e))}stop(){this.screen.stop()}resize(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;this.documentElement.resize(e,r,t)}}export{Ec as AElement,mc as AnimateColorElement,hn as AnimateElement,bc as AnimateTransformElement,Ie as BoundingBox,Hu as CB1,Wu as CB2,Yu as CB3,Xu as CB4,gr as Canvg,uc as CircleElement,Nc as ClipPathElement,gc as DefsElement,Lc as DescElement,He as Document,K as Element,lc as EllipseElement,Wl as FeColorMatrixElement,qc as FeCompositeElement,_c as FeDropShadowElement,Dc as FeGaussianBlurElement,Mc as FeMorphologyElement,Hr as FilterElement,ue as Font,xc as FontElement,Oc as FontFaceElement,ln as GElement,Ul as GlyphElement,zl as GradientElement,wc as ImageElement,hc as LineElement,dc as LinearGradientElement,vc as MarkerElement,zr as MaskElement,Bl as Matrix,Tc as MissingGlyphElement,Hf as Mouse,ar as PSEUDO_ZERO,qa as Parser,Y as PathElement,F as PathParser,cc as PatternElement,ee as Point,fc as PolygonElement,$l as PolylineElement,D as Property,Ku as QB1,Qu as QB2,Zu as QB3,pc as RadialGradientElement,Gl as RectElement,ir as RenderedElement,Kf as Rotate,Tr as SVGElement,Ac as SVGFontLoader,Qf as Scale,Gr as Screen,Fl as Skew,Zf as SkewX,Jf as SkewY,yc as StopElement,Hl as StyleElement,Pc as SymbolElement,Sc as TRefElement,$r as TSpanElement,We as TextElement,Rc as TextPathElement,Vc as TitleElement,Je as Transform,Xf as Translate,tc as UnknownElement,Ic as UseElement,zf as ViewPort,or as compressSpaces,gr as default,$f as getSelectorSpecificity,Df as normalizeAttributeName,Vf as normalizeColor,Ll as parseExternalUrl,zc as presets,ye as toNumbers,_f as trimLeft,Mf as trimRight,$u as vectorMagnitude,zu as vectorsAngle,ja as vectorsRatio};\n"
  },
  {
    "path": "public/build/assets/index.esm-DvuRQLEU.js",
    "content": "import\"./cytoscape.esm-BJ4qIETX.js\";var n=500;function o(e){e===void 0&&(e=n);var i=null;return this.on(\"click\",function(t){i&&i===t.target?(i=null,t.preventDefault(),t.stopPropagation(),t.target.emit(\"dblclick\",[t])):(i=t.target,setTimeout(function(){i&&i===t.target&&(i=null,t.target.emit(\"dblclick:timeout\",[t]))},e))}),this}function c(e){if(e){var i=\"dblclick\";e(\"core\",i,o)}}typeof window.cytoscape<\"u\"&&c(window.cytoscape);export{c as default};\n"
  },
  {
    "path": "public/build/assets/jspdf.es.min-DI22nqbU.js",
    "content": "const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[\"assets/index.es-MeewMCO3.js\",\"assets/_commonjsHelpers-Cpj98o6Y.js\",\"assets/preload-helper-I4rgV-VL.js\"])))=>i.map(i=>d[i]);\nimport{_ as mo}from\"./preload-helper-I4rgV-VL.js\";function xe(n){\"@babel/helpers - typeof\";return xe=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(t){return typeof t}:function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},xe(n)}var Qn=Uint8Array,Mn=Uint16Array,Ko=Int32Array,Xo=new Qn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),$o=new Qn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Bl=new Qn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Yu=function(n,t){for(var e=new Mn(31),i=0;i<31;++i)e[i]=t+=1<<n[i-1];for(var o=new Ko(e[30]),i=1;i<30;++i)for(var a=e[i];a<e[i+1];++a)o[a]=a-e[i]<<5|i;return{b:e,r:o}},Ju=Yu(Xo,2),_h=Ju.b,To=Ju.r;_h[28]=258,To[258]=28;var Ah=Yu($o,0),Ml=Ah.r,Do=new Mn(32768);for(var Ee=0;Ee<32768;++Ee){var Jr=(Ee&43690)>>1|(Ee&21845)<<1;Jr=(Jr&52428)>>2|(Jr&13107)<<2,Jr=(Jr&61680)>>4|(Jr&3855)<<4,Do[Ee]=((Jr&65280)>>8|(Jr&255)<<8)>>1}var Ia=(function(n,t,e){for(var i=n.length,o=0,a=new Mn(t);o<i;++o)n[o]&&++a[n[o]-1];var c=new Mn(t);for(o=1;o<t;++o)c[o]=c[o-1]+a[o-1]<<1;var l;if(e){l=new Mn(1<<t);var h=15-t;for(o=0;o<i;++o)if(n[o])for(var d=o<<4|n[o],m=t-n[o],_=c[n[o]-1]++<<m,k=_|(1<<m)-1;_<=k;++_)l[Do[_]>>h]=d}else for(l=new Mn(i),o=0;o<i;++o)n[o]&&(l[o]=Do[c[n[o]-1]++]>>15-n[o]);return l}),Li=new Qn(288);for(var Ee=0;Ee<144;++Ee)Li[Ee]=8;for(var Ee=144;Ee<256;++Ee)Li[Ee]=9;for(var Ee=256;Ee<280;++Ee)Li[Ee]=7;for(var Ee=280;Ee<288;++Ee)Li[Ee]=8;var Is=new Qn(32);for(var Ee=0;Ee<32;++Ee)Is[Ee]=5;var Nh=Ia(Li,9,0),Lh=Ia(Is,5,0),Ku=function(n){return(n+7)/8|0},Sh=function(n,t,e){return(e==null||e>n.length)&&(e=n.length),new Qn(n.subarray(t,e))},Cr=function(n,t,e){e<<=t&7;var i=t/8|0;n[i]|=e,n[i+1]|=e>>8},ka=function(n,t,e){e<<=t&7;var i=t/8|0;n[i]|=e,n[i+1]|=e>>8,n[i+2]|=e>>16},vo=function(n,t){for(var e=[],i=0;i<n.length;++i)n[i]&&e.push({s:i,f:n[i]});var o=e.length,a=e.slice();if(!o)return{t:$u,l:0};if(o==1){var c=new Qn(e[0].s+1);return c[e[0].s]=1,{t:c,l:1}}e.sort(function(it,vt){return it.f-vt.f}),e.push({s:-1,f:25001});var l=e[0],h=e[1],d=0,m=1,_=2;for(e[0]={s:-1,f:l.f+h.f,l,r:h};m!=o-1;)l=e[e[d].f<e[_].f?d++:_++],h=e[d!=m&&e[d].f<e[_].f?d++:_++],e[m++]={s:-1,f:l.f+h.f,l,r:h};for(var k=a[0].s,i=1;i<o;++i)a[i].s>k&&(k=a[i].s);var p=new Mn(k+1),j=qo(e[m-1],p,0);if(j>t){var i=0,O=0,M=j-t,S=1<<M;for(a.sort(function(vt,dt){return p[dt.s]-p[vt.s]||vt.f-dt.f});i<o;++i){var V=a[i].s;if(p[V]>t)O+=S-(1<<j-p[V]),p[V]=t;else break}for(O>>=M;O>0;){var G=a[i].s;p[G]<t?O-=1<<t-p[G]++-1:++i}for(;i>=0&&O;--i){var q=a[i].s;p[q]==t&&(--p[q],++O)}j=t}return{t:new Qn(p),l:j}},qo=function(n,t,e){return n.s==-1?Math.max(qo(n.l,t,e+1),qo(n.r,t,e+1)):t[n.s]=e},Rl=function(n){for(var t=n.length;t&&!n[--t];);for(var e=new Mn(++t),i=0,o=n[0],a=1,c=function(h){e[i++]=h},l=1;l<=t;++l)if(n[l]==o&&l!=t)++a;else{if(!o&&a>2){for(;a>138;a-=138)c(32754);a>2&&(c(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(c(o),--a;a>6;a-=6)c(8304);a>2&&(c(a-3<<5|8208),a=0)}for(;a--;)c(o);a=1,o=n[l]}return{c:e.subarray(0,i),n:t}},Pa=function(n,t){for(var e=0,i=0;i<t.length;++i)e+=n[i]*t[i];return e},Xu=function(n,t,e){var i=e.length,o=Ku(t+2);n[o]=i&255,n[o+1]=i>>8,n[o+2]=n[o]^255,n[o+3]=n[o+1]^255;for(var a=0;a<i;++a)n[o+a+4]=e[a];return(o+4+i)*8},Tl=function(n,t,e,i,o,a,c,l,h,d,m){Cr(t,m++,e),++o[256];for(var _=vo(o,15),k=_.t,p=_.l,j=vo(a,15),O=j.t,M=j.l,S=Rl(k),V=S.c,G=S.n,q=Rl(O),it=q.c,vt=q.n,dt=new Mn(19),X=0;X<V.length;++X)++dt[V[X]&31];for(var X=0;X<it.length;++X)++dt[it[X]&31];for(var R=vo(dt,7),tt=R.t,N=R.l,E=19;E>4&&!tt[Bl[E-1]];--E);var z=d+5<<3,U=Pa(o,Li)+Pa(a,Is)+c,rt=Pa(o,k)+Pa(a,O)+c+14+3*E+Pa(dt,tt)+2*dt[16]+3*dt[17]+7*dt[18];if(h>=0&&z<=U&&z<=rt)return Xu(t,m,n.subarray(h,h+d));var ot,ft,nt,ct;if(Cr(t,m,1+(rt<U)),m+=2,rt<U){ot=Ia(k,p,0),ft=k,nt=Ia(O,M,0),ct=O;var At=Ia(tt,N,0);Cr(t,m,G-257),Cr(t,m+5,vt-1),Cr(t,m+10,E-4),m+=14;for(var X=0;X<E;++X)Cr(t,m+3*X,tt[Bl[X]]);m+=3*E;for(var wt=[V,it],x=0;x<2;++x)for(var B=wt[x],X=0;X<B.length;++X){var T=B[X]&31;Cr(t,m,At[T]),m+=tt[T],T>15&&(Cr(t,m,B[X]>>5&127),m+=B[X]>>12)}}else ot=Nh,ft=Li,nt=Lh,ct=Is;for(var X=0;X<l;++X){var H=i[X];if(H>255){var T=H>>18&31;ka(t,m,ot[T+257]),m+=ft[T+257],T>7&&(Cr(t,m,H>>23&31),m+=Xo[T]);var J=H&31;ka(t,m,nt[J]),m+=ct[J],J>3&&(ka(t,m,H>>5&8191),m+=$o[J])}else ka(t,m,ot[H]),m+=ft[H]}return ka(t,m,ot[256]),m+ft[256]},kh=new Ko([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),$u=new Qn(0),Ph=function(n,t,e,i,o,a){var c=a.z||n.length,l=new Qn(i+c+5*(1+Math.ceil(c/7e3))+o),h=l.subarray(i,l.length-o),d=a.l,m=(a.r||0)&7;if(t){m&&(h[0]=a.r>>3);for(var _=kh[t-1],k=_>>13,p=_&8191,j=(1<<e)-1,O=a.p||new Mn(32768),M=a.h||new Mn(j+1),S=Math.ceil(e/3),V=2*S,G=function(Dt){return(n[Dt]^n[Dt+1]<<S^n[Dt+2]<<V)&j},q=new Ko(25e3),it=new Mn(288),vt=new Mn(32),dt=0,X=0,R=a.i||0,tt=0,N=a.w||0,E=0;R+2<c;++R){var z=G(R),U=R&32767,rt=M[z];if(O[U]=rt,M[z]=U,N<=R){var ot=c-R;if((dt>7e3||tt>24576)&&(ot>423||!d)){m=Tl(n,h,0,q,it,vt,X,tt,E,R-E,m),tt=dt=X=0,E=R;for(var ft=0;ft<286;++ft)it[ft]=0;for(var ft=0;ft<30;++ft)vt[ft]=0}var nt=2,ct=0,At=p,wt=U-rt&32767;if(ot>2&&z==G(R-wt))for(var x=Math.min(k,ot)-1,B=Math.min(32767,R),T=Math.min(258,ot);wt<=B&&--At&&U!=rt;){if(n[R+nt]==n[R+nt-wt]){for(var H=0;H<T&&n[R+H]==n[R+H-wt];++H);if(H>nt){if(nt=H,ct=wt,H>x)break;for(var J=Math.min(wt,H-2),Z=0,ft=0;ft<J;++ft){var at=R-wt+ft&32767,st=O[at],gt=at-st&32767;gt>Z&&(Z=gt,rt=at)}}}U=rt,rt=O[U],wt+=U-rt&32767}if(ct){q[tt++]=268435456|To[nt]<<18|Ml[ct];var _t=To[nt]&31,kt=Ml[ct]&31;X+=Xo[_t]+$o[kt],++it[257+_t],++vt[kt],N=R+nt,++dt}else q[tt++]=n[R],++it[n[R]]}}for(R=Math.max(R,N);R<c;++R)q[tt++]=n[R],++it[n[R]];m=Tl(n,h,d,q,it,vt,X,tt,E,R-E,m),d||(a.r=m&7|h[m/8|0]<<3,m-=7,a.h=M,a.p=O,a.i=R,a.w=N)}else{for(var R=a.w||0;R<c+d;R+=65535){var St=R+65535;St>=c&&(h[m/8|0]=d,St=c),m=Xu(h,m+1,n.subarray(R,St))}a.i=c}return Sh(l,0,i+Ku(m)+o)},Zu=function(){var n=1,t=0;return{p:function(e){for(var i=n,o=t,a=e.length|0,c=0;c!=a;){for(var l=Math.min(c+2655,a);c<l;++c)o+=i+=e[c];i=(i&65535)+15*(i>>16),o=(o&65535)+15*(o>>16)}n=i,t=o},d:function(){return n%=65521,t%=65521,(n&255)<<24|(n&65280)<<8|(t&255)<<8|t>>8}}},Ih=function(n,t,e,i,o){if(!o&&(o={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),c=new Qn(a.length+n.length);c.set(a),c.set(n,a.length),n=c,o.w=a.length}return Ph(n,t.level==null?6:t.level,t.mem==null?o.l?Math.ceil(Math.max(8,Math.min(13,Math.log(n.length)))*1.5):20:12+t.mem,e,i,o)},Qu=function(n,t,e){for(;e;++t)n[t]=e,e>>>=8},Ch=function(n,t){var e=t.level,i=e==0?0:e<6?1:e==9?3:2;if(n[0]=120,n[1]=i<<6|(t.dictionary&&32),n[1]|=31-(n[0]<<8|n[1])%31,t.dictionary){var o=Zu();o.p(t.dictionary),Qu(n,2,o.d())}};function Uo(n,t){t||(t={});var e=Zu();e.p(n);var i=Ih(n,t,t.dictionary?6:2,4);return Ch(i,t),Qu(i,i.length-4,e.d()),i}var Fh=typeof TextDecoder<\"u\"&&new TextDecoder,Eh=0;try{Fh.decode($u,{stream:!0}),Eh=1}catch{}function Oh(n){if(Array.isArray(n))return n}function jh(n,t){var e=n==null?null:typeof Symbol<\"u\"&&n[Symbol.iterator]||n[\"@@iterator\"];if(e!=null){var i,o,a,c,l=[],h=!0,d=!1;try{if(a=(e=e.call(n)).next,t!==0)for(;!(h=(i=a.call(e)).done)&&(l.push(i.value),l.length!==t);h=!0);}catch(m){d=!0,o=m}finally{try{if(!h&&e.return!=null&&(c=e.return(),Object(c)!==c))return}finally{if(d)throw o}}return l}}function Dl(n,t){(t==null||t>n.length)&&(t=n.length);for(var e=0,i=Array(t);e<t;e++)i[e]=n[e];return i}function Bh(n,t){if(n){if(typeof n==\"string\")return Dl(n,t);var e={}.toString.call(n).slice(8,-1);return e===\"Object\"&&n.constructor&&(e=n.constructor.name),e===\"Map\"||e===\"Set\"?Array.from(n):e===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Dl(n,t):void 0}}function Mh(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ql(n,t){return Oh(n)||jh(n,t)||Bh(n,t)||Mh()}function Ul(n,t=\"utf8\"){return new TextDecoder(t).decode(n)}const Rh=new TextEncoder;function Th(n){return Rh.encode(n)}const Dh=1024*8,qh=(()=>{const n=new Uint8Array(4),t=new Uint32Array(n.buffer);return!((t[0]=1)&n[0])})(),bo={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array};class Zo{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(t=Dh,e={}){let i=!1;typeof t==\"number\"?t=new ArrayBuffer(t):(i=!0,this.lastWrittenByte=t.byteLength);const o=e.offset?e.offset>>>0:0,a=t.byteLength-o;let c=o;(ArrayBuffer.isView(t)||t instanceof Zo)&&(t.byteLength!==t.buffer.byteLength&&(c=t.byteOffset+o),t=t.buffer),i?this.lastWrittenByte=a:this.lastWrittenByte=0,this.buffer=t,this.length=a,this.byteLength=a,this.byteOffset=c,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,c,a),this._mark=0,this._marks=[]}available(t=1){return this.offset+t<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(t=1){return this.offset+=t,this}back(t=1){return this.offset-=t,this}seek(t){return this.offset=t,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){const t=this._marks.pop();if(t===void 0)throw new Error(\"Mark stack empty\");return this.seek(t),this}rewind(){return this.offset=0,this}ensureAvailable(t=1){if(!this.available(t)){const i=(this.offset+t)*2,o=new Uint8Array(i);o.set(new Uint8Array(this.buffer)),this.buffer=o.buffer,this.length=i,this.byteLength=i,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(t=1){return this.readArray(t,\"uint8\")}readArray(t,e){const i=bo[e].BYTES_PER_ELEMENT*t,o=this.byteOffset+this.offset,a=this.buffer.slice(o,o+i);if(this.littleEndian===qh&&e!==\"uint8\"&&e!==\"int8\"){const l=new Uint8Array(this.buffer.slice(o,o+i));l.reverse();const h=new bo[e](l.buffer);return this.offset+=i,h.reverse(),h}const c=new bo[e](a);return this.offset+=i,c}readInt16(){const t=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,t}readUint16(){const t=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,t}readInt32(){const t=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,t}readUint32(){const t=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat32(){const t=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat64(){const t=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,t}readBigInt64(){const t=this._data.getBigInt64(this.offset,this.littleEndian);return this.offset+=8,t}readBigUint64(){const t=this._data.getBigUint64(this.offset,this.littleEndian);return this.offset+=8,t}readChar(){return String.fromCharCode(this.readInt8())}readChars(t=1){let e=\"\";for(let i=0;i<t;i++)e+=this.readChar();return e}readUtf8(t=1){return Ul(this.readBytes(t))}decodeText(t=1,e=\"utf8\"){return Ul(this.readBytes(t),e)}writeBoolean(t){return this.writeUint8(t?255:0),this}writeInt8(t){return this.ensureAvailable(1),this._data.setInt8(this.offset++,t),this._updateLastWrittenByte(),this}writeUint8(t){return this.ensureAvailable(1),this._data.setUint8(this.offset++,t),this._updateLastWrittenByte(),this}writeByte(t){return this.writeUint8(t)}writeBytes(t){this.ensureAvailable(t.length);for(let e=0;e<t.length;e++)this._data.setUint8(this.offset++,t[e]);return this._updateLastWrittenByte(),this}writeInt16(t){return this.ensureAvailable(2),this._data.setInt16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(t){return this.ensureAvailable(2),this._data.setUint16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(t){return this.ensureAvailable(4),this._data.setInt32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(t){return this.ensureAvailable(4),this._data.setUint32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(t){return this.ensureAvailable(4),this._data.setFloat32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(t){return this.ensureAvailable(8),this._data.setFloat64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigInt64(t){return this.ensureAvailable(8),this._data.setBigInt64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigUint64(t){return this.ensureAvailable(8),this._data.setBigUint64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(t){return this.writeUint8(t.charCodeAt(0))}writeChars(t){for(let e=0;e<t.length;e++)this.writeUint8(t.charCodeAt(e));return this}writeUtf8(t){return this.writeBytes(Th(t))}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this.lastWrittenByte)}getWrittenByteLength(){return this.lastWrittenByte-this.byteOffset}_updateLastWrittenByte(){this.offset>this.lastWrittenByte&&(this.lastWrittenByte=this.offset)}}function ra(n){let t=n.length;for(;--t>=0;)n[t]=0}const Uh=3,zh=258,tf=29,Hh=256,Wh=Hh+1+tf,ef=30,Vh=512,Gh=new Array((Wh+2)*2);ra(Gh);const Yh=new Array(ef*2);ra(Yh);const Jh=new Array(Vh);ra(Jh);const Kh=new Array(zh-Uh+1);ra(Kh);const Xh=new Array(tf);ra(Xh);const $h=new Array(ef);ra($h);const Zh=(n,t,e,i)=>{let o=n&65535|0,a=n>>>16&65535|0,c=0;for(;e!==0;){c=e>2e3?2e3:e,e-=c;do o=o+t[i++]|0,a=a+o|0;while(--c);o%=65521,a%=65521}return o|a<<16|0};var zo=Zh;const Qh=()=>{let n,t=[];for(var e=0;e<256;e++){n=e;for(var i=0;i<8;i++)n=n&1?3988292384^n>>>1:n>>>1;t[e]=n}return t},tc=new Uint32Array(Qh()),ec=(n,t,e,i)=>{const o=tc,a=i+e;n^=-1;for(let c=i;c<a;c++)n=n>>>8^o[(n^t[c])&255];return n^-1};var cr=ec,Ho={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"},nf={Z_NO_FLUSH:0,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_DEFLATED:8};const nc=(n,t)=>Object.prototype.hasOwnProperty.call(n,t);var rc=function(n){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const e=t.shift();if(e){if(typeof e!=\"object\")throw new TypeError(e+\"must be non-object\");for(const i in e)nc(e,i)&&(n[i]=e[i])}}return n},ic=n=>{let t=0;for(let i=0,o=n.length;i<o;i++)t+=n[i].length;const e=new Uint8Array(t);for(let i=0,o=0,a=n.length;i<a;i++){let c=n[i];e.set(c,o),o+=c.length}return e},rf={assign:rc,flattenChunks:ic};let af=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{af=!1}const Ba=new Uint8Array(256);for(let n=0;n<256;n++)Ba[n]=n>=252?6:n>=248?5:n>=240?4:n>=224?3:n>=192?2:1;Ba[254]=Ba[254]=1;var ac=n=>{if(typeof TextEncoder==\"function\"&&TextEncoder.prototype.encode)return new TextEncoder().encode(n);let t,e,i,o,a,c=n.length,l=0;for(o=0;o<c;o++)e=n.charCodeAt(o),(e&64512)===55296&&o+1<c&&(i=n.charCodeAt(o+1),(i&64512)===56320&&(e=65536+(e-55296<<10)+(i-56320),o++)),l+=e<128?1:e<2048?2:e<65536?3:4;for(t=new Uint8Array(l),a=0,o=0;a<l;o++)e=n.charCodeAt(o),(e&64512)===55296&&o+1<c&&(i=n.charCodeAt(o+1),(i&64512)===56320&&(e=65536+(e-55296<<10)+(i-56320),o++)),e<128?t[a++]=e:e<2048?(t[a++]=192|e>>>6,t[a++]=128|e&63):e<65536?(t[a++]=224|e>>>12,t[a++]=128|e>>>6&63,t[a++]=128|e&63):(t[a++]=240|e>>>18,t[a++]=128|e>>>12&63,t[a++]=128|e>>>6&63,t[a++]=128|e&63);return t};const sc=(n,t)=>{if(t<65534&&n.subarray&&af)return String.fromCharCode.apply(null,n.length===t?n:n.subarray(0,t));let e=\"\";for(let i=0;i<t;i++)e+=String.fromCharCode(n[i]);return e};var oc=(n,t)=>{const e=t||n.length;if(typeof TextDecoder==\"function\"&&TextDecoder.prototype.decode)return new TextDecoder().decode(n.subarray(0,t));let i,o;const a=new Array(e*2);for(o=0,i=0;i<e;){let c=n[i++];if(c<128){a[o++]=c;continue}let l=Ba[c];if(l>4){a[o++]=65533,i+=l-1;continue}for(c&=l===2?31:l===3?15:7;l>1&&i<e;)c=c<<6|n[i++]&63,l--;if(l>1){a[o++]=65533;continue}c<65536?a[o++]=c:(c-=65536,a[o++]=55296|c>>10&1023,a[o++]=56320|c&1023)}return sc(a,o)},lc=(n,t)=>{t=t||n.length,t>n.length&&(t=n.length);let e=t-1;for(;e>=0&&(n[e]&192)===128;)e--;return e<0||e===0?t:e+Ba[n[e]]>t?e:t},Wo={string2buf:ac,buf2string:oc,utf8border:lc};function uc(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}var fc=uc;const ws=16209,hc=16191;var cc=function(t,e){let i,o,a,c,l,h,d,m,_,k,p,j,O,M,S,V,G,q,it,vt,dt,X,R,tt;const N=t.state;i=t.next_in,R=t.input,o=i+(t.avail_in-5),a=t.next_out,tt=t.output,c=a-(e-t.avail_out),l=a+(t.avail_out-257),h=N.dmax,d=N.wsize,m=N.whave,_=N.wnext,k=N.window,p=N.hold,j=N.bits,O=N.lencode,M=N.distcode,S=(1<<N.lenbits)-1,V=(1<<N.distbits)-1;t:do{j<15&&(p+=R[i++]<<j,j+=8,p+=R[i++]<<j,j+=8),G=O[p&S];e:for(;;){if(q=G>>>24,p>>>=q,j-=q,q=G>>>16&255,q===0)tt[a++]=G&65535;else if(q&16){it=G&65535,q&=15,q&&(j<q&&(p+=R[i++]<<j,j+=8),it+=p&(1<<q)-1,p>>>=q,j-=q),j<15&&(p+=R[i++]<<j,j+=8,p+=R[i++]<<j,j+=8),G=M[p&V];n:for(;;){if(q=G>>>24,p>>>=q,j-=q,q=G>>>16&255,q&16){if(vt=G&65535,q&=15,j<q&&(p+=R[i++]<<j,j+=8,j<q&&(p+=R[i++]<<j,j+=8)),vt+=p&(1<<q)-1,vt>h){t.msg=\"invalid distance too far back\",N.mode=ws;break t}if(p>>>=q,j-=q,q=a-c,vt>q){if(q=vt-q,q>m&&N.sane){t.msg=\"invalid distance too far back\",N.mode=ws;break t}if(dt=0,X=k,_===0){if(dt+=d-q,q<it){it-=q;do tt[a++]=k[dt++];while(--q);dt=a-vt,X=tt}}else if(_<q){if(dt+=d+_-q,q-=_,q<it){it-=q;do tt[a++]=k[dt++];while(--q);if(dt=0,_<it){q=_,it-=q;do tt[a++]=k[dt++];while(--q);dt=a-vt,X=tt}}}else if(dt+=_-q,q<it){it-=q;do tt[a++]=k[dt++];while(--q);dt=a-vt,X=tt}for(;it>2;)tt[a++]=X[dt++],tt[a++]=X[dt++],tt[a++]=X[dt++],it-=3;it&&(tt[a++]=X[dt++],it>1&&(tt[a++]=X[dt++]))}else{dt=a-vt;do tt[a++]=tt[dt++],tt[a++]=tt[dt++],tt[a++]=tt[dt++],it-=3;while(it>2);it&&(tt[a++]=tt[dt++],it>1&&(tt[a++]=tt[dt++]))}}else if((q&64)===0){G=M[(G&65535)+(p&(1<<q)-1)];continue n}else{t.msg=\"invalid distance code\",N.mode=ws;break t}break}}else if((q&64)===0){G=O[(G&65535)+(p&(1<<q)-1)];continue e}else if(q&32){N.mode=hc;break t}else{t.msg=\"invalid literal/length code\",N.mode=ws;break t}break}}while(i<o&&a<l);it=j>>3,i-=it,j-=it<<3,p&=(1<<j)-1,t.next_in=i,t.next_out=a,t.avail_in=i<o?5+(o-i):5-(i-o),t.avail_out=a<l?257+(l-a):257-(a-l),N.hold=p,N.bits=j};const Zi=15,zl=852,Hl=592,Wl=0,wo=1,Vl=2,dc=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),pc=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),gc=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),mc=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),vc=(n,t,e,i,o,a,c,l)=>{const h=l.bits;let d=0,m=0,_=0,k=0,p=0,j=0,O=0,M=0,S=0,V=0,G,q,it,vt,dt,X=null,R;const tt=new Uint16Array(Zi+1),N=new Uint16Array(Zi+1);let E=null,z,U,rt;for(d=0;d<=Zi;d++)tt[d]=0;for(m=0;m<i;m++)tt[t[e+m]]++;for(p=h,k=Zi;k>=1&&tt[k]===0;k--);if(p>k&&(p=k),k===0)return o[a++]=1<<24|64<<16|0,o[a++]=1<<24|64<<16|0,l.bits=1,0;for(_=1;_<k&&tt[_]===0;_++);for(p<_&&(p=_),M=1,d=1;d<=Zi;d++)if(M<<=1,M-=tt[d],M<0)return-1;if(M>0&&(n===Wl||k!==1))return-1;for(N[1]=0,d=1;d<Zi;d++)N[d+1]=N[d]+tt[d];for(m=0;m<i;m++)t[e+m]!==0&&(c[N[t[e+m]]++]=m);if(n===Wl?(X=E=c,R=20):n===wo?(X=dc,E=pc,R=257):(X=gc,E=mc,R=0),V=0,m=0,d=_,dt=a,j=p,O=0,it=-1,S=1<<p,vt=S-1,n===wo&&S>zl||n===Vl&&S>Hl)return 1;for(;;){z=d-O,c[m]+1<R?(U=0,rt=c[m]):c[m]>=R?(U=E[c[m]-R],rt=X[c[m]-R]):(U=96,rt=0),G=1<<d-O,q=1<<j,_=q;do q-=G,o[dt+(V>>O)+q]=z<<24|U<<16|rt|0;while(q!==0);for(G=1<<d-1;V&G;)G>>=1;if(G!==0?(V&=G-1,V+=G):V=0,m++,--tt[d]===0){if(d===k)break;d=t[e+c[m]]}if(d>p&&(V&vt)!==it){for(O===0&&(O=p),dt+=_,j=d-O,M=1<<j;j+O<k&&(M-=tt[j+O],!(M<=0));)j++,M<<=1;if(S+=1<<j,n===wo&&S>zl||n===Vl&&S>Hl)return 1;it=V&vt,o[it]=p<<24|j<<16|dt-a|0}}return V!==0&&(o[dt+V]=d-O<<24|64<<16|0),l.bits=p,0};var Ca=vc;const bc=0,sf=1,of=2,{Z_FINISH:Gl,Z_BLOCK:wc,Z_TREES:ys,Z_OK:Si,Z_STREAM_END:yc,Z_NEED_DICT:xc,Z_STREAM_ERROR:Wn,Z_DATA_ERROR:lf,Z_MEM_ERROR:uf,Z_BUF_ERROR:_c,Z_DEFLATED:Yl}=nf,Es=16180,Jl=16181,Kl=16182,Xl=16183,$l=16184,Zl=16185,Ql=16186,tu=16187,eu=16188,nu=16189,Cs=16190,Fr=16191,yo=16192,ru=16193,xo=16194,iu=16195,au=16196,su=16197,ou=16198,xs=16199,_s=16200,lu=16201,uu=16202,fu=16203,hu=16204,cu=16205,_o=16206,du=16207,pu=16208,Be=16209,ff=16210,hf=16211,Ac=852,Nc=592,Lc=15,Sc=Lc,gu=n=>(n>>>24&255)+(n>>>8&65280)+((n&65280)<<8)+((n&255)<<24);function kc(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Pi=n=>{if(!n)return 1;const t=n.state;return!t||t.strm!==n||t.mode<Es||t.mode>hf?1:0},cf=n=>{if(Pi(n))return Wn;const t=n.state;return n.total_in=n.total_out=t.total=0,n.msg=\"\",t.wrap&&(n.adler=t.wrap&1),t.mode=Es,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(Ac),t.distcode=t.distdyn=new Int32Array(Nc),t.sane=1,t.back=-1,Si},df=n=>{if(Pi(n))return Wn;const t=n.state;return t.wsize=0,t.whave=0,t.wnext=0,cf(n)},pf=(n,t)=>{let e;if(Pi(n))return Wn;const i=n.state;return t<0?(e=0,t=-t):(e=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?Wn:(i.window!==null&&i.wbits!==t&&(i.window=null),i.wrap=e,i.wbits=t,df(n))},gf=(n,t)=>{if(!n)return Wn;const e=new kc;n.state=e,e.strm=n,e.window=null,e.mode=Es;const i=pf(n,t);return i!==Si&&(n.state=null),i},Pc=n=>gf(n,Sc);let mu=!0,Ao,No;const Ic=n=>{if(mu){Ao=new Int32Array(512),No=new Int32Array(32);let t=0;for(;t<144;)n.lens[t++]=8;for(;t<256;)n.lens[t++]=9;for(;t<280;)n.lens[t++]=7;for(;t<288;)n.lens[t++]=8;for(Ca(sf,n.lens,0,288,Ao,0,n.work,{bits:9}),t=0;t<32;)n.lens[t++]=5;Ca(of,n.lens,0,32,No,0,n.work,{bits:5}),mu=!1}n.lencode=Ao,n.lenbits=9,n.distcode=No,n.distbits=5},mf=(n,t,e,i)=>{let o;const a=n.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Uint8Array(a.wsize)),i>=a.wsize?(a.window.set(t.subarray(e-a.wsize,e),0),a.wnext=0,a.whave=a.wsize):(o=a.wsize-a.wnext,o>i&&(o=i),a.window.set(t.subarray(e-i,e-i+o),a.wnext),i-=o,i?(a.window.set(t.subarray(e-i,e),0),a.wnext=i,a.whave=a.wsize):(a.wnext+=o,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=o))),0},Cc=(n,t)=>{let e,i,o,a,c,l,h,d,m,_,k,p,j,O,M=0,S,V,G,q,it,vt,dt,X;const R=new Uint8Array(4);let tt,N;const E=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Pi(n)||!n.output||!n.input&&n.avail_in!==0)return Wn;e=n.state,e.mode===Fr&&(e.mode=yo),c=n.next_out,o=n.output,h=n.avail_out,a=n.next_in,i=n.input,l=n.avail_in,d=e.hold,m=e.bits,_=l,k=h,X=Si;t:for(;;)switch(e.mode){case Es:if(e.wrap===0){e.mode=yo;break}for(;m<16;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if(e.wrap&2&&d===35615){e.wbits===0&&(e.wbits=15),e.check=0,R[0]=d&255,R[1]=d>>>8&255,e.check=cr(e.check,R,2,0),d=0,m=0,e.mode=Jl;break}if(e.head&&(e.head.done=!1),!(e.wrap&1)||(((d&255)<<8)+(d>>8))%31){n.msg=\"incorrect header check\",e.mode=Be;break}if((d&15)!==Yl){n.msg=\"unknown compression method\",e.mode=Be;break}if(d>>>=4,m-=4,dt=(d&15)+8,e.wbits===0&&(e.wbits=dt),dt>15||dt>e.wbits){n.msg=\"invalid window size\",e.mode=Be;break}e.dmax=1<<e.wbits,e.flags=0,n.adler=e.check=1,e.mode=d&512?nu:Fr,d=0,m=0;break;case Jl:for(;m<16;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if(e.flags=d,(e.flags&255)!==Yl){n.msg=\"unknown compression method\",e.mode=Be;break}if(e.flags&57344){n.msg=\"unknown header flags set\",e.mode=Be;break}e.head&&(e.head.text=d>>8&1),e.flags&512&&e.wrap&4&&(R[0]=d&255,R[1]=d>>>8&255,e.check=cr(e.check,R,2,0)),d=0,m=0,e.mode=Kl;case Kl:for(;m<32;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}e.head&&(e.head.time=d),e.flags&512&&e.wrap&4&&(R[0]=d&255,R[1]=d>>>8&255,R[2]=d>>>16&255,R[3]=d>>>24&255,e.check=cr(e.check,R,4,0)),d=0,m=0,e.mode=Xl;case Xl:for(;m<16;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}e.head&&(e.head.xflags=d&255,e.head.os=d>>8),e.flags&512&&e.wrap&4&&(R[0]=d&255,R[1]=d>>>8&255,e.check=cr(e.check,R,2,0)),d=0,m=0,e.mode=$l;case $l:if(e.flags&1024){for(;m<16;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}e.length=d,e.head&&(e.head.extra_len=d),e.flags&512&&e.wrap&4&&(R[0]=d&255,R[1]=d>>>8&255,e.check=cr(e.check,R,2,0)),d=0,m=0}else e.head&&(e.head.extra=null);e.mode=Zl;case Zl:if(e.flags&1024&&(p=e.length,p>l&&(p=l),p&&(e.head&&(dt=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Uint8Array(e.head.extra_len)),e.head.extra.set(i.subarray(a,a+p),dt)),e.flags&512&&e.wrap&4&&(e.check=cr(e.check,i,p,a)),l-=p,a+=p,e.length-=p),e.length))break t;e.length=0,e.mode=Ql;case Ql:if(e.flags&2048){if(l===0)break t;p=0;do dt=i[a+p++],e.head&&dt&&e.length<65536&&(e.head.name+=String.fromCharCode(dt));while(dt&&p<l);if(e.flags&512&&e.wrap&4&&(e.check=cr(e.check,i,p,a)),l-=p,a+=p,dt)break t}else e.head&&(e.head.name=null);e.length=0,e.mode=tu;case tu:if(e.flags&4096){if(l===0)break t;p=0;do dt=i[a+p++],e.head&&dt&&e.length<65536&&(e.head.comment+=String.fromCharCode(dt));while(dt&&p<l);if(e.flags&512&&e.wrap&4&&(e.check=cr(e.check,i,p,a)),l-=p,a+=p,dt)break t}else e.head&&(e.head.comment=null);e.mode=eu;case eu:if(e.flags&512){for(;m<16;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if(e.wrap&4&&d!==(e.check&65535)){n.msg=\"header crc mismatch\",e.mode=Be;break}d=0,m=0}e.head&&(e.head.hcrc=e.flags>>9&1,e.head.done=!0),n.adler=e.check=0,e.mode=Fr;break;case nu:for(;m<32;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}n.adler=e.check=gu(d),d=0,m=0,e.mode=Cs;case Cs:if(e.havedict===0)return n.next_out=c,n.avail_out=h,n.next_in=a,n.avail_in=l,e.hold=d,e.bits=m,xc;n.adler=e.check=1,e.mode=Fr;case Fr:if(t===wc||t===ys)break t;case yo:if(e.last){d>>>=m&7,m-=m&7,e.mode=_o;break}for(;m<3;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}switch(e.last=d&1,d>>>=1,m-=1,d&3){case 0:e.mode=ru;break;case 1:if(Ic(e),e.mode=xs,t===ys){d>>>=2,m-=2;break t}break;case 2:e.mode=au;break;case 3:n.msg=\"invalid block type\",e.mode=Be}d>>>=2,m-=2;break;case ru:for(d>>>=m&7,m-=m&7;m<32;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if((d&65535)!==(d>>>16^65535)){n.msg=\"invalid stored block lengths\",e.mode=Be;break}if(e.length=d&65535,d=0,m=0,e.mode=xo,t===ys)break t;case xo:e.mode=iu;case iu:if(p=e.length,p){if(p>l&&(p=l),p>h&&(p=h),p===0)break t;o.set(i.subarray(a,a+p),c),l-=p,a+=p,h-=p,c+=p,e.length-=p;break}e.mode=Fr;break;case au:for(;m<14;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if(e.nlen=(d&31)+257,d>>>=5,m-=5,e.ndist=(d&31)+1,d>>>=5,m-=5,e.ncode=(d&15)+4,d>>>=4,m-=4,e.nlen>286||e.ndist>30){n.msg=\"too many length or distance symbols\",e.mode=Be;break}e.have=0,e.mode=su;case su:for(;e.have<e.ncode;){for(;m<3;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}e.lens[E[e.have++]]=d&7,d>>>=3,m-=3}for(;e.have<19;)e.lens[E[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,tt={bits:e.lenbits},X=Ca(bc,e.lens,0,19,e.lencode,0,e.work,tt),e.lenbits=tt.bits,X){n.msg=\"invalid code lengths set\",e.mode=Be;break}e.have=0,e.mode=ou;case ou:for(;e.have<e.nlen+e.ndist;){for(;M=e.lencode[d&(1<<e.lenbits)-1],S=M>>>24,V=M>>>16&255,G=M&65535,!(S<=m);){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if(G<16)d>>>=S,m-=S,e.lens[e.have++]=G;else{if(G===16){for(N=S+2;m<N;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if(d>>>=S,m-=S,e.have===0){n.msg=\"invalid bit length repeat\",e.mode=Be;break}dt=e.lens[e.have-1],p=3+(d&3),d>>>=2,m-=2}else if(G===17){for(N=S+3;m<N;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}d>>>=S,m-=S,dt=0,p=3+(d&7),d>>>=3,m-=3}else{for(N=S+7;m<N;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}d>>>=S,m-=S,dt=0,p=11+(d&127),d>>>=7,m-=7}if(e.have+p>e.nlen+e.ndist){n.msg=\"invalid bit length repeat\",e.mode=Be;break}for(;p--;)e.lens[e.have++]=dt}}if(e.mode===Be)break;if(e.lens[256]===0){n.msg=\"invalid code -- missing end-of-block\",e.mode=Be;break}if(e.lenbits=9,tt={bits:e.lenbits},X=Ca(sf,e.lens,0,e.nlen,e.lencode,0,e.work,tt),e.lenbits=tt.bits,X){n.msg=\"invalid literal/lengths set\",e.mode=Be;break}if(e.distbits=6,e.distcode=e.distdyn,tt={bits:e.distbits},X=Ca(of,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,tt),e.distbits=tt.bits,X){n.msg=\"invalid distances set\",e.mode=Be;break}if(e.mode=xs,t===ys)break t;case xs:e.mode=_s;case _s:if(l>=6&&h>=258){n.next_out=c,n.avail_out=h,n.next_in=a,n.avail_in=l,e.hold=d,e.bits=m,cc(n,k),c=n.next_out,o=n.output,h=n.avail_out,a=n.next_in,i=n.input,l=n.avail_in,d=e.hold,m=e.bits,e.mode===Fr&&(e.back=-1);break}for(e.back=0;M=e.lencode[d&(1<<e.lenbits)-1],S=M>>>24,V=M>>>16&255,G=M&65535,!(S<=m);){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if(V&&(V&240)===0){for(q=S,it=V,vt=G;M=e.lencode[vt+((d&(1<<q+it)-1)>>q)],S=M>>>24,V=M>>>16&255,G=M&65535,!(q+S<=m);){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}d>>>=q,m-=q,e.back+=q}if(d>>>=S,m-=S,e.back+=S,e.length=G,V===0){e.mode=cu;break}if(V&32){e.back=-1,e.mode=Fr;break}if(V&64){n.msg=\"invalid literal/length code\",e.mode=Be;break}e.extra=V&15,e.mode=lu;case lu:if(e.extra){for(N=e.extra;m<N;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}e.length+=d&(1<<e.extra)-1,d>>>=e.extra,m-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=uu;case uu:for(;M=e.distcode[d&(1<<e.distbits)-1],S=M>>>24,V=M>>>16&255,G=M&65535,!(S<=m);){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if((V&240)===0){for(q=S,it=V,vt=G;M=e.distcode[vt+((d&(1<<q+it)-1)>>q)],S=M>>>24,V=M>>>16&255,G=M&65535,!(q+S<=m);){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}d>>>=q,m-=q,e.back+=q}if(d>>>=S,m-=S,e.back+=S,V&64){n.msg=\"invalid distance code\",e.mode=Be;break}e.offset=G,e.extra=V&15,e.mode=fu;case fu:if(e.extra){for(N=e.extra;m<N;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}e.offset+=d&(1<<e.extra)-1,d>>>=e.extra,m-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){n.msg=\"invalid distance too far back\",e.mode=Be;break}e.mode=hu;case hu:if(h===0)break t;if(p=k-h,e.offset>p){if(p=e.offset-p,p>e.whave&&e.sane){n.msg=\"invalid distance too far back\",e.mode=Be;break}p>e.wnext?(p-=e.wnext,j=e.wsize-p):j=e.wnext-p,p>e.length&&(p=e.length),O=e.window}else O=o,j=c-e.offset,p=e.length;p>h&&(p=h),h-=p,e.length-=p;do o[c++]=O[j++];while(--p);e.length===0&&(e.mode=_s);break;case cu:if(h===0)break t;o[c++]=e.length,h--,e.mode=_s;break;case _o:if(e.wrap){for(;m<32;){if(l===0)break t;l--,d|=i[a++]<<m,m+=8}if(k-=h,n.total_out+=k,e.total+=k,e.wrap&4&&k&&(n.adler=e.check=e.flags?cr(e.check,o,k,c-k):zo(e.check,o,k,c-k)),k=h,e.wrap&4&&(e.flags?d:gu(d))!==e.check){n.msg=\"incorrect data check\",e.mode=Be;break}d=0,m=0}e.mode=du;case du:if(e.wrap&&e.flags){for(;m<32;){if(l===0)break t;l--,d+=i[a++]<<m,m+=8}if(e.wrap&4&&d!==(e.total&4294967295)){n.msg=\"incorrect length check\",e.mode=Be;break}d=0,m=0}e.mode=pu;case pu:X=yc;break t;case Be:X=lf;break t;case ff:return uf;case hf:default:return Wn}return n.next_out=c,n.avail_out=h,n.next_in=a,n.avail_in=l,e.hold=d,e.bits=m,(e.wsize||k!==n.avail_out&&e.mode<Be&&(e.mode<_o||t!==Gl))&&mf(n,n.output,n.next_out,k-n.avail_out),_-=n.avail_in,k-=n.avail_out,n.total_in+=_,n.total_out+=k,e.total+=k,e.wrap&4&&k&&(n.adler=e.check=e.flags?cr(e.check,o,k,n.next_out-k):zo(e.check,o,k,n.next_out-k)),n.data_type=e.bits+(e.last?64:0)+(e.mode===Fr?128:0)+(e.mode===xs||e.mode===xo?256:0),(_===0&&k===0||t===Gl)&&X===Si&&(X=_c),X},Fc=n=>{if(Pi(n))return Wn;let t=n.state;return t.window&&(t.window=null),n.state=null,Si},Ec=(n,t)=>{if(Pi(n))return Wn;const e=n.state;return(e.wrap&2)===0?Wn:(e.head=t,t.done=!1,Si)},Oc=(n,t)=>{const e=t.length;let i,o,a;return Pi(n)||(i=n.state,i.wrap!==0&&i.mode!==Cs)?Wn:i.mode===Cs&&(o=1,o=zo(o,t,e,0),o!==i.check)?lf:(a=mf(n,t,e,e),a?(i.mode=ff,uf):(i.havedict=1,Si))};var jc=df,Bc=pf,Mc=cf,Rc=Pc,Tc=gf,Dc=Cc,qc=Fc,Uc=Ec,zc=Oc,Hc=\"pako inflate (from Nodeca project)\",Er={inflateReset:jc,inflateReset2:Bc,inflateResetKeep:Mc,inflateInit:Rc,inflateInit2:Tc,inflate:Dc,inflateEnd:qc,inflateGetHeader:Uc,inflateSetDictionary:zc,inflateInfo:Hc};function Wc(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}var Vc=Wc;const vf=Object.prototype.toString,{Z_NO_FLUSH:Gc,Z_FINISH:Yc,Z_OK:Ma,Z_STREAM_END:Lo,Z_NEED_DICT:So,Z_STREAM_ERROR:Jc,Z_DATA_ERROR:vu,Z_MEM_ERROR:Kc}=nf;function Ta(n){this.options=rf.assign({chunkSize:1024*64,windowBits:15,to:\"\"},n||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(n&&n.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15)===0&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new fc,this.strm.avail_out=0;let e=Er.inflateInit2(this.strm,t.windowBits);if(e!==Ma)throw new Error(Ho[e]);if(this.header=new Vc,Er.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary==\"string\"?t.dictionary=Wo.string2buf(t.dictionary):vf.call(t.dictionary)===\"[object ArrayBuffer]\"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(e=Er.inflateSetDictionary(this.strm,t.dictionary),e!==Ma)))throw new Error(Ho[e])}Ta.prototype.push=function(n,t){const e=this.strm,i=this.options.chunkSize,o=this.options.dictionary;let a,c,l;if(this.ended)return!1;for(t===~~t?c=t:c=t===!0?Yc:Gc,vf.call(n)===\"[object ArrayBuffer]\"?e.input=new Uint8Array(n):e.input=n,e.next_in=0,e.avail_in=e.input.length;;){for(e.avail_out===0&&(e.output=new Uint8Array(i),e.next_out=0,e.avail_out=i),a=Er.inflate(e,c),a===So&&o&&(a=Er.inflateSetDictionary(e,o),a===Ma?a=Er.inflate(e,c):a===vu&&(a=So));e.avail_in>0&&a===Lo&&e.state.wrap>0&&n[e.next_in]!==0;)Er.inflateReset(e),a=Er.inflate(e,c);switch(a){case Jc:case vu:case So:case Kc:return this.onEnd(a),this.ended=!0,!1}if(l=e.avail_out,e.next_out&&(e.avail_out===0||a===Lo))if(this.options.to===\"string\"){let h=Wo.utf8border(e.output,e.next_out),d=e.next_out-h,m=Wo.buf2string(e.output,h);e.next_out=d,e.avail_out=i-d,d&&e.output.set(e.output.subarray(h,h+d),0),this.onData(m)}else this.onData(e.output.length===e.next_out?e.output:e.output.subarray(0,e.next_out));if(!(a===Ma&&l===0)){if(a===Lo)return a=Er.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(e.avail_in===0)break}}return!0};Ta.prototype.onData=function(n){this.chunks.push(n)};Ta.prototype.onEnd=function(n){n===Ma&&(this.options.to===\"string\"?this.result=this.chunks.join(\"\"):this.result=rf.flattenChunks(this.chunks)),this.chunks=[],this.err=n,this.msg=this.strm.msg};function Xc(n,t){const e=new Ta(t);if(e.push(n),e.err)throw e.msg||Ho[e.err];return e.result}var $c=Ta,Zc=Xc,Qc={Inflate:$c,inflate:Zc};const{Inflate:t1,inflate:e1}=Qc;var bu=t1,n1=e1;const bf=[];for(let n=0;n<256;n++){let t=n;for(let e=0;e<8;e++)t&1?t=3988292384^t>>>1:t=t>>>1;bf[n]=t}const wu=4294967295;function r1(n,t,e){let i=n;for(let o=0;o<e;o++)i=bf[(i^t[o])&255]^i>>>8;return i}function i1(n,t){return(r1(wu,n,t)^wu)>>>0}function yu(n,t,e){const i=n.readUint32(),o=i1(new Uint8Array(n.buffer,n.byteOffset+n.offset-t-4,t),t);if(o!==i)throw new Error(`CRC mismatch for chunk ${e}. Expected ${i}, found ${o}`)}function wf(n,t,e){for(let i=0;i<e;i++)t[i]=n[i]}function yf(n,t,e,i){let o=0;for(;o<i;o++)t[o]=n[o];for(;o<e;o++)t[o]=n[o]+t[o-i]&255}function xf(n,t,e,i){let o=0;if(e.length===0)for(;o<i;o++)t[o]=n[o];else for(;o<i;o++)t[o]=n[o]+e[o]&255}function _f(n,t,e,i,o){let a=0;if(e.length===0){for(;a<o;a++)t[a]=n[a];for(;a<i;a++)t[a]=n[a]+(t[a-o]>>1)&255}else{for(;a<o;a++)t[a]=n[a]+(e[a]>>1)&255;for(;a<i;a++)t[a]=n[a]+(t[a-o]+e[a]>>1)&255}}function Af(n,t,e,i,o){let a=0;if(e.length===0){for(;a<o;a++)t[a]=n[a];for(;a<i;a++)t[a]=n[a]+t[a-o]&255}else{for(;a<o;a++)t[a]=n[a]+e[a]&255;for(;a<i;a++)t[a]=n[a]+a1(t[a-o],e[a],e[a-o])&255}}function a1(n,t,e){const i=n+t-e,o=Math.abs(i-n),a=Math.abs(i-t),c=Math.abs(i-e);return o<=a&&o<=c?n:a<=c?t:e}function s1(n,t,e,i,o,a){switch(n){case 0:wf(t,e,o);break;case 1:yf(t,e,o,a);break;case 2:xf(t,e,i,o);break;case 3:_f(t,e,i,o,a);break;case 4:Af(t,e,i,o,a);break;default:throw new Error(`Unsupported filter: ${n}`)}}const o1=new Uint16Array([255]),l1=new Uint8Array(o1.buffer),u1=l1[0]===255;function f1(n){const{data:t,width:e,height:i,channels:o,depth:a}=n,c=[{x:0,y:0,xStep:8,yStep:8},{x:4,y:0,xStep:8,yStep:8},{x:0,y:4,xStep:4,yStep:8},{x:2,y:0,xStep:4,yStep:4},{x:0,y:2,xStep:2,yStep:4},{x:1,y:0,xStep:2,yStep:2},{x:0,y:1,xStep:1,yStep:2}],l=Math.ceil(a/8)*o,h=new Uint8Array(i*e*l);let d=0;for(let m=0;m<7;m++){const _=c[m],k=Math.ceil((e-_.x)/_.xStep),p=Math.ceil((i-_.y)/_.yStep);if(k<=0||p<=0)continue;const j=k*l,O=new Uint8Array(j);for(let M=0;M<p;M++){const S=t[d++],V=t.subarray(d,d+j);d+=j;const G=new Uint8Array(j);s1(S,V,G,O,j,l),O.set(G);for(let q=0;q<k;q++){const it=_.x+q*_.xStep,vt=_.y+M*_.yStep;if(!(it>=e||vt>=i))for(let dt=0;dt<l;dt++)h[(vt*e+it)*l+dt]=G[q*l+dt]}}}if(a===16){const m=new Uint16Array(h.buffer);if(u1)for(let _=0;_<m.length;_++)m[_]=h1(m[_]);return m}else return h}function h1(n){return(n&255)<<8|n>>8&255}const c1=new Uint16Array([255]),d1=new Uint8Array(c1.buffer),p1=d1[0]===255,g1=new Uint8Array(0);function xu(n){const{data:t,width:e,height:i,channels:o,depth:a}=n,c=Math.ceil(a/8)*o,l=Math.ceil(a/8*o*e),h=new Uint8Array(i*l);let d=g1,m=0,_,k;for(let p=0;p<i;p++){switch(_=t.subarray(m+1,m+1+l),k=h.subarray(p*l,(p+1)*l),t[m]){case 0:wf(_,k,l);break;case 1:yf(_,k,l,c);break;case 2:xf(_,k,d,l);break;case 3:_f(_,k,d,l,c);break;case 4:Af(_,k,d,l,c);break;default:throw new Error(`Unsupported filter: ${t[m]}`)}d=k,m+=l+1}if(a===16){const p=new Uint16Array(h.buffer);if(p1)for(let j=0;j<p.length;j++)p[j]=m1(p[j]);return p}else return h}function m1(n){return(n&255)<<8|n>>8&255}const ks=Uint8Array.of(137,80,78,71,13,10,26,10);function _u(n){if(!v1(n.readBytes(ks.length)))throw new Error(\"wrong PNG signature\")}function v1(n){if(n.length<ks.length)return!1;for(let t=0;t<ks.length;t++)if(n[t]!==ks[t])return!1;return!0}const b1=\"tEXt\",w1=0,Nf=new TextDecoder(\"latin1\");function y1(n){if(_1(n),n.length===0||n.length>79)throw new Error(\"keyword length must be between 1 and 79\")}const x1=/^[\\u0000-\\u00FF]*$/;function _1(n){if(!x1.test(n))throw new Error(\"invalid latin1 text\")}function A1(n,t,e){const i=Lf(t);n[i]=N1(t,e-i.length-1)}function Lf(n){for(n.mark();n.readByte()!==w1;);const t=n.offset;n.reset();const e=Nf.decode(n.readBytes(t-n.offset-1));return n.skip(1),y1(e),e}function N1(n,t){return Nf.decode(n.readBytes(t))}const Bn={UNKNOWN:-1,GREYSCALE:0,TRUECOLOUR:2,INDEXED_COLOUR:3,GREYSCALE_ALPHA:4,TRUECOLOUR_ALPHA:6},ko={UNKNOWN:-1,DEFLATE:0},Au={UNKNOWN:-1,ADAPTIVE:0},Po={UNKNOWN:-1,NO_INTERLACE:0,ADAM7:1},As={NONE:0,BACKGROUND:1,PREVIOUS:2},Io={SOURCE:0,OVER:1};class L1 extends Zo{_checkCrc;_inflator;_png;_apng;_end;_hasPalette;_palette;_hasTransparency;_transparency;_compressionMethod;_filterMethod;_interlaceMethod;_colorType;_isAnimated;_numberOfFrames;_numberOfPlays;_frames;_writingDataChunks;constructor(t,e={}){super(t);const{checkCrc:i=!1}=e;this._checkCrc=i,this._inflator=new bu,this._png={width:-1,height:-1,channels:-1,data:new Uint8Array(0),depth:1,text:{}},this._apng={width:-1,height:-1,channels:-1,depth:1,numberOfFrames:1,numberOfPlays:0,text:{},frames:[]},this._end=!1,this._hasPalette=!1,this._palette=[],this._hasTransparency=!1,this._transparency=new Uint16Array(0),this._compressionMethod=ko.UNKNOWN,this._filterMethod=Au.UNKNOWN,this._interlaceMethod=Po.UNKNOWN,this._colorType=Bn.UNKNOWN,this._isAnimated=!1,this._numberOfFrames=1,this._numberOfPlays=0,this._frames=[],this._writingDataChunks=!1,this.setBigEndian()}decode(){for(_u(this);!this._end;){const t=this.readUint32(),e=this.readChars(4);this.decodeChunk(t,e)}return this.decodeImage(),this._png}decodeApng(){for(_u(this);!this._end;){const t=this.readUint32(),e=this.readChars(4);this.decodeApngChunk(t,e)}return this.decodeApngImage(),this._apng}decodeChunk(t,e){const i=this.offset;switch(e){case\"IHDR\":this.decodeIHDR();break;case\"PLTE\":this.decodePLTE(t);break;case\"IDAT\":this.decodeIDAT(t);break;case\"IEND\":this._end=!0;break;case\"tRNS\":this.decodetRNS(t);break;case\"iCCP\":this.decodeiCCP(t);break;case b1:A1(this._png.text,this,t);break;case\"pHYs\":this.decodepHYs();break;default:this.skip(t);break}if(this.offset-i!==t)throw new Error(`Length mismatch while decoding chunk ${e}`);this._checkCrc?yu(this,t+4,e):this.skip(4)}decodeApngChunk(t,e){const i=this.offset;switch(e!==\"fdAT\"&&e!==\"IDAT\"&&this._writingDataChunks&&this.pushDataToFrame(),e){case\"acTL\":this.decodeACTL();break;case\"fcTL\":this.decodeFCTL();break;case\"fdAT\":this.decodeFDAT(t);break;default:this.decodeChunk(t,e),this.offset=i+t;break}if(this.offset-i!==t)throw new Error(`Length mismatch while decoding chunk ${e}`);this._checkCrc?yu(this,t+4,e):this.skip(4)}decodeIHDR(){const t=this._png;t.width=this.readUint32(),t.height=this.readUint32(),t.depth=S1(this.readUint8());const e=this.readUint8();this._colorType=e;let i;switch(e){case Bn.GREYSCALE:i=1;break;case Bn.TRUECOLOUR:i=3;break;case Bn.INDEXED_COLOUR:i=1;break;case Bn.GREYSCALE_ALPHA:i=2;break;case Bn.TRUECOLOUR_ALPHA:i=4;break;case Bn.UNKNOWN:default:throw new Error(`Unknown color type: ${e}`)}if(this._png.channels=i,this._compressionMethod=this.readUint8(),this._compressionMethod!==ko.DEFLATE)throw new Error(`Unsupported compression method: ${this._compressionMethod}`);this._filterMethod=this.readUint8(),this._interlaceMethod=this.readUint8()}decodeACTL(){this._numberOfFrames=this.readUint32(),this._numberOfPlays=this.readUint32(),this._isAnimated=!0}decodeFCTL(){const t={sequenceNumber:this.readUint32(),width:this.readUint32(),height:this.readUint32(),xOffset:this.readUint32(),yOffset:this.readUint32(),delayNumber:this.readUint16(),delayDenominator:this.readUint16(),disposeOp:this.readUint8(),blendOp:this.readUint8(),data:new Uint8Array(0)};this._frames.push(t)}decodePLTE(t){if(t%3!==0)throw new RangeError(`PLTE field length must be a multiple of 3. Got ${t}`);const e=t/3;this._hasPalette=!0;const i=[];this._palette=i;for(let o=0;o<e;o++)i.push([this.readUint8(),this.readUint8(),this.readUint8()])}decodeIDAT(t){this._writingDataChunks=!0;const e=t,i=this.offset+this.byteOffset;if(this._inflator.push(new Uint8Array(this.buffer,i,e)),this._inflator.err)throw new Error(`Error while decompressing the data: ${this._inflator.err}`);this.skip(t)}decodeFDAT(t){this._writingDataChunks=!0;let e=t,i=this.offset+this.byteOffset;if(i+=4,e-=4,this._inflator.push(new Uint8Array(this.buffer,i,e)),this._inflator.err)throw new Error(`Error while decompressing the data: ${this._inflator.err}`);this.skip(t)}decodetRNS(t){switch(this._colorType){case Bn.GREYSCALE:case Bn.TRUECOLOUR:{if(t%2!==0)throw new RangeError(`tRNS chunk length must be a multiple of 2. Got ${t}`);if(t/2>this._png.width*this._png.height)throw new Error(`tRNS chunk contains more alpha values than there are pixels (${t/2} vs ${this._png.width*this._png.height})`);this._hasTransparency=!0,this._transparency=new Uint16Array(t/2);for(let e=0;e<t/2;e++)this._transparency[e]=this.readUint16();break}case Bn.INDEXED_COLOUR:{if(t>this._palette.length)throw new Error(`tRNS chunk contains more alpha values than there are palette colors (${t} vs ${this._palette.length})`);let e=0;for(;e<t;e++){const i=this.readByte();this._palette[e].push(i)}for(;e<this._palette.length;e++)this._palette[e].push(255);break}case Bn.UNKNOWN:case Bn.GREYSCALE_ALPHA:case Bn.TRUECOLOUR_ALPHA:default:throw new Error(`tRNS chunk is not supported for color type ${this._colorType}`)}}decodeiCCP(t){const e=Lf(this),i=this.readUint8();if(i!==ko.DEFLATE)throw new Error(`Unsupported iCCP compression method: ${i}`);const o=this.readBytes(t-e.length-2);this._png.iccEmbeddedProfile={name:e,profile:n1(o)}}decodepHYs(){const t=this.readUint32(),e=this.readUint32(),i=this.readByte();this._png.resolution={x:t,y:e,unit:i}}decodeApngImage(){this._apng.width=this._png.width,this._apng.height=this._png.height,this._apng.channels=this._png.channels,this._apng.depth=this._png.depth,this._apng.numberOfFrames=this._numberOfFrames,this._apng.numberOfPlays=this._numberOfPlays,this._apng.text=this._png.text,this._apng.resolution=this._png.resolution;for(let t=0;t<this._numberOfFrames;t++){const e={sequenceNumber:this._frames[t].sequenceNumber,delayNumber:this._frames[t].delayNumber,delayDenominator:this._frames[t].delayDenominator,data:this._apng.depth===8?new Uint8Array(this._apng.width*this._apng.height*this._apng.channels):new Uint16Array(this._apng.width*this._apng.height*this._apng.channels)},i=this._frames.at(t);if(i){if(i.data=xu({data:i.data,width:i.width,height:i.height,channels:this._apng.channels,depth:this._apng.depth}),this._hasPalette&&(this._apng.palette=this._palette),this._hasTransparency&&(this._apng.transparency=this._transparency),t===0||i.xOffset===0&&i.yOffset===0&&i.width===this._png.width&&i.height===this._png.height)e.data=i.data;else{const o=this._apng.frames.at(t-1);this.disposeFrame(i,o,e),this.addFrameDataToCanvas(e,i)}this._apng.frames.push(e)}}return this._apng}disposeFrame(t,e,i){switch(t.disposeOp){case As.NONE:break;case As.BACKGROUND:for(let o=0;o<this._png.height;o++)for(let a=0;a<this._png.width;a++){const c=(o*t.width+a)*this._png.channels;for(let l=0;l<this._png.channels;l++)i.data[c+l]=0}break;case As.PREVIOUS:i.data.set(e.data);break;default:throw new Error(\"Unknown disposeOp\")}}addFrameDataToCanvas(t,e){const i=1<<this._png.depth,o=(a,c)=>{const l=((a+e.yOffset)*this._png.width+e.xOffset+c)*this._png.channels,h=(a*e.width+c)*this._png.channels;return{index:l,frameIndex:h}};switch(e.blendOp){case Io.SOURCE:for(let a=0;a<e.height;a++)for(let c=0;c<e.width;c++){const{index:l,frameIndex:h}=o(a,c);for(let d=0;d<this._png.channels;d++)t.data[l+d]=e.data[h+d]}break;case Io.OVER:for(let a=0;a<e.height;a++)for(let c=0;c<e.width;c++){const{index:l,frameIndex:h}=o(a,c);for(let d=0;d<this._png.channels;d++){const m=e.data[h+this._png.channels-1]/i,_=d%(this._png.channels-1)===0?1:e.data[h+d],k=Math.floor(m*_+(1-m)*t.data[l+d]);t.data[l+d]+=k}}break;default:throw new Error(\"Unknown blendOp\")}}decodeImage(){if(this._inflator.err)throw new Error(`Error while decompressing the data: ${this._inflator.err}`);const t=this._isAnimated?(this._frames?.at(0)).data:this._inflator.result;if(this._filterMethod!==Au.ADAPTIVE)throw new Error(`Filter method ${this._filterMethod} not supported`);if(this._interlaceMethod===Po.NO_INTERLACE)this._png.data=xu({data:t,width:this._png.width,height:this._png.height,channels:this._png.channels,depth:this._png.depth});else if(this._interlaceMethod===Po.ADAM7)this._png.data=f1({data:t,width:this._png.width,height:this._png.height,channels:this._png.channels,depth:this._png.depth});else throw new Error(`Interlace method ${this._interlaceMethod} not supported`);this._hasPalette&&(this._png.palette=this._palette),this._hasTransparency&&(this._png.transparency=this._transparency)}pushDataToFrame(){const t=this._inflator.result,e=this._frames.at(-1);e?e.data=t:this._frames.push({sequenceNumber:0,width:this._png.width,height:this._png.height,xOffset:0,yOffset:0,delayNumber:0,delayDenominator:0,disposeOp:As.NONE,blendOp:Io.SOURCE,data:t}),this._inflator=new bu,this._writingDataChunks=!1}}function S1(n){if(n!==1&&n!==2&&n!==4&&n!==8&&n!==16)throw new Error(`invalid bit depth: ${n}`);return n}var Nu;(function(n){n[n.UNKNOWN=0]=\"UNKNOWN\",n[n.METRE=1]=\"METRE\"})(Nu||(Nu={}));function k1(n,t){return new L1(n,t).decode()}var Kt=(function(){return typeof window<\"u\"?window:typeof global<\"u\"?global:typeof self<\"u\"?self:this})();function Co(){Kt.console&&typeof Kt.console.log==\"function\"&&Kt.console.log.apply(Kt.console,arguments)}var Le={log:Co,warn:function(n){Kt.console&&(typeof Kt.console.warn==\"function\"?Kt.console.warn.apply(Kt.console,arguments):Co.call(null,arguments))},error:function(n){Kt.console&&(typeof Kt.console.error==\"function\"?Kt.console.error.apply(Kt.console,arguments):Co(n))}};function Fo(n,t,e){var i=new XMLHttpRequest;i.open(\"GET\",n),i.responseType=\"blob\",i.onload=function(){wi(i.response,t,e)},i.onerror=function(){Le.error(\"could not download file\")},i.send()}function Lu(n){var t=new XMLHttpRequest;t.open(\"HEAD\",n,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function Ns(n){try{n.dispatchEvent(new MouseEvent(\"click\"))}catch{var t=document.createEvent(\"MouseEvents\");t.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),n.dispatchEvent(t)}}var wi=Kt.saveAs||((typeof window>\"u\"?\"undefined\":xe(window))!==\"object\"||window!==Kt?function(){}:typeof HTMLAnchorElement<\"u\"&&\"download\"in HTMLAnchorElement.prototype?function(n,t,e){var i=Kt.URL||Kt.webkitURL,o=document.createElement(\"a\");t=t||n.name||\"download\",o.download=t,o.rel=\"noopener\",typeof n==\"string\"?(o.href=n,o.origin!==location.origin?Lu(o.href)?Fo(n,t,e):Ns(o,o.target=\"_blank\"):Ns(o)):(o.href=i.createObjectURL(n),setTimeout(function(){i.revokeObjectURL(o.href)},4e4),setTimeout(function(){Ns(o)},0))}:\"msSaveOrOpenBlob\"in navigator?function(n,t,e){if(t=t||n.name||\"download\",typeof n==\"string\")if(Lu(n))Fo(n,t,e);else{var i=document.createElement(\"a\");i.href=n,i.target=\"_blank\",setTimeout(function(){Ns(i)})}else navigator.msSaveOrOpenBlob((function(o,a){return a===void 0?a={autoBom:!1}:xe(a)!==\"object\"&&(Le.warn(\"Deprecated: Expected third argument to be a object\"),a={autoBom:!a}),a.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(o.type)?new Blob([\"\\uFEFF\",o],{type:o.type}):o})(n,e),t)}:function(n,t,e,i){if((i=i||open(\"\",\"_blank\"))&&(i.document.title=i.document.body.innerText=\"downloading...\"),typeof n==\"string\")return Fo(n,t,e);var o=n.type===\"application/octet-stream\",a=/constructor/i.test(Kt.HTMLElement)||Kt.safari,c=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((c||o&&a)&&(typeof FileReader>\"u\"?\"undefined\":xe(FileReader))===\"object\"){var l=new FileReader;l.onloadend=function(){var m=l.result;m=c?m:m.replace(/^data:[^;]*;/,\"data:attachment/file;\"),i?i.location.href=m:location=m,i=null},l.readAsDataURL(n)}else{var h=Kt.URL||Kt.webkitURL,d=h.createObjectURL(n);i?i.location=d:location.href=d,i=null,setTimeout(function(){h.revokeObjectURL(d)},4e4)}});function Sf(n){var t;n=n||\"\",this.ok=!1,n.charAt(0)==\"#\"&&(n=n.substr(1,6)),n={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"}[n=(n=n.replace(/ /g,\"\")).toLowerCase()]||n;for(var e=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(l){return[parseInt(l[1]),parseInt(l[2]),parseInt(l[3])]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,example:[\"#00ff00\",\"336699\"],process:function(l){return[parseInt(l[1],16),parseInt(l[2],16),parseInt(l[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,example:[\"#fb0\",\"f0f\"],process:function(l){return[parseInt(l[1]+l[1],16),parseInt(l[2]+l[2],16),parseInt(l[3]+l[3],16)]}}],i=0;i<e.length;i++){var o=e[i].re,a=e[i].process,c=o.exec(n);c&&(t=a(c),this.r=t[0],this.g=t[1],this.b=t[2],this.ok=!0)}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toHex=function(){var l=this.r.toString(16),h=this.g.toString(16),d=this.b.toString(16);return l.length==1&&(l=\"0\"+l),h.length==1&&(h=\"0\"+h),d.length==1&&(d=\"0\"+d),\"#\"+l+h+d}}var Ps=Kt.atob.bind(Kt),Su=Kt.btoa.bind(Kt);function Eo(n,t){var e=n[0],i=n[1],o=n[2],a=n[3];e=gn(e,i,o,a,t[0],7,-680876936),a=gn(a,e,i,o,t[1],12,-389564586),o=gn(o,a,e,i,t[2],17,606105819),i=gn(i,o,a,e,t[3],22,-1044525330),e=gn(e,i,o,a,t[4],7,-176418897),a=gn(a,e,i,o,t[5],12,1200080426),o=gn(o,a,e,i,t[6],17,-1473231341),i=gn(i,o,a,e,t[7],22,-45705983),e=gn(e,i,o,a,t[8],7,1770035416),a=gn(a,e,i,o,t[9],12,-1958414417),o=gn(o,a,e,i,t[10],17,-42063),i=gn(i,o,a,e,t[11],22,-1990404162),e=gn(e,i,o,a,t[12],7,1804603682),a=gn(a,e,i,o,t[13],12,-40341101),o=gn(o,a,e,i,t[14],17,-1502002290),e=mn(e,i=gn(i,o,a,e,t[15],22,1236535329),o,a,t[1],5,-165796510),a=mn(a,e,i,o,t[6],9,-1069501632),o=mn(o,a,e,i,t[11],14,643717713),i=mn(i,o,a,e,t[0],20,-373897302),e=mn(e,i,o,a,t[5],5,-701558691),a=mn(a,e,i,o,t[10],9,38016083),o=mn(o,a,e,i,t[15],14,-660478335),i=mn(i,o,a,e,t[4],20,-405537848),e=mn(e,i,o,a,t[9],5,568446438),a=mn(a,e,i,o,t[14],9,-1019803690),o=mn(o,a,e,i,t[3],14,-187363961),i=mn(i,o,a,e,t[8],20,1163531501),e=mn(e,i,o,a,t[13],5,-1444681467),a=mn(a,e,i,o,t[2],9,-51403784),o=mn(o,a,e,i,t[7],14,1735328473),e=vn(e,i=mn(i,o,a,e,t[12],20,-1926607734),o,a,t[5],4,-378558),a=vn(a,e,i,o,t[8],11,-2022574463),o=vn(o,a,e,i,t[11],16,1839030562),i=vn(i,o,a,e,t[14],23,-35309556),e=vn(e,i,o,a,t[1],4,-1530992060),a=vn(a,e,i,o,t[4],11,1272893353),o=vn(o,a,e,i,t[7],16,-155497632),i=vn(i,o,a,e,t[10],23,-1094730640),e=vn(e,i,o,a,t[13],4,681279174),a=vn(a,e,i,o,t[0],11,-358537222),o=vn(o,a,e,i,t[3],16,-722521979),i=vn(i,o,a,e,t[6],23,76029189),e=vn(e,i,o,a,t[9],4,-640364487),a=vn(a,e,i,o,t[12],11,-421815835),o=vn(o,a,e,i,t[15],16,530742520),e=bn(e,i=vn(i,o,a,e,t[2],23,-995338651),o,a,t[0],6,-198630844),a=bn(a,e,i,o,t[7],10,1126891415),o=bn(o,a,e,i,t[14],15,-1416354905),i=bn(i,o,a,e,t[5],21,-57434055),e=bn(e,i,o,a,t[12],6,1700485571),a=bn(a,e,i,o,t[3],10,-1894986606),o=bn(o,a,e,i,t[10],15,-1051523),i=bn(i,o,a,e,t[1],21,-2054922799),e=bn(e,i,o,a,t[8],6,1873313359),a=bn(a,e,i,o,t[15],10,-30611744),o=bn(o,a,e,i,t[6],15,-1560198380),i=bn(i,o,a,e,t[13],21,1309151649),e=bn(e,i,o,a,t[4],6,-145523070),a=bn(a,e,i,o,t[11],10,-1120210379),o=bn(o,a,e,i,t[2],15,718787259),i=bn(i,o,a,e,t[9],21,-343485551),n[0]=$r(e,n[0]),n[1]=$r(i,n[1]),n[2]=$r(o,n[2]),n[3]=$r(a,n[3])}function Os(n,t,e,i,o,a){return t=$r($r(t,n),$r(i,a)),$r(t<<o|t>>>32-o,e)}function gn(n,t,e,i,o,a,c){return Os(t&e|~t&i,n,t,o,a,c)}function mn(n,t,e,i,o,a,c){return Os(t&i|e&~i,n,t,o,a,c)}function vn(n,t,e,i,o,a,c){return Os(t^e^i,n,t,o,a,c)}function bn(n,t,e,i,o,a,c){return Os(e^(t|~i),n,t,o,a,c)}function kf(n){var t,e=n.length,i=[1732584193,-271733879,-1732584194,271733878];for(t=64;t<=n.length;t+=64)Eo(i,P1(n.substring(t-64,t)));n=n.substring(t-64);var o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t<n.length;t++)o[t>>2]|=n.charCodeAt(t)<<(t%4<<3);if(o[t>>2]|=128<<(t%4<<3),t>55)for(Eo(i,o),t=0;t<16;t++)o[t]=0;return o[14]=8*e,Eo(i,o),i}function P1(n){var t,e=[];for(t=0;t<64;t+=4)e[t>>2]=n.charCodeAt(t)+(n.charCodeAt(t+1)<<8)+(n.charCodeAt(t+2)<<16)+(n.charCodeAt(t+3)<<24);return e}var ku=\"0123456789abcdef\".split(\"\");function I1(n){for(var t=\"\",e=0;e<4;e++)t+=ku[n>>8*e+4&15]+ku[n>>8*e&15];return t}function C1(n){return String.fromCharCode(255&n,(65280&n)>>8,(16711680&n)>>16,(4278190080&n)>>24)}function Vo(n){return kf(n).map(C1).join(\"\")}var F1=(function(n){for(var t=0;t<n.length;t++)n[t]=I1(n[t]);return n.join(\"\")})(kf(\"hello\"))!=\"5d41402abc4b2a76b9719d911017c592\";function $r(n,t){if(F1){var e=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(e>>16)<<16|65535&e}return n+t&4294967295}function Go(n,t){var e,i,o,a;if(n!==e){for(var c=(o=n,a=1+(256/n.length|0),new Array(a+1).join(o)),l=[],h=0;h<256;h++)l[h]=h;var d=0;for(h=0;h<256;h++){var m=l[h];d=(d+m+c.charCodeAt(h))%256,l[h]=l[d],l[d]=m}e=n,i=l}else l=i;var _=t.length,k=0,p=0,j=\"\";for(h=0;h<_;h++)p=(p+(m=l[k=(k+1)%256]))%256,l[k]=l[p],l[p]=m,c=l[(l[k]+l[p])%256],j+=String.fromCharCode(t.charCodeAt(h)^c);return j}var Pu={print:4,modify:8,copy:16,\"annot-forms\":32};function ea(n,t,e,i){this.v=1,this.r=2;var o=192;n.forEach(function(l){if(Pu.perm!==void 0)throw new Error(\"Invalid permission: \"+l);o+=Pu[l]}),this.padding=\"(¿N^NuAd\\0NVÿú\u0001\\b..\\0¶Ðh>/\\f©þdSiz\";var a=(t+this.padding).substr(0,32),c=(e+this.padding).substr(0,32);this.O=this.processOwnerPassword(a,c),this.P=-(1+(255^o)),this.encryptionKey=Vo(a+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(i)).substr(0,5),this.U=Go(this.encryptionKey,this.padding)}function na(n){if(/[^\\u0000-\\u00ff]/.test(n))throw new Error(\"Invalid PDF Name Object: \"+n+\", Only accept ASCII characters.\");for(var t=\"\",e=n.length,i=0;i<e;i++){var o=n.charCodeAt(i);t+=o<33||o===35||o===37||o===40||o===41||o===47||o===60||o===62||o===91||o===93||o===123||o===125||o>126?\"#\"+(\"0\"+o.toString(16)).slice(-2):n[i]}return t}function Iu(n){if(xe(n)!==\"object\")throw new Error(\"Invalid Context passed to initialize PubSub (jsPDF-module)\");var t={};this.subscribe=function(e,i,o){if(o=o||!1,typeof e!=\"string\"||typeof i!=\"function\"||typeof o!=\"boolean\")throw new Error(\"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\");t.hasOwnProperty(e)||(t[e]={});var a=Math.random().toString(35);return t[e][a]=[i,!!o],a},this.unsubscribe=function(e){for(var i in t)if(t[i][e])return delete t[i][e],Object.keys(t[i]).length===0&&delete t[i],!0;return!1},this.publish=function(e){if(t.hasOwnProperty(e)){var i=Array.prototype.slice.call(arguments,1),o=[];for(var a in t[e]){var c=t[e][a];try{c[0].apply(n,i)}catch(l){Kt.console&&Le.error(\"jsPDF PubSub Error\",l.message,l)}c[1]&&o.push(a)}o.length&&o.forEach(this.unsubscribe)}},this.getTopics=function(){return t}}function Ra(n){if(!(this instanceof Ra))return new Ra(n);var t=\"opacity,stroke-opacity\".split(\",\");for(var e in n)n.hasOwnProperty(e)&&t.indexOf(e)>=0&&(this[e]=n[e]);this.id=\"\",this.objectNumber=-1}function Pf(n,t){this.gState=n,this.matrix=t,this.id=\"\",this.objectNumber=-1}function Xr(n,t,e,i,o){if(!(this instanceof Xr))return new Xr(n,t,e,i,o);this.type=n===\"axial\"?2:3,this.coords=t,this.colors=e,Pf.call(this,i,o)}function yi(n,t,e,i,o){if(!(this instanceof yi))return new yi(n,t,e,i,o);this.boundingBox=n,this.xStep=t,this.yStep=e,this.stream=\"\",this.cloneIndex=0,Pf.call(this,i,o)}function Mt(n){var t,e=typeof arguments[0]==\"string\"?arguments[0]:\"p\",i=arguments[1],o=arguments[2],a=arguments[3],c=[],l=1,h=16,d=\"S\",m=null;xe(n=n||{})===\"object\"&&(e=n.orientation,i=n.unit||i,o=n.format||o,a=n.compress||n.compressPdf||a,(m=n.encryption||null)!==null&&(m.userPassword=m.userPassword||\"\",m.ownerPassword=m.ownerPassword||\"\",m.userPermissions=m.userPermissions||[]),l=typeof n.userUnit==\"number\"?Math.abs(n.userUnit):1,n.precision!==void 0&&(t=n.precision),n.floatPrecision!==void 0&&(h=n.floatPrecision),d=n.defaultPathOperation||\"S\"),c=n.filters||(a===!0?[\"FlateEncode\"]:c),i=i||\"mm\",e=(\"\"+(e||\"P\")).toLowerCase();var _=n.putOnlyUsedFonts||!1,k={},p={internal:{},__private__:{}};p.__private__.PubSub=Iu;var j=\"1.3\",O=p.__private__.getPdfVersion=function(){return j};p.__private__.setPdfVersion=function(u){j=u};var M={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};p.__private__.getPageFormats=function(){return M};var S=p.__private__.getPageFormat=function(u){return M[u]};o=o||\"a4\";var V=\"compat\",G=\"advanced\",q=V;function it(){this.saveGraphicsState(),P(new Gt(ne,0,0,-ne,0,si()*ne).toString()+\" cm\"),this.setFontSize(this.getFontSize()/ne),d=\"n\",q=G}function vt(){this.restoreGraphicsState(),d=\"S\",q=V}var dt=p.__private__.combineFontStyleAndFontWeight=function(u,v){if(u==\"bold\"&&v==\"normal\"||u==\"bold\"&&v==400||u==\"normal\"&&v==\"italic\"||u==\"bold\"&&v==\"italic\")throw new Error(\"Invalid Combination of fontweight and fontstyle\");return v&&(u=v==400||v===\"normal\"?u===\"italic\"?\"italic\":\"normal\":v!=700&&v!==\"bold\"||u!==\"normal\"?(v==700?\"bold\":v)+\"\"+u:\"bold\"),u};p.advancedAPI=function(u){var v=q===V;return v&&it.call(this),typeof u!=\"function\"||(u(this),v&&vt.call(this)),this},p.compatAPI=function(u){var v=q===G;return v&&vt.call(this),typeof u!=\"function\"||(u(this),v&&it.call(this)),this},p.isAdvancedAPI=function(){return q===G};var X,R=function(u){if(q!==G)throw new Error(u+\" is only available in 'advanced' API mode. You need to call advancedAPI() first.\")},tt=p.roundToPrecision=p.__private__.roundToPrecision=function(u,v){var I=t||v;if(isNaN(u)||isNaN(I))throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");return u.toFixed(I).replace(/0+$/,\"\")};X=p.hpf=p.__private__.hpf=typeof h==\"number\"?function(u){if(isNaN(u))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return tt(u,h)}:h===\"smart\"?function(u){if(isNaN(u))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return tt(u,u>-1&&u<1?16:5)}:function(u){if(isNaN(u))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return tt(u,16)};var N=p.f2=p.__private__.f2=function(u){if(isNaN(u))throw new Error(\"Invalid argument passed to jsPDF.f2\");return tt(u,2)},E=p.__private__.f3=function(u){if(isNaN(u))throw new Error(\"Invalid argument passed to jsPDF.f3\");return tt(u,3)},z=p.scale=p.__private__.scale=function(u){if(isNaN(u))throw new Error(\"Invalid argument passed to jsPDF.scale\");return q===V?u*ne:q===G?u:void 0},U=function(u){return z((function(v){return q===V?si()-v:q===G?v:void 0})(u))};p.__private__.setPrecision=p.setPrecision=function(u){typeof parseInt(u,10)==\"number\"&&(t=parseInt(u,10))};var rt,ot=\"00000000000000000000000000000000\",ft=p.__private__.getFileId=function(){return ot},nt=p.__private__.setFileId=function(u){return ot=u!==void 0&&/^[a-fA-F0-9]{32}$/.test(u)?u.toUpperCase():ot.split(\"\").map(function(){return\"ABCDEF0123456789\".charAt(Math.floor(16*Math.random()))}).join(\"\"),m!==null&&(sn=new ea(m.userPermissions,m.userPassword,m.ownerPassword,ot)),ot};p.setFileId=function(u){return nt(u),this},p.getFileId=function(){return ft()};var ct=p.__private__.convertDateToPDFDate=function(u){var v=u.getTimezoneOffset(),I=v<0?\"+\":\"-\",D=Math.floor(Math.abs(v/60)),K=Math.abs(v%60),lt=[I,T(D),\"'\",T(K),\"'\"].join(\"\");return[\"D:\",u.getFullYear(),T(u.getMonth()+1),T(u.getDate()),T(u.getHours()),T(u.getMinutes()),T(u.getSeconds()),lt].join(\"\")},At=p.__private__.convertPDFDateToDate=function(u){var v=parseInt(u.substr(2,4),10),I=parseInt(u.substr(6,2),10)-1,D=parseInt(u.substr(8,2),10),K=parseInt(u.substr(10,2),10),lt=parseInt(u.substr(12,2),10),mt=parseInt(u.substr(14,2),10);return new Date(v,I,D,K,lt,mt,0)},wt=p.__private__.setCreationDate=function(u){var v;if(u===void 0&&(u=new Date),u instanceof Date)v=ct(u);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(u))throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");v=u}return rt=v},x=p.__private__.getCreationDate=function(u){var v=rt;return u===\"jsDate\"&&(v=At(rt)),v};p.setCreationDate=function(u){return wt(u),this},p.getCreationDate=function(u){return x(u)};var B,T=p.__private__.padd2=function(u){return(\"0\"+parseInt(u)).slice(-2)},H=p.__private__.padd2Hex=function(u){return(\"00\"+(u=u.toString())).substr(u.length)},J=0,Z=[],at=[],st=0,gt=[],_t=[],kt=!1,St=at;p.__private__.setCustomOutputDestination=function(u){kt=!0,St=u};var Dt=function(u){kt||(St=u)};p.__private__.resetCustomOutputDestination=function(){kt=!1,St=at};var P=p.__private__.out=function(u){return u=u.toString(),st+=u.length+1,St.push(u),St},Lt=p.__private__.write=function(u){return P(arguments.length===1?u.toString():Array.prototype.join.call(arguments,\" \"))},ae=p.__private__.getArrayBuffer=function(u){for(var v=u.length,I=new ArrayBuffer(v),D=new Uint8Array(I);v--;)D[v]=u.charCodeAt(v);return I},Ht=[[\"Helvetica\",\"helvetica\",\"normal\",\"WinAnsiEncoding\"],[\"Helvetica-Bold\",\"helvetica\",\"bold\",\"WinAnsiEncoding\"],[\"Helvetica-Oblique\",\"helvetica\",\"italic\",\"WinAnsiEncoding\"],[\"Helvetica-BoldOblique\",\"helvetica\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Courier\",\"courier\",\"normal\",\"WinAnsiEncoding\"],[\"Courier-Bold\",\"courier\",\"bold\",\"WinAnsiEncoding\"],[\"Courier-Oblique\",\"courier\",\"italic\",\"WinAnsiEncoding\"],[\"Courier-BoldOblique\",\"courier\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Times-Roman\",\"times\",\"normal\",\"WinAnsiEncoding\"],[\"Times-Bold\",\"times\",\"bold\",\"WinAnsiEncoding\"],[\"Times-Italic\",\"times\",\"italic\",\"WinAnsiEncoding\"],[\"Times-BoldItalic\",\"times\",\"bolditalic\",\"WinAnsiEncoding\"],[\"ZapfDingbats\",\"zapfdingbats\",\"normal\",null],[\"Symbol\",\"symbol\",\"normal\",null]];p.__private__.getStandardFonts=function(){return Ht};var yt=n.fontSize||16;p.__private__.setFontSize=p.setFontSize=function(u){return yt=q===G?u/ne:u,this};var Wt,Ct=p.__private__.getFontSize=p.getFontSize=function(){return q===V?yt:yt*ne},zt=n.R2L||!1;p.__private__.setR2L=p.setR2L=function(u){return zt=u,this},p.__private__.getR2L=p.getR2L=function(){return zt};var qt,ve=p.__private__.setZoomMode=function(u){if(/^(?:\\d+\\.\\d*|\\d*\\.\\d+|\\d+)%$/.test(u))Wt=u;else if(isNaN(u)){if([void 0,null,\"fullwidth\",\"fullheight\",\"fullpage\",\"original\"].indexOf(u)===-1)throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"'+u+'\" is not recognized.');Wt=u}else Wt=parseInt(u,10)};p.__private__.getZoomMode=function(){return Wt};var ue,Zt=p.__private__.setPageMode=function(u){if([void 0,null,\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"FullScreen\"].indexOf(u)==-1)throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"'+u+'\" is not recognized.');qt=u};p.__private__.getPageMode=function(){return qt};var he=p.__private__.setLayoutMode=function(u){if([void 0,null,\"continuous\",\"single\",\"twoleft\",\"tworight\",\"two\"].indexOf(u)==-1)throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. \"'+u+'\" is not recognized.');ue=u};p.__private__.getLayoutMode=function(){return ue},p.__private__.setDisplayMode=p.setDisplayMode=function(u,v,I){return ve(u),he(v),Zt(I),this};var fe={title:\"\",subject:\"\",author:\"\",keywords:\"\",creator:\"\"};p.__private__.getDocumentProperty=function(u){if(Object.keys(fe).indexOf(u)===-1)throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");return fe[u]},p.__private__.getDocumentProperties=function(){return fe},p.__private__.setDocumentProperties=p.setProperties=p.setDocumentProperties=function(u){for(var v in fe)fe.hasOwnProperty(v)&&u[v]&&(fe[v]=u[v]);return this},p.__private__.setDocumentProperty=function(u,v){if(Object.keys(fe).indexOf(u)===-1)throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");return fe[u]=v};var Bt,ne,Tt,ze,ge,se={},oe={},Oe=[],Ut={},Se={},Yt={},Qt={},je=null,le=0,Vt=[],be=new Iu(p),ti=n.hotfixes||[],fn={},mr={},nr=[],Gt=function u(v,I,D,K,lt,mt){if(!(this instanceof u))return new u(v,I,D,K,lt,mt);isNaN(v)&&(v=1),isNaN(I)&&(I=0),isNaN(D)&&(D=0),isNaN(K)&&(K=1),isNaN(lt)&&(lt=0),isNaN(mt)&&(mt=0),this._matrix=[v,I,D,K,lt,mt]};Object.defineProperty(Gt.prototype,\"sx\",{get:function(){return this._matrix[0]},set:function(u){this._matrix[0]=u}}),Object.defineProperty(Gt.prototype,\"shy\",{get:function(){return this._matrix[1]},set:function(u){this._matrix[1]=u}}),Object.defineProperty(Gt.prototype,\"shx\",{get:function(){return this._matrix[2]},set:function(u){this._matrix[2]=u}}),Object.defineProperty(Gt.prototype,\"sy\",{get:function(){return this._matrix[3]},set:function(u){this._matrix[3]=u}}),Object.defineProperty(Gt.prototype,\"tx\",{get:function(){return this._matrix[4]},set:function(u){this._matrix[4]=u}}),Object.defineProperty(Gt.prototype,\"ty\",{get:function(){return this._matrix[5]},set:function(u){this._matrix[5]=u}}),Object.defineProperty(Gt.prototype,\"a\",{get:function(){return this._matrix[0]},set:function(u){this._matrix[0]=u}}),Object.defineProperty(Gt.prototype,\"b\",{get:function(){return this._matrix[1]},set:function(u){this._matrix[1]=u}}),Object.defineProperty(Gt.prototype,\"c\",{get:function(){return this._matrix[2]},set:function(u){this._matrix[2]=u}}),Object.defineProperty(Gt.prototype,\"d\",{get:function(){return this._matrix[3]},set:function(u){this._matrix[3]=u}}),Object.defineProperty(Gt.prototype,\"e\",{get:function(){return this._matrix[4]},set:function(u){this._matrix[4]=u}}),Object.defineProperty(Gt.prototype,\"f\",{get:function(){return this._matrix[5]},set:function(u){this._matrix[5]=u}}),Object.defineProperty(Gt.prototype,\"rotation\",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Gt.prototype,\"scaleX\",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Gt.prototype,\"scaleY\",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Gt.prototype,\"isIdentity\",{get:function(){return this.sx===1&&this.shy===0&&this.shx===0&&this.sy===1&&this.tx===0&&this.ty===0}}),Gt.prototype.join=function(u){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(X).join(u)},Gt.prototype.multiply=function(u){var v=u.sx*this.sx+u.shy*this.shx,I=u.sx*this.shy+u.shy*this.sy,D=u.shx*this.sx+u.sy*this.shx,K=u.shx*this.shy+u.sy*this.sy,lt=u.tx*this.sx+u.ty*this.shx+this.tx,mt=u.tx*this.shy+u.ty*this.sy+this.ty;return new Gt(v,I,D,K,lt,mt)},Gt.prototype.decompose=function(){var u=this.sx,v=this.shy,I=this.shx,D=this.sy,K=this.tx,lt=this.ty,mt=Math.sqrt(u*u+v*v),Et=(u/=mt)*I+(v/=mt)*D;I-=u*Et,D-=v*Et;var Ft=Math.sqrt(I*I+D*D);return Et/=Ft,u*(D/=Ft)<v*(I/=Ft)&&(u=-u,v=-v,Et=-Et,mt=-mt),{scale:new Gt(mt,0,0,Ft,0,0),translate:new Gt(1,0,0,1,K,lt),rotate:new Gt(u,v,-v,u,0,0),skew:new Gt(1,0,Et,1,0,0)}},Gt.prototype.toString=function(u){return this.join(\" \")},Gt.prototype.inversed=function(){var u=this.sx,v=this.shy,I=this.shx,D=this.sy,K=this.tx,lt=this.ty,mt=1/(u*D-v*I),Et=D*mt,Ft=-v*mt,Xt=-I*mt,te=u*mt;return new Gt(Et,Ft,Xt,te,-Et*K-Xt*lt,-Ft*K-te*lt)},Gt.prototype.applyToPoint=function(u){var v=u.x*this.sx+u.y*this.shx+this.tx,I=u.x*this.shy+u.y*this.sy+this.ty;return new ai(v,I)},Gt.prototype.applyToRectangle=function(u){var v=this.applyToPoint(u),I=this.applyToPoint(new ai(u.x+u.w,u.y+u.h));return new ca(v.x,v.y,I.x-v.x,I.y-v.y)},Gt.prototype.clone=function(){var u=this.sx,v=this.shy,I=this.shx,D=this.sy,K=this.tx,lt=this.ty;return new Gt(u,v,I,D,K,lt)},p.Matrix=Gt;var vr=p.matrixMult=function(u,v){return v.multiply(u)},br=new Gt(1,0,0,1,0,0);p.unitMatrix=p.identityMatrix=br;var Rn=function(u,v){if(!Se[u]){var I=(v instanceof Xr?\"Sh\":\"P\")+(Object.keys(Ut).length+1).toString(10);v.id=I,Se[u]=I,Ut[I]=v,be.publish(\"addPattern\",v)}};p.ShadingPattern=Xr,p.TilingPattern=yi,p.addShadingPattern=function(u,v){return R(\"addShadingPattern()\"),Rn(u,v),this},p.beginTilingPattern=function(u){R(\"beginTilingPattern()\"),da(u.boundingBox[0],u.boundingBox[1],u.boundingBox[2]-u.boundingBox[0],u.boundingBox[3]-u.boundingBox[1],u.matrix)},p.endTilingPattern=function(u,v){R(\"endTilingPattern()\"),v.stream=_t[B].join(`\n`),Rn(u,v),be.publish(\"endTilingPattern\",v),nr.pop().restore()};var Tn,Te=p.__private__.newObject=function(){var u=rn();return an(u,!0),u},rn=p.__private__.newObjectDeferred=function(){return J++,Z[J]=function(){return st},J},an=function(u,v){return v=typeof v==\"boolean\"&&v,Z[u]=st,v&&P(u+\" 0 obj\"),u},ei=p.__private__.newAdditionalObject=function(){var u={objId:rn(),content:\"\"};return gt.push(u),u},Or=rn(),Vn=rn(),rr=p.__private__.decodeColorString=function(u){var v=u.split(\" \");if(v.length!==2||v[1]!==\"g\"&&v[1]!==\"G\")v.length!==5||v[4]!==\"k\"&&v[4]!==\"K\"||(v=[(1-v[0])*(1-v[3]),(1-v[1])*(1-v[3]),(1-v[2])*(1-v[3]),\"r\"]);else{var I=parseFloat(v[0]);v=[I,I,I,\"r\"]}for(var D=\"#\",K=0;K<3;K++)D+=(\"0\"+Math.floor(255*parseFloat(v[K])).toString(16)).slice(-2);return D},Gn=p.__private__.encodeColorString=function(u){var v;typeof u==\"string\"&&(u={ch1:u});var I=u.ch1,D=u.ch2,K=u.ch3,lt=u.ch4,mt=u.pdfColorType===\"draw\"?[\"G\",\"RG\",\"K\"]:[\"g\",\"rg\",\"k\"];if(typeof I==\"string\"&&I.charAt(0)!==\"#\"){var Et=new Sf(I);if(Et.ok)I=Et.toHex();else if(!/^\\d*\\.?\\d*$/.test(I))throw new Error('Invalid color \"'+I+'\" passed to jsPDF.encodeColorString.')}if(typeof I==\"string\"&&/^#[0-9A-Fa-f]{3}$/.test(I)&&(I=\"#\"+I[1]+I[1]+I[2]+I[2]+I[3]+I[3]),typeof I==\"string\"&&/^#[0-9A-Fa-f]{6}$/.test(I)){var Ft=parseInt(I.substr(1),16);I=Ft>>16&255,D=Ft>>8&255,K=255&Ft}if(D===void 0||lt===void 0&&I===D&&D===K)v=typeof I==\"string\"?I+\" \"+mt[0]:u.precision===2?N(I/255)+\" \"+mt[0]:E(I/255)+\" \"+mt[0];else if(lt===void 0||xe(lt)===\"object\"){if(lt&&!isNaN(lt.a)&&lt.a===0)return[\"1.\",\"1.\",\"1.\",mt[1]].join(\" \");v=typeof I==\"string\"?[I,D,K,mt[1]].join(\" \"):u.precision===2?[N(I/255),N(D/255),N(K/255),mt[1]].join(\" \"):[E(I/255),E(D/255),E(K/255),mt[1]].join(\" \")}else v=typeof I==\"string\"?[I,D,K,lt,mt[2]].join(\" \"):u.precision===2?[N(I),N(D),N(K),N(lt),mt[2]].join(\" \"):[E(I),E(D),E(K),E(lt),mt[2]].join(\" \");return v},Yn=p.__private__.getFilters=function(){return c},Dn=p.__private__.putStream=function(u){var v=(u=u||{}).data||\"\",I=u.filters||Yn(),D=u.alreadyAppliedFilters||[],K=u.addLength1||!1,lt=v.length,mt=u.objectId,Et=function(Ce){return Ce};if(m!==null&&mt===void 0)throw new Error(\"ObjectId must be passed to putStream for file encryption\");m!==null&&(Et=sn.encryptor(mt,0));var Ft={};I===!0&&(I=[\"FlateEncode\"]);var Xt=u.additionalKeyValues||[],te=(Ft=Mt.API.processDataByFilters!==void 0?Mt.API.processDataByFilters(v,I):{data:v,reverseChain:[]}).reverseChain+(Array.isArray(D)?D.join(\" \"):D.toString());if(Ft.data.length!==0&&(Xt.push({key:\"Length\",value:Ft.data.length}),K===!0&&Xt.push({key:\"Length1\",value:lt})),te.length!=0)if(te.split(\"/\").length-1==1)Xt.push({key:\"Filter\",value:te});else{Xt.push({key:\"Filter\",value:\"[\"+te+\"]\"});for(var de=0;de<Xt.length;de+=1)if(Xt[de].key===\"DecodeParms\"){for(var Xe=[],Ae=0;Ae<Ft.reverseChain.split(\"/\").length-1;Ae+=1)Xe.push(\"null\");Xe.push(Xt[de].value),Xt[de].value=\"[\"+Xe.join(\" \")+\"]\"}}P(\"<<\");for(var _e=0;_e<Xt.length;_e++)P(\"/\"+Xt[_e].key+\" \"+Xt[_e].value);P(\">>\"),Ft.data.length!==0&&(P(\"stream\"),P(Et(Ft.data)),P(\"endstream\"))},ni=p.__private__.putPage=function(u){var v=u.number,I=u.data,D=u.objId,K=u.contentsObjId;an(D,!0),P(\"<</Type /Page\"),P(\"/Parent \"+u.rootDictionaryObjId+\" 0 R\"),P(\"/Resources \"+u.resourceDictionaryObjId+\" 0 R\"),P(\"/MediaBox [\"+parseFloat(X(u.mediaBox.bottomLeftX))+\" \"+parseFloat(X(u.mediaBox.bottomLeftY))+\" \"+X(u.mediaBox.topRightX)+\" \"+X(u.mediaBox.topRightY)+\"]\"),u.cropBox!==null&&P(\"/CropBox [\"+X(u.cropBox.bottomLeftX)+\" \"+X(u.cropBox.bottomLeftY)+\" \"+X(u.cropBox.topRightX)+\" \"+X(u.cropBox.topRightY)+\"]\"),u.bleedBox!==null&&P(\"/BleedBox [\"+X(u.bleedBox.bottomLeftX)+\" \"+X(u.bleedBox.bottomLeftY)+\" \"+X(u.bleedBox.topRightX)+\" \"+X(u.bleedBox.topRightY)+\"]\"),u.trimBox!==null&&P(\"/TrimBox [\"+X(u.trimBox.bottomLeftX)+\" \"+X(u.trimBox.bottomLeftY)+\" \"+X(u.trimBox.topRightX)+\" \"+X(u.trimBox.topRightY)+\"]\"),u.artBox!==null&&P(\"/ArtBox [\"+X(u.artBox.bottomLeftX)+\" \"+X(u.artBox.bottomLeftY)+\" \"+X(u.artBox.topRightX)+\" \"+X(u.artBox.topRightY)+\"]\"),typeof u.userUnit==\"number\"&&u.userUnit!==1&&P(\"/UserUnit \"+u.userUnit),be.publish(\"putPage\",{objId:D,pageContext:Vt[v],pageNumber:v,page:I}),P(\"/Contents \"+K+\" 0 R\"),P(\">>\"),P(\"endobj\");var lt=I.join(`\n`);return q===G&&(lt+=`\nQ`),an(K,!0),Dn({data:lt,filters:Yn(),objectId:K}),P(\"endobj\"),D},ir=p.__private__.putPages=function(){var u,v,I=[];for(u=1;u<=le;u++)Vt[u].objId=rn(),Vt[u].contentsObjId=rn();for(u=1;u<=le;u++)I.push(ni({number:u,data:_t[u],objId:Vt[u].objId,contentsObjId:Vt[u].contentsObjId,mediaBox:Vt[u].mediaBox,cropBox:Vt[u].cropBox,bleedBox:Vt[u].bleedBox,trimBox:Vt[u].trimBox,artBox:Vt[u].artBox,userUnit:Vt[u].userUnit,rootDictionaryObjId:Or,resourceDictionaryObjId:Vn}));an(Or,!0),P(\"<</Type /Pages\");var D=\"/Kids [\";for(v=0;v<le;v++)D+=I[v]+\" 0 R \";P(D+\"]\"),P(\"/Count \"+le),P(\">>\"),P(\"endobj\"),be.publish(\"postPutPages\")},ri=function(u){be.publish(\"putFont\",{font:u,out:P,newObject:Te,putStream:Dn}),u.isAlreadyPutted!==!0&&(u.objectNumber=Te(),P(\"<<\"),P(\"/Type /Font\"),P(\"/BaseFont /\"+na(u.postScriptName)),P(\"/Subtype /Type1\"),typeof u.encoding==\"string\"&&P(\"/Encoding /\"+u.encoding),P(\"/FirstChar 32\"),P(\"/LastChar 255\"),P(\">>\"),P(\"endobj\"))},Ci=function(u){u.objectNumber=Te();var v=[];v.push({key:\"Type\",value:\"/XObject\"}),v.push({key:\"Subtype\",value:\"/Form\"}),v.push({key:\"BBox\",value:\"[\"+[X(u.x),X(u.y),X(u.x+u.width),X(u.y+u.height)].join(\" \")+\"]\"}),v.push({key:\"Matrix\",value:\"[\"+u.matrix.toString()+\"]\"});var I=u.pages[1].join(`\n`);Dn({data:I,additionalKeyValues:v,objectId:u.objectNumber}),P(\"endobj\")},Fi=function(u,v){v||(v=21);var I=Te(),D=(function(mt,Et){var Ft,Xt=[],te=1/(Et-1);for(Ft=0;Ft<1;Ft+=te)Xt.push(Ft);if(Xt.push(1),mt[0].offset!=0){var de={offset:0,color:mt[0].color};mt.unshift(de)}if(mt[mt.length-1].offset!=1){var Xe={offset:1,color:mt[mt.length-1].color};mt.push(Xe)}for(var Ae=\"\",_e=0,Ce=0;Ce<Xt.length;Ce++){for(Ft=Xt[Ce];Ft>mt[_e+1].offset;)_e++;var Me=mt[_e].offset,Re=(Ft-Me)/(mt[_e+1].offset-Me),hn=mt[_e].color,Nr=mt[_e+1].color;Ae+=H(Math.round((1-Re)*hn[0]+Re*Nr[0]).toString(16))+H(Math.round((1-Re)*hn[1]+Re*Nr[1]).toString(16))+H(Math.round((1-Re)*hn[2]+Re*Nr[2]).toString(16))}return Ae.trim()})(u.colors,v),K=[];K.push({key:\"FunctionType\",value:\"0\"}),K.push({key:\"Domain\",value:\"[0.0 1.0]\"}),K.push({key:\"Size\",value:\"[\"+v+\"]\"}),K.push({key:\"BitsPerSample\",value:\"8\"}),K.push({key:\"Range\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),K.push({key:\"Decode\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),Dn({data:D,additionalKeyValues:K,alreadyAppliedFilters:[\"/ASCIIHexDecode\"],objectId:I}),P(\"endobj\"),u.objectNumber=Te(),P(\"<< /ShadingType \"+u.type),P(\"/ColorSpace /DeviceRGB\");var lt=\"/Coords [\"+X(parseFloat(u.coords[0]))+\" \"+X(parseFloat(u.coords[1]))+\" \";u.type===2?lt+=X(parseFloat(u.coords[2]))+\" \"+X(parseFloat(u.coords[3])):lt+=X(parseFloat(u.coords[2]))+\" \"+X(parseFloat(u.coords[3]))+\" \"+X(parseFloat(u.coords[4]))+\" \"+X(parseFloat(u.coords[5])),P(lt+=\"]\"),u.matrix&&P(\"/Matrix [\"+u.matrix.toString()+\"]\"),P(\"/Function \"+I+\" 0 R\"),P(\"/Extend [true true]\"),P(\">>\"),P(\"endobj\")},Ei=function(u,v){var I=rn(),D=Te();v.push({resourcesOid:I,objectOid:D}),u.objectNumber=D;var K=[];K.push({key:\"Type\",value:\"/Pattern\"}),K.push({key:\"PatternType\",value:\"1\"}),K.push({key:\"PaintType\",value:\"1\"}),K.push({key:\"TilingType\",value:\"1\"}),K.push({key:\"BBox\",value:\"[\"+u.boundingBox.map(X).join(\" \")+\"]\"}),K.push({key:\"XStep\",value:X(u.xStep)}),K.push({key:\"YStep\",value:X(u.yStep)}),K.push({key:\"Resources\",value:I+\" 0 R\"}),u.matrix&&K.push({key:\"Matrix\",value:\"[\"+u.matrix.toString()+\"]\"}),Dn({data:u.stream,additionalKeyValues:K,objectId:u.objectNumber}),P(\"endobj\")},js=function(u){for(var v in u.objectNumber=Te(),P(\"<<\"),u)switch(v){case\"opacity\":P(\"/ca \"+N(u[v]));break;case\"stroke-opacity\":P(\"/CA \"+N(u[v]))}P(\">>\"),P(\"endobj\")},ia=function(u){an(u.resourcesOid,!0),P(\"<<\"),P(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\"),(function(){for(var v in P(\"/Font <<\"),se)se.hasOwnProperty(v)&&(_===!1||_===!0&&k.hasOwnProperty(v))&&P(\"/\"+v+\" \"+se[v].objectNumber+\" 0 R\");P(\">>\")})(),(function(){if(Object.keys(Ut).length>0){for(var v in P(\"/Shading <<\"),Ut)Ut.hasOwnProperty(v)&&Ut[v]instanceof Xr&&Ut[v].objectNumber>=0&&P(\"/\"+v+\" \"+Ut[v].objectNumber+\" 0 R\");be.publish(\"putShadingPatternDict\"),P(\">>\")}})(),(function(v){if(Object.keys(Ut).length>0){for(var I in P(\"/Pattern <<\"),Ut)Ut.hasOwnProperty(I)&&Ut[I]instanceof p.TilingPattern&&Ut[I].objectNumber>=0&&Ut[I].objectNumber<v&&P(\"/\"+I+\" \"+Ut[I].objectNumber+\" 0 R\");be.publish(\"putTilingPatternDict\"),P(\">>\")}})(u.objectOid),(function(){if(Object.keys(Yt).length>0){var v;for(v in P(\"/ExtGState <<\"),Yt)Yt.hasOwnProperty(v)&&Yt[v].objectNumber>=0&&P(\"/\"+v+\" \"+Yt[v].objectNumber+\" 0 R\");be.publish(\"putGStateDict\"),P(\">>\")}})(),(function(){for(var v in P(\"/XObject <<\"),fn)fn.hasOwnProperty(v)&&fn[v].objectNumber>=0&&P(\"/\"+v+\" \"+fn[v].objectNumber+\" 0 R\");be.publish(\"putXobjectDict\"),P(\">>\")})(),P(\">>\"),P(\"endobj\")},Da=function(u){oe[u.fontName]=oe[u.fontName]||{},oe[u.fontName][u.fontStyle]=u.id},qa=function(u,v,I,D,K){var lt={id:\"F\"+(Object.keys(se).length+1).toString(10),postScriptName:u,fontName:v,fontStyle:I,encoding:D,isStandardFont:K||!1,metadata:{}};return be.publish(\"addFont\",{font:lt,instance:this}),se[lt.id]=lt,Da(lt),lt.id},qn=p.__private__.pdfEscape=p.pdfEscape=function(u,v){return(function(I,D){var K,lt,mt,Et,Ft,Xt,te,de,Xe;if(mt=(D=D||{}).sourceEncoding||\"Unicode\",Ft=D.outputEncoding,(D.autoencode||Ft)&&se[Bt].metadata&&se[Bt].metadata[mt]&&se[Bt].metadata[mt].encoding&&(Et=se[Bt].metadata[mt].encoding,!Ft&&se[Bt].encoding&&(Ft=se[Bt].encoding),!Ft&&Et.codePages&&(Ft=Et.codePages[0]),typeof Ft==\"string\"&&(Ft=Et[Ft]),Ft)){for(te=!1,Xt=[],K=0,lt=I.length;K<lt;K++)(de=Ft[I.charCodeAt(K)])?Xt.push(String.fromCharCode(de)):Xt.push(I[K]),Xt[K].charCodeAt(0)>>8&&(te=!0);I=Xt.join(\"\")}for(K=I.length;te===void 0&&K!==0;)I.charCodeAt(K-1)>>8&&(te=!0),K--;if(!te)return I;for(Xt=D.noBOM?[]:[254,255],K=0,lt=I.length;K<lt;K++){if((Xe=(de=I.charCodeAt(K))>>8)>>8)throw new Error(\"Character at position \"+K+\" of string '\"+I+\"' exceeds 16bits. Cannot be encoded into UCS-2 BE\");Xt.push(Xe),Xt.push(de-(Xe<<8))}return String.fromCharCode.apply(void 0,Xt)})(u,v).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},aa=p.__private__.beginPage=function(u){_t[++le]=[],Vt[le]={objId:0,contentsObjId:0,userUnit:Number(l),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(u[0]),topRightY:Number(u[1])}},za(le),Dt(_t[B])},Ua=function(u,v){var I,D,K;switch(e=v||e,typeof u==\"string\"&&(I=S(u.toLowerCase()),Array.isArray(I)&&(D=I[0],K=I[1])),Array.isArray(u)&&(D=u[0]*ne,K=u[1]*ne),isNaN(D)&&(D=o[0],K=o[1]),(D>14400||K>14400)&&(Le.warn(\"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400\"),D=Math.min(14400,D),K=Math.min(14400,K)),o=[D,K],e.substr(0,1)){case\"l\":K>D&&(o=[K,D]);break;case\"p\":D>K&&(o=[K,D])}aa(o),Ws(Jt),P(Ti),fa!==0&&P(fa+\" J\"),Mr!==0&&P(Mr+\" j\"),be.publish(\"addPage\",{pageNumber:le})},sa=function(u){u>0&&u<=le&&(_t.splice(u,1),Vt.splice(u,1),le--,B>le&&(B=le),this.setPage(B))},za=function(u){u>0&&u<=le&&(B=u)},Ha=p.__private__.getNumberOfPages=p.getNumberOfPages=function(){return _t.length-1},Wa=function(u,v,I){var D,K=void 0;return I=I||{},u=u!==void 0?u:se[Bt].fontName,v=v!==void 0?v:se[Bt].fontStyle,D=u.toLowerCase(),oe[D]!==void 0&&oe[D][v]!==void 0?K=oe[D][v]:oe[u]!==void 0&&oe[u][v]!==void 0?K=oe[u][v]:I.disableWarning===!1&&Le.warn(\"Unable to look up font label for font '\"+u+\"', '\"+v+\"'. Refer to getFontList() for available fonts.\"),K||I.noFallback||(K=oe.times[v])==null&&(K=oe.times.normal),K},ar=p.__private__.putInfo=function(){var u=Te(),v=function(D){return D};for(var I in m!==null&&(v=sn.encryptor(u,0)),P(\"<<\"),P(\"/Producer (\"+qn(v(\"jsPDF \"+Mt.version))+\")\"),fe)fe.hasOwnProperty(I)&&fe[I]&&P(\"/\"+I.substr(0,1).toUpperCase()+I.substr(1)+\" (\"+qn(v(fe[I]))+\")\");P(\"/CreationDate (\"+qn(v(rt))+\")\"),P(\">>\"),P(\"endobj\")},Oi=p.__private__.putCatalog=function(u){var v=(u=u||{}).rootDictionaryObjId||Or;switch(Te(),P(\"<<\"),P(\"/Type /Catalog\"),P(\"/Pages \"+v+\" 0 R\"),Wt||(Wt=\"fullwidth\"),Wt){case\"fullwidth\":P(\"/OpenAction [3 0 R /FitH null]\");break;case\"fullheight\":P(\"/OpenAction [3 0 R /FitV null]\");break;case\"fullpage\":P(\"/OpenAction [3 0 R /Fit]\");break;case\"original\":P(\"/OpenAction [3 0 R /XYZ null null 1]\");break;default:var I=\"\"+Wt;I.substr(I.length-1)===\"%\"&&(Wt=parseInt(Wt)/100),typeof Wt==\"number\"&&P(\"/OpenAction [3 0 R /XYZ null null \"+N(Wt)+\"]\")}switch(ue||(ue=\"continuous\"),ue){case\"continuous\":P(\"/PageLayout /OneColumn\");break;case\"single\":P(\"/PageLayout /SinglePage\");break;case\"two\":case\"twoleft\":P(\"/PageLayout /TwoColumnLeft\");break;case\"tworight\":P(\"/PageLayout /TwoColumnRight\")}qt&&P(\"/PageMode /\"+qt),be.publish(\"putCatalog\"),P(\">>\"),P(\"endobj\")},Bs=p.__private__.putTrailer=function(){P(\"trailer\"),P(\"<<\"),P(\"/Size \"+(J+1)),P(\"/Root \"+J+\" 0 R\"),P(\"/Info \"+(J-1)+\" 0 R\"),m!==null&&P(\"/Encrypt \"+sn.oid+\" 0 R\"),P(\"/ID [ <\"+ot+\"> <\"+ot+\"> ]\"),P(\">>\")},Ke=p.__private__.putHeader=function(){P(\"%PDF-\"+j),P(\"%ºß¬à\")},Va=p.__private__.putXRef=function(){var u=\"0000000000\";P(\"xref\"),P(\"0 \"+(J+1)),P(\"0000000000 65535 f \");for(var v=1;v<=J;v++)typeof Z[v]==\"function\"?P((u+Z[v]()).slice(-10)+\" 00000 n \"):Z[v]!==void 0?P((u+Z[v]).slice(-10)+\" 00000 n \"):P(\"0000000000 00000 n \")},sr=p.__private__.buildDocument=function(){var u;J=0,st=0,at=[],Z=[],gt=[],Or=rn(),Vn=rn(),Dt(at),be.publish(\"buildDocument\"),Ke(),ir(),(function(){be.publish(\"putAdditionalObjects\");for(var I=0;I<gt.length;I++){var D=gt[I];an(D.objId,!0),P(D.content),P(\"endobj\")}be.publish(\"postPutAdditionalObjects\")})(),u=[],(function(){for(var I in se)se.hasOwnProperty(I)&&(_===!1||_===!0&&k.hasOwnProperty(I))&&ri(se[I])})(),(function(){var I;for(I in Yt)Yt.hasOwnProperty(I)&&js(Yt[I])})(),(function(){for(var I in fn)fn.hasOwnProperty(I)&&Ci(fn[I])})(),(function(I){var D;for(D in Ut)Ut.hasOwnProperty(D)&&(Ut[D]instanceof Xr?Fi(Ut[D]):Ut[D]instanceof yi&&Ei(Ut[D],I))})(u),be.publish(\"putResources\"),u.forEach(ia),ia({resourcesOid:Vn,objectOid:Number.MAX_SAFE_INTEGER}),be.publish(\"postPutResources\"),m!==null&&(sn.oid=Te(),P(\"<<\"),P(\"/Filter /Standard\"),P(\"/V \"+sn.v),P(\"/R \"+sn.r),P(\"/U <\"+sn.toHexString(sn.U)+\">\"),P(\"/O <\"+sn.toHexString(sn.O)+\">\"),P(\"/P \"+sn.P),P(\">>\"),P(\"endobj\")),ar(),Oi();var v=st;return Va(),Bs(),P(\"startxref\"),P(\"\"+v),P(\"%%EOF\"),Dt(_t[B]),at.join(`\n`)},ji=p.__private__.getBlob=function(u){return new Blob([ae(u)],{type:\"application/pdf\"})},oa=function(u){for(;u.firstChild;)u.removeChild(u.firstChild)},Pn=function(u){var v,I=u.document,D=I.documentElement,K=I.head,lt=I.body;return K||(K=I.createElement(\"head\"),D.appendChild(K)),lt||(lt=I.createElement(\"body\"),D.appendChild(lt)),oa(K),oa(lt),(v=I.createElement(\"style\")).appendChild(I.createTextNode(\"html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}\")),K.appendChild(v),{document:I,body:lt}},Bi=p.output=p.__private__.output=(Tn=function(u,v){switch(typeof(v=v||{})==\"string\"?v={filename:v}:v.filename=v.filename||\"generated.pdf\",u){case void 0:return sr();case\"save\":p.save(v.filename);break;case\"arraybuffer\":return ae(sr());case\"blob\":return ji(sr());case\"bloburi\":case\"bloburl\":if(Kt.URL!==void 0&&typeof Kt.URL.createObjectURL==\"function\")return Kt.URL&&Kt.URL.createObjectURL(ji(sr()))||void 0;Le.warn(\"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\");break;case\"datauristring\":case\"dataurlstring\":var I=\"\",D=sr();try{I=Su(D)}catch{I=Su(unescape(encodeURIComponent(D)))}return\"data:application/pdf;filename=\"+encodeURIComponent(v.filename)+\";base64,\"+I;case\"pdfobjectnewwindow\":if(Object.prototype.toString.call(Kt)===\"[object Window]\"){var K=\"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js\",lt=!v.pdfObjectUrl;lt||(K=v.pdfObjectUrl);var mt=Kt.open();if(mt!==null){var Et=Pn(mt),Ft=Et.document.createElement(\"script\"),Xt=this;Ft.src=K,lt&&(Ft.integrity=\"sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==\",Ft.crossOrigin=\"anonymous\"),Ft.onload=function(){mt.PDFObject.embed(Xt.output(\"dataurlstring\"),v)},Et.body.appendChild(Ft)}return mt}throw new Error(\"The option pdfobjectnewwindow just works in a browser-environment.\");case\"pdfjsnewwindow\":if(Object.prototype.toString.call(Kt)===\"[object Window]\"){var te=v.pdfJsUrl||\"examples/PDF.js/web/viewer.html\",de=Kt.open();if(de!==null){var Xe=Pn(de),Ae=Xe.document.createElement(\"iframe\"),_e=te.indexOf(\"?\")===-1?\"?\":\"&\";Xt=this,Ae.id=\"pdfViewer\",Ae.width=\"500px\",Ae.height=\"400px\",Ae.src=te+_e+\"file=&downloadName=\"+encodeURIComponent(v.filename),Ae.onload=function(){de.document.title=v.filename,Ae.contentWindow.PDFViewerApplication.open(Xt.output(\"bloburl\"))},Xe.body.appendChild(Ae)}return de}throw new Error(\"The option pdfjsnewwindow just works in a browser-environment.\");case\"dataurlnewwindow\":if(Object.prototype.toString.call(Kt)!==\"[object Window]\")throw new Error(\"The option dataurlnewwindow just works in a browser-environment.\");var Ce=Kt.open();if(Ce!==null){var Me=Pn(Ce),Re=Me.document.createElement(\"iframe\");Re.src=this.output(\"datauristring\",v),Me.body.appendChild(Re),Ce.document.title=v.filename}if(Ce||typeof safari>\"u\")return Ce;break;case\"datauri\":case\"dataurl\":return Kt.document.location.href=this.output(\"datauristring\",v);default:return null}},Tn.foo=function(){try{return Tn.apply(this,arguments)}catch(I){var u=I.stack||\"\";~u.indexOf(\" at \")&&(u=u.split(\" at \")[1]);var v=\"Error in function \"+u.split(`\n`)[0].split(\"<\")[0]+\": \"+I.message;if(!Kt.console)throw new Error(v);Kt.console.error(v,I),Kt.alert&&alert(v)}},Tn.foo.bar=Tn,Tn.foo),wr=function(u){return Array.isArray(ti)===!0&&ti.indexOf(u)>-1};switch(i){case\"pt\":ne=1;break;case\"mm\":ne=72/25.4;break;case\"cm\":ne=72/2.54;break;case\"in\":ne=72;break;case\"px\":ne=wr(\"px_scaling\")==1?.75:96/72;break;case\"pc\":case\"em\":ne=12;break;case\"ex\":ne=6;break;default:if(typeof i!=\"number\")throw new Error(\"Invalid unit: \"+i);ne=i}var sn=null;wt(),nt();var Ga=p.__private__.getPageInfo=p.getPageInfo=function(u){if(isNaN(u)||u%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");return{objId:Vt[u].objId,pageNumber:u,pageContext:Vt[u]}},Ms=p.__private__.getPageInfoByObjId=function(u){if(isNaN(u)||u%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");for(var v in Vt)if(Vt[v].objId===u)break;return Ga(v)},Rs=p.__private__.getCurrentPageInfo=p.getCurrentPageInfo=function(){return{objId:Vt[B].objId,pageNumber:B,pageContext:Vt[B]}};p.addPage=function(){return Ua.apply(this,arguments),this},p.setPage=function(){return za.apply(this,arguments),Dt.call(this,_t[B]),this},p.insertPage=function(u){return this.addPage(),this.movePage(B,u),this},p.movePage=function(u,v){var I,D;if(u>v){I=_t[u],D=Vt[u];for(var K=u;K>v;K--)_t[K]=_t[K-1],Vt[K]=Vt[K-1];_t[v]=I,Vt[v]=D,this.setPage(v)}else if(u<v){I=_t[u],D=Vt[u];for(var lt=u;lt<v;lt++)_t[lt]=_t[lt+1],Vt[lt]=Vt[lt+1];_t[v]=I,Vt[v]=D,this.setPage(v)}return this},p.deletePage=function(){return sa.apply(this,arguments),this},p.__private__.text=p.text=function(u,v,I,D,K){var lt,mt,Et,Ft,Xt,te,de,Xe,Ae,_e=(D=D||{}).scope||this;if(typeof u==\"number\"&&typeof v==\"number\"&&(typeof I==\"string\"||Array.isArray(I))){var Ce=I;I=v,v=u,u=Ce}if(arguments[3]instanceof Gt==0?(Et=arguments[4],Ft=arguments[5],xe(de=arguments[3])===\"object\"&&de!==null||(typeof Et==\"string\"&&(Ft=Et,Et=null),typeof de==\"string\"&&(Ft=de,de=null),typeof de==\"number\"&&(Et=de,de=null),D={flags:de,angle:Et,align:Ft})):(R(\"The transform parameter of text() with a Matrix value\"),Ae=K),isNaN(v)||isNaN(I)||u==null)throw new Error(\"Invalid arguments passed to jsPDF.text\");if(u.length===0)return _e;var Me,Re=\"\",hn=typeof D.lineHeightFactor==\"number\"?D.lineHeightFactor:ii,Nr=_e.internal.scaleFactor;function pa(ke){return ke=ke.split(\"\t\").join(Array(D.TabLen||9).join(\" \")),qn(ke,de)}function oi(ke){for(var Pe,He=ke.concat(),Ze=[],Sr=He.length;Sr--;)typeof(Pe=He.shift())==\"string\"?Ze.push(Pe):Array.isArray(ke)&&(Pe.length===1||Pe[1]===void 0&&Pe[2]===void 0)?Ze.push(Pe[0]):Ze.push([Pe[0],Pe[1],Pe[2]]);return Ze}function li(ke,Pe){var He;if(typeof ke==\"string\")He=Pe(ke)[0];else if(Array.isArray(ke)){for(var Ze,Sr,ya=ke.concat(),Xi=[],ns=ya.length;ns--;)typeof(Ze=ya.shift())==\"string\"?Xi.push(Pe(Ze)[0]):Array.isArray(Ze)&&typeof Ze[0]==\"string\"&&(Sr=Pe(Ze[0],Ze[1],Ze[2]),Xi.push([Sr[0],Sr[1],Sr[2]]));He=Xi}return He}var Rr=!1,ui=!0;if(typeof u==\"string\")Rr=!0;else if(Array.isArray(u)){var zi=u.concat();mt=[];for(var Hi,cn=zi.length;cn--;)(typeof(Hi=zi.shift())!=\"string\"||Array.isArray(Hi)&&typeof Hi[0]!=\"string\")&&(ui=!1);Rr=ui}if(Rr===!1)throw new Error('Type of text must be string or Array. \"'+u+'\" is not recognized.');typeof u==\"string\"&&(u=u.match(/[\\r?\\n]/)?u.split(/\\r\\n|\\r|\\n/g):[u]);var fi=yt/_e.internal.scaleFactor,hi=fi*(hn-1);switch(D.baseline){case\"bottom\":I-=hi;break;case\"top\":I+=fi-hi;break;case\"hanging\":I+=fi-2*hi;break;case\"middle\":I+=fi/2-hi}if((te=D.maxWidth||0)>0&&(typeof u==\"string\"?u=_e.splitTextToSize(u,te):Object.prototype.toString.call(u)===\"[object Array]\"&&(u=u.reduce(function(ke,Pe){return ke.concat(_e.splitTextToSize(Pe,te))},[]))),lt={text:u,x:v,y:I,options:D,mutex:{pdfEscape:qn,activeFontKey:Bt,fonts:se,activeFontSize:yt}},be.publish(\"preProcessText\",lt),u=lt.text,Et=(D=lt.options).angle,Ae instanceof Gt==0&&Et&&typeof Et==\"number\"){Et*=Math.PI/180,D.rotationDirection===0&&(Et=-Et),q===G&&(Et=-Et);var ga=Math.cos(Et),ur=Math.sin(Et);Ae=new Gt(ga,ur,-ur,ga,0,0)}else Et&&Et instanceof Gt&&(Ae=Et);q!==G||Ae||(Ae=br),(Xt=D.charSpace||Di)!==void 0&&(Re+=X(z(Xt))+` Tc\n`,this.setCharSpace(this.getCharSpace()||0)),(Xe=D.horizontalScale)!==void 0&&(Re+=X(100*Xe)+` Tz\n`),D.lang;var wn=-1,ts=D.renderingMode!==void 0?D.renderingMode:D.stroke,Wi=_e.internal.getCurrentPageInfo().pageContext;switch(ts){case 0:case!1:case\"fill\":wn=0;break;case 1:case!0:case\"stroke\":wn=1;break;case 2:case\"fillThenStroke\":wn=2;break;case 3:case\"invisible\":wn=3;break;case 4:case\"fillAndAddForClipping\":wn=4;break;case 5:case\"strokeAndAddPathForClipping\":wn=5;break;case 6:case\"fillThenStrokeAndAddToPathForClipping\":wn=6;break;case 7:case\"addToPathForClipping\":wn=7}var es=Wi.usedRenderingMode!==void 0?Wi.usedRenderingMode:-1;wn!==-1?Re+=wn+` Tr\n`:es!==-1&&(Re+=`0 Tr\n`),wn!==-1&&(Wi.usedRenderingMode=wn),Ft=D.align||\"left\";var Un,ci=yt*hn,ma=_e.internal.pageSize.getWidth(),Vi=se[Bt];Xt=D.charSpace||Di,te=D.maxWidth||0,de=Object.assign({autoencode:!0,noBOM:!0},D.flags);var di=[],va=function(ke){return _e.getStringUnitWidth(ke,{font:Vi,charSpace:Xt,fontSize:yt,doKerning:!1})*yt/Nr};if(Object.prototype.toString.call(u)===\"[object Array]\"){var yn;mt=oi(u),Ft!==\"left\"&&(Un=mt.map(va));var Nn,Gi=0;if(Ft===\"right\"){v-=Un[0],u=[],cn=mt.length;for(var Tr=0;Tr<cn;Tr++)Tr===0?(Nn=yr(v),yn=xr(I)):(Nn=z(Gi-Un[Tr]),yn=-ci),u.push([mt[Tr],Nn,yn]),Gi=Un[Tr]}else if(Ft===\"center\"){v-=Un[0]/2,u=[],cn=mt.length;for(var Dr=0;Dr<cn;Dr++)Dr===0?(Nn=yr(v),yn=xr(I)):(Nn=z((Gi-Un[Dr])/2),yn=-ci),u.push([mt[Dr],Nn,yn]),Gi=Un[Dr]}else if(Ft===\"left\"){u=[],cn=mt.length;for(var Yi=0;Yi<cn;Yi++)u.push(mt[Yi])}else if(Ft===\"justify\"&&Vi.encoding===\"Identity-H\"){u=[],cn=mt.length,te=te!==0?te:ma;for(var pi=0,$e=0;$e<cn;$e++)if(yn=$e===0?xr(I):-ci,Nn=$e===0?yr(v):pi,$e<cn-1){var Zs=z((te-Un[$e])/(mt[$e].split(\" \").length-1)),fr=mt[$e].split(\" \");u.push([fr[0]+\" \",Nn,yn]),pi=0;for(var Jn=1;Jn<fr.length;Jn++){var gi=(va(fr[Jn-1]+\" \"+fr[Jn])-va(fr[Jn]))*Nr+Zs;Jn==fr.length-1?u.push([fr[Jn],gi,0]):u.push([fr[Jn]+\" \",gi,0]),pi-=gi}}else u.push([mt[$e],Nn,yn]);u.push([\"\",pi,0])}else{if(Ft!==\"justify\")throw new Error('Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".');for(u=[],cn=mt.length,te=te!==0?te:ma,$e=0;$e<cn;$e++){yn=$e===0?xr(I):-ci,Nn=$e===0?yr(v):0;var ba=mt[$e].split(\" \").length-1,wa=ba>0?(te-Un[$e])/ba:0;$e<cn-1?di.push(X(z(wa))):di.push(0),u.push([mt[$e],Nn,yn])}}}(typeof D.R2L==\"boolean\"?D.R2L:zt)===!0&&(u=li(u,function(ke,Pe,He){return[ke.split(\"\").reverse().join(\"\"),Pe,He]})),lt={text:u,x:v,y:I,options:D,mutex:{pdfEscape:qn,activeFontKey:Bt,fonts:se,activeFontSize:yt}},be.publish(\"postProcessText\",lt),u=lt.text,Me=lt.mutex.isHex||!1;var Ji=se[Bt].encoding;Ji!==\"WinAnsiEncoding\"&&Ji!==\"StandardEncoding\"||(u=li(u,function(ke,Pe,He){return[pa(ke),Pe,He]})),mt=oi(u),u=[];for(var mi,vi,qr,Lr=Array.isArray(mt[0])?1:0,Ur=\"\",Ki=function(ke,Pe,He){var Ze=\"\";return He instanceof Gt?(He=typeof D.angle==\"number\"?vr(He,new Gt(1,0,0,1,ke,Pe)):vr(new Gt(1,0,0,1,ke,Pe),He),q===G&&(He=vr(new Gt(1,0,0,-1,0,0),He)),Ze=He.join(\" \")+` Tm\n`):Ze=X(ke)+\" \"+X(Pe)+` Td\n`,Ze},dn=0;dn<mt.length;dn++){switch(Ur=\"\",Lr){case 1:qr=(Me?\"<\":\"(\")+mt[dn][0]+(Me?\">\":\")\"),mi=parseFloat(mt[dn][1]),vi=parseFloat(mt[dn][2]);break;case 0:qr=(Me?\"<\":\"(\")+mt[dn]+(Me?\">\":\")\"),mi=yr(v),vi=xr(I)}di!==void 0&&di[dn]!==void 0&&(Ur=di[dn]+` Tw\n`),dn===0?u.push(Ur+Ki(mi,vi,Ae)+qr):Lr===0?u.push(Ur+qr):Lr===1&&u.push(Ur+Ki(mi,vi,Ae)+qr)}u=Lr===0?u.join(` Tj\nT* `):u.join(` Tj\n`),u+=` Tj\n`;var hr=`BT\n/`;return hr+=Bt+\" \"+yt+` Tf\n`,hr+=X(yt*hn)+` TL\n`,hr+=lr+`\n`,hr+=Re,hr+=u,P(hr+=\"ET\"),k[Bt]=!0,_e};var Ts=p.__private__.clip=p.clip=function(u){return P(u===\"evenodd\"?\"W*\":\"W\"),this};p.clipEvenOdd=function(){return Ts(\"evenodd\")},p.__private__.discardPath=p.discardPath=function(){return P(\"n\"),this};var or=p.__private__.isValidStyle=function(u){var v=!1;return[void 0,null,\"S\",\"D\",\"F\",\"DF\",\"FD\",\"f\",\"f*\",\"B\",\"B*\",\"n\"].indexOf(u)!==-1&&(v=!0),v};p.__private__.setDefaultPathOperation=p.setDefaultPathOperation=function(u){return or(u)&&(d=u),this};var Ya=p.__private__.getStyle=p.getStyle=function(u){var v=d;switch(u){case\"D\":case\"S\":v=\"S\";break;case\"F\":v=\"f\";break;case\"FD\":case\"DF\":v=\"B\";break;case\"f\":case\"f*\":case\"B\":case\"B*\":v=u}return v},Mi=p.close=function(){return P(\"h\"),this};p.stroke=function(){return P(\"S\"),this},p.fill=function(u){return Ri(\"f\",u),this},p.fillEvenOdd=function(u){return Ri(\"f*\",u),this},p.fillStroke=function(u){return Ri(\"B\",u),this},p.fillStrokeEvenOdd=function(u){return Ri(\"B*\",u),this};var Ri=function(u,v){xe(v)===\"object\"?qs(v,u):P(u)},la=function(u){u===null||q===G&&u===void 0||(u=Ya(u),P(u))};function Ds(u,v,I,D,K){var lt=new yi(v||this.boundingBox,I||this.xStep,D||this.yStep,this.gState,K||this.matrix);lt.stream=this.stream;var mt=u+\"$$\"+this.cloneIndex+++\"$$\";return Rn(mt,lt),lt}var qs=function(u,v){var I=Se[u.key],D=Ut[I];if(D instanceof Xr)P(\"q\"),P(Us(v)),D.gState&&p.setGState(D.gState),P(u.matrix.toString()+\" cm\"),P(\"/\"+I+\" sh\"),P(\"Q\");else if(D instanceof yi){var K=new Gt(1,0,0,-1,0,si());u.matrix&&(K=K.multiply(u.matrix||br),I=Ds.call(D,u.key,u.boundingBox,u.xStep,u.yStep,K).id),P(\"q\"),P(\"/Pattern cs\"),P(\"/\"+I+\" scn\"),D.gState&&p.setGState(D.gState),P(v),P(\"Q\")}},Us=function(u){switch(u){case\"f\":case\"F\":case\"n\":return\"W n\";case\"f*\":return\"W* n\";case\"B\":case\"S\":return\"W S\";case\"B*\":return\"W* S\"}},jr=p.moveTo=function(u,v){return P(X(z(u))+\" \"+X(U(v))+\" m\"),this},Ja=p.lineTo=function(u,v){return P(X(z(u))+\" \"+X(U(v))+\" l\"),this},Br=p.curveTo=function(u,v,I,D,K,lt){return P([X(z(u)),X(U(v)),X(z(I)),X(U(D)),X(z(K)),X(U(lt)),\"c\"].join(\" \")),this};p.__private__.line=p.line=function(u,v,I,D,K){if(isNaN(u)||isNaN(v)||isNaN(I)||isNaN(D)||!or(K))throw new Error(\"Invalid arguments passed to jsPDF.line\");return q===V?this.lines([[I-u,D-v]],u,v,[1,1],K||\"S\"):this.lines([[I-u,D-v]],u,v,[1,1]).stroke()},p.__private__.lines=p.lines=function(u,v,I,D,K,lt){var mt,Et,Ft,Xt,te,de,Xe,Ae,_e,Ce,Me,Re;if(typeof u==\"number\"&&(Re=I,I=v,v=u,u=Re),D=D||[1,1],lt=lt||!1,isNaN(v)||isNaN(I)||!Array.isArray(u)||!Array.isArray(D)||!or(K)||typeof lt!=\"boolean\")throw new Error(\"Invalid arguments passed to jsPDF.lines\");for(jr(v,I),mt=D[0],Et=D[1],Xt=u.length,Ce=v,Me=I,Ft=0;Ft<Xt;Ft++)(te=u[Ft]).length===2?(Ce=te[0]*mt+Ce,Me=te[1]*Et+Me,Ja(Ce,Me)):(de=te[0]*mt+Ce,Xe=te[1]*Et+Me,Ae=te[2]*mt+Ce,_e=te[3]*Et+Me,Ce=te[4]*mt+Ce,Me=te[5]*Et+Me,Br(de,Xe,Ae,_e,Ce,Me));return lt&&Mi(),la(K),this},p.path=function(u){for(var v=0;v<u.length;v++){var I=u[v],D=I.c;switch(I.op){case\"m\":jr(D[0],D[1]);break;case\"l\":Ja(D[0],D[1]);break;case\"c\":Br.apply(this,D);break;case\"h\":Mi()}}return this},p.__private__.rect=p.rect=function(u,v,I,D,K){if(isNaN(u)||isNaN(v)||isNaN(I)||isNaN(D)||!or(K))throw new Error(\"Invalid arguments passed to jsPDF.rect\");return q===V&&(D=-D),P([X(z(u)),X(U(v)),X(z(I)),X(z(D)),\"re\"].join(\" \")),la(K),this},p.__private__.triangle=p.triangle=function(u,v,I,D,K,lt,mt){if(isNaN(u)||isNaN(v)||isNaN(I)||isNaN(D)||isNaN(K)||isNaN(lt)||!or(mt))throw new Error(\"Invalid arguments passed to jsPDF.triangle\");return this.lines([[I-u,D-v],[K-I,lt-D],[u-K,v-lt]],u,v,[1,1],mt,!0),this},p.__private__.roundedRect=p.roundedRect=function(u,v,I,D,K,lt,mt){if(isNaN(u)||isNaN(v)||isNaN(I)||isNaN(D)||isNaN(K)||isNaN(lt)||!or(mt))throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");var Et=4/3*(Math.SQRT2-1);return K=Math.min(K,.5*I),lt=Math.min(lt,.5*D),this.lines([[I-2*K,0],[K*Et,0,K,lt-lt*Et,K,lt],[0,D-2*lt],[0,lt*Et,-K*Et,lt,-K,lt],[2*K-I,0],[-K*Et,0,-K,-lt*Et,-K,-lt],[0,2*lt-D],[0,-lt*Et,K*Et,-lt,K,-lt]],u+K,v,[1,1],mt,!0),this},p.__private__.ellipse=p.ellipse=function(u,v,I,D,K){if(isNaN(u)||isNaN(v)||isNaN(I)||isNaN(D)||!or(K))throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");var lt=4/3*(Math.SQRT2-1)*I,mt=4/3*(Math.SQRT2-1)*D;return jr(u+I,v),Br(u+I,v-mt,u+lt,v-D,u,v-D),Br(u-lt,v-D,u-I,v-mt,u-I,v),Br(u-I,v+mt,u-lt,v+D,u,v+D),Br(u+lt,v+D,u+I,v+mt,u+I,v),la(K),this},p.__private__.circle=p.circle=function(u,v,I,D){if(isNaN(u)||isNaN(v)||isNaN(I)||!or(D))throw new Error(\"Invalid arguments passed to jsPDF.circle\");return this.ellipse(u,v,I,I,D)},p.setFont=function(u,v,I){return I&&(v=dt(v,I)),Bt=Wa(u,v,{disableWarning:!1}),this};var zs=p.__private__.getFont=p.getFont=function(){return se[Wa.apply(p,arguments)]};p.__private__.getFontList=p.getFontList=function(){var u,v,I={};for(u in oe)if(oe.hasOwnProperty(u))for(v in I[u]=[],oe[u])oe[u].hasOwnProperty(v)&&I[u].push(v);return I},p.addFont=function(u,v,I,D,K){var lt=[\"StandardEncoding\",\"MacRomanEncoding\",\"Identity-H\",\"WinAnsiEncoding\"];return arguments[3]&&lt.indexOf(arguments[3])!==-1?K=arguments[3]:arguments[3]&&lt.indexOf(arguments[3])==-1&&(I=dt(I,D)),qa.call(this,u,v,I,K=K||\"Identity-H\")};var ii,Jt=n.lineWidth||.200025,Hs=p.__private__.getLineWidth=p.getLineWidth=function(){return Jt},Ws=p.__private__.setLineWidth=p.setLineWidth=function(u){return Jt=u,P(X(z(u))+\" w\"),this};p.__private__.setLineDash=Mt.API.setLineDash=Mt.API.setLineDashPattern=function(u,v){if(u=u||[],v=v||0,isNaN(v)||!Array.isArray(u))throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");return u=u.map(function(I){return X(z(I))}).join(\" \"),v=X(z(v)),P(\"[\"+u+\"] \"+v+\" d\"),this};var Vs=p.__private__.getLineHeight=p.getLineHeight=function(){return yt*ii};p.__private__.getLineHeight=p.getLineHeight=function(){return yt*ii};var Gs=p.__private__.setLineHeightFactor=p.setLineHeightFactor=function(u){return typeof(u=u||1.15)==\"number\"&&(ii=u),this},Ys=p.__private__.getLineHeightFactor=p.getLineHeightFactor=function(){return ii};Gs(n.lineHeight);var yr=p.__private__.getHorizontalCoordinate=function(u){return z(u)},xr=p.__private__.getVerticalCoordinate=function(u){return q===G?u:Vt[B].mediaBox.topRightY-Vt[B].mediaBox.bottomLeftY-z(u)},Js=p.__private__.getHorizontalCoordinateString=p.getHorizontalCoordinateString=function(u){return X(yr(u))},Ks=p.__private__.getVerticalCoordinateString=p.getVerticalCoordinateString=function(u){return X(xr(u))},Ti=n.strokeColor||\"0 G\";p.__private__.getStrokeColor=p.getDrawColor=function(){return rr(Ti)},p.__private__.setStrokeColor=p.setDrawColor=function(u,v,I,D){return Ti=Gn({ch1:u,ch2:v,ch3:I,ch4:D,pdfColorType:\"draw\",precision:2}),P(Ti),this};var ua=n.fillColor||\"0 g\";p.__private__.getFillColor=p.getFillColor=function(){return rr(ua)},p.__private__.setFillColor=p.setFillColor=function(u,v,I,D){return ua=Gn({ch1:u,ch2:v,ch3:I,ch4:D,pdfColorType:\"fill\",precision:2}),P(ua),this};var lr=n.textColor||\"0 g\",Xs=p.__private__.getTextColor=p.getTextColor=function(){return rr(lr)};p.__private__.setTextColor=p.setTextColor=function(u,v,I,D){return lr=Gn({ch1:u,ch2:v,ch3:I,ch4:D,pdfColorType:\"text\",precision:3}),this};var Di=n.charSpace,$s=p.__private__.getCharSpace=p.getCharSpace=function(){return parseFloat(Di||0)};p.__private__.setCharSpace=p.setCharSpace=function(u){if(isNaN(u))throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");return Di=u,this};var fa=0;p.CapJoinStyles={0:0,butt:0,but:0,miter:0,1:1,round:1,rounded:1,circle:1,2:2,projecting:2,project:2,square:2,bevel:2},p.__private__.setLineCap=p.setLineCap=function(u){var v=p.CapJoinStyles[u];if(v===void 0)throw new Error(\"Line cap style of '\"+u+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return fa=v,P(v+\" J\"),this};var Mr=0;p.__private__.setLineJoin=p.setLineJoin=function(u){var v=p.CapJoinStyles[u];if(v===void 0)throw new Error(\"Line join style of '\"+u+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return Mr=v,P(v+\" j\"),this},p.__private__.setLineMiterLimit=p.__private__.setMiterLimit=p.setLineMiterLimit=p.setMiterLimit=function(u){if(u=u||0,isNaN(u))throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");return P(X(z(u))+\" M\"),this},p.GState=Ra,p.setGState=function(u){(u=typeof u==\"string\"?Yt[Qt[u]]:ha(null,u)).equals(je)||(P(\"/\"+u.id+\" gs\"),je=u)};var ha=function(u,v){if(!u||!Qt[u]){var I=!1;for(var D in Yt)if(Yt.hasOwnProperty(D)&&Yt[D].equals(v)){I=!0;break}if(I)v=Yt[D];else{var K=\"GS\"+(Object.keys(Yt).length+1).toString(10);Yt[K]=v,v.id=K}return u&&(Qt[u]=v.id),be.publish(\"addGState\",v),v}};p.addGState=function(u,v){return ha(u,v),this},p.saveGraphicsState=function(){return P(\"q\"),Oe.push({key:Bt,size:yt,color:lr}),this},p.restoreGraphicsState=function(){P(\"Q\");var u=Oe.pop();return Bt=u.key,yt=u.size,lr=u.color,je=null,this},p.setCurrentTransformationMatrix=function(u){return P(u.toString()+\" cm\"),this},p.comment=function(u){return P(\"#\"+u),this};var ai=function(u,v){var I=u||0;Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return I},set:function(lt){isNaN(lt)||(I=parseFloat(lt))}});var D=v||0;Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return D},set:function(lt){isNaN(lt)||(D=parseFloat(lt))}});var K=\"pt\";return Object.defineProperty(this,\"type\",{enumerable:!0,get:function(){return K},set:function(lt){K=lt.toString()}}),this},ca=function(u,v,I,D){ai.call(this,u,v),this.type=\"rect\";var K=I||0;Object.defineProperty(this,\"w\",{enumerable:!0,get:function(){return K},set:function(mt){isNaN(mt)||(K=parseFloat(mt))}});var lt=D||0;return Object.defineProperty(this,\"h\",{enumerable:!0,get:function(){return lt},set:function(mt){isNaN(mt)||(lt=parseFloat(mt))}}),this},qi=function(){this.page=le,this.currentPage=B,this.pages=_t.slice(0),this.pagesContext=Vt.slice(0),this.x=Tt,this.y=ze,this.matrix=ge,this.width=Ka(B),this.height=Ar(B),this.outputDestination=St,this.id=\"\",this.objectNumber=-1};qi.prototype.restore=function(){le=this.page,B=this.currentPage,Vt=this.pagesContext,_t=this.pages,Tt=this.x,ze=this.y,ge=this.matrix,_r(B,this.width),Xa(B,this.height),St=this.outputDestination};var da=function(u,v,I,D,K){nr.push(new qi),le=B=0,_t=[],Tt=u,ze=v,ge=K,aa([I,D])};for(var Ui in p.beginFormObject=function(u,v,I,D,K){return da(u,v,I,D,K),this},p.endFormObject=function(u){return(function(v){if(mr[v])nr.pop().restore();else{var I=new qi,D=\"Xo\"+(Object.keys(fn).length+1).toString(10);I.id=D,mr[v]=D,fn[D]=I,be.publish(\"addFormObject\",I),nr.pop().restore()}})(u),this},p.doFormObject=function(u,v){var I=fn[mr[u]];return P(\"q\"),P(v.toString()+\" cm\"),P(\"/\"+I.id+\" Do\"),P(\"Q\"),this},p.getFormObject=function(u){var v=fn[mr[u]];return{x:v.x,y:v.y,width:v.width,height:v.height,matrix:v.matrix}},p.save=function(u,v){return u=u||\"generated.pdf\",(v=v||{}).returnPromise=v.returnPromise||!1,v.returnPromise===!1?(wi(ji(sr()),u),typeof wi.unload==\"function\"&&Kt.setTimeout&&setTimeout(wi.unload,911),this):new Promise(function(I,D){try{var K=wi(ji(sr()),u);typeof wi.unload==\"function\"&&Kt.setTimeout&&setTimeout(wi.unload,911),I(K)}catch(lt){D(lt.message)}})},Mt.API)Mt.API.hasOwnProperty(Ui)&&(Ui===\"events\"&&Mt.API.events.length?(function(u,v){var I,D,K;for(K=v.length-1;K!==-1;K--)I=v[K][0],D=v[K][1],u.subscribe.apply(u,[I].concat(typeof D==\"function\"?[D]:D))})(be,Mt.API.events):p[Ui]=Mt.API[Ui]);function Ka(u){return Vt[u].mediaBox.topRightX-Vt[u].mediaBox.bottomLeftX}function _r(u,v){Vt[u].mediaBox.topRightX=v+Vt[u].mediaBox.bottomLeftX}function Ar(u){return Vt[u].mediaBox.topRightY-Vt[u].mediaBox.bottomLeftY}function Xa(u,v){Vt[u].mediaBox.topRightY=v+Vt[u].mediaBox.bottomLeftY}var $a=p.getPageWidth=function(u){return Ka(u=u||B)/ne},Za=p.setPageWidth=function(u,v){_r(u,v*ne)},si=p.getPageHeight=function(u){return Ar(u=u||B)/ne},Qa=p.setPageHeight=function(u,v){Xa(u,v*ne)};return p.internal={pdfEscape:qn,getStyle:Ya,getFont:zs,getFontSize:Ct,getCharSpace:$s,getTextColor:Xs,getLineHeight:Vs,getLineHeightFactor:Ys,getLineWidth:Hs,write:Lt,getHorizontalCoordinate:yr,getVerticalCoordinate:xr,getCoordinateString:Js,getVerticalCoordinateString:Ks,collections:{},newObject:Te,newAdditionalObject:ei,newObjectDeferred:rn,newObjectDeferredBegin:an,getFilters:Yn,putStream:Dn,events:be,scaleFactor:ne,pageSize:{getWidth:function(){return $a(B)},setWidth:function(u){Za(B,u)},getHeight:function(){return si(B)},setHeight:function(u){Qa(B,u)}},encryptionOptions:m,encryption:sn,getEncryptor:function(u){return m!==null?sn.encryptor(u,0):function(v){return v}},output:Bi,getNumberOfPages:Ha,get pages(){return _t},out:P,f2:N,f3:E,getPageInfo:Ga,getPageInfoByObjId:Ms,getCurrentPageInfo:Rs,getPDFVersion:O,Point:ai,Rectangle:ca,Matrix:Gt,hasHotfix:wr},Object.defineProperty(p.internal.pageSize,\"width\",{get:function(){return $a(B)},set:function(u){Za(B,u)},enumerable:!0,configurable:!0}),Object.defineProperty(p.internal.pageSize,\"height\",{get:function(){return si(B)},set:function(u){Qa(B,u)},enumerable:!0,configurable:!0}),(function(u){for(var v=0,I=Ht.length;v<I;v++){var D=qa.call(this,u[v][0],u[v][1],u[v][2],Ht[v][3],!0);_===!1&&(k[D]=!0);var K=u[v][0].split(\"-\");Da({id:D,fontName:K[0],fontStyle:K[1]||\"\"})}be.publish(\"addFonts\",{fonts:se,dictionary:oe})}).call(p,Ht),Bt=\"F1\",Ua(o,e),be.publish(\"initialized\"),p}ea.prototype.lsbFirstWord=function(n){return String.fromCharCode(255&n,n>>8&255,n>>16&255,n>>24&255)},ea.prototype.toHexString=function(n){return n.split(\"\").map(function(t){return(\"0\"+(255&t.charCodeAt(0)).toString(16)).slice(-2)}).join(\"\")},ea.prototype.hexToBytes=function(n){for(var t=[],e=0;e<n.length;e+=2)t.push(String.fromCharCode(parseInt(n.substr(e,2),16)));return t.join(\"\")},ea.prototype.processOwnerPassword=function(n,t){return Go(Vo(t).substr(0,5),n)},ea.prototype.encryptor=function(n,t){var e=Vo(this.encryptionKey+String.fromCharCode(255&n,n>>8&255,n>>16&255,255&t,t>>8&255)).substr(0,10);return function(i){return Go(e,i)}},Ra.prototype.equals=function(n){var t,e=\"id,objectNumber,equals\";if(!n||xe(n)!==xe(this))return!1;var i=0;for(t in this)if(!(e.indexOf(t)>=0)){if(this.hasOwnProperty(t)&&!n.hasOwnProperty(t)||this[t]!==n[t])return!1;i++}for(t in n)n.hasOwnProperty(t)&&e.indexOf(t)<0&&i--;return i===0},Mt.API={events:[]},Mt.version=\"4.2.1\";var Ue=Mt.API,Qo=1,Ii=function(n){return n.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},Qi=function(n){return n.replace(/\\\\\\\\/g,\"\\\\\").replace(/\\\\\\(/g,\"(\").replace(/\\\\\\)/g,\")\")},ki=function(n){return n.toString().replace(/#/g,\"#23\").replace(/[\\s\\n\\r()<>[\\]{}\\/%]/g,function(t){var e=t.charCodeAt(0).toString(16).toUpperCase();return\"#\"+(e.length===1?\"0\"+e:e)})},$t=function(n){return n.toFixed(2)},Kr=function(n){return n.toFixed(5)};Ue.__acroform__={};var kn=function(n,t){n.prototype=Object.create(t.prototype),n.prototype.constructor=n},Cu=function(n){return n*Qo},dr=function(n){var t=new Cf,e=It.internal.getHeight(n)||0,i=It.internal.getWidth(n)||0;return t.BBox=[0,0,Number($t(i)),Number($t(e))],t},E1=Ue.__acroform__.setBit=function(n,t){if(n=n||0,t=t||0,isNaN(n)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBit\");return n|1<<t},O1=Ue.__acroform__.clearBit=function(n,t){if(n=n||0,t=t||0,isNaN(n)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\");return n&~(1<<t)},j1=Ue.__acroform__.getBit=function(n,t){if(isNaN(n)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBit\");return n&1<<t?1:0},Ge=Ue.__acroform__.getBitForPdf=function(n,t){if(isNaN(n)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\");return j1(n,t-1)},Ye=Ue.__acroform__.setBitForPdf=function(n,t){if(isNaN(n)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\");return E1(n,t-1)},Je=Ue.__acroform__.clearBitForPdf=function(n,t){if(isNaN(n)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\");return O1(n,t-1)},B1=Ue.__acroform__.calculateCoordinates=function(n,t){var e=t.internal.getHorizontalCoordinate,i=t.internal.getVerticalCoordinate,o=n[0],a=n[1],c=n[2],l=n[3],h={};return h.lowerLeft_X=e(o)||0,h.lowerLeft_Y=i(a+l)||0,h.upperRight_X=e(o+c)||0,h.upperRight_Y=i(a)||0,[Number($t(h.lowerLeft_X)),Number($t(h.lowerLeft_Y)),Number($t(h.upperRight_X)),Number($t(h.upperRight_Y))]},M1=function(n){if(n.appearanceStreamContent)return n.appearanceStreamContent;if(n.V||n.DV){var t=[],e=n._V||n.DV,i=Yo(n,e),o=n.scope.internal.getFont(n.fontName,n.fontStyle).id;t.push(\"/Tx BMC\"),t.push(\"q\"),t.push(\"BT\"),t.push(n.scope.__private__.encodeColorString(n.color)),t.push(\"/\"+o+\" \"+$t(i.fontSize)+\" Tf\"),t.push(\"1 0 0 1 0 0 Tm\"),t.push(i.text),t.push(\"ET\"),t.push(\"Q\"),t.push(\"EMC\");var a=dr(n);return a.scope=n.scope,a.stream=t.join(`\n`),a}},Yo=function(n,t){var e=n.fontSize===0?n.maxFontSize:n.fontSize,i={text:\"\",fontSize:\"\"},o=(t=(t=t.substr(0,1)==\"(\"?t.substr(1):t).substr(t.length-1)==\")\"?t.substr(0,t.length-1):t).split(\" \");o=n.multiline?o.map(function(N){return N.split(`\n`)}):o.map(function(N){return[N]});var a=e,c=It.internal.getHeight(n)||0;c=c<0?-c:c;var l=It.internal.getWidth(n)||0;l=l<0?-l:l;var h=function(N,E,z){if(N+1<o.length){var U=E+\" \"+o[N+1][0];return Ls(U,n,z).width<=l-4}return!1};a++;t:for(;a>0;){t=\"\",a--;var d,m,_=Ls(\"3\",n,a).height,k=n.multiline?c-a:(c-_)/2,p=k+=2,j=0,O=0,M=0;if(a<=0){t=`(...) Tj\n`,t+=\"% Width of Text: \"+Ls(t,n,a=12).width+\", FieldWidth:\"+l+`\n`;break}for(var S=\"\",V=0,G=0;G<o.length;G++)if(o.hasOwnProperty(G)){var q=!1;if(o[G].length!==1&&M!==o[G].length-1){if((_+2)*(V+2)+2>c)continue t;S+=o[G][M],q=!0,O=G,G--}else{S=(S+=o[G][M]+\" \").substr(S.length-1)==\" \"?S.substr(0,S.length-1):S;var it=parseInt(G),vt=h(it,S,a),dt=G>=o.length-1;if(vt&&!dt){S+=\" \",M=0;continue}if(vt||dt){if(dt)O=it;else if(n.multiline&&(_+2)*(V+2)+2>c)continue t}else{if(!n.multiline||(_+2)*(V+2)+2>c)continue t;O=it}}for(var X=\"\",R=j;R<=O;R++){var tt=o[R];if(n.multiline){if(R===O){X+=tt[M]+\" \",M=(M+1)%tt.length;continue}if(R===j){X+=tt[tt.length-1]+\" \";continue}}X+=tt[0]+\" \"}switch(X=X.substr(X.length-1)==\" \"?X.substr(0,X.length-1):X,m=Ls(X,n,a).width,n.textAlign){case\"right\":d=l-m-2;break;case\"center\":d=(l-m)/2;break;default:d=2}t+=$t(d)+\" \"+$t(p)+` Td\n`,t+=\"(\"+Ii(X)+`) Tj\n`,t+=-$t(d)+` 0 Td\n`,p=-(a+2),m=0,j=q?O:O+1,V++,S=\"\"}break}return i.text=t,i.fontSize=a,i},Ls=function(n,t,e){var i=t.scope.internal.getFont(t.fontName,t.fontStyle),o=t.scope.getStringUnitWidth(n,{font:i,fontSize:parseFloat(e),charSpace:0})*parseFloat(e);return{height:t.scope.getStringUnitWidth(\"3\",{font:i,fontSize:parseFloat(e),charSpace:0})*parseFloat(e)*1.5,width:o}},R1={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},T1=function(n,t){var e={type:\"reference\",object:n};t.internal.getPageInfo(n.page).pageContext.annotations.find(function(i){return i.type===e.type&&i.object===e.object})===void 0&&t.internal.getPageInfo(n.page).pageContext.annotations.push(e)},D1=function(n,t){if(t.scope=n,n.internal!==void 0&&(n.internal.acroformPlugin===void 0||n.internal.acroformPlugin.isInitialized===!1)){if(tr.FieldNum=0,n.internal.acroformPlugin=JSON.parse(JSON.stringify(R1)),n.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"Exception while creating AcroformDictionary\");Qo=n.internal.scaleFactor,n.internal.acroformPlugin.acroFormDictionaryRoot=new Ff,n.internal.acroformPlugin.acroFormDictionaryRoot.scope=n,n.internal.acroformPlugin.acroFormDictionaryRoot._eventID=n.internal.events.subscribe(\"postPutResources\",function(){(function(e){e.internal.events.unsubscribe(e.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete e.internal.acroformPlugin.acroFormDictionaryRoot._eventID,e.internal.acroformPlugin.printedOut=!0})(n)}),n.internal.events.subscribe(\"buildDocument\",function(){(function(e){e.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var i=e.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var o in i)if(i.hasOwnProperty(o)){var a=i[o];a.objId=void 0,a.hasAnnotation&&T1(a,e)}})(n)}),n.internal.events.subscribe(\"putCatalog\",function(){(function(e){if(e.internal.acroformPlugin.acroFormDictionaryRoot===void 0)throw new Error(\"putCatalogCallback: Root missing.\");e.internal.write(\"/AcroForm \"+e.internal.acroformPlugin.acroFormDictionaryRoot.objId+\" 0 R\")})(n)}),n.internal.events.subscribe(\"postPutPages\",function(e){(function(i,o){var a=!i;for(var c in i||(o.internal.newObjectDeferredBegin(o.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),o.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),i=i||o.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(i.hasOwnProperty(c)){var l=i[c],h=[],d=l.Rect;if(l.Rect&&(l.Rect=B1(l.Rect,o)),o.internal.newObjectDeferredBegin(l.objId,!0),l.DA=It.createDefaultAppearanceStream(l),xe(l)===\"object\"&&typeof l.getKeyValueListForStream==\"function\"&&(h=l.getKeyValueListForStream()),l.Rect=d,l.hasAppearanceStream&&!l.appearanceStreamContent){var m=M1(l);h.push({key:\"AP\",value:\"<</N \"+m+\">>\"}),o.internal.acroformPlugin.xForms.push(m)}if(l.appearanceStreamContent){var _=\"\";for(var k in l.appearanceStreamContent)if(l.appearanceStreamContent.hasOwnProperty(k)){var p=l.appearanceStreamContent[k];if(_+=\"/\"+k+\" \",_+=\"<<\",Object.keys(p).length>=1||Array.isArray(p)){for(var c in p)if(p.hasOwnProperty(c)){var j=p[c];typeof j==\"function\"&&(j=j.call(o,l)),_+=\"/\"+c+\" \"+j+\" \",o.internal.acroformPlugin.xForms.indexOf(j)>=0||o.internal.acroformPlugin.xForms.push(j)}}else typeof(j=p)==\"function\"&&(j=j.call(o,l)),_+=\"/\"+c+\" \"+j,o.internal.acroformPlugin.xForms.indexOf(j)>=0||o.internal.acroformPlugin.xForms.push(j);_+=\">>\"}h.push({key:\"AP\",value:`<<\n`+_+\">>\"})}o.internal.putStream({additionalKeyValues:h,objectId:l.objId}),o.internal.out(\"endobj\")}a&&(function(O,M){for(var S in O)if(O.hasOwnProperty(S)){var V=S,G=O[S];M.internal.newObjectDeferredBegin(G.objId,!0),xe(G)===\"object\"&&typeof G.putStream==\"function\"&&G.putStream(),delete O[V]}})(o.internal.acroformPlugin.xForms,o)})(e,n)}),n.internal.acroformPlugin.isInitialized=!0}},If=Ue.__acroform__.arrayToPdfArray=function(n,t,e){var i=function(c){return c};if(Array.isArray(n)){for(var o=\"[\",a=0;a<n.length;a++)switch(a!==0&&(o+=\" \"),xe(n[a])){case\"boolean\":case\"number\":case\"object\":o+=n[a].toString();break;case\"string\":n[a].substr(0,1)===\"/\"?o+=\"/\"+ki(n[a].substr(1)):(t!==void 0&&e&&(i=e.internal.getEncryptor(t)),o+=\"(\"+Ii(i(n[a].toString()))+\")\")}return o+\"]\"}throw new Error(\"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\")},Oo=function(n,t,e){var i=function(o){return o};return t!==void 0&&e&&(i=e.internal.getEncryptor(t)),(n=n||\"\").toString(),\"(\"+Ii(i(n))+\")\"},pr=function(){this._objId=void 0,this._scope=void 0,Object.defineProperty(this,\"objId\",{get:function(){if(this._objId===void 0){if(this.scope===void 0)return;this._objId=this.scope.internal.newObjectDeferred()}return this._objId},set:function(n){this._objId=n}}),Object.defineProperty(this,\"scope\",{value:this._scope,writable:!0})};pr.prototype.toString=function(){return this.objId+\" 0 R\"},pr.prototype.putStream=function(){var n=this.getKeyValueListForStream();this.scope.internal.putStream({data:this.stream,additionalKeyValues:n,objectId:this.objId}),this.scope.internal.out(\"endobj\")},pr.prototype.getKeyValueListForStream=function(){var n=[],t=Object.getOwnPropertyNames(this).filter(function(a){return a!=\"content\"&&a!=\"appearanceStreamContent\"&&a!=\"scope\"&&a!=\"objId\"&&a.substring(0,1)!=\"_\"});for(var e in t)if(Object.getOwnPropertyDescriptor(this,t[e]).configurable===!1){var i=t[e],o=this[i];o&&(Array.isArray(o)?n.push({key:i,value:If(o,this.objId,this.scope)}):o instanceof pr?(o.scope=this.scope,n.push({key:i,value:o.objId+\" 0 R\"})):typeof o!=\"function\"&&n.push({key:i,value:o}))}return n};var Cf=function(){pr.call(this),Object.defineProperty(this,\"Type\",{value:\"/XObject\",configurable:!1,writable:!0}),Object.defineProperty(this,\"Subtype\",{value:\"/Form\",configurable:!1,writable:!0}),Object.defineProperty(this,\"FormType\",{value:1,configurable:!1,writable:!0});var n,t=[];Object.defineProperty(this,\"BBox\",{configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"Resources\",{value:\"2 0 R\",configurable:!1,writable:!0}),Object.defineProperty(this,\"stream\",{enumerable:!1,configurable:!0,set:function(e){n=e.trim()},get:function(){return n||null}})};kn(Cf,pr);var Ff=function(){pr.call(this);var n,t=[];Object.defineProperty(this,\"Kids\",{enumerable:!1,configurable:!0,get:function(){return t.length>0?t:void 0}}),Object.defineProperty(this,\"Fields\",{enumerable:!1,configurable:!1,get:function(){return t}}),Object.defineProperty(this,\"DA\",{enumerable:!1,configurable:!1,get:function(){if(n){var e=function(i){return i};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),\"(\"+Ii(e(n))+\")\"}},set:function(e){n=e}})};kn(Ff,pr);var tr=function n(){pr.call(this);var t=4;Object.defineProperty(this,\"F\",{enumerable:!1,configurable:!1,get:function(){return t},set:function(S){if(isNaN(S))throw new Error('Invalid value \"'+S+'\" for attribute F supplied.');t=S}}),Object.defineProperty(this,\"showWhenPrinted\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(t,3)},set:function(S){S?this.F=Ye(t,3):this.F=Je(t,3)}});var e=0;Object.defineProperty(this,\"Ff\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(S){if(isNaN(S))throw new Error('Invalid value \"'+S+'\" for attribute Ff supplied.');e=S}});var i=[];Object.defineProperty(this,\"Rect\",{enumerable:!1,configurable:!1,get:function(){if(i.length!==0)return i},set:function(S){i=S!==void 0?S:[]}}),Object.defineProperty(this,\"x\",{enumerable:!0,configurable:!0,get:function(){return!i||isNaN(i[0])?0:i[0]},set:function(S){i[0]=S}}),Object.defineProperty(this,\"y\",{enumerable:!0,configurable:!0,get:function(){return!i||isNaN(i[1])?0:i[1]},set:function(S){i[1]=S}}),Object.defineProperty(this,\"width\",{enumerable:!0,configurable:!0,get:function(){return!i||isNaN(i[2])?0:i[2]},set:function(S){i[2]=S}}),Object.defineProperty(this,\"height\",{enumerable:!0,configurable:!0,get:function(){return!i||isNaN(i[3])?0:i[3]},set:function(S){i[3]=S}});var o=\"\";Object.defineProperty(this,\"FT\",{enumerable:!0,configurable:!1,get:function(){return o},set:function(S){switch(S){case\"/Btn\":case\"/Tx\":case\"/Ch\":case\"/Sig\":o=S;break;default:throw new Error('Invalid value \"'+S+'\" for attribute FT supplied.')}}});var a=null;Object.defineProperty(this,\"T\",{enumerable:!0,configurable:!1,get:function(){if(!a||a.length<1){if(this instanceof Fs)return;a=\"FieldObject\"+n.FieldNum++}var S=function(V){return V};return this.scope&&(S=this.scope.internal.getEncryptor(this.objId)),\"(\"+Ii(S(a))+\")\"},set:function(S){a=S.toString()}}),Object.defineProperty(this,\"fieldName\",{configurable:!0,enumerable:!0,get:function(){return a},set:function(S){a=S}});var c=\"helvetica\";Object.defineProperty(this,\"fontName\",{enumerable:!0,configurable:!0,get:function(){return c},set:function(S){c=S}});var l=\"normal\";Object.defineProperty(this,\"fontStyle\",{enumerable:!0,configurable:!0,get:function(){return l},set:function(S){l=S}});var h=0;Object.defineProperty(this,\"fontSize\",{enumerable:!0,configurable:!0,get:function(){return h},set:function(S){h=S}});var d=void 0;Object.defineProperty(this,\"maxFontSize\",{enumerable:!0,configurable:!0,get:function(){return d===void 0?50/Qo:d},set:function(S){d=S}});var m=\"black\";Object.defineProperty(this,\"color\",{enumerable:!0,configurable:!0,get:function(){return m},set:function(S){m=S}});var _=\"/F1 0 Tf 0 g\";Object.defineProperty(this,\"DA\",{enumerable:!0,configurable:!1,get:function(){if(!(!_||this instanceof Fs||this instanceof Zr))return Oo(_,this.objId,this.scope)},set:function(S){S=S.toString(),_=S}});var k=null;Object.defineProperty(this,\"DV\",{enumerable:!1,configurable:!1,get:function(){if(k)return this instanceof nn==0?Oo(k,this.objId,this.scope):k},set:function(S){S=S.toString(),k=this instanceof nn==0?S.substr(0,1)===\"(\"?Qi(S.substr(1,S.length-2)):Qi(S):S}}),Object.defineProperty(this,\"defaultValue\",{enumerable:!0,configurable:!0,get:function(){return this instanceof nn==1?Qi(k.substr(1,k.length-1)):k},set:function(S){S=S.toString(),k=this instanceof nn==1?\"/\"+ki(S):S}});var p=null;Object.defineProperty(this,\"_V\",{enumerable:!1,configurable:!1,get:function(){if(p)return p},set:function(S){this.V=S}}),Object.defineProperty(this,\"V\",{enumerable:!1,configurable:!1,get:function(){if(p)return this instanceof nn==0?Oo(p,this.objId,this.scope):p},set:function(S){S=S.toString(),p=this instanceof nn==0?S.substr(0,1)===\"(\"?Qi(S.substr(1,S.length-2)):Qi(S):S}}),Object.defineProperty(this,\"value\",{enumerable:!0,configurable:!0,get:function(){return this instanceof nn==1?Qi(p.substr(1,p.length-1)):p},set:function(S){S=S.toString(),p=this instanceof nn==1?\"/\"+ki(S):S}}),Object.defineProperty(this,\"hasAnnotation\",{enumerable:!0,configurable:!0,get:function(){return this.Rect}}),Object.defineProperty(this,\"Type\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"/Annot\":null}}),Object.defineProperty(this,\"Subtype\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"/Widget\":null}});var j,O=!1;Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return O},set:function(S){S=!!S,O=S}}),Object.defineProperty(this,\"page\",{enumerable:!0,configurable:!0,get:function(){if(j)return j},set:function(S){j=S}}),Object.defineProperty(this,\"readOnly\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,1)},set:function(S){S?this.Ff=Ye(this.Ff,1):this.Ff=Je(this.Ff,1)}}),Object.defineProperty(this,\"required\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,2)},set:function(S){S?this.Ff=Ye(this.Ff,2):this.Ff=Je(this.Ff,2)}}),Object.defineProperty(this,\"noExport\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,3)},set:function(S){S?this.Ff=Ye(this.Ff,3):this.Ff=Je(this.Ff,3)}});var M=null;Object.defineProperty(this,\"Q\",{enumerable:!0,configurable:!1,get:function(){if(M!==null)return M},set:function(S){if([0,1,2].indexOf(S)===-1)throw new Error('Invalid value \"'+S+'\" for attribute Q supplied.');M=S}}),Object.defineProperty(this,\"textAlign\",{get:function(){var S;switch(M){case 0:default:S=\"left\";break;case 1:S=\"center\";break;case 2:S=\"right\"}return S},configurable:!0,enumerable:!0,set:function(S){switch(S){case\"right\":case 2:M=2;break;case\"center\":case 1:M=1;break;default:M=0}}})};kn(tr,pr);var xi=function(){tr.call(this),this.FT=\"/Ch\",this.V=\"()\",this.fontName=\"zapfdingbats\";var n=0;Object.defineProperty(this,\"TI\",{enumerable:!0,configurable:!1,get:function(){return n},set:function(e){n=e}}),Object.defineProperty(this,\"topIndex\",{enumerable:!0,configurable:!0,get:function(){return n},set:function(e){n=e}});var t=[];Object.defineProperty(this,\"Opt\",{enumerable:!0,configurable:!1,get:function(){return If(t,this.objId,this.scope)},set:function(e){var i,o;o=[],typeof(i=e)==\"string\"&&(o=(function(a,c,l){l||(l=1);for(var h,d=[];h=c.exec(a);)d.push(h[l]);return d})(i,/\\((.*?)\\)/g)),t=o}}),this.getOptions=function(){return t},this.setOptions=function(e){t=e,this.sort&&t.sort()},this.addOption=function(e){e=(e=e||\"\").toString(),t.push(e),this.sort&&t.sort()},this.removeOption=function(e,i){for(i=i||!1,e=(e=e||\"\").toString();t.indexOf(e)!==-1&&(t.splice(t.indexOf(e),1),i!==!1););},Object.defineProperty(this,\"combo\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,18)},set:function(e){e?this.Ff=Ye(this.Ff,18):this.Ff=Je(this.Ff,18)}}),Object.defineProperty(this,\"edit\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,19)},set:function(e){this.combo===!0&&(e?this.Ff=Ye(this.Ff,19):this.Ff=Je(this.Ff,19))}}),Object.defineProperty(this,\"sort\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,20)},set:function(e){e?(this.Ff=Ye(this.Ff,20),t.sort()):this.Ff=Je(this.Ff,20)}}),Object.defineProperty(this,\"multiSelect\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,22)},set:function(e){e?this.Ff=Ye(this.Ff,22):this.Ff=Je(this.Ff,22)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,23)},set:function(e){e?this.Ff=Ye(this.Ff,23):this.Ff=Je(this.Ff,23)}}),Object.defineProperty(this,\"commitOnSelChange\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,27)},set:function(e){e?this.Ff=Ye(this.Ff,27):this.Ff=Je(this.Ff,27)}}),this.hasAppearanceStream=!1};kn(xi,tr);var _i=function(){xi.call(this),this.fontName=\"helvetica\",this.combo=!1};kn(_i,xi);var Ai=function(){_i.call(this),this.combo=!0};kn(Ai,_i);var Fa=function(){Ai.call(this),this.edit=!0};kn(Fa,Ai);var nn=function(){tr.call(this),this.FT=\"/Btn\",Object.defineProperty(this,\"noToggleToOff\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,15)},set:function(e){e?this.Ff=Ye(this.Ff,15):this.Ff=Je(this.Ff,15)}}),Object.defineProperty(this,\"radio\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,16)},set:function(e){e?this.Ff=Ye(this.Ff,16):this.Ff=Je(this.Ff,16)}}),Object.defineProperty(this,\"pushButton\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,17)},set:function(e){e?this.Ff=Ye(this.Ff,17):this.Ff=Je(this.Ff,17)}}),Object.defineProperty(this,\"radioIsUnison\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,26)},set:function(e){e?this.Ff=Ye(this.Ff,26):this.Ff=Je(this.Ff,26)}});var n,t={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var e=function(a){return a};if(this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),Object.keys(t).length!==0){var i,o=[];for(i in o.push(\"<<\"),t)o.push(\"/\"+i+\" (\"+Ii(e(t[i]))+\")\");return o.push(\">>\"),o.join(`\n`)}},set:function(e){xe(e)===\"object\"&&(t=e)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return t.CA||\"\"},set:function(e){typeof e==\"string\"&&(t.CA=e)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return n},set:function(e){var i=e==null?\"\":e.toString();i.substr(0,1)===\"/\"&&(i=i.substr(1)),n=\"/\"+ki(i)}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return n.substr(1,n.length-1)},set:function(e){n=\"/\"+ki(e)}})};kn(nn,tr);var Ea=function(){nn.call(this),this.pushButton=!0};kn(Ea,nn);var Ni=function(){nn.call(this),this.radio=!0,this.pushButton=!1;var n=[];Object.defineProperty(this,\"Kids\",{enumerable:!0,configurable:!1,get:function(){return n},set:function(t){n=t!==void 0?t:[]}})};kn(Ni,nn);var Fs=function(){var n,t;tr.call(this),Object.defineProperty(this,\"Parent\",{enumerable:!1,configurable:!1,get:function(){return n},set:function(o){n=o}}),Object.defineProperty(this,\"optionName\",{enumerable:!1,configurable:!0,get:function(){return t},set:function(o){t=o}});var e,i={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var o=function(l){return l};this.scope&&(o=this.scope.internal.getEncryptor(this.objId));var a,c=[];for(a in c.push(\"<<\"),i)c.push(\"/\"+a+\" (\"+Ii(o(i[a]))+\")\");return c.push(\">>\"),c.join(`\n`)},set:function(o){xe(o)===\"object\"&&(i=o)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return i.CA||\"\"},set:function(o){typeof o==\"string\"&&(i.CA=o)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(o){var a=o==null?\"\":o.toString();a.substr(0,1)===\"/\"&&(a=a.substr(1)),e=\"/\"+ki(a)}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return e.substr(1,e.length-1)},set:function(o){var a=o==null?\"\":o.toString();a.substr(0,1)===\"/\"&&(a=a.substr(1)),e=\"/\"+ki(a)}}),this.caption=\"l\",this.appearanceState=\"Off\",this._AppearanceType=It.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};kn(Fs,tr),Ni.prototype.setAppearance=function(n){if(!(\"createAppearanceStream\"in n)||!(\"getCA\"in n))throw new Error(\"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\");for(var t in this.Kids)if(this.Kids.hasOwnProperty(t)){var e=this.Kids[t];e.appearanceStreamContent=n.createAppearanceStream(e.optionName),e.caption=n.getCA()}},Ni.prototype.createOption=function(n){var t=new Fs;return t.Parent=this,t.optionName=n,this.Kids.push(t),q1.call(this.scope,t),t};var Oa=function(){nn.call(this),this.fontName=\"zapfdingbats\",this.caption=\"3\",this.appearanceState=\"On\",this.value=\"On\",this.textAlign=\"center\",this.appearanceStreamContent=It.CheckBox.createAppearanceStream()};kn(Oa,nn);var Zr=function(){tr.call(this),this.FT=\"/Tx\",Object.defineProperty(this,\"multiline\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,13)},set:function(t){t?this.Ff=Ye(this.Ff,13):this.Ff=Je(this.Ff,13)}}),Object.defineProperty(this,\"fileSelect\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,21)},set:function(t){t?this.Ff=Ye(this.Ff,21):this.Ff=Je(this.Ff,21)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,23)},set:function(t){t?this.Ff=Ye(this.Ff,23):this.Ff=Je(this.Ff,23)}}),Object.defineProperty(this,\"doNotScroll\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,24)},set:function(t){t?this.Ff=Ye(this.Ff,24):this.Ff=Je(this.Ff,24)}}),Object.defineProperty(this,\"comb\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,25)},set:function(t){t?this.Ff=Ye(this.Ff,25):this.Ff=Je(this.Ff,25)}}),Object.defineProperty(this,\"richText\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,26)},set:function(t){t?this.Ff=Ye(this.Ff,26):this.Ff=Je(this.Ff,26)}});var n=null;Object.defineProperty(this,\"MaxLen\",{enumerable:!0,configurable:!1,get:function(){return n},set:function(t){n=t}}),Object.defineProperty(this,\"maxLength\",{enumerable:!0,configurable:!0,get:function(){return n},set:function(t){Number.isInteger(t)&&(n=t)}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};kn(Zr,tr);var ja=function(){Zr.call(this),Object.defineProperty(this,\"password\",{enumerable:!0,configurable:!0,get:function(){return!!Ge(this.Ff,14)},set:function(n){n?this.Ff=Ye(this.Ff,14):this.Ff=Je(this.Ff,14)}}),this.password=!0};kn(ja,Zr);var It={CheckBox:{createAppearanceStream:function(){return{N:{On:It.CheckBox.YesNormal},D:{On:It.CheckBox.YesPushDown,Off:It.CheckBox.OffPushDown}}},YesPushDown:function(n){var t=dr(n);t.scope=n.scope;var e=[],i=n.scope.internal.getFont(n.fontName,n.fontStyle).id,o=n.scope.__private__.encodeColorString(n.color),a=Yo(n,n.caption);return e.push(\"0.749023 g\"),e.push(\"0 0 \"+$t(It.internal.getWidth(n))+\" \"+$t(It.internal.getHeight(n))+\" re\"),e.push(\"f\"),e.push(\"BMC\"),e.push(\"q\"),e.push(\"0 0 1 rg\"),e.push(\"/\"+i+\" \"+$t(a.fontSize)+\" Tf \"+o),e.push(\"BT\"),e.push(a.text),e.push(\"ET\"),e.push(\"Q\"),e.push(\"EMC\"),t.stream=e.join(`\n`),t},YesNormal:function(n){var t=dr(n);t.scope=n.scope;var e=n.scope.internal.getFont(n.fontName,n.fontStyle).id,i=n.scope.__private__.encodeColorString(n.color),o=[],a=It.internal.getHeight(n),c=It.internal.getWidth(n),l=Yo(n,n.caption);return o.push(\"1 g\"),o.push(\"0 0 \"+$t(c)+\" \"+$t(a)+\" re\"),o.push(\"f\"),o.push(\"q\"),o.push(\"0 0 1 rg\"),o.push(\"0 0 \"+$t(c-1)+\" \"+$t(a-1)+\" re\"),o.push(\"W\"),o.push(\"n\"),o.push(\"0 g\"),o.push(\"BT\"),o.push(\"/\"+e+\" \"+$t(l.fontSize)+\" Tf \"+i),o.push(l.text),o.push(\"ET\"),o.push(\"Q\"),t.stream=o.join(`\n`),t},OffPushDown:function(n){var t=dr(n);t.scope=n.scope;var e=[];return e.push(\"0.749023 g\"),e.push(\"0 0 \"+$t(It.internal.getWidth(n))+\" \"+$t(It.internal.getHeight(n))+\" re\"),e.push(\"f\"),t.stream=e.join(`\n`),t}},RadioButton:{Circle:{createAppearanceStream:function(n){var t={D:{Off:It.RadioButton.Circle.OffPushDown},N:{}};return t.N[n]=It.RadioButton.Circle.YesNormal,t.D[n]=It.RadioButton.Circle.YesPushDown,t},getCA:function(){return\"l\"},YesNormal:function(n){var t=dr(n);t.scope=n.scope;var e=[],i=It.internal.getWidth(n)<=It.internal.getHeight(n)?It.internal.getWidth(n)/4:It.internal.getHeight(n)/4;i=Number((.9*i).toFixed(5));var o=It.internal.Bezier_C,a=Number((i*o).toFixed(5));return e.push(\"q\"),e.push(\"1 0 0 1 \"+Kr(It.internal.getWidth(n)/2)+\" \"+Kr(It.internal.getHeight(n)/2)+\" cm\"),e.push(i+\" 0 m\"),e.push(i+\" \"+a+\" \"+a+\" \"+i+\" 0 \"+i+\" c\"),e.push(\"-\"+a+\" \"+i+\" -\"+i+\" \"+a+\" -\"+i+\" 0 c\"),e.push(\"-\"+i+\" -\"+a+\" -\"+a+\" -\"+i+\" 0 -\"+i+\" c\"),e.push(a+\" -\"+i+\" \"+i+\" -\"+a+\" \"+i+\" 0 c\"),e.push(\"f\"),e.push(\"Q\"),t.stream=e.join(`\n`),t},YesPushDown:function(n){var t=dr(n);t.scope=n.scope;var e=[],i=It.internal.getWidth(n)<=It.internal.getHeight(n)?It.internal.getWidth(n)/4:It.internal.getHeight(n)/4;i=Number((.9*i).toFixed(5));var o=Number((2*i).toFixed(5)),a=Number((o*It.internal.Bezier_C).toFixed(5)),c=Number((i*It.internal.Bezier_C).toFixed(5));return e.push(\"0.749023 g\"),e.push(\"q\"),e.push(\"1 0 0 1 \"+Kr(It.internal.getWidth(n)/2)+\" \"+Kr(It.internal.getHeight(n)/2)+\" cm\"),e.push(o+\" 0 m\"),e.push(o+\" \"+a+\" \"+a+\" \"+o+\" 0 \"+o+\" c\"),e.push(\"-\"+a+\" \"+o+\" -\"+o+\" \"+a+\" -\"+o+\" 0 c\"),e.push(\"-\"+o+\" -\"+a+\" -\"+a+\" -\"+o+\" 0 -\"+o+\" c\"),e.push(a+\" -\"+o+\" \"+o+\" -\"+a+\" \"+o+\" 0 c\"),e.push(\"f\"),e.push(\"Q\"),e.push(\"0 g\"),e.push(\"q\"),e.push(\"1 0 0 1 \"+Kr(It.internal.getWidth(n)/2)+\" \"+Kr(It.internal.getHeight(n)/2)+\" cm\"),e.push(i+\" 0 m\"),e.push(i+\" \"+c+\" \"+c+\" \"+i+\" 0 \"+i+\" c\"),e.push(\"-\"+c+\" \"+i+\" -\"+i+\" \"+c+\" -\"+i+\" 0 c\"),e.push(\"-\"+i+\" -\"+c+\" -\"+c+\" -\"+i+\" 0 -\"+i+\" c\"),e.push(c+\" -\"+i+\" \"+i+\" -\"+c+\" \"+i+\" 0 c\"),e.push(\"f\"),e.push(\"Q\"),t.stream=e.join(`\n`),t},OffPushDown:function(n){var t=dr(n);t.scope=n.scope;var e=[],i=It.internal.getWidth(n)<=It.internal.getHeight(n)?It.internal.getWidth(n)/4:It.internal.getHeight(n)/4;i=Number((.9*i).toFixed(5));var o=Number((2*i).toFixed(5)),a=Number((o*It.internal.Bezier_C).toFixed(5));return e.push(\"0.749023 g\"),e.push(\"q\"),e.push(\"1 0 0 1 \"+Kr(It.internal.getWidth(n)/2)+\" \"+Kr(It.internal.getHeight(n)/2)+\" cm\"),e.push(o+\" 0 m\"),e.push(o+\" \"+a+\" \"+a+\" \"+o+\" 0 \"+o+\" c\"),e.push(\"-\"+a+\" \"+o+\" -\"+o+\" \"+a+\" -\"+o+\" 0 c\"),e.push(\"-\"+o+\" -\"+a+\" -\"+a+\" -\"+o+\" 0 -\"+o+\" c\"),e.push(a+\" -\"+o+\" \"+o+\" -\"+a+\" \"+o+\" 0 c\"),e.push(\"f\"),e.push(\"Q\"),t.stream=e.join(`\n`),t}},Cross:{createAppearanceStream:function(n){var t={D:{Off:It.RadioButton.Cross.OffPushDown},N:{}};return t.N[n]=It.RadioButton.Cross.YesNormal,t.D[n]=It.RadioButton.Cross.YesPushDown,t},getCA:function(){return\"8\"},YesNormal:function(n){var t=dr(n);t.scope=n.scope;var e=[],i=It.internal.calculateCross(n);return e.push(\"q\"),e.push(\"1 1 \"+$t(It.internal.getWidth(n)-2)+\" \"+$t(It.internal.getHeight(n)-2)+\" re\"),e.push(\"W\"),e.push(\"n\"),e.push($t(i.x1.x)+\" \"+$t(i.x1.y)+\" m\"),e.push($t(i.x2.x)+\" \"+$t(i.x2.y)+\" l\"),e.push($t(i.x4.x)+\" \"+$t(i.x4.y)+\" m\"),e.push($t(i.x3.x)+\" \"+$t(i.x3.y)+\" l\"),e.push(\"s\"),e.push(\"Q\"),t.stream=e.join(`\n`),t},YesPushDown:function(n){var t=dr(n);t.scope=n.scope;var e=It.internal.calculateCross(n),i=[];return i.push(\"0.749023 g\"),i.push(\"0 0 \"+$t(It.internal.getWidth(n))+\" \"+$t(It.internal.getHeight(n))+\" re\"),i.push(\"f\"),i.push(\"q\"),i.push(\"1 1 \"+$t(It.internal.getWidth(n)-2)+\" \"+$t(It.internal.getHeight(n)-2)+\" re\"),i.push(\"W\"),i.push(\"n\"),i.push($t(e.x1.x)+\" \"+$t(e.x1.y)+\" m\"),i.push($t(e.x2.x)+\" \"+$t(e.x2.y)+\" l\"),i.push($t(e.x4.x)+\" \"+$t(e.x4.y)+\" m\"),i.push($t(e.x3.x)+\" \"+$t(e.x3.y)+\" l\"),i.push(\"s\"),i.push(\"Q\"),t.stream=i.join(`\n`),t},OffPushDown:function(n){var t=dr(n);t.scope=n.scope;var e=[];return e.push(\"0.749023 g\"),e.push(\"0 0 \"+$t(It.internal.getWidth(n))+\" \"+$t(It.internal.getHeight(n))+\" re\"),e.push(\"f\"),t.stream=e.join(`\n`),t}}},createDefaultAppearanceStream:function(n){var t=n.scope.internal.getFont(n.fontName,n.fontStyle).id,e=n.scope.__private__.encodeColorString(n.color);return\"/\"+t+\" \"+n.fontSize+\" Tf \"+e}};It.internal={Bezier_C:.551915024494,calculateCross:function(n){var t=It.internal.getWidth(n),e=It.internal.getHeight(n),i=Math.min(t,e);return{x1:{x:(t-i)/2,y:(e-i)/2+i},x2:{x:(t-i)/2+i,y:(e-i)/2},x3:{x:(t-i)/2,y:(e-i)/2},x4:{x:(t-i)/2+i,y:(e-i)/2+i}}}},It.internal.getWidth=function(n){var t=0;return xe(n)===\"object\"&&(t=Cu(n.Rect[2])),t},It.internal.getHeight=function(n){var t=0;return xe(n)===\"object\"&&(t=Cu(n.Rect[3])),t};var q1=Ue.addField=function(n){if(D1(this,n),!(n instanceof tr))throw new Error(\"Invalid argument passed to jsPDF.addField.\");var t;return(t=n).scope.internal.acroformPlugin.printedOut&&(t.scope.internal.acroformPlugin.printedOut=!1,t.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),t.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(t),n.page=n.scope.internal.getCurrentPageInfo().pageNumber,this};Ue.AcroFormChoiceField=xi,Ue.AcroFormListBox=_i,Ue.AcroFormComboBox=Ai,Ue.AcroFormEditBox=Fa,Ue.AcroFormButton=nn,Ue.AcroFormPushButton=Ea,Ue.AcroFormRadioButton=Ni,Ue.AcroFormCheckBox=Oa,Ue.AcroFormTextField=Zr,Ue.AcroFormPasswordField=ja,Ue.AcroFormAppearance=It,Ue.AcroForm={ChoiceField:xi,ListBox:_i,ComboBox:Ai,EditBox:Fa,Button:nn,PushButton:Ea,RadioButton:Ni,CheckBox:Oa,TextField:Zr,PasswordField:ja,Appearance:It},Mt.AcroForm={ChoiceField:xi,ListBox:_i,ComboBox:Ai,EditBox:Fa,Button:nn,PushButton:Ea,RadioButton:Ni,CheckBox:Oa,TextField:Zr,PasswordField:ja,Appearance:It};Mt.AcroForm;function Ef(n){return n.reduce(function(t,e,i){return t[e]=i,t},{})}(function(n){var t=\"addImage_\";n.__addimage__={};var e=\"UNKNOWN\",i={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},o=n.__addimage__.getImageFileTypeByImageData=function(N,E){var z,U,rt,ot,ft,nt=e;if((E=E||e)===\"RGBA\"||N.data!==void 0&&N.data instanceof Uint8ClampedArray&&\"height\"in N&&\"width\"in N)return\"RGBA\";if(vt(N))for(ft in i)for(rt=i[ft],z=0;z<rt.length;z+=1){for(ot=!0,U=0;U<rt[z].length;U+=1)if(rt[z][U]!==void 0&&rt[z][U]!==N[U]){ot=!1;break}if(ot===!0){nt=ft;break}}else for(ft in i)for(rt=i[ft],z=0;z<rt.length;z+=1){for(ot=!0,U=0;U<rt[z].length;U+=1)if(rt[z][U]!==void 0&&rt[z][U]!==N.charCodeAt(U)){ot=!1;break}if(ot===!0){nt=ft;break}}return nt===e&&E!==e&&(nt=E),nt},a=function N(E){for(var z=this.internal.write,U=this.internal.putStream,rt=(0,this.internal.getFilters)();rt.indexOf(\"FlateEncode\")!==-1;)rt.splice(rt.indexOf(\"FlateEncode\"),1);E.objectId=this.internal.newObject();var ot=[];if(ot.push({key:\"Type\",value:\"/XObject\"}),ot.push({key:\"Subtype\",value:\"/Image\"}),ot.push({key:\"Width\",value:E.width}),ot.push({key:\"Height\",value:E.height}),E.colorSpace===S.INDEXED?ot.push({key:\"ColorSpace\",value:\"[/Indexed /DeviceRGB \"+(E.palette.length/3-1)+\" \"+(\"sMask\"in E&&E.sMask!==void 0?E.objectId+2:E.objectId+1)+\" 0 R]\"}):(ot.push({key:\"ColorSpace\",value:\"/\"+E.colorSpace}),E.colorSpace===S.DEVICE_CMYK&&ot.push({key:\"Decode\",value:\"[1 0 1 0 1 0 1 0]\"})),ot.push({key:\"BitsPerComponent\",value:E.bitsPerComponent}),\"decodeParameters\"in E&&E.decodeParameters!==void 0&&ot.push({key:\"DecodeParms\",value:\"<<\"+E.decodeParameters+\">>\"}),\"transparency\"in E&&Array.isArray(E.transparency)&&E.transparency.length>0){for(var ft=\"\",nt=0,ct=E.transparency.length;nt<ct;nt++)ft+=E.transparency[nt]+\" \"+E.transparency[nt]+\" \";ot.push({key:\"Mask\",value:\"[\"+ft+\"]\"})}E.sMask!==void 0&&ot.push({key:\"SMask\",value:E.objectId+1+\" 0 R\"});var At=E.filter!==void 0?[\"/\"+E.filter]:void 0;if(U({data:E.data,additionalKeyValues:ot,alreadyAppliedFilters:At,objectId:E.objectId}),z(\"endobj\"),\"sMask\"in E&&E.sMask!==void 0){var wt,x=(wt=E.sMaskBitsPerComponent)!==null&&wt!==void 0?wt:E.bitsPerComponent,B={width:E.width,height:E.height,colorSpace:\"DeviceGray\",bitsPerComponent:x,data:E.sMask};\"filter\"in E&&(B.decodeParameters=\"/Predictor \".concat(E.predictor,\" /Colors 1 /BitsPerComponent \").concat(x,\" /Columns \").concat(E.width),B.filter=E.filter),N.call(this,B)}if(E.colorSpace===S.INDEXED){var T=this.internal.newObject();U({data:X(new Uint8Array(E.palette)),objectId:T}),z(\"endobj\")}},c=function(){var N=this.internal.collections[t+\"images\"];for(var E in N)a.call(this,N[E])},l=function(){var N,E=this.internal.collections[t+\"images\"],z=this.internal.write;for(var U in E)z(\"/I\"+(N=E[U]).index,N.objectId,\"0\",\"R\")},h=function(){this.internal.collections[t+\"images\"]||(this.internal.collections[t+\"images\"]={},this.internal.events.subscribe(\"putResources\",c),this.internal.events.subscribe(\"putXobjectDict\",l))},d=function(){var N=this.internal.collections[t+\"images\"];return h.call(this),N},m=function(){return Object.keys(this.internal.collections[t+\"images\"]).length},_=function(N){return typeof n[\"process\"+N.toUpperCase()]==\"function\"},k=function(N){return xe(N)===\"object\"&&N.nodeType===1},p=function(N,E){if(N.nodeName===\"IMG\"&&N.hasAttribute(\"src\")){var z=\"\"+N.getAttribute(\"src\");if(z.indexOf(\"data:image/\")===0)return Ps(unescape(z).split(\"base64,\").pop());var U=n.loadFile(z,!0);if(U!==void 0)return U}if(N.nodeName===\"CANVAS\"){if(N.width===0||N.height===0)throw new Error(\"Given canvas must have data. Canvas width: \"+N.width+\", height: \"+N.height);var rt;switch(E){case\"PNG\":rt=\"image/png\";break;case\"WEBP\":rt=\"image/webp\";break;default:rt=\"image/jpeg\"}return Ps(N.toDataURL(rt,1).split(\"base64,\").pop())}},j=function(N){var E=this.internal.collections[t+\"images\"];if(E){for(var z in E)if(N===E[z].alias)return E[z]}},O=function(N,E,z){return N||E||(N=-96,E=-96),N<0&&(N=-1*z.width*72/N/this.internal.scaleFactor),E<0&&(E=-1*z.height*72/E/this.internal.scaleFactor),N===0&&(N=E*z.width/z.height),E===0&&(E=N*z.height/z.width),[N,E]},M=function(N,E,z,U,rt,ot){var ft=O.call(this,z,U,rt),nt=this.internal.getCoordinateString,ct=this.internal.getVerticalCoordinateString,At=d.call(this);if(z=ft[0],U=ft[1],At[rt.index]=rt,ot){ot*=Math.PI/180;var wt=Math.cos(ot),x=Math.sin(ot),B=function(H){return H.toFixed(4)},T=[B(wt),B(x),B(-1*x),B(wt),0,0,\"cm\"]}this.internal.write(\"q\"),ot?(this.internal.write([1,\"0\",\"0\",1,nt(N),ct(E+U),\"cm\"].join(\" \")),this.internal.write(T.join(\" \")),this.internal.write([nt(z),\"0\",\"0\",nt(U),\"0\",\"0\",\"cm\"].join(\" \"))):this.internal.write([nt(z),\"0\",\"0\",nt(U),nt(N),ct(E+U),\"cm\"].join(\" \")),this.isAdvancedAPI()&&this.internal.write([1,0,0,-1,0,0,\"cm\"].join(\" \")),this.internal.write(\"/I\"+rt.index+\" Do\"),this.internal.write(\"Q\")},S=n.color_spaces={DEVICE_RGB:\"DeviceRGB\",DEVICE_GRAY:\"DeviceGray\",DEVICE_CMYK:\"DeviceCMYK\",CAL_GREY:\"CalGray\",CAL_RGB:\"CalRGB\",LAB:\"Lab\",ICC_BASED:\"ICCBased\",INDEXED:\"Indexed\",PATTERN:\"Pattern\",SEPARATION:\"Separation\",DEVICE_N:\"DeviceN\"};n.decode={DCT_DECODE:\"DCTDecode\",FLATE_DECODE:\"FlateDecode\",LZW_DECODE:\"LZWDecode\",JPX_DECODE:\"JPXDecode\",JBIG2_DECODE:\"JBIG2Decode\",ASCII85_DECODE:\"ASCII85Decode\",ASCII_HEX_DECODE:\"ASCIIHexDecode\",RUN_LENGTH_DECODE:\"RunLengthDecode\",CCITT_FAX_DECODE:\"CCITTFaxDecode\"};var V=n.image_compression={NONE:\"NONE\",FAST:\"FAST\",MEDIUM:\"MEDIUM\",SLOW:\"SLOW\"},G=n.__addimage__.sHashCode=function(N){var E,z,U=0;if(typeof N==\"string\")for(z=N.length,E=0;E<z;E++)U=(U<<5)-U+N.charCodeAt(E),U|=0;else if(vt(N))for(z=N.byteLength/2,E=0;E<z;E++)U=(U<<5)-U+N[E],U|=0;return U},q=n.__addimage__.validateStringAsBase64=function(N){(N=N||\"\").toString().trim();var E=!0;return N.length===0&&(E=!1),N.length%4!=0&&(E=!1),/^[A-Za-z0-9+/]+$/.test(N.substr(0,N.length-2))===!1&&(E=!1),/^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(N.substr(-2))===!1&&(E=!1),E},it=n.__addimage__.extractImageFromDataUrl=function(N){if(N==null||!(N=N.trim()).startsWith(\"data:\"))return null;var E=N.indexOf(\",\");return E<0?null:N.substring(0,E).trim().endsWith(\"base64\")?N.substring(E+1):null};n.__addimage__.isArrayBuffer=function(N){return N instanceof ArrayBuffer};var vt=n.__addimage__.isArrayBufferView=function(N){return N instanceof Int8Array||N instanceof Uint8Array||N instanceof Uint8ClampedArray||N instanceof Int16Array||N instanceof Uint16Array||N instanceof Int32Array||N instanceof Uint32Array||N instanceof Float32Array||N instanceof Float64Array},dt=n.__addimage__.binaryStringToUint8Array=function(N){for(var E=N.length,z=new Uint8Array(E),U=0;U<E;U++)z[U]=N.charCodeAt(U);return z},X=n.__addimage__.arrayBufferToBinaryString=function(N){for(var E=\"\",z=vt(N)?N:new Uint8Array(N),U=0;U<z.length;U+=8192)E+=String.fromCharCode.apply(null,z.subarray(U,U+8192));return E};n.addImage=function(){var N,E,z,U,rt,ot,ft,nt,ct;if(typeof arguments[1]==\"number\"?(E=e,z=arguments[1],U=arguments[2],rt=arguments[3],ot=arguments[4],ft=arguments[5],nt=arguments[6],ct=arguments[7]):(E=arguments[1],z=arguments[2],U=arguments[3],rt=arguments[4],ot=arguments[5],ft=arguments[6],nt=arguments[7],ct=arguments[8]),xe(N=arguments[0])===\"object\"&&!k(N)&&\"imageData\"in N){var At=N;N=At.imageData,E=At.format||E||e,z=At.x||z||0,U=At.y||U||0,rt=At.w||At.width||rt,ot=At.h||At.height||ot,ft=At.alias||ft,nt=At.compression||nt,ct=At.rotation||At.angle||ct}var wt=this.internal.getFilters();if(nt===void 0&&wt.indexOf(\"FlateEncode\")!==-1&&(nt=\"SLOW\"),isNaN(z)||isNaN(U))throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");h.call(this);var x=R.call(this,N,E,ft,nt);return M.call(this,z,U,rt,ot,x,ct),this};var R=function(N,E,z,U){var rt,ot,ft;if(typeof N==\"string\"&&o(N)===e){N=unescape(N);var nt=tt(N,!1);(nt!==\"\"||(nt=n.loadFile(N,!0))!==void 0)&&(N=nt)}if(k(N)&&(N=p(N,E)),E=o(N,E),!_(E))throw new Error(\"addImage does not support files of type '\"+E+\"', please ensure that a plugin for '\"+E+\"' support is added.\");if(((ft=z)==null||ft.length===0)&&(z=(function(ct){return typeof ct==\"string\"||vt(ct)?G(ct):vt(ct.data)?G(ct.data):null})(N)),(rt=j.call(this,z))||(N instanceof Uint8Array||E===\"RGBA\"||(ot=N,N=dt(N)),rt=this[\"process\"+E.toUpperCase()](N,m.call(this),z,(function(ct){return ct&&typeof ct==\"string\"&&(ct=ct.toUpperCase()),ct in n.image_compression?ct:V.NONE})(U),ot)),!rt)throw new Error(\"An unknown error occurred whilst processing the image.\");return rt},tt=n.__addimage__.convertBase64ToBinaryString=function(N,E){E=typeof E!=\"boolean\"||E;var z,U=\"\";if(typeof N==\"string\"){var rt;z=(rt=it(N))!==null&&rt!==void 0?rt:N;try{U=Ps(z)}catch(ot){if(E)throw q(z)?new Error(\"atob-Error in jsPDF.convertBase64ToBinaryString \"+ot.message):new Error(\"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \")}}return U};n.getImageProperties=function(N){var E,z,U=\"\";if(k(N)&&(N=p(N)),typeof N==\"string\"&&o(N)===e&&((U=tt(N,!1))===\"\"&&(U=n.loadFile(N)||\"\"),N=U),z=o(N),!_(z))throw new Error(\"addImage does not support files of type '\"+z+\"', please ensure that a plugin for '\"+z+\"' support is added.\");if(N instanceof Uint8Array||(N=dt(N)),!(E=this[\"process\"+z.toUpperCase()](N)))throw new Error(\"An unknown error occurred whilst processing the image\");return E.fileType=z,E}})(Mt.API),(function(n){var t=function(e){if(e!==void 0&&e!=\"\")return!0};Mt.API.events.push([\"addPage\",function(e){this.internal.getPageInfo(e.pageNumber).pageContext.annotations=[]}]),n.events.push([\"putPage\",function(e){for(var i,o,a,c=this.internal.getCoordinateString,l=this.internal.getVerticalCoordinateString,h=this.internal.getPageInfoByObjId(e.objId),d=e.pageContext.annotations,m=!1,_=0;_<d.length&&!m;_++)switch((i=d[_]).type){case\"link\":(t(i.options.url)||t(i.options.pageNumber))&&(m=!0);break;case\"reference\":case\"text\":case\"freetext\":m=!0}if(m!=0){this.internal.write(\"/Annots [\");for(var k=0;k<d.length;k++){i=d[k];var p=this.internal.pdfEscape,j=this.internal.getEncryptor(e.objId);switch(i.type){case\"reference\":this.internal.write(\" \"+i.object.objId+\" 0 R \");break;case\"text\":var O=this.internal.newAdditionalObject(),M=this.internal.newAdditionalObject(),S=this.internal.getEncryptor(O.objId),V=i.title||\"Note\";a=\"<</Type /Annot /Subtype /Text \"+(o=\"/Rect [\"+c(i.bounds.x)+\" \"+l(i.bounds.y+i.bounds.h)+\" \"+c(i.bounds.x+i.bounds.w)+\" \"+l(i.bounds.y)+\"] \")+\"/Contents (\"+p(S(i.contents))+\")\",a+=\" /Popup \"+M.objId+\" 0 R\",a+=\" /P \"+h.objId+\" 0 R\",a+=\" /T (\"+p(S(V))+\") >>\",O.content=a;var G=O.objId+\" 0 R\";a=\"<</Type /Annot /Subtype /Popup \"+(o=\"/Rect [\"+c(i.bounds.x+30)+\" \"+l(i.bounds.y+i.bounds.h)+\" \"+c(i.bounds.x+i.bounds.w+30)+\" \"+l(i.bounds.y)+\"] \")+\" /Parent \"+G,i.open&&(a+=\" /Open true\"),a+=\" >>\",M.content=a,this.internal.write(O.objId,\"0 R\",M.objId,\"0 R\");break;case\"freetext\":o=\"/Rect [\"+c(i.bounds.x)+\" \"+l(i.bounds.y)+\" \"+c(i.bounds.x+i.bounds.w)+\" \"+l(i.bounds.y+i.bounds.h)+\"] \";var q=\"font: Helvetica,sans-serif 12.0pt; text-align:left; color:#\"+(i.color||\"#000000\");a=\"<</Type /Annot /Subtype /FreeText \"+o+\"/Contents (\"+p(j(i.contents))+\")\",a+=\" /DS(\"+p(j(q))+\")\",a+=\" /Border [0 0 0]\",a+=\" >>\",this.internal.write(a);break;case\"link\":if(i.options.name){var it=this.annotations._nameMap[i.options.name];i.options.pageNumber=it.page,i.options.top=it.y}else i.options.top||(i.options.top=0);if(o=\"/Rect [\"+i.finalBounds.x+\" \"+i.finalBounds.y+\" \"+i.finalBounds.w+\" \"+i.finalBounds.h+\"] \",a=\"\",i.options.url)a=\"<</Type /Annot /Subtype /Link \"+o+\"/Border [0 0 0] /A <</S /URI /URI (\"+p(j(i.options.url))+\") >>\";else if(i.options.pageNumber)switch(a=\"<</Type /Annot /Subtype /Link \"+o+\"/Border [0 0 0] /Dest [\"+this.internal.getPageInfo(i.options.pageNumber).objId+\" 0 R\",i.options.magFactor=i.options.magFactor||\"XYZ\",i.options.magFactor){case\"Fit\":a+=\" /Fit]\";break;case\"FitH\":a+=\" /FitH \"+i.options.top+\"]\";break;case\"FitV\":i.options.left=i.options.left||0,a+=\" /FitV \"+i.options.left+\"]\";break;default:var vt=l(i.options.top);i.options.left=i.options.left||0,i.options.zoom===void 0&&(i.options.zoom=0),a+=\" /XYZ \"+i.options.left+\" \"+vt+\" \"+i.options.zoom+\"]\"}a!=\"\"&&(a+=\" >>\",this.internal.write(a))}}this.internal.write(\"]\")}}]),n.createAnnotation=function(e){var i=this.internal.getCurrentPageInfo();switch(e.type){case\"link\":this.link(e.bounds.x,e.bounds.y,e.bounds.w,e.bounds.h,e);break;case\"text\":case\"freetext\":i.pageContext.annotations.push(e)}},n.link=function(e,i,o,a,c){var l=this.internal.getCurrentPageInfo(),h=this.internal.getCoordinateString,d=this.internal.getVerticalCoordinateString;l.pageContext.annotations.push({finalBounds:{x:h(e),y:d(i),w:h(e+o),h:d(i+a)},options:c,type:\"link\"})},n.textWithLink=function(e,i,o,a){var c,l,h=this.getTextWidth(e),d=this.internal.getLineHeight()/this.internal.scaleFactor;if(a.maxWidth!==void 0){l=a.maxWidth;var m=this.splitTextToSize(e,l).length;c=Math.ceil(d*m)}else l=h,c=d;return this.text(e,i,o,a),o+=.2*d,a.align===\"center\"&&(i-=h/2),a.align===\"right\"&&(i-=h),this.link(i,o-d,l,c,a),h},n.getTextWidth=function(e){var i=this.internal.getFontSize();return this.getStringUnitWidth(e)*i/this.internal.scaleFactor}})(Mt.API),(function(n){var t={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},e={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},i={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},o=[1570,1571,1573,1575];n.__arabicParser__={};var a=n.__arabicParser__.isInArabicSubstitutionA=function(O){return t[O.charCodeAt(0)]!==void 0},c=n.__arabicParser__.isArabicLetter=function(O){return typeof O==\"string\"&&/^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(O)},l=n.__arabicParser__.isArabicEndLetter=function(O){return c(O)&&a(O)&&t[O.charCodeAt(0)].length<=2},h=n.__arabicParser__.isArabicAlfLetter=function(O){return c(O)&&o.indexOf(O.charCodeAt(0))>=0};n.__arabicParser__.arabicLetterHasIsolatedForm=function(O){return c(O)&&a(O)&&t[O.charCodeAt(0)].length>=1};var d=n.__arabicParser__.arabicLetterHasFinalForm=function(O){return c(O)&&a(O)&&t[O.charCodeAt(0)].length>=2};n.__arabicParser__.arabicLetterHasInitialForm=function(O){return c(O)&&a(O)&&t[O.charCodeAt(0)].length>=3};var m=n.__arabicParser__.arabicLetterHasMedialForm=function(O){return c(O)&&a(O)&&t[O.charCodeAt(0)].length==4},_=n.__arabicParser__.resolveLigatures=function(O){var M=0,S=e,V=\"\",G=0;for(M=0;M<O.length;M+=1)S[O.charCodeAt(M)]!==void 0?(G++,typeof(S=S[O.charCodeAt(M)])==\"number\"&&(V+=String.fromCharCode(S),S=e,G=0),M===O.length-1&&(S=e,V+=O.charAt(M-(G-1)),M-=G-1,G=0)):(S=e,V+=O.charAt(M-G),M-=G,G=0);return V};n.__arabicParser__.isArabicDiacritic=function(O){return O!==void 0&&i[O.charCodeAt(0)]!==void 0};var k=n.__arabicParser__.getCorrectForm=function(O,M,S){return c(O)?a(O)===!1?-1:!d(O)||!c(M)&&!c(S)||!c(S)&&l(M)||l(O)&&!c(M)||l(O)&&h(M)||l(O)&&l(M)?0:m(O)&&c(M)&&!l(M)&&c(S)&&d(S)?3:l(O)||!c(S)?1:2:-1},p=function(O){var M=0,S=0,V=0,G=\"\",q=\"\",it=\"\",vt=(O=O||\"\").split(\"\\\\s+\"),dt=[];for(M=0;M<vt.length;M+=1){for(dt.push(\"\"),S=0;S<vt[M].length;S+=1)G=vt[M][S],q=vt[M][S-1],it=vt[M][S+1],c(G)?(V=k(G,q,it),dt[M]+=V!==-1?String.fromCharCode(t[G.charCodeAt(0)][V]):G):dt[M]+=G;dt[M]=_(dt[M])}return dt.join(\" \")},j=n.__arabicParser__.processArabic=n.processArabic=function(){var O,M=typeof arguments[0]==\"string\"?arguments[0]:arguments[0].text,S=[];if(Array.isArray(M)){var V=0;for(S=[],V=0;V<M.length;V+=1)Array.isArray(M[V])?S.push([p(M[V][0]),M[V][1],M[V][2]]):S.push([p(M[V])]);O=S}else O=p(M);return typeof arguments[0]==\"string\"?O:(arguments[0].text=O,arguments[0])};n.events.push([\"preProcessText\",j])})(Mt.API),Mt.API.autoPrint=function(n){var t;return(n=n||{}).variant=n.variant||\"non-conform\",n.variant===\"javascript\"?this.addJS(\"print({});\"):(this.internal.events.subscribe(\"postPutResources\",function(){t=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /Named\"),this.internal.out(\"/Type /Action\"),this.internal.out(\"/N /Print\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){this.internal.out(\"/OpenAction \"+t+\" 0 R\")})),this},(function(n){var t=function(){var e=void 0;Object.defineProperty(this,\"pdf\",{get:function(){return e},set:function(l){e=l}});var i=150;Object.defineProperty(this,\"width\",{get:function(){return i},set:function(l){i=isNaN(l)||Number.isInteger(l)===!1||l<0?150:l,this.getContext(\"2d\").pageWrapXEnabled&&(this.getContext(\"2d\").pageWrapX=i+1)}});var o=300;Object.defineProperty(this,\"height\",{get:function(){return o},set:function(l){o=isNaN(l)||Number.isInteger(l)===!1||l<0?300:l,this.getContext(\"2d\").pageWrapYEnabled&&(this.getContext(\"2d\").pageWrapY=o+1)}});var a=[];Object.defineProperty(this,\"childNodes\",{get:function(){return a},set:function(l){a=l}});var c={};Object.defineProperty(this,\"style\",{get:function(){return c},set:function(l){c=l}}),Object.defineProperty(this,\"parentNode\",{})};t.prototype.getContext=function(e,i){var o;if((e=e||\"2d\")!==\"2d\")return null;for(o in i)this.pdf.context2d.hasOwnProperty(o)&&(this.pdf.context2d[o]=i[o]);return this.pdf.context2d._canvas=this,this.pdf.context2d},t.prototype.toDataURL=function(){throw new Error(\"toDataURL is not implemented.\")},n.events.push([\"initialized\",function(){this.canvas=new t,this.canvas.pdf=this}])})(Mt.API),(function(n){var t={left:0,top:0,bottom:0,right:0},e=!1,i=function(){this.internal.__cell__===void 0&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},t),this.internal.__cell__.margins.width=this.getPageWidth(),o.call(this))},o=function(){this.internal.__cell__.lastCell=new a,this.internal.__cell__.pages=1},a=function(){var h=arguments[0];Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return h},set:function(O){h=O}});var d=arguments[1];Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return d},set:function(O){d=O}});var m=arguments[2];Object.defineProperty(this,\"width\",{enumerable:!0,get:function(){return m},set:function(O){m=O}});var _=arguments[3];Object.defineProperty(this,\"height\",{enumerable:!0,get:function(){return _},set:function(O){_=O}});var k=arguments[4];Object.defineProperty(this,\"text\",{enumerable:!0,get:function(){return k},set:function(O){k=O}});var p=arguments[5];Object.defineProperty(this,\"lineNumber\",{enumerable:!0,get:function(){return p},set:function(O){p=O}});var j=arguments[6];return Object.defineProperty(this,\"align\",{enumerable:!0,get:function(){return j},set:function(O){j=O}}),this};a.prototype.clone=function(){return new a(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},a.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},n.setHeaderFunction=function(h){return i.call(this),this.internal.__cell__.headerFunction=typeof h==\"function\"?h:void 0,this},n.getTextDimensions=function(h,d){i.call(this);var m=(d=d||{}).fontSize||this.getFontSize(),_=d.font||this.getFont(),k=d.scaleFactor||this.internal.scaleFactor,p=0,j=0,O=0,M=this;if(!Array.isArray(h)&&typeof h!=\"string\"){if(typeof h!=\"number\")throw new Error(\"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\");h=String(h)}var S=d.maxWidth;S>0?typeof h==\"string\"?h=this.splitTextToSize(h,S):Object.prototype.toString.call(h)===\"[object Array]\"&&(h=h.reduce(function(G,q){return G.concat(M.splitTextToSize(q,S))},[])):h=Array.isArray(h)?h:[h];for(var V=0;V<h.length;V++)p<(O=this.getStringUnitWidth(h[V],{font:_})*m)&&(p=O);return p!==0&&(j=h.length),{w:p/=k,h:Math.max((j*m*this.getLineHeightFactor()-m*(this.getLineHeightFactor()-1))/k,0)}},n.cellAddPage=function(){i.call(this),this.addPage();var h=this.internal.__cell__.margins||t;return this.internal.__cell__.lastCell=new a(h.left,h.top,void 0,void 0),this.internal.__cell__.pages+=1,this};var c=n.cell=function(){var h;h=arguments[0]instanceof a?arguments[0]:new a(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6]),i.call(this);var d=this.internal.__cell__.lastCell,m=this.internal.__cell__.padding,_=this.internal.__cell__.margins||t,k=this.internal.__cell__.tableHeaderRow,p=this.internal.__cell__.printHeaders;return d.lineNumber!==void 0&&(d.lineNumber===h.lineNumber?(h.x=(d.x||0)+(d.width||0),h.y=d.y||0):d.y+d.height+h.height+_.bottom>this.getPageHeight()?(this.cellAddPage(),h.y=_.top,p&&k&&(this.printHeaderRow(h.lineNumber,!0),h.y+=k[0].height)):h.y=d.y+d.height||h.y),h.text[0]!==void 0&&(this.rect(h.x,h.y,h.width,h.height,e===!0?\"FD\":void 0),h.align===\"right\"?this.text(h.text,h.x+h.width-m,h.y+m,{align:\"right\",baseline:\"top\"}):h.align===\"center\"?this.text(h.text,h.x+h.width/2,h.y+m,{align:\"center\",baseline:\"top\",maxWidth:h.width-m-m}):this.text(h.text,h.x+m,h.y+m,{align:\"left\",baseline:\"top\",maxWidth:h.width-m-m})),this.internal.__cell__.lastCell=h,this};n.table=function(h,d,m,_,k){if(i.call(this),!m)throw new Error(\"No data for PDF table.\");var p,j,O,M,S=[],V=[],G=[],q={},it={},vt=[],dt=[],X=(k=k||{}).autoSize||!1,R=k.printHeaders!==!1,tt=k.css&&k.css[\"font-size\"]!==void 0?16*k.css[\"font-size\"]:k.fontSize||12,N=k.margins||Object.assign({width:this.getPageWidth()},t),E=typeof k.padding==\"number\"?k.padding:3,z=k.headerBackgroundColor||\"#c8c8c8\",U=k.headerTextColor||\"#000\";if(o.call(this),this.internal.__cell__.printHeaders=R,this.internal.__cell__.margins=N,this.internal.__cell__.table_font_size=tt,this.internal.__cell__.padding=E,this.internal.__cell__.headerBackgroundColor=z,this.internal.__cell__.headerTextColor=U,this.setFontSize(tt),_==null)V=S=Object.keys(m[0]),G=S.map(function(){return\"left\"});else if(Array.isArray(_)&&xe(_[0])===\"object\")for(S=_.map(function(At){return At.name}),V=_.map(function(At){return At.prompt||At.name||\"\"}),G=_.map(function(At){return At.align||\"left\"}),p=0;p<_.length;p+=1)it[_[p].name]=.7499990551181103*_[p].width;else Array.isArray(_)&&typeof _[0]==\"string\"&&(V=S=_,G=S.map(function(){return\"left\"}));if(X||Array.isArray(_)&&typeof _[0]==\"string\")for(p=0;p<S.length;p+=1){for(q[M=S[p]]=m.map(function(At){return At[M]}),this.setFont(void 0,\"bold\"),vt.push(this.getTextDimensions(V[p],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w),j=q[M],this.setFont(void 0,\"normal\"),O=0;O<j.length;O+=1)vt.push(this.getTextDimensions(j[O],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w);it[M]=Math.max.apply(null,vt)+E+E,vt=[]}if(R){var rt={};for(p=0;p<S.length;p+=1)rt[S[p]]={},rt[S[p]].text=V[p],rt[S[p]].align=G[p];var ot=l.call(this,rt,it);dt=S.map(function(At){return new a(h,d,it[At],ot,rt[At].text,void 0,rt[At].align)}),this.setTableHeaderRow(dt),this.printHeaderRow(1,!1)}var ft=_.reduce(function(At,wt){return At[wt.name]=wt.align,At},{});for(p=0;p<m.length;p+=1){\"rowStart\"in k&&k.rowStart instanceof Function&&k.rowStart({row:p,data:m[p]},this);var nt=l.call(this,m[p],it);for(O=0;O<S.length;O+=1){var ct=m[p][S[O]];\"cellStart\"in k&&k.cellStart instanceof Function&&k.cellStart({row:p,col:O,data:ct},this),c.call(this,new a(h,d,it[S[O]],nt,ct,p+2,ft[S[O]]))}}return this.internal.__cell__.table_x=h,this.internal.__cell__.table_y=d,this};var l=function(h,d){var m=this.internal.__cell__.padding,_=this.internal.__cell__.table_font_size,k=this.internal.scaleFactor;return Object.keys(h).map(function(p){var j=h[p];return this.splitTextToSize(j.hasOwnProperty(\"text\")?j.text:j,d[p]-m-m)},this).map(function(p){return this.getLineHeightFactor()*p.length*_/k+m+m},this).reduce(function(p,j){return Math.max(p,j)},0)};n.setTableHeaderRow=function(h){i.call(this),this.internal.__cell__.tableHeaderRow=h},n.printHeaderRow=function(h,d){if(i.call(this),!this.internal.__cell__.tableHeaderRow)throw new Error(\"Property tableHeaderRow does not exist.\");var m;if(e=!0,typeof this.internal.__cell__.headerFunction==\"function\"){var _=this.internal.__cell__.headerFunction(this,this.internal.__cell__.pages);this.internal.__cell__.lastCell=new a(_[0],_[1],_[2],_[3],void 0,-1)}this.setFont(void 0,\"bold\");for(var k=[],p=0;p<this.internal.__cell__.tableHeaderRow.length;p+=1){m=this.internal.__cell__.tableHeaderRow[p].clone(),d&&(m.y=this.internal.__cell__.margins.top||0,k.push(m)),m.lineNumber=h;var j=this.getTextColor();this.setTextColor(this.internal.__cell__.headerTextColor),this.setFillColor(this.internal.__cell__.headerBackgroundColor),c.call(this,m),this.setTextColor(j)}k.length>0&&this.setTableHeaderRow(k),this.setFont(void 0,\"normal\"),e=!1}})(Mt.API);var Of={italic:[\"italic\",\"oblique\",\"normal\"],oblique:[\"oblique\",\"italic\",\"normal\"],normal:[\"normal\",\"oblique\",\"italic\"]},jf=[\"ultra-condensed\",\"extra-condensed\",\"condensed\",\"semi-condensed\",\"normal\",\"semi-expanded\",\"expanded\",\"extra-expanded\",\"ultra-expanded\"],Jo=Ef(jf),Bf=[100,200,300,400,500,600,700,800,900],U1=Ef(Bf);function jo(n){var t=n.family.replace(/\"|'/g,\"\").toLowerCase(),e=(function(a){return Of[a=a||\"normal\"]?a:\"normal\"})(n.style),i=(function(a){return a?typeof a==\"number\"?a>=100&&a<=900&&a%100==0?a:400:/^\\d00$/.test(a)?parseInt(a):a===\"bold\"?700:400:400})(n.weight),o=(function(a){return typeof Jo[a=a||\"normal\"]==\"number\"?a:\"normal\"})(n.stretch);return{family:t,style:e,weight:i,stretch:o,src:n.src||[],ref:n.ref||{name:t,style:[o,e,i].join(\" \")}}}function Fu(n,t,e,i){var o;for(o=e;o>=0&&o<t.length;o+=i)if(n[t[o]])return n[t[o]];for(o=e;o>=0&&o<t.length;o-=i)if(n[t[o]])return n[t[o]]}var z1={\"sans-serif\":\"helvetica\",fixed:\"courier\",monospace:\"courier\",terminal:\"courier\",cursive:\"times\",fantasy:\"times\",serif:\"times\"},Eu={caption:\"times\",icon:\"times\",menu:\"times\",\"message-box\":\"times\",\"small-caption\":\"times\",\"status-bar\":\"times\"};function Ou(n){return[n.stretch,n.style,n.weight,n.family].join(\" \")}function ju(n){return n.trimLeft()}function H1(n,t){for(var e=0;e<n.length;){if(n.charAt(e)===t)return[n.substring(0,e),n.substring(e+1)];e+=1}return null}function W1(n){var t=n.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);return t===null?null:[t[0],n.substring(t[0].length)]}var ta,Ss,Bu,Mu,Ru,Bo=[\"times\"];function Tu(n,t,e,i,o){var a=4,c=qu;switch(o){case Mt.API.image_compression.FAST:a=1,c=Du;break;case Mt.API.image_compression.MEDIUM:a=6,c=Uu;break;case Mt.API.image_compression.SLOW:a=9,c=zu}n=(function(h,d,m,_){for(var k,p=h.length/d,j=new Uint8Array(h.length+p),O=[V1,Du,qu,Uu,zu],M=0;M<p;M+=1){var S=M*d,V=h.subarray(S,S+d);if(_)j.set(_(V,m,k),S+M);else{for(var G=O.length,q=[],it=0;it<G;it+=1)q[it]=O[it](V,m,k);var vt=Y1(q.concat());j.set(q[vt],S+M)}k=V}return j})(n,t,Math.ceil(e*i/8),c);var l=Uo(n,{level:a});return Mt.API.__addimage__.arrayBufferToBinaryString(l)}function V1(n){var t=Array.apply([],n);return t.unshift(0),t}function Du(n,t){var e=n.length,i=[];i[0]=1;for(var o=0;o<e;o+=1){var a=n[o-t]||0;i[o+1]=n[o]-a+256&255}return i}function qu(n,t,e){var i=n.length,o=[];o[0]=2;for(var a=0;a<i;a+=1){var c=e&&e[a]||0;o[a+1]=n[a]-c+256&255}return o}function Uu(n,t,e){var i=n.length,o=[];o[0]=3;for(var a=0;a<i;a+=1){var c=n[a-t]||0,l=e&&e[a]||0;o[a+1]=n[a]+256-(c+l>>>1)&255}return o}function zu(n,t,e){var i=n.length,o=[];o[0]=4;for(var a=0;a<i;a+=1){var c=G1(n[a-t]||0,e&&e[a]||0,e&&e[a-t]||0);o[a+1]=n[a]-c+256&255}return o}function G1(n,t,e){if(n===t&&t===e)return n;var i=Math.abs(t-e),o=Math.abs(n-e),a=Math.abs(n+t-e-e);return i<=o&&i<=a?n:o<=a?t:e}function Y1(n){var t=n.map(function(e){return e.reduce(function(i,o){return i+Math.abs(o)},0)});return t.indexOf(Math.min.apply(null,t))}function Mo(n,t,e){var i=t*e,o=Math.floor(i/8),a=16-(i-8*o+e),c=(1<<e)-1;return Mf(n,o)>>a&c}function Hu(n,t,e,i){var o=e*i,a=Math.floor(o/8),c=16-(o-8*a+i),l=(1<<i)-1,h=(t&l)<<c;(function(d,m,_){if(m+1<d.byteLength)d.setUint16(m,_,!1);else{var k=_>>8&255;d.setUint8(m,k)}})(n,a,Mf(n,a)&~(l<<c)&65535|h)}function Mf(n,t){return t+1<n.byteLength?n.getUint16(t,!1):n.getUint8(t)<<8}function J1(n){var t=0;if(n[t++]!==71||n[t++]!==73||n[t++]!==70||n[t++]!==56||(n[t++]+1&253)!=56||n[t++]!==97)throw new Error(\"Invalid GIF 87a/89a header.\");var e=n[t++]|n[t++]<<8,i=n[t++]|n[t++]<<8,o=n[t++],a=o>>7,c=1<<1+(7&o);n[t++],n[t++];var l=null,h=null;a&&(l=t,h=c,t+=3*c);var d=!0,m=[],_=0,k=null,p=0,j=null;for(this.width=e,this.height=i;d&&t<n.length;)switch(n[t++]){case 33:switch(n[t++]){case 255:if(n[t]!==11||n[t+1]==78&&n[t+2]==69&&n[t+3]==84&&n[t+4]==83&&n[t+5]==67&&n[t+6]==65&&n[t+7]==80&&n[t+8]==69&&n[t+9]==50&&n[t+10]==46&&n[t+11]==48&&n[t+12]==3&&n[t+13]==1&&n[t+16]==0)t+=14,j=n[t++]|n[t++]<<8,t++;else for(t+=12;;){if(!((N=n[t++])>=0))throw Error(\"Invalid block size\");if(N===0)break;t+=N}break;case 249:if(n[t++]!==4||n[t+4]!==0)throw new Error(\"Invalid graphics extension block.\");var O=n[t++];_=n[t++]|n[t++]<<8,k=n[t++],1&O||(k=null),p=O>>2&7,t++;break;case 254:for(;;){if(!((N=n[t++])>=0))throw Error(\"Invalid block size\");if(N===0)break;t+=N}break;default:throw new Error(\"Unknown graphic control label: 0x\"+n[t-1].toString(16))}break;case 44:var M=n[t++]|n[t++]<<8,S=n[t++]|n[t++]<<8,V=n[t++]|n[t++]<<8,G=n[t++]|n[t++]<<8,q=n[t++],it=q>>6&1,vt=1<<1+(7&q),dt=l,X=h,R=!1;q>>7&&(R=!0,dt=t,X=vt,t+=3*vt);var tt=t;for(t++;;){var N;if(!((N=n[t++])>=0))throw Error(\"Invalid block size\");if(N===0)break;t+=N}m.push({x:M,y:S,width:V,height:G,has_local_palette:R,palette_offset:dt,palette_size:X,data_offset:tt,data_length:t-tt,transparent_index:k,interlaced:!!it,delay:_,disposal:p});break;case 59:d=!1;break;default:throw new Error(\"Unknown gif block: 0x\"+n[t-1].toString(16))}this.numFrames=function(){return m.length},this.loopCount=function(){return j},this.frameInfo=function(E){if(E<0||E>=m.length)throw new Error(\"Frame index out of range.\");return m[E]},this.decodeAndBlitFrameBGRA=function(E,z){var U=this.frameInfo(E),rt=U.width*U.height;if(rt>536870912)throw new Error(\"Image dimensions exceed 512MB, which is too large.\");var ot=new Uint8Array(rt);Wu(n,U.data_offset,ot,rt);var ft=U.palette_offset,nt=U.transparent_index;nt===null&&(nt=256);var ct=U.width,At=e-ct,wt=ct,x=4*(U.y*e+U.x),B=4*((U.y+U.height)*e+U.x),T=x,H=4*At;U.interlaced===!0&&(H+=4*e*7);for(var J=8,Z=0,at=ot.length;Z<at;++Z){var st=ot[Z];if(wt===0&&(wt=ct,(T+=H)>=B&&(H=4*At+4*e*(J-1),T=x+(ct+At)*(J<<1),J>>=1)),st===nt)T+=4;else{var gt=n[ft+3*st],_t=n[ft+3*st+1],kt=n[ft+3*st+2];z[T++]=kt,z[T++]=_t,z[T++]=gt,z[T++]=255}--wt}},this.decodeAndBlitFrameRGBA=function(E,z){var U=this.frameInfo(E),rt=U.width*U.height;if(rt>536870912)throw new Error(\"Image dimensions exceed 512MB, which is too large.\");var ot=new Uint8Array(rt);Wu(n,U.data_offset,ot,rt);var ft=U.palette_offset,nt=U.transparent_index;nt===null&&(nt=256);var ct=U.width,At=e-ct,wt=ct,x=4*(U.y*e+U.x),B=4*((U.y+U.height)*e+U.x),T=x,H=4*At;U.interlaced===!0&&(H+=4*e*7);for(var J=8,Z=0,at=ot.length;Z<at;++Z){var st=ot[Z];if(wt===0&&(wt=ct,(T+=H)>=B&&(H=4*At+4*e*(J-1),T=x+(ct+At)*(J<<1),J>>=1)),st===nt)T+=4;else{var gt=n[ft+3*st],_t=n[ft+3*st+1],kt=n[ft+3*st+2];z[T++]=gt,z[T++]=_t,z[T++]=kt,z[T++]=255}--wt}}}function Wu(n,t,e,i){for(var o=n[t++],a=1<<o,c=a+1,l=c+1,h=o+1,d=(1<<h)-1,m=0,_=0,k=0,p=n[t++],j=new Int32Array(4096),O=null;;){for(;m<16&&p!==0;)_|=n[t++]<<m,m+=8,p===1?p=n[t++]:--p;if(m<h)break;var M=_&d;if(_>>=h,m-=h,M!==a){if(M===c)break;for(var S=M<l?M:O,V=0,G=S;G>a;)G=j[G]>>8,++V;var q=G;if(k+V+(S!==M?1:0)>i)return void Le.log(\"Warning, gif stream longer than expected.\");e[k++]=q;var it=k+=V;for(S!==M&&(e[k++]=q),G=S;V--;)G=j[G],e[--it]=255&G,G>>=8;O!==null&&l<4096&&(j[l++]=O<<8|q,l>=d+1&&h<12&&(++h,d=d<<1|1)),O=M}else l=c+1,d=(1<<(h=o+1))-1,O=null}return k!==i&&Le.log(\"Warning, gif stream shorter than expected.\"),e}function Ro(n){var t,e,i,o,a,c=Math.floor,l=new Array(64),h=new Array(64),d=new Array(64),m=new Array(64),_=new Array(65535),k=new Array(65535),p=new Array(64),j=new Array(64),O=[],M=0,S=7,V=new Array(64),G=new Array(64),q=new Array(64),it=new Array(256),vt=new Array(2048),dt=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],X=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],tt=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],N=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],E=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],z=[0,1,2,3,4,5,6,7,8,9,10,11],U=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],rt=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function ot(x,B){for(var T=0,H=0,J=new Array,Z=1;Z<=16;Z++){for(var at=1;at<=x[Z];at++)J[B[H]]=[],J[B[H]][0]=T,J[B[H]][1]=Z,H++,T++;T*=2}return J}function ft(x){for(var B=x[0],T=x[1]-1;T>=0;)B&1<<T&&(M|=1<<S),T--,--S<0&&(M==255?(nt(255),nt(0)):nt(M),S=7,M=0)}function nt(x){O.push(x)}function ct(x){nt(x>>8&255),nt(255&x)}function At(x,B,T,H,J){for(var Z,at=J[0],st=J[240],gt=(function(yt,Wt){var Ct,zt,qt,ve,ue,Zt,he,fe,Bt,ne,Tt=0;for(Bt=0;Bt<8;++Bt){Ct=yt[Tt],zt=yt[Tt+1],qt=yt[Tt+2],ve=yt[Tt+3],ue=yt[Tt+4],Zt=yt[Tt+5],he=yt[Tt+6];var ze=Ct+(fe=yt[Tt+7]),ge=Ct-fe,se=zt+he,oe=zt-he,Oe=qt+Zt,Ut=qt-Zt,Se=ve+ue,Yt=ve-ue,Qt=ze+Se,je=ze-Se,le=se+Oe,Vt=se-Oe;yt[Tt]=Qt+le,yt[Tt+4]=Qt-le;var be=.707106781*(Vt+je);yt[Tt+2]=je+be,yt[Tt+6]=je-be;var ti=.382683433*((Qt=Yt+Ut)-(Vt=oe+ge)),fn=.5411961*Qt+ti,mr=1.306562965*Vt+ti,nr=.707106781*(le=Ut+oe),Gt=ge+nr,vr=ge-nr;yt[Tt+5]=vr+fn,yt[Tt+3]=vr-fn,yt[Tt+1]=Gt+mr,yt[Tt+7]=Gt-mr,Tt+=8}for(Tt=0,Bt=0;Bt<8;++Bt){Ct=yt[Tt],zt=yt[Tt+8],qt=yt[Tt+16],ve=yt[Tt+24],ue=yt[Tt+32],Zt=yt[Tt+40],he=yt[Tt+48];var br=Ct+(fe=yt[Tt+56]),Rn=Ct-fe,Tn=zt+he,Te=zt-he,rn=qt+Zt,an=qt-Zt,ei=ve+ue,Or=ve-ue,Vn=br+ei,rr=br-ei,Gn=Tn+rn,Yn=Tn-rn;yt[Tt]=Vn+Gn,yt[Tt+32]=Vn-Gn;var Dn=.707106781*(Yn+rr);yt[Tt+16]=rr+Dn,yt[Tt+48]=rr-Dn;var ni=.382683433*((Vn=Or+an)-(Yn=Te+Rn)),ir=.5411961*Vn+ni,ri=1.306562965*Yn+ni,Ci=.707106781*(Gn=an+Te),Fi=Rn+Ci,Ei=Rn-Ci;yt[Tt+40]=Ei+ir,yt[Tt+24]=Ei-ir,yt[Tt+8]=Fi+ri,yt[Tt+56]=Fi-ri,Tt++}for(Bt=0;Bt<64;++Bt)ne=yt[Bt]*Wt[Bt],p[Bt]=ne>0?ne+.5|0:ne-.5|0;return p})(x,B),_t=0;_t<64;++_t)j[dt[_t]]=gt[_t];var kt=j[0]-T;T=j[0],kt==0?ft(H[0]):(ft(H[k[Z=32767+kt]]),ft(_[Z]));for(var St=63;St>0&&j[St]==0;)St--;if(St==0)return ft(at),T;for(var Dt,P=1;P<=St;){for(var Lt=P;j[P]==0&&P<=St;)++P;var ae=P-Lt;if(ae>=16){Dt=ae>>4;for(var Ht=1;Ht<=Dt;++Ht)ft(st);ae&=15}Z=32767+j[P],ft(J[(ae<<4)+k[Z]]),ft(_[Z]),P++}return St!=63&&ft(at),T}function wt(x){x=Math.min(Math.max(x,1),100),a!=x&&((function(B){for(var T=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],H=0;H<64;H++){var J=c((T[H]*B+50)/100);J=Math.min(Math.max(J,1),255),l[dt[H]]=J}for(var Z=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],at=0;at<64;at++){var st=c((Z[at]*B+50)/100);st=Math.min(Math.max(st,1),255),h[dt[at]]=st}for(var gt=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],_t=0,kt=0;kt<8;kt++)for(var St=0;St<8;St++)d[_t]=1/(l[dt[_t]]*gt[kt]*gt[St]*8),m[_t]=1/(h[dt[_t]]*gt[kt]*gt[St]*8),_t++})(x<50?Math.floor(5e3/x):Math.floor(200-2*x)),a=x)}this.encode=function(x,B){B&&wt(B),O=new Array,M=0,S=7,ct(65496),ct(65504),ct(16),nt(74),nt(70),nt(73),nt(70),nt(0),nt(1),nt(1),nt(0),ct(1),ct(1),nt(0),nt(0),(function(){ct(65499),ct(132),nt(0);for(var zt=0;zt<64;zt++)nt(l[zt]);nt(1);for(var qt=0;qt<64;qt++)nt(h[qt])})(),(function(zt,qt){ct(65472),ct(17),nt(8),ct(qt),ct(zt),nt(3),nt(1),nt(17),nt(0),nt(2),nt(17),nt(1),nt(3),nt(17),nt(1)})(x.width,x.height),(function(){ct(65476),ct(418),nt(0);for(var zt=0;zt<16;zt++)nt(X[zt+1]);for(var qt=0;qt<=11;qt++)nt(R[qt]);nt(16);for(var ve=0;ve<16;ve++)nt(tt[ve+1]);for(var ue=0;ue<=161;ue++)nt(N[ue]);nt(1);for(var Zt=0;Zt<16;Zt++)nt(E[Zt+1]);for(var he=0;he<=11;he++)nt(z[he]);nt(17);for(var fe=0;fe<16;fe++)nt(U[fe+1]);for(var Bt=0;Bt<=161;Bt++)nt(rt[Bt])})(),ct(65498),ct(12),nt(3),nt(1),nt(0),nt(2),nt(17),nt(3),nt(17),nt(0),nt(63),nt(0);var T=0,H=0,J=0;M=0,S=7,this.encode.displayName=\"_encode_\";for(var Z,at,st,gt,_t,kt,St,Dt,P,Lt=x.data,ae=x.width,Ht=x.height,yt=4*ae,Wt=0;Wt<Ht;){for(Z=0;Z<yt;){for(_t=yt*Wt+Z,St=-1,Dt=0,P=0;P<64;P++)kt=_t+(Dt=P>>3)*yt+(St=4*(7&P)),Wt+Dt>=Ht&&(kt-=yt*(Wt+1+Dt-Ht)),Z+St>=yt&&(kt-=Z+St-yt+4),at=Lt[kt++],st=Lt[kt++],gt=Lt[kt++],V[P]=(vt[at]+vt[st+256|0]+vt[gt+512|0]>>16)-128,G[P]=(vt[at+768|0]+vt[st+1024|0]+vt[gt+1280|0]>>16)-128,q[P]=(vt[at+1280|0]+vt[st+1536|0]+vt[gt+1792|0]>>16)-128;T=At(V,d,T,t,i),H=At(G,m,H,e,o),J=At(q,m,J,e,o),Z+=32}Wt+=8}if(S>=0){var Ct=[];Ct[1]=S+1,Ct[0]=(1<<S+1)-1,ft(Ct)}return ct(65497),new Uint8Array(O)},n=n||50,(function(){for(var x=String.fromCharCode,B=0;B<256;B++)it[B]=x(B)})(),t=ot(X,R),e=ot(E,z),i=ot(tt,N),o=ot(U,rt),(function(){for(var x=1,B=2,T=1;T<=15;T++){for(var H=x;H<B;H++)k[32767+H]=T,_[32767+H]=[],_[32767+H][1]=T,_[32767+H][0]=H;for(var J=-(B-1);J<=-x;J++)k[32767+J]=T,_[32767+J]=[],_[32767+J][1]=T,_[32767+J][0]=B-1+J;x<<=1,B<<=1}})(),(function(){for(var x=0;x<256;x++)vt[x]=19595*x,vt[x+256|0]=38470*x,vt[x+512|0]=7471*x+32768,vt[x+768|0]=-11059*x,vt[x+1024|0]=-21709*x,vt[x+1280|0]=32768*x+8421375,vt[x+1536|0]=-27439*x,vt[x+1792|0]=-5329*x})(),wt(n)}function Zn(n,t){if(this.pos=0,this.buffer=n,this.datav=new DataView(n.buffer),this.is_with_alpha=!!t,this.bottom_up=!0,this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]),this.pos+=2,[\"BM\",\"BA\",\"CI\",\"CP\",\"IC\",\"PT\"].indexOf(this.flag)===-1)throw new Error(\"Invalid BMP File\");this.parseHeader(),this.parseBGR()}function Vu(n){function t(R){if(!R)throw Error(\"assert :P\")}function e(R,tt,N){for(var E=0;4>E;E++)if(R[tt+E]!=N.charCodeAt(E))return!0;return!1}function i(R,tt,N,E,z){for(var U=0;U<z;U++)R[tt+U]=N[E+U]}function o(R,tt,N,E){for(var z=0;z<E;z++)R[tt+z]=N}function a(R){return new Int32Array(R)}function c(R,tt){for(var N=[],E=0;E<R;E++)N.push(new tt);return N}function l(R,tt){var N=[];return(function E(z,U,rt){for(var ot=rt[U],ft=0;ft<ot&&(z.push(rt.length>U+1?[]:new tt),!(rt.length<U+1));ft++)E(z[ft],U+1,rt)})(N,0,R),N}var h=function(){var R=this;function tt(r,s){for(var f=1<<s-1>>>0;r&f;)f>>>=1;return f?(r&f-1)+f:r}function N(r,s,f,g,b){t(!(g%f));do r[s+(g-=f)]=b;while(0<g)}function E(r,s,f,g,b){if(t(2328>=b),512>=b)var w=a(512);else if((w=a(b))==null)return 0;return(function(y,A,L,C,W,et){var F,Y,$=A,ut=1<<L,Q=a(16),ht=a(16);for(t(W!=0),t(C!=null),t(y!=null),t(0<L),Y=0;Y<W;++Y){if(15<C[Y])return 0;++Q[C[Y]]}if(Q[0]==W)return 0;for(ht[1]=0,F=1;15>F;++F){if(Q[F]>1<<F)return 0;ht[F+1]=ht[F]+Q[F]}for(Y=0;Y<W;++Y)F=C[Y],0<C[Y]&&(et[ht[F]++]=Y);if(ht[15]==1)return(C=new z).g=0,C.value=et[0],N(y,$,1,ut,C),ut;var pt,xt=-1,bt=ut-1,Rt=0,Pt=1,re=1,Ot=1<<L;for(Y=0,F=1,W=2;F<=L;++F,W<<=1){if(Pt+=re<<=1,0>(re-=Q[F]))return 0;for(;0<Q[F];--Q[F])(C=new z).g=F,C.value=et[Y++],N(y,$+Rt,W,Ot,C),Rt=tt(Rt,F)}for(F=L+1,W=2;15>=F;++F,W<<=1){if(Pt+=re<<=1,0>(re-=Q[F]))return 0;for(;0<Q[F];--Q[F]){if(C=new z,(Rt&bt)!=xt){for($+=Ot,pt=1<<(xt=F)-L;15>xt&&!(0>=(pt-=Q[xt]));)++xt,pt<<=1;ut+=Ot=1<<(pt=xt-L),y[A+(xt=Rt&bt)].g=pt+L,y[A+xt].value=$-A-xt}C.g=F-L,C.value=et[Y++],N(y,$+(Rt>>L),W,Ot,C),Rt=tt(Rt,F)}}return Pt!=2*ht[15]-1?0:ut})(r,s,f,g,b,w)}function z(){this.value=this.g=0}function U(){this.value=this.g=0}function rt(){this.G=c(5,z),this.H=a(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=c(Vi,U)}function ot(r,s,f,g){t(r!=null),t(s!=null),t(2147483648>g),r.Ca=254,r.I=0,r.b=-8,r.Ka=0,r.oa=s,r.pa=f,r.Jd=s,r.Yc=f+g,r.Zc=4<=g?f+g-4+1:f,at(r)}function ft(r,s){for(var f=0;0<s--;)f|=gt(r,128)<<s;return f}function nt(r,s){var f=ft(r,s);return st(r)?-f:f}function ct(r,s,f,g){var b,w=0;for(t(r!=null),t(s!=null),t(4294967288>g),r.Sb=g,r.Ra=0,r.u=0,r.h=0,4<g&&(g=4),b=0;b<g;++b)w+=s[f+b]<<8*b;r.Ra=w,r.bb=g,r.oa=s,r.pa=f}function At(r){for(;8<=r.u&&r.bb<r.Sb;)r.Ra>>>=8,r.Ra+=r.oa[r.pa+r.bb]<<yn-8>>>0,++r.bb,r.u-=8;H(r)&&(r.h=1,r.u=0)}function wt(r,s){if(t(0<=s),!r.h&&s<=va){var f=T(r)&di[s];return r.u+=s,At(r),f}return r.h=1,r.u=0}function x(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function B(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function T(r){return r.Ra>>>(r.u&yn-1)>>>0}function H(r){return t(r.bb<=r.Sb),r.h||r.bb==r.Sb&&r.u>yn}function J(r,s){r.u=s,r.h=H(r)}function Z(r){r.u>=Nn&&(t(r.u>=Nn),At(r))}function at(r){t(r!=null&&r.oa!=null),r.pa<r.Zc?(r.I=(r.oa[r.pa++]|r.I<<8)>>>0,r.b+=8):(t(r!=null&&r.oa!=null),r.pa<r.Yc?(r.b+=8,r.I=r.oa[r.pa++]|r.I<<8):r.Ka?r.b=0:(r.I<<=8,r.b+=8,r.Ka=1))}function st(r){return ft(r,1)}function gt(r,s){var f=r.Ca;0>r.b&&at(r);var g=r.b,b=f*s>>>8,w=(r.I>>>g>b)+0;for(w?(f-=b,r.I-=b+1<<g>>>0):f=b+1,g=f,b=0;256<=g;)b+=8,g>>=8;return g=7^b+Gi[g],r.b-=g,r.Ca=(f<<g)-1,w}function _t(r,s,f){r[s+0]=f>>24&255,r[s+1]=f>>16&255,r[s+2]=f>>8&255,r[s+3]=255&f}function kt(r,s){return r[s+0]|r[s+1]<<8}function St(r,s){return kt(r,s)|r[s+2]<<16}function Dt(r,s){return kt(r,s)|kt(r,s+2)<<16}function P(r,s){var f=1<<s;return t(r!=null),t(0<s),r.X=a(f),r.X==null?0:(r.Mb=32-s,r.Xa=s,1)}function Lt(r,s){t(r!=null),t(s!=null),t(r.Xa==s.Xa),i(s.X,0,r.X,0,1<<s.Xa)}function ae(){this.X=[],this.Xa=this.Mb=0}function Ht(r,s,f,g){t(f!=null),t(g!=null);var b=f[0],w=g[0];return b==0&&(b=(r*w+s/2)/s),w==0&&(w=(s*b+r/2)/r),0>=b||0>=w?0:(f[0]=b,g[0]=w,1)}function yt(r,s){return r+(1<<s)-1>>>s}function Wt(r,s){return((4278255360&r)+(4278255360&s)>>>0&4278255360)+((16711935&r)+(16711935&s)>>>0&16711935)>>>0}function Ct(r,s){R[s]=function(f,g,b,w,y,A,L){var C;for(C=0;C<y;++C){var W=R[r](A[L+C-1],b,w+C);A[L+C]=Wt(f[g+C],W)}}}function zt(){this.ud=this.hd=this.jd=0}function qt(r,s){return((4278124286&(r^s))>>>1)+(r&s)>>>0}function ve(r){return 0<=r&&256>r?r:0>r?0:255<r?255:void 0}function ue(r,s){return ve(r+(r-s+.5>>1))}function Zt(r,s,f){return Math.abs(s-f)-Math.abs(r-f)}function he(r,s,f,g,b,w,y){for(g=w[y-1],f=0;f<b;++f)w[y+f]=g=Wt(r[s+f],g)}function fe(r,s,f,g,b){var w;for(w=0;w<f;++w){var y=r[s+w],A=y>>8&255,L=16711935&(L=(L=16711935&y)+((A<<16)+A));g[b+w]=(4278255360&y)+L>>>0}}function Bt(r,s){s.jd=255&r,s.hd=r>>8&255,s.ud=r>>16&255}function ne(r,s,f,g,b,w){var y;for(y=0;y<g;++y){var A=s[f+y],L=A>>>8,C=A,W=255&(W=(W=A>>>16)+((r.jd<<24>>24)*(L<<24>>24)>>>5));C=255&(C=(C+=(r.hd<<24>>24)*(L<<24>>24)>>>5)+((r.ud<<24>>24)*(W<<24>>24)>>>5)),b[w+y]=(4278255360&A)+(W<<16)+C}}function Tt(r,s,f,g,b){R[s]=function(w,y,A,L,C,W,et,F,Y){for(L=et;L<F;++L)for(et=0;et<Y;++et)C[W++]=b(A[g(w[y++])])},R[r]=function(w,y,A,L,C,W,et){var F=8>>w.b,Y=w.Ea,$=w.K[0],ut=w.w;if(8>F)for(w=(1<<w.b)-1,ut=(1<<F)-1;y<A;++y){var Q,ht=0;for(Q=0;Q<Y;++Q)Q&w||(ht=g(L[C++])),W[et++]=b($[ht&ut]),ht>>=F}else R[\"VP8LMapColor\"+f](L,C,$,ut,W,et,y,A,Y)}}function ze(r,s,f,g,b){for(f=s+f;s<f;){var w=r[s++];g[b++]=w>>16&255,g[b++]=w>>8&255,g[b++]=255&w}}function ge(r,s,f,g,b){for(f=s+f;s<f;){var w=r[s++];g[b++]=w>>16&255,g[b++]=w>>8&255,g[b++]=255&w,g[b++]=w>>24&255}}function se(r,s,f,g,b){for(f=s+f;s<f;){var w=(y=r[s++])>>16&240|y>>12&15,y=240&y|y>>28&15;g[b++]=w,g[b++]=y}}function oe(r,s,f,g,b){for(f=s+f;s<f;){var w=(y=r[s++])>>16&248|y>>13&7,y=y>>5&224|y>>3&31;g[b++]=w,g[b++]=y}}function Oe(r,s,f,g,b){for(f=s+f;s<f;){var w=r[s++];g[b++]=255&w,g[b++]=w>>8&255,g[b++]=w>>16&255}}function Ut(r,s,f,g,b,w){if(w==0)for(f=s+f;s<f;)_t(g,((w=r[s++])[0]>>24|w[1]>>8&65280|w[2]<<8&16711680|w[3]<<24)>>>0),b+=32;else i(g,b,r,s,f)}function Se(r,s){R[s][0]=R[r+\"0\"],R[s][1]=R[r+\"1\"],R[s][2]=R[r+\"2\"],R[s][3]=R[r+\"3\"],R[s][4]=R[r+\"4\"],R[s][5]=R[r+\"5\"],R[s][6]=R[r+\"6\"],R[s][7]=R[r+\"7\"],R[s][8]=R[r+\"8\"],R[s][9]=R[r+\"9\"],R[s][10]=R[r+\"10\"],R[s][11]=R[r+\"11\"],R[s][12]=R[r+\"12\"],R[s][13]=R[r+\"13\"],R[s][14]=R[r+\"0\"],R[s][15]=R[r+\"0\"]}function Yt(r){return r==eo||r==no||r==ls||r==ro}function Qt(){this.eb=[],this.size=this.A=this.fb=0}function je(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function le(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new Qt,this.f.kb=new je,this.sd=null}function Vt(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function be(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function ti(r){return alert(\"todo:WebPSamplerProcessPlane\"),r.T}function fn(r,s){var f=r.T,g=s.ba.f.RGBA,b=g.eb,w=g.fb+r.ka*g.A,y=Hn[s.ba.S],A=r.y,L=r.O,C=r.f,W=r.N,et=r.ea,F=r.W,Y=s.cc,$=s.dc,ut=s.Mc,Q=s.Nc,ht=r.ka,pt=r.ka+r.T,xt=r.U,bt=xt+1>>1;for(ht==0?y(A,L,null,null,C,W,et,F,C,W,et,F,b,w,null,null,xt):(y(s.ec,s.fc,A,L,Y,$,ut,Q,C,W,et,F,b,w-g.A,b,w,xt),++f);ht+2<pt;ht+=2)Y=C,$=W,ut=et,Q=F,W+=r.Rc,F+=r.Rc,w+=2*g.A,y(A,(L+=2*r.fa)-r.fa,A,L,Y,$,ut,Q,C,W,et,F,b,w-g.A,b,w,xt);return L+=r.fa,r.j+pt<r.o?(i(s.ec,s.fc,A,L,xt),i(s.cc,s.dc,C,W,bt),i(s.Mc,s.Nc,et,F,bt),f--):1&pt||y(A,L,null,null,C,W,et,F,C,W,et,F,b,w+g.A,null,null,xt),f}function mr(r,s,f){var g=r.F,b=[r.J];if(g!=null){var w=r.U,y=s.ba.S,A=y==os||y==ls;s=s.ba.f.RGBA;var L=[0],C=r.ka;L[0]=r.T,r.Kb&&(C==0?--L[0]:(--C,b[0]-=r.width),r.j+r.ka+r.T==r.o&&(L[0]=r.o-r.j-C));var W=s.eb;C=s.fb+C*s.A,r=al(g,b[0],r.width,w,L,W,C+(A?0:3),s.A),t(f==L),r&&Yt(y)&&xa(W,C,A,w,L,s.A)}return 0}function nr(r){var s=r.ma,f=s.ba.S,g=11>f,b=f==as||f==ss||f==os||f==to||f==12||Yt(f);if(s.memory=null,s.Ib=null,s.Jb=null,s.Nd=null,!Un(s.Oa,r,b?11:12))return 0;if(b&&Yt(f)&&Nr(),r.da)alert(\"todo:use_scaling\");else{if(g){if(s.Ib=ti,r.Kb){if(f=r.U+1>>1,s.memory=a(r.U+2*f),s.memory==null)return 0;s.ec=s.memory,s.fc=0,s.cc=s.ec,s.dc=s.fc+r.U,s.Mc=s.cc,s.Nc=s.dc+f,s.Ib=fn,Nr()}}else alert(\"todo:EmitYUV\");b&&(s.Jb=mr,g&&Re())}if(g&&!xl){for(r=0;256>r;++r)rh[r]=89858*(r-128)+fs>>us,sh[r]=-22014*(r-128)+fs,ah[r]=-45773*(r-128),ih[r]=113618*(r-128)+fs>>us;for(r=Aa;r<so;++r)s=76283*(r-16)+fs>>us,oh[r-Aa]=ar(s,255),lh[r-Aa]=ar(s+8>>4,15);xl=1}return 1}function Gt(r){var s=r.ma,f=r.U,g=r.T;return t(!(1&r.ka)),0>=f||0>=g?0:(f=s.Ib(r,s),s.Jb!=null&&s.Jb(r,s,f),s.Dc+=f,1)}function vr(r){r.ma.memory=null}function br(r,s,f,g){return wt(r,8)!=47?0:(s[0]=wt(r,14)+1,f[0]=wt(r,14)+1,g[0]=wt(r,1),wt(r,3)!=0?0:!r.h)}function Rn(r,s){if(4>r)return r+1;var f=r-2>>1;return(2+(1&r)<<f)+wt(s,f)+1}function Tn(r,s){return 120<s?s-120:1<=(f=((f=Hf[s-1])>>4)*r+(8-(15&f)))?f:1;var f}function Te(r,s,f){var g=T(f),b=r[s+=255&g].g-8;return 0<b&&(J(f,f.u+8),g=T(f),s+=r[s].value,s+=g&(1<<b)-1),J(f,f.u+r[s].g),r[s].value}function rn(r,s,f){return f.g+=r.g,f.value+=r.value<<s>>>0,t(8>=f.g),r.g}function an(r,s,f){var g=r.xc;return t((s=g==0?0:r.vc[r.md*(f>>g)+(s>>g)])<r.Wb),r.Ya[s]}function ei(r,s,f,g){var b=r.ab,w=r.c*s,y=r.C;s=y+s;var A=f,L=g;for(g=r.Ta,f=r.Ua;0<b--;){var C=r.gc[b],W=y,et=s,F=A,Y=L,$=(L=g,A=f,C.Ea);switch(t(W<et),t(et<=C.nc),C.hc){case 2:Yi(F,Y,(et-W)*$,L,A);break;case 0:var ut=W,Q=et,ht=L,pt=A,xt=(Ot=C).Ea;ut==0&&(Tr(F,Y,null,null,1,ht,pt),he(F,Y+1,0,0,xt-1,ht,pt+1),Y+=xt,pt+=xt,++ut);for(var bt=1<<Ot.b,Rt=bt-1,Pt=yt(xt,Ot.b),re=Ot.K,Ot=Ot.w+(ut>>Ot.b)*Pt;ut<Q;){var ce=re,Qe=Ot,ie=1;for(Dr(F,Y,ht,pt-xt,1,ht,pt);ie<xt;){var jt=(ie&~Rt)+bt;jt>xt&&(jt=xt),(0,Jn[ce[Qe++]>>8&15])(F,Y+ +ie,ht,pt+ie-xt,jt-ie,ht,pt+ie),ie=jt}Y+=xt,pt+=xt,++ut&Rt||(Ot+=Pt)}et!=C.nc&&i(L,A-$,L,A+(et-W-1)*$,$);break;case 1:for($=F,Q=Y,xt=(F=C.Ea)-(pt=F&~(ht=(Y=1<<C.b)-1)),ut=yt(F,C.b),bt=C.K,C=C.w+(W>>C.b)*ut;W<et;){for(Rt=bt,Pt=C,re=new zt,Ot=Q+pt,ce=Q+F;Q<Ot;)Bt(Rt[Pt++],re),gi(re,$,Q,Y,L,A),Q+=Y,A+=Y;Q<ce&&(Bt(Rt[Pt++],re),gi(re,$,Q,xt,L,A),Q+=xt,A+=xt),++W&ht||(C+=ut)}break;case 3:if(F==L&&Y==A&&0<C.b){for(Q=L,F=$=A+(et-W)*$-(pt=(et-W)*yt(C.Ea,C.b)),Y=L,ht=A,ut=[],pt=(xt=pt)-1;0<=pt;--pt)ut[pt]=Y[ht+pt];for(pt=xt-1;0<=pt;--pt)Q[F+pt]=ut[pt];pi(C,W,et,L,$,L,A)}else pi(C,W,et,F,Y,L,A)}A=g,L=f}L!=f&&i(g,f,A,L,w)}function Or(r,s){var f=r.V,g=r.Ba+r.c*r.C,b=s-r.C;if(t(s<=r.l.o),t(16>=b),0<b){var w=r.l,y=r.Ta,A=r.Ua,L=w.width;if(ei(r,b,f,g),b=A=[A],t((f=r.C)<(g=s)),t(w.v<w.va),g>w.o&&(g=w.o),f<w.j){var C=w.j-f;f=w.j,b[0]+=C*L}if(f>=g?f=0:(b[0]+=4*w.v,w.ka=f-w.j,w.U=w.va-w.v,w.T=g-f,f=1),f){if(A=A[0],11>(f=r.ca).S){var W=f.f.RGBA,et=(g=f.S,b=w.U,w=w.T,C=W.eb,W.A),F=w;for(W=W.fb+r.Ma*W.A;0<F--;){var Y=y,$=A,ut=b,Q=C,ht=W;switch(g){case is:ba(Y,$,ut,Q,ht);break;case as:wa(Y,$,ut,Q,ht);break;case eo:wa(Y,$,ut,Q,ht),xa(Q,ht,0,ut,1,0);break;case cl:vi(Y,$,ut,Q,ht);break;case ss:Ut(Y,$,ut,Q,ht,1);break;case no:Ut(Y,$,ut,Q,ht,1),xa(Q,ht,0,ut,1,0);break;case os:Ut(Y,$,ut,Q,ht,0);break;case ls:Ut(Y,$,ut,Q,ht,0),xa(Q,ht,1,ut,1,0);break;case to:Ji(Y,$,ut,Q,ht);break;case ro:Ji(Y,$,ut,Q,ht),il(Q,ht,ut,1,0);break;case dl:mi(Y,$,ut,Q,ht);break;default:t(0)}A+=L,W+=et}r.Ma+=w}else alert(\"todo:EmitRescaledRowsYUVA\");t(r.Ma<=f.height)}}r.C=s,t(r.C<=r.i)}function Vn(r){var s;if(0<r.ua)return 0;for(s=0;s<r.Wb;++s){var f=r.Ya[s].G,g=r.Ya[s].H;if(0<f[1][g[1]+0].g||0<f[2][g[2]+0].g||0<f[3][g[3]+0].g)return 0}return 1}function rr(r,s,f,g,b,w){if(r.Z!=0){var y=r.qd,A=r.rd;for(t(Hr[r.Z]!=null);s<f;++s)Hr[r.Z](y,A,g,b,g,b,w),y=g,A=b,b+=w;r.qd=y,r.rd=A}}function Gn(r,s){var f=r.l.ma,g=f.Z==0||f.Z==1?r.l.j:r.C;if(g=r.C<g?g:r.C,t(s<=r.l.o),s>g){var b=r.l.width,w=f.ca,y=f.tb+b*g,A=r.V,L=r.Ba+r.c*g,C=r.gc;t(r.ab==1),t(C[0].hc==3),Zs(C[0],g,s,A,L,w,y),rr(f,g,s,w,y,b)}r.C=r.Ma=s}function Yn(r,s,f,g,b,w,y){var A=r.$/g,L=r.$%g,C=r.m,W=r.s,et=f+r.$,F=et;b=f+g*b;var Y=f+g*w,$=280+W.ua,ut=r.Pb?A:16777216,Q=0<W.ua?W.Wa:null,ht=W.wc,pt=et<Y?an(W,L,A):null;t(r.C<w),t(Y<=b);var xt=!1;t:for(;;){for(;xt||et<Y;){var bt=0;if(A>=ut){var Rt=et-f;t((ut=r).Pb),ut.wd=ut.m,ut.xd=Rt,0<ut.s.ua&&Lt(ut.s.Wa,ut.s.vb),ut=A+Vf}if(L&ht||(pt=an(W,L,A)),t(pt!=null),pt.Qb&&(s[et]=pt.qb,xt=!0),!xt)if(Z(C),pt.jc){bt=C,Rt=s;var Pt=et,re=pt.pd[T(bt)&Vi-1];t(pt.jc),256>re.g?(J(bt,bt.u+re.g),Rt[Pt]=re.value,bt=0):(J(bt,bt.u+re.g-256),t(256<=re.value),bt=re.value),bt==0&&(xt=!0)}else bt=Te(pt.G[0],pt.H[0],C);if(C.h)break;if(xt||256>bt){if(!xt)if(pt.nd)s[et]=(pt.qb|bt<<8)>>>0;else{if(Z(C),xt=Te(pt.G[1],pt.H[1],C),Z(C),Rt=Te(pt.G[2],pt.H[2],C),Pt=Te(pt.G[3],pt.H[3],C),C.h)break;s[et]=(Pt<<24|xt<<16|bt<<8|Rt)>>>0}if(xt=!1,++et,++L>=g&&(L=0,++A,y!=null&&A<=w&&!(A%16)&&y(r,A),Q!=null))for(;F<et;)bt=s[F++],Q.X[(506832829*bt&4294967295)>>>Q.Mb]=bt}else if(280>bt){if(bt=Rn(bt-256,C),Rt=Te(pt.G[4],pt.H[4],C),Z(C),Rt=Tn(g,Rt=Rn(Rt,C)),C.h)break;if(et-f<Rt||b-et<bt)break t;for(Pt=0;Pt<bt;++Pt)s[et+Pt]=s[et+Pt-Rt];for(et+=bt,L+=bt;L>=g;)L-=g,++A,y!=null&&A<=w&&!(A%16)&&y(r,A);if(t(et<=b),L&ht&&(pt=an(W,L,A)),Q!=null)for(;F<et;)bt=s[F++],Q.X[(506832829*bt&4294967295)>>>Q.Mb]=bt}else{if(!(bt<$))break t;for(xt=bt-280,t(Q!=null);F<et;)bt=s[F++],Q.X[(506832829*bt&4294967295)>>>Q.Mb]=bt;bt=et,t(!(xt>>>(Rt=Q).Xa)),s[bt]=Rt.X[xt],xt=!0}xt||t(C.h==H(C))}if(r.Pb&&C.h&&et<b)t(r.m.h),r.a=5,r.m=r.wd,r.$=r.xd,0<r.s.ua&&Lt(r.s.vb,r.s.Wa);else{if(C.h)break t;y?.(r,A>w?w:A),r.a=0,r.$=et-f}return 1}return r.a=3,0}function Dn(r){t(r!=null),r.vc=null,r.yc=null,r.Ya=null;var s=r.Wa;s!=null&&(s.X=null),r.vb=null,t(r!=null)}function ni(){var r=new Et;return r==null?null:(r.a=0,r.xb=ml,Se(\"Predictor\",\"VP8LPredictors\"),Se(\"Predictor\",\"VP8LPredictors_C\"),Se(\"PredictorAdd\",\"VP8LPredictorsAdd\"),Se(\"PredictorAdd\",\"VP8LPredictorsAdd_C\"),Yi=fe,gi=ne,ba=ze,wa=ge,Ji=se,mi=oe,vi=Oe,R.VP8LMapColor32b=$e,R.VP8LMapColor8b=fr,r)}function ir(r,s,f,g,b){var w=1,y=[r],A=[s],L=g.m,C=g.s,W=null,et=0;t:for(;;){if(f)for(;w&&wt(L,1);){var F=y,Y=A,$=g,ut=1,Q=$.m,ht=$.gc[$.ab],pt=wt(Q,2);if($.Oc&1<<pt)w=0;else{switch($.Oc|=1<<pt,ht.hc=pt,ht.Ea=F[0],ht.nc=Y[0],ht.K=[null],++$.ab,t(4>=$.ab),pt){case 0:case 1:ht.b=wt(Q,3)+2,ut=ir(yt(ht.Ea,ht.b),yt(ht.nc,ht.b),0,$,ht.K),ht.K=ht.K[0];break;case 3:var xt,bt=wt(Q,8)+1,Rt=16<bt?0:4<bt?1:2<bt?2:3;if(F[0]=yt(ht.Ea,Rt),ht.b=Rt,xt=ut=ir(bt,1,0,$,ht.K)){var Pt,re=bt,Ot=ht,ce=1<<(8>>Ot.b),Qe=a(ce);if(Qe==null)xt=0;else{var ie=Ot.K[0],jt=Ot.w;for(Qe[0]=Ot.K[0][0],Pt=1;Pt<1*re;++Pt)Qe[Pt]=Wt(ie[jt+Pt],Qe[Pt-1]);for(;Pt<4*ce;++Pt)Qe[Pt]=0;Ot.K[0]=null,Ot.K[0]=Qe,xt=1}}ut=xt;break;case 2:break;default:t(0)}w=ut}}if(y=y[0],A=A[0],w&&wt(L,1)&&!(w=1<=(et=wt(L,4))&&11>=et)){g.a=3;break t}var Nt;if(Nt=w)e:{var We,ee,pe,Fe=g,on=y,xn=A,De=et,pn=f,_n=Fe.m,tn=Fe.s,me=[null],we=1,qe=0,ye=Wf[De];n:for(;;){if(pn&&wt(_n,1)){var ln=wt(_n,3)+2,Xn=yt(on,ln),Ve=yt(xn,ln),Ln=Xn*Ve;if(!ir(Xn,Ve,0,Fe,me))break n;for(me=me[0],tn.xc=ln,We=0;We<Ln;++We){var Ne=me[We]>>8&65535;me[We]=Ne,Ne>=we&&(we=Ne+1)}}if(_n.h)break n;for(ee=0;5>ee;++ee){var en=pl[ee];!ee&&0<De&&(en+=1<<De),qe<en&&(qe=en)}var Cn=c(we*ye,z),An=we,Fn=c(An,rt);if(Fn==null)var En=null;else t(65536>=An),En=Fn;var Sn=a(qe);if(En==null||Sn==null||Cn==null){Fe.a=1;break n}var On=Cn;for(We=pe=0;We<we;++We){var Ie=En[We],jn=Ie.G,$n=Ie.H,bi=0,Pr=1,un=0;for(ee=0;5>ee;++ee){en=pl[ee],jn[ee]=On,$n[ee]=pe,!ee&&0<De&&(en+=1<<De);i:{var cs,oo=en,ds=Fe,Na=Sn,hh=On,ch=pe,lo=0,Wr=ds.m,dh=wt(Wr,1);if(o(Na,0,0,oo),dh){var ph=wt(Wr,1)+1,gh=wt(Wr,1),Nl=wt(Wr,gh==0?1:8);Na[Nl]=1,ph==2&&(Na[Nl=wt(Wr,8)]=1);var ps=1}else{var Ll=a(19),Sl=wt(Wr,4)+4;if(19<Sl){ds.a=3;var gs=0;break i}for(cs=0;cs<Sl;++cs)Ll[zf[cs]]=wt(Wr,3);var uo=void 0,La=void 0,kl=ds,mh=Ll,ms=oo,Pl=Na,fo=0,Vr=kl.m,Il=8,Cl=c(128,z);r:for(;E(Cl,0,7,mh,19);){if(wt(Vr,1)){var vh=2+2*wt(Vr,3);if((uo=2+wt(Vr,vh))>ms)break r}else uo=ms;for(La=0;La<ms&&uo--;){Z(Vr);var Fl=Cl[0+(127&T(Vr))];J(Vr,Vr.u+Fl.g);var $i=Fl.value;if(16>$i)Pl[La++]=$i,$i!=0&&(Il=$i);else{var bh=$i==16,El=$i-16,wh=qf[El],Ol=wt(Vr,Df[El])+wh;if(La+Ol>ms)break r;for(var yh=bh?Il:0;0<Ol--;)Pl[La++]=yh}}fo=1;break r}fo||(kl.a=3),ps=fo}(ps=ps&&!Wr.h)&&(lo=E(hh,ch,8,Na,oo)),ps&&lo!=0?gs=lo:(ds.a=3,gs=0)}if(gs==0)break n;if(Pr&&Uf[ee]==1&&(Pr=On[pe].g==0),bi+=On[pe].g,pe+=gs,3>=ee){var Sa,ho=Sn[0];for(Sa=1;Sa<en;++Sa)Sn[Sa]>ho&&(ho=Sn[Sa]);un+=ho}}if(Ie.nd=Pr,Ie.Qb=0,Pr&&(Ie.qb=(jn[3][$n[3]+0].value<<24|jn[1][$n[1]+0].value<<16|jn[2][$n[2]+0].value)>>>0,bi==0&&256>jn[0][$n[0]+0].value&&(Ie.Qb=1,Ie.qb+=jn[0][$n[0]+0].value<<8)),Ie.jc=!Ie.Qb&&6>un,Ie.jc){var vs,Ir=Ie;for(vs=0;vs<Vi;++vs){var Gr=vs,Yr=Ir.pd[Gr],bs=Ir.G[0][Ir.H[0]+Gr];256<=bs.value?(Yr.g=bs.g+256,Yr.value=bs.value):(Yr.g=0,Yr.value=0,Gr>>=rn(bs,8,Yr),Gr>>=rn(Ir.G[1][Ir.H[1]+Gr],16,Yr),Gr>>=rn(Ir.G[2][Ir.H[2]+Gr],0,Yr),rn(Ir.G[3][Ir.H[3]+Gr],24,Yr))}}}tn.vc=me,tn.Wb=we,tn.Ya=En,tn.yc=Cn,Nt=1;break e}Nt=0}if(!(w=Nt)){g.a=3;break t}if(0<et){if(C.ua=1<<et,!P(C.Wa,et)){g.a=1,w=0;break t}}else C.ua=0;var co=g,jl=y,xh=A,po=co.s,go=po.xc;if(co.c=jl,co.i=xh,po.md=yt(jl,go),po.wc=go==0?-1:(1<<go)-1,f){g.xb=Zf;break t}if((W=a(y*A))==null){g.a=1,w=0;break t}w=(w=Yn(g,W,0,y,A,A,null))&&!L.h;break t}return w?(b!=null?b[0]=W:(t(W==null),t(f)),g.$=0,f||Dn(C)):Dn(C),w}function ri(r,s){var f=r.c*r.i,g=f+s+16*s;return t(r.c<=s),r.V=a(g),r.V==null?(r.Ta=null,r.Ua=0,r.a=1,0):(r.Ta=r.V,r.Ua=r.Ba+f+s,1)}function Ci(r,s){var f=r.C,g=s-f,b=r.V,w=r.Ba+r.c*f;for(t(s<=r.l.o);0<g;){var y=16<g?16:g,A=r.l.ma,L=r.l.width,C=L*y,W=A.ca,et=A.tb+L*f,F=r.Ta,Y=r.Ua;ei(r,y,b,w),sl(F,Y,W,et,C),rr(A,f,f+y,W,et,L),g-=y,b+=y*r.c,f+=y}t(f==s),r.C=r.Ma=s}function Fi(){this.ub=this.yd=this.td=this.Rb=0}function Ei(){this.Kd=this.Ld=this.Ud=this.Td=this.i=this.c=0}function js(){this.Fb=this.Bb=this.Cb=0,this.Zb=a(4),this.Lb=a(4)}function ia(){this.Yb=(function(){var r=[];return(function s(f,g,b){for(var w=b[g],y=0;y<w&&(f.push(b.length>g+1?[]:0),!(b.length<g+1));y++)s(f[y],g+1,b)})(r,0,[3,11]),r})()}function Da(){this.jb=a(3),this.Wc=l([4,8],ia),this.Xc=l([4,17],ia)}function qa(){this.Pc=this.wb=this.Tb=this.zd=0,this.vd=new a(4),this.od=new a(4)}function qn(){this.ld=this.La=this.dd=this.tc=0}function aa(){this.Na=this.la=0}function Ua(){this.Sc=[0,0],this.Eb=[0,0],this.Qc=[0,0],this.ia=this.lc=0}function sa(){this.ad=a(384),this.Za=0,this.Ob=a(16),this.$b=this.Ad=this.ia=this.Gc=this.Hc=this.Dd=0}function za(){this.uc=this.M=this.Nb=0,this.wa=Array(new qn),this.Y=0,this.ya=Array(new sa),this.aa=0,this.l=new Oi}function Ha(){this.y=a(16),this.f=a(8),this.ea=a(8)}function Wa(){this.cb=this.a=0,this.sc=\"\",this.m=new x,this.Od=new Fi,this.Kc=new Ei,this.ed=new qa,this.Qa=new js,this.Ic=this.$c=this.Aa=0,this.D=new za,this.Xb=this.Va=this.Hb=this.zb=this.yb=this.Ub=this.za=0,this.Jc=c(8,x),this.ia=0,this.pb=c(4,Ua),this.Pa=new Da,this.Bd=this.kc=0,this.Ac=[],this.Bc=0,this.zc=[0,0,0,0],this.Gd=Array(new Ha),this.Hd=0,this.rb=Array(new aa),this.sb=0,this.wa=Array(new qn),this.Y=0,this.oc=[],this.pc=0,this.sa=[],this.ta=0,this.qa=[],this.ra=0,this.Ha=[],this.B=this.R=this.Ia=0,this.Ec=[],this.M=this.ja=this.Vb=this.Fc=0,this.ya=Array(new sa),this.L=this.aa=0,this.gd=l([4,2],qn),this.ga=null,this.Fa=[],this.Cc=this.qc=this.P=0,this.Gb=[],this.Uc=0,this.mb=[],this.nb=0,this.rc=[],this.Ga=this.Vc=0}function ar(r,s){return 0>r?0:r>s?s:r}function Oi(){this.T=this.U=this.ka=this.height=this.width=0,this.y=[],this.f=[],this.ea=[],this.Rc=this.fa=this.W=this.N=this.O=0,this.ma=\"void\",this.put=\"VP8IoPutHook\",this.ac=\"VP8IoSetupHook\",this.bc=\"VP8IoTeardownHook\",this.ha=this.Kb=0,this.data=[],this.hb=this.ib=this.da=this.o=this.j=this.va=this.v=this.Da=this.ob=this.w=0,this.F=[],this.J=0}function Bs(){var r=new Wa;return r!=null&&(r.a=0,r.sc=\"OK\",r.cb=0,r.Xb=0,_a||(_a=ji)),r}function Ke(r,s,f){return r.a==0&&(r.a=s,r.sc=f,r.cb=0),0}function Va(r,s,f){return 3<=f&&r[s+0]==157&&r[s+1]==1&&r[s+2]==42}function sr(r,s){if(r==null)return 0;if(r.a=0,r.sc=\"OK\",s==null)return Ke(r,2,\"null VP8Io passed to VP8GetHeaders()\");var f=s.data,g=s.w,b=s.ha;if(4>b)return Ke(r,7,\"Truncated header.\");var w=f[g+0]|f[g+1]<<8|f[g+2]<<16,y=r.Od;if(y.Rb=!(1&w),y.td=w>>1&7,y.yd=w>>4&1,y.ub=w>>5,3<y.td)return Ke(r,3,\"Incorrect keyframe parameters.\");if(!y.yd)return Ke(r,4,\"Frame not displayable.\");g+=3,b-=3;var A=r.Kc;if(y.Rb){if(7>b)return Ke(r,7,\"cannot parse picture header\");if(!Va(f,g,b))return Ke(r,3,\"Bad code word\");A.c=16383&(f[g+4]<<8|f[g+3]),A.Td=f[g+4]>>6,A.i=16383&(f[g+6]<<8|f[g+5]),A.Ud=f[g+6]>>6,g+=7,b-=7,r.za=A.c+15>>4,r.Ub=A.i+15>>4,s.width=A.c,s.height=A.i,s.Da=0,s.j=0,s.v=0,s.va=s.width,s.o=s.height,s.da=0,s.ib=s.width,s.hb=s.height,s.U=s.width,s.T=s.height,o((w=r.Pa).jb,0,255,w.jb.length),t((w=r.Qa)!=null),w.Cb=0,w.Bb=0,w.Fb=1,o(w.Zb,0,0,w.Zb.length),o(w.Lb,0,0,w.Lb)}if(y.ub>b)return Ke(r,7,\"bad partition length\");ot(w=r.m,f,g,y.ub),g+=y.ub,b-=y.ub,y.Rb&&(A.Ld=st(w),A.Kd=st(w)),A=r.Qa;var L,C=r.Pa;if(t(w!=null),t(A!=null),A.Cb=st(w),A.Cb){if(A.Bb=st(w),st(w)){for(A.Fb=st(w),L=0;4>L;++L)A.Zb[L]=st(w)?nt(w,7):0;for(L=0;4>L;++L)A.Lb[L]=st(w)?nt(w,6):0}if(A.Bb)for(L=0;3>L;++L)C.jb[L]=st(w)?ft(w,8):255}else A.Bb=0;if(w.Ka)return Ke(r,3,\"cannot parse segment header\");if((A=r.ed).zd=st(w),A.Tb=ft(w,6),A.wb=ft(w,3),A.Pc=st(w),A.Pc&&st(w)){for(C=0;4>C;++C)st(w)&&(A.vd[C]=nt(w,6));for(C=0;4>C;++C)st(w)&&(A.od[C]=nt(w,6))}if(r.L=A.Tb==0?0:A.zd?1:2,w.Ka)return Ke(r,3,\"cannot parse filter header\");var W=b;if(b=L=g,g=L+W,A=W,r.Xb=(1<<ft(r.m,2))-1,W<3*(C=r.Xb))f=7;else{for(L+=3*C,A-=3*C,W=0;W<C;++W){var et=f[b+0]|f[b+1]<<8|f[b+2]<<16;et>A&&(et=A),ot(r.Jc[+W],f,L,et),L+=et,A-=et,b+=3}ot(r.Jc[+C],f,L,A),f=L<g?0:5}if(f!=0)return Ke(r,f,\"cannot parse partitions\");for(f=ft(L=r.m,7),b=st(L)?nt(L,4):0,g=st(L)?nt(L,4):0,A=st(L)?nt(L,4):0,C=st(L)?nt(L,4):0,L=st(L)?nt(L,4):0,W=r.Qa,et=0;4>et;++et){if(W.Cb){var F=W.Zb[et];W.Fb||(F+=f)}else{if(0<et){r.pb[et]=r.pb[0];continue}F=f}var Y=r.pb[et];Y.Sc[0]=io[ar(F+b,127)],Y.Sc[1]=ao[ar(F+0,127)],Y.Eb[0]=2*io[ar(F+g,127)],Y.Eb[1]=101581*ao[ar(F+A,127)]>>16,8>Y.Eb[1]&&(Y.Eb[1]=8),Y.Qc[0]=io[ar(F+C,117)],Y.Qc[1]=ao[ar(F+L,127)],Y.lc=F+L}if(!y.Rb)return Ke(r,4,\"Not a key frame.\");for(st(w),y=r.Pa,f=0;4>f;++f){for(b=0;8>b;++b)for(g=0;3>g;++g)for(A=0;11>A;++A)C=gt(w,Xf[f][b][g][A])?ft(w,8):Jf[f][b][g][A],y.Wc[f][b].Yb[g][A]=C;for(b=0;17>b;++b)y.Xc[f][b]=y.Wc[f][$f[b]]}return r.kc=st(w),r.kc&&(r.Bd=ft(w,8)),r.cb=1}function ji(r,s,f,g,b,w,y){var A=s[b].Yb[f];for(f=0;16>b;++b){if(!gt(r,A[f+0]))return b;for(;!gt(r,A[f+1]);)if(A=s[++b].Yb[0],f=0,b==16)return 16;var L=s[b+1].Yb;if(gt(r,A[f+2])){var C=r,W=0;if(gt(C,(F=A)[(et=f)+3]))if(gt(C,F[et+6])){for(A=0,et=2*(W=gt(C,F[et+8]))+(F=gt(C,F[et+9+W])),W=0,F=Gf[et];F[A];++A)W+=W+gt(C,F[A]);W+=3+(8<<et)}else gt(C,F[et+7])?(W=7+2*gt(C,165),W+=gt(C,145)):W=5+gt(C,159);else W=gt(C,F[et+4])?3+gt(C,F[et+5]):2;A=L[2]}else W=1,A=L[1];L=y+Yf[b],0>(C=r).b&&at(C);var et,F=C.b,Y=(et=C.Ca>>1)-(C.I>>F)>>31;--C.b,C.Ca+=Y,C.Ca|=1,C.I-=(et+1&Y)<<F,w[L]=((W^Y)-Y)*g[(0<b)+0]}return 16}function oa(r){var s=r.rb[r.sb-1];s.la=0,s.Na=0,o(r.zc,0,0,r.zc.length),r.ja=0}function Pn(r,s,f,g,b){b=r[s+f+32*g]+(b>>3),r[s+f+32*g]=-256&b?0>b?0:255:b}function Bi(r,s,f,g,b,w){Pn(r,s,0,f,g+b),Pn(r,s,1,f,g+w),Pn(r,s,2,f,g-w),Pn(r,s,3,f,g-b)}function wr(r){return(20091*r>>16)+r}function sn(r,s,f,g){var b,w=0,y=a(16);for(b=0;4>b;++b){var A=r[s+0]+r[s+8],L=r[s+0]-r[s+8],C=(35468*r[s+4]>>16)-wr(r[s+12]),W=wr(r[s+4])+(35468*r[s+12]>>16);y[w+0]=A+W,y[w+1]=L+C,y[w+2]=L-C,y[w+3]=A-W,w+=4,s++}for(b=w=0;4>b;++b)A=(r=y[w+0]+4)+y[w+8],L=r-y[w+8],C=(35468*y[w+4]>>16)-wr(y[w+12]),Pn(f,g,0,0,A+(W=wr(y[w+4])+(35468*y[w+12]>>16))),Pn(f,g,1,0,L+C),Pn(f,g,2,0,L-C),Pn(f,g,3,0,A-W),w++,g+=32}function Ga(r,s,f,g){var b=r[s+0]+4,w=35468*r[s+4]>>16,y=wr(r[s+4]),A=35468*r[s+1]>>16;Bi(f,g,0,b+y,r=wr(r[s+1]),A),Bi(f,g,1,b+w,r,A),Bi(f,g,2,b-w,r,A),Bi(f,g,3,b-y,r,A)}function Ms(r,s,f,g,b){sn(r,s,f,g),b&&sn(r,s+16,f,g+4)}function Rs(r,s,f,g){Lr(r,s+0,f,g,1),Lr(r,s+32,f,g+128,1)}function Ts(r,s,f,g){var b;for(r=r[s+0]+4,b=0;4>b;++b)for(s=0;4>s;++s)Pn(f,g,s,b,r)}function or(r,s,f,g){r[s+0]&&dn(r,s+0,f,g),r[s+16]&&dn(r,s+16,f,g+4),r[s+32]&&dn(r,s+32,f,g+128),r[s+48]&&dn(r,s+48,f,g+128+4)}function Ya(r,s,f,g){var b,w=a(16);for(b=0;4>b;++b){var y=r[s+0+b]+r[s+12+b],A=r[s+4+b]+r[s+8+b],L=r[s+4+b]-r[s+8+b],C=r[s+0+b]-r[s+12+b];w[0+b]=y+A,w[8+b]=y-A,w[4+b]=C+L,w[12+b]=C-L}for(b=0;4>b;++b)y=(r=w[0+4*b]+3)+w[3+4*b],A=w[1+4*b]+w[2+4*b],L=w[1+4*b]-w[2+4*b],C=r-w[3+4*b],f[g+0]=y+A>>3,f[g+16]=C+L>>3,f[g+32]=y-A>>3,f[g+48]=C-L>>3,g+=64}function Mi(r,s,f){var g,b=s-32,w=In,y=255-r[b-1];for(g=0;g<f;++g){var A,L=w,C=y+r[s-1];for(A=0;A<f;++A)r[s+A]=L[C+r[b+A]];s+=32}}function Ri(r,s){Mi(r,s,4)}function la(r,s){Mi(r,s,8)}function Ds(r,s){Mi(r,s,16)}function qs(r,s){var f;for(f=0;16>f;++f)i(r,s+32*f,r,s-32,16)}function Us(r,s){var f;for(f=16;0<f;--f)o(r,s,r[s-1],16),s+=32}function jr(r,s,f){var g;for(g=0;16>g;++g)o(s,f+32*g,r,16)}function Ja(r,s){var f,g=16;for(f=0;16>f;++f)g+=r[s-1+32*f]+r[s+f-32];jr(g>>5,r,s)}function Br(r,s){var f,g=8;for(f=0;16>f;++f)g+=r[s-1+32*f];jr(g>>4,r,s)}function zs(r,s){var f,g=8;for(f=0;16>f;++f)g+=r[s+f-32];jr(g>>4,r,s)}function ii(r,s){jr(128,r,s)}function Jt(r,s,f){return r+2*s+f+2>>2}function Hs(r,s){var f,g=s-32;for(g=new Uint8Array([Jt(r[g-1],r[g+0],r[g+1]),Jt(r[g+0],r[g+1],r[g+2]),Jt(r[g+1],r[g+2],r[g+3]),Jt(r[g+2],r[g+3],r[g+4])]),f=0;4>f;++f)i(r,s+32*f,g,0,g.length)}function Ws(r,s){var f=r[s-1],g=r[s-1+32],b=r[s-1+64],w=r[s-1+96];_t(r,s+0,16843009*Jt(r[s-1-32],f,g)),_t(r,s+32,16843009*Jt(f,g,b)),_t(r,s+64,16843009*Jt(g,b,w)),_t(r,s+96,16843009*Jt(b,w,w))}function Vs(r,s){var f,g=4;for(f=0;4>f;++f)g+=r[s+f-32]+r[s-1+32*f];for(g>>=3,f=0;4>f;++f)o(r,s+32*f,g,4)}function Gs(r,s){var f=r[s-1+0],g=r[s-1+32],b=r[s-1+64],w=r[s-1-32],y=r[s+0-32],A=r[s+1-32],L=r[s+2-32],C=r[s+3-32];r[s+0+96]=Jt(g,b,r[s-1+96]),r[s+1+96]=r[s+0+64]=Jt(f,g,b),r[s+2+96]=r[s+1+64]=r[s+0+32]=Jt(w,f,g),r[s+3+96]=r[s+2+64]=r[s+1+32]=r[s+0+0]=Jt(y,w,f),r[s+3+64]=r[s+2+32]=r[s+1+0]=Jt(A,y,w),r[s+3+32]=r[s+2+0]=Jt(L,A,y),r[s+3+0]=Jt(C,L,A)}function Ys(r,s){var f=r[s+1-32],g=r[s+2-32],b=r[s+3-32],w=r[s+4-32],y=r[s+5-32],A=r[s+6-32],L=r[s+7-32];r[s+0+0]=Jt(r[s+0-32],f,g),r[s+1+0]=r[s+0+32]=Jt(f,g,b),r[s+2+0]=r[s+1+32]=r[s+0+64]=Jt(g,b,w),r[s+3+0]=r[s+2+32]=r[s+1+64]=r[s+0+96]=Jt(b,w,y),r[s+3+32]=r[s+2+64]=r[s+1+96]=Jt(w,y,A),r[s+3+64]=r[s+2+96]=Jt(y,A,L),r[s+3+96]=Jt(A,L,L)}function yr(r,s){var f=r[s-1+0],g=r[s-1+32],b=r[s-1+64],w=r[s-1-32],y=r[s+0-32],A=r[s+1-32],L=r[s+2-32],C=r[s+3-32];r[s+0+0]=r[s+1+64]=w+y+1>>1,r[s+1+0]=r[s+2+64]=y+A+1>>1,r[s+2+0]=r[s+3+64]=A+L+1>>1,r[s+3+0]=L+C+1>>1,r[s+0+96]=Jt(b,g,f),r[s+0+64]=Jt(g,f,w),r[s+0+32]=r[s+1+96]=Jt(f,w,y),r[s+1+32]=r[s+2+96]=Jt(w,y,A),r[s+2+32]=r[s+3+96]=Jt(y,A,L),r[s+3+32]=Jt(A,L,C)}function xr(r,s){var f=r[s+0-32],g=r[s+1-32],b=r[s+2-32],w=r[s+3-32],y=r[s+4-32],A=r[s+5-32],L=r[s+6-32],C=r[s+7-32];r[s+0+0]=f+g+1>>1,r[s+1+0]=r[s+0+64]=g+b+1>>1,r[s+2+0]=r[s+1+64]=b+w+1>>1,r[s+3+0]=r[s+2+64]=w+y+1>>1,r[s+0+32]=Jt(f,g,b),r[s+1+32]=r[s+0+96]=Jt(g,b,w),r[s+2+32]=r[s+1+96]=Jt(b,w,y),r[s+3+32]=r[s+2+96]=Jt(w,y,A),r[s+3+64]=Jt(y,A,L),r[s+3+96]=Jt(A,L,C)}function Js(r,s){var f=r[s-1+0],g=r[s-1+32],b=r[s-1+64],w=r[s-1+96];r[s+0+0]=f+g+1>>1,r[s+2+0]=r[s+0+32]=g+b+1>>1,r[s+2+32]=r[s+0+64]=b+w+1>>1,r[s+1+0]=Jt(f,g,b),r[s+3+0]=r[s+1+32]=Jt(g,b,w),r[s+3+32]=r[s+1+64]=Jt(b,w,w),r[s+3+64]=r[s+2+64]=r[s+0+96]=r[s+1+96]=r[s+2+96]=r[s+3+96]=w}function Ks(r,s){var f=r[s-1+0],g=r[s-1+32],b=r[s-1+64],w=r[s-1+96],y=r[s-1-32],A=r[s+0-32],L=r[s+1-32],C=r[s+2-32];r[s+0+0]=r[s+2+32]=f+y+1>>1,r[s+0+32]=r[s+2+64]=g+f+1>>1,r[s+0+64]=r[s+2+96]=b+g+1>>1,r[s+0+96]=w+b+1>>1,r[s+3+0]=Jt(A,L,C),r[s+2+0]=Jt(y,A,L),r[s+1+0]=r[s+3+32]=Jt(f,y,A),r[s+1+32]=r[s+3+64]=Jt(g,f,y),r[s+1+64]=r[s+3+96]=Jt(b,g,f),r[s+1+96]=Jt(w,b,g)}function Ti(r,s){var f;for(f=0;8>f;++f)i(r,s+32*f,r,s-32,8)}function ua(r,s){var f;for(f=0;8>f;++f)o(r,s,r[s-1],8),s+=32}function lr(r,s,f){var g;for(g=0;8>g;++g)o(s,f+32*g,r,8)}function Xs(r,s){var f,g=8;for(f=0;8>f;++f)g+=r[s+f-32]+r[s-1+32*f];lr(g>>4,r,s)}function Di(r,s){var f,g=4;for(f=0;8>f;++f)g+=r[s+f-32];lr(g>>3,r,s)}function $s(r,s){var f,g=4;for(f=0;8>f;++f)g+=r[s-1+32*f];lr(g>>3,r,s)}function fa(r,s){lr(128,r,s)}function Mr(r,s,f){var g=r[s-f],b=r[s+0],w=3*(b-g)+Qs[1020+r[s-2*f]-r[s+f]],y=rs[112+(w+4>>3)];r[s-f]=In[255+g+rs[112+(w+3>>3)]],r[s+0]=In[255+b-y]}function ha(r,s,f,g){var b=r[s+0],w=r[s+f];return zn[255+r[s-2*f]-r[s-f]]>g||zn[255+w-b]>g}function ai(r,s,f,g){return 4*zn[255+r[s-f]-r[s+0]]+zn[255+r[s-2*f]-r[s+f]]<=g}function ca(r,s,f,g,b){var w=r[s-3*f],y=r[s-2*f],A=r[s-f],L=r[s+0],C=r[s+f],W=r[s+2*f],et=r[s+3*f];return 4*zn[255+A-L]+zn[255+y-C]>g?0:zn[255+r[s-4*f]-w]<=b&&zn[255+w-y]<=b&&zn[255+y-A]<=b&&zn[255+et-W]<=b&&zn[255+W-C]<=b&&zn[255+C-L]<=b}function qi(r,s,f,g){var b=2*g+1;for(g=0;16>g;++g)ai(r,s+g,f,b)&&Mr(r,s+g,f)}function da(r,s,f,g){var b=2*g+1;for(g=0;16>g;++g)ai(r,s+g*f,1,b)&&Mr(r,s+g*f,1)}function Ui(r,s,f,g){var b;for(b=3;0<b;--b)qi(r,s+=4*f,f,g)}function Ka(r,s,f,g){var b;for(b=3;0<b;--b)da(r,s+=4,f,g)}function _r(r,s,f,g,b,w,y,A){for(w=2*w+1;0<b--;){if(ca(r,s,f,w,y))if(ha(r,s,f,A))Mr(r,s,f);else{var L=r,C=s,W=f,et=L[C-2*W],F=L[C-W],Y=L[C+0],$=L[C+W],ut=L[C+2*W],Q=27*(pt=Qs[1020+3*(Y-F)+Qs[1020+et-$]])+63>>7,ht=18*pt+63>>7,pt=9*pt+63>>7;L[C-3*W]=In[255+L[C-3*W]+pt],L[C-2*W]=In[255+et+ht],L[C-W]=In[255+F+Q],L[C+0]=In[255+Y-Q],L[C+W]=In[255+$-ht],L[C+2*W]=In[255+ut-pt]}s+=g}}function Ar(r,s,f,g,b,w,y,A){for(w=2*w+1;0<b--;){if(ca(r,s,f,w,y))if(ha(r,s,f,A))Mr(r,s,f);else{var L=r,C=s,W=f,et=L[C-W],F=L[C+0],Y=L[C+W],$=rs[112+(4+(ut=3*(F-et))>>3)],ut=rs[112+(ut+3>>3)],Q=$+1>>1;L[C-2*W]=In[255+L[C-2*W]+Q],L[C-W]=In[255+et+ut],L[C+0]=In[255+F-$],L[C+W]=In[255+Y-Q]}s+=g}}function Xa(r,s,f,g,b,w){_r(r,s,f,1,16,g,b,w)}function $a(r,s,f,g,b,w){_r(r,s,1,f,16,g,b,w)}function Za(r,s,f,g,b,w){var y;for(y=3;0<y;--y)Ar(r,s+=4*f,f,1,16,g,b,w)}function si(r,s,f,g,b,w){var y;for(y=3;0<y;--y)Ar(r,s+=4,1,f,16,g,b,w)}function Qa(r,s,f,g,b,w,y,A){_r(r,s,b,1,8,w,y,A),_r(f,g,b,1,8,w,y,A)}function u(r,s,f,g,b,w,y,A){_r(r,s,1,b,8,w,y,A),_r(f,g,1,b,8,w,y,A)}function v(r,s,f,g,b,w,y,A){Ar(r,s+4*b,b,1,8,w,y,A),Ar(f,g+4*b,b,1,8,w,y,A)}function I(r,s,f,g,b,w,y,A){Ar(r,s+4,1,b,8,w,y,A),Ar(f,g+4,1,b,8,w,y,A)}function D(){this.ba=new le,this.ec=[],this.cc=[],this.Mc=[],this.Dc=this.Nc=this.dc=this.fc=0,this.Oa=new be,this.memory=0,this.Ib=\"OutputFunc\",this.Jb=\"OutputAlphaFunc\",this.Nd=\"OutputRowFunc\"}function K(){this.data=[],this.offset=this.kd=this.ha=this.w=0,this.na=[],this.xa=this.gb=this.Ja=this.Sa=this.P=0}function lt(){this.nc=this.Ea=this.b=this.hc=0,this.K=[],this.w=0}function mt(){this.ua=0,this.Wa=new ae,this.vb=new ae,this.md=this.xc=this.wc=0,this.vc=[],this.Wb=0,this.Ya=new rt,this.yc=new z}function Et(){this.xb=this.a=0,this.l=new Oi,this.ca=new le,this.V=[],this.Ba=0,this.Ta=[],this.Ua=0,this.m=new B,this.Pb=0,this.wd=new B,this.Ma=this.$=this.C=this.i=this.c=this.xd=0,this.s=new mt,this.ab=0,this.gc=c(4,lt),this.Oc=0}function Ft(){this.Lc=this.Z=this.$a=this.i=this.c=0,this.l=new Oi,this.ic=0,this.ca=[],this.tb=0,this.qd=null,this.rd=0}function Xt(r,s,f,g,b,w,y){for(r=r==null?0:r[s+0],s=0;s<y;++s)b[w+s]=r+f[g+s]&255,r=b[w+s]}function te(r,s,f,g,b,w,y){var A;if(r==null)Xt(null,null,f,g,b,w,y);else for(A=0;A<y;++A)b[w+A]=r[s+A]+f[g+A]&255}function de(r,s,f,g,b,w,y){if(r==null)Xt(null,null,f,g,b,w,y);else{var A,L=r[s+0],C=L,W=L;for(A=0;A<y;++A)C=W+(L=r[s+A])-C,W=f[g+A]+(-256&C?0>C?0:255:C)&255,C=L,b[w+A]=W}}function Xe(r,s,f,g){var b=s.width,w=s.o;if(t(r!=null&&s!=null),0>f||0>=g||f+g>w)return null;if(!r.Cc){if(r.ga==null){var y;if(r.ga=new Ft,(y=r.ga==null)||(y=s.width*s.o,t(r.Gb.length==0),r.Gb=a(y),r.Uc=0,r.Gb==null?y=0:(r.mb=r.Gb,r.nb=r.Uc,r.rc=null,y=1),y=!y),!y){y=r.ga;var A=r.Fa,L=r.P,C=r.qc,W=r.mb,et=r.nb,F=L+1,Y=C-1,$=y.l;if(t(A!=null&&W!=null&&s!=null),Hr[0]=null,Hr[1]=Xt,Hr[2]=te,Hr[3]=de,y.ca=W,y.tb=et,y.c=s.width,y.i=s.height,t(0<y.c&&0<y.i),1>=C)s=0;else if(y.$a=3&A[L+0],y.Z=A[L+0]>>2&3,y.Lc=A[L+0]>>4&3,L=A[L+0]>>6&3,0>y.$a||1<y.$a||4<=y.Z||1<y.Lc||L)s=0;else if($.put=Gt,$.ac=nr,$.bc=vr,$.ma=y,$.width=s.width,$.height=s.height,$.Da=s.Da,$.v=s.v,$.va=s.va,$.j=s.j,$.o=s.o,y.$a)t:{t(y.$a==1),s=ni();e:for(;;){if(s==null){s=0;break t}if(t(y!=null),y.mc=s,s.c=y.c,s.i=y.i,s.l=y.l,s.l.ma=y,s.l.width=y.c,s.l.height=y.i,s.a=0,ct(s.m,A,F,Y),!ir(y.c,y.i,1,s,null)||(s.ab==1&&s.gc[0].hc==3&&Vn(s.s)?(y.ic=1,A=s.c*s.i,s.Ta=null,s.Ua=0,s.V=a(A),s.Ba=0,s.V==null?(s.a=1,s=0):s=1):(y.ic=0,s=ri(s,y.c)),!s))break e;s=1;break t}y.mc=null,s=0}else s=Y>=y.c*y.i;y=!s}if(y)return null;r.ga.Lc!=1?r.Ga=0:g=w-f}t(r.ga!=null),t(f+g<=w);t:{if(s=(A=r.ga).c,w=A.l.o,A.$a==0){if(F=r.rc,Y=r.Vc,$=r.Fa,L=r.P+1+f*s,C=r.mb,W=r.nb+f*s,t(L<=r.P+r.qc),A.Z!=0)for(t(Hr[A.Z]!=null),y=0;y<g;++y)Hr[A.Z](F,Y,$,L,C,W,s),F=C,Y=W,W+=s,L+=s;else for(y=0;y<g;++y)i(C,W,$,L,s),F=C,Y=W,W+=s,L+=s;r.rc=F,r.Vc=Y}else{if(t(A.mc!=null),s=f+g,t((y=A.mc)!=null),t(s<=y.i),y.C>=s)s=1;else if(A.ic||Re(),A.ic){A=y.V,F=y.Ba,Y=y.c;var ut=y.i,Q=($=1,L=y.$/Y,C=y.$%Y,W=y.m,et=y.s,y.$),ht=Y*ut,pt=Y*s,xt=et.wc,bt=Q<pt?an(et,C,L):null;t(Q<=ht),t(s<=ut),t(Vn(et));e:for(;;){for(;!W.h&&Q<pt;){if(C&xt||(bt=an(et,C,L)),t(bt!=null),Z(W),256>(ut=Te(bt.G[0],bt.H[0],W)))A[F+Q]=ut,++Q,++C>=Y&&(C=0,++L<=s&&!(L%16)&&Gn(y,L));else{if(!(280>ut)){$=0;break e}ut=Rn(ut-256,W);var Rt,Pt=Te(bt.G[4],bt.H[4],W);if(Z(W),!(Q>=(Pt=Tn(Y,Pt=Rn(Pt,W)))&&ht-Q>=ut)){$=0;break e}for(Rt=0;Rt<ut;++Rt)A[F+Q+Rt]=A[F+Q+Rt-Pt];for(Q+=ut,C+=ut;C>=Y;)C-=Y,++L<=s&&!(L%16)&&Gn(y,L);Q<pt&&C&xt&&(bt=an(et,C,L))}t(W.h==H(W))}Gn(y,L>s?s:L);break e}!$||W.h&&Q<ht?($=0,y.a=W.h?5:3):y.$=Q,s=$}else s=Yn(y,y.V,y.Ba,y.c,y.i,s,Ci);if(!s){g=0;break t}}f+g>=w&&(r.Cc=1),g=1}if(!g)return null;if(r.Cc&&((g=r.ga)!=null&&(g.mc=null),r.ga=null,0<r.Ga))return alert(\"todo:WebPDequantizeLevels\"),null}return r.nb+f*b}function Ae(r,s,f,g,b,w){for(;0<b--;){var y,A=r,L=s+(f?1:0),C=r,W=s+(f?0:3);for(y=0;y<g;++y){var et=C[W+4*y];et!=255&&(et*=32897,A[L+4*y+0]=A[L+4*y+0]*et>>23,A[L+4*y+1]=A[L+4*y+1]*et>>23,A[L+4*y+2]=A[L+4*y+2]*et>>23)}s+=w}}function _e(r,s,f,g,b){for(;0<g--;){var w;for(w=0;w<f;++w){var y=r[s+2*w+0],A=15&(C=r[s+2*w+1]),L=4369*A,C=(240&C|C>>4)*L>>16;r[s+2*w+0]=(240&y|y>>4)*L>>16&240|(15&y|y<<4)*L>>16>>4&15,r[s+2*w+1]=240&C|A}s+=b}}function Ce(r,s,f,g,b,w,y,A){var L,C,W=255;for(C=0;C<b;++C){for(L=0;L<g;++L){var et=r[s+L];w[y+4*L]=et,W&=et}s+=f,y+=A}return W!=255}function Me(r,s,f,g,b){var w;for(w=0;w<b;++w)f[g+w]=r[s+w]>>8}function Re(){xa=Ae,il=_e,al=Ce,sl=Me}function hn(r,s,f){R[r]=function(g,b,w,y,A,L,C,W,et,F,Y,$,ut,Q,ht,pt,xt){var bt,Rt=xt-1>>1,Pt=A[L+0]|C[W+0]<<16,re=et[F+0]|Y[$+0]<<16;t(g!=null);var Ot=3*Pt+re+131074>>2;for(s(g[b+0],255&Ot,Ot>>16,ut,Q),w!=null&&(Ot=3*re+Pt+131074>>2,s(w[y+0],255&Ot,Ot>>16,ht,pt)),bt=1;bt<=Rt;++bt){var ce=A[L+bt]|C[W+bt]<<16,Qe=et[F+bt]|Y[$+bt]<<16,ie=Pt+ce+re+Qe+524296,jt=ie+2*(ce+re)>>3;Ot=jt+Pt>>1,Pt=(ie=ie+2*(Pt+Qe)>>3)+ce>>1,s(g[b+2*bt-1],255&Ot,Ot>>16,ut,Q+(2*bt-1)*f),s(g[b+2*bt-0],255&Pt,Pt>>16,ut,Q+(2*bt-0)*f),w!=null&&(Ot=ie+re>>1,Pt=jt+Qe>>1,s(w[y+2*bt-1],255&Ot,Ot>>16,ht,pt+(2*bt-1)*f),s(w[y+2*bt+0],255&Pt,Pt>>16,ht,pt+(2*bt+0)*f)),Pt=ce,re=Qe}1&xt||(Ot=3*Pt+re+131074>>2,s(g[b+xt-1],255&Ot,Ot>>16,ut,Q+(xt-1)*f),w!=null&&(Ot=3*re+Pt+131074>>2,s(w[y+xt-1],255&Ot,Ot>>16,ht,pt+(xt-1)*f)))}}function Nr(){Hn[is]=Qf,Hn[as]=vl,Hn[cl]=th,Hn[ss]=bl,Hn[os]=wl,Hn[to]=yl,Hn[dl]=eh,Hn[eo]=vl,Hn[no]=bl,Hn[ls]=wl,Hn[ro]=yl}function pa(r){return r&-16384?0>r?0:255:r>>nh}function oi(r,s){return pa((19077*r>>8)+(26149*s>>8)-14234)}function li(r,s,f){return pa((19077*r>>8)-(6419*s>>8)-(13320*f>>8)+8708)}function Rr(r,s){return pa((19077*r>>8)+(33050*s>>8)-17685)}function ui(r,s,f,g,b){g[b+0]=oi(r,f),g[b+1]=li(r,s,f),g[b+2]=Rr(r,s)}function zi(r,s,f,g,b){g[b+0]=Rr(r,s),g[b+1]=li(r,s,f),g[b+2]=oi(r,f)}function Hi(r,s,f,g,b){var w=li(r,s,f);s=w<<3&224|Rr(r,s)>>3,g[b+0]=248&oi(r,f)|w>>5,g[b+1]=s}function cn(r,s,f,g,b){var w=240&Rr(r,s)|15;g[b+0]=240&oi(r,f)|li(r,s,f)>>4,g[b+1]=w}function fi(r,s,f,g,b){g[b+0]=255,ui(r,s,f,g,b+1)}function hi(r,s,f,g,b){zi(r,s,f,g,b),g[b+3]=255}function ga(r,s,f,g,b){ui(r,s,f,g,b),g[b+3]=255}function ur(r,s,f){R[r]=function(g,b,w,y,A,L,C,W,et){for(var F=W+(-2&et)*f;W!=F;)s(g[b+0],w[y+0],A[L+0],C,W),s(g[b+1],w[y+0],A[L+0],C,W+f),b+=2,++y,++L,W+=2*f;1&et&&s(g[b+0],w[y+0],A[L+0],C,W)}}function wn(r,s,f){return f==0?r==0?s==0?6:5:s==0?4:0:f}function ts(r,s,f,g,b){switch(r>>>30){case 3:Lr(s,f,g,b,0);break;case 2:Ur(s,f,g,b);break;case 1:dn(s,f,g,b)}}function Wi(r,s){var f,g,b=s.M,w=s.Nb,y=r.oc,A=r.pc+40,L=r.oc,C=r.pc+584,W=r.oc,et=r.pc+600;for(f=0;16>f;++f)y[A+32*f-1]=129;for(f=0;8>f;++f)L[C+32*f-1]=129,W[et+32*f-1]=129;for(0<b?y[A-1-32]=L[C-1-32]=W[et-1-32]=129:(o(y,A-32-1,127,21),o(L,C-32-1,127,9),o(W,et-32-1,127,9)),g=0;g<r.za;++g){var F=s.ya[s.aa+g];if(0<g){for(f=-1;16>f;++f)i(y,A+32*f-4,y,A+32*f+12,4);for(f=-1;8>f;++f)i(L,C+32*f-4,L,C+32*f+4,4),i(W,et+32*f-4,W,et+32*f+4,4)}var Y=r.Gd,$=r.Hd+g,ut=F.ad,Q=F.Hc;if(0<b&&(i(y,A-32,Y[$].y,0,16),i(L,C-32,Y[$].f,0,8),i(W,et-32,Y[$].ea,0,8)),F.Za){var ht=y,pt=A-32+16;for(0<b&&(g>=r.za-1?o(ht,pt,Y[$].y[15],4):i(ht,pt,Y[$+1].y,0,4)),f=0;4>f;f++)ht[pt+128+f]=ht[pt+256+f]=ht[pt+384+f]=ht[pt+0+f];for(f=0;16>f;++f,Q<<=2)ht=y,pt=A+_l[f],Kn[F.Ob[f]](ht,pt),ts(Q,ut,16*+f,ht,pt)}else if(ht=wn(g,b,F.Ob[0]),zr[ht](y,A),Q!=0)for(f=0;16>f;++f,Q<<=2)ts(Q,ut,16*+f,y,A+_l[f]);for(f=F.Gc,ht=wn(g,b,F.Dd),kr[ht](L,C),kr[ht](W,et),Q=ut,ht=L,pt=C,255&(F=0|f)&&(170&F?Ki(Q,256,ht,pt):hr(Q,256,ht,pt)),F=W,Q=et,255&(f>>=8)&&(170&f?Ki(ut,320,F,Q):hr(ut,320,F,Q)),b<r.Ub-1&&(i(Y[$].y,0,y,A+480,16),i(Y[$].f,0,L,C+224,8),i(Y[$].ea,0,W,et+224,8)),f=8*w*r.B,Y=r.sa,$=r.ta+16*g+16*w*r.R,ut=r.qa,F=r.ra+8*g+f,Q=r.Ha,ht=r.Ia+8*g+f,f=0;16>f;++f)i(Y,$+f*r.R,y,A+32*f,16);for(f=0;8>f;++f)i(ut,F+f*r.B,L,C+32*f,8),i(Q,ht+f*r.B,W,et+32*f,8)}}function es(r,s,f,g,b,w,y,A,L){var C=[0],W=[0],et=0,F=L!=null?L.kd:0,Y=L??new K;if(r==null||12>f)return 7;Y.data=r,Y.w=s,Y.ha=f,s=[s],f=[f],Y.gb=[Y.gb];t:{var $=s,ut=f,Q=Y.gb;if(t(r!=null),t(ut!=null),t(Q!=null),Q[0]=0,12<=ut[0]&&!e(r,$[0],\"RIFF\")){if(e(r,$[0]+8,\"WEBP\")){Q=3;break t}var ht=Dt(r,$[0]+4);if(12>ht||4294967286<ht){Q=3;break t}if(F&&ht>ut[0]-8){Q=7;break t}Q[0]=ht,$[0]+=12,ut[0]-=12}Q=0}if(Q!=0)return Q;for(ht=0<Y.gb[0],f=f[0];;){t:{var pt=r;ut=s,Q=f;var xt=C,bt=W,Rt=$=[0];if((Ot=et=[et])[0]=0,8>Q[0])Q=7;else{if(!e(pt,ut[0],\"VP8X\")){if(Dt(pt,ut[0]+4)!=10){Q=3;break t}if(18>Q[0]){Q=7;break t}var Pt=Dt(pt,ut[0]+8),re=1+St(pt,ut[0]+12);if(2147483648<=re*(pt=1+St(pt,ut[0]+15))){Q=3;break t}Rt!=null&&(Rt[0]=Pt),xt!=null&&(xt[0]=re),bt!=null&&(bt[0]=pt),ut[0]+=18,Q[0]-=18,Ot[0]=1}Q=0}}if(et=et[0],$=$[0],Q!=0)return Q;if(ut=!!(2&$),!ht&&et)return 3;if(w!=null&&(w[0]=!!(16&$)),y!=null&&(y[0]=ut),A!=null&&(A[0]=0),y=C[0],$=W[0],et&&ut&&L==null){Q=0;break}if(4>f){Q=7;break}if(ht&&et||!ht&&!et&&!e(r,s[0],\"ALPH\")){f=[f],Y.na=[Y.na],Y.P=[Y.P],Y.Sa=[Y.Sa];t:{Pt=r,Q=s,ht=f;var Ot=Y.gb;xt=Y.na,bt=Y.P,Rt=Y.Sa,re=22,t(Pt!=null),t(ht!=null),pt=Q[0];var ce=ht[0];for(t(xt!=null),t(Rt!=null),xt[0]=null,bt[0]=null,Rt[0]=0;;){if(Q[0]=pt,ht[0]=ce,8>ce){Q=7;break t}var Qe=Dt(Pt,pt+4);if(4294967286<Qe){Q=3;break t}var ie=8+Qe+1&-2;if(re+=ie,0<Ot&&re>Ot){Q=3;break t}if(!e(Pt,pt,\"VP8 \")||!e(Pt,pt,\"VP8L\")){Q=0;break t}if(ce[0]<ie){Q=7;break t}e(Pt,pt,\"ALPH\")||(xt[0]=Pt,bt[0]=pt+8,Rt[0]=Qe),pt+=ie,ce-=ie}}if(f=f[0],Y.na=Y.na[0],Y.P=Y.P[0],Y.Sa=Y.Sa[0],Q!=0)break}f=[f],Y.Ja=[Y.Ja],Y.xa=[Y.xa];t:if(Ot=r,Q=s,ht=f,xt=Y.gb[0],bt=Y.Ja,Rt=Y.xa,Pt=Q[0],pt=!e(Ot,Pt,\"VP8 \"),re=!e(Ot,Pt,\"VP8L\"),t(Ot!=null),t(ht!=null),t(bt!=null),t(Rt!=null),8>ht[0])Q=7;else{if(pt||re){if(Ot=Dt(Ot,Pt+4),12<=xt&&Ot>xt-12){Q=3;break t}if(F&&Ot>ht[0]-8){Q=7;break t}bt[0]=Ot,Q[0]+=8,ht[0]-=8,Rt[0]=re}else Rt[0]=5<=ht[0]&&Ot[Pt+0]==47&&!(Ot[Pt+4]>>5),bt[0]=ht[0];Q=0}if(f=f[0],Y.Ja=Y.Ja[0],Y.xa=Y.xa[0],s=s[0],Q!=0)break;if(4294967286<Y.Ja)return 3;if(A==null||ut||(A[0]=Y.xa?2:1),y=[y],$=[$],Y.xa){if(5>f){Q=7;break}A=y,F=$,ut=w,r==null||5>f?r=0:5<=f&&r[s+0]==47&&!(r[s+4]>>5)?(ht=[0],Ot=[0],xt=[0],ct(bt=new B,r,s,f),br(bt,ht,Ot,xt)?(A!=null&&(A[0]=ht[0]),F!=null&&(F[0]=Ot[0]),ut!=null&&(ut[0]=xt[0]),r=1):r=0):r=0}else{if(10>f){Q=7;break}A=$,r==null||10>f||!Va(r,s+3,f-3)?r=0:(F=r[s+0]|r[s+1]<<8|r[s+2]<<16,ut=16383&(r[s+7]<<8|r[s+6]),r=16383&(r[s+9]<<8|r[s+8]),1&F||3<(F>>1&7)||!(F>>4&1)||F>>5>=Y.Ja||!ut||!r?r=0:(y&&(y[0]=ut),A&&(A[0]=r),r=1))}if(!r||(y=y[0],$=$[0],et&&(C[0]!=y||W[0]!=$)))return 3;L!=null&&(L[0]=Y,L.offset=s-L.w,t(4294967286>s-L.w),t(L.offset==L.ha-f));break}return Q==0||Q==7&&et&&L==null?(w!=null&&(w[0]|=Y.na!=null&&0<Y.na.length),g!=null&&(g[0]=y),b!=null&&(b[0]=$),0):Q}function Un(r,s,f){var g=s.width,b=s.height,w=0,y=0,A=g,L=b;if(s.Da=r!=null&&0<r.Da,s.Da&&(A=r.cd,L=r.bd,w=r.v,y=r.j,11>f||(w&=-2,y&=-2),0>w||0>y||0>=A||0>=L||w+A>g||y+L>b))return 0;if(s.v=w,s.j=y,s.va=w+A,s.o=y+L,s.U=A,s.T=L,s.da=r!=null&&0<r.da,s.da){if(!Ht(A,L,f=[r.ib],w=[r.hb]))return 0;s.ib=f[0],s.hb=w[0]}return s.ob=r!=null&&r.ob,s.Kb=r==null||!r.Sd,s.da&&(s.ob=s.ib<3*g/4&&s.hb<3*b/4,s.Kb=0),1}function ci(r){if(r==null)return 2;if(11>r.S){var s=r.f.RGBA;s.fb+=(r.height-1)*s.A,s.A=-s.A}else s=r.f.kb,r=r.height,s.O+=(r-1)*s.fa,s.fa=-s.fa,s.N+=(r-1>>1)*s.Ab,s.Ab=-s.Ab,s.W+=(r-1>>1)*s.Db,s.Db=-s.Db,s.F!=null&&(s.J+=(r-1)*s.lb,s.lb=-s.lb);return 0}function ma(r,s,f,g){if(g==null||0>=r||0>=s)return 2;if(f!=null){if(f.Da){var b=f.cd,w=f.bd,y=-2&f.v,A=-2&f.j;if(0>y||0>A||0>=b||0>=w||y+b>r||A+w>s)return 2;r=b,s=w}if(f.da){if(!Ht(r,s,b=[f.ib],w=[f.hb]))return 2;r=b[0],s=w[0]}}g.width=r,g.height=s;t:{var L=g.width,C=g.height;if(r=g.S,0>=L||0>=C||!(r>=is&&13>r))r=2;else{if(0>=g.Rd&&g.sd==null){y=w=b=s=0;var W=(A=L*Al[r])*C;if(11>r||(w=(C+1)/2*(s=(L+1)/2),r==12&&(y=(b=L)*C)),(C=a(W+2*w+y))==null){r=1;break t}g.sd=C,11>r?((L=g.f.RGBA).eb=C,L.fb=0,L.A=A,L.size=W):((L=g.f.kb).y=C,L.O=0,L.fa=A,L.Fd=W,L.f=C,L.N=0+W,L.Ab=s,L.Cd=w,L.ea=C,L.W=0+W+w,L.Db=s,L.Ed=w,r==12&&(L.F=C,L.J=0+W+2*w),L.Tc=y,L.lb=b)}if(s=1,b=g.S,w=g.width,y=g.height,b>=is&&13>b)if(11>b)r=g.f.RGBA,s&=(A=Math.abs(r.A))*(y-1)+w<=r.size,s&=A>=w*Al[b],s&=r.eb!=null;else{r=g.f.kb,A=(w+1)/2,W=(y+1)/2,L=Math.abs(r.fa),C=Math.abs(r.Ab);var et=Math.abs(r.Db),F=Math.abs(r.lb),Y=F*(y-1)+w;s&=L*(y-1)+w<=r.Fd,s&=C*(W-1)+A<=r.Cd,s=(s&=et*(W-1)+A<=r.Ed)&L>=w&C>=A&et>=A,s&=r.y!=null,s&=r.f!=null,s&=r.ea!=null,b==12&&(s&=F>=w,s&=Y<=r.Tc,s&=r.F!=null)}else s=0;r=s?0:2}}return r!=0||f!=null&&f.fd&&(r=ci(g)),r}var Vi=64,di=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],va=24,yn=32,Nn=8,Gi=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];Ct(\"Predictor0\",\"PredictorAdd0\"),R.Predictor0=function(){return 4278190080},R.Predictor1=function(r){return r},R.Predictor2=function(r,s,f){return s[f+0]},R.Predictor3=function(r,s,f){return s[f+1]},R.Predictor4=function(r,s,f){return s[f-1]},R.Predictor5=function(r,s,f){return qt(qt(r,s[f+1]),s[f+0])},R.Predictor6=function(r,s,f){return qt(r,s[f-1])},R.Predictor7=function(r,s,f){return qt(r,s[f+0])},R.Predictor8=function(r,s,f){return qt(s[f-1],s[f+0])},R.Predictor9=function(r,s,f){return qt(s[f+0],s[f+1])},R.Predictor10=function(r,s,f){return qt(qt(r,s[f-1]),qt(s[f+0],s[f+1]))},R.Predictor11=function(r,s,f){var g=s[f+0];return 0>=Zt(g>>24&255,r>>24&255,(s=s[f-1])>>24&255)+Zt(g>>16&255,r>>16&255,s>>16&255)+Zt(g>>8&255,r>>8&255,s>>8&255)+Zt(255&g,255&r,255&s)?g:r},R.Predictor12=function(r,s,f){var g=s[f+0];return(ve((r>>24&255)+(g>>24&255)-((s=s[f-1])>>24&255))<<24|ve((r>>16&255)+(g>>16&255)-(s>>16&255))<<16|ve((r>>8&255)+(g>>8&255)-(s>>8&255))<<8|ve((255&r)+(255&g)-(255&s)))>>>0},R.Predictor13=function(r,s,f){var g=s[f-1];return(ue((r=qt(r,s[f+0]))>>24&255,g>>24&255)<<24|ue(r>>16&255,g>>16&255)<<16|ue(r>>8&255,g>>8&255)<<8|ue(255&r,255&g))>>>0};var Tr=R.PredictorAdd0;R.PredictorAdd1=he,Ct(\"Predictor2\",\"PredictorAdd2\"),Ct(\"Predictor3\",\"PredictorAdd3\"),Ct(\"Predictor4\",\"PredictorAdd4\"),Ct(\"Predictor5\",\"PredictorAdd5\"),Ct(\"Predictor6\",\"PredictorAdd6\"),Ct(\"Predictor7\",\"PredictorAdd7\"),Ct(\"Predictor8\",\"PredictorAdd8\"),Ct(\"Predictor9\",\"PredictorAdd9\"),Ct(\"Predictor10\",\"PredictorAdd10\"),Ct(\"Predictor11\",\"PredictorAdd11\"),Ct(\"Predictor12\",\"PredictorAdd12\"),Ct(\"Predictor13\",\"PredictorAdd13\");var Dr=R.PredictorAdd2;Tt(\"ColorIndexInverseTransform\",\"MapARGB\",\"32b\",function(r){return r>>8&255},function(r){return r}),Tt(\"VP8LColorIndexInverseTransformAlpha\",\"MapAlpha\",\"8b\",function(r){return r},function(r){return r>>8&255});var Yi,pi=R.ColorIndexInverseTransform,$e=R.MapARGB,Zs=R.VP8LColorIndexInverseTransformAlpha,fr=R.MapAlpha,Jn=R.VP8LPredictorsAdd=[];Jn.length=16,(R.VP8LPredictors=[]).length=16,(R.VP8LPredictorsAdd_C=[]).length=16,(R.VP8LPredictors_C=[]).length=16;var gi,ba,wa,Ji,mi,vi,qr,Lr,Ur,Ki,dn,hr,ke,Pe,He,Ze,Sr,ya,Xi,ns,tl,el,nl,rl,xa,il,al,sl,ol=a(511),ll=a(2041),ul=a(225),fl=a(767),hl=0,Qs=ll,rs=ul,In=fl,zn=ol,is=0,as=1,cl=2,ss=3,os=4,to=5,dl=6,eo=7,no=8,ls=9,ro=10,Df=[2,3,7],qf=[3,3,11],pl=[280,256,256,256,40],Uf=[0,1,1,1,0],zf=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],Hf=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],Wf=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],Vf=8,io=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],ao=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],_a=null,Gf=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],Yf=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],gl=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],Jf=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],Kf=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],Xf=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],$f=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],zr=[],Kn=[],kr=[],Zf=1,ml=2,Hr=[],Hn=[];hn(\"UpsampleRgbLinePair\",ui,3),hn(\"UpsampleBgrLinePair\",zi,3),hn(\"UpsampleRgbaLinePair\",ga,4),hn(\"UpsampleBgraLinePair\",hi,4),hn(\"UpsampleArgbLinePair\",fi,4),hn(\"UpsampleRgba4444LinePair\",cn,2),hn(\"UpsampleRgb565LinePair\",Hi,2);var Qf=R.UpsampleRgbLinePair,th=R.UpsampleBgrLinePair,vl=R.UpsampleRgbaLinePair,bl=R.UpsampleBgraLinePair,wl=R.UpsampleArgbLinePair,yl=R.UpsampleRgba4444LinePair,eh=R.UpsampleRgb565LinePair,us=16,fs=1<<us-1,Aa=-227,so=482,nh=6,xl=0,rh=a(256),ih=a(256),ah=a(256),sh=a(256),oh=a(so-Aa),lh=a(so-Aa);ur(\"YuvToRgbRow\",ui,3),ur(\"YuvToBgrRow\",zi,3),ur(\"YuvToRgbaRow\",ga,4),ur(\"YuvToBgraRow\",hi,4),ur(\"YuvToArgbRow\",fi,4),ur(\"YuvToRgba4444Row\",cn,2),ur(\"YuvToRgb565Row\",Hi,2);var _l=[0,4,8,12,128,132,136,140,256,260,264,268,384,388,392,396],hs=[0,2,8],uh=[8,7,6,4,4,2,2,2,1,1,1,1],fh=1;this.WebPDecodeRGBA=function(r,s,f,g,b){var w=as,y=new D,A=new le;y.ba=A,A.S=w,A.width=[A.width],A.height=[A.height];var L=A.width,C=A.height,W=new Vt;if(W==null||r==null)var et=2;else t(W!=null),et=es(r,s,f,W.width,W.height,W.Pd,W.Qd,W.format,null);if(et!=0?L=0:(L!=null&&(L[0]=W.width[0]),C!=null&&(C[0]=W.height[0]),L=1),L){A.width=A.width[0],A.height=A.height[0],g!=null&&(g[0]=A.width),b!=null&&(b[0]=A.height);t:{if(g=new Oi,(b=new K).data=r,b.w=s,b.ha=f,b.kd=1,s=[0],t(b!=null),((r=es(b.data,b.w,b.ha,null,null,null,s,null,b))==0||r==7)&&s[0]&&(r=4),(s=r)==0){if(t(y!=null),g.data=b.data,g.w=b.w+b.offset,g.ha=b.ha-b.offset,g.put=Gt,g.ac=nr,g.bc=vr,g.ma=y,b.xa){if((r=ni())==null){y=1;break t}if((function(F,Y){var $=[0],ut=[0],Q=[0];e:for(;;){if(F==null)return 0;if(Y==null)return F.a=2,0;if(F.l=Y,F.a=0,ct(F.m,Y.data,Y.w,Y.ha),!br(F.m,$,ut,Q)){F.a=3;break e}if(F.xb=ml,Y.width=$[0],Y.height=ut[0],!ir($[0],ut[0],1,F,null))break e;return 1}return t(F.a!=0),0})(r,g)){if(g=(s=ma(g.width,g.height,y.Oa,y.ba))==0){e:{g=r;n:for(;;){if(g==null){g=0;break e}if(t(g.s.yc!=null),t(g.s.Ya!=null),t(0<g.s.Wb),t((f=g.l)!=null),t((b=f.ma)!=null),g.xb!=0){if(g.ca=b.ba,g.tb=b.tb,t(g.ca!=null),!Un(b.Oa,f,ss)){g.a=2;break n}if(!ri(g,f.width)||f.da)break n;if((f.da||Yt(g.ca.S))&&Re(),11>g.ca.S||(alert(\"todo:WebPInitConvertARGBToYUV\"),g.ca.f.kb.F!=null&&Re()),g.Pb&&0<g.s.ua&&g.s.vb.X==null&&!P(g.s.vb,g.s.Wa.Xa)){g.a=1;break n}g.xb=0}if(!Yn(g,g.V,g.Ba,g.c,g.i,f.o,Or))break n;b.Dc=g.Ma,g=1;break e}t(g.a!=0),g=0}g=!g}g&&(s=r.a)}else s=r.a}else{if((r=new Bs)==null){y=1;break t}if(r.Fa=b.na,r.P=b.P,r.qc=b.Sa,sr(r,g)){if((s=ma(g.width,g.height,y.Oa,y.ba))==0){if(r.Aa=0,f=y.Oa,t((b=r)!=null),f!=null){if(0<(L=0>(L=f.Md)?0:100<L?255:255*L/100)){for(C=W=0;4>C;++C)12>(et=b.pb[C]).lc&&(et.ia=L*uh[0>et.lc?0:et.lc]>>3),W|=et.ia;W&&(alert(\"todo:VP8InitRandom\"),b.ia=1)}b.Ga=f.Id,100<b.Ga?b.Ga=100:0>b.Ga&&(b.Ga=0)}(function(F,Y){if(F==null)return 0;if(Y==null)return Ke(F,2,\"NULL VP8Io parameter in VP8Decode().\");if(!F.cb&&!sr(F,Y))return 0;if(t(F.cb),Y.ac==null||Y.ac(Y)){Y.ob&&(F.L=0);var $=hs[F.L];if(F.L==2?(F.yb=0,F.zb=0):(F.yb=Y.v-$>>4,F.zb=Y.j-$>>4,0>F.yb&&(F.yb=0),0>F.zb&&(F.zb=0)),F.Va=Y.o+15+$>>4,F.Hb=Y.va+15+$>>4,F.Hb>F.za&&(F.Hb=F.za),F.Va>F.Ub&&(F.Va=F.Ub),0<F.L){var ut=F.ed;for($=0;4>$;++$){var Q;if(F.Qa.Cb){var ht=F.Qa.Lb[$];F.Qa.Fb||(ht+=ut.Tb)}else ht=ut.Tb;for(Q=0;1>=Q;++Q){var pt=F.gd[$][Q],xt=ht;if(ut.Pc&&(xt+=ut.vd[0],Q&&(xt+=ut.od[0])),0<(xt=0>xt?0:63<xt?63:xt)){var bt=xt;0<ut.wb&&(bt=4<ut.wb?bt>>2:bt>>1)>9-ut.wb&&(bt=9-ut.wb),1>bt&&(bt=1),pt.dd=bt,pt.tc=2*xt+bt,pt.ld=40<=xt?2:15<=xt?1:0}else pt.tc=0;pt.La=Q}}}$=0}else Ke(F,6,\"Frame setup failed\"),$=F.a;if($=$==0){if($){F.$c=0,0<F.Aa||(F.Ic=fh);e:{$=F.Ic,ut=4*(bt=F.za);var Rt=32*bt,Pt=bt+1,re=0<F.L?bt*(0<F.Aa?2:1):0,Ot=(F.Aa==2?2:1)*bt;if((pt=ut+832+(Q=3*(16*$+hs[F.L])/2*Rt)+(ht=F.Fa!=null&&0<F.Fa.length?F.Kc.c*F.Kc.i:0))!=pt)$=0;else{if(pt>F.Vb){if(F.Vb=0,F.Ec=a(pt),F.Fc=0,F.Ec==null){$=Ke(F,1,\"no memory during frame initialization.\");break e}F.Vb=pt}pt=F.Ec,xt=F.Fc,F.Ac=pt,F.Bc=xt,xt+=ut,F.Gd=c(Rt,Ha),F.Hd=0,F.rb=c(Pt+1,aa),F.sb=1,F.wa=re?c(re,qn):null,F.Y=0,F.D.Nb=0,F.D.wa=F.wa,F.D.Y=F.Y,0<F.Aa&&(F.D.Y+=bt),t(!0),F.oc=pt,F.pc=xt,xt+=832,F.ya=c(Ot,sa),F.aa=0,F.D.ya=F.ya,F.D.aa=F.aa,F.Aa==2&&(F.D.aa+=bt),F.R=16*bt,F.B=8*bt,bt=(Rt=hs[F.L])*F.R,Rt=Rt/2*F.B,F.sa=pt,F.ta=xt+bt,F.qa=F.sa,F.ra=F.ta+16*$*F.R+Rt,F.Ha=F.qa,F.Ia=F.ra+8*$*F.B+Rt,F.$c=0,xt+=Q,F.mb=ht?pt:null,F.nb=ht?xt:null,t(xt+ht<=F.Fc+F.Vb),oa(F),o(F.Ac,F.Bc,0,ut),$=1}}if($){if(Y.ka=0,Y.y=F.sa,Y.O=F.ta,Y.f=F.qa,Y.N=F.ra,Y.ea=F.Ha,Y.Vd=F.Ia,Y.fa=F.R,Y.Rc=F.B,Y.F=null,Y.J=0,!hl){for($=-255;255>=$;++$)ol[255+$]=0>$?-$:$;for($=-1020;1020>=$;++$)ll[1020+$]=-128>$?-128:127<$?127:$;for($=-112;112>=$;++$)ul[112+$]=-16>$?-16:15<$?15:$;for($=-255;510>=$;++$)fl[255+$]=0>$?0:255<$?255:$;hl=1}qr=Ya,Lr=Ms,Ki=Rs,dn=Ts,hr=or,Ur=Ga,ke=Xa,Pe=$a,He=Qa,Ze=u,Sr=Za,ya=si,Xi=v,ns=I,tl=qi,el=da,nl=Ui,rl=Ka,Kn[0]=Vs,Kn[1]=Ri,Kn[2]=Hs,Kn[3]=Ws,Kn[4]=Gs,Kn[5]=yr,Kn[6]=Ys,Kn[7]=xr,Kn[8]=Ks,Kn[9]=Js,zr[0]=Ja,zr[1]=Ds,zr[2]=qs,zr[3]=Us,zr[4]=Br,zr[5]=zs,zr[6]=ii,kr[0]=Xs,kr[1]=la,kr[2]=Ti,kr[3]=ua,kr[4]=$s,kr[5]=Di,kr[6]=fa,$=1}else $=0}$&&($=(function(ce,Qe){for(ce.M=0;ce.M<ce.Va;++ce.M){var ie,jt=ce.Jc[ce.M&ce.Xb],Nt=ce.m,We=ce;for(ie=0;ie<We.za;++ie){var ee=Nt,pe=We,Fe=pe.Ac,on=pe.Bc+4*ie,xn=pe.zc,De=pe.ya[pe.aa+ie];if(pe.Qa.Bb?De.$b=gt(ee,pe.Pa.jb[0])?2+gt(ee,pe.Pa.jb[2]):gt(ee,pe.Pa.jb[1]):De.$b=0,pe.kc&&(De.Ad=gt(ee,pe.Bd)),De.Za=!gt(ee,145)+0,De.Za){var pn=De.Ob,_n=0;for(pe=0;4>pe;++pe){var tn,me=xn[0+pe];for(tn=0;4>tn;++tn){me=Kf[Fe[on+tn]][me];for(var we=gl[gt(ee,me[0])];0<we;)we=gl[2*we+gt(ee,me[we])];me=-we,Fe[on+tn]=me}i(pn,_n,Fe,on,4),_n+=4,xn[0+pe]=me}}else me=gt(ee,156)?gt(ee,128)?1:3:gt(ee,163)?2:0,De.Ob[0]=me,o(Fe,on,me,4),o(xn,0,me,4);De.Dd=gt(ee,142)?gt(ee,114)?gt(ee,183)?1:3:2:0}if(We.m.Ka)return Ke(ce,7,\"Premature end-of-partition0 encountered.\");for(;ce.ja<ce.za;++ce.ja){if(We=jt,ee=(Nt=ce).rb[Nt.sb-1],Fe=Nt.rb[Nt.sb+Nt.ja],ie=Nt.ya[Nt.aa+Nt.ja],on=Nt.kc?ie.Ad:0)ee.la=Fe.la=0,ie.Za||(ee.Na=Fe.Na=0),ie.Hc=0,ie.Gc=0,ie.ia=0;else{var qe,ye;if(ee=Fe,Fe=We,on=Nt.Pa.Xc,xn=Nt.ya[Nt.aa+Nt.ja],De=Nt.pb[xn.$b],pe=xn.ad,pn=0,_n=Nt.rb[Nt.sb-1],me=tn=0,o(pe,pn,0,384),xn.Za)var ln=0,Xn=on[3];else{we=a(16);var Ve=ee.Na+_n.Na;if(Ve=_a(Fe,on[1],Ve,De.Eb,0,we,0),ee.Na=_n.Na=(0<Ve)+0,1<Ve)qr(we,0,pe,pn);else{var Ln=we[0]+3>>3;for(we=0;256>we;we+=16)pe[pn+we]=Ln}ln=1,Xn=on[0]}var Ne=15&ee.la,en=15&_n.la;for(we=0;4>we;++we){var Cn=1&en;for(Ln=ye=0;4>Ln;++Ln)Ne=Ne>>1|(Cn=(Ve=_a(Fe,Xn,Ve=Cn+(1&Ne),De.Sc,ln,pe,pn))>ln)<<7,ye=ye<<2|(3<Ve?3:1<Ve?2:pe[pn+0]!=0),pn+=16;Ne>>=4,en=en>>1|Cn<<7,tn=(tn<<8|ye)>>>0}for(Xn=Ne,ln=en>>4,qe=0;4>qe;qe+=2){for(ye=0,Ne=ee.la>>4+qe,en=_n.la>>4+qe,we=0;2>we;++we){for(Cn=1&en,Ln=0;2>Ln;++Ln)Ve=Cn+(1&Ne),Ne=Ne>>1|(Cn=0<(Ve=_a(Fe,on[2],Ve,De.Qc,0,pe,pn)))<<3,ye=ye<<2|(3<Ve?3:1<Ve?2:pe[pn+0]!=0),pn+=16;Ne>>=2,en=en>>1|Cn<<5}me|=ye<<4*qe,Xn|=Ne<<4<<qe,ln|=(240&en)<<qe}ee.la=Xn,_n.la=ln,xn.Hc=tn,xn.Gc=me,xn.ia=43690&me?0:De.ia,on=!(tn|me)}if(0<Nt.L&&(Nt.wa[Nt.Y+Nt.ja]=Nt.gd[ie.$b][ie.Za],Nt.wa[Nt.Y+Nt.ja].La|=!on),We.Ka)return Ke(ce,7,\"Premature end-of-file encountered.\")}if(oa(ce),Nt=Qe,We=1,ie=(jt=ce).D,ee=0<jt.L&&jt.M>=jt.zb&&jt.M<=jt.Va,jt.Aa==0)e:{if(ie.M=jt.M,ie.uc=ee,Wi(jt,ie),We=1,ie=(ye=jt.D).Nb,ee=(me=hs[jt.L])*jt.R,Fe=me/2*jt.B,we=16*ie*jt.R,Ln=8*ie*jt.B,on=jt.sa,xn=jt.ta-ee+we,De=jt.qa,pe=jt.ra-Fe+Ln,pn=jt.Ha,_n=jt.Ia-Fe+Ln,en=(Ne=ye.M)==0,tn=Ne>=jt.Va-1,jt.Aa==2&&Wi(jt,ye),ye.uc)for(Cn=(Ve=jt).D.M,t(Ve.D.uc),ye=Ve.yb;ye<Ve.Hb;++ye){ln=ye,Xn=Cn;var An=(Fn=(un=Ve).D).Nb;qe=un.R;var Fn=Fn.wa[Fn.Y+ln],En=un.sa,Sn=un.ta+16*An*qe+16*ln,On=Fn.dd,Ie=Fn.tc;if(Ie!=0)if(t(3<=Ie),un.L==1)0<ln&&el(En,Sn,qe,Ie+4),Fn.La&&rl(En,Sn,qe,Ie),0<Xn&&tl(En,Sn,qe,Ie+4),Fn.La&&nl(En,Sn,qe,Ie);else{var jn=un.B,$n=un.qa,bi=un.ra+8*An*jn+8*ln,Pr=un.Ha,un=un.Ia+8*An*jn+8*ln;An=Fn.ld,0<ln&&(Pe(En,Sn,qe,Ie+4,On,An),Ze($n,bi,Pr,un,jn,Ie+4,On,An)),Fn.La&&(ya(En,Sn,qe,Ie,On,An),ns($n,bi,Pr,un,jn,Ie,On,An)),0<Xn&&(ke(En,Sn,qe,Ie+4,On,An),He($n,bi,Pr,un,jn,Ie+4,On,An)),Fn.La&&(Sr(En,Sn,qe,Ie,On,An),Xi($n,bi,Pr,un,jn,Ie,On,An))}}if(jt.ia&&alert(\"todo:DitherRow\"),Nt.put!=null){if(ye=16*Ne,Ne=16*(Ne+1),en?(Nt.y=jt.sa,Nt.O=jt.ta+we,Nt.f=jt.qa,Nt.N=jt.ra+Ln,Nt.ea=jt.Ha,Nt.W=jt.Ia+Ln):(ye-=me,Nt.y=on,Nt.O=xn,Nt.f=De,Nt.N=pe,Nt.ea=pn,Nt.W=_n),tn||(Ne-=me),Ne>Nt.o&&(Ne=Nt.o),Nt.F=null,Nt.J=null,jt.Fa!=null&&0<jt.Fa.length&&ye<Ne&&(Nt.J=Xe(jt,Nt,ye,Ne-ye),Nt.F=jt.mb,Nt.F==null&&Nt.F.length==0)){We=Ke(jt,3,\"Could not decode alpha data.\");break e}ye<Nt.j&&(me=Nt.j-ye,ye=Nt.j,t(!(1&me)),Nt.O+=jt.R*me,Nt.N+=jt.B*(me>>1),Nt.W+=jt.B*(me>>1),Nt.F!=null&&(Nt.J+=Nt.width*me)),ye<Ne&&(Nt.O+=Nt.v,Nt.N+=Nt.v>>1,Nt.W+=Nt.v>>1,Nt.F!=null&&(Nt.J+=Nt.v),Nt.ka=ye-Nt.j,Nt.U=Nt.va-Nt.v,Nt.T=Ne-ye,We=Nt.put(Nt))}ie+1!=jt.Ic||tn||(i(jt.sa,jt.ta-ee,on,xn+16*jt.R,ee),i(jt.qa,jt.ra-Fe,De,pe+8*jt.B,Fe),i(jt.Ha,jt.Ia-Fe,pn,_n+8*jt.B,Fe))}if(!We)return Ke(ce,6,\"Output aborted.\")}return 1})(F,Y)),Y.bc!=null&&Y.bc(Y),$&=1}return $?(F.cb=0,$):0})(r,g)||(s=r.a)}}else s=r.a}s==0&&y.Oa!=null&&y.Oa.fd&&(s=ci(y.ba))}y=s}w=y!=0?null:11>w?A.f.RGBA.eb:A.f.kb.y}else w=null;return w};var Al=[3,4,3,4,4,2,2,4,4,4,2,1,1]};function d(R,tt){for(var N=\"\",E=0;E<4;E++)N+=String.fromCharCode(R[tt++]);return N}function m(R,tt){return R[tt+0]|R[tt+1]<<8}function _(R,tt){return(R[tt+0]|R[tt+1]<<8|R[tt+2]<<16)>>>0}function k(R,tt){return(R[tt+0]|R[tt+1]<<8|R[tt+2]<<16|R[tt+3]<<24)>>>0}new h;var p=[0],j=[0],O=[],M=new h,S=n,V=(function(R,tt){var N={},E=0,z=!1,U=0,rt=0;if(N.frames=[],!(function(x,B){for(var T=0;T<4;T++)if(x[B+T]!=\"RIFF\".charCodeAt(T))return!0;return!1})(R,tt)){for(k(R,tt+=4),tt+=8;tt<R.length;){var ot=d(R,tt),ft=k(R,tt+=4);tt+=4;var nt=ft+(1&ft);switch(ot){case\"VP8 \":case\"VP8L\":N.frames[E]===void 0&&(N.frames[E]={}),(wt=N.frames[E]).src_off=z?rt:tt-8,wt.src_size=U+ft+8,E++,z&&(z=!1,U=0,rt=0);break;case\"VP8X\":(wt=N.header={}).feature_flags=R[tt];var ct=tt+4;wt.canvas_width=1+_(R,ct),ct+=3,wt.canvas_height=1+_(R,ct),ct+=3;break;case\"ALPH\":z=!0,U=nt+8,rt=tt-8;break;case\"ANIM\":(wt=N.header).bgcolor=k(R,tt),ct=tt+4,wt.loop_count=m(R,ct),ct+=2;break;case\"ANMF\":var At,wt;(wt=N.frames[E]={}).offset_x=2*_(R,tt),tt+=3,wt.offset_y=2*_(R,tt),tt+=3,wt.width=1+_(R,tt),tt+=3,wt.height=1+_(R,tt),tt+=3,wt.duration=_(R,tt),tt+=3,At=R[tt++],wt.dispose=1&At,wt.blend=At>>1&1}ot!=\"ANMF\"&&(tt+=nt)}return N}})(S,0);V.response=S,V.rgbaoutput=!0,V.dataurl=!1;var G=V.header?V.header:null,q=V.frames?V.frames:null;if(G){G.loop_counter=G.loop_count,p=[G.canvas_height],j=[G.canvas_width];for(var it=0;it<q.length&&q[it].blend!=0;it++);}var vt=q[0],dt=M.WebPDecodeRGBA(S,vt.src_off,vt.src_size,j,p);vt.rgba=dt,vt.imgwidth=j[0],vt.imgheight=p[0];for(var X=0;X<j[0]*p[0]*4;X++)O[X]=dt[X];return this.width=j,this.height=p,this.data=O,this}function K1(){var n,t=this.internal.__metadata__.metadata,e=unescape(encodeURIComponent(t));n=this.internal.__metadata__.rawXml?e:'<x:xmpmeta xmlns:x=\"adobe:ns:meta/\"><rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"><rdf:Description rdf:about=\"\" xmlns:jspdf=\"'+this.internal.__metadata__.namespaceUri+'\"><jspdf:metadata>'+e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&apos;\")+\"</jspdf:metadata></rdf:Description></rdf:RDF></x:xmpmeta>\",this.internal.__metadata__.metadataObjectNumber=this.internal.newObject(),this.internal.write(\"<< /Type /Metadata /Subtype /XML /Length \"+n.length+\" >>\"),this.internal.write(\"stream\"),this.internal.write(n),this.internal.write(\"endstream\"),this.internal.write(\"endobj\")}function X1(){this.internal.__metadata__.metadataObjectNumber&&this.internal.write(\"/Metadata \"+this.internal.__metadata__.metadataObjectNumber+\" 0 R\")}(function(n){var t,e,i,o,a,c,l,h,d,m=function(x){return x=x||{},this.isStrokeTransparent=x.isStrokeTransparent||!1,this.strokeOpacity=x.strokeOpacity||1,this.strokeStyle=x.strokeStyle||\"#000000\",this.fillStyle=x.fillStyle||\"#000000\",this.isFillTransparent=x.isFillTransparent||!1,this.fillOpacity=x.fillOpacity||1,this.font=x.font||\"10px sans-serif\",this.textBaseline=x.textBaseline||\"alphabetic\",this.textAlign=x.textAlign||\"left\",this.lineWidth=x.lineWidth||1,this.lineJoin=x.lineJoin||\"miter\",this.lineCap=x.lineCap||\"butt\",this.path=x.path||[],this.transform=x.transform!==void 0?x.transform.clone():new h,this.globalCompositeOperation=x.globalCompositeOperation||\"normal\",this.globalAlpha=x.globalAlpha||1,this.clip_path=x.clip_path||[],this.currentPoint=x.currentPoint||new c,this.miterLimit=x.miterLimit||10,this.lastPoint=x.lastPoint||new c,this.lineDashOffset=x.lineDashOffset||0,this.lineDash=x.lineDash||[],this.margin=x.margin||[0,0,0,0],this.prevPageLastElemOffset=x.prevPageLastElemOffset||0,this.ignoreClearRect=typeof x.ignoreClearRect!=\"boolean\"||x.ignoreClearRect,this};n.events.push([\"initialized\",function(){this.context2d=new _(this),t=this.internal.f2,e=this.internal.getCoordinateString,i=this.internal.getVerticalCoordinateString,o=this.internal.getHorizontalCoordinate,a=this.internal.getVerticalCoordinate,c=this.internal.Point,l=this.internal.Rectangle,h=this.internal.Matrix,d=new m}]);var _=function(x){Object.defineProperty(this,\"canvas\",{get:function(){return{parentNode:!1,style:!1}}});var B=x;Object.defineProperty(this,\"pdf\",{get:function(){return B}});var T=!1;Object.defineProperty(this,\"pageWrapXEnabled\",{get:function(){return T},set:function(P){T=!!P}});var H=!1;Object.defineProperty(this,\"pageWrapYEnabled\",{get:function(){return H},set:function(P){H=!!P}});var J=0;Object.defineProperty(this,\"posX\",{get:function(){return J},set:function(P){isNaN(P)||(J=P)}});var Z=0;Object.defineProperty(this,\"posY\",{get:function(){return Z},set:function(P){isNaN(P)||(Z=P)}}),Object.defineProperty(this,\"margin\",{get:function(){return d.margin},set:function(P){var Lt;typeof P==\"number\"?Lt=[P,P,P,P]:((Lt=new Array(4))[0]=P[0],Lt[1]=P.length>=2?P[1]:Lt[0],Lt[2]=P.length>=3?P[2]:Lt[0],Lt[3]=P.length>=4?P[3]:Lt[1]),d.margin=Lt}});var at=!1;Object.defineProperty(this,\"autoPaging\",{get:function(){return at},set:function(P){at=P}});var st=0;Object.defineProperty(this,\"lastBreak\",{get:function(){return st},set:function(P){st=P}});var gt=[];Object.defineProperty(this,\"pageBreaks\",{get:function(){return gt},set:function(P){gt=P}}),Object.defineProperty(this,\"ctx\",{get:function(){return d},set:function(P){P instanceof m&&(d=P)}}),Object.defineProperty(this,\"path\",{get:function(){return d.path},set:function(P){d.path=P}});var _t=[];Object.defineProperty(this,\"ctxStack\",{get:function(){return _t},set:function(P){_t=P}}),Object.defineProperty(this,\"fillStyle\",{get:function(){return this.ctx.fillStyle},set:function(P){var Lt;Lt=k(P),this.ctx.fillStyle=Lt.style,this.ctx.isFillTransparent=Lt.a===0,this.ctx.fillOpacity=Lt.a,this.pdf.setFillColor(Lt.r,Lt.g,Lt.b,{a:Lt.a}),this.pdf.setTextColor(Lt.r,Lt.g,Lt.b,{a:Lt.a})}}),Object.defineProperty(this,\"strokeStyle\",{get:function(){return this.ctx.strokeStyle},set:function(P){var Lt=k(P);this.ctx.strokeStyle=Lt.style,this.ctx.isStrokeTransparent=Lt.a===0,this.ctx.strokeOpacity=Lt.a,Lt.a===0?this.pdf.setDrawColor(255,255,255):(Lt.a,this.pdf.setDrawColor(Lt.r,Lt.g,Lt.b))}}),Object.defineProperty(this,\"lineCap\",{get:function(){return this.ctx.lineCap},set:function(P){[\"butt\",\"round\",\"square\"].indexOf(P)!==-1&&(this.ctx.lineCap=P,this.pdf.setLineCap(P))}}),Object.defineProperty(this,\"lineWidth\",{get:function(){return this.ctx.lineWidth},set:function(P){isNaN(P)||(this.ctx.lineWidth=P,this.pdf.setLineWidth(P))}}),Object.defineProperty(this,\"lineJoin\",{get:function(){return this.ctx.lineJoin},set:function(P){[\"bevel\",\"round\",\"miter\"].indexOf(P)!==-1&&(this.ctx.lineJoin=P,this.pdf.setLineJoin(P))}}),Object.defineProperty(this,\"miterLimit\",{get:function(){return this.ctx.miterLimit},set:function(P){isNaN(P)||(this.ctx.miterLimit=P,this.pdf.setMiterLimit(P))}}),Object.defineProperty(this,\"textBaseline\",{get:function(){return this.ctx.textBaseline},set:function(P){this.ctx.textBaseline=P}}),Object.defineProperty(this,\"textAlign\",{get:function(){return this.ctx.textAlign},set:function(P){[\"right\",\"end\",\"center\",\"left\",\"start\"].indexOf(P)!==-1&&(this.ctx.textAlign=P)}});var kt=null,St=null,Dt=null;Object.defineProperty(this,\"fontFaces\",{get:function(){return Dt},set:function(P){kt=null,St=null,Dt=P}}),Object.defineProperty(this,\"font\",{get:function(){return this.ctx.font},set:function(P){var Lt;if(this.ctx.font=P,(Lt=/^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z0-9]+?)\\s*$/i.exec(P))!==null){var ae=Lt[1];Lt[2];var Ht=Lt[3],yt=Lt[4];Lt[5];var Wt=Lt[6],Ct=/^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i.exec(yt)[2];yt=Math.floor(Ct===\"px\"?parseFloat(yt)*this.pdf.internal.scaleFactor:Ct===\"em\"?parseFloat(yt)*this.pdf.getFontSize():parseFloat(yt)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(yt);var zt=(function(Tt){var ze,ge,se=[],oe=Tt.trim();if(oe===\"\")return Bo;if(oe in Eu)return[Eu[oe]];for(;oe!==\"\";){switch(ge=null,ze=(oe=ju(oe)).charAt(0)){case'\"':case\"'\":ge=H1(oe.substring(1),ze);break;default:ge=W1(oe)}if(ge===null||(se.push(ge[0]),(oe=ju(ge[1]))!==\"\"&&oe.charAt(0)!==\",\"))return Bo;oe=oe.replace(/^,/,\"\")}return se})(Wt);if(this.fontFaces){var qt=(function(Tt,ze){var ge=Tt.getFontList(),se=JSON.stringify(ge);if(kt===null||St!==se){var oe=(function(Oe){var Ut=[];return Object.keys(Oe).forEach(function(Se){Oe[Se].forEach(function(Yt){var Qt=null;switch(Yt){case\"bold\":Qt={family:Se,weight:\"bold\"};break;case\"italic\":Qt={family:Se,style:\"italic\"};break;case\"bolditalic\":Qt={family:Se,weight:\"bold\",style:\"italic\"};break;case\"\":case\"normal\":Qt={family:Se}}Qt!==null&&(Qt.ref={name:Se,style:Yt},Ut.push(Qt))})}),Ut})(ge);kt=(function(Oe){for(var Ut={},Se=0;Se<Oe.length;++Se){var Yt=jo(Oe[Se]),Qt=Yt.family,je=Yt.stretch,le=Yt.style,Vt=Yt.weight;Ut[Qt]=Ut[Qt]||{},Ut[Qt][je]=Ut[Qt][je]||{},Ut[Qt][je][le]=Ut[Qt][je][le]||{},Ut[Qt][je][le][Vt]=Yt}return Ut})(oe.concat(ze)),St=se}return kt})(this.pdf,this.fontFaces),ve=zt.map(function(Tt){return{family:Tt,stretch:\"normal\",weight:Ht,style:ae}}),ue=(function(Tt,ze,ge){for(var se=(ge=ge||{}).defaultFontFamily||\"times\",oe=Object.assign({},z1,ge.genericFontFamilies||{}),Oe=null,Ut=null,Se=0;Se<ze.length;++Se)if(oe[(Oe=jo(ze[Se])).family]&&(Oe.family=oe[Oe.family]),Tt.hasOwnProperty(Oe.family)){Ut=Tt[Oe.family];break}if(!(Ut=Ut||Tt[se]))throw new Error(\"Could not find a font-family for the rule '\"+Ou(Oe)+\"' and default family '\"+se+\"'.\");if(Ut=(function(Yt,Qt){if(Qt[Yt])return Qt[Yt];var je=Jo[Yt],le=je<=Jo.normal?-1:1,Vt=Fu(Qt,jf,je,le);if(!Vt)throw new Error(\"Could not find a matching font-stretch value for \"+Yt);return Vt})(Oe.stretch,Ut),Ut=(function(Yt,Qt){if(Qt[Yt])return Qt[Yt];for(var je=Of[Yt],le=0;le<je.length;++le)if(Qt[je[le]])return Qt[je[le]];throw new Error(\"Could not find a matching font-style for \"+Yt)})(Oe.style,Ut),!(Ut=(function(Yt,Qt){if(Qt[Yt])return Qt[Yt];if(Yt===400&&Qt[500])return Qt[500];if(Yt===500&&Qt[400])return Qt[400];var je=U1[Yt],le=Fu(Qt,Bf,je,Yt<400?-1:1);if(!le)throw new Error(\"Could not find a matching font-weight for value \"+Yt);return le})(Oe.weight,Ut)))throw new Error(\"Failed to resolve a font for the rule '\"+Ou(Oe)+\"'.\");return Ut})(qt,ve);this.pdf.setFont(ue.ref.name,ue.ref.style)}else{var Zt=\"\";(Ht===\"bold\"||parseInt(Ht,10)>=700||ae===\"bold\")&&(Zt=\"bold\"),ae===\"italic\"&&(Zt+=\"italic\"),Zt.length===0&&(Zt=\"normal\");for(var he=\"\",fe={arial:\"Helvetica\",Arial:\"Helvetica\",verdana:\"Helvetica\",Verdana:\"Helvetica\",helvetica:\"Helvetica\",Helvetica:\"Helvetica\",\"sans-serif\":\"Helvetica\",fixed:\"Courier\",monospace:\"Courier\",terminal:\"Courier\",cursive:\"Times\",fantasy:\"Times\",serif:\"Times\"},Bt=0;Bt<zt.length;Bt++){if(this.pdf.internal.getFont(zt[Bt],Zt,{noFallback:!0,disableWarning:!0})!==void 0){he=zt[Bt];break}if(Zt===\"bolditalic\"&&this.pdf.internal.getFont(zt[Bt],\"bold\",{noFallback:!0,disableWarning:!0})!==void 0)he=zt[Bt],Zt=\"bold\";else if(this.pdf.internal.getFont(zt[Bt],\"normal\",{noFallback:!0,disableWarning:!0})!==void 0){he=zt[Bt],Zt=\"normal\";break}}if(he===\"\"){for(var ne=0;ne<zt.length;ne++)if(fe[zt[ne]]){he=fe[zt[ne]];break}}he=he===\"\"?\"Times\":he,this.pdf.setFont(he,Zt)}}}}),Object.defineProperty(this,\"globalCompositeOperation\",{get:function(){return this.ctx.globalCompositeOperation},set:function(P){this.ctx.globalCompositeOperation=P}}),Object.defineProperty(this,\"globalAlpha\",{get:function(){return this.ctx.globalAlpha},set:function(P){this.ctx.globalAlpha=P}}),Object.defineProperty(this,\"lineDashOffset\",{get:function(){return this.ctx.lineDashOffset},set:function(P){this.ctx.lineDashOffset=P,wt.call(this)}}),Object.defineProperty(this,\"lineDash\",{get:function(){return this.ctx.lineDash},set:function(P){this.ctx.lineDash=P,wt.call(this)}}),Object.defineProperty(this,\"ignoreClearRect\",{get:function(){return this.ctx.ignoreClearRect},set:function(P){this.ctx.ignoreClearRect=!!P}})};_.prototype.setLineDash=function(x){this.lineDash=x},_.prototype.getLineDash=function(){return this.lineDash.length%2?this.lineDash.concat(this.lineDash):this.lineDash.slice()},_.prototype.fill=function(){q.call(this,\"fill\",!1)},_.prototype.stroke=function(){q.call(this,\"stroke\",!1)},_.prototype.beginPath=function(){this.path=[{type:\"begin\"}]},_.prototype.moveTo=function(x,B){if(isNaN(x)||isNaN(B))throw Le.error(\"jsPDF.context2d.moveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");var T=this.ctx.transform.applyToPoint(new c(x,B));this.path.push({type:\"mt\",x:T.x,y:T.y}),this.ctx.lastPoint=new c(x,B)},_.prototype.closePath=function(){var x=new c(0,0),B=0;for(B=this.path.length-1;B!==-1;B--)if(this.path[B].type===\"begin\"&&xe(this.path[B+1])===\"object\"&&typeof this.path[B+1].x==\"number\"){x=new c(this.path[B+1].x,this.path[B+1].y);break}this.path.push({type:\"close\"}),this.ctx.lastPoint=new c(x.x,x.y)},_.prototype.lineTo=function(x,B){if(isNaN(x)||isNaN(B))throw Le.error(\"jsPDF.context2d.lineTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");var T=this.ctx.transform.applyToPoint(new c(x,B));this.path.push({type:\"lt\",x:T.x,y:T.y}),this.ctx.lastPoint=new c(T.x,T.y)},_.prototype.clip=function(){this.ctx.clip_path=JSON.parse(JSON.stringify(this.path)),q.call(this,null,!0)},_.prototype.quadraticCurveTo=function(x,B,T,H){if(isNaN(T)||isNaN(H)||isNaN(x)||isNaN(B))throw Le.error(\"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\");var J=this.ctx.transform.applyToPoint(new c(T,H)),Z=this.ctx.transform.applyToPoint(new c(x,B));this.path.push({type:\"qct\",x1:Z.x,y1:Z.y,x:J.x,y:J.y}),this.ctx.lastPoint=new c(J.x,J.y)},_.prototype.bezierCurveTo=function(x,B,T,H,J,Z){if(isNaN(J)||isNaN(Z)||isNaN(x)||isNaN(B)||isNaN(T)||isNaN(H))throw Le.error(\"jsPDF.context2d.bezierCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\");var at=this.ctx.transform.applyToPoint(new c(J,Z)),st=this.ctx.transform.applyToPoint(new c(x,B)),gt=this.ctx.transform.applyToPoint(new c(T,H));this.path.push({type:\"bct\",x1:st.x,y1:st.y,x2:gt.x,y2:gt.y,x:at.x,y:at.y}),this.ctx.lastPoint=new c(at.x,at.y)},_.prototype.arc=function(x,B,T,H,J,Z){if(isNaN(x)||isNaN(B)||isNaN(T)||isNaN(H)||isNaN(J))throw Le.error(\"jsPDF.context2d.arc: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");if(Z=!!Z,!this.ctx.transform.isIdentity){var at=this.ctx.transform.applyToPoint(new c(x,B));x=at.x,B=at.y;var st=this.ctx.transform.applyToPoint(new c(0,T)),gt=this.ctx.transform.applyToPoint(new c(0,0));T=Math.sqrt(Math.pow(st.x-gt.x,2)+Math.pow(st.y-gt.y,2))}Math.abs(J-H)>=2*Math.PI&&(H=0,J=2*Math.PI),this.path.push({type:\"arc\",x,y:B,radius:T,startAngle:H,endAngle:J,counterclockwise:Z})},_.prototype.arcTo=function(x,B,T,H,J){throw new Error(\"arcTo not implemented.\")},_.prototype.rect=function(x,B,T,H){if(isNaN(x)||isNaN(B)||isNaN(T)||isNaN(H))throw Le.error(\"jsPDF.context2d.rect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");this.moveTo(x,B),this.lineTo(x+T,B),this.lineTo(x+T,B+H),this.lineTo(x,B+H),this.lineTo(x,B),this.lineTo(x+T,B),this.lineTo(x,B)},_.prototype.fillRect=function(x,B,T,H){if(isNaN(x)||isNaN(B)||isNaN(T)||isNaN(H))throw Le.error(\"jsPDF.context2d.fillRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");if(!p.call(this)){var J={};this.lineCap!==\"butt\"&&(J.lineCap=this.lineCap,this.lineCap=\"butt\"),this.lineJoin!==\"miter\"&&(J.lineJoin=this.lineJoin,this.lineJoin=\"miter\"),this.beginPath(),this.rect(x,B,T,H),this.fill(),J.hasOwnProperty(\"lineCap\")&&(this.lineCap=J.lineCap),J.hasOwnProperty(\"lineJoin\")&&(this.lineJoin=J.lineJoin)}},_.prototype.strokeRect=function(x,B,T,H){if(isNaN(x)||isNaN(B)||isNaN(T)||isNaN(H))throw Le.error(\"jsPDF.context2d.strokeRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");j.call(this)||(this.beginPath(),this.rect(x,B,T,H),this.stroke())},_.prototype.clearRect=function(x,B,T,H){if(isNaN(x)||isNaN(B)||isNaN(T)||isNaN(H))throw Le.error(\"jsPDF.context2d.clearRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");this.ignoreClearRect||(this.fillStyle=\"#ffffff\",this.fillRect(x,B,T,H))},_.prototype.save=function(x){x=typeof x!=\"boolean\"||x;for(var B=this.pdf.internal.getCurrentPageInfo().pageNumber,T=0;T<this.pdf.internal.getNumberOfPages();T++)this.pdf.setPage(T+1),this.pdf.internal.out(\"q\");if(this.pdf.setPage(B),x){this.ctx.fontSize=this.pdf.internal.getFontSize();var H=new m(this.ctx);this.ctxStack.push(this.ctx),this.ctx=H}},_.prototype.restore=function(x){x=typeof x!=\"boolean\"||x;for(var B=this.pdf.internal.getCurrentPageInfo().pageNumber,T=0;T<this.pdf.internal.getNumberOfPages();T++)this.pdf.setPage(T+1),this.pdf.internal.out(\"Q\");this.pdf.setPage(B),x&&this.ctxStack.length!==0&&(this.ctx=this.ctxStack.pop(),this.fillStyle=this.ctx.fillStyle,this.strokeStyle=this.ctx.strokeStyle,this.font=this.ctx.font,this.lineCap=this.ctx.lineCap,this.lineWidth=this.ctx.lineWidth,this.lineJoin=this.ctx.lineJoin,this.lineDash=this.ctx.lineDash,this.lineDashOffset=this.ctx.lineDashOffset)},_.prototype.toDataURL=function(){throw new Error(\"toDataUrl not implemented.\")};var k=function(x){var B,T,H,J;if(x.isCanvasGradient===!0&&(x=x.getColor()),!x)return{r:0,g:0,b:0,a:0,style:x};if(/transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/.test(x))B=0,T=0,H=0,J=0;else{var Z=/rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/.exec(x);if(Z!==null)B=parseInt(Z[1]),T=parseInt(Z[2]),H=parseInt(Z[3]),J=1;else if((Z=/rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/.exec(x))!==null)B=parseInt(Z[1]),T=parseInt(Z[2]),H=parseInt(Z[3]),J=parseFloat(Z[4]);else{if(J=1,typeof x==\"string\"&&x.charAt(0)!==\"#\"){var at=new Sf(x);x=at.ok?at.toHex():\"#000000\"}x.length===4?(B=x.substring(1,2),B+=B,T=x.substring(2,3),T+=T,H=x.substring(3,4),H+=H):(B=x.substring(1,3),T=x.substring(3,5),H=x.substring(5,7)),B=parseInt(B,16),T=parseInt(T,16),H=parseInt(H,16)}}return{r:B,g:T,b:H,a:J,style:x}},p=function(){return this.ctx.isFillTransparent||this.globalAlpha==0},j=function(){return!!(this.ctx.isStrokeTransparent||this.globalAlpha==0)};_.prototype.fillText=function(x,B,T,H){if(isNaN(B)||isNaN(T)||typeof x!=\"string\")throw Le.error(\"jsPDF.context2d.fillText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");if(H=isNaN(H)?void 0:H,!p.call(this)){var J=nt(this.ctx.transform.rotation),Z=this.ctx.transform.scaleX;E.call(this,{text:x,x:B,y:T,scale:Z,angle:J,align:this.textAlign,maxWidth:H})}},_.prototype.strokeText=function(x,B,T,H){if(isNaN(B)||isNaN(T)||typeof x!=\"string\")throw Le.error(\"jsPDF.context2d.strokeText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");if(!j.call(this)){H=isNaN(H)?void 0:H;var J=nt(this.ctx.transform.rotation),Z=this.ctx.transform.scaleX;E.call(this,{text:x,x:B,y:T,scale:Z,renderingMode:\"stroke\",angle:J,align:this.textAlign,maxWidth:H})}},_.prototype.measureText=function(x){if(typeof x!=\"string\")throw Le.error(\"jsPDF.context2d.measureText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.measureText\");var B=this.pdf,T=this.pdf.internal.scaleFactor,H=B.internal.getFontSize(),J=B.getStringUnitWidth(x)*H/B.internal.scaleFactor;return new function(Z){var at=(Z=Z||{}).width||0;return Object.defineProperty(this,\"width\",{get:function(){return at}}),this}({width:J*=Math.round(96*T/72*1e4)/1e4})},_.prototype.scale=function(x,B){if(isNaN(x)||isNaN(B))throw Le.error(\"jsPDF.context2d.scale: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");var T=new h(x,0,0,B,0,0);this.ctx.transform=this.ctx.transform.multiply(T)},_.prototype.rotate=function(x){if(isNaN(x))throw Le.error(\"jsPDF.context2d.rotate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");var B=new h(Math.cos(x),Math.sin(x),-Math.sin(x),Math.cos(x),0,0);this.ctx.transform=this.ctx.transform.multiply(B)},_.prototype.translate=function(x,B){if(isNaN(x)||isNaN(B))throw Le.error(\"jsPDF.context2d.translate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");var T=new h(1,0,0,1,x,B);this.ctx.transform=this.ctx.transform.multiply(T)},_.prototype.transform=function(x,B,T,H,J,Z){if(isNaN(x)||isNaN(B)||isNaN(T)||isNaN(H)||isNaN(J)||isNaN(Z))throw Le.error(\"jsPDF.context2d.transform: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");var at=new h(x,B,T,H,J,Z);this.ctx.transform=this.ctx.transform.multiply(at)},_.prototype.setTransform=function(x,B,T,H,J,Z){x=isNaN(x)?1:x,B=isNaN(B)?0:B,T=isNaN(T)?0:T,H=isNaN(H)?1:H,J=isNaN(J)?0:J,Z=isNaN(Z)?0:Z,this.ctx.transform=new h(x,B,T,H,J,Z)};var O=function(){return this.margin[0]>0||this.margin[1]>0||this.margin[2]>0||this.margin[3]>0};_.prototype.drawImage=function(x,B,T,H,J,Z,at,st,gt){var _t=this.pdf.getImageProperties(x),kt=1,St=1,Dt=1,P=1;H!==void 0&&st!==void 0&&(Dt=st/H,P=gt/J,kt=_t.width/H*st/H,St=_t.height/J*gt/J),Z===void 0&&(Z=B,at=T,B=0,T=0),H!==void 0&&st===void 0&&(st=H,gt=J),H===void 0&&st===void 0&&(st=_t.width,gt=_t.height);var Lt=this.ctx.transform.decompose(),ae=nt(Lt.rotate.shx),Ht=new h,yt=(Ht=(Ht=(Ht=Ht.multiply(Lt.translate)).multiply(Lt.skew)).multiply(Lt.scale)).applyToRectangle(new l(Z-B*Dt,at-T*P,H*kt,J*St));if(this.autoPaging){for(var Wt,Ct=M.call(this,yt),zt=[],qt=0;qt<Ct.length;qt+=1)zt.indexOf(Ct[qt])===-1&&zt.push(Ct[qt]);G(zt);for(var ve=zt[0],ue=zt[zt.length-1],Zt=ve;Zt<ue+1;Zt++){this.pdf.setPage(Zt);var he=this.pdf.internal.pageSize.width-this.margin[3]-this.margin[1],fe=Zt===1?this.posY+this.margin[0]:this.margin[0],Bt=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],ne=this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2],Tt=Zt===1?0:Bt+(Zt-2)*ne;if(this.ctx.clip_path.length!==0){var ze=this.path;Wt=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=V(Wt,this.posX+this.margin[3],-Tt+fe+this.ctx.prevPageLastElemOffset),it.call(this,\"fill\",!0),this.path=ze}var ge=JSON.parse(JSON.stringify(yt));ge=V([ge],this.posX+this.margin[3],-Tt+fe+this.ctx.prevPageLastElemOffset)[0];var se=(Zt>ve||Zt<ue)&&O.call(this);se&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],he,ne,null).clip().discardPath()),this.pdf.addImage(x,\"JPEG\",ge.x,ge.y,ge.w,ge.h,null,null,ae),se&&this.pdf.restoreGraphicsState()}}else this.pdf.addImage(x,\"JPEG\",yt.x,yt.y,yt.w,yt.h,null,null,ae)};var M=function(x,B,T){var H=[];B=B||this.pdf.internal.pageSize.width,T=T||this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2];var J=this.posY+this.ctx.prevPageLastElemOffset;switch(x.type){default:case\"mt\":case\"lt\":H.push(Math.floor((x.y+J)/T)+1);break;case\"arc\":H.push(Math.floor((x.y+J-x.radius)/T)+1),H.push(Math.floor((x.y+J+x.radius)/T)+1);break;case\"qct\":var Z=ct(this.ctx.lastPoint.x,this.ctx.lastPoint.y,x.x1,x.y1,x.x,x.y);H.push(Math.floor((Z.y+J)/T)+1),H.push(Math.floor((Z.y+Z.h+J)/T)+1);break;case\"bct\":var at=At(this.ctx.lastPoint.x,this.ctx.lastPoint.y,x.x1,x.y1,x.x2,x.y2,x.x,x.y);H.push(Math.floor((at.y+J)/T)+1),H.push(Math.floor((at.y+at.h+J)/T)+1);break;case\"rect\":H.push(Math.floor((x.y+J)/T)+1),H.push(Math.floor((x.y+x.h+J)/T)+1)}for(var st=0;st<H.length;st+=1)for(;this.pdf.internal.getNumberOfPages()<H[st];)S.call(this);return H},S=function(){var x=this.fillStyle,B=this.strokeStyle,T=this.font,H=this.lineCap,J=this.lineWidth,Z=this.lineJoin;this.pdf.addPage(),this.fillStyle=x,this.strokeStyle=B,this.font=T,this.lineCap=H,this.lineWidth=J,this.lineJoin=Z},V=function(x,B,T){for(var H=0;H<x.length;H++)switch(x[H].type){case\"bct\":x[H].x2+=B,x[H].y2+=T;case\"qct\":x[H].x1+=B,x[H].y1+=T;default:x[H].x+=B,x[H].y+=T}return x},G=function(x){return x.sort(function(B,T){return B-T})},q=function(x,B){var T=this.fillStyle,H=this.strokeStyle,J=this.lineCap,Z=this.lineWidth,at=Math.abs(Z*this.ctx.transform.scaleX),st=this.lineJoin;if(this.autoPaging){for(var gt,_t,kt=JSON.parse(JSON.stringify(this.path)),St=JSON.parse(JSON.stringify(this.path)),Dt=[],P=0;P<St.length;P++)if(St[P].x!==void 0)for(var Lt=M.call(this,St[P]),ae=0;ae<Lt.length;ae+=1)Dt.indexOf(Lt[ae])===-1&&Dt.push(Lt[ae]);for(var Ht=0;Ht<Dt.length;Ht++)for(;this.pdf.internal.getNumberOfPages()<Dt[Ht];)S.call(this);G(Dt);for(var yt=Dt[0],Wt=Dt[Dt.length-1],Ct=yt;Ct<Wt+1;Ct++){this.pdf.setPage(Ct),this.fillStyle=T,this.strokeStyle=H,this.lineCap=J,this.lineWidth=at,this.lineJoin=st;var zt=this.pdf.internal.pageSize.width-this.margin[3]-this.margin[1],qt=Ct===1?this.posY+this.margin[0]:this.margin[0],ve=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],ue=this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2],Zt=Ct===1?0:ve+(Ct-2)*ue;if(this.ctx.clip_path.length!==0){var he=this.path;gt=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=V(gt,this.posX+this.margin[3],-Zt+qt+this.ctx.prevPageLastElemOffset),it.call(this,x,!0),this.path=he}if(_t=JSON.parse(JSON.stringify(kt)),this.path=V(_t,this.posX+this.margin[3],-Zt+qt+this.ctx.prevPageLastElemOffset),B===!1||Ct===0){var fe=(Ct>yt||Ct<Wt)&&O.call(this);fe&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],zt,ue,null).clip().discardPath()),it.call(this,x,B),fe&&this.pdf.restoreGraphicsState()}this.lineWidth=Z}this.path=kt}else this.lineWidth=at,it.call(this,x,B),this.lineWidth=Z},it=function(x,B){if((x!==\"stroke\"||B||!j.call(this))&&(x===\"stroke\"||B||!p.call(this))){for(var T,H,J=[],Z=this.path,at=0;at<Z.length;at++){var st=Z[at];switch(st.type){case\"begin\":J.push({begin:!0});break;case\"close\":J.push({close:!0});break;case\"mt\":J.push({start:st,deltas:[],abs:[]});break;case\"lt\":var gt=J.length;if(Z[at-1]&&!isNaN(Z[at-1].x)&&(T=[st.x-Z[at-1].x,st.y-Z[at-1].y],gt>0)){for(;gt>=0;gt--)if(J[gt-1].close!==!0&&J[gt-1].begin!==!0){J[gt-1].deltas.push(T),J[gt-1].abs.push(st);break}}break;case\"bct\":T=[st.x1-Z[at-1].x,st.y1-Z[at-1].y,st.x2-Z[at-1].x,st.y2-Z[at-1].y,st.x-Z[at-1].x,st.y-Z[at-1].y],J[J.length-1].deltas.push(T);break;case\"qct\":var _t=Z[at-1].x+2/3*(st.x1-Z[at-1].x),kt=Z[at-1].y+2/3*(st.y1-Z[at-1].y),St=st.x+2/3*(st.x1-st.x),Dt=st.y+2/3*(st.y1-st.y),P=st.x,Lt=st.y;T=[_t-Z[at-1].x,kt-Z[at-1].y,St-Z[at-1].x,Dt-Z[at-1].y,P-Z[at-1].x,Lt-Z[at-1].y],J[J.length-1].deltas.push(T);break;case\"arc\":J.push({deltas:[],abs:[],arc:!0}),Array.isArray(J[J.length-1].abs)&&J[J.length-1].abs.push(st)}}H=B?null:x===\"stroke\"?\"stroke\":\"fill\";for(var ae=!1,Ht=0;Ht<J.length;Ht++)if(J[Ht].arc)for(var yt=J[Ht].abs,Wt=0;Wt<yt.length;Wt++){var Ct=yt[Wt];Ct.type===\"arc\"?X.call(this,Ct.x,Ct.y,Ct.radius,Ct.startAngle,Ct.endAngle,Ct.counterclockwise,void 0,B,!ae):z.call(this,Ct.x,Ct.y),ae=!0}else if(J[Ht].close===!0)this.pdf.internal.out(\"h\"),ae=!1;else if(J[Ht].begin!==!0){var zt=J[Ht].start.x,qt=J[Ht].start.y;U.call(this,J[Ht].deltas,zt,qt),ae=!0}H&&R.call(this,H),B&&tt.call(this)}},vt=function(x){var B=this.pdf.internal.getFontSize()/this.pdf.internal.scaleFactor,T=B*(this.pdf.internal.getLineHeightFactor()-1);switch(this.ctx.textBaseline){case\"bottom\":return x-T;case\"top\":return x+B-T;case\"hanging\":return x+B-2*T;case\"middle\":return x+B/2-T;default:return x}},dt=function(x){return x+this.pdf.internal.getFontSize()/this.pdf.internal.scaleFactor*(this.pdf.internal.getLineHeightFactor()-1)};_.prototype.createLinearGradient=function(){var x=function(){};return x.colorStops=[],x.addColorStop=function(B,T){this.colorStops.push([B,T])},x.getColor=function(){return this.colorStops.length===0?\"#000000\":this.colorStops[0][1]},x.isCanvasGradient=!0,x},_.prototype.createPattern=function(){return this.createLinearGradient()},_.prototype.createRadialGradient=function(){return this.createLinearGradient()};var X=function(x,B,T,H,J,Z,at,st,gt){for(var _t=ot.call(this,T,H,J,Z),kt=0;kt<_t.length;kt++){var St=_t[kt];kt===0&&(gt?N.call(this,St.x1+x,St.y1+B):z.call(this,St.x1+x,St.y1+B)),rt.call(this,x,B,St.x2,St.y2,St.x3,St.y3,St.x4,St.y4)}st?tt.call(this):R.call(this,at)},R=function(x){switch(x){case\"stroke\":this.pdf.internal.out(\"S\");break;case\"fill\":this.pdf.internal.out(\"f\")}},tt=function(){this.pdf.clip(),this.pdf.discardPath()},N=function(x,B){this.pdf.internal.out(e(x)+\" \"+i(B)+\" m\")},E=function(x){var B;switch(x.align){case\"right\":case\"end\":B=\"right\";break;case\"center\":B=\"center\";break;default:B=\"left\"}var T,H,J,Z=this.pdf.getTextDimensions(x.text),at=vt.call(this,x.y),st=dt.call(this,at)-Z.h,gt=this.ctx.transform.applyToPoint(new c(x.x,at));if(this.autoPaging){var _t=this.ctx.transform.decompose(),kt=new h;kt=(kt=(kt=kt.multiply(_t.translate)).multiply(_t.skew)).multiply(_t.scale);for(var St=this.ctx.transform.applyToRectangle(new l(x.x,at,Z.w,Z.h)),Dt=kt.applyToRectangle(new l(x.x,st,Z.w,Z.h)),P=M.call(this,Dt),Lt=[],ae=0;ae<P.length;ae+=1)Lt.indexOf(P[ae])===-1&&Lt.push(P[ae]);G(Lt);for(var Ht=Lt[0],yt=Lt[Lt.length-1],Wt=Ht;Wt<yt+1;Wt++){this.pdf.setPage(Wt);var Ct=Wt===1?this.posY+this.margin[0]:this.margin[0],zt=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],qt=this.pdf.internal.pageSize.height-this.margin[2],ve=qt-this.margin[0],ue=this.pdf.internal.pageSize.width-this.margin[1],Zt=ue-this.margin[3],he=Wt===1?0:zt+(Wt-2)*ve;if(this.ctx.clip_path.length!==0){var fe=this.path;T=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=V(T,this.posX+this.margin[3],-1*he+Ct),it.call(this,\"fill\",!0),this.path=fe}var Bt=V([JSON.parse(JSON.stringify(Dt))],this.posX+this.margin[3],-he+Ct+this.ctx.prevPageLastElemOffset)[0];x.scale>=.01&&(H=this.pdf.internal.getFontSize(),this.pdf.setFontSize(H*x.scale),J=this.lineWidth,this.lineWidth=J*x.scale);var ne=this.autoPaging!==\"text\";if(ne||Bt.y+Bt.h<=qt){if(ne||Bt.y>=Ct&&Bt.x<=ue){var Tt=ne?x.text:this.pdf.splitTextToSize(x.text,x.maxWidth||ue-Bt.x)[0],ze=V([JSON.parse(JSON.stringify(St))],this.posX+this.margin[3],-he+Ct+this.ctx.prevPageLastElemOffset)[0],ge=ne&&(Wt>Ht||Wt<yt)&&O.call(this);ge&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],Zt,ve,null).clip().discardPath()),this.pdf.text(Tt,ze.x,ze.y,{angle:x.angle,align:B,renderingMode:x.renderingMode}),ge&&this.pdf.restoreGraphicsState()}}else Bt.y<qt&&(this.ctx.prevPageLastElemOffset+=qt-Bt.y);x.scale>=.01&&(this.pdf.setFontSize(H),this.lineWidth=J)}}else x.scale>=.01&&(H=this.pdf.internal.getFontSize(),this.pdf.setFontSize(H*x.scale),J=this.lineWidth,this.lineWidth=J*x.scale),this.pdf.text(x.text,gt.x+this.posX,gt.y+this.posY,{angle:x.angle,align:B,renderingMode:x.renderingMode,maxWidth:x.maxWidth}),x.scale>=.01&&(this.pdf.setFontSize(H),this.lineWidth=J)},z=function(x,B,T,H){T=T||0,H=H||0,this.pdf.internal.out(e(x+T)+\" \"+i(B+H)+\" l\")},U=function(x,B,T){return this.pdf.lines(x,B,T,null,null)},rt=function(x,B,T,H,J,Z,at,st){this.pdf.internal.out([t(o(T+x)),t(a(H+B)),t(o(J+x)),t(a(Z+B)),t(o(at+x)),t(a(st+B)),\"c\"].join(\" \"))},ot=function(x,B,T,H){for(var J=2*Math.PI,Z=Math.PI/2;B>T;)B-=J;var at=Math.abs(T-B);at<J&&H&&(at=J-at);for(var st=[],gt=H?-1:1,_t=B;at>1e-5;){var kt=_t+gt*Math.min(at,Z);st.push(ft.call(this,x,_t,kt)),at-=Math.abs(kt-_t),_t=kt}return st},ft=function(x,B,T){var H=(T-B)/2,J=x*Math.cos(H),Z=x*Math.sin(H),at=J,st=-Z,gt=at*at+st*st,_t=gt+at*J+st*Z,kt=4/3*(Math.sqrt(2*gt*_t)-_t)/(at*Z-st*J),St=at-kt*st,Dt=st+kt*at,P=St,Lt=-Dt,ae=H+B,Ht=Math.cos(ae),yt=Math.sin(ae);return{x1:x*Math.cos(B),y1:x*Math.sin(B),x2:St*Ht-Dt*yt,y2:St*yt+Dt*Ht,x3:P*Ht-Lt*yt,y3:P*yt+Lt*Ht,x4:x*Math.cos(T),y4:x*Math.sin(T)}},nt=function(x){return 180*x/Math.PI},ct=function(x,B,T,H,J,Z){var at=x+.5*(T-x),st=B+.5*(H-B),gt=J+.5*(T-J),_t=Z+.5*(H-Z),kt=Math.min(x,J,at,gt),St=Math.max(x,J,at,gt),Dt=Math.min(B,Z,st,_t),P=Math.max(B,Z,st,_t);return new l(kt,Dt,St-kt,P-Dt)},At=function(x,B,T,H,J,Z,at,st){var gt,_t,kt,St,Dt,P,Lt,ae,Ht,yt,Wt,Ct,zt,qt,ve=T-x,ue=H-B,Zt=J-T,he=Z-H,fe=at-J,Bt=st-Z;for(_t=0;_t<41;_t++)Ht=(Lt=(kt=x+(gt=_t/40)*ve)+gt*((Dt=T+gt*Zt)-kt))+gt*(Dt+gt*(J+gt*fe-Dt)-Lt),yt=(ae=(St=B+gt*ue)+gt*((P=H+gt*he)-St))+gt*(P+gt*(Z+gt*Bt-P)-ae),_t==0?(Wt=Ht,Ct=yt,zt=Ht,qt=yt):(Wt=Math.min(Wt,Ht),Ct=Math.min(Ct,yt),zt=Math.max(zt,Ht),qt=Math.max(qt,yt));return new l(Math.round(Wt),Math.round(Ct),Math.round(zt-Wt),Math.round(qt-Ct))},wt=function(){if(this.prevLineDash||this.ctx.lineDash.length||this.ctx.lineDashOffset){var x,B,T=(x=this.ctx.lineDash,B=this.ctx.lineDashOffset,JSON.stringify({lineDash:x,lineDashOffset:B}));this.prevLineDash!==T&&(this.pdf.setLineDash(this.ctx.lineDash,this.ctx.lineDashOffset),this.prevLineDash=T)}}})(Mt.API),(function(n){var t=function(c){var l,h,d,m,_,k,p,j,O,M;for(h=[],d=0,m=(c+=l=\"\\0\\0\\0\\0\".slice(c.length%4||4)).length;m>d;d+=4)(_=(c.charCodeAt(d)<<24)+(c.charCodeAt(d+1)<<16)+(c.charCodeAt(d+2)<<8)+c.charCodeAt(d+3))!==0?(k=(_=((_=((_=((_=(_-(M=_%85))/85)-(O=_%85))/85)-(j=_%85))/85)-(p=_%85))/85)%85,h.push(k+33,p+33,j+33,O+33,M+33)):h.push(122);return(function(S,V){for(var G=V;G>0;G--)S.pop()})(h,l.length),String.fromCharCode.apply(String,h)+\"~>\"},e=function(c){var l,h,d,m,_,k=String,p=\"length\",j=255,O=\"charCodeAt\",M=\"slice\",S=\"replace\";for(c[M](-2),c=c[M](0,-2)[S](/\\s/g,\"\")[S](\"z\",\"!!!!!\"),d=[],m=0,_=(c+=l=\"uuuuu\"[M](c[p]%5||5))[p];_>m;m+=5)h=52200625*(c[O](m)-33)+614125*(c[O](m+1)-33)+7225*(c[O](m+2)-33)+85*(c[O](m+3)-33)+(c[O](m+4)-33),d.push(j&h>>24,j&h>>16,j&h>>8,j&h);return(function(V,G){for(var q=G;q>0;q--)V.pop()})(d,l[p]),k.fromCharCode.apply(k,d)},i=function(c){return c.split(\"\").map(function(l){return(\"0\"+l.charCodeAt().toString(16)).slice(-2)}).join(\"\")+\">\"},o=function(c){var l=new RegExp(/^([0-9A-Fa-f]{2})+$/);if((c=c.replace(/\\s/g,\"\")).indexOf(\">\")!==-1&&(c=c.substr(0,c.indexOf(\">\"))),c.length%2&&(c+=\"0\"),l.test(c)===!1)return\"\";for(var h=\"\",d=0;d<c.length;d+=2)h+=String.fromCharCode(\"0x\"+(c[d]+c[d+1]));return h},a=function(c){for(var l=new Uint8Array(c.length),h=c.length;h--;)l[h]=c.charCodeAt(h);return(l=Uo(l)).reduce(function(d,m){return d+String.fromCharCode(m)},\"\")};n.processDataByFilters=function(c,l){var h=0,d=c||\"\",m=[];for(typeof(l=l||[])==\"string\"&&(l=[l]),h=0;h<l.length;h+=1)switch(l[h]){case\"ASCII85Decode\":case\"/ASCII85Decode\":d=e(d),m.push(\"/ASCII85Encode\");break;case\"ASCII85Encode\":case\"/ASCII85Encode\":d=t(d),m.push(\"/ASCII85Decode\");break;case\"ASCIIHexDecode\":case\"/ASCIIHexDecode\":d=o(d),m.push(\"/ASCIIHexEncode\");break;case\"ASCIIHexEncode\":case\"/ASCIIHexEncode\":d=i(d),m.push(\"/ASCIIHexDecode\");break;case\"FlateEncode\":case\"/FlateEncode\":d=a(d),m.push(\"/FlateDecode\");break;default:throw new Error('The filter: \"'+l[h]+'\" is not implemented')}return{data:d,reverseChain:m.reverse().join(\" \")}}})(Mt.API),(function(n){n.loadFile=function(t,e,i){return(function(o,a,c){a=a!==!1,c=typeof c==\"function\"?c:function(){};var l=void 0;try{l=(function(h,d,m){var _=new XMLHttpRequest,k=0,p=function(j){var O=j.length,M=[],S=String.fromCharCode;for(k=0;k<O;k+=1)M.push(S(255&j.charCodeAt(k)));return M.join(\"\")};if(_.open(\"GET\",h,!d),_.overrideMimeType(\"text/plain; charset=x-user-defined\"),d===!1&&(_.onload=function(){_.status===200?m(p(this.responseText)):m(void 0)}),_.send(null),d&&_.status===200)return p(_.responseText)})(o,a,c)}catch{}return l})(t,e,i)},n.allowFsRead=void 0,n.loadImageFile=n.loadFile})(Mt.API),(function(n){function t(){return(Kt.html2canvas?Promise.resolve(Kt.html2canvas):mo(()=>import(\"./html2canvas.esm-DXEQVQnt.js\"),[])).catch(function(l){return Promise.reject(new Error(\"Could not load html2canvas: \"+l))}).then(function(l){return l.default?l.default:l})}function e(){return(Kt.DOMPurify?Promise.resolve(Kt.DOMPurify):mo(()=>import(\"./purify.es-21m173o_.js\"),[])).catch(function(l){return Promise.reject(new Error(\"Could not load dompurify: \"+l))}).then(function(l){return l.default?l.default:l})}var i=function(l){var h=xe(l);return h===\"undefined\"?\"undefined\":h===\"string\"||l instanceof String?\"string\":h===\"number\"||l instanceof Number?\"number\":h===\"function\"||l instanceof Function?\"function\":l&&l.constructor===Array?\"array\":l&&l.nodeType===1?\"element\":h===\"object\"?\"object\":\"unknown\"},o=function(l,h){var d=document.createElement(l);for(var m in h.className&&(d.className=h.className),h.innerHTML&&h.dompurify&&(d.innerHTML=h.dompurify.sanitize(h.innerHTML)),h.style)d.style[m]=h.style[m];return d},a=function l(h,d){for(var m=h.nodeType===3?document.createTextNode(h.nodeValue):h.cloneNode(!1),_=h.firstChild;_;_=_.nextSibling)d!==!0&&_.nodeType===1&&_.nodeName===\"SCRIPT\"||m.appendChild(l(_,d));return h.nodeType===1&&(h.nodeName===\"CANVAS\"?(m.width=h.width,m.height=h.height,m.getContext(\"2d\").drawImage(h,0,0)):h.nodeName!==\"TEXTAREA\"&&h.nodeName!==\"SELECT\"||(m.value=h.value),m.addEventListener(\"load\",function(){m.scrollTop=h.scrollTop,m.scrollLeft=h.scrollLeft},!0)),m},c=function l(h){var d=Object.assign(l.convert(Promise.resolve()),JSON.parse(JSON.stringify(l.template))),m=l.convert(Promise.resolve(),d);return(m=m.setProgress(1,l,1,[l])).set(h)};(c.prototype=Object.create(Promise.prototype)).constructor=c,c.convert=function(l,h){return l.__proto__=h||c.prototype,l},c.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null,callback:function(){}},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:\"file.pdf\",margin:[0,0,0,0],enableLinks:!0,x:0,y:0,html2canvas:{},jsPDF:{},backgroundColor:\"transparent\"}},c.prototype.from=function(l,h){return this.then(function(){switch(h=h||(function(d){switch(i(d)){case\"string\":return\"string\";case\"element\":return d.nodeName.toLowerCase()===\"canvas\"?\"canvas\":\"element\";default:return\"unknown\"}})(l),h){case\"string\":return this.then(e).then(function(d){return this.set({src:o(\"div\",{innerHTML:l,dompurify:d})})});case\"element\":return this.set({src:l});case\"canvas\":return this.set({canvas:l});case\"img\":return this.set({img:l});default:return this.error(\"Unknown source type.\")}})},c.prototype.to=function(l){switch(l){case\"container\":return this.toContainer();case\"canvas\":return this.toCanvas();case\"img\":return this.toImg();case\"pdf\":return this.toPdf();default:return this.error(\"Invalid target.\")}},c.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(\"Cannot duplicate - no source HTML.\")},function(){return this.prop.pageSize||this.setPageSize()}]).then(function(){var l={position:\"relative\",display:\"inline-block\",width:(typeof this.opt.width!=\"number\"||isNaN(this.opt.width)||typeof this.opt.windowWidth!=\"number\"||isNaN(this.opt.windowWidth)?Math.max(this.prop.src.clientWidth,this.prop.src.scrollWidth,this.prop.src.offsetWidth):this.opt.windowWidth)+\"px\",left:0,right:0,top:0,margin:\"auto\",backgroundColor:this.opt.backgroundColor},h=a(this.prop.src,this.opt.html2canvas.javascriptEnabled);h.tagName===\"BODY\"&&(l.height=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)+\"px\"),this.prop.overlay=o(\"div\",{className:\"html2pdf__overlay\",style:{position:\"fixed\",overflow:\"hidden\",zIndex:1e3,left:\"-100000px\",right:0,bottom:0,top:0}}),this.prop.container=o(\"div\",{className:\"html2pdf__container\",style:l}),this.prop.container.appendChild(h),this.prop.container.firstChild.appendChild(o(\"div\",{style:{clear:\"both\",border:\"0 none transparent\",margin:0,padding:0,height:0}})),this.prop.container.style.float=\"none\",this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay),this.prop.container.firstChild.style.position=\"relative\",this.prop.container.height=Math.max(this.prop.container.firstChild.clientHeight,this.prop.container.firstChild.scrollHeight,this.prop.container.firstChild.offsetHeight)+\"px\"})},c.prototype.toCanvas=function(){var l=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(l).then(t).then(function(h){var d=Object.assign({},this.opt.html2canvas);return delete d.onrendered,h(this.prop.container,d)}).then(function(h){(this.opt.html2canvas.onrendered||function(){})(h),this.prop.canvas=h,document.body.removeChild(this.prop.overlay)})},c.prototype.toContext2d=function(){var l=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(l).then(t).then(function(h){var d=this.opt.jsPDF,m=this.opt.fontFaces,_=typeof this.opt.width!=\"number\"||isNaN(this.opt.width)||typeof this.opt.windowWidth!=\"number\"||isNaN(this.opt.windowWidth)?1:this.opt.width/this.opt.windowWidth,k=Object.assign({async:!0,allowTaint:!0,scale:_,scrollX:this.opt.scrollX||0,scrollY:this.opt.scrollY||0,backgroundColor:\"#ffffff\",imageTimeout:15e3,logging:!0,proxy:null,removeContainer:!0,foreignObjectRendering:!1,useCORS:!1},this.opt.html2canvas);if(delete k.onrendered,d.context2d.autoPaging=this.opt.autoPaging===void 0||this.opt.autoPaging,d.context2d.posX=this.opt.x,d.context2d.posY=this.opt.y,d.context2d.margin=this.opt.margin,d.context2d.fontFaces=m,m)for(var p=0;p<m.length;++p){var j=m[p],O=j.src.find(function(M){return M.format===\"truetype\"});O&&d.addFont(O.url,j.ref.name,j.ref.style)}return k.windowHeight=k.windowHeight||0,k.windowHeight=k.windowHeight==0?Math.max(this.prop.container.clientHeight,this.prop.container.scrollHeight,this.prop.container.offsetHeight):k.windowHeight,d.context2d.save(!0),h(this.prop.container,k)}).then(function(h){this.opt.jsPDF.context2d.restore(!0),(this.opt.html2canvas.onrendered||function(){})(h),this.prop.canvas=h,document.body.removeChild(this.prop.overlay)})},c.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then(function(){var l=this.prop.canvas.toDataURL(\"image/\"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement(\"img\"),this.prop.img.src=l})},c.prototype.toPdf=function(){return this.thenList([function(){return this.toContext2d()}]).then(function(){this.prop.pdf=this.prop.pdf||this.opt.jsPDF})},c.prototype.output=function(l,h,d){return(d=d||\"pdf\").toLowerCase()===\"img\"||d.toLowerCase()===\"image\"?this.outputImg(l,h):this.outputPdf(l,h)},c.prototype.outputPdf=function(l,h){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then(function(){return this.prop.pdf.output(l,h)})},c.prototype.outputImg=function(l){return this.thenList([function(){return this.prop.img||this.toImg()}]).then(function(){switch(l){case void 0:case\"img\":return this.prop.img;case\"datauristring\":case\"dataurlstring\":return this.prop.img.src;case\"datauri\":case\"dataurl\":return document.location.href=this.prop.img.src;default:throw'Image output type \"'+l+'\" is not supported.'}})},c.prototype.save=function(l){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(l?{filename:l}:null).then(function(){this.prop.pdf.save(this.opt.filename)})},c.prototype.doCallback=function(){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then(function(){this.prop.callback(this.prop.pdf)})},c.prototype.set=function(l){if(i(l)!==\"object\")return this;var h=Object.keys(l||{}).map(function(d){if(d in c.template.prop)return function(){this.prop[d]=l[d]};switch(d){case\"margin\":return this.setMargin.bind(this,l.margin);case\"jsPDF\":return function(){return this.opt.jsPDF=l.jsPDF,this.setPageSize()};case\"pageSize\":return this.setPageSize.bind(this,l.pageSize);default:return function(){this.opt[d]=l[d]}}},this);return this.then(function(){return this.thenList(h)})},c.prototype.get=function(l,h){return this.then(function(){var d=l in c.template.prop?this.prop[l]:this.opt[l];return h?h(d):d})},c.prototype.setMargin=function(l){return this.then(function(){switch(i(l)){case\"number\":l=[l,l,l,l];case\"array\":if(l.length===2&&(l=[l[0],l[1],l[0],l[1]]),l.length===4)break;default:return this.error(\"Invalid margin array.\")}this.opt.margin=l}).then(this.setPageSize)},c.prototype.setPageSize=function(l){function h(d,m){return Math.floor(d*m/72*96)}return this.then(function(){(l=l||Mt.getPageSize(this.opt.jsPDF)).hasOwnProperty(\"inner\")||(l.inner={width:l.width-this.opt.margin[1]-this.opt.margin[3],height:l.height-this.opt.margin[0]-this.opt.margin[2]},l.inner.px={width:h(l.inner.width,l.k),height:h(l.inner.height,l.k)},l.inner.ratio=l.inner.height/l.inner.width),this.prop.pageSize=l})},c.prototype.setProgress=function(l,h,d,m){return l!=null&&(this.progress.val=l),h!=null&&(this.progress.state=h),d!=null&&(this.progress.n=d),m!=null&&(this.progress.stack=m),this.progress.ratio=this.progress.val/this.progress.state,this},c.prototype.updateProgress=function(l,h,d,m){return this.setProgress(l?this.progress.val+l:null,h||null,d?this.progress.n+d:null,m?this.progress.stack.concat(m):null)},c.prototype.then=function(l,h){var d=this;return this.thenCore(l,h,function(m,_){return d.updateProgress(null,null,1,[m]),Promise.prototype.then.call(this,function(k){return d.updateProgress(null,m),k}).then(m,_).then(function(k){return d.updateProgress(1),k})})},c.prototype.thenCore=function(l,h,d){d=d||Promise.prototype.then;var m=this;l&&(l=l.bind(m)),h&&(h=h.bind(m));var _=Promise.toString().indexOf(\"[native code]\")!==-1&&Promise.name===\"Promise\"?m:c.convert(Object.assign({},m),Promise.prototype),k=d.call(_,l,h);return c.convert(k,m.__proto__)},c.prototype.thenExternal=function(l,h){return Promise.prototype.then.call(this,l,h)},c.prototype.thenList=function(l){var h=this;return l.forEach(function(d){h=h.thenCore(d)}),h},c.prototype.catch=function(l){l&&(l=l.bind(this));var h=Promise.prototype.catch.call(this,l);return c.convert(h,this)},c.prototype.catchExternal=function(l){return Promise.prototype.catch.call(this,l)},c.prototype.error=function(l){return this.then(function(){throw new Error(l)})},c.prototype.using=c.prototype.set,c.prototype.saveAs=c.prototype.save,c.prototype.export=c.prototype.output,c.prototype.run=c.prototype.then,Mt.getPageSize=function(l,h,d){if(xe(l)===\"object\"){var m=l;l=m.orientation,h=m.unit||h,d=m.format||d}h=h||\"mm\",d=d||\"a4\",l=(\"\"+(l||\"P\")).toLowerCase();var _,k=(\"\"+d).toLowerCase(),p={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};switch(h){case\"pt\":_=1;break;case\"mm\":_=72/25.4;break;case\"cm\":_=72/2.54;break;case\"in\":_=72;break;case\"px\":_=.75;break;case\"pc\":case\"em\":_=12;break;case\"ex\":_=6;break;default:throw\"Invalid unit: \"+h}var j,O=0,M=0;if(p.hasOwnProperty(k))O=p[k][1]/_,M=p[k][0]/_;else try{O=d[1],M=d[0]}catch{throw new Error(\"Invalid format: \"+d)}if(l===\"p\"||l===\"portrait\")l=\"p\",M>O&&(j=M,M=O,O=j);else{if(l!==\"l\"&&l!==\"landscape\")throw\"Invalid orientation: \"+l;l=\"l\",O>M&&(j=M,M=O,O=j)}return{width:M,height:O,unit:h,k:_,orientation:l}},n.html=function(l,h){(h=h||{}).callback=h.callback||function(){},h.html2canvas=h.html2canvas||{},h.html2canvas.canvas=h.html2canvas.canvas||this.canvas,h.jsPDF=h.jsPDF||this,h.fontFaces=h.fontFaces?h.fontFaces.map(jo):null;var d=new c(h);return h.worker?d:d.from(l).doCallback()}})(Mt.API),Mt.API.addJS=function(n){var t,e,i=(function(o){for(var a=\"\",c=0;c<o.length;c++){var l=o[c];if(l===\"(\"||l===\")\"){for(var h=0,d=c-1;d>=0&&o[d]===\"\\\\\";d--)h++;a+=h%2==0?\"\\\\\"+l:l}else a+=l}return a})(n);return this.internal.events.subscribe(\"postPutResources\",function(){t=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/Names [(EmbeddedJS) \"+(t+1)+\" 0 R]\"),this.internal.out(\">>\"),this.internal.out(\"endobj\"),e=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /JavaScript\"),this.internal.out(\"/JS (\"+i+\")\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){t!==void 0&&e!==void 0&&this.internal.out(\"/Names <</JavaScript \"+t+\" 0 R>>\")}),this},(function(n){var t;n.events.push([\"postPutResources\",function(){var e=this,i=/^(\\d+) 0 obj$/;if(this.outline.root.children.length>0)for(var o=e.outline.render().split(/\\r\\n/),a=0;a<o.length;a++){var c=o[a],l=i.exec(c);if(l!=null){var h=l[1];e.internal.newObjectDeferredBegin(h,!1)}e.internal.write(c)}if(this.outline.createNamedDestinations){var d=this.internal.pages.length,m=[];for(a=0;a<d;a++){var _=e.internal.newObject();m.push(_);var k=e.internal.getPageInfo(a+1);e.internal.write(\"<< /D[\"+k.objId+\" 0 R /XYZ null null null]>> endobj\")}var p=e.internal.newObject();for(e.internal.write(\"<< /Names [ \"),a=0;a<m.length;a++)e.internal.write(\"(page_\"+(a+1)+\")\"+m[a]+\" 0 R\");e.internal.write(\" ] >>\",\"endobj\"),t=e.internal.newObject(),e.internal.write(\"<< /Dests \"+p+\" 0 R\"),e.internal.write(\">>\",\"endobj\")}}]),n.events.push([\"putCatalog\",function(){var e=this;e.outline.root.children.length>0&&(e.internal.write(\"/Outlines\",this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&e.internal.write(\"/Names \"+t+\" 0 R\"))}]),n.events.push([\"initialized\",function(){var e=this;e.outline={createNamedDestinations:!1,root:{children:[]}},e.outline.add=function(i,o,a){var c={title:o,options:a,children:[]};return i==null&&(i=this.root),i.children.push(c),c},e.outline.render=function(){return this.ctx={},this.ctx.val=\"\",this.ctx.pdf=e,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},e.outline.genIds_r=function(i){i.id=e.internal.newObjectDeferred();for(var o=0;o<i.children.length;o++)this.genIds_r(i.children[o])},e.outline.renderRoot=function(i){this.objStart(i),this.line(\"/Type /Outlines\"),i.children.length>0&&(this.line(\"/First \"+this.makeRef(i.children[0])),this.line(\"/Last \"+this.makeRef(i.children[i.children.length-1]))),this.line(\"/Count \"+this.count_r({count:0},i)),this.objEnd()},e.outline.renderItems=function(i){for(var o=this.ctx.pdf.internal.getVerticalCoordinateString,a=0;a<i.children.length;a++){var c=i.children[a];this.objStart(c),this.line(\"/Title \"+this.makeString(c.title)),this.line(\"/Parent \"+this.makeRef(i)),a>0&&this.line(\"/Prev \"+this.makeRef(i.children[a-1])),a<i.children.length-1&&this.line(\"/Next \"+this.makeRef(i.children[a+1])),c.children.length>0&&(this.line(\"/First \"+this.makeRef(c.children[0])),this.line(\"/Last \"+this.makeRef(c.children[c.children.length-1])));var l=this.count=this.count_r({count:0},c);if(l>0&&this.line(\"/Count \"+l),c.options&&c.options.pageNumber){var h=e.internal.getPageInfo(c.options.pageNumber);this.line(\"/Dest [\"+h.objId+\" 0 R /XYZ 0 \"+o(0)+\" 0]\")}this.objEnd()}for(var d=0;d<i.children.length;d++)this.renderItems(i.children[d])},e.outline.line=function(i){this.ctx.val+=i+`\\r\n`},e.outline.makeRef=function(i){return i.id+\" 0 R\"},e.outline.makeString=function(i){return\"(\"+e.internal.pdfEscape(i)+\")\"},e.outline.objStart=function(i){this.ctx.val+=`\\r\n`+i.id+` 0 obj\\r\n<<\\r\n`},e.outline.objEnd=function(){this.ctx.val+=`>> \\r\nendobj\\r\n`},e.outline.count_r=function(i,o){for(var a=0;a<o.children.length;a++)i.count++,this.count_r(i,o.children[a]);return i.count}}])})(Mt.API),(function(n){var t=[192,193,194,195,196,197,198,199];n.processJPEG=function(e,i,o,a,c,l){var h,d=this.decode.DCT_DECODE,m=null;if(typeof e==\"string\"||this.__addimage__.isArrayBuffer(e)||this.__addimage__.isArrayBufferView(e)){switch(e=c||e,e=this.__addimage__.isArrayBuffer(e)?new Uint8Array(e):e,h=(function(_){for(var k,p=256*_.charCodeAt(4)+_.charCodeAt(5),j=_.length,O={width:0,height:0,numcomponents:1},M=4;M<j;M+=2){if(M+=p,t.indexOf(_.charCodeAt(M+1))!==-1){k=256*_.charCodeAt(M+5)+_.charCodeAt(M+6),O={width:256*_.charCodeAt(M+7)+_.charCodeAt(M+8),height:k,numcomponents:_.charCodeAt(M+9)};break}p=256*_.charCodeAt(M+2)+_.charCodeAt(M+3)}return O})(e=this.__addimage__.isArrayBufferView(e)?this.__addimage__.arrayBufferToBinaryString(e):e),h.numcomponents){case 1:l=this.color_spaces.DEVICE_GRAY;break;case 4:l=this.color_spaces.DEVICE_CMYK;break;case 3:l=this.color_spaces.DEVICE_RGB}m={data:e,width:h.width,height:h.height,colorSpace:l,bitsPerComponent:8,filter:d,index:i,alias:o}}return m}})(Mt.API),Mt.API.processPNG=function(n,t,e,i){if(this.__addimage__.isArrayBuffer(n)&&(n=new Uint8Array(n)),this.__addimage__.isArrayBufferView(n)){var o,a=k1(n,{checkCrc:!0}),c=a.width,l=a.height,h=a.channels,d=a.palette,m=a.depth;o=d&&h===1?(function(X){for(var R=X.width,tt=X.height,N=X.data,E=X.palette,z=X.depth,U=!1,rt=[],ot=[],ft=void 0,nt=!1,ct=0,At=0;At<E.length;At++){var wt=ql(E[At],4),x=wt[0],B=wt[1],T=wt[2],H=wt[3];rt.push(x,B,T),H!=null&&(H===0?(ct++,ot.length<1&&ot.push(At)):H<255&&(nt=!0))}if(nt||ct>1){U=!0,ot=void 0;var J=R*tt;ft=new Uint8Array(J);for(var Z=new DataView(N.buffer),at=0;at<J;at++){var st=Mo(Z,at,z),gt=ql(E[st],4)[3];ft[at]=gt}}else ct===0&&(ot=void 0);return{colorSpace:\"Indexed\",colorsPerPixel:1,sMaskBitsPerComponent:U?8:void 0,colorBytes:N,alphaBytes:ft,needSMask:U,palette:rt,mask:ot}})(a):h===2||h===4?(function(X){for(var R=X.data,tt=X.width,N=X.height,E=X.channels,z=X.depth,U=E===2?\"DeviceGray\":\"DeviceRGB\",rt=E-1,ot=tt*N,ft=rt,nt=ot*ft,ct=1*ot,At=Math.ceil(nt*z/8),wt=Math.ceil(ct*z/8),x=new Uint8Array(At),B=new Uint8Array(wt),T=new DataView(R.buffer),H=new DataView(x.buffer),J=new DataView(B.buffer),Z=!1,at=0;at<ot;at++){for(var st=at*E,gt=0;gt<ft;gt++)Hu(H,Mo(T,st+gt,z),at*ft+gt,z);var _t=Mo(T,st+ft,z);_t<(1<<z)-1&&(Z=!0),Hu(J,_t,1*at,z)}return{colorSpace:U,colorsPerPixel:rt,sMaskBitsPerComponent:Z?z:void 0,colorBytes:x,alphaBytes:B,needSMask:Z}})(a):(function(X){var R=X.data,tt=X.channels===1?\"DeviceGray\":\"DeviceRGB\";return{colorSpace:tt,colorsPerPixel:tt===\"DeviceGray\"?1:3,colorBytes:R instanceof Uint16Array?(function(N){for(var E=N.length,z=new Uint8Array(2*E),U=new DataView(z.buffer,z.byteOffset,z.byteLength),rt=0;rt<E;rt++)U.setUint16(2*rt,N[rt],!1);return z})(R):R,needSMask:!1}})(a);var _,k,p,j=o,O=j.colorSpace,M=j.colorsPerPixel,S=j.sMaskBitsPerComponent,V=j.colorBytes,G=j.alphaBytes,q=j.needSMask,it=j.palette,vt=j.mask,dt=null;return i!==Mt.API.image_compression.NONE&&typeof Uo==\"function\"?(dt=(function(X){var R;switch(X){case Mt.API.image_compression.FAST:R=11;break;case Mt.API.image_compression.MEDIUM:R=13;break;case Mt.API.image_compression.SLOW:R=14;break;default:R=12}return R})(i),_=this.decode.FLATE_DECODE,k=\"/Predictor \".concat(dt,\" /Colors \").concat(M,\" /BitsPerComponent \").concat(m,\" /Columns \").concat(c),n=Tu(V,Math.ceil(c*M*m/8),M,m,i),q&&(p=Tu(G,Math.ceil(c*S/8),1,S,i))):(_=void 0,k=void 0,n=V,q&&(p=G)),(this.__addimage__.isArrayBuffer(n)||this.__addimage__.isArrayBufferView(n))&&(n=this.__addimage__.arrayBufferToBinaryString(n)),(p&&this.__addimage__.isArrayBuffer(p)||this.__addimage__.isArrayBufferView(p))&&(p=this.__addimage__.arrayBufferToBinaryString(p)),{alias:e,data:n,index:t,filter:_,decodeParameters:k,transparency:vt,palette:it,sMask:p,predictor:dt,width:c,height:l,bitsPerComponent:m,sMaskBitsPerComponent:S,colorSpace:O}}},(function(n){n.processGIF89A=function(t,e,i,o){var a=new J1(t),c=a.width,l=a.height,h=[];a.decodeAndBlitFrameRGBA(0,h);var d={data:h,width:c,height:l},m=new Ro(100).encode(d,100);return n.processJPEG.call(this,m,e,i,o)},n.processGIF87A=n.processGIF89A})(Mt.API),Zn.prototype.parseHeader=function(){if(this.fileSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.reserved=this.datav.getUint32(this.pos,!0),this.pos+=4,this.offset=this.datav.getUint32(this.pos,!0),this.pos+=4,this.headerSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.width=this.datav.getUint32(this.pos,!0),this.pos+=4,this.height=this.datav.getInt32(this.pos,!0),this.pos+=4,this.planes=this.datav.getUint16(this.pos,!0),this.pos+=2,this.bitPP=this.datav.getUint16(this.pos,!0),this.pos+=2,this.compress=this.datav.getUint32(this.pos,!0),this.pos+=4,this.rawSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.hr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.vr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.colors=this.datav.getUint32(this.pos,!0),this.pos+=4,this.importantColors=this.datav.getUint32(this.pos,!0),this.pos+=4,this.bitPP===16&&this.is_with_alpha&&(this.bitPP=15),this.bitPP<15){var n=this.colors===0?1<<this.bitPP:this.colors;this.palette=new Array(n);for(var t=0;t<n;t++){var e=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0);this.palette[t]={red:o,green:i,blue:e,quad:a}}}this.height<0&&(this.height*=-1,this.bottom_up=!1)},Zn.prototype.parseBGR=function(){this.pos=this.offset;var n=\"bit\"+this.bitPP,t=this.width*this.height*4;if(t>536870912)throw new Error(\"Image dimensions exceed 512MB, which is too large.\");this.data=new Uint8Array(t);try{this[n]()}catch(e){Le.log(\"bit decode error:\"+e)}},Zn.prototype.bit1=function(){var n,t=Math.ceil(this.width/8),e=t%4;for(n=this.height-1;n>=0;n--){for(var i=this.bottom_up?n:this.height-1-n,o=0;o<t;o++)for(var a=this.datav.getUint8(this.pos++,!0),c=i*this.width*4+8*o*4,l=0;l<8&&8*o+l<this.width;l++){var h=this.palette[a>>7-l&1];this.data[c+4*l]=h.blue,this.data[c+4*l+1]=h.green,this.data[c+4*l+2]=h.red,this.data[c+4*l+3]=255}e!==0&&(this.pos+=4-e)}},Zn.prototype.bit4=function(){for(var n=Math.ceil(this.width/2),t=n%4,e=this.height-1;e>=0;e--){for(var i=this.bottom_up?e:this.height-1-e,o=0;o<n;o++){var a=this.datav.getUint8(this.pos++,!0),c=i*this.width*4+2*o*4,l=a>>4,h=15&a,d=this.palette[l];if(this.data[c]=d.blue,this.data[c+1]=d.green,this.data[c+2]=d.red,this.data[c+3]=255,2*o+1>=this.width)break;d=this.palette[h],this.data[c+4]=d.blue,this.data[c+4+1]=d.green,this.data[c+4+2]=d.red,this.data[c+4+3]=255}t!==0&&(this.pos+=4-t)}},Zn.prototype.bit8=function(){for(var n=this.width%4,t=this.height-1;t>=0;t--){for(var e=this.bottom_up?t:this.height-1-t,i=0;i<this.width;i++){var o=this.datav.getUint8(this.pos++,!0),a=e*this.width*4+4*i;if(o<this.palette.length){var c=this.palette[o];this.data[a]=c.red,this.data[a+1]=c.green,this.data[a+2]=c.blue,this.data[a+3]=255}else this.data[a]=255,this.data[a+1]=255,this.data[a+2]=255,this.data[a+3]=255}n!==0&&(this.pos+=4-n)}},Zn.prototype.bit15=function(){for(var n=this.width%3,t=parseInt(\"11111\",2),e=this.height-1;e>=0;e--){for(var i=this.bottom_up?e:this.height-1-e,o=0;o<this.width;o++){var a=this.datav.getUint16(this.pos,!0);this.pos+=2;var c=(a&t)/t*255|0,l=(a>>5&t)/t*255|0,h=(a>>10&t)/t*255|0,d=a>>15?255:0,m=i*this.width*4+4*o;this.data[m]=h,this.data[m+1]=l,this.data[m+2]=c,this.data[m+3]=d}this.pos+=n}},Zn.prototype.bit16=function(){for(var n=this.width%3,t=parseInt(\"11111\",2),e=parseInt(\"111111\",2),i=this.height-1;i>=0;i--){for(var o=this.bottom_up?i:this.height-1-i,a=0;a<this.width;a++){var c=this.datav.getUint16(this.pos,!0);this.pos+=2;var l=(c&t)/t*255|0,h=(c>>5&e)/e*255|0,d=(c>>11)/t*255|0,m=o*this.width*4+4*a;this.data[m]=d,this.data[m+1]=h,this.data[m+2]=l,this.data[m+3]=255}this.pos+=n}},Zn.prototype.bit24=function(){for(var n=this.height-1;n>=0;n--){for(var t=this.bottom_up?n:this.height-1-n,e=0;e<this.width;e++){var i=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),c=t*this.width*4+4*e;this.data[c]=a,this.data[c+1]=o,this.data[c+2]=i,this.data[c+3]=255}this.pos+=this.width%4}},Zn.prototype.bit32=function(){for(var n=this.height-1;n>=0;n--)for(var t=this.bottom_up?n:this.height-1-n,e=0;e<this.width;e++){var i=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),c=this.datav.getUint8(this.pos++,!0),l=t*this.width*4+4*e;this.data[l]=a,this.data[l+1]=o,this.data[l+2]=i,this.data[l+3]=c}},Zn.prototype.getData=function(){return this.data},(function(n){n.processBMP=function(t,e,i,o){var a=new Zn(t,!1),c=a.width,l=a.height,h={data:a.getData(),width:c,height:l},d=new Ro(100).encode(h,100);return n.processJPEG.call(this,d,e,i,o)}})(Mt.API),Vu.prototype.getData=function(){return this.data},(function(n){n.processWEBP=function(t,e,i,o){var a=new Vu(t),c=a.width,l=a.height,h={data:a.getData(),width:c,height:l},d=new Ro(100).encode(h,100);return n.processJPEG.call(this,d,e,i,o)}})(Mt.API),Mt.API.processRGBA=function(n,t,e){for(var i=n.data,o=i.length,a=new Uint8Array(o/4*3),c=new Uint8Array(o/4),l=0,h=0,d=0;d<o;d+=4){var m=i[d],_=i[d+1],k=i[d+2],p=i[d+3];a[l++]=m,a[l++]=_,a[l++]=k,c[h++]=p}var j=this.__addimage__.arrayBufferToBinaryString(a);return{alpha:this.__addimage__.arrayBufferToBinaryString(c),data:j,index:t,alias:e,colorSpace:\"DeviceRGB\",bitsPerComponent:8,width:n.width,height:n.height}},Mt.API.setLanguage=function(n){return this.internal.languageSettings===void 0&&(this.internal.languageSettings={},this.internal.languageSettings.isSubscribed=!1),{af:\"Afrikaans\",sq:\"Albanian\",ar:\"Arabic (Standard)\",\"ar-DZ\":\"Arabic (Algeria)\",\"ar-BH\":\"Arabic (Bahrain)\",\"ar-EG\":\"Arabic (Egypt)\",\"ar-IQ\":\"Arabic (Iraq)\",\"ar-JO\":\"Arabic (Jordan)\",\"ar-KW\":\"Arabic (Kuwait)\",\"ar-LB\":\"Arabic (Lebanon)\",\"ar-LY\":\"Arabic (Libya)\",\"ar-MA\":\"Arabic (Morocco)\",\"ar-OM\":\"Arabic (Oman)\",\"ar-QA\":\"Arabic (Qatar)\",\"ar-SA\":\"Arabic (Saudi Arabia)\",\"ar-SY\":\"Arabic (Syria)\",\"ar-TN\":\"Arabic (Tunisia)\",\"ar-AE\":\"Arabic (U.A.E.)\",\"ar-YE\":\"Arabic (Yemen)\",an:\"Aragonese\",hy:\"Armenian\",as:\"Assamese\",ast:\"Asturian\",az:\"Azerbaijani\",eu:\"Basque\",be:\"Belarusian\",bn:\"Bengali\",bs:\"Bosnian\",br:\"Breton\",bg:\"Bulgarian\",my:\"Burmese\",ca:\"Catalan\",ch:\"Chamorro\",ce:\"Chechen\",zh:\"Chinese\",\"zh-HK\":\"Chinese (Hong Kong)\",\"zh-CN\":\"Chinese (PRC)\",\"zh-SG\":\"Chinese (Singapore)\",\"zh-TW\":\"Chinese (Taiwan)\",cv:\"Chuvash\",co:\"Corsican\",cr:\"Cree\",hr:\"Croatian\",cs:\"Czech\",da:\"Danish\",nl:\"Dutch (Standard)\",\"nl-BE\":\"Dutch (Belgian)\",en:\"English\",\"en-AU\":\"English (Australia)\",\"en-BZ\":\"English (Belize)\",\"en-CA\":\"English (Canada)\",\"en-IE\":\"English (Ireland)\",\"en-JM\":\"English (Jamaica)\",\"en-NZ\":\"English (New Zealand)\",\"en-PH\":\"English (Philippines)\",\"en-ZA\":\"English (South Africa)\",\"en-TT\":\"English (Trinidad & Tobago)\",\"en-GB\":\"English (United Kingdom)\",\"en-US\":\"English (United States)\",\"en-ZW\":\"English (Zimbabwe)\",eo:\"Esperanto\",et:\"Estonian\",fo:\"Faeroese\",fj:\"Fijian\",fi:\"Finnish\",fr:\"French (Standard)\",\"fr-BE\":\"French (Belgium)\",\"fr-CA\":\"French (Canada)\",\"fr-FR\":\"French (France)\",\"fr-LU\":\"French (Luxembourg)\",\"fr-MC\":\"French (Monaco)\",\"fr-CH\":\"French (Switzerland)\",fy:\"Frisian\",fur:\"Friulian\",gd:\"Gaelic (Scots)\",\"gd-IE\":\"Gaelic (Irish)\",gl:\"Galacian\",ka:\"Georgian\",de:\"German (Standard)\",\"de-AT\":\"German (Austria)\",\"de-DE\":\"German (Germany)\",\"de-LI\":\"German (Liechtenstein)\",\"de-LU\":\"German (Luxembourg)\",\"de-CH\":\"German (Switzerland)\",el:\"Greek\",gu:\"Gujurati\",ht:\"Haitian\",he:\"Hebrew\",hi:\"Hindi\",hu:\"Hungarian\",is:\"Icelandic\",id:\"Indonesian\",iu:\"Inuktitut\",ga:\"Irish\",it:\"Italian (Standard)\",\"it-CH\":\"Italian (Switzerland)\",ja:\"Japanese\",kn:\"Kannada\",ks:\"Kashmiri\",kk:\"Kazakh\",km:\"Khmer\",ky:\"Kirghiz\",tlh:\"Klingon\",ko:\"Korean\",\"ko-KP\":\"Korean (North Korea)\",\"ko-KR\":\"Korean (South Korea)\",la:\"Latin\",lv:\"Latvian\",lt:\"Lithuanian\",lb:\"Luxembourgish\",mk:\"North Macedonia\",ms:\"Malay\",ml:\"Malayalam\",mt:\"Maltese\",mi:\"Maori\",mr:\"Marathi\",mo:\"Moldavian\",nv:\"Navajo\",ng:\"Ndonga\",ne:\"Nepali\",no:\"Norwegian\",nb:\"Norwegian (Bokmal)\",nn:\"Norwegian (Nynorsk)\",oc:\"Occitan\",or:\"Oriya\",om:\"Oromo\",fa:\"Persian\",\"fa-IR\":\"Persian/Iran\",pl:\"Polish\",pt:\"Portuguese\",\"pt-BR\":\"Portuguese (Brazil)\",pa:\"Punjabi\",\"pa-IN\":\"Punjabi (India)\",\"pa-PK\":\"Punjabi (Pakistan)\",qu:\"Quechua\",rm:\"Rhaeto-Romanic\",ro:\"Romanian\",\"ro-MO\":\"Romanian (Moldavia)\",ru:\"Russian\",\"ru-MO\":\"Russian (Moldavia)\",sz:\"Sami (Lappish)\",sg:\"Sango\",sa:\"Sanskrit\",sc:\"Sardinian\",sd:\"Sindhi\",si:\"Singhalese\",sr:\"Serbian\",sk:\"Slovak\",sl:\"Slovenian\",so:\"Somani\",sb:\"Sorbian\",es:\"Spanish\",\"es-AR\":\"Spanish (Argentina)\",\"es-BO\":\"Spanish (Bolivia)\",\"es-CL\":\"Spanish (Chile)\",\"es-CO\":\"Spanish (Colombia)\",\"es-CR\":\"Spanish (Costa Rica)\",\"es-DO\":\"Spanish (Dominican Republic)\",\"es-EC\":\"Spanish (Ecuador)\",\"es-SV\":\"Spanish (El Salvador)\",\"es-GT\":\"Spanish (Guatemala)\",\"es-HN\":\"Spanish (Honduras)\",\"es-MX\":\"Spanish (Mexico)\",\"es-NI\":\"Spanish (Nicaragua)\",\"es-PA\":\"Spanish (Panama)\",\"es-PY\":\"Spanish (Paraguay)\",\"es-PE\":\"Spanish (Peru)\",\"es-PR\":\"Spanish (Puerto Rico)\",\"es-ES\":\"Spanish (Spain)\",\"es-UY\":\"Spanish (Uruguay)\",\"es-VE\":\"Spanish (Venezuela)\",sx:\"Sutu\",sw:\"Swahili\",sv:\"Swedish\",\"sv-FI\":\"Swedish (Finland)\",\"sv-SV\":\"Swedish (Sweden)\",ta:\"Tamil\",tt:\"Tatar\",te:\"Teluga\",th:\"Thai\",tig:\"Tigre\",ts:\"Tsonga\",tn:\"Tswana\",tr:\"Turkish\",tk:\"Turkmen\",uk:\"Ukrainian\",hsb:\"Upper Sorbian\",ur:\"Urdu\",ve:\"Venda\",vi:\"Vietnamese\",vo:\"Volapuk\",wa:\"Walloon\",cy:\"Welsh\",xh:\"Xhosa\",ji:\"Yiddish\",zu:\"Zulu\"}[n]!==void 0&&(this.internal.languageSettings.languageCode=n,this.internal.languageSettings.isSubscribed===!1&&(this.internal.events.subscribe(\"putCatalog\",function(){this.internal.write(\"/Lang (\"+this.internal.languageSettings.languageCode+\")\")}),this.internal.languageSettings.isSubscribed=!0)),this},ta=Mt.API,Ss=ta.getCharWidthsArray=function(n,t){var e,i,o=(t=t||{}).font||this.internal.getFont(),a=t.fontSize||this.internal.getFontSize(),c=t.charSpace||this.internal.getCharSpace(),l=t.widths?t.widths:o.metadata.Unicode.widths,h=l.fof?l.fof:1,d=t.kerning?t.kerning:o.metadata.Unicode.kerning,m=d.fof?d.fof:1,_=t.doKerning!==!1,k=0,p=n.length,j=0,O=l[0]||h,M=[];for(e=0;e<p;e++)i=n.charCodeAt(e),typeof o.metadata.widthOfString==\"function\"?M.push((o.metadata.widthOfGlyph(o.metadata.characterToGlyph(i))+c*(1e3/a)||0)/1e3):(k=_&&xe(d[i])===\"object\"&&!isNaN(parseInt(d[i][j],10))?d[i][j]/m:0,M.push((l[i]||O)/h+k)),j=i;return M},Bu=ta.getStringUnitWidth=function(n,t){var e=(t=t||{}).fontSize||this.internal.getFontSize(),i=t.font||this.internal.getFont(),o=t.charSpace||this.internal.getCharSpace();return ta.processArabic&&(n=ta.processArabic(n)),typeof i.metadata.widthOfString==\"function\"?i.metadata.widthOfString(n,e,o)/e:Ss.apply(this,arguments).reduce(function(a,c){return a+c},0)},Mu=function(n,t,e,i){for(var o=[],a=0,c=n.length,l=0;a!==c&&l+t[a]<e;)l+=t[a],a++;o.push(n.slice(0,a));var h=a;for(l=0;a!==c;)l+t[a]>i&&(o.push(n.slice(h,a)),l=0,h=a),l+=t[a],a++;return h!==a&&o.push(n.slice(h,a)),o},Ru=function(n,t,e){e||(e={});var i,o,a,c,l,h,d,m=[],_=[m],k=e.textIndent||0,p=0,j=0,O=n.split(\" \"),M=Ss.apply(this,[\" \",e])[0];if(h=e.lineIndent===-1?O[0].length+2:e.lineIndent||0){var S=Array(h).join(\" \"),V=[];O.map(function(q){(q=q.split(/\\s*\\n/)).length>1?V=V.concat(q.map(function(it,vt){return(vt&&it.length?`\n`:\"\")+it})):V.push(q[0])}),O=V,h=Bu.apply(this,[S,e])}for(a=0,c=O.length;a<c;a++){var G=0;if(i=O[a],h&&i[0]==`\n`&&(i=i.substr(1),G=1),k+p+(j=(o=Ss.apply(this,[i,e])).reduce(function(q,it){return q+it},0))>t||G){if(j>t){for(l=Mu.apply(this,[i,o,t-(k+p),t]),m.push(l.shift()),m=[l.pop()];l.length;)_.push([l.shift()]);j=o.slice(i.length-(m[0]?m[0].length:0)).reduce(function(q,it){return q+it},0)}else m=[i];_.push(m),k=j+h,p=M}else m.push(i),k+=p+j,p=M}return d=h?function(q,it){return(it?S:\"\")+q.join(\" \")}:function(q){return q.join(\" \")},_.map(d)},ta.splitTextToSize=function(n,t,e){var i,o=(e=e||{}).fontSize||this.internal.getFontSize(),a=(function(m){if(m.widths&&m.kerning)return{widths:m.widths,kerning:m.kerning};var _=this.internal.getFont(m.fontName,m.fontStyle),k=\"Unicode\";return _.metadata[k]?{widths:_.metadata[k].widths||{0:1},kerning:_.metadata[k].kerning||{}}:{font:_.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}).call(this,e);i=Array.isArray(n)?n:String(n).split(/\\r?\\n/);var c=1*this.internal.scaleFactor*t/o;a.textIndent=e.textIndent?1*e.textIndent*this.internal.scaleFactor/o:0,a.lineIndent=e.lineIndent;var l,h,d=[];for(l=0,h=i.length;l<h;l++)d=d.concat(Ru.apply(this,[i[l],c,a]));return d},(function(n){n.__fontmetrics__=n.__fontmetrics__||{};for(var t=\"0123456789abcdef\",e=\"klmnopqrstuvwxyz\",i={},o={},a=0;a<16;a++)i[e[a]]=t[a],o[t[a]]=e[a];var c=function(k){return\"0x\"+parseInt(k,10).toString(16)},l=n.__fontmetrics__.compress=function(k){var p,j,O,M,S=[\"{\"];for(var V in k){if(p=k[V],isNaN(parseInt(V,10))?j=\"'\"+V+\"'\":(V=parseInt(V,10),j=(j=c(V).slice(2)).slice(0,-1)+o[j.slice(-1)]),typeof p==\"number\")p<0?(O=c(p).slice(3),M=\"-\"):(O=c(p).slice(2),M=\"\"),O=M+O.slice(0,-1)+o[O.slice(-1)];else{if(xe(p)!==\"object\")throw new Error(\"Don't know what to do with value type \"+xe(p)+\".\");O=l(p)}S.push(j+O)}return S.push(\"}\"),S.join(\"\")},h=n.__fontmetrics__.uncompress=function(k){if(typeof k!=\"string\")throw new Error(\"Invalid argument passed to uncompress.\");for(var p,j,O,M,S={},V=1,G=S,q=[],it=\"\",vt=\"\",dt=k.length-1,X=1;X<dt;X+=1)(M=k[X])==\"'\"?p?(O=p.join(\"\"),p=void 0):p=[]:p?p.push(M):M==\"{\"?(q.push([G,O]),G={},O=void 0):M==\"}\"?((j=q.pop())[0][j[1]]=G,O=void 0,G=j[0]):M==\"-\"?V=-1:O===void 0?i.hasOwnProperty(M)?(it+=i[M],O=parseInt(it,16)*V,V=1,it=\"\"):it+=M:i.hasOwnProperty(M)?(vt+=i[M],G[O]=parseInt(vt,16)*V,V=1,O=void 0,vt=\"\"):vt+=M;return S},d={codePages:[\"WinAnsiEncoding\"],WinAnsiEncoding:h(\"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\")},m={Unicode:{Courier:d,\"Courier-Bold\":d,\"Courier-BoldOblique\":d,\"Courier-Oblique\":d,Helvetica:d,\"Helvetica-Bold\":d,\"Helvetica-BoldOblique\":d,\"Helvetica-Oblique\":d,\"Times-Roman\":d,\"Times-Bold\":d,\"Times-BoldItalic\":d,\"Times-Italic\":d}},_={Unicode:{\"Courier-Oblique\":h(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-BoldItalic\":h(\"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"),\"Helvetica-Bold\":h(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),Courier:h(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-BoldOblique\":h(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Bold\":h(\"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"),Symbol:h(\"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"),Helvetica:h(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"),\"Helvetica-BoldOblique\":h(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),ZapfDingbats:h(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-Bold\":h(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Italic\":h(\"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"),\"Times-Roman\":h(\"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"),\"Helvetica-Oblique\":h(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\")}};n.events.push([\"addFont\",function(k){var p=k.font,j=_.Unicode[p.postScriptName];j&&(p.metadata.Unicode={},p.metadata.Unicode.widths=j.widths,p.metadata.Unicode.kerning=j.kerning);var O=m.Unicode[p.postScriptName];O&&(p.metadata.Unicode.encoding=O,p.encoding=O.codePages[0])}])})(Mt.API),(function(n){var t=function(e){for(var i=e.length,o=new Uint8Array(i),a=0;a<i;a++)o[a]=e.charCodeAt(a);return o};n.API.events.push([\"addFont\",function(e){var i=void 0,o=e.font,a=e.instance;if(!o.isStandardFont){if(a===void 0)throw new Error(\"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\"+o.postScriptName+\"').\");if(typeof(i=a.existsFileInVFS(o.postScriptName)===!1?a.loadFile(o.postScriptName):a.getFileFromVFS(o.postScriptName))!=\"string\")throw new Error(\"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\"+o.postScriptName+\"').\");(function(c,l){l=/^\\x00\\x01\\x00\\x00/.test(l)?t(l):t(Ps(l)),c.metadata=n.API.TTFFont.open(l),c.metadata.Unicode=c.metadata.Unicode||{encoding:{},kerning:{},widths:[]},c.metadata.glyIdsUsed=[0]})(o,i)}}])})(Mt),Mt.API.addSvgAsImage=function(n,t,e,i,o,a,c,l){if(isNaN(t)||isNaN(e))throw Le.error(\"jsPDF.addSvgAsImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");if(isNaN(i)||isNaN(o))throw Le.error(\"jsPDF.addSvgAsImage: Invalid measurements\",arguments),new Error(\"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\");var h=document.createElement(\"canvas\");h.width=i,h.height=o;var d=h.getContext(\"2d\");d.fillStyle=\"#fff\",d.fillRect(0,0,h.width,h.height);var m={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},_=this;return(Kt.canvg?Promise.resolve(Kt.canvg):mo(()=>import(\"./index.es-MeewMCO3.js\"),__vite__mapDeps([0,1,2]))).catch(function(k){return Promise.reject(new Error(\"Could not load canvg: \"+k))}).then(function(k){return k.default?k.default:k}).then(function(k){return k.fromString(d,n,m)},function(){return Promise.reject(new Error(\"Could not load canvg.\"))}).then(function(k){return k.render(m)}).then(function(){_.addImage(h.toDataURL(\"image/jpeg\",1),t,e,i,o,c,l)})},Mt.API.putTotalPages=function(n){var t,e=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(t=new RegExp(n,\"g\"),e=this.internal.getNumberOfPages()):(t=new RegExp(this.pdfEscape16(n,this.internal.getFont()),\"g\"),e=this.pdfEscape16(this.internal.getNumberOfPages()+\"\",this.internal.getFont()));for(var i=1;i<=this.internal.getNumberOfPages();i++)for(var o=0;o<this.internal.pages[i].length;o++)this.internal.pages[i][o]=this.internal.pages[i][o].replace(t,e);return this},Mt.API.viewerPreferences=function(n,t){var e;n=n||{},t=t||!1;var i,o,a,c={HideToolbar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:\"UseNone\",value:\"UseNone\",type:\"name\",explicitSet:!1,valueSet:[\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"UseOC\"],pdfVersion:1.3},Direction:{defaultValue:\"L2R\",value:\"L2R\",type:\"name\",explicitSet:!1,valueSet:[\"L2R\",\"R2L\"],pdfVersion:1.3},ViewArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},ViewClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintScaling:{defaultValue:\"AppDefault\",value:\"AppDefault\",type:\"name\",explicitSet:!1,valueSet:[\"AppDefault\",\"None\"],pdfVersion:1.6},Duplex:{defaultValue:\"\",value:\"none\",type:\"name\",explicitSet:!1,valueSet:[\"Simplex\",\"DuplexFlipShortEdge\",\"DuplexFlipLongEdge\",\"none\"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:\"\",value:\"\",type:\"array\",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:\"integer\",explicitSet:!1,valueSet:null,pdfVersion:1.7}},l=Object.keys(c),h=[],d=0,m=0,_=0;function k(j,O){var M,S=!1;for(M=0;M<j.length;M+=1)j[M]===O&&(S=!0);return S}if(this.internal.viewerpreferences===void 0&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(c)),this.internal.viewerpreferences.isSubscribed=!1),e=this.internal.viewerpreferences.configuration,n===\"reset\"||t===!0){var p=l.length;for(_=0;_<p;_+=1)e[l[_]].value=e[l[_]].defaultValue,e[l[_]].explicitSet=!1}if(xe(n)===\"object\"){for(o in n)if(a=n[o],k(l,o)&&a!==void 0){if(e[o].type===\"boolean\"&&typeof a==\"boolean\")e[o].value=a;else if(e[o].type===\"name\"&&k(e[o].valueSet,a))e[o].value=a;else if(e[o].type===\"integer\"&&Number.isInteger(a))e[o].value=a;else if(e[o].type===\"array\"){for(d=0;d<a.length;d+=1)if(i=!0,a[d].length===1&&typeof a[d][0]==\"number\")h.push(String(a[d]-1));else if(a[d].length>1){for(m=0;m<a[d].length;m+=1)typeof a[d][m]!=\"number\"&&(i=!1);i===!0&&h.push([a[d][0]-1,a[d][1]-1].join(\" \"))}e[o].value=\"[\"+h.join(\" \")+\"]\"}else e[o].value=e[o].defaultValue;e[o].explicitSet=!0}}return this.internal.viewerpreferences.isSubscribed===!1&&(this.internal.events.subscribe(\"putCatalog\",function(){var j,O=[];for(j in e)e[j].explicitSet===!0&&(e[j].type===\"name\"?O.push(\"/\"+j+\" /\"+e[j].value):O.push(\"/\"+j+\" \"+e[j].value));O.length!==0&&this.internal.write(`/ViewerPreferences\n<<\n`+O.join(`\n`)+`\n>>`)}),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=e,this},Mt.API.addMetadata=function(n,t){return this.internal.__metadata__===void 0&&(this.internal.__metadata__={metadata:n,namespaceUri:t??\"http://jspdf.default.namespaceuri/\",rawXml:typeof t==\"boolean\"&&t},this.internal.events.subscribe(\"putCatalog\",X1),this.internal.events.subscribe(\"postPutResources\",K1)),this},(function(n){var t=n.API,e=t.pdfEscape16=function(a,c){for(var l,h=c.metadata.Unicode.widths,d=[\"\",\"0\",\"00\",\"000\",\"0000\"],m=[\"\"],_=0,k=a.length;_<k;++_){if(l=c.metadata.characterToGlyph(a.charCodeAt(_)),c.metadata.glyIdsUsed.push(l),c.metadata.toUnicode[l]=a.charCodeAt(_),h.indexOf(l)==-1&&(h.push(l),h.push([parseInt(c.metadata.widthOfGlyph(l),10)])),l==\"0\")return m.join(\"\");l=l.toString(16),m.push(d[4-l.length],l)}return m.join(\"\")},i=function(a){var c,l,h,d,m,_,k;for(m=`/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n  /Registry (Adobe)\n  /Ordering (UCS)\n  /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000><ffff>\nendcodespacerange`,h=[],_=0,k=(l=Object.keys(a).sort(function(p,j){return p-j})).length;_<k;_++)c=l[_],h.length>=100&&(m+=`\n`+h.length+` beginbfchar\n`+h.join(`\n`)+`\nendbfchar`,h=[]),a[c]!==void 0&&a[c]!==null&&typeof a[c].toString==\"function\"&&(d=(\"0000\"+a[c].toString(16)).slice(-4),c=(\"0000\"+(+c).toString(16)).slice(-4),h.push(\"<\"+c+\"><\"+d+\">\"));return h.length&&(m+=`\n`+h.length+` beginbfchar\n`+h.join(`\n`)+`\nendbfchar\n`),m+`endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend`};t.events.push([\"putFont\",function(a){(function(c){var l=c.font,h=c.out,d=c.newObject,m=c.putStream;if(l.metadata instanceof n.API.TTFFont&&l.encoding===\"Identity-H\"){for(var _=l.metadata.Unicode.widths,k=l.metadata.subset.encode(l.metadata.glyIdsUsed,1),p=\"\",j=0;j<k.length;j++)p+=String.fromCharCode(k[j]);var O=d();m({data:p,addLength1:!0,objectId:O}),h(\"endobj\");var M=d();m({data:i(l.metadata.toUnicode),addLength1:!0,objectId:M}),h(\"endobj\");var S=d();h(\"<<\"),h(\"/Type /FontDescriptor\"),h(\"/FontName /\"+na(l.fontName)),h(\"/FontFile2 \"+O+\" 0 R\"),h(\"/FontBBox \"+n.API.PDFObject.convert(l.metadata.bbox)),h(\"/Flags \"+l.metadata.flags),h(\"/StemV \"+l.metadata.stemV),h(\"/ItalicAngle \"+l.metadata.italicAngle),h(\"/Ascent \"+l.metadata.ascender),h(\"/Descent \"+l.metadata.decender),h(\"/CapHeight \"+l.metadata.capHeight),h(\">>\"),h(\"endobj\");var V=d();h(\"<<\"),h(\"/Type /Font\"),h(\"/BaseFont /\"+na(l.fontName)),h(\"/FontDescriptor \"+S+\" 0 R\"),h(\"/W \"+n.API.PDFObject.convert(_)),h(\"/CIDToGIDMap /Identity\"),h(\"/DW 1000\"),h(\"/Subtype /CIDFontType2\"),h(\"/CIDSystemInfo\"),h(\"<<\"),h(\"/Supplement 0\"),h(\"/Registry (Adobe)\"),h(\"/Ordering (\"+l.encoding+\")\"),h(\">>\"),h(\">>\"),h(\"endobj\"),l.objectNumber=d(),h(\"<<\"),h(\"/Type /Font\"),h(\"/Subtype /Type0\"),h(\"/ToUnicode \"+M+\" 0 R\"),h(\"/BaseFont /\"+na(l.fontName)),h(\"/Encoding /\"+l.encoding),h(\"/DescendantFonts [\"+V+\" 0 R]\"),h(\">>\"),h(\"endobj\"),l.isAlreadyPutted=!0}})(a)}]),t.events.push([\"putFont\",function(a){(function(c){var l=c.font,h=c.out,d=c.newObject,m=c.putStream;if(l.metadata instanceof n.API.TTFFont&&l.encoding===\"WinAnsiEncoding\"){for(var _=l.metadata.rawData,k=\"\",p=0;p<_.length;p++)k+=String.fromCharCode(_[p]);var j=d();m({data:k,addLength1:!0,objectId:j}),h(\"endobj\");var O=d();m({data:i(l.metadata.toUnicode),addLength1:!0,objectId:O}),h(\"endobj\");var M=d();h(\"<<\"),h(\"/Descent \"+l.metadata.decender),h(\"/CapHeight \"+l.metadata.capHeight),h(\"/StemV \"+l.metadata.stemV),h(\"/Type /FontDescriptor\"),h(\"/FontFile2 \"+j+\" 0 R\"),h(\"/Flags 96\"),h(\"/FontBBox \"+n.API.PDFObject.convert(l.metadata.bbox)),h(\"/FontName /\"+na(l.fontName)),h(\"/ItalicAngle \"+l.metadata.italicAngle),h(\"/Ascent \"+l.metadata.ascender),h(\">>\"),h(\"endobj\"),l.objectNumber=d();for(var S=0;S<l.metadata.hmtx.widths.length;S++)l.metadata.hmtx.widths[S]=parseInt(l.metadata.hmtx.widths[S]*(1e3/l.metadata.head.unitsPerEm));h(\"<</Subtype/TrueType/Type/Font/ToUnicode \"+O+\" 0 R/BaseFont/\"+na(l.fontName)+\"/FontDescriptor \"+M+\" 0 R/Encoding/\"+l.encoding+\" /FirstChar 29 /LastChar 255 /Widths \"+n.API.PDFObject.convert(l.metadata.hmtx.widths)+\">>\"),h(\"endobj\"),l.isAlreadyPutted=!0}})(a)}]);var o=function(a){var c,l=a.text||\"\",h=a.x,d=a.y,m=a.options||{},_=a.mutex||{},k=_.pdfEscape,p=_.activeFontKey,j=_.fonts,O=p,M=\"\",S=0,V=\"\",G=j[O].encoding;if(j[O].encoding!==\"Identity-H\")return{text:l,x:h,y:d,options:m,mutex:_};for(V=l,O=p,Array.isArray(l)&&(V=l[0]),S=0;S<V.length;S+=1)j[O].metadata.hasOwnProperty(\"cmap\")&&(c=j[O].metadata.cmap.unicode.codeMap[V[S].charCodeAt(0)]),c||V[S].charCodeAt(0)<256&&j[O].metadata.hasOwnProperty(\"Unicode\")?M+=V[S]:M+=\"\";var q=\"\";return parseInt(O.slice(1))<14||G===\"WinAnsiEncoding\"?q=k(M,O).split(\"\").map(function(it){return it.charCodeAt(0).toString(16)}).join(\"\"):G===\"Identity-H\"&&(q=e(M,j[O])),_.isHex=!0,{text:q,x:h,y:d,options:m,mutex:_}};t.events.push([\"postProcessText\",function(a){var c=a.text||\"\",l=[],h={text:c,x:a.x,y:a.y,options:a.options,mutex:a.mutex};if(Array.isArray(c)){var d=0;for(d=0;d<c.length;d+=1)Array.isArray(c[d])&&c[d].length===3?l.push([o(Object.assign({},h,{text:c[d][0]})).text,c[d][1],c[d][2]]):l.push(o(Object.assign({},h,{text:c[d]})).text);a.text=l}else a.text=o(Object.assign({},h,{text:c})).text}])})(Mt),(function(n){var t=function(){return this.internal.vFS===void 0&&(this.internal.vFS={}),!0};n.existsFileInVFS=function(e){return t.call(this),this.internal.vFS[e]!==void 0},n.addFileToVFS=function(e,i){return t.call(this),this.internal.vFS[e]=i,this},n.getFileFromVFS=function(e){return t.call(this),this.internal.vFS[e]!==void 0?this.internal.vFS[e]:null}})(Mt.API),(function(n){n.__bidiEngine__=n.prototype.__bidiEngine__=function(i){var o,a,c,l,h,d,m,_=t,k=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],p=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],j={L:0,R:1,EN:2,AN:3,N:4,B:5,S:6},O={0:0,5:1,6:2,7:3,32:4,251:5,254:6,255:7},M=[\"(\",\")\",\"(\",\"<\",\">\",\"<\",\"[\",\"]\",\"[\",\"{\",\"}\",\"{\",\"«\",\"»\",\"«\",\"‹\",\"›\",\"‹\",\"⁅\",\"⁆\",\"⁅\",\"⁽\",\"⁾\",\"⁽\",\"₍\",\"₎\",\"₍\",\"≤\",\"≥\",\"≤\",\"〈\",\"〉\",\"〈\",\"﹙\",\"﹚\",\"﹙\",\"﹛\",\"﹜\",\"﹛\",\"﹝\",\"﹞\",\"﹝\",\"﹤\",\"﹥\",\"﹤\"],S=new RegExp(/^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/),V=!1,G=0;this.__bidiEngine__={};var q=function(N){var E=N.charCodeAt(),z=E>>8,U=O[z];return U!==void 0?_[256*U+(255&E)]:z===252||z===253?\"AL\":S.test(z)?\"L\":z===8?\"R\":\"N\"},it=function(N){for(var E,z=0;z<N.length;z++){if((E=q(N.charAt(z)))===\"L\")return!1;if(E===\"R\")return!0}return!1},vt=function(N,E,z,U){var rt,ot,ft,nt,ct=E[U];switch(ct){case\"L\":case\"R\":case\"LRE\":case\"RLE\":case\"LRO\":case\"RLO\":case\"PDF\":V=!1;break;case\"N\":case\"AN\":break;case\"EN\":V&&(ct=\"AN\");break;case\"AL\":V=!0,ct=\"R\";break;case\"WS\":case\"BN\":ct=\"N\";break;case\"CS\":U<1||U+1>=E.length||(rt=z[U-1])!==\"EN\"&&rt!==\"AN\"||(ot=E[U+1])!==\"EN\"&&ot!==\"AN\"?ct=\"N\":V&&(ot=\"AN\"),ct=ot===rt?ot:\"N\";break;case\"ES\":ct=(rt=U>0?z[U-1]:\"B\")===\"EN\"&&U+1<E.length&&E[U+1]===\"EN\"?\"EN\":\"N\";break;case\"ET\":if(U>0&&z[U-1]===\"EN\"){ct=\"EN\";break}if(V){ct=\"N\";break}for(ft=U+1,nt=E.length;ft<nt&&E[ft]===\"ET\";)ft++;ct=ft<nt&&E[ft]===\"EN\"?\"EN\":\"N\";break;case\"NSM\":if(c&&!l){for(nt=E.length,ft=U+1;ft<nt&&E[ft]===\"NSM\";)ft++;if(ft<nt){var At=N[U],wt=At>=1425&&At<=2303||At===64286;if(rt=E[ft],wt&&(rt===\"R\"||rt===\"AL\")){ct=\"R\";break}}}ct=U<1||(rt=E[U-1])===\"B\"?\"N\":z[U-1];break;case\"B\":V=!1,o=!0,ct=G;break;case\"S\":a=!0,ct=\"N\"}return ct},dt=function(N,E,z){var U=N.split(\"\");return z&&X(U,z,{hiLevel:G}),U.reverse(),E&&E.reverse(),U.join(\"\")},X=function(N,E,z){var U,rt,ot,ft,nt,ct=-1,At=N.length,wt=0,x=[],B=G?p:k,T=[];for(V=!1,o=!1,a=!1,rt=0;rt<At;rt++)T[rt]=q(N[rt]);for(ot=0;ot<At;ot++){if(nt=wt,x[ot]=vt(N,T,x,ot),U=240&(wt=B[nt][j[x[ot]]]),wt&=15,E[ot]=ft=B[wt][5],U>0)if(U===16){for(rt=ct;rt<ot;rt++)E[rt]=1;ct=-1}else ct=-1;if(B[wt][6])ct===-1&&(ct=ot);else if(ct>-1){for(rt=ct;rt<ot;rt++)E[rt]=ft;ct=-1}T[ot]===\"B\"&&(E[ot]=0),z.hiLevel|=ft}a&&(function(H,J,Z){for(var at=0;at<Z;at++)if(H[at]===\"S\"){J[at]=G;for(var st=at-1;st>=0&&H[st]===\"WS\";st--)J[st]=G}})(T,E,At)},R=function(N,E,z,U,rt){if(!(rt.hiLevel<N)){if(N===1&&G===1&&!o)return E.reverse(),void(z&&z.reverse());for(var ot,ft,nt,ct,At=E.length,wt=0;wt<At;){if(U[wt]>=N){for(nt=wt+1;nt<At&&U[nt]>=N;)nt++;for(ct=wt,ft=nt-1;ct<ft;ct++,ft--)ot=E[ct],E[ct]=E[ft],E[ft]=ot,z&&(ot=z[ct],z[ct]=z[ft],z[ft]=ot);wt=nt}wt++}}},tt=function(N,E,z){var U=N.split(\"\"),rt={hiLevel:G};return z||(z=[]),X(U,z,rt),(function(ot,ft,nt){if(nt.hiLevel!==0&&m)for(var ct,At=0;At<ot.length;At++)ft[At]===1&&(ct=M.indexOf(ot[At]))>=0&&(ot[At]=M[ct+1])})(U,z,rt),R(2,U,E,z,rt),R(1,U,E,z,rt),U.join(\"\")};return this.__bidiEngine__.doBidiReorder=function(N,E,z){if((function(rt,ot){if(ot)for(var ft=0;ft<rt.length;ft++)ot[ft]=ft;l===void 0&&(l=it(rt)),d===void 0&&(d=it(rt))})(N,E),c||!h||d)if(c&&h&&l^d)G=l?1:0,N=dt(N,E,z);else if(!c&&h&&d)G=l?1:0,N=tt(N,E,z),N=dt(N,E);else if(!c||l||h||d){if(c&&!h&&l^d)N=dt(N,E),l?(G=0,N=tt(N,E,z)):(G=1,N=tt(N,E,z),N=dt(N,E));else if(c&&l&&!h&&d)G=1,N=tt(N,E,z),N=dt(N,E);else if(!c&&!h&&l^d){var U=m;l?(G=1,N=tt(N,E,z),G=0,m=!1,N=tt(N,E,z),m=U):(G=0,N=tt(N,E,z),N=dt(N,E),G=1,m=!1,N=tt(N,E,z),m=U,N=dt(N,E))}}else G=0,N=tt(N,E,z);else G=l?1:0,N=tt(N,E,z);return N},this.__bidiEngine__.setOptions=function(N){N&&(c=N.isInputVisual,h=N.isOutputVisual,l=N.isInputRtl,d=N.isOutputRtl,m=N.isSymmetricSwapping)},this.__bidiEngine__.setOptions(i),this.__bidiEngine__};var t=[\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"S\",\"B\",\"S\",\"WS\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"B\",\"B\",\"S\",\"WS\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"CS\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"L\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"ET\",\"ET\",\"EN\",\"EN\",\"N\",\"L\",\"N\",\"N\",\"N\",\"EN\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"N\",\"N\",\"AL\",\"ET\",\"ET\",\"AL\",\"CS\",\"AL\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"ET\",\"AN\",\"AN\",\"AL\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"BN\",\"BN\",\"BN\",\"L\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"B\",\"LRE\",\"RLE\",\"PDF\",\"LRO\",\"RLO\",\"CS\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"N\",\"LRI\",\"RLI\",\"FSI\",\"PDI\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"EN\",\"L\",\"N\",\"N\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"L\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"NSM\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"ES\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"CS\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"N\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\"],e=new n.__bidiEngine__({isInputVisual:!0});n.API.events.push([\"postProcessText\",function(i){var o=i.text;i.x,i.y;var a=i.options||{};i.mutex,a.lang;var c=[];if(a.isInputVisual=typeof a.isInputVisual!=\"boolean\"||a.isInputVisual,e.setOptions(a),Object.prototype.toString.call(o)===\"[object Array]\"){var l=0;for(c=[],l=0;l<o.length;l+=1)Object.prototype.toString.call(o[l])===\"[object Array]\"?c.push([e.doBidiReorder(o[l][0]),o[l][1],o[l][2]]):c.push([e.doBidiReorder(o[l])]);i.text=c}else i.text=e.doBidiReorder(o);e.setOptions({isInputVisual:!0})}])})(Mt),Mt.API.TTFFont=(function(){function n(t){var e;if(this.rawData=t,e=this.contents=new Qr(t),this.contents.pos=4,e.readString(4)===\"ttcf\")throw new Error(\"TTCF not supported.\");e.pos=0,this.parse(),this.subset=new h2(this),this.registerTTF()}return n.open=function(t){return new n(t)},n.prototype.parse=function(){return this.directory=new $1(this.contents),this.head=new Q1(this),this.name=new i2(this),this.cmap=new Rf(this),this.toUnicode={},this.hhea=new t2(this),this.maxp=new a2(this),this.hmtx=new s2(this),this.post=new n2(this),this.os2=new e2(this),this.loca=new f2(this),this.glyf=new o2(this),this.ascender=this.os2.exists&&this.os2.ascender||this.hhea.ascender,this.decender=this.os2.exists&&this.os2.decender||this.hhea.decender,this.lineGap=this.os2.exists&&this.os2.lineGap||this.hhea.lineGap,this.bbox=[this.head.xMin,this.head.yMin,this.head.xMax,this.head.yMax]},n.prototype.registerTTF=function(){var t,e,i,o,a;if(this.scaleFactor=1e3/this.head.unitsPerEm,this.bbox=(function(){var c,l,h,d;for(d=[],c=0,l=(h=this.bbox).length;c<l;c++)t=h[c],d.push(Math.round(t*this.scaleFactor));return d}).call(this),this.stemV=0,this.post.exists?(i=255&(o=this.post.italic_angle),32768&(e=o>>16)&&(e=-(1+(65535^e))),this.italicAngle=+(e+\".\"+i)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=(a=this.familyClass)===1||a===2||a===3||a===4||a===5||a===7,this.isScript=this.familyClass===10,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),this.italicAngle!==0&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw new Error(\"No unicode cmap for font\")},n.prototype.characterToGlyph=function(t){var e;return((e=this.cmap.unicode)!=null?e.codeMap[t]:void 0)||0},n.prototype.widthOfGlyph=function(t){var e;return e=1e3/this.head.unitsPerEm,this.hmtx.forGlyph(t).advance*e},n.prototype.widthOfString=function(t,e,i){var o,a,c,l;for(c=0,a=0,l=(t=\"\"+t).length;0<=l?a<l:a>l;a=0<=l?++a:--a)o=t.charCodeAt(a),c+=this.widthOfGlyph(this.characterToGlyph(o))+i*(1e3/e)||0;return c*(e/1e3)},n.prototype.lineHeight=function(t,e){var i;return e==null&&(e=!1),i=e?this.lineGap:0,(this.ascender+i-this.decender)/1e3*t},n})();var er,Qr=(function(){function n(t){this.data=t??[],this.pos=0,this.length=this.data.length}return n.prototype.readByte=function(){return this.data[this.pos++]},n.prototype.writeByte=function(t){return this.data[this.pos++]=t},n.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()<<16)+(this.readByte()<<8)+this.readByte()},n.prototype.writeUInt32=function(t){return this.writeByte(t>>>24&255),this.writeByte(t>>16&255),this.writeByte(t>>8&255),this.writeByte(255&t)},n.prototype.readInt32=function(){var t;return(t=this.readUInt32())>=2147483648?t-4294967296:t},n.prototype.writeInt32=function(t){return t<0&&(t+=4294967296),this.writeUInt32(t)},n.prototype.readUInt16=function(){return this.readByte()<<8|this.readByte()},n.prototype.writeUInt16=function(t){return this.writeByte(t>>8&255),this.writeByte(255&t)},n.prototype.readInt16=function(){var t;return(t=this.readUInt16())>=32768?t-65536:t},n.prototype.writeInt16=function(t){return t<0&&(t+=65536),this.writeUInt16(t)},n.prototype.readString=function(t){var e,i;for(i=[],e=0;0<=t?e<t:e>t;e=0<=t?++e:--e)i[e]=String.fromCharCode(this.readByte());return i.join(\"\")},n.prototype.writeString=function(t){var e,i,o;for(o=[],e=0,i=t.length;0<=i?e<i:e>i;e=0<=i?++e:--e)o.push(this.writeByte(t.charCodeAt(e)));return o},n.prototype.readShort=function(){return this.readInt16()},n.prototype.writeShort=function(t){return this.writeInt16(t)},n.prototype.readLongLong=function(){var t,e,i,o,a,c,l,h;return t=this.readByte(),e=this.readByte(),i=this.readByte(),o=this.readByte(),a=this.readByte(),c=this.readByte(),l=this.readByte(),h=this.readByte(),128&t?-1*(72057594037927940*(255^t)+281474976710656*(255^e)+1099511627776*(255^i)+4294967296*(255^o)+16777216*(255^a)+65536*(255^c)+256*(255^l)+(255^h)+1):72057594037927940*t+281474976710656*e+1099511627776*i+4294967296*o+16777216*a+65536*c+256*l+h},n.prototype.writeLongLong=function(t){var e,i;return e=Math.floor(t/4294967296),i=4294967295&t,this.writeByte(e>>24&255),this.writeByte(e>>16&255),this.writeByte(e>>8&255),this.writeByte(255&e),this.writeByte(i>>24&255),this.writeByte(i>>16&255),this.writeByte(i>>8&255),this.writeByte(255&i)},n.prototype.readInt=function(){return this.readInt32()},n.prototype.writeInt=function(t){return this.writeInt32(t)},n.prototype.read=function(t){var e,i;for(e=[],i=0;0<=t?i<t:i>t;i=0<=t?++i:--i)e.push(this.readByte());return e},n.prototype.write=function(t){var e,i,o,a;for(a=[],i=0,o=t.length;i<o;i++)e=t[i],a.push(this.writeByte(e));return a},n})(),$1=(function(){var n;function t(e){var i,o,a;for(this.scalarType=e.readInt(),this.tableCount=e.readShort(),this.searchRange=e.readShort(),this.entrySelector=e.readShort(),this.rangeShift=e.readShort(),this.tables={},o=0,a=this.tableCount;0<=a?o<a:o>a;o=0<=a?++o:--o)i={tag:e.readString(4),checksum:e.readInt(),offset:e.readInt(),length:e.readInt()},this.tables[i.tag]=i}return t.prototype.encode=function(e){var i,o,a,c,l,h,d,m,_,k,p,j,O;for(O in p=Object.keys(e).length,h=Math.log(2),_=16*Math.floor(Math.log(p)/h),c=Math.floor(_/h),m=16*p-_,(o=new Qr).writeInt(this.scalarType),o.writeShort(p),o.writeShort(_),o.writeShort(c),o.writeShort(m),a=16*p,d=o.pos+a,l=null,j=[],e)for(k=e[O],o.writeString(O),o.writeInt(n(k)),o.writeInt(d),o.writeInt(k.length),j=j.concat(k),O===\"head\"&&(l=d),d+=k.length;d%4;)j.push(0),d++;return o.write(j),i=2981146554-n(o.data),o.pos=l+8,o.writeUInt32(i),o.data},n=function(e){var i,o,a,c;for(e=Tf.call(e);e.length%4;)e.push(0);for(a=new Qr(e),o=0,i=0,c=e.length;i<c;i=i+=4)o+=a.readUInt32();return 4294967295&o},t})(),Z1={}.hasOwnProperty,gr=function(n,t){for(var e in t)Z1.call(t,e)&&(n[e]=t[e]);function i(){this.constructor=n}return i.prototype=t.prototype,n.prototype=new i,n.__super__=t.prototype,n};er=(function(){function n(t){var e;this.file=t,e=this.file.directory.tables[this.tag],this.exists=!!e,e&&(this.offset=e.offset,this.length=e.length,this.parse(this.file.contents))}return n.prototype.parse=function(){},n.prototype.encode=function(){},n.prototype.raw=function(){return this.exists?(this.file.contents.pos=this.offset,this.file.contents.read(this.length)):null},n})();var Q1=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"head\",n.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.revision=t.readInt(),this.checkSumAdjustment=t.readInt(),this.magicNumber=t.readInt(),this.flags=t.readShort(),this.unitsPerEm=t.readShort(),this.created=t.readLongLong(),this.modified=t.readLongLong(),this.xMin=t.readShort(),this.yMin=t.readShort(),this.xMax=t.readShort(),this.yMax=t.readShort(),this.macStyle=t.readShort(),this.lowestRecPPEM=t.readShort(),this.fontDirectionHint=t.readShort(),this.indexToLocFormat=t.readShort(),this.glyphDataFormat=t.readShort()},n.prototype.encode=function(t){var e;return(e=new Qr).writeInt(this.version),e.writeInt(this.revision),e.writeInt(this.checkSumAdjustment),e.writeInt(this.magicNumber),e.writeShort(this.flags),e.writeShort(this.unitsPerEm),e.writeLongLong(this.created),e.writeLongLong(this.modified),e.writeShort(this.xMin),e.writeShort(this.yMin),e.writeShort(this.xMax),e.writeShort(this.yMax),e.writeShort(this.macStyle),e.writeShort(this.lowestRecPPEM),e.writeShort(this.fontDirectionHint),e.writeShort(t),e.writeShort(this.glyphDataFormat),e.data},n})(),Gu=(function(){function n(t,e){var i,o,a,c,l,h,d,m,_,k,p,j,O,M,S,V,G;switch(this.platformID=t.readUInt16(),this.encodingID=t.readShort(),this.offset=e+t.readInt(),_=t.pos,t.pos=this.offset,this.format=t.readUInt16(),this.length=t.readUInt16(),this.language=t.readUInt16(),this.isUnicode=this.platformID===3&&this.encodingID===1&&this.format===4||this.platformID===0&&this.format===4,this.codeMap={},this.format){case 0:for(h=0;h<256;++h)this.codeMap[h]=t.readByte();break;case 4:for(p=t.readUInt16(),k=p/2,t.pos+=6,a=(function(){var q,it;for(it=[],h=q=0;0<=k?q<k:q>k;h=0<=k?++q:--q)it.push(t.readUInt16());return it})(),t.pos+=2,O=(function(){var q,it;for(it=[],h=q=0;0<=k?q<k:q>k;h=0<=k?++q:--q)it.push(t.readUInt16());return it})(),d=(function(){var q,it;for(it=[],h=q=0;0<=k?q<k:q>k;h=0<=k?++q:--q)it.push(t.readUInt16());return it})(),m=(function(){var q,it;for(it=[],h=q=0;0<=k?q<k:q>k;h=0<=k?++q:--q)it.push(t.readUInt16());return it})(),o=(this.length-t.pos+this.offset)/2,l=(function(){var q,it;for(it=[],h=q=0;0<=o?q<o:q>o;h=0<=o?++q:--q)it.push(t.readUInt16());return it})(),h=S=0,G=a.length;S<G;h=++S)for(M=a[h],i=V=j=O[h];j<=M?V<=M:V>=M;i=j<=M?++V:--V)m[h]===0?c=i+d[h]:(c=l[m[h]/2+(i-j)-(k-h)]||0)!==0&&(c+=d[h]),this.codeMap[i]=65535&c}t.pos=_}return n.encode=function(t,e){var i,o,a,c,l,h,d,m,_,k,p,j,O,M,S,V,G,q,it,vt,dt,X,R,tt,N,E,z,U,rt,ot,ft,nt,ct,At,wt,x,B,T,H,J,Z,at,st,gt,_t,kt;switch(U=new Qr,c=Object.keys(t).sort(function(St,Dt){return St-Dt}),e){case\"macroman\":for(O=0,M=(function(){var St=[];for(j=0;j<256;++j)St.push(0);return St})(),V={0:0},a={},rt=0,ct=c.length;rt<ct;rt++)V[st=t[o=c[rt]]]==null&&(V[st]=++O),a[o]={old:t[o],new:V[t[o]]},M[o]=V[t[o]];return U.writeUInt16(1),U.writeUInt16(0),U.writeUInt32(12),U.writeUInt16(0),U.writeUInt16(262),U.writeUInt16(0),U.write(M),{charMap:a,subtable:U.data,maxGlyphID:O+1};case\"unicode\":for(E=[],_=[],G=0,V={},i={},S=d=null,ot=0,At=c.length;ot<At;ot++)V[it=t[o=c[ot]]]==null&&(V[it]=++G),i[o]={old:it,new:V[it]},l=V[it]-o,S!=null&&l===d||(S&&_.push(S),E.push(o),d=l),S=o;for(S&&_.push(S),_.push(65535),E.push(65535),tt=2*(R=E.length),X=2*Math.pow(Math.log(R)/Math.LN2,2),k=Math.log(X/2)/Math.LN2,dt=2*R-X,h=[],vt=[],p=[],j=ft=0,wt=E.length;ft<wt;j=++ft){if(N=E[j],m=_[j],N===65535){h.push(0),vt.push(0);break}if(N-(z=i[N].new)>=32768)for(h.push(0),vt.push(2*(p.length+R-j)),o=nt=N;N<=m?nt<=m:nt>=m;o=N<=m?++nt:--nt)p.push(i[o].new);else h.push(z-N),vt.push(0)}for(U.writeUInt16(3),U.writeUInt16(1),U.writeUInt32(12),U.writeUInt16(4),U.writeUInt16(16+8*R+2*p.length),U.writeUInt16(0),U.writeUInt16(tt),U.writeUInt16(X),U.writeUInt16(k),U.writeUInt16(dt),Z=0,x=_.length;Z<x;Z++)o=_[Z],U.writeUInt16(o);for(U.writeUInt16(0),at=0,B=E.length;at<B;at++)o=E[at],U.writeUInt16(o);for(gt=0,T=h.length;gt<T;gt++)l=h[gt],U.writeUInt16(l);for(_t=0,H=vt.length;_t<H;_t++)q=vt[_t],U.writeUInt16(q);for(kt=0,J=p.length;kt<J;kt++)O=p[kt],U.writeUInt16(O);return{charMap:i,subtable:U.data,maxGlyphID:G+1}}},n})(),Rf=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"cmap\",n.prototype.parse=function(t){var e,i,o;for(t.pos=this.offset,this.version=t.readUInt16(),o=t.readUInt16(),this.tables=[],this.unicode=null,i=0;0<=o?i<o:i>o;i=0<=o?++i:--i)e=new Gu(t,this.offset),this.tables.push(e),e.isUnicode&&this.unicode==null&&(this.unicode=e);return!0},n.encode=function(t,e){var i,o;return e==null&&(e=\"macroman\"),i=Gu.encode(t,e),(o=new Qr).writeUInt16(0),o.writeUInt16(1),i.table=o.data.concat(i.subtable),i},n})(),t2=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"hhea\",n.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.ascender=t.readShort(),this.decender=t.readShort(),this.lineGap=t.readShort(),this.advanceWidthMax=t.readShort(),this.minLeftSideBearing=t.readShort(),this.minRightSideBearing=t.readShort(),this.xMaxExtent=t.readShort(),this.caretSlopeRise=t.readShort(),this.caretSlopeRun=t.readShort(),this.caretOffset=t.readShort(),t.pos+=8,this.metricDataFormat=t.readShort(),this.numberOfMetrics=t.readUInt16()},n})(),e2=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"OS/2\",n.prototype.parse=function(t){if(t.pos=this.offset,this.version=t.readUInt16(),this.averageCharWidth=t.readShort(),this.weightClass=t.readUInt16(),this.widthClass=t.readUInt16(),this.type=t.readShort(),this.ySubscriptXSize=t.readShort(),this.ySubscriptYSize=t.readShort(),this.ySubscriptXOffset=t.readShort(),this.ySubscriptYOffset=t.readShort(),this.ySuperscriptXSize=t.readShort(),this.ySuperscriptYSize=t.readShort(),this.ySuperscriptXOffset=t.readShort(),this.ySuperscriptYOffset=t.readShort(),this.yStrikeoutSize=t.readShort(),this.yStrikeoutPosition=t.readShort(),this.familyClass=t.readShort(),this.panose=(function(){var e,i;for(i=[],e=0;e<10;++e)i.push(t.readByte());return i})(),this.charRange=(function(){var e,i;for(i=[],e=0;e<4;++e)i.push(t.readInt());return i})(),this.vendorID=t.readString(4),this.selection=t.readShort(),this.firstCharIndex=t.readShort(),this.lastCharIndex=t.readShort(),this.version>0&&(this.ascent=t.readShort(),this.descent=t.readShort(),this.lineGap=t.readShort(),this.winAscent=t.readShort(),this.winDescent=t.readShort(),this.codePageRange=(function(){var e,i;for(i=[],e=0;e<2;e=++e)i.push(t.readInt());return i})(),this.version>1))return this.xHeight=t.readShort(),this.capHeight=t.readShort(),this.defaultChar=t.readShort(),this.breakChar=t.readShort(),this.maxContext=t.readShort()},n})(),n2=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"post\",n.prototype.parse=function(t){var e,i,o;switch(t.pos=this.offset,this.format=t.readInt(),this.italicAngle=t.readInt(),this.underlinePosition=t.readShort(),this.underlineThickness=t.readShort(),this.isFixedPitch=t.readInt(),this.minMemType42=t.readInt(),this.maxMemType42=t.readInt(),this.minMemType1=t.readInt(),this.maxMemType1=t.readInt(),this.format){case 65536:case 196608:break;case 131072:var a;for(i=t.readUInt16(),this.glyphNameIndex=[],a=0;0<=i?a<i:a>i;a=0<=i?++a:--a)this.glyphNameIndex.push(t.readUInt16());for(this.names=[],o=[];t.pos<this.offset+this.length;)e=t.readByte(),o.push(this.names.push(t.readString(e)));return o;case 151552:return i=t.readUInt16(),this.offsets=t.read(i);case 262144:return this.map=(function(){var c,l,h;for(h=[],a=c=0,l=this.file.maxp.numGlyphs;0<=l?c<l:c>l;a=0<=l?++c:--c)h.push(t.readUInt32());return h}).call(this)}},n})(),r2=function(n,t){this.raw=n,this.length=n.length,this.platformID=t.platformID,this.encodingID=t.encodingID,this.languageID=t.languageID},i2=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"name\",n.prototype.parse=function(t){var e,i,o,a,c,l,h,d,m,_,k;for(t.pos=this.offset,t.readShort(),e=t.readShort(),l=t.readShort(),i=[],a=0;0<=e?a<e:a>e;a=0<=e?++a:--a)i.push({platformID:t.readShort(),encodingID:t.readShort(),languageID:t.readShort(),nameID:t.readShort(),length:t.readShort(),offset:this.offset+l+t.readShort()});for(h={},a=m=0,_=i.length;m<_;a=++m)o=i[a],t.pos=o.offset,d=t.readString(o.length),c=new r2(d,o),h[k=o.nameID]==null&&(h[k]=[]),h[o.nameID].push(c);this.strings=h,this.copyright=h[0],this.fontFamily=h[1],this.fontSubfamily=h[2],this.uniqueSubfamily=h[3],this.fontName=h[4],this.version=h[5];try{this.postscriptName=h[6][0].raw.replace(/[\\x00-\\x19\\x80-\\xff]/g,\"\")}catch{this.postscriptName=h[4][0].raw.replace(/[\\x00-\\x19\\x80-\\xff]/g,\"\")}return this.trademark=h[7],this.manufacturer=h[8],this.designer=h[9],this.description=h[10],this.vendorUrl=h[11],this.designerUrl=h[12],this.license=h[13],this.licenseUrl=h[14],this.preferredFamily=h[15],this.preferredSubfamily=h[17],this.compatibleFull=h[18],this.sampleText=h[19]},n})(),a2=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"maxp\",n.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.numGlyphs=t.readUInt16(),this.maxPoints=t.readUInt16(),this.maxContours=t.readUInt16(),this.maxCompositePoints=t.readUInt16(),this.maxComponentContours=t.readUInt16(),this.maxZones=t.readUInt16(),this.maxTwilightPoints=t.readUInt16(),this.maxStorage=t.readUInt16(),this.maxFunctionDefs=t.readUInt16(),this.maxInstructionDefs=t.readUInt16(),this.maxStackElements=t.readUInt16(),this.maxSizeOfInstructions=t.readUInt16(),this.maxComponentElements=t.readUInt16(),this.maxComponentDepth=t.readUInt16()},n})(),s2=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"hmtx\",n.prototype.parse=function(t){var e,i,o,a,c,l,h;for(t.pos=this.offset,this.metrics=[],e=0,l=this.file.hhea.numberOfMetrics;0<=l?e<l:e>l;e=0<=l?++e:--e)this.metrics.push({advance:t.readUInt16(),lsb:t.readInt16()});for(o=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=(function(){var d,m;for(m=[],e=d=0;0<=o?d<o:d>o;e=0<=o?++d:--d)m.push(t.readInt16());return m})(),this.widths=(function(){var d,m,_,k;for(k=[],d=0,m=(_=this.metrics).length;d<m;d++)a=_[d],k.push(a.advance);return k}).call(this),i=this.widths[this.widths.length-1],h=[],e=c=0;0<=o?c<o:c>o;e=0<=o?++c:--c)h.push(this.widths.push(i));return h},n.prototype.forGlyph=function(t){return t in this.metrics?this.metrics[t]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[t-this.metrics.length]}},n})(),Tf=[].slice,o2=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"glyf\",n.prototype.parse=function(){return this.cache={}},n.prototype.glyphFor=function(t){var e,i,o,a,c,l,h,d,m,_;return t in this.cache?this.cache[t]:(a=this.file.loca,e=this.file.contents,i=a.indexOf(t),(o=a.lengthOf(t))===0?this.cache[t]=null:(e.pos=this.offset+i,c=(l=new Qr(e.read(o))).readShort(),d=l.readShort(),_=l.readShort(),h=l.readShort(),m=l.readShort(),this.cache[t]=c===-1?new u2(l,d,_,h,m):new l2(l,c,d,_,h,m),this.cache[t]))},n.prototype.encode=function(t,e,i){var o,a,c,l,h;for(c=[],a=[],l=0,h=e.length;l<h;l++)o=t[e[l]],a.push(c.length),o&&(c=c.concat(o.encode(i)));return a.push(c.length),{table:c,offsets:a}},n})(),l2=(function(){function n(t,e,i,o,a,c){this.raw=t,this.numberOfContours=e,this.xMin=i,this.yMin=o,this.xMax=a,this.yMax=c,this.compound=!1}return n.prototype.encode=function(){return this.raw.data},n})(),u2=(function(){function n(t,e,i,o,a){var c,l;for(this.raw=t,this.xMin=e,this.yMin=i,this.xMax=o,this.yMax=a,this.compound=!0,this.glyphIDs=[],this.glyphOffsets=[],c=this.raw;l=c.readShort(),this.glyphOffsets.push(c.pos),this.glyphIDs.push(c.readUInt16()),32&l;)c.pos+=1&l?4:2,128&l?c.pos+=8:64&l?c.pos+=4:8&l&&(c.pos+=2)}return n.prototype.encode=function(){var t,e,i;for(e=new Qr(Tf.call(this.raw.data)),t=0,i=this.glyphIDs.length;t<i;++t)e.pos=this.glyphOffsets[t];return e.data},n})(),f2=(function(){function n(){return n.__super__.constructor.apply(this,arguments)}return gr(n,er),n.prototype.tag=\"loca\",n.prototype.parse=function(t){var e,i;return t.pos=this.offset,e=this.file.head.indexToLocFormat,this.offsets=e===0?(function(){var o,a;for(a=[],i=0,o=this.length;i<o;i+=2)a.push(2*t.readUInt16());return a}).call(this):(function(){var o,a;for(a=[],i=0,o=this.length;i<o;i+=4)a.push(t.readUInt32());return a}).call(this)},n.prototype.indexOf=function(t){return this.offsets[t]},n.prototype.lengthOf=function(t){return this.offsets[t+1]-this.offsets[t]},n.prototype.encode=function(t,e){for(var i=new Uint32Array(this.offsets.length),o=0,a=0,c=0;c<i.length;++c)if(i[c]=o,a<e.length&&e[a]==c){++a,i[c]=o;var l=this.offsets[c],h=this.offsets[c+1]-l;h>0&&(o+=h)}for(var d=new Array(4*i.length),m=0;m<i.length;++m)d[4*m+3]=255&i[m],d[4*m+2]=(65280&i[m])>>8,d[4*m+1]=(16711680&i[m])>>16,d[4*m]=(4278190080&i[m])>>24;return d},n})(),h2=(function(){function n(t){this.font=t,this.subset={},this.unicodes={},this.next=33}return n.prototype.generateCmap=function(){var t,e,i,o,a;for(e in o=this.font.cmap.tables[0].codeMap,t={},a=this.subset)i=a[e],t[e]=o[i];return t},n.prototype.glyphsFor=function(t){var e,i,o,a,c,l,h;for(o={},c=0,l=t.length;c<l;c++)o[a=t[c]]=this.font.glyf.glyphFor(a);for(a in e=[],o)(i=o[a])!=null&&i.compound&&e.push.apply(e,i.glyphIDs);if(e.length>0)for(a in h=this.glyphsFor(e))i=h[a],o[a]=i;return o},n.prototype.encode=function(t,e){var i,o,a,c,l,h,d,m,_,k,p,j,O,M,S;for(o in i=Rf.encode(this.generateCmap(),\"unicode\"),c=this.glyphsFor(t),p={0:0},S=i.charMap)p[(h=S[o]).old]=h.new;for(j in k=i.maxGlyphID,c)j in p||(p[j]=k++);return m=(function(V){var G,q;for(G in q={},V)q[V[G]]=G;return q})(p),_=Object.keys(m).sort(function(V,G){return V-G}),O=(function(){var V,G,q;for(q=[],V=0,G=_.length;V<G;V++)l=_[V],q.push(m[l]);return q})(),a=this.font.glyf.encode(c,O,p),d=this.font.loca.encode(a.offsets,O),M={cmap:this.font.cmap.raw(),glyf:a.table,loca:d,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.encode(e)},this.font.os2.exists&&(M[\"OS/2\"]=this.font.os2.raw()),this.font.directory.encode(M)},n})();Mt.API.PDFObject=(function(){var n;function t(){}return n=function(e,i){return(Array(i+1).join(\"0\")+e).slice(-i)},t.convert=function(e){var i,o,a,c;if(Array.isArray(e))return\"[\"+(function(){var l,h,d;for(d=[],l=0,h=e.length;l<h;l++)i=e[l],d.push(t.convert(i));return d})().join(\" \")+\"]\";if(typeof e==\"string\")return\"/\"+e;if(e?.isString)return\"(\"+e+\")\";if(e instanceof Date)return\"(D:\"+n(e.getUTCFullYear(),4)+n(e.getUTCMonth(),2)+n(e.getUTCDate(),2)+n(e.getUTCHours(),2)+n(e.getUTCMinutes(),2)+n(e.getUTCSeconds(),2)+\"Z)\";if({}.toString.call(e)===\"[object Object]\"){for(o in a=[\"<<\"],e)c=e[o],a.push(\"/\"+o+\" \"+t.convert(c));return a.push(\">>\"),a.join(`\n`)}return\"\"+e},t})();const d2=Object.freeze(Object.defineProperty({__proto__:null,AcroFormAppearance:It,AcroFormButton:nn,AcroFormCheckBox:Oa,AcroFormChoiceField:xi,AcroFormComboBox:Ai,AcroFormEditBox:Fa,AcroFormListBox:_i,AcroFormPasswordField:ja,AcroFormPushButton:Ea,AcroFormRadioButton:Ni,AcroFormTextField:Zr,GState:Ra,ShadingPattern:Xr,TilingPattern:yi,default:Mt,jsPDF:Mt},Symbol.toStringTag,{value:\"Module\"}));export{xe as _,d2 as j};\n"
  },
  {
    "path": "public/build/assets/map-v3-_JE1ac-e.js",
    "content": "const g=document.querySelector(\"#map-body\"),v=document.querySelector(\"#sidebar-map\"),d=document.querySelector(\"#sidebar-marker\");document.querySelector(\"#map-marker-modal\");let y,l,c,r,s,a,f,S,k;const q=window.matchMedia(\"only screen and (max-width: 760px)\"),u=document.querySelector('input[name=\"shape_id\"]'),N=()=>{const e=document.querySelector('a[href=\"#marker-pin\"]');e&&(e.addEventListener(\"click\",function(){u.value=1,document.querySelector(\"#map-marker-bg-colour\").classList.remove(\"hidden\"),w()}),document.querySelector('a[href=\"#marker-label\"]').addEventListener(\"click\",function(){u.value=2,document.querySelector(\"#map-marker-bg-colour\").classList.add(\"hidden\"),w()}),document.querySelector('a[href=\"#marker-circle\"]').addEventListener(\"click\",function(){u.value=3,document.querySelector(\"#map-marker-bg-colour\").classList.remove(\"hidden\"),w()}),document.querySelector('a[href=\"#marker-poly\"]').addEventListener(\"click\",function(){u.value=5,document.querySelector(\"#map-marker-bg-colour\").classList.remove(\"hidden\"),w()}),document.querySelector('a[href=\"#presets\"]')?.addEventListener(\"click\",function(t){let o=t.currentTarget;G(o.dataset.presets)}),document.querySelector('a[href=\"#form-markers\"]')?.addEventListener(\"click\",function(){window.map.invalidateSize()}))},C=()=>{g&&(window.markerDetails=function(e){if(_(),q.matches){e=e+\"?mobile=1\",window.openDialog(\"map-marker-modal\",e);return}fetch(e).then(t=>t.json()).then(t=>{d.innerHTML=t.body,d.classList.remove(\"hidden\"),d.parentNode.querySelector(\".spinner\").classList.add(\"hidden\"),z(),g.classList.add(\"sidebar-open\"),window.triggerEvent()})},U(),E(),O(),$(document).on(\"expanded.pushMenu collapsed.pushMenu\",function(){window.map.invalidateSize()}))},F=()=>{N(),H(),Z();const e=document.querySelector(\"#map-marker-form\"),t=document.querySelector(\".map-marker-edit-form\");!e&&!t||(e.onsubmit=function(){window.entityFormHasUnsavedChanges=!1},E())},H=()=>{const e=document.querySelector('select[name=\"size_id\"]');e&&e.addEventListener(\"change\",function(t){e.value==6?(document.querySelector(\".map-marker-circle-helper\").classList.add(\"hidden\"),document.querySelector(\".map-marker-circle-radius\").classList.remove(\"hidden\")):(document.querySelector(\".map-marker-circle-radius\").classList.add(\"hidden\"),document.querySelector(\".map-marker-circle-helper\").classList.remove(\"hidden\"))})},_=()=>{q.matches||(g.classList.remove(\"sidebar-collapse\"),g.classList.add(\"sidebar-open\"),v.classList.add(\"hidden\"),d.innerHTML=\"\",d.classList.remove(\"hidden\"),d.parentNode.querySelector(\".spinner\").classList.remove(\"hidden\"),x())},z=()=>{document.querySelector(\".marker-close\")?.addEventListener(\"click\",function(){d.classList.add(\"hidden\"),v.classList.remove(\"hidden\")})},U=()=>{const e=document.getElementById(\"ticker-config\");f=e.dataset.timeout,S=e.dataset.url,k=e.dataset.ts,setTimeout(b,f)},b=()=>{fetch(S+\"?ts=\"+k).then(e=>e.json()).then(e=>{k=e.ts;for(let t in e.markers){let o=e.markers[t];window[\"marker\"+o.id]&&window[\"marker\"+o.id].setLatLng({lon:o.longitude,lat:o.latitude})}setTimeout(b,f)})},E=()=>{document.querySelectorAll(\".map-legend-marker\")?.forEach(e=>{e.addEventListener(\"click\",function(t){t.preventDefault(),window.map.panTo(L.latLng(e.dataset.lat,e.dataset.lng)),window[e.dataset.id].openPopup()})}),document.querySelector(\"a.sidebar-toggle\")?.addEventListener(\"click\",function(){x()})},x=()=>{setTimeout(()=>{window.map.invalidateSize()},500)},O=()=>{LControlZoomDisplay.default(L,{position:\"bottomleft\",prefix:\"Zoom : \"}),L.control.zoomDisplay().addTo(window.map)},j=()=>{document.querySelector(\".map-marker-entry-click\")?.addEventListener(\"click\",function(e){e.preventDefault(),e.target.parentNode.classList.add(\"hidden\"),document.querySelector(\".map-marker-entry-entry\").classList.remove(\"hidden\")})},B=()=>{document.querySelector(\".btn-mode-enable\")?.addEventListener(\"click\",function(t){t.preventDefault(),window.exploreEditMode=!0,document.querySelector(\"body\").classList.add(\"map-edit-mode\")}),document.querySelector(\".btn-mode-disable\")?.addEventListener(\"click\",function(t){t.preventDefault(),window.exploreEditMode=!1,document.querySelector(\"body\").classList.remove(\"map-edit-mode\"),window.polygon&&window.map.removeLayer(window.polygon)}),document.querySelector(\".btn-mode-drawing\")?.addEventListener(\"click\",function(t){t.preventDefault(),P()})},P=()=>{window.drawingPolygon=!1,document.querySelector(\"body\").classList.remove(\"map-drawing-mode\"),window.openDialog(\"marker-modal\")},Z=()=>{const e=document.querySelector(\"#start-drawing-polygon\");e&&(e.addEventListener(\"click\",function(t){t.preventDefault(),window.exploreEditMode=!1,window.startNewPolygon(),window.showToast(t.currentTarget.dataset.toast),document.querySelector(\"body\").classList.add(\"map-drawing-mode\"),window.closeDialog(\"marker-modal\")}),y=document.querySelector(\"#reset-polygon\"),y.addEventListener(\"click\",function(t){t.preventDefault(),window.polygon&&window.map.removeLayer(window.polygon),document.querySelector('textarea[name=\"custom_shape\"]').value=\"\",y.classList.add(\"hidden\"),window.startNewPolygon()}),window.map.on(\"editable:editing\",function(t){M()&&(D(),t.layer.setStyle({weight:l,color:c,opacity:r,fillColor:s,fillOpacity:a}))}))};window.startNewPolygon=function(){window.polygon=window.map.editTools.startPolygon();let e=!0;window.polygon.on(\"editable:dragend\",window.markerUpdateHandler),window.polygon.on(\"editable:vertex:new\",window.markerUpdateHandler),window.polygon.on(\"editable:vertex:dragend\",window.markerUpdateHandler),window.polygon.on(\"editable:vertex:dragend\",window.markerUpdateHandler),window.polygon.on(\"editable:drawing:end\",function(t){e=!1}),window.polygon.on(\"click\",function(t){e||P()})};window.setPolygonPosition=function(e){let t=document.querySelector('textarea[name=\"custom_shape\"]');t.value=e};window.markerUpdateHandler=function(e){M()?A(e):I()&&W(e)};const A=e=>{let t=e.target.getLatLngs();if(t.length===0)return;let o=[];t[0].forEach(n=>{o.push(n.lat.toFixed(3)+\",\"+n.lng.toFixed(3))}),window.setPolygonPosition(o.join(\" \"))},W=e=>{let t=e.target._latlng;t&&(document.querySelector(\"#marker-latitude\").value=t.lat.toFixed(3),document.querySelector(\"#marker-longitude\").value=t.lng.toFixed(3))},M=()=>Number(u.value)===5,I=()=>Number(u.value)===2;window.addPolygonPosition=function(e,t){const o=document.querySelector('textarea[name=\"custom_shape\"]');let n=o.value;n.length>0&&(n+=\" \"),o.value=n+e+\",\"+t;let p=o.value.trim(\" \").split(\" \"),i=[];p.forEach(T=>{let h=T.split(\",\");i.push([h[0],h[1]])},i),window.polygon&&window.map.removeLayer(window.polygon),D(),window.polygon=L.polygon(i,{weight:l,color:c,opacity:r,fillColor:s,fillOpacity:a,linecap:\"round\",linejoin:\"round\"}),window.polygon.addTo(window.map),y.classList.remove(\"hidden\")};const D=()=>{c=document.querySelector('input[name=\"polygon_style[stroke]\"]')?.value,(!c||c.length<7)&&(c=\"red\"),r=document.querySelector('input[name=\"polygon_style[stroke-opacity]\"]').value,isNaN(r)||!r?r=1:r=r/100,s=document.querySelector('input[name=\"colour\"]').value,(!s||s.length<7)&&(s=\"red\"),a=document.querySelector('input[name=\"opacity\"]').value,isNaN(a)?a=.5:a=a/100,l=document.querySelector('input[name=\"polygon_style[stroke-width]\"]').value,(isNaN(l)||!l)&&(l=1)},w=()=>{document.querySelector(\"#marker-main-fields\")?.classList.remove(\"hidden\"),document.querySelector(\"#marker-footer\")?.classList.remove(\"hidden\")},G=e=>{if(!e){console.log(\"aaa\");return}document.querySelector(\"#marker-main-fields\")?.classList.add(\"hidden\"),document.querySelector(\"#marker-footer\")?.classList.add(\"hidden\");const t=document.querySelector(\".marker-preset-list\");t.dataset.loaded!==\"1\"&&(t.dataset.loaded=\"1\",fetch(e).then(o=>o.text()).then(o=>{t.innerHTML=o,J()}))},J=()=>{document.querySelectorAll(\".preset-use\")?.forEach(e=>{e.addEventListener(\"click\",function(t){t.preventDefault();let o=e.dataset.url;e.classList.add(\"loading\"),axios.get(o).then(n=>{e.classList.remove(\"loading\"),Object.keys(n.data.preset).forEach(m=>{let p=n.data.preset[m],i=document.querySelector('[name=\"'+m+'\"]');i&&(m.endsWith(\"colour\")?(i.value=p,document.querySelector('[name=\"'+m+'\"]').dispatchEvent(new Event(\"input\"))):i.value=p)}),document.querySelector('a[href=\"#marker-pin\"]').click()})})})};function K(e){if(!window.exploreEditMode)return;let t=e.latlng,o=t.lat.toFixed(3),n=t.lng.toFixed(3);if(window.drawingPolygon){window.addPolygonPosition(o,n);return}document.querySelector(\"#marker-latitude\").value=o,document.querySelector(\"#marker-longitude\").value=n,window.openDialog(\"marker-modal\")}window.handleExploreMapClick=K;window.map.invalidateSize();window.map.on(\"popupopen\",function(e){window.initDialogs()});C();F();j();B();\n"
  },
  {
    "path": "public/build/assets/maps-7UR0tBUB.css",
    "content": ".leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:-webkit-transform .3s ease-out,opacity .3s ease-in;-moz-transition:-moz-transform .3s ease-out,opacity .3s ease-in;-o-transition:-o-transform .3s ease-out,opacity .3s ease-in;transition:transform .3s ease-out,opacity .3s ease-in}.leaflet-cluster-spider-leg{-webkit-transition:-webkit-stroke-dashoffset .3s ease-out,-webkit-stroke-opacity .3s ease-in;-moz-transition:-moz-stroke-dashoffset .3s ease-out,-moz-stroke-opacity .3s ease-in;-o-transition:-o-stroke-dashoffset .3s ease-out,-o-stroke-opacity .3s ease-in;transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.marker-cluster-small{background-color:#b5e28c99}.marker-cluster-small div{background-color:#6ecc3999}.marker-cluster-medium{background-color:#f1d35799}.marker-cluster-medium div{background-color:#f0c20c99}.marker-cluster-large{background-color:#fd9c7399}.marker-cluster-large div{background-color:#f1801799}.leaflet-oldie .marker-cluster-small{background-color:#b5e28c}.leaflet-oldie .marker-cluster-small div{background-color:#6ecc39}.leaflet-oldie .marker-cluster-medium{background-color:#f1d357}.leaflet-oldie .marker-cluster-medium div{background-color:#f0c20c}.leaflet-oldie .marker-cluster-large{background-color:#fd9c73}.leaflet-oldie .marker-cluster-large div{background-color:#f18017}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px Helvetica Neue,Arial,Helvetica,sans-serif}.marker-cluster span{line-height:30px}.leaflet-control-zoom-display{background-color:#ffffffb3;border-bottom:1px solid #333;display:block;text-align:center;text-decoration:none;color:#000;padding:.15rem .35rem}:root{--map-hero-ratio: 2/1;--map-ruler-color: #de0000}.map{width:100%;min-height:50vh}.map-explore{min-height:calc(100vh - 50px)!important}.map-dashboard{min-height:30vh}.map-preview{min-height:100vh}.marker{color:#fff;background-color:unset;text-align:center}.marker-pin{width:40px;height:40px;border-radius:50% 50% 50% 0;position:absolute;transform:rotate(-45deg);left:50%;top:50%;margin:-20px 0 0 -20px;box-shadow:0 6px 6px #32325d4f,0 1px 3px #00000014}.marker-pin:after{content:\"\";width:36px;height:36px;margin:2px 0 0 -18px;position:absolute;border-radius:50%;background-position:50% 50%;background-size:cover;background-repeat:no-repeat;transform:rotate(45deg)}.btn-map-explore{color:hsl(var(--pc)/1)!important}.marker.size-1{font-size:.5em}.marker.size-2{font-size:1em}.marker.size-3{font-size:2em}.marker.size-4{font-size:3em}.marker.size-5{font-size:4em}.marker i{font-size:1.25rem;margin:0;position:absolute!important;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.toast-container{bottom:60px;z-index:910}.map-actions{z-index:500}.map-actions .btn-mode-enable{display:inline-block}.map-actions .btn-mode-disable,.map-actions .btn-mode-drawing{display:none}#map-body #sidebar-content{padding:0;overflow:auto;max-height:100vh;white-space:unset}#map-body #sidebar-content a{color:hsl(var(--pc)/1)}#map-body .search-drawer,#map-body nav{z-index:1050}#map-body .main-sidebar{padding-top:0;z-index:1040;--sidebar-link: hsl(var(--bc)/1)}#map-body header{z-index:1050}#map-body .marker-header.with-image{aspect-ratio:var(--map-hero-ratio);--tw-bg-opacity: 1;background:linear-gradient(180deg,rgba(51,51,51,0) 0%,var(--sidebar-background, hsl(var(--si)/var(--tw-bg-opacity))) 100%)}#map-body .marker-header.with-image .marker-header-fade{--tw-bg-opacity: 1;background:linear-gradient(180deg,rgba(51,51,51,0) 0%,var(--sidebar-background, hsl(var(--si)/var(--tw-bg-opacity))) 100%)}body.map-edit-mode .map-actions .btn-mode-enable{display:none}body.map-edit-mode .map-actions .btn-mode-disable{display:inline-block}body.map-drawing-mode .map-actions .btn-mode-enable,body.map-drawing-mode .map-actions .btn-mode-disable{display:none}body.map-drawing-mode .map-actions .btn-mode-drawing{display:inline-block}.marker-close{font-size:2rem;margin:.325rem}.marker-close:hover{cursor:pointer}.leaflet-top,.leaflet-bottom{z-index:800}.leaflet-popup img,#sidebar-marker img{max-width:100%;height:auto}@media(min-width:768px){#map-body{--sidebar-width: 24rem}}.leaflet-popup-content-wrapper,.leaflet-popup-tip,.leaflet-control-layers-expanded,.leaflet-control-layers,.leaflet-bar a{background-color:var(--leaflet-popup-background, hsl(var(--b1)/1))!important;color:var(--leaflet-popup-text, hsl(var(--bc)/1))!important}.leaflet-bar a:hover,.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:var(--leaflet-popup-background, hsl(var(--b1)/1))}.leaflet-container{background:transparent!important}.leaflet-ruler{height:48px;width:48px;background-image:url(/build/assets/icon-9ynO2yMO.png);background-repeat:no-repeat;background-position:center}.leaflet-ruler:hover{background-image:url(/build/assets/icon-colored-DWUwbOkd.png)}.leaflet-ruler-clicked{height:48px;width:48px;background-repeat:no-repeat;background-position:center;background-image:url(/build/assets/icon-colored-DWUwbOkd.png)}.leaflet-bar{--tw-bg-opacity: 1;background-color:hsl(var(--b1)/var(--tw-bg-opacity))}.result-tooltip{background-color:#fff;border-width:medium;border-color:var(--map-ruler-color);font-size:smaller}.moving-tooltip{background-color:#ffffffb3;background-clip:padding-box;opacity:.5;border:dotted;border-color:var(--map-ruler-color);font-size:smaller}.plus-length{padding-left:45px}.leaflet-control-layers-overlays .leaflet-layerstree-node:not(:has(.leaflet-layerstree-header-pointer)) .leaflet-control-layers-selector{display:none}.leaflet-control-layers-overlays .leaflet-layerstree-node:not(:has(.leaflet-layerstree-header-pointer)) .leaflet-layerstree-header-name{font-weight:700}.leaflet-layerstree-header{display:flex;gap:.5rem}.leaflet-layerstree-header-label{display:flex!important;gap:.25rem;align-items:center}.leaflet-layerstree-header-label:hover{font-weight:700}\n"
  },
  {
    "path": "public/build/assets/midnight-DjmKO7Sj.css",
    "content": "@layer theme{html{color-scheme:dark;accent-color:hsl(var(--a)/1)}:root{--content-wrapper-background: hsl(var(--b3)/1);--tinymce-filter: invert(90%) !important;--pf: 198 93% 53%;--sf: 234 89% 67%;--af: 175 70% 34%;--b1: 212 46% 7%;--b2: 222 47% 7%;--b3: 228 45% 5%;--bc: 229 7% 80%;--pc: 202 34% 14%;--sc: 239 22% 15%;--a: 175 70% 41%;--ac: 0 0% 100%;--nc: 221 7% 82%;--inc: 208 79% 92%;--suc: 169 31% 13%;--wac: 39 36% 14%;--p: 198 93% 60%;--s: 234 89% 74%;--n: 217 33% 17%;--nf: 217 30% 22%;--in: 198 90% 28%;--su: 172 66% 50%;--wa: 41 88% 64%;--si: var(--b2);--sif: var(--pf)}}\n"
  },
  {
    "path": "public/build/assets/preload-helper-I4rgV-VL.js",
    "content": "const p=\"modulepreload\",v=function(l){return\"/build/\"+l},u={},y=function(d,c,E){let i=Promise.resolve();if(c&&c.length>0){let f=function(e){return Promise.all(e.map(o=>Promise.resolve(o).then(s=>({status:\"fulfilled\",value:s}),s=>({status:\"rejected\",reason:s}))))};document.getElementsByTagName(\"link\");const r=document.querySelector(\"meta[property=csp-nonce]\"),t=r?.nonce||r?.getAttribute(\"nonce\");i=f(c.map(e=>{if(e=v(e),e in u)return;u[e]=!0;const o=e.endsWith(\".css\"),s=o?'[rel=\"stylesheet\"]':\"\";if(document.querySelector(`link[href=\"${e}\"]${s}`))return;const n=document.createElement(\"link\");if(n.rel=o?\"stylesheet\":p,o||(n.as=\"script\"),n.crossOrigin=\"\",n.href=e,t&&n.setAttribute(\"nonce\",t),document.head.appendChild(n),o)return new Promise((m,h)=>{n.addEventListener(\"load\",m),n.addEventListener(\"error\",()=>h(new Error(`Unable to preload CSS for ${e}`)))})}))}function a(r){const t=new Event(\"vite:preloadError\",{cancelable:!0});if(t.payload=r,window.dispatchEvent(t),!t.defaultPrevented)throw r}return i.then(r=>{for(const t of r||[])t.status===\"rejected\"&&a(t.reason);return d().catch(a)})};export{y as _};\n"
  },
  {
    "path": "public/build/assets/print-B43HD77n.css",
    "content": ":root{--header-text: inherit}.entity-image.hidden-xs{display:none!important}.entity-print-image{width:100%}.entity-header{background-image:none!important}.entity-header .entity-header-text .entity-header-line:nth-last-child(2){display:block}.entity-content .p-4,.entity-content{padding-left:0;padding-right:0}@media print{.print-none,.entity-empty-pin{display:none}body{-webkit-print-color-adjust:exact}.main-footer,.btn,.btn2{display:none!important}a[href]:after{content:none!important}.entity-image{-webkit-print-color-adjust:exact}.collapse{display:block}.box-solid.character-appearances,.box-solid.character-personalities,.dropdown{display:none}tr,img{page-break-inside:avoid}img{max-width:100%!important}.col-sm-4{width:33.333333%}.col-md-3{width:25%}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}}body,#app.wrapper,.wrapper,.content-wrapper,.box{background:unset;background-image:unset;background-color:unset;box-shadow:unset}.shadow-xs,.shadow-sm{box-shadow:unset}.content-wrapper{margin-left:0;background-color:#fff}.content-wrapper .content-header,.content-wrapper .content{padding-top:0}.entity-grid{grid-template-columns:16% minmax(auto,68%) 16%}.entity-grid .entity-submenu{display:none}.entity-grid .entity-print-image{display:unset}.entity-grid .entity-image{display:none}.entity-grid .entity-story-block{grid-column:1 / span 2;width:100%;padding-left:0}.entity-grid .entity-sidebar-pins,.entity-grid .entity-sidebar-pins .fa-question-circle,.entity-grid .btn,.entity-grid .btn2,.entity-grid .entity-modification-history,.entity-grid .entity-mentions-box{display:none}.entity-grid .entity-header .entity-header-image{padding-left:0}.entity-grid .entity-header .dropdown{display:none}.entity-grid .entity-header .entity-grid .entity-header .entity-header-image+.entity-header-text{padding-left:0}.entity-grid .entity-header .entity-image-col .entity-image,.entity-grid .entity-header .fa-cog,.entity-grid .entity-header .entity-breadcrumb,.fa-solid.fa-chevron-up,.fa-solid.fa-chevron-down,.fa-solid.fa-question-circle,.btn-primary,.btn-xs,.btn-secondary,.btn-warning,.fa-solid.fa-edit{display:none}.btn-print{z-index:9999;display:unset}.pagebreak{page-break-before:always}\n"
  },
  {
    "path": "public/build/assets/profile-D4XIj8wj.js",
    "content": "const t=document.getElementById(\"newsletter-api\"),i=()=>{if(!t)return;document.querySelectorAll('input[name=\"mail_release\"]').forEach(n=>{n.addEventListener(\"change\",function(l){let a=this.name,e={};e[a]=this.checked?1:0,axios.post(t.value,e).then(s=>{window.showToast(s.data.message)})})})};i();\n"
  },
  {
    "path": "public/build/assets/purify.es-21m173o_.js",
    "content": "const{entries:gt,setPrototypeOf:ft,isFrozen:Yt,getPrototypeOf:Xt,getOwnPropertyDescriptor:jt}=Object;let{freeze:S,seal:b,create:ne}=Object,{apply:Ue,construct:Fe}=typeof Reflect<\"u\"&&Reflect;S||(S=function(o){return o});b||(b=function(o){return o});Ue||(Ue=function(o,l){for(var a=arguments.length,c=new Array(a>2?a-2:0),O=2;O<a;O++)c[O-2]=arguments[O];return o.apply(l,c)});Fe||(Fe=function(o){for(var l=arguments.length,a=new Array(l>1?l-1:0),c=1;c<l;c++)a[c-1]=arguments[c];return new o(...a)});const Z=R(Array.prototype.forEach),Vt=R(Array.prototype.lastIndexOf),ut=R(Array.prototype.pop),J=R(Array.prototype.push),$t=R(Array.prototype.splice),Ee=R(String.prototype.toLowerCase),Me=R(String.prototype.toString),we=R(String.prototype.match),B=R(String.prototype.replace),qt=R(String.prototype.indexOf),Kt=R(String.prototype.trim),C=R(Object.prototype.hasOwnProperty),A=R(RegExp.prototype.test),Q=Zt(TypeError);function R(s){return function(o){o instanceof RegExp&&(o.lastIndex=0);for(var l=arguments.length,a=new Array(l>1?l-1:0),c=1;c<l;c++)a[c-1]=arguments[c];return Ue(s,o,a)}}function Zt(s){return function(){for(var o=arguments.length,l=new Array(o),a=0;a<o;a++)l[a]=arguments[a];return Fe(s,l)}}function r(s,o){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ee;ft&&ft(s,null);let a=o.length;for(;a--;){let c=o[a];if(typeof c==\"string\"){const O=l(c);O!==c&&(Yt(o)||(o[a]=O),c=O)}s[c]=!0}return s}function Jt(s){for(let o=0;o<s.length;o++)C(s,o)||(s[o]=null);return s}function M(s){const o=ne(null);for(const[l,a]of gt(s))C(s,l)&&(Array.isArray(a)?o[l]=Jt(a):a&&typeof a==\"object\"&&a.constructor===Object?o[l]=M(a):o[l]=a);return o}function ee(s,o){for(;s!==null;){const a=jt(s,o);if(a){if(a.get)return R(a.get);if(typeof a.value==\"function\")return R(a.value)}s=Xt(s)}function l(){return null}return l}const mt=S([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"search\",\"section\",\"select\",\"shadow\",\"slot\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),xe=S([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"enterkeyhint\",\"exportparts\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"inputmode\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"part\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),Pe=S([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feDropShadow\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),Qt=S([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),ke=S([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\",\"mprescripts\"]),en=S([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),pt=S([\"#text\"]),Tt=S([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"exportparts\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inert\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"nonce\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"part\",\"pattern\",\"placeholder\",\"playsinline\",\"popover\",\"popovertarget\",\"popovertargetaction\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"slot\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"wrap\",\"xmlns\",\"slot\"]),ve=S([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"amplitude\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"exponent\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"intercept\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"mask-type\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"slope\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"tablevalues\",\"targetx\",\"targety\",\"transform\",\"transform-origin\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),dt=S([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnalign\",\"columnlines\",\"columnspacing\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lquote\",\"lspace\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),de=S([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),tn=b(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm),nn=b(/<%[\\w\\W]*|[\\w\\W]*%>/gm),on=b(/\\$\\{[\\w\\W]*/gm),an=b(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/),rn=b(/^aria-[\\-\\w]+$/),ht=b(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),sn=b(/^(?:\\w+script|data):/i),ln=b(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),At=b(/^html$/i),cn=b(/^[a-z][.\\w]*(-[.\\w]+)+$/i);var Et=Object.freeze({__proto__:null,ARIA_ATTR:rn,ATTR_WHITESPACE:ln,CUSTOM_ELEMENT:cn,DATA_ATTR:an,DOCTYPE_NAME:At,ERB_EXPR:nn,IS_ALLOWED_URI:ht,IS_SCRIPT_OR_DATA:sn,MUSTACHE_EXPR:tn,TMPLIT_EXPR:on});const te={element:1,text:3,progressingInstruction:7,comment:8,document:9},fn=function(){return typeof window>\"u\"?null:window},un=function(o,l){if(typeof o!=\"object\"||typeof o.createPolicy!=\"function\")return null;let a=null;const c=\"data-tt-policy-suffix\";l&&l.hasAttribute(c)&&(a=l.getAttribute(c));const O=\"dompurify\"+(a?\"#\"+a:\"\");try{return o.createPolicy(O,{createHTML(F){return F},createScriptURL(F){return F}})}catch{return console.warn(\"TrustedTypes policy \"+O+\" could not be created.\"),null}},_t=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function St(){let s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:fn();const o=i=>St(i);if(o.version=\"3.4.0\",o.removed=[],!s||!s.document||s.document.nodeType!==te.document||!s.Element)return o.isSupported=!1,o;let{document:l}=s;const a=l,c=a.currentScript,{DocumentFragment:O,HTMLTemplateElement:F,Node:_e,Element:He,NodeFilter:Y,NamedNodeMap:Rt=s.NamedNodeMap||s.MozNamedAttrMap,HTMLFormElement:Ot,DOMParser:Dt,trustedTypes:oe}=s,X=He.prototype,Lt=ee(X,\"cloneNode\"),bt=ee(X,\"remove\"),yt=ee(X,\"nextSibling\"),Ct=ee(X,\"childNodes\"),ie=ee(X,\"parentNode\");if(typeof F==\"function\"){const i=l.createElement(\"template\");i.content&&i.content.ownerDocument&&(l=i.content.ownerDocument)}let g,j=\"\";const{implementation:ge,createNodeIterator:It,createDocumentFragment:Nt,getElementsByTagName:Mt}=l,{importNode:wt}=a;let h=_t();o.isSupported=typeof gt==\"function\"&&typeof ie==\"function\"&&ge&&ge.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:ae,ERB_EXPR:re,TMPLIT_EXPR:se,DATA_ATTR:xt,ARIA_ATTR:Pt,IS_SCRIPT_OR_DATA:kt,ATTR_WHITESPACE:ze,CUSTOM_ELEMENT:vt}=Et;let{IS_ALLOWED_URI:Ge}=Et,T=null;const We=r({},[...mt,...xe,...Pe,...ke,...pt]);let d=null;const Be=r({},[...Tt,...ve,...dt,...de]);let u=Object.seal(ne(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),V=null,le=null;const x=Object.seal(ne(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Ye=!0,he=!0,Xe=!1,je=!0,k=!1,$=!0,v=!1,Ae=!1,Se=!1,H=!1,ce=!1,fe=!1,Ve=!0,$e=!1;const Ut=\"user-content-\";let Re=!0,q=!1,z={},I=null;const Oe=r({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]);let qe=null;const Ke=r({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]);let De=null;const Ze=r({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"role\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),ue=\"http://www.w3.org/1998/Math/MathML\",me=\"http://www.w3.org/2000/svg\",N=\"http://www.w3.org/1999/xhtml\";let G=N,Le=!1,be=null;const Ft=r({},[ue,me,N],Me);let pe=r({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),Te=r({},[\"annotation-xml\"]);const Ht=r({},[\"title\",\"style\",\"font\",\"a\",\"script\"]);let K=null;const zt=[\"application/xhtml+xml\",\"text/html\"],Gt=\"text/html\";let p=null,W=null;const Wt=l.createElement(\"form\"),Je=function(e){return e instanceof RegExp||e instanceof Function},ye=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(W&&W===e)){if((!e||typeof e!=\"object\")&&(e={}),e=M(e),K=zt.indexOf(e.PARSER_MEDIA_TYPE)===-1?Gt:e.PARSER_MEDIA_TYPE,p=K===\"application/xhtml+xml\"?Me:Ee,T=C(e,\"ALLOWED_TAGS\")?r({},e.ALLOWED_TAGS,p):We,d=C(e,\"ALLOWED_ATTR\")?r({},e.ALLOWED_ATTR,p):Be,be=C(e,\"ALLOWED_NAMESPACES\")?r({},e.ALLOWED_NAMESPACES,Me):Ft,De=C(e,\"ADD_URI_SAFE_ATTR\")?r(M(Ze),e.ADD_URI_SAFE_ATTR,p):Ze,qe=C(e,\"ADD_DATA_URI_TAGS\")?r(M(Ke),e.ADD_DATA_URI_TAGS,p):Ke,I=C(e,\"FORBID_CONTENTS\")?r({},e.FORBID_CONTENTS,p):Oe,V=C(e,\"FORBID_TAGS\")?r({},e.FORBID_TAGS,p):M({}),le=C(e,\"FORBID_ATTR\")?r({},e.FORBID_ATTR,p):M({}),z=C(e,\"USE_PROFILES\")?e.USE_PROFILES:!1,Ye=e.ALLOW_ARIA_ATTR!==!1,he=e.ALLOW_DATA_ATTR!==!1,Xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,je=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,k=e.SAFE_FOR_TEMPLATES||!1,$=e.SAFE_FOR_XML!==!1,v=e.WHOLE_DOCUMENT||!1,H=e.RETURN_DOM||!1,ce=e.RETURN_DOM_FRAGMENT||!1,fe=e.RETURN_TRUSTED_TYPE||!1,Se=e.FORCE_BODY||!1,Ve=e.SANITIZE_DOM!==!1,$e=e.SANITIZE_NAMED_PROPS||!1,Re=e.KEEP_CONTENT!==!1,q=e.IN_PLACE||!1,Ge=e.ALLOWED_URI_REGEXP||ht,G=e.NAMESPACE||N,pe=e.MATHML_TEXT_INTEGRATION_POINTS||pe,Te=e.HTML_INTEGRATION_POINTS||Te,u=e.CUSTOM_ELEMENT_HANDLING||ne(null),e.CUSTOM_ELEMENT_HANDLING&&Je(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(u.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&Je(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(u.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements==\"boolean\"&&(u.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),k&&(he=!1),ce&&(H=!0),z&&(T=r({},pt),d=ne(null),z.html===!0&&(r(T,mt),r(d,Tt)),z.svg===!0&&(r(T,xe),r(d,ve),r(d,de)),z.svgFilters===!0&&(r(T,Pe),r(d,ve),r(d,de)),z.mathMl===!0&&(r(T,ke),r(d,dt),r(d,de))),x.tagCheck=null,x.attributeCheck=null,e.ADD_TAGS&&(typeof e.ADD_TAGS==\"function\"?x.tagCheck=e.ADD_TAGS:(T===We&&(T=M(T)),r(T,e.ADD_TAGS,p))),e.ADD_ATTR&&(typeof e.ADD_ATTR==\"function\"?x.attributeCheck=e.ADD_ATTR:(d===Be&&(d=M(d)),r(d,e.ADD_ATTR,p))),e.ADD_URI_SAFE_ATTR&&r(De,e.ADD_URI_SAFE_ATTR,p),e.FORBID_CONTENTS&&(I===Oe&&(I=M(I)),r(I,e.FORBID_CONTENTS,p)),e.ADD_FORBID_CONTENTS&&(I===Oe&&(I=M(I)),r(I,e.ADD_FORBID_CONTENTS,p)),Re&&(T[\"#text\"]=!0),v&&r(T,[\"html\",\"head\",\"body\"]),T.table&&(r(T,[\"tbody\"]),delete V.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=\"function\")throw Q('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=\"function\")throw Q('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');g=e.TRUSTED_TYPES_POLICY,j=g.createHTML(\"\")}else g===void 0&&(g=un(oe,c)),g!==null&&typeof j==\"string\"&&(j=g.createHTML(\"\"));S&&S(e),W=e}},Qe=r({},[...xe,...Pe,...Qt]),et=r({},[...ke,...en]),Bt=function(e){let t=ie(e);(!t||!t.tagName)&&(t={namespaceURI:G,tagName:\"template\"});const n=Ee(e.tagName),f=Ee(t.tagName);return be[e.namespaceURI]?e.namespaceURI===me?t.namespaceURI===N?n===\"svg\":t.namespaceURI===ue?n===\"svg\"&&(f===\"annotation-xml\"||pe[f]):!!Qe[n]:e.namespaceURI===ue?t.namespaceURI===N?n===\"math\":t.namespaceURI===me?n===\"math\"&&Te[f]:!!et[n]:e.namespaceURI===N?t.namespaceURI===me&&!Te[f]||t.namespaceURI===ue&&!pe[f]?!1:!et[n]&&(Ht[n]||!Qe[n]):!!(K===\"application/xhtml+xml\"&&be[e.namespaceURI]):!1},y=function(e){J(o.removed,{element:e});try{ie(e).removeChild(e)}catch{bt(e)}},U=function(e,t){try{J(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch{J(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),e===\"is\")if(H||ce)try{y(t)}catch{}else try{t.setAttribute(e,\"\")}catch{}},tt=function(e){let t=null,n=null;if(Se)e=\"<remove></remove>\"+e;else{const m=we(e,/^[\\r\\n\\t ]+/);n=m&&m[0]}K===\"application/xhtml+xml\"&&G===N&&(e='<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>'+e+\"</body></html>\");const f=g?g.createHTML(e):e;if(G===N)try{t=new Dt().parseFromString(f,K)}catch{}if(!t||!t.documentElement){t=ge.createDocument(G,\"template\",null);try{t.documentElement.innerHTML=Le?j:f}catch{}}const _=t.body||t.documentElement;return e&&n&&_.insertBefore(l.createTextNode(n),_.childNodes[0]||null),G===N?Mt.call(t,v?\"html\":\"body\")[0]:v?t.documentElement:_},nt=function(e){return It.call(e.ownerDocument||e,e,Y.SHOW_ELEMENT|Y.SHOW_COMMENT|Y.SHOW_TEXT|Y.SHOW_PROCESSING_INSTRUCTION|Y.SHOW_CDATA_SECTION,null)},Ce=function(e){return e instanceof Ot&&(typeof e.nodeName!=\"string\"||typeof e.textContent!=\"string\"||typeof e.removeChild!=\"function\"||!(e.attributes instanceof Rt)||typeof e.removeAttribute!=\"function\"||typeof e.setAttribute!=\"function\"||typeof e.namespaceURI!=\"string\"||typeof e.insertBefore!=\"function\"||typeof e.hasChildNodes!=\"function\")},Ie=function(e){return typeof _e==\"function\"&&e instanceof _e};function w(i,e,t){Z(i,n=>{n.call(o,e,t,W)})}const ot=function(e){let t=null;if(w(h.beforeSanitizeElements,e,null),Ce(e))return y(e),!0;const n=p(e.nodeName);if(w(h.uponSanitizeElement,e,{tagName:n,allowedTags:T}),$&&e.hasChildNodes()&&!Ie(e.firstElementChild)&&A(/<[/\\w!]/g,e.innerHTML)&&A(/<[/\\w!]/g,e.textContent)||$&&e.namespaceURI===N&&n===\"style\"&&Ie(e.firstElementChild)||e.nodeType===te.progressingInstruction||$&&e.nodeType===te.comment&&A(/<[/\\w]/g,e.data))return y(e),!0;if(V[n]||!(x.tagCheck instanceof Function&&x.tagCheck(n))&&!T[n]){if(!V[n]&&at(n)&&(u.tagNameCheck instanceof RegExp&&A(u.tagNameCheck,n)||u.tagNameCheck instanceof Function&&u.tagNameCheck(n)))return!1;if(Re&&!I[n]){const f=ie(e)||e.parentNode,_=Ct(e)||e.childNodes;if(_&&f){const m=_.length;for(let D=m-1;D>=0;--D){const L=Lt(_[D],!0);L.__removalCount=(e.__removalCount||0)+1,f.insertBefore(L,yt(e))}}}return y(e),!0}return e instanceof He&&!Bt(e)||(n===\"noscript\"||n===\"noembed\"||n===\"noframes\")&&A(/<\\/no(script|embed|frames)/i,e.innerHTML)?(y(e),!0):(k&&e.nodeType===te.text&&(t=e.textContent,Z([ae,re,se],f=>{t=B(t,f,\" \")}),e.textContent!==t&&(J(o.removed,{element:e.cloneNode()}),e.textContent=t)),w(h.afterSanitizeElements,e,null),!1)},it=function(e,t,n){if(le[t]||Ve&&(t===\"id\"||t===\"name\")&&(n in l||n in Wt))return!1;if(!(he&&!le[t]&&A(xt,t))){if(!(Ye&&A(Pt,t))){if(!(x.attributeCheck instanceof Function&&x.attributeCheck(t,e))){if(!d[t]||le[t]){if(!(at(e)&&(u.tagNameCheck instanceof RegExp&&A(u.tagNameCheck,e)||u.tagNameCheck instanceof Function&&u.tagNameCheck(e))&&(u.attributeNameCheck instanceof RegExp&&A(u.attributeNameCheck,t)||u.attributeNameCheck instanceof Function&&u.attributeNameCheck(t,e))||t===\"is\"&&u.allowCustomizedBuiltInElements&&(u.tagNameCheck instanceof RegExp&&A(u.tagNameCheck,n)||u.tagNameCheck instanceof Function&&u.tagNameCheck(n))))return!1}else if(!De[t]){if(!A(Ge,B(n,ze,\"\"))){if(!((t===\"src\"||t===\"xlink:href\"||t===\"href\")&&e!==\"script\"&&qt(n,\"data:\")===0&&qe[e])){if(!(Xe&&!A(kt,B(n,ze,\"\")))){if(n)return!1}}}}}}}return!0},at=function(e){return e!==\"annotation-xml\"&&we(e,vt)},rt=function(e){w(h.beforeSanitizeAttributes,e,null);const{attributes:t}=e;if(!t||Ce(e))return;const n={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:d,forceKeepAttr:void 0};let f=t.length;for(;f--;){const _=t[f],{name:m,namespaceURI:D,value:L}=_,P=p(m),Ne=L;let E=m===\"value\"?Ne:Kt(Ne);if(n.attrName=P,n.attrValue=E,n.keepAttr=!0,n.forceKeepAttr=void 0,w(h.uponSanitizeAttribute,e,n),E=n.attrValue,$e&&(P===\"id\"||P===\"name\")&&(U(m,e),E=Ut+E),$&&A(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,E)){U(m,e);continue}if(P===\"attributename\"&&we(E,\"href\")){U(m,e);continue}if(n.forceKeepAttr)continue;if(!n.keepAttr){U(m,e);continue}if(!je&&A(/\\/>/i,E)){U(m,e);continue}k&&Z([ae,re,se],ct=>{E=B(E,ct,\" \")});const lt=p(e.nodeName);if(!it(lt,P,E)){U(m,e);continue}if(g&&typeof oe==\"object\"&&typeof oe.getAttributeType==\"function\"&&!D)switch(oe.getAttributeType(lt,P)){case\"TrustedHTML\":{E=g.createHTML(E);break}case\"TrustedScriptURL\":{E=g.createScriptURL(E);break}}if(E!==Ne)try{D?e.setAttributeNS(D,m,E):e.setAttribute(m,E),Ce(e)?y(e):ut(o.removed)}catch{U(m,e)}}w(h.afterSanitizeAttributes,e,null)},st=function(e){let t=null;const n=nt(e);for(w(h.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)w(h.uponSanitizeShadowNode,t,null),ot(t),rt(t),t.content instanceof O&&st(t.content);w(h.afterSanitizeShadowDOM,e,null)};return o.sanitize=function(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=null,n=null,f=null,_=null;if(Le=!i,Le&&(i=\"<!-->\"),typeof i!=\"string\"&&!Ie(i))if(typeof i.toString==\"function\"){if(i=i.toString(),typeof i!=\"string\")throw Q(\"dirty is not a string, aborting\")}else throw Q(\"toString is not a function\");if(!o.isSupported)return i;if(Ae||ye(e),o.removed=[],typeof i==\"string\"&&(q=!1),q){if(i.nodeName){const L=p(i.nodeName);if(!T[L]||V[L])throw Q(\"root node is forbidden and cannot be sanitized in-place\")}}else if(i instanceof _e)t=tt(\"<!---->\"),n=t.ownerDocument.importNode(i,!0),n.nodeType===te.element&&n.nodeName===\"BODY\"||n.nodeName===\"HTML\"?t=n:t.appendChild(n);else{if(!H&&!k&&!v&&i.indexOf(\"<\")===-1)return g&&fe?g.createHTML(i):i;if(t=tt(i),!t)return H?null:fe?j:\"\"}t&&Se&&y(t.firstChild);const m=nt(q?i:t);for(;f=m.nextNode();)ot(f),rt(f),f.content instanceof O&&st(f.content);if(q)return i;if(H){if(k){t.normalize();let L=t.innerHTML;Z([ae,re,se],P=>{L=B(L,P,\" \")}),t.innerHTML=L}if(ce)for(_=Nt.call(t.ownerDocument);t.firstChild;)_.appendChild(t.firstChild);else _=t;return(d.shadowroot||d.shadowrootmode)&&(_=wt.call(a,_,!0)),_}let D=v?t.outerHTML:t.innerHTML;return v&&T[\"!doctype\"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&A(At,t.ownerDocument.doctype.name)&&(D=\"<!DOCTYPE \"+t.ownerDocument.doctype.name+`>\n`+D),k&&Z([ae,re,se],L=>{D=B(D,L,\" \")}),g&&fe?g.createHTML(D):D},o.setConfig=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ye(i),Ae=!0},o.clearConfig=function(){W=null,Ae=!1},o.isValidAttribute=function(i,e,t){W||ye({});const n=p(i),f=p(e);return it(n,f,t)},o.addHook=function(i,e){typeof e==\"function\"&&J(h[i],e)},o.removeHook=function(i,e){if(e!==void 0){const t=Vt(h[i],e);return t===-1?void 0:$t(h[i],t,1)[0]}return ut(h[i])},o.removeHooks=function(i){h[i]=[]},o.removeAllHooks=function(){h=_t()},o}var mn=St();export{mn as default};\n"
  },
  {
    "path": "public/build/assets/recovery-DDbs8NlV.js",
    "content": "import{f as N,o as c,c as v,F as E,n as O,a as l,w as R,D as Z,b as g,g as ee,l as te,r as le,j as se,i as f,e as ne}from\"./vendor-tiptap-D5xFoo7B.js\";import{v as ie}from\"./v-click-outside.umd-Cl-Y_A58.js\";import\"./_commonjsHelpers-Cpj98o6Y.js\";const ae={class:\"flex gap-2 items-center\"},oe={class:\"flex-none flex items-center\"},re=[\"innerHTML\"],de=[\"innerHTML\"],ce={class:\"flex items-center gap-2 md:gap-4\"},ue={class:\"grow text-neutral-content\"},ve=[\"innerHTML\"],fe={key:0,class:\"flex-none\"},pe=[\"innerHTML\"],me={key:1,class:\"rounded shadow-sm p-4 flex gap-2 items-center bg-base-200 hover:shadow-lg\"},ge=[\"innerHTML\"],he=[\"innerHTML\"],_e=N({__name:\"Element\",props:{model:{},i18n:{}},emits:[\"recover\"],setup(r,{emit:w}){const y=w,a=r,k=()=>{a.model.url||(a.model.is_selected=!a.model.is_selected)},h=()=>{let o=\"rounded-xl shadow-xs bg-base-100 flex flex-col gap-2 md:gap-4 p-4 hover:shadow\";return a.model.url||(o=o+\" cursor-pointer\"),a.model.is_selected?o+\" bg-base-200\":o+\"  \"},x=(o,d=[])=>{if(!a.i18n[o])return console.error(\"Missing trans\",o,a.i18n),\"MISSING\";let p=a.i18n[o];return d.forEach(M=>{p=p.replace(\"placeholder\",M)}),p},L=()=>{let o=\"btn2 btn-default btn-sm\";return a.model.is_recovering&&(o+=\" loading btn-disabled\"),o},i=()=>{y(\"recover\",a.model)};return(o,d)=>(c(),v(E,null,[!r.model.is_hidden&&!r.model.url?(c(),v(\"div\",{key:0,class:O(h()),onClick:k},[l(\"div\",ae,[l(\"div\",oe,[r.model.url?g(\"\",!0):R((c(),v(\"input\",{key:0,type:\"checkbox\",\"onUpdate:modelValue\":d[0]||(d[0]=p=>r.model.is_selected=p),onClick:d[1]||(d[1]=(...p)=>o.startBulking&&o.startBulking(...p))},null,512)),[[Z,r.model.is_selected]])]),l(\"div\",{class:\"grow font-extrabold truncate\",innerHTML:r.model.name},null,8,re),l(\"div\",{class:\"rounded-xl px-3 py-1 text-xs bg-base-200\",innerHTML:r.model.type_name},null,8,de)]),d[3]||(d[3]=l(\"hr\",null,null,-1)),l(\"div\",ce,[l(\"div\",ue,[l(\"span\",{class:\"text-xs\",innerHTML:x(\"deleted_at\",[r.model.date,r.model.deleted_name])},null,8,ve)]),r.model.url?g(\"\",!0):(c(),v(\"div\",fe,[l(\"button\",{class:O(L()),onClick:d[2]||(d[2]=p=>i()),innerHTML:x(\"recover\")},null,10,pe)]))])],2)):g(\"\",!0),!r.model.is_hidden&&r.model.url?(c(),v(\"div\",me,[d[4]||(d[4]=l(\"div\",{class:\"flex-none\"},[l(\"i\",{class:\"fa-solid text-green-500 fa-circle-check\",\"aria-hidden\":\"true\"})],-1)),l(\"div\",{class:\"grow\",innerHTML:x(\"recovery_success\",[r.model.url,r.model.name])},null,8,ge),l(\"div\",{class:\"rounded-xl px-3 py-1 text-xs bg-base-300\",innerHTML:r.model.type_name},null,8,he)])):g(\"\",!0)],64))}}),xe={key:0,class:\"text-center text-4xl p-4\"},be={key:1,class:\"flex flex-col gap-4 md:gap-5\"},ye={class:\"flex gap-4 flex-wrap sticky top-14 z-50\"},ke={class:\"flex gap-2 grow\"},Le={class:\"flex gap-0.5\"},Me={class:\"relative\"},Te=[\"innerHTML\"],we={key:0,class:\"border shadow-sm rounded bg-base-100 p-4 absolute right-0 flex flex-col gap-5 w-60\"},He=[\"innerHTML\"],Ce=[\"innerHTML\"],Ee=[\"innerHTML\"],$e={class:\"flex gap-2 self-end flex-wrap\"},Ie=[\"innerHTML\"],Be=[\"innerHTML\"],De=[\"innerHTML\"],Se=[\"innerHTML\"],Oe={key:0,class:\"text-center text-4xl p-4\"},Ne={key:1,class:\"flex flex-col gap-4\"},Re={class:\"flex gap-2 flex-row\"},Ae={class:\"grid grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-5\"},je={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},Fe=[\"innerHTML\"],Ge={class:\"max-w-4xl flex flex-col gap-2 text-left p-4 md:px-6\"},Ve={class:\"flex flex-col gap-1 w-full\"},ze=[\"innerHTML\"],Xe={class:\"p-4 md:px-6\"},Ye={class:\"\"},Ue=[\"href\",\"innerHTML\"],qe=N({__name:\"Recovery\",props:{api:{}},setup(r){const w=r,y=f(!1),a=f(!1),k=f(!1),h=f(),x=f(),L=f(null),i=f([]),o=f(\"newest\"),d=f(),p=f(),M=f(),b=f(!1),_=f(!1),I=f();ee(()=>{axios.get(w.api).then(e=>{y.value=!0,i.value=e.data.elements,d.value=e.data.i18n,M.value=e.data.api.recovery,k.value=e.data.acl.premium,I.value=e.data.upgrade})});const m=e=>d.value[e]?d.value[e]:(console.error(\"Missing trans\",e,d),\"MISSING\"),A=e=>{let t=i.value.find(u=>u.id===e.id);!t.url&&!t.is_hidden&&(t.is_selected=!0)},j=e=>{let t=i.value.find(u=>u.id===e.id);t.is_selected=!1},F=e=>{if(!k.value){B(p.value);return}let t=i.value.find(n=>n.id===e.id);if(t.is_recovering=!0,b.value)return;b.value=!0;let u={};t.type===\"post\"?(u.posts=[t.id],u.entities=[]):(u.entities=[t.id],u.posts=[]),axios.post(M.value,u).then(n=>{b.value=!1,Object.keys(n.data.entities).map(s=>n.data.entities[s]);let T=i.value.filter(s=>s.is_recovering&&s.type==\"entity\"),C=i.value.filter(s=>s.is_recovering&&s.type==\"post\");T.forEach(s=>{s.is_selected=!1,s.is_recovering=!1,n.data.entities[s.id]&&(s.url=n.data.entities[s.id])}),C.forEach(s=>{s.is_selected=!1,s.is_recovering=!1,n.data.posts[s.id]&&(s.url=n.data.posts[s.id])}),window.showToast(n.data.toast)})},G=()=>{i.value.forEach(A)},V=()=>{i.value.forEach(j)},z=e=>{h.value=e.target.value.toLowerCase(),L.value&&clearTimeout(L.value),L.value=setTimeout(()=>{X()},300)},X=()=>{if(x.value!=h.value){if(x.value=h.value,!h.value){i.value.forEach(e=>{e.is_hidden=!1});return}a.value=!0,K()}},H=()=>i.value.filter(t=>t.is_selected).length!==0,Y=()=>{if(!k.value){B(p.value);return}if(b.value)return;let e=i.value.filter(n=>n.is_selected&&n.type==\"entity\").map(n=>n.id),t=i.value.filter(n=>n.is_selected&&n.type==\"post\").map(n=>n.id);if(e.length===0&&t.length===0)return;b.value=!0;let u={};u.entities=e,u.posts=t,axios.post(M.value,u).then(n=>{b.value=!1,Object.keys(n.data.entities).map(s=>n.data.entities[s]);let T=i.value.filter(s=>s.is_selected&&s.type==\"entity\"),C=i.value.filter(s=>s.is_selected&&s.type==\"post\");T.forEach(s=>{s.is_selected=!1,n.data.entities[s.id]&&(s.url=n.data.entities[s.id])}),C.forEach(s=>{s.is_selected=!1,n.data.posts[s.id]&&(s.url=n.data.posts[s.id])}),window.showToast(n.data.toast)})},U=()=>{let e=i.value.filter(t=>t.is_selected).length;if(e!==0)return\"(\"+e+\")\"},q=()=>{_.value=!_.value},J=()=>{_.value=!1},K=()=>{i.value.forEach(e=>{e.name.toLowerCase().includes(h.value)?e.is_hidden=!1:e.is_hidden=!0}),a.value=!1},P=()=>{a.value=!0,i.value.sort(function(e,t){return e.position-t.position}),a.value=!1,_.value=!1,o.value=\"newest\"},Q=()=>{a.value=!0,i.value.sort(function(e,t){return t.position-e.position}),a.value=!1,_.value=!1,o.value=\"oldest\"},W=()=>{a.value=!0,i.value.sort(function(e,t){return e.type_name.localeCompare(t.type_name)}),a.value=!1,_.value=!1,o.value=\"type\"},B=e=>{e.showModal(),e.addEventListener(\"click\",D)},D=e=>{let t=e.target.getBoundingClientRect();!(t.top<=e.clientY&&e.clientY<=t.top+t.height&&t.left<=e.clientX&&e.clientX<=t.left+t.width)&&e.target.tagName===\"DIALOG\"&&S(e.target)},S=e=>{e.removeEventListener(\"click\",D),e.close()};return(e,t)=>{const u=te(\"click-outside\");return c(),v(E,null,[y.value?(c(),v(\"div\",be,[l(\"div\",ye,[l(\"div\",ke,[l(\"div\",Le,[l(\"input\",{type:\"text\",placeholder:\"Search\",onInput:z},null,32)]),l(\"div\",Me,[l(\"button\",{class:\"btn2 btn-default btn-sm\",onClick:q},[t[2]||(t[2]=l(\"i\",{class:\"fa-regular fa-filter\",\"aria-hidden\":\"true\"},null,-1)),l(\"span\",{innerHTML:m(\"order_by_\"+o.value),class:\"hidden md:inline\"},null,8,Te)]),_.value?R((c(),v(\"div\",we,[l(\"label\",{onClick:P,class:\"cursor-pointer\",innerHTML:m(\"newest\")},null,8,He),l(\"label\",{onClick:Q,class:\"cursor-pointer\",innerHTML:m(\"oldest\")},null,8,Ce),l(\"label\",{onClick:W,class:\"cursor-pointer\",innerHTML:m(\"type\")},null,8,Ee)])),[[u,J]]):g(\"\",!0)])]),l(\"div\",$e,[H()?g(\"\",!0):(c(),v(\"button\",{key:0,class:\"btn2 btn-default btn-sm\",onClick:G},[t[3]||(t[3]=l(\"i\",{class:\"fa-regular fa-list-check\",\"aria-hidden\":\"true\"},null,-1)),l(\"span\",{innerHTML:m(\"select_all\")},null,8,Ie)])),H()?(c(),v(\"button\",{key:1,class:\"btn2 btn-default btn-sm\",onClick:V},[t[4]||(t[4]=l(\"i\",{class:\"fa-regular fa-xmark\",\"aria-hidden\":\"true\"},null,-1)),l(\"span\",{innerHTML:m(\"deselect_all\")},null,8,Be)])):g(\"\",!0),H()?(c(),v(\"button\",{key:2,class:\"btn2 btn-primary btn-sm\",onClick:Y},[t[5]||(t[5]=l(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),l(\"span\",{innerHTML:m(\"restore_selected\")},null,8,De),l(\"span\",{innerHTML:U()},null,8,Se)])):g(\"\",!0)])]),a.value?(c(),v(\"div\",Oe,[...t[6]||(t[6]=[l(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):(c(),v(\"div\",Ne,[l(\"div\",Re,[l(\"div\",Ae,[(c(!0),v(E,null,le(i.value,n=>(c(),se(_e,{model:n,i18n:d.value,onRecover:T=>F(n)},null,8,[\"model\",\"i18n\",\"onRecover\"]))),256))])])]))])):(c(),v(\"div\",xe,[...t[1]||(t[1]=[l(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])),y.value?(c(),v(\"dialog\",{key:2,ref_key:\"premiumDialog\",ref:p,class:\"dialog rounded-2xl text-center\"},[l(\"header\",je,[l(\"h4\",{innerHTML:m(\"premium_title\"),class:\"text-lg font-normal\"},null,8,Fe),l(\"button\",{type:\"button\",class:\"text-base-content\",onClick:t[0]||(t[0]=n=>S(p.value)),title:\"Close\"},[...t[7]||(t[7]=[l(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),l(\"span\",{class:\"sr-only\"},\"Close\",-1)])])]),l(\"article\",Ge,[l(\"div\",Ve,[l(\"label\",{innerHTML:m(\"premium\")},null,8,ze)])]),l(\"footer\",Xe,[l(\"menu\",Ye,[l(\"a\",{href:I.value,innerHTML:m(\"upgrade\"),class:\"btn2 btn-default\"},null,8,Ue)])])],512)):g(\"\",!0)],64)}}}),$=ne({});$.component(\"recovery\",qe);$.use(ie);$.mount(\"#recovery\");\n"
  },
  {
    "path": "public/build/assets/relations-BhqWrOkS.css",
    "content": ".cy-panzoom{position:absolute;font-size:12px;color:#fff;font-family:arial,helvetica,sans-serif;line-height:1;color:#666;font-size:11px;z-index:99999;box-sizing:content-box}.cy-panzoom-zoom-button{cursor:pointer;padding:3px;text-align:center;position:absolute;border-radius:3px;width:10px;height:10px;left:16px;background:#fff;border:1px solid #999;margin-left:-1px;margin-top:-1px;z-index:1;box-sizing:content-box}.cy-panzoom-zoom-button:active,.cy-panzoom-slider-handle:active,.cy-panzoom-slider-handle.active{background:#ddd;box-sizing:content-box}.cy-panzoom-pan-button{position:absolute;z-index:1;height:16px;width:16px;box-sizing:content-box}.cy-panzoom-reset{top:55px;box-sizing:content-box}.cy-panzoom-zoom-in{top:80px;box-sizing:content-box}.cy-panzoom-zoom-out{top:197px;box-sizing:content-box}.cy-panzoom-pan-up{top:0;left:50%;margin-left:-5px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #666;box-sizing:content-box}.cy-panzoom-pan-down{bottom:0;left:50%;margin-left:-5px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #666;box-sizing:content-box}.cy-panzoom-pan-left{top:50%;left:0;margin-top:-5px;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #666;box-sizing:content-box}.cy-panzoom-pan-right{top:50%;right:0;margin-top:-5px;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #666;box-sizing:content-box}.cy-panzoom-pan-indicator{position:absolute;left:0;top:0;width:8px;height:8px;background:#000;border-radius:8px;margin-left:-5px;margin-top:-5px;display:none;z-index:999;opacity:.6;box-sizing:content-box}.cy-panzoom-slider{position:absolute;top:97px;left:17px;height:100px;width:15px;box-sizing:content-box}.cy-panzoom-slider-background{position:absolute;top:0;width:2px;height:100px;left:5px;background:#fff;border-left:1px solid #999;border-right:1px solid #999;box-sizing:content-box}.cy-panzoom-slider-handle{position:absolute;width:16px;height:8px;background:#fff;border:1px solid #999;border-radius:2px;margin-left:-2px;z-index:999;line-height:8px;cursor:default;box-sizing:content-box}.cy-panzoom-slider-handle .icon{margin:0 4px;line-height:10px;box-sizing:content-box}.cy-panzoom-no-zoom-tick{position:absolute;background:#666;border:1px solid #fff;border-radius:2px;margin-left:-1px;width:8px;height:2px;left:3px;z-index:1;margin-top:3px;box-sizing:content-box}.cy-panzoom-panner{position:absolute;left:5px;top:5px;height:40px;width:40px;background:#fff;border:1px solid #999;border-radius:40px;margin-left:-1px;box-sizing:content-box}.cy-panzoom-panner-handle{left:0;top:0;outline:none;height:40px;width:40px;position:absolute;z-index:999;box-sizing:content-box}.cy-panzoom-zoom-only .cy-panzoom-slider,.cy-panzoom-zoom-only .cy-panzoom-panner{display:none}.cy-panzoom-zoom-only .cy-panzoom-reset{top:20px}.cy-panzoom-zoom-only .cy-panzoom-zoom-in{top:45px}.cy-panzoom-zoom-only .cy-panzoom-zoom-out{top:70px}.cy-panzoom{z-index:800}\n"
  },
  {
    "path": "public/build/assets/relations-DFy0TfK7.js",
    "content": "const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[\"assets/cytoscape-cose-bilkent-DRrwnnKV.js\",\"assets/_commonjsHelpers-Cpj98o6Y.js\",\"assets/cytoscape-panzoom-Del_Rz3u.js\",\"assets/index.esm-DvuRQLEU.js\",\"assets/cytoscape.esm-BJ4qIETX.js\"])))=>i.map(i=>d[i]);\nimport{_ as l}from\"./preload-helper-I4rgV-VL.js\";let o,i,a,c=[];const m=\"#777777\",n=document.getElementById(\"cy\"),g=async()=>{if(!n)return;const{default:t}=await l(async()=>{const{default:d}=await import(\"./cytoscape.esm-BJ4qIETX.js\");return{default:d}},[]),{default:e}=await l(async()=>{const{default:d}=await import(\"./cytoscape-cose-bilkent-DRrwnnKV.js\").then(r=>r.c);return{default:d}},__vite__mapDeps([0,1])),{default:u}=await l(async()=>{const{default:d}=await import(\"./cytoscape-panzoom-Del_Rz3u.js\").then(r=>r.c);return{default:d}},__vite__mapDeps([2,1])),{default:s}=await l(async()=>{const{default:d}=await import(\"./index.esm-DvuRQLEU.js\");return{default:d}},__vite__mapDeps([3,4]));t.use(s),t.use(e),t.use(u),o=t({container:n,wheelSensitivity:.5,style:t.stylesheet().selector(\"node\").css({label:\"data(name)\",\"background-image\":\"data(image)\",height:80,width:80,\"background-fit\":\"cover\",\"border-color\":window.getComputedStyle(n.parentNode).color,\"border-width\":3,color:window.getComputedStyle(n).color,\"text-wrap\":\"wrap\",\"text-margin-y\":\"-8px\",\"text-background-opacity\":1,\"text-background-color\":window.getComputedStyle(n).backgroundColor,\"text-border-color\":window.getComputedStyle(n).backgroundColor,\"text-border-width\":3,\"text-border-opacity\":1}).selector(\"edge\").css({\"line-color\":\"data(colour)\",\"curve-style\":\"bezier\",\"control-point-step-size\":40,\"target-arrow-shape\":\"data(shape)\",\"target-arrow-color\":\"data(colour)\",width:\"data(attitude)\",\"text-background-opacity\":1,color:window.getComputedStyle(n).color,\"text-background-color\":window.getComputedStyle(n).backgroundColor,\"text-border-color\":window.getComputedStyle(n).backgroundColor,\"text-border-width\":3,\"text-border-opacity\":1})}),o.panzoom({maxZoom:2,minZoom:.3}),o.minZoom(.3),o.maxZoom(2),o.dblclick(),p()},p=()=>{fetch(n.dataset.url).then(t=>t.json()).then(t=>{y(t)})},y=t=>{for(i in t.entities){let e={group:\"nodes\",data:{id:t.entities[i].id,name:t.entities[i].name,image:t.entities[i].image,link:t.entities[i].link}};c.push(e)}for(a in t.relations){let e={group:\"edges\",data:{source:t.relations[a].source,target:t.relations[a].target,name:t.relations[a].text,colour:t.relations[a].colour,attitude:t.relations[a].attitude,shape:t.relations[a].shape,edit_url:t.relations[a].edit_url}};e.data.colour||(e.data.colour=m),e.data.attitude||(e.data.attitude=0),e.data.attitude=_(e.data.attitude),c.push(e)}f()},f=()=>{o.add(c),o.nodes().forEach(function(t){t.connectedEdges().length==0&&w(t)}),h(),b(),k()};function w(t){t.hide()}function h(){o.elements().layout({name:\"cose-bilkent\",idealEdgeLength:130,nodeDimensionsIncludeLabels:!0}).run()}function b(){o.on(\"tap\",\"node\",function(t){let e=t.target.data();e.link&&(window.location=e.link)}),o.nodes().on(\"mouseover\",function(t){i=o.getElementById(t.target.id()),i.addClass(\"node-hover\")}),o.nodes().on(\"mouseout\",function(){i.removeClass(\"node-hover\")}),o.on(\"tap\",\"edge\",function(t){let e=t.target.data().edit_url;e&&window.openDialog(\"primary-dialog\",e)}),o.edges().on(\"mouseover\",function(t){a=o.getElementById(t.target.id()),a.style(\"label\",a._private.data.name),a.style(\"overlay-opacity\",.1)}),o.edges().on(\"mouseout\",function(){a.style(\"label\",\"\"),a.style(\"overlay-opacity\",0)})}function _(t){return(t+100)/100*2+2}async function k(){let t=!0;for(;t;)o.nodes(\":backgrounding\").length==0?t=!1:await sleep(300);document.getElementById(\"spinner\").classList.add(\"hidden\"),n.classList.remove(\"hidden\")}g();\n"
  },
  {
    "path": "public/build/assets/settings-HvUxJh5V.js",
    "content": "const o=()=>{const t=document.getElementById(\"focus-modal\");t&&window.openDialog(t.dataset.target,t.dataset.url)};o();\n"
  },
  {
    "path": "public/build/assets/sortable.esm-DdTU3J9A.js",
    "content": "function se(o,t){var e=Object.keys(o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(o);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(o,i).enumerable})),e.push.apply(e,n)}return e}function z(o){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?arguments[t]:{};t%2?se(Object(e),!0).forEach(function(n){Me(o,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(e)):se(Object(e)).forEach(function(n){Object.defineProperty(o,n,Object.getOwnPropertyDescriptor(e,n))})}return o}function Mt(o){\"@babel/helpers - typeof\";return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?Mt=function(t){return typeof t}:Mt=function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},Mt(o)}function Me(o,t,e){return t in o?Object.defineProperty(o,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):o[t]=e,o}function q(){return q=Object.assign||function(o){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(o[n]=e[n])}return o},q.apply(this,arguments)}function Fe(o,t){if(o==null)return{};var e={},n=Object.keys(o),i,r;for(r=0;r<n.length;r++)i=n[r],!(t.indexOf(i)>=0)&&(e[i]=o[i]);return e}function Re(o,t){if(o==null)return{};var e=Fe(o,t),n,i;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);for(i=0;i<r.length;i++)n=r[i],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(o,n)&&(e[n]=o[n])}return e}var Xe=\"1.15.6\";function U(o){if(typeof window<\"u\"&&window.navigator)return!!navigator.userAgent.match(o)}var V=U(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i),Ct=U(/Edge/i),ue=U(/firefox/i),wt=U(/safari/i)&&!U(/chrome/i)&&!U(/android/i),oe=U(/iP(ad|od|hone)/i),ve=U(/chrome/i)&&U(/android/i),be={capture:!1,passive:!1};function v(o,t,e){o.addEventListener(t,e,!V&&be)}function m(o,t,e){o.removeEventListener(t,e,!V&&be)}function kt(o,t){if(t){if(t[0]===\">\"&&(t=t.substring(1)),o)try{if(o.matches)return o.matches(t);if(o.msMatchesSelector)return o.msMatchesSelector(t);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(t)}catch{return!1}return!1}}function Ee(o){return o.host&&o!==document&&o.host.nodeType?o.host:o.parentNode}function W(o,t,e,n){if(o){e=e||document;do{if(t!=null&&(t[0]===\">\"?o.parentNode===e&&kt(o,t):kt(o,t))||n&&o===e)return o;if(o===e)break}while(o=Ee(o))}return null}var fe=/\\s+/g;function R(o,t,e){if(o&&t)if(o.classList)o.classList[e?\"add\":\"remove\"](t);else{var n=(\" \"+o.className+\" \").replace(fe,\" \").replace(\" \"+t+\" \",\" \");o.className=(n+(e?\" \"+t:\"\")).replace(fe,\" \")}}function h(o,t,e){var n=o&&o.style;if(n){if(e===void 0)return document.defaultView&&document.defaultView.getComputedStyle?e=document.defaultView.getComputedStyle(o,\"\"):o.currentStyle&&(e=o.currentStyle),t===void 0?e:e[t];!(t in n)&&t.indexOf(\"webkit\")===-1&&(t=\"-webkit-\"+t),n[t]=e+(typeof e==\"string\"?\"\":\"px\")}}function ct(o,t){var e=\"\";if(typeof o==\"string\")e=o;else do{var n=h(o,\"transform\");n&&n!==\"none\"&&(e=n+\" \"+e)}while(!t&&(o=o.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(e)}function ye(o,t,e){if(o){var n=o.getElementsByTagName(t),i=0,r=n.length;if(e)for(;i<r;i++)e(n[i],i);return n}return[]}function L(){var o=document.scrollingElement;return o||document.documentElement}function C(o,t,e,n,i){if(!(!o.getBoundingClientRect&&o!==window)){var r,a,l,s,u,d,c;if(o!==window&&o.parentNode&&o!==L()?(r=o.getBoundingClientRect(),a=r.top,l=r.left,s=r.bottom,u=r.right,d=r.height,c=r.width):(a=0,l=0,s=window.innerHeight,u=window.innerWidth,d=window.innerHeight,c=window.innerWidth),(t||e)&&o!==window&&(i=i||o.parentNode,!V))do if(i&&i.getBoundingClientRect&&(h(i,\"transform\")!==\"none\"||e&&h(i,\"position\")!==\"static\")){var b=i.getBoundingClientRect();a-=b.top+parseInt(h(i,\"border-top-width\")),l-=b.left+parseInt(h(i,\"border-left-width\")),s=a+r.height,u=l+r.width;break}while(i=i.parentNode);if(n&&o!==window){var w=ct(i||o),E=w&&w.a,y=w&&w.d;w&&(a/=y,l/=E,c/=E,d/=y,s=a+d,u=l+c)}return{top:a,left:l,bottom:s,right:u,width:c,height:d}}}function ce(o,t,e){for(var n=tt(o,!0),i=C(o)[t];n;){var r=C(n)[e],a=void 0;if(a=i>=r,!a)return n;if(n===L())break;n=tt(n,!1)}return!1}function dt(o,t,e,n){for(var i=0,r=0,a=o.children;r<a.length;){if(a[r].style.display!==\"none\"&&a[r]!==p.ghost&&(n||a[r]!==p.dragged)&&W(a[r],e.draggable,o,!1)){if(i===t)return a[r];i++}r++}return null}function ie(o,t){for(var e=o.lastElementChild;e&&(e===p.ghost||h(e,\"display\")===\"none\"||t&&!kt(e,t));)e=e.previousElementSibling;return e||null}function Y(o,t){var e=0;if(!o||!o.parentNode)return-1;for(;o=o.previousElementSibling;)o.nodeName.toUpperCase()!==\"TEMPLATE\"&&o!==p.clone&&(!t||kt(o,t))&&e++;return e}function de(o){var t=0,e=0,n=L();if(o)do{var i=ct(o),r=i.a,a=i.d;t+=o.scrollLeft*r,e+=o.scrollTop*a}while(o!==n&&(o=o.parentNode));return[t,e]}function Ye(o,t){for(var e in o)if(o.hasOwnProperty(e)){for(var n in t)if(t.hasOwnProperty(n)&&t[n]===o[e][n])return Number(e)}return-1}function tt(o,t){if(!o||!o.getBoundingClientRect)return L();var e=o,n=!1;do if(e.clientWidth<e.scrollWidth||e.clientHeight<e.scrollHeight){var i=h(e);if(e.clientWidth<e.scrollWidth&&(i.overflowX==\"auto\"||i.overflowX==\"scroll\")||e.clientHeight<e.scrollHeight&&(i.overflowY==\"auto\"||i.overflowY==\"scroll\")){if(!e.getBoundingClientRect||e===document.body)return L();if(n||t)return e;n=!0}}while(e=e.parentNode);return L()}function ke(o,t){if(o&&t)for(var e in t)t.hasOwnProperty(e)&&(o[e]=t[e]);return o}function zt(o,t){return Math.round(o.top)===Math.round(t.top)&&Math.round(o.left)===Math.round(t.left)&&Math.round(o.height)===Math.round(t.height)&&Math.round(o.width)===Math.round(t.width)}var _t;function we(o,t){return function(){if(!_t){var e=arguments,n=this;e.length===1?o.call(n,e[0]):o.apply(n,e),_t=setTimeout(function(){_t=void 0},t)}}}function Be(){clearTimeout(_t),_t=void 0}function _e(o,t,e){o.scrollLeft+=t,o.scrollTop+=e}function De(o){var t=window.Polymer,e=window.jQuery||window.Zepto;return t&&t.dom?t.dom(o).cloneNode(!0):e?e(o).clone(!0)[0]:o.cloneNode(!0)}function Se(o,t,e){var n={};return Array.from(o.children).forEach(function(i){var r,a,l,s;if(!(!W(i,t.draggable,o,!1)||i.animated||i===e)){var u=C(i);n.left=Math.min((r=n.left)!==null&&r!==void 0?r:1/0,u.left),n.top=Math.min((a=n.top)!==null&&a!==void 0?a:1/0,u.top),n.right=Math.max((l=n.right)!==null&&l!==void 0?l:-1/0,u.right),n.bottom=Math.max((s=n.bottom)!==null&&s!==void 0?s:-1/0,u.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var N=\"Sortable\"+new Date().getTime();function He(){var o=[],t;return{captureAnimationState:function(){if(o=[],!!this.options.animation){var n=[].slice.call(this.el.children);n.forEach(function(i){if(!(h(i,\"display\")===\"none\"||i===p.ghost)){o.push({target:i,rect:C(i)});var r=z({},o[o.length-1].rect);if(i.thisAnimationDuration){var a=ct(i,!0);a&&(r.top-=a.f,r.left-=a.e)}i.fromRect=r}})}},addAnimationState:function(n){o.push(n)},removeAnimationState:function(n){o.splice(Ye(o,{target:n}),1)},animateAll:function(n){var i=this;if(!this.options.animation){clearTimeout(t),typeof n==\"function\"&&n();return}var r=!1,a=0;o.forEach(function(l){var s=0,u=l.target,d=u.fromRect,c=C(u),b=u.prevFromRect,w=u.prevToRect,E=l.rect,y=ct(u,!0);y&&(c.top-=y.f,c.left-=y.e),u.toRect=c,u.thisAnimationDuration&&zt(b,c)&&!zt(d,c)&&(E.top-c.top)/(E.left-c.left)===(d.top-c.top)/(d.left-c.left)&&(s=Ge(E,b,w,i.options)),zt(c,d)||(u.prevFromRect=d,u.prevToRect=c,s||(s=i.options.animation),i.animate(u,E,c,s)),s&&(r=!0,a=Math.max(a,s),clearTimeout(u.animationResetTimer),u.animationResetTimer=setTimeout(function(){u.animationTime=0,u.prevFromRect=null,u.fromRect=null,u.prevToRect=null,u.thisAnimationDuration=null},s),u.thisAnimationDuration=s)}),clearTimeout(t),r?t=setTimeout(function(){typeof n==\"function\"&&n()},a):typeof n==\"function\"&&n(),o=[]},animate:function(n,i,r,a){if(a){h(n,\"transition\",\"\"),h(n,\"transform\",\"\");var l=ct(this.el),s=l&&l.a,u=l&&l.d,d=(i.left-r.left)/(s||1),c=(i.top-r.top)/(u||1);n.animatingX=!!d,n.animatingY=!!c,h(n,\"transform\",\"translate3d(\"+d+\"px,\"+c+\"px,0)\"),this.forRepaintDummy=We(n),h(n,\"transition\",\"transform \"+a+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),h(n,\"transform\",\"translate3d(0,0,0)\"),typeof n.animated==\"number\"&&clearTimeout(n.animated),n.animated=setTimeout(function(){h(n,\"transition\",\"\"),h(n,\"transform\",\"\"),n.animated=!1,n.animatingX=!1,n.animatingY=!1},a)}}}}function We(o){return o.offsetWidth}function Ge(o,t,e,n){return Math.sqrt(Math.pow(t.top-o.top,2)+Math.pow(t.left-o.left,2))/Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))*n.animation}var lt=[],jt={initializeByDefault:!0},Ot={mount:function(t){for(var e in jt)jt.hasOwnProperty(e)&&!(e in t)&&(t[e]=jt[e]);lt.forEach(function(n){if(n.pluginName===t.pluginName)throw\"Sortable: Cannot mount plugin \".concat(t.pluginName,\" more than once\")}),lt.push(t)},pluginEvent:function(t,e,n){var i=this;this.eventCanceled=!1,n.cancel=function(){i.eventCanceled=!0};var r=t+\"Global\";lt.forEach(function(a){e[a.pluginName]&&(e[a.pluginName][r]&&e[a.pluginName][r](z({sortable:e},n)),e.options[a.pluginName]&&e[a.pluginName][t]&&e[a.pluginName][t](z({sortable:e},n)))})},initializePlugins:function(t,e,n,i){lt.forEach(function(l){var s=l.pluginName;if(!(!t.options[s]&&!l.initializeByDefault)){var u=new l(t,e,t.options);u.sortable=t,u.options=t.options,t[s]=u,q(n,u.defaults)}});for(var r in t.options)if(t.options.hasOwnProperty(r)){var a=this.modifyOption(t,r,t.options[r]);typeof a<\"u\"&&(t.options[r]=a)}},getEventProperties:function(t,e){var n={};return lt.forEach(function(i){typeof i.eventProperties==\"function\"&&q(n,i.eventProperties.call(e[i.pluginName],t))}),n},modifyOption:function(t,e,n){var i;return lt.forEach(function(r){t[r.pluginName]&&r.optionListeners&&typeof r.optionListeners[e]==\"function\"&&(i=r.optionListeners[e].call(t[r.pluginName],n))}),i}};function Le(o){var t=o.sortable,e=o.rootEl,n=o.name,i=o.targetEl,r=o.cloneEl,a=o.toEl,l=o.fromEl,s=o.oldIndex,u=o.newIndex,d=o.oldDraggableIndex,c=o.newDraggableIndex,b=o.originalEvent,w=o.putSortable,E=o.extraEventProperties;if(t=t||e&&e[N],!!t){var y,k=t.options,j=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);window.CustomEvent&&!V&&!Ct?y=new CustomEvent(n,{bubbles:!0,cancelable:!0}):(y=document.createEvent(\"Event\"),y.initEvent(n,!0,!0)),y.to=a||e,y.from=l||e,y.item=i||e,y.clone=r,y.oldIndex=s,y.newIndex=u,y.oldDraggableIndex=d,y.newDraggableIndex=c,y.originalEvent=b,y.pullMode=w?w.lastPutMode:void 0;var A=z(z({},E),Ot.getEventProperties(n,t));for(var B in A)y[B]=A[B];e&&e.dispatchEvent(y),k[j]&&k[j].call(t,y)}}var ze=[\"evt\"],x=function(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=n.evt,r=Re(n,ze);Ot.pluginEvent.bind(p)(t,e,z({dragEl:f,parentEl:S,ghostEl:g,rootEl:_,nextEl:at,lastDownEl:Ft,cloneEl:D,cloneHidden:J,dragStarted:bt,putSortable:O,activeSortable:p.active,originalEvent:i,oldIndex:ft,oldDraggableIndex:Dt,newIndex:X,newDraggableIndex:Q,hideGhostForTarget:Ie,unhideGhostForTarget:Ae,cloneNowHidden:function(){J=!0},cloneNowShown:function(){J=!1},dispatchSortableEvent:function(l){P({sortable:e,name:l,originalEvent:i})}},r))};function P(o){Le(z({putSortable:O,cloneEl:D,targetEl:f,rootEl:_,oldIndex:ft,oldDraggableIndex:Dt,newIndex:X,newDraggableIndex:Q},o))}var f,S,g,_,at,Ft,D,J,ft,X,Dt,Q,At,O,ut=!1,Bt=!1,Ht=[],it,H,$t,Ut,he,pe,bt,st,St,Tt=!1,Pt=!1,Rt,I,qt=[],Jt=!1,Wt=[],Lt=typeof document<\"u\",xt=oe,ge=Ct||V?\"cssFloat\":\"float\",je=Lt&&!ve&&!oe&&\"draggable\"in document.createElement(\"div\"),Te=(function(){if(Lt){if(V)return!1;var o=document.createElement(\"x\");return o.style.cssText=\"pointer-events:auto\",o.style.pointerEvents===\"auto\"}})(),Ce=function(t,e){var n=h(t),i=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),r=dt(t,0,e),a=dt(t,1,e),l=r&&h(r),s=a&&h(a),u=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+C(r).width,d=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+C(a).width;if(n.display===\"flex\")return n.flexDirection===\"column\"||n.flexDirection===\"column-reverse\"?\"vertical\":\"horizontal\";if(n.display===\"grid\")return n.gridTemplateColumns.split(\" \").length<=1?\"vertical\":\"horizontal\";if(r&&l.float&&l.float!==\"none\"){var c=l.float===\"left\"?\"left\":\"right\";return a&&(s.clear===\"both\"||s.clear===c)?\"vertical\":\"horizontal\"}return r&&(l.display===\"block\"||l.display===\"flex\"||l.display===\"table\"||l.display===\"grid\"||u>=i&&n[ge]===\"none\"||a&&n[ge]===\"none\"&&u+d>i)?\"vertical\":\"horizontal\"},$e=function(t,e,n){var i=n?t.left:t.top,r=n?t.right:t.bottom,a=n?t.width:t.height,l=n?e.left:e.top,s=n?e.right:e.bottom,u=n?e.width:e.height;return i===l||r===s||i+a/2===l+u/2},Ue=function(t,e){var n;return Ht.some(function(i){var r=i[N].options.emptyInsertThreshold;if(!(!r||ie(i))){var a=C(i),l=t>=a.left-r&&t<=a.right+r,s=e>=a.top-r&&e<=a.bottom+r;if(l&&s)return n=i}}),n},Oe=function(t){function e(r,a){return function(l,s,u,d){var c=l.options.group.name&&s.options.group.name&&l.options.group.name===s.options.group.name;if(r==null&&(a||c))return!0;if(r==null||r===!1)return!1;if(a&&r===\"clone\")return r;if(typeof r==\"function\")return e(r(l,s,u,d),a)(l,s,u,d);var b=(a?l:s).options.group.name;return r===!0||typeof r==\"string\"&&r===b||r.join&&r.indexOf(b)>-1}}var n={},i=t.group;(!i||Mt(i)!=\"object\")&&(i={name:i}),n.name=i.name,n.checkPull=e(i.pull,!0),n.checkPut=e(i.put),n.revertClone=i.revertClone,t.group=n},Ie=function(){!Te&&g&&h(g,\"display\",\"none\")},Ae=function(){!Te&&g&&h(g,\"display\",\"\")};Lt&&!ve&&document.addEventListener(\"click\",function(o){if(Bt)return o.preventDefault(),o.stopPropagation&&o.stopPropagation(),o.stopImmediatePropagation&&o.stopImmediatePropagation(),Bt=!1,!1},!0);var rt=function(t){if(f){t=t.touches?t.touches[0]:t;var e=Ue(t.clientX,t.clientY);if(e){var n={};for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[N]._onDragOver(n)}}},qe=function(t){f&&f.parentNode[N]._isOutsideThisEl(t.target)};function p(o,t){if(!(o&&o.nodeType&&o.nodeType===1))throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(o));this.el=o,this.options=t=q({},t),o[N]=this;var e={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(o.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ce(o,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(a,l){a.setData(\"Text\",l.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:p.supportPointer!==!1&&\"PointerEvent\"in window&&(!wt||oe),emptyInsertThreshold:5};Ot.initializePlugins(this,o,e);for(var n in e)!(n in t)&&(t[n]=e[n]);Oe(t);for(var i in this)i.charAt(0)===\"_\"&&typeof this[i]==\"function\"&&(this[i]=this[i].bind(this));this.nativeDraggable=t.forceFallback?!1:je,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?v(o,\"pointerdown\",this._onTapStart):(v(o,\"mousedown\",this._onTapStart),v(o,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(v(o,\"dragover\",this),v(o,\"dragenter\",this)),Ht.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),q(this,He())}p.prototype={constructor:p,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(st=null)},_getDirection:function(t,e){return typeof this.options.direction==\"function\"?this.options.direction.call(this,t,e,f):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,i=this.options,r=i.preventOnFilter,a=t.type,l=t.touches&&t.touches[0]||t.pointerType&&t.pointerType===\"touch\"&&t,s=(l||t).target,u=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,d=i.filter;if(nn(n),!f&&!(/mousedown|pointerdown/.test(a)&&t.button!==0||i.disabled)&&!u.isContentEditable&&!(!this.nativeDraggable&&wt&&s&&s.tagName.toUpperCase()===\"SELECT\")&&(s=W(s,i.draggable,n,!1),!(s&&s.animated)&&Ft!==s)){if(ft=Y(s),Dt=Y(s,i.draggable),typeof d==\"function\"){if(d.call(this,t,s,this)){P({sortable:e,rootEl:u,name:\"filter\",targetEl:s,toEl:n,fromEl:n}),x(\"filter\",e,{evt:t}),r&&t.preventDefault();return}}else if(d&&(d=d.split(\",\").some(function(c){if(c=W(u,c.trim(),n,!1),c)return P({sortable:e,rootEl:c,name:\"filter\",targetEl:s,fromEl:n,toEl:n}),x(\"filter\",e,{evt:t}),!0}),d)){r&&t.preventDefault();return}i.handle&&!W(u,i.handle,n,!1)||this._prepareDragStart(t,l,s)}}},_prepareDragStart:function(t,e,n){var i=this,r=i.el,a=i.options,l=r.ownerDocument,s;if(n&&!f&&n.parentNode===r){var u=C(n);if(_=r,f=n,S=f.parentNode,at=f.nextSibling,Ft=n,At=a.group,p.dragged=f,it={target:f,clientX:(e||t).clientX,clientY:(e||t).clientY},he=it.clientX-u.left,pe=it.clientY-u.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,f.style[\"will-change\"]=\"all\",s=function(){if(x(\"delayEnded\",i,{evt:t}),p.eventCanceled){i._onDrop();return}i._disableDelayedDragEvents(),!ue&&i.nativeDraggable&&(f.draggable=!0),i._triggerDragStart(t,e),P({sortable:i,name:\"choose\",originalEvent:t}),R(f,a.chosenClass,!0)},a.ignore.split(\",\").forEach(function(d){ye(f,d.trim(),Vt)}),v(l,\"dragover\",rt),v(l,\"mousemove\",rt),v(l,\"touchmove\",rt),a.supportPointer?(v(l,\"pointerup\",i._onDrop),!this.nativeDraggable&&v(l,\"pointercancel\",i._onDrop)):(v(l,\"mouseup\",i._onDrop),v(l,\"touchend\",i._onDrop),v(l,\"touchcancel\",i._onDrop)),ue&&this.nativeDraggable&&(this.options.touchStartThreshold=4,f.draggable=!0),x(\"delayStart\",this,{evt:t}),a.delay&&(!a.delayOnTouchOnly||e)&&(!this.nativeDraggable||!(Ct||V))){if(p.eventCanceled){this._onDrop();return}a.supportPointer?(v(l,\"pointerup\",i._disableDelayedDrag),v(l,\"pointercancel\",i._disableDelayedDrag)):(v(l,\"mouseup\",i._disableDelayedDrag),v(l,\"touchend\",i._disableDelayedDrag),v(l,\"touchcancel\",i._disableDelayedDrag)),v(l,\"mousemove\",i._delayedDragTouchMoveHandler),v(l,\"touchmove\",i._delayedDragTouchMoveHandler),a.supportPointer&&v(l,\"pointermove\",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(s,a.delay)}else s()}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){f&&Vt(f),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;m(t,\"mouseup\",this._disableDelayedDrag),m(t,\"touchend\",this._disableDelayedDrag),m(t,\"touchcancel\",this._disableDelayedDrag),m(t,\"pointerup\",this._disableDelayedDrag),m(t,\"pointercancel\",this._disableDelayedDrag),m(t,\"mousemove\",this._delayedDragTouchMoveHandler),m(t,\"touchmove\",this._delayedDragTouchMoveHandler),m(t,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||t.pointerType==\"touch\"&&t,!this.nativeDraggable||e?this.options.supportPointer?v(document,\"pointermove\",this._onTouchMove):e?v(document,\"touchmove\",this._onTouchMove):v(document,\"mousemove\",this._onTouchMove):(v(f,\"dragend\",this),v(_,\"dragstart\",this._onDragStart));try{document.selection?Xt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,e){if(ut=!1,_&&f){x(\"dragStarted\",this,{evt:e}),this.nativeDraggable&&v(document,\"dragover\",qe);var n=this.options;!t&&R(f,n.dragClass,!1),R(f,n.ghostClass,!0),p.active=this,t&&this._appendGhost(),P({sortable:this,name:\"start\",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(H){this._lastX=H.clientX,this._lastY=H.clientY,Ie();for(var t=document.elementFromPoint(H.clientX,H.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(H.clientX,H.clientY),t!==e);)e=t;if(f.parentNode[N]._isOutsideThisEl(t),e)do{if(e[N]){var n=void 0;if(n=e[N]._onDragOver({clientX:H.clientX,clientY:H.clientY,target:t,rootEl:e}),n&&!this.options.dragoverBubble)break}t=e}while(e=Ee(e));Ae()}},_onTouchMove:function(t){if(it){var e=this.options,n=e.fallbackTolerance,i=e.fallbackOffset,r=t.touches?t.touches[0]:t,a=g&&ct(g,!0),l=g&&a&&a.a,s=g&&a&&a.d,u=xt&&I&&de(I),d=(r.clientX-it.clientX+i.x)/(l||1)+(u?u[0]-qt[0]:0)/(l||1),c=(r.clientY-it.clientY+i.y)/(s||1)+(u?u[1]-qt[1]:0)/(s||1);if(!p.active&&!ut){if(n&&Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}if(g){a?(a.e+=d-($t||0),a.f+=c-(Ut||0)):a={a:1,b:0,c:0,d:1,e:d,f:c};var b=\"matrix(\".concat(a.a,\",\").concat(a.b,\",\").concat(a.c,\",\").concat(a.d,\",\").concat(a.e,\",\").concat(a.f,\")\");h(g,\"webkitTransform\",b),h(g,\"mozTransform\",b),h(g,\"msTransform\",b),h(g,\"transform\",b),$t=d,Ut=c,H=r}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!g){var t=this.options.fallbackOnBody?document.body:_,e=C(f,!0,xt,!0,t),n=this.options;if(xt){for(I=t;h(I,\"position\")===\"static\"&&h(I,\"transform\")===\"none\"&&I!==document;)I=I.parentNode;I!==document.body&&I!==document.documentElement?(I===document&&(I=L()),e.top+=I.scrollTop,e.left+=I.scrollLeft):I=L(),qt=de(I)}g=f.cloneNode(!0),R(g,n.ghostClass,!1),R(g,n.fallbackClass,!0),R(g,n.dragClass,!0),h(g,\"transition\",\"\"),h(g,\"transform\",\"\"),h(g,\"box-sizing\",\"border-box\"),h(g,\"margin\",0),h(g,\"top\",e.top),h(g,\"left\",e.left),h(g,\"width\",e.width),h(g,\"height\",e.height),h(g,\"opacity\",\"0.8\"),h(g,\"position\",xt?\"absolute\":\"fixed\"),h(g,\"zIndex\",\"100000\"),h(g,\"pointerEvents\",\"none\"),p.ghost=g,t.appendChild(g),h(g,\"transform-origin\",he/parseInt(g.style.width)*100+\"% \"+pe/parseInt(g.style.height)*100+\"%\")}},_onDragStart:function(t,e){var n=this,i=t.dataTransfer,r=n.options;if(x(\"dragStart\",this,{evt:t}),p.eventCanceled){this._onDrop();return}x(\"setupClone\",this),p.eventCanceled||(D=De(f),D.removeAttribute(\"id\"),D.draggable=!1,D.style[\"will-change\"]=\"\",this._hideClone(),R(D,this.options.chosenClass,!1),p.clone=D),n.cloneId=Xt(function(){x(\"clone\",n),!p.eventCanceled&&(n.options.removeCloneOnHide||_.insertBefore(D,f),n._hideClone(),P({sortable:n,name:\"clone\"}))}),!e&&R(f,r.dragClass,!0),e?(Bt=!0,n._loopId=setInterval(n._emulateDragOver,50)):(m(document,\"mouseup\",n._onDrop),m(document,\"touchend\",n._onDrop),m(document,\"touchcancel\",n._onDrop),i&&(i.effectAllowed=\"move\",r.setData&&r.setData.call(n,i,f)),v(document,\"drop\",n),h(f,\"transform\",\"translateZ(0)\")),ut=!0,n._dragStartId=Xt(n._dragStarted.bind(n,e,t)),v(document,\"selectstart\",n),bt=!0,window.getSelection().removeAllRanges(),wt&&h(document.body,\"user-select\",\"none\")},_onDragOver:function(t){var e=this.el,n=t.target,i,r,a,l=this.options,s=l.group,u=p.active,d=At===s,c=l.sort,b=O||u,w,E=this,y=!1;if(Jt)return;function k(vt,xe){x(vt,E,z({evt:t,isOwner:d,axis:w?\"vertical\":\"horizontal\",revert:a,dragRect:i,targetRect:r,canSort:c,fromSortable:b,target:n,completed:A,onMove:function(le,Ne){return Nt(_,e,f,i,le,C(le),t,Ne)},changed:B},xe))}function j(){k(\"dragOverAnimationCapture\"),E.captureAnimationState(),E!==b&&b.captureAnimationState()}function A(vt){return k(\"dragOverCompleted\",{insertion:vt}),vt&&(d?u._hideClone():u._showClone(E),E!==b&&(R(f,O?O.options.ghostClass:u.options.ghostClass,!1),R(f,l.ghostClass,!0)),O!==E&&E!==p.active?O=E:E===p.active&&O&&(O=null),b===E&&(E._ignoreWhileAnimating=n),E.animateAll(function(){k(\"dragOverAnimationComplete\"),E._ignoreWhileAnimating=null}),E!==b&&(b.animateAll(),b._ignoreWhileAnimating=null)),(n===f&&!f.animated||n===e&&!n.animated)&&(st=null),!l.dragoverBubble&&!t.rootEl&&n!==document&&(f.parentNode[N]._isOutsideThisEl(t.target),!vt&&rt(t)),!l.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),y=!0}function B(){X=Y(f),Q=Y(f,l.draggable),P({sortable:E,name:\"change\",toEl:e,newIndex:X,newDraggableIndex:Q,originalEvent:t})}if(t.preventDefault!==void 0&&t.cancelable&&t.preventDefault(),n=W(n,l.draggable,e,!0),k(\"dragOver\"),p.eventCanceled)return y;if(f.contains(t.target)||n.animated&&n.animatingX&&n.animatingY||E._ignoreWhileAnimating===n)return A(!1);if(Bt=!1,u&&!l.disabled&&(d?c||(a=S!==_):O===this||(this.lastPutMode=At.checkPull(this,u,f,t))&&s.checkPut(this,u,f,t))){if(w=this._getDirection(t,n)===\"vertical\",i=C(f),k(\"dragOverValid\"),p.eventCanceled)return y;if(a)return S=_,j(),this._hideClone(),k(\"revert\"),p.eventCanceled||(at?_.insertBefore(f,at):_.appendChild(f)),A(!0);var M=ie(e,l.draggable);if(!M||Qe(t,w,this)&&!M.animated){if(M===f)return A(!1);if(M&&e===t.target&&(n=M),n&&(r=C(n)),Nt(_,e,f,i,n,r,t,!!n)!==!1)return j(),M&&M.nextSibling?e.insertBefore(f,M.nextSibling):e.appendChild(f),S=e,B(),A(!0)}else if(M&&Ze(t,w,this)){var et=dt(e,0,l,!0);if(et===f)return A(!1);if(n=et,r=C(n),Nt(_,e,f,i,n,r,t,!1)!==!1)return j(),e.insertBefore(f,et),S=e,B(),A(!0)}else if(n.parentNode===e){r=C(n);var G=0,nt,ht=f.parentNode!==e,F=!$e(f.animated&&f.toRect||i,n.animated&&n.toRect||r,w),pt=w?\"top\":\"left\",K=ce(n,\"top\",\"top\")||ce(f,\"top\",\"top\"),gt=K?K.scrollTop:void 0;st!==n&&(nt=r[pt],Tt=!1,Pt=!F&&l.invertSwap||ht),G=Je(t,n,r,w,F?1:l.swapThreshold,l.invertedSwapThreshold==null?l.swapThreshold:l.invertedSwapThreshold,Pt,st===n);var $;if(G!==0){var ot=Y(f);do ot-=G,$=S.children[ot];while($&&(h($,\"display\")===\"none\"||$===g))}if(G===0||$===n)return A(!1);st=n,St=G;var mt=n.nextElementSibling,Z=!1;Z=G===1;var It=Nt(_,e,f,i,n,r,t,Z);if(It!==!1)return(It===1||It===-1)&&(Z=It===1),Jt=!0,setTimeout(Ke,30),j(),Z&&!mt?e.appendChild(f):n.parentNode.insertBefore(f,Z?mt:n),K&&_e(K,0,gt-K.scrollTop),S=f.parentNode,nt!==void 0&&!Pt&&(Rt=Math.abs(nt-C(n)[pt])),B(),A(!0)}if(e.contains(f))return A(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){m(document,\"mousemove\",this._onTouchMove),m(document,\"touchmove\",this._onTouchMove),m(document,\"pointermove\",this._onTouchMove),m(document,\"dragover\",rt),m(document,\"mousemove\",rt),m(document,\"touchmove\",rt)},_offUpEvents:function(){var t=this.el.ownerDocument;m(t,\"mouseup\",this._onDrop),m(t,\"touchend\",this._onDrop),m(t,\"pointerup\",this._onDrop),m(t,\"pointercancel\",this._onDrop),m(t,\"touchcancel\",this._onDrop),m(document,\"selectstart\",this)},_onDrop:function(t){var e=this.el,n=this.options;if(X=Y(f),Q=Y(f,n.draggable),x(\"drop\",this,{evt:t}),S=f&&f.parentNode,X=Y(f),Q=Y(f,n.draggable),p.eventCanceled){this._nulling();return}ut=!1,Pt=!1,Tt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),te(this.cloneId),te(this._dragStartId),this.nativeDraggable&&(m(document,\"drop\",this),m(e,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),wt&&h(document.body,\"user-select\",\"\"),h(f,\"transform\",\"\"),t&&(bt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),g&&g.parentNode&&g.parentNode.removeChild(g),(_===S||O&&O.lastPutMode!==\"clone\")&&D&&D.parentNode&&D.parentNode.removeChild(D),f&&(this.nativeDraggable&&m(f,\"dragend\",this),Vt(f),f.style[\"will-change\"]=\"\",bt&&!ut&&R(f,O?O.options.ghostClass:this.options.ghostClass,!1),R(f,this.options.chosenClass,!1),P({sortable:this,name:\"unchoose\",toEl:S,newIndex:null,newDraggableIndex:null,originalEvent:t}),_!==S?(X>=0&&(P({rootEl:S,name:\"add\",toEl:S,fromEl:_,originalEvent:t}),P({sortable:this,name:\"remove\",toEl:S,originalEvent:t}),P({rootEl:S,name:\"sort\",toEl:S,fromEl:_,originalEvent:t}),P({sortable:this,name:\"sort\",toEl:S,originalEvent:t})),O&&O.save()):X!==ft&&X>=0&&(P({sortable:this,name:\"update\",toEl:S,originalEvent:t}),P({sortable:this,name:\"sort\",toEl:S,originalEvent:t})),p.active&&((X==null||X===-1)&&(X=ft,Q=Dt),P({sortable:this,name:\"end\",toEl:S,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){x(\"nulling\",this),_=f=S=g=at=D=Ft=J=it=H=bt=X=Q=ft=Dt=st=St=O=At=p.dragged=p.ghost=p.clone=p.active=null,Wt.forEach(function(t){t.checked=!0}),Wt.length=$t=Ut=0},handleEvent:function(t){switch(t.type){case\"drop\":case\"dragend\":this._onDrop(t);break;case\"dragenter\":case\"dragover\":f&&(this._onDragOver(t),Ve(t));break;case\"selectstart\":t.preventDefault();break}},toArray:function(){for(var t=[],e,n=this.el.children,i=0,r=n.length,a=this.options;i<r;i++)e=n[i],W(e,a.draggable,this.el,!1)&&t.push(e.getAttribute(a.dataIdAttr)||en(e));return t},sort:function(t,e){var n={},i=this.el;this.toArray().forEach(function(r,a){var l=i.children[a];W(l,this.options.draggable,i,!1)&&(n[r]=l)},this),e&&this.captureAnimationState(),t.forEach(function(r){n[r]&&(i.removeChild(n[r]),i.appendChild(n[r]))}),e&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return W(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var n=this.options;if(e===void 0)return n[t];var i=Ot.modifyOption(this,t,e);typeof i<\"u\"?n[t]=i:n[t]=e,t===\"group\"&&Oe(n)},destroy:function(){x(\"destroy\",this);var t=this.el;t[N]=null,m(t,\"mousedown\",this._onTapStart),m(t,\"touchstart\",this._onTapStart),m(t,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(m(t,\"dragover\",this),m(t,\"dragenter\",this)),Array.prototype.forEach.call(t.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),Ht.splice(Ht.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!J){if(x(\"hideClone\",this),p.eventCanceled)return;h(D,\"display\",\"none\"),this.options.removeCloneOnHide&&D.parentNode&&D.parentNode.removeChild(D),J=!0}},_showClone:function(t){if(t.lastPutMode!==\"clone\"){this._hideClone();return}if(J){if(x(\"showClone\",this),p.eventCanceled)return;f.parentNode==_&&!this.options.group.revertClone?_.insertBefore(D,f):at?_.insertBefore(D,at):_.appendChild(D),this.options.group.revertClone&&this.animate(f,D),h(D,\"display\",\"\"),J=!1}}};function Ve(o){o.dataTransfer&&(o.dataTransfer.dropEffect=\"move\"),o.cancelable&&o.preventDefault()}function Nt(o,t,e,n,i,r,a,l){var s,u=o[N],d=u.options.onMove,c;return window.CustomEvent&&!V&&!Ct?s=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}):(s=document.createEvent(\"Event\"),s.initEvent(\"move\",!0,!0)),s.to=t,s.from=o,s.dragged=e,s.draggedRect=n,s.related=i||t,s.relatedRect=r||C(t),s.willInsertAfter=l,s.originalEvent=a,o.dispatchEvent(s),d&&(c=d.call(u,s,a)),c}function Vt(o){o.draggable=!1}function Ke(){Jt=!1}function Ze(o,t,e){var n=C(dt(e.el,0,e.options,!0)),i=Se(e.el,e.options,g),r=10;return t?o.clientX<i.left-r||o.clientY<n.top&&o.clientX<n.right:o.clientY<i.top-r||o.clientY<n.bottom&&o.clientX<n.left}function Qe(o,t,e){var n=C(ie(e.el,e.options.draggable)),i=Se(e.el,e.options,g),r=10;return t?o.clientX>i.right+r||o.clientY>n.bottom&&o.clientX>n.left:o.clientY>i.bottom+r||o.clientX>n.right&&o.clientY>n.top}function Je(o,t,e,n,i,r,a,l){var s=n?o.clientY:o.clientX,u=n?e.height:e.width,d=n?e.top:e.left,c=n?e.bottom:e.right,b=!1;if(!a){if(l&&Rt<u*i){if(!Tt&&(St===1?s>d+u*r/2:s<c-u*r/2)&&(Tt=!0),Tt)b=!0;else if(St===1?s<d+Rt:s>c-Rt)return-St}else if(s>d+u*(1-i)/2&&s<c-u*(1-i)/2)return tn(t)}return b=b||a,b&&(s<d+u*r/2||s>c-u*r/2)?s>d+u/2?1:-1:0}function tn(o){return Y(f)<Y(o)?1:-1}function en(o){for(var t=o.tagName+o.className+o.src+o.href+o.textContent,e=t.length,n=0;e--;)n+=t.charCodeAt(e);return n.toString(36)}function nn(o){Wt.length=0;for(var t=o.getElementsByTagName(\"input\"),e=t.length;e--;){var n=t[e];n.checked&&Wt.push(n)}}function Xt(o){return setTimeout(o,0)}function te(o){return clearTimeout(o)}Lt&&v(document,\"touchmove\",function(o){(p.active||ut)&&o.cancelable&&o.preventDefault()});p.utils={on:v,off:m,css:h,find:ye,is:function(t,e){return!!W(t,e,t,!1)},extend:ke,throttle:we,closest:W,toggleClass:R,clone:De,index:Y,nextTick:Xt,cancelNextTick:te,detectDirection:Ce,getChild:dt,expando:N};p.get=function(o){return o[N]};p.mount=function(){for(var o=arguments.length,t=new Array(o),e=0;e<o;e++)t[e]=arguments[e];t[0].constructor===Array&&(t=t[0]),t.forEach(function(n){if(!n.prototype||!n.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(n));n.utils&&(p.utils=z(z({},p.utils),n.utils)),Ot.mount(n)})};p.create=function(o,t){return new p(o,t)};p.version=Xe;var T=[],Et,ee,ne=!1,Kt,Zt,Gt,yt;function on(){function o(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var t in this)t.charAt(0)===\"_\"&&typeof this[t]==\"function\"&&(this[t]=this[t].bind(this))}return o.prototype={dragStarted:function(e){var n=e.originalEvent;this.sortable.nativeDraggable?v(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?v(document,\"pointermove\",this._handleFallbackAutoScroll):n.touches?v(document,\"touchmove\",this._handleFallbackAutoScroll):v(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var n=e.originalEvent;!this.options.dragOverBubble&&!n.rootEl&&this._handleAutoScroll(n)},drop:function(){this.sortable.nativeDraggable?m(document,\"dragover\",this._handleAutoScroll):(m(document,\"pointermove\",this._handleFallbackAutoScroll),m(document,\"touchmove\",this._handleFallbackAutoScroll),m(document,\"mousemove\",this._handleFallbackAutoScroll)),me(),Yt(),Be()},nulling:function(){Gt=ee=Et=ne=yt=Kt=Zt=null,T.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,n){var i=this,r=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,l=document.elementFromPoint(r,a);if(Gt=e,n||this.options.forceAutoScrollFallback||Ct||V||wt){Qt(e,this.options,l,n);var s=tt(l,!0);ne&&(!yt||r!==Kt||a!==Zt)&&(yt&&me(),yt=setInterval(function(){var u=tt(document.elementFromPoint(r,a),!0);u!==s&&(s=u,Yt()),Qt(e,i.options,u,n)},10),Kt=r,Zt=a)}else{if(!this.options.bubbleScroll||tt(l,!0)===L()){Yt();return}Qt(e,this.options,tt(l,!1),!1)}}},q(o,{pluginName:\"scroll\",initializeByDefault:!0})}function Yt(){T.forEach(function(o){clearInterval(o.pid)}),T=[]}function me(){clearInterval(yt)}var Qt=we(function(o,t,e,n){if(t.scroll){var i=(o.touches?o.touches[0]:o).clientX,r=(o.touches?o.touches[0]:o).clientY,a=t.scrollSensitivity,l=t.scrollSpeed,s=L(),u=!1,d;ee!==e&&(ee=e,Yt(),Et=t.scroll,d=t.scrollFn,Et===!0&&(Et=tt(e,!0)));var c=0,b=Et;do{var w=b,E=C(w),y=E.top,k=E.bottom,j=E.left,A=E.right,B=E.width,M=E.height,et=void 0,G=void 0,nt=w.scrollWidth,ht=w.scrollHeight,F=h(w),pt=w.scrollLeft,K=w.scrollTop;w===s?(et=B<nt&&(F.overflowX===\"auto\"||F.overflowX===\"scroll\"||F.overflowX===\"visible\"),G=M<ht&&(F.overflowY===\"auto\"||F.overflowY===\"scroll\"||F.overflowY===\"visible\")):(et=B<nt&&(F.overflowX===\"auto\"||F.overflowX===\"scroll\"),G=M<ht&&(F.overflowY===\"auto\"||F.overflowY===\"scroll\"));var gt=et&&(Math.abs(A-i)<=a&&pt+B<nt)-(Math.abs(j-i)<=a&&!!pt),$=G&&(Math.abs(k-r)<=a&&K+M<ht)-(Math.abs(y-r)<=a&&!!K);if(!T[c])for(var ot=0;ot<=c;ot++)T[ot]||(T[ot]={});(T[c].vx!=gt||T[c].vy!=$||T[c].el!==w)&&(T[c].el=w,T[c].vx=gt,T[c].vy=$,clearInterval(T[c].pid),(gt!=0||$!=0)&&(u=!0,T[c].pid=setInterval((function(){n&&this.layer===0&&p.active._onTouchMove(Gt);var mt=T[this.layer].vy?T[this.layer].vy*l:0,Z=T[this.layer].vx?T[this.layer].vx*l:0;typeof d==\"function\"&&d.call(p.dragged.parentNode[N],Z,mt,o,Gt,T[this.layer].el)!==\"continue\"||_e(T[this.layer].el,Z,mt)}).bind({layer:c}),24))),c++}while(t.bubbleScroll&&b!==s&&(b=tt(b,!1)));ne=u}},30),Pe=function(t){var e=t.originalEvent,n=t.putSortable,i=t.dragEl,r=t.activeSortable,a=t.dispatchSortableEvent,l=t.hideGhostForTarget,s=t.unhideGhostForTarget;if(e){var u=n||r;l();var d=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,c=document.elementFromPoint(d.clientX,d.clientY);s(),u&&!u.el.contains(c)&&(a(\"spill\"),this.onSpill({dragEl:i,putSortable:n}))}};function re(){}re.prototype={startIndex:null,dragStart:function(t){var e=t.oldDraggableIndex;this.startIndex=e},onSpill:function(t){var e=t.dragEl,n=t.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();var i=dt(this.sortable.el,this.startIndex,this.options);i?this.sortable.el.insertBefore(e,i):this.sortable.el.appendChild(e),this.sortable.animateAll(),n&&n.animateAll()},drop:Pe};q(re,{pluginName:\"revertOnSpill\"});function ae(){}ae.prototype={onSpill:function(t){var e=t.dragEl,n=t.putSortable,i=n||this.sortable;i.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),i.animateAll()},drop:Pe};q(ae,{pluginName:\"removeOnSpill\"});p.mount(new on);p.mount(ae,re);export{p as S};\n"
  },
  {
    "path": "public/build/assets/story-CrmLJDK_.js",
    "content": "window.onEvent(function(){a()});let e,t;const a=()=>{e=document.querySelector(\".focus\"),t=document.querySelector(\".focus-image\"),t&&(t.addEventListener(\"click\",function(n){const c=t.naturalWidth,i=t.naturalHeight,o=n.clientX-t.getBoundingClientRect().left,d=n.clientY-t.getBoundingClientRect().top,s=o/t.clientWidth*c,l=d/t.clientHeight*i,g=s/c*100,f=l/i*100;u(f,g),document.querySelector('input[name=\"focus_x\"]').value=parseInt(s),document.querySelector('input[name=\"focus_y\"]').value=parseInt(l)}),e.addEventListener(\"click\",function(){e.classList.add(\"hidden\"),document.querySelector('input[name=\"focus_x\"]').value=\"\",document.querySelector('input[name=\"focus_y\"]').value=\"\"}),e.dataset.focusX>0&&e.dataset.focusY>0&&r())},u=(n,c)=>{e.style.top=n+\"%\",e.style.left=c+\"%\",e.classList.remove(\"hidden\")},r=()=>{const n=t.naturalWidth,c=t.naturalHeight;n===0&&setTimeout(r,100),e.classList.remove(\"loading\");const i=e.dataset.focusX/n*100,o=e.dataset.focusY/c*100;u(o,i)};a();\n"
  },
  {
    "path": "public/build/assets/subscription-BGjwpB-C.css",
    "content": ".tiers{table-layout:fixed}.tiers .tier{display:flex;align-items:center;position:relative}.tiers .tier .text{font-size:1.2em}.tiers .tier .text .price{--tw-text-opacity: .5;color:hsl(var(--bc)/var(--tw-text-opacity));font-size:.8em;display:block}.tiers .tier .text .price sup{top:.5em}.tiers .btn-block{white-space:normal!important;word-wrap:break-word}.tiers .align-middle{vertical-align:middle!important}.tiers .fa-check{color:green}.card .card-element{--tw-border-opacity: .2;border:1px solid hsl(var(--bc)/var(--tw-border-opacity));background-color:#fff}.StripeElement{--tw-border-opacity: .2;border:1px solid hsl(var(--bc)/var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));padding:9px 12px;line-height:1.5;box-shadow:none;color:inherit;border-radius:var(--rounded-btn, .5rem)}body #pricing-overview.period-year .price-monthly{display:none}body #pricing-overview.period-year .price-yearly,body #pricing-overview.period-month .price-monthly{display:inline-flex}body #pricing-overview.period-month .price-yearly{display:none}body .btn-block.price-yearly{margin-top:0}body .ribbon{display:block}@media(max-width:991px){table.tiers .tier{text-align:center;display:block}table.tiers .tier .img{text-align:center;justify-content:unset}}.ribbon{width:70px;height:70px;overflow:hidden;position:absolute;display:none}.ribbon span{position:absolute;display:block;width:105px;padding:3px 0;box-shadow:0 2px 5px #0000001a;font:700 8px/1 Lato,sans-serif;text-shadow:0 1px 1px rgba(0,0,0,.2);text-transform:uppercase;text-align:center}.ribbon-top-left{top:-10px;left:-10px}.ribbon-top-left span{right:-25px;top:30px;transform:rotate(-45deg)}.ribbon-top-right{top:0;right:0}.ribbon-top-right span{left:-10px;bottom:35px;transform:rotate(45deg)}.ribbon-bottom-left{bottom:0;left:0}.ribbon-bottom-left span{right:-25px;bottom:30px;transform:rotate(225deg)}.ribbon-bottom-right{bottom:-10px;right:-10px}.ribbon-bottom-right span{left:-25px;bottom:25px;transform:rotate(-225deg)}.alert-coupon{display:none}.valid-coupon .alert-coupon{display:block}\n"
  },
  {
    "path": "public/build/assets/subscription-CbUaAMac.js",
    "content": "let p,L,c,i,d,r,a,y,l,m;const h=document.getElementById(\"subscribe-confirm\"),g=()=>{f(),q(),I(),window.onEvent(function(){b()})},f=()=>{const t=document.getElementById(\"stripe-token\");p=Stripe(t.value),L=p.elements()},b=()=>{if(i=document.querySelector(\".subscription-confirm-button\"),document.getElementById(\"card-element\")){if(!c){let e={base:{color:\"#555555\",fontFamily:'\"Helvetica Neue\", Helvetica, sans-serif',fontSmoothing:\"antialiased\",fontSize:\"14px\",\"::placeholder\":{color:\"#777777\"}},invalid:{color:\"#fa755a\",iconColor:\"#fa755a\"}};c=L.create(\"card\",{hidePostalCode:!0,style:e})}c.mount(\"#card-element\")}document.getElementById(\"subscription-confirm\")?.addEventListener(\"submit\",E),d=document.getElementById(\"coupon-check\"),d&&(r=document.getElementById(\"coupon-success\"),a=document.getElementById(\"coupon-invalid\"),y=document.getElementById(\"coupon\"),l=document.getElementById(\"coupon-validating\"),m=document.querySelector(\".paypal-coupon\"),d.addEventListener(\"change\",v),d.addEventListener(\"focusout\",v));const n=document.querySelector('select[name=\"select-method\"]');n&&n.addEventListener(\"change\",S)},S=t=>{const n=document.querySelector(\"#card-panel\"),e=document.querySelector(\"#paypal-panel\");t.target.value===\"paypal\"?(n.classList.add(\"hidden\"),e.classList.remove(\"hidden\")):(n.classList.remove(\"hidden\"),e.classList.add(\"hidden\"))},v=t=>{const n=t.target,e=n.value,o=n.dataset.url;e||(i.classList.remove(\"btn-disabled\",\"loading\"),i.disabled=!1),l.classList.remove(\"hidden\"),fetch(o+\"?coupon=\"+e).then(s=>s.json()).then(s=>{if(i.classList.remove(\"btn-disabled\",\"loading\"),i.disabled=!1,l.classList.add(\"hidden\"),!s.valid){r.classList.add(\"hidden\"),a.innerHTML=s.error,a.classList.remove(\"hidden\"),y.value=\"\",h.classList.remove(\"valid-coupon\"),m.classList.add(\"hidden\");return}document.getElementById(\"pricing-now\").innerHTML=s.price,a.classList.add(\"hidden\"),r.innerHTML=s.discount,r.classList.remove(\"hidden\"),y.value=s.coupon,h.classList.add(\"valid-coupon\"),m.classList.remove(\"hidden\")}).catch(s=>{l.classList.add(\"hidden\"),s.responseJSON&&(a.innerHTML=s.responseJSON.message,a.classList.remove(\"hidden\")),m.classList.add(\"hidden\")})},E=t=>{const n=t.target;t.preventDefault(),B(t);const e=document.querySelector('input[name=\"subscription-intent-token\"]'),o=document.querySelector(\".alert-error\");o.classList.add(\"hidden\");const s=document.querySelector('input[name=\"payment_id\"]');if(s.value)return n.submit(),!1;p.confirmCardSetup(e.value,{payment_method:{card:c,billing_details:{name:document.querySelector('input[name=\"card-holder-name\"]').value}}}).then((function(u){if(u.error)return i.classList.remove(\"disabled\",\"loading\"),i.disabled=\"\",o.innerHTML=u.error.message,o.classList.remove(\"hidden\"),!1;s.value=u.setupIntent.payment_method,n.submit()}).bind(void 0))},q=()=>{const t=document.getElementById(\"pricing-overview\"),n=document.querySelector('[data-period=\"yearly\"]'),e=document.querySelector('[data-period=\"monthly\"]');document.querySelectorAll(\"[data-period]\")?.forEach(s=>{s.addEventListener(\"click\",function(){this.dataset.period===\"monthly\"?(n.classList.remove(\"bg-base-100\"),n.classList.add(\"text-neutral-content\"),e.classList.add(\"bg-base-100\"),e.classList.remove(\"text-neutral-content\"),t.classList.remove(\"period-year\"),t.classList.add(\"period-month\")):this.dataset.period===\"yearly\"&&(e.classList.remove(\"bg-base-100\"),e.classList.add(\"text-neutral-content\"),n.classList.add(\"bg-base-100\"),n.classList.remove(\"text-neutral-content\"),t.classList.remove(\"period-month\"),t.classList.add(\"period-year\"))})})},B=t=>{const e=t.target.querySelector(\".subscription-confirm-button\");return e.classList.add(\"disabled\",\"loading\"),e.disabled=!0,!0},I=()=>{const t=document.querySelectorAll(\".price-monthly\"),n=document.querySelectorAll(\".price-yearly\");t.forEach(e=>{e.addEventListener(\"click\",()=>{let o={item_id:e.dataset.id,item_name:e.dataset.name,item_price:e.dataset.price};gtag(\"event\",\"select_item\",{items:[o]})})}),n.forEach(e=>{e.addEventListener(\"click\",()=>{let o={item_id:e.dataset.id,item_name:e.dataset.name,item_price:e.dataset.price};gtag(\"event\",\"select_item\",{items:[o]})})})};g();\n"
  },
  {
    "path": "public/build/assets/summernote-DpnuH_QU.js",
    "content": "const n=document.querySelector(\"#summernote-config\");let l=!1;window.initSummernote=function(){document.querySelectorAll(\".html-editor\")?.forEach(function(t){f(t)})};const f=t=>{$(t).summernote({height:\"300px\",maximumImageFileSize:parseInt(n.dataset.filesize)*1024,lang:L(n.dataset.locale),hintSelect:\"next\",placeholder:n.dataset.placeholder,dialogsInBody:n.dataset.dialogs===1,toolbar:[[\"style\",[\"style\"]],[\"font\",[\"bold\",\"italic\",\"underline\",\"strikethrough\",\"clear\"]],[\"color\",[\"color\"]],[\"kanka\",[\"aroba\",n.dataset.bragi!==void 0?\"bragi\":null]],[\"para\",[\"ul\",\"ol\",\"kanka-indent\",\"kanka-outdent\",\"paragraph\"]],[\"table\",[\"table\",\"tableofcontent\"]],[\"insert\",[\"link\",\"picture\",n.dataset.gallery!==void 0?\"summernoteGallery\":null,\"video\",\"embed\",\"hr\"]],[\"view\",[\"fullscreen\",\"codeview\",\"prettify\"]],[\"extensions\",[\"help\"]]],popover:{table:[[\"add\",[\"addRowDown\",\"addRowUp\",\"addColLeft\",\"addColRight\"]],[\"delete\",[\"deleteRow\",\"deleteCol\",\"deleteTable\"]],[\"custom\",[\"tableHeaders\"]],[\"custom\",[\"tableStyles\"]]],image:[[\"image\",[\"resizeFull\",\"resizeHalf\",\"resizeQuarter\",\"resizeNone\"]],[\"float\",[\"floatLeft\",\"floatRight\",\"floatNone\"]],[\"remove\",[\"removeMedia\"]],[\"custom\",[\"imageAttributes\"]]]},callbacks:{onImageUpload:function(e){M($(t),e[0])},onChange:function(){window.entityFormHasUnsavedChanges=!0},onChangeCodeview:function(e,a){$(t).summernote(\"code\",e)}},summernoteGallery:{buttonLabel:'<i class=\"fa-regular fa-folder-image\"></i>',tooltip:n.dataset.galleryTitle,source:{url:n.dataset.gallery,responseDataKey:\"data\",nextPageKey:\"links.next\"},modal:{loadOnScroll:!0,maxHeight:350,title:n.dataset.galleryTitle,close_text:n.dataset.galleryClose,ok_text:n.dataset.galleryAdd,selectAll_text:n.dataset.gallerySelectAll,deselectAll_text:n.dataset.galleryDeselectAll,noImageSelected_msg:n.dataset.galleryError}},bragi:{source:{url:n.dataset.bragi},buttonLabel:'<i class=\"fa-brands fa-pied-piper-hat\"></i>'},hint:[{match:/\\B::(\\S*)$/,search:function(e,a){return e.length<3?[]:m(e,a)},template:function(e){return p(e)},content:function(e){return l=!1,s(e)}},{match:/\\B@(\\S*)$/,search:function(e,a){return e.length<3?[]:c(e,a)},template:function(e){return d(e)},content:function(e){return l=!1,s(e)}},{match:/\\B\\[(\\S[^:]*)$/,search:function(e,a){return e.length<3?[]:c(e,a)},template:function(e){return d(e)},content:function(e){return l=!0,s(e)}},{match:/\\B\\#(\\S*)$/,search:function(e,a){return h(e,a)},template:function(e){return d(e)},content:function(e){return l=!1,s(e)}},{match:/\\B{(\\S[^:]*)$/,search:function(e,a){return g(e,a)},template:function(e){return C(e)},content:function(e){return T(e)}}],keyMap:{pc:{ESC:\"escape\",ENTER:\"insertParagraph\",\"CTRL+Z\":\"undo\",\"CTRL+Y\":\"redo\",TAB:\"tab\",\"SHIFT+TAB\":\"untab\",\"CTRL+B\":\"bold\",\"CTRL+I\":\"italic\",\"CTRL+U\":\"underline\",\"CTRL+SHIFT+I\":\"strikethrough\",\"CTRL+BACKSLASH\":\"removeFormat\",\"CTRL+SHIFT+L\":\"justifyLeft\",\"CTRL+SHIFT+E\":\"justifyCenter\",\"CTRL+SHIFT+R\":\"justifyRight\",\"CTRL+SHIFT+J\":\"justifyFull\",\"CTRL+SHIFT+NUM7\":\"insertUnorderedList\",\"CTRL+SHIFT+NUM8\":\"insertOrderedList\",\"CTRL+LEFTBRACKET\":\"outdent\",\"CTRL+RIGHTBRACKET\":\"indent\",\"CTRL+NUM0\":\"formatPara\",\"CTRL+NUM1\":\"formatH1\",\"CTRL+NUM2\":\"formatH2\",\"CTRL+NUM3\":\"formatH3\",\"CTRL+NUM4\":\"formatH4\",\"CTRL+NUM5\":\"formatH5\",\"CTRL+NUM6\":\"formatH6\",\"CTRL+ENTER\":\"insertHorizontalRule\",\"CTRL+K\":\"linkDialog.show\"},mac:{ESC:\"escape\",ENTER:\"insertParagraph\",\"CMD+Z\":\"undo\",\"CMD+SHIFT+Z\":\"redo\",TAB:\"tab\",\"SHIFT+TAB\":\"untab\",\"CMD+B\":\"bold\",\"CMD+I\":\"italic\",\"CMD+U\":\"underline\",\"CMD+SHIFT+I\":\"strikethrough\",\"CMD+BACKSLASH\":\"removeFormat\",\"CMD+SHIFT+L\":\"justifyLeft\",\"CMD+SHIFT+E\":\"justifyCenter\",\"CMD+SHIFT+R\":\"justifyRight\",\"CMD+SHIFT+J\":\"justifyFull\",\"CMD+SHIFT+NUM7\":\"insertUnorderedList\",\"CMD+SHIFT+NUM8\":\"insertOrderedList\",\"CMD+LEFTBRACKET\":\"outdent\",\"CMD+RIGHTBRACKET\":\"indent\",\"CMD+NUM0\":\"formatPara\",\"CMD+NUM1\":\"formatH1\",\"CMD+NUM2\":\"formatH2\",\"CMD+NUM3\":\"formatH3\",\"CMD+NUM4\":\"formatH4\",\"CMD+NUM5\":\"formatH5\",\"CMD+NUM6\":\"formatH6\",\"CMD+ENTER\":\"insertHorizontalRule\",\"CMD+K\":\"linkDialog.show\"}}})};function c(t,e){axios.get(n.dataset.mention+\"?q=\"+t+\"&new=1\").then(a=>e(a.data)).catch(a=>{a.resonse.status===503&&window.showToast(a.response.data.message,\"error\")})}function m(t,e){axios.get(n.dataset.mention+\"?q=\"+t+\"&posts=1\").then(a=>e(a.data)).catch(a=>{a.resonse.status===503&&window.showToast(a.response.data.message,\"error\")})}function h(t,e){axios.get(n.dataset.months+\"?q=\"+t).then(a=>e(a.data))}function g(t,e){if(!n.dataset.attributes)return!1;axios.get(n.dataset.attributes+\"?q=\"+t).then(a=>e(a.data))}function d(t){let e=t.type?\" (\"+t.type+\")\":\"\";if(t.image){const a=document.createElement(\"div\");return a.classList.add(\"entity-hint\"),a.innerHTML=t.image+'<div class=\"entity-hint-name\">'+t.fullname+e+\"</div>\",a}return t.fullname+e}function p(t){return t.type?d(t):'<div class=\"post flex items-center gap-1\"><i class=\"fa-regular fa-chevron-right\" aria-hidden=\"true\"></i>'+t.fullname+\"</div>\"}function C(t){return t.name+(t.value?\" (\"+t.value+\")\":\"\")}const s=t=>{if(t.id){const e=document.createElement(\"span\");let a=\"[\"+t.model_type+\":\"+t.id+t.fullname+\"]\",i=\"[\"+t.model_type+\":\"+t.id+t.advanced_mention+\"]\";if(t.alias_id)return a=\"[\"+t.model_type+\":\"+t.id+t.advanced_mention+\"|alias:\"+t.alias_id+t.advanced_mention_alias+\"]\",e.innerHTML=a,e;if(n.dataset.advancedMention||l)return e.innerHTML=i,e;const r=document.createElement(\"a\");return r.text=t.fullname,r.href=\"#\",r.classList.add(\"mention\"),r.dataset.name=t.fullname,r.dataset.mention=\"[\"+t.model_type+\":\"+t.id+\"]\",r}else if(t.url){const e=document.createElement(\"a\");return e.text=t.fullname,e.href=t.url,t.tooltip&&(e.title=t.tooltip.replace(/[\"]/g,\"'\"),e.dataset.toggle=\"tooltip\",e.dataset.html=!0),e}else if(t.inject)return t.inject;return t.fullname};function T(t){if(n.dataset.advancedMention)return\"{attribute:\"+t.id+\"}\";const e=document.createElement(\"a\");return e.href=\"#\",e.classList.add(\"attribute\",\"attribute-mention\"),e.text=\"{\"+t.name+\"}\",e.dataset.attribute=\"{attribute:\"+t.id+\"}\",e}function L(t){return t?t==\"he\"?\"he-IL\":t==\"ca\"?\"ca-ES\":t==\"el\"?\"el-GR\":t==\"en\"?\"en-US\":t+\"-\"+t.toUpperCase():\"en-US\"}const M=(t,e)=>{const a=document.querySelector(\"#campaign-imageupload-modal\");if(!n.dataset.galleryUpload){$(a).modal(),console.warn(\"Campaign isn't superboosted\");return}let i=new FormData;i.append(\"file[]\",e),axios.post(n.dataset.galleryUpload,i).then(r=>{t.summernote(\"insertImage\",r.data.url,function(o){o.attr(\"src\",r.data.url),o.attr(\"data-gallery-id\",r.data.id)})}).catch(r=>{let o=document.querySelector(\"#campaign-imageupload-error\"),u=document.querySelector(\"#campaign-imageupload-permission\");o.classList.add(\"hidden\"),u.classList.add(\"hidden\"),r.response.status===422?(o.innerHTML=R(r.response.data.errors),o.classList.remove(\"hidden\")):r.response.status===403&&u.classList.remove(\"hidden\"),$(a).modal()})},R=t=>{let e=\"\";for(let a in t)t.hasOwnProperty(a)&&(e+=t[a]+`\n`);return e};$(document).ready(function(){n&&window.initSummernote()});\n"
  },
  {
    "path": "public/build/assets/theme-builder-Cvbh2cpO.js",
    "content": "import{t as D}from\"./tippy.esm-CnBRltuW.js\";import{C as P}from\"./coloris-DsKOFKq5.js\";var A={grad:.9,turn:360,rad:360/(2*Math.PI)},h=function(e){return typeof e==\"string\"?e.length>0:typeof e==\"number\"},u=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n+0},d=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e>t?e:t},$=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},k=function(e){return{r:d(e.r,0,255),g:d(e.g,0,255),b:d(e.b,0,255),a:d(e.a)}},v=function(e){return{r:u(e.r),g:u(e.g),b:u(e.b),a:u(e.a,3)}},B=/^#([0-9a-f]{3,8})$/i,f=function(e){var t=e.toString(16);return t.length<2?\"0\"+t:t},q=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,i=Math.max(t,n,r),s=i-Math.min(t,n,r),a=s?i===t?(n-r)/s:i===n?2+(r-t)/s:4+(t-n)/s:0;return{h:60*(a<0?a+6:a),s:i?s/i*100:0,v:i/255*100,a:o}},L=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var i=Math.floor(t),s=r*(1-n),a=r*(1-(t-i)*n),b=r*(1-(1-t+i)*n),m=i%6;return{r:255*[r,a,s,s,b,r][m],g:255*[b,r,r,a,s,s][m],b:255*[s,s,b,r,r,a][m],a:o}},S=function(e){return{h:$(e.h),s:d(e.s,0,100),l:d(e.l,0,100),a:d(e.a)}},w=function(e){return{h:u(e.h),s:u(e.s),l:u(e.l),a:u(e.a,3)}},I=function(e){return L((n=(t=e).s,{h:t.h,s:(n*=((r=t.l)<50?r:100-r)/100)>0?2*n/(r+n)*100:0,v:r+n,a:t.a}));var t,n,r},p=function(e){return{h:(t=q(e)).h,s:(o=(200-(n=t.s))*(r=t.v)/100)>0&&o<200?n*r/100/(o<=100?o:200-o)*100:0,l:o/2,a:t.a};var t,n,r,o},J=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,R=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,T=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,F=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,E={string:[[function(e){var t=B.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?u(parseInt(e[3]+e[3],16)/255,2):1}:e.length===6||e.length===8?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:e.length===8?u(parseInt(e.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(e){var t=T.exec(e)||F.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:k({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(e){var t=J.exec(e)||R.exec(e);if(!t)return null;var n,r,o=S({h:(n=t[1],r=t[2],r===void 0&&(r=\"deg\"),Number(n)*(A[r]||1)),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)});return I(o)},\"hsl\"]],object:[[function(e){var t=e.r,n=e.g,r=e.b,o=e.a,i=o===void 0?1:o;return h(t)&&h(n)&&h(r)?k({r:Number(t),g:Number(n),b:Number(r),a:Number(i)}):null},\"rgb\"],[function(e){var t=e.h,n=e.s,r=e.l,o=e.a,i=o===void 0?1:o;if(!h(t)||!h(n)||!h(r))return null;var s=S({h:Number(t),s:Number(n),l:Number(r),a:Number(i)});return I(s)},\"hsl\"],[function(e){var t=e.h,n=e.s,r=e.v,o=e.a,i=o===void 0?1:o;if(!h(t)||!h(n)||!h(r))return null;var s=(function(a){return{h:$(a.h),s:d(a.s,0,100),v:d(a.v,0,100),a:d(a.a)}})({h:Number(t),s:Number(n),v:Number(r),a:Number(i)});return L(s)},\"hsv\"]]},C=function(e,t){for(var n=0;n<t.length;n++){var r=t[n][0](e);if(r)return[r,t[n][1]]}return[null,void 0]},V=function(e){return typeof e==\"string\"?C(e.trim(),E.string):typeof e==\"object\"&&e!==null?C(e,E.object):[null,void 0]},y=function(e,t){var n=p(e);return{h:n.h,s:d(n.s+100*t,0,100),l:n.l,a:n.a}},x=function(e){return(299*e.r+587*e.g+114*e.b)/1e3/255},M=function(e,t){var n=p(e);return{h:n.h,s:n.s,l:d(n.l+100*t,0,100),a:n.a}},j=(function(){function e(t){this.parsed=V(t)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return e.prototype.isValid=function(){return this.parsed!==null},e.prototype.brightness=function(){return u(x(this.rgba),2)},e.prototype.isDark=function(){return x(this.rgba)<.5},e.prototype.isLight=function(){return x(this.rgba)>=.5},e.prototype.toHex=function(){return t=v(this.rgba),n=t.r,r=t.g,o=t.b,s=(i=t.a)<1?f(u(255*i)):\"\",\"#\"+f(n)+f(r)+f(o)+s;var t,n,r,o,i,s},e.prototype.toRgb=function(){return v(this.rgba)},e.prototype.toRgbString=function(){return t=v(this.rgba),n=t.r,r=t.g,o=t.b,(i=t.a)<1?\"rgba(\"+n+\", \"+r+\", \"+o+\", \"+i+\")\":\"rgb(\"+n+\", \"+r+\", \"+o+\")\";var t,n,r,o,i},e.prototype.toHsl=function(){return w(p(this.rgba))},e.prototype.toHslString=function(){return t=w(p(this.rgba)),n=t.h,r=t.s,o=t.l,(i=t.a)<1?\"hsla(\"+n+\", \"+r+\"%, \"+o+\"%, \"+i+\")\":\"hsl(\"+n+\", \"+r+\"%, \"+o+\"%)\";var t,n,r,o,i},e.prototype.toHsv=function(){return t=q(this.rgba),{h:u(t.h),s:u(t.s),v:u(t.v),a:u(t.a,3)};var t},e.prototype.invert=function(){return l({r:255-(t=this.rgba).r,g:255-t.g,b:255-t.b,a:t.a});var t},e.prototype.saturate=function(t){return t===void 0&&(t=.1),l(y(this.rgba,t))},e.prototype.desaturate=function(t){return t===void 0&&(t=.1),l(y(this.rgba,-t))},e.prototype.grayscale=function(){return l(y(this.rgba,-1))},e.prototype.lighten=function(t){return t===void 0&&(t=.1),l(M(this.rgba,t))},e.prototype.darken=function(t){return t===void 0&&(t=.1),l(M(this.rgba,-t))},e.prototype.rotate=function(t){return t===void 0&&(t=15),this.hue(this.hue()+t)},e.prototype.alpha=function(t){return typeof t==\"number\"?l({r:(n=this.rgba).r,g:n.g,b:n.b,a:t}):u(this.rgba.a,3);var n},e.prototype.hue=function(t){var n=p(this.rgba);return typeof t==\"number\"?l({h:t,s:n.s,l:n.l,a:n.a}):u(n.h)},e.prototype.isEqual=function(t){return this.toHex()===l(t).toHex()},e})(),l=function(e){return e instanceof j?e:new j(e)};const H=document.getElementById(\"field-theme\");let g={};const z=()=>{K(),P({el:\".picker\",format:\"hsl\",wrap:!1,defaultColor:\"#cccccc\"}),document.querySelectorAll(\".picker\").forEach(t=>{t.addEventListener(\"click\",function(n){this.value=window.getComputedStyle(t).backgroundColor})}),document.addEventListener(\"coloris:pick\",t=>{G(t)});const e=document.getElementById(\"theme-builder\");e.onsubmit=t=>{const n=document.getElementById(\"form-submit-main\");return n.classList.add(\"loading\"),n.setAttribute(\"disabled\",\"disabled\"),H.value=JSON.stringify(g),!0}},G=e=>{Q(l(e.detail.color),e.detail.currentEl.dataset.target),e.detail.currentEl.value=\"\"},K=()=>{let e=H.value;if(!e){console.log(\"no config\");return}let t=JSON.parse(e);Object.entries(t).forEach(([n,r])=>{g[n]=r})},Q=(e,t)=>{let n=e.toHslString().replace(\"hsl(\",\"\").replaceAll(\",\",\"\").replace(\")\",\"\"),r=N(e.toHslString()).toHsl(),o=O(e.toHslString()).toHsl(),i=[\"a\",\"s\",\"p\",\"n\",\"si\"],s=[\"in\",\"su\",\"wa\",\"er\"];if(i.indexOf(t)!==-1)c(t,n),c(t+\"f\",r.h+\" \"+r.s+\"% \"+r.l+\"%\"),c(t+\"c\",o.h+\" \"+o.s+\"% \"+o.l+\"%\");else if(s.indexOf(t)!==-1)c(t,n),c(t+\"c\",o.h+\" \"+o.s+\"% \"+o.l+\"%\");else if(t===\"b\"){let a=N(e.toHslString(),.1).toHsl(),b=N(e.toHslString(),.2).toHsl();c(t+\"1\",n),c(t+\"2\",a.h+\" \"+a.s+\"% \"+a.l+\"%\"),c(t+\"3\",b.h+\" \"+b.s+\"% \"+b.l+\"%\"),c(t+\"c\",o.h+\" \"+o.s+\"% \"+o.l+\"%\")}else if(t===\"w\"){let a=O(e.toHslString());c(\"content-wrapper-background\",e.toHex()),c(\"theme-main-text\",\"\"+a.toHex()),c(\"header-text\",\"\"+a.toHex())}},c=(e,t)=>{g[e]=t,document.documentElement.style.setProperty(\"--\"+e,t),H.value=JSON.stringify(g)},O=(e,t=.8)=>l(e).isDark()?l(e).lighten(t):l(e).darken(t),N=(e,t=.2)=>l(e).darken(t),U=()=>{let e=document.querySelector('[data-toggle=\"tooltip-demo\"]');D(e,{content:'<div class=\"dd-menu flex flex-col gap-1 max-w-2xl\">'+W()+\"</div>\",theme:\"kanka\",delay:250,placement:e.dataset.direction??\"bottom\",arrow:!0,allowHTML:!0,interactive:!0})},W=()=>{let e=\"\";return e+='<div class=\"tooltip-content p-1\"><div class=\"flex gap-2 items-center mb-1\"><div class=\"grow entity-names\"> <span class=\"entity-name text-xl block\">Demo tooltip</span><span class=\"entity-subtitle text-base block\">Subtitle</span></div></div><div class=\"tooltip-text text-sm\"><p>Rutrum adipiscing enim pellentesque mi rutrum lacus eget amet nisl dolor maecenas adipiscing diam orci commodo suspendisse tincidunt tristique gravida leo arcu condimentum fusce nunc.</p></div></div>',e};z();U();\n"
  },
  {
    "path": "public/build/assets/tinymce-C7wRrakS.css",
    "content": ".mention,.attribute{background-color:var(--mention-background, hsl(var(--p)/1));padding:3px 5px;border-radius:.25rem;color:var(--mention-text, hsl(var(--pc)/1));text-decoration:none}.attribute{font-style:italic}img{display:block}\n"
  },
  {
    "path": "public/build/assets/tippy.esm-CnBRltuW.js",
    "content": "var H=\"top\",X=\"bottom\",Y=\"right\",N=\"left\",mt=\"auto\",Ie=[H,X,Y,N],Ae=\"start\",ke=\"end\",lr=\"clippingParents\",Ut=\"viewport\",Pe=\"popper\",dr=\"reference\",Et=Ie.reduce(function(e,t){return e.concat([t+\"-\"+Ae,t+\"-\"+ke])},[]),Ft=[].concat(Ie,[mt]).reduce(function(e,t){return e.concat([t,t+\"-\"+Ae,t+\"-\"+ke])},[]),vr=\"beforeRead\",mr=\"read\",hr=\"afterRead\",gr=\"beforeMain\",yr=\"main\",br=\"afterMain\",wr=\"beforeWrite\",Or=\"write\",xr=\"afterWrite\",Ar=[vr,mr,hr,gr,yr,br,wr,Or,xr];function te(e){return e?(e.nodeName||\"\").toLowerCase():null}function F(e){if(e==null)return window;if(e.toString()!==\"[object Window]\"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function he(e){var t=F(e).Element;return e instanceof t||e instanceof Element}function z(e){var t=F(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function ht(e){if(typeof ShadowRoot>\"u\")return!1;var t=F(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function Er(e){var t=e.state;Object.keys(t.elements).forEach(function(r){var i=t.styles[r]||{},o=t.attributes[r]||{},s=t.elements[r];!z(s)||!te(s)||(Object.assign(s.style,i),Object.keys(o).forEach(function(f){var c=o[f];c===!1?s.removeAttribute(f):s.setAttribute(f,c===!0?\"\":c)}))})}function Tr(e){var t=e.state,r={popper:{position:t.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(t.elements.popper.style,r.popper),t.styles=r,t.elements.arrow&&Object.assign(t.elements.arrow.style,r.arrow),function(){Object.keys(t.elements).forEach(function(i){var o=t.elements[i],s=t.attributes[i]||{},f=Object.keys(t.styles.hasOwnProperty(i)?t.styles[i]:r[i]),c=f.reduce(function(u,l){return u[l]=\"\",u},{});!z(o)||!te(o)||(Object.assign(o.style,c),Object.keys(s).forEach(function(u){o.removeAttribute(u)}))})}}const qt={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:Er,effect:Tr,requires:[\"computeStyles\"]};function ee(e){return e.split(\"-\")[0]}var me=Math.max,et=Math.min,Ee=Math.round;function pt(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+\"/\"+t.version}).join(\" \"):navigator.userAgent}function zt(){return!/^((?!chrome|android).)*safari/i.test(pt())}function Te(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!1);var i=e.getBoundingClientRect(),o=1,s=1;t&&z(e)&&(o=e.offsetWidth>0&&Ee(i.width)/e.offsetWidth||1,s=e.offsetHeight>0&&Ee(i.height)/e.offsetHeight||1);var f=he(e)?F(e):window,c=f.visualViewport,u=!zt()&&r,l=(i.left+(u&&c?c.offsetLeft:0))/o,p=(i.top+(u&&c?c.offsetTop:0))/s,b=i.width/o,x=i.height/s;return{width:b,height:x,top:p,right:l+b,bottom:p+x,left:l,x:l,y:p}}function gt(e){var t=Te(e),r=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-r)<=1&&(r=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:r,height:i}}function Xt(e,t){var r=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(r&&ht(r)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function ae(e){return F(e).getComputedStyle(e)}function Dr(e){return[\"table\",\"td\",\"th\"].indexOf(te(e))>=0}function fe(e){return((he(e)?e.ownerDocument:e.document)||window.document).documentElement}function rt(e){return te(e)===\"html\"?e:e.assignedSlot||e.parentNode||(ht(e)?e.host:null)||fe(e)}function Tt(e){return!z(e)||ae(e).position===\"fixed\"?null:e.offsetParent}function Cr(e){var t=/firefox/i.test(pt()),r=/Trident/i.test(pt());if(r&&z(e)){var i=ae(e);if(i.position===\"fixed\")return null}var o=rt(e);for(ht(o)&&(o=o.host);z(o)&&[\"html\",\"body\"].indexOf(te(o))<0;){var s=ae(o);if(s.transform!==\"none\"||s.perspective!==\"none\"||s.contain===\"paint\"||[\"transform\",\"perspective\"].indexOf(s.willChange)!==-1||t&&s.willChange===\"filter\"||t&&s.filter&&s.filter!==\"none\")return o;o=o.parentNode}return null}function He(e){for(var t=F(e),r=Tt(e);r&&Dr(r)&&ae(r).position===\"static\";)r=Tt(r);return r&&(te(r)===\"html\"||te(r)===\"body\"&&ae(r).position===\"static\")?t:r||Cr(e)||t}function yt(e){return[\"top\",\"bottom\"].indexOf(e)>=0?\"x\":\"y\"}function Be(e,t,r){return me(e,et(t,r))}function Lr(e,t,r){var i=Be(e,t,r);return i>r?r:i}function Yt(){return{top:0,right:0,bottom:0,left:0}}function _t(e){return Object.assign({},Yt(),e)}function Gt(e,t){return t.reduce(function(r,i){return r[i]=e,r},{})}var Sr=function(t,r){return t=typeof t==\"function\"?t(Object.assign({},r.rects,{placement:r.placement})):t,_t(typeof t!=\"number\"?t:Gt(t,Ie))};function Rr(e){var t,r=e.state,i=e.name,o=e.options,s=r.elements.arrow,f=r.modifiersData.popperOffsets,c=ee(r.placement),u=yt(c),l=[N,Y].indexOf(c)>=0,p=l?\"height\":\"width\";if(!(!s||!f)){var b=Sr(o.padding,r),x=gt(s),h=u===\"y\"?H:N,w=u===\"y\"?X:Y,g=r.rects.reference[p]+r.rects.reference[u]-f[u]-r.rects.popper[p],y=f[u]-r.rects.reference[u],E=He(s),D=E?u===\"y\"?E.clientHeight||0:E.clientWidth||0:0,L=g/2-y/2,n=b[h],A=D-x[p]-b[w],v=D/2-x[p]/2+L,C=Be(n,v,A),B=u;r.modifiersData[i]=(t={},t[B]=C,t.centerOffset=C-v,t)}}function Mr(e){var t=e.state,r=e.options,i=r.element,o=i===void 0?\"[data-popper-arrow]\":i;o!=null&&(typeof o==\"string\"&&(o=t.elements.popper.querySelector(o),!o)||Xt(t.elements.popper,o)&&(t.elements.arrow=o))}const Pr={name:\"arrow\",enabled:!0,phase:\"main\",fn:Rr,effect:Mr,requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function De(e){return e.split(\"-\")[1]}var Br={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function jr(e,t){var r=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:Ee(r*o)/o||0,y:Ee(i*o)/o||0}}function Dt(e){var t,r=e.popper,i=e.popperRect,o=e.placement,s=e.variation,f=e.offsets,c=e.position,u=e.gpuAcceleration,l=e.adaptive,p=e.roundOffsets,b=e.isFixed,x=f.x,h=x===void 0?0:x,w=f.y,g=w===void 0?0:w,y=typeof p==\"function\"?p({x:h,y:g}):{x:h,y:g};h=y.x,g=y.y;var E=f.hasOwnProperty(\"x\"),D=f.hasOwnProperty(\"y\"),L=N,n=H,A=window;if(l){var v=He(r),C=\"clientHeight\",B=\"clientWidth\";if(v===F(r)&&(v=fe(r),ae(v).position!==\"static\"&&c===\"absolute\"&&(C=\"scrollHeight\",B=\"scrollWidth\")),v=v,o===H||(o===N||o===Y)&&s===ke){n=X;var P=b&&v===A&&A.visualViewport?A.visualViewport.height:v[C];g-=P-i.height,g*=u?1:-1}if(o===N||(o===H||o===X)&&s===ke){L=Y;var R=b&&v===A&&A.visualViewport?A.visualViewport.width:v[B];h-=R-i.width,h*=u?1:-1}}var j=Object.assign({position:c},l&&Br),M=p===!0?jr({x:h,y:g},F(r)):{x:h,y:g};if(h=M.x,g=M.y,u){var S;return Object.assign({},j,(S={},S[n]=D?\"0\":\"\",S[L]=E?\"0\":\"\",S.transform=(A.devicePixelRatio||1)<=1?\"translate(\"+h+\"px, \"+g+\"px)\":\"translate3d(\"+h+\"px, \"+g+\"px, 0)\",S))}return Object.assign({},j,(t={},t[n]=D?g+\"px\":\"\",t[L]=E?h+\"px\":\"\",t.transform=\"\",t))}function $r(e){var t=e.state,r=e.options,i=r.gpuAcceleration,o=i===void 0?!0:i,s=r.adaptive,f=s===void 0?!0:s,c=r.roundOffsets,u=c===void 0?!0:c,l={placement:ee(t.placement),variation:De(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy===\"fixed\"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Dt(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:f,roundOffsets:u})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Dt(Object.assign({},l,{offsets:t.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:u})))),t.attributes.popper=Object.assign({},t.attributes.popper,{\"data-popper-placement\":t.placement})}const kr={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:$r,data:{}};var Je={passive:!0};function Vr(e){var t=e.state,r=e.instance,i=e.options,o=i.scroll,s=o===void 0?!0:o,f=i.resize,c=f===void 0?!0:f,u=F(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&l.forEach(function(p){p.addEventListener(\"scroll\",r.update,Je)}),c&&u.addEventListener(\"resize\",r.update,Je),function(){s&&l.forEach(function(p){p.removeEventListener(\"scroll\",r.update,Je)}),c&&u.removeEventListener(\"resize\",r.update,Je)}}const Ir={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:Vr,data:{}};var Hr={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function Ze(e){return e.replace(/left|right|bottom|top/g,function(t){return Hr[t]})}var Nr={start:\"end\",end:\"start\"};function Ct(e){return e.replace(/start|end/g,function(t){return Nr[t]})}function bt(e){var t=F(e),r=t.pageXOffset,i=t.pageYOffset;return{scrollLeft:r,scrollTop:i}}function wt(e){return Te(fe(e)).left+bt(e).scrollLeft}function Wr(e,t){var r=F(e),i=fe(e),o=r.visualViewport,s=i.clientWidth,f=i.clientHeight,c=0,u=0;if(o){s=o.width,f=o.height;var l=zt();(l||!l&&t===\"fixed\")&&(c=o.offsetLeft,u=o.offsetTop)}return{width:s,height:f,x:c+wt(e),y:u}}function Ur(e){var t,r=fe(e),i=bt(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=me(r.scrollWidth,r.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),f=me(r.scrollHeight,r.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),c=-i.scrollLeft+wt(e),u=-i.scrollTop;return ae(o||r).direction===\"rtl\"&&(c+=me(r.clientWidth,o?o.clientWidth:0)-s),{width:s,height:f,x:c,y:u}}function Ot(e){var t=ae(e),r=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(r+o+i)}function Kt(e){return[\"html\",\"body\",\"#document\"].indexOf(te(e))>=0?e.ownerDocument.body:z(e)&&Ot(e)?e:Kt(rt(e))}function je(e,t){var r;t===void 0&&(t=[]);var i=Kt(e),o=i===((r=e.ownerDocument)==null?void 0:r.body),s=F(i),f=o?[s].concat(s.visualViewport||[],Ot(i)?i:[]):i,c=t.concat(f);return o?c:c.concat(je(rt(f)))}function lt(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Fr(e,t){var r=Te(e,!1,t===\"fixed\");return r.top=r.top+e.clientTop,r.left=r.left+e.clientLeft,r.bottom=r.top+e.clientHeight,r.right=r.left+e.clientWidth,r.width=e.clientWidth,r.height=e.clientHeight,r.x=r.left,r.y=r.top,r}function Lt(e,t,r){return t===Ut?lt(Wr(e,r)):he(t)?Fr(t,r):lt(Ur(fe(e)))}function qr(e){var t=je(rt(e)),r=[\"absolute\",\"fixed\"].indexOf(ae(e).position)>=0,i=r&&z(e)?He(e):e;return he(i)?t.filter(function(o){return he(o)&&Xt(o,i)&&te(o)!==\"body\"}):[]}function zr(e,t,r,i){var o=t===\"clippingParents\"?qr(e):[].concat(t),s=[].concat(o,[r]),f=s[0],c=s.reduce(function(u,l){var p=Lt(e,l,i);return u.top=me(p.top,u.top),u.right=et(p.right,u.right),u.bottom=et(p.bottom,u.bottom),u.left=me(p.left,u.left),u},Lt(e,f,i));return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c}function Jt(e){var t=e.reference,r=e.element,i=e.placement,o=i?ee(i):null,s=i?De(i):null,f=t.x+t.width/2-r.width/2,c=t.y+t.height/2-r.height/2,u;switch(o){case H:u={x:f,y:t.y-r.height};break;case X:u={x:f,y:t.y+t.height};break;case Y:u={x:t.x+t.width,y:c};break;case N:u={x:t.x-r.width,y:c};break;default:u={x:t.x,y:t.y}}var l=o?yt(o):null;if(l!=null){var p=l===\"y\"?\"height\":\"width\";switch(s){case Ae:u[l]=u[l]-(t[p]/2-r[p]/2);break;case ke:u[l]=u[l]+(t[p]/2-r[p]/2);break}}return u}function Ve(e,t){t===void 0&&(t={});var r=t,i=r.placement,o=i===void 0?e.placement:i,s=r.strategy,f=s===void 0?e.strategy:s,c=r.boundary,u=c===void 0?lr:c,l=r.rootBoundary,p=l===void 0?Ut:l,b=r.elementContext,x=b===void 0?Pe:b,h=r.altBoundary,w=h===void 0?!1:h,g=r.padding,y=g===void 0?0:g,E=_t(typeof y!=\"number\"?y:Gt(y,Ie)),D=x===Pe?dr:Pe,L=e.rects.popper,n=e.elements[w?D:x],A=zr(he(n)?n:n.contextElement||fe(e.elements.popper),u,p,f),v=Te(e.elements.reference),C=Jt({reference:v,element:L,placement:o}),B=lt(Object.assign({},L,C)),P=x===Pe?B:v,R={top:A.top-P.top+E.top,bottom:P.bottom-A.bottom+E.bottom,left:A.left-P.left+E.left,right:P.right-A.right+E.right},j=e.modifiersData.offset;if(x===Pe&&j){var M=j[o];Object.keys(R).forEach(function(S){var W=[Y,X].indexOf(S)>=0?1:-1,U=[H,X].indexOf(S)>=0?\"y\":\"x\";R[S]+=M[U]*W})}return R}function Xr(e,t){t===void 0&&(t={});var r=t,i=r.placement,o=r.boundary,s=r.rootBoundary,f=r.padding,c=r.flipVariations,u=r.allowedAutoPlacements,l=u===void 0?Ft:u,p=De(i),b=p?c?Et:Et.filter(function(w){return De(w)===p}):Ie,x=b.filter(function(w){return l.indexOf(w)>=0});x.length===0&&(x=b);var h=x.reduce(function(w,g){return w[g]=Ve(e,{placement:g,boundary:o,rootBoundary:s,padding:f})[ee(g)],w},{});return Object.keys(h).sort(function(w,g){return h[w]-h[g]})}function Yr(e){if(ee(e)===mt)return[];var t=Ze(e);return[Ct(e),t,Ct(t)]}function _r(e){var t=e.state,r=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var o=r.mainAxis,s=o===void 0?!0:o,f=r.altAxis,c=f===void 0?!0:f,u=r.fallbackPlacements,l=r.padding,p=r.boundary,b=r.rootBoundary,x=r.altBoundary,h=r.flipVariations,w=h===void 0?!0:h,g=r.allowedAutoPlacements,y=t.options.placement,E=ee(y),D=E===y,L=u||(D||!w?[Ze(y)]:Yr(y)),n=[y].concat(L).reduce(function(re,_){return re.concat(ee(_)===mt?Xr(t,{placement:_,boundary:p,rootBoundary:b,padding:l,flipVariations:w,allowedAutoPlacements:g}):_)},[]),A=t.rects.reference,v=t.rects.popper,C=new Map,B=!0,P=n[0],R=0;R<n.length;R++){var j=n[R],M=ee(j),S=De(j)===Ae,W=[H,X].indexOf(M)>=0,U=W?\"width\":\"height\",k=Ve(t,{placement:j,boundary:p,rootBoundary:b,altBoundary:x,padding:l}),V=W?S?Y:N:S?X:H;A[U]>v[U]&&(V=Ze(V));var $=Ze(V),K=[];if(s&&K.push(k[M]<=0),c&&K.push(k[V]<=0,k[$]<=0),K.every(function(re){return re})){P=j,B=!1;break}C.set(j,K)}if(B)for(var J=w?3:1,ce=function(_){var ne=n.find(function(ge){var ie=C.get(ge);if(ie)return ie.slice(0,_).every(function(ye){return ye})});if(ne)return P=ne,\"break\"},Q=J;Q>0;Q--){var pe=ce(Q);if(pe===\"break\")break}t.placement!==P&&(t.modifiersData[i]._skip=!0,t.placement=P,t.reset=!0)}}const Gr={name:\"flip\",enabled:!0,phase:\"main\",fn:_r,requiresIfExists:[\"offset\"],data:{_skip:!1}};function St(e,t,r){return r===void 0&&(r={x:0,y:0}),{top:e.top-t.height-r.y,right:e.right-t.width+r.x,bottom:e.bottom-t.height+r.y,left:e.left-t.width-r.x}}function Rt(e){return[H,Y,X,N].some(function(t){return e[t]>=0})}function Kr(e){var t=e.state,r=e.name,i=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,f=Ve(t,{elementContext:\"reference\"}),c=Ve(t,{altBoundary:!0}),u=St(f,i),l=St(c,o,s),p=Rt(u),b=Rt(l);t.modifiersData[r]={referenceClippingOffsets:u,popperEscapeOffsets:l,isReferenceHidden:p,hasPopperEscaped:b},t.attributes.popper=Object.assign({},t.attributes.popper,{\"data-popper-reference-hidden\":p,\"data-popper-escaped\":b})}const Jr={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:Kr};function Qr(e,t,r){var i=ee(e),o=[N,H].indexOf(i)>=0?-1:1,s=typeof r==\"function\"?r(Object.assign({},t,{placement:e})):r,f=s[0],c=s[1];return f=f||0,c=(c||0)*o,[N,Y].indexOf(i)>=0?{x:c,y:f}:{x:f,y:c}}function Zr(e){var t=e.state,r=e.options,i=e.name,o=r.offset,s=o===void 0?[0,0]:o,f=Ft.reduce(function(p,b){return p[b]=Qr(b,t.rects,s),p},{}),c=f[t.placement],u=c.x,l=c.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=u,t.modifiersData.popperOffsets.y+=l),t.modifiersData[i]=f}const en={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:Zr};function tn(e){var t=e.state,r=e.name;t.modifiersData[r]=Jt({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}const rn={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:tn,data:{}};function nn(e){return e===\"x\"?\"y\":\"x\"}function on(e){var t=e.state,r=e.options,i=e.name,o=r.mainAxis,s=o===void 0?!0:o,f=r.altAxis,c=f===void 0?!1:f,u=r.boundary,l=r.rootBoundary,p=r.altBoundary,b=r.padding,x=r.tether,h=x===void 0?!0:x,w=r.tetherOffset,g=w===void 0?0:w,y=Ve(t,{boundary:u,rootBoundary:l,padding:b,altBoundary:p}),E=ee(t.placement),D=De(t.placement),L=!D,n=yt(E),A=nn(n),v=t.modifiersData.popperOffsets,C=t.rects.reference,B=t.rects.popper,P=typeof g==\"function\"?g(Object.assign({},t.rects,{placement:t.placement})):g,R=typeof P==\"number\"?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),j=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,M={x:0,y:0};if(v){if(s){var S,W=n===\"y\"?H:N,U=n===\"y\"?X:Y,k=n===\"y\"?\"height\":\"width\",V=v[n],$=V+y[W],K=V-y[U],J=h?-B[k]/2:0,ce=D===Ae?C[k]:B[k],Q=D===Ae?-B[k]:-C[k],pe=t.elements.arrow,re=h&&pe?gt(pe):{width:0,height:0},_=t.modifiersData[\"arrow#persistent\"]?t.modifiersData[\"arrow#persistent\"].padding:Yt(),ne=_[W],ge=_[U],ie=Be(0,C[k],re[k]),ye=L?C[k]/2-J-ie-ne-R.mainAxis:ce-ie-ne-R.mainAxis,se=L?-C[k]/2+J+ie+ge+R.mainAxis:Q+ie+ge+R.mainAxis,be=t.elements.arrow&&He(t.elements.arrow),Ne=be?n===\"y\"?be.clientTop||0:be.clientLeft||0:0,Ce=(S=j?.[n])!=null?S:0,We=V+ye-Ce-Ne,Ue=V+se-Ce,Le=Be(h?et($,We):$,V,h?me(K,Ue):K);v[n]=Le,M[n]=Le-V}if(c){var Se,Fe=n===\"x\"?H:N,qe=n===\"x\"?X:Y,oe=v[A],ue=A===\"y\"?\"height\":\"width\",Re=oe+y[Fe],le=oe-y[qe],Me=[H,N].indexOf(E)!==-1,ze=(Se=j?.[A])!=null?Se:0,Xe=Me?Re:oe-C[ue]-B[ue]-ze+R.altAxis,Ye=Me?oe+C[ue]+B[ue]-ze-R.altAxis:le,_e=h&&Me?Lr(Xe,oe,Ye):Be(h?Xe:Re,oe,h?Ye:le);v[A]=_e,M[A]=_e-oe}t.modifiersData[i]=M}}const an={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:on,requiresIfExists:[\"offset\"]};function sn(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function un(e){return e===F(e)||!z(e)?bt(e):sn(e)}function fn(e){var t=e.getBoundingClientRect(),r=Ee(t.width)/e.offsetWidth||1,i=Ee(t.height)/e.offsetHeight||1;return r!==1||i!==1}function cn(e,t,r){r===void 0&&(r=!1);var i=z(t),o=z(t)&&fn(t),s=fe(t),f=Te(e,o,r),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(i||!i&&!r)&&((te(t)!==\"body\"||Ot(s))&&(c=un(t)),z(t)?(u=Te(t,!0),u.x+=t.clientLeft,u.y+=t.clientTop):s&&(u.x=wt(s))),{x:f.left+c.scrollLeft-u.x,y:f.top+c.scrollTop-u.y,width:f.width,height:f.height}}function pn(e){var t=new Map,r=new Set,i=[];e.forEach(function(s){t.set(s.name,s)});function o(s){r.add(s.name);var f=[].concat(s.requires||[],s.requiresIfExists||[]);f.forEach(function(c){if(!r.has(c)){var u=t.get(c);u&&o(u)}}),i.push(s)}return e.forEach(function(s){r.has(s.name)||o(s)}),i}function ln(e){var t=pn(e);return Ar.reduce(function(r,i){return r.concat(t.filter(function(o){return o.phase===i}))},[])}function dn(e){var t;return function(){return t||(t=new Promise(function(r){Promise.resolve().then(function(){t=void 0,r(e())})})),t}}function vn(e){var t=e.reduce(function(r,i){var o=r[i.name];return r[i.name]=o?Object.assign({},o,i,{options:Object.assign({},o.options,i.options),data:Object.assign({},o.data,i.data)}):i,r},{});return Object.keys(t).map(function(r){return t[r]})}var Mt={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Pt(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return!t.some(function(i){return!(i&&typeof i.getBoundingClientRect==\"function\")})}function mn(e){e===void 0&&(e={});var t=e,r=t.defaultModifiers,i=r===void 0?[]:r,o=t.defaultOptions,s=o===void 0?Mt:o;return function(c,u,l){l===void 0&&(l=s);var p={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Mt,s),modifiersData:{},elements:{reference:c,popper:u},attributes:{},styles:{}},b=[],x=!1,h={state:p,setOptions:function(E){var D=typeof E==\"function\"?E(p.options):E;g(),p.options=Object.assign({},s,p.options,D),p.scrollParents={reference:he(c)?je(c):c.contextElement?je(c.contextElement):[],popper:je(u)};var L=ln(vn([].concat(i,p.options.modifiers)));return p.orderedModifiers=L.filter(function(n){return n.enabled}),w(),h.update()},forceUpdate:function(){if(!x){var E=p.elements,D=E.reference,L=E.popper;if(Pt(D,L)){p.rects={reference:cn(D,He(L),p.options.strategy===\"fixed\"),popper:gt(L)},p.reset=!1,p.placement=p.options.placement,p.orderedModifiers.forEach(function(R){return p.modifiersData[R.name]=Object.assign({},R.data)});for(var n=0;n<p.orderedModifiers.length;n++){if(p.reset===!0){p.reset=!1,n=-1;continue}var A=p.orderedModifiers[n],v=A.fn,C=A.options,B=C===void 0?{}:C,P=A.name;typeof v==\"function\"&&(p=v({state:p,options:B,name:P,instance:h})||p)}}}},update:dn(function(){return new Promise(function(y){h.forceUpdate(),y(p)})}),destroy:function(){g(),x=!0}};if(!Pt(c,u))return h;h.setOptions(l).then(function(y){!x&&l.onFirstUpdate&&l.onFirstUpdate(y)});function w(){p.orderedModifiers.forEach(function(y){var E=y.name,D=y.options,L=D===void 0?{}:D,n=y.effect;if(typeof n==\"function\"){var A=n({state:p,name:E,instance:h,options:L}),v=function(){};b.push(A||v)}})}function g(){b.forEach(function(y){return y()}),b=[]}return h}}var hn=[Ir,rn,kr,qt,en,Gr,an,Pr,Jr],gn=mn({defaultModifiers:hn}),yn=\"tippy-box\",Qt=\"tippy-content\",bn=\"tippy-backdrop\",Zt=\"tippy-arrow\",er=\"tippy-svg-arrow\",ve={passive:!0,capture:!0},tr=function(){return document.body};function st(e,t,r){if(Array.isArray(e)){var i=e[t];return i??(Array.isArray(r)?r[t]:r)}return e}function xt(e,t){var r={}.toString.call(e);return r.indexOf(\"[object\")===0&&r.indexOf(t+\"]\")>-1}function rr(e,t){return typeof e==\"function\"?e.apply(void 0,t):e}function Bt(e,t){if(t===0)return e;var r;return function(i){clearTimeout(r),r=setTimeout(function(){e(i)},t)}}function wn(e){return e.split(/\\s+/).filter(Boolean)}function xe(e){return[].concat(e)}function jt(e,t){e.indexOf(t)===-1&&e.push(t)}function On(e){return e.filter(function(t,r){return e.indexOf(t)===r})}function xn(e){return e.split(\"-\")[0]}function tt(e){return[].slice.call(e)}function $t(e){return Object.keys(e).reduce(function(t,r){return e[r]!==void 0&&(t[r]=e[r]),t},{})}function $e(){return document.createElement(\"div\")}function nt(e){return[\"Element\",\"Fragment\"].some(function(t){return xt(e,t)})}function An(e){return xt(e,\"NodeList\")}function En(e){return xt(e,\"MouseEvent\")}function Tn(e){return!!(e&&e._tippy&&e._tippy.reference===e)}function Dn(e){return nt(e)?[e]:An(e)?tt(e):Array.isArray(e)?e:tt(document.querySelectorAll(e))}function ut(e,t){e.forEach(function(r){r&&(r.style.transitionDuration=t+\"ms\")})}function kt(e,t){e.forEach(function(r){r&&r.setAttribute(\"data-state\",t)})}function Cn(e){var t,r=xe(e),i=r[0];return i!=null&&(t=i.ownerDocument)!=null&&t.body?i.ownerDocument:document}function Ln(e,t){var r=t.clientX,i=t.clientY;return e.every(function(o){var s=o.popperRect,f=o.popperState,c=o.props,u=c.interactiveBorder,l=xn(f.placement),p=f.modifiersData.offset;if(!p)return!0;var b=l===\"bottom\"?p.top.y:0,x=l===\"top\"?p.bottom.y:0,h=l===\"right\"?p.left.x:0,w=l===\"left\"?p.right.x:0,g=s.top-i+b>u,y=i-s.bottom-x>u,E=s.left-r+h>u,D=r-s.right-w>u;return g||y||E||D})}function ft(e,t,r){var i=t+\"EventListener\";[\"transitionend\",\"webkitTransitionEnd\"].forEach(function(o){e[i](o,r)})}function Vt(e,t){for(var r=t;r;){var i;if(e.contains(r))return!0;r=r.getRootNode==null||(i=r.getRootNode())==null?void 0:i.host}return!1}var Z={isTouch:!1},It=0;function Sn(){Z.isTouch||(Z.isTouch=!0,window.performance&&document.addEventListener(\"mousemove\",nr))}function nr(){var e=performance.now();e-It<20&&(Z.isTouch=!1,document.removeEventListener(\"mousemove\",nr)),It=e}function Rn(){var e=document.activeElement;if(Tn(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}function Mn(){document.addEventListener(\"touchstart\",Sn,ve),window.addEventListener(\"blur\",Rn)}var Pn=typeof window<\"u\"&&typeof document<\"u\",Bn=Pn?!!window.msCrypto:!1,jn={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},$n={allowHTML:!1,animation:\"fade\",arrow:!0,content:\"\",inertia:!1,maxWidth:350,role:\"tooltip\",theme:\"\",zIndex:9999},G=Object.assign({appendTo:tr,aria:{content:\"auto\",expanded:\"auto\"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:\"\",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:\"top\",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:\"mouseenter focus\",triggerTarget:null},jn,$n),kn=Object.keys(G),Vn=function(t){var r=Object.keys(t);r.forEach(function(i){G[i]=t[i]})};function ir(e){var t=e.plugins||[],r=t.reduce(function(i,o){var s=o.name,f=o.defaultValue;if(s){var c;i[s]=e[s]!==void 0?e[s]:(c=G[s])!=null?c:f}return i},{});return Object.assign({},e,r)}function In(e,t){var r=t?Object.keys(ir(Object.assign({},G,{plugins:t}))):kn,i=r.reduce(function(o,s){var f=(e.getAttribute(\"data-tippy-\"+s)||\"\").trim();if(!f)return o;if(s===\"content\")o[s]=f;else try{o[s]=JSON.parse(f)}catch{o[s]=f}return o},{});return i}function Ht(e,t){var r=Object.assign({},t,{content:rr(t.content,[e])},t.ignoreAttributes?{}:In(e,t.plugins));return r.aria=Object.assign({},G.aria,r.aria),r.aria={expanded:r.aria.expanded===\"auto\"?t.interactive:r.aria.expanded,content:r.aria.content===\"auto\"?t.interactive?null:\"describedby\":r.aria.content},r}var Hn=function(){return\"innerHTML\"};function dt(e,t){e[Hn()]=t}function Nt(e){var t=$e();return e===!0?t.className=Zt:(t.className=er,nt(e)?t.appendChild(e):dt(t,e)),t}function Wt(e,t){nt(t.content)?(dt(e,\"\"),e.appendChild(t.content)):typeof t.content!=\"function\"&&(t.allowHTML?dt(e,t.content):e.textContent=t.content)}function vt(e){var t=e.firstElementChild,r=tt(t.children);return{box:t,content:r.find(function(i){return i.classList.contains(Qt)}),arrow:r.find(function(i){return i.classList.contains(Zt)||i.classList.contains(er)}),backdrop:r.find(function(i){return i.classList.contains(bn)})}}function or(e){var t=$e(),r=$e();r.className=yn,r.setAttribute(\"data-state\",\"hidden\"),r.setAttribute(\"tabindex\",\"-1\");var i=$e();i.className=Qt,i.setAttribute(\"data-state\",\"hidden\"),Wt(i,e.props),t.appendChild(r),r.appendChild(i),o(e.props,e.props);function o(s,f){var c=vt(t),u=c.box,l=c.content,p=c.arrow;f.theme?u.setAttribute(\"data-theme\",f.theme):u.removeAttribute(\"data-theme\"),typeof f.animation==\"string\"?u.setAttribute(\"data-animation\",f.animation):u.removeAttribute(\"data-animation\"),f.inertia?u.setAttribute(\"data-inertia\",\"\"):u.removeAttribute(\"data-inertia\"),u.style.maxWidth=typeof f.maxWidth==\"number\"?f.maxWidth+\"px\":f.maxWidth,f.role?u.setAttribute(\"role\",f.role):u.removeAttribute(\"role\"),(s.content!==f.content||s.allowHTML!==f.allowHTML)&&Wt(l,e.props),f.arrow?p?s.arrow!==f.arrow&&(u.removeChild(p),u.appendChild(Nt(f.arrow))):u.appendChild(Nt(f.arrow)):p&&u.removeChild(p)}return{popper:t,onUpdate:o}}or.$$tippy=!0;var Nn=1,Qe=[],ct=[];function Wn(e,t){var r=Ht(e,Object.assign({},G,ir($t(t)))),i,o,s,f=!1,c=!1,u=!1,l=!1,p,b,x,h=[],w=Bt(We,r.interactiveDebounce),g,y=Nn++,E=null,D=On(r.plugins),L={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},n={id:y,reference:e,popper:$e(),popperInstance:E,props:r,state:L,plugins:D,clearDelayTimeouts:Xe,setProps:Ye,setContent:_e,show:ar,hide:sr,hideWithInteractivity:ur,enable:Me,disable:ze,unmount:fr,destroy:cr};if(!r.render)return n;var A=r.render(n),v=A.popper,C=A.onUpdate;v.setAttribute(\"data-tippy-root\",\"\"),v.id=\"tippy-\"+n.id,n.popper=v,e._tippy=n,v._tippy=n;var B=D.map(function(a){return a.fn(n)}),P=e.hasAttribute(\"aria-expanded\");return be(),J(),V(),$(\"onCreate\",[n]),r.showOnCreate&&Re(),v.addEventListener(\"mouseenter\",function(){n.props.interactive&&n.state.isVisible&&n.clearDelayTimeouts()}),v.addEventListener(\"mouseleave\",function(){n.props.interactive&&n.props.trigger.indexOf(\"mouseenter\")>=0&&W().addEventListener(\"mousemove\",w)}),n;function R(){var a=n.props.touch;return Array.isArray(a)?a:[a,0]}function j(){return R()[0]===\"hold\"}function M(){var a;return!!((a=n.props.render)!=null&&a.$$tippy)}function S(){return g||e}function W(){var a=S().parentNode;return a?Cn(a):document}function U(){return vt(v)}function k(a){return n.state.isMounted&&!n.state.isVisible||Z.isTouch||p&&p.type===\"focus\"?0:st(n.props.delay,a?0:1,G.delay)}function V(a){a===void 0&&(a=!1),v.style.pointerEvents=n.props.interactive&&!a?\"\":\"none\",v.style.zIndex=\"\"+n.props.zIndex}function $(a,d,m){if(m===void 0&&(m=!0),B.forEach(function(O){O[a]&&O[a].apply(O,d)}),m){var T;(T=n.props)[a].apply(T,d)}}function K(){var a=n.props.aria;if(a.content){var d=\"aria-\"+a.content,m=v.id,T=xe(n.props.triggerTarget||e);T.forEach(function(O){var I=O.getAttribute(d);if(n.state.isVisible)O.setAttribute(d,I?I+\" \"+m:m);else{var q=I&&I.replace(m,\"\").trim();q?O.setAttribute(d,q):O.removeAttribute(d)}})}}function J(){if(!(P||!n.props.aria.expanded)){var a=xe(n.props.triggerTarget||e);a.forEach(function(d){n.props.interactive?d.setAttribute(\"aria-expanded\",n.state.isVisible&&d===S()?\"true\":\"false\"):d.removeAttribute(\"aria-expanded\")})}}function ce(){W().removeEventListener(\"mousemove\",w),Qe=Qe.filter(function(a){return a!==w})}function Q(a){if(!(Z.isTouch&&(u||a.type===\"mousedown\"))){var d=a.composedPath&&a.composedPath()[0]||a.target;if(!(n.props.interactive&&Vt(v,d))){if(xe(n.props.triggerTarget||e).some(function(m){return Vt(m,d)})){if(Z.isTouch||n.state.isVisible&&n.props.trigger.indexOf(\"click\")>=0)return}else $(\"onClickOutside\",[n,a]);n.props.hideOnClick===!0&&(n.clearDelayTimeouts(),n.hide(),c=!0,setTimeout(function(){c=!1}),n.state.isMounted||ne())}}}function pe(){u=!0}function re(){u=!1}function _(){var a=W();a.addEventListener(\"mousedown\",Q,!0),a.addEventListener(\"touchend\",Q,ve),a.addEventListener(\"touchstart\",re,ve),a.addEventListener(\"touchmove\",pe,ve)}function ne(){var a=W();a.removeEventListener(\"mousedown\",Q,!0),a.removeEventListener(\"touchend\",Q,ve),a.removeEventListener(\"touchstart\",re,ve),a.removeEventListener(\"touchmove\",pe,ve)}function ge(a,d){ye(a,function(){!n.state.isVisible&&v.parentNode&&v.parentNode.contains(v)&&d()})}function ie(a,d){ye(a,d)}function ye(a,d){var m=U().box;function T(O){O.target===m&&(ft(m,\"remove\",T),d())}if(a===0)return d();ft(m,\"remove\",b),ft(m,\"add\",T),b=T}function se(a,d,m){m===void 0&&(m=!1);var T=xe(n.props.triggerTarget||e);T.forEach(function(O){O.addEventListener(a,d,m),h.push({node:O,eventType:a,handler:d,options:m})})}function be(){j()&&(se(\"touchstart\",Ce,{passive:!0}),se(\"touchend\",Ue,{passive:!0})),wn(n.props.trigger).forEach(function(a){if(a!==\"manual\")switch(se(a,Ce),a){case\"mouseenter\":se(\"mouseleave\",Ue);break;case\"focus\":se(Bn?\"focusout\":\"blur\",Le);break;case\"focusin\":se(\"focusout\",Le);break}})}function Ne(){h.forEach(function(a){var d=a.node,m=a.eventType,T=a.handler,O=a.options;d.removeEventListener(m,T,O)}),h=[]}function Ce(a){var d,m=!1;if(!(!n.state.isEnabled||Se(a)||c)){var T=((d=p)==null?void 0:d.type)===\"focus\";p=a,g=a.currentTarget,J(),!n.state.isVisible&&En(a)&&Qe.forEach(function(O){return O(a)}),a.type===\"click\"&&(n.props.trigger.indexOf(\"mouseenter\")<0||f)&&n.props.hideOnClick!==!1&&n.state.isVisible?m=!0:Re(a),a.type===\"click\"&&(f=!m),m&&!T&&le(a)}}function We(a){var d=a.target,m=S().contains(d)||v.contains(d);if(!(a.type===\"mousemove\"&&m)){var T=ue().concat(v).map(function(O){var I,q=O._tippy,we=(I=q.popperInstance)==null?void 0:I.state;return we?{popperRect:O.getBoundingClientRect(),popperState:we,props:r}:null}).filter(Boolean);Ln(T,a)&&(ce(),le(a))}}function Ue(a){var d=Se(a)||n.props.trigger.indexOf(\"click\")>=0&&f;if(!d){if(n.props.interactive){n.hideWithInteractivity(a);return}le(a)}}function Le(a){n.props.trigger.indexOf(\"focusin\")<0&&a.target!==S()||n.props.interactive&&a.relatedTarget&&v.contains(a.relatedTarget)||le(a)}function Se(a){return Z.isTouch?j()!==a.type.indexOf(\"touch\")>=0:!1}function Fe(){qe();var a=n.props,d=a.popperOptions,m=a.placement,T=a.offset,O=a.getReferenceClientRect,I=a.moveTransition,q=M()?vt(v).arrow:null,we=O?{getBoundingClientRect:O,contextElement:O.contextElement||S()}:e,At={name:\"$$tippy\",enabled:!0,phase:\"beforeWrite\",requires:[\"computeStyles\"],fn:function(Ge){var Oe=Ge.state;if(M()){var pr=U(),at=pr.box;[\"placement\",\"reference-hidden\",\"escaped\"].forEach(function(Ke){Ke===\"placement\"?at.setAttribute(\"data-placement\",Oe.placement):Oe.attributes.popper[\"data-popper-\"+Ke]?at.setAttribute(\"data-\"+Ke,\"\"):at.removeAttribute(\"data-\"+Ke)}),Oe.attributes.popper={}}}},de=[{name:\"offset\",options:{offset:T}},{name:\"preventOverflow\",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:\"flip\",options:{padding:5}},{name:\"computeStyles\",options:{adaptive:!I}},At];M()&&q&&de.push({name:\"arrow\",options:{element:q,padding:3}}),de.push.apply(de,d?.modifiers||[]),n.popperInstance=gn(we,v,Object.assign({},d,{placement:m,onFirstUpdate:x,modifiers:de}))}function qe(){n.popperInstance&&(n.popperInstance.destroy(),n.popperInstance=null)}function oe(){var a=n.props.appendTo,d,m=S();n.props.interactive&&a===tr||a===\"parent\"?d=m.parentNode:d=rr(a,[m]),d.contains(v)||d.appendChild(v),n.state.isMounted=!0,Fe()}function ue(){return tt(v.querySelectorAll(\"[data-tippy-root]\"))}function Re(a){n.clearDelayTimeouts(),a&&$(\"onTrigger\",[n,a]),_();var d=k(!0),m=R(),T=m[0],O=m[1];Z.isTouch&&T===\"hold\"&&O&&(d=O),d?i=setTimeout(function(){n.show()},d):n.show()}function le(a){if(n.clearDelayTimeouts(),$(\"onUntrigger\",[n,a]),!n.state.isVisible){ne();return}if(!(n.props.trigger.indexOf(\"mouseenter\")>=0&&n.props.trigger.indexOf(\"click\")>=0&&[\"mouseleave\",\"mousemove\"].indexOf(a.type)>=0&&f)){var d=k(!1);d?o=setTimeout(function(){n.state.isVisible&&n.hide()},d):s=requestAnimationFrame(function(){n.hide()})}}function Me(){n.state.isEnabled=!0}function ze(){n.hide(),n.state.isEnabled=!1}function Xe(){clearTimeout(i),clearTimeout(o),cancelAnimationFrame(s)}function Ye(a){if(!n.state.isDestroyed){$(\"onBeforeUpdate\",[n,a]),Ne();var d=n.props,m=Ht(e,Object.assign({},d,$t(a),{ignoreAttributes:!0}));n.props=m,be(),d.interactiveDebounce!==m.interactiveDebounce&&(ce(),w=Bt(We,m.interactiveDebounce)),d.triggerTarget&&!m.triggerTarget?xe(d.triggerTarget).forEach(function(T){T.removeAttribute(\"aria-expanded\")}):m.triggerTarget&&e.removeAttribute(\"aria-expanded\"),J(),V(),C&&C(d,m),n.popperInstance&&(Fe(),ue().forEach(function(T){requestAnimationFrame(T._tippy.popperInstance.forceUpdate)})),$(\"onAfterUpdate\",[n,a])}}function _e(a){n.setProps({content:a})}function ar(){var a=n.state.isVisible,d=n.state.isDestroyed,m=!n.state.isEnabled,T=Z.isTouch&&!n.props.touch,O=st(n.props.duration,0,G.duration);if(!(a||d||m||T)&&!S().hasAttribute(\"disabled\")&&($(\"onShow\",[n],!1),n.props.onShow(n)!==!1)){if(n.state.isVisible=!0,M()&&(v.style.visibility=\"visible\"),V(),_(),n.state.isMounted||(v.style.transition=\"none\"),M()){var I=U(),q=I.box,we=I.content;ut([q,we],0)}x=function(){var de;if(!(!n.state.isVisible||l)){if(l=!0,v.offsetHeight,v.style.transition=n.props.moveTransition,M()&&n.props.animation){var ot=U(),Ge=ot.box,Oe=ot.content;ut([Ge,Oe],O),kt([Ge,Oe],\"visible\")}K(),J(),jt(ct,n),(de=n.popperInstance)==null||de.forceUpdate(),$(\"onMount\",[n]),n.props.animation&&M()&&ie(O,function(){n.state.isShown=!0,$(\"onShown\",[n])})}},oe()}}function sr(){var a=!n.state.isVisible,d=n.state.isDestroyed,m=!n.state.isEnabled,T=st(n.props.duration,1,G.duration);if(!(a||d||m)&&($(\"onHide\",[n],!1),n.props.onHide(n)!==!1)){if(n.state.isVisible=!1,n.state.isShown=!1,l=!1,f=!1,M()&&(v.style.visibility=\"hidden\"),ce(),ne(),V(!0),M()){var O=U(),I=O.box,q=O.content;n.props.animation&&(ut([I,q],T),kt([I,q],\"hidden\"))}K(),J(),n.props.animation?M()&&ge(T,n.unmount):n.unmount()}}function ur(a){W().addEventListener(\"mousemove\",w),jt(Qe,w),w(a)}function fr(){n.state.isVisible&&n.hide(),n.state.isMounted&&(qe(),ue().forEach(function(a){a._tippy.unmount()}),v.parentNode&&v.parentNode.removeChild(v),ct=ct.filter(function(a){return a!==n}),n.state.isMounted=!1,$(\"onHidden\",[n]))}function cr(){n.state.isDestroyed||(n.clearDelayTimeouts(),n.unmount(),Ne(),delete e._tippy,n.state.isDestroyed=!0,$(\"onDestroy\",[n]))}}function it(e,t){t===void 0&&(t={});var r=G.plugins.concat(t.plugins||[]);Mn();var i=Object.assign({},t,{plugins:r}),o=Dn(e),s=o.reduce(function(f,c){var u=c&&Wn(c,i);return u&&f.push(u),f},[]);return nt(e)?s[0]:s}it.defaultProps=G;it.setDefaultProps=Vn;it.currentInput=Z;Object.assign({},qt,{effect:function(t){var r=t.state,i={popper:{position:r.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};Object.assign(r.elements.popper.style,i.popper),r.styles=i,r.elements.arrow&&Object.assign(r.elements.arrow.style,i.arrow)}});it.setDefaultProps({render:or});export{it as t};\n"
  },
  {
    "path": "public/build/assets/tree-Dna4NG6v.css",
    "content": "#family-tree{display:block;width:100%;height:100%;--family-tree-column-width: 220px;--family-tree-row-height: 110px}.family-node-entity{border:1px solid hsl(var(--nc)/1);--tw-background-opacity: 1;background-color:hsl(var(--b1)/var(--tw-background-opacity));width:var(--family-tree-entity-width, 200px);height:var(--family-tree-entity-height, 60px)}.family-node-entity-founder{--tw-background-opacity: 1;background-color:var(--family-tree-founder, hsl(var(--pc)/var(--tw-background-opacity)));color:hsl(var(--p)/1)}.family-node-entity-relation{--tw-background-opacity: 1;background-color:hsl(var(--b3)/var(--tw-background-opacity))}.family-tree-line,.family-tree-child-line,.family-tree-child-parent-line{background-color:var(--family-tree-line, #333)}\n"
  },
  {
    "path": "public/build/assets/v-click-outside.umd-Cl-Y_A58.js",
    "content": "import{g as b}from\"./_commonjsHelpers-Cpj98o6Y.js\";var s={exports:{}},A=s.exports,E;function I(){return E||(E=1,(function(O,M){(function(o,l){O.exports=l()})(A,function(){var o=\"__v-click-outside\",l=typeof window<\"u\",C=typeof navigator<\"u\",T=l&&(\"ontouchstart\"in window||C&&navigator.msMaxTouchPoints>0)?[\"touchstart\"]:[\"click\"],p=function(e){var n=e.event,r=e.handler;(0,e.middleware)(n)&&r(n)},h=function(e,n){var r=(function(t){var i=typeof t==\"function\";if(!i&&typeof t!=\"object\")throw new Error(\"v-click-outside: Binding value must be a function or an object\");return{handler:i?t:t.handler,middleware:t.middleware||function(a){return a},events:t.events||T,isActive:t.isActive!==!1,detectIframe:t.detectIframe!==!1,capture:!!t.capture}})(n.value),v=r.handler,x=r.middleware,_=r.detectIframe,f=r.capture;if(r.isActive){if(e[o]=r.events.map(function(t){return{event:t,srcTarget:document.documentElement,handler:function(i){return(function(a){var u=a.el,d=a.event,m=a.handler,c=a.middleware,k=d.path||d.composedPath&&d.composedPath();(k?k.indexOf(u)<0:!u.contains(d.target))&&p({event:d,handler:m,middleware:c})})({el:e,event:i,handler:v,middleware:x})},capture:f}}),_){var y={event:\"blur\",srcTarget:window,handler:function(t){return(function(i){var a=i.el,u=i.event,d=i.handler,m=i.middleware;setTimeout(function(){var c=document.activeElement;c&&c.tagName===\"IFRAME\"&&!a.contains(c)&&p({event:u,handler:d,middleware:m})},0)})({el:e,event:t,handler:v,middleware:x})},capture:f};e[o]=[].concat(e[o],[y])}e[o].forEach(function(t){var i=t.event,a=t.srcTarget,u=t.handler;return setTimeout(function(){e[o]&&a.addEventListener(i,u,f)},0)})}},w=function(e){(e[o]||[]).forEach(function(n){return n.srcTarget.removeEventListener(n.event,n.handler,n.capture)}),delete e[o]},g=l?{beforeMount:h,updated:function(e,n){var r=n.value,v=n.oldValue;JSON.stringify(r)!==JSON.stringify(v)&&(w(e),h(e,{value:r}))},unmounted:w}:{};return{install:function(e){e.directive(\"click-outside\",g)},directive:g}})})(s)),s.exports}var j=I();const P=b(j);export{P as v};\n"
  },
  {
    "path": "public/build/assets/vendor-DEuctmxo.css",
    "content": "@charset \"UTF-8\";.ts-control{border:1px solid #d0d0d0;padding:8px;width:100%;overflow:hidden;position:relative;z-index:1;box-sizing:border-box;box-shadow:none;border-radius:3px;display:flex;flex-wrap:wrap}.ts-wrapper.multi.has-items .ts-control{padding:6px 8px 3px}.full .ts-control{background-color:#fff}.disabled .ts-control,.disabled .ts-control *{cursor:default!important}.focus .ts-control{box-shadow:none}.ts-control>*{vertical-align:baseline;display:inline-block}.ts-wrapper.multi .ts-control>div{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;background:#f2f2f2;color:#303030;border:0px solid #d0d0d0;overflow:auto}.ts-wrapper.multi .ts-control>div.active{background:#e8e8e8;color:#303030;border:0px solid #cacaca}.ts-wrapper.multi.disabled .ts-control>div,.ts-wrapper.multi.disabled .ts-control>div.active{color:#7d7d7d;background:#fff;border:0px solid white}.ts-control>input{flex:1 1 auto;min-width:7rem;display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0!important;text-indent:0!important;border:0 none!important;background:none!important;line-height:inherit!important;-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;box-shadow:none!important}.ts-control>input::-ms-clear{display:none}.ts-control>input:focus{outline:none!important}.has-items .ts-control>input{margin:0 4px!important}.ts-control.rtl{text-align:right}.ts-control.rtl.single .ts-control:after{left:15px;right:auto}.ts-control.rtl .ts-control>input{margin:0 4px 0 -2px!important}.disabled .ts-control{opacity:.5;background-color:#fafafa}.input-hidden .ts-control>input{opacity:0;position:absolute;left:-10000px}.ts-dropdown{position:absolute;top:100%;left:0;width:100%;z-index:10;border:1px solid #d0d0d0;background:#fff;margin:.25rem 0 0;border-top:0 none;box-sizing:border-box;box-shadow:0 1px 3px #0000001a;border-radius:0 0 3px 3px}.ts-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.ts-dropdown [data-selectable] .highlight{background:#7da8d033;border-radius:1px}.ts-dropdown .option,.ts-dropdown .optgroup-header,.ts-dropdown .no-results,.ts-dropdown .create{padding:5px 8px}.ts-dropdown .option,.ts-dropdown [data-disabled],.ts-dropdown [data-disabled] [data-selectable].option{cursor:inherit;opacity:.5}.ts-dropdown [data-selectable].option{opacity:1;cursor:pointer}.ts-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.ts-dropdown .optgroup-header{color:#303030;background:#fff;cursor:default}.ts-dropdown .active{background-color:#f5fafd;color:#495c68}.ts-dropdown .active.create{color:#495c68}.ts-dropdown .create{color:#30303080}.ts-dropdown .spinner{display:inline-block;width:30px;height:30px;margin:5px 8px}.ts-dropdown .spinner:after{content:\" \";display:block;width:24px;height:24px;margin:3px;border-radius:50%;border:5px solid #d0d0d0;border-color:#d0d0d0 transparent #d0d0d0 transparent;animation:lds-dual-ring 1.2s linear infinite}@keyframes lds-dual-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ts-dropdown-content{overflow:hidden auto;max-height:200px;scroll-behavior:smooth}.ts-wrapper.plugin-drag_drop .ts-dragging{color:transparent!important}.ts-wrapper.plugin-drag_drop .ts-dragging>*{visibility:hidden!important}.plugin-checkbox_options:not(.rtl) .option input{margin-right:.5rem}.plugin-checkbox_options.rtl .option input{margin-left:.5rem}.plugin-clear_button{--ts-pr-clear-button: 1em}.plugin-clear_button .clear-button{opacity:0;position:absolute;top:50%;transform:translateY(-50%);right:2px;margin-right:0!important;background:transparent!important;transition:opacity .5s;cursor:pointer}.plugin-clear_button.form-select .clear-button,.plugin-clear_button.single .clear-button{right:max(var(--ts-pr-caret),8px)}.plugin-clear_button.focus.has-items .clear-button,.plugin-clear_button:not(.disabled):hover.has-items .clear-button{opacity:1}.ts-wrapper .dropdown-header{position:relative;padding:10px 8px;border-bottom:1px solid #d0d0d0;background:color-mix(#fff,#d0d0d0,85%);border-radius:3px 3px 0 0}.ts-wrapper .dropdown-header-close{position:absolute;right:8px;top:50%;color:#303030;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.ts-wrapper .dropdown-header-close:hover{color:#000}.plugin-dropdown_input.focus.dropdown-active .ts-control{box-shadow:none;border:1px solid #d0d0d0}.plugin-dropdown_input .dropdown-input{border:1px solid #d0d0d0;border-width:0 0 1px;display:block;padding:8px;box-shadow:none;width:100%;background:transparent}.plugin-dropdown_input .items-placeholder{border:0 none!important;box-shadow:none!important;width:100%}.plugin-dropdown_input.has-items .items-placeholder,.plugin-dropdown_input.dropdown-active .items-placeholder{display:none!important}.ts-wrapper.plugin-input_autogrow.has-items .ts-control>input{min-width:0}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input{flex:none;min-width:4px}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::-ms-input-placeholder{color:transparent}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::placeholder{color:transparent}.ts-dropdown.plugin-optgroup_columns .ts-dropdown-content{display:flex}.ts-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;flex-grow:1;flex-basis:0;min-width:0}.ts-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.ts-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.ts-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.ts-wrapper.plugin-remove_button .item{display:inline-flex;align-items:center}.ts-wrapper.plugin-remove_button .item .remove{color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:0 6px;border-radius:0 2px 2px 0;box-sizing:border-box}.ts-wrapper.plugin-remove_button .item .remove:hover{background:#0000000d}.ts-wrapper.plugin-remove_button.disabled .item .remove:hover{background:none}.ts-wrapper.plugin-remove_button .remove-single{position:absolute;right:0;top:0;font-size:23px}.ts-wrapper.plugin-remove_button:not(.rtl) .item{padding-right:0!important}.ts-wrapper.plugin-remove_button:not(.rtl) .item .remove{border-left:1px solid #d0d0d0;margin-left:6px}.ts-wrapper.plugin-remove_button:not(.rtl) .item.active .remove{border-left-color:#cacaca}.ts-wrapper.plugin-remove_button:not(.rtl).disabled .item .remove{border-left-color:#fff}.ts-wrapper.plugin-remove_button.rtl .item{padding-left:0!important}.ts-wrapper.plugin-remove_button.rtl .item .remove{border-right:1px solid #d0d0d0;margin-right:6px}.ts-wrapper.plugin-remove_button.rtl .item.active .remove{border-right-color:#cacaca}.ts-wrapper.plugin-remove_button.rtl.disabled .item .remove{border-right-color:#fff}:root{--ts-pr-clear-button: 0px;--ts-pr-caret: 0px;--ts-pr-min: .75rem}.ts-wrapper.single .ts-control,.ts-wrapper.single .ts-control input{cursor:pointer}.ts-control:not(.rtl){padding-right:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-control.rtl{padding-left:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-wrapper{position:relative}.ts-dropdown,.ts-control,.ts-control input{color:#303030;font-family:inherit;font-size:13px;line-height:18px}.ts-control,.ts-wrapper.single.input-active .ts-control{background:#fff;cursor:text}.ts-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}.ra-fw,.ra-li{text-align:center}@font-face{font-family:RPGAwesome;src:url(/build/assets/rpgawesome-webfont-BRLmZ7ej.eot?v=0.1.0);src:url(/build/assets/rpgawesome-webfont-BRLmZ7ej.eot?#iefix&v=0.1.0) format(\"embedded-opentype\"),url(/build/assets/rpgawesome-webfont-Dqq2L5LG.woff?v=0.1.0) format(\"woff\"),url(/build/assets/rpgawesome-webfont-BFwApLwb.ttf?v=0.1.0) format(\"truetype\"),url(/build/assets/rpgawesome-webfont-DVZLXeu_.svg?v=0.1.0#rpg-awesome) format(\"svg\");font-weight:400;font-style:normal}.ra{font-family:RPGAwesome;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal;font-variant:normal;font-weight:400;line-height:1;speak:none;text-transform:none}.ra-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.ra-2x{font-size:2em}.ra-3x{font-size:3em}.ra-4x{font-size:4em}.ra-5x{font-size:5em}.ra-fw{width:1.2857142857em}.ra-ul{list-style-type:none;margin-left:2.1428571429em;padding-left:0}.ra-ul>li{position:relative}.ra-li{left:-2.1428571429em;position:absolute;top:.1428571429em;width:2.1428571429em}.ra-li.ra-lg{left:-1.8571428571em}.ra-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.pull-right{float:right}.pull-left{float:left}.ra.pull-left{margin-right:.3em}.ra.pull-right{margin-left:.3em}.ra-spin{-webkit-animation:ra-spin 2s infinite linear;animation:ra-spin 2s infinite linear}@-webkit-keyframes ra-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes ra-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.ra-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.ra-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.ra-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.ra-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ra-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scaleY(-1)}:root .ra-flip-horizontal,:root .ra-flip-vertical,:root .ra-rotate-180,:root .ra-rotate-270,:root .ra-rotate-90{filter:none}.ra-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2em}.ra-stack-1x,.ra-stack-2x{left:0;position:absolute;text-align:center;width:100%}.ra-stack-1x{line-height:inherit}.ra-stack-2x{font-size:2em}.ra-inverse{color:#fff}.ra-acid:before{content:\"\"}.ra-zigzag-leaf:before{content:\"\"}.ra-archer:before{content:\"\"}.ra-archery-target:before{content:\"\"}.ra-arena:before{content:\"\"}.ra-aries:before{content:\"\"}.ra-arrow-cluster:before{content:\"\"}.ra-arrow-flights:before{content:\"\"}.ra-arson:before{content:\"\"}.ra-aura:before{content:\"\"}.ra-aware:before{content:\"\"}.ra-axe:before{content:\"\"}.ra-axe-swing:before{content:\"\"}.ra-ball:before{content:\"\"}.ra-barbed-arrow:before{content:\"\"}.ra-barrier:before{content:\"\"}.ra-bat-sword:before{content:\"\"}.ra-battered-axe:before{content:\"\"}.ra-batteries:before{content:\"\"}.ra-battery-0:before{content:\"\"}.ra-battery-25:before{content:\"\"}.ra-battery-50:before{content:\"\"}.ra-battery-75:before{content:\"\"}.ra-battery-100:before{content:\"\"}.ra-battery-black:before{content:\"\"}.ra-battery-negative:before{content:\"\"}.ra-battery-positive:before{content:\"\"}.ra-battery-white:before{content:\"\"}.ra-batwings:before{content:\"\"}.ra-beam-wake:before{content:\"\"}.ra-bear-trap:before{content:\"\"}.ra-beer:before{content:\"\"}.ra-beetle:before{content:\"\"}.ra-bell:before{content:\"\"}.ra-biohazard:before{content:\"\"}.ra-bird-claw:before{content:\"\"}.ra-bird-mask:before{content:\"\"}.ra-blade-bite:before{content:\"\"}.ra-blast:before{content:\"\"}.ra-blaster:before{content:\"\"}.ra-bleeding-eye:before{content:\"\"}.ra-bleeding-hearts:before{content:\"\"}.ra-bolt-shield:before{content:\"\"}.ra-bomb-explosion:before{content:\"\"}.ra-bombs:before{content:\"\"}.ra-bone-bite:before{content:\"\"}.ra-bone-knife:before{content:\"\"}.ra-book:before{content:\"\"}.ra-boomerang:before{content:\"\"}.ra-boot-stomp:before{content:\"\"}.ra-bottle-vapors:before{content:\"\"}.ra-bottled-bolt:before{content:\"\"}.ra-bottom-right:before{content:\"\"}.ra-bowie-knife:before{content:\"\"}.ra-bowling-pin:before{content:\"\"}.ra-brain-freeze:before{content:\"\"}.ra-brandy-bottle:before{content:\"\"}.ra-bridge:before{content:\"\"}.ra-broadhead-arrow:before{content:\"\"}.ra-broadsword:before,.ra-sword:before{content:\"\"}.ra-broken-bone:before{content:\"\"}.ra-broken-bottle:before,.ra-broken-heart:before{content:\"\"}.ra-broken-shield:before{content:\"\"}.ra-broken-skull:before{content:\"\"}.ra-bubbling-potion:before{content:\"\"}.ra-bullets:before{content:\"\"}.ra-burning-book:before{content:\"\"}.ra-burning-embers:before{content:\"\"}.ra-burning-eye:before{content:\"\"}.ra-burning-meteor:before{content:\"\"}.ra-burst-blob:before{content:\"\"}.ra-butterfly:before{content:\"\"}.ra-campfire:before{content:\"\"}.ra-cancel:before{content:\"\"}.ra-cancer:before{content:\"\"}.ra-candle:before{content:\"\"}.ra-candle-fire:before{content:\"\"}.ra-cannon-shot:before{content:\"\"}.ra-capitol:before{content:\"\"}.ra-capricorn:before{content:\"\"}.ra-carrot:before{content:\"\"}.ra-castle-emblem:before{content:\"\"}.ra-castle-flag:before{content:\"\"}.ra-cat:before{content:\"\"}.ra-chain:before{content:\"\"}.ra-cheese:before{content:\"\"}.ra-chemical-arrow:before{content:\"\"}.ra-chessboard:before{content:\"\"}.ra-chicken-leg:before{content:\"\"}.ra-circle-of-circles:before{content:\"\"}.ra-circular-saw:before{content:\"\"}.ra-circular-shield:before{content:\"\"}.ra-cloak-and-dagger:before{content:\"\"}.ra-clockwork:before{content:\"\"}.ra-clover:before{content:\"\"}.ra-clovers:before{content:\"\"}.ra-clovers-card:before{content:\"\"}.ra-cluster-bomb:before{content:\"\"}.ra-coffee-mug:before{content:\"\"}.ra-cog:before{content:\"\"}.ra-cog-wheel:before{content:\"\"}.ra-cold-heart:before{content:\"\"}.ra-compass:before{content:\"\"}.ra-corked-tube:before{content:\"\"}.ra-crab-claw:before{content:\"\"}.ra-cracked-helm:before{content:\"\"}.ra-cracked-shield:before{content:\"\"}.ra-croc-sword:before{content:\"\"}.ra-crossbow:before{content:\"\"}.ra-crossed-axes:before{content:\"\"}.ra-crossed-bones:before{content:\"\"}.ra-crossed-pistols:before{content:\"\"}.ra-crossed-sabres:before{content:\"\"}.ra-crossed-swords:before{content:\"\"}.ra-crown:before{content:\"\"}.ra-crown-of-thorns:before{content:\"\"}.ra-crowned-heart:before{content:\"\"}.ra-crush:before{content:\"\"}.ra-crystal-ball:before{content:\"\"}.ra-crystal-cluster:before{content:\"\"}.ra-crystal-wand:before{content:\"\"}.ra-crystals:before{content:\"\"}.ra-cubes:before{content:\"\"}.ra-cut-palm:before{content:\"\"}.ra-cycle:before{content:\"\"}.ra-daggers:before{content:\"\"}.ra-daisy:before{content:\"\"}.ra-dead-tree:before{content:\"\"}.ra-death-skull:before{content:\"\"}.ra-decapitation:before{content:\"\"}.ra-defibrillate:before{content:\"\"}.ra-demolish:before{content:\"\"}.ra-dervish-swords:before{content:\"\"}.ra-desert-skull:before{content:\"\"}.ra-diamond:before{content:\"\"}.ra-diamonds:before{content:\"\"}.ra-diamonds-card:before{content:\"\"}.ra-dice-five:before{content:\"\"}.ra-dice-four:before{content:\"\"}.ra-dice-one:before{content:\"\"}.ra-dice-six:before{content:\"\"}.ra-dice-three:before{content:\"\"}.ra-dice-two:before{content:\"\"}.ra-dinosaur:before{content:\"\"}.ra-divert:before{content:\"\"}.ra-diving-dagger:before{content:\"\"}.ra-double-team:before{content:\"\"}.ra-doubled:before{content:\"\"}.ra-dragon:before{content:\"\"}.ra-dragon-breath:before{content:\"\"}.ra-dragon-wing:before{content:\"\"}.ra-dragonfly:before{content:\"\"}.ra-drill:before{content:\"\"}.ra-dripping-blade:before{content:\"\"}.ra-dripping-knife:before{content:\"\"}.ra-dripping-sword:before{content:\"\"}.ra-droplet:before{content:\"\"}.ra-droplet-splash:before{content:\"\"}.ra-droplets:before{content:\"\"}.ra-duel:before{content:\"\"}.ra-egg:before{content:\"\"}.ra-egg-pod:before{content:\"\"}.ra-eggplant:before{content:\"\"}.ra-emerald:before{content:\"\"}.ra-energise:before{content:\"\"}.ra-explosion:before{content:\"\"}.ra-explosive-materials:before{content:\"\"}.ra-eye-monster:before{content:\"\"}.ra-eye-shield:before{content:\"\"}.ra-eyeball:before{content:\"\"}.ra-fairy:before{content:\"\"}.ra-fairy-wand:before{content:\"\"}.ra-fall-down:before{content:\"\"}.ra-falling:before{content:\"\"}.ra-fast-ship:before{content:\"\"}.ra-feather-wing:before{content:\"\"}.ra-feathered-wing:before{content:\"\"}.ra-fedora:before{content:\"\"}.ra-fire:before{content:\"\"}.ra-fire-bomb:before{content:\"\"}.ra-fire-breath:before{content:\"\"}.ra-fire-ring:before{content:\"\"}.ra-fire-shield:before{content:\"\"}.ra-fire-symbol:before{content:\"\"}.ra-fireball-sword:before{content:\"\"}.ra-fish:before{content:\"\"}.ra-fizzing-flask:before{content:\"\"}.ra-flame-symbol:before{content:\"\"}.ra-flaming-arrow:before{content:\"\"}.ra-flaming-claw:before{content:\"\"}.ra-flaming-trident:before{content:\"\"}.ra-flask:before{content:\"\"}.ra-flat-hammer:before{content:\"\"}.ra-flower:before{content:\"\"}.ra-flowers:before{content:\"\"}.ra-fluffy-swirl:before{content:\"\"}.ra-focused-lightning:before{content:\"\"}.ra-food-chain:before{content:\"\"}.ra-footprint:before{content:\"\"}.ra-forging:before{content:\"\"}.ra-forward:before{content:\"\"}.ra-fox:before{content:\"\"}.ra-frost-emblem:before{content:\"\"}.ra-frostfire:before{content:\"\"}.ra-frozen-arrow:before{content:\"\"}.ra-gamepad-cross:before{content:\"\"}.ra-gavel:before{content:\"\"}.ra-gear-hammer:before{content:\"\"}.ra-gear-heart:before{content:\"\"}.ra-gears:before{content:\"\"}.ra-gecko:before{content:\"\"}.ra-gem:before{content:\"\"}.ra-gem-pendant:before{content:\"\"}.ra-gemini:before{content:\"\"}.ra-glass-heart:before{content:\"\"}.ra-gloop:before{content:\"\"}.ra-gold-bar:before{content:\"\"}.ra-grappling-hook:before{content:\"\"}.ra-grass:before{content:\"\"}.ra-grass-patch:before{content:\"\"}.ra-grenade:before{content:\"\"}.ra-groundbreaker:before{content:\"\"}.ra-guarded-tower:before{content:\"\"}.ra-guillotine:before{content:\"\"}.ra-halberd:before{content:\"\"}.ra-hammer:before{content:\"\"}.ra-hammer-drop:before{content:\"\"}.ra-hand:before{content:\"\"}.ra-hand-emblem:before{content:\"\"}.ra-hand-saw:before{content:\"\"}.ra-harpoon-trident:before{content:\"\"}.ra-health:before{content:\"\"}.ra-health-decrease:before{content:\"\"}.ra-health-increase:before{content:\"\"}.ra-heart-bottle:before{content:\"\"}.ra-heart-tower:before{content:\"\"}.ra-heartburn:before{content:\"\"}.ra-hearts:before{content:\"\"}.ra-hearts-card:before{content:\"\"}.ra-heat-haze:before{content:\"\"}.ra-heavy-fall:before{content:\"\"}.ra-heavy-shield:before{content:\"\"}.ra-helmet:before{content:\"\"}.ra-help:before{content:\"\"}.ra-hive-emblem:before{content:\"\"}.ra-hole-ladder:before{content:\"\"}.ra-honeycomb:before{content:\"\"}.ra-hood:before{content:\"\"}.ra-horn-call:before{content:\"\"}.ra-horns:before{content:\"\"}.ra-horseshoe:before{content:\"\"}.ra-hospital-cross:before{content:\"\"}.ra-hot-surface:before{content:\"\"}.ra-hourglass:before{content:\"\"}.ra-hydra:before{content:\"\"}.ra-hydra-shot:before{content:\"\"}.ra-ice-cube:before{content:\"\"}.ra-implosion:before{content:\"\"}.ra-incense:before{content:\"\"}.ra-insect-jaws:before{content:\"\"}.ra-interdiction:before{content:\"\"}.ra-jetpack:before{content:\"\"}.ra-jigsaw-piece:before{content:\"\"}.ra-kaleidoscope:before{content:\"\"}.ra-kettlebell:before{content:\"\"}.ra-key:before{content:\"\"}.ra-key-basic:before{content:\"\"}.ra-kitchen-knives:before{content:\"\"}.ra-knife:before{content:\"\"}.ra-knife-fork:before{content:\"\"}.ra-knight-helmet:before{content:\"\"}.ra-kunai:before{content:\"\"}.ra-lantern-flame:before{content:\"\"}.ra-large-hammer:before{content:\"\"}.ra-laser-blast:before{content:\"\"}.ra-laser-site:before{content:\"\"}.ra-lava:before{content:\"\"}.ra-leaf:before{content:\"\"}.ra-leo:before{content:\"\"}.ra-level-four:before{content:\"\"}.ra-level-four-advanced:before{content:\"\"}.ra-level-three:before{content:\"\"}.ra-level-three-advanced:before{content:\"\"}.ra-level-two:before{content:\"\"}.ra-level-two-advanced:before{content:\"\"}.ra-lever:before{content:\"\"}.ra-libra:before{content:\"\"}.ra-light-bulb:before{content:\"\"}.ra-lighthouse:before{content:\"\"}.ra-lightning:before{content:\"\"}.ra-lightning-bolt:before{content:\"\"}.ra-lightning-storm:before{content:\"\"}.ra-lightning-sword:before{content:\"\"}.ra-lightning-trio:before{content:\"\"}.ra-lion:before{content:\"\"}.ra-lit-candelabra:before{content:\"\"}.ra-load:before{content:\"\"}.ra-locked-fortress:before{content:\"\"}.ra-love-howl:before{content:\"\"}.ra-maggot:before{content:\"\"}.ra-magnet:before{content:\"\"}.ra-mass-driver:before{content:\"\"}.ra-match:before{content:\"\"}.ra-meat:before{content:\"\"}.ra-meat-hook:before{content:\"\"}.ra-medical-pack:before{content:\"\"}.ra-metal-gate:before{content:\"\"}.ra-microphone:before{content:\"\"}.ra-mine-wagon:before{content:\"\"}.ra-mining-diamonds:before{content:\"\"}.ra-mirror:before{content:\"\"}.ra-monster-skull:before{content:\"\"}.ra-mountains:before{content:\"\"}.ra-moon-sun:before{content:\"\"}.ra-mp5:before{content:\"\"}.ra-muscle-fat:before{content:\"\"}.ra-muscle-up:before{content:\"\"}.ra-musket:before{content:\"\"}.ra-nails:before{content:\"\"}.ra-nodular:before{content:\"\"}.ra-noose:before{content:\"\"}.ra-nuclear:before{content:\"\"}.ra-ocarina:before{content:\"\"}.ra-ocean-emblem:before{content:\"\"}.ra-octopus:before{content:\"\"}.ra-omega:before{content:\"\"}.ra-on-target:before{content:\"\"}.ra-ophiuchus:before{content:\"\"}.ra-overhead:before{content:\"\"}.ra-overmind:before{content:\"\"}.ra-palm-tree:before{content:\"\"}.ra-pawn:before{content:\"\"}.ra-pawprint:before{content:\"\"}.ra-perspective-dice-five:before{content:\"\"}.ra-perspective-dice-four:before{content:\"\"}.ra-perspective-dice-one:before{content:\"\"}.ra-perspective-dice-random:before{content:\"\"}.ra-perspective-dice-six:before{content:\"\"}.ra-perspective-dice-two:before{content:\"\"}.ra-perspective-dice-three:before{content:\"\"}.ra-pill:before{content:\"\"}.ra-pills:before{content:\"\"}.ra-pine-tree:before{content:\"\"}.ra-ping-pong:before{content:\"\"}.ra-pisces:before{content:\"\"}.ra-plain-dagger:before{content:\"\"}.ra-player:before{content:\"\"}.ra-player-despair:before{content:\"\"}.ra-player-dodge:before{content:\"\"}.ra-player-king:before{content:\"\"}.ra-player-lift:before{content:\"\"}.ra-player-pain:before{content:\"\"}.ra-player-pyromaniac:before{content:\"\"}.ra-player-shot:before{content:\"\"}.ra-player-teleport:before{content:\"\"}.ra-player-thunder-struck:before{content:\"\"}.ra-podium:before{content:\"\"}.ra-poison-cloud:before{content:\"\"}.ra-potion:before{content:\"\"}.ra-pyramids:before{content:\"\"}.ra-queen-crown:before{content:\"\"}.ra-quill-ink:before{content:\"\"}.ra-rabbit:before{content:\"\"}.ra-radar-dish:before{content:\"\"}.ra-radial-balance:before{content:\"\"}.ra-radioactive:before{content:\"\"}.ra-raven:before{content:\"\"}.ra-reactor:before{content:\"\"}.ra-recycle:before{content:\"\"}.ra-regeneration:before{content:\"\"}.ra-relic-blade:before{content:\"\"}.ra-repair:before{content:\"\"}.ra-reverse:before{content:\"\"}.ra-revolver:before{content:\"\"}.ra-rifle:before{content:\"\"}.ra-ringing-bell:before{content:\"\"}.ra-roast-chicken:before{content:\"\"}.ra-robot-arm:before{content:\"\"}.ra-round-bottom-flask:before{content:\"\"}.ra-round-shield:before{content:\"\"}.ra-rss:before{content:\"\"}.ra-rune-stone:before{content:\"\"}.ra-sagittarius:before{content:\"\"}.ra-sapphire:before{content:\"\"}.ra-satellite:before{content:\"\"}.ra-save:before{content:\"\"}.ra-scorpio:before{content:\"\"}.ra-scroll-unfurled:before{content:\"\"}.ra-scythe:before{content:\"\"}.ra-sea-serpent:before{content:\"\"}.ra-seagull:before{content:\"\"}.ra-shark:before{content:\"\"}.ra-sheep:before{content:\"\"}.ra-sheriff:before{content:\"\"}.ra-shield:before{content:\"\"}.ra-ship-emblem:before{content:\"\"}.ra-shoe-prints:before{content:\"\"}.ra-shot-through-the-heart:before{content:\"\"}.ra-shotgun-shell:before{content:\"\"}.ra-shovel:before{content:\"\"}.ra-shuriken:before{content:\"\"}.ra-sickle:before{content:\"\"}.ra-sideswipe:before{content:\"\"}.ra-site:before{content:\"\"}.ra-skull:before{content:\"\"}.ra-skull-trophy:before{content:\"\"}.ra-slash-ring:before{content:\"\"}.ra-small-fire:before{content:\"\"}.ra-snail:before{content:\"\"}.ra-snake:before{content:\"\"}.ra-snorkel:before{content:\"\"}.ra-snowflake:before{content:\"\"}.ra-soccer-ball:before{content:\"\"}.ra-spades:before{content:\"\"}.ra-spades-card:before{content:\"\"}.ra-spawn-node:before{content:\"\"}.ra-spear-head:before{content:\"\"}.ra-speech-bubble:before{content:\"\"}.ra-speech-bubbles:before{content:\"\"}.ra-spider-face:before{content:\"\"}.ra-spikeball:before{content:\"\"}.ra-spiked-mace:before{content:\"\"}.ra-spiked-tentacle:before{content:\"\"}.ra-spinning-sword:before{content:\"\"}.ra-spiral-shell:before{content:\"\"}.ra-splash:before{content:\"\"}.ra-spray-can:before{content:\"\"}.ra-sprout:before{content:\"\"}.ra-sprout-emblem:before{content:\"\"}.ra-stopwatch:before{content:\"\"}.ra-suckered-tentacle:before{content:\"\"}.ra-suits:before{content:\"\"}.ra-sun:before{content:\"\"}.ra-sun-symbol:before{content:\"\"}.ra-sunbeams:before{content:\"\"}.ra-super-mushroom:before{content:\"\"}.ra-supersonic-arrow:before{content:\"\"}.ra-surveillance-camera:before{content:\"\"}.ra-syringe:before{content:\"\"}.ra-target-arrows:before{content:\"\"}.ra-target-laser:before{content:\"\"}.ra-targeted:before{content:\"\"}.ra-taurus:before{content:\"\"}.ra-telescope:before{content:\"\"}.ra-tentacle:before{content:\"\"}.ra-tesla:before{content:\"\"}.ra-thorn-arrow:before{content:\"\"}.ra-thorny-vine:before{content:\"\"}.ra-three-keys:before{content:\"\"}.ra-tic-tac-toe:before{content:\"\"}.ra-toast:before{content:\"\"}.ra-tombstone:before{content:\"\"}.ra-tooth:before{content:\"\"}.ra-torch:before{content:\"\"}.ra-tower:before{content:\"\"}.ra-trail:before{content:\"\"}.ra-trefoil-lily:before{content:\"\"}.ra-trident:before{content:\"\"}.ra-triforce:before{content:\"\"}.ra-trophy:before{content:\"\"}.ra-turd:before{content:\"\"}.ra-two-dragons:before{content:\"\"}.ra-two-hearts:before{content:\"\"}.ra-uncertainty:before{content:\"\"}.ra-underhand:before{content:\"\"}.ra-unplugged:before{content:\"\"}.ra-vase:before{content:\"\"}.ra-venomous-snake:before{content:\"\"}.ra-vest:before{content:\"\"}.ra-vial:before{content:\"\"}.ra-vine-whip:before{content:\"\"}.ra-virgo:before{content:\"\"}.ra-water-drop:before{content:\"\"}.ra-wifi:before{content:\"\"}.ra-wireless-signal:before{content:\"\"}.ra-wolf-head:before{content:\"\"}.ra-wolf-howl:before{content:\"\"}.ra-wooden-sign:before{content:\"\"}.ra-wrench:before{content:\"\"}.ra-wyvern:before{content:\"\"}.ra-x-mark:before{content:\"\"}.ra-zebra-shield:before{content:\"\"}.ra-arcane-mask:before{content:\"\"}.ra-aquarius:before{content:\"\"}.ra-apple:before{content:\"\"}.ra-anvil:before{content:\"\"}.ra-ankh:before{content:\"\"}.ra-angel-wings:before{content:\"\"}.ra-anchor:before{content:\"\"}.ra-ammo-bag:before{content:\"\"}.ra-alligator-clip:before{content:\"\"}.ra-all-for-one:before{content:\"\"}.ra-alien-fire:before{content:\"\"}.ra-acorn:before{content:\"\"}.tippy-box[data-animation=scale][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=scale][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=scale][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=scale][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=scale][data-state=hidden]{transform:scale(.5);opacity:0}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:\"\";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}.clr-clear,.clr-close{color:hsl(var(--bc)/1);background-color:hsl(var(--b2)/1);letter-spacing:normal}.clr-picker{background-color:hsl(var(--b1)/1)}.clr-field button{height:2.1rem;padding:.6rem .8rem}.note-hint-group .note-hint-item{min-width:200px;min-height:30px;display:block;padding:5px}.note-hint-group .note-hint-item:hover{border-radius:5px;background:#0000000d}.note-hint-group .active{border-radius:5px;background:#3c8dbc;color:#fff}.sp-replacer{border-color:hsl(var(--n)/var(--tw-border-opacity));--tw-border-opacity: .2;--tw-bg-opacity: 1;background-color:hsl(var(--b1)/var(--tw-bg-opacity))}.sp-replacer:active,.sp-replacer:hover{border-color:hsl(var(--n)/var(--tw-border-opacity));--tw-border-opacity: .2}.sp-light{--tw-bg-opacity: 1;background-color:hsl(var(--b2)/var(--tw-bg-opacity));--tw-border-opacity: .2;border-color:hsl(var(--b2)/var(--tw-border-opacity))}.sp-light .sp-input{--tw-text-opacity: 1;color:hsl(var(--bc)/var(--tw-text-opacity))}.sp-palette-container{--tw-border-opacity: .2;border-right-color:hsl(var(--b2)/var(--tw-border-opacity))}.sp-picker-container{--tw-border-opacity: .2;border-left-color:hsl(var(--b2)/var(--tw-border-opacity))}.ts-wrapper{color:inherit;min-width:80px}.ts-wrapper.single .ts-control{--tw-bg-opacity: 1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));padding:.6rem .8rem;min-height:2.1rem;cursor:pointer}.ts-control,.ts-wrapper.single.input-active .ts-control{--tw-bg-opacity: 1;background-color:hsl(var(--b1)/var(--tw-bg-opacity))}.ts-dropdown,.ts-control,.ts-control input{color:hsl(var(--bc)/1)}.ts-wrapper.multi .ts-control{--tw-bg-opacity: 1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));--tw-border-opacity: .1;border-color:hsl(var(--bc)/var(--tw-border-opacity));display:flex;align-items:center;flex-wrap:wrap;gap:.2rem;padding:.6rem .8rem;min-height:2.1rem}.ts-wrapper .ts-control{border-width:1px;border-color:hsl(var(--bc)/.1);border-radius:var(--rounded-btn, .5rem);background-color:hsl(var(--b1)/1);box-shadow:none;color:inherit;padding-right:2rem!important}.ts-wrapper:not(.has-items) .ts-control:after{content:\"\";position:absolute;right:.7rem;top:50%;width:.45rem;height:.45rem;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-70%) rotate(45deg);pointer-events:none;opacity:.5;transition:transform .15s ease}.ts-wrapper.dropdown-active:not(.has-items) .ts-control:after{transform:translateY(-30%) rotate(225deg)}.ts-wrapper.focus .ts-control{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:hsl(var(--p)/.3);border-color:transparent;box-shadow:none}.plugin-dropdown_input.focus.dropdown-active .ts-control{border-color:transparent}.ts-dropdown{--tw-bg-opacity: 1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));border-width:1px;border-color:hsl(var(--bc)/.1);border-radius:var(--rounded-btn, .5rem);box-shadow:none;z-index:9961;overflow:hidden;min-width:220px}.ts-dropdown .ts-dropdown-content{padding:.25rem 0}.ts-dropdown .option{padding:.4rem .6rem;color:inherit}.ts-dropdown .option.selected,.ts-dropdown .option.active{--tw-bg-opacity: 1;background-color:hsl(var(--p)/var(--tw-bg-opacity));color:hsl(var(--pc))}.ts-dropdown .option:disabled,.ts-dropdown .option.disabled{color:hsl(var(--bc)/.4)}.ts-wrapper.multi .ts-control .item{--tw-bg-opacity: 1;background-color:hsl(var(--n)/var(--tw-bg-opacity));border-radius:var(--rounded-btn, .5rem);--tw-text-opacity: 1;color:hsl(var(--bc)/var(--tw-text-opacity));line-height:1.2rem;border-width:0;padding:.3rem .6rem;margin:0}.ts-wrapper.multi .ts-control .item .remove{--tw-text-opacity: 1;color:hsl(var(--nc)/var(--tw-text-opacity));border-left:none;padding-left:.3rem}.ts-wrapper.single .ts-control .item{background:none;padding:0;border-radius:0}.ts-dropdown input,.ts-dropdown .dropdown-input{background-color:hsl(var(--b1)/1);color:inherit;border-color:hsl(var(--bc)/.1)!important;border-width:1px;padding:.5rem .6rem;width:100%;box-sizing:border-box}:is(.ts-dropdown input,.ts-dropdown .dropdown-input):focus{outline:none}.ts-dropdown .dropdown-input-wrap{padding:.4rem}.ts-wrapper .ts-control input::placeholder{--tw-text-opacity: .4;color:hsl(var(--bc)/var(--tw-text-opacity))}.ts-wrapper .ts-control .clear-button{color:hsl(var(--bc)/.6)}.ts-wrapper .badge{display:inline-block;width:16px;height:16px;margin-right:6px;border-radius:2px}.ts-dropdown,.ts-control,.ts-control input{font-size:14px;color:hsl(var(--bc)/1)}.ts-wrapper .no-results{color:hsl(var(--nc)/.6)}.ts-wrapper.loading:before{display:none}@media(max-width:767px){.note-popover{left:0!important;width:100%!important}}\n"
  },
  {
    "path": "public/build/assets/vendor-final--o6gRmZ3.js",
    "content": "(()=>{var Ru={669:(b,L,Y)=>{b.exports=Y(609)},448:(b,L,Y)=>{var q=Y(867),f=Y(26),_=Y(372),j=Y(327),S=Y(97),k=Y(109),P=Y(985),N=Y(61);b.exports=function(w){return new Promise((function(ee,E){var D=w.data,y=w.headers,p=w.responseType;q.isFormData(D)&&delete y[\"Content-Type\"];var c=new XMLHttpRequest;if(w.auth){var u=w.auth.username||\"\",v=w.auth.password?unescape(encodeURIComponent(w.auth.password)):\"\";y.Authorization=\"Basic \"+btoa(u+\":\"+v)}var T=S(w.baseURL,w.url);function H(){if(c){var le=\"getAllResponseHeaders\"in c?k(c.getAllResponseHeaders()):null,a={data:p&&p!==\"text\"&&p!==\"json\"?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:le,config:w,request:c};f(ee,E,a),c=null}}if(c.open(w.method.toUpperCase(),j(T,w.params,w.paramsSerializer),!0),c.timeout=w.timeout,\"onloadend\"in c?c.onloadend=H:c.onreadystatechange=function(){c&&c.readyState===4&&(c.status!==0||c.responseURL&&c.responseURL.indexOf(\"file:\")===0)&&setTimeout(H)},c.onabort=function(){c&&(E(N(\"Request aborted\",w,\"ECONNABORTED\",c)),c=null)},c.onerror=function(){E(N(\"Network Error\",w,null,c)),c=null},c.ontimeout=function(){var le=\"timeout of \"+w.timeout+\"ms exceeded\";w.timeoutErrorMessage&&(le=w.timeoutErrorMessage),E(N(le,w,w.transitional&&w.transitional.clarifyTimeoutError?\"ETIMEDOUT\":\"ECONNABORTED\",c)),c=null},q.isStandardBrowserEnv()){var B=(w.withCredentials||P(T))&&w.xsrfCookieName?_.read(w.xsrfCookieName):void 0;B&&(y[w.xsrfHeaderName]=B)}\"setRequestHeader\"in c&&q.forEach(y,(function(le,a){D===void 0&&a.toLowerCase()===\"content-type\"?delete y[a]:c.setRequestHeader(a,le)})),q.isUndefined(w.withCredentials)||(c.withCredentials=!!w.withCredentials),p&&p!==\"json\"&&(c.responseType=w.responseType),typeof w.onDownloadProgress==\"function\"&&c.addEventListener(\"progress\",w.onDownloadProgress),typeof w.onUploadProgress==\"function\"&&c.upload&&c.upload.addEventListener(\"progress\",w.onUploadProgress),w.cancelToken&&w.cancelToken.promise.then((function(le){c&&(c.abort(),E(le),c=null)})),D||(D=null),c.send(D)}))}},609:(b,L,Y)=>{var q=Y(867),f=Y(849),_=Y(321),j=Y(185);function S(P){var N=new _(P),w=f(_.prototype.request,N);return q.extend(w,_.prototype,N),q.extend(w,N),w}var k=S(Y(655));k.Axios=_,k.create=function(P){return S(j(k.defaults,P))},k.Cancel=Y(263),k.CancelToken=Y(972),k.isCancel=Y(502),k.all=function(P){return Promise.all(P)},k.spread=Y(713),k.isAxiosError=Y(268),b.exports=k,b.exports.default=k},263:b=>{function L(Y){this.message=Y}L.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},L.prototype.__CANCEL__=!0,b.exports=L},972:(b,L,Y)=>{var q=Y(263);function f(_){if(typeof _!=\"function\")throw new TypeError(\"executor must be a function.\");var j;this.promise=new Promise((function(k){j=k}));var S=this;_((function(k){S.reason||(S.reason=new q(k),j(S.reason))}))}f.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},f.source=function(){var _;return{token:new f((function(j){_=j})),cancel:_}},b.exports=f},502:b=>{b.exports=function(L){return!(!L||!L.__CANCEL__)}},321:(b,L,Y)=>{var q=Y(867),f=Y(327),_=Y(782),j=Y(572),S=Y(185),k=Y(875),P=k.validators;function N(w){this.defaults=w,this.interceptors={request:new _,response:new _}}N.prototype.request=function(w){typeof w==\"string\"?(w=arguments[1]||{}).url=arguments[0]:w=w||{},(w=S(this.defaults,w)).method?w.method=w.method.toLowerCase():this.defaults.method?w.method=this.defaults.method.toLowerCase():w.method=\"get\";var ee=w.transitional;ee!==void 0&&k.assertOptions(ee,{silentJSONParsing:P.transitional(P.boolean,\"1.0.0\"),forcedJSONParsing:P.transitional(P.boolean,\"1.0.0\"),clarifyTimeoutError:P.transitional(P.boolean,\"1.0.0\")},!1);var E=[],D=!0;this.interceptors.request.forEach((function(H){typeof H.runWhen==\"function\"&&H.runWhen(w)===!1||(D=D&&H.synchronous,E.unshift(H.fulfilled,H.rejected))}));var y,p=[];if(this.interceptors.response.forEach((function(H){p.push(H.fulfilled,H.rejected)})),!D){var c=[j,void 0];for(Array.prototype.unshift.apply(c,E),c=c.concat(p),y=Promise.resolve(w);c.length;)y=y.then(c.shift(),c.shift());return y}for(var u=w;E.length;){var v=E.shift(),T=E.shift();try{u=v(u)}catch(H){T(H);break}}try{y=j(u)}catch(H){return Promise.reject(H)}for(;p.length;)y=y.then(p.shift(),p.shift());return y},N.prototype.getUri=function(w){return w=S(this.defaults,w),f(w.url,w.params,w.paramsSerializer).replace(/^\\?/,\"\")},q.forEach([\"delete\",\"get\",\"head\",\"options\"],(function(w){N.prototype[w]=function(ee,E){return this.request(S(E||{},{method:w,url:ee,data:(E||{}).data}))}})),q.forEach([\"post\",\"put\",\"patch\"],(function(w){N.prototype[w]=function(ee,E,D){return this.request(S(D||{},{method:w,url:ee,data:E}))}})),b.exports=N},782:(b,L,Y)=>{var q=Y(867);function f(){this.handlers=[]}f.prototype.use=function(_,j,S){return this.handlers.push({fulfilled:_,rejected:j,synchronous:!!S&&S.synchronous,runWhen:S?S.runWhen:null}),this.handlers.length-1},f.prototype.eject=function(_){this.handlers[_]&&(this.handlers[_]=null)},f.prototype.forEach=function(_){q.forEach(this.handlers,(function(j){j!==null&&_(j)}))},b.exports=f},97:(b,L,Y)=>{var q=Y(793),f=Y(303);b.exports=function(_,j){return _&&!q(j)?f(_,j):j}},61:(b,L,Y)=>{var q=Y(481);b.exports=function(f,_,j,S,k){var P=new Error(f);return q(P,_,j,S,k)}},572:(b,L,Y)=>{var q=Y(867),f=Y(527),_=Y(502),j=Y(655);function S(k){k.cancelToken&&k.cancelToken.throwIfRequested()}b.exports=function(k){return S(k),k.headers=k.headers||{},k.data=f.call(k,k.data,k.headers,k.transformRequest),k.headers=q.merge(k.headers.common||{},k.headers[k.method]||{},k.headers),q.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],(function(P){delete k.headers[P]})),(k.adapter||j.adapter)(k).then((function(P){return S(k),P.data=f.call(k,P.data,P.headers,k.transformResponse),P}),(function(P){return _(P)||(S(k),P&&P.response&&(P.response.data=f.call(k,P.response.data,P.response.headers,k.transformResponse))),Promise.reject(P)}))}},481:b=>{b.exports=function(L,Y,q,f,_){return L.config=Y,q&&(L.code=q),L.request=f,L.response=_,L.isAxiosError=!0,L.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},L}},185:(b,L,Y)=>{var q=Y(867);b.exports=function(f,_){_=_||{};var j={},S=[\"url\",\"method\",\"data\"],k=[\"headers\",\"auth\",\"proxy\",\"params\"],P=[\"baseURL\",\"transformRequest\",\"transformResponse\",\"paramsSerializer\",\"timeout\",\"timeoutMessage\",\"withCredentials\",\"adapter\",\"responseType\",\"xsrfCookieName\",\"xsrfHeaderName\",\"onUploadProgress\",\"onDownloadProgress\",\"decompress\",\"maxContentLength\",\"maxBodyLength\",\"maxRedirects\",\"transport\",\"httpAgent\",\"httpsAgent\",\"cancelToken\",\"socketPath\",\"responseEncoding\"],N=[\"validateStatus\"];function w(y,p){return q.isPlainObject(y)&&q.isPlainObject(p)?q.merge(y,p):q.isPlainObject(p)?q.merge({},p):q.isArray(p)?p.slice():p}function ee(y){q.isUndefined(_[y])?q.isUndefined(f[y])||(j[y]=w(void 0,f[y])):j[y]=w(f[y],_[y])}q.forEach(S,(function(y){q.isUndefined(_[y])||(j[y]=w(void 0,_[y]))})),q.forEach(k,ee),q.forEach(P,(function(y){q.isUndefined(_[y])?q.isUndefined(f[y])||(j[y]=w(void 0,f[y])):j[y]=w(void 0,_[y])})),q.forEach(N,(function(y){y in _?j[y]=w(f[y],_[y]):y in f&&(j[y]=w(void 0,f[y]))}));var E=S.concat(k).concat(P).concat(N),D=Object.keys(f).concat(Object.keys(_)).filter((function(y){return E.indexOf(y)===-1}));return q.forEach(D,ee),j}},26:(b,L,Y)=>{var q=Y(61);b.exports=function(f,_,j){var S=j.config.validateStatus;j.status&&S&&!S(j.status)?_(q(\"Request failed with status code \"+j.status,j.config,null,j.request,j)):f(j)}},527:(b,L,Y)=>{var q=Y(867),f=Y(655);b.exports=function(_,j,S){var k=this||f;return q.forEach(S,(function(P){_=P.call(k,_,j)})),_}},655:(b,L,Y)=>{var q=Y(155),f=Y(867),_=Y(16),j=Y(481),S={\"Content-Type\":\"application/x-www-form-urlencoded\"};function k(w,ee){!f.isUndefined(w)&&f.isUndefined(w[\"Content-Type\"])&&(w[\"Content-Type\"]=ee)}var P,N={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:((typeof XMLHttpRequest<\"u\"||q!==void 0&&Object.prototype.toString.call(q)===\"[object process]\")&&(P=Y(448)),P),transformRequest:[function(w,ee){return _(ee,\"Accept\"),_(ee,\"Content-Type\"),f.isFormData(w)||f.isArrayBuffer(w)||f.isBuffer(w)||f.isStream(w)||f.isFile(w)||f.isBlob(w)?w:f.isArrayBufferView(w)?w.buffer:f.isURLSearchParams(w)?(k(ee,\"application/x-www-form-urlencoded;charset=utf-8\"),w.toString()):f.isObject(w)||ee&&ee[\"Content-Type\"]===\"application/json\"?(k(ee,\"application/json\"),(function(E,D,y){if(f.isString(E))try{return(D||JSON.parse)(E),f.trim(E)}catch(p){if(p.name!==\"SyntaxError\")throw p}return(y||JSON.stringify)(E)})(w)):w}],transformResponse:[function(w){var ee=this.transitional,E=ee&&ee.silentJSONParsing,D=ee&&ee.forcedJSONParsing,y=!E&&this.responseType===\"json\";if(y||D&&f.isString(w)&&w.length)try{return JSON.parse(w)}catch(p){if(y)throw p.name===\"SyntaxError\"?j(p,this,\"E_JSON_PARSE\"):p}return w}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(w){return w>=200&&w<300}};N.headers={common:{Accept:\"application/json, text/plain, */*\"}},f.forEach([\"delete\",\"get\",\"head\"],(function(w){N.headers[w]={}})),f.forEach([\"post\",\"put\",\"patch\"],(function(w){N.headers[w]=f.merge(S)})),b.exports=N},849:b=>{b.exports=function(L,Y){return function(){for(var q=new Array(arguments.length),f=0;f<q.length;f++)q[f]=arguments[f];return L.apply(Y,q)}}},327:(b,L,Y)=>{var q=Y(867);function f(_){return encodeURIComponent(_).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}b.exports=function(_,j,S){if(!j)return _;var k;if(S)k=S(j);else if(q.isURLSearchParams(j))k=j.toString();else{var P=[];q.forEach(j,(function(w,ee){w!=null&&(q.isArray(w)?ee+=\"[]\":w=[w],q.forEach(w,(function(E){q.isDate(E)?E=E.toISOString():q.isObject(E)&&(E=JSON.stringify(E)),P.push(f(ee)+\"=\"+f(E))})))})),k=P.join(\"&\")}if(k){var N=_.indexOf(\"#\");N!==-1&&(_=_.slice(0,N)),_+=(_.indexOf(\"?\")===-1?\"?\":\"&\")+k}return _}},303:b=>{b.exports=function(L,Y){return Y?L.replace(/\\/+$/,\"\")+\"/\"+Y.replace(/^\\/+/,\"\"):L}},372:(b,L,Y)=>{var q=Y(867);b.exports=q.isStandardBrowserEnv()?{write:function(f,_,j,S,k,P){var N=[];N.push(f+\"=\"+encodeURIComponent(_)),q.isNumber(j)&&N.push(\"expires=\"+new Date(j).toGMTString()),q.isString(S)&&N.push(\"path=\"+S),q.isString(k)&&N.push(\"domain=\"+k),P===!0&&N.push(\"secure\"),document.cookie=N.join(\"; \")},read:function(f){var _=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+f+\")=([^;]*)\"));return _?decodeURIComponent(_[3]):null},remove:function(f){this.write(f,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},793:b=>{b.exports=function(L){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(L)}},268:b=>{b.exports=function(L){return typeof L==\"object\"&&L.isAxiosError===!0}},985:(b,L,Y)=>{var q=Y(867);b.exports=q.isStandardBrowserEnv()?(function(){var f,_=/(msie|trident)/i.test(navigator.userAgent),j=document.createElement(\"a\");function S(k){var P=k;return _&&(j.setAttribute(\"href\",P),P=j.href),j.setAttribute(\"href\",P),{href:j.href,protocol:j.protocol?j.protocol.replace(/:$/,\"\"):\"\",host:j.host,search:j.search?j.search.replace(/^\\?/,\"\"):\"\",hash:j.hash?j.hash.replace(/^#/,\"\"):\"\",hostname:j.hostname,port:j.port,pathname:j.pathname.charAt(0)===\"/\"?j.pathname:\"/\"+j.pathname}}return f=S(window.location.href),function(k){var P=q.isString(k)?S(k):k;return P.protocol===f.protocol&&P.host===f.host}})():function(){return!0}},16:(b,L,Y)=>{var q=Y(867);b.exports=function(f,_){q.forEach(f,(function(j,S){S!==_&&S.toUpperCase()===_.toUpperCase()&&(f[_]=j,delete f[S])}))}},109:(b,L,Y)=>{var q=Y(867),f=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];b.exports=function(_){var j,S,k,P={};return _&&q.forEach(_.split(`\n`),(function(N){if(k=N.indexOf(\":\"),j=q.trim(N.substr(0,k)).toLowerCase(),S=q.trim(N.substr(k+1)),j){if(P[j]&&f.indexOf(j)>=0)return;P[j]=j===\"set-cookie\"?(P[j]?P[j]:[]).concat([S]):P[j]?P[j]+\", \"+S:S}})),P}},713:b=>{b.exports=function(L){return function(Y){return L.apply(null,Y)}}},875:(b,L,Y)=>{var q=Y(593),f={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach((function(k,P){f[k]=function(N){return typeof N===k||\"a\"+(P<1?\"n \":\" \")+k}}));var _={},j=q.version.split(\".\");function S(k,P){for(var N=P?P.split(\".\"):j,w=k.split(\".\"),ee=0;ee<3;ee++){if(N[ee]>w[ee])return!0;if(N[ee]<w[ee])return!1}return!1}f.transitional=function(k,P,N){var w=P&&S(P);function ee(E,D){return\"[Axios v\"+q.version+\"] Transitional option '\"+E+\"'\"+D+(N?\". \"+N:\"\")}return function(E,D,y){if(k===!1)throw new Error(ee(D,\" has been removed in \"+P));return w&&!_[D]&&(_[D]=!0,console.warn(ee(D,\" has been deprecated since v\"+P+\" and will be removed in the near future\"))),!k||k(E,D,y)}},b.exports={isOlderVersion:S,assertOptions:function(k,P,N){if(typeof k!=\"object\")throw new TypeError(\"options must be an object\");for(var w=Object.keys(k),ee=w.length;ee-- >0;){var E=w[ee],D=P[E];if(D){var y=k[E],p=y===void 0||D(y,E,k);if(p!==!0)throw new TypeError(\"option \"+E+\" must be \"+p)}else if(N!==!0)throw Error(\"Unknown option \"+E)}},validators:f}},867:(b,L,Y)=>{var q=Y(849),f=Object.prototype.toString;function _(w){return f.call(w)===\"[object Array]\"}function j(w){return w===void 0}function S(w){return w!==null&&typeof w==\"object\"}function k(w){if(f.call(w)!==\"[object Object]\")return!1;var ee=Object.getPrototypeOf(w);return ee===null||ee===Object.prototype}function P(w){return f.call(w)===\"[object Function]\"}function N(w,ee){if(w!=null)if(typeof w!=\"object\"&&(w=[w]),_(w))for(var E=0,D=w.length;E<D;E++)ee.call(null,w[E],E,w);else for(var y in w)Object.prototype.hasOwnProperty.call(w,y)&&ee.call(null,w[y],y,w)}b.exports={isArray:_,isArrayBuffer:function(w){return f.call(w)===\"[object ArrayBuffer]\"},isBuffer:function(w){return w!==null&&!j(w)&&w.constructor!==null&&!j(w.constructor)&&typeof w.constructor.isBuffer==\"function\"&&w.constructor.isBuffer(w)},isFormData:function(w){return typeof FormData<\"u\"&&w instanceof FormData},isArrayBufferView:function(w){return typeof ArrayBuffer<\"u\"&&ArrayBuffer.isView?ArrayBuffer.isView(w):w&&w.buffer&&w.buffer instanceof ArrayBuffer},isString:function(w){return typeof w==\"string\"},isNumber:function(w){return typeof w==\"number\"},isObject:S,isPlainObject:k,isUndefined:j,isDate:function(w){return f.call(w)===\"[object Date]\"},isFile:function(w){return f.call(w)===\"[object File]\"},isBlob:function(w){return f.call(w)===\"[object Blob]\"},isFunction:P,isStream:function(w){return S(w)&&P(w.pipe)},isURLSearchParams:function(w){return typeof URLSearchParams<\"u\"&&w instanceof URLSearchParams},isStandardBrowserEnv:function(){return(typeof navigator>\"u\"||navigator.product!==\"ReactNative\"&&navigator.product!==\"NativeScript\"&&navigator.product!==\"NS\")&&typeof window<\"u\"&&typeof document<\"u\"},forEach:N,merge:function w(){var ee={};function E(p,c){k(ee[c])&&k(p)?ee[c]=w(ee[c],p):k(p)?ee[c]=w({},p):_(p)?ee[c]=p.slice():ee[c]=p}for(var D=0,y=arguments.length;D<y;D++)N(arguments[D],E);return ee},extend:function(w,ee,E){return N(ee,(function(D,y){w[y]=E&&typeof D==\"function\"?q(D,E):D})),w},trim:function(w){return w.trim?w.trim():w.replace(/^\\s+|\\s+$/g,\"\")},stripBOM:function(w){return w.charCodeAt(0)===65279&&(w=w.slice(1)),w}}},2:()=>{if(typeof jQuery>\"u\")throw new Error(\"Bootstrap's JavaScript requires jQuery\");(function(b){var L=jQuery.fn.jquery.split(\" \")[0].split(\".\");if(L[0]<2&&L[1]<9||L[0]==1&&L[1]==9&&L[2]<1||L[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")})(),(function(b){b.fn.emulateTransitionEnd=function(L){var Y=!1,q=this;return b(this).one(\"bsTransitionEnd\",(function(){Y=!0})),setTimeout((function(){Y||b(q).trigger(b.support.transition.end)}),L),this},b((function(){b.support.transition=(function(){var L=document.createElement(\"bootstrap\"),Y={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var q in Y)if(L.style[q]!==void 0)return{end:Y[q]};return!1})(),b.support.transition&&(b.event.special.bsTransitionEnd={bindType:b.support.transition.end,delegateType:b.support.transition.end,handle:function(L){if(b(L.target).is(this))return L.handleObj.handler.apply(this,arguments)}})}))})(jQuery),(function(b){var L='[data-dismiss=\"alert\"]',Y=function(f){b(f).on(\"click\",L,this.close)};Y.VERSION=\"3.4.1\",Y.TRANSITION_DURATION=150,Y.prototype.close=function(f){var _=b(this),j=_.attr(\"data-target\");j||(j=(j=_.attr(\"href\"))&&j.replace(/.*(?=#[^\\s]*$)/,\"\")),j=j===\"#\"?[]:j;var S=b(document).find(j);function k(){S.detach().trigger(\"closed.bs.alert\").remove()}f&&f.preventDefault(),S.length||(S=_.closest(\".alert\")),S.trigger(f=b.Event(\"close.bs.alert\")),f.isDefaultPrevented()||(S.removeClass(\"in\"),b.support.transition&&S.hasClass(\"fade\")?S.one(\"bsTransitionEnd\",k).emulateTransitionEnd(Y.TRANSITION_DURATION):k())};var q=b.fn.alert;b.fn.alert=function(f){return this.each((function(){var _=b(this),j=_.data(\"bs.alert\");j||_.data(\"bs.alert\",j=new Y(this)),typeof f==\"string\"&&j[f].call(_)}))},b.fn.alert.Constructor=Y,b.fn.alert.noConflict=function(){return b.fn.alert=q,this},b(document).on(\"click.bs.alert.data-api\",L,Y.prototype.close)})(jQuery),(function(b){var L=function(f,_){this.$element=b(f),this.options=b.extend({},L.DEFAULTS,_),this.isLoading=!1};function Y(f){return this.each((function(){var _=b(this),j=_.data(\"bs.button\"),S=typeof f==\"object\"&&f;j||_.data(\"bs.button\",j=new L(this,S)),f==\"toggle\"?j.toggle():f&&j.setState(f)}))}L.VERSION=\"3.4.1\",L.DEFAULTS={loadingText:\"loading...\"},L.prototype.setState=function(f){var _=\"disabled\",j=this.$element,S=j.is(\"input\")?\"val\":\"html\",k=j.data();f+=\"Text\",k.resetText==null&&j.data(\"resetText\",j[S]()),setTimeout(b.proxy((function(){j[S](k[f]==null?this.options[f]:k[f]),f==\"loadingText\"?(this.isLoading=!0,j.addClass(_).attr(_,_).prop(_,!0)):this.isLoading&&(this.isLoading=!1,j.removeClass(_).removeAttr(_).prop(_,!1))}),this),0)},L.prototype.toggle=function(){var f=!0,_=this.$element.closest('[data-toggle=\"buttons\"]');if(_.length){var j=this.$element.find(\"input\");j.prop(\"type\")==\"radio\"?(j.prop(\"checked\")&&(f=!1),_.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):j.prop(\"type\")==\"checkbox\"&&(j.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(f=!1),this.$element.toggleClass(\"active\")),j.prop(\"checked\",this.$element.hasClass(\"active\")),f&&j.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var q=b.fn.button;b.fn.button=Y,b.fn.button.Constructor=L,b.fn.button.noConflict=function(){return b.fn.button=q,this},b(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',(function(f){var _=b(f.target).closest(\".btn\");Y.call(_,\"toggle\"),b(f.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(f.preventDefault(),_.is(\"input,button\")?_.trigger(\"focus\"):_.find(\"input:visible,button:visible\").first().trigger(\"focus\"))})).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',(function(f){b(f.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(f.type))}))})(jQuery),(function(b){var L=function(_,j){this.$element=b(_),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=j,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",b.proxy(this.keydown,this)),this.options.pause==\"hover\"&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",b.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",b.proxy(this.cycle,this))};function Y(_){return this.each((function(){var j=b(this),S=j.data(\"bs.carousel\"),k=b.extend({},L.DEFAULTS,j.data(),typeof _==\"object\"&&_),P=typeof _==\"string\"?_:k.slide;S||j.data(\"bs.carousel\",S=new L(this,k)),typeof _==\"number\"?S.to(_):P?S[P]():k.interval&&S.pause().cycle()}))}L.VERSION=\"3.4.1\",L.TRANSITION_DURATION=600,L.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},L.prototype.keydown=function(_){if(!/input|textarea/i.test(_.target.tagName)){switch(_.which){case 37:this.prev();break;case 39:this.next();break;default:return}_.preventDefault()}},L.prototype.cycle=function(_){return _||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(b.proxy(this.next,this),this.options.interval)),this},L.prototype.getItemIndex=function(_){return this.$items=_.parent().children(\".item\"),this.$items.index(_||this.$active)},L.prototype.getItemForDirection=function(_,j){var S=this.getItemIndex(j);if((_==\"prev\"&&S===0||_==\"next\"&&S==this.$items.length-1)&&!this.options.wrap)return j;var k=(S+(_==\"prev\"?-1:1))%this.$items.length;return this.$items.eq(k)},L.prototype.to=function(_){var j=this,S=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(_>this.$items.length-1||_<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",(function(){j.to(_)})):S==_?this.pause().cycle():this.slide(_>S?\"next\":\"prev\",this.$items.eq(_))},L.prototype.pause=function(_){return _||(this.paused=!0),this.$element.find(\".next, .prev\").length&&b.support.transition&&(this.$element.trigger(b.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},L.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},L.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},L.prototype.slide=function(_,j){var S=this.$element.find(\".item.active\"),k=j||this.getItemForDirection(_,S),P=this.interval,N=_==\"next\"?\"left\":\"right\",w=this;if(k.hasClass(\"active\"))return this.sliding=!1;var ee=k[0],E=b.Event(\"slide.bs.carousel\",{relatedTarget:ee,direction:N});if(this.$element.trigger(E),!E.isDefaultPrevented()){if(this.sliding=!0,P&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var D=b(this.$indicators.children()[this.getItemIndex(k)]);D&&D.addClass(\"active\")}var y=b.Event(\"slid.bs.carousel\",{relatedTarget:ee,direction:N});return b.support.transition&&this.$element.hasClass(\"slide\")?(k.addClass(_),typeof k==\"object\"&&k.length&&k[0].offsetWidth,S.addClass(N),k.addClass(N),S.one(\"bsTransitionEnd\",(function(){k.removeClass([_,N].join(\" \")).addClass(\"active\"),S.removeClass([\"active\",N].join(\" \")),w.sliding=!1,setTimeout((function(){w.$element.trigger(y)}),0)})).emulateTransitionEnd(L.TRANSITION_DURATION)):(S.removeClass(\"active\"),k.addClass(\"active\"),this.sliding=!1,this.$element.trigger(y)),P&&this.cycle(),this}};var q=b.fn.carousel;b.fn.carousel=Y,b.fn.carousel.Constructor=L,b.fn.carousel.noConflict=function(){return b.fn.carousel=q,this};var f=function(_){var j=b(this),S=j.attr(\"href\");S&&(S=S.replace(/.*(?=#[^\\s]+$)/,\"\"));var k=j.attr(\"data-target\")||S,P=b(document).find(k);if(P.hasClass(\"carousel\")){var N=b.extend({},P.data(),j.data()),w=j.attr(\"data-slide-to\");w&&(N.interval=!1),Y.call(P,N),w&&P.data(\"bs.carousel\").to(w),_.preventDefault()}};b(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",f).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",f),b(window).on(\"load\",(function(){b('[data-ride=\"carousel\"]').each((function(){var _=b(this);Y.call(_,_.data())}))}))})(jQuery),(function(b){var L=function(_,j){this.$element=b(_),this.options=b.extend({},L.DEFAULTS,j),this.$trigger=b('[data-toggle=\"collapse\"][href=\"#'+_.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+_.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function Y(_){var j,S=_.attr(\"data-target\")||(j=_.attr(\"href\"))&&j.replace(/.*(?=#[^\\s]+$)/,\"\");return b(document).find(S)}function q(_){return this.each((function(){var j=b(this),S=j.data(\"bs.collapse\"),k=b.extend({},L.DEFAULTS,j.data(),typeof _==\"object\"&&_);!S&&k.toggle&&/show|hide/.test(_)&&(k.toggle=!1),S||j.data(\"bs.collapse\",S=new L(this,k)),typeof _==\"string\"&&S[_]()}))}L.VERSION=\"3.4.1\",L.TRANSITION_DURATION=350,L.DEFAULTS={toggle:!0},L.prototype.dimension=function(){return this.$element.hasClass(\"width\")?\"width\":\"height\"},L.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var _,j=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(j&&j.length&&(_=j.data(\"bs.collapse\"))&&_.transitioning)){var S=b.Event(\"show.bs.collapse\");if(this.$element.trigger(S),!S.isDefaultPrevented()){j&&j.length&&(q.call(j,\"hide\"),_||j.data(\"bs.collapse\",null));var k=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[k](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var P=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[k](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!b.support.transition)return P.call(this);var N=b.camelCase([\"scroll\",k].join(\"-\"));this.$element.one(\"bsTransitionEnd\",b.proxy(P,this)).emulateTransitionEnd(L.TRANSITION_DURATION)[k](this.$element[0][N])}}}},L.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var _=b.Event(\"hide.bs.collapse\");if(this.$element.trigger(_),!_.isDefaultPrevented()){var j=this.dimension();this.$element[j](this.$element[j]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var S=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};if(!b.support.transition)return S.call(this);this.$element[j](0).one(\"bsTransitionEnd\",b.proxy(S,this)).emulateTransitionEnd(L.TRANSITION_DURATION)}}},L.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},L.prototype.getParent=function(){return b(document).find(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(b.proxy((function(_,j){var S=b(j);this.addAriaAndCollapsedClass(Y(S),S)}),this)).end()},L.prototype.addAriaAndCollapsedClass=function(_,j){var S=_.hasClass(\"in\");_.attr(\"aria-expanded\",S),j.toggleClass(\"collapsed\",!S).attr(\"aria-expanded\",S)};var f=b.fn.collapse;b.fn.collapse=q,b.fn.collapse.Constructor=L,b.fn.collapse.noConflict=function(){return b.fn.collapse=f,this},b(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',(function(_){var j=b(this);j.attr(\"data-target\")||_.preventDefault();var S=Y(j),k=S.data(\"bs.collapse\")?\"toggle\":j.data();q.call(S,k)}))})(jQuery),(function(b){var L=\".dropdown-backdrop\",Y='[data-toggle=\"dropdown\"]',q=function(S){b(S).on(\"click.bs.dropdown\",this.toggle)};function f(S){var k=S.attr(\"data-target\");k||(k=(k=S.attr(\"href\"))&&/#[A-Za-z]/.test(k)&&k.replace(/.*(?=#[^\\s]*$)/,\"\"));var P=k!==\"#\"?b(document).find(k):null;return P&&P.length?P:S.parent()}function _(S){S&&S.which===3||(b(L).remove(),b(Y).each((function(){var k=b(this),P=f(k),N={relatedTarget:this};P.hasClass(\"open\")&&(S&&S.type==\"click\"&&/input|textarea/i.test(S.target.tagName)&&b.contains(P[0],S.target)||(P.trigger(S=b.Event(\"hide.bs.dropdown\",N)),S.isDefaultPrevented()||(k.attr(\"aria-expanded\",\"false\"),P.removeClass(\"open\").trigger(b.Event(\"hidden.bs.dropdown\",N)))))})))}q.VERSION=\"3.4.1\",q.prototype.toggle=function(S){var k=b(this);if(!k.is(\".disabled, :disabled\")){var P=f(k),N=P.hasClass(\"open\");if(_(),!N){\"ontouchstart\"in document.documentElement&&!P.closest(\".navbar-nav\").length&&b(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(b(this)).on(\"click\",_);var w={relatedTarget:this};if(P.trigger(S=b.Event(\"show.bs.dropdown\",w)),S.isDefaultPrevented())return;k.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),P.toggleClass(\"open\").trigger(b.Event(\"shown.bs.dropdown\",w))}return!1}},q.prototype.keydown=function(S){if(/(38|40|27|32)/.test(S.which)&&!/input|textarea/i.test(S.target.tagName)){var k=b(this);if(S.preventDefault(),S.stopPropagation(),!k.is(\".disabled, :disabled\")){var P=f(k),N=P.hasClass(\"open\");if(!N&&S.which!=27||N&&S.which==27)return S.which==27&&P.find(Y).trigger(\"focus\"),k.trigger(\"click\");var w=P.find(\".dropdown-menu li:not(.disabled):visible a\");if(w.length){var ee=w.index(S.target);S.which==38&&ee>0&&ee--,S.which==40&&ee<w.length-1&&ee++,~ee||(ee=0),w.eq(ee).trigger(\"focus\")}}}};var j=b.fn.dropdown;b.fn.dropdown=function(S){return this.each((function(){var k=b(this),P=k.data(\"bs.dropdown\");P||k.data(\"bs.dropdown\",P=new q(this)),typeof S==\"string\"&&P[S].call(k)}))},b.fn.dropdown.Constructor=q,b.fn.dropdown.noConflict=function(){return b.fn.dropdown=j,this},b(document).on(\"click.bs.dropdown.data-api\",_).on(\"click.bs.dropdown.data-api\",\".dropdown form\",(function(S){S.stopPropagation()})).on(\"click.bs.dropdown.data-api\",Y,q.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",Y,q.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",q.prototype.keydown)})(jQuery),(function(b){var L=function(f,_){this.options=_,this.$body=b(document.body),this.$element=b(f),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=\".navbar-fixed-top, .navbar-fixed-bottom\",this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,b.proxy((function(){this.$element.trigger(\"loaded.bs.modal\")}),this))};function Y(f,_){return this.each((function(){var j=b(this),S=j.data(\"bs.modal\"),k=b.extend({},L.DEFAULTS,j.data(),typeof f==\"object\"&&f);S||j.data(\"bs.modal\",S=new L(this,k)),typeof f==\"string\"?S[f](_):k.show&&S.show(_)}))}L.VERSION=\"3.4.1\",L.TRANSITION_DURATION=300,L.BACKDROP_TRANSITION_DURATION=150,L.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},L.prototype.toggle=function(f){return this.isShown?this.hide():this.show(f)},L.prototype.show=function(f){var _=this,j=b.Event(\"show.bs.modal\",{relatedTarget:f});this.$element.trigger(j),this.isShown||j.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',b.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",(function(){_.$element.one(\"mouseup.dismiss.bs.modal\",(function(S){b(S.target).is(_.$element)&&(_.ignoreBackdropClick=!0)}))})),this.backdrop((function(){var S=b.support.transition&&_.$element.hasClass(\"fade\");_.$element.parent().length||_.$element.appendTo(_.$body),_.$element.show().scrollTop(0),_.adjustDialog(),S&&_.$element[0].offsetWidth,_.$element.addClass(\"in\"),_.enforceFocus();var k=b.Event(\"shown.bs.modal\",{relatedTarget:f});S?_.$dialog.one(\"bsTransitionEnd\",(function(){_.$element.trigger(\"focus\").trigger(k)})).emulateTransitionEnd(L.TRANSITION_DURATION):_.$element.trigger(\"focus\").trigger(k)})))},L.prototype.hide=function(f){f&&f.preventDefault(),f=b.Event(\"hide.bs.modal\"),this.$element.trigger(f),this.isShown&&!f.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),b(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),b.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",b.proxy(this.hideModal,this)).emulateTransitionEnd(L.TRANSITION_DURATION):this.hideModal())},L.prototype.enforceFocus=function(){b(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",b.proxy((function(f){document===f.target||this.$element[0]===f.target||this.$element.has(f.target).length||this.$element.trigger(\"focus\")}),this))},L.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",b.proxy((function(f){f.which==27&&this.hide()}),this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},L.prototype.resize=function(){this.isShown?b(window).on(\"resize.bs.modal\",b.proxy(this.handleUpdate,this)):b(window).off(\"resize.bs.modal\")},L.prototype.hideModal=function(){var f=this;this.$element.hide(),this.backdrop((function(){f.$body.removeClass(\"modal-open\"),f.resetAdjustments(),f.resetScrollbar(),f.$element.trigger(\"hidden.bs.modal\")}))},L.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},L.prototype.backdrop=function(f){var _=this,j=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var S=b.support.transition&&j;if(this.$backdrop=b(document.createElement(\"div\")).addClass(\"modal-backdrop \"+j).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",b.proxy((function(P){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:P.target===P.currentTarget&&(this.options.backdrop==\"static\"?this.$element[0].focus():this.hide())}),this)),S&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!f)return;S?this.$backdrop.one(\"bsTransitionEnd\",f).emulateTransitionEnd(L.BACKDROP_TRANSITION_DURATION):f()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var k=function(){_.removeBackdrop(),f&&f()};b.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",k).emulateTransitionEnd(L.BACKDROP_TRANSITION_DURATION):k()}else f&&f()},L.prototype.handleUpdate=function(){this.adjustDialog()},L.prototype.adjustDialog=function(){var f=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&f?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!f?this.scrollbarWidth:\"\"})},L.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},L.prototype.checkScrollbar=function(){var f=window.innerWidth;if(!f){var _=document.documentElement.getBoundingClientRect();f=_.right-Math.abs(_.left)}this.bodyIsOverflowing=document.body.clientWidth<f,this.scrollbarWidth=this.measureScrollbar()},L.prototype.setScrollbar=function(){var f=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\";var _=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css(\"padding-right\",f+_),b(this.fixedContent).each((function(j,S){var k=S.style.paddingRight,P=b(S).css(\"padding-right\");b(S).data(\"padding-right\",k).css(\"padding-right\",parseFloat(P)+_+\"px\")})))},L.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad),b(this.fixedContent).each((function(f,_){var j=b(_).data(\"padding-right\");b(_).removeData(\"padding-right\"),_.style.paddingRight=j||\"\"}))},L.prototype.measureScrollbar=function(){var f=document.createElement(\"div\");f.className=\"modal-scrollbar-measure\",this.$body.append(f);var _=f.offsetWidth-f.clientWidth;return this.$body[0].removeChild(f),_};var q=b.fn.modal;b.fn.modal=Y,b.fn.modal.Constructor=L,b.fn.modal.noConflict=function(){return b.fn.modal=q,this},b(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',(function(f){var _=b(this),j=_.attr(\"href\"),S=_.attr(\"data-target\")||j&&j.replace(/.*(?=#[^\\s]+$)/,\"\"),k=b(document).find(S),P=k.data(\"bs.modal\")?\"toggle\":b.extend({remote:!/#/.test(j)&&j},k.data(),_.data());_.is(\"a\")&&f.preventDefault(),k.one(\"show.bs.modal\",(function(N){N.isDefaultPrevented()||k.one(\"hidden.bs.modal\",(function(){_.is(\":visible\")&&_.trigger(\"focus\")}))})),Y.call(k,P,this)}))})(jQuery),(function(b){var L=[\"sanitize\",\"whiteList\",\"sanitizeFn\"],Y=[\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"],q={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},f=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,_=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function j(N,w){var ee=N.nodeName.toLowerCase();if(b.inArray(ee,w)!==-1)return b.inArray(ee,Y)===-1||!!(N.nodeValue.match(f)||N.nodeValue.match(_));for(var E=b(w).filter((function(p,c){return c instanceof RegExp})),D=0,y=E.length;D<y;D++)if(ee.match(E[D]))return!0;return!1}function S(N,w,ee){if(N.length===0)return N;if(ee&&typeof ee==\"function\")return ee(N);if(!document.implementation||!document.implementation.createHTMLDocument)return N;var E=document.implementation.createHTMLDocument(\"sanitization\");E.body.innerHTML=N;for(var D=b.map(w,(function(a,Ee){return Ee})),y=b(E.body).find(\"*\"),p=0,c=y.length;p<c;p++){var u=y[p],v=u.nodeName.toLowerCase();if(b.inArray(v,D)!==-1)for(var T=b.map(u.attributes,(function(a){return a})),H=[].concat(w[\"*\"]||[],w[v]||[]),B=0,le=T.length;B<le;B++)j(T[B],H)||u.removeAttribute(T[B].nodeName);else u.parentNode.removeChild(u)}return E.body.innerHTML}var k=function(N,w){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",N,w)};k.VERSION=\"3.4.1\",k.TRANSITION_DURATION=150,k.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0},sanitize:!0,sanitizeFn:null,whiteList:q},k.prototype.init=function(N,w,ee){if(this.enabled=!0,this.type=N,this.$element=b(w),this.options=this.getOptions(ee),this.$viewport=this.options.viewport&&b(document).find(b.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var E=this.options.trigger.split(\" \"),D=E.length;D--;){var y=E[D];if(y==\"click\")this.$element.on(\"click.\"+this.type,this.options.selector,b.proxy(this.toggle,this));else if(y!=\"manual\"){var p=y==\"hover\"?\"mouseenter\":\"focusin\",c=y==\"hover\"?\"mouseleave\":\"focusout\";this.$element.on(p+\".\"+this.type,this.options.selector,b.proxy(this.enter,this)),this.$element.on(c+\".\"+this.type,this.options.selector,b.proxy(this.leave,this))}}this.options.selector?this._options=b.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},k.prototype.getDefaults=function(){return k.DEFAULTS},k.prototype.getOptions=function(N){var w=this.$element.data();for(var ee in w)w.hasOwnProperty(ee)&&b.inArray(ee,L)!==-1&&delete w[ee];return(N=b.extend({},this.getDefaults(),w,N)).delay&&typeof N.delay==\"number\"&&(N.delay={show:N.delay,hide:N.delay}),N.sanitize&&(N.template=S(N.template,N.whiteList,N.sanitizeFn)),N},k.prototype.getDelegateOptions=function(){var N={},w=this.getDefaults();return this._options&&b.each(this._options,(function(ee,E){w[ee]!=E&&(N[ee]=E)})),N},k.prototype.enter=function(N){var w=N instanceof this.constructor?N:b(N.currentTarget).data(\"bs.\"+this.type);if(w||(w=new this.constructor(N.currentTarget,this.getDelegateOptions()),b(N.currentTarget).data(\"bs.\"+this.type,w)),N instanceof b.Event&&(w.inState[N.type==\"focusin\"?\"focus\":\"hover\"]=!0),w.tip().hasClass(\"in\")||w.hoverState==\"in\")w.hoverState=\"in\";else{if(clearTimeout(w.timeout),w.hoverState=\"in\",!w.options.delay||!w.options.delay.show)return w.show();w.timeout=setTimeout((function(){w.hoverState==\"in\"&&w.show()}),w.options.delay.show)}},k.prototype.isInStateTrue=function(){for(var N in this.inState)if(this.inState[N])return!0;return!1},k.prototype.leave=function(N){var w=N instanceof this.constructor?N:b(N.currentTarget).data(\"bs.\"+this.type);if(w||(w=new this.constructor(N.currentTarget,this.getDelegateOptions()),b(N.currentTarget).data(\"bs.\"+this.type,w)),N instanceof b.Event&&(w.inState[N.type==\"focusout\"?\"focus\":\"hover\"]=!1),!w.isInStateTrue()){if(clearTimeout(w.timeout),w.hoverState=\"out\",!w.options.delay||!w.options.delay.hide)return w.hide();w.timeout=setTimeout((function(){w.hoverState==\"out\"&&w.hide()}),w.options.delay.hide)}},k.prototype.show=function(){var N=b.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(N);var w=b.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(N.isDefaultPrevented()||!w)return;var ee=this,E=this.tip(),D=this.getUID(this.type);this.setContent(),E.attr(\"id\",D),this.$element.attr(\"aria-describedby\",D),this.options.animation&&E.addClass(\"fade\");var y=typeof this.options.placement==\"function\"?this.options.placement.call(this,E[0],this.$element[0]):this.options.placement,p=/\\s?auto?\\s?/i,c=p.test(y);c&&(y=y.replace(p,\"\")||\"top\"),E.detach().css({top:0,left:0,display:\"block\"}).addClass(y).data(\"bs.\"+this.type,this),this.options.container?E.appendTo(b(document).find(this.options.container)):E.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var u=this.getPosition(),v=E[0].offsetWidth,T=E[0].offsetHeight;if(c){var H=y,B=this.getPosition(this.$viewport);y=y==\"bottom\"&&u.bottom+T>B.bottom?\"top\":y==\"top\"&&u.top-T<B.top?\"bottom\":y==\"right\"&&u.right+v>B.width?\"left\":y==\"left\"&&u.left-v<B.left?\"right\":y,E.removeClass(H).addClass(y)}var le=this.getCalculatedOffset(y,u,v,T);this.applyPlacement(le,y);var a=function(){var Ee=ee.hoverState;ee.$element.trigger(\"shown.bs.\"+ee.type),ee.hoverState=null,Ee==\"out\"&&ee.leave(ee)};b.support.transition&&this.$tip.hasClass(\"fade\")?E.one(\"bsTransitionEnd\",a).emulateTransitionEnd(k.TRANSITION_DURATION):a()}},k.prototype.applyPlacement=function(N,w){var ee=this.tip(),E=ee[0].offsetWidth,D=ee[0].offsetHeight,y=parseInt(ee.css(\"margin-top\"),10),p=parseInt(ee.css(\"margin-left\"),10);isNaN(y)&&(y=0),isNaN(p)&&(p=0),N.top+=y,N.left+=p,b.offset.setOffset(ee[0],b.extend({using:function(le){ee.css({top:Math.round(le.top),left:Math.round(le.left)})}},N),0),ee.addClass(\"in\");var c=ee[0].offsetWidth,u=ee[0].offsetHeight;w==\"top\"&&u!=D&&(N.top=N.top+D-u);var v=this.getViewportAdjustedDelta(w,N,c,u);v.left?N.left+=v.left:N.top+=v.top;var T=/top|bottom/.test(w),H=T?2*v.left-E+c:2*v.top-D+u,B=T?\"offsetWidth\":\"offsetHeight\";ee.offset(N),this.replaceArrow(H,ee[0][B],T)},k.prototype.replaceArrow=function(N,w,ee){this.arrow().css(ee?\"left\":\"top\",50*(1-N/w)+\"%\").css(ee?\"top\":\"left\",\"\")},k.prototype.setContent=function(){var N=this.tip(),w=this.getTitle();this.options.html?(this.options.sanitize&&(w=S(w,this.options.whiteList,this.options.sanitizeFn)),N.find(\".tooltip-inner\").html(w)):N.find(\".tooltip-inner\").text(w),N.removeClass(\"fade in top bottom left right\")},k.prototype.hide=function(N){var w=this,ee=b(this.$tip),E=b.Event(\"hide.bs.\"+this.type);function D(){w.hoverState!=\"in\"&&ee.detach(),w.$element&&w.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+w.type),N&&N()}if(this.$element.trigger(E),!E.isDefaultPrevented())return ee.removeClass(\"in\"),b.support.transition&&ee.hasClass(\"fade\")?ee.one(\"bsTransitionEnd\",D).emulateTransitionEnd(k.TRANSITION_DURATION):D(),this.hoverState=null,this},k.prototype.fixTitle=function(){var N=this.$element;(N.attr(\"title\")||typeof N.attr(\"data-original-title\")!=\"string\")&&N.attr(\"data-original-title\",N.attr(\"title\")||\"\").attr(\"title\",\"\")},k.prototype.hasContent=function(){return this.getTitle()},k.prototype.getPosition=function(N){var w=(N=N||this.$element)[0],ee=w.tagName==\"BODY\",E=w.getBoundingClientRect();E.width==null&&(E=b.extend({},E,{width:E.right-E.left,height:E.bottom-E.top}));var D=window.SVGElement&&w instanceof window.SVGElement,y=ee?{top:0,left:0}:D?null:N.offset(),p={scroll:ee?document.documentElement.scrollTop||document.body.scrollTop:N.scrollTop()},c=ee?{width:b(window).width(),height:b(window).height()}:null;return b.extend({},E,p,c,y)},k.prototype.getCalculatedOffset=function(N,w,ee,E){return N==\"bottom\"?{top:w.top+w.height,left:w.left+w.width/2-ee/2}:N==\"top\"?{top:w.top-E,left:w.left+w.width/2-ee/2}:N==\"left\"?{top:w.top+w.height/2-E/2,left:w.left-ee}:{top:w.top+w.height/2-E/2,left:w.left+w.width}},k.prototype.getViewportAdjustedDelta=function(N,w,ee,E){var D={top:0,left:0};if(!this.$viewport)return D;var y=this.options.viewport&&this.options.viewport.padding||0,p=this.getPosition(this.$viewport);if(/right|left/.test(N)){var c=w.top-y-p.scroll,u=w.top+y-p.scroll+E;c<p.top?D.top=p.top-c:u>p.top+p.height&&(D.top=p.top+p.height-u)}else{var v=w.left-y,T=w.left+y+ee;v<p.left?D.left=p.left-v:T>p.right&&(D.left=p.left+p.width-T)}return D},k.prototype.getTitle=function(){var N=this.$element,w=this.options;return N.attr(\"data-original-title\")||(typeof w.title==\"function\"?w.title.call(N[0]):w.title)},k.prototype.getUID=function(N){do N+=~~(1e6*Math.random());while(document.getElementById(N));return N},k.prototype.tip=function(){if(!this.$tip&&(this.$tip=b(this.options.template),this.$tip.length!=1))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},k.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},k.prototype.enable=function(){this.enabled=!0},k.prototype.disable=function(){this.enabled=!1},k.prototype.toggleEnabled=function(){this.enabled=!this.enabled},k.prototype.toggle=function(N){var w=this;N&&((w=b(N.currentTarget).data(\"bs.\"+this.type))||(w=new this.constructor(N.currentTarget,this.getDelegateOptions()),b(N.currentTarget).data(\"bs.\"+this.type,w))),N?(w.inState.click=!w.inState.click,w.isInStateTrue()?w.enter(w):w.leave(w)):w.tip().hasClass(\"in\")?w.leave(w):w.enter(w)},k.prototype.destroy=function(){var N=this;clearTimeout(this.timeout),this.hide((function(){N.$element.off(\".\"+N.type).removeData(\"bs.\"+N.type),N.$tip&&N.$tip.detach(),N.$tip=null,N.$arrow=null,N.$viewport=null,N.$element=null}))},k.prototype.sanitizeHtml=function(N){return S(N,this.options.whiteList,this.options.sanitizeFn)};var P=b.fn.tooltip;b.fn.tooltip=function(N){return this.each((function(){var w=b(this),ee=w.data(\"bs.tooltip\"),E=typeof N==\"object\"&&N;!ee&&/destroy|hide/.test(N)||(ee||w.data(\"bs.tooltip\",ee=new k(this,E)),typeof N==\"string\"&&ee[N]())}))},b.fn.tooltip.Constructor=k,b.fn.tooltip.noConflict=function(){return b.fn.tooltip=P,this}})(jQuery),(function(b){var L=function(q,f){this.init(\"popover\",q,f)};if(!b.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");L.VERSION=\"3.4.1\",L.DEFAULTS=b.extend({},b.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),L.prototype=b.extend({},b.fn.tooltip.Constructor.prototype),L.prototype.constructor=L,L.prototype.getDefaults=function(){return L.DEFAULTS},L.prototype.setContent=function(){var q=this.tip(),f=this.getTitle(),_=this.getContent();if(this.options.html){var j=typeof _;this.options.sanitize&&(f=this.sanitizeHtml(f),j===\"string\"&&(_=this.sanitizeHtml(_))),q.find(\".popover-title\").html(f),q.find(\".popover-content\").children().detach().end()[j===\"string\"?\"html\":\"append\"](_)}else q.find(\".popover-title\").text(f),q.find(\".popover-content\").children().detach().end().text(_);q.removeClass(\"fade top bottom left right in\"),q.find(\".popover-title\").html()||q.find(\".popover-title\").hide()},L.prototype.hasContent=function(){return this.getTitle()||this.getContent()},L.prototype.getContent=function(){var q=this.$element,f=this.options;return q.attr(\"data-content\")||(typeof f.content==\"function\"?f.content.call(q[0]):f.content)},L.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var Y=b.fn.popover;b.fn.popover=function(q){return this.each((function(){var f=b(this),_=f.data(\"bs.popover\"),j=typeof q==\"object\"&&q;!_&&/destroy|hide/.test(q)||(_||f.data(\"bs.popover\",_=new L(this,j)),typeof q==\"string\"&&_[q]())}))},b.fn.popover.Constructor=L,b.fn.popover.noConflict=function(){return b.fn.popover=Y,this}})(jQuery),(function(b){function L(f,_){this.$body=b(document.body),this.$scrollElement=b(f).is(document.body)?b(window):b(f),this.options=b.extend({},L.DEFAULTS,_),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",b.proxy(this.process,this)),this.refresh(),this.process()}function Y(f){return this.each((function(){var _=b(this),j=_.data(\"bs.scrollspy\"),S=typeof f==\"object\"&&f;j||_.data(\"bs.scrollspy\",j=new L(this,S)),typeof f==\"string\"&&j[f]()}))}L.VERSION=\"3.4.1\",L.DEFAULTS={offset:10},L.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},L.prototype.refresh=function(){var f=this,_=\"offset\",j=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),b.isWindow(this.$scrollElement[0])||(_=\"position\",j=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map((function(){var S=b(this),k=S.data(\"target\")||S.attr(\"href\"),P=/^#./.test(k)&&b(k);return P&&P.length&&P.is(\":visible\")&&[[P[_]().top+j,k]]||null})).sort((function(S,k){return S[0]-k[0]})).each((function(){f.offsets.push(this[0]),f.targets.push(this[1])}))},L.prototype.process=function(){var f,_=this.$scrollElement.scrollTop()+this.options.offset,j=this.getScrollHeight(),S=this.options.offset+j-this.$scrollElement.height(),k=this.offsets,P=this.targets,N=this.activeTarget;if(this.scrollHeight!=j&&this.refresh(),_>=S)return N!=(f=P[P.length-1])&&this.activate(f);if(N&&_<k[0])return this.activeTarget=null,this.clear();for(f=k.length;f--;)N!=P[f]&&_>=k[f]&&(k[f+1]===void 0||_<k[f+1])&&this.activate(P[f])},L.prototype.activate=function(f){this.activeTarget=f,this.clear();var _=this.selector+'[data-target=\"'+f+'\"],'+this.selector+'[href=\"'+f+'\"]',j=b(_).parents(\"li\").addClass(\"active\");j.parent(\".dropdown-menu\").length&&(j=j.closest(\"li.dropdown\").addClass(\"active\")),j.trigger(\"activate.bs.scrollspy\")},L.prototype.clear=function(){b(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var q=b.fn.scrollspy;b.fn.scrollspy=Y,b.fn.scrollspy.Constructor=L,b.fn.scrollspy.noConflict=function(){return b.fn.scrollspy=q,this},b(window).on(\"load.bs.scrollspy.data-api\",(function(){b('[data-spy=\"scroll\"]').each((function(){var f=b(this);Y.call(f,f.data())}))}))})(jQuery),(function(b){var L=function(_){this.element=b(_)};function Y(_){return this.each((function(){var j=b(this),S=j.data(\"bs.tab\");S||j.data(\"bs.tab\",S=new L(this)),typeof _==\"string\"&&S[_]()}))}L.VERSION=\"3.4.1\",L.TRANSITION_DURATION=150,L.prototype.show=function(){var _=this.element,j=_.closest(\"ul:not(.dropdown-menu)\"),S=_.data(\"target\");if(S||(S=(S=_.attr(\"href\"))&&S.replace(/.*(?=#[^\\s]*$)/,\"\")),!_.parent(\"li\").hasClass(\"active\")){var k=j.find(\".active:last a\"),P=b.Event(\"hide.bs.tab\",{relatedTarget:_[0]}),N=b.Event(\"show.bs.tab\",{relatedTarget:k[0]});if(k.trigger(P),_.trigger(N),!N.isDefaultPrevented()&&!P.isDefaultPrevented()){var w=b(document).find(S);this.activate(_.closest(\"li\"),j),this.activate(w,w.parent(),(function(){k.trigger({type:\"hidden.bs.tab\",relatedTarget:_[0]}),_.trigger({type:\"shown.bs.tab\",relatedTarget:k[0]})}))}}},L.prototype.activate=function(_,j,S){var k=j.find(\"> .active\"),P=S&&b.support.transition&&(k.length&&k.hasClass(\"fade\")||!!j.find(\"> .fade\").length);function N(){k.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),_.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),P?(_[0].offsetWidth,_.addClass(\"in\")):_.removeClass(\"fade\"),_.parent(\".dropdown-menu\").length&&_.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),S&&S()}k.length&&P?k.one(\"bsTransitionEnd\",N).emulateTransitionEnd(L.TRANSITION_DURATION):N(),k.removeClass(\"in\")};var q=b.fn.tab;b.fn.tab=Y,b.fn.tab.Constructor=L,b.fn.tab.noConflict=function(){return b.fn.tab=q,this};var f=function(_){_.preventDefault(),Y.call(b(this),\"show\")};b(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',f).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',f)})(jQuery),(function(b){var L=function(f,_){this.options=b.extend({},L.DEFAULTS,_);var j=this.options.target===L.DEFAULTS.target?b(this.options.target):b(document).find(this.options.target);this.$target=j.on(\"scroll.bs.affix.data-api\",b.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",b.proxy(this.checkPositionWithEventLoop,this)),this.$element=b(f),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function Y(f){return this.each((function(){var _=b(this),j=_.data(\"bs.affix\"),S=typeof f==\"object\"&&f;j||_.data(\"bs.affix\",j=new L(this,S)),typeof f==\"string\"&&j[f]()}))}L.VERSION=\"3.4.1\",L.RESET=\"affix affix-top affix-bottom\",L.DEFAULTS={offset:0,target:window},L.prototype.getState=function(f,_,j,S){var k=this.$target.scrollTop(),P=this.$element.offset(),N=this.$target.height();if(j!=null&&this.affixed==\"top\")return k<j&&\"top\";if(this.affixed==\"bottom\")return j!=null?!(k+this.unpin<=P.top)&&\"bottom\":!(k+N<=f-S)&&\"bottom\";var w=this.affixed==null,ee=w?k:P.top;return j!=null&&k<=j?\"top\":S!=null&&ee+(w?N:_)>=f-S&&\"bottom\"},L.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(L.RESET).addClass(\"affix\");var f=this.$target.scrollTop(),_=this.$element.offset();return this.pinnedOffset=_.top-f},L.prototype.checkPositionWithEventLoop=function(){setTimeout(b.proxy(this.checkPosition,this),1)},L.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var f=this.$element.height(),_=this.options.offset,j=_.top,S=_.bottom,k=Math.max(b(document).height(),b(document.body).height());typeof _!=\"object\"&&(S=j=_),typeof j==\"function\"&&(j=_.top(this.$element)),typeof S==\"function\"&&(S=_.bottom(this.$element));var P=this.getState(k,f,j,S);if(this.affixed!=P){this.unpin!=null&&this.$element.css(\"top\",\"\");var N=\"affix\"+(P?\"-\"+P:\"\"),w=b.Event(N+\".bs.affix\");if(this.$element.trigger(w),w.isDefaultPrevented())return;this.affixed=P,this.unpin=P==\"bottom\"?this.getPinnedOffset():null,this.$element.removeClass(L.RESET).addClass(N).trigger(N.replace(\"affix\",\"affixed\")+\".bs.affix\")}P==\"bottom\"&&this.$element.offset({top:k-f-S})}};var q=b.fn.affix;b.fn.affix=Y,b.fn.affix.Constructor=L,b.fn.affix.noConflict=function(){return b.fn.affix=q,this},b(window).on(\"load\",(function(){b('[data-spy=\"affix\"]').each((function(){var f=b(this),_=f.data();_.offset=_.offset||{},_.offsetBottom!=null&&(_.offset.bottom=_.offsetBottom),_.offsetTop!=null&&(_.offset.top=_.offsetTop),Y.call(f,_)}))}))})(jQuery)},755:function(b,L){var Y;(function(q,f){typeof b.exports==\"object\"?b.exports=q.document?f(q,!0):function(_){if(!_.document)throw new Error(\"jQuery requires a window with a document\");return f(_)}:f(q)})(typeof window<\"u\"?window:this,(function(q,f){var _=[],j=Object.getPrototypeOf,S=_.slice,k=_.flat?function(n){return _.flat.call(n)}:function(n){return _.concat.apply([],n)},P=_.push,N=_.indexOf,w={},ee=w.toString,E=w.hasOwnProperty,D=E.toString,y=D.call(Object),p={},c=function(n){return typeof n==\"function\"&&typeof n.nodeType!=\"number\"&&typeof n.item!=\"function\"},u=function(n){return n!=null&&n===n.window},v=q.document,T={type:!0,src:!0,nonce:!0,noModule:!0};function H(n,r,o){var s,h,m=(o=o||v).createElement(\"script\");if(m.text=n,r)for(s in T)(h=r[s]||r.getAttribute&&r.getAttribute(s))&&m.setAttribute(s,h);o.head.appendChild(m).parentNode.removeChild(m)}function B(n){return n==null?n+\"\":typeof n==\"object\"||typeof n==\"function\"?w[ee.call(n)]||\"object\":typeof n}var le=\"3.6.4\",a=function(n,r){return new a.fn.init(n,r)};function Ee(n){var r=!!n&&\"length\"in n&&n.length,o=B(n);return!c(n)&&!u(n)&&(o===\"array\"||r===0||typeof r==\"number\"&&r>0&&r-1 in n)}a.fn=a.prototype={jquery:le,constructor:a,length:0,toArray:function(){return S.call(this)},get:function(n){return n==null?S.call(this):n<0?this[n+this.length]:this[n]},pushStack:function(n){var r=a.merge(this.constructor(),n);return r.prevObject=this,r},each:function(n){return a.each(this,n)},map:function(n){return this.pushStack(a.map(this,(function(r,o){return n.call(r,o,r)})))},slice:function(){return this.pushStack(S.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(a.grep(this,(function(n,r){return(r+1)%2})))},odd:function(){return this.pushStack(a.grep(this,(function(n,r){return r%2})))},eq:function(n){var r=this.length,o=+n+(n<0?r:0);return this.pushStack(o>=0&&o<r?[this[o]]:[])},end:function(){return this.prevObject||this.constructor()},push:P,sort:_.sort,splice:_.splice},a.extend=a.fn.extend=function(){var n,r,o,s,h,m,x=arguments[0]||{},U=1,M=arguments.length,X=!1;for(typeof x==\"boolean\"&&(X=x,x=arguments[U]||{},U++),typeof x==\"object\"||c(x)||(x={}),U===M&&(x=this,U--);U<M;U++)if((n=arguments[U])!=null)for(r in n)s=n[r],r!==\"__proto__\"&&x!==s&&(X&&s&&(a.isPlainObject(s)||(h=Array.isArray(s)))?(o=x[r],m=h&&!Array.isArray(o)?[]:h||a.isPlainObject(o)?o:{},h=!1,x[r]=a.extend(X,m,s)):s!==void 0&&(x[r]=s));return x},a.extend({expando:\"jQuery\"+(le+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(n){throw new Error(n)},noop:function(){},isPlainObject:function(n){var r,o;return!(!n||ee.call(n)!==\"[object Object]\")&&(!(r=j(n))||typeof(o=E.call(r,\"constructor\")&&r.constructor)==\"function\"&&D.call(o)===y)},isEmptyObject:function(n){var r;for(r in n)return!1;return!0},globalEval:function(n,r,o){H(n,{nonce:r&&r.nonce},o)},each:function(n,r){var o,s=0;if(Ee(n))for(o=n.length;s<o&&r.call(n[s],s,n[s])!==!1;s++);else for(s in n)if(r.call(n[s],s,n[s])===!1)break;return n},makeArray:function(n,r){var o=r||[];return n!=null&&(Ee(Object(n))?a.merge(o,typeof n==\"string\"?[n]:n):P.call(o,n)),o},inArray:function(n,r,o){return r==null?-1:N.call(r,n,o)},merge:function(n,r){for(var o=+r.length,s=0,h=n.length;s<o;s++)n[h++]=r[s];return n.length=h,n},grep:function(n,r,o){for(var s=[],h=0,m=n.length,x=!o;h<m;h++)!r(n[h],h)!==x&&s.push(n[h]);return s},map:function(n,r,o){var s,h,m=0,x=[];if(Ee(n))for(s=n.length;m<s;m++)(h=r(n[m],m,o))!=null&&x.push(h);else for(m in n)(h=r(n[m],m,o))!=null&&x.push(h);return k(x)},guid:1,support:p}),typeof Symbol==\"function\"&&(a.fn[Symbol.iterator]=_[Symbol.iterator]),a.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),(function(n,r){w[\"[object \"+r+\"]\"]=r.toLowerCase()}));var Ge=(function(n){var r,o,s,h,m,x,U,M,X,te,ue,J,Z,$e,Qe,je,Lt,V,ae,ne=\"sizzle\"+1*new Date,se=n.document,He=0,De=0,lt=Bi(),jn=Bi(),Dt=Bi(),Sn=Bi(),Br=function(C,R){return C===R&&(ue=!0),0},ln={}.hasOwnProperty,cn=[],li=cn.pop,fn=cn.push,Pt=cn.push,vn=cn.slice,ct=function(C,R){for(var W=0,fe=C.length;W<fe;W++)if(C[W]===R)return W;return-1},dr=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",at=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",Tt=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+at+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",tn=\"\\\\[\"+at+\"*(\"+Tt+\")(?:\"+at+\"*([*^$|!~]?=)\"+at+`*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(`+Tt+\"))|)\"+at+\"*\\\\]\",Pn=\":(\"+Tt+`)(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|`+tn+\")*)|.*)\\\\)|)\",Xt=new RegExp(at+\"+\",\"g\"),mn=new RegExp(\"^\"+at+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+at+\"+$\",\"g\"),qn=new RegExp(\"^\"+at+\"*,\"+at+\"*\"),Wr=new RegExp(\"^\"+at+\"*([>+~]|\"+at+\")\"+at+\"*\"),To=new RegExp(at+\"|>\"),Mi=new RegExp(Pn),Co=new RegExp(\"^\"+Tt+\"$\"),wi={ID:new RegExp(\"^#(\"+Tt+\")\"),CLASS:new RegExp(\"^\\\\.(\"+Tt+\")\"),TAG:new RegExp(\"^(\"+Tt+\"|[*])\"),ATTR:new RegExp(\"^\"+tn),PSEUDO:new RegExp(\"^\"+Pn),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+at+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+at+\"*(?:([+-]|)\"+at+\"*(\\\\d+)|))\"+at+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+dr+\")$\",\"i\"),needsContext:new RegExp(\"^\"+at+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+at+\"*((?:-\\\\d)?\\\\d*)\"+at+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Ui=/HTML$/i,Ao=/^(?:input|select|textarea|button)$/i,_i=/^h\\d$/i,rr=/^[^{]+\\{\\s*\\[native \\w/,Fi=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ao=/[+~]/,Cr=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+at+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),Ar=function(C,R){var W=\"0x\"+C.slice(1)-65536;return R||(W<0?String.fromCharCode(W+65536):String.fromCharCode(W>>10|55296,1023&W|56320))},xi=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,Ti=function(C,R){return R?C===\"\\0\"?\"�\":C.slice(0,-1)+\"\\\\\"+C.charCodeAt(C.length-1).toString(16)+\" \":\"\\\\\"+C},zi=function(){J()},sa=Nr((function(C){return C.disabled===!0&&C.nodeName.toLowerCase()===\"fieldset\"}),{dir:\"parentNode\",next:\"legend\"});try{Pt.apply(cn=vn.call(se.childNodes),se.childNodes),cn[se.childNodes.length].nodeType}catch{Pt={apply:cn.length?function(R,W){fn.apply(R,vn.call(W))}:function(R,W){for(var fe=R.length,G=0;R[fe++]=W[G++];);R.length=fe-1}}}function jt(C,R,W,fe){var G,he,me,d,Ce,Ze,Ue,_e=R&&R.ownerDocument,ft=R?R.nodeType:9;if(W=W||[],typeof C!=\"string\"||!C||ft!==1&&ft!==9&&ft!==11)return W;if(!fe&&(J(R),R=R||Z,Qe)){if(ft!==11&&(Ce=Fi.exec(C)))if(G=Ce[1]){if(ft===9){if(!(me=R.getElementById(G)))return W;if(me.id===G)return W.push(me),W}else if(_e&&(me=_e.getElementById(G))&&ae(R,me)&&me.id===G)return W.push(me),W}else{if(Ce[2])return Pt.apply(W,R.getElementsByTagName(C)),W;if((G=Ce[3])&&o.getElementsByClassName&&R.getElementsByClassName)return Pt.apply(W,R.getElementsByClassName(G)),W}if(o.qsa&&!Sn[C+\" \"]&&(!je||!je.test(C))&&(ft!==1||R.nodeName.toLowerCase()!==\"object\")){if(Ue=C,_e=R,ft===1&&(To.test(C)||Wr.test(C))){for((_e=ao.test(C)&&Gr(R.parentNode)||R)===R&&o.scope||((d=R.getAttribute(\"id\"))?d=d.replace(xi,Ti):R.setAttribute(\"id\",d=ne)),he=(Ze=x(C)).length;he--;)Ze[he]=(d?\"#\"+d:\":scope\")+\" \"+$r(Ze[he]);Ue=Ze.join(\",\")}try{return Pt.apply(W,_e.querySelectorAll(Ue)),W}catch{Sn(C,!0)}finally{d===ne&&R.removeAttribute(\"id\")}}}return M(C.replace(mn,\"$1\"),R,W,fe)}function Bi(){var C=[];return function R(W,fe){return C.push(W+\" \")>s.cacheLength&&delete R[C.shift()],R[W+\" \"]=fe}}function ir(C){return C[ne]=!0,C}function $t(C){var R=Z.createElement(\"fieldset\");try{return!!C(R)}catch{return!1}finally{R.parentNode&&R.parentNode.removeChild(R),R=null}}function sn(C,R){for(var W=C.split(\"|\"),fe=W.length;fe--;)s.attrHandle[W[fe]]=R}function So(C,R){var W=R&&C,fe=W&&C.nodeType===1&&R.nodeType===1&&C.sourceIndex-R.sourceIndex;if(fe)return fe;if(W){for(;W=W.nextSibling;)if(W===R)return-1}return C?1:-1}function ua(C){return function(R){return R.nodeName.toLowerCase()===\"input\"&&R.type===C}}function $o(C){return function(R){var W=R.nodeName.toLowerCase();return(W===\"input\"||W===\"button\")&&R.type===C}}function Eo(C){return function(R){return\"form\"in R?R.parentNode&&R.disabled===!1?\"label\"in R?\"label\"in R.parentNode?R.parentNode.disabled===C:R.disabled===C:R.isDisabled===C||R.isDisabled!==!C&&sa(R)===C:R.disabled===C:\"label\"in R&&R.disabled===C}}function Sr(C){return ir((function(R){return R=+R,ir((function(W,fe){for(var G,he=C([],W.length,R),me=he.length;me--;)W[G=he[me]]&&(W[G]=!(fe[G]=W[G]))}))}))}function Gr(C){return C&&C.getElementsByTagName!==void 0&&C}for(r in o=jt.support={},m=jt.isXML=function(C){var R=C&&C.namespaceURI,W=C&&(C.ownerDocument||C).documentElement;return!Ui.test(R||W&&W.nodeName||\"HTML\")},J=jt.setDocument=function(C){var R,W,fe=C?C.ownerDocument||C:se;return fe!=Z&&fe.nodeType===9&&fe.documentElement&&($e=(Z=fe).documentElement,Qe=!m(Z),se!=Z&&(W=Z.defaultView)&&W.top!==W&&(W.addEventListener?W.addEventListener(\"unload\",zi,!1):W.attachEvent&&W.attachEvent(\"onunload\",zi)),o.scope=$t((function(G){return $e.appendChild(G).appendChild(Z.createElement(\"div\")),G.querySelectorAll!==void 0&&!G.querySelectorAll(\":scope fieldset div\").length})),o.cssHas=$t((function(){try{return Z.querySelector(\":has(*,:jqfake)\"),!1}catch{return!0}})),o.attributes=$t((function(G){return G.className=\"i\",!G.getAttribute(\"className\")})),o.getElementsByTagName=$t((function(G){return G.appendChild(Z.createComment(\"\")),!G.getElementsByTagName(\"*\").length})),o.getElementsByClassName=rr.test(Z.getElementsByClassName),o.getById=$t((function(G){return $e.appendChild(G).id=ne,!Z.getElementsByName||!Z.getElementsByName(ne).length})),o.getById?(s.filter.ID=function(G){var he=G.replace(Cr,Ar);return function(me){return me.getAttribute(\"id\")===he}},s.find.ID=function(G,he){if(he.getElementById!==void 0&&Qe){var me=he.getElementById(G);return me?[me]:[]}}):(s.filter.ID=function(G){var he=G.replace(Cr,Ar);return function(me){var d=me.getAttributeNode!==void 0&&me.getAttributeNode(\"id\");return d&&d.value===he}},s.find.ID=function(G,he){if(he.getElementById!==void 0&&Qe){var me,d,Ce,Ze=he.getElementById(G);if(Ze){if((me=Ze.getAttributeNode(\"id\"))&&me.value===G)return[Ze];for(Ce=he.getElementsByName(G),d=0;Ze=Ce[d++];)if((me=Ze.getAttributeNode(\"id\"))&&me.value===G)return[Ze]}return[]}}),s.find.TAG=o.getElementsByTagName?function(G,he){return he.getElementsByTagName!==void 0?he.getElementsByTagName(G):o.qsa?he.querySelectorAll(G):void 0}:function(G,he){var me,d=[],Ce=0,Ze=he.getElementsByTagName(G);if(G===\"*\"){for(;me=Ze[Ce++];)me.nodeType===1&&d.push(me);return d}return Ze},s.find.CLASS=o.getElementsByClassName&&function(G,he){if(he.getElementsByClassName!==void 0&&Qe)return he.getElementsByClassName(G)},Lt=[],je=[],(o.qsa=rr.test(Z.querySelectorAll))&&($t((function(G){var he;$e.appendChild(G).innerHTML=\"<a id='\"+ne+\"'></a><select id='\"+ne+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",G.querySelectorAll(\"[msallowcapture^='']\").length&&je.push(\"[*^$]=\"+at+`*(?:''|\"\")`),G.querySelectorAll(\"[selected]\").length||je.push(\"\\\\[\"+at+\"*(?:value|\"+dr+\")\"),G.querySelectorAll(\"[id~=\"+ne+\"-]\").length||je.push(\"~=\"),(he=Z.createElement(\"input\")).setAttribute(\"name\",\"\"),G.appendChild(he),G.querySelectorAll(\"[name='']\").length||je.push(\"\\\\[\"+at+\"*name\"+at+\"*=\"+at+`*(?:''|\"\")`),G.querySelectorAll(\":checked\").length||je.push(\":checked\"),G.querySelectorAll(\"a#\"+ne+\"+*\").length||je.push(\".#.+[+~]\"),G.querySelectorAll(\"\\\\\\f\"),je.push(\"[\\\\r\\\\n\\\\f]\")})),$t((function(G){G.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var he=Z.createElement(\"input\");he.setAttribute(\"type\",\"hidden\"),G.appendChild(he).setAttribute(\"name\",\"D\"),G.querySelectorAll(\"[name=d]\").length&&je.push(\"name\"+at+\"*[*^$|!~]?=\"),G.querySelectorAll(\":enabled\").length!==2&&je.push(\":enabled\",\":disabled\"),$e.appendChild(G).disabled=!0,G.querySelectorAll(\":disabled\").length!==2&&je.push(\":enabled\",\":disabled\"),G.querySelectorAll(\"*,:x\"),je.push(\",.*:\")}))),(o.matchesSelector=rr.test(V=$e.matches||$e.webkitMatchesSelector||$e.mozMatchesSelector||$e.oMatchesSelector||$e.msMatchesSelector))&&$t((function(G){o.disconnectedMatch=V.call(G,\"*\"),V.call(G,\"[s!='']:x\"),Lt.push(\"!=\",Pn)})),o.cssHas||je.push(\":has\"),je=je.length&&new RegExp(je.join(\"|\")),Lt=Lt.length&&new RegExp(Lt.join(\"|\")),R=rr.test($e.compareDocumentPosition),ae=R||rr.test($e.contains)?function(G,he){var me=G.nodeType===9&&G.documentElement||G,d=he&&he.parentNode;return G===d||!(!d||d.nodeType!==1||!(me.contains?me.contains(d):G.compareDocumentPosition&&16&G.compareDocumentPosition(d)))}:function(G,he){if(he){for(;he=he.parentNode;)if(he===G)return!0}return!1},Br=R?function(G,he){if(G===he)return ue=!0,0;var me=!G.compareDocumentPosition-!he.compareDocumentPosition;return me||(1&(me=(G.ownerDocument||G)==(he.ownerDocument||he)?G.compareDocumentPosition(he):1)||!o.sortDetached&&he.compareDocumentPosition(G)===me?G==Z||G.ownerDocument==se&&ae(se,G)?-1:he==Z||he.ownerDocument==se&&ae(se,he)?1:te?ct(te,G)-ct(te,he):0:4&me?-1:1)}:function(G,he){if(G===he)return ue=!0,0;var me,d=0,Ce=G.parentNode,Ze=he.parentNode,Ue=[G],_e=[he];if(!Ce||!Ze)return G==Z?-1:he==Z?1:Ce?-1:Ze?1:te?ct(te,G)-ct(te,he):0;if(Ce===Ze)return So(G,he);for(me=G;me=me.parentNode;)Ue.unshift(me);for(me=he;me=me.parentNode;)_e.unshift(me);for(;Ue[d]===_e[d];)d++;return d?So(Ue[d],_e[d]):Ue[d]==se?-1:_e[d]==se?1:0}),Z},jt.matches=function(C,R){return jt(C,null,null,R)},jt.matchesSelector=function(C,R){if(J(C),o.matchesSelector&&Qe&&!Sn[R+\" \"]&&(!Lt||!Lt.test(R))&&(!je||!je.test(R)))try{var W=V.call(C,R);if(W||o.disconnectedMatch||C.document&&C.document.nodeType!==11)return W}catch{Sn(R,!0)}return jt(R,Z,null,[C]).length>0},jt.contains=function(C,R){return(C.ownerDocument||C)!=Z&&J(C),ae(C,R)},jt.attr=function(C,R){(C.ownerDocument||C)!=Z&&J(C);var W=s.attrHandle[R.toLowerCase()],fe=W&&ln.call(s.attrHandle,R.toLowerCase())?W(C,R,!Qe):void 0;return fe!==void 0?fe:o.attributes||!Qe?C.getAttribute(R):(fe=C.getAttributeNode(R))&&fe.specified?fe.value:null},jt.escape=function(C){return(C+\"\").replace(xi,Ti)},jt.error=function(C){throw new Error(\"Syntax error, unrecognized expression: \"+C)},jt.uniqueSort=function(C){var R,W=[],fe=0,G=0;if(ue=!o.detectDuplicates,te=!o.sortStable&&C.slice(0),C.sort(Br),ue){for(;R=C[G++];)R===C[G]&&(fe=W.push(G));for(;fe--;)C.splice(W[fe],1)}return te=null,C},h=jt.getText=function(C){var R,W=\"\",fe=0,G=C.nodeType;if(G){if(G===1||G===9||G===11){if(typeof C.textContent==\"string\")return C.textContent;for(C=C.firstChild;C;C=C.nextSibling)W+=h(C)}else if(G===3||G===4)return C.nodeValue}else for(;R=C[fe++];)W+=h(R);return W},s=jt.selectors={cacheLength:50,createPseudo:ir,match:wi,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(C){return C[1]=C[1].replace(Cr,Ar),C[3]=(C[3]||C[4]||C[5]||\"\").replace(Cr,Ar),C[2]===\"~=\"&&(C[3]=\" \"+C[3]+\" \"),C.slice(0,4)},CHILD:function(C){return C[1]=C[1].toLowerCase(),C[1].slice(0,3)===\"nth\"?(C[3]||jt.error(C[0]),C[4]=+(C[4]?C[5]+(C[6]||1):2*(C[3]===\"even\"||C[3]===\"odd\")),C[5]=+(C[7]+C[8]||C[3]===\"odd\")):C[3]&&jt.error(C[0]),C},PSEUDO:function(C){var R,W=!C[6]&&C[2];return wi.CHILD.test(C[0])?null:(C[3]?C[2]=C[4]||C[5]||\"\":W&&Mi.test(W)&&(R=x(W,!0))&&(R=W.indexOf(\")\",W.length-R)-W.length)&&(C[0]=C[0].slice(0,R),C[2]=W.slice(0,R)),C.slice(0,3))}},filter:{TAG:function(C){var R=C.replace(Cr,Ar).toLowerCase();return C===\"*\"?function(){return!0}:function(W){return W.nodeName&&W.nodeName.toLowerCase()===R}},CLASS:function(C){var R=lt[C+\" \"];return R||(R=new RegExp(\"(^|\"+at+\")\"+C+\"(\"+at+\"|$)\"))&&lt(C,(function(W){return R.test(typeof W.className==\"string\"&&W.className||W.getAttribute!==void 0&&W.getAttribute(\"class\")||\"\")}))},ATTR:function(C,R,W){return function(fe){var G=jt.attr(fe,C);return G==null?R===\"!=\":!R||(G+=\"\",R===\"=\"?G===W:R===\"!=\"?G!==W:R===\"^=\"?W&&G.indexOf(W)===0:R===\"*=\"?W&&G.indexOf(W)>-1:R===\"$=\"?W&&G.slice(-W.length)===W:R===\"~=\"?(\" \"+G.replace(Xt,\" \")+\" \").indexOf(W)>-1:R===\"|=\"&&(G===W||G.slice(0,W.length+1)===W+\"-\"))}},CHILD:function(C,R,W,fe,G){var he=C.slice(0,3)!==\"nth\",me=C.slice(-4)!==\"last\",d=R===\"of-type\";return fe===1&&G===0?function(Ce){return!!Ce.parentNode}:function(Ce,Ze,Ue){var _e,ft,kt,Xe,Ht,Ot,yn=he!==me?\"nextSibling\":\"previousSibling\",Nt=Ce.parentNode,gr=d&&Ce.nodeName.toLowerCase(),bn=!Ue&&!d,Bt=!1;if(Nt){if(he){for(;yn;){for(Xe=Ce;Xe=Xe[yn];)if(d?Xe.nodeName.toLowerCase()===gr:Xe.nodeType===1)return!1;Ot=yn=C===\"only\"&&!Ot&&\"nextSibling\"}return!0}if(Ot=[me?Nt.firstChild:Nt.lastChild],me&&bn){for(Bt=(Ht=(_e=(ft=(kt=(Xe=Nt)[ne]||(Xe[ne]={}))[Xe.uniqueID]||(kt[Xe.uniqueID]={}))[C]||[])[0]===He&&_e[1])&&_e[2],Xe=Ht&&Nt.childNodes[Ht];Xe=++Ht&&Xe&&Xe[yn]||(Bt=Ht=0)||Ot.pop();)if(Xe.nodeType===1&&++Bt&&Xe===Ce){ft[C]=[He,Ht,Bt];break}}else if(bn&&(Bt=Ht=(_e=(ft=(kt=(Xe=Ce)[ne]||(Xe[ne]={}))[Xe.uniqueID]||(kt[Xe.uniqueID]={}))[C]||[])[0]===He&&_e[1]),Bt===!1)for(;(Xe=++Ht&&Xe&&Xe[yn]||(Bt=Ht=0)||Ot.pop())&&((d?Xe.nodeName.toLowerCase()!==gr:Xe.nodeType!==1)||!++Bt||(bn&&((ft=(kt=Xe[ne]||(Xe[ne]={}))[Xe.uniqueID]||(kt[Xe.uniqueID]={}))[C]=[He,Bt]),Xe!==Ce)););return(Bt-=G)===fe||Bt%fe==0&&Bt/fe>=0}}},PSEUDO:function(C,R){var W,fe=s.pseudos[C]||s.setFilters[C.toLowerCase()]||jt.error(\"unsupported pseudo: \"+C);return fe[ne]?fe(R):fe.length>1?(W=[C,C,\"\",R],s.setFilters.hasOwnProperty(C.toLowerCase())?ir((function(G,he){for(var me,d=fe(G,R),Ce=d.length;Ce--;)G[me=ct(G,d[Ce])]=!(he[me]=d[Ce])})):function(G){return fe(G,0,W)}):fe}},pseudos:{not:ir((function(C){var R=[],W=[],fe=U(C.replace(mn,\"$1\"));return fe[ne]?ir((function(G,he,me,d){for(var Ce,Ze=fe(G,null,d,[]),Ue=G.length;Ue--;)(Ce=Ze[Ue])&&(G[Ue]=!(he[Ue]=Ce))})):function(G,he,me){return R[0]=G,fe(R,null,me,W),R[0]=null,!W.pop()}})),has:ir((function(C){return function(R){return jt(C,R).length>0}})),contains:ir((function(C){return C=C.replace(Cr,Ar),function(R){return(R.textContent||h(R)).indexOf(C)>-1}})),lang:ir((function(C){return Co.test(C||\"\")||jt.error(\"unsupported lang: \"+C),C=C.replace(Cr,Ar).toLowerCase(),function(R){var W;do if(W=Qe?R.lang:R.getAttribute(\"xml:lang\")||R.getAttribute(\"lang\"))return(W=W.toLowerCase())===C||W.indexOf(C+\"-\")===0;while((R=R.parentNode)&&R.nodeType===1);return!1}})),target:function(C){var R=n.location&&n.location.hash;return R&&R.slice(1)===C.id},root:function(C){return C===$e},focus:function(C){return C===Z.activeElement&&(!Z.hasFocus||Z.hasFocus())&&!!(C.type||C.href||~C.tabIndex)},enabled:Eo(!1),disabled:Eo(!0),checked:function(C){var R=C.nodeName.toLowerCase();return R===\"input\"&&!!C.checked||R===\"option\"&&!!C.selected},selected:function(C){return C.parentNode&&C.parentNode.selectedIndex,C.selected===!0},empty:function(C){for(C=C.firstChild;C;C=C.nextSibling)if(C.nodeType<6)return!1;return!0},parent:function(C){return!s.pseudos.empty(C)},header:function(C){return _i.test(C.nodeName)},input:function(C){return Ao.test(C.nodeName)},button:function(C){var R=C.nodeName.toLowerCase();return R===\"input\"&&C.type===\"button\"||R===\"button\"},text:function(C){var R;return C.nodeName.toLowerCase()===\"input\"&&C.type===\"text\"&&((R=C.getAttribute(\"type\"))==null||R.toLowerCase()===\"text\")},first:Sr((function(){return[0]})),last:Sr((function(C,R){return[R-1]})),eq:Sr((function(C,R,W){return[W<0?W+R:W]})),even:Sr((function(C,R){for(var W=0;W<R;W+=2)C.push(W);return C})),odd:Sr((function(C,R){for(var W=1;W<R;W+=2)C.push(W);return C})),lt:Sr((function(C,R,W){for(var fe=W<0?W+R:W>R?R:W;--fe>=0;)C.push(fe);return C})),gt:Sr((function(C,R,W){for(var fe=W<0?W+R:W;++fe<R;)C.push(fe);return C}))}},s.pseudos.nth=s.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})s.pseudos[r]=ua(r);for(r in{submit:!0,reset:!0})s.pseudos[r]=$o(r);function Wi(){}function $r(C){for(var R=0,W=C.length,fe=\"\";R<W;R++)fe+=C[R].value;return fe}function Nr(C,R,W){var fe=R.dir,G=R.next,he=G||fe,me=W&&he===\"parentNode\",d=De++;return R.first?function(Ce,Ze,Ue){for(;Ce=Ce[fe];)if(Ce.nodeType===1||me)return C(Ce,Ze,Ue);return!1}:function(Ce,Ze,Ue){var _e,ft,kt,Xe=[He,d];if(Ue){for(;Ce=Ce[fe];)if((Ce.nodeType===1||me)&&C(Ce,Ze,Ue))return!0}else for(;Ce=Ce[fe];)if(Ce.nodeType===1||me)if(ft=(kt=Ce[ne]||(Ce[ne]={}))[Ce.uniqueID]||(kt[Ce.uniqueID]={}),G&&G===Ce.nodeName.toLowerCase())Ce=Ce[fe]||Ce;else{if((_e=ft[he])&&_e[0]===He&&_e[1]===d)return Xe[2]=_e[2];if(ft[he]=Xe,Xe[2]=C(Ce,Ze,Ue))return!0}return!1}}function Vr(C){return C.length>1?function(R,W,fe){for(var G=C.length;G--;)if(!C[G](R,W,fe))return!1;return!0}:C[0]}function Kr(C,R,W,fe,G){for(var he,me=[],d=0,Ce=C.length,Ze=R!=null;d<Ce;d++)(he=C[d])&&(W&&!W(he,fe,G)||(me.push(he),Ze&&R.push(d)));return me}function Rr(C,R,W,fe,G,he){return fe&&!fe[ne]&&(fe=Rr(fe)),G&&!G[ne]&&(G=Rr(G,he)),ir((function(me,d,Ce,Ze){var Ue,_e,ft,kt=[],Xe=[],Ht=d.length,Ot=me||(function(gr,bn,Bt){for(var $n=0,Xr=bn.length;$n<Xr;$n++)jt(gr,bn[$n],Bt);return Bt})(R||\"*\",Ce.nodeType?[Ce]:Ce,[]),yn=!C||!me&&R?Ot:Kr(Ot,kt,C,Ce,Ze),Nt=W?G||(me?C:Ht||fe)?[]:d:yn;if(W&&W(yn,Nt,Ce,Ze),fe)for(Ue=Kr(Nt,Xe),fe(Ue,[],Ce,Ze),_e=Ue.length;_e--;)(ft=Ue[_e])&&(Nt[Xe[_e]]=!(yn[Xe[_e]]=ft));if(me){if(G||C){if(G){for(Ue=[],_e=Nt.length;_e--;)(ft=Nt[_e])&&Ue.push(yn[_e]=ft);G(null,Nt=[],Ue,Ze)}for(_e=Nt.length;_e--;)(ft=Nt[_e])&&(Ue=G?ct(me,ft):kt[_e])>-1&&(me[Ue]=!(d[Ue]=ft))}}else Nt=Kr(Nt===d?Nt.splice(Ht,Nt.length):Nt),G?G(null,d,Nt,Ze):Pt.apply(d,Nt)}))}function so(C){for(var R,W,fe,G=C.length,he=s.relative[C[0].type],me=he||s.relative[\" \"],d=he?1:0,Ce=Nr((function(_e){return _e===R}),me,!0),Ze=Nr((function(_e){return ct(R,_e)>-1}),me,!0),Ue=[function(_e,ft,kt){var Xe=!he&&(kt||ft!==X)||((R=ft).nodeType?Ce(_e,ft,kt):Ze(_e,ft,kt));return R=null,Xe}];d<G;d++)if(W=s.relative[C[d].type])Ue=[Nr(Vr(Ue),W)];else{if((W=s.filter[C[d].type].apply(null,C[d].matches))[ne]){for(fe=++d;fe<G&&!s.relative[C[fe].type];fe++);return Rr(d>1&&Vr(Ue),d>1&&$r(C.slice(0,d-1).concat({value:C[d-2].type===\" \"?\"*\":\"\"})).replace(mn,\"$1\"),W,d<fe&&so(C.slice(d,fe)),fe<G&&so(C=C.slice(fe)),fe<G&&$r(C))}Ue.push(W)}return Vr(Ue)}return Wi.prototype=s.filters=s.pseudos,s.setFilters=new Wi,x=jt.tokenize=function(C,R){var W,fe,G,he,me,d,Ce,Ze=jn[C+\" \"];if(Ze)return R?0:Ze.slice(0);for(me=C,d=[],Ce=s.preFilter;me;){for(he in W&&!(fe=qn.exec(me))||(fe&&(me=me.slice(fe[0].length)||me),d.push(G=[])),W=!1,(fe=Wr.exec(me))&&(W=fe.shift(),G.push({value:W,type:fe[0].replace(mn,\" \")}),me=me.slice(W.length)),s.filter)!(fe=wi[he].exec(me))||Ce[he]&&!(fe=Ce[he](fe))||(W=fe.shift(),G.push({value:W,type:he,matches:fe}),me=me.slice(W.length));if(!W)break}return R?me.length:me?jt.error(C):jn(C,d).slice(0)},U=jt.compile=function(C,R){var W,fe=[],G=[],he=Dt[C+\" \"];if(!he){for(R||(R=x(C)),W=R.length;W--;)(he=so(R[W]))[ne]?fe.push(he):G.push(he);he=Dt(C,(function(me,d){var Ce=d.length>0,Ze=me.length>0,Ue=function(_e,ft,kt,Xe,Ht){var Ot,yn,Nt,gr=0,bn=\"0\",Bt=_e&&[],$n=[],Xr=X,ko=_e||Ze&&s.find.TAG(\"*\",Ht),uo=He+=Xr==null?1:Math.random()||.1,Er=ko.length;for(Ht&&(X=ft==Z||ft||Ht);bn!==Er&&(Ot=ko[bn])!=null;bn++){if(Ze&&Ot){for(yn=0,ft||Ot.ownerDocument==Z||(J(Ot),kt=!Qe);Nt=me[yn++];)if(Nt(Ot,ft||Z,kt)){Xe.push(Ot);break}Ht&&(He=uo)}Ce&&((Ot=!Nt&&Ot)&&gr--,_e&&Bt.push(Ot))}if(gr+=bn,Ce&&bn!==gr){for(yn=0;Nt=d[yn++];)Nt(Bt,$n,ft,kt);if(_e){if(gr>0)for(;bn--;)Bt[bn]||$n[bn]||($n[bn]=li.call(Xe));$n=Kr($n)}Pt.apply(Xe,$n),Ht&&!_e&&$n.length>0&&gr+d.length>1&&jt.uniqueSort(Xe)}return Ht&&(He=uo,X=Xr),Bt};return Ce?ir(Ue):Ue})(G,fe)),he.selector=C}return he},M=jt.select=function(C,R,W,fe){var G,he,me,d,Ce,Ze=typeof C==\"function\"&&C,Ue=!fe&&x(C=Ze.selector||C);if(W=W||[],Ue.length===1){if((he=Ue[0]=Ue[0].slice(0)).length>2&&(me=he[0]).type===\"ID\"&&R.nodeType===9&&Qe&&s.relative[he[1].type]){if(!(R=(s.find.ID(me.matches[0].replace(Cr,Ar),R)||[])[0]))return W;Ze&&(R=R.parentNode),C=C.slice(he.shift().value.length)}for(G=wi.needsContext.test(C)?0:he.length;G--&&(me=he[G],!s.relative[d=me.type]);)if((Ce=s.find[d])&&(fe=Ce(me.matches[0].replace(Cr,Ar),ao.test(he[0].type)&&Gr(R.parentNode)||R))){if(he.splice(G,1),!(C=fe.length&&$r(he)))return Pt.apply(W,fe),W;break}}return(Ze||U(C,Ue))(fe,R,!Qe,W,!R||ao.test(C)&&Gr(R.parentNode)||R),W},o.sortStable=ne.split(\"\").sort(Br).join(\"\")===ne,o.detectDuplicates=!!ue,J(),o.sortDetached=$t((function(C){return 1&C.compareDocumentPosition(Z.createElement(\"fieldset\"))})),$t((function(C){return C.innerHTML=\"<a href='#'></a>\",C.firstChild.getAttribute(\"href\")===\"#\"}))||sn(\"type|href|height|width\",(function(C,R,W){if(!W)return C.getAttribute(R,R.toLowerCase()===\"type\"?1:2)})),o.attributes&&$t((function(C){return C.innerHTML=\"<input/>\",C.firstChild.setAttribute(\"value\",\"\"),C.firstChild.getAttribute(\"value\")===\"\"}))||sn(\"value\",(function(C,R,W){if(!W&&C.nodeName.toLowerCase()===\"input\")return C.defaultValue})),$t((function(C){return C.getAttribute(\"disabled\")==null}))||sn(dr,(function(C,R,W){var fe;if(!W)return C[R]===!0?R.toLowerCase():(fe=C.getAttributeNode(R))&&fe.specified?fe.value:null})),jt})(q);a.find=Ge,a.expr=Ge.selectors,a.expr[\":\"]=a.expr.pseudos,a.uniqueSort=a.unique=Ge.uniqueSort,a.text=Ge.getText,a.isXMLDoc=Ge.isXML,a.contains=Ge.contains,a.escapeSelector=Ge.escape;var ve=function(n,r,o){for(var s=[],h=o!==void 0;(n=n[r])&&n.nodeType!==9;)if(n.nodeType===1){if(h&&a(n).is(o))break;s.push(n)}return s},Re=function(n,r){for(var o=[];n;n=n.nextSibling)n.nodeType===1&&n!==r&&o.push(n);return o},ce=a.expr.match.needsContext;function Ae(n,r){return n.nodeName&&n.nodeName.toLowerCase()===r.toLowerCase()}var be=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function rt(n,r,o){return c(r)?a.grep(n,(function(s,h){return!!r.call(s,h,s)!==o})):r.nodeType?a.grep(n,(function(s){return s===r!==o})):typeof r!=\"string\"?a.grep(n,(function(s){return N.call(r,s)>-1!==o})):a.filter(r,n,o)}a.filter=function(n,r,o){var s=r[0];return o&&(n=\":not(\"+n+\")\"),r.length===1&&s.nodeType===1?a.find.matchesSelector(s,n)?[s]:[]:a.find.matches(n,a.grep(r,(function(h){return h.nodeType===1})))},a.fn.extend({find:function(n){var r,o,s=this.length,h=this;if(typeof n!=\"string\")return this.pushStack(a(n).filter((function(){for(r=0;r<s;r++)if(a.contains(h[r],this))return!0})));for(o=this.pushStack([]),r=0;r<s;r++)a.find(n,h[r],o);return s>1?a.uniqueSort(o):o},filter:function(n){return this.pushStack(rt(this,n||[],!1))},not:function(n){return this.pushStack(rt(this,n||[],!0))},is:function(n){return!!rt(this,typeof n==\"string\"&&ce.test(n)?a(n):n||[],!1).length}});var dt,ie=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(a.fn.init=function(n,r,o){var s,h;if(!n)return this;if(o=o||dt,typeof n==\"string\"){if(!(s=n[0]===\"<\"&&n[n.length-1]===\">\"&&n.length>=3?[null,n,null]:ie.exec(n))||!s[1]&&r)return!r||r.jquery?(r||o).find(n):this.constructor(r).find(n);if(s[1]){if(r=r instanceof a?r[0]:r,a.merge(this,a.parseHTML(s[1],r&&r.nodeType?r.ownerDocument||r:v,!0)),be.test(s[1])&&a.isPlainObject(r))for(s in r)c(this[s])?this[s](r[s]):this.attr(s,r[s]);return this}return(h=v.getElementById(s[2]))&&(this[0]=h,this.length=1),this}return n.nodeType?(this[0]=n,this.length=1,this):c(n)?o.ready!==void 0?o.ready(n):n(a):a.makeArray(n,this)}).prototype=a.fn,dt=a(v);var oe=/^(?:parents|prev(?:Until|All))/,Pe={children:!0,contents:!0,next:!0,prev:!0};function it(n,r){for(;(n=n[r])&&n.nodeType!==1;);return n}a.fn.extend({has:function(n){var r=a(n,this),o=r.length;return this.filter((function(){for(var s=0;s<o;s++)if(a.contains(this,r[s]))return!0}))},closest:function(n,r){var o,s=0,h=this.length,m=[],x=typeof n!=\"string\"&&a(n);if(!ce.test(n)){for(;s<h;s++)for(o=this[s];o&&o!==r;o=o.parentNode)if(o.nodeType<11&&(x?x.index(o)>-1:o.nodeType===1&&a.find.matchesSelector(o,n))){m.push(o);break}}return this.pushStack(m.length>1?a.uniqueSort(m):m)},index:function(n){return n?typeof n==\"string\"?N.call(a(n),this[0]):N.call(this,n.jquery?n[0]:n):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(n,r){return this.pushStack(a.uniqueSort(a.merge(this.get(),a(n,r))))},addBack:function(n){return this.add(n==null?this.prevObject:this.prevObject.filter(n))}}),a.each({parent:function(n){var r=n.parentNode;return r&&r.nodeType!==11?r:null},parents:function(n){return ve(n,\"parentNode\")},parentsUntil:function(n,r,o){return ve(n,\"parentNode\",o)},next:function(n){return it(n,\"nextSibling\")},prev:function(n){return it(n,\"previousSibling\")},nextAll:function(n){return ve(n,\"nextSibling\")},prevAll:function(n){return ve(n,\"previousSibling\")},nextUntil:function(n,r,o){return ve(n,\"nextSibling\",o)},prevUntil:function(n,r,o){return ve(n,\"previousSibling\",o)},siblings:function(n){return Re((n.parentNode||{}).firstChild,n)},children:function(n){return Re(n.firstChild)},contents:function(n){return n.contentDocument!=null&&j(n.contentDocument)?n.contentDocument:(Ae(n,\"template\")&&(n=n.content||n),a.merge([],n.childNodes))}},(function(n,r){a.fn[n]=function(o,s){var h=a.map(this,r,o);return n.slice(-5)!==\"Until\"&&(s=o),s&&typeof s==\"string\"&&(h=a.filter(s,h)),this.length>1&&(Pe[n]||a.uniqueSort(h),oe.test(n)&&h.reverse()),this.pushStack(h)}}));var Le=/[^\\x20\\t\\r\\n\\f]+/g;function Ve(n){return n}function At(n){throw n}function Mt(n,r,o,s){var h;try{n&&c(h=n.promise)?h.call(n).done(r).fail(o):n&&c(h=n.then)?h.call(n,r,o):r.apply(void 0,[n].slice(s))}catch(m){o.apply(void 0,[m])}}a.Callbacks=function(n){n=typeof n==\"string\"?(function(te){var ue={};return a.each(te.match(Le)||[],(function(J,Z){ue[Z]=!0})),ue})(n):a.extend({},n);var r,o,s,h,m=[],x=[],U=-1,M=function(){for(h=h||n.once,s=r=!0;x.length;U=-1)for(o=x.shift();++U<m.length;)m[U].apply(o[0],o[1])===!1&&n.stopOnFalse&&(U=m.length,o=!1);n.memory||(o=!1),r=!1,h&&(m=o?[]:\"\")},X={add:function(){return m&&(o&&!r&&(U=m.length-1,x.push(o)),(function te(ue){a.each(ue,(function(J,Z){c(Z)?n.unique&&X.has(Z)||m.push(Z):Z&&Z.length&&B(Z)!==\"string\"&&te(Z)}))})(arguments),o&&!r&&M()),this},remove:function(){return a.each(arguments,(function(te,ue){for(var J;(J=a.inArray(ue,m,J))>-1;)m.splice(J,1),J<=U&&U--})),this},has:function(te){return te?a.inArray(te,m)>-1:m.length>0},empty:function(){return m&&(m=[]),this},disable:function(){return h=x=[],m=o=\"\",this},disabled:function(){return!m},lock:function(){return h=x=[],o||r||(m=o=\"\"),this},locked:function(){return!!h},fireWith:function(te,ue){return h||(ue=[te,(ue=ue||[]).slice?ue.slice():ue],x.push(ue),r||M()),this},fire:function(){return X.fireWith(this,arguments),this},fired:function(){return!!s}};return X},a.extend({Deferred:function(n){var r=[[\"notify\",\"progress\",a.Callbacks(\"memory\"),a.Callbacks(\"memory\"),2],[\"resolve\",\"done\",a.Callbacks(\"once memory\"),a.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",a.Callbacks(\"once memory\"),a.Callbacks(\"once memory\"),1,\"rejected\"]],o=\"pending\",s={state:function(){return o},always:function(){return h.done(arguments).fail(arguments),this},catch:function(m){return s.then(null,m)},pipe:function(){var m=arguments;return a.Deferred((function(x){a.each(r,(function(U,M){var X=c(m[M[4]])&&m[M[4]];h[M[1]]((function(){var te=X&&X.apply(this,arguments);te&&c(te.promise)?te.promise().progress(x.notify).done(x.resolve).fail(x.reject):x[M[0]+\"With\"](this,X?[te]:arguments)}))})),m=null})).promise()},then:function(m,x,U){var M=0;function X(te,ue,J,Z){return function(){var $e=this,Qe=arguments,je=function(){var V,ae;if(!(te<M)){if((V=J.apply($e,Qe))===ue.promise())throw new TypeError(\"Thenable self-resolution\");ae=V&&(typeof V==\"object\"||typeof V==\"function\")&&V.then,c(ae)?Z?ae.call(V,X(M,ue,Ve,Z),X(M,ue,At,Z)):(M++,ae.call(V,X(M,ue,Ve,Z),X(M,ue,At,Z),X(M,ue,Ve,ue.notifyWith))):(J!==Ve&&($e=void 0,Qe=[V]),(Z||ue.resolveWith)($e,Qe))}},Lt=Z?je:function(){try{je()}catch(V){a.Deferred.exceptionHook&&a.Deferred.exceptionHook(V,Lt.stackTrace),te+1>=M&&(J!==At&&($e=void 0,Qe=[V]),ue.rejectWith($e,Qe))}};te?Lt():(a.Deferred.getStackHook&&(Lt.stackTrace=a.Deferred.getStackHook()),q.setTimeout(Lt))}}return a.Deferred((function(te){r[0][3].add(X(0,te,c(U)?U:Ve,te.notifyWith)),r[1][3].add(X(0,te,c(m)?m:Ve)),r[2][3].add(X(0,te,c(x)?x:At))})).promise()},promise:function(m){return m!=null?a.extend(m,s):s}},h={};return a.each(r,(function(m,x){var U=x[2],M=x[5];s[x[1]]=U.add,M&&U.add((function(){o=M}),r[3-m][2].disable,r[3-m][3].disable,r[0][2].lock,r[0][3].lock),U.add(x[3].fire),h[x[0]]=function(){return h[x[0]+\"With\"](this===h?void 0:this,arguments),this},h[x[0]+\"With\"]=U.fireWith})),s.promise(h),n&&n.call(h,h),h},when:function(n){var r=arguments.length,o=r,s=Array(o),h=S.call(arguments),m=a.Deferred(),x=function(U){return function(M){s[U]=this,h[U]=arguments.length>1?S.call(arguments):M,--r||m.resolveWith(s,h)}};if(r<=1&&(Mt(n,m.done(x(o)).resolve,m.reject,!r),m.state()===\"pending\"||c(h[o]&&h[o].then)))return m.then();for(;o--;)Mt(h[o],x(o),m.reject);return m.promise()}});var ze=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;a.Deferred.exceptionHook=function(n,r){q.console&&q.console.warn&&n&&ze.test(n.name)&&q.console.warn(\"jQuery.Deferred exception: \"+n.message,n.stack,r)},a.readyException=function(n){q.setTimeout((function(){throw n}))};var re=a.Deferred();function Fe(){v.removeEventListener(\"DOMContentLoaded\",Fe),q.removeEventListener(\"load\",Fe),a.ready()}a.fn.ready=function(n){return re.then(n).catch((function(r){a.readyException(r)})),this},a.extend({isReady:!1,readyWait:1,ready:function(n){(n===!0?--a.readyWait:a.isReady)||(a.isReady=!0,n!==!0&&--a.readyWait>0||re.resolveWith(v,[a]))}}),a.ready.then=re.then,v.readyState===\"complete\"||v.readyState!==\"loading\"&&!v.documentElement.doScroll?q.setTimeout(a.ready):(v.addEventListener(\"DOMContentLoaded\",Fe),q.addEventListener(\"load\",Fe));var qe=function(n,r,o,s,h,m,x){var U=0,M=n.length,X=o==null;if(B(o)===\"object\")for(U in h=!0,o)qe(n,r,U,o[U],!0,m,x);else if(s!==void 0&&(h=!0,c(s)||(x=!0),X&&(x?(r.call(n,s),r=null):(X=r,r=function(te,ue,J){return X.call(a(te),J)})),r))for(;U<M;U++)r(n[U],o,x?s:s.call(n[U],U,r(n[U],o)));return h?n:X?r.call(n):M?r(n[0],o):m},ot=/^-ms-/,bt=/-([a-z])/g;function gt(n,r){return r.toUpperCase()}function Ct(n){return n.replace(ot,\"ms-\").replace(bt,gt)}var Gt=function(n){return n.nodeType===1||n.nodeType===9||!+n.nodeType};function xn(){this.expando=a.expando+xn.uid++}xn.uid=1,xn.prototype={cache:function(n){var r=n[this.expando];return r||(r={},Gt(n)&&(n.nodeType?n[this.expando]=r:Object.defineProperty(n,this.expando,{value:r,configurable:!0}))),r},set:function(n,r,o){var s,h=this.cache(n);if(typeof r==\"string\")h[Ct(r)]=o;else for(s in r)h[Ct(s)]=r[s];return h},get:function(n,r){return r===void 0?this.cache(n):n[this.expando]&&n[this.expando][Ct(r)]},access:function(n,r,o){return r===void 0||r&&typeof r==\"string\"&&o===void 0?this.get(n,r):(this.set(n,r,o),o!==void 0?o:r)},remove:function(n,r){var o,s=n[this.expando];if(s!==void 0){if(r!==void 0)for(o=(r=Array.isArray(r)?r.map(Ct):(r=Ct(r))in s?[r]:r.match(Le)||[]).length;o--;)delete s[r[o]];(r===void 0||a.isEmptyObject(s))&&(n.nodeType?n[this.expando]=void 0:delete n[this.expando])}},hasData:function(n){var r=n[this.expando];return r!==void 0&&!a.isEmptyObject(r)}};var Oe=new xn,on=new xn,Hr=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Fn=/[A-Z]/g;function Jn(n,r,o){var s;if(o===void 0&&n.nodeType===1)if(s=\"data-\"+r.replace(Fn,\"-$&\").toLowerCase(),typeof(o=n.getAttribute(s))==\"string\"){try{o=(function(h){return h===\"true\"||h!==\"false\"&&(h===\"null\"?null:h===+h+\"\"?+h:Hr.test(h)?JSON.parse(h):h)})(o)}catch{}on.set(n,r,o)}else o=void 0;return o}a.extend({hasData:function(n){return on.hasData(n)||Oe.hasData(n)},data:function(n,r,o){return on.access(n,r,o)},removeData:function(n,r){on.remove(n,r)},_data:function(n,r,o){return Oe.access(n,r,o)},_removeData:function(n,r){Oe.remove(n,r)}}),a.fn.extend({data:function(n,r){var o,s,h,m=this[0],x=m&&m.attributes;if(n===void 0){if(this.length&&(h=on.get(m),m.nodeType===1&&!Oe.get(m,\"hasDataAttrs\"))){for(o=x.length;o--;)x[o]&&(s=x[o].name).indexOf(\"data-\")===0&&(s=Ct(s.slice(5)),Jn(m,s,h[s]));Oe.set(m,\"hasDataAttrs\",!0)}return h}return typeof n==\"object\"?this.each((function(){on.set(this,n)})):qe(this,(function(U){var M;if(m&&U===void 0)return(M=on.get(m,n))!==void 0||(M=Jn(m,n))!==void 0?M:void 0;this.each((function(){on.set(this,n,U)}))}),null,r,arguments.length>1,null,!0)},removeData:function(n){return this.each((function(){on.remove(this,n)}))}}),a.extend({queue:function(n,r,o){var s;if(n)return r=(r||\"fx\")+\"queue\",s=Oe.get(n,r),o&&(!s||Array.isArray(o)?s=Oe.access(n,r,a.makeArray(o)):s.push(o)),s||[]},dequeue:function(n,r){r=r||\"fx\";var o=a.queue(n,r),s=o.length,h=o.shift(),m=a._queueHooks(n,r);h===\"inprogress\"&&(h=o.shift(),s--),h&&(r===\"fx\"&&o.unshift(\"inprogress\"),delete m.stop,h.call(n,(function(){a.dequeue(n,r)}),m)),!s&&m&&m.empty.fire()},_queueHooks:function(n,r){var o=r+\"queueHooks\";return Oe.get(n,o)||Oe.access(n,o,{empty:a.Callbacks(\"once memory\").add((function(){Oe.remove(n,[r+\"queue\",o])}))})}}),a.fn.extend({queue:function(n,r){var o=2;return typeof n!=\"string\"&&(r=n,n=\"fx\",o--),arguments.length<o?a.queue(this[0],n):r===void 0?this:this.each((function(){var s=a.queue(this,n,r);a._queueHooks(this,n),n===\"fx\"&&s[0]!==\"inprogress\"&&a.dequeue(this,n)}))},dequeue:function(n){return this.each((function(){a.dequeue(this,n)}))},clearQueue:function(n){return this.queue(n||\"fx\",[])},promise:function(n,r){var o,s=1,h=a.Deferred(),m=this,x=this.length,U=function(){--s||h.resolveWith(m,[m])};for(typeof n!=\"string\"&&(r=n,n=void 0),n=n||\"fx\";x--;)(o=Oe.get(m[x],n+\"queueHooks\"))&&o.empty&&(s++,o.empty.add(U));return U(),h.promise(r)}});var It=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Rn=new RegExp(\"^(?:([+-])=|)(\"+It+\")([a-z%]*)$\",\"i\"),Ke=[\"Top\",\"Right\",\"Bottom\",\"Left\"],kn=v.documentElement,_t=function(n){return a.contains(n.ownerDocument,n)},Zn={composed:!0};kn.getRootNode&&(_t=function(n){return a.contains(n.ownerDocument,n)||n.getRootNode(Zn)===n.ownerDocument});var Qt=function(n,r){return(n=r||n).style.display===\"none\"||n.style.display===\"\"&&_t(n)&&a.css(n,\"display\")===\"none\"};function wr(n,r,o,s){var h,m,x=20,U=s?function(){return s.cur()}:function(){return a.css(n,r,\"\")},M=U(),X=o&&o[3]||(a.cssNumber[r]?\"\":\"px\"),te=n.nodeType&&(a.cssNumber[r]||X!==\"px\"&&+M)&&Rn.exec(a.css(n,r));if(te&&te[3]!==X){for(M/=2,X=X||te[3],te=+M||1;x--;)a.style(n,r,te+X),(1-m)*(1-(m=U()/M||.5))<=0&&(x=0),te/=m;te*=2,a.style(n,r,te+X),o=o||[]}return o&&(te=+te||+M||0,h=o[1]?te+(o[1]+1)*o[2]:+o[2],s&&(s.unit=X,s.start=te,s.end=h)),h}var sr={};function zn(n){var r,o=n.ownerDocument,s=n.nodeName,h=sr[s];return h||(r=o.body.appendChild(o.createElement(s)),h=a.css(r,\"display\"),r.parentNode.removeChild(r),h===\"none\"&&(h=\"block\"),sr[s]=h,h)}function un(n,r){for(var o,s,h=[],m=0,x=n.length;m<x;m++)(s=n[m]).style&&(o=s.style.display,r?(o===\"none\"&&(h[m]=Oe.get(s,\"display\")||null,h[m]||(s.style.display=\"\")),s.style.display===\"\"&&Qt(s)&&(h[m]=zn(s))):o!==\"none\"&&(h[m]=\"none\",Oe.set(s,\"display\",o)));for(m=0;m<x;m++)h[m]!=null&&(n[m].style.display=h[m]);return n}a.fn.extend({show:function(){return un(this,!0)},hide:function(){return un(this)},toggle:function(n){return typeof n==\"boolean\"?n?this.show():this.hide():this.each((function(){Qt(this)?a(this).show():a(this).hide()}))}});var Vt,ur,hn=/^(?:checkbox|radio)$/i,lr=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,er=/^$|^module$|\\/(?:java|ecma)script/i;Vt=v.createDocumentFragment().appendChild(v.createElement(\"div\")),(ur=v.createElement(\"input\")).setAttribute(\"type\",\"radio\"),ur.setAttribute(\"checked\",\"checked\"),ur.setAttribute(\"name\",\"t\"),Vt.appendChild(ur),p.checkClone=Vt.cloneNode(!0).cloneNode(!0).lastChild.checked,Vt.innerHTML=\"<textarea>x</textarea>\",p.noCloneChecked=!!Vt.cloneNode(!0).lastChild.defaultValue,Vt.innerHTML=\"<option></option>\",p.option=!!Vt.lastChild;var qt={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function Kt(n,r){var o;return o=n.getElementsByTagName!==void 0?n.getElementsByTagName(r||\"*\"):n.querySelectorAll!==void 0?n.querySelectorAll(r||\"*\"):[],r===void 0||r&&Ae(n,r)?a.merge([n],o):o}function O(n,r){for(var o=0,s=n.length;o<s;o++)Oe.set(n[o],\"globalEval\",!r||Oe.get(r[o],\"globalEval\"))}qt.tbody=qt.tfoot=qt.colgroup=qt.caption=qt.thead,qt.th=qt.td,p.option||(qt.optgroup=qt.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var F=/<|&#?\\w+;/;function K(n,r,o,s,h){for(var m,x,U,M,X,te,ue=r.createDocumentFragment(),J=[],Z=0,$e=n.length;Z<$e;Z++)if((m=n[Z])||m===0)if(B(m)===\"object\")a.merge(J,m.nodeType?[m]:m);else if(F.test(m)){for(x=x||ue.appendChild(r.createElement(\"div\")),U=(lr.exec(m)||[\"\",\"\"])[1].toLowerCase(),M=qt[U]||qt._default,x.innerHTML=M[1]+a.htmlPrefilter(m)+M[2],te=M[0];te--;)x=x.lastChild;a.merge(J,x.childNodes),(x=ue.firstChild).textContent=\"\"}else J.push(r.createTextNode(m));for(ue.textContent=\"\",Z=0;m=J[Z++];)if(s&&a.inArray(m,s)>-1)h&&h.push(m);else if(X=_t(m),x=Kt(ue.appendChild(m),\"script\"),X&&O(x),o)for(te=0;m=x[te++];)er.test(m.type||\"\")&&o.push(m);return ue}var we=/^([^.]*)(?:\\.(.+)|)/;function ke(){return!0}function Ne(){return!1}function vt(n,r){return n===(function(){try{return v.activeElement}catch{}})()==(r===\"focus\")}function mt(n,r,o,s,h,m){var x,U;if(typeof r==\"object\"){for(U in typeof o!=\"string\"&&(s=s||o,o=void 0),r)mt(n,U,o,s,r[U],m);return n}if(s==null&&h==null?(h=o,s=o=void 0):h==null&&(typeof o==\"string\"?(h=s,s=void 0):(h=s,s=o,o=void 0)),h===!1)h=Ne;else if(!h)return n;return m===1&&(x=h,h=function(M){return a().off(M),x.apply(this,arguments)},h.guid=x.guid||(x.guid=a.guid++)),n.each((function(){a.event.add(this,r,h,s,o)}))}function ut(n,r,o){o?(Oe.set(n,r,!1),a.event.add(n,r,{namespace:!1,handler:function(s){var h,m,x=Oe.get(this,r);if(1&s.isTrigger&&this[r]){if(x.length)(a.event.special[r]||{}).delegateType&&s.stopPropagation();else if(x=S.call(arguments),Oe.set(this,r,x),h=o(this,r),this[r](),x!==(m=Oe.get(this,r))||h?Oe.set(this,r,!1):m={},x!==m)return s.stopImmediatePropagation(),s.preventDefault(),m&&m.value}else x.length&&(Oe.set(this,r,{value:a.event.trigger(a.extend(x[0],a.Event.prototype),x.slice(1),this)}),s.stopImmediatePropagation())}})):Oe.get(n,r)===void 0&&a.event.add(n,r,ke)}a.event={global:{},add:function(n,r,o,s,h){var m,x,U,M,X,te,ue,J,Z,$e,Qe,je=Oe.get(n);if(Gt(n))for(o.handler&&(o=(m=o).handler,h=m.selector),h&&a.find.matchesSelector(kn,h),o.guid||(o.guid=a.guid++),(M=je.events)||(M=je.events=Object.create(null)),(x=je.handle)||(x=je.handle=function(Lt){return a!==void 0&&a.event.triggered!==Lt.type?a.event.dispatch.apply(n,arguments):void 0}),X=(r=(r||\"\").match(Le)||[\"\"]).length;X--;)Z=Qe=(U=we.exec(r[X])||[])[1],$e=(U[2]||\"\").split(\".\").sort(),Z&&(ue=a.event.special[Z]||{},Z=(h?ue.delegateType:ue.bindType)||Z,ue=a.event.special[Z]||{},te=a.extend({type:Z,origType:Qe,data:s,handler:o,guid:o.guid,selector:h,needsContext:h&&a.expr.match.needsContext.test(h),namespace:$e.join(\".\")},m),(J=M[Z])||((J=M[Z]=[]).delegateCount=0,ue.setup&&ue.setup.call(n,s,$e,x)!==!1||n.addEventListener&&n.addEventListener(Z,x)),ue.add&&(ue.add.call(n,te),te.handler.guid||(te.handler.guid=o.guid)),h?J.splice(J.delegateCount++,0,te):J.push(te),a.event.global[Z]=!0)},remove:function(n,r,o,s,h){var m,x,U,M,X,te,ue,J,Z,$e,Qe,je=Oe.hasData(n)&&Oe.get(n);if(je&&(M=je.events)){for(X=(r=(r||\"\").match(Le)||[\"\"]).length;X--;)if(Z=Qe=(U=we.exec(r[X])||[])[1],$e=(U[2]||\"\").split(\".\").sort(),Z){for(ue=a.event.special[Z]||{},J=M[Z=(s?ue.delegateType:ue.bindType)||Z]||[],U=U[2]&&new RegExp(\"(^|\\\\.)\"+$e.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),x=m=J.length;m--;)te=J[m],!h&&Qe!==te.origType||o&&o.guid!==te.guid||U&&!U.test(te.namespace)||s&&s!==te.selector&&(s!==\"**\"||!te.selector)||(J.splice(m,1),te.selector&&J.delegateCount--,ue.remove&&ue.remove.call(n,te));x&&!J.length&&(ue.teardown&&ue.teardown.call(n,$e,je.handle)!==!1||a.removeEvent(n,Z,je.handle),delete M[Z])}else for(Z in M)a.event.remove(n,Z+r[X],o,s,!0);a.isEmptyObject(M)&&Oe.remove(n,\"handle events\")}},dispatch:function(n){var r,o,s,h,m,x,U=new Array(arguments.length),M=a.event.fix(n),X=(Oe.get(this,\"events\")||Object.create(null))[M.type]||[],te=a.event.special[M.type]||{};for(U[0]=M,r=1;r<arguments.length;r++)U[r]=arguments[r];if(M.delegateTarget=this,!te.preDispatch||te.preDispatch.call(this,M)!==!1){for(x=a.event.handlers.call(this,M,X),r=0;(h=x[r++])&&!M.isPropagationStopped();)for(M.currentTarget=h.elem,o=0;(m=h.handlers[o++])&&!M.isImmediatePropagationStopped();)M.rnamespace&&m.namespace!==!1&&!M.rnamespace.test(m.namespace)||(M.handleObj=m,M.data=m.data,(s=((a.event.special[m.origType]||{}).handle||m.handler).apply(h.elem,U))!==void 0&&(M.result=s)===!1&&(M.preventDefault(),M.stopPropagation()));return te.postDispatch&&te.postDispatch.call(this,M),M.result}},handlers:function(n,r){var o,s,h,m,x,U=[],M=r.delegateCount,X=n.target;if(M&&X.nodeType&&!(n.type===\"click\"&&n.button>=1)){for(;X!==this;X=X.parentNode||this)if(X.nodeType===1&&(n.type!==\"click\"||X.disabled!==!0)){for(m=[],x={},o=0;o<M;o++)x[h=(s=r[o]).selector+\" \"]===void 0&&(x[h]=s.needsContext?a(h,this).index(X)>-1:a.find(h,this,null,[X]).length),x[h]&&m.push(s);m.length&&U.push({elem:X,handlers:m})}}return X=this,M<r.length&&U.push({elem:X,handlers:r.slice(M)}),U},addProp:function(n,r){Object.defineProperty(a.Event.prototype,n,{enumerable:!0,configurable:!0,get:c(r)?function(){if(this.originalEvent)return r(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[n]},set:function(o){Object.defineProperty(this,n,{enumerable:!0,configurable:!0,writable:!0,value:o})}})},fix:function(n){return n[a.expando]?n:new a.Event(n)},special:{load:{noBubble:!0},click:{setup:function(n){var r=this||n;return hn.test(r.type)&&r.click&&Ae(r,\"input\")&&ut(r,\"click\",ke),!1},trigger:function(n){var r=this||n;return hn.test(r.type)&&r.click&&Ae(r,\"input\")&&ut(r,\"click\"),!0},_default:function(n){var r=n.target;return hn.test(r.type)&&r.click&&Ae(r,\"input\")&&Oe.get(r,\"click\")||Ae(r,\"a\")}},beforeunload:{postDispatch:function(n){n.result!==void 0&&n.originalEvent&&(n.originalEvent.returnValue=n.result)}}}},a.removeEvent=function(n,r,o){n.removeEventListener&&n.removeEventListener(r,o)},a.Event=function(n,r){if(!(this instanceof a.Event))return new a.Event(n,r);n&&n.type?(this.originalEvent=n,this.type=n.type,this.isDefaultPrevented=n.defaultPrevented||n.defaultPrevented===void 0&&n.returnValue===!1?ke:Ne,this.target=n.target&&n.target.nodeType===3?n.target.parentNode:n.target,this.currentTarget=n.currentTarget,this.relatedTarget=n.relatedTarget):this.type=n,r&&a.extend(this,r),this.timeStamp=n&&n.timeStamp||Date.now(),this[a.expando]=!0},a.Event.prototype={constructor:a.Event,isDefaultPrevented:Ne,isPropagationStopped:Ne,isImmediatePropagationStopped:Ne,isSimulated:!1,preventDefault:function(){var n=this.originalEvent;this.isDefaultPrevented=ke,n&&!this.isSimulated&&n.preventDefault()},stopPropagation:function(){var n=this.originalEvent;this.isPropagationStopped=ke,n&&!this.isSimulated&&n.stopPropagation()},stopImmediatePropagation:function(){var n=this.originalEvent;this.isImmediatePropagationStopped=ke,n&&!this.isSimulated&&n.stopImmediatePropagation(),this.stopPropagation()}},a.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},a.event.addProp),a.each({focus:\"focusin\",blur:\"focusout\"},(function(n,r){a.event.special[n]={setup:function(){return ut(this,n,vt),!1},trigger:function(){return ut(this,n),!0},_default:function(o){return Oe.get(o.target,n)},delegateType:r}})),a.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},(function(n,r){a.event.special[n]={delegateType:r,bindType:r,handle:function(o){var s,h=o.relatedTarget,m=o.handleObj;return h&&(h===this||a.contains(this,h))||(o.type=m.origType,s=m.handler.apply(this,arguments),o.type=r),s}}})),a.fn.extend({on:function(n,r,o,s){return mt(this,n,r,o,s)},one:function(n,r,o,s){return mt(this,n,r,o,s,1)},off:function(n,r,o){var s,h;if(n&&n.preventDefault&&n.handleObj)return s=n.handleObj,a(n.delegateTarget).off(s.namespace?s.origType+\".\"+s.namespace:s.origType,s.selector,s.handler),this;if(typeof n==\"object\"){for(h in n)this.off(h,r,n[h]);return this}return r!==!1&&typeof r!=\"function\"||(o=r,r=void 0),o===!1&&(o=Ne),this.each((function(){a.event.remove(this,n,o,r)}))}});var Dn=/<script|<style|<link/i,dn=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Jt=/^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;function Mr(n,r){return Ae(n,\"table\")&&Ae(r.nodeType!==11?r:r.firstChild,\"tr\")&&a(n).children(\"tbody\")[0]||n}function ti(n){return n.type=(n.getAttribute(\"type\")!==null)+\"/\"+n.type,n}function vi(n){return(n.type||\"\").slice(0,5)===\"true/\"?n.type=n.type.slice(5):n.removeAttribute(\"type\"),n}function ni(n,r){var o,s,h,m,x,U;if(r.nodeType===1){if(Oe.hasData(n)&&(U=Oe.get(n).events))for(h in Oe.remove(r,\"handle events\"),U)for(o=0,s=U[h].length;o<s;o++)a.event.add(r,h,U[h][o]);on.hasData(n)&&(m=on.access(n),x=a.extend({},m),on.set(r,x))}}function Di(n,r){var o=r.nodeName.toLowerCase();o===\"input\"&&hn.test(n.type)?r.checked=n.checked:o!==\"input\"&&o!==\"textarea\"||(r.defaultValue=n.defaultValue)}function cr(n,r,o,s){r=k(r);var h,m,x,U,M,X,te=0,ue=n.length,J=ue-1,Z=r[0],$e=c(Z);if($e||ue>1&&typeof Z==\"string\"&&!p.checkClone&&dn.test(Z))return n.each((function(Qe){var je=n.eq(Qe);$e&&(r[0]=Z.call(this,Qe,je.html())),cr(je,r,o,s)}));if(ue&&(m=(h=K(r,n[0].ownerDocument,!1,n,s)).firstChild,h.childNodes.length===1&&(h=m),m||s)){for(U=(x=a.map(Kt(h,\"script\"),ti)).length;te<ue;te++)M=h,te!==J&&(M=a.clone(M,!0,!0),U&&a.merge(x,Kt(M,\"script\"))),o.call(n[te],M,te);if(U)for(X=x[x.length-1].ownerDocument,a.map(x,vi),te=0;te<U;te++)M=x[te],er.test(M.type||\"\")&&!Oe.access(M,\"globalEval\")&&a.contains(X,M)&&(M.src&&(M.type||\"\").toLowerCase()!==\"module\"?a._evalUrl&&!M.noModule&&a._evalUrl(M.src,{nonce:M.nonce||M.getAttribute(\"nonce\")},X):H(M.textContent.replace(Jt,\"\"),M,X))}return n}function Ur(n,r,o){for(var s,h=r?a.filter(r,n):n,m=0;(s=h[m])!=null;m++)o||s.nodeType!==1||a.cleanData(Kt(s)),s.parentNode&&(o&&_t(s)&&O(Kt(s,\"script\")),s.parentNode.removeChild(s));return n}a.extend({htmlPrefilter:function(n){return n},clone:function(n,r,o){var s,h,m,x,U=n.cloneNode(!0),M=_t(n);if(!(p.noCloneChecked||n.nodeType!==1&&n.nodeType!==11||a.isXMLDoc(n)))for(x=Kt(U),s=0,h=(m=Kt(n)).length;s<h;s++)Di(m[s],x[s]);if(r)if(o)for(m=m||Kt(n),x=x||Kt(U),s=0,h=m.length;s<h;s++)ni(m[s],x[s]);else ni(n,U);return(x=Kt(U,\"script\")).length>0&&O(x,!M&&Kt(n,\"script\")),U},cleanData:function(n){for(var r,o,s,h=a.event.special,m=0;(o=n[m])!==void 0;m++)if(Gt(o)){if(r=o[Oe.expando]){if(r.events)for(s in r.events)h[s]?a.event.remove(o,s):a.removeEvent(o,s,r.handle);o[Oe.expando]=void 0}o[on.expando]&&(o[on.expando]=void 0)}}}),a.fn.extend({detach:function(n){return Ur(this,n,!0)},remove:function(n){return Ur(this,n)},text:function(n){return qe(this,(function(r){return r===void 0?a.text(this):this.empty().each((function(){this.nodeType!==1&&this.nodeType!==11&&this.nodeType!==9||(this.textContent=r)}))}),null,n,arguments.length)},append:function(){return cr(this,arguments,(function(n){this.nodeType!==1&&this.nodeType!==11&&this.nodeType!==9||Mr(this,n).appendChild(n)}))},prepend:function(){return cr(this,arguments,(function(n){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var r=Mr(this,n);r.insertBefore(n,r.firstChild)}}))},before:function(){return cr(this,arguments,(function(n){this.parentNode&&this.parentNode.insertBefore(n,this)}))},after:function(){return cr(this,arguments,(function(n){this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling)}))},empty:function(){for(var n,r=0;(n=this[r])!=null;r++)n.nodeType===1&&(a.cleanData(Kt(n,!1)),n.textContent=\"\");return this},clone:function(n,r){return n=n!=null&&n,r=r??n,this.map((function(){return a.clone(this,n,r)}))},html:function(n){return qe(this,(function(r){var o=this[0]||{},s=0,h=this.length;if(r===void 0&&o.nodeType===1)return o.innerHTML;if(typeof r==\"string\"&&!Dn.test(r)&&!qt[(lr.exec(r)||[\"\",\"\"])[1].toLowerCase()]){r=a.htmlPrefilter(r);try{for(;s<h;s++)(o=this[s]||{}).nodeType===1&&(a.cleanData(Kt(o,!1)),o.innerHTML=r);o=0}catch{}}o&&this.empty().append(r)}),null,n,arguments.length)},replaceWith:function(){var n=[];return cr(this,arguments,(function(r){var o=this.parentNode;a.inArray(this,n)<0&&(a.cleanData(Kt(this)),o&&o.replaceChild(r,this))}),n)}}),a.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},(function(n,r){a.fn[n]=function(o){for(var s,h=[],m=a(o),x=m.length-1,U=0;U<=x;U++)s=U===x?this:this.clone(!0),a(m[U])[r](s),P.apply(h,s.get());return this.pushStack(h)}}));var Dr=new RegExp(\"^(\"+It+\")(?!px)[a-z%]+$\",\"i\"),_r=/^--/,fr=function(n){var r=n.ownerDocument.defaultView;return r&&r.opener||(r=q),r.getComputedStyle(n)},pr=function(n,r,o){var s,h,m={};for(h in r)m[h]=n.style[h],n.style[h]=r[h];for(h in s=o.call(n),r)n.style[h]=m[h];return s},ri=new RegExp(Ke.join(\"|\"),\"i\"),ii=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",ji=new RegExp(\"^\"+ii+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ii+\"+$\",\"g\");function Tn(n,r,o){var s,h,m,x,U=_r.test(r),M=n.style;return(o=o||fr(n))&&(x=o.getPropertyValue(r)||o[r],U&&x&&(x=x.replace(ji,\"$1\")||void 0),x!==\"\"||_t(n)||(x=a.style(n,r)),!p.pixelBoxStyles()&&Dr.test(x)&&ri.test(r)&&(s=M.width,h=M.minWidth,m=M.maxWidth,M.minWidth=M.maxWidth=M.width=x,x=o.width,M.width=s,M.minWidth=h,M.maxWidth=m)),x!==void 0?x+\"\":x}function oi(n,r){return{get:function(){if(!n())return(this.get=r).apply(this,arguments);delete this.get}}}(function(){function n(){if(X){M.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",X.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",kn.appendChild(M).appendChild(X);var te=q.getComputedStyle(X);o=te.top!==\"1%\",U=r(te.marginLeft)===12,X.style.right=\"60%\",m=r(te.right)===36,s=r(te.width)===36,X.style.position=\"absolute\",h=r(X.offsetWidth/3)===12,kn.removeChild(M),X=null}}function r(te){return Math.round(parseFloat(te))}var o,s,h,m,x,U,M=v.createElement(\"div\"),X=v.createElement(\"div\");X.style&&(X.style.backgroundClip=\"content-box\",X.cloneNode(!0).style.backgroundClip=\"\",p.clearCloneStyle=X.style.backgroundClip===\"content-box\",a.extend(p,{boxSizingReliable:function(){return n(),s},pixelBoxStyles:function(){return n(),m},pixelPosition:function(){return n(),o},reliableMarginLeft:function(){return n(),U},scrollboxSize:function(){return n(),h},reliableTrDimensions:function(){var te,ue,J,Z;return x==null&&(te=v.createElement(\"table\"),ue=v.createElement(\"tr\"),J=v.createElement(\"div\"),te.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",ue.style.cssText=\"border:1px solid\",ue.style.height=\"1px\",J.style.height=\"9px\",J.style.display=\"block\",kn.appendChild(te).appendChild(ue).appendChild(J),Z=q.getComputedStyle(ue),x=parseInt(Z.height,10)+parseInt(Z.borderTopWidth,10)+parseInt(Z.borderBottomWidth,10)===ue.offsetHeight,kn.removeChild(te)),x}}))})();var tr=[\"Webkit\",\"Moz\",\"ms\"],Zt=v.createElement(\"div\").style,mi={};function Bn(n){var r=a.cssProps[n]||mi[n];return r||(n in Zt?n:mi[n]=(function(o){for(var s=o[0].toUpperCase()+o.slice(1),h=tr.length;h--;)if((o=tr[h]+s)in Zt)return o})(n)||n)}var jr=/^(none|table(?!-c[ea]).+)/,Oi={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Wn={letterSpacing:\"0\",fontWeight:\"400\"};function Gn(n,r,o){var s=Rn.exec(r);return s?Math.max(0,s[2]-(o||0))+(s[3]||\"px\"):r}function yi(n,r,o,s,h,m){var x=r===\"width\"?1:0,U=0,M=0;if(o===(s?\"border\":\"content\"))return 0;for(;x<4;x+=2)o===\"margin\"&&(M+=a.css(n,o+Ke[x],!0,h)),s?(o===\"content\"&&(M-=a.css(n,\"padding\"+Ke[x],!0,h)),o!==\"margin\"&&(M-=a.css(n,\"border\"+Ke[x]+\"Width\",!0,h))):(M+=a.css(n,\"padding\"+Ke[x],!0,h),o!==\"padding\"?M+=a.css(n,\"border\"+Ke[x]+\"Width\",!0,h):U+=a.css(n,\"border\"+Ke[x]+\"Width\",!0,h));return!s&&m>=0&&(M+=Math.max(0,Math.ceil(n[\"offset\"+r[0].toUpperCase()+r.slice(1)]-m-M-U-.5))||0),M}function Ni(n,r,o){var s=fr(n),h=(!p.boxSizingReliable()||o)&&a.css(n,\"boxSizing\",!1,s)===\"border-box\",m=h,x=Tn(n,r,s),U=\"offset\"+r[0].toUpperCase()+r.slice(1);if(Dr.test(x)){if(!o)return x;x=\"auto\"}return(!p.boxSizingReliable()&&h||!p.reliableTrDimensions()&&Ae(n,\"tr\")||x===\"auto\"||!parseFloat(x)&&a.css(n,\"display\",!1,s)===\"inline\")&&n.getClientRects().length&&(h=a.css(n,\"boxSizing\",!1,s)===\"border-box\",(m=U in n)&&(x=n[U])),(x=parseFloat(x)||0)+yi(n,r,o||(h?\"border\":\"content\"),m,s,x)+\"px\"}function gn(n,r,o,s,h){return new gn.prototype.init(n,r,o,s,h)}a.extend({cssHooks:{opacity:{get:function(n,r){if(r){var o=Tn(n,\"opacity\");return o===\"\"?\"1\":o}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(n,r,o,s){if(n&&n.nodeType!==3&&n.nodeType!==8&&n.style){var h,m,x,U=Ct(r),M=_r.test(r),X=n.style;if(M||(r=Bn(U)),x=a.cssHooks[r]||a.cssHooks[U],o===void 0)return x&&\"get\"in x&&(h=x.get(n,!1,s))!==void 0?h:X[r];(m=typeof o)==\"string\"&&(h=Rn.exec(o))&&h[1]&&(o=wr(n,r,h),m=\"number\"),o!=null&&o==o&&(m!==\"number\"||M||(o+=h&&h[3]||(a.cssNumber[U]?\"\":\"px\")),p.clearCloneStyle||o!==\"\"||r.indexOf(\"background\")!==0||(X[r]=\"inherit\"),x&&\"set\"in x&&(o=x.set(n,o,s))===void 0||(M?X.setProperty(r,o):X[r]=o))}},css:function(n,r,o,s){var h,m,x,U=Ct(r);return _r.test(r)||(r=Bn(U)),(x=a.cssHooks[r]||a.cssHooks[U])&&\"get\"in x&&(h=x.get(n,!0,o)),h===void 0&&(h=Tn(n,r,s)),h===\"normal\"&&r in Wn&&(h=Wn[r]),o===\"\"||o?(m=parseFloat(h),o===!0||isFinite(m)?m||0:h):h}}),a.each([\"height\",\"width\"],(function(n,r){a.cssHooks[r]={get:function(o,s,h){if(s)return!jr.test(a.css(o,\"display\"))||o.getClientRects().length&&o.getBoundingClientRect().width?Ni(o,r,h):pr(o,Oi,(function(){return Ni(o,r,h)}))},set:function(o,s,h){var m,x=fr(o),U=!p.scrollboxSize()&&x.position===\"absolute\",M=(U||h)&&a.css(o,\"boxSizing\",!1,x)===\"border-box\",X=h?yi(o,r,h,M,x):0;return M&&U&&(X-=Math.ceil(o[\"offset\"+r[0].toUpperCase()+r.slice(1)]-parseFloat(x[r])-yi(o,r,\"border\",!1,x)-.5)),X&&(m=Rn.exec(s))&&(m[3]||\"px\")!==\"px\"&&(o.style[r]=s,s=a.css(o,r)),Gn(0,s,X)}}})),a.cssHooks.marginLeft=oi(p.reliableMarginLeft,(function(n,r){if(r)return(parseFloat(Tn(n,\"marginLeft\"))||n.getBoundingClientRect().left-pr(n,{marginLeft:0},(function(){return n.getBoundingClientRect().left})))+\"px\"})),a.each({margin:\"\",padding:\"\",border:\"Width\"},(function(n,r){a.cssHooks[n+r]={expand:function(o){for(var s=0,h={},m=typeof o==\"string\"?o.split(\" \"):[o];s<4;s++)h[n+Ke[s]+r]=m[s]||m[s-2]||m[0];return h}},n!==\"margin\"&&(a.cssHooks[n+r].set=Gn)})),a.fn.extend({css:function(n,r){return qe(this,(function(o,s,h){var m,x,U={},M=0;if(Array.isArray(s)){for(m=fr(o),x=s.length;M<x;M++)U[s[M]]=a.css(o,s[M],!1,m);return U}return h!==void 0?a.style(o,s,h):a.css(o,s)}),n,r,arguments.length>1)}}),a.Tween=gn,gn.prototype={constructor:gn,init:function(n,r,o,s,h,m){this.elem=n,this.prop=o,this.easing=h||a.easing._default,this.options=r,this.start=this.now=this.cur(),this.end=s,this.unit=m||(a.cssNumber[o]?\"\":\"px\")},cur:function(){var n=gn.propHooks[this.prop];return n&&n.get?n.get(this):gn.propHooks._default.get(this)},run:function(n){var r,o=gn.propHooks[this.prop];return this.options.duration?this.pos=r=a.easing[this.easing](n,this.options.duration*n,0,1,this.options.duration):this.pos=r=n,this.now=(this.end-this.start)*r+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),o&&o.set?o.set(this):gn.propHooks._default.set(this),this}},gn.prototype.init.prototype=gn.prototype,gn.propHooks={_default:{get:function(n){var r;return n.elem.nodeType!==1||n.elem[n.prop]!=null&&n.elem.style[n.prop]==null?n.elem[n.prop]:(r=a.css(n.elem,n.prop,\"\"))&&r!==\"auto\"?r:0},set:function(n){a.fx.step[n.prop]?a.fx.step[n.prop](n):n.elem.nodeType!==1||!a.cssHooks[n.prop]&&n.elem.style[Bn(n.prop)]==null?n.elem[n.prop]=n.now:a.style(n.elem,n.prop,n.now+n.unit)}}},gn.propHooks.scrollTop=gn.propHooks.scrollLeft={set:function(n){n.elem.nodeType&&n.elem.parentNode&&(n.elem[n.prop]=n.now)}},a.easing={linear:function(n){return n},swing:function(n){return .5-Math.cos(n*Math.PI)/2},_default:\"swing\"},a.fx=gn.prototype.init,a.fx.step={};var xr,ai,St=/^(?:toggle|show|hide)$/,Te=/queueHooks$/;function Be(){ai&&(v.hidden===!1&&q.requestAnimationFrame?q.requestAnimationFrame(Be):q.setTimeout(Be,a.fx.interval),a.fx.tick())}function xt(){return q.setTimeout((function(){xr=void 0})),xr=Date.now()}function Ye(n,r){var o,s=0,h={height:n};for(r=r?1:0;s<4;s+=2-r)h[\"margin\"+(o=Ke[s])]=h[\"padding\"+o]=n;return r&&(h.opacity=h.width=n),h}function Cn(n,r,o){for(var s,h=(en.tweeners[r]||[]).concat(en.tweeners[\"*\"]),m=0,x=h.length;m<x;m++)if(s=h[m].call(o,r,n))return s}function en(n,r,o){var s,h,m=0,x=en.prefilters.length,U=a.Deferred().always((function(){delete M.elem})),M=function(){if(h)return!1;for(var ue=xr||xt(),J=Math.max(0,X.startTime+X.duration-ue),Z=1-(J/X.duration||0),$e=0,Qe=X.tweens.length;$e<Qe;$e++)X.tweens[$e].run(Z);return U.notifyWith(n,[X,Z,J]),Z<1&&Qe?J:(Qe||U.notifyWith(n,[X,1,0]),U.resolveWith(n,[X]),!1)},X=U.promise({elem:n,props:a.extend({},r),opts:a.extend(!0,{specialEasing:{},easing:a.easing._default},o),originalProperties:r,originalOptions:o,startTime:xr||xt(),duration:o.duration,tweens:[],createTween:function(ue,J){var Z=a.Tween(n,X.opts,ue,J,X.opts.specialEasing[ue]||X.opts.easing);return X.tweens.push(Z),Z},stop:function(ue){var J=0,Z=ue?X.tweens.length:0;if(h)return this;for(h=!0;J<Z;J++)X.tweens[J].run(1);return ue?(U.notifyWith(n,[X,1,0]),U.resolveWith(n,[X,ue])):U.rejectWith(n,[X,ue]),this}}),te=X.props;for(!(function(ue,J){var Z,$e,Qe,je,Lt;for(Z in ue)if(Qe=J[$e=Ct(Z)],je=ue[Z],Array.isArray(je)&&(Qe=je[1],je=ue[Z]=je[0]),Z!==$e&&(ue[$e]=je,delete ue[Z]),(Lt=a.cssHooks[$e])&&\"expand\"in Lt)for(Z in je=Lt.expand(je),delete ue[$e],je)Z in ue||(ue[Z]=je[Z],J[Z]=Qe);else J[$e]=Qe})(te,X.opts.specialEasing);m<x;m++)if(s=en.prefilters[m].call(X,n,te,X.opts))return c(s.stop)&&(a._queueHooks(X.elem,X.opts.queue).stop=s.stop.bind(s)),s;return a.map(te,Cn,X),c(X.opts.start)&&X.opts.start.call(n,X),X.progress(X.opts.progress).done(X.opts.done,X.opts.complete).fail(X.opts.fail).always(X.opts.always),a.fx.timer(a.extend(M,{elem:n,anim:X,queue:X.opts.queue})),X}a.Animation=a.extend(en,{tweeners:{\"*\":[function(n,r){var o=this.createTween(n,r);return wr(o.elem,n,Rn.exec(r),o),o}]},tweener:function(n,r){c(n)?(r=n,n=[\"*\"]):n=n.match(Le);for(var o,s=0,h=n.length;s<h;s++)o=n[s],en.tweeners[o]=en.tweeners[o]||[],en.tweeners[o].unshift(r)},prefilters:[function(n,r,o){var s,h,m,x,U,M,X,te,ue=\"width\"in r||\"height\"in r,J=this,Z={},$e=n.style,Qe=n.nodeType&&Qt(n),je=Oe.get(n,\"fxshow\");for(s in o.queue||((x=a._queueHooks(n,\"fx\")).unqueued==null&&(x.unqueued=0,U=x.empty.fire,x.empty.fire=function(){x.unqueued||U()}),x.unqueued++,J.always((function(){J.always((function(){x.unqueued--,a.queue(n,\"fx\").length||x.empty.fire()}))}))),r)if(h=r[s],St.test(h)){if(delete r[s],m=m||h===\"toggle\",h===(Qe?\"hide\":\"show\")){if(h!==\"show\"||!je||je[s]===void 0)continue;Qe=!0}Z[s]=je&&je[s]||a.style(n,s)}if((M=!a.isEmptyObject(r))||!a.isEmptyObject(Z))for(s in ue&&n.nodeType===1&&(o.overflow=[$e.overflow,$e.overflowX,$e.overflowY],(X=je&&je.display)==null&&(X=Oe.get(n,\"display\")),(te=a.css(n,\"display\"))===\"none\"&&(X?te=X:(un([n],!0),X=n.style.display||X,te=a.css(n,\"display\"),un([n]))),(te===\"inline\"||te===\"inline-block\"&&X!=null)&&a.css(n,\"float\")===\"none\"&&(M||(J.done((function(){$e.display=X})),X==null&&(te=$e.display,X=te===\"none\"?\"\":te)),$e.display=\"inline-block\")),o.overflow&&($e.overflow=\"hidden\",J.always((function(){$e.overflow=o.overflow[0],$e.overflowX=o.overflow[1],$e.overflowY=o.overflow[2]}))),M=!1,Z)M||(je?\"hidden\"in je&&(Qe=je.hidden):je=Oe.access(n,\"fxshow\",{display:X}),m&&(je.hidden=!Qe),Qe&&un([n],!0),J.done((function(){for(s in Qe||un([n]),Oe.remove(n,\"fxshow\"),Z)a.style(n,s,Z[s])}))),M=Cn(Qe?je[s]:0,s,J),s in je||(je[s]=M.start,Qe&&(M.end=M.start,M.start=0))}],prefilter:function(n,r){r?en.prefilters.unshift(n):en.prefilters.push(n)}}),a.speed=function(n,r,o){var s=n&&typeof n==\"object\"?a.extend({},n):{complete:o||!o&&r||c(n)&&n,duration:n,easing:o&&r||r&&!c(r)&&r};return a.fx.off?s.duration=0:typeof s.duration!=\"number\"&&(s.duration in a.fx.speeds?s.duration=a.fx.speeds[s.duration]:s.duration=a.fx.speeds._default),s.queue!=null&&s.queue!==!0||(s.queue=\"fx\"),s.old=s.complete,s.complete=function(){c(s.old)&&s.old.call(this),s.queue&&a.dequeue(this,s.queue)},s},a.fn.extend({fadeTo:function(n,r,o,s){return this.filter(Qt).css(\"opacity\",0).show().end().animate({opacity:r},n,o,s)},animate:function(n,r,o,s){var h=a.isEmptyObject(n),m=a.speed(r,o,s),x=function(){var U=en(this,a.extend({},n),m);(h||Oe.get(this,\"finish\"))&&U.stop(!0)};return x.finish=x,h||m.queue===!1?this.each(x):this.queue(m.queue,x)},stop:function(n,r,o){var s=function(h){var m=h.stop;delete h.stop,m(o)};return typeof n!=\"string\"&&(o=r,r=n,n=void 0),r&&this.queue(n||\"fx\",[]),this.each((function(){var h=!0,m=n!=null&&n+\"queueHooks\",x=a.timers,U=Oe.get(this);if(m)U[m]&&U[m].stop&&s(U[m]);else for(m in U)U[m]&&U[m].stop&&Te.test(m)&&s(U[m]);for(m=x.length;m--;)x[m].elem!==this||n!=null&&x[m].queue!==n||(x[m].anim.stop(o),h=!1,x.splice(m,1));!h&&o||a.dequeue(this,n)}))},finish:function(n){return n!==!1&&(n=n||\"fx\"),this.each((function(){var r,o=Oe.get(this),s=o[n+\"queue\"],h=o[n+\"queueHooks\"],m=a.timers,x=s?s.length:0;for(o.finish=!0,a.queue(this,n,[]),h&&h.stop&&h.stop.call(this,!0),r=m.length;r--;)m[r].elem===this&&m[r].queue===n&&(m[r].anim.stop(!0),m.splice(r,1));for(r=0;r<x;r++)s[r]&&s[r].finish&&s[r].finish.call(this);delete o.finish}))}}),a.each([\"toggle\",\"show\",\"hide\"],(function(n,r){var o=a.fn[r];a.fn[r]=function(s,h,m){return s==null||typeof s==\"boolean\"?o.apply(this,arguments):this.animate(Ye(r,!0),s,h,m)}})),a.each({slideDown:Ye(\"show\"),slideUp:Ye(\"hide\"),slideToggle:Ye(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},(function(n,r){a.fn[n]=function(o,s,h){return this.animate(r,o,s,h)}})),a.timers=[],a.fx.tick=function(){var n,r=0,o=a.timers;for(xr=Date.now();r<o.length;r++)(n=o[r])()||o[r]!==n||o.splice(r--,1);o.length||a.fx.stop(),xr=void 0},a.fx.timer=function(n){a.timers.push(n),a.fx.start()},a.fx.interval=13,a.fx.start=function(){ai||(ai=!0,Be())},a.fx.stop=function(){ai=null},a.fx.speeds={slow:600,fast:200,_default:400},a.fn.delay=function(n,r){return n=a.fx&&a.fx.speeds[n]||n,r=r||\"fx\",this.queue(r,(function(o,s){var h=q.setTimeout(o,n);s.stop=function(){q.clearTimeout(h)}}))},(function(){var n=v.createElement(\"input\"),r=v.createElement(\"select\").appendChild(v.createElement(\"option\"));n.type=\"checkbox\",p.checkOn=n.value!==\"\",p.optSelected=r.selected,(n=v.createElement(\"input\")).value=\"t\",n.type=\"radio\",p.radioValue=n.value===\"t\"})();var Ft,Vn=a.expr.attrHandle;a.fn.extend({attr:function(n,r){return qe(this,a.attr,n,r,arguments.length>1)},removeAttr:function(n){return this.each((function(){a.removeAttr(this,n)}))}}),a.extend({attr:function(n,r,o){var s,h,m=n.nodeType;if(m!==3&&m!==8&&m!==2)return n.getAttribute===void 0?a.prop(n,r,o):(m===1&&a.isXMLDoc(n)||(h=a.attrHooks[r.toLowerCase()]||(a.expr.match.bool.test(r)?Ft:void 0)),o!==void 0?o===null?void a.removeAttr(n,r):h&&\"set\"in h&&(s=h.set(n,o,r))!==void 0?s:(n.setAttribute(r,o+\"\"),o):h&&\"get\"in h&&(s=h.get(n,r))!==null?s:(s=a.find.attr(n,r))==null?void 0:s)},attrHooks:{type:{set:function(n,r){if(!p.radioValue&&r===\"radio\"&&Ae(n,\"input\")){var o=n.value;return n.setAttribute(\"type\",r),o&&(n.value=o),r}}}},removeAttr:function(n,r){var o,s=0,h=r&&r.match(Le);if(h&&n.nodeType===1)for(;o=h[s++];)n.removeAttribute(o)}}),Ft={set:function(n,r,o){return r===!1?a.removeAttr(n,o):n.setAttribute(o,o),o}},a.each(a.expr.match.bool.source.match(/\\w+/g),(function(n,r){var o=Vn[r]||a.find.attr;Vn[r]=function(s,h,m){var x,U,M=h.toLowerCase();return m||(U=Vn[M],Vn[M]=x,x=o(s,h,m)!=null?M:null,Vn[M]=U),x}}));var nr=/^(?:input|select|textarea|button)$/i,Ri=/^(?:a|area)$/i;function Tr(n){return(n.match(Le)||[]).join(\" \")}function an(n){return n.getAttribute&&n.getAttribute(\"class\")||\"\"}function Ii(n){return Array.isArray(n)?n:typeof n==\"string\"&&n.match(Le)||[]}a.fn.extend({prop:function(n,r){return qe(this,a.prop,n,r,arguments.length>1)},removeProp:function(n){return this.each((function(){delete this[a.propFix[n]||n]}))}}),a.extend({prop:function(n,r,o){var s,h,m=n.nodeType;if(m!==3&&m!==8&&m!==2)return m===1&&a.isXMLDoc(n)||(r=a.propFix[r]||r,h=a.propHooks[r]),o!==void 0?h&&\"set\"in h&&(s=h.set(n,o,r))!==void 0?s:n[r]=o:h&&\"get\"in h&&(s=h.get(n,r))!==null?s:n[r]},propHooks:{tabIndex:{get:function(n){var r=a.find.attr(n,\"tabindex\");return r?parseInt(r,10):nr.test(n.nodeName)||Ri.test(n.nodeName)&&n.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),p.optSelected||(a.propHooks.selected={get:function(n){var r=n.parentNode;return r&&r.parentNode&&r.parentNode.selectedIndex,null},set:function(n){var r=n.parentNode;r&&(r.selectedIndex,r.parentNode&&r.parentNode.selectedIndex)}}),a.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){a.propFix[this.toLowerCase()]=this})),a.fn.extend({addClass:function(n){var r,o,s,h,m,x;return c(n)?this.each((function(U){a(this).addClass(n.call(this,U,an(this)))})):(r=Ii(n)).length?this.each((function(){if(s=an(this),o=this.nodeType===1&&\" \"+Tr(s)+\" \"){for(m=0;m<r.length;m++)h=r[m],o.indexOf(\" \"+h+\" \")<0&&(o+=h+\" \");x=Tr(o),s!==x&&this.setAttribute(\"class\",x)}})):this},removeClass:function(n){var r,o,s,h,m,x;return c(n)?this.each((function(U){a(this).removeClass(n.call(this,U,an(this)))})):arguments.length?(r=Ii(n)).length?this.each((function(){if(s=an(this),o=this.nodeType===1&&\" \"+Tr(s)+\" \"){for(m=0;m<r.length;m++)for(h=r[m];o.indexOf(\" \"+h+\" \")>-1;)o=o.replace(\" \"+h+\" \",\" \");x=Tr(o),s!==x&&this.setAttribute(\"class\",x)}})):this:this.attr(\"class\",\"\")},toggleClass:function(n,r){var o,s,h,m,x=typeof n,U=x===\"string\"||Array.isArray(n);return c(n)?this.each((function(M){a(this).toggleClass(n.call(this,M,an(this),r),r)})):typeof r==\"boolean\"&&U?r?this.addClass(n):this.removeClass(n):(o=Ii(n),this.each((function(){if(U)for(m=a(this),h=0;h<o.length;h++)s=o[h],m.hasClass(s)?m.removeClass(s):m.addClass(s);else n!==void 0&&x!==\"boolean\"||((s=an(this))&&Oe.set(this,\"__className__\",s),this.setAttribute&&this.setAttribute(\"class\",s||n===!1?\"\":Oe.get(this,\"__className__\")||\"\"))})))},hasClass:function(n){var r,o,s=0;for(r=\" \"+n+\" \";o=this[s++];)if(o.nodeType===1&&(\" \"+Tr(an(o))+\" \").indexOf(r)>-1)return!0;return!1}});var yo=/\\r/g;a.fn.extend({val:function(n){var r,o,s,h=this[0];return arguments.length?(s=c(n),this.each((function(m){var x;this.nodeType===1&&((x=s?n.call(this,m,a(this).val()):n)==null?x=\"\":typeof x==\"number\"?x+=\"\":Array.isArray(x)&&(x=a.map(x,(function(U){return U==null?\"\":U+\"\"}))),(r=a.valHooks[this.type]||a.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&r.set(this,x,\"value\")!==void 0||(this.value=x))}))):h?(r=a.valHooks[h.type]||a.valHooks[h.nodeName.toLowerCase()])&&\"get\"in r&&(o=r.get(h,\"value\"))!==void 0?o:typeof(o=h.value)==\"string\"?o.replace(yo,\"\"):o??\"\":void 0}}),a.extend({valHooks:{option:{get:function(n){var r=a.find.attr(n,\"value\");return r??Tr(a.text(n))}},select:{get:function(n){var r,o,s,h=n.options,m=n.selectedIndex,x=n.type===\"select-one\",U=x?null:[],M=x?m+1:h.length;for(s=m<0?M:x?m:0;s<M;s++)if(((o=h[s]).selected||s===m)&&!o.disabled&&(!o.parentNode.disabled||!Ae(o.parentNode,\"optgroup\"))){if(r=a(o).val(),x)return r;U.push(r)}return U},set:function(n,r){for(var o,s,h=n.options,m=a.makeArray(r),x=h.length;x--;)((s=h[x]).selected=a.inArray(a.valHooks.option.get(s),m)>-1)&&(o=!0);return o||(n.selectedIndex=-1),m}}}}),a.each([\"radio\",\"checkbox\"],(function(){a.valHooks[this]={set:function(n,r){if(Array.isArray(r))return n.checked=a.inArray(a(n).val(),r)>-1}},p.checkOn||(a.valHooks[this].get=function(n){return n.getAttribute(\"value\")===null?\"on\":n.value})})),p.focusin=\"onfocusin\"in q;var Qi=/^(?:focusinfocus|focusoutblur)$/,Ji=function(n){n.stopPropagation()};a.extend(a.event,{trigger:function(n,r,o,s){var h,m,x,U,M,X,te,ue,J=[o||v],Z=E.call(n,\"type\")?n.type:n,$e=E.call(n,\"namespace\")?n.namespace.split(\".\"):[];if(m=ue=x=o=o||v,o.nodeType!==3&&o.nodeType!==8&&!Qi.test(Z+a.event.triggered)&&(Z.indexOf(\".\")>-1&&($e=Z.split(\".\"),Z=$e.shift(),$e.sort()),M=Z.indexOf(\":\")<0&&\"on\"+Z,(n=n[a.expando]?n:new a.Event(Z,typeof n==\"object\"&&n)).isTrigger=s?2:3,n.namespace=$e.join(\".\"),n.rnamespace=n.namespace?new RegExp(\"(^|\\\\.)\"+$e.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,n.result=void 0,n.target||(n.target=o),r=r==null?[n]:a.makeArray(r,[n]),te=a.event.special[Z]||{},s||!te.trigger||te.trigger.apply(o,r)!==!1)){if(!s&&!te.noBubble&&!u(o)){for(U=te.delegateType||Z,Qi.test(U+Z)||(m=m.parentNode);m;m=m.parentNode)J.push(m),x=m;x===(o.ownerDocument||v)&&J.push(x.defaultView||x.parentWindow||q)}for(h=0;(m=J[h++])&&!n.isPropagationStopped();)ue=m,n.type=h>1?U:te.bindType||Z,(X=(Oe.get(m,\"events\")||Object.create(null))[n.type]&&Oe.get(m,\"handle\"))&&X.apply(m,r),(X=M&&m[M])&&X.apply&&Gt(m)&&(n.result=X.apply(m,r),n.result===!1&&n.preventDefault());return n.type=Z,s||n.isDefaultPrevented()||te._default&&te._default.apply(J.pop(),r)!==!1||!Gt(o)||M&&c(o[Z])&&!u(o)&&((x=o[M])&&(o[M]=null),a.event.triggered=Z,n.isPropagationStopped()&&ue.addEventListener(Z,Ji),o[Z](),n.isPropagationStopped()&&ue.removeEventListener(Z,Ji),a.event.triggered=void 0,x&&(o[M]=x)),n.result}},simulate:function(n,r,o){var s=a.extend(new a.Event,o,{type:n,isSimulated:!0});a.event.trigger(s,null,r)}}),a.fn.extend({trigger:function(n,r){return this.each((function(){a.event.trigger(n,r,this)}))},triggerHandler:function(n,r){var o=this[0];if(o)return a.event.trigger(n,r,o,!0)}}),p.focusin||a.each({focus:\"focusin\",blur:\"focusout\"},(function(n,r){var o=function(s){a.event.simulate(r,s.target,a.event.fix(s))};a.event.special[r]={setup:function(){var s=this.ownerDocument||this.document||this,h=Oe.access(s,r);h||s.addEventListener(n,o,!0),Oe.access(s,r,(h||0)+1)},teardown:function(){var s=this.ownerDocument||this.document||this,h=Oe.access(s,r)-1;h?Oe.access(s,r,h):(s.removeEventListener(n,o,!0),Oe.remove(s,r))}}}));var si=q.location,Zi={guid:Date.now()},An=/\\?/;a.parseXML=function(n){var r,o;if(!n||typeof n!=\"string\")return null;try{r=new q.DOMParser().parseFromString(n,\"text/xml\")}catch{}return o=r&&r.getElementsByTagName(\"parsererror\")[0],r&&!o||a.error(\"Invalid XML: \"+(o?a.map(o.childNodes,(function(s){return s.textContent})).join(`\n`):n)),r};var ia=/\\[\\]$/,In=/\\r?\\n/g,oa=/^(?:submit|button|image|reset|file)$/i,bo=/^(?:input|select|textarea|keygen)/i;function hr(n,r,o,s){var h;if(Array.isArray(r))a.each(r,(function(m,x){o||ia.test(n)?s(n,x):hr(n+\"[\"+(typeof x==\"object\"&&x!=null?m:\"\")+\"]\",x,o,s)}));else if(o||B(r)!==\"object\")s(n,r);else for(h in r)hr(n+\"[\"+h+\"]\",r[h],o,s)}a.param=function(n,r){var o,s=[],h=function(m,x){var U=c(x)?x():x;s[s.length]=encodeURIComponent(m)+\"=\"+encodeURIComponent(U??\"\")};if(n==null)return\"\";if(Array.isArray(n)||n.jquery&&!a.isPlainObject(n))a.each(n,(function(){h(this.name,this.value)}));else for(o in n)hr(o,n[o],r,h);return s.join(\"&\")},a.fn.extend({serialize:function(){return a.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var n=a.prop(this,\"elements\");return n?a.makeArray(n):this})).filter((function(){var n=this.type;return this.name&&!a(this).is(\":disabled\")&&bo.test(this.nodeName)&&!oa.test(n)&&(this.checked||!hn.test(n))})).map((function(n,r){var o=a(this).val();return o==null?null:Array.isArray(o)?a.map(o,(function(s){return{name:r.name,value:s.replace(In,`\\r\n`)}})):{name:r.name,value:o.replace(In,`\\r\n`)}})).get()}});var Li=/%20/g,eo=/#.*$/,Ut=/([?&])_=[^&]*/,Or=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,to=/^(?:GET|HEAD)$/,aa=/^\\/\\//,Pi={},no={},ro=\"*/\".concat(\"*\"),ui=v.createElement(\"a\");function Fr(n){return function(r,o){typeof r!=\"string\"&&(o=r,r=\"*\");var s,h=0,m=r.toLowerCase().match(Le)||[];if(c(o))for(;s=m[h++];)s[0]===\"+\"?(s=s.slice(1)||\"*\",(n[s]=n[s]||[]).unshift(o)):(n[s]=n[s]||[]).push(o)}}function wo(n,r,o,s){var h={},m=n===no;function x(U){var M;return h[U]=!0,a.each(n[U]||[],(function(X,te){var ue=te(r,o,s);return typeof ue!=\"string\"||m||h[ue]?m?!(M=ue):void 0:(r.dataTypes.unshift(ue),x(ue),!1)})),M}return x(r.dataTypes[0])||!h[\"*\"]&&x(\"*\")}function qi(n,r){var o,s,h=a.ajaxSettings.flatOptions||{};for(o in r)r[o]!==void 0&&((h[o]?n:s||(s={}))[o]=r[o]);return s&&a.extend(!0,n,s),n}ui.href=si.href,a.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:si.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(si.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":ro,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":a.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(n,r){return r?qi(qi(n,a.ajaxSettings),r):qi(a.ajaxSettings,n)},ajaxPrefilter:Fr(Pi),ajaxTransport:Fr(no),ajax:function(n,r){typeof n==\"object\"&&(r=n,n=void 0),r=r||{};var o,s,h,m,x,U,M,X,te,ue,J=a.ajaxSetup({},r),Z=J.context||J,$e=J.context&&(Z.nodeType||Z.jquery)?a(Z):a.event,Qe=a.Deferred(),je=a.Callbacks(\"once memory\"),Lt=J.statusCode||{},V={},ae={},ne=\"canceled\",se={readyState:0,getResponseHeader:function(De){var lt;if(M){if(!m)for(m={};lt=Or.exec(h);)m[lt[1].toLowerCase()+\" \"]=(m[lt[1].toLowerCase()+\" \"]||[]).concat(lt[2]);lt=m[De.toLowerCase()+\" \"]}return lt==null?null:lt.join(\", \")},getAllResponseHeaders:function(){return M?h:null},setRequestHeader:function(De,lt){return M==null&&(De=ae[De.toLowerCase()]=ae[De.toLowerCase()]||De,V[De]=lt),this},overrideMimeType:function(De){return M==null&&(J.mimeType=De),this},statusCode:function(De){var lt;if(De)if(M)se.always(De[se.status]);else for(lt in De)Lt[lt]=[Lt[lt],De[lt]];return this},abort:function(De){var lt=De||ne;return o&&o.abort(lt),He(0,lt),this}};if(Qe.promise(se),J.url=((n||J.url||si.href)+\"\").replace(aa,si.protocol+\"//\"),J.type=r.method||r.type||J.method||J.type,J.dataTypes=(J.dataType||\"*\").toLowerCase().match(Le)||[\"\"],J.crossDomain==null){U=v.createElement(\"a\");try{U.href=J.url,U.href=U.href,J.crossDomain=ui.protocol+\"//\"+ui.host!=U.protocol+\"//\"+U.host}catch{J.crossDomain=!0}}if(J.data&&J.processData&&typeof J.data!=\"string\"&&(J.data=a.param(J.data,J.traditional)),wo(Pi,J,r,se),M)return se;for(te in(X=a.event&&J.global)&&a.active++==0&&a.event.trigger(\"ajaxStart\"),J.type=J.type.toUpperCase(),J.hasContent=!to.test(J.type),s=J.url.replace(eo,\"\"),J.hasContent?J.data&&J.processData&&(J.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")===0&&(J.data=J.data.replace(Li,\"+\")):(ue=J.url.slice(s.length),J.data&&(J.processData||typeof J.data==\"string\")&&(s+=(An.test(s)?\"&\":\"?\")+J.data,delete J.data),J.cache===!1&&(s=s.replace(Ut,\"$1\"),ue=(An.test(s)?\"&\":\"?\")+\"_=\"+Zi.guid+++ue),J.url=s+ue),J.ifModified&&(a.lastModified[s]&&se.setRequestHeader(\"If-Modified-Since\",a.lastModified[s]),a.etag[s]&&se.setRequestHeader(\"If-None-Match\",a.etag[s])),(J.data&&J.hasContent&&J.contentType!==!1||r.contentType)&&se.setRequestHeader(\"Content-Type\",J.contentType),se.setRequestHeader(\"Accept\",J.dataTypes[0]&&J.accepts[J.dataTypes[0]]?J.accepts[J.dataTypes[0]]+(J.dataTypes[0]!==\"*\"?\", \"+ro+\"; q=0.01\":\"\"):J.accepts[\"*\"]),J.headers)se.setRequestHeader(te,J.headers[te]);if(J.beforeSend&&(J.beforeSend.call(Z,se,J)===!1||M))return se.abort();if(ne=\"abort\",je.add(J.complete),se.done(J.success),se.fail(J.error),o=wo(no,J,r,se)){if(se.readyState=1,X&&$e.trigger(\"ajaxSend\",[se,J]),M)return se;J.async&&J.timeout>0&&(x=q.setTimeout((function(){se.abort(\"timeout\")}),J.timeout));try{M=!1,o.send(V,He)}catch(De){if(M)throw De;He(-1,De)}}else He(-1,\"No Transport\");function He(De,lt,jn,Dt){var Sn,Br,ln,cn,li,fn=lt;M||(M=!0,x&&q.clearTimeout(x),o=void 0,h=Dt||\"\",se.readyState=De>0?4:0,Sn=De>=200&&De<300||De===304,jn&&(cn=(function(Pt,vn,ct){for(var dr,at,Tt,tn,Pn=Pt.contents,Xt=Pt.dataTypes;Xt[0]===\"*\";)Xt.shift(),dr===void 0&&(dr=Pt.mimeType||vn.getResponseHeader(\"Content-Type\"));if(dr){for(at in Pn)if(Pn[at]&&Pn[at].test(dr)){Xt.unshift(at);break}}if(Xt[0]in ct)Tt=Xt[0];else{for(at in ct){if(!Xt[0]||Pt.converters[at+\" \"+Xt[0]]){Tt=at;break}tn||(tn=at)}Tt=Tt||tn}if(Tt)return Tt!==Xt[0]&&Xt.unshift(Tt),ct[Tt]})(J,se,jn)),!Sn&&a.inArray(\"script\",J.dataTypes)>-1&&a.inArray(\"json\",J.dataTypes)<0&&(J.converters[\"text script\"]=function(){}),cn=(function(Pt,vn,ct,dr){var at,Tt,tn,Pn,Xt,mn={},qn=Pt.dataTypes.slice();if(qn[1])for(tn in Pt.converters)mn[tn.toLowerCase()]=Pt.converters[tn];for(Tt=qn.shift();Tt;)if(Pt.responseFields[Tt]&&(ct[Pt.responseFields[Tt]]=vn),!Xt&&dr&&Pt.dataFilter&&(vn=Pt.dataFilter(vn,Pt.dataType)),Xt=Tt,Tt=qn.shift()){if(Tt===\"*\")Tt=Xt;else if(Xt!==\"*\"&&Xt!==Tt){if(!(tn=mn[Xt+\" \"+Tt]||mn[\"* \"+Tt])){for(at in mn)if((Pn=at.split(\" \"))[1]===Tt&&(tn=mn[Xt+\" \"+Pn[0]]||mn[\"* \"+Pn[0]])){tn===!0?tn=mn[at]:mn[at]!==!0&&(Tt=Pn[0],qn.unshift(Pn[1]));break}}if(tn!==!0)if(tn&&Pt.throws)vn=tn(vn);else try{vn=tn(vn)}catch(Wr){return{state:\"parsererror\",error:tn?Wr:\"No conversion from \"+Xt+\" to \"+Tt}}}}return{state:\"success\",data:vn}})(J,cn,se,Sn),Sn?(J.ifModified&&((li=se.getResponseHeader(\"Last-Modified\"))&&(a.lastModified[s]=li),(li=se.getResponseHeader(\"etag\"))&&(a.etag[s]=li)),De===204||J.type===\"HEAD\"?fn=\"nocontent\":De===304?fn=\"notmodified\":(fn=cn.state,Br=cn.data,Sn=!(ln=cn.error))):(ln=fn,!De&&fn||(fn=\"error\",De<0&&(De=0))),se.status=De,se.statusText=(lt||fn)+\"\",Sn?Qe.resolveWith(Z,[Br,fn,se]):Qe.rejectWith(Z,[se,fn,ln]),se.statusCode(Lt),Lt=void 0,X&&$e.trigger(Sn?\"ajaxSuccess\":\"ajaxError\",[se,J,Sn?Br:ln]),je.fireWith(Z,[se,fn]),X&&($e.trigger(\"ajaxComplete\",[se,J]),--a.active||a.event.trigger(\"ajaxStop\")))}return se},getJSON:function(n,r,o){return a.get(n,r,o,\"json\")},getScript:function(n,r){return a.get(n,void 0,r,\"script\")}}),a.each([\"get\",\"post\"],(function(n,r){a[r]=function(o,s,h,m){return c(s)&&(m=m||h,h=s,s=void 0),a.ajax(a.extend({url:o,type:r,dataType:m,data:s,success:h},a.isPlainObject(o)&&o))}})),a.ajaxPrefilter((function(n){var r;for(r in n.headers)r.toLowerCase()===\"content-type\"&&(n.contentType=n.headers[r]||\"\")})),a._evalUrl=function(n,r,o){return a.ajax({url:n,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(s){a.globalEval(s,r,o)}})},a.fn.extend({wrapAll:function(n){var r;return this[0]&&(c(n)&&(n=n.call(this[0])),r=a(n,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&r.insertBefore(this[0]),r.map((function(){for(var o=this;o.firstElementChild;)o=o.firstElementChild;return o})).append(this)),this},wrapInner:function(n){return c(n)?this.each((function(r){a(this).wrapInner(n.call(this,r))})):this.each((function(){var r=a(this),o=r.contents();o.length?o.wrapAll(n):r.append(n)}))},wrap:function(n){var r=c(n);return this.each((function(o){a(this).wrapAll(r?n.call(this,o):n)}))},unwrap:function(n){return this.parent(n).not(\"body\").each((function(){a(this).replaceWith(this.childNodes)})),this}}),a.expr.pseudos.hidden=function(n){return!a.expr.pseudos.visible(n)},a.expr.pseudos.visible=function(n){return!!(n.offsetWidth||n.offsetHeight||n.getClientRects().length)},a.ajaxSettings.xhr=function(){try{return new q.XMLHttpRequest}catch{}};var _o={0:200,1223:204},zr=a.ajaxSettings.xhr();p.cors=!!zr&&\"withCredentials\"in zr,p.ajax=zr=!!zr,a.ajaxTransport((function(n){var r,o;if(p.cors||zr&&!n.crossDomain)return{send:function(s,h){var m,x=n.xhr();if(x.open(n.type,n.url,n.async,n.username,n.password),n.xhrFields)for(m in n.xhrFields)x[m]=n.xhrFields[m];for(m in n.mimeType&&x.overrideMimeType&&x.overrideMimeType(n.mimeType),n.crossDomain||s[\"X-Requested-With\"]||(s[\"X-Requested-With\"]=\"XMLHttpRequest\"),s)x.setRequestHeader(m,s[m]);r=function(U){return function(){r&&(r=o=x.onload=x.onerror=x.onabort=x.ontimeout=x.onreadystatechange=null,U===\"abort\"?x.abort():U===\"error\"?typeof x.status!=\"number\"?h(0,\"error\"):h(x.status,x.statusText):h(_o[x.status]||x.status,x.statusText,(x.responseType||\"text\")!==\"text\"||typeof x.responseText!=\"string\"?{binary:x.response}:{text:x.responseText},x.getAllResponseHeaders()))}},x.onload=r(),o=x.onerror=x.ontimeout=r(\"error\"),x.onabort!==void 0?x.onabort=o:x.onreadystatechange=function(){x.readyState===4&&q.setTimeout((function(){r&&o()}))},r=r(\"abort\");try{x.send(n.hasContent&&n.data||null)}catch(U){if(r)throw U}},abort:function(){r&&r()}}})),a.ajaxPrefilter((function(n){n.crossDomain&&(n.contents.script=!1)})),a.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(n){return a.globalEval(n),n}}}),a.ajaxPrefilter(\"script\",(function(n){n.cache===void 0&&(n.cache=!1),n.crossDomain&&(n.type=\"GET\")})),a.ajaxTransport(\"script\",(function(n){var r,o;if(n.crossDomain||n.scriptAttrs)return{send:function(s,h){r=a(\"<script>\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",o=function(m){r.remove(),o=null,m&&h(m.type===\"error\"?404:200,m.type)}),v.head.appendChild(r[0])},abort:function(){o&&o()}}}));var Hi,io=[],bi=/(=)\\?(?=&|$)|\\?\\?/;a.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var n=io.pop()||a.expando+\"_\"+Zi.guid++;return this[n]=!0,n}}),a.ajaxPrefilter(\"json jsonp\",(function(n,r,o){var s,h,m,x=n.jsonp!==!1&&(bi.test(n.url)?\"url\":typeof n.data==\"string\"&&(n.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")===0&&bi.test(n.data)&&\"data\");if(x||n.dataTypes[0]===\"jsonp\")return s=n.jsonpCallback=c(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,x?n[x]=n[x].replace(bi,\"$1\"+s):n.jsonp!==!1&&(n.url+=(An.test(n.url)?\"&\":\"?\")+n.jsonp+\"=\"+s),n.converters[\"script json\"]=function(){return m||a.error(s+\" was not called\"),m[0]},n.dataTypes[0]=\"json\",h=q[s],q[s]=function(){m=arguments},o.always((function(){h===void 0?a(q).removeProp(s):q[s]=h,n[s]&&(n.jsonpCallback=r.jsonpCallback,io.push(s)),m&&c(h)&&h(m[0]),m=h=void 0})),\"script\"})),p.createHTMLDocument=((Hi=v.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",Hi.childNodes.length===2),a.parseHTML=function(n,r,o){return typeof n!=\"string\"?[]:(typeof r==\"boolean\"&&(o=r,r=!1),r||(p.createHTMLDocument?((s=(r=v.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=v.location.href,r.head.appendChild(s)):r=v),m=!o&&[],(h=be.exec(n))?[r.createElement(h[1])]:(h=K([n],r,m),m&&m.length&&a(m).remove(),a.merge([],h.childNodes)));var s,h,m},a.fn.load=function(n,r,o){var s,h,m,x=this,U=n.indexOf(\" \");return U>-1&&(s=Tr(n.slice(U)),n=n.slice(0,U)),c(r)?(o=r,r=void 0):r&&typeof r==\"object\"&&(h=\"POST\"),x.length>0&&a.ajax({url:n,type:h||\"GET\",dataType:\"html\",data:r}).done((function(M){m=arguments,x.html(s?a(\"<div>\").append(a.parseHTML(M)).find(s):M)})).always(o&&function(M,X){x.each((function(){o.apply(this,m||[M.responseText,X,M])}))}),this},a.expr.pseudos.animated=function(n){return a.grep(a.timers,(function(r){return n===r.elem})).length},a.offset={setOffset:function(n,r,o){var s,h,m,x,U,M,X=a.css(n,\"position\"),te=a(n),ue={};X===\"static\"&&(n.style.position=\"relative\"),U=te.offset(),m=a.css(n,\"top\"),M=a.css(n,\"left\"),(X===\"absolute\"||X===\"fixed\")&&(m+M).indexOf(\"auto\")>-1?(x=(s=te.position()).top,h=s.left):(x=parseFloat(m)||0,h=parseFloat(M)||0),c(r)&&(r=r.call(n,o,a.extend({},U))),r.top!=null&&(ue.top=r.top-U.top+x),r.left!=null&&(ue.left=r.left-U.left+h),\"using\"in r?r.using.call(n,ue):te.css(ue)}},a.fn.extend({offset:function(n){if(arguments.length)return n===void 0?this:this.each((function(h){a.offset.setOffset(this,n,h)}));var r,o,s=this[0];return s?s.getClientRects().length?(r=s.getBoundingClientRect(),o=s.ownerDocument.defaultView,{top:r.top+o.pageYOffset,left:r.left+o.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var n,r,o,s=this[0],h={top:0,left:0};if(a.css(s,\"position\")===\"fixed\")r=s.getBoundingClientRect();else{for(r=this.offset(),o=s.ownerDocument,n=s.offsetParent||o.documentElement;n&&(n===o.body||n===o.documentElement)&&a.css(n,\"position\")===\"static\";)n=n.parentNode;n&&n!==s&&n.nodeType===1&&((h=a(n).offset()).top+=a.css(n,\"borderTopWidth\",!0),h.left+=a.css(n,\"borderLeftWidth\",!0))}return{top:r.top-h.top-a.css(s,\"marginTop\",!0),left:r.left-h.left-a.css(s,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var n=this.offsetParent;n&&a.css(n,\"position\")===\"static\";)n=n.offsetParent;return n||kn}))}}),a.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(n,r){var o=r===\"pageYOffset\";a.fn[n]=function(s){return qe(this,(function(h,m,x){var U;if(u(h)?U=h:h.nodeType===9&&(U=h.defaultView),x===void 0)return U?U[r]:h[m];U?U.scrollTo(o?U.pageXOffset:x,o?x:U.pageYOffset):h[m]=x}),n,s,arguments.length)}})),a.each([\"top\",\"left\"],(function(n,r){a.cssHooks[r]=oi(p.pixelPosition,(function(o,s){if(s)return s=Tn(o,r),Dr.test(s)?a(o).position()[r]+\"px\":s}))})),a.each({Height:\"height\",Width:\"width\"},(function(n,r){a.each({padding:\"inner\"+n,content:r,\"\":\"outer\"+n},(function(o,s){a.fn[s]=function(h,m){var x=arguments.length&&(o||typeof h!=\"boolean\"),U=o||(h===!0||m===!0?\"margin\":\"border\");return qe(this,(function(M,X,te){var ue;return u(M)?s.indexOf(\"outer\")===0?M[\"inner\"+n]:M.document.documentElement[\"client\"+n]:M.nodeType===9?(ue=M.documentElement,Math.max(M.body[\"scroll\"+n],ue[\"scroll\"+n],M.body[\"offset\"+n],ue[\"offset\"+n],ue[\"client\"+n])):te===void 0?a.css(M,X,U):a.style(M,X,te,U)}),r,x?h:void 0,x)}}))})),a.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],(function(n,r){a.fn[r]=function(o){return this.on(r,o)}})),a.fn.extend({bind:function(n,r,o){return this.on(n,null,r,o)},unbind:function(n,r){return this.off(n,null,r)},delegate:function(n,r,o,s){return this.on(r,n,o,s)},undelegate:function(n,r,o){return arguments.length===1?this.off(n,\"**\"):this.off(r,n||\"**\",o)},hover:function(n,r){return this.mouseenter(n).mouseleave(r||n)}}),a.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(n,r){a.fn[r]=function(o,s){return arguments.length>0?this.on(r,null,o,s):this.trigger(r)}}));var oo=/^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;a.proxy=function(n,r){var o,s,h;if(typeof r==\"string\"&&(o=n[r],r=n,n=o),c(n))return s=S.call(arguments,2),h=function(){return n.apply(r||this,s.concat(S.call(arguments)))},h.guid=n.guid=n.guid||a.guid++,h},a.holdReady=function(n){n?a.readyWait++:a.ready(!0)},a.isArray=Array.isArray,a.parseJSON=JSON.parse,a.nodeName=Ae,a.isFunction=c,a.isWindow=u,a.camelCase=Ct,a.type=B,a.now=Date.now,a.isNumeric=function(n){var r=a.type(n);return(r===\"number\"||r===\"string\")&&!isNaN(n-parseFloat(n))},a.trim=function(n){return n==null?\"\":(n+\"\").replace(oo,\"$1\")},(Y=(function(){return a}).apply(L,[]))===void 0||(b.exports=Y);var xo=q.jQuery,Ln=q.$;return a.noConflict=function(n){return q.$===a&&(q.$=Ln),n&&q.jQuery===a&&(q.jQuery=xo),a},f===void 0&&(q.jQuery=q.$=a),a}))},486:function(b,L,Y){var q;b=Y.nmd(b),(function(){var f,_=\"Expected a function\",j=\"__lodash_hash_undefined__\",S=\"__lodash_placeholder__\",k=16,P=32,N=64,w=128,ee=256,E=1/0,D=9007199254740991,y=NaN,p=4294967295,c=[[\"ary\",w],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",k],[\"flip\",512],[\"partial\",P],[\"partialRight\",N],[\"rearg\",ee]],u=\"[object Arguments]\",v=\"[object Array]\",T=\"[object Boolean]\",H=\"[object Date]\",B=\"[object Error]\",le=\"[object Function]\",a=\"[object GeneratorFunction]\",Ee=\"[object Map]\",Ge=\"[object Number]\",ve=\"[object Object]\",Re=\"[object Promise]\",ce=\"[object RegExp]\",Ae=\"[object Set]\",be=\"[object String]\",rt=\"[object Symbol]\",dt=\"[object WeakMap]\",ie=\"[object ArrayBuffer]\",oe=\"[object DataView]\",Pe=\"[object Float32Array]\",it=\"[object Float64Array]\",Le=\"[object Int8Array]\",Ve=\"[object Int16Array]\",At=\"[object Int32Array]\",Mt=\"[object Uint8Array]\",ze=\"[object Uint8ClampedArray]\",re=\"[object Uint16Array]\",Fe=\"[object Uint32Array]\",qe=/\\b__p \\+= '';/g,ot=/\\b(__p \\+=) '' \\+/g,bt=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,gt=/&(?:amp|lt|gt|quot|#39);/g,Ct=/[&<>\"']/g,Gt=RegExp(gt.source),xn=RegExp(Ct.source),Oe=/<%-([\\s\\S]+?)%>/g,on=/<%([\\s\\S]+?)%>/g,Hr=/<%=([\\s\\S]+?)%>/g,Fn=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Jn=/^\\w*$/,It=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,Rn=/[\\\\^$.*+?()[\\]{}|]/g,Ke=RegExp(Rn.source),kn=/^\\s+/,_t=/\\s/,Zn=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,Qt=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,wr=/,? & /,sr=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,zn=/[()=,{}\\[\\]\\/\\s]/,un=/\\\\(\\\\)?/g,Vt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ur=/\\w*$/,hn=/^[-+]0x[0-9a-f]+$/i,lr=/^0b[01]+$/i,er=/^\\[object .+?Constructor\\]$/,qt=/^0o[0-7]+$/i,Kt=/^(?:0|[1-9]\\d*)$/,O=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,F=/($^)/,K=/['\\n\\r\\u2028\\u2029\\\\]/g,we=\"\\\\ud800-\\\\udfff\",ke=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Ne=\"\\\\u2700-\\\\u27bf\",vt=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",mt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",ut=\"\\\\ufe0e\\\\ufe0f\",Dn=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",dn=\"['’]\",Jt=\"[\"+we+\"]\",Mr=\"[\"+Dn+\"]\",ti=\"[\"+ke+\"]\",vi=\"\\\\d+\",ni=\"[\"+Ne+\"]\",Di=\"[\"+vt+\"]\",cr=\"[^\"+we+Dn+vi+Ne+vt+mt+\"]\",Ur=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Dr=\"[^\"+we+\"]\",_r=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",fr=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",pr=\"[\"+mt+\"]\",ri=\"\\\\u200d\",ii=\"(?:\"+Di+\"|\"+cr+\")\",ji=\"(?:\"+pr+\"|\"+cr+\")\",Tn=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",oi=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",tr=\"(?:\"+ti+\"|\"+Ur+\")?\",Zt=\"[\"+ut+\"]?\",mi=Zt+tr+(\"(?:\"+ri+\"(?:\"+[Dr,_r,fr].join(\"|\")+\")\"+Zt+tr+\")*\"),Bn=\"(?:\"+[ni,_r,fr].join(\"|\")+\")\"+mi,jr=\"(?:\"+[Dr+ti+\"?\",ti,_r,fr,Jt].join(\"|\")+\")\",Oi=RegExp(dn,\"g\"),Wn=RegExp(ti,\"g\"),Gn=RegExp(Ur+\"(?=\"+Ur+\")|\"+jr+mi,\"g\"),yi=RegExp([pr+\"?\"+Di+\"+\"+Tn+\"(?=\"+[Mr,pr,\"$\"].join(\"|\")+\")\",ji+\"+\"+oi+\"(?=\"+[Mr,pr+ii,\"$\"].join(\"|\")+\")\",pr+\"?\"+ii+\"+\"+Tn,pr+\"+\"+oi,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",vi,Bn].join(\"|\"),\"g\"),Ni=RegExp(\"[\"+ri+we+ke+ut+\"]\"),gn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,xr=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ai=-1,St={};St[Pe]=St[it]=St[Le]=St[Ve]=St[At]=St[Mt]=St[ze]=St[re]=St[Fe]=!0,St[u]=St[v]=St[ie]=St[T]=St[oe]=St[H]=St[B]=St[le]=St[Ee]=St[Ge]=St[ve]=St[ce]=St[Ae]=St[be]=St[dt]=!1;var Te={};Te[u]=Te[v]=Te[ie]=Te[oe]=Te[T]=Te[H]=Te[Pe]=Te[it]=Te[Le]=Te[Ve]=Te[At]=Te[Ee]=Te[Ge]=Te[ve]=Te[ce]=Te[Ae]=Te[be]=Te[rt]=Te[Mt]=Te[ze]=Te[re]=Te[Fe]=!0,Te[B]=Te[le]=Te[dt]=!1;var Be={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},xt=parseFloat,Ye=parseInt,Cn=typeof Y.g==\"object\"&&Y.g&&Y.g.Object===Object&&Y.g,en=typeof self==\"object\"&&self&&self.Object===Object&&self,Ft=Cn||en||Function(\"return this\")(),Vn=L&&!L.nodeType&&L,nr=Vn&&b&&!b.nodeType&&b,Ri=nr&&nr.exports===Vn,Tr=Ri&&Cn.process,an=(function(){try{var V=nr&&nr.require&&nr.require(\"util\").types;return V||Tr&&Tr.binding&&Tr.binding(\"util\")}catch{}})(),Ii=an&&an.isArrayBuffer,yo=an&&an.isDate,Qi=an&&an.isMap,Ji=an&&an.isRegExp,si=an&&an.isSet,Zi=an&&an.isTypedArray;function An(V,ae,ne){switch(ne.length){case 0:return V.call(ae);case 1:return V.call(ae,ne[0]);case 2:return V.call(ae,ne[0],ne[1]);case 3:return V.call(ae,ne[0],ne[1],ne[2])}return V.apply(ae,ne)}function ia(V,ae,ne,se){for(var He=-1,De=V==null?0:V.length;++He<De;){var lt=V[He];ae(se,lt,ne(lt),V)}return se}function In(V,ae){for(var ne=-1,se=V==null?0:V.length;++ne<se&&ae(V[ne],ne,V)!==!1;);return V}function oa(V,ae){for(var ne=V==null?0:V.length;ne--&&ae(V[ne],ne,V)!==!1;);return V}function bo(V,ae){for(var ne=-1,se=V==null?0:V.length;++ne<se;)if(!ae(V[ne],ne,V))return!1;return!0}function hr(V,ae){for(var ne=-1,se=V==null?0:V.length,He=0,De=[];++ne<se;){var lt=V[ne];ae(lt,ne,V)&&(De[He++]=lt)}return De}function Li(V,ae){return!!(V!=null&&V.length)&&Fr(V,ae,0)>-1}function eo(V,ae,ne){for(var se=-1,He=V==null?0:V.length;++se<He;)if(ne(ae,V[se]))return!0;return!1}function Ut(V,ae){for(var ne=-1,se=V==null?0:V.length,He=Array(se);++ne<se;)He[ne]=ae(V[ne],ne,V);return He}function Or(V,ae){for(var ne=-1,se=ae.length,He=V.length;++ne<se;)V[He+ne]=ae[ne];return V}function to(V,ae,ne,se){var He=-1,De=V==null?0:V.length;for(se&&De&&(ne=V[++He]);++He<De;)ne=ae(ne,V[He],He,V);return ne}function aa(V,ae,ne,se){var He=V==null?0:V.length;for(se&&He&&(ne=V[--He]);He--;)ne=ae(ne,V[He],He,V);return ne}function Pi(V,ae){for(var ne=-1,se=V==null?0:V.length;++ne<se;)if(ae(V[ne],ne,V))return!0;return!1}var no=zr(\"length\");function ro(V,ae,ne){var se;return ne(V,(function(He,De,lt){if(ae(He,De,lt))return se=De,!1})),se}function ui(V,ae,ne,se){for(var He=V.length,De=ne+(se?1:-1);se?De--:++De<He;)if(ae(V[De],De,V))return De;return-1}function Fr(V,ae,ne){return ae==ae?(function(se,He,De){for(var lt=De-1,jn=se.length;++lt<jn;)if(se[lt]===He)return lt;return-1})(V,ae,ne):ui(V,qi,ne)}function wo(V,ae,ne,se){for(var He=ne-1,De=V.length;++He<De;)if(se(V[He],ae))return He;return-1}function qi(V){return V!=V}function _o(V,ae){var ne=V==null?0:V.length;return ne?bi(V,ae)/ne:y}function zr(V){return function(ae){return ae==null?f:ae[V]}}function Hi(V){return function(ae){return V==null?f:V[ae]}}function io(V,ae,ne,se,He){return He(V,(function(De,lt,jn){ne=se?(se=!1,De):ae(ne,De,lt,jn)})),ne}function bi(V,ae){for(var ne,se=-1,He=V.length;++se<He;){var De=ae(V[se]);De!==f&&(ne=ne===f?De:ne+De)}return ne}function oo(V,ae){for(var ne=-1,se=Array(V);++ne<V;)se[ne]=ae(ne);return se}function xo(V){return V&&V.slice(0,Qe(V)+1).replace(kn,\"\")}function Ln(V){return function(ae){return V(ae)}}function n(V,ae){return Ut(ae,(function(ne){return V[ne]}))}function r(V,ae){return V.has(ae)}function o(V,ae){for(var ne=-1,se=V.length;++ne<se&&Fr(ae,V[ne],0)>-1;);return ne}function s(V,ae){for(var ne=V.length;ne--&&Fr(ae,V[ne],0)>-1;);return ne}var h=Hi({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),m=Hi({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function x(V){return\"\\\\\"+Be[V]}function U(V){return Ni.test(V)}function M(V){var ae=-1,ne=Array(V.size);return V.forEach((function(se,He){ne[++ae]=[He,se]})),ne}function X(V,ae){return function(ne){return V(ae(ne))}}function te(V,ae){for(var ne=-1,se=V.length,He=0,De=[];++ne<se;){var lt=V[ne];lt!==ae&&lt!==S||(V[ne]=S,De[He++]=ne)}return De}function ue(V){var ae=-1,ne=Array(V.size);return V.forEach((function(se){ne[++ae]=se})),ne}function J(V){var ae=-1,ne=Array(V.size);return V.forEach((function(se){ne[++ae]=[se,se]})),ne}function Z(V){return U(V)?(function(ae){for(var ne=Gn.lastIndex=0;Gn.test(ae);)++ne;return ne})(V):no(V)}function $e(V){return U(V)?(function(ae){return ae.match(Gn)||[]})(V):(function(ae){return ae.split(\"\")})(V)}function Qe(V){for(var ae=V.length;ae--&&_t.test(V.charAt(ae)););return ae}var je=Hi({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),Lt=(function V(ae){var ne,se=(ae=ae==null?Ft:Lt.defaults(Ft.Object(),ae,Lt.pick(Ft,xr))).Array,He=ae.Date,De=ae.Error,lt=ae.Function,jn=ae.Math,Dt=ae.Object,Sn=ae.RegExp,Br=ae.String,ln=ae.TypeError,cn=se.prototype,li=lt.prototype,fn=Dt.prototype,Pt=ae[\"__core-js_shared__\"],vn=li.toString,ct=fn.hasOwnProperty,dr=0,at=(ne=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+ne:\"\",Tt=fn.toString,tn=vn.call(Dt),Pn=Ft._,Xt=Sn(\"^\"+vn.call(ct).replace(Rn,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),mn=Ri?ae.Buffer:f,qn=ae.Symbol,Wr=ae.Uint8Array,To=mn?mn.allocUnsafe:f,Mi=X(Dt.getPrototypeOf,Dt),Co=Dt.create,wi=fn.propertyIsEnumerable,Ui=cn.splice,Ao=qn?qn.isConcatSpreadable:f,_i=qn?qn.iterator:f,rr=qn?qn.toStringTag:f,Fi=(function(){try{var e=Si(Dt,\"defineProperty\");return e({},\"\",{}),e}catch{}})(),ao=ae.clearTimeout!==Ft.clearTimeout&&ae.clearTimeout,Cr=He&&He.now!==Ft.Date.now&&He.now,Ar=ae.setTimeout!==Ft.setTimeout&&ae.setTimeout,xi=jn.ceil,Ti=jn.floor,zi=Dt.getOwnPropertySymbols,sa=mn?mn.isBuffer:f,jt=ae.isFinite,Bi=cn.join,ir=X(Dt.keys,Dt),$t=jn.max,sn=jn.min,So=He.now,ua=ae.parseInt,$o=jn.random,Eo=cn.reverse,Sr=Si(ae,\"DataView\"),Gr=Si(ae,\"Map\"),Wi=Si(ae,\"Promise\"),$r=Si(ae,\"Set\"),Nr=Si(ae,\"WeakMap\"),Vr=Si(Dt,\"create\"),Kr=Nr&&new Nr,Rr={},so=$i(Sr),C=$i(Gr),R=$i(Wi),W=$i($r),fe=$i(Nr),G=qn?qn.prototype:f,he=G?G.valueOf:f,me=G?G.toString:f;function d(e){if(Yt(e)&&!pt(e)&&!(e instanceof _e)){if(e instanceof Ue)return e;if(ct.call(e,\"__wrapped__\"))return Zs(e)}return new Ue(e)}var Ce=(function(){function e(){}return function(t){if(!Wt(t))return{};if(Co)return Co(t);e.prototype=t;var i=new e;return e.prototype=f,i}})();function Ze(){}function Ue(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=f}function _e(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function ft(e){var t=-1,i=e==null?0:e.length;for(this.clear();++t<i;){var l=e[t];this.set(l[0],l[1])}}function kt(e){var t=-1,i=e==null?0:e.length;for(this.clear();++t<i;){var l=e[t];this.set(l[0],l[1])}}function Xe(e){var t=-1,i=e==null?0:e.length;for(this.clear();++t<i;){var l=e[t];this.set(l[0],l[1])}}function Ht(e){var t=-1,i=e==null?0:e.length;for(this.__data__=new Xe;++t<i;)this.add(e[t])}function Ot(e){var t=this.__data__=new kt(e);this.size=t.size}function yn(e,t){var i=pt(e),l=!i&&Ei(e),g=!i&&!l&&di(e),A=!i&&!l&&!g&&Xi(e),I=i||l||g||A,z=I?oo(e.length,Br):[],Q=z.length;for(var de in e)!t&&!ct.call(e,de)||I&&(de==\"length\"||g&&(de==\"offset\"||de==\"parent\")||A&&(de==\"buffer\"||de==\"byteLength\"||de==\"byteOffset\")||Jr(de,Q))||z.push(de);return z}function Nt(e){var t=e.length;return t?e[ya(0,t-1)]:f}function gr(e,t){return Fo(Kn(e),Ci(t,0,e.length))}function bn(e){return Fo(Kn(e))}function Bt(e,t,i){(i!==f&&!kr(e[t],i)||i===f&&!(t in e))&&Er(e,t,i)}function $n(e,t,i){var l=e[t];ct.call(e,t)&&kr(l,i)&&(i!==f||t in e)||Er(e,t,i)}function Xr(e,t){for(var i=e.length;i--;)if(kr(e[i][0],t))return i;return-1}function ko(e,t,i,l){return ci(e,(function(g,A,I){t(l,g,i(g),I)})),l}function uo(e,t){return e&&Lr(t,wn(t),e)}function Er(e,t,i){t==\"__proto__\"&&Fi?Fi(e,t,{configurable:!0,enumerable:!0,value:i,writable:!0}):e[t]=i}function la(e,t){for(var i=-1,l=t.length,g=se(l),A=e==null;++i<l;)g[i]=A?f:za(e,t[i]);return g}function Ci(e,t,i){return e==e&&(i!==f&&(e=e<=i?e:i),t!==f&&(e=e>=t?e:t)),e}function vr(e,t,i,l,g,A){var I,z=1&t,Q=2&t,de=4&t;if(i&&(I=g?i(e,l,g,A):i(e)),I!==f)return I;if(!Wt(e))return e;var pe=pt(e);if(pe){if(I=(function(ge){var xe=ge.length,tt=new ge.constructor(xe);return xe&&typeof ge[0]==\"string\"&&ct.call(ge,\"index\")&&(tt.index=ge.index,tt.input=ge.input),tt})(e),!z)return Kn(e,I)}else{var ye=On(e),Ie=ye==le||ye==a;if(di(e))return As(e,z);if(ye==ve||ye==u||Ie&&!g){if(I=Q||Ie?{}:Bs(e),!z)return Q?(function(ge,xe){return Lr(ge,Fs(ge),xe)})(e,(function(ge,xe){return ge&&Lr(xe,Yn(xe),ge)})(I,e)):(function(ge,xe){return Lr(ge,Oa(ge),xe)})(e,uo(I,e))}else{if(!Te[ye])return g?e:{};I=(function(ge,xe,tt){var Se=ge.constructor;switch(xe){case ie:return Aa(ge);case T:case H:return new Se(+ge);case oe:return(function(st,Et){var We=Et?Aa(st.buffer):st.buffer;return new st.constructor(We,st.byteOffset,st.byteLength)})(ge,tt);case Pe:case it:case Le:case Ve:case At:case Mt:case ze:case re:case Fe:return Ss(ge,tt);case Ee:return new Se;case Ge:case be:return new Se(ge);case ce:return(function(st){var Et=new st.constructor(st.source,ur.exec(st));return Et.lastIndex=st.lastIndex,Et})(ge);case Ae:return new Se;case rt:return ht=ge,he?Dt(he.call(ht)):{}}var ht})(e,ye,z)}}A||(A=new Ot);var Me=A.get(e);if(Me)return Me;A.set(e,I),mu(e)?e.forEach((function(ge){I.add(vr(ge,t,i,ge,e,A))})):gu(e)&&e.forEach((function(ge,xe){I.set(xe,vr(ge,t,i,xe,e,A))}));var Je=pe?f:(de?Q?ka:Ea:Q?Yn:wn)(e);return In(Je||e,(function(ge,xe){Je&&(ge=e[xe=ge]),$n(I,xe,vr(ge,t,i,xe,e,A))})),I}function ns(e,t,i){var l=i.length;if(e==null)return!l;for(e=Dt(e);l--;){var g=i[l],A=t[g],I=e[g];if(I===f&&!(g in e)||!A(I))return!1}return!0}function rs(e,t,i){if(typeof e!=\"function\")throw new ln(_);return vo((function(){e.apply(f,i)}),t)}function lo(e,t,i,l){var g=-1,A=Li,I=!0,z=e.length,Q=[],de=t.length;if(!z)return Q;i&&(t=Ut(t,Ln(i))),l?(A=eo,I=!1):t.length>=200&&(A=r,I=!1,t=new Ht(t));e:for(;++g<z;){var pe=e[g],ye=i==null?pe:i(pe);if(pe=l||pe!==0?pe:0,I&&ye==ye){for(var Ie=de;Ie--;)if(t[Ie]===ye)continue e;Q.push(pe)}else A(t,ye,l)||Q.push(pe)}return Q}d.templateSettings={escape:Oe,evaluate:on,interpolate:Hr,variable:\"\",imports:{_:d}},d.prototype=Ze.prototype,d.prototype.constructor=d,Ue.prototype=Ce(Ze.prototype),Ue.prototype.constructor=Ue,_e.prototype=Ce(Ze.prototype),_e.prototype.constructor=_e,ft.prototype.clear=function(){this.__data__=Vr?Vr(null):{},this.size=0},ft.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},ft.prototype.get=function(e){var t=this.__data__;if(Vr){var i=t[e];return i===j?f:i}return ct.call(t,e)?t[e]:f},ft.prototype.has=function(e){var t=this.__data__;return Vr?t[e]!==f:ct.call(t,e)},ft.prototype.set=function(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=Vr&&t===f?j:t,this},kt.prototype.clear=function(){this.__data__=[],this.size=0},kt.prototype.delete=function(e){var t=this.__data__,i=Xr(t,e);return!(i<0)&&(i==t.length-1?t.pop():Ui.call(t,i,1),--this.size,!0)},kt.prototype.get=function(e){var t=this.__data__,i=Xr(t,e);return i<0?f:t[i][1]},kt.prototype.has=function(e){return Xr(this.__data__,e)>-1},kt.prototype.set=function(e,t){var i=this.__data__,l=Xr(i,e);return l<0?(++this.size,i.push([e,t])):i[l][1]=t,this},Xe.prototype.clear=function(){this.size=0,this.__data__={hash:new ft,map:new(Gr||kt),string:new ft}},Xe.prototype.delete=function(e){var t=Uo(this,e).delete(e);return this.size-=t?1:0,t},Xe.prototype.get=function(e){return Uo(this,e).get(e)},Xe.prototype.has=function(e){return Uo(this,e).has(e)},Xe.prototype.set=function(e,t){var i=Uo(this,e),l=i.size;return i.set(e,t),this.size+=i.size==l?0:1,this},Ht.prototype.add=Ht.prototype.push=function(e){return this.__data__.set(e,j),this},Ht.prototype.has=function(e){return this.__data__.has(e)},Ot.prototype.clear=function(){this.__data__=new kt,this.size=0},Ot.prototype.delete=function(e){var t=this.__data__,i=t.delete(e);return this.size=t.size,i},Ot.prototype.get=function(e){return this.__data__.get(e)},Ot.prototype.has=function(e){return this.__data__.has(e)},Ot.prototype.set=function(e,t){var i=this.__data__;if(i instanceof kt){var l=i.__data__;if(!Gr||l.length<199)return l.push([e,t]),this.size=++i.size,this;i=this.__data__=new Xe(l)}return i.set(e,t),this.size=i.size,this};var ci=Ds(Ir),is=Ds(fa,!0);function Iu(e,t){var i=!0;return ci(e,(function(l,g,A){return i=!!t(l,g,A)})),i}function Do(e,t,i){for(var l=-1,g=e.length;++l<g;){var A=e[l],I=t(A);if(I!=null&&(z===f?I==I&&!ar(I):i(I,z)))var z=I,Q=A}return Q}function os(e,t){var i=[];return ci(e,(function(l,g,A){t(l,g,A)&&i.push(l)})),i}function En(e,t,i,l,g){var A=-1,I=e.length;for(i||(i=Vu),g||(g=[]);++A<I;){var z=e[A];t>0&&i(z)?t>1?En(z,t-1,i,l,g):Or(g,z):l||(g[g.length]=z)}return g}var ca=js(),as=js(!0);function Ir(e,t){return e&&ca(e,t,wn)}function fa(e,t){return e&&as(e,t,wn)}function jo(e,t){return hr(t,(function(i){return Zr(e[i])}))}function Ai(e,t){for(var i=0,l=(t=pi(t,e)).length;e!=null&&i<l;)e=e[Pr(t[i++])];return i&&i==l?e:f}function ss(e,t,i){var l=t(e);return pt(e)?l:Or(l,i(e))}function Hn(e){return e==null?e===f?\"[object Undefined]\":\"[object Null]\":rr&&rr in Dt(e)?(function(t){var i=ct.call(t,rr),l=t[rr];try{t[rr]=f;var g=!0}catch{}var A=Tt.call(t);return g&&(i?t[rr]=l:delete t[rr]),A})(e):(function(t){return Tt.call(t)})(e)}function pa(e,t){return e>t}function Lu(e,t){return e!=null&&ct.call(e,t)}function Pu(e,t){return e!=null&&t in Dt(e)}function ha(e,t,i){for(var l=i?eo:Li,g=e[0].length,A=e.length,I=A,z=se(A),Q=1/0,de=[];I--;){var pe=e[I];I&&t&&(pe=Ut(pe,Ln(t))),Q=sn(pe.length,Q),z[I]=!i&&(t||g>=120&&pe.length>=120)?new Ht(I&&pe):f}pe=e[0];var ye=-1,Ie=z[0];e:for(;++ye<g&&de.length<Q;){var Me=pe[ye],Je=t?t(Me):Me;if(Me=i||Me!==0?Me:0,!(Ie?r(Ie,Je):l(de,Je,i))){for(I=A;--I;){var ge=z[I];if(!(ge?r(ge,Je):l(e[I],Je,i)))continue e}Ie&&Ie.push(Je),de.push(Me)}}return de}function co(e,t,i){var l=(e=Ks(e,t=pi(t,e)))==null?e:e[Pr(yr(t))];return l==null?f:An(l,e,i)}function us(e){return Yt(e)&&Hn(e)==u}function fo(e,t,i,l,g){return e===t||(e==null||t==null||!Yt(e)&&!Yt(t)?e!=e&&t!=t:(function(A,I,z,Q,de,pe){var ye=pt(A),Ie=pt(I),Me=ye?v:On(A),Je=Ie?v:On(I),ge=(Me=Me==u?ve:Me)==ve,xe=(Je=Je==u?ve:Je)==ve,tt=Me==Je;if(tt&&di(A)){if(!di(I))return!1;ye=!0,ge=!1}if(tt&&!ge)return pe||(pe=new Ot),ye||Xi(A)?Us(A,I,z,Q,de,pe):(function(We,nt,pn,rn,Un,zt,Nn){switch(pn){case oe:if(We.byteLength!=nt.byteLength||We.byteOffset!=nt.byteOffset)return!1;We=We.buffer,nt=nt.buffer;case ie:return!(We.byteLength!=nt.byteLength||!zt(new Wr(We),new Wr(nt)));case T:case H:case Ge:return kr(+We,+nt);case B:return We.name==nt.name&&We.message==nt.message;case ce:case be:return We==nt+\"\";case Ee:var qr=M;case Ae:var gi=1&rn;if(qr||(qr=ue),We.size!=nt.size&&!gi)return!1;var Qo=Nn.get(We);if(Qo)return Qo==nt;rn|=2,Nn.set(We,nt);var Za=Us(qr(We),qr(nt),rn,Un,zt,Nn);return Nn.delete(We),Za;case rt:if(he)return he.call(We)==he.call(nt)}return!1})(A,I,Me,z,Q,de,pe);if(!(1&z)){var Se=ge&&ct.call(A,\"__wrapped__\"),ht=xe&&ct.call(I,\"__wrapped__\");if(Se||ht){var st=Se?A.value():A,Et=ht?I.value():I;return pe||(pe=new Ot),de(st,Et,z,Q,pe)}}return tt?(pe||(pe=new Ot),(function(We,nt,pn,rn,Un,zt){var Nn=1&pn,qr=Ea(We),gi=qr.length,Qo=Ea(nt),Za=Qo.length;if(gi!=Za&&!Nn)return!1;for(var Jo=gi;Jo--;){var ki=qr[Jo];if(!(Nn?ki in nt:ct.call(nt,ki)))return!1}var ju=zt.get(We),Ou=zt.get(nt);if(ju&&Ou)return ju==nt&&Ou==We;var Zo=!0;zt.set(We,nt),zt.set(nt,We);for(var es=Nn;++Jo<gi;){var ea=We[ki=qr[Jo]],ta=nt[ki];if(rn)var Nu=Nn?rn(ta,ea,ki,nt,We,zt):rn(ea,ta,ki,We,nt,zt);if(!(Nu===f?ea===ta||Un(ea,ta,pn,rn,zt):Nu)){Zo=!1;break}es||(es=ki==\"constructor\")}if(Zo&&!es){var na=We.constructor,ra=nt.constructor;na==ra||!(\"constructor\"in We)||!(\"constructor\"in nt)||typeof na==\"function\"&&na instanceof na&&typeof ra==\"function\"&&ra instanceof ra||(Zo=!1)}return zt.delete(We),zt.delete(nt),Zo})(A,I,z,Q,de,pe)):!1})(e,t,i,l,fo,g))}function da(e,t,i,l){var g=i.length,A=g,I=!l;if(e==null)return!A;for(e=Dt(e);g--;){var z=i[g];if(I&&z[2]?z[1]!==e[z[0]]:!(z[0]in e))return!1}for(;++g<A;){var Q=(z=i[g])[0],de=e[Q],pe=z[1];if(I&&z[2]){if(de===f&&!(Q in e))return!1}else{var ye=new Ot;if(l)var Ie=l(de,pe,Q,e,t,ye);if(!(Ie===f?fo(pe,de,3,l,ye):Ie))return!1}}return!0}function ls(e){return!(!Wt(e)||(t=e,at&&at in t))&&(Zr(e)?Xt:er).test($i(e));var t}function cs(e){return typeof e==\"function\"?e:e==null?Qn:typeof e==\"object\"?pt(e)?hs(e[0],e[1]):ps(e):Du(e)}function ga(e){if(!go(e))return ir(e);var t=[];for(var i in Dt(e))ct.call(e,i)&&i!=\"constructor\"&&t.push(i);return t}function qu(e){if(!Wt(e))return(function(g){var A=[];if(g!=null)for(var I in Dt(g))A.push(I);return A})(e);var t=go(e),i=[];for(var l in e)(l!=\"constructor\"||!t&&ct.call(e,l))&&i.push(l);return i}function va(e,t){return e<t}function fs(e,t){var i=-1,l=Xn(e)?se(e.length):[];return ci(e,(function(g,A,I){l[++i]=t(g,A,I)})),l}function ps(e){var t=ja(e);return t.length==1&&t[0][2]?Gs(t[0][0],t[0][1]):function(i){return i===e||da(i,e,t)}}function hs(e,t){return Na(e)&&Ws(t)?Gs(Pr(e),t):function(i){var l=za(i,e);return l===f&&l===t?Ba(i,e):fo(t,l,3)}}function Oo(e,t,i,l,g){e!==t&&ca(t,(function(A,I){if(g||(g=new Ot),Wt(A))(function(Q,de,pe,ye,Ie,Me,Je){var ge=Ia(Q,pe),xe=Ia(de,pe),tt=Je.get(xe);if(tt)return void Bt(Q,pe,tt);var Se=Me?Me(ge,xe,pe+\"\",Q,de,Je):f,ht=Se===f;if(ht){var st=pt(xe),Et=!st&&di(xe),We=!st&&!Et&&Xi(xe);Se=xe,st||Et||We?pt(ge)?Se=ge:nn(ge)?Se=Kn(ge):Et?(ht=!1,Se=As(xe,!0)):We?(ht=!1,Se=Ss(xe,!0)):Se=[]:mo(xe)||Ei(xe)?(Se=ge,Ei(ge)?Se=wu(ge):Wt(ge)&&!Zr(ge)||(Se=Bs(xe))):ht=!1}ht&&(Je.set(xe,Se),Ie(Se,xe,ye,Me,Je),Je.delete(xe)),Bt(Q,pe,Se)})(e,t,I,i,Oo,l,g);else{var z=l?l(Ia(e,I),A,I+\"\",e,t,g):f;z===f&&(z=A),Bt(e,I,z)}}),Yn)}function ds(e,t){var i=e.length;if(i)return Jr(t+=t<0?i:0,i)?e[t]:f}function gs(e,t,i){t=t.length?Ut(t,(function(A){return pt(A)?function(I){return Ai(I,A.length===1?A[0]:A)}:A})):[Qn];var l=-1;t=Ut(t,Ln(et()));var g=fs(e,(function(A,I,z){var Q=Ut(t,(function(de){return de(A)}));return{criteria:Q,index:++l,value:A}}));return(function(A,I){var z=A.length;for(A.sort(I);z--;)A[z]=A[z].value;return A})(g,(function(A,I){return(function(z,Q,de){for(var pe=-1,ye=z.criteria,Ie=Q.criteria,Me=ye.length,Je=de.length;++pe<Me;){var ge=$s(ye[pe],Ie[pe]);if(ge)return pe>=Je?ge:ge*(de[pe]==\"desc\"?-1:1)}return z.index-Q.index})(A,I,i)}))}function vs(e,t,i){for(var l=-1,g=t.length,A={};++l<g;){var I=t[l],z=Ai(e,I);i(z,I)&&po(A,pi(I,e),z)}return A}function ma(e,t,i,l){var g=l?wo:Fr,A=-1,I=t.length,z=e;for(e===t&&(t=Kn(t)),i&&(z=Ut(e,Ln(i)));++A<I;)for(var Q=0,de=t[A],pe=i?i(de):de;(Q=g(z,pe,Q,l))>-1;)z!==e&&Ui.call(z,Q,1),Ui.call(e,Q,1);return e}function ms(e,t){for(var i=e?t.length:0,l=i-1;i--;){var g=t[i];if(i==l||g!==A){var A=g;Jr(g)?Ui.call(e,g,1):_a(e,g)}}return e}function ya(e,t){return e+Ti($o()*(t-e+1))}function ba(e,t){var i=\"\";if(!e||t<1||t>D)return i;do t%2&&(i+=e),(t=Ti(t/2))&&(e+=e);while(t);return i}function wt(e,t){return La(Vs(e,t,Qn),e+\"\")}function Hu(e){return Nt(Yi(e))}function Mu(e,t){var i=Yi(e);return Fo(i,Ci(t,0,i.length))}function po(e,t,i,l){if(!Wt(e))return e;for(var g=-1,A=(t=pi(t,e)).length,I=A-1,z=e;z!=null&&++g<A;){var Q=Pr(t[g]),de=i;if(Q===\"__proto__\"||Q===\"constructor\"||Q===\"prototype\")return e;if(g!=I){var pe=z[Q];(de=l?l(pe,Q,z):f)===f&&(de=Wt(pe)?pe:Jr(t[g+1])?[]:{})}$n(z,Q,de),z=z[Q]}return e}var ys=Kr?function(e,t){return Kr.set(e,t),e}:Qn,Uu=Fi?function(e,t){return Fi(e,\"toString\",{configurable:!0,enumerable:!1,value:Ga(t),writable:!0})}:Qn;function Fu(e){return Fo(Yi(e))}function mr(e,t,i){var l=-1,g=e.length;t<0&&(t=-t>g?0:g+t),(i=i>g?g:i)<0&&(i+=g),g=t>i?0:i-t>>>0,t>>>=0;for(var A=se(g);++l<g;)A[l]=e[l+t];return A}function zu(e,t){var i;return ci(e,(function(l,g,A){return!(i=t(l,g,A))})),!!i}function No(e,t,i){var l=0,g=e==null?l:e.length;if(typeof t==\"number\"&&t==t&&g<=2147483647){for(;l<g;){var A=l+g>>>1,I=e[A];I!==null&&!ar(I)&&(i?I<=t:I<t)?l=A+1:g=A}return g}return wa(e,t,Qn,i)}function wa(e,t,i,l){var g=0,A=e==null?0:e.length;if(A===0)return 0;for(var I=(t=i(t))!=t,z=t===null,Q=ar(t),de=t===f;g<A;){var pe=Ti((g+A)/2),ye=i(e[pe]),Ie=ye!==f,Me=ye===null,Je=ye==ye,ge=ar(ye);if(I)var xe=l||Je;else xe=de?Je&&(l||Ie):z?Je&&Ie&&(l||!Me):Q?Je&&Ie&&!Me&&(l||!ge):!Me&&!ge&&(l?ye<=t:ye<t);xe?g=pe+1:A=pe}return sn(A,4294967294)}function bs(e,t){for(var i=-1,l=e.length,g=0,A=[];++i<l;){var I=e[i],z=t?t(I):I;if(!i||!kr(z,Q)){var Q=z;A[g++]=I===0?0:I}}return A}function ws(e){return typeof e==\"number\"?e:ar(e)?y:+e}function or(e){if(typeof e==\"string\")return e;if(pt(e))return Ut(e,or)+\"\";if(ar(e))return me?me.call(e):\"\";var t=e+\"\";return t==\"0\"&&1/e==-1/0?\"-0\":t}function fi(e,t,i){var l=-1,g=Li,A=e.length,I=!0,z=[],Q=z;if(i)I=!1,g=eo;else if(A>=200){var de=t?null:Wu(e);if(de)return ue(de);I=!1,g=r,Q=new Ht}else Q=t?[]:z;e:for(;++l<A;){var pe=e[l],ye=t?t(pe):pe;if(pe=i||pe!==0?pe:0,I&&ye==ye){for(var Ie=Q.length;Ie--;)if(Q[Ie]===ye)continue e;t&&Q.push(ye),z.push(pe)}else g(Q,ye,i)||(Q!==z&&Q.push(ye),z.push(pe))}return z}function _a(e,t){return(e=Ks(e,t=pi(t,e)))==null||delete e[Pr(yr(t))]}function _s(e,t,i,l){return po(e,t,i(Ai(e,t)),l)}function Ro(e,t,i,l){for(var g=e.length,A=l?g:-1;(l?A--:++A<g)&&t(e[A],A,e););return i?mr(e,l?0:A,l?A+1:g):mr(e,l?A+1:0,l?g:A)}function xs(e,t){var i=e;return i instanceof _e&&(i=i.value()),to(t,(function(l,g){return g.func.apply(g.thisArg,Or([l],g.args))}),i)}function xa(e,t,i){var l=e.length;if(l<2)return l?fi(e[0]):[];for(var g=-1,A=se(l);++g<l;)for(var I=e[g],z=-1;++z<l;)z!=g&&(A[g]=lo(A[g]||I,e[z],t,i));return fi(En(A,1),t,i)}function Ts(e,t,i){for(var l=-1,g=e.length,A=t.length,I={};++l<g;){var z=l<A?t[l]:f;i(I,e[l],z)}return I}function Ta(e){return nn(e)?e:[]}function Ca(e){return typeof e==\"function\"?e:Qn}function pi(e,t){return pt(e)?e:Na(e,t)?[e]:Js(Rt(e))}var Bu=wt;function hi(e,t,i){var l=e.length;return i=i===f?l:i,!t&&i>=l?e:mr(e,t,i)}var Cs=ao||function(e){return Ft.clearTimeout(e)};function As(e,t){if(t)return e.slice();var i=e.length,l=To?To(i):new e.constructor(i);return e.copy(l),l}function Aa(e){var t=new e.constructor(e.byteLength);return new Wr(t).set(new Wr(e)),t}function Ss(e,t){var i=t?Aa(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.length)}function $s(e,t){if(e!==t){var i=e!==f,l=e===null,g=e==e,A=ar(e),I=t!==f,z=t===null,Q=t==t,de=ar(t);if(!z&&!de&&!A&&e>t||A&&I&&Q&&!z&&!de||l&&I&&Q||!i&&Q||!g)return 1;if(!l&&!A&&!de&&e<t||de&&i&&g&&!l&&!A||z&&i&&g||!I&&g||!Q)return-1}return 0}function Es(e,t,i,l){for(var g=-1,A=e.length,I=i.length,z=-1,Q=t.length,de=$t(A-I,0),pe=se(Q+de),ye=!l;++z<Q;)pe[z]=t[z];for(;++g<I;)(ye||g<A)&&(pe[i[g]]=e[g]);for(;de--;)pe[z++]=e[g++];return pe}function ks(e,t,i,l){for(var g=-1,A=e.length,I=-1,z=i.length,Q=-1,de=t.length,pe=$t(A-z,0),ye=se(pe+de),Ie=!l;++g<pe;)ye[g]=e[g];for(var Me=g;++Q<de;)ye[Me+Q]=t[Q];for(;++I<z;)(Ie||g<A)&&(ye[Me+i[I]]=e[g++]);return ye}function Kn(e,t){var i=-1,l=e.length;for(t||(t=se(l));++i<l;)t[i]=e[i];return t}function Lr(e,t,i,l){var g=!i;i||(i={});for(var A=-1,I=t.length;++A<I;){var z=t[A],Q=l?l(i[z],e[z],z,i,e):f;Q===f&&(Q=e[z]),g?Er(i,z,Q):$n(i,z,Q)}return i}function Io(e,t){return function(i,l){var g=pt(i)?ia:ko,A=t?t():{};return g(i,e,et(l,2),A)}}function Gi(e){return wt((function(t,i){var l=-1,g=i.length,A=g>1?i[g-1]:f,I=g>2?i[2]:f;for(A=e.length>3&&typeof A==\"function\"?(g--,A):f,I&&Mn(i[0],i[1],I)&&(A=g<3?f:A,g=1),t=Dt(t);++l<g;){var z=i[l];z&&e(t,z,l,A)}return t}))}function Ds(e,t){return function(i,l){if(i==null)return i;if(!Xn(i))return e(i,l);for(var g=i.length,A=t?g:-1,I=Dt(i);(t?A--:++A<g)&&l(I[A],A,I)!==!1;);return i}}function js(e){return function(t,i,l){for(var g=-1,A=Dt(t),I=l(t),z=I.length;z--;){var Q=I[e?z:++g];if(i(A[Q],Q,A)===!1)break}return t}}function Os(e){return function(t){var i=U(t=Rt(t))?$e(t):f,l=i?i[0]:t.charAt(0),g=i?hi(i,1).join(\"\"):t.slice(1);return l[e]()+g}}function Vi(e){return function(t){return to(Eu($u(t).replace(Oi,\"\")),e,\"\")}}function ho(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var i=Ce(e.prototype),l=e.apply(i,t);return Wt(l)?l:i}}function Ns(e){return function(t,i,l){var g=Dt(t);if(!Xn(t)){var A=et(i,3);t=wn(t),i=function(z){return A(g[z],z,g)}}var I=e(t,i,l);return I>-1?g[A?t[I]:I]:f}}function Rs(e){return Qr((function(t){var i=t.length,l=i,g=Ue.prototype.thru;for(e&&t.reverse();l--;){var A=t[l];if(typeof A!=\"function\")throw new ln(_);if(g&&!I&&Mo(A)==\"wrapper\")var I=new Ue([],!0)}for(l=I?l:i;++l<i;){var z=Mo(A=t[l]),Q=z==\"wrapper\"?Da(A):f;I=Q&&Ra(Q[0])&&Q[1]==424&&!Q[4].length&&Q[9]==1?I[Mo(Q[0])].apply(I,Q[3]):A.length==1&&Ra(A)?I[z]():I.thru(A)}return function(){var de=arguments,pe=de[0];if(I&&de.length==1&&pt(pe))return I.plant(pe).value();for(var ye=0,Ie=i?t[ye].apply(this,de):pe;++ye<i;)Ie=t[ye].call(this,Ie);return Ie}}))}function Lo(e,t,i,l,g,A,I,z,Q,de){var pe=t&w,ye=1&t,Ie=2&t,Me=24&t,Je=512&t,ge=Ie?f:ho(e);return function xe(){for(var tt=arguments.length,Se=se(tt),ht=tt;ht--;)Se[ht]=arguments[ht];if(Me)var st=Ki(xe),Et=(function(rn,Un){for(var zt=rn.length,Nn=0;zt--;)rn[zt]===Un&&++Nn;return Nn})(Se,st);if(l&&(Se=Es(Se,l,g,Me)),A&&(Se=ks(Se,A,I,Me)),tt-=Et,Me&&tt<de){var We=te(Se,st);return Ps(e,t,Lo,xe.placeholder,i,Se,We,z,Q,de-tt)}var nt=ye?i:this,pn=Ie?nt[e]:e;return tt=Se.length,z?Se=(function(rn,Un){for(var zt=rn.length,Nn=sn(Un.length,zt),qr=Kn(rn);Nn--;){var gi=Un[Nn];rn[Nn]=Jr(gi,zt)?qr[gi]:f}return rn})(Se,z):Je&&tt>1&&Se.reverse(),pe&&Q<tt&&(Se.length=Q),this&&this!==Ft&&this instanceof xe&&(pn=ge||ho(pn)),pn.apply(nt,Se)}}function Is(e,t){return function(i,l){return(function(g,A,I,z){return Ir(g,(function(Q,de,pe){A(z,I(Q),de,pe)})),z})(i,e,t(l),{})}}function Po(e,t){return function(i,l){var g;if(i===f&&l===f)return t;if(i!==f&&(g=i),l!==f){if(g===f)return l;typeof i==\"string\"||typeof l==\"string\"?(i=or(i),l=or(l)):(i=ws(i),l=ws(l)),g=e(i,l)}return g}}function Sa(e){return Qr((function(t){return t=Ut(t,Ln(et())),wt((function(i){var l=this;return e(t,(function(g){return An(g,l,i)}))}))}))}function qo(e,t){var i=(t=t===f?\" \":or(t)).length;if(i<2)return i?ba(t,e):t;var l=ba(t,xi(e/Z(t)));return U(t)?hi($e(l),0,e).join(\"\"):l.slice(0,e)}function Ls(e){return function(t,i,l){return l&&typeof l!=\"number\"&&Mn(t,i,l)&&(i=l=f),t=ei(t),i===f?(i=t,t=0):i=ei(i),(function(g,A,I,z){for(var Q=-1,de=$t(xi((A-g)/(I||1)),0),pe=se(de);de--;)pe[z?de:++Q]=g,g+=I;return pe})(t,i,l=l===f?t<i?1:-1:ei(l),e)}}function Ho(e){return function(t,i){return typeof t==\"string\"&&typeof i==\"string\"||(t=br(t),i=br(i)),e(t,i)}}function Ps(e,t,i,l,g,A,I,z,Q,de){var pe=8&t;t|=pe?P:N,4&(t&=~(pe?N:P))||(t&=-4);var ye=[e,t,g,pe?A:f,pe?I:f,pe?f:A,pe?f:I,z,Q,de],Ie=i.apply(f,ye);return Ra(e)&&Xs(Ie,ye),Ie.placeholder=l,Ys(Ie,e,t)}function $a(e){var t=jn[e];return function(i,l){if(i=br(i),(l=l==null?0:sn(yt(l),292))&&jt(i)){var g=(Rt(i)+\"e\").split(\"e\");return+((g=(Rt(t(g[0]+\"e\"+(+g[1]+l)))+\"e\").split(\"e\"))[0]+\"e\"+(+g[1]-l))}return t(i)}}var Wu=$r&&1/ue(new $r([,-0]))[1]==E?function(e){return new $r(e)}:Xa;function qs(e){return function(t){var i=On(t);return i==Ee?M(t):i==Ae?J(t):(function(l,g){return Ut(g,(function(A){return[A,l[A]]}))})(t,e(t))}}function Yr(e,t,i,l,g,A,I,z){var Q=2&t;if(!Q&&typeof e!=\"function\")throw new ln(_);var de=l?l.length:0;if(de||(t&=-97,l=g=f),I=I===f?I:$t(yt(I),0),z=z===f?z:yt(z),de-=g?g.length:0,t&N){var pe=l,ye=g;l=g=f}var Ie=Q?f:Da(e),Me=[e,t,i,l,g,pe,ye,A,I,z];if(Ie&&(function(ge,xe){var tt=ge[1],Se=xe[1],ht=tt|Se,st=ht<131,Et=Se==w&&tt==8||Se==w&&tt==ee&&ge[7].length<=xe[8]||Se==384&&xe[7].length<=xe[8]&&tt==8;if(!st&&!Et)return ge;1&Se&&(ge[2]=xe[2],ht|=1&tt?0:4);var We=xe[3];if(We){var nt=ge[3];ge[3]=nt?Es(nt,We,xe[4]):We,ge[4]=nt?te(ge[3],S):xe[4]}(We=xe[5])&&(nt=ge[5],ge[5]=nt?ks(nt,We,xe[6]):We,ge[6]=nt?te(ge[5],S):xe[6]),(We=xe[7])&&(ge[7]=We),Se&w&&(ge[8]=ge[8]==null?xe[8]:sn(ge[8],xe[8])),ge[9]==null&&(ge[9]=xe[9]),ge[0]=xe[0],ge[1]=ht})(Me,Ie),e=Me[0],t=Me[1],i=Me[2],l=Me[3],g=Me[4],!(z=Me[9]=Me[9]===f?Q?0:e.length:$t(Me[9]-de,0))&&24&t&&(t&=-25),t&&t!=1)Je=t==8||t==k?(function(ge,xe,tt){var Se=ho(ge);return function ht(){for(var st=arguments.length,Et=se(st),We=st,nt=Ki(ht);We--;)Et[We]=arguments[We];var pn=st<3&&Et[0]!==nt&&Et[st-1]!==nt?[]:te(Et,nt);return(st-=pn.length)<tt?Ps(ge,xe,Lo,ht.placeholder,f,Et,pn,f,f,tt-st):An(this&&this!==Ft&&this instanceof ht?Se:ge,this,Et)}})(e,t,z):t!=P&&t!=33||g.length?Lo.apply(f,Me):(function(ge,xe,tt,Se){var ht=1&xe,st=ho(ge);return function Et(){for(var We=-1,nt=arguments.length,pn=-1,rn=Se.length,Un=se(rn+nt),zt=this&&this!==Ft&&this instanceof Et?st:ge;++pn<rn;)Un[pn]=Se[pn];for(;nt--;)Un[pn++]=arguments[++We];return An(zt,ht?tt:this,Un)}})(e,t,i,l);else var Je=(function(ge,xe,tt){var Se=1&xe,ht=ho(ge);return function st(){return(this&&this!==Ft&&this instanceof st?ht:ge).apply(Se?tt:this,arguments)}})(e,t,i);return Ys((Ie?ys:Xs)(Je,Me),e,t)}function Hs(e,t,i,l){return e===f||kr(e,fn[i])&&!ct.call(l,i)?t:e}function Ms(e,t,i,l,g,A){return Wt(e)&&Wt(t)&&(A.set(t,e),Oo(e,t,f,Ms,A),A.delete(t)),e}function Gu(e){return mo(e)?f:e}function Us(e,t,i,l,g,A){var I=1&i,z=e.length,Q=t.length;if(z!=Q&&!(I&&Q>z))return!1;var de=A.get(e),pe=A.get(t);if(de&&pe)return de==t&&pe==e;var ye=-1,Ie=!0,Me=2&i?new Ht:f;for(A.set(e,t),A.set(t,e);++ye<z;){var Je=e[ye],ge=t[ye];if(l)var xe=I?l(ge,Je,ye,t,e,A):l(Je,ge,ye,e,t,A);if(xe!==f){if(xe)continue;Ie=!1;break}if(Me){if(!Pi(t,(function(tt,Se){if(!r(Me,Se)&&(Je===tt||g(Je,tt,i,l,A)))return Me.push(Se)}))){Ie=!1;break}}else if(Je!==ge&&!g(Je,ge,i,l,A)){Ie=!1;break}}return A.delete(e),A.delete(t),Ie}function Qr(e){return La(Vs(e,f,nu),e+\"\")}function Ea(e){return ss(e,wn,Oa)}function ka(e){return ss(e,Yn,Fs)}var Da=Kr?function(e){return Kr.get(e)}:Xa;function Mo(e){for(var t=e.name+\"\",i=Rr[t],l=ct.call(Rr,t)?i.length:0;l--;){var g=i[l],A=g.func;if(A==null||A==e)return g.name}return t}function Ki(e){return(ct.call(d,\"placeholder\")?d:e).placeholder}function et(){var e=d.iteratee||Va;return e=e===Va?cs:e,arguments.length?e(arguments[0],arguments[1]):e}function Uo(e,t){var i,l,g=e.__data__;return((l=typeof(i=t))==\"string\"||l==\"number\"||l==\"symbol\"||l==\"boolean\"?i!==\"__proto__\":i===null)?g[typeof t==\"string\"?\"string\":\"hash\"]:g.map}function ja(e){for(var t=wn(e),i=t.length;i--;){var l=t[i],g=e[l];t[i]=[l,g,Ws(g)]}return t}function Si(e,t){var i=(function(l,g){return l==null?f:l[g]})(e,t);return ls(i)?i:f}var Oa=zi?function(e){return e==null?[]:(e=Dt(e),hr(zi(e),(function(t){return wi.call(e,t)})))}:Ya,Fs=zi?function(e){for(var t=[];e;)Or(t,Oa(e)),e=Mi(e);return t}:Ya,On=Hn;function zs(e,t,i){for(var l=-1,g=(t=pi(t,e)).length,A=!1;++l<g;){var I=Pr(t[l]);if(!(A=e!=null&&i(e,I)))break;e=e[I]}return A||++l!=g?A:!!(g=e==null?0:e.length)&&Ko(g)&&Jr(I,g)&&(pt(e)||Ei(e))}function Bs(e){return typeof e.constructor!=\"function\"||go(e)?{}:Ce(Mi(e))}function Vu(e){return pt(e)||Ei(e)||!!(Ao&&e&&e[Ao])}function Jr(e,t){var i=typeof e;return!!(t=t??D)&&(i==\"number\"||i!=\"symbol\"&&Kt.test(e))&&e>-1&&e%1==0&&e<t}function Mn(e,t,i){if(!Wt(i))return!1;var l=typeof t;return!!(l==\"number\"?Xn(i)&&Jr(t,i.length):l==\"string\"&&t in i)&&kr(i[t],e)}function Na(e,t){if(pt(e))return!1;var i=typeof e;return!(i!=\"number\"&&i!=\"symbol\"&&i!=\"boolean\"&&e!=null&&!ar(e))||Jn.test(e)||!Fn.test(e)||t!=null&&e in Dt(t)}function Ra(e){var t=Mo(e),i=d[t];if(typeof i!=\"function\"||!(t in _e.prototype))return!1;if(e===i)return!0;var l=Da(i);return!!l&&e===l[0]}(Sr&&On(new Sr(new ArrayBuffer(1)))!=oe||Gr&&On(new Gr)!=Ee||Wi&&On(Wi.resolve())!=Re||$r&&On(new $r)!=Ae||Nr&&On(new Nr)!=dt)&&(On=function(e){var t=Hn(e),i=t==ve?e.constructor:f,l=i?$i(i):\"\";if(l)switch(l){case so:return oe;case C:return Ee;case R:return Re;case W:return Ae;case fe:return dt}return t});var Ku=Pt?Zr:Qa;function go(e){var t=e&&e.constructor;return e===(typeof t==\"function\"&&t.prototype||fn)}function Ws(e){return e==e&&!Wt(e)}function Gs(e,t){return function(i){return i!=null&&i[e]===t&&(t!==f||e in Dt(i))}}function Vs(e,t,i){return t=$t(t===f?e.length-1:t,0),function(){for(var l=arguments,g=-1,A=$t(l.length-t,0),I=se(A);++g<A;)I[g]=l[t+g];g=-1;for(var z=se(t+1);++g<t;)z[g]=l[g];return z[t]=i(I),An(e,this,z)}}function Ks(e,t){return t.length<2?e:Ai(e,mr(t,0,-1))}function Ia(e,t){if((t!==\"constructor\"||typeof e[t]!=\"function\")&&t!=\"__proto__\")return e[t]}var Xs=Qs(ys),vo=Ar||function(e,t){return Ft.setTimeout(e,t)},La=Qs(Uu);function Ys(e,t,i){var l=t+\"\";return La(e,(function(g,A){var I=A.length;if(!I)return g;var z=I-1;return A[z]=(I>1?\"& \":\"\")+A[z],A=A.join(I>2?\", \":\" \"),g.replace(Zn,`{\n/* [wrapped with `+A+`] */\n`)})(l,(function(g,A){return In(c,(function(I){var z=\"_.\"+I[0];A&I[1]&&!Li(g,z)&&g.push(z)})),g.sort()})((function(g){var A=g.match(Qt);return A?A[1].split(wr):[]})(l),i)))}function Qs(e){var t=0,i=0;return function(){var l=So(),g=16-(l-i);if(i=l,g>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(f,arguments)}}function Fo(e,t){var i=-1,l=e.length,g=l-1;for(t=t===f?l:t;++i<t;){var A=ya(i,g),I=e[A];e[A]=e[i],e[i]=I}return e.length=t,e}var Js=(function(e){var t=Go(e,(function(l){return i.size===500&&i.clear(),l})),i=t.cache;return t})((function(e){var t=[];return e.charCodeAt(0)===46&&t.push(\"\"),e.replace(It,(function(i,l,g,A){t.push(g?A.replace(un,\"$1\"):l||i)})),t}));function Pr(e){if(typeof e==\"string\"||ar(e))return e;var t=e+\"\";return t==\"0\"&&1/e==-1/0?\"-0\":t}function $i(e){if(e!=null){try{return vn.call(e)}catch{}try{return e+\"\"}catch{}}return\"\"}function Zs(e){if(e instanceof _e)return e.clone();var t=new Ue(e.__wrapped__,e.__chain__);return t.__actions__=Kn(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Xu=wt((function(e,t){return nn(e)?lo(e,En(t,1,nn,!0)):[]})),Yu=wt((function(e,t){var i=yr(t);return nn(i)&&(i=f),nn(e)?lo(e,En(t,1,nn,!0),et(i,2)):[]})),Qu=wt((function(e,t){var i=yr(t);return nn(i)&&(i=f),nn(e)?lo(e,En(t,1,nn,!0),f,i):[]}));function eu(e,t,i){var l=e==null?0:e.length;if(!l)return-1;var g=i==null?0:yt(i);return g<0&&(g=$t(l+g,0)),ui(e,et(t,3),g)}function tu(e,t,i){var l=e==null?0:e.length;if(!l)return-1;var g=l-1;return i!==f&&(g=yt(i),g=i<0?$t(l+g,0):sn(g,l-1)),ui(e,et(t,3),g,!0)}function nu(e){return e!=null&&e.length?En(e,1):[]}function ru(e){return e&&e.length?e[0]:f}var Ju=wt((function(e){var t=Ut(e,Ta);return t.length&&t[0]===e[0]?ha(t):[]})),Zu=wt((function(e){var t=yr(e),i=Ut(e,Ta);return t===yr(i)?t=f:i.pop(),i.length&&i[0]===e[0]?ha(i,et(t,2)):[]})),el=wt((function(e){var t=yr(e),i=Ut(e,Ta);return(t=typeof t==\"function\"?t:f)&&i.pop(),i.length&&i[0]===e[0]?ha(i,f,t):[]}));function yr(e){var t=e==null?0:e.length;return t?e[t-1]:f}var tl=wt(iu);function iu(e,t){return e&&e.length&&t&&t.length?ma(e,t):e}var nl=Qr((function(e,t){var i=e==null?0:e.length,l=la(e,t);return ms(e,Ut(t,(function(g){return Jr(g,i)?+g:g})).sort($s)),l}));function Pa(e){return e==null?e:Eo.call(e)}var rl=wt((function(e){return fi(En(e,1,nn,!0))})),il=wt((function(e){var t=yr(e);return nn(t)&&(t=f),fi(En(e,1,nn,!0),et(t,2))})),ol=wt((function(e){var t=yr(e);return t=typeof t==\"function\"?t:f,fi(En(e,1,nn,!0),f,t)}));function qa(e){if(!e||!e.length)return[];var t=0;return e=hr(e,(function(i){if(nn(i))return t=$t(i.length,t),!0})),oo(t,(function(i){return Ut(e,zr(i))}))}function ou(e,t){if(!e||!e.length)return[];var i=qa(e);return t==null?i:Ut(i,(function(l){return An(t,f,l)}))}var al=wt((function(e,t){return nn(e)?lo(e,t):[]})),sl=wt((function(e){return xa(hr(e,nn))})),ul=wt((function(e){var t=yr(e);return nn(t)&&(t=f),xa(hr(e,nn),et(t,2))})),ll=wt((function(e){var t=yr(e);return t=typeof t==\"function\"?t:f,xa(hr(e,nn),f,t)})),cl=wt(qa),fl=wt((function(e){var t=e.length,i=t>1?e[t-1]:f;return i=typeof i==\"function\"?(e.pop(),i):f,ou(e,i)}));function au(e){var t=d(e);return t.__chain__=!0,t}function zo(e,t){return t(e)}var pl=Qr((function(e){var t=e.length,i=t?e[0]:0,l=this.__wrapped__,g=function(A){return la(A,e)};return!(t>1||this.__actions__.length)&&l instanceof _e&&Jr(i)?((l=l.slice(i,+i+(t?1:0))).__actions__.push({func:zo,args:[g],thisArg:f}),new Ue(l,this.__chain__).thru((function(A){return t&&!A.length&&A.push(f),A}))):this.thru(g)})),hl=Io((function(e,t,i){ct.call(e,i)?++e[i]:Er(e,i,1)})),dl=Ns(eu),gl=Ns(tu);function su(e,t){return(pt(e)?In:ci)(e,et(t,3))}function uu(e,t){return(pt(e)?oa:is)(e,et(t,3))}var vl=Io((function(e,t,i){ct.call(e,i)?e[i].push(t):Er(e,i,[t])})),ml=wt((function(e,t,i){var l=-1,g=typeof t==\"function\",A=Xn(e)?se(e.length):[];return ci(e,(function(I){A[++l]=g?An(t,I,i):co(I,t,i)})),A})),yl=Io((function(e,t,i){Er(e,i,t)}));function Bo(e,t){return(pt(e)?Ut:fs)(e,et(t,3))}var bl=Io((function(e,t,i){e[i?0:1].push(t)}),(function(){return[[],[]]})),wl=wt((function(e,t){if(e==null)return[];var i=t.length;return i>1&&Mn(e,t[0],t[1])?t=[]:i>2&&Mn(t[0],t[1],t[2])&&(t=[t[0]]),gs(e,En(t,1),[])})),Wo=Cr||function(){return Ft.Date.now()};function lu(e,t,i){return t=i?f:t,t=e&&t==null?e.length:t,Yr(e,w,f,f,f,f,t)}function cu(e,t){var i;if(typeof t!=\"function\")throw new ln(_);return e=yt(e),function(){return--e>0&&(i=t.apply(this,arguments)),e<=1&&(t=f),i}}var Ha=wt((function(e,t,i){var l=1;if(i.length){var g=te(i,Ki(Ha));l|=P}return Yr(e,l,t,i,g)})),fu=wt((function(e,t,i){var l=3;if(i.length){var g=te(i,Ki(fu));l|=P}return Yr(t,l,e,i,g)}));function pu(e,t,i){var l,g,A,I,z,Q,de=0,pe=!1,ye=!1,Ie=!0;if(typeof e!=\"function\")throw new ln(_);function Me(Se){var ht=l,st=g;return l=g=f,de=Se,I=e.apply(st,ht)}function Je(Se){var ht=Se-Q;return Q===f||ht>=t||ht<0||ye&&Se-de>=A}function ge(){var Se=Wo();if(Je(Se))return xe(Se);z=vo(ge,(function(ht){var st=t-(ht-Q);return ye?sn(st,A-(ht-de)):st})(Se))}function xe(Se){return z=f,Ie&&l?Me(Se):(l=g=f,I)}function tt(){var Se=Wo(),ht=Je(Se);if(l=arguments,g=this,Q=Se,ht){if(z===f)return(function(st){return de=st,z=vo(ge,t),pe?Me(st):I})(Q);if(ye)return Cs(z),z=vo(ge,t),Me(Q)}return z===f&&(z=vo(ge,t)),I}return t=br(t)||0,Wt(i)&&(pe=!!i.leading,A=(ye=\"maxWait\"in i)?$t(br(i.maxWait)||0,t):A,Ie=\"trailing\"in i?!!i.trailing:Ie),tt.cancel=function(){z!==f&&Cs(z),de=0,l=Q=g=z=f},tt.flush=function(){return z===f?I:xe(Wo())},tt}var _l=wt((function(e,t){return rs(e,1,t)})),xl=wt((function(e,t,i){return rs(e,br(t)||0,i)}));function Go(e,t){if(typeof e!=\"function\"||t!=null&&typeof t!=\"function\")throw new ln(_);var i=function(){var l=arguments,g=t?t.apply(this,l):l[0],A=i.cache;if(A.has(g))return A.get(g);var I=e.apply(this,l);return i.cache=A.set(g,I)||A,I};return i.cache=new(Go.Cache||Xe),i}function Vo(e){if(typeof e!=\"function\")throw new ln(_);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Go.Cache=Xe;var Tl=Bu((function(e,t){var i=(t=t.length==1&&pt(t[0])?Ut(t[0],Ln(et())):Ut(En(t,1),Ln(et()))).length;return wt((function(l){for(var g=-1,A=sn(l.length,i);++g<A;)l[g]=t[g].call(this,l[g]);return An(e,this,l)}))})),Ma=wt((function(e,t){var i=te(t,Ki(Ma));return Yr(e,P,f,t,i)})),hu=wt((function(e,t){var i=te(t,Ki(hu));return Yr(e,N,f,t,i)})),Cl=Qr((function(e,t){return Yr(e,ee,f,f,f,t)}));function kr(e,t){return e===t||e!=e&&t!=t}var Al=Ho(pa),Sl=Ho((function(e,t){return e>=t})),Ei=us((function(){return arguments})())?us:function(e){return Yt(e)&&ct.call(e,\"callee\")&&!wi.call(e,\"callee\")},pt=se.isArray,$l=Ii?Ln(Ii):function(e){return Yt(e)&&Hn(e)==ie};function Xn(e){return e!=null&&Ko(e.length)&&!Zr(e)}function nn(e){return Yt(e)&&Xn(e)}var di=sa||Qa,El=yo?Ln(yo):function(e){return Yt(e)&&Hn(e)==H};function Ua(e){if(!Yt(e))return!1;var t=Hn(e);return t==B||t==\"[object DOMException]\"||typeof e.message==\"string\"&&typeof e.name==\"string\"&&!mo(e)}function Zr(e){if(!Wt(e))return!1;var t=Hn(e);return t==le||t==a||t==\"[object AsyncFunction]\"||t==\"[object Proxy]\"}function du(e){return typeof e==\"number\"&&e==yt(e)}function Ko(e){return typeof e==\"number\"&&e>-1&&e%1==0&&e<=D}function Wt(e){var t=typeof e;return e!=null&&(t==\"object\"||t==\"function\")}function Yt(e){return e!=null&&typeof e==\"object\"}var gu=Qi?Ln(Qi):function(e){return Yt(e)&&On(e)==Ee};function vu(e){return typeof e==\"number\"||Yt(e)&&Hn(e)==Ge}function mo(e){if(!Yt(e)||Hn(e)!=ve)return!1;var t=Mi(e);if(t===null)return!0;var i=ct.call(t,\"constructor\")&&t.constructor;return typeof i==\"function\"&&i instanceof i&&vn.call(i)==tn}var Fa=Ji?Ln(Ji):function(e){return Yt(e)&&Hn(e)==ce},mu=si?Ln(si):function(e){return Yt(e)&&On(e)==Ae};function Xo(e){return typeof e==\"string\"||!pt(e)&&Yt(e)&&Hn(e)==be}function ar(e){return typeof e==\"symbol\"||Yt(e)&&Hn(e)==rt}var Xi=Zi?Ln(Zi):function(e){return Yt(e)&&Ko(e.length)&&!!St[Hn(e)]},kl=Ho(va),Dl=Ho((function(e,t){return e<=t}));function yu(e){if(!e)return[];if(Xn(e))return Xo(e)?$e(e):Kn(e);if(_i&&e[_i])return(function(i){for(var l,g=[];!(l=i.next()).done;)g.push(l.value);return g})(e[_i]());var t=On(e);return(t==Ee?M:t==Ae?ue:Yi)(e)}function ei(e){return e?(e=br(e))===E||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:e===0?e:0}function yt(e){var t=ei(e),i=t%1;return t==t?i?t-i:t:0}function bu(e){return e?Ci(yt(e),0,p):0}function br(e){if(typeof e==\"number\")return e;if(ar(e))return y;if(Wt(e)){var t=typeof e.valueOf==\"function\"?e.valueOf():e;e=Wt(t)?t+\"\":t}if(typeof e!=\"string\")return e===0?e:+e;e=xo(e);var i=lr.test(e);return i||qt.test(e)?Ye(e.slice(2),i?2:8):hn.test(e)?y:+e}function wu(e){return Lr(e,Yn(e))}function Rt(e){return e==null?\"\":or(e)}var jl=Gi((function(e,t){if(go(t)||Xn(t))Lr(t,wn(t),e);else for(var i in t)ct.call(t,i)&&$n(e,i,t[i])})),_u=Gi((function(e,t){Lr(t,Yn(t),e)})),Yo=Gi((function(e,t,i,l){Lr(t,Yn(t),e,l)})),Ol=Gi((function(e,t,i,l){Lr(t,wn(t),e,l)})),Nl=Qr(la),Rl=wt((function(e,t){e=Dt(e);var i=-1,l=t.length,g=l>2?t[2]:f;for(g&&Mn(t[0],t[1],g)&&(l=1);++i<l;)for(var A=t[i],I=Yn(A),z=-1,Q=I.length;++z<Q;){var de=I[z],pe=e[de];(pe===f||kr(pe,fn[de])&&!ct.call(e,de))&&(e[de]=A[de])}return e})),Il=wt((function(e){return e.push(f,Ms),An(xu,f,e)}));function za(e,t,i){var l=e==null?f:Ai(e,t);return l===f?i:l}function Ba(e,t){return e!=null&&zs(e,t,Pu)}var Ll=Is((function(e,t,i){t!=null&&typeof t.toString!=\"function\"&&(t=Tt.call(t)),e[t]=i}),Ga(Qn)),Pl=Is((function(e,t,i){t!=null&&typeof t.toString!=\"function\"&&(t=Tt.call(t)),ct.call(e,t)?e[t].push(i):e[t]=[i]}),et),ql=wt(co);function wn(e){return Xn(e)?yn(e):ga(e)}function Yn(e){return Xn(e)?yn(e,!0):qu(e)}var Hl=Gi((function(e,t,i){Oo(e,t,i)})),xu=Gi((function(e,t,i,l){Oo(e,t,i,l)})),Ml=Qr((function(e,t){var i={};if(e==null)return i;var l=!1;t=Ut(t,(function(A){return A=pi(A,e),l||(l=A.length>1),A})),Lr(e,ka(e),i),l&&(i=vr(i,7,Gu));for(var g=t.length;g--;)_a(i,t[g]);return i})),Ul=Qr((function(e,t){return e==null?{}:(function(i,l){return vs(i,l,(function(g,A){return Ba(i,A)}))})(e,t)}));function Tu(e,t){if(e==null)return{};var i=Ut(ka(e),(function(l){return[l]}));return t=et(t),vs(e,i,(function(l,g){return t(l,g[0])}))}var Cu=qs(wn),Au=qs(Yn);function Yi(e){return e==null?[]:n(e,wn(e))}var Fl=Vi((function(e,t,i){return t=t.toLowerCase(),e+(i?Su(t):t)}));function Su(e){return Wa(Rt(e).toLowerCase())}function $u(e){return(e=Rt(e))&&e.replace(O,h).replace(Wn,\"\")}var zl=Vi((function(e,t,i){return e+(i?\"-\":\"\")+t.toLowerCase()})),Bl=Vi((function(e,t,i){return e+(i?\" \":\"\")+t.toLowerCase()})),Wl=Os(\"toLowerCase\"),Gl=Vi((function(e,t,i){return e+(i?\"_\":\"\")+t.toLowerCase()})),Vl=Vi((function(e,t,i){return e+(i?\" \":\"\")+Wa(t)})),Kl=Vi((function(e,t,i){return e+(i?\" \":\"\")+t.toUpperCase()})),Wa=Os(\"toUpperCase\");function Eu(e,t,i){return e=Rt(e),(t=i?f:t)===f?(function(l){return gn.test(l)})(e)?(function(l){return l.match(yi)||[]})(e):(function(l){return l.match(sr)||[]})(e):e.match(t)||[]}var ku=wt((function(e,t){try{return An(e,f,t)}catch(i){return Ua(i)?i:new De(i)}})),Xl=Qr((function(e,t){return In(t,(function(i){i=Pr(i),Er(e,i,Ha(e[i],e))})),e}));function Ga(e){return function(){return e}}var Yl=Rs(),Ql=Rs(!0);function Qn(e){return e}function Va(e){return cs(typeof e==\"function\"?e:vr(e,1))}var Jl=wt((function(e,t){return function(i){return co(i,e,t)}})),Zl=wt((function(e,t){return function(i){return co(e,i,t)}}));function Ka(e,t,i){var l=wn(t),g=jo(t,l);i!=null||Wt(t)&&(g.length||!l.length)||(i=t,t=e,e=this,g=jo(t,wn(t)));var A=!(Wt(i)&&\"chain\"in i&&!i.chain),I=Zr(e);return In(g,(function(z){var Q=t[z];e[z]=Q,I&&(e.prototype[z]=function(){var de=this.__chain__;if(A||de){var pe=e(this.__wrapped__);return(pe.__actions__=Kn(this.__actions__)).push({func:Q,args:arguments,thisArg:e}),pe.__chain__=de,pe}return Q.apply(e,Or([this.value()],arguments))})})),e}function Xa(){}var ec=Sa(Ut),tc=Sa(bo),nc=Sa(Pi);function Du(e){return Na(e)?zr(Pr(e)):(function(t){return function(i){return Ai(i,t)}})(e)}var rc=Ls(),ic=Ls(!0);function Ya(){return[]}function Qa(){return!1}var oc=Po((function(e,t){return e+t}),0),ac=$a(\"ceil\"),sc=Po((function(e,t){return e/t}),1),uc=$a(\"floor\"),Ja,lc=Po((function(e,t){return e*t}),1),cc=$a(\"round\"),fc=Po((function(e,t){return e-t}),0);return d.after=function(e,t){if(typeof t!=\"function\")throw new ln(_);return e=yt(e),function(){if(--e<1)return t.apply(this,arguments)}},d.ary=lu,d.assign=jl,d.assignIn=_u,d.assignInWith=Yo,d.assignWith=Ol,d.at=Nl,d.before=cu,d.bind=Ha,d.bindAll=Xl,d.bindKey=fu,d.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return pt(e)?e:[e]},d.chain=au,d.chunk=function(e,t,i){t=(i?Mn(e,t,i):t===f)?1:$t(yt(t),0);var l=e==null?0:e.length;if(!l||t<1)return[];for(var g=0,A=0,I=se(xi(l/t));g<l;)I[A++]=mr(e,g,g+=t);return I},d.compact=function(e){for(var t=-1,i=e==null?0:e.length,l=0,g=[];++t<i;){var A=e[t];A&&(g[l++]=A)}return g},d.concat=function(){var e=arguments.length;if(!e)return[];for(var t=se(e-1),i=arguments[0],l=e;l--;)t[l-1]=arguments[l];return Or(pt(i)?Kn(i):[i],En(t,1))},d.cond=function(e){var t=e==null?0:e.length,i=et();return e=t?Ut(e,(function(l){if(typeof l[1]!=\"function\")throw new ln(_);return[i(l[0]),l[1]]})):[],wt((function(l){for(var g=-1;++g<t;){var A=e[g];if(An(A[0],this,l))return An(A[1],this,l)}}))},d.conforms=function(e){return(function(t){var i=wn(t);return function(l){return ns(l,t,i)}})(vr(e,1))},d.constant=Ga,d.countBy=hl,d.create=function(e,t){var i=Ce(e);return t==null?i:uo(i,t)},d.curry=function e(t,i,l){var g=Yr(t,8,f,f,f,f,f,i=l?f:i);return g.placeholder=e.placeholder,g},d.curryRight=function e(t,i,l){var g=Yr(t,k,f,f,f,f,f,i=l?f:i);return g.placeholder=e.placeholder,g},d.debounce=pu,d.defaults=Rl,d.defaultsDeep=Il,d.defer=_l,d.delay=xl,d.difference=Xu,d.differenceBy=Yu,d.differenceWith=Qu,d.drop=function(e,t,i){var l=e==null?0:e.length;return l?mr(e,(t=i||t===f?1:yt(t))<0?0:t,l):[]},d.dropRight=function(e,t,i){var l=e==null?0:e.length;return l?mr(e,0,(t=l-(t=i||t===f?1:yt(t)))<0?0:t):[]},d.dropRightWhile=function(e,t){return e&&e.length?Ro(e,et(t,3),!0,!0):[]},d.dropWhile=function(e,t){return e&&e.length?Ro(e,et(t,3),!0):[]},d.fill=function(e,t,i,l){var g=e==null?0:e.length;return g?(i&&typeof i!=\"number\"&&Mn(e,t,i)&&(i=0,l=g),(function(A,I,z,Q){var de=A.length;for((z=yt(z))<0&&(z=-z>de?0:de+z),(Q=Q===f||Q>de?de:yt(Q))<0&&(Q+=de),Q=z>Q?0:bu(Q);z<Q;)A[z++]=I;return A})(e,t,i,l)):[]},d.filter=function(e,t){return(pt(e)?hr:os)(e,et(t,3))},d.flatMap=function(e,t){return En(Bo(e,t),1)},d.flatMapDeep=function(e,t){return En(Bo(e,t),E)},d.flatMapDepth=function(e,t,i){return i=i===f?1:yt(i),En(Bo(e,t),i)},d.flatten=nu,d.flattenDeep=function(e){return e!=null&&e.length?En(e,E):[]},d.flattenDepth=function(e,t){return e!=null&&e.length?En(e,t=t===f?1:yt(t)):[]},d.flip=function(e){return Yr(e,512)},d.flow=Yl,d.flowRight=Ql,d.fromPairs=function(e){for(var t=-1,i=e==null?0:e.length,l={};++t<i;){var g=e[t];l[g[0]]=g[1]}return l},d.functions=function(e){return e==null?[]:jo(e,wn(e))},d.functionsIn=function(e){return e==null?[]:jo(e,Yn(e))},d.groupBy=vl,d.initial=function(e){return e!=null&&e.length?mr(e,0,-1):[]},d.intersection=Ju,d.intersectionBy=Zu,d.intersectionWith=el,d.invert=Ll,d.invertBy=Pl,d.invokeMap=ml,d.iteratee=Va,d.keyBy=yl,d.keys=wn,d.keysIn=Yn,d.map=Bo,d.mapKeys=function(e,t){var i={};return t=et(t,3),Ir(e,(function(l,g,A){Er(i,t(l,g,A),l)})),i},d.mapValues=function(e,t){var i={};return t=et(t,3),Ir(e,(function(l,g,A){Er(i,g,t(l,g,A))})),i},d.matches=function(e){return ps(vr(e,1))},d.matchesProperty=function(e,t){return hs(e,vr(t,1))},d.memoize=Go,d.merge=Hl,d.mergeWith=xu,d.method=Jl,d.methodOf=Zl,d.mixin=Ka,d.negate=Vo,d.nthArg=function(e){return e=yt(e),wt((function(t){return ds(t,e)}))},d.omit=Ml,d.omitBy=function(e,t){return Tu(e,Vo(et(t)))},d.once=function(e){return cu(2,e)},d.orderBy=function(e,t,i,l){return e==null?[]:(pt(t)||(t=t==null?[]:[t]),pt(i=l?f:i)||(i=i==null?[]:[i]),gs(e,t,i))},d.over=ec,d.overArgs=Tl,d.overEvery=tc,d.overSome=nc,d.partial=Ma,d.partialRight=hu,d.partition=bl,d.pick=Ul,d.pickBy=Tu,d.property=Du,d.propertyOf=function(e){return function(t){return e==null?f:Ai(e,t)}},d.pull=tl,d.pullAll=iu,d.pullAllBy=function(e,t,i){return e&&e.length&&t&&t.length?ma(e,t,et(i,2)):e},d.pullAllWith=function(e,t,i){return e&&e.length&&t&&t.length?ma(e,t,f,i):e},d.pullAt=nl,d.range=rc,d.rangeRight=ic,d.rearg=Cl,d.reject=function(e,t){return(pt(e)?hr:os)(e,Vo(et(t,3)))},d.remove=function(e,t){var i=[];if(!e||!e.length)return i;var l=-1,g=[],A=e.length;for(t=et(t,3);++l<A;){var I=e[l];t(I,l,e)&&(i.push(I),g.push(l))}return ms(e,g),i},d.rest=function(e,t){if(typeof e!=\"function\")throw new ln(_);return wt(e,t=t===f?t:yt(t))},d.reverse=Pa,d.sampleSize=function(e,t,i){return t=(i?Mn(e,t,i):t===f)?1:yt(t),(pt(e)?gr:Mu)(e,t)},d.set=function(e,t,i){return e==null?e:po(e,t,i)},d.setWith=function(e,t,i,l){return l=typeof l==\"function\"?l:f,e==null?e:po(e,t,i,l)},d.shuffle=function(e){return(pt(e)?bn:Fu)(e)},d.slice=function(e,t,i){var l=e==null?0:e.length;return l?(i&&typeof i!=\"number\"&&Mn(e,t,i)?(t=0,i=l):(t=t==null?0:yt(t),i=i===f?l:yt(i)),mr(e,t,i)):[]},d.sortBy=wl,d.sortedUniq=function(e){return e&&e.length?bs(e):[]},d.sortedUniqBy=function(e,t){return e&&e.length?bs(e,et(t,2)):[]},d.split=function(e,t,i){return i&&typeof i!=\"number\"&&Mn(e,t,i)&&(t=i=f),(i=i===f?p:i>>>0)?(e=Rt(e))&&(typeof t==\"string\"||t!=null&&!Fa(t))&&!(t=or(t))&&U(e)?hi($e(e),0,i):e.split(t,i):[]},d.spread=function(e,t){if(typeof e!=\"function\")throw new ln(_);return t=t==null?0:$t(yt(t),0),wt((function(i){var l=i[t],g=hi(i,0,t);return l&&Or(g,l),An(e,this,g)}))},d.tail=function(e){var t=e==null?0:e.length;return t?mr(e,1,t):[]},d.take=function(e,t,i){return e&&e.length?mr(e,0,(t=i||t===f?1:yt(t))<0?0:t):[]},d.takeRight=function(e,t,i){var l=e==null?0:e.length;return l?mr(e,(t=l-(t=i||t===f?1:yt(t)))<0?0:t,l):[]},d.takeRightWhile=function(e,t){return e&&e.length?Ro(e,et(t,3),!1,!0):[]},d.takeWhile=function(e,t){return e&&e.length?Ro(e,et(t,3)):[]},d.tap=function(e,t){return t(e),e},d.throttle=function(e,t,i){var l=!0,g=!0;if(typeof e!=\"function\")throw new ln(_);return Wt(i)&&(l=\"leading\"in i?!!i.leading:l,g=\"trailing\"in i?!!i.trailing:g),pu(e,t,{leading:l,maxWait:t,trailing:g})},d.thru=zo,d.toArray=yu,d.toPairs=Cu,d.toPairsIn=Au,d.toPath=function(e){return pt(e)?Ut(e,Pr):ar(e)?[e]:Kn(Js(Rt(e)))},d.toPlainObject=wu,d.transform=function(e,t,i){var l=pt(e),g=l||di(e)||Xi(e);if(t=et(t,4),i==null){var A=e&&e.constructor;i=g?l?new A:[]:Wt(e)&&Zr(A)?Ce(Mi(e)):{}}return(g?In:Ir)(e,(function(I,z,Q){return t(i,I,z,Q)})),i},d.unary=function(e){return lu(e,1)},d.union=rl,d.unionBy=il,d.unionWith=ol,d.uniq=function(e){return e&&e.length?fi(e):[]},d.uniqBy=function(e,t){return e&&e.length?fi(e,et(t,2)):[]},d.uniqWith=function(e,t){return t=typeof t==\"function\"?t:f,e&&e.length?fi(e,f,t):[]},d.unset=function(e,t){return e==null||_a(e,t)},d.unzip=qa,d.unzipWith=ou,d.update=function(e,t,i){return e==null?e:_s(e,t,Ca(i))},d.updateWith=function(e,t,i,l){return l=typeof l==\"function\"?l:f,e==null?e:_s(e,t,Ca(i),l)},d.values=Yi,d.valuesIn=function(e){return e==null?[]:n(e,Yn(e))},d.without=al,d.words=Eu,d.wrap=function(e,t){return Ma(Ca(t),e)},d.xor=sl,d.xorBy=ul,d.xorWith=ll,d.zip=cl,d.zipObject=function(e,t){return Ts(e||[],t||[],$n)},d.zipObjectDeep=function(e,t){return Ts(e||[],t||[],po)},d.zipWith=fl,d.entries=Cu,d.entriesIn=Au,d.extend=_u,d.extendWith=Yo,Ka(d,d),d.add=oc,d.attempt=ku,d.camelCase=Fl,d.capitalize=Su,d.ceil=ac,d.clamp=function(e,t,i){return i===f&&(i=t,t=f),i!==f&&(i=(i=br(i))==i?i:0),t!==f&&(t=(t=br(t))==t?t:0),Ci(br(e),t,i)},d.clone=function(e){return vr(e,4)},d.cloneDeep=function(e){return vr(e,5)},d.cloneDeepWith=function(e,t){return vr(e,5,t=typeof t==\"function\"?t:f)},d.cloneWith=function(e,t){return vr(e,4,t=typeof t==\"function\"?t:f)},d.conformsTo=function(e,t){return t==null||ns(e,t,wn(t))},d.deburr=$u,d.defaultTo=function(e,t){return e==null||e!=e?t:e},d.divide=sc,d.endsWith=function(e,t,i){e=Rt(e),t=or(t);var l=e.length,g=i=i===f?l:Ci(yt(i),0,l);return(i-=t.length)>=0&&e.slice(i,g)==t},d.eq=kr,d.escape=function(e){return(e=Rt(e))&&xn.test(e)?e.replace(Ct,m):e},d.escapeRegExp=function(e){return(e=Rt(e))&&Ke.test(e)?e.replace(Rn,\"\\\\$&\"):e},d.every=function(e,t,i){var l=pt(e)?bo:Iu;return i&&Mn(e,t,i)&&(t=f),l(e,et(t,3))},d.find=dl,d.findIndex=eu,d.findKey=function(e,t){return ro(e,et(t,3),Ir)},d.findLast=gl,d.findLastIndex=tu,d.findLastKey=function(e,t){return ro(e,et(t,3),fa)},d.floor=uc,d.forEach=su,d.forEachRight=uu,d.forIn=function(e,t){return e==null?e:ca(e,et(t,3),Yn)},d.forInRight=function(e,t){return e==null?e:as(e,et(t,3),Yn)},d.forOwn=function(e,t){return e&&Ir(e,et(t,3))},d.forOwnRight=function(e,t){return e&&fa(e,et(t,3))},d.get=za,d.gt=Al,d.gte=Sl,d.has=function(e,t){return e!=null&&zs(e,t,Lu)},d.hasIn=Ba,d.head=ru,d.identity=Qn,d.includes=function(e,t,i,l){e=Xn(e)?e:Yi(e),i=i&&!l?yt(i):0;var g=e.length;return i<0&&(i=$t(g+i,0)),Xo(e)?i<=g&&e.indexOf(t,i)>-1:!!g&&Fr(e,t,i)>-1},d.indexOf=function(e,t,i){var l=e==null?0:e.length;if(!l)return-1;var g=i==null?0:yt(i);return g<0&&(g=$t(l+g,0)),Fr(e,t,g)},d.inRange=function(e,t,i){return t=ei(t),i===f?(i=t,t=0):i=ei(i),(function(l,g,A){return l>=sn(g,A)&&l<$t(g,A)})(e=br(e),t,i)},d.invoke=ql,d.isArguments=Ei,d.isArray=pt,d.isArrayBuffer=$l,d.isArrayLike=Xn,d.isArrayLikeObject=nn,d.isBoolean=function(e){return e===!0||e===!1||Yt(e)&&Hn(e)==T},d.isBuffer=di,d.isDate=El,d.isElement=function(e){return Yt(e)&&e.nodeType===1&&!mo(e)},d.isEmpty=function(e){if(e==null)return!0;if(Xn(e)&&(pt(e)||typeof e==\"string\"||typeof e.splice==\"function\"||di(e)||Xi(e)||Ei(e)))return!e.length;var t=On(e);if(t==Ee||t==Ae)return!e.size;if(go(e))return!ga(e).length;for(var i in e)if(ct.call(e,i))return!1;return!0},d.isEqual=function(e,t){return fo(e,t)},d.isEqualWith=function(e,t,i){var l=(i=typeof i==\"function\"?i:f)?i(e,t):f;return l===f?fo(e,t,f,i):!!l},d.isError=Ua,d.isFinite=function(e){return typeof e==\"number\"&&jt(e)},d.isFunction=Zr,d.isInteger=du,d.isLength=Ko,d.isMap=gu,d.isMatch=function(e,t){return e===t||da(e,t,ja(t))},d.isMatchWith=function(e,t,i){return i=typeof i==\"function\"?i:f,da(e,t,ja(t),i)},d.isNaN=function(e){return vu(e)&&e!=+e},d.isNative=function(e){if(Ku(e))throw new De(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return ls(e)},d.isNil=function(e){return e==null},d.isNull=function(e){return e===null},d.isNumber=vu,d.isObject=Wt,d.isObjectLike=Yt,d.isPlainObject=mo,d.isRegExp=Fa,d.isSafeInteger=function(e){return du(e)&&e>=-9007199254740991&&e<=D},d.isSet=mu,d.isString=Xo,d.isSymbol=ar,d.isTypedArray=Xi,d.isUndefined=function(e){return e===f},d.isWeakMap=function(e){return Yt(e)&&On(e)==dt},d.isWeakSet=function(e){return Yt(e)&&Hn(e)==\"[object WeakSet]\"},d.join=function(e,t){return e==null?\"\":Bi.call(e,t)},d.kebabCase=zl,d.last=yr,d.lastIndexOf=function(e,t,i){var l=e==null?0:e.length;if(!l)return-1;var g=l;return i!==f&&(g=(g=yt(i))<0?$t(l+g,0):sn(g,l-1)),t==t?(function(A,I,z){for(var Q=z+1;Q--;)if(A[Q]===I)return Q;return Q})(e,t,g):ui(e,qi,g,!0)},d.lowerCase=Bl,d.lowerFirst=Wl,d.lt=kl,d.lte=Dl,d.max=function(e){return e&&e.length?Do(e,Qn,pa):f},d.maxBy=function(e,t){return e&&e.length?Do(e,et(t,2),pa):f},d.mean=function(e){return _o(e,Qn)},d.meanBy=function(e,t){return _o(e,et(t,2))},d.min=function(e){return e&&e.length?Do(e,Qn,va):f},d.minBy=function(e,t){return e&&e.length?Do(e,et(t,2),va):f},d.stubArray=Ya,d.stubFalse=Qa,d.stubObject=function(){return{}},d.stubString=function(){return\"\"},d.stubTrue=function(){return!0},d.multiply=lc,d.nth=function(e,t){return e&&e.length?ds(e,yt(t)):f},d.noConflict=function(){return Ft._===this&&(Ft._=Pn),this},d.noop=Xa,d.now=Wo,d.pad=function(e,t,i){e=Rt(e);var l=(t=yt(t))?Z(e):0;if(!t||l>=t)return e;var g=(t-l)/2;return qo(Ti(g),i)+e+qo(xi(g),i)},d.padEnd=function(e,t,i){e=Rt(e);var l=(t=yt(t))?Z(e):0;return t&&l<t?e+qo(t-l,i):e},d.padStart=function(e,t,i){e=Rt(e);var l=(t=yt(t))?Z(e):0;return t&&l<t?qo(t-l,i)+e:e},d.parseInt=function(e,t,i){return i||t==null?t=0:t&&(t=+t),ua(Rt(e).replace(kn,\"\"),t||0)},d.random=function(e,t,i){if(i&&typeof i!=\"boolean\"&&Mn(e,t,i)&&(t=i=f),i===f&&(typeof t==\"boolean\"?(i=t,t=f):typeof e==\"boolean\"&&(i=e,e=f)),e===f&&t===f?(e=0,t=1):(e=ei(e),t===f?(t=e,e=0):t=ei(t)),e>t){var l=e;e=t,t=l}if(i||e%1||t%1){var g=$o();return sn(e+g*(t-e+xt(\"1e-\"+((g+\"\").length-1))),t)}return ya(e,t)},d.reduce=function(e,t,i){var l=pt(e)?to:io,g=arguments.length<3;return l(e,et(t,4),i,g,ci)},d.reduceRight=function(e,t,i){var l=pt(e)?aa:io,g=arguments.length<3;return l(e,et(t,4),i,g,is)},d.repeat=function(e,t,i){return t=(i?Mn(e,t,i):t===f)?1:yt(t),ba(Rt(e),t)},d.replace=function(){var e=arguments,t=Rt(e[0]);return e.length<3?t:t.replace(e[1],e[2])},d.result=function(e,t,i){var l=-1,g=(t=pi(t,e)).length;for(g||(g=1,e=f);++l<g;){var A=e==null?f:e[Pr(t[l])];A===f&&(l=g,A=i),e=Zr(A)?A.call(e):A}return e},d.round=cc,d.runInContext=V,d.sample=function(e){return(pt(e)?Nt:Hu)(e)},d.size=function(e){if(e==null)return 0;if(Xn(e))return Xo(e)?Z(e):e.length;var t=On(e);return t==Ee||t==Ae?e.size:ga(e).length},d.snakeCase=Gl,d.some=function(e,t,i){var l=pt(e)?Pi:zu;return i&&Mn(e,t,i)&&(t=f),l(e,et(t,3))},d.sortedIndex=function(e,t){return No(e,t)},d.sortedIndexBy=function(e,t,i){return wa(e,t,et(i,2))},d.sortedIndexOf=function(e,t){var i=e==null?0:e.length;if(i){var l=No(e,t);if(l<i&&kr(e[l],t))return l}return-1},d.sortedLastIndex=function(e,t){return No(e,t,!0)},d.sortedLastIndexBy=function(e,t,i){return wa(e,t,et(i,2),!0)},d.sortedLastIndexOf=function(e,t){if(e!=null&&e.length){var i=No(e,t,!0)-1;if(kr(e[i],t))return i}return-1},d.startCase=Vl,d.startsWith=function(e,t,i){return e=Rt(e),i=i==null?0:Ci(yt(i),0,e.length),t=or(t),e.slice(i,i+t.length)==t},d.subtract=fc,d.sum=function(e){return e&&e.length?bi(e,Qn):0},d.sumBy=function(e,t){return e&&e.length?bi(e,et(t,2)):0},d.template=function(e,t,i){var l=d.templateSettings;i&&Mn(e,t,i)&&(t=f),e=Rt(e),t=Yo({},t,l,Hs);var g,A,I=Yo({},t.imports,l.imports,Hs),z=wn(I),Q=n(I,z),de=0,pe=t.interpolate||F,ye=\"__p += '\",Ie=Sn((t.escape||F).source+\"|\"+pe.source+\"|\"+(pe===Hr?Vt:F).source+\"|\"+(t.evaluate||F).source+\"|$\",\"g\"),Me=\"//# sourceURL=\"+(ct.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ai+\"]\")+`\n`;e.replace(Ie,(function(xe,tt,Se,ht,st,Et){return Se||(Se=ht),ye+=e.slice(de,Et).replace(K,x),tt&&(g=!0,ye+=`' +\n__e(`+tt+`) +\n'`),st&&(A=!0,ye+=`';\n`+st+`;\n__p += '`),Se&&(ye+=`' +\n((__t = (`+Se+`)) == null ? '' : __t) +\n'`),de=Et+xe.length,xe})),ye+=`';\n`;var Je=ct.call(t,\"variable\")&&t.variable;if(Je){if(zn.test(Je))throw new De(\"Invalid `variable` option passed into `_.template`\")}else ye=`with (obj) {\n`+ye+`\n}\n`;ye=(A?ye.replace(qe,\"\"):ye).replace(ot,\"$1\").replace(bt,\"$1;\"),ye=\"function(\"+(Je||\"obj\")+`) {\n`+(Je?\"\":`obj || (obj = {});\n`)+\"var __t, __p = ''\"+(g?\", __e = _.escape\":\"\")+(A?`, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n`:`;\n`)+ye+`return __p\n}`;var ge=ku((function(){return lt(z,Me+\"return \"+ye).apply(f,Q)}));if(ge.source=ye,Ua(ge))throw ge;return ge},d.times=function(e,t){if((e=yt(e))<1||e>D)return[];var i=p,l=sn(e,p);t=et(t),e-=p;for(var g=oo(l,t);++i<e;)t(i);return g},d.toFinite=ei,d.toInteger=yt,d.toLength=bu,d.toLower=function(e){return Rt(e).toLowerCase()},d.toNumber=br,d.toSafeInteger=function(e){return e?Ci(yt(e),-9007199254740991,D):e===0?e:0},d.toString=Rt,d.toUpper=function(e){return Rt(e).toUpperCase()},d.trim=function(e,t,i){if((e=Rt(e))&&(i||t===f))return xo(e);if(!e||!(t=or(t)))return e;var l=$e(e),g=$e(t);return hi(l,o(l,g),s(l,g)+1).join(\"\")},d.trimEnd=function(e,t,i){if((e=Rt(e))&&(i||t===f))return e.slice(0,Qe(e)+1);if(!e||!(t=or(t)))return e;var l=$e(e);return hi(l,0,s(l,$e(t))+1).join(\"\")},d.trimStart=function(e,t,i){if((e=Rt(e))&&(i||t===f))return e.replace(kn,\"\");if(!e||!(t=or(t)))return e;var l=$e(e);return hi(l,o(l,$e(t))).join(\"\")},d.truncate=function(e,t){var i=30,l=\"...\";if(Wt(t)){var g=\"separator\"in t?t.separator:g;i=\"length\"in t?yt(t.length):i,l=\"omission\"in t?or(t.omission):l}var A=(e=Rt(e)).length;if(U(e)){var I=$e(e);A=I.length}if(i>=A)return e;var z=i-Z(l);if(z<1)return l;var Q=I?hi(I,0,z).join(\"\"):e.slice(0,z);if(g===f)return Q+l;if(I&&(z+=Q.length-z),Fa(g)){if(e.slice(z).search(g)){var de,pe=Q;for(g.global||(g=Sn(g.source,Rt(ur.exec(g))+\"g\")),g.lastIndex=0;de=g.exec(pe);)var ye=de.index;Q=Q.slice(0,ye===f?z:ye)}}else if(e.indexOf(or(g),z)!=z){var Ie=Q.lastIndexOf(g);Ie>-1&&(Q=Q.slice(0,Ie))}return Q+l},d.unescape=function(e){return(e=Rt(e))&&Gt.test(e)?e.replace(gt,je):e},d.uniqueId=function(e){var t=++dr;return Rt(e)+t},d.upperCase=Kl,d.upperFirst=Wa,d.each=su,d.eachRight=uu,d.first=ru,Ka(d,(Ja={},Ir(d,(function(e,t){ct.call(d.prototype,t)||(Ja[t]=e)})),Ja),{chain:!1}),d.VERSION=\"4.17.21\",In([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],(function(e){d[e].placeholder=d})),In([\"drop\",\"take\"],(function(e,t){_e.prototype[e]=function(i){i=i===f?1:$t(yt(i),0);var l=this.__filtered__&&!t?new _e(this):this.clone();return l.__filtered__?l.__takeCount__=sn(i,l.__takeCount__):l.__views__.push({size:sn(i,p),type:e+(l.__dir__<0?\"Right\":\"\")}),l},_e.prototype[e+\"Right\"]=function(i){return this.reverse()[e](i).reverse()}})),In([\"filter\",\"map\",\"takeWhile\"],(function(e,t){var i=t+1,l=i==1||i==3;_e.prototype[e]=function(g){var A=this.clone();return A.__iteratees__.push({iteratee:et(g,3),type:i}),A.__filtered__=A.__filtered__||l,A}})),In([\"head\",\"last\"],(function(e,t){var i=\"take\"+(t?\"Right\":\"\");_e.prototype[e]=function(){return this[i](1).value()[0]}})),In([\"initial\",\"tail\"],(function(e,t){var i=\"drop\"+(t?\"\":\"Right\");_e.prototype[e]=function(){return this.__filtered__?new _e(this):this[i](1)}})),_e.prototype.compact=function(){return this.filter(Qn)},_e.prototype.find=function(e){return this.filter(e).head()},_e.prototype.findLast=function(e){return this.reverse().find(e)},_e.prototype.invokeMap=wt((function(e,t){return typeof e==\"function\"?new _e(this):this.map((function(i){return co(i,e,t)}))})),_e.prototype.reject=function(e){return this.filter(Vo(et(e)))},_e.prototype.slice=function(e,t){e=yt(e);var i=this;return i.__filtered__&&(e>0||t<0)?new _e(i):(e<0?i=i.takeRight(-e):e&&(i=i.drop(e)),t!==f&&(i=(t=yt(t))<0?i.dropRight(-t):i.take(t-e)),i)},_e.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},_e.prototype.toArray=function(){return this.take(p)},Ir(_e.prototype,(function(e,t){var i=/^(?:filter|find|map|reject)|While$/.test(t),l=/^(?:head|last)$/.test(t),g=d[l?\"take\"+(t==\"last\"?\"Right\":\"\"):t],A=l||/^find/.test(t);g&&(d.prototype[t]=function(){var I=this.__wrapped__,z=l?[1]:arguments,Q=I instanceof _e,de=z[0],pe=Q||pt(I),ye=function(tt){var Se=g.apply(d,Or([tt],z));return l&&Ie?Se[0]:Se};pe&&i&&typeof de==\"function\"&&de.length!=1&&(Q=pe=!1);var Ie=this.__chain__,Me=!!this.__actions__.length,Je=A&&!Ie,ge=Q&&!Me;if(!A&&pe){I=ge?I:new _e(this);var xe=e.apply(I,z);return xe.__actions__.push({func:zo,args:[ye],thisArg:f}),new Ue(xe,Ie)}return Je&&ge?e.apply(this,z):(xe=this.thru(ye),Je?l?xe.value()[0]:xe.value():xe)})})),In([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],(function(e){var t=cn[e],i=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",l=/^(?:pop|shift)$/.test(e);d.prototype[e]=function(){var g=arguments;if(l&&!this.__chain__){var A=this.value();return t.apply(pt(A)?A:[],g)}return this[i]((function(I){return t.apply(pt(I)?I:[],g)}))}})),Ir(_e.prototype,(function(e,t){var i=d[t];if(i){var l=i.name+\"\";ct.call(Rr,l)||(Rr[l]=[]),Rr[l].push({name:t,func:i})}})),Rr[Lo(f,2).name]=[{name:\"wrapper\",func:f}],_e.prototype.clone=function(){var e=new _e(this.__wrapped__);return e.__actions__=Kn(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Kn(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Kn(this.__views__),e},_e.prototype.reverse=function(){if(this.__filtered__){var e=new _e(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},_e.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,i=pt(e),l=t<0,g=i?e.length:0,A=(function(Et,We,nt){for(var pn=-1,rn=nt.length;++pn<rn;){var Un=nt[pn],zt=Un.size;switch(Un.type){case\"drop\":Et+=zt;break;case\"dropRight\":We-=zt;break;case\"take\":We=sn(We,Et+zt);break;case\"takeRight\":Et=$t(Et,We-zt)}}return{start:Et,end:We}})(0,g,this.__views__),I=A.start,z=A.end,Q=z-I,de=l?z:I-1,pe=this.__iteratees__,ye=pe.length,Ie=0,Me=sn(Q,this.__takeCount__);if(!i||!l&&g==Q&&Me==Q)return xs(e,this.__actions__);var Je=[];e:for(;Q--&&Ie<Me;){for(var ge=-1,xe=e[de+=t];++ge<ye;){var tt=pe[ge],Se=tt.iteratee,ht=tt.type,st=Se(xe);if(ht==2)xe=st;else if(!st){if(ht==1)continue e;break e}}Je[Ie++]=xe}return Je},d.prototype.at=pl,d.prototype.chain=function(){return au(this)},d.prototype.commit=function(){return new Ue(this.value(),this.__chain__)},d.prototype.next=function(){this.__values__===f&&(this.__values__=yu(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?f:this.__values__[this.__index__++]}},d.prototype.plant=function(e){for(var t,i=this;i instanceof Ze;){var l=Zs(i);l.__index__=0,l.__values__=f,t?g.__wrapped__=l:t=l;var g=l;i=i.__wrapped__}return g.__wrapped__=e,t},d.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof _e){var t=e;return this.__actions__.length&&(t=new _e(this)),(t=t.reverse()).__actions__.push({func:zo,args:[Pa],thisArg:f}),new Ue(t,this.__chain__)}return this.thru(Pa)},d.prototype.toJSON=d.prototype.valueOf=d.prototype.value=function(){return xs(this.__wrapped__,this.__actions__)},d.prototype.first=d.prototype.head,_i&&(d.prototype[_i]=function(){return this}),d})();Ft._=Lt,(q=(function(){return Lt}).call(L,Y,L,b))===f||(b.exports=q)}).call(this)},155:b=>{var L,Y,q=b.exports={};function f(){throw new Error(\"setTimeout has not been defined\")}function _(){throw new Error(\"clearTimeout has not been defined\")}function j(y){if(L===setTimeout)return setTimeout(y,0);if((L===f||!L)&&setTimeout)return L=setTimeout,setTimeout(y,0);try{return L(y,0)}catch{try{return L.call(null,y,0)}catch{return L.call(this,y,0)}}}(function(){try{L=typeof setTimeout==\"function\"?setTimeout:f}catch{L=f}try{Y=typeof clearTimeout==\"function\"?clearTimeout:_}catch{Y=_}})();var S,k=[],P=!1,N=-1;function w(){P&&S&&(P=!1,S.length?k=S.concat(k):N=-1,k.length&&ee())}function ee(){if(!P){var y=j(w);P=!0;for(var p=k.length;p;){for(S=k,k=[];++N<p;)S&&S[N].run();N=-1,p=k.length}S=null,P=!1,(function(c){if(Y===clearTimeout)return clearTimeout(c);if((Y===_||!Y)&&clearTimeout)return Y=clearTimeout,clearTimeout(c);try{return Y(c)}catch{try{return Y.call(null,c)}catch{return Y.call(this,c)}}})(y)}}function E(y,p){this.fun=y,this.array=p}function D(){}q.nextTick=function(y){var p=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)p[c-1]=arguments[c];k.push(new E(y,p)),k.length!==1||P||j(ee)},E.prototype.run=function(){this.fun.apply(null,this.array)},q.title=\"browser\",q.browser=!0,q.env={},q.argv=[],q.version=\"\",q.versions={},q.on=D,q.addListener=D,q.once=D,q.off=D,q.removeListener=D,q.removeAllListeners=D,q.emit=D,q.prependListener=D,q.prependOnceListener=D,q.listeners=function(y){return[]},q.binding=function(y){throw new Error(\"process.binding is not supported\")},q.cwd=function(){return\"/\"},q.chdir=function(y){throw new Error(\"process.chdir is not supported\")},q.umask=function(){return 0}},686:(b,L,Y)=>{var q,f,_;f=[Y(755)],(_=typeof(q=function(j){var S=(function(){if(j&&j.fn&&j.fn.select2&&j.fn.select2.amd)var P=j.fn.select2.amd;var N,w,ee;return P&&P.requirejs||(P?w=P:P={},(function(E){var D,y,p,c,u={},v={},T={},H={},B=Object.prototype.hasOwnProperty,le=[].slice,a=/\\.js$/;function Ee(ie,oe){return B.call(ie,oe)}function Ge(ie,oe){var Pe,it,Le,Ve,At,Mt,ze,re,Fe,qe,ot,bt=oe&&oe.split(\"/\"),gt=T.map,Ct=gt&&gt[\"*\"]||{};if(ie){for(At=(ie=ie.split(\"/\")).length-1,T.nodeIdCompat&&a.test(ie[At])&&(ie[At]=ie[At].replace(a,\"\")),ie[0].charAt(0)===\".\"&&bt&&(ie=bt.slice(0,bt.length-1).concat(ie)),Fe=0;Fe<ie.length;Fe++)if((ot=ie[Fe])===\".\")ie.splice(Fe,1),Fe-=1;else if(ot===\"..\"){if(Fe===0||Fe===1&&ie[2]===\"..\"||ie[Fe-1]===\"..\")continue;Fe>0&&(ie.splice(Fe-1,2),Fe-=2)}ie=ie.join(\"/\")}if((bt||Ct)&&gt){for(Fe=(Pe=ie.split(\"/\")).length;Fe>0;Fe-=1){if(it=Pe.slice(0,Fe).join(\"/\"),bt){for(qe=bt.length;qe>0;qe-=1)if((Le=gt[bt.slice(0,qe).join(\"/\")])&&(Le=Le[it])){Ve=Le,Mt=Fe;break}}if(Ve)break;!ze&&Ct&&Ct[it]&&(ze=Ct[it],re=Fe)}!Ve&&ze&&(Ve=ze,Mt=re),Ve&&(Pe.splice(0,Mt,Ve),ie=Pe.join(\"/\"))}return ie}function ve(ie,oe){return function(){var Pe=le.call(arguments,0);return typeof Pe[0]!=\"string\"&&Pe.length===1&&Pe.push(null),y.apply(E,Pe.concat([ie,oe]))}}function Re(ie){return function(oe){return Ge(oe,ie)}}function ce(ie){return function(oe){u[ie]=oe}}function Ae(ie){if(Ee(v,ie)){var oe=v[ie];delete v[ie],H[ie]=!0,D.apply(E,oe)}if(!Ee(u,ie)&&!Ee(H,ie))throw new Error(\"No \"+ie);return u[ie]}function be(ie){var oe,Pe=ie?ie.indexOf(\"!\"):-1;return Pe>-1&&(oe=ie.substring(0,Pe),ie=ie.substring(Pe+1,ie.length)),[oe,ie]}function rt(ie){return ie?be(ie):[]}function dt(ie){return function(){return T&&T.config&&T.config[ie]||{}}}p=function(ie,oe){var Pe,it=be(ie),Le=it[0],Ve=oe[1];return ie=it[1],Le&&(Pe=Ae(Le=Ge(Le,Ve))),Le?ie=Pe&&Pe.normalize?Pe.normalize(ie,Re(Ve)):Ge(ie,Ve):(Le=(it=be(ie=Ge(ie,Ve)))[0],ie=it[1],Le&&(Pe=Ae(Le))),{f:Le?Le+\"!\"+ie:ie,n:ie,pr:Le,p:Pe}},c={require:function(ie){return ve(ie)},exports:function(ie){var oe=u[ie];return oe!==void 0?oe:u[ie]={}},module:function(ie){return{id:ie,uri:\"\",exports:u[ie],config:dt(ie)}}},D=function(ie,oe,Pe,it){var Le,Ve,At,Mt,ze,re,Fe,qe=[],ot=typeof Pe;if(re=rt(it=it||ie),ot===\"undefined\"||ot===\"function\"){for(oe=!oe.length&&Pe.length?[\"require\",\"exports\",\"module\"]:oe,ze=0;ze<oe.length;ze+=1)if((Ve=(Mt=p(oe[ze],re)).f)===\"require\")qe[ze]=c.require(ie);else if(Ve===\"exports\")qe[ze]=c.exports(ie),Fe=!0;else if(Ve===\"module\")Le=qe[ze]=c.module(ie);else if(Ee(u,Ve)||Ee(v,Ve)||Ee(H,Ve))qe[ze]=Ae(Ve);else{if(!Mt.p)throw new Error(ie+\" missing \"+Ve);Mt.p.load(Mt.n,ve(it,!0),ce(Ve),{}),qe[ze]=u[Ve]}At=Pe?Pe.apply(u[ie],qe):void 0,ie&&(Le&&Le.exports!==E&&Le.exports!==u[ie]?u[ie]=Le.exports:At===E&&Fe||(u[ie]=At))}else ie&&(u[ie]=Pe)},N=w=y=function(ie,oe,Pe,it,Le){if(typeof ie==\"string\")return c[ie]?c[ie](oe):Ae(p(ie,rt(oe)).f);if(!ie.splice){if((T=ie).deps&&y(T.deps,T.callback),!oe)return;oe.splice?(ie=oe,oe=Pe,Pe=null):ie=E}return oe=oe||function(){},typeof Pe==\"function\"&&(Pe=it,it=Le),it?D(E,ie,oe,Pe):setTimeout((function(){D(E,ie,oe,Pe)}),4),y},y.config=function(ie){return y(ie)},N._defined=u,(ee=function(ie,oe,Pe){if(typeof ie!=\"string\")throw new Error(\"See almond README: incorrect module build, no module name\");oe.splice||(Pe=oe,oe=[]),Ee(u,ie)||Ee(v,ie)||(v[ie]=[ie,oe,Pe])}).amd={jQuery:!0}})(),P.requirejs=N,P.require=w,P.define=ee),P.define(\"almond\",(function(){})),P.define(\"jquery\",[],(function(){var E=j||$;return E==null&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),E})),P.define(\"select2/utils\",[\"jquery\"],(function(E){var D={};function y(u){var v=u.prototype,T=[];for(var H in v)typeof v[H]==\"function\"&&H!==\"constructor\"&&T.push(H);return T}D.Extend=function(u,v){var T={}.hasOwnProperty;function H(){this.constructor=u}for(var B in v)T.call(v,B)&&(u[B]=v[B]);return H.prototype=v.prototype,u.prototype=new H,u.__super__=v.prototype,u},D.Decorate=function(u,v){var T=y(v),H=y(u);function B(){var ce=Array.prototype.unshift,Ae=v.prototype.constructor.length,be=u.prototype.constructor;Ae>0&&(ce.call(arguments,u.prototype.constructor),be=v.prototype.constructor),be.apply(this,arguments)}function le(){this.constructor=B}v.displayName=u.displayName,B.prototype=new le;for(var a=0;a<H.length;a++){var Ee=H[a];B.prototype[Ee]=u.prototype[Ee]}for(var Ge=function(ce){var Ae=function(){};ce in B.prototype&&(Ae=B.prototype[ce]);var be=v.prototype[ce];return function(){return Array.prototype.unshift.call(arguments,Ae),be.apply(this,arguments)}},ve=0;ve<T.length;ve++){var Re=T[ve];B.prototype[Re]=Ge(Re)}return B};var p=function(){this.listeners={}};p.prototype.on=function(u,v){this.listeners=this.listeners||{},u in this.listeners?this.listeners[u].push(v):this.listeners[u]=[v]},p.prototype.trigger=function(u){var v=Array.prototype.slice,T=v.call(arguments,1);this.listeners=this.listeners||{},T==null&&(T=[]),T.length===0&&T.push({}),T[0]._type=u,u in this.listeners&&this.invoke(this.listeners[u],v.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},p.prototype.invoke=function(u,v){for(var T=0,H=u.length;T<H;T++)u[T].apply(this,v)},D.Observable=p,D.generateChars=function(u){for(var v=\"\",T=0;T<u;T++)v+=Math.floor(36*Math.random()).toString(36);return v},D.bind=function(u,v){return function(){u.apply(v,arguments)}},D._convertData=function(u){for(var v in u){var T=v.split(\"-\"),H=u;if(T.length!==1){for(var B=0;B<T.length;B++){var le=T[B];(le=le.substring(0,1).toLowerCase()+le.substring(1))in H||(H[le]={}),B==T.length-1&&(H[le]=u[v]),H=H[le]}delete u[v]}}return u},D.hasScroll=function(u,v){var T=E(v),H=v.style.overflowX,B=v.style.overflowY;return(H!==B||B!==\"hidden\"&&B!==\"visible\")&&(H===\"scroll\"||B===\"scroll\"||T.innerHeight()<v.scrollHeight||T.innerWidth()<v.scrollWidth)},D.escapeMarkup=function(u){var v={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#47;\"};return typeof u!=\"string\"?u:String(u).replace(/[&<>\"'\\/\\\\]/g,(function(T){return v[T]}))},D.appendMany=function(u,v){if(E.fn.jquery.substr(0,3)===\"1.7\"){var T=E();E.map(v,(function(H){T=T.add(H)})),v=T}u.append(v)},D.__cache={};var c=0;return D.GetUniqueElementId=function(u){var v=u.getAttribute(\"data-select2-id\");return v==null&&(u.id?(v=u.id,u.setAttribute(\"data-select2-id\",v)):(u.setAttribute(\"data-select2-id\",++c),v=c.toString())),v},D.StoreData=function(u,v,T){var H=D.GetUniqueElementId(u);D.__cache[H]||(D.__cache[H]={}),D.__cache[H][v]=T},D.GetData=function(u,v){var T=D.GetUniqueElementId(u);return v?D.__cache[T]&&D.__cache[T][v]!=null?D.__cache[T][v]:E(u).data(v):D.__cache[T]},D.RemoveData=function(u){var v=D.GetUniqueElementId(u);D.__cache[v]!=null&&delete D.__cache[v],u.removeAttribute(\"data-select2-id\")},D})),P.define(\"select2/results\",[\"jquery\",\"./utils\"],(function(E,D){function y(p,c,u){this.$element=p,this.data=u,this.options=c,y.__super__.constructor.call(this)}return D.Extend(y,D.Observable),y.prototype.render=function(){var p=E('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');return this.options.get(\"multiple\")&&p.attr(\"aria-multiselectable\",\"true\"),this.$results=p,p},y.prototype.clear=function(){this.$results.empty()},y.prototype.displayMessage=function(p){var c=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var u=E('<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'),v=this.options.get(\"translations\").get(p.message);u.append(c(v(p.args))),u[0].className+=\" select2-results__message\",this.$results.append(u)},y.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},y.prototype.append=function(p){this.hideLoading();var c=[];if(p.results!=null&&p.results.length!==0){p.results=this.sort(p.results);for(var u=0;u<p.results.length;u++){var v=p.results[u],T=this.option(v);c.push(T)}this.$results.append(c)}else this.$results.children().length===0&&this.trigger(\"results:message\",{message:\"noResults\"})},y.prototype.position=function(p,c){c.find(\".select2-results\").append(p)},y.prototype.sort=function(p){return this.options.get(\"sorter\")(p)},y.prototype.highlightFirstItem=function(){var p=this.$results.find(\".select2-results__option[aria-selected]\"),c=p.filter(\"[aria-selected=true]\");c.length>0?c.first().trigger(\"mouseenter\"):p.first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},y.prototype.setClasses=function(){var p=this;this.data.current((function(c){var u=E.map(c,(function(v){return v.id.toString()}));p.$results.find(\".select2-results__option[aria-selected]\").each((function(){var v=E(this),T=D.GetData(this,\"data\"),H=\"\"+T.id;T.element!=null&&T.element.selected||T.element==null&&E.inArray(H,u)>-1?v.attr(\"aria-selected\",\"true\"):v.attr(\"aria-selected\",\"false\")}))}))},y.prototype.showLoading=function(p){this.hideLoading();var c={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(p)},u=this.option(c);u.className+=\" loading-results\",this.$results.prepend(u)},y.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},y.prototype.option=function(p){var c=document.createElement(\"li\");c.className=\"select2-results__option\";var u={role:\"option\",\"aria-selected\":\"false\"},v=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var T in(p.element!=null&&v.call(p.element,\":disabled\")||p.element==null&&p.disabled)&&(delete u[\"aria-selected\"],u[\"aria-disabled\"]=\"true\"),p.id==null&&delete u[\"aria-selected\"],p._resultId!=null&&(c.id=p._resultId),p.title&&(c.title=p.title),p.children&&(u.role=\"group\",u[\"aria-label\"]=p.text,delete u[\"aria-selected\"]),u){var H=u[T];c.setAttribute(T,H)}if(p.children){var B=E(c),le=document.createElement(\"strong\");le.className=\"select2-results__group\",E(le),this.template(p,le);for(var a=[],Ee=0;Ee<p.children.length;Ee++){var Ge=p.children[Ee],ve=this.option(Ge);a.push(ve)}var Re=E(\"<ul></ul>\",{class:\"select2-results__options select2-results__options--nested\"});Re.append(a),B.append(le),B.append(Re)}else this.template(p,c);return D.StoreData(c,\"data\",p),c},y.prototype.bind=function(p,c){var u=this,v=p.id+\"-results\";this.$results.attr(\"id\",v),p.on(\"results:all\",(function(T){u.clear(),u.append(T.data),p.isOpen()&&(u.setClasses(),u.highlightFirstItem())})),p.on(\"results:append\",(function(T){u.append(T.data),p.isOpen()&&u.setClasses()})),p.on(\"query\",(function(T){u.hideMessages(),u.showLoading(T)})),p.on(\"select\",(function(){p.isOpen()&&(u.setClasses(),u.options.get(\"scrollAfterSelect\")&&u.highlightFirstItem())})),p.on(\"unselect\",(function(){p.isOpen()&&(u.setClasses(),u.options.get(\"scrollAfterSelect\")&&u.highlightFirstItem())})),p.on(\"open\",(function(){u.$results.attr(\"aria-expanded\",\"true\"),u.$results.attr(\"aria-hidden\",\"false\"),u.setClasses(),u.ensureHighlightVisible()})),p.on(\"close\",(function(){u.$results.attr(\"aria-expanded\",\"false\"),u.$results.attr(\"aria-hidden\",\"true\"),u.$results.removeAttr(\"aria-activedescendant\")})),p.on(\"results:toggle\",(function(){var T=u.getHighlightedResults();T.length!==0&&T.trigger(\"mouseup\")})),p.on(\"results:select\",(function(){var T=u.getHighlightedResults();if(T.length!==0){var H=D.GetData(T[0],\"data\");T.attr(\"aria-selected\")==\"true\"?u.trigger(\"close\",{}):u.trigger(\"select\",{data:H})}})),p.on(\"results:previous\",(function(){var T=u.getHighlightedResults(),H=u.$results.find(\"[aria-selected]\"),B=H.index(T);if(!(B<=0)){var le=B-1;T.length===0&&(le=0);var a=H.eq(le);a.trigger(\"mouseenter\");var Ee=u.$results.offset().top,Ge=a.offset().top,ve=u.$results.scrollTop()+(Ge-Ee);le===0?u.$results.scrollTop(0):Ge-Ee<0&&u.$results.scrollTop(ve)}})),p.on(\"results:next\",(function(){var T=u.getHighlightedResults(),H=u.$results.find(\"[aria-selected]\"),B=H.index(T)+1;if(!(B>=H.length)){var le=H.eq(B);le.trigger(\"mouseenter\");var a=u.$results.offset().top+u.$results.outerHeight(!1),Ee=le.offset().top+le.outerHeight(!1),Ge=u.$results.scrollTop()+Ee-a;B===0?u.$results.scrollTop(0):Ee>a&&u.$results.scrollTop(Ge)}})),p.on(\"results:focus\",(function(T){T.element.addClass(\"select2-results__option--highlighted\")})),p.on(\"results:message\",(function(T){u.displayMessage(T)})),E.fn.mousewheel&&this.$results.on(\"mousewheel\",(function(T){var H=u.$results.scrollTop(),B=u.$results.get(0).scrollHeight-H+T.deltaY,le=T.deltaY>0&&H-T.deltaY<=0,a=T.deltaY<0&&B<=u.$results.height();le?(u.$results.scrollTop(0),T.preventDefault(),T.stopPropagation()):a&&(u.$results.scrollTop(u.$results.get(0).scrollHeight-u.$results.height()),T.preventDefault(),T.stopPropagation())})),this.$results.on(\"mouseup\",\".select2-results__option[aria-selected]\",(function(T){var H=E(this),B=D.GetData(this,\"data\");H.attr(\"aria-selected\")!==\"true\"?u.trigger(\"select\",{originalEvent:T,data:B}):u.options.get(\"multiple\")?u.trigger(\"unselect\",{originalEvent:T,data:B}):u.trigger(\"close\",{})})),this.$results.on(\"mouseenter\",\".select2-results__option[aria-selected]\",(function(T){var H=D.GetData(this,\"data\");u.getHighlightedResults().removeClass(\"select2-results__option--highlighted\"),u.trigger(\"results:focus\",{data:H,element:E(this)})}))},y.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},y.prototype.destroy=function(){this.$results.remove()},y.prototype.ensureHighlightVisible=function(){var p=this.getHighlightedResults();if(p.length!==0){var c=this.$results.find(\"[aria-selected]\").index(p),u=this.$results.offset().top,v=p.offset().top,T=this.$results.scrollTop()+(v-u),H=v-u;T-=2*p.outerHeight(!1),c<=2?this.$results.scrollTop(0):(H>this.$results.outerHeight()||H<0)&&this.$results.scrollTop(T)}},y.prototype.template=function(p,c){var u=this.options.get(\"templateResult\"),v=this.options.get(\"escapeMarkup\"),T=u(p,c);T==null?c.style.display=\"none\":typeof T==\"string\"?c.innerHTML=v(T):E(c).append(T)},y})),P.define(\"select2/keys\",[],(function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}})),P.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],(function(E,D,y){function p(c,u){this.$element=c,this.options=u,p.__super__.constructor.call(this)}return D.Extend(p,D.Observable),p.prototype.render=function(){var c=E('<span class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\"></span>');return this._tabindex=0,D.GetData(this.$element[0],\"old-tabindex\")!=null?this._tabindex=D.GetData(this.$element[0],\"old-tabindex\"):this.$element.attr(\"tabindex\")!=null&&(this._tabindex=this.$element.attr(\"tabindex\")),c.attr(\"title\",this.$element.attr(\"title\")),c.attr(\"tabindex\",this._tabindex),c.attr(\"aria-disabled\",\"false\"),this.$selection=c,c},p.prototype.bind=function(c,u){var v=this,T=c.id+\"-results\";this.container=c,this.$selection.on(\"focus\",(function(H){v.trigger(\"focus\",H)})),this.$selection.on(\"blur\",(function(H){v._handleBlur(H)})),this.$selection.on(\"keydown\",(function(H){v.trigger(\"keypress\",H),H.which===y.SPACE&&H.preventDefault()})),c.on(\"results:focus\",(function(H){v.$selection.attr(\"aria-activedescendant\",H.data._resultId)})),c.on(\"selection:update\",(function(H){v.update(H.data)})),c.on(\"open\",(function(){v.$selection.attr(\"aria-expanded\",\"true\"),v.$selection.attr(\"aria-owns\",T),v._attachCloseHandler(c)})),c.on(\"close\",(function(){v.$selection.attr(\"aria-expanded\",\"false\"),v.$selection.removeAttr(\"aria-activedescendant\"),v.$selection.removeAttr(\"aria-owns\"),v.$selection.trigger(\"focus\"),v._detachCloseHandler(c)})),c.on(\"enable\",(function(){v.$selection.attr(\"tabindex\",v._tabindex),v.$selection.attr(\"aria-disabled\",\"false\")})),c.on(\"disable\",(function(){v.$selection.attr(\"tabindex\",\"-1\"),v.$selection.attr(\"aria-disabled\",\"true\")}))},p.prototype._handleBlur=function(c){var u=this;window.setTimeout((function(){document.activeElement==u.$selection[0]||E.contains(u.$selection[0],document.activeElement)||u.trigger(\"blur\",c)}),1)},p.prototype._attachCloseHandler=function(c){E(document.body).on(\"mousedown.select2.\"+c.id,(function(u){var v=E(u.target).closest(\".select2\");E(\".select2.select2-container--open\").each((function(){this!=v[0]&&D.GetData(this,\"element\").select2(\"close\")}))}))},p.prototype._detachCloseHandler=function(c){E(document.body).off(\"mousedown.select2.\"+c.id)},p.prototype.position=function(c,u){u.find(\".selection\").append(c)},p.prototype.destroy=function(){this._detachCloseHandler(this.container)},p.prototype.update=function(c){throw new Error(\"The `update` method must be defined in child classes.\")},p.prototype.isEnabled=function(){return!this.isDisabled()},p.prototype.isDisabled=function(){return this.options.get(\"disabled\")},p})),P.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],(function(E,D,y,p){function c(){c.__super__.constructor.apply(this,arguments)}return y.Extend(c,D),c.prototype.render=function(){var u=c.__super__.render.call(this);return u.addClass(\"select2-selection--single\"),u.html('<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'),u},c.prototype.bind=function(u,v){var T=this;c.__super__.bind.apply(this,arguments);var H=u.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",H).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",H),this.$selection.on(\"mousedown\",(function(B){B.which===1&&T.trigger(\"toggle\",{originalEvent:B})})),this.$selection.on(\"focus\",(function(B){})),this.$selection.on(\"blur\",(function(B){})),u.on(\"focus\",(function(B){u.isOpen()||T.$selection.trigger(\"focus\")}))},c.prototype.clear=function(){var u=this.$selection.find(\".select2-selection__rendered\");u.empty(),u.removeAttr(\"title\")},c.prototype.display=function(u,v){var T=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(T(u,v))},c.prototype.selectionContainer=function(){return E(\"<span></span>\")},c.prototype.update=function(u){if(u.length!==0){var v=u[0],T=this.$selection.find(\".select2-selection__rendered\"),H=this.display(v,T);T.empty().append(H);var B=v.title||v.text;B?T.attr(\"title\",B):T.removeAttr(\"title\")}else this.clear()},c})),P.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],(function(E,D,y){function p(c,u){p.__super__.constructor.apply(this,arguments)}return y.Extend(p,D),p.prototype.render=function(){var c=p.__super__.render.call(this);return c.addClass(\"select2-selection--multiple\"),c.html('<ul class=\"select2-selection__rendered\"></ul>'),c},p.prototype.bind=function(c,u){var v=this;p.__super__.bind.apply(this,arguments),this.$selection.on(\"click\",(function(T){v.trigger(\"toggle\",{originalEvent:T})})),this.$selection.on(\"click\",\".select2-selection__choice__remove\",(function(T){if(!v.isDisabled()){var H=E(this).parent(),B=y.GetData(H[0],\"data\");v.trigger(\"unselect\",{originalEvent:T,data:B})}}))},p.prototype.clear=function(){var c=this.$selection.find(\".select2-selection__rendered\");c.empty(),c.removeAttr(\"title\")},p.prototype.display=function(c,u){var v=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(v(c,u))},p.prototype.selectionContainer=function(){return E('<li class=\"select2-selection__choice\"><span class=\"select2-selection__choice__remove\" role=\"presentation\">&times;</span></li>')},p.prototype.update=function(c){if(this.clear(),c.length!==0){for(var u=[],v=0;v<c.length;v++){var T=c[v],H=this.selectionContainer(),B=this.display(T,H);H.append(B);var le=T.title||T.text;le&&H.attr(\"title\",le),y.StoreData(H[0],\"data\",T),u.push(H)}var a=this.$selection.find(\".select2-selection__rendered\");y.appendMany(a,u)}},p})),P.define(\"select2/selection/placeholder\",[\"../utils\"],(function(E){function D(y,p,c){this.placeholder=this.normalizePlaceholder(c.get(\"placeholder\")),y.call(this,p,c)}return D.prototype.normalizePlaceholder=function(y,p){return typeof p==\"string\"&&(p={id:\"\",text:p}),p},D.prototype.createPlaceholder=function(y,p){var c=this.selectionContainer();return c.html(this.display(p)),c.addClass(\"select2-selection__placeholder\").removeClass(\"select2-selection__choice\"),c},D.prototype.update=function(y,p){var c=p.length==1&&p[0].id!=this.placeholder.id;if(p.length>1||c)return y.call(this,p);this.clear();var u=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(u)},D})),P.define(\"select2/selection/allowClear\",[\"jquery\",\"../keys\",\"../utils\"],(function(E,D,y){function p(){}return p.prototype.bind=function(c,u,v){var T=this;c.call(this,u,v),this.placeholder==null&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",(function(H){T._handleClear(H)})),u.on(\"keypress\",(function(H){T._handleKeyboardClear(H,u)}))},p.prototype._handleClear=function(c,u){if(!this.isDisabled()){var v=this.$selection.find(\".select2-selection__clear\");if(v.length!==0){u.stopPropagation();var T=y.GetData(v[0],\"data\"),H=this.$element.val();this.$element.val(this.placeholder.id);var B={data:T};if(this.trigger(\"clear\",B),B.prevented)this.$element.val(H);else{for(var le=0;le<T.length;le++)if(B={data:T[le]},this.trigger(\"unselect\",B),B.prevented)return void this.$element.val(H);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},p.prototype._handleKeyboardClear=function(c,u,v){v.isOpen()||u.which!=D.DELETE&&u.which!=D.BACKSPACE||this._handleClear(u)},p.prototype.update=function(c,u){if(c.call(this,u),!(this.$selection.find(\".select2-selection__placeholder\").length>0||u.length===0)){var v=this.options.get(\"translations\").get(\"removeAllItems\"),T=E('<span class=\"select2-selection__clear\" title=\"'+v()+'\">&times;</span>');y.StoreData(T[0],\"data\",u),this.$selection.find(\".select2-selection__rendered\").prepend(T)}},p})),P.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],(function(E,D,y){function p(c,u,v){c.call(this,u,v)}return p.prototype.render=function(c){var u=E('<li class=\"select2-search select2-search--inline\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></li>');this.$searchContainer=u,this.$search=u.find(\"input\");var v=c.call(this);return this._transferTabIndex(),v},p.prototype.bind=function(c,u,v){var T=this,H=u.id+\"-results\";c.call(this,u,v),u.on(\"open\",(function(){T.$search.attr(\"aria-controls\",H),T.$search.trigger(\"focus\")})),u.on(\"close\",(function(){T.$search.val(\"\"),T.$search.removeAttr(\"aria-controls\"),T.$search.removeAttr(\"aria-activedescendant\"),T.$search.trigger(\"focus\")})),u.on(\"enable\",(function(){T.$search.prop(\"disabled\",!1),T._transferTabIndex()})),u.on(\"disable\",(function(){T.$search.prop(\"disabled\",!0)})),u.on(\"focus\",(function(a){T.$search.trigger(\"focus\")})),u.on(\"results:focus\",(function(a){a.data._resultId?T.$search.attr(\"aria-activedescendant\",a.data._resultId):T.$search.removeAttr(\"aria-activedescendant\")})),this.$selection.on(\"focusin\",\".select2-search--inline\",(function(a){T.trigger(\"focus\",a)})),this.$selection.on(\"focusout\",\".select2-search--inline\",(function(a){T._handleBlur(a)})),this.$selection.on(\"keydown\",\".select2-search--inline\",(function(a){if(a.stopPropagation(),T.trigger(\"keypress\",a),T._keyUpPrevented=a.isDefaultPrevented(),a.which===y.BACKSPACE&&T.$search.val()===\"\"){var Ee=T.$searchContainer.prev(\".select2-selection__choice\");if(Ee.length>0){var Ge=D.GetData(Ee[0],\"data\");T.searchRemoveChoice(Ge),a.preventDefault()}}})),this.$selection.on(\"click\",\".select2-search--inline\",(function(a){T.$search.val()&&a.stopPropagation()}));var B=document.documentMode,le=B&&B<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",(function(a){le?T.$selection.off(\"input.search input.searchcheck\"):T.$selection.off(\"keyup.search\")})),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",(function(a){if(le&&a.type===\"input\")T.$selection.off(\"input.search input.searchcheck\");else{var Ee=a.which;Ee!=y.SHIFT&&Ee!=y.CTRL&&Ee!=y.ALT&&Ee!=y.TAB&&T.handleSearch(a)}}))},p.prototype._transferTabIndex=function(c){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},p.prototype.createPlaceholder=function(c,u){this.$search.attr(\"placeholder\",u.text)},p.prototype.update=function(c,u){var v=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),c.call(this,u),this.$selection.find(\".select2-selection__rendered\").append(this.$searchContainer),this.resizeSearch(),v&&this.$search.trigger(\"focus\")},p.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var c=this.$search.val();this.trigger(\"query\",{term:c})}this._keyUpPrevented=!1},p.prototype.searchRemoveChoice=function(c,u){this.trigger(\"unselect\",{data:u}),this.$search.val(u.text),this.handleSearch()},p.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var c=\"\";c=this.$search.attr(\"placeholder\")!==\"\"?this.$selection.find(\".select2-selection__rendered\").width():.75*(this.$search.val().length+1)+\"em\",this.$search.css(\"width\",c)},p})),P.define(\"select2/selection/eventRelay\",[\"jquery\"],(function(E){function D(){}return D.prototype.bind=function(y,p,c){var u=this,v=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],T=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];y.call(this,p,c),p.on(\"*\",(function(H,B){if(E.inArray(H,v)!==-1){B=B||{};var le=E.Event(\"select2:\"+H,{params:B});u.$element.trigger(le),E.inArray(H,T)!==-1&&(B.prevented=le.isDefaultPrevented())}}))},D})),P.define(\"select2/translation\",[\"jquery\",\"require\"],(function(E,D){function y(p){this.dict=p||{}}return y.prototype.all=function(){return this.dict},y.prototype.get=function(p){return this.dict[p]},y.prototype.extend=function(p){this.dict=E.extend({},p.all(),this.dict)},y._cache={},y.loadPath=function(p){if(!(p in y._cache)){var c=D(p);y._cache[p]=c}return new y(y._cache[p])},y})),P.define(\"select2/diacritics\",[],(function(){return{\"Ⓐ\":\"A\",Ａ:\"A\",À:\"A\",Á:\"A\",Â:\"A\",Ầ:\"A\",Ấ:\"A\",Ẫ:\"A\",Ẩ:\"A\",Ã:\"A\",Ā:\"A\",Ă:\"A\",Ằ:\"A\",Ắ:\"A\",Ẵ:\"A\",Ẳ:\"A\",Ȧ:\"A\",Ǡ:\"A\",Ä:\"A\",Ǟ:\"A\",Ả:\"A\",Å:\"A\",Ǻ:\"A\",Ǎ:\"A\",Ȁ:\"A\",Ȃ:\"A\",Ạ:\"A\",Ậ:\"A\",Ặ:\"A\",Ḁ:\"A\",Ą:\"A\",\"Ⱥ\":\"A\",\"Ɐ\":\"A\",\"Ꜳ\":\"AA\",Æ:\"AE\",Ǽ:\"AE\",Ǣ:\"AE\",\"Ꜵ\":\"AO\",\"Ꜷ\":\"AU\",\"Ꜹ\":\"AV\",\"Ꜻ\":\"AV\",\"Ꜽ\":\"AY\",\"Ⓑ\":\"B\",Ｂ:\"B\",Ḃ:\"B\",Ḅ:\"B\",Ḇ:\"B\",\"Ƀ\":\"B\",Ƃ:\"B\",Ɓ:\"B\",\"Ⓒ\":\"C\",Ｃ:\"C\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",Ç:\"C\",Ḉ:\"C\",Ƈ:\"C\",\"Ȼ\":\"C\",\"Ꜿ\":\"C\",\"Ⓓ\":\"D\",Ｄ:\"D\",Ḋ:\"D\",Ď:\"D\",Ḍ:\"D\",Ḑ:\"D\",Ḓ:\"D\",Ḏ:\"D\",Đ:\"D\",Ƌ:\"D\",Ɗ:\"D\",Ɖ:\"D\",\"Ꝺ\":\"D\",Ǳ:\"DZ\",Ǆ:\"DZ\",ǲ:\"Dz\",ǅ:\"Dz\",\"Ⓔ\":\"E\",Ｅ:\"E\",È:\"E\",É:\"E\",Ê:\"E\",Ề:\"E\",Ế:\"E\",Ễ:\"E\",Ể:\"E\",Ẽ:\"E\",Ē:\"E\",Ḕ:\"E\",Ḗ:\"E\",Ĕ:\"E\",Ė:\"E\",Ë:\"E\",Ẻ:\"E\",Ě:\"E\",Ȅ:\"E\",Ȇ:\"E\",Ẹ:\"E\",Ệ:\"E\",Ȩ:\"E\",Ḝ:\"E\",Ę:\"E\",Ḙ:\"E\",Ḛ:\"E\",Ɛ:\"E\",Ǝ:\"E\",\"Ⓕ\":\"F\",Ｆ:\"F\",Ḟ:\"F\",Ƒ:\"F\",\"Ꝼ\":\"F\",\"Ⓖ\":\"G\",Ｇ:\"G\",Ǵ:\"G\",Ĝ:\"G\",Ḡ:\"G\",Ğ:\"G\",Ġ:\"G\",Ǧ:\"G\",Ģ:\"G\",Ǥ:\"G\",Ɠ:\"G\",\"Ꞡ\":\"G\",\"Ᵹ\":\"G\",\"Ꝿ\":\"G\",\"Ⓗ\":\"H\",Ｈ:\"H\",Ĥ:\"H\",Ḣ:\"H\",Ḧ:\"H\",Ȟ:\"H\",Ḥ:\"H\",Ḩ:\"H\",Ḫ:\"H\",Ħ:\"H\",\"Ⱨ\":\"H\",\"Ⱶ\":\"H\",\"Ɥ\":\"H\",\"Ⓘ\":\"I\",Ｉ:\"I\",Ì:\"I\",Í:\"I\",Î:\"I\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",İ:\"I\",Ï:\"I\",Ḯ:\"I\",Ỉ:\"I\",Ǐ:\"I\",Ȉ:\"I\",Ȋ:\"I\",Ị:\"I\",Į:\"I\",Ḭ:\"I\",Ɨ:\"I\",\"Ⓙ\":\"J\",Ｊ:\"J\",Ĵ:\"J\",\"Ɉ\":\"J\",\"Ⓚ\":\"K\",Ｋ:\"K\",Ḱ:\"K\",Ǩ:\"K\",Ḳ:\"K\",Ķ:\"K\",Ḵ:\"K\",Ƙ:\"K\",\"Ⱪ\":\"K\",\"Ꝁ\":\"K\",\"Ꝃ\":\"K\",\"Ꝅ\":\"K\",\"Ꞣ\":\"K\",\"Ⓛ\":\"L\",Ｌ:\"L\",Ŀ:\"L\",Ĺ:\"L\",Ľ:\"L\",Ḷ:\"L\",Ḹ:\"L\",Ļ:\"L\",Ḽ:\"L\",Ḻ:\"L\",Ł:\"L\",\"Ƚ\":\"L\",\"Ɫ\":\"L\",\"Ⱡ\":\"L\",\"Ꝉ\":\"L\",\"Ꝇ\":\"L\",\"Ꞁ\":\"L\",Ǉ:\"LJ\",ǈ:\"Lj\",\"Ⓜ\":\"M\",Ｍ:\"M\",Ḿ:\"M\",Ṁ:\"M\",Ṃ:\"M\",\"Ɱ\":\"M\",Ɯ:\"M\",\"Ⓝ\":\"N\",Ｎ:\"N\",Ǹ:\"N\",Ń:\"N\",Ñ:\"N\",Ṅ:\"N\",Ň:\"N\",Ṇ:\"N\",Ņ:\"N\",Ṋ:\"N\",Ṉ:\"N\",\"Ƞ\":\"N\",Ɲ:\"N\",\"Ꞑ\":\"N\",\"Ꞥ\":\"N\",Ǌ:\"NJ\",ǋ:\"Nj\",\"Ⓞ\":\"O\",Ｏ:\"O\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Ồ:\"O\",Ố:\"O\",Ỗ:\"O\",Ổ:\"O\",Õ:\"O\",Ṍ:\"O\",Ȭ:\"O\",Ṏ:\"O\",Ō:\"O\",Ṑ:\"O\",Ṓ:\"O\",Ŏ:\"O\",Ȯ:\"O\",Ȱ:\"O\",Ö:\"O\",Ȫ:\"O\",Ỏ:\"O\",Ő:\"O\",Ǒ:\"O\",Ȍ:\"O\",Ȏ:\"O\",Ơ:\"O\",Ờ:\"O\",Ớ:\"O\",Ỡ:\"O\",Ở:\"O\",Ợ:\"O\",Ọ:\"O\",Ộ:\"O\",Ǫ:\"O\",Ǭ:\"O\",Ø:\"O\",Ǿ:\"O\",Ɔ:\"O\",Ɵ:\"O\",\"Ꝋ\":\"O\",\"Ꝍ\":\"O\",Œ:\"OE\",Ƣ:\"OI\",\"Ꝏ\":\"OO\",Ȣ:\"OU\",\"Ⓟ\":\"P\",Ｐ:\"P\",Ṕ:\"P\",Ṗ:\"P\",Ƥ:\"P\",\"Ᵽ\":\"P\",\"Ꝑ\":\"P\",\"Ꝓ\":\"P\",\"Ꝕ\":\"P\",\"Ⓠ\":\"Q\",Ｑ:\"Q\",\"Ꝗ\":\"Q\",\"Ꝙ\":\"Q\",\"Ɋ\":\"Q\",\"Ⓡ\":\"R\",Ｒ:\"R\",Ŕ:\"R\",Ṙ:\"R\",Ř:\"R\",Ȑ:\"R\",Ȓ:\"R\",Ṛ:\"R\",Ṝ:\"R\",Ŗ:\"R\",Ṟ:\"R\",\"Ɍ\":\"R\",\"Ɽ\":\"R\",\"Ꝛ\":\"R\",\"Ꞧ\":\"R\",\"Ꞃ\":\"R\",\"Ⓢ\":\"S\",Ｓ:\"S\",\"ẞ\":\"S\",Ś:\"S\",Ṥ:\"S\",Ŝ:\"S\",Ṡ:\"S\",Š:\"S\",Ṧ:\"S\",Ṣ:\"S\",Ṩ:\"S\",Ș:\"S\",Ş:\"S\",\"Ȿ\":\"S\",\"Ꞩ\":\"S\",\"Ꞅ\":\"S\",\"Ⓣ\":\"T\",Ｔ:\"T\",Ṫ:\"T\",Ť:\"T\",Ṭ:\"T\",Ț:\"T\",Ţ:\"T\",Ṱ:\"T\",Ṯ:\"T\",Ŧ:\"T\",Ƭ:\"T\",Ʈ:\"T\",\"Ⱦ\":\"T\",\"Ꞇ\":\"T\",\"Ꜩ\":\"TZ\",\"Ⓤ\":\"U\",Ｕ:\"U\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ũ:\"U\",Ṹ:\"U\",Ū:\"U\",Ṻ:\"U\",Ŭ:\"U\",Ü:\"U\",Ǜ:\"U\",Ǘ:\"U\",Ǖ:\"U\",Ǚ:\"U\",Ủ:\"U\",Ů:\"U\",Ű:\"U\",Ǔ:\"U\",Ȕ:\"U\",Ȗ:\"U\",Ư:\"U\",Ừ:\"U\",Ứ:\"U\",Ữ:\"U\",Ử:\"U\",Ự:\"U\",Ụ:\"U\",Ṳ:\"U\",Ų:\"U\",Ṷ:\"U\",Ṵ:\"U\",\"Ʉ\":\"U\",\"Ⓥ\":\"V\",Ｖ:\"V\",Ṽ:\"V\",Ṿ:\"V\",Ʋ:\"V\",\"Ꝟ\":\"V\",\"Ʌ\":\"V\",\"Ꝡ\":\"VY\",\"Ⓦ\":\"W\",Ｗ:\"W\",Ẁ:\"W\",Ẃ:\"W\",Ŵ:\"W\",Ẇ:\"W\",Ẅ:\"W\",Ẉ:\"W\",\"Ⱳ\":\"W\",\"Ⓧ\":\"X\",Ｘ:\"X\",Ẋ:\"X\",Ẍ:\"X\",\"Ⓨ\":\"Y\",Ｙ:\"Y\",Ỳ:\"Y\",Ý:\"Y\",Ŷ:\"Y\",Ỹ:\"Y\",Ȳ:\"Y\",Ẏ:\"Y\",Ÿ:\"Y\",Ỷ:\"Y\",Ỵ:\"Y\",Ƴ:\"Y\",\"Ɏ\":\"Y\",\"Ỿ\":\"Y\",\"Ⓩ\":\"Z\",Ｚ:\"Z\",Ź:\"Z\",Ẑ:\"Z\",Ż:\"Z\",Ž:\"Z\",Ẓ:\"Z\",Ẕ:\"Z\",Ƶ:\"Z\",Ȥ:\"Z\",\"Ɀ\":\"Z\",\"Ⱬ\":\"Z\",\"Ꝣ\":\"Z\",\"ⓐ\":\"a\",ａ:\"a\",ẚ:\"a\",à:\"a\",á:\"a\",â:\"a\",ầ:\"a\",ấ:\"a\",ẫ:\"a\",ẩ:\"a\",ã:\"a\",ā:\"a\",ă:\"a\",ằ:\"a\",ắ:\"a\",ẵ:\"a\",ẳ:\"a\",ȧ:\"a\",ǡ:\"a\",ä:\"a\",ǟ:\"a\",ả:\"a\",å:\"a\",ǻ:\"a\",ǎ:\"a\",ȁ:\"a\",ȃ:\"a\",ạ:\"a\",ậ:\"a\",ặ:\"a\",ḁ:\"a\",ą:\"a\",\"ⱥ\":\"a\",ɐ:\"a\",\"ꜳ\":\"aa\",æ:\"ae\",ǽ:\"ae\",ǣ:\"ae\",\"ꜵ\":\"ao\",\"ꜷ\":\"au\",\"ꜹ\":\"av\",\"ꜻ\":\"av\",\"ꜽ\":\"ay\",\"ⓑ\":\"b\",ｂ:\"b\",ḃ:\"b\",ḅ:\"b\",ḇ:\"b\",ƀ:\"b\",ƃ:\"b\",ɓ:\"b\",\"ⓒ\":\"c\",ｃ:\"c\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",ç:\"c\",ḉ:\"c\",ƈ:\"c\",\"ȼ\":\"c\",\"ꜿ\":\"c\",\"ↄ\":\"c\",\"ⓓ\":\"d\",ｄ:\"d\",ḋ:\"d\",ď:\"d\",ḍ:\"d\",ḑ:\"d\",ḓ:\"d\",ḏ:\"d\",đ:\"d\",ƌ:\"d\",ɖ:\"d\",ɗ:\"d\",\"ꝺ\":\"d\",ǳ:\"dz\",ǆ:\"dz\",\"ⓔ\":\"e\",ｅ:\"e\",è:\"e\",é:\"e\",ê:\"e\",ề:\"e\",ế:\"e\",ễ:\"e\",ể:\"e\",ẽ:\"e\",ē:\"e\",ḕ:\"e\",ḗ:\"e\",ĕ:\"e\",ė:\"e\",ë:\"e\",ẻ:\"e\",ě:\"e\",ȅ:\"e\",ȇ:\"e\",ẹ:\"e\",ệ:\"e\",ȩ:\"e\",ḝ:\"e\",ę:\"e\",ḙ:\"e\",ḛ:\"e\",\"ɇ\":\"e\",ɛ:\"e\",ǝ:\"e\",\"ⓕ\":\"f\",ｆ:\"f\",ḟ:\"f\",ƒ:\"f\",\"ꝼ\":\"f\",\"ⓖ\":\"g\",ｇ:\"g\",ǵ:\"g\",ĝ:\"g\",ḡ:\"g\",ğ:\"g\",ġ:\"g\",ǧ:\"g\",ģ:\"g\",ǥ:\"g\",ɠ:\"g\",\"ꞡ\":\"g\",\"ᵹ\":\"g\",\"ꝿ\":\"g\",\"ⓗ\":\"h\",ｈ:\"h\",ĥ:\"h\",ḣ:\"h\",ḧ:\"h\",ȟ:\"h\",ḥ:\"h\",ḩ:\"h\",ḫ:\"h\",ẖ:\"h\",ħ:\"h\",\"ⱨ\":\"h\",\"ⱶ\":\"h\",ɥ:\"h\",ƕ:\"hv\",\"ⓘ\":\"i\",ｉ:\"i\",ì:\"i\",í:\"i\",î:\"i\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",ï:\"i\",ḯ:\"i\",ỉ:\"i\",ǐ:\"i\",ȉ:\"i\",ȋ:\"i\",ị:\"i\",į:\"i\",ḭ:\"i\",ɨ:\"i\",ı:\"i\",\"ⓙ\":\"j\",ｊ:\"j\",ĵ:\"j\",ǰ:\"j\",\"ɉ\":\"j\",\"ⓚ\":\"k\",ｋ:\"k\",ḱ:\"k\",ǩ:\"k\",ḳ:\"k\",ķ:\"k\",ḵ:\"k\",ƙ:\"k\",\"ⱪ\":\"k\",\"ꝁ\":\"k\",\"ꝃ\":\"k\",\"ꝅ\":\"k\",\"ꞣ\":\"k\",\"ⓛ\":\"l\",ｌ:\"l\",ŀ:\"l\",ĺ:\"l\",ľ:\"l\",ḷ:\"l\",ḹ:\"l\",ļ:\"l\",ḽ:\"l\",ḻ:\"l\",ſ:\"l\",ł:\"l\",ƚ:\"l\",ɫ:\"l\",\"ⱡ\":\"l\",\"ꝉ\":\"l\",\"ꞁ\":\"l\",\"ꝇ\":\"l\",ǉ:\"lj\",\"ⓜ\":\"m\",ｍ:\"m\",ḿ:\"m\",ṁ:\"m\",ṃ:\"m\",ɱ:\"m\",ɯ:\"m\",\"ⓝ\":\"n\",ｎ:\"n\",ǹ:\"n\",ń:\"n\",ñ:\"n\",ṅ:\"n\",ň:\"n\",ṇ:\"n\",ņ:\"n\",ṋ:\"n\",ṉ:\"n\",ƞ:\"n\",ɲ:\"n\",ŉ:\"n\",\"ꞑ\":\"n\",\"ꞥ\":\"n\",ǌ:\"nj\",\"ⓞ\":\"o\",ｏ:\"o\",ò:\"o\",ó:\"o\",ô:\"o\",ồ:\"o\",ố:\"o\",ỗ:\"o\",ổ:\"o\",õ:\"o\",ṍ:\"o\",ȭ:\"o\",ṏ:\"o\",ō:\"o\",ṑ:\"o\",ṓ:\"o\",ŏ:\"o\",ȯ:\"o\",ȱ:\"o\",ö:\"o\",ȫ:\"o\",ỏ:\"o\",ő:\"o\",ǒ:\"o\",ȍ:\"o\",ȏ:\"o\",ơ:\"o\",ờ:\"o\",ớ:\"o\",ỡ:\"o\",ở:\"o\",ợ:\"o\",ọ:\"o\",ộ:\"o\",ǫ:\"o\",ǭ:\"o\",ø:\"o\",ǿ:\"o\",ɔ:\"o\",\"ꝋ\":\"o\",\"ꝍ\":\"o\",ɵ:\"o\",œ:\"oe\",ƣ:\"oi\",ȣ:\"ou\",\"ꝏ\":\"oo\",\"ⓟ\":\"p\",ｐ:\"p\",ṕ:\"p\",ṗ:\"p\",ƥ:\"p\",\"ᵽ\":\"p\",\"ꝑ\":\"p\",\"ꝓ\":\"p\",\"ꝕ\":\"p\",\"ⓠ\":\"q\",ｑ:\"q\",\"ɋ\":\"q\",\"ꝗ\":\"q\",\"ꝙ\":\"q\",\"ⓡ\":\"r\",ｒ:\"r\",ŕ:\"r\",ṙ:\"r\",ř:\"r\",ȑ:\"r\",ȓ:\"r\",ṛ:\"r\",ṝ:\"r\",ŗ:\"r\",ṟ:\"r\",\"ɍ\":\"r\",ɽ:\"r\",\"ꝛ\":\"r\",\"ꞧ\":\"r\",\"ꞃ\":\"r\",\"ⓢ\":\"s\",ｓ:\"s\",ß:\"s\",ś:\"s\",ṥ:\"s\",ŝ:\"s\",ṡ:\"s\",š:\"s\",ṧ:\"s\",ṣ:\"s\",ṩ:\"s\",ș:\"s\",ş:\"s\",\"ȿ\":\"s\",\"ꞩ\":\"s\",\"ꞅ\":\"s\",ẛ:\"s\",\"ⓣ\":\"t\",ｔ:\"t\",ṫ:\"t\",ẗ:\"t\",ť:\"t\",ṭ:\"t\",ț:\"t\",ţ:\"t\",ṱ:\"t\",ṯ:\"t\",ŧ:\"t\",ƭ:\"t\",ʈ:\"t\",\"ⱦ\":\"t\",\"ꞇ\":\"t\",\"ꜩ\":\"tz\",\"ⓤ\":\"u\",ｕ:\"u\",ù:\"u\",ú:\"u\",û:\"u\",ũ:\"u\",ṹ:\"u\",ū:\"u\",ṻ:\"u\",ŭ:\"u\",ü:\"u\",ǜ:\"u\",ǘ:\"u\",ǖ:\"u\",ǚ:\"u\",ủ:\"u\",ů:\"u\",ű:\"u\",ǔ:\"u\",ȕ:\"u\",ȗ:\"u\",ư:\"u\",ừ:\"u\",ứ:\"u\",ữ:\"u\",ử:\"u\",ự:\"u\",ụ:\"u\",ṳ:\"u\",ų:\"u\",ṷ:\"u\",ṵ:\"u\",ʉ:\"u\",\"ⓥ\":\"v\",ｖ:\"v\",ṽ:\"v\",ṿ:\"v\",ʋ:\"v\",\"ꝟ\":\"v\",ʌ:\"v\",\"ꝡ\":\"vy\",\"ⓦ\":\"w\",ｗ:\"w\",ẁ:\"w\",ẃ:\"w\",ŵ:\"w\",ẇ:\"w\",ẅ:\"w\",ẘ:\"w\",ẉ:\"w\",\"ⱳ\":\"w\",\"ⓧ\":\"x\",ｘ:\"x\",ẋ:\"x\",ẍ:\"x\",\"ⓨ\":\"y\",ｙ:\"y\",ỳ:\"y\",ý:\"y\",ŷ:\"y\",ỹ:\"y\",ȳ:\"y\",ẏ:\"y\",ÿ:\"y\",ỷ:\"y\",ẙ:\"y\",ỵ:\"y\",ƴ:\"y\",\"ɏ\":\"y\",\"ỿ\":\"y\",\"ⓩ\":\"z\",ｚ:\"z\",ź:\"z\",ẑ:\"z\",ż:\"z\",ž:\"z\",ẓ:\"z\",ẕ:\"z\",ƶ:\"z\",ȥ:\"z\",\"ɀ\":\"z\",\"ⱬ\":\"z\",\"ꝣ\":\"z\",Ά:\"Α\",Έ:\"Ε\",Ή:\"Η\",Ί:\"Ι\",Ϊ:\"Ι\",Ό:\"Ο\",Ύ:\"Υ\",Ϋ:\"Υ\",Ώ:\"Ω\",ά:\"α\",έ:\"ε\",ή:\"η\",ί:\"ι\",ϊ:\"ι\",ΐ:\"ι\",ό:\"ο\",ύ:\"υ\",ϋ:\"υ\",ΰ:\"υ\",ώ:\"ω\",ς:\"σ\",\"’\":\"'\"}})),P.define(\"select2/data/base\",[\"../utils\"],(function(E){function D(y,p){D.__super__.constructor.call(this)}return E.Extend(D,E.Observable),D.prototype.current=function(y){throw new Error(\"The `current` method must be defined in child classes.\")},D.prototype.query=function(y,p){throw new Error(\"The `query` method must be defined in child classes.\")},D.prototype.bind=function(y,p){},D.prototype.destroy=function(){},D.prototype.generateResultId=function(y,p){var c=y.id+\"-result-\";return c+=E.generateChars(4),p.id!=null?c+=\"-\"+p.id.toString():c+=\"-\"+E.generateChars(4),c},D})),P.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],(function(E,D,y){function p(c,u){this.$element=c,this.options=u,p.__super__.constructor.call(this)}return D.Extend(p,E),p.prototype.current=function(c){var u=[],v=this;this.$element.find(\":selected\").each((function(){var T=y(this),H=v.item(T);u.push(H)})),c(u)},p.prototype.select=function(c){var u=this;if(c.selected=!0,y(c.element).is(\"option\"))return c.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");if(this.$element.prop(\"multiple\"))this.current((function(T){var H=[];(c=[c]).push.apply(c,T);for(var B=0;B<c.length;B++){var le=c[B].id;y.inArray(le,H)===-1&&H.push(le)}u.$element.val(H),u.$element.trigger(\"input\").trigger(\"change\")}));else{var v=c.id;this.$element.val(v),this.$element.trigger(\"input\").trigger(\"change\")}},p.prototype.unselect=function(c){var u=this;if(this.$element.prop(\"multiple\")){if(c.selected=!1,y(c.element).is(\"option\"))return c.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current((function(v){for(var T=[],H=0;H<v.length;H++){var B=v[H].id;B!==c.id&&y.inArray(B,T)===-1&&T.push(B)}u.$element.val(T),u.$element.trigger(\"input\").trigger(\"change\")}))}},p.prototype.bind=function(c,u){var v=this;this.container=c,c.on(\"select\",(function(T){v.select(T.data)})),c.on(\"unselect\",(function(T){v.unselect(T.data)}))},p.prototype.destroy=function(){this.$element.find(\"*\").each((function(){D.RemoveData(this)}))},p.prototype.query=function(c,u){var v=[],T=this;this.$element.children().each((function(){var H=y(this);if(H.is(\"option\")||H.is(\"optgroup\")){var B=T.item(H),le=T.matches(c,B);le!==null&&v.push(le)}})),u({results:v})},p.prototype.addOptions=function(c){D.appendMany(this.$element,c)},p.prototype.option=function(c){var u;c.children?(u=document.createElement(\"optgroup\")).label=c.text:(u=document.createElement(\"option\")).textContent!==void 0?u.textContent=c.text:u.innerText=c.text,c.id!==void 0&&(u.value=c.id),c.disabled&&(u.disabled=!0),c.selected&&(u.selected=!0),c.title&&(u.title=c.title);var v=y(u),T=this._normalizeItem(c);return T.element=u,D.StoreData(u,\"data\",T),v},p.prototype.item=function(c){var u={};if((u=D.GetData(c[0],\"data\"))!=null)return u;if(c.is(\"option\"))u={id:c.val(),text:c.text(),disabled:c.prop(\"disabled\"),selected:c.prop(\"selected\"),title:c.prop(\"title\")};else if(c.is(\"optgroup\")){u={text:c.prop(\"label\"),children:[],title:c.prop(\"title\")};for(var v=c.children(\"option\"),T=[],H=0;H<v.length;H++){var B=y(v[H]),le=this.item(B);T.push(le)}u.children=T}return(u=this._normalizeItem(u)).element=c[0],D.StoreData(c[0],\"data\",u),u},p.prototype._normalizeItem=function(c){c!==Object(c)&&(c={id:c,text:c});var u={selected:!1,disabled:!1};return(c=y.extend({},{text:\"\"},c)).id!=null&&(c.id=c.id.toString()),c.text!=null&&(c.text=c.text.toString()),c._resultId==null&&c.id&&this.container!=null&&(c._resultId=this.generateResultId(this.container,c)),y.extend({},u,c)},p.prototype.matches=function(c,u){return this.options.get(\"matcher\")(c,u)},p})),P.define(\"select2/data/array\",[\"./select\",\"../utils\",\"jquery\"],(function(E,D,y){function p(c,u){this._dataToConvert=u.get(\"data\")||[],p.__super__.constructor.call(this,c,u)}return D.Extend(p,E),p.prototype.bind=function(c,u){p.__super__.bind.call(this,c,u),this.addOptions(this.convertToOptions(this._dataToConvert))},p.prototype.select=function(c){var u=this.$element.find(\"option\").filter((function(v,T){return T.value==c.id.toString()}));u.length===0&&(u=this.option(c),this.addOptions(u)),p.__super__.select.call(this,c)},p.prototype.convertToOptions=function(c){var u=this,v=this.$element.find(\"option\"),T=v.map((function(){return u.item(y(this)).id})).get(),H=[];function B(be){return function(){return y(this).val()==be.id}}for(var le=0;le<c.length;le++){var a=this._normalizeItem(c[le]);if(y.inArray(a.id,T)>=0){var Ee=v.filter(B(a)),Ge=this.item(Ee),ve=y.extend(!0,{},a,Ge),Re=this.option(ve);Ee.replaceWith(Re)}else{var ce=this.option(a);if(a.children){var Ae=this.convertToOptions(a.children);D.appendMany(ce,Ae)}H.push(ce)}}return H},p})),P.define(\"select2/data/ajax\",[\"./array\",\"../utils\",\"jquery\"],(function(E,D,y){function p(c,u){this.ajaxOptions=this._applyDefaults(u.get(\"ajax\")),this.ajaxOptions.processResults!=null&&(this.processResults=this.ajaxOptions.processResults),p.__super__.constructor.call(this,c,u)}return D.Extend(p,E),p.prototype._applyDefaults=function(c){var u={data:function(v){return y.extend({},v,{q:v.term})},transport:function(v,T,H){var B=y.ajax(v);return B.then(T),B.fail(H),B}};return y.extend({},u,c,!0)},p.prototype.processResults=function(c){return c},p.prototype.query=function(c,u){var v=this;this._request!=null&&(y.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var T=y.extend({type:\"GET\"},this.ajaxOptions);function H(){var B=T.transport(T,(function(le){var a=v.processResults(le,c);v.options.get(\"debug\")&&window.console&&console.error&&(a&&a.results&&y.isArray(a.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),u(a)}),(function(){(!(\"status\"in B)||B.status!==0&&B.status!==\"0\")&&v.trigger(\"results:message\",{message:\"errorLoading\"})}));v._request=B}typeof T.url==\"function\"&&(T.url=T.url.call(this.$element,c)),typeof T.data==\"function\"&&(T.data=T.data.call(this.$element,c)),this.ajaxOptions.delay&&c.term!=null?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(H,this.ajaxOptions.delay)):H()},p})),P.define(\"select2/data/tags\",[\"jquery\"],(function(E){function D(y,p,c){var u=c.get(\"tags\"),v=c.get(\"createTag\");v!==void 0&&(this.createTag=v);var T=c.get(\"insertTag\");if(T!==void 0&&(this.insertTag=T),y.call(this,p,c),E.isArray(u))for(var H=0;H<u.length;H++){var B=u[H],le=this._normalizeItem(B),a=this.option(le);this.$element.append(a)}}return D.prototype.query=function(y,p,c){var u=this;function v(T,H){for(var B=T.results,le=0;le<B.length;le++){var a=B[le],Ee=a.children!=null&&!v({results:a.children},!0);if((a.text||\"\").toUpperCase()===(p.term||\"\").toUpperCase()||Ee)return!H&&(T.data=B,void c(T))}if(H)return!0;var Ge=u.createTag(p);if(Ge!=null){var ve=u.option(Ge);ve.attr(\"data-select2-tag\",!0),u.addOptions([ve]),u.insertTag(B,Ge)}T.results=B,c(T)}this._removeOldTags(),p.term!=null&&p.page==null?y.call(this,p,v):y.call(this,p,c)},D.prototype.createTag=function(y,p){var c=E.trim(p.term);return c===\"\"?null:{id:c,text:c}},D.prototype.insertTag=function(y,p,c){p.unshift(c)},D.prototype._removeOldTags=function(y){this.$element.find(\"option[data-select2-tag]\").each((function(){this.selected||E(this).remove()}))},D})),P.define(\"select2/data/tokenizer\",[\"jquery\"],(function(E){function D(y,p,c){var u=c.get(\"tokenizer\");u!==void 0&&(this.tokenizer=u),y.call(this,p,c)}return D.prototype.bind=function(y,p,c){y.call(this,p,c),this.$search=p.dropdown.$search||p.selection.$search||c.find(\".select2-search__field\")},D.prototype.query=function(y,p,c){var u=this;function v(B){var le=u._normalizeItem(B);if(!u.$element.find(\"option\").filter((function(){return E(this).val()===le.id})).length){var a=u.option(le);a.attr(\"data-select2-tag\",!0),u._removeOldTags(),u.addOptions([a])}T(le)}function T(B){u.trigger(\"select\",{data:B})}p.term=p.term||\"\";var H=this.tokenizer(p,this.options,v);H.term!==p.term&&(this.$search.length&&(this.$search.val(H.term),this.$search.trigger(\"focus\")),p.term=H.term),y.call(this,p,c)},D.prototype.tokenizer=function(y,p,c,u){for(var v=c.get(\"tokenSeparators\")||[],T=p.term,H=0,B=this.createTag||function(Ge){return{id:Ge.term,text:Ge.term}};H<T.length;){var le=T[H];if(E.inArray(le,v)!==-1){var a=T.substr(0,H),Ee=B(E.extend({},p,{term:a}));Ee!=null?(u(Ee),T=T.substr(H+1)||\"\",H=0):H++}else H++}return{term:T}},D})),P.define(\"select2/data/minimumInputLength\",[],(function(){function E(D,y,p){this.minimumInputLength=p.get(\"minimumInputLength\"),D.call(this,y,p)}return E.prototype.query=function(D,y,p){y.term=y.term||\"\",y.term.length<this.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:y.term,params:y}}):D.call(this,y,p)},E})),P.define(\"select2/data/maximumInputLength\",[],(function(){function E(D,y,p){this.maximumInputLength=p.get(\"maximumInputLength\"),D.call(this,y,p)}return E.prototype.query=function(D,y,p){y.term=y.term||\"\",this.maximumInputLength>0&&y.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:y.term,params:y}}):D.call(this,y,p)},E})),P.define(\"select2/data/maximumSelectionLength\",[],(function(){function E(D,y,p){this.maximumSelectionLength=p.get(\"maximumSelectionLength\"),D.call(this,y,p)}return E.prototype.bind=function(D,y,p){var c=this;D.call(this,y,p),y.on(\"select\",(function(){c._checkIfMaximumSelected()}))},E.prototype.query=function(D,y,p){var c=this;this._checkIfMaximumSelected((function(){D.call(c,y,p)}))},E.prototype._checkIfMaximumSelected=function(D,y){var p=this;this.current((function(c){var u=c!=null?c.length:0;p.maximumSelectionLength>0&&u>=p.maximumSelectionLength?p.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:p.maximumSelectionLength}}):y&&y()}))},E})),P.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],(function(E,D){function y(p,c){this.$element=p,this.options=c,y.__super__.constructor.call(this)}return D.Extend(y,D.Observable),y.prototype.render=function(){var p=E('<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>');return p.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=p,p},y.prototype.bind=function(){},y.prototype.position=function(p,c){},y.prototype.destroy=function(){this.$dropdown.remove()},y})),P.define(\"select2/dropdown/search\",[\"jquery\",\"../utils\"],(function(E,D){function y(){}return y.prototype.render=function(p){var c=p.call(this),u=E('<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>');return this.$searchContainer=u,this.$search=u.find(\"input\"),c.prepend(u),c},y.prototype.bind=function(p,c,u){var v=this,T=c.id+\"-results\";p.call(this,c,u),this.$search.on(\"keydown\",(function(H){v.trigger(\"keypress\",H),v._keyUpPrevented=H.isDefaultPrevented()})),this.$search.on(\"input\",(function(H){E(this).off(\"keyup\")})),this.$search.on(\"keyup input\",(function(H){v.handleSearch(H)})),c.on(\"open\",(function(){v.$search.attr(\"tabindex\",0),v.$search.attr(\"aria-controls\",T),v.$search.trigger(\"focus\"),window.setTimeout((function(){v.$search.trigger(\"focus\")}),0)})),c.on(\"close\",(function(){v.$search.attr(\"tabindex\",-1),v.$search.removeAttr(\"aria-controls\"),v.$search.removeAttr(\"aria-activedescendant\"),v.$search.val(\"\"),v.$search.trigger(\"blur\")})),c.on(\"focus\",(function(){c.isOpen()||v.$search.trigger(\"focus\")})),c.on(\"results:all\",(function(H){H.query.term!=null&&H.query.term!==\"\"||(v.showSearch(H)?v.$searchContainer.removeClass(\"select2-search--hide\"):v.$searchContainer.addClass(\"select2-search--hide\"))})),c.on(\"results:focus\",(function(H){H.data._resultId?v.$search.attr(\"aria-activedescendant\",H.data._resultId):v.$search.removeAttr(\"aria-activedescendant\")}))},y.prototype.handleSearch=function(p){if(!this._keyUpPrevented){var c=this.$search.val();this.trigger(\"query\",{term:c})}this._keyUpPrevented=!1},y.prototype.showSearch=function(p,c){return!0},y})),P.define(\"select2/dropdown/hidePlaceholder\",[],(function(){function E(D,y,p,c){this.placeholder=this.normalizePlaceholder(p.get(\"placeholder\")),D.call(this,y,p,c)}return E.prototype.append=function(D,y){y.results=this.removePlaceholder(y.results),D.call(this,y)},E.prototype.normalizePlaceholder=function(D,y){return typeof y==\"string\"&&(y={id:\"\",text:y}),y},E.prototype.removePlaceholder=function(D,y){for(var p=y.slice(0),c=y.length-1;c>=0;c--){var u=y[c];this.placeholder.id===u.id&&p.splice(c,1)}return p},E})),P.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],(function(E){function D(y,p,c,u){this.lastParams={},y.call(this,p,c,u),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return D.prototype.append=function(y,p){this.$loadingMore.remove(),this.loading=!1,y.call(this,p),this.showLoadingMore(p)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},D.prototype.bind=function(y,p,c){var u=this;y.call(this,p,c),p.on(\"query\",(function(v){u.lastParams=v,u.loading=!0})),p.on(\"query:append\",(function(v){u.lastParams=v,u.loading=!0})),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},D.prototype.loadMoreIfNeeded=function(){var y=E.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&y&&this.$results.offset().top+this.$results.outerHeight(!1)+50>=this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)&&this.loadMore()},D.prototype.loadMore=function(){this.loading=!0;var y=E.extend({},{page:1},this.lastParams);y.page++,this.trigger(\"query:append\",y)},D.prototype.showLoadingMore=function(y,p){return p.pagination&&p.pagination.more},D.prototype.createLoadingMore=function(){var y=E('<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'),p=this.options.get(\"translations\").get(\"loadingMore\");return y.html(p(this.lastParams)),y},D})),P.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],(function(E,D){function y(p,c,u){this.$dropdownParent=E(u.get(\"dropdownParent\")||document.body),p.call(this,c,u)}return y.prototype.bind=function(p,c,u){var v=this;p.call(this,c,u),c.on(\"open\",(function(){v._showDropdown(),v._attachPositioningHandler(c),v._bindContainerResultHandlers(c)})),c.on(\"close\",(function(){v._hideDropdown(),v._detachPositioningHandler(c)})),this.$dropdownContainer.on(\"mousedown\",(function(T){T.stopPropagation()}))},y.prototype.destroy=function(p){p.call(this),this.$dropdownContainer.remove()},y.prototype.position=function(p,c,u){c.attr(\"class\",u.attr(\"class\")),c.removeClass(\"select2\"),c.addClass(\"select2-container--open\"),c.css({position:\"absolute\",top:-999999}),this.$container=u},y.prototype.render=function(p){var c=E(\"<span></span>\"),u=p.call(this);return c.append(u),this.$dropdownContainer=c,c},y.prototype._hideDropdown=function(p){this.$dropdownContainer.detach()},y.prototype._bindContainerResultHandlers=function(p,c){if(!this._containerResultsHandlersBound){var u=this;c.on(\"results:all\",(function(){u._positionDropdown(),u._resizeDropdown()})),c.on(\"results:append\",(function(){u._positionDropdown(),u._resizeDropdown()})),c.on(\"results:message\",(function(){u._positionDropdown(),u._resizeDropdown()})),c.on(\"select\",(function(){u._positionDropdown(),u._resizeDropdown()})),c.on(\"unselect\",(function(){u._positionDropdown(),u._resizeDropdown()})),this._containerResultsHandlersBound=!0}},y.prototype._attachPositioningHandler=function(p,c){var u=this,v=\"scroll.select2.\"+c.id,T=\"resize.select2.\"+c.id,H=\"orientationchange.select2.\"+c.id,B=this.$container.parents().filter(D.hasScroll);B.each((function(){D.StoreData(this,\"select2-scroll-position\",{x:E(this).scrollLeft(),y:E(this).scrollTop()})})),B.on(v,(function(le){var a=D.GetData(this,\"select2-scroll-position\");E(this).scrollTop(a.y)})),E(window).on(v+\" \"+T+\" \"+H,(function(le){u._positionDropdown(),u._resizeDropdown()}))},y.prototype._detachPositioningHandler=function(p,c){var u=\"scroll.select2.\"+c.id,v=\"resize.select2.\"+c.id,T=\"orientationchange.select2.\"+c.id;this.$container.parents().filter(D.hasScroll).off(u),E(window).off(u+\" \"+v+\" \"+T)},y.prototype._positionDropdown=function(){var p=E(window),c=this.$dropdown.hasClass(\"select2-dropdown--above\"),u=this.$dropdown.hasClass(\"select2-dropdown--below\"),v=null,T=this.$container.offset();T.bottom=T.top+this.$container.outerHeight(!1);var H={height:this.$container.outerHeight(!1)};H.top=T.top,H.bottom=T.top+H.height;var B={height:this.$dropdown.outerHeight(!1)},le={top:p.scrollTop(),bottom:p.scrollTop()+p.height()},a=le.top<T.top-B.height,Ee=le.bottom>T.bottom+B.height,Ge={left:T.left,top:H.bottom},ve=this.$dropdownParent;ve.css(\"position\")===\"static\"&&(ve=ve.offsetParent());var Re={top:0,left:0};(E.contains(document.body,ve[0])||ve[0].isConnected)&&(Re=ve.offset()),Ge.top-=Re.top,Ge.left-=Re.left,c||u||(v=\"below\"),Ee||!a||c?!a&&Ee&&c&&(v=\"below\"):v=\"above\",(v==\"above\"||c&&v!==\"below\")&&(Ge.top=H.top-Re.top-B.height),v!=null&&(this.$dropdown.removeClass(\"select2-dropdown--below select2-dropdown--above\").addClass(\"select2-dropdown--\"+v),this.$container.removeClass(\"select2-container--below select2-container--above\").addClass(\"select2-container--\"+v)),this.$dropdownContainer.css(Ge)},y.prototype._resizeDropdown=function(){var p={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(p.minWidth=p.width,p.position=\"relative\",p.width=\"auto\"),this.$dropdown.css(p)},y.prototype._showDropdown=function(p){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},y})),P.define(\"select2/dropdown/minimumResultsForSearch\",[],(function(){function E(y){for(var p=0,c=0;c<y.length;c++){var u=y[c];u.children?p+=E(u.children):p++}return p}function D(y,p,c,u){this.minimumResultsForSearch=c.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),y.call(this,p,c,u)}return D.prototype.showSearch=function(y,p){return!(E(p.data.results)<this.minimumResultsForSearch)&&y.call(this,p)},D})),P.define(\"select2/dropdown/selectOnClose\",[\"../utils\"],(function(E){function D(){}return D.prototype.bind=function(y,p,c){var u=this;y.call(this,p,c),p.on(\"close\",(function(v){u._handleSelectOnClose(v)}))},D.prototype._handleSelectOnClose=function(y,p){if(p&&p.originalSelect2Event!=null){var c=p.originalSelect2Event;if(c._type===\"select\"||c._type===\"unselect\")return}var u=this.getHighlightedResults();if(!(u.length<1)){var v=E.GetData(u[0],\"data\");v.element!=null&&v.element.selected||v.element==null&&v.selected||this.trigger(\"select\",{data:v})}},D})),P.define(\"select2/dropdown/closeOnSelect\",[],(function(){function E(){}return E.prototype.bind=function(D,y,p){var c=this;D.call(this,y,p),y.on(\"select\",(function(u){c._selectTriggered(u)})),y.on(\"unselect\",(function(u){c._selectTriggered(u)}))},E.prototype._selectTriggered=function(D,y){var p=y.originalEvent;p&&(p.ctrlKey||p.metaKey)||this.trigger(\"close\",{originalEvent:p,originalSelect2Event:y})},E})),P.define(\"select2/i18n/en\",[],(function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(E){var D=E.input.length-E.maximum,y=\"Please delete \"+D+\" character\";return D!=1&&(y+=\"s\"),y},inputTooShort:function(E){return\"Please enter \"+(E.minimum-E.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(E){var D=\"You can only select \"+E.maximum+\" item\";return E.maximum!=1&&(D+=\"s\"),D},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"}}})),P.define(\"select2/defaults\",[\"jquery\",\"require\",\"./results\",\"./selection/single\",\"./selection/multiple\",\"./selection/placeholder\",\"./selection/allowClear\",\"./selection/search\",\"./selection/eventRelay\",\"./utils\",\"./translation\",\"./diacritics\",\"./data/select\",\"./data/array\",\"./data/ajax\",\"./data/tags\",\"./data/tokenizer\",\"./data/minimumInputLength\",\"./data/maximumInputLength\",\"./data/maximumSelectionLength\",\"./dropdown\",\"./dropdown/search\",\"./dropdown/hidePlaceholder\",\"./dropdown/infiniteScroll\",\"./dropdown/attachBody\",\"./dropdown/minimumResultsForSearch\",\"./dropdown/selectOnClose\",\"./dropdown/closeOnSelect\",\"./i18n/en\"],(function(E,D,y,p,c,u,v,T,H,B,le,a,Ee,Ge,ve,Re,ce,Ae,be,rt,dt,ie,oe,Pe,it,Le,Ve,At,Mt){function ze(){this.reset()}return ze.prototype.apply=function(re){if((re=E.extend(!0,{},this.defaults,re)).dataAdapter==null){if(re.ajax!=null?re.dataAdapter=ve:re.data!=null?re.dataAdapter=Ge:re.dataAdapter=Ee,re.minimumInputLength>0&&(re.dataAdapter=B.Decorate(re.dataAdapter,Ae)),re.maximumInputLength>0&&(re.dataAdapter=B.Decorate(re.dataAdapter,be)),re.maximumSelectionLength>0&&(re.dataAdapter=B.Decorate(re.dataAdapter,rt)),re.tags&&(re.dataAdapter=B.Decorate(re.dataAdapter,Re)),re.tokenSeparators==null&&re.tokenizer==null||(re.dataAdapter=B.Decorate(re.dataAdapter,ce)),re.query!=null){var Fe=D(re.amdBase+\"compat/query\");re.dataAdapter=B.Decorate(re.dataAdapter,Fe)}if(re.initSelection!=null){var qe=D(re.amdBase+\"compat/initSelection\");re.dataAdapter=B.Decorate(re.dataAdapter,qe)}}if(re.resultsAdapter==null&&(re.resultsAdapter=y,re.ajax!=null&&(re.resultsAdapter=B.Decorate(re.resultsAdapter,Pe)),re.placeholder!=null&&(re.resultsAdapter=B.Decorate(re.resultsAdapter,oe)),re.selectOnClose&&(re.resultsAdapter=B.Decorate(re.resultsAdapter,Ve))),re.dropdownAdapter==null){if(re.multiple)re.dropdownAdapter=dt;else{var ot=B.Decorate(dt,ie);re.dropdownAdapter=ot}if(re.minimumResultsForSearch!==0&&(re.dropdownAdapter=B.Decorate(re.dropdownAdapter,Le)),re.closeOnSelect&&(re.dropdownAdapter=B.Decorate(re.dropdownAdapter,At)),re.dropdownCssClass!=null||re.dropdownCss!=null||re.adaptDropdownCssClass!=null){var bt=D(re.amdBase+\"compat/dropdownCss\");re.dropdownAdapter=B.Decorate(re.dropdownAdapter,bt)}re.dropdownAdapter=B.Decorate(re.dropdownAdapter,it)}if(re.selectionAdapter==null){if(re.multiple?re.selectionAdapter=c:re.selectionAdapter=p,re.placeholder!=null&&(re.selectionAdapter=B.Decorate(re.selectionAdapter,u)),re.allowClear&&(re.selectionAdapter=B.Decorate(re.selectionAdapter,v)),re.multiple&&(re.selectionAdapter=B.Decorate(re.selectionAdapter,T)),re.containerCssClass!=null||re.containerCss!=null||re.adaptContainerCssClass!=null){var gt=D(re.amdBase+\"compat/containerCss\");re.selectionAdapter=B.Decorate(re.selectionAdapter,gt)}re.selectionAdapter=B.Decorate(re.selectionAdapter,H)}re.language=this._resolveLanguage(re.language),re.language.push(\"en\");for(var Ct=[],Gt=0;Gt<re.language.length;Gt++){var xn=re.language[Gt];Ct.indexOf(xn)===-1&&Ct.push(xn)}return re.language=Ct,re.translations=this._processTranslations(re.language,re.debug),re},ze.prototype.reset=function(){function re(qe){function ot(bt){return a[bt]||bt}return qe.replace(/[^\\u0000-\\u007E]/g,ot)}function Fe(qe,ot){if(E.trim(qe.term)===\"\")return ot;if(ot.children&&ot.children.length>0){for(var bt=E.extend(!0,{},ot),gt=ot.children.length-1;gt>=0;gt--)Fe(qe,ot.children[gt])==null&&bt.children.splice(gt,1);return bt.children.length>0?bt:Fe(qe,bt)}var Ct=re(ot.text).toUpperCase(),Gt=re(qe.term).toUpperCase();return Ct.indexOf(Gt)>-1?ot:null}this.defaults={amdBase:\"./\",amdLanguageBase:\"./i18n/\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:B.escapeMarkup,language:{},matcher:Fe,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(qe){return qe},templateResult:function(qe){return qe.text},templateSelection:function(qe){return qe.text},theme:\"default\",width:\"resolve\"}},ze.prototype.applyFromElement=function(re,Fe){var qe=re.language,ot=this.defaults.language,bt=Fe.prop(\"lang\"),gt=Fe.closest(\"[lang]\").prop(\"lang\"),Ct=Array.prototype.concat.call(this._resolveLanguage(bt),this._resolveLanguage(qe),this._resolveLanguage(ot),this._resolveLanguage(gt));return re.language=Ct,re},ze.prototype._resolveLanguage=function(re){if(!re)return[];if(E.isEmptyObject(re))return[];if(E.isPlainObject(re))return[re];var Fe;Fe=E.isArray(re)?re:[re];for(var qe=[],ot=0;ot<Fe.length;ot++)if(qe.push(Fe[ot]),typeof Fe[ot]==\"string\"&&Fe[ot].indexOf(\"-\")>0){var bt=Fe[ot].split(\"-\")[0];qe.push(bt)}return qe},ze.prototype._processTranslations=function(re,Fe){for(var qe=new le,ot=0;ot<re.length;ot++){var bt=new le,gt=re[ot];if(typeof gt==\"string\")try{bt=le.loadPath(gt)}catch{try{gt=this.defaults.amdLanguageBase+gt,bt=le.loadPath(gt)}catch{Fe&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+gt+'\" could not be automatically loaded. A fallback will be used instead.')}}else bt=E.isPlainObject(gt)?new le(gt):gt;qe.extend(bt)}return qe},ze.prototype.set=function(re,Fe){var qe={};qe[E.camelCase(re)]=Fe;var ot=B._convertData(qe);E.extend(!0,this.defaults,ot)},new ze})),P.define(\"select2/options\",[\"require\",\"jquery\",\"./defaults\",\"./utils\"],(function(E,D,y,p){function c(u,v){if(this.options=u,v!=null&&this.fromElement(v),v!=null&&(this.options=y.applyFromElement(this.options,v)),this.options=y.apply(this.options),v&&v.is(\"input\")){var T=E(this.get(\"amdBase\")+\"compat/inputData\");this.options.dataAdapter=p.Decorate(this.options.dataAdapter,T)}}return c.prototype.fromElement=function(u){var v=[\"select2\"];this.options.multiple==null&&(this.options.multiple=u.prop(\"multiple\")),this.options.disabled==null&&(this.options.disabled=u.prop(\"disabled\")),this.options.dir==null&&(u.prop(\"dir\")?this.options.dir=u.prop(\"dir\"):u.closest(\"[dir]\").prop(\"dir\")?this.options.dir=u.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),u.prop(\"disabled\",this.options.disabled),u.prop(\"multiple\",this.options.multiple),p.GetData(u[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),p.StoreData(u[0],\"data\",p.GetData(u[0],\"select2Tags\")),p.StoreData(u[0],\"tags\",!0)),p.GetData(u[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),u.attr(\"ajax--url\",p.GetData(u[0],\"ajaxUrl\")),p.StoreData(u[0],\"ajax-Url\",p.GetData(u[0],\"ajaxUrl\")));var T={};function H(ce,Ae){return Ae.toUpperCase()}for(var B=0;B<u[0].attributes.length;B++){var le=u[0].attributes[B].name,a=\"data-\";if(le.substr(0,a.length)==a){var Ee=le.substring(a.length),Ge=p.GetData(u[0],Ee);T[Ee.replace(/-([a-z])/g,H)]=Ge}}D.fn.jquery&&D.fn.jquery.substr(0,2)==\"1.\"&&u[0].dataset&&(T=D.extend(!0,{},u[0].dataset,T));var ve=D.extend(!0,{},p.GetData(u[0]),T);for(var Re in ve=p._convertData(ve))D.inArray(Re,v)>-1||(D.isPlainObject(this.options[Re])?D.extend(this.options[Re],ve[Re]):this.options[Re]=ve[Re]);return this},c.prototype.get=function(u){return this.options[u]},c.prototype.set=function(u,v){this.options[u]=v},c})),P.define(\"select2/core\",[\"jquery\",\"./options\",\"./utils\",\"./keys\"],(function(E,D,y,p){var c=function(u,v){y.GetData(u[0],\"select2\")!=null&&y.GetData(u[0],\"select2\").destroy(),this.$element=u,this.id=this._generateId(u),v=v||{},this.options=new D(v,u),c.__super__.constructor.call(this);var T=u.attr(\"tabindex\")||0;y.StoreData(u[0],\"old-tabindex\",T),u.attr(\"tabindex\",\"-1\");var H=this.options.get(\"dataAdapter\");this.dataAdapter=new H(u,this.options);var B=this.render();this._placeContainer(B);var le=this.options.get(\"selectionAdapter\");this.selection=new le(u,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,B);var a=this.options.get(\"dropdownAdapter\");this.dropdown=new a(u,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,B);var Ee=this.options.get(\"resultsAdapter\");this.results=new Ee(u,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var Ge=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current((function(ve){Ge.trigger(\"selection:update\",{data:ve})})),u.addClass(\"select2-hidden-accessible\"),u.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),y.StoreData(u[0],\"select2\",this),u.data(\"select2\",this)};return y.Extend(c,y.Observable),c.prototype._generateId=function(u){return\"select2-\"+(u.attr(\"id\")!=null?u.attr(\"id\"):u.attr(\"name\")!=null?u.attr(\"name\")+\"-\"+y.generateChars(2):y.generateChars(4)).replace(/(:|\\.|\\[|\\]|,)/g,\"\")},c.prototype._placeContainer=function(u){u.insertAfter(this.$element);var v=this._resolveWidth(this.$element,this.options.get(\"width\"));v!=null&&u.css(\"width\",v)},c.prototype._resolveWidth=function(u,v){var T=/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(v==\"resolve\"){var H=this._resolveWidth(u,\"style\");return H??this._resolveWidth(u,\"element\")}if(v==\"element\"){var B=u.outerWidth(!1);return B<=0?\"auto\":B+\"px\"}if(v==\"style\"){var le=u.attr(\"style\");if(typeof le!=\"string\")return null;for(var a=le.split(\";\"),Ee=0,Ge=a.length;Ee<Ge;Ee+=1){var ve=a[Ee].replace(/\\s/g,\"\").match(T);if(ve!==null&&ve.length>=1)return ve[1]}return null}return v==\"computedstyle\"?window.getComputedStyle(u[0]).width:v},c.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},c.prototype._registerDomEvents=function(){var u=this;this.$element.on(\"change.select2\",(function(){u.dataAdapter.current((function(T){u.trigger(\"selection:update\",{data:T})}))})),this.$element.on(\"focus.select2\",(function(T){u.trigger(\"focus\",T)})),this._syncA=y.bind(this._syncAttributes,this),this._syncS=y.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent(\"onpropertychange\",this._syncA);var v=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;v!=null?(this._observer=new v((function(T){u._syncA(),u._syncS(null,T)})),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener(\"DOMAttrModified\",u._syncA,!1),this.$element[0].addEventListener(\"DOMNodeInserted\",u._syncS,!1),this.$element[0].addEventListener(\"DOMNodeRemoved\",u._syncS,!1))},c.prototype._registerDataEvents=function(){var u=this;this.dataAdapter.on(\"*\",(function(v,T){u.trigger(v,T)}))},c.prototype._registerSelectionEvents=function(){var u=this,v=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",(function(){u.toggleDropdown()})),this.selection.on(\"focus\",(function(T){u.focus(T)})),this.selection.on(\"*\",(function(T,H){E.inArray(T,v)===-1&&u.trigger(T,H)}))},c.prototype._registerDropdownEvents=function(){var u=this;this.dropdown.on(\"*\",(function(v,T){u.trigger(v,T)}))},c.prototype._registerResultsEvents=function(){var u=this;this.results.on(\"*\",(function(v,T){u.trigger(v,T)}))},c.prototype._registerEvents=function(){var u=this;this.on(\"open\",(function(){u.$container.addClass(\"select2-container--open\")})),this.on(\"close\",(function(){u.$container.removeClass(\"select2-container--open\")})),this.on(\"enable\",(function(){u.$container.removeClass(\"select2-container--disabled\")})),this.on(\"disable\",(function(){u.$container.addClass(\"select2-container--disabled\")})),this.on(\"blur\",(function(){u.$container.removeClass(\"select2-container--focus\")})),this.on(\"query\",(function(v){u.isOpen()||u.trigger(\"open\",{}),this.dataAdapter.query(v,(function(T){u.trigger(\"results:all\",{data:T,query:v})}))})),this.on(\"query:append\",(function(v){this.dataAdapter.query(v,(function(T){u.trigger(\"results:append\",{data:T,query:v})}))})),this.on(\"keypress\",(function(v){var T=v.which;u.isOpen()?T===p.ESC||T===p.TAB||T===p.UP&&v.altKey?(u.close(v),v.preventDefault()):T===p.ENTER?(u.trigger(\"results:select\",{}),v.preventDefault()):T===p.SPACE&&v.ctrlKey?(u.trigger(\"results:toggle\",{}),v.preventDefault()):T===p.UP?(u.trigger(\"results:previous\",{}),v.preventDefault()):T===p.DOWN&&(u.trigger(\"results:next\",{}),v.preventDefault()):(T===p.ENTER||T===p.SPACE||T===p.DOWN&&v.altKey)&&(u.open(),v.preventDefault())}))},c.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},c.prototype._isChangeMutation=function(u,v){var T=!1,H=this;if(!u||!u.target||u.target.nodeName===\"OPTION\"||u.target.nodeName===\"OPTGROUP\"){if(v)if(v.addedNodes&&v.addedNodes.length>0)for(var B=0;B<v.addedNodes.length;B++)v.addedNodes[B].selected&&(T=!0);else v.removedNodes&&v.removedNodes.length>0?T=!0:E.isArray(v)&&E.each(v,(function(le,a){if(H._isChangeMutation(le,a))return T=!0,!1}));else T=!0;return T}},c.prototype._syncSubtree=function(u,v){var T=this._isChangeMutation(u,v),H=this;T&&this.dataAdapter.current((function(B){H.trigger(\"selection:update\",{data:B})}))},c.prototype.trigger=function(u,v){var T=c.__super__.trigger,H={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(v===void 0&&(v={}),u in H){var B=H[u],le={prevented:!1,name:u,args:v};if(T.call(this,B,le),le.prevented)return void(v.prevented=!0)}T.call(this,u,v)},c.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},c.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},c.prototype.close=function(u){this.isOpen()&&this.trigger(\"close\",{originalEvent:u})},c.prototype.isEnabled=function(){return!this.isDisabled()},c.prototype.isDisabled=function(){return this.options.get(\"disabled\")},c.prototype.isOpen=function(){return this.$container.hasClass(\"select2-container--open\")},c.prototype.hasFocus=function(){return this.$container.hasClass(\"select2-container--focus\")},c.prototype.focus=function(u){this.hasFocus()||(this.$container.addClass(\"select2-container--focus\"),this.trigger(\"focus\",{}))},c.prototype.enable=function(u){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'),u!=null&&u.length!==0||(u=[!0]);var v=!u[0];this.$element.prop(\"disabled\",v)},c.prototype.data=function(){this.options.get(\"debug\")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var u=[];return this.dataAdapter.current((function(v){u=v})),u},c.prototype.val=function(u){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),u==null||u.length===0)return this.$element.val();var v=u[0];E.isArray(v)&&(v=E.map(v,(function(T){return T.toString()}))),this.$element.val(v).trigger(\"input\").trigger(\"change\")},c.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent(\"onpropertychange\",this._syncA),this._observer!=null?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener(\"DOMAttrModified\",this._syncA,!1),this.$element[0].removeEventListener(\"DOMNodeInserted\",this._syncS,!1),this.$element[0].removeEventListener(\"DOMNodeRemoved\",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",y.GetData(this.$element[0],\"old-tabindex\")),this.$element.removeClass(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),y.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},c.prototype.render=function(){var u=E('<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>');return u.attr(\"dir\",this.options.get(\"dir\")),this.$container=u,this.$container.addClass(\"select2-container--\"+this.options.get(\"theme\")),y.StoreData(u[0],\"element\",this.$element),u},c})),P.define(\"jquery-mousewheel\",[\"jquery\"],(function(E){return E})),P.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],(function(E,D,y,p,c){if(E.fn.select2==null){var u=[\"open\",\"close\",\"destroy\"];E.fn.select2=function(v){if(typeof(v=v||{})==\"object\")return this.each((function(){var B=E.extend(!0,{},v);new y(E(this),B)})),this;if(typeof v==\"string\"){var T,H=Array.prototype.slice.call(arguments,1);return this.each((function(){var B=c.GetData(this,\"select2\");B==null&&window.console&&console.error&&console.error(\"The select2('\"+v+\"') method was called on an element that is not using Select2.\"),T=B[v].apply(B,H)})),E.inArray(v,u)>-1?this:T}throw new Error(\"Invalid arguments for Select2: \"+v)}}return E.fn.select2.defaults==null&&(E.fn.select2.defaults=p),y})),{define:P.define,require:P.require}})(),k=S.require(\"jquery.select2\");return j.fn.select2.amd=S,k})==\"function\"?q.apply(L,f):q)===void 0||(b.exports=_)},911:(b,L,Y)=>{var q,f,_;(function(j){f=[Y(755)],q=function(S,k){var P={beforeShow:T,move:T,change:T,show:T,hide:T,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:\"body\",maxSelectionSize:7,cancelText:\"cancel\",chooseText:\"choose\",togglePaletteMoreText:\"more\",togglePaletteLessText:\"less\",clearText:\"Clear Color Selection\",noColorSelectedText:\"No Color Selected\",preferredFormat:!1,className:\"\",containerClassName:\"\",replacerClassName:\"\",showAlpha:!1,theme:\"sp-light\",palette:[[\"#ffffff\",\"#000000\",\"#ff0000\",\"#ff8000\",\"#ffff00\",\"#008000\",\"#0000ff\",\"#4b0082\",\"#9400d3\"]],selectionPalette:[],disabled:!1,offset:null},N=[],w=!!/msie/i.exec(window.navigator.userAgent),ee=(function(){function ve(ce,Ae){return!!~(\"\"+ce).indexOf(Ae)}var Re=document.createElement(\"div\").style;return Re.cssText=\"background-color:rgba(0,0,0,.5)\",ve(Re.backgroundColor,\"rgba\")||ve(Re.backgroundColor,\"hsla\")})(),E=[\"<div class='sp-replacer'>\",\"<div class='sp-preview'><div class='sp-preview-inner'></div></div>\",\"<div class='sp-dd'>&#9660;</div>\",\"</div>\"].join(\"\"),D=(function(){var ve=\"\";if(w)for(var Re=1;Re<=6;Re++)ve+=\"<div class='sp-\"+Re+\"'></div>\";return[\"<div class='sp-container sp-hidden'>\",\"<div class='sp-palette-container'>\",\"<div class='sp-palette sp-thumb sp-cf'></div>\",\"<div class='sp-palette-button-container sp-cf'>\",\"<button type='button' class='sp-palette-toggle'></button>\",\"</div>\",\"</div>\",\"<div class='sp-picker-container'>\",\"<div class='sp-top sp-cf'>\",\"<div class='sp-fill'></div>\",\"<div class='sp-top-inner'>\",\"<div class='sp-color'>\",\"<div class='sp-sat'>\",\"<div class='sp-val'>\",\"<div class='sp-dragger'></div>\",\"</div>\",\"</div>\",\"</div>\",\"<div class='sp-clear sp-clear-display'>\",\"</div>\",\"<div class='sp-hue'>\",\"<div class='sp-slider'></div>\",ve,\"</div>\",\"</div>\",\"<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>\",\"</div>\",\"<div class='sp-input-container sp-cf'>\",\"<input class='sp-input' type='text' spellcheck='false'  />\",\"</div>\",\"<div class='sp-initial sp-thumb sp-cf'></div>\",\"<div class='sp-button-container sp-cf'>\",\"<a class='sp-cancel' href='#'></a>\",\"<button type='button' class='sp-choose'></button>\",\"</div>\",\"</div>\",\"</div>\"].join(\"\")})();function y(ve,Re,ce,Ae){for(var be=[],rt=0;rt<ve.length;rt++){var dt=ve[rt];if(dt){var ie=tinycolor(dt),oe=ie.toHsl().l<.5?\"sp-thumb-el sp-thumb-dark\":\"sp-thumb-el sp-thumb-light\";oe+=tinycolor.equals(Re,dt)?\" sp-thumb-active\":\"\";var Pe=ie.toString(Ae.preferredFormat||\"rgb\"),it=ee?\"background-color:\"+ie.toRgbString():\"filter:\"+ie.toFilter();be.push('<span title=\"'+Pe+'\" data-color=\"'+ie.toRgbString()+'\" class=\"'+oe+'\"><span class=\"sp-thumb-inner\" style=\"'+it+';\"></span></span>')}else{var Le=\"sp-clear-display\";be.push(S(\"<div />\").append(S('<span data-color=\"\" style=\"background-color:transparent;\" class=\"'+Le+'\"></span>').attr(\"title\",Ae.noColorSelectedText)).html())}}return\"<div class='sp-cf \"+ce+\"'>\"+be.join(\"\")+\"</div>\"}function p(){for(var ve=0;ve<N.length;ve++)N[ve]&&N[ve].hide()}function c(ve,Re){var ce=S.extend({},P,ve);return ce.callbacks={move:B(ce.move,Re),change:B(ce.change,Re),show:B(ce.show,Re),hide:B(ce.hide,Re),beforeShow:B(ce.beforeShow,Re)},ce}function u(ve,Re){var ce=c(Re,ve),Ae=ce.flat,be=ce.showSelectionPalette,rt=ce.localStorageKey,dt=ce.theme,ie=ce.callbacks,oe=a(Gn,10),Pe=!1,it=!1,Le=0,Ve=0,At=0,Mt=0,ze=0,re=0,Fe=0,qe=0,ot=0,bt=0,gt=1,Ct=[],Gt=[],xn={},Oe=ce.selectionPalette.slice(0),on=ce.maxSelectionSize,Hr=\"sp-dragging\",Fn=null,Jn=ve.ownerDocument,It=(Jn.body,S(ve)),Rn=!1,Ke=S(D,Jn).addClass(dt),kn=Ke.find(\".sp-picker-container\"),_t=Ke.find(\".sp-color\"),Zn=Ke.find(\".sp-dragger\"),Qt=Ke.find(\".sp-hue\"),wr=Ke.find(\".sp-slider\"),sr=Ke.find(\".sp-alpha-inner\"),zn=Ke.find(\".sp-alpha\"),un=Ke.find(\".sp-alpha-handle\"),Vt=Ke.find(\".sp-input\"),ur=Ke.find(\".sp-palette\"),hn=Ke.find(\".sp-initial\"),lr=Ke.find(\".sp-cancel\"),er=Ke.find(\".sp-clear\"),qt=Ke.find(\".sp-choose\"),Kt=Ke.find(\".sp-palette-toggle\"),O=It.is(\"input\"),F=O&&It.attr(\"type\")===\"color\"&&Ee(),K=O&&!Ae,we=K?S(E).addClass(dt).addClass(ce.className).addClass(ce.replacerClassName):S([]),ke=K?we:It,Ne=we.find(\".sp-preview-inner\"),vt=ce.color||O&&It.val(),mt=!1,ut=ce.preferredFormat,Dn=!ce.showButtons||ce.clickoutFiresChange,dn=!vt,Jt=ce.allowEmpty&&!F;function Mr(){if(ce.showPaletteOnly&&(ce.showPalette=!0),Kt.text(ce.showPaletteOnly?ce.togglePaletteMoreText:ce.togglePaletteLessText),ce.palette){Ct=ce.palette.slice(0),Gt=S.isArray(Ct[0])?Ct:[Ct],xn={};for(var Te=0;Te<Gt.length;Te++)for(var Be=0;Be<Gt[Te].length;Be++){var xt=tinycolor(Gt[Te][Be]).toRgbString();xn[xt]=!0}}Ke.toggleClass(\"sp-flat\",Ae),Ke.toggleClass(\"sp-input-disabled\",!ce.showInput),Ke.toggleClass(\"sp-alpha-enabled\",ce.showAlpha),Ke.toggleClass(\"sp-clear-enabled\",Jt),Ke.toggleClass(\"sp-buttons-disabled\",!ce.showButtons),Ke.toggleClass(\"sp-palette-buttons-disabled\",!ce.togglePaletteOnly),Ke.toggleClass(\"sp-palette-disabled\",!ce.showPalette),Ke.toggleClass(\"sp-palette-only\",ce.showPaletteOnly),Ke.toggleClass(\"sp-initial-disabled\",!ce.showInitial),Ke.addClass(ce.className).addClass(ce.containerClassName),Gn()}function ti(){if(w&&Ke.find(\"*:not(input)\").attr(\"unselectable\",\"on\"),Mr(),K&&It.after(we).hide(),Jt||er.hide(),Ae)It.after(Ke).hide();else{var Te=ce.appendTo===\"parent\"?It.parent():S(ce.appendTo);Te.length!==1&&(Te=S(\"body\")),Te.append(Ke)}function Be(Ye){return Ye.data&&Ye.data.ignore?(tr(S(Ye.target).closest(\".sp-thumb-el\").data(\"color\")),Bn()):(tr(S(Ye.target).closest(\".sp-thumb-el\").data(\"color\")),Bn(),ce.hideAfterPaletteSelect?(Wn(!0),Tn()):Wn()),!1}vi(),ke.on(\"click.spectrum touchstart.spectrum\",(function(Ye){Rn||pr(),Ye.stopPropagation(),S(Ye.target).is(\"input\")||Ye.preventDefault()})),(It.is(\":disabled\")||ce.disabled===!0)&&xr(),Ke.click(H),Vt.change(fr),Vt.on(\"paste\",(function(){setTimeout(fr,1)})),Vt.keydown((function(Ye){Ye.keyCode==13&&fr()})),lr.text(ce.cancelText),lr.on(\"click.spectrum\",(function(Ye){Ye.stopPropagation(),Ye.preventDefault(),oi(),Tn()})),er.attr(\"title\",ce.clearText),er.on(\"click.spectrum\",(function(Ye){Ye.stopPropagation(),Ye.preventDefault(),dn=!0,Bn(),Ae&&Wn(!0)})),qt.text(ce.chooseText),qt.on(\"click.spectrum\",(function(Ye){Ye.stopPropagation(),Ye.preventDefault(),w&&Vt.is(\":focus\")&&Vt.trigger(\"change\"),mi()&&(Wn(!0),Tn())})),Kt.text(ce.showPaletteOnly?ce.togglePaletteMoreText:ce.togglePaletteLessText),Kt.on(\"click.spectrum\",(function(Ye){Ye.stopPropagation(),Ye.preventDefault(),ce.showPaletteOnly=!ce.showPaletteOnly,ce.showPaletteOnly||Ae||Ke.css(\"left\",\"-=\"+(kn.outerWidth(!0)+5)),Mr()})),le(zn,(function(Ye,Cn,en){gt=Ye/ze,dn=!1,en.shiftKey&&(gt=Math.round(10*gt)/10),Bn()}),Dr,_r),le(Qt,(function(Ye,Cn){qe=parseFloat(Cn/Mt),dn=!1,ce.showAlpha||(gt=1),Bn()}),Dr,_r),le(_t,(function(Ye,Cn,en){if(en.shiftKey){if(!Fn){var Ft=ot*Le,Vn=Ve-bt*Ve,nr=Math.abs(Ye-Ft)>Math.abs(Cn-Vn);Fn=nr?\"x\":\"y\"}}else Fn=null;var Ri=!Fn||Fn===\"y\";(!Fn||Fn===\"x\")&&(ot=parseFloat(Ye/Le)),Ri&&(bt=parseFloat((Ve-Cn)/Ve)),dn=!1,ce.showAlpha||(gt=1),Bn()}),Dr,_r),vt?(tr(vt),jr(),ut=ce.preferredFormat||tinycolor(vt).format,ni(vt)):jr(),Ae&&ri();var xt=w?\"mousedown.spectrum\":\"click.spectrum touchstart.spectrum\";ur.on(xt,\".sp-thumb-el\",Be),hn.on(xt,\".sp-thumb-el:nth-child(1)\",{ignore:!0},Be)}function vi(){if(rt&&window.localStorage){try{var Te=window.localStorage[rt].split(\",#\");Te.length>1&&(delete window.localStorage[rt],S.each(Te,(function(Be,xt){ni(xt)})))}catch{}try{Oe=window.localStorage[rt].split(\";\")}catch{}}}function ni(Te){if(be){var Be=tinycolor(Te).toRgbString();if(!xn[Be]&&S.inArray(Be,Oe)===-1)for(Oe.push(Be);Oe.length>on;)Oe.shift();if(rt&&window.localStorage)try{window.localStorage[rt]=Oe.join(\";\")}catch{}}}function Di(){var Te=[];if(ce.showPalette)for(var Be=0;Be<Oe.length;Be++){var xt=tinycolor(Oe[Be]).toRgbString();xn[xt]||Te.push(Oe[Be])}return Te.reverse().slice(0,ce.maxSelectionSize)}function cr(){var Te=Zt(),Be=S.map(Gt,(function(xt,Ye){return y(xt,Te,\"sp-palette-row sp-palette-row-\"+Ye,ce)}));vi(),Oe&&Be.push(y(Di(),Te,\"sp-palette-row sp-palette-row-selection\",ce)),ur.html(Be.join(\"\"))}function Ur(){if(ce.showInitial){var Te=mt,Be=Zt();hn.html(y([Te,Be],Be,\"sp-palette-row-initial\",ce))}}function Dr(){(Ve<=0||Le<=0||Mt<=0)&&Gn(),it=!0,Ke.addClass(Hr),Fn=null,It.trigger(\"dragstart.spectrum\",[Zt()])}function _r(){it=!1,Ke.removeClass(Hr),It.trigger(\"dragstop.spectrum\",[Zt()])}function fr(){var Te=Vt.val();if(Te!==null&&Te!==\"\"||!Jt){var Be=tinycolor(Te);Be.isValid()?(tr(Be),Bn(),Wn()):Vt.addClass(\"sp-validation-error\")}else tr(null),Bn(),Wn()}function pr(){Pe?Tn():ri()}function ri(){var Te=S.Event(\"beforeShow.spectrum\");Pe?Gn():(It.trigger(Te,[Zt()]),ie.beforeShow(Zt())===!1||Te.isDefaultPrevented()||(p(),Pe=!0,S(Jn).on(\"keydown.spectrum\",ii),S(Jn).on(\"click.spectrum\",ji),S(window).on(\"resize.spectrum\",oe),we.addClass(\"sp-active\"),Ke.removeClass(\"sp-hidden\"),Gn(),jr(),mt=Zt(),Ur(),ie.show(mt),It.trigger(\"show.spectrum\",[mt])))}function ii(Te){Te.keyCode===27&&Tn()}function ji(Te){Te.button!=2&&(it||(Dn?Wn(!0):oi(),Tn()))}function Tn(){Pe&&!Ae&&(Pe=!1,S(Jn).off(\"keydown.spectrum\",ii),S(Jn).off(\"click.spectrum\",ji),S(window).off(\"resize.spectrum\",oe),we.removeClass(\"sp-active\"),Ke.addClass(\"sp-hidden\"),ie.hide(Zt()),It.trigger(\"hide.spectrum\",[Zt()]))}function oi(){tr(mt,!0),Wn(!0)}function tr(Te,Be){var xt,Ye;tinycolor.equals(Te,Zt())?jr():(!Te&&Jt?dn=!0:(dn=!1,Ye=(xt=tinycolor(Te)).toHsv(),qe=Ye.h%360/360,ot=Ye.s,bt=Ye.v,gt=Ye.a),jr(),xt&&xt.isValid()&&!Be&&(ut=ce.preferredFormat||xt.getFormat()))}function Zt(Te){return Te=Te||{},Jt&&dn?null:tinycolor.fromRatio({h:qe,s:ot,v:bt,a:Math.round(1e3*gt)/1e3},{format:Te.format||ut})}function mi(){return!Vt.hasClass(\"sp-validation-error\")}function Bn(){jr(),ie.move(Zt()),It.trigger(\"move.spectrum\",[Zt()])}function jr(){Vt.removeClass(\"sp-validation-error\"),Oi();var Te=tinycolor.fromRatio({h:qe,s:1,v:1});_t.css(\"background-color\",Te.toHexString());var Be=ut;gt<1&&(gt!==0||Be!==\"name\")&&(Be!==\"hex\"&&Be!==\"hex3\"&&Be!==\"hex6\"&&Be!==\"name\"||(Be=\"rgb\"));var xt=Zt({format:Be}),Ye=\"\";if(Ne.removeClass(\"sp-clear-display\"),Ne.css(\"background-color\",\"transparent\"),!xt&&Jt)Ne.addClass(\"sp-clear-display\");else{var Cn=xt.toHexString(),en=xt.toRgbString();if(ee||xt.alpha===1?Ne.css(\"background-color\",en):(Ne.css(\"background-color\",\"transparent\"),Ne.css(\"filter\",xt.toFilter())),ce.showAlpha){var Ft=xt.toRgb();Ft.a=0;var Vn=tinycolor(Ft).toRgbString(),nr=\"linear-gradient(left, \"+Vn+\", \"+Cn+\")\";w?sr.css(\"filter\",tinycolor(Vn).toFilter({gradientType:1},Cn)):(sr.css(\"background\",\"-webkit-\"+nr),sr.css(\"background\",\"-moz-\"+nr),sr.css(\"background\",\"-ms-\"+nr),sr.css(\"background\",\"linear-gradient(to right, \"+Vn+\", \"+Cn+\")\"))}Ye=xt.toString(Be)}ce.showInput&&Vt.val(Ye),ce.showPalette&&cr(),Ur()}function Oi(){var Te=ot,Be=bt;if(Jt&&dn)un.hide(),wr.hide(),Zn.hide();else{un.show(),wr.show(),Zn.show();var xt=Te*Le,Ye=Ve-Be*Ve;xt=Math.max(-At,Math.min(Le-At,xt-At)),Ye=Math.max(-At,Math.min(Ve-At,Ye-At)),Zn.css({top:Ye+\"px\",left:xt+\"px\"});var Cn=gt*ze;un.css({left:Cn-re/2+\"px\"});var en=qe*Mt;wr.css({top:en-Fe+\"px\"})}}function Wn(Te){var Be=Zt(),xt=\"\",Ye=!tinycolor.equals(Be,mt);Be&&(xt=Be.toString(ut),ni(Be)),O&&It.val(xt),Te&&Ye&&(ie.change(Be),It.trigger(\"change\",[Be]))}function Gn(){Pe&&(Le=_t.width(),Ve=_t.height(),At=Zn.height(),Qt.width(),Mt=Qt.height(),Fe=wr.height(),ze=zn.width(),re=un.width(),Ae||(Ke.css(\"position\",\"absolute\"),ce.offset?Ke.offset(ce.offset):Ke.offset(v(Ke,ke))),Oi(),ce.showPalette&&cr(),It.trigger(\"reflow.spectrum\"))}function yi(){It.show(),ke.off(\"click.spectrum touchstart.spectrum\"),Ke.remove(),we.remove(),N[St.id]=null}function Ni(Te,Be){return Te===k?S.extend({},ce):Be===k?ce[Te]:(ce[Te]=Be,Te===\"preferredFormat\"&&(ut=ce.preferredFormat),void Mr())}function gn(){Rn=!1,It.attr(\"disabled\",!1),ke.removeClass(\"sp-disabled\")}function xr(){Tn(),Rn=!0,It.attr(\"disabled\",!0),ke.addClass(\"sp-disabled\")}function ai(Te){ce.offset=Te,Gn()}ti();var St={show:ri,hide:Tn,toggle:pr,reflow:Gn,option:Ni,enable:gn,disable:xr,offset:ai,set:function(Te){tr(Te),Wn()},get:Zt,destroy:yi,container:Ke};return St.id=N.push(St)-1,St}function v(ve,Re){var ce=0,Ae=ve.outerWidth(),be=ve.outerHeight(),rt=Re.outerHeight(),dt=ve[0].ownerDocument,ie=dt.documentElement,oe=ie.clientWidth+S(dt).scrollLeft(),Pe=ie.clientHeight+S(dt).scrollTop(),it=Re.offset(),Le=it.left,Ve=it.top;return Ve+=rt,Le-=Math.min(Le,Le+Ae>oe&&oe>Ae?Math.abs(Le+Ae-oe):0),{top:Ve-=Math.min(Ve,Ve+be>Pe&&Pe>be?Math.abs(be+rt-ce):ce),bottom:it.bottom,left:Le,right:it.right,width:it.width,height:it.height}}function T(){}function H(ve){ve.stopPropagation()}function B(ve,Re){var ce=Array.prototype.slice,Ae=ce.call(arguments,2);return function(){return ve.apply(Re,Ae.concat(ce.call(arguments)))}}function le(ve,Re,ce,Ae){Re=Re||function(){},ce=ce||function(){},Ae=Ae||function(){};var be=document,rt=!1,dt={},ie=0,oe=0,Pe=\"ontouchstart\"in window,it={};function Le(ze){ze.stopPropagation&&ze.stopPropagation(),ze.preventDefault&&ze.preventDefault(),ze.returnValue=!1}function Ve(ze){if(rt){if(w&&be.documentMode<9&&!ze.button)return Mt();var re=ze.originalEvent&&ze.originalEvent.touches&&ze.originalEvent.touches[0],Fe=re&&re.pageX||ze.pageX,qe=re&&re.pageY||ze.pageY,ot=Math.max(0,Math.min(Fe-dt.left,oe)),bt=Math.max(0,Math.min(qe-dt.top,ie));Pe&&Le(ze),Re.apply(ve,[ot,bt,ze])}}function At(ze){(ze.which?ze.which==3:ze.button==2)||rt||ce.apply(ve,arguments)!==!1&&(rt=!0,ie=S(ve).height(),oe=S(ve).width(),dt=S(ve).offset(),S(be).on(it),S(be.body).addClass(\"sp-dragging\"),Ve(ze),Le(ze))}function Mt(){rt&&(S(be).off(it),S(be.body).removeClass(\"sp-dragging\"),setTimeout((function(){Ae.apply(ve,arguments)}),0)),rt=!1}it.selectstart=Le,it.dragstart=Le,it[\"touchmove mousemove\"]=Ve,it[\"touchend mouseup\"]=Mt,S(ve).on(\"touchstart mousedown\",At)}function a(ve,Re,ce){var Ae;return function(){var be=this,rt=arguments,dt=function(){Ae=null,ve.apply(be,rt)};Ae||(Ae=setTimeout(dt,Re))}}function Ee(){return S.fn.spectrum.inputTypeColorSupport()}var Ge=\"spectrum.id\";S.fn.spectrum=function(ve,Re){if(typeof ve==\"string\"){var ce=this,Ae=Array.prototype.slice.call(arguments,1);return this.each((function(){var be=N[S(this).data(Ge)];if(be){var rt=be[ve];if(!rt)throw new Error(\"Spectrum: no such method: '\"+ve+\"'\");ve==\"get\"?ce=be.get():ve==\"container\"?ce=be.container:ve==\"option\"?ce=be.option.apply(be,Ae):ve==\"destroy\"?(be.destroy(),S(this).removeData(Ge)):rt.apply(be,Ae)}})),ce}return this.spectrum(\"destroy\").each((function(){var be=u(this,S.extend({},S(this).data(),ve));S(this).data(Ge,be.id)}))},S.fn.spectrum.load=!0,S.fn.spectrum.loadOpts={},S.fn.spectrum.draggable=le,S.fn.spectrum.defaults=P,S.fn.spectrum.inputTypeColorSupport=function ve(){if(ve._cachedResult===void 0){var Re=S(\"<input type='color'/>\")[0];ve._cachedResult=Re.type===\"color\"&&Re.value!==\"\"}return ve._cachedResult},S.spectrum={},S.spectrum.localization={},S.spectrum.palettes={},S.fn.spectrum.processNativeColorInputs=function(){var ve=S(\"input[type=color]\");ve.length&&!Ee()&&ve.spectrum({preferredFormat:\"hex6\"})},(function(){var ve=/^[\\s,#]+/,Re=/\\s+$/,ce=0,Ae=Math,be=Ae.round,rt=Ae.min,dt=Ae.max,ie=Ae.random,oe=function(O,F){if(F=F||{},(O=O||\"\")instanceof oe)return O;if(!(this instanceof oe))return new oe(O,F);var K=Pe(O);this._originalInput=O,this._r=K.r,this._g=K.g,this._b=K.b,this._a=K.a,this._roundA=be(1e3*this._a)/1e3,this._format=F.format||K.format,this._gradientType=F.gradientType,this._r<1&&(this._r=be(this._r)),this._g<1&&(this._g=be(this._g)),this._b<1&&(this._b=be(this._b)),this._ok=K.ok,this._tc_id=ce++};function Pe(O){var F={r:0,g:0,b:0},K=1,we=!1,ke=!1;return typeof O==\"string\"&&(O=Kt(O)),typeof O==\"object\"&&(O.hasOwnProperty(\"r\")&&O.hasOwnProperty(\"g\")&&O.hasOwnProperty(\"b\")?(F=it(O.r,O.g,O.b),we=!0,ke=String(O.r).substr(-1)===\"%\"?\"prgb\":\"rgb\"):O.hasOwnProperty(\"h\")&&O.hasOwnProperty(\"s\")&&O.hasOwnProperty(\"v\")?(O.s=un(O.s),O.v=un(O.v),F=Mt(O.h,O.s,O.v),we=!0,ke=\"hsv\"):O.hasOwnProperty(\"h\")&&O.hasOwnProperty(\"s\")&&O.hasOwnProperty(\"l\")&&(O.s=un(O.s),O.l=un(O.l),F=Ve(O.h,O.s,O.l),we=!0,ke=\"hsl\"),O.hasOwnProperty(\"a\")&&(K=O.a)),K=kn(K),{ok:we,format:O.format||ke,r:rt(255,dt(F.r,0)),g:rt(255,dt(F.g,0)),b:rt(255,dt(F.b,0)),a:K}}function it(O,F,K){return{r:255*_t(O,255),g:255*_t(F,255),b:255*_t(K,255)}}function Le(O,F,K){O=_t(O,255),F=_t(F,255),K=_t(K,255);var we,ke,Ne=dt(O,F,K),vt=rt(O,F,K),mt=(Ne+vt)/2;if(Ne==vt)we=ke=0;else{var ut=Ne-vt;switch(ke=mt>.5?ut/(2-Ne-vt):ut/(Ne+vt),Ne){case O:we=(F-K)/ut+(F<K?6:0);break;case F:we=(K-O)/ut+2;break;case K:we=(O-F)/ut+4}we/=6}return{h:we,s:ke,l:mt}}function Ve(O,F,K){var we,ke,Ne;function vt(Dn,dn,Jt){return Jt<0&&(Jt+=1),Jt>1&&(Jt-=1),Jt<.16666666666666666?Dn+6*(dn-Dn)*Jt:Jt<.5?dn:Jt<.6666666666666666?Dn+(dn-Dn)*(.6666666666666666-Jt)*6:Dn}if(O=_t(O,360),F=_t(F,100),K=_t(K,100),F===0)we=ke=Ne=K;else{var mt=K<.5?K*(1+F):K+F-K*F,ut=2*K-mt;we=vt(ut,mt,O+.3333333333333333),ke=vt(ut,mt,O),Ne=vt(ut,mt,O-.3333333333333333)}return{r:255*we,g:255*ke,b:255*Ne}}function At(O,F,K){O=_t(O,255),F=_t(F,255),K=_t(K,255);var we,ke,Ne=dt(O,F,K),vt=rt(O,F,K),mt=Ne,ut=Ne-vt;if(ke=Ne===0?0:ut/Ne,Ne==vt)we=0;else{switch(Ne){case O:we=(F-K)/ut+(F<K?6:0);break;case F:we=(K-O)/ut+2;break;case K:we=(O-F)/ut+4}we/=6}return{h:we,s:ke,v:mt}}function Mt(O,F,K){O=6*_t(O,360),F=_t(F,100),K=_t(K,100);var we=Ae.floor(O),ke=O-we,Ne=K*(1-F),vt=K*(1-ke*F),mt=K*(1-(1-ke)*F),ut=we%6;return{r:255*[K,vt,Ne,Ne,mt,K][ut],g:255*[mt,K,K,vt,Ne,Ne][ut],b:255*[Ne,Ne,mt,K,K,vt][ut]}}function ze(O,F,K,we){var ke=[zn(be(O).toString(16)),zn(be(F).toString(16)),zn(be(K).toString(16))];return we&&ke[0].charAt(0)==ke[0].charAt(1)&&ke[1].charAt(0)==ke[1].charAt(1)&&ke[2].charAt(0)==ke[2].charAt(1)?ke[0].charAt(0)+ke[1].charAt(0)+ke[2].charAt(0):ke.join(\"\")}function re(O,F,K,we){return[zn(Vt(we)),zn(be(O).toString(16)),zn(be(F).toString(16)),zn(be(K).toString(16))].join(\"\")}function Fe(O,F){F=F===0?0:F||10;var K=oe(O).toHsl();return K.s-=F/100,K.s=Zn(K.s),oe(K)}function qe(O,F){F=F===0?0:F||10;var K=oe(O).toHsl();return K.s+=F/100,K.s=Zn(K.s),oe(K)}function ot(O){return oe(O).desaturate(100)}function bt(O,F){F=F===0?0:F||10;var K=oe(O).toHsl();return K.l+=F/100,K.l=Zn(K.l),oe(K)}function gt(O,F){F=F===0?0:F||10;var K=oe(O).toRgb();return K.r=dt(0,rt(255,K.r-be(-F/100*255))),K.g=dt(0,rt(255,K.g-be(-F/100*255))),K.b=dt(0,rt(255,K.b-be(-F/100*255))),oe(K)}function Ct(O,F){F=F===0?0:F||10;var K=oe(O).toHsl();return K.l-=F/100,K.l=Zn(K.l),oe(K)}function Gt(O,F){var K=oe(O).toHsl(),we=(be(K.h)+F)%360;return K.h=we<0?360+we:we,oe(K)}function xn(O){var F=oe(O).toHsl();return F.h=(F.h+180)%360,oe(F)}function Oe(O){var F=oe(O).toHsl(),K=F.h;return[oe(O),oe({h:(K+120)%360,s:F.s,l:F.l}),oe({h:(K+240)%360,s:F.s,l:F.l})]}function on(O){var F=oe(O).toHsl(),K=F.h;return[oe(O),oe({h:(K+90)%360,s:F.s,l:F.l}),oe({h:(K+180)%360,s:F.s,l:F.l}),oe({h:(K+270)%360,s:F.s,l:F.l})]}function Hr(O){var F=oe(O).toHsl(),K=F.h;return[oe(O),oe({h:(K+72)%360,s:F.s,l:F.l}),oe({h:(K+216)%360,s:F.s,l:F.l})]}function Fn(O,F,K){F=F||6,K=K||30;var we=oe(O).toHsl(),ke=360/K,Ne=[oe(O)];for(we.h=(we.h-(ke*F>>1)+720)%360;--F;)we.h=(we.h+ke)%360,Ne.push(oe(we));return Ne}function Jn(O,F){F=F||6;for(var K=oe(O).toHsv(),we=K.h,ke=K.s,Ne=K.v,vt=[],mt=1/F;F--;)vt.push(oe({h:we,s:ke,v:Ne})),Ne=(Ne+mt)%1;return vt}oe.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var O=this.toRgb();return(299*O.r+587*O.g+114*O.b)/1e3},setAlpha:function(O){return this._a=kn(O),this._roundA=be(1e3*this._a)/1e3,this},toHsv:function(){var O=At(this._r,this._g,this._b);return{h:360*O.h,s:O.s,v:O.v,a:this._a}},toHsvString:function(){var O=At(this._r,this._g,this._b),F=be(360*O.h),K=be(100*O.s),we=be(100*O.v);return this._a==1?\"hsv(\"+F+\", \"+K+\"%, \"+we+\"%)\":\"hsva(\"+F+\", \"+K+\"%, \"+we+\"%, \"+this._roundA+\")\"},toHsl:function(){var O=Le(this._r,this._g,this._b);return{h:360*O.h,s:O.s,l:O.l,a:this._a}},toHslString:function(){var O=Le(this._r,this._g,this._b),F=be(360*O.h),K=be(100*O.s),we=be(100*O.l);return this._a==1?\"hsl(\"+F+\", \"+K+\"%, \"+we+\"%)\":\"hsla(\"+F+\", \"+K+\"%, \"+we+\"%, \"+this._roundA+\")\"},toHex:function(O){return ze(this._r,this._g,this._b,O)},toHexString:function(O){return\"#\"+this.toHex(O)},toHex8:function(){return re(this._r,this._g,this._b,this._a)},toHex8String:function(){return\"#\"+this.toHex8()},toRgb:function(){return{r:be(this._r),g:be(this._g),b:be(this._b),a:this._a}},toRgbString:function(){return this._a==1?\"rgb(\"+be(this._r)+\", \"+be(this._g)+\", \"+be(this._b)+\")\":\"rgba(\"+be(this._r)+\", \"+be(this._g)+\", \"+be(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:be(100*_t(this._r,255))+\"%\",g:be(100*_t(this._g,255))+\"%\",b:be(100*_t(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return this._a==1?\"rgb(\"+be(100*_t(this._r,255))+\"%, \"+be(100*_t(this._g,255))+\"%, \"+be(100*_t(this._b,255))+\"%)\":\"rgba(\"+be(100*_t(this._r,255))+\"%, \"+be(100*_t(this._g,255))+\"%, \"+be(100*_t(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return this._a===0?\"transparent\":!(this._a<1)&&(Rn[ze(this._r,this._g,this._b,!0)]||!1)},toFilter:function(O){var F=\"#\"+re(this._r,this._g,this._b,this._a),K=F,we=this._gradientType?\"GradientType = 1, \":\"\";return O&&(K=oe(O).toHex8String()),\"progid:DXImageTransform.Microsoft.gradient(\"+we+\"startColorstr=\"+F+\",endColorstr=\"+K+\")\"},toString:function(O){var F=!!O;O=O||this._format;var K=!1,we=this._a<1&&this._a>=0;return F||!we||O!==\"hex\"&&O!==\"hex6\"&&O!==\"hex3\"&&O!==\"name\"?(O===\"rgb\"&&(K=this.toRgbString()),O===\"prgb\"&&(K=this.toPercentageRgbString()),O!==\"hex\"&&O!==\"hex6\"||(K=this.toHexString()),O===\"hex3\"&&(K=this.toHexString(!0)),O===\"hex8\"&&(K=this.toHex8String()),O===\"name\"&&(K=this.toName()),O===\"hsl\"&&(K=this.toHslString()),O===\"hsv\"&&(K=this.toHsvString()),K||this.toHexString()):O===\"name\"&&this._a===0?this.toName():this.toRgbString()},_applyModification:function(O,F){var K=O.apply(null,[this].concat([].slice.call(F)));return this._r=K._r,this._g=K._g,this._b=K._b,this.setAlpha(K._a),this},lighten:function(){return this._applyModification(bt,arguments)},brighten:function(){return this._applyModification(gt,arguments)},darken:function(){return this._applyModification(Ct,arguments)},desaturate:function(){return this._applyModification(Fe,arguments)},saturate:function(){return this._applyModification(qe,arguments)},greyscale:function(){return this._applyModification(ot,arguments)},spin:function(){return this._applyModification(Gt,arguments)},_applyCombination:function(O,F){return O.apply(null,[this].concat([].slice.call(F)))},analogous:function(){return this._applyCombination(Fn,arguments)},complement:function(){return this._applyCombination(xn,arguments)},monochromatic:function(){return this._applyCombination(Jn,arguments)},splitcomplement:function(){return this._applyCombination(Hr,arguments)},triad:function(){return this._applyCombination(Oe,arguments)},tetrad:function(){return this._applyCombination(on,arguments)}},oe.fromRatio=function(O,F){if(typeof O==\"object\"){var K={};for(var we in O)O.hasOwnProperty(we)&&(K[we]=we===\"a\"?O[we]:un(O[we]));O=K}return oe(O,F)},oe.equals=function(O,F){return!(!O||!F)&&oe(O).toRgbString()==oe(F).toRgbString()},oe.random=function(){return oe.fromRatio({r:ie(),g:ie(),b:ie()})},oe.mix=function(O,F,K){K=K===0?0:K||50;var we,ke=oe(O).toRgb(),Ne=oe(F).toRgb(),vt=K/100,mt=2*vt-1,ut=Ne.a-ke.a,Dn=1-(we=((we=mt*ut==-1?mt:(mt+ut)/(1+mt*ut))+1)/2),dn={r:Ne.r*we+ke.r*Dn,g:Ne.g*we+ke.g*Dn,b:Ne.b*we+ke.b*Dn,a:Ne.a*vt+ke.a*(1-vt)};return oe(dn)},oe.readability=function(O,F){var K=oe(O),we=oe(F),ke=K.toRgb(),Ne=we.toRgb(),vt=K.getBrightness(),mt=we.getBrightness(),ut=Math.max(ke.r,Ne.r)-Math.min(ke.r,Ne.r)+Math.max(ke.g,Ne.g)-Math.min(ke.g,Ne.g)+Math.max(ke.b,Ne.b)-Math.min(ke.b,Ne.b);return{brightness:Math.abs(vt-mt),color:ut}},oe.isReadable=function(O,F){var K=oe.readability(O,F);return K.brightness>125&&K.color>500},oe.mostReadable=function(O,F){for(var K=null,we=0,ke=!1,Ne=0;Ne<F.length;Ne++){var vt=oe.readability(O,F[Ne]),mt=vt.brightness>125&&vt.color>500,ut=vt.brightness/125*3+vt.color/500;(mt&&!ke||mt&&ke&&ut>we||!mt&&!ke&&ut>we)&&(ke=mt,we=ut,K=oe(F[Ne]))}return K};var It=oe.names={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},Rn=oe.hexNames=Ke(It);function Ke(O){var F={};for(var K in O)O.hasOwnProperty(K)&&(F[O[K]]=K);return F}function kn(O){return O=parseFloat(O),(isNaN(O)||O<0||O>1)&&(O=1),O}function _t(O,F){wr(O)&&(O=\"100%\");var K=sr(O);return O=rt(F,dt(0,parseFloat(O))),K&&(O=parseInt(O*F,10)/100),Ae.abs(O-F)<1e-6?1:O%F/parseFloat(F)}function Zn(O){return rt(1,dt(0,O))}function Qt(O){return parseInt(O,16)}function wr(O){return typeof O==\"string\"&&O.indexOf(\".\")!=-1&&parseFloat(O)===1}function sr(O){return typeof O==\"string\"&&O.indexOf(\"%\")!=-1}function zn(O){return O.length==1?\"0\"+O:\"\"+O}function un(O){return O<=1&&(O=100*O+\"%\"),O}function Vt(O){return Math.round(255*parseFloat(O)).toString(16)}function ur(O){return Qt(O)/255}var hn,lr,er,qt=(lr=\"[\\\\s|\\\\(]+(\"+(hn=\"(?:[-\\\\+]?\\\\d*\\\\.\\\\d+%?)|(?:[-\\\\+]?\\\\d+%?)\")+\")[,|\\\\s]+(\"+hn+\")[,|\\\\s]+(\"+hn+\")\\\\s*\\\\)?\",er=\"[\\\\s|\\\\(]+(\"+hn+\")[,|\\\\s]+(\"+hn+\")[,|\\\\s]+(\"+hn+\")[,|\\\\s]+(\"+hn+\")\\\\s*\\\\)?\",{rgb:new RegExp(\"rgb\"+lr),rgba:new RegExp(\"rgba\"+er),hsl:new RegExp(\"hsl\"+lr),hsla:new RegExp(\"hsla\"+er),hsv:new RegExp(\"hsv\"+lr),hsva:new RegExp(\"hsva\"+er),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function Kt(O){O=O.replace(ve,\"\").replace(Re,\"\").toLowerCase();var F,K=!1;if(It[O])O=It[O],K=!0;else if(O==\"transparent\")return{r:0,g:0,b:0,a:0,format:\"name\"};return(F=qt.rgb.exec(O))?{r:F[1],g:F[2],b:F[3]}:(F=qt.rgba.exec(O))?{r:F[1],g:F[2],b:F[3],a:F[4]}:(F=qt.hsl.exec(O))?{h:F[1],s:F[2],l:F[3]}:(F=qt.hsla.exec(O))?{h:F[1],s:F[2],l:F[3],a:F[4]}:(F=qt.hsv.exec(O))?{h:F[1],s:F[2],v:F[3]}:(F=qt.hsva.exec(O))?{h:F[1],s:F[2],v:F[3],a:F[4]}:(F=qt.hex8.exec(O))?{a:ur(F[1]),r:Qt(F[2]),g:Qt(F[3]),b:Qt(F[4]),format:K?\"name\":\"hex8\"}:(F=qt.hex6.exec(O))?{r:Qt(F[1]),g:Qt(F[2]),b:Qt(F[3]),format:K?\"name\":\"hex\"}:!!(F=qt.hex3.exec(O))&&{r:Qt(F[1]+\"\"+F[1]),g:Qt(F[2]+\"\"+F[2]),b:Qt(F[3]+\"\"+F[3]),format:K?\"name\":\"hex\"}}window.tinycolor=oe})(),S((function(){S.fn.spectrum.load&&S.fn.spectrum.processNativeColorInputs()}))},(_=typeof q==\"function\"?q.apply(L,f):q)===void 0||(b.exports=_)})()},593:b=>{b.exports=JSON.parse('{\"name\":\"axios\",\"version\":\"0.21.4\",\"description\":\"Promise based HTTP client for the browser and node.js\",\"main\":\"index.js\",\"scripts\":{\"test\":\"grunt test\",\"start\":\"node ./sandbox/server.js\",\"build\":\"NODE_ENV=production grunt build\",\"preversion\":\"npm test\",\"version\":\"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\",\"postversion\":\"git push && git push --tags\",\"examples\":\"node ./examples/server.js\",\"coveralls\":\"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\"fix\":\"eslint --fix lib/**/*.js\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/axios/axios.git\"},\"keywords\":[\"xhr\",\"http\",\"ajax\",\"promise\",\"node\"],\"author\":\"Matt Zabriskie\",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/axios/axios/issues\"},\"homepage\":\"https://axios-http.com\",\"devDependencies\":{\"coveralls\":\"^3.0.0\",\"es6-promise\":\"^4.2.4\",\"grunt\":\"^1.3.0\",\"grunt-banner\":\"^0.6.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-clean\":\"^1.1.0\",\"grunt-contrib-watch\":\"^1.0.0\",\"grunt-eslint\":\"^23.0.0\",\"grunt-karma\":\"^4.0.0\",\"grunt-mocha-test\":\"^0.13.3\",\"grunt-ts\":\"^6.0.0-beta.19\",\"grunt-webpack\":\"^4.0.2\",\"istanbul-instrumenter-loader\":\"^1.0.0\",\"jasmine-core\":\"^2.4.1\",\"karma\":\"^6.3.2\",\"karma-chrome-launcher\":\"^3.1.0\",\"karma-firefox-launcher\":\"^2.1.0\",\"karma-jasmine\":\"^1.1.1\",\"karma-jasmine-ajax\":\"^0.1.13\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-sauce-launcher\":\"^4.3.6\",\"karma-sinon\":\"^1.0.5\",\"karma-sourcemap-loader\":\"^0.3.8\",\"karma-webpack\":\"^4.0.2\",\"load-grunt-tasks\":\"^3.5.2\",\"minimist\":\"^1.2.0\",\"mocha\":\"^8.2.1\",\"sinon\":\"^4.5.0\",\"terser-webpack-plugin\":\"^4.2.3\",\"typescript\":\"^4.0.5\",\"url-search-params\":\"^0.10.0\",\"webpack\":\"^4.44.2\",\"webpack-dev-server\":\"^3.11.0\"},\"browser\":{\"./lib/adapters/http.js\":\"./lib/adapters/xhr.js\"},\"jsdelivr\":\"dist/axios.min.js\",\"unpkg\":\"dist/axios.min.js\",\"typings\":\"./index.d.ts\",\"dependencies\":{\"follow-redirects\":\"^1.14.0\"},\"bundlesize\":[{\"path\":\"./dist/axios.min.js\",\"threshold\":\"5kB\"}]}')}},ts={};function _n(b){var L=ts[b];if(L!==void 0)return L.exports;var Y=ts[b]={id:b,loaded:!1,exports:{}};return Ru[b].call(Y.exports,Y,Y.exports,_n),Y.loaded=!0,Y.exports}_n.n=b=>{var L=b&&b.__esModule?()=>b.default:()=>b;return _n.d(L,{a:L}),L},_n.d=(b,L)=>{for(var Y in L)_n.o(L,Y)&&!_n.o(b,Y)&&Object.defineProperty(b,Y,{enumerable:!0,get:L[Y]})},_n.g=(function(){if(typeof globalThis==\"object\")return globalThis;try{return this||new Function(\"return this\")()}catch{if(typeof window==\"object\")return window}})(),_n.o=(b,L)=>Object.prototype.hasOwnProperty.call(b,L),_n.nmd=b=>(b.paths=[],b.children||(b.children=[]),b),(()=>{var b=_n(486),L=_n.n(b),Y=(_n(686),_n(911),_n(669)),q=_n.n(Y);window._=L();try{window.$=window.jQuery=_n(755),_n(2)}catch{}window.axios=q(),window.axios.defaults.headers.common[\"X-Requested-With\"]=\"XMLHttpRequest\";var f=document.head.querySelector('meta[name=\"csrf-token\"]');f&&(window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"]=f.content,$.ajaxSetup({headers:{\"X-CSRF-TOKEN\":f.content}})),$(document).ready((function(){$(document).on(\"focus\",\".select2.select2-container\",(function(_){_.originalEvent&&$(this).find(\".select2-selection--single\").length>0&&$(this).siblings(\"select\").select2(\"open\")}))})),$(document).on(\"select2:open\",(function(){var _=document.querySelectorAll(\".select2-container--open .select2-search__field\");_[_.length-1].focus()}))})()})();\n"
  },
  {
    "path": "public/build/assets/vendor-tiptap-D5xFoo7B.js",
    "content": "function Wt(t){const e=Object.create(null);for(const n of t.split(\",\"))e[n]=1;return n=>n in e}const ue={},Kr=[],it=()=>{},Wr=()=>!1,vr=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),Zf=t=>t.startsWith(\"onUpdate:\"),ae=Object.assign,ed=(t,e)=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)},Xw=Object.prototype.hasOwnProperty,pe=(t,e)=>Xw.call(t,e),J=Array.isArray,qr=t=>wi(t)===\"[object Map]\",kr=t=>wi(t)===\"[object Set]\",qh=t=>wi(t)===\"[object Date]\",Qw=t=>wi(t)===\"[object RegExp]\",ne=t=>typeof t==\"function\",re=t=>typeof t==\"string\",Dt=t=>typeof t==\"symbol\",ye=t=>t!==null&&typeof t==\"object\",td=t=>(ye(t)||ne(t))&&ne(t.then)&&ne(t.catch),Zg=Object.prototype.toString,wi=t=>Zg.call(t),Zw=t=>wi(t).slice(8,-1),ac=t=>wi(t)===\"[object Object]\",cc=t=>re(t)&&t!==\"NaN\"&&t[0]!==\"-\"&&\"\"+parseInt(t,10)===t,qn=Wt(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),ex=Wt(\"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"),uc=t=>{const e=Object.create(null);return(n=>e[n]||(e[n]=t(n)))},tx=/-\\w/g,Ae=uc(t=>t.replace(tx,e=>e.slice(1).toUpperCase())),nx=/\\B([A-Z])/g,Ot=uc(t=>t.replace(nx,\"-$1\").toLowerCase()),Tr=uc(t=>t.charAt(0).toUpperCase()+t.slice(1)),Jr=uc(t=>t?`on${Tr(t)}`:\"\"),St=(t,e)=>!Object.is(t,e),Gr=(t,...e)=>{for(let n=0;n<t.length;n++)t[n](...e)},ey=(t,e,n,s=!1)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:s,value:n})},fc=t=>{const e=parseFloat(t);return isNaN(e)?t:e},jl=t=>{const e=re(t)?Number(t):NaN;return isNaN(e)?t:e};let Jh;const dc=()=>Jh||(Jh=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:typeof window<\"u\"?window:typeof global<\"u\"?global:{});function sx(t,e){return t+JSON.stringify(e,(n,s)=>typeof s==\"function\"?s.toString():s)}const rx=\"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\",ix=Wt(rx);function Bo(t){if(J(t)){const e={};for(let n=0;n<t.length;n++){const s=t[n],r=re(s)?ty(s):Bo(s);if(r)for(const i in r)e[i]=r[i]}return e}else if(re(t)||ye(t))return t}const ox=/;(?![^(]*\\))/g,lx=/:([^]+)/,ax=/\\/\\*[^]*?\\*\\//g;function ty(t){const e={};return t.replace(ax,\"\").split(ox).forEach(n=>{if(n){const s=n.split(lx);s.length>1&&(e[s[0].trim()]=s[1].trim())}}),e}function $o(t){let e=\"\";if(re(t))e=t;else if(J(t))for(let n=0;n<t.length;n++){const s=$o(t[n]);s&&(e+=s+\" \")}else if(ye(t))for(const n in t)t[n]&&(e+=n+\" \");return e.trim()}function cx(t){if(!t)return null;let{class:e,style:n}=t;return e&&!re(e)&&(t.class=$o(e)),n&&(t.style=Bo(n)),t}const ux=\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\",fx=\"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\",dx=\"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\",hx=\"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\",px=Wt(ux),mx=Wt(fx),gx=Wt(dx),yx=Wt(hx),bx=\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\",Sx=Wt(bx);function ny(t){return!!t||t===\"\"}function wx(t,e){if(t.length!==e.length)return!1;let n=!0;for(let s=0;n&&s<t.length;s++)n=Bs(t[s],e[s]);return n}function Bs(t,e){if(t===e)return!0;let n=qh(t),s=qh(e);if(n||s)return n&&s?t.getTime()===e.getTime():!1;if(n=Dt(t),s=Dt(e),n||s)return t===e;if(n=J(t),s=J(e),n||s)return n&&s?wx(t,e):!1;if(n=ye(t),s=ye(e),n||s){if(!n||!s)return!1;const r=Object.keys(t).length,i=Object.keys(e).length;if(r!==i)return!1;for(const o in t){const l=t.hasOwnProperty(o),a=e.hasOwnProperty(o);if(l&&!a||!l&&a||!Bs(t[o],e[o]))return!1}}return String(t)===String(e)}function hc(t,e){return t.findIndex(n=>Bs(n,e))}const sy=t=>!!(t&&t.__v_isRef===!0),ry=t=>re(t)?t:t==null?\"\":J(t)||ye(t)&&(t.toString===Zg||!ne(t.toString))?sy(t)?ry(t.value):JSON.stringify(t,iy,2):String(t),iy=(t,e)=>sy(e)?iy(t,e.value):qr(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((n,[s,r],i)=>(n[eu(s,i)+\" =>\"]=r,n),{})}:kr(e)?{[`Set(${e.size})`]:[...e.values()].map(n=>eu(n))}:Dt(e)?eu(e):ye(e)&&!J(e)&&!ac(e)?String(e):e,eu=(t,e=\"\")=>{var n;return Dt(t)?`Symbol(${(n=t.description)!=null?n:e})`:t};function xx(t){return t==null?\"initial\":typeof t==\"string\"?t===\"\"?\" \":t:String(t)}let ut;class nd{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=ut,!e&&ut&&(this.index=(ut.scopes||(ut.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,n;if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].pause();for(e=0,n=this.effects.length;e<n;e++)this.effects[e].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let e,n;if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].resume();for(e=0,n=this.effects.length;e<n;e++)this.effects[e].resume()}}run(e){if(this._active){const n=ut;try{return ut=this,e()}finally{ut=n}}}on(){++this._on===1&&(this.prevScope=ut,ut=this)}off(){this._on>0&&--this._on===0&&(ut=this.prevScope,this.prevScope=void 0)}stop(e){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(this.effects.length=0,n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!e){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0}}}function Cx(t){return new nd(t)}function oy(){return ut}function vx(t,e=!1){ut&&ut.cleanups.push(t)}let Te;const tu=new WeakSet;class lo{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,ut&&ut.active&&ut.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,tu.has(this)&&(tu.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||ay(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Gh(this),cy(this);const e=Te,n=an;Te=this,an=!0;try{return this.fn()}finally{uy(this),Te=e,an=n,this.flags&=-3}}stop(){if(this.flags&1){for(let e=this.deps;e;e=e.nextDep)id(e);this.deps=this.depsTail=void 0,Gh(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?tu.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){zu(this)&&this.run()}get dirty(){return zu(this)}}let ly=0,Vi,Wi;function ay(t,e=!1){if(t.flags|=8,e){t.next=Wi,Wi=t;return}t.next=Vi,Vi=t}function sd(){ly++}function rd(){if(--ly>0)return;if(Wi){let e=Wi;for(Wi=void 0;e;){const n=e.next;e.next=void 0,e.flags&=-9,e=n}}let t;for(;Vi;){let e=Vi;for(Vi=void 0;e;){const n=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(s){t||(t=s)}e=n}}if(t)throw t}function cy(t){for(let e=t.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function uy(t){let e,n=t.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),id(s),kx(s)):e=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}t.deps=e,t.depsTail=n}function zu(t){for(let e=t.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(fy(e.dep.computed)||e.dep.version!==e.version))return!0;return!!t._dirty}function fy(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===ao)||(t.globalVersion=ao,!t.isSSR&&t.flags&128&&(!t.deps&&!t._dirty||!zu(t))))return;t.flags|=2;const e=t.dep,n=Te,s=an;Te=t,an=!0;try{cy(t);const r=t.fn(t._value);(e.version===0||St(r,t._value))&&(t.flags|=128,t._value=r,e.version++)}catch(r){throw e.version++,r}finally{Te=n,an=s,uy(t),t.flags&=-3}}function id(t,e=!1){const{dep:n,prevSub:s,nextSub:r}=t;if(s&&(s.nextSub=r,t.prevSub=void 0),r&&(r.prevSub=s,t.nextSub=void 0),n.subs===t&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)id(i,!0)}!e&&!--n.sc&&n.map&&n.map.delete(n.key)}function kx(t){const{prevDep:e,nextDep:n}=t;e&&(e.nextDep=n,t.prevDep=void 0),n&&(n.prevDep=e,t.nextDep=void 0)}function Tx(t,e){t.effect instanceof lo&&(t=t.effect.fn);const n=new lo(t);e&&ae(n,e);try{n.run()}catch(r){throw n.stop(),r}const s=n.run.bind(n);return s.effect=n,s}function Ex(t){t.effect.stop()}let an=!0;const dy=[];function Zn(){dy.push(an),an=!1}function es(){const t=dy.pop();an=t===void 0?!0:t}function Gh(t){const{cleanup:e}=t;if(t.cleanup=void 0,e){const n=Te;Te=void 0;try{e()}finally{Te=n}}}let ao=0,Mx=class{constructor(e,n){this.sub=e,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}};class pc{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!Te||!an||Te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Te)n=this.activeLink=new Mx(Te,this),Te.deps?(n.prevDep=Te.depsTail,Te.depsTail.nextDep=n,Te.depsTail=n):Te.deps=Te.depsTail=n,hy(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Te.depsTail,n.nextDep=void 0,Te.depsTail.nextDep=n,Te.depsTail=n,Te.deps===n&&(Te.deps=s)}return n}trigger(e){this.version++,ao++,this.notify(e)}notify(e){sd();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{rd()}}}function hy(t){if(t.dep.sc++,t.sub.flags&4){const e=t.dep.computed;if(e&&!t.dep.subs){e.flags|=20;for(let s=e.deps;s;s=s.nextDep)hy(s)}const n=t.dep.subs;n!==t&&(t.prevSub=n,n&&(n.nextSub=t)),t.dep.subs=t}}const Ul=new WeakMap,nr=Symbol(\"\"),Vu=Symbol(\"\"),co=Symbol(\"\");function ht(t,e,n){if(an&&Te){let s=Ul.get(t);s||Ul.set(t,s=new Map);let r=s.get(n);r||(s.set(n,r=new pc),r.map=s,r.key=n),r.track()}}function Vn(t,e,n,s,r,i){const o=Ul.get(t);if(!o){ao++;return}const l=a=>{a&&a.trigger()};if(sd(),e===\"clear\")o.forEach(l);else{const a=J(t),c=a&&cc(n);if(a&&n===\"length\"){const u=Number(s);o.forEach((f,d)=>{(d===\"length\"||d===co||!Dt(d)&&d>=u)&&l(f)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),c&&l(o.get(co)),e){case\"add\":a?c&&l(o.get(\"length\")):(l(o.get(nr)),qr(t)&&l(o.get(Vu)));break;case\"delete\":a||(l(o.get(nr)),qr(t)&&l(o.get(Vu)));break;case\"set\":qr(t)&&l(o.get(nr));break}}rd()}function Ax(t,e){const n=Ul.get(t);return n&&n.get(e)}function _r(t){const e=de(t);return e===t?e:(ht(e,\"iterate\",co),It(t)?e:e.map(fn))}function mc(t){return ht(t=de(t),\"iterate\",co),t}function gs(t,e){return kn(t)?si(Jn(t)?fn(e):e):fn(e)}const Nx={__proto__:null,[Symbol.iterator](){return nu(this,Symbol.iterator,t=>gs(this,t))},concat(...t){return _r(this).concat(...t.map(e=>J(e)?_r(e):e))},entries(){return nu(this,\"entries\",t=>(t[1]=gs(this,t[1]),t))},every(t,e){return Rn(this,\"every\",t,e,void 0,arguments)},filter(t,e){return Rn(this,\"filter\",t,e,n=>n.map(s=>gs(this,s)),arguments)},find(t,e){return Rn(this,\"find\",t,e,n=>gs(this,n),arguments)},findIndex(t,e){return Rn(this,\"findIndex\",t,e,void 0,arguments)},findLast(t,e){return Rn(this,\"findLast\",t,e,n=>gs(this,n),arguments)},findLastIndex(t,e){return Rn(this,\"findLastIndex\",t,e,void 0,arguments)},forEach(t,e){return Rn(this,\"forEach\",t,e,void 0,arguments)},includes(...t){return su(this,\"includes\",t)},indexOf(...t){return su(this,\"indexOf\",t)},join(t){return _r(this).join(t)},lastIndexOf(...t){return su(this,\"lastIndexOf\",t)},map(t,e){return Rn(this,\"map\",t,e,void 0,arguments)},pop(){return Ai(this,\"pop\")},push(...t){return Ai(this,\"push\",t)},reduce(t,...e){return Yh(this,\"reduce\",t,e)},reduceRight(t,...e){return Yh(this,\"reduceRight\",t,e)},shift(){return Ai(this,\"shift\")},some(t,e){return Rn(this,\"some\",t,e,void 0,arguments)},splice(...t){return Ai(this,\"splice\",t)},toReversed(){return _r(this).toReversed()},toSorted(t){return _r(this).toSorted(t)},toSpliced(...t){return _r(this).toSpliced(...t)},unshift(...t){return Ai(this,\"unshift\",t)},values(){return nu(this,\"values\",t=>gs(this,t))}};function nu(t,e,n){const s=mc(t),r=s[e]();return s!==t&&!It(t)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Ox=Array.prototype;function Rn(t,e,n,s,r,i){const o=mc(t),l=o!==t&&!It(t),a=o[e];if(a!==Ox[e]){const f=a.apply(t,i);return l?fn(f):f}let c=n;o!==t&&(l?c=function(f,d){return n.call(this,gs(t,f),d,t)}:n.length>2&&(c=function(f,d){return n.call(this,f,d,t)}));const u=a.call(o,c,s);return l&&r?r(u):u}function Yh(t,e,n,s){const r=mc(t);let i=n;return r!==t&&(It(t)?n.length>3&&(i=function(o,l,a){return n.call(this,o,l,a,t)}):i=function(o,l,a){return n.call(this,o,gs(t,l),a,t)}),r[e](i,...s)}function su(t,e,n){const s=de(t);ht(s,\"iterate\",co);const r=s[e](...n);return(r===-1||r===!1)&&Fo(n[0])?(n[0]=de(n[0]),s[e](...n)):r}function Ai(t,e,n=[]){Zn(),sd();const s=de(t)[e].apply(t,n);return rd(),es(),s}const Rx=Wt(\"__proto__,__v_isRef,__isVue\"),py=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!==\"arguments\"&&t!==\"caller\").map(t=>Symbol[t]).filter(Dt));function Ix(t){Dt(t)||(t=String(t));const e=de(this);return ht(e,\"has\",t),e.hasOwnProperty(t)}class my{constructor(e=!1,n=!1){this._isReadonly=e,this._isShallow=n}get(e,n,s){if(n===\"__v_skip\")return e.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n===\"__v_isReactive\")return!r;if(n===\"__v_isReadonly\")return r;if(n===\"__v_isShallow\")return i;if(n===\"__v_raw\")return s===(r?i?xy:wy:i?Sy:by).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(s)?e:void 0;const o=J(e);if(!r){let a;if(o&&(a=Nx[n]))return a;if(n===\"hasOwnProperty\")return Ix}const l=Reflect.get(e,n,Ve(e)?e:s);if((Dt(n)?py.has(n):Rx(n))||(r||ht(e,\"get\",n),i))return l;if(Ve(l)){const a=o&&cc(n)?l:l.value;return r&&ye(a)?Kl(a):a}return ye(l)?r?Kl(l):Ho(l):l}}class gy extends my{constructor(e=!1){super(!1,e)}set(e,n,s,r){let i=e[n];const o=J(e)&&cc(n);if(!this._isShallow){const c=kn(i);if(!It(s)&&!kn(s)&&(i=de(i),s=de(s)),!o&&Ve(i)&&!Ve(s))return c||(i.value=s),!0}const l=o?Number(n)<e.length:pe(e,n),a=Reflect.set(e,n,s,Ve(e)?e:r);return e===de(r)&&(l?St(s,i)&&Vn(e,\"set\",n,s):Vn(e,\"add\",n,s)),a}deleteProperty(e,n){const s=pe(e,n);e[n];const r=Reflect.deleteProperty(e,n);return r&&s&&Vn(e,\"delete\",n,void 0),r}has(e,n){const s=Reflect.has(e,n);return(!Dt(n)||!py.has(n))&&ht(e,\"has\",n),s}ownKeys(e){return ht(e,\"iterate\",J(e)?\"length\":nr),Reflect.ownKeys(e)}}class yy extends my{constructor(e=!1){super(!0,e)}set(e,n){return!0}deleteProperty(e,n){return!0}}const _x=new gy,Dx=new yy,Px=new gy(!0),Lx=new yy(!0),Wu=t=>t,el=t=>Reflect.getPrototypeOf(t);function Bx(t,e,n){return function(...s){const r=this.__v_raw,i=de(r),o=qr(i),l=t===\"entries\"||t===Symbol.iterator&&o,a=t===\"keys\"&&o,c=r[t](...s),u=n?Wu:e?si:fn;return!e&&ht(i,\"iterate\",a?Vu:nr),ae(Object.create(c),{next(){const{value:f,done:d}=c.next();return d?{value:f,done:d}:{value:l?[u(f[0]),u(f[1])]:u(f),done:d}}})}}function tl(t){return function(...e){return t===\"delete\"?!1:t===\"clear\"?void 0:this}}function $x(t,e){const n={get(r){const i=this.__v_raw,o=de(i),l=de(r);t||(St(r,l)&&ht(o,\"get\",r),ht(o,\"get\",l));const{has:a}=el(o),c=e?Wu:t?si:fn;if(a.call(o,r))return c(i.get(r));if(a.call(o,l))return c(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!t&&ht(de(r),\"iterate\",nr),r.size},has(r){const i=this.__v_raw,o=de(i),l=de(r);return t||(St(r,l)&&ht(o,\"has\",r),ht(o,\"has\",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,a=de(l),c=e?Wu:t?si:fn;return!t&&ht(a,\"iterate\",nr),l.forEach((u,f)=>r.call(i,c(u),c(f),o))}};return ae(n,t?{add:tl(\"add\"),set:tl(\"set\"),delete:tl(\"delete\"),clear:tl(\"clear\")}:{add(r){!e&&!It(r)&&!kn(r)&&(r=de(r));const i=de(this);return el(i).has.call(i,r)||(i.add(r),Vn(i,\"add\",r,r)),this},set(r,i){!e&&!It(i)&&!kn(i)&&(i=de(i));const o=de(this),{has:l,get:a}=el(o);let c=l.call(o,r);c||(r=de(r),c=l.call(o,r));const u=a.call(o,r);return o.set(r,i),c?St(i,u)&&Vn(o,\"set\",r,i):Vn(o,\"add\",r,i),this},delete(r){const i=de(this),{has:o,get:l}=el(i);let a=o.call(i,r);a||(r=de(r),a=o.call(i,r)),l&&l.call(i,r);const c=i.delete(r);return a&&Vn(i,\"delete\",r,void 0),c},clear(){const r=de(this),i=r.size!==0,o=r.clear();return i&&Vn(r,\"clear\",void 0,void 0),o}}),[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach(r=>{n[r]=Bx(r,t,e)}),n}function gc(t,e){const n=$x(t,e);return(s,r,i)=>r===\"__v_isReactive\"?!t:r===\"__v_isReadonly\"?t:r===\"__v_raw\"?s:Reflect.get(pe(n,r)&&r in s?n:s,r,i)}const Hx={get:gc(!1,!1)},Fx={get:gc(!1,!0)},zx={get:gc(!0,!1)},Vx={get:gc(!0,!0)},by=new WeakMap,Sy=new WeakMap,wy=new WeakMap,xy=new WeakMap;function Wx(t){switch(t){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}function jx(t){return t.__v_skip||!Object.isExtensible(t)?0:Wx(Zw(t))}function Ho(t){return kn(t)?t:yc(t,!1,_x,Hx,by)}function Cy(t){return yc(t,!1,Px,Fx,Sy)}function Kl(t){return yc(t,!0,Dx,zx,wy)}function Ux(t){return yc(t,!0,Lx,Vx,xy)}function yc(t,e,n,s,r){if(!ye(t)||t.__v_raw&&!(e&&t.__v_isReactive))return t;const i=jx(t);if(i===0)return t;const o=r.get(t);if(o)return o;const l=new Proxy(t,i===2?s:n);return r.set(t,l),l}function Jn(t){return kn(t)?Jn(t.__v_raw):!!(t&&t.__v_isReactive)}function kn(t){return!!(t&&t.__v_isReadonly)}function It(t){return!!(t&&t.__v_isShallow)}function Fo(t){return t?!!t.__v_raw:!1}function de(t){const e=t&&t.__v_raw;return e?de(e):t}function bc(t){return!pe(t,\"__v_skip\")&&Object.isExtensible(t)&&ey(t,\"__v_skip\",!0),t}const fn=t=>ye(t)?Ho(t):t,si=t=>ye(t)?Kl(t):t;function Ve(t){return t?t.__v_isRef===!0:!1}function sr(t){return vy(t,!1)}function od(t){return vy(t,!0)}function vy(t,e){return Ve(t)?t:new Kx(t,e)}class Kx{constructor(e,n){this.dep=new pc,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?e:de(e),this._value=n?e:fn(e),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(e){const n=this._rawValue,s=this.__v_isShallow||It(e)||kn(e);e=s?e:de(e),St(e,n)&&(this._rawValue=e,this._value=s?e:fn(e),this.dep.trigger())}}function qx(t){t.dep&&t.dep.trigger()}function xi(t){return Ve(t)?t.value:t}function Jx(t){return ne(t)?t():xi(t)}const Gx={get:(t,e,n)=>e===\"__v_raw\"?t:xi(Reflect.get(t,e,n)),set:(t,e,n,s)=>{const r=t[e];return Ve(r)&&!Ve(n)?(r.value=n,!0):Reflect.set(t,e,n,s)}};function ld(t){return Jn(t)?t:new Proxy(t,Gx)}class Yx{constructor(e){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new pc,{get:s,set:r}=e(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(e){this._set(e)}}function ad(t){return new Yx(t)}function Xx(t){const e=J(t)?new Array(t.length):{};for(const n in t)e[n]=ky(t,n);return e}class Qx{constructor(e,n,s){this._object=e,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._raw=de(e);let r=!0,i=e;if(!J(e)||!cc(String(n)))do r=!Fo(i)||It(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let e=this._object[this._key];return this._shallow&&(e=xi(e)),this._value=e===void 0?this._defaultValue:e}set value(e){if(this._shallow&&Ve(this._raw[this._key])){const n=this._object[this._key];if(Ve(n)){n.value=e;return}}this._object[this._key]=e}get dep(){return Ax(this._raw,this._key)}}class Zx{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function eC(t,e,n){return Ve(t)?t:ne(t)?new Zx(t):ye(t)&&arguments.length>1?ky(t,e,n):sr(t)}function ky(t,e,n){return new Qx(t,e,n)}class tC{constructor(e,n,s){this.fn=e,this.setter=n,this._value=void 0,this.dep=new pc(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ao-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Te!==this)return ay(this,!0),!0}get value(){const e=this.dep.track();return fy(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}function nC(t,e,n=!1){let s,r;return ne(t)?s=t:(s=t.get,r=t.set),new tC(s,r,n)}const sC={GET:\"get\",HAS:\"has\",ITERATE:\"iterate\"},rC={SET:\"set\",ADD:\"add\",DELETE:\"delete\",CLEAR:\"clear\"},nl={},ql=new WeakMap;let ys;function iC(){return ys}function Ty(t,e=!1,n=ys){if(n){let s=ql.get(n);s||ql.set(n,s=[]),s.push(t)}}function oC(t,e,n=ue){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:a}=n,c=w=>r?w:It(w)||r===!1||r===0?Wn(w,1):Wn(w);let u,f,d,h,p=!1,m=!1;if(Ve(t)?(f=()=>t.value,p=It(t)):Jn(t)?(f=()=>c(t),p=!0):J(t)?(m=!0,p=t.some(w=>Jn(w)||It(w)),f=()=>t.map(w=>{if(Ve(w))return w.value;if(Jn(w))return c(w);if(ne(w))return a?a(w,2):w()})):ne(t)?e?f=a?()=>a(t,2):t:f=()=>{if(d){Zn();try{d()}finally{es()}}const w=ys;ys=u;try{return a?a(t,3,[h]):t(h)}finally{ys=w}}:f=it,e&&r){const w=f,x=r===!0?1/0:r;f=()=>Wn(w(),x)}const g=oy(),y=()=>{u.stop(),g&&g.active&&ed(g.effects,u)};if(i&&e){const w=e;e=(...x)=>{w(...x),y()}}let S=m?new Array(t.length).fill(nl):nl;const b=w=>{if(!(!(u.flags&1)||!u.dirty&&!w))if(e){const x=u.run();if(r||p||(m?x.some((E,k)=>St(E,S[k])):St(x,S))){d&&d();const E=ys;ys=u;try{const k=[x,S===nl?void 0:m&&S[0]===nl?[]:S,h];S=x,a?a(e,3,k):e(...k)}finally{ys=E}}}else u.run()};return l&&l(b),u=new lo(f),u.scheduler=o?()=>o(b,!1):b,h=w=>Ty(w,!1,u),d=u.onStop=()=>{const w=ql.get(u);if(w){if(a)a(w,4);else for(const x of w)x();ql.delete(u)}},e?s?b(!0):S=u.run():o?o(b.bind(null,!0),!0):u.run(),y.pause=u.pause.bind(u),y.resume=u.resume.bind(u),y.stop=y,y}function Wn(t,e=1/0,n){if(e<=0||!ye(t)||t.__v_skip||(n=n||new Map,(n.get(t)||0)>=e))return t;if(n.set(t,e),e--,Ve(t))Wn(t.value,e,n);else if(J(t))for(let s=0;s<t.length;s++)Wn(t[s],e,n);else if(kr(t)||qr(t))t.forEach(s=>{Wn(s,e,n)});else if(ac(t)){for(const s in t)Wn(t[s],e,n);for(const s of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,s)&&Wn(t[s],e,n)}return t}const Ey=[];function lC(t){Ey.push(t)}function aC(){Ey.pop()}function cC(t,e){}const uC={SETUP_FUNCTION:0,0:\"SETUP_FUNCTION\",RENDER_FUNCTION:1,1:\"RENDER_FUNCTION\",NATIVE_EVENT_HANDLER:5,5:\"NATIVE_EVENT_HANDLER\",COMPONENT_EVENT_HANDLER:6,6:\"COMPONENT_EVENT_HANDLER\",VNODE_HOOK:7,7:\"VNODE_HOOK\",DIRECTIVE_HOOK:8,8:\"DIRECTIVE_HOOK\",TRANSITION_HOOK:9,9:\"TRANSITION_HOOK\",APP_ERROR_HANDLER:10,10:\"APP_ERROR_HANDLER\",APP_WARN_HANDLER:11,11:\"APP_WARN_HANDLER\",FUNCTION_REF:12,12:\"FUNCTION_REF\",ASYNC_COMPONENT_LOADER:13,13:\"ASYNC_COMPONENT_LOADER\",SCHEDULER:14,14:\"SCHEDULER\",COMPONENT_UPDATE:15,15:\"COMPONENT_UPDATE\",APP_UNMOUNT_CLEANUP:16,16:\"APP_UNMOUNT_CLEANUP\"},fC={sp:\"serverPrefetch hook\",bc:\"beforeCreate hook\",c:\"created hook\",bm:\"beforeMount hook\",m:\"mounted hook\",bu:\"beforeUpdate hook\",u:\"updated\",bum:\"beforeUnmount hook\",um:\"unmounted hook\",a:\"activated hook\",da:\"deactivated hook\",ec:\"errorCaptured hook\",rtc:\"renderTracked hook\",rtg:\"renderTriggered hook\",0:\"setup function\",1:\"render function\",2:\"watcher getter\",3:\"watcher callback\",4:\"watcher cleanup function\",5:\"native event handler\",6:\"component event handler\",7:\"vnode hook\",8:\"directive hook\",9:\"transition hook\",10:\"app errorHandler\",11:\"app warnHandler\",12:\"ref function\",13:\"async component loader\",14:\"scheduler flush\",15:\"component update\",16:\"app unmount cleanup function\"};function Ci(t,e,n,s){try{return s?t(...s):t()}catch(r){Er(r,e,n)}}function tn(t,e,n,s){if(ne(t)){const r=Ci(t,e,n,s);return r&&td(r)&&r.catch(i=>{Er(i,e,n)}),r}if(J(t)){const r=[];for(let i=0;i<t.length;i++)r.push(tn(t[i],e,n,s));return r}}function Er(t,e,n,s=!0){const r=e?e.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:o}=e&&e.appContext.config||ue;if(e){let l=e.parent;const a=e.proxy,c=`https://vuejs.org/error-reference/#runtime-${n}`;for(;l;){const u=l.ec;if(u){for(let f=0;f<u.length;f++)if(u[f](t,a,c)===!1)return}l=l.parent}if(i){Zn(),Ci(i,null,10,[t,a,c]),es();return}}dC(t,n,r,s,o)}function dC(t,e,n,s=!0,r=!1){if(r)throw t;console.error(t)}const wt=[];let yn=-1;const Yr=[];let bs=null,$r=0;const My=Promise.resolve();let Jl=null;function vi(t){const e=Jl||My;return t?e.then(this?t.bind(this):t):e}function hC(t){let e=yn+1,n=wt.length;for(;e<n;){const s=e+n>>>1,r=wt[s],i=fo(r);i<t||i===t&&r.flags&2?e=s+1:n=s}return e}function cd(t){if(!(t.flags&1)){const e=fo(t),n=wt[wt.length-1];!n||!(t.flags&2)&&e>=fo(n)?wt.push(t):wt.splice(hC(e),0,t),t.flags|=1,Ay()}}function Ay(){Jl||(Jl=My.then(Ny))}function uo(t){J(t)?Yr.push(...t):bs&&t.id===-1?bs.splice($r+1,0,t):t.flags&1||(Yr.push(t),t.flags|=1),Ay()}function Xh(t,e,n=yn+1){for(;n<wt.length;n++){const s=wt[n];if(s&&s.flags&2){if(t&&s.id!==t.uid)continue;wt.splice(n,1),n--,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function Gl(t){if(Yr.length){const e=[...new Set(Yr)].sort((n,s)=>fo(n)-fo(s));if(Yr.length=0,bs){bs.push(...e);return}for(bs=e,$r=0;$r<bs.length;$r++){const n=bs[$r];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}bs=null,$r=0}}const fo=t=>t.id==null?t.flags&2?-1:1/0:t.id;function Ny(t){try{for(yn=0;yn<wt.length;yn++){const e=wt[yn];e&&!(e.flags&8)&&(e.flags&4&&(e.flags&=-2),Ci(e,e.i,e.i?15:14),e.flags&4||(e.flags&=-2))}}finally{for(;yn<wt.length;yn++){const e=wt[yn];e&&(e.flags&=-2)}yn=-1,wt.length=0,Gl(),Jl=null,(wt.length||Yr.length)&&Ny()}}let Hr,sl=[];function Oy(t,e){var n,s;Hr=t,Hr?(Hr.enabled=!0,sl.forEach(({event:r,args:i})=>Hr.emit(r,...i)),sl=[]):typeof window<\"u\"&&window.HTMLElement&&!((s=(n=window.navigator)==null?void 0:n.userAgent)!=null&&s.includes(\"jsdom\"))?((e.__VUE_DEVTOOLS_HOOK_REPLAY__=e.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{Oy(i,e)}),setTimeout(()=>{Hr||(e.__VUE_DEVTOOLS_HOOK_REPLAY__=null,sl=[])},3e3)):sl=[]}let rt=null,Sc=null;function ho(t){const e=rt;return rt=t,Sc=t&&t.type.__scopeId||null,e}function pC(t){Sc=t}function mC(){Sc=null}const gC=t=>ud;function ud(t,e=rt,n){if(!e||t._n)return t;const s=(...r)=>{s._d&&yo(-1);const i=ho(e);let o;try{o=t(...r)}finally{ho(i),s._d&&yo(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function yC(t,e){if(rt===null)return t;const n=jo(rt),s=t.dirs||(t.dirs=[]);for(let r=0;r<e.length;r++){let[i,o,l,a=ue]=e[r];i&&(ne(i)&&(i={mounted:i,updated:i}),i.deep&&Wn(o),s.push({dir:i,instance:n,value:o,oldValue:void 0,arg:l,modifiers:a}))}return t}function xn(t,e,n,s){const r=t.dirs,i=e&&e.dirs;for(let o=0;o<r.length;o++){const l=r[o];i&&(l.oldValue=i[o].value);let a=l.dir[s];a&&(Zn(),tn(a,n,8,[t.el,l,t,e]),es())}}function Ry(t,e){if(st){let n=st.provides;const s=st.parent&&st.parent.provides;s===n&&(n=st.provides=Object.create(s)),n[t]=e}}function ji(t,e,n=!1){const s=kt();if(s||rr){let r=rr?rr._context.provides:s?s.parent==null||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(r&&t in r)return r[t];if(arguments.length>1)return n&&ne(e)?e.call(s&&s.proxy):e}}function bC(){return!!(kt()||rr)}const Iy=Symbol.for(\"v-scx\"),_y=()=>ji(Iy);function Dy(t,e){return zo(t,null,e)}function SC(t,e){return zo(t,null,{flush:\"post\"})}function Py(t,e){return zo(t,null,{flush:\"sync\"})}function Xr(t,e,n){return zo(t,e,n)}function zo(t,e,n=ue){const{immediate:s,deep:r,flush:i,once:o}=n,l=ae({},n),a=e&&s||!e&&i!==\"post\";let c;if(ii){if(i===\"sync\"){const h=_y();c=h.__watcherHandles||(h.__watcherHandles=[])}else if(!a){const h=()=>{};return h.stop=it,h.resume=it,h.pause=it,h}}const u=st;l.call=(h,p,m)=>tn(h,u,p,m);let f=!1;i===\"post\"?l.scheduler=h=>{He(h,u&&u.suspense)}:i!==\"sync\"&&(f=!0,l.scheduler=(h,p)=>{p?h():cd(h)}),l.augmentJob=h=>{e&&(h.flags|=4),f&&(h.flags|=2,u&&(h.id=u.uid,h.i=u))};const d=oC(t,e,l);return ii&&(c?c.push(d):a&&d()),d}function wC(t,e,n){const s=this.proxy,r=re(t)?t.includes(\".\")?Ly(s,t):()=>s[t]:t.bind(s,s);let i;ne(e)?i=e:(i=e.handler,n=e);const o=pr(this),l=zo(r,i.bind(s),n);return o(),l}function Ly(t,e){const n=e.split(\".\");return()=>{let s=t;for(let r=0;r<n.length&&s;r++)s=s[n[r]];return s}}const By=Symbol(\"_vte\"),$y=t=>t.__isTeleport,Ui=t=>t&&(t.disabled||t.disabled===\"\"),Qh=t=>t&&(t.defer||t.defer===\"\"),Zh=t=>typeof SVGElement<\"u\"&&t instanceof SVGElement,ep=t=>typeof MathMLElement==\"function\"&&t instanceof MathMLElement,ju=(t,e)=>{const n=t&&t.to;return re(n)?e?e(n):null:n},Hy={name:\"Teleport\",__isTeleport:!0,process(t,e,n,s,r,i,o,l,a,c){const{mc:u,pc:f,pbc:d,o:{insert:h,querySelector:p,createText:m,createComment:g}}=c,y=Ui(e.props);let{shapeFlag:S,children:b,dynamicChildren:w}=e;if(t==null){const x=e.el=m(\"\"),E=e.anchor=m(\"\");h(x,n,s),h(E,n,s);const k=(v,T)=>{S&16&&u(b,v,T,r,i,o,l,a)},A=()=>{const v=e.target=ju(e.props,p),T=Fy(v,e,m,h);v&&(o!==\"svg\"&&Zh(v)?o=\"svg\":o!==\"mathml\"&&ep(v)&&(o=\"mathml\"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(v),y||(k(v,T),Al(e,!1)))};y&&(k(n,E),Al(e,!0)),Qh(e.props)?(e.el.__isMounted=!1,He(()=>{A(),delete e.el.__isMounted},i)):A()}else{if(Qh(e.props)&&t.el.__isMounted===!1){He(()=>{Hy.process(t,e,n,s,r,i,o,l,a,c)},i);return}e.el=t.el,e.targetStart=t.targetStart;const x=e.anchor=t.anchor,E=e.target=t.target,k=e.targetAnchor=t.targetAnchor,A=Ui(t.props),v=A?n:E,T=A?x:k;if(o===\"svg\"||Zh(E)?o=\"svg\":(o===\"mathml\"||ep(E))&&(o=\"mathml\"),w?(d(t.dynamicChildren,w,v,r,i,o,l),xd(t,e,!0)):a||f(t,e,v,T,r,i,o,l,!1),y)A?e.props&&t.props&&e.props.to!==t.props.to&&(e.props.to=t.props.to):rl(e,n,x,c,1);else if((e.props&&e.props.to)!==(t.props&&t.props.to)){const O=e.target=ju(e.props,p);O&&rl(e,O,null,c,0)}else A&&rl(e,E,k,c,1);Al(e,y)}},remove(t,e,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:a,targetStart:c,targetAnchor:u,target:f,props:d}=t;if(f&&(r(c),r(u)),i&&r(a),o&16){const h=i||!Ui(d);for(let p=0;p<l.length;p++){const m=l[p];s(m,e,n,h,!!m.dynamicChildren)}}},move:rl,hydrate:xC};function rl(t,e,n,{o:{insert:s},m:r},i=2){i===0&&s(t.targetAnchor,e,n);const{el:o,anchor:l,shapeFlag:a,children:c,props:u}=t,f=i===2;if(f&&s(o,e,n),(!f||Ui(u))&&a&16)for(let d=0;d<c.length;d++)r(c[d],e,n,2);f&&s(l,e,n)}function xC(t,e,n,s,r,i,{o:{nextSibling:o,parentNode:l,querySelector:a,insert:c,createText:u}},f){function d(m,g,y,S){g.anchor=f(o(m),g,l(m),n,s,r,i),g.targetStart=y,g.targetAnchor=S}const h=e.target=ju(e.props,a),p=Ui(e.props);if(h){const m=h._lpa||h.firstChild;if(e.shapeFlag&16)if(p)d(t,e,m,m&&o(m));else{e.anchor=o(t);let g=m;for(;g;){if(g&&g.nodeType===8){if(g.data===\"teleport start anchor\")e.targetStart=g;else if(g.data===\"teleport anchor\"){e.targetAnchor=g,h._lpa=e.targetAnchor&&o(e.targetAnchor);break}}g=o(g)}e.targetAnchor||Fy(h,e,u,c),f(m&&o(m),e,h,n,s,r,i)}Al(e,p)}else p&&e.shapeFlag&16&&d(t,e,t,o(t));return e.anchor&&o(e.anchor)}const CC=Hy;function Al(t,e){const n=t.ctx;if(n&&n.ut){let s,r;for(e?(s=t.el,r=t.anchor):(s=t.targetStart,r=t.targetAnchor);s&&s!==r;)s.nodeType===1&&s.setAttribute(\"data-v-owner\",n.uid),s=s.nextSibling;n.ut()}}function Fy(t,e,n,s){const r=e.targetStart=n(\"\"),i=e.targetAnchor=n(\"\");return r[By]=i,t&&(s(r,t),s(i,t)),i}const zn=Symbol(\"_leaveCb\"),il=Symbol(\"_enterCb\");function fd(){const t={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Mr(()=>{t.isMounted=!0}),Ar(()=>{t.isUnmounting=!0}),t}const Ut=[Function,Array],dd={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ut,onEnter:Ut,onAfterEnter:Ut,onEnterCancelled:Ut,onBeforeLeave:Ut,onLeave:Ut,onAfterLeave:Ut,onLeaveCancelled:Ut,onBeforeAppear:Ut,onAppear:Ut,onAfterAppear:Ut,onAppearCancelled:Ut},zy=t=>{const e=t.subTree;return e.component?zy(e.component):e},vC={name:\"BaseTransition\",props:dd,setup(t,{slots:e}){const n=kt(),s=fd();return()=>{const r=e.default&&wc(e.default(),!0);if(!r||!r.length)return;const i=Vy(r),o=de(t),{mode:l}=o;if(s.isLeaving)return ru(i);const a=tp(i);if(!a)return ru(i);let c=ri(a,o,s,n,f=>c=f);a.type!==Be&&ts(a,c);let u=n.subTree&&tp(n.subTree);if(u&&u.type!==Be&&!rn(u,a)&&zy(n).type!==Be){let f=ri(u,o,s,n);if(ts(u,f),l===\"out-in\"&&a.type!==Be)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,u=void 0},ru(i);l===\"in-out\"&&a.type!==Be?f.delayLeave=(d,h,p)=>{const m=jy(s,u);m[String(u.key)]=u,d[zn]=()=>{h(),d[zn]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{p(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return i}}};function Vy(t){let e=t[0];if(t.length>1){for(const n of t)if(n.type!==Be){e=n;break}}return e}const Wy=vC;function jy(t,e){const{leavingVNodes:n}=t;let s=n.get(e.type);return s||(s=Object.create(null),n.set(e.type,s)),s}function ri(t,e,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:a,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:d,onLeave:h,onAfterLeave:p,onLeaveCancelled:m,onBeforeAppear:g,onAppear:y,onAfterAppear:S,onAppearCancelled:b}=e,w=String(t.key),x=jy(n,t),E=(v,T)=>{v&&tn(v,s,9,T)},k=(v,T)=>{const O=T[1];E(v,T),J(v)?v.every(N=>N.length<=1)&&O():v.length<=1&&O()},A={mode:o,persisted:l,beforeEnter(v){let T=a;if(!n.isMounted)if(i)T=g||a;else return;v[zn]&&v[zn](!0);const O=x[w];O&&rn(t,O)&&O.el[zn]&&O.el[zn](),E(T,[v])},enter(v){let T=c,O=u,N=f;if(!n.isMounted)if(i)T=y||c,O=S||u,N=b||f;else return;let _=!1;const F=v[il]=j=>{_||(_=!0,j?E(N,[v]):E(O,[v]),A.delayedLeave&&A.delayedLeave(),v[il]=void 0)};T?k(T,[v,F]):F()},leave(v,T){const O=String(t.key);if(v[il]&&v[il](!0),n.isUnmounting)return T();E(d,[v]);let N=!1;const _=v[zn]=F=>{N||(N=!0,T(),F?E(m,[v]):E(p,[v]),v[zn]=void 0,x[O]===t&&delete x[O])};x[O]=t,h?k(h,[v,_]):_()},clone(v){const T=ri(v,e,n,s,r);return r&&r(T),T}};return A}function ru(t){if(Wo(t))return t=Tn(t),t.children=null,t}function tp(t){if(!Wo(t))return $y(t.type)&&t.children?Vy(t.children):t;if(t.component)return t.component.subTree;const{shapeFlag:e,children:n}=t;if(n){if(e&16)return n[0];if(e&32&&ne(n.default))return n.default()}}function ts(t,e){t.shapeFlag&6&&t.component?(t.transition=e,ts(t.component.subTree,e)):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function wc(t,e=!1,n){let s=[],r=0;for(let i=0;i<t.length;i++){let o=t[i];const l=n==null?o.key:String(n)+String(o.key!=null?o.key:i);o.type===je?(o.patchFlag&128&&r++,s=s.concat(wc(o.children,e,l))):(e||o.type!==Be)&&s.push(l!=null?Tn(o,{key:l}):o)}if(r>1)for(let i=0;i<s.length;i++)s[i].patchFlag=-2;return s}function Vo(t,e){return ne(t)?ae({name:t.name},e,{setup:t}):t}function kC(){const t=kt();return t?(t.appContext.config.idPrefix||\"v\")+\"-\"+t.ids[0]+t.ids[1]++:\"\"}function hd(t){t.ids=[t.ids[0]+t.ids[2]+++\"-\",0,0]}function TC(t){const e=kt(),n=od(null);if(e){const r=e.refs===ue?e.refs={}:e.refs;Object.defineProperty(r,t,{enumerable:!0,get:()=>n.value,set:i=>n.value=i})}return n}const Yl=new WeakMap;function Qr(t,e,n,s,r=!1){if(J(t)){t.forEach((p,m)=>Qr(p,e&&(J(e)?e[m]:e),n,s,r));return}if(Gn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Qr(t,e,n,s.component.subTree);return}const i=s.shapeFlag&4?jo(s.component):s.el,o=r?null:i,{i:l,r:a}=t,c=e&&e.r,u=l.refs===ue?l.refs={}:l.refs,f=l.setupState,d=de(f),h=f===ue?Wr:p=>pe(d,p);if(c!=null&&c!==a){if(np(e),re(c))u[c]=null,h(c)&&(f[c]=null);else if(Ve(c)){c.value=null;const p=e;p.k&&(u[p.k]=null)}}if(ne(a))Ci(a,l,12,[o,u]);else{const p=re(a),m=Ve(a);if(p||m){const g=()=>{if(t.f){const y=p?h(a)?f[a]:u[a]:a.value;if(r)J(y)&&ed(y,i);else if(J(y))y.includes(i)||y.push(i);else if(p)u[a]=[i],h(a)&&(f[a]=u[a]);else{const S=[i];a.value=S,t.k&&(u[t.k]=S)}}else p?(u[a]=o,h(a)&&(f[a]=o)):m&&(a.value=o,t.k&&(u[t.k]=o))};if(o){const y=()=>{g(),Yl.delete(t)};y.id=-1,Yl.set(t,y),He(y,n)}else np(t),g()}}}function np(t){const e=Yl.get(t);e&&(e.flags|=8,Yl.delete(t))}let sp=!1;const Dr=()=>{sp||(console.error(\"Hydration completed but contains mismatches.\"),sp=!0)},EC=t=>t.namespaceURI.includes(\"svg\")&&t.tagName!==\"foreignObject\",MC=t=>t.namespaceURI.includes(\"MathML\"),ol=t=>{if(t.nodeType===1){if(EC(t))return\"svg\";if(MC(t))return\"mathml\"}},jr=t=>t.nodeType===8;function AC(t){const{mt:e,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:a,createComment:c}}=t,u=(b,w)=>{if(!w.hasChildNodes()){n(null,b,w),Gl(),w._vnode=b;return}f(w.firstChild,b,null,null,null),Gl(),w._vnode=b},f=(b,w,x,E,k,A=!1)=>{A=A||!!w.dynamicChildren;const v=jr(b)&&b.data===\"[\",T=()=>m(b,w,x,E,k,v),{type:O,ref:N,shapeFlag:_,patchFlag:F}=w;let j=b.nodeType;w.el=b,F===-2&&(A=!1,w.dynamicChildren=null);let R=null;switch(O){case Os:j!==3?w.children===\"\"?(a(w.el=r(\"\"),o(b),b),R=b):R=T():(b.data!==w.children&&(Dr(),b.data=w.children),R=i(b));break;case Be:S(b)?(R=i(b),y(w.el=b.content.firstChild,b,x)):j!==8||v?R=T():R=i(b);break;case ir:if(v&&(b=i(b),j=b.nodeType),j===1||j===3){R=b;const V=!w.children.length;for(let $=0;$<w.staticCount;$++)V&&(w.children+=R.nodeType===1?R.outerHTML:R.data),$===w.staticCount-1&&(w.anchor=R),R=i(R);return v?i(R):R}else T();break;case je:v?R=p(b,w,x,E,k,A):R=T();break;default:if(_&1)(j!==1||w.type.toLowerCase()!==b.tagName.toLowerCase())&&!S(b)?R=T():R=d(b,w,x,E,k,A);else if(_&6){w.slotScopeIds=k;const V=o(b);if(v?R=g(b):jr(b)&&b.data===\"teleport start\"?R=g(b,b.data,\"teleport end\"):R=i(b),e(w,V,null,x,E,ol(V),A),Gn(w)&&!w.type.__asyncResolved){let $;v?($=Ie(je),$.anchor=R?R.previousSibling:V.lastChild):$=b.nodeType===3?vd(\"\"):Ie(\"div\"),$.el=b,w.component.subTree=$}}else _&64?j!==8?R=T():R=w.type.hydrate(b,w,x,E,k,A,t,h):_&128&&(R=w.type.hydrate(b,w,x,E,ol(o(b)),k,A,t,f))}return N!=null&&Qr(N,null,E,w),R},d=(b,w,x,E,k,A)=>{A=A||!!w.dynamicChildren;const{type:v,props:T,patchFlag:O,shapeFlag:N,dirs:_,transition:F}=w,j=v===\"input\"||v===\"option\";if(j||O!==-1){_&&xn(w,null,x,\"created\");let R=!1;if(S(b)){R=g0(null,F)&&x&&x.vnode.props&&x.vnode.props.appear;const $=b.content.firstChild;if(R){const ie=$.getAttribute(\"class\");ie&&($.$cls=ie),F.beforeEnter($)}y($,b,x),w.el=b=$}if(N&16&&!(T&&(T.innerHTML||T.textContent))){let $=h(b.firstChild,w,b,x,E,k,A);for(;$;){ll(b,1)||Dr();const ie=$;$=$.nextSibling,l(ie)}}else if(N&8){let $=w.children;$[0]===`\n`&&(b.tagName===\"PRE\"||b.tagName===\"TEXTAREA\")&&($=$.slice(1));const{textContent:ie}=b;ie!==$&&ie!==$.replace(/\\r\\n|\\r/g,`\n`)&&(ll(b,0)||Dr(),b.textContent=w.children)}if(T){if(j||!A||O&48){const $=b.tagName.includes(\"-\");for(const ie in T)(j&&(ie.endsWith(\"value\")||ie===\"indeterminate\")||vr(ie)&&!qn(ie)||ie[0]===\".\"||$&&!qn(ie))&&s(b,ie,null,T[ie],void 0,x)}else if(T.onClick)s(b,\"onClick\",null,T.onClick,void 0,x);else if(O&4&&Jn(T.style))for(const $ in T.style)T.style[$]}let V;(V=T&&T.onVnodeBeforeMount)&&Mt(V,x,w),_&&xn(w,null,x,\"beforeMount\"),((V=T&&T.onVnodeMounted)||_||R)&&w0(()=>{V&&Mt(V,x,w),R&&F.enter(b),_&&xn(w,null,x,\"mounted\")},E)}return b.nextSibling},h=(b,w,x,E,k,A,v)=>{v=v||!!w.dynamicChildren;const T=w.children,O=T.length;for(let N=0;N<O;N++){const _=v?T[N]:T[N]=At(T[N]),F=_.type===Os;b?(F&&!v&&N+1<O&&At(T[N+1]).type===Os&&(a(r(b.data.slice(_.children.length)),x,i(b)),b.data=_.children),b=f(b,_,E,k,A,v)):F&&!_.children?a(_.el=r(\"\"),x):(ll(x,1)||Dr(),n(null,_,x,null,E,k,ol(x),A))}return b},p=(b,w,x,E,k,A)=>{const{slotScopeIds:v}=w;v&&(k=k?k.concat(v):v);const T=o(b),O=h(i(b),w,T,x,E,k,A);return O&&jr(O)&&O.data===\"]\"?i(w.anchor=O):(Dr(),a(w.anchor=c(\"]\"),T,O),O)},m=(b,w,x,E,k,A)=>{if(ll(b.parentElement,1)||Dr(),w.el=null,A){const O=g(b);for(;;){const N=i(b);if(N&&N!==O)l(N);else break}}const v=i(b),T=o(b);return l(b),n(null,w,T,v,x,E,ol(T),k),x&&(x.vnode.el=w.el,Tc(x,w.el)),v},g=(b,w=\"[\",x=\"]\")=>{let E=0;for(;b;)if(b=i(b),b&&jr(b)&&(b.data===w&&E++,b.data===x)){if(E===0)return i(b);E--}return b},y=(b,w,x)=>{const E=w.parentNode;E&&E.replaceChild(b,w);let k=x;for(;k;)k.vnode.el===w&&(k.vnode.el=k.subTree.el=b),k=k.parent},S=b=>b.nodeType===1&&b.tagName===\"TEMPLATE\";return[u,f]}const rp=\"data-allow-mismatch\",NC={0:\"text\",1:\"children\",2:\"class\",3:\"style\",4:\"attribute\"};function ll(t,e){if(e===0||e===1)for(;t&&!t.hasAttribute(rp);)t=t.parentElement;const n=t&&t.getAttribute(rp);if(n==null)return!1;if(n===\"\")return!0;{const s=n.split(\",\");return e===0&&s.includes(\"children\")?!0:s.includes(NC[e])}}const OC=dc().requestIdleCallback||(t=>setTimeout(t,1)),RC=dc().cancelIdleCallback||(t=>clearTimeout(t)),IC=(t=1e4)=>e=>{const n=OC(e,{timeout:t});return()=>RC(n)};function _C(t){const{top:e,left:n,bottom:s,right:r}=t.getBoundingClientRect(),{innerHeight:i,innerWidth:o}=window;return(e>0&&e<i||s>0&&s<i)&&(n>0&&n<o||r>0&&r<o)}const DC=t=>(e,n)=>{const s=new IntersectionObserver(r=>{for(const i of r)if(i.isIntersecting){s.disconnect(),e();break}},t);return n(r=>{if(r instanceof Element){if(_C(r))return e(),s.disconnect(),!1;s.observe(r)}}),()=>s.disconnect()},PC=t=>e=>{if(t){const n=matchMedia(t);if(n.matches)e();else return n.addEventListener(\"change\",e,{once:!0}),()=>n.removeEventListener(\"change\",e)}},LC=(t=[])=>(e,n)=>{re(t)&&(t=[t]);let s=!1;const r=o=>{s||(s=!0,i(),e(),o.target.dispatchEvent(new o.constructor(o.type,o)))},i=()=>{n(o=>{for(const l of t)o.removeEventListener(l,r)})};return n(o=>{for(const l of t)o.addEventListener(l,r,{once:!0})}),i};function BC(t,e){if(jr(t)&&t.data===\"[\"){let n=1,s=t.nextSibling;for(;s;){if(s.nodeType===1){if(e(s)===!1)break}else if(jr(s))if(s.data===\"]\"){if(--n===0)break}else s.data===\"[\"&&n++;s=s.nextSibling}}else e(t)}const Gn=t=>!!t.type.__asyncLoader;function $C(t){ne(t)&&(t={loader:t});const{loader:e,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:a}=t;let c=null,u,f=0;const d=()=>(f++,c=null,h()),h=()=>{let p;return c||(p=c=e().catch(m=>{if(m=m instanceof Error?m:new Error(String(m)),a)return new Promise((g,y)=>{a(m,()=>g(d()),()=>y(m),f+1)});throw m}).then(m=>p!==c&&c?c:(m&&(m.__esModule||m[Symbol.toStringTag]===\"Module\")&&(m=m.default),u=m,m)))};return Vo({name:\"AsyncComponentWrapper\",__asyncLoader:h,__asyncHydrate(p,m,g){let y=!1;(m.bu||(m.bu=[])).push(()=>y=!0);const S=()=>{y||g()},b=i?()=>{const w=i(S,x=>BC(p,x));w&&(m.bum||(m.bum=[])).push(w)}:S;u?b():h().then(()=>!m.isUnmounted&&b())},get __asyncResolved(){return u},setup(){const p=st;if(hd(p),u)return()=>al(u,p);const m=b=>{c=null,Er(b,p,13,!s)};if(l&&p.suspense||ii)return h().then(b=>()=>al(b,p)).catch(b=>(m(b),()=>s?Ie(s,{error:b}):null));const g=sr(!1),y=sr(),S=sr(!!r);return r&&setTimeout(()=>{S.value=!1},r),o!=null&&setTimeout(()=>{if(!g.value&&!y.value){const b=new Error(`Async component timed out after ${o}ms.`);m(b),y.value=b}},o),h().then(()=>{g.value=!0,p.parent&&Wo(p.parent.vnode)&&p.parent.update()}).catch(b=>{m(b),y.value=b}),()=>{if(g.value&&u)return al(u,p);if(y.value&&s)return Ie(s,{error:y.value});if(n&&!S.value)return al(n,p)}}})}function al(t,e){const{ref:n,props:s,children:r,ce:i}=e.vnode,o=Ie(t,s,r);return o.ref=n,o.ce=i,delete e.vnode.ce,o}const Wo=t=>t.type.__isKeepAlive,HC={name:\"KeepAlive\",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(t,{slots:e}){const n=kt(),s=n.ctx;if(!s.renderer)return()=>{const S=e.default&&e.default();return S&&S.length===1?S[0]:S};const r=new Map,i=new Set;let o=null;const l=n.suspense,{renderer:{p:a,m:c,um:u,o:{createElement:f}}}=s,d=f(\"div\");s.activate=(S,b,w,x,E)=>{const k=S.component;c(S,b,w,0,l),a(k.vnode,S,b,w,k,l,x,S.slotScopeIds,E),He(()=>{k.isDeactivated=!1,k.a&&Gr(k.a);const A=S.props&&S.props.onVnodeMounted;A&&Mt(A,k.parent,S)},l)},s.deactivate=S=>{const b=S.component;Ql(b.m),Ql(b.a),c(S,d,null,1,l),He(()=>{b.da&&Gr(b.da);const w=S.props&&S.props.onVnodeUnmounted;w&&Mt(w,b.parent,S),b.isDeactivated=!0},l)};function h(S){iu(S),u(S,n,l,!0)}function p(S){r.forEach((b,w)=>{const x=tf(Gn(b)?b.type.__asyncResolved||{}:b.type);x&&!S(x)&&m(w)})}function m(S){const b=r.get(S);b&&(!o||!rn(b,o))?h(b):o&&iu(o),r.delete(S),i.delete(S)}Xr(()=>[t.include,t.exclude],([S,b])=>{S&&p(w=>Pi(S,w)),b&&p(w=>!Pi(b,w))},{flush:\"post\",deep:!0});let g=null;const y=()=>{g!=null&&(Zl(n.subTree.type)?He(()=>{r.set(g,cl(n.subTree))},n.subTree.suspense):r.set(g,cl(n.subTree)))};return Mr(y),Cc(y),Ar(()=>{r.forEach(S=>{const{subTree:b,suspense:w}=n,x=cl(b);if(S.type===x.type&&S.key===x.key){iu(x);const E=x.component.da;E&&He(E,w);return}h(S)})}),()=>{if(g=null,!e.default)return o=null;const S=e.default(),b=S[0];if(S.length>1)return o=null,S;if(!ns(b)||!(b.shapeFlag&4)&&!(b.shapeFlag&128))return o=null,b;let w=cl(b);if(w.type===Be)return o=null,w;const x=w.type,E=tf(Gn(w)?w.type.__asyncResolved||{}:x),{include:k,exclude:A,max:v}=t;if(k&&(!E||!Pi(k,E))||A&&E&&Pi(A,E))return w.shapeFlag&=-257,o=w,b;const T=w.key==null?x:w.key,O=r.get(T);return w.el&&(w=Tn(w),b.shapeFlag&128&&(b.ssContent=w)),g=T,O?(w.el=O.el,w.component=O.component,w.transition&&ts(w,w.transition),w.shapeFlag|=512,i.delete(T),i.add(T)):(i.add(T),v&&i.size>parseInt(v,10)&&m(i.values().next().value)),w.shapeFlag|=256,o=w,Zl(b.type)?b:w}}},FC=HC;function Pi(t,e){return J(t)?t.some(n=>Pi(n,e)):re(t)?t.split(\",\").includes(e):Qw(t)?(t.lastIndex=0,t.test(e)):!1}function Uy(t,e){qy(t,\"a\",e)}function Ky(t,e){qy(t,\"da\",e)}function qy(t,e,n=st){const s=t.__wdc||(t.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return t()});if(xc(e,s,n),n){let r=n.parent;for(;r&&r.parent;)Wo(r.parent.vnode)&&zC(s,e,n,r),r=r.parent}}function zC(t,e,n,s){const r=xc(e,t,s,!0);vc(()=>{ed(s[e],r)},n)}function iu(t){t.shapeFlag&=-257,t.shapeFlag&=-513}function cl(t){return t.shapeFlag&128?t.ssContent:t}function xc(t,e,n=st,s=!1){if(n){const r=n[t]||(n[t]=[]),i=e.__weh||(e.__weh=(...o)=>{Zn();const l=pr(n),a=tn(e,n,t,o);return l(),es(),a});return s?r.unshift(i):r.push(i),i}}const ss=t=>(e,n=st)=>{(!ii||t===\"sp\")&&xc(t,(...s)=>e(...s),n)},Jy=ss(\"bm\"),Mr=ss(\"m\"),pd=ss(\"bu\"),Cc=ss(\"u\"),Ar=ss(\"bum\"),vc=ss(\"um\"),Gy=ss(\"sp\"),Yy=ss(\"rtg\"),Xy=ss(\"rtc\");function Qy(t,e=st){xc(\"ec\",t,e)}const md=\"components\",VC=\"directives\";function WC(t,e){return gd(md,t,!0,e)||t}const Zy=Symbol.for(\"v-ndc\");function jC(t){return re(t)?gd(md,t,!1)||t:t||Zy}function UC(t){return gd(VC,t)}function gd(t,e,n=!0,s=!1){const r=rt||st;if(r){const i=r.type;if(t===md){const l=tf(i,!1);if(l&&(l===e||l===Ae(e)||l===Tr(Ae(e))))return i}const o=ip(r[t]||i[t],e)||ip(r.appContext[t],e);return!o&&s?i:o}}function ip(t,e){return t&&(t[e]||t[Ae(e)]||t[Tr(Ae(e))])}function KC(t,e,n,s){let r;const i=n&&n[s],o=J(t);if(o||re(t)){const l=o&&Jn(t);let a=!1,c=!1;l&&(a=!It(t),c=kn(t),t=mc(t)),r=new Array(t.length);for(let u=0,f=t.length;u<f;u++)r[u]=e(a?c?si(fn(t[u])):fn(t[u]):t[u],u,void 0,i&&i[u])}else if(typeof t==\"number\"){r=new Array(t);for(let l=0;l<t;l++)r[l]=e(l+1,l,void 0,i&&i[l])}else if(ye(t))if(t[Symbol.iterator])r=Array.from(t,(l,a)=>e(l,a,void 0,i&&i[a]));else{const l=Object.keys(t);r=new Array(l.length);for(let a=0,c=l.length;a<c;a++){const u=l[a];r[a]=e(t[u],u,a,i&&i[a])}}else r=[];return n&&(n[s]=r),r}function qC(t,e){for(let n=0;n<e.length;n++){const s=e[n];if(J(s))for(let r=0;r<s.length;r++)t[s[r].name]=s[r].fn;else s&&(t[s.name]=s.key?(...r)=>{const i=s.fn(...r);return i&&(i.key=s.key),i}:s.fn)}return t}function JC(t,e,n={},s,r){if(rt.ce||rt.parent&&Gn(rt.parent)&&rt.parent.ce){const c=Object.keys(n).length>0;return e!==\"default\"&&(n.name=e),go(),ea(je,null,[Ie(\"slot\",n,s&&s())],c?-2:64)}let i=t[e];i&&i._c&&(i._d=!1),go();const o=i&&yd(i(n)),l=n.key||o&&o.key,a=ea(je,{key:(l&&!Dt(l)?l:`_${e}`)+(!o&&s?\"_fb\":\"\")},o||(s?s():[]),o&&t._===1?64:-2);return!r&&a.scopeId&&(a.slotScopeIds=[a.scopeId+\"-s\"]),i&&i._c&&(i._d=!0),a}function yd(t){return t.some(e=>ns(e)?!(e.type===Be||e.type===je&&!yd(e.children)):!0)?t:null}function GC(t,e){const n={};for(const s in t)n[e&&/[A-Z]/.test(s)?`on:${s}`:Jr(s)]=t[s];return n}const Uu=t=>t?M0(t)?jo(t):Uu(t.parent):null,Ki=ae(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>Uu(t.parent),$root:t=>Uu(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>bd(t),$forceUpdate:t=>t.f||(t.f=()=>{cd(t.update)}),$nextTick:t=>t.n||(t.n=vi.bind(t.proxy)),$watch:t=>wC.bind(t)}),ou=(t,e)=>t!==ue&&!t.__isScriptSetup&&pe(t,e),Ku={get({_:t},e){if(e===\"__v_skip\")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:a}=t;if(e[0]!==\"$\"){const d=o[e];if(d!==void 0)switch(d){case 1:return s[e];case 2:return r[e];case 4:return n[e];case 3:return i[e]}else{if(ou(s,e))return o[e]=1,s[e];if(r!==ue&&pe(r,e))return o[e]=2,r[e];if(pe(i,e))return o[e]=3,i[e];if(n!==ue&&pe(n,e))return o[e]=4,n[e];qu&&(o[e]=0)}}const c=Ki[e];let u,f;if(c)return e===\"$attrs\"&&ht(t.attrs,\"get\",\"\"),c(t);if((u=l.__cssModules)&&(u=u[e]))return u;if(n!==ue&&pe(n,e))return o[e]=4,n[e];if(f=a.config.globalProperties,pe(f,e))return f[e]},set({_:t},e,n){const{data:s,setupState:r,ctx:i}=t;return ou(r,e)?(r[e]=n,!0):s!==ue&&pe(s,e)?(s[e]=n,!0):pe(t.props,e)||e[0]===\"$\"&&e.slice(1)in t?!1:(i[e]=n,!0)},has({_:{data:t,setupState:e,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let a;return!!(n[l]||t!==ue&&l[0]!==\"$\"&&pe(t,l)||ou(e,l)||pe(i,l)||pe(s,l)||pe(Ki,l)||pe(r.config.globalProperties,l)||(a=o.__cssModules)&&a[l])},defineProperty(t,e,n){return n.get!=null?t._.accessCache[e]=0:pe(n,\"value\")&&this.set(t,e,n.value,null),Reflect.defineProperty(t,e,n)}},YC=ae({},Ku,{get(t,e){if(e!==Symbol.unscopables)return Ku.get(t,e,t)},has(t,e){return e[0]!==\"_\"&&!ix(e)}});function XC(){return null}function QC(){return null}function ZC(t){}function ev(t){}function tv(){return null}function nv(){}function sv(t,e){return null}function rv(){return e0().slots}function iv(){return e0().attrs}function e0(t){const e=kt();return e.setupContext||(e.setupContext=R0(e))}function po(t){return J(t)?t.reduce((e,n)=>(e[n]=null,e),{}):t}function ov(t,e){const n=po(t);for(const s in e){if(s.startsWith(\"__skip\"))continue;let r=n[s];r?J(r)||ne(r)?r=n[s]={type:r,default:e[s]}:r.default=e[s]:r===null&&(r=n[s]={default:e[s]}),r&&e[`__skip_${s}`]&&(r.skipFactory=!0)}return n}function lv(t,e){return!t||!e?t||e:J(t)&&J(e)?t.concat(e):ae({},po(t),po(e))}function av(t,e){const n={};for(const s in t)e.includes(s)||Object.defineProperty(n,s,{enumerable:!0,get:()=>t[s]});return n}function cv(t){const e=kt();let n=t();return Qu(),td(n)&&(n=n.catch(s=>{throw pr(e),s})),[n,()=>pr(e)]}let qu=!0;function uv(t){const e=bd(t),n=t.proxy,s=t.ctx;qu=!1,e.beforeCreate&&op(e.beforeCreate,t,\"bc\");const{data:r,computed:i,methods:o,watch:l,provide:a,inject:c,created:u,beforeMount:f,mounted:d,beforeUpdate:h,updated:p,activated:m,deactivated:g,beforeDestroy:y,beforeUnmount:S,destroyed:b,unmounted:w,render:x,renderTracked:E,renderTriggered:k,errorCaptured:A,serverPrefetch:v,expose:T,inheritAttrs:O,components:N,directives:_,filters:F}=e;if(c&&fv(c,s,null),o)for(const V in o){const $=o[V];ne($)&&(s[V]=$.bind(n))}if(r){const V=r.call(n,n);ye(V)&&(t.data=Ho(V))}if(qu=!0,i)for(const V in i){const $=i[V],ie=ne($)?$.bind(n,n):ne($.get)?$.get.bind(n,n):it,Xe=!ne($)&&ne($.set)?$.set.bind(n):it,Qe=I0({get:ie,set:Xe});Object.defineProperty(s,V,{enumerable:!0,configurable:!0,get:()=>Qe.value,set:lt=>Qe.value=lt})}if(l)for(const V in l)t0(l[V],s,n,V);if(a){const V=ne(a)?a.call(n):a;Reflect.ownKeys(V).forEach($=>{Ry($,V[$])})}u&&op(u,t,\"c\");function R(V,$){J($)?$.forEach(ie=>V(ie.bind(n))):$&&V($.bind(n))}if(R(Jy,f),R(Mr,d),R(pd,h),R(Cc,p),R(Uy,m),R(Ky,g),R(Qy,A),R(Xy,E),R(Yy,k),R(Ar,S),R(vc,w),R(Gy,v),J(T))if(T.length){const V=t.exposed||(t.exposed={});T.forEach($=>{Object.defineProperty(V,$,{get:()=>n[$],set:ie=>n[$]=ie,enumerable:!0})})}else t.exposed||(t.exposed={});x&&t.render===it&&(t.render=x),O!=null&&(t.inheritAttrs=O),N&&(t.components=N),_&&(t.directives=_),v&&hd(t)}function fv(t,e,n=it){J(t)&&(t=Ju(t));for(const s in t){const r=t[s];let i;ye(r)?\"default\"in r?i=ji(r.from||s,r.default,!0):i=ji(r.from||s):i=ji(r),Ve(i)?Object.defineProperty(e,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):e[s]=i}}function op(t,e,n){tn(J(t)?t.map(s=>s.bind(e.proxy)):t.bind(e.proxy),e,n)}function t0(t,e,n,s){let r=s.includes(\".\")?Ly(n,s):()=>n[s];if(re(t)){const i=e[t];ne(i)&&Xr(r,i)}else if(ne(t))Xr(r,t.bind(n));else if(ye(t))if(J(t))t.forEach(i=>t0(i,e,n,s));else{const i=ne(t.handler)?t.handler.bind(n):e[t.handler];ne(i)&&Xr(r,i,t)}}function bd(t){const e=t.type,{mixins:n,extends:s}=e,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=t.appContext,l=i.get(e);let a;return l?a=l:!r.length&&!n&&!s?a=e:(a={},r.length&&r.forEach(c=>Xl(a,c,o,!0)),Xl(a,e,o)),ye(e)&&i.set(e,a),a}function Xl(t,e,n,s=!1){const{mixins:r,extends:i}=e;i&&Xl(t,i,n,!0),r&&r.forEach(o=>Xl(t,o,n,!0));for(const o in e)if(!(s&&o===\"expose\")){const l=dv[o]||n&&n[o];t[o]=l?l(t[o],e[o]):e[o]}return t}const dv={data:lp,props:ap,emits:ap,methods:Li,computed:Li,beforeCreate:bt,created:bt,beforeMount:bt,mounted:bt,beforeUpdate:bt,updated:bt,beforeDestroy:bt,beforeUnmount:bt,destroyed:bt,unmounted:bt,activated:bt,deactivated:bt,errorCaptured:bt,serverPrefetch:bt,components:Li,directives:Li,watch:pv,provide:lp,inject:hv};function lp(t,e){return e?t?function(){return ae(ne(t)?t.call(this,this):t,ne(e)?e.call(this,this):e)}:e:t}function hv(t,e){return Li(Ju(t),Ju(e))}function Ju(t){if(J(t)){const e={};for(let n=0;n<t.length;n++)e[t[n]]=t[n];return e}return t}function bt(t,e){return t?[...new Set([].concat(t,e))]:e}function Li(t,e){return t?ae(Object.create(null),t,e):e}function ap(t,e){return t?J(t)&&J(e)?[...new Set([...t,...e])]:ae(Object.create(null),po(t),po(e??{})):e}function pv(t,e){if(!t)return e;if(!e)return t;const n=ae(Object.create(null),t);for(const s in e)n[s]=bt(t[s],e[s]);return n}function n0(){return{app:null,config:{isNativeTag:Wr,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let mv=0;function gv(t,e){return function(s,r=null){ne(s)||(s=ae({},s)),r!=null&&!ye(r)&&(r=null);const i=n0(),o=new WeakSet,l=[];let a=!1;const c=i.app={_uid:mv++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:D0,get config(){return i.config},set config(u){},use(u,...f){return o.has(u)||(u&&ne(u.install)?(o.add(u),u.install(c,...f)):ne(u)&&(o.add(u),u(c,...f))),c},mixin(u){return i.mixins.includes(u)||i.mixins.push(u),c},component(u,f){return f?(i.components[u]=f,c):i.components[u]},directive(u,f){return f?(i.directives[u]=f,c):i.directives[u]},mount(u,f,d){if(!a){const h=c._ceVNode||Ie(s,r);return h.appContext=i,d===!0?d=\"svg\":d===!1&&(d=void 0),f&&e?e(h,u):t(h,u,d),a=!0,c._container=u,u.__vue_app__=c,jo(h.component)}},onUnmount(u){l.push(u)},unmount(){a&&(tn(l,c._instance,16),t(null,c._container),delete c._container.__vue_app__)},provide(u,f){return i.provides[u]=f,c},runWithContext(u){const f=rr;rr=c;try{return u()}finally{rr=f}}};return c}}let rr=null;function yv(t,e,n=ue){const s=kt(),r=Ae(e),i=Ot(e),o=s0(t,r),l=ad((a,c)=>{let u,f=ue,d;return Py(()=>{const h=t[r];St(u,h)&&(u=h,c())}),{get(){return a(),n.get?n.get(u):u},set(h){const p=n.set?n.set(h):h;if(!St(p,u)&&!(f!==ue&&St(h,f)))return;const m=s.vnode.props;m&&(e in m||r in m||i in m)&&(`onUpdate:${e}`in m||`onUpdate:${r}`in m||`onUpdate:${i}`in m)||(u=h,c()),s.emit(`update:${e}`,p),St(h,p)&&St(h,f)&&!St(p,d)&&c(),f=h,d=p}}});return l[Symbol.iterator]=()=>{let a=0;return{next(){return a<2?{value:a++?o||ue:l,done:!1}:{done:!0}}}},l}const s0=(t,e)=>e===\"modelValue\"||e===\"model-value\"?t.modelModifiers:t[`${e}Modifiers`]||t[`${Ae(e)}Modifiers`]||t[`${Ot(e)}Modifiers`];function bv(t,e,...n){if(t.isUnmounted)return;const s=t.vnode.props||ue;let r=n;const i=e.startsWith(\"update:\"),o=i&&s0(s,e.slice(7));o&&(o.trim&&(r=n.map(u=>re(u)?u.trim():u)),o.number&&(r=n.map(fc)));let l,a=s[l=Jr(e)]||s[l=Jr(Ae(e))];!a&&i&&(a=s[l=Jr(Ot(e))]),a&&tn(a,t,6,r);const c=s[l+\"Once\"];if(c){if(!t.emitted)t.emitted={};else if(t.emitted[l])return;t.emitted[l]=!0,tn(c,t,6,r)}}const Sv=new WeakMap;function r0(t,e,n=!1){const s=n?Sv:e.emitsCache,r=s.get(t);if(r!==void 0)return r;const i=t.emits;let o={},l=!1;if(!ne(t)){const a=c=>{const u=r0(c,e,!0);u&&(l=!0,ae(o,u))};!n&&e.mixins.length&&e.mixins.forEach(a),t.extends&&a(t.extends),t.mixins&&t.mixins.forEach(a)}return!i&&!l?(ye(t)&&s.set(t,null),null):(J(i)?i.forEach(a=>o[a]=null):ae(o,i),ye(t)&&s.set(t,o),o)}function kc(t,e){return!t||!vr(e)?!1:(e=e.slice(2).replace(/Once$/,\"\"),pe(t,e[0].toLowerCase()+e.slice(1))||pe(t,Ot(e))||pe(t,e))}function Nl(t){const{type:e,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:a,render:c,renderCache:u,props:f,data:d,setupState:h,ctx:p,inheritAttrs:m}=t,g=ho(t);let y,S;try{if(n.shapeFlag&4){const w=r||s,x=w;y=At(c.call(x,w,u,f,h,d,p)),S=l}else{const w=e;y=At(w.length>1?w(f,{attrs:l,slots:o,emit:a}):w(f,null)),S=e.props?l:xv(l)}}catch(w){qi.length=0,Er(w,t,1),y=Ie(Be)}let b=y;if(S&&m!==!1){const w=Object.keys(S),{shapeFlag:x}=b;w.length&&x&7&&(i&&w.some(Zf)&&(S=Cv(S,i)),b=Tn(b,S,!1,!0))}return n.dirs&&(b=Tn(b,null,!1,!0),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&ts(b,n.transition),y=b,ho(g),y}function wv(t,e=!0){let n;for(let s=0;s<t.length;s++){const r=t[s];if(ns(r)){if(r.type!==Be||r.children===\"v-if\"){if(n)return;n=r}}else return}return n}const xv=t=>{let e;for(const n in t)(n===\"class\"||n===\"style\"||vr(n))&&((e||(e={}))[n]=t[n]);return e},Cv=(t,e)=>{const n={};for(const s in t)(!Zf(s)||!(s.slice(9)in e))&&(n[s]=t[s]);return n};function vv(t,e,n){const{props:s,children:r,component:i}=t,{props:o,children:l,patchFlag:a}=e,c=i.emitsOptions;if(e.dirs||e.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?cp(s,o,c):!!o;if(a&8){const u=e.dynamicProps;for(let f=0;f<u.length;f++){const d=u[f];if(o[d]!==s[d]&&!kc(c,d))return!0}}}else return(r||l)&&(!l||!l.$stable)?!0:s===o?!1:s?o?cp(s,o,c):!0:!!o;return!1}function cp(t,e,n){const s=Object.keys(e);if(s.length!==Object.keys(t).length)return!0;for(let r=0;r<s.length;r++){const i=s[r];if(e[i]!==t[i]&&!kc(n,i))return!0}return!1}function Tc({vnode:t,parent:e},n){for(;e;){const s=e.subTree;if(s.suspense&&s.suspense.activeBranch===t&&(s.el=t.el),s===t)(t=e.vnode).el=n,e=e.parent;else break}}const i0={},o0=()=>Object.create(i0),l0=t=>Object.getPrototypeOf(t)===i0;function kv(t,e,n,s=!1){const r={},i=o0();t.propsDefaults=Object.create(null),a0(t,e,r,i);for(const o in t.propsOptions[0])o in r||(r[o]=void 0);n?t.props=s?r:Cy(r):t.type.props?t.props=r:t.props=i,t.attrs=i}function Tv(t,e,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=t,l=de(r),[a]=t.propsOptions;let c=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=t.vnode.dynamicProps;for(let f=0;f<u.length;f++){let d=u[f];if(kc(t.emitsOptions,d))continue;const h=e[d];if(a)if(pe(i,d))h!==i[d]&&(i[d]=h,c=!0);else{const p=Ae(d);r[p]=Gu(a,l,p,h,t,!1)}else h!==i[d]&&(i[d]=h,c=!0)}}}else{a0(t,e,r,i)&&(c=!0);let u;for(const f in l)(!e||!pe(e,f)&&((u=Ot(f))===f||!pe(e,u)))&&(a?n&&(n[f]!==void 0||n[u]!==void 0)&&(r[f]=Gu(a,l,f,void 0,t,!0)):delete r[f]);if(i!==l)for(const f in i)(!e||!pe(e,f))&&(delete i[f],c=!0)}c&&Vn(t.attrs,\"set\",\"\")}function a0(t,e,n,s){const[r,i]=t.propsOptions;let o=!1,l;if(e)for(let a in e){if(qn(a))continue;const c=e[a];let u;r&&pe(r,u=Ae(a))?!i||!i.includes(u)?n[u]=c:(l||(l={}))[u]=c:kc(t.emitsOptions,a)||(!(a in s)||c!==s[a])&&(s[a]=c,o=!0)}if(i){const a=de(n),c=l||ue;for(let u=0;u<i.length;u++){const f=i[u];n[f]=Gu(r,a,f,c[f],t,!pe(c,f))}}return o}function Gu(t,e,n,s,r,i){const o=t[n];if(o!=null){const l=pe(o,\"default\");if(l&&s===void 0){const a=o.default;if(o.type!==Function&&!o.skipFactory&&ne(a)){const{propsDefaults:c}=r;if(n in c)s=c[n];else{const u=pr(r);s=c[n]=a.call(null,e),u()}}else s=a;r.ce&&r.ce._setProp(n,s)}o[0]&&(i&&!l?s=!1:o[1]&&(s===\"\"||s===Ot(n))&&(s=!0))}return s}const Ev=new WeakMap;function c0(t,e,n=!1){const s=n?Ev:e.propsCache,r=s.get(t);if(r)return r;const i=t.props,o={},l=[];let a=!1;if(!ne(t)){const u=f=>{a=!0;const[d,h]=c0(f,e,!0);ae(o,d),h&&l.push(...h)};!n&&e.mixins.length&&e.mixins.forEach(u),t.extends&&u(t.extends),t.mixins&&t.mixins.forEach(u)}if(!i&&!a)return ye(t)&&s.set(t,Kr),Kr;if(J(i))for(let u=0;u<i.length;u++){const f=Ae(i[u]);up(f)&&(o[f]=ue)}else if(i)for(const u in i){const f=Ae(u);if(up(f)){const d=i[u],h=o[f]=J(d)||ne(d)?{type:d}:ae({},d),p=h.type;let m=!1,g=!0;if(J(p))for(let y=0;y<p.length;++y){const S=p[y],b=ne(S)&&S.name;if(b===\"Boolean\"){m=!0;break}else b===\"String\"&&(g=!1)}else m=ne(p)&&p.name===\"Boolean\";h[0]=m,h[1]=g,(m||pe(h,\"default\"))&&l.push(f)}}const c=[o,l];return ye(t)&&s.set(t,c),c}function up(t){return t[0]!==\"$\"&&!qn(t)}const Sd=t=>t===\"_\"||t===\"_ctx\"||t===\"$stable\",wd=t=>J(t)?t.map(At):[At(t)],Mv=(t,e,n)=>{if(e._n)return e;const s=ud((...r)=>wd(e(...r)),n);return s._c=!1,s},u0=(t,e,n)=>{const s=t._ctx;for(const r in t){if(Sd(r))continue;const i=t[r];if(ne(i))e[r]=Mv(r,i,s);else if(i!=null){const o=wd(i);e[r]=()=>o}}},f0=(t,e)=>{const n=wd(e);t.slots.default=()=>n},d0=(t,e,n)=>{for(const s in e)(n||!Sd(s))&&(t[s]=e[s])},Av=(t,e,n)=>{const s=t.slots=o0();if(t.vnode.shapeFlag&32){const r=e._;r?(d0(s,e,n),n&&ey(s,\"_\",r,!0)):u0(e,s)}else e&&f0(t,e)},Nv=(t,e,n)=>{const{vnode:s,slots:r}=t;let i=!0,o=ue;if(s.shapeFlag&32){const l=e._;l?n&&l===1?i=!1:d0(r,e,n):(i=!e.$stable,u0(e,r)),o=e}else e&&(f0(t,e),o={default:1});if(i)for(const l in r)!Sd(l)&&o[l]==null&&delete r[l]},He=w0;function h0(t){return m0(t)}function p0(t){return m0(t,AC)}function m0(t,e){const n=dc();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:d,setScopeId:h=it,insertStaticContent:p}=t,m=(C,M,I,H=null,P=null,L=null,q=void 0,U=null,W=!!M.dynamicChildren)=>{if(C===M)return;C&&!rn(C,M)&&(H=Rr(C),lt(C,P,L,!0),C=null),M.patchFlag===-2&&(W=!1,M.dynamicChildren=null);const{type:B,ref:te,shapeFlag:G}=M;switch(B){case Os:g(C,M,I,H);break;case Be:y(C,M,I,H);break;case ir:C==null&&S(M,I,H,q);break;case je:N(C,M,I,H,P,L,q,U,W);break;default:G&1?x(C,M,I,H,P,L,q,U,W):G&6?_(C,M,I,H,P,L,q,U,W):(G&64||G&128)&&B.process(C,M,I,H,P,L,q,U,W,Ir)}te!=null&&P?Qr(te,C&&C.ref,L,M||C,!M):te==null&&C&&C.ref!=null&&Qr(C.ref,null,L,C,!0)},g=(C,M,I,H)=>{if(C==null)s(M.el=l(M.children),I,H);else{const P=M.el=C.el;M.children!==C.children&&c(P,M.children)}},y=(C,M,I,H)=>{C==null?s(M.el=a(M.children||\"\"),I,H):M.el=C.el},S=(C,M,I,H)=>{[C.el,C.anchor]=p(C.children,M,I,H,C.el,C.anchor)},b=({el:C,anchor:M},I,H)=>{let P;for(;C&&C!==M;)P=d(C),s(C,I,H),C=P;s(M,I,H)},w=({el:C,anchor:M})=>{let I;for(;C&&C!==M;)I=d(C),r(C),C=I;r(M)},x=(C,M,I,H,P,L,q,U,W)=>{if(M.type===\"svg\"?q=\"svg\":M.type===\"math\"&&(q=\"mathml\"),C==null)E(M,I,H,P,L,q,U,W);else{const B=C.el&&C.el._isVueCE?C.el:null;try{B&&B._beginPatch(),v(C,M,P,L,q,U,W)}finally{B&&B._endPatch()}}},E=(C,M,I,H,P,L,q,U)=>{let W,B;const{props:te,shapeFlag:G,transition:X,dirs:se}=C;if(W=C.el=o(C.type,L,te&&te.is,te),G&8?u(W,C.children):G&16&&A(C.children,W,null,H,P,lu(C,L),q,U),se&&xn(C,null,H,\"created\"),k(W,C,C.scopeId,q,H),te){for(const ke in te)ke!==\"value\"&&!qn(ke)&&i(W,ke,null,te[ke],L,H);\"value\"in te&&i(W,\"value\",null,te.value,L),(B=te.onVnodeBeforeMount)&&Mt(B,H,C)}se&&xn(C,null,H,\"beforeMount\");const fe=g0(P,X);fe&&X.beforeEnter(W),s(W,M,I),((B=te&&te.onVnodeMounted)||fe||se)&&He(()=>{B&&Mt(B,H,C),fe&&X.enter(W),se&&xn(C,null,H,\"mounted\")},P)},k=(C,M,I,H,P)=>{if(I&&h(C,I),H)for(let L=0;L<H.length;L++)h(C,H[L]);if(P){let L=P.subTree;if(M===L||Zl(L.type)&&(L.ssContent===M||L.ssFallback===M)){const q=P.vnode;k(C,q,q.scopeId,q.slotScopeIds,P.parent)}}},A=(C,M,I,H,P,L,q,U,W=0)=>{for(let B=W;B<C.length;B++){const te=C[B]=U?Ss(C[B]):At(C[B]);m(null,te,M,I,H,P,L,q,U)}},v=(C,M,I,H,P,L,q)=>{const U=M.el=C.el;let{patchFlag:W,dynamicChildren:B,dirs:te}=M;W|=C.patchFlag&16;const G=C.props||ue,X=M.props||ue;let se;if(I&&Ks(I,!1),(se=X.onVnodeBeforeUpdate)&&Mt(se,I,M,C),te&&xn(M,C,I,\"beforeUpdate\"),I&&Ks(I,!0),(G.innerHTML&&X.innerHTML==null||G.textContent&&X.textContent==null)&&u(U,\"\"),B?T(C.dynamicChildren,B,U,I,H,lu(M,P),L):q||$(C,M,U,null,I,H,lu(M,P),L,!1),W>0){if(W&16)O(U,G,X,I,P);else if(W&2&&G.class!==X.class&&i(U,\"class\",null,X.class,P),W&4&&i(U,\"style\",G.style,X.style,P),W&8){const fe=M.dynamicProps;for(let ke=0;ke<fe.length;ke++){const be=fe[ke],Tt=G[be],at=X[be];(at!==Tt||be===\"value\")&&i(U,be,Tt,at,P,I)}}W&1&&C.children!==M.children&&u(U,M.children)}else!q&&B==null&&O(U,G,X,I,P);((se=X.onVnodeUpdated)||te)&&He(()=>{se&&Mt(se,I,M,C),te&&xn(M,C,I,\"updated\")},H)},T=(C,M,I,H,P,L,q)=>{for(let U=0;U<M.length;U++){const W=C[U],B=M[U],te=W.el&&(W.type===je||!rn(W,B)||W.shapeFlag&198)?f(W.el):I;m(W,B,te,null,H,P,L,q,!0)}},O=(C,M,I,H,P)=>{if(M!==I){if(M!==ue)for(const L in M)!qn(L)&&!(L in I)&&i(C,L,M[L],null,P,H);for(const L in I){if(qn(L))continue;const q=I[L],U=M[L];q!==U&&L!==\"value\"&&i(C,L,U,q,P,H)}\"value\"in I&&i(C,\"value\",M.value,I.value,P)}},N=(C,M,I,H,P,L,q,U,W)=>{const B=M.el=C?C.el:l(\"\"),te=M.anchor=C?C.anchor:l(\"\");let{patchFlag:G,dynamicChildren:X,slotScopeIds:se}=M;se&&(U=U?U.concat(se):se),C==null?(s(B,I,H),s(te,I,H),A(M.children||[],I,te,P,L,q,U,W)):G>0&&G&64&&X&&C.dynamicChildren&&C.dynamicChildren.length===X.length?(T(C.dynamicChildren,X,I,P,L,q,U),(M.key!=null||P&&M===P.subTree)&&xd(C,M,!0)):$(C,M,I,te,P,L,q,U,W)},_=(C,M,I,H,P,L,q,U,W)=>{M.slotScopeIds=U,C==null?M.shapeFlag&512?P.ctx.activate(M,I,H,q,W):F(M,I,H,P,L,q,W):j(C,M,W)},F=(C,M,I,H,P,L,q)=>{const U=C.component=E0(C,H,P);if(Wo(C)&&(U.ctx.renderer=Ir),A0(U,!1,q),U.asyncDep){if(P&&P.registerDep(U,R,q),!C.el){const W=U.subTree=Ie(Be);y(null,W,M,I),C.placeholder=W.el}}else R(U,C,M,I,P,L,q)},j=(C,M,I)=>{const H=M.component=C.component;if(vv(C,M,I))if(H.asyncDep&&!H.asyncResolved){V(H,M,I);return}else H.next=M,H.update();else M.el=C.el,H.vnode=M},R=(C,M,I,H,P,L,q)=>{const U=()=>{if(C.isMounted){let{next:G,bu:X,u:se,parent:fe,vnode:ke}=C;{const Pt=y0(C);if(Pt){G&&(G.el=ke.el,V(C,G,q)),Pt.asyncDep.then(()=>{C.isUnmounted||U()});return}}let be=G,Tt;Ks(C,!1),G?(G.el=ke.el,V(C,G,q)):G=ke,X&&Gr(X),(Tt=G.props&&G.props.onVnodeBeforeUpdate)&&Mt(Tt,fe,G,ke),Ks(C,!0);const at=Nl(C),sn=C.subTree;C.subTree=at,m(sn,at,f(sn.el),Rr(sn),C,P,L),G.el=at.el,be===null&&Tc(C,at.el),se&&He(se,P),(Tt=G.props&&G.props.onVnodeUpdated)&&He(()=>Mt(Tt,fe,G,ke),P)}else{let G;const{el:X,props:se}=M,{bm:fe,m:ke,parent:be,root:Tt,type:at}=C,sn=Gn(M);if(Ks(C,!1),fe&&Gr(fe),!sn&&(G=se&&se.onVnodeBeforeMount)&&Mt(G,be,M),Ks(C,!0),X&&Zc){const Pt=()=>{C.subTree=Nl(C),Zc(X,C.subTree,C,P,null)};sn&&at.__asyncHydrate?at.__asyncHydrate(X,C,Pt):Pt()}else{Tt.ce&&Tt.ce._def.shadowRoot!==!1&&Tt.ce._injectChildStyle(at);const Pt=C.subTree=Nl(C);m(null,Pt,I,H,C,P,L),M.el=Pt.el}if(ke&&He(ke,P),!sn&&(G=se&&se.onVnodeMounted)){const Pt=M;He(()=>Mt(G,be,Pt),P)}(M.shapeFlag&256||be&&Gn(be.vnode)&&be.vnode.shapeFlag&256)&&C.a&&He(C.a,P),C.isMounted=!0,M=I=H=null}};C.scope.on();const W=C.effect=new lo(U);C.scope.off();const B=C.update=W.run.bind(W),te=C.job=W.runIfDirty.bind(W);te.i=C,te.id=C.uid,W.scheduler=()=>cd(te),Ks(C,!0),B()},V=(C,M,I)=>{M.component=C;const H=C.vnode.props;C.vnode=M,C.next=null,Tv(C,M.props,H,I),Nv(C,M.children,I),Zn(),Xh(C),es()},$=(C,M,I,H,P,L,q,U,W=!1)=>{const B=C&&C.children,te=C?C.shapeFlag:0,G=M.children,{patchFlag:X,shapeFlag:se}=M;if(X>0){if(X&128){Xe(B,G,I,H,P,L,q,U,W);return}else if(X&256){ie(B,G,I,H,P,L,q,U,W);return}}se&8?(te&16&&us(B,P,L),G!==B&&u(I,G)):te&16?se&16?Xe(B,G,I,H,P,L,q,U,W):us(B,P,L,!0):(te&8&&u(I,\"\"),se&16&&A(G,I,H,P,L,q,U,W))},ie=(C,M,I,H,P,L,q,U,W)=>{C=C||Kr,M=M||Kr;const B=C.length,te=M.length,G=Math.min(B,te);let X;for(X=0;X<G;X++){const se=M[X]=W?Ss(M[X]):At(M[X]);m(C[X],se,I,null,P,L,q,U,W)}B>te?us(C,P,L,!0,!1,G):A(M,I,H,P,L,q,U,W,G)},Xe=(C,M,I,H,P,L,q,U,W)=>{let B=0;const te=M.length;let G=C.length-1,X=te-1;for(;B<=G&&B<=X;){const se=C[B],fe=M[B]=W?Ss(M[B]):At(M[B]);if(rn(se,fe))m(se,fe,I,null,P,L,q,U,W);else break;B++}for(;B<=G&&B<=X;){const se=C[G],fe=M[X]=W?Ss(M[X]):At(M[X]);if(rn(se,fe))m(se,fe,I,null,P,L,q,U,W);else break;G--,X--}if(B>G){if(B<=X){const se=X+1,fe=se<te?M[se].el:H;for(;B<=X;)m(null,M[B]=W?Ss(M[B]):At(M[B]),I,fe,P,L,q,U,W),B++}}else if(B>X)for(;B<=G;)lt(C[B],P,L,!0),B++;else{const se=B,fe=B,ke=new Map;for(B=fe;B<=X;B++){const Lt=M[B]=W?Ss(M[B]):At(M[B]);Lt.key!=null&&ke.set(Lt.key,B)}let be,Tt=0;const at=X-fe+1;let sn=!1,Pt=0;const Mi=new Array(at);for(B=0;B<at;B++)Mi[B]=0;for(B=se;B<=G;B++){const Lt=C[B];if(Tt>=at){lt(Lt,P,L,!0);continue}let mn;if(Lt.key!=null)mn=ke.get(Lt.key);else for(be=fe;be<=X;be++)if(Mi[be-fe]===0&&rn(Lt,M[be])){mn=be;break}mn===void 0?lt(Lt,P,L,!0):(Mi[mn-fe]=B+1,mn>=Pt?Pt=mn:sn=!0,m(Lt,M[mn],I,null,P,L,q,U,W),Tt++)}const jh=sn?Ov(Mi):Kr;for(be=jh.length-1,B=at-1;B>=0;B--){const Lt=fe+B,mn=M[Lt],Uh=M[Lt+1],Kh=Lt+1<te?Uh.el||b0(Uh):H;Mi[B]===0?m(null,mn,I,Kh,P,L,q,U,W):sn&&(be<0||B!==jh[be]?Qe(mn,I,Kh,2):be--)}}},Qe=(C,M,I,H,P=null)=>{const{el:L,type:q,transition:U,children:W,shapeFlag:B}=C;if(B&6){Qe(C.component.subTree,M,I,H);return}if(B&128){C.suspense.move(M,I,H);return}if(B&64){q.move(C,M,I,Ir);return}if(q===je){s(L,M,I);for(let G=0;G<W.length;G++)Qe(W[G],M,I,H);s(C.anchor,M,I);return}if(q===ir){b(C,M,I);return}if(H!==2&&B&1&&U)if(H===0)U.beforeEnter(L),s(L,M,I),He(()=>U.enter(L),P);else{const{leave:G,delayLeave:X,afterLeave:se}=U,fe=()=>{C.ctx.isUnmounted?r(L):s(L,M,I)},ke=()=>{L._isLeaving&&L[zn](!0),G(L,()=>{fe(),se&&se()})};X?X(L,fe,ke):ke()}else s(L,M,I)},lt=(C,M,I,H=!1,P=!1)=>{const{type:L,props:q,ref:U,children:W,dynamicChildren:B,shapeFlag:te,patchFlag:G,dirs:X,cacheIndex:se}=C;if(G===-2&&(P=!1),U!=null&&(Zn(),Qr(U,null,I,C,!0),es()),se!=null&&(M.renderCache[se]=void 0),te&256){M.ctx.deactivate(C);return}const fe=te&1&&X,ke=!Gn(C);let be;if(ke&&(be=q&&q.onVnodeBeforeUnmount)&&Mt(be,M,C),te&6)cs(C.component,I,H);else{if(te&128){C.suspense.unmount(I,H);return}fe&&xn(C,null,M,\"beforeUnmount\"),te&64?C.type.remove(C,M,I,Ir,H):B&&!B.hasOnce&&(L!==je||G>0&&G&64)?us(B,M,I,!1,!0):(L===je&&G&384||!P&&te&16)&&us(W,M,I),H&&Us(C)}(ke&&(be=q&&q.onVnodeUnmounted)||fe)&&He(()=>{be&&Mt(be,M,C),fe&&xn(C,null,M,\"unmounted\")},I)},Us=C=>{const{type:M,el:I,anchor:H,transition:P}=C;if(M===je){Ei(I,H);return}if(M===ir){w(C);return}const L=()=>{r(I),P&&!P.persisted&&P.afterLeave&&P.afterLeave()};if(C.shapeFlag&1&&P&&!P.persisted){const{leave:q,delayLeave:U}=P,W=()=>q(I,L);U?U(C.el,L,W):W()}else L()},Ei=(C,M)=>{let I;for(;C!==M;)I=d(C),r(C),C=I;r(M)},cs=(C,M,I)=>{const{bum:H,scope:P,job:L,subTree:q,um:U,m:W,a:B}=C;Ql(W),Ql(B),H&&Gr(H),P.stop(),L&&(L.flags|=8,lt(q,C,M,I)),U&&He(U,M),He(()=>{C.isUnmounted=!0},M)},us=(C,M,I,H=!1,P=!1,L=0)=>{for(let q=L;q<C.length;q++)lt(C[q],M,I,H,P)},Rr=C=>{if(C.shapeFlag&6)return Rr(C.component.subTree);if(C.shapeFlag&128)return C.suspense.next();const M=d(C.anchor||C.el),I=M&&M[By];return I?d(I):M};let Xc=!1;const Wh=(C,M,I)=>{let H;C==null?M._vnode&&(lt(M._vnode,null,null,!0),H=M._vnode.component):m(M._vnode||null,C,M,null,null,null,I),M._vnode=C,Xc||(Xc=!0,Xh(H),Gl(),Xc=!1)},Ir={p:m,um:lt,m:Qe,r:Us,mt:F,mc:A,pc:$,pbc:T,n:Rr,o:t};let Qc,Zc;return e&&([Qc,Zc]=e(Ir)),{render:Wh,hydrate:Qc,createApp:gv(Wh,Qc)}}function lu({type:t,props:e},n){return n===\"svg\"&&t===\"foreignObject\"||n===\"mathml\"&&t===\"annotation-xml\"&&e&&e.encoding&&e.encoding.includes(\"html\")?void 0:n}function Ks({effect:t,job:e},n){n?(t.flags|=32,e.flags|=4):(t.flags&=-33,e.flags&=-5)}function g0(t,e){return(!t||t&&!t.pendingBranch)&&e&&!e.persisted}function xd(t,e,n=!1){const s=t.children,r=e.children;if(J(s)&&J(r))for(let i=0;i<s.length;i++){const o=s[i];let l=r[i];l.shapeFlag&1&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=r[i]=Ss(r[i]),l.el=o.el),!n&&l.patchFlag!==-2&&xd(o,l)),l.type===Os&&(l.patchFlag!==-1?l.el=o.el:l.__elIndex=i+(t.type===je?1:0)),l.type===Be&&!l.el&&(l.el=o.el)}}function Ov(t){const e=t.slice(),n=[0];let s,r,i,o,l;const a=t.length;for(s=0;s<a;s++){const c=t[s];if(c!==0){if(r=n[n.length-1],t[r]<c){e[s]=r,n.push(s);continue}for(i=0,o=n.length-1;i<o;)l=i+o>>1,t[n[l]]<c?i=l+1:o=l;c<t[n[i]]&&(i>0&&(e[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=e[o];return n}function y0(t){const e=t.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:y0(e)}function Ql(t){if(t)for(let e=0;e<t.length;e++)t[e].flags|=8}function b0(t){if(t.placeholder)return t.placeholder;const e=t.component;return e?b0(e.subTree):null}const Zl=t=>t.__isSuspense;let Yu=0;const Rv={name:\"Suspense\",__isSuspense:!0,process(t,e,n,s,r,i,o,l,a,c){if(t==null)_v(e,n,s,r,i,o,l,a,c);else{if(i&&i.deps>0&&!t.suspense.isInFallback){e.suspense=t.suspense,e.suspense.vnode=e,e.el=t.el;return}Dv(t,e,n,s,r,o,l,a,c)}},hydrate:Pv,normalize:Lv},Iv=Rv;function mo(t,e){const n=t.props&&t.props[e];ne(n)&&n()}function _v(t,e,n,s,r,i,o,l,a){const{p:c,o:{createElement:u}}=a,f=u(\"div\"),d=t.suspense=S0(t,r,s,e,f,n,i,o,l,a);c(null,d.pendingBranch=t.ssContent,f,null,s,d,i,o),d.deps>0?(mo(t,\"onPending\"),mo(t,\"onFallback\"),c(null,t.ssFallback,e,n,s,null,i,o),Zr(d,t.ssFallback)):d.resolve(!1,!0)}function Dv(t,e,n,s,r,i,o,l,{p:a,um:c,o:{createElement:u}}){const f=e.suspense=t.suspense;f.vnode=e,e.el=t.el;const d=e.ssContent,h=e.ssFallback,{activeBranch:p,pendingBranch:m,isInFallback:g,isHydrating:y}=f;if(m)f.pendingBranch=d,rn(m,d)?(a(m,d,f.hiddenContainer,null,r,f,i,o,l),f.deps<=0?f.resolve():g&&(y||(a(p,h,n,s,r,null,i,o,l),Zr(f,h)))):(f.pendingId=Yu++,y?(f.isHydrating=!1,f.activeBranch=m):c(m,r,f),f.deps=0,f.effects.length=0,f.hiddenContainer=u(\"div\"),g?(a(null,d,f.hiddenContainer,null,r,f,i,o,l),f.deps<=0?f.resolve():(a(p,h,n,s,r,null,i,o,l),Zr(f,h))):p&&rn(p,d)?(a(p,d,n,s,r,f,i,o,l),f.resolve(!0)):(a(null,d,f.hiddenContainer,null,r,f,i,o,l),f.deps<=0&&f.resolve()));else if(p&&rn(p,d))a(p,d,n,s,r,f,i,o,l),Zr(f,d);else if(mo(e,\"onPending\"),f.pendingBranch=d,d.shapeFlag&512?f.pendingId=d.component.suspenseId:f.pendingId=Yu++,a(null,d,f.hiddenContainer,null,r,f,i,o,l),f.deps<=0)f.resolve();else{const{timeout:S,pendingId:b}=f;S>0?setTimeout(()=>{f.pendingId===b&&f.fallback(h)},S):S===0&&f.fallback(h)}}function S0(t,e,n,s,r,i,o,l,a,c,u=!1){const{p:f,m:d,um:h,n:p,o:{parentNode:m,remove:g}}=c;let y;const S=Bv(t);S&&e&&e.pendingBranch&&(y=e.pendingId,e.deps++);const b=t.props?jl(t.props.timeout):void 0,w=i,x={vnode:t,parent:e,parentComponent:n,namespace:o,container:s,hiddenContainer:r,deps:0,pendingId:Yu++,timeout:typeof b==\"number\"?b:-1,activeBranch:null,pendingBranch:null,isInFallback:!u,isHydrating:u,isUnmounted:!1,effects:[],resolve(E=!1,k=!1){const{vnode:A,activeBranch:v,pendingBranch:T,pendingId:O,effects:N,parentComponent:_,container:F,isInFallback:j}=x;let R=!1;x.isHydrating?x.isHydrating=!1:E||(R=v&&T.transition&&T.transition.mode===\"out-in\",R&&(v.transition.afterLeave=()=>{O===x.pendingId&&(d(T,F,i===w?p(v):i,0),uo(N),j&&A.ssFallback&&(A.ssFallback.el=null))}),v&&(m(v.el)===F&&(i=p(v)),h(v,_,x,!0),!R&&j&&A.ssFallback&&He(()=>A.ssFallback.el=null,x)),R||d(T,F,i,0)),Zr(x,T),x.pendingBranch=null,x.isInFallback=!1;let V=x.parent,$=!1;for(;V;){if(V.pendingBranch){V.effects.push(...N),$=!0;break}V=V.parent}!$&&!R&&uo(N),x.effects=[],S&&e&&e.pendingBranch&&y===e.pendingId&&(e.deps--,e.deps===0&&!k&&e.resolve()),mo(A,\"onResolve\")},fallback(E){if(!x.pendingBranch)return;const{vnode:k,activeBranch:A,parentComponent:v,container:T,namespace:O}=x;mo(k,\"onFallback\");const N=p(A),_=()=>{x.isInFallback&&(f(null,E,T,N,v,null,O,l,a),Zr(x,E))},F=E.transition&&E.transition.mode===\"out-in\";F&&(A.transition.afterLeave=_),x.isInFallback=!0,h(A,v,null,!0),F||_()},move(E,k,A){x.activeBranch&&d(x.activeBranch,E,k,A),x.container=E},next(){return x.activeBranch&&p(x.activeBranch)},registerDep(E,k,A){const v=!!x.pendingBranch;v&&x.deps++;const T=E.vnode.el;E.asyncDep.catch(O=>{Er(O,E,0)}).then(O=>{if(E.isUnmounted||x.isUnmounted||x.pendingId!==E.suspenseId)return;E.asyncResolved=!0;const{vnode:N}=E;Zu(E,O,!1),T&&(N.el=T);const _=!T&&E.subTree.el;k(E,N,m(T||E.subTree.el),T?null:p(E.subTree),x,o,A),_&&(N.placeholder=null,g(_)),Tc(E,N.el),v&&--x.deps===0&&x.resolve()})},unmount(E,k){x.isUnmounted=!0,x.activeBranch&&h(x.activeBranch,n,E,k),x.pendingBranch&&h(x.pendingBranch,n,E,k)}};return x}function Pv(t,e,n,s,r,i,o,l,a){const c=e.suspense=S0(e,s,n,t.parentNode,document.createElement(\"div\"),null,r,i,o,l,!0),u=a(t,c.pendingBranch=e.ssContent,n,c,i,o);return c.deps===0&&c.resolve(!1,!0),u}function Lv(t){const{shapeFlag:e,children:n}=t,s=e&32;t.ssContent=fp(s?n.default:n),t.ssFallback=s?fp(n.fallback):Ie(Be)}function fp(t){let e;if(ne(t)){const n=hr&&t._c;n&&(t._d=!1,go()),t=t(),n&&(t._d=!0,e=pt,x0())}return J(t)&&(t=wv(t)),t=At(t),e&&!t.dynamicChildren&&(t.dynamicChildren=e.filter(n=>n!==t)),t}function w0(t,e){e&&e.pendingBranch?J(t)?e.effects.push(...t):e.effects.push(t):uo(t)}function Zr(t,e){t.activeBranch=e;const{vnode:n,parentComponent:s}=t;let r=e.el;for(;!r&&e.component;)e=e.component.subTree,r=e.el;n.el=r,s&&s.subTree===n&&(s.vnode.el=r,Tc(s,r))}function Bv(t){const e=t.props&&t.props.suspensible;return e!=null&&e!==!1}const je=Symbol.for(\"v-fgt\"),Os=Symbol.for(\"v-txt\"),Be=Symbol.for(\"v-cmt\"),ir=Symbol.for(\"v-stc\"),qi=[];let pt=null;function go(t=!1){qi.push(pt=t?null:[])}function x0(){qi.pop(),pt=qi[qi.length-1]||null}let hr=1;function yo(t,e=!1){hr+=t,t<0&&pt&&e&&(pt.hasOnce=!0)}function C0(t){return t.dynamicChildren=hr>0?pt||Kr:null,x0(),hr>0&&pt&&pt.push(t),t}function $v(t,e,n,s,r,i){return C0(Cd(t,e,n,s,r,i,!0))}function ea(t,e,n,s,r){return C0(Ie(t,e,n,s,r,!0))}function ns(t){return t?t.__v_isVNode===!0:!1}function rn(t,e){return t.type===e.type&&t.key===e.key}function Hv(t){}const v0=({key:t})=>t??null,Ol=({ref:t,ref_key:e,ref_for:n})=>(typeof t==\"number\"&&(t=\"\"+t),t!=null?re(t)||Ve(t)||ne(t)?{i:rt,r:t,k:e,f:!!n}:t:null);function Cd(t,e=null,n=null,s=0,r=null,i=t===je?0:1,o=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&v0(e),ref:e&&Ol(e),scopeId:Sc,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:rt};return l?(kd(a,n),i&128&&t.normalize(a)):n&&(a.shapeFlag|=re(n)?8:16),hr>0&&!o&&pt&&(a.patchFlag>0||i&6)&&a.patchFlag!==32&&pt.push(a),a}const Ie=Fv;function Fv(t,e=null,n=null,s=0,r=null,i=!1){if((!t||t===Zy)&&(t=Be),ns(t)){const l=Tn(t,e,!0);return n&&kd(l,n),hr>0&&!i&&pt&&(l.shapeFlag&6?pt[pt.indexOf(t)]=l:pt.push(l)),l.patchFlag=-2,l}if(Jv(t)&&(t=t.__vccOpts),e){e=k0(e);let{class:l,style:a}=e;l&&!re(l)&&(e.class=$o(l)),ye(a)&&(Fo(a)&&!J(a)&&(a=ae({},a)),e.style=Bo(a))}const o=re(t)?1:Zl(t)?128:$y(t)?64:ye(t)?4:ne(t)?2:0;return Cd(t,e,n,s,r,o,i,!0)}function k0(t){return t?Fo(t)||l0(t)?ae({},t):t:null}function Tn(t,e,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:a}=t,c=e?T0(r||{},e):r,u={__v_isVNode:!0,__v_skip:!0,type:t.type,props:c,key:c&&v0(c),ref:e&&e.ref?n&&i?J(i)?i.concat(Ol(e)):[i,Ol(e)]:Ol(e):i,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:l,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==je?o===-1?16:o|16:o,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:a,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Tn(t.ssContent),ssFallback:t.ssFallback&&Tn(t.ssFallback),placeholder:t.placeholder,el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce};return a&&s&&ts(u,a.clone(u)),u}function vd(t=\" \",e=0){return Ie(Os,null,t,e)}function zv(t,e){const n=Ie(ir,null,t);return n.staticCount=e,n}function Vv(t=\"\",e=!1){return e?(go(),ea(Be,null,t)):Ie(Be,null,t)}function At(t){return t==null||typeof t==\"boolean\"?Ie(Be):J(t)?Ie(je,null,t.slice()):ns(t)?Ss(t):Ie(Os,null,String(t))}function Ss(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:Tn(t)}function kd(t,e){let n=0;const{shapeFlag:s}=t;if(e==null)e=null;else if(J(e))n=16;else if(typeof e==\"object\")if(s&65){const r=e.default;r&&(r._c&&(r._d=!1),kd(t,r()),r._c&&(r._d=!0));return}else{n=32;const r=e._;!r&&!l0(e)?e._ctx=rt:r===3&&rt&&(rt.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else ne(e)?(e={default:e,_ctx:rt},n=32):(e=String(e),s&64?(n=16,e=[vd(e)]):n=8);t.children=e,t.shapeFlag|=n}function T0(...t){const e={};for(let n=0;n<t.length;n++){const s=t[n];for(const r in s)if(r===\"class\")e.class!==s.class&&(e.class=$o([e.class,s.class]));else if(r===\"style\")e.style=Bo([e.style,s.style]);else if(vr(r)){const i=e[r],o=s[r];o&&i!==o&&!(J(i)&&i.includes(o))&&(e[r]=i?[].concat(i,o):o)}else r!==\"\"&&(e[r]=s[r])}return e}function Mt(t,e,n,s=null){tn(t,e,7,[n,s])}const Wv=n0();let jv=0;function E0(t,e,n){const s=t.type,r=(e?e.appContext:t.appContext)||Wv,i={uid:jv++,vnode:t,type:s,parent:e,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new nd(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:e?e.provides:Object.create(r.provides),ids:e?e.ids:[\"\",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:c0(s,r),emitsOptions:r0(s,r),emit:null,emitted:null,propsDefaults:ue,inheritAttrs:s.inheritAttrs,ctx:ue,data:ue,props:ue,attrs:ue,slots:ue,refs:ue,setupState:ue,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=e?e.root:i,i.emit=bv.bind(null,i),t.ce&&t.ce(i),i}let st=null;const kt=()=>st||rt;let ta,Xu;{const t=dc(),e=(n,s)=>{let r;return(r=t[n])||(r=t[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};ta=e(\"__VUE_INSTANCE_SETTERS__\",n=>st=n),Xu=e(\"__VUE_SSR_SETTERS__\",n=>ii=n)}const pr=t=>{const e=st;return ta(t),t.scope.on(),()=>{t.scope.off(),ta(e)}},Qu=()=>{st&&st.scope.off(),ta(null)};function M0(t){return t.vnode.shapeFlag&4}let ii=!1;function A0(t,e=!1,n=!1){e&&Xu(e);const{props:s,children:r}=t.vnode,i=M0(t);kv(t,s,i,e),Av(t,r,n||e);const o=i?Uv(t,e):void 0;return e&&Xu(!1),o}function Uv(t,e){const n=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,Ku);const{setup:s}=n;if(s){Zn();const r=t.setupContext=s.length>1?R0(t):null,i=pr(t),o=Ci(s,t,0,[t.props,r]),l=td(o);if(es(),i(),(l||t.sp)&&!Gn(t)&&hd(t),l){if(o.then(Qu,Qu),e)return o.then(a=>{Zu(t,a,e)}).catch(a=>{Er(a,t,0)});t.asyncDep=o}else Zu(t,o,e)}else O0(t,e)}function Zu(t,e,n){ne(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:ye(e)&&(t.setupState=ld(e)),O0(t,n)}let na,ef;function N0(t){na=t,ef=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,YC))}}const Kv=()=>!na;function O0(t,e,n){const s=t.type;if(!t.render){if(!e&&na&&!s.render){const r=s.template||bd(t).template;if(r){const{isCustomElement:i,compilerOptions:o}=t.appContext.config,{delimiters:l,compilerOptions:a}=s,c=ae(ae({isCustomElement:i,delimiters:l},o),a);s.render=na(r,c)}}t.render=s.render||it,ef&&ef(t)}{const r=pr(t);Zn();try{uv(t)}finally{es(),r()}}}const qv={get(t,e){return ht(t,\"get\",\"\"),t[e]}};function R0(t){const e=n=>{t.exposed=n||{}};return{attrs:new Proxy(t.attrs,qv),slots:t.slots,emit:t.emit,expose:e}}function jo(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(ld(bc(t.exposed)),{get(e,n){if(n in e)return e[n];if(n in Ki)return Ki[n](t)},has(e,n){return n in e||n in Ki}})):t.proxy}function tf(t,e=!0){return ne(t)?t.displayName||t.name:t.name||e&&t.__name}function Jv(t){return ne(t)&&\"__vccOpts\"in t}const I0=(t,e)=>nC(t,e,ii);function Uo(t,e,n){try{yo(-1);const s=arguments.length;return s===2?ye(e)&&!J(e)?ns(e)?Ie(t,null,[e]):Ie(t,e):Ie(t,null,e):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&ns(n)&&(n=[n]),Ie(t,e,n))}finally{yo(1)}}function Gv(){}function Yv(t,e,n,s){const r=n[s];if(r&&_0(r,t))return r;const i=e();return i.memo=t.slice(),i.cacheIndex=s,n[s]=i}function _0(t,e){const n=t.memo;if(n.length!=e.length)return!1;for(let s=0;s<n.length;s++)if(St(n[s],e[s]))return!1;return hr>0&&pt&&pt.push(t),!0}const D0=\"3.5.27\",Xv=it,Qv=fC,Zv=Hr,ek=Oy,tk={createComponentInstance:E0,setupComponent:A0,renderComponentRoot:Nl,setCurrentRenderingInstance:ho,isVNode:ns,normalizeVNode:At,getComponentPublicInstance:jo,ensureValidVNode:yd,pushWarningContext:lC,popWarningContext:aC},nk=tk,sk=null,rk=null,ik=null;let nf;const dp=typeof window<\"u\"&&window.trustedTypes;if(dp)try{nf=dp.createPolicy(\"vue\",{createHTML:t=>t})}catch{}const P0=nf?t=>nf.createHTML(t):t=>t,ok=\"http://www.w3.org/2000/svg\",lk=\"http://www.w3.org/1998/Math/MathML\",Hn=typeof document<\"u\"?document:null,hp=Hn&&Hn.createElement(\"template\"),L0={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,s)=>{const r=e===\"svg\"?Hn.createElementNS(ok,t):e===\"mathml\"?Hn.createElementNS(lk,t):n?Hn.createElement(t,{is:n}):Hn.createElement(t);return t===\"select\"&&s&&s.multiple!=null&&r.setAttribute(\"multiple\",s.multiple),r},createText:t=>Hn.createTextNode(t),createComment:t=>Hn.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>Hn.querySelector(t),setScopeId(t,e){t.setAttribute(e,\"\")},insertStaticContent(t,e,n,s,r,i){const o=n?n.previousSibling:e.lastChild;if(r&&(r===i||r.nextSibling))for(;e.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{hp.innerHTML=P0(s===\"svg\"?`<svg>${t}</svg>`:s===\"mathml\"?`<math>${t}</math>`:t);const l=hp.content;if(s===\"svg\"||s===\"mathml\"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}e.insertBefore(l,n)}return[o?o.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}},fs=\"transition\",Ni=\"animation\",oi=Symbol(\"_vtc\"),B0={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},$0=ae({},dd,B0),ak=t=>(t.displayName=\"Transition\",t.props=$0,t),ck=ak((t,{slots:e})=>Uo(Wy,H0(t),e)),qs=(t,e=[])=>{J(t)?t.forEach(n=>n(...e)):t&&t(...e)},pp=t=>t?J(t)?t.some(e=>e.length>1):t.length>1:!1;function H0(t){const e={};for(const N in t)N in B0||(e[N]=t[N]);if(t.css===!1)return e;const{name:n=\"v\",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=i,appearActiveClass:c=o,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=t,p=uk(r),m=p&&p[0],g=p&&p[1],{onBeforeEnter:y,onEnter:S,onEnterCancelled:b,onLeave:w,onLeaveCancelled:x,onBeforeAppear:E=y,onAppear:k=S,onAppearCancelled:A=b}=e,v=(N,_,F,j)=>{N._enterCancelled=j,ps(N,_?u:l),ps(N,_?c:o),F&&F()},T=(N,_)=>{N._isLeaving=!1,ps(N,f),ps(N,h),ps(N,d),_&&_()},O=N=>(_,F)=>{const j=N?k:S,R=()=>v(_,N,F);qs(j,[_,R]),mp(()=>{ps(_,N?a:i),gn(_,N?u:l),pp(j)||gp(_,s,m,R)})};return ae(e,{onBeforeEnter(N){qs(y,[N]),gn(N,i),gn(N,o)},onBeforeAppear(N){qs(E,[N]),gn(N,a),gn(N,c)},onEnter:O(!1),onAppear:O(!0),onLeave(N,_){N._isLeaving=!0;const F=()=>T(N,_);gn(N,f),N._enterCancelled?(gn(N,d),sf(N)):(sf(N),gn(N,d)),mp(()=>{N._isLeaving&&(ps(N,f),gn(N,h),pp(w)||gp(N,s,g,F))}),qs(w,[N,F])},onEnterCancelled(N){v(N,!1,void 0,!0),qs(b,[N])},onAppearCancelled(N){v(N,!0,void 0,!0),qs(A,[N])},onLeaveCancelled(N){T(N),qs(x,[N])}})}function uk(t){if(t==null)return null;if(ye(t))return[au(t.enter),au(t.leave)];{const e=au(t);return[e,e]}}function au(t){return jl(t)}function gn(t,e){e.split(/\\s+/).forEach(n=>n&&t.classList.add(n)),(t[oi]||(t[oi]=new Set)).add(e)}function ps(t,e){e.split(/\\s+/).forEach(s=>s&&t.classList.remove(s));const n=t[oi];n&&(n.delete(e),n.size||(t[oi]=void 0))}function mp(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let fk=0;function gp(t,e,n,s){const r=t._endId=++fk,i=()=>{r===t._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:a}=F0(t,e);if(!o)return s();const c=o+\"end\";let u=0;const f=()=>{t.removeEventListener(c,d),i()},d=h=>{h.target===t&&++u>=a&&f()};setTimeout(()=>{u<a&&f()},l+1),t.addEventListener(c,d)}function F0(t,e){const n=window.getComputedStyle(t),s=p=>(n[p]||\"\").split(\", \"),r=s(`${fs}Delay`),i=s(`${fs}Duration`),o=yp(r,i),l=s(`${Ni}Delay`),a=s(`${Ni}Duration`),c=yp(l,a);let u=null,f=0,d=0;e===fs?o>0&&(u=fs,f=o,d=i.length):e===Ni?c>0&&(u=Ni,f=c,d=a.length):(f=Math.max(o,c),u=f>0?o>c?fs:Ni:null,d=u?u===fs?i.length:a.length:0);const h=u===fs&&/\\b(?:transform|all)(?:,|$)/.test(s(`${fs}Property`).toString());return{type:u,timeout:f,propCount:d,hasTransform:h}}function yp(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max(...e.map((n,s)=>bp(n)+bp(t[s])))}function bp(t){return t===\"auto\"?0:Number(t.slice(0,-1).replace(\",\",\".\"))*1e3}function sf(t){return(t?t.ownerDocument:document).body.offsetHeight}function dk(t,e,n){const s=t[oi];s&&(e=(e?[e,...s]:[...s]).join(\" \")),e==null?t.removeAttribute(\"class\"):n?t.setAttribute(\"class\",e):t.className=e}const sa=Symbol(\"_vod\"),z0=Symbol(\"_vsh\"),V0={name:\"show\",beforeMount(t,{value:e},{transition:n}){t[sa]=t.style.display===\"none\"?\"\":t.style.display,n&&e?n.beforeEnter(t):Oi(t,e)},mounted(t,{value:e},{transition:n}){n&&e&&n.enter(t)},updated(t,{value:e,oldValue:n},{transition:s}){!e!=!n&&(s?e?(s.beforeEnter(t),Oi(t,!0),s.enter(t)):s.leave(t,()=>{Oi(t,!1)}):Oi(t,e))},beforeUnmount(t,{value:e}){Oi(t,e)}};function Oi(t,e){t.style.display=e?t[sa]:\"none\",t[z0]=!e}function hk(){V0.getSSRProps=({value:t})=>{if(!t)return{style:{display:\"none\"}}}}const W0=Symbol(\"\");function pk(t){const e=kt();if(!e)return;const n=e.ut=(r=t(e.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner=\"${e.uid}\"]`)).forEach(i=>ra(i,r))},s=()=>{const r=t(e.proxy);e.ce?ra(e.ce,r):rf(e.subTree,r),n(r)};pd(()=>{uo(s)}),Mr(()=>{Xr(s,it,{flush:\"post\"});const r=new MutationObserver(s);r.observe(e.subTree.el.parentNode,{childList:!0}),vc(()=>r.disconnect())})}function rf(t,e){if(t.shapeFlag&128){const n=t.suspense;t=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{rf(n.activeBranch,e)})}for(;t.component;)t=t.component.subTree;if(t.shapeFlag&1&&t.el)ra(t.el,e);else if(t.type===je)t.children.forEach(n=>rf(n,e));else if(t.type===ir){let{el:n,anchor:s}=t;for(;n&&(ra(n,e),n!==s);)n=n.nextSibling}}function ra(t,e){if(t.nodeType===1){const n=t.style;let s=\"\";for(const r in e){const i=xx(e[r]);n.setProperty(`--${r}`,i),s+=`--${r}: ${i};`}n[W0]=s}}const mk=/(?:^|;)\\s*display\\s*:/;function gk(t,e,n){const s=t.style,r=re(n);let i=!1;if(n&&!r){if(e)if(re(e))for(const o of e.split(\";\")){const l=o.slice(0,o.indexOf(\":\")).trim();n[l]==null&&Rl(s,l,\"\")}else for(const o in e)n[o]==null&&Rl(s,o,\"\");for(const o in n)o===\"display\"&&(i=!0),Rl(s,o,n[o])}else if(r){if(e!==n){const o=s[W0];o&&(n+=\";\"+o),s.cssText=n,i=mk.test(n)}}else e&&t.removeAttribute(\"style\");sa in t&&(t[sa]=i?s.display:\"\",t[z0]&&(s.display=\"none\"))}const Sp=/\\s*!important$/;function Rl(t,e,n){if(J(n))n.forEach(s=>Rl(t,e,s));else if(n==null&&(n=\"\"),e.startsWith(\"--\"))t.setProperty(e,n);else{const s=yk(t,e);Sp.test(n)?t.setProperty(Ot(s),n.replace(Sp,\"\"),\"important\"):t[s]=n}}const wp=[\"Webkit\",\"Moz\",\"ms\"],cu={};function yk(t,e){const n=cu[e];if(n)return n;let s=Ae(e);if(s!==\"filter\"&&s in t)return cu[e]=s;s=Tr(s);for(let r=0;r<wp.length;r++){const i=wp[r]+s;if(i in t)return cu[e]=i}return e}const xp=\"http://www.w3.org/1999/xlink\";function Cp(t,e,n,s,r,i=Sx(e)){s&&e.startsWith(\"xlink:\")?n==null?t.removeAttributeNS(xp,e.slice(6,e.length)):t.setAttributeNS(xp,e,n):n==null||i&&!ny(n)?t.removeAttribute(e):t.setAttribute(e,i?\"\":Dt(n)?String(n):n)}function vp(t,e,n,s,r){if(e===\"innerHTML\"||e===\"textContent\"){n!=null&&(t[e]=e===\"innerHTML\"?P0(n):n);return}const i=t.tagName;if(e===\"value\"&&i!==\"PROGRESS\"&&!i.includes(\"-\")){const l=i===\"OPTION\"?t.getAttribute(\"value\")||\"\":t.value,a=n==null?t.type===\"checkbox\"?\"on\":\"\":String(n);(l!==a||!(\"_value\"in t))&&(t.value=a),n==null&&t.removeAttribute(e),t._value=n;return}let o=!1;if(n===\"\"||n==null){const l=typeof t[e];l===\"boolean\"?n=ny(n):n==null&&l===\"string\"?(n=\"\",o=!0):l===\"number\"&&(n=0,o=!0)}try{t[e]=n}catch{}o&&t.removeAttribute(r||e)}function jn(t,e,n,s){t.addEventListener(e,n,s)}function bk(t,e,n,s){t.removeEventListener(e,n,s)}const kp=Symbol(\"_vei\");function Sk(t,e,n,s,r=null){const i=t[kp]||(t[kp]={}),o=i[e];if(s&&o)o.value=s;else{const[l,a]=wk(e);if(s){const c=i[e]=vk(s,r);jn(t,l,c,a)}else o&&(bk(t,l,o,a),i[e]=void 0)}}const Tp=/(?:Once|Passive|Capture)$/;function wk(t){let e;if(Tp.test(t)){e={};let s;for(;s=t.match(Tp);)t=t.slice(0,t.length-s[0].length),e[s[0].toLowerCase()]=!0}return[t[2]===\":\"?t.slice(3):Ot(t.slice(2)),e]}let uu=0;const xk=Promise.resolve(),Ck=()=>uu||(xk.then(()=>uu=0),uu=Date.now());function vk(t,e){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;tn(kk(s,n.value),e,5,[s])};return n.value=t,n.attached=Ck(),n}function kk(t,e){if(J(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(s=>r=>!r._stopped&&s&&s(r))}else return e}const Ep=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,j0=(t,e,n,s,r,i)=>{const o=r===\"svg\";e===\"class\"?dk(t,s,o):e===\"style\"?gk(t,n,s):vr(e)?Zf(e)||Sk(t,e,n,s,i):(e[0]===\".\"?(e=e.slice(1),!0):e[0]===\"^\"?(e=e.slice(1),!1):Tk(t,e,s,o))?(vp(t,e,s),!t.tagName.includes(\"-\")&&(e===\"value\"||e===\"checked\"||e===\"selected\")&&Cp(t,e,s,o,i,e!==\"value\")):t._isVueCE&&(/[A-Z]/.test(e)||!re(s))?vp(t,Ae(e),s,i,e):(e===\"true-value\"?t._trueValue=s:e===\"false-value\"&&(t._falseValue=s),Cp(t,e,s,o))};function Tk(t,e,n,s){if(s)return!!(e===\"innerHTML\"||e===\"textContent\"||e in t&&Ep(e)&&ne(n));if(e===\"spellcheck\"||e===\"draggable\"||e===\"translate\"||e===\"autocorrect\"||e===\"sandbox\"&&t.tagName===\"IFRAME\"||e===\"form\"||e===\"list\"&&t.tagName===\"INPUT\"||e===\"type\"&&t.tagName===\"TEXTAREA\")return!1;if(e===\"width\"||e===\"height\"){const r=t.tagName;if(r===\"IMG\"||r===\"VIDEO\"||r===\"CANVAS\"||r===\"SOURCE\")return!1}return Ep(e)&&re(n)?!1:e in t}const Mp={};function U0(t,e,n){let s=Vo(t,e);ac(s)&&(s=ae({},s,e));class r extends Ec{constructor(o){super(s,o,n)}}return r.def=s,r}const Ek=((t,e)=>U0(t,e,nb)),Mk=typeof HTMLElement<\"u\"?HTMLElement:class{};class Ec extends Mk{constructor(e,n={},s=of){super(),this._def=e,this._props=n,this._createApp=s,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&s!==of?this._root=this.shadowRoot:e.shadowRoot!==!1?(this.attachShadow(ae({},e.shadowRootOptions,{mode:\"open\"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let e=this;for(;e=e&&(e.parentNode||e.host);)if(e instanceof Ec){this._parent=e;break}this._instance||(this._resolved?this._mount(this._def):e&&e._pendingResolve?this._pendingResolve=e._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(e=this._parent){e&&(this._instance.parent=e._instance,this._inheritParentContext(e))}_inheritParentContext(e=this._parent){e&&this._app&&Object.setPrototypeOf(this._app._context.provides,e._instance.provides)}disconnectedCallback(){this._connected=!1,vi(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(e){for(const n of e)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let s=0;s<this.attributes.length;s++)this._setAttr(this.attributes[s].name);this._ob=new MutationObserver(this._processMutations.bind(this)),this._ob.observe(this,{attributes:!0});const e=(s,r=!1)=>{this._resolved=!0,this._pendingResolve=void 0;const{props:i,styles:o}=s;let l;if(i&&!J(i))for(const a in i){const c=i[a];(c===Number||c&&c.type===Number)&&(a in this._props&&(this._props[a]=jl(this._props[a])),(l||(l=Object.create(null)))[Ae(a)]=!0)}this._numberProps=l,this._resolveProps(s),this.shadowRoot&&this._applyStyles(o),this._mount(s)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(s=>{s.configureApp=this._def.configureApp,e(this._def=s,!0)}):e(this._def)}_mount(e){this._app=this._createApp(e),this._inheritParentContext(),e.configureApp&&e.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const s in n)pe(this,s)||Object.defineProperty(this,s,{get:()=>xi(n[s])})}_resolveProps(e){const{props:n}=e,s=J(n)?n:Object.keys(n||{});for(const r of Object.keys(this))r[0]!==\"_\"&&s.includes(r)&&this._setProp(r,this[r]);for(const r of s.map(Ae))Object.defineProperty(this,r,{get(){return this._getProp(r)},set(i){this._setProp(r,i,!0,!this._patching)}})}_setAttr(e){if(e.startsWith(\"data-v-\"))return;const n=this.hasAttribute(e);let s=n?this.getAttribute(e):Mp;const r=Ae(e);n&&this._numberProps&&this._numberProps[r]&&(s=jl(s)),this._setProp(r,s,!1,!0)}_getProp(e){return this._props[e]}_setProp(e,n,s=!0,r=!1){if(n!==this._props[e]&&(this._dirty=!0,n===Mp?delete this._props[e]:(this._props[e]=n,e===\"key\"&&this._app&&(this._app._ceVNode.key=n)),r&&this._instance&&this._update(),s)){const i=this._ob;i&&(this._processMutations(i.takeRecords()),i.disconnect()),n===!0?this.setAttribute(Ot(e),\"\"):typeof n==\"string\"||typeof n==\"number\"?this.setAttribute(Ot(e),n+\"\"):n||this.removeAttribute(Ot(e)),i&&i.observe(this,{attributes:!0})}}_update(){const e=this._createVNode();this._app&&(e.appContext=this._app._context),la(e,this._root)}_createVNode(){const e={};this.shadowRoot||(e.onVnodeMounted=e.onVnodeUpdated=this._renderSlots.bind(this));const n=Ie(this._def,ae(e,this._props));return this._instance||(n.ce=s=>{this._instance=s,s.ce=this,s.isCE=!0;const r=(i,o)=>{this.dispatchEvent(new CustomEvent(i,ac(o[0])?ae({detail:o},o[0]):{detail:o}))};s.emit=(i,...o)=>{r(i,o),Ot(i)!==i&&r(Ot(i),o)},this._setParent()}),n}_applyStyles(e,n){if(!e)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const s=this._nonce;for(let r=e.length-1;r>=0;r--){const i=document.createElement(\"style\");s&&i.setAttribute(\"nonce\",s),i.textContent=e[r],this.shadowRoot.prepend(i)}}_parseSlots(){const e=this._slots={};let n;for(;n=this.firstChild;){const s=n.nodeType===1&&n.getAttribute(\"slot\")||\"default\";(e[s]||(e[s]=[])).push(n),this.removeChild(n)}}_renderSlots(){const e=this._getSlots(),n=this._instance.type.__scopeId;for(let s=0;s<e.length;s++){const r=e[s],i=r.getAttribute(\"name\")||\"default\",o=this._slots[i],l=r.parentNode;if(o)for(const a of o){if(n&&a.nodeType===1){const c=n+\"-s\",u=document.createTreeWalker(a,1);a.setAttribute(c,\"\");let f;for(;f=u.nextNode();)f.setAttribute(c,\"\")}l.insertBefore(a,r)}else for(;r.firstChild;)l.insertBefore(r.firstChild,r);l.removeChild(r)}}_getSlots(){const e=[this];this._teleportTargets&&e.push(...this._teleportTargets);const n=new Set;for(const s of e){const r=s.querySelectorAll(\"slot\");for(let i=0;i<r.length;i++)n.add(r[i])}return Array.from(n)}_injectChildStyle(e){this._applyStyles(e.styles,e)}_beginPatch(){this._patching=!0,this._dirty=!1}_endPatch(){this._patching=!1,this._dirty&&this._instance&&this._update()}_removeChildStyle(e){}}function K0(t){const e=kt(),n=e&&e.ce;return n||null}function Ak(){const t=K0();return t&&t.shadowRoot}function Nk(t=\"$style\"){{const e=kt();if(!e)return ue;const n=e.type.__cssModules;if(!n)return ue;const s=n[t];return s||ue}}const q0=new WeakMap,J0=new WeakMap,ia=Symbol(\"_moveCb\"),Ap=Symbol(\"_enterCb\"),Ok=t=>(delete t.props.mode,t),Rk=Ok({name:\"TransitionGroup\",props:ae({},$0,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=kt(),s=fd();let r,i;return Cc(()=>{if(!r.length)return;const o=t.moveClass||`${t.name||\"v\"}-move`;if(!Lk(r[0].el,n.vnode.el,o)){r=[];return}r.forEach(_k),r.forEach(Dk);const l=r.filter(Pk);sf(n.vnode.el),l.forEach(a=>{const c=a.el,u=c.style;gn(c,o),u.transform=u.webkitTransform=u.transitionDuration=\"\";const f=c[ia]=d=>{d&&d.target!==c||(!d||d.propertyName.endsWith(\"transform\"))&&(c.removeEventListener(\"transitionend\",f),c[ia]=null,ps(c,o))};c.addEventListener(\"transitionend\",f)}),r=[]}),()=>{const o=de(t),l=H0(o);let a=o.tag||je;if(r=[],i)for(let c=0;c<i.length;c++){const u=i[c];u.el&&u.el instanceof Element&&(r.push(u),ts(u,ri(u,l,s,n)),q0.set(u,{left:u.el.offsetLeft,top:u.el.offsetTop}))}i=e.default?wc(e.default()):[];for(let c=0;c<i.length;c++){const u=i[c];u.key!=null&&ts(u,ri(u,l,s,n))}return Ie(a,null,i)}}}),Ik=Rk;function _k(t){const e=t.el;e[ia]&&e[ia](),e[Ap]&&e[Ap]()}function Dk(t){J0.set(t,{left:t.el.offsetLeft,top:t.el.offsetTop})}function Pk(t){const e=q0.get(t),n=J0.get(t),s=e.left-n.left,r=e.top-n.top;if(s||r){const i=t.el.style;return i.transform=i.webkitTransform=`translate(${s}px,${r}px)`,i.transitionDuration=\"0s\",t}}function Lk(t,e,n){const s=t.cloneNode(),r=t[oi];r&&r.forEach(l=>{l.split(/\\s+/).forEach(a=>a&&s.classList.remove(a))}),n.split(/\\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display=\"none\";const i=e.nodeType===1?e:e.parentNode;i.appendChild(s);const{hasTransform:o}=F0(s);return i.removeChild(s),o}const $s=t=>{const e=t.props[\"onUpdate:modelValue\"]||!1;return J(e)?n=>Gr(e,n):e};function Bk(t){t.target.composing=!0}function Np(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event(\"input\")))}const Qt=Symbol(\"_assign\");function Op(t,e,n){return e&&(t=t.trim()),n&&(t=fc(t)),t}const oa={created(t,{modifiers:{lazy:e,trim:n,number:s}},r){t[Qt]=$s(r);const i=s||r.props&&r.props.type===\"number\";jn(t,e?\"change\":\"input\",o=>{o.target.composing||t[Qt](Op(t.value,n,i))}),(n||i)&&jn(t,\"change\",()=>{t.value=Op(t.value,n,i)}),e||(jn(t,\"compositionstart\",Bk),jn(t,\"compositionend\",Np),jn(t,\"change\",Np))},mounted(t,{value:e}){t.value=e??\"\"},beforeUpdate(t,{value:e,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(t[Qt]=$s(o),t.composing)return;const l=(i||t.type===\"number\")&&!/^0\\d/.test(t.value)?fc(t.value):t.value,a=e??\"\";l!==a&&(document.activeElement===t&&t.type!==\"range\"&&(s&&e===n||r&&t.value.trim()===a)||(t.value=a))}},Td={deep:!0,created(t,e,n){t[Qt]=$s(n),jn(t,\"change\",()=>{const s=t._modelValue,r=li(t),i=t.checked,o=t[Qt];if(J(s)){const l=hc(s,r),a=l!==-1;if(i&&!a)o(s.concat(r));else if(!i&&a){const c=[...s];c.splice(l,1),o(c)}}else if(kr(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(Y0(t,i))})},mounted:Rp,beforeUpdate(t,e,n){t[Qt]=$s(n),Rp(t,e,n)}};function Rp(t,{value:e,oldValue:n},s){t._modelValue=e;let r;if(J(e))r=hc(e,s.props.value)>-1;else if(kr(e))r=e.has(s.props.value);else{if(e===n)return;r=Bs(e,Y0(t,!0))}t.checked!==r&&(t.checked=r)}const Ed={created(t,{value:e},n){t.checked=Bs(e,n.props.value),t[Qt]=$s(n),jn(t,\"change\",()=>{t[Qt](li(t))})},beforeUpdate(t,{value:e,oldValue:n},s){t[Qt]=$s(s),e!==n&&(t.checked=Bs(e,s.props.value))}},G0={deep:!0,created(t,{value:e,modifiers:{number:n}},s){const r=kr(e);jn(t,\"change\",()=>{const i=Array.prototype.filter.call(t.options,o=>o.selected).map(o=>n?fc(li(o)):li(o));t[Qt](t.multiple?r?new Set(i):i:i[0]),t._assigning=!0,vi(()=>{t._assigning=!1})}),t[Qt]=$s(s)},mounted(t,{value:e}){Ip(t,e)},beforeUpdate(t,e,n){t[Qt]=$s(n)},updated(t,{value:e}){t._assigning||Ip(t,e)}};function Ip(t,e){const n=t.multiple,s=J(e);if(!(n&&!s&&!kr(e))){for(let r=0,i=t.options.length;r<i;r++){const o=t.options[r],l=li(o);if(n)if(s){const a=typeof l;a===\"string\"||a===\"number\"?o.selected=e.some(c=>String(c)===String(l)):o.selected=hc(e,l)>-1}else o.selected=e.has(l);else if(Bs(li(o),e)){t.selectedIndex!==r&&(t.selectedIndex=r);return}}!n&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function li(t){return\"_value\"in t?t._value:t.value}function Y0(t,e){const n=e?\"_trueValue\":\"_falseValue\";return n in t?t[n]:e}const X0={created(t,e,n){ul(t,e,n,null,\"created\")},mounted(t,e,n){ul(t,e,n,null,\"mounted\")},beforeUpdate(t,e,n,s){ul(t,e,n,s,\"beforeUpdate\")},updated(t,e,n,s){ul(t,e,n,s,\"updated\")}};function Q0(t,e){switch(t){case\"SELECT\":return G0;case\"TEXTAREA\":return oa;default:switch(e){case\"checkbox\":return Td;case\"radio\":return Ed;default:return oa}}}function ul(t,e,n,s,r){const o=Q0(t.tagName,n.props&&n.props.type)[r];o&&o(t,e,n,s)}function $k(){oa.getSSRProps=({value:t})=>({value:t}),Ed.getSSRProps=({value:t},e)=>{if(e.props&&Bs(e.props.value,t))return{checked:!0}},Td.getSSRProps=({value:t},e)=>{if(J(t)){if(e.props&&hc(t,e.props.value)>-1)return{checked:!0}}else if(kr(t)){if(e.props&&t.has(e.props.value))return{checked:!0}}else if(t)return{checked:!0}},X0.getSSRProps=(t,e)=>{if(typeof e.type!=\"string\")return;const n=Q0(e.type.toUpperCase(),e.props&&e.props.type);if(n.getSSRProps)return n.getSSRProps(t,e)}}const Hk=[\"ctrl\",\"shift\",\"alt\",\"meta\"],Fk={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>\"button\"in t&&t.button!==0,middle:t=>\"button\"in t&&t.button!==1,right:t=>\"button\"in t&&t.button!==2,exact:(t,e)=>Hk.some(n=>t[`${n}Key`]&&!e.includes(n))},zk=(t,e)=>{const n=t._withMods||(t._withMods={}),s=e.join(\".\");return n[s]||(n[s]=((r,...i)=>{for(let o=0;o<e.length;o++){const l=Fk[e[o]];if(l&&l(r,e))return}return t(r,...i)}))},Vk={esc:\"escape\",space:\" \",up:\"arrow-up\",left:\"arrow-left\",right:\"arrow-right\",down:\"arrow-down\",delete:\"backspace\"},Wk=(t,e)=>{const n=t._withKeys||(t._withKeys={}),s=e.join(\".\");return n[s]||(n[s]=(r=>{if(!(\"key\"in r))return;const i=Ot(r.key);if(e.some(o=>o===i||Vk[o]===i))return t(r)}))},Z0=ae({patchProp:j0},L0);let Ji,_p=!1;function eb(){return Ji||(Ji=h0(Z0))}function tb(){return Ji=_p?Ji:p0(Z0),_p=!0,Ji}const la=((...t)=>{eb().render(...t)}),jk=((...t)=>{tb().hydrate(...t)}),of=((...t)=>{const e=eb().createApp(...t),{mount:n}=e;return e.mount=s=>{const r=rb(s);if(!r)return;const i=e._component;!ne(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent=\"\");const o=n(r,!1,sb(r));return r instanceof Element&&(r.removeAttribute(\"v-cloak\"),r.setAttribute(\"data-v-app\",\"\")),o},e}),nb=((...t)=>{const e=tb().createApp(...t),{mount:n}=e;return e.mount=s=>{const r=rb(s);if(r)return n(r,!0,sb(r))},e});function sb(t){if(t instanceof SVGElement)return\"svg\";if(typeof MathMLElement==\"function\"&&t instanceof MathMLElement)return\"mathml\"}function rb(t){return re(t)?document.querySelector(t):t}let Dp=!1;const Uk=()=>{Dp||(Dp=!0,$k(),hk())},Kk=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:Wy,BaseTransitionPropsValidators:dd,Comment:Be,DeprecationTypes:ik,EffectScope:nd,ErrorCodes:uC,ErrorTypeStrings:Qv,Fragment:je,KeepAlive:FC,ReactiveEffect:lo,Static:ir,Suspense:Iv,Teleport:CC,Text:Os,TrackOpTypes:sC,Transition:ck,TransitionGroup:Ik,TriggerOpTypes:rC,VueElement:Ec,assertNumber:cC,callWithAsyncErrorHandling:tn,callWithErrorHandling:Ci,camelize:Ae,capitalize:Tr,cloneVNode:Tn,compatUtils:rk,computed:I0,createApp:of,createBlock:ea,createCommentVNode:Vv,createElementBlock:$v,createElementVNode:Cd,createHydrationRenderer:p0,createPropsRestProxy:av,createRenderer:h0,createSSRApp:nb,createSlots:qC,createStaticVNode:zv,createTextVNode:vd,createVNode:Ie,customRef:ad,defineAsyncComponent:$C,defineComponent:Vo,defineCustomElement:U0,defineEmits:QC,defineExpose:ZC,defineModel:nv,defineOptions:ev,defineProps:XC,defineSSRCustomElement:Ek,defineSlots:tv,devtools:Zv,effect:Tx,effectScope:Cx,getCurrentInstance:kt,getCurrentScope:oy,getCurrentWatcher:iC,getTransitionRawChildren:wc,guardReactiveProps:k0,h:Uo,handleError:Er,hasInjectionContext:bC,hydrate:jk,hydrateOnIdle:IC,hydrateOnInteraction:LC,hydrateOnMediaQuery:PC,hydrateOnVisible:DC,initCustomFormatter:Gv,initDirectivesForSSR:Uk,inject:ji,isMemoSame:_0,isProxy:Fo,isReactive:Jn,isReadonly:kn,isRef:Ve,isRuntimeOnly:Kv,isShallow:It,isVNode:ns,markRaw:bc,mergeDefaults:ov,mergeModels:lv,mergeProps:T0,nextTick:vi,nodeOps:L0,normalizeClass:$o,normalizeProps:cx,normalizeStyle:Bo,onActivated:Uy,onBeforeMount:Jy,onBeforeUnmount:Ar,onBeforeUpdate:pd,onDeactivated:Ky,onErrorCaptured:Qy,onMounted:Mr,onRenderTracked:Xy,onRenderTriggered:Yy,onScopeDispose:vx,onServerPrefetch:Gy,onUnmounted:vc,onUpdated:Cc,onWatcherCleanup:Ty,openBlock:go,patchProp:j0,popScopeId:mC,provide:Ry,proxyRefs:ld,pushScopeId:pC,queuePostFlushCb:uo,reactive:Ho,readonly:Kl,ref:sr,registerRuntimeCompiler:N0,render:la,renderList:KC,renderSlot:JC,resolveComponent:WC,resolveDirective:UC,resolveDynamicComponent:jC,resolveFilter:sk,resolveTransitionHooks:ri,setBlockTracking:yo,setDevtoolsHook:ek,setTransitionHooks:ts,shallowReactive:Cy,shallowReadonly:Ux,shallowRef:od,ssrContextKey:Iy,ssrUtils:nk,stop:Ex,toDisplayString:ry,toHandlerKey:Jr,toHandlers:GC,toRaw:de,toRef:eC,toRefs:Xx,toValue:Jx,transformVNodeArgs:Hv,triggerRef:qx,unref:xi,useAttrs:iv,useCssModule:Nk,useCssVars:pk,useHost:K0,useId:kC,useModel:yv,useSSRContext:_y,useShadowRoot:Ak,useSlots:rv,useTemplateRef:TC,useTransitionState:fd,vModelCheckbox:Td,vModelDynamic:X0,vModelRadio:Ed,vModelSelect:G0,vModelText:oa,vShow:V0,version:D0,warn:Xv,watch:Xr,watchEffect:Dy,watchPostEffect:SC,watchSyncEffect:Py,withAsyncContext:cv,withCtx:ud,withDefaults:sv,withDirectives:yC,withKeys:Wk,withMemo:Yv,withModifiers:zk,withScopeId:gC},Symbol.toStringTag,{value:\"Module\"}));const bo=Symbol(\"\"),Gi=Symbol(\"\"),Md=Symbol(\"\"),aa=Symbol(\"\"),ib=Symbol(\"\"),mr=Symbol(\"\"),ob=Symbol(\"\"),lb=Symbol(\"\"),Ad=Symbol(\"\"),Nd=Symbol(\"\"),Ko=Symbol(\"\"),Od=Symbol(\"\"),ab=Symbol(\"\"),Rd=Symbol(\"\"),Id=Symbol(\"\"),_d=Symbol(\"\"),Dd=Symbol(\"\"),Pd=Symbol(\"\"),Ld=Symbol(\"\"),cb=Symbol(\"\"),ub=Symbol(\"\"),Mc=Symbol(\"\"),ca=Symbol(\"\"),Bd=Symbol(\"\"),$d=Symbol(\"\"),So=Symbol(\"\"),qo=Symbol(\"\"),Hd=Symbol(\"\"),lf=Symbol(\"\"),qk=Symbol(\"\"),af=Symbol(\"\"),ua=Symbol(\"\"),Jk=Symbol(\"\"),Gk=Symbol(\"\"),Fd=Symbol(\"\"),Yk=Symbol(\"\"),Xk=Symbol(\"\"),zd=Symbol(\"\"),fb=Symbol(\"\"),ai={[bo]:\"Fragment\",[Gi]:\"Teleport\",[Md]:\"Suspense\",[aa]:\"KeepAlive\",[ib]:\"BaseTransition\",[mr]:\"openBlock\",[ob]:\"createBlock\",[lb]:\"createElementBlock\",[Ad]:\"createVNode\",[Nd]:\"createElementVNode\",[Ko]:\"createCommentVNode\",[Od]:\"createTextVNode\",[ab]:\"createStaticVNode\",[Rd]:\"resolveComponent\",[Id]:\"resolveDynamicComponent\",[_d]:\"resolveDirective\",[Dd]:\"resolveFilter\",[Pd]:\"withDirectives\",[Ld]:\"renderList\",[cb]:\"renderSlot\",[ub]:\"createSlots\",[Mc]:\"toDisplayString\",[ca]:\"mergeProps\",[Bd]:\"normalizeClass\",[$d]:\"normalizeStyle\",[So]:\"normalizeProps\",[qo]:\"guardReactiveProps\",[Hd]:\"toHandlers\",[lf]:\"camelize\",[qk]:\"capitalize\",[af]:\"toHandlerKey\",[ua]:\"setBlockTracking\",[Jk]:\"pushScopeId\",[Gk]:\"popScopeId\",[Fd]:\"withCtx\",[Yk]:\"unref\",[Xk]:\"isRef\",[zd]:\"withMemo\",[fb]:\"isMemoSame\"};function Qk(t){Object.getOwnPropertySymbols(t).forEach(e=>{ai[e]=t[e]})}const jt={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:\"\"};function Zk(t,e=\"\"){return{type:0,source:e,children:t,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:jt}}function wo(t,e,n,s,r,i,o,l=!1,a=!1,c=!1,u=jt){return t&&(l?(t.helper(mr),t.helper(fi(t.inSSR,c))):t.helper(ui(t.inSSR,c)),o&&t.helper(Pd)),{type:13,tag:e,props:n,children:s,patchFlag:r,dynamicProps:i,directives:o,isBlock:l,disableTracking:a,isComponent:c,loc:u}}function or(t,e=jt){return{type:17,loc:e,elements:t}}function Xt(t,e=jt){return{type:15,loc:e,properties:t}}function Fe(t,e){return{type:16,loc:jt,key:re(t)?oe(t,!0):t,value:e}}function oe(t,e=!1,n=jt,s=0){return{type:4,loc:n,content:t,isStatic:e,constType:e?3:s}}function cn(t,e=jt){return{type:8,loc:e,children:t}}function Ue(t,e=[],n=jt){return{type:14,loc:n,callee:t,arguments:e}}function ci(t,e=void 0,n=!1,s=!1,r=jt){return{type:18,params:t,returns:e,newline:n,isSlot:s,loc:r}}function cf(t,e,n,s=!0){return{type:19,test:t,consequent:e,alternate:n,newline:s,loc:jt}}function eT(t,e,n=!1,s=!1){return{type:20,index:t,value:e,needPauseTracking:n,inVOnce:s,needArraySpread:!1,loc:jt}}function tT(t){return{type:21,body:t,loc:jt}}function ui(t,e){return t||e?Ad:Nd}function fi(t,e){return t||e?ob:lb}function Vd(t,{helper:e,removeHelper:n,inSSR:s}){t.isBlock||(t.isBlock=!0,n(ui(s,t.isComponent)),e(mr),e(fi(s,t.isComponent)))}const Pp=new Uint8Array([123,123]),Lp=new Uint8Array([125,125]);function Bp(t){return t>=97&&t<=122||t>=65&&t<=90}function Bt(t){return t===32||t===10||t===9||t===12||t===13}function ds(t){return t===47||t===62||Bt(t)}function fa(t){const e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}const ct={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101]),TextareaEnd:new Uint8Array([60,47,116,101,120,116,97,114,101,97])};class nT{constructor(e,n){this.stack=e,this.cbs=n,this.state=1,this.buffer=\"\",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=1,this.inRCDATA=!1,this.inXML=!1,this.inVPre=!1,this.newlines=[],this.mode=0,this.delimiterOpen=Pp,this.delimiterClose=Lp,this.delimiterIndex=-1,this.currentSequence=void 0,this.sequenceIndex=0}get inSFCRoot(){return this.mode===2&&this.stack.length===0}reset(){this.state=1,this.mode=0,this.buffer=\"\",this.sectionStart=0,this.index=0,this.baseState=1,this.inRCDATA=!1,this.currentSequence=void 0,this.newlines.length=0,this.delimiterOpen=Pp,this.delimiterClose=Lp}getPos(e){let n=1,s=e+1;const r=this.newlines.length;let i=-1;if(r>100){let o=-1,l=r;for(;o+1<l;){const a=o+l>>>1;this.newlines[a]<e?o=a:l=a}i=o}else for(let o=r-1;o>=0;o--)if(e>this.newlines[o]){i=o;break}return i>=0&&(n=i+2,s=e-this.newlines[i]),{column:s,line:n,offset:e}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(e){e===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&e===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(e))}stateInterpolationOpen(e){if(e===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const n=this.index+1-this.delimiterOpen.length;n>this.sectionStart&&this.cbs.ontext(this.sectionStart,n),this.state=3,this.sectionStart=n}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(e)):(this.state=1,this.stateText(e))}stateInterpolation(e){e===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(e))}stateInterpolationClose(e){e===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(e))}stateSpecialStartSequence(e){const n=this.sequenceIndex===this.currentSequence.length;if(!(n?ds(e):(e|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!n){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(e)}stateInRCDATA(e){if(this.sequenceIndex===this.currentSequence.length){if(e===62||Bt(e)){const n=this.index-this.currentSequence.length;if(this.sectionStart<n){const s=this.index;this.index=n,this.cbs.ontext(this.sectionStart,n),this.index=s}this.sectionStart=n+2,this.stateInClosingTagName(e),this.inRCDATA=!1;return}this.sequenceIndex=0}(e|32)===this.currentSequence[this.sequenceIndex]?this.sequenceIndex+=1:this.sequenceIndex===0?this.currentSequence===ct.TitleEnd||this.currentSequence===ct.TextareaEnd&&!this.inSFCRoot?!this.inVPre&&e===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(e)):this.fastForwardTo(60)&&(this.sequenceIndex=1):this.sequenceIndex=+(e===60)}stateCDATASequence(e){e===ct.Cdata[this.sequenceIndex]?++this.sequenceIndex===ct.Cdata.length&&(this.state=28,this.currentSequence=ct.CdataEnd,this.sequenceIndex=0,this.sectionStart=this.index+1):(this.sequenceIndex=0,this.state=23,this.stateInDeclaration(e))}fastForwardTo(e){for(;++this.index<this.buffer.length;){const n=this.buffer.charCodeAt(this.index);if(n===10&&this.newlines.push(this.index),n===e)return!0}return this.index=this.buffer.length-1,!1}stateInCommentLike(e){e===this.currentSequence[this.sequenceIndex]?++this.sequenceIndex===this.currentSequence.length&&(this.currentSequence===ct.CdataEnd?this.cbs.oncdata(this.sectionStart,this.index-2):this.cbs.oncomment(this.sectionStart,this.index-2),this.sequenceIndex=0,this.sectionStart=this.index+1,this.state=1):this.sequenceIndex===0?this.fastForwardTo(this.currentSequence[0])&&(this.sequenceIndex=1):e!==this.currentSequence[this.sequenceIndex-1]&&(this.sequenceIndex=0)}startSpecial(e,n){this.enterRCDATA(e,n),this.state=31}enterRCDATA(e,n){this.inRCDATA=!0,this.currentSequence=e,this.sequenceIndex=n}stateBeforeTagName(e){e===33?(this.state=22,this.sectionStart=this.index+1):e===63?(this.state=24,this.sectionStart=this.index+1):Bp(e)?(this.sectionStart=this.index,this.mode===0?this.state=6:this.inSFCRoot?this.state=34:this.inXML?this.state=6:e===116?this.state=30:this.state=e===115?29:6):e===47?this.state=8:(this.state=1,this.stateText(e))}stateInTagName(e){ds(e)&&this.handleTagName(e)}stateInSFCRootTagName(e){if(ds(e)){const n=this.buffer.slice(this.sectionStart,this.index);n!==\"template\"&&this.enterRCDATA(fa(\"</\"+n),0),this.handleTagName(e)}}handleTagName(e){this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=11,this.stateBeforeAttrName(e)}stateBeforeClosingTagName(e){Bt(e)||(e===62?(this.state=1,this.sectionStart=this.index+1):(this.state=Bp(e)?9:27,this.sectionStart=this.index))}stateInClosingTagName(e){(e===62||Bt(e))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=10,this.stateAfterClosingTagName(e))}stateAfterClosingTagName(e){e===62&&(this.state=1,this.sectionStart=this.index+1)}stateBeforeAttrName(e){e===62?(this.cbs.onopentagend(this.index),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):e===47?this.state=7:e===60&&this.peek()===47?(this.cbs.onopentagend(this.index),this.state=5,this.sectionStart=this.index):Bt(e)||this.handleAttrStart(e)}handleAttrStart(e){e===118&&this.peek()===45?(this.state=13,this.sectionStart=this.index):e===46||e===58||e===64||e===35?(this.cbs.ondirname(this.index,this.index+1),this.state=14,this.sectionStart=this.index+1):(this.state=12,this.sectionStart=this.index)}stateInSelfClosingTag(e){e===62?(this.cbs.onselfclosingtag(this.index),this.state=1,this.sectionStart=this.index+1,this.inRCDATA=!1):Bt(e)||(this.state=11,this.stateBeforeAttrName(e))}stateInAttrName(e){(e===61||ds(e))&&(this.cbs.onattribname(this.sectionStart,this.index),this.handleAttrNameEnd(e))}stateInDirName(e){e===61||ds(e)?(this.cbs.ondirname(this.sectionStart,this.index),this.handleAttrNameEnd(e)):e===58?(this.cbs.ondirname(this.sectionStart,this.index),this.state=14,this.sectionStart=this.index+1):e===46&&(this.cbs.ondirname(this.sectionStart,this.index),this.state=16,this.sectionStart=this.index+1)}stateInDirArg(e){e===61||ds(e)?(this.cbs.ondirarg(this.sectionStart,this.index),this.handleAttrNameEnd(e)):e===91?this.state=15:e===46&&(this.cbs.ondirarg(this.sectionStart,this.index),this.state=16,this.sectionStart=this.index+1)}stateInDynamicDirArg(e){e===93?this.state=14:(e===61||ds(e))&&(this.cbs.ondirarg(this.sectionStart,this.index+1),this.handleAttrNameEnd(e))}stateInDirModifier(e){e===61||ds(e)?(this.cbs.ondirmodifier(this.sectionStart,this.index),this.handleAttrNameEnd(e)):e===46&&(this.cbs.ondirmodifier(this.sectionStart,this.index),this.sectionStart=this.index+1)}handleAttrNameEnd(e){this.sectionStart=this.index,this.state=17,this.cbs.onattribnameend(this.index),this.stateAfterAttrName(e)}stateAfterAttrName(e){e===61?this.state=18:e===47||e===62?(this.cbs.onattribend(0,this.sectionStart),this.sectionStart=-1,this.state=11,this.stateBeforeAttrName(e)):Bt(e)||(this.cbs.onattribend(0,this.sectionStart),this.handleAttrStart(e))}stateBeforeAttrValue(e){e===34?(this.state=19,this.sectionStart=this.index+1):e===39?(this.state=20,this.sectionStart=this.index+1):Bt(e)||(this.sectionStart=this.index,this.state=21,this.stateInAttrValueNoQuotes(e))}handleInAttrValue(e,n){(e===n||this.fastForwardTo(n))&&(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(n===34?3:2,this.index+1),this.state=11)}stateInAttrValueDoubleQuotes(e){this.handleInAttrValue(e,34)}stateInAttrValueSingleQuotes(e){this.handleInAttrValue(e,39)}stateInAttrValueNoQuotes(e){Bt(e)||e===62?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(1,this.index),this.state=11,this.stateBeforeAttrName(e)):(e===39||e===60||e===61||e===96)&&this.cbs.onerr(18,this.index)}stateBeforeDeclaration(e){e===91?(this.state=26,this.sequenceIndex=0):this.state=e===45?25:23}stateInDeclaration(e){(e===62||this.fastForwardTo(62))&&(this.state=1,this.sectionStart=this.index+1)}stateInProcessingInstruction(e){(e===62||this.fastForwardTo(62))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=1,this.sectionStart=this.index+1)}stateBeforeComment(e){e===45?(this.state=28,this.currentSequence=ct.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=23}stateInSpecialComment(e){(e===62||this.fastForwardTo(62))&&(this.cbs.oncomment(this.sectionStart,this.index),this.state=1,this.sectionStart=this.index+1)}stateBeforeSpecialS(e){e===ct.ScriptEnd[3]?this.startSpecial(ct.ScriptEnd,4):e===ct.StyleEnd[3]?this.startSpecial(ct.StyleEnd,4):(this.state=6,this.stateInTagName(e))}stateBeforeSpecialT(e){e===ct.TitleEnd[3]?this.startSpecial(ct.TitleEnd,4):e===ct.TextareaEnd[3]?this.startSpecial(ct.TextareaEnd,4):(this.state=6,this.stateInTagName(e))}startEntity(){}stateInEntity(){}parse(e){for(this.buffer=e;this.index<this.buffer.length;){const n=this.buffer.charCodeAt(this.index);switch(n===10&&this.state!==33&&this.newlines.push(this.index),this.state){case 1:{this.stateText(n);break}case 2:{this.stateInterpolationOpen(n);break}case 3:{this.stateInterpolation(n);break}case 4:{this.stateInterpolationClose(n);break}case 31:{this.stateSpecialStartSequence(n);break}case 32:{this.stateInRCDATA(n);break}case 26:{this.stateCDATASequence(n);break}case 19:{this.stateInAttrValueDoubleQuotes(n);break}case 12:{this.stateInAttrName(n);break}case 13:{this.stateInDirName(n);break}case 14:{this.stateInDirArg(n);break}case 15:{this.stateInDynamicDirArg(n);break}case 16:{this.stateInDirModifier(n);break}case 28:{this.stateInCommentLike(n);break}case 27:{this.stateInSpecialComment(n);break}case 11:{this.stateBeforeAttrName(n);break}case 6:{this.stateInTagName(n);break}case 34:{this.stateInSFCRootTagName(n);break}case 9:{this.stateInClosingTagName(n);break}case 5:{this.stateBeforeTagName(n);break}case 17:{this.stateAfterAttrName(n);break}case 20:{this.stateInAttrValueSingleQuotes(n);break}case 18:{this.stateBeforeAttrValue(n);break}case 8:{this.stateBeforeClosingTagName(n);break}case 10:{this.stateAfterClosingTagName(n);break}case 29:{this.stateBeforeSpecialS(n);break}case 30:{this.stateBeforeSpecialT(n);break}case 21:{this.stateInAttrValueNoQuotes(n);break}case 7:{this.stateInSelfClosingTag(n);break}case 23:{this.stateInDeclaration(n);break}case 22:{this.stateBeforeDeclaration(n);break}case 25:{this.stateBeforeComment(n);break}case 24:{this.stateInProcessingInstruction(n);break}case 33:{this.stateInEntity();break}}this.index++}this.cleanup(),this.finish()}cleanup(){this.sectionStart!==this.index&&(this.state===1||this.state===32&&this.sequenceIndex===0?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):(this.state===19||this.state===20||this.state===21)&&(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}finish(){this.handleTrailingData(),this.cbs.onend()}handleTrailingData(){const e=this.buffer.length;this.sectionStart>=e||(this.state===28?this.currentSequence===ct.CdataEnd?this.cbs.oncdata(this.sectionStart,e):this.cbs.oncomment(this.sectionStart,e):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,e))}emitCodePoint(e,n){}}function $p(t,{compatConfig:e}){const n=e&&e[t];return t===\"MODE\"?n||3:n}function lr(t,e){const n=$p(\"MODE\",e),s=$p(t,e);return n===3?s===!0:s!==!1}function xo(t,e,n,...s){return lr(t,e)}function Wd(t){throw t}function db(t){}function Me(t,e,n,s){const r=`https://vuejs.org/error-reference/#compiler-${t}`,i=new SyntaxError(String(r));return i.code=t,i.loc=e,i}const Rt=t=>t.type===4&&t.isStatic;function hb(t){switch(t){case\"Teleport\":case\"teleport\":return Gi;case\"Suspense\":case\"suspense\":return Md;case\"KeepAlive\":case\"keep-alive\":return aa;case\"BaseTransition\":case\"base-transition\":return ib}}const sT=/^$|^\\d|[^\\$\\w\\xA0-\\uFFFF]/,jd=t=>!sT.test(t),pb=/[A-Za-z_$\\xA0-\\uFFFF]/,rT=/[\\.\\?\\w$\\xA0-\\uFFFF]/,iT=/\\s+[.[]\\s*|\\s*[.[]\\s+/g,mb=t=>t.type===4?t.content:t.loc.source,oT=t=>{const e=mb(t).trim().replace(iT,l=>l.trim());let n=0,s=[],r=0,i=0,o=null;for(let l=0;l<e.length;l++){const a=e.charAt(l);switch(n){case 0:if(a===\"[\")s.push(n),n=1,r++;else if(a===\"(\")s.push(n),n=2,i++;else if(!(l===0?pb:rT).test(a))return!1;break;case 1:a===\"'\"||a==='\"'||a===\"`\"?(s.push(n),n=3,o=a):a===\"[\"?r++:a===\"]\"&&(--r||(n=s.pop()));break;case 2:if(a===\"'\"||a==='\"'||a===\"`\")s.push(n),n=3,o=a;else if(a===\"(\")i++;else if(a===\")\"){if(l===e.length-1)return!1;--i||(n=s.pop())}break;case 3:a===o&&(n=s.pop(),o=null);break}}return!r&&!i},gb=oT,lT=/^\\s*(?:async\\s*)?(?:\\([^)]*?\\)|[\\w$_]+)\\s*(?::[^=]+)?=>|^\\s*(?:async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/,aT=t=>lT.test(mb(t)),cT=aT;function Gt(t,e,n=!1){for(let s=0;s<t.props.length;s++){const r=t.props[s];if(r.type===7&&(n||r.exp)&&(re(e)?r.name===e:e.test(r.name)))return r}}function Ac(t,e,n=!1,s=!1){for(let r=0;r<t.props.length;r++){const i=t.props[r];if(i.type===6){if(n)continue;if(i.name===e&&(i.value||s))return i}else if(i.name===\"bind\"&&(i.exp||s)&&Xs(i.arg,e))return i}}function Xs(t,e){return!!(t&&Rt(t)&&t.content===e)}function uT(t){return t.props.some(e=>e.type===7&&e.name===\"bind\"&&(!e.arg||e.arg.type!==4||!e.arg.isStatic))}function fu(t){return t.type===5||t.type===2}function Hp(t){return t.type===7&&t.name===\"pre\"}function fT(t){return t.type===7&&t.name===\"slot\"}function da(t){return t.type===1&&t.tagType===3}function ha(t){return t.type===1&&t.tagType===2}const dT=new Set([So,qo]);function yb(t,e=[]){if(t&&!re(t)&&t.type===14){const n=t.callee;if(!re(n)&&dT.has(n))return yb(t.arguments[0],e.concat(t))}return[t,e]}function pa(t,e,n){let s,r=t.type===13?t.props:t.arguments[2],i=[],o;if(r&&!re(r)&&r.type===14){const l=yb(r);r=l[0],i=l[1],o=i[i.length-1]}if(r==null||re(r))s=Xt([e]);else if(r.type===14){const l=r.arguments[0];!re(l)&&l.type===15?Fp(e,l)||l.properties.unshift(e):r.callee===Hd?s=Ue(n.helper(ca),[Xt([e]),r]):r.arguments.unshift(Xt([e])),!s&&(s=r)}else r.type===15?(Fp(e,r)||r.properties.unshift(e),s=r):(s=Ue(n.helper(ca),[Xt([e]),r]),o&&o.callee===qo&&(o=i[i.length-2]));t.type===13?o?o.arguments[0]=s:t.props=s:o?o.arguments[0]=s:t.arguments[2]=s}function Fp(t,e){let n=!1;if(t.key.type===4){const s=t.key.content;n=e.properties.some(r=>r.key.type===4&&r.key.content===s)}return n}function Co(t,e){return`_${e}_${t.replace(/[^\\w]/g,(n,s)=>n===\"-\"?\"_\":t.charCodeAt(s).toString())}`}function hT(t){return t.type===14&&t.callee===zd?t.arguments[1].returns:t}const pT=/([\\s\\S]*?)\\s+(?:in|of)\\s+(\\S[\\s\\S]*)/;function bb(t){for(let e=0;e<t.length;e++)if(!Bt(t.charCodeAt(e)))return!1;return!0}function Ud(t){return t.type===2&&bb(t.content)||t.type===12&&Ud(t.content)}function Sb(t){return t.type===3||Ud(t)}const wb={parseMode:\"base\",ns:0,delimiters:[\"{{\",\"}}\"],getNamespace:()=>0,isVoidTag:Wr,isPreTag:Wr,isIgnoreNewlineTag:Wr,isCustomElement:Wr,onError:Wd,onWarn:db,comments:!1,prefixIdentifiers:!1};let me=wb,vo=null,Yn=\"\",dt=null,ce=null,Et=\"\",Ln=-1,Gs=-1,Kd=0,ws=!1,uf=null;const Oe=[],De=new nT(Oe,{onerr:In,ontext(t,e){fl(Ze(t,e),t,e)},ontextentity(t,e,n){fl(t,e,n)},oninterpolation(t,e){if(ws)return fl(Ze(t,e),t,e);let n=t+De.delimiterOpen.length,s=e-De.delimiterClose.length;for(;Bt(Yn.charCodeAt(n));)n++;for(;Bt(Yn.charCodeAt(s-1));)s--;let r=Ze(n,s);r.includes(\"&\")&&(r=me.decodeEntities(r,!1)),ff({type:5,content:_l(r,!1,Le(n,s)),loc:Le(t,e)})},onopentagname(t,e){const n=Ze(t,e);dt={type:1,tag:n,ns:me.getNamespace(n,Oe[0],me.ns),tagType:0,props:[],children:[],loc:Le(t-1,e),codegenNode:void 0}},onopentagend(t){Vp(t)},onclosetag(t,e){const n=Ze(t,e);if(!me.isVoidTag(n)){let s=!1;for(let r=0;r<Oe.length;r++)if(Oe[r].tag.toLowerCase()===n.toLowerCase()){s=!0,r>0&&In(24,Oe[0].loc.start.offset);for(let o=0;o<=r;o++){const l=Oe.shift();Il(l,e,o<r)}break}s||In(23,xb(t,60))}},onselfclosingtag(t){const e=dt.tag;dt.isSelfClosing=!0,Vp(t),Oe[0]&&Oe[0].tag===e&&Il(Oe.shift(),t)},onattribname(t,e){ce={type:6,name:Ze(t,e),nameLoc:Le(t,e),value:void 0,loc:Le(t)}},ondirname(t,e){const n=Ze(t,e),s=n===\".\"||n===\":\"?\"bind\":n===\"@\"?\"on\":n===\"#\"?\"slot\":n.slice(2);if(!ws&&s===\"\"&&In(26,t),ws||s===\"\")ce={type:6,name:n,nameLoc:Le(t,e),value:void 0,loc:Le(t)};else if(ce={type:7,name:s,rawName:n,exp:void 0,arg:void 0,modifiers:n===\".\"?[oe(\"prop\")]:[],loc:Le(t)},s===\"pre\"){ws=De.inVPre=!0,uf=dt;const r=dt.props;for(let i=0;i<r.length;i++)r[i].type===7&&(r[i]=kT(r[i]))}},ondirarg(t,e){if(t===e)return;const n=Ze(t,e);if(ws&&!Hp(ce))ce.name+=n,Qs(ce.nameLoc,e);else{const s=n[0]!==\"[\";ce.arg=_l(s?n:n.slice(1,-1),s,Le(t,e),s?3:0)}},ondirmodifier(t,e){const n=Ze(t,e);if(ws&&!Hp(ce))ce.name+=\".\"+n,Qs(ce.nameLoc,e);else if(ce.name===\"slot\"){const s=ce.arg;s&&(s.content+=\".\"+n,Qs(s.loc,e))}else{const s=oe(n,!0,Le(t,e));ce.modifiers.push(s)}},onattribdata(t,e){Et+=Ze(t,e),Ln<0&&(Ln=t),Gs=e},onattribentity(t,e,n){Et+=t,Ln<0&&(Ln=e),Gs=n},onattribnameend(t){const e=ce.loc.start.offset,n=Ze(e,t);ce.type===7&&(ce.rawName=n),dt.props.some(s=>(s.type===7?s.rawName:s.name)===n)&&In(2,e)},onattribend(t,e){if(dt&&ce){if(Qs(ce.loc,e),t!==0)if(Et.includes(\"&\")&&(Et=me.decodeEntities(Et,!0)),ce.type===6)ce.name===\"class\"&&(Et=vb(Et).trim()),t===1&&!Et&&In(13,e),ce.value={type:2,content:Et,loc:t===1?Le(Ln,Gs):Le(Ln-1,Gs+1)},De.inSFCRoot&&dt.tag===\"template\"&&ce.name===\"lang\"&&Et&&Et!==\"html\"&&De.enterRCDATA(fa(\"</template\"),0);else{let n=0;ce.exp=_l(Et,!1,Le(Ln,Gs),0,n),ce.name===\"for\"&&(ce.forParseResult=gT(ce.exp));let s=-1;ce.name===\"bind\"&&(s=ce.modifiers.findIndex(r=>r.content===\"sync\"))>-1&&xo(\"COMPILER_V_BIND_SYNC\",me,ce.loc,ce.arg.loc.source)&&(ce.name=\"model\",ce.modifiers.splice(s,1))}(ce.type!==7||ce.name!==\"pre\")&&dt.props.push(ce)}Et=\"\",Ln=Gs=-1},oncomment(t,e){me.comments&&ff({type:3,content:Ze(t,e),loc:Le(t-4,e+3)})},onend(){const t=Yn.length;for(let e=0;e<Oe.length;e++)Il(Oe[e],t-1),In(24,Oe[e].loc.start.offset)},oncdata(t,e){Oe[0].ns!==0?fl(Ze(t,e),t,e):In(1,t-9)},onprocessinginstruction(t){(Oe[0]?Oe[0].ns:me.ns)===0&&In(21,t-1)}}),zp=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,mT=/^\\(|\\)$/g;function gT(t){const e=t.loc,n=t.content,s=n.match(pT);if(!s)return;const[,r,i]=s,o=(f,d,h=!1)=>{const p=e.start.offset+d,m=p+f.length;return _l(f,!1,Le(p,m),0,h?1:0)},l={source:o(i.trim(),n.indexOf(i,r.length)),value:void 0,key:void 0,index:void 0,finalized:!1};let a=r.trim().replace(mT,\"\").trim();const c=r.indexOf(a),u=a.match(zp);if(u){a=a.replace(zp,\"\").trim();const f=u[1].trim();let d;if(f&&(d=n.indexOf(f,c+a.length),l.key=o(f,d,!0)),u[2]){const h=u[2].trim();h&&(l.index=o(h,n.indexOf(h,l.key?d+f.length:c+a.length),!0))}}return a&&(l.value=o(a,c,!0)),l}function Ze(t,e){return Yn.slice(t,e)}function Vp(t){De.inSFCRoot&&(dt.innerLoc=Le(t+1,t+1)),ff(dt);const{tag:e,ns:n}=dt;n===0&&me.isPreTag(e)&&Kd++,me.isVoidTag(e)?Il(dt,t):(Oe.unshift(dt),(n===1||n===2)&&(De.inXML=!0)),dt=null}function fl(t,e,n){{const i=Oe[0]&&Oe[0].tag;i!==\"script\"&&i!==\"style\"&&t.includes(\"&\")&&(t=me.decodeEntities(t,!1))}const s=Oe[0]||vo,r=s.children[s.children.length-1];r&&r.type===2?(r.content+=t,Qs(r.loc,n)):s.children.push({type:2,content:t,loc:Le(e,n)})}function Il(t,e,n=!1){n?Qs(t.loc,xb(e,60)):Qs(t.loc,yT(e,62)+1),De.inSFCRoot&&(t.children.length?t.innerLoc.end=ae({},t.children[t.children.length-1].loc.end):t.innerLoc.end=ae({},t.innerLoc.start),t.innerLoc.source=Ze(t.innerLoc.start.offset,t.innerLoc.end.offset));const{tag:s,ns:r,children:i}=t;if(ws||(s===\"slot\"?t.tagType=2:Wp(t)?t.tagType=3:ST(t)&&(t.tagType=1)),De.inRCDATA||(t.children=Cb(i)),r===0&&me.isIgnoreNewlineTag(s)){const o=i[0];o&&o.type===2&&(o.content=o.content.replace(/^\\r?\\n/,\"\"))}r===0&&me.isPreTag(s)&&Kd--,uf===t&&(ws=De.inVPre=!1,uf=null),De.inXML&&(Oe[0]?Oe[0].ns:me.ns)===0&&(De.inXML=!1);{const o=t.props;if(!De.inSFCRoot&&lr(\"COMPILER_NATIVE_TEMPLATE\",me)&&t.tag===\"template\"&&!Wp(t)){const a=Oe[0]||vo,c=a.children.indexOf(t);a.children.splice(c,1,...t.children)}const l=o.find(a=>a.type===6&&a.name===\"inline-template\");l&&xo(\"COMPILER_INLINE_TEMPLATE\",me,l.loc)&&t.children.length&&(l.value={type:2,content:Ze(t.children[0].loc.start.offset,t.children[t.children.length-1].loc.end.offset),loc:l.loc})}}function yT(t,e){let n=t;for(;Yn.charCodeAt(n)!==e&&n<Yn.length-1;)n++;return n}function xb(t,e){let n=t;for(;Yn.charCodeAt(n)!==e&&n>=0;)n--;return n}const bT=new Set([\"if\",\"else\",\"else-if\",\"for\",\"slot\"]);function Wp({tag:t,props:e}){if(t===\"template\"){for(let n=0;n<e.length;n++)if(e[n].type===7&&bT.has(e[n].name))return!0}return!1}function ST({tag:t,props:e}){if(me.isCustomElement(t))return!1;if(t===\"component\"||wT(t.charCodeAt(0))||hb(t)||me.isBuiltInComponent&&me.isBuiltInComponent(t)||me.isNativeTag&&!me.isNativeTag(t))return!0;for(let n=0;n<e.length;n++){const s=e[n];if(s.type===6){if(s.name===\"is\"&&s.value){if(s.value.content.startsWith(\"vue:\"))return!0;if(xo(\"COMPILER_IS_ON_ELEMENT\",me,s.loc))return!0}}else if(s.name===\"bind\"&&Xs(s.arg,\"is\")&&xo(\"COMPILER_IS_ON_ELEMENT\",me,s.loc))return!0}return!1}function wT(t){return t>64&&t<91}const xT=/\\r\\n/g;function Cb(t){const e=me.whitespace!==\"preserve\";let n=!1;for(let s=0;s<t.length;s++){const r=t[s];if(r.type===2)if(Kd)r.content=r.content.replace(xT,`\n`);else if(bb(r.content)){const i=t[s-1]&&t[s-1].type,o=t[s+1]&&t[s+1].type;!i||!o||e&&(i===3&&(o===3||o===1)||i===1&&(o===3||o===1&&CT(r.content)))?(n=!0,t[s]=null):r.content=\" \"}else e&&(r.content=vb(r.content))}return n?t.filter(Boolean):t}function CT(t){for(let e=0;e<t.length;e++){const n=t.charCodeAt(e);if(n===10||n===13)return!0}return!1}function vb(t){let e=\"\",n=!1;for(let s=0;s<t.length;s++)Bt(t.charCodeAt(s))?n||(e+=\" \",n=!0):(e+=t[s],n=!1);return e}function ff(t){(Oe[0]||vo).children.push(t)}function Le(t,e){return{start:De.getPos(t),end:e==null?e:De.getPos(e),source:e==null?e:Ze(t,e)}}function vT(t){return Le(t.start.offset,t.end.offset)}function Qs(t,e){t.end=De.getPos(e),t.source=Ze(t.start.offset,e)}function kT(t){const e={type:6,name:t.rawName,nameLoc:Le(t.loc.start.offset,t.loc.start.offset+t.rawName.length),value:void 0,loc:t.loc};if(t.exp){const n=t.exp.loc;n.end.offset<t.loc.end.offset&&(n.start.offset--,n.start.column--,n.end.offset++,n.end.column++),e.value={type:2,content:t.exp.content,loc:n}}return e}function _l(t,e=!1,n,s=0,r=0){return oe(t,e,n,s)}function In(t,e,n){me.onError(Me(t,Le(e,e)))}function TT(){De.reset(),dt=null,ce=null,Et=\"\",Ln=-1,Gs=-1,Oe.length=0}function ET(t,e){if(TT(),Yn=t,me=ae({},wb),e){let r;for(r in e)e[r]!=null&&(me[r]=e[r])}De.mode=me.parseMode===\"html\"?1:me.parseMode===\"sfc\"?2:0,De.inXML=me.ns===1||me.ns===2;const n=e&&e.delimiters;n&&(De.delimiterOpen=fa(n[0]),De.delimiterClose=fa(n[1]));const s=vo=Zk([],t);return De.parse(Yn),s.loc=Le(0,t.length),s.children=Cb(s.children),vo=null,s}function MT(t,e){Dl(t,void 0,e,!!kb(t))}function kb(t){const e=t.children.filter(n=>n.type!==3);return e.length===1&&e[0].type===1&&!ha(e[0])?e[0]:null}function Dl(t,e,n,s=!1,r=!1){const{children:i}=t,o=[];for(let u=0;u<i.length;u++){const f=i[u];if(f.type===1&&f.tagType===0){const d=s?0:Ft(f,n);if(d>0){if(d>=2){f.codegenNode.patchFlag=-1,o.push(f);continue}}else{const h=f.codegenNode;if(h.type===13){const p=h.patchFlag;if((p===void 0||p===512||p===1)&&Eb(f,n)>=2){const m=Mb(f);m&&(h.props=n.hoist(m))}h.dynamicProps&&(h.dynamicProps=n.hoist(h.dynamicProps))}}}else if(f.type===12&&(s?0:Ft(f,n))>=2){f.codegenNode.type===14&&f.codegenNode.arguments.length>0&&f.codegenNode.arguments.push(\"-1\"),o.push(f);continue}if(f.type===1){const d=f.tagType===1;d&&n.scopes.vSlot++,Dl(f,t,n,!1,r),d&&n.scopes.vSlot--}else if(f.type===11)Dl(f,t,n,f.children.length===1,!0);else if(f.type===9)for(let d=0;d<f.branches.length;d++)Dl(f.branches[d],t,n,f.branches[d].children.length===1,r)}let l=!1;if(o.length===i.length&&t.type===1){if(t.tagType===0&&t.codegenNode&&t.codegenNode.type===13&&J(t.codegenNode.children))t.codegenNode.children=a(or(t.codegenNode.children)),l=!0;else if(t.tagType===1&&t.codegenNode&&t.codegenNode.type===13&&t.codegenNode.children&&!J(t.codegenNode.children)&&t.codegenNode.children.type===15){const u=c(t.codegenNode,\"default\");u&&(u.returns=a(or(u.returns)),l=!0)}else if(t.tagType===3&&e&&e.type===1&&e.tagType===1&&e.codegenNode&&e.codegenNode.type===13&&e.codegenNode.children&&!J(e.codegenNode.children)&&e.codegenNode.children.type===15){const u=Gt(t,\"slot\",!0),f=u&&u.arg&&c(e.codegenNode,u.arg);f&&(f.returns=a(or(f.returns)),l=!0)}}if(!l)for(const u of o)u.codegenNode=n.cache(u.codegenNode);function a(u){const f=n.cache(u);return f.needArraySpread=!0,f}function c(u,f){if(u.children&&!J(u.children)&&u.children.type===15){const d=u.children.properties.find(h=>h.key===f||h.key.content===f);return d&&d.value}}o.length&&n.transformHoist&&n.transformHoist(i,n,t)}function Ft(t,e){const{constantCache:n}=e;switch(t.type){case 1:if(t.tagType!==0)return 0;const s=n.get(t);if(s!==void 0)return s;const r=t.codegenNode;if(r.type!==13||r.isBlock&&t.tag!==\"svg\"&&t.tag!==\"foreignObject\"&&t.tag!==\"math\")return 0;if(r.patchFlag===void 0){let o=3;const l=Eb(t,e);if(l===0)return n.set(t,0),0;l<o&&(o=l);for(let a=0;a<t.children.length;a++){const c=Ft(t.children[a],e);if(c===0)return n.set(t,0),0;c<o&&(o=c)}if(o>1)for(let a=0;a<t.props.length;a++){const c=t.props[a];if(c.type===7&&c.name===\"bind\"&&c.exp){const u=Ft(c.exp,e);if(u===0)return n.set(t,0),0;u<o&&(o=u)}}if(r.isBlock){for(let a=0;a<t.props.length;a++)if(t.props[a].type===7)return n.set(t,0),0;e.removeHelper(mr),e.removeHelper(fi(e.inSSR,r.isComponent)),r.isBlock=!1,e.helper(ui(e.inSSR,r.isComponent))}return n.set(t,o),o}else return n.set(t,0),0;case 2:case 3:return 3;case 9:case 11:case 10:return 0;case 5:case 12:return Ft(t.content,e);case 4:return t.constType;case 8:let i=3;for(let o=0;o<t.children.length;o++){const l=t.children[o];if(re(l)||Dt(l))continue;const a=Ft(l,e);if(a===0)return 0;a<i&&(i=a)}return i;case 20:return 2;default:return 0}}const AT=new Set([Bd,$d,So,qo]);function Tb(t,e){if(t.type===14&&!re(t.callee)&&AT.has(t.callee)){const n=t.arguments[0];if(n.type===4)return Ft(n,e);if(n.type===14)return Tb(n,e)}return 0}function Eb(t,e){let n=3;const s=Mb(t);if(s&&s.type===15){const{properties:r}=s;for(let i=0;i<r.length;i++){const{key:o,value:l}=r[i],a=Ft(o,e);if(a===0)return a;a<n&&(n=a);let c;if(l.type===4?c=Ft(l,e):l.type===14?c=Tb(l,e):c=0,c===0)return c;c<n&&(n=c)}}return n}function Mb(t){const e=t.codegenNode;if(e.type===13)return e.props}function NT(t,{filename:e=\"\",prefixIdentifiers:n=!1,hoistStatic:s=!1,hmr:r=!1,cacheHandlers:i=!1,nodeTransforms:o=[],directiveTransforms:l={},transformHoist:a=null,isBuiltInComponent:c=it,isCustomElement:u=it,expressionPlugins:f=[],scopeId:d=null,slotted:h=!0,ssr:p=!1,inSSR:m=!1,ssrCssVars:g=\"\",bindingMetadata:y=ue,inline:S=!1,isTS:b=!1,onError:w=Wd,onWarn:x=db,compatConfig:E}){const k=e.replace(/\\?.*$/,\"\").match(/([^/\\\\]+)\\.\\w+$/),A={filename:e,selfName:k&&Tr(Ae(k[1])),prefixIdentifiers:n,hoistStatic:s,hmr:r,cacheHandlers:i,nodeTransforms:o,directiveTransforms:l,transformHoist:a,isBuiltInComponent:c,isCustomElement:u,expressionPlugins:f,scopeId:d,slotted:h,ssr:p,inSSR:m,ssrCssVars:g,bindingMetadata:y,inline:S,isTS:b,onError:w,onWarn:x,compatConfig:E,root:t,helpers:new Map,components:new Set,directives:new Set,hoists:[],imports:[],cached:[],constantCache:new WeakMap,temps:0,identifiers:Object.create(null),scopes:{vFor:0,vSlot:0,vPre:0,vOnce:0},parent:null,grandParent:null,currentNode:t,childIndex:0,inVOnce:!1,helper(v){const T=A.helpers.get(v)||0;return A.helpers.set(v,T+1),v},removeHelper(v){const T=A.helpers.get(v);if(T){const O=T-1;O?A.helpers.set(v,O):A.helpers.delete(v)}},helperString(v){return`_${ai[A.helper(v)]}`},replaceNode(v){A.parent.children[A.childIndex]=A.currentNode=v},removeNode(v){const T=A.parent.children,O=v?T.indexOf(v):A.currentNode?A.childIndex:-1;!v||v===A.currentNode?(A.currentNode=null,A.onNodeRemoved()):A.childIndex>O&&(A.childIndex--,A.onNodeRemoved()),A.parent.children.splice(O,1)},onNodeRemoved:it,addIdentifiers(v){},removeIdentifiers(v){},hoist(v){re(v)&&(v=oe(v)),A.hoists.push(v);const T=oe(`_hoisted_${A.hoists.length}`,!1,v.loc,2);return T.hoisted=v,T},cache(v,T=!1,O=!1){const N=eT(A.cached.length,v,T,O);return A.cached.push(N),N}};return A.filters=new Set,A}function OT(t,e){const n=NT(t,e);Nc(t,n),e.hoistStatic&&MT(t,n),e.ssr||RT(t,n),t.helpers=new Set([...n.helpers.keys()]),t.components=[...n.components],t.directives=[...n.directives],t.imports=n.imports,t.hoists=n.hoists,t.temps=n.temps,t.cached=n.cached,t.transformed=!0,t.filters=[...n.filters]}function RT(t,e){const{helper:n}=e,{children:s}=t;if(s.length===1){const r=kb(t);if(r&&r.codegenNode){const i=r.codegenNode;i.type===13&&Vd(i,e),t.codegenNode=i}else t.codegenNode=s[0]}else if(s.length>1){let r=64;t.codegenNode=wo(e,n(bo),void 0,t.children,r,void 0,void 0,!0,void 0,!1)}}function IT(t,e){let n=0;const s=()=>{n--};for(;n<t.children.length;n++){const r=t.children[n];re(r)||(e.grandParent=e.parent,e.parent=t,e.childIndex=n,e.onNodeRemoved=s,Nc(r,e))}}function Nc(t,e){e.currentNode=t;const{nodeTransforms:n}=e,s=[];for(let i=0;i<n.length;i++){const o=n[i](t,e);if(o&&(J(o)?s.push(...o):s.push(o)),e.currentNode)t=e.currentNode;else return}switch(t.type){case 3:e.ssr||e.helper(Ko);break;case 5:e.ssr||e.helper(Mc);break;case 9:for(let i=0;i<t.branches.length;i++)Nc(t.branches[i],e);break;case 10:case 11:case 1:case 0:IT(t,e);break}e.currentNode=t;let r=s.length;for(;r--;)s[r]()}function Ab(t,e){const n=re(t)?s=>s===t:s=>t.test(s);return(s,r)=>{if(s.type===1){const{props:i}=s;if(s.tagType===3&&i.some(fT))return;const o=[];for(let l=0;l<i.length;l++){const a=i[l];if(a.type===7&&n(a.name)){i.splice(l,1),l--;const c=e(s,a,r);c&&o.push(c)}}return o}}}const Oc=\"/*@__PURE__*/\",Nb=t=>`${ai[t]}: _${ai[t]}`;function _T(t,{mode:e=\"function\",prefixIdentifiers:n=e===\"module\",sourceMap:s=!1,filename:r=\"template.vue.html\",scopeId:i=null,optimizeImports:o=!1,runtimeGlobalName:l=\"Vue\",runtimeModuleName:a=\"vue\",ssrRuntimeModuleName:c=\"vue/server-renderer\",ssr:u=!1,isTS:f=!1,inSSR:d=!1}){const h={mode:e,prefixIdentifiers:n,sourceMap:s,filename:r,scopeId:i,optimizeImports:o,runtimeGlobalName:l,runtimeModuleName:a,ssrRuntimeModuleName:c,ssr:u,isTS:f,inSSR:d,source:t.source,code:\"\",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(m){return`_${ai[m]}`},push(m,g=-2,y){h.code+=m},indent(){p(++h.indentLevel)},deindent(m=!1){m?--h.indentLevel:p(--h.indentLevel)},newline(){p(h.indentLevel)}};function p(m){h.push(`\n`+\"  \".repeat(m),0)}return h}function DT(t,e={}){const n=_T(t,e);e.onContextCreated&&e.onContextCreated(n);const{mode:s,push:r,prefixIdentifiers:i,indent:o,deindent:l,newline:a,scopeId:c,ssr:u}=n,f=Array.from(t.helpers),d=f.length>0,h=!i&&s!==\"module\";PT(t,n);const m=u?\"ssrRender\":\"render\",y=(u?[\"_ctx\",\"_push\",\"_parent\",\"_attrs\"]:[\"_ctx\",\"_cache\"]).join(\", \");if(r(`function ${m}(${y}) {`),o(),h&&(r(\"with (_ctx) {\"),o(),d&&(r(`const { ${f.map(Nb).join(\", \")} } = _Vue\n`,-1),a())),t.components.length&&(du(t.components,\"component\",n),(t.directives.length||t.temps>0)&&a()),t.directives.length&&(du(t.directives,\"directive\",n),t.temps>0&&a()),t.filters&&t.filters.length&&(a(),du(t.filters,\"filter\",n),a()),t.temps>0){r(\"let \");for(let S=0;S<t.temps;S++)r(`${S>0?\", \":\"\"}_temp${S}`)}return(t.components.length||t.directives.length||t.temps)&&(r(`\n`,0),a()),u||r(\"return \"),t.codegenNode?mt(t.codegenNode,n):r(\"null\"),h&&(l(),r(\"}\")),l(),r(\"}\"),{ast:t,code:n.code,preamble:\"\",map:n.map?n.map.toJSON():void 0}}function PT(t,e){const{ssr:n,prefixIdentifiers:s,push:r,newline:i,runtimeModuleName:o,runtimeGlobalName:l,ssrRuntimeModuleName:a}=e,c=l,u=Array.from(t.helpers);if(u.length>0&&(r(`const _Vue = ${c}\n`,-1),t.hoists.length)){const f=[Ad,Nd,Ko,Od,ab].filter(d=>u.includes(d)).map(Nb).join(\", \");r(`const { ${f} } = _Vue\n`,-1)}LT(t.hoists,e),i(),r(\"return \")}function du(t,e,{helper:n,push:s,newline:r,isTS:i}){const o=n(e===\"filter\"?Dd:e===\"component\"?Rd:_d);for(let l=0;l<t.length;l++){let a=t[l];const c=a.endsWith(\"__self\");c&&(a=a.slice(0,-6)),s(`const ${Co(a,e)} = ${o}(${JSON.stringify(a)}${c?\", true\":\"\"})${i?\"!\":\"\"}`),l<t.length-1&&r()}}function LT(t,e){if(!t.length)return;e.pure=!0;const{push:n,newline:s}=e;s();for(let r=0;r<t.length;r++){const i=t[r];i&&(n(`const _hoisted_${r+1} = `),mt(i,e),s())}e.pure=!1}function qd(t,e){const n=t.length>3||!1;e.push(\"[\"),n&&e.indent(),Jo(t,e,n),n&&e.deindent(),e.push(\"]\")}function Jo(t,e,n=!1,s=!0){const{push:r,newline:i}=e;for(let o=0;o<t.length;o++){const l=t[o];re(l)?r(l,-3):J(l)?qd(l,e):mt(l,e),o<t.length-1&&(n?(s&&r(\",\"),i()):s&&r(\", \"))}}function mt(t,e){if(re(t)){e.push(t,-3);return}if(Dt(t)){e.push(e.helper(t));return}switch(t.type){case 1:case 9:case 11:mt(t.codegenNode,e);break;case 2:BT(t,e);break;case 4:Ob(t,e);break;case 5:$T(t,e);break;case 12:mt(t.codegenNode,e);break;case 8:Rb(t,e);break;case 3:FT(t,e);break;case 13:zT(t,e);break;case 14:WT(t,e);break;case 15:jT(t,e);break;case 17:UT(t,e);break;case 18:KT(t,e);break;case 19:qT(t,e);break;case 20:JT(t,e);break;case 21:Jo(t.body,e,!0,!1);break}}function BT(t,e){e.push(JSON.stringify(t.content),-3,t)}function Ob(t,e){const{content:n,isStatic:s}=t;e.push(s?JSON.stringify(n):n,-3,t)}function $T(t,e){const{push:n,helper:s,pure:r}=e;r&&n(Oc),n(`${s(Mc)}(`),mt(t.content,e),n(\")\")}function Rb(t,e){for(let n=0;n<t.children.length;n++){const s=t.children[n];re(s)?e.push(s,-3):mt(s,e)}}function HT(t,e){const{push:n}=e;if(t.type===8)n(\"[\"),Rb(t,e),n(\"]\");else if(t.isStatic){const s=jd(t.content)?t.content:JSON.stringify(t.content);n(s,-2,t)}else n(`[${t.content}]`,-3,t)}function FT(t,e){const{push:n,helper:s,pure:r}=e;r&&n(Oc),n(`${s(Ko)}(${JSON.stringify(t.content)})`,-3,t)}function zT(t,e){const{push:n,helper:s,pure:r}=e,{tag:i,props:o,children:l,patchFlag:a,dynamicProps:c,directives:u,isBlock:f,disableTracking:d,isComponent:h}=t;let p;a&&(p=String(a)),u&&n(s(Pd)+\"(\"),f&&n(`(${s(mr)}(${d?\"true\":\"\"}), `),r&&n(Oc);const m=f?fi(e.inSSR,h):ui(e.inSSR,h);n(s(m)+\"(\",-2,t),Jo(VT([i,o,l,p,c]),e),n(\")\"),f&&n(\")\"),u&&(n(\", \"),mt(u,e),n(\")\"))}function VT(t){let e=t.length;for(;e--&&t[e]==null;);return t.slice(0,e+1).map(n=>n||\"null\")}function WT(t,e){const{push:n,helper:s,pure:r}=e,i=re(t.callee)?t.callee:s(t.callee);r&&n(Oc),n(i+\"(\",-2,t),Jo(t.arguments,e),n(\")\")}function jT(t,e){const{push:n,indent:s,deindent:r,newline:i}=e,{properties:o}=t;if(!o.length){n(\"{}\",-2,t);return}const l=o.length>1||!1;n(l?\"{\":\"{ \"),l&&s();for(let a=0;a<o.length;a++){const{key:c,value:u}=o[a];HT(c,e),n(\": \"),mt(u,e),a<o.length-1&&(n(\",\"),i())}l&&r(),n(l?\"}\":\" }\")}function UT(t,e){qd(t.elements,e)}function KT(t,e){const{push:n,indent:s,deindent:r}=e,{params:i,returns:o,body:l,newline:a,isSlot:c}=t;c&&n(`_${ai[Fd]}(`),n(\"(\",-2,t),J(i)?Jo(i,e):i&&mt(i,e),n(\") => \"),(a||l)&&(n(\"{\"),s()),o?(a&&n(\"return \"),J(o)?qd(o,e):mt(o,e)):l&&mt(l,e),(a||l)&&(r(),n(\"}\")),c&&(t.isNonScopedSlot&&n(\", undefined, true\"),n(\")\"))}function qT(t,e){const{test:n,consequent:s,alternate:r,newline:i}=t,{push:o,indent:l,deindent:a,newline:c}=e;if(n.type===4){const f=!jd(n.content);f&&o(\"(\"),Ob(n,e),f&&o(\")\")}else o(\"(\"),mt(n,e),o(\")\");i&&l(),e.indentLevel++,i||o(\" \"),o(\"? \"),mt(s,e),e.indentLevel--,i&&c(),i||o(\" \"),o(\": \");const u=r.type===19;u||e.indentLevel++,mt(r,e),u||e.indentLevel--,i&&a(!0)}function JT(t,e){const{push:n,helper:s,indent:r,deindent:i,newline:o}=e,{needPauseTracking:l,needArraySpread:a}=t;a&&n(\"[...(\"),n(`_cache[${t.index}] || (`),l&&(r(),n(`${s(ua)}(-1`),t.inVOnce&&n(\", true\"),n(\"),\"),o(),n(\"(\")),n(`_cache[${t.index}] = `),mt(t.value,e),l&&(n(`).cacheIndex = ${t.index},`),o(),n(`${s(ua)}(1),`),o(),n(`_cache[${t.index}]`),i()),n(\")\"),a&&n(\")]\")}new RegExp(\"\\\\b\"+\"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\");const GT=Ab(/^(?:if|else|else-if)$/,(t,e,n)=>YT(t,e,n,(s,r,i)=>{const o=n.parent.children;let l=o.indexOf(s),a=0;for(;l-->=0;){const c=o[l];c&&c.type===9&&(a+=c.branches.length)}return()=>{if(i)s.codegenNode=Up(r,a,n);else{const c=XT(s.codegenNode);c.alternate=Up(r,a+s.branches.length-1,n)}}}));function YT(t,e,n,s){if(e.name!==\"else\"&&(!e.exp||!e.exp.content.trim())){const r=e.exp?e.exp.loc:t.loc;n.onError(Me(28,e.loc)),e.exp=oe(\"true\",!1,r)}if(e.name===\"if\"){const r=jp(t,e),i={type:9,loc:vT(t.loc),branches:[r]};if(n.replaceNode(i),s)return s(i,r,!0)}else{const r=n.parent.children;let i=r.indexOf(t);for(;i-->=-1;){const o=r[i];if(o&&Sb(o)){n.removeNode(o);continue}if(o&&o.type===9){(e.name===\"else-if\"||e.name===\"else\")&&o.branches[o.branches.length-1].condition===void 0&&n.onError(Me(30,t.loc)),n.removeNode();const l=jp(t,e);o.branches.push(l);const a=s&&s(o,l,!1);Nc(l,n),a&&a(),n.currentNode=null}else n.onError(Me(30,t.loc));break}}}function jp(t,e){const n=t.tagType===3;return{type:10,loc:t.loc,condition:e.name===\"else\"?void 0:e.exp,children:n&&!Gt(t,\"for\")?t.children:[t],userKey:Ac(t,\"key\"),isTemplateIf:n}}function Up(t,e,n){return t.condition?cf(t.condition,Kp(t,e,n),Ue(n.helper(Ko),['\"\"',\"true\"])):Kp(t,e,n)}function Kp(t,e,n){const{helper:s}=n,r=Fe(\"key\",oe(`${e}`,!1,jt,2)),{children:i}=t,o=i[0];if(i.length!==1||o.type!==1)if(i.length===1&&o.type===11){const a=o.codegenNode;return pa(a,r,n),a}else return wo(n,s(bo),Xt([r]),i,64,void 0,void 0,!0,!1,!1,t.loc);else{const a=o.codegenNode,c=hT(a);return c.type===13&&Vd(c,n),pa(c,r,n),a}}function XT(t){for(;;)if(t.type===19)if(t.alternate.type===19)t=t.alternate;else return t;else t.type===20&&(t=t.value)}const QT=Ab(\"for\",(t,e,n)=>{const{helper:s,removeHelper:r}=n;return ZT(t,e,n,i=>{const o=Ue(s(Ld),[i.source]),l=da(t),a=Gt(t,\"memo\"),c=Ac(t,\"key\",!1,!0);c&&c.type;let u=c&&(c.type===6?c.value?oe(c.value.content,!0):void 0:c.exp);const f=c&&u?Fe(\"key\",u):null,d=i.source.type===4&&i.source.constType>0,h=d?64:c?128:256;return i.codegenNode=wo(n,s(bo),void 0,o,h,void 0,void 0,!0,!d,!1,t.loc),()=>{let p;const{children:m}=i,g=m.length!==1||m[0].type!==1,y=ha(t)?t:l&&t.children.length===1&&ha(t.children[0])?t.children[0]:null;if(y?(p=y.codegenNode,l&&f&&pa(p,f,n)):g?p=wo(n,s(bo),f?Xt([f]):void 0,t.children,64,void 0,void 0,!0,void 0,!1):(p=m[0].codegenNode,l&&f&&pa(p,f,n),p.isBlock!==!d&&(p.isBlock?(r(mr),r(fi(n.inSSR,p.isComponent))):r(ui(n.inSSR,p.isComponent))),p.isBlock=!d,p.isBlock?(s(mr),s(fi(n.inSSR,p.isComponent))):s(ui(n.inSSR,p.isComponent))),a){const S=ci(df(i.parseResult,[oe(\"_cached\")]));S.body=tT([cn([\"const _memo = (\",a.exp,\")\"]),cn([\"if (_cached\",...u?[\" && _cached.key === \",u]:[],` && ${n.helperString(fb)}(_cached, _memo)) return _cached`]),cn([\"const _item = \",p]),oe(\"_item.memo = _memo\"),oe(\"return _item\")]),o.arguments.push(S,oe(\"_cache\"),oe(String(n.cached.length))),n.cached.push(null)}else o.arguments.push(ci(df(i.parseResult),p,!0))}})});function ZT(t,e,n,s){if(!e.exp){n.onError(Me(31,e.loc));return}const r=e.forParseResult;if(!r){n.onError(Me(32,e.loc));return}Ib(r);const{addIdentifiers:i,removeIdentifiers:o,scopes:l}=n,{source:a,value:c,key:u,index:f}=r,d={type:11,loc:e.loc,source:a,valueAlias:c,keyAlias:u,objectIndexAlias:f,parseResult:r,children:da(t)?t.children:[t]};n.replaceNode(d),l.vFor++;const h=s&&s(d);return()=>{l.vFor--,h&&h()}}function Ib(t,e){t.finalized||(t.finalized=!0)}function df({value:t,key:e,index:n},s=[]){return eE([t,e,n,...s])}function eE(t){let e=t.length;for(;e--&&!t[e];);return t.slice(0,e+1).map((n,s)=>n||oe(\"_\".repeat(s+1),!1))}const qp=oe(\"undefined\",!1),tE=(t,e)=>{if(t.type===1&&(t.tagType===1||t.tagType===3)){const n=Gt(t,\"slot\");if(n)return n.exp,e.scopes.vSlot++,()=>{e.scopes.vSlot--}}},nE=(t,e,n,s)=>ci(t,n,!1,!0,n.length?n[0].loc:s);function sE(t,e,n=nE){e.helper(Fd);const{children:s,loc:r}=t,i=[],o=[];let l=e.scopes.vSlot>0||e.scopes.vFor>0;const a=Gt(t,\"slot\",!0);if(a){const{arg:g,exp:y}=a;g&&!Rt(g)&&(l=!0),i.push(Fe(g||oe(\"default\",!0),n(y,void 0,s,r)))}let c=!1,u=!1;const f=[],d=new Set;let h=0;for(let g=0;g<s.length;g++){const y=s[g];let S;if(!da(y)||!(S=Gt(y,\"slot\",!0))){y.type!==3&&f.push(y);continue}if(a){e.onError(Me(37,S.loc));break}c=!0;const{children:b,loc:w}=y,{arg:x=oe(\"default\",!0),exp:E,loc:k}=S;let A;Rt(x)?A=x?x.content:\"default\":l=!0;const v=Gt(y,\"for\"),T=n(E,v,b,w);let O,N;if(O=Gt(y,\"if\"))l=!0,o.push(cf(O.exp,dl(x,T,h++),qp));else if(N=Gt(y,/^else(?:-if)?$/,!0)){let _=g,F;for(;_--&&(F=s[_],!!Sb(F)););if(F&&da(F)&&Gt(F,/^(?:else-)?if$/)){let j=o[o.length-1];for(;j.alternate.type===19;)j=j.alternate;j.alternate=N.exp?cf(N.exp,dl(x,T,h++),qp):dl(x,T,h++)}else e.onError(Me(30,N.loc))}else if(v){l=!0;const _=v.forParseResult;_?(Ib(_),o.push(Ue(e.helper(Ld),[_.source,ci(df(_),dl(x,T),!0)]))):e.onError(Me(32,v.loc))}else{if(A){if(d.has(A)){e.onError(Me(38,k));continue}d.add(A),A===\"default\"&&(u=!0)}i.push(Fe(x,T))}}if(!a){const g=(y,S)=>{const b=n(y,void 0,S,r);return e.compatConfig&&(b.isNonScopedSlot=!0),Fe(\"default\",b)};c?f.length&&!f.every(Ud)&&(u?e.onError(Me(39,f[0].loc)):i.push(g(void 0,f))):i.push(g(void 0,s))}const p=l?2:Pl(t.children)?3:1;let m=Xt(i.concat(Fe(\"_\",oe(p+\"\",!1))),r);return o.length&&(m=Ue(e.helper(ub),[m,or(o)])),{slots:m,hasDynamicSlots:l}}function dl(t,e,n){const s=[Fe(\"name\",t),Fe(\"fn\",e)];return n!=null&&s.push(Fe(\"key\",oe(String(n),!0))),Xt(s)}function Pl(t){for(let e=0;e<t.length;e++){const n=t[e];switch(n.type){case 1:if(n.tagType===2||Pl(n.children))return!0;break;case 9:if(Pl(n.branches))return!0;break;case 10:case 11:if(Pl(n.children))return!0;break}}return!1}const _b=new WeakMap,rE=(t,e)=>function(){if(t=e.currentNode,!(t.type===1&&(t.tagType===0||t.tagType===1)))return;const{tag:s,props:r}=t,i=t.tagType===1;let o=i?iE(t,e):`\"${s}\"`;const l=ye(o)&&o.callee===Id;let a,c,u=0,f,d,h,p=l||o===Gi||o===Md||!i&&(s===\"svg\"||s===\"foreignObject\"||s===\"math\");if(r.length>0){const m=Db(t,e,void 0,i,l);a=m.props,u=m.patchFlag,d=m.dynamicPropNames;const g=m.directives;h=g&&g.length?or(g.map(y=>lE(y,e))):void 0,m.shouldUseBlock&&(p=!0)}if(t.children.length>0)if(o===aa&&(p=!0,u|=1024),i&&o!==Gi&&o!==aa){const{slots:g,hasDynamicSlots:y}=sE(t,e);c=g,y&&(u|=1024)}else if(t.children.length===1&&o!==Gi){const g=t.children[0],y=g.type,S=y===5||y===8;S&&Ft(g,e)===0&&(u|=1),S||y===2?c=g:c=t.children}else c=t.children;d&&d.length&&(f=aE(d)),t.codegenNode=wo(e,o,a,c,u===0?void 0:u,f,h,!!p,!1,i,t.loc)};function iE(t,e,n=!1){let{tag:s}=t;const r=hf(s),i=Ac(t,\"is\",!1,!0);if(i)if(r||lr(\"COMPILER_IS_ON_ELEMENT\",e)){let l;if(i.type===6?l=i.value&&oe(i.value.content,!0):(l=i.exp,l||(l=oe(\"is\",!1,i.arg.loc))),l)return Ue(e.helper(Id),[l])}else i.type===6&&i.value.content.startsWith(\"vue:\")&&(s=i.value.content.slice(4));const o=hb(s)||e.isBuiltInComponent(s);return o?(n||e.helper(o),o):(e.helper(Rd),e.components.add(s),Co(s,\"component\"))}function Db(t,e,n=t.props,s,r,i=!1){const{tag:o,loc:l,children:a}=t;let c=[];const u=[],f=[],d=a.length>0;let h=!1,p=0,m=!1,g=!1,y=!1,S=!1,b=!1,w=!1;const x=[],E=T=>{c.length&&(u.push(Xt(Jp(c),l)),c=[]),T&&u.push(T)},k=()=>{e.scopes.vFor>0&&c.push(Fe(oe(\"ref_for\",!0),oe(\"true\")))},A=({key:T,value:O})=>{if(Rt(T)){const N=T.content,_=vr(N);if(_&&(!s||r)&&N.toLowerCase()!==\"onclick\"&&N!==\"onUpdate:modelValue\"&&!qn(N)&&(S=!0),_&&qn(N)&&(w=!0),_&&O.type===14&&(O=O.arguments[0]),O.type===20||(O.type===4||O.type===8)&&Ft(O,e)>0)return;N===\"ref\"?m=!0:N===\"class\"?g=!0:N===\"style\"?y=!0:N!==\"key\"&&!x.includes(N)&&x.push(N),s&&(N===\"class\"||N===\"style\")&&!x.includes(N)&&x.push(N)}else b=!0};for(let T=0;T<n.length;T++){const O=n[T];if(O.type===6){const{loc:N,name:_,nameLoc:F,value:j}=O;let R=!0;if(_===\"ref\"&&(m=!0,k()),_===\"is\"&&(hf(o)||j&&j.content.startsWith(\"vue:\")||lr(\"COMPILER_IS_ON_ELEMENT\",e)))continue;c.push(Fe(oe(_,!0,F),oe(j?j.content:\"\",R,j?j.loc:N)))}else{const{name:N,arg:_,exp:F,loc:j,modifiers:R}=O,V=N===\"bind\",$=N===\"on\";if(N===\"slot\"){s||e.onError(Me(40,j));continue}if(N===\"once\"||N===\"memo\"||N===\"is\"||V&&Xs(_,\"is\")&&(hf(o)||lr(\"COMPILER_IS_ON_ELEMENT\",e))||$&&i)continue;if((V&&Xs(_,\"key\")||$&&d&&Xs(_,\"vue:before-update\"))&&(h=!0),V&&Xs(_,\"ref\")&&k(),!_&&(V||$)){if(b=!0,F)if(V){if(E(),lr(\"COMPILER_V_BIND_OBJECT_ORDER\",e)){u.unshift(F);continue}k(),E(),u.push(F)}else E({type:14,loc:j,callee:e.helper(Hd),arguments:s?[F]:[F,\"true\"]});else e.onError(Me(V?34:35,j));continue}V&&R.some(Xe=>Xe.content===\"prop\")&&(p|=32);const ie=e.directiveTransforms[N];if(ie){const{props:Xe,needRuntime:Qe}=ie(O,t,e);!i&&Xe.forEach(A),$&&_&&!Rt(_)?E(Xt(Xe,l)):c.push(...Xe),Qe&&(f.push(O),Dt(Qe)&&_b.set(O,Qe))}else ex(N)||(f.push(O),d&&(h=!0))}}let v;if(u.length?(E(),u.length>1?v=Ue(e.helper(ca),u,l):v=u[0]):c.length&&(v=Xt(Jp(c),l)),b?p|=16:(g&&!s&&(p|=2),y&&!s&&(p|=4),x.length&&(p|=8),S&&(p|=32)),!h&&(p===0||p===32)&&(m||w||f.length>0)&&(p|=512),!e.inSSR&&v)switch(v.type){case 15:let T=-1,O=-1,N=!1;for(let j=0;j<v.properties.length;j++){const R=v.properties[j].key;Rt(R)?R.content===\"class\"?T=j:R.content===\"style\"&&(O=j):R.isHandlerKey||(N=!0)}const _=v.properties[T],F=v.properties[O];N?v=Ue(e.helper(So),[v]):(_&&!Rt(_.value)&&(_.value=Ue(e.helper(Bd),[_.value])),F&&(y||F.value.type===4&&F.value.content.trim()[0]===\"[\"||F.value.type===17)&&(F.value=Ue(e.helper($d),[F.value])));break;case 14:break;default:v=Ue(e.helper(So),[Ue(e.helper(qo),[v])]);break}return{props:v,directives:f,patchFlag:p,dynamicPropNames:x,shouldUseBlock:h}}function Jp(t){const e=new Map,n=[];for(let s=0;s<t.length;s++){const r=t[s];if(r.key.type===8||!r.key.isStatic){n.push(r);continue}const i=r.key.content,o=e.get(i);o?(i===\"style\"||i===\"class\"||vr(i))&&oE(o,r):(e.set(i,r),n.push(r))}return n}function oE(t,e){t.value.type===17?t.value.elements.push(e.value):t.value=or([t.value,e.value],t.loc)}function lE(t,e){const n=[],s=_b.get(t);s?n.push(e.helperString(s)):(e.helper(_d),e.directives.add(t.name),n.push(Co(t.name,\"directive\")));const{loc:r}=t;if(t.exp&&n.push(t.exp),t.arg&&(t.exp||n.push(\"void 0\"),n.push(t.arg)),Object.keys(t.modifiers).length){t.arg||(t.exp||n.push(\"void 0\"),n.push(\"void 0\"));const i=oe(\"true\",!1,r);n.push(Xt(t.modifiers.map(o=>Fe(o,i)),r))}return or(n,t.loc)}function aE(t){let e=\"[\";for(let n=0,s=t.length;n<s;n++)e+=JSON.stringify(t[n]),n<s-1&&(e+=\", \");return e+\"]\"}function hf(t){return t===\"component\"||t===\"Component\"}const cE=(t,e)=>{if(ha(t)){const{children:n,loc:s}=t,{slotName:r,slotProps:i}=uE(t,e),o=[e.prefixIdentifiers?\"_ctx.$slots\":\"$slots\",r,\"{}\",\"undefined\",\"true\"];let l=2;i&&(o[2]=i,l=3),n.length&&(o[3]=ci([],n,!1,!1,s),l=4),e.scopeId&&!e.slotted&&(l=5),o.splice(l),t.codegenNode=Ue(e.helper(cb),o,s)}};function uE(t,e){let n='\"default\"',s;const r=[];for(let i=0;i<t.props.length;i++){const o=t.props[i];if(o.type===6)o.value&&(o.name===\"name\"?n=JSON.stringify(o.value.content):(o.name=Ae(o.name),r.push(o)));else if(o.name===\"bind\"&&Xs(o.arg,\"name\")){if(o.exp)n=o.exp;else if(o.arg&&o.arg.type===4){const l=Ae(o.arg.content);n=o.exp=oe(l,!1,o.arg.loc)}}else o.name===\"bind\"&&o.arg&&Rt(o.arg)&&(o.arg.content=Ae(o.arg.content)),r.push(o)}if(r.length>0){const{props:i,directives:o}=Db(t,e,r,!1,!1);s=i,o.length&&e.onError(Me(36,o[0].loc))}return{slotName:n,slotProps:s}}const Pb=(t,e,n,s)=>{const{loc:r,modifiers:i,arg:o}=t;!t.exp&&!i.length&&n.onError(Me(35,r));let l;if(o.type===4)if(o.isStatic){let f=o.content;f.startsWith(\"vue:\")&&(f=`vnode-${f.slice(4)}`);const d=e.tagType!==0||f.startsWith(\"vnode\")||!/[A-Z]/.test(f)?Jr(Ae(f)):`on:${f}`;l=oe(d,!0,o.loc)}else l=cn([`${n.helperString(af)}(`,o,\")\"]);else l=o,l.children.unshift(`${n.helperString(af)}(`),l.children.push(\")\");let a=t.exp;a&&!a.content.trim()&&(a=void 0);let c=n.cacheHandlers&&!a&&!n.inVOnce;if(a){const f=gb(a),d=!(f||cT(a)),h=a.content.includes(\";\");(d||c&&f)&&(a=cn([`${d?\"$event\":\"(...args)\"} => ${h?\"{\":\"(\"}`,a,h?\"}\":\")\"]))}let u={props:[Fe(l,a||oe(\"() => {}\",!1,r))]};return s&&(u=s(u)),c&&(u.props[0].value=n.cache(u.props[0].value)),u.props.forEach(f=>f.key.isHandlerKey=!0),u},fE=(t,e,n)=>{const{modifiers:s,loc:r}=t,i=t.arg;let{exp:o}=t;return o&&o.type===4&&!o.content.trim()&&(o=void 0),i.type!==4?(i.children.unshift(\"(\"),i.children.push(') || \"\"')):i.isStatic||(i.content=i.content?`${i.content} || \"\"`:'\"\"'),s.some(l=>l.content===\"camel\")&&(i.type===4?i.isStatic?i.content=Ae(i.content):i.content=`${n.helperString(lf)}(${i.content})`:(i.children.unshift(`${n.helperString(lf)}(`),i.children.push(\")\"))),n.inSSR||(s.some(l=>l.content===\"prop\")&&Gp(i,\".\"),s.some(l=>l.content===\"attr\")&&Gp(i,\"^\")),{props:[Fe(i,o)]}},Gp=(t,e)=>{t.type===4?t.isStatic?t.content=e+t.content:t.content=`\\`${e}\\${${t.content}}\\``:(t.children.unshift(`'${e}' + (`),t.children.push(\")\"))},dE=(t,e)=>{if(t.type===0||t.type===1||t.type===11||t.type===10)return()=>{const n=t.children;let s,r=!1;for(let i=0;i<n.length;i++){const o=n[i];if(fu(o)){r=!0;for(let l=i+1;l<n.length;l++){const a=n[l];if(fu(a))s||(s=n[i]=cn([o],o.loc)),s.children.push(\" + \",a),n.splice(l,1),l--;else{s=void 0;break}}}}if(!(!r||n.length===1&&(t.type===0||t.type===1&&t.tagType===0&&!t.props.find(i=>i.type===7&&!e.directiveTransforms[i.name])&&t.tag!==\"template\")))for(let i=0;i<n.length;i++){const o=n[i];if(fu(o)||o.type===8){const l=[];(o.type!==2||o.content!==\" \")&&l.push(o),!e.ssr&&Ft(o,e)===0&&l.push(\"1\"),n[i]={type:12,content:o,loc:o.loc,codegenNode:Ue(e.helper(Od),l)}}}}},Yp=new WeakSet,hE=(t,e)=>{if(t.type===1&&Gt(t,\"once\",!0))return Yp.has(t)||e.inVOnce||e.inSSR?void 0:(Yp.add(t),e.inVOnce=!0,e.helper(ua),()=>{e.inVOnce=!1;const n=e.currentNode;n.codegenNode&&(n.codegenNode=e.cache(n.codegenNode,!0,!0))})},Lb=(t,e,n)=>{const{exp:s,arg:r}=t;if(!s)return n.onError(Me(41,t.loc)),Ri();const i=s.loc.source.trim(),o=s.type===4?s.content:i,l=n.bindingMetadata[i];if(l===\"props\"||l===\"props-aliased\")return n.onError(Me(44,s.loc)),Ri();if(l===\"literal-const\"||l===\"setup-const\")return n.onError(Me(45,s.loc)),Ri();if(!o.trim()||!gb(s))return n.onError(Me(42,s.loc)),Ri();const a=r||oe(\"modelValue\",!0),c=r?Rt(r)?`onUpdate:${Ae(r.content)}`:cn(['\"onUpdate:\" + ',r]):\"onUpdate:modelValue\";let u;const f=n.isTS?\"($event: any)\":\"$event\";u=cn([`${f} => ((`,s,\") = $event)\"]);const d=[Fe(a,t.exp),Fe(c,u)];if(t.modifiers.length&&e.tagType===1){const h=t.modifiers.map(m=>m.content).map(m=>(jd(m)?m:JSON.stringify(m))+\": true\").join(\", \"),p=r?Rt(r)?`${r.content}Modifiers`:cn([r,' + \"Modifiers\"']):\"modelModifiers\";d.push(Fe(p,oe(`{ ${h} }`,!1,t.loc,2)))}return Ri(d)};function Ri(t=[]){return{props:t}}const pE=/[\\w).+\\-_$\\]]/,mE=(t,e)=>{lr(\"COMPILER_FILTERS\",e)&&(t.type===5?ma(t.content,e):t.type===1&&t.props.forEach(n=>{n.type===7&&n.name!==\"for\"&&n.exp&&ma(n.exp,e)}))};function ma(t,e){if(t.type===4)Xp(t,e);else for(let n=0;n<t.children.length;n++){const s=t.children[n];typeof s==\"object\"&&(s.type===4?Xp(s,e):s.type===8?ma(t,e):s.type===5&&ma(s.content,e))}}function Xp(t,e){const n=t.content;let s=!1,r=!1,i=!1,o=!1,l=0,a=0,c=0,u=0,f,d,h,p,m=[];for(h=0;h<n.length;h++)if(d=f,f=n.charCodeAt(h),s)f===39&&d!==92&&(s=!1);else if(r)f===34&&d!==92&&(r=!1);else if(i)f===96&&d!==92&&(i=!1);else if(o)f===47&&d!==92&&(o=!1);else if(f===124&&n.charCodeAt(h+1)!==124&&n.charCodeAt(h-1)!==124&&!l&&!a&&!c)p===void 0?(u=h+1,p=n.slice(0,h).trim()):g();else{switch(f){case 34:r=!0;break;case 39:s=!0;break;case 96:i=!0;break;case 40:c++;break;case 41:c--;break;case 91:a++;break;case 93:a--;break;case 123:l++;break;case 125:l--;break}if(f===47){let y=h-1,S;for(;y>=0&&(S=n.charAt(y),S===\" \");y--);(!S||!pE.test(S))&&(o=!0)}}p===void 0?p=n.slice(0,h).trim():u!==0&&g();function g(){m.push(n.slice(u,h).trim()),u=h+1}if(m.length){for(h=0;h<m.length;h++)p=gE(p,m[h],e);t.content=p,t.ast=void 0}}function gE(t,e,n){n.helper(Dd);const s=e.indexOf(\"(\");if(s<0)return n.filters.add(e),`${Co(e,\"filter\")}(${t})`;{const r=e.slice(0,s),i=e.slice(s+1);return n.filters.add(r),`${Co(r,\"filter\")}(${t}${i!==\")\"?\",\"+i:i}`}}const Qp=new WeakSet,yE=(t,e)=>{if(t.type===1){const n=Gt(t,\"memo\");return!n||Qp.has(t)||e.inSSR?void 0:(Qp.add(t),()=>{const s=t.codegenNode||e.currentNode.codegenNode;s&&s.type===13&&(t.tagType!==1&&Vd(s,e),t.codegenNode=Ue(e.helper(zd),[n.exp,ci(void 0,s),\"_cache\",String(e.cached.length)]),e.cached.push(null))})}},bE=(t,e)=>{if(t.type===1){for(const n of t.props)if(n.type===7&&n.name===\"bind\"&&(!n.exp||n.exp.type===4&&!n.exp.content.trim())&&n.arg){const s=n.arg;if(s.type!==4||!s.isStatic)e.onError(Me(53,s.loc)),n.exp=oe(\"\",!0,s.loc);else{const r=Ae(s.content);(pb.test(r[0])||r[0]===\"-\")&&(n.exp=oe(r,!1,s.loc))}}}};function SE(t){return[[bE,hE,GT,yE,QT,mE,cE,rE,tE,dE],{on:Pb,bind:fE,model:Lb}]}function wE(t,e={}){const n=e.onError||Wd,s=e.mode===\"module\";e.prefixIdentifiers===!0?n(Me(48)):s&&n(Me(49));const r=!1;e.cacheHandlers&&n(Me(50)),e.scopeId&&!s&&n(Me(51));const i=ae({},e,{prefixIdentifiers:r}),o=re(t)?ET(t,i):t,[l,a]=SE();return OT(o,ae({},i,{nodeTransforms:[...l,...e.nodeTransforms||[]],directiveTransforms:ae({},a,e.directiveTransforms||{})})),DT(o,i)}const xE=()=>({props:[]});const Bb=Symbol(\"\"),$b=Symbol(\"\"),Hb=Symbol(\"\"),Fb=Symbol(\"\"),pf=Symbol(\"\"),zb=Symbol(\"\"),Vb=Symbol(\"\"),Wb=Symbol(\"\"),jb=Symbol(\"\"),Ub=Symbol(\"\");Qk({[Bb]:\"vModelRadio\",[$b]:\"vModelCheckbox\",[Hb]:\"vModelText\",[Fb]:\"vModelSelect\",[pf]:\"vModelDynamic\",[zb]:\"withModifiers\",[Vb]:\"withKeys\",[Wb]:\"vShow\",[jb]:\"Transition\",[Ub]:\"TransitionGroup\"});let Pr;function CE(t,e=!1){return Pr||(Pr=document.createElement(\"div\")),e?(Pr.innerHTML=`<div foo=\"${t.replace(/\"/g,\"&quot;\")}\">`,Pr.children[0].getAttribute(\"foo\")):(Pr.innerHTML=t,Pr.textContent)}const vE={parseMode:\"html\",isVoidTag:yx,isNativeTag:t=>px(t)||mx(t)||gx(t),isPreTag:t=>t===\"pre\",isIgnoreNewlineTag:t=>t===\"pre\"||t===\"textarea\",decodeEntities:CE,isBuiltInComponent:t=>{if(t===\"Transition\"||t===\"transition\")return jb;if(t===\"TransitionGroup\"||t===\"transition-group\")return Ub},getNamespace(t,e,n){let s=e?e.ns:n;if(e&&s===2)if(e.tag===\"annotation-xml\"){if(t===\"svg\")return 1;e.props.some(r=>r.type===6&&r.name===\"encoding\"&&r.value!=null&&(r.value.content===\"text/html\"||r.value.content===\"application/xhtml+xml\"))&&(s=0)}else/^m(?:[ions]|text)$/.test(e.tag)&&t!==\"mglyph\"&&t!==\"malignmark\"&&(s=0);else e&&s===1&&(e.tag===\"foreignObject\"||e.tag===\"desc\"||e.tag===\"title\")&&(s=0);if(s===0){if(t===\"svg\")return 1;if(t===\"math\")return 2}return s}},kE=t=>{t.type===1&&t.props.forEach((e,n)=>{e.type===6&&e.name===\"style\"&&e.value&&(t.props[n]={type:7,name:\"bind\",arg:oe(\"style\",!0,e.loc),exp:TE(e.value.content,e.loc),modifiers:[],loc:e.loc})})},TE=(t,e)=>{const n=ty(t);return oe(JSON.stringify(n),!1,e,3)};function Rs(t,e){return Me(t,e)}const EE=(t,e,n)=>{const{exp:s,loc:r}=t;return s||n.onError(Rs(54,r)),e.children.length&&(n.onError(Rs(55,r)),e.children.length=0),{props:[Fe(oe(\"innerHTML\",!0,r),s||oe(\"\",!0))]}},ME=(t,e,n)=>{const{exp:s,loc:r}=t;return s||n.onError(Rs(56,r)),e.children.length&&(n.onError(Rs(57,r)),e.children.length=0),{props:[Fe(oe(\"textContent\",!0),s?Ft(s,n)>0?s:Ue(n.helperString(Mc),[s],r):oe(\"\",!0))]}},AE=(t,e,n)=>{const s=Lb(t,e,n);if(!s.props.length||e.tagType===1)return s;t.arg&&n.onError(Rs(59,t.arg.loc));const{tag:r}=e,i=n.isCustomElement(r);if(r===\"input\"||r===\"textarea\"||r===\"select\"||i){let o=Hb,l=!1;if(r===\"input\"||i){const a=Ac(e,\"type\");if(a){if(a.type===7)o=pf;else if(a.value)switch(a.value.content){case\"radio\":o=Bb;break;case\"checkbox\":o=$b;break;case\"file\":l=!0,n.onError(Rs(60,t.loc));break}}else uT(e)&&(o=pf)}else r===\"select\"&&(o=Fb);l||(s.needRuntime=n.helper(o))}else n.onError(Rs(58,t.loc));return s.props=s.props.filter(o=>!(o.key.type===4&&o.key.content===\"modelValue\")),s},NE=Wt(\"passive,once,capture\"),OE=Wt(\"stop,prevent,self,ctrl,shift,alt,meta,exact,middle\"),RE=Wt(\"left,right\"),Kb=Wt(\"onkeyup,onkeydown,onkeypress\"),IE=(t,e,n,s)=>{const r=[],i=[],o=[];for(let l=0;l<e.length;l++){const a=e[l].content;a===\"native\"&&xo(\"COMPILER_V_ON_NATIVE\",n)||NE(a)?o.push(a):RE(a)?Rt(t)?Kb(t.content.toLowerCase())?r.push(a):i.push(a):(r.push(a),i.push(a)):OE(a)?i.push(a):r.push(a)}return{keyModifiers:r,nonKeyModifiers:i,eventOptionModifiers:o}},Zp=(t,e)=>Rt(t)&&t.content.toLowerCase()===\"onclick\"?oe(e,!0):t.type!==4?cn([\"(\",t,`) === \"onClick\" ? \"${e}\" : (`,t,\")\"]):t,_E=(t,e,n)=>Pb(t,e,n,s=>{const{modifiers:r}=t;if(!r.length)return s;let{key:i,value:o}=s.props[0];const{keyModifiers:l,nonKeyModifiers:a,eventOptionModifiers:c}=IE(i,r,n,t.loc);if(a.includes(\"right\")&&(i=Zp(i,\"onContextmenu\")),a.includes(\"middle\")&&(i=Zp(i,\"onMouseup\")),a.length&&(o=Ue(n.helper(zb),[o,JSON.stringify(a)])),l.length&&(!Rt(i)||Kb(i.content.toLowerCase()))&&(o=Ue(n.helper(Vb),[o,JSON.stringify(l)])),c.length){const u=c.map(Tr).join(\"\");i=Rt(i)?oe(`${i.content}${u}`,!0):cn([\"(\",i,`) + \"${u}\"`])}return{props:[Fe(i,o)]}}),DE=(t,e,n)=>{const{exp:s,loc:r}=t;return s||n.onError(Rs(62,r)),{props:[],needRuntime:n.helper(Wb)}},PE=(t,e)=>{t.type===1&&t.tagType===0&&(t.tag===\"script\"||t.tag===\"style\")&&e.removeNode()},LE=[kE],BE={cloak:xE,html:EE,text:ME,model:AE,on:_E,show:DE};function $E(t,e={}){return wE(t,ae({},vE,e,{nodeTransforms:[PE,...LE,...e.nodeTransforms||[]],directiveTransforms:ae({},BE,e.directiveTransforms||{}),transformHoist:null}))}const em=Object.create(null);function HE(t,e){if(!re(t))if(t.nodeType)t=t.innerHTML;else return it;const n=sx(t,e),s=em[n];if(s)return s;if(t[0]===\"#\"){const l=document.querySelector(t);t=l?l.innerHTML:\"\"}const r=ae({hoistStatic:!0,onError:void 0,onWarn:it},e);!r.isCustomElement&&typeof customElements<\"u\"&&(r.isCustomElement=l=>!!customElements.get(l));const{code:i}=$E(t,r),o=new Function(\"Vue\",i)(Kk);return o._rc=!0,em[n]=o}N0(HE);function et(t){this.content=t}et.prototype={constructor:et,find:function(t){for(var e=0;e<this.content.length;e+=2)if(this.content[e]===t)return e;return-1},get:function(t){var e=this.find(t);return e==-1?void 0:this.content[e+1]},update:function(t,e,n){var s=n&&n!=t?this.remove(n):this,r=s.find(t),i=s.content.slice();return r==-1?i.push(n||t,e):(i[r+1]=e,n&&(i[r]=n)),new et(i)},remove:function(t){var e=this.find(t);if(e==-1)return this;var n=this.content.slice();return n.splice(e,2),new et(n)},addToStart:function(t,e){return new et([t,e].concat(this.remove(t).content))},addToEnd:function(t,e){var n=this.remove(t).content.slice();return n.push(t,e),new et(n)},addBefore:function(t,e,n){var s=this.remove(e),r=s.content.slice(),i=s.find(t);return r.splice(i==-1?r.length:i,0,e,n),new et(r)},forEach:function(t){for(var e=0;e<this.content.length;e+=2)t(this.content[e],this.content[e+1])},prepend:function(t){return t=et.from(t),t.size?new et(t.content.concat(this.subtract(t).content)):this},append:function(t){return t=et.from(t),t.size?new et(this.subtract(t).content.concat(t.content)):this},subtract:function(t){var e=this;t=et.from(t);for(var n=0;n<t.content.length;n+=2)e=e.remove(t.content[n]);return e},toObject:function(){var t={};return this.forEach(function(e,n){t[e]=n}),t},get size(){return this.content.length>>1}};et.from=function(t){if(t instanceof et)return t;var e=[];if(t)for(var n in t)e.push(n,t[n]);return new et(e)};function qb(t,e,n){for(let s=0;;s++){if(s==t.childCount||s==e.childCount)return t.childCount==e.childCount?null:n;let r=t.child(s),i=e.child(s);if(r==i){n+=r.nodeSize;continue}if(!r.sameMarkup(i))return n;if(r.isText&&r.text!=i.text){for(let o=0;r.text[o]==i.text[o];o++)n++;return n}if(r.content.size||i.content.size){let o=qb(r.content,i.content,n+1);if(o!=null)return o}n+=r.nodeSize}}function Jb(t,e,n,s){for(let r=t.childCount,i=e.childCount;;){if(r==0||i==0)return r==i?null:{a:n,b:s};let o=t.child(--r),l=e.child(--i),a=o.nodeSize;if(o==l){n-=a,s-=a;continue}if(!o.sameMarkup(l))return{a:n,b:s};if(o.isText&&o.text!=l.text){let c=0,u=Math.min(o.text.length,l.text.length);for(;c<u&&o.text[o.text.length-c-1]==l.text[l.text.length-c-1];)c++,n--,s--;return{a:n,b:s}}if(o.content.size||l.content.size){let c=Jb(o.content,l.content,n-1,s-1);if(c)return c}n-=a,s-=a}}class D{constructor(e,n){if(this.content=e,this.size=n||0,n==null)for(let s=0;s<e.length;s++)this.size+=e[s].nodeSize}nodesBetween(e,n,s,r=0,i){for(let o=0,l=0;l<n;o++){let a=this.content[o],c=l+a.nodeSize;if(c>e&&s(a,r+l,i||null,o)!==!1&&a.content.size){let u=l+1;a.nodesBetween(Math.max(0,e-u),Math.min(a.content.size,n-u),s,r+u)}l=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,n,s,r){let i=\"\",o=!0;return this.nodesBetween(e,n,(l,a)=>{let c=l.isText?l.text.slice(Math.max(e,a)-a,n-a):l.isLeaf?r?typeof r==\"function\"?r(l):r:l.type.spec.leafText?l.type.spec.leafText(l):\"\":\"\";l.isBlock&&(l.isLeaf&&c||l.isTextblock)&&s&&(o?o=!1:i+=s),i+=c},0),i}append(e){if(!e.size)return this;if(!this.size)return e;let n=this.lastChild,s=e.firstChild,r=this.content.slice(),i=0;for(n.isText&&n.sameMarkup(s)&&(r[r.length-1]=n.withText(n.text+s.text),i=1);i<e.content.length;i++)r.push(e.content[i]);return new D(r,this.size+e.size)}cut(e,n=this.size){if(e==0&&n==this.size)return this;let s=[],r=0;if(n>e)for(let i=0,o=0;o<n;i++){let l=this.content[i],a=o+l.nodeSize;a>e&&((o<e||a>n)&&(l.isText?l=l.cut(Math.max(0,e-o),Math.min(l.text.length,n-o)):l=l.cut(Math.max(0,e-o-1),Math.min(l.content.size,n-o-1))),s.push(l),r+=l.nodeSize),o=a}return new D(s,r)}cutByIndex(e,n){return e==n?D.empty:e==0&&n==this.content.length?this:new D(this.content.slice(e,n))}replaceChild(e,n){let s=this.content[e];if(s==n)return this;let r=this.content.slice(),i=this.size+n.nodeSize-s.nodeSize;return r[e]=n,new D(r,i)}addToStart(e){return new D([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new D(this.content.concat(e),this.size+e.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let n=0;n<this.content.length;n++)if(!this.content[n].eq(e.content[n]))return!1;return!0}get firstChild(){return this.content.length?this.content[0]:null}get lastChild(){return this.content.length?this.content[this.content.length-1]:null}get childCount(){return this.content.length}child(e){let n=this.content[e];if(!n)throw new RangeError(\"Index \"+e+\" out of range for \"+this);return n}maybeChild(e){return this.content[e]||null}forEach(e){for(let n=0,s=0;n<this.content.length;n++){let r=this.content[n];e(r,s,n),s+=r.nodeSize}}findDiffStart(e,n=0){return qb(this,e,n)}findDiffEnd(e,n=this.size,s=e.size){return Jb(this,e,n,s)}findIndex(e){if(e==0)return hl(0,e);if(e==this.size)return hl(this.content.length,e);if(e>this.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let n=0,s=0;;n++){let r=this.child(n),i=s+r.nodeSize;if(i>=e)return i==e?hl(n+1,i):hl(n,s);s=i}}toString(){return\"<\"+this.toStringInner()+\">\"}toStringInner(){return this.content.join(\", \")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,n){if(!n)return D.empty;if(!Array.isArray(n))throw new RangeError(\"Invalid input for Fragment.fromJSON\");return new D(n.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return D.empty;let n,s=0;for(let r=0;r<e.length;r++){let i=e[r];s+=i.nodeSize,r&&i.isText&&e[r-1].sameMarkup(i)?(n||(n=e.slice(0,r)),n[n.length-1]=i.withText(n[n.length-1].text+i.text)):n&&n.push(i)}return new D(n||e,s)}static from(e){if(!e)return D.empty;if(e instanceof D)return e;if(Array.isArray(e))return this.fromArray(e);if(e.attrs)return new D([e],e.nodeSize);throw new RangeError(\"Can not convert \"+e+\" to a Fragment\"+(e.nodesBetween?\" (looks like multiple versions of prosemirror-model were loaded)\":\"\"))}}D.empty=new D([],0);const hu={index:0,offset:0};function hl(t,e){return hu.index=t,hu.offset=e,hu}function ga(t,e){if(t===e)return!0;if(!(t&&typeof t==\"object\")||!(e&&typeof e==\"object\"))return!1;let n=Array.isArray(t);if(Array.isArray(e)!=n)return!1;if(n){if(t.length!=e.length)return!1;for(let s=0;s<t.length;s++)if(!ga(t[s],e[s]))return!1}else{for(let s in t)if(!(s in e)||!ga(t[s],e[s]))return!1;for(let s in e)if(!(s in t))return!1}return!0}let Ce=class mf{constructor(e,n){this.type=e,this.attrs=n}addToSet(e){let n,s=!1;for(let r=0;r<e.length;r++){let i=e[r];if(this.eq(i))return e;if(this.type.excludes(i.type))n||(n=e.slice(0,r));else{if(i.type.excludes(this.type))return e;!s&&i.type.rank>this.type.rank&&(n||(n=e.slice(0,r)),n.push(this),s=!0),n&&n.push(i)}}return n||(n=e.slice()),s||n.push(this),n}removeFromSet(e){for(let n=0;n<e.length;n++)if(this.eq(e[n]))return e.slice(0,n).concat(e.slice(n+1));return e}isInSet(e){for(let n=0;n<e.length;n++)if(this.eq(e[n]))return!0;return!1}eq(e){return this==e||this.type==e.type&&ga(this.attrs,e.attrs)}toJSON(){let e={type:this.type.name};for(let n in this.attrs){e.attrs=this.attrs;break}return e}static fromJSON(e,n){if(!n)throw new RangeError(\"Invalid input for Mark.fromJSON\");let s=e.marks[n.type];if(!s)throw new RangeError(`There is no mark type ${n.type} in this schema`);let r=s.create(n.attrs);return s.checkAttrs(r.attrs),r}static sameSet(e,n){if(e==n)return!0;if(e.length!=n.length)return!1;for(let s=0;s<e.length;s++)if(!e[s].eq(n[s]))return!1;return!0}static setFrom(e){if(!e||Array.isArray(e)&&e.length==0)return mf.none;if(e instanceof mf)return[e];let n=e.slice();return n.sort((s,r)=>s.type.rank-r.type.rank),n}};Ce.none=[];class ya extends Error{}class K{constructor(e,n,s){this.content=e,this.openStart=n,this.openEnd=s}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,n){let s=Yb(this.content,e+this.openStart,n);return s&&new K(s,this.openStart,this.openEnd)}removeBetween(e,n){return new K(Gb(this.content,e+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+\"(\"+this.openStart+\",\"+this.openEnd+\")\"}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(e,n){if(!n)return K.empty;let s=n.openStart||0,r=n.openEnd||0;if(typeof s!=\"number\"||typeof r!=\"number\")throw new RangeError(\"Invalid input for Slice.fromJSON\");return new K(D.fromJSON(e,n.content),s,r)}static maxOpen(e,n=!0){let s=0,r=0;for(let i=e.firstChild;i&&!i.isLeaf&&(n||!i.type.spec.isolating);i=i.firstChild)s++;for(let i=e.lastChild;i&&!i.isLeaf&&(n||!i.type.spec.isolating);i=i.lastChild)r++;return new K(e,s,r)}}K.empty=new K(D.empty,0,0);function Gb(t,e,n){let{index:s,offset:r}=t.findIndex(e),i=t.maybeChild(s),{index:o,offset:l}=t.findIndex(n);if(r==e||i.isText){if(l!=n&&!t.child(o).isText)throw new RangeError(\"Removing non-flat range\");return t.cut(0,e).append(t.cut(n))}if(s!=o)throw new RangeError(\"Removing non-flat range\");return t.replaceChild(s,i.copy(Gb(i.content,e-r-1,n-r-1)))}function Yb(t,e,n,s){let{index:r,offset:i}=t.findIndex(e),o=t.maybeChild(r);if(i==e||o.isText)return s&&!s.canReplace(r,r,n)?null:t.cut(0,e).append(n).append(t.cut(e));let l=Yb(o.content,e-i-1,n,o);return l&&t.replaceChild(r,o.copy(l))}function FE(t,e,n){if(n.openStart>t.depth)throw new ya(\"Inserted content deeper than insertion position\");if(t.depth-n.openStart!=e.depth-n.openEnd)throw new ya(\"Inconsistent open depths\");return Xb(t,e,n,0)}function Xb(t,e,n,s){let r=t.index(s),i=t.node(s);if(r==e.index(s)&&s<t.depth-n.openStart){let o=Xb(t,e,n,s+1);return i.copy(i.content.replaceChild(r,o))}else if(n.content.size)if(!n.openStart&&!n.openEnd&&t.depth==s&&e.depth==s){let o=t.parent,l=o.content;return cr(o,l.cut(0,t.parentOffset).append(n.content).append(l.cut(e.parentOffset)))}else{let{start:o,end:l}=zE(n,t);return cr(i,Zb(t,o,l,e,s))}else return cr(i,ba(t,e,s))}function Qb(t,e){if(!e.type.compatibleContent(t.type))throw new ya(\"Cannot join \"+e.type.name+\" onto \"+t.type.name)}function gf(t,e,n){let s=t.node(n);return Qb(s,e.node(n)),s}function ar(t,e){let n=e.length-1;n>=0&&t.isText&&t.sameMarkup(e[n])?e[n]=t.withText(e[n].text+t.text):e.push(t)}function Yi(t,e,n,s){let r=(e||t).node(n),i=0,o=e?e.index(n):r.childCount;t&&(i=t.index(n),t.depth>n?i++:t.textOffset&&(ar(t.nodeAfter,s),i++));for(let l=i;l<o;l++)ar(r.child(l),s);e&&e.depth==n&&e.textOffset&&ar(e.nodeBefore,s)}function cr(t,e){return t.type.checkContent(e),t.copy(e)}function Zb(t,e,n,s,r){let i=t.depth>r&&gf(t,e,r+1),o=s.depth>r&&gf(n,s,r+1),l=[];return Yi(null,t,r,l),i&&o&&e.index(r)==n.index(r)?(Qb(i,o),ar(cr(i,Zb(t,e,n,s,r+1)),l)):(i&&ar(cr(i,ba(t,e,r+1)),l),Yi(e,n,r,l),o&&ar(cr(o,ba(n,s,r+1)),l)),Yi(s,null,r,l),new D(l)}function ba(t,e,n){let s=[];if(Yi(null,t,n,s),t.depth>n){let r=gf(t,e,n+1);ar(cr(r,ba(t,e,n+1)),s)}return Yi(e,null,n,s),new D(s)}function zE(t,e){let n=e.depth-t.openStart,r=e.node(n).copy(t.content);for(let i=n-1;i>=0;i--)r=e.node(i).copy(D.from(r));return{start:r.resolveNoCache(t.openStart+n),end:r.resolveNoCache(r.content.size-t.openEnd-n)}}class ko{constructor(e,n,s){this.pos=e,this.path=n,this.parentOffset=s,this.depth=n.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw new RangeError(\"There is no position before the top-level node\");return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw new RangeError(\"There is no position after the top-level node\");return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,n=this.index(this.depth);if(n==e.childCount)return null;let s=this.pos-this.path[this.path.length-1],r=e.child(n);return s?e.child(n).cut(s):r}get nodeBefore(){let e=this.index(this.depth),n=this.pos-this.path[this.path.length-1];return n?this.parent.child(e).cut(0,n):e==0?null:this.parent.child(e-1)}posAtIndex(e,n){n=this.resolveDepth(n);let s=this.path[n*3],r=n==0?0:this.path[n*3-1]+1;for(let i=0;i<e;i++)r+=s.child(i).nodeSize;return r}marks(){let e=this.parent,n=this.index();if(e.content.size==0)return Ce.none;if(this.textOffset)return e.child(n).marks;let s=e.maybeChild(n-1),r=e.maybeChild(n);if(!s){let l=s;s=r,r=l}let i=s.marks;for(var o=0;o<i.length;o++)i[o].type.spec.inclusive===!1&&(!r||!i[o].isInSet(r.marks))&&(i=i[o--].removeFromSet(i));return i}marksAcross(e){let n=this.parent.maybeChild(this.index());if(!n||!n.isInline)return null;let s=n.marks,r=e.parent.maybeChild(e.index());for(var i=0;i<s.length;i++)s[i].type.spec.inclusive===!1&&(!r||!s[i].isInSet(r.marks))&&(s=s[i--].removeFromSet(s));return s}sharedDepth(e){for(let n=this.depth;n>0;n--)if(this.start(n)<=e&&this.end(n)>=e)return n;return 0}blockRange(e=this,n){if(e.pos<this.pos)return e.blockRange(this);for(let s=this.depth-(this.parent.inlineContent||this.pos==e.pos?1:0);s>=0;s--)if(e.pos<=this.end(s)&&(!n||n(this.node(s))))return new Sa(this,e,s);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos<this.pos?e:this}toString(){let e=\"\";for(let n=1;n<=this.depth;n++)e+=(e?\"/\":\"\")+this.node(n).type.name+\"_\"+this.index(n-1);return e+\":\"+this.parentOffset}static resolve(e,n){if(!(n>=0&&n<=e.content.size))throw new RangeError(\"Position \"+n+\" out of range\");let s=[],r=0,i=n;for(let o=e;;){let{index:l,offset:a}=o.content.findIndex(i),c=i-a;if(s.push(o,l,r+a),!c||(o=o.child(l),o.isText))break;i=c-1,r+=a+1}return new ko(n,s,i)}static resolveCached(e,n){let s=tm.get(e);if(s)for(let i=0;i<s.elts.length;i++){let o=s.elts[i];if(o.pos==n)return o}else tm.set(e,s=new VE);let r=s.elts[s.i]=ko.resolve(e,n);return s.i=(s.i+1)%WE,r}}class VE{constructor(){this.elts=[],this.i=0}}const WE=12,tm=new WeakMap;class Sa{constructor(e,n,s){this.$from=e,this.$to=n,this.depth=s}get start(){return this.$from.before(this.depth+1)}get end(){return this.$to.after(this.depth+1)}get parent(){return this.$from.node(this.depth)}get startIndex(){return this.$from.index(this.depth)}get endIndex(){return this.$to.indexAfter(this.depth)}}const jE=Object.create(null);let Is=class yf{constructor(e,n,s,r=Ce.none){this.type=e,this.attrs=n,this.marks=r,this.content=s||D.empty}get children(){return this.content.content}get nodeSize(){return this.isLeaf?1:2+this.content.size}get childCount(){return this.content.childCount}child(e){return this.content.child(e)}maybeChild(e){return this.content.maybeChild(e)}forEach(e){this.content.forEach(e)}nodesBetween(e,n,s,r=0){this.content.nodesBetween(e,n,s,r,this)}descendants(e){this.nodesBetween(0,this.content.size,e)}get textContent(){return this.isLeaf&&this.type.spec.leafText?this.type.spec.leafText(this):this.textBetween(0,this.content.size,\"\")}textBetween(e,n,s,r){return this.content.textBetween(e,n,s,r)}get firstChild(){return this.content.firstChild}get lastChild(){return this.content.lastChild}eq(e){return this==e||this.sameMarkup(e)&&this.content.eq(e.content)}sameMarkup(e){return this.hasMarkup(e.type,e.attrs,e.marks)}hasMarkup(e,n,s){return this.type==e&&ga(this.attrs,n||e.defaultAttrs||jE)&&Ce.sameSet(this.marks,s||Ce.none)}copy(e=null){return e==this.content?this:new yf(this.type,this.attrs,e,this.marks)}mark(e){return e==this.marks?this:new yf(this.type,this.attrs,this.content,e)}cut(e,n=this.content.size){return e==0&&n==this.content.size?this:this.copy(this.content.cut(e,n))}slice(e,n=this.content.size,s=!1){if(e==n)return K.empty;let r=this.resolve(e),i=this.resolve(n),o=s?0:r.sharedDepth(n),l=r.start(o),c=r.node(o).content.cut(r.pos-l,i.pos-l);return new K(c,r.depth-o,i.depth-o)}replace(e,n,s){return FE(this.resolve(e),this.resolve(n),s)}nodeAt(e){for(let n=this;;){let{index:s,offset:r}=n.content.findIndex(e);if(n=n.maybeChild(s),!n)return null;if(r==e||n.isText)return n;e-=r+1}}childAfter(e){let{index:n,offset:s}=this.content.findIndex(e);return{node:this.content.maybeChild(n),index:n,offset:s}}childBefore(e){if(e==0)return{node:null,index:0,offset:0};let{index:n,offset:s}=this.content.findIndex(e);if(s<e)return{node:this.content.child(n),index:n,offset:s};let r=this.content.child(n-1);return{node:r,index:n-1,offset:s-r.nodeSize}}resolve(e){return ko.resolveCached(this,e)}resolveNoCache(e){return ko.resolve(this,e)}rangeHasMark(e,n,s){let r=!1;return n>e&&this.nodesBetween(e,n,i=>(s.isInSet(i.marks)&&(r=!0),!r)),r}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+=\"(\"+this.content.toStringInner()+\")\"),e1(this.marks,e)}contentMatchAt(e){let n=this.type.contentMatch.matchFragment(this.content,0,e);if(!n)throw new Error(\"Called contentMatchAt on a node with invalid content\");return n}canReplace(e,n,s=D.empty,r=0,i=s.childCount){let o=this.contentMatchAt(e).matchFragment(s,r,i),l=o&&o.matchFragment(this.content,n);if(!l||!l.validEnd)return!1;for(let a=r;a<i;a++)if(!this.type.allowsMarks(s.child(a).marks))return!1;return!0}canReplaceWith(e,n,s,r){if(r&&!this.type.allowsMarks(r))return!1;let i=this.contentMatchAt(e).matchType(s),o=i&&i.matchFragment(this.content,n);return o?o.validEnd:!1}canAppend(e){return e.content.size?this.canReplace(this.childCount,this.childCount,e.content):this.type.compatibleContent(e.type)}check(){this.type.checkContent(this.content),this.type.checkAttrs(this.attrs);let e=Ce.none;for(let n=0;n<this.marks.length;n++){let s=this.marks[n];s.type.checkAttrs(s.attrs),e=s.addToSet(e)}if(!Ce.sameSet(e,this.marks))throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(n=>n.type.name)}`);this.content.forEach(n=>n.check())}toJSON(){let e={type:this.type.name};for(let n in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(n=>n.toJSON())),e}static fromJSON(e,n){if(!n)throw new RangeError(\"Invalid input for Node.fromJSON\");let s;if(n.marks){if(!Array.isArray(n.marks))throw new RangeError(\"Invalid mark data for Node.fromJSON\");s=n.marks.map(e.markFromJSON)}if(n.type==\"text\"){if(typeof n.text!=\"string\")throw new RangeError(\"Invalid text node in JSON\");return e.text(n.text,s)}let r=D.fromJSON(e,n.content),i=e.nodeType(n.type).create(n.attrs,r,s);return i.type.checkAttrs(i.attrs),i}};Is.prototype.text=void 0;class wa extends Is{constructor(e,n,s,r){if(super(e,n,null,r),!s)throw new RangeError(\"Empty text nodes are not allowed\");this.text=s}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):e1(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,n){return this.text.slice(e,n)}get nodeSize(){return this.text.length}mark(e){return e==this.marks?this:new wa(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new wa(this.type,this.attrs,e,this.marks)}cut(e=0,n=this.text.length){return e==0&&n==this.text.length?this:this.withText(this.text.slice(e,n))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}}function e1(t,e){for(let n=t.length-1;n>=0;n--)e=t[n].type.name+\"(\"+e+\")\";return e}class gr{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,n){let s=new UE(e,n);if(s.next==null)return gr.empty;let r=t1(s);s.next&&s.err(\"Unexpected trailing text\");let i=QE(XE(r));return ZE(i,s),i}matchType(e){for(let n=0;n<this.next.length;n++)if(this.next[n].type==e)return this.next[n].next;return null}matchFragment(e,n=0,s=e.childCount){let r=this;for(let i=n;r&&i<s;i++)r=r.matchType(e.child(i).type);return r}get inlineContent(){return this.next.length!=0&&this.next[0].type.isInline}get defaultType(){for(let e=0;e<this.next.length;e++){let{type:n}=this.next[e];if(!(n.isText||n.hasRequiredAttrs()))return n}return null}compatible(e){for(let n=0;n<this.next.length;n++)for(let s=0;s<e.next.length;s++)if(this.next[n].type==e.next[s].type)return!0;return!1}fillBefore(e,n=!1,s=0){let r=[this];function i(o,l){let a=o.matchFragment(e,s);if(a&&(!n||a.validEnd))return D.from(l.map(c=>c.createAndFill()));for(let c=0;c<o.next.length;c++){let{type:u,next:f}=o.next[c];if(!(u.isText||u.hasRequiredAttrs())&&r.indexOf(f)==-1){r.push(f);let d=i(f,l.concat(u));if(d)return d}}return null}return i(this,[])}findWrapping(e){for(let s=0;s<this.wrapCache.length;s+=2)if(this.wrapCache[s]==e)return this.wrapCache[s+1];let n=this.computeWrapping(e);return this.wrapCache.push(e,n),n}computeWrapping(e){let n=Object.create(null),s=[{match:this,type:null,via:null}];for(;s.length;){let r=s.shift(),i=r.match;if(i.matchType(e)){let o=[];for(let l=r;l.type;l=l.via)o.push(l.type);return o.reverse()}for(let o=0;o<i.next.length;o++){let{type:l,next:a}=i.next[o];!l.isLeaf&&!l.hasRequiredAttrs()&&!(l.name in n)&&(!r.type||a.validEnd)&&(s.push({match:l.contentMatch,type:l,via:r}),n[l.name]=!0)}}return null}get edgeCount(){return this.next.length}edge(e){if(e>=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function n(s){e.push(s);for(let r=0;r<s.next.length;r++)e.indexOf(s.next[r].next)==-1&&n(s.next[r].next)}return n(this),e.map((s,r)=>{let i=r+(s.validEnd?\"*\":\" \")+\" \";for(let o=0;o<s.next.length;o++)i+=(o?\", \":\"\")+s.next[o].type.name+\"->\"+e.indexOf(s.next[o].next);return i}).join(`\n`)}}gr.empty=new gr(!0);class UE{constructor(e,n){this.string=e,this.nodeTypes=n,this.inline=null,this.pos=0,this.tokens=e.split(/\\s*(?=\\b|\\W|$)/),this.tokens[this.tokens.length-1]==\"\"&&this.tokens.pop(),this.tokens[0]==\"\"&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw new SyntaxError(e+\" (in content expression '\"+this.string+\"')\")}}function t1(t){let e=[];do e.push(KE(t));while(t.eat(\"|\"));return e.length==1?e[0]:{type:\"choice\",exprs:e}}function KE(t){let e=[];do e.push(qE(t));while(t.next&&t.next!=\")\"&&t.next!=\"|\");return e.length==1?e[0]:{type:\"seq\",exprs:e}}function qE(t){let e=YE(t);for(;;)if(t.eat(\"+\"))e={type:\"plus\",expr:e};else if(t.eat(\"*\"))e={type:\"star\",expr:e};else if(t.eat(\"?\"))e={type:\"opt\",expr:e};else if(t.eat(\"{\"))e=JE(t,e);else break;return e}function nm(t){/\\D/.test(t.next)&&t.err(\"Expected number, got '\"+t.next+\"'\");let e=Number(t.next);return t.pos++,e}function JE(t,e){let n=nm(t),s=n;return t.eat(\",\")&&(t.next!=\"}\"?s=nm(t):s=-1),t.eat(\"}\")||t.err(\"Unclosed braced range\"),{type:\"range\",min:n,max:s,expr:e}}function GE(t,e){let n=t.nodeTypes,s=n[e];if(s)return[s];let r=[];for(let i in n){let o=n[i];o.isInGroup(e)&&r.push(o)}return r.length==0&&t.err(\"No node type or group '\"+e+\"' found\"),r}function YE(t){if(t.eat(\"(\")){let e=t1(t);return t.eat(\")\")||t.err(\"Missing closing paren\"),e}else if(/\\W/.test(t.next))t.err(\"Unexpected token '\"+t.next+\"'\");else{let e=GE(t,t.next).map(n=>(t.inline==null?t.inline=n.isInline:t.inline!=n.isInline&&t.err(\"Mixing inline and block content\"),{type:\"name\",value:n}));return t.pos++,e.length==1?e[0]:{type:\"choice\",exprs:e}}}function XE(t){let e=[[]];return r(i(t,0),n()),e;function n(){return e.push([])-1}function s(o,l,a){let c={term:a,to:l};return e[o].push(c),c}function r(o,l){o.forEach(a=>a.to=l)}function i(o,l){if(o.type==\"choice\")return o.exprs.reduce((a,c)=>a.concat(i(c,l)),[]);if(o.type==\"seq\")for(let a=0;;a++){let c=i(o.exprs[a],l);if(a==o.exprs.length-1)return c;r(c,l=n())}else if(o.type==\"star\"){let a=n();return s(l,a),r(i(o.expr,a),a),[s(a)]}else if(o.type==\"plus\"){let a=n();return r(i(o.expr,l),a),r(i(o.expr,a),a),[s(a)]}else{if(o.type==\"opt\")return[s(l)].concat(i(o.expr,l));if(o.type==\"range\"){let a=l;for(let c=0;c<o.min;c++){let u=n();r(i(o.expr,a),u),a=u}if(o.max==-1)r(i(o.expr,a),a);else for(let c=o.min;c<o.max;c++){let u=n();s(a,u),r(i(o.expr,a),u),a=u}return[s(a)]}else{if(o.type==\"name\")return[s(l,void 0,o.value)];throw new Error(\"Unknown expr type\")}}}}function n1(t,e){return e-t}function sm(t,e){let n=[];return s(e),n.sort(n1);function s(r){let i=t[r];if(i.length==1&&!i[0].term)return s(i[0].to);n.push(r);for(let o=0;o<i.length;o++){let{term:l,to:a}=i[o];!l&&n.indexOf(a)==-1&&s(a)}}}function QE(t){let e=Object.create(null);return n(sm(t,0));function n(s){let r=[];s.forEach(o=>{t[o].forEach(({term:l,to:a})=>{if(!l)return;let c;for(let u=0;u<r.length;u++)r[u][0]==l&&(c=r[u][1]);sm(t,a).forEach(u=>{c||r.push([l,c=[]]),c.indexOf(u)==-1&&c.push(u)})})});let i=e[s.join(\",\")]=new gr(s.indexOf(t.length-1)>-1);for(let o=0;o<r.length;o++){let l=r[o][1].sort(n1);i.next.push({type:r[o][0],next:e[l.join(\",\")]||n(l)})}return i}}function ZE(t,e){for(let n=0,s=[t];n<s.length;n++){let r=s[n],i=!r.validEnd,o=[];for(let l=0;l<r.next.length;l++){let{type:a,next:c}=r.next[l];o.push(a.name),i&&!(a.isText||a.hasRequiredAttrs())&&(i=!1),s.indexOf(c)==-1&&s.push(c)}i&&e.err(\"Only non-generatable nodes (\"+o.join(\", \")+\") in a required position (see https://prosemirror.net/docs/guide/#generatable)\")}}function s1(t){let e=Object.create(null);for(let n in t){let s=t[n];if(!s.hasDefault)return null;e[n]=s.default}return e}function r1(t,e){let n=Object.create(null);for(let s in t){let r=e&&e[s];if(r===void 0){let i=t[s];if(i.hasDefault)r=i.default;else throw new RangeError(\"No value supplied for attribute \"+s)}n[s]=r}return n}function i1(t,e,n,s){for(let r in e)if(!(r in t))throw new RangeError(`Unsupported attribute ${r} for ${n} of type ${r}`);for(let r in t){let i=t[r];i.validate&&i.validate(e[r])}}function o1(t,e){let n=Object.create(null);if(e)for(let s in e)n[s]=new tM(t,s,e[s]);return n}let rm=class l1{constructor(e,n,s){this.name=e,this.schema=n,this.spec=s,this.markSet=null,this.groups=s.group?s.group.split(\" \"):[],this.attrs=o1(e,s.attrs),this.defaultAttrs=s1(this.attrs),this.contentMatch=null,this.inlineContent=null,this.isBlock=!(s.inline||e==\"text\"),this.isText=e==\"text\"}get isInline(){return!this.isBlock}get isTextblock(){return this.isBlock&&this.inlineContent}get isLeaf(){return this.contentMatch==gr.empty}get isAtom(){return this.isLeaf||!!this.spec.atom}isInGroup(e){return this.groups.indexOf(e)>-1}get whitespace(){return this.spec.whitespace||(this.spec.code?\"pre\":\"normal\")}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:r1(this.attrs,e)}create(e=null,n,s){if(this.isText)throw new Error(\"NodeType.create can't construct text nodes\");return new Is(this,this.computeAttrs(e),D.from(n),Ce.setFrom(s))}createChecked(e=null,n,s){return n=D.from(n),this.checkContent(n),new Is(this,this.computeAttrs(e),n,Ce.setFrom(s))}createAndFill(e=null,n,s){if(e=this.computeAttrs(e),n=D.from(n),n.size){let o=this.contentMatch.fillBefore(n);if(!o)return null;n=o.append(n)}let r=this.contentMatch.matchFragment(n),i=r&&r.fillBefore(D.empty,!0);return i?new Is(this,e,n.append(i),Ce.setFrom(s)):null}validContent(e){let n=this.contentMatch.matchFragment(e);if(!n||!n.validEnd)return!1;for(let s=0;s<e.childCount;s++)if(!this.allowsMarks(e.child(s).marks))return!1;return!0}checkContent(e){if(!this.validContent(e))throw new RangeError(`Invalid content for node ${this.name}: ${e.toString().slice(0,50)}`)}checkAttrs(e){i1(this.attrs,e,\"node\",this.name)}allowsMarkType(e){return this.markSet==null||this.markSet.indexOf(e)>-1}allowsMarks(e){if(this.markSet==null)return!0;for(let n=0;n<e.length;n++)if(!this.allowsMarkType(e[n].type))return!1;return!0}allowedMarks(e){if(this.markSet==null)return e;let n;for(let s=0;s<e.length;s++)this.allowsMarkType(e[s].type)?n&&n.push(e[s]):n||(n=e.slice(0,s));return n?n.length?n:Ce.none:e}static compile(e,n){let s=Object.create(null);e.forEach((i,o)=>s[i]=new l1(i,n,o));let r=n.spec.topNode||\"doc\";if(!s[r])throw new RangeError(\"Schema is missing its top node type ('\"+r+\"')\");if(!s.text)throw new RangeError(\"Every schema needs a 'text' type\");for(let i in s.text.attrs)throw new RangeError(\"The text node type should not have attributes\");return s}};function eM(t,e,n){let s=n.split(\"|\");return r=>{let i=r===null?\"null\":typeof r;if(s.indexOf(i)<0)throw new RangeError(`Expected value of type ${s} for attribute ${e} on type ${t}, got ${i}`)}}class tM{constructor(e,n,s){this.hasDefault=Object.prototype.hasOwnProperty.call(s,\"default\"),this.default=s.default,this.validate=typeof s.validate==\"string\"?eM(e,n,s.validate):s.validate}get isRequired(){return!this.hasDefault}}class Rc{constructor(e,n,s,r){this.name=e,this.rank=n,this.schema=s,this.spec=r,this.attrs=o1(e,r.attrs),this.excluded=null;let i=s1(this.attrs);this.instance=i?new Ce(this,i):null}create(e=null){return!e&&this.instance?this.instance:new Ce(this,r1(this.attrs,e))}static compile(e,n){let s=Object.create(null),r=0;return e.forEach((i,o)=>s[i]=new Rc(i,r++,n,o)),s}removeFromSet(e){for(var n=0;n<e.length;n++)e[n].type==this&&(e=e.slice(0,n).concat(e.slice(n+1)),n--);return e}isInSet(e){for(let n=0;n<e.length;n++)if(e[n].type==this)return e[n]}checkAttrs(e){i1(this.attrs,e,\"mark\",this.name)}excludes(e){return this.excluded.indexOf(e)>-1}}class a1{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let n=this.spec={};for(let r in e)n[r]=e[r];n.nodes=et.from(e.nodes),n.marks=et.from(e.marks||{}),this.nodes=rm.compile(this.spec.nodes,this),this.marks=Rc.compile(this.spec.marks,this);let s=Object.create(null);for(let r in this.nodes){if(r in this.marks)throw new RangeError(r+\" can not be both a node and a mark\");let i=this.nodes[r],o=i.spec.content||\"\",l=i.spec.marks;if(i.contentMatch=s[o]||(s[o]=gr.parse(o,this.nodes)),i.inlineContent=i.contentMatch.inlineContent,i.spec.linebreakReplacement){if(this.linebreakReplacement)throw new RangeError(\"Multiple linebreak nodes defined\");if(!i.isInline||!i.isLeaf)throw new RangeError(\"Linebreak replacement nodes must be inline leaf nodes\");this.linebreakReplacement=i}i.markSet=l==\"_\"?null:l?im(this,l.split(\" \")):l==\"\"||!i.inlineContent?[]:null}for(let r in this.marks){let i=this.marks[r],o=i.spec.excludes;i.excluded=o==null?[i]:o==\"\"?[]:im(this,o.split(\" \"))}this.nodeFromJSON=r=>Is.fromJSON(this,r),this.markFromJSON=r=>Ce.fromJSON(this,r),this.topNodeType=this.nodes[this.spec.topNode||\"doc\"],this.cached.wrappings=Object.create(null)}node(e,n=null,s,r){if(typeof e==\"string\")e=this.nodeType(e);else if(e instanceof rm){if(e.schema!=this)throw new RangeError(\"Node type from different schema used (\"+e.name+\")\")}else throw new RangeError(\"Invalid node type: \"+e);return e.createChecked(n,s,r)}text(e,n){let s=this.nodes.text;return new wa(s,s.defaultAttrs,e,Ce.setFrom(n))}mark(e,n){return typeof e==\"string\"&&(e=this.marks[e]),e.create(n)}nodeType(e){let n=this.nodes[e];if(!n)throw new RangeError(\"Unknown node type: \"+e);return n}}function im(t,e){let n=[];for(let s=0;s<e.length;s++){let r=e[s],i=t.marks[r],o=i;if(i)n.push(i);else for(let l in t.marks){let a=t.marks[l];(r==\"_\"||a.spec.group&&a.spec.group.split(\" \").indexOf(r)>-1)&&n.push(o=a)}if(!o)throw new SyntaxError(\"Unknown mark type: '\"+e[s]+\"'\")}return n}function nM(t){return t.tag!=null}function sM(t){return t.style!=null}class _s{constructor(e,n){this.schema=e,this.rules=n,this.tags=[],this.styles=[];let s=this.matchedStyles=[];n.forEach(r=>{if(nM(r))this.tags.push(r);else if(sM(r)){let i=/[^=]*/.exec(r.style)[0];s.indexOf(i)<0&&s.push(i),this.styles.push(r)}}),this.normalizeLists=!this.tags.some(r=>{if(!/^(ul|ol)\\b/.test(r.tag)||!r.node)return!1;let i=e.nodes[r.node];return i.contentMatch.matchType(i)})}parse(e,n={}){let s=new lm(this,n,!1);return s.addAll(e,Ce.none,n.from,n.to),s.finish()}parseSlice(e,n={}){let s=new lm(this,n,!0);return s.addAll(e,Ce.none,n.from,n.to),K.maxOpen(s.finish())}matchTag(e,n,s){for(let r=s?this.tags.indexOf(s)+1:0;r<this.tags.length;r++){let i=this.tags[r];if(oM(e,i.tag)&&(i.namespace===void 0||e.namespaceURI==i.namespace)&&(!i.context||n.matchesContext(i.context))){if(i.getAttrs){let o=i.getAttrs(e);if(o===!1)continue;i.attrs=o||void 0}return i}}}matchStyle(e,n,s,r){for(let i=r?this.styles.indexOf(r)+1:0;i<this.styles.length;i++){let o=this.styles[i],l=o.style;if(!(l.indexOf(e)!=0||o.context&&!s.matchesContext(o.context)||l.length>e.length&&(l.charCodeAt(e.length)!=61||l.slice(e.length+1)!=n))){if(o.getAttrs){let a=o.getAttrs(n);if(a===!1)continue;o.attrs=a||void 0}return o}}}static schemaRules(e){let n=[];function s(r){let i=r.priority==null?50:r.priority,o=0;for(;o<n.length;o++){let l=n[o];if((l.priority==null?50:l.priority)<i)break}n.splice(o,0,r)}for(let r in e.marks){let i=e.marks[r].spec.parseDOM;i&&i.forEach(o=>{s(o=am(o)),o.mark||o.ignore||o.clearMark||(o.mark=r)})}for(let r in e.nodes){let i=e.nodes[r].spec.parseDOM;i&&i.forEach(o=>{s(o=am(o)),o.node||o.ignore||o.mark||(o.node=r)})}return n}static fromSchema(e){return e.cached.domParser||(e.cached.domParser=new _s(e,_s.schemaRules(e)))}}const c1={address:!0,article:!0,aside:!0,blockquote:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},rM={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},u1={ol:!0,ul:!0},To=1,bf=2,Xi=4;function om(t,e,n){return e!=null?(e?To:0)|(e===\"full\"?bf:0):t&&t.whitespace==\"pre\"?To|bf:n&~Xi}class pl{constructor(e,n,s,r,i,o){this.type=e,this.attrs=n,this.marks=s,this.solid=r,this.options=o,this.content=[],this.activeMarks=Ce.none,this.match=i||(o&Xi?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let n=this.type.contentMatch.fillBefore(D.from(e));if(n)this.match=this.type.contentMatch.matchFragment(n);else{let s=this.type.contentMatch,r;return(r=s.findWrapping(e.type))?(this.match=s,r):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&To)){let s=this.content[this.content.length-1],r;if(s&&s.isText&&(r=/[ \\t\\r\\n\\u000c]+$/.exec(s.text))){let i=s;s.text.length==r[0].length?this.content.pop():this.content[this.content.length-1]=i.withText(i.text.slice(0,i.text.length-r[0].length))}}let n=D.from(this.content);return!e&&this.match&&(n=n.append(this.match.fillBefore(D.empty,!0))),this.type?this.type.create(this.attrs,n,this.marks):n}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!c1.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}}class lm{constructor(e,n,s){this.parser=e,this.options=n,this.isOpen=s,this.open=0,this.localPreserveWS=!1;let r=n.topNode,i,o=om(null,n.preserveWhitespace,0)|(s?Xi:0);r?i=new pl(r.type,r.attrs,Ce.none,!0,n.topMatch||r.type.contentMatch,o):s?i=new pl(null,null,Ce.none,!0,null,o):i=new pl(e.schema.topNodeType,null,Ce.none,!0,null,o),this.nodes=[i],this.find=n.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(e,n){e.nodeType==3?this.addTextNode(e,n):e.nodeType==1&&this.addElement(e,n)}addTextNode(e,n){let s=e.nodeValue,r=this.top,i=r.options&bf?\"full\":this.localPreserveWS||(r.options&To)>0,{schema:o}=this.parser;if(i===\"full\"||r.inlineContext(e)||/[^ \\t\\r\\n\\u000c]/.test(s)){if(i)if(i===\"full\")s=s.replace(/\\r\\n?/g,`\n`);else if(o.linebreakReplacement&&/[\\r\\n]/.test(s)&&this.top.findWrapping(o.linebreakReplacement.create())){let l=s.split(/\\r?\\n|\\r/);for(let a=0;a<l.length;a++)a&&this.insertNode(o.linebreakReplacement.create(),n,!0),l[a]&&this.insertNode(o.text(l[a]),n,!/\\S/.test(l[a]));s=\"\"}else s=s.replace(/\\r?\\n|\\r/g,\" \");else if(s=s.replace(/[ \\t\\r\\n\\u000c]+/g,\" \"),/^[ \\t\\r\\n\\u000c]/.test(s)&&this.open==this.nodes.length-1){let l=r.content[r.content.length-1],a=e.previousSibling;(!l||a&&a.nodeName==\"BR\"||l.isText&&/[ \\t\\r\\n\\u000c]$/.test(l.text))&&(s=s.slice(1))}s&&this.insertNode(o.text(s),n,!/\\S/.test(s)),this.findInText(e)}else this.findInside(e)}addElement(e,n,s){let r=this.localPreserveWS,i=this.top;(e.tagName==\"PRE\"||/pre/.test(e.style&&e.style.whiteSpace))&&(this.localPreserveWS=!0);let o=e.nodeName.toLowerCase(),l;u1.hasOwnProperty(o)&&this.parser.normalizeLists&&iM(e);let a=this.options.ruleFromNode&&this.options.ruleFromNode(e)||(l=this.parser.matchTag(e,this,s));e:if(a?a.ignore:rM.hasOwnProperty(o))this.findInside(e),this.ignoreFallback(e,n);else if(!a||a.skip||a.closeParent){a&&a.closeParent?this.open=Math.max(0,this.open-1):a&&a.skip.nodeType&&(e=a.skip);let c,u=this.needsBlock;if(c1.hasOwnProperty(o))i.content.length&&i.content[0].isInline&&this.open&&(this.open--,i=this.top),c=!0,i.type||(this.needsBlock=!0);else if(!e.firstChild){this.leafFallback(e,n);break e}let f=a&&a.skip?n:this.readStyles(e,n);f&&this.addAll(e,f),c&&this.sync(i),this.needsBlock=u}else{let c=this.readStyles(e,n);c&&this.addElementByRule(e,a,c,a.consuming===!1?l:void 0)}this.localPreserveWS=r}leafFallback(e,n){e.nodeName==\"BR\"&&this.top.type&&this.top.type.inlineContent&&this.addTextNode(e.ownerDocument.createTextNode(`\n`),n)}ignoreFallback(e,n){e.nodeName==\"BR\"&&(!this.top.type||!this.top.type.inlineContent)&&this.findPlace(this.parser.schema.text(\"-\"),n,!0)}readStyles(e,n){let s=e.style;if(s&&s.length)for(let r=0;r<this.parser.matchedStyles.length;r++){let i=this.parser.matchedStyles[r],o=s.getPropertyValue(i);if(o)for(let l=void 0;;){let a=this.parser.matchStyle(i,o,this,l);if(!a)break;if(a.ignore)return null;if(a.clearMark?n=n.filter(c=>!a.clearMark(c)):n=n.concat(this.parser.schema.marks[a.mark].create(a.attrs)),a.consuming===!1)l=a;else break}}return n}addElementByRule(e,n,s,r){let i,o;if(n.node)if(o=this.parser.schema.nodes[n.node],o.isLeaf)this.insertNode(o.create(n.attrs),s,e.nodeName==\"BR\")||this.leafFallback(e,s);else{let a=this.enter(o,n.attrs||null,s,n.preserveWhitespace);a&&(i=!0,s=a)}else{let a=this.parser.schema.marks[n.mark];s=s.concat(a.create(n.attrs))}let l=this.top;if(o&&o.isLeaf)this.findInside(e);else if(r)this.addElement(e,s,r);else if(n.getContent)this.findInside(e),n.getContent(e,this.parser.schema).forEach(a=>this.insertNode(a,s,!1));else{let a=e;typeof n.contentElement==\"string\"?a=e.querySelector(n.contentElement):typeof n.contentElement==\"function\"?a=n.contentElement(e):n.contentElement&&(a=n.contentElement),this.findAround(e,a,!0),this.addAll(a,s),this.findAround(e,a,!1)}i&&this.sync(l)&&this.open--}addAll(e,n,s,r){let i=s||0;for(let o=s?e.childNodes[s]:e.firstChild,l=r==null?null:e.childNodes[r];o!=l;o=o.nextSibling,++i)this.findAtPoint(e,i),this.addDOM(o,n);this.findAtPoint(e,i)}findPlace(e,n,s){let r,i;for(let o=this.open,l=0;o>=0;o--){let a=this.nodes[o],c=a.findWrapping(e);if(c&&(!r||r.length>c.length+l)&&(r=c,i=a,!c.length))break;if(a.solid){if(s)break;l+=2}}if(!r)return null;this.sync(i);for(let o=0;o<r.length;o++)n=this.enterInner(r[o],null,n,!1);return n}insertNode(e,n,s){if(e.isInline&&this.needsBlock&&!this.top.type){let i=this.textblockFromContext();i&&(n=this.enterInner(i,null,n))}let r=this.findPlace(e,n,s);if(r){this.closeExtra();let i=this.top;i.match&&(i.match=i.match.matchType(e.type));let o=Ce.none;for(let l of r.concat(e.marks))(i.type?i.type.allowsMarkType(l.type):cm(l.type,e.type))&&(o=l.addToSet(o));return i.content.push(e.mark(o)),!0}return!1}enter(e,n,s,r){let i=this.findPlace(e.create(n),s,!1);return i&&(i=this.enterInner(e,n,s,!0,r)),i}enterInner(e,n,s,r=!1,i){this.closeExtra();let o=this.top;o.match=o.match&&o.match.matchType(e);let l=om(e,i,o.options);o.options&Xi&&o.content.length==0&&(l|=Xi);let a=Ce.none;return s=s.filter(c=>(o.type?o.type.allowsMarkType(c.type):cm(c.type,e))?(a=c.addToSet(a),!1):!0),this.nodes.push(new pl(e,n,a,r,null,l)),this.open++,s}closeExtra(e=!1){let n=this.nodes.length-1;if(n>this.open){for(;n>this.open;n--)this.nodes[n-1].content.push(this.nodes[n].finish(e));this.nodes.length=this.open+1}}finish(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(!!(this.isOpen||this.options.topOpen))}sync(e){for(let n=this.open;n>=0;n--){if(this.nodes[n]==e)return this.open=n,!0;this.localPreserveWS&&(this.nodes[n].options|=To)}return!1}get currentPos(){this.closeExtra();let e=0;for(let n=this.open;n>=0;n--){let s=this.nodes[n].content;for(let r=s.length-1;r>=0;r--)e+=s[r].nodeSize;n&&e++}return e}findAtPoint(e,n){if(this.find)for(let s=0;s<this.find.length;s++)this.find[s].node==e&&this.find[s].offset==n&&(this.find[s].pos=this.currentPos)}findInside(e){if(this.find)for(let n=0;n<this.find.length;n++)this.find[n].pos==null&&e.nodeType==1&&e.contains(this.find[n].node)&&(this.find[n].pos=this.currentPos)}findAround(e,n,s){if(e!=n&&this.find)for(let r=0;r<this.find.length;r++)this.find[r].pos==null&&e.nodeType==1&&e.contains(this.find[r].node)&&n.compareDocumentPosition(this.find[r].node)&(s?2:4)&&(this.find[r].pos=this.currentPos)}findInText(e){if(this.find)for(let n=0;n<this.find.length;n++)this.find[n].node==e&&(this.find[n].pos=this.currentPos-(e.nodeValue.length-this.find[n].offset))}matchesContext(e){if(e.indexOf(\"|\")>-1)return e.split(/\\s*\\|\\s*/).some(this.matchesContext,this);let n=e.split(\"/\"),s=this.options.context,r=!this.isOpen&&(!s||s.parent.type==this.nodes[0].type),i=-(s?s.depth+1:0)+(r?0:1),o=(l,a)=>{for(;l>=0;l--){let c=n[l];if(c==\"\"){if(l==n.length-1||l==0)continue;for(;a>=i;a--)if(o(l-1,a))return!0;return!1}else{let u=a>0||a==0&&r?this.nodes[a].type:s&&a>=i?s.node(a-i).type:null;if(!u||u.name!=c&&!u.isInGroup(c))return!1;a--}}return!0};return o(n.length-1,this.open)}textblockFromContext(){let e=this.options.context;if(e)for(let n=e.depth;n>=0;n--){let s=e.node(n).contentMatchAt(e.indexAfter(n)).defaultType;if(s&&s.isTextblock&&s.defaultAttrs)return s}for(let n in this.parser.schema.nodes){let s=this.parser.schema.nodes[n];if(s.isTextblock&&s.defaultAttrs)return s}}}function iM(t){for(let e=t.firstChild,n=null;e;e=e.nextSibling){let s=e.nodeType==1?e.nodeName.toLowerCase():null;s&&u1.hasOwnProperty(s)&&n?(n.appendChild(e),e=n):s==\"li\"?n=e:s&&(n=null)}}function oM(t,e){return(t.matches||t.msMatchesSelector||t.webkitMatchesSelector||t.mozMatchesSelector).call(t,e)}function am(t){let e={};for(let n in t)e[n]=t[n];return e}function cm(t,e){let n=e.schema.nodes;for(let s in n){let r=n[s];if(!r.allowsMarkType(t))continue;let i=[],o=l=>{i.push(l);for(let a=0;a<l.edgeCount;a++){let{type:c,next:u}=l.edge(a);if(c==e||i.indexOf(u)<0&&o(u))return!0}};if(o(r.contentMatch))return!0}}class Nr{constructor(e,n){this.nodes=e,this.marks=n}serializeFragment(e,n={},s){s||(s=pu(n).createDocumentFragment());let r=s,i=[];return e.forEach(o=>{if(i.length||o.marks.length){let l=0,a=0;for(;l<i.length&&a<o.marks.length;){let c=o.marks[a];if(!this.marks[c.type.name]){a++;continue}if(!c.eq(i[l][0])||c.type.spec.spanning===!1)break;l++,a++}for(;l<i.length;)r=i.pop()[1];for(;a<o.marks.length;){let c=o.marks[a++],u=this.serializeMark(c,o.isInline,n);u&&(i.push([c,r]),r.appendChild(u.dom),r=u.contentDOM||u.dom)}}r.appendChild(this.serializeNodeInner(o,n))}),s}serializeNodeInner(e,n){let{dom:s,contentDOM:r}=Ll(pu(n),this.nodes[e.type.name](e),null,e.attrs);if(r){if(e.isLeaf)throw new RangeError(\"Content hole not allowed in a leaf node spec\");this.serializeFragment(e.content,n,r)}return s}serializeNode(e,n={}){let s=this.serializeNodeInner(e,n);for(let r=e.marks.length-1;r>=0;r--){let i=this.serializeMark(e.marks[r],e.isInline,n);i&&((i.contentDOM||i.dom).appendChild(s),s=i.dom)}return s}serializeMark(e,n,s={}){let r=this.marks[e.type.name];return r&&Ll(pu(s),r(e,n),null,e.attrs)}static renderSpec(e,n,s=null,r){return Ll(e,n,s,r)}static fromSchema(e){return e.cached.domSerializer||(e.cached.domSerializer=new Nr(this.nodesFromSchema(e),this.marksFromSchema(e)))}static nodesFromSchema(e){let n=um(e.nodes);return n.text||(n.text=s=>s.text),n}static marksFromSchema(e){return um(e.marks)}}function um(t){let e={};for(let n in t){let s=t[n].spec.toDOM;s&&(e[n]=s)}return e}function pu(t){return t.document||window.document}const fm=new WeakMap;function lM(t){let e=fm.get(t);return e===void 0&&fm.set(t,e=aM(t)),e}function aM(t){let e=null;function n(s){if(s&&typeof s==\"object\")if(Array.isArray(s))if(typeof s[0]==\"string\")e||(e=[]),e.push(s);else for(let r=0;r<s.length;r++)n(s[r]);else for(let r in s)n(s[r])}return n(t),e}function Ll(t,e,n,s){if(typeof e==\"string\")return{dom:t.createTextNode(e)};if(e.nodeType!=null)return{dom:e};if(e.dom&&e.dom.nodeType!=null)return e;let r=e[0],i;if(typeof r!=\"string\")throw new RangeError(\"Invalid array passed to renderSpec\");if(s&&(i=lM(s))&&i.indexOf(e)>-1)throw new RangeError(\"Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.\");let o=r.indexOf(\" \");o>0&&(n=r.slice(0,o),r=r.slice(o+1));let l,a=n?t.createElementNS(n,r):t.createElement(r),c=e[1],u=1;if(c&&typeof c==\"object\"&&c.nodeType==null&&!Array.isArray(c)){u=2;for(let f in c)if(c[f]!=null){let d=f.indexOf(\" \");d>0?a.setAttributeNS(f.slice(0,d),f.slice(d+1),c[f]):f==\"style\"&&a.style?a.style.cssText=c[f]:a.setAttribute(f,c[f])}}for(let f=u;f<e.length;f++){let d=e[f];if(d===0){if(f<e.length-1||f>u)throw new RangeError(\"Content hole must be the only child of its parent node\");return{dom:a,contentDOM:a}}else{let{dom:h,contentDOM:p}=Ll(t,d,n,s);if(a.appendChild(h),p){if(l)throw new RangeError(\"Multiple content holes\");l=p}}}return{dom:a,contentDOM:l}}const f1=65535,d1=Math.pow(2,16);function cM(t,e){return t+e*d1}function dm(t){return t&f1}function uM(t){return(t-(t&f1))/d1}const h1=1,p1=2,Bl=4,m1=8;class Sf{constructor(e,n,s){this.pos=e,this.delInfo=n,this.recover=s}get deleted(){return(this.delInfo&m1)>0}get deletedBefore(){return(this.delInfo&(h1|Bl))>0}get deletedAfter(){return(this.delInfo&(p1|Bl))>0}get deletedAcross(){return(this.delInfo&Bl)>0}}class $t{constructor(e,n=!1){if(this.ranges=e,this.inverted=n,!e.length&&$t.empty)return $t.empty}recover(e){let n=0,s=dm(e);if(!this.inverted)for(let r=0;r<s;r++)n+=this.ranges[r*3+2]-this.ranges[r*3+1];return this.ranges[s*3]+n+uM(e)}mapResult(e,n=1){return this._map(e,n,!1)}map(e,n=1){return this._map(e,n,!0)}_map(e,n,s){let r=0,i=this.inverted?2:1,o=this.inverted?1:2;for(let l=0;l<this.ranges.length;l+=3){let a=this.ranges[l]-(this.inverted?r:0);if(a>e)break;let c=this.ranges[l+i],u=this.ranges[l+o],f=a+c;if(e<=f){let d=c?e==a?-1:e==f?1:n:n,h=a+r+(d<0?0:u);if(s)return h;let p=e==(n<0?a:f)?null:cM(l/3,e-a),m=e==a?p1:e==f?h1:Bl;return(n<0?e!=a:e!=f)&&(m|=m1),new Sf(h,m,p)}r+=u-c}return s?e+r:new Sf(e+r,0,null)}touches(e,n){let s=0,r=dm(n),i=this.inverted?2:1,o=this.inverted?1:2;for(let l=0;l<this.ranges.length;l+=3){let a=this.ranges[l]-(this.inverted?s:0);if(a>e)break;let c=this.ranges[l+i],u=a+c;if(e<=u&&l==r*3)return!0;s+=this.ranges[l+o]-c}return!1}forEach(e){let n=this.inverted?2:1,s=this.inverted?1:2;for(let r=0,i=0;r<this.ranges.length;r+=3){let o=this.ranges[r],l=o-(this.inverted?i:0),a=o+(this.inverted?0:i),c=this.ranges[r+n],u=this.ranges[r+s];e(l,l+c,a,a+u),i+=u-c}}invert(){return new $t(this.ranges,!this.inverted)}toString(){return(this.inverted?\"-\":\"\")+JSON.stringify(this.ranges)}static offset(e){return e==0?$t.empty:new $t(e<0?[0,-e,0]:[0,0,e])}}$t.empty=new $t([]);class Eo{constructor(e,n,s=0,r=e?e.length:0){this.mirror=n,this.from=s,this.to=r,this._maps=e||[],this.ownData=!(e||n)}get maps(){return this._maps}slice(e=0,n=this.maps.length){return new Eo(this._maps,this.mirror,e,n)}appendMap(e,n){this.ownData||(this._maps=this._maps.slice(),this.mirror=this.mirror&&this.mirror.slice(),this.ownData=!0),this.to=this._maps.push(e),n!=null&&this.setMirror(this._maps.length-1,n)}appendMapping(e){for(let n=0,s=this._maps.length;n<e._maps.length;n++){let r=e.getMirror(n);this.appendMap(e._maps[n],r!=null&&r<n?s+r:void 0)}}getMirror(e){if(this.mirror){for(let n=0;n<this.mirror.length;n++)if(this.mirror[n]==e)return this.mirror[n+(n%2?-1:1)]}}setMirror(e,n){this.mirror||(this.mirror=[]),this.mirror.push(e,n)}appendMappingInverted(e){for(let n=e.maps.length-1,s=this._maps.length+e._maps.length;n>=0;n--){let r=e.getMirror(n);this.appendMap(e._maps[n].invert(),r!=null&&r>n?s-r-1:void 0)}}invert(){let e=new Eo;return e.appendMappingInverted(this),e}map(e,n=1){if(this.mirror)return this._map(e,n,!0);for(let s=this.from;s<this.to;s++)e=this._maps[s].map(e,n);return e}mapResult(e,n=1){return this._map(e,n,!1)}_map(e,n,s){let r=0;for(let i=this.from;i<this.to;i++){let o=this._maps[i],l=o.mapResult(e,n);if(l.recover!=null){let a=this.getMirror(i);if(a!=null&&a>i&&a<this.to){i=a,e=this._maps[a].recover(l.recover);continue}}r|=l.delInfo,e=l.pos}return s?e:new Sf(e,r,null)}}const mu=Object.create(null);class yt{getMap(){return $t.empty}merge(e){return null}static fromJSON(e,n){if(!n||!n.stepType)throw new RangeError(\"Invalid input for Step.fromJSON\");let s=mu[n.stepType];if(!s)throw new RangeError(`No step type ${n.stepType} defined`);return s.fromJSON(e,n)}static jsonID(e,n){if(e in mu)throw new RangeError(\"Duplicate use of step JSON ID \"+e);return mu[e]=n,n.prototype.jsonID=e,n}}class ze{constructor(e,n){this.doc=e,this.failed=n}static ok(e){return new ze(e,null)}static fail(e){return new ze(null,e)}static fromReplace(e,n,s,r){try{return ze.ok(e.replace(n,s,r))}catch(i){if(i instanceof ya)return ze.fail(i.message);throw i}}}function Jd(t,e,n){let s=[];for(let r=0;r<t.childCount;r++){let i=t.child(r);i.content.size&&(i=i.copy(Jd(i.content,e,i))),i.isInline&&(i=e(i,n,r)),s.push(i)}return D.fromArray(s)}class Ms extends yt{constructor(e,n,s){super(),this.from=e,this.to=n,this.mark=s}apply(e){let n=e.slice(this.from,this.to),s=e.resolve(this.from),r=s.node(s.sharedDepth(this.to)),i=new K(Jd(n.content,(o,l)=>!o.isAtom||!l.type.allowsMarkType(this.mark.type)?o:o.mark(this.mark.addToSet(o.marks)),r),n.openStart,n.openEnd);return ze.fromReplace(e,this.from,this.to,i)}invert(){return new ln(this.from,this.to,this.mark)}map(e){let n=e.mapResult(this.from,1),s=e.mapResult(this.to,-1);return n.deleted&&s.deleted||n.pos>=s.pos?null:new Ms(n.pos,s.pos,this.mark)}merge(e){return e instanceof Ms&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new Ms(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:\"addMark\",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,n){if(typeof n.from!=\"number\"||typeof n.to!=\"number\")throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");return new Ms(n.from,n.to,e.markFromJSON(n.mark))}}yt.jsonID(\"addMark\",Ms);class ln extends yt{constructor(e,n,s){super(),this.from=e,this.to=n,this.mark=s}apply(e){let n=e.slice(this.from,this.to),s=new K(Jd(n.content,r=>r.mark(this.mark.removeFromSet(r.marks)),e),n.openStart,n.openEnd);return ze.fromReplace(e,this.from,this.to,s)}invert(){return new Ms(this.from,this.to,this.mark)}map(e){let n=e.mapResult(this.from,1),s=e.mapResult(this.to,-1);return n.deleted&&s.deleted||n.pos>=s.pos?null:new ln(n.pos,s.pos,this.mark)}merge(e){return e instanceof ln&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new ln(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:\"removeMark\",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,n){if(typeof n.from!=\"number\"||typeof n.to!=\"number\")throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");return new ln(n.from,n.to,e.markFromJSON(n.mark))}}yt.jsonID(\"removeMark\",ln);class As extends yt{constructor(e,n){super(),this.pos=e,this.mark=n}apply(e){let n=e.nodeAt(this.pos);if(!n)return ze.fail(\"No node at mark step's position\");let s=n.type.create(n.attrs,null,this.mark.addToSet(n.marks));return ze.fromReplace(e,this.pos,this.pos+1,new K(D.from(s),0,n.isLeaf?0:1))}invert(e){let n=e.nodeAt(this.pos);if(n){let s=this.mark.addToSet(n.marks);if(s.length==n.marks.length){for(let r=0;r<n.marks.length;r++)if(!n.marks[r].isInSet(s))return new As(this.pos,n.marks[r]);return new As(this.pos,this.mark)}}return new yr(this.pos,this.mark)}map(e){let n=e.mapResult(this.pos,1);return n.deletedAfter?null:new As(n.pos,this.mark)}toJSON(){return{stepType:\"addNodeMark\",pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(e,n){if(typeof n.pos!=\"number\")throw new RangeError(\"Invalid input for AddNodeMarkStep.fromJSON\");return new As(n.pos,e.markFromJSON(n.mark))}}yt.jsonID(\"addNodeMark\",As);class yr extends yt{constructor(e,n){super(),this.pos=e,this.mark=n}apply(e){let n=e.nodeAt(this.pos);if(!n)return ze.fail(\"No node at mark step's position\");let s=n.type.create(n.attrs,null,this.mark.removeFromSet(n.marks));return ze.fromReplace(e,this.pos,this.pos+1,new K(D.from(s),0,n.isLeaf?0:1))}invert(e){let n=e.nodeAt(this.pos);return!n||!this.mark.isInSet(n.marks)?this:new As(this.pos,this.mark)}map(e){let n=e.mapResult(this.pos,1);return n.deletedAfter?null:new yr(n.pos,this.mark)}toJSON(){return{stepType:\"removeNodeMark\",pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(e,n){if(typeof n.pos!=\"number\")throw new RangeError(\"Invalid input for RemoveNodeMarkStep.fromJSON\");return new yr(n.pos,e.markFromJSON(n.mark))}}yt.jsonID(\"removeNodeMark\",yr);class qe extends yt{constructor(e,n,s,r=!1){super(),this.from=e,this.to=n,this.slice=s,this.structure=r}apply(e){return this.structure&&wf(e,this.from,this.to)?ze.fail(\"Structure replace would overwrite content\"):ze.fromReplace(e,this.from,this.to,this.slice)}getMap(){return new $t([this.from,this.to-this.from,this.slice.size])}invert(e){return new qe(this.from,this.from+this.slice.size,e.slice(this.from,this.to))}map(e){let n=e.mapResult(this.from,1),s=e.mapResult(this.to,-1);return n.deletedAcross&&s.deletedAcross?null:new qe(n.pos,Math.max(n.pos,s.pos),this.slice,this.structure)}merge(e){if(!(e instanceof qe)||e.structure||this.structure)return null;if(this.from+this.slice.size==e.from&&!this.slice.openEnd&&!e.slice.openStart){let n=this.slice.size+e.slice.size==0?K.empty:new K(this.slice.content.append(e.slice.content),this.slice.openStart,e.slice.openEnd);return new qe(this.from,this.to+(e.to-e.from),n,this.structure)}else if(e.to==this.from&&!this.slice.openStart&&!e.slice.openEnd){let n=this.slice.size+e.slice.size==0?K.empty:new K(e.slice.content.append(this.slice.content),e.slice.openStart,this.slice.openEnd);return new qe(e.from,this.to,n,this.structure)}else return null}toJSON(){let e={stepType:\"replace\",from:this.from,to:this.to};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,n){if(typeof n.from!=\"number\"||typeof n.to!=\"number\")throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");return new qe(n.from,n.to,K.fromJSON(e,n.slice),!!n.structure)}}yt.jsonID(\"replace\",qe);class Ge extends yt{constructor(e,n,s,r,i,o,l=!1){super(),this.from=e,this.to=n,this.gapFrom=s,this.gapTo=r,this.slice=i,this.insert=o,this.structure=l}apply(e){if(this.structure&&(wf(e,this.from,this.gapFrom)||wf(e,this.gapTo,this.to)))return ze.fail(\"Structure gap-replace would overwrite content\");let n=e.slice(this.gapFrom,this.gapTo);if(n.openStart||n.openEnd)return ze.fail(\"Gap is not a flat range\");let s=this.slice.insertAt(this.insert,n.content);return s?ze.fromReplace(e,this.from,this.to,s):ze.fail(\"Content does not fit in gap\")}getMap(){return new $t([this.from,this.gapFrom-this.from,this.insert,this.gapTo,this.to-this.gapTo,this.slice.size-this.insert])}invert(e){let n=this.gapTo-this.gapFrom;return new Ge(this.from,this.from+this.slice.size+n,this.from+this.insert,this.from+this.insert+n,e.slice(this.from,this.to).removeBetween(this.gapFrom-this.from,this.gapTo-this.from),this.gapFrom-this.from,this.structure)}map(e){let n=e.mapResult(this.from,1),s=e.mapResult(this.to,-1),r=this.from==this.gapFrom?n.pos:e.map(this.gapFrom,-1),i=this.to==this.gapTo?s.pos:e.map(this.gapTo,1);return n.deletedAcross&&s.deletedAcross||r<n.pos||i>s.pos?null:new Ge(n.pos,s.pos,r,i,this.slice,this.insert,this.structure)}toJSON(){let e={stepType:\"replaceAround\",from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,n){if(typeof n.from!=\"number\"||typeof n.to!=\"number\"||typeof n.gapFrom!=\"number\"||typeof n.gapTo!=\"number\"||typeof n.insert!=\"number\")throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");return new Ge(n.from,n.to,n.gapFrom,n.gapTo,K.fromJSON(e,n.slice),n.insert,!!n.structure)}}yt.jsonID(\"replaceAround\",Ge);function wf(t,e,n){let s=t.resolve(e),r=n-e,i=s.depth;for(;r>0&&i>0&&s.indexAfter(i)==s.node(i).childCount;)i--,r--;if(r>0){let o=s.node(i).maybeChild(s.indexAfter(i));for(;r>0;){if(!o||o.isLeaf)return!0;o=o.firstChild,r--}}return!1}function fM(t,e,n,s){let r=[],i=[],o,l;t.doc.nodesBetween(e,n,(a,c,u)=>{if(!a.isInline)return;let f=a.marks;if(!s.isInSet(f)&&u.type.allowsMarkType(s.type)){let d=Math.max(c,e),h=Math.min(c+a.nodeSize,n),p=s.addToSet(f);for(let m=0;m<f.length;m++)f[m].isInSet(p)||(o&&o.to==d&&o.mark.eq(f[m])?o.to=h:r.push(o=new ln(d,h,f[m])));l&&l.to==d?l.to=h:i.push(l=new Ms(d,h,s))}}),r.forEach(a=>t.step(a)),i.forEach(a=>t.step(a))}function dM(t,e,n,s){let r=[],i=0;t.doc.nodesBetween(e,n,(o,l)=>{if(!o.isInline)return;i++;let a=null;if(s instanceof Rc){let c=o.marks,u;for(;u=s.isInSet(c);)(a||(a=[])).push(u),c=u.removeFromSet(c)}else s?s.isInSet(o.marks)&&(a=[s]):a=o.marks;if(a&&a.length){let c=Math.min(l+o.nodeSize,n);for(let u=0;u<a.length;u++){let f=a[u],d;for(let h=0;h<r.length;h++){let p=r[h];p.step==i-1&&f.eq(r[h].style)&&(d=p)}d?(d.to=c,d.step=i):r.push({style:f,from:Math.max(l,e),to:c,step:i})}}}),r.forEach(o=>t.step(new ln(o.from,o.to,o.style)))}function Gd(t,e,n,s=n.contentMatch,r=!0){let i=t.doc.nodeAt(e),o=[],l=e+1;for(let a=0;a<i.childCount;a++){let c=i.child(a),u=l+c.nodeSize,f=s.matchType(c.type);if(!f)o.push(new qe(l,u,K.empty));else{s=f;for(let d=0;d<c.marks.length;d++)n.allowsMarkType(c.marks[d].type)||t.step(new ln(l,u,c.marks[d]));if(r&&c.isText&&n.whitespace!=\"pre\"){let d,h=/\\r?\\n|\\r/g,p;for(;d=h.exec(c.text);)p||(p=new K(D.from(n.schema.text(\" \",n.allowedMarks(c.marks))),0,0)),o.push(new qe(l+d.index,l+d.index+d[0].length,p))}}l=u}if(!s.validEnd){let a=s.fillBefore(D.empty,!0);t.replace(l,l,new K(a,0,0))}for(let a=o.length-1;a>=0;a--)t.step(o[a])}function hM(t,e,n){return(e==0||t.canReplace(e,t.childCount))&&(n==t.childCount||t.canReplace(0,n))}function ki(t){let n=t.parent.content.cutByIndex(t.startIndex,t.endIndex);for(let s=t.depth,r=0,i=0;;--s){let o=t.$from.node(s),l=t.$from.index(s)+r,a=t.$to.indexAfter(s)-i;if(s<t.depth&&o.canReplace(l,a,n))return s;if(s==0||o.type.spec.isolating||!hM(o,l,a))break;l&&(r=1),a<o.childCount&&(i=1)}return null}function pM(t,e,n){let{$from:s,$to:r,depth:i}=e,o=s.before(i+1),l=r.after(i+1),a=o,c=l,u=D.empty,f=0;for(let p=i,m=!1;p>n;p--)m||s.index(p)>0?(m=!0,u=D.from(s.node(p).copy(u)),f++):a--;let d=D.empty,h=0;for(let p=i,m=!1;p>n;p--)m||r.after(p+1)<r.end(p)?(m=!0,d=D.from(r.node(p).copy(d)),h++):c++;t.step(new Ge(a,c,o,l,new K(u.append(d),f,h),u.size-f,!0))}function Yd(t,e,n=null,s=t){let r=mM(t,e),i=r&&gM(s,e);return i?r.map(hm).concat({type:e,attrs:n}).concat(i.map(hm)):null}function hm(t){return{type:t,attrs:null}}function mM(t,e){let{parent:n,startIndex:s,endIndex:r}=t,i=n.contentMatchAt(s).findWrapping(e);if(!i)return null;let o=i.length?i[0]:e;return n.canReplaceWith(s,r,o)?i:null}function gM(t,e){let{parent:n,startIndex:s,endIndex:r}=t,i=n.child(s),o=e.contentMatch.findWrapping(i.type);if(!o)return null;let a=(o.length?o[o.length-1]:e).contentMatch;for(let c=s;a&&c<r;c++)a=a.matchType(n.child(c).type);return!a||!a.validEnd?null:o}function yM(t,e,n){let s=D.empty;for(let o=n.length-1;o>=0;o--){if(s.size){let l=n[o].type.contentMatch.matchFragment(s);if(!l||!l.validEnd)throw new RangeError(\"Wrapper type given to Transform.wrap does not form valid content of its parent wrapper\")}s=D.from(n[o].type.create(n[o].attrs,s))}let r=e.start,i=e.end;t.step(new Ge(r,i,r,i,new K(s,0,0),n.length,!0))}function bM(t,e,n,s,r){if(!s.isTextblock)throw new RangeError(\"Type given to setBlockType should be a textblock\");let i=t.steps.length;t.doc.nodesBetween(e,n,(o,l)=>{let a=typeof r==\"function\"?r(o):r;if(o.isTextblock&&!o.hasMarkup(s,a)&&SM(t.doc,t.mapping.slice(i).map(l),s)){let c=null;if(s.schema.linebreakReplacement){let h=s.whitespace==\"pre\",p=!!s.contentMatch.matchType(s.schema.linebreakReplacement);h&&!p?c=!1:!h&&p&&(c=!0)}c===!1&&y1(t,o,l,i),Gd(t,t.mapping.slice(i).map(l,1),s,void 0,c===null);let u=t.mapping.slice(i),f=u.map(l,1),d=u.map(l+o.nodeSize,1);return t.step(new Ge(f,d,f+1,d-1,new K(D.from(s.create(a,null,o.marks)),0,0),1,!0)),c===!0&&g1(t,o,l,i),!1}})}function g1(t,e,n,s){e.forEach((r,i)=>{if(r.isText){let o,l=/\\r?\\n|\\r/g;for(;o=l.exec(r.text);){let a=t.mapping.slice(s).map(n+1+i+o.index);t.replaceWith(a,a+1,e.type.schema.linebreakReplacement.create())}}})}function y1(t,e,n,s){e.forEach((r,i)=>{if(r.type==r.type.schema.linebreakReplacement){let o=t.mapping.slice(s).map(n+1+i);t.replaceWith(o,o+1,e.type.schema.text(`\n`))}})}function SM(t,e,n){let s=t.resolve(e),r=s.index();return s.parent.canReplaceWith(r,r+1,n)}function wM(t,e,n,s,r){let i=t.doc.nodeAt(e);if(!i)throw new RangeError(\"No node at given position\");n||(n=i.type);let o=n.create(s,null,r||i.marks);if(i.isLeaf)return t.replaceWith(e,e+i.nodeSize,o);if(!n.validContent(i.content))throw new RangeError(\"Invalid content for node type \"+n.name);t.step(new Ge(e,e+i.nodeSize,e+1,e+i.nodeSize-1,new K(D.from(o),0,0),1,!0))}function Xn(t,e,n=1,s){let r=t.resolve(e),i=r.depth-n,o=s&&s[s.length-1]||r.parent;if(i<0||r.parent.type.spec.isolating||!r.parent.canReplace(r.index(),r.parent.childCount)||!o.type.validContent(r.parent.content.cutByIndex(r.index(),r.parent.childCount)))return!1;for(let c=r.depth-1,u=n-2;c>i;c--,u--){let f=r.node(c),d=r.index(c);if(f.type.spec.isolating)return!1;let h=f.content.cutByIndex(d,f.childCount),p=s&&s[u+1];p&&(h=h.replaceChild(0,p.type.create(p.attrs)));let m=s&&s[u]||f;if(!f.canReplace(d+1,f.childCount)||!m.type.validContent(h))return!1}let l=r.indexAfter(i),a=s&&s[0];return r.node(i).canReplaceWith(l,l,a?a.type:r.node(i+1).type)}function xM(t,e,n=1,s){let r=t.doc.resolve(e),i=D.empty,o=D.empty;for(let l=r.depth,a=r.depth-n,c=n-1;l>a;l--,c--){i=D.from(r.node(l).copy(i));let u=s&&s[c];o=D.from(u?u.type.create(u.attrs,o):r.node(l).copy(o))}t.step(new qe(e,e,new K(i.append(o),n,n),!0))}function Ws(t,e){let n=t.resolve(e),s=n.index();return b1(n.nodeBefore,n.nodeAfter)&&n.parent.canReplace(s,s+1)}function CM(t,e){e.content.size||t.type.compatibleContent(e.type);let n=t.contentMatchAt(t.childCount),{linebreakReplacement:s}=t.type.schema;for(let r=0;r<e.childCount;r++){let i=e.child(r),o=i.type==s?t.type.schema.nodes.text:i.type;if(n=n.matchType(o),!n||!t.type.allowsMarks(i.marks))return!1}return n.validEnd}function b1(t,e){return!!(t&&e&&!t.isLeaf&&CM(t,e))}function Ic(t,e,n=-1){let s=t.resolve(e);for(let r=s.depth;;r--){let i,o,l=s.index(r);if(r==s.depth?(i=s.nodeBefore,o=s.nodeAfter):n>0?(i=s.node(r+1),l++,o=s.node(r).maybeChild(l)):(i=s.node(r).maybeChild(l-1),o=s.node(r+1)),i&&!i.isTextblock&&b1(i,o)&&s.node(r).canReplace(l,l+1))return e;if(r==0)break;e=n<0?s.before(r):s.after(r)}}function vM(t,e,n){let s=null,{linebreakReplacement:r}=t.doc.type.schema,i=t.doc.resolve(e-n),o=i.node().type;if(r&&o.inlineContent){let u=o.whitespace==\"pre\",f=!!o.contentMatch.matchType(r);u&&!f?s=!1:!u&&f&&(s=!0)}let l=t.steps.length;if(s===!1){let u=t.doc.resolve(e+n);y1(t,u.node(),u.before(),l)}o.inlineContent&&Gd(t,e+n-1,o,i.node().contentMatchAt(i.index()),s==null);let a=t.mapping.slice(l),c=a.map(e-n);if(t.step(new qe(c,a.map(e+n,-1),K.empty,!0)),s===!0){let u=t.doc.resolve(c);g1(t,u.node(),u.before(),t.steps.length)}return t}function kM(t,e,n){let s=t.resolve(e);if(s.parent.canReplaceWith(s.index(),s.index(),n))return e;if(s.parentOffset==0)for(let r=s.depth-1;r>=0;r--){let i=s.index(r);if(s.node(r).canReplaceWith(i,i,n))return s.before(r+1);if(i>0)return null}if(s.parentOffset==s.parent.content.size)for(let r=s.depth-1;r>=0;r--){let i=s.indexAfter(r);if(s.node(r).canReplaceWith(i,i,n))return s.after(r+1);if(i<s.node(r).childCount)return null}return null}function S1(t,e,n){let s=t.resolve(e);if(!n.content.size)return e;let r=n.content;for(let i=0;i<n.openStart;i++)r=r.firstChild.content;for(let i=1;i<=(n.openStart==0&&n.size?2:1);i++)for(let o=s.depth;o>=0;o--){let l=o==s.depth?0:s.pos<=(s.start(o+1)+s.end(o+1))/2?-1:1,a=s.index(o)+(l>0?1:0),c=s.node(o),u=!1;if(i==1)u=c.canReplace(a,a,r);else{let f=c.contentMatchAt(a).findWrapping(r.firstChild.type);u=f&&c.canReplaceWith(a,a,f[0])}if(u)return l==0?s.pos:l<0?s.before(o+1):s.after(o+1)}return null}function _c(t,e,n=e,s=K.empty){if(e==n&&!s.size)return null;let r=t.resolve(e),i=t.resolve(n);return w1(r,i,s)?new qe(e,n,s):new TM(r,i,s).fit()}function w1(t,e,n){return!n.openStart&&!n.openEnd&&t.start()==e.start()&&t.parent.canReplace(t.index(),e.index(),n.content)}class TM{constructor(e,n,s){this.$from=e,this.$to=n,this.unplaced=s,this.frontier=[],this.placed=D.empty;for(let r=0;r<=e.depth;r++){let i=e.node(r);this.frontier.push({type:i.type,match:i.contentMatchAt(e.indexAfter(r))})}for(let r=e.depth;r>0;r--)this.placed=D.from(e.node(r).copy(this.placed))}get depth(){return this.frontier.length-1}fit(){for(;this.unplaced.size;){let c=this.findFittable();c?this.placeNodes(c):this.openMore()||this.dropNode()}let e=this.mustMoveInline(),n=this.placed.size-this.depth-this.$from.depth,s=this.$from,r=this.close(e<0?this.$to:s.doc.resolve(e));if(!r)return null;let i=this.placed,o=s.depth,l=r.depth;for(;o&&l&&i.childCount==1;)i=i.firstChild.content,o--,l--;let a=new K(i,o,l);return e>-1?new Ge(s.pos,e,this.$to.pos,this.$to.end(),a,n):a.size||s.pos!=this.$to.pos?new qe(s.pos,r.pos,a):null}findFittable(){let e=this.unplaced.openStart;for(let n=this.unplaced.content,s=0,r=this.unplaced.openEnd;s<e;s++){let i=n.firstChild;if(n.childCount>1&&(r=0),i.type.spec.isolating&&r<=s){e=s;break}n=i.content}for(let n=1;n<=2;n++)for(let s=n==1?e:this.unplaced.openStart;s>=0;s--){let r,i=null;s?(i=gu(this.unplaced.content,s-1).firstChild,r=i.content):r=this.unplaced.content;let o=r.firstChild;for(let l=this.depth;l>=0;l--){let{type:a,match:c}=this.frontier[l],u,f=null;if(n==1&&(o?c.matchType(o.type)||(f=c.fillBefore(D.from(o),!1)):i&&a.compatibleContent(i.type)))return{sliceDepth:s,frontierDepth:l,parent:i,inject:f};if(n==2&&o&&(u=c.findWrapping(o.type)))return{sliceDepth:s,frontierDepth:l,parent:i,wrap:u};if(i&&c.matchType(i.type))break}}}openMore(){let{content:e,openStart:n,openEnd:s}=this.unplaced,r=gu(e,n);return!r.childCount||r.firstChild.isLeaf?!1:(this.unplaced=new K(e,n+1,Math.max(s,r.size+n>=e.size-s?n+1:0)),!0)}dropNode(){let{content:e,openStart:n,openEnd:s}=this.unplaced,r=gu(e,n);if(r.childCount<=1&&n>0){let i=e.size-n<=n+r.size;this.unplaced=new K(Bi(e,n-1,1),n-1,i?n-1:s)}else this.unplaced=new K(Bi(e,n,1),n,s)}placeNodes({sliceDepth:e,frontierDepth:n,parent:s,inject:r,wrap:i}){for(;this.depth>n;)this.closeFrontierNode();if(i)for(let m=0;m<i.length;m++)this.openFrontierNode(i[m]);let o=this.unplaced,l=s?s.content:o.content,a=o.openStart-e,c=0,u=[],{match:f,type:d}=this.frontier[n];if(r){for(let m=0;m<r.childCount;m++)u.push(r.child(m));f=f.matchFragment(r)}let h=l.size+e-(o.content.size-o.openEnd);for(;c<l.childCount;){let m=l.child(c),g=f.matchType(m.type);if(!g)break;c++,(c>1||a==0||m.content.size)&&(f=g,u.push(x1(m.mark(d.allowedMarks(m.marks)),c==1?a:0,c==l.childCount?h:-1)))}let p=c==l.childCount;p||(h=-1),this.placed=$i(this.placed,n,D.from(u)),this.frontier[n].match=f,p&&h<0&&s&&s.type==this.frontier[this.depth].type&&this.frontier.length>1&&this.closeFrontierNode();for(let m=0,g=l;m<h;m++){let y=g.lastChild;this.frontier.push({type:y.type,match:y.contentMatchAt(y.childCount)}),g=y.content}this.unplaced=p?e==0?K.empty:new K(Bi(o.content,e-1,1),e-1,h<0?o.openEnd:e-1):new K(Bi(o.content,e,c),o.openStart,o.openEnd)}mustMoveInline(){if(!this.$to.parent.isTextblock)return-1;let e=this.frontier[this.depth],n;if(!e.type.isTextblock||!yu(this.$to,this.$to.depth,e.type,e.match,!1)||this.$to.depth==this.depth&&(n=this.findCloseLevel(this.$to))&&n.depth==this.depth)return-1;let{depth:s}=this.$to,r=this.$to.after(s);for(;s>1&&r==this.$to.end(--s);)++r;return r}findCloseLevel(e){e:for(let n=Math.min(this.depth,e.depth);n>=0;n--){let{match:s,type:r}=this.frontier[n],i=n<e.depth&&e.end(n+1)==e.pos+(e.depth-(n+1)),o=yu(e,n,r,s,i);if(o){for(let l=n-1;l>=0;l--){let{match:a,type:c}=this.frontier[l],u=yu(e,l,c,a,!0);if(!u||u.childCount)continue e}return{depth:n,fit:o,move:i?e.doc.resolve(e.after(n+1)):e}}}}close(e){let n=this.findCloseLevel(e);if(!n)return null;for(;this.depth>n.depth;)this.closeFrontierNode();n.fit.childCount&&(this.placed=$i(this.placed,n.depth,n.fit)),e=n.move;for(let s=n.depth+1;s<=e.depth;s++){let r=e.node(s),i=r.type.contentMatch.fillBefore(r.content,!0,e.index(s));this.openFrontierNode(r.type,r.attrs,i)}return e}openFrontierNode(e,n=null,s){let r=this.frontier[this.depth];r.match=r.match.matchType(e),this.placed=$i(this.placed,this.depth,D.from(e.create(n,s))),this.frontier.push({type:e,match:e.contentMatch})}closeFrontierNode(){let n=this.frontier.pop().match.fillBefore(D.empty,!0);n.childCount&&(this.placed=$i(this.placed,this.frontier.length,n))}}function Bi(t,e,n){return e==0?t.cutByIndex(n,t.childCount):t.replaceChild(0,t.firstChild.copy(Bi(t.firstChild.content,e-1,n)))}function $i(t,e,n){return e==0?t.append(n):t.replaceChild(t.childCount-1,t.lastChild.copy($i(t.lastChild.content,e-1,n)))}function gu(t,e){for(let n=0;n<e;n++)t=t.firstChild.content;return t}function x1(t,e,n){if(e<=0)return t;let s=t.content;return e>1&&(s=s.replaceChild(0,x1(s.firstChild,e-1,s.childCount==1?n-1:0))),e>0&&(s=t.type.contentMatch.fillBefore(s).append(s),n<=0&&(s=s.append(t.type.contentMatch.matchFragment(s).fillBefore(D.empty,!0)))),t.copy(s)}function yu(t,e,n,s,r){let i=t.node(e),o=r?t.indexAfter(e):t.index(e);if(o==i.childCount&&!n.compatibleContent(i.type))return null;let l=s.fillBefore(i.content,!0,o);return l&&!EM(n,i.content,o)?l:null}function EM(t,e,n){for(let s=n;s<e.childCount;s++)if(!t.allowsMarks(e.child(s).marks))return!0;return!1}function MM(t){return t.spec.defining||t.spec.definingForContent}function AM(t,e,n,s){if(!s.size)return t.deleteRange(e,n);let r=t.doc.resolve(e),i=t.doc.resolve(n);if(w1(r,i,s))return t.step(new qe(e,n,s));let o=v1(r,i);o[o.length-1]==0&&o.pop();let l=-(r.depth+1);o.unshift(l);for(let d=r.depth,h=r.pos-1;d>0;d--,h--){let p=r.node(d).type.spec;if(p.defining||p.definingAsContext||p.isolating)break;o.indexOf(d)>-1?l=d:r.before(d)==h&&o.splice(1,0,-d)}let a=o.indexOf(l),c=[],u=s.openStart;for(let d=s.content,h=0;;h++){let p=d.firstChild;if(c.push(p),h==s.openStart)break;d=p.content}for(let d=u-1;d>=0;d--){let h=c[d],p=MM(h.type);if(p&&!h.sameMarkup(r.node(Math.abs(l)-1)))u=d;else if(p||!h.type.isTextblock)break}for(let d=s.openStart;d>=0;d--){let h=(d+u+1)%(s.openStart+1),p=c[h];if(p)for(let m=0;m<o.length;m++){let g=o[(m+a)%o.length],y=!0;g<0&&(y=!1,g=-g);let S=r.node(g-1),b=r.index(g-1);if(S.canReplaceWith(b,b,p.type,p.marks))return t.replace(r.before(g),y?i.after(g):n,new K(C1(s.content,0,s.openStart,h),h,s.openEnd))}}let f=t.steps.length;for(let d=o.length-1;d>=0&&(t.replace(e,n,s),!(t.steps.length>f));d--){let h=o[d];h<0||(e=r.before(h),n=i.after(h))}}function C1(t,e,n,s,r){if(e<n){let i=t.firstChild;t=t.replaceChild(0,i.copy(C1(i.content,e+1,n,s,i)))}if(e>s){let i=r.contentMatchAt(0),o=i.fillBefore(t).append(t);t=o.append(i.matchFragment(o).fillBefore(D.empty,!0))}return t}function NM(t,e,n,s){if(!s.isInline&&e==n&&t.doc.resolve(e).parent.content.size){let r=kM(t.doc,e,s.type);r!=null&&(e=n=r)}t.replaceRange(e,n,new K(D.from(s),0,0))}function OM(t,e,n){let s=t.doc.resolve(e),r=t.doc.resolve(n),i=v1(s,r);for(let o=0;o<i.length;o++){let l=i[o],a=o==i.length-1;if(a&&l==0||s.node(l).type.contentMatch.validEnd)return t.delete(s.start(l),r.end(l));if(l>0&&(a||s.node(l-1).canReplace(s.index(l-1),r.indexAfter(l-1))))return t.delete(s.before(l),r.after(l))}for(let o=1;o<=s.depth&&o<=r.depth;o++)if(e-s.start(o)==s.depth-o&&n>s.end(o)&&r.end(o)-n!=r.depth-o&&s.start(o-1)==r.start(o-1)&&s.node(o-1).canReplace(s.index(o-1),r.index(o-1)))return t.delete(s.before(o),n);t.delete(e,n)}function v1(t,e){let n=[],s=Math.min(t.depth,e.depth);for(let r=s;r>=0;r--){let i=t.start(r);if(i<t.pos-(t.depth-r)||e.end(r)>e.pos+(e.depth-r)||t.node(r).type.spec.isolating||e.node(r).type.spec.isolating)break;(i==e.start(r)||r==t.depth&&r==e.depth&&t.parent.inlineContent&&e.parent.inlineContent&&r&&e.start(r-1)==i-1)&&n.push(r)}return n}class ei extends yt{constructor(e,n,s){super(),this.pos=e,this.attr=n,this.value=s}apply(e){let n=e.nodeAt(this.pos);if(!n)return ze.fail(\"No node at attribute step's position\");let s=Object.create(null);for(let i in n.attrs)s[i]=n.attrs[i];s[this.attr]=this.value;let r=n.type.create(s,null,n.marks);return ze.fromReplace(e,this.pos,this.pos+1,new K(D.from(r),0,n.isLeaf?0:1))}getMap(){return $t.empty}invert(e){return new ei(this.pos,this.attr,e.nodeAt(this.pos).attrs[this.attr])}map(e){let n=e.mapResult(this.pos,1);return n.deletedAfter?null:new ei(n.pos,this.attr,this.value)}toJSON(){return{stepType:\"attr\",pos:this.pos,attr:this.attr,value:this.value}}static fromJSON(e,n){if(typeof n.pos!=\"number\"||typeof n.attr!=\"string\")throw new RangeError(\"Invalid input for AttrStep.fromJSON\");return new ei(n.pos,n.attr,n.value)}}yt.jsonID(\"attr\",ei);class Mo extends yt{constructor(e,n){super(),this.attr=e,this.value=n}apply(e){let n=Object.create(null);for(let r in e.attrs)n[r]=e.attrs[r];n[this.attr]=this.value;let s=e.type.create(n,e.content,e.marks);return ze.ok(s)}getMap(){return $t.empty}invert(e){return new Mo(this.attr,e.attrs[this.attr])}map(e){return this}toJSON(){return{stepType:\"docAttr\",attr:this.attr,value:this.value}}static fromJSON(e,n){if(typeof n.attr!=\"string\")throw new RangeError(\"Invalid input for DocAttrStep.fromJSON\");return new Mo(n.attr,n.value)}}yt.jsonID(\"docAttr\",Mo);let di=class extends Error{};di=function t(e){let n=Error.call(this,e);return n.__proto__=t.prototype,n};di.prototype=Object.create(Error.prototype);di.prototype.constructor=di;di.prototype.name=\"TransformError\";class Xd{constructor(e){this.doc=e,this.steps=[],this.docs=[],this.mapping=new Eo}get before(){return this.docs.length?this.docs[0]:this.doc}step(e){let n=this.maybeStep(e);if(n.failed)throw new di(n.failed);return this}maybeStep(e){let n=e.apply(this.doc);return n.failed||this.addStep(e,n.doc),n}get docChanged(){return this.steps.length>0}changedRange(){let e=1e9,n=-1e9;for(let s=0;s<this.mapping.maps.length;s++){let r=this.mapping.maps[s];s&&(e=r.map(e,1),n=r.map(n,-1)),r.forEach((i,o,l,a)=>{e=Math.min(e,l),n=Math.max(n,a)})}return e==1e9?null:{from:e,to:n}}addStep(e,n){this.docs.push(this.doc),this.steps.push(e),this.mapping.appendMap(e.getMap()),this.doc=n}replace(e,n=e,s=K.empty){let r=_c(this.doc,e,n,s);return r&&this.step(r),this}replaceWith(e,n,s){return this.replace(e,n,new K(D.from(s),0,0))}delete(e,n){return this.replace(e,n,K.empty)}insert(e,n){return this.replaceWith(e,e,n)}replaceRange(e,n,s){return AM(this,e,n,s),this}replaceRangeWith(e,n,s){return NM(this,e,n,s),this}deleteRange(e,n){return OM(this,e,n),this}lift(e,n){return pM(this,e,n),this}join(e,n=1){return vM(this,e,n),this}wrap(e,n){return yM(this,e,n),this}setBlockType(e,n=e,s,r=null){return bM(this,e,n,s,r),this}setNodeMarkup(e,n,s=null,r){return wM(this,e,n,s,r),this}setNodeAttribute(e,n,s){return this.step(new ei(e,n,s)),this}setDocAttribute(e,n){return this.step(new Mo(e,n)),this}addNodeMark(e,n){return this.step(new As(e,n)),this}removeNodeMark(e,n){let s=this.doc.nodeAt(e);if(!s)throw new RangeError(\"No node at position \"+e);if(n instanceof Ce)n.isInSet(s.marks)&&this.step(new yr(e,n));else{let r=s.marks,i,o=[];for(;i=n.isInSet(r);)o.push(new yr(e,i)),r=i.removeFromSet(r);for(let l=o.length-1;l>=0;l--)this.step(o[l])}return this}split(e,n=1,s){return xM(this,e,n,s),this}addMark(e,n,s){return fM(this,e,n,s),this}removeMark(e,n,s){return dM(this,e,n,s),this}clearIncompatible(e,n,s){return Gd(this,e,n,s),this}}const bu=Object.create(null);class ee{constructor(e,n,s){this.$anchor=e,this.$head=n,this.ranges=s||[new k1(e.min(n),e.max(n))]}get anchor(){return this.$anchor.pos}get head(){return this.$head.pos}get from(){return this.$from.pos}get to(){return this.$to.pos}get $from(){return this.ranges[0].$from}get $to(){return this.ranges[0].$to}get empty(){let e=this.ranges;for(let n=0;n<e.length;n++)if(e[n].$from.pos!=e[n].$to.pos)return!1;return!0}content(){return this.$from.doc.slice(this.from,this.to,!0)}replace(e,n=K.empty){let s=n.content.lastChild,r=null;for(let l=0;l<n.openEnd;l++)r=s,s=s.lastChild;let i=e.steps.length,o=this.ranges;for(let l=0;l<o.length;l++){let{$from:a,$to:c}=o[l],u=e.mapping.slice(i);e.replaceRange(u.map(a.pos),u.map(c.pos),l?K.empty:n),l==0&&gm(e,i,(s?s.isInline:r&&r.isTextblock)?-1:1)}}replaceWith(e,n){let s=e.steps.length,r=this.ranges;for(let i=0;i<r.length;i++){let{$from:o,$to:l}=r[i],a=e.mapping.slice(s),c=a.map(o.pos),u=a.map(l.pos);i?e.deleteRange(c,u):(e.replaceRangeWith(c,u,n),gm(e,s,n.isInline?-1:1))}}static findFrom(e,n,s=!1){let r=e.parent.inlineContent?new Z(e):Fr(e.node(0),e.parent,e.pos,e.index(),n,s);if(r)return r;for(let i=e.depth-1;i>=0;i--){let o=n<0?Fr(e.node(0),e.node(i),e.before(i+1),e.index(i),n,s):Fr(e.node(0),e.node(i),e.after(i+1),e.index(i)+1,n,s);if(o)return o}return null}static near(e,n=1){return this.findFrom(e,n)||this.findFrom(e,-n)||new zt(e.node(0))}static atStart(e){return Fr(e,e,0,0,1)||new zt(e)}static atEnd(e){return Fr(e,e,e.content.size,e.childCount,-1)||new zt(e)}static fromJSON(e,n){if(!n||!n.type)throw new RangeError(\"Invalid input for Selection.fromJSON\");let s=bu[n.type];if(!s)throw new RangeError(`No selection type ${n.type} defined`);return s.fromJSON(e,n)}static jsonID(e,n){if(e in bu)throw new RangeError(\"Duplicate use of selection JSON ID \"+e);return bu[e]=n,n.prototype.jsonID=e,n}getBookmark(){return Z.between(this.$anchor,this.$head).getBookmark()}}ee.prototype.visible=!0;class k1{constructor(e,n){this.$from=e,this.$to=n}}let pm=!1;function mm(t){!pm&&!t.parent.inlineContent&&(pm=!0,console.warn(\"TextSelection endpoint not pointing into a node with inline content (\"+t.parent.type.name+\")\"))}class Z extends ee{constructor(e,n=e){mm(e),mm(n),super(e,n)}get $cursor(){return this.$anchor.pos==this.$head.pos?this.$head:null}map(e,n){let s=e.resolve(n.map(this.head));if(!s.parent.inlineContent)return ee.near(s);let r=e.resolve(n.map(this.anchor));return new Z(r.parent.inlineContent?r:s,s)}replace(e,n=K.empty){if(super.replace(e,n),n==K.empty){let s=this.$from.marksAcross(this.$to);s&&e.ensureMarks(s)}}eq(e){return e instanceof Z&&e.anchor==this.anchor&&e.head==this.head}getBookmark(){return new Dc(this.anchor,this.head)}toJSON(){return{type:\"text\",anchor:this.anchor,head:this.head}}static fromJSON(e,n){if(typeof n.anchor!=\"number\"||typeof n.head!=\"number\")throw new RangeError(\"Invalid input for TextSelection.fromJSON\");return new Z(e.resolve(n.anchor),e.resolve(n.head))}static create(e,n,s=n){let r=e.resolve(n);return new this(r,s==n?r:e.resolve(s))}static between(e,n,s){let r=e.pos-n.pos;if((!s||r)&&(s=r>=0?1:-1),!n.parent.inlineContent){let i=ee.findFrom(n,s,!0)||ee.findFrom(n,-s,!0);if(i)n=i.$head;else return ee.near(n,s)}return e.parent.inlineContent||(r==0?e=n:(e=(ee.findFrom(e,-s,!0)||ee.findFrom(e,s,!0)).$anchor,e.pos<n.pos!=r<0&&(e=n))),new Z(e,n)}}ee.jsonID(\"text\",Z);class Dc{constructor(e,n){this.anchor=e,this.head=n}map(e){return new Dc(e.map(this.anchor),e.map(this.head))}resolve(e){return Z.between(e.resolve(this.anchor),e.resolve(this.head))}}class Q extends ee{constructor(e){let n=e.nodeAfter,s=e.node(0).resolve(e.pos+n.nodeSize);super(e,s),this.node=n}map(e,n){let{deleted:s,pos:r}=n.mapResult(this.anchor),i=e.resolve(r);return s?ee.near(i):new Q(i)}content(){return new K(D.from(this.node),0,0)}eq(e){return e instanceof Q&&e.anchor==this.anchor}toJSON(){return{type:\"node\",anchor:this.anchor}}getBookmark(){return new Qd(this.anchor)}static fromJSON(e,n){if(typeof n.anchor!=\"number\")throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");return new Q(e.resolve(n.anchor))}static create(e,n){return new Q(e.resolve(n))}static isSelectable(e){return!e.isText&&e.type.spec.selectable!==!1}}Q.prototype.visible=!1;ee.jsonID(\"node\",Q);class Qd{constructor(e){this.anchor=e}map(e){let{deleted:n,pos:s}=e.mapResult(this.anchor);return n?new Dc(s,s):new Qd(s)}resolve(e){let n=e.resolve(this.anchor),s=n.nodeAfter;return s&&Q.isSelectable(s)?new Q(n):ee.near(n)}}class zt extends ee{constructor(e){super(e.resolve(0),e.resolve(e.content.size))}replace(e,n=K.empty){if(n==K.empty){e.delete(0,e.doc.content.size);let s=ee.atStart(e.doc);s.eq(e.selection)||e.setSelection(s)}else super.replace(e,n)}toJSON(){return{type:\"all\"}}static fromJSON(e){return new zt(e)}map(e){return new zt(e)}eq(e){return e instanceof zt}getBookmark(){return RM}}ee.jsonID(\"all\",zt);const RM={map(){return this},resolve(t){return new zt(t)}};function Fr(t,e,n,s,r,i=!1){if(e.inlineContent)return Z.create(t,n);for(let o=s-(r>0?0:1);r>0?o<e.childCount:o>=0;o+=r){let l=e.child(o);if(l.isAtom){if(!i&&Q.isSelectable(l))return Q.create(t,n-(r<0?l.nodeSize:0))}else{let a=Fr(t,l,n+r,r<0?l.childCount:0,r,i);if(a)return a}n+=l.nodeSize*r}return null}function gm(t,e,n){let s=t.steps.length-1;if(s<e)return;let r=t.steps[s];if(!(r instanceof qe||r instanceof Ge))return;let i=t.mapping.maps[s],o;i.forEach((l,a,c,u)=>{o==null&&(o=u)}),t.setSelection(ee.near(t.doc.resolve(o),n))}const ym=1,ml=2,bm=4;class IM extends Xd{constructor(e){super(e.doc),this.curSelectionFor=0,this.updated=0,this.meta=Object.create(null),this.time=Date.now(),this.curSelection=e.selection,this.storedMarks=e.storedMarks}get selection(){return this.curSelectionFor<this.steps.length&&(this.curSelection=this.curSelection.map(this.doc,this.mapping.slice(this.curSelectionFor)),this.curSelectionFor=this.steps.length),this.curSelection}setSelection(e){if(e.$from.doc!=this.doc)throw new RangeError(\"Selection passed to setSelection must point at the current document\");return this.curSelection=e,this.curSelectionFor=this.steps.length,this.updated=(this.updated|ym)&~ml,this.storedMarks=null,this}get selectionSet(){return(this.updated&ym)>0}setStoredMarks(e){return this.storedMarks=e,this.updated|=ml,this}ensureMarks(e){return Ce.sameSet(this.storedMarks||this.selection.$from.marks(),e)||this.setStoredMarks(e),this}addStoredMark(e){return this.ensureMarks(e.addToSet(this.storedMarks||this.selection.$head.marks()))}removeStoredMark(e){return this.ensureMarks(e.removeFromSet(this.storedMarks||this.selection.$head.marks()))}get storedMarksSet(){return(this.updated&ml)>0}addStep(e,n){super.addStep(e,n),this.updated=this.updated&~ml,this.storedMarks=null}setTime(e){return this.time=e,this}replaceSelection(e){return this.selection.replace(this,e),this}replaceSelectionWith(e,n=!0){let s=this.selection;return n&&(e=e.mark(this.storedMarks||(s.empty?s.$from.marks():s.$from.marksAcross(s.$to)||Ce.none))),s.replaceWith(this,e),this}deleteSelection(){return this.selection.replace(this),this}insertText(e,n,s){let r=this.doc.type.schema;if(n==null)return e?this.replaceSelectionWith(r.text(e),!0):this.deleteSelection();{if(s==null&&(s=n),!e)return this.deleteRange(n,s);let i=this.storedMarks;if(!i){let o=this.doc.resolve(n);i=s==n?o.marks():o.marksAcross(this.doc.resolve(s))}return this.replaceRangeWith(n,s,r.text(e,i)),!this.selection.empty&&this.selection.to==n+e.length&&this.setSelection(ee.near(this.selection.$to)),this}}setMeta(e,n){return this.meta[typeof e==\"string\"?e:e.key]=n,this}getMeta(e){return this.meta[typeof e==\"string\"?e:e.key]}get isGeneric(){for(let e in this.meta)return!1;return!0}scrollIntoView(){return this.updated|=bm,this}get scrolledIntoView(){return(this.updated&bm)>0}}function Sm(t,e){return!e||!t?t:t.bind(e)}class Hi{constructor(e,n,s){this.name=e,this.init=Sm(n.init,s),this.apply=Sm(n.apply,s)}}const _M=[new Hi(\"doc\",{init(t){return t.doc||t.schema.topNodeType.createAndFill()},apply(t){return t.doc}}),new Hi(\"selection\",{init(t,e){return t.selection||ee.atStart(e.doc)},apply(t){return t.selection}}),new Hi(\"storedMarks\",{init(t){return t.storedMarks||null},apply(t,e,n,s){return s.selection.$cursor?t.storedMarks:null}}),new Hi(\"scrollToSelection\",{init(){return 0},apply(t,e){return t.scrolledIntoView?e+1:e}})];class Su{constructor(e,n){this.schema=e,this.plugins=[],this.pluginsByKey=Object.create(null),this.fields=_M.slice(),n&&n.forEach(s=>{if(this.pluginsByKey[s.key])throw new RangeError(\"Adding different instances of a keyed plugin (\"+s.key+\")\");this.plugins.push(s),this.pluginsByKey[s.key]=s,s.spec.state&&this.fields.push(new Hi(s.key,s.spec.state,s))})}}class Ur{constructor(e){this.config=e}get schema(){return this.config.schema}get plugins(){return this.config.plugins}apply(e){return this.applyTransaction(e).state}filterTransaction(e,n=-1){for(let s=0;s<this.config.plugins.length;s++)if(s!=n){let r=this.config.plugins[s];if(r.spec.filterTransaction&&!r.spec.filterTransaction.call(r,e,this))return!1}return!0}applyTransaction(e){if(!this.filterTransaction(e))return{state:this,transactions:[]};let n=[e],s=this.applyInner(e),r=null;for(;;){let i=!1;for(let o=0;o<this.config.plugins.length;o++){let l=this.config.plugins[o];if(l.spec.appendTransaction){let a=r?r[o].n:0,c=r?r[o].state:this,u=a<n.length&&l.spec.appendTransaction.call(l,a?n.slice(a):n,c,s);if(u&&s.filterTransaction(u,o)){if(u.setMeta(\"appendedTransaction\",e),!r){r=[];for(let f=0;f<this.config.plugins.length;f++)r.push(f<o?{state:s,n:n.length}:{state:this,n:0})}n.push(u),s=s.applyInner(u),i=!0}r&&(r[o]={state:s,n:n.length})}}if(!i)return{state:s,transactions:n}}}applyInner(e){if(!e.before.eq(this.doc))throw new RangeError(\"Applying a mismatched transaction\");let n=new Ur(this.config),s=this.config.fields;for(let r=0;r<s.length;r++){let i=s[r];n[i.name]=i.apply(e,this[i.name],this,n)}return n}get tr(){return new IM(this)}static create(e){let n=new Su(e.doc?e.doc.type.schema:e.schema,e.plugins),s=new Ur(n);for(let r=0;r<n.fields.length;r++)s[n.fields[r].name]=n.fields[r].init(e,s);return s}reconfigure(e){let n=new Su(this.schema,e.plugins),s=n.fields,r=new Ur(n);for(let i=0;i<s.length;i++){let o=s[i].name;r[o]=this.hasOwnProperty(o)?this[o]:s[i].init(e,r)}return r}toJSON(e){let n={doc:this.doc.toJSON(),selection:this.selection.toJSON()};if(this.storedMarks&&(n.storedMarks=this.storedMarks.map(s=>s.toJSON())),e&&typeof e==\"object\")for(let s in e){if(s==\"doc\"||s==\"selection\")throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");let r=e[s],i=r.spec.state;i&&i.toJSON&&(n[s]=i.toJSON.call(r,this[r.key]))}return n}static fromJSON(e,n,s){if(!n)throw new RangeError(\"Invalid input for EditorState.fromJSON\");if(!e.schema)throw new RangeError(\"Required config field 'schema' missing\");let r=new Su(e.schema,e.plugins),i=new Ur(r);return r.fields.forEach(o=>{if(o.name==\"doc\")i.doc=Is.fromJSON(e.schema,n.doc);else if(o.name==\"selection\")i.selection=ee.fromJSON(i.doc,n.selection);else if(o.name==\"storedMarks\")n.storedMarks&&(i.storedMarks=n.storedMarks.map(e.schema.markFromJSON));else{if(s)for(let l in s){let a=s[l],c=a.spec.state;if(a.key==o.name&&c&&c.fromJSON&&Object.prototype.hasOwnProperty.call(n,l)){i[o.name]=c.fromJSON.call(a,e,n[l],i);return}}i[o.name]=o.init(e,i)}}),i}}function T1(t,e,n){for(let s in t){let r=t[s];r instanceof Function?r=r.bind(e):s==\"handleDOMEvents\"&&(r=T1(r,e,{})),n[s]=r}return n}class we{constructor(e){this.spec=e,this.props={},e.props&&T1(e.props,this,this.props),this.key=e.key?e.key.key:E1(\"plugin\")}getState(e){return e[this.key]}}const wu=Object.create(null);function E1(t){return t in wu?t+\"$\"+ ++wu[t]:(wu[t]=0,t+\"$\")}class Ne{constructor(e=\"key\"){this.key=E1(e)}get(e){return e.config.pluginsByKey[this.key]}getState(e){return e[this.key]}}const Zd=(t,e)=>t.selection.empty?!1:(e&&e(t.tr.deleteSelection().scrollIntoView()),!0);function M1(t,e){let{$cursor:n}=t.selection;return!n||(e?!e.endOfTextblock(\"backward\",t):n.parentOffset>0)?null:n}const A1=(t,e,n)=>{let s=M1(t,n);if(!s)return!1;let r=eh(s);if(!r){let o=s.blockRange(),l=o&&ki(o);return l==null?!1:(e&&e(t.tr.lift(o,l).scrollIntoView()),!0)}let i=r.nodeBefore;if(B1(t,r,e,-1))return!0;if(s.parent.content.size==0&&(hi(i,\"end\")||Q.isSelectable(i)))for(let o=s.depth;;o--){let l=_c(t.doc,s.before(o),s.after(o),K.empty);if(l&&l.slice.size<l.to-l.from){if(e){let a=t.tr.step(l);a.setSelection(hi(i,\"end\")?ee.findFrom(a.doc.resolve(a.mapping.map(r.pos,-1)),-1):Q.create(a.doc,r.pos-i.nodeSize)),e(a.scrollIntoView())}return!0}if(o==1||s.node(o-1).childCount>1)break}return i.isAtom&&r.depth==s.depth-1?(e&&e(t.tr.delete(r.pos-i.nodeSize,r.pos).scrollIntoView()),!0):!1},DM=(t,e,n)=>{let s=M1(t,n);if(!s)return!1;let r=eh(s);return r?N1(t,r,e):!1},PM=(t,e,n)=>{let s=R1(t,n);if(!s)return!1;let r=th(s);return r?N1(t,r,e):!1};function N1(t,e,n){let s=e.nodeBefore,r=s,i=e.pos-1;for(;!r.isTextblock;i--){if(r.type.spec.isolating)return!1;let u=r.lastChild;if(!u)return!1;r=u}let o=e.nodeAfter,l=o,a=e.pos+1;for(;!l.isTextblock;a++){if(l.type.spec.isolating)return!1;let u=l.firstChild;if(!u)return!1;l=u}let c=_c(t.doc,i,a,K.empty);if(!c||c.from!=i||c instanceof qe&&c.slice.size>=a-i)return!1;if(n){let u=t.tr.step(c);u.setSelection(Z.create(u.doc,i)),n(u.scrollIntoView())}return!0}function hi(t,e,n=!1){for(let s=t;s;s=e==\"start\"?s.firstChild:s.lastChild){if(s.isTextblock)return!0;if(n&&s.childCount!=1)return!1}return!1}const O1=(t,e,n)=>{let{$head:s,empty:r}=t.selection,i=s;if(!r)return!1;if(s.parent.isTextblock){if(n?!n.endOfTextblock(\"backward\",t):s.parentOffset>0)return!1;i=eh(s)}let o=i&&i.nodeBefore;return!o||!Q.isSelectable(o)?!1:(e&&e(t.tr.setSelection(Q.create(t.doc,i.pos-o.nodeSize)).scrollIntoView()),!0)};function eh(t){if(!t.parent.type.spec.isolating)for(let e=t.depth-1;e>=0;e--){if(t.index(e)>0)return t.doc.resolve(t.before(e+1));if(t.node(e).type.spec.isolating)break}return null}function R1(t,e){let{$cursor:n}=t.selection;return!n||(e?!e.endOfTextblock(\"forward\",t):n.parentOffset<n.parent.content.size)?null:n}const I1=(t,e,n)=>{let s=R1(t,n);if(!s)return!1;let r=th(s);if(!r)return!1;let i=r.nodeAfter;if(B1(t,r,e,1))return!0;if(s.parent.content.size==0&&(hi(i,\"start\")||Q.isSelectable(i))){let o=_c(t.doc,s.before(),s.after(),K.empty);if(o&&o.slice.size<o.to-o.from){if(e){let l=t.tr.step(o);l.setSelection(hi(i,\"start\")?ee.findFrom(l.doc.resolve(l.mapping.map(r.pos)),1):Q.create(l.doc,l.mapping.map(r.pos))),e(l.scrollIntoView())}return!0}}return i.isAtom&&r.depth==s.depth-1?(e&&e(t.tr.delete(r.pos,r.pos+i.nodeSize).scrollIntoView()),!0):!1},_1=(t,e,n)=>{let{$head:s,empty:r}=t.selection,i=s;if(!r)return!1;if(s.parent.isTextblock){if(n?!n.endOfTextblock(\"forward\",t):s.parentOffset<s.parent.content.size)return!1;i=th(s)}let o=i&&i.nodeAfter;return!o||!Q.isSelectable(o)?!1:(e&&e(t.tr.setSelection(Q.create(t.doc,i.pos)).scrollIntoView()),!0)};function th(t){if(!t.parent.type.spec.isolating)for(let e=t.depth-1;e>=0;e--){let n=t.node(e);if(t.index(e)+1<n.childCount)return t.doc.resolve(t.after(e+1));if(n.type.spec.isolating)break}return null}const LM=(t,e)=>{let n=t.selection,s=n instanceof Q,r;if(s){if(n.node.isTextblock||!Ws(t.doc,n.from))return!1;r=n.from}else if(r=Ic(t.doc,n.from,-1),r==null)return!1;if(e){let i=t.tr.join(r);s&&i.setSelection(Q.create(i.doc,r-t.doc.resolve(r).nodeBefore.nodeSize)),e(i.scrollIntoView())}return!0},BM=(t,e)=>{let n=t.selection,s;if(n instanceof Q){if(n.node.isTextblock||!Ws(t.doc,n.to))return!1;s=n.to}else if(s=Ic(t.doc,n.to,1),s==null)return!1;return e&&e(t.tr.join(s).scrollIntoView()),!0},$M=(t,e)=>{let{$from:n,$to:s}=t.selection,r=n.blockRange(s),i=r&&ki(r);return i==null?!1:(e&&e(t.tr.lift(r,i).scrollIntoView()),!0)},D1=(t,e)=>{let{$head:n,$anchor:s}=t.selection;return!n.parent.type.spec.code||!n.sameParent(s)?!1:(e&&e(t.tr.insertText(`\n`).scrollIntoView()),!0)};function nh(t){for(let e=0;e<t.edgeCount;e++){let{type:n}=t.edge(e);if(n.isTextblock&&!n.hasRequiredAttrs())return n}return null}const HM=(t,e)=>{let{$head:n,$anchor:s}=t.selection;if(!n.parent.type.spec.code||!n.sameParent(s))return!1;let r=n.node(-1),i=n.indexAfter(-1),o=nh(r.contentMatchAt(i));if(!o||!r.canReplaceWith(i,i,o))return!1;if(e){let l=n.after(),a=t.tr.replaceWith(l,l,o.createAndFill());a.setSelection(ee.near(a.doc.resolve(l),1)),e(a.scrollIntoView())}return!0},P1=(t,e)=>{let n=t.selection,{$from:s,$to:r}=n;if(n instanceof zt||s.parent.inlineContent||r.parent.inlineContent)return!1;let i=nh(r.parent.contentMatchAt(r.indexAfter()));if(!i||!i.isTextblock)return!1;if(e){let o=(!s.parentOffset&&r.index()<r.parent.childCount?s:r).pos,l=t.tr.insert(o,i.createAndFill());l.setSelection(Z.create(l.doc,o+1)),e(l.scrollIntoView())}return!0},L1=(t,e)=>{let{$cursor:n}=t.selection;if(!n||n.parent.content.size)return!1;if(n.depth>1&&n.after()!=n.end(-1)){let i=n.before();if(Xn(t.doc,i))return e&&e(t.tr.split(i).scrollIntoView()),!0}let s=n.blockRange(),r=s&&ki(s);return r==null?!1:(e&&e(t.tr.lift(s,r).scrollIntoView()),!0)};function FM(t){return(e,n)=>{let{$from:s,$to:r}=e.selection;if(e.selection instanceof Q&&e.selection.node.isBlock)return!s.parentOffset||!Xn(e.doc,s.pos)?!1:(n&&n(e.tr.split(s.pos).scrollIntoView()),!0);if(!s.depth)return!1;let i=[],o,l,a=!1,c=!1;for(let h=s.depth;;h--)if(s.node(h).isBlock){a=s.end(h)==s.pos+(s.depth-h),c=s.start(h)==s.pos-(s.depth-h),l=nh(s.node(h-1).contentMatchAt(s.indexAfter(h-1))),i.unshift(a&&l?{type:l}:null),o=h;break}else{if(h==1)return!1;i.unshift(null)}let u=e.tr;(e.selection instanceof Z||e.selection instanceof zt)&&u.deleteSelection();let f=u.mapping.map(s.pos),d=Xn(u.doc,f,i.length,i);if(d||(i[0]=l?{type:l}:null,d=Xn(u.doc,f,i.length,i)),!d)return!1;if(u.split(f,i.length,i),!a&&c&&s.node(o).type!=l){let h=u.mapping.map(s.before(o)),p=u.doc.resolve(h);l&&s.node(o-1).canReplaceWith(p.index(),p.index()+1,l)&&u.setNodeMarkup(u.mapping.map(s.before(o)),l)}return n&&n(u.scrollIntoView()),!0}}const zM=FM(),VM=(t,e)=>{let{$from:n,to:s}=t.selection,r,i=n.sharedDepth(s);return i==0?!1:(r=n.before(i),e&&e(t.tr.setSelection(Q.create(t.doc,r))),!0)};function WM(t,e,n){let s=e.nodeBefore,r=e.nodeAfter,i=e.index();return!s||!r||!s.type.compatibleContent(r.type)?!1:!s.content.size&&e.parent.canReplace(i-1,i)?(n&&n(t.tr.delete(e.pos-s.nodeSize,e.pos).scrollIntoView()),!0):!e.parent.canReplace(i,i+1)||!(r.isTextblock||Ws(t.doc,e.pos))?!1:(n&&n(t.tr.join(e.pos).scrollIntoView()),!0)}function B1(t,e,n,s){let r=e.nodeBefore,i=e.nodeAfter,o,l,a=r.type.spec.isolating||i.type.spec.isolating;if(!a&&WM(t,e,n))return!0;let c=!a&&e.parent.canReplace(e.index(),e.index()+1);if(c&&(o=(l=r.contentMatchAt(r.childCount)).findWrapping(i.type))&&l.matchType(o[0]||i.type).validEnd){if(n){let h=e.pos+i.nodeSize,p=D.empty;for(let y=o.length-1;y>=0;y--)p=D.from(o[y].create(null,p));p=D.from(r.copy(p));let m=t.tr.step(new Ge(e.pos-1,h,e.pos,h,new K(p,1,0),o.length,!0)),g=m.doc.resolve(h+2*o.length);g.nodeAfter&&g.nodeAfter.type==r.type&&Ws(m.doc,g.pos)&&m.join(g.pos),n(m.scrollIntoView())}return!0}let u=i.type.spec.isolating||s>0&&a?null:ee.findFrom(e,1),f=u&&u.$from.blockRange(u.$to),d=f&&ki(f);if(d!=null&&d>=e.depth)return n&&n(t.tr.lift(f,d).scrollIntoView()),!0;if(c&&hi(i,\"start\",!0)&&hi(r,\"end\")){let h=r,p=[];for(;p.push(h),!h.isTextblock;)h=h.lastChild;let m=i,g=1;for(;!m.isTextblock;m=m.firstChild)g++;if(h.canReplace(h.childCount,h.childCount,m.content)){if(n){let y=D.empty;for(let b=p.length-1;b>=0;b--)y=D.from(p[b].copy(y));let S=t.tr.step(new Ge(e.pos-p.length,e.pos+i.nodeSize,e.pos+g,e.pos+i.nodeSize-g,new K(y,p.length,0),0,!0));n(S.scrollIntoView())}return!0}}return!1}function $1(t){return function(e,n){let s=e.selection,r=t<0?s.$from:s.$to,i=r.depth;for(;r.node(i).isInline;){if(!i)return!1;i--}return r.node(i).isTextblock?(n&&n(e.tr.setSelection(Z.create(e.doc,t<0?r.start(i):r.end(i)))),!0):!1}}const jM=$1(-1),UM=$1(1);function KM(t,e=null){return function(n,s){let{$from:r,$to:i}=n.selection,o=r.blockRange(i),l=o&&Yd(o,t,e);return l?(s&&s(n.tr.wrap(o,l).scrollIntoView()),!0):!1}}function wm(t,e=null){return function(n,s){let r=!1;for(let i=0;i<n.selection.ranges.length&&!r;i++){let{$from:{pos:o},$to:{pos:l}}=n.selection.ranges[i];n.doc.nodesBetween(o,l,(a,c)=>{if(r)return!1;if(!(!a.isTextblock||a.hasMarkup(t,e)))if(a.type==t)r=!0;else{let u=n.doc.resolve(c),f=u.index();r=u.parent.canReplaceWith(f,f+1,t)}})}if(!r)return!1;if(s){let i=n.tr;for(let o=0;o<n.selection.ranges.length;o++){let{$from:{pos:l},$to:{pos:a}}=n.selection.ranges[o];i.setBlockType(l,a,t,e)}s(i.scrollIntoView())}return!0}}function sh(...t){return function(e,n,s){for(let r=0;r<t.length;r++)if(t[r](e,n,s))return!0;return!1}}sh(Zd,A1,O1);sh(Zd,I1,_1);sh(D1,P1,L1,zM);typeof navigator<\"u\"?/Mac|iP(hone|[oa]d)/.test(navigator.platform):typeof os<\"u\"&&os.platform&&os.platform()==\"darwin\";function qM(t,e=null){return function(n,s){let{$from:r,$to:i}=n.selection,o=r.blockRange(i);if(!o)return!1;let l=s?n.tr:null;return JM(l,o,t,e)?(s&&s(l.scrollIntoView()),!0):!1}}function JM(t,e,n,s=null){let r=!1,i=e,o=e.$from.doc;if(e.depth>=2&&e.$from.node(e.depth-1).type.compatibleContent(n)&&e.startIndex==0){if(e.$from.index(e.depth-1)==0)return!1;let a=o.resolve(e.start-2);i=new Sa(a,a,e.depth),e.endIndex<e.parent.childCount&&(e=new Sa(e.$from,o.resolve(e.$to.end(e.depth)),e.depth)),r=!0}let l=Yd(i,n,s,e);return l?(t&&GM(t,e,l,r,n),!0):!1}function GM(t,e,n,s,r){let i=D.empty;for(let u=n.length-1;u>=0;u--)i=D.from(n[u].type.create(n[u].attrs,i));t.step(new Ge(e.start-(s?2:0),e.end,e.start,e.end,new K(i,0,0),n.length,!0));let o=0;for(let u=0;u<n.length;u++)n[u].type==r&&(o=u+1);let l=n.length-o,a=e.start+n.length-(s?2:0),c=e.parent;for(let u=e.startIndex,f=e.endIndex,d=!0;u<f;u++,d=!1)!d&&Xn(t.doc,a,l)&&(t.split(a,l),a+=2*l),a+=c.child(u).nodeSize;return t}function YM(t){return function(e,n){let{$from:s,$to:r}=e.selection,i=s.blockRange(r,o=>o.childCount>0&&o.firstChild.type==t);return i?n?s.node(i.depth-1).type==t?XM(e,n,t,i):QM(e,n,i):!0:!1}}function XM(t,e,n,s){let r=t.tr,i=s.end,o=s.$to.end(s.depth);i<o&&(r.step(new Ge(i-1,o,i,o,new K(D.from(n.create(null,s.parent.copy())),1,0),1,!0)),s=new Sa(r.doc.resolve(s.$from.pos),r.doc.resolve(o),s.depth));const l=ki(s);if(l==null)return!1;r.lift(s,l);let a=r.doc.resolve(r.mapping.map(i,-1)-1);return Ws(r.doc,a.pos)&&a.nodeBefore.type==a.nodeAfter.type&&r.join(a.pos),e(r.scrollIntoView()),!0}function QM(t,e,n){let s=t.tr,r=n.parent;for(let h=n.end,p=n.endIndex-1,m=n.startIndex;p>m;p--)h-=r.child(p).nodeSize,s.delete(h-1,h+1);let i=s.doc.resolve(n.start),o=i.nodeAfter;if(s.mapping.map(n.end)!=n.start+i.nodeAfter.nodeSize)return!1;let l=n.startIndex==0,a=n.endIndex==r.childCount,c=i.node(-1),u=i.index(-1);if(!c.canReplace(u+(l?0:1),u+1,o.content.append(a?D.empty:D.from(r))))return!1;let f=i.pos,d=f+o.nodeSize;return s.step(new Ge(f-(l?1:0),d+(a?1:0),f+1,d-1,new K((l?D.empty:D.from(r.copy(D.empty))).append(a?D.empty:D.from(r.copy(D.empty))),l?0:1,a?0:1),l?0:1)),e(s.scrollIntoView()),!0}function ZM(t){return function(e,n){let{$from:s,$to:r}=e.selection,i=s.blockRange(r,c=>c.childCount>0&&c.firstChild.type==t);if(!i)return!1;let o=i.startIndex;if(o==0)return!1;let l=i.parent,a=l.child(o-1);if(a.type!=t)return!1;if(n){let c=a.lastChild&&a.lastChild.type==l.type,u=D.from(c?t.create():null),f=new K(D.from(t.create(null,D.from(l.type.create(null,u)))),c?3:1,0),d=i.start,h=i.end;n(e.tr.step(new Ge(d-(c?3:1),h,d,h,f,1,!0)).scrollIntoView())}return!0}}const tt=function(t){for(var e=0;;e++)if(t=t.previousSibling,!t)return e},pi=function(t){let e=t.assignedSlot||t.parentNode;return e&&e.nodeType==11?e.host:e};let xf=null;const Fn=function(t,e,n){let s=xf||(xf=document.createRange());return s.setEnd(t,n??t.nodeValue.length),s.setStart(t,e||0),s},eA=function(){xf=null},br=function(t,e,n,s){return n&&(xm(t,e,n,s,-1)||xm(t,e,n,s,1))},tA=/^(img|br|input|textarea|hr)$/i;function xm(t,e,n,s,r){for(var i;;){if(t==n&&e==s)return!0;if(e==(r<0?0:Yt(t))){let o=t.parentNode;if(!o||o.nodeType!=1||Go(t)||tA.test(t.nodeName)||t.contentEditable==\"false\")return!1;e=tt(t)+(r<0?0:1),t=o}else if(t.nodeType==1){let o=t.childNodes[e+(r<0?-1:0)];if(o.nodeType==1&&o.contentEditable==\"false\")if(!((i=o.pmViewDesc)===null||i===void 0)&&i.ignoreForSelection)e+=r;else return!1;else t=o,e=r<0?Yt(t):0}else return!1}}function Yt(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function nA(t,e){for(;;){if(t.nodeType==3&&e)return t;if(t.nodeType==1&&e>0){if(t.contentEditable==\"false\")return null;t=t.childNodes[e-1],e=Yt(t)}else if(t.parentNode&&!Go(t))e=tt(t),t=t.parentNode;else return null}}function sA(t,e){for(;;){if(t.nodeType==3&&e<t.nodeValue.length)return t;if(t.nodeType==1&&e<t.childNodes.length){if(t.contentEditable==\"false\")return null;t=t.childNodes[e],e=0}else if(t.parentNode&&!Go(t))e=tt(t)+1,t=t.parentNode;else return null}}function rA(t,e,n){for(let s=e==0,r=e==Yt(t);s||r;){if(t==n)return!0;let i=tt(t);if(t=t.parentNode,!t)return!1;s=s&&i==0,r=r&&i==Yt(t)}}function Go(t){let e;for(let n=t;n&&!(e=n.pmViewDesc);n=n.parentNode);return e&&e.node&&e.node.isBlock&&(e.dom==t||e.contentDOM==t)}const Pc=function(t){return t.focusNode&&br(t.focusNode,t.focusOffset,t.anchorNode,t.anchorOffset)};function Ys(t,e){let n=document.createEvent(\"Event\");return n.initEvent(\"keydown\",!0,!0),n.keyCode=t,n.key=n.code=e,n}function iA(t){let e=t.activeElement;for(;e&&e.shadowRoot;)e=e.shadowRoot.activeElement;return e}function oA(t,e,n){if(t.caretPositionFromPoint)try{let s=t.caretPositionFromPoint(e,n);if(s)return{node:s.offsetNode,offset:Math.min(Yt(s.offsetNode),s.offset)}}catch{}if(t.caretRangeFromPoint){let s=t.caretRangeFromPoint(e,n);if(s)return{node:s.startContainer,offset:Math.min(Yt(s.startContainer),s.startOffset)}}}const En=typeof navigator<\"u\"?navigator:null,Cm=typeof document<\"u\"?document:null,js=En&&En.userAgent||\"\",Cf=/Edge\\/(\\d+)/.exec(js),H1=/MSIE \\d/.exec(js),vf=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(js),_t=!!(H1||vf||Cf),Ds=H1?document.documentMode:vf?+vf[1]:Cf?+Cf[1]:0,Zt=!_t&&/gecko\\/(\\d+)/i.test(js);Zt&&+(/Firefox\\/(\\d+)/.exec(js)||[0,0])[1];const kf=!_t&&/Chrome\\/(\\d+)/.exec(js),Je=!!kf,F1=kf?+kf[1]:0,ot=!_t&&!!En&&/Apple Computer/.test(En.vendor),mi=ot&&(/Mobile\\/\\w+/.test(js)||!!En&&En.maxTouchPoints>2),Jt=mi||(En?/Mac/.test(En.platform):!1),z1=En?/Win/.test(En.platform):!1,Un=/Android \\d/.test(js),Yo=!!Cm&&\"webkitFontSmoothing\"in Cm.documentElement.style,lA=Yo?+(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent)||[0,0])[1]:0;function aA(t){let e=t.defaultView&&t.defaultView.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:t.documentElement.clientWidth,top:0,bottom:t.documentElement.clientHeight}}function _n(t,e){return typeof t==\"number\"?t:t[e]}function cA(t){let e=t.getBoundingClientRect(),n=e.width/t.offsetWidth||1,s=e.height/t.offsetHeight||1;return{left:e.left,right:e.left+t.clientWidth*n,top:e.top,bottom:e.top+t.clientHeight*s}}function vm(t,e,n){let s=t.someProp(\"scrollThreshold\")||0,r=t.someProp(\"scrollMargin\")||5,i=t.dom.ownerDocument;for(let o=n||t.dom;o;){if(o.nodeType!=1){o=pi(o);continue}let l=o,a=l==i.body,c=a?aA(i):cA(l),u=0,f=0;if(e.top<c.top+_n(s,\"top\")?f=-(c.top-e.top+_n(r,\"top\")):e.bottom>c.bottom-_n(s,\"bottom\")&&(f=e.bottom-e.top>c.bottom-c.top?e.top+_n(r,\"top\")-c.top:e.bottom-c.bottom+_n(r,\"bottom\")),e.left<c.left+_n(s,\"left\")?u=-(c.left-e.left+_n(r,\"left\")):e.right>c.right-_n(s,\"right\")&&(u=e.right-c.right+_n(r,\"right\")),u||f)if(a)i.defaultView.scrollBy(u,f);else{let h=l.scrollLeft,p=l.scrollTop;f&&(l.scrollTop+=f),u&&(l.scrollLeft+=u);let m=l.scrollLeft-h,g=l.scrollTop-p;e={left:e.left-m,top:e.top-g,right:e.right-m,bottom:e.bottom-g}}let d=a?\"fixed\":getComputedStyle(o).position;if(/^(fixed|sticky)$/.test(d))break;o=d==\"absolute\"?o.offsetParent:pi(o)}}function uA(t){let e=t.dom.getBoundingClientRect(),n=Math.max(0,e.top),s,r;for(let i=(e.left+e.right)/2,o=n+1;o<Math.min(innerHeight,e.bottom);o+=5){let l=t.root.elementFromPoint(i,o);if(!l||l==t.dom||!t.dom.contains(l))continue;let a=l.getBoundingClientRect();if(a.top>=n-20){s=l,r=a.top;break}}return{refDOM:s,refTop:r,stack:V1(t.dom)}}function V1(t){let e=[],n=t.ownerDocument;for(let s=t;s&&(e.push({dom:s,top:s.scrollTop,left:s.scrollLeft}),t!=n);s=pi(s));return e}function fA({refDOM:t,refTop:e,stack:n}){let s=t?t.getBoundingClientRect().top:0;W1(n,s==0?0:s-e)}function W1(t,e){for(let n=0;n<t.length;n++){let{dom:s,top:r,left:i}=t[n];s.scrollTop!=r+e&&(s.scrollTop=r+e),s.scrollLeft!=i&&(s.scrollLeft=i)}}let Lr=null;function dA(t){if(t.setActive)return t.setActive();if(Lr)return t.focus(Lr);let e=V1(t);t.focus(Lr==null?{get preventScroll(){return Lr={preventScroll:!0},!0}}:void 0),Lr||(Lr=!1,W1(e,0))}function j1(t,e){let n,s=2e8,r,i=0,o=e.top,l=e.top,a,c;for(let u=t.firstChild,f=0;u;u=u.nextSibling,f++){let d;if(u.nodeType==1)d=u.getClientRects();else if(u.nodeType==3)d=Fn(u).getClientRects();else continue;for(let h=0;h<d.length;h++){let p=d[h];if(p.top<=o&&p.bottom>=l){o=Math.max(p.bottom,o),l=Math.min(p.top,l);let m=p.left>e.left?p.left-e.left:p.right<e.left?e.left-p.right:0;if(m<s){n=u,s=m,r=m&&n.nodeType==3?{left:p.right<e.left?p.right:p.left,top:e.top}:e,u.nodeType==1&&m&&(i=f+(e.left>=(p.left+p.right)/2?1:0));continue}}else p.top>e.top&&!a&&p.left<=e.left&&p.right>=e.left&&(a=u,c={left:Math.max(p.left,Math.min(p.right,e.left)),top:p.top});!n&&(e.left>=p.right&&e.top>=p.top||e.left>=p.left&&e.top>=p.bottom)&&(i=f+1)}}return!n&&a&&(n=a,r=c,s=0),n&&n.nodeType==3?hA(n,r):!n||s&&n.nodeType==1?{node:t,offset:i}:j1(n,r)}function hA(t,e){let n=t.nodeValue.length,s=document.createRange(),r;for(let i=0;i<n;i++){s.setEnd(t,i+1),s.setStart(t,i);let o=ms(s,1);if(o.top!=o.bottom&&rh(e,o)){r={node:t,offset:i+(e.left>=(o.left+o.right)/2?1:0)};break}}return s.detach(),r||{node:t,offset:0}}function rh(t,e){return t.left>=e.left-1&&t.left<=e.right+1&&t.top>=e.top-1&&t.top<=e.bottom+1}function pA(t,e){let n=t.parentNode;return n&&/^li$/i.test(n.nodeName)&&e.left<t.getBoundingClientRect().left?n:t}function mA(t,e,n){let{node:s,offset:r}=j1(e,n),i=-1;if(s.nodeType==1&&!s.firstChild){let o=s.getBoundingClientRect();i=o.left!=o.right&&n.left>(o.left+o.right)/2?1:-1}return t.docView.posFromDOM(s,r,i)}function gA(t,e,n,s){let r=-1;for(let i=e,o=!1;i!=t.dom;){let l=t.docView.nearestDesc(i,!0),a;if(!l)return null;if(l.dom.nodeType==1&&(l.node.isBlock&&l.parent||!l.contentDOM)&&((a=l.dom.getBoundingClientRect()).width||a.height)&&(l.node.isBlock&&l.parent&&!/^T(R|BODY|HEAD|FOOT)$/.test(l.dom.nodeName)&&(!o&&a.left>s.left||a.top>s.top?r=l.posBefore:(!o&&a.right<s.left||a.bottom<s.top)&&(r=l.posAfter),o=!0),!l.contentDOM&&r<0&&!l.node.isText))return(l.node.isBlock?s.top<(a.top+a.bottom)/2:s.left<(a.left+a.right)/2)?l.posBefore:l.posAfter;i=l.dom.parentNode}return r>-1?r:t.docView.posFromDOM(e,n,-1)}function U1(t,e,n){let s=t.childNodes.length;if(s&&n.top<n.bottom)for(let r=Math.max(0,Math.min(s-1,Math.floor(s*(e.top-n.top)/(n.bottom-n.top))-2)),i=r;;){let o=t.childNodes[i];if(o.nodeType==1){let l=o.getClientRects();for(let a=0;a<l.length;a++){let c=l[a];if(rh(e,c))return U1(o,e,c)}}if((i=(i+1)%s)==r)break}return t}function yA(t,e){let n=t.dom.ownerDocument,s,r=0,i=oA(n,e.left,e.top);i&&({node:s,offset:r}=i);let o=(t.root.elementFromPoint?t.root:n).elementFromPoint(e.left,e.top),l;if(!o||!t.dom.contains(o.nodeType!=1?o.parentNode:o)){let c=t.dom.getBoundingClientRect();if(!rh(e,c)||(o=U1(t.dom,e,c),!o))return null}if(ot)for(let c=o;s&&c;c=pi(c))c.draggable&&(s=void 0);if(o=pA(o,e),s){if(Zt&&s.nodeType==1&&(r=Math.min(r,s.childNodes.length),r<s.childNodes.length)){let u=s.childNodes[r],f;u.nodeName==\"IMG\"&&(f=u.getBoundingClientRect()).right<=e.left&&f.bottom>e.top&&r++}let c;Yo&&r&&s.nodeType==1&&(c=s.childNodes[r-1]).nodeType==1&&c.contentEditable==\"false\"&&c.getBoundingClientRect().top>=e.top&&r--,s==t.dom&&r==s.childNodes.length-1&&s.lastChild.nodeType==1&&e.top>s.lastChild.getBoundingClientRect().bottom?l=t.state.doc.content.size:(r==0||s.nodeType!=1||s.childNodes[r-1].nodeName!=\"BR\")&&(l=gA(t,s,r,e))}l==null&&(l=mA(t,o,e));let a=t.docView.nearestDesc(o,!0);return{pos:l,inside:a?a.posAtStart-a.border:-1}}function km(t){return t.top<t.bottom||t.left<t.right}function ms(t,e){let n=t.getClientRects();if(n.length){let s=n[e<0?0:n.length-1];if(km(s))return s}return Array.prototype.find.call(n,km)||t.getBoundingClientRect()}const bA=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;function K1(t,e,n){let{node:s,offset:r,atom:i}=t.docView.domFromPos(e,n<0?-1:1),o=Yo||Zt;if(s.nodeType==3)if(o&&(bA.test(s.nodeValue)||(n<0?!r:r==s.nodeValue.length))){let a=ms(Fn(s,r,r),n);if(Zt&&r&&/\\s/.test(s.nodeValue[r-1])&&r<s.nodeValue.length){let c=ms(Fn(s,r-1,r-1),-1);if(c.top==a.top){let u=ms(Fn(s,r,r+1),-1);if(u.top!=a.top)return Ii(u,u.left<c.left)}}return a}else{let a=r,c=r,u=n<0?1:-1;return n<0&&!r?(c++,u=-1):n>=0&&r==s.nodeValue.length?(a--,u=1):n<0?a--:c++,Ii(ms(Fn(s,a,c),u),u<0)}if(!t.state.doc.resolve(e-(i||0)).parent.inlineContent){if(i==null&&r&&(n<0||r==Yt(s))){let a=s.childNodes[r-1];if(a.nodeType==1)return xu(a.getBoundingClientRect(),!1)}if(i==null&&r<Yt(s)){let a=s.childNodes[r];if(a.nodeType==1)return xu(a.getBoundingClientRect(),!0)}return xu(s.getBoundingClientRect(),n>=0)}if(i==null&&r&&(n<0||r==Yt(s))){let a=s.childNodes[r-1],c=a.nodeType==3?Fn(a,Yt(a)-(o?0:1)):a.nodeType==1&&(a.nodeName!=\"BR\"||!a.nextSibling)?a:null;if(c)return Ii(ms(c,1),!1)}if(i==null&&r<Yt(s)){let a=s.childNodes[r];for(;a.pmViewDesc&&a.pmViewDesc.ignoreForCoords;)a=a.nextSibling;let c=a?a.nodeType==3?Fn(a,0,o?0:1):a.nodeType==1?a:null:null;if(c)return Ii(ms(c,-1),!0)}return Ii(ms(s.nodeType==3?Fn(s):s,-n),n>=0)}function Ii(t,e){if(t.width==0)return t;let n=e?t.left:t.right;return{top:t.top,bottom:t.bottom,left:n,right:n}}function xu(t,e){if(t.height==0)return t;let n=e?t.top:t.bottom;return{top:n,bottom:n,left:t.left,right:t.right}}function q1(t,e,n){let s=t.state,r=t.root.activeElement;s!=e&&t.updateState(e),r!=t.dom&&t.focus();try{return n()}finally{s!=e&&t.updateState(s),r!=t.dom&&r&&r.focus()}}function SA(t,e,n){let s=e.selection,r=n==\"up\"?s.$from:s.$to;return q1(t,e,()=>{let{node:i}=t.docView.domFromPos(r.pos,n==\"up\"?-1:1);for(;;){let l=t.docView.nearestDesc(i,!0);if(!l)break;if(l.node.isBlock){i=l.contentDOM||l.dom;break}i=l.dom.parentNode}let o=K1(t,r.pos,1);for(let l=i.firstChild;l;l=l.nextSibling){let a;if(l.nodeType==1)a=l.getClientRects();else if(l.nodeType==3)a=Fn(l,0,l.nodeValue.length).getClientRects();else continue;for(let c=0;c<a.length;c++){let u=a[c];if(u.bottom>u.top+1&&(n==\"up\"?o.top-u.top>(u.bottom-o.top)*2:u.bottom-o.bottom>(o.bottom-u.top)*2))return!1}}return!0})}const wA=/[\\u0590-\\u08ac]/;function xA(t,e,n){let{$head:s}=e.selection;if(!s.parent.isTextblock)return!1;let r=s.parentOffset,i=!r,o=r==s.parent.content.size,l=t.domSelection();return l?!wA.test(s.parent.textContent)||!l.modify?n==\"left\"||n==\"backward\"?i:o:q1(t,e,()=>{let{focusNode:a,focusOffset:c,anchorNode:u,anchorOffset:f}=t.domSelectionRange(),d=l.caretBidiLevel;l.modify(\"move\",n,\"character\");let h=s.depth?t.docView.domAfterPos(s.before()):t.dom,{focusNode:p,focusOffset:m}=t.domSelectionRange(),g=p&&!h.contains(p.nodeType==1?p:p.parentNode)||a==p&&c==m;try{l.collapse(u,f),a&&(a!=u||c!=f)&&l.extend&&l.extend(a,c)}catch{}return d!=null&&(l.caretBidiLevel=d),g}):s.pos==s.start()||s.pos==s.end()}let Tm=null,Em=null,Mm=!1;function CA(t,e,n){return Tm==e&&Em==n?Mm:(Tm=e,Em=n,Mm=n==\"up\"||n==\"down\"?SA(t,e,n):xA(t,e,n))}const en=0,Am=1,Zs=2,Mn=3;class Xo{constructor(e,n,s,r){this.parent=e,this.children=n,this.dom=s,this.contentDOM=r,this.dirty=en,s.pmViewDesc=this}matchesWidget(e){return!1}matchesMark(e){return!1}matchesNode(e,n,s){return!1}matchesHack(e){return!1}parseRule(){return null}stopEvent(e){return!1}get size(){let e=0;for(let n=0;n<this.children.length;n++)e+=this.children[n].size;return e}get border(){return 0}destroy(){this.parent=void 0,this.dom.pmViewDesc==this&&(this.dom.pmViewDesc=void 0);for(let e=0;e<this.children.length;e++)this.children[e].destroy()}posBeforeChild(e){for(let n=0,s=this.posAtStart;;n++){let r=this.children[n];if(r==e)return s;s+=r.size}}get posBefore(){return this.parent.posBeforeChild(this)}get posAtStart(){return this.parent?this.parent.posBeforeChild(this)+this.border:0}get posAfter(){return this.posBefore+this.size}get posAtEnd(){return this.posAtStart+this.size-2*this.border}localPosFromDOM(e,n,s){if(this.contentDOM&&this.contentDOM.contains(e.nodeType==1?e:e.parentNode))if(s<0){let i,o;if(e==this.contentDOM)i=e.childNodes[n-1];else{for(;e.parentNode!=this.contentDOM;)e=e.parentNode;i=e.previousSibling}for(;i&&!((o=i.pmViewDesc)&&o.parent==this);)i=i.previousSibling;return i?this.posBeforeChild(o)+o.size:this.posAtStart}else{let i,o;if(e==this.contentDOM)i=e.childNodes[n];else{for(;e.parentNode!=this.contentDOM;)e=e.parentNode;i=e.nextSibling}for(;i&&!((o=i.pmViewDesc)&&o.parent==this);)i=i.nextSibling;return i?this.posBeforeChild(o):this.posAtEnd}let r;if(e==this.dom&&this.contentDOM)r=n>tt(this.contentDOM);else if(this.contentDOM&&this.contentDOM!=this.dom&&this.dom.contains(this.contentDOM))r=e.compareDocumentPosition(this.contentDOM)&2;else if(this.dom.firstChild){if(n==0)for(let i=e;;i=i.parentNode){if(i==this.dom){r=!1;break}if(i.previousSibling)break}if(r==null&&n==e.childNodes.length)for(let i=e;;i=i.parentNode){if(i==this.dom){r=!0;break}if(i.nextSibling)break}}return r??s>0?this.posAtEnd:this.posAtStart}nearestDesc(e,n=!1){for(let s=!0,r=e;r;r=r.parentNode){let i=this.getDesc(r),o;if(i&&(!n||i.node))if(s&&(o=i.nodeDOM)&&!(o.nodeType==1?o.contains(e.nodeType==1?e:e.parentNode):o==e))s=!1;else return i}}getDesc(e){let n=e.pmViewDesc;for(let s=n;s;s=s.parent)if(s==this)return n}posFromDOM(e,n,s){for(let r=e;r;r=r.parentNode){let i=this.getDesc(r);if(i)return i.localPosFromDOM(e,n,s)}return-1}descAt(e){for(let n=0,s=0;n<this.children.length;n++){let r=this.children[n],i=s+r.size;if(s==e&&i!=s){for(;!r.border&&r.children.length;)for(let o=0;o<r.children.length;o++){let l=r.children[o];if(l.size){r=l;break}}return r}if(e<i)return r.descAt(e-s-r.border);s=i}}domFromPos(e,n){if(!this.contentDOM)return{node:this.dom,offset:0,atom:e+1};let s=0,r=0;for(let i=0;s<this.children.length;s++){let o=this.children[s],l=i+o.size;if(l>e||o instanceof G1){r=e-i;break}i=l}if(r)return this.children[s].domFromPos(r-this.children[s].border,n);for(let i;s&&!(i=this.children[s-1]).size&&i instanceof J1&&i.side>=0;s--);if(n<=0){let i,o=!0;for(;i=s?this.children[s-1]:null,!(!i||i.dom.parentNode==this.contentDOM);s--,o=!1);return i&&n&&o&&!i.border&&!i.domAtom?i.domFromPos(i.size,n):{node:this.contentDOM,offset:i?tt(i.dom)+1:0}}else{let i,o=!0;for(;i=s<this.children.length?this.children[s]:null,!(!i||i.dom.parentNode==this.contentDOM);s++,o=!1);return i&&o&&!i.border&&!i.domAtom?i.domFromPos(0,n):{node:this.contentDOM,offset:i?tt(i.dom):this.contentDOM.childNodes.length}}}parseRange(e,n,s=0){if(this.children.length==0)return{node:this.contentDOM,from:e,to:n,fromOffset:0,toOffset:this.contentDOM.childNodes.length};let r=-1,i=-1;for(let o=s,l=0;;l++){let a=this.children[l],c=o+a.size;if(r==-1&&e<=c){let u=o+a.border;if(e>=u&&n<=c-a.border&&a.node&&a.contentDOM&&this.contentDOM.contains(a.contentDOM))return a.parseRange(e,n,u);e=o;for(let f=l;f>0;f--){let d=this.children[f-1];if(d.size&&d.dom.parentNode==this.contentDOM&&!d.emptyChildAt(1)){r=tt(d.dom)+1;break}e-=d.size}r==-1&&(r=0)}if(r>-1&&(c>n||l==this.children.length-1)){n=c;for(let u=l+1;u<this.children.length;u++){let f=this.children[u];if(f.size&&f.dom.parentNode==this.contentDOM&&!f.emptyChildAt(-1)){i=tt(f.dom);break}n+=f.size}i==-1&&(i=this.contentDOM.childNodes.length);break}o=c}return{node:this.contentDOM,from:e,to:n,fromOffset:r,toOffset:i}}emptyChildAt(e){if(this.border||!this.contentDOM||!this.children.length)return!1;let n=this.children[e<0?0:this.children.length-1];return n.size==0||n.emptyChildAt(e)}domAfterPos(e){let{node:n,offset:s}=this.domFromPos(e,0);if(n.nodeType!=1||s==n.childNodes.length)throw new RangeError(\"No node after pos \"+e);return n.childNodes[s]}setSelection(e,n,s,r=!1){let i=Math.min(e,n),o=Math.max(e,n);for(let h=0,p=0;h<this.children.length;h++){let m=this.children[h],g=p+m.size;if(i>p&&o<g)return m.setSelection(e-p-m.border,n-p-m.border,s,r);p=g}let l=this.domFromPos(e,e?-1:1),a=n==e?l:this.domFromPos(n,n?-1:1),c=s.root.getSelection(),u=s.domSelectionRange(),f=!1;if((Zt||ot)&&e==n){let{node:h,offset:p}=l;if(h.nodeType==3){if(f=!!(p&&h.nodeValue[p-1]==`\n`),f&&p==h.nodeValue.length)for(let m=h,g;m;m=m.parentNode){if(g=m.nextSibling){g.nodeName==\"BR\"&&(l=a={node:g.parentNode,offset:tt(g)+1});break}let y=m.pmViewDesc;if(y&&y.node&&y.node.isBlock)break}}else{let m=h.childNodes[p-1];f=m&&(m.nodeName==\"BR\"||m.contentEditable==\"false\")}}if(Zt&&u.focusNode&&u.focusNode!=a.node&&u.focusNode.nodeType==1){let h=u.focusNode.childNodes[u.focusOffset];h&&h.contentEditable==\"false\"&&(r=!0)}if(!(r||f&&ot)&&br(l.node,l.offset,u.anchorNode,u.anchorOffset)&&br(a.node,a.offset,u.focusNode,u.focusOffset))return;let d=!1;if((c.extend||e==n)&&!(f&&Zt)){c.collapse(l.node,l.offset);try{e!=n&&c.extend(a.node,a.offset),d=!0}catch{}}if(!d){if(e>n){let p=l;l=a,a=p}let h=document.createRange();h.setEnd(a.node,a.offset),h.setStart(l.node,l.offset),c.removeAllRanges(),c.addRange(h)}}ignoreMutation(e){return!this.contentDOM&&e.type!=\"selection\"}get contentLost(){return this.contentDOM&&this.contentDOM!=this.dom&&!this.dom.contains(this.contentDOM)}markDirty(e,n){for(let s=0,r=0;r<this.children.length;r++){let i=this.children[r],o=s+i.size;if(s==o?e<=o&&n>=s:e<o&&n>s){let l=s+i.border,a=o-i.border;if(e>=l&&n<=a){this.dirty=e==s||n==o?Zs:Am,e==l&&n==a&&(i.contentLost||i.dom.parentNode!=this.contentDOM)?i.dirty=Mn:i.markDirty(e-l,n-l);return}else i.dirty=i.dom==i.contentDOM&&i.dom.parentNode==this.contentDOM&&!i.children.length?Zs:Mn}s=o}this.dirty=Zs}markParentsDirty(){let e=1;for(let n=this.parent;n;n=n.parent,e++){let s=e==1?Zs:Am;n.dirty<s&&(n.dirty=s)}}get domAtom(){return!1}get ignoreForCoords(){return!1}get ignoreForSelection(){return!1}isText(e){return!1}}class J1 extends Xo{constructor(e,n,s,r){let i,o=n.type.toDOM;if(typeof o==\"function\"&&(o=o(s,()=>{if(!i)return r;if(i.parent)return i.parent.posBeforeChild(i)})),!n.type.spec.raw){if(o.nodeType!=1){let l=document.createElement(\"span\");l.appendChild(o),o=l}o.contentEditable=\"false\",o.classList.add(\"ProseMirror-widget\")}super(e,[],o,null),this.widget=n,this.widget=n,i=this}matchesWidget(e){return this.dirty==en&&e.type.eq(this.widget.type)}parseRule(){return{ignore:!0}}stopEvent(e){let n=this.widget.spec.stopEvent;return n?n(e):!1}ignoreMutation(e){return e.type!=\"selection\"||this.widget.spec.ignoreSelection}destroy(){this.widget.type.destroy(this.dom),super.destroy()}get domAtom(){return!0}get ignoreForSelection(){return!!this.widget.type.spec.relaxedSide}get side(){return this.widget.type.side}}class vA extends Xo{constructor(e,n,s,r){super(e,[],n,null),this.textDOM=s,this.text=r}get size(){return this.text.length}localPosFromDOM(e,n){return e!=this.textDOM?this.posAtStart+(n?this.size:0):this.posAtStart+n}domFromPos(e){return{node:this.textDOM,offset:e}}ignoreMutation(e){return e.type===\"characterData\"&&e.target.nodeValue==e.oldValue}}class Sr extends Xo{constructor(e,n,s,r,i){super(e,[],s,r),this.mark=n,this.spec=i}static create(e,n,s,r){let i=r.nodeViews[n.type.name],o=i&&i(n,r,s);return(!o||!o.dom)&&(o=Nr.renderSpec(document,n.type.spec.toDOM(n,s),null,n.attrs)),new Sr(e,n,o.dom,o.contentDOM||o.dom,o)}parseRule(){return this.dirty&Mn||this.mark.type.spec.reparseInView?null:{mark:this.mark.type.name,attrs:this.mark.attrs,contentElement:this.contentDOM}}matchesMark(e){return this.dirty!=Mn&&this.mark.eq(e)}markDirty(e,n){if(super.markDirty(e,n),this.dirty!=en){let s=this.parent;for(;!s.node;)s=s.parent;s.dirty<this.dirty&&(s.dirty=this.dirty),this.dirty=en}}slice(e,n,s){let r=Sr.create(this.parent,this.mark,!0,s),i=this.children,o=this.size;n<o&&(i=Ef(i,n,o,s)),e>0&&(i=Ef(i,0,e,s));for(let l=0;l<i.length;l++)i[l].parent=r;return r.children=i,r}ignoreMutation(e){return this.spec.ignoreMutation?this.spec.ignoreMutation(e):super.ignoreMutation(e)}destroy(){this.spec.destroy&&this.spec.destroy(),super.destroy()}}class Ps extends Xo{constructor(e,n,s,r,i,o,l,a,c){super(e,[],i,o),this.node=n,this.outerDeco=s,this.innerDeco=r,this.nodeDOM=l}static create(e,n,s,r,i,o){let l=i.nodeViews[n.type.name],a,c=l&&l(n,i,()=>{if(!a)return o;if(a.parent)return a.parent.posBeforeChild(a)},s,r),u=c&&c.dom,f=c&&c.contentDOM;if(n.isText){if(!u)u=document.createTextNode(n.text);else if(u.nodeType!=3)throw new RangeError(\"Text must be rendered as a DOM text node\")}else u||({dom:u,contentDOM:f}=Nr.renderSpec(document,n.type.spec.toDOM(n),null,n.attrs));!f&&!n.isText&&u.nodeName!=\"BR\"&&(u.hasAttribute(\"contenteditable\")||(u.contentEditable=\"false\"),n.type.spec.draggable&&(u.draggable=!0));let d=u;return u=Q1(u,s,n),c?a=new kA(e,n,s,r,u,f||null,d,c,i,o+1):n.isText?new Lc(e,n,s,r,u,d,i):new Ps(e,n,s,r,u,f||null,d,i,o+1)}parseRule(){if(this.node.type.spec.reparseInView)return null;let e={node:this.node.type.name,attrs:this.node.attrs};if(this.node.type.whitespace==\"pre\"&&(e.preserveWhitespace=\"full\"),!this.contentDOM)e.getContent=()=>this.node.content;else if(!this.contentLost)e.contentElement=this.contentDOM;else{for(let n=this.children.length-1;n>=0;n--){let s=this.children[n];if(this.dom.contains(s.dom.parentNode)){e.contentElement=s.dom.parentNode;break}}e.contentElement||(e.getContent=()=>D.empty)}return e}matchesNode(e,n,s){return this.dirty==en&&e.eq(this.node)&&xa(n,this.outerDeco)&&s.eq(this.innerDeco)}get size(){return this.node.nodeSize}get border(){return this.node.isLeaf?0:1}updateChildren(e,n){let s=this.node.inlineContent,r=n,i=e.composing?this.localCompositionInfo(e,n):null,o=i&&i.pos>-1?i:null,l=i&&i.pos<0,a=new EA(this,o&&o.node,e);NA(this.node,this.innerDeco,(c,u,f)=>{c.spec.marks?a.syncToMarks(c.spec.marks,s,e,u):c.type.side>=0&&!f&&a.syncToMarks(u==this.node.childCount?Ce.none:this.node.child(u).marks,s,e,u),a.placeWidget(c,e,r)},(c,u,f,d)=>{a.syncToMarks(c.marks,s,e,d);let h;a.findNodeMatch(c,u,f,d)||l&&e.state.selection.from>r&&e.state.selection.to<r+c.nodeSize&&(h=a.findIndexWithChild(i.node))>-1&&a.updateNodeAt(c,u,f,h,e)||a.updateNextNode(c,u,f,e,d,r)||a.addNode(c,u,f,e,r),r+=c.nodeSize}),a.syncToMarks([],s,e,0),this.node.isTextblock&&a.addTextblockHacks(),a.destroyRest(),(a.changed||this.dirty==Zs)&&(o&&this.protectLocalComposition(e,o),Y1(this.contentDOM,this.children,e),mi&&OA(this.dom))}localCompositionInfo(e,n){let{from:s,to:r}=e.state.selection;if(!(e.state.selection instanceof Z)||s<n||r>n+this.node.content.size)return null;let i=e.input.compositionNode;if(!i||!this.dom.contains(i.parentNode))return null;if(this.node.inlineContent){let o=i.nodeValue,l=RA(this.node.content,o,s-n,r-n);return l<0?null:{node:i,pos:l,text:o}}else return{node:i,pos:-1,text:\"\"}}protectLocalComposition(e,{node:n,pos:s,text:r}){if(this.getDesc(n))return;let i=n;for(;i.parentNode!=this.contentDOM;i=i.parentNode){for(;i.previousSibling;)i.parentNode.removeChild(i.previousSibling);for(;i.nextSibling;)i.parentNode.removeChild(i.nextSibling);i.pmViewDesc&&(i.pmViewDesc=void 0)}let o=new vA(this,i,n,r);e.input.compositionNodes.push(o),this.children=Ef(this.children,s,s+r.length,e,o)}update(e,n,s,r){return this.dirty==Mn||!e.sameMarkup(this.node)?!1:(this.updateInner(e,n,s,r),!0)}updateInner(e,n,s,r){this.updateOuterDeco(n),this.node=e,this.innerDeco=s,this.contentDOM&&this.updateChildren(r,this.posAtStart),this.dirty=en}updateOuterDeco(e){if(xa(e,this.outerDeco))return;let n=this.nodeDOM.nodeType!=1,s=this.dom;this.dom=X1(this.dom,this.nodeDOM,Tf(this.outerDeco,this.node,n),Tf(e,this.node,n)),this.dom!=s&&(s.pmViewDesc=void 0,this.dom.pmViewDesc=this),this.outerDeco=e}selectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.add(\"ProseMirror-selectednode\"),(this.contentDOM||!this.node.type.spec.draggable)&&(this.nodeDOM.draggable=!0))}deselectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.remove(\"ProseMirror-selectednode\"),(this.contentDOM||!this.node.type.spec.draggable)&&this.nodeDOM.removeAttribute(\"draggable\"))}get domAtom(){return this.node.isAtom}}function Nm(t,e,n,s,r){Q1(s,e,t);let i=new Ps(void 0,t,e,n,s,s,s,r,0);return i.contentDOM&&i.updateChildren(r,0),i}class Lc extends Ps{constructor(e,n,s,r,i,o,l){super(e,n,s,r,i,null,o,l,0)}parseRule(){let e=this.nodeDOM.parentNode;for(;e&&e!=this.dom&&!e.pmIsDeco;)e=e.parentNode;return{skip:e||!0}}update(e,n,s,r){return this.dirty==Mn||this.dirty!=en&&!this.inParent()||!e.sameMarkup(this.node)?!1:(this.updateOuterDeco(n),(this.dirty!=en||e.text!=this.node.text)&&e.text!=this.nodeDOM.nodeValue&&(this.nodeDOM.nodeValue=e.text,r.trackWrites==this.nodeDOM&&(r.trackWrites=null)),this.node=e,this.dirty=en,!0)}inParent(){let e=this.parent.contentDOM;for(let n=this.nodeDOM;n;n=n.parentNode)if(n==e)return!0;return!1}domFromPos(e){return{node:this.nodeDOM,offset:e}}localPosFromDOM(e,n,s){return e==this.nodeDOM?this.posAtStart+Math.min(n,this.node.text.length):super.localPosFromDOM(e,n,s)}ignoreMutation(e){return e.type!=\"characterData\"&&e.type!=\"selection\"}slice(e,n,s){let r=this.node.cut(e,n),i=document.createTextNode(r.text);return new Lc(this.parent,r,this.outerDeco,this.innerDeco,i,i,s)}markDirty(e,n){super.markDirty(e,n),this.dom!=this.nodeDOM&&(e==0||n==this.nodeDOM.nodeValue.length)&&(this.dirty=Mn)}get domAtom(){return!1}isText(e){return this.node.text==e}}class G1 extends Xo{parseRule(){return{ignore:!0}}matchesHack(e){return this.dirty==en&&this.dom.nodeName==e}get domAtom(){return!0}get ignoreForCoords(){return this.dom.nodeName==\"IMG\"}}class kA extends Ps{constructor(e,n,s,r,i,o,l,a,c,u){super(e,n,s,r,i,o,l,c,u),this.spec=a}update(e,n,s,r){if(this.dirty==Mn)return!1;if(this.spec.update&&(this.node.type==e.type||this.spec.multiType)){let i=this.spec.update(e,n,s);return i&&this.updateInner(e,n,s,r),i}else return!this.contentDOM&&!e.isLeaf?!1:super.update(e,n,s,r)}selectNode(){this.spec.selectNode?this.spec.selectNode():super.selectNode()}deselectNode(){this.spec.deselectNode?this.spec.deselectNode():super.deselectNode()}setSelection(e,n,s,r){this.spec.setSelection?this.spec.setSelection(e,n,s.root):super.setSelection(e,n,s,r)}destroy(){this.spec.destroy&&this.spec.destroy(),super.destroy()}stopEvent(e){return this.spec.stopEvent?this.spec.stopEvent(e):!1}ignoreMutation(e){return this.spec.ignoreMutation?this.spec.ignoreMutation(e):super.ignoreMutation(e)}}function Y1(t,e,n){let s=t.firstChild,r=!1;for(let i=0;i<e.length;i++){let o=e[i],l=o.dom;if(l.parentNode==t){for(;l!=s;)s=Om(s),r=!0;s=s.nextSibling}else r=!0,t.insertBefore(l,s);if(o instanceof Sr){let a=s?s.previousSibling:t.lastChild;Y1(o.contentDOM,o.children,n),s=a?a.nextSibling:t.firstChild}}for(;s;)s=Om(s),r=!0;r&&n.trackWrites==t&&(n.trackWrites=null)}const Qi=function(t){t&&(this.nodeName=t)};Qi.prototype=Object.create(null);const er=[new Qi];function Tf(t,e,n){if(t.length==0)return er;let s=n?er[0]:new Qi,r=[s];for(let i=0;i<t.length;i++){let o=t[i].type.attrs;if(o){o.nodeName&&r.push(s=new Qi(o.nodeName));for(let l in o){let a=o[l];a!=null&&(n&&r.length==1&&r.push(s=new Qi(e.isInline?\"span\":\"div\")),l==\"class\"?s.class=(s.class?s.class+\" \":\"\")+a:l==\"style\"?s.style=(s.style?s.style+\";\":\"\")+a:l!=\"nodeName\"&&(s[l]=a))}}}return r}function X1(t,e,n,s){if(n==er&&s==er)return e;let r=e;for(let i=0;i<s.length;i++){let o=s[i],l=n[i];if(i){let a;l&&l.nodeName==o.nodeName&&r!=t&&(a=r.parentNode)&&a.nodeName.toLowerCase()==o.nodeName||(a=document.createElement(o.nodeName),a.pmIsDeco=!0,a.appendChild(r),l=er[0]),r=a}TA(r,l||er[0],o)}return r}function TA(t,e,n){for(let s in e)s!=\"class\"&&s!=\"style\"&&s!=\"nodeName\"&&!(s in n)&&t.removeAttribute(s);for(let s in n)s!=\"class\"&&s!=\"style\"&&s!=\"nodeName\"&&n[s]!=e[s]&&t.setAttribute(s,n[s]);if(e.class!=n.class){let s=e.class?e.class.split(\" \").filter(Boolean):[],r=n.class?n.class.split(\" \").filter(Boolean):[];for(let i=0;i<s.length;i++)r.indexOf(s[i])==-1&&t.classList.remove(s[i]);for(let i=0;i<r.length;i++)s.indexOf(r[i])==-1&&t.classList.add(r[i]);t.classList.length==0&&t.removeAttribute(\"class\")}if(e.style!=n.style){if(e.style){let s=/\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g,r;for(;r=s.exec(e.style);)t.style.removeProperty(r[1])}n.style&&(t.style.cssText+=n.style)}}function Q1(t,e,n){return X1(t,t,er,Tf(e,n,t.nodeType!=1))}function xa(t,e){if(t.length!=e.length)return!1;for(let n=0;n<t.length;n++)if(!t[n].type.eq(e[n].type))return!1;return!0}function Om(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}class EA{constructor(e,n,s){this.lock=n,this.view=s,this.index=0,this.stack=[],this.changed=!1,this.top=e,this.preMatch=MA(e.node.content,e)}destroyBetween(e,n){if(e!=n){for(let s=e;s<n;s++)this.top.children[s].destroy();this.top.children.splice(e,n-e),this.changed=!0}}destroyRest(){this.destroyBetween(this.index,this.top.children.length)}syncToMarks(e,n,s,r){let i=0,o=this.stack.length>>1,l=Math.min(o,e.length);for(;i<l&&(i==o-1?this.top:this.stack[i+1<<1]).matchesMark(e[i])&&e[i].type.spec.spanning!==!1;)i++;for(;i<o;)this.destroyRest(),this.top.dirty=en,this.index=this.stack.pop(),this.top=this.stack.pop(),o--;for(;o<e.length;){this.stack.push(this.top,this.index+1);let a=-1,c=this.top.children.length;r<this.preMatch.index&&(c=Math.min(this.index+3,c));for(let u=this.index;u<c;u++){let f=this.top.children[u];if(f.matchesMark(e[o])&&!this.isLocked(f.dom)){a=u;break}}if(a>-1)a>this.index&&(this.changed=!0,this.destroyBetween(this.index,a)),this.top=this.top.children[this.index];else{let u=Sr.create(this.top,e[o],n,s);this.top.children.splice(this.index,0,u),this.top=u,this.changed=!0}this.index=0,o++}}findNodeMatch(e,n,s,r){let i=-1,o;if(r>=this.preMatch.index&&(o=this.preMatch.matches[r-this.preMatch.index]).parent==this.top&&o.matchesNode(e,n,s))i=this.top.children.indexOf(o,this.index);else for(let l=this.index,a=Math.min(this.top.children.length,l+5);l<a;l++){let c=this.top.children[l];if(c.matchesNode(e,n,s)&&!this.preMatch.matched.has(c)){i=l;break}}return i<0?!1:(this.destroyBetween(this.index,i),this.index++,!0)}updateNodeAt(e,n,s,r,i){let o=this.top.children[r];return o.dirty==Mn&&o.dom==o.contentDOM&&(o.dirty=Zs),o.update(e,n,s,i)?(this.destroyBetween(this.index,r),this.index++,!0):!1}findIndexWithChild(e){for(;;){let n=e.parentNode;if(!n)return-1;if(n==this.top.contentDOM){let s=e.pmViewDesc;if(s){for(let r=this.index;r<this.top.children.length;r++)if(this.top.children[r]==s)return r}return-1}e=n}}updateNextNode(e,n,s,r,i,o){for(let l=this.index;l<this.top.children.length;l++){let a=this.top.children[l];if(a instanceof Ps){let c=this.preMatch.matched.get(a);if(c!=null&&c!=i)return!1;let u=a.dom,f,d=this.isLocked(u)&&!(e.isText&&a.node&&a.node.isText&&a.nodeDOM.nodeValue==e.text&&a.dirty!=Mn&&xa(n,a.outerDeco));if(!d&&a.update(e,n,s,r))return this.destroyBetween(this.index,l),a.dom!=u&&(this.changed=!0),this.index++,!0;if(!d&&(f=this.recreateWrapper(a,e,n,s,r,o)))return this.destroyBetween(this.index,l),this.top.children[this.index]=f,f.contentDOM&&(f.dirty=Zs,f.updateChildren(r,o+1),f.dirty=en),this.changed=!0,this.index++,!0;break}}return!1}recreateWrapper(e,n,s,r,i,o){if(e.dirty||n.isAtom||!e.children.length||!e.node.content.eq(n.content)||!xa(s,e.outerDeco)||!r.eq(e.innerDeco))return null;let l=Ps.create(this.top,n,s,r,i,o);if(l.contentDOM){l.children=e.children,e.children=[];for(let a of l.children)a.parent=l}return e.destroy(),l}addNode(e,n,s,r,i){let o=Ps.create(this.top,e,n,s,r,i);o.contentDOM&&o.updateChildren(r,i+1),this.top.children.splice(this.index++,0,o),this.changed=!0}placeWidget(e,n,s){let r=this.index<this.top.children.length?this.top.children[this.index]:null;if(r&&r.matchesWidget(e)&&(e==r.widget||!r.widget.type.toDOM.parentNode))this.index++;else{let i=new J1(this.top,e,n,s);this.top.children.splice(this.index++,0,i),this.changed=!0}}addTextblockHacks(){let e=this.top.children[this.index-1],n=this.top;for(;e instanceof Sr;)n=e,e=n.children[n.children.length-1];(!e||!(e instanceof Lc)||/\\n$/.test(e.node.text)||this.view.requiresGeckoHackNode&&/\\s$/.test(e.node.text))&&((ot||Je)&&e&&e.dom.contentEditable==\"false\"&&this.addHackNode(\"IMG\",n),this.addHackNode(\"BR\",this.top))}addHackNode(e,n){if(n==this.top&&this.index<n.children.length&&n.children[this.index].matchesHack(e))this.index++;else{let s=document.createElement(e);e==\"IMG\"&&(s.className=\"ProseMirror-separator\",s.alt=\"\"),e==\"BR\"&&(s.className=\"ProseMirror-trailingBreak\");let r=new G1(this.top,[],s,null);n!=this.top?n.children.push(r):n.children.splice(this.index++,0,r),this.changed=!0}}isLocked(e){return this.lock&&(e==this.lock||e.nodeType==1&&e.contains(this.lock.parentNode))}}function MA(t,e){let n=e,s=n.children.length,r=t.childCount,i=new Map,o=[];e:for(;r>0;){let l;for(;;)if(s){let c=n.children[s-1];if(c instanceof Sr)n=c,s=c.children.length;else{l=c,s--;break}}else{if(n==e)break e;s=n.parent.children.indexOf(n),n=n.parent}let a=l.node;if(a){if(a!=t.child(r-1))break;--r,i.set(l,r),o.push(l)}}return{index:r,matched:i,matches:o.reverse()}}function AA(t,e){return t.type.side-e.type.side}function NA(t,e,n,s){let r=e.locals(t),i=0;if(r.length==0){for(let c=0;c<t.childCount;c++){let u=t.child(c);s(u,r,e.forChild(i,u),c),i+=u.nodeSize}return}let o=0,l=[],a=null;for(let c=0;;){let u,f;for(;o<r.length&&r[o].to==i;){let g=r[o++];g.widget&&(u?(f||(f=[u])).push(g):u=g)}if(u)if(f){f.sort(AA);for(let g=0;g<f.length;g++)n(f[g],c,!!a)}else n(u,c,!!a);let d,h;if(a)h=-1,d=a,a=null;else if(c<t.childCount)h=c,d=t.child(c++);else break;for(let g=0;g<l.length;g++)l[g].to<=i&&l.splice(g--,1);for(;o<r.length&&r[o].from<=i&&r[o].to>i;)l.push(r[o++]);let p=i+d.nodeSize;if(d.isText){let g=p;o<r.length&&r[o].from<g&&(g=r[o].from);for(let y=0;y<l.length;y++)l[y].to<g&&(g=l[y].to);g<p&&(a=d.cut(g-i),d=d.cut(0,g-i),p=g,h=-1)}else for(;o<r.length&&r[o].to<p;)o++;let m=d.isInline&&!d.isLeaf?l.filter(g=>!g.inline):l.slice();s(d,m,e.forChild(i,d),h),i=p}}function OA(t){if(t.nodeName==\"UL\"||t.nodeName==\"OL\"){let e=t.style.cssText;t.style.cssText=e+\"; list-style: square !important\",window.getComputedStyle(t).listStyle,t.style.cssText=e}}function RA(t,e,n,s){for(let r=0,i=0;r<t.childCount&&i<=s;){let o=t.child(r++),l=i;if(i+=o.nodeSize,!o.isText)continue;let a=o.text;for(;r<t.childCount;){let c=t.child(r++);if(i+=c.nodeSize,!c.isText)break;a+=c.text}if(i>=n){if(i>=s&&a.slice(s-e.length-l,s-l)==e)return s-e.length;let c=l<s?a.lastIndexOf(e,s-l-1):-1;if(c>=0&&c+e.length+l>=n)return l+c;if(n==s&&a.length>=s+e.length-l&&a.slice(s-l,s-l+e.length)==e)return s}}return-1}function Ef(t,e,n,s,r){let i=[];for(let o=0,l=0;o<t.length;o++){let a=t[o],c=l,u=l+=a.size;c>=n||u<=e?i.push(a):(c<e&&i.push(a.slice(0,e-c,s)),r&&(i.push(r),r=void 0),u>n&&i.push(a.slice(n-c,a.size,s)))}return i}function ih(t,e=null){let n=t.domSelectionRange(),s=t.state.doc;if(!n.focusNode)return null;let r=t.docView.nearestDesc(n.focusNode),i=r&&r.size==0,o=t.docView.posFromDOM(n.focusNode,n.focusOffset,1);if(o<0)return null;let l=s.resolve(o),a,c;if(Pc(n)){for(a=o;r&&!r.node;)r=r.parent;let f=r.node;if(r&&f.isAtom&&Q.isSelectable(f)&&r.parent&&!(f.isInline&&rA(n.focusNode,n.focusOffset,r.dom))){let d=r.posBefore;c=new Q(o==d?l:s.resolve(d))}}else{if(n instanceof t.dom.ownerDocument.defaultView.Selection&&n.rangeCount>1){let f=o,d=o;for(let h=0;h<n.rangeCount;h++){let p=n.getRangeAt(h);f=Math.min(f,t.docView.posFromDOM(p.startContainer,p.startOffset,1)),d=Math.max(d,t.docView.posFromDOM(p.endContainer,p.endOffset,-1))}if(f<0)return null;[a,o]=d==t.state.selection.anchor?[d,f]:[f,d],l=s.resolve(o)}else a=t.docView.posFromDOM(n.anchorNode,n.anchorOffset,1);if(a<0)return null}let u=s.resolve(a);if(!c){let f=e==\"pointer\"||t.state.selection.head<l.pos&&!i?1:-1;c=oh(t,u,l,f)}return c}function Z1(t){return t.editable?t.hasFocus():tS(t)&&document.activeElement&&document.activeElement.contains(t.dom)}function Qn(t,e=!1){let n=t.state.selection;if(eS(t,n),!!Z1(t)){if(!e&&t.input.mouseDown&&t.input.mouseDown.allowDefault&&Je){let s=t.domSelectionRange(),r=t.domObserver.currentSelection;if(s.anchorNode&&r.anchorNode&&br(s.anchorNode,s.anchorOffset,r.anchorNode,r.anchorOffset)){t.input.mouseDown.delayedSelectionSync=!0,t.domObserver.setCurSelection();return}}if(t.domObserver.disconnectSelection(),t.cursorWrapper)_A(t);else{let{anchor:s,head:r}=n,i,o;Rm&&!(n instanceof Z)&&(n.$from.parent.inlineContent||(i=Im(t,n.from)),!n.empty&&!n.$from.parent.inlineContent&&(o=Im(t,n.to))),t.docView.setSelection(s,r,t,e),Rm&&(i&&_m(i),o&&_m(o)),n.visible?t.dom.classList.remove(\"ProseMirror-hideselection\"):(t.dom.classList.add(\"ProseMirror-hideselection\"),\"onselectionchange\"in document&&IA(t))}t.domObserver.setCurSelection(),t.domObserver.connectSelection()}}const Rm=ot||Je&&F1<63;function Im(t,e){let{node:n,offset:s}=t.docView.domFromPos(e,0),r=s<n.childNodes.length?n.childNodes[s]:null,i=s?n.childNodes[s-1]:null;if(ot&&r&&r.contentEditable==\"false\")return Cu(r);if((!r||r.contentEditable==\"false\")&&(!i||i.contentEditable==\"false\")){if(r)return Cu(r);if(i)return Cu(i)}}function Cu(t){return t.contentEditable=\"true\",ot&&t.draggable&&(t.draggable=!1,t.wasDraggable=!0),t}function _m(t){t.contentEditable=\"false\",t.wasDraggable&&(t.draggable=!0,t.wasDraggable=null)}function IA(t){let e=t.dom.ownerDocument;e.removeEventListener(\"selectionchange\",t.input.hideSelectionGuard);let n=t.domSelectionRange(),s=n.anchorNode,r=n.anchorOffset;e.addEventListener(\"selectionchange\",t.input.hideSelectionGuard=()=>{(n.anchorNode!=s||n.anchorOffset!=r)&&(e.removeEventListener(\"selectionchange\",t.input.hideSelectionGuard),setTimeout(()=>{(!Z1(t)||t.state.selection.visible)&&t.dom.classList.remove(\"ProseMirror-hideselection\")},20))})}function _A(t){let e=t.domSelection();if(!e)return;let n=t.cursorWrapper.dom,s=n.nodeName==\"IMG\";s?e.collapse(n.parentNode,tt(n)+1):e.collapse(n,0),!s&&!t.state.selection.visible&&_t&&Ds<=11&&(n.disabled=!0,n.disabled=!1)}function eS(t,e){if(e instanceof Q){let n=t.docView.descAt(e.from);n!=t.lastSelectedViewDesc&&(Dm(t),n&&n.selectNode(),t.lastSelectedViewDesc=n)}else Dm(t)}function Dm(t){t.lastSelectedViewDesc&&(t.lastSelectedViewDesc.parent&&t.lastSelectedViewDesc.deselectNode(),t.lastSelectedViewDesc=void 0)}function oh(t,e,n,s){return t.someProp(\"createSelectionBetween\",r=>r(t,e,n))||Z.between(e,n,s)}function Pm(t){return t.editable&&!t.hasFocus()?!1:tS(t)}function tS(t){let e=t.domSelectionRange();if(!e.anchorNode)return!1;try{return t.dom.contains(e.anchorNode.nodeType==3?e.anchorNode.parentNode:e.anchorNode)&&(t.editable||t.dom.contains(e.focusNode.nodeType==3?e.focusNode.parentNode:e.focusNode))}catch{return!1}}function DA(t){let e=t.docView.domFromPos(t.state.selection.anchor,0),n=t.domSelectionRange();return br(e.node,e.offset,n.anchorNode,n.anchorOffset)}function Mf(t,e){let{$anchor:n,$head:s}=t.selection,r=e>0?n.max(s):n.min(s),i=r.parent.inlineContent?r.depth?t.doc.resolve(e>0?r.after():r.before()):null:r;return i&&ee.findFrom(i,e)}function xs(t,e){return t.dispatch(t.state.tr.setSelection(e).scrollIntoView()),!0}function Lm(t,e,n){let s=t.state.selection;if(s instanceof Z)if(n.indexOf(\"s\")>-1){let{$head:r}=s,i=r.textOffset?null:e<0?r.nodeBefore:r.nodeAfter;if(!i||i.isText||!i.isLeaf)return!1;let o=t.state.doc.resolve(r.pos+i.nodeSize*(e<0?-1:1));return xs(t,new Z(s.$anchor,o))}else if(s.empty){if(t.endOfTextblock(e>0?\"forward\":\"backward\")){let r=Mf(t.state,e);return r&&r instanceof Q?xs(t,r):!1}else if(!(Jt&&n.indexOf(\"m\")>-1)){let r=s.$head,i=r.textOffset?null:e<0?r.nodeBefore:r.nodeAfter,o;if(!i||i.isText)return!1;let l=e<0?r.pos-i.nodeSize:r.pos;return i.isAtom||(o=t.docView.descAt(l))&&!o.contentDOM?Q.isSelectable(i)?xs(t,new Q(e<0?t.state.doc.resolve(r.pos-i.nodeSize):r)):Yo?xs(t,new Z(t.state.doc.resolve(e<0?l:l+i.nodeSize))):!1:!1}}else return!1;else{if(s instanceof Q&&s.node.isInline)return xs(t,new Z(e>0?s.$to:s.$from));{let r=Mf(t.state,e);return r?xs(t,r):!1}}}function Ca(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function Zi(t,e){let n=t.pmViewDesc;return n&&n.size==0&&(e<0||t.nextSibling||t.nodeName!=\"BR\")}function Br(t,e){return e<0?PA(t):LA(t)}function PA(t){let e=t.domSelectionRange(),n=e.focusNode,s=e.focusOffset;if(!n)return;let r,i,o=!1;for(Zt&&n.nodeType==1&&s<Ca(n)&&Zi(n.childNodes[s],-1)&&(o=!0);;)if(s>0){if(n.nodeType!=1)break;{let l=n.childNodes[s-1];if(Zi(l,-1))r=n,i=--s;else if(l.nodeType==3)n=l,s=n.nodeValue.length;else break}}else{if(nS(n))break;{let l=n.previousSibling;for(;l&&Zi(l,-1);)r=n.parentNode,i=tt(l),l=l.previousSibling;if(l)n=l,s=Ca(n);else{if(n=n.parentNode,n==t.dom)break;s=0}}}o?Af(t,n,s):r&&Af(t,r,i)}function LA(t){let e=t.domSelectionRange(),n=e.focusNode,s=e.focusOffset;if(!n)return;let r=Ca(n),i,o;for(;;)if(s<r){if(n.nodeType!=1)break;let l=n.childNodes[s];if(Zi(l,1))i=n,o=++s;else break}else{if(nS(n))break;{let l=n.nextSibling;for(;l&&Zi(l,1);)i=l.parentNode,o=tt(l)+1,l=l.nextSibling;if(l)n=l,s=0,r=Ca(n);else{if(n=n.parentNode,n==t.dom)break;s=r=0}}}i&&Af(t,i,o)}function nS(t){let e=t.pmViewDesc;return e&&e.node&&e.node.isBlock}function BA(t,e){for(;t&&e==t.childNodes.length&&!Go(t);)e=tt(t)+1,t=t.parentNode;for(;t&&e<t.childNodes.length;){let n=t.childNodes[e];if(n.nodeType==3)return n;if(n.nodeType==1&&n.contentEditable==\"false\")break;t=n,e=0}}function $A(t,e){for(;t&&!e&&!Go(t);)e=tt(t),t=t.parentNode;for(;t&&e;){let n=t.childNodes[e-1];if(n.nodeType==3)return n;if(n.nodeType==1&&n.contentEditable==\"false\")break;t=n,e=t.childNodes.length}}function Af(t,e,n){if(e.nodeType!=3){let i,o;(o=BA(e,n))?(e=o,n=0):(i=$A(e,n))&&(e=i,n=i.nodeValue.length)}let s=t.domSelection();if(!s)return;if(Pc(s)){let i=document.createRange();i.setEnd(e,n),i.setStart(e,n),s.removeAllRanges(),s.addRange(i)}else s.extend&&s.extend(e,n);t.domObserver.setCurSelection();let{state:r}=t;setTimeout(()=>{t.state==r&&Qn(t)},50)}function Bm(t,e){let n=t.state.doc.resolve(e);if(!(Je||z1)&&n.parent.inlineContent){let r=t.coordsAtPos(e);if(e>n.start()){let i=t.coordsAtPos(e-1),o=(i.top+i.bottom)/2;if(o>r.top&&o<r.bottom&&Math.abs(i.left-r.left)>1)return i.left<r.left?\"ltr\":\"rtl\"}if(e<n.end()){let i=t.coordsAtPos(e+1),o=(i.top+i.bottom)/2;if(o>r.top&&o<r.bottom&&Math.abs(i.left-r.left)>1)return i.left>r.left?\"ltr\":\"rtl\"}}return getComputedStyle(t.dom).direction==\"rtl\"?\"rtl\":\"ltr\"}function $m(t,e,n){let s=t.state.selection;if(s instanceof Z&&!s.empty||n.indexOf(\"s\")>-1||Jt&&n.indexOf(\"m\")>-1)return!1;let{$from:r,$to:i}=s;if(!r.parent.inlineContent||t.endOfTextblock(e<0?\"up\":\"down\")){let o=Mf(t.state,e);if(o&&o instanceof Q)return xs(t,o)}if(!r.parent.inlineContent){let o=e<0?r:i,l=s instanceof zt?ee.near(o,e):ee.findFrom(o,e);return l?xs(t,l):!1}return!1}function Hm(t,e){if(!(t.state.selection instanceof Z))return!0;let{$head:n,$anchor:s,empty:r}=t.state.selection;if(!n.sameParent(s))return!0;if(!r)return!1;if(t.endOfTextblock(e>0?\"forward\":\"backward\"))return!0;let i=!n.textOffset&&(e<0?n.nodeBefore:n.nodeAfter);if(i&&!i.isText){let o=t.state.tr;return e<0?o.delete(n.pos-i.nodeSize,n.pos):o.delete(n.pos,n.pos+i.nodeSize),t.dispatch(o),!0}return!1}function Fm(t,e,n){t.domObserver.stop(),e.contentEditable=n,t.domObserver.start()}function HA(t){if(!ot||t.state.selection.$head.parentOffset>0)return!1;let{focusNode:e,focusOffset:n}=t.domSelectionRange();if(e&&e.nodeType==1&&n==0&&e.firstChild&&e.firstChild.contentEditable==\"false\"){let s=e.firstChild;Fm(t,s,\"true\"),setTimeout(()=>Fm(t,s,\"false\"),20)}return!1}function FA(t){let e=\"\";return t.ctrlKey&&(e+=\"c\"),t.metaKey&&(e+=\"m\"),t.altKey&&(e+=\"a\"),t.shiftKey&&(e+=\"s\"),e}function zA(t,e){let n=e.keyCode,s=FA(e);if(n==8||Jt&&n==72&&s==\"c\")return Hm(t,-1)||Br(t,-1);if(n==46&&!e.shiftKey||Jt&&n==68&&s==\"c\")return Hm(t,1)||Br(t,1);if(n==13||n==27)return!0;if(n==37||Jt&&n==66&&s==\"c\"){let r=n==37?Bm(t,t.state.selection.from)==\"ltr\"?-1:1:-1;return Lm(t,r,s)||Br(t,r)}else if(n==39||Jt&&n==70&&s==\"c\"){let r=n==39?Bm(t,t.state.selection.from)==\"ltr\"?1:-1:1;return Lm(t,r,s)||Br(t,r)}else{if(n==38||Jt&&n==80&&s==\"c\")return $m(t,-1,s)||Br(t,-1);if(n==40||Jt&&n==78&&s==\"c\")return HA(t)||$m(t,1,s)||Br(t,1);if(s==(Jt?\"m\":\"c\")&&(n==66||n==73||n==89||n==90))return!0}return!1}function lh(t,e){t.someProp(\"transformCopied\",h=>{e=h(e,t)});let n=[],{content:s,openStart:r,openEnd:i}=e;for(;r>1&&i>1&&s.childCount==1&&s.firstChild.childCount==1;){r--,i--;let h=s.firstChild;n.push(h.type.name,h.attrs!=h.type.defaultAttrs?h.attrs:null),s=h.content}let o=t.someProp(\"clipboardSerializer\")||Nr.fromSchema(t.state.schema),l=aS(),a=l.createElement(\"div\");a.appendChild(o.serializeFragment(s,{document:l}));let c=a.firstChild,u,f=0;for(;c&&c.nodeType==1&&(u=lS[c.nodeName.toLowerCase()]);){for(let h=u.length-1;h>=0;h--){let p=l.createElement(u[h]);for(;a.firstChild;)p.appendChild(a.firstChild);a.appendChild(p),f++}c=a.firstChild}c&&c.nodeType==1&&c.setAttribute(\"data-pm-slice\",`${r} ${i}${f?` -${f}`:\"\"} ${JSON.stringify(n)}`);let d=t.someProp(\"clipboardTextSerializer\",h=>h(e,t))||e.content.textBetween(0,e.content.size,`\n\n`);return{dom:a,text:d,slice:e}}function sS(t,e,n,s,r){let i=r.parent.type.spec.code,o,l;if(!n&&!e)return null;let a=!!e&&(s||i||!n);if(a){if(t.someProp(\"transformPastedText\",d=>{e=d(e,i||s,t)}),i)return l=new K(D.from(t.state.schema.text(e.replace(/\\r\\n?/g,`\n`))),0,0),t.someProp(\"transformPasted\",d=>{l=d(l,t,!0)}),l;let f=t.someProp(\"clipboardTextParser\",d=>d(e,r,s,t));if(f)l=f;else{let d=r.marks(),{schema:h}=t.state,p=Nr.fromSchema(h);o=document.createElement(\"div\"),e.split(/(?:\\r\\n?|\\n)+/).forEach(m=>{let g=o.appendChild(document.createElement(\"p\"));m&&g.appendChild(p.serializeNode(h.text(m,d)))})}}else t.someProp(\"transformPastedHTML\",f=>{n=f(n,t)}),o=UA(n),Yo&&KA(o);let c=o&&o.querySelector(\"[data-pm-slice]\"),u=c&&/^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(c.getAttribute(\"data-pm-slice\")||\"\");if(u&&u[3])for(let f=+u[3];f>0;f--){let d=o.firstChild;for(;d&&d.nodeType!=1;)d=d.nextSibling;if(!d)break;o=d}if(l||(l=(t.someProp(\"clipboardParser\")||t.someProp(\"domParser\")||_s.fromSchema(t.state.schema)).parseSlice(o,{preserveWhitespace:!!(a||u),context:r,ruleFromNode(d){return d.nodeName==\"BR\"&&!d.nextSibling&&d.parentNode&&!VA.test(d.parentNode.nodeName)?{ignore:!0}:null}})),u)l=qA(zm(l,+u[1],+u[2]),u[4]);else if(l=K.maxOpen(WA(l.content,r),!0),l.openStart||l.openEnd){let f=0,d=0;for(let h=l.content.firstChild;f<l.openStart&&!h.type.spec.isolating;f++,h=h.firstChild);for(let h=l.content.lastChild;d<l.openEnd&&!h.type.spec.isolating;d++,h=h.lastChild);l=zm(l,f,d)}return t.someProp(\"transformPasted\",f=>{l=f(l,t,a)}),l}const VA=/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;function WA(t,e){if(t.childCount<2)return t;for(let n=e.depth;n>=0;n--){let r=e.node(n).contentMatchAt(e.index(n)),i,o=[];if(t.forEach(l=>{if(!o)return;let a=r.findWrapping(l.type),c;if(!a)return o=null;if(c=o.length&&i.length&&iS(a,i,l,o[o.length-1],0))o[o.length-1]=c;else{o.length&&(o[o.length-1]=oS(o[o.length-1],i.length));let u=rS(l,a);o.push(u),r=r.matchType(u.type),i=a}}),o)return D.from(o)}return t}function rS(t,e,n=0){for(let s=e.length-1;s>=n;s--)t=e[s].create(null,D.from(t));return t}function iS(t,e,n,s,r){if(r<t.length&&r<e.length&&t[r]==e[r]){let i=iS(t,e,n,s.lastChild,r+1);if(i)return s.copy(s.content.replaceChild(s.childCount-1,i));if(s.contentMatchAt(s.childCount).matchType(r==t.length-1?n.type:t[r+1]))return s.copy(s.content.append(D.from(rS(n,t,r+1))))}}function oS(t,e){if(e==0)return t;let n=t.content.replaceChild(t.childCount-1,oS(t.lastChild,e-1)),s=t.contentMatchAt(t.childCount).fillBefore(D.empty,!0);return t.copy(n.append(s))}function Nf(t,e,n,s,r,i){let o=e<0?t.firstChild:t.lastChild,l=o.content;return t.childCount>1&&(i=0),r<s-1&&(l=Nf(l,e,n,s,r+1,i)),r>=n&&(l=e<0?o.contentMatchAt(0).fillBefore(l,i<=r).append(l):l.append(o.contentMatchAt(o.childCount).fillBefore(D.empty,!0))),t.replaceChild(e<0?0:t.childCount-1,o.copy(l))}function zm(t,e,n){return e<t.openStart&&(t=new K(Nf(t.content,-1,e,t.openStart,0,t.openEnd),e,t.openEnd)),n<t.openEnd&&(t=new K(Nf(t.content,1,n,t.openEnd,0,0),t.openStart,n)),t}const lS={thead:[\"table\"],tbody:[\"table\"],tfoot:[\"table\"],caption:[\"table\"],colgroup:[\"table\"],col:[\"table\",\"colgroup\"],tr:[\"table\",\"tbody\"],td:[\"table\",\"tbody\",\"tr\"],th:[\"table\",\"tbody\",\"tr\"]};let Vm=null;function aS(){return Vm||(Vm=document.implementation.createHTMLDocument(\"title\"))}let vu=null;function jA(t){let e=window.trustedTypes;return e?(vu||(vu=e.defaultPolicy||e.createPolicy(\"ProseMirrorClipboard\",{createHTML:n=>n})),vu.createHTML(t)):t}function UA(t){let e=/^(\\s*<meta [^>]*>)*/.exec(t);e&&(t=t.slice(e[0].length));let n=aS().createElement(\"div\"),s=/<([a-z][^>\\s]+)/i.exec(t),r;if((r=s&&lS[s[1].toLowerCase()])&&(t=r.map(i=>\"<\"+i+\">\").join(\"\")+t+r.map(i=>\"</\"+i+\">\").reverse().join(\"\")),n.innerHTML=jA(t),r)for(let i=0;i<r.length;i++)n=n.querySelector(r[i])||n;return n}function KA(t){let e=t.querySelectorAll(Je?\"span:not([class]):not([style])\":\"span.Apple-converted-space\");for(let n=0;n<e.length;n++){let s=e[n];s.childNodes.length==1&&s.textContent==\" \"&&s.parentNode&&s.parentNode.replaceChild(t.ownerDocument.createTextNode(\" \"),s)}}function qA(t,e){if(!t.size)return t;let n=t.content.firstChild.type.schema,s;try{s=JSON.parse(e)}catch{return t}let{content:r,openStart:i,openEnd:o}=t;for(let l=s.length-2;l>=0;l-=2){let a=n.nodes[s[l]];if(!a||a.hasRequiredAttrs())break;r=D.from(a.create(s[l+1],r)),i++,o++}return new K(r,i,o)}const Ct={},vt={},JA={touchstart:!0,touchmove:!0};class GA{constructor(){this.shiftKey=!1,this.mouseDown=null,this.lastKeyCode=null,this.lastKeyCodeTime=0,this.lastClick={time:0,x:0,y:0,type:\"\",button:0},this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastIOSEnter=0,this.lastIOSEnterFallbackTimeout=-1,this.lastFocus=0,this.lastTouch=0,this.lastChromeDelete=0,this.composing=!1,this.compositionNode=null,this.composingTimeout=-1,this.compositionNodes=[],this.compositionEndedAt=-2e8,this.compositionID=1,this.badSafariComposition=!1,this.compositionPendingChanges=0,this.domChangeCount=0,this.eventHandlers=Object.create(null),this.hideSelectionGuard=null}}function YA(t){for(let e in Ct){let n=Ct[e];t.dom.addEventListener(e,t.input.eventHandlers[e]=s=>{QA(t,s)&&!ah(t,s)&&(t.editable||!(s.type in vt))&&n(t,s)},JA[e]?{passive:!0}:void 0)}ot&&t.dom.addEventListener(\"input\",()=>null),Of(t)}function Ns(t,e){t.input.lastSelectionOrigin=e,t.input.lastSelectionTime=Date.now()}function XA(t){t.domObserver.stop();for(let e in t.input.eventHandlers)t.dom.removeEventListener(e,t.input.eventHandlers[e]);clearTimeout(t.input.composingTimeout),clearTimeout(t.input.lastIOSEnterFallbackTimeout)}function Of(t){t.someProp(\"handleDOMEvents\",e=>{for(let n in e)t.input.eventHandlers[n]||t.dom.addEventListener(n,t.input.eventHandlers[n]=s=>ah(t,s))})}function ah(t,e){return t.someProp(\"handleDOMEvents\",n=>{let s=n[e.type];return s?s(t,e)||e.defaultPrevented:!1})}function QA(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let n=e.target;n!=t.dom;n=n.parentNode)if(!n||n.nodeType==11||n.pmViewDesc&&n.pmViewDesc.stopEvent(e))return!1;return!0}function ZA(t,e){!ah(t,e)&&Ct[e.type]&&(t.editable||!(e.type in vt))&&Ct[e.type](t,e)}vt.keydown=(t,e)=>{let n=e;if(t.input.shiftKey=n.keyCode==16||n.shiftKey,!uS(t,n)&&(t.input.lastKeyCode=n.keyCode,t.input.lastKeyCodeTime=Date.now(),!(Un&&Je&&n.keyCode==13)))if(n.keyCode!=229&&t.domObserver.forceFlush(),mi&&n.keyCode==13&&!n.ctrlKey&&!n.altKey&&!n.metaKey){let s=Date.now();t.input.lastIOSEnter=s,t.input.lastIOSEnterFallbackTimeout=setTimeout(()=>{t.input.lastIOSEnter==s&&(t.someProp(\"handleKeyDown\",r=>r(t,Ys(13,\"Enter\"))),t.input.lastIOSEnter=0)},200)}else t.someProp(\"handleKeyDown\",s=>s(t,n))||zA(t,n)?n.preventDefault():Ns(t,\"key\")};vt.keyup=(t,e)=>{e.keyCode==16&&(t.input.shiftKey=!1)};vt.keypress=(t,e)=>{let n=e;if(uS(t,n)||!n.charCode||n.ctrlKey&&!n.altKey||Jt&&n.metaKey)return;if(t.someProp(\"handleKeyPress\",r=>r(t,n))){n.preventDefault();return}let s=t.state.selection;if(!(s instanceof Z)||!s.$from.sameParent(s.$to)){let r=String.fromCharCode(n.charCode),i=()=>t.state.tr.insertText(r).scrollIntoView();!/[\\r\\n]/.test(r)&&!t.someProp(\"handleTextInput\",o=>o(t,s.$from.pos,s.$to.pos,r,i))&&t.dispatch(i()),n.preventDefault()}};function Bc(t){return{left:t.clientX,top:t.clientY}}function eN(t,e){let n=e.x-t.clientX,s=e.y-t.clientY;return n*n+s*s<100}function ch(t,e,n,s,r){if(s==-1)return!1;let i=t.state.doc.resolve(s);for(let o=i.depth+1;o>0;o--)if(t.someProp(e,l=>o>i.depth?l(t,n,i.nodeAfter,i.before(o),r,!0):l(t,n,i.node(o),i.before(o),r,!1)))return!0;return!1}function ti(t,e,n){if(t.focused||t.focus(),t.state.selection.eq(e))return;let s=t.state.tr.setSelection(e);s.setMeta(\"pointer\",!0),t.dispatch(s)}function tN(t,e){if(e==-1)return!1;let n=t.state.doc.resolve(e),s=n.nodeAfter;return s&&s.isAtom&&Q.isSelectable(s)?(ti(t,new Q(n)),!0):!1}function nN(t,e){if(e==-1)return!1;let n=t.state.selection,s,r;n instanceof Q&&(s=n.node);let i=t.state.doc.resolve(e);for(let o=i.depth+1;o>0;o--){let l=o>i.depth?i.nodeAfter:i.node(o);if(Q.isSelectable(l)){s&&n.$from.depth>0&&o>=n.$from.depth&&i.before(n.$from.depth+1)==n.$from.pos?r=i.before(n.$from.depth):r=i.before(o);break}}return r!=null?(ti(t,Q.create(t.state.doc,r)),!0):!1}function sN(t,e,n,s,r){return ch(t,\"handleClickOn\",e,n,s)||t.someProp(\"handleClick\",i=>i(t,e,s))||(r?nN(t,n):tN(t,n))}function rN(t,e,n,s){return ch(t,\"handleDoubleClickOn\",e,n,s)||t.someProp(\"handleDoubleClick\",r=>r(t,e,s))}function iN(t,e,n,s){return ch(t,\"handleTripleClickOn\",e,n,s)||t.someProp(\"handleTripleClick\",r=>r(t,e,s))||oN(t,n,s)}function oN(t,e,n){if(n.button!=0)return!1;let s=t.state.doc;if(e==-1)return s.inlineContent?(ti(t,Z.create(s,0,s.content.size)),!0):!1;let r=s.resolve(e);for(let i=r.depth+1;i>0;i--){let o=i>r.depth?r.nodeAfter:r.node(i),l=r.before(i);if(o.inlineContent)ti(t,Z.create(s,l+1,l+1+o.content.size));else if(Q.isSelectable(o))ti(t,Q.create(s,l));else continue;return!0}}function uh(t){return va(t)}const cS=Jt?\"metaKey\":\"ctrlKey\";Ct.mousedown=(t,e)=>{let n=e;t.input.shiftKey=n.shiftKey;let s=uh(t),r=Date.now(),i=\"singleClick\";r-t.input.lastClick.time<500&&eN(n,t.input.lastClick)&&!n[cS]&&t.input.lastClick.button==n.button&&(t.input.lastClick.type==\"singleClick\"?i=\"doubleClick\":t.input.lastClick.type==\"doubleClick\"&&(i=\"tripleClick\")),t.input.lastClick={time:r,x:n.clientX,y:n.clientY,type:i,button:n.button};let o=t.posAtCoords(Bc(n));o&&(i==\"singleClick\"?(t.input.mouseDown&&t.input.mouseDown.done(),t.input.mouseDown=new lN(t,o,n,!!s)):(i==\"doubleClick\"?rN:iN)(t,o.pos,o.inside,n)?n.preventDefault():Ns(t,\"pointer\"))};class lN{constructor(e,n,s,r){this.view=e,this.pos=n,this.event=s,this.flushed=r,this.delayedSelectionSync=!1,this.mightDrag=null,this.startDoc=e.state.doc,this.selectNode=!!s[cS],this.allowDefault=s.shiftKey;let i,o;if(n.inside>-1)i=e.state.doc.nodeAt(n.inside),o=n.inside;else{let u=e.state.doc.resolve(n.pos);i=u.parent,o=u.depth?u.before():0}const l=r?null:s.target,a=l?e.docView.nearestDesc(l,!0):null;this.target=a&&a.nodeDOM.nodeType==1?a.nodeDOM:null;let{selection:c}=e.state;(s.button==0&&i.type.spec.draggable&&i.type.spec.selectable!==!1||c instanceof Q&&c.from<=o&&c.to>o)&&(this.mightDrag={node:i,pos:o,addAttr:!!(this.target&&!this.target.draggable),setUneditable:!!(this.target&&Zt&&!this.target.hasAttribute(\"contentEditable\"))}),this.target&&this.mightDrag&&(this.mightDrag.addAttr||this.mightDrag.setUneditable)&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&(this.target.draggable=!0),this.mightDrag.setUneditable&&setTimeout(()=>{this.view.input.mouseDown==this&&this.target.setAttribute(\"contentEditable\",\"false\")},20),this.view.domObserver.start()),e.root.addEventListener(\"mouseup\",this.up=this.up.bind(this)),e.root.addEventListener(\"mousemove\",this.move=this.move.bind(this)),Ns(e,\"pointer\")}done(){this.view.root.removeEventListener(\"mouseup\",this.up),this.view.root.removeEventListener(\"mousemove\",this.move),this.mightDrag&&this.target&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&this.target.removeAttribute(\"draggable\"),this.mightDrag.setUneditable&&this.target.removeAttribute(\"contentEditable\"),this.view.domObserver.start()),this.delayedSelectionSync&&setTimeout(()=>Qn(this.view)),this.view.input.mouseDown=null}up(e){if(this.done(),!this.view.dom.contains(e.target))return;let n=this.pos;this.view.state.doc!=this.startDoc&&(n=this.view.posAtCoords(Bc(e))),this.updateAllowDefault(e),this.allowDefault||!n?Ns(this.view,\"pointer\"):sN(this.view,n.pos,n.inside,e,this.selectNode)?e.preventDefault():e.button==0&&(this.flushed||ot&&this.mightDrag&&!this.mightDrag.node.isAtom||Je&&!this.view.state.selection.visible&&Math.min(Math.abs(n.pos-this.view.state.selection.from),Math.abs(n.pos-this.view.state.selection.to))<=2)?(ti(this.view,ee.near(this.view.state.doc.resolve(n.pos))),e.preventDefault()):Ns(this.view,\"pointer\")}move(e){this.updateAllowDefault(e),Ns(this.view,\"pointer\"),e.buttons==0&&this.done()}updateAllowDefault(e){!this.allowDefault&&(Math.abs(this.event.x-e.clientX)>4||Math.abs(this.event.y-e.clientY)>4)&&(this.allowDefault=!0)}}Ct.touchstart=t=>{t.input.lastTouch=Date.now(),uh(t),Ns(t,\"pointer\")};Ct.touchmove=t=>{t.input.lastTouch=Date.now(),Ns(t,\"pointer\")};Ct.contextmenu=t=>uh(t);function uS(t,e){return t.composing?!0:ot&&Math.abs(e.timeStamp-t.input.compositionEndedAt)<500?(t.input.compositionEndedAt=-2e8,!0):!1}const aN=Un?5e3:-1;vt.compositionstart=vt.compositionupdate=t=>{if(!t.composing){t.domObserver.flush();let{state:e}=t,n=e.selection.$to;if(e.selection instanceof Z&&(e.storedMarks||!n.textOffset&&n.parentOffset&&n.nodeBefore.marks.some(s=>s.type.spec.inclusive===!1)||Je&&z1&&cN(t)))t.markCursor=t.state.storedMarks||n.marks(),va(t,!0),t.markCursor=null;else if(va(t,!e.selection.empty),Zt&&e.selection.empty&&n.parentOffset&&!n.textOffset&&n.nodeBefore.marks.length){let s=t.domSelectionRange();for(let r=s.focusNode,i=s.focusOffset;r&&r.nodeType==1&&i!=0;){let o=i<0?r.lastChild:r.childNodes[i-1];if(!o)break;if(o.nodeType==3){let l=t.domSelection();l&&l.collapse(o,o.nodeValue.length);break}else r=o,i=-1}}t.input.composing=!0}fS(t,aN)};function cN(t){let{focusNode:e,focusOffset:n}=t.domSelectionRange();if(!e||e.nodeType!=1||n>=e.childNodes.length)return!1;let s=e.childNodes[n];return s.nodeType==1&&s.contentEditable==\"false\"}vt.compositionend=(t,e)=>{t.composing&&(t.input.composing=!1,t.input.compositionEndedAt=e.timeStamp,t.input.compositionPendingChanges=t.domObserver.pendingRecords().length?t.input.compositionID:0,t.input.compositionNode=null,t.input.badSafariComposition?t.domObserver.forceFlush():t.input.compositionPendingChanges&&Promise.resolve().then(()=>t.domObserver.flush()),t.input.compositionID++,fS(t,20))};function fS(t,e){clearTimeout(t.input.composingTimeout),e>-1&&(t.input.composingTimeout=setTimeout(()=>va(t),e))}function dS(t){for(t.composing&&(t.input.composing=!1,t.input.compositionEndedAt=fN());t.input.compositionNodes.length>0;)t.input.compositionNodes.pop().markParentsDirty()}function uN(t){let e=t.domSelectionRange();if(!e.focusNode)return null;let n=nA(e.focusNode,e.focusOffset),s=sA(e.focusNode,e.focusOffset);if(n&&s&&n!=s){let r=s.pmViewDesc,i=t.domObserver.lastChangedTextNode;if(n==i||s==i)return i;if(!r||!r.isText(s.nodeValue))return s;if(t.input.compositionNode==s){let o=n.pmViewDesc;if(!(!o||!o.isText(n.nodeValue)))return s}}return n||s}function fN(){let t=document.createEvent(\"Event\");return t.initEvent(\"event\",!0,!0),t.timeStamp}function va(t,e=!1){if(!(Un&&t.domObserver.flushingSoon>=0)){if(t.domObserver.forceFlush(),dS(t),e||t.docView&&t.docView.dirty){let n=ih(t),s=t.state.selection;return n&&!n.eq(s)?t.dispatch(t.state.tr.setSelection(n)):(t.markCursor||e)&&!s.$from.node(s.$from.sharedDepth(s.to)).inlineContent?t.dispatch(t.state.tr.deleteSelection()):t.updateState(t.state),!0}return!1}}function dN(t,e){if(!t.dom.parentNode)return;let n=t.dom.parentNode.appendChild(document.createElement(\"div\"));n.appendChild(e),n.style.cssText=\"position: fixed; left: -10000px; top: 10px\";let s=getSelection(),r=document.createRange();r.selectNodeContents(e),t.dom.blur(),s.removeAllRanges(),s.addRange(r),setTimeout(()=>{n.parentNode&&n.parentNode.removeChild(n),t.focus()},50)}const Ao=_t&&Ds<15||mi&&lA<604;Ct.copy=vt.cut=(t,e)=>{let n=e,s=t.state.selection,r=n.type==\"cut\";if(s.empty)return;let i=Ao?null:n.clipboardData,o=s.content(),{dom:l,text:a}=lh(t,o);i?(n.preventDefault(),i.clearData(),i.setData(\"text/html\",l.innerHTML),i.setData(\"text/plain\",a)):dN(t,l),r&&t.dispatch(t.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\",\"cut\"))};function hN(t){return t.openStart==0&&t.openEnd==0&&t.content.childCount==1?t.content.firstChild:null}function pN(t,e){if(!t.dom.parentNode)return;let n=t.input.shiftKey||t.state.selection.$from.parent.type.spec.code,s=t.dom.parentNode.appendChild(document.createElement(n?\"textarea\":\"div\"));n||(s.contentEditable=\"true\"),s.style.cssText=\"position: fixed; left: -10000px; top: 10px\",s.focus();let r=t.input.shiftKey&&t.input.lastKeyCode!=45;setTimeout(()=>{t.focus(),s.parentNode&&s.parentNode.removeChild(s),n?No(t,s.value,null,r,e):No(t,s.textContent,s.innerHTML,r,e)},50)}function No(t,e,n,s,r){let i=sS(t,e,n,s,t.state.selection.$from);if(t.someProp(\"handlePaste\",a=>a(t,r,i||K.empty)))return!0;if(!i)return!1;let o=hN(i),l=o?t.state.tr.replaceSelectionWith(o,s):t.state.tr.replaceSelection(i);return t.dispatch(l.scrollIntoView().setMeta(\"paste\",!0).setMeta(\"uiEvent\",\"paste\")),!0}function hS(t){let e=t.getData(\"text/plain\")||t.getData(\"Text\");if(e)return e;let n=t.getData(\"text/uri-list\");return n?n.replace(/\\r?\\n/g,\" \"):\"\"}vt.paste=(t,e)=>{let n=e;if(t.composing&&!Un)return;let s=Ao?null:n.clipboardData,r=t.input.shiftKey&&t.input.lastKeyCode!=45;s&&No(t,hS(s),s.getData(\"text/html\"),r,n)?n.preventDefault():pN(t,n)};class pS{constructor(e,n,s){this.slice=e,this.move=n,this.node=s}}const mN=Jt?\"altKey\":\"ctrlKey\";function mS(t,e){let n=t.someProp(\"dragCopies\",s=>!s(e));return n??!e[mN]}Ct.dragstart=(t,e)=>{let n=e,s=t.input.mouseDown;if(s&&s.done(),!n.dataTransfer)return;let r=t.state.selection,i=r.empty?null:t.posAtCoords(Bc(n)),o;if(!(i&&i.pos>=r.from&&i.pos<=(r instanceof Q?r.to-1:r.to))){if(s&&s.mightDrag)o=Q.create(t.state.doc,s.mightDrag.pos);else if(n.target&&n.target.nodeType==1){let f=t.docView.nearestDesc(n.target,!0);f&&f.node.type.spec.draggable&&f!=t.docView&&(o=Q.create(t.state.doc,f.posBefore))}}let l=(o||t.state.selection).content(),{dom:a,text:c,slice:u}=lh(t,l);(!n.dataTransfer.files.length||!Je||F1>120)&&n.dataTransfer.clearData(),n.dataTransfer.setData(Ao?\"Text\":\"text/html\",a.innerHTML),n.dataTransfer.effectAllowed=\"copyMove\",Ao||n.dataTransfer.setData(\"text/plain\",c),t.dragging=new pS(u,mS(t,n),o)};Ct.dragend=t=>{let e=t.dragging;window.setTimeout(()=>{t.dragging==e&&(t.dragging=null)},50)};vt.dragover=vt.dragenter=(t,e)=>e.preventDefault();vt.drop=(t,e)=>{try{gN(t,e,t.dragging)}finally{t.dragging=null}};function gN(t,e,n){if(!e.dataTransfer)return;let s=t.posAtCoords(Bc(e));if(!s)return;let r=t.state.doc.resolve(s.pos),i=n&&n.slice;i?t.someProp(\"transformPasted\",h=>{i=h(i,t,!1)}):i=sS(t,hS(e.dataTransfer),Ao?null:e.dataTransfer.getData(\"text/html\"),!1,r);let o=!!(n&&mS(t,e));if(t.someProp(\"handleDrop\",h=>h(t,e,i||K.empty,o))){e.preventDefault();return}if(!i)return;e.preventDefault();let l=i?S1(t.state.doc,r.pos,i):r.pos;l==null&&(l=r.pos);let a=t.state.tr;if(o){let{node:h}=n;h?h.replace(a):a.deleteSelection()}let c=a.mapping.map(l),u=i.openStart==0&&i.openEnd==0&&i.content.childCount==1,f=a.doc;if(u?a.replaceRangeWith(c,c,i.content.firstChild):a.replaceRange(c,c,i),a.doc.eq(f))return;let d=a.doc.resolve(c);if(u&&Q.isSelectable(i.content.firstChild)&&d.nodeAfter&&d.nodeAfter.sameMarkup(i.content.firstChild))a.setSelection(new Q(d));else{let h=a.mapping.map(l);a.mapping.maps[a.mapping.maps.length-1].forEach((p,m,g,y)=>h=y),a.setSelection(oh(t,d,a.doc.resolve(h)))}t.focus(),t.dispatch(a.setMeta(\"uiEvent\",\"drop\"))}Ct.focus=t=>{t.input.lastFocus=Date.now(),t.focused||(t.domObserver.stop(),t.dom.classList.add(\"ProseMirror-focused\"),t.domObserver.start(),t.focused=!0,setTimeout(()=>{t.docView&&t.hasFocus()&&!t.domObserver.currentSelection.eq(t.domSelectionRange())&&Qn(t)},20))};Ct.blur=(t,e)=>{let n=e;t.focused&&(t.domObserver.stop(),t.dom.classList.remove(\"ProseMirror-focused\"),t.domObserver.start(),n.relatedTarget&&t.dom.contains(n.relatedTarget)&&t.domObserver.currentSelection.clear(),t.focused=!1)};Ct.beforeinput=(t,e)=>{if(Je&&Un&&e.inputType==\"deleteContentBackward\"){t.domObserver.flushSoon();let{domChangeCount:s}=t.input;setTimeout(()=>{if(t.input.domChangeCount!=s||(t.dom.blur(),t.focus(),t.someProp(\"handleKeyDown\",i=>i(t,Ys(8,\"Backspace\")))))return;let{$cursor:r}=t.state.selection;r&&r.pos>0&&t.dispatch(t.state.tr.delete(r.pos-1,r.pos).scrollIntoView())},50)}};for(let t in vt)Ct[t]=vt[t];function Oo(t,e){if(t==e)return!0;for(let n in t)if(t[n]!==e[n])return!1;for(let n in e)if(!(n in t))return!1;return!0}class ka{constructor(e,n){this.toDOM=e,this.spec=n||ur,this.side=this.spec.side||0}map(e,n,s,r){let{pos:i,deleted:o}=e.mapResult(n.from+r,this.side<0?-1:1);return o?null:new Ke(i-s,i-s,this)}valid(){return!0}eq(e){return this==e||e instanceof ka&&(this.spec.key&&this.spec.key==e.spec.key||this.toDOM==e.toDOM&&Oo(this.spec,e.spec))}destroy(e){this.spec.destroy&&this.spec.destroy(e)}}class Ls{constructor(e,n){this.attrs=e,this.spec=n||ur}map(e,n,s,r){let i=e.map(n.from+r,this.spec.inclusiveStart?-1:1)-s,o=e.map(n.to+r,this.spec.inclusiveEnd?1:-1)-s;return i>=o?null:new Ke(i,o,this)}valid(e,n){return n.from<n.to}eq(e){return this==e||e instanceof Ls&&Oo(this.attrs,e.attrs)&&Oo(this.spec,e.spec)}static is(e){return e.type instanceof Ls}destroy(){}}class fh{constructor(e,n){this.attrs=e,this.spec=n||ur}map(e,n,s,r){let i=e.mapResult(n.from+r,1);if(i.deleted)return null;let o=e.mapResult(n.to+r,-1);return o.deleted||o.pos<=i.pos?null:new Ke(i.pos-s,o.pos-s,this)}valid(e,n){let{index:s,offset:r}=e.content.findIndex(n.from),i;return r==n.from&&!(i=e.child(s)).isText&&r+i.nodeSize==n.to}eq(e){return this==e||e instanceof fh&&Oo(this.attrs,e.attrs)&&Oo(this.spec,e.spec)}destroy(){}}class Ke{constructor(e,n,s){this.from=e,this.to=n,this.type=s}copy(e,n){return new Ke(e,n,this.type)}eq(e,n=0){return this.type.eq(e.type)&&this.from+n==e.from&&this.to+n==e.to}map(e,n,s){return this.type.map(e,this,n,s)}static widget(e,n,s){return new Ke(e,e,new ka(n,s))}static inline(e,n,s,r){return new Ke(e,n,new Ls(s,r))}static node(e,n,s,r){return new Ke(e,n,new fh(s,r))}get spec(){return this.type.spec}get inline(){return this.type instanceof Ls}get widget(){return this.type instanceof ka}}const zr=[],ur={};class xe{constructor(e,n){this.local=e.length?e:zr,this.children=n.length?n:zr}static create(e,n){return n.length?Ta(n,e,0,ur):ft}find(e,n,s){let r=[];return this.findInner(e??0,n??1e9,r,0,s),r}findInner(e,n,s,r,i){for(let o=0;o<this.local.length;o++){let l=this.local[o];l.from<=n&&l.to>=e&&(!i||i(l.spec))&&s.push(l.copy(l.from+r,l.to+r))}for(let o=0;o<this.children.length;o+=3)if(this.children[o]<n&&this.children[o+1]>e){let l=this.children[o]+1;this.children[o+2].findInner(e-l,n-l,s,r+l,i)}}map(e,n,s){return this==ft||e.maps.length==0?this:this.mapInner(e,n,0,0,s||ur)}mapInner(e,n,s,r,i){let o;for(let l=0;l<this.local.length;l++){let a=this.local[l].map(e,s,r);a&&a.type.valid(n,a)?(o||(o=[])).push(a):i.onRemove&&i.onRemove(this.local[l].spec)}return this.children.length?yN(this.children,o||[],e,n,s,r,i):o?new xe(o.sort(fr),zr):ft}add(e,n){return n.length?this==ft?xe.create(e,n):this.addInner(e,n,0):this}addInner(e,n,s){let r,i=0;e.forEach((l,a)=>{let c=a+s,u;if(u=yS(n,l,c)){for(r||(r=this.children.slice());i<r.length&&r[i]<a;)i+=3;r[i]==a?r[i+2]=r[i+2].addInner(l,u,c+1):r.splice(i,0,a,a+l.nodeSize,Ta(u,l,c+1,ur)),i+=3}});let o=gS(i?bS(n):n,-s);for(let l=0;l<o.length;l++)o[l].type.valid(e,o[l])||o.splice(l--,1);return new xe(o.length?this.local.concat(o).sort(fr):this.local,r||this.children)}remove(e){return e.length==0||this==ft?this:this.removeInner(e,0)}removeInner(e,n){let s=this.children,r=this.local;for(let i=0;i<s.length;i+=3){let o,l=s[i]+n,a=s[i+1]+n;for(let u=0,f;u<e.length;u++)(f=e[u])&&f.from>l&&f.to<a&&(e[u]=null,(o||(o=[])).push(f));if(!o)continue;s==this.children&&(s=this.children.slice());let c=s[i+2].removeInner(o,l+1);c!=ft?s[i+2]=c:(s.splice(i,3),i-=3)}if(r.length){for(let i=0,o;i<e.length;i++)if(o=e[i])for(let l=0;l<r.length;l++)r[l].eq(o,n)&&(r==this.local&&(r=this.local.slice()),r.splice(l--,1))}return s==this.children&&r==this.local?this:r.length||s.length?new xe(r,s):ft}forChild(e,n){if(this==ft)return this;if(n.isLeaf)return xe.empty;let s,r;for(let l=0;l<this.children.length;l+=3)if(this.children[l]>=e){this.children[l]==e&&(s=this.children[l+2]);break}let i=e+1,o=i+n.content.size;for(let l=0;l<this.local.length;l++){let a=this.local[l];if(a.from<o&&a.to>i&&a.type instanceof Ls){let c=Math.max(i,a.from)-i,u=Math.min(o,a.to)-i;c<u&&(r||(r=[])).push(a.copy(c,u))}}if(r){let l=new xe(r.sort(fr),zr);return s?new ks([l,s]):l}return s||ft}eq(e){if(this==e)return!0;if(!(e instanceof xe)||this.local.length!=e.local.length||this.children.length!=e.children.length)return!1;for(let n=0;n<this.local.length;n++)if(!this.local[n].eq(e.local[n]))return!1;for(let n=0;n<this.children.length;n+=3)if(this.children[n]!=e.children[n]||this.children[n+1]!=e.children[n+1]||!this.children[n+2].eq(e.children[n+2]))return!1;return!0}locals(e){return dh(this.localsInner(e))}localsInner(e){if(this==ft)return zr;if(e.inlineContent||!this.local.some(Ls.is))return this.local;let n=[];for(let s=0;s<this.local.length;s++)this.local[s].type instanceof Ls||n.push(this.local[s]);return n}forEachSet(e){e(this)}}xe.empty=new xe([],[]);xe.removeOverlap=dh;const ft=xe.empty;class ks{constructor(e){this.members=e}map(e,n){const s=this.members.map(r=>r.map(e,n,ur));return ks.from(s)}forChild(e,n){if(n.isLeaf)return xe.empty;let s=[];for(let r=0;r<this.members.length;r++){let i=this.members[r].forChild(e,n);i!=ft&&(i instanceof ks?s=s.concat(i.members):s.push(i))}return ks.from(s)}eq(e){if(!(e instanceof ks)||e.members.length!=this.members.length)return!1;for(let n=0;n<this.members.length;n++)if(!this.members[n].eq(e.members[n]))return!1;return!0}locals(e){let n,s=!0;for(let r=0;r<this.members.length;r++){let i=this.members[r].localsInner(e);if(i.length)if(!n)n=i;else{s&&(n=n.slice(),s=!1);for(let o=0;o<i.length;o++)n.push(i[o])}}return n?dh(s?n:n.sort(fr)):zr}static from(e){switch(e.length){case 0:return ft;case 1:return e[0];default:return new ks(e.every(n=>n instanceof xe)?e:e.reduce((n,s)=>n.concat(s instanceof xe?s:s.members),[]))}}forEachSet(e){for(let n=0;n<this.members.length;n++)this.members[n].forEachSet(e)}}function yN(t,e,n,s,r,i,o){let l=t.slice();for(let c=0,u=i;c<n.maps.length;c++){let f=0;n.maps[c].forEach((d,h,p,m)=>{let g=m-p-(h-d);for(let y=0;y<l.length;y+=3){let S=l[y+1];if(S<0||d>S+u-f)continue;let b=l[y]+u-f;h>=b?l[y+1]=d<=b?-2:-1:d>=u&&g&&(l[y]+=g,l[y+1]+=g)}f+=g}),u=n.maps[c].map(u,-1)}let a=!1;for(let c=0;c<l.length;c+=3)if(l[c+1]<0){if(l[c+1]==-2){a=!0,l[c+1]=-1;continue}let u=n.map(t[c]+i),f=u-r;if(f<0||f>=s.content.size){a=!0;continue}let d=n.map(t[c+1]+i,-1),h=d-r,{index:p,offset:m}=s.content.findIndex(f),g=s.maybeChild(p);if(g&&m==f&&m+g.nodeSize==h){let y=l[c+2].mapInner(n,g,u+1,t[c]+i+1,o);y!=ft?(l[c]=f,l[c+1]=h,l[c+2]=y):(l[c+1]=-2,a=!0)}else a=!0}if(a){let c=bN(l,t,e,n,r,i,o),u=Ta(c,s,0,o);e=u.local;for(let f=0;f<l.length;f+=3)l[f+1]<0&&(l.splice(f,3),f-=3);for(let f=0,d=0;f<u.children.length;f+=3){let h=u.children[f];for(;d<l.length&&l[d]<h;)d+=3;l.splice(d,0,u.children[f],u.children[f+1],u.children[f+2])}}return new xe(e.sort(fr),l)}function gS(t,e){if(!e||!t.length)return t;let n=[];for(let s=0;s<t.length;s++){let r=t[s];n.push(new Ke(r.from+e,r.to+e,r.type))}return n}function bN(t,e,n,s,r,i,o){function l(a,c){for(let u=0;u<a.local.length;u++){let f=a.local[u].map(s,r,c);f?n.push(f):o.onRemove&&o.onRemove(a.local[u].spec)}for(let u=0;u<a.children.length;u+=3)l(a.children[u+2],a.children[u]+c+1)}for(let a=0;a<t.length;a+=3)t[a+1]==-1&&l(t[a+2],e[a]+i+1);return n}function yS(t,e,n){if(e.isLeaf)return null;let s=n+e.nodeSize,r=null;for(let i=0,o;i<t.length;i++)(o=t[i])&&o.from>n&&o.to<s&&((r||(r=[])).push(o),t[i]=null);return r}function bS(t){let e=[];for(let n=0;n<t.length;n++)t[n]!=null&&e.push(t[n]);return e}function Ta(t,e,n,s){let r=[],i=!1;e.forEach((l,a)=>{let c=yS(t,l,a+n);if(c){i=!0;let u=Ta(c,l,n+a+1,s);u!=ft&&r.push(a,a+l.nodeSize,u)}});let o=gS(i?bS(t):t,-n).sort(fr);for(let l=0;l<o.length;l++)o[l].type.valid(e,o[l])||(s.onRemove&&s.onRemove(o[l].spec),o.splice(l--,1));return o.length||r.length?new xe(o,r):ft}function fr(t,e){return t.from-e.from||t.to-e.to}function dh(t){let e=t;for(let n=0;n<e.length-1;n++){let s=e[n];if(s.from!=s.to)for(let r=n+1;r<e.length;r++){let i=e[r];if(i.from==s.from){i.to!=s.to&&(e==t&&(e=t.slice()),e[r]=i.copy(i.from,s.to),Wm(e,r+1,i.copy(s.to,i.to)));continue}else{i.from<s.to&&(e==t&&(e=t.slice()),e[n]=s.copy(s.from,i.from),Wm(e,r,s.copy(i.from,s.to)));break}}}return e}function Wm(t,e,n){for(;e<t.length&&fr(n,t[e])>0;)e++;t.splice(e,0,n)}function ku(t){let e=[];return t.someProp(\"decorations\",n=>{let s=n(t.state);s&&s!=ft&&e.push(s)}),t.cursorWrapper&&e.push(xe.create(t.state.doc,[t.cursorWrapper.deco])),ks.from(e)}const SN={childList:!0,characterData:!0,characterDataOldValue:!0,attributes:!0,attributeOldValue:!0,subtree:!0},wN=_t&&Ds<=11;class xN{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}set(e){this.anchorNode=e.anchorNode,this.anchorOffset=e.anchorOffset,this.focusNode=e.focusNode,this.focusOffset=e.focusOffset}clear(){this.anchorNode=this.focusNode=null}eq(e){return e.anchorNode==this.anchorNode&&e.anchorOffset==this.anchorOffset&&e.focusNode==this.focusNode&&e.focusOffset==this.focusOffset}}class CN{constructor(e,n){this.view=e,this.handleDOMChange=n,this.queue=[],this.flushingSoon=-1,this.observer=null,this.currentSelection=new xN,this.onCharData=null,this.suppressingSelectionUpdates=!1,this.lastChangedTextNode=null,this.observer=window.MutationObserver&&new window.MutationObserver(s=>{for(let r=0;r<s.length;r++)this.queue.push(s[r]);_t&&Ds<=11&&s.some(r=>r.type==\"childList\"&&r.removedNodes.length||r.type==\"characterData\"&&r.oldValue.length>r.target.nodeValue.length)?this.flushSoon():ot&&e.composing&&s.some(r=>r.type==\"childList\"&&r.target.nodeName==\"TR\")?(e.input.badSafariComposition=!0,this.flushSoon()):this.flush()}),wN&&(this.onCharData=s=>{this.queue.push({target:s.target,type:\"characterData\",oldValue:s.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this)}flushSoon(){this.flushingSoon<0&&(this.flushingSoon=window.setTimeout(()=>{this.flushingSoon=-1,this.flush()},20))}forceFlush(){this.flushingSoon>-1&&(window.clearTimeout(this.flushingSoon),this.flushingSoon=-1,this.flush())}start(){this.observer&&(this.observer.takeRecords(),this.observer.observe(this.view.dom,SN)),this.onCharData&&this.view.dom.addEventListener(\"DOMCharacterDataModified\",this.onCharData),this.connectSelection()}stop(){if(this.observer){let e=this.observer.takeRecords();if(e.length){for(let n=0;n<e.length;n++)this.queue.push(e[n]);window.setTimeout(()=>this.flush(),20)}this.observer.disconnect()}this.onCharData&&this.view.dom.removeEventListener(\"DOMCharacterDataModified\",this.onCharData),this.disconnectSelection()}connectSelection(){this.view.dom.ownerDocument.addEventListener(\"selectionchange\",this.onSelectionChange)}disconnectSelection(){this.view.dom.ownerDocument.removeEventListener(\"selectionchange\",this.onSelectionChange)}suppressSelectionUpdates(){this.suppressingSelectionUpdates=!0,setTimeout(()=>this.suppressingSelectionUpdates=!1,50)}onSelectionChange(){if(Pm(this.view)){if(this.suppressingSelectionUpdates)return Qn(this.view);if(_t&&Ds<=11&&!this.view.state.selection.empty){let e=this.view.domSelectionRange();if(e.focusNode&&br(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset))return this.flushSoon()}this.flush()}}setCurSelection(){this.currentSelection.set(this.view.domSelectionRange())}ignoreSelectionChange(e){if(!e.focusNode)return!0;let n=new Set,s;for(let i=e.focusNode;i;i=pi(i))n.add(i);for(let i=e.anchorNode;i;i=pi(i))if(n.has(i)){s=i;break}let r=s&&this.view.docView.nearestDesc(s);if(r&&r.ignoreMutation({type:\"selection\",target:s.nodeType==3?s.parentNode:s}))return this.setCurSelection(),!0}pendingRecords(){if(this.observer)for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}flush(){let{view:e}=this;if(!e.docView||this.flushingSoon>-1)return;let n=this.pendingRecords();n.length&&(this.queue=[]);let s=e.domSelectionRange(),r=!this.suppressingSelectionUpdates&&!this.currentSelection.eq(s)&&Pm(e)&&!this.ignoreSelectionChange(s),i=-1,o=-1,l=!1,a=[];if(e.editable)for(let u=0;u<n.length;u++){let f=this.registerMutation(n[u],a);f&&(i=i<0?f.from:Math.min(f.from,i),o=o<0?f.to:Math.max(f.to,o),f.typeOver&&(l=!0))}if(Zt&&a.length){let u=a.filter(f=>f.nodeName==\"BR\");if(u.length==2){let[f,d]=u;f.parentNode&&f.parentNode.parentNode==d.parentNode?d.remove():f.remove()}else{let{focusNode:f}=this.currentSelection;for(let d of u){let h=d.parentNode;h&&h.nodeName==\"LI\"&&(!f||TN(e,f)!=h)&&d.remove()}}}else if((Je||ot)&&a.some(u=>u.nodeName==\"BR\")&&(e.input.lastKeyCode==8||e.input.lastKeyCode==46)){for(let u of a)if(u.nodeName==\"BR\"&&u.parentNode){let f=u.nextSibling;f&&f.nodeType==1&&f.contentEditable==\"false\"&&u.parentNode.removeChild(u)}}let c=null;i<0&&r&&e.input.lastFocus>Date.now()-200&&Math.max(e.input.lastTouch,e.input.lastClick.time)<Date.now()-300&&Pc(s)&&(c=ih(e))&&c.eq(ee.near(e.state.doc.resolve(0),1))?(e.input.lastFocus=0,Qn(e),this.currentSelection.set(s),e.scrollToSelection()):(i>-1||r)&&(i>-1&&(e.docView.markDirty(i,o),vN(e)),e.input.badSafariComposition&&(e.input.badSafariComposition=!1,EN(e,a)),this.handleDOMChange(i,o,l,a),e.docView&&e.docView.dirty?e.updateState(e.state):this.currentSelection.eq(s)||Qn(e),this.currentSelection.set(s))}registerMutation(e,n){if(n.indexOf(e.target)>-1)return null;let s=this.view.docView.nearestDesc(e.target);if(e.type==\"attributes\"&&(s==this.view.docView||e.attributeName==\"contenteditable\"||e.attributeName==\"style\"&&!e.oldValue&&!e.target.getAttribute(\"style\"))||!s||s.ignoreMutation(e))return null;if(e.type==\"childList\"){for(let u=0;u<e.addedNodes.length;u++){let f=e.addedNodes[u];n.push(f),f.nodeType==3&&(this.lastChangedTextNode=f)}if(s.contentDOM&&s.contentDOM!=s.dom&&!s.contentDOM.contains(e.target))return{from:s.posBefore,to:s.posAfter};let r=e.previousSibling,i=e.nextSibling;if(_t&&Ds<=11&&e.addedNodes.length)for(let u=0;u<e.addedNodes.length;u++){let{previousSibling:f,nextSibling:d}=e.addedNodes[u];(!f||Array.prototype.indexOf.call(e.addedNodes,f)<0)&&(r=f),(!d||Array.prototype.indexOf.call(e.addedNodes,d)<0)&&(i=d)}let o=r&&r.parentNode==e.target?tt(r)+1:0,l=s.localPosFromDOM(e.target,o,-1),a=i&&i.parentNode==e.target?tt(i):e.target.childNodes.length,c=s.localPosFromDOM(e.target,a,1);return{from:l,to:c}}else return e.type==\"attributes\"?{from:s.posAtStart-s.border,to:s.posAtEnd+s.border}:(this.lastChangedTextNode=e.target,{from:s.posAtStart,to:s.posAtEnd,typeOver:e.target.nodeValue==e.oldValue})}}let jm=new WeakMap,Um=!1;function vN(t){if(!jm.has(t)&&(jm.set(t,null),[\"normal\",\"nowrap\",\"pre-line\"].indexOf(getComputedStyle(t.dom).whiteSpace)!==-1)){if(t.requiresGeckoHackNode=Zt,Um)return;console.warn(\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\"),Um=!0}}function Km(t,e){let n=e.startContainer,s=e.startOffset,r=e.endContainer,i=e.endOffset,o=t.domAtPos(t.state.selection.anchor);return br(o.node,o.offset,r,i)&&([n,s,r,i]=[r,i,n,s]),{anchorNode:n,anchorOffset:s,focusNode:r,focusOffset:i}}function kN(t,e){if(e.getComposedRanges){let r=e.getComposedRanges(t.root)[0];if(r)return Km(t,r)}let n;function s(r){r.preventDefault(),r.stopImmediatePropagation(),n=r.getTargetRanges()[0]}return t.dom.addEventListener(\"beforeinput\",s,!0),document.execCommand(\"indent\"),t.dom.removeEventListener(\"beforeinput\",s,!0),n?Km(t,n):null}function TN(t,e){for(let n=e.parentNode;n&&n!=t.dom;n=n.parentNode){let s=t.docView.nearestDesc(n,!0);if(s&&s.node.isBlock)return n}return null}function EN(t,e){var n;let{focusNode:s,focusOffset:r}=t.domSelectionRange();for(let i of e)if(((n=i.parentNode)===null||n===void 0?void 0:n.nodeName)==\"TR\"){let o=i.nextSibling;for(;o&&o.nodeName!=\"TD\"&&o.nodeName!=\"TH\";)o=o.nextSibling;if(o){let l=o;for(;;){let a=l.firstChild;if(!a||a.nodeType!=1||a.contentEditable==\"false\"||/^(BR|IMG)$/.test(a.nodeName))break;l=a}l.insertBefore(i,l.firstChild),s==i&&t.domSelection().collapse(i,r)}else i.parentNode.removeChild(i)}}function MN(t,e,n){let{node:s,fromOffset:r,toOffset:i,from:o,to:l}=t.docView.parseRange(e,n),a=t.domSelectionRange(),c,u=a.anchorNode;if(u&&t.dom.contains(u.nodeType==1?u:u.parentNode)&&(c=[{node:u,offset:a.anchorOffset}],Pc(a)||c.push({node:a.focusNode,offset:a.focusOffset})),Je&&t.input.lastKeyCode===8)for(let g=i;g>r;g--){let y=s.childNodes[g-1],S=y.pmViewDesc;if(y.nodeName==\"BR\"&&!S){i=g;break}if(!S||S.size)break}let f=t.state.doc,d=t.someProp(\"domParser\")||_s.fromSchema(t.state.schema),h=f.resolve(o),p=null,m=d.parse(s,{topNode:h.parent,topMatch:h.parent.contentMatchAt(h.index()),topOpen:!0,from:r,to:i,preserveWhitespace:h.parent.type.whitespace==\"pre\"?\"full\":!0,findPositions:c,ruleFromNode:AN,context:h});if(c&&c[0].pos!=null){let g=c[0].pos,y=c[1]&&c[1].pos;y==null&&(y=g),p={anchor:g+o,head:y+o}}return{doc:m,sel:p,from:o,to:l}}function AN(t){let e=t.pmViewDesc;if(e)return e.parseRule();if(t.nodeName==\"BR\"&&t.parentNode){if(ot&&/^(ul|ol)$/i.test(t.parentNode.nodeName)){let n=document.createElement(\"div\");return n.appendChild(document.createElement(\"li\")),{skip:n}}else if(t.parentNode.lastChild==t||ot&&/^(tr|table)$/i.test(t.parentNode.nodeName))return{ignore:!0}}else if(t.nodeName==\"IMG\"&&t.getAttribute(\"mark-placeholder\"))return{ignore:!0};return null}const NN=/^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;function ON(t,e,n,s,r){let i=t.input.compositionPendingChanges||(t.composing?t.input.compositionID:0);if(t.input.compositionPendingChanges=0,e<0){let k=t.input.lastSelectionTime>Date.now()-50?t.input.lastSelectionOrigin:null,A=ih(t,k);if(A&&!t.state.selection.eq(A)){if(Je&&Un&&t.input.lastKeyCode===13&&Date.now()-100<t.input.lastKeyCodeTime&&t.someProp(\"handleKeyDown\",T=>T(t,Ys(13,\"Enter\"))))return;let v=t.state.tr.setSelection(A);k==\"pointer\"?v.setMeta(\"pointer\",!0):k==\"key\"&&v.scrollIntoView(),i&&v.setMeta(\"composition\",i),t.dispatch(v)}return}let o=t.state.doc.resolve(e),l=o.sharedDepth(n);e=o.before(l+1),n=t.state.doc.resolve(n).after(l+1);let a=t.state.selection,c=MN(t,e,n),u=t.state.doc,f=u.slice(c.from,c.to),d,h;t.input.lastKeyCode===8&&Date.now()-100<t.input.lastKeyCodeTime?(d=t.state.selection.to,h=\"end\"):(d=t.state.selection.from,h=\"start\"),t.input.lastKeyCode=null;let p=_N(f.content,c.doc.content,c.from,d,h);if(p&&t.input.domChangeCount++,(mi&&t.input.lastIOSEnter>Date.now()-225||Un)&&r.some(k=>k.nodeType==1&&!NN.test(k.nodeName))&&(!p||p.endA>=p.endB)&&t.someProp(\"handleKeyDown\",k=>k(t,Ys(13,\"Enter\")))){t.input.lastIOSEnter=0;return}if(!p)if(s&&a instanceof Z&&!a.empty&&a.$head.sameParent(a.$anchor)&&!t.composing&&!(c.sel&&c.sel.anchor!=c.sel.head))p={start:a.from,endA:a.to,endB:a.to};else{if(c.sel){let k=qm(t,t.state.doc,c.sel);if(k&&!k.eq(t.state.selection)){let A=t.state.tr.setSelection(k);i&&A.setMeta(\"composition\",i),t.dispatch(A)}}return}t.state.selection.from<t.state.selection.to&&p.start==p.endB&&t.state.selection instanceof Z&&(p.start>t.state.selection.from&&p.start<=t.state.selection.from+2&&t.state.selection.from>=c.from?p.start=t.state.selection.from:p.endA<t.state.selection.to&&p.endA>=t.state.selection.to-2&&t.state.selection.to<=c.to&&(p.endB+=t.state.selection.to-p.endA,p.endA=t.state.selection.to)),_t&&Ds<=11&&p.endB==p.start+1&&p.endA==p.start&&p.start>c.from&&c.doc.textBetween(p.start-c.from-1,p.start-c.from+1)==\"  \"&&(p.start--,p.endA--,p.endB--);let m=c.doc.resolveNoCache(p.start-c.from),g=c.doc.resolveNoCache(p.endB-c.from),y=u.resolve(p.start),S=m.sameParent(g)&&m.parent.inlineContent&&y.end()>=p.endA;if((mi&&t.input.lastIOSEnter>Date.now()-225&&(!S||r.some(k=>k.nodeName==\"DIV\"||k.nodeName==\"P\"))||!S&&m.pos<c.doc.content.size&&(!m.sameParent(g)||!m.parent.inlineContent)&&m.pos<g.pos&&!/\\S/.test(c.doc.textBetween(m.pos,g.pos,\"\",\"\")))&&t.someProp(\"handleKeyDown\",k=>k(t,Ys(13,\"Enter\")))){t.input.lastIOSEnter=0;return}if(t.state.selection.anchor>p.start&&IN(u,p.start,p.endA,m,g)&&t.someProp(\"handleKeyDown\",k=>k(t,Ys(8,\"Backspace\")))){Un&&Je&&t.domObserver.suppressSelectionUpdates();return}Je&&p.endB==p.start&&(t.input.lastChromeDelete=Date.now()),Un&&!S&&m.start()!=g.start()&&g.parentOffset==0&&m.depth==g.depth&&c.sel&&c.sel.anchor==c.sel.head&&c.sel.head==p.endA&&(p.endB-=2,g=c.doc.resolveNoCache(p.endB-c.from),setTimeout(()=>{t.someProp(\"handleKeyDown\",function(k){return k(t,Ys(13,\"Enter\"))})},20));let b=p.start,w=p.endA,x=k=>{let A=k||t.state.tr.replace(b,w,c.doc.slice(p.start-c.from,p.endB-c.from));if(c.sel){let v=qm(t,A.doc,c.sel);v&&!(Je&&t.composing&&v.empty&&(p.start!=p.endB||t.input.lastChromeDelete<Date.now()-100)&&(v.head==b||v.head==A.mapping.map(w)-1)||_t&&v.empty&&v.head==b)&&A.setSelection(v)}return i&&A.setMeta(\"composition\",i),A.scrollIntoView()},E;if(S)if(m.pos==g.pos){_t&&Ds<=11&&m.parentOffset==0&&(t.domObserver.suppressSelectionUpdates(),setTimeout(()=>Qn(t),20));let k=x(t.state.tr.delete(b,w)),A=u.resolve(p.start).marksAcross(u.resolve(p.endA));A&&k.ensureMarks(A),t.dispatch(k)}else if(p.endA==p.endB&&(E=RN(m.parent.content.cut(m.parentOffset,g.parentOffset),y.parent.content.cut(y.parentOffset,p.endA-y.start())))){let k=x(t.state.tr);E.type==\"add\"?k.addMark(b,w,E.mark):k.removeMark(b,w,E.mark),t.dispatch(k)}else if(m.parent.child(m.index()).isText&&m.index()==g.index()-(g.textOffset?0:1)){let k=m.parent.textBetween(m.parentOffset,g.parentOffset),A=()=>x(t.state.tr.insertText(k,b,w));t.someProp(\"handleTextInput\",v=>v(t,b,w,k,A))||t.dispatch(A())}else t.dispatch(x());else t.dispatch(x())}function qm(t,e,n){return Math.max(n.anchor,n.head)>e.content.size?null:oh(t,e.resolve(n.anchor),e.resolve(n.head))}function RN(t,e){let n=t.firstChild.marks,s=e.firstChild.marks,r=n,i=s,o,l,a;for(let u=0;u<s.length;u++)r=s[u].removeFromSet(r);for(let u=0;u<n.length;u++)i=n[u].removeFromSet(i);if(r.length==1&&i.length==0)l=r[0],o=\"add\",a=u=>u.mark(l.addToSet(u.marks));else if(r.length==0&&i.length==1)l=i[0],o=\"remove\",a=u=>u.mark(l.removeFromSet(u.marks));else return null;let c=[];for(let u=0;u<e.childCount;u++)c.push(a(e.child(u)));if(D.from(c).eq(t))return{mark:l,type:o}}function IN(t,e,n,s,r){if(n-e<=r.pos-s.pos||Tu(s,!0,!1)<r.pos)return!1;let i=t.resolve(e);if(!s.parent.isTextblock){let l=i.nodeAfter;return l!=null&&n==e+l.nodeSize}if(i.parentOffset<i.parent.content.size||!i.parent.isTextblock)return!1;let o=t.resolve(Tu(i,!0,!0));return!o.parent.isTextblock||o.pos>n||Tu(o,!0,!1)<n?!1:s.parent.content.cut(s.parentOffset).eq(o.parent.content)}function Tu(t,e,n){let s=t.depth,r=e?t.end():t.pos;for(;s>0&&(e||t.indexAfter(s)==t.node(s).childCount);)s--,r++,e=!1;if(n){let i=t.node(s).maybeChild(t.indexAfter(s));for(;i&&!i.isLeaf;)i=i.firstChild,r++}return r}function _N(t,e,n,s,r){let i=t.findDiffStart(e,n);if(i==null)return null;let{a:o,b:l}=t.findDiffEnd(e,n+t.size,n+e.size);if(r==\"end\"){let a=Math.max(0,i-Math.min(o,l));s-=o+a-i}if(o<i&&t.size<e.size){let a=s<=i&&s>=o?i-s:0;i-=a,i&&i<e.size&&Jm(e.textBetween(i-1,i+1))&&(i+=a?1:-1),l=i+(l-o),o=i}else if(l<i){let a=s<=i&&s>=l?i-s:0;i-=a,i&&i<t.size&&Jm(t.textBetween(i-1,i+1))&&(i+=a?1:-1),o=i+(o-l),l=i}return{start:i,endA:o,endB:l}}function Jm(t){if(t.length!=2)return!1;let e=t.charCodeAt(0),n=t.charCodeAt(1);return e>=56320&&e<=57343&&n>=55296&&n<=56319}class SS{constructor(e,n){this._root=null,this.focused=!1,this.trackWrites=null,this.mounted=!1,this.markCursor=null,this.cursorWrapper=null,this.lastSelectedViewDesc=void 0,this.input=new GA,this.prevDirectPlugins=[],this.pluginViews=[],this.requiresGeckoHackNode=!1,this.dragging=null,this._props=n,this.state=n.state,this.directPlugins=n.plugins||[],this.directPlugins.forEach(Zm),this.dispatch=this.dispatch.bind(this),this.dom=e&&e.mount||document.createElement(\"div\"),e&&(e.appendChild?e.appendChild(this.dom):typeof e==\"function\"?e(this.dom):e.mount&&(this.mounted=!0)),this.editable=Xm(this),Ym(this),this.nodeViews=Qm(this),this.docView=Nm(this.state.doc,Gm(this),ku(this),this.dom,this),this.domObserver=new CN(this,(s,r,i,o)=>ON(this,s,r,i,o)),this.domObserver.start(),YA(this),this.updatePluginViews()}get composing(){return this.input.composing}get props(){if(this._props.state!=this.state){let e=this._props;this._props={};for(let n in e)this._props[n]=e[n];this._props.state=this.state}return this._props}update(e){e.handleDOMEvents!=this._props.handleDOMEvents&&Of(this);let n=this._props;this._props=e,e.plugins&&(e.plugins.forEach(Zm),this.directPlugins=e.plugins),this.updateStateInner(e.state,n)}setProps(e){let n={};for(let s in this._props)n[s]=this._props[s];n.state=this.state;for(let s in e)n[s]=e[s];this.update(n)}updateState(e){this.updateStateInner(e,this._props)}updateStateInner(e,n){var s;let r=this.state,i=!1,o=!1;e.storedMarks&&this.composing&&(dS(this),o=!0),this.state=e;let l=r.plugins!=e.plugins||this._props.plugins!=n.plugins;if(l||this._props.plugins!=n.plugins||this._props.nodeViews!=n.nodeViews){let h=Qm(this);PN(h,this.nodeViews)&&(this.nodeViews=h,i=!0)}(l||n.handleDOMEvents!=this._props.handleDOMEvents)&&Of(this),this.editable=Xm(this),Ym(this);let a=ku(this),c=Gm(this),u=r.plugins!=e.plugins&&!r.doc.eq(e.doc)?\"reset\":e.scrollToSelection>r.scrollToSelection?\"to selection\":\"preserve\",f=i||!this.docView.matchesNode(e.doc,c,a);(f||!e.selection.eq(r.selection))&&(o=!0);let d=u==\"preserve\"&&o&&this.dom.style.overflowAnchor==null&&uA(this);if(o){this.domObserver.stop();let h=f&&(_t||Je)&&!this.composing&&!r.selection.empty&&!e.selection.empty&&DN(r.selection,e.selection);if(f){let p=Je?this.trackWrites=this.domSelectionRange().focusNode:null;this.composing&&(this.input.compositionNode=uN(this)),(i||!this.docView.update(e.doc,c,a,this))&&(this.docView.updateOuterDeco(c),this.docView.destroy(),this.docView=Nm(e.doc,c,a,this.dom,this)),p&&(!this.trackWrites||!this.dom.contains(this.trackWrites))&&(h=!0)}h||!(this.input.mouseDown&&this.domObserver.currentSelection.eq(this.domSelectionRange())&&DA(this))?Qn(this,h):(eS(this,e.selection),this.domObserver.setCurSelection()),this.domObserver.start()}this.updatePluginViews(r),!((s=this.dragging)===null||s===void 0)&&s.node&&!r.doc.eq(e.doc)&&this.updateDraggedNode(this.dragging,r),u==\"reset\"?this.dom.scrollTop=0:u==\"to selection\"?this.scrollToSelection():d&&fA(d)}scrollToSelection(){let e=this.domSelectionRange().focusNode;if(!(!e||!this.dom.contains(e.nodeType==1?e:e.parentNode))){if(!this.someProp(\"handleScrollToSelection\",n=>n(this)))if(this.state.selection instanceof Q){let n=this.docView.domAfterPos(this.state.selection.from);n.nodeType==1&&vm(this,n.getBoundingClientRect(),e)}else vm(this,this.coordsAtPos(this.state.selection.head,1),e)}}destroyPluginViews(){let e;for(;e=this.pluginViews.pop();)e.destroy&&e.destroy()}updatePluginViews(e){if(!e||e.plugins!=this.state.plugins||this.directPlugins!=this.prevDirectPlugins){this.prevDirectPlugins=this.directPlugins,this.destroyPluginViews();for(let n=0;n<this.directPlugins.length;n++){let s=this.directPlugins[n];s.spec.view&&this.pluginViews.push(s.spec.view(this))}for(let n=0;n<this.state.plugins.length;n++){let s=this.state.plugins[n];s.spec.view&&this.pluginViews.push(s.spec.view(this))}}else for(let n=0;n<this.pluginViews.length;n++){let s=this.pluginViews[n];s.update&&s.update(this,e)}}updateDraggedNode(e,n){let s=e.node,r=-1;if(this.state.doc.nodeAt(s.from)==s.node)r=s.from;else{let i=s.from+(this.state.doc.content.size-n.doc.content.size);(i>0&&this.state.doc.nodeAt(i))==s.node&&(r=i)}this.dragging=new pS(e.slice,e.move,r<0?void 0:Q.create(this.state.doc,r))}someProp(e,n){let s=this._props&&this._props[e],r;if(s!=null&&(r=n?n(s):s))return r;for(let o=0;o<this.directPlugins.length;o++){let l=this.directPlugins[o].props[e];if(l!=null&&(r=n?n(l):l))return r}let i=this.state.plugins;if(i)for(let o=0;o<i.length;o++){let l=i[o].props[e];if(l!=null&&(r=n?n(l):l))return r}}hasFocus(){if(_t){let e=this.root.activeElement;if(e==this.dom)return!0;if(!e||!this.dom.contains(e))return!1;for(;e&&this.dom!=e&&this.dom.contains(e);){if(e.contentEditable==\"false\")return!1;e=e.parentElement}return!0}return this.root.activeElement==this.dom}focus(){this.domObserver.stop(),this.editable&&dA(this.dom),Qn(this),this.domObserver.start()}get root(){let e=this._root;if(e==null){for(let n=this.dom.parentNode;n;n=n.parentNode)if(n.nodeType==9||n.nodeType==11&&n.host)return n.getSelection||(Object.getPrototypeOf(n).getSelection=()=>n.ownerDocument.getSelection()),this._root=n}return e||document}updateRoot(){this._root=null}posAtCoords(e){return yA(this,e)}coordsAtPos(e,n=1){return K1(this,e,n)}domAtPos(e,n=0){return this.docView.domFromPos(e,n)}nodeDOM(e){let n=this.docView.descAt(e);return n?n.nodeDOM:null}posAtDOM(e,n,s=-1){let r=this.docView.posFromDOM(e,n,s);if(r==null)throw new RangeError(\"DOM position not inside the editor\");return r}endOfTextblock(e,n){return CA(this,n||this.state,e)}pasteHTML(e,n){return No(this,\"\",e,!1,n||new ClipboardEvent(\"paste\"))}pasteText(e,n){return No(this,e,null,!0,n||new ClipboardEvent(\"paste\"))}serializeForClipboard(e){return lh(this,e)}destroy(){this.docView&&(XA(this),this.destroyPluginViews(),this.mounted?(this.docView.update(this.state.doc,[],ku(this),this),this.dom.textContent=\"\"):this.dom.parentNode&&this.dom.parentNode.removeChild(this.dom),this.docView.destroy(),this.docView=null,eA())}get isDestroyed(){return this.docView==null}dispatchEvent(e){return ZA(this,e)}domSelectionRange(){let e=this.domSelection();return e?ot&&this.root.nodeType===11&&iA(this.dom.ownerDocument)==this.dom&&kN(this,e)||e:{focusNode:null,focusOffset:0,anchorNode:null,anchorOffset:0}}domSelection(){return this.root.getSelection()}}SS.prototype.dispatch=function(t){let e=this._props.dispatchTransaction;e?e.call(this,t):this.updateState(this.state.apply(t))};function Gm(t){let e=Object.create(null);return e.class=\"ProseMirror\",e.contenteditable=String(t.editable),t.someProp(\"attributes\",n=>{if(typeof n==\"function\"&&(n=n(t.state)),n)for(let s in n)s==\"class\"?e.class+=\" \"+n[s]:s==\"style\"?e.style=(e.style?e.style+\";\":\"\")+n[s]:!e[s]&&s!=\"contenteditable\"&&s!=\"nodeName\"&&(e[s]=String(n[s]))}),e.translate||(e.translate=\"no\"),[Ke.node(0,t.state.doc.content.size,e)]}function Ym(t){if(t.markCursor){let e=document.createElement(\"img\");e.className=\"ProseMirror-separator\",e.setAttribute(\"mark-placeholder\",\"true\"),e.setAttribute(\"alt\",\"\"),t.cursorWrapper={dom:e,deco:Ke.widget(t.state.selection.from,e,{raw:!0,marks:t.markCursor})}}else t.cursorWrapper=null}function Xm(t){return!t.someProp(\"editable\",e=>e(t.state)===!1)}function DN(t,e){let n=Math.min(t.$anchor.sharedDepth(t.head),e.$anchor.sharedDepth(e.head));return t.$anchor.start(n)!=e.$anchor.start(n)}function Qm(t){let e=Object.create(null);function n(s){for(let r in s)Object.prototype.hasOwnProperty.call(e,r)||(e[r]=s[r])}return t.someProp(\"nodeViews\",n),t.someProp(\"markViews\",n),e}function PN(t,e){let n=0,s=0;for(let r in t){if(t[r]!=e[r])return!0;n++}for(let r in e)s++;return n!=s}function Zm(t){if(t.spec.state||t.spec.filterTransaction||t.spec.appendTransaction)throw new RangeError(\"Plugins passed directly to the view must not have a state component\")}var Hs={8:\"Backspace\",9:\"Tab\",10:\"Enter\",12:\"NumLock\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",44:\"PrintScreen\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Meta\",92:\"Meta\",106:\"*\",107:\"+\",108:\",\",109:\"-\",110:\".\",111:\"/\",144:\"NumLock\",145:\"ScrollLock\",160:\"Shift\",161:\"Shift\",162:\"Control\",163:\"Control\",164:\"Alt\",165:\"Alt\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"},Ea={48:\")\",49:\"!\",50:\"@\",51:\"#\",52:\"$\",53:\"%\",54:\"^\",55:\"&\",56:\"*\",57:\"(\",59:\":\",61:\"+\",173:\"_\",186:\":\",187:\"+\",188:\"<\",189:\"_\",190:\">\",191:\"?\",192:\"~\",219:\"{\",220:\"|\",221:\"}\",222:'\"'},LN=typeof navigator<\"u\"&&/Mac/.test(navigator.platform),BN=typeof navigator<\"u\"&&/MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);for(var nt=0;nt<10;nt++)Hs[48+nt]=Hs[96+nt]=String(nt);for(var nt=1;nt<=24;nt++)Hs[nt+111]=\"F\"+nt;for(var nt=65;nt<=90;nt++)Hs[nt]=String.fromCharCode(nt+32),Ea[nt]=String.fromCharCode(nt);for(var Eu in Hs)Ea.hasOwnProperty(Eu)||(Ea[Eu]=Hs[Eu]);function $N(t){var e=LN&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||BN&&t.shiftKey&&t.key&&t.key.length==1||t.key==\"Unidentified\",n=!e&&t.key||(t.shiftKey?Ea:Hs)[t.keyCode]||t.key||\"Unidentified\";return n==\"Esc\"&&(n=\"Escape\"),n==\"Del\"&&(n=\"Delete\"),n==\"Left\"&&(n=\"ArrowLeft\"),n==\"Up\"&&(n=\"ArrowUp\"),n==\"Right\"&&(n=\"ArrowRight\"),n==\"Down\"&&(n=\"ArrowDown\"),n}const HN=typeof navigator<\"u\"&&/Mac|iP(hone|[oa]d)/.test(navigator.platform),FN=typeof navigator<\"u\"&&/Win/.test(navigator.platform);function zN(t){let e=t.split(/-(?!$)/),n=e[e.length-1];n==\"Space\"&&(n=\" \");let s,r,i,o;for(let l=0;l<e.length-1;l++){let a=e[l];if(/^(cmd|meta|m)$/i.test(a))o=!0;else if(/^a(lt)?$/i.test(a))s=!0;else if(/^(c|ctrl|control)$/i.test(a))r=!0;else if(/^s(hift)?$/i.test(a))i=!0;else if(/^mod$/i.test(a))HN?o=!0:r=!0;else throw new Error(\"Unrecognized modifier name: \"+a)}return s&&(n=\"Alt-\"+n),r&&(n=\"Ctrl-\"+n),o&&(n=\"Meta-\"+n),i&&(n=\"Shift-\"+n),n}function VN(t){let e=Object.create(null);for(let n in t)e[zN(n)]=t[n];return e}function Mu(t,e,n=!0){return e.altKey&&(t=\"Alt-\"+t),e.ctrlKey&&(t=\"Ctrl-\"+t),e.metaKey&&(t=\"Meta-\"+t),n&&e.shiftKey&&(t=\"Shift-\"+t),t}function WN(t){return new we({props:{handleKeyDown:hh(t)}})}function hh(t){let e=VN(t);return function(n,s){let r=$N(s),i,o=e[Mu(r,s)];if(o&&o(n.state,n.dispatch,n))return!0;if(r.length==1&&r!=\" \"){if(s.shiftKey){let l=e[Mu(r,s,!1)];if(l&&l(n.state,n.dispatch,n))return!0}if((s.altKey||s.metaKey||s.ctrlKey)&&!(FN&&s.ctrlKey&&s.altKey)&&(i=Hs[s.keyCode])&&i!=r){let l=e[Mu(i,s)];if(l&&l(n.state,n.dispatch,n))return!0}}return!1}}var jN=Object.defineProperty,ph=(t,e)=>{for(var n in e)jN(t,n,{get:e[n],enumerable:!0})};function $c(t){const{state:e,transaction:n}=t;let{selection:s}=n,{doc:r}=n,{storedMarks:i}=n;return{...e,apply:e.apply.bind(e),applyTransaction:e.applyTransaction.bind(e),plugins:e.plugins,schema:e.schema,reconfigure:e.reconfigure.bind(e),toJSON:e.toJSON.bind(e),get storedMarks(){return i},get selection(){return s},get doc(){return r},get tr(){return s=n.selection,r=n.doc,i=n.storedMarks,n}}}var Hc=class{constructor(t){this.editor=t.editor,this.rawCommands=this.editor.extensionManager.commands,this.customState=t.state}get hasCustomState(){return!!this.customState}get state(){return this.customState||this.editor.state}get commands(){const{rawCommands:t,editor:e,state:n}=this,{view:s}=e,{tr:r}=n,i=this.buildProps(r);return Object.fromEntries(Object.entries(t).map(([o,l])=>[o,(...c)=>{const u=l(...c)(i);return!r.getMeta(\"preventDispatch\")&&!this.hasCustomState&&s.dispatch(r),u}]))}get chain(){return()=>this.createChain()}get can(){return()=>this.createCan()}createChain(t,e=!0){const{rawCommands:n,editor:s,state:r}=this,{view:i}=s,o=[],l=!!t,a=t||r.tr,c=()=>(!l&&e&&!a.getMeta(\"preventDispatch\")&&!this.hasCustomState&&i.dispatch(a),o.every(f=>f===!0)),u={...Object.fromEntries(Object.entries(n).map(([f,d])=>[f,(...p)=>{const m=this.buildProps(a,e),g=d(...p)(m);return o.push(g),u}])),run:c};return u}createCan(t){const{rawCommands:e,state:n}=this,s=!1,r=t||n.tr,i=this.buildProps(r,s);return{...Object.fromEntries(Object.entries(e).map(([l,a])=>[l,(...c)=>a(...c)({...i,dispatch:void 0})])),chain:()=>this.createChain(r,s)}}buildProps(t,e=!0){const{rawCommands:n,editor:s,state:r}=this,{view:i}=s,o={tr:t,editor:s,view:i,state:$c({state:r,transaction:t}),dispatch:e?()=>{}:void 0,chain:()=>this.createChain(t,e),can:()=>this.createCan(t),get commands(){return Object.fromEntries(Object.entries(n).map(([l,a])=>[l,(...c)=>a(...c)(o)]))}};return o}},wS={};ph(wS,{blur:()=>UN,clearContent:()=>KN,clearNodes:()=>qN,command:()=>JN,createParagraphNear:()=>GN,cut:()=>YN,deleteCurrentNode:()=>XN,deleteNode:()=>QN,deleteRange:()=>ZN,deleteSelection:()=>eO,enter:()=>tO,exitCode:()=>nO,extendMarkRange:()=>sO,first:()=>rO,focus:()=>oO,forEach:()=>lO,insertContent:()=>aO,insertContentAt:()=>fO,joinBackward:()=>pO,joinDown:()=>hO,joinForward:()=>mO,joinItemBackward:()=>gO,joinItemForward:()=>yO,joinTextblockBackward:()=>bO,joinTextblockForward:()=>SO,joinUp:()=>dO,keyboardShortcut:()=>xO,lift:()=>CO,liftEmptyBlock:()=>vO,liftListItem:()=>kO,newlineInCode:()=>TO,resetAttributes:()=>EO,scrollIntoView:()=>MO,selectAll:()=>AO,selectNodeBackward:()=>NO,selectNodeForward:()=>OO,selectParentNode:()=>RO,selectTextblockEnd:()=>IO,selectTextblockStart:()=>_O,setContent:()=>DO,setMark:()=>QO,setMeta:()=>ZO,setNode:()=>eR,setNodeSelection:()=>tR,setTextDirection:()=>nR,setTextSelection:()=>sR,sinkListItem:()=>rR,splitBlock:()=>iR,splitListItem:()=>oR,toggleList:()=>lR,toggleMark:()=>aR,toggleNode:()=>cR,toggleWrap:()=>uR,undoInputRule:()=>fR,unsetAllMarks:()=>dR,unsetMark:()=>hR,unsetTextDirection:()=>pR,updateAttributes:()=>mR,wrapIn:()=>gR,wrapInList:()=>yR});var UN=()=>({editor:t,view:e})=>(requestAnimationFrame(()=>{var n;t.isDestroyed||(e.dom.blur(),(n=window?.getSelection())==null||n.removeAllRanges())}),!0),KN=(t=!0)=>({commands:e})=>e.setContent(\"\",{emitUpdate:t}),qN=()=>({state:t,tr:e,dispatch:n})=>{const{selection:s}=e,{ranges:r}=s;return n&&r.forEach(({$from:i,$to:o})=>{t.doc.nodesBetween(i.pos,o.pos,(l,a)=>{if(l.type.isText)return;const{doc:c,mapping:u}=e,f=c.resolve(u.map(a)),d=c.resolve(u.map(a+l.nodeSize)),h=f.blockRange(d);if(!h)return;const p=ki(h);if(l.type.isTextblock){const{defaultType:m}=f.parent.contentMatchAt(f.index());e.setNodeMarkup(h.start,m)}(p||p===0)&&e.lift(h,p)})}),!0},JN=t=>e=>t(e),GN=()=>({state:t,dispatch:e})=>P1(t,e),YN=(t,e)=>({editor:n,tr:s})=>{const{state:r}=n,i=r.doc.slice(t.from,t.to);s.deleteRange(t.from,t.to);const o=s.mapping.map(e);return s.insert(o,i.content),s.setSelection(new Z(s.doc.resolve(Math.max(o-1,0)))),!0},XN=()=>({tr:t,dispatch:e})=>{const{selection:n}=t,s=n.$anchor.node();if(s.content.size>0)return!1;const r=t.selection.$anchor;for(let i=r.depth;i>0;i-=1)if(r.node(i).type===s.type){if(e){const l=r.before(i),a=r.after(i);t.delete(l,a).scrollIntoView()}return!0}return!1};function We(t,e){if(typeof t==\"string\"){if(!e.nodes[t])throw Error(`There is no node type named '${t}'. Maybe you forgot to add the extension?`);return e.nodes[t]}return t}var QN=t=>({tr:e,state:n,dispatch:s})=>{const r=We(t,n.schema),i=e.selection.$anchor;for(let o=i.depth;o>0;o-=1)if(i.node(o).type===r){if(s){const a=i.before(o),c=i.after(o);e.delete(a,c).scrollIntoView()}return!0}return!1},ZN=t=>({tr:e,dispatch:n})=>{const{from:s,to:r}=t;return n&&e.delete(s,r),!0},eO=()=>({state:t,dispatch:e})=>Zd(t,e),tO=()=>({commands:t})=>t.keyboardShortcut(\"Enter\"),nO=()=>({state:t,dispatch:e})=>HM(t,e);function mh(t){return Object.prototype.toString.call(t)===\"[object RegExp]\"}function Ma(t,e,n={strict:!0}){const s=Object.keys(e);return s.length?s.every(r=>n.strict?e[r]===t[r]:mh(e[r])?e[r].test(t[r]):e[r]===t[r]):!0}function xS(t,e,n={}){return t.find(s=>s.type===e&&Ma(Object.fromEntries(Object.keys(n).map(r=>[r,s.attrs[r]])),n))}function eg(t,e,n={}){return!!xS(t,e,n)}function gh(t,e,n){var s;if(!t||!e)return;let r=t.parent.childAfter(t.parentOffset);if((!r.node||!r.node.marks.some(u=>u.type===e))&&(r=t.parent.childBefore(t.parentOffset)),!r.node||!r.node.marks.some(u=>u.type===e)||(n=n||((s=r.node.marks[0])==null?void 0:s.attrs),!xS([...r.node.marks],e,n)))return;let o=r.index,l=t.start()+r.offset,a=o+1,c=l+r.node.nodeSize;for(;o>0&&eg([...t.parent.child(o-1).marks],e,n);)o-=1,l-=t.parent.child(o).nodeSize;for(;a<t.parent.childCount&&eg([...t.parent.child(a).marks],e,n);)c+=t.parent.child(a).nodeSize,a+=1;return{from:l,to:c}}function rs(t,e){if(typeof t==\"string\"){if(!e.marks[t])throw Error(`There is no mark type named '${t}'. Maybe you forgot to add the extension?`);return e.marks[t]}return t}var sO=(t,e={})=>({tr:n,state:s,dispatch:r})=>{const i=rs(t,s.schema),{doc:o,selection:l}=n,{$from:a,from:c,to:u}=l;if(r){const f=gh(a,i,e);if(f&&f.from<=c&&f.to>=u){const d=Z.create(o,f.from,f.to);n.setSelection(d)}}return!0},rO=t=>e=>{const n=typeof t==\"function\"?t(e):t;for(let s=0;s<n.length;s+=1)if(n[s](e))return!0;return!1};function yh(t){return t instanceof Z}function Kn(t=0,e=0,n=0){return Math.min(Math.max(t,e),n)}function CS(t,e=null){if(!e)return null;const n=ee.atStart(t),s=ee.atEnd(t);if(e===\"start\"||e===!0)return n;if(e===\"end\")return s;const r=n.from,i=s.to;return e===\"all\"?Z.create(t,Kn(0,r,i),Kn(t.content.size,r,i)):Z.create(t,Kn(e,r,i),Kn(e,r,i))}function tg(){return navigator.platform===\"Android\"||/android/i.test(navigator.userAgent)}function Aa(){return[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"ontouchend\"in document}function iO(){return typeof navigator<\"u\"?/^((?!chrome|android).)*safari/i.test(navigator.userAgent):!1}var oO=(t=null,e={})=>({editor:n,view:s,tr:r,dispatch:i})=>{e={scrollIntoView:!0,...e};const o=()=>{(Aa()||tg())&&s.dom.focus(),iO()&&!Aa()&&!tg()&&s.dom.focus({preventScroll:!0}),requestAnimationFrame(()=>{n.isDestroyed||(s.focus(),e?.scrollIntoView&&n.commands.scrollIntoView())})};try{if(s.hasFocus()&&t===null||t===!1)return!0}catch{return!1}if(i&&t===null&&!yh(n.state.selection))return o(),!0;const l=CS(r.doc,t)||n.state.selection,a=n.state.selection.eq(l);return i&&(a||r.setSelection(l),a&&r.storedMarks&&r.setStoredMarks(r.storedMarks),o()),!0},lO=(t,e)=>n=>t.every((s,r)=>e(s,{...n,index:r})),aO=(t,e)=>({tr:n,commands:s})=>s.insertContentAt({from:n.selection.from,to:n.selection.to},t,e),vS=t=>{const e=t.childNodes;for(let n=e.length-1;n>=0;n-=1){const s=e[n];s.nodeType===3&&s.nodeValue&&/^(\\n\\s\\s|\\n)$/.test(s.nodeValue)?t.removeChild(s):s.nodeType===1&&vS(s)}return t};function gl(t){if(typeof window>\"u\")throw new Error(\"[tiptap error]: there is no window object available, so this function cannot be used\");const e=`<body>${t}</body>`,n=new window.DOMParser().parseFromString(e,\"text/html\").body;return vS(n)}function Ro(t,e,n){if(t instanceof Is||t instanceof D)return t;n={slice:!0,parseOptions:{},...n};const s=typeof t==\"object\"&&t!==null,r=typeof t==\"string\";if(s)try{if(Array.isArray(t)&&t.length>0)return D.fromArray(t.map(l=>e.nodeFromJSON(l)));const o=e.nodeFromJSON(t);return n.errorOnInvalidContent&&o.check(),o}catch(i){if(n.errorOnInvalidContent)throw new Error(\"[tiptap error]: Invalid JSON content\",{cause:i});return console.warn(\"[tiptap warn]: Invalid content.\",\"Passed value:\",t,\"Error:\",i),Ro(\"\",e,n)}if(r){if(n.errorOnInvalidContent){let o=!1,l=\"\";const a=new a1({topNode:e.spec.topNode,marks:e.spec.marks,nodes:e.spec.nodes.append({__tiptap__private__unknown__catch__all__node:{content:\"inline*\",group:\"block\",parseDOM:[{tag:\"*\",getAttrs:c=>(o=!0,l=typeof c==\"string\"?c:c.outerHTML,null)}]}})});if(n.slice?_s.fromSchema(a).parseSlice(gl(t),n.parseOptions):_s.fromSchema(a).parse(gl(t),n.parseOptions),n.errorOnInvalidContent&&o)throw new Error(\"[tiptap error]: Invalid HTML content\",{cause:new Error(`Invalid element found: ${l}`)})}const i=_s.fromSchema(e);return n.slice?i.parseSlice(gl(t),n.parseOptions).content:i.parse(gl(t),n.parseOptions)}return Ro(\"\",e,n)}function cO(t,e,n){const s=t.steps.length-1;if(s<e)return;const r=t.steps[s];if(!(r instanceof qe||r instanceof Ge))return;const i=t.mapping.maps[s];let o=0;i.forEach((l,a,c,u)=>{o===0&&(o=u)}),t.setSelection(ee.near(t.doc.resolve(o),n))}var uO=t=>!(\"type\"in t),fO=(t,e,n)=>({tr:s,dispatch:r,editor:i})=>{var o;if(r){n={parseOptions:i.options.parseOptions,updateSelection:!0,applyInputRules:!1,applyPasteRules:!1,...n};let l;const a=g=>{i.emit(\"contentError\",{editor:i,error:g,disableCollaboration:()=>{\"collaboration\"in i.storage&&typeof i.storage.collaboration==\"object\"&&i.storage.collaboration&&(i.storage.collaboration.isDisabled=!0)}})},c={preserveWhitespace:\"full\",...n.parseOptions};if(!n.errorOnInvalidContent&&!i.options.enableContentCheck&&i.options.emitContentError)try{Ro(e,i.schema,{parseOptions:c,errorOnInvalidContent:!0})}catch(g){a(g)}try{l=Ro(e,i.schema,{parseOptions:c,errorOnInvalidContent:(o=n.errorOnInvalidContent)!=null?o:i.options.enableContentCheck})}catch(g){return a(g),!1}let{from:u,to:f}=typeof t==\"number\"?{from:t,to:t}:{from:t.from,to:t.to},d=!0,h=!0;if((uO(l)?l:[l]).forEach(g=>{g.check(),d=d?g.isText&&g.marks.length===0:!1,h=h?g.isBlock:!1}),u===f&&h){const{parent:g}=s.doc.resolve(u);g.isTextblock&&!g.type.spec.code&&!g.childCount&&(u-=1,f+=1)}let m;if(d){if(Array.isArray(e))m=e.map(g=>g.text||\"\").join(\"\");else if(e instanceof D){let g=\"\";e.forEach(y=>{y.text&&(g+=y.text)}),m=g}else typeof e==\"object\"&&e&&e.text?m=e.text:m=e;s.insertText(m,u,f)}else{m=l;const g=s.doc.resolve(u),y=g.node(),S=g.parentOffset===0,b=y.isText||y.isTextblock,w=y.content.size>0;S&&b&&w&&(u=Math.max(0,u-1)),s.replaceWith(u,f,m)}n.updateSelection&&cO(s,s.steps.length-1,-1),n.applyInputRules&&s.setMeta(\"applyInputRules\",{from:u,text:m}),n.applyPasteRules&&s.setMeta(\"applyPasteRules\",{from:u,text:m})}return!0},dO=()=>({state:t,dispatch:e})=>LM(t,e),hO=()=>({state:t,dispatch:e})=>BM(t,e),pO=()=>({state:t,dispatch:e})=>A1(t,e),mO=()=>({state:t,dispatch:e})=>I1(t,e),gO=()=>({state:t,dispatch:e,tr:n})=>{try{const s=Ic(t.doc,t.selection.$from.pos,-1);return s==null?!1:(n.join(s,2),e&&e(n),!0)}catch{return!1}},yO=()=>({state:t,dispatch:e,tr:n})=>{try{const s=Ic(t.doc,t.selection.$from.pos,1);return s==null?!1:(n.join(s,2),e&&e(n),!0)}catch{return!1}},bO=()=>({state:t,dispatch:e})=>DM(t,e),SO=()=>({state:t,dispatch:e})=>PM(t,e);function kS(){return typeof navigator<\"u\"?/Mac/.test(navigator.platform):!1}function wO(t){const e=t.split(/-(?!$)/);let n=e[e.length-1];n===\"Space\"&&(n=\" \");let s,r,i,o;for(let l=0;l<e.length-1;l+=1){const a=e[l];if(/^(cmd|meta|m)$/i.test(a))o=!0;else if(/^a(lt)?$/i.test(a))s=!0;else if(/^(c|ctrl|control)$/i.test(a))r=!0;else if(/^s(hift)?$/i.test(a))i=!0;else if(/^mod$/i.test(a))Aa()||kS()?o=!0:r=!0;else throw new Error(`Unrecognized modifier name: ${a}`)}return s&&(n=`Alt-${n}`),r&&(n=`Ctrl-${n}`),o&&(n=`Meta-${n}`),i&&(n=`Shift-${n}`),n}var xO=t=>({editor:e,view:n,tr:s,dispatch:r})=>{const i=wO(t).split(/-(?!$)/),o=i.find(c=>![\"Alt\",\"Ctrl\",\"Meta\",\"Shift\"].includes(c)),l=new KeyboardEvent(\"keydown\",{key:o===\"Space\"?\" \":o,altKey:i.includes(\"Alt\"),ctrlKey:i.includes(\"Ctrl\"),metaKey:i.includes(\"Meta\"),shiftKey:i.includes(\"Shift\"),bubbles:!0,cancelable:!0}),a=e.captureTransaction(()=>{n.someProp(\"handleKeyDown\",c=>c(n,l))});return a?.steps.forEach(c=>{const u=c.map(s.mapping);u&&r&&s.maybeStep(u)}),!0};function Fs(t,e,n={}){const{from:s,to:r,empty:i}=t.selection,o=e?We(e,t.schema):null,l=[];t.doc.nodesBetween(s,r,(f,d)=>{if(f.isText)return;const h=Math.max(s,d),p=Math.min(r,d+f.nodeSize);l.push({node:f,from:h,to:p})});const a=r-s,c=l.filter(f=>o?o.name===f.node.type.name:!0).filter(f=>Ma(f.node.attrs,n,{strict:!1}));return i?!!c.length:c.reduce((f,d)=>f+d.to-d.from,0)>=a}var CO=(t,e={})=>({state:n,dispatch:s})=>{const r=We(t,n.schema);return Fs(n,r,e)?$M(n,s):!1},vO=()=>({state:t,dispatch:e})=>L1(t,e),kO=t=>({state:e,dispatch:n})=>{const s=We(t,e.schema);return YM(s)(e,n)},TO=()=>({state:t,dispatch:e})=>D1(t,e);function Fc(t,e){return e.nodes[t]?\"node\":e.marks[t]?\"mark\":null}function ng(t,e){const n=typeof e==\"string\"?[e]:e;return Object.keys(t).reduce((s,r)=>(n.includes(r)||(s[r]=t[r]),s),{})}var EO=(t,e)=>({tr:n,state:s,dispatch:r})=>{let i=null,o=null;const l=Fc(typeof t==\"string\"?t:t.name,s.schema);if(!l)return!1;l===\"node\"&&(i=We(t,s.schema)),l===\"mark\"&&(o=rs(t,s.schema));let a=!1;return n.selection.ranges.forEach(c=>{s.doc.nodesBetween(c.$from.pos,c.$to.pos,(u,f)=>{i&&i===u.type&&(a=!0,r&&n.setNodeMarkup(f,void 0,ng(u.attrs,e))),o&&u.marks.length&&u.marks.forEach(d=>{o===d.type&&(a=!0,r&&n.addMark(f,f+u.nodeSize,o.create(ng(d.attrs,e))))})})}),a},MO=()=>({tr:t,dispatch:e})=>(e&&t.scrollIntoView(),!0),AO=()=>({tr:t,dispatch:e})=>{if(e){const n=new zt(t.doc);t.setSelection(n)}return!0},NO=()=>({state:t,dispatch:e})=>O1(t,e),OO=()=>({state:t,dispatch:e})=>_1(t,e),RO=()=>({state:t,dispatch:e})=>VM(t,e),IO=()=>({state:t,dispatch:e})=>UM(t,e),_O=()=>({state:t,dispatch:e})=>jM(t,e);function Rf(t,e,n={},s={}){return Ro(t,e,{slice:!1,parseOptions:n,errorOnInvalidContent:s.errorOnInvalidContent})}var DO=(t,{errorOnInvalidContent:e,emitUpdate:n=!0,parseOptions:s={}}={})=>({editor:r,tr:i,dispatch:o,commands:l})=>{const{doc:a}=i;if(s.preserveWhitespace!==\"full\"){const c=Rf(t,r.schema,s,{errorOnInvalidContent:e??r.options.enableContentCheck});return o&&i.replaceWith(0,a.content.size,c).setMeta(\"preventUpdate\",!n),!0}return o&&i.setMeta(\"preventUpdate\",!n),l.insertContentAt({from:0,to:a.content.size},t,{parseOptions:s,errorOnInvalidContent:e??r.options.enableContentCheck})};function TS(t,e){const n=rs(e,t.schema),{from:s,to:r,empty:i}=t.selection,o=[];i?(t.storedMarks&&o.push(...t.storedMarks),o.push(...t.selection.$head.marks())):t.doc.nodesBetween(s,r,a=>{o.push(...a.marks)});const l=o.find(a=>a.type.name===n.name);return l?{...l.attrs}:{}}function ES(t,e){const n=new Xd(t);return e.forEach(s=>{s.steps.forEach(r=>{n.step(r)})}),n}function bh(t){for(let e=0;e<t.edgeCount;e+=1){const{type:n}=t.edge(e);if(n.isTextblock&&!n.hasRequiredAttrs())return n}return null}function $l(t,e){const n=[];return t.descendants((s,r)=>{e(s)&&n.push({node:s,pos:r})}),n}function PO(t,e,n){const s=[];return t.nodesBetween(e.from,e.to,(r,i)=>{n(r)&&s.push({node:r,pos:i})}),s}function MS(t,e){for(let n=t.depth;n>0;n-=1){const s=t.node(n);if(e(s))return{pos:n>0?t.before(n):0,start:t.start(n),depth:n,node:s}}}function Or(t){return e=>MS(e.$from,t)}function Y(t,e,n){return t.config[e]===void 0&&t.parent?Y(t.parent,e,n):typeof t.config[e]==\"function\"?t.config[e].bind({...n,parent:t.parent?Y(t.parent,e,n):null}):t.config[e]}function Sh(t){return t.map(e=>{const n={name:e.name,options:e.options,storage:e.storage},s=Y(e,\"addExtensions\",n);return s?[e,...Sh(s())]:e}).flat(10)}function wh(t,e){const n=Nr.fromSchema(e).serializeFragment(t),r=document.implementation.createHTMLDocument().createElement(\"div\");return r.appendChild(n),r.innerHTML}function AS(t){return typeof t==\"function\"}function ge(t,e=void 0,...n){return AS(t)?e?t.bind(e)(...n):t(...n):t}function LO(t={}){return Object.keys(t).length===0&&t.constructor===Object}function gi(t){const e=t.filter(r=>r.type===\"extension\"),n=t.filter(r=>r.type===\"node\"),s=t.filter(r=>r.type===\"mark\");return{baseExtensions:e,nodeExtensions:n,markExtensions:s}}function NS(t){const e=[],{nodeExtensions:n,markExtensions:s}=gi(t),r=[...n,...s],i={default:null,validate:void 0,rendered:!0,renderHTML:null,parseHTML:null,keepOnSplit:!0,isRequired:!1},o=n.filter(c=>c.name!==\"text\").map(c=>c.name),l=s.map(c=>c.name),a=[...o,...l];return t.forEach(c=>{const u={name:c.name,options:c.options,storage:c.storage,extensions:r},f=Y(c,\"addGlobalAttributes\",u);if(!f)return;f().forEach(h=>{let p;Array.isArray(h.types)?p=h.types:h.types===\"*\"?p=a:h.types===\"nodes\"?p=o:h.types===\"marks\"?p=l:p=[],p.forEach(m=>{Object.entries(h.attributes).forEach(([g,y])=>{e.push({type:m,name:g,attribute:{...i,...y}})})})})}),r.forEach(c=>{const u={name:c.name,options:c.options,storage:c.storage},f=Y(c,\"addAttributes\",u);if(!f)return;const d=f();Object.entries(d).forEach(([h,p])=>{const m={...i,...p};typeof m?.default==\"function\"&&(m.default=m.default()),m?.isRequired&&m?.default===void 0&&delete m.default,e.push({type:c.name,name:h,attribute:m})})}),e}function he(...t){return t.filter(e=>!!e).reduce((e,n)=>{const s={...e};return Object.entries(n).forEach(([r,i])=>{if(!s[r]){s[r]=i;return}if(r===\"class\"){const l=i?String(i).split(\" \"):[],a=s[r]?s[r].split(\" \"):[],c=l.filter(u=>!a.includes(u));s[r]=[...a,...c].join(\" \")}else if(r===\"style\"){const l=i?i.split(\";\").map(u=>u.trim()).filter(Boolean):[],a=s[r]?s[r].split(\";\").map(u=>u.trim()).filter(Boolean):[],c=new Map;a.forEach(u=>{const[f,d]=u.split(\":\").map(h=>h.trim());c.set(f,d)}),l.forEach(u=>{const[f,d]=u.split(\":\").map(h=>h.trim());c.set(f,d)}),s[r]=Array.from(c.entries()).map(([u,f])=>`${u}: ${f}`).join(\"; \")}else s[r]=i}),s},{})}function Io(t,e){return e.filter(n=>n.type===t.type.name).filter(n=>n.attribute.rendered).map(n=>n.attribute.renderHTML?n.attribute.renderHTML(t.attrs)||{}:{[n.name]:t.attrs[n.name]}).reduce((n,s)=>he(n,s),{})}function BO(t){return typeof t!=\"string\"?t:t.match(/^[+-]?(?:\\d*\\.)?\\d+$/)?Number(t):t===\"true\"?!0:t===\"false\"?!1:t}function sg(t,e){return\"style\"in t?t:{...t,getAttrs:n=>{const s=t.getAttrs?t.getAttrs(n):t.attrs;if(s===!1)return!1;const r=e.reduce((i,o)=>{const l=o.attribute.parseHTML?o.attribute.parseHTML(n):BO(n.getAttribute(o.name));return l==null?i:{...i,[o.name]:l}},{});return{...s,...r}}}}function rg(t){return Object.fromEntries(Object.entries(t).filter(([e,n])=>e===\"attrs\"&&LO(n)?!1:n!=null))}function ig(t){var e,n;const s={};return!((e=t?.attribute)!=null&&e.isRequired)&&\"default\"in(t?.attribute||{})&&(s.default=t.attribute.default),((n=t?.attribute)==null?void 0:n.validate)!==void 0&&(s.validate=t.attribute.validate),[t.name,s]}function $O(t,e){var n;const s=NS(t),{nodeExtensions:r,markExtensions:i}=gi(t),o=(n=r.find(c=>Y(c,\"topNode\")))==null?void 0:n.name,l=Object.fromEntries(r.map(c=>{const u=s.filter(y=>y.type===c.name),f={name:c.name,options:c.options,storage:c.storage,editor:e},d=t.reduce((y,S)=>{const b=Y(S,\"extendNodeSchema\",f);return{...y,...b?b(c):{}}},{}),h=rg({...d,content:ge(Y(c,\"content\",f)),marks:ge(Y(c,\"marks\",f)),group:ge(Y(c,\"group\",f)),inline:ge(Y(c,\"inline\",f)),atom:ge(Y(c,\"atom\",f)),selectable:ge(Y(c,\"selectable\",f)),draggable:ge(Y(c,\"draggable\",f)),code:ge(Y(c,\"code\",f)),whitespace:ge(Y(c,\"whitespace\",f)),linebreakReplacement:ge(Y(c,\"linebreakReplacement\",f)),defining:ge(Y(c,\"defining\",f)),isolating:ge(Y(c,\"isolating\",f)),attrs:Object.fromEntries(u.map(ig))}),p=ge(Y(c,\"parseHTML\",f));p&&(h.parseDOM=p.map(y=>sg(y,u)));const m=Y(c,\"renderHTML\",f);m&&(h.toDOM=y=>m({node:y,HTMLAttributes:Io(y,u)}));const g=Y(c,\"renderText\",f);return g&&(h.toText=g),[c.name,h]})),a=Object.fromEntries(i.map(c=>{const u=s.filter(g=>g.type===c.name),f={name:c.name,options:c.options,storage:c.storage,editor:e},d=t.reduce((g,y)=>{const S=Y(y,\"extendMarkSchema\",f);return{...g,...S?S(c):{}}},{}),h=rg({...d,inclusive:ge(Y(c,\"inclusive\",f)),excludes:ge(Y(c,\"excludes\",f)),group:ge(Y(c,\"group\",f)),spanning:ge(Y(c,\"spanning\",f)),code:ge(Y(c,\"code\",f)),attrs:Object.fromEntries(u.map(ig))}),p=ge(Y(c,\"parseHTML\",f));p&&(h.parseDOM=p.map(g=>sg(g,u)));const m=Y(c,\"renderHTML\",f);return m&&(h.toDOM=g=>m({mark:g,HTMLAttributes:Io(g,u)})),[c.name,h]}));return new a1({topNode:o,nodes:l,marks:a})}function HO(t){const e=t.filter((n,s)=>t.indexOf(n)!==s);return Array.from(new Set(e))}function eo(t){return t.sort((n,s)=>{const r=Y(n,\"priority\")||100,i=Y(s,\"priority\")||100;return r>i?-1:r<i?1:0})}function OS(t){const e=eo(Sh(t)),n=HO(e.map(s=>s.name));return n.length&&console.warn(`[tiptap warn]: Duplicate extension names found: [${n.map(s=>`'${s}'`).join(\", \")}]. This can lead to issues.`),e}function RS(t,e,n){const{from:s,to:r}=e,{blockSeparator:i=`\n\n`,textSerializers:o={}}=n||{};let l=\"\";return t.nodesBetween(s,r,(a,c,u,f)=>{var d;a.isBlock&&c>s&&(l+=i);const h=o?.[a.type.name];if(h)return u&&(l+=h({node:a,pos:c,parent:u,index:f,range:e})),!1;a.isText&&(l+=(d=a?.text)==null?void 0:d.slice(Math.max(s,c)-c,r-c))}),l}function FO(t,e){const n={from:0,to:t.content.size};return RS(t,n,e)}function IS(t){return Object.fromEntries(Object.entries(t.nodes).filter(([,e])=>e.spec.toText).map(([e,n])=>[e,n.spec.toText]))}function zO(t,e){const n=We(e,t.schema),{from:s,to:r}=t.selection,i=[];t.doc.nodesBetween(s,r,l=>{i.push(l)});const o=i.reverse().find(l=>l.type.name===n.name);return o?{...o.attrs}:{}}function _S(t,e){const n=Fc(typeof e==\"string\"?e:e.name,t.schema);return n===\"node\"?zO(t,e):n===\"mark\"?TS(t,e):{}}function VO(t,e=JSON.stringify){const n={};return t.filter(s=>{const r=e(s);return Object.prototype.hasOwnProperty.call(n,r)?!1:n[r]=!0})}function WO(t){const e=VO(t);return e.length===1?e:e.filter((n,s)=>!e.filter((i,o)=>o!==s).some(i=>n.oldRange.from>=i.oldRange.from&&n.oldRange.to<=i.oldRange.to&&n.newRange.from>=i.newRange.from&&n.newRange.to<=i.newRange.to))}function DS(t){const{mapping:e,steps:n}=t,s=[];return e.maps.forEach((r,i)=>{const o=[];if(r.ranges.length)r.forEach((l,a)=>{o.push({from:l,to:a})});else{const{from:l,to:a}=n[i];if(l===void 0||a===void 0)return;o.push({from:l,to:a})}o.forEach(({from:l,to:a})=>{const c=e.slice(i).map(l,-1),u=e.slice(i).map(a),f=e.invert().map(c,-1),d=e.invert().map(u);s.push({oldRange:{from:f,to:d},newRange:{from:c,to:u}})})}),WO(s)}function xh(t,e,n){const s=[];return t===e?n.resolve(t).marks().forEach(r=>{const i=n.resolve(t),o=gh(i,r.type);o&&s.push({mark:r,...o})}):n.nodesBetween(t,e,(r,i)=>{!r||r?.nodeSize===void 0||s.push(...r.marks.map(o=>({from:i,to:i+r.nodeSize,mark:o})))}),s}var jO=(t,e,n,s=20)=>{const r=t.doc.resolve(n);let i=s,o=null;for(;i>0&&o===null;){const l=r.node(i);l?.type.name===e?o=l:i-=1}return[o,i]};function _i(t,e){return e.nodes[t]||e.marks[t]||null}function Hl(t,e,n){return Object.fromEntries(Object.entries(n).filter(([s])=>{const r=t.find(i=>i.type===e&&i.name===s);return r?r.attribute.keepOnSplit:!1}))}var UO=(t,e=500)=>{let n=\"\";const s=t.parentOffset;return t.parent.nodesBetween(Math.max(0,s-e),s,(r,i,o,l)=>{var a,c;const u=((c=(a=r.type.spec).toText)==null?void 0:c.call(a,{node:r,pos:i,parent:o,index:l}))||r.textContent||\"%leaf%\";n+=r.isAtom&&!r.isText?u:u.slice(0,Math.max(0,s-i))}),n};function If(t,e,n={}){const{empty:s,ranges:r}=t.selection,i=e?rs(e,t.schema):null;if(s)return!!(t.storedMarks||t.selection.$from.marks()).filter(f=>i?i.name===f.type.name:!0).find(f=>Ma(f.attrs,n,{strict:!1}));let o=0;const l=[];if(r.forEach(({$from:f,$to:d})=>{const h=f.pos,p=d.pos;t.doc.nodesBetween(h,p,(m,g)=>{if(i&&m.inlineContent&&!m.type.allowsMarkType(i))return!1;if(!m.isText&&!m.marks.length)return;const y=Math.max(h,g),S=Math.min(p,g+m.nodeSize),b=S-y;o+=b,l.push(...m.marks.map(w=>({mark:w,from:y,to:S})))})}),o===0)return!1;const a=l.filter(f=>i?i.name===f.mark.type.name:!0).filter(f=>Ma(f.mark.attrs,n,{strict:!1})).reduce((f,d)=>f+d.to-d.from,0),c=l.filter(f=>i?f.mark.type!==i&&f.mark.type.excludes(i):!0).reduce((f,d)=>f+d.to-d.from,0);return(a>0?a+c:a)>=o}function PS(t,e,n={}){if(!e)return Fs(t,null,n)||If(t,null,n);const s=Fc(e,t.schema);return s===\"node\"?Fs(t,e,n):s===\"mark\"?If(t,e,n):!1}var KO=(t,e)=>{const{$from:n,$to:s,$anchor:r}=t.selection;if(e){const i=Or(l=>l.type.name===e)(t.selection);if(!i)return!1;const o=t.doc.resolve(i.pos+1);return r.pos+1===o.end()}return!(s.parentOffset<s.parent.nodeSize-2||n.pos!==s.pos)},qO=t=>{const{$from:e,$to:n}=t.selection;return!(e.parentOffset>0||e.pos!==n.pos)};function og(t,e){return Array.isArray(e)?e.some(n=>(typeof n==\"string\"?n:n.name)===t.name):e}function lg(t,e){const{nodeExtensions:n}=gi(e),s=n.find(o=>o.name===t);if(!s)return!1;const r={name:s.name,options:s.options,storage:s.storage},i=ge(Y(s,\"group\",r));return typeof i!=\"string\"?!1:i.split(\" \").includes(\"list\")}function zc(t,{checkChildren:e=!0,ignoreWhitespace:n=!1}={}){var s;if(n){if(t.type.name===\"hardBreak\")return!0;if(t.isText)return/^\\s*$/m.test((s=t.text)!=null?s:\"\")}if(t.isText)return!t.text;if(t.isAtom||t.isLeaf)return!1;if(t.content.childCount===0)return!0;if(e){let r=!0;return t.content.forEach(i=>{r!==!1&&(zc(i,{ignoreWhitespace:n,checkChildren:e})||(r=!1))}),r}return!1}function LS(t){return t instanceof Q}var BS=class $S{constructor(e){this.position=e}static fromJSON(e){return new $S(e.position)}toJSON(){return{position:this.position}}};function JO(t,e){const n=e.mapping.mapResult(t.position);return{position:new BS(n.pos),mapResult:n}}function GO(t){return new BS(t)}function YO(t,e,n){const r=t.state.doc.content.size,i=Kn(e,0,r),o=Kn(n,0,r),l=t.coordsAtPos(i),a=t.coordsAtPos(o,-1),c=Math.min(l.top,a.top),u=Math.max(l.bottom,a.bottom),f=Math.min(l.left,a.left),d=Math.max(l.right,a.right),h=d-f,p=u-c,y={top:c,bottom:u,left:f,right:d,width:h,height:p,x:f,y:c};return{...y,toJSON:()=>y}}function XO(t,e,n){var s;const{selection:r}=e;let i=null;if(yh(r)&&(i=r.$cursor),i){const l=(s=t.storedMarks)!=null?s:i.marks();return i.parent.type.allowsMarkType(n)&&(!!n.isInSet(l)||!l.some(c=>c.type.excludes(n)))}const{ranges:o}=r;return o.some(({$from:l,$to:a})=>{let c=l.depth===0?t.doc.inlineContent&&t.doc.type.allowsMarkType(n):!1;return t.doc.nodesBetween(l.pos,a.pos,(u,f,d)=>{if(c)return!1;if(u.isInline){const h=!d||d.type.allowsMarkType(n),p=!!n.isInSet(u.marks)||!u.marks.some(m=>m.type.excludes(n));c=h&&p}return!c}),c})}var QO=(t,e={})=>({tr:n,state:s,dispatch:r})=>{const{selection:i}=n,{empty:o,ranges:l}=i,a=rs(t,s.schema);if(r)if(o){const c=TS(s,a);n.addStoredMark(a.create({...c,...e}))}else l.forEach(c=>{const u=c.$from.pos,f=c.$to.pos;s.doc.nodesBetween(u,f,(d,h)=>{const p=Math.max(h,u),m=Math.min(h+d.nodeSize,f);d.marks.find(y=>y.type===a)?d.marks.forEach(y=>{a===y.type&&n.addMark(p,m,a.create({...y.attrs,...e}))}):n.addMark(p,m,a.create(e))})});return XO(s,n,a)},ZO=(t,e)=>({tr:n})=>(n.setMeta(t,e),!0),eR=(t,e={})=>({state:n,dispatch:s,chain:r})=>{const i=We(t,n.schema);let o;return n.selection.$anchor.sameParent(n.selection.$head)&&(o=n.selection.$anchor.parent.attrs),i.isTextblock?r().command(({commands:l})=>wm(i,{...o,...e})(n)?!0:l.clearNodes()).command(({state:l})=>wm(i,{...o,...e})(l,s)).run():(console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.'),!1)},tR=t=>({tr:e,dispatch:n})=>{if(n){const{doc:s}=e,r=Kn(t,0,s.content.size),i=Q.create(s,r);e.setSelection(i)}return!0},nR=(t,e)=>({tr:n,state:s,dispatch:r})=>{const{selection:i}=s;let o,l;return typeof e==\"number\"?(o=e,l=e):e&&\"from\"in e&&\"to\"in e?(o=e.from,l=e.to):(o=i.from,l=i.to),r&&n.doc.nodesBetween(o,l,(a,c)=>{a.isText||n.setNodeMarkup(c,void 0,{...a.attrs,dir:t})}),!0},sR=t=>({tr:e,dispatch:n})=>{if(n){const{doc:s}=e,{from:r,to:i}=typeof t==\"number\"?{from:t,to:t}:t,o=Z.atStart(s).from,l=Z.atEnd(s).to,a=Kn(r,o,l),c=Kn(i,o,l),u=Z.create(s,a,c);e.setSelection(u)}return!0},rR=t=>({state:e,dispatch:n})=>{const s=We(t,e.schema);return ZM(s)(e,n)};function ag(t,e){const n=t.storedMarks||t.selection.$to.parentOffset&&t.selection.$from.marks();if(n){const s=n.filter(r=>e?.includes(r.type.name));t.tr.ensureMarks(s)}}var iR=({keepMarks:t=!0}={})=>({tr:e,state:n,dispatch:s,editor:r})=>{const{selection:i,doc:o}=e,{$from:l,$to:a}=i,c=r.extensionManager.attributes,u=Hl(c,l.node().type.name,l.node().attrs);if(i instanceof Q&&i.node.isBlock)return!l.parentOffset||!Xn(o,l.pos)?!1:(s&&(t&&ag(n,r.extensionManager.splittableMarks),e.split(l.pos).scrollIntoView()),!0);if(!l.parent.isBlock)return!1;const f=a.parentOffset===a.parent.content.size,d=l.depth===0?void 0:bh(l.node(-1).contentMatchAt(l.indexAfter(-1)));let h=f&&d?[{type:d,attrs:u}]:void 0,p=Xn(e.doc,e.mapping.map(l.pos),1,h);if(!h&&!p&&Xn(e.doc,e.mapping.map(l.pos),1,d?[{type:d}]:void 0)&&(p=!0,h=d?[{type:d,attrs:u}]:void 0),s){if(p&&(i instanceof Z&&e.deleteSelection(),e.split(e.mapping.map(l.pos),1,h),d&&!f&&!l.parentOffset&&l.parent.type!==d)){const m=e.mapping.map(l.before()),g=e.doc.resolve(m);l.node(-1).canReplaceWith(g.index(),g.index()+1,d)&&e.setNodeMarkup(e.mapping.map(l.before()),d)}t&&ag(n,r.extensionManager.splittableMarks),e.scrollIntoView()}return p},oR=(t,e={})=>({tr:n,state:s,dispatch:r,editor:i})=>{var o;const l=We(t,s.schema),{$from:a,$to:c}=s.selection,u=s.selection.node;if(u&&u.isBlock||a.depth<2||!a.sameParent(c))return!1;const f=a.node(-1);if(f.type!==l)return!1;const d=i.extensionManager.attributes;if(a.parent.content.size===0&&a.node(-1).childCount===a.indexAfter(-1)){if(a.depth===2||a.node(-3).type!==l||a.index(-2)!==a.node(-2).childCount-1)return!1;if(r){let y=D.empty;const S=a.index(-1)?1:a.index(-2)?2:3;for(let A=a.depth-S;A>=a.depth-3;A-=1)y=D.from(a.node(A).copy(y));const b=a.indexAfter(-1)<a.node(-2).childCount?1:a.indexAfter(-2)<a.node(-3).childCount?2:3,w={...Hl(d,a.node().type.name,a.node().attrs),...e},x=((o=l.contentMatch.defaultType)==null?void 0:o.createAndFill(w))||void 0;y=y.append(D.from(l.createAndFill(null,x)||void 0));const E=a.before(a.depth-(S-1));n.replace(E,a.after(-b),new K(y,4-S,0));let k=-1;n.doc.nodesBetween(E,n.doc.content.size,(A,v)=>{if(k>-1)return!1;A.isTextblock&&A.content.size===0&&(k=v+1)}),k>-1&&n.setSelection(Z.near(n.doc.resolve(k))),n.scrollIntoView()}return!0}const h=c.pos===a.end()?f.contentMatchAt(0).defaultType:null,p={...Hl(d,f.type.name,f.attrs),...e},m={...Hl(d,a.node().type.name,a.node().attrs),...e};n.delete(a.pos,c.pos);const g=h?[{type:l,attrs:p},{type:h,attrs:m}]:[{type:l,attrs:p}];if(!Xn(n.doc,a.pos,2))return!1;if(r){const{selection:y,storedMarks:S}=s,{splittableMarks:b}=i.extensionManager,w=S||y.$to.parentOffset&&y.$from.marks();if(n.split(a.pos,2,g).scrollIntoView(),!w||!r)return!0;const x=w.filter(E=>b.includes(E.type.name));n.ensureMarks(x)}return!0},Au=(t,e)=>{const n=Or(o=>o.type===e)(t.selection);if(!n)return!0;const s=t.doc.resolve(Math.max(0,n.pos-1)).before(n.depth);if(s===void 0)return!0;const r=t.doc.nodeAt(s);return n.node.type===r?.type&&Ws(t.doc,n.pos)&&t.join(n.pos),!0},Nu=(t,e)=>{const n=Or(o=>o.type===e)(t.selection);if(!n)return!0;const s=t.doc.resolve(n.start).after(n.depth);if(s===void 0)return!0;const r=t.doc.nodeAt(s);return n.node.type===r?.type&&Ws(t.doc,s)&&t.join(s),!0},lR=(t,e,n,s={})=>({editor:r,tr:i,state:o,dispatch:l,chain:a,commands:c,can:u})=>{const{extensions:f,splittableMarks:d}=r.extensionManager,h=We(t,o.schema),p=We(e,o.schema),{selection:m,storedMarks:g}=o,{$from:y,$to:S}=m,b=y.blockRange(S),w=g||m.$to.parentOffset&&m.$from.marks();if(!b)return!1;const x=Or(E=>lg(E.type.name,f))(m);if(b.depth>=1&&x&&b.depth-x.depth<=1){if(x.node.type===h)return c.liftListItem(p);if(lg(x.node.type.name,f)&&h.validContent(x.node.content)&&l)return a().command(()=>(i.setNodeMarkup(x.pos,h),!0)).command(()=>Au(i,h)).command(()=>Nu(i,h)).run()}return!n||!w||!l?a().command(()=>u().wrapInList(h,s)?!0:c.clearNodes()).wrapInList(h,s).command(()=>Au(i,h)).command(()=>Nu(i,h)).run():a().command(()=>{const E=u().wrapInList(h,s),k=w.filter(A=>d.includes(A.type.name));return i.ensureMarks(k),E?!0:c.clearNodes()}).wrapInList(h,s).command(()=>Au(i,h)).command(()=>Nu(i,h)).run()},aR=(t,e={},n={})=>({state:s,commands:r})=>{const{extendEmptyMarkRange:i=!1}=n,o=rs(t,s.schema);return If(s,o,e)?r.unsetMark(o,{extendEmptyMarkRange:i}):r.setMark(o,e)},cR=(t,e,n={})=>({state:s,commands:r})=>{const i=We(t,s.schema),o=We(e,s.schema),l=Fs(s,i,n);let a;return s.selection.$anchor.sameParent(s.selection.$head)&&(a=s.selection.$anchor.parent.attrs),l?r.setNode(o,a):r.setNode(i,{...a,...n})},uR=(t,e={})=>({state:n,commands:s})=>{const r=We(t,n.schema);return Fs(n,r,e)?s.lift(r):s.wrapIn(r,e)},fR=()=>({state:t,dispatch:e})=>{const n=t.plugins;for(let s=0;s<n.length;s+=1){const r=n[s];let i;if(r.spec.isInputRules&&(i=r.getState(t))){if(e){const o=t.tr,l=i.transform;for(let a=l.steps.length-1;a>=0;a-=1)o.step(l.steps[a].invert(l.docs[a]));if(i.text){const a=o.doc.resolve(i.from).marks();o.replaceWith(i.from,i.to,t.schema.text(i.text,a))}else o.delete(i.from,i.to)}return!0}}return!1},dR=()=>({tr:t,dispatch:e})=>{const{selection:n}=t,{empty:s,ranges:r}=n;return s||e&&r.forEach(i=>{t.removeMark(i.$from.pos,i.$to.pos)}),!0},hR=(t,e={})=>({tr:n,state:s,dispatch:r})=>{var i;const{extendEmptyMarkRange:o=!1}=e,{selection:l}=n,a=rs(t,s.schema),{$from:c,empty:u,ranges:f}=l;if(!r)return!0;if(u&&o){let{from:d,to:h}=l;const p=(i=c.marks().find(g=>g.type===a))==null?void 0:i.attrs,m=gh(c,a,p);m&&(d=m.from,h=m.to),n.removeMark(d,h,a)}else f.forEach(d=>{n.removeMark(d.$from.pos,d.$to.pos,a)});return n.removeStoredMark(a),!0},pR=t=>({tr:e,state:n,dispatch:s})=>{const{selection:r}=n;let i,o;return typeof t==\"number\"?(i=t,o=t):t&&\"from\"in t&&\"to\"in t?(i=t.from,o=t.to):(i=r.from,o=r.to),s&&e.doc.nodesBetween(i,o,(l,a)=>{if(l.isText)return;const c={...l.attrs};delete c.dir,e.setNodeMarkup(a,void 0,c)}),!0},mR=(t,e={})=>({tr:n,state:s,dispatch:r})=>{let i=null,o=null;const l=Fc(typeof t==\"string\"?t:t.name,s.schema);if(!l)return!1;l===\"node\"&&(i=We(t,s.schema)),l===\"mark\"&&(o=rs(t,s.schema));let a=!1;return n.selection.ranges.forEach(c=>{const u=c.$from.pos,f=c.$to.pos;let d,h,p,m;n.selection.empty?s.doc.nodesBetween(u,f,(g,y)=>{i&&i===g.type&&(a=!0,p=Math.max(y,u),m=Math.min(y+g.nodeSize,f),d=y,h=g)}):s.doc.nodesBetween(u,f,(g,y)=>{y<u&&i&&i===g.type&&(a=!0,p=Math.max(y,u),m=Math.min(y+g.nodeSize,f),d=y,h=g),y>=u&&y<=f&&(i&&i===g.type&&(a=!0,r&&n.setNodeMarkup(y,void 0,{...g.attrs,...e})),o&&g.marks.length&&g.marks.forEach(S=>{if(o===S.type&&(a=!0,r)){const b=Math.max(y,u),w=Math.min(y+g.nodeSize,f);n.addMark(b,w,o.create({...S.attrs,...e}))}}))}),h&&(d!==void 0&&r&&n.setNodeMarkup(d,void 0,{...h.attrs,...e}),o&&h.marks.length&&h.marks.forEach(g=>{o===g.type&&r&&n.addMark(p,m,o.create({...g.attrs,...e}))}))}),a},gR=(t,e={})=>({state:n,dispatch:s})=>{const r=We(t,n.schema);return KM(r,e)(n,s)},yR=(t,e={})=>({state:n,dispatch:s})=>{const r=We(t,n.schema);return qM(r,e)(n,s)},bR=class{constructor(){this.callbacks={}}on(t,e){return this.callbacks[t]||(this.callbacks[t]=[]),this.callbacks[t].push(e),this}emit(t,...e){const n=this.callbacks[t];return n&&n.forEach(s=>s.apply(this,e)),this}off(t,e){const n=this.callbacks[t];return n&&(e?this.callbacks[t]=n.filter(s=>s!==e):delete this.callbacks[t]),this}once(t,e){const n=(...s)=>{this.off(t,n),e.apply(this,s)};return this.on(t,n)}removeAllListeners(){this.callbacks={}}},Vc=class{constructor(t){var e;this.find=t.find,this.handler=t.handler,this.undoable=(e=t.undoable)!=null?e:!0}},SR=(t,e)=>{if(mh(e))return e.exec(t);const n=e(t);if(!n)return null;const s=[n.text];return s.index=n.index,s.input=t,s.data=n.data,n.replaceWith&&(n.text.includes(n.replaceWith)||console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".'),s.push(n.replaceWith)),s};function yl(t){var e;const{editor:n,from:s,to:r,text:i,rules:o,plugin:l}=t,{view:a}=n;if(a.composing)return!1;const c=a.state.doc.resolve(s);if(c.parent.type.spec.code||(e=c.nodeBefore||c.nodeAfter)!=null&&e.marks.find(d=>d.type.spec.code))return!1;let u=!1;const f=UO(c)+i;return o.forEach(d=>{if(u)return;const h=SR(f,d.find);if(!h)return;const p=a.state.tr,m=$c({state:a.state,transaction:p}),g={from:s-(h[0].length-i.length),to:r},{commands:y,chain:S,can:b}=new Hc({editor:n,state:m});d.handler({state:m,range:g,match:h,commands:y,chain:S,can:b})===null||!p.steps.length||(d.undoable&&p.setMeta(l,{transform:p,from:s,to:r,text:i}),a.dispatch(p),u=!0)}),u}function wR(t){const{editor:e,rules:n}=t,s=new we({state:{init(){return null},apply(r,i,o){const l=r.getMeta(s);if(l)return l;const a=r.getMeta(\"applyInputRules\");return a&&setTimeout(()=>{let{text:u}=a;typeof u==\"string\"?u=u:u=wh(D.from(u),o.schema);const{from:f}=a,d=f+u.length;yl({editor:e,from:f,to:d,text:u,rules:n,plugin:s})}),r.selectionSet||r.docChanged?null:i}},props:{handleTextInput(r,i,o,l){return yl({editor:e,from:i,to:o,text:l,rules:n,plugin:s})},handleDOMEvents:{compositionend:r=>(setTimeout(()=>{const{$cursor:i}=r.state.selection;i&&yl({editor:e,from:i.pos,to:i.pos,text:\"\",rules:n,plugin:s})}),!1)},handleKeyDown(r,i){if(i.key!==\"Enter\")return!1;const{$cursor:o}=r.state.selection;return o?yl({editor:e,from:o.pos,to:o.pos,text:`\n`,rules:n,plugin:s}):!1}},isInputRules:!0});return s}function xR(t){return Object.prototype.toString.call(t).slice(8,-1)}function bl(t){return xR(t)!==\"Object\"?!1:t.constructor===Object&&Object.getPrototypeOf(t)===Object.prototype}function HS(t,e){const n={...t};return bl(t)&&bl(e)&&Object.keys(e).forEach(s=>{bl(e[s])&&bl(t[s])?n[s]=HS(t[s],e[s]):n[s]=e[s]}),n}var Ch=class{constructor(t={}){this.type=\"extendable\",this.parent=null,this.child=null,this.name=\"\",this.config={name:this.name},this.config={...this.config,...t},this.name=this.config.name}get options(){return{...ge(Y(this,\"addOptions\",{name:this.name}))||{}}}get storage(){return{...ge(Y(this,\"addStorage\",{name:this.name,options:this.options}))||{}}}configure(t={}){const e=this.extend({...this.config,addOptions:()=>HS(this.options,t)});return e.name=this.name,e.parent=this.parent,e}extend(t={}){const e=new this.constructor({...this.config,...t});return e.parent=this,this.child=e,e.name=\"name\"in t?t.name:e.parent.name,e}},is=class FS extends Ch{constructor(){super(...arguments),this.type=\"mark\"}static create(e={}){const n=typeof e==\"function\"?e():e;return new FS(n)}static handleExit({editor:e,mark:n}){const{tr:s}=e.state,r=e.state.selection.$from;if(r.pos===r.end()){const o=r.marks();if(!!!o.find(c=>c?.type.name===n.name))return!1;const a=o.find(c=>c?.type.name===n.name);return a&&s.removeStoredMark(a),s.insertText(\" \",r.pos),e.view.dispatch(s),!0}return!1}configure(e){return super.configure(e)}extend(e){const n=typeof e==\"function\"?e():e;return super.extend(n)}};function CR(t){return typeof t==\"number\"}var vR=class{constructor(t){this.find=t.find,this.handler=t.handler}},kR=(t,e,n)=>{if(mh(e))return[...t.matchAll(e)];const s=e(t,n);return s?s.map(r=>{const i=[r.text];return i.index=r.index,i.input=t,i.data=r.data,r.replaceWith&&(r.text.includes(r.replaceWith)||console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".'),i.push(r.replaceWith)),i}):[]};function TR(t){const{editor:e,state:n,from:s,to:r,rule:i,pasteEvent:o,dropEvent:l}=t,{commands:a,chain:c,can:u}=new Hc({editor:e,state:n}),f=[];return n.doc.nodesBetween(s,r,(h,p)=>{var m,g,y,S,b;if((g=(m=h.type)==null?void 0:m.spec)!=null&&g.code||!(h.isText||h.isTextblock||h.isInline))return;const w=(b=(S=(y=h.content)==null?void 0:y.size)!=null?S:h.nodeSize)!=null?b:0,x=Math.max(s,p),E=Math.min(r,p+w);if(x>=E)return;const k=h.isText?h.text||\"\":h.textBetween(x-p,E-p,void 0,\"￼\");kR(k,i.find,o).forEach(v=>{if(v.index===void 0)return;const T=x+v.index+1,O=T+v[0].length,N={from:n.tr.mapping.map(T),to:n.tr.mapping.map(O)},_=i.handler({state:n,range:N,match:v,commands:a,chain:c,can:u,pasteEvent:o,dropEvent:l});f.push(_)})}),f.every(h=>h!==null)}var Sl=null,ER=t=>{var e;const n=new ClipboardEvent(\"paste\",{clipboardData:new DataTransfer});return(e=n.clipboardData)==null||e.setData(\"text/html\",t),n};function MR(t){const{editor:e,rules:n}=t;let s=null,r=!1,i=!1,o=typeof ClipboardEvent<\"u\"?new ClipboardEvent(\"paste\"):null,l;try{l=typeof DragEvent<\"u\"?new DragEvent(\"drop\"):null}catch{l=null}const a=({state:u,from:f,to:d,rule:h,pasteEvt:p})=>{const m=u.tr,g=$c({state:u,transaction:m});if(!(!TR({editor:e,state:g,from:Math.max(f-1,0),to:d.b-1,rule:h,pasteEvent:p,dropEvent:l})||!m.steps.length)){try{l=typeof DragEvent<\"u\"?new DragEvent(\"drop\"):null}catch{l=null}return o=typeof ClipboardEvent<\"u\"?new ClipboardEvent(\"paste\"):null,m}};return n.map(u=>new we({view(f){const d=p=>{var m;s=(m=f.dom.parentElement)!=null&&m.contains(p.target)?f.dom.parentElement:null,s&&(Sl=e)},h=()=>{Sl&&(Sl=null)};return window.addEventListener(\"dragstart\",d),window.addEventListener(\"dragend\",h),{destroy(){window.removeEventListener(\"dragstart\",d),window.removeEventListener(\"dragend\",h)}}},props:{handleDOMEvents:{drop:(f,d)=>{if(i=s===f.dom.parentElement,l=d,!i){const h=Sl;h?.isEditable&&setTimeout(()=>{const p=h.state.selection;p&&h.commands.deleteRange({from:p.from,to:p.to})},10)}return!1},paste:(f,d)=>{var h;const p=(h=d.clipboardData)==null?void 0:h.getData(\"text/html\");return o=d,r=!!p?.includes(\"data-pm-slice\"),!1}}},appendTransaction:(f,d,h)=>{const p=f[0],m=p.getMeta(\"uiEvent\")===\"paste\"&&!r,g=p.getMeta(\"uiEvent\")===\"drop\"&&!i,y=p.getMeta(\"applyPasteRules\"),S=!!y;if(!m&&!g&&!S)return;if(S){let{text:x}=y;typeof x==\"string\"?x=x:x=wh(D.from(x),h.schema);const{from:E}=y,k=E+x.length,A=ER(x);return a({rule:u,state:h,from:E,to:{b:k},pasteEvt:A})}const b=d.doc.content.findDiffStart(h.doc.content),w=d.doc.content.findDiffEnd(h.doc.content);if(!(!CR(b)||!w||b===w.b))return a({rule:u,state:h,from:b,to:w,pasteEvt:o})}}))}var Wc=class{constructor(t,e){this.splittableMarks=[],this.editor=e,this.baseExtensions=t,this.extensions=OS(t),this.schema=$O(this.extensions,e),this.setupExtensions()}get commands(){return this.extensions.reduce((t,e)=>{const n={name:e.name,options:e.options,storage:this.editor.extensionStorage[e.name],editor:this.editor,type:_i(e.name,this.schema)},s=Y(e,\"addCommands\",n);return s?{...t,...s()}:t},{})}get plugins(){const{editor:t}=this;return eo([...this.extensions].reverse()).flatMap(s=>{const r={name:s.name,options:s.options,storage:this.editor.extensionStorage[s.name],editor:t,type:_i(s.name,this.schema)},i=[],o=Y(s,\"addKeyboardShortcuts\",r);let l={};if(s.type===\"mark\"&&Y(s,\"exitable\",r)&&(l.ArrowRight=()=>is.handleExit({editor:t,mark:s})),o){const d=Object.fromEntries(Object.entries(o()).map(([h,p])=>[h,()=>p({editor:t})]));l={...l,...d}}const a=WN(l);i.push(a);const c=Y(s,\"addInputRules\",r);if(og(s,t.options.enableInputRules)&&c){const d=c();if(d&&d.length){const h=wR({editor:t,rules:d}),p=Array.isArray(h)?h:[h];i.push(...p)}}const u=Y(s,\"addPasteRules\",r);if(og(s,t.options.enablePasteRules)&&u){const d=u();if(d&&d.length){const h=MR({editor:t,rules:d});i.push(...h)}}const f=Y(s,\"addProseMirrorPlugins\",r);if(f){const d=f();i.push(...d)}return i})}get attributes(){return NS(this.extensions)}get nodeViews(){const{editor:t}=this,{nodeExtensions:e}=gi(this.extensions);return Object.fromEntries(e.filter(n=>!!Y(n,\"addNodeView\")).map(n=>{const s=this.attributes.filter(a=>a.type===n.name),r={name:n.name,options:n.options,storage:this.editor.extensionStorage[n.name],editor:t,type:We(n.name,this.schema)},i=Y(n,\"addNodeView\",r);if(!i)return[];const o=i();if(!o)return[];const l=(a,c,u,f,d)=>{const h=Io(a,s);return o({node:a,view:c,getPos:u,decorations:f,innerDecorations:d,editor:t,extension:n,HTMLAttributes:h})};return[n.name,l]}))}dispatchTransaction(t){const{editor:e}=this;return eo([...this.extensions].reverse()).reduceRight((s,r)=>{const i={name:r.name,options:r.options,storage:this.editor.extensionStorage[r.name],editor:e,type:_i(r.name,this.schema)},o=Y(r,\"dispatchTransaction\",i);return o?l=>{o.call(i,{transaction:l,next:s})}:s},t)}transformPastedHTML(t){const{editor:e}=this;return eo([...this.extensions]).reduce((s,r)=>{const i={name:r.name,options:r.options,storage:this.editor.extensionStorage[r.name],editor:e,type:_i(r.name,this.schema)},o=Y(r,\"transformPastedHTML\",i);return o?(l,a)=>{const c=s(l,a);return o.call(i,c)}:s},t||(s=>s))}get markViews(){const{editor:t}=this,{markExtensions:e}=gi(this.extensions);return Object.fromEntries(e.filter(n=>!!Y(n,\"addMarkView\")).map(n=>{const s=this.attributes.filter(l=>l.type===n.name),r={name:n.name,options:n.options,storage:this.editor.extensionStorage[n.name],editor:t,type:rs(n.name,this.schema)},i=Y(n,\"addMarkView\",r);if(!i)return[];const o=(l,a,c)=>{const u=Io(l,s);return i()({mark:l,view:a,inline:c,editor:t,extension:n,HTMLAttributes:u,updateAttributes:f=>{VR(l,t,f)}})};return[n.name,o]}))}setupExtensions(){const t=this.extensions;this.editor.extensionStorage=Object.fromEntries(t.map(e=>[e.name,e.storage])),t.forEach(e=>{var n;const s={name:e.name,options:e.options,storage:this.editor.extensionStorage[e.name],editor:this.editor,type:_i(e.name,this.schema)};e.type===\"mark\"&&((n=ge(Y(e,\"keepOnSplit\",s)))==null||n)&&this.splittableMarks.push(e.name);const r=Y(e,\"onBeforeCreate\",s),i=Y(e,\"onCreate\",s),o=Y(e,\"onUpdate\",s),l=Y(e,\"onSelectionUpdate\",s),a=Y(e,\"onTransaction\",s),c=Y(e,\"onFocus\",s),u=Y(e,\"onBlur\",s),f=Y(e,\"onDestroy\",s);r&&this.editor.on(\"beforeCreate\",r),i&&this.editor.on(\"create\",i),o&&this.editor.on(\"update\",o),l&&this.editor.on(\"selectionUpdate\",l),a&&this.editor.on(\"transaction\",a),c&&this.editor.on(\"focus\",c),u&&this.editor.on(\"blur\",u),f&&this.editor.on(\"destroy\",f)})}};Wc.resolve=OS;Wc.sort=eo;Wc.flatten=Sh;var AR={};ph(AR,{ClipboardTextSerializer:()=>VS,Commands:()=>WS,Delete:()=>jS,Drop:()=>US,Editable:()=>KS,FocusEvents:()=>JS,Keymap:()=>GS,Paste:()=>YS,Tabindex:()=>XS,TextDirection:()=>QS,focusEventsPluginKey:()=>qS});var Se=class zS extends Ch{constructor(){super(...arguments),this.type=\"extension\"}static create(e={}){const n=typeof e==\"function\"?e():e;return new zS(n)}configure(e){return super.configure(e)}extend(e){const n=typeof e==\"function\"?e():e;return super.extend(n)}},VS=Se.create({name:\"clipboardTextSerializer\",addOptions(){return{blockSeparator:void 0}},addProseMirrorPlugins(){return[new we({key:new Ne(\"clipboardTextSerializer\"),props:{clipboardTextSerializer:()=>{const{editor:t}=this,{state:e,schema:n}=t,{doc:s,selection:r}=e,{ranges:i}=r,o=Math.min(...i.map(u=>u.$from.pos)),l=Math.max(...i.map(u=>u.$to.pos)),a=IS(n);return RS(s,{from:o,to:l},{...this.options.blockSeparator!==void 0?{blockSeparator:this.options.blockSeparator}:{},textSerializers:a})}}})]}}),WS=Se.create({name:\"commands\",addCommands(){return{...wS}}}),jS=Se.create({name:\"delete\",onUpdate({transaction:t,appendedTransactions:e}){var n,s,r;const i=()=>{var o,l,a,c;if((c=(a=(l=(o=this.editor.options.coreExtensionOptions)==null?void 0:o.delete)==null?void 0:l.filterTransaction)==null?void 0:a.call(l,t))!=null?c:t.getMeta(\"y-sync$\"))return;const u=ES(t.before,[t,...e]);DS(u).forEach(h=>{u.mapping.mapResult(h.oldRange.from).deletedAfter&&u.mapping.mapResult(h.oldRange.to).deletedBefore&&u.before.nodesBetween(h.oldRange.from,h.oldRange.to,(p,m)=>{const g=m+p.nodeSize-2,y=h.oldRange.from<=m&&g<=h.oldRange.to;this.editor.emit(\"delete\",{type:\"node\",node:p,from:m,to:g,newFrom:u.mapping.map(m),newTo:u.mapping.map(g),deletedRange:h.oldRange,newRange:h.newRange,partial:!y,editor:this.editor,transaction:t,combinedTransform:u})})});const d=u.mapping;u.steps.forEach((h,p)=>{var m,g;if(h instanceof ln){const y=d.slice(p).map(h.from,-1),S=d.slice(p).map(h.to),b=d.invert().map(y,-1),w=d.invert().map(S),x=(m=u.doc.nodeAt(y-1))==null?void 0:m.marks.some(k=>k.eq(h.mark)),E=(g=u.doc.nodeAt(S))==null?void 0:g.marks.some(k=>k.eq(h.mark));this.editor.emit(\"delete\",{type:\"mark\",mark:h.mark,from:h.from,to:h.to,deletedRange:{from:b,to:w},newRange:{from:y,to:S},partial:!!(E||x),editor:this.editor,transaction:t,combinedTransform:u})}})};(r=(s=(n=this.editor.options.coreExtensionOptions)==null?void 0:n.delete)==null?void 0:s.async)==null||r?setTimeout(i,0):i()}}),US=Se.create({name:\"drop\",addProseMirrorPlugins(){return[new we({key:new Ne(\"tiptapDrop\"),props:{handleDrop:(t,e,n,s)=>{this.editor.emit(\"drop\",{editor:this.editor,event:e,slice:n,moved:s})}}})]}}),KS=Se.create({name:\"editable\",addProseMirrorPlugins(){return[new we({key:new Ne(\"editable\"),props:{editable:()=>this.editor.options.editable}})]}}),qS=new Ne(\"focusEvents\"),JS=Se.create({name:\"focusEvents\",addProseMirrorPlugins(){const{editor:t}=this;return[new we({key:qS,props:{handleDOMEvents:{focus:(e,n)=>{t.isFocused=!0;const s=t.state.tr.setMeta(\"focus\",{event:n}).setMeta(\"addToHistory\",!1);return e.dispatch(s),!1},blur:(e,n)=>{t.isFocused=!1;const s=t.state.tr.setMeta(\"blur\",{event:n}).setMeta(\"addToHistory\",!1);return e.dispatch(s),!1}}}})]}}),GS=Se.create({name:\"keymap\",addKeyboardShortcuts(){const t=()=>this.editor.commands.first(({commands:o})=>[()=>o.undoInputRule(),()=>o.command(({tr:l})=>{const{selection:a,doc:c}=l,{empty:u,$anchor:f}=a,{pos:d,parent:h}=f,p=f.parent.isTextblock&&d>0?l.doc.resolve(d-1):f,m=p.parent.type.spec.isolating,g=f.pos-f.parentOffset,y=m&&p.parent.childCount===1?g===f.pos:ee.atStart(c).from===d;return!u||!h.type.isTextblock||h.textContent.length||!y||y&&f.parent.type.name===\"paragraph\"?!1:o.clearNodes()}),()=>o.deleteSelection(),()=>o.joinBackward(),()=>o.selectNodeBackward()]),e=()=>this.editor.commands.first(({commands:o})=>[()=>o.deleteSelection(),()=>o.deleteCurrentNode(),()=>o.joinForward(),()=>o.selectNodeForward()]),s={Enter:()=>this.editor.commands.first(({commands:o})=>[()=>o.newlineInCode(),()=>o.createParagraphNear(),()=>o.liftEmptyBlock(),()=>o.splitBlock()]),\"Mod-Enter\":()=>this.editor.commands.exitCode(),Backspace:t,\"Mod-Backspace\":t,\"Shift-Backspace\":t,Delete:e,\"Mod-Delete\":e,\"Mod-a\":()=>this.editor.commands.selectAll()},r={...s},i={...s,\"Ctrl-h\":t,\"Alt-Backspace\":t,\"Ctrl-d\":e,\"Ctrl-Alt-Backspace\":e,\"Alt-Delete\":e,\"Alt-d\":e,\"Ctrl-a\":()=>this.editor.commands.selectTextblockStart(),\"Ctrl-e\":()=>this.editor.commands.selectTextblockEnd()};return Aa()||kS()?i:r},addProseMirrorPlugins(){return[new we({key:new Ne(\"clearDocument\"),appendTransaction:(t,e,n)=>{if(t.some(m=>m.getMeta(\"composition\")))return;const s=t.some(m=>m.docChanged)&&!e.doc.eq(n.doc),r=t.some(m=>m.getMeta(\"preventClearDocument\"));if(!s||r)return;const{empty:i,from:o,to:l}=e.selection,a=ee.atStart(e.doc).from,c=ee.atEnd(e.doc).to;if(i||!(o===a&&l===c)||!zc(n.doc))return;const d=n.tr,h=$c({state:n,transaction:d}),{commands:p}=new Hc({editor:this.editor,state:h});if(p.clearNodes(),!!d.steps.length)return d}})]}}),YS=Se.create({name:\"paste\",addProseMirrorPlugins(){return[new we({key:new Ne(\"tiptapPaste\"),props:{handlePaste:(t,e,n)=>{this.editor.emit(\"paste\",{editor:this.editor,event:e,slice:n})}}})]}}),XS=Se.create({name:\"tabindex\",addProseMirrorPlugins(){return[new we({key:new Ne(\"tabindex\"),props:{attributes:()=>this.editor.isEditable?{tabindex:\"0\"}:{}}})]}}),QS=Se.create({name:\"textDirection\",addOptions(){return{direction:void 0}},addGlobalAttributes(){if(!this.options.direction)return[];const{nodeExtensions:t}=gi(this.extensions);return[{types:t.filter(e=>e.name!==\"text\").map(e=>e.name),attributes:{dir:{default:this.options.direction,parseHTML:e=>{const n=e.getAttribute(\"dir\");return n&&(n===\"ltr\"||n===\"rtl\"||n===\"auto\")?n:this.options.direction},renderHTML:e=>e.dir?{dir:e.dir}:{}}}}]},addProseMirrorPlugins(){return[new we({key:new Ne(\"textDirection\"),props:{attributes:()=>{const t=this.options.direction;return t?{dir:t}:{}}}})]}}),NR=class Fi{constructor(e,n,s=!1,r=null){this.currentNode=null,this.actualDepth=null,this.isBlock=s,this.resolvedPos=e,this.editor=n,this.currentNode=r}get name(){return this.node.type.name}get node(){return this.currentNode||this.resolvedPos.node()}get element(){return this.editor.view.domAtPos(this.pos).node}get depth(){var e;return(e=this.actualDepth)!=null?e:this.resolvedPos.depth}get pos(){return this.resolvedPos.pos}get content(){return this.node.content}set content(e){let n=this.from,s=this.to;if(this.isBlock){if(this.content.size===0){console.error(`You can’t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);return}n=this.from+1,s=this.to-1}this.editor.commands.insertContentAt({from:n,to:s},e)}get attributes(){return this.node.attrs}get textContent(){return this.node.textContent}get size(){return this.node.nodeSize}get from(){return this.isBlock?this.pos:this.resolvedPos.start(this.resolvedPos.depth)}get range(){return{from:this.from,to:this.to}}get to(){return this.isBlock?this.pos+this.size:this.resolvedPos.end(this.resolvedPos.depth)+(this.node.isText?0:1)}get parent(){if(this.depth===0)return null;const e=this.resolvedPos.start(this.resolvedPos.depth-1),n=this.resolvedPos.doc.resolve(e);return new Fi(n,this.editor)}get before(){let e=this.resolvedPos.doc.resolve(this.from-(this.isBlock?1:2));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.from-3)),new Fi(e,this.editor)}get after(){let e=this.resolvedPos.doc.resolve(this.to+(this.isBlock?2:1));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.to+3)),new Fi(e,this.editor)}get children(){const e=[];return this.node.content.forEach((n,s)=>{const r=n.isBlock&&!n.isTextblock,i=n.isAtom&&!n.isText,o=n.isInline,l=this.pos+s+(i?0:1);if(l<0||l>this.resolvedPos.doc.nodeSize-2)return;const a=this.resolvedPos.doc.resolve(l);if(!r&&!o&&a.depth<=this.depth)return;const c=new Fi(a,this.editor,r,r||o?n:null);r&&(c.actualDepth=this.depth+1),e.push(c)}),e}get firstChild(){return this.children[0]||null}get lastChild(){const e=this.children;return e[e.length-1]||null}closest(e,n={}){let s=null,r=this.parent;for(;r&&!s;){if(r.node.type.name===e)if(Object.keys(n).length>0){const i=r.node.attrs,o=Object.keys(n);for(let l=0;l<o.length;l+=1){const a=o[l];if(i[a]!==n[a])break}}else s=r;r=r.parent}return s}querySelector(e,n={}){return this.querySelectorAll(e,n,!0)[0]||null}querySelectorAll(e,n={},s=!1){let r=[];if(!this.children||this.children.length===0)return r;const i=Object.keys(n);return this.children.forEach(o=>{s&&r.length>0||(o.node.type.name===e&&i.every(a=>n[a]===o.node.attrs[a])&&r.push(o),!(s&&r.length>0)&&(r=r.concat(o.querySelectorAll(e,n,s))))}),r}setAttribute(e){const{tr:n}=this.editor.state;n.setNodeMarkup(this.from,void 0,{...this.node.attrs,...e}),this.editor.view.dispatch(n)}},OR=`.ProseMirror {\n  position: relative;\n}\n\n.ProseMirror {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  white-space: break-spaces;\n  -webkit-font-variant-ligatures: none;\n  font-variant-ligatures: none;\n  font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n  white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n  white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n  white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n  display: inline !important;\n  border: none !important;\n  margin: 0 !important;\n  width: 0 !important;\n  height: 0 !important;\n}\n\n.ProseMirror-gapcursor {\n  display: none;\n  pointer-events: none;\n  position: absolute;\n  margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n  content: \"\";\n  display: block;\n  position: absolute;\n  top: -2px;\n  width: 20px;\n  border-top: 1px solid black;\n  animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n  to {\n    visibility: hidden;\n  }\n}\n\n.ProseMirror-hideselection *::selection {\n  background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n  background: transparent;\n}\n\n.ProseMirror-hideselection * {\n  caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n  display: block;\n}`;function RR(t,e,n){const s=document.querySelector(\"style[data-tiptap-style]\");if(s!==null)return s;const r=document.createElement(\"style\");return e&&r.setAttribute(\"nonce\",e),r.setAttribute(\"data-tiptap-style\",\"\"),r.innerHTML=t,document.getElementsByTagName(\"head\")[0].appendChild(r),r}var IR=class extends bR{constructor(e={}){super(),this.css=null,this.className=\"tiptap\",this.editorView=null,this.isFocused=!1,this.isInitialized=!1,this.extensionStorage={},this.instanceId=Math.random().toString(36).slice(2,9),this.options={element:typeof document<\"u\"?document.createElement(\"div\"):null,content:\"\",injectCSS:!0,injectNonce:void 0,extensions:[],autofocus:!1,editable:!0,textDirection:void 0,editorProps:{},parseOptions:{},coreExtensionOptions:{},enableInputRules:!0,enablePasteRules:!0,enableCoreExtensions:!0,enableContentCheck:!1,emitContentError:!1,onBeforeCreate:()=>null,onCreate:()=>null,onMount:()=>null,onUnmount:()=>null,onUpdate:()=>null,onSelectionUpdate:()=>null,onTransaction:()=>null,onFocus:()=>null,onBlur:()=>null,onDestroy:()=>null,onContentError:({error:r})=>{throw r},onPaste:()=>null,onDrop:()=>null,onDelete:()=>null,enableExtensionDispatchTransaction:!0},this.isCapturingTransaction=!1,this.capturedTransaction=null,this.utils={getUpdatedPosition:JO,createMappablePosition:GO},this.setOptions(e),this.createExtensionManager(),this.createCommandManager(),this.createSchema(),this.on(\"beforeCreate\",this.options.onBeforeCreate),this.emit(\"beforeCreate\",{editor:this}),this.on(\"mount\",this.options.onMount),this.on(\"unmount\",this.options.onUnmount),this.on(\"contentError\",this.options.onContentError),this.on(\"create\",this.options.onCreate),this.on(\"update\",this.options.onUpdate),this.on(\"selectionUpdate\",this.options.onSelectionUpdate),this.on(\"transaction\",this.options.onTransaction),this.on(\"focus\",this.options.onFocus),this.on(\"blur\",this.options.onBlur),this.on(\"destroy\",this.options.onDestroy),this.on(\"drop\",({event:r,slice:i,moved:o})=>this.options.onDrop(r,i,o)),this.on(\"paste\",({event:r,slice:i})=>this.options.onPaste(r,i)),this.on(\"delete\",this.options.onDelete);const n=this.createDoc(),s=CS(n,this.options.autofocus);this.editorState=Ur.create({doc:n,schema:this.schema,selection:s||void 0}),this.options.element&&this.mount(this.options.element)}mount(e){if(typeof document>\"u\")throw new Error(\"[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.\");this.createView(e),this.emit(\"mount\",{editor:this}),this.css&&!document.head.contains(this.css)&&document.head.appendChild(this.css),window.setTimeout(()=>{this.isDestroyed||(this.options.autofocus!==!1&&this.options.autofocus!==null&&this.commands.focus(this.options.autofocus),this.emit(\"create\",{editor:this}),this.isInitialized=!0)},0)}unmount(){if(this.editorView){const e=this.editorView.dom;e?.editor&&delete e.editor,this.editorView.destroy()}if(this.editorView=null,this.isInitialized=!1,this.css&&!document.querySelectorAll(`.${this.className}`).length)try{typeof this.css.remove==\"function\"?this.css.remove():this.css.parentNode&&this.css.parentNode.removeChild(this.css)}catch(e){console.warn(\"Failed to remove CSS element:\",e)}this.css=null,this.emit(\"unmount\",{editor:this})}get storage(){return this.extensionStorage}get commands(){return this.commandManager.commands}chain(){return this.commandManager.chain()}can(){return this.commandManager.can()}injectCSS(){this.options.injectCSS&&typeof document<\"u\"&&(this.css=RR(OR,this.options.injectNonce))}setOptions(e={}){this.options={...this.options,...e},!(!this.editorView||!this.state||this.isDestroyed)&&(this.options.editorProps&&this.view.setProps(this.options.editorProps),this.view.updateState(this.state))}setEditable(e,n=!0){this.setOptions({editable:e}),n&&this.emit(\"update\",{editor:this,transaction:this.state.tr,appendedTransactions:[]})}get isEditable(){return this.options.editable&&this.view&&this.view.editable}get view(){return this.editorView?this.editorView:new Proxy({state:this.editorState,updateState:e=>{this.editorState=e},dispatch:e=>{this.dispatchTransaction(e)},composing:!1,dragging:null,editable:!0,isDestroyed:!1},{get:(e,n)=>{if(this.editorView)return this.editorView[n];if(n===\"state\")return this.editorState;if(n in e)return Reflect.get(e,n);throw new Error(`[tiptap error]: The editor view is not available. Cannot access view['${n}']. The editor may not be mounted yet.`)}})}get state(){return this.editorView&&(this.editorState=this.view.state),this.editorState}registerPlugin(e,n){const s=AS(n)?n(e,[...this.state.plugins]):[...this.state.plugins,e],r=this.state.reconfigure({plugins:s});return this.view.updateState(r),r}unregisterPlugin(e){if(this.isDestroyed)return;const n=this.state.plugins;let s=n;if([].concat(e).forEach(i=>{const o=typeof i==\"string\"?`${i}$`:i.key;s=s.filter(l=>!l.key.startsWith(o))}),n.length===s.length)return;const r=this.state.reconfigure({plugins:s});return this.view.updateState(r),r}createExtensionManager(){var e,n;const r=[...this.options.enableCoreExtensions?[KS,VS.configure({blockSeparator:(n=(e=this.options.coreExtensionOptions)==null?void 0:e.clipboardTextSerializer)==null?void 0:n.blockSeparator}),WS,JS,GS,XS,US,YS,jS,QS.configure({direction:this.options.textDirection})].filter(i=>typeof this.options.enableCoreExtensions==\"object\"?this.options.enableCoreExtensions[i.name]!==!1:!0):[],...this.options.extensions].filter(i=>[\"extension\",\"node\",\"mark\"].includes(i?.type));this.extensionManager=new Wc(r,this)}createCommandManager(){this.commandManager=new Hc({editor:this})}createSchema(){this.schema=this.extensionManager.schema}createDoc(){let e;try{e=Rf(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:this.options.enableContentCheck})}catch(n){if(!(n instanceof Error)||![\"[tiptap error]: Invalid JSON content\",\"[tiptap error]: Invalid HTML content\"].includes(n.message))throw n;this.emit(\"contentError\",{editor:this,error:n,disableCollaboration:()=>{\"collaboration\"in this.storage&&typeof this.storage.collaboration==\"object\"&&this.storage.collaboration&&(this.storage.collaboration.isDisabled=!0),this.options.extensions=this.options.extensions.filter(s=>s.name!==\"collaboration\"),this.createExtensionManager()}}),e=Rf(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:!1})}return e}createView(e){const{editorProps:n,enableExtensionDispatchTransaction:s}=this.options,r=n.dispatchTransaction||this.dispatchTransaction.bind(this),i=s?this.extensionManager.dispatchTransaction(r):r,o=n.transformPastedHTML,l=this.extensionManager.transformPastedHTML(o);this.editorView=new SS(e,{...n,attributes:{role:\"textbox\",...n?.attributes},dispatchTransaction:i,transformPastedHTML:l,state:this.editorState,markViews:this.extensionManager.markViews,nodeViews:this.extensionManager.nodeViews});const a=this.state.reconfigure({plugins:this.extensionManager.plugins});this.view.updateState(a),this.prependClass(),this.injectCSS();const c=this.view.dom;c.editor=this}createNodeViews(){this.view.isDestroyed||this.view.setProps({markViews:this.extensionManager.markViews,nodeViews:this.extensionManager.nodeViews})}prependClass(){this.view.dom.className=`${this.className} ${this.view.dom.className}`}captureTransaction(e){this.isCapturingTransaction=!0,e(),this.isCapturingTransaction=!1;const n=this.capturedTransaction;return this.capturedTransaction=null,n}dispatchTransaction(e){if(this.view.isDestroyed)return;if(this.isCapturingTransaction){if(!this.capturedTransaction){this.capturedTransaction=e;return}e.steps.forEach(u=>{var f;return(f=this.capturedTransaction)==null?void 0:f.step(u)});return}const{state:n,transactions:s}=this.state.applyTransaction(e),r=!this.state.selection.eq(n.selection),i=s.includes(e),o=this.state;if(this.emit(\"beforeTransaction\",{editor:this,transaction:e,nextState:n}),!i)return;this.view.updateState(n),this.emit(\"transaction\",{editor:this,transaction:e,appendedTransactions:s.slice(1)}),r&&this.emit(\"selectionUpdate\",{editor:this,transaction:e});const l=s.findLast(u=>u.getMeta(\"focus\")||u.getMeta(\"blur\")),a=l?.getMeta(\"focus\"),c=l?.getMeta(\"blur\");a&&this.emit(\"focus\",{editor:this,event:a.event,transaction:l}),c&&this.emit(\"blur\",{editor:this,event:c.event,transaction:l}),!(e.getMeta(\"preventUpdate\")||!s.some(u=>u.docChanged)||o.doc.eq(n.doc))&&this.emit(\"update\",{editor:this,transaction:e,appendedTransactions:s.slice(1)})}getAttributes(e){return _S(this.state,e)}isActive(e,n){const s=typeof e==\"string\"?e:null,r=typeof e==\"string\"?n:e;return PS(this.state,s,r)}getJSON(){return this.state.doc.toJSON()}getHTML(){return wh(this.state.doc.content,this.schema)}getText(e){const{blockSeparator:n=`\n\n`,textSerializers:s={}}=e||{};return FO(this.state.doc,{blockSeparator:n,textSerializers:{...IS(this.schema),...s}})}get isEmpty(){return zc(this.state.doc)}destroy(){this.emit(\"destroy\"),this.unmount(),this.removeAllListeners()}get isDestroyed(){var e,n;return(n=(e=this.editorView)==null?void 0:e.isDestroyed)!=null?n:!0}$node(e,n){var s;return((s=this.$doc)==null?void 0:s.querySelector(e,n))||null}$nodes(e,n){var s;return((s=this.$doc)==null?void 0:s.querySelectorAll(e,n))||null}$pos(e){const n=this.state.doc.resolve(e);return new NR(n,this)}get $doc(){return this.$pos(0)}};function wr(t){return new Vc({find:t.find,handler:({state:e,range:n,match:s})=>{const r=ge(t.getAttributes,void 0,s);if(r===!1||r===null)return null;const{tr:i}=e,o=s[s.length-1],l=s[0];if(o){const a=l.search(/\\S/),c=n.from+l.indexOf(o),u=c+o.length;if(xh(n.from,n.to,e.doc).filter(h=>h.mark.type.excluded.find(m=>m===t.type&&m!==h.mark.type)).filter(h=>h.to>c).length)return null;u<n.to&&i.delete(u,n.to),c>n.from&&i.delete(n.from+a,c);const d=n.from+a+o.length;i.addMark(n.from+a,d,t.type.create(r||{})),i.removeStoredMark(t.type)}},undoable:t.undoable})}function ZS(t){return new Vc({find:t.find,handler:({state:e,range:n,match:s})=>{const r=ge(t.getAttributes,void 0,s)||{},{tr:i}=e,o=n.from;let l=n.to;const a=t.type.create(r);if(s[1]){const c=s[0].lastIndexOf(s[1]);let u=o+c;u>l?u=l:l=u+s[1].length;const f=s[0][s[0].length-1];i.insertText(f,o+s[0].length-1),i.replaceWith(u,l,a)}else if(s[0]){const c=t.type.isInline?o:o-1;i.insert(c,t.type.create(r)).delete(i.mapping.map(o),i.mapping.map(l))}i.scrollIntoView()},undoable:t.undoable})}function _f(t){return new Vc({find:t.find,handler:({state:e,range:n,match:s})=>{const r=e.doc.resolve(n.from),i=ge(t.getAttributes,void 0,s)||{};if(!r.node(-1).canReplaceWith(r.index(-1),r.indexAfter(-1),t.type))return null;e.tr.delete(n.from,n.to).setBlockType(n.from,n.from,t.type,i)},undoable:t.undoable})}function yi(t){return new Vc({find:t.find,handler:({state:e,range:n,match:s,chain:r})=>{const i=ge(t.getAttributes,void 0,s)||{},o=e.tr.delete(n.from,n.to),a=o.doc.resolve(n.from).blockRange(),c=a&&Yd(a,t.type,i);if(!c)return null;if(o.wrap(a,c),t.keepMarks&&t.editor){const{selection:f,storedMarks:d}=e,{splittableMarks:h}=t.editor.extensionManager,p=d||f.$to.parentOffset&&f.$from.marks();if(p){const m=p.filter(g=>h.includes(g.type.name));o.ensureMarks(m)}}if(t.keepAttributes){const f=t.type.name===\"bulletList\"||t.type.name===\"orderedList\"?\"listItem\":\"taskList\";r().updateAttributes(f,i).run()}const u=o.doc.resolve(n.from-1).nodeBefore;u&&u.type===t.type&&Ws(o.doc,n.from-1)&&(!t.joinPredicate||t.joinPredicate(s,u))&&o.join(n.from-1)},undoable:t.undoable})}var _R=t=>\"touches\"in t,DR=class{constructor(t){this.directions=[\"bottom-left\",\"bottom-right\",\"top-left\",\"top-right\"],this.minSize={height:8,width:8},this.preserveAspectRatio=!1,this.classNames={container:\"\",wrapper:\"\",handle:\"\",resizing:\"\"},this.initialWidth=0,this.initialHeight=0,this.aspectRatio=1,this.isResizing=!1,this.activeHandle=null,this.startX=0,this.startY=0,this.startWidth=0,this.startHeight=0,this.isShiftKeyPressed=!1,this.lastEditableState=void 0,this.handleMap=new Map,this.handleMouseMove=l=>{if(!this.isResizing||!this.activeHandle)return;const a=l.clientX-this.startX,c=l.clientY-this.startY;this.handleResize(a,c)},this.handleTouchMove=l=>{if(!this.isResizing||!this.activeHandle)return;const a=l.touches[0];if(!a)return;const c=a.clientX-this.startX,u=a.clientY-this.startY;this.handleResize(c,u)},this.handleMouseUp=()=>{if(!this.isResizing)return;const l=this.element.offsetWidth,a=this.element.offsetHeight;this.onCommit(l,a),this.isResizing=!1,this.activeHandle=null,this.container.dataset.resizeState=\"false\",this.classNames.resizing&&this.container.classList.remove(this.classNames.resizing),document.removeEventListener(\"mousemove\",this.handleMouseMove),document.removeEventListener(\"mouseup\",this.handleMouseUp),document.removeEventListener(\"keydown\",this.handleKeyDown),document.removeEventListener(\"keyup\",this.handleKeyUp)},this.handleKeyDown=l=>{l.key===\"Shift\"&&(this.isShiftKeyPressed=!0)},this.handleKeyUp=l=>{l.key===\"Shift\"&&(this.isShiftKeyPressed=!1)};var e,n,s,r,i,o;this.node=t.node,this.editor=t.editor,this.element=t.element,this.contentElement=t.contentElement,this.getPos=t.getPos,this.onResize=t.onResize,this.onCommit=t.onCommit,this.onUpdate=t.onUpdate,(e=t.options)!=null&&e.min&&(this.minSize={...this.minSize,...t.options.min}),(n=t.options)!=null&&n.max&&(this.maxSize=t.options.max),(s=t?.options)!=null&&s.directions&&(this.directions=t.options.directions),(r=t.options)!=null&&r.preserveAspectRatio&&(this.preserveAspectRatio=t.options.preserveAspectRatio),(i=t.options)!=null&&i.className&&(this.classNames={container:t.options.className.container||\"\",wrapper:t.options.className.wrapper||\"\",handle:t.options.className.handle||\"\",resizing:t.options.className.resizing||\"\"}),(o=t.options)!=null&&o.createCustomHandle&&(this.createCustomHandle=t.options.createCustomHandle),this.wrapper=this.createWrapper(),this.container=this.createContainer(),this.applyInitialSize(),this.attachHandles(),this.editor.on(\"update\",this.handleEditorUpdate.bind(this))}get dom(){return this.container}get contentDOM(){var t;return(t=this.contentElement)!=null?t:null}handleEditorUpdate(){const t=this.editor.isEditable;t!==this.lastEditableState&&(this.lastEditableState=t,t?t&&this.handleMap.size===0&&this.attachHandles():this.removeHandles())}update(t,e,n){return t.type!==this.node.type?!1:(this.node=t,this.onUpdate?this.onUpdate(t,e,n):!0)}destroy(){this.isResizing&&(this.container.dataset.resizeState=\"false\",this.classNames.resizing&&this.container.classList.remove(this.classNames.resizing),document.removeEventListener(\"mousemove\",this.handleMouseMove),document.removeEventListener(\"mouseup\",this.handleMouseUp),document.removeEventListener(\"keydown\",this.handleKeyDown),document.removeEventListener(\"keyup\",this.handleKeyUp),this.isResizing=!1,this.activeHandle=null),this.editor.off(\"update\",this.handleEditorUpdate.bind(this)),this.container.remove()}createContainer(){const t=document.createElement(\"div\");return t.dataset.resizeContainer=\"\",t.dataset.node=this.node.type.name,t.style.display=\"flex\",this.classNames.container&&(t.className=this.classNames.container),t.appendChild(this.wrapper),t}createWrapper(){const t=document.createElement(\"div\");return t.style.position=\"relative\",t.style.display=\"block\",t.dataset.resizeWrapper=\"\",this.classNames.wrapper&&(t.className=this.classNames.wrapper),t.appendChild(this.element),t}createHandle(t){const e=document.createElement(\"div\");return e.dataset.resizeHandle=t,e.style.position=\"absolute\",this.classNames.handle&&(e.className=this.classNames.handle),e}positionHandle(t,e){const n=e.includes(\"top\"),s=e.includes(\"bottom\"),r=e.includes(\"left\"),i=e.includes(\"right\");n&&(t.style.top=\"0\"),s&&(t.style.bottom=\"0\"),r&&(t.style.left=\"0\"),i&&(t.style.right=\"0\"),(e===\"top\"||e===\"bottom\")&&(t.style.left=\"0\",t.style.right=\"0\"),(e===\"left\"||e===\"right\")&&(t.style.top=\"0\",t.style.bottom=\"0\")}attachHandles(){this.directions.forEach(t=>{let e;this.createCustomHandle?e=this.createCustomHandle(t):e=this.createHandle(t),e instanceof HTMLElement||(console.warn(`[ResizableNodeView] createCustomHandle(\"${t}\") did not return an HTMLElement. Falling back to default handle.`),e=this.createHandle(t)),this.createCustomHandle||this.positionHandle(e,t),e.addEventListener(\"mousedown\",n=>this.handleResizeStart(n,t)),e.addEventListener(\"touchstart\",n=>this.handleResizeStart(n,t)),this.handleMap.set(t,e),this.wrapper.appendChild(e)})}removeHandles(){this.handleMap.forEach(t=>t.remove()),this.handleMap.clear()}applyInitialSize(){const t=this.node.attrs.width,e=this.node.attrs.height;t?(this.element.style.width=`${t}px`,this.initialWidth=t):this.initialWidth=this.element.offsetWidth,e?(this.element.style.height=`${e}px`,this.initialHeight=e):this.initialHeight=this.element.offsetHeight,this.initialWidth>0&&this.initialHeight>0&&(this.aspectRatio=this.initialWidth/this.initialHeight)}handleResizeStart(t,e){t.preventDefault(),t.stopPropagation(),this.isResizing=!0,this.activeHandle=e,_R(t)?(this.startX=t.touches[0].clientX,this.startY=t.touches[0].clientY):(this.startX=t.clientX,this.startY=t.clientY),this.startWidth=this.element.offsetWidth,this.startHeight=this.element.offsetHeight,this.startWidth>0&&this.startHeight>0&&(this.aspectRatio=this.startWidth/this.startHeight),this.getPos(),this.container.dataset.resizeState=\"true\",this.classNames.resizing&&this.container.classList.add(this.classNames.resizing),document.addEventListener(\"mousemove\",this.handleMouseMove),document.addEventListener(\"touchmove\",this.handleTouchMove),document.addEventListener(\"mouseup\",this.handleMouseUp),document.addEventListener(\"keydown\",this.handleKeyDown),document.addEventListener(\"keyup\",this.handleKeyUp)}handleResize(t,e){if(!this.activeHandle)return;const n=this.preserveAspectRatio||this.isShiftKeyPressed,{width:s,height:r}=this.calculateNewDimensions(this.activeHandle,t,e),i=this.applyConstraints(s,r,n);this.element.style.width=`${i.width}px`,this.element.style.height=`${i.height}px`,this.onResize&&this.onResize(i.width,i.height)}calculateNewDimensions(t,e,n){let s=this.startWidth,r=this.startHeight;const i=t.includes(\"right\"),o=t.includes(\"left\"),l=t.includes(\"bottom\"),a=t.includes(\"top\");return i?s=this.startWidth+e:o&&(s=this.startWidth-e),l?r=this.startHeight+n:a&&(r=this.startHeight-n),(t===\"right\"||t===\"left\")&&(s=this.startWidth+(i?e:-e)),(t===\"top\"||t===\"bottom\")&&(r=this.startHeight+(l?n:-n)),this.preserveAspectRatio||this.isShiftKeyPressed?this.applyAspectRatio(s,r,t):{width:s,height:r}}applyConstraints(t,e,n){var s,r,i,o;if(!n){let c=Math.max(this.minSize.width,t),u=Math.max(this.minSize.height,e);return(s=this.maxSize)!=null&&s.width&&(c=Math.min(this.maxSize.width,c)),(r=this.maxSize)!=null&&r.height&&(u=Math.min(this.maxSize.height,u)),{width:c,height:u}}let l=t,a=e;return l<this.minSize.width&&(l=this.minSize.width,a=l/this.aspectRatio),a<this.minSize.height&&(a=this.minSize.height,l=a*this.aspectRatio),(i=this.maxSize)!=null&&i.width&&l>this.maxSize.width&&(l=this.maxSize.width,a=l/this.aspectRatio),(o=this.maxSize)!=null&&o.height&&a>this.maxSize.height&&(a=this.maxSize.height,l=a*this.aspectRatio),{width:l,height:a}}applyAspectRatio(t,e,n){const s=n===\"left\"||n===\"right\",r=n===\"top\"||n===\"bottom\";return s?{width:t,height:t/this.aspectRatio}:r?{width:e*this.aspectRatio,height:e}:{width:t,height:t/this.aspectRatio}}};function PR(t,e){const{selection:n}=t,{$from:s}=n;if(n instanceof Q){const i=s.index();return s.parent.canReplaceWith(i,i+1,e)}let r=s.depth;for(;r>=0;){const i=s.index(r);if(s.node(r).contentMatchAt(i).matchType(e))return!0;r-=1}return!1}function LR(t){return t.replace(/[-/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}var BR={};ph(BR,{createAtomBlockMarkdownSpec:()=>$R,createBlockMarkdownSpec:()=>jc,createInlineMarkdownSpec:()=>zR,parseAttributes:()=>vh,parseIndentedBlocks:()=>Df,renderNestedMarkdownContent:()=>Th,serializeAttributes:()=>kh});function vh(t){if(!t?.trim())return{};const e={},n=[],s=t.replace(/[\"']([^\"']*)[\"']/g,c=>(n.push(c),`__QUOTED_${n.length-1}__`)),r=s.match(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g);if(r){const c=r.map(u=>u.trim().slice(1));e.class=c.join(\" \")}const i=s.match(/(?:^|\\s)#([a-zA-Z][\\w-]*)/);i&&(e.id=i[1]);const o=/([a-zA-Z][\\w-]*)\\s*=\\s*(__QUOTED_\\d+__)/g;Array.from(s.matchAll(o)).forEach(([,c,u])=>{var f;const d=parseInt(((f=u.match(/__QUOTED_(\\d+)__/))==null?void 0:f[1])||\"0\",10),h=n[d];h&&(e[c]=h.slice(1,-1))});const a=s.replace(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g,\"\").replace(/(?:^|\\s)#([a-zA-Z][\\w-]*)/g,\"\").replace(/([a-zA-Z][\\w-]*)\\s*=\\s*__QUOTED_\\d+__/g,\"\").trim();return a&&a.split(/\\s+/).filter(Boolean).forEach(u=>{u.match(/^[a-zA-Z][\\w-]*$/)&&(e[u]=!0)}),e}function kh(t){if(!t||Object.keys(t).length===0)return\"\";const e=[];return t.class&&String(t.class).split(/\\s+/).filter(Boolean).forEach(s=>e.push(`.${s}`)),t.id&&e.push(`#${t.id}`),Object.entries(t).forEach(([n,s])=>{n===\"class\"||n===\"id\"||(s===!0?e.push(n):s!==!1&&s!=null&&e.push(`${n}=\"${String(s)}\"`))}),e.join(\" \")}function $R(t){const{nodeName:e,name:n,parseAttributes:s=vh,serializeAttributes:r=kh,defaultAttributes:i={},requiredAttributes:o=[],allowedAttributes:l}=t,a=n||e,c=u=>{if(!l)return u;const f={};return l.forEach(d=>{d in u&&(f[d]=u[d])}),f};return{parseMarkdown:(u,f)=>{const d={...i,...u.attributes};return f.createNode(e,d,[])},markdownTokenizer:{name:e,level:\"block\",start(u){var f;const d=new RegExp(`^:::${a}(?:\\\\s|$)`,\"m\"),h=(f=u.match(d))==null?void 0:f.index;return h!==void 0?h:-1},tokenize(u,f,d){const h=new RegExp(`^:::${a}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*:::(?:\\\\n|$)`),p=u.match(h);if(!p)return;const m=p[1]||\"\",g=s(m);if(!o.find(S=>!(S in g)))return{type:e,raw:p[0],attributes:g}}},renderMarkdown:u=>{const f=c(u.attrs||{}),d=r(f),h=d?` {${d}}`:\"\";return`:::${a}${h} :::`}}}function jc(t){const{nodeName:e,name:n,getContent:s,parseAttributes:r=vh,serializeAttributes:i=kh,defaultAttributes:o={},content:l=\"block\",allowedAttributes:a}=t,c=n||e,u=f=>{if(!a)return f;const d={};return a.forEach(h=>{h in f&&(d[h]=f[h])}),d};return{parseMarkdown:(f,d)=>{let h;if(s){const m=s(f);h=typeof m==\"string\"?[{type:\"text\",text:m}]:m}else l===\"block\"?h=d.parseChildren(f.tokens||[]):h=d.parseInline(f.tokens||[]);const p={...o,...f.attributes};return d.createNode(e,p,h)},markdownTokenizer:{name:e,level:\"block\",start(f){var d;const h=new RegExp(`^:::${c}`,\"m\"),p=(d=f.match(h))==null?void 0:d.index;return p!==void 0?p:-1},tokenize(f,d,h){var p;const m=new RegExp(`^:::${c}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*\\\\n`),g=f.match(m);if(!g)return;const[y,S=\"\"]=g,b=r(S);let w=1;const x=y.length;let E=\"\";const k=/^:::([\\w-]*)(\\s.*)?/gm,A=f.slice(x);for(k.lastIndex=0;;){const v=k.exec(A);if(v===null)break;const T=v.index,O=v[1];if(!((p=v[2])!=null&&p.endsWith(\":::\"))){if(O)w+=1;else if(w-=1,w===0){const N=A.slice(0,T);E=N.trim();const _=f.slice(0,x+T+v[0].length);let F=[];if(E)if(l===\"block\")for(F=h.blockTokens(N),F.forEach(j=>{j.text&&(!j.tokens||j.tokens.length===0)&&(j.tokens=h.inlineTokens(j.text))});F.length>0;){const j=F[F.length-1];if(j.type===\"paragraph\"&&(!j.text||j.text.trim()===\"\"))F.pop();else break}else F=h.inlineTokens(E);return{type:e,raw:_,attributes:b,content:E,tokens:F}}}}}},renderMarkdown:(f,d)=>{const h=u(f.attrs||{}),p=i(h),m=p?` {${p}}`:\"\",g=d.renderChildren(f.content||[],`\n\n`);return`:::${c}${m}\n\n${g}\n\n:::`}}}function HR(t){if(!t.trim())return{};const e={},n=/(\\w+)=(?:\"([^\"]*)\"|'([^']*)')/g;let s=n.exec(t);for(;s!==null;){const[,r,i,o]=s;e[r]=i||o,s=n.exec(t)}return e}function FR(t){return Object.entries(t).filter(([,e])=>e!=null).map(([e,n])=>`${e}=\"${n}\"`).join(\" \")}function zR(t){const{nodeName:e,name:n,getContent:s,parseAttributes:r=HR,serializeAttributes:i=FR,defaultAttributes:o={},selfClosing:l=!1,allowedAttributes:a}=t,c=n||e,u=d=>{if(!a)return d;const h={};return a.forEach(p=>{const m=typeof p==\"string\"?p:p.name,g=typeof p==\"string\"?void 0:p.skipIfDefault;if(m in d){const y=d[m];if(g!==void 0&&y===g)return;h[m]=y}}),h},f=c.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return{parseMarkdown:(d,h)=>{const p={...o,...d.attributes};if(l)return h.createNode(e,p);const m=s?s(d):d.content||\"\";return m?h.createNode(e,p,[h.createTextNode(m)]):h.createNode(e,p,[])},markdownTokenizer:{name:e,level:\"inline\",start(d){const h=l?new RegExp(`\\\\[${f}\\\\s*[^\\\\]]*\\\\]`):new RegExp(`\\\\[${f}\\\\s*[^\\\\]]*\\\\][\\\\s\\\\S]*?\\\\[\\\\/${f}\\\\]`),p=d.match(h),m=p?.index;return m!==void 0?m:-1},tokenize(d,h,p){const m=l?new RegExp(`^\\\\[${f}\\\\s*([^\\\\]]*)\\\\]`):new RegExp(`^\\\\[${f}\\\\s*([^\\\\]]*)\\\\]([\\\\s\\\\S]*?)\\\\[\\\\/${f}\\\\]`),g=d.match(m);if(!g)return;let y=\"\",S=\"\";if(l){const[,w]=g;S=w}else{const[,w,x]=g;S=w,y=x||\"\"}const b=r(S.trim());return{type:e,raw:g[0],content:y.trim(),attributes:b}}},renderMarkdown:d=>{let h=\"\";s?h=s(d):d.content&&d.content.length>0&&(h=d.content.filter(y=>y.type===\"text\").map(y=>y.text).join(\"\"));const p=u(d.attrs||{}),m=i(p),g=m?` ${m}`:\"\";return l?`[${c}${g}]`:`[${c}${g}]${h}[/${c}]`}}}function Df(t,e,n){var s,r,i,o;const l=t.split(`\n`),a=[];let c=\"\",u=0;const f=e.baseIndentSize||2;for(;u<l.length;){const d=l[u],h=d.match(e.itemPattern);if(!h){if(a.length>0)break;if(d.trim()===\"\"){u+=1,c=`${c}${d}\n`;continue}else return}const p=e.extractItemData(h),{indentLevel:m,mainContent:g}=p;c=`${c}${d}\n`;const y=[g];for(u+=1;u<l.length;){const x=l[u];if(x.trim()===\"\"){const k=l.slice(u+1).findIndex(T=>T.trim()!==\"\");if(k===-1)break;if((((r=(s=l[u+1+k].match(/^(\\s*)/))==null?void 0:s[1])==null?void 0:r.length)||0)>m){y.push(x),c=`${c}${x}\n`,u+=1;continue}else break}if((((o=(i=x.match(/^(\\s*)/))==null?void 0:i[1])==null?void 0:o.length)||0)>m)y.push(x),c=`${c}${x}\n`,u+=1;else break}let S;const b=y.slice(1);if(b.length>0){const x=b.map(E=>E.slice(m+f)).join(`\n`);x.trim()&&(e.customNestedParser?S=e.customNestedParser(x):S=n.blockTokens(x))}const w=e.createToken(p,S);a.push(w)}if(a.length!==0)return{items:a,raw:c}}function Th(t,e,n,s){if(!t||!Array.isArray(t.content))return\"\";const r=typeof n==\"function\"?n(s):n,[i,...o]=t.content,l=e.renderChildren([i]),a=[`${r}${l}`];return o&&o.length>0&&o.forEach(c=>{const u=e.renderChildren([c]);if(u){const f=u.split(`\n`).map(d=>d?e.indent(d):\"\").join(`\n`);a.push(f)}}),a.join(`\n`)}function VR(t,e,n={}){const{state:s}=e,{doc:r,tr:i}=s,o=t;r.descendants((l,a)=>{const c=i.mapping.map(a),u=i.mapping.map(a)+l.nodeSize;let f=null;if(l.marks.forEach(h=>{if(h!==o)return!1;f=h}),!f)return;let d=!1;if(Object.keys(n).forEach(h=>{n[h]!==f.attrs[h]&&(d=!0)}),d){const h=t.type.create({...t.attrs,...n});i.removeMark(c,u,t.type),i.addMark(c,u,h)}}),i.docChanged&&e.view.dispatch(i)}var $e=class ew extends Ch{constructor(){super(...arguments),this.type=\"node\"}static create(e={}){const n=typeof e==\"function\"?e():e;return new ew(n)}configure(e){return super.configure(e)}extend(e){const n=typeof e==\"function\"?e():e;return super.extend(n)}};function zs(t){return new vR({find:t.find,handler:({state:e,range:n,match:s,pasteEvent:r})=>{const i=ge(t.getAttributes,void 0,s,r);if(i===!1||i===null)return null;const{tr:o}=e,l=s[s.length-1],a=s[0];let c=n.to;if(l){const u=a.search(/\\S/),f=n.from+a.indexOf(l),d=f+l.length;if(xh(n.from,n.to,e.doc).filter(p=>p.mark.type.excluded.find(g=>g===t.type&&g!==p.mark.type)).filter(p=>p.to>f).length)return null;d<n.to&&o.delete(d,n.to),f>n.from&&o.delete(n.from+u,f),c=n.from+u+l.length,o.addMark(n.from+u,c,t.type.create(i||{})),o.removeStoredMark(t.type)}}})}function cg(t){return ad((e,n)=>({get(){return e(),t},set(s){t=s,requestAnimationFrame(()=>{requestAnimationFrame(()=>{n()})})}}))}var WR=class extends IR{constructor(t={}){return super(t),this.contentComponent=null,this.appContext=null,this.reactiveState=cg(this.view.state),this.reactiveExtensionStorage=cg(this.extensionStorage),this.on(\"beforeTransaction\",({nextState:e})=>{this.reactiveState.value=e,this.reactiveExtensionStorage.value=this.extensionStorage}),bc(this)}get state(){return this.reactiveState?this.reactiveState.value:this.view.state}get storage(){return this.reactiveExtensionStorage?this.reactiveExtensionStorage.value:super.storage}registerPlugin(t,e){const n=super.registerPlugin(t,e);return this.reactiveState&&(this.reactiveState.value=n),n}unregisterPlugin(t){const e=super.unregisterPlugin(t);return this.reactiveState&&e&&(this.reactiveState.value=e),e}},nL=Vo({name:\"EditorContent\",props:{editor:{default:null,type:Object}},setup(t){const e=sr(),n=kt();return Dy(()=>{const s=t.editor;s&&s.options.element&&e.value&&vi(()=>{var r;if(!e.value||!((r=s.view.dom)!=null&&r.parentNode))return;const i=xi(e.value);e.value.append(...s.view.dom.parentNode.childNodes),s.contentComponent=n.ctx._,n&&(s.appContext={...n.appContext,provides:n.provides}),s.setOptions({element:i}),s.createNodeViews()})}),Ar(()=>{const s=t.editor;s&&(s.contentComponent=null,s.appContext=null)}),{rootEl:e}},render(){return Uo(\"div\",{ref:t=>{this.rootEl=t}})}}),sL=(t={})=>{const e=od();return Mr(()=>{e.value=new WR(t)}),Ar(()=>{var n,s,r,i;const o=(s=(n=e.value)==null?void 0:n.view.dom)==null?void 0:s.parentNode,l=o?.cloneNode(!0);(r=o?.parentNode)==null||r.replaceChild(l,o),(i=e.value)==null||i.destroy()}),e},rL=class{constructor(t,{props:e={},editor:n}){this.destroyed=!1,this.editor=n,this.component=bc(t),this.el=document.createElement(\"div\"),this.props=Ho(e),this.renderedComponent=this.renderComponent()}get element(){return this.renderedComponent.el}get ref(){var t,e,n,s;return(e=(t=this.renderedComponent.vNode)==null?void 0:t.component)!=null&&e.exposed?this.renderedComponent.vNode.component.exposed:(s=(n=this.renderedComponent.vNode)==null?void 0:n.component)==null?void 0:s.proxy}renderComponent(){if(this.destroyed)return this.renderedComponent;let t=Uo(this.component,this.props);return this.editor.appContext&&(t.appContext=this.editor.appContext),typeof document<\"u\"&&this.el&&la(t,this.el),{vNode:t,destroy:()=>{this.el&&la(null,this.el),this.el=null,t=null},el:this.el?this.el.firstElementChild:null}}updateProps(t={}){this.destroyed||(Object.entries(t).forEach(([e,n])=>{this.props[e]=n}),this.renderComponent())}destroy(){this.destroyed||(this.destroyed=!0,this.renderedComponent.destroy())}},Na=(t,e)=>{if(t===\"slot\")return 0;if(t instanceof Function)return t(e);const{children:n,...s}=e??{};if(t===\"svg\")throw new Error(\"SVG elements are not supported in the JSX syntax, use the array syntax instead\");return[t,s,n]},jR=/^\\s*>\\s$/,UR=$e.create({name:\"blockquote\",addOptions(){return{HTMLAttributes:{}}},content:\"block+\",group:\"block\",defining:!0,parseHTML(){return[{tag:\"blockquote\"}]},renderHTML({HTMLAttributes:t}){return Na(\"blockquote\",{...he(this.options.HTMLAttributes,t),children:Na(\"slot\",{})})},parseMarkdown:(t,e)=>e.createNode(\"blockquote\",void 0,e.parseChildren(t.tokens||[])),renderMarkdown:(t,e)=>{if(!t.content)return\"\";const n=\">\",s=[];return t.content.forEach(r=>{const l=e.renderChildren([r]).split(`\n`).map(a=>a.trim()===\"\"?n:`${n} ${a}`);s.push(l.join(`\n`))}),s.join(`\n${n}\n`)},addCommands(){return{setBlockquote:()=>({commands:t})=>t.wrapIn(this.name),toggleBlockquote:()=>({commands:t})=>t.toggleWrap(this.name),unsetBlockquote:()=>({commands:t})=>t.lift(this.name)}},addKeyboardShortcuts(){return{\"Mod-Shift-b\":()=>this.editor.commands.toggleBlockquote()}},addInputRules(){return[yi({find:jR,type:this.type})]}}),KR=/(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))$/,qR=/(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))/g,JR=/(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))$/,GR=/(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))/g,YR=is.create({name:\"bold\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"strong\"},{tag:\"b\",getAttrs:t=>t.style.fontWeight!==\"normal\"&&null},{style:\"font-weight=400\",clearMark:t=>t.type.name===this.name},{style:\"font-weight\",getAttrs:t=>/^(bold(er)?|[5-9]\\d{2,})$/.test(t)&&null}]},renderHTML({HTMLAttributes:t}){return Na(\"strong\",{...he(this.options.HTMLAttributes,t),children:Na(\"slot\",{})})},markdownTokenName:\"strong\",parseMarkdown:(t,e)=>e.applyMark(\"bold\",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`**${e.renderChildren(t)}**`,addCommands(){return{setBold:()=>({commands:t})=>t.setMark(this.name),toggleBold:()=>({commands:t})=>t.toggleMark(this.name),unsetBold:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-b\":()=>this.editor.commands.toggleBold(),\"Mod-B\":()=>this.editor.commands.toggleBold()}},addInputRules(){return[wr({find:KR,type:this.type}),wr({find:JR,type:this.type})]},addPasteRules(){return[zs({find:qR,type:this.type}),zs({find:GR,type:this.type})]}}),XR=/(^|[^`])`([^`]+)`(?!`)$/,QR=/(^|[^`])`([^`]+)`(?!`)/g,ZR=is.create({name:\"code\",addOptions(){return{HTMLAttributes:{}}},excludes:\"_\",code:!0,exitable:!0,parseHTML(){return[{tag:\"code\"}]},renderHTML({HTMLAttributes:t}){return[\"code\",he(this.options.HTMLAttributes,t),0]},markdownTokenName:\"codespan\",parseMarkdown:(t,e)=>e.applyMark(\"code\",[{type:\"text\",text:t.text||\"\"}]),renderMarkdown:(t,e)=>t.content?`\\`${e.renderChildren(t.content)}\\``:\"\",addCommands(){return{setCode:()=>({commands:t})=>t.setMark(this.name),toggleCode:()=>({commands:t})=>t.toggleMark(this.name),unsetCode:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-e\":()=>this.editor.commands.toggleCode()}},addInputRules(){return[wr({find:XR,type:this.type})]},addPasteRules(){return[zs({find:QR,type:this.type})]}}),Ou=4,eI=/^```([a-z]+)?[\\s\\n]$/,tI=/^~~~([a-z]+)?[\\s\\n]$/,nI=$e.create({name:\"codeBlock\",addOptions(){return{languageClassPrefix:\"language-\",exitOnTripleEnter:!0,exitOnArrowDown:!0,defaultLanguage:null,enableTabIndentation:!1,tabSize:Ou,HTMLAttributes:{}}},content:\"text*\",marks:\"\",group:\"block\",code:!0,defining:!0,addAttributes(){return{language:{default:this.options.defaultLanguage,parseHTML:t=>{var e;const{languageClassPrefix:n}=this.options;if(!n)return null;const i=[...((e=t.firstElementChild)==null?void 0:e.classList)||[]].filter(o=>o.startsWith(n)).map(o=>o.replace(n,\"\"))[0];return i||null},rendered:!1}}},parseHTML(){return[{tag:\"pre\",preserveWhitespace:\"full\"}]},renderHTML({node:t,HTMLAttributes:e}){return[\"pre\",he(this.options.HTMLAttributes,e),[\"code\",{class:t.attrs.language?this.options.languageClassPrefix+t.attrs.language:null},0]]},markdownTokenName:\"code\",parseMarkdown:(t,e)=>{var n;return((n=t.raw)==null?void 0:n.startsWith(\"```\"))===!1&&t.codeBlockStyle!==\"indented\"?[]:e.createNode(\"codeBlock\",{language:t.lang||null},t.text?[e.createTextNode(t.text)]:[])},renderMarkdown:(t,e)=>{var n;let s=\"\";const r=((n=t.attrs)==null?void 0:n.language)||\"\";return t.content?s=[`\\`\\`\\`${r}`,e.renderChildren(t.content),\"```\"].join(`\n`):s=`\\`\\`\\`${r}\n\n\\`\\`\\``,s},addCommands(){return{setCodeBlock:t=>({commands:e})=>e.setNode(this.name,t),toggleCodeBlock:t=>({commands:e})=>e.toggleNode(this.name,\"paragraph\",t)}},addKeyboardShortcuts(){return{\"Mod-Alt-c\":()=>this.editor.commands.toggleCodeBlock(),Backspace:()=>{const{empty:t,$anchor:e}=this.editor.state.selection,n=e.pos===1;return!t||e.parent.type.name!==this.name?!1:n||!e.parent.textContent.length?this.editor.commands.clearNodes():!1},Tab:({editor:t})=>{var e;if(!this.options.enableTabIndentation)return!1;const n=(e=this.options.tabSize)!=null?e:Ou,{state:s}=t,{selection:r}=s,{$from:i,empty:o}=r;if(i.parent.type!==this.type)return!1;const l=\" \".repeat(n);return o?t.commands.insertContent(l):t.commands.command(({tr:a})=>{const{from:c,to:u}=r,h=s.doc.textBetween(c,u,`\n`,`\n`).split(`\n`).map(p=>l+p).join(`\n`);return a.replaceWith(c,u,s.schema.text(h)),!0})},\"Shift-Tab\":({editor:t})=>{var e;if(!this.options.enableTabIndentation)return!1;const n=(e=this.options.tabSize)!=null?e:Ou,{state:s}=t,{selection:r}=s,{$from:i,empty:o}=r;return i.parent.type!==this.type?!1:o?t.commands.command(({tr:l})=>{var a;const{pos:c}=i,u=i.start(),f=i.end(),h=s.doc.textBetween(u,f,`\n`,`\n`).split(`\n`);let p=0,m=0;const g=c-u;for(let E=0;E<h.length;E+=1){if(m+h[E].length>=g){p=E;break}m+=h[E].length+1}const S=((a=h[p].match(/^ */))==null?void 0:a[0])||\"\",b=Math.min(S.length,n);if(b===0)return!0;let w=u;for(let E=0;E<p;E+=1)w+=h[E].length+1;return l.delete(w,w+b),c-w<=b&&l.setSelection(Z.create(l.doc,w)),!0}):t.commands.command(({tr:l})=>{const{from:a,to:c}=r,d=s.doc.textBetween(a,c,`\n`,`\n`).split(`\n`).map(h=>{var p;const m=((p=h.match(/^ */))==null?void 0:p[0])||\"\",g=Math.min(m.length,n);return h.slice(g)}).join(`\n`);return l.replaceWith(a,c,s.schema.text(d)),!0})},Enter:({editor:t})=>{if(!this.options.exitOnTripleEnter)return!1;const{state:e}=t,{selection:n}=e,{$from:s,empty:r}=n;if(!r||s.parent.type!==this.type)return!1;const i=s.parentOffset===s.parent.nodeSize-2,o=s.parent.textContent.endsWith(`\n\n`);return!i||!o?!1:t.chain().command(({tr:l})=>(l.delete(s.pos-2,s.pos),!0)).exitCode().run()},ArrowDown:({editor:t})=>{if(!this.options.exitOnArrowDown)return!1;const{state:e}=t,{selection:n,doc:s}=e,{$from:r,empty:i}=n;if(!i||r.parent.type!==this.type||!(r.parentOffset===r.parent.nodeSize-2))return!1;const l=r.after();return l===void 0?!1:s.nodeAt(l)?t.commands.command(({tr:c})=>(c.setSelection(ee.near(s.resolve(l))),!0)):t.commands.exitCode()}}},addInputRules(){return[_f({find:eI,type:this.type,getAttributes:t=>({language:t[1]})}),_f({find:tI,type:this.type,getAttributes:t=>({language:t[1]})})]},addProseMirrorPlugins(){return[new we({key:new Ne(\"codeBlockVSCodeHandler\"),props:{handlePaste:(t,e)=>{if(!e.clipboardData||this.editor.isActive(this.type.name))return!1;const n=e.clipboardData.getData(\"text/plain\"),s=e.clipboardData.getData(\"vscode-editor-data\"),r=s?JSON.parse(s):void 0,i=r?.mode;if(!n||!i)return!1;const{tr:o,schema:l}=t.state,a=l.text(n.replace(/\\r\\n?/g,`\n`));return o.replaceSelectionWith(this.type.create({language:i},a)),o.selection.$from.parent.type!==this.type&&o.setSelection(Z.near(o.doc.resolve(Math.max(0,o.selection.from-2)))),o.setMeta(\"paste\",!0),t.dispatch(o),!0}}})]}}),sI=$e.create({name:\"doc\",topNode:!0,content:\"block+\",renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,`\n\n`):\"\"}),rI=$e.create({name:\"hardBreak\",markdownTokenName:\"br\",addOptions(){return{keepMarks:!0,HTMLAttributes:{}}},inline:!0,group:\"inline\",selectable:!1,linebreakReplacement:!0,parseHTML(){return[{tag:\"br\"}]},renderHTML({HTMLAttributes:t}){return[\"br\",he(this.options.HTMLAttributes,t)]},renderText(){return`\n`},renderMarkdown:()=>`  \n`,parseMarkdown:()=>({type:\"hardBreak\"}),addCommands(){return{setHardBreak:()=>({commands:t,chain:e,state:n,editor:s})=>t.first([()=>t.exitCode(),()=>t.command(()=>{const{selection:r,storedMarks:i}=n;if(r.$from.parent.type.spec.isolating)return!1;const{keepMarks:o}=this.options,{splittableMarks:l}=s.extensionManager,a=i||r.$to.parentOffset&&r.$from.marks();return e().insertContent({type:this.name}).command(({tr:c,dispatch:u})=>{if(u&&a&&o){const f=a.filter(d=>l.includes(d.type.name));c.ensureMarks(f)}return!0}).run()})])}},addKeyboardShortcuts(){return{\"Mod-Enter\":()=>this.editor.commands.setHardBreak(),\"Shift-Enter\":()=>this.editor.commands.setHardBreak()}}}),tw=$e.create({name:\"heading\",addOptions(){return{levels:[1,2,3,4,5,6],HTMLAttributes:{}}},content:\"inline*\",group:\"block\",defining:!0,addAttributes(){return{level:{default:1,rendered:!1}}},parseHTML(){return this.options.levels.map(t=>({tag:`h${t}`,attrs:{level:t}}))},renderHTML({node:t,HTMLAttributes:e}){return[`h${this.options.levels.includes(t.attrs.level)?t.attrs.level:this.options.levels[0]}`,he(this.options.HTMLAttributes,e),0]},parseMarkdown:(t,e)=>e.createNode(\"heading\",{level:t.depth||1},e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>{var n;const s=(n=t.attrs)!=null&&n.level?parseInt(t.attrs.level,10):1,r=\"#\".repeat(s);return t.content?`${r} ${e.renderChildren(t.content)}`:\"\"},addCommands(){return{setHeading:t=>({commands:e})=>this.options.levels.includes(t.level)?e.setNode(this.name,t):!1,toggleHeading:t=>({commands:e})=>this.options.levels.includes(t.level)?e.toggleNode(this.name,\"paragraph\",t):!1}},addKeyboardShortcuts(){return this.options.levels.reduce((t,e)=>({...t,[`Mod-Alt-${e}`]:()=>this.editor.commands.toggleHeading({level:e})}),{})},addInputRules(){return this.options.levels.map(t=>_f({find:new RegExp(`^(#{${Math.min(...this.options.levels)},${t}})\\\\s$`),type:this.type,getAttributes:{level:t}}))}}),iL=tw,iI=$e.create({name:\"horizontalRule\",addOptions(){return{HTMLAttributes:{},nextNodeType:\"paragraph\"}},group:\"block\",parseHTML(){return[{tag:\"hr\"}]},renderHTML({HTMLAttributes:t}){return[\"hr\",he(this.options.HTMLAttributes,t)]},markdownTokenName:\"hr\",parseMarkdown:(t,e)=>e.createNode(\"horizontalRule\"),renderMarkdown:()=>\"---\",addCommands(){return{setHorizontalRule:()=>({chain:t,state:e})=>{if(!PR(e,e.schema.nodes[this.name]))return!1;const{selection:n}=e,{$to:s}=n,r=t();return LS(n)?r.insertContentAt(s.pos,{type:this.name}):r.insertContent({type:this.name}),r.command(({state:i,tr:o,dispatch:l})=>{if(l){const{$to:a}=o.selection,c=a.end();if(a.nodeAfter)a.nodeAfter.isTextblock?o.setSelection(Z.create(o.doc,a.pos+1)):a.nodeAfter.isBlock?o.setSelection(Q.create(o.doc,a.pos)):o.setSelection(Z.create(o.doc,a.pos));else{const u=i.schema.nodes[this.options.nextNodeType]||a.parent.type.contentMatch.defaultType,f=u?.create();f&&(o.insert(c,f),o.setSelection(Z.create(o.doc,c+1)))}o.scrollIntoView()}return!0}).run()}}},addInputRules(){return[ZS({find:/^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,type:this.type})]}}),oI=/(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))$/,lI=/(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))/g,aI=/(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))$/,cI=/(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))/g,uI=is.create({name:\"italic\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"em\"},{tag:\"i\",getAttrs:t=>t.style.fontStyle!==\"normal\"&&null},{style:\"font-style=normal\",clearMark:t=>t.type.name===this.name},{style:\"font-style=italic\"}]},renderHTML({HTMLAttributes:t}){return[\"em\",he(this.options.HTMLAttributes,t),0]},addCommands(){return{setItalic:()=>({commands:t})=>t.setMark(this.name),toggleItalic:()=>({commands:t})=>t.toggleMark(this.name),unsetItalic:()=>({commands:t})=>t.unsetMark(this.name)}},markdownTokenName:\"em\",parseMarkdown:(t,e)=>e.applyMark(\"italic\",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`*${e.renderChildren(t)}*`,addKeyboardShortcuts(){return{\"Mod-i\":()=>this.editor.commands.toggleItalic(),\"Mod-I\":()=>this.editor.commands.toggleItalic()}},addInputRules(){return[wr({find:oI,type:this.type}),wr({find:aI,type:this.type})]},addPasteRules(){return[zs({find:lI,type:this.type}),zs({find:cI,type:this.type})]}});const fI=\"aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2\",dI=\"ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2\",Pf=\"numeric\",Lf=\"ascii\",Bf=\"alpha\",to=\"asciinumeric\",zi=\"alphanumeric\",$f=\"domain\",nw=\"emoji\",hI=\"scheme\",pI=\"slashscheme\",Ru=\"whitespace\";function mI(t,e){return t in e||(e[t]=[]),e[t]}function tr(t,e,n){e[Pf]&&(e[to]=!0,e[zi]=!0),e[Lf]&&(e[to]=!0,e[Bf]=!0),e[to]&&(e[zi]=!0),e[Bf]&&(e[zi]=!0),e[zi]&&(e[$f]=!0),e[nw]&&(e[$f]=!0);for(const s in e){const r=mI(s,n);r.indexOf(t)<0&&r.push(t)}}function gI(t,e){const n={};for(const s in e)e[s].indexOf(t)>=0&&(n[s]=!0);return n}function Nt(t=null){this.j={},this.jr=[],this.jd=null,this.t=t}Nt.groups={};Nt.prototype={accepts(){return!!this.t},go(t){const e=this,n=e.j[t];if(n)return n;for(let s=0;s<e.jr.length;s++){const r=e.jr[s][0],i=e.jr[s][1];if(i&&r.test(t))return i}return e.jd},has(t,e=!1){return e?t in this.j:!!this.go(t)},ta(t,e,n,s){for(let r=0;r<t.length;r++)this.tt(t[r],e,n,s)},tr(t,e,n,s){s=s||Nt.groups;let r;return e&&e.j?r=e:(r=new Nt(e),n&&s&&tr(e,n,s)),this.jr.push([t,r]),r},ts(t,e,n,s){let r=this;const i=t.length;if(!i)return r;for(let o=0;o<i-1;o++)r=r.tt(t[o]);return r.tt(t[i-1],e,n,s)},tt(t,e,n,s){s=s||Nt.groups;const r=this;if(e&&e.j)return r.j[t]=e,e;const i=e;let o,l=r.go(t);if(l?(o=new Nt,Object.assign(o.j,l.j),o.jr.push.apply(o.jr,l.jr),o.jd=l.jd,o.t=l.t):o=new Nt,i){if(s)if(o.t&&typeof o.t==\"string\"){const a=Object.assign(gI(o.t,s),n);tr(i,a,s)}else n&&tr(i,n,s);o.t=i}return r.j[t]=o,o}};const le=(t,e,n,s,r)=>t.ta(e,n,s,r),_e=(t,e,n,s,r)=>t.tr(e,n,s,r),ug=(t,e,n,s,r)=>t.ts(e,n,s,r),z=(t,e,n,s,r)=>t.tt(e,n,s,r),Bn=\"WORD\",Hf=\"UWORD\",sw=\"ASCIINUMERICAL\",rw=\"ALPHANUMERICAL\",_o=\"LOCALHOST\",Ff=\"TLD\",zf=\"UTLD\",Fl=\"SCHEME\",Vr=\"SLASH_SCHEME\",Eh=\"NUM\",Vf=\"WS\",Mh=\"NL\",no=\"OPENBRACE\",so=\"CLOSEBRACE\",Oa=\"OPENBRACKET\",Ra=\"CLOSEBRACKET\",Ia=\"OPENPAREN\",_a=\"CLOSEPAREN\",Da=\"OPENANGLEBRACKET\",Pa=\"CLOSEANGLEBRACKET\",La=\"FULLWIDTHLEFTPAREN\",Ba=\"FULLWIDTHRIGHTPAREN\",$a=\"LEFTCORNERBRACKET\",Ha=\"RIGHTCORNERBRACKET\",Fa=\"LEFTWHITECORNERBRACKET\",za=\"RIGHTWHITECORNERBRACKET\",Va=\"FULLWIDTHLESSTHAN\",Wa=\"FULLWIDTHGREATERTHAN\",ja=\"AMPERSAND\",Ua=\"APOSTROPHE\",Ka=\"ASTERISK\",Cs=\"AT\",qa=\"BACKSLASH\",Ja=\"BACKTICK\",Ga=\"CARET\",Ts=\"COLON\",Ah=\"COMMA\",Ya=\"DOLLAR\",bn=\"DOT\",Xa=\"EQUALS\",Nh=\"EXCLAMATION\",qt=\"HYPHEN\",ro=\"PERCENT\",Qa=\"PIPE\",Za=\"PLUS\",ec=\"POUND\",io=\"QUERY\",Oh=\"QUOTE\",iw=\"FULLWIDTHMIDDLEDOT\",Rh=\"SEMI\",Sn=\"SLASH\",oo=\"TILDE\",tc=\"UNDERSCORE\",ow=\"EMOJI\",nc=\"SYM\";var lw=Object.freeze({__proto__:null,ALPHANUMERICAL:rw,AMPERSAND:ja,APOSTROPHE:Ua,ASCIINUMERICAL:sw,ASTERISK:Ka,AT:Cs,BACKSLASH:qa,BACKTICK:Ja,CARET:Ga,CLOSEANGLEBRACKET:Pa,CLOSEBRACE:so,CLOSEBRACKET:Ra,CLOSEPAREN:_a,COLON:Ts,COMMA:Ah,DOLLAR:Ya,DOT:bn,EMOJI:ow,EQUALS:Xa,EXCLAMATION:Nh,FULLWIDTHGREATERTHAN:Wa,FULLWIDTHLEFTPAREN:La,FULLWIDTHLESSTHAN:Va,FULLWIDTHMIDDLEDOT:iw,FULLWIDTHRIGHTPAREN:Ba,HYPHEN:qt,LEFTCORNERBRACKET:$a,LEFTWHITECORNERBRACKET:Fa,LOCALHOST:_o,NL:Mh,NUM:Eh,OPENANGLEBRACKET:Da,OPENBRACE:no,OPENBRACKET:Oa,OPENPAREN:Ia,PERCENT:ro,PIPE:Qa,PLUS:Za,POUND:ec,QUERY:io,QUOTE:Oh,RIGHTCORNERBRACKET:Ha,RIGHTWHITECORNERBRACKET:za,SCHEME:Fl,SEMI:Rh,SLASH:Sn,SLASH_SCHEME:Vr,SYM:nc,TILDE:oo,TLD:Ff,UNDERSCORE:tc,UTLD:zf,UWORD:Hf,WORD:Bn,WS:Vf});const Dn=/[a-z]/,Di=new RegExp(\"\\\\p{L}\",\"u\"),Iu=new RegExp(\"\\\\p{Emoji}\",\"u\"),Pn=/\\d/,_u=/\\s/,fg=\"\\r\",Du=`\n`,yI=\"️\",bI=\"‍\",Pu=\"￼\";let wl=null,xl=null;function SI(t=[]){const e={};Nt.groups=e;const n=new Nt;wl==null&&(wl=dg(fI)),xl==null&&(xl=dg(dI)),z(n,\"'\",Ua),z(n,\"{\",no),z(n,\"}\",so),z(n,\"[\",Oa),z(n,\"]\",Ra),z(n,\"(\",Ia),z(n,\")\",_a),z(n,\"<\",Da),z(n,\">\",Pa),z(n,\"（\",La),z(n,\"）\",Ba),z(n,\"「\",$a),z(n,\"」\",Ha),z(n,\"『\",Fa),z(n,\"』\",za),z(n,\"＜\",Va),z(n,\"＞\",Wa),z(n,\"&\",ja),z(n,\"*\",Ka),z(n,\"@\",Cs),z(n,\"`\",Ja),z(n,\"^\",Ga),z(n,\":\",Ts),z(n,\",\",Ah),z(n,\"$\",Ya),z(n,\".\",bn),z(n,\"=\",Xa),z(n,\"!\",Nh),z(n,\"-\",qt),z(n,\"%\",ro),z(n,\"|\",Qa),z(n,\"+\",Za),z(n,\"#\",ec),z(n,\"?\",io),z(n,'\"',Oh),z(n,\"/\",Sn),z(n,\";\",Rh),z(n,\"~\",oo),z(n,\"_\",tc),z(n,\"\\\\\",qa),z(n,\"・\",iw);const s=_e(n,Pn,Eh,{[Pf]:!0});_e(s,Pn,s);const r=_e(s,Dn,sw,{[to]:!0}),i=_e(s,Di,rw,{[zi]:!0}),o=_e(n,Dn,Bn,{[Lf]:!0});_e(o,Pn,r),_e(o,Dn,o),_e(r,Pn,r),_e(r,Dn,r);const l=_e(n,Di,Hf,{[Bf]:!0});_e(l,Dn),_e(l,Pn,i),_e(l,Di,l),_e(i,Pn,i),_e(i,Dn),_e(i,Di,i);const a=z(n,Du,Mh,{[Ru]:!0}),c=z(n,fg,Vf,{[Ru]:!0}),u=_e(n,_u,Vf,{[Ru]:!0});z(n,Pu,u),z(c,Du,a),z(c,Pu,u),_e(c,_u,u),z(u,fg),z(u,Du),_e(u,_u,u),z(u,Pu,u);const f=_e(n,Iu,ow,{[nw]:!0});z(f,\"#\"),_e(f,Iu,f),z(f,yI,f);const d=z(f,bI);z(d,\"#\"),_e(d,Iu,f);const h=[[Dn,o],[Pn,r]],p=[[Dn,null],[Di,l],[Pn,i]];for(let m=0;m<wl.length;m++)hs(n,wl[m],Ff,Bn,h);for(let m=0;m<xl.length;m++)hs(n,xl[m],zf,Hf,p);tr(Ff,{tld:!0,ascii:!0},e),tr(zf,{utld:!0,alpha:!0},e),hs(n,\"file\",Fl,Bn,h),hs(n,\"mailto\",Fl,Bn,h),hs(n,\"http\",Vr,Bn,h),hs(n,\"https\",Vr,Bn,h),hs(n,\"ftp\",Vr,Bn,h),hs(n,\"ftps\",Vr,Bn,h),tr(Fl,{scheme:!0,ascii:!0},e),tr(Vr,{slashscheme:!0,ascii:!0},e),t=t.sort((m,g)=>m[0]>g[0]?1:-1);for(let m=0;m<t.length;m++){const g=t[m][0],S=t[m][1]?{[hI]:!0}:{[pI]:!0};g.indexOf(\"-\")>=0?S[$f]=!0:Dn.test(g)?Pn.test(g)?S[to]=!0:S[Lf]=!0:S[Pf]=!0,ug(n,g,g,S)}return ug(n,\"localhost\",_o,{ascii:!0}),n.jd=new Nt(nc),{start:n,tokens:Object.assign({groups:e},lw)}}function aw(t,e){const n=wI(e.replace(/[A-Z]/g,l=>l.toLowerCase())),s=n.length,r=[];let i=0,o=0;for(;o<s;){let l=t,a=null,c=0,u=null,f=-1,d=-1;for(;o<s&&(a=l.go(n[o]));)l=a,l.accepts()?(f=0,d=0,u=l):f>=0&&(f+=n[o].length,d++),c+=n[o].length,i+=n[o].length,o++;i-=f,o-=d,c-=f,r.push({t:u.t,v:e.slice(i-c,i),s:i-c,e:i})}return r}function wI(t){const e=[],n=t.length;let s=0;for(;s<n;){let r=t.charCodeAt(s),i,o=r<55296||r>56319||s+1===n||(i=t.charCodeAt(s+1))<56320||i>57343?t[s]:t.slice(s,s+2);e.push(o),s+=o.length}return e}function hs(t,e,n,s,r){let i;const o=e.length;for(let l=0;l<o-1;l++){const a=e[l];t.j[a]?i=t.j[a]:(i=new Nt(s),i.jr=r.slice(),t.j[a]=i),t=i}return i=new Nt(n),i.jr=r.slice(),t.j[e[o-1]]=i,i}function dg(t){const e=[],n=[];let s=0,r=\"0123456789\";for(;s<t.length;){let i=0;for(;r.indexOf(t[s+i])>=0;)i++;if(i>0){e.push(n.join(\"\"));for(let o=parseInt(t.substring(s,s+i),10);o>0;o--)n.pop();s+=i}else n.push(t[s]),s++}return e}const Do={defaultProtocol:\"http\",events:null,format:hg,formatHref:hg,nl2br:!1,tagName:\"a\",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function Ih(t,e=null){let n=Object.assign({},Do);t&&(n=Object.assign(n,t instanceof Ih?t.o:t));const s=n.ignoreTags,r=[];for(let i=0;i<s.length;i++)r.push(s[i].toUpperCase());this.o=n,e&&(this.defaultRender=e),this.ignoreTags=r}Ih.prototype={o:Do,ignoreTags:[],defaultRender(t){return t},check(t){return this.get(\"validate\",t.toString(),t)},get(t,e,n){const s=e!=null;let r=this.o[t];return r&&(typeof r==\"object\"?(r=n.t in r?r[n.t]:Do[t],typeof r==\"function\"&&s&&(r=r(e,n))):typeof r==\"function\"&&s&&(r=r(e,n.t,n)),r)},getObj(t,e,n){let s=this.o[t];return typeof s==\"function\"&&e!=null&&(s=s(e,n.t,n)),s},render(t){const e=t.render(this);return(this.get(\"render\",null,t)||this.defaultRender)(e,t.t,t)}};function hg(t){return t}function cw(t,e){this.t=\"token\",this.v=t,this.tk=e}cw.prototype={isLink:!1,toString(){return this.v},toHref(t){return this.toString()},toFormattedString(t){const e=this.toString(),n=t.get(\"truncate\",e,this),s=t.get(\"format\",e,this);return n&&s.length>n?s.substring(0,n)+\"…\":s},toFormattedHref(t){return t.get(\"formatHref\",this.toHref(t.get(\"defaultProtocol\")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(t=Do.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(t),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(t){return{type:this.t,value:this.toFormattedString(t),isLink:this.isLink,href:this.toFormattedHref(t),start:this.startIndex(),end:this.endIndex()}},validate(t){return t.get(\"validate\",this.toString(),this)},render(t){const e=this,n=this.toHref(t.get(\"defaultProtocol\")),s=t.get(\"formatHref\",n,this),r=t.get(\"tagName\",n,e),i=this.toFormattedString(t),o={},l=t.get(\"className\",n,e),a=t.get(\"target\",n,e),c=t.get(\"rel\",n,e),u=t.getObj(\"attributes\",n,e),f=t.getObj(\"events\",n,e);return o.href=s,l&&(o.class=l),a&&(o.target=a),c&&(o.rel=c),u&&Object.assign(o,u),{tagName:r,attributes:o,content:i,eventListeners:f}}};function Uc(t,e){class n extends cw{constructor(r,i){super(r,i),this.t=t}}for(const s in e)n.prototype[s]=e[s];return n.t=t,n}const pg=Uc(\"email\",{isLink:!0,toHref(){return\"mailto:\"+this.toString()}}),mg=Uc(\"text\"),xI=Uc(\"nl\"),Cl=Uc(\"url\",{isLink:!0,toHref(t=Do.defaultProtocol){return this.hasProtocol()?this.v:`${t}://${this.v}`},hasProtocol(){const t=this.tk;return t.length>=2&&t[0].t!==_o&&t[1].t===Ts}}),Kt=t=>new Nt(t);function CI({groups:t}){const e=t.domain.concat([ja,Ka,Cs,qa,Ja,Ga,Ya,Xa,qt,Eh,ro,Qa,Za,ec,Sn,nc,oo,tc]),n=[Ua,Ts,Ah,bn,Nh,ro,io,Oh,Rh,Da,Pa,no,so,Ra,Oa,Ia,_a,La,Ba,$a,Ha,Fa,za,Va,Wa],s=[ja,Ua,Ka,qa,Ja,Ga,Ya,Xa,qt,no,so,ro,Qa,Za,ec,io,Sn,nc,oo,tc],r=Kt(),i=z(r,oo);le(i,s,i),le(i,t.domain,i);const o=Kt(),l=Kt(),a=Kt();le(r,t.domain,o),le(r,t.scheme,l),le(r,t.slashscheme,a),le(o,s,i),le(o,t.domain,o);const c=z(o,Cs);z(i,Cs,c),z(l,Cs,c),z(a,Cs,c);const u=z(i,bn);le(u,s,i),le(u,t.domain,i);const f=Kt();le(c,t.domain,f),le(f,t.domain,f);const d=z(f,bn);le(d,t.domain,f);const h=Kt(pg);le(d,t.tld,h),le(d,t.utld,h),z(c,_o,h);const p=z(f,qt);z(p,qt,p),le(p,t.domain,f),le(h,t.domain,f),z(h,bn,d),z(h,qt,p);const m=z(h,Ts);le(m,t.numeric,pg);const g=z(o,qt),y=z(o,bn);z(g,qt,g),le(g,t.domain,o),le(y,s,i),le(y,t.domain,o);const S=Kt(Cl);le(y,t.tld,S),le(y,t.utld,S),le(S,t.domain,o),le(S,s,i),z(S,bn,y),z(S,qt,g),z(S,Cs,c);const b=z(S,Ts),w=Kt(Cl);le(b,t.numeric,w);const x=Kt(Cl),E=Kt();le(x,e,x),le(x,n,E),le(E,e,x),le(E,n,E),z(S,Sn,x),z(w,Sn,x);const k=z(l,Ts),A=z(a,Ts),v=z(A,Sn),T=z(v,Sn);le(l,t.domain,o),z(l,bn,y),z(l,qt,g),le(a,t.domain,o),z(a,bn,y),z(a,qt,g),le(k,t.domain,x),z(k,Sn,x),z(k,io,x),le(T,t.domain,x),le(T,e,x),z(T,Sn,x);const O=[[no,so],[Oa,Ra],[Ia,_a],[Da,Pa],[La,Ba],[$a,Ha],[Fa,za],[Va,Wa]];for(let N=0;N<O.length;N++){const[_,F]=O[N],j=z(x,_);z(E,_,j),z(j,F,x);const R=Kt(Cl);le(j,e,R);const V=Kt();le(j,n),le(R,e,R),le(R,n,V),le(V,e,R),le(V,n,V),z(R,F,x),z(V,F,x)}return z(r,_o,S),z(r,Mh,xI),{start:r,tokens:lw}}function vI(t,e,n){let s=n.length,r=0,i=[],o=[];for(;r<s;){let l=t,a=null,c=null,u=0,f=null,d=-1;for(;r<s&&!(a=l.go(n[r].t));)o.push(n[r++]);for(;r<s&&(c=a||l.go(n[r].t));)a=null,l=c,l.accepts()?(d=0,f=l):d>=0&&d++,r++,u++;if(d<0)r-=u,r<s&&(o.push(n[r]),r++);else{o.length>0&&(i.push(Lu(mg,e,o)),o=[]),r-=d,u-=d;const h=f.t,p=n.slice(r-u,r);i.push(Lu(h,e,p))}}return o.length>0&&i.push(Lu(mg,e,o)),i}function Lu(t,e,n){const s=n[0].s,r=n[n.length-1].e,i=e.slice(s,r);return new t(i,n)}const kI=typeof console<\"u\"&&console&&console.warn||(()=>{}),TI=\"until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.\",Ee={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function EI(){return Nt.groups={},Ee.scanner=null,Ee.parser=null,Ee.tokenQueue=[],Ee.pluginQueue=[],Ee.customSchemes=[],Ee.initialized=!1,Ee}function gg(t,e=!1){if(Ee.initialized&&kI(`linkifyjs: already initialized - will not register custom scheme \"${t}\" ${TI}`),!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(t))throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);Ee.customSchemes.push([t,e])}function MI(){Ee.scanner=SI(Ee.customSchemes);for(let t=0;t<Ee.tokenQueue.length;t++)Ee.tokenQueue[t][1]({scanner:Ee.scanner});Ee.parser=CI(Ee.scanner.tokens);for(let t=0;t<Ee.pluginQueue.length;t++)Ee.pluginQueue[t][1]({scanner:Ee.scanner,parser:Ee.parser});return Ee.initialized=!0,Ee}function _h(t){return Ee.initialized||MI(),vI(Ee.parser.start,t,aw(Ee.scanner.start,t))}_h.scan=aw;function uw(t,e=null,n=null){if(e&&typeof e==\"object\"){if(n)throw Error(`linkifyjs: Invalid link type ${e}; must be a string`);n=e,e=null}const s=new Ih(n),r=_h(t),i=[];for(let o=0;o<r.length;o++){const l=r[o];l.isLink&&(!e||l.t===e)&&s.check(l)&&i.push(l.toFormattedObject(s))}return i}var Dh=\"[\\0-   ᠎ -\\u2029 　]\",AI=new RegExp(Dh),NI=new RegExp(`${Dh}$`),OI=new RegExp(Dh,\"g\");function RI(t){return t.length===1?t[0].isLink:t.length===3&&t[1].isLink?[\"()\",\"[]\"].includes(t[0].value+t[2].value):!1}function II(t){return new we({key:new Ne(\"autolink\"),appendTransaction:(e,n,s)=>{const r=e.some(c=>c.docChanged)&&!n.doc.eq(s.doc),i=e.some(c=>c.getMeta(\"preventAutolink\"));if(!r||i)return;const{tr:o}=s,l=ES(n.doc,[...e]);if(DS(l).forEach(({newRange:c})=>{const u=PO(s.doc,c,h=>h.isTextblock);let f,d;if(u.length>1)f=u[0],d=s.doc.textBetween(f.pos,f.pos+f.node.nodeSize,void 0,\" \");else if(u.length){const h=s.doc.textBetween(c.from,c.to,\" \",\" \");if(!NI.test(h))return;f=u[0],d=s.doc.textBetween(f.pos,c.to,void 0,\" \")}if(f&&d){const h=d.split(AI).filter(Boolean);if(h.length<=0)return!1;const p=h[h.length-1],m=f.pos+d.lastIndexOf(p);if(!p)return!1;const g=_h(p).map(y=>y.toObject(t.defaultProtocol));if(!RI(g))return!1;g.filter(y=>y.isLink).map(y=>({...y,from:m+y.start+1,to:m+y.end+1})).filter(y=>s.schema.marks.code?!s.doc.rangeHasMark(y.from,y.to,s.schema.marks.code):!0).filter(y=>t.validate(y.value)).filter(y=>t.shouldAutoLink(y.value)).forEach(y=>{xh(y.from,y.to,s.doc).some(S=>S.mark.type===t.type)||o.addMark(y.from,y.to,t.type.create({href:y.href}))})}}),!!o.steps.length)return o}})}function _I(t){return new we({key:new Ne(\"handleClickLink\"),props:{handleClick:(e,n,s)=>{var r,i;if(s.button!==0||!e.editable)return!1;let o=null;if(s.target instanceof HTMLAnchorElement)o=s.target;else{const a=s.target;if(!a)return!1;const c=t.editor.view.dom;o=a.closest(\"a\"),o&&!c.contains(o)&&(o=null)}if(!o)return!1;let l=!1;if(t.enableClickSelection&&(l=t.editor.commands.extendMarkRange(t.type.name)),t.openOnClick){const a=_S(e.state,t.type.name),c=(r=o.href)!=null?r:a.href,u=(i=o.target)!=null?i:a.target;c&&(window.open(c,u),l=!0)}return l}}})}function DI(t){return new we({key:new Ne(\"handlePasteLink\"),props:{handlePaste:(e,n,s)=>{const{shouldAutoLink:r}=t,{state:i}=e,{selection:o}=i,{empty:l}=o;if(l)return!1;let a=\"\";s.content.forEach(u=>{a+=u.textContent});const c=uw(a,{defaultProtocol:t.defaultProtocol}).find(u=>u.isLink&&u.value===a);return!a||!c||r!==void 0&&!r(c.value)?!1:t.editor.commands.setMark(t.type,{href:c.href})}}})}function Js(t,e){const n=[\"http\",\"https\",\"ftp\",\"ftps\",\"mailto\",\"tel\",\"callto\",\"sms\",\"cid\",\"xmpp\"];return e&&e.forEach(s=>{const r=typeof s==\"string\"?s:s.scheme;r&&n.push(r)}),!t||t.replace(OI,\"\").match(new RegExp(`^(?:(?:${n.join(\"|\")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,\"i\"))}var fw=is.create({name:\"link\",priority:1e3,keepOnSplit:!1,exitable:!0,onCreate(){this.options.validate&&!this.options.shouldAutoLink&&(this.options.shouldAutoLink=this.options.validate,console.warn(\"The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.\")),this.options.protocols.forEach(t=>{if(typeof t==\"string\"){gg(t);return}gg(t.scheme,t.optionalSlashes)})},onDestroy(){EI()},inclusive(){return this.options.autolink},addOptions(){return{openOnClick:!0,enableClickSelection:!1,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:\"http\",HTMLAttributes:{target:\"_blank\",rel:\"noopener noreferrer nofollow\",class:null},isAllowedUri:(t,e)=>!!Js(t,e.protocols),validate:t=>!!t,shouldAutoLink:t=>{const e=/^[a-z][a-z0-9+.-]*:\\/\\//i.test(t),n=/^[a-z][a-z0-9+.-]*:/i.test(t);if(e||n&&!t.includes(\"@\"))return!0;const r=(t.includes(\"@\")?t.split(\"@\").pop():t).split(/[/?#:]/)[0];return!(/^\\d{1,3}(\\.\\d{1,3}){3}$/.test(r)||!/\\./.test(r))}}},addAttributes(){return{href:{default:null,parseHTML(t){return t.getAttribute(\"href\")}},target:{default:this.options.HTMLAttributes.target},rel:{default:this.options.HTMLAttributes.rel},class:{default:this.options.HTMLAttributes.class},title:{default:null}}},parseHTML(){return[{tag:\"a[href]\",getAttrs:t=>{const e=t.getAttribute(\"href\");return!e||!this.options.isAllowedUri(e,{defaultValidate:n=>!!Js(n,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:null}}]},renderHTML({HTMLAttributes:t}){return this.options.isAllowedUri(t.href,{defaultValidate:e=>!!Js(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?[\"a\",he(this.options.HTMLAttributes,t),0]:[\"a\",he(this.options.HTMLAttributes,{...t,href:\"\"}),0]},markdownTokenName:\"link\",parseMarkdown:(t,e)=>e.applyMark(\"link\",e.parseInline(t.tokens||[]),{href:t.href,title:t.title||null}),renderMarkdown:(t,e)=>{var n,s,r,i;const o=(s=(n=t.attrs)==null?void 0:n.href)!=null?s:\"\",l=(i=(r=t.attrs)==null?void 0:r.title)!=null?i:\"\",a=e.renderChildren(t);return l?`[${a}](${o} \"${l}\")`:`[${a}](${o})`},addCommands(){return{setLink:t=>({chain:e})=>{const{href:n}=t;return this.options.isAllowedUri(n,{defaultValidate:s=>!!Js(s,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?e().setMark(this.name,t).setMeta(\"preventAutolink\",!0).run():!1},toggleLink:t=>({chain:e})=>{const{href:n}=t||{};return n&&!this.options.isAllowedUri(n,{defaultValidate:s=>!!Js(s,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:e().toggleMark(this.name,t,{extendEmptyMarkRange:!0}).setMeta(\"preventAutolink\",!0).run()},unsetLink:()=>({chain:t})=>t().unsetMark(this.name,{extendEmptyMarkRange:!0}).setMeta(\"preventAutolink\",!0).run()}},addPasteRules(){return[zs({find:t=>{const e=[];if(t){const{protocols:n,defaultProtocol:s}=this.options,r=uw(t).filter(i=>i.isLink&&this.options.isAllowedUri(i.value,{defaultValidate:o=>!!Js(o,n),protocols:n,defaultProtocol:s}));r.length&&r.forEach(i=>{this.options.shouldAutoLink(i.value)&&e.push({text:i.value,data:{href:i.href},index:i.start})})}return e},type:this.type,getAttributes:t=>{var e;return{href:(e=t.data)==null?void 0:e.href}}})]},addProseMirrorPlugins(){const t=[],{protocols:e,defaultProtocol:n}=this.options;return this.options.autolink&&t.push(II({type:this.type,defaultProtocol:this.options.defaultProtocol,validate:s=>this.options.isAllowedUri(s,{defaultValidate:r=>!!Js(r,e),protocols:e,defaultProtocol:n}),shouldAutoLink:this.options.shouldAutoLink})),t.push(_I({type:this.type,editor:this.editor,openOnClick:this.options.openOnClick===\"whenNotEditable\"?!0:this.options.openOnClick,enableClickSelection:this.options.enableClickSelection})),this.options.linkOnPaste&&t.push(DI({editor:this.editor,defaultProtocol:this.options.defaultProtocol,type:this.type,shouldAutoLink:this.options.shouldAutoLink})),t}}),oL=fw,PI=Object.defineProperty,LI=(t,e)=>{for(var n in e)PI(t,n,{get:e[n],enumerable:!0})},BI=\"listItem\",yg=\"textStyle\",bg=/^\\s*([-+*])\\s$/,dw=$e.create({name:\"bulletList\",addOptions(){return{itemTypeName:\"listItem\",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:\"block list\",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:\"ul\"}]},renderHTML({HTMLAttributes:t}){return[\"ul\",he(this.options.HTMLAttributes,t),0]},markdownTokenName:\"list\",parseMarkdown:(t,e)=>t.type!==\"list\"||t.ordered?[]:{type:\"bulletList\",content:t.items?e.parseChildren(t.items):[]},renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,`\n`):\"\",markdownOptions:{indentsContent:!0},addCommands(){return{toggleBulletList:()=>({commands:t,chain:e})=>this.options.keepAttributes?e().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(BI,this.editor.getAttributes(yg)).run():t.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{\"Mod-Shift-8\":()=>this.editor.commands.toggleBulletList()}},addInputRules(){let t=yi({find:bg,type:this.type});return(this.options.keepMarks||this.options.keepAttributes)&&(t=yi({find:bg,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:()=>this.editor.getAttributes(yg),editor:this.editor})),[t]}}),hw=$e.create({name:\"listItem\",addOptions(){return{HTMLAttributes:{},bulletListTypeName:\"bulletList\",orderedListTypeName:\"orderedList\"}},content:\"paragraph block*\",defining:!0,parseHTML(){return[{tag:\"li\"}]},renderHTML({HTMLAttributes:t}){return[\"li\",he(this.options.HTMLAttributes,t),0]},markdownTokenName:\"list_item\",parseMarkdown:(t,e)=>{if(t.type!==\"list_item\")return[];let n=[];if(t.tokens&&t.tokens.length>0)if(t.tokens.some(r=>r.type===\"paragraph\"))n=e.parseChildren(t.tokens);else{const r=t.tokens[0];if(r&&r.type===\"text\"&&r.tokens&&r.tokens.length>0){if(n=[{type:\"paragraph\",content:e.parseInline(r.tokens)}],t.tokens.length>1){const o=t.tokens.slice(1),l=e.parseChildren(o);n.push(...l)}}else n=e.parseChildren(t.tokens)}return n.length===0&&(n=[{type:\"paragraph\",content:[]}]),{type:\"listItem\",content:n}},renderMarkdown:(t,e,n)=>Th(t,e,s=>{var r,i;return s.parentType===\"bulletList\"?\"- \":s.parentType===\"orderedList\"?`${(((i=(r=s.meta)==null?void 0:r.parentAttrs)==null?void 0:i.start)||1)+s.index}. `:\"- \"},n),addKeyboardShortcuts(){return{Enter:()=>this.editor.commands.splitListItem(this.name),Tab:()=>this.editor.commands.sinkListItem(this.name),\"Shift-Tab\":()=>this.editor.commands.liftListItem(this.name)}}}),$I={};LI($I,{findListItemPos:()=>Qo,getNextListDepth:()=>Ph,handleBackspace:()=>Wf,handleDelete:()=>jf,hasListBefore:()=>pw,hasListItemAfter:()=>HI,hasListItemBefore:()=>mw,listItemHasSubList:()=>gw,nextListIsDeeper:()=>yw,nextListIsHigher:()=>bw});var Qo=(t,e)=>{const{$from:n}=e.selection,s=We(t,e.schema);let r=null,i=n.depth,o=n.pos,l=null;for(;i>0&&l===null;)r=n.node(i),r.type===s?l=i:(i-=1,o-=1);return l===null?null:{$pos:e.doc.resolve(o),depth:l}},Ph=(t,e)=>{const n=Qo(t,e);if(!n)return!1;const[,s]=jO(e,t,n.$pos.pos+4);return s},pw=(t,e,n)=>{const{$anchor:s}=t.selection,r=Math.max(0,s.pos-2),i=t.doc.resolve(r).node();return!(!i||!n.includes(i.type.name))},mw=(t,e)=>{var n;const{$anchor:s}=e.selection,r=e.doc.resolve(s.pos-2);return!(r.index()===0||((n=r.nodeBefore)==null?void 0:n.type.name)!==t)},gw=(t,e,n)=>{if(!n)return!1;const s=We(t,e.schema);let r=!1;return n.descendants(i=>{i.type===s&&(r=!0)}),r},Wf=(t,e,n)=>{if(t.commands.undoInputRule())return!0;if(t.state.selection.from!==t.state.selection.to)return!1;if(!Fs(t.state,e)&&pw(t.state,e,n)){const{$anchor:l}=t.state.selection,a=t.state.doc.resolve(l.before()-1),c=[];a.node().descendants((d,h)=>{d.type.name===e&&c.push({node:d,pos:h})});const u=c.at(-1);if(!u)return!1;const f=t.state.doc.resolve(a.start()+u.pos+1);return t.chain().cut({from:l.start()-1,to:l.end()+1},f.end()).joinForward().run()}if(!Fs(t.state,e)||!qO(t.state))return!1;const s=Qo(e,t.state);if(!s)return!1;const i=t.state.doc.resolve(s.$pos.pos-2).node(s.depth),o=gw(e,t.state,i);return mw(e,t.state)&&!o?t.commands.joinItemBackward():t.chain().liftListItem(e).run()},yw=(t,e)=>{const n=Ph(t,e),s=Qo(t,e);return!s||!n?!1:n>s.depth},bw=(t,e)=>{const n=Ph(t,e),s=Qo(t,e);return!s||!n?!1:n<s.depth},jf=(t,e)=>{if(!Fs(t.state,e)||!KO(t.state,e))return!1;const{selection:n}=t.state,{$from:s,$to:r}=n;return!n.empty&&s.sameParent(r)?!1:yw(e,t.state)?t.chain().focus(t.state.selection.from+4).lift(e).joinBackward().run():bw(e,t.state)?t.chain().joinForward().joinBackward().run():t.commands.joinItemForward()},HI=(t,e)=>{var n;const{$anchor:s}=e.selection,r=e.doc.resolve(s.pos-s.parentOffset-2);return!(r.index()===r.parent.childCount-1||((n=r.nodeAfter)==null?void 0:n.type.name)!==t)},Sw=Se.create({name:\"listKeymap\",addOptions(){return{listTypes:[{itemName:\"listItem\",wrapperNames:[\"bulletList\",\"orderedList\"]},{itemName:\"taskItem\",wrapperNames:[\"taskList\"]}]}},addKeyboardShortcuts(){return{Delete:({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:n})=>{t.state.schema.nodes[n]!==void 0&&jf(t,n)&&(e=!0)}),e},\"Mod-Delete\":({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:n})=>{t.state.schema.nodes[n]!==void 0&&jf(t,n)&&(e=!0)}),e},Backspace:({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:n,wrapperNames:s})=>{t.state.schema.nodes[n]!==void 0&&Wf(t,n,s)&&(e=!0)}),e},\"Mod-Backspace\":({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:n,wrapperNames:s})=>{t.state.schema.nodes[n]!==void 0&&Wf(t,n,s)&&(e=!0)}),e}}}}),Sg=/^(\\s*)(\\d+)\\.\\s+(.*)$/,FI=/^\\s/;function zI(t){const e=[];let n=0,s=0;for(;n<t.length;){const r=t[n],i=r.match(Sg);if(!i)break;const[,o,l,a]=i,c=o.length;let u=a,f=n+1;const d=[r];for(;f<t.length;){const h=t[f];if(h.match(Sg))break;if(h.trim()===\"\")d.push(h),u+=`\n`,f+=1;else if(h.match(FI))d.push(h),u+=`\n${h.slice(c+2)}`,f+=1;else break}e.push({indent:c,number:parseInt(l,10),content:u.trim(),raw:d.join(`\n`)}),s=f,n=f}return[e,s]}function ww(t,e,n){var s;const r=[];let i=0;for(;i<t.length;){const o=t[i];if(o.indent===e){const l=o.content.split(`\n`),a=((s=l[0])==null?void 0:s.trim())||\"\",c=[];a&&c.push({type:\"paragraph\",raw:a,tokens:n.inlineTokens(a)});const u=l.slice(1).join(`\n`).trim();if(u){const h=n.blockTokens(u);c.push(...h)}let f=i+1;const d=[];for(;f<t.length&&t[f].indent>e;)d.push(t[f]),f+=1;if(d.length>0){const h=Math.min(...d.map(m=>m.indent)),p=ww(d,h,n);c.push({type:\"list\",ordered:!0,start:d[0].number,items:p,raw:d.map(m=>m.raw).join(`\n`)})}r.push({type:\"list_item\",raw:o.raw,tokens:c}),i=f}else i+=1}return r}function VI(t,e){return t.map(n=>{if(n.type!==\"list_item\")return e.parseChildren([n])[0];const s=[];return n.tokens&&n.tokens.length>0&&n.tokens.forEach(r=>{if(r.type===\"paragraph\"||r.type===\"list\"||r.type===\"blockquote\"||r.type===\"code\")s.push(...e.parseChildren([r]));else if(r.type===\"text\"&&r.tokens){const i=e.parseChildren([r]);s.push({type:\"paragraph\",content:i})}else{const i=e.parseChildren([r]);i.length>0&&s.push(...i)}}),{type:\"listItem\",content:s}})}var WI=\"listItem\",wg=\"textStyle\",xg=/^(\\d+)\\.\\s$/,xw=$e.create({name:\"orderedList\",addOptions(){return{itemTypeName:\"listItem\",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:\"block list\",content(){return`${this.options.itemTypeName}+`},addAttributes(){return{start:{default:1,parseHTML:t=>t.hasAttribute(\"start\")?parseInt(t.getAttribute(\"start\")||\"\",10):1},type:{default:null,parseHTML:t=>t.getAttribute(\"type\")}}},parseHTML(){return[{tag:\"ol\"}]},renderHTML({HTMLAttributes:t}){const{start:e,...n}=t;return e===1?[\"ol\",he(this.options.HTMLAttributes,n),0]:[\"ol\",he(this.options.HTMLAttributes,t),0]},markdownTokenName:\"list\",parseMarkdown:(t,e)=>{if(t.type!==\"list\"||!t.ordered)return[];const n=t.start||1,s=t.items?VI(t.items,e):[];return n!==1?{type:\"orderedList\",attrs:{start:n},content:s}:{type:\"orderedList\",content:s}},renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,`\n`):\"\",markdownTokenizer:{name:\"orderedList\",level:\"block\",start:t=>{const e=t.match(/^(\\s*)(\\d+)\\.\\s+/),n=e?.index;return n!==void 0?n:-1},tokenize:(t,e,n)=>{var s;const r=t.split(`\n`),[i,o]=zI(r);if(i.length===0)return;const l=ww(i,0,n);return l.length===0?void 0:{type:\"list\",ordered:!0,start:((s=i[0])==null?void 0:s.number)||1,items:l,raw:r.slice(0,o).join(`\n`)}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleOrderedList:()=>({commands:t,chain:e})=>this.options.keepAttributes?e().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(WI,this.editor.getAttributes(wg)).run():t.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{\"Mod-Shift-7\":()=>this.editor.commands.toggleOrderedList()}},addInputRules(){let t=yi({find:xg,type:this.type,getAttributes:e=>({start:+e[1]}),joinPredicate:(e,n)=>n.childCount+n.attrs.start===+e[1]});return(this.options.keepMarks||this.options.keepAttributes)&&(t=yi({find:xg,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:e=>({start:+e[1],...this.editor.getAttributes(wg)}),joinPredicate:(e,n)=>n.childCount+n.attrs.start===+e[1],editor:this.editor})),[t]}}),jI=/^\\s*(\\[([( |x])?\\])\\s$/,UI=$e.create({name:\"taskItem\",addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:\"taskList\",a11y:void 0}},content(){return this.options.nested?\"paragraph block*\":\"paragraph+\"},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:t=>{const e=t.getAttribute(\"data-checked\");return e===\"\"||e===\"true\"},renderHTML:t=>({\"data-checked\":t.checked})}}},parseHTML(){return[{tag:`li[data-type=\"${this.name}\"]`,priority:51}]},renderHTML({node:t,HTMLAttributes:e}){return[\"li\",he(this.options.HTMLAttributes,e,{\"data-type\":this.name}),[\"label\",[\"input\",{type:\"checkbox\",checked:t.attrs.checked?\"checked\":null}],[\"span\"]],[\"div\",0]]},parseMarkdown:(t,e)=>{const n=[];if(t.tokens&&t.tokens.length>0?n.push(e.createNode(\"paragraph\",{},e.parseInline(t.tokens))):t.text?n.push(e.createNode(\"paragraph\",{},[e.createNode(\"text\",{text:t.text})])):n.push(e.createNode(\"paragraph\",{},[])),t.nestedTokens&&t.nestedTokens.length>0){const s=e.parseChildren(t.nestedTokens);n.push(...s)}return e.createNode(\"taskItem\",{checked:t.checked||!1},n)},renderMarkdown:(t,e)=>{var n;const r=`- [${(n=t.attrs)!=null&&n.checked?\"x\":\" \"}] `;return Th(t,e,r)},addKeyboardShortcuts(){const t={Enter:()=>this.editor.commands.splitListItem(this.name),\"Shift-Tab\":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...t,Tab:()=>this.editor.commands.sinkListItem(this.name)}:t},addNodeView(){return({node:t,HTMLAttributes:e,getPos:n,editor:s})=>{const r=document.createElement(\"li\"),i=document.createElement(\"label\"),o=document.createElement(\"span\"),l=document.createElement(\"input\"),a=document.createElement(\"div\"),c=f=>{var d,h;l.ariaLabel=((h=(d=this.options.a11y)==null?void 0:d.checkboxLabel)==null?void 0:h.call(d,f,l.checked))||`Task item checkbox for ${f.textContent||\"empty task item\"}`};c(t),i.contentEditable=\"false\",l.type=\"checkbox\",l.addEventListener(\"mousedown\",f=>f.preventDefault()),l.addEventListener(\"change\",f=>{if(!s.isEditable&&!this.options.onReadOnlyChecked){l.checked=!l.checked;return}const{checked:d}=f.target;s.isEditable&&typeof n==\"function\"&&s.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:h})=>{const p=n();if(typeof p!=\"number\")return!1;const m=h.doc.nodeAt(p);return h.setNodeMarkup(p,void 0,{...m?.attrs,checked:d}),!0}).run(),!s.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(t,d)||(l.checked=!l.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([f,d])=>{r.setAttribute(f,d)}),r.dataset.checked=t.attrs.checked,l.checked=t.attrs.checked,i.append(l,o),r.append(i,a),Object.entries(e).forEach(([f,d])=>{r.setAttribute(f,d)});let u=new Set(Object.keys(e));return{dom:r,contentDOM:a,update:f=>{if(f.type!==this.type)return!1;r.dataset.checked=f.attrs.checked,l.checked=f.attrs.checked,c(f);const d=s.extensionManager.attributes,h=Io(f,d),p=new Set(Object.keys(h)),m=this.options.HTMLAttributes;return u.forEach(g=>{p.has(g)||(g in m?r.setAttribute(g,m[g]):r.removeAttribute(g))}),Object.entries(h).forEach(([g,y])=>{y==null?g in m?r.setAttribute(g,m[g]):r.removeAttribute(g):r.setAttribute(g,y)}),u=p,!0}}}},addInputRules(){return[yi({find:jI,type:this.type,getAttributes:t=>({checked:t[t.length-1]===\"x\"})})]}}),KI=$e.create({name:\"taskList\",addOptions(){return{itemTypeName:\"taskItem\",HTMLAttributes:{}}},group:\"block list\",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type=\"${this.name}\"]`,priority:51}]},renderHTML({HTMLAttributes:t}){return[\"ul\",he(this.options.HTMLAttributes,t,{\"data-type\":this.name}),0]},parseMarkdown:(t,e)=>e.createNode(\"taskList\",{},e.parseChildren(t.items||[])),renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,`\n`):\"\",markdownTokenizer:{name:\"taskList\",level:\"block\",start(t){var e;const n=(e=t.match(/^\\s*[-+*]\\s+\\[([ xX])\\]\\s+/))==null?void 0:e.index;return n!==void 0?n:-1},tokenize(t,e,n){const s=i=>{const o=Df(i,{itemPattern:/^(\\s*)([-+*])\\s+\\[([ xX])\\]\\s+(.*)$/,extractItemData:l=>({indentLevel:l[1].length,mainContent:l[4],checked:l[3].toLowerCase()===\"x\"}),createToken:(l,a)=>({type:\"taskItem\",raw:\"\",mainContent:l.mainContent,indentLevel:l.indentLevel,checked:l.checked,text:l.mainContent,tokens:n.inlineTokens(l.mainContent),nestedTokens:a}),customNestedParser:s},n);return o?[{type:\"taskList\",raw:o.raw,items:o.items}]:n.blockTokens(i)},r=Df(t,{itemPattern:/^(\\s*)([-+*])\\s+\\[([ xX])\\]\\s+(.*)$/,extractItemData:i=>({indentLevel:i[1].length,mainContent:i[4],checked:i[3].toLowerCase()===\"x\"}),createToken:(i,o)=>({type:\"taskItem\",raw:\"\",mainContent:i.mainContent,indentLevel:i.indentLevel,checked:i.checked,text:i.mainContent,tokens:n.inlineTokens(i.mainContent),nestedTokens:o}),customNestedParser:s},n);if(r)return{type:\"taskList\",raw:r.raw,items:r.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:t})=>t.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{\"Mod-Shift-9\":()=>this.editor.commands.toggleTaskList()}}}),lL=Se.create({name:\"listKit\",addExtensions(){const t=[];return this.options.bulletList!==!1&&t.push(dw.configure(this.options.bulletList)),this.options.listItem!==!1&&t.push(hw.configure(this.options.listItem)),this.options.listKeymap!==!1&&t.push(Sw.configure(this.options.listKeymap)),this.options.orderedList!==!1&&t.push(xw.configure(this.options.orderedList)),this.options.taskItem!==!1&&t.push(UI.configure(this.options.taskItem)),this.options.taskList!==!1&&t.push(KI.configure(this.options.taskList)),t}}),Cg=\"&nbsp;\",qI=\" \",JI=$e.create({name:\"paragraph\",priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:\"block\",content:\"inline*\",parseHTML(){return[{tag:\"p\"}]},renderHTML({HTMLAttributes:t}){return[\"p\",he(this.options.HTMLAttributes,t),0]},parseMarkdown:(t,e)=>{const n=t.tokens||[];if(n.length===1&&n[0].type===\"image\")return e.parseChildren([n[0]]);const s=e.parseInline(n);return s.length===1&&s[0].type===\"text\"&&(s[0].text===Cg||s[0].text===qI)?e.createNode(\"paragraph\",void 0,[]):e.createNode(\"paragraph\",void 0,s)},renderMarkdown:(t,e)=>{if(!t)return\"\";const n=Array.isArray(t.content)?t.content:[];return n.length===0?Cg:e.renderChildren(n)},addCommands(){return{setParagraph:()=>({commands:t})=>t.setNode(this.name)}},addKeyboardShortcuts(){return{\"Mod-Alt-0\":()=>this.editor.commands.setParagraph()}}}),GI=/(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))$/,YI=/(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))/g,XI=is.create({name:\"strike\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"s\"},{tag:\"del\"},{tag:\"strike\"},{style:\"text-decoration\",consuming:!1,getAttrs:t=>t.includes(\"line-through\")?{}:!1}]},renderHTML({HTMLAttributes:t}){return[\"s\",he(this.options.HTMLAttributes,t),0]},markdownTokenName:\"del\",parseMarkdown:(t,e)=>e.applyMark(\"strike\",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`~~${e.renderChildren(t)}~~`,addCommands(){return{setStrike:()=>({commands:t})=>t.setMark(this.name),toggleStrike:()=>({commands:t})=>t.toggleMark(this.name),unsetStrike:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-Shift-s\":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[wr({find:GI,type:this.type})]},addPasteRules(){return[zs({find:YI,type:this.type})]}}),QI=$e.create({name:\"text\",group:\"inline\",parseMarkdown:t=>({type:\"text\",text:t.text||\"\"}),renderMarkdown:t=>t.text||\"\"}),ZI=is.create({name:\"underline\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"u\"},{style:\"text-decoration\",consuming:!1,getAttrs:t=>t.includes(\"underline\")?{}:!1}]},renderHTML({HTMLAttributes:t}){return[\"u\",he(this.options.HTMLAttributes,t),0]},parseMarkdown(t,e){return e.applyMark(this.name||\"underline\",e.parseInline(t.tokens||[]))},renderMarkdown(t,e){return`++${e.renderChildren(t)}++`},markdownTokenizer:{name:\"underline\",level:\"inline\",start(t){return t.indexOf(\"++\")},tokenize(t,e,n){const r=/^(\\+\\+)([\\s\\S]+?)(\\+\\+)/.exec(t);if(!r)return;const i=r[2].trim();return{type:\"underline\",raw:r[0],text:i,tokens:n.inlineTokens(i)}}},addCommands(){return{setUnderline:()=>({commands:t})=>t.setMark(this.name),toggleUnderline:()=>({commands:t})=>t.toggleMark(this.name),unsetUnderline:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-u\":()=>this.editor.commands.toggleUnderline(),\"Mod-U\":()=>this.editor.commands.toggleUnderline()}}});function e_(t={}){return new we({view(e){return new t_(e,t)}})}class t_{constructor(e,n){var s;this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.width=(s=n.width)!==null&&s!==void 0?s:1,this.color=n.color===!1?void 0:n.color||\"black\",this.class=n.class,this.handlers=[\"dragover\",\"dragend\",\"drop\",\"dragleave\"].map(r=>{let i=o=>{this[r](o)};return e.dom.addEventListener(r,i),{name:r,handler:i}})}destroy(){this.handlers.forEach(({name:e,handler:n})=>this.editorView.dom.removeEventListener(e,n))}update(e,n){this.cursorPos!=null&&n.doc!=e.state.doc&&(this.cursorPos>e.state.doc.content.size?this.setCursor(null):this.updateOverlay())}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),n=!e.parent.inlineContent,s,r=this.editorView.dom,i=r.getBoundingClientRect(),o=i.width/r.offsetWidth,l=i.height/r.offsetHeight;if(n){let f=e.nodeBefore,d=e.nodeAfter;if(f||d){let h=this.editorView.nodeDOM(this.cursorPos-(f?f.nodeSize:0));if(h){let p=h.getBoundingClientRect(),m=f?p.bottom:p.top;f&&d&&(m=(m+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let g=this.width/2*l;s={left:p.left,right:p.right,top:m-g,bottom:m+g}}}}if(!s){let f=this.editorView.coordsAtPos(this.cursorPos),d=this.width/2*o;s={left:f.left-d,right:f.left+d,top:f.top,bottom:f.bottom}}let a=this.editorView.dom.offsetParent;this.element||(this.element=a.appendChild(document.createElement(\"div\")),this.class&&(this.element.className=this.class),this.element.style.cssText=\"position: absolute; z-index: 50; pointer-events: none;\",this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle(\"prosemirror-dropcursor-block\",n),this.element.classList.toggle(\"prosemirror-dropcursor-inline\",!n);let c,u;if(!a||a==document.body&&getComputedStyle(a).position==\"static\")c=-pageXOffset,u=-pageYOffset;else{let f=a.getBoundingClientRect(),d=f.width/a.offsetWidth,h=f.height/a.offsetHeight;c=f.left-a.scrollLeft*d,u=f.top-a.scrollTop*h}this.element.style.left=(s.left-c)/o+\"px\",this.element.style.top=(s.top-u)/l+\"px\",this.element.style.width=(s.right-s.left)/o+\"px\",this.element.style.height=(s.bottom-s.top)/l+\"px\"}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}dragover(e){if(!this.editorView.editable)return;let n=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),s=n&&n.inside>=0&&this.editorView.state.doc.nodeAt(n.inside),r=s&&s.type.spec.disableDropCursor,i=typeof r==\"function\"?r(this.editorView,n,e):r;if(n&&!i){let o=n.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let l=S1(this.editorView.state.doc,o,this.editorView.dragging.slice);l!=null&&(o=l)}this.setCursor(o),this.scheduleRemoval(5e3)}}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}}class Re extends ee{constructor(e){super(e,e)}map(e,n){let s=e.resolve(n.map(this.head));return Re.valid(s)?new Re(s):ee.near(s)}content(){return K.empty}eq(e){return e instanceof Re&&e.head==this.head}toJSON(){return{type:\"gapcursor\",pos:this.head}}static fromJSON(e,n){if(typeof n.pos!=\"number\")throw new RangeError(\"Invalid input for GapCursor.fromJSON\");return new Re(e.resolve(n.pos))}getBookmark(){return new Lh(this.anchor)}static valid(e){let n=e.parent;if(n.isTextblock||!n_(e)||!s_(e))return!1;let s=n.type.spec.allowGapCursor;if(s!=null)return s;let r=n.contentMatchAt(e.index()).defaultType;return r&&r.isTextblock}static findGapCursorFrom(e,n,s=!1){e:for(;;){if(!s&&Re.valid(e))return e;let r=e.pos,i=null;for(let o=e.depth;;o--){let l=e.node(o);if(n>0?e.indexAfter(o)<l.childCount:e.index(o)>0){i=l.child(n>0?e.indexAfter(o):e.index(o)-1);break}else if(o==0)return null;r+=n;let a=e.doc.resolve(r);if(Re.valid(a))return a}for(;;){let o=n>0?i.firstChild:i.lastChild;if(!o){if(i.isAtom&&!i.isText&&!Q.isSelectable(i)){e=e.doc.resolve(r+i.nodeSize*n),s=!1;continue e}break}i=o,r+=n;let l=e.doc.resolve(r);if(Re.valid(l))return l}return null}}}Re.prototype.visible=!1;Re.findFrom=Re.findGapCursorFrom;ee.jsonID(\"gapcursor\",Re);class Lh{constructor(e){this.pos=e}map(e){return new Lh(e.map(this.pos))}resolve(e){let n=e.resolve(this.pos);return Re.valid(n)?new Re(n):ee.near(n)}}function Cw(t){return t.isAtom||t.spec.isolating||t.spec.createGapCursor}function n_(t){for(let e=t.depth;e>=0;e--){let n=t.index(e),s=t.node(e);if(n==0){if(s.type.spec.isolating)return!0;continue}for(let r=s.child(n-1);;r=r.lastChild){if(r.childCount==0&&!r.inlineContent||Cw(r.type))return!0;if(r.inlineContent)return!1}}return!0}function s_(t){for(let e=t.depth;e>=0;e--){let n=t.indexAfter(e),s=t.node(e);if(n==s.childCount){if(s.type.spec.isolating)return!0;continue}for(let r=s.child(n);;r=r.firstChild){if(r.childCount==0&&!r.inlineContent||Cw(r.type))return!0;if(r.inlineContent)return!1}}return!0}function r_(){return new we({props:{decorations:a_,createSelectionBetween(t,e,n){return e.pos==n.pos&&Re.valid(n)?new Re(n):null},handleClick:o_,handleKeyDown:i_,handleDOMEvents:{beforeinput:l_}}})}const i_=hh({ArrowLeft:vl(\"horiz\",-1),ArrowRight:vl(\"horiz\",1),ArrowUp:vl(\"vert\",-1),ArrowDown:vl(\"vert\",1)});function vl(t,e){const n=t==\"vert\"?e>0?\"down\":\"up\":e>0?\"right\":\"left\";return function(s,r,i){let o=s.selection,l=e>0?o.$to:o.$from,a=o.empty;if(o instanceof Z){if(!i.endOfTextblock(n)||l.depth==0)return!1;a=!1,l=s.doc.resolve(e>0?l.after():l.before())}let c=Re.findGapCursorFrom(l,e,a);return c?(r&&r(s.tr.setSelection(new Re(c))),!0):!1}}function o_(t,e,n){if(!t||!t.editable)return!1;let s=t.state.doc.resolve(e);if(!Re.valid(s))return!1;let r=t.posAtCoords({left:n.clientX,top:n.clientY});return r&&r.inside>-1&&Q.isSelectable(t.state.doc.nodeAt(r.inside))?!1:(t.dispatch(t.state.tr.setSelection(new Re(s))),!0)}function l_(t,e){if(e.inputType!=\"insertCompositionText\"||!(t.state.selection instanceof Re))return!1;let{$from:n}=t.state.selection,s=n.parent.contentMatchAt(n.index()).findWrapping(t.state.schema.nodes.text);if(!s)return!1;let r=D.empty;for(let o=s.length-1;o>=0;o--)r=D.from(s[o].createAndFill(null,r));let i=t.state.tr.replace(n.pos,n.pos,new K(r,0,0));return i.setSelection(Z.near(i.doc.resolve(n.pos+1))),t.dispatch(i),!1}function a_(t){if(!(t.selection instanceof Re))return null;let e=document.createElement(\"div\");return e.className=\"ProseMirror-gapcursor\",xe.create(t.doc,[Ke.widget(t.selection.head,e,{key:\"gapcursor\"})])}var sc=200,Ye=function(){};Ye.prototype.append=function(e){return e.length?(e=Ye.from(e),!this.length&&e||e.length<sc&&this.leafAppend(e)||this.length<sc&&e.leafPrepend(this)||this.appendInner(e)):this};Ye.prototype.prepend=function(e){return e.length?Ye.from(e).append(this):this};Ye.prototype.appendInner=function(e){return new c_(this,e)};Ye.prototype.slice=function(e,n){return e===void 0&&(e=0),n===void 0&&(n=this.length),e>=n?Ye.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,n))};Ye.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)};Ye.prototype.forEach=function(e,n,s){n===void 0&&(n=0),s===void 0&&(s=this.length),n<=s?this.forEachInner(e,n,s,0):this.forEachInvertedInner(e,n,s,0)};Ye.prototype.map=function(e,n,s){n===void 0&&(n=0),s===void 0&&(s=this.length);var r=[];return this.forEach(function(i,o){return r.push(e(i,o))},n,s),r};Ye.from=function(e){return e instanceof Ye?e:e&&e.length?new vw(e):Ye.empty};var vw=(function(t){function e(s){t.call(this),this.values=s}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={length:{configurable:!0},depth:{configurable:!0}};return e.prototype.flatten=function(){return this.values},e.prototype.sliceInner=function(r,i){return r==0&&i==this.length?this:new e(this.values.slice(r,i))},e.prototype.getInner=function(r){return this.values[r]},e.prototype.forEachInner=function(r,i,o,l){for(var a=i;a<o;a++)if(r(this.values[a],l+a)===!1)return!1},e.prototype.forEachInvertedInner=function(r,i,o,l){for(var a=i-1;a>=o;a--)if(r(this.values[a],l+a)===!1)return!1},e.prototype.leafAppend=function(r){if(this.length+r.length<=sc)return new e(this.values.concat(r.flatten()))},e.prototype.leafPrepend=function(r){if(this.length+r.length<=sc)return new e(r.flatten().concat(this.values))},n.length.get=function(){return this.values.length},n.depth.get=function(){return 0},Object.defineProperties(e.prototype,n),e})(Ye);Ye.empty=new vw([]);var c_=(function(t){function e(n,s){t.call(this),this.left=n,this.right=s,this.length=n.length+s.length,this.depth=Math.max(n.depth,s.depth)+1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},e.prototype.getInner=function(s){return s<this.left.length?this.left.get(s):this.right.get(s-this.left.length)},e.prototype.forEachInner=function(s,r,i,o){var l=this.left.length;if(r<l&&this.left.forEachInner(s,r,Math.min(i,l),o)===!1||i>l&&this.right.forEachInner(s,Math.max(r-l,0),Math.min(this.length,i)-l,o+l)===!1)return!1},e.prototype.forEachInvertedInner=function(s,r,i,o){var l=this.left.length;if(r>l&&this.right.forEachInvertedInner(s,r-l,Math.max(i,l)-l,o+l)===!1||i<l&&this.left.forEachInvertedInner(s,Math.min(r,l),i,o)===!1)return!1},e.prototype.sliceInner=function(s,r){if(s==0&&r==this.length)return this;var i=this.left.length;return r<=i?this.left.slice(s,r):s>=i?this.right.slice(s-i,r-i):this.left.slice(s,i).append(this.right.slice(0,r-i))},e.prototype.leafAppend=function(s){var r=this.right.leafAppend(s);if(r)return new e(this.left,r)},e.prototype.leafPrepend=function(s){var r=this.left.leafPrepend(s);if(r)return new e(r,this.right)},e.prototype.appendInner=function(s){return this.left.depth>=Math.max(this.right.depth,s.depth)+1?new e(this.left,new e(this.right,s)):new e(this,s)},e})(Ye);const u_=500;class on{constructor(e,n){this.items=e,this.eventCount=n}popEvent(e,n){if(this.eventCount==0)return null;let s=this.items.length;for(;;s--)if(this.items.get(s-1).selection){--s;break}let r,i;n&&(r=this.remapping(s,this.items.length),i=r.maps.length);let o=e.tr,l,a,c=[],u=[];return this.items.forEach((f,d)=>{if(!f.step){r||(r=this.remapping(s,d+1),i=r.maps.length),i--,u.push(f);return}if(r){u.push(new wn(f.map));let h=f.step.map(r.slice(i)),p;h&&o.maybeStep(h).doc&&(p=o.mapping.maps[o.mapping.maps.length-1],c.push(new wn(p,void 0,void 0,c.length+u.length))),i--,p&&r.appendMap(p,i)}else o.maybeStep(f.step);if(f.selection)return l=r?f.selection.map(r.slice(i)):f.selection,a=new on(this.items.slice(0,s).append(u.reverse().concat(c)),this.eventCount-1),!1},this.items.length,0),{remaining:a,transform:o,selection:l}}addTransform(e,n,s,r){let i=[],o=this.eventCount,l=this.items,a=!r&&l.length?l.get(l.length-1):null;for(let u=0;u<e.steps.length;u++){let f=e.steps[u].invert(e.docs[u]),d=new wn(e.mapping.maps[u],f,n),h;(h=a&&a.merge(d))&&(d=h,u?i.pop():l=l.slice(0,l.length-1)),i.push(d),n&&(o++,n=void 0),r||(a=d)}let c=o-s.depth;return c>d_&&(l=f_(l,c),o-=c),new on(l.append(i),o)}remapping(e,n){let s=new Eo;return this.items.forEach((r,i)=>{let o=r.mirrorOffset!=null&&i-r.mirrorOffset>=e?s.maps.length-r.mirrorOffset:void 0;s.appendMap(r.map,o)},e,n),s}addMaps(e){return this.eventCount==0?this:new on(this.items.append(e.map(n=>new wn(n))),this.eventCount)}rebased(e,n){if(!this.eventCount)return this;let s=[],r=Math.max(0,this.items.length-n),i=e.mapping,o=e.steps.length,l=this.eventCount;this.items.forEach(d=>{d.selection&&l--},r);let a=n;this.items.forEach(d=>{let h=i.getMirror(--a);if(h==null)return;o=Math.min(o,h);let p=i.maps[h];if(d.step){let m=e.steps[h].invert(e.docs[h]),g=d.selection&&d.selection.map(i.slice(a+1,h));g&&l++,s.push(new wn(p,m,g))}else s.push(new wn(p))},r);let c=[];for(let d=n;d<o;d++)c.push(new wn(i.maps[d]));let u=this.items.slice(0,r).append(c).append(s),f=new on(u,l);return f.emptyItemCount()>u_&&(f=f.compress(this.items.length-s.length)),f}emptyItemCount(){let e=0;return this.items.forEach(n=>{n.step||e++}),e}compress(e=this.items.length){let n=this.remapping(0,e),s=n.maps.length,r=[],i=0;return this.items.forEach((o,l)=>{if(l>=e)r.push(o),o.selection&&i++;else if(o.step){let a=o.step.map(n.slice(s)),c=a&&a.getMap();if(s--,c&&n.appendMap(c,s),a){let u=o.selection&&o.selection.map(n.slice(s));u&&i++;let f=new wn(c.invert(),a,u),d,h=r.length-1;(d=r.length&&r[h].merge(f))?r[h]=d:r.push(f)}}else o.map&&s--},this.items.length,0),new on(Ye.from(r.reverse()),i)}}on.empty=new on(Ye.empty,0);function f_(t,e){let n;return t.forEach((s,r)=>{if(s.selection&&e--==0)return n=r,!1}),t.slice(n)}class wn{constructor(e,n,s,r){this.map=e,this.step=n,this.selection=s,this.mirrorOffset=r}merge(e){if(this.step&&e.step&&!e.selection){let n=e.step.merge(this.step);if(n)return new wn(n.getMap().invert(),n,this.selection)}}}class vs{constructor(e,n,s,r,i){this.done=e,this.undone=n,this.prevRanges=s,this.prevTime=r,this.prevComposition=i}}const d_=20;function h_(t,e,n,s){let r=n.getMeta(dr),i;if(r)return r.historyState;n.getMeta(g_)&&(t=new vs(t.done,t.undone,null,0,-1));let o=n.getMeta(\"appendedTransaction\");if(n.steps.length==0)return t;if(o&&o.getMeta(dr))return o.getMeta(dr).redo?new vs(t.done.addTransform(n,void 0,s,zl(e)),t.undone,vg(n.mapping.maps),t.prevTime,t.prevComposition):new vs(t.done,t.undone.addTransform(n,void 0,s,zl(e)),null,t.prevTime,t.prevComposition);if(n.getMeta(\"addToHistory\")!==!1&&!(o&&o.getMeta(\"addToHistory\")===!1)){let l=n.getMeta(\"composition\"),a=t.prevTime==0||!o&&t.prevComposition!=l&&(t.prevTime<(n.time||0)-s.newGroupDelay||!p_(n,t.prevRanges)),c=o?Bu(t.prevRanges,n.mapping):vg(n.mapping.maps);return new vs(t.done.addTransform(n,a?e.selection.getBookmark():void 0,s,zl(e)),on.empty,c,n.time,l??t.prevComposition)}else return(i=n.getMeta(\"rebased\"))?new vs(t.done.rebased(n,i),t.undone.rebased(n,i),Bu(t.prevRanges,n.mapping),t.prevTime,t.prevComposition):new vs(t.done.addMaps(n.mapping.maps),t.undone.addMaps(n.mapping.maps),Bu(t.prevRanges,n.mapping),t.prevTime,t.prevComposition)}function p_(t,e){if(!e)return!1;if(!t.docChanged)return!0;let n=!1;return t.mapping.maps[0].forEach((s,r)=>{for(let i=0;i<e.length;i+=2)s<=e[i+1]&&r>=e[i]&&(n=!0)}),n}function vg(t){let e=[];for(let n=t.length-1;n>=0&&e.length==0;n--)t[n].forEach((s,r,i,o)=>e.push(i,o));return e}function Bu(t,e){if(!t)return null;let n=[];for(let s=0;s<t.length;s+=2){let r=e.map(t[s],1),i=e.map(t[s+1],-1);r<=i&&n.push(r,i)}return n}function m_(t,e,n){let s=zl(e),r=dr.get(e).spec.config,i=(n?t.undone:t.done).popEvent(e,s);if(!i)return null;let o=i.selection.resolve(i.transform.doc),l=(n?t.done:t.undone).addTransform(i.transform,e.selection.getBookmark(),r,s),a=new vs(n?l:i.remaining,n?i.remaining:l,null,0,-1);return i.transform.setSelection(o).setMeta(dr,{redo:n,historyState:a})}let $u=!1,kg=null;function zl(t){let e=t.plugins;if(kg!=e){$u=!1,kg=e;for(let n=0;n<e.length;n++)if(e[n].spec.historyPreserveItems){$u=!0;break}}return $u}const dr=new Ne(\"history\"),g_=new Ne(\"closeHistory\");function y_(t={}){return t={depth:t.depth||100,newGroupDelay:t.newGroupDelay||500},new we({key:dr,state:{init(){return new vs(on.empty,on.empty,null,0,-1)},apply(e,n,s){return h_(n,s,e,t)}},config:t,props:{handleDOMEvents:{beforeinput(e,n){let s=n.inputType,r=s==\"historyUndo\"?Tw:s==\"historyRedo\"?Ew:null;return!r||!e.editable?!1:(n.preventDefault(),r(e.state,e.dispatch))}}}})}function kw(t,e){return(n,s)=>{let r=dr.getState(n);if(!r||(t?r.undone:r.done).eventCount==0)return!1;if(s){let i=m_(r,n,t);i&&s(e?i.scrollIntoView():i)}return!0}}const Tw=kw(!1,!0),Ew=kw(!0,!0);Se.create({name:\"characterCount\",addOptions(){return{limit:null,mode:\"textSize\",textCounter:t=>t.length,wordCounter:t=>t.split(\" \").filter(e=>e!==\"\").length}},addStorage(){return{characters:()=>0,words:()=>0}},onBeforeCreate(){this.storage.characters=t=>{const e=t?.node||this.editor.state.doc;if((t?.mode||this.options.mode)===\"textSize\"){const s=e.textBetween(0,e.content.size,void 0,\" \");return this.options.textCounter(s)}return e.nodeSize},this.storage.words=t=>{const e=t?.node||this.editor.state.doc,n=e.textBetween(0,e.content.size,\" \",\" \");return this.options.wordCounter(n)}},addProseMirrorPlugins(){let t=!1;return[new we({key:new Ne(\"characterCount\"),appendTransaction:(e,n,s)=>{if(t)return;const r=this.options.limit;if(r==null||r===0){t=!0;return}const i=this.storage.characters({node:s.doc});if(i>r){const o=i-r,l=0,a=o;console.warn(`[CharacterCount] Initial content exceeded limit of ${r} characters. Content was automatically trimmed.`);const c=s.tr.deleteRange(l,a);return t=!0,c}t=!0},filterTransaction:(e,n)=>{const s=this.options.limit;if(!e.docChanged||s===0||s===null||s===void 0)return!0;const r=this.storage.characters({node:n.doc}),i=this.storage.characters({node:e.doc});if(i<=s||r>s&&i>s&&i<=r)return!0;if(r>s&&i>s&&i>r||!e.getMeta(\"paste\"))return!1;const l=e.selection.$head.pos,a=i-s,c=l-a,u=l;return e.deleteRange(c,u),!(this.storage.characters({node:e.doc})>s)}})]}});var b_=Se.create({name:\"dropCursor\",addOptions(){return{color:\"currentColor\",width:1,class:void 0}},addProseMirrorPlugins(){return[e_(this.options)]}});Se.create({name:\"focus\",addOptions(){return{className:\"has-focus\",mode:\"all\"}},addProseMirrorPlugins(){return[new we({key:new Ne(\"focus\"),props:{decorations:({doc:t,selection:e})=>{const{isEditable:n,isFocused:s}=this.editor,{anchor:r}=e,i=[];if(!n||!s)return xe.create(t,[]);let o=0;this.options.mode===\"deepest\"&&t.descendants((a,c)=>{if(a.isText)return;if(!(r>=c&&r<=c+a.nodeSize-1))return!1;o+=1});let l=0;return t.descendants((a,c)=>{if(a.isText||!(r>=c&&r<=c+a.nodeSize-1))return!1;if(l+=1,this.options.mode===\"deepest\"&&o-l>0||this.options.mode===\"shallowest\"&&l>1)return this.options.mode===\"deepest\";i.push(Ke.node(c,c+a.nodeSize,{class:this.options.className}))}),xe.create(t,i)}}})]}});var S_=Se.create({name:\"gapCursor\",addProseMirrorPlugins(){return[r_()]},extendNodeSchema(t){var e;const n={name:t.name,options:t.options,storage:t.storage};return{allowGapCursor:(e=ge(Y(t,\"allowGapCursor\",n)))!=null?e:null}}}),Tg=\"placeholder\";function w_(t){return t.replace(/\\s+/g,\"-\").replace(/[^a-zA-Z0-9-]/g,\"\").replace(/^[0-9-]+/,\"\").replace(/^-+/,\"\").toLowerCase()}var aL=Se.create({name:\"placeholder\",addOptions(){return{emptyEditorClass:\"is-editor-empty\",emptyNodeClass:\"is-empty\",dataAttribute:Tg,placeholder:\"Write something …\",showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){const t=this.options.dataAttribute?`data-${w_(this.options.dataAttribute)}`:`data-${Tg}`;return[new we({key:new Ne(\"placeholder\"),props:{decorations:({doc:e,selection:n})=>{const s=this.editor.isEditable||!this.options.showOnlyWhenEditable,{anchor:r}=n,i=[];if(!s)return null;const o=this.editor.isEmpty;return e.descendants((l,a)=>{const c=r>=a&&r<=a+l.nodeSize,u=!l.isLeaf&&zc(l);if((c||!this.options.showOnlyCurrent)&&u){const f=[this.options.emptyNodeClass];o&&f.push(this.options.emptyEditorClass);const d=Ke.node(a,a+l.nodeSize,{class:f.join(\" \"),[t]:typeof this.options.placeholder==\"function\"?this.options.placeholder({editor:this.editor,node:l,pos:a,hasAnchor:c}):this.options.placeholder});i.push(d)}return this.options.includeChildren}),xe.create(e,i)}}})]}});Se.create({name:\"selection\",addOptions(){return{className:\"selection\"}},addProseMirrorPlugins(){const{editor:t,options:e}=this;return[new we({key:new Ne(\"selection\"),props:{decorations(n){return n.selection.empty||t.isFocused||!t.isEditable||LS(n.selection)||t.view.dragging?null:xe.create(n.doc,[Ke.inline(n.selection.from,n.selection.to,{class:e.className})])}}})]}});function Eg({types:t,node:e}){return e&&Array.isArray(t)&&t.includes(e.type)||e?.type===t}var x_=Se.create({name:\"trailingNode\",addOptions(){return{node:void 0,notAfter:[]}},addProseMirrorPlugins(){var t;const e=new Ne(this.name),n=this.options.node||((t=this.editor.schema.topNodeType.contentMatch.defaultType)==null?void 0:t.name)||\"paragraph\",s=Object.entries(this.editor.schema.nodes).map(([,r])=>r).filter(r=>(this.options.notAfter||[]).concat(n).includes(r.name));return[new we({key:e,appendTransaction:(r,i,o)=>{const{doc:l,tr:a,schema:c}=o,u=e.getState(o),f=l.content.size,d=c.nodes[n];if(u)return a.insert(f,d.create())},state:{init:(r,i)=>{const o=i.tr.doc.lastChild;return!Eg({node:o,types:s})},apply:(r,i)=>{if(!r.docChanged||r.getMeta(\"__uniqueIDTransaction\"))return i;const o=r.doc.lastChild;return!Eg({node:o,types:s})}}})]}}),C_=Se.create({name:\"undoRedo\",addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:t,dispatch:e})=>Tw(t,e),redo:()=>({state:t,dispatch:e})=>Ew(t,e)}},addProseMirrorPlugins(){return[y_(this.options)]},addKeyboardShortcuts(){return{\"Mod-z\":()=>this.editor.commands.undo(),\"Shift-Mod-z\":()=>this.editor.commands.redo(),\"Mod-y\":()=>this.editor.commands.redo(),\"Mod-я\":()=>this.editor.commands.undo(),\"Shift-Mod-я\":()=>this.editor.commands.redo()}}}),v_=Se.create({name:\"starterKit\",addExtensions(){var t,e,n,s;const r=[];return this.options.bold!==!1&&r.push(YR.configure(this.options.bold)),this.options.blockquote!==!1&&r.push(UR.configure(this.options.blockquote)),this.options.bulletList!==!1&&r.push(dw.configure(this.options.bulletList)),this.options.code!==!1&&r.push(ZR.configure(this.options.code)),this.options.codeBlock!==!1&&r.push(nI.configure(this.options.codeBlock)),this.options.document!==!1&&r.push(sI.configure(this.options.document)),this.options.dropcursor!==!1&&r.push(b_.configure(this.options.dropcursor)),this.options.gapcursor!==!1&&r.push(S_.configure(this.options.gapcursor)),this.options.hardBreak!==!1&&r.push(rI.configure(this.options.hardBreak)),this.options.heading!==!1&&r.push(tw.configure(this.options.heading)),this.options.undoRedo!==!1&&r.push(C_.configure(this.options.undoRedo)),this.options.horizontalRule!==!1&&r.push(iI.configure(this.options.horizontalRule)),this.options.italic!==!1&&r.push(uI.configure(this.options.italic)),this.options.listItem!==!1&&r.push(hw.configure(this.options.listItem)),this.options.listKeymap!==!1&&r.push(Sw.configure((t=this.options)==null?void 0:t.listKeymap)),this.options.link!==!1&&r.push(fw.configure((e=this.options)==null?void 0:e.link)),this.options.orderedList!==!1&&r.push(xw.configure(this.options.orderedList)),this.options.paragraph!==!1&&r.push(JI.configure(this.options.paragraph)),this.options.strike!==!1&&r.push(XI.configure(this.options.strike)),this.options.text!==!1&&r.push(QI.configure(this.options.text)),this.options.underline!==!1&&r.push(ZI.configure((n=this.options)==null?void 0:n.underline)),this.options.trailingNode!==!1&&r.push(x_.configure((s=this.options)==null?void 0:s.trailingNode)),r}}),cL=v_;const Mw=[\"top\",\"right\",\"bottom\",\"left\"],Mg=[\"start\",\"end\"],Ag=Mw.reduce((t,e)=>t.concat(e,e+\"-\"+Mg[0],e+\"-\"+Mg[1]),[]),An=Math.min,xt=Math.max,rc=Math.round,vn=t=>({x:t,y:t}),k_={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},T_={start:\"end\",end:\"start\"};function Uf(t,e,n){return xt(t,An(e,n))}function ls(t,e){return typeof t==\"function\"?t(e):t}function nn(t){return t.split(\"-\")[0]}function un(t){return t.split(\"-\")[1]}function Aw(t){return t===\"x\"?\"y\":\"x\"}function Bh(t){return t===\"y\"?\"height\":\"width\"}const E_=new Set([\"top\",\"bottom\"]);function Cn(t){return E_.has(nn(t))?\"y\":\"x\"}function $h(t){return Aw(Cn(t))}function Nw(t,e,n){n===void 0&&(n=!1);const s=un(t),r=$h(t),i=Bh(r);let o=r===\"x\"?s===(n?\"end\":\"start\")?\"right\":\"left\":s===\"start\"?\"bottom\":\"top\";return e.reference[i]>e.floating[i]&&(o=oc(o)),[o,oc(o)]}function M_(t){const e=oc(t);return[ic(t),e,ic(e)]}function ic(t){return t.replace(/start|end/g,e=>T_[e])}const Ng=[\"left\",\"right\"],Og=[\"right\",\"left\"],A_=[\"top\",\"bottom\"],N_=[\"bottom\",\"top\"];function O_(t,e,n){switch(t){case\"top\":case\"bottom\":return n?e?Og:Ng:e?Ng:Og;case\"left\":case\"right\":return e?A_:N_;default:return[]}}function R_(t,e,n,s){const r=un(t);let i=O_(nn(t),n===\"start\",s);return r&&(i=i.map(o=>o+\"-\"+r),e&&(i=i.concat(i.map(ic)))),i}function oc(t){return t.replace(/left|right|bottom|top/g,e=>k_[e])}function I_(t){return{top:0,right:0,bottom:0,left:0,...t}}function Hh(t){return typeof t!=\"number\"?I_(t):{top:t,right:t,bottom:t,left:t}}function bi(t){const{x:e,y:n,width:s,height:r}=t;return{width:s,height:r,top:n,left:e,right:e+s,bottom:n+r,x:e,y:n}}function Rg(t,e,n){let{reference:s,floating:r}=t;const i=Cn(e),o=$h(e),l=Bh(o),a=nn(e),c=i===\"y\",u=s.x+s.width/2-r.width/2,f=s.y+s.height/2-r.height/2,d=s[l]/2-r[l]/2;let h;switch(a){case\"top\":h={x:u,y:s.y-r.height};break;case\"bottom\":h={x:u,y:s.y+s.height};break;case\"right\":h={x:s.x+s.width,y:f};break;case\"left\":h={x:s.x-r.width,y:f};break;default:h={x:s.x,y:s.y}}switch(un(e)){case\"start\":h[o]-=d*(n&&c?-1:1);break;case\"end\":h[o]+=d*(n&&c?-1:1);break}return h}async function __(t,e){var n;e===void 0&&(e={});const{x:s,y:r,platform:i,rects:o,elements:l,strategy:a}=t,{boundary:c=\"clippingAncestors\",rootBoundary:u=\"viewport\",elementContext:f=\"floating\",altBoundary:d=!1,padding:h=0}=ls(e,t),p=Hh(h),g=l[d?f===\"floating\"?\"reference\":\"floating\":f],y=bi(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(g)))==null||n?g:g.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(l.floating)),boundary:c,rootBoundary:u,strategy:a})),S=f===\"floating\"?{x:s,y:r,width:o.floating.width,height:o.floating.height}:o.reference,b=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l.floating)),w=await(i.isElement==null?void 0:i.isElement(b))?await(i.getScale==null?void 0:i.getScale(b))||{x:1,y:1}:{x:1,y:1},x=bi(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:S,offsetParent:b,strategy:a}):S);return{top:(y.top-x.top+p.top)/w.y,bottom:(x.bottom-y.bottom+p.bottom)/w.y,left:(y.left-x.left+p.left)/w.x,right:(x.right-y.right+p.right)/w.x}}const D_=async(t,e,n)=>{const{placement:s=\"bottom\",strategy:r=\"absolute\",middleware:i=[],platform:o}=n,l=i.filter(Boolean),a=await(o.isRTL==null?void 0:o.isRTL(e));let c=await o.getElementRects({reference:t,floating:e,strategy:r}),{x:u,y:f}=Rg(c,s,a),d=s,h={},p=0;for(let g=0;g<l.length;g++){var m;const{name:y,fn:S}=l[g],{x:b,y:w,data:x,reset:E}=await S({x:u,y:f,initialPlacement:s,placement:d,strategy:r,middlewareData:h,rects:c,platform:{...o,detectOverflow:(m=o.detectOverflow)!=null?m:__},elements:{reference:t,floating:e}});u=b??u,f=w??f,h={...h,[y]:{...h[y],...x}},E&&p<=50&&(p++,typeof E==\"object\"&&(E.placement&&(d=E.placement),E.rects&&(c=E.rects===!0?await o.getElementRects({reference:t,floating:e,strategy:r}):E.rects),{x:u,y:f}=Rg(c,d,a)),g=-1)}return{x:u,y:f,placement:d,strategy:r,middlewareData:h}},P_=t=>({name:\"arrow\",options:t,async fn(e){const{x:n,y:s,placement:r,rects:i,platform:o,elements:l,middlewareData:a}=e,{element:c,padding:u=0}=ls(t,e)||{};if(c==null)return{};const f=Hh(u),d={x:n,y:s},h=$h(r),p=Bh(h),m=await o.getDimensions(c),g=h===\"y\",y=g?\"top\":\"left\",S=g?\"bottom\":\"right\",b=g?\"clientHeight\":\"clientWidth\",w=i.reference[p]+i.reference[h]-d[h]-i.floating[p],x=d[h]-i.reference[h],E=await(o.getOffsetParent==null?void 0:o.getOffsetParent(c));let k=E?E[b]:0;(!k||!await(o.isElement==null?void 0:o.isElement(E)))&&(k=l.floating[b]||i.floating[p]);const A=w/2-x/2,v=k/2-m[p]/2-1,T=An(f[y],v),O=An(f[S],v),N=T,_=k-m[p]-O,F=k/2-m[p]/2+A,j=Uf(N,F,_),R=!a.arrow&&un(r)!=null&&F!==j&&i.reference[p]/2-(F<N?T:O)-m[p]/2<0,V=R?F<N?F-N:F-_:0;return{[h]:d[h]+V,data:{[h]:j,centerOffset:F-j-V,...R&&{alignmentOffset:V}},reset:R}}});function L_(t,e,n){return(t?[...n.filter(r=>un(r)===t),...n.filter(r=>un(r)!==t)]:n.filter(r=>nn(r)===r)).filter(r=>t?un(r)===t||(e?ic(r)!==r:!1):!0)}const B_=function(t){return t===void 0&&(t={}),{name:\"autoPlacement\",options:t,async fn(e){var n,s,r;const{rects:i,middlewareData:o,placement:l,platform:a,elements:c}=e,{crossAxis:u=!1,alignment:f,allowedPlacements:d=Ag,autoAlignment:h=!0,...p}=ls(t,e),m=f!==void 0||d===Ag?L_(f||null,h,d):d,g=await a.detectOverflow(e,p),y=((n=o.autoPlacement)==null?void 0:n.index)||0,S=m[y];if(S==null)return{};const b=Nw(S,i,await(a.isRTL==null?void 0:a.isRTL(c.floating)));if(l!==S)return{reset:{placement:m[0]}};const w=[g[nn(S)],g[b[0]],g[b[1]]],x=[...((s=o.autoPlacement)==null?void 0:s.overflows)||[],{placement:S,overflows:w}],E=m[y+1];if(E)return{data:{index:y+1,overflows:x},reset:{placement:E}};const k=x.map(T=>{const O=un(T.placement);return[T.placement,O&&u?T.overflows.slice(0,2).reduce((N,_)=>N+_,0):T.overflows[0],T.overflows]}).sort((T,O)=>T[1]-O[1]),v=((r=k.filter(T=>T[2].slice(0,un(T[0])?2:3).every(O=>O<=0))[0])==null?void 0:r[0])||k[0][0];return v!==l?{data:{index:y+1,overflows:x},reset:{placement:v}}:{}}}},$_=function(t){return t===void 0&&(t={}),{name:\"flip\",options:t,async fn(e){var n,s;const{placement:r,middlewareData:i,rects:o,initialPlacement:l,platform:a,elements:c}=e,{mainAxis:u=!0,crossAxis:f=!0,fallbackPlacements:d,fallbackStrategy:h=\"bestFit\",fallbackAxisSideDirection:p=\"none\",flipAlignment:m=!0,...g}=ls(t,e);if((n=i.arrow)!=null&&n.alignmentOffset)return{};const y=nn(r),S=Cn(l),b=nn(l)===l,w=await(a.isRTL==null?void 0:a.isRTL(c.floating)),x=d||(b||!m?[oc(l)]:M_(l)),E=p!==\"none\";!d&&E&&x.push(...R_(l,m,p,w));const k=[l,...x],A=await a.detectOverflow(e,g),v=[];let T=((s=i.flip)==null?void 0:s.overflows)||[];if(u&&v.push(A[y]),f){const F=Nw(r,o,w);v.push(A[F[0]],A[F[1]])}if(T=[...T,{placement:r,overflows:v}],!v.every(F=>F<=0)){var O,N;const F=(((O=i.flip)==null?void 0:O.index)||0)+1,j=k[F];if(j&&(!(f===\"alignment\"?S!==Cn(j):!1)||T.every($=>Cn($.placement)===S?$.overflows[0]>0:!0)))return{data:{index:F,overflows:T},reset:{placement:j}};let R=(N=T.filter(V=>V.overflows[0]<=0).sort((V,$)=>V.overflows[1]-$.overflows[1])[0])==null?void 0:N.placement;if(!R)switch(h){case\"bestFit\":{var _;const V=(_=T.filter($=>{if(E){const ie=Cn($.placement);return ie===S||ie===\"y\"}return!0}).map($=>[$.placement,$.overflows.filter(ie=>ie>0).reduce((ie,Xe)=>ie+Xe,0)]).sort(($,ie)=>$[1]-ie[1])[0])==null?void 0:_[0];V&&(R=V);break}case\"initialPlacement\":R=l;break}if(r!==R)return{reset:{placement:R}}}return{}}}};function Ig(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function _g(t){return Mw.some(e=>t[e]>=0)}const H_=function(t){return t===void 0&&(t={}),{name:\"hide\",options:t,async fn(e){const{rects:n,platform:s}=e,{strategy:r=\"referenceHidden\",...i}=ls(t,e);switch(r){case\"referenceHidden\":{const o=await s.detectOverflow(e,{...i,elementContext:\"reference\"}),l=Ig(o,n.reference);return{data:{referenceHiddenOffsets:l,referenceHidden:_g(l)}}}case\"escaped\":{const o=await s.detectOverflow(e,{...i,altBoundary:!0}),l=Ig(o,n.floating);return{data:{escapedOffsets:l,escaped:_g(l)}}}default:return{}}}}};function Ow(t){const e=An(...t.map(i=>i.left)),n=An(...t.map(i=>i.top)),s=xt(...t.map(i=>i.right)),r=xt(...t.map(i=>i.bottom));return{x:e,y:n,width:s-e,height:r-n}}function F_(t){const e=t.slice().sort((r,i)=>r.y-i.y),n=[];let s=null;for(let r=0;r<e.length;r++){const i=e[r];!s||i.y-s.y>s.height/2?n.push([i]):n[n.length-1].push(i),s=i}return n.map(r=>bi(Ow(r)))}const z_=function(t){return t===void 0&&(t={}),{name:\"inline\",options:t,async fn(e){const{placement:n,elements:s,rects:r,platform:i,strategy:o}=e,{padding:l=2,x:a,y:c}=ls(t,e),u=Array.from(await(i.getClientRects==null?void 0:i.getClientRects(s.reference))||[]),f=F_(u),d=bi(Ow(u)),h=Hh(l);function p(){if(f.length===2&&f[0].left>f[1].right&&a!=null&&c!=null)return f.find(g=>a>g.left-h.left&&a<g.right+h.right&&c>g.top-h.top&&c<g.bottom+h.bottom)||d;if(f.length>=2){if(Cn(n)===\"y\"){const T=f[0],O=f[f.length-1],N=nn(n)===\"top\",_=T.top,F=O.bottom,j=N?T.left:O.left,R=N?T.right:O.right,V=R-j,$=F-_;return{top:_,bottom:F,left:j,right:R,width:V,height:$,x:j,y:_}}const g=nn(n)===\"left\",y=xt(...f.map(T=>T.right)),S=An(...f.map(T=>T.left)),b=f.filter(T=>g?T.left===S:T.right===y),w=b[0].top,x=b[b.length-1].bottom,E=S,k=y,A=k-E,v=x-w;return{top:w,bottom:x,left:E,right:k,width:A,height:v,x:E,y:w}}return d}const m=await i.getElementRects({reference:{getBoundingClientRect:p},floating:s.floating,strategy:o});return r.reference.x!==m.reference.x||r.reference.y!==m.reference.y||r.reference.width!==m.reference.width||r.reference.height!==m.reference.height?{reset:{rects:m}}:{}}}},V_=new Set([\"left\",\"top\"]);async function W_(t,e){const{placement:n,platform:s,elements:r}=t,i=await(s.isRTL==null?void 0:s.isRTL(r.floating)),o=nn(n),l=un(n),a=Cn(n)===\"y\",c=V_.has(o)?-1:1,u=i&&a?-1:1,f=ls(e,t);let{mainAxis:d,crossAxis:h,alignmentAxis:p}=typeof f==\"number\"?{mainAxis:f,crossAxis:0,alignmentAxis:null}:{mainAxis:f.mainAxis||0,crossAxis:f.crossAxis||0,alignmentAxis:f.alignmentAxis};return l&&typeof p==\"number\"&&(h=l===\"end\"?p*-1:p),a?{x:h*u,y:d*c}:{x:d*c,y:h*u}}const j_=function(t){return t===void 0&&(t=0),{name:\"offset\",options:t,async fn(e){var n,s;const{x:r,y:i,placement:o,middlewareData:l}=e,a=await W_(e,t);return o===((n=l.offset)==null?void 0:n.placement)&&(s=l.arrow)!=null&&s.alignmentOffset?{}:{x:r+a.x,y:i+a.y,data:{...a,placement:o}}}}},U_=function(t){return t===void 0&&(t={}),{name:\"shift\",options:t,async fn(e){const{x:n,y:s,placement:r,platform:i}=e,{mainAxis:o=!0,crossAxis:l=!1,limiter:a={fn:y=>{let{x:S,y:b}=y;return{x:S,y:b}}},...c}=ls(t,e),u={x:n,y:s},f=await i.detectOverflow(e,c),d=Cn(nn(r)),h=Aw(d);let p=u[h],m=u[d];if(o){const y=h===\"y\"?\"top\":\"left\",S=h===\"y\"?\"bottom\":\"right\",b=p+f[y],w=p-f[S];p=Uf(b,p,w)}if(l){const y=d===\"y\"?\"top\":\"left\",S=d===\"y\"?\"bottom\":\"right\",b=m+f[y],w=m-f[S];m=Uf(b,m,w)}const g=a.fn({...e,[h]:p,[d]:m});return{...g,data:{x:g.x-n,y:g.y-s,enabled:{[h]:o,[d]:l}}}}}},K_=function(t){return t===void 0&&(t={}),{name:\"size\",options:t,async fn(e){var n,s;const{placement:r,rects:i,platform:o,elements:l}=e,{apply:a=()=>{},...c}=ls(t,e),u=await o.detectOverflow(e,c),f=nn(r),d=un(r),h=Cn(r)===\"y\",{width:p,height:m}=i.floating;let g,y;f===\"top\"||f===\"bottom\"?(g=f,y=d===(await(o.isRTL==null?void 0:o.isRTL(l.floating))?\"start\":\"end\")?\"left\":\"right\"):(y=f,g=d===\"end\"?\"top\":\"bottom\");const S=m-u.top-u.bottom,b=p-u.left-u.right,w=An(m-u[g],S),x=An(p-u[y],b),E=!e.middlewareData.shift;let k=w,A=x;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(A=b),(s=e.middlewareData.shift)!=null&&s.enabled.y&&(k=S),E&&!d){const T=xt(u.left,0),O=xt(u.right,0),N=xt(u.top,0),_=xt(u.bottom,0);h?A=p-2*(T!==0||O!==0?T+O:xt(u.left,u.right)):k=m-2*(N!==0||_!==0?N+_:xt(u.top,u.bottom))}await a({...e,availableWidth:A,availableHeight:k});const v=await o.getDimensions(l.floating);return p!==v.width||m!==v.height?{reset:{rects:!0}}:{}}}};function Kc(){return typeof window<\"u\"}function Ti(t){return Rw(t)?(t.nodeName||\"\").toLowerCase():\"#document\"}function Vt(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function as(t){var e;return(e=(Rw(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Rw(t){return Kc()?t instanceof Node||t instanceof Vt(t).Node:!1}function dn(t){return Kc()?t instanceof Element||t instanceof Vt(t).Element:!1}function Nn(t){return Kc()?t instanceof HTMLElement||t instanceof Vt(t).HTMLElement:!1}function Dg(t){return!Kc()||typeof ShadowRoot>\"u\"?!1:t instanceof ShadowRoot||t instanceof Vt(t).ShadowRoot}const q_=new Set([\"inline\",\"contents\"]);function Zo(t){const{overflow:e,overflowX:n,overflowY:s,display:r}=hn(t);return/auto|scroll|overlay|hidden|clip/.test(e+s+n)&&!q_.has(r)}const J_=new Set([\"table\",\"td\",\"th\"]);function G_(t){return J_.has(Ti(t))}const Y_=[\":popover-open\",\":modal\"];function qc(t){return Y_.some(e=>{try{return t.matches(e)}catch{return!1}})}const X_=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],Q_=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],Z_=[\"paint\",\"layout\",\"strict\",\"content\"];function Fh(t){const e=zh(),n=dn(t)?hn(t):t;return X_.some(s=>n[s]?n[s]!==\"none\":!1)||(n.containerType?n.containerType!==\"normal\":!1)||!e&&(n.backdropFilter?n.backdropFilter!==\"none\":!1)||!e&&(n.filter?n.filter!==\"none\":!1)||Q_.some(s=>(n.willChange||\"\").includes(s))||Z_.some(s=>(n.contain||\"\").includes(s))}function eD(t){let e=Vs(t);for(;Nn(e)&&!Si(e);){if(Fh(e))return e;if(qc(e))return null;e=Vs(e)}return null}function zh(){return typeof CSS>\"u\"||!CSS.supports?!1:CSS.supports(\"-webkit-backdrop-filter\",\"none\")}const tD=new Set([\"html\",\"body\",\"#document\"]);function Si(t){return tD.has(Ti(t))}function hn(t){return Vt(t).getComputedStyle(t)}function Jc(t){return dn(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function Vs(t){if(Ti(t)===\"html\")return t;const e=t.assignedSlot||t.parentNode||Dg(t)&&t.host||as(t);return Dg(e)?e.host:e}function Iw(t){const e=Vs(t);return Si(e)?t.ownerDocument?t.ownerDocument.body:t.body:Nn(e)&&Zo(e)?e:Iw(e)}function _w(t,e,n){var s;e===void 0&&(e=[]);const r=Iw(t),i=r===((s=t.ownerDocument)==null?void 0:s.body),o=Vt(r);return i?(Kf(o),e.concat(o,o.visualViewport||[],Zo(r)?r:[],[])):e.concat(r,_w(r,[]))}function Kf(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Dw(t){const e=hn(t);let n=parseFloat(e.width)||0,s=parseFloat(e.height)||0;const r=Nn(t),i=r?t.offsetWidth:n,o=r?t.offsetHeight:s,l=rc(n)!==i||rc(s)!==o;return l&&(n=i,s=o),{width:n,height:s,$:l}}function Pw(t){return dn(t)?t:t.contextElement}function ni(t){const e=Pw(t);if(!Nn(e))return vn(1);const n=e.getBoundingClientRect(),{width:s,height:r,$:i}=Dw(e);let o=(i?rc(n.width):n.width)/s,l=(i?rc(n.height):n.height)/r;return(!o||!Number.isFinite(o))&&(o=1),(!l||!Number.isFinite(l))&&(l=1),{x:o,y:l}}const nD=vn(0);function Lw(t){const e=Vt(t);return!zh()||!e.visualViewport?nD:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function sD(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==Vt(t)?!1:e}function Po(t,e,n,s){e===void 0&&(e=!1),n===void 0&&(n=!1);const r=t.getBoundingClientRect(),i=Pw(t);let o=vn(1);e&&(s?dn(s)&&(o=ni(s)):o=ni(t));const l=sD(i,n,s)?Lw(i):vn(0);let a=(r.left+l.x)/o.x,c=(r.top+l.y)/o.y,u=r.width/o.x,f=r.height/o.y;if(i){const d=Vt(i),h=s&&dn(s)?Vt(s):s;let p=d,m=Kf(p);for(;m&&s&&h!==p;){const g=ni(m),y=m.getBoundingClientRect(),S=hn(m),b=y.left+(m.clientLeft+parseFloat(S.paddingLeft))*g.x,w=y.top+(m.clientTop+parseFloat(S.paddingTop))*g.y;a*=g.x,c*=g.y,u*=g.x,f*=g.y,a+=b,c+=w,p=Vt(m),m=Kf(p)}}return bi({width:u,height:f,x:a,y:c})}function Gc(t,e){const n=Jc(t).scrollLeft;return e?e.left+n:Po(as(t)).left+n}function Bw(t,e){const n=t.getBoundingClientRect(),s=n.left+e.scrollLeft-Gc(t,n),r=n.top+e.scrollTop;return{x:s,y:r}}function rD(t){let{elements:e,rect:n,offsetParent:s,strategy:r}=t;const i=r===\"fixed\",o=as(s),l=e?qc(e.floating):!1;if(s===o||l&&i)return n;let a={scrollLeft:0,scrollTop:0},c=vn(1);const u=vn(0),f=Nn(s);if((f||!f&&!i)&&((Ti(s)!==\"body\"||Zo(o))&&(a=Jc(s)),Nn(s))){const h=Po(s);c=ni(s),u.x=h.x+s.clientLeft,u.y=h.y+s.clientTop}const d=o&&!f&&!i?Bw(o,a):vn(0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-a.scrollLeft*c.x+u.x+d.x,y:n.y*c.y-a.scrollTop*c.y+u.y+d.y}}function iD(t){return Array.from(t.getClientRects())}function oD(t){const e=as(t),n=Jc(t),s=t.ownerDocument.body,r=xt(e.scrollWidth,e.clientWidth,s.scrollWidth,s.clientWidth),i=xt(e.scrollHeight,e.clientHeight,s.scrollHeight,s.clientHeight);let o=-n.scrollLeft+Gc(t);const l=-n.scrollTop;return hn(s).direction===\"rtl\"&&(o+=xt(e.clientWidth,s.clientWidth)-r),{width:r,height:i,x:o,y:l}}const Pg=25;function lD(t,e){const n=Vt(t),s=as(t),r=n.visualViewport;let i=s.clientWidth,o=s.clientHeight,l=0,a=0;if(r){i=r.width,o=r.height;const u=zh();(!u||u&&e===\"fixed\")&&(l=r.offsetLeft,a=r.offsetTop)}const c=Gc(s);if(c<=0){const u=s.ownerDocument,f=u.body,d=getComputedStyle(f),h=u.compatMode===\"CSS1Compat\"&&parseFloat(d.marginLeft)+parseFloat(d.marginRight)||0,p=Math.abs(s.clientWidth-f.clientWidth-h);p<=Pg&&(i-=p)}else c<=Pg&&(i+=c);return{width:i,height:o,x:l,y:a}}const aD=new Set([\"absolute\",\"fixed\"]);function cD(t,e){const n=Po(t,!0,e===\"fixed\"),s=n.top+t.clientTop,r=n.left+t.clientLeft,i=Nn(t)?ni(t):vn(1),o=t.clientWidth*i.x,l=t.clientHeight*i.y,a=r*i.x,c=s*i.y;return{width:o,height:l,x:a,y:c}}function Lg(t,e,n){let s;if(e===\"viewport\")s=lD(t,n);else if(e===\"document\")s=oD(as(t));else if(dn(e))s=cD(e,n);else{const r=Lw(t);s={x:e.x-r.x,y:e.y-r.y,width:e.width,height:e.height}}return bi(s)}function $w(t,e){const n=Vs(t);return n===e||!dn(n)||Si(n)?!1:hn(n).position===\"fixed\"||$w(n,e)}function uD(t,e){const n=e.get(t);if(n)return n;let s=_w(t,[]).filter(l=>dn(l)&&Ti(l)!==\"body\"),r=null;const i=hn(t).position===\"fixed\";let o=i?Vs(t):t;for(;dn(o)&&!Si(o);){const l=hn(o),a=Fh(o);!a&&l.position===\"fixed\"&&(r=null),(i?!a&&!r:!a&&l.position===\"static\"&&!!r&&aD.has(r.position)||Zo(o)&&!a&&$w(t,o))?s=s.filter(u=>u!==o):r=l,o=Vs(o)}return e.set(t,s),s}function fD(t){let{element:e,boundary:n,rootBoundary:s,strategy:r}=t;const o=[...n===\"clippingAncestors\"?qc(e)?[]:uD(e,this._c):[].concat(n),s],l=o[0],a=o.reduce((c,u)=>{const f=Lg(e,u,r);return c.top=xt(f.top,c.top),c.right=An(f.right,c.right),c.bottom=An(f.bottom,c.bottom),c.left=xt(f.left,c.left),c},Lg(e,l,r));return{width:a.right-a.left,height:a.bottom-a.top,x:a.left,y:a.top}}function dD(t){const{width:e,height:n}=Dw(t);return{width:e,height:n}}function hD(t,e,n){const s=Nn(e),r=as(e),i=n===\"fixed\",o=Po(t,!0,i,e);let l={scrollLeft:0,scrollTop:0};const a=vn(0);function c(){a.x=Gc(r)}if(s||!s&&!i)if((Ti(e)!==\"body\"||Zo(r))&&(l=Jc(e)),s){const h=Po(e,!0,i,e);a.x=h.x+e.clientLeft,a.y=h.y+e.clientTop}else r&&c();i&&!s&&r&&c();const u=r&&!s&&!i?Bw(r,l):vn(0),f=o.left+l.scrollLeft-a.x-u.x,d=o.top+l.scrollTop-a.y-u.y;return{x:f,y:d,width:o.width,height:o.height}}function Hu(t){return hn(t).position===\"static\"}function Bg(t,e){if(!Nn(t)||hn(t).position===\"fixed\")return null;if(e)return e(t);let n=t.offsetParent;return as(t)===n&&(n=n.ownerDocument.body),n}function Hw(t,e){const n=Vt(t);if(qc(t))return n;if(!Nn(t)){let r=Vs(t);for(;r&&!Si(r);){if(dn(r)&&!Hu(r))return r;r=Vs(r)}return n}let s=Bg(t,e);for(;s&&G_(s)&&Hu(s);)s=Bg(s,e);return s&&Si(s)&&Hu(s)&&!Fh(s)?n:s||eD(t)||n}const pD=async function(t){const e=this.getOffsetParent||Hw,n=this.getDimensions,s=await n(t.floating);return{reference:hD(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:s.width,height:s.height}}};function mD(t){return hn(t).direction===\"rtl\"}const gD={convertOffsetParentRelativeRectToViewportRelativeRect:rD,getDocumentElement:as,getClippingRect:fD,getOffsetParent:Hw,getElementRects:pD,getClientRects:iD,getDimensions:dD,getScale:ni,isElement:dn,isRTL:mD},yD=j_,bD=B_,SD=U_,wD=$_,xD=K_,CD=H_,vD=P_,kD=z_,TD=(t,e,n)=>{const s=new Map,r={platform:gD,...n},i={...r.platform,_c:s};return D_(t,e,{...r,platform:i})};let qf,Jf;if(typeof WeakMap<\"u\"){let t=new WeakMap;qf=e=>t.get(e),Jf=(e,n)=>(t.set(e,n),n)}else{const t=[];let n=0;qf=s=>{for(let r=0;r<t.length;r+=2)if(t[r]==s)return t[r+1]},Jf=(s,r)=>(n==10&&(n=0),t[n++]=s,t[n++]=r)}var Pe=class{constructor(t,e,n,s){this.width=t,this.height=e,this.map=n,this.problems=s}findCell(t){for(let e=0;e<this.map.length;e++){const n=this.map[e];if(n!=t)continue;const s=e%this.width,r=e/this.width|0;let i=s+1,o=r+1;for(let l=1;i<this.width&&this.map[e+l]==n;l++)i++;for(let l=1;o<this.height&&this.map[e+this.width*l]==n;l++)o++;return{left:s,top:r,right:i,bottom:o}}throw new RangeError(`No cell with offset ${t} found`)}colCount(t){for(let e=0;e<this.map.length;e++)if(this.map[e]==t)return e%this.width;throw new RangeError(`No cell with offset ${t} found`)}nextCell(t,e,n){const{left:s,right:r,top:i,bottom:o}=this.findCell(t);return e==\"horiz\"?(n<0?s==0:r==this.width)?null:this.map[i*this.width+(n<0?s-1:r)]:(n<0?i==0:o==this.height)?null:this.map[s+this.width*(n<0?i-1:o)]}rectBetween(t,e){const{left:n,right:s,top:r,bottom:i}=this.findCell(t),{left:o,right:l,top:a,bottom:c}=this.findCell(e);return{left:Math.min(n,o),top:Math.min(r,a),right:Math.max(s,l),bottom:Math.max(i,c)}}cellsInRect(t){const e=[],n={};for(let s=t.top;s<t.bottom;s++)for(let r=t.left;r<t.right;r++){const i=s*this.width+r,o=this.map[i];n[o]||(n[o]=!0,!(r==t.left&&r&&this.map[i-1]==o||s==t.top&&s&&this.map[i-this.width]==o)&&e.push(o))}return e}positionAt(t,e,n){for(let s=0,r=0;;s++){const i=r+n.child(s).nodeSize;if(s==t){let o=e+t*this.width;const l=(t+1)*this.width;for(;o<l&&this.map[o]<r;)o++;return o==l?i-1:this.map[o]}r=i}}static get(t){return qf(t)||Jf(t,ED(t))}};function ED(t){if(t.type.spec.tableRole!=\"table\")throw new RangeError(\"Not a table node: \"+t.type.name);const e=MD(t),n=t.childCount,s=[];let r=0,i=null;const o=[];for(let c=0,u=e*n;c<u;c++)s[c]=0;for(let c=0,u=0;c<n;c++){const f=t.child(c);u++;for(let p=0;;p++){for(;r<s.length&&s[r]!=0;)r++;if(p==f.childCount)break;const m=f.child(p),{colspan:g,rowspan:y,colwidth:S}=m.attrs;for(let b=0;b<y;b++){if(b+c>=n){(i||(i=[])).push({type:\"overlong_rowspan\",pos:u,n:y-b});break}const w=r+b*e;for(let x=0;x<g;x++){s[w+x]==0?s[w+x]=u:(i||(i=[])).push({type:\"collision\",row:c,pos:u,n:g-x});const E=S&&S[x];if(E){const k=(w+x)%e*2,A=o[k];A==null||A!=E&&o[k+1]==1?(o[k]=E,o[k+1]=1):A==E&&o[k+1]++}}}r+=g,u+=m.nodeSize}const d=(c+1)*e;let h=0;for(;r<d;)s[r++]==0&&h++;h&&(i||(i=[])).push({type:\"missing\",row:c,n:h}),u++}(e===0||n===0)&&(i||(i=[])).push({type:\"zero_sized\"});const l=new Pe(e,n,s,i);let a=!1;for(let c=0;!a&&c<o.length;c+=2)o[c]!=null&&o[c+1]<n&&(a=!0);return a&&AD(l,o,t),l}function MD(t){let e=-1,n=!1;for(let s=0;s<t.childCount;s++){const r=t.child(s);let i=0;if(n)for(let o=0;o<s;o++){const l=t.child(o);for(let a=0;a<l.childCount;a++){const c=l.child(a);o+c.attrs.rowspan>s&&(i+=c.attrs.colspan)}}for(let o=0;o<r.childCount;o++){const l=r.child(o);i+=l.attrs.colspan,l.attrs.rowspan>1&&(n=!0)}e==-1?e=i:e!=i&&(e=Math.max(e,i))}return e}function AD(t,e,n){t.problems||(t.problems=[]);const s={};for(let r=0;r<t.map.length;r++){const i=t.map[r];if(s[i])continue;s[i]=!0;const o=n.nodeAt(i);if(!o)throw new RangeError(`No cell with offset ${i} found`);let l=null;const a=o.attrs;for(let c=0;c<a.colspan;c++){const u=e[(r+c)%t.width*2];u!=null&&(!a.colwidth||a.colwidth[c]!=u)&&((l||(l=ND(a)))[c]=u)}l&&t.problems.unshift({type:\"colwidth mismatch\",pos:i,colwidth:l})}}function ND(t){if(t.colwidth)return t.colwidth.slice();const e=[];for(let n=0;n<t.colspan;n++)e.push(0);return e}function gt(t){let e=t.cached.tableNodeTypes;if(!e){e=t.cached.tableNodeTypes={};for(const n in t.nodes){const s=t.nodes[n],r=s.spec.tableRole;r&&(e[r]=s)}}return e}const Es=new Ne(\"selectingCells\");function xr(t){for(let e=t.depth-1;e>0;e--)if(t.node(e).type.spec.tableRole==\"row\")return t.node(0).resolve(t.before(e+1));return null}function OD(t){for(let e=t.depth;e>0;e--){const n=t.node(e).type.spec.tableRole;if(n===\"cell\"||n===\"header_cell\")return t.node(e)}return null}function pn(t){const e=t.selection.$head;for(let n=e.depth;n>0;n--)if(e.node(n).type.spec.tableRole==\"row\")return!0;return!1}function Yc(t){const e=t.selection;if(\"$anchorCell\"in e&&e.$anchorCell)return e.$anchorCell.pos>e.$headCell.pos?e.$anchorCell:e.$headCell;if(\"node\"in e&&e.node&&e.node.type.spec.tableRole==\"cell\")return e.$anchor;const n=xr(e.$head)||RD(e.$head);if(n)return n;throw new RangeError(`No cell found around position ${e.head}`)}function RD(t){for(let e=t.nodeAfter,n=t.pos;e;e=e.firstChild,n++){const s=e.type.spec.tableRole;if(s==\"cell\"||s==\"header_cell\")return t.doc.resolve(n)}for(let e=t.nodeBefore,n=t.pos;e;e=e.lastChild,n--){const s=e.type.spec.tableRole;if(s==\"cell\"||s==\"header_cell\")return t.doc.resolve(n-e.nodeSize)}}function Gf(t){return t.parent.type.spec.tableRole==\"row\"&&!!t.nodeAfter}function ID(t){return t.node(0).resolve(t.pos+t.nodeAfter.nodeSize)}function Vh(t,e){return t.depth==e.depth&&t.pos>=e.start(-1)&&t.pos<=e.end(-1)}function Fw(t,e,n){const s=t.node(-1),r=Pe.get(s),i=t.start(-1),o=r.nextCell(t.pos-i,e,n);return o==null?null:t.node(0).resolve(i+o)}function Cr(t,e,n=1){const s={...t,colspan:t.colspan-n};return s.colwidth&&(s.colwidth=s.colwidth.slice(),s.colwidth.splice(e,n),s.colwidth.some(r=>r>0)||(s.colwidth=null)),s}function zw(t,e,n=1){const s={...t,colspan:t.colspan+n};if(s.colwidth){s.colwidth=s.colwidth.slice();for(let r=0;r<n;r++)s.colwidth.splice(e,0,0)}return s}function _D(t,e,n){const s=gt(e.type.schema).header_cell;for(let r=0;r<t.height;r++)if(e.nodeAt(t.map[n+r*t.width]).type!=s)return!1;return!0}var ve=class $n extends ee{constructor(e,n=e){const s=e.node(-1),r=Pe.get(s),i=e.start(-1),o=r.rectBetween(e.pos-i,n.pos-i),l=e.node(0),a=r.cellsInRect(o).filter(u=>u!=n.pos-i);a.unshift(n.pos-i);const c=a.map(u=>{const f=s.nodeAt(u);if(!f)throw new RangeError(`No cell with offset ${u} found`);const d=i+u+1;return new k1(l.resolve(d),l.resolve(d+f.content.size))});super(c[0].$from,c[0].$to,c),this.$anchorCell=e,this.$headCell=n}map(e,n){const s=e.resolve(n.map(this.$anchorCell.pos)),r=e.resolve(n.map(this.$headCell.pos));if(Gf(s)&&Gf(r)&&Vh(s,r)){const i=this.$anchorCell.node(-1)!=s.node(-1);return i&&this.isRowSelection()?$n.rowSelection(s,r):i&&this.isColSelection()?$n.colSelection(s,r):new $n(s,r)}return Z.between(s,r)}content(){const e=this.$anchorCell.node(-1),n=Pe.get(e),s=this.$anchorCell.start(-1),r=n.rectBetween(this.$anchorCell.pos-s,this.$headCell.pos-s),i={},o=[];for(let a=r.top;a<r.bottom;a++){const c=[];for(let u=a*n.width+r.left,f=r.left;f<r.right;f++,u++){const d=n.map[u];if(i[d])continue;i[d]=!0;const h=n.findCell(d);let p=e.nodeAt(d);if(!p)throw new RangeError(`No cell with offset ${d} found`);const m=r.left-h.left,g=h.right-r.right;if(m>0||g>0){let y=p.attrs;if(m>0&&(y=Cr(y,0,m)),g>0&&(y=Cr(y,y.colspan-g,g)),h.left<r.left){if(p=p.type.createAndFill(y),!p)throw new RangeError(`Could not create cell with attrs ${JSON.stringify(y)}`)}else p=p.type.create(y,p.content)}if(h.top<r.top||h.bottom>r.bottom){const y={...p.attrs,rowspan:Math.min(h.bottom,r.bottom)-Math.max(h.top,r.top)};h.top<r.top?p=p.type.createAndFill(y):p=p.type.create(y,p.content)}c.push(p)}o.push(e.child(a).copy(D.from(c)))}const l=this.isColSelection()&&this.isRowSelection()?e:o;return new K(D.from(l),1,1)}replace(e,n=K.empty){const s=e.steps.length,r=this.ranges;for(let o=0;o<r.length;o++){const{$from:l,$to:a}=r[o],c=e.mapping.slice(s);e.replace(c.map(l.pos),c.map(a.pos),o?K.empty:n)}const i=ee.findFrom(e.doc.resolve(e.mapping.slice(s).map(this.to)),-1);i&&e.setSelection(i)}replaceWith(e,n){this.replace(e,new K(D.from(n),0,0))}forEachCell(e){const n=this.$anchorCell.node(-1),s=Pe.get(n),r=this.$anchorCell.start(-1),i=s.cellsInRect(s.rectBetween(this.$anchorCell.pos-r,this.$headCell.pos-r));for(let o=0;o<i.length;o++)e(n.nodeAt(i[o]),r+i[o])}isColSelection(){const e=this.$anchorCell.index(-1),n=this.$headCell.index(-1);if(Math.min(e,n)>0)return!1;const s=e+this.$anchorCell.nodeAfter.attrs.rowspan,r=n+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(s,r)==this.$headCell.node(-1).childCount}static colSelection(e,n=e){const s=e.node(-1),r=Pe.get(s),i=e.start(-1),o=r.findCell(e.pos-i),l=r.findCell(n.pos-i),a=e.node(0);return o.top<=l.top?(o.top>0&&(e=a.resolve(i+r.map[o.left])),l.bottom<r.height&&(n=a.resolve(i+r.map[r.width*(r.height-1)+l.right-1]))):(l.top>0&&(n=a.resolve(i+r.map[l.left])),o.bottom<r.height&&(e=a.resolve(i+r.map[r.width*(r.height-1)+o.right-1]))),new $n(e,n)}isRowSelection(){const e=this.$anchorCell.node(-1),n=Pe.get(e),s=this.$anchorCell.start(-1),r=n.colCount(this.$anchorCell.pos-s),i=n.colCount(this.$headCell.pos-s);if(Math.min(r,i)>0)return!1;const o=r+this.$anchorCell.nodeAfter.attrs.colspan,l=i+this.$headCell.nodeAfter.attrs.colspan;return Math.max(o,l)==n.width}eq(e){return e instanceof $n&&e.$anchorCell.pos==this.$anchorCell.pos&&e.$headCell.pos==this.$headCell.pos}static rowSelection(e,n=e){const s=e.node(-1),r=Pe.get(s),i=e.start(-1),o=r.findCell(e.pos-i),l=r.findCell(n.pos-i),a=e.node(0);return o.left<=l.left?(o.left>0&&(e=a.resolve(i+r.map[o.top*r.width])),l.right<r.width&&(n=a.resolve(i+r.map[r.width*(l.top+1)-1]))):(l.left>0&&(n=a.resolve(i+r.map[l.top*r.width])),o.right<r.width&&(e=a.resolve(i+r.map[r.width*(o.top+1)-1]))),new $n(e,n)}toJSON(){return{type:\"cell\",anchor:this.$anchorCell.pos,head:this.$headCell.pos}}static fromJSON(e,n){return new $n(e.resolve(n.anchor),e.resolve(n.head))}static create(e,n,s=n){return new $n(e.resolve(n),e.resolve(s))}getBookmark(){return new DD(this.$anchorCell.pos,this.$headCell.pos)}};ve.prototype.visible=!1;ee.jsonID(\"cell\",ve);var DD=class Vw{constructor(e,n){this.anchor=e,this.head=n}map(e){return new Vw(e.map(this.anchor),e.map(this.head))}resolve(e){const n=e.resolve(this.anchor),s=e.resolve(this.head);return n.parent.type.spec.tableRole==\"row\"&&s.parent.type.spec.tableRole==\"row\"&&n.index()<n.parent.childCount&&s.index()<s.parent.childCount&&Vh(n,s)?new ve(n,s):ee.near(s,1)}};function PD(t){if(!(t.selection instanceof ve))return null;const e=[];return t.selection.forEachCell((n,s)=>{e.push(Ke.node(s,s+n.nodeSize,{class:\"selectedCell\"}))}),xe.create(t.doc,e)}function LD({$from:t,$to:e}){if(t.pos==e.pos||t.pos<e.pos-6)return!1;let n=t.pos,s=e.pos,r=t.depth;for(;r>=0&&!(t.after(r+1)<t.end(r));r--,n++);for(let i=e.depth;i>=0&&!(e.before(i+1)>e.start(i));i--,s--);return n==s&&/row|table/.test(t.node(r).type.spec.tableRole)}function BD({$from:t,$to:e}){let n,s;for(let r=t.depth;r>0;r--){const i=t.node(r);if(i.type.spec.tableRole===\"cell\"||i.type.spec.tableRole===\"header_cell\"){n=i;break}}for(let r=e.depth;r>0;r--){const i=e.node(r);if(i.type.spec.tableRole===\"cell\"||i.type.spec.tableRole===\"header_cell\"){s=i;break}}return n!==s&&e.parentOffset===0}function $D(t,e,n){const s=(e||t).selection,r=(e||t).doc;let i,o;if(s instanceof Q&&(o=s.node.type.spec.tableRole)){if(o==\"cell\"||o==\"header_cell\")i=ve.create(r,s.from);else if(o==\"row\"){const l=r.resolve(s.from+1);i=ve.rowSelection(l,l)}else if(!n){const l=Pe.get(s.node),a=s.from+1,c=a+l.map[l.width*l.height-1];i=ve.create(r,a+1,c)}}else s instanceof Z&&LD(s)?i=Z.create(r,s.from):s instanceof Z&&BD(s)&&(i=Z.create(r,s.$from.start(),s.$from.end()));return i&&(e||(e=t.tr)).setSelection(i),e}const HD=new Ne(\"fix-tables\");function Ww(t,e,n,s){const r=t.childCount,i=e.childCount;e:for(let o=0,l=0;o<i;o++){const a=e.child(o);for(let c=l,u=Math.min(r,o+3);c<u;c++)if(t.child(c)==a){l=c+1,n+=a.nodeSize;continue e}s(a,n),l<r&&t.child(l).sameMarkup(a)?Ww(t.child(l),a,n+1,s):a.nodesBetween(0,a.content.size,s,n+1),n+=a.nodeSize}}function jw(t,e){let n;const s=(r,i)=>{r.type.spec.tableRole==\"table\"&&(n=FD(t,r,i,n))};return e?e.doc!=t.doc&&Ww(e.doc,t.doc,0,s):t.doc.descendants(s),n}function FD(t,e,n,s){const r=Pe.get(e);if(!r.problems)return s;s||(s=t.tr);const i=[];for(let a=0;a<r.height;a++)i.push(0);for(let a=0;a<r.problems.length;a++){const c=r.problems[a];if(c.type==\"collision\"){const u=e.nodeAt(c.pos);if(!u)continue;const f=u.attrs;for(let d=0;d<f.rowspan;d++)i[c.row+d]+=c.n;s.setNodeMarkup(s.mapping.map(n+1+c.pos),null,Cr(f,f.colspan-c.n,c.n))}else if(c.type==\"missing\")i[c.row]+=c.n;else if(c.type==\"overlong_rowspan\"){const u=e.nodeAt(c.pos);if(!u)continue;s.setNodeMarkup(s.mapping.map(n+1+c.pos),null,{...u.attrs,rowspan:u.attrs.rowspan-c.n})}else if(c.type==\"colwidth mismatch\"){const u=e.nodeAt(c.pos);if(!u)continue;s.setNodeMarkup(s.mapping.map(n+1+c.pos),null,{...u.attrs,colwidth:c.colwidth})}else if(c.type==\"zero_sized\"){const u=s.mapping.map(n);s.delete(u,u+e.nodeSize)}}let o,l;for(let a=0;a<i.length;a++)i[a]&&(o==null&&(o=a),l=a);for(let a=0,c=n+1;a<r.height;a++){const u=e.child(a),f=c+u.nodeSize,d=i[a];if(d>0){let h=\"cell\";u.firstChild&&(h=u.firstChild.type.spec.tableRole);const p=[];for(let g=0;g<d;g++){const y=gt(t.schema)[h].createAndFill();y&&p.push(y)}const m=(a==0||o==a-1)&&l==a?c+1:f-1;s.insert(s.mapping.map(m),p)}c=f}return s.setMeta(HD,{fixTables:!0})}function On(t){const e=t.selection,n=Yc(t),s=n.node(-1),r=n.start(-1),i=Pe.get(s);return{...e instanceof ve?i.rectBetween(e.$anchorCell.pos-r,e.$headCell.pos-r):i.findCell(n.pos-r),tableStart:r,map:i,table:s}}function Uw(t,{map:e,tableStart:n,table:s},r){let i=r>0?-1:0;_D(e,s,r+i)&&(i=r==0||r==e.width?null:0);for(let o=0;o<e.height;o++){const l=o*e.width+r;if(r>0&&r<e.width&&e.map[l-1]==e.map[l]){const a=e.map[l],c=s.nodeAt(a);t.setNodeMarkup(t.mapping.map(n+a),null,zw(c.attrs,r-e.colCount(a))),o+=c.attrs.rowspan-1}else{const a=i==null?gt(s.type.schema).cell:s.nodeAt(e.map[l+i]).type,c=e.positionAt(o,r,s);t.insert(t.mapping.map(n+c),a.createAndFill())}}return t}function zD(t,e){if(!pn(t))return!1;if(e){const n=On(t);e(Uw(t.tr,n,n.left))}return!0}function VD(t,e){if(!pn(t))return!1;if(e){const n=On(t);e(Uw(t.tr,n,n.right))}return!0}function WD(t,{map:e,table:n,tableStart:s},r){const i=t.mapping.maps.length;for(let o=0;o<e.height;){const l=o*e.width+r,a=e.map[l],c=n.nodeAt(a),u=c.attrs;if(r>0&&e.map[l-1]==a||r<e.width-1&&e.map[l+1]==a)t.setNodeMarkup(t.mapping.slice(i).map(s+a),null,Cr(u,r-e.colCount(a)));else{const f=t.mapping.slice(i).map(s+a);t.delete(f,f+c.nodeSize)}o+=u.rowspan}}function jD(t,e){if(!pn(t))return!1;if(e){const n=On(t),s=t.tr;if(n.left==0&&n.right==n.map.width)return!1;for(let r=n.right-1;WD(s,n,r),r!=n.left;r--){const i=n.tableStart?s.doc.nodeAt(n.tableStart-1):s.doc;if(!i)throw new RangeError(\"No table found\");n.table=i,n.map=Pe.get(i)}e(s)}return!0}function UD(t,e,n){var s;const r=gt(e.type.schema).header_cell;for(let i=0;i<t.width;i++)if(((s=e.nodeAt(t.map[i+n*t.width]))===null||s===void 0?void 0:s.type)!=r)return!1;return!0}function Kw(t,{map:e,tableStart:n,table:s},r){let i=n;for(let c=0;c<r;c++)i+=s.child(c).nodeSize;const o=[];let l=r>0?-1:0;UD(e,s,r+l)&&(l=r==0||r==e.height?null:0);for(let c=0,u=e.width*r;c<e.width;c++,u++)if(r>0&&r<e.height&&e.map[u]==e.map[u-e.width]){const f=e.map[u],d=s.nodeAt(f).attrs;t.setNodeMarkup(n+f,null,{...d,rowspan:d.rowspan+1}),c+=d.colspan-1}else{var a;const f=l==null?gt(s.type.schema).cell:(a=s.nodeAt(e.map[u+l*e.width]))===null||a===void 0?void 0:a.type,d=f?.createAndFill();d&&o.push(d)}return t.insert(i,gt(s.type.schema).row.create(null,o)),t}function KD(t,e){if(!pn(t))return!1;if(e){const n=On(t);e(Kw(t.tr,n,n.top))}return!0}function qD(t,e){if(!pn(t))return!1;if(e){const n=On(t);e(Kw(t.tr,n,n.bottom))}return!0}function JD(t,{map:e,table:n,tableStart:s},r){let i=0;for(let c=0;c<r;c++)i+=n.child(c).nodeSize;const o=i+n.child(r).nodeSize,l=t.mapping.maps.length;t.delete(i+s,o+s);const a=new Set;for(let c=0,u=r*e.width;c<e.width;c++,u++){const f=e.map[u];if(!a.has(f)){if(a.add(f),r>0&&f==e.map[u-e.width]){const d=n.nodeAt(f).attrs;t.setNodeMarkup(t.mapping.slice(l).map(f+s),null,{...d,rowspan:d.rowspan-1}),c+=d.colspan-1}else if(r<e.height&&f==e.map[u+e.width]){const d=n.nodeAt(f),h=d.attrs,p=d.type.create({...h,rowspan:d.attrs.rowspan-1},d.content),m=e.positionAt(r+1,c,n);t.insert(t.mapping.slice(l).map(s+m),p),c+=h.colspan-1}}}}function GD(t,e){if(!pn(t))return!1;if(e){const n=On(t),s=t.tr;if(n.top==0&&n.bottom==n.map.height)return!1;for(let r=n.bottom-1;JD(s,n,r),r!=n.top;r--){const i=n.tableStart?s.doc.nodeAt(n.tableStart-1):s.doc;if(!i)throw new RangeError(\"No table found\");n.table=i,n.map=Pe.get(n.table)}e(s)}return!0}function $g(t){const e=t.content;return e.childCount==1&&e.child(0).isTextblock&&e.child(0).childCount==0}function YD({width:t,height:e,map:n},s){let r=s.top*t+s.left,i=r,o=(s.bottom-1)*t+s.left,l=r+(s.right-s.left-1);for(let a=s.top;a<s.bottom;a++){if(s.left>0&&n[i]==n[i-1]||s.right<t&&n[l]==n[l+1])return!0;i+=t,l+=t}for(let a=s.left;a<s.right;a++){if(s.top>0&&n[r]==n[r-t]||s.bottom<e&&n[o]==n[o+t])return!0;r++,o++}return!1}function Hg(t,e){const n=t.selection;if(!(n instanceof ve)||n.$anchorCell.pos==n.$headCell.pos)return!1;const s=On(t),{map:r}=s;if(YD(r,s))return!1;if(e){const i=t.tr,o={};let l=D.empty,a,c;for(let u=s.top;u<s.bottom;u++)for(let f=s.left;f<s.right;f++){const d=r.map[u*r.width+f],h=s.table.nodeAt(d);if(!(o[d]||!h))if(o[d]=!0,a==null)a=d,c=h;else{$g(h)||(l=l.append(h.content));const p=i.mapping.map(d+s.tableStart);i.delete(p,p+h.nodeSize)}}if(a==null||c==null)return!0;if(i.setNodeMarkup(a+s.tableStart,null,{...zw(c.attrs,c.attrs.colspan,s.right-s.left-c.attrs.colspan),rowspan:s.bottom-s.top}),l.size>0){const u=a+1+c.content.size,f=$g(c)?a+1:u;i.replaceWith(f+s.tableStart,u+s.tableStart,l)}i.setSelection(new ve(i.doc.resolve(a+s.tableStart))),e(i)}return!0}function Fg(t,e){const n=gt(t.schema);return XD(({node:s})=>n[s.type.spec.tableRole])(t,e)}function XD(t){return(e,n)=>{const s=e.selection;let r,i;if(s instanceof ve){if(s.$anchorCell.pos!=s.$headCell.pos)return!1;r=s.$anchorCell.nodeAfter,i=s.$anchorCell.pos}else{var o;if(r=OD(s.$from),!r)return!1;i=(o=xr(s.$from))===null||o===void 0?void 0:o.pos}if(r==null||i==null||r.attrs.colspan==1&&r.attrs.rowspan==1)return!1;if(n){let l=r.attrs;const a=[],c=l.colwidth;l.rowspan>1&&(l={...l,rowspan:1}),l.colspan>1&&(l={...l,colspan:1});const u=On(e),f=e.tr;for(let h=0;h<u.right-u.left;h++)a.push(c?{...l,colwidth:c&&c[h]?[c[h]]:null}:l);let d;for(let h=u.top;h<u.bottom;h++){let p=u.map.positionAt(h,u.left,u.table);h==u.top&&(p+=r.nodeSize);for(let m=u.left,g=0;m<u.right;m++,g++)m==u.left&&h==u.top||f.insert(d=f.mapping.map(p+u.tableStart,1),t({node:r,row:h,col:m}).createAndFill(a[g]))}f.setNodeMarkup(i,t({node:r,row:u.top,col:u.left}),a[0]),s instanceof ve&&f.setSelection(new ve(f.doc.resolve(s.$anchorCell.pos),d?f.doc.resolve(d):void 0)),n(f)}return!0}}function QD(t,e){return function(n,s){if(!pn(n))return!1;const r=Yc(n);if(r.nodeAfter.attrs[t]===e)return!1;if(s){const i=n.tr;n.selection instanceof ve?n.selection.forEachCell((o,l)=>{o.attrs[t]!==e&&i.setNodeMarkup(l,null,{...o.attrs,[t]:e})}):i.setNodeMarkup(r.pos,null,{...r.nodeAfter.attrs,[t]:e}),s(i)}return!0}}function ZD(t){return function(e,n){if(!pn(e))return!1;if(n){const s=gt(e.schema),r=On(e),i=e.tr,o=r.map.cellsInRect(t==\"column\"?{left:r.left,top:0,right:r.right,bottom:r.map.height}:t==\"row\"?{left:0,top:r.top,right:r.map.width,bottom:r.bottom}:r),l=o.map(a=>r.table.nodeAt(a));for(let a=0;a<o.length;a++)l[a].type==s.header_cell&&i.setNodeMarkup(r.tableStart+o[a],s.cell,l[a].attrs);if(i.steps.length===0)for(let a=0;a<o.length;a++)i.setNodeMarkup(r.tableStart+o[a],s.header_cell,l[a].attrs);n(i)}return!0}}function zg(t,e,n){const s=e.map.cellsInRect({left:0,top:0,right:t==\"row\"?e.map.width:1,bottom:t==\"column\"?e.map.height:1});for(let r=0;r<s.length;r++){const i=e.table.nodeAt(s[r]);if(i&&i.type!==n.header_cell)return!1}return!0}function Lo(t,e){return e=e||{useDeprecatedLogic:!1},e.useDeprecatedLogic?ZD(t):function(n,s){if(!pn(n))return!1;if(s){const r=gt(n.schema),i=On(n),o=n.tr,l=zg(\"row\",i,r),a=zg(\"column\",i,r),c=(t===\"column\"?l:t===\"row\"&&a)?1:0,u=t==\"column\"?{left:0,top:c,right:1,bottom:i.map.height}:t==\"row\"?{left:c,top:0,right:i.map.width,bottom:1}:i,f=t==\"column\"?a?r.cell:r.header_cell:t==\"row\"?l?r.cell:r.header_cell:r.cell;i.map.cellsInRect(u).forEach(d=>{const h=d+i.tableStart,p=o.doc.nodeAt(h);p&&o.setNodeMarkup(h,f,p.attrs)}),s(o)}return!0}}Lo(\"row\",{useDeprecatedLogic:!0});Lo(\"column\",{useDeprecatedLogic:!0});const eP=Lo(\"cell\",{useDeprecatedLogic:!0});function tP(t,e){if(e<0){const n=t.nodeBefore;if(n)return t.pos-n.nodeSize;for(let s=t.index(-1)-1,r=t.before();s>=0;s--){const i=t.node(-1).child(s),o=i.lastChild;if(o)return r-1-o.nodeSize;r-=i.nodeSize}}else{if(t.index()<t.parent.childCount-1)return t.pos+t.nodeAfter.nodeSize;const n=t.node(-1);for(let s=t.indexAfter(-1),r=t.after();s<n.childCount;s++){const i=n.child(s);if(i.childCount)return r+1;r+=i.nodeSize}}return null}function Vg(t){return function(e,n){if(!pn(e))return!1;const s=tP(Yc(e),t);if(s==null)return!1;if(n){const r=e.doc.resolve(s);n(e.tr.setSelection(Z.between(r,ID(r))).scrollIntoView())}return!0}}function nP(t,e){const n=t.selection.$anchor;for(let s=n.depth;s>0;s--)if(n.node(s).type.spec.tableRole==\"table\")return e&&e(t.tr.delete(n.before(s),n.after(s)).scrollIntoView()),!0;return!1}function kl(t,e){const n=t.selection;if(!(n instanceof ve))return!1;if(e){const s=t.tr,r=gt(t.schema).cell.createAndFill().content;n.forEachCell((i,o)=>{i.content.eq(r)||s.replace(s.mapping.map(o+1),s.mapping.map(o+i.nodeSize-1),new K(r,0,0))}),s.docChanged&&e(s)}return!0}function sP(t){if(t.size===0)return null;let{content:e,openStart:n,openEnd:s}=t;for(;e.childCount==1&&(n>0&&s>0||e.child(0).type.spec.tableRole==\"table\");)n--,s--,e=e.child(0).content;const r=e.child(0),i=r.type.spec.tableRole,o=r.type.schema,l=[];if(i==\"row\")for(let a=0;a<e.childCount;a++){let c=e.child(a).content;const u=a?0:Math.max(0,n-1),f=a<e.childCount-1?0:Math.max(0,s-1);(u||f)&&(c=Yf(gt(o).row,new K(c,u,f)).content),l.push(c)}else if(i==\"cell\"||i==\"header_cell\")l.push(n||s?Yf(gt(o).row,new K(e,n,s)).content:e);else return null;return rP(o,l)}function rP(t,e){const n=[];for(let r=0;r<e.length;r++){const i=e[r];for(let o=i.childCount-1;o>=0;o--){const{rowspan:l,colspan:a}=i.child(o).attrs;for(let c=r;c<r+l;c++)n[c]=(n[c]||0)+a}}let s=0;for(let r=0;r<n.length;r++)s=Math.max(s,n[r]);for(let r=0;r<n.length;r++)if(r>=e.length&&e.push(D.empty),n[r]<s){const i=gt(t).cell.createAndFill(),o=[];for(let l=n[r];l<s;l++)o.push(i);e[r]=e[r].append(D.from(o))}return{height:e.length,width:s,rows:e}}function Yf(t,e){const n=t.createAndFill();return new Xd(n).replace(0,n.content.size,e).doc}function iP({width:t,height:e,rows:n},s,r){if(t!=s){const i=[],o=[];for(let l=0;l<n.length;l++){const a=n[l],c=[];for(let u=i[l]||0,f=0;u<s;f++){let d=a.child(f%a.childCount);u+d.attrs.colspan>s&&(d=d.type.createChecked(Cr(d.attrs,d.attrs.colspan,u+d.attrs.colspan-s),d.content)),c.push(d),u+=d.attrs.colspan;for(let h=1;h<d.attrs.rowspan;h++)i[l+h]=(i[l+h]||0)+d.attrs.colspan}o.push(D.from(c))}n=o,t=s}if(e!=r){const i=[];for(let o=0,l=0;o<r;o++,l++){const a=[],c=n[l%e];for(let u=0;u<c.childCount;u++){let f=c.child(u);o+f.attrs.rowspan>r&&(f=f.type.create({...f.attrs,rowspan:Math.max(1,r-f.attrs.rowspan)},f.content)),a.push(f)}i.push(D.from(a))}n=i,e=r}return{width:t,height:e,rows:n}}function oP(t,e,n,s,r,i,o){const l=t.doc.type.schema,a=gt(l);let c,u;if(r>e.width)for(let f=0,d=0;f<e.height;f++){const h=n.child(f);d+=h.nodeSize;const p=[];let m;h.lastChild==null||h.lastChild.type==a.cell?m=c||(c=a.cell.createAndFill()):m=u||(u=a.header_cell.createAndFill());for(let g=e.width;g<r;g++)p.push(m);t.insert(t.mapping.slice(o).map(d-1+s),p)}if(i>e.height){const f=[];for(let p=0,m=(e.height-1)*e.width;p<Math.max(e.width,r);p++){const g=p>=e.width?!1:n.nodeAt(e.map[m+p]).type==a.header_cell;f.push(g?u||(u=a.header_cell.createAndFill()):c||(c=a.cell.createAndFill()))}const d=a.row.create(null,D.from(f)),h=[];for(let p=e.height;p<i;p++)h.push(d);t.insert(t.mapping.slice(o).map(s+n.nodeSize-2),h)}return!!(c||u)}function Wg(t,e,n,s,r,i,o,l){if(o==0||o==e.height)return!1;let a=!1;for(let c=r;c<i;c++){const u=o*e.width+c,f=e.map[u];if(e.map[u-e.width]==f){a=!0;const d=n.nodeAt(f),{top:h,left:p}=e.findCell(f);t.setNodeMarkup(t.mapping.slice(l).map(f+s),null,{...d.attrs,rowspan:o-h}),t.insert(t.mapping.slice(l).map(e.positionAt(o,p,n)),d.type.createAndFill({...d.attrs,rowspan:h+d.attrs.rowspan-o})),c+=d.attrs.colspan-1}}return a}function jg(t,e,n,s,r,i,o,l){if(o==0||o==e.width)return!1;let a=!1;for(let c=r;c<i;c++){const u=c*e.width+o,f=e.map[u];if(e.map[u-1]==f){a=!0;const d=n.nodeAt(f),h=e.colCount(f),p=t.mapping.slice(l).map(f+s);t.setNodeMarkup(p,null,Cr(d.attrs,o-h,d.attrs.colspan-(o-h))),t.insert(p+d.nodeSize,d.type.createAndFill(Cr(d.attrs,0,o-h))),c+=d.attrs.rowspan-1}}return a}function Ug(t,e,n,s,r){let i=n?t.doc.nodeAt(n-1):t.doc;if(!i)throw new Error(\"No table found\");let o=Pe.get(i);const{top:l,left:a}=s,c=a+r.width,u=l+r.height,f=t.tr;let d=0;function h(){if(i=n?f.doc.nodeAt(n-1):f.doc,!i)throw new Error(\"No table found\");o=Pe.get(i),d=f.mapping.maps.length}oP(f,o,i,n,c,u,d)&&h(),Wg(f,o,i,n,a,c,l,d)&&h(),Wg(f,o,i,n,a,c,u,d)&&h(),jg(f,o,i,n,l,u,a,d)&&h(),jg(f,o,i,n,l,u,c,d)&&h();for(let p=l;p<u;p++){const m=o.positionAt(p,a,i),g=o.positionAt(p,c,i);f.replace(f.mapping.slice(d).map(m+n),f.mapping.slice(d).map(g+n),new K(r.rows[p-l],0,0))}h(),f.setSelection(new ve(f.doc.resolve(n+o.positionAt(l,a,i)),f.doc.resolve(n+o.positionAt(u-1,c-1,i)))),e(f)}const lP=hh({ArrowLeft:Tl(\"horiz\",-1),ArrowRight:Tl(\"horiz\",1),ArrowUp:Tl(\"vert\",-1),ArrowDown:Tl(\"vert\",1),\"Shift-ArrowLeft\":El(\"horiz\",-1),\"Shift-ArrowRight\":El(\"horiz\",1),\"Shift-ArrowUp\":El(\"vert\",-1),\"Shift-ArrowDown\":El(\"vert\",1),Backspace:kl,\"Mod-Backspace\":kl,Delete:kl,\"Mod-Delete\":kl});function Vl(t,e,n){return n.eq(t.selection)?!1:(e&&e(t.tr.setSelection(n).scrollIntoView()),!0)}function Tl(t,e){return(n,s,r)=>{if(!r)return!1;const i=n.selection;if(i instanceof ve)return Vl(n,s,ee.near(i.$headCell,e));if(t!=\"horiz\"&&!i.empty)return!1;const o=qw(r,t,e);if(o==null)return!1;if(t==\"horiz\")return Vl(n,s,ee.near(n.doc.resolve(i.head+e),e));{const l=n.doc.resolve(o),a=Fw(l,t,e);let c;return a?c=ee.near(a,1):e<0?c=ee.near(n.doc.resolve(l.before(-1)),-1):c=ee.near(n.doc.resolve(l.after(-1)),1),Vl(n,s,c)}}}function El(t,e){return(n,s,r)=>{if(!r)return!1;const i=n.selection;let o;if(i instanceof ve)o=i;else{const a=qw(r,t,e);if(a==null)return!1;o=new ve(n.doc.resolve(a))}const l=Fw(o.$headCell,t,e);return l?Vl(n,s,new ve(o.$anchorCell,l)):!1}}function aP(t,e){const n=t.state.doc,s=xr(n.resolve(e));return s?(t.dispatch(t.state.tr.setSelection(new ve(s))),!0):!1}function cP(t,e,n){if(!pn(t.state))return!1;let s=sP(n);const r=t.state.selection;if(r instanceof ve){s||(s={width:1,height:1,rows:[D.from(Yf(gt(t.state.schema).cell,n))]});const i=r.$anchorCell.node(-1),o=r.$anchorCell.start(-1),l=Pe.get(i).rectBetween(r.$anchorCell.pos-o,r.$headCell.pos-o);return s=iP(s,l.right-l.left,l.bottom-l.top),Ug(t.state,t.dispatch,o,l,s),!0}else if(s){const i=Yc(t.state),o=i.start(-1);return Ug(t.state,t.dispatch,o,Pe.get(i.node(-1)).findCell(i.pos-o),s),!0}else return!1}function uP(t,e){var n;if(e.button!=0||e.ctrlKey||e.metaKey)return;const s=Kg(t,e.target);let r;if(e.shiftKey&&t.state.selection instanceof ve)i(t.state.selection.$anchorCell,e),e.preventDefault();else if(e.shiftKey&&s&&(r=xr(t.state.selection.$anchor))!=null&&((n=Fu(t,e))===null||n===void 0?void 0:n.pos)!=r.pos)i(r,e),e.preventDefault();else if(!s)return;function i(a,c){let u=Fu(t,c);const f=Es.getState(t.state)==null;if(!u||!Vh(a,u))if(f)u=a;else return;const d=new ve(a,u);if(f||!t.state.selection.eq(d)){const h=t.state.tr.setSelection(d);f&&h.setMeta(Es,a.pos),t.dispatch(h)}}function o(){t.root.removeEventListener(\"mouseup\",o),t.root.removeEventListener(\"dragstart\",o),t.root.removeEventListener(\"mousemove\",l),Es.getState(t.state)!=null&&t.dispatch(t.state.tr.setMeta(Es,-1))}function l(a){const c=a,u=Es.getState(t.state);let f;if(u!=null)f=t.state.doc.resolve(u);else if(Kg(t,c.target)!=s&&(f=Fu(t,e),!f))return o();f&&i(f,c)}t.root.addEventListener(\"mouseup\",o),t.root.addEventListener(\"dragstart\",o),t.root.addEventListener(\"mousemove\",l)}function qw(t,e,n){if(!(t.state.selection instanceof Z))return null;const{$head:s}=t.state.selection;for(let r=s.depth-1;r>=0;r--){const i=s.node(r);if((n<0?s.index(r):s.indexAfter(r))!=(n<0?0:i.childCount))return null;if(i.type.spec.tableRole==\"cell\"||i.type.spec.tableRole==\"header_cell\"){const o=s.before(r),l=e==\"vert\"?n>0?\"down\":\"up\":n>0?\"right\":\"left\";return t.endOfTextblock(l)?o:null}}return null}function Kg(t,e){for(;e&&e!=t.dom;e=e.parentNode)if(e.nodeName==\"TD\"||e.nodeName==\"TH\")return e;return null}function Fu(t,e){const n=t.posAtCoords({left:e.clientX,top:e.clientY});if(!n)return null;let{inside:s,pos:r}=n;return s>=0&&xr(t.state.doc.resolve(s))||xr(t.state.doc.resolve(r))}var fP=class{constructor(e,n){this.node=e,this.defaultCellMinWidth=n,this.dom=document.createElement(\"div\"),this.dom.className=\"tableWrapper\",this.table=this.dom.appendChild(document.createElement(\"table\")),this.table.style.setProperty(\"--default-cell-min-width\",`${n}px`),this.colgroup=this.table.appendChild(document.createElement(\"colgroup\")),Xf(e,this.colgroup,this.table,n),this.contentDOM=this.table.appendChild(document.createElement(\"tbody\"))}update(e){return e.type!=this.node.type?!1:(this.node=e,Xf(e,this.colgroup,this.table,this.defaultCellMinWidth),!0)}ignoreMutation(e){return e.type==\"attributes\"&&(e.target==this.table||this.colgroup.contains(e.target))}};function Xf(t,e,n,s,r,i){let o=0,l=!0,a=e.firstChild;const c=t.firstChild;if(c){for(let f=0,d=0;f<c.childCount;f++){const{colspan:h,colwidth:p}=c.child(f).attrs;for(let m=0;m<h;m++,d++){const g=r==d?i:p&&p[m],y=g?g+\"px\":\"\";if(o+=g||s,g||(l=!1),a)a.style.width!=y&&(a.style.width=y),a=a.nextSibling;else{const S=document.createElement(\"col\");S.style.width=y,e.appendChild(S)}}}for(;a;){var u;const f=a.nextSibling;(u=a.parentNode)===null||u===void 0||u.removeChild(a),a=f}l?(n.style.width=o+\"px\",n.style.minWidth=\"\"):(n.style.width=\"\",n.style.minWidth=o+\"px\")}}const Ht=new Ne(\"tableColumnResizing\");function dP({handleWidth:t=5,cellMinWidth:e=25,defaultCellMinWidth:n=100,View:s=fP,lastColumnResizable:r=!0}={}){const i=new we({key:Ht,state:{init(o,l){var a;const c=(a=i.spec)===null||a===void 0||(a=a.props)===null||a===void 0?void 0:a.nodeViews,u=gt(l.schema).table.name;return s&&c&&(c[u]=(f,d)=>new s(f,n,d)),new hP(-1,!1)},apply(o,l){return l.apply(o)}},props:{attributes:o=>{const l=Ht.getState(o);return l&&l.activeHandle>-1?{class:\"resize-cursor\"}:{}},handleDOMEvents:{mousemove:(o,l)=>{pP(o,l,t,r)},mouseleave:o=>{mP(o)},mousedown:(o,l)=>{gP(o,l,e,n)}},decorations:o=>{const l=Ht.getState(o);if(l&&l.activeHandle>-1)return xP(o,l.activeHandle)},nodeViews:{}}});return i}var hP=class Wl{constructor(e,n){this.activeHandle=e,this.dragging=n}apply(e){const n=this,s=e.getMeta(Ht);if(s&&s.setHandle!=null)return new Wl(s.setHandle,!1);if(s&&s.setDragging!==void 0)return new Wl(n.activeHandle,s.setDragging);if(n.activeHandle>-1&&e.docChanged){let r=e.mapping.map(n.activeHandle,-1);return Gf(e.doc.resolve(r))||(r=-1),new Wl(r,n.dragging)}return n}};function pP(t,e,n,s){if(!t.editable)return;const r=Ht.getState(t.state);if(r&&!r.dragging){const i=bP(e.target);let o=-1;if(i){const{left:l,right:a}=i.getBoundingClientRect();e.clientX-l<=n?o=qg(t,e,\"left\",n):a-e.clientX<=n&&(o=qg(t,e,\"right\",n))}if(o!=r.activeHandle){if(!s&&o!==-1){const l=t.state.doc.resolve(o),a=l.node(-1),c=Pe.get(a),u=l.start(-1);if(c.colCount(l.pos-u)+l.nodeAfter.attrs.colspan-1==c.width-1)return}Jw(t,o)}}}function mP(t){if(!t.editable)return;const e=Ht.getState(t.state);e&&e.activeHandle>-1&&!e.dragging&&Jw(t,-1)}function gP(t,e,n,s){var r;if(!t.editable)return!1;const i=(r=t.dom.ownerDocument.defaultView)!==null&&r!==void 0?r:window,o=Ht.getState(t.state);if(!o||o.activeHandle==-1||o.dragging)return!1;const l=t.state.doc.nodeAt(o.activeHandle),a=yP(t,o.activeHandle,l.attrs);t.dispatch(t.state.tr.setMeta(Ht,{setDragging:{startX:e.clientX,startWidth:a}}));function c(f){i.removeEventListener(\"mouseup\",c),i.removeEventListener(\"mousemove\",u);const d=Ht.getState(t.state);d?.dragging&&(SP(t,d.activeHandle,Jg(d.dragging,f,n)),t.dispatch(t.state.tr.setMeta(Ht,{setDragging:null})))}function u(f){if(!f.which)return c(f);const d=Ht.getState(t.state);if(d&&d.dragging){const h=Jg(d.dragging,f,n);Gg(t,d.activeHandle,h,s)}}return Gg(t,o.activeHandle,a,s),i.addEventListener(\"mouseup\",c),i.addEventListener(\"mousemove\",u),e.preventDefault(),!0}function yP(t,e,{colspan:n,colwidth:s}){const r=s&&s[s.length-1];if(r)return r;const i=t.domAtPos(e);let o=i.node.childNodes[i.offset].offsetWidth,l=n;if(s)for(let a=0;a<n;a++)s[a]&&(o-=s[a],l--);return o/l}function bP(t){for(;t&&t.nodeName!=\"TD\"&&t.nodeName!=\"TH\";)t=t.classList&&t.classList.contains(\"ProseMirror\")?null:t.parentNode;return t}function qg(t,e,n,s){const r=n==\"right\"?-s:s,i=t.posAtCoords({left:e.clientX+r,top:e.clientY});if(!i)return-1;const{pos:o}=i,l=xr(t.state.doc.resolve(o));if(!l)return-1;if(n==\"right\")return l.pos;const a=Pe.get(l.node(-1)),c=l.start(-1),u=a.map.indexOf(l.pos-c);return u%a.width==0?-1:c+a.map[u-1]}function Jg(t,e,n){const s=e.clientX-t.startX;return Math.max(n,t.startWidth+s)}function Jw(t,e){t.dispatch(t.state.tr.setMeta(Ht,{setHandle:e}))}function SP(t,e,n){const s=t.state.doc.resolve(e),r=s.node(-1),i=Pe.get(r),o=s.start(-1),l=i.colCount(s.pos-o)+s.nodeAfter.attrs.colspan-1,a=t.state.tr;for(let c=0;c<i.height;c++){const u=c*i.width+l;if(c&&i.map[u]==i.map[u-i.width])continue;const f=i.map[u],d=r.nodeAt(f).attrs,h=d.colspan==1?0:l-i.colCount(f);if(d.colwidth&&d.colwidth[h]==n)continue;const p=d.colwidth?d.colwidth.slice():wP(d.colspan);p[h]=n,a.setNodeMarkup(o+f,null,{...d,colwidth:p})}a.docChanged&&t.dispatch(a)}function Gg(t,e,n,s){const r=t.state.doc.resolve(e),i=r.node(-1),o=r.start(-1),l=Pe.get(i).colCount(r.pos-o)+r.nodeAfter.attrs.colspan-1;let a=t.domAtPos(r.start(-1)).node;for(;a&&a.nodeName!=\"TABLE\";)a=a.parentNode;a&&Xf(i,a.firstChild,a,s,l,n)}function wP(t){return Array(t).fill(0)}function xP(t,e){const n=[],s=t.doc.resolve(e),r=s.node(-1);if(!r)return xe.empty;const i=Pe.get(r),o=s.start(-1),l=i.colCount(s.pos-o)+s.nodeAfter.attrs.colspan-1;for(let c=0;c<i.height;c++){const u=l+c*i.width;if((l==i.width-1||i.map[u]!=i.map[u+1])&&(c==0||i.map[u]!=i.map[u-i.width])){var a;const f=i.map[u],d=o+f+r.nodeAt(f).nodeSize-1,h=document.createElement(\"div\");h.className=\"column-resize-handle\",!((a=Ht.getState(t))===null||a===void 0)&&a.dragging&&n.push(Ke.node(o+f,o+f+r.nodeAt(f).nodeSize,{class:\"column-resize-dragging\"})),n.push(Ke.widget(d,h))}}return xe.create(t.doc,n)}function CP({allowTableNodeSelection:t=!1}={}){return new we({key:Es,state:{init(){return null},apply(e,n){const s=e.getMeta(Es);if(s!=null)return s==-1?null:s;if(n==null||!e.docChanged)return n;const{deleted:r,pos:i}=e.mapping.mapResult(n);return r?null:i}},props:{decorations:PD,handleDOMEvents:{mousedown:uP},createSelectionBetween(e){return Es.getState(e.state)!=null?e.state.selection:null},handleTripleClick:aP,handleKeyDown:lP,handlePaste:cP},appendTransaction(e,n,s){return $D(s,jw(s,n),t)}})}function vP(t,e){const n=Math.min(t.top,e.top),s=Math.max(t.bottom,e.bottom),r=Math.min(t.left,e.left),o=Math.max(t.right,e.right)-r,l=s-n,a=r,c=n;return new DOMRect(a,c,o,l)}var kP=class{constructor({editor:t,element:e,view:n,pluginKey:s=\"bubbleMenu\",updateDelay:r=250,resizeDelay:i=60,shouldShow:o,appendTo:l,getReferencedVirtualElement:a,options:c}){this.preventHide=!1,this.isVisible=!1,this.scrollTarget=window,this.floatingUIOptions={strategy:\"absolute\",placement:\"top\",offset:8,flip:{},shift:{},arrow:!1,size:!1,autoPlacement:!1,hide:!1,inline:!1,onShow:void 0,onHide:void 0,onUpdate:void 0,onDestroy:void 0},this.shouldShow=({view:f,state:d,from:h,to:p})=>{const{doc:m,selection:g}=d,{empty:y}=g,S=!m.textBetween(h,p).length&&yh(d.selection),b=this.element.contains(document.activeElement);return!(!(f.hasFocus()||b)||y||S||!this.editor.isEditable)},this.mousedownHandler=()=>{this.preventHide=!0},this.dragstartHandler=()=>{this.hide()},this.resizeHandler=()=>{this.resizeDebounceTimer&&clearTimeout(this.resizeDebounceTimer),this.resizeDebounceTimer=window.setTimeout(()=>{this.updatePosition()},this.resizeDelay)},this.focusHandler=()=>{setTimeout(()=>this.update(this.editor.view))},this.blurHandler=({event:f})=>{var d;if(this.editor.isDestroyed){this.destroy();return}if(this.preventHide){this.preventHide=!1;return}f?.relatedTarget&&((d=this.element.parentNode)!=null&&d.contains(f.relatedTarget))||f?.relatedTarget!==this.editor.view.dom&&this.hide()},this.handleDebouncedUpdate=(f,d)=>{const h=!d?.selection.eq(f.state.selection),p=!d?.doc.eq(f.state.doc);!h&&!p||(this.updateDebounceTimer&&clearTimeout(this.updateDebounceTimer),this.updateDebounceTimer=window.setTimeout(()=>{this.updateHandler(f,h,p,d)},this.updateDelay))},this.updateHandler=(f,d,h,p)=>{const{composing:m}=f;if(m||!d&&!h)return;if(!this.getShouldShow(p)){this.hide();return}this.updatePosition(),this.show()},this.transactionHandler=({transaction:f})=>{const d=f.getMeta(this.pluginKey);d===\"updatePosition\"?this.updatePosition():d&&typeof d==\"object\"&&d.type===\"updateOptions\"&&this.updateOptions(d.options)};var u;this.editor=t,this.element=e,this.view=n,this.pluginKey=s,this.updateDelay=r,this.resizeDelay=i,this.appendTo=l,this.scrollTarget=(u=c?.scrollTarget)!=null?u:window,this.getReferencedVirtualElement=a,this.floatingUIOptions={...this.floatingUIOptions,...c},this.element.tabIndex=0,o&&(this.shouldShow=o),this.element.addEventListener(\"mousedown\",this.mousedownHandler,{capture:!0}),this.view.dom.addEventListener(\"dragstart\",this.dragstartHandler),this.editor.on(\"focus\",this.focusHandler),this.editor.on(\"blur\",this.blurHandler),this.editor.on(\"transaction\",this.transactionHandler),window.addEventListener(\"resize\",this.resizeHandler),this.scrollTarget.addEventListener(\"scroll\",this.resizeHandler),this.update(n,n.state),this.getShouldShow()&&(this.show(),this.updatePosition())}get middlewares(){const t=[];return this.floatingUIOptions.flip&&t.push(wD(typeof this.floatingUIOptions.flip!=\"boolean\"?this.floatingUIOptions.flip:void 0)),this.floatingUIOptions.shift&&t.push(SD(typeof this.floatingUIOptions.shift!=\"boolean\"?this.floatingUIOptions.shift:void 0)),this.floatingUIOptions.offset&&t.push(yD(typeof this.floatingUIOptions.offset!=\"boolean\"?this.floatingUIOptions.offset:void 0)),this.floatingUIOptions.arrow&&t.push(vD(this.floatingUIOptions.arrow)),this.floatingUIOptions.size&&t.push(xD(typeof this.floatingUIOptions.size!=\"boolean\"?this.floatingUIOptions.size:void 0)),this.floatingUIOptions.autoPlacement&&t.push(bD(typeof this.floatingUIOptions.autoPlacement!=\"boolean\"?this.floatingUIOptions.autoPlacement:void 0)),this.floatingUIOptions.hide&&t.push(CD(typeof this.floatingUIOptions.hide!=\"boolean\"?this.floatingUIOptions.hide:void 0)),this.floatingUIOptions.inline&&t.push(kD(typeof this.floatingUIOptions.inline!=\"boolean\"?this.floatingUIOptions.inline:void 0)),t}get virtualElement(){var t,e,n;const{selection:s}=this.editor.state,r=(t=this.getReferencedVirtualElement)==null?void 0:t.call(this);if(r)return r;if(!((n=(e=this.view)==null?void 0:e.dom)!=null&&n.parentNode))return;const i=YO(this.view,s.from,s.to);let o={getBoundingClientRect:()=>i,getClientRects:()=>[i]};if(s instanceof Q){let l=this.view.nodeDOM(s.from);const a=l.dataset.nodeViewWrapper?l:l.querySelector(\"[data-node-view-wrapper]\");a&&(l=a),l&&(o={getBoundingClientRect:()=>l.getBoundingClientRect(),getClientRects:()=>[l.getBoundingClientRect()]})}if(s instanceof ve){const{$anchorCell:l,$headCell:a}=s,c=l?l.pos:a.pos,u=a?a.pos:l.pos,f=this.view.nodeDOM(c),d=this.view.nodeDOM(u);if(!f||!d)return;const h=f===d?f.getBoundingClientRect():vP(f.getBoundingClientRect(),d.getBoundingClientRect());o={getBoundingClientRect:()=>h,getClientRects:()=>[h]}}return o}updatePosition(){const t=this.virtualElement;t&&TD(t,this.element,{placement:this.floatingUIOptions.placement,strategy:this.floatingUIOptions.strategy,middleware:this.middlewares}).then(({x:e,y:n,strategy:s,middlewareData:r})=>{var i,o;if((i=r.hide)!=null&&i.referenceHidden||(o=r.hide)!=null&&o.escaped){this.element.style.visibility=\"hidden\";return}this.element.style.visibility=\"visible\",this.element.style.width=\"max-content\",this.element.style.position=s,this.element.style.left=`${e}px`,this.element.style.top=`${n}px`,this.isVisible&&this.floatingUIOptions.onUpdate&&this.floatingUIOptions.onUpdate()})}update(t,e){const{state:n}=t,s=n.selection.from!==n.selection.to;if(this.updateDelay>0&&s){this.handleDebouncedUpdate(t,e);return}const r=!e?.selection.eq(t.state.selection),i=!e?.doc.eq(t.state.doc);this.updateHandler(t,r,i,e)}getShouldShow(t){var e;const{state:n}=this.view,{selection:s}=n,{ranges:r}=s,i=Math.min(...r.map(a=>a.$from.pos)),o=Math.max(...r.map(a=>a.$to.pos));return((e=this.shouldShow)==null?void 0:e.call(this,{editor:this.editor,element:this.element,view:this.view,state:n,oldState:t,from:i,to:o}))||!1}show(){var t;if(this.isVisible)return;this.element.style.visibility=\"visible\",this.element.style.opacity=\"1\";const e=typeof this.appendTo==\"function\"?this.appendTo():this.appendTo;(t=e??this.view.dom.parentElement)==null||t.appendChild(this.element),this.floatingUIOptions.onShow&&this.floatingUIOptions.onShow(),this.isVisible=!0}hide(){this.isVisible&&(this.element.style.visibility=\"hidden\",this.element.style.opacity=\"0\",this.element.remove(),this.floatingUIOptions.onHide&&this.floatingUIOptions.onHide(),this.isVisible=!1)}updateOptions(t){var e;if(t.updateDelay!==void 0&&(this.updateDelay=t.updateDelay),t.resizeDelay!==void 0&&(this.resizeDelay=t.resizeDelay),t.appendTo!==void 0&&(this.appendTo=t.appendTo),t.getReferencedVirtualElement!==void 0&&(this.getReferencedVirtualElement=t.getReferencedVirtualElement),t.shouldShow!==void 0&&t.shouldShow&&(this.shouldShow=t.shouldShow),t.options!==void 0){const n=(e=t.options.scrollTarget)!=null?e:window;n!==this.scrollTarget&&(this.scrollTarget.removeEventListener(\"scroll\",this.resizeHandler),this.scrollTarget=n,this.scrollTarget.addEventListener(\"scroll\",this.resizeHandler)),this.floatingUIOptions={...this.floatingUIOptions,...t.options}}}destroy(){this.hide(),this.element.removeEventListener(\"mousedown\",this.mousedownHandler,{capture:!0}),this.view.dom.removeEventListener(\"dragstart\",this.dragstartHandler),window.removeEventListener(\"resize\",this.resizeHandler),this.scrollTarget.removeEventListener(\"scroll\",this.resizeHandler),this.editor.off(\"focus\",this.focusHandler),this.editor.off(\"blur\",this.blurHandler),this.editor.off(\"transaction\",this.transactionHandler),this.floatingUIOptions.onDestroy&&this.floatingUIOptions.onDestroy()}},TP=t=>new we({key:typeof t.pluginKey==\"string\"?new Ne(t.pluginKey):t.pluginKey,view:e=>new kP({view:e,...t})}),fL=Vo({name:\"BubbleMenu\",inheritAttrs:!1,props:{pluginKey:{type:[String,Object],default:\"bubbleMenu\"},editor:{type:Object,required:!0},updateDelay:{type:Number,default:void 0},resizeDelay:{type:Number,default:void 0},options:{type:Object,default:()=>({})},appendTo:{type:[Object,Function],default:void 0},shouldShow:{type:Function,default:null},getReferencedVirtualElement:{type:Function,default:void 0}},setup(t,{slots:e,attrs:n}){const s=sr(null);return Mr(()=>{const{editor:r,options:i,pluginKey:o,resizeDelay:l,appendTo:a,shouldShow:c,getReferencedVirtualElement:u,updateDelay:f}=t,d=s.value;d&&(d.style.visibility=\"hidden\",d.style.position=\"absolute\",d.remove(),vi(()=>{r.registerPlugin(TP({editor:r,element:d,options:i,pluginKey:o,resizeDelay:l,appendTo:a,shouldShow:c,getReferencedVirtualElement:u,updateDelay:f}))}))}),Ar(()=>{const{pluginKey:r,editor:i}=t;i.unregisterPlugin(r)}),()=>{var r;return Uo(\"div\",{ref:s,...n},(r=e.default)==null?void 0:r.call(e))}}}),EP=$e.create({name:\"tableCell\",addOptions(){return{HTMLAttributes:{}}},content:\"block+\",addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:t=>{var e,n;const s=t.getAttribute(\"colwidth\"),r=s?s.split(\",\").map(i=>parseInt(i,10)):null;if(!r){const i=(e=t.closest(\"table\"))==null?void 0:e.querySelectorAll(\"colgroup > col\"),o=Array.from(((n=t.parentElement)==null?void 0:n.children)||[]).indexOf(t);if(o&&o>-1&&i&&i[o]){const l=i[o].getAttribute(\"width\");return l?[parseInt(l,10)]:null}}return r}}}},tableRole:\"cell\",isolating:!0,parseHTML(){return[{tag:\"td\"}]},renderHTML({HTMLAttributes:t}){return[\"td\",he(this.options.HTMLAttributes,t),0]}}),MP=$e.create({name:\"tableHeader\",addOptions(){return{HTMLAttributes:{}}},content:\"block+\",addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:t=>{const e=t.getAttribute(\"colwidth\");return e?e.split(\",\").map(s=>parseInt(s,10)):null}}}},tableRole:\"header_cell\",isolating:!0,parseHTML(){return[{tag:\"th\"}]},renderHTML({HTMLAttributes:t}){return[\"th\",he(this.options.HTMLAttributes,t),0]}}),Gw=$e.create({name:\"tableRow\",addOptions(){return{HTMLAttributes:{}}},content:\"(tableCell | tableHeader)*\",tableRole:\"row\",parseHTML(){return[{tag:\"tr\"}]},renderHTML({HTMLAttributes:t}){return[\"tr\",he(this.options.HTMLAttributes,t),0]}});function Qf(t,e){return e?[\"width\",`${Math.max(e,t)}px`]:[\"min-width\",`${t}px`]}function Yg(t,e,n,s,r,i){var o;let l=0,a=!0,c=e.firstChild;const u=t.firstChild;if(u!==null)for(let d=0,h=0;d<u.childCount;d+=1){const{colspan:p,colwidth:m}=u.child(d).attrs;for(let g=0;g<p;g+=1,h+=1){const y=r===h?i:m&&m[g],S=y?`${y}px`:\"\";if(l+=y||s,y||(a=!1),c){if(c.style.width!==S){const[b,w]=Qf(s,y);c.style.setProperty(b,w)}c=c.nextSibling}else{const b=document.createElement(\"col\"),[w,x]=Qf(s,y);b.style.setProperty(w,x),e.appendChild(b)}}}for(;c;){const d=c.nextSibling;(o=c.parentNode)==null||o.removeChild(c),c=d}const f=t.attrs.style&&typeof t.attrs.style==\"string\"&&/\\bwidth\\s*:/i.test(t.attrs.style);a&&!f?(n.style.width=`${l}px`,n.style.minWidth=\"\"):(n.style.width=\"\",n.style.minWidth=`${l}px`)}var AP=class{constructor(t,e){this.node=t,this.cellMinWidth=e,this.dom=document.createElement(\"div\"),this.dom.className=\"tableWrapper\",this.table=this.dom.appendChild(document.createElement(\"table\")),t.attrs.style&&(this.table.style.cssText=t.attrs.style),this.colgroup=this.table.appendChild(document.createElement(\"colgroup\")),Yg(t,this.colgroup,this.table,e),this.contentDOM=this.table.appendChild(document.createElement(\"tbody\"))}update(t){return t.type!==this.node.type?!1:(this.node=t,Yg(t,this.colgroup,this.table,this.cellMinWidth),!0)}ignoreMutation(t){const e=t.target,n=this.dom.contains(e),s=this.contentDOM.contains(e);return!!(n&&!s&&(t.type===\"attributes\"||t.type===\"childList\"||t.type===\"characterData\"))}};function NP(t,e,n,s){let r=0,i=!0;const o=[],l=t.firstChild;if(!l)return{};for(let f=0,d=0;f<l.childCount;f+=1){const{colspan:h,colwidth:p}=l.child(f).attrs;for(let m=0;m<h;m+=1,d+=1){const g=n===d?s:p&&p[m];r+=g||e,g||(i=!1);const[y,S]=Qf(e,g);o.push([\"col\",{style:`${y}: ${S}`}])}}const a=i?`${r}px`:\"\",c=i?\"\":`${r}px`;return{colgroup:[\"colgroup\",{},...o],tableWidth:a,tableMinWidth:c}}function Xg(t,e){return t.createAndFill()}function OP(t){if(t.cached.tableNodeTypes)return t.cached.tableNodeTypes;const e={};return Object.keys(t.nodes).forEach(n=>{const s=t.nodes[n];s.spec.tableRole&&(e[s.spec.tableRole]=s)}),t.cached.tableNodeTypes=e,e}function RP(t,e,n,s,r){const i=OP(t),o=[],l=[];for(let c=0;c<n;c+=1){const u=Xg(i.cell);if(u&&l.push(u),s){const f=Xg(i.header_cell);f&&o.push(f)}}const a=[];for(let c=0;c<e;c+=1)a.push(i.row.createChecked(null,s&&c===0?o:l));return i.table.createChecked(null,a)}function IP(t){return t instanceof ve}var Ml=({editor:t})=>{const{selection:e}=t.state;if(!IP(e))return!1;let n=0;const s=MS(e.ranges[0].$from,i=>i.type.name===\"table\");return s?.node.descendants(i=>{if(i.type.name===\"table\")return!1;[\"tableCell\",\"tableHeader\"].includes(i.type.name)&&(n+=1)}),n===e.ranges.length?(t.commands.deleteTable(),!0):!1},_P=\"\u001f\";function DP(t){return(t||\"\").replace(/\\s+/g,\" \").trim()}function PP(t,e,n={}){var s;const r=(s=n.cellLineSeparator)!=null?s:_P;if(!t||!t.content||t.content.length===0)return\"\";const i=[];t.content.forEach(p=>{const m=[];p.content&&p.content.forEach(g=>{let y=\"\";g.content&&Array.isArray(g.content)&&g.content.length>1?y=g.content.map(x=>e.renderChildren(x)).join(r):y=g.content?e.renderChildren(g.content):\"\";const S=DP(y),b=g.type===\"tableHeader\";m.push({text:S,isHeader:b})}),i.push(m)});const o=i.reduce((p,m)=>Math.max(p,m.length),0);if(o===0)return\"\";const l=new Array(o).fill(0);i.forEach(p=>{var m;for(let g=0;g<o;g+=1){const S=(((m=p[g])==null?void 0:m.text)||\"\").length;S>l[g]&&(l[g]=S),l[g]<3&&(l[g]=3)}});const a=(p,m)=>p+\" \".repeat(Math.max(0,m-p.length)),c=i[0],u=c.some(p=>p.isHeader);let f=`\n`;const d=new Array(o).fill(0).map((p,m)=>u&&c[m]&&c[m].text||\"\");return f+=`| ${d.map((p,m)=>a(p,l[m])).join(\" | \")} |\n`,f+=`| ${l.map(p=>\"-\".repeat(Math.max(3,p))).join(\" | \")} |\n`,(u?i.slice(1):i).forEach(p=>{f+=`| ${new Array(o).fill(0).map((m,g)=>a(p[g]&&p[g].text||\"\",l[g])).join(\" | \")} |\n`}),f}var LP=PP,BP=$e.create({name:\"table\",addOptions(){return{HTMLAttributes:{},resizable:!1,renderWrapper:!1,handleWidth:5,cellMinWidth:25,View:AP,lastColumnResizable:!0,allowTableNodeSelection:!1}},content:\"tableRow+\",tableRole:\"table\",isolating:!0,group:\"block\",parseHTML(){return[{tag:\"table\"}]},renderHTML({node:t,HTMLAttributes:e}){const{colgroup:n,tableWidth:s,tableMinWidth:r}=NP(t,this.options.cellMinWidth),i=e.style;function o(){return i||(s?`width: ${s}`:`min-width: ${r}`)}const l=[\"table\",he(this.options.HTMLAttributes,e,{style:o()}),n,[\"tbody\",0]];return this.options.renderWrapper?[\"div\",{class:\"tableWrapper\"},l]:l},parseMarkdown:(t,e)=>{const n=[];if(t.header){const s=[];t.header.forEach(r=>{s.push(e.createNode(\"tableHeader\",{},[{type:\"paragraph\",content:e.parseInline(r.tokens)}]))}),n.push(e.createNode(\"tableRow\",{},s))}return t.rows&&t.rows.forEach(s=>{const r=[];s.forEach(i=>{r.push(e.createNode(\"tableCell\",{},[{type:\"paragraph\",content:e.parseInline(i.tokens)}]))}),n.push(e.createNode(\"tableRow\",{},r))}),e.createNode(\"table\",void 0,n)},renderMarkdown:(t,e)=>LP(t,e),addCommands(){return{insertTable:({rows:t=3,cols:e=3,withHeaderRow:n=!0}={})=>({tr:s,dispatch:r,editor:i})=>{const o=RP(i.schema,t,e,n);if(r){const l=s.selection.from+1;s.replaceSelectionWith(o).scrollIntoView().setSelection(Z.near(s.doc.resolve(l)))}return!0},addColumnBefore:()=>({state:t,dispatch:e})=>zD(t,e),addColumnAfter:()=>({state:t,dispatch:e})=>VD(t,e),deleteColumn:()=>({state:t,dispatch:e})=>jD(t,e),addRowBefore:()=>({state:t,dispatch:e})=>KD(t,e),addRowAfter:()=>({state:t,dispatch:e})=>qD(t,e),deleteRow:()=>({state:t,dispatch:e})=>GD(t,e),deleteTable:()=>({state:t,dispatch:e})=>nP(t,e),mergeCells:()=>({state:t,dispatch:e})=>Hg(t,e),splitCell:()=>({state:t,dispatch:e})=>Fg(t,e),toggleHeaderColumn:()=>({state:t,dispatch:e})=>Lo(\"column\")(t,e),toggleHeaderRow:()=>({state:t,dispatch:e})=>Lo(\"row\")(t,e),toggleHeaderCell:()=>({state:t,dispatch:e})=>eP(t,e),mergeOrSplit:()=>({state:t,dispatch:e})=>Hg(t,e)?!0:Fg(t,e),setCellAttribute:(t,e)=>({state:n,dispatch:s})=>QD(t,e)(n,s),goToNextCell:()=>({state:t,dispatch:e})=>Vg(1)(t,e),goToPreviousCell:()=>({state:t,dispatch:e})=>Vg(-1)(t,e),fixTables:()=>({state:t,dispatch:e})=>(e&&jw(t),!0),setCellSelection:t=>({tr:e,dispatch:n})=>{if(n){const s=ve.create(e.doc,t.anchorCell,t.headCell);e.setSelection(s)}return!0}}},addKeyboardShortcuts(){return{Tab:()=>this.editor.commands.goToNextCell()?!0:this.editor.can().addRowAfter()?this.editor.chain().addRowAfter().goToNextCell().run():!1,\"Shift-Tab\":()=>this.editor.commands.goToPreviousCell(),Backspace:Ml,\"Mod-Backspace\":Ml,Delete:Ml,\"Mod-Delete\":Ml}},addProseMirrorPlugins(){return[...this.options.resizable&&this.editor.isEditable?[dP({handleWidth:this.options.handleWidth,cellMinWidth:this.options.cellMinWidth,defaultCellMinWidth:this.options.cellMinWidth,View:this.options.View,lastColumnResizable:this.options.lastColumnResizable})]:[],CP({allowTableNodeSelection:this.options.allowTableNodeSelection})]},extendNodeSchema(t){const e={name:t.name,options:t.options,storage:t.storage};return{tableRole:ge(Y(t,\"tableRole\",e))}}});Se.create({name:\"tableKit\",addExtensions(){const t=[];return this.options.table!==!1&&t.push(BP.configure(this.options.table)),this.options.tableCell!==!1&&t.push(EP.configure(this.options.tableCell)),this.options.tableHeader!==!1&&t.push(MP.configure(this.options.tableHeader)),this.options.tableRow!==!1&&t.push(Gw.configure(this.options.tableRow)),t}});var dL=Gw;function $P(t){var e;const{char:n,allowSpaces:s,allowToIncludeChar:r,allowedPrefixes:i,startOfLine:o,$position:l}=t,a=s&&!r,c=LR(n),u=new RegExp(`\\\\s${c}$`),f=o?\"^\":\"\",d=r?\"\":c,h=a?new RegExp(`${f}${c}.*?(?=\\\\s${d}|$)`,\"gm\"):new RegExp(`${f}(?:^)?${c}[^\\\\s${d}]*`,\"gm\"),p=((e=l.nodeBefore)==null?void 0:e.isText)&&l.nodeBefore.text;if(!p)return null;const m=l.pos-p.length,g=Array.from(p.matchAll(h)).pop();if(!g||g.input===void 0||g.index===void 0)return null;const y=g.input.slice(Math.max(0,g.index-1),g.index),S=new RegExp(`^[${i?.join(\"\")}\\0]?$`).test(y);if(i!==null&&!S)return null;const b=m+g.index;let w=b+g[0].length;return a&&u.test(p.slice(w-1,w+1))&&(g[0]+=\" \",w+=1),b<l.pos&&w>=l.pos?{range:{from:b,to:w},query:g[0].slice(n.length),text:g[0]}:null}var HP=new Ne(\"suggestion\");function hL({pluginKey:t=HP,editor:e,char:n=\"@\",allowSpaces:s=!1,allowToIncludeChar:r=!1,allowedPrefixes:i=[\" \"],startOfLine:o=!1,decorationTag:l=\"span\",decorationClass:a=\"suggestion\",decorationContent:c=\"\",decorationEmptyClass:u=\"is-empty\",command:f=()=>null,items:d=()=>[],render:h=()=>({}),allow:p=()=>!0,findSuggestionMatch:m=$P,shouldShow:g}){let y;const S=h?.(),b=()=>{const k=e.state.selection.$anchor.pos,A=e.view.coordsAtPos(k),{top:v,right:T,bottom:O,left:N}=A;try{return new DOMRect(N,v,T-N,O-v)}catch{return null}},w=(k,A)=>A?()=>{const v=t.getState(e.state),T=v?.decorationId,O=k.dom.querySelector(`[data-decoration-id=\"${T}\"]`);return O?.getBoundingClientRect()||null}:b;function x(k,A){var v;try{const O=t.getState(k.state),N=O?.decorationId?k.dom.querySelector(`[data-decoration-id=\"${O.decorationId}\"]`):null,_={editor:e,range:O?.range||{from:0,to:0},query:O?.query||null,text:O?.text||null,items:[],command:F=>f({editor:e,range:O?.range||{from:0,to:0},props:F}),decorationNode:N,clientRect:w(k,N)};(v=S?.onExit)==null||v.call(S,_)}catch{}const T=k.state.tr.setMeta(A,{exit:!0});k.dispatch(T)}const E=new we({key:t,view(){return{update:async(k,A)=>{var v,T,O,N,_,F,j;const R=(v=this.key)==null?void 0:v.getState(A),V=(T=this.key)==null?void 0:T.getState(k.state),$=R.active&&V.active&&R.range.from!==V.range.from,ie=!R.active&&V.active,Xe=R.active&&!V.active,Qe=!ie&&!Xe&&R.query!==V.query,lt=ie||$&&Qe,Us=Qe||$,Ei=Xe||$&&Qe;if(!lt&&!Us&&!Ei)return;const cs=Ei&&!lt?R:V,us=k.dom.querySelector(`[data-decoration-id=\"${cs.decorationId}\"]`);y={editor:e,range:cs.range,query:cs.query,text:cs.text,items:[],command:Rr=>f({editor:e,range:cs.range,props:Rr}),decorationNode:us,clientRect:w(k,us)},lt&&((O=S?.onBeforeStart)==null||O.call(S,y)),Us&&((N=S?.onBeforeUpdate)==null||N.call(S,y)),(Us||lt)&&(y.items=await d({editor:e,query:cs.query})),Ei&&((_=S?.onExit)==null||_.call(S,y)),Us&&((F=S?.onUpdate)==null||F.call(S,y)),lt&&((j=S?.onStart)==null||j.call(S,y))},destroy:()=>{var k;y&&((k=S?.onExit)==null||k.call(S,y))}}},state:{init(){return{active:!1,range:{from:0,to:0},query:null,text:null,composing:!1}},apply(k,A,v,T){const{isEditable:O}=e,{composing:N}=e.view,{selection:_}=k,{empty:F,from:j}=_,R={...A},V=k.getMeta(t);if(V&&V.exit)return R.active=!1,R.decorationId=null,R.range={from:0,to:0},R.query=null,R.text=null,R;if(R.composing=N,O&&(F||e.view.composing)){(j<A.range.from||j>A.range.to)&&!N&&!A.composing&&(R.active=!1);const $=m({char:n,allowSpaces:s,allowToIncludeChar:r,allowedPrefixes:i,startOfLine:o,$position:_.$from}),ie=`id_${Math.floor(Math.random()*4294967295)}`;$&&p({editor:e,state:T,range:$.range,isActive:A.active})&&(!g||g({editor:e,range:$.range,query:$.query,text:$.text,transaction:k}))?(R.active=!0,R.decorationId=A.decorationId?A.decorationId:ie,R.range=$.range,R.query=$.query,R.text=$.text):R.active=!1}else R.active=!1;return R.active||(R.decorationId=null,R.range={from:0,to:0},R.query=null,R.text=null),R}},props:{handleKeyDown(k,A){var v,T,O,N;const{active:_,range:F}=E.getState(k.state);if(!_)return!1;if(A.key===\"Escape\"||A.key===\"Esc\"){const R=E.getState(k.state),V=(v=y?.decorationNode)!=null?v:null,$=V??(R?.decorationId?k.dom.querySelector(`[data-decoration-id=\"${R.decorationId}\"]`):null);if(((T=S?.onKeyDown)==null?void 0:T.call(S,{view:k,event:A,range:R.range}))||!1)return!0;const Xe={editor:e,range:R.range,query:R.query,text:R.text,items:[],command:Qe=>f({editor:e,range:R.range,props:Qe}),decorationNode:$,clientRect:$?()=>$.getBoundingClientRect()||null:null};return(O=S?.onExit)==null||O.call(S,Xe),x(k,t),!0}return((N=S?.onKeyDown)==null?void 0:N.call(S,{view:k,event:A,range:F}))||!1},decorations(k){const{active:A,range:v,decorationId:T,query:O}=E.getState(k);if(!A)return null;const N=!O?.length,_=[a];return N&&_.push(u),xe.create(k.doc,[Ke.inline(v.from,v.to,{nodeName:l,class:_.join(\" \"),\"data-decoration-id\":T,\"data-decoration-content\":c})])}}});return E}var FP=/(?:^|\\s)(!\\[(.+|:?)]\\((\\S+)(?:(?:\\s+)[\"'](\\S+)[\"'])?\\))$/,pL=$e.create({name:\"image\",addOptions(){return{inline:!1,allowBase64:!1,HTMLAttributes:{},resize:!1}},inline(){return this.options.inline},group(){return this.options.inline?\"inline\":\"block\"},draggable:!0,addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null},width:{default:null},height:{default:null}}},parseHTML(){return[{tag:this.options.allowBase64?\"img[src]\":'img[src]:not([src^=\"data:\"])'}]},renderHTML({HTMLAttributes:t}){return[\"img\",he(this.options.HTMLAttributes,t)]},parseMarkdown:(t,e)=>e.createNode(\"image\",{src:t.href,title:t.title,alt:t.text}),renderMarkdown:t=>{var e,n,s,r,i,o;const l=(n=(e=t.attrs)==null?void 0:e.src)!=null?n:\"\",a=(r=(s=t.attrs)==null?void 0:s.alt)!=null?r:\"\",c=(o=(i=t.attrs)==null?void 0:i.title)!=null?o:\"\";return c?`![${a}](${l} \"${c}\")`:`![${a}](${l})`},addNodeView(){if(!this.options.resize||!this.options.resize.enabled||typeof document>\"u\")return null;const{directions:t,minWidth:e,minHeight:n,alwaysPreserveAspectRatio:s}=this.options.resize;return({node:r,getPos:i,HTMLAttributes:o,editor:l})=>{const a=document.createElement(\"img\");Object.entries(o).forEach(([f,d])=>{if(d!=null)switch(f){case\"width\":case\"height\":break;default:a.setAttribute(f,d);break}}),a.src=o.src;const c=new DR({element:a,editor:l,node:r,getPos:i,onResize:(f,d)=>{a.style.width=`${f}px`,a.style.height=`${d}px`},onCommit:(f,d)=>{const h=i();h!==void 0&&this.editor.chain().setNodeSelection(h).updateAttributes(this.name,{width:f,height:d}).run()},onUpdate:(f,d,h)=>f.type===r.type,options:{directions:t,min:{width:e,height:n},preserveAspectRatio:s===!0}}),u=c.dom;return u.style.visibility=\"hidden\",u.style.pointerEvents=\"none\",a.onload=()=>{u.style.visibility=\"\",u.style.pointerEvents=\"\"},c}},addCommands(){return{setImage:t=>({commands:e})=>e.insertContent({type:this.name,attrs:t})}},addInputRules(){return[ZS({find:FP,type:this.type,getAttributes:t=>{const[,,e,n,s]=t;return{src:n,alt:e,title:s}}})]}}),lc=(t,e)=>e.view.domAtPos(t).node.offsetParent!==null,zP=(t,e,n)=>{for(let s=t.depth;s>0;s-=1){const r=t.node(s),i=e(r),o=lc(t.start(s),n);if(i&&o)return{pos:s>0?t.before(s):0,start:t.start(s),depth:s,node:r}}},Qg=(t,e)=>{const{state:n,view:s,extensionManager:r}=t,{schema:i,selection:o}=n,{empty:l,$anchor:a}=o,c=!!r.extensions.find(y=>y.name===\"gapCursor\");if(!l||a.parent.type!==i.nodes.detailsSummary||!c||e===\"right\"&&a.parentOffset!==a.parent.nodeSize-2)return!1;const u=Or(y=>y.type===i.nodes.details)(o);if(!u)return!1;const f=$l(u.node,y=>y.type===i.nodes.detailsContent);if(!f.length||lc(u.start+f[0].pos+1,t))return!1;const h=n.doc.resolve(u.pos+u.node.nodeSize),p=Re.findFrom(h,1,!1);if(!p)return!1;const{tr:m}=n,g=new Re(p);return m.setSelection(g),m.scrollIntoView(),s.dispatch(m),!0},mL=$e.create({name:\"details\",content:\"detailsSummary detailsContent\",group:\"block\",defining:!0,isolating:!0,allowGapCursor:!1,addOptions(){return{persist:!1,openClassName:\"is-open\",HTMLAttributes:{}}},addAttributes(){return this.options.persist?{open:{default:!1,parseHTML:t=>t.hasAttribute(\"open\"),renderHTML:({open:t})=>t?{open:\"\"}:{}}}:[]},parseHTML(){return[{tag:\"details\"}]},renderHTML({HTMLAttributes:t}){return[\"details\",he(this.options.HTMLAttributes,t),0]},...jc({nodeName:\"details\",content:\"block\"}),addNodeView(){return({editor:t,getPos:e,node:n,HTMLAttributes:s})=>{const r=document.createElement(\"div\"),i=he(this.options.HTMLAttributes,s,{\"data-type\":this.name});Object.entries(i).forEach(([c,u])=>r.setAttribute(c,u));const o=document.createElement(\"button\");o.type=\"button\",r.append(o);const l=document.createElement(\"div\");r.append(l);const a=c=>{if(c!==void 0)if(c){if(r.classList.contains(this.options.openClassName))return;r.classList.add(this.options.openClassName)}else{if(!r.classList.contains(this.options.openClassName))return;r.classList.remove(this.options.openClassName)}else r.classList.toggle(this.options.openClassName);const u=new Event(\"toggleDetailsContent\"),f=l.querySelector(':scope > div[data-type=\"detailsContent\"]');f?.dispatchEvent(u)};return n.attrs.open&&setTimeout(()=>a()),o.addEventListener(\"click\",()=>{if(a(),!this.options.persist){t.commands.focus(void 0,{scrollIntoView:!1});return}if(t.isEditable&&typeof e==\"function\"){const{from:c,to:u}=t.state.selection;t.chain().command(({tr:f})=>{const d=e();if(!d)return!1;const h=f.doc.nodeAt(d);return h?.type!==this.type?!1:(f.setNodeMarkup(d,void 0,{open:!h.attrs.open}),!0)}).setTextSelection({from:c,to:u}).focus(void 0,{scrollIntoView:!1}).run()}}),{dom:r,contentDOM:l,ignoreMutation(c){return c.type===\"selection\"?!1:!r.contains(c.target)||r===c.target},update:c=>c.type!==this.type?!1:(c.attrs.open!==void 0&&a(c.attrs.open),!0)}}},addCommands(){return{setDetails:()=>({state:t,chain:e})=>{var n;const{schema:s,selection:r}=t,{$from:i,$to:o}=r,l=i.blockRange(o);if(!l)return!1;const a=t.doc.slice(l.start,l.end);if(!s.nodes.detailsContent.contentMatch.matchFragment(a.content))return!1;const u=((n=a.toJSON())==null?void 0:n.content)||[];return e().insertContentAt({from:l.start,to:l.end},{type:this.name,content:[{type:\"detailsSummary\"},{type:\"detailsContent\",content:u}]}).setTextSelection(l.start+2).run()},unsetDetails:()=>({state:t,chain:e})=>{const{selection:n,schema:s}=t,r=Or(y=>y.type===this.type)(n);if(!r)return!1;const i=$l(r.node,y=>y.type===s.nodes.detailsSummary),o=$l(r.node,y=>y.type===s.nodes.detailsContent);if(!i.length||!o.length)return!1;const l=i[0],a=o[0],c=r.pos,u=t.doc.resolve(c),f=c+r.node.nodeSize,d={from:c,to:f},h=a.node.content.toJSON()||[],p=u.parent.type.contentMatch.defaultType,g=[p?.create(null,l.node.content).toJSON(),...h];return e().insertContentAt(d,g).setTextSelection(c+1).run()}}},addKeyboardShortcuts(){return{Backspace:()=>{const{schema:t,selection:e}=this.editor.state,{empty:n,$anchor:s}=e;return!n||s.parent.type!==t.nodes.detailsSummary?!1:s.parentOffset!==0?this.editor.commands.command(({tr:r})=>{const i=s.pos-1,o=s.pos;return r.delete(i,o),!0}):this.editor.commands.unsetDetails()},Enter:({editor:t})=>{const{state:e,view:n}=t,{schema:s,selection:r}=e,{$head:i}=r;if(i.parent.type!==s.nodes.detailsSummary)return!1;const o=lc(i.after()+1,t),l=o?e.doc.nodeAt(i.after()):i.node(-2);if(!l)return!1;const a=o?0:i.indexAfter(-1),c=bh(l.contentMatchAt(a));if(!c||!l.canReplaceWith(a,a,c))return!1;const u=c.createAndFill();if(!u)return!1;const f=o?i.after()+1:i.after(-1),d=e.tr.replaceWith(f,f,u),h=d.doc.resolve(f),p=ee.near(h,1);return d.setSelection(p),d.scrollIntoView(),n.dispatch(d),!0},ArrowRight:({editor:t})=>Qg(t,\"right\"),ArrowDown:({editor:t})=>Qg(t,\"down\")}},addProseMirrorPlugins(){return[new we({key:new Ne(\"detailsSelection\"),appendTransaction:(t,e,n)=>{const{editor:s,type:r}=this;if(s.view.composing||!t.some(y=>y.selectionSet)||!e.selection.empty||!n.selection.empty||!PS(n,r.name))return;const{$from:a}=n.selection;if(lc(a.pos,s))return;const u=zP(a,y=>y.type===r,s);if(!u)return;const f=$l(u.node,y=>y.type===n.schema.nodes.detailsSummary);if(!f.length)return;const d=f[0],p=(e.selection.from<n.selection.from?\"forward\":\"backward\")===\"forward\"?u.start+d.pos:u.pos+d.pos+d.node.nodeSize,m=Z.create(n.doc,p);return n.tr.setSelection(m)}})]}}),gL=$e.create({name:\"detailsContent\",content:\"block+\",defining:!0,selectable:!1,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`div[data-type=\"${this.name}\"]`}]},renderHTML({HTMLAttributes:t}){return[\"div\",he(this.options.HTMLAttributes,t,{\"data-type\":this.name}),0]},addNodeView(){return({HTMLAttributes:t})=>{const e=document.createElement(\"div\"),n=he(this.options.HTMLAttributes,t,{\"data-type\":this.name,hidden:\"hidden\"});return Object.entries(n).forEach(([s,r])=>e.setAttribute(s,r)),e.addEventListener(\"toggleDetailsContent\",()=>{e.toggleAttribute(\"hidden\")}),{dom:e,contentDOM:e,ignoreMutation(s){return s.type===\"selection\"?!1:!e.contains(s.target)||e===s.target},update:s=>s.type===this.type}}},addKeyboardShortcuts(){return{Enter:({editor:t})=>{const{state:e,view:n}=t,{selection:s}=e,{$from:r,empty:i}=s,o=Or(O=>O.type===this.type)(s);if(!i||!o||!o.node.childCount)return!1;const l=r.index(o.depth),{childCount:a}=o.node;if(!(a===l+1))return!1;const u=o.node.type.contentMatch.defaultType,f=u?.createAndFill();if(!f)return!1;const d=e.doc.resolve(o.pos+1),h=a-1,p=o.node.child(h),m=d.posAtIndex(h,o.depth);if(!p.eq(f))return!1;const y=r.node(-3);if(!y)return!1;const S=r.indexAfter(-3),b=bh(y.contentMatchAt(S));if(!b||!y.canReplaceWith(S,S,b))return!1;const w=b.createAndFill();if(!w)return!1;const{tr:x}=e,E=r.after(-2);x.replaceWith(E,E,w);const k=x.doc.resolve(E),A=ee.near(k,1);x.setSelection(A);const v=m,T=m+p.nodeSize;return x.delete(v,T),x.scrollIntoView(),n.dispatch(x),!0}}},...jc({nodeName:\"detailsContent\"})}),yL=$e.create({name:\"detailsSummary\",content:\"text*\",defining:!0,selectable:!1,isolating:!0,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"summary\"}]},renderHTML({HTMLAttributes:t}){return[\"summary\",he(this.options.HTMLAttributes,t),0]},...jc({nodeName:\"detailsSummary\",content:\"inline\"})}),VP=20,Yw=(t,e=0)=>{const n=[];return!t.children.length||e>VP||Array.from(t.children).forEach(s=>{s.tagName===\"SPAN\"?n.push(s):s.children.length&&n.push(...Yw(s,e+1))}),n},WP=t=>{if(!t.children.length)return;const e=Yw(t);e&&e.forEach(n=>{var s,r;const i=n.getAttribute(\"style\"),o=(r=(s=n.parentElement)==null?void 0:s.closest(\"span\"))==null?void 0:r.getAttribute(\"style\");n.setAttribute(\"style\",`${o};${i}`)})},jP=is.create({name:\"textStyle\",priority:101,addOptions(){return{HTMLAttributes:{},mergeNestedSpanStyles:!0}},parseHTML(){return[{tag:\"span\",consuming:!1,getAttrs:t=>t.hasAttribute(\"style\")?(this.options.mergeNestedSpanStyles&&WP(t),{}):!1}]},renderHTML({HTMLAttributes:t}){return[\"span\",he(this.options.HTMLAttributes,t),0]},addCommands(){return{toggleTextStyle:t=>({commands:e})=>e.toggleMark(this.name,t),removeEmptyTextStyle:()=>({tr:t})=>{const{selection:e}=t;return t.doc.nodesBetween(e.from,e.to,(n,s)=>{if(n.isTextblock)return!0;n.marks.filter(r=>r.type===this.type).some(r=>Object.values(r.attrs).some(i=>!!i))||t.removeMark(s,s+n.nodeSize,this.type)}),!0}}}}),UP=Se.create({name:\"backgroundColor\",addOptions(){return{types:[\"textStyle\"]}},addGlobalAttributes(){return[{types:this.options.types,attributes:{backgroundColor:{default:null,parseHTML:t=>{var e;const n=t.getAttribute(\"style\");if(n){const s=n.split(\";\").map(r=>r.trim()).filter(Boolean);for(let r=s.length-1;r>=0;r-=1){const i=s[r].split(\":\");if(i.length>=2){const o=i[0].trim().toLowerCase(),l=i.slice(1).join(\":\").trim();if(o===\"background-color\")return l.replace(/['\"]+/g,\"\")}}}return(e=t.style.backgroundColor)==null?void 0:e.replace(/['\"]+/g,\"\")},renderHTML:t=>t.backgroundColor?{style:`background-color: ${t.backgroundColor}`}:{}}}}]},addCommands(){return{setBackgroundColor:t=>({chain:e})=>e().setMark(\"textStyle\",{backgroundColor:t}).run(),unsetBackgroundColor:()=>({chain:t})=>t().setMark(\"textStyle\",{backgroundColor:null}).removeEmptyTextStyle().run()}}}),KP=Se.create({name:\"color\",addOptions(){return{types:[\"textStyle\"]}},addGlobalAttributes(){return[{types:this.options.types,attributes:{color:{default:null,parseHTML:t=>{var e;const n=t.getAttribute(\"style\");if(n){const s=n.split(\";\").map(r=>r.trim()).filter(Boolean);for(let r=s.length-1;r>=0;r-=1){const i=s[r].split(\":\");if(i.length>=2){const o=i[0].trim().toLowerCase(),l=i.slice(1).join(\":\").trim();if(o===\"color\")return l.replace(/['\"]+/g,\"\")}}}return(e=t.style.color)==null?void 0:e.replace(/['\"]+/g,\"\")},renderHTML:t=>t.color?{style:`color: ${t.color}`}:{}}}}]},addCommands(){return{setColor:t=>({chain:e})=>e().setMark(\"textStyle\",{color:t}).run(),unsetColor:()=>({chain:t})=>t().setMark(\"textStyle\",{color:null}).removeEmptyTextStyle().run()}}}),qP=Se.create({name:\"fontFamily\",addOptions(){return{types:[\"textStyle\"]}},addGlobalAttributes(){return[{types:this.options.types,attributes:{fontFamily:{default:null,parseHTML:t=>t.style.fontFamily,renderHTML:t=>t.fontFamily?{style:`font-family: ${t.fontFamily}`}:{}}}}]},addCommands(){return{setFontFamily:t=>({chain:e})=>e().setMark(\"textStyle\",{fontFamily:t}).run(),unsetFontFamily:()=>({chain:t})=>t().setMark(\"textStyle\",{fontFamily:null}).removeEmptyTextStyle().run()}}}),JP=Se.create({name:\"fontSize\",addOptions(){return{types:[\"textStyle\"]}},addGlobalAttributes(){return[{types:this.options.types,attributes:{fontSize:{default:null,parseHTML:t=>t.style.fontSize,renderHTML:t=>t.fontSize?{style:`font-size: ${t.fontSize}`}:{}}}}]},addCommands(){return{setFontSize:t=>({chain:e})=>e().setMark(\"textStyle\",{fontSize:t}).run(),unsetFontSize:()=>({chain:t})=>t().setMark(\"textStyle\",{fontSize:null}).removeEmptyTextStyle().run()}}}),GP=Se.create({name:\"lineHeight\",addOptions(){return{types:[\"textStyle\"]}},addGlobalAttributes(){return[{types:this.options.types,attributes:{lineHeight:{default:null,parseHTML:t=>t.style.lineHeight,renderHTML:t=>t.lineHeight?{style:`line-height: ${t.lineHeight}`}:{}}}}]},addCommands(){return{setLineHeight:t=>({chain:e})=>e().setMark(\"textStyle\",{lineHeight:t}).run(),unsetLineHeight:()=>({chain:t})=>t().setMark(\"textStyle\",{lineHeight:null}).removeEmptyTextStyle().run()}}});Se.create({name:\"textStyleKit\",addExtensions(){const t=[];return this.options.backgroundColor!==!1&&t.push(UP.configure(this.options.backgroundColor)),this.options.color!==!1&&t.push(KP.configure(this.options.color)),this.options.fontFamily!==!1&&t.push(qP.configure(this.options.fontFamily)),this.options.fontSize!==!1&&t.push(JP.configure(this.options.fontSize)),this.options.lineHeight!==!1&&t.push(GP.configure(this.options.lineHeight)),this.options.textStyle!==!1&&t.push(jP.configure(this.options.textStyle)),t}});var YP=/(?:^|\\s)(==(?!\\s+==)((?:[^=]+))==(?!\\s+==))$/,XP=/(?:^|\\s)(==(?!\\s+==)((?:[^=]+))==(?!\\s+==))/g,QP=is.create({name:\"highlight\",addOptions(){return{multicolor:!1,HTMLAttributes:{}}},addAttributes(){return this.options.multicolor?{color:{default:null,parseHTML:t=>t.getAttribute(\"data-color\")||t.style.backgroundColor,renderHTML:t=>t.color?{\"data-color\":t.color,style:`background-color: ${t.color}; color: inherit`}:{}}}:{}},parseHTML(){return[{tag:\"mark\"}]},renderHTML({HTMLAttributes:t}){return[\"mark\",he(this.options.HTMLAttributes,t),0]},renderMarkdown:(t,e)=>`==${e.renderChildren(t)}==`,parseMarkdown:(t,e)=>e.applyMark(\"highlight\",e.parseInline(t.tokens||[])),markdownTokenizer:{name:\"highlight\",level:\"inline\",start:t=>t.indexOf(\"==\"),tokenize(t,e,n){const r=/^(==)([^=]+)(==)/.exec(t);if(r){const i=r[2].trim(),o=n.inlineTokens(i);return{type:\"highlight\",raw:r[0],text:i,tokens:o}}}},addCommands(){return{setHighlight:t=>({commands:e})=>e.setMark(this.name,t),toggleHighlight:t=>({commands:e})=>e.toggleMark(this.name,t),unsetHighlight:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-Shift-h\":()=>this.editor.commands.toggleHighlight()}},addInputRules(){return[wr({find:YP,type:this.type})]},addPasteRules(){return[zs({find:XP,type:this.type})]}}),bL=QP,ZP=Se.create({name:\"textAlign\",addOptions(){return{types:[],alignments:[\"left\",\"center\",\"right\",\"justify\"],defaultAlignment:null}},addGlobalAttributes(){return[{types:this.options.types,attributes:{textAlign:{default:this.options.defaultAlignment,parseHTML:t=>{const e=t.style.textAlign;return this.options.alignments.includes(e)?e:this.options.defaultAlignment},renderHTML:t=>t.textAlign?{style:`text-align: ${t.textAlign}`}:{}}}}]},addCommands(){return{setTextAlign:t=>({commands:e})=>this.options.alignments.includes(t)?this.options.types.map(n=>e.updateAttributes(n,{textAlign:t})).some(n=>n):!1,unsetTextAlign:()=>({commands:t})=>this.options.types.map(e=>t.resetAttributes(e,\"textAlign\")).some(e=>e),toggleTextAlign:t=>({editor:e,commands:n})=>this.options.alignments.includes(t)?e.isActive({textAlign:t})?n.unsetTextAlign():n.setTextAlign(t):!1}},addKeyboardShortcuts(){return{\"Mod-Shift-l\":()=>this.editor.commands.setTextAlign(\"left\"),\"Mod-Shift-e\":()=>this.editor.commands.setTextAlign(\"center\"),\"Mod-Shift-r\":()=>this.editor.commands.setTextAlign(\"right\"),\"Mod-Shift-j\":()=>this.editor.commands.setTextAlign(\"justify\")}}}),SL=ZP;export{rL as $,vi as A,Cc as B,V0 as C,Td as D,Xr as E,je as F,Ar as G,vc as H,Uo as I,kt as J,Ho as K,Jy as L,$C as M,JC as N,T0 as O,GC as P,Ve as Q,Jn as R,od as S,ns as T,EP as U,MP as V,BP as W,he as X,$e as Y,hL as Z,Ne as _,Cd as a,TD as a0,SD as a1,wD as a2,YO as a3,Se as a4,we as a5,pL as a6,DR as a7,iL as a8,dL as a9,yL as aa,gL as ab,jP as ac,KP as ad,cL as ae,aL as af,oL as ag,lL as ah,mL as ai,bL as aj,SL as ak,sL as al,fL as am,ve as an,nL as ao,$N as ap,Hs as aq,Ea as ar,Vv as b,$v as c,vd as d,of as e,Vo as f,Mr as g,Bo as h,sr as i,ea as j,WC as k,UC as l,Wk as m,$o as n,go as o,oa as p,Ie as q,KC as r,zk as s,ry as t,xi as u,Ed as v,yC as w,ud as x,G0 as y,I0 as z};\n"
  },
  {
    "path": "public/build/assets/vue-tippy.esm-browser-B_r0Ygiv.js",
    "content": "import{f as Qt,g as Tt,A as Mn,E as st,u as Zt,I as Ee,i as pe,K as Rn,H as Ln,Q as le,R as Lt,J as Bn,S as In,T as $n,e as Bt}from\"./vendor-tiptap-D5xFoo7B.js\";var U=\"top\",X=\"bottom\",Y=\"right\",F=\"left\",xt=\"auto\",_e=[U,X,Y,F],Pe=\"start\",Ue=\"end\",jn=\"clippingParents\",en=\"viewport\",ke=\"popper\",Hn=\"reference\",It=_e.reduce(function(e,t){return e.concat([t+\"-\"+Pe,t+\"-\"+Ue])},[]),tn=[].concat(_e,[xt]).reduce(function(e,t){return e.concat([t,t+\"-\"+Pe,t+\"-\"+Ue])},[]),kn=\"beforeRead\",Vn=\"read\",Nn=\"afterRead\",Un=\"beforeMain\",Fn=\"main\",Wn=\"afterMain\",_n=\"beforeWrite\",Xn=\"write\",Yn=\"afterWrite\",qn=[kn,Vn,Nn,Un,Fn,Wn,_n,Xn,Yn];function ne(e){return e?(e.nodeName||\"\").toLowerCase():null}function K(e){if(e==null)return window;if(e.toString()!==\"[object Window]\"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Se(e){var t=K(e).Element;return e instanceof t||e instanceof Element}function _(e){var t=K(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function nn(e){if(typeof ShadowRoot>\"u\")return!1;var t=K(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function zn(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},a=t.elements[n];!_(a)||!ne(a)||(Object.assign(a.style,r),Object.keys(o).forEach(function(s){var u=o[s];u===!1?a.removeAttribute(s):a.setAttribute(s,u===!0?\"\":u)}))})}function Gn(e){var t=e.state,n={popper:{position:t.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],a=t.attributes[r]||{},s=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),u=s.reduce(function(f,d){return f[d]=\"\",f},{});!_(o)||!ne(o)||(Object.assign(o.style,u),Object.keys(a).forEach(function(f){o.removeAttribute(f)}))})}}var rn={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:zn,effect:Gn,requires:[\"computeStyles\"]};function te(e){return e.split(\"-\")[0]}var be=Math.max,ut=Math.min,De=Math.round;function Me(e,t){t===void 0&&(t=!1);var n=e.getBoundingClientRect(),r=1,o=1;if(_(e)&&t){var a=e.offsetHeight,s=e.offsetWidth;s>0&&(r=De(n.width)/s||1),a>0&&(o=De(n.height)/a||1)}return{width:n.width/r,height:n.height/o,top:n.top/o,right:n.right/r,bottom:n.bottom/o,left:n.left/r,x:n.left/r,y:n.top/o}}function Ct(e){var t=Me(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function on(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&nn(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function re(e){return K(e).getComputedStyle(e)}function Kn(e){return[\"table\",\"td\",\"th\"].indexOf(ne(e))>=0}function ce(e){return((Se(e)?e.ownerDocument:e.document)||window.document).documentElement}function lt(e){return ne(e)===\"html\"?e:e.assignedSlot||e.parentNode||(nn(e)?e.host:null)||ce(e)}function $t(e){return!_(e)||re(e).position===\"fixed\"?null:e.offsetParent}function Jn(e){var t=navigator.userAgent.toLowerCase().indexOf(\"firefox\")!==-1,n=navigator.userAgent.indexOf(\"Trident\")!==-1;if(n&&_(e)){var r=re(e);if(r.position===\"fixed\")return null}for(var o=lt(e);_(o)&&[\"html\",\"body\"].indexOf(ne(o))<0;){var a=re(o);if(a.transform!==\"none\"||a.perspective!==\"none\"||a.contain===\"paint\"||[\"transform\",\"perspective\"].indexOf(a.willChange)!==-1||t&&a.willChange===\"filter\"||t&&a.filter&&a.filter!==\"none\")return o;o=o.parentNode}return null}function Xe(e){for(var t=K(e),n=$t(e);n&&Kn(n)&&re(n).position===\"static\";)n=$t(n);return n&&(ne(n)===\"html\"||ne(n)===\"body\"&&re(n).position===\"static\")?t:n||Jn(e)||t}function At(e){return[\"top\",\"bottom\"].indexOf(e)>=0?\"x\":\"y\"}function Ve(e,t,n){return be(e,ut(t,n))}function Qn(e,t,n){var r=Ve(e,t,n);return r>n?n:r}function an(){return{top:0,right:0,bottom:0,left:0}}function sn(e){return Object.assign({},an(),e)}function un(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var Zn=function(t,n){return t=typeof t==\"function\"?t(Object.assign({},n.rects,{placement:n.placement})):t,sn(typeof t!=\"number\"?t:un(t,_e))};function er(e){var t,n=e.state,r=e.name,o=e.options,a=n.elements.arrow,s=n.modifiersData.popperOffsets,u=te(n.placement),f=At(u),d=[F,Y].indexOf(u)>=0,p=d?\"height\":\"width\";if(!(!a||!s)){var x=Zn(o.padding,n),E=Ct(a),b=f===\"y\"?U:F,g=f===\"y\"?X:Y,y=n.rects.reference[p]+n.rects.reference[f]-s[f]-n.rects.popper[p],C=s[f]-n.rects.reference[f],m=Xe(a),A=m?f===\"y\"?m.clientHeight||0:m.clientWidth||0:0,S=y/2-C/2,i=x[b],w=A-E[p]-x[g],v=A/2-E[p]/2+S,c=Ve(i,v,w),h=f;n.modifiersData[r]=(t={},t[h]=c,t.centerOffset=c-v,t)}}function tr(e){var t=e.state,n=e.options,r=n.element,o=r===void 0?\"[data-popper-arrow]\":r;o!=null&&(typeof o==\"string\"&&(o=t.elements.popper.querySelector(o),!o)||on(t.elements.popper,o)&&(t.elements.arrow=o))}var nr={name:\"arrow\",enabled:!0,phase:\"main\",fn:er,effect:tr,requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function Re(e){return e.split(\"-\")[1]}var rr={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function ir(e){var t=e.x,n=e.y,r=window,o=r.devicePixelRatio||1;return{x:De(t*o)/o||0,y:De(n*o)/o||0}}function jt(e){var t,n=e.popper,r=e.popperRect,o=e.placement,a=e.variation,s=e.offsets,u=e.position,f=e.gpuAcceleration,d=e.adaptive,p=e.roundOffsets,x=e.isFixed,E=p===!0?ir(s):typeof p==\"function\"?p(s):s,b=E.x,g=b===void 0?0:b,y=E.y,C=y===void 0?0:y,m=s.hasOwnProperty(\"x\"),A=s.hasOwnProperty(\"y\"),S=F,i=U,w=window;if(d){var v=Xe(n),c=\"clientHeight\",h=\"clientWidth\";if(v===K(n)&&(v=ce(n),re(v).position!==\"static\"&&u===\"absolute\"&&(c=\"scrollHeight\",h=\"scrollWidth\")),v=v,o===U||(o===F||o===Y)&&a===Ue){i=X;var M=x&&w.visualViewport?w.visualViewport.height:v[c];C-=M-r.height,C*=f?1:-1}if(o===F||(o===U||o===X)&&a===Ue){S=Y;var B=x&&w.visualViewport?w.visualViewport.width:v[h];g-=B-r.width,g*=f?1:-1}}var I=Object.assign({position:u},d&&rr);if(f){var L;return Object.assign({},I,(L={},L[i]=A?\"0\":\"\",L[S]=m?\"0\":\"\",L.transform=(w.devicePixelRatio||1)<=1?\"translate(\"+g+\"px, \"+C+\"px)\":\"translate3d(\"+g+\"px, \"+C+\"px, 0)\",L))}return Object.assign({},I,(t={},t[i]=A?C+\"px\":\"\",t[S]=m?g+\"px\":\"\",t.transform=\"\",t))}function or(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0?!0:r,a=n.adaptive,s=a===void 0?!0:a,u=n.roundOffsets,f=u===void 0?!0:u,d={placement:te(t.placement),variation:Re(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy===\"fixed\"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,jt(Object.assign({},d,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:f})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,jt(Object.assign({},d,{offsets:t.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{\"data-popper-placement\":t.placement})}var ar={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:or,data:{}},rt={passive:!0};function sr(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,a=o===void 0?!0:o,s=r.resize,u=s===void 0?!0:s,f=K(t.elements.popper),d=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&d.forEach(function(p){p.addEventListener(\"scroll\",n.update,rt)}),u&&f.addEventListener(\"resize\",n.update,rt),function(){a&&d.forEach(function(p){p.removeEventListener(\"scroll\",n.update,rt)}),u&&f.removeEventListener(\"resize\",n.update,rt)}}var ur={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:sr,data:{}},fr={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function at(e){return e.replace(/left|right|bottom|top/g,function(t){return fr[t]})}var lr={start:\"end\",end:\"start\"};function Ht(e){return e.replace(/start|end/g,function(t){return lr[t]})}function Et(e){var t=K(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function Pt(e){return Me(ce(e)).left+Et(e).scrollLeft}function pr(e){var t=K(e),n=ce(e),r=t.visualViewport,o=n.clientWidth,a=n.clientHeight,s=0,u=0;return r&&(o=r.width,a=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=r.offsetLeft,u=r.offsetTop)),{width:o,height:a,x:s+Pt(e),y:u}}function cr(e){var t,n=ce(e),r=Et(e),o=(t=e.ownerDocument)==null?void 0:t.body,a=be(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=be(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),u=-r.scrollLeft+Pt(e),f=-r.scrollTop;return re(o||n).direction===\"rtl\"&&(u+=be(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:u,y:f}}function St(e){var t=re(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function fn(e){return[\"html\",\"body\",\"#document\"].indexOf(ne(e))>=0?e.ownerDocument.body:_(e)&&St(e)?e:fn(lt(e))}function Ne(e,t){var n;t===void 0&&(t=[]);var r=fn(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),a=K(r),s=o?[a].concat(a.visualViewport||[],St(r)?r:[]):r,u=t.concat(s);return o?u:u.concat(Ne(lt(s)))}function yt(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function dr(e){var t=Me(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}function kt(e,t){return t===en?yt(pr(e)):Se(t)?dr(t):yt(cr(ce(e)))}function vr(e){var t=Ne(lt(e)),n=[\"absolute\",\"fixed\"].indexOf(re(e).position)>=0,r=n&&_(e)?Xe(e):e;return Se(r)?t.filter(function(o){return Se(o)&&on(o,r)&&ne(o)!==\"body\"&&(n?re(o).position!==\"static\":!0)}):[]}function mr(e,t,n){var r=t===\"clippingParents\"?vr(e):[].concat(t),o=[].concat(r,[n]),a=o[0],s=o.reduce(function(u,f){var d=kt(e,f);return u.top=be(d.top,u.top),u.right=ut(d.right,u.right),u.bottom=ut(d.bottom,u.bottom),u.left=be(d.left,u.left),u},kt(e,a));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function ln(e){var t=e.reference,n=e.element,r=e.placement,o=r?te(r):null,a=r?Re(r):null,s=t.x+t.width/2-n.width/2,u=t.y+t.height/2-n.height/2,f;switch(o){case U:f={x:s,y:t.y-n.height};break;case X:f={x:s,y:t.y+t.height};break;case Y:f={x:t.x+t.width,y:u};break;case F:f={x:t.x-n.width,y:u};break;default:f={x:t.x,y:t.y}}var d=o?At(o):null;if(d!=null){var p=d===\"y\"?\"height\":\"width\";switch(a){case Pe:f[d]=f[d]-(t[p]/2-n[p]/2);break;case Ue:f[d]=f[d]+(t[p]/2-n[p]/2);break}}return f}function Fe(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,a=n.boundary,s=a===void 0?jn:a,u=n.rootBoundary,f=u===void 0?en:u,d=n.elementContext,p=d===void 0?ke:d,x=n.altBoundary,E=x===void 0?!1:x,b=n.padding,g=b===void 0?0:b,y=sn(typeof g!=\"number\"?g:un(g,_e)),C=p===ke?Hn:ke,m=e.rects.popper,A=e.elements[E?C:p],S=mr(Se(A)?A:A.contextElement||ce(e.elements.popper),s,f),i=Me(e.elements.reference),w=ln({reference:i,element:m,placement:o}),v=yt(Object.assign({},m,w)),c=p===ke?v:i,h={top:S.top-c.top+y.top,bottom:c.bottom-S.bottom+y.bottom,left:S.left-c.left+y.left,right:c.right-S.right+y.right},M=e.modifiersData.offset;if(p===ke&&M){var B=M[o];Object.keys(h).forEach(function(I){var L=[Y,X].indexOf(I)>=0?1:-1,$=[U,X].indexOf(I)>=0?\"y\":\"x\";h[I]+=B[$]*L})}return h}function gr(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=n.boundary,a=n.rootBoundary,s=n.padding,u=n.flipVariations,f=n.allowedAutoPlacements,d=f===void 0?tn:f,p=Re(r),x=p?u?It:It.filter(function(g){return Re(g)===p}):_e,E=x.filter(function(g){return d.indexOf(g)>=0});E.length===0&&(E=x);var b=E.reduce(function(g,y){return g[y]=Fe(e,{placement:y,boundary:o,rootBoundary:a,padding:s})[te(y)],g},{});return Object.keys(b).sort(function(g,y){return b[g]-b[y]})}function hr(e){if(te(e)===xt)return[];var t=at(e);return[Ht(e),t,Ht(t)]}function yr(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,a=o===void 0?!0:o,s=n.altAxis,u=s===void 0?!0:s,f=n.fallbackPlacements,d=n.padding,p=n.boundary,x=n.rootBoundary,E=n.altBoundary,b=n.flipVariations,g=b===void 0?!0:b,y=n.allowedAutoPlacements,C=t.options.placement,m=te(C),A=m===C,S=f||(A||!g?[at(C)]:hr(C)),i=[C].concat(S).reduce(function(ie,z){return ie.concat(te(z)===xt?gr(t,{placement:z,boundary:p,rootBoundary:x,padding:d,flipVariations:g,allowedAutoPlacements:y}):z)},[]),w=t.rects.reference,v=t.rects.popper,c=new Map,h=!0,M=i[0],B=0;B<i.length;B++){var I=i[B],L=te(I),$=Re(I)===Pe,N=[U,X].indexOf(L)>=0,q=N?\"width\":\"height\",H=Fe(t,{placement:I,boundary:p,rootBoundary:x,altBoundary:E,padding:d}),k=N?$?Y:F:$?X:U;w[q]>v[q]&&(k=at(k));var j=at(k),J=[];if(a&&J.push(H[L]<=0),u&&J.push(H[k]<=0,H[j]<=0),J.every(function(ie){return ie})){M=I,h=!1;break}c.set(I,J)}if(h)for(var Q=g?3:1,de=function(z){var oe=i.find(function(Oe){var ae=c.get(Oe);if(ae)return ae.slice(0,z).every(function(Te){return Te})});if(oe)return M=oe,\"break\"},Z=Q;Z>0;Z--){var ve=de(Z);if(ve===\"break\")break}t.placement!==M&&(t.modifiersData[r]._skip=!0,t.placement=M,t.reset=!0)}}var br={name:\"flip\",enabled:!0,phase:\"main\",fn:yr,requiresIfExists:[\"offset\"],data:{_skip:!1}};function Vt(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Nt(e){return[U,Y,X,F].some(function(t){return e[t]>=0})}function wr(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,a=t.modifiersData.preventOverflow,s=Fe(t,{elementContext:\"reference\"}),u=Fe(t,{altBoundary:!0}),f=Vt(s,r),d=Vt(u,o,a),p=Nt(f),x=Nt(d);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:d,isReferenceHidden:p,hasPopperEscaped:x},t.attributes.popper=Object.assign({},t.attributes.popper,{\"data-popper-reference-hidden\":p,\"data-popper-escaped\":x})}var Or={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:wr};function Tr(e,t,n){var r=te(e),o=[F,U].indexOf(r)>=0?-1:1,a=typeof n==\"function\"?n(Object.assign({},t,{placement:e})):n,s=a[0],u=a[1];return s=s||0,u=(u||0)*o,[F,Y].indexOf(r)>=0?{x:u,y:s}:{x:s,y:u}}function xr(e){var t=e.state,n=e.options,r=e.name,o=n.offset,a=o===void 0?[0,0]:o,s=tn.reduce(function(p,x){return p[x]=Tr(x,t.rects,a),p},{}),u=s[t.placement],f=u.x,d=u.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=d),t.modifiersData[r]=s}var Cr={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:xr};function Ar(e){var t=e.state,n=e.name;t.modifiersData[n]=ln({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}var Er={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:Ar,data:{}};function Pr(e){return e===\"x\"?\"y\":\"x\"}function Sr(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,a=o===void 0?!0:o,s=n.altAxis,u=s===void 0?!1:s,f=n.boundary,d=n.rootBoundary,p=n.altBoundary,x=n.padding,E=n.tether,b=E===void 0?!0:E,g=n.tetherOffset,y=g===void 0?0:g,C=Fe(t,{boundary:f,rootBoundary:d,padding:x,altBoundary:p}),m=te(t.placement),A=Re(t.placement),S=!A,i=At(m),w=Pr(i),v=t.modifiersData.popperOffsets,c=t.rects.reference,h=t.rects.popper,M=typeof y==\"function\"?y(Object.assign({},t.rects,{placement:t.placement})):y,B=typeof M==\"number\"?{mainAxis:M,altAxis:M}:Object.assign({mainAxis:0,altAxis:0},M),I=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(v){if(a){var $,N=i===\"y\"?U:F,q=i===\"y\"?X:Y,H=i===\"y\"?\"height\":\"width\",k=v[i],j=k+C[N],J=k-C[q],Q=b?-h[H]/2:0,de=A===Pe?c[H]:h[H],Z=A===Pe?-h[H]:-c[H],ve=t.elements.arrow,ie=b&&ve?Ct(ve):{width:0,height:0},z=t.modifiersData[\"arrow#persistent\"]?t.modifiersData[\"arrow#persistent\"].padding:an(),oe=z[N],Oe=z[q],ae=Ve(0,c[H],ie[H]),Te=S?c[H]/2-Q-ae-oe-B.mainAxis:de-ae-oe-B.mainAxis,ue=S?-c[H]/2+Q+ae+Oe+B.mainAxis:Z+ae+Oe+B.mainAxis,xe=t.elements.arrow&&Xe(t.elements.arrow),Ye=xe?i===\"y\"?xe.clientTop||0:xe.clientLeft||0:0,Be=($=I?.[i])!=null?$:0,qe=k+Te-Be-Ye,ze=k+ue-Be,Ie=Ve(b?ut(j,qe):j,k,b?be(J,ze):J);v[i]=Ie,L[i]=Ie-k}if(u){var $e,Ge=i===\"x\"?U:F,Ke=i===\"x\"?X:Y,se=v[w],fe=w===\"y\"?\"height\":\"width\",je=se+C[Ge],me=se-C[Ke],He=[U,F].indexOf(m)!==-1,Je=($e=I?.[w])!=null?$e:0,Qe=He?je:se-c[fe]-h[fe]-Je+B.altAxis,Ze=He?se+c[fe]+h[fe]-Je-B.altAxis:me,et=b&&He?Qn(Qe,se,Ze):Ve(b?Qe:je,se,b?Ze:me);v[w]=et,L[w]=et-se}t.modifiersData[r]=L}}var Dr={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:Sr,requiresIfExists:[\"offset\"]};function Mr(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Rr(e){return e===K(e)||!_(e)?Et(e):Mr(e)}function Lr(e){var t=e.getBoundingClientRect(),n=De(t.width)/e.offsetWidth||1,r=De(t.height)/e.offsetHeight||1;return n!==1||r!==1}function Br(e,t,n){n===void 0&&(n=!1);var r=_(t),o=_(t)&&Lr(t),a=ce(t),s=Me(e,o),u={scrollLeft:0,scrollTop:0},f={x:0,y:0};return(r||!r&&!n)&&((ne(t)!==\"body\"||St(a))&&(u=Rr(t)),_(t)?(f=Me(t,!0),f.x+=t.clientLeft,f.y+=t.clientTop):a&&(f.x=Pt(a))),{x:s.left+u.scrollLeft-f.x,y:s.top+u.scrollTop-f.y,width:s.width,height:s.height}}function Ir(e){var t=new Map,n=new Set,r=[];e.forEach(function(a){t.set(a.name,a)});function o(a){n.add(a.name);var s=[].concat(a.requires||[],a.requiresIfExists||[]);s.forEach(function(u){if(!n.has(u)){var f=t.get(u);f&&o(f)}}),r.push(a)}return e.forEach(function(a){n.has(a.name)||o(a)}),r}function $r(e){var t=Ir(e);return qn.reduce(function(n,r){return n.concat(t.filter(function(o){return o.phase===r}))},[])}function jr(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function Hr(e){var t=e.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var Ut={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Ft(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some(function(r){return!(r&&typeof r.getBoundingClientRect==\"function\")})}function kr(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,r=n===void 0?[]:n,o=t.defaultOptions,a=o===void 0?Ut:o;return function(u,f,d){d===void 0&&(d=a);var p={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Ut,a),modifiersData:{},elements:{reference:u,popper:f},attributes:{},styles:{}},x=[],E=!1,b={state:p,setOptions:function(m){var A=typeof m==\"function\"?m(p.options):m;y(),p.options=Object.assign({},a,p.options,A),p.scrollParents={reference:Se(u)?Ne(u):u.contextElement?Ne(u.contextElement):[],popper:Ne(f)};var S=$r(Hr([].concat(r,p.options.modifiers)));return p.orderedModifiers=S.filter(function(i){return i.enabled}),g(),b.update()},forceUpdate:function(){if(!E){var m=p.elements,A=m.reference,S=m.popper;if(Ft(A,S)){p.rects={reference:Br(A,Xe(S),p.options.strategy===\"fixed\"),popper:Ct(S)},p.reset=!1,p.placement=p.options.placement,p.orderedModifiers.forEach(function(B){return p.modifiersData[B.name]=Object.assign({},B.data)});for(var i=0;i<p.orderedModifiers.length;i++){if(p.reset===!0){p.reset=!1,i=-1;continue}var w=p.orderedModifiers[i],v=w.fn,c=w.options,h=c===void 0?{}:c,M=w.name;typeof v==\"function\"&&(p=v({state:p,options:h,name:M,instance:b})||p)}}}},update:jr(function(){return new Promise(function(C){b.forceUpdate(),C(p)})}),destroy:function(){y(),E=!0}};if(!Ft(u,f))return b;b.setOptions(d).then(function(C){!E&&d.onFirstUpdate&&d.onFirstUpdate(C)});function g(){p.orderedModifiers.forEach(function(C){var m=C.name,A=C.options,S=A===void 0?{}:A,i=C.effect;if(typeof i==\"function\"){var w=i({state:p,name:m,instance:b,options:S}),v=function(){};x.push(w||v)}})}function y(){x.forEach(function(C){return C()}),x=[]}return b}}var Vr=[ur,Er,ar,rn,Cr,br,Dr,nr,Or],Nr=kr({defaultModifiers:Vr}),Ur=\"tippy-box\",pn=\"tippy-content\",cn=\"tippy-backdrop\",dn=\"tippy-arrow\",vn=\"tippy-svg-arrow\",he={passive:!0,capture:!0},mn=function(){return document.body};function vt(e,t,n){if(Array.isArray(e)){var r=e[t];return r??(Array.isArray(n)?n[t]:n)}return e}function Dt(e,t){var n={}.toString.call(e);return n.indexOf(\"[object\")===0&&n.indexOf(t+\"]\")>-1}function gn(e,t){return typeof e==\"function\"?e.apply(void 0,t):e}function Wt(e,t){if(t===0)return e;var n;return function(r){clearTimeout(n),n=setTimeout(function(){e(r)},t)}}function Fr(e,t){var n=Object.assign({},e);return t.forEach(function(r){delete n[r]}),n}function Wr(e){return e.split(/\\s+/).filter(Boolean)}function ye(e){return[].concat(e)}function _t(e,t){e.indexOf(t)===-1&&e.push(t)}function _r(e){return e.filter(function(t,n){return e.indexOf(t)===n})}function hn(e){return e.split(\"-\")[0]}function Le(e){return[].slice.call(e)}function Xt(e){return Object.keys(e).reduce(function(t,n){return e[n]!==void 0&&(t[n]=e[n]),t},{})}function we(){return document.createElement(\"div\")}function pt(e){return[\"Element\",\"Fragment\"].some(function(t){return Dt(e,t)})}function Xr(e){return Dt(e,\"NodeList\")}function Mt(e){return Dt(e,\"MouseEvent\")}function Yr(e){return!!(e&&e._tippy&&e._tippy.reference===e)}function qr(e){return pt(e)?[e]:Xr(e)?Le(e):Array.isArray(e)?e:Le(document.querySelectorAll(e))}function mt(e,t){e.forEach(function(n){n&&(n.style.transitionDuration=t+\"ms\")})}function We(e,t){e.forEach(function(n){n&&n.setAttribute(\"data-state\",t)})}function yn(e){var t,n=ye(e),r=n[0];return r!=null&&(t=r.ownerDocument)!=null&&t.body?r.ownerDocument:document}function zr(e,t){var n=t.clientX,r=t.clientY;return e.every(function(o){var a=o.popperRect,s=o.popperState,u=o.props,f=u.interactiveBorder,d=hn(s.placement),p=s.modifiersData.offset;if(!p)return!0;var x=d===\"bottom\"?p.top.y:0,E=d===\"top\"?p.bottom.y:0,b=d===\"right\"?p.left.x:0,g=d===\"left\"?p.right.x:0,y=a.top-r+x>f,C=r-a.bottom-E>f,m=a.left-n+b>f,A=n-a.right-g>f;return y||C||m||A})}function gt(e,t,n){var r=t+\"EventListener\";[\"transitionend\",\"webkitTransitionEnd\"].forEach(function(o){e[r](o,n)})}function Yt(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=n.getRootNode==null||(r=n.getRootNode())==null?void 0:r.host}return!1}var ee={isTouch:!1},qt=0;function Gr(){ee.isTouch||(ee.isTouch=!0,window.performance&&document.addEventListener(\"mousemove\",bn))}function bn(){var e=performance.now();e-qt<20&&(ee.isTouch=!1,document.removeEventListener(\"mousemove\",bn)),qt=e}function Kr(){var e=document.activeElement;if(Yr(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}function Jr(){document.addEventListener(\"touchstart\",Gr,he),window.addEventListener(\"blur\",Kr)}var Qr=typeof window<\"u\"&&typeof document<\"u\",Zr=Qr?!!window.msCrypto:!1,ei={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},ti={allowHTML:!1,animation:\"fade\",arrow:!0,content:\"\",inertia:!1,maxWidth:350,role:\"tooltip\",theme:\"\",zIndex:9999},G=Object.assign({appendTo:mn,aria:{content:\"auto\",expanded:\"auto\"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:\"\",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:\"top\",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:\"mouseenter focus\",triggerTarget:null},ei,ti),ni=Object.keys(G),ri=function(t){var n=Object.keys(t);n.forEach(function(r){G[r]=t[r]})};function wn(e){var t=e.plugins||[],n=t.reduce(function(r,o){var a=o.name,s=o.defaultValue;if(a){var u;r[a]=e[a]!==void 0?e[a]:(u=G[a])!=null?u:s}return r},{});return Object.assign({},e,n)}function ii(e,t){var n=t?Object.keys(wn(Object.assign({},G,{plugins:t}))):ni,r=n.reduce(function(o,a){var s=(e.getAttribute(\"data-tippy-\"+a)||\"\").trim();if(!s)return o;if(a===\"content\")o[a]=s;else try{o[a]=JSON.parse(s)}catch{o[a]=s}return o},{});return r}function zt(e,t){var n=Object.assign({},t,{content:gn(t.content,[e])},t.ignoreAttributes?{}:ii(e,t.plugins));return n.aria=Object.assign({},G.aria,n.aria),n.aria={expanded:n.aria.expanded===\"auto\"?t.interactive:n.aria.expanded,content:n.aria.content===\"auto\"?t.interactive?null:\"describedby\":n.aria.content},n}var oi=function(){return\"innerHTML\"};function bt(e,t){e[oi()]=t}function Gt(e){var t=we();return e===!0?t.className=dn:(t.className=vn,pt(e)?t.appendChild(e):bt(t,e)),t}function Kt(e,t){pt(t.content)?(bt(e,\"\"),e.appendChild(t.content)):typeof t.content!=\"function\"&&(t.allowHTML?bt(e,t.content):e.textContent=t.content)}function ft(e){var t=e.firstElementChild,n=Le(t.children);return{box:t,content:n.find(function(r){return r.classList.contains(pn)}),arrow:n.find(function(r){return r.classList.contains(dn)||r.classList.contains(vn)}),backdrop:n.find(function(r){return r.classList.contains(cn)})}}function On(e){var t=we(),n=we();n.className=Ur,n.setAttribute(\"data-state\",\"hidden\"),n.setAttribute(\"tabindex\",\"-1\");var r=we();r.className=pn,r.setAttribute(\"data-state\",\"hidden\"),Kt(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props);function o(a,s){var u=ft(t),f=u.box,d=u.content,p=u.arrow;s.theme?f.setAttribute(\"data-theme\",s.theme):f.removeAttribute(\"data-theme\"),typeof s.animation==\"string\"?f.setAttribute(\"data-animation\",s.animation):f.removeAttribute(\"data-animation\"),s.inertia?f.setAttribute(\"data-inertia\",\"\"):f.removeAttribute(\"data-inertia\"),f.style.maxWidth=typeof s.maxWidth==\"number\"?s.maxWidth+\"px\":s.maxWidth,s.role?f.setAttribute(\"role\",s.role):f.removeAttribute(\"role\"),(a.content!==s.content||a.allowHTML!==s.allowHTML)&&Kt(d,e.props),s.arrow?p?a.arrow!==s.arrow&&(f.removeChild(p),f.appendChild(Gt(s.arrow))):f.appendChild(Gt(s.arrow)):p&&f.removeChild(p)}return{popper:t,onUpdate:o}}On.$$tippy=!0;var ai=1,it=[],ht=[];function si(e,t){var n=zt(e,Object.assign({},G,wn(Xt(t)))),r,o,a,s=!1,u=!1,f=!1,d=!1,p,x,E,b=[],g=Wt(qe,n.interactiveDebounce),y,C=ai++,m=null,A=_r(n.plugins),S={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},i={id:C,reference:e,popper:we(),popperInstance:m,props:n,state:S,plugins:A,clearDelayTimeouts:Qe,setProps:Ze,setContent:et,show:Cn,hide:An,hideWithInteractivity:En,enable:He,disable:Je,unmount:Pn,destroy:Sn};if(!n.render)return i;var w=n.render(i),v=w.popper,c=w.onUpdate;v.setAttribute(\"data-tippy-root\",\"\"),v.id=\"tippy-\"+i.id,i.popper=v,e._tippy=i,v._tippy=i;var h=A.map(function(l){return l.fn(i)}),M=e.hasAttribute(\"aria-expanded\");return xe(),Q(),k(),j(\"onCreate\",[i]),n.showOnCreate&&je(),v.addEventListener(\"mouseenter\",function(){i.props.interactive&&i.state.isVisible&&i.clearDelayTimeouts()}),v.addEventListener(\"mouseleave\",function(){i.props.interactive&&i.props.trigger.indexOf(\"mouseenter\")>=0&&N().addEventListener(\"mousemove\",g)}),i;function B(){var l=i.props.touch;return Array.isArray(l)?l:[l,0]}function I(){return B()[0]===\"hold\"}function L(){var l;return!!((l=i.props.render)!=null&&l.$$tippy)}function $(){return y||e}function N(){var l=$().parentNode;return l?yn(l):document}function q(){return ft(v)}function H(l){return i.state.isMounted&&!i.state.isVisible||ee.isTouch||p&&p.type===\"focus\"?0:vt(i.props.delay,l?0:1,G.delay)}function k(l){l===void 0&&(l=!1),v.style.pointerEvents=i.props.interactive&&!l?\"\":\"none\",v.style.zIndex=\"\"+i.props.zIndex}function j(l,O,P){if(P===void 0&&(P=!0),h.forEach(function(D){D[l]&&D[l].apply(D,O)}),P){var R;(R=i.props)[l].apply(R,O)}}function J(){var l=i.props.aria;if(l.content){var O=\"aria-\"+l.content,P=v.id,R=ye(i.props.triggerTarget||e);R.forEach(function(D){var V=D.getAttribute(O);if(i.state.isVisible)D.setAttribute(O,V?V+\" \"+P:P);else{var W=V&&V.replace(P,\"\").trim();W?D.setAttribute(O,W):D.removeAttribute(O)}})}}function Q(){if(!(M||!i.props.aria.expanded)){var l=ye(i.props.triggerTarget||e);l.forEach(function(O){i.props.interactive?O.setAttribute(\"aria-expanded\",i.state.isVisible&&O===$()?\"true\":\"false\"):O.removeAttribute(\"aria-expanded\")})}}function de(){N().removeEventListener(\"mousemove\",g),it=it.filter(function(l){return l!==g})}function Z(l){if(!(ee.isTouch&&(f||l.type===\"mousedown\"))){var O=l.composedPath&&l.composedPath()[0]||l.target;if(!(i.props.interactive&&Yt(v,O))){if(ye(i.props.triggerTarget||e).some(function(P){return Yt(P,O)})){if(ee.isTouch||i.state.isVisible&&i.props.trigger.indexOf(\"click\")>=0)return}else j(\"onClickOutside\",[i,l]);i.props.hideOnClick===!0&&(i.clearDelayTimeouts(),i.hide(),u=!0,setTimeout(function(){u=!1}),i.state.isMounted||oe())}}}function ve(){f=!0}function ie(){f=!1}function z(){var l=N();l.addEventListener(\"mousedown\",Z,!0),l.addEventListener(\"touchend\",Z,he),l.addEventListener(\"touchstart\",ie,he),l.addEventListener(\"touchmove\",ve,he)}function oe(){var l=N();l.removeEventListener(\"mousedown\",Z,!0),l.removeEventListener(\"touchend\",Z,he),l.removeEventListener(\"touchstart\",ie,he),l.removeEventListener(\"touchmove\",ve,he)}function Oe(l,O){Te(l,function(){!i.state.isVisible&&v.parentNode&&v.parentNode.contains(v)&&O()})}function ae(l,O){Te(l,O)}function Te(l,O){var P=q().box;function R(D){D.target===P&&(gt(P,\"remove\",R),O())}if(l===0)return O();gt(P,\"remove\",x),gt(P,\"add\",R),x=R}function ue(l,O,P){P===void 0&&(P=!1);var R=ye(i.props.triggerTarget||e);R.forEach(function(D){D.addEventListener(l,O,P),b.push({node:D,eventType:l,handler:O,options:P})})}function xe(){I()&&(ue(\"touchstart\",Be,{passive:!0}),ue(\"touchend\",ze,{passive:!0})),Wr(i.props.trigger).forEach(function(l){if(l!==\"manual\")switch(ue(l,Be),l){case\"mouseenter\":ue(\"mouseleave\",ze);break;case\"focus\":ue(Zr?\"focusout\":\"blur\",Ie);break;case\"focusin\":ue(\"focusout\",Ie);break}})}function Ye(){b.forEach(function(l){var O=l.node,P=l.eventType,R=l.handler,D=l.options;O.removeEventListener(P,R,D)}),b=[]}function Be(l){var O,P=!1;if(!(!i.state.isEnabled||$e(l)||u)){var R=((O=p)==null?void 0:O.type)===\"focus\";p=l,y=l.currentTarget,Q(),!i.state.isVisible&&Mt(l)&&it.forEach(function(D){return D(l)}),l.type===\"click\"&&(i.props.trigger.indexOf(\"mouseenter\")<0||s)&&i.props.hideOnClick!==!1&&i.state.isVisible?P=!0:je(l),l.type===\"click\"&&(s=!P),P&&!R&&me(l)}}function qe(l){var O=l.target,P=$().contains(O)||v.contains(O);if(!(l.type===\"mousemove\"&&P)){var R=fe().concat(v).map(function(D){var V,W=D._tippy,Ce=(V=W.popperInstance)==null?void 0:V.state;return Ce?{popperRect:D.getBoundingClientRect(),popperState:Ce,props:n}:null}).filter(Boolean);zr(R,l)&&(de(),me(l))}}function ze(l){var O=$e(l)||i.props.trigger.indexOf(\"click\")>=0&&s;if(!O){if(i.props.interactive){i.hideWithInteractivity(l);return}me(l)}}function Ie(l){i.props.trigger.indexOf(\"focusin\")<0&&l.target!==$()||i.props.interactive&&l.relatedTarget&&v.contains(l.relatedTarget)||me(l)}function $e(l){return ee.isTouch?I()!==l.type.indexOf(\"touch\")>=0:!1}function Ge(){Ke();var l=i.props,O=l.popperOptions,P=l.placement,R=l.offset,D=l.getReferenceClientRect,V=l.moveTransition,W=L()?ft(v).arrow:null,Ce=D?{getBoundingClientRect:D,contextElement:D.contextElement||$()}:e,Rt={name:\"$$tippy\",enabled:!0,phase:\"beforeWrite\",requires:[\"computeStyles\"],fn:function(tt){var Ae=tt.state;if(L()){var Dn=q(),dt=Dn.box;[\"placement\",\"reference-hidden\",\"escaped\"].forEach(function(nt){nt===\"placement\"?dt.setAttribute(\"data-placement\",Ae.placement):Ae.attributes.popper[\"data-popper-\"+nt]?dt.setAttribute(\"data-\"+nt,\"\"):dt.removeAttribute(\"data-\"+nt)}),Ae.attributes.popper={}}}},ge=[{name:\"offset\",options:{offset:R}},{name:\"preventOverflow\",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:\"flip\",options:{padding:5}},{name:\"computeStyles\",options:{adaptive:!V}},Rt];L()&&W&&ge.push({name:\"arrow\",options:{element:W,padding:3}}),ge.push.apply(ge,O?.modifiers||[]),i.popperInstance=Nr(Ce,v,Object.assign({},O,{placement:P,onFirstUpdate:E,modifiers:ge}))}function Ke(){i.popperInstance&&(i.popperInstance.destroy(),i.popperInstance=null)}function se(){var l=i.props.appendTo,O,P=$();i.props.interactive&&l===mn||l===\"parent\"?O=P.parentNode:O=gn(l,[P]),O.contains(v)||O.appendChild(v),i.state.isMounted=!0,Ge()}function fe(){return Le(v.querySelectorAll(\"[data-tippy-root]\"))}function je(l){i.clearDelayTimeouts(),l&&j(\"onTrigger\",[i,l]),z();var O=H(!0),P=B(),R=P[0],D=P[1];ee.isTouch&&R===\"hold\"&&D&&(O=D),O?r=setTimeout(function(){i.show()},O):i.show()}function me(l){if(i.clearDelayTimeouts(),j(\"onUntrigger\",[i,l]),!i.state.isVisible){oe();return}if(!(i.props.trigger.indexOf(\"mouseenter\")>=0&&i.props.trigger.indexOf(\"click\")>=0&&[\"mouseleave\",\"mousemove\"].indexOf(l.type)>=0&&s)){var O=H(!1);O?o=setTimeout(function(){i.state.isVisible&&i.hide()},O):a=requestAnimationFrame(function(){i.hide()})}}function He(){i.state.isEnabled=!0}function Je(){i.hide(),i.state.isEnabled=!1}function Qe(){clearTimeout(r),clearTimeout(o),cancelAnimationFrame(a)}function Ze(l){if(!i.state.isDestroyed){j(\"onBeforeUpdate\",[i,l]),Ye();var O=i.props,P=zt(e,Object.assign({},O,Xt(l),{ignoreAttributes:!0}));i.props=P,xe(),O.interactiveDebounce!==P.interactiveDebounce&&(de(),g=Wt(qe,P.interactiveDebounce)),O.triggerTarget&&!P.triggerTarget?ye(O.triggerTarget).forEach(function(R){R.removeAttribute(\"aria-expanded\")}):P.triggerTarget&&e.removeAttribute(\"aria-expanded\"),Q(),k(),c&&c(O,P),i.popperInstance&&(Ge(),fe().forEach(function(R){requestAnimationFrame(R._tippy.popperInstance.forceUpdate)})),j(\"onAfterUpdate\",[i,l])}}function et(l){i.setProps({content:l})}function Cn(){var l=i.state.isVisible,O=i.state.isDestroyed,P=!i.state.isEnabled,R=ee.isTouch&&!i.props.touch,D=vt(i.props.duration,0,G.duration);if(!(l||O||P||R)&&!$().hasAttribute(\"disabled\")&&(j(\"onShow\",[i],!1),i.props.onShow(i)!==!1)){if(i.state.isVisible=!0,L()&&(v.style.visibility=\"visible\"),k(),z(),i.state.isMounted||(v.style.transition=\"none\"),L()){var V=q(),W=V.box,Ce=V.content;mt([W,Ce],0)}E=function(){var ge;if(!(!i.state.isVisible||d)){if(d=!0,v.offsetHeight,v.style.transition=i.props.moveTransition,L()&&i.props.animation){var ct=q(),tt=ct.box,Ae=ct.content;mt([tt,Ae],D),We([tt,Ae],\"visible\")}J(),Q(),_t(ht,i),(ge=i.popperInstance)==null||ge.forceUpdate(),j(\"onMount\",[i]),i.props.animation&&L()&&ae(D,function(){i.state.isShown=!0,j(\"onShown\",[i])})}},se()}}function An(){var l=!i.state.isVisible,O=i.state.isDestroyed,P=!i.state.isEnabled,R=vt(i.props.duration,1,G.duration);if(!(l||O||P)&&(j(\"onHide\",[i],!1),i.props.onHide(i)!==!1)){if(i.state.isVisible=!1,i.state.isShown=!1,d=!1,s=!1,L()&&(v.style.visibility=\"hidden\"),de(),oe(),k(!0),L()){var D=q(),V=D.box,W=D.content;i.props.animation&&(mt([V,W],R),We([V,W],\"hidden\"))}J(),Q(),i.props.animation?L()&&Oe(R,i.unmount):i.unmount()}}function En(l){N().addEventListener(\"mousemove\",g),_t(it,g),g(l)}function Pn(){i.state.isVisible&&i.hide(),i.state.isMounted&&(Ke(),fe().forEach(function(l){l._tippy.unmount()}),v.parentNode&&v.parentNode.removeChild(v),ht=ht.filter(function(l){return l!==i}),i.state.isMounted=!1,j(\"onHidden\",[i]))}function Sn(){i.state.isDestroyed||(i.clearDelayTimeouts(),i.unmount(),Ye(),delete e._tippy,i.state.isDestroyed=!0,j(\"onDestroy\",[i]))}}function T(e,t){t===void 0&&(t={});var n=G.plugins.concat(t.plugins||[]);Jr();var r=Object.assign({},t,{plugins:n}),o=qr(e),a=o.reduce(function(s,u){var f=u&&si(u,r);return f&&s.push(f),s},[]);return pt(e)?a[0]:a}T.defaultProps=G;T.setDefaultProps=ri;T.currentInput=ee;var ui=Object.assign({},rn,{effect:function(t){var n=t.state,r={popper:{position:n.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};Object.assign(n.elements.popper.style,r.popper),n.styles=r,n.elements.arrow&&Object.assign(n.elements.arrow.style,r.arrow)}}),fi=function(t,n){var r;n===void 0&&(n={});var o=t,a=[],s=[],u,f=n.overrides,d=[],p=!1;function x(){s=o.map(function(i){return ye(i.props.triggerTarget||i.reference)}).reduce(function(i,w){return i.concat(w)},[])}function E(){a=o.map(function(i){return i.reference})}function b(i){o.forEach(function(w){i?w.enable():w.disable()})}function g(i){return o.map(function(w){var v=w.setProps;return w.setProps=function(c){v(c),w.reference===u&&i.setProps(c)},function(){w.setProps=v}})}function y(i,w){var v=s.indexOf(w);if(w!==u){u=w;var c=(f||[]).concat(\"content\").reduce(function(h,M){return h[M]=o[v].props[M],h},{});i.setProps(Object.assign({},c,{getReferenceClientRect:typeof c.getReferenceClientRect==\"function\"?c.getReferenceClientRect:function(){var h;return(h=a[v])==null?void 0:h.getBoundingClientRect()}}))}}b(!1),E(),x();var C={fn:function(){return{onDestroy:function(){b(!0)},onHidden:function(){u=null},onClickOutside:function(v){v.props.showOnCreate&&!p&&(p=!0,u=null)},onShow:function(v){v.props.showOnCreate&&!p&&(p=!0,y(v,a[0]))},onTrigger:function(v,c){y(v,c.currentTarget)}}}},m=T(we(),Object.assign({},Fr(n,[\"overrides\"]),{plugins:[C].concat(n.plugins||[]),triggerTarget:s,popperOptions:Object.assign({},n.popperOptions,{modifiers:[].concat(((r=n.popperOptions)==null?void 0:r.modifiers)||[],[ui])})})),A=m.show;m.show=function(i){if(A(),!u&&i==null)return y(m,a[0]);if(!(u&&i==null)){if(typeof i==\"number\")return a[i]&&y(m,a[i]);if(o.indexOf(i)>=0){var w=i.reference;return y(m,w)}if(a.indexOf(i)>=0)return y(m,i)}},m.showNext=function(){var i=a[0];if(!u)return m.show(0);var w=a.indexOf(u);m.show(a[w+1]||i)},m.showPrevious=function(){var i=a[a.length-1];if(!u)return m.show(i);var w=a.indexOf(u),v=a[w-1]||i;m.show(v)};var S=m.setProps;return m.setProps=function(i){f=i.overrides||f,S(i)},m.setInstances=function(i){b(!0),d.forEach(function(w){return w()}),o=i,b(!1),E(),x(),d=g(m),m.setProps({triggerTarget:s})},d=g(m),m},li={name:\"animateFill\",defaultValue:!1,fn:function(t){var n;if(!((n=t.props.render)!=null&&n.$$tippy))return{};var r=ft(t.popper),o=r.box,a=r.content,s=t.props.animateFill?pi():null;return{onCreate:function(){s&&(o.insertBefore(s,o.firstElementChild),o.setAttribute(\"data-animatefill\",\"\"),o.style.overflow=\"hidden\",t.setProps({arrow:!1,animation:\"shift-away\"}))},onMount:function(){if(s){var f=o.style.transitionDuration,d=Number(f.replace(\"ms\",\"\"));a.style.transitionDelay=Math.round(d/10)+\"ms\",s.style.transitionDuration=f,We([s],\"visible\")}},onShow:function(){s&&(s.style.transitionDuration=\"0ms\")},onHide:function(){s&&We([s],\"hidden\")}}}};function pi(){var e=we();return e.className=cn,We([e],\"hidden\"),e}var wt={clientX:0,clientY:0},ot=[];function Tn(e){var t=e.clientX,n=e.clientY;wt={clientX:t,clientY:n}}function ci(e){e.addEventListener(\"mousemove\",Tn)}function di(e){e.removeEventListener(\"mousemove\",Tn)}var vi={name:\"followCursor\",defaultValue:!1,fn:function(t){var n=t.reference,r=yn(t.props.triggerTarget||n),o=!1,a=!1,s=!0,u=t.props;function f(){return t.props.followCursor===\"initial\"&&t.state.isVisible}function d(){r.addEventListener(\"mousemove\",E)}function p(){r.removeEventListener(\"mousemove\",E)}function x(){o=!0,t.setProps({getReferenceClientRect:null}),o=!1}function E(y){var C=y.target?n.contains(y.target):!0,m=t.props.followCursor,A=y.clientX,S=y.clientY,i=n.getBoundingClientRect(),w=A-i.left,v=S-i.top;(C||!t.props.interactive)&&t.setProps({getReferenceClientRect:function(){var h=n.getBoundingClientRect(),M=A,B=S;m===\"initial\"&&(M=h.left+w,B=h.top+v);var I=m===\"horizontal\"?h.top:B,L=m===\"vertical\"?h.right:M,$=m===\"horizontal\"?h.bottom:B,N=m===\"vertical\"?h.left:M;return{width:L-N,height:$-I,top:I,right:L,bottom:$,left:N}}})}function b(){t.props.followCursor&&(ot.push({instance:t,doc:r}),ci(r))}function g(){ot=ot.filter(function(y){return y.instance!==t}),ot.filter(function(y){return y.doc===r}).length===0&&di(r)}return{onCreate:b,onDestroy:g,onBeforeUpdate:function(){u=t.props},onAfterUpdate:function(C,m){var A=m.followCursor;o||A!==void 0&&u.followCursor!==A&&(g(),A?(b(),t.state.isMounted&&!a&&!f()&&d()):(p(),x()))},onMount:function(){t.props.followCursor&&!a&&(s&&(E(wt),s=!1),f()||d())},onTrigger:function(C,m){Mt(m)&&(wt={clientX:m.clientX,clientY:m.clientY}),a=m.type===\"focus\"},onHidden:function(){t.props.followCursor&&(x(),p(),s=!0)}}}};function mi(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat((((n=e.popperOptions)==null?void 0:n.modifiers)||[]).filter(function(r){var o=r.name;return o!==t.name}),[t])})}}var gi={name:\"inlinePositioning\",defaultValue:!1,fn:function(t){var n=t.reference;function r(){return!!t.props.inlinePositioning}var o,a=-1,s=!1,u=[],f={name:\"tippyInlinePositioning\",enabled:!0,phase:\"afterWrite\",fn:function(b){var g=b.state;r()&&(u.indexOf(g.placement)!==-1&&(u=[]),o!==g.placement&&u.indexOf(g.placement)===-1&&(u.push(g.placement),t.setProps({getReferenceClientRect:function(){return d(g.placement)}})),o=g.placement)}};function d(E){return hi(hn(E),n.getBoundingClientRect(),Le(n.getClientRects()),a)}function p(E){s=!0,t.setProps(E),s=!1}function x(){s||p(mi(t.props,f))}return{onCreate:x,onAfterUpdate:x,onTrigger:function(b,g){if(Mt(g)){var y=Le(t.reference.getClientRects()),C=y.find(function(A){return A.left-2<=g.clientX&&A.right+2>=g.clientX&&A.top-2<=g.clientY&&A.bottom+2>=g.clientY}),m=y.indexOf(C);a=m>-1?m:a}},onHidden:function(){a=-1}}}};function hi(e,t,n,r){if(n.length<2||e===null)return t;if(n.length===2&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case\"top\":case\"bottom\":{var o=n[0],a=n[n.length-1],s=e===\"top\",u=o.top,f=a.bottom,d=s?o.left:a.left,p=s?o.right:a.right,x=p-d,E=f-u;return{top:u,bottom:f,left:d,right:p,width:x,height:E}}case\"left\":case\"right\":{var b=Math.min.apply(Math,n.map(function(v){return v.left})),g=Math.max.apply(Math,n.map(function(v){return v.right})),y=n.filter(function(v){return e===\"left\"?v.left===b:v.right===g}),C=y[0].top,m=y[y.length-1].bottom,A=b,S=g,i=S-A,w=m-C;return{top:C,bottom:m,left:A,right:S,width:i,height:w}}default:return t}}var yi={name:\"sticky\",defaultValue:!1,fn:function(t){var n=t.reference,r=t.popper;function o(){return t.popperInstance?t.popperInstance.state.elements.reference:n}function a(d){return t.props.sticky===!0||t.props.sticky===d}var s=null,u=null;function f(){var d=a(\"reference\")?o().getBoundingClientRect():null,p=a(\"popper\")?r.getBoundingClientRect():null;(d&&Jt(s,d)||p&&Jt(u,p))&&t.popperInstance&&t.popperInstance.update(),s=d,u=p,t.state.isMounted&&requestAnimationFrame(f)}return{onMount:function(){t.props.sticky&&f()}}}};function Jt(e,t){return e&&t?e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left:!0}T.setDefaultProps({render:On});T.setDefaultProps({onShow:e=>{if(!e.props.content)return!1}});const bi=e=>e instanceof Object&&\"$\"in e&&\"$el\"in e;function xn(e,t={},n={mount:!0,appName:\"Tippy\"}){n=Object.assign({mount:!0,appName:\"Tippy\"},n);const r=Bn(),o=pe(),a=pe({isEnabled:!1,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1}),s=In();let u=null;const f=()=>u||(u=document.createDocumentFragment(),u),d=c=>{let h,M=le(c)?c.value:c;return $n(M)?(s.value||(s.value=Bt({name:n.appName,setup:()=>()=>le(c)?c.value:c}),r&&Object.assign(s.value._context,r.appContext),s.value.mount(f())),h=()=>f()):typeof M==\"object\"?(s.value||(s.value=Bt({name:n.appName,setup:()=>()=>Ee(le(c)?c.value:c)}),r&&Object.assign(s.value._context,r.appContext),s.value.mount(f())),h=()=>f()):h=M,h},p=c=>{let h={};return le(c)?h=c.value||{}:Lt(c)?h={...c}:h={...c},h.content&&(h.content=d(h.content)),h.triggerTarget&&(h.triggerTarget=le(h.triggerTarget)?h.triggerTarget.value:h.triggerTarget),(!h.plugins||!Array.isArray(h.plugins))&&(h.plugins=[]),h.plugins=h.plugins.filter(M=>M.name!==\"vueTippyReactiveState\"),h.plugins.push({name:\"vueTippyReactiveState\",fn:()=>({onCreate(){a.value.isEnabled=!0},onMount(){a.value.isMounted=!0},onShow(){a.value.isMounted=!0,a.value.isVisible=!0},onShown(){a.value.isShown=!0},onHide(){a.value.isMounted=!1,a.value.isVisible=!1},onHidden(){a.value.isShown=!1},onUnmounted(){a.value.isMounted=!1},onDestroy(){a.value.isDestroyed=!0}})}),h},x=()=>{o.value&&o.value.setProps(p(t))},E=()=>{!o.value||!t.content||o.value.setContent(d(t.content))},b=c=>{var h;(h=o.value)===null||h===void 0||h.setContent(d(c))},g=c=>{var h;(h=o.value)===null||h===void 0||h.setProps(p(c))},y=()=>{var c;o.value&&(o.value.destroy(),o.value=void 0),u=null,(c=s.value)===null||c===void 0||c.unmount(),s.value=void 0},C=()=>{var c;(c=o.value)===null||c===void 0||c.show()},m=()=>{var c;(c=o.value)===null||c===void 0||c.hide()},A=()=>{var c;(c=o.value)===null||c===void 0||c.disable(),a.value.isEnabled=!1},S=()=>{var c;(c=o.value)===null||c===void 0||c.enable(),a.value.isEnabled=!0},i=()=>{var c;(c=o.value)===null||c===void 0||c.unmount()},w=()=>{if(!e)return;let c=le(e)?e.value:e;typeof c==\"function\"&&(c=c()),bi(c)&&(c=c.$el),c&&(o.value=T(c,p(t)),c.$tippy=v)},v={tippy:o,refresh:x,refreshContent:E,setContent:b,setProps:g,destroy:y,hide:m,show:C,disable:A,enable:S,unmount:i,mount:w,state:a};return n.mount&&(r?r.isMounted?w():Tt(w):w()),r&&Ln(()=>{y()}),le(t)||Lt(t)?st(t,x,{immediate:!1}):le(t.content)&&st(t.content,E,{immediate:!1}),v}function wi(e,t){const n=pe();return Tt(()=>{const o=(Array.isArray(e)?e.map(a=>a.value):typeof e==\"function\"?e():e.value).map(a=>a instanceof Element?a._tippy:a).filter(Boolean);n.value=fi(o,t?{allowHTML:!0,...t}:{allowHTML:!0})}),{singleton:n}}function Oi(e){return typeof e==\"function\"?e():Zt(e)}function Ti(e){var t,n;const r=Oi(e);return(n=(t=r)===null||t===void 0?void 0:t.$el)!==null&&n!==void 0?n:r}const xi=Qt({props:{to:{type:[String,Function]},tag:{type:[String,Object],default:\"span\"},contentTag:{type:[String,Object],default:\"span\"},contentClass:{type:String,default:null},appendTo:{default:()=>T.defaultProps.appendTo},aria:{default:()=>T.defaultProps.aria},delay:{default:()=>T.defaultProps.delay},duration:{default:()=>T.defaultProps.duration},getReferenceClientRect:{default:()=>T.defaultProps.getReferenceClientRect},hideOnClick:{type:[Boolean,String],default:()=>T.defaultProps.hideOnClick},ignoreAttributes:{type:Boolean,default:()=>T.defaultProps.ignoreAttributes},interactive:{type:Boolean,default:()=>T.defaultProps.interactive},interactiveBorder:{default:()=>T.defaultProps.interactiveBorder},interactiveDebounce:{default:()=>T.defaultProps.interactiveDebounce},moveTransition:{default:()=>T.defaultProps.moveTransition},offset:{default:()=>T.defaultProps.offset},onAfterUpdate:{default:()=>T.defaultProps.onAfterUpdate},onBeforeUpdate:{default:()=>T.defaultProps.onBeforeUpdate},onCreate:{default:()=>T.defaultProps.onCreate},onDestroy:{default:()=>T.defaultProps.onDestroy},onHidden:{default:()=>T.defaultProps.onHidden},onHide:{default:()=>T.defaultProps.onHide},onMount:{default:()=>T.defaultProps.onMount},onShow:{default:()=>T.defaultProps.onShow},onShown:{default:()=>T.defaultProps.onShown},onTrigger:{default:()=>T.defaultProps.onTrigger},onUntrigger:{default:()=>T.defaultProps.onUntrigger},onClickOutside:{default:()=>T.defaultProps.onClickOutside},placement:{default:()=>T.defaultProps.placement},plugins:{default:()=>T.defaultProps.plugins},popperOptions:{default:()=>T.defaultProps.popperOptions},render:{default:()=>T.defaultProps.render},showOnCreate:{type:Boolean,default:()=>T.defaultProps.showOnCreate},touch:{type:[Boolean,String,Array],default:()=>T.defaultProps.touch},trigger:{default:()=>T.defaultProps.trigger},triggerTarget:{default:()=>T.defaultProps.triggerTarget},animateFill:{type:Boolean,default:()=>T.defaultProps.animateFill},followCursor:{type:[Boolean,String],default:()=>T.defaultProps.followCursor},inlinePositioning:{type:Boolean,default:()=>T.defaultProps.inlinePositioning},sticky:{type:[Boolean,String],default:()=>T.defaultProps.sticky},allowHTML:{type:Boolean,default:()=>T.defaultProps.allowHTML},animation:{default:()=>T.defaultProps.animation},arrow:{default:()=>T.defaultProps.arrow},content:{default:()=>T.defaultProps.content},inertia:{default:()=>T.defaultProps.inertia},maxWidth:{default:()=>T.defaultProps.maxWidth},role:{default:()=>T.defaultProps.role},theme:{default:()=>T.defaultProps.theme},zIndex:{default:()=>T.defaultProps.zIndex}},emits:[\"state\"],setup(e,{slots:t,emit:n,expose:r}){const o=pe(),a=pe(),s=pe(),u=pe(!1),f=()=>{let b={...e};for(const g of[\"to\",\"tag\",\"contentTag\",\"contentClass\"])b.hasOwnProperty(g)&&delete b[g];return b};let d=()=>Ti(o);e.to&&(typeof Element<\"u\"&&e.to instanceof Element?d=()=>e.to:e.to===\"parent\"?d=()=>{let b=o.value;return b||(b=o.value=a.value.parentElement),b}:(typeof e.to==\"string\"||e.to instanceof String)&&(d=()=>document.querySelector(e.to)));const p=xn(d,f());let x=t.content;!x&&e.to===\"parent\"&&(x=t.default),Tt(()=>{u.value=!0,Mn(()=>{x&&p.setContent(()=>s.value)})}),st(p.state,()=>{n(\"state\",Zt(p.state))},{immediate:!0,deep:!0}),st(()=>e,()=>{p.setProps(f()),x&&p.setContent(()=>s.value)},{deep:!0});let E=Rn({elem:o,contentElem:s,mounted:u,...p});return r(E),()=>{const b=(typeof e.contentTag==\"string\",e.contentTag),g=x?Ee(b,{ref:s,style:{display:u.value?\"inherit\":\"none\"},class:e.contentClass},x(E)):null;if(e.to===\"parent\"){const m=[];if(!o.value){const A=Ee(\"span\",{ref:a,\"data-v-tippy\":\"\",style:{display:\"none\"}});m.push(A)}return g&&m.push(g),m}const y=t.default?t.default(E):[];if(!e.tag){const m=Ee(y[0],{ref:o,\"data-v-tippy\":\"\"});return g?[m,g]:m}const C=(typeof e.tag==\"string\",e.tag);return Ee(C,{ref:o,\"data-v-tippy\":\"\"},g?[y,g]:y)}}}),Ci=[\"a11y\",\"allowHTML\",\"arrow\",\"flip\",\"flipOnUpdate\",\"hideOnClick\",\"ignoreAttributes\",\"inertia\",\"interactive\",\"lazy\",\"multiple\",\"showOnInit\",\"touch\",\"touchHold\"];let Ot={};Object.keys(T.defaultProps).forEach(e=>{Ci.includes(e)?Ot[e]={type:Boolean,default:function(){return T.defaultProps[e]}}:Ot[e]={default:function(){return T.defaultProps[e]}}});const Ai=Qt({props:Ot,setup(e){const t=pe([]),{singleton:n}=wi(t,e);return{instances:t,singleton:n}},mounted(){var e;const n=this.$el.parentElement.querySelectorAll(\"[data-v-tippy]\");this.instances=Array.from(n).map(r=>r._tippy).filter(Boolean),(e=this.singleton)===null||e===void 0||e.setInstances(this.instances)},render(){let e=this.$slots.default?this.$slots.default():[];return Ee(()=>e)}}),Ei={mounted(e,t,n){const r=typeof t.value==\"string\"?{content:t.value}:t.value||{},o=Object.keys(t.modifiers||{}),a=o.find(u=>u!==\"arrow\"),s=o.findIndex(u=>u===\"arrow\")!==-1;a&&(r.placement=r.placement||a),s&&(r.arrow=r.arrow!==void 0?r.arrow:!0),n.props&&n.props.onTippyShow&&(r.onShow=function(...u){var f;return(f=n.props)===null||f===void 0?void 0:f.onTippyShow(...u)}),n.props&&n.props.onTippyShown&&(r.onShown=function(...u){var f;return(f=n.props)===null||f===void 0?void 0:f.onTippyShown(...u)}),n.props&&n.props.onTippyHidden&&(r.onHidden=function(...u){var f;return(f=n.props)===null||f===void 0?void 0:f.onTippyHidden(...u)}),n.props&&n.props.onTippyHide&&(r.onHide=function(...u){var f;return(f=n.props)===null||f===void 0?void 0:f.onTippyHide(...u)}),n.props&&n.props.onTippyMount&&(r.onMount=function(...u){var f;return(f=n.props)===null||f===void 0?void 0:f.onTippyMount(...u)}),e.getAttribute(\"title\")&&!r.content&&(r.content=e.getAttribute(\"title\"),e.removeAttribute(\"title\")),e.getAttribute(\"content\")&&!r.content&&(r.content=e.getAttribute(\"content\")),xn(e,r)},unmounted(e){e.$tippy?e.$tippy.destroy():e._tippy&&e._tippy.destroy()},updated(e,t){const n=typeof t.value==\"string\"?{content:t.value}:t.value||{};n.content||(n.content=null),e.getAttribute(\"title\")&&!n.content&&(n.content=e.getAttribute(\"title\"),e.removeAttribute(\"title\")),e.getAttribute(\"content\")&&!n.content&&(n.content=e.getAttribute(\"content\")),e.$tippy?e.$tippy.setProps(n||{}):e._tippy&&e._tippy.setProps(n||{})}},Di={install(e,t={}){T.setDefaultProps(t.defaultProps||{}),e.directive(t.directive||\"tippy\",Ei),e.component(t.component||\"tippy\",xi),e.component(t.componentSingleton||\"tippy-singleton\",Ai)}},Pi=T.setDefaultProps;Pi({ignoreAttributes:!0,plugins:[yi,gi,vi,li]});export{xi as T,Di as p};\n"
  },
  {
    "path": "public/build/assets/web-C9wt4HvN.css",
    "content": ".cy-panzoom{position:absolute;font-size:12px;color:#fff;font-family:arial,helvetica,sans-serif;line-height:1;color:#666;font-size:11px;z-index:99999;box-sizing:content-box}.cy-panzoom-zoom-button{cursor:pointer;padding:3px;text-align:center;position:absolute;border-radius:3px;width:10px;height:10px;left:16px;background:#fff;border:1px solid #999;margin-left:-1px;margin-top:-1px;z-index:1;box-sizing:content-box}.cy-panzoom-zoom-button:active,.cy-panzoom-slider-handle:active,.cy-panzoom-slider-handle.active{background:#ddd;box-sizing:content-box}.cy-panzoom-pan-button{position:absolute;z-index:1;height:16px;width:16px;box-sizing:content-box}.cy-panzoom-reset{top:55px;box-sizing:content-box}.cy-panzoom-zoom-in{top:80px;box-sizing:content-box}.cy-panzoom-zoom-out{top:197px;box-sizing:content-box}.cy-panzoom-pan-up{top:0;left:50%;margin-left:-5px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #666;box-sizing:content-box}.cy-panzoom-pan-down{bottom:0;left:50%;margin-left:-5px;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #666;box-sizing:content-box}.cy-panzoom-pan-left{top:50%;left:0;margin-top:-5px;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #666;box-sizing:content-box}.cy-panzoom-pan-right{top:50%;right:0;margin-top:-5px;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #666;box-sizing:content-box}.cy-panzoom-pan-indicator{position:absolute;left:0;top:0;width:8px;height:8px;background:#000;border-radius:8px;margin-left:-5px;margin-top:-5px;display:none;z-index:999;opacity:.6;box-sizing:content-box}.cy-panzoom-slider{position:absolute;top:97px;left:17px;height:100px;width:15px;box-sizing:content-box}.cy-panzoom-slider-background{position:absolute;top:0;width:2px;height:100px;left:5px;background:#fff;border-left:1px solid #999;border-right:1px solid #999;box-sizing:content-box}.cy-panzoom-slider-handle{position:absolute;width:16px;height:8px;background:#fff;border:1px solid #999;border-radius:2px;margin-left:-2px;z-index:999;line-height:8px;cursor:default;box-sizing:content-box}.cy-panzoom-slider-handle .icon{margin:0 4px;line-height:10px;box-sizing:content-box}.cy-panzoom-no-zoom-tick{position:absolute;background:#666;border:1px solid #fff;border-radius:2px;margin-left:-1px;width:8px;height:2px;left:3px;z-index:1;margin-top:3px;box-sizing:content-box}.cy-panzoom-panner{position:absolute;left:5px;top:5px;height:40px;width:40px;background:#fff;border:1px solid #999;border-radius:40px;margin-left:-1px;box-sizing:content-box}.cy-panzoom-panner-handle{left:0;top:0;outline:none;height:40px;width:40px;position:absolute;z-index:999;box-sizing:content-box}.cy-panzoom-zoom-only .cy-panzoom-slider,.cy-panzoom-zoom-only .cy-panzoom-panner{display:none}.cy-panzoom-zoom-only .cy-panzoom-reset{top:20px}.cy-panzoom-zoom-only .cy-panzoom-zoom-in{top:45px}.cy-panzoom-zoom-only .cy-panzoom-zoom-out{top:70px}.cy-panzoom{z-index:800;left:unset;right:3.7rem;top:.7rem}\n"
  },
  {
    "path": "public/build/assets/web-CwwBh20P.js",
    "content": "const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[\"assets/cytoscape-cose-bilkent-DRrwnnKV.js\",\"assets/_commonjsHelpers-Cpj98o6Y.js\",\"assets/cytoscape-panzoom-Del_Rz3u.js\",\"assets/jspdf.es.min-DI22nqbU.js\",\"assets/preload-helper-I4rgV-VL.js\"])))=>i.map(i=>d[i]);\nimport{f as ie,g as ue,G as de,l as ce,o as p,c as g,a as r,b as w,s as m,w as U,F as pe,i,e as ge}from\"./vendor-tiptap-D5xFoo7B.js\";import{v as ve}from\"./v-click-outside.umd-Cl-Y_A58.js\";import{_ as P}from\"./preload-helper-I4rgV-VL.js\";import{t as fe}from\"./tippy.esm-CnBRltuW.js\";import{c as Z}from\"./colours-Dh8441-n.js\";import\"./_commonjsHelpers-Cpj98o6Y.js\";const me={key:0,class:\"fixed bottom-4 left-1/2 -translate-x-1/2 z-700 flex items-center gap-1.5 bg-base-100/80 backdrop-blur rounded-xl shadow-lg px-2 py-1.5\"},we=[\"href\",\"title\"],be={key:1,class:\"relative\"},he=[\"title\"],ye={key:0,class:\"absolute bottom-full mb-2 left-0 flex flex-col gap-1 bg-base-100 shadow-lg p-2 rounded-lg z-10 min-w-max\",role:\"menu\"},xe=[\"innerHTML\"],ke=[\"innerHTML\"],Ce=[\"title\"],Ee=[\"title\"],_e={class:\"relative\"},De=[\"title\"],Le={key:0,class:\"absolute bottom-full mb-2 right-0 flex flex-col gap-1 bg-base-100 shadow-lg p-2 rounded-2xl z-10 min-w-max\",role:\"menu\"},Te=[\"innerHTML\"],Pe=[\"innerHTML\"],$e={key:1,class:\"w-full h-screen flex items-center justify-center text-4xl gap-2 absolute bg-base-100 transition-all duration-300 top-0 bottom-0 left-0 right-0 z-900\"},ze={key:0},Ie={key:1},Me={key:2},Be=ie({__name:\"Web\",props:{api:{},premium:{},creator:{}},setup(q){const $=q,k=i(!1),z=i(!1),I=i(!1),_=i(!1),b=i([]),a=i(null),C=i(null),v=i(null),M=i(),B=i(Array);let E=null;const h=i(!1),y=i(!1),F=i(null),D=i(null);ue(async()=>{await Q(),await S(),await X(),k.value=!0,document.addEventListener(\"submit\",V,!0),window.initTooltips(),$.premium||window.openDialog(\"web-premium\")}),de(()=>{a.value&&(a.value.destroy(),a.value=null),document.removeEventListener(\"submit\",V,!0)});const W=e=>{I.value=!0,Object.values(e.entities).forEach(t=>{R(t)}),e.nodes.forEach(t=>{G(t)}),F.value=e.i18n,D.value=e.urls,I.value=!1},R=e=>{if(b.value.find(o=>o.data.id==e.id))return;const t={group:\"nodes\",data:{id:e.id,name:e.name,image:e.image,link:e.link,tooltip:e.tooltip}};b.value.push(t),k.value&&a.value&&a.value.add(t)},G=e=>{let t={group:\"edges\",data:{id:e.id,source:e.source,target:e.target,name:e.text,colour:e.colour,attitude:e.attitude,shape:e.shape,url:e.url}};t.data.colour||(t.data.colour=\"#777777\"),t.data.attitude||(t.data.attitude=0),t.data.attitude=H(t.data.attitude),b.value.push(t)},H=e=>(e+100)/100*2+2,Q=async()=>{const{default:e}=await P(async()=>{const{default:f}=await import(\"./cytoscape.esm-BJ4qIETX.js\");return{default:f}},[]),{default:t}=await P(async()=>{const{default:f}=await import(\"./cytoscape-cose-bilkent-DRrwnnKV.js\").then(N=>N.c);return{default:f}},__vite__mapDeps([0,1])),{default:o}=await P(async()=>{const{default:f}=await import(\"./cytoscape-panzoom-Del_Rz3u.js\").then(N=>N.c);return{default:f}},__vite__mapDeps([2,1]));e.use(t),e.use(o);const n=M.value,s=n.parentNode,l=window.getComputedStyle(n),u=window.getComputedStyle(s);a.value=e({container:M.value,style:e.stylesheet().selector(\"node\").css({label:\"data(name)\",\"background-image\":\"data(image)\",height:80,width:80,\"background-fit\":\"cover\",\"border-color\":u.color,\"border-width\":3,color:l.color,\"text-wrap\":\"wrap\",\"text-margin-y\":\"-8px\",\"text-background-opacity\":1,\"text-background-color\":l.backgroundColor,\"text-border-color\":l.backgroundColor,\"text-border-width\":3,\"text-border-opacity\":1}).selector(\"edge\").css({\"line-color\":\"data(colour)\",\"curve-style\":\"bezier\",\"control-point-step-size\":40,\"target-arrow-shape\":\"data(shape)\",\"target-arrow-color\":\"data(colour)\",width:\"data(attitude)\",\"text-background-opacity\":1,color:l.color,\"text-background-color\":l.backgroundColor,\"text-border-color\":l.backgroundColor,\"text-border-width\":3,\"text-border-opacity\":1})});const d=.1,x=1.2;a.value.panzoom({maxZoom:x,minZoom:d}),a.value.minZoom(d),a.value.maxZoom(x)},S=async()=>{z.value=!0;const e=await axios.get($.api);z.value=!1;const t=e.data;W(t)},X=async()=>{a.value&&(_.value=!0,_.value=!0,a.value.add(b.value),a.value.nodes().forEach(function(e){e.connectedEdges().length==0&&j(e)}),L(),A(),await T())},j=e=>{e.hide()},L=()=>{a.value.elements().layout({name:\"cose-bilkent\",idealEdgeLength:130,nodeDimensionsIncludeLabels:!0}).run()},A=()=>{a.value.on(\"tap\",\"node\",function(e){const t=e.target;J(t)}),a.value.nodes().on(\"mouseover\",function(e){C.value=a.value.getElementById(e.target.id()),C.value.addClass(\"node-hover\")}),a.value.nodes().on(\"mouseout\",function(){C.value&&(C.value.removeClass(\"node-hover\"),C.value=null)}),a.value.on(\"tap\",\"edge\",function(e){let t=e.target.data().url;t&&window.openDialog(\"primary-dialog\",t)}),a.value.edges().on(\"mouseover\",function(e){v.value=a.value.getElementById(e.target.id()),v.value.style(\"label\",v.value._private.data.name),v.value.style(\"overlay-opacity\",.1)}),a.value.edges().on(\"mouseout\",function(){v.value&&(v.value.style(\"label\",\"\"),v.value.style(\"overlay-opacity\",0),v.value=null)})},T=async()=>{let e=!0;for(;e;)a.value.nodes(\":backgrounding\").length==0?e=!1:await sleep(200);_.value=!1},J=e=>{const t=a.value;if(!t)return;const o=t.container();if(!o)return;const n=e.renderedPosition(),s=o.getBoundingClientRect(),l=()=>{const u=s.left+n.x,d=s.top+n.y;return{x:u,y:d,left:u,top:d,right:u,bottom:d,width:0,height:0}};E&&(E.destroy(),E=null),E=fe(document.body,{trigger:\"manual\",getReferenceClientRect:l,theme:\"entity-tooltip\",placement:\"bottom\",hideOnClick:!0,allowHTML:!0,interactive:!0,content:\"Loading...\",appendTo:()=>document.body,onShow(u){const d=String(e.id());if(d in B.value){u.setContent(B.value[d]);return}axios.get(e.data().tooltip).then(x=>{const f=x.data;u.setContent(f),B.value[d]=f}).catch(x=>{u.setContent(`Failed loading tooltip. ${x}`)})}}),E.show()},V=async e=>{const t=e.target;if(t){e.preventDefault();try{const o=(t.method||\"POST\").toUpperCase(),n=t.action,s=new FormData(t),l=await axios({url:n,method:o,data:s,headers:{\"X-Requested-With\":\"XMLHttpRequest\"}});l.data.created?ee(l.data):Y(l.data),window.closeDialog&&window.closeDialog(\"primary-dialog\")}catch(o){o.response&&o.response.status===422&&o.response.data?.errors?K(t,o.response.data.errors):console.error(o)}}},K=(e,t)=>{const o=e.closest(\"article\");if(!o)return;o.querySelector(\".alert.alert-error.js-web-errors\")?.remove();const n=Object.values(t).flat(),s=document.createElement(\"div\");s.className=\"alert alert-error border-0 rounded-lg p-4 flex shadow-xs gap-2 items-center js-web-errors\";const l=document.createElement(\"ul\");n.forEach(u=>{const d=document.createElement(\"li\");d.textContent=u,l.appendChild(d)}),s.appendChild(l),o.prepend(s)},Y=async e=>{if(!a.value||!e||!e.id)return;const t=a.value.edges().filter(`[id = \"${e.id}\"]`);if(!t||t.length===0){console.warn(\"Updated unknown edge\",e.id);return}e.deleted&&t.remove();const o=H(e.attitude??0);if(t.data().target!=e.target.id){R(e.target),await T();const n={group:\"edges\",data:{...t.data(),name:e.text,target:e.target.id,colour:e.colour||\"#777777\",attitude:o}};t.remove(),a.value.add(n)}else t.data({...t.data(),name:e.text,colour:e.colour||\"#777777\",attitude:o})},ee=async e=>{if(!a.value||!e)return;if(R(e.target),e.source&&a.value.getElementById(e.source).length===0){await te();return}await T();const t=H(e.attitude??0),o={group:\"edges\",data:{id:e.id,source:e.source,target:e.target.id,name:e.text,colour:e.colour||\"#777777\",attitude:t,shape:e.shape||\"triangle\",url:e.url}};a.value.add(o);const n=a.value.getElementById(e.target.id);n.length>0&&n.hidden()&&n.show(),L()},te=async()=>{b.value=[],await S(),a.value.elements().remove(),a.value.add(b.value),a.value.nodes().forEach(function(e){e.connectedEdges().length==0&&j(e)}),L(),A(),await T()},oe=()=>{window.openDialog(\"primary-dialog\",D.value.create)},ae=()=>{window.openDialog(\"primary-dialog\",D.value.creator)},ne=()=>{a.value&&a.value.fit(void 0,30)},re=()=>{a.value&&L()},c=e=>F.value[e]||e,le=()=>{if(h.value=!1,!a.value)return;const e={full:!0,bg:Z(\"--b1\")},t=a.value.png(e),o=document.createElement(\"a\");o.href=t,o.download=`${c(\"campaign\")}-web-${Date.now()}.png`,document.body.appendChild(o),o.click(),document.body.removeChild(o)},se=async()=>{if(h.value=!1,!a.value)return;const{jsPDF:e}=await P(async()=>{const{jsPDF:l}=await import(\"./jspdf.es.min-DI22nqbU.js\").then(u=>u.j);return{jsPDF:l}},__vite__mapDeps([3,4])),t=a.value.png({full:!0,bg:Z(\"--b1\")}),o=new Image;o.src=t,await new Promise(l=>{o.onload=l});const n=o.width>o.height,s=new e({orientation:n?\"landscape\":\"portrait\",unit:\"px\",format:[o.width,o.height]});s.addImage(t,\"PNG\",0,0,o.width,o.height),s.save(`${c(\"campaign\")}-web-${Date.now()}.pdf`)};return(e,t)=>{const o=ce(\"click-outside\");return p(),g(pe,null,[k.value?(p(),g(\"div\",me,[k.value?(p(),g(\"a\",{key:0,href:D.value.back,title:c(\"back\"),class:\"btn2 btn-ghost\",tabindex:\"0\"},[...t[8]||(t[8]=[r(\"i\",{class:\"fa-regular fa-home\",\"aria-hidden\":\"true\"},null,-1)])],8,we)):w(\"\",!0),$.creator?(p(),g(\"div\",be,[r(\"button\",{onClick:t[0]||(t[0]=m(n=>y.value=!y.value,[\"prevent\"])),class:\"btn2 btn-primary\",title:c(\"create\")},[...t[9]||(t[9]=[r(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)])],8,he),y.value?U((p(),g(\"div\",ye,[r(\"a\",{href:\"#\",onClick:t[1]||(t[1]=m(n=>{y.value=!1,ae()},[\"prevent\"])),class:\"flex items-center gap-2 px-3 py-1.5 rounded hover:bg-base-200 cursor-pointer whitespace-nowrap\"},[t[10]||(t[10]=r(\"i\",{class:\"fa-regular fa-bolt w-5\",\"aria-hidden\":\"true\"},null,-1)),r(\"span\",{innerHTML:c(\"create\")},null,8,xe)]),r(\"a\",{href:\"#\",onClick:t[2]||(t[2]=m(n=>{y.value=!1,oe()},[\"prevent\"])),class:\"flex items-center gap-2 px-3 py-1.5 rounded hover:bg-base-200 cursor-pointer whitespace-nowrap\"},[t[11]||(t[11]=r(\"i\",{class:\"fa-regular fa-link w-5\",\"aria-hidden\":\"true\"},null,-1)),r(\"span\",{innerHTML:c(\"add\")},null,8,ke)])])),[[o,()=>y.value=!1]]):w(\"\",!0)])):w(\"\",!0),r(\"button\",{onClick:t[3]||(t[3]=m(n=>ne(),[\"prevent\"])),class:\"btn2 btn-ghost rounded-lg\",title:c(\"zoom-fit\")},[...t[12]||(t[12]=[r(\"i\",{class:\"fa-regular fa-arrows-maximize\",\"aria-hidden\":\"true\"},null,-1)])],8,Ce),r(\"button\",{onClick:t[4]||(t[4]=m(n=>re(),[\"prevent\"])),class:\"btn2 btn-ghost\",title:c(\"reset-layout\")},[...t[13]||(t[13]=[r(\"i\",{class:\"fa-regular fa-grid-round\",\"aria-hidden\":\"true\"},null,-1)])],8,Ee),t[17]||(t[17]=r(\"div\",{class:\"w-px h-6 bg-base-content/20\"},null,-1)),r(\"div\",_e,[r(\"button\",{onClick:t[5]||(t[5]=m(n=>h.value=!h.value,[\"prevent\"])),class:\"btn2 btn-ghost\",title:c(\"download\")},[...t[14]||(t[14]=[r(\"i\",{class:\"fa-regular fa-download\",\"aria-hidden\":\"true\"},null,-1)])],8,De),h.value?U((p(),g(\"div\",Le,[r(\"a\",{onClick:t[6]||(t[6]=m(n=>le(),[\"prevent\"])),class:\"flex items-center gap-2 px-3 py-1.5 rounded-xl hover:bg-base-200 cursor-pointer whitespace-nowrap\"},[t[15]||(t[15]=r(\"i\",{class:\"fa-regular fa-image w-5\",\"aria-hidden\":\"true\"},null,-1)),r(\"span\",{innerHTML:c(\"download-png\")},null,8,Te)]),r(\"a\",{onClick:t[7]||(t[7]=m(n=>se(),[\"prevent\"])),class:\"flex items-center gap-2 px-3 py-1.5 rounded-xl hover:bg-base-200 cursor-pointer whitespace-nowrap\"},[t[16]||(t[16]=r(\"i\",{class:\"fa-regular fa-file-pdf w-5\",\"aria-hidden\":\"true\"},null,-1)),r(\"span\",{innerHTML:c(\"download-pdf\")},null,8,Pe)])])),[[o,()=>h.value=!1]]):w(\"\",!0)])])):w(\"\",!0),k.value?w(\"\",!0):(p(),g(\"div\",$e,[t[18]||(t[18]=r(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},null,-1)),z.value?(p(),g(\"span\",ze,\"Loading\")):I.value?(p(),g(\"span\",Ie,\"Parsing web\")):_.value?(p(),g(\"span\",Me,\"Drawing web\")):w(\"\",!0)])),r(\"div\",{ref_key:\"cyContainer\",ref:M,class:\"min-h-screen text-base-content cy-map bg-base-100\"},null,512)],64)}}}),O=ge({});O.use(ve);O.component(\"connections-web\",Be);O.mount(\"#web\");\n"
  },
  {
    "path": "public/build/assets/whiteboards-CYwbHh4e.js",
    "content": "import{f as Le,g as ps,H as ao,B as mr,E as _e,I as vr,J as yr,K as br,G as _r,i as nt,o as et,c as ft,F as ye,b as mt,a as O,m as bn,s as It,r as un,n as Bt,h as ii,A as oe,k as Kt,q as Re,u as Gs,z as fn,w as si,p as wr,t as pe,l as oo,j as Ot,x as Ue,C as lo,e as ho}from\"./vendor-tiptap-D5xFoo7B.js\";import{c as Fs,h as co,r as uo,a as fo}from\"./colours-Dh8441-n.js\";import{_ as go}from\"./Browser.vue_vue_type_script_setup_true_lang-DjY0tfEc.js\";import{p as po}from\"./vue-tippy.esm-browser-B_r0Ygiv.js\";const mo=Math.PI/180;function vo(){return typeof window<\"u\"&&({}.toString.call(window)===\"[object Window]\"||{}.toString.call(window)===\"[object global]\")}const Me=typeof global<\"u\"?global:typeof window<\"u\"?window:typeof WorkerGlobalScope<\"u\"?self:{},Y={_global:Me,version:\"10.2.0\",isBrowser:vo(),isUnminified:/param/.test((function(r){}).toString()),dblClickWindow:400,getAngle(r){return Y.angleDeg?r*mo:r},enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,_renderBackend:\"web\",legacyTextRendering:!1,pixelRatio:typeof window<\"u\"&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging(){return Y.DD.isDragging},isTransforming(){var r,t;return(t=(r=Y.Transformer)===null||r===void 0?void 0:r.isTransforming())!==null&&t!==void 0?t:!1},isDragReady(){return!!Y.DD.node},releaseCanvasOnDestroy:!0,document:Me.document,_injectGlobal(r){typeof Me.Konva<\"u\"&&console.error(\"Several Konva instances detected. It is not recommended to use multiple Konva instances in the same environment.\"),Me.Konva=r}},Tt=r=>{Y[r.prototype.getClassName()]=r};Y._injectGlobal(Y);const yo=`Konva.js unsupported environment.\n\nLooks like you are trying to use Konva.js in Node.js environment. because \"document\" object is undefined.\n\nTo use Konva.js in Node.js environment, you need to use the \"canvas-backend\" or \"skia-backend\" module.\n\nbash: npm install canvas\njs: import \"konva/canvas-backend\";\n\nor\n\nbash: npm install skia-canvas\njs: import \"konva/skia-backend\";\n`,Hs=()=>{if(typeof document>\"u\")throw new Error(yo)};class Xt{constructor(t=[1,0,0,1,0,0]){this.dirty=!1,this.m=t&&t.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new Xt(this.m)}copyInto(t){t.m[0]=this.m[0],t.m[1]=this.m[1],t.m[2]=this.m[2],t.m[3]=this.m[3],t.m[4]=this.m[4],t.m[5]=this.m[5]}point(t){const e=this.m;return{x:e[0]*t.x+e[2]*t.y+e[4],y:e[1]*t.x+e[3]*t.y+e[5]}}translate(t,e){return this.m[4]+=this.m[0]*t+this.m[2]*e,this.m[5]+=this.m[1]*t+this.m[3]*e,this}scale(t,e){return this.m[0]*=t,this.m[1]*=t,this.m[2]*=e,this.m[3]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.m[0]*e+this.m[2]*n,s=this.m[1]*e+this.m[3]*n,a=this.m[0]*-n+this.m[2]*e,o=this.m[1]*-n+this.m[3]*e;return this.m[0]=i,this.m[1]=s,this.m[2]=a,this.m[3]=o,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(t,e){const n=this.m[0]+this.m[2]*e,i=this.m[1]+this.m[3]*e,s=this.m[2]+this.m[0]*t,a=this.m[3]+this.m[1]*t;return this.m[0]=n,this.m[1]=i,this.m[2]=s,this.m[3]=a,this}multiply(t){const e=this.m[0]*t.m[0]+this.m[2]*t.m[1],n=this.m[1]*t.m[0]+this.m[3]*t.m[1],i=this.m[0]*t.m[2]+this.m[2]*t.m[3],s=this.m[1]*t.m[2]+this.m[3]*t.m[3],a=this.m[0]*t.m[4]+this.m[2]*t.m[5]+this.m[4],o=this.m[1]*t.m[4]+this.m[3]*t.m[5]+this.m[5];return this.m[0]=e,this.m[1]=n,this.m[2]=i,this.m[3]=s,this.m[4]=a,this.m[5]=o,this}invert(){const t=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),e=this.m[3]*t,n=-this.m[1]*t,i=-this.m[2]*t,s=this.m[0]*t,a=t*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),o=t*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=e,this.m[1]=n,this.m[2]=i,this.m[3]=s,this.m[4]=a,this.m[5]=o,this}getMatrix(){return this.m}decompose(){const t=this.m[0],e=this.m[1],n=this.m[2],i=this.m[3],s=this.m[4],a=this.m[5],o=t*i-e*n,h={x:s,y:a,rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(t!=0||e!=0){const f=Math.sqrt(t*t+e*e);h.rotation=e>0?Math.acos(t/f):-Math.acos(t/f),h.scaleX=f,h.scaleY=o/f,h.skewX=(t*n+e*i)/o,h.skewY=0}else if(n!=0||i!=0){const f=Math.sqrt(n*n+i*i);h.rotation=Math.PI/2-(i>0?Math.acos(-n/f):-Math.acos(n/f)),h.scaleX=o/f,h.scaleY=f,h.skewX=0,h.skewY=(t*n+e*i)/o}return h.rotation=P._getRotation(h.rotation),h}}const bo=\"[object Array]\",_o=\"[object Number]\",wo=\"[object String]\",So=\"[object Boolean]\",xo=Math.PI/180,Co=180/Math.PI,an=\"#\",ko=\"\",To=\"0\",Po=\"Konva warning: \",Bs=\"Konva error: \",Eo=\"rgb(\",$i={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},Ao=/rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)/;let Yn=[],on=null;const Ro=typeof requestAnimationFrame<\"u\"&&requestAnimationFrame||function(r){setTimeout(r,16)},P={_isElement(r){return!!(r&&r.nodeType==1)},_isFunction(r){return!!(r&&r.constructor&&r.call&&r.apply)},_isPlainObject(r){return!!r&&r.constructor===Object},_isArray(r){return Object.prototype.toString.call(r)===bo},_isNumber(r){return Object.prototype.toString.call(r)===_o&&!isNaN(r)&&isFinite(r)},_isString(r){return Object.prototype.toString.call(r)===wo},_isBoolean(r){return Object.prototype.toString.call(r)===So},isObject(r){return r instanceof Object},isValidSelector(r){if(typeof r!=\"string\")return!1;const t=r[0];return t===\"#\"||t===\".\"||t===t.toUpperCase()},_sign(r){return r===0||r>0?1:-1},requestAnimFrame(r){Yn.push(r),Yn.length===1&&Ro(function(){const t=Yn;Yn=[],t.forEach(function(e){e()})})},createCanvasElement(){Hs();const r=document.createElement(\"canvas\");try{r.style=r.style||{}}catch{}return r},createImageElement(){return Hs(),document.createElement(\"img\")},_isInDocument(r){for(;r=r.parentNode;)if(r==document)return!0;return!1},_urlToImage(r,t){const e=P.createImageElement();e.onload=function(){t(e)},e.src=r},_rgbToHex(r,t,e){return((1<<24)+(r<<16)+(t<<8)+e).toString(16).slice(1)},_hexToRgb(r){r=r.replace(an,ko);const t=parseInt(r,16);return{r:t>>16&255,g:t>>8&255,b:t&255}},getRandomColor(){let r=(Math.random()*16777215<<0).toString(16);for(;r.length<6;)r=To+r;return an+r},isCanvasFarblingActive(){if(on!==null)return on;if(typeof document>\"u\")return on=!1,!1;const r=this.createCanvasElement();r.width=10,r.height=10;const t=r.getContext(\"2d\",{willReadFrequently:!0});t.clearRect(0,0,10,10),t.fillStyle=\"#282828\",t.fillRect(0,0,10,10);const e=t.getImageData(0,0,10,10).data;let n=!1;for(let i=0;i<100;i++)if(e[i*4]!==40||e[i*4+1]!==40||e[i*4+2]!==40||e[i*4+3]!==255){n=!0;break}return on=n,this.releaseCanvas(r),on},getHitColor(){const r=this.getRandomColor();return this.isCanvasFarblingActive()?this.getSnappedHexColor(r):r},getHitColorKey(r,t,e){return this.isCanvasFarblingActive()&&(r=Math.round(r/5)*5,t=Math.round(t/5)*5,e=Math.round(e/5)*5),an+this._rgbToHex(r,t,e)},getSnappedHexColor(r){const t=this._hexToRgb(r);return an+this._rgbToHex(Math.round(t.r/5)*5,Math.round(t.g/5)*5,Math.round(t.b/5)*5)},getRGB(r){let t;return r in $i?(t=$i[r],{r:t[0],g:t[1],b:t[2]}):r[0]===an?this._hexToRgb(r.substring(1)):r.substr(0,4)===Eo?(t=Ao.exec(r.replace(/ /g,\"\")),{r:parseInt(t[1],10),g:parseInt(t[2],10),b:parseInt(t[3],10)}):{r:0,g:0,b:0}},colorToRGBA(r){return r=r||\"black\",P._namedColorToRBA(r)||P._hex3ColorToRGBA(r)||P._hex4ColorToRGBA(r)||P._hex6ColorToRGBA(r)||P._hex8ColorToRGBA(r)||P._rgbColorToRGBA(r)||P._rgbaColorToRGBA(r)||P._hslColorToRGBA(r)},_namedColorToRBA(r){const t=$i[r.toLowerCase()];return t?{r:t[0],g:t[1],b:t[2],a:1}:null},_rgbColorToRGBA(r){if(r.indexOf(\"rgb(\")===0){r=r.match(/rgb\\(([^)]+)\\)/)[1];const t=r.split(/ *, */).map(Number);return{r:t[0],g:t[1],b:t[2],a:1}}},_rgbaColorToRGBA(r){if(r.indexOf(\"rgba(\")===0){r=r.match(/rgba\\(([^)]+)\\)/)[1];const t=r.split(/ *, */).map((e,n)=>e.slice(-1)===\"%\"?n===3?parseInt(e)/100:parseInt(e)/100*255:Number(e));return{r:t[0],g:t[1],b:t[2],a:t[3]}}},_hex8ColorToRGBA(r){if(r[0]===\"#\"&&r.length===9)return{r:parseInt(r.slice(1,3),16),g:parseInt(r.slice(3,5),16),b:parseInt(r.slice(5,7),16),a:parseInt(r.slice(7,9),16)/255}},_hex6ColorToRGBA(r){if(r[0]===\"#\"&&r.length===7)return{r:parseInt(r.slice(1,3),16),g:parseInt(r.slice(3,5),16),b:parseInt(r.slice(5,7),16),a:1}},_hex4ColorToRGBA(r){if(r[0]===\"#\"&&r.length===5)return{r:parseInt(r[1]+r[1],16),g:parseInt(r[2]+r[2],16),b:parseInt(r[3]+r[3],16),a:parseInt(r[4]+r[4],16)/255}},_hex3ColorToRGBA(r){if(r[0]===\"#\"&&r.length===4)return{r:parseInt(r[1]+r[1],16),g:parseInt(r[2]+r[2],16),b:parseInt(r[3]+r[3],16),a:1}},_hslColorToRGBA(r){if(/hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.test(r)){const[t,...e]=/hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(r),n=Number(e[0])/360,i=Number(e[1])/100,s=Number(e[2])/100;let a,o,h;if(i===0)return h=s*255,{r:Math.round(h),g:Math.round(h),b:Math.round(h),a:1};s<.5?a=s*(1+i):a=s+i-s*i;const f=2*s-a,u=[0,0,0];for(let p=0;p<3;p++)o=n+1/3*-(p-1),o<0&&o++,o>1&&o--,6*o<1?h=f+(a-f)*6*o:2*o<1?h=a:3*o<2?h=f+(a-f)*(2/3-o)*6:h=f,u[p]=h*255;return{r:Math.round(u[0]),g:Math.round(u[1]),b:Math.round(u[2]),a:1}}},haveIntersection(r,t){return!(t.x>r.x+r.width||t.x+t.width<r.x||t.y>r.y+r.height||t.y+t.height<r.y)},cloneObject(r){const t={};for(const e in r)this._isPlainObject(r[e])?t[e]=this.cloneObject(r[e]):this._isArray(r[e])?t[e]=this.cloneArray(r[e]):t[e]=r[e];return t},cloneArray(r){return r.slice(0)},degToRad(r){return r*xo},radToDeg(r){return r*Co},_degToRad(r){return P.warn(\"Util._degToRad is removed. Please use public Util.degToRad instead.\"),P.degToRad(r)},_radToDeg(r){return P.warn(\"Util._radToDeg is removed. Please use public Util.radToDeg instead.\"),P.radToDeg(r)},_getRotation(r){return Y.angleDeg?P.radToDeg(r):r},_capitalize(r){return r.charAt(0).toUpperCase()+r.slice(1)},throw(r){throw new Error(Bs+r)},error(r){console.error(Bs+r)},warn(r){Y.showWarnings&&console.warn(Po+r)},each(r,t){for(const e in r)t(e,r[e])},_inRange(r,t,e){return t<=r&&r<e},_getProjectionToSegment(r,t,e,n,i,s){let a,o,h;const f=(r-e)*(r-e)+(t-n)*(t-n);if(f==0)a=r,o=t,h=(i-e)*(i-e)+(s-n)*(s-n);else{const u=((i-r)*(e-r)+(s-t)*(n-t))/f;u<0?(a=r,o=t,h=(r-i)*(r-i)+(t-s)*(t-s)):u>1?(a=e,o=n,h=(e-i)*(e-i)+(n-s)*(n-s)):(a=r+u*(e-r),o=t+u*(n-t),h=(a-i)*(a-i)+(o-s)*(o-s))}return[a,o,h]},_getProjectionToLine(r,t,e){const n=P.cloneObject(r);let i=Number.MAX_VALUE;return t.forEach(function(s,a){if(!e&&a===t.length-1)return;const o=t[(a+1)%t.length],h=P._getProjectionToSegment(s.x,s.y,o.x,o.y,r.x,r.y),f=h[0],u=h[1],p=h[2];p<i&&(n.x=f,n.y=u,i=p)}),n},_prepareArrayForTween(r,t,e){const n=[],i=[];if(r.length>t.length){const a=t;t=r,r=a}for(let a=0;a<r.length;a+=2)n.push({x:r[a],y:r[a+1]});for(let a=0;a<t.length;a+=2)i.push({x:t[a],y:t[a+1]});const s=[];return i.forEach(function(a){const o=P._getProjectionToLine(a,n,e);s.push(o.x),s.push(o.y)}),s},_prepareToStringify(r){let t;r.visitedByCircularReferenceRemoval=!0;for(const e in r)if(r.hasOwnProperty(e)&&r[e]&&typeof r[e]==\"object\"){if(t=Object.getOwnPropertyDescriptor(r,e),r[e].visitedByCircularReferenceRemoval||P._isElement(r[e]))if(t.configurable)delete r[e];else return null;else if(P._prepareToStringify(r[e])===null)if(t.configurable)delete r[e];else return null}return delete r.visitedByCircularReferenceRemoval,r},_assign(r,t){for(const e in t)r[e]=t[e];return r},_getFirstPointerId(r){return r.touches?r.changedTouches[0].identifier:r.pointerId||999},releaseCanvas(...r){Y.releaseCanvasOnDestroy&&r.forEach(t=>{t.width=0,t.height=0})},drawRoundedRectPath(r,t,e,n){let i=t<0?t:0,s=e<0?e:0;t=Math.abs(t),e=Math.abs(e);let a=0,o=0,h=0,f=0;typeof n==\"number\"?a=o=h=f=Math.min(n,t/2,e/2):(a=Math.min(n[0]||0,t/2,e/2),o=Math.min(n[1]||0,t/2,e/2),f=Math.min(n[2]||0,t/2,e/2),h=Math.min(n[3]||0,t/2,e/2)),r.moveTo(i+a,s),r.lineTo(i+t-o,s),r.arc(i+t-o,s+o,o,Math.PI*3/2,0,!1),r.lineTo(i+t,s+e-f),r.arc(i+t-f,s+e-f,f,0,Math.PI/2,!1),r.lineTo(i+h,s+e),r.arc(i+h,s+e-h,h,Math.PI/2,Math.PI,!1),r.lineTo(i,s+a),r.arc(i+a,s+a,a,Math.PI,Math.PI*3/2,!1)},drawRoundedPolygonPath(r,t,e,n,i){n=Math.abs(n);for(let s=0;s<e;s++){const a=t[(s-1+e)%e],o=t[s],h=t[(s+1)%e],f={x:o.x-a.x,y:o.y-a.y},u={x:h.x-o.x,y:h.y-o.y},p=Math.hypot(f.x,f.y),g=Math.hypot(u.x,u.y);let _;typeof i==\"number\"?_=i:_=s<i.length?i[s]:0,_=n*Math.cos(Math.PI/e)*Math.min(1,_/n*2);const k={x:f.x/p,y:f.y/p},w={x:u.x/g,y:u.y/g},C={x:o.x-k.x*_,y:o.y-k.y*_},T={x:o.x+w.x*_,y:o.y+w.y*_};s===0?r.moveTo(C.x,C.y):r.lineTo(C.x,C.y),r.arcTo(o.x,o.y,T.x,T.y,_)}}};function Mo(r){const t=[],e=r.length,n=P;for(let i=0;i<e;i++){let s=r[i];n._isNumber(s)?s=Math.round(s*1e3)/1e3:n._isString(s)||(s=s+\"\"),t.push(s)}return t}const zs=\",\",Lo=\"(\",Oo=\")\",Io=\"([\",Do=\"])\",No=\";\",Go=\"()\",Fo=\"=\",js=[\"arc\",\"arcTo\",\"beginPath\",\"bezierCurveTo\",\"clearRect\",\"clip\",\"closePath\",\"createLinearGradient\",\"createPattern\",\"createRadialGradient\",\"drawImage\",\"ellipse\",\"fill\",\"fillText\",\"getImageData\",\"createImageData\",\"lineTo\",\"moveTo\",\"putImageData\",\"quadraticCurveTo\",\"rect\",\"roundRect\",\"restore\",\"rotate\",\"save\",\"scale\",\"setLineDash\",\"setTransform\",\"stroke\",\"strokeText\",\"transform\",\"translate\"],Ho=[\"fillStyle\",\"strokeStyle\",\"shadowColor\",\"shadowBlur\",\"shadowOffsetX\",\"shadowOffsetY\",\"letterSpacing\",\"lineCap\",\"lineDashOffset\",\"lineJoin\",\"lineWidth\",\"miterLimit\",\"direction\",\"font\",\"textAlign\",\"textBaseline\",\"globalAlpha\",\"globalCompositeOperation\",\"imageSmoothingEnabled\",\"filter\"],Bo=100;let qn=null;function Ws(){if(qn!==null)return qn;try{const t=P.createCanvasElement().getContext(\"2d\");return t?!!t&&\"filter\"in t:(qn=!1,!1)}catch{return qn=!1,!1}}class ci{constructor(t){this.canvas=t,Y.enableTrace&&(this.traceArr=[],this._enableTrace())}fillShape(t){t.fillEnabled()&&this._fill(t)}_fill(t){}strokeShape(t){t.hasStroke()&&this._stroke(t)}_stroke(t){}fillStrokeShape(t){t.attrs.fillAfterStrokeEnabled?(this.strokeShape(t),this.fillShape(t)):(this.fillShape(t),this.strokeShape(t))}getTrace(t,e){let n=this.traceArr,i=n.length,s=\"\",a,o,h,f;for(a=0;a<i;a++)o=n[a],h=o.method,h?(f=o.args,s+=h,t?s+=Go:P._isArray(f[0])?s+=Io+f.join(zs)+Do:(e&&(f=f.map(u=>typeof u==\"number\"?Math.floor(u):u)),s+=Lo+f.join(zs)+Oo)):(s+=o.property,t||(s+=Fo+o.val)),s+=No;return s}clearTrace(){this.traceArr=[]}_trace(t){let e=this.traceArr,n;e.push(t),n=e.length,n>=Bo&&e.shift()}reset(){const t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){const e=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,e.getWidth()/e.pixelRatio,e.getHeight()/e.pixelRatio)}_applyLineCap(t){const e=t.attrs.lineCap;e&&this.setAttr(\"lineCap\",e)}_applyOpacity(t){const e=t.getAbsoluteOpacity();e!==1&&this.setAttr(\"globalAlpha\",e)}_applyLineJoin(t){const e=t.attrs.lineJoin;e&&this.setAttr(\"lineJoin\",e)}_applyMiterLimit(t){const e=t.attrs.miterLimit;e!=null&&this.setAttr(\"miterLimit\",e)}setAttr(t,e){this._context[t]=e}arc(t,e,n,i,s,a){this._context.arc(t,e,n,i,s,a)}arcTo(t,e,n,i,s){this._context.arcTo(t,e,n,i,s)}beginPath(){this._context.beginPath()}bezierCurveTo(t,e,n,i,s,a){this._context.bezierCurveTo(t,e,n,i,s,a)}clearRect(t,e,n,i){this._context.clearRect(t,e,n,i)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,e){const n=arguments;if(n.length===2)return this._context.createImageData(t,e);if(n.length===1)return this._context.createImageData(t)}createLinearGradient(t,e,n,i){return this._context.createLinearGradient(t,e,n,i)}createPattern(t,e){return this._context.createPattern(t,e)}createRadialGradient(t,e,n,i,s,a){return this._context.createRadialGradient(t,e,n,i,s,a)}drawImage(t,e,n,i,s,a,o,h,f){const u=arguments,p=this._context;u.length===3?p.drawImage(t,e,n):u.length===5?p.drawImage(t,e,n,i,s):u.length===9&&p.drawImage(t,e,n,i,s,a,o,h,f)}ellipse(t,e,n,i,s,a,o,h){this._context.ellipse(t,e,n,i,s,a,o,h)}isPointInPath(t,e,n,i){return n?this._context.isPointInPath(n,t,e,i):this._context.isPointInPath(t,e,i)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,e,n,i){this._context.fillRect(t,e,n,i)}strokeRect(t,e,n,i){this._context.strokeRect(t,e,n,i)}fillText(t,e,n,i){i?this._context.fillText(t,e,n,i):this._context.fillText(t,e,n)}measureText(t){return this._context.measureText(t)}getImageData(t,e,n,i){return this._context.getImageData(t,e,n,i)}lineTo(t,e){this._context.lineTo(t,e)}moveTo(t,e){this._context.moveTo(t,e)}rect(t,e,n,i){this._context.rect(t,e,n,i)}roundRect(t,e,n,i,s){this._context.roundRect(t,e,n,i,s)}putImageData(t,e,n){this._context.putImageData(t,e,n)}quadraticCurveTo(t,e,n,i){this._context.quadraticCurveTo(t,e,n,i)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,e){this._context.scale(t,e)}setLineDash(t){this._context.setLineDash?this._context.setLineDash(t):\"mozDash\"in this._context?this._context.mozDash=t:\"webkitLineDash\"in this._context&&(this._context.webkitLineDash=t)}getLineDash(){return this._context.getLineDash()}setTransform(t,e,n,i,s,a){this._context.setTransform(t,e,n,i,s,a)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,e,n,i){this._context.strokeText(t,e,n,i)}transform(t,e,n,i,s,a){this._context.transform(t,e,n,i,s,a)}translate(t,e){this._context.translate(t,e)}_enableTrace(){let t=this,e=js.length,n=this.setAttr,i,s;const a=function(o){let h=t[o],f;t[o]=function(){return s=Mo(Array.prototype.slice.call(arguments,0)),f=h.apply(t,arguments),t._trace({method:o,args:s}),f}};for(i=0;i<e;i++)a(js[i]);t.setAttr=function(){n.apply(t,arguments);const o=arguments[0];let h=arguments[1];(o===\"shadowOffsetX\"||o===\"shadowOffsetY\"||o===\"shadowBlur\")&&(h=h/this.canvas.getPixelRatio()),t._trace({property:o,val:h})}}_applyGlobalCompositeOperation(t){const e=t.attrs.globalCompositeOperation;!e||e===\"source-over\"||this.setAttr(\"globalCompositeOperation\",e)}}Ho.forEach(function(r){Object.defineProperty(ci.prototype,r,{get(){return this._context[r]},set(t){this._context[r]=t}})});class zo extends ci{constructor(t,{willReadFrequently:e=!1}={}){super(t),this._context=t._canvas.getContext(\"2d\",{willReadFrequently:e})}_fillColor(t){const e=t.fill();this.setAttr(\"fillStyle\",e),t._fillFunc(this)}_fillPattern(t){this.setAttr(\"fillStyle\",t._getFillPattern()),t._fillFunc(this)}_fillLinearGradient(t){const e=t._getLinearGradient();e&&(this.setAttr(\"fillStyle\",e),t._fillFunc(this))}_fillRadialGradient(t){const e=t._getRadialGradient();e&&(this.setAttr(\"fillStyle\",e),t._fillFunc(this))}_fill(t){const e=t.fill(),n=t.getFillPriority();if(e&&n===\"color\"){this._fillColor(t);return}const i=t.getFillPatternImage();if(i&&n===\"pattern\"){this._fillPattern(t);return}const s=t.getFillLinearGradientColorStops();if(s&&n===\"linear-gradient\"){this._fillLinearGradient(t);return}const a=t.getFillRadialGradientColorStops();if(a&&n===\"radial-gradient\"){this._fillRadialGradient(t);return}e?this._fillColor(t):i?this._fillPattern(t):s?this._fillLinearGradient(t):a&&this._fillRadialGradient(t)}_strokeLinearGradient(t){const e=t.getStrokeLinearGradientStartPoint(),n=t.getStrokeLinearGradientEndPoint(),i=t.getStrokeLinearGradientColorStops(),s=this.createLinearGradient(e.x,e.y,n.x,n.y);if(i){for(let a=0;a<i.length;a+=2)s.addColorStop(i[a],i[a+1]);this.setAttr(\"strokeStyle\",s)}}_stroke(t){const e=t.dash(),n=t.getStrokeScaleEnabled();if(t.hasStroke()){if(!n){this.save();const s=this.getCanvas().getPixelRatio();this.setTransform(s,0,0,s,0,0)}this._applyLineCap(t),e&&t.dashEnabled()&&(this.setLineDash(e),this.setAttr(\"lineDashOffset\",t.dashOffset())),this.setAttr(\"lineWidth\",t.strokeWidth()),t.getShadowForStrokeEnabled()||this.setAttr(\"shadowColor\",\"rgba(0,0,0,0)\"),t.getStrokeLinearGradientColorStops()?this._strokeLinearGradient(t):this.setAttr(\"strokeStyle\",t.stroke()),t._strokeFunc(this),n||this.restore()}}_applyShadow(t){var e,n,i;const s=(e=t.getShadowRGBA())!==null&&e!==void 0?e:\"black\",a=(n=t.getShadowBlur())!==null&&n!==void 0?n:5,o=(i=t.getShadowOffset())!==null&&i!==void 0?i:{x:0,y:0},h=t.getAbsoluteScale(),f=this.canvas.getPixelRatio(),u=h.x*f,p=h.y*f;this.setAttr(\"shadowColor\",s),this.setAttr(\"shadowBlur\",a*Math.min(Math.abs(u),Math.abs(p))),this.setAttr(\"shadowOffsetX\",o.x*u),this.setAttr(\"shadowOffsetY\",o.y*p)}}class jo extends ci{constructor(t){super(t),this._context=t._canvas.getContext(\"2d\",{willReadFrequently:!0})}_fill(t){this.save(),this.setAttr(\"fillStyle\",t.colorKey),t._fillFuncHit(this),this.restore()}strokeShape(t){t.hasHitStroke()&&this._stroke(t)}_stroke(t){if(t.hasHitStroke()){const e=t.getStrokeScaleEnabled();if(!e){this.save();const s=this.getCanvas().getPixelRatio();this.setTransform(s,0,0,s,0,0)}this._applyLineCap(t);const n=t.hitStrokeWidth(),i=n===\"auto\"?t.strokeWidth():n;this.setAttr(\"lineWidth\",i),this.setAttr(\"strokeStyle\",t.colorKey),t._strokeFuncHit(this),e||this.restore()}}}let $n;function Wo(){if($n)return $n;const r=P.createCanvasElement(),t=r.getContext(\"2d\");return $n=(function(){const e=Y._global.devicePixelRatio||1,n=t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return e/n})(),P.releaseCanvas(r),$n}class ms{constructor(t){this.pixelRatio=1,this.width=0,this.height=0,this.isCache=!1;const n=(t||{}).pixelRatio||Y.pixelRatio||Wo();this.pixelRatio=n,this._canvas=P.createCanvasElement(),this._canvas.style.padding=\"0\",this._canvas.style.margin=\"0\",this._canvas.style.border=\"0\",this._canvas.style.background=\"transparent\",this._canvas.style.position=\"absolute\",this._canvas.style.top=\"0\",this._canvas.style.left=\"0\"}getContext(){return this.context}getPixelRatio(){return this.pixelRatio}setPixelRatio(t){const e=this.pixelRatio;this.pixelRatio=t,this.setSize(this.getWidth()/e,this.getHeight()/e)}setWidth(t){this.width=this._canvas.width=t*this.pixelRatio,this._canvas.style.width=t+\"px\";const e=this.pixelRatio;this.getContext()._context.scale(e,e)}setHeight(t){this.height=this._canvas.height=t*this.pixelRatio,this._canvas.style.height=t+\"px\";const e=this.pixelRatio;this.getContext()._context.scale(e,e)}getWidth(){return this.width}getHeight(){return this.height}setSize(t,e){this.setWidth(t||0),this.setHeight(e||0)}toDataURL(t,e){try{return this._canvas.toDataURL(t,e)}catch{try{return this._canvas.toDataURL()}catch(i){return P.error(\"Unable to get data URL. \"+i.message+\" For more info read https://konvajs.org/docs/posts/Tainted_Canvas.html.\"),\"\"}}}}class be extends ms{constructor(t={width:0,height:0,willReadFrequently:!1}){super(t),this.context=new zo(this,{willReadFrequently:t.willReadFrequently}),this.setSize(t.width,t.height)}}class vs extends ms{constructor(t={width:0,height:0}){super(t),this.hitCanvas=!0,this.context=new jo(this),this.setSize(t.width,t.height)}}const vt={get isDragging(){let r=!1;return vt._dragElements.forEach(t=>{t.dragStatus===\"dragging\"&&(r=!0)}),r},justDragged:!1,get node(){let r;return vt._dragElements.forEach(t=>{r=t.node}),r},_dragElements:new Map,_drag(r){const t=[];vt._dragElements.forEach((e,n)=>{const{node:i}=e,s=i.getStage();s.setPointersPositions(r),e.pointerId===void 0&&(e.pointerId=P._getFirstPointerId(r));const a=s._changedPointerPositions.find(o=>o.id===e.pointerId);if(a){if(e.dragStatus!==\"dragging\"){const o=i.dragDistance();if(Math.max(Math.abs(a.x-e.startPointerPos.x),Math.abs(a.y-e.startPointerPos.y))<o||(i.startDrag({evt:r}),!i.isDragging()))return}i._setDragPosition(r,e),t.push(i)}}),t.forEach(e=>{e.fire(\"dragmove\",{type:\"dragmove\",target:e,evt:r},!0)})},_endDragBefore(r){const t=[];vt._dragElements.forEach(e=>{const{node:n}=e,i=n.getStage();if(r&&i.setPointersPositions(r),!i._changedPointerPositions.find(o=>o.id===e.pointerId))return;(e.dragStatus===\"dragging\"||e.dragStatus===\"stopped\")&&(vt.justDragged=!0,Y._mouseListenClick=!1,Y._touchListenClick=!1,Y._pointerListenClick=!1,e.dragStatus=\"stopped\");const a=e.node.getLayer()||e.node instanceof Y.Stage&&e.node;a&&t.indexOf(a)===-1&&t.push(a)}),t.forEach(e=>{e.draw()})},_endDragAfter(r){vt._dragElements.forEach((t,e)=>{t.dragStatus===\"stopped\"&&t.node.fire(\"dragend\",{type:\"dragend\",target:t.node,evt:r},!0),t.dragStatus!==\"dragging\"&&vt._dragElements.delete(e)})}};Y.isBrowser&&(window.addEventListener(\"mouseup\",vt._endDragBefore,!0),window.addEventListener(\"touchend\",vt._endDragBefore,!0),window.addEventListener(\"touchcancel\",vt._endDragBefore,!0),window.addEventListener(\"mousemove\",vt._drag),window.addEventListener(\"touchmove\",vt._drag),window.addEventListener(\"mouseup\",vt._endDragAfter,!1),window.addEventListener(\"touchend\",vt._endDragAfter,!1),window.addEventListener(\"touchcancel\",vt._endDragAfter,!1));function we(r){return P._isString(r)?'\"'+r+'\"':Object.prototype.toString.call(r)===\"[object Number]\"||P._isBoolean(r)?r:Object.prototype.toString.call(r)}function Sr(r){return r>255?255:r<0?0:Math.round(r)}function W(){if(Y.isUnminified)return function(r,t){return P._isNumber(r)||P.warn(we(r)+' is a not valid value for \"'+t+'\" attribute. The value should be a number.'),r}}function di(r){if(Y.isUnminified)return function(t,e){let n=P._isNumber(t),i=P._isArray(t)&&t.length==r;return!n&&!i&&P.warn(we(t)+' is a not valid value for \"'+e+'\" attribute. The value should be a number or Array<number>('+r+\")\"),t}}function ys(){if(Y.isUnminified)return function(r,t){return P._isNumber(r)||r===\"auto\"||P.warn(we(r)+' is a not valid value for \"'+t+'\" attribute. The value should be a number or \"auto\".'),r}}function Oe(){if(Y.isUnminified)return function(r,t){return P._isString(r)||P.warn(we(r)+' is a not valid value for \"'+t+'\" attribute. The value should be a string.'),r}}function xr(){if(Y.isUnminified)return function(r,t){const e=P._isString(r),n=Object.prototype.toString.call(r)===\"[object CanvasGradient]\"||r&&r.addColorStop;return e||n||P.warn(we(r)+' is a not valid value for \"'+t+'\" attribute. The value should be a string or a native gradient.'),r}}function Uo(){if(Y.isUnminified)return function(r,t){const e=Int8Array?Object.getPrototypeOf(Int8Array):null;return e&&r instanceof e||(P._isArray(r)?r.forEach(function(n){P._isNumber(n)||P.warn('\"'+t+'\" attribute has non numeric element '+n+\". Make sure that all elements are numbers.\")}):P.warn(we(r)+' is a not valid value for \"'+t+'\" attribute. The value should be a array of numbers.')),r}}function ee(){if(Y.isUnminified)return function(r,t){return r===!0||r===!1||P.warn(we(r)+' is a not valid value for \"'+t+'\" attribute. The value should be a boolean.'),r}}function Xo(r){if(Y.isUnminified)return function(t,e){return t==null||P.isObject(t)||P.warn(we(t)+' is a not valid value for \"'+e+'\" attribute. The value should be an object with properties '+r),t}}const ln=\"get\",hn=\"set\",S={addGetterSetter(r,t,e,n,i){S.addGetter(r,t,e),S.addSetter(r,t,n,i),S.addOverloadedGetterSetter(r,t)},addGetter(r,t,e){const n=ln+P._capitalize(t);r.prototype[n]=r.prototype[n]||function(){const i=this.attrs[t];return i===void 0?e:i}},addSetter(r,t,e,n){const i=hn+P._capitalize(t);r.prototype[i]||S.overWriteSetter(r,t,e,n)},overWriteSetter(r,t,e,n){const i=hn+P._capitalize(t);r.prototype[i]=function(s){return e&&s!==void 0&&s!==null&&(s=e.call(this,s,t)),this._setAttr(t,s),n&&n.call(this),this}},addComponentsGetterSetter(r,t,e,n,i){const s=e.length,a=P._capitalize,o=ln+a(t),h=hn+a(t);r.prototype[o]=function(){const u={};for(let p=0;p<s;p++){const g=e[p];u[g]=this.getAttr(t+a(g))}return u};const f=Xo(e);r.prototype[h]=function(u){const p=this.attrs[t];n&&(u=n.call(this,u,t)),f&&f.call(this,u,t);for(const g in u)u.hasOwnProperty(g)&&this._setAttr(t+a(g),u[g]);return u||e.forEach(g=>{this._setAttr(t+a(g),void 0)}),this._fireChangeEvent(t,p,u),i&&i.call(this),this},S.addOverloadedGetterSetter(r,t)},addOverloadedGetterSetter(r,t){const e=P._capitalize(t),n=hn+e,i=ln+e;r.prototype[t]=function(){return arguments.length?(this[n](arguments[0]),this):this[i]()}},addDeprecatedGetterSetter(r,t,e,n){P.error(\"Adding deprecated \"+t);const i=ln+P._capitalize(t),s=t+\" property is deprecated and will be removed soon. Look at Konva change log for more information.\";r.prototype[i]=function(){P.error(s);const a=this.attrs[t];return a===void 0?e:a},S.addSetter(r,t,n,function(){P.error(s)}),S.addOverloadedGetterSetter(r,t)},backCompat(r,t){P.each(t,function(e,n){const i=r.prototype[n],s=ln+P._capitalize(e),a=hn+P._capitalize(e);function o(){i.apply(this,arguments),P.error('\"'+e+'\" method is deprecated and will be removed soon. Use \"\"'+n+'\" instead.')}r.prototype[e]=o,r.prototype[s]=o,r.prototype[a]=o})},afterSetFilter(){this._filterUpToDate=!1}};function Yo(r){const t=/(\\w+)\\(([^)]+)\\)/g;let e;for(;(e=t.exec(r))!==null;){const[,n,i]=e;switch(n){case\"blur\":{const s=parseFloat(i.replace(\"px\",\"\"));return function(a){this.blurRadius(s*.5);const o=Y.Filters;o&&o.Blur&&o.Blur.call(this,a)}}case\"brightness\":{const s=i.includes(\"%\")?parseFloat(i)/100:parseFloat(i);return function(a){this.brightness(s);const o=Y.Filters;o&&o.Brightness&&o.Brightness.call(this,a)}}case\"contrast\":{const s=parseFloat(i);return function(a){const o=100*(Math.sqrt(s)-1);this.contrast(o);const h=Y.Filters;h&&h.Contrast&&h.Contrast.call(this,a)}}case\"grayscale\":return function(s){const a=Y.Filters;a&&a.Grayscale&&a.Grayscale.call(this,s)};case\"sepia\":return function(s){const a=Y.Filters;a&&a.Sepia&&a.Sepia.call(this,s)};case\"invert\":return function(s){const a=Y.Filters;a&&a.Invert&&a.Invert.call(this,s)};default:P.warn(`CSS filter \"${n}\" is not supported in fallback mode. Consider using function filters for better compatibility.`);break}}return()=>{}}const ri=\"absoluteOpacity\",Us=\"allEventListeners\",le=\"absoluteTransform\",Xs=\"absoluteScale\",Ae=\"canvas\",qo=\"Change\",$o=\"children\",Vo=\"konva\",ss=\"listening\",Ko=\"mouseenter\",Jo=\"mouseleave\",Qo=\"pointerenter\",Zo=\"pointerleave\",tl=\"touchenter\",el=\"touchleave\",Ys=\"set\",qs=\"Shape\",ai=\" \",$s=\"stage\",me=\"transform\",nl=\"Stage\",rs=\"visible\",il=[\"xChange.konva\",\"yChange.konva\",\"scaleXChange.konva\",\"scaleYChange.konva\",\"skewXChange.konva\",\"skewYChange.konva\",\"rotationChange.konva\",\"offsetXChange.konva\",\"offsetYChange.konva\",\"transformsEnabledChange.konva\"].join(ai);let sl=1;class z{constructor(t){this._id=sl++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){(t===me||t===le)&&this._cache.get(t)?this._cache.get(t).dirty=!0:t?this._cache.delete(t):this._cache.clear()}_getCache(t,e){let n=this._cache.get(t);return(n===void 0||(t===me||t===le)&&n.dirty===!0)&&(n=e.call(this),this._cache.set(t,n)),n}_calculate(t,e,n){if(!this._attachedDepsListeners.get(t)){const i=e.map(s=>s+\"Change.konva\").join(ai);this.on(i,()=>{this._clearCache(t)}),this._attachedDepsListeners.set(t,!0)}return this._getCache(t,n)}_getCanvasCache(){return this._cache.get(Ae)}_clearSelfAndDescendantCache(t){this._clearCache(t),t===le&&this.fire(\"absoluteTransformChange\")}clearCache(){if(this._cache.has(Ae)){const{scene:t,filter:e,hit:n}=this._cache.get(Ae);P.releaseCanvas(t._canvas,e._canvas,n._canvas),this._cache.delete(Ae)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){const e=t||{};let n={};(e.x===void 0||e.y===void 0||e.width===void 0||e.height===void 0)&&(n=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}));let i=Math.ceil(e.width||n.width),s=Math.ceil(e.height||n.height),a=e.pixelRatio,o=e.x===void 0?Math.floor(n.x):e.x,h=e.y===void 0?Math.floor(n.y):e.y,f=e.offset||0,u=e.drawBorder||!1,p=e.hitCanvasPixelRatio||1;if(!i||!s){P.error(\"Can not cache the node. Width or height of the node equals 0. Caching is skipped.\");return}const g=Math.abs(Math.round(n.x)-o)>.5?1:0,_=Math.abs(Math.round(n.y)-h)>.5?1:0;i+=f*2+g,s+=f*2+_,o-=f,h-=f;const y=new be({pixelRatio:a,width:i,height:s}),k=new be({pixelRatio:a,width:0,height:0,willReadFrequently:!0}),w=new vs({pixelRatio:p,width:i,height:s}),C=y.getContext(),T=w.getContext(),E=new be({width:y.width/y.pixelRatio+Math.abs(o),height:y.height/y.pixelRatio+Math.abs(h),pixelRatio:y.pixelRatio}),M=E.getContext();return w.isCache=!0,y.isCache=!0,this._cache.delete(Ae),this._filterUpToDate=!1,e.imageSmoothingEnabled===!1&&(y.getContext()._context.imageSmoothingEnabled=!1,k.getContext()._context.imageSmoothingEnabled=!1),C.save(),T.save(),M.save(),C.translate(-o,-h),T.translate(-o,-h),M.translate(-o,-h),E.x=o,E.y=h,this._isUnderCache=!0,this._clearSelfAndDescendantCache(ri),this._clearSelfAndDescendantCache(Xs),this.drawScene(y,this,E),this.drawHit(w,this),this._isUnderCache=!1,C.restore(),T.restore(),u&&(C.save(),C.beginPath(),C.rect(0,0,i,s),C.closePath(),C.setAttr(\"strokeStyle\",\"red\"),C.setAttr(\"lineWidth\",5),C.stroke(),C.restore()),P.releaseCanvas(E._canvas),this._cache.set(Ae,{scene:y,filter:k,hit:w,x:o,y:h}),this._requestDraw(),this}isCached(){return this._cache.has(Ae)}getClientRect(t){throw new Error('abstract \"getClientRect\" method call')}_transformedRect(t,e){const n=[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y+t.height},{x:t.x,y:t.y+t.height}];let i=1/0,s=1/0,a=-1/0,o=-1/0;const h=this.getAbsoluteTransform(e);return n.forEach(function(f){const u=h.point(f);i===void 0&&(i=a=u.x,s=o=u.y),i=Math.min(i,u.x),s=Math.min(s,u.y),a=Math.max(a,u.x),o=Math.max(o,u.y)}),{x:i,y:s,width:a-i,height:o-s}}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const e=this._getCanvasCache();t.translate(e.x,e.y);const n=this._getCachedSceneCanvas(),i=n.pixelRatio;t.drawImage(n._canvas,0,0,n.width/i,n.height/i),t.restore()}_drawCachedHitCanvas(t){const e=this._getCanvasCache(),n=e.hit;t.save(),t.translate(e.x,e.y),t.drawImage(n._canvas,0,0,n.width/n.pixelRatio,n.height/n.pixelRatio),t.restore()}_getCachedSceneCanvas(){let t=this.filters(),e=this._getCanvasCache(),n=e.scene,i=e.filter,s=i.getContext(),a,o,h,f;if(!t||t.length===0)return n;if(this._filterUpToDate)return i;let u=!0;for(let g=0;g<t.length;g++)if(typeof t[g]==\"string\"&&Ws(),typeof t[g]!=\"string\"||!Ws()){u=!1;break}const p=n.pixelRatio;if(i.setSize(n.width/n.pixelRatio,n.height/n.pixelRatio),u){const g=t.join(\" \");return s.save(),s.setAttr(\"filter\",g),s.drawImage(n._canvas,0,0,n.getWidth()/p,n.getHeight()/p),s.restore(),this._filterUpToDate=!0,i}try{for(a=t.length,s.clear(),s.drawImage(n._canvas,0,0,n.getWidth()/p,n.getHeight()/p),o=s.getImageData(0,0,i.getWidth(),i.getHeight()),h=0;h<a;h++)f=t[h],typeof f==\"string\"&&(f=Yo(f)),f.call(this,o),s.putImageData(o,0,0)}catch(g){P.error(\"Unable to apply filter. \"+g.message+\" This post my help you https://konvajs.org/docs/posts/Tainted_Canvas.html.\")}return this._filterUpToDate=!0,i}on(t,e){if(this._cache&&this._cache.delete(Us),arguments.length===3)return this._delegate.apply(this,arguments);const n=t.split(ai);for(let i=0;i<n.length;i++){const a=n[i].split(\".\"),o=a[0],h=a[1]||\"\";this.eventListeners[o]||(this.eventListeners[o]=[]),this.eventListeners[o].push({name:h,handler:e})}return this}off(t,e){let n=(t||\"\").split(ai),i=n.length,s,a,o,h,f,u;if(this._cache&&this._cache.delete(Us),!t)for(a in this.eventListeners)this._off(a);for(s=0;s<i;s++)if(o=n[s],h=o.split(\".\"),f=h[0],u=h[1],f)this.eventListeners[f]&&this._off(f,u,e);else for(a in this.eventListeners)this._off(a,u,e);return this}dispatchEvent(t){const e={target:this,type:t.type,evt:t};return this.fire(t.type,e),this}addEventListener(t,e){return this.on(t,function(n){e.call(this,n.evt)}),this}removeEventListener(t){return this.off(t),this}_delegate(t,e,n){const i=this;this.on(t,function(s){const a=s.target.findAncestors(e,!0,i);for(let o=0;o<a.length;o++)s=P.cloneObject(s),s.currentTarget=a[o],n.call(a[o],s)})}remove(){return this.isDragging()&&this.stopDrag(),vt._dragElements.delete(this._id),this._remove(),this}_clearCaches(){this._clearSelfAndDescendantCache(le),this._clearSelfAndDescendantCache(ri),this._clearSelfAndDescendantCache(Xs),this._clearSelfAndDescendantCache($s),this._clearSelfAndDescendantCache(rs),this._clearSelfAndDescendantCache(ss)}_remove(){this._clearCaches();const t=this.getParent();t&&t.children&&(t.children.splice(this.index,1),t._setChildrenIndices(),this.parent=null)}destroy(){return this.remove(),this.clearCache(),this}getAttr(t){const e=\"get\"+P._capitalize(t);return P._isFunction(this[e])?this[e]():this.attrs[t]}getAncestors(){let t=this.getParent(),e=[];for(;t;)e.push(t),t=t.getParent();return e}getAttrs(){return this.attrs||{}}setAttrs(t){return this._batchTransformChanges(()=>{let e,n;if(!t)return this;for(e in t)e!==$o&&(n=Ys+P._capitalize(e),P._isFunction(this[n])?this[n](t[e]):this._setAttr(e,t[e]))}),this}isListening(){return this._getCache(ss,this._isListening)}_isListening(t){if(!this.listening())return!1;const n=this.getParent();return n&&n!==t&&this!==t?n._isListening(t):!0}isVisible(){return this._getCache(rs,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const n=this.getParent();return n&&n!==t&&this!==t?n._isVisible(t):!0}shouldDrawHit(t,e=!1){if(t)return this._isVisible(t)&&this._isListening(t);const n=this.getLayer();let i=!1;vt._dragElements.forEach(a=>{a.dragStatus===\"dragging\"&&(a.node.nodeType===\"Stage\"||a.node.getLayer()===n)&&(i=!0)});const s=!e&&!Y.hitOnDragEnabled&&(i||Y.isTransforming());return this.isListening()&&this.isVisible()&&!s}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){let t=this.getDepth(),e=this,n=0,i,s,a,o;function h(u){for(i=[],s=u.length,a=0;a<s;a++)o=u[a],n++,o.nodeType!==qs&&(i=i.concat(o.getChildren().slice())),o._id===e._id&&(a=s);i.length>0&&i[0].getDepth()<=t&&h(i)}const f=this.getStage();return e.nodeType!==nl&&f&&h(f.getChildren()),n}getDepth(){let t=0,e=this.parent;for(;e;)t++,e=e.parent;return t}_batchTransformChanges(t){this._batchingTransformChange=!0,t(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(me),this._clearSelfAndDescendantCache(le)),this._needClearTransformCache=!1}setPosition(t){return this._batchTransformChanges(()=>{this.x(t.x),this.y(t.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){const t=this.getStage();if(!t)return null;const e=t.getPointerPosition();if(!e)return null;const n=this.getAbsoluteTransform().copy();return n.invert(),n.point(e)}getAbsolutePosition(t){let e=!1,n=this.parent;for(;n;){if(n.isCached()){e=!0;break}n=n.parent}e&&!t&&(t=!0);const i=this.getAbsoluteTransform(t).getMatrix(),s=new Xt,a=this.offset();return s.m=i.slice(),s.translate(a.x,a.y),s.getTranslation()}setAbsolutePosition(t){const{x:e,y:n,...i}=this._clearTransform();this.attrs.x=e,this.attrs.y=n,this._clearCache(me);const s=this._getAbsoluteTransform().copy();return s.invert(),s.translate(t.x,t.y),t={x:this.attrs.x+s.getTranslation().x,y:this.attrs.y+s.getTranslation().y},this._setTransform(i),this.setPosition({x:t.x,y:t.y}),this._clearCache(me),this._clearSelfAndDescendantCache(le),this}_setTransform(t){let e;for(e in t)this.attrs[e]=t[e]}_clearTransform(){const t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){let e=t.x,n=t.y,i=this.x(),s=this.y();return e!==void 0&&(i+=e),n!==void 0&&(s+=n),this.setPosition({x:i,y:s}),this}_eachAncestorReverse(t,e){let n=[],i=this.getParent(),s,a;if(!(e&&e._id===this._id)){for(n.unshift(this);i&&(!e||i._id!==e._id);)n.unshift(i),i=i.parent;for(s=n.length,a=0;a<s;a++)t(n[a])}}rotate(t){return this.rotation(this.rotation()+t),this}moveToTop(){if(!this.parent)return P.warn(\"Node has no parent. moveToTop function is ignored.\"),!1;const t=this.index,e=this.parent.getChildren().length;return t<e-1?(this.parent.children.splice(t,1),this.parent.children.push(this),this.parent._setChildrenIndices(),!0):!1}moveUp(){if(!this.parent)return P.warn(\"Node has no parent. moveUp function is ignored.\"),!1;const t=this.index,e=this.parent.getChildren().length;return t<e-1?(this.parent.children.splice(t,1),this.parent.children.splice(t+1,0,this),this.parent._setChildrenIndices(),!0):!1}moveDown(){if(!this.parent)return P.warn(\"Node has no parent. moveDown function is ignored.\"),!1;const t=this.index;return t>0?(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0):!1}moveToBottom(){if(!this.parent)return P.warn(\"Node has no parent. moveToBottom function is ignored.\"),!1;const t=this.index;return t>0?(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0):!1}setZIndex(t){if(!this.parent)return P.warn(\"Node has no parent. zIndex parameter is ignored.\"),this;(t<0||t>=this.parent.children.length)&&P.warn(\"Unexpected value \"+t+\" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to \"+(this.parent.children.length-1)+\".\");const e=this.index;return this.parent.children.splice(e,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(ri,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){let t=this.opacity();const e=this.getParent();return e&&!e._isUnderCache&&(t*=e.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){let t=this.getAttrs(),e,n,i,s,a;const o={attrs:{},className:this.getClassName()};for(e in t)n=t[e],a=P.isObject(n)&&!P._isPlainObject(n)&&!P._isArray(n),!a&&(i=typeof this[e]==\"function\"&&this[e],delete t[e],s=i?i.call(this):null,t[e]=n,s!==n&&(o.attrs[e]=n));return P._prepareToStringify(o)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,e,n){const i=[];e&&this._isMatch(t)&&i.push(this);let s=this.parent;for(;s;){if(s===n)return i;s._isMatch(t)&&i.push(s),s=s.parent}return i}isAncestorOf(t){return!1}findAncestor(t,e,n){return this.findAncestors(t,e,n)[0]}_isMatch(t){if(!t)return!1;if(typeof t==\"function\")return t(this);let e=t.replace(/ /g,\"\").split(\",\"),n=e.length,i,s;for(i=0;i<n;i++)if(s=e[i],P.isValidSelector(s)||(P.warn('Selector \"'+s+'\" is invalid. Allowed selectors examples are \"#foo\", \".bar\" or \"Group\".'),P.warn('If you have a custom shape with such className, please change it to start with upper letter like \"Triangle\".'),P.warn(\"Konva is awesome, right?\")),s.charAt(0)===\"#\"){if(this.id()===s.slice(1))return!0}else if(s.charAt(0)===\".\"){if(this.hasName(s.slice(1)))return!0}else if(this.className===s||this.nodeType===s)return!0;return!1}getLayer(){const t=this.getParent();return t?t.getLayer():null}getStage(){return this._getCache($s,this._getStage)}_getStage(){const t=this.getParent();return t?t.getStage():null}fire(t,e={},n){return e.target=e.target||this,n?this._fireAndBubble(t,e):this._fire(t,e),this}getAbsoluteTransform(t){return t?this._getAbsoluteTransform(t):this._getCache(le,this._getAbsoluteTransform)}_getAbsoluteTransform(t){let e;if(t)return e=new Xt,this._eachAncestorReverse(function(n){const i=n.transformsEnabled();i===\"all\"?e.multiply(n.getTransform()):i===\"position\"&&e.translate(n.x()-n.offsetX(),n.y()-n.offsetY())},t),e;{e=this._cache.get(le)||new Xt,this.parent?this.parent.getAbsoluteTransform().copyInto(e):e.reset();const n=this.transformsEnabled();if(n===\"all\")e.multiply(this.getTransform());else if(n===\"position\"){const i=this.attrs.x||0,s=this.attrs.y||0,a=this.attrs.offsetX||0,o=this.attrs.offsetY||0;e.translate(i-a,s-o)}return e.dirty=!1,e}}getAbsoluteScale(t){let e=this;for(;e;)e._isUnderCache&&(t=e),e=e.getParent();const i=this.getAbsoluteTransform(t).decompose();return{x:i.scaleX,y:i.scaleY}}getAbsoluteRotation(){return this.getAbsoluteTransform().decompose().rotation}getTransform(){return this._getCache(me,this._getTransform)}_getTransform(){var t,e;const n=this._cache.get(me)||new Xt;n.reset();const i=this.x(),s=this.y(),a=Y.getAngle(this.rotation()),o=(t=this.attrs.scaleX)!==null&&t!==void 0?t:1,h=(e=this.attrs.scaleY)!==null&&e!==void 0?e:1,f=this.attrs.skewX||0,u=this.attrs.skewY||0,p=this.attrs.offsetX||0,g=this.attrs.offsetY||0;return(i!==0||s!==0)&&n.translate(i,s),a!==0&&n.rotate(a),(f!==0||u!==0)&&n.skew(f,u),(o!==1||h!==1)&&n.scale(o,h),(p!==0||g!==0)&&n.translate(-1*p,-1*g),n.dirty=!1,n}clone(t){let e=P.cloneObject(this.attrs),n,i,s,a,o;for(n in t)e[n]=t[n];const h=new this.constructor(e);for(n in this.eventListeners)for(i=this.eventListeners[n],s=i.length,a=0;a<s;a++)o=i[a],o.name.indexOf(Vo)<0&&(h.eventListeners[n]||(h.eventListeners[n]=[]),h.eventListeners[n].push(o));return h}_toKonvaCanvas(t){t=t||{};const e=this.getClientRect(),n=this.getStage(),i=t.x!==void 0?t.x:Math.floor(e.x),s=t.y!==void 0?t.y:Math.floor(e.y),a=t.pixelRatio||1,o=new be({width:t.width||Math.ceil(e.width)||(n?n.width():0),height:t.height||Math.ceil(e.height)||(n?n.height():0),pixelRatio:a}),h=o.getContext(),f=new be({width:o.width/o.pixelRatio+Math.abs(i),height:o.height/o.pixelRatio+Math.abs(s),pixelRatio:o.pixelRatio});return t.imageSmoothingEnabled===!1&&(h._context.imageSmoothingEnabled=!1),h.save(),(i||s)&&h.translate(-1*i,-1*s),this.drawScene(o,void 0,f),h.restore(),o}toCanvas(t){return this._toKonvaCanvas(t)._canvas}toDataURL(t){t=t||{};const e=t.mimeType||null,n=t.quality||null,i=this._toKonvaCanvas(t).toDataURL(e,n);return t.callback&&t.callback(i),i}toImage(t){return new Promise((e,n)=>{try{const i=t?.callback;i&&delete t.callback,P._urlToImage(this.toDataURL(t),function(s){e(s),i?.(s)})}catch(i){n(i)}})}toBlob(t){return new Promise((e,n)=>{try{const i=t?.callback;i&&delete t.callback,this.toCanvas(t).toBlob(s=>{e(s),i?.(s)},t?.mimeType,t?.quality)}catch(i){n(i)}})}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return this.attrs.dragDistance!==void 0?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():Y.dragDistance}_off(t,e,n){let i=this.eventListeners[t],s,a,o;for(s=0;s<i.length;s++)if(a=i[s].name,o=i[s].handler,(a!==\"konva\"||e===\"konva\")&&(!e||a===e)&&(!n||n===o)){if(i.splice(s,1),i.length===0){delete this.eventListeners[t];break}s--}}_fireChangeEvent(t,e,n){this._fire(t+qo,{oldVal:e,newVal:n})}addName(t){if(!this.hasName(t)){const e=this.name(),n=e?e+\" \"+t:t;this.name(n)}return this}hasName(t){if(!t)return!1;const e=this.name();return e?(e||\"\").split(/\\s/g).indexOf(t)!==-1:!1}removeName(t){const e=(this.name()||\"\").split(/\\s/g),n=e.indexOf(t);return n!==-1&&(e.splice(n,1),this.name(e.join(\" \"))),this}setAttr(t,e){const n=this[Ys+P._capitalize(t)];return P._isFunction(n)?n.call(this,e):this._setAttr(t,e),this}_requestDraw(){if(Y.autoDrawEnabled){const t=this.getLayer()||this.getStage();t?.batchDraw()}}_setAttr(t,e){const n=this.attrs[t];n===e&&!P.isObject(e)||(e==null?delete this.attrs[t]:this.attrs[t]=e,this._shouldFireChangeEvents&&this._fireChangeEvent(t,n,e),this._requestDraw())}_setComponentAttr(t,e,n){let i;n!==void 0&&(i=this.attrs[t],i||(this.attrs[t]=this.getAttr(t)),this.attrs[t][e]=n,this._fireChangeEvent(t,i,n))}_fireAndBubble(t,e,n){e&&this.nodeType===qs&&(e.target=this);const i=[Ko,Jo,Qo,Zo,tl,el];if(!(i.indexOf(t)!==-1&&(n&&(this===n||this.isAncestorOf&&this.isAncestorOf(n))||this.nodeType===\"Stage\"&&!n))){this._fire(t,e);const a=i.indexOf(t)!==-1&&n&&n.isAncestorOf&&n.isAncestorOf(this)&&!n.isAncestorOf(this.parent);(e&&!e.cancelBubble||!e)&&this.parent&&this.parent.isListening()&&!a&&(n&&n.parent?this._fireAndBubble.call(this.parent,t,e,n):this._fireAndBubble.call(this.parent,t,e))}}_getProtoListeners(t){var e,n;const{nodeType:i}=this,s=z.protoListenerMap.get(i)||{};let a=s?.[t];if(a===void 0){a=[];let o=Object.getPrototypeOf(this);for(;o;){const h=(n=(e=o.eventListeners)===null||e===void 0?void 0:e[t])!==null&&n!==void 0?n:[];a.push(...h),o=Object.getPrototypeOf(o)}s[t]=a,z.protoListenerMap.set(i,s)}return a}_fire(t,e){e=e||{},e.currentTarget=this,e.type=t;const n=this._getProtoListeners(t);if(n)for(let s=0;s<n.length;s++)n[s].handler.call(this,e);const i=this.eventListeners[t];if(i)for(let s=0;s<i.length;s++)i[s].handler.call(this,e)}draw(){return this.drawScene(),this.drawHit(),this}_createDragElement(t){const e=t?t.pointerId:void 0,n=this.getStage(),i=this.getAbsolutePosition();if(!n)return;const s=n._getPointerById(e)||n._changedPointerPositions[0]||i;vt._dragElements.set(this._id,{node:this,startPointerPos:s,offset:{x:s.x-i.x,y:s.y-i.y},dragStatus:\"ready\",pointerId:e})}startDrag(t,e=!0){vt._dragElements.has(this._id)||this._createDragElement(t);const n=vt._dragElements.get(this._id);n.dragStatus=\"dragging\",this.fire(\"dragstart\",{type:\"dragstart\",target:this,evt:t&&t.evt},e)}_setDragPosition(t,e){const n=this.getStage()._getPointerById(e.pointerId);if(!n)return;let i={x:n.x-e.offset.x,y:n.y-e.offset.y};const s=this.dragBoundFunc();if(s!==void 0){const a=s.call(this,i,t);a?i=a:P.warn(\"dragBoundFunc did not return any value. That is unexpected behavior. You must return new absolute position from dragBoundFunc.\")}(!this._lastPos||this._lastPos.x!==i.x||this._lastPos.y!==i.y)&&(this.setAbsolutePosition(i),this._requestDraw()),this._lastPos=i}stopDrag(t){const e=vt._dragElements.get(this._id);e&&(e.dragStatus=\"stopped\"),vt._endDragBefore(t),vt._endDragAfter(t)}setDraggable(t){this._setAttr(\"draggable\",t),this._dragChange()}isDragging(){const t=vt._dragElements.get(this._id);return t?t.dragStatus===\"dragging\":!1}_listenDrag(){this._dragCleanup(),this.on(\"mousedown.konva touchstart.konva\",function(t){if(!(!(t.evt.button!==void 0)||Y.dragButtons.indexOf(t.evt.button)>=0)||this.isDragging())return;let i=!1;vt._dragElements.forEach(s=>{this.isAncestorOf(s.node)&&(i=!0)}),i||this._createDragElement(t)})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{if(this._dragCleanup(),!this.getStage())return;const e=vt._dragElements.get(this._id),n=e&&e.dragStatus===\"dragging\",i=e&&e.dragStatus===\"ready\";n?this.stopDrag():i&&vt._dragElements.delete(this._id)}}_dragCleanup(){this.off(\"mousedown.konva\"),this.off(\"touchstart.konva\")}isClientRectOnScreen(t={x:0,y:0}){const e=this.getStage();if(!e)return!1;const n={x:-t.x,y:-t.y,width:e.width()+2*t.x,height:e.height()+2*t.y};return P.haveIntersection(n,this.getClientRect())}static create(t,e){return P._isString(t)&&(t=JSON.parse(t)),this._createNode(t,e)}static _createNode(t,e){let n=z.prototype.getClassName.call(t),i=t.children,s,a,o;e&&(t.attrs.container=e),Y[n]||(P.warn('Can not find a node with class name \"'+n+'\". Fallback to \"Shape\".'),n=\"Shape\");const h=Y[n];if(s=new h(t.attrs),i)for(a=i.length,o=0;o<a;o++)s.add(z._createNode(i[o]));return s}}z.protoListenerMap=new Map;z.prototype.nodeType=\"Node\";z.prototype._attrsAffectingSize=[];z.prototype.eventListeners={};z.prototype.on.call(z.prototype,il,function(){if(this._batchingTransformChange){this._needClearTransformCache=!0;return}this._clearCache(me),this._clearSelfAndDescendantCache(le)});z.prototype.on.call(z.prototype,\"visibleChange.konva\",function(){this._clearSelfAndDescendantCache(rs)});z.prototype.on.call(z.prototype,\"listeningChange.konva\",function(){this._clearSelfAndDescendantCache(ss)});z.prototype.on.call(z.prototype,\"opacityChange.konva\",function(){this._clearSelfAndDescendantCache(ri)});const wt=S.addGetterSetter;wt(z,\"zIndex\");wt(z,\"absolutePosition\");wt(z,\"position\");wt(z,\"x\",0,W());wt(z,\"y\",0,W());wt(z,\"globalCompositeOperation\",\"source-over\",Oe());wt(z,\"opacity\",1,W());wt(z,\"name\",\"\",Oe());wt(z,\"id\",\"\",Oe());wt(z,\"rotation\",0,W());S.addComponentsGetterSetter(z,\"scale\",[\"x\",\"y\"]);wt(z,\"scaleX\",1,W());wt(z,\"scaleY\",1,W());S.addComponentsGetterSetter(z,\"skew\",[\"x\",\"y\"]);wt(z,\"skewX\",0,W());wt(z,\"skewY\",0,W());S.addComponentsGetterSetter(z,\"offset\",[\"x\",\"y\"]);wt(z,\"offsetX\",0,W());wt(z,\"offsetY\",0,W());wt(z,\"dragDistance\",void 0,W());wt(z,\"width\",0,W());wt(z,\"height\",0,W());wt(z,\"listening\",!0,ee());wt(z,\"preventDefault\",!0,ee());wt(z,\"filters\",void 0,function(r){return this._filterUpToDate=!1,r});wt(z,\"visible\",!0,ee());wt(z,\"transformsEnabled\",\"all\",Oe());wt(z,\"size\");wt(z,\"dragBoundFunc\");wt(z,\"draggable\",!1,ee());S.backCompat(z,{rotateDeg:\"rotate\",setRotationDeg:\"setRotation\",getRotationDeg:\"getRotation\"});class Yt extends z{constructor(){super(...arguments),this.children=[]}getChildren(t){const e=this.children||[];return t?e.filter(t):e}hasChildren(){return this.getChildren().length>0}removeChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.remove()}),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.destroy()}),this.children=[],this._requestDraw(),this}add(...t){if(t.length===0)return this;if(t.length>1){for(let n=0;n<t.length;n++)this.add(t[n]);return this}const e=t[0];return e.getParent()?(e.moveTo(this),this):(this._validateAdd(e),e.index=this.getChildren().length,e.parent=this,e._clearCaches(),this.getChildren().push(e),this._fire(\"add\",{child:e}),this._requestDraw(),this)}destroy(){return this.hasChildren()&&this.destroyChildren(),super.destroy(),this}find(t){return this._generalFind(t,!1)}findOne(t){const e=this._generalFind(t,!0);return e.length>0?e[0]:void 0}_generalFind(t,e){const n=[];return this._descendants(i=>{const s=i._isMatch(t);return s&&n.push(i),!!(s&&e)}),n}_descendants(t){let e=!1;const n=this.getChildren();for(const i of n){if(e=t(i),e)return!0;if(i.hasChildren()&&(e=i._descendants(t),e))return!0}return!1}toObject(){const t=z.prototype.toObject.call(this);return t.children=[],this.getChildren().forEach(e=>{t.children.push(e.toObject())}),t}isAncestorOf(t){let e=t.getParent();for(;e;){if(e._id===this._id)return!0;e=e.getParent()}return!1}clone(t){const e=z.prototype.clone.call(this,t);return this.getChildren().forEach(function(n){e.add(n.clone())}),e}getAllIntersections(t){const e=[];return this.find(\"Shape\").forEach(n=>{n.isVisible()&&n.intersects(t)&&e.push(n)}),e}_clearSelfAndDescendantCache(t){var e;super._clearSelfAndDescendantCache(t),!this.isCached()&&((e=this.children)===null||e===void 0||e.forEach(function(n){n._clearSelfAndDescendantCache(t)}))}_setChildrenIndices(){var t;(t=this.children)===null||t===void 0||t.forEach(function(e,n){e.index=n}),this._requestDraw()}drawScene(t,e,n){const i=this.getLayer(),s=t||i&&i.getCanvas(),a=s&&s.getContext(),o=this._getCanvasCache(),h=o&&o.scene,f=s&&s.isCache;if(!this.isVisible()&&!f)return this;if(h){a.save();const u=this.getAbsoluteTransform(e).getMatrix();a.transform(u[0],u[1],u[2],u[3],u[4],u[5]),this._drawCachedSceneCanvas(a),a.restore()}else this._drawChildren(\"drawScene\",s,e,n);return this}drawHit(t,e){if(!this.shouldDrawHit(e))return this;const n=this.getLayer(),i=t||n&&n.hitCanvas,s=i&&i.getContext(),a=this._getCanvasCache();if(a&&a.hit){s.save();const h=this.getAbsoluteTransform(e).getMatrix();s.transform(h[0],h[1],h[2],h[3],h[4],h[5]),this._drawCachedHitCanvas(s),s.restore()}else this._drawChildren(\"drawHit\",i,e);return this}_drawChildren(t,e,n,i){var s;const a=e&&e.getContext(),o=this.clipWidth(),h=this.clipHeight(),f=this.clipFunc(),u=typeof o==\"number\"&&typeof h==\"number\"||f,p=n===this;if(u){a.save();const _=this.getAbsoluteTransform(n);let y=_.getMatrix();a.transform(y[0],y[1],y[2],y[3],y[4],y[5]),a.beginPath();let k;if(f)k=f.call(this,a,this);else{const w=this.clipX(),C=this.clipY();a.rect(w||0,C||0,o,h)}a.clip.apply(a,k),y=_.copy().invert().getMatrix(),a.transform(y[0],y[1],y[2],y[3],y[4],y[5])}const g=!p&&this.globalCompositeOperation()!==\"source-over\"&&t===\"drawScene\";g&&(a.save(),a._applyGlobalCompositeOperation(this)),(s=this.children)===null||s===void 0||s.forEach(function(_){_[t](e,n,i)}),g&&a.restore(),u&&a.restore()}getClientRect(t={}){var e;const n=t.skipTransform,i=t.relativeTo;let s,a,o,h,f={x:1/0,y:1/0,width:0,height:0};const u=this;(e=this.children)===null||e===void 0||e.forEach(function(_){if(!_.visible())return;const y=_.getClientRect({relativeTo:u,skipShadow:t.skipShadow,skipStroke:t.skipStroke});y.width===0&&y.height===0||(s===void 0?(s=y.x,a=y.y,o=y.x+y.width,h=y.y+y.height):(s=Math.min(s,y.x),a=Math.min(a,y.y),o=Math.max(o,y.x+y.width),h=Math.max(h,y.y+y.height)))});const p=this.find(\"Shape\");let g=!1;for(let _=0;_<p.length;_++)if(p[_]._isVisible(this)){g=!0;break}return g&&s!==void 0?f={x:s,y:a,width:o-s,height:h-a}:f={x:0,y:0,width:0,height:0},n?f:this._transformedRect(f,i)}}S.addComponentsGetterSetter(Yt,\"clip\",[\"x\",\"y\",\"width\",\"height\"]);S.addGetterSetter(Yt,\"clipX\",void 0,W());S.addGetterSetter(Yt,\"clipY\",void 0,W());S.addGetterSetter(Yt,\"clipWidth\",void 0,W());S.addGetterSetter(Yt,\"clipHeight\",void 0,W());S.addGetterSetter(Yt,\"clipFunc\");const Cn=new Map,Cr=Y._global.PointerEvent!==void 0;function Vi(r){return Cn.get(r)}function bs(r){return{evt:r,pointerId:r.pointerId}}function kr(r,t){return Cn.get(r)===t}function Tr(r,t){_n(r),t.getStage()&&(Cn.set(r,t),Cr&&t._fire(\"gotpointercapture\",bs(new PointerEvent(\"gotpointercapture\"))))}function _n(r,t){const e=Cn.get(r);if(!e)return;const n=e.getStage();n&&n.content,Cn.delete(r),Cr&&e._fire(\"lostpointercapture\",bs(new PointerEvent(\"lostpointercapture\")))}const rl=\"Stage\",al=\"string\",Vs=\"px\",ol=\"mouseout\",Pr=\"mouseleave\",Er=\"mouseover\",Ar=\"mouseenter\",Rr=\"mousemove\",Mr=\"mousedown\",Lr=\"mouseup\",gn=\"pointermove\",pn=\"pointerdown\",qe=\"pointerup\",mn=\"pointercancel\",ll=\"lostpointercapture\",Vn=\"pointerout\",vn=\"pointerleave\",Kn=\"pointerover\",Jn=\"pointerenter\",as=\"contextmenu\",Or=\"touchstart\",Ir=\"touchend\",Dr=\"touchmove\",Nr=\"touchcancel\",os=\"wheel\",hl=5,cl=[[Ar,\"_pointerenter\"],[Mr,\"_pointerdown\"],[Rr,\"_pointermove\"],[Lr,\"_pointerup\"],[Pr,\"_pointerleave\"],[Or,\"_pointerdown\"],[Dr,\"_pointermove\"],[Ir,\"_pointerup\"],[Nr,\"_pointercancel\"],[Er,\"_pointerover\"],[os,\"_wheel\"],[as,\"_contextmenu\"],[pn,\"_pointerdown\"],[gn,\"_pointermove\"],[qe,\"_pointerup\"],[mn,\"_pointercancel\"],[vn,\"_pointerleave\"],[ll,\"_lostpointercapture\"]],Ki={mouse:{[Vn]:ol,[vn]:Pr,[Kn]:Er,[Jn]:Ar,[gn]:Rr,[pn]:Mr,[qe]:Lr,[mn]:\"mousecancel\",pointerclick:\"click\",pointerdblclick:\"dblclick\"},touch:{[Vn]:\"touchout\",[vn]:\"touchleave\",[Kn]:\"touchover\",[Jn]:\"touchenter\",[gn]:Dr,[pn]:Or,[qe]:Ir,[mn]:Nr,pointerclick:\"tap\",pointerdblclick:\"dbltap\"},pointer:{[Vn]:Vn,[vn]:vn,[Kn]:Kn,[Jn]:Jn,[gn]:gn,[pn]:pn,[qe]:qe,[mn]:mn,pointerclick:\"pointerclick\",pointerdblclick:\"pointerdblclick\"}},yn=r=>r.indexOf(\"pointer\")>=0?\"pointer\":r.indexOf(\"touch\")>=0?\"touch\":\"mouse\",Xe=r=>{const t=yn(r);if(t===\"pointer\")return Y.pointerEventsEnabled&&Ki.pointer;if(t===\"touch\")return Ki.touch;if(t===\"mouse\")return Ki.mouse};function Ks(r={}){return(r.clipFunc||r.clipWidth||r.clipHeight)&&P.warn(\"Stage does not support clipping. Please use clip for Layers or Groups.\"),r}const dl=\"Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);\",wn=[];class ui extends Yt{constructor(t){super(Ks(t)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),wn.push(this),this.on(\"widthChange.konva heightChange.konva\",this._resizeDOM),this.on(\"visibleChange.konva\",this._checkVisibility),this.on(\"clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva\",()=>{Ks(this.attrs)}),this._checkVisibility()}_validateAdd(t){const e=t.getType()===\"Layer\",n=t.getType()===\"FastLayer\";e||n||P.throw(\"You may only add layers to the stage.\")}_checkVisibility(){if(!this.content)return;const t=this.visible()?\"\":\"none\";this.content.style.display=t}setContainer(t){if(typeof t===al){let e;if(t.charAt(0)===\".\"){const n=t.slice(1);t=document.getElementsByClassName(n)[0]}else t.charAt(0)!==\"#\"?e=t:e=t.slice(1),t=document.getElementById(e);if(!t)throw\"Can not find container in document with id \"+e}return this._setAttr(\"container\",t),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),t.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){const t=this.children,e=t.length;for(let n=0;n<e;n++)t[n].clear();return this}clone(t){return t||(t={}),t.container=typeof document<\"u\"&&document.createElement(\"div\"),Yt.prototype.clone.call(this,t)}destroy(){super.destroy();const t=this.content;t&&P._isInDocument(t)&&this.container().removeChild(t);const e=wn.indexOf(this);return e>-1&&wn.splice(e,1),P.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const t=this._pointerPositions[0]||this._changedPointerPositions[0];return t?{x:t.x,y:t.y}:(P.warn(dl),null)}_getPointerById(t){return this._pointerPositions.find(e=>e.id===t)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(t){t={...t},t.x=t.x||0,t.y=t.y||0,t.width=t.width||this.width(),t.height=t.height||this.height();const e=new be({width:t.width,height:t.height,pixelRatio:t.pixelRatio||1}),n=e.getContext()._context,i=this.children;return(t.x||t.y)&&n.translate(-1*t.x,-1*t.y),i.forEach(function(s){if(!s.isVisible())return;const a=s._toKonvaCanvas(t);n.drawImage(a._canvas,t.x,t.y,a.getWidth()/a.getPixelRatio(),a.getHeight()/a.getPixelRatio())}),e}getIntersection(t){if(!t)return null;const e=this.children,n=e.length,i=n-1;for(let s=i;s>=0;s--){const a=e[s].getIntersection(t);if(a)return a}return null}_resizeDOM(){const t=this.width(),e=this.height();this.content&&(this.content.style.width=t+Vs,this.content.style.height=e+Vs),this.bufferCanvas.setSize(t,e),this.bufferHitCanvas.setSize(t,e),this.children.forEach(n=>{n.setSize({width:t,height:e}),n.draw()})}add(t,...e){if(arguments.length>1){for(let i=0;i<arguments.length;i++)this.add(arguments[i]);return this}super.add(t);const n=this.children.length;return n>hl&&P.warn(\"The stage has \"+n+\" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group.\"),t.setSize({width:this.width(),height:this.height()}),t.draw(),Y.isBrowser&&this.content.appendChild(t.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(t){return kr(t,this)}setPointerCapture(t){Tr(t,this)}releaseCapture(t){_n(t)}getLayers(){return this.children}_bindContentEvents(){Y.isBrowser&&cl.forEach(([t,e])=>{this.content.addEventListener(t,n=>{this[e](n)},{passive:!1})})}_pointerenter(t){this.setPointersPositions(t);const e=Xe(t.type);e&&this._fire(e.pointerenter,{evt:t,target:this,currentTarget:this})}_pointerover(t){this.setPointersPositions(t);const e=Xe(t.type);e&&this._fire(e.pointerover,{evt:t,target:this,currentTarget:this})}_getTargetShape(t){let e=this[t+\"targetShape\"];return e&&!e.getStage()&&(e=null),e}_pointerleave(t){const e=Xe(t.type),n=yn(t.type);if(!e)return;this.setPointersPositions(t);const i=this._getTargetShape(n),s=!(Y.isDragging()||Y.isTransforming())||Y.hitOnDragEnabled;i&&s?(i._fireAndBubble(e.pointerout,{evt:t}),i._fireAndBubble(e.pointerleave,{evt:t}),this._fire(e.pointerleave,{evt:t,target:this,currentTarget:this}),this[n+\"targetShape\"]=null):s&&(this._fire(e.pointerleave,{evt:t,target:this,currentTarget:this}),this._fire(e.pointerout,{evt:t,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[]}_pointerdown(t){const e=Xe(t.type),n=yn(t.type);if(!e)return;this.setPointersPositions(t);let i=!1;this._changedPointerPositions.forEach(s=>{const a=this.getIntersection(s);if(vt.justDragged=!1,Y[\"_\"+n+\"ListenClick\"]=!0,!a||!a.isListening()){this[n+\"ClickStartShape\"]=void 0;return}Y.capturePointerEventsEnabled&&a.setPointerCapture(s.id),this[n+\"ClickStartShape\"]=a,a._fireAndBubble(e.pointerdown,{evt:t,pointerId:s.id}),i=!0;const o=t.type.indexOf(\"touch\")>=0;a.preventDefault()&&t.cancelable&&o&&t.preventDefault()}),i||this._fire(e.pointerdown,{evt:t,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}_pointermove(t){const e=Xe(t.type),n=yn(t.type);if(!e)return;const i=t.type.indexOf(\"touch\")>=0||t.pointerType===\"touch\";if(Y.isDragging()&&vt.node.preventDefault()&&t.cancelable&&i&&t.preventDefault(),this.setPointersPositions(t),!(!(Y.isDragging()||Y.isTransforming())||Y.hitOnDragEnabled))return;const a={};let o=!1;const h=this._getTargetShape(n);this._changedPointerPositions.forEach(f=>{const u=Vi(f.id)||this.getIntersection(f),p=f.id,g={evt:t,pointerId:p},_=h!==u;if(_&&h&&(h._fireAndBubble(e.pointerout,{...g},u),h._fireAndBubble(e.pointerleave,{...g},u)),u){if(a[u._id])return;a[u._id]=!0}u&&u.isListening()?(o=!0,_&&(u._fireAndBubble(e.pointerover,{...g},h),u._fireAndBubble(e.pointerenter,{...g},h),this[n+\"targetShape\"]=u),u._fireAndBubble(e.pointermove,{...g})):h&&(this._fire(e.pointerover,{evt:t,target:this,currentTarget:this,pointerId:p}),this[n+\"targetShape\"]=null)}),o||this._fire(e.pointermove,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(t){const e=Xe(t.type),n=yn(t.type);if(!e)return;this.setPointersPositions(t);const i=this[n+\"ClickStartShape\"],s=this[n+\"ClickEndShape\"],a={};let o=!1;this._changedPointerPositions.forEach(h=>{const f=Vi(h.id)||this.getIntersection(h);if(f){if(f.releaseCapture(h.id),a[f._id])return;a[f._id]=!0}const u=h.id,p={evt:t,pointerId:u};let g=!1;Y[\"_\"+n+\"InDblClickWindow\"]?(g=!0,clearTimeout(this[n+\"DblTimeout\"])):vt.justDragged||(Y[\"_\"+n+\"InDblClickWindow\"]=!0,clearTimeout(this[n+\"DblTimeout\"])),this[n+\"DblTimeout\"]=setTimeout(function(){Y[\"_\"+n+\"InDblClickWindow\"]=!1},Y.dblClickWindow),f&&f.isListening()?(o=!0,this[n+\"ClickEndShape\"]=f,f._fireAndBubble(e.pointerup,{...p}),Y[\"_\"+n+\"ListenClick\"]&&i&&i===f&&(f._fireAndBubble(e.pointerclick,{...p}),g&&s&&s===f&&f._fireAndBubble(e.pointerdblclick,{...p}))):(this[n+\"ClickEndShape\"]=null,o||(this._fire(e.pointerup,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),o=!0),Y[\"_\"+n+\"ListenClick\"]&&this._fire(e.pointerclick,{evt:t,target:this,currentTarget:this,pointerId:u}),g&&this._fire(e.pointerdblclick,{evt:t,target:this,currentTarget:this,pointerId:u}))}),o||this._fire(e.pointerup,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),Y[\"_\"+n+\"ListenClick\"]=!1,t.cancelable&&n!==\"touch\"&&n!==\"pointer\"&&t.preventDefault()}_contextmenu(t){this.setPointersPositions(t);const e=this.getIntersection(this.getPointerPosition());e&&e.isListening()?e._fireAndBubble(as,{evt:t}):this._fire(as,{evt:t,target:this,currentTarget:this})}_wheel(t){this.setPointersPositions(t);const e=this.getIntersection(this.getPointerPosition());e&&e.isListening()?e._fireAndBubble(os,{evt:t}):this._fire(os,{evt:t,target:this,currentTarget:this})}_pointercancel(t){this.setPointersPositions(t);const e=Vi(t.pointerId)||this.getIntersection(this.getPointerPosition());e&&e._fireAndBubble(qe,bs(t)),_n(t.pointerId)}_lostpointercapture(t){_n(t.pointerId)}setPointersPositions(t){const e=this._getContentPosition();let n=null,i=null;t=t||window.event,t.touches!==void 0?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(t.touches,s=>{this._pointerPositions.push({id:s.identifier,x:(s.clientX-e.left)/e.scaleX,y:(s.clientY-e.top)/e.scaleY})}),Array.prototype.forEach.call(t.changedTouches||t.touches,s=>{this._changedPointerPositions.push({id:s.identifier,x:(s.clientX-e.left)/e.scaleX,y:(s.clientY-e.top)/e.scaleY})})):(n=(t.clientX-e.left)/e.scaleX,i=(t.clientY-e.top)/e.scaleY,this.pointerPos={x:n,y:i},this._pointerPositions=[{x:n,y:i,id:P._getFirstPointerId(t)}],this._changedPointerPositions=[{x:n,y:i,id:P._getFirstPointerId(t)}])}_setPointerPosition(t){P.warn('Method _setPointerPosition is deprecated. Use \"stage.setPointersPositions(event)\" instead.'),this.setPointersPositions(t)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};const t=this.content.getBoundingClientRect();return{top:t.top,left:t.left,scaleX:t.width/this.content.clientWidth||1,scaleY:t.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new be({width:this.width(),height:this.height()}),this.bufferHitCanvas=new vs({pixelRatio:1,width:this.width(),height:this.height()}),!Y.isBrowser)return;const t=this.container();if(!t)throw\"Stage has no container. A container is required.\";t.innerHTML=\"\",this.content=document.createElement(\"div\"),this.content.style.position=\"relative\",this.content.style.userSelect=\"none\",this.content.className=\"konvajs-content\",this.content.setAttribute(\"role\",\"presentation\"),t.appendChild(this.content),this._resizeDOM()}cache(){return P.warn(\"Cache function is not allowed for stage. You may use cache only for layers, groups and shapes.\"),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach(function(t){t.batchDraw()}),this}}ui.prototype.nodeType=rl;Tt(ui);S.addGetterSetter(ui,\"container\");Y.isBrowser&&document.addEventListener(\"visibilitychange\",()=>{wn.forEach(r=>{r.batchDraw()})});const Gr=\"hasShadow\",Fr=\"shadowRGBA\",Hr=\"patternImage\",Br=\"linearGradient\",zr=\"radialGradient\";let Qn;function Ji(){return Qn||(Qn=P.createCanvasElement().getContext(\"2d\"),Qn)}const Sn={};function ul(r){const t=this.attrs.fillRule;t?r.fill(t):r.fill()}function fl(r){r.stroke()}function gl(r){const t=this.attrs.fillRule;t?r.fill(t):r.fill()}function pl(r){r.stroke()}function ml(){this._clearCache(Gr)}function vl(){this._clearCache(Fr)}function yl(){this._clearCache(Hr)}function bl(){this._clearCache(Br)}function _l(){this._clearCache(zr)}class F extends z{constructor(t){super(t);let e,n=0;for(;e=P.getHitColor(),!(e&&!(e in Sn));)if(n++,n>=1e4){P.warn(\"Failed to find a unique color key for a shape. Konva may work incorrectly. Most likely your browser is using canvas farbling. Consider disabling it.\"),e=P.getRandomColor();break}this.colorKey=e,Sn[e]=this}getContext(){return P.warn(\"shape.getContext() method is deprecated. Please do not use it.\"),this.getLayer().getContext()}getCanvas(){return P.warn(\"shape.getCanvas() method is deprecated. Please do not use it.\"),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(Gr,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&this.shadowOpacity()!==0&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(Hr,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){const e=Ji().createPattern(this.fillPatternImage(),this.fillPatternRepeat()||\"repeat\");if(e&&e.setTransform){const n=new Xt;n.translate(this.fillPatternX(),this.fillPatternY()),n.rotate(Y.getAngle(this.fillPatternRotation())),n.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),n.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const i=n.getMatrix(),s=typeof DOMMatrix>\"u\"?{a:i[0],b:i[1],c:i[2],d:i[3],e:i[4],f:i[5]}:new DOMMatrix(i);e.setTransform(s)}return e}}_getLinearGradient(){return this._getCache(Br,this.__getLinearGradient)}__getLinearGradient(){const t=this.fillLinearGradientColorStops();if(t){const e=Ji(),n=this.fillLinearGradientStartPoint(),i=this.fillLinearGradientEndPoint(),s=e.createLinearGradient(n.x,n.y,i.x,i.y);for(let a=0;a<t.length;a+=2)s.addColorStop(t[a],t[a+1]);return s}}_getRadialGradient(){return this._getCache(zr,this.__getRadialGradient)}__getRadialGradient(){const t=this.fillRadialGradientColorStops();if(t){const e=Ji(),n=this.fillRadialGradientStartPoint(),i=this.fillRadialGradientEndPoint(),s=e.createRadialGradient(n.x,n.y,this.fillRadialGradientStartRadius(),i.x,i.y,this.fillRadialGradientEndRadius());for(let a=0;a<t.length;a+=2)s.addColorStop(t[a],t[a+1]);return s}}getShadowRGBA(){return this._getCache(Fr,this._getShadowRGBA)}_getShadowRGBA(){if(!this.hasShadow())return;const t=P.colorToRGBA(this.shadowColor());if(t)return\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a*(this.shadowOpacity()||1)+\")\"}hasFill(){return this._calculate(\"hasFill\",[\"fillEnabled\",\"fill\",\"fillPatternImage\",\"fillLinearGradientColorStops\",\"fillRadialGradientColorStops\"],()=>this.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops()))}hasStroke(){return this._calculate(\"hasStroke\",[\"strokeEnabled\",\"strokeWidth\",\"stroke\",\"strokeLinearGradientColorStops\"],()=>this.strokeEnabled()&&this.strokeWidth()&&!!(this.stroke()||this.strokeLinearGradientColorStops()))}hasHitStroke(){const t=this.hitStrokeWidth();return t===\"auto\"?this.hasStroke():this.strokeEnabled()&&!!t}intersects(t){const e=this.getStage();if(!e)return!1;const n=e.bufferHitCanvas;return n.getContext().clear(),this.drawHit(n,void 0,!0),n.context.getImageData(Math.round(t.x),Math.round(t.y),1,1).data[3]>0}destroy(){return z.prototype.destroy.call(this),delete Sn[this.colorKey],delete this.colorKey,this}_useBufferCanvas(t){var e;if(!((e=this.attrs.perfectDrawEnabled)!==null&&e!==void 0?e:!0))return!1;const i=t||this.hasFill(),s=this.hasStroke(),a=this.getAbsoluteOpacity()!==1;if(i&&s&&a)return!0;const o=this.hasShadow(),h=this.shadowForStrokeEnabled();return!!(i&&s&&o&&h)}setStrokeHitEnabled(t){P.warn(\"strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead.\"),t?this.hitStrokeWidth(\"auto\"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return this.hitStrokeWidth()!==0}getSelfRect(){const t=this.size();return{x:this._centroid?-t.width/2:0,y:this._centroid?-t.height/2:0,width:t.width,height:t.height}}getClientRect(t={}){let e=!1,n=this.getParent();for(;n;){if(n.isCached()){e=!0;break}n=n.getParent()}const i=t.skipTransform,s=t.relativeTo||e&&this.getStage()||void 0,a=this.getSelfRect(),h=!t.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,f=a.width+h,u=a.height+h,p=!t.skipShadow&&this.hasShadow(),g=p?this.shadowOffsetX():0,_=p?this.shadowOffsetY():0,y=f+Math.abs(g),k=u+Math.abs(_),w=p&&this.shadowBlur()||0,C=y+w*2,T=k+w*2,E={width:C,height:T,x:-(h/2+w)+Math.min(g,0)+a.x,y:-(h/2+w)+Math.min(_,0)+a.y};return i?E:this._transformedRect(E,s)}drawScene(t,e,n){const i=this.getLayer(),s=t||i.getCanvas(),a=s.getContext(),o=this._getCanvasCache(),h=this.getSceneFunc(),f=this.hasShadow();let u;const p=e===this;if(!this.isVisible()&&!p)return this;if(o){a.save();const g=this.getAbsoluteTransform(e).getMatrix();return a.transform(g[0],g[1],g[2],g[3],g[4],g[5]),this._drawCachedSceneCanvas(a),a.restore(),this}if(!h)return this;if(a.save(),this._useBufferCanvas()){u=this.getStage();const g=n||u.bufferCanvas,_=g.getContext();n?(_.save(),_.setTransform(1,0,0,1,0,0),_.clearRect(0,0,g.width,g.height),_.restore()):_.clear(),_.save(),_._applyLineJoin(this),_._applyMiterLimit(this);const y=this.getAbsoluteTransform(e).getMatrix();_.transform(y[0],y[1],y[2],y[3],y[4],y[5]),h.call(this,_,this),_.restore();const k=g.pixelRatio;f&&a._applyShadow(this),p||(a._applyOpacity(this),a._applyGlobalCompositeOperation(this)),a.drawImage(g._canvas,g.x||0,g.y||0,g.width/k,g.height/k)}else{if(a._applyLineJoin(this),a._applyMiterLimit(this),!p){const g=this.getAbsoluteTransform(e).getMatrix();a.transform(g[0],g[1],g[2],g[3],g[4],g[5]),a._applyOpacity(this),a._applyGlobalCompositeOperation(this)}f&&a._applyShadow(this),h.call(this,a,this)}return a.restore(),this}drawHit(t,e,n=!1){if(!this.shouldDrawHit(e,n))return this;const i=this.getLayer(),s=t||i.hitCanvas,a=s&&s.getContext(),o=this.hitFunc()||this.sceneFunc(),h=this._getCanvasCache(),f=h&&h.hit;if(this.colorKey||P.warn(\"Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()\"),f){a.save();const p=this.getAbsoluteTransform(e).getMatrix();return a.transform(p[0],p[1],p[2],p[3],p[4],p[5]),this._drawCachedHitCanvas(a),a.restore(),this}if(!o)return this;if(a.save(),a._applyLineJoin(this),a._applyMiterLimit(this),!(this===e)){const p=this.getAbsoluteTransform(e).getMatrix();a.transform(p[0],p[1],p[2],p[3],p[4],p[5])}return o.call(this,a,this),a.restore(),this}drawHitFromCache(t=0){const e=this._getCanvasCache(),n=this._getCachedSceneCanvas(),i=e.hit,s=i.getContext(),a=i.getWidth(),o=i.getHeight();s.clear(),s.drawImage(n._canvas,0,0,a,o);try{const h=s.getImageData(0,0,a,o),f=h.data,u=f.length,p=P._hexToRgb(this.colorKey);for(let g=0;g<u;g+=4)f[g+3]>t?(f[g]=p.r,f[g+1]=p.g,f[g+2]=p.b,f[g+3]=255):f[g+3]=0;s.putImageData(h,0,0)}catch(h){P.error(\"Unable to draw hit graph from cached scene canvas. \"+h.message)}return this}hasPointerCapture(t){return kr(t,this)}setPointerCapture(t){Tr(t,this)}releaseCapture(t){_n(t)}}F.prototype._fillFunc=ul;F.prototype._strokeFunc=fl;F.prototype._fillFuncHit=gl;F.prototype._strokeFuncHit=pl;F.prototype._centroid=!1;F.prototype.nodeType=\"Shape\";Tt(F);F.prototype.eventListeners={};F.prototype.on.call(F.prototype,\"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva\",ml);F.prototype.on.call(F.prototype,\"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva\",vl);F.prototype.on.call(F.prototype,\"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva\",yl);F.prototype.on.call(F.prototype,\"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva\",bl);F.prototype.on.call(F.prototype,\"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva\",_l);S.addGetterSetter(F,\"stroke\",void 0,xr());S.addGetterSetter(F,\"strokeWidth\",2,W());S.addGetterSetter(F,\"fillAfterStrokeEnabled\",!1);S.addGetterSetter(F,\"hitStrokeWidth\",\"auto\",ys());S.addGetterSetter(F,\"strokeHitEnabled\",!0,ee());S.addGetterSetter(F,\"perfectDrawEnabled\",!0,ee());S.addGetterSetter(F,\"shadowForStrokeEnabled\",!0,ee());S.addGetterSetter(F,\"lineJoin\");S.addGetterSetter(F,\"lineCap\");S.addGetterSetter(F,\"miterLimit\");S.addGetterSetter(F,\"sceneFunc\");S.addGetterSetter(F,\"hitFunc\");S.addGetterSetter(F,\"dash\");S.addGetterSetter(F,\"dashOffset\",0,W());S.addGetterSetter(F,\"shadowColor\",void 0,Oe());S.addGetterSetter(F,\"shadowBlur\",0,W());S.addGetterSetter(F,\"shadowOpacity\",1,W());S.addComponentsGetterSetter(F,\"shadowOffset\",[\"x\",\"y\"]);S.addGetterSetter(F,\"shadowOffsetX\",0,W());S.addGetterSetter(F,\"shadowOffsetY\",0,W());S.addGetterSetter(F,\"fillPatternImage\");S.addGetterSetter(F,\"fill\",void 0,xr());S.addGetterSetter(F,\"fillPatternX\",0,W());S.addGetterSetter(F,\"fillPatternY\",0,W());S.addGetterSetter(F,\"fillLinearGradientColorStops\");S.addGetterSetter(F,\"strokeLinearGradientColorStops\");S.addGetterSetter(F,\"fillRadialGradientStartRadius\",0);S.addGetterSetter(F,\"fillRadialGradientEndRadius\",0);S.addGetterSetter(F,\"fillRadialGradientColorStops\");S.addGetterSetter(F,\"fillPatternRepeat\",\"repeat\");S.addGetterSetter(F,\"fillEnabled\",!0);S.addGetterSetter(F,\"strokeEnabled\",!0);S.addGetterSetter(F,\"shadowEnabled\",!0);S.addGetterSetter(F,\"dashEnabled\",!0);S.addGetterSetter(F,\"strokeScaleEnabled\",!0);S.addGetterSetter(F,\"fillPriority\",\"color\");S.addComponentsGetterSetter(F,\"fillPatternOffset\",[\"x\",\"y\"]);S.addGetterSetter(F,\"fillPatternOffsetX\",0,W());S.addGetterSetter(F,\"fillPatternOffsetY\",0,W());S.addComponentsGetterSetter(F,\"fillPatternScale\",[\"x\",\"y\"]);S.addGetterSetter(F,\"fillPatternScaleX\",1,W());S.addGetterSetter(F,\"fillPatternScaleY\",1,W());S.addComponentsGetterSetter(F,\"fillLinearGradientStartPoint\",[\"x\",\"y\"]);S.addComponentsGetterSetter(F,\"strokeLinearGradientStartPoint\",[\"x\",\"y\"]);S.addGetterSetter(F,\"fillLinearGradientStartPointX\",0);S.addGetterSetter(F,\"strokeLinearGradientStartPointX\",0);S.addGetterSetter(F,\"fillLinearGradientStartPointY\",0);S.addGetterSetter(F,\"strokeLinearGradientStartPointY\",0);S.addComponentsGetterSetter(F,\"fillLinearGradientEndPoint\",[\"x\",\"y\"]);S.addComponentsGetterSetter(F,\"strokeLinearGradientEndPoint\",[\"x\",\"y\"]);S.addGetterSetter(F,\"fillLinearGradientEndPointX\",0);S.addGetterSetter(F,\"strokeLinearGradientEndPointX\",0);S.addGetterSetter(F,\"fillLinearGradientEndPointY\",0);S.addGetterSetter(F,\"strokeLinearGradientEndPointY\",0);S.addComponentsGetterSetter(F,\"fillRadialGradientStartPoint\",[\"x\",\"y\"]);S.addGetterSetter(F,\"fillRadialGradientStartPointX\",0);S.addGetterSetter(F,\"fillRadialGradientStartPointY\",0);S.addComponentsGetterSetter(F,\"fillRadialGradientEndPoint\",[\"x\",\"y\"]);S.addGetterSetter(F,\"fillRadialGradientEndPointX\",0);S.addGetterSetter(F,\"fillRadialGradientEndPointY\",0);S.addGetterSetter(F,\"fillPatternRotation\",0);S.addGetterSetter(F,\"fillRule\",void 0,Oe());S.backCompat(F,{dashArray:\"dash\",getDashArray:\"getDash\",setDashArray:\"getDash\",drawFunc:\"sceneFunc\",getDrawFunc:\"getSceneFunc\",setDrawFunc:\"setSceneFunc\",drawHitFunc:\"hitFunc\",getDrawHitFunc:\"getHitFunc\",setDrawHitFunc:\"setHitFunc\"});const wl=\"beforeDraw\",Sl=\"draw\",jr=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],xl=jr.length;class Ie extends Yt{constructor(t){super(t),this.canvas=new be,this.hitCanvas=new vs({pixelRatio:1}),this._waitingForDraw=!1,this.on(\"visibleChange.konva\",this._checkVisibility),this._checkVisibility(),this.on(\"imageSmoothingEnabledChange.konva\",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);const e=this.getStage();return e&&e.content&&(e.content.removeChild(this.getNativeCanvasElement()),t<e.children.length-1?e.content.insertBefore(this.getNativeCanvasElement(),e.children[t+1].getCanvas()._canvas):e.content.appendChild(this.getNativeCanvasElement())),this}moveToTop(){z.prototype.moveToTop.call(this);const t=this.getStage();return t&&t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.appendChild(this.getNativeCanvasElement())),!0}moveUp(){if(!z.prototype.moveUp.call(this))return!1;const e=this.getStage();return!e||!e.content?!1:(e.content.removeChild(this.getNativeCanvasElement()),this.index<e.children.length-1?e.content.insertBefore(this.getNativeCanvasElement(),e.children[this.index+1].getCanvas()._canvas):e.content.appendChild(this.getNativeCanvasElement()),!0)}moveDown(){if(z.prototype.moveDown.call(this)){const t=this.getStage();if(t){const e=t.children;t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.insertBefore(this.getNativeCanvasElement(),e[this.index+1].getCanvas()._canvas))}return!0}return!1}moveToBottom(){if(z.prototype.moveToBottom.call(this)){const t=this.getStage();if(t){const e=t.children;t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.insertBefore(this.getNativeCanvasElement(),e[1].getCanvas()._canvas))}return!0}return!1}getLayer(){return this}remove(){const t=this.getNativeCanvasElement();return z.prototype.remove.call(this),t&&t.parentNode&&P._isInDocument(t)&&t.parentNode.removeChild(t),this}getStage(){return this.parent}setSize({width:t,height:e}){return this.canvas.setSize(t,e),this.hitCanvas.setSize(t,e),this._setSmoothEnabled(),this}_validateAdd(t){const e=t.getType();e!==\"Group\"&&e!==\"Shape\"&&P.throw(\"You may only add groups and shapes to a layer.\")}_toKonvaCanvas(t){return t={...t},t.width=t.width||this.getWidth(),t.height=t.height||this.getHeight(),t.x=t.x!==void 0?t.x:this.x(),t.y=t.y!==void 0?t.y:this.y(),z.prototype._toKonvaCanvas.call(this,t)}_checkVisibility(){this.visible()?this.canvas._canvas.style.display=\"block\":this.canvas._canvas.style.display=\"none\"}_setSmoothEnabled(){this.getContext()._context.imageSmoothingEnabled=this.imageSmoothingEnabled()}getWidth(){if(this.parent)return this.parent.width()}setWidth(){P.warn('Can not change width of layer. Use \"stage.width(value)\" function instead.')}getHeight(){if(this.parent)return this.parent.height()}setHeight(){P.warn('Can not change height of layer. Use \"stage.height(value)\" function instead.')}batchDraw(){return this._waitingForDraw||(this._waitingForDraw=!0,P.requestAnimFrame(()=>{this.draw(),this._waitingForDraw=!1})),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;let e=1,n=!1;for(;;){for(let i=0;i<xl;i++){const s=jr[i],a=this._getIntersection({x:t.x+s.x*e,y:t.y+s.y*e}),o=a.shape;if(o)return o;if(n=!!a.antialiased,!a.antialiased)break}if(n)e+=1;else return null}}_getIntersection(t){const e=this.hitCanvas.pixelRatio,n=this.hitCanvas.context.getImageData(Math.round(t.x*e),Math.round(t.y*e),1,1).data,i=n[3];if(i===255){const s=P.getHitColorKey(n[0],n[1],n[2]),a=Sn[s];return a?{shape:a}:{antialiased:!0}}else if(i>0)return{antialiased:!0};return{}}drawScene(t,e,n){const i=this.getLayer(),s=t||i&&i.getCanvas();return this._fire(wl,{node:this}),this.clearBeforeDraw()&&s.getContext().clear(),Yt.prototype.drawScene.call(this,s,e,n),this._fire(Sl,{node:this}),this}drawHit(t,e){const n=this.getLayer(),i=t||n&&n.hitCanvas;return n&&n.clearBeforeDraw()&&n.getHitCanvas().getContext().clear(),Yt.prototype.drawHit.call(this,i,e),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){P.warn(\"hitGraphEnabled method is deprecated. Please use layer.listening() instead.\"),this.listening(t)}getHitGraphEnabled(t){return P.warn(\"hitGraphEnabled method is deprecated. Please use layer.listening() instead.\"),this.listening()}toggleHitCanvas(){if(!this.parent||!this.parent.content)return;const t=this.parent;!!this.hitCanvas._canvas.parentNode?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}destroy(){return P.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}Ie.prototype.nodeType=\"Layer\";Tt(Ie);S.addGetterSetter(Ie,\"imageSmoothingEnabled\",!0);S.addGetterSetter(Ie,\"clearBeforeDraw\",!0);S.addGetterSetter(Ie,\"hitGraphEnabled\",!0,ee());class _s extends Ie{constructor(t){super(t),this.listening(!1),P.warn('Konva.Fast layer is deprecated. Please use \"new Konva.Layer({ listening: false })\" instead.')}}_s.prototype.nodeType=\"FastLayer\";Tt(_s);class $e extends Yt{_validateAdd(t){const e=t.getType();e!==\"Group\"&&e!==\"Shape\"&&P.throw(\"You may only add groups and shapes to groups.\")}}$e.prototype.nodeType=\"Group\";Tt($e);const Qi=(function(){return Me.performance&&Me.performance.now?function(){return Me.performance.now()}:function(){return new Date().getTime()}})();class Jt{constructor(t,e){this.id=Jt.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:Qi(),frameRate:0},this.func=t,this.setLayers(e)}setLayers(t){let e=[];return t&&(e=Array.isArray(t)?t:[t]),this.layers=e,this}getLayers(){return this.layers}addLayer(t){const e=this.layers,n=e.length;for(let i=0;i<n;i++)if(e[i]._id===t._id)return!1;return this.layers.push(t),!0}isRunning(){const e=Jt.animations,n=e.length;for(let i=0;i<n;i++)if(e[i].id===this.id)return!0;return!1}start(){return this.stop(),this.frame.timeDiff=0,this.frame.lastTime=Qi(),Jt._addAnimation(this),this}stop(){return Jt._removeAnimation(this),this}_updateFrameObject(t){this.frame.timeDiff=t-this.frame.lastTime,this.frame.lastTime=t,this.frame.time+=this.frame.timeDiff,this.frame.frameRate=1e3/this.frame.timeDiff}static _addAnimation(t){this.animations.push(t),this._handleAnimation()}static _removeAnimation(t){const e=t.id,n=this.animations,i=n.length;for(let s=0;s<i;s++)if(n[s].id===e){this.animations.splice(s,1);break}}static _runFrames(){const t={},e=this.animations;for(let n=0;n<e.length;n++){const i=e[n],s=i.layers,a=i.func;i._updateFrameObject(Qi());const o=s.length;let h;if(a?h=a.call(i,i.frame)!==!1:h=!0,!!h)for(let f=0;f<o;f++){const u=s[f];u._id!==void 0&&(t[u._id]=u)}}for(const n in t)t.hasOwnProperty(n)&&t[n].batchDraw()}static _animationLoop(){const t=Jt;t.animations.length?(t._runFrames(),P.requestAnimFrame(t._animationLoop)):t.animRunning=!1}static _handleAnimation(){this.animRunning||(this.animRunning=!0,P.requestAnimFrame(this._animationLoop))}}Jt.animations=[];Jt.animIdCounter=0;Jt.animRunning=!1;const Cl={node:1,duration:1,easing:1,onFinish:1,yoyo:1},kl=1,Js=2,Qs=3,Zs=[\"fill\",\"stroke\",\"shadowColor\"];let Tl=0;class Pl{constructor(t,e,n,i,s,a,o){this.prop=t,this.propFunc=e,this.begin=i,this._pos=i,this.duration=a,this._change=0,this.prevPos=0,this.yoyo=o,this._time=0,this._position=0,this._startTime=0,this._finish=0,this.func=n,this._change=s-this.begin,this.pause()}fire(t){const e=this[t];e&&e()}setTime(t){t>this.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():t<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=t,this.update())}getTime(){return this._time}setPosition(t){this.prevPos=this._pos,this.propFunc(t),this._pos=t}getPosition(t){return t===void 0&&(t=this._time),this.func(t,this.begin,this._change,this.duration)}play(){this.state=Js,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire(\"onPlay\")}reverse(){this.state=Qs,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire(\"onReverse\")}seek(t){this.pause(),this._time=t,this.update(),this.fire(\"onSeek\")}reset(){this.pause(),this._time=0,this.update(),this.fire(\"onReset\")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire(\"onFinish\")}update(){this.setPosition(this.getPosition(this._time)),this.fire(\"onUpdate\")}onEnterFrame(){const t=this.getTimer()-this._startTime;this.state===Js?this.setTime(t):this.state===Qs&&this.setTime(this.duration-t)}pause(){this.state=kl,this.fire(\"onPause\")}getTimer(){return new Date().getTime()}}class xt{constructor(t){const e=this,n=t.node,i=n._id,s=t.easing||xn.Linear,a=!!t.yoyo;let o,h;typeof t.duration>\"u\"?o=.3:t.duration===0?o=.001:o=t.duration,this.node=n,this._id=Tl++;const f=n.getLayer()||(n instanceof Y.Stage?n.getLayers():null);f||P.error(\"Tween constructor have `node` that is not in a layer. Please add node into layer first.\"),this.anim=new Jt(function(){e.tween.onEnterFrame()},f),this.tween=new Pl(h,function(u){e._tweenFunc(u)},s,0,1,o*1e3,a),this._addListeners(),xt.attrs[i]||(xt.attrs[i]={}),xt.attrs[i][this._id]||(xt.attrs[i][this._id]={}),xt.tweens[i]||(xt.tweens[i]={});for(h in t)Cl[h]===void 0&&this._addAttr(h,t[h]);this.reset(),this.onFinish=t.onFinish,this.onReset=t.onReset,this.onUpdate=t.onUpdate}_addAttr(t,e){const n=this.node,i=n._id;let s,a,o,h,f;const u=xt.tweens[i][t];u&&delete xt.attrs[i][u][t];let p=n.getAttr(t);if(P._isArray(e))if(s=[],a=Math.max(e.length,p.length),t===\"points\"&&e.length!==p.length&&(e.length>p.length?(h=p,p=P._prepareArrayForTween(p,e,n.closed())):(o=e,e=P._prepareArrayForTween(e,p,n.closed()))),t.indexOf(\"fill\")===0)for(let g=0;g<a;g++)if(g%2===0)s.push(e[g]-p[g]);else{const _=P.colorToRGBA(p[g]);f=P.colorToRGBA(e[g]),p[g]=_,s.push({r:f.r-_.r,g:f.g-_.g,b:f.b-_.b,a:f.a-_.a})}else for(let g=0;g<a;g++)s.push(e[g]-p[g]);else Zs.indexOf(t)!==-1?(p=P.colorToRGBA(p),f=P.colorToRGBA(e),s={r:f.r-p.r,g:f.g-p.g,b:f.b-p.b,a:f.a-p.a}):s=e-p;xt.attrs[i][this._id][t]={start:p,diff:s,end:e,trueEnd:o,trueStart:h},xt.tweens[i][t]=this._id}_tweenFunc(t){const e=this.node,n=xt.attrs[e._id][this._id];let i,s,a,o,h,f,u,p;for(i in n){if(s=n[i],a=s.start,o=s.diff,p=s.end,P._isArray(a))if(h=[],u=Math.max(a.length,p.length),i.indexOf(\"fill\")===0)for(f=0;f<u;f++)f%2===0?h.push((a[f]||0)+o[f]*t):h.push(\"rgba(\"+Math.round(a[f].r+o[f].r*t)+\",\"+Math.round(a[f].g+o[f].g*t)+\",\"+Math.round(a[f].b+o[f].b*t)+\",\"+(a[f].a+o[f].a*t)+\")\");else for(f=0;f<u;f++)h.push((a[f]||0)+o[f]*t);else Zs.indexOf(i)!==-1?h=\"rgba(\"+Math.round(a.r+o.r*t)+\",\"+Math.round(a.g+o.g*t)+\",\"+Math.round(a.b+o.b*t)+\",\"+(a.a+o.a*t)+\")\":h=a+o*t;e.setAttr(i,h)}}_addListeners(){this.tween.onPlay=()=>{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{const t=this.node,e=xt.attrs[t._id][this._id];e.points&&e.points.trueEnd&&t.setAttr(\"points\",e.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{const t=this.node,e=xt.attrs[t._id][this._id];e.points&&e.points.trueStart&&t.points(e.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(t){return this.tween.seek(t*1e3),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){const t=this.node._id,e=this._id,n=xt.tweens[t];this.pause(),this.anim&&this.anim.stop();for(const i in n)delete xt.tweens[t][i];delete xt.attrs[t][e],xt.tweens[t]&&(Object.keys(xt.tweens[t]).length===0&&delete xt.tweens[t],Object.keys(xt.attrs[t]).length===0&&delete xt.attrs[t])}}xt.attrs={};xt.tweens={};z.prototype.to=function(r){const t=r.onFinish;r.node=this,r.onFinish=function(){this.destroy(),t&&t()},new xt(r).play()};const xn={BackEaseIn(r,t,e,n){return e*(r/=n)*r*((1.70158+1)*r-1.70158)+t},BackEaseOut(r,t,e,n){return e*((r=r/n-1)*r*((1.70158+1)*r+1.70158)+1)+t},BackEaseInOut(r,t,e,n){let i=1.70158;return(r/=n/2)<1?e/2*(r*r*(((i*=1.525)+1)*r-i))+t:e/2*((r-=2)*r*(((i*=1.525)+1)*r+i)+2)+t},ElasticEaseIn(r,t,e,n,i,s){let a=0;return r===0?t:(r/=n)===1?t+e:(s||(s=n*.3),!i||i<Math.abs(e)?(i=e,a=s/4):a=s/(2*Math.PI)*Math.asin(e/i),-(i*Math.pow(2,10*(r-=1))*Math.sin((r*n-a)*(2*Math.PI)/s))+t)},ElasticEaseOut(r,t,e,n,i,s){let a=0;return r===0?t:(r/=n)===1?t+e:(s||(s=n*.3),!i||i<Math.abs(e)?(i=e,a=s/4):a=s/(2*Math.PI)*Math.asin(e/i),i*Math.pow(2,-10*r)*Math.sin((r*n-a)*(2*Math.PI)/s)+e+t)},ElasticEaseInOut(r,t,e,n,i,s){let a=0;return r===0?t:(r/=n/2)===2?t+e:(s||(s=n*(.3*1.5)),!i||i<Math.abs(e)?(i=e,a=s/4):a=s/(2*Math.PI)*Math.asin(e/i),r<1?-.5*(i*Math.pow(2,10*(r-=1))*Math.sin((r*n-a)*(2*Math.PI)/s))+t:i*Math.pow(2,-10*(r-=1))*Math.sin((r*n-a)*(2*Math.PI)/s)*.5+e+t)},BounceEaseOut(r,t,e,n){return(r/=n)<1/2.75?e*(7.5625*r*r)+t:r<2/2.75?e*(7.5625*(r-=1.5/2.75)*r+.75)+t:r<2.5/2.75?e*(7.5625*(r-=2.25/2.75)*r+.9375)+t:e*(7.5625*(r-=2.625/2.75)*r+.984375)+t},BounceEaseIn(r,t,e,n){return e-xn.BounceEaseOut(n-r,0,e,n)+t},BounceEaseInOut(r,t,e,n){return r<n/2?xn.BounceEaseIn(r*2,0,e,n)*.5+t:xn.BounceEaseOut(r*2-n,0,e,n)*.5+e*.5+t},EaseIn(r,t,e,n){return e*(r/=n)*r+t},EaseOut(r,t,e,n){return-e*(r/=n)*(r-2)+t},EaseInOut(r,t,e,n){return(r/=n/2)<1?e/2*r*r+t:-e/2*(--r*(r-2)-1)+t},StrongEaseIn(r,t,e,n){return e*(r/=n)*r*r*r*r+t},StrongEaseOut(r,t,e,n){return e*((r=r/n-1)*r*r*r*r+1)+t},StrongEaseInOut(r,t,e,n){return(r/=n/2)<1?e/2*r*r*r*r*r+t:e/2*((r-=2)*r*r*r*r+2)+t},Linear(r,t,e,n){return e*r/n+t}},tr=P._assign(Y,{Util:P,Transform:Xt,Node:z,Container:Yt,Stage:ui,stages:wn,Layer:Ie,FastLayer:_s,Group:$e,DD:vt,Shape:F,shapes:Sn,Animation:Jt,Tween:xt,Easings:xn,Context:ci,Canvas:ms});class he extends F{_sceneFunc(t){const e=Y.getAngle(this.angle()),n=this.clockwise();t.beginPath(),t.arc(0,0,this.outerRadius(),0,e,n),t.arc(0,0,this.innerRadius(),e,0,!n),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}getSelfRect(){const t=this.innerRadius(),e=this.outerRadius(),n=this.clockwise(),i=Y.getAngle(n?360-this.angle():this.angle()),s=Math.cos(Math.min(i,Math.PI)),a=1,o=Math.sin(Math.min(Math.max(Math.PI,i),3*Math.PI/2)),h=Math.sin(Math.min(i,Math.PI/2)),f=s*(s>0?t:e),u=a*e,p=o*(o>0?t:e),g=h*(h>0?e:t);return{x:f,y:n?-1*g:p,width:u-f,height:g-p}}}he.prototype._centroid=!0;he.prototype.className=\"Arc\";he.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\",\"angle\",\"clockwise\"];Tt(he);S.addGetterSetter(he,\"innerRadius\",0,W());S.addGetterSetter(he,\"outerRadius\",0,W());S.addGetterSetter(he,\"angle\",0,W());S.addGetterSetter(he,\"clockwise\",!1,ee());function ls(r,t,e,n,i,s,a){const o=Math.sqrt(Math.pow(e-r,2)+Math.pow(n-t,2)),h=Math.sqrt(Math.pow(i-e,2)+Math.pow(s-n,2)),f=a*o/(o+h),u=a*h/(o+h),p=e-f*(i-r),g=n-f*(s-t),_=e+u*(i-r),y=n+u*(s-t);return[p,g,_,y]}function er(r,t){const e=r.length,n=[];for(let i=2;i<e-2;i+=2){const s=ls(r[i-2],r[i-1],r[i],r[i+1],r[i+2],r[i+3],t);isNaN(s[0])||(n.push(s[0]),n.push(s[1]),n.push(r[i]),n.push(r[i+1]),n.push(s[2]),n.push(s[3]))}return n}function El(r){const t=[[r[0],r[2],r[4],r[6]],[r[1],r[3],r[5],r[7]]],e=[];for(const n of t){const i=-3*n[0]+9*n[1]-9*n[2]+3*n[3];if(i!==0){const s=6*n[0]-12*n[1]+6*n[2],a=-3*n[0]+3*n[1],o=s*s-4*i*a;if(o>=0){const h=Math.sqrt(o);e.push((-s+h)/(2*i)),e.push((-s-h)/(2*i))}}}return e.filter(n=>n>0&&n<1).flatMap(n=>t.map(i=>{const s=1-n;return s*s*s*i[0]+3*s*s*n*i[1]+3*s*n*n*i[2]+n*n*n*i[3]}))}class ce extends F{constructor(t){super(t),this.on(\"pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva\",function(){this._clearCache(\"tensionPoints\")})}_sceneFunc(t){const e=this.points(),n=e.length,i=this.tension(),s=this.closed(),a=this.bezier();if(!n)return;let o=0;if(t.beginPath(),t.moveTo(e[0],e[1]),i!==0&&n>4){const h=this.getTensionPoints(),f=h.length;for(o=s?0:4,s||t.quadraticCurveTo(h[0],h[1],h[2],h[3]);o<f-2;)t.bezierCurveTo(h[o++],h[o++],h[o++],h[o++],h[o++],h[o++]);s||t.quadraticCurveTo(h[f-2],h[f-1],e[n-2],e[n-1])}else if(a)for(o=2;o<n;)t.bezierCurveTo(e[o++],e[o++],e[o++],e[o++],e[o++],e[o++]);else for(o=2;o<n;o+=2)t.lineTo(e[o],e[o+1]);s?(t.closePath(),t.fillStrokeShape(this)):t.strokeShape(this)}getTensionPoints(){return this._getCache(\"tensionPoints\",this._getTensionPoints)}_getTensionPoints(){return this.closed()?this._getTensionPointsClosed():er(this.points(),this.tension())}_getTensionPointsClosed(){const t=this.points(),e=t.length,n=this.tension(),i=ls(t[e-2],t[e-1],t[0],t[1],t[2],t[3],n),s=ls(t[e-4],t[e-3],t[e-2],t[e-1],t[0],t[1],n),a=er(t,n);return[i[2],i[3]].concat(a).concat([s[0],s[1],t[e-2],t[e-1],s[2],s[3],i[0],i[1],t[0],t[1]])}getWidth(){return this.getSelfRect().width}getHeight(){return this.getSelfRect().height}getSelfRect(){let t=this.points();if(t.length<4)return{x:t[0]||0,y:t[1]||0,width:0,height:0};this.tension()!==0?t=[t[0],t[1],...this._getTensionPoints(),t[t.length-2],t[t.length-1]]:this.bezier()?t=[t[0],t[1],...El(this.points()),t[t.length-2],t[t.length-1]]:t=this.points();let e=t[0],n=t[0],i=t[1],s=t[1],a,o;for(let h=0;h<t.length/2;h++)a=t[h*2],o=t[h*2+1],e=Math.min(e,a),n=Math.max(n,a),i=Math.min(i,o),s=Math.max(s,o);return{x:e,y:i,width:n-e,height:s-i}}}ce.prototype.className=\"Line\";ce.prototype._attrsAffectingSize=[\"points\",\"bezier\",\"tension\"];Tt(ce);S.addGetterSetter(ce,\"closed\",!1);S.addGetterSetter(ce,\"bezier\",!1);S.addGetterSetter(ce,\"tension\",0,W());S.addGetterSetter(ce,\"points\",[],Uo());const Al=[[],[],[-.5773502691896257,.5773502691896257],[0,-.7745966692414834,.7745966692414834],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],Rl=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],Ml=[[1],[1,1],[1,2,1],[1,3,3,1]],nr=(r,t,e)=>{let n,i;const a=e/2;n=0;for(let o=0;o<20;o++)i=a*Al[20][o]+a,n+=Rl[20][o]*Ll(r,t,i);return a*n},ir=(r,t,e)=>{e===void 0&&(e=1);const n=r[0]-2*r[1]+r[2],i=t[0]-2*t[1]+t[2],s=2*r[1]-2*r[0],a=2*t[1]-2*t[0],o=4*(n*n+i*i),h=4*(n*s+i*a),f=s*s+a*a;if(o===0)return e*Math.sqrt(Math.pow(r[2]-r[0],2)+Math.pow(t[2]-t[0],2));const u=h/(2*o),p=f/o,g=e+u,_=p-u*u,y=g*g+_>0?Math.sqrt(g*g+_):0,k=u*u+_>0?Math.sqrt(u*u+_):0,w=u+Math.sqrt(u*u+_)!==0?_*Math.log(Math.abs((g+y)/(u+k))):0;return Math.sqrt(o)/2*(g*y-u*k+w)};function Ll(r,t,e){const n=hs(1,e,r),i=hs(1,e,t),s=n*n+i*i;return Math.sqrt(s)}const hs=(r,t,e)=>{const n=e.length-1;let i,s;if(n===0)return 0;if(r===0){s=0;for(let a=0;a<=n;a++)s+=Ml[n][a]*Math.pow(1-t,n-a)*Math.pow(t,a)*e[a];return s}else{i=new Array(n);for(let a=0;a<n;a++)i[a]=n*(e[a+1]-e[a]);return hs(r-1,t,i)}},sr=(r,t,e)=>{let n=1,i=r/t,s=(r-e(i))/t,a=0;for(;n>.001;){const o=e(i+s),h=Math.abs(r-o)/t;if(h<n)n=h,i+=s;else{const f=e(i-s),u=Math.abs(r-f)/t;u<n?(n=u,i-=s):s/=2}if(a++,a>500)break}return i};class Ct extends F{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on(\"dataChange.konva\",function(){this._readDataAttribute()})}_readDataAttribute(){this.dataArray=Ct.parsePathData(this.data()),this.pathLength=Ct.getPathLength(this.dataArray)}_sceneFunc(t){const e=this.dataArray;t.beginPath();let n=!1;for(let i=0;i<e.length;i++){const s=e[i].command,a=e[i].points;switch(s){case\"L\":t.lineTo(a[0],a[1]);break;case\"M\":t.moveTo(a[0],a[1]);break;case\"C\":t.bezierCurveTo(a[0],a[1],a[2],a[3],a[4],a[5]);break;case\"Q\":t.quadraticCurveTo(a[0],a[1],a[2],a[3]);break;case\"A\":const o=a[0],h=a[1],f=a[2],u=a[3],p=a[4],g=a[5],_=a[6],y=a[7],k=f>u?f:u,w=f>u?1:f/u,C=f>u?u/f:1;t.translate(o,h),t.rotate(_),t.scale(w,C),t.arc(0,0,k,p,p+g,1-y),t.scale(1/w,1/C),t.rotate(-_),t.translate(-o,-h);break;case\"z\":n=!0,t.closePath();break}}!n&&!this.hasFill()?t.strokeShape(this):t.fillStrokeShape(this)}getSelfRect(){let t=[];this.dataArray.forEach(function(h){if(h.command===\"A\"){const f=h.points[4],u=h.points[5],p=h.points[4]+u;let g=Math.PI/180;if(Math.abs(f-p)<g&&(g=Math.abs(f-p)),u<0)for(let _=f-g;_>p;_-=g){const y=Ct.getPointOnEllipticalArc(h.points[0],h.points[1],h.points[2],h.points[3],_,0);t.push(y.x,y.y)}else for(let _=f+g;_<p;_+=g){const y=Ct.getPointOnEllipticalArc(h.points[0],h.points[1],h.points[2],h.points[3],_,0);t.push(y.x,y.y)}}else if(h.command===\"C\")for(let f=0;f<=1;f+=.01){const u=Ct.getPointOnCubicBezier(f,h.start.x,h.start.y,h.points[0],h.points[1],h.points[2],h.points[3],h.points[4],h.points[5]);t.push(u.x,u.y)}else t=t.concat(h.points)});let e=t[0],n=t[0],i=t[1],s=t[1],a,o;for(let h=0;h<t.length/2;h++)a=t[h*2],o=t[h*2+1],isNaN(a)||(e=Math.min(e,a),n=Math.max(n,a)),isNaN(o)||(i=Math.min(i,o),s=Math.max(s,o));return{x:e,y:i,width:n-e,height:s-i}}getLength(){return this.pathLength}getPointAtLength(t){return Ct.getPointAtLengthOfDataArray(t,this.dataArray)}static getLineLength(t,e,n,i){return Math.sqrt((n-t)*(n-t)+(i-e)*(i-e))}static getPathLength(t){let e=0;for(let n=0;n<t.length;++n)e+=t[n].pathLength;return e}static getPointAtLengthOfDataArray(t,e){let n,i=0,s=e.length;if(!s)return null;for(;i<s&&t>e[i].pathLength;)t-=e[i].pathLength,++i;if(i===s)return n=e[i-1].points.slice(-2),{x:n[0],y:n[1]};if(t<.01)return e[i].command===\"M\"?(n=e[i].points.slice(0,2),{x:n[0],y:n[1]}):{x:e[i].start.x,y:e[i].start.y};const a=e[i],o=a.points;switch(a.command){case\"L\":return Ct.getPointOnLine(t,a.start.x,a.start.y,o[0],o[1]);case\"C\":return Ct.getPointOnCubicBezier(sr(t,Ct.getPathLength(e),k=>nr([a.start.x,o[0],o[2],o[4]],[a.start.y,o[1],o[3],o[5]],k)),a.start.x,a.start.y,o[0],o[1],o[2],o[3],o[4],o[5]);case\"Q\":return Ct.getPointOnQuadraticBezier(sr(t,Ct.getPathLength(e),k=>ir([a.start.x,o[0],o[2]],[a.start.y,o[1],o[3]],k)),a.start.x,a.start.y,o[0],o[1],o[2],o[3]);case\"A\":const h=o[0],f=o[1],u=o[2],p=o[3],g=o[5],_=o[6];let y=o[4];return y+=g*t/a.pathLength,Ct.getPointOnEllipticalArc(h,f,u,p,y,_)}return null}static getPointOnLine(t,e,n,i,s,a,o){a=a??e,o=o??n;const h=this.getLineLength(e,n,i,s);if(h<1e-10)return{x:e,y:n};if(i===e)return{x:a,y:o+(s>n?t:-t)};const f=(s-n)/(i-e),u=Math.sqrt(t*t/(1+f*f))*(i<e?-1:1),p=f*u;if(Math.abs(o-n-f*(a-e))<1e-10)return{x:a+u,y:o+p};const g=((a-e)*(i-e)+(o-n)*(s-n))/(h*h),_=e+g*(i-e),y=n+g*(s-n),k=this.getLineLength(a,o,_,y),w=Math.sqrt(t*t-k*k),C=Math.sqrt(w*w/(1+f*f))*(i<e?-1:1),T=f*C;return{x:_+C,y:y+T}}static getPointOnCubicBezier(t,e,n,i,s,a,o,h,f){function u(w){return w*w*w}function p(w){return 3*w*w*(1-w)}function g(w){return 3*w*(1-w)*(1-w)}function _(w){return(1-w)*(1-w)*(1-w)}const y=h*u(t)+a*p(t)+i*g(t)+e*_(t),k=f*u(t)+o*p(t)+s*g(t)+n*_(t);return{x:y,y:k}}static getPointOnQuadraticBezier(t,e,n,i,s,a,o){function h(_){return _*_}function f(_){return 2*_*(1-_)}function u(_){return(1-_)*(1-_)}const p=a*h(t)+i*f(t)+e*u(t),g=o*h(t)+s*f(t)+n*u(t);return{x:p,y:g}}static getPointOnEllipticalArc(t,e,n,i,s,a){const o=Math.cos(a),h=Math.sin(a),f={x:n*Math.cos(s),y:i*Math.sin(s)};return{x:t+(f.x*o-f.y*h),y:e+(f.x*h+f.y*o)}}static parsePathData(t){if(!t)return[];let e=t;const n=[\"m\",\"M\",\"l\",\"L\",\"v\",\"V\",\"h\",\"H\",\"z\",\"Z\",\"c\",\"C\",\"q\",\"Q\",\"t\",\"T\",\"s\",\"S\",\"a\",\"A\"];e=e.replace(new RegExp(\" \",\"g\"),\",\");for(let p=0;p<n.length;p++)e=e.replace(new RegExp(n[p],\"g\"),\"|\"+n[p]);const i=e.split(\"|\"),s=[],a=[];let o=0,h=0;const f=/([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:e[-+]?\\d+)?)/gi;let u;for(let p=1;p<i.length;p++){let g=i[p],_=g.charAt(0);for(g=g.slice(1),a.length=0;u=f.exec(g);)a.push(u[0]);let y=[],k=_===\"A\"||_===\"a\"?0:-1;for(let w=0,C=a.length;w<C;w++){const T=a[w];if(T===\"00\"){y.push(0,0),k>=0&&(k+=2,k>=7&&(k-=7));continue}if(k>=0){if(k===3){if(/^[01]{2}\\d+(?:\\.\\d+)?$/.test(T)){y.push(parseInt(T[0],10)),y.push(parseInt(T[1],10)),y.push(parseFloat(T.slice(2))),k+=3,k>=7&&(k-=7);continue}if(T===\"11\"||T===\"10\"||T===\"01\"){y.push(parseInt(T[0],10)),y.push(parseInt(T[1],10)),k+=2,k>=7&&(k-=7);continue}if(T===\"0\"||T===\"1\"){y.push(parseInt(T,10)),k+=1,k>=7&&(k-=7);continue}}else if(k===4){if(/^[01]\\d+(?:\\.\\d+)?$/.test(T)){y.push(parseInt(T[0],10)),y.push(parseFloat(T.slice(1))),k+=2,k>=7&&(k-=7);continue}if(T===\"0\"||T===\"1\"){y.push(parseInt(T,10)),k+=1,k>=7&&(k-=7);continue}}const E=parseFloat(T);isNaN(E)?y.push(0):y.push(E),k+=1,k>=7&&(k-=7)}else{const E=parseFloat(T);isNaN(E)?y.push(0):y.push(E)}}for(;y.length>0&&!isNaN(y[0]);){let w=\"\",C=[];const T=o,E=h;let M,j,N,B,R,D,q,at,G,st;switch(_){case\"l\":o+=y.shift(),h+=y.shift(),w=\"L\",C.push(o,h);break;case\"L\":o=y.shift(),h=y.shift(),C.push(o,h);break;case\"m\":const it=y.shift(),Q=y.shift();if(o+=it,h+=Q,w=\"M\",s.length>2&&s[s.length-1].command===\"z\"){for(let $=s.length-2;$>=0;$--)if(s[$].command===\"M\"){o=s[$].points[0]+it,h=s[$].points[1]+Q;break}}C.push(o,h),_=\"l\";break;case\"M\":o=y.shift(),h=y.shift(),w=\"M\",C.push(o,h),_=\"L\";break;case\"h\":o+=y.shift(),w=\"L\",C.push(o,h);break;case\"H\":o=y.shift(),w=\"L\",C.push(o,h);break;case\"v\":h+=y.shift(),w=\"L\",C.push(o,h);break;case\"V\":h=y.shift(),w=\"L\",C.push(o,h);break;case\"C\":C.push(y.shift(),y.shift(),y.shift(),y.shift()),o=y.shift(),h=y.shift(),C.push(o,h);break;case\"c\":C.push(o+y.shift(),h+y.shift(),o+y.shift(),h+y.shift()),o+=y.shift(),h+=y.shift(),w=\"C\",C.push(o,h);break;case\"S\":j=o,N=h,M=s[s.length-1],M.command===\"C\"&&(j=o+(o-M.points[2]),N=h+(h-M.points[3])),C.push(j,N,y.shift(),y.shift()),o=y.shift(),h=y.shift(),w=\"C\",C.push(o,h);break;case\"s\":j=o,N=h,M=s[s.length-1],M.command===\"C\"&&(j=o+(o-M.points[2]),N=h+(h-M.points[3])),C.push(j,N,o+y.shift(),h+y.shift()),o+=y.shift(),h+=y.shift(),w=\"C\",C.push(o,h);break;case\"Q\":C.push(y.shift(),y.shift()),o=y.shift(),h=y.shift(),C.push(o,h);break;case\"q\":C.push(o+y.shift(),h+y.shift()),o+=y.shift(),h+=y.shift(),w=\"Q\",C.push(o,h);break;case\"T\":j=o,N=h,M=s[s.length-1],M.command===\"Q\"&&(j=o+(o-M.points[0]),N=h+(h-M.points[1])),o=y.shift(),h=y.shift(),w=\"Q\",C.push(j,N,o,h);break;case\"t\":j=o,N=h,M=s[s.length-1],M.command===\"Q\"&&(j=o+(o-M.points[0]),N=h+(h-M.points[1])),o+=y.shift(),h+=y.shift(),w=\"Q\",C.push(j,N,o,h);break;case\"A\":B=y.shift(),R=y.shift(),D=y.shift(),q=y.shift(),at=y.shift(),G=o,st=h,o=y.shift(),h=y.shift(),w=\"A\",C=this.convertEndpointToCenterParameterization(G,st,o,h,q,at,B,R,D);break;case\"a\":B=y.shift(),R=y.shift(),D=y.shift(),q=y.shift(),at=y.shift(),G=o,st=h,o+=y.shift(),h+=y.shift(),w=\"A\",C=this.convertEndpointToCenterParameterization(G,st,o,h,q,at,B,R,D);break}s.push({command:w||_,points:C,start:{x:T,y:E},pathLength:this.calcLength(T,E,w||_,C)})}(_===\"z\"||_===\"Z\")&&s.push({command:\"z\",points:[],start:void 0,pathLength:0})}return s}static calcLength(t,e,n,i){let s,a,o,h;const f=Ct;switch(n){case\"L\":return f.getLineLength(t,e,i[0],i[1]);case\"C\":return nr([t,i[0],i[2],i[4]],[e,i[1],i[3],i[5]],1);case\"Q\":return ir([t,i[0],i[2]],[e,i[1],i[3]],1);case\"A\":s=0;const u=i[4],p=i[5],g=i[4]+p;let _=Math.PI/180;if(Math.abs(u-g)<_&&(_=Math.abs(u-g)),a=f.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],u,0),p<0)for(h=u-_;h>g;h-=_)o=f.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],h,0),s+=f.getLineLength(a.x,a.y,o.x,o.y),a=o;else for(h=u+_;h<g;h+=_)o=f.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],h,0),s+=f.getLineLength(a.x,a.y,o.x,o.y),a=o;return o=f.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],g,0),s+=f.getLineLength(a.x,a.y,o.x,o.y),s}return 0}static convertEndpointToCenterParameterization(t,e,n,i,s,a,o,h,f){const u=f*(Math.PI/180),p=Math.cos(u)*(t-n)/2+Math.sin(u)*(e-i)/2,g=-1*Math.sin(u)*(t-n)/2+Math.cos(u)*(e-i)/2,_=p*p/(o*o)+g*g/(h*h);_>1&&(o*=Math.sqrt(_),h*=Math.sqrt(_));let y=Math.sqrt((o*o*(h*h)-o*o*(g*g)-h*h*(p*p))/(o*o*(g*g)+h*h*(p*p)));s===a&&(y*=-1),isNaN(y)&&(y=0);const k=y*o*g/h,w=y*-h*p/o,C=(t+n)/2+Math.cos(u)*k-Math.sin(u)*w,T=(e+i)/2+Math.sin(u)*k+Math.cos(u)*w,E=function(q){return Math.sqrt(q[0]*q[0]+q[1]*q[1])},M=function(q,at){return(q[0]*at[0]+q[1]*at[1])/(E(q)*E(at))},j=function(q,at){return(q[0]*at[1]<q[1]*at[0]?-1:1)*Math.acos(M(q,at))},N=j([1,0],[(p-k)/o,(g-w)/h]),B=[(p-k)/o,(g-w)/h],R=[(-1*p-k)/o,(-1*g-w)/h];let D=j(B,R);return M(B,R)<=-1&&(D=Math.PI),M(B,R)>=1&&(D=0),a===0&&D>0&&(D=D-2*Math.PI),a===1&&D<0&&(D=D+2*Math.PI),[C,T,o,h,N,D,u,a]}}Ct.prototype.className=\"Path\";Ct.prototype._attrsAffectingSize=[\"data\"];Tt(Ct);S.addGetterSetter(Ct,\"data\");class De extends ce{_sceneFunc(t){super._sceneFunc(t);const e=Math.PI*2,n=this.points();let i=n;const s=this.tension()!==0&&n.length>4;s&&(i=this.getTensionPoints());const a=this.pointerLength(),o=n.length;let h,f;if(s){const g=[i[i.length-4],i[i.length-3],i[i.length-2],i[i.length-1],n[o-2],n[o-1]],_=Ct.calcLength(i[i.length-4],i[i.length-3],\"C\",g),y=Ct.getPointOnQuadraticBezier(Math.min(1,1-a/_),g[0],g[1],g[2],g[3],g[4],g[5]);h=n[o-2]-y.x,f=n[o-1]-y.y}else h=n[o-2]-n[o-4],f=n[o-1]-n[o-3];const u=(Math.atan2(f,h)+e)%e,p=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(n[o-2],n[o-1]),t.rotate(u),t.moveTo(0,0),t.lineTo(-a,p/2),t.lineTo(-a,-p/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(n[0],n[1]),s?(h=(i[0]+i[2])/2-n[0],f=(i[1]+i[3])/2-n[1]):(h=n[2]-n[0],f=n[3]-n[1]),t.rotate((Math.atan2(-f,-h)+e)%e),t.moveTo(0,0),t.lineTo(-a,p/2),t.lineTo(-a,-p/2),t.closePath(),t.restore(),this.__fillStroke(t))}__fillStroke(t){const e=this.dashEnabled();e&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),e&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),e=this.pointerWidth()/2;return{x:t.x,y:t.y-e,width:t.width,height:t.height+e*2}}}De.prototype.className=\"Arrow\";Tt(De);S.addGetterSetter(De,\"pointerLength\",10,W());S.addGetterSetter(De,\"pointerWidth\",10,W());S.addGetterSetter(De,\"pointerAtBeginning\",!1);S.addGetterSetter(De,\"pointerAtEnding\",!0);class Ve extends F{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.attrs.radius||0,0,Math.PI*2,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius()!==t/2&&this.radius(t/2)}setHeight(t){this.radius()!==t/2&&this.radius(t/2)}}Ve.prototype._centroid=!0;Ve.prototype.className=\"Circle\";Ve.prototype._attrsAffectingSize=[\"radius\"];Tt(Ve);S.addGetterSetter(Ve,\"radius\",0,W());class Se extends F{_sceneFunc(t){const e=this.radiusX(),n=this.radiusY();t.beginPath(),t.save(),e!==n&&t.scale(1,n/e),t.arc(0,0,e,0,Math.PI*2,!1),t.restore(),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radiusX()*2}getHeight(){return this.radiusY()*2}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}Se.prototype.className=\"Ellipse\";Se.prototype._centroid=!0;Se.prototype._attrsAffectingSize=[\"radiusX\",\"radiusY\"];Tt(Se);S.addComponentsGetterSetter(Se,\"radius\",[\"x\",\"y\"]);S.addGetterSetter(Se,\"radiusX\",0,W());S.addGetterSetter(Se,\"radiusY\",0,W());let ne=class Wr extends F{constructor(t){super(t),this._loadListener=()=>{this._requestDraw()},this.on(\"imageChange.konva\",e=>{this._removeImageLoad(e.oldVal),this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){const t=this.image();t&&t.complete||t&&t.readyState===4||t&&t.addEventListener&&t.addEventListener(\"load\",this._loadListener)}_removeImageLoad(t){t&&t.removeEventListener&&t.removeEventListener(\"load\",this._loadListener)}destroy(){return this._removeImageLoad(this.image()),super.destroy(),this}_useBufferCanvas(){const t=!!this.cornerRadius(),e=this.hasShadow();return t&&e?!0:super._useBufferCanvas(!0)}_sceneFunc(t){const e=this.getWidth(),n=this.getHeight(),i=this.cornerRadius(),s=this.attrs.image;let a;if(s){const o=this.attrs.cropWidth,h=this.attrs.cropHeight;o&&h?a=[s,this.cropX(),this.cropY(),o,h,0,0,e,n]:a=[s,0,0,e,n]}(this.hasFill()||this.hasStroke()||i)&&(t.beginPath(),i?P.drawRoundedRectPath(t,e,n,i):t.rect(0,0,e,n),t.closePath(),t.fillStrokeShape(this)),s&&(i&&t.clip(),t.drawImage.apply(t,a))}_hitFunc(t){const e=this.width(),n=this.height(),i=this.cornerRadius();t.beginPath(),i?P.drawRoundedRectPath(t,e,n,i):t.rect(0,0,e,n),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,e,n;return(n=(t=this.attrs.width)!==null&&t!==void 0?t:(e=this.image())===null||e===void 0?void 0:e.width)!==null&&n!==void 0?n:0}getHeight(){var t,e,n;return(n=(t=this.attrs.height)!==null&&t!==void 0?t:(e=this.image())===null||e===void 0?void 0:e.height)!==null&&n!==void 0?n:0}static fromURL(t,e,n=null){const i=P.createImageElement();i.onload=function(){const s=new Wr({image:i});e(s)},i.onerror=n,i.crossOrigin=\"Anonymous\",i.src=t}};ne.prototype.className=\"Image\";ne.prototype._attrsAffectingSize=[\"image\"];Tt(ne);S.addGetterSetter(ne,\"cornerRadius\",0,di(4));S.addGetterSetter(ne,\"image\");S.addComponentsGetterSetter(ne,\"crop\",[\"x\",\"y\",\"width\",\"height\"]);S.addGetterSetter(ne,\"cropX\",0,W());S.addGetterSetter(ne,\"cropY\",0,W());S.addGetterSetter(ne,\"cropWidth\",0,W());S.addGetterSetter(ne,\"cropHeight\",0,W());const Ur=[\"fontFamily\",\"fontSize\",\"fontStyle\",\"padding\",\"lineHeight\",\"text\",\"width\",\"height\",\"pointerDirection\",\"pointerWidth\",\"pointerHeight\"],Ol=\"Change.konva\",Il=\"none\",cs=\"up\",ds=\"right\",us=\"down\",fs=\"left\",Dl=Ur.length;class ws extends $e{constructor(t){super(t),this.on(\"add.konva\",function(e){this._addListeners(e.child),this._sync()})}getText(){return this.find(\"Text\")[0]}getTag(){return this.find(\"Tag\")[0]}_addListeners(t){let e=this,n;const i=function(){e._sync()};for(n=0;n<Dl;n++)t.on(Ur[n]+Ol,i)}getWidth(){return this.getText().width()}getHeight(){return this.getText().height()}_sync(){let t=this.getText(),e=this.getTag(),n,i,s,a,o,h,f;if(t&&e){switch(n=t.width(),i=t.height(),s=e.pointerDirection(),a=e.pointerWidth(),f=e.pointerHeight(),o=0,h=0,s){case cs:o=n/2,h=-1*f;break;case ds:o=n+a,h=i/2;break;case us:o=n/2,h=i+f;break;case fs:o=-1*a,h=i/2;break}e.setAttrs({x:-1*o,y:-1*h,width:n,height:i}),t.setAttrs({x:-1*o,y:-1*h})}}}ws.prototype.className=\"Label\";Tt(ws);class Ne extends F{_sceneFunc(t){const e=this.width(),n=this.height(),i=this.pointerDirection(),s=this.pointerWidth(),a=this.pointerHeight(),o=this.cornerRadius();let h=0,f=0,u=0,p=0;typeof o==\"number\"?h=f=u=p=Math.min(o,e/2,n/2):(h=Math.min(o[0]||0,e/2,n/2),f=Math.min(o[1]||0,e/2,n/2),p=Math.min(o[2]||0,e/2,n/2),u=Math.min(o[3]||0,e/2,n/2)),t.beginPath(),t.moveTo(h,0),i===cs&&(t.lineTo((e-s)/2,0),t.lineTo(e/2,-1*a),t.lineTo((e+s)/2,0)),t.lineTo(e-f,0),t.arc(e-f,f,f,Math.PI*3/2,0,!1),i===ds&&(t.lineTo(e,(n-a)/2),t.lineTo(e+s,n/2),t.lineTo(e,(n+a)/2)),t.lineTo(e,n-p),t.arc(e-p,n-p,p,0,Math.PI/2,!1),i===us&&(t.lineTo((e+s)/2,n),t.lineTo(e/2,n+a),t.lineTo((e-s)/2,n)),t.lineTo(u,n),t.arc(u,n-u,u,Math.PI/2,Math.PI,!1),i===fs&&(t.lineTo(0,(n+a)/2),t.lineTo(-1*s,n/2),t.lineTo(0,(n-a)/2)),t.lineTo(0,h),t.arc(h,h,h,Math.PI,Math.PI*3/2,!1),t.closePath(),t.fillStrokeShape(this)}getSelfRect(){let t=0,e=0,n=this.pointerWidth(),i=this.pointerHeight(),s=this.pointerDirection(),a=this.width(),o=this.height();return s===cs?(e-=i,o+=i):s===us?o+=i:s===fs?(t-=n*1.5,a+=n):s===ds&&(a+=n*1.5),{x:t,y:e,width:a,height:o}}}Ne.prototype.className=\"Tag\";Tt(Ne);S.addGetterSetter(Ne,\"pointerDirection\",Il);S.addGetterSetter(Ne,\"pointerWidth\",0,W());S.addGetterSetter(Ne,\"pointerHeight\",0,W());S.addGetterSetter(Ne,\"cornerRadius\",0,di(4));class Tn extends F{_sceneFunc(t){const e=this.cornerRadius(),n=this.width(),i=this.height();t.beginPath(),e?P.drawRoundedRectPath(t,n,i,e):t.rect(0,0,n,i),t.closePath(),t.fillStrokeShape(this)}}Tn.prototype.className=\"Rect\";Tt(Tn);S.addGetterSetter(Tn,\"cornerRadius\",0,di(4));class xe extends F{_sceneFunc(t){const e=this._getPoints(),n=this.radius(),i=this.sides(),s=this.cornerRadius();if(t.beginPath(),s)P.drawRoundedPolygonPath(t,e,i,n,s);else{t.moveTo(e[0].x,e[0].y);for(let a=1;a<e.length;a++)t.lineTo(e[a].x,e[a].y)}t.closePath(),t.fillStrokeShape(this)}_getPoints(){const t=this.attrs.sides,e=this.attrs.radius||0,n=[];for(let i=0;i<t;i++)n.push({x:e*Math.sin(i*2*Math.PI/t),y:-1*e*Math.cos(i*2*Math.PI/t)});return n}getSelfRect(){const t=this._getPoints();let e=t[0].x,n=t[0].x,i=t[0].y,s=t[0].y;return t.forEach(a=>{e=Math.min(e,a.x),n=Math.max(n,a.x),i=Math.min(i,a.y),s=Math.max(s,a.y)}),{x:e,y:i,width:n-e,height:s-i}}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}xe.prototype.className=\"RegularPolygon\";xe.prototype._centroid=!0;xe.prototype._attrsAffectingSize=[\"radius\"];Tt(xe);S.addGetterSetter(xe,\"radius\",0,W());S.addGetterSetter(xe,\"sides\",0,W());S.addGetterSetter(xe,\"cornerRadius\",0,di(4));const rr=Math.PI*2;class Ge extends F{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.innerRadius(),0,rr,!1),t.moveTo(this.outerRadius(),0),t.arc(0,0,this.outerRadius(),rr,0,!0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}Ge.prototype.className=\"Ring\";Ge.prototype._centroid=!0;Ge.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\"];Tt(Ge);S.addGetterSetter(Ge,\"innerRadius\",0,W());S.addGetterSetter(Ge,\"outerRadius\",0,W());class se extends F{constructor(t){super(t),this._updated=!0,this.anim=new Jt(()=>{const e=this._updated;return this._updated=!1,e}),this.on(\"animationChange.konva\",function(){this.frameIndex(0)}),this.on(\"frameIndexChange.konva\",function(){this._updated=!0}),this.on(\"frameRateChange.konva\",function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_sceneFunc(t){const e=this.animation(),n=this.frameIndex(),i=n*4,s=this.animations()[e],a=this.frameOffsets(),o=s[i+0],h=s[i+1],f=s[i+2],u=s[i+3],p=this.image();if((this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(0,0,f,u),t.closePath(),t.fillStrokeShape(this)),p)if(a){const g=a[e],_=n*2;t.drawImage(p,o,h,f,u,g[_+0],g[_+1],f,u)}else t.drawImage(p,o,h,f,u,0,0,f,u)}_hitFunc(t){const e=this.animation(),n=this.frameIndex(),i=n*4,s=this.animations()[e],a=this.frameOffsets(),o=s[i+2],h=s[i+3];if(t.beginPath(),a){const f=a[e],u=n*2;t.rect(f[u+0],f[u+1],o,h)}else t.rect(0,0,o,h);t.closePath(),t.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){const t=this;this.interval=setInterval(function(){t._updateIndex()},1e3/this.frameRate())}start(){if(this.isRunning())return;const t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){const t=this.frameIndex(),e=this.animation(),n=this.animations(),i=n[e],s=i.length/4;t<s-1?this.frameIndex(t+1):this.frameIndex(0)}}se.prototype.className=\"Sprite\";Tt(se);S.addGetterSetter(se,\"animation\");S.addGetterSetter(se,\"animations\");S.addGetterSetter(se,\"frameOffsets\");S.addGetterSetter(se,\"image\");S.addGetterSetter(se,\"frameIndex\",0,W());S.addGetterSetter(se,\"frameRate\",17,W());S.backCompat(se,{index:\"frameIndex\",getIndex:\"getFrameIndex\",setIndex:\"setFrameIndex\"});class Ce extends F{_sceneFunc(t){const e=this.innerRadius(),n=this.outerRadius(),i=this.numPoints();t.beginPath(),t.moveTo(0,0-n);for(let s=1;s<i*2;s++){const a=s%2===0?n:e,o=a*Math.sin(s*Math.PI/i),h=-1*a*Math.cos(s*Math.PI/i);t.lineTo(o,h)}t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}Ce.prototype.className=\"Star\";Ce.prototype._centroid=!0;Ce.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\"];Tt(Ce);S.addGetterSetter(Ce,\"numPoints\",5,W());S.addGetterSetter(Ce,\"innerRadius\",0,W());S.addGetterSetter(Ce,\"outerRadius\",0,W());function ve(r){return[...r].reduce((t,e,n,i)=>{if(new RegExp(\"\\\\p{Emoji}\",\"u\").test(e)){const s=i[n+1];s&&new RegExp(\"\\\\p{Emoji_Modifier}|\\\\u200D\",\"u\").test(s)?(t.push(e+s),i[n+1]=\"\"):t.push(e)}else new RegExp(\"\\\\p{Regional_Indicator}{2}\",\"u\").test(e+(i[n+1]||\"\"))?t.push(e+i[n+1]):n>0&&new RegExp(\"\\\\p{Mn}|\\\\p{Me}|\\\\p{Mc}\",\"u\").test(e)?t[t.length-1]+=e:e&&t.push(e);return t},[])}const Ye=\"auto\",Nl=\"center\",Xr=\"inherit\",cn=\"justify\",Gl=\"Change.konva\",Fl=\"2d\",ar=\"-\",Yr=\"left\",Hl=\"text\",Bl=\"Text\",zl=\"top\",jl=\"bottom\",or=\"middle\",qr=\"normal\",Wl=\"px \",Zn=\" \",Ul=\"right\",lr=\"rtl\",Xl=\"word\",Yl=\"char\",hr=\"none\",Zi=\"…\",$r=[\"direction\",\"fontFamily\",\"fontSize\",\"fontStyle\",\"fontVariant\",\"padding\",\"align\",\"verticalAlign\",\"lineHeight\",\"text\",\"width\",\"height\",\"wrap\",\"ellipsis\",\"letterSpacing\"],ql=$r.length;function $l(r){return r.split(\",\").map(t=>{t=t.trim();const e=t.indexOf(\" \")>=0,n=t.indexOf('\"')>=0||t.indexOf(\"'\")>=0;return e&&!n&&(t=`\"${t}\"`),t}).join(\", \")}let ti;function ts(){return ti||(ti=P.createCanvasElement().getContext(Fl),ti)}function Vl(r){r.fillText(this._partialText,this._partialTextX,this._partialTextY)}function Kl(r){r.setAttr(\"miterLimit\",2),r.strokeText(this._partialText,this._partialTextX,this._partialTextY)}function Jl(r){return r=r||{},!r.fillLinearGradientColorStops&&!r.fillRadialGradientColorStops&&!r.fillPatternImage&&(r.fill=r.fill||\"black\"),r}class kt extends F{constructor(t){super(Jl(t)),this._partialTextX=0,this._partialTextY=0;for(let e=0;e<ql;e++)this.on($r[e]+Gl,this._setTextData);this._setTextData()}_sceneFunc(t){var e,n;const i=this.textArr,s=i.length;if(!this.text())return;let a=this.padding(),o=this.fontSize(),h=this.lineHeight()*o,f=this.verticalAlign(),u=this.direction(),p=0,g=this.align(),_=this.getWidth(),y=this.letterSpacing(),k=this.charRenderFunc(),w=this.fill(),C=this.textDecoration(),T=this.underlineOffset(),E=C.indexOf(\"underline\")!==-1,M=C.indexOf(\"line-through\")!==-1,j;u=u===Xr?t.direction:u;let N=h/2,B=or;if(!Y.legacyTextRendering){const R=this.measureSize(\"M\");B=\"alphabetic\";const D=(e=R.fontBoundingBoxAscent)!==null&&e!==void 0?e:R.actualBoundingBoxAscent,q=(n=R.fontBoundingBoxDescent)!==null&&n!==void 0?n:R.actualBoundingBoxDescent;N=(D-q)/2+h/2}for(u===lr&&t.setAttr(\"direction\",u),t.setAttr(\"font\",this._getContextFont()),t.setAttr(\"textBaseline\",B),t.setAttr(\"textAlign\",Yr),f===or?p=(this.getHeight()-s*h-a*2)/2:f===jl&&(p=this.getHeight()-s*h-a*2),t.translate(a,p+a),j=0;j<s;j++){let R=0,D=0;const q=i[j],at=q.text,G=q.width,st=q.lastInParagraph;if(t.save(),g===Ul?R+=_-G-a*2:g===Nl&&(R+=(_-G-a*2)/2),E){t.save(),t.beginPath();const Q=T??(Y.legacyTextRendering?Math.round(o/2):Math.round(o/4)),$=R,gt=N+D+Q;t.moveTo($,gt);const Z=g===cn&&!st?_-a*2:G;t.lineTo($+Math.round(Z),gt),t.lineWidth=o/15;const ct=this._getLinearGradient();t.strokeStyle=ct||w,t.stroke(),t.restore()}const it=R;if(u!==lr&&(y!==0||g===cn||k)){const Q=at.split(\" \").length-1,$=ve(at);for(let gt=0;gt<$.length;gt++){const Z=$[gt];if(Z===\" \"&&!st&&g===cn&&(R+=(_-a*2-G)/Q),this._partialTextX=R,this._partialTextY=N+D,this._partialText=Z,k){t.save();const St=i.slice(0,j).reduce((ut,Lt)=>ut+ve(Lt.text).length,0),dt=gt+St;k({char:Z,index:dt,x:R,y:N+D,lineIndex:j,column:gt,isLastInLine:st,width:this.measureSize(Z).width,context:t})}t.fillStrokeShape(this),k&&t.restore(),R+=this.measureSize(Z).width+y}}else y!==0&&t.setAttr(\"letterSpacing\",`${y}px`),this._partialTextX=R,this._partialTextY=N+D,this._partialText=at,t.fillStrokeShape(this);if(M){t.save(),t.beginPath();const Q=Y.legacyTextRendering?0:-Math.round(o/4),$=it;t.moveTo($,N+D+Q);const gt=g===cn&&!st?_-a*2:G;t.lineTo($+Math.round(gt),N+D+Q),t.lineWidth=o/15;const Z=this._getLinearGradient();t.strokeStyle=Z||w,t.stroke(),t.restore()}t.restore(),s>1&&(N+=h)}}_hitFunc(t){const e=this.getWidth(),n=this.getHeight();t.beginPath(),t.rect(0,0,e,n),t.closePath(),t.fillStrokeShape(this)}setText(t){const e=P._isString(t)?t:t==null?\"\":t+\"\";return this._setAttr(Hl,e),this}getWidth(){return this.attrs.width===Ye||this.attrs.width===void 0?this.getTextWidth()+this.padding()*2:this.attrs.width}getHeight(){return this.attrs.height===Ye||this.attrs.height===void 0?this.fontSize()*this.textArr.length*this.lineHeight()+this.padding()*2:this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return P.warn(\"text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.\"),this.textHeight}measureSize(t){var e,n,i,s,a,o,h,f,u,p,g;let _=ts(),y=this.fontSize(),k;_.save(),_.font=this._getContextFont(),k=_.measureText(t),_.restore();const w=y/100;return{actualBoundingBoxAscent:(e=k.actualBoundingBoxAscent)!==null&&e!==void 0?e:71.58203125*w,actualBoundingBoxDescent:(n=k.actualBoundingBoxDescent)!==null&&n!==void 0?n:0,actualBoundingBoxLeft:(i=k.actualBoundingBoxLeft)!==null&&i!==void 0?i:-7.421875*w,actualBoundingBoxRight:(s=k.actualBoundingBoxRight)!==null&&s!==void 0?s:75.732421875*w,alphabeticBaseline:(a=k.alphabeticBaseline)!==null&&a!==void 0?a:0,emHeightAscent:(o=k.emHeightAscent)!==null&&o!==void 0?o:100*w,emHeightDescent:(h=k.emHeightDescent)!==null&&h!==void 0?h:-20*w,fontBoundingBoxAscent:(f=k.fontBoundingBoxAscent)!==null&&f!==void 0?f:91*w,fontBoundingBoxDescent:(u=k.fontBoundingBoxDescent)!==null&&u!==void 0?u:21*w,hangingBaseline:(p=k.hangingBaseline)!==null&&p!==void 0?p:72.80000305175781*w,ideographicBaseline:(g=k.ideographicBaseline)!==null&&g!==void 0?g:-21*w,width:k.width,height:y}}_getContextFont(){return this.fontStyle()+Zn+this.fontVariant()+Zn+(this.fontSize()+Wl)+$l(this.fontFamily())}_addTextLine(t){this.align()===cn&&(t=t.trim());const n=this._getTextWidth(t);return this.textArr.push({text:t,width:n,lastInParagraph:!1})}_getTextWidth(t){const e=this.letterSpacing(),n=t.length;return ts().measureText(t).width+e*n}_setTextData(){let t=this.text().split(`\n`),e=+this.fontSize(),n=0,i=this.lineHeight()*e,s=this.attrs.width,a=this.attrs.height,o=s!==Ye&&s!==void 0,h=a!==Ye&&a!==void 0,f=this.padding(),u=s-f*2,p=a-f*2,g=0,_=this.wrap(),y=_!==hr,k=_!==Yl&&y,w=this.ellipsis();this.textArr=[],ts().font=this._getContextFont();const C=w?this._getTextWidth(Zi):0;for(let T=0,E=t.length;T<E;++T){let M=t[T],j=this._getTextWidth(M);if(o&&j>u)for(;M.length>0;){let N=0,B=ve(M).length,R=\"\",D=0;for(;N<B;){const q=N+B>>>1,at=ve(M),G=at.slice(0,q+1).join(\"\"),st=this._getTextWidth(G);(w&&h&&g+i>p?st+C:st)<=u?(N=q+1,R=G,D=st):B=q}if(R){if(k){const G=ve(M),st=ve(R),it=G[st.length],Q=it===Zn||it===ar;let $;if(Q&&D<=u)$=st.length;else{const gt=st.lastIndexOf(Zn),Z=st.lastIndexOf(ar);$=Math.max(gt,Z)+1}$>0&&(N=$,R=G.slice(0,N).join(\"\"),D=this._getTextWidth(R))}if(R=R.trimRight(),this._addTextLine(R),n=Math.max(n,D),g+=i,this._shouldHandleEllipsis(g)){this._tryToAddEllipsisToLastLine();break}if(M=ve(M).slice(N).join(\"\").trimLeft(),M.length>0&&(j=this._getTextWidth(M),j<=u)){this._addTextLine(M),g+=i,n=Math.max(n,j);break}}else break}else this._addTextLine(M),g+=i,n=Math.max(n,j),this._shouldHandleEllipsis(g)&&T<E-1&&this._tryToAddEllipsisToLastLine();if(this.textArr[this.textArr.length-1]&&(this.textArr[this.textArr.length-1].lastInParagraph=!0),h&&g+i>p)break}this.textHeight=e,this.textWidth=n}_shouldHandleEllipsis(t){const e=+this.fontSize(),n=this.lineHeight()*e,i=this.attrs.height,s=i!==Ye&&i!==void 0,a=this.padding(),o=i-a*2;return!(this.wrap()!==hr)||s&&t+n>o}_tryToAddEllipsisToLastLine(){const t=this.attrs.width,e=t!==Ye&&t!==void 0,n=this.padding(),i=t-n*2,s=this.ellipsis(),a=this.textArr[this.textArr.length-1];!a||!s||(e&&(this._getTextWidth(a.text+Zi)<i||(a.text=a.text.slice(0,a.text.length-3))),this.textArr.splice(this.textArr.length-1,1),this._addTextLine(a.text+Zi))}getStrokeScaleEnabled(){return!0}_useBufferCanvas(){const t=this.textDecoration().indexOf(\"underline\")!==-1||this.textDecoration().indexOf(\"line-through\")!==-1,e=this.hasShadow();return t&&e?!0:super._useBufferCanvas()}}kt.prototype._fillFunc=Vl;kt.prototype._strokeFunc=Kl;kt.prototype.className=Bl;kt.prototype._attrsAffectingSize=[\"text\",\"fontSize\",\"padding\",\"wrap\",\"lineHeight\",\"letterSpacing\"];Tt(kt);S.overWriteSetter(kt,\"width\",ys());S.overWriteSetter(kt,\"height\",ys());S.addGetterSetter(kt,\"direction\",Xr);S.addGetterSetter(kt,\"fontFamily\",\"Arial\");S.addGetterSetter(kt,\"fontSize\",12,W());S.addGetterSetter(kt,\"fontStyle\",qr);S.addGetterSetter(kt,\"fontVariant\",qr);S.addGetterSetter(kt,\"padding\",0,W());S.addGetterSetter(kt,\"align\",Yr);S.addGetterSetter(kt,\"verticalAlign\",zl);S.addGetterSetter(kt,\"lineHeight\",1,W());S.addGetterSetter(kt,\"wrap\",Xl);S.addGetterSetter(kt,\"ellipsis\",!1,ee());S.addGetterSetter(kt,\"letterSpacing\",0,W());S.addGetterSetter(kt,\"text\",\"\",Oe());S.addGetterSetter(kt,\"textDecoration\",\"\");S.addGetterSetter(kt,\"underlineOffset\",void 0,W());S.addGetterSetter(kt,\"charRenderFunc\",void 0);const Ql=\"\",Vr=\"normal\";function Kr(r){r.fillText(this.partialText,0,0)}function Jr(r){r.strokeText(this.partialText,0,0)}class Mt extends F{constructor(t){super(t),this.dummyCanvas=P.createCanvasElement(),this.dataArray=[],this._readDataAttribute(),this.on(\"dataChange.konva\",function(){this._readDataAttribute(),this._setTextData()}),this.on(\"textChange.konva alignChange.konva letterSpacingChange.konva kerningFuncChange.konva fontSizeChange.konva fontFamilyChange.konva\",this._setTextData),this._setTextData()}_getTextPathLength(){return Ct.getPathLength(this.dataArray)}_getPointAtLength(t){if(!this.attrs.data)return null;const e=this.pathLength;return t>e?null:Ct.getPointAtLengthOfDataArray(t,this.dataArray)}_readDataAttribute(){this.dataArray=Ct.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr(\"font\",this._getContextFont()),t.setAttr(\"textBaseline\",this.textBaseline()),t.setAttr(\"textAlign\",\"left\"),t.save();const e=this.textDecoration(),n=this.fill(),i=this.fontSize(),s=this.glyphInfo,a=e.indexOf(\"underline\")!==-1,o=e.indexOf(\"line-through\")!==-1;a&&t.beginPath();for(let h=0;h<s.length;h++){t.save();const f=s[h].p0;t.translate(f.x,f.y),t.rotate(s[h].rotation),this.partialText=s[h].text,t.fillStrokeShape(this),a&&(h===0&&t.moveTo(0,i/2+1),t.lineTo(s[h].width,i/2+1)),t.restore()}if(a&&(t.strokeStyle=n,t.lineWidth=i/20,t.stroke()),o){t.beginPath();for(let h=0;h<s.length;h++){t.save();const f=s[h].p0;t.translate(f.x,f.y),t.rotate(s[h].rotation),h===0&&t.moveTo(0,0),t.lineTo(s[h].width,0),t.restore()}t.strokeStyle=n,t.lineWidth=i/20,t.stroke()}t.restore()}_hitFunc(t){t.beginPath();const e=this.glyphInfo;if(e.length>=1){const n=e[0].p0;t.moveTo(n.x,n.y)}for(let n=0;n<e.length;n++){const i=e[n].p1;t.lineTo(i.x,i.y)}t.setAttr(\"lineWidth\",this.fontSize()),t.setAttr(\"strokeStyle\",this.colorKey),t.stroke()}getTextWidth(){return this.textWidth}getTextHeight(){return P.warn(\"text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.\"),this.textHeight}setText(t){return kt.prototype.setText.call(this,t)}_getContextFont(){return kt.prototype._getContextFont.call(this)}_getTextSize(t){const n=this.dummyCanvas.getContext(\"2d\");n.save(),n.font=this._getContextFont();const i=n.measureText(t);return n.restore(),{width:i.width,height:parseInt(`${this.fontSize()}`,10)}}_setTextData(){const t=ve(this.text()),e=[];let n=0;for(let p=0;p<t.length;p++)e.push({char:t[p],width:this._getTextSize(t[p]).width}),n+=e[p].width;const{height:i}=this._getTextSize(this.attrs.text);if(this.textWidth=n,this.textHeight=i,this.glyphInfo=[],!this.attrs.data)return null;const s=this.letterSpacing(),a=this.align(),o=this.kerningFunc(),h=Math.max(this.textWidth+((this.attrs.text||\"\").length-1)*s,0);let f=0;a===\"center\"&&(f=Math.max(0,this.pathLength/2-h/2)),a===\"right\"&&(f=Math.max(0,this.pathLength-h));let u=f;for(let p=0;p<e.length;p++){const g=this._getPointAtLength(u);if(!g)return;const _=e[p].char;let y=e[p].width+s;if(_===\" \"&&a===\"justify\"){const M=this.text().split(\" \").length-1;y+=(this.pathLength-h)/M}const k=this._getPointAtLength(u+y);if(!k)return;const w=Ct.getLineLength(g.x,g.y,k.x,k.y);let C=0;if(o)try{C=o(e[p-1].char,_)*this.fontSize()}catch{C=0}g.x+=C,k.x+=C,this.textWidth+=C;const T=Ct.getPointOnLine(C+w/2,g.x,g.y,k.x,k.y),E=Math.atan2(k.y-g.y,k.x-g.x);this.glyphInfo.push({transposeX:T.x,transposeY:T.y,text:t[p],rotation:E,p0:g,p1:k,width:w}),u+=y}}getSelfRect(){if(!this.glyphInfo.length)return{x:0,y:0,width:0,height:0};const t=[];this.glyphInfo.forEach(function(f){t.push(f.p0.x),t.push(f.p0.y),t.push(f.p1.x),t.push(f.p1.y)});let e=t[0]||0,n=t[0]||0,i=t[1]||0,s=t[1]||0,a,o;for(let f=0;f<t.length/2;f++)a=t[f*2],o=t[f*2+1],e=Math.min(e,a),n=Math.max(n,a),i=Math.min(i,o),s=Math.max(s,o);const h=this.fontSize();return{x:e-h/2,y:i-h/2,width:n-e+h,height:s-i+h}}destroy(){return P.releaseCanvas(this.dummyCanvas),super.destroy()}}Mt.prototype._fillFunc=Kr;Mt.prototype._strokeFunc=Jr;Mt.prototype._fillFuncHit=Kr;Mt.prototype._strokeFuncHit=Jr;Mt.prototype.className=\"TextPath\";Mt.prototype._attrsAffectingSize=[\"text\",\"fontSize\",\"data\"];Tt(Mt);S.addGetterSetter(Mt,\"data\");S.addGetterSetter(Mt,\"fontFamily\",\"Arial\");S.addGetterSetter(Mt,\"fontSize\",12,W());S.addGetterSetter(Mt,\"fontStyle\",Vr);S.addGetterSetter(Mt,\"align\",\"left\");S.addGetterSetter(Mt,\"letterSpacing\",0,W());S.addGetterSetter(Mt,\"textBaseline\",\"middle\");S.addGetterSetter(Mt,\"fontVariant\",Vr);S.addGetterSetter(Mt,\"text\",Ql);S.addGetterSetter(Mt,\"textDecoration\",\"\");S.addGetterSetter(Mt,\"kerningFunc\",void 0);const Qr=\"tr-konva\",Zl=[\"resizeEnabledChange\",\"rotateAnchorOffsetChange\",\"rotateAnchorAngleChange\",\"rotateEnabledChange\",\"enabledAnchorsChange\",\"anchorSizeChange\",\"borderEnabledChange\",\"borderStrokeChange\",\"borderStrokeWidthChange\",\"borderDashChange\",\"anchorStrokeChange\",\"anchorStrokeWidthChange\",\"anchorFillChange\",\"anchorCornerRadiusChange\",\"ignoreStrokeChange\",\"anchorStyleFuncChange\"].map(r=>r+`.${Qr}`).join(\" \"),cr=\"nodesRect\",th=[\"widthChange\",\"heightChange\",\"scaleXChange\",\"scaleYChange\",\"skewXChange\",\"skewYChange\",\"rotationChange\",\"offsetXChange\",\"offsetYChange\",\"transformsEnabledChange\",\"strokeWidthChange\",\"draggableChange\"],eh={\"top-left\":-45,\"top-center\":0,\"top-right\":45,\"middle-right\":-90,\"middle-left\":90,\"bottom-left\":-135,\"bottom-center\":180,\"bottom-right\":135},nh=\"ontouchstart\"in Y._global;function ih(r,t,e){if(r===\"rotater\")return e;t+=P.degToRad(eh[r]||0);const n=(P.radToDeg(t)%360+360)%360;return P._inRange(n,315+22.5,360)||P._inRange(n,0,22.5)?\"ns-resize\":P._inRange(n,45-22.5,45+22.5)?\"nesw-resize\":P._inRange(n,90-22.5,90+22.5)?\"ew-resize\":P._inRange(n,135-22.5,135+22.5)?\"nwse-resize\":P._inRange(n,180-22.5,180+22.5)?\"ns-resize\":P._inRange(n,225-22.5,225+22.5)?\"nesw-resize\":P._inRange(n,270-22.5,270+22.5)?\"ew-resize\":P._inRange(n,315-22.5,315+22.5)?\"nwse-resize\":(P.error(\"Transformer has unknown angle for cursor detection: \"+n),\"pointer\")}const oi=[\"top-left\",\"top-center\",\"top-right\",\"middle-right\",\"middle-left\",\"bottom-left\",\"bottom-center\",\"bottom-right\"];function sh(r){return{x:r.x+r.width/2*Math.cos(r.rotation)+r.height/2*Math.sin(-r.rotation),y:r.y+r.height/2*Math.cos(r.rotation)+r.width/2*Math.sin(r.rotation)}}function Zr(r,t,e){const n=e.x+(r.x-e.x)*Math.cos(t)-(r.y-e.y)*Math.sin(t),i=e.y+(r.x-e.x)*Math.sin(t)+(r.y-e.y)*Math.cos(t);return{...r,rotation:r.rotation+t,x:n,y:i}}function rh(r,t){const e=sh(r);return Zr(r,t,e)}function ah(r,t,e){let n=t;for(let i=0;i<r.length;i++){const s=Y.getAngle(r[i]),a=Math.abs(s-t)%(Math.PI*2);Math.min(a,Math.PI*2-a)<e&&(n=s)}return n}let gs=0;class ht extends $e{constructor(t){super(t),this._movingAnchorName=null,this._transforming=!1,this._createElements(),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this.update=this.update.bind(this),this.on(Zl,this.update),this.getNode()&&this.update()}attachTo(t){return this.setNode(t),this}setNode(t){return P.warn(\"tr.setNode(shape), tr.node(shape) and tr.attachTo(shape) methods are deprecated. Please use tr.nodes(nodesArray) instead.\"),this.setNodes([t])}getNode(){return this._nodes&&this._nodes[0]}_getEventNamespace(){return Qr+this._id}setNodes(t=[]){this._nodes&&this._nodes.length&&this.detach();const e=t.filter(i=>i.isAncestorOf(this)?(P.error(\"Konva.Transformer cannot be an a child of the node you are trying to attach\"),!1):!0);return this._nodes=t=e,t.length===1&&this.useSingleNodeRotation()?this.rotation(t[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(i=>{const s=()=>{this.nodes().length===1&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()};if(i._attrsAffectingSize.length){const a=i._attrsAffectingSize.map(o=>o+\"Change.\"+this._getEventNamespace()).join(\" \");i.on(a,s)}i.on(th.map(a=>a+`.${this._getEventNamespace()}`).join(\" \"),s),i.on(`absoluteTransformChange.${this._getEventNamespace()}`,s),this._proxyDrag(i)}),this._resetTransformCache(),this.findOne(\".top-left\")&&this.update(),this}_proxyDrag(t){let e;t.on(`dragstart.${this._getEventNamespace()}`,n=>{e=t.getAbsolutePosition(),!this.isDragging()&&t!==this.findOne(\".back\")&&this.startDrag(n,!1)}),t.on(`dragmove.${this._getEventNamespace()}`,n=>{if(!e)return;const i=t.getAbsolutePosition(),s=i.x-e.x,a=i.y-e.y;this.nodes().forEach(o=>{if(o===t||o.isDragging())return;const h=o.getAbsolutePosition();o.setAbsolutePosition({x:h.x+s,y:h.y+a}),o.startDrag(n)}),e=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(t=>{t.off(\".\"+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(cr),this._clearCache(\"transform\"),this._clearSelfAndDescendantCache(\"absoluteTransform\")}_getNodeRect(){return this._getCache(cr,this.__getNodeRect)}__getNodeShape(t,e=this.rotation(),n){const i=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),s=t.getAbsoluteScale(n),a=t.getAbsolutePosition(n),o=i.x*s.x-t.offsetX()*s.x,h=i.y*s.y-t.offsetY()*s.y,f=(Y.getAngle(t.getAbsoluteRotation())+Math.PI*2)%(Math.PI*2),u={x:a.x+o*Math.cos(f)+h*Math.sin(-f),y:a.y+h*Math.cos(f)+o*Math.sin(f),width:i.width*s.x,height:i.height*s.y,rotation:f};return Zr(u,-Y.getAngle(e),{x:0,y:0})}__getNodeRect(){if(!this.getNode())return{x:-1e8,y:-1e8,width:0,height:0,rotation:0};const e=[];this.nodes().map(f=>{const u=f.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),p=[{x:u.x,y:u.y},{x:u.x+u.width,y:u.y},{x:u.x+u.width,y:u.y+u.height},{x:u.x,y:u.y+u.height}],g=f.getAbsoluteTransform();p.forEach(function(_){const y=g.point(_);e.push(y)})});const n=new Xt;n.rotate(-Y.getAngle(this.rotation()));let i=1/0,s=1/0,a=-1/0,o=-1/0;e.forEach(function(f){const u=n.point(f);i===void 0&&(i=a=u.x,s=o=u.y),i=Math.min(i,u.x),s=Math.min(s,u.y),a=Math.max(a,u.x),o=Math.max(o,u.y)}),n.invert();const h=n.point({x:i,y:s});return{x:h.x,y:h.y,width:a-i,height:o-s,rotation:Y.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),oi.forEach(t=>{this._createAnchor(t)}),this._createAnchor(\"rotater\")}_createAnchor(t){const e=new Tn({stroke:\"rgb(0, 161, 255)\",fill:\"white\",strokeWidth:1,name:t+\" _anchor\",dragDistance:0,draggable:!0,hitStrokeWidth:nh?10:\"auto\"}),n=this;e.on(\"mousedown touchstart\",function(i){n._handleMouseDown(i)}),e.on(\"dragstart\",i=>{e.stopDrag(),i.cancelBubble=!0}),e.on(\"dragend\",i=>{i.cancelBubble=!0}),e.on(\"mouseenter\",()=>{const i=Y.getAngle(this.rotation()),s=this.rotateAnchorCursor(),a=ih(t,i,s);e.getStage().content&&(e.getStage().content.style.cursor=a),this._cursorChange=!0}),e.on(\"mouseout\",()=>{e.getStage().content&&(e.getStage().content.style.cursor=\"\"),this._cursorChange=!1}),this.add(e)}_createBack(){const t=new F({name:\"back\",width:0,height:0,sceneFunc(e,n){const i=n.getParent(),s=i.padding(),a=n.width(),o=n.height();if(e.beginPath(),e.rect(-s,-s,a+s*2,o+s*2),i.rotateEnabled()&&i.rotateLineVisible()){const h=i.rotateAnchorAngle(),f=i.rotateAnchorOffset(),u=P.degToRad(h),p=Math.sin(u),g=-Math.cos(u),_=a/2,y=o/2;let k=1/0;g<0?k=Math.min(k,-y/g):g>0&&(k=Math.min(k,(o-y)/g)),p<0?k=Math.min(k,-_/p):p>0&&(k=Math.min(k,(a-_)/p));const w=_+p*k,C=y+g*k,T=P._sign(o),E=w+p*f*T,M=C+g*f*T;e.moveTo(w,C),e.lineTo(E,M)}e.fillStrokeShape(n)},hitFunc:(e,n)=>{if(!this.shouldOverdrawWholeArea())return;const i=this.padding();e.beginPath(),e.rect(-i,-i,n.width()+i*2,n.height()+i*2),e.fillStrokeShape(n)}});this.add(t),this._proxyDrag(t),t.on(\"dragstart\",e=>{e.cancelBubble=!0}),t.on(\"dragmove\",e=>{e.cancelBubble=!0}),t.on(\"dragend\",e=>{e.cancelBubble=!0}),this.on(\"dragmove\",e=>{this.update()})}_handleMouseDown(t){if(this._transforming)return;this._movingAnchorName=t.target.name().split(\" \")[0];const e=this._getNodeRect(),n=e.width,i=e.height,s=Math.sqrt(Math.pow(n,2)+Math.pow(i,2));this.sin=Math.abs(i/s),this.cos=Math.abs(n/s),typeof window<\"u\"&&(window.addEventListener(\"mousemove\",this._handleMouseMove),window.addEventListener(\"touchmove\",this._handleMouseMove),window.addEventListener(\"mouseup\",this._handleMouseUp,!0),window.addEventListener(\"touchend\",this._handleMouseUp,!0)),this._transforming=!0;const a=t.target.getAbsolutePosition(),o=t.target.getStage().getPointerPosition();this._anchorDragOffset={x:o.x-a.x,y:o.y-a.y},gs++,this._fire(\"transformstart\",{evt:t.evt,target:this.getNode()}),this._nodes.forEach(h=>{h._fire(\"transformstart\",{evt:t.evt,target:h})})}_handleMouseMove(t){let e,n,i;const s=this.findOne(\".\"+this._movingAnchorName),a=s.getStage();a.setPointersPositions(t);const o=a.getPointerPosition();let h={x:o.x-this._anchorDragOffset.x,y:o.y-this._anchorDragOffset.y};const f=s.getAbsolutePosition();this.anchorDragBoundFunc()&&(h=this.anchorDragBoundFunc()(f,h,t)),s.setAbsolutePosition(h);const u=s.getAbsolutePosition();if(f.x===u.x&&f.y===u.y)return;if(this._movingAnchorName===\"rotater\"){const T=this._getNodeRect();e=s.x()-T.width/2,n=-s.y()+T.height/2;const E=Y.getAngle(this.rotateAnchorAngle());let M=Math.atan2(-n,e)+Math.PI/2-E;T.height<0&&(M-=Math.PI);const N=Y.getAngle(this.rotation())+M,B=Y.getAngle(this.rotationSnapTolerance()),D=ah(this.rotationSnaps(),N,B)-T.rotation,q=rh(T,D);this._fitNodesInto(q,t);return}const p=this.shiftBehavior();let g;p===\"inverted\"?g=this.keepRatio()&&!t.shiftKey:p===\"none\"?g=this.keepRatio():g=this.keepRatio()||t.shiftKey;let _=this.centeredScaling()||t.altKey;if(this._movingAnchorName===\"top-left\"){if(g){const T=_?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".bottom-right\").x(),y:this.findOne(\".bottom-right\").y()};i=Math.sqrt(Math.pow(T.x-s.x(),2)+Math.pow(T.y-s.y(),2));const E=this.findOne(\".top-left\").x()>T.x?-1:1,M=this.findOne(\".top-left\").y()>T.y?-1:1;e=i*this.cos*E,n=i*this.sin*M,this.findOne(\".top-left\").x(T.x-e),this.findOne(\".top-left\").y(T.y-n)}}else if(this._movingAnchorName===\"top-center\")this.findOne(\".top-left\").y(s.y());else if(this._movingAnchorName===\"top-right\"){if(g){const T=_?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".bottom-left\").x(),y:this.findOne(\".bottom-left\").y()};i=Math.sqrt(Math.pow(s.x()-T.x,2)+Math.pow(T.y-s.y(),2));const E=this.findOne(\".top-right\").x()<T.x?-1:1,M=this.findOne(\".top-right\").y()>T.y?-1:1;e=i*this.cos*E,n=i*this.sin*M,this.findOne(\".top-right\").x(T.x+e),this.findOne(\".top-right\").y(T.y-n)}var y=s.position();this.findOne(\".top-left\").y(y.y),this.findOne(\".bottom-right\").x(y.x)}else if(this._movingAnchorName===\"middle-left\")this.findOne(\".top-left\").x(s.x());else if(this._movingAnchorName===\"middle-right\")this.findOne(\".bottom-right\").x(s.x());else if(this._movingAnchorName===\"bottom-left\"){if(g){const T=_?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".top-right\").x(),y:this.findOne(\".top-right\").y()};i=Math.sqrt(Math.pow(T.x-s.x(),2)+Math.pow(s.y()-T.y,2));const E=T.x<s.x()?-1:1,M=s.y()<T.y?-1:1;e=i*this.cos*E,n=i*this.sin*M,s.x(T.x-e),s.y(T.y+n)}y=s.position(),this.findOne(\".top-left\").x(y.x),this.findOne(\".bottom-right\").y(y.y)}else if(this._movingAnchorName===\"bottom-center\")this.findOne(\".bottom-right\").y(s.y());else if(this._movingAnchorName===\"bottom-right\"){if(g){const T=_?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".top-left\").x(),y:this.findOne(\".top-left\").y()};i=Math.sqrt(Math.pow(s.x()-T.x,2)+Math.pow(s.y()-T.y,2));const E=this.findOne(\".bottom-right\").x()<T.x?-1:1,M=this.findOne(\".bottom-right\").y()<T.y?-1:1;e=i*this.cos*E,n=i*this.sin*M,this.findOne(\".bottom-right\").x(T.x+e),this.findOne(\".bottom-right\").y(T.y+n)}}else console.error(new Error(\"Wrong position argument of selection resizer: \"+this._movingAnchorName));if(_=this.centeredScaling()||t.altKey,_){const T=this.findOne(\".top-left\"),E=this.findOne(\".bottom-right\"),M=T.x(),j=T.y(),N=this.getWidth()-E.x(),B=this.getHeight()-E.y();E.move({x:-M,y:-j}),T.move({x:N,y:B})}const k=this.findOne(\".top-left\").getAbsolutePosition();e=k.x,n=k.y;const w=this.findOne(\".bottom-right\").x()-this.findOne(\".top-left\").x(),C=this.findOne(\".bottom-right\").y()-this.findOne(\".top-left\").y();this._fitNodesInto({x:e,y:n,width:w,height:C,rotation:Y.getAngle(this.rotation())},t)}_handleMouseUp(t){this._removeEvents(t)}getAbsoluteTransform(){return this.getTransform()}_removeEvents(t){var e;if(this._transforming){this._transforming=!1,typeof window<\"u\"&&(window.removeEventListener(\"mousemove\",this._handleMouseMove),window.removeEventListener(\"touchmove\",this._handleMouseMove),window.removeEventListener(\"mouseup\",this._handleMouseUp,!0),window.removeEventListener(\"touchend\",this._handleMouseUp,!0));const n=this.getNode();gs--,this._fire(\"transformend\",{evt:t,target:n}),(e=this.getLayer())===null||e===void 0||e.batchDraw(),n&&this._nodes.forEach(i=>{var s;i._fire(\"transformend\",{evt:t,target:i}),(s=i.getLayer())===null||s===void 0||s.batchDraw()}),this._movingAnchorName=null}}_fitNodesInto(t,e){const n=this._getNodeRect(),i=1;if(P._inRange(t.width,-this.padding()*2-i,i)){this.update();return}if(P._inRange(t.height,-this.padding()*2-i,i)){this.update();return}const s=new Xt;if(s.rotate(Y.getAngle(this.rotation())),this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf(\"left\")>=0){const g=s.point({x:-this.padding()*2,y:0});t.x+=g.x,t.y+=g.y,t.width+=this.padding()*2,this._movingAnchorName=this._movingAnchorName.replace(\"left\",\"right\"),this._anchorDragOffset.x-=g.x,this._anchorDragOffset.y-=g.y}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf(\"right\")>=0){const g=s.point({x:this.padding()*2,y:0});this._movingAnchorName=this._movingAnchorName.replace(\"right\",\"left\"),this._anchorDragOffset.x-=g.x,this._anchorDragOffset.y-=g.y,t.width+=this.padding()*2}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf(\"top\")>=0){const g=s.point({x:0,y:-this.padding()*2});t.x+=g.x,t.y+=g.y,this._movingAnchorName=this._movingAnchorName.replace(\"top\",\"bottom\"),this._anchorDragOffset.x-=g.x,this._anchorDragOffset.y-=g.y,t.height+=this.padding()*2}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf(\"bottom\")>=0){const g=s.point({x:0,y:this.padding()*2});this._movingAnchorName=this._movingAnchorName.replace(\"bottom\",\"top\"),this._anchorDragOffset.x-=g.x,this._anchorDragOffset.y-=g.y,t.height+=this.padding()*2}if(this.boundBoxFunc()){const g=this.boundBoxFunc()(n,t);g?t=g:P.warn(\"boundBoxFunc returned falsy. You should return new bound rect from it!\")}const a=1e7,o=new Xt;o.translate(n.x,n.y),o.rotate(n.rotation),o.scale(n.width/a,n.height/a);const h=new Xt,f=t.width/a,u=t.height/a;this.flipEnabled()===!1?(h.translate(t.x,t.y),h.rotate(t.rotation),h.translate(t.width<0?t.width:0,t.height<0?t.height:0),h.scale(Math.abs(f),Math.abs(u))):(h.translate(t.x,t.y),h.rotate(t.rotation),h.scale(f,u));const p=h.multiply(o.invert());this._nodes.forEach(g=>{var _;if(!g.getStage())return;const y=g.getParent().getAbsoluteTransform(),k=g.getTransform().copy();k.translate(g.offsetX(),g.offsetY());const w=new Xt;w.multiply(y.copy().invert()).multiply(p).multiply(y).multiply(k);const C=w.decompose();g.setAttrs(C),(_=g.getLayer())===null||_===void 0||_.batchDraw()}),this.rotation(P._getRotation(t.rotation)),this._nodes.forEach(g=>{this._fire(\"transform\",{evt:e,target:g}),g._fire(\"transform\",{evt:e,target:g})}),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(t,e){this.findOne(t).setAttrs(e)}update(){var t;const e=this._getNodeRect();this.rotation(P._getRotation(e.rotation));const n=e.width,i=e.height,s=this.enabledAnchors(),a=this.resizeEnabled(),o=this.padding(),h=this.anchorSize(),f=this.find(\"._anchor\");f.forEach(N=>{N.setAttrs({width:h,height:h,offsetX:h/2,offsetY:h/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(\".top-left\",{x:0,y:0,offsetX:h/2+o,offsetY:h/2+o,visible:a&&s.indexOf(\"top-left\")>=0}),this._batchChangeChild(\".top-center\",{x:n/2,y:0,offsetY:h/2+o,visible:a&&s.indexOf(\"top-center\")>=0}),this._batchChangeChild(\".top-right\",{x:n,y:0,offsetX:h/2-o,offsetY:h/2+o,visible:a&&s.indexOf(\"top-right\")>=0}),this._batchChangeChild(\".middle-left\",{x:0,y:i/2,offsetX:h/2+o,visible:a&&s.indexOf(\"middle-left\")>=0}),this._batchChangeChild(\".middle-right\",{x:n,y:i/2,offsetX:h/2-o,visible:a&&s.indexOf(\"middle-right\")>=0}),this._batchChangeChild(\".bottom-left\",{x:0,y:i,offsetX:h/2+o,offsetY:h/2-o,visible:a&&s.indexOf(\"bottom-left\")>=0}),this._batchChangeChild(\".bottom-center\",{x:n/2,y:i,offsetY:h/2-o,visible:a&&s.indexOf(\"bottom-center\")>=0}),this._batchChangeChild(\".bottom-right\",{x:n,y:i,offsetX:h/2-o,offsetY:h/2-o,visible:a&&s.indexOf(\"bottom-right\")>=0});const u=this.rotateAnchorAngle(),p=this.rotateAnchorOffset(),g=P.degToRad(u),_=Math.sin(g),y=-Math.cos(g),k=n/2,w=i/2;let C=1/0;y<0?C=Math.min(C,-w/y):y>0&&(C=Math.min(C,(i-w)/y)),_<0?C=Math.min(C,-k/_):_>0&&(C=Math.min(C,(n-k)/_));const T=k+_*C,E=w+y*C,M=P._sign(i);this._batchChangeChild(\".rotater\",{x:T+_*p*M,y:E+y*p*M-o*y,visible:this.rotateEnabled()}),this._batchChangeChild(\".back\",{width:n,height:i,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),draggable:this.nodes().some(N=>N.draggable()),x:0,y:0});const j=this.anchorStyleFunc();j&&f.forEach(N=>{j(N)}),(t=this.getLayer())===null||t===void 0||t.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();const t=this.findOne(\".\"+this._movingAnchorName);t&&t.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=\"\"),$e.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return z.prototype.toObject.call(this)}clone(t){return z.prototype.clone.call(this,t)}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}ht.isTransforming=()=>gs>0;function oh(r){return r instanceof Array||P.warn(\"enabledAnchors value should be an array\"),r instanceof Array&&r.forEach(function(t){oi.indexOf(t)===-1&&P.warn(\"Unknown anchor name: \"+t+\". Available names are: \"+oi.join(\", \"))}),r||[]}ht.prototype.className=\"Transformer\";Tt(ht);S.addGetterSetter(ht,\"enabledAnchors\",oi,oh);S.addGetterSetter(ht,\"flipEnabled\",!0,ee());S.addGetterSetter(ht,\"resizeEnabled\",!0);S.addGetterSetter(ht,\"anchorSize\",10,W());S.addGetterSetter(ht,\"rotateEnabled\",!0);S.addGetterSetter(ht,\"rotateLineVisible\",!0);S.addGetterSetter(ht,\"rotationSnaps\",[]);S.addGetterSetter(ht,\"rotateAnchorOffset\",50,W());S.addGetterSetter(ht,\"rotateAnchorAngle\",0,W());S.addGetterSetter(ht,\"rotateAnchorCursor\",\"crosshair\");S.addGetterSetter(ht,\"rotationSnapTolerance\",5,W());S.addGetterSetter(ht,\"borderEnabled\",!0);S.addGetterSetter(ht,\"anchorStroke\",\"rgb(0, 161, 255)\");S.addGetterSetter(ht,\"anchorStrokeWidth\",1,W());S.addGetterSetter(ht,\"anchorFill\",\"white\");S.addGetterSetter(ht,\"anchorCornerRadius\",0,W());S.addGetterSetter(ht,\"borderStroke\",\"rgb(0, 161, 255)\");S.addGetterSetter(ht,\"borderStrokeWidth\",1,W());S.addGetterSetter(ht,\"borderDash\");S.addGetterSetter(ht,\"keepRatio\",!0);S.addGetterSetter(ht,\"shiftBehavior\",\"default\");S.addGetterSetter(ht,\"centeredScaling\",!1);S.addGetterSetter(ht,\"ignoreStroke\",!1);S.addGetterSetter(ht,\"padding\",0,W());S.addGetterSetter(ht,\"nodes\");S.addGetterSetter(ht,\"node\");S.addGetterSetter(ht,\"boundBoxFunc\");S.addGetterSetter(ht,\"anchorDragBoundFunc\");S.addGetterSetter(ht,\"anchorStyleFunc\");S.addGetterSetter(ht,\"shouldOverdrawWholeArea\",!1);S.addGetterSetter(ht,\"useSingleNodeRotation\",!0);S.backCompat(ht,{lineEnabled:\"borderEnabled\",rotateHandlerOffset:\"rotateAnchorOffset\",enabledHandlers:\"enabledAnchors\"});class de extends F{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.radius(),0,Y.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}de.prototype.className=\"Wedge\";de.prototype._centroid=!0;de.prototype._attrsAffectingSize=[\"radius\"];Tt(de);S.addGetterSetter(de,\"radius\",0,W());S.addGetterSetter(de,\"angle\",0,W());S.addGetterSetter(de,\"clockwise\",!1);S.backCompat(de,{angleDeg:\"angle\",getAngleDeg:\"getAngle\",setAngleDeg:\"setAngle\"});function dr(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}const lh=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],hh=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function ch(r,t){const e=r.data,n=r.width,i=r.height;let s,a,o,h,f,u,p,g,_,y,k,w,C,T,E,M,j,N,B,R;const D=t+t+1,q=n-1,at=i-1,G=t+1,st=G*(G+1)/2,it=new dr,Q=lh[t],$=hh[t];let gt=null,Z=it,ct=null,St=null;for(let dt=1;dt<D;dt++)Z=Z.next=new dr,dt===G&&(gt=Z);Z.next=it,o=a=0;for(let dt=0;dt<i;dt++){w=C=T=E=h=f=u=p=0,g=G*(M=e[a]),_=G*(j=e[a+1]),y=G*(N=e[a+2]),k=G*(B=e[a+3]),h+=st*M,f+=st*j,u+=st*N,p+=st*B,Z=it;for(let ut=0;ut<G;ut++)Z.r=M,Z.g=j,Z.b=N,Z.a=B,Z=Z.next;for(let ut=1;ut<G;ut++)s=a+((q<ut?q:ut)<<2),h+=(Z.r=M=e[s])*(R=G-ut),f+=(Z.g=j=e[s+1])*R,u+=(Z.b=N=e[s+2])*R,p+=(Z.a=B=e[s+3])*R,w+=M,C+=j,T+=N,E+=B,Z=Z.next;ct=it,St=gt;for(let ut=0;ut<n;ut++)e[a+3]=B=p*Q>>$,B!==0?(B=255/B,e[a]=(h*Q>>$)*B,e[a+1]=(f*Q>>$)*B,e[a+2]=(u*Q>>$)*B):e[a]=e[a+1]=e[a+2]=0,h-=g,f-=_,u-=y,p-=k,g-=ct.r,_-=ct.g,y-=ct.b,k-=ct.a,s=o+((s=ut+t+1)<q?s:q)<<2,w+=ct.r=e[s],C+=ct.g=e[s+1],T+=ct.b=e[s+2],E+=ct.a=e[s+3],h+=w,f+=C,u+=T,p+=E,ct=ct.next,g+=M=St.r,_+=j=St.g,y+=N=St.b,k+=B=St.a,w-=M,C-=j,T-=N,E-=B,St=St.next,a+=4;o+=n}for(let dt=0;dt<n;dt++){C=T=E=w=f=u=p=h=0,a=dt<<2,g=G*(M=e[a]),_=G*(j=e[a+1]),y=G*(N=e[a+2]),k=G*(B=e[a+3]),h+=st*M,f+=st*j,u+=st*N,p+=st*B,Z=it;for(let Lt=0;Lt<G;Lt++)Z.r=M,Z.g=j,Z.b=N,Z.a=B,Z=Z.next;let ut=n;for(let Lt=1;Lt<=t;Lt++)a=ut+dt<<2,h+=(Z.r=M=e[a])*(R=G-Lt),f+=(Z.g=j=e[a+1])*R,u+=(Z.b=N=e[a+2])*R,p+=(Z.a=B=e[a+3])*R,w+=M,C+=j,T+=N,E+=B,Z=Z.next,Lt<at&&(ut+=n);a=dt,ct=it,St=gt;for(let Lt=0;Lt<i;Lt++)s=a<<2,e[s+3]=B=p*Q>>$,B>0?(B=255/B,e[s]=(h*Q>>$)*B,e[s+1]=(f*Q>>$)*B,e[s+2]=(u*Q>>$)*B):e[s]=e[s+1]=e[s+2]=0,h-=g,f-=_,u-=y,p-=k,g-=ct.r,_-=ct.g,y-=ct.b,k-=ct.a,s=dt+((s=Lt+G)<at?s:at)*n<<2,h+=w+=ct.r=e[s],f+=C+=ct.g=e[s+1],u+=T+=ct.b=e[s+2],p+=E+=ct.a=e[s+3],ct=ct.next,g+=M=St.r,_+=j=St.g,y+=N=St.b,k+=B=St.a,w-=M,C-=j,T-=N,E-=B,St=St.next,a+=n}}const dh=function(t){const e=Math.round(this.blurRadius());e>0&&ch(t,e)};S.addGetterSetter(z,\"blurRadius\",0,W(),S.afterSetFilter);const uh=function(r){const t=this.brightness()*255,e=r.data,n=e.length;for(let i=0;i<n;i+=4)e[i]+=t,e[i+1]+=t,e[i+2]+=t};S.addGetterSetter(z,\"brightness\",0,W(),S.afterSetFilter);const fh=function(r){const t=this.brightness(),e=r.data,n=e.length;for(let i=0;i<n;i+=4)e[i]=Math.min(255,e[i]*t),e[i+1]=Math.min(255,e[i+1]*t),e[i+2]=Math.min(255,e[i+2]*t)},gh=function(r){const t=Math.pow((this.contrast()+100)/100,2),e=r.data,n=e.length;let i=150,s=150,a=150;for(let o=0;o<n;o+=4)i=e[o],s=e[o+1],a=e[o+2],i/=255,i-=.5,i*=t,i+=.5,i*=255,s/=255,s-=.5,s*=t,s+=.5,s*=255,a/=255,a-=.5,a*=t,a+=.5,a*=255,i=i<0?0:i>255?255:i,s=s<0?0:s>255?255:s,a=a<0?0:a>255?255:a,e[o]=i,e[o+1]=s,e[o+2]=a};S.addGetterSetter(z,\"contrast\",0,W(),S.afterSetFilter);const ph=function(r){var t,e,n,i,s,a,o,h,f;const u=r.data,p=r.width,g=r.height,_=Math.min(1,Math.max(0,(e=(t=this.embossStrength)===null||t===void 0?void 0:t.call(this))!==null&&e!==void 0?e:.5)),y=Math.min(1,Math.max(0,(i=(n=this.embossWhiteLevel)===null||n===void 0?void 0:n.call(this))!==null&&i!==void 0?i:.5)),w=(o={\"top-left\":315,top:270,\"top-right\":225,right:180,\"bottom-right\":135,bottom:90,\"bottom-left\":45,left:0}[(a=(s=this.embossDirection)===null||s===void 0?void 0:s.call(this))!==null&&a!==void 0?a:\"top-left\"])!==null&&o!==void 0?o:315,C=!!((f=(h=this.embossBlend)===null||h===void 0?void 0:h.call(this))!==null&&f!==void 0&&f),T=_*10,E=y*255,M=w*Math.PI/180,j=Math.cos(M),N=Math.sin(M),B=128/1020*T,R=new Uint8ClampedArray(u),D=new Float32Array(p*g);for(let it=0,Q=0;Q<u.length;Q+=4,it++)D[it]=.2126*R[Q]+.7152*R[Q+1]+.0722*R[Q+2];const q=[-1,0,1,-2,0,2,-1,0,1],at=[-1,-2,-1,0,0,0,1,2,1],G=[-p-1,-p,-p+1,-1,0,1,p-1,p,p+1],st=it=>it<0?0:it>255?255:it;for(let it=1;it<g-1;it++)for(let Q=1;Q<p-1;Q++){const $=it*p+Q;let gt=0,Z=0;gt+=D[$+G[0]]*q[0],Z+=D[$+G[0]]*at[0],gt+=D[$+G[1]]*q[1],Z+=D[$+G[1]]*at[1],gt+=D[$+G[2]]*q[2],Z+=D[$+G[2]]*at[2],gt+=D[$+G[3]]*q[3],Z+=D[$+G[3]]*at[3],gt+=D[$+G[5]]*q[5],Z+=D[$+G[5]]*at[5],gt+=D[$+G[6]]*q[6],Z+=D[$+G[6]]*at[6],gt+=D[$+G[7]]*q[7],Z+=D[$+G[7]]*at[7],gt+=D[$+G[8]]*q[8],Z+=D[$+G[8]]*at[8];const ct=j*gt+N*Z,St=st(E+ct*B),dt=$*4;if(C){const ut=St-E;u[dt]=st(R[dt]+ut),u[dt+1]=st(R[dt+1]+ut),u[dt+2]=st(R[dt+2]+ut),u[dt+3]=R[dt+3]}else u[dt]=u[dt+1]=u[dt+2]=St,u[dt+3]=R[dt+3]}for(let it=0;it<p;it++){let Q=it*4,$=((g-1)*p+it)*4;u[Q]=R[Q],u[Q+1]=R[Q+1],u[Q+2]=R[Q+2],u[Q+3]=R[Q+3],u[$]=R[$],u[$+1]=R[$+1],u[$+2]=R[$+2],u[$+3]=R[$+3]}for(let it=1;it<g-1;it++){let Q=it*p*4,$=(it*p+(p-1))*4;u[Q]=R[Q],u[Q+1]=R[Q+1],u[Q+2]=R[Q+2],u[Q+3]=R[Q+3],u[$]=R[$],u[$+1]=R[$+1],u[$+2]=R[$+2],u[$+3]=R[$+3]}return r};S.addGetterSetter(z,\"embossStrength\",.5,W(),S.afterSetFilter);S.addGetterSetter(z,\"embossWhiteLevel\",.5,W(),S.afterSetFilter);S.addGetterSetter(z,\"embossDirection\",\"top-left\",void 0,S.afterSetFilter);S.addGetterSetter(z,\"embossBlend\",!1,void 0,S.afterSetFilter);function es(r,t,e,n,i){const s=e-t,a=i-n;if(s===0)return n+a/2;if(a===0)return n;let o=(r-t)/s;return o=a*o+n,o}const mh=function(r){const t=r.data,e=t.length;let n=t[0],i=n,s,a=t[1],o=a,h,f=t[2],u=f,p;const g=this.enhance();if(g===0)return;for(let E=0;E<e;E+=4)s=t[E+0],s<n?n=s:s>i&&(i=s),h=t[E+1],h<a?a=h:h>o&&(o=h),p=t[E+2],p<f?f=p:p>u&&(u=p);i===n&&(i=255,n=0),o===a&&(o=255,a=0),u===f&&(u=255,f=0);let _,y,k,w,C,T;if(g>0)_=i+g*(255-i),y=n-g*(n-0),k=o+g*(255-o),w=a-g*(a-0),C=u+g*(255-u),T=f-g*(f-0);else{const E=(i+n)*.5;_=i+g*(i-E),y=n+g*(n-E);const M=(o+a)*.5;k=o+g*(o-M),w=a+g*(a-M);const j=(u+f)*.5;C=u+g*(u-j),T=f+g*(f-j)}for(let E=0;E<e;E+=4)t[E+0]=es(t[E+0],n,i,y,_),t[E+1]=es(t[E+1],a,o,w,k),t[E+2]=es(t[E+2],f,u,T,C)};S.addGetterSetter(z,\"enhance\",0,W(),S.afterSetFilter);const vh=function(r){const t=r.data,e=t.length;for(let n=0;n<e;n+=4){const i=.34*t[n]+.5*t[n+1]+.16*t[n+2];t[n]=i,t[n+1]=i,t[n+2]=i}};S.addGetterSetter(z,\"hue\",0,W(),S.afterSetFilter);S.addGetterSetter(z,\"saturation\",0,W(),S.afterSetFilter);S.addGetterSetter(z,\"luminance\",0,W(),S.afterSetFilter);const yh=function(r){const t=r.data,e=t.length,n=1,i=Math.pow(2,this.saturation()),s=Math.abs(this.hue()+360)%360,a=this.luminance()*127,o=n*i*Math.cos(s*Math.PI/180),h=n*i*Math.sin(s*Math.PI/180),f=.299*n+.701*o+.167*h,u=.587*n-.587*o+.33*h,p=.114*n-.114*o-.497*h,g=.299*n-.299*o-.328*h,_=.587*n+.413*o+.035*h,y=.114*n-.114*o+.293*h,k=.299*n-.3*o+1.25*h,w=.587*n-.586*o-1.05*h,C=.114*n+.886*o-.2*h;let T,E,M,j;for(let N=0;N<e;N+=4)T=t[N+0],E=t[N+1],M=t[N+2],j=t[N+3],t[N+0]=f*T+u*E+p*M+a,t[N+1]=g*T+_*E+y*M+a,t[N+2]=k*T+w*E+C*M+a,t[N+3]=j},bh=function(r){const t=r.data,e=t.length,n=Math.pow(2,this.value()),i=Math.pow(2,this.saturation()),s=Math.abs(this.hue()+360)%360,a=n*i*Math.cos(s*Math.PI/180),o=n*i*Math.sin(s*Math.PI/180),h=.299*n+.701*a+.167*o,f=.587*n-.587*a+.33*o,u=.114*n-.114*a-.497*o,p=.299*n-.299*a-.328*o,g=.587*n+.413*a+.035*o,_=.114*n-.114*a+.293*o,y=.299*n-.3*a+1.25*o,k=.587*n-.586*a-1.05*o,w=.114*n+.886*a-.2*o;for(let C=0;C<e;C+=4){const T=t[C+0],E=t[C+1],M=t[C+2],j=t[C+3];t[C+0]=h*T+f*E+u*M,t[C+1]=p*T+g*E+_*M,t[C+2]=y*T+k*E+w*M,t[C+3]=j}};S.addGetterSetter(z,\"hue\",0,W(),S.afterSetFilter);S.addGetterSetter(z,\"saturation\",0,W(),S.afterSetFilter);S.addGetterSetter(z,\"value\",0,W(),S.afterSetFilter);const _h=function(r){const t=r.data,e=t.length;for(let n=0;n<e;n+=4)t[n]=255-t[n],t[n+1]=255-t[n+1],t[n+2]=255-t[n+2]},wh=function(r,t,e){const n=r.data,i=t.data,s=r.width,a=r.height,o=e.polarCenterX||s/2,h=e.polarCenterY||a/2;let f=Math.sqrt(o*o+h*h),u=s-o,p=a-h;const g=Math.sqrt(u*u+p*p);f=g>f?g:f;const _=a,y=s,k=360/y*Math.PI/180;for(let w=0;w<y;w+=1){const C=Math.sin(w*k),T=Math.cos(w*k);for(let E=0;E<_;E+=1){u=Math.floor(o+f*E/_*T),p=Math.floor(h+f*E/_*C);let M=(p*s+u)*4;const j=n[M+0],N=n[M+1],B=n[M+2],R=n[M+3];M=(w+E*s)*4,i[M+0]=j,i[M+1]=N,i[M+2]=B,i[M+3]=R}}},Sh=function(r,t,e){const n=r.data,i=t.data,s=r.width,a=r.height,o=e.polarCenterX||s/2,h=e.polarCenterY||a/2;let f=Math.sqrt(o*o+h*h),u=s-o,p=a-h;const g=Math.sqrt(u*u+p*p);f=g>f?g:f;const _=a,y=s,k=0;let w,C;for(u=0;u<s;u+=1)for(p=0;p<a;p+=1){const T=u-o,E=p-h,M=Math.sqrt(T*T+E*E)*_/f;let j=(Math.atan2(E,T)*180/Math.PI+360+k)%360;j=j*y/360,w=Math.floor(j),C=Math.floor(M);let N=(C*s+w)*4;const B=n[N+0],R=n[N+1],D=n[N+2],q=n[N+3];N=(p*s+u)*4,i[N+0]=B,i[N+1]=R,i[N+2]=D,i[N+3]=q}},xh=function(r){const t=r.width,e=r.height;let n,i,s,a,o,h,f,u,p,g,_=Math.round(this.kaleidoscopePower());const y=Math.round(this.kaleidoscopeAngle()),k=Math.floor(t*(y%360)/360);if(_<1)return;const w=P.createCanvasElement();w.width=t,w.height=e;const C=w.getContext(\"2d\").getImageData(0,0,t,e);P.releaseCanvas(w),wh(r,C,{polarCenterX:t/2,polarCenterY:e/2});let T=t/Math.pow(2,_);for(;T<=8;)T=T*2,_-=1;T=Math.ceil(T);let E=T,M=0,j=E,N=1;for(k+T>t&&(M=E,j=0,N=-1),i=0;i<e;i+=1)for(n=M;n!==j;n+=N)s=Math.round(n+k)%t,p=(t*i+s)*4,o=C.data[p+0],h=C.data[p+1],f=C.data[p+2],u=C.data[p+3],g=(t*i+n)*4,C.data[g+0]=o,C.data[g+1]=h,C.data[g+2]=f,C.data[g+3]=u;for(i=0;i<e;i+=1)for(E=Math.floor(T),a=0;a<_;a+=1){for(n=0;n<E+1;n+=1)p=(t*i+n)*4,o=C.data[p+0],h=C.data[p+1],f=C.data[p+2],u=C.data[p+3],g=(t*i+E*2-n-1)*4,C.data[g+0]=o,C.data[g+1]=h,C.data[g+2]=f,C.data[g+3]=u;E*=2}Sh(C,r,{})};S.addGetterSetter(z,\"kaleidoscopePower\",2,W(),S.afterSetFilter);S.addGetterSetter(z,\"kaleidoscopeAngle\",0,W(),S.afterSetFilter);function ei(r,t,e){let n=(e*r.width+t)*4;const i=[];return i.push(r.data[n++],r.data[n++],r.data[n++],r.data[n++]),i}function dn(r,t){return Math.sqrt(Math.pow(r[0]-t[0],2)+Math.pow(r[1]-t[1],2)+Math.pow(r[2]-t[2],2))}function Ch(r){const t=[0,0,0];for(let e=0;e<r.length;e++)t[0]+=r[e][0],t[1]+=r[e][1],t[2]+=r[e][2];return t[0]/=r.length,t[1]/=r.length,t[2]/=r.length,t}function kh(r,t){const e=ei(r,0,0),n=ei(r,r.width-1,0),i=ei(r,0,r.height-1),s=ei(r,r.width-1,r.height-1),a=t||10;if(dn(e,n)<a&&dn(n,s)<a&&dn(s,i)<a&&dn(i,e)<a){const o=Ch([n,e,s,i]),h=[];for(let f=0;f<r.width*r.height;f++){const u=dn(o,[r.data[f*4],r.data[f*4+1],r.data[f*4+2]]);h[f]=u<a?0:255}return h}}function Th(r,t){for(let e=0;e<r.width*r.height;e++)r.data[4*e+3]=t[e]}function Ph(r,t,e){const n=[1,1,1,1,0,1,1,1,1],i=Math.round(Math.sqrt(n.length)),s=Math.floor(i/2),a=[];for(let o=0;o<e;o++)for(let h=0;h<t;h++){const f=o*t+h;let u=0;for(let p=0;p<i;p++)for(let g=0;g<i;g++){const _=o+p-s,y=h+g-s;if(_>=0&&_<e&&y>=0&&y<t){const k=_*t+y,w=n[p*i+g];u+=r[k]*w}}a[f]=u===2040?255:0}return a}function Eh(r,t,e){const n=[1,1,1,1,1,1,1,1,1],i=Math.round(Math.sqrt(n.length)),s=Math.floor(i/2),a=[];for(let o=0;o<e;o++)for(let h=0;h<t;h++){const f=o*t+h;let u=0;for(let p=0;p<i;p++)for(let g=0;g<i;g++){const _=o+p-s,y=h+g-s;if(_>=0&&_<e&&y>=0&&y<t){const k=_*t+y,w=n[p*i+g];u+=r[k]*w}}a[f]=u>=1020?255:0}return a}function Ah(r,t,e){const n=[.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111],i=Math.round(Math.sqrt(n.length)),s=Math.floor(i/2),a=[];for(let o=0;o<e;o++)for(let h=0;h<t;h++){const f=o*t+h;let u=0;for(let p=0;p<i;p++)for(let g=0;g<i;g++){const _=o+p-s,y=h+g-s;if(_>=0&&_<e&&y>=0&&y<t){const k=_*t+y,w=n[p*i+g];u+=r[k]*w}}a[f]=u}return a}const Rh=function(r){const t=this.threshold();let e=kh(r,t);return e&&(e=Ph(e,r.width,r.height),e=Eh(e,r.width,r.height),e=Ah(e,r.width,r.height),Th(r,e)),r};S.addGetterSetter(z,\"threshold\",0,W(),S.afterSetFilter);const Mh=function(r){const t=this.noise()*255,e=r.data,n=e.length,i=t/2;for(let s=0;s<n;s+=4)e[s+0]+=i-2*i*Math.random(),e[s+1]+=i-2*i*Math.random(),e[s+2]+=i-2*i*Math.random()};S.addGetterSetter(z,\"noise\",.2,W(),S.afterSetFilter);const Lh=function(r){let t=Math.ceil(this.pixelSize()),e=r.width,n=r.height,i=Math.ceil(e/t),s=Math.ceil(n/t),a=r.data;if(t<=0){P.error(\"pixelSize value can not be <= 0\");return}for(let o=0;o<i;o+=1)for(let h=0;h<s;h+=1){let f=0,u=0,p=0,g=0;const _=o*t,y=_+t,k=h*t,w=k+t;let C=0;for(let T=_;T<y;T+=1)if(!(T>=e))for(let E=k;E<w;E+=1){if(E>=n)continue;const M=(e*E+T)*4;f+=a[M+0],u+=a[M+1],p+=a[M+2],g+=a[M+3],C+=1}f=f/C,u=u/C,p=p/C,g=g/C;for(let T=_;T<y;T+=1)if(!(T>=e))for(let E=k;E<w;E+=1){if(E>=n)continue;const M=(e*E+T)*4;a[M+0]=f,a[M+1]=u,a[M+2]=p,a[M+3]=g}}};S.addGetterSetter(z,\"pixelSize\",8,W(),S.afterSetFilter);const Oh=function(r){const t=Math.round(this.levels()*254)+1,e=r.data,n=e.length,i=255/t;for(let s=0;s<n;s+=1)e[s]=Math.floor(e[s]/i)*i};S.addGetterSetter(z,\"levels\",.5,W(),S.afterSetFilter);const Ih=function(r){const t=r.data,e=t.length,n=this.red(),i=this.green(),s=this.blue();for(let a=0;a<e;a+=4){const o=(.34*t[a]+.5*t[a+1]+.16*t[a+2])/255;t[a]=o*n,t[a+1]=o*i,t[a+2]=o*s,t[a+3]=t[a+3]}};S.addGetterSetter(z,\"red\",0,function(r){return this._filterUpToDate=!1,r>255?255:r<0?0:Math.round(r)});S.addGetterSetter(z,\"green\",0,function(r){return this._filterUpToDate=!1,r>255?255:r<0?0:Math.round(r)});S.addGetterSetter(z,\"blue\",0,Sr,S.afterSetFilter);const Dh=function(r){const t=r.data,e=t.length,n=this.red(),i=this.green(),s=this.blue(),a=this.alpha();for(let o=0;o<e;o+=4){const h=1-a;t[o]=n*a+t[o]*h,t[o+1]=i*a+t[o+1]*h,t[o+2]=s*a+t[o+2]*h}};S.addGetterSetter(z,\"red\",0,function(r){return this._filterUpToDate=!1,r>255?255:r<0?0:Math.round(r)});S.addGetterSetter(z,\"green\",0,function(r){return this._filterUpToDate=!1,r>255?255:r<0?0:Math.round(r)});S.addGetterSetter(z,\"blue\",0,Sr,S.afterSetFilter);S.addGetterSetter(z,\"alpha\",1,function(r){return this._filterUpToDate=!1,r>1?1:r<0?0:r});const Nh=function(r){const t=r.data,e=t.length;for(let n=0;n<e;n+=4){const i=t[n+0],s=t[n+1],a=t[n+2];t[n+0]=Math.min(255,i*.393+s*.769+a*.189),t[n+1]=Math.min(255,i*.349+s*.686+a*.168),t[n+2]=Math.min(255,i*.272+s*.534+a*.131)}},Gh=function(r){const e=r.data;for(let n=0;n<e.length;n+=4){const i=e[n],s=e[n+1],a=e[n+2];.2126*i+.7152*s+.0722*a>=128&&(e[n]=255-i,e[n+1]=255-s,e[n+2]=255-a)}return r},Fh=function(r){const t=this.threshold()*255,e=r.data,n=e.length;for(let i=0;i<n;i+=1)e[i]=e[i]<t?0:255};S.addGetterSetter(z,\"threshold\",.5,W(),S.afterSetFilter);const kn=tr.Util._assign(tr,{Arc:he,Arrow:De,Circle:Ve,Ellipse:Se,Image:ne,Label:ws,Tag:Ne,Line:ce,Path:Ct,Rect:Tn,RegularPolygon:xe,Ring:Ge,Sprite:se,Star:Ce,Text:kt,TextPath:Mt,Transformer:ht,Wedge:de,Filters:{Blur:dh,Brightness:fh,Brighten:uh,Contrast:gh,Emboss:ph,Enhance:mh,Grayscale:vh,HSL:yh,HSV:bh,Invert:_h,Kaleidoscope:xh,Mask:Rh,Noise:Mh,Pixelate:Lh,Posterize:Oh,RGB:Ih,RGBA:Dh,Sepia:Nh,Solarize:Gh,Threshold:Fh}});function li(r){if(!kn.autoDrawEnabled){const t=r.getLayer()||r.getStage();t&&t.batchDraw()}}const ur={key:!0,style:!0,elm:!0,isRootInsert:!0},ns=\".vue-konva-event\";function ta(r,t,e,n){const i=r.__konvaNode,s={};let a=!1;for(let o in e){if(ur.hasOwnProperty(o))continue;const h=o.slice(0,2)===\"on\",f=e[o]!==t[o];if(h&&f){let u=o.slice(2).toLowerCase();u.slice(0,7)===\"content\"&&(u=\"content\"+u.slice(7,1).toUpperCase()+u.slice(8)),i?.off(u+ns,e[o])}!t.hasOwnProperty(o)&&i?.setAttr(o,void 0)}for(let o in t){if(ur.hasOwnProperty(o))continue;let h=o.slice(0,2)===\"on\";const f=e[o]!==t[o];if(h&&f){let u=o.slice(2).toLowerCase();u.slice(0,7)===\"content\"&&(u=\"content\"+u.slice(7,1).toUpperCase()+u.slice(8)),t[o]&&(i?.off(u+ns),i?.on(u+ns,t[o]))}!h&&(t[o]!==e[o]||n&&t[o]!==i?.getAttr(o))&&(a=!0,s[o]=t[o])}a&&i&&(i.setAttrs(s),li(i))}const Hh=\"V\";function Bh(r){function t(e){return e?.__konvaNode?e:e?.parent?t(e.parent):(console.error(\"vue-konva error: Can not find parent node\"),null)}return t(r.parent)}function ea(r){return r.component?r.component.__konvaNode||ea(r.component.subTree):null}function zh(r){const{el:t,component:e}=r,n=ea(r);if(t?.tagName&&e&&!n){const i=t.tagName.toLowerCase();return console.error(`vue-konva error: You are trying to render \"${i}\" inside your component tree. Looks like it is not a Konva node. You can render only Konva components inside the Stage.`),null}return n}function jh(r){const t=i=>!!i&&typeof i==\"object\"&&\"component\"in i,e=i=>Array.isArray(i),n=i=>t(i)?[i,...n(i.children)]:e(i)?i.flatMap(n):[];return n(r.children)}function na(r,t){const e=jh(r),n=[];e.forEach(s=>{const a=zh(s);a&&n.push(a)});let i=!1;n.forEach((s,a)=>{s.getZIndex()!==a&&(s.setZIndex(a),i=!0)}),i&&li(t)}const Wh=kn.default?.Stage||kn.Stage,Uh=Le({name:\"Stage\",props:{config:{type:Object,default:function(){return{}}},__useStrictMode:{type:Boolean}},inheritAttrs:!1,setup(r,{attrs:t,slots:e,expose:n}){const i=yr();if(!i)return;const s=br({}),a=nt(null),o=new Wh({width:r.config.width,height:r.config.height,container:document.createElement(\"div\")});i.__konvaNode=o,u();function h(){return i?.__konvaNode}function f(){return i?.__konvaNode}function u(){if(!i)return;const p=s||{},g={...t,...r.config};ta(i,g,p,r.__useStrictMode),Object.assign(s,g)}return ps(()=>{a.value&&(a.value.innerHTML=\"\",o.container(a.value)),u()}),mr(()=>{u(),na(i.subTree,o)}),_r(()=>{o.destroy()}),_e(()=>r.config,u,{deep:!0}),n({getStage:f,getNode:h}),()=>vr(\"div\",{ref:a,style:t?.style},e.default?.())}}),Xh=\".vue-konva-event\",Yh={Group:!0,Layer:!0,FastLayer:!0,Label:!0};function Pt(r,t){return Le({name:r,props:{config:{type:Object,default:function(){return{}}},__useStrictMode:{type:Boolean}},setup(e,{attrs:n,slots:i,expose:s}){const a=yr();if(!a)return;const o=br({}),h=new t;a.__konvaNode=h,a.vnode.__konvaNode=h,p();function f(){return a?.__konvaNode}function u(){return a?.__konvaNode}function p(){if(!a)return;const _={};for(const w in a?.vnode.props)w.slice(0,2)===\"on\"&&(_[w]=a.vnode.props[w]);const y=o||{},k={...n,...e.config,..._};ta(a,k,y,e.__useStrictMode),Object.assign(o,k)}ps(()=>{const _=Bh(a)?.__konvaNode;_&&\"add\"in _&&_.add(h),li(h)}),ao(()=>{li(h),h.destroy(),h.off(Xh)}),mr(()=>{p(),na(a.subTree,h)}),_e(()=>e.config,p,{deep:!0}),s({getStage:u,getNode:f});const g=Yh.hasOwnProperty(r);return()=>g?vr(\"template\",{},i.default?.()):null}})}const At=kn.default||kn,qh=Pt(\"Arc\",At.Arc),$h=Pt(\"Arrow\",At.Arrow),Vh=Pt(\"Circle\",At.Circle),Kh=Pt(\"Ellipse\",At.Ellipse),Jh=Pt(\"FastLayer\",At.FastLayer),Qh=Pt(\"Group\",At.Group),Zh=Pt(\"Image\",At.Image),tc=Pt(\"Label\",At.Label),ec=Pt(\"Layer\",At.Layer),nc=Pt(\"Line\",At.Line),ic=Pt(\"Path\",At.Path),sc=Pt(\"Rect\",At.Rect),rc=Pt(\"RegularPolygon\",At.RegularPolygon),ac=Pt(\"Ring\",At.Ring),oc=Pt(\"Shape\",At.Shape),lc=Pt(\"Sprite\",At.Sprite),hc=Pt(\"Star\",At.Star),cc=Pt(\"Tag\",At.Tag),dc=Pt(\"Text\",At.Text),uc=Pt(\"TextPath\",At.TextPath),fc=Pt(\"Transformer\",At.Transformer),gc=Pt(\"Wedge\",At.Wedge),pc=Object.freeze(Object.defineProperty({__proto__:null,Arc:qh,Arrow:$h,Circle:Vh,Ellipse:Kh,FastLayer:Jh,Group:Qh,Image:Zh,Label:tc,Layer:ec,Line:nc,Path:ic,Rect:sc,RegularPolygon:rc,Ring:ac,Shape:oc,Sprite:lc,Star:hc,Tag:cc,Text:dc,TextPath:uc,Transformer:fc,Wedge:gc},Symbol.toStringTag,{value:\"Module\"})),mc={install:(r,t)=>{const e=t?.prefix||Hh,n=t?.customNodes?Object.entries(t.customNodes).map(([i,s])=>Pt(i,s)):[];[Uh,...Object.values(pc),...n].forEach(i=>{r.component(`${e}${i.name}`,i)})}},vc={key:0,class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},yc={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},bc=[\"innerHTML\"],_c={class:\"max-w-4xl p-4\"},wc={key:0,class:\"flex gap-0.5 w-full\"},Sc={class:\"grow\"},xc=[\"placeholder\",\"onKeydown\"],Cc={key:1,class:\"text-center flex items-center justify-center w-full\"},kc={key:2,class:\"flex flex-col gap-0.5 w-full\"},Tc=[\"onClick\"],Pc=[\"innerHTML\"],Ec=300,Ac=Le({__name:\"EntitySearch\",props:{api:{},opened:{type:Boolean},i18n:{}},emits:[\"selected\",\"closed\"],setup(r,{emit:t}){const e=r,n=nt(!1),i=nt(!1),s=nt(),a=nt(),o=nt(),h=nt(\"\"),f=nt(\"\"),u=nt(null),p=nt(-1),g=t,_=()=>{n.value=!0,p.value=0,s.value.showModal(),s.value.addEventListener(\"click\",function(R){let D=this.getBoundingClientRect();!(D.top<=R.clientY&&R.clientY<=D.top+D.height&&D.left<=R.clientX&&R.clientX<=D.left+D.width)&&R.target.tagName===\"DIALOG\"&&y()}),axios.get(e.api+\"?v2=true&thumb=256\").then(R=>{o.value=R.data.entities,n.value=!1,oe(()=>{a.value?.focus()})}).catch(R=>{n.value=!1})},y=()=>{s.value.close(),p.value=-1,g(\"closed\")},k=R=>e.i18n[R]||R;_e(()=>e.opened,(R,D)=>{R&&_()});const w=R=>{h.value=R.target.value,u.value&&clearTimeout(u.value),u.value=setTimeout(()=>{C()},Ec)},C=()=>{f.value!=h.value&&(f.value=h.value,i.value=!0,axios.get(e.api+\"?v2=true&thumb=256&q=\"+f.value).then(R=>{o.value=R.data.entities,i.value=!1,p.value=0}))},T=R=>\"url('\"+R.image+\"')\",E=(R,D)=>{let q=\"flex gap-2 items-center cursor-pointer hover:bg-base-200 w-full rounded p-1\";return p.value==D&&(q+=\" bg-base-300\"),q},M=R=>{p.value!==-1&&(R.preventDefault(),p.value<o.value.length-1?p.value++:o.value.length>0&&(p.value=0))},j=R=>{p.value!==-1&&(R.preventDefault(),p.value>0?p.value--:o.value.length>0&&(p.value=o.value.length-1))},N=R=>{o.value.length>0&&p.value>=0&&(R.preventDefault(),B(o.value[p.value]))},B=R=>{g(\"selected\",R),y()};return(R,D)=>(et(),ft(ye,null,[n.value?(et(),ft(\"i\",vc)):mt(\"\",!0),O(\"dialog\",{class:\"dialog rounded-2xl text-center bg-base-100 text-base-content\",id:\"gallery-dialog\",ref_key:\"dialog\",ref:s,\"aria-modal\":\"true\",\"aria-labelledby\":\"modal-card-label\"},[O(\"header\",yc,[O(\"h4\",{innerHTML:k(\"entity-search\"),class:\"text-lg font-normal\"},null,8,bc),O(\"button\",{type:\"button\",class:\"text-base-content\",onClick:D[0]||(D[0]=q=>y()),title:\"Close\"},[...D[1]||(D[1]=[O(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),O(\"span\",{class:\"sr-only\"},\"trans('close')\",-1)])])]),O(\"article\",_c,[n.value?mt(\"\",!0):(et(),ft(\"div\",wc,[O(\"div\",Sc,[O(\"input\",{type:\"text\",class:\"w-full\",placeholder:k(\"search-placeholder\"),onInput:w,ref_key:\"searchInput\",ref:a,onKeydown:[bn(It(M,[\"prevent\"]),[\"down\"]),bn(It(j,[\"prevent\"]),[\"up\"]),bn(N,[\"enter\"])]},null,40,xc)])])),n.value||i.value?(et(),ft(\"div\",Cc,[...D[2]||(D[2]=[O(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-label\":\"Loading\"},null,-1)])])):mt(\"\",!0),!n.value&&!i.value?(et(),ft(\"div\",kc,[(et(!0),ft(ye,null,un(o.value,(q,at)=>(et(),ft(\"div\",{key:q.id,class:Bt(E(q,at)),onClick:G=>B(q)},[q.image?(et(),ft(\"div\",{key:0,class:\"cover-background rounded-full h-6 w-6\",style:ii({backgroundImage:T(q)})},null,4)):mt(\"\",!0),O(\"span\",{innerHTML:q.name},null,8,Pc)],10,Tc))),128))])):mt(\"\",!0)])],512)],64))}}),Rc=Le({__name:\"Entity\",props:{shape:{},getImageEl:{type:Function},entity:{}},setup(r){const t=nt(2),e=nt(26),n=r,i=fn(()=>n.getImageEl?n.getImageEl(n.shape):null),s=h=>{if(n.entity?.link)try{window.open(n.entity.link,\"_blank\",\"noopener\")}catch{window.location.href=n.entity.link}},a=h=>{try{const p=h.target.getStage?.()?.container?.();p&&(p.style.cursor=\"pointer\")}catch{}},o=h=>{try{const p=h.target.getStage?.()?.container?.();p&&(p.style.cursor=\"\")}catch{}};return(h,f)=>{const u=Kt(\"v-rect\"),p=Kt(\"v-image\"),g=Kt(\"v-text\");return et(),ft(ye,null,[Re(u,{config:{x:0,y:0,width:r.shape.width,height:r.shape.height+e.value,fill:Gs(Fs)(\"--b1\"),cornerRadius:t.value,opacity:r.shape.opacity||1}},null,8,[\"config\"]),Re(p,{config:{width:r.shape.width,height:r.shape.height,image:i.value,cornerRadius:t.value,opacity:r.shape.opacity||1}},null,8,[\"config\"]),Re(g,{onClick:s,onMouseenter:a,onMouseleave:o,config:{x:0,y:r.shape.height,width:r.shape.width,height:e.value,text:r.entity.name||\"Unknown untity\",padding:6,fontSize:14,fontFamily:r.shape.fontFamily||\"Arial\",fill:r.shape.fill||Gs(Fs)(\"--bc\"),align:\"center\",verticalAlign:\"middle\",draggable:!1,listening:!0,opacity:r.shape.opacity||1}},null,8,[\"config\"])],64)}}}),Mc={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},Lc=[\"innerHTML\"],Oc={class:\"max-w-4xl p-4\"},Ic={class:\"flex gap-1 w-full\"},Dc={class:\"flex flex-col gap-1 grow\"},Nc=[\"innerHTML\"],Gc={class:\"mt-5 flex gap-2 md:gap-5 text-left w-full justify-between p-4 md:p-6\"},Fc=[\"innerHTML\"],Hc=Le({__name:\"Settings\",props:{name:{},opened:{type:Boolean},i18n:{}},emits:[\"closed\"],setup(r,{emit:t}){const e=r,n=t,i=nt(),s=nt(e.name);_e(()=>e.opened,(f,u)=>{f&&o()}),_e(()=>e.name,f=>{s.value=f});const a=f=>f,o=()=>{i.value.showModal(),i.value.addEventListener(\"click\",function(f){let u=this.getBoundingClientRect();!(u.top<=f.clientY&&f.clientY<=u.top+u.height&&u.left<=f.clientX&&f.clientX<=u.left+u.width)&&f.target.tagName===\"DIALOG\"&&h()})},h=()=>{i.value.close(),n(\"closed\",s.value)};return(f,u)=>(et(),ft(\"dialog\",{class:\"dialog rounded-2xl bg-base-100 text-base-content\",id:\"gallery-dialog\",ref_key:\"dialog\",ref:i,\"aria-modal\":\"true\",\"aria-labelledby\":\"modal-card-label\"},[O(\"header\",Mc,[O(\"h4\",{innerHTML:a(\"whiteboard-settings\"),class:\"text-lg font-normal\"},null,8,Lc),O(\"button\",{type:\"button\",class:\"text-base-content\",onClick:u[0]||(u[0]=p=>h()),title:\"Close\"},[...u[4]||(u[4]=[O(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),O(\"span\",{class:\"sr-only\"},\"trans('close')\",-1)])])]),O(\"article\",Oc,[O(\"div\",Ic,[O(\"div\",Dc,[O(\"label\",{innerHTML:a(\"name\")},null,8,Nc),si(O(\"input\",{type:\"text\",class:\"w-full\",\"onUpdate:modelValue\":u[1]||(u[1]=p=>s.value=p),onInput:u[2]||(u[2]=(...p)=>f.updateName&&f.updateName(...p))},null,544),[[wr,s.value]])])])]),O(\"div\",Gc,[u[5]||(u[5]=O(\"menu\",{class:\"flex flex-wrap gap-3 ps-0 ms-0\"},null,-1)),O(\"button\",{class:\"btn2 btn-primary\",onClick:u[3]||(u[3]=p=>h()),innerHTML:a(\"save\")},null,8,Fc)])],512))}}),Bc={class:\"flex gap-6 items-center p-4 md:p-6 justify-between\"},zc=[\"innerHTML\"],jc={class:\"max-w-4xl p-4\"},Wc={class:\"mt-5 flex gap-2 md:gap-5 text-left w-full justify-between p-4 md:p-6\"},Uc=[\"innerHTML\"],Xc=Le({__name:\"Reset\",props:{opened:{type:Boolean},i18n:{}},emits:[\"closed\"],setup(r,{emit:t}){const e=r,n=t,i=nt();_e(()=>e.opened,()=>{s()});const s=()=>{i.value.showModal(),i.value.addEventListener(\"click\",function(f){let u=this.getBoundingClientRect();!(u.top<=f.clientY&&f.clientY<=u.top+u.height&&u.left<=f.clientX&&f.clientX<=u.left+u.width)&&f.target.tagName===\"DIALOG\"&&h()})},a=f=>e.i18n[f]||f,o=()=>{h(),n(\"closed\")},h=()=>{i.value.close()};return(f,u)=>(et(),ft(\"dialog\",{class:\"dialog rounded-2xl bg-base-100 text-base-content\",id:\"reset-dialog\",ref_key:\"dialog\",ref:i,\"aria-modal\":\"true\",\"aria-labelledby\":\"modal-card-label\"},[O(\"header\",Bc,[O(\"h4\",{innerHTML:a(\"reset-title\"),class:\"text-lg font-normal\"},null,8,zc),O(\"button\",{type:\"button\",class:\"text-base-content\",onClick:u[0]||(u[0]=p=>h()),title:\"Close\"},[...u[2]||(u[2]=[O(\"i\",{class:\"fa-regular fa-circle-xmark\",\"aria-hidden\":\"true\"},null,-1),O(\"span\",{class:\"sr-only\"},\"trans('close')\",-1)])])]),O(\"article\",jc,pe(a(\"reset-helper\")),1),O(\"div\",Wc,[u[3]||(u[3]=O(\"menu\",{class:\"flex flex-wrap gap-3 ps-0 ms-0\"},null,-1)),O(\"button\",{class:\"btn2 btn-primary\",onClick:u[1]||(u[1]=p=>o()),innerHTML:a(\"reset\")},null,8,Uc)])],512))}});class Ss{constructor(){this.notificationCreatedEvent=\".Illuminate\\\\Notifications\\\\Events\\\\BroadcastNotificationCreated\"}listenForWhisper(t,e){return this.listen(\".client-\"+t,e)}notification(t){return this.listen(this.notificationCreatedEvent,t)}stopListeningForNotification(t){return this.stopListening(this.notificationCreatedEvent,t)}stopListeningForWhisper(t,e){return this.stopListening(\".client-\"+t,e)}}class ia{constructor(t){this.namespace=t}format(t){return[\".\",\"\\\\\"].includes(t.charAt(0))?t.substring(1):(this.namespace&&(t=this.namespace+\".\"+t),t.replace(/\\./g,\"\\\\\"))}setNamespace(t){this.namespace=t}}function Yc(r){try{new r}catch(t){if(t instanceof Error&&t.message.includes(\"is not a constructor\"))return!1}return!0}class xs extends Ss{constructor(t,e,n){super(),this.name=e,this.pusher=t,this.options=n,this.eventFormatter=new ia(this.options.namespace),this.subscribe()}subscribe(){this.subscription=this.pusher.subscribe(this.name)}unsubscribe(){this.pusher.unsubscribe(this.name)}listen(t,e){return this.on(this.eventFormatter.format(t),e),this}listenToAll(t){return this.subscription.bind_global((e,n)=>{if(e.startsWith(\"pusher:\"))return;let i=String(this.options.namespace??\"\").replace(/\\./g,\"\\\\\"),s=e.startsWith(i)?e.substring(i.length+1):\".\"+e;t(s,n)}),this}stopListening(t,e){return e?this.subscription.unbind(this.eventFormatter.format(t),e):this.subscription.unbind(this.eventFormatter.format(t)),this}stopListeningToAll(t){return t?this.subscription.unbind_global(t):this.subscription.unbind_global(),this}subscribed(t){return this.on(\"pusher:subscription_succeeded\",()=>{t()}),this}error(t){return this.on(\"pusher:subscription_error\",e=>{t(e)}),this}on(t,e){return this.subscription.bind(t,e),this}}class sa extends xs{whisper(t,e){return this.pusher.channels.channels[this.name].trigger(`client-${t}`,e),this}}class qc extends xs{whisper(t,e){return this.pusher.channels.channels[this.name].trigger(`client-${t}`,e),this}}class $c extends sa{here(t){return this.on(\"pusher:subscription_succeeded\",e=>{t(Object.keys(e.members).map(n=>e.members[n]))}),this}joining(t){return this.on(\"pusher:member_added\",e=>{t(e.info)}),this}whisper(t,e){return this.pusher.channels.channels[this.name].trigger(`client-${t}`,e),this}leaving(t){return this.on(\"pusher:member_removed\",e=>{t(e.info)}),this}}class ra extends Ss{constructor(t,e,n){super(),this.events={},this.listeners={},this.name=e,this.socket=t,this.options=n,this.eventFormatter=new ia(this.options.namespace),this.subscribe()}subscribe(){this.socket.emit(\"subscribe\",{channel:this.name,auth:this.options.auth||{}})}unsubscribe(){this.unbind(),this.socket.emit(\"unsubscribe\",{channel:this.name,auth:this.options.auth||{}})}listen(t,e){return this.on(this.eventFormatter.format(t),e),this}stopListening(t,e){return this.unbindEvent(this.eventFormatter.format(t),e),this}subscribed(t){return this.on(\"connect\",e=>{t(e)}),this}error(t){return this}on(t,e){return this.listeners[t]=this.listeners[t]||[],this.events[t]||(this.events[t]=(n,i)=>{this.name===n&&this.listeners[t]&&this.listeners[t].forEach(s=>s(i))},this.socket.on(t,this.events[t])),this.listeners[t].push(e),this}unbind(){Object.keys(this.events).forEach(t=>{this.unbindEvent(t)})}unbindEvent(t,e){this.listeners[t]=this.listeners[t]||[],e&&(this.listeners[t]=this.listeners[t].filter(n=>n!==e)),(!e||this.listeners[t].length===0)&&(this.events[t]&&(this.socket.removeListener(t,this.events[t]),delete this.events[t]),delete this.listeners[t])}}class aa extends ra{whisper(t,e){return this.socket.emit(\"client event\",{channel:this.name,event:`client-${t}`,data:e}),this}}class Vc extends aa{here(t){return this.on(\"presence:subscribed\",e=>{t(e.map(n=>n.user_info))}),this}joining(t){return this.on(\"presence:joining\",e=>t(e.user_info)),this}whisper(t,e){return this.socket.emit(\"client event\",{channel:this.name,event:`client-${t}`,data:e}),this}leaving(t){return this.on(\"presence:leaving\",e=>t(e.user_info)),this}}class hi extends Ss{subscribe(){}unsubscribe(){}listen(t,e){return this}listenToAll(t){return this}stopListening(t,e){return this}subscribed(t){return this}error(t){return this}on(t,e){return this}}class oa extends hi{whisper(t,e){return this}}class Kc extends hi{whisper(t,e){return this}}class Jc extends oa{here(t){return this}joining(t){return this}whisper(t,e){return this}leaving(t){return this}}const la=class ha{constructor(t){this.setOptions(t),this.connect()}setOptions(t){this.options={...ha._defaultOptions,...t,broadcaster:t.broadcaster};let e=this.csrfToken();e&&(this.options.auth.headers[\"X-CSRF-TOKEN\"]=e,this.options.userAuthentication.headers[\"X-CSRF-TOKEN\"]=e),e=this.options.bearerToken,e&&(this.options.auth.headers.Authorization=\"Bearer \"+e,this.options.userAuthentication.headers.Authorization=\"Bearer \"+e)}csrfToken(){var t,e;return typeof window<\"u\"&&(t=window.Laravel)!=null&&t.csrfToken?window.Laravel.csrfToken:this.options.csrfToken?this.options.csrfToken:typeof document<\"u\"&&typeof document.querySelector==\"function\"?((e=document.querySelector('meta[name=\"csrf-token\"]'))==null?void 0:e.getAttribute(\"content\"))??null:null}};la._defaultOptions={auth:{headers:{}},authEndpoint:\"/broadcasting/auth\",userAuthentication:{endpoint:\"/broadcasting/user-auth\",headers:{}},csrfToken:null,bearerToken:null,host:null,key:null,namespace:\"App.Events\"};let Cs=la;class ni extends Cs{constructor(){super(...arguments),this.channels={}}connect(){if(typeof this.options.client<\"u\")this.pusher=this.options.client;else if(this.options.Pusher)this.pusher=new this.options.Pusher(this.options.key,this.options);else if(typeof window<\"u\"&&typeof window.Pusher<\"u\")this.pusher=new window.Pusher(this.options.key,this.options);else throw new Error(\"Pusher client not found. Should be globally available or passed via options.client\")}signin(){this.pusher.signin()}listen(t,e,n){return this.channel(t).listen(e,n)}channel(t){return this.channels[t]||(this.channels[t]=new xs(this.pusher,t,this.options)),this.channels[t]}privateChannel(t){return this.channels[\"private-\"+t]||(this.channels[\"private-\"+t]=new sa(this.pusher,\"private-\"+t,this.options)),this.channels[\"private-\"+t]}encryptedPrivateChannel(t){return this.channels[\"private-encrypted-\"+t]||(this.channels[\"private-encrypted-\"+t]=new qc(this.pusher,\"private-encrypted-\"+t,this.options)),this.channels[\"private-encrypted-\"+t]}presenceChannel(t){return this.channels[\"presence-\"+t]||(this.channels[\"presence-\"+t]=new $c(this.pusher,\"presence-\"+t,this.options)),this.channels[\"presence-\"+t]}leave(t){[t,\"private-\"+t,\"private-encrypted-\"+t,\"presence-\"+t].forEach(e=>{this.leaveChannel(e)})}leaveChannel(t){this.channels[t]&&(this.channels[t].unsubscribe(),delete this.channels[t])}socketId(){return this.pusher.connection.socket_id}connectionStatus(){const t=this.pusher.connection.state;switch(t){case\"connected\":case\"connecting\":return t;case\"failed\":case\"unavailable\":return\"failed\";default:return\"disconnected\"}}onConnectionChange(t){const e=()=>{t(this.connectionStatus())},n=[\"state_change\",\"connected\",\"disconnected\"];return n.forEach(i=>{this.pusher.connection.bind(i,e)}),()=>{n.forEach(i=>{this.pusher.connection.unbind(i,e)})}}disconnect(){this.pusher.disconnect()}}class Qc extends Cs{constructor(){super(...arguments),this.channels={}}connect(){let t=this.getSocketIO();this.socket=t(this.options.host??void 0,this.options),this.socket.io.on(\"reconnect\",()=>{Object.values(this.channels).forEach(e=>{e.subscribe()})})}getSocketIO(){if(typeof this.options.client<\"u\")return this.options.client;if(typeof window<\"u\"&&typeof window.io<\"u\")return window.io;throw new Error(\"Socket.io client not found. Should be globally available or passed via options.client\")}listen(t,e,n){return this.channel(t).listen(e,n)}channel(t){return this.channels[t]||(this.channels[t]=new ra(this.socket,t,this.options)),this.channels[t]}privateChannel(t){return this.channels[\"private-\"+t]||(this.channels[\"private-\"+t]=new aa(this.socket,\"private-\"+t,this.options)),this.channels[\"private-\"+t]}presenceChannel(t){return this.channels[\"presence-\"+t]||(this.channels[\"presence-\"+t]=new Vc(this.socket,\"presence-\"+t,this.options)),this.channels[\"presence-\"+t]}leave(t){[t,\"private-\"+t,\"presence-\"+t].forEach(e=>{this.leaveChannel(e)})}leaveChannel(t){this.channels[t]&&(this.channels[t].unsubscribe(),delete this.channels[t])}socketId(){return this.socket.id}connectionStatus(){return this.socket.connected?\"connected\":this.socket.io._reconnecting?\"reconnecting\":this.socket.id!==void 0?\"disconnected\":\"connecting\"}onConnectionChange(t){const e=()=>{t(this.connectionStatus())},n=[\"connect\",\"disconnect\",\"connect_error\",\"reconnect_attempt\",\"reconnect\",\"reconnect_error\",\"reconnect_failed\"];return n.forEach(i=>{this.socket.on(i,e)}),()=>{n.forEach(i=>{this.socket.off(i,e)})}}disconnect(){this.socket.disconnect()}}class fr extends Cs{constructor(){super(...arguments),this.channels={}}connect(){}listen(t,e,n){return new hi}channel(t){return new hi}privateChannel(t){return new oa}encryptedPrivateChannel(t){return new Kc}presenceChannel(t){return new Jc}leave(t){}leaveChannel(t){}socketId(){return\"fake-socket-id\"}connectionStatus(){return\"connected\"}onConnectionChange(t){return()=>{}}disconnect(){}}class Zc{constructor(t){this.options=t,this.connect(),this.options.withoutInterceptors||this.registerInterceptors()}channel(t){return this.connector.channel(t)}connect(){if(this.options.broadcaster===\"reverb\")this.connector=new ni({...this.options,cluster:\"\"});else if(this.options.broadcaster===\"pusher\")this.connector=new ni(this.options);else if(this.options.broadcaster===\"ably\")this.connector=new ni({...this.options,cluster:\"\",broadcaster:\"pusher\"});else if(this.options.broadcaster===\"socket.io\")this.connector=new Qc(this.options);else if(this.options.broadcaster===\"null\")this.connector=new fr(this.options);else if(typeof this.options.broadcaster==\"function\"&&Yc(this.options.broadcaster))this.connector=new this.options.broadcaster(this.options);else throw new Error(`Broadcaster ${typeof this.options.broadcaster} ${String(this.options.broadcaster)} is not supported.`)}disconnect(){this.connector.disconnect()}join(t){return this.connector.presenceChannel(t)}leave(t){this.connector.leave(t)}leaveChannel(t){this.connector.leaveChannel(t)}leaveAllChannels(){for(const t in this.connector.channels)this.leaveChannel(t)}listen(t,e,n){return this.connector.listen(t,e,n)}private(t){return this.connector.privateChannel(t)}encryptedPrivate(t){if(this.connectorSupportsEncryptedPrivateChannels(this.connector))return this.connector.encryptedPrivateChannel(t);throw new Error(`Broadcaster ${typeof this.options.broadcaster} ${String(this.options.broadcaster)} does not support encrypted private channels.`)}connectorSupportsEncryptedPrivateChannels(t){return t instanceof ni||t instanceof fr}socketId(){return this.connector.socketId()}connectionStatus(){return this.connector.connectionStatus()}registerInterceptors(){typeof Vue<\"u\"&&Vue!=null&&Vue.http&&this.registerVueRequestInterceptor(),typeof axios==\"function\"&&this.registerAxiosRequestInterceptor(),typeof jQuery==\"function\"&&this.registerjQueryAjaxSetup(),typeof Turbo==\"object\"&&this.registerTurboRequestInterceptor()}registerVueRequestInterceptor(){Vue.http.interceptors.push((t,e)=>{this.socketId()&&t.headers.set(\"X-Socket-ID\",this.socketId()),e()})}registerAxiosRequestInterceptor(){axios.interceptors.request.use(t=>(this.socketId()&&(t.headers[\"X-Socket-Id\"]=this.socketId()),t))}registerjQueryAjaxSetup(){typeof jQuery.ajax<\"u\"&&jQuery.ajaxPrefilter((t,e,n)=>{this.socketId()&&n.setRequestHeader(\"X-Socket-Id\",this.socketId())})}registerTurboRequestInterceptor(){document.addEventListener(\"turbo:before-fetch-request\",t=>{t.detail.fetchOptions.headers[\"X-Socket-Id\"]=this.socketId()})}}var is={exports:{}};var gr;function td(){return gr||(gr=1,(function(r,t){(function(n,i){r.exports=i()})(window,function(){return(function(e){var n={};function i(s){if(n[s])return n[s].exports;var a=n[s]={i:s,l:!1,exports:{}};return e[s].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return i.m=e,i.c=n,i.d=function(s,a,o){i.o(s,a)||Object.defineProperty(s,a,{enumerable:!0,get:o})},i.r=function(s){typeof Symbol<\"u\"&&Symbol.toStringTag&&Object.defineProperty(s,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(s,\"__esModule\",{value:!0})},i.t=function(s,a){if(a&1&&(s=i(s)),a&8||a&4&&typeof s==\"object\"&&s&&s.__esModule)return s;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:s}),a&2&&typeof s!=\"string\")for(var h in s)i.d(o,h,(function(f){return s[f]}).bind(null,h));return o},i.n=function(s){var a=s&&s.__esModule?function(){return s.default}:function(){return s};return i.d(a,\"a\",a),a},i.o=function(s,a){return Object.prototype.hasOwnProperty.call(s,a)},i.p=\"\",i(i.s=2)})([(function(e,n,i){var s=this&&this.__extends||(function(){var k=function(w,C){return k=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(T,E){T.__proto__=E}||function(T,E){for(var M in E)E.hasOwnProperty(M)&&(T[M]=E[M])},k(w,C)};return function(w,C){k(w,C);function T(){this.constructor=w}w.prototype=C===null?Object.create(C):(T.prototype=C.prototype,new T)}})();Object.defineProperty(n,\"__esModule\",{value:!0});var a=256,o=(function(){function k(w){w===void 0&&(w=\"=\"),this._paddingCharacter=w}return k.prototype.encodedLength=function(w){return this._paddingCharacter?(w+2)/3*4|0:(w*8+5)/6|0},k.prototype.encode=function(w){for(var C=\"\",T=0;T<w.length-2;T+=3){var E=w[T]<<16|w[T+1]<<8|w[T+2];C+=this._encodeByte(E>>>18&63),C+=this._encodeByte(E>>>12&63),C+=this._encodeByte(E>>>6&63),C+=this._encodeByte(E>>>0&63)}var M=w.length-T;if(M>0){var E=w[T]<<16|(M===2?w[T+1]<<8:0);C+=this._encodeByte(E>>>18&63),C+=this._encodeByte(E>>>12&63),M===2?C+=this._encodeByte(E>>>6&63):C+=this._paddingCharacter||\"\",C+=this._paddingCharacter||\"\"}return C},k.prototype.maxDecodedLength=function(w){return this._paddingCharacter?w/4*3|0:(w*6+7)/8|0},k.prototype.decodedLength=function(w){return this.maxDecodedLength(w.length-this._getPaddingLength(w))},k.prototype.decode=function(w){if(w.length===0)return new Uint8Array(0);for(var C=this._getPaddingLength(w),T=w.length-C,E=new Uint8Array(this.maxDecodedLength(T)),M=0,j=0,N=0,B=0,R=0,D=0,q=0;j<T-4;j+=4)B=this._decodeChar(w.charCodeAt(j+0)),R=this._decodeChar(w.charCodeAt(j+1)),D=this._decodeChar(w.charCodeAt(j+2)),q=this._decodeChar(w.charCodeAt(j+3)),E[M++]=B<<2|R>>>4,E[M++]=R<<4|D>>>2,E[M++]=D<<6|q,N|=B&a,N|=R&a,N|=D&a,N|=q&a;if(j<T-1&&(B=this._decodeChar(w.charCodeAt(j)),R=this._decodeChar(w.charCodeAt(j+1)),E[M++]=B<<2|R>>>4,N|=B&a,N|=R&a),j<T-2&&(D=this._decodeChar(w.charCodeAt(j+2)),E[M++]=R<<4|D>>>2,N|=D&a),j<T-3&&(q=this._decodeChar(w.charCodeAt(j+3)),E[M++]=D<<6|q,N|=q&a),N!==0)throw new Error(\"Base64Coder: incorrect characters for decoding\");return E},k.prototype._encodeByte=function(w){var C=w;return C+=65,C+=25-w>>>8&6,C+=51-w>>>8&-75,C+=61-w>>>8&-15,C+=62-w>>>8&3,String.fromCharCode(C)},k.prototype._decodeChar=function(w){var C=a;return C+=(42-w&w-44)>>>8&-a+w-43+62,C+=(46-w&w-48)>>>8&-a+w-47+63,C+=(47-w&w-58)>>>8&-a+w-48+52,C+=(64-w&w-91)>>>8&-a+w-65+0,C+=(96-w&w-123)>>>8&-a+w-97+26,C},k.prototype._getPaddingLength=function(w){var C=0;if(this._paddingCharacter){for(var T=w.length-1;T>=0&&w[T]===this._paddingCharacter;T--)C++;if(w.length<4||C>2)throw new Error(\"Base64Coder: incorrect padding\")}return C},k})();n.Coder=o;var h=new o;function f(k){return h.encode(k)}n.encode=f;function u(k){return h.decode(k)}n.decode=u;var p=(function(k){s(w,k);function w(){return k!==null&&k.apply(this,arguments)||this}return w.prototype._encodeByte=function(C){var T=C;return T+=65,T+=25-C>>>8&6,T+=51-C>>>8&-75,T+=61-C>>>8&-13,T+=62-C>>>8&49,String.fromCharCode(T)},w.prototype._decodeChar=function(C){var T=a;return T+=(44-C&C-46)>>>8&-a+C-45+62,T+=(94-C&C-96)>>>8&-a+C-95+63,T+=(47-C&C-58)>>>8&-a+C-48+52,T+=(64-C&C-91)>>>8&-a+C-65+0,T+=(96-C&C-123)>>>8&-a+C-97+26,T},w})(o);n.URLSafeCoder=p;var g=new p;function _(k){return g.encode(k)}n.encodeURLSafe=_;function y(k){return g.decode(k)}n.decodeURLSafe=y,n.encodedLength=function(k){return h.encodedLength(k)},n.maxDecodedLength=function(k){return h.maxDecodedLength(k)},n.decodedLength=function(k){return h.decodedLength(k)}}),(function(e,n,i){Object.defineProperty(n,\"__esModule\",{value:!0});var s=\"utf8: invalid string\",a=\"utf8: invalid source encoding\";function o(u){for(var p=new Uint8Array(h(u)),g=0,_=0;_<u.length;_++){var y=u.charCodeAt(_);y<128?p[g++]=y:y<2048?(p[g++]=192|y>>6,p[g++]=128|y&63):y<55296?(p[g++]=224|y>>12,p[g++]=128|y>>6&63,p[g++]=128|y&63):(_++,y=(y&1023)<<10,y|=u.charCodeAt(_)&1023,y+=65536,p[g++]=240|y>>18,p[g++]=128|y>>12&63,p[g++]=128|y>>6&63,p[g++]=128|y&63)}return p}n.encode=o;function h(u){for(var p=0,g=0;g<u.length;g++){var _=u.charCodeAt(g);if(_<128)p+=1;else if(_<2048)p+=2;else if(_<55296)p+=3;else if(_<=57343){if(g>=u.length-1)throw new Error(s);g++,p+=4}else throw new Error(s)}return p}n.encodedLength=h;function f(u){for(var p=[],g=0;g<u.length;g++){var _=u[g];if(_&128){var y=void 0;if(_<224){if(g>=u.length)throw new Error(a);var k=u[++g];if((k&192)!==128)throw new Error(a);_=(_&31)<<6|k&63,y=128}else if(_<240){if(g>=u.length-1)throw new Error(a);var k=u[++g],w=u[++g];if((k&192)!==128||(w&192)!==128)throw new Error(a);_=(_&15)<<12|(k&63)<<6|w&63,y=2048}else if(_<248){if(g>=u.length-2)throw new Error(a);var k=u[++g],w=u[++g],C=u[++g];if((k&192)!==128||(w&192)!==128||(C&192)!==128)throw new Error(a);_=(_&15)<<18|(k&63)<<12|(w&63)<<6|C&63,y=65536}else throw new Error(a);if(_<y||_>=55296&&_<=57343)throw new Error(a);if(_>=65536){if(_>1114111)throw new Error(a);_-=65536,p.push(String.fromCharCode(55296|_>>10)),_=56320|_&1023}}p.push(String.fromCharCode(_))}return p.join(\"\")}n.decode=f}),(function(e,n,i){e.exports=i(3).default}),(function(e,n,i){i.r(n);class s{constructor(l,c){this.lastId=0,this.prefix=l,this.name=c}create(l){this.lastId++;var c=this.lastId,m=this.prefix+c,x=this.name+\"[\"+c+\"]\",I=!1,X=function(){I||(l.apply(null,arguments),I=!0)};return this[c]=X,{number:c,id:m,name:x,callback:X}}remove(l){delete this[l.number]}}var a=new s(\"_pusher_script_\",\"Pusher.ScriptReceivers\"),o={VERSION:\"8.4.0\",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:\"\",httpHost:\"sockjs.pusher.com\",httpPort:80,httpsPort:443,httpPath:\"/pusher\",stats_host:\"stats.pusher.com\",authEndpoint:\"/pusher/auth\",authTransport:\"ajax\",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,userAuthentication:{endpoint:\"/pusher/user-auth\",transport:\"ajax\"},channelAuthorization:{endpoint:\"/pusher/auth\",transport:\"ajax\"},cdn_http:\"http://js.pusher.com\",cdn_https:\"https://js.pusher.com\",dependency_suffix:\"\"},h=o;class f{constructor(l){this.options=l,this.receivers=l.receivers||a,this.loading={}}load(l,c,m){var x=this;if(x.loading[l]&&x.loading[l].length>0)x.loading[l].push(m);else{x.loading[l]=[m];var I=lt.createScriptRequest(x.getPath(l,c)),X=x.receivers.create(function(J){if(x.receivers.remove(X),x.loading[l]){var rt=x.loading[l];delete x.loading[l];for(var pt=function(Rt){Rt||I.cleanup()},bt=0;bt<rt.length;bt++)rt[bt](J,pt)}});I.send(X)}}getRoot(l){var c,m=lt.getDocument().location.protocol;return l&&l.useTLS||m===\"https:\"?c=this.options.cdn_https:c=this.options.cdn_http,c.replace(/\\/*$/,\"\")+\"/\"+this.options.version}getPath(l,c){return this.getRoot(c)+\"/\"+l+this.options.suffix+\".js\"}}var u=new s(\"_pusher_dependencies\",\"Pusher.DependenciesReceivers\"),p=new f({cdn_http:h.cdn_http,cdn_https:h.cdn_https,version:h.VERSION,suffix:h.dependency_suffix,receivers:u});const g={baseUrl:\"https://pusher.com\",urls:{authenticationEndpoint:{path:\"/docs/channels/server_api/authenticating_users\"},authorizationEndpoint:{path:\"/docs/channels/server_api/authorizing-users/\"},javascriptQuickStart:{path:\"/docs/javascript_quick_start\"},triggeringClientEvents:{path:\"/docs/client_api_guide/client_events#trigger-events\"},encryptedChannelSupport:{fullUrl:\"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support\"}}};var y={buildLogSuffix:function(d){const l=\"See:\",c=g.urls[d];if(!c)return\"\";let m;return c.fullUrl?m=c.fullUrl:c.path&&(m=g.baseUrl+c.path),m?`${l} ${m}`:\"\"}},k;(function(d){d.UserAuthentication=\"user-authentication\",d.ChannelAuthorization=\"channel-authorization\"})(k||(k={}));class w extends Error{constructor(l){super(l),Object.setPrototypeOf(this,new.target.prototype)}}class C extends Error{constructor(l){super(l),Object.setPrototypeOf(this,new.target.prototype)}}class T extends Error{constructor(l){super(l),Object.setPrototypeOf(this,new.target.prototype)}}class E extends Error{constructor(l){super(l),Object.setPrototypeOf(this,new.target.prototype)}}class M extends Error{constructor(l){super(l),Object.setPrototypeOf(this,new.target.prototype)}}class j extends Error{constructor(l){super(l),Object.setPrototypeOf(this,new.target.prototype)}}class N extends Error{constructor(l){super(l),Object.setPrototypeOf(this,new.target.prototype)}}class B extends Error{constructor(l){super(l),Object.setPrototypeOf(this,new.target.prototype)}}class R extends Error{constructor(l,c){super(c),this.status=l,Object.setPrototypeOf(this,new.target.prototype)}}var q=function(d,l,c,m,x){const I=lt.createXHR();I.open(\"POST\",c.endpoint,!0),I.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\");for(var X in c.headers)I.setRequestHeader(X,c.headers[X]);if(c.headersProvider!=null){let J=c.headersProvider();for(var X in J)I.setRequestHeader(X,J[X])}return I.onreadystatechange=function(){if(I.readyState===4)if(I.status===200){let J,rt=!1;try{J=JSON.parse(I.responseText),rt=!0}catch{x(new R(200,`JSON returned from ${m.toString()} endpoint was invalid, yet status code was 200. Data was: ${I.responseText}`),null)}rt&&x(null,J)}else{let J=\"\";switch(m){case k.UserAuthentication:J=y.buildLogSuffix(\"authenticationEndpoint\");break;case k.ChannelAuthorization:J=`Clients must be authorized to join private or presence channels. ${y.buildLogSuffix(\"authorizationEndpoint\")}`;break}x(new R(I.status,`Unable to retrieve auth string from ${m.toString()} endpoint - received status: ${I.status} from ${c.endpoint}. ${J}`),null)}},I.send(l),I};function at(d){return gt(Q(d))}var G=String.fromCharCode,st=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",it=function(d){var l=d.charCodeAt(0);return l<128?d:l<2048?G(192|l>>>6)+G(128|l&63):G(224|l>>>12&15)+G(128|l>>>6&63)+G(128|l&63)},Q=function(d){return d.replace(/[^\\x00-\\x7F]/g,it)},$=function(d){var l=[0,2,1][d.length%3],c=d.charCodeAt(0)<<16|(d.length>1?d.charCodeAt(1):0)<<8|(d.length>2?d.charCodeAt(2):0),m=[st.charAt(c>>>18),st.charAt(c>>>12&63),l>=2?\"=\":st.charAt(c>>>6&63),l>=1?\"=\":st.charAt(c&63)];return m.join(\"\")},gt=window.btoa||function(d){return d.replace(/[\\s\\S]{1,3}/g,$)};class Z{constructor(l,c,m,x){this.clear=c,this.timer=l(()=>{this.timer&&(this.timer=x(this.timer))},m)}isRunning(){return this.timer!==null}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}}var ct=Z;function St(d){window.clearTimeout(d)}function dt(d){window.clearInterval(d)}class ut extends ct{constructor(l,c){super(setTimeout,St,l,function(m){return c(),null})}}class Lt extends ct{constructor(l,c){super(setInterval,dt,l,function(m){return c(),m})}}var ue={now(){return Date.now?Date.now():new Date().valueOf()},defer(d){return new ut(0,d)},method(d,...l){var c=Array.prototype.slice.call(arguments,1);return function(m){return m[d].apply(m,c.concat(arguments))}}},Et=ue;function yt(d,...l){for(var c=0;c<l.length;c++){var m=l[c];for(var x in m)m[x]&&m[x].constructor&&m[x].constructor===Object?d[x]=yt(d[x]||{},m[x]):d[x]=m[x]}return d}function Qt(){for(var d=[\"Pusher\"],l=0;l<arguments.length;l++)typeof arguments[l]==\"string\"?d.push(arguments[l]):d.push(He(arguments[l]));return d.join(\" : \")}function Pn(d,l){var c=Array.prototype.indexOf;if(d===null)return-1;if(c&&d.indexOf===c)return d.indexOf(l);for(var m=0,x=d.length;m<x;m++)if(d[m]===l)return m;return-1}function Zt(d,l){for(var c in d)Object.prototype.hasOwnProperty.call(d,c)&&l(d[c],c,d)}function En(d){var l=[];return Zt(d,function(c,m){l.push(m)}),l}function gi(d){var l=[];return Zt(d,function(c){l.push(c)}),l}function ke(d,l,c){for(var m=0;m<d.length;m++)l.call(c||window,d[m],m,d)}function An(d,l){for(var c=[],m=0;m<d.length;m++)c.push(l(d[m],m,d,c));return c}function pi(d,l){var c={};return Zt(d,function(m,x){c[x]=l(m)}),c}function Rn(d,l){l=l||function(x){return!!x};for(var c=[],m=0;m<d.length;m++)l(d[m],m,d,c)&&c.push(d[m]);return c}function Fe(d,l){var c={};return Zt(d,function(m,x){(l&&l(m,x,d,c)||m)&&(c[x]=m)}),c}function Te(d){var l=[];return Zt(d,function(c,m){l.push([m,c])}),l}function Mn(d,l){for(var c=0;c<d.length;c++)if(l(d[c],c,d))return!0;return!1}function Ln(d,l){for(var c=0;c<d.length;c++)if(!l(d[c],c,d))return!1;return!0}function Dt(d){return pi(d,function(l){return typeof l==\"object\"&&(l=He(l)),encodeURIComponent(at(l.toString()))})}function On(d){var l=Fe(d,function(m){return m!==void 0}),c=An(Te(Dt(l)),Et.method(\"join\",\"=\")).join(\"&\");return c}function In(d){var l=[],c=[];return(function m(x,I){var X,J,rt;switch(typeof x){case\"object\":if(!x)return null;for(X=0;X<l.length;X+=1)if(l[X]===x)return{$ref:c[X]};if(l.push(x),c.push(I),Object.prototype.toString.apply(x)===\"[object Array]\")for(rt=[],X=0;X<x.length;X+=1)rt[X]=m(x[X],I+\"[\"+X+\"]\");else{rt={};for(J in x)Object.prototype.hasOwnProperty.call(x,J)&&(rt[J]=m(x[J],I+\"[\"+JSON.stringify(J)+\"]\"))}return rt;case\"number\":case\"string\":case\"boolean\":return x}})(d,\"$\")}function He(d){try{return JSON.stringify(d)}catch{return JSON.stringify(In(d))}}class mi{constructor(){this.globalLog=l=>{window.console&&window.console.log&&window.console.log(l)}}debug(...l){this.log(this.globalLog,l)}warn(...l){this.log(this.globalLogWarn,l)}error(...l){this.log(this.globalLogError,l)}globalLogWarn(l){window.console&&window.console.warn?window.console.warn(l):this.globalLog(l)}globalLogError(l){window.console&&window.console.error?window.console.error(l):this.globalLogWarn(l)}log(l,...c){var m=Qt.apply(this,arguments);Xi.log?Xi.log(m):Xi.logToConsole&&l.bind(this)(m)}}var _t=new mi,Dn=function(d,l,c,m,x){(c.headers!==void 0||c.headersProvider!=null)&&_t.warn(`To send headers with the ${m.toString()} request, you must use AJAX, rather than JSONP.`);var I=d.nextAuthCallbackID.toString();d.nextAuthCallbackID++;var X=d.getDocument(),J=X.createElement(\"script\");d.auth_callbacks[I]=function(bt){x(null,bt)};var rt=\"Pusher.auth_callbacks['\"+I+\"']\";J.src=c.endpoint+\"?callback=\"+encodeURIComponent(rt)+\"&\"+l;var pt=X.getElementsByTagName(\"head\")[0]||X.documentElement;pt.insertBefore(J,pt.firstChild)},vi=Dn;class yi{constructor(l){this.src=l}send(l){var c=this,m=\"Error loading \"+c.src;c.script=document.createElement(\"script\"),c.script.id=l.id,c.script.src=c.src,c.script.type=\"text/javascript\",c.script.charset=\"UTF-8\",c.script.addEventListener?(c.script.onerror=function(){l.callback(m)},c.script.onload=function(){l.callback(null)}):c.script.onreadystatechange=function(){(c.script.readyState===\"loaded\"||c.script.readyState===\"complete\")&&l.callback(null)},c.script.async===void 0&&document.attachEvent&&/opera/i.test(navigator.userAgent)?(c.errorScript=document.createElement(\"script\"),c.errorScript.id=l.id+\"_error\",c.errorScript.text=l.name+\"('\"+m+\"');\",c.script.async=c.errorScript.async=!1):c.script.async=!0;var x=document.getElementsByTagName(\"head\")[0];x.insertBefore(c.script,x.firstChild),c.errorScript&&x.insertBefore(c.errorScript,c.script.nextSibling)}cleanup(){this.script&&(this.script.onload=this.script.onerror=null,this.script.onreadystatechange=null),this.script&&this.script.parentNode&&this.script.parentNode.removeChild(this.script),this.errorScript&&this.errorScript.parentNode&&this.errorScript.parentNode.removeChild(this.errorScript),this.script=null,this.errorScript=null}}class Nn{constructor(l,c){this.url=l,this.data=c}send(l){if(!this.request){var c=On(this.data),m=this.url+\"/\"+l.number+\"?\"+c;this.request=lt.createScriptRequest(m),this.request.send(l)}}cleanup(){this.request&&this.request.cleanup()}}var bi=function(d,l){return function(c,m){var x=\"http\"+(l?\"s\":\"\")+\"://\",I=x+(d.host||d.options.host)+d.options.path,X=lt.createJSONPRequest(I,c),J=lt.ScriptReceivers.create(function(rt,pt){a.remove(J),X.cleanup(),pt&&pt.host&&(d.host=pt.host),m&&m(rt,pt)});X.send(J)}},_i={name:\"jsonp\",getAgent:bi},wi=_i;function zt(d,l,c){var m=d+(l.useTLS?\"s\":\"\"),x=l.useTLS?l.hostTLS:l.hostNonTLS;return m+\"://\"+x+c}function Be(d,l){var c=\"/app/\"+d,m=\"?protocol=\"+h.PROTOCOL+\"&client=js&version=\"+h.VERSION+(l?\"&\"+l:\"\");return c+m}var Si={getInitial:function(d,l){var c=(l.httpPath||\"\")+Be(d,\"flash=false\");return zt(\"ws\",l,c)}},xi={getInitial:function(d,l){var c=(l.httpPath||\"/pusher\")+Be(d);return zt(\"http\",l,c)}},ze={getInitial:function(d,l){return zt(\"http\",l,l.httpPath||\"/pusher\")},getPath:function(d,l){return Be(d)}};class Ci{constructor(){this._callbacks={}}get(l){return this._callbacks[Ke(l)]}add(l,c,m){var x=Ke(l);this._callbacks[x]=this._callbacks[x]||[],this._callbacks[x].push({fn:c,context:m})}remove(l,c,m){if(!l&&!c&&!m){this._callbacks={};return}var x=l?[Ke(l)]:En(this._callbacks);c||m?this.removeCallback(x,c,m):this.removeAllCallbacks(x)}removeCallback(l,c,m){ke(l,function(x){this._callbacks[x]=Rn(this._callbacks[x]||[],function(I){return c&&c!==I.fn||m&&m!==I.context}),this._callbacks[x].length===0&&delete this._callbacks[x]},this)}removeAllCallbacks(l){ke(l,function(c){delete this._callbacks[c]},this)}}function Ke(d){return\"_\"+d}class qt{constructor(l){this.callbacks=new Ci,this.global_callbacks=[],this.failThrough=l}bind(l,c,m){return this.callbacks.add(l,c,m),this}bind_global(l){return this.global_callbacks.push(l),this}unbind(l,c,m){return this.callbacks.remove(l,c,m),this}unbind_global(l){return l?(this.global_callbacks=Rn(this.global_callbacks||[],c=>c!==l),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit(l,c,m){for(var x=0;x<this.global_callbacks.length;x++)this.global_callbacks[x](l,c);var I=this.callbacks.get(l),X=[];if(m?X.push(c,m):c&&X.push(c),I&&I.length>0)for(var x=0;x<I.length;x++)I[x].fn.apply(I[x].context||window,X);else this.failThrough&&this.failThrough(l,c);return this}}class Je extends qt{constructor(l,c,m,x,I){super(),this.initialize=lt.transportConnectionInitializer,this.hooks=l,this.name=c,this.priority=m,this.key=x,this.options=I,this.state=\"new\",this.timeline=I.timeline,this.activityTimeout=I.activityTimeout,this.id=this.timeline.generateUniqueID()}handlesActivityChecks(){return!!this.hooks.handlesActivityChecks}supportsPing(){return!!this.hooks.supportsPing}connect(){if(this.socket||this.state!==\"initialized\")return!1;var l=this.hooks.urls.getInitial(this.key,this.options);try{this.socket=this.hooks.getSocket(l,this.options)}catch(c){return Et.defer(()=>{this.onError(c),this.changeState(\"closed\")}),!1}return this.bindListeners(),_t.debug(\"Connecting\",{transport:this.name,url:l}),this.changeState(\"connecting\"),!0}close(){return this.socket?(this.socket.close(),!0):!1}send(l){return this.state===\"open\"?(Et.defer(()=>{this.socket&&this.socket.send(l)}),!0):!1}ping(){this.state===\"open\"&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState(\"open\"),this.socket.onopen=void 0}onError(l){this.emit(\"error\",{type:\"WebSocketError\",error:l}),this.timeline.error(this.buildTimelineMessage({error:l.toString()}))}onClose(l){l?this.changeState(\"closed\",{code:l.code,reason:l.reason,wasClean:l.wasClean}):this.changeState(\"closed\"),this.unbindListeners(),this.socket=void 0}onMessage(l){this.emit(\"message\",l)}onActivity(){this.emit(\"activity\")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=l=>{this.onError(l)},this.socket.onclose=l=>{this.onClose(l)},this.socket.onmessage=l=>{this.onMessage(l)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState(l,c){this.state=l,this.timeline.info(this.buildTimelineMessage({state:l,params:c})),this.emit(l,c)}buildTimelineMessage(l){return yt({cid:this.id},l)}}class fe{constructor(l){this.hooks=l}isSupported(l){return this.hooks.isSupported(l)}createConnection(l,c,m,x){return new Je(this.hooks,l,c,m,x)}}var Gn=new fe({urls:Si,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return!!lt.getWebSocketAPI()},isSupported:function(){return!!lt.getWebSocketAPI()},getSocket:function(d){return lt.createWebSocket(d)}}),je={urls:xi,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},Qe=yt({getSocket:function(d){return lt.HTTPFactory.createStreamingSocket(d)}},je),Fn=yt({getSocket:function(d){return lt.HTTPFactory.createPollingSocket(d)}},je),ie={isSupported:function(){return lt.isXHRSupported()}},ki=new fe(yt({},Qe,ie)),Ti=new fe(yt({},Fn,ie)),$t={ws:Gn,xhr_streaming:ki,xhr_polling:Ti},Pe=$t,Pi=new fe({file:\"sockjs\",urls:ze,handlesActivityChecks:!0,supportsPing:!1,isSupported:function(){return!0},isInitialized:function(){return window.SockJS!==void 0},getSocket:function(d,l){return new window.SockJS(d,null,{js_path:p.getPath(\"sockjs\",{useTLS:l.useTLS}),ignore_null_origin:l.ignoreNullOrigin})},beforeOpen:function(d,l){d.send(JSON.stringify({path:l}))}}),Hn={isSupported:function(d){var l=lt.isXDRSupported(d.useTLS);return l}},Ei=new fe(yt({},Qe,Hn)),Ai=new fe(yt({},Fn,Hn));Pe.xdr_streaming=Ei,Pe.xdr_polling=Ai,Pe.sockjs=Pi;var Bn=Pe;class Ri extends qt{constructor(){super();var l=this;window.addEventListener!==void 0&&(window.addEventListener(\"online\",function(){l.emit(\"online\")},!1),window.addEventListener(\"offline\",function(){l.emit(\"offline\")},!1))}isOnline(){return window.navigator.onLine===void 0?!0:window.navigator.onLine}}var Mi=new Ri;class jt{constructor(l,c,m){this.manager=l,this.transport=c,this.minPingDelay=m.minPingDelay,this.maxPingDelay=m.maxPingDelay,this.pingDelay=void 0}createConnection(l,c,m,x){x=yt({},x,{activityTimeout:this.pingDelay});var I=this.transport.createConnection(l,c,m,x),X=null,J=function(){I.unbind(\"open\",J),I.bind(\"closed\",rt),X=Et.now()},rt=pt=>{if(I.unbind(\"closed\",rt),pt.code===1002||pt.code===1003)this.manager.reportDeath();else if(!pt.wasClean&&X){var bt=Et.now()-X;bt<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(bt/2,this.minPingDelay))}};return I.bind(\"open\",J),I}isSupported(l){return this.manager.isAlive()&&this.transport.isSupported(l)}}const zn={decodeMessage:function(d){try{var l=JSON.parse(d.data),c=l.data;if(typeof c==\"string\")try{c=JSON.parse(l.data)}catch{}var m={event:l.event,channel:l.channel,data:c};return l.user_id&&(m.user_id=l.user_id),m}catch(x){throw{type:\"MessageParseError\",error:x,data:d.data}}},encodeMessage:function(d){return JSON.stringify(d)},processHandshake:function(d){var l=zn.decodeMessage(d);if(l.event===\"pusher:connection_established\"){if(!l.data.activity_timeout)throw\"No activity timeout specified in handshake\";return{action:\"connected\",id:l.data.socket_id,activityTimeout:l.data.activity_timeout*1e3}}else{if(l.event===\"pusher:error\")return{action:this.getCloseAction(l.data),error:this.getCloseError(l.data)};throw\"Invalid handshake\"}},getCloseAction:function(d){return d.code<4e3?d.code>=1002&&d.code<=1004?\"backoff\":null:d.code===4e3?\"tls_only\":d.code<4100?\"refused\":d.code<4200?\"backoff\":d.code<4300?\"retry\":\"refused\"},getCloseError:function(d){return d.code!==1e3&&d.code!==1001?{type:\"PusherError\",data:{code:d.code,message:d.reason||d.message}}:null}};var re=zn;class Li extends qt{constructor(l,c){super(),this.id=l,this.transport=c,this.activityTimeout=c.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send(l){return this.transport.send(l)}send_event(l,c,m){var x={event:l,data:c};return m&&(x.channel=m),_t.debug(\"Event sent\",x),this.send(re.encodeMessage(x))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event(\"pusher:ping\",{})}close(){this.transport.close()}bindListeners(){var l={message:m=>{var x;try{x=re.decodeMessage(m)}catch(I){this.emit(\"error\",{type:\"MessageParseError\",error:I,data:m.data})}if(x!==void 0){switch(_t.debug(\"Event recd\",x),x.event){case\"pusher:error\":this.emit(\"error\",{type:\"PusherError\",data:x.data});break;case\"pusher:ping\":this.emit(\"ping\");break;case\"pusher:pong\":this.emit(\"pong\");break}this.emit(\"message\",x)}},activity:()=>{this.emit(\"activity\")},error:m=>{this.emit(\"error\",m)},closed:m=>{c(),m&&m.code&&this.handleCloseEvent(m),this.transport=null,this.emit(\"closed\")}},c=()=>{Zt(l,(m,x)=>{this.transport.unbind(x,m)})};Zt(l,(m,x)=>{this.transport.bind(x,m)})}handleCloseEvent(l){var c=re.getCloseAction(l),m=re.getCloseError(l);m&&this.emit(\"error\",m),c&&this.emit(c,{action:c,error:m})}}class jn{constructor(l,c){this.transport=l,this.callback=c,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=l=>{this.unbindListeners();var c;try{c=re.processHandshake(l)}catch(m){this.finish(\"error\",{error:m}),this.transport.close();return}c.action===\"connected\"?this.finish(\"connected\",{connection:new Li(c.id,this.transport),activityTimeout:c.activityTimeout}):(this.finish(c.action,{error:c.error}),this.transport.close())},this.onClosed=l=>{this.unbindListeners();var c=re.getCloseAction(l)||\"backoff\",m=re.getCloseError(l);this.finish(c,{error:m})},this.transport.bind(\"message\",this.onMessage),this.transport.bind(\"closed\",this.onClosed)}unbindListeners(){this.transport.unbind(\"message\",this.onMessage),this.transport.unbind(\"closed\",this.onClosed)}finish(l,c){this.callback(yt({transport:this.transport,action:l},c))}}class Nt{constructor(l,c){this.timeline=l,this.options=c||{}}send(l,c){this.timeline.isEmpty()||this.timeline.send(lt.TimelineTransport.getAgent(this,l),c)}}class Ze extends qt{constructor(l,c){super(function(m,x){_t.debug(\"No callbacks on \"+l+\" for \"+m)}),this.name=l,this.pusher=c,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize(l,c){return c(null,{auth:\"\"})}trigger(l,c){if(l.indexOf(\"client-\")!==0)throw new w(\"Event '\"+l+\"' does not start with 'client-'\");if(!this.subscribed){var m=y.buildLogSuffix(\"triggeringClientEvents\");_t.warn(`Client event triggered before channel 'subscription_succeeded' event . ${m}`)}return this.pusher.send_event(l,c,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent(l){var c=l.event,m=l.data;if(c===\"pusher_internal:subscription_succeeded\")this.handleSubscriptionSucceededEvent(l);else if(c===\"pusher_internal:subscription_count\")this.handleSubscriptionCountEvent(l);else if(c.indexOf(\"pusher_internal:\")!==0){var x={};this.emit(c,m,x)}}handleSubscriptionSucceededEvent(l){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit(\"pusher:subscription_succeeded\",l.data)}handleSubscriptionCountEvent(l){l.data.subscription_count&&(this.subscriptionCount=l.data.subscription_count),this.emit(\"pusher:subscription_count\",l.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(l,c)=>{l?(this.subscriptionPending=!1,_t.error(l.toString()),this.emit(\"pusher:subscription_error\",Object.assign({},{type:\"AuthError\",error:l.message},l instanceof R?{status:l.status}:{}))):this.pusher.send_event(\"pusher:subscribe\",{auth:c.auth,channel_data:c.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event(\"pusher:unsubscribe\",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class tn extends Ze{authorize(l,c){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:l},c)}}class Wn{constructor(){this.reset()}get(l){return Object.prototype.hasOwnProperty.call(this.members,l)?{id:l,info:this.members[l]}:null}each(l){Zt(this.members,(c,m)=>{l(this.get(m))})}setMyID(l){this.myID=l}onSubscription(l){this.members=l.presence.hash,this.count=l.presence.count,this.me=this.get(this.myID)}addMember(l){return this.get(l.user_id)===null&&this.count++,this.members[l.user_id]=l.user_info,this.get(l.user_id)}removeMember(l){var c=this.get(l.user_id);return c&&(delete this.members[l.user_id],this.count--),c}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var ge=function(d,l,c,m){function x(I){return I instanceof c?I:new c(function(X){X(I)})}return new(c||(c=Promise))(function(I,X){function J(bt){try{pt(m.next(bt))}catch(Rt){X(Rt)}}function rt(bt){try{pt(m.throw(bt))}catch(Rt){X(Rt)}}function pt(bt){bt.done?I(bt.value):x(bt.value).then(J,rt)}pt((m=m.apply(d,l||[])).next())})};class Oi extends tn{constructor(l,c){super(l,c),this.members=new Wn}authorize(l,c){super.authorize(l,(m,x)=>ge(this,void 0,void 0,function*(){if(!m)if(x=x,x.channel_data!=null){var I=JSON.parse(x.channel_data);this.members.setMyID(I.user_id)}else if(yield this.pusher.user.signinDonePromise,this.pusher.user.user_data!=null)this.members.setMyID(this.pusher.user.user_data.id);else{let X=y.buildLogSuffix(\"authorizationEndpoint\");_t.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${X}, or the user should be signed in.`),c(\"Invalid auth response\");return}c(m,x)}))}handleEvent(l){var c=l.event;if(c.indexOf(\"pusher_internal:\")===0)this.handleInternalEvent(l);else{var m=l.data,x={};l.user_id&&(x.user_id=l.user_id),this.emit(c,m,x)}}handleInternalEvent(l){var c=l.event,m=l.data;switch(c){case\"pusher_internal:subscription_succeeded\":this.handleSubscriptionSucceededEvent(l);break;case\"pusher_internal:subscription_count\":this.handleSubscriptionCountEvent(l);break;case\"pusher_internal:member_added\":var x=this.members.addMember(m);this.emit(\"pusher:member_added\",x);break;case\"pusher_internal:member_removed\":var I=this.members.removeMember(m);I&&this.emit(\"pusher:member_removed\",I);break}}handleSubscriptionSucceededEvent(l){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(l.data),this.emit(\"pusher:subscription_succeeded\",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var Ii=i(1),We=i(0);class Di extends tn{constructor(l,c,m){super(l,c),this.key=null,this.nacl=m}authorize(l,c){super.authorize(l,(m,x)=>{if(m){c(m,x);return}let I=x.shared_secret;if(!I){c(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`),null);return}this.key=Object(We.decode)(I),delete x.shared_secret,c(null,x)})}trigger(l,c){throw new j(\"Client events are not currently supported for encrypted channels\")}handleEvent(l){var c=l.event,m=l.data;if(c.indexOf(\"pusher_internal:\")===0||c.indexOf(\"pusher:\")===0){super.handleEvent(l);return}this.handleEncryptedEvent(c,m)}handleEncryptedEvent(l,c){if(!this.key){_t.debug(\"Received encrypted event before key has been retrieved from the authEndpoint\");return}if(!c.ciphertext||!c.nonce){_t.error(\"Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: \"+c);return}let m=Object(We.decode)(c.ciphertext);if(m.length<this.nacl.secretbox.overheadLength){_t.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${m.length}`);return}let x=Object(We.decode)(c.nonce);if(x.length<this.nacl.secretbox.nonceLength){_t.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${x.length}`);return}let I=this.nacl.secretbox.open(m,x,this.key);if(I===null){_t.debug(\"Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...\"),this.authorize(this.pusher.connection.socket_id,(X,J)=>{if(X){_t.error(`Failed to make a request to the authEndpoint: ${J}. Unable to fetch new key, so dropping encrypted event`);return}if(I=this.nacl.secretbox.open(m,x,this.key),I===null){_t.error(\"Failed to decrypt event with new key. Dropping encrypted event\");return}this.emit(l,this.getDataToEmit(I))});return}this.emit(l,this.getDataToEmit(I))}getDataToEmit(l){let c=Object(Ii.decode)(l);try{return JSON.parse(c)}catch{return c}}}class Ni extends qt{constructor(l,c){super(),this.state=\"initialized\",this.connection=null,this.key=l,this.options=c,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var m=lt.getNetwork();m.bind(\"online\",()=>{this.timeline.info({netinfo:\"online\"}),(this.state===\"connecting\"||this.state===\"unavailable\")&&this.retryIn(0)}),m.bind(\"offline\",()=>{this.timeline.info({netinfo:\"offline\"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}connect(){if(!(this.connection||this.runner)){if(!this.strategy.isSupported()){this.updateState(\"failed\");return}this.updateState(\"connecting\"),this.startConnecting(),this.setUnavailableTimer()}}send(l){return this.connection?this.connection.send(l):!1}send_event(l,c,m){return this.connection?this.connection.send_event(l,c,m):!1}disconnect(){this.disconnectInternally(),this.updateState(\"disconnected\")}isUsingTLS(){return this.usingTLS}startConnecting(){var l=(c,m)=>{c?this.runner=this.strategy.connect(0,l):m.action===\"error\"?(this.emit(\"error\",{type:\"HandshakeError\",error:m.error}),this.timeline.error({handshakeError:m.error})):(this.abortConnecting(),this.handshakeCallbacks[m.action](m))};this.runner=this.strategy.connect(0,l)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){if(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection){var l=this.abandonConnection();l.close()}}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn(l){this.timeline.info({action:\"retry\",delay:l}),l>0&&this.emit(\"connecting_in\",Math.round(l/1e3)),this.retryTimer=new ut(l||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new ut(this.options.unavailableTimeout,()=>{this.updateState(\"unavailable\")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new ut(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new ut(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks(l){return yt({},l,{message:c=>{this.resetActivityCheck(),this.emit(\"message\",c)},ping:()=>{this.send_event(\"pusher:pong\",{})},activity:()=>{this.resetActivityCheck()},error:c=>{this.emit(\"error\",c)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks(l){return yt({},l,{connected:c=>{this.activityTimeout=Math.min(this.options.activityTimeout,c.activityTimeout,c.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(c.connection),this.socket_id=this.connection.id,this.updateState(\"connected\",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let l=c=>m=>{m.error&&this.emit(\"error\",{type:\"WebSocketError\",error:m.error}),c(m)};return{tls_only:l(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:l(()=>{this.disconnect()}),backoff:l(()=>{this.retryIn(1e3)}),retry:l(()=>{this.retryIn(0)})}}setConnection(l){this.connection=l;for(var c in this.connectionCallbacks)this.connection.bind(c,this.connectionCallbacks[c]);this.resetActivityCheck()}abandonConnection(){if(this.connection){this.stopActivityCheck();for(var l in this.connectionCallbacks)this.connection.unbind(l,this.connectionCallbacks[l]);var c=this.connection;return this.connection=null,c}}updateState(l,c){var m=this.state;if(this.state=l,m!==l){var x=l;x===\"connected\"&&(x+=\" with new socket ID \"+c.socket_id),_t.debug(\"State changed\",m+\" -> \"+x),this.timeline.info({state:l,params:c}),this.emit(\"state_change\",{previous:m,current:l}),this.emit(l,c)}}shouldRetry(){return this.state===\"connecting\"||this.state===\"connected\"}}class K{constructor(){this.channels={}}add(l,c){return this.channels[l]||(this.channels[l]=Gi(l,c)),this.channels[l]}all(){return gi(this.channels)}find(l){return this.channels[l]}remove(l){var c=this.channels[l];return delete this.channels[l],c}disconnect(){Zt(this.channels,function(l){l.disconnect()})}}function Gi(d,l){if(d.indexOf(\"private-encrypted-\")===0){if(l.config.nacl)return te.createEncryptedChannel(d,l,l.config.nacl);let c=\"Tried to subscribe to a private-encrypted- channel but no nacl implementation available\",m=y.buildLogSuffix(\"encryptedChannelSupport\");throw new j(`${c}. ${m}`)}else{if(d.indexOf(\"private-\")===0)return te.createPrivateChannel(d,l);if(d.indexOf(\"presence-\")===0)return te.createPresenceChannel(d,l);if(d.indexOf(\"#\")===0)throw new C('Cannot create a channel with name \"'+d+'\".');return te.createChannel(d,l)}}var Fi={createChannels(){return new K},createConnectionManager(d,l){return new Ni(d,l)},createChannel(d,l){return new Ze(d,l)},createPrivateChannel(d,l){return new tn(d,l)},createPresenceChannel(d,l){return new Oi(d,l)},createEncryptedChannel(d,l,c){return new Di(d,l,c)},createTimelineSender(d,l){return new Nt(d,l)},createHandshake(d,l){return new jn(d,l)},createAssistantToTheTransportManager(d,l,c){return new jt(d,l,c)}},te=Fi;class en{constructor(l){this.options=l||{},this.livesLeft=this.options.lives||1/0}getAssistant(l){return te.createAssistantToTheTransportManager(this,l,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class ae{constructor(l,c){this.strategies=l,this.loop=!!c.loop,this.failFast=!!c.failFast,this.timeout=c.timeout,this.timeoutLimit=c.timeoutLimit}isSupported(){return Mn(this.strategies,Et.method(\"isSupported\"))}connect(l,c){var m=this.strategies,x=0,I=this.timeout,X=null,J=(rt,pt)=>{pt?c(null,pt):(x=x+1,this.loop&&(x=x%m.length),x<m.length?(I&&(I=I*2,this.timeoutLimit&&(I=Math.min(I,this.timeoutLimit))),X=this.tryStrategy(m[x],l,{timeout:I,failFast:this.failFast},J)):c(!0))};return X=this.tryStrategy(m[x],l,{timeout:I,failFast:this.failFast},J),{abort:function(){X.abort()},forceMinPriority:function(rt){l=rt,X&&X.forceMinPriority(rt)}}}tryStrategy(l,c,m,x){var I=null,X=null;return m.timeout>0&&(I=new ut(m.timeout,function(){X.abort(),x(!0)})),X=l.connect(c,function(J,rt){J&&I&&I.isRunning()&&!m.failFast||(I&&I.ensureAborted(),x(J,rt))}),{abort:function(){I&&I.ensureAborted(),X.abort()},forceMinPriority:function(J){X.forceMinPriority(J)}}}}class nn{constructor(l){this.strategies=l}isSupported(){return Mn(this.strategies,Et.method(\"isSupported\"))}connect(l,c){return Hi(this.strategies,l,function(m,x){return function(I,X){if(x[m].error=I,I){Bi(x)&&c(!0);return}ke(x,function(J){J.forceMinPriority(X.transport.priority)}),c(null,X)}})}}function Hi(d,l,c){var m=An(d,function(x,I,X,J){return x.connect(l,c(I,J))});return{abort:function(){ke(m,zi)},forceMinPriority:function(x){ke(m,function(I){I.forceMinPriority(x)})}}}function Bi(d){return Ln(d,function(l){return!!l.error})}function zi(d){!d.error&&!d.aborted&&(d.abort(),d.aborted=!0)}class ji{constructor(l,c,m){this.strategy=l,this.transports=c,this.ttl=m.ttl||1800*1e3,this.usingTLS=m.useTLS,this.timeline=m.timeline}isSupported(){return this.strategy.isSupported()}connect(l,c){var m=this.usingTLS,x=b(m),I=x&&x.cacheSkipCount?x.cacheSkipCount:0,X=[this.strategy];if(x&&x.timestamp+this.ttl>=Et.now()){var J=this.transports[x.transport];J&&([\"ws\",\"wss\"].includes(x.transport)||I>3?(this.timeline.info({cached:!0,transport:x.transport,latency:x.latency}),X.push(new ae([J],{timeout:x.latency*2+1e3,failFast:!0}))):I++)}var rt=Et.now(),pt=X.pop().connect(l,function bt(Rt,Xn){Rt?(L(m),X.length>0?(rt=Et.now(),pt=X.pop().connect(l,bt)):c(Rt)):(A(m,Xn.transport.name,Et.now()-rt,I),c(null,Xn))});return{abort:function(){pt.abort()},forceMinPriority:function(bt){l=bt,pt&&pt.forceMinPriority(bt)}}}}function v(d){return\"pusherTransport\"+(d?\"TLS\":\"NonTLS\")}function b(d){var l=lt.getLocalStorage();if(l)try{var c=l[v(d)];if(c)return JSON.parse(c)}catch{L(d)}return null}function A(d,l,c,m){var x=lt.getLocalStorage();if(x)try{x[v(d)]=He({timestamp:Et.now(),transport:l,latency:c,cacheSkipCount:m})}catch{}}function L(d){var l=lt.getLocalStorage();if(l)try{delete l[v(d)]}catch{}}class U{constructor(l,{delay:c}){this.strategy=l,this.options={delay:c}}isSupported(){return this.strategy.isSupported()}connect(l,c){var m=this.strategy,x,I=new ut(this.options.delay,function(){x=m.connect(l,c)});return{abort:function(){I.ensureAborted(),x&&x.abort()},forceMinPriority:function(X){l=X,x&&x.forceMinPriority(X)}}}}class V{constructor(l,c,m){this.test=l,this.trueBranch=c,this.falseBranch=m}isSupported(){var l=this.test()?this.trueBranch:this.falseBranch;return l.isSupported()}connect(l,c){var m=this.test()?this.trueBranch:this.falseBranch;return m.connect(l,c)}}class ot{constructor(l){this.strategy=l}isSupported(){return this.strategy.isSupported()}connect(l,c){var m=this.strategy.connect(l,function(x,I){I&&m.abort(),c(x,I)});return m}}function tt(d){return function(){return d.isSupported()}}var Ft=function(d,l,c){var m={};function x(Ds,no,io,so,ro){var Ns=c(d,Ds,no,io,so,ro);return m[Ds]=Ns,Ns}var I=Object.assign({},l,{hostNonTLS:d.wsHost+\":\"+d.wsPort,hostTLS:d.wsHost+\":\"+d.wssPort,httpPath:d.wsPath}),X=Object.assign({},I,{useTLS:!0}),J=Object.assign({},l,{hostNonTLS:d.httpHost+\":\"+d.httpPort,hostTLS:d.httpHost+\":\"+d.httpsPort,httpPath:d.httpPath}),rt={loop:!0,timeout:15e3,timeoutLimit:6e4},pt=new en({minPingDelay:1e4,maxPingDelay:d.activityTimeout}),bt=new en({lives:2,minPingDelay:1e4,maxPingDelay:d.activityTimeout}),Rt=x(\"ws\",\"ws\",3,I,pt),Xn=x(\"wss\",\"ws\",3,X,pt),Ja=x(\"sockjs\",\"sockjs\",1,J),As=x(\"xhr_streaming\",\"xhr_streaming\",1,J,bt),Qa=x(\"xdr_streaming\",\"xdr_streaming\",1,J,bt),Rs=x(\"xhr_polling\",\"xhr_polling\",1,J),Za=x(\"xdr_polling\",\"xdr_polling\",1,J),Ms=new ae([Rt],rt),to=new ae([Xn],rt),eo=new ae([Ja],rt),Ls=new ae([new V(tt(As),As,Qa)],rt),Os=new ae([new V(tt(Rs),Rs,Za)],rt),Is=new ae([new V(tt(Ls),new nn([Ls,new U(Os,{delay:4e3})]),Os)],rt),Yi=new V(tt(Is),Is,eo),qi;return l.useTLS?qi=new nn([Ms,new U(Yi,{delay:2e3})]):qi=new nn([Ms,new U(to,{delay:2e3}),new U(Yi,{delay:5e3})]),new ji(new ot(new V(tt(Rt),qi,Yi)),m,{ttl:18e5,timeline:l.timeline,useTLS:l.useTLS})},Ee=Ft,sn=(function(){var d=this;d.timeline.info(d.buildTimelineMessage({transport:d.name+(d.options.useTLS?\"s\":\"\")})),d.hooks.isInitialized()?d.changeState(\"initialized\"):d.hooks.file?(d.changeState(\"initializing\"),p.load(d.hooks.file,{useTLS:d.options.useTLS},function(l,c){d.hooks.isInitialized()?(d.changeState(\"initialized\"),c(!0)):(l&&d.onError(l),d.onClose(),c(!1))})):d.onClose()}),rn={getRequest:function(d){var l=new window.XDomainRequest;return l.ontimeout=function(){d.emit(\"error\",new T),d.close()},l.onerror=function(c){d.emit(\"error\",c),d.close()},l.onprogress=function(){l.responseText&&l.responseText.length>0&&d.onChunk(200,l.responseText)},l.onload=function(){l.responseText&&l.responseText.length>0&&d.onChunk(200,l.responseText),d.emit(\"finished\",200),d.close()},l},abortRequest:function(d){d.ontimeout=d.onerror=d.onprogress=d.onload=null,d.abort()}},H=rn;const Wt=256*1024;class Wi extends qt{constructor(l,c,m){super(),this.hooks=l,this.method=c,this.url=m}start(l){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},lt.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader(\"Content-Type\",\"application/json\"),this.xhr.send(l)}close(){this.unloader&&(lt.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk(l,c){for(;;){var m=this.advanceBuffer(c);if(m)this.emit(\"chunk\",{status:l,data:m});else break}this.isBufferTooLong(c)&&this.emit(\"buffer_too_long\")}advanceBuffer(l){var c=l.slice(this.position),m=c.indexOf(`\n`);return m!==-1?(this.position+=m+1,c.slice(0,m)):null}isBufferTooLong(l){return this.position===l.length&&l.length>Wt}}var Ht;(function(d){d[d.CONNECTING=0]=\"CONNECTING\",d[d.OPEN=1]=\"OPEN\",d[d.CLOSED=3]=\"CLOSED\"})(Ht||(Ht={}));var Ut=Ht,ca=1;class da{constructor(l,c){this.hooks=l,this.session=Ts(1e3)+\"/\"+pa(8),this.location=ua(c),this.readyState=Ut.CONNECTING,this.openStream()}send(l){return this.sendRaw(JSON.stringify([l]))}ping(){this.hooks.sendHeartbeat(this)}close(l,c){this.onClose(l,c,!0)}sendRaw(l){if(this.readyState===Ut.OPEN)try{return lt.createSocketRequest(\"POST\",ks(fa(this.location,this.session))).start(l),!0}catch{return!1}else return!1}reconnect(){this.closeStream(),this.openStream()}onClose(l,c,m){this.closeStream(),this.readyState=Ut.CLOSED,this.onclose&&this.onclose({code:l,reason:c,wasClean:m})}onChunk(l){if(l.status===200){this.readyState===Ut.OPEN&&this.onActivity();var c,m=l.data.slice(0,1);switch(m){case\"o\":c=JSON.parse(l.data.slice(1)||\"{}\"),this.onOpen(c);break;case\"a\":c=JSON.parse(l.data.slice(1)||\"[]\");for(var x=0;x<c.length;x++)this.onEvent(c[x]);break;case\"m\":c=JSON.parse(l.data.slice(1)||\"null\"),this.onEvent(c);break;case\"h\":this.hooks.onHeartbeat(this);break;case\"c\":c=JSON.parse(l.data.slice(1)||\"[]\"),this.onClose(c[0],c[1],!0);break}}}onOpen(l){this.readyState===Ut.CONNECTING?(l&&l.hostname&&(this.location.base=ga(this.location.base,l.hostname)),this.readyState=Ut.OPEN,this.onopen&&this.onopen()):this.onClose(1006,\"Server lost session\",!0)}onEvent(l){this.readyState===Ut.OPEN&&this.onmessage&&this.onmessage({data:l})}onActivity(){this.onactivity&&this.onactivity()}onError(l){this.onerror&&this.onerror(l)}openStream(){this.stream=lt.createSocketRequest(\"POST\",ks(this.hooks.getReceiveURL(this.location,this.session))),this.stream.bind(\"chunk\",l=>{this.onChunk(l)}),this.stream.bind(\"finished\",l=>{this.hooks.onFinished(this,l)}),this.stream.bind(\"buffer_too_long\",()=>{this.reconnect()});try{this.stream.start()}catch(l){Et.defer(()=>{this.onError(l),this.onClose(1006,\"Could not start streaming\",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}}function ua(d){var l=/([^\\?]*)\\/*(\\??.*)/.exec(d);return{base:l[1],queryString:l[2]}}function fa(d,l){return d.base+\"/\"+l+\"/xhr_send\"}function ks(d){var l=d.indexOf(\"?\")===-1?\"?\":\"&\";return d+l+\"t=\"+ +new Date+\"&n=\"+ca++}function ga(d,l){var c=/(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(d);return c[1]+l+c[3]}function Ts(d){return lt.randomInt(d)}function pa(d){for(var l=[],c=0;c<d;c++)l.push(Ts(32).toString(32));return l.join(\"\")}var ma=da,va={getReceiveURL:function(d,l){return d.base+\"/\"+l+\"/xhr_streaming\"+d.queryString},onHeartbeat:function(d){d.sendRaw(\"[]\")},sendHeartbeat:function(d){d.sendRaw(\"[]\")},onFinished:function(d,l){d.onClose(1006,\"Connection interrupted (\"+l+\")\",!1)}},ya=va,ba={getReceiveURL:function(d,l){return d.base+\"/\"+l+\"/xhr\"+d.queryString},onHeartbeat:function(){},sendHeartbeat:function(d){d.sendRaw(\"[]\")},onFinished:function(d,l){l===200?d.reconnect():d.onClose(1006,\"Connection interrupted (\"+l+\")\",!1)}},_a=ba,wa={getRequest:function(d){var l=lt.getXHRAPI(),c=new l;return c.onreadystatechange=c.onprogress=function(){switch(c.readyState){case 3:c.responseText&&c.responseText.length>0&&d.onChunk(c.status,c.responseText);break;case 4:c.responseText&&c.responseText.length>0&&d.onChunk(c.status,c.responseText),d.emit(\"finished\",c.status),d.close();break}},c},abortRequest:function(d){d.onreadystatechange=null,d.abort()}},Sa=wa,xa={createStreamingSocket(d){return this.createSocket(ya,d)},createPollingSocket(d){return this.createSocket(_a,d)},createSocket(d,l){return new ma(d,l)},createXHR(d,l){return this.createRequest(Sa,d,l)},createRequest(d,l,c){return new Wi(d,l,c)}},Ps=xa;Ps.createXDR=function(d,l){return this.createRequest(H,d,l)};var Ca=Ps,ka={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:a,DependenciesReceivers:u,getDefaultStrategy:Ee,Transports:Bn,transportConnectionInitializer:sn,HTTPFactory:Ca,TimelineTransport:wi,getXHRAPI(){return window.XMLHttpRequest},getWebSocketAPI(){return window.WebSocket||window.MozWebSocket},setup(d){window.Pusher=d;var l=()=>{this.onDocumentBody(d.ready)};window.JSON?l():p.load(\"json2\",{},l)},getDocument(){return document},getProtocol(){return this.getDocument().location.protocol},getAuthorizers(){return{ajax:q,jsonp:vi}},onDocumentBody(d){document.body?d():setTimeout(()=>{this.onDocumentBody(d)},0)},createJSONPRequest(d,l){return new Nn(d,l)},createScriptRequest(d){return new yi(d)},getLocalStorage(){try{return window.localStorage}catch{return}},createXHR(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest(){var d=this.getXHRAPI();return new d},createMicrosoftXHR(){return new ActiveXObject(\"Microsoft.XMLHTTP\")},getNetwork(){return Mi},createWebSocket(d){var l=this.getWebSocketAPI();return new l(d)},createSocketRequest(d,l){if(this.isXHRSupported())return this.HTTPFactory.createXHR(d,l);if(this.isXDRSupported(l.indexOf(\"https:\")===0))return this.HTTPFactory.createXDR(d,l);throw\"Cross-origin HTTP requests are not supported\"},isXHRSupported(){var d=this.getXHRAPI();return!!d&&new d().withCredentials!==void 0},isXDRSupported(d){var l=d?\"https:\":\"http:\",c=this.getProtocol();return!!window.XDomainRequest&&c===l},addUnloadListener(d){window.addEventListener!==void 0?window.addEventListener(\"unload\",d,!1):window.attachEvent!==void 0&&window.attachEvent(\"onunload\",d)},removeUnloadListener(d){window.addEventListener!==void 0?window.removeEventListener(\"unload\",d,!1):window.detachEvent!==void 0&&window.detachEvent(\"onunload\",d)},randomInt(d){return Math.floor(function(){return(window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)}()*d)}},lt=ka,Ui;(function(d){d[d.ERROR=3]=\"ERROR\",d[d.INFO=6]=\"INFO\",d[d.DEBUG=7]=\"DEBUG\"})(Ui||(Ui={}));var Un=Ui;class Ta{constructor(l,c,m){this.key=l,this.session=c,this.events=[],this.options=m||{},this.sent=0,this.uniqueID=0}log(l,c){l<=this.options.level&&(this.events.push(yt({},c,{timestamp:Et.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error(l){this.log(Un.ERROR,l)}info(l){this.log(Un.INFO,l)}debug(l){this.log(Un.DEBUG,l)}isEmpty(){return this.events.length===0}send(l,c){var m=yt({session:this.session,bundle:this.sent+1,key:this.key,lib:\"js\",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],l(m,(x,I)=>{x||this.sent++,c&&c(x,I)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class Pa{constructor(l,c,m,x){this.name=l,this.priority=c,this.transport=m,this.options=x||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect(l,c){if(this.isSupported()){if(this.priority<l)return Es(new E,c)}else return Es(new B,c);var m=!1,x=this.transport.createConnection(this.name,this.priority,this.options.key,this.options),I=null,X=function(){x.unbind(\"initialized\",X),x.connect()},J=function(){I=te.createHandshake(x,function(Rt){m=!0,bt(),c(null,Rt)})},rt=function(Rt){bt(),c(Rt)},pt=function(){bt();var Rt;Rt=He(x),c(new M(Rt))},bt=function(){x.unbind(\"initialized\",X),x.unbind(\"open\",J),x.unbind(\"error\",rt),x.unbind(\"closed\",pt)};return x.bind(\"initialized\",X),x.bind(\"open\",J),x.bind(\"error\",rt),x.bind(\"closed\",pt),x.initialize(),{abort:()=>{m||(bt(),I?I.close():x.close())},forceMinPriority:Rt=>{m||this.priority<Rt&&(I?I.close():x.close())}}}}function Es(d,l){return Et.defer(function(){l(d)}),{abort:function(){},forceMinPriority:function(){}}}const{Transports:Ea}=lt;var Aa=function(d,l,c,m,x,I){var X=Ea[c];if(!X)throw new N(c);var J=(!d.enabledTransports||Pn(d.enabledTransports,l)!==-1)&&(!d.disabledTransports||Pn(d.disabledTransports,l)===-1),rt;return J?(x=Object.assign({ignoreNullOrigin:d.ignoreNullOrigin},x),rt=new Pa(l,m,I?I.getAssistant(X):X,x)):rt=Ra,rt},Ra={isSupported:function(){return!1},connect:function(d,l){var c=Et.defer(function(){l(new B)});return{abort:function(){c.ensureAborted()},forceMinPriority:function(){}}}};function Ma(d){if(d==null)throw\"You must pass an options object\";if(d.cluster==null)throw\"Options object must provide a cluster\";\"disableStats\"in d&&_t.warn(\"The disableStats option is deprecated in favor of enableStats\")}const La=(d,l)=>{var c=\"socket_id=\"+encodeURIComponent(d.socketId);for(var m in l.params)c+=\"&\"+encodeURIComponent(m)+\"=\"+encodeURIComponent(l.params[m]);if(l.paramsProvider!=null){let x=l.paramsProvider();for(var m in x)c+=\"&\"+encodeURIComponent(m)+\"=\"+encodeURIComponent(x[m])}return c};var Oa=d=>{if(typeof lt.getAuthorizers()[d.transport]>\"u\")throw`'${d.transport}' is not a recognized auth transport`;return(l,c)=>{const m=La(l,d);lt.getAuthorizers()[d.transport](lt,m,d,k.UserAuthentication,c)}};const Ia=(d,l)=>{var c=\"socket_id=\"+encodeURIComponent(d.socketId);c+=\"&channel_name=\"+encodeURIComponent(d.channelName);for(var m in l.params)c+=\"&\"+encodeURIComponent(m)+\"=\"+encodeURIComponent(l.params[m]);if(l.paramsProvider!=null){let x=l.paramsProvider();for(var m in x)c+=\"&\"+encodeURIComponent(m)+\"=\"+encodeURIComponent(x[m])}return c};var Da=d=>{if(typeof lt.getAuthorizers()[d.transport]>\"u\")throw`'${d.transport}' is not a recognized auth transport`;return(l,c)=>{const m=Ia(l,d);lt.getAuthorizers()[d.transport](lt,m,d,k.ChannelAuthorization,c)}};const Na=(d,l,c)=>{const m={authTransport:l.transport,authEndpoint:l.endpoint,auth:{params:l.params,headers:l.headers}};return(x,I)=>{const X=d.channel(x.channelName);c(X,m).authorize(x.socketId,I)}};function Ga(d,l){let c={activityTimeout:d.activityTimeout||h.activityTimeout,cluster:d.cluster,httpPath:d.httpPath||h.httpPath,httpPort:d.httpPort||h.httpPort,httpsPort:d.httpsPort||h.httpsPort,pongTimeout:d.pongTimeout||h.pongTimeout,statsHost:d.statsHost||h.stats_host,unavailableTimeout:d.unavailableTimeout||h.unavailableTimeout,wsPath:d.wsPath||h.wsPath,wsPort:d.wsPort||h.wsPort,wssPort:d.wssPort||h.wssPort,enableStats:ja(d),httpHost:Fa(d),useTLS:za(d),wsHost:Ha(d),userAuthenticator:Wa(d),channelAuthorizer:Xa(d,l)};return\"disabledTransports\"in d&&(c.disabledTransports=d.disabledTransports),\"enabledTransports\"in d&&(c.enabledTransports=d.enabledTransports),\"ignoreNullOrigin\"in d&&(c.ignoreNullOrigin=d.ignoreNullOrigin),\"timelineParams\"in d&&(c.timelineParams=d.timelineParams),\"nacl\"in d&&(c.nacl=d.nacl),c}function Fa(d){return d.httpHost?d.httpHost:d.cluster?`sockjs-${d.cluster}.pusher.com`:h.httpHost}function Ha(d){return d.wsHost?d.wsHost:Ba(d.cluster)}function Ba(d){return`ws-${d}.pusher.com`}function za(d){return lt.getProtocol()===\"https:\"?!0:d.forceTLS!==!1}function ja(d){return\"enableStats\"in d?d.enableStats:\"disableStats\"in d?!d.disableStats:!1}function Wa(d){const l=Object.assign(Object.assign({},h.userAuthentication),d.userAuthentication);return\"customHandler\"in l&&l.customHandler!=null?l.customHandler:Oa(l)}function Ua(d,l){let c;return\"channelAuthorization\"in d?c=Object.assign(Object.assign({},h.channelAuthorization),d.channelAuthorization):(c={transport:d.authTransport||h.authTransport,endpoint:d.authEndpoint||h.authEndpoint},\"auth\"in d&&(\"params\"in d.auth&&(c.params=d.auth.params),\"headers\"in d.auth&&(c.headers=d.auth.headers)),\"authorizer\"in d&&(c.customHandler=Na(l,c,d.authorizer))),c}function Xa(d,l){const c=Ua(d,l);return\"customHandler\"in c&&c.customHandler!=null?c.customHandler:Da(c)}class Ya extends qt{constructor(l){super(function(c,m){_t.debug(`No callbacks on watchlist events for ${c}`)}),this.pusher=l,this.bindWatchlistInternalEvent()}handleEvent(l){l.data.events.forEach(c=>{this.emit(c.name,c)})}bindWatchlistInternalEvent(){this.pusher.connection.bind(\"message\",l=>{var c=l.event;c===\"pusher_internal:watchlist_events\"&&this.handleEvent(l)})}}function qa(){let d,l;return{promise:new Promise((m,x)=>{d=m,l=x}),resolve:d,reject:l}}var $a=qa;class Va extends qt{constructor(l){super(function(c,m){_t.debug(\"No callbacks on user for \"+c)}),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(c,m)=>{if(c){_t.warn(`Error during signin: ${c}`),this._cleanup();return}this.pusher.send_event(\"pusher:signin\",{auth:m.auth,user_data:m.user_data})},this.pusher=l,this.pusher.connection.bind(\"state_change\",({previous:c,current:m})=>{c!==\"connected\"&&m===\"connected\"&&this._signin(),c===\"connected\"&&m!==\"connected\"&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new Ya(l),this.pusher.connection.bind(\"message\",c=>{var m=c.event;m===\"pusher:signin_success\"&&this._onSigninSuccess(c.data),this.serverToUserChannel&&this.serverToUserChannel.name===c.channel&&this.serverToUserChannel.handleEvent(c)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),this.pusher.connection.state===\"connected\"&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess(l){try{this.user_data=JSON.parse(l.user_data)}catch{_t.error(`Failed parsing user data after signin: ${l.user_data}`),this._cleanup();return}if(typeof this.user_data.id!=\"string\"||this.user_data.id===\"\"){_t.error(`user_data doesn't contain an id. user_data: ${this.user_data}`),this._cleanup();return}this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){const l=c=>{c.subscriptionPending&&c.subscriptionCancelled?c.reinstateSubscription():!c.subscriptionPending&&this.pusher.connection.state===\"connected\"&&c.subscribe()};this.serverToUserChannel=new Ze(`#server-to-user-${this.user_data.id}`,this.pusher),this.serverToUserChannel.bind_global((c,m)=>{c.indexOf(\"pusher_internal:\")===0||c.indexOf(\"pusher:\")===0||this.emit(c,m)}),l(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested||this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:l,resolve:c}=$a();l.done=!1;const m=()=>{l.done=!0};l.then(m).catch(m),this.signinDonePromise=l,this._signinDoneResolve=c}}class Gt{static ready(){Gt.isReady=!0;for(var l=0,c=Gt.instances.length;l<c;l++)Gt.instances[l].connect()}static getClientFeatures(){return En(Fe({ws:lt.Transports.ws},function(l){return l.isSupported({})}))}constructor(l,c){Ka(l),Ma(c),this.key=l,this.config=Ga(c,this),this.channels=te.createChannels(),this.global_emitter=new qt,this.sessionID=lt.randomInt(1e9),this.timeline=new Ta(this.key,this.sessionID,{cluster:this.config.cluster,features:Gt.getClientFeatures(),params:this.config.timelineParams||{},limit:50,level:Un.INFO,version:h.VERSION}),this.config.enableStats&&(this.timelineSender=te.createTimelineSender(this.timeline,{host:this.config.statsHost,path:\"/timeline/v2/\"+lt.TimelineTransport.name}));var m=x=>lt.getDefaultStrategy(this.config,x,Aa);this.connection=te.createConnectionManager(this.key,{getStrategy:m,timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:!!this.config.useTLS}),this.connection.bind(\"connected\",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind(\"message\",x=>{var I=x.event,X=I.indexOf(\"pusher_internal:\")===0;if(x.channel){var J=this.channel(x.channel);J&&J.handleEvent(x)}X||this.global_emitter.emit(x.event,x.data)}),this.connection.bind(\"connecting\",()=>{this.channels.disconnect()}),this.connection.bind(\"disconnected\",()=>{this.channels.disconnect()}),this.connection.bind(\"error\",x=>{_t.warn(x)}),Gt.instances.push(this),this.timeline.info({instances:Gt.instances.length}),this.user=new Va(this),Gt.isReady&&this.connect()}channel(l){return this.channels.find(l)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var l=this.connection.isUsingTLS(),c=this.timelineSender;this.timelineSenderTimer=new Lt(6e4,function(){c.send(l)})}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind(l,c,m){return this.global_emitter.bind(l,c,m),this}unbind(l,c,m){return this.global_emitter.unbind(l,c,m),this}bind_global(l){return this.global_emitter.bind_global(l),this}unbind_global(l){return this.global_emitter.unbind_global(l),this}unbind_all(l){return this.global_emitter.unbind_all(),this}subscribeAll(){var l;for(l in this.channels.channels)this.channels.channels.hasOwnProperty(l)&&this.subscribe(l)}subscribe(l){var c=this.channels.add(l,this);return c.subscriptionPending&&c.subscriptionCancelled?c.reinstateSubscription():!c.subscriptionPending&&this.connection.state===\"connected\"&&c.subscribe(),c}unsubscribe(l){var c=this.channels.find(l);c&&c.subscriptionPending?c.cancelSubscription():(c=this.channels.remove(l),c&&c.subscribed&&c.unsubscribe())}send_event(l,c,m){return this.connection.send_event(l,c,m)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}Gt.instances=[],Gt.isReady=!1,Gt.logToConsole=!1,Gt.Runtime=lt,Gt.ScriptReceivers=lt.ScriptReceivers,Gt.DependenciesReceivers=lt.DependenciesReceivers,Gt.auth_callbacks=lt.auth_callbacks;var Xi=n.default=Gt;function Ka(d){if(d==null)throw\"You must pass your app key when you instantiate Pusher.\"}lt.setup(Gt)})])})})(is)),is.exports}td();const Vt={},ed=r=>{({...{reverb:{broadcaster:\"reverb\",key:typeof Vt<\"u\"?\"zzi6hvnxz6aogzjzktfi\":void 0,wsHost:typeof Vt<\"u\"?\"localhost\":void 0,wsPort:typeof Vt<\"u\"?\"8080\":void 0,wssPort:typeof Vt<\"u\"?\"8080\":void 0,forceTLS:((typeof Vt<\"u\"?\"http\":void 0)??\"https\")===\"https\",enabledTransports:[\"ws\",\"wss\"]},pusher:{broadcaster:\"pusher\",key:void 0,cluster:void 0,forceTLS:!0,wsHost:void 0,wsPort:void 0,wssPort:void 0,enabledTransports:[\"ws\",\"wss\"]},\"socket.io\":{broadcaster:\"socket.io\",host:void 0},null:{broadcaster:\"null\"},ably:{broadcaster:\"pusher\",key:void 0,wsHost:\"realtime-pusher.ably.io\",wsPort:443,disableStats:!0,encrypted:!0}}[r.broadcaster],...r})},nd={key:0,class:\"w-full h-screen flex items-center justify-center align-middle text-2xl\"},id={key:0,class:\"flex items-center gap-2\"},sd={key:1,class:\"flex flex-col gap-2 text-error-content\"},rd=[\"innerHTML\"],ad={key:1,class:\"toolbar fixed w-full bg-base-100 p-2 flex items-center justify-between gap-2 z-50\"},od={class:\"flex gap-1 items-center\"},ld=[\"href\",\"title\"],hd=[\"innerHTML\"],cd={key:0,class:\"relative\"},dd={key:0,class:\"absolute left-0 mt-1 border shadow-md bg-base-100 rounded z-20 w-36\"},ud=[\"innerHTML\"],fd=[\"innerHTML\"],gd=[\"data-title\"],pd={class:\"flex gap-1 overflow-hidden\"},md=[\"aria-label\"],vd=[\"src\"],yd={key:1},bd=[\"onKeydown\"],_d={key:0,class:\"flex items-center gap-2 main-toolbar\"},wd={class:\"join\"},Sd=[\"title\"],xd=[\"innerHTML\"],Cd=[\"title\"],kd=[\"innerHTML\"],Td=[\"title\"],Pd=[\"innerHTML\"],Ed=[\"title\"],Ad=[\"innerHTML\"],Rd={key:1,class:\"flex items-center gap-2 shape-toolbar\"},Md={class:\"join\"},Ld=[\"title\"],Od={class:\"sr-only\"},Id=[\"title\"],Dd={class:\"sr-only\"},Nd=[\"title\"],Gd=[\"innerHTML\"],Fd=[\"title\"],Hd={class:\"sr-only\"},Bd={key:0,class:\"join\"},zd=[\"title\"],jd={class:\"sr-only\"},Wd=[\"title\"],Ud={class:\"sr-only\"},Xd=[\"title\"],Yd={class:\"sr-only\"},qd={class:\"join\"},$d=[\"title\"],Vd=[\"innerHTML\"],Kd=[\"title\"],Jd=[\"innerHTML\"],Qd=[\"title\"],Zd=[\"innerHTML\"],tu={key:2,class:\"flex items-center gap-2 main-toolbar\"},eu={class:\"join\"},nu=[\"title\"],iu=[\"innerHTML\"],su=[\"title\"],ru=[\"innerHTML\"],au=[\"title\"],ou=[\"innerHTML\"],lu=[\"title\"],hu=[\"innerHTML\"],cu=[\"title\"],du=[\"innerHTML\"],uu={class:\"join\"},fu=[\"title\"],gu=[\"innerHTML\"],pu=[\"title\"],mu=[\"innerHTML\"],vu={key:3},yu=[\"innerHTML\"],bu=[\"value\"],_u=.2,wu=3,pr=1.15,Su=Le({__name:\"Whiteboard\",props:{save:{},load:{},gallery:{},search:{},readonly:{},creator:{},entity:{},whiteboard:{},user:{}},setup(r){const t=r,e=nt([]),n=nt(null),i=nt([]),s=nt(null),a=nt(\"My whiteboard\"),o=nt(null),h=nt(null),f=nt(null),u=nt(null),p=nt(null),g=nt(\"select\"),_=nt(!0),y=nt(),k=nt(),w=nt(null),C=nt(\"\"),T=nt(null),E=nt(0),M=nt(!1);let j=null;const N=nt(null),B=fn(()=>s.value?jt(s.value):i.value.length>0?jt(i.value[0]):null),R=nt(null),D=nt(null),q=nt(null),at=nt(!1),G=nt(null),st=nt(1),it=nt(null),Q=nt(null),$=nt(12),gt=nt(!1),Z=nt({}),ct=nt(!1),St=nt({}),dt=nt(!1),ut=nt(!1),Lt=nt(!1);let ue;const Et=nt([]);let yt=null;const Qt=v=>{if(t.readonly||v.urls&&v.urls.edit)return Promise.resolve({data:{success:!0,id:v.id,urls:v.urls}});const b={type:v.type,x:v.x,y:v.y,width:v.width,height:v.height,scale_x:v.scaleX,scale_y:v.scaleY,rotation:v.rotation,fill:v.fill,text:v.text,uuid:v.uuid,entity_id:v.entity,is_locked:v.is_locked?1:0,children:v.children??[],shape:JSON.stringify(v)};axios.put(t.save,b).then(A=>{if(A.data.success){const L=v.id;v.id=A.data.id,v.urls=A.data.urls;const V=o.value?.getNode()?.findOne(`#group-${L}`);V&&V.id(`group-${v.id}`),E.value++}}).catch(A=>{window.showToast(K(\"error-saving-shape\"),\"error\")})},Pn=fn(()=>{if(E.value,!w.value)return{};const v=jt(w.value);if(!v)return{};const b=o.value?.getNode();if(!b)return{};const A=b.findOne(`#group-${w.value}`);if(!A)return{};const U=b.container().getBoundingClientRect();let V=null;const ot=A.getClientRect();V={x:ot.x,y:ot.y,width:ot.width,height:ot.height};const tt=Math.max(5,Math.min(V.width,V.height)*.1),Ft=Math.max(10,Math.min(V.height*.15,V.width*.08,24));return{left:U.left+V.x+tt+\"px\",top:U.top+V.y+tt+\"px\",width:V.width-tt*2+\"px\",height:V.height-tt*2+\"px\",fontSize:Ft+\"px\",textAlign:\"center\",fontFamily:\"Arial\",color:Gn(v)}}),Zt=fn(()=>{}),En=()=>{ut.value=!1,Lt.value=!0},gi=()=>{e.value=[]},ke=v=>{n.value=v.id,v.moving=!0,M.value=!0,v.opacity=.9,o.value?.getNode()?.findOne(`#group-${v.id}`)?.moveToTop()},An=(v,b)=>{n.value=null,b.moving=!1,M.value=!1,b.opacity=1;const A={x:v.target.x(),y:v.target.y()};b.x=A.x,b.y=A.y,zt(b,{x:b.x,y:b.y})},pi=()=>{w.value&&E.value++},Rn=()=>{g.value=\"select\",R.value=null,D.value=null},Fe=v=>{g.value=v,R.value=null,D.value=null,q.value=null;const b=o.value?.getNode();b&&b.draggable(!1)},Te=()=>{const v=h.value?.getNode();v&&(v.off(\"transform.transformer\"),v.off(\"dragmove.transformer\"),v.off(\"transformend.transformer\"),v.off(\"dragend.transformer\"),v.on(\"transformend.transformer\",b=>{if(!i.value||!i.value.length)return;const A=v.nodes()||[];A.length&&(A.forEach(L=>{const U=L.id(),V=U&&U.toString().match(/^group-(.+)$/);if(!V)return;const ot=V[1],tt=jt(ot);if(!tt)return;const Ft=L.scaleX()||1,Ee=L.scaleY()||1;tt.type===\"circle\"?(tt.radius=(tt.radius||tt.width/2)*Ft,tt.width=tt.radius*2,tt.height=tt.radius*2):(tt.width=(tt.width||0)*Ft,tt.height=(tt.height||0)*Ee),tt.scaleX=1,tt.scaleY=1,tt.rotation=L.rotation()||0,tt.x=L.x(),tt.y=L.y(),L.scaleX(1),L.scaleY(1),zt(tt,{x:tt.x,y:tt.y,width:tt.width,height:tt.height,scale_x:1,scale_y:1,rotation:tt.rotation})}),E.value++,v.getLayer().batchDraw())}))},Mn=(v,b)=>{if(t.readonly||g.value===\"drawing\")return;g.value=\"select\";let A=!1;if(v.text&&s.value===v.id&&(Ci(v),A=!0),b&&b.evt&&b.evt.shiftKey){const L=i.value.indexOf(v.id);L===-1?(i.value.push(v.id),s.value||(s.value=v.id)):(i.value.splice(L,1),s.value===v.id&&(s.value=i.value.length?i.value[0]:null)),oe(()=>{Dt(!1),Te()});return}i.value=[v.id],s.value=v.id,v.fill&&(it.value=v.fill),oe(()=>{Dt(A),Te()})},Ln=v=>i.value.indexOf(v)!==-1,Dt=(v=!1)=>{const b=h.value?.getNode(),A=o.value?.getNode();if(!b||!A)return;const L=i.value.map(V=>A.findOne(`#group-${V}`)).filter(V=>!!V);if(!L.length){b.nodes([]),b.getLayer().batchDraw();return}if(i.value.some(V=>{const ot=jt(V);return ot&&ot.is_locked})||v){b.nodes([]),b.getLayer().batchDraw();return}b.nodes(L),b.getLayer().batchDraw()},On=()=>{if(!i.value.length)return;const v=new Set(i.value);for(let b=e.value.length-1;b>=0;b--){const A=e.value[b];v.has(A.id)&&(A.urls?.delete&&axios.delete(A.urls.delete),e.value.splice(b,1))}i.value=[],s.value=null,w.value=null,E.value++,Dt()},In=()=>{if(!i.value.length)return;const v=30,b=[];for(const A of i.value){const L=jt(A);if(!L)continue;const U=JSON.parse(JSON.stringify(L));U.id=$t(),delete U.urls,U.children&&Array.isArray(U.children)&&U.children.forEach(V=>{delete V.id}),typeof U.x==\"number\"&&(U.x+=v),typeof U.y==\"number\"&&(U.y+=v),e.value.push(U),b.push(U),Qt(U)}i.value=b.map(A=>A.id),s.value=b.length===1?b[0].id:null,w.value=null,oe(()=>{Dt(!1),Te()}),E.value++},He=()=>{i.value.length===e.value.length&&e.value.length>0?(i.value=[],s.value=null):(i.value=e.value.map(b=>b.id),s.value=null),w.value=null,E.value++,Dt()},mi=v=>{if(!i.value.length)return;const b=10;for(const A of i.value){const L=jt(A);if(!(!L||L.is_locked))switch(v){case\"ArrowUp\":L.y=(L.y??0)-b;break;case\"ArrowDown\":L.y=(L.y??0)+b;break;case\"ArrowLeft\":L.x=(L.x??0)-b;break;case\"ArrowRight\":L.x=(L.x??0)+b;break}}E.value++,Dt()},_t=()=>(yt||(yt=document.createElement(\"textarea\"),yt.id=\"hidden-clipboard\",yt.style.position=\"fixed\",yt.style.opacity=\"0\",yt.style.pointerEvents=\"none\",yt.style.zIndex=\"-1\",yt.setAttribute(\"aria-hidden\",\"true\"),yt.readOnly=!0,yt.tabIndex=-1,yt.addEventListener(\"keydown\",v=>{v.stopImmediatePropagation(),v.preventDefault()},{capture:!0}),yt.addEventListener(\"focus\",v=>{v.preventDefault(),yt.blur()}),document.body.appendChild(yt)),yt),Dn=fn(()=>e.value.filter(v=>i.value.includes(v.id))),vi=()=>{try{if(!i.value.length)return;const v=v(),b=JSON.stringify(v);if(window.isSecureContext&&navigator.clipboard)navigator.clipboard.writeText(b).then(()=>{window.showToast(K(\"copy-success\"))}).catch(L=>{const U=_t();U.value=b});else{const L=_t();L.value=b;try{L.focus(),L.select(),document.execCommand(\"copy\")}catch{}console.log(\"Shapes copied via hidden clipboard fallback\"),window.showToast(K(\"copy-success\"))}}catch(v){console.error(\"Failed to copy shapes:\",v)}},yi=async()=>{try{let v=\"\";if(navigator.clipboard&&window.isSecureContext?v=await navigator.clipboard.readText():v=_t().value,!v)return;console.log(\"pasted text\",v);const b=/\\/w\\/\\d+\\/entities\\/(\\d+)$/,A=v.match(b);if(A){const U=A[1];try{const ot=(await axios.get(t.entity.replace(\"/0.json\",`/${U}.json`))).data.data;_i(ot)}catch(V){console.error(\"Failed to fetch entity:\",V),window.showToast(K(\"paste-error\")+\": \"+V.message,\"error\")}oe(()=>{Dt(!1),Te()});return}let L=[];try{const U=JSON.parse(v);if(Array.isArray(U)&&U.length){const V=o.value?.getNode?.();if(!V)return;const ot=Math.min(...U.map(Ht=>Ht.x??0)),tt=Math.min(...U.map(Ht=>Ht.y??0)),Ft=Math.max(...U.map(Ht=>(Ht.x??0)+(Ht.width??0))),Ee=Math.max(...U.map(Ht=>(Ht.y??0)+(Ht.height??0))),sn=Ft-ot,rn=Ee-tt,H=V.getPointerPosition?.()||{x:V.width()/2,y:V.height()/2},Wt=H.x-(ot+sn/2),Wi=H.y-(tt+rn/2);L=U.map(Ht=>{const Ut={...Ht};return Ut.id=$t(),typeof Ut.x==\"number\"&&(Ut.x+=Wt),typeof Ut.y==\"number\"&&(Ut.y+=Wi),Ut})}else L=[Nn(v)]}catch{L=[Nn(v)]}if(!L.length)return;e.value.push(...L),i.value=L.map(U=>U.id),s.value=L.length===1?L[0].id:null,Dt(),E.value++}catch(v){console.error(\"Failed to paste:\",v)}oe(()=>{Dt(!1),Te()})},Nn=v=>{const b=o.value?.getNode?.();if(!b)return;const A=b.getPointerPosition?.(),L=A?.x??b.width()/2,U=A?.y??b.height()/2;return{id:$t(),type:\"text\",x:L,y:U,scaleX:1,scaleY:1,width:100,height:50,radius:null,fill:it.value,text:v,fontFamily:\"Arial\",locked:!1,moving:!1}},bi=()=>{window.location.reload()},_i=v=>{ge(v.image_thumb,v.id);const b=o.value?.getNode?.();if(!b)return;const A=b.getPointerPosition?.(),L=A?.x??b.width()/2,U=A?.y??b.height()/2,V=$t(),ot={id:V,type:\"entity\",x:L,y:U,width:128,height:128,scaleX:1,scaleY:1,entity:v.id,fill:it.value,locked:!1,moving:!1};e.value.push(ot),Qt(ot),i.value=[V],s.value=V,Dt(),E.value++},wi=()=>{i.value.length&&(Dn.value.forEach(v=>{v.is_locked=!v.is_locked,zt(v,{is_locked:v.is_locked})}),Dt(),E.value++)},zt=(v,b)=>{v.urls?.edit&&axios.patch(v.urls.edit,b)},Be=()=>{N.value?.click()},Si=v=>{const b=v.target;if(b){if(g.value===\"drawing\"){G.value.fill=b.value,it.value=b.value,Q.value=b.value;return}i.value.length&&(Dn.value.forEach(A=>{A.fill=b.value,zt(A,{fill:A.fill})}),it.value=b.value,Q.value=b.value,E.value++)}},xi=v=>{if(!v)return 14;if(v.fontSize)return v.fontSize;let b=42;const A=(v.text||\"\").toString();for(;;){const L=new Konva.Text({text:A,fontSize:b,fontFamily:v.fontFamily}),{width:U,height:V}=L.getClientRect();if(U<=v.width&&V<=v.height||(b-=1,b<=1))break}return b},ze=v=>5,Ci=v=>{!v||v.is_locked||(w.value=v.id,C.value=v.text||\"\",oe(()=>{T.value?.focus()}))},Ke=()=>{if(w.value){const v=jt(w.value);v&&(v.text=C.value)}},qt=()=>{if(w.value){const v=jt(w.value);v&&(v.text=C.value,zt(v,{text:v.text}))}Je()},Je=()=>{w.value=null,C.value=\"\"},fe=v=>{g.value===\"drawing\"||t.readonly||v.target===v.target.getStage()&&(s.value=null,i.value=[],Dt(),w.value&&Je())},Gn=v=>(v.fill||\"#000\").toString(),je=()=>{if(g.value!==\"drawing\"){g.value=\"drawing\";return}if(g.value=\"select\",G.value){const b=o.value?.getNode()?.findOne(`#temp-group-${G.value.id}`);if(b){const A=b.getClientRect();G.value.children=G.value.children.map(L=>{const V=L.points.map((ot,tt)=>tt%2===0?ot-A.x:ot-A.y);return{...L,points:V}}),G.value.x=A.x,G.value.y=A.y,G.value.width=A.width,G.value.height=A.height,zt(G.value,{x:G.value.x,y:G.value.y,width:G.value.width,height:G.value.height})}G.value.moving=!1,G.value.is_locked=!1,G.value.draggable=!0,e.value.push(G.value),G.value=null}},Qe=()=>{if(g.value===\"drawing\"){at.value=!1,G.value=null,g.value=\"select\",E.value++;return}if(g.value===\"rect\"||g.value===\"circle\"||g.value===\"text\"){R.value=null,q.value=null,g.value=\"select\",E.value++;return}if(i.value&&i.value.length){i.value=[],s.value=null,Dt(),E.value++;return}},Fn=v=>{try{const A=v.target;if(A&&typeof A.getParent==\"function\"){let L=A;for(;L;){const U=typeof L.id==\"function\"?L.id():L.id??null;if(U&&U.toString().startsWith(\"group-\"))return;if(L=L.getParent?L.getParent():null,L&&L.getStage&&L.getStage()===L)break}}}catch{}if(g.value===\"drawing\"){at.value=!0;const A=ie();if(!A)return;const U={id:Date.now()+\"-lin\",points:[A.x,A.y],fill:it.value,strokeWidth:st.value};G.value?G.value.children.push(U):G.value={id:$t(),type:\"drawing\",children:[U],scaleX:1,scaleY:1,x:0,y:0,width:0,height:0};return}if(g.value===\"rect\"||g.value===\"text\"){const A=ie();if(!A)return;q.value=A,R.value={id:\"temp-rect-\"+Date.now(),type:g.value,x:A.x,y:A.y,width:0,height:0,scaleX:1,scaleY:1,fill:Q.value||Nt(\"--b1\"),stroke:null,locked:!1,moving:!1};return}if(g.value===\"circle\"){const A=ie();if(!A)return;q.value=A,D.value={id:\"temp-circle-\"+Date.now(),type:\"circle\",x:A.x,y:A.y,radius:0,scaleX:1,scaleY:1,fill:Q.value||Nt(\"--b1\"),stroke:null,locked:!1,moving:!1};return}if(g.value===\"select\")return;const b=ie();b&&(G.value||(G.value={id:Date.now(),type:\"group\",children:[],scaleX:1,scaleY:1}),G.value.children.push({id:Date.now()+\"-lin\",type:\"draw\",points:[b.x,b.y],fill:it.value,strokeWidth:st.value,hitStrokeWidth:$.value}))};function ie(){const v=o.value?.getNode(),b=v&&v.findOne(\"Layer\")||f.value?.getNode();if(!v||!b)return null;const A=v.getPointerPosition();if(!A)return null;const L=b.getAbsoluteTransform().copy();L.invert();const U=L.point(A);return{x:U.x,y:U.y}}const ki=v=>{if(at.value&&g.value===\"drawing\"){const b=ie();if(!b)return;const A=G.value.children[G.value.children.length-1];A.points=A.points.concat([b.x,b.y]);return}if((g.value===\"rect\"||g.value===\"text\")&&q.value&&R.value){const b=ie();if(!b)return;const A=q.value.x,L=q.value.y,U=Math.min(A,b.x),V=Math.min(L,b.y),ot=Math.abs(b.x-A),tt=Math.abs(b.y-L);R.value.x=U,R.value.y=V,R.value.width=Math.max(1,ot),R.value.height=Math.max(1,tt),E.value++}if(g.value===\"circle\"&&q.value&&D.value){const b=ie();if(!b)return;const A=q.value.x,L=q.value.y,U=b.x-A,V=b.y-L,ot=Math.max(1,Math.sqrt(U*U+V*V));D.value.cx=A,D.value.cy=L,D.value.radius=ot,E.value++}},Ti=v=>{if(g.value===\"drawing\"){if(at.value){const b=G.value.children[G.value.children.length-1];!G.value.persistencePromise&&!G.value.urls?.stroke&&(G.value.persistencePromise=Qt(G.value)),(G.value.persistencePromise||Promise.resolve()).then(()=>{axios.post(G.value.urls.stroke,{points:b.points,width:b.strokeWidth,fill:b.fill}).then(L=>{L.data.success&&(b.id=L.data.id)}).catch(()=>{window.showToast(K(\"error-saving-stroke\"),\"error\")})})}E.value++,at.value=!1;return}if(g.value===\"rect\"){if(R.value&&R.value.width>1){const b={id:$t(),type:\"rect\",x:R.value.x,y:R.value.y,scaleX:1,scaleY:1,width:R.value.width,height:R.value.height,fill:R.value.fill||Nt(\"--b1\"),locked:!1,moving:!1};e.value.push(b),Qt(b),E.value++,oe(()=>{Dt(),E.value++})}R.value=null;return}if(g.value===\"text\"){if(R.value){const b={id:$t(),type:\"text\",x:R.value.x,y:R.value.y,scaleX:1,scaleY:1,width:R.value.width,height:R.value.height,fill:Nt(\"--bc\"),text:\"Click to edit\",fontFamily:\"Arial\",locked:!1,moving:!1};e.value.push(b),Qt(b),E.value++}R.value=null;return}if(g.value===\"circle\"){if(D.value&&D.value.radius>1){const b={id:$t(),type:\"circle\",x:D.value.cx-D.value.radius,y:D.value.cy-D.value.radius,scaleX:1,scaleY:1,width:D.value.radius*2,height:D.value.radius*2,radius:D.value.radius,fill:D.value.fill||Nt(\"--b1\"),locked:!1,moving:!1};e.value.push(b),Qt(b),E.value++}D.value=null;return}};_e(g,v=>{const b=o.value?.getNode();b&&(b.draggable(!v),b.getLayer()?.batchDraw?.())});const $t=()=>\"local-\"+Date.now()+\"-\"+Math.floor(Math.random()*1e3);function Pe(){const v=o.value?.getNode();if(!v)return{x:0,y:0,scaleX:1,scaleY:1};const b=v.scaleX()||1,A=v.scaleY()||1,L=-v.x()/b,U=-v.y()/A;return{x:L,y:U,scaleX:b,scaleY:A}}const Pi=()=>{gt.value=!0};function Hn(v,b){const A=Z.value[v];A&&_e(()=>A,L=>{if(L){const U=jt(b);U&&(!U.width||!U.height)&&(U.width=L.naturalWidth||100,U.height=L.naturalHeight||80,Qt(U)),f.value?.getNode()?.batchDraw?.()}},{immediate:!0})}const Ei=v=>{ge(v.src,v.uuid);const{x:b,y:A,scaleX:L,scaleY:U}=Pe(),V=50/L,ot=50/U,tt=$t(),Ft={id:tt,type:\"image\",x:b+V,y:A+ot,scaleX:1,scaleY:1,width:null,height:null,uuid:v.uuid,locked:!1,moving:!1};e.value.push(Ft),Hn(v.uuid,tt)},Ai=()=>{gt.value=!1},Bn=v=>v.type===\"entity\"?Z.value[v.entity]||null:Z.value[v.uuid]||null,Ri=()=>{ct.value=!0},Mi=()=>{ct.value=!1},jt=v=>e.value.find(b=>b.id==v)||null,zn=v=>{ct.value=!1,ge(v.image,v.id),console.log(\"selected entity\",v),Wn(v);const{x:b,y:A,scaleX:L,scaleY:U}=Pe(),V=50/L,ot=50/U,Ft={id:$t(),type:\"entity\",x:b+V,y:A+ot,width:128,height:128,scaleX:1,scaleY:1,entity:v.id,fill:Nt(\"--bc\"),locked:!1,moving:!1};e.value.push(Ft),Qt(Ft)},re=()=>{!i.value||!i.value.length||i.value.forEach(v=>{const b=jt(v);b&&(b.rotation=0,zt(b,{rotation:0}))})},Li=()=>{if(!i.value||!i.value.length)return console.log(\"nothing selected\"),!0;let v=!1;return i.value.forEach(b=>{const A=jt(b);A&&A.rotation&&(v=!0)}),!v},jn=v=>{if(!i.value||!i.value.length)return;const b=new Set(i.value),A=e.value.filter(L=>b.has(L.id));for(let L=e.value.length-1;L>=0;L--)b.has(e.value[L].id)&&e.value.splice(L,1);if(v===\"front\")A.forEach(L=>e.value.push(L));else for(let L=A.length-1;L>=0;L--)e.value.unshift(A[L]);E.value++},Nt=v=>{const b=co(v);return b?fo(b):`hsl(${uo(\"--p\")})`},Ze=v=>{Object.entries(v).forEach(([b,A])=>{ge(A,b)})},tn=v=>{Object.entries(v).forEach(([b,A])=>{Wn(A)})},Wn=v=>{St.value[v.id]=v},ge=(v,b)=>{const A=new Image;A.crossOrigin=\"anonymous\",A.src=v,A.onload=()=>{Z.value[b]=A,E.value++;const L=e.value.find(U=>U.uuid===b||U.entity===b||U.id===b);L&&(!L.width||!L.height)&&(L.width=A.naturalWidth,L.height=A.naturalHeight,Qt(L))}},Oi=v=>{dt.value=!1,a.value=v},Ii={width:window.innerWidth,height:window.innerHeight,draggable:!0};function We(v,b){const A=o.value?.getNode();if(!A)return;const L=Math.max(_u,Math.min(wu,v));if(b){const U={x:(b.x-A.x())/(A.scaleX()||1),y:(b.y-A.y())/(A.scaleY()||1)};A.scale({x:L,y:L});const V={x:b.x-U.x*L,y:b.y-U.y*L};A.x(V.x),A.y(V.y)}else{const V=A.container().getBoundingClientRect(),ot={x:V.width/2,y:V.height/2};We(v,ot);return}A.getLayer()?.batchDraw?.(),E.value++}const Di=(v,b)=>{const A=o.value?.getNode();if(!A)return;const L=A.scaleX()||1;We(L*v,b)},Ni=v=>{if(v.evt.preventDefault(),!o.value?.getNode())return;const A={x:v.evt.clientX,y:v.evt.clientY},L=v.evt.deltaY>0?1/pr:pr;Di(L,A)},K=v=>u.value[v]||v;ps(async()=>{it.value=Nt(\"--bc\"),Q.value=Nt(\"--b1\"),k.value=t.save;try{const v=await axios.get(t.load);if(v.data)if(a.value=v.data.name,e.value=v.data.data,u.value=v.data.i18n,p.value=v.data.urls,v.data.images&&Ze(v.data.images),v.data.entities&&tn(v.data.entities),v.data.interactive)try{Fi(v.data.interactive)}catch(b){console.error(\"Failed to initialize websocket\",b)}else _.value=!1;j=JSON.parse(JSON.stringify({shapes:e.value,name:a.value})),window.addEventListener(\"keydown\",en),window.addEventListener(\"mousedown\",Gi),window.addEventListener(\"contextmenu\",b=>b.preventDefault()),_r(()=>{zi(),echo&&echo.leave(`whiteboard.${t.whiteboard}`)})}catch(v){console.error(\"Failed to load whiteboard data:\",v),y.value=\"Error loading whiteboard.\"}});const Gi=v=>{v.button===2&&(v.preventDefault(),Qe())},Fi=v=>{ed({broadcaster:\"reverb\"});const b=new Zc({broadcaster:\"reverb\",key:v.key,wsHost:v.host,wsPort:v.port,wssPort:v.port,forceTLS:v.schema==\"https\",enabledTransports:[\"ws\",\"wss\"]});b.connector.pusher.connection.bind(\"unavailable\",()=>{console.error(\"Websocket unavailable\"),y.value=K(\"websocket-server-unavailable\"),_.value=!1}),b.connector.pusher.connection.bind(\"error\",A=>{console.error(\"Websocket error\",A),y.value=K(\"error-connecting-websocket\"),_.value=!1}),ue=b.join(`whiteboard.${t.whiteboard}`),ue.here(A=>{Et.value=A,_.value=!1}),ue.joining(A=>{Et.value.push(A)}),ue.leaving(A=>{Et.value=Et.value.filter(L=>L.id!==A.id)}),ue.listen(\".shape\",A=>{te(A)}),ue.error(A=>{console.error(\"Websocket lost connection\",A),y.value=K(\"websocket-disconnected\")})},te=v=>{const{action:b,shape:A,image:L,entity:U}=v,V=e.value.findIndex(ot=>ot.id===A.id||ot.uuid&&ot.uuid===A.uuid);if(b===\"deleted\")V!==-1&&(e.value.splice(V,1),i.value.includes(A.id)&&(i.value=i.value.filter(ot=>ot!==A.id),s.value===A.id&&(s.value=null)));else if(b===\"created\"||b===\"updated\"){if(V!==-1)Object.assign(e.value[V],A);else if(e.value.push(A),A.type===\"entity\"&&(St.value[A.entity]||(St.value[A.entity]=U),ge(L,A.entity)),A.type===\"image\"){const ot=A.uuid,tt=L;tt&&ge(tt,ot)}}E.value++,oe(()=>{Dt()})},en=v=>{const b=document.activeElement,A=b&&(b.tagName===\"INPUT\"||b.tagName===\"TEXTAREA\"||b.isContentEditable);if(!(t.readonly||w.value||A)){if((v.key===\"Delete\"||v.keyCode===46)&&(v.preventDefault(),On()),(v.ctrlKey||v.metaKey)&&v.key.toLowerCase()===\"d\"&&(v.preventDefault(),In()),(v.ctrlKey||v.metaKey)&&v.key.toLowerCase()===\"a\"&&(v.preventDefault(),He()),[\"ArrowUp\",\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\"].includes(v.key)&&(v.preventDefault(),mi(v.key)),(v.ctrlKey||v.metaKey)&&v.key.toLowerCase()===\"s\"&&(v.preventDefault(),saveWhiteboard()),(v.ctrlKey||v.metaKey)&&v.key.toLowerCase()===\"c\"){if(w.value)return;v.preventDefault(),vi()}if((v.ctrlKey||v.metaKey)&&v.key.toLowerCase()===\"v\"){if(w.value)return;v.preventDefault(),yi()}if(v.key===\"Escape\"||v.keyCode===27){v.preventDefault(),Qe();return}if((v.key===\"Enter\"||v.keyCode===13)&&g.value===\"drawing\"){v.preventDefault(),je();return}(v.ctrlKey||v.metaKey)&&!v.shiftKey&&v.key.toLowerCase()===\"z\"&&(v.preventDefault(),g.value===\"drawing\"?undoStroke():undo()),(v.ctrlKey||v.metaKey)&&(v.key.toLowerCase()===\"y\"||v.shiftKey&&v.key.toLowerCase()===\"z\")&&(v.preventDefault(),g.value===\"drawing\"?redoStroke():redo())}},ae=()=>{!B.value||B.value.type!==\"text\"||(delete B.value.fontSize,zt(B.value,{fontSize:null}))},nn=()=>{!B.value||B.value.type!==\"text\"||(B.value.fontSize=(B.value.fontSize||10)+2,zt(B.value,{fontSize:B.value.fontSize}))},Hi=()=>{!B.value||B.value.type!==\"text\"||(B.value.fontSize=(B.value.fontSize||12)-2,zt(B.value,{fontSize:B.value.fontSize}))},Bi=()=>{window.openDialog(\"primary-dialog\",p.value.creator)},zi=()=>{window.removeEventListener(\"keydown\",en)},ji=v=>{let b=v.role==\"edit\"?K(\"role-edit\"):K(\"role-view\");return'<div class=\"flex flex-col gap-1\"><a class=\"text-link text-lg\" href=\"'+v.link+'\">'+v.name+'</a><span class=\"text-neutral-content text-xs\">'+b+\"</span></div>\"};return(v,b)=>{const A=Kt(\"v-rect\"),L=Kt(\"v-circle\"),U=Kt(\"v-line\"),V=Kt(\"v-image\"),ot=Kt(\"v-text\"),tt=Kt(\"v-group\"),Ft=Kt(\"v-transformer\"),Ee=Kt(\"v-layer\"),sn=Kt(\"v-stage\"),rn=oo(\"tippy\");return et(),ft(ye,null,[_.value||y.value?(et(),ft(\"div\",nd,[_.value&&!y.value?(et(),ft(\"div\",id,[...b[18]||(b[18]=[O(\"i\",{class:\"fa-solid fa-spinner fa-spin\",\"aria-hidden\":\"true\"},null,-1),O(\"span\",null,\"Joining the whiteboard\",-1)])])):y.value?(et(),ft(\"div\",sd,[b[20]||(b[20]=O(\"i\",{class:\"fa-reguar fa-circle-exclamation\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{innerHTML:y.value},null,8,rd),O(\"button\",{class:\"btn2 btn-default btn-sm\",onClick:b[0]||(b[0]=H=>bi())},[...b[19]||(b[19]=[O(\"i\",{class:\"fa-regular fa-rotate-right\",\"aria-hidden\":\"true\"},null,-1),O(\"span\",null,\"Retry\",-1)])])])):mt(\"\",!0)])):mt(\"\",!0),!_.value&&!y.value?(et(),ft(\"div\",ad,[O(\"div\",od,[O(\"a\",{href:p.value.overview,title:K(\"back\"),class:\"flex items-center gap-1\"},[b[21]||(b[21]=O(\"i\",{class:\"fa-regular fa-left-to-bracket\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{innerHTML:a.value},null,8,hd)],8,ld),t.creator?(et(),ft(\"div\",cd,[si(O(\"button\",{onClick:b[1]||(b[1]=H=>ut.value=!ut.value),class:\"btn2 btn-default btn-sm flex items-center gap-1\"},[...b[22]||(b[22]=[O(\"i\",{class:\"fa-regular fa-gear\",\"aria-hidden\":\"true\"},null,-1)])],512),[[lo,!1]]),ut.value?(et(),ft(\"div\",dd,[O(\"button\",{class:\"px-3 py-2 w-full hover:bg-base-200 rounded flex items-center gap-1.5 text-sm text-base-content transition-all duration-150\",onClick:En,innerHTML:K(\"reset\")},null,8,ud),b[23]||(b[23]=O(\"button\",{disabled:\"\",class:\"px-3 py-2 w-full hover:bg-base-200 rounded flex items-center gap-1.5 text-sm text-base-content transition-all duration-150\"},\" Placeholder 1 \",-1)),b[24]||(b[24]=O(\"button\",{disabled:\"\",class:\"px-3 py-2 w-full hover:bg-base-200 rounded flex items-center gap-1.5 text-sm text-base-content transition-all duration-150\"},\" Placeholder 2 \",-1))])):mt(\"\",!0)])):mt(\"\",!0),t.creator?(et(),ft(\"a\",{key:1,href:\"#\",onClick:b[2]||(b[2]=H=>Bi()),class:\"quick-creator-button btn2 btn-primary btn-sm\",tabindex:\"0\"},[b[25]||(b[25]=O(\"i\",{class:\"flex-none fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"grow hidden sm:inline-block\",innerHTML:K(\"create\")},null,8,fd),O(\"span\",{class:\"flex-none keyboard-shortcut\",id:\"qq-kb-shortcut\",\"data-toggle\":\"tooltip\",\"data-title\":K(\"qq-keyboard-shortcut\"),\"data-html\":\"true\",\"data-placement\":\"bottom\"},\"N\",8,gd)])):mt(\"\",!0)]),O(\"div\",pd,[(et(!0),ft(ye,null,un(Et.value,H=>si((et(),ft(\"span\",{key:H.id,\"aria-label\":H.name,class:\"bg-base-200 text-neutral-content rounded-full h-8 w-8 overflow-hidden flex items-center justify-center cursor-pointer\"},[H.image?(et(),ft(\"img\",{key:0,src:H.image,class:\"w-8 h-8\"},null,8,vd)):(et(),ft(\"span\",yd,pe(H.name.substring(0,2).toUpperCase()),1))],8,md)),[[rn,ji(H)]])),128))])])):mt(\"\",!0),!_.value&&!y.value?(et(),Ot(sn,{key:2,ref_key:\"stage\",ref:o,config:Ii,onClick:fe,onMousedown:Fn,onMousemove:ki,onMouseup:Ti,onWheel:Ni},{default:Ue(()=>[Re(Ee,{ref_key:\"layer\",ref:f},{default:Ue(()=>[(et(!0),ft(ye,null,un(e.value,H=>(et(),Ot(tt,{key:H.id,config:{id:`group-${H.id}`,draggable:!H.is_locked,x:H.x,y:H.y,scaleX:H.scaleX||1,scaleY:H.scaleY||1,rotation:H.rotation||0},onDragstart:Wt=>ke(H),onDragmove:Wt=>pi(H),onDragend:Wt=>An(Wt,H),onClick:Wt=>Mn(H,Wt)},{default:Ue(()=>[H.type===\"rect\"?(et(),Ot(A,{key:0,config:{x:0,y:0,width:H.width,height:H.height,fill:H.fill||\"lightblue\",cornerRadius:6,opacity:H.opacity||1}},null,8,[\"config\"])):mt(\"\",!0),H.type===\"circle\"?(et(),Ot(L,{key:1,config:{x:H.radius,y:H.radius,radius:H.radius,fill:H.fill||\"lightgreen\",opacity:H.opacity||1}},null,8,[\"config\"])):mt(\"\",!0),H.type===\"drawing\"?(et(!0),ft(ye,{key:2},un(H.children,Wt=>(et(),Ot(U,{key:Wt.id,config:{points:Wt.points,stroke:Wt.fill,strokeWidth:Wt.strokeWidth,hitStrokeWidth:$.value,lineCap:\"round\",lineJoin:\"round\",opacity:H.opacity||1}},null,8,[\"config\"]))),128)):mt(\"\",!0),H.type===\"image\"?(et(),Ot(V,{key:3,config:{width:H.width,height:H.height,image:Bn(H),cornerRadius:4,opacity:H.opacity||1}},null,8,[\"config\"])):mt(\"\",!0),H.type===\"entity\"?(et(),Ot(Rc,{key:4,shape:H,entity:St.value[H.entity]||{},\"get-image-el\":Bn},null,8,[\"shape\",\"entity\"])):mt(\"\",!0),H.type===\"text\"&&(!w.value||w.value!==H.id)?(et(),Ot(ot,{key:5,config:{x:ze(H),y:ze(H),width:H.width-ze(H)*2,height:H.height-ze(H)*2,opacity:H.opacity||1,text:H.text,fontSize:xi(H),fontFamily:H.fontFamily||\"Arial\",fill:Gn(H),align:\"center\",verticalAlign:\"middle\",wrap:\"word\"}},null,8,[\"config\"])):mt(\"\",!0),Ln(H.id)&&i.value.length>1&&H.type!==\"circle\"?(et(),Ot(A,{key:6,config:{x:H.x,y:H.y,width:H.width,height:H.height,stroke:Nt(\"--p\"),strokeWidth:2,strokeScaleEnabled:!1,dash:[6,4],opacity:H.opacity||1,listening:!1}},null,8,[\"config\"])):mt(\"\",!0),Ln(H.id)&&i.value.length>1&&H.type===\"circle\"?(et(),Ot(L,{key:7,config:{x:H.radius,y:H.radius,radius:H.radius+2,stroke:Nt(\"--p\"),strokeWidth:2,strokeScaleEnabled:!1,opacity:H.opacity||1,dash:[6,4],listening:!1}},null,8,[\"config\"])):mt(\"\",!0)]),_:2},1032,[\"config\",\"onDragstart\",\"onDragmove\",\"onDragend\",\"onClick\"]))),128)),G.value?(et(),Ot(tt,{key:G.value.id,config:{id:`temp-group-${G.value.id}`}},{default:Ue(()=>[(et(!0),ft(ye,null,un(G.value.children,H=>(et(),Ot(U,{key:H.id,config:{points:H.points,stroke:H.fill,strokeWidth:H.strokeWidth,lineCap:\"round\",lineJoin:\"round\"}},null,8,[\"config\"]))),128))]),_:1},8,[\"config\"])):mt(\"\",!0),R.value?(et(),Ot(tt,{key:R.value.id,config:{id:`temp-rect-${R.value.id}`}},{default:Ue(()=>[Re(A,{config:{x:R.value.x||0,y:R.value.y||0,width:R.value.width||0,height:R.value.height||0,fill:Q.value,stroke:Nt(\"--p\"),strokeWidth:2,listening:!1}},null,8,[\"config\"])]),_:1},8,[\"config\"])):mt(\"\",!0),D.value?(et(),Ot(tt,{key:D.value.id,config:{id:`temp-circle-${D.value.id}`}},{default:Ue(()=>[Re(L,{config:{x:D.value.cx||0,y:D.value.cy||0,radius:D.value.radius||0,fill:Q.value,stroke:Nt(\"--p\"),strokeWidth:2,listening:!1}},null,8,[\"config\"])]),_:1},8,[\"config\"])):mt(\"\",!0),Re(Ft,{ref_key:\"transformer\",ref:h,config:{resizeEnabled:!0,rotateEnabled:!0,borderEnabled:!0,borderStroke:Nt(\"--p\"),borderStrokeWidth:1,anchorStroke:Nt(\"--p\"),anchorFill:Nt(\"--pc\"),anchorSize:8,keepRatio:!0}},null,8,[\"config\"])]),_:1},512)]),_:1},512)):mt(\"\",!0),w.value&&!_.value?si((et(),ft(\"textarea\",{key:3,ref_key:\"textInput\",ref:T,\"onUpdate:modelValue\":b[3]||(b[3]=H=>C.value=H),style:ii(Pn.value),class:\"absolute bg-transparent border-2 border-accent rounded resize-none outline-none z-50\",onBlur:qt,onKeydown:[bn(It(qt,[\"exact\"]),[\"enter\"]),bn(Je,[\"escape\"])],onInput:Ke},null,44,bd)),[[wr,C.value]]):mt(\"\",!0),!_.value&&!y.value?(et(),ft(\"div\",{key:4,style:ii(Zt.value),class:\"fixed z-50 flex items-center justify-center inset-x-0 gap-1 bottom-8 tools\",onMousedown:b[16]||(b[16]=It(()=>{},[\"stop\"])),onClick:b[17]||(b[17]=It(()=>{},[\"stop\"]))},[g.value===\"drawing\"?(et(),ft(\"div\",_d,[O(\"div\",wd,[O(\"button\",{class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":st.value===1}]),title:K(\"thin-stroke\"),onClick:b[4]||(b[4]=It(H=>st.value=1,[\"stop\"]))},[b[26]||(b[26]=O(\"i\",{class:\"fa-regular fa-paintbrush-fine\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"thin-stroke\")},null,8,xd)],10,Sd),O(\"button\",{class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":st.value===3}]),title:K(\"large-stroke\"),onClick:b[5]||(b[5]=It(H=>st.value=3,[\"stop\"]))},[b[27]||(b[27]=O(\"i\",{class:\"fa-regular fa-paintbrush\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"large-stroke\")},null,8,kd)],10,Cd),O(\"button\",{class:\"btn2 btn-sm join-item\",title:K(\"color\"),style:ii({color:it.value}),onClick:It(Be,[\"stop\"])},[b[28]||(b[28]=O(\"i\",{class:\"fa-regular fa-palette\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"color\")},null,8,Pd)],12,Td),O(\"button\",{onClick:je,class:\"btn2 btn-sm join-item\",title:K(\"end-drawing\")},[b[29]||(b[29]=O(\"i\",{class:\"fa-regular fa-check\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"end-drawing\")},null,8,Ad)],8,Ed)])])):B.value?(et(),ft(\"div\",Rd,[O(\"div\",Md,[O(\"button\",{class:Bt([\"btn2 btn-sm join-item\",B.value.is_locked?\"btn-warning\":\"\"]),title:B.value.is_locked?K(\"unlock\"):K(\"lock\"),onClick:It(wi,[\"stop\"])},[O(\"i\",{class:Bt([\"fa-regular\",B.value.is_locked?\"fa-lock\":\"fa-lock-open\"]),\"aria-hidden\":\"true\"},null,2),O(\"span\",Od,pe(B.value.is_locked?K(\"unlock\"):K(\"lock\")),1)],10,Ld),O(\"button\",{class:\"btn2 btn-sm join-item\",title:K(\"duplicate\"),onClick:It(In,[\"stop\"])},[b[30]||(b[30]=O(\"i\",{class:\"fa-regular fa-copy\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",Dd,pe(K(\"duplicate\")),1)],8,Id),O(\"button\",{class:\"btn2 btn-sm join-item\",title:K(\"color\"),onClick:It(Be,[\"stop\"])},[b[31]||(b[31]=O(\"i\",{class:\"fa-regular fa-palette\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"color\")},null,8,Gd)],8,Nd),O(\"button\",{class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":Li()}]),title:K(\"reset-rotation\"),onClick:b[6]||(b[6]=It(H=>re(),[\"stop\"]))},[b[32]||(b[32]=O(\"i\",{class:\"fa-regular fa-rotate\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",Hd,pe(K(\"reset-rotation\")),1)],10,Fd)]),B.value.type===\"text\"?(et(),ft(\"div\",Bd,[O(\"button\",{class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":w.value}]),title:K(\"auto-font\"),onClick:b[7]||(b[7]=It(H=>ae(),[\"stop\"]))},[b[33]||(b[33]=O(\"i\",{class:\"fa-regular fa-text-size\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",jd,pe(K(\"auto-font\")),1)],10,zd),O(\"button\",{class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":w.value||B.value.fontSize===2}]),title:K(\"fmaller-font\"),onClick:b[8]||(b[8]=It(H=>Hi(),[\"stop\"]))},[b[34]||(b[34]=O(\"i\",{class:\"fa-regular fa-minus\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",Ud,pe(K(\"smaller-font\")),1)],10,Wd),O(\"button\",{class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":w.value||B.value.fontSize===12}]),title:K(\"larger-font\"),onClick:b[9]||(b[9]=It(H=>nn(),[\"stop\"]))},[b[35]||(b[35]=O(\"i\",{class:\"fa-regular fa-plus\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",Yd,pe(K(\"larger-font\")),1)],10,Xd)])):mt(\"\",!0),O(\"div\",qd,[O(\"button\",{class:\"btn2 btn-sm join-item\",title:K(\"push-to-front\"),onClick:b[10]||(b[10]=It(H=>jn(\"front\"),[\"stop\"]))},[b[36]||(b[36]=O(\"i\",{class:\"fa-regular fa-up-to-line\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"push-to-front\")},null,8,Vd)],8,$d),O(\"button\",{class:\"btn2 btn-sm join-item\",title:K(\"push-to-back\"),onClick:b[11]||(b[11]=It(H=>jn(\"back\"),[\"stop\"]))},[b[37]||(b[37]=O(\"i\",{class:\"fa-regular fa-down-to-line\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"push-to-back\")},null,8,Jd)],8,Kd)]),O(\"button\",{class:\"btn2 btn-sm text-error-content\",title:K(\"delete\"),onClick:It(On,[\"stop\"])},[b[38]||(b[38]=O(\"i\",{class:\"fa-regular fa-trash-can\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"delete\")},null,8,Zd)],8,Qd)])):g.value!==\"drawing\"&&!r.readonly?(et(),ft(\"div\",tu,[O(\"div\",eu,[O(\"button\",{onClick:b[12]||(b[12]=H=>Rn()),class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":g.value===\"select\"}]),title:K(\"select-shapes\")},[b[39]||(b[39]=O(\"i\",{class:\"fa-regular fa-mouse-pointer\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"select-shapes\")},null,8,iu)],10,nu),O(\"button\",{onClick:b[13]||(b[13]=H=>Fe(\"rect\")),class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":g.value===\"rect\"}]),title:K(\"add-square\")},[b[40]||(b[40]=O(\"i\",{class:\"fa-regular fa-square\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"add-square\")},null,8,ru)],10,su),O(\"button\",{onClick:b[14]||(b[14]=H=>Fe(\"circle\")),class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":g.value===\"circle\"}]),title:K(\"add-circle\")},[b[41]||(b[41]=O(\"i\",{class:\"fa-regular fa-circle\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"add-circle\")},null,8,ou)],10,au),O(\"button\",{onClick:b[15]||(b[15]=H=>Fe(\"text\")),class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":g.value===\"text\"}]),title:K(\"add-text\")},[b[42]||(b[42]=O(\"i\",{class:\"fa-regular fa-text\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"add-text\")},null,8,hu)],10,lu),O(\"button\",{onClick:je,title:K(\"start-drawing\"),class:\"btn2 btn-sm join-item\"},[b[43]||(b[43]=O(\"i\",{class:\"fa-regular fa-scribble\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"start-drawing\")},null,8,du)],8,cu)]),O(\"div\",uu,[O(\"button\",{onClick:Ri,class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":g.value===\"drawing\"}]),title:K(\"add-entity\")},[b[44]||(b[44]=O(\"i\",{class:\"fa-regular fa-search\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"add-entity\")},null,8,gu)],10,fu),O(\"button\",{onClick:Pi,title:K(\"add-image\"),class:Bt([\"btn2 btn-sm join-item\",{\"btn-disabled\":g.value===\"drawing\"}])},[b[45]||(b[45]=O(\"i\",{class:\"fa-regular fa-file-image\",\"aria-hidden\":\"true\"},null,-1)),O(\"span\",{class:\"sr-only\",innerHTML:K(\"add-image\")},null,8,mu)],10,pu)])])):r.readonly?(et(),ft(\"div\",vu,[O(\"i\",{innerHTML:K(\"readonly\")},null,8,yu)])):mt(\"\",!0)],36)):mt(\"\",!0),_.value?mt(\"\",!0):(et(),ft(\"input\",{key:5,ref_key:\"colorInput\",ref:N,type:\"color\",class:\"hidden\",value:it.value,onChange:Si},null,40,bu)),_.value?mt(\"\",!0):(et(),Ot(go,{key:6,api:t.gallery,opened:gt.value,i18n:u.value,onSelected:Ei,onClosed:Ai},null,8,[\"api\",\"opened\",\"i18n\"])),_.value?mt(\"\",!0):(et(),Ot(Hc,{key:7,name:a.value,opened:dt.value,onClosed:Oi,i18n:u.value},null,8,[\"name\",\"opened\",\"i18n\"])),_.value?mt(\"\",!0):(et(),Ot(Xc,{key:8,opened:Lt.value,onClosed:gi,i18n:u.value},null,8,[\"opened\",\"i18n\"])),_.value?mt(\"\",!0):(et(),Ot(Ac,{key:9,api:t.search,opened:ct.value,i18n:u.value,onSelected:zn,onClosed:Mi},null,8,[\"api\",\"opened\",\"i18n\"]))],64)}}}),fi=ho({});fi.use(mc);fi.use(po,{defaultProps:{interactive:!0,allowHTML:!0}});fi.component(\"whiteboard\",Su);fi.mount(\"#whiteboard\");\n"
  },
  {
    "path": "public/build/manifest.json",
    "content": "{\n  \"_Browser.vue_vue_type_script_setup_true_lang-DjY0tfEc.js\": {\n    \"file\": \"assets/Browser.vue_vue_type_script_setup_true_lang-DjY0tfEc.js\",\n    \"name\": \"Browser.vue_vue_type_script_setup_true_lang\",\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\"\n    ]\n  },\n  \"__commonjsHelpers-Cpj98o6Y.js\": {\n    \"file\": \"assets/_commonjsHelpers-Cpj98o6Y.js\",\n    \"name\": \"_commonjsHelpers\"\n  },\n  \"__plugin-vue_export-helper-DlAUqK2U.js\": {\n    \"file\": \"assets/_plugin-vue_export-helper-DlAUqK2U.js\",\n    \"name\": \"_plugin-vue_export-helper\"\n  },\n  \"_coloris-DsKOFKq5.js\": {\n    \"file\": \"assets/coloris-DsKOFKq5.js\",\n    \"name\": \"coloris\"\n  },\n  \"_colours-Dh8441-n.js\": {\n    \"file\": \"assets/colours-Dh8441-n.js\",\n    \"name\": \"colours\"\n  },\n  \"_cytoscape-cose-bilkent-DRrwnnKV.js\": {\n    \"file\": \"assets/cytoscape-cose-bilkent-DRrwnnKV.js\",\n    \"name\": \"cytoscape-cose-bilkent\",\n    \"isDynamicEntry\": true,\n    \"imports\": [\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ]\n  },\n  \"_cytoscape-panzoom-Del_Rz3u.js\": {\n    \"file\": \"assets/cytoscape-panzoom-Del_Rz3u.js\",\n    \"name\": \"cytoscape-panzoom\",\n    \"isDynamicEntry\": true,\n    \"imports\": [\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ]\n  },\n  \"_dialog-DkrH_pRQ.js\": {\n    \"file\": \"assets/dialog-DkrH_pRQ.js\",\n    \"name\": \"dialog\"\n  },\n  \"_index-D5GkNzM3.js\": {\n    \"file\": \"assets/index-D5GkNzM3.js\",\n    \"name\": \"index\"\n  },\n  \"_jspdf.es.min-DI22nqbU.js\": {\n    \"file\": \"assets/jspdf.es.min-DI22nqbU.js\",\n    \"name\": \"jspdf.es.min\",\n    \"isDynamicEntry\": true,\n    \"imports\": [\n      \"_preload-helper-I4rgV-VL.js\"\n    ],\n    \"dynamicImports\": [\n      \"node_modules/html2canvas/dist/html2canvas.esm.js\",\n      \"node_modules/dompurify/dist/purify.es.mjs\",\n      \"node_modules/canvg/lib/index.es.js\"\n    ]\n  },\n  \"_preload-helper-I4rgV-VL.js\": {\n    \"file\": \"assets/preload-helper-I4rgV-VL.js\",\n    \"name\": \"preload-helper\"\n  },\n  \"_sortable.esm-DdTU3J9A.js\": {\n    \"file\": \"assets/sortable.esm-DdTU3J9A.js\",\n    \"name\": \"sortable.esm\"\n  },\n  \"_tippy.esm-CnBRltuW.js\": {\n    \"file\": \"assets/tippy.esm-CnBRltuW.js\",\n    \"name\": \"tippy.esm\"\n  },\n  \"_v-click-outside.umd-Cl-Y_A58.js\": {\n    \"file\": \"assets/v-click-outside.umd-Cl-Y_A58.js\",\n    \"name\": \"v-click-outside.umd\",\n    \"imports\": [\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ]\n  },\n  \"_vendor-tiptap-D5xFoo7B.js\": {\n    \"file\": \"assets/vendor-tiptap-D5xFoo7B.js\",\n    \"name\": \"vendor-tiptap\"\n  },\n  \"_vue-tippy.esm-browser-B_r0Ygiv.js\": {\n    \"file\": \"assets/vue-tippy.esm-browser-B_r0Ygiv.js\",\n    \"name\": \"vue-tippy.esm-browser\",\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\"\n    ]\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-cyrillic-ext-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-cyrillic-ext-wdth-normal-Dhyce-Pj.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-cyrillic-ext-wdth-normal.woff2\"\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-cyrillic-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-cyrillic-wdth-normal-BsksX6tq.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-cyrillic-wdth-normal.woff2\"\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-greek-ext-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-greek-ext-wdth-normal-BYpwsbQR.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-greek-ext-wdth-normal.woff2\"\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-greek-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-greek-wdth-normal-BfW7Njdt.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-greek-wdth-normal.woff2\"\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-latin-ext-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-latin-ext-wdth-normal-DRS-BNlt.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-latin-ext-wdth-normal.woff2\"\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-latin-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-latin-wdth-normal-ClS9VhqK.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-latin-wdth-normal.woff2\"\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-math-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-math-wdth-normal-UmVxaSdA.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-math-wdth-normal.woff2\"\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-symbols-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-symbols-wdth-normal-CLw08Y-f.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-symbols-wdth-normal.woff2\"\n  },\n  \"node_modules/@fontsource-variable/roboto/files/roboto-vietnamese-wdth-normal.woff2\": {\n    \"file\": \"assets/roboto-vietnamese-wdth-normal-DDpurHh1.woff2\",\n    \"src\": \"node_modules/@fontsource-variable/roboto/files/roboto-vietnamese-wdth-normal.woff2\"\n  },\n  \"node_modules/canvg/lib/index.es.js\": {\n    \"file\": \"assets/index.es-MeewMCO3.js\",\n    \"name\": \"index.es\",\n    \"src\": \"node_modules/canvg/lib/index.es.js\",\n    \"isDynamicEntry\": true,\n    \"imports\": [\n      \"__commonjsHelpers-Cpj98o6Y.js\",\n      \"_jspdf.es.min-DI22nqbU.js\",\n      \"_preload-helper-I4rgV-VL.js\"\n    ]\n  },\n  \"node_modules/cytoscape-dblclick/dist/index.esm.js\": {\n    \"file\": \"assets/index.esm-DvuRQLEU.js\",\n    \"name\": \"index.esm\",\n    \"src\": \"node_modules/cytoscape-dblclick/dist/index.esm.js\",\n    \"isDynamicEntry\": true,\n    \"imports\": [\n      \"node_modules/cytoscape/dist/cytoscape.esm.mjs\"\n    ]\n  },\n  \"node_modules/cytoscape/dist/cytoscape.esm.mjs\": {\n    \"file\": \"assets/cytoscape.esm-BJ4qIETX.js\",\n    \"name\": \"cytoscape.esm\",\n    \"src\": \"node_modules/cytoscape/dist/cytoscape.esm.mjs\",\n    \"isDynamicEntry\": true\n  },\n  \"node_modules/dompurify/dist/purify.es.mjs\": {\n    \"file\": \"assets/purify.es-21m173o_.js\",\n    \"name\": \"purify.es\",\n    \"src\": \"node_modules/dompurify/dist/purify.es.mjs\",\n    \"isDynamicEntry\": true\n  },\n  \"node_modules/html2canvas/dist/html2canvas.esm.js\": {\n    \"file\": \"assets/html2canvas.esm-DXEQVQnt.js\",\n    \"name\": \"html2canvas.esm\",\n    \"src\": \"node_modules/html2canvas/dist/html2canvas.esm.js\",\n    \"isDynamicEntry\": true\n  },\n  \"node_modules/rpg-awesome/fonts/rpgawesome-webfont.eot\": {\n    \"file\": \"assets/rpgawesome-webfont-BRLmZ7ej.eot\",\n    \"src\": \"node_modules/rpg-awesome/fonts/rpgawesome-webfont.eot\"\n  },\n  \"node_modules/rpg-awesome/fonts/rpgawesome-webfont.svg\": {\n    \"file\": \"assets/rpgawesome-webfont-DVZLXeu_.svg\",\n    \"src\": \"node_modules/rpg-awesome/fonts/rpgawesome-webfont.svg\"\n  },\n  \"node_modules/rpg-awesome/fonts/rpgawesome-webfont.ttf\": {\n    \"file\": \"assets/rpgawesome-webfont-BFwApLwb.ttf\",\n    \"src\": \"node_modules/rpg-awesome/fonts/rpgawesome-webfont.ttf\"\n  },\n  \"node_modules/rpg-awesome/fonts/rpgawesome-webfont.woff\": {\n    \"file\": \"assets/rpgawesome-webfont-Dqq2L5LG.woff\",\n    \"src\": \"node_modules/rpg-awesome/fonts/rpgawesome-webfont.woff\"\n  },\n  \"resources/css/app.css\": {\n    \"file\": \"assets/app-CcekkIPy.css\",\n    \"src\": \"resources/css/app.css\",\n    \"isEntry\": true,\n    \"name\": \"app\",\n    \"names\": [\n      \"app.css\"\n    ]\n  },\n  \"resources/css/auth.css\": {\n    \"file\": \"assets/auth-Bh9mDens.css\",\n    \"src\": \"resources/css/auth.css\",\n    \"isEntry\": true,\n    \"name\": \"auth\",\n    \"names\": [\n      \"auth.css\"\n    ]\n  },\n  \"resources/css/dashboard.css\": {\n    \"file\": \"assets/dashboard-CsClHCyP.css\",\n    \"src\": \"resources/css/dashboard.css\",\n    \"isEntry\": true,\n    \"name\": \"dashboard\",\n    \"names\": [\n      \"dashboard.css\"\n    ]\n  },\n  \"resources/css/families/tree.css\": {\n    \"file\": \"assets/tree-Dna4NG6v.css\",\n    \"src\": \"resources/css/families/tree.css\",\n    \"isEntry\": true,\n    \"name\": \"tree\",\n    \"names\": [\n      \"tree.css\"\n    ]\n  },\n  \"resources/css/front.css\": {\n    \"file\": \"assets/front-CZW4xdyL.css\",\n    \"src\": \"resources/css/front.css\",\n    \"isEntry\": true,\n    \"name\": \"front\",\n    \"names\": [\n      \"front.css\"\n    ]\n  },\n  \"resources/css/maps/maps.css\": {\n    \"file\": \"assets/maps-7UR0tBUB.css\",\n    \"src\": \"resources/css/maps/maps.css\",\n    \"isEntry\": true,\n    \"name\": \"maps\",\n    \"names\": [\n      \"maps.css\"\n    ]\n  },\n  \"resources/css/print/print.css\": {\n    \"file\": \"assets/print-B43HD77n.css\",\n    \"src\": \"resources/css/print/print.css\",\n    \"isEntry\": true,\n    \"name\": \"print\",\n    \"names\": [\n      \"print.css\"\n    ]\n  },\n  \"resources/css/relations.css\": {\n    \"file\": \"assets/relations-BhqWrOkS.css\",\n    \"src\": \"resources/css/relations.css\",\n    \"isEntry\": true,\n    \"name\": \"relations\",\n    \"names\": [\n      \"relations.css\"\n    ]\n  },\n  \"resources/css/subscription.css\": {\n    \"file\": \"assets/subscription-BGjwpB-C.css\",\n    \"src\": \"resources/css/subscription.css\",\n    \"isEntry\": true,\n    \"name\": \"subscription\",\n    \"names\": [\n      \"subscription.css\"\n    ]\n  },\n  \"resources/css/themes/dark.css\": {\n    \"file\": \"assets/dark-Pb_2oqsz.css\",\n    \"src\": \"resources/css/themes/dark.css\",\n    \"isEntry\": true,\n    \"name\": \"dark\",\n    \"names\": [\n      \"dark.css\"\n    ]\n  },\n  \"resources/css/themes/midnight.css\": {\n    \"file\": \"assets/midnight-DjmKO7Sj.css\",\n    \"src\": \"resources/css/themes/midnight.css\",\n    \"isEntry\": true,\n    \"name\": \"midnight\",\n    \"names\": [\n      \"midnight.css\"\n    ]\n  },\n  \"resources/css/vendor.css\": {\n    \"file\": \"assets/vendor-DEuctmxo.css\",\n    \"src\": \"resources/css/vendor.css\",\n    \"isEntry\": true,\n    \"name\": \"vendor\",\n    \"names\": [\n      \"vendor.css\"\n    ]\n  },\n  \"resources/css/vendors/tinymce.css\": {\n    \"file\": \"assets/tinymce-C7wRrakS.css\",\n    \"src\": \"resources/css/vendors/tinymce.css\",\n    \"isEntry\": true,\n    \"name\": \"tinymce\",\n    \"names\": [\n      \"tinymce.css\"\n    ]\n  },\n  \"resources/images/leaflet/icon-colored.png\": {\n    \"file\": \"assets/icon-colored-DWUwbOkd.png\",\n    \"src\": \"resources/images/leaflet/icon-colored.png\"\n  },\n  \"resources/images/leaflet/icon.png\": {\n    \"file\": \"assets/icon-9ynO2yMO.png\",\n    \"src\": \"resources/images/leaflet/icon.png\"\n  },\n  \"resources/js/abilities.js\": {\n    \"file\": \"assets/abilities-_1tR-hmN.js\",\n    \"name\": \"abilities\",\n    \"src\": \"resources/js/abilities.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\"\n    ]\n  },\n  \"resources/js/app.js\": {\n    \"file\": \"assets/app-B8BXQiap.js\",\n    \"name\": \"app\",\n    \"src\": \"resources/js/app.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_sortable.esm-DdTU3J9A.js\",\n      \"_dialog-DkrH_pRQ.js\",\n      \"_coloris-DsKOFKq5.js\",\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_index-D5GkNzM3.js\",\n      \"__plugin-vue_export-helper-DlAUqK2U.js\",\n      \"_tippy.esm-CnBRltuW.js\",\n      \"_v-click-outside.umd-Cl-Y_A58.js\",\n      \"_Browser.vue_vue_type_script_setup_true_lang-DjY0tfEc.js\",\n      \"_vue-tippy.esm-browser-B_r0Ygiv.js\",\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ],\n    \"css\": [\n      \"assets/app-7Sr4fLAQ.css\"\n    ]\n  },\n  \"resources/js/attributes-manager.js\": {\n    \"file\": \"assets/attributes-manager-Of4dtl9o.js\",\n    \"name\": \"attributes-manager\",\n    \"src\": \"resources/js/attributes-manager.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_v-click-outside.umd-Cl-Y_A58.js\",\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ]\n  },\n  \"resources/js/attributes.js\": {\n    \"file\": \"assets/attributes-BgyqIZFe.js\",\n    \"name\": \"attributes\",\n    \"src\": \"resources/js/attributes.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/auth.js\": {\n    \"file\": \"assets/auth-DX8SCiWG.js\",\n    \"name\": \"auth\",\n    \"src\": \"resources/js/auth.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/billing.js\": {\n    \"file\": \"assets/billing-CAEv3gKN.js\",\n    \"name\": \"billing\",\n    \"src\": \"resources/js/billing.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"__plugin-vue_export-helper-DlAUqK2U.js\"\n    ]\n  },\n  \"resources/js/campaigns/import.js\": {\n    \"file\": \"assets/import-CRZICNET.js\",\n    \"name\": \"import\",\n    \"src\": \"resources/js/campaigns/import.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_index-D5GkNzM3.js\"\n    ]\n  },\n  \"resources/js/campaigns/theme-builder.js\": {\n    \"file\": \"assets/theme-builder-Cvbh2cpO.js\",\n    \"name\": \"theme-builder\",\n    \"src\": \"resources/js/campaigns/theme-builder.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_tippy.esm-CnBRltuW.js\",\n      \"_coloris-DsKOFKq5.js\"\n    ]\n  },\n  \"resources/js/connections/web.js\": {\n    \"file\": \"assets/web-CwwBh20P.js\",\n    \"name\": \"web\",\n    \"src\": \"resources/js/connections/web.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_v-click-outside.umd-Cl-Y_A58.js\",\n      \"_preload-helper-I4rgV-VL.js\",\n      \"_tippy.esm-CnBRltuW.js\",\n      \"_colours-Dh8441-n.js\",\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ],\n    \"dynamicImports\": [\n      \"node_modules/cytoscape/dist/cytoscape.esm.mjs\",\n      \"_cytoscape-cose-bilkent-DRrwnnKV.js\",\n      \"_cytoscape-panzoom-Del_Rz3u.js\",\n      \"_jspdf.es.min-DI22nqbU.js\"\n    ],\n    \"css\": [\n      \"assets/web-C9wt4HvN.css\"\n    ]\n  },\n  \"resources/js/conversation.js\": {\n    \"file\": \"assets/conversation-hoDojmhJ.js\",\n    \"name\": \"conversation\",\n    \"src\": \"resources/js/conversation.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_v-click-outside.umd-Cl-Y_A58.js\",\n      \"__plugin-vue_export-helper-DlAUqK2U.js\",\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ]\n  },\n  \"resources/js/cookieconsent.js\": {\n    \"file\": \"assets/cookieconsent-DM0O5r9k.js\",\n    \"name\": \"cookieconsent\",\n    \"src\": \"resources/js/cookieconsent.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/dashboard.js\": {\n    \"file\": \"assets/dashboard-DzoSMhdl.js\",\n    \"name\": \"dashboard\",\n    \"src\": \"resources/js/dashboard.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_sortable.esm-DdTU3J9A.js\",\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_vue-tippy.esm-browser-B_r0Ygiv.js\",\n      \"_v-click-outside.umd-Cl-Y_A58.js\",\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ]\n  },\n  \"resources/js/editors/summernote.js\": {\n    \"file\": \"assets/summernote-DpnuH_QU.js\",\n    \"name\": \"summernote\",\n    \"src\": \"resources/js/editors/summernote.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/editors/tiptap/SourceEditor.vue\": {\n    \"file\": \"assets/SourceEditor-CaEGRaAo.js\",\n    \"name\": \"SourceEditor\",\n    \"src\": \"resources/js/editors/tiptap/SourceEditor.vue\",\n    \"isDynamicEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"__plugin-vue_export-helper-DlAUqK2U.js\"\n    ],\n    \"css\": [\n      \"assets/SourceEditor-BKF0zshA.css\"\n    ]\n  },\n  \"resources/js/editors/tiptap/Tiptap.vue\": {\n    \"file\": \"assets/Tiptap-Bd5ZGSft.js\",\n    \"name\": \"Tiptap\",\n    \"src\": \"resources/js/editors/tiptap/Tiptap.vue\",\n    \"isDynamicEntry\": true,\n    \"imports\": [\n      \"_preload-helper-I4rgV-VL.js\",\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"__plugin-vue_export-helper-DlAUqK2U.js\",\n      \"_index-D5GkNzM3.js\"\n    ],\n    \"dynamicImports\": [\n      \"resources/js/editors/tiptap/extensions/gallery/GalleryDialog.vue\",\n      \"resources/js/editors/tiptap/SourceEditor.vue\"\n    ],\n    \"css\": [\n      \"assets/Tiptap-B5LGKvdR.css\"\n    ]\n  },\n  \"resources/js/editors/tiptap/extensions/gallery/GalleryDialog.vue\": {\n    \"file\": \"assets/GalleryDialog-B3Id-RLo.js\",\n    \"name\": \"GalleryDialog\",\n    \"src\": \"resources/js/editors/tiptap/extensions/gallery/GalleryDialog.vue\",\n    \"isDynamicEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_index-D5GkNzM3.js\",\n      \"__plugin-vue_export-helper-DlAUqK2U.js\"\n    ],\n    \"css\": [\n      \"assets/GalleryDialog-SGgOgWve.css\"\n    ]\n  },\n  \"resources/js/editors/tiptap/index.js\": {\n    \"file\": \"assets/index-Bajpoqb9.js\",\n    \"name\": \"index\",\n    \"src\": \"resources/js/editors/tiptap/index.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_preload-helper-I4rgV-VL.js\",\n      \"_vendor-tiptap-D5xFoo7B.js\"\n    ],\n    \"dynamicImports\": [\n      \"resources/js/editors/tiptap/Tiptap.vue\"\n    ]\n  },\n  \"resources/js/entities/explore.js\": {\n    \"file\": \"assets/explore-PT_Dl9lc.js\",\n    \"name\": \"explore\",\n    \"src\": \"resources/js/entities/explore.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_vue-tippy.esm-browser-B_r0Ygiv.js\",\n      \"_tippy.esm-CnBRltuW.js\"\n    ]\n  },\n  \"resources/js/family-tree-vue.js\": {\n    \"file\": \"assets/family-tree-vue-BhAkMdmq.js\",\n    \"name\": \"family-tree-vue\",\n    \"src\": \"resources/js/family-tree-vue.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_index-D5GkNzM3.js\",\n      \"__plugin-vue_export-helper-DlAUqK2U.js\"\n    ]\n  },\n  \"resources/js/forms/calendar.js\": {\n    \"file\": \"assets/calendar-9Uf0XYJF.js\",\n    \"name\": \"calendar\",\n    \"src\": \"resources/js/forms/calendar.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/forms/character.js\": {\n    \"file\": \"assets/character-BYzNtBCs.js\",\n    \"name\": \"character\",\n    \"src\": \"resources/js/forms/character.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/front.js\": {\n    \"file\": \"assets/front-BDaha8uH.js\",\n    \"name\": \"front\",\n    \"src\": \"resources/js/front.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_index-D5GkNzM3.js\",\n      \"_dialog-DkrH_pRQ.js\"\n    ]\n  },\n  \"resources/js/gallery/gallery.js\": {\n    \"file\": \"assets/gallery-DqcxhMJm.js\",\n    \"name\": \"gallery\",\n    \"src\": \"resources/js/gallery/gallery.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_v-click-outside.umd-Cl-Y_A58.js\",\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ]\n  },\n  \"resources/js/history.js\": {\n    \"file\": \"assets/history-Bum1jYKg.js\",\n    \"name\": \"history\",\n    \"src\": \"resources/js/history.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/location/map-v3.js\": {\n    \"file\": \"assets/map-v3-_JE1ac-e.js\",\n    \"name\": \"map-v3\",\n    \"src\": \"resources/js/location/map-v3.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/profile.js\": {\n    \"file\": \"assets/profile-D4XIj8wj.js\",\n    \"name\": \"profile\",\n    \"src\": \"resources/js/profile.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/recovery/recovery.js\": {\n    \"file\": \"assets/recovery-DDbs8NlV.js\",\n    \"name\": \"recovery\",\n    \"src\": \"resources/js/recovery/recovery.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_v-click-outside.umd-Cl-Y_A58.js\",\n      \"__commonjsHelpers-Cpj98o6Y.js\"\n    ]\n  },\n  \"resources/js/relations.js\": {\n    \"file\": \"assets/relations-DFy0TfK7.js\",\n    \"name\": \"relations\",\n    \"src\": \"resources/js/relations.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_preload-helper-I4rgV-VL.js\"\n    ],\n    \"dynamicImports\": [\n      \"node_modules/cytoscape/dist/cytoscape.esm.mjs\",\n      \"_cytoscape-cose-bilkent-DRrwnnKV.js\",\n      \"_cytoscape-panzoom-Del_Rz3u.js\",\n      \"node_modules/cytoscape-dblclick/dist/index.esm.js\"\n    ]\n  },\n  \"resources/js/settings.js\": {\n    \"file\": \"assets/settings-HvUxJh5V.js\",\n    \"name\": \"settings\",\n    \"src\": \"resources/js/settings.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/story.js\": {\n    \"file\": \"assets/story-CrmLJDK_.js\",\n    \"name\": \"story\",\n    \"src\": \"resources/js/story.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/subscription.js\": {\n    \"file\": \"assets/subscription-CbUaAMac.js\",\n    \"name\": \"subscription\",\n    \"src\": \"resources/js/subscription.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/vendor-final.js\": {\n    \"file\": \"assets/vendor-final--o6gRmZ3.js\",\n    \"name\": \"vendor-final\",\n    \"src\": \"resources/js/vendor-final.js\",\n    \"isEntry\": true\n  },\n  \"resources/js/whiteboards.js\": {\n    \"file\": \"assets/whiteboards-CYwbHh4e.js\",\n    \"name\": \"whiteboards\",\n    \"src\": \"resources/js/whiteboards.js\",\n    \"isEntry\": true,\n    \"imports\": [\n      \"_vendor-tiptap-D5xFoo7B.js\",\n      \"_colours-Dh8441-n.js\",\n      \"_Browser.vue_vue_type_script_setup_true_lang-DjY0tfEc.js\",\n      \"_vue-tippy.esm-browser-B_r0Ygiv.js\"\n    ]\n  }\n}"
  },
  {
    "path": "public/css/bootstrap-summernote.css",
    "content": "@charset \"UTF-8\";\n\n/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n/**,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:Raleway,sans-serif;font-size:14px;line-height:1.6;color:#636b6f;background-color:#f5f8fa}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#3c8dbc;text-decoration:none}a:focus,a:hover{color:#296282;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}*//*img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.6;background-color:#f5f8fa;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:22px;margin-bottom:22px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}*/\n.lead{margin-bottom:22px;font-size:16px;font-weight:300;line-height:1.4}ol,ul{margin-top:0;margin-bottom:11px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:22px}dd,dt{line-height:1.6}dt{font-weight:700}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{display:table;content:\" \"}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%}blockquote{padding:11px 22px;margin:0 0 22px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.6;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:\"\\2014\\A0\"}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:after,.container:before{display:table;content:\" \"}.container:after{clear:both}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container-fluid:after,.container-fluid:before{display:table;content:\" \"}.container-fluid:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:after,.row:before{display:table;content:\" \"}.row:after{clear:both}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777}caption,th{text-align:left}fieldset,legend{padding:0;border:0}legend{display:block;width:100%;margin-bottom:22px;font-size:21px;line-height:inherit;color:#333;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;}input[type=search]{box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{padding-top:7px}.form-control,output{display:block;font-size:14px;line-height:1.6;color:#555}.form-control{width:100%;}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:36px}.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:22px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline input[type=checkbox],.checkbox input[type=checkbox],.radio-inline input[type=radio],.radio input[type=radio]{position:absolute;margin-top:4px\\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:36px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:34px;padding:6px 10px;font-size:12px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:40px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:45px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:36px;height:36px;line-height:36px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success.checkbox-inline label,.has-success.checkbox label,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.radio-inline label,.has-success.radio label{}.has-success .form-control{}.has-success .form-control:focus{}.has-success .input-group-addon{background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning.checkbox-inline label,.has-warning.checkbox label,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.radio-inline label,.has-warning.radio label{color:#8a6d3b}.has-warning .form-control{}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error.checkbox-inline label,.has-error.checkbox label,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.radio-inline label,.has-error.radio label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:27px}.has-feedback label.sr-only~.form-control-feedback{top:0}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:29px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{display:table;content:\" \"}.form-horizontal .form-group:after{clear:both}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.6;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.6;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#3097d1;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.6;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:after,.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#3c8dbc}.nav .nav-divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.list-group{padding-left:0;margin-bottom:20px}.panel{margin-bottom:22px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-body:after,.panel-body:before{display:table;content:\" \"}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #d3e0e9;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel-group{margin-bottom:22px}  .panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #d3e0e9}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #d3e0e9}.panel-default{border-color:#d3e0e9}.panel-default>.panel-heading{color:#333;background-color:#fff;border-color:#d3e0e9}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d3e0e9}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d3e0e9}.panel-primary{border-color:#3097d1}.panel-primary>.panel-heading{color:#fff;background-color:#3097d1;border-color:#3097d1}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#3097d1}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#3097d1}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transform:translateY(-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:after,.modal-header:before{display:table;content:\" \"}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.6}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:after,.modal-footer:before{display:table;content:\" \"}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.clearfix:after,.clearfix:before{display:table;content:\" \"}.clearfix:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}\n\n.panel, .panel-default > .panel-heading {\n    background-color: unset;\n    border-color: hsl(var(--b1)/.1);\n}\n.btn-default {\n    background-color: hsl(var(--b2)/1);\n    border-color: hsl(var(--b2)/1);\n    color: hsl(var(--bc)/1);\n}\n.btn-default:hover, .btn-default.active.focus, .btn-default.active:focus, .btn-default.active:hover, .btn-default:active.focus, .btn-default:active:focus, .btn-default:active:hover, .open > .btn-default.dropdown-toggle.focus, .open > .btn-default.dropdown-toggle:focus, .open > .btn-default.dropdown-toggle:hover {\n    background-color: hsl(var(--b3)/1);\n    border-color: hsl(var(--b3)/1);\n    color: hsl(var(--bc)/1);\n}\n.btn-default:active:hover, .btn-default.active, .btn-default:active, .open > .btn-default.dropdown-toggle {\n    background-color: hsl(var(--b3)/1);\n    border-color: hsl(var(--b3)/1);\n    color: hsl(var(--bc)/1);\n}\n.dropdown-menu, .form-control {\n    background-color: hsl(var(--b1)/1);\n    color: hsl(var(--bc)/1);\n}\n.dropdown-menu > li > a {\n    color: hsl(var(--bc)/1);\n}\n.dropdown-menu > li > a:hover {\n    background-color: hsl(var(--b3)/1);\n    color: hsl(var(--bc)/1);\n}\n.tooltip {\n    position: absolute;\n    z-index: 1070;\n    display: block;\n    font-size: .7rem;\n    opacity: 0;\n\n    &.in {\n        opacity: .9;\n    }\n\n    &.top {\n        padding: .375rem 0;\n        margin-top: -.25rem;\n    }\n    &.right {\n        padding: 0 .375rem;\n        margin-left: .25rem;\n    }\n    &.bottom {\n        padding: .375rem 0;\n        margin-top: .25rem;\n    }\n    &.left {\n        padding: 0 .375rem;\n        margin-left: -.25rem;\n    }\n\n    &.top .tooltip-arrow {\n        bottom: 0;\n        left: 50%;\n        margin-left: -.375rem;\n        border-width: .375rem .375rem 0;\n    }\n    &.bottom .tooltip-arrow {\n        top: 0;\n        left: 50%;\n        margin-left: -.375rem;\n        border-width: 0 .375rem .375rem;\n    }\n}\n.tooltip-inner {\n    max-width:200px;\n    padding: .125rem .5rem;\n    text-align: center;\n    border-radius: .5rem;\n}\n.tooltip-arrow {\n    position: absolute;\n    width: 0;\n    height: 0;\n    border-style: solid;\n    border-color: transparent;\n}\n\n.tooltip-inner, .tooltip-content {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--n)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--nc)/var(--tw-text-opacity));\n}\n.tooltip.top .tooltip-arrow {\n    --tw-bg-opacity: 1;\n    border-top-color: hsl(var(--n)/var(--tw-bg-opacity));\n}\n.tooltip.bottom .tooltip-arrow {\n    --tw-bg-opacity: 1;\n    border-bottom-color: hsl(var(--n)/var(--tw-bg-opacity));\n}\n.tooltip-content {\n    text-align: left;\n}\n"
  },
  {
    "path": "public/css/bootstrap.css",
    "content": "@charset \"UTF-8\";\n\n/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n/*.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.6;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#3097d1;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.6;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:after,.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#3c8dbc}.nav .nav-divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.list-group{padding-left:0;margin-bottom:20px}*/\n/* still used throughout Kanka */\n/*.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transform:translateY(-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:after,.modal-header:before{display:table;content:\" \"}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.6}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:after,.modal-footer:before{display:table;content:\" \"}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}*/\n\n/*.clearfix:after,.clearfix:before{display:table;content:\" \"}.clearfix:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}*/\n/*@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}*/\n"
  },
  {
    "path": "public/fonts/roboto/OFL.txt",
    "content": "Copyright 2011 The Roboto Project Authors (https://github.com/googlefonts/roboto-classic)\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is copied below, and is also available with a FAQ at:\nhttps://openfontlicense.org\n\n\n-----------------------------------------------------------\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\n-----------------------------------------------------------\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded, \nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting -- in part or in whole -- any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.\n"
  },
  {
    "path": "public/fonts/roboto/README.txt",
    "content": "Roboto Variable Font\n====================\n\nThis download contains Roboto as both variable fonts and static fonts.\n\nRoboto is a variable font with these axes:\n  wdth\n  wght\n\nThis means all the styles are contained in these files:\n  Roboto-VariableFont_wdth,wght.ttf\n  Roboto-Italic-VariableFont_wdth,wght.ttf\n\nIf your app fully supports variable fonts, you can now pick intermediate styles\nthat aren’t available as static fonts. Not all apps support variable fonts, and\nin those cases you can use the static font files for Roboto:\n  static/Roboto_Condensed-Thin.ttf\n  static/Roboto_Condensed-ExtraLight.ttf\n  static/Roboto_Condensed-Light.ttf\n  static/Roboto_Condensed-Regular.ttf\n  static/Roboto_Condensed-Medium.ttf\n  static/Roboto_Condensed-SemiBold.ttf\n  static/Roboto_Condensed-Bold.ttf\n  static/Roboto_Condensed-ExtraBold.ttf\n  static/Roboto_Condensed-Black.ttf\n  static/Roboto_SemiCondensed-Thin.ttf\n  static/Roboto_SemiCondensed-ExtraLight.ttf\n  static/Roboto_SemiCondensed-Light.ttf\n  static/Roboto_SemiCondensed-Regular.ttf\n  static/Roboto_SemiCondensed-Medium.ttf\n  static/Roboto_SemiCondensed-SemiBold.ttf\n  static/Roboto_SemiCondensed-Bold.ttf\n  static/Roboto_SemiCondensed-ExtraBold.ttf\n  static/Roboto_SemiCondensed-Black.ttf\n  static/Roboto-Thin.ttf\n  static/Roboto-ExtraLight.ttf\n  static/Roboto-Light.ttf\n  static/Roboto-Regular.ttf\n  static/Roboto-Medium.ttf\n  static/Roboto-SemiBold.ttf\n  static/Roboto-Bold.ttf\n  static/Roboto-ExtraBold.ttf\n  static/Roboto-Black.ttf\n  static/Roboto_Condensed-ThinItalic.ttf\n  static/Roboto_Condensed-ExtraLightItalic.ttf\n  static/Roboto_Condensed-LightItalic.ttf\n  static/Roboto_Condensed-Italic.ttf\n  static/Roboto_Condensed-MediumItalic.ttf\n  static/Roboto_Condensed-SemiBoldItalic.ttf\n  static/Roboto_Condensed-BoldItalic.ttf\n  static/Roboto_Condensed-ExtraBoldItalic.ttf\n  static/Roboto_Condensed-BlackItalic.ttf\n  static/Roboto_SemiCondensed-ThinItalic.ttf\n  static/Roboto_SemiCondensed-ExtraLightItalic.ttf\n  static/Roboto_SemiCondensed-LightItalic.ttf\n  static/Roboto_SemiCondensed-Italic.ttf\n  static/Roboto_SemiCondensed-MediumItalic.ttf\n  static/Roboto_SemiCondensed-SemiBoldItalic.ttf\n  static/Roboto_SemiCondensed-BoldItalic.ttf\n  static/Roboto_SemiCondensed-ExtraBoldItalic.ttf\n  static/Roboto_SemiCondensed-BlackItalic.ttf\n  static/Roboto-ThinItalic.ttf\n  static/Roboto-ExtraLightItalic.ttf\n  static/Roboto-LightItalic.ttf\n  static/Roboto-Italic.ttf\n  static/Roboto-MediumItalic.ttf\n  static/Roboto-SemiBoldItalic.ttf\n  static/Roboto-BoldItalic.ttf\n  static/Roboto-ExtraBoldItalic.ttf\n  static/Roboto-BlackItalic.ttf\n\nGet started\n-----------\n\n1. Install the font files you want to use\n\n2. Use your app's font picker to view the font family and all the\navailable styles\n\nLearn more about variable fonts\n-------------------------------\n\n  https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts\n  https://variablefonts.typenetwork.com\n  https://medium.com/variable-fonts\n\nIn desktop apps\n\n  https://theblog.adobe.com/can-variable-fonts-illustrator-cc\n  https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts\n\nOnline\n\n  https://developers.google.com/fonts/docs/getting_started\n  https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide\n  https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts\n\nInstalling fonts\n\n  MacOS: https://support.apple.com/en-us/HT201749\n  Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux\n  Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows\n\nAndroid Apps\n\n  https://developers.google.com/fonts/docs/android\n  https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts\n\nLicense\n-------\nPlease read the full license text (OFL.txt) to understand the permissions,\nrestrictions and requirements for usage, redistribution, and modification.\n\nYou can use them in your products & projects – print or digital,\ncommercial or otherwise.\n\nThis isn't legal advice, please consider consulting a lawyer and see the full\nlicense for all details.\n"
  },
  {
    "path": "public/images/favicon/site.webmanifest",
    "content": "{\n  \"name\": \"Kanka\",\n  \"short_name\": \"Kanka\",\n  \"icons\": [\n    {\n      \"src\": \"/images/favicon/web-app-manifest-192x192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\",\n      \"purpose\": \"maskable\"\n    },\n    {\n      \"src\": \"/images/favicon/web-app-manifest-512x512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\",\n      \"purpose\": \"maskable\"\n    }\n  ],\n  \"theme_color\": \"#ffffff\",\n  \"background_color\": \"#ffffff\",\n  \"display\": \"standalone\"\n}"
  },
  {
    "path": "public/index.php",
    "content": "<?php\n\nuse Illuminate\\Contracts\\Http\\Kernel;\nuse Illuminate\\Http\\Request;\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @author   Taylor Otwell <taylor@laravel.com>\n */\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Check If The Application Is Under Maintenance\n|--------------------------------------------------------------------------\n|\n| If the application is in maintenance / demo mode via the \"down\" command\n| we will load this file so that any pre-rendered content can be shown\n| instead of starting the framework, which could cause an exception.\n|\n*/\n\nif (file_exists($maintenance = __DIR__ . '/../storage/framework/maintenance.php')) {\n    require $maintenance;\n}\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader for\n| our application. We just need to utilize it! We'll simply require it\n| into the script here so that we don't have to worry about manual\n| loading any of our classes later on. It feels great to relax.\n|\n*/\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Application\n|--------------------------------------------------------------------------\n|\n| Once we have the application, we can handle the incoming request using\n| the application's HTTP kernel. Then, we will send the response back\n| to this client's browser, allowing them to enjoy our application.\n|\n*/\n\n$app = require_once __DIR__ . '/../bootstrap/app.php';\n\n$kernel = $app->make(Kernel::class);\n\n$response = $kernel->handle(\n    $request = Request::capture()\n)->send();\n\n$kernel->terminate($request, $response);\n"
  },
  {
    "path": "public/js/vendor.js",
    "content": "/*! For license information please see vendor.js.LICENSE.txt */\n(()=>{var t={669:(t,e,n)=>{t.exports=n(609)},448:(t,e,n)=>{\"use strict\";var r=n(867),i=n(26),o=n(372),s=n(327),a=n(97),u=n(109),l=n(985),c=n(61);t.exports=function(t){return new Promise((function(e,n){var f=t.data,p=t.headers,h=t.responseType;r.isFormData(f)&&delete p[\"Content-Type\"];var d=new XMLHttpRequest;if(t.auth){var g=t.auth.username||\"\",v=t.auth.password?unescape(encodeURIComponent(t.auth.password)):\"\";p.Authorization=\"Basic \"+btoa(g+\":\"+v)}var m=a(t.baseURL,t.url);function y(){if(d){var r=\"getAllResponseHeaders\"in d?u(d.getAllResponseHeaders()):null,o={data:h&&\"text\"!==h&&\"json\"!==h?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:r,config:t,request:d};i(e,n,o),d=null}}if(d.open(t.method.toUpperCase(),s(m,t.params,t.paramsSerializer),!0),d.timeout=t.timeout,\"onloadend\"in d?d.onloadend=y:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf(\"file:\"))&&setTimeout(y)},d.onabort=function(){d&&(n(c(\"Request aborted\",t,\"ECONNABORTED\",d)),d=null)},d.onerror=function(){n(c(\"Network Error\",t,null,d)),d=null},d.ontimeout=function(){var e=\"timeout of \"+t.timeout+\"ms exceeded\";t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(c(e,t,t.transitional&&t.transitional.clarifyTimeoutError?\"ETIMEDOUT\":\"ECONNABORTED\",d)),d=null},r.isStandardBrowserEnv()){var b=(t.withCredentials||l(m))&&t.xsrfCookieName?o.read(t.xsrfCookieName):void 0;b&&(p[t.xsrfHeaderName]=b)}\"setRequestHeader\"in d&&r.forEach(p,(function(t,e){void 0===f&&\"content-type\"===e.toLowerCase()?delete p[e]:d.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(d.withCredentials=!!t.withCredentials),h&&\"json\"!==h&&(d.responseType=t.responseType),\"function\"==typeof t.onDownloadProgress&&d.addEventListener(\"progress\",t.onDownloadProgress),\"function\"==typeof t.onUploadProgress&&d.upload&&d.upload.addEventListener(\"progress\",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){d&&(d.abort(),n(t),d=null)})),f||(f=null),d.send(f)}))}},609:(t,e,n)=>{\"use strict\";var r=n(867),i=n(849),o=n(321),s=n(185);function a(t){var e=new o(t),n=i(o.prototype.request,e);return r.extend(n,o.prototype,e),r.extend(n,e),n}var u=a(n(655));u.Axios=o,u.create=function(t){return a(s(u.defaults,t))},u.Cancel=n(263),u.CancelToken=n(972),u.isCancel=n(502),u.all=function(t){return Promise.all(t)},u.spread=n(713),u.isAxiosError=n(268),t.exports=u,t.exports.default=u},263:t=>{\"use strict\";function e(t){this.message=t}e.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},e.prototype.__CANCEL__=!0,t.exports=e},972:(t,e,n)=>{\"use strict\";var r=n(263);function i(t){if(\"function\"!=typeof t)throw new TypeError(\"executor must be a function.\");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var t;return{token:new i((function(e){t=e})),cancel:t}},t.exports=i},502:t=>{\"use strict\";t.exports=function(t){return!(!t||!t.__CANCEL__)}},321:(t,e,n)=>{\"use strict\";var r=n(867),i=n(327),o=n(782),s=n(572),a=n(185),u=n(875),l=u.validators;function c(t){this.defaults=t,this.interceptors={request:new o,response:new o}}c.prototype.request=function(t){\"string\"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method=\"get\";var e=t.transitional;void 0!==e&&u.assertOptions(e,{silentJSONParsing:l.transitional(l.boolean,\"1.0.0\"),forcedJSONParsing:l.transitional(l.boolean,\"1.0.0\"),clarifyTimeoutError:l.transitional(l.boolean,\"1.0.0\")},!1);var n=[],r=!0;this.interceptors.request.forEach((function(e){\"function\"==typeof e.runWhen&&!1===e.runWhen(t)||(r=r&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var i,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!r){var c=[s,void 0];for(Array.prototype.unshift.apply(c,n),c=c.concat(o),i=Promise.resolve(t);c.length;)i=i.then(c.shift(),c.shift());return i}for(var f=t;n.length;){var p=n.shift(),h=n.shift();try{f=p(f)}catch(t){h(t);break}}try{i=s(f)}catch(t){return Promise.reject(t)}for(;o.length;)i=i.then(o.shift(),o.shift());return i},c.prototype.getUri=function(t){return t=a(this.defaults,t),i(t.url,t.params,t.paramsSerializer).replace(/^\\?/,\"\")},r.forEach([\"delete\",\"get\",\"head\",\"options\"],(function(t){c.prototype[t]=function(e,n){return this.request(a(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach([\"post\",\"put\",\"patch\"],(function(t){c.prototype[t]=function(e,n,r){return this.request(a(r||{},{method:t,url:e,data:n}))}})),t.exports=c},782:(t,e,n)=>{\"use strict\";var r=n(867);function i(){this.handlers=[]}i.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},i.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},i.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=i},97:(t,e,n)=>{\"use strict\";var r=n(793),i=n(303);t.exports=function(t,e){return t&&!r(e)?i(t,e):e}},61:(t,e,n)=>{\"use strict\";var r=n(481);t.exports=function(t,e,n,i,o){var s=new Error(t);return r(s,e,n,i,o)}},572:(t,e,n)=>{\"use strict\";var r=n(867),i=n(527),o=n(502),s=n(655);function a(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return a(t),t.headers=t.headers||{},t.data=i.call(t,t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],(function(e){delete t.headers[e]})),(t.adapter||s.adapter)(t).then((function(e){return a(t),e.data=i.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return o(e)||(a(t),e&&e.response&&(e.response.data=i.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},481:t=>{\"use strict\";t.exports=function(t,e,n,r,i){return t.config=e,n&&(t.code=n),t.request=r,t.response=i,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t}},185:(t,e,n)=>{\"use strict\";var r=n(867);t.exports=function(t,e){e=e||{};var n={},i=[\"url\",\"method\",\"data\"],o=[\"headers\",\"auth\",\"proxy\",\"params\"],s=[\"baseURL\",\"transformRequest\",\"transformResponse\",\"paramsSerializer\",\"timeout\",\"timeoutMessage\",\"withCredentials\",\"adapter\",\"responseType\",\"xsrfCookieName\",\"xsrfHeaderName\",\"onUploadProgress\",\"onDownloadProgress\",\"decompress\",\"maxContentLength\",\"maxBodyLength\",\"maxRedirects\",\"transport\",\"httpAgent\",\"httpsAgent\",\"cancelToken\",\"socketPath\",\"responseEncoding\"],a=[\"validateStatus\"];function u(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function l(i){r.isUndefined(e[i])?r.isUndefined(t[i])||(n[i]=u(void 0,t[i])):n[i]=u(t[i],e[i])}r.forEach(i,(function(t){r.isUndefined(e[t])||(n[t]=u(void 0,e[t]))})),r.forEach(o,l),r.forEach(s,(function(i){r.isUndefined(e[i])?r.isUndefined(t[i])||(n[i]=u(void 0,t[i])):n[i]=u(void 0,e[i])})),r.forEach(a,(function(r){r in e?n[r]=u(t[r],e[r]):r in t&&(n[r]=u(void 0,t[r]))}));var c=i.concat(o).concat(s).concat(a),f=Object.keys(t).concat(Object.keys(e)).filter((function(t){return-1===c.indexOf(t)}));return r.forEach(f,l),n}},26:(t,e,n)=>{\"use strict\";var r=n(61);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r(\"Request failed with status code \"+n.status,n.config,null,n.request,n)):t(n)}},527:(t,e,n)=>{\"use strict\";var r=n(867),i=n(655);t.exports=function(t,e,n){var o=this||i;return r.forEach(n,(function(n){t=n.call(o,t,e)})),t}},655:(t,e,n)=>{\"use strict\";var r=n(155),i=n(867),o=n(16),s=n(481),a={\"Content-Type\":\"application/x-www-form-urlencoded\"};function u(t,e){!i.isUndefined(t)&&i.isUndefined(t[\"Content-Type\"])&&(t[\"Content-Type\"]=e)}var l,c={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:((\"undefined\"!=typeof XMLHttpRequest||void 0!==r&&\"[object process]\"===Object.prototype.toString.call(r))&&(l=n(448)),l),transformRequest:[function(t,e){return o(e,\"Accept\"),o(e,\"Content-Type\"),i.isFormData(t)||i.isArrayBuffer(t)||i.isBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(u(e,\"application/x-www-form-urlencoded;charset=utf-8\"),t.toString()):i.isObject(t)||e&&\"application/json\"===e[\"Content-Type\"]?(u(e,\"application/json\"),function(t,e,n){if(i.isString(t))try{return(e||JSON.parse)(t),i.trim(t)}catch(t){if(\"SyntaxError\"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional,n=e&&e.silentJSONParsing,r=e&&e.forcedJSONParsing,o=!n&&\"json\"===this.responseType;if(o||r&&i.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(o){if(\"SyntaxError\"===t.name)throw s(t,this,\"E_JSON_PARSE\");throw t}}return t}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300}};c.headers={common:{Accept:\"application/json, text/plain, */*\"}},i.forEach([\"delete\",\"get\",\"head\"],(function(t){c.headers[t]={}})),i.forEach([\"post\",\"put\",\"patch\"],(function(t){c.headers[t]=i.merge(a)})),t.exports=c},849:t=>{\"use strict\";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},327:(t,e,n)=>{\"use strict\";var r=n(867);function i(t){return encodeURIComponent(t).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(r.isURLSearchParams(e))o=e.toString();else{var s=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)?e+=\"[]\":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),s.push(i(e)+\"=\"+i(t))})))})),o=s.join(\"&\")}if(o){var a=t.indexOf(\"#\");-1!==a&&(t=t.slice(0,a)),t+=(-1===t.indexOf(\"?\")?\"?\":\"&\")+o}return t}},303:t=>{\"use strict\";t.exports=function(t,e){return e?t.replace(/\\/+$/,\"\")+\"/\"+e.replace(/^\\/+/,\"\"):t}},372:(t,e,n)=>{\"use strict\";var r=n(867);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,i,o,s){var a=[];a.push(t+\"=\"+encodeURIComponent(e)),r.isNumber(n)&&a.push(\"expires=\"+new Date(n).toGMTString()),r.isString(i)&&a.push(\"path=\"+i),r.isString(o)&&a.push(\"domain=\"+o),!0===s&&a.push(\"secure\"),document.cookie=a.join(\"; \")},read:function(t){var e=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+t+\")=([^;]*)\"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},793:t=>{\"use strict\";t.exports=function(t){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(t)}},268:t=>{\"use strict\";t.exports=function(t){return\"object\"==typeof t&&!0===t.isAxiosError}},985:(t,e,n)=>{\"use strict\";var r=n(867);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function i(t){var r=t;return e&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return t=i(window.location.href),function(e){var n=r.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},16:(t,e,n)=>{\"use strict\";var r=n(867);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},109:(t,e,n)=>{\"use strict\";var r=n(867),i=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];t.exports=function(t){var e,n,o,s={};return t?(r.forEach(t.split(\"\\n\"),(function(t){if(o=t.indexOf(\":\"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e){if(s[e]&&i.indexOf(e)>=0)return;s[e]=\"set-cookie\"===e?(s[e]?s[e]:[]).concat([n]):s[e]?s[e]+\", \"+n:n}})),s):s}},713:t=>{\"use strict\";t.exports=function(t){return function(e){return t.apply(null,e)}}},875:(t,e,n)=>{\"use strict\";var r=n(593),i={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach((function(t,e){i[t]=function(n){return typeof n===t||\"a\"+(e<1?\"n \":\" \")+t}}));var o={},s=r.version.split(\".\");function a(t,e){for(var n=e?e.split(\".\"):s,r=t.split(\".\"),i=0;i<3;i++){if(n[i]>r[i])return!0;if(n[i]<r[i])return!1}return!1}i.transitional=function(t,e,n){var i=e&&a(e);function s(t,e){return\"[Axios v\"+r.version+\"] Transitional option '\"+t+\"'\"+e+(n?\". \"+n:\"\")}return function(n,r,a){if(!1===t)throw new Error(s(r,\" has been removed in \"+e));return i&&!o[r]&&(o[r]=!0,console.warn(s(r,\" has been deprecated since v\"+e+\" and will be removed in the near future\"))),!t||t(n,r,a)}},t.exports={isOlderVersion:a,assertOptions:function(t,e,n){if(\"object\"!=typeof t)throw new TypeError(\"options must be an object\");for(var r=Object.keys(t),i=r.length;i-- >0;){var o=r[i],s=e[o];if(s){var a=t[o],u=void 0===a||s(a,o,t);if(!0!==u)throw new TypeError(\"option \"+o+\" must be \"+u)}else if(!0!==n)throw Error(\"Unknown option \"+o)}},validators:i}},867:(t,e,n)=>{\"use strict\";var r=n(849),i=Object.prototype.toString;function o(t){return\"[object Array]\"===i.call(t)}function s(t){return void 0===t}function a(t){return null!==t&&\"object\"==typeof t}function u(t){if(\"[object Object]\"!==i.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function l(t){return\"[object Function]\"===i.call(t)}function c(t,e){if(null!=t)if(\"object\"!=typeof t&&(t=[t]),o(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}t.exports={isArray:o,isArrayBuffer:function(t){return\"[object ArrayBuffer]\"===i.call(t)},isBuffer:function(t){return null!==t&&!s(t)&&null!==t.constructor&&!s(t.constructor)&&\"function\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return\"undefined\"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return\"string\"==typeof t},isNumber:function(t){return\"number\"==typeof t},isObject:a,isPlainObject:u,isUndefined:s,isDate:function(t){return\"[object Date]\"===i.call(t)},isFile:function(t){return\"[object File]\"===i.call(t)},isBlob:function(t){return\"[object Blob]\"===i.call(t)},isFunction:l,isStream:function(t){return a(t)&&l(t.pipe)},isURLSearchParams:function(t){return\"undefined\"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return(\"undefined\"==typeof navigator||\"ReactNative\"!==navigator.product&&\"NativeScript\"!==navigator.product&&\"NS\"!==navigator.product)&&(\"undefined\"!=typeof window&&\"undefined\"!=typeof document)},forEach:c,merge:function t(){var e={};function n(n,r){u(e[r])&&u(n)?e[r]=t(e[r],n):u(n)?e[r]=t({},n):o(n)?e[r]=n.slice():e[r]=n}for(var r=0,i=arguments.length;r<i;r++)c(arguments[r],n);return e},extend:function(t,e,n){return c(e,(function(e,i){t[i]=n&&\"function\"==typeof e?r(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\\s+|\\s+$/g,\"\")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}}},2:()=>{if(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");!function(t){\"use strict\";var e=jQuery.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(),function(t){\"use strict\";t.fn.emulateTransitionEnd=function(e){var n=!1,r=this;t(this).one(\"bsTransitionEnd\",(function(){n=!0}));return setTimeout((function(){n||t(r).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement(\"bootstrap\"),e={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}(jQuery),function(t){\"use strict\";var e='[data-dismiss=\"alert\"]',n=function(n){t(n).on(\"click\",e,this.close)};n.VERSION=\"3.4.1\",n.TRANSITION_DURATION=150,n.prototype.close=function(e){var r=t(this),i=r.attr(\"data-target\");i||(i=(i=r.attr(\"href\"))&&i.replace(/.*(?=#[^\\s]*$)/,\"\")),i=\"#\"===i?[]:i;var o=t(document).find(i);function s(){o.detach().trigger(\"closed.bs.alert\").remove()}e&&e.preventDefault(),o.length||(o=r.closest(\".alert\")),o.trigger(e=t.Event(\"close.bs.alert\")),e.isDefaultPrevented()||(o.removeClass(\"in\"),t.support.transition&&o.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",s).emulateTransitionEnd(n.TRANSITION_DURATION):s())};var r=t.fn.alert;t.fn.alert=function(e){return this.each((function(){var r=t(this),i=r.data(\"bs.alert\");i||r.data(\"bs.alert\",i=new n(this)),\"string\"==typeof e&&i[e].call(r)}))},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=r,this},t(document).on(\"click.bs.alert.data-api\",e,n.prototype.close)}(jQuery),function(t){\"use strict\";var e=function(n,r){this.$element=t(n),this.options=t.extend({},e.DEFAULTS,r),this.isLoading=!1};function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.button\"),o=\"object\"==typeof n&&n;i||r.data(\"bs.button\",i=new e(this,o)),\"toggle\"==n?i.toggle():n&&i.setState(n)}))}e.VERSION=\"3.4.1\",e.DEFAULTS={loadingText:\"loading...\"},e.prototype.setState=function(e){var n=\"disabled\",r=this.$element,i=r.is(\"input\")?\"val\":\"html\",o=r.data();e+=\"Text\",null==o.resetText&&r.data(\"resetText\",r[i]()),setTimeout(t.proxy((function(){r[i](null==o[e]?this.options[e]:o[e]),\"loadingText\"==e?(this.isLoading=!0,r.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,r.removeClass(n).removeAttr(n).prop(n,!1))}),this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle=\"buttons\"]');if(e.length){var n=this.$element.find(\"input\");\"radio\"==n.prop(\"type\")?(n.prop(\"checked\")&&(t=!1),e.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==n.prop(\"type\")&&(n.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(t=!1),this.$element.toggleClass(\"active\")),n.prop(\"checked\",this.$element.hasClass(\"active\")),t&&n.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var r=t.fn.button;t.fn.button=n,t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=r,this},t(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',(function(e){var r=t(e.target).closest(\".btn\");n.call(r,\"toggle\"),t(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(e.preventDefault(),r.is(\"input,button\")?r.trigger(\"focus\"):r.find(\"input:visible,button:visible\").first().trigger(\"focus\"))})).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',(function(e){t(e.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(e.type))}))}(jQuery),function(t){\"use strict\";var e=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",t.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",t.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",t.proxy(this.cycle,this))};function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.carousel\"),o=t.extend({},e.DEFAULTS,r.data(),\"object\"==typeof n&&n),s=\"string\"==typeof n?n:o.slide;i||r.data(\"bs.carousel\",i=new e(this,o)),\"number\"==typeof n?i.to(n):s?i[s]():o.interval&&i.pause().cycle()}))}e.VERSION=\"3.4.1\",e.TRANSITION_DURATION=600,e.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},e.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getItemIndex=function(t){return this.$items=t.parent().children(\".item\"),this.$items.index(t||this.$active)},e.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e);if((\"prev\"==t&&0===n||\"next\"==t&&n==this.$items.length-1)&&!this.options.wrap)return e;var r=(n+(\"prev\"==t?-1:1))%this.$items.length;return this.$items.eq(r)},e.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",(function(){e.to(t)})):n==t?this.pause().cycle():this.slide(t>n?\"next\":\"prev\",this.$items.eq(t))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(\".next, .prev\").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},e.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},e.prototype.slide=function(n,r){var i=this.$element.find(\".item.active\"),o=r||this.getItemForDirection(n,i),s=this.interval,a=\"next\"==n?\"left\":\"right\",u=this;if(o.hasClass(\"active\"))return this.sliding=!1;var l=o[0],c=t.Event(\"slide.bs.carousel\",{relatedTarget:l,direction:a});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var f=t(this.$indicators.children()[this.getItemIndex(o)]);f&&f.addClass(\"active\")}var p=t.Event(\"slid.bs.carousel\",{relatedTarget:l,direction:a});return t.support.transition&&this.$element.hasClass(\"slide\")?(o.addClass(n),\"object\"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(a),o.addClass(a),i.one(\"bsTransitionEnd\",(function(){o.removeClass([n,a].join(\" \")).addClass(\"active\"),i.removeClass([\"active\",a].join(\" \")),u.sliding=!1,setTimeout((function(){u.$element.trigger(p)}),0)})).emulateTransitionEnd(e.TRANSITION_DURATION)):(i.removeClass(\"active\"),o.addClass(\"active\"),this.sliding=!1,this.$element.trigger(p)),s&&this.cycle(),this}};var r=t.fn.carousel;t.fn.carousel=n,t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=r,this};var i=function(e){var r=t(this),i=r.attr(\"href\");i&&(i=i.replace(/.*(?=#[^\\s]+$)/,\"\"));var o=r.attr(\"data-target\")||i,s=t(document).find(o);if(s.hasClass(\"carousel\")){var a=t.extend({},s.data(),r.data()),u=r.attr(\"data-slide-to\");u&&(a.interval=!1),n.call(s,a),u&&s.data(\"bs.carousel\").to(u),e.preventDefault()}};t(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",i).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",i),t(window).on(\"load\",(function(){t('[data-ride=\"carousel\"]').each((function(){var e=t(this);n.call(e,e.data())}))}))}(jQuery),function(t){\"use strict\";var e=function(n,r){this.$element=t(n),this.options=t.extend({},e.DEFAULTS,r),this.$trigger=t('[data-toggle=\"collapse\"][href=\"#'+n.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+n.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(e){var n,r=e.attr(\"data-target\")||(n=e.attr(\"href\"))&&n.replace(/.*(?=#[^\\s]+$)/,\"\");return t(document).find(r)}function r(n){return this.each((function(){var r=t(this),i=r.data(\"bs.collapse\"),o=t.extend({},e.DEFAULTS,r.data(),\"object\"==typeof n&&n);!i&&o.toggle&&/show|hide/.test(n)&&(o.toggle=!1),i||r.data(\"bs.collapse\",i=new e(this,o)),\"string\"==typeof n&&i[n]()}))}e.VERSION=\"3.4.1\",e.TRANSITION_DURATION=350,e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){return this.$element.hasClass(\"width\")?\"width\":\"height\"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var n,i=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(i&&i.length&&(n=i.data(\"bs.collapse\"))&&n.transitioning)){var o=t.Event(\"show.bs.collapse\");if(this.$element.trigger(o),!o.isDefaultPrevented()){i&&i.length&&(r.call(i,\"hide\"),n||i.data(\"bs.collapse\",null));var s=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[s](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var a=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[s](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!t.support.transition)return a.call(this);var u=t.camelCase([\"scroll\",s].join(\"-\"));this.$element.one(\"bsTransitionEnd\",t.proxy(a,this)).emulateTransitionEnd(e.TRANSITION_DURATION)[s](this.$element[0][u])}}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var n=t.Event(\"hide.bs.collapse\");if(this.$element.trigger(n),!n.isDefaultPrevented()){var r=this.dimension();this.$element[r](this.$element[r]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};if(!t.support.transition)return i.call(this);this.$element[r](0).one(\"bsTransitionEnd\",t.proxy(i,this)).emulateTransitionEnd(e.TRANSITION_DURATION)}}},e.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},e.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(t.proxy((function(e,r){var i=t(r);this.addAriaAndCollapsedClass(n(i),i)}),this)).end()},e.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass(\"in\");t.attr(\"aria-expanded\",n),e.toggleClass(\"collapsed\",!n).attr(\"aria-expanded\",n)};var i=t.fn.collapse;t.fn.collapse=r,t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',(function(e){var i=t(this);i.attr(\"data-target\")||e.preventDefault();var o=n(i),s=o.data(\"bs.collapse\")?\"toggle\":i.data();r.call(o,s)}))}(jQuery),function(t){\"use strict\";var e=\".dropdown-backdrop\",n='[data-toggle=\"dropdown\"]',r=function(e){t(e).on(\"click.bs.dropdown\",this.toggle)};function i(e){var n=e.attr(\"data-target\");n||(n=(n=e.attr(\"href\"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\\s]*$)/,\"\"));var r=\"#\"!==n?t(document).find(n):null;return r&&r.length?r:e.parent()}function o(r){r&&3===r.which||(t(e).remove(),t(n).each((function(){var e=t(this),n=i(e),o={relatedTarget:this};n.hasClass(\"open\")&&(r&&\"click\"==r.type&&/input|textarea/i.test(r.target.tagName)&&t.contains(n[0],r.target)||(n.trigger(r=t.Event(\"hide.bs.dropdown\",o)),r.isDefaultPrevented()||(e.attr(\"aria-expanded\",\"false\"),n.removeClass(\"open\").trigger(t.Event(\"hidden.bs.dropdown\",o)))))})))}r.VERSION=\"3.4.1\",r.prototype.toggle=function(e){var n=t(this);if(!n.is(\".disabled, :disabled\")){var r=i(n),s=r.hasClass(\"open\");if(o(),!s){\"ontouchstart\"in document.documentElement&&!r.closest(\".navbar-nav\").length&&t(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(t(this)).on(\"click\",o);var a={relatedTarget:this};if(r.trigger(e=t.Event(\"show.bs.dropdown\",a)),e.isDefaultPrevented())return;n.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),r.toggleClass(\"open\").trigger(t.Event(\"shown.bs.dropdown\",a))}return!1}},r.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var r=t(this);if(e.preventDefault(),e.stopPropagation(),!r.is(\".disabled, :disabled\")){var o=i(r),s=o.hasClass(\"open\");if(!s&&27!=e.which||s&&27==e.which)return 27==e.which&&o.find(n).trigger(\"focus\"),r.trigger(\"click\");var a=o.find(\".dropdown-menu li:not(.disabled):visible a\");if(a.length){var u=a.index(e.target);38==e.which&&u>0&&u--,40==e.which&&u<a.length-1&&u++,~u||(u=0),a.eq(u).trigger(\"focus\")}}}};var s=t.fn.dropdown;t.fn.dropdown=function(e){return this.each((function(){var n=t(this),i=n.data(\"bs.dropdown\");i||n.data(\"bs.dropdown\",i=new r(this)),\"string\"==typeof e&&i[e].call(n)}))},t.fn.dropdown.Constructor=r,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=s,this},t(document).on(\"click.bs.dropdown.data-api\",o).on(\"click.bs.dropdown.data-api\",\".dropdown form\",(function(t){t.stopPropagation()})).on(\"click.bs.dropdown.data-api\",n,r.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",n,r.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",r.prototype.keydown)}(jQuery),function(t){\"use strict\";var e=function(e,n){this.options=n,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=\".navbar-fixed-top, .navbar-fixed-bottom\",this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,t.proxy((function(){this.$element.trigger(\"loaded.bs.modal\")}),this))};function n(n,r){return this.each((function(){var i=t(this),o=i.data(\"bs.modal\"),s=t.extend({},e.DEFAULTS,i.data(),\"object\"==typeof n&&n);o||i.data(\"bs.modal\",o=new e(this,s)),\"string\"==typeof n?o[n](r):s.show&&o.show(r)}))}e.VERSION=\"3.4.1\",e.TRANSITION_DURATION=300,e.BACKDROP_TRANSITION_DURATION=150,e.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},e.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},e.prototype.show=function(n){var r=this,i=t.Event(\"show.bs.modal\",{relatedTarget:n});this.$element.trigger(i),this.isShown||i.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',t.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",(function(){r.$element.one(\"mouseup.dismiss.bs.modal\",(function(e){t(e.target).is(r.$element)&&(r.ignoreBackdropClick=!0)}))})),this.backdrop((function(){var i=t.support.transition&&r.$element.hasClass(\"fade\");r.$element.parent().length||r.$element.appendTo(r.$body),r.$element.show().scrollTop(0),r.adjustDialog(),i&&r.$element[0].offsetWidth,r.$element.addClass(\"in\"),r.enforceFocus();var o=t.Event(\"shown.bs.modal\",{relatedTarget:n});i?r.$dialog.one(\"bsTransitionEnd\",(function(){r.$element.trigger(\"focus\").trigger(o)})).emulateTransitionEnd(e.TRANSITION_DURATION):r.$element.trigger(\"focus\").trigger(o)})))},e.prototype.hide=function(n){n&&n.preventDefault(),n=t.Event(\"hide.bs.modal\"),this.$element.trigger(n),this.isShown&&!n.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),t.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",t.proxy(this.hideModal,this)).emulateTransitionEnd(e.TRANSITION_DURATION):this.hideModal())},e.prototype.enforceFocus=function(){t(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",t.proxy((function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger(\"focus\")}),this))},e.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",t.proxy((function(t){27==t.which&&this.hide()}),this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},e.prototype.resize=function(){this.isShown?t(window).on(\"resize.bs.modal\",t.proxy(this.handleUpdate,this)):t(window).off(\"resize.bs.modal\")},e.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop((function(){t.$body.removeClass(\"modal-open\"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger(\"hidden.bs.modal\")}))},e.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},e.prototype.backdrop=function(n){var r=this,i=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&i;if(this.$backdrop=t(document.createElement(\"div\")).addClass(\"modal-backdrop \"+i).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",t.proxy((function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide())}),this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!n)return;o?this.$backdrop.one(\"bsTransitionEnd\",n).emulateTransitionEnd(e.BACKDROP_TRANSITION_DURATION):n()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var s=function(){r.removeBackdrop(),n&&n()};t.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",s).emulateTransitionEnd(e.BACKDROP_TRANSITION_DURATION):s()}else n&&n()},e.prototype.handleUpdate=function(){this.adjustDialog()},e.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:\"\"})},e.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},e.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},e.prototype.setScrollbar=function(){var e=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css(\"padding-right\",e+n),t(this.fixedContent).each((function(e,r){var i=r.style.paddingRight,o=t(r).css(\"padding-right\");t(r).data(\"padding-right\",i).css(\"padding-right\",parseFloat(o)+n+\"px\")})))},e.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad),t(this.fixedContent).each((function(e,n){var r=t(n).data(\"padding-right\");t(n).removeData(\"padding-right\"),n.style.paddingRight=r||\"\"}))},e.prototype.measureScrollbar=function(){var t=document.createElement(\"div\");t.className=\"modal-scrollbar-measure\",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var r=t.fn.modal;t.fn.modal=n,t.fn.modal.Constructor=e,t.fn.modal.noConflict=function(){return t.fn.modal=r,this},t(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',(function(e){var r=t(this),i=r.attr(\"href\"),o=r.attr(\"data-target\")||i&&i.replace(/.*(?=#[^\\s]+$)/,\"\"),s=t(document).find(o),a=s.data(\"bs.modal\")?\"toggle\":t.extend({remote:!/#/.test(i)&&i},s.data(),r.data());r.is(\"a\")&&e.preventDefault(),s.one(\"show.bs.modal\",(function(t){t.isDefaultPrevented()||s.one(\"hidden.bs.modal\",(function(){r.is(\":visible\")&&r.trigger(\"focus\")}))})),n.call(s,a,this)}))}(jQuery),function(t){\"use strict\";var e=[\"sanitize\",\"whiteList\",\"sanitizeFn\"],n=[\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"],r={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},i=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,o=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function s(e,r){var s=e.nodeName.toLowerCase();if(-1!==t.inArray(s,r))return-1===t.inArray(s,n)||Boolean(e.nodeValue.match(i)||e.nodeValue.match(o));for(var a=t(r).filter((function(t,e){return e instanceof RegExp})),u=0,l=a.length;u<l;u++)if(s.match(a[u]))return!0;return!1}function a(e,n,r){if(0===e.length)return e;if(r&&\"function\"==typeof r)return r(e);if(!document.implementation||!document.implementation.createHTMLDocument)return e;var i=document.implementation.createHTMLDocument(\"sanitization\");i.body.innerHTML=e;for(var o=t.map(n,(function(t,e){return e})),a=t(i.body).find(\"*\"),u=0,l=a.length;u<l;u++){var c=a[u],f=c.nodeName.toLowerCase();if(-1!==t.inArray(f,o))for(var p=t.map(c.attributes,(function(t){return t})),h=[].concat(n[\"*\"]||[],n[f]||[]),d=0,g=p.length;d<g;d++)s(p[d],h)||c.removeAttribute(p[d].nodeName);else c.parentNode.removeChild(c)}return i.body.innerHTML}var u=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",t,e)};u.VERSION=\"3.4.1\",u.TRANSITION_DURATION=150,u.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0},sanitize:!0,sanitizeFn:null,whiteList:r},u.prototype.init=function(e,n,r){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var i=this.options.trigger.split(\" \"),o=i.length;o--;){var s=i[o];if(\"click\"==s)this.$element.on(\"click.\"+this.type,this.options.selector,t.proxy(this.toggle,this));else if(\"manual\"!=s){var a=\"hover\"==s?\"mouseenter\":\"focusin\",u=\"hover\"==s?\"mouseleave\":\"focusout\";this.$element.on(a+\".\"+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(u+\".\"+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},u.prototype.getDefaults=function(){return u.DEFAULTS},u.prototype.getOptions=function(n){var r=this.$element.data();for(var i in r)r.hasOwnProperty(i)&&-1!==t.inArray(i,e)&&delete r[i];return(n=t.extend({},this.getDefaults(),r,n)).delay&&\"number\"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=a(n.template,n.whiteList,n.sanitizeFn)),n},u.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,(function(t,r){n[t]!=r&&(e[t]=r)})),e},u.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n)),e instanceof t.Event&&(n.inState[\"focusin\"==e.type?\"focus\":\"hover\"]=!0),n.tip().hasClass(\"in\")||\"in\"==n.hoverState)n.hoverState=\"in\";else{if(clearTimeout(n.timeout),n.hoverState=\"in\",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){\"in\"==n.hoverState&&n.show()}),n.options.delay.show)}},u.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},u.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n)),e instanceof t.Event&&(n.inState[\"focusout\"==e.type?\"focus\":\"hover\"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState=\"out\",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){\"out\"==n.hoverState&&n.hide()}),n.options.delay.hide)}},u.prototype.show=function(){var e=t.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!n)return;var r=this,i=this.tip(),o=this.getUID(this.type);this.setContent(),i.attr(\"id\",o),this.$element.attr(\"aria-describedby\",o),this.options.animation&&i.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,i[0],this.$element[0]):this.options.placement,a=/\\s?auto?\\s?/i,l=a.test(s);l&&(s=s.replace(a,\"\")||\"top\"),i.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?i.appendTo(t(document).find(this.options.container)):i.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var c=this.getPosition(),f=i[0].offsetWidth,p=i[0].offsetHeight;if(l){var h=s,d=this.getPosition(this.$viewport);s=\"bottom\"==s&&c.bottom+p>d.bottom?\"top\":\"top\"==s&&c.top-p<d.top?\"bottom\":\"right\"==s&&c.right+f>d.width?\"left\":\"left\"==s&&c.left-f<d.left?\"right\":s,i.removeClass(h).addClass(s)}var g=this.getCalculatedOffset(s,c,f,p);this.applyPlacement(g,s);var v=function(){var t=r.hoverState;r.$element.trigger(\"shown.bs.\"+r.type),r.hoverState=null,\"out\"==t&&r.leave(r)};t.support.transition&&this.$tip.hasClass(\"fade\")?i.one(\"bsTransitionEnd\",v).emulateTransitionEnd(u.TRANSITION_DURATION):v()}},u.prototype.applyPlacement=function(e,n){var r=this.tip(),i=r[0].offsetWidth,o=r[0].offsetHeight,s=parseInt(r.css(\"margin-top\"),10),a=parseInt(r.css(\"margin-left\"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),e.top+=s,e.left+=a,t.offset.setOffset(r[0],t.extend({using:function(t){r.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),r.addClass(\"in\");var u=r[0].offsetWidth,l=r[0].offsetHeight;\"top\"==n&&l!=o&&(e.top=e.top+o-l);var c=this.getViewportAdjustedDelta(n,e,u,l);c.left?e.left+=c.left:e.top+=c.top;var f=/top|bottom/.test(n),p=f?2*c.left-i+u:2*c.top-o+l,h=f?\"offsetWidth\":\"offsetHeight\";r.offset(e),this.replaceArrow(p,r[0][h],f)},u.prototype.replaceArrow=function(t,e,n){this.arrow().css(n?\"left\":\"top\",50*(1-t/e)+\"%\").css(n?\"top\":\"left\",\"\")},u.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=a(e,this.options.whiteList,this.options.sanitizeFn)),t.find(\".tooltip-inner\").html(e)):t.find(\".tooltip-inner\").text(e),t.removeClass(\"fade in top bottom left right\")},u.prototype.hide=function(e){var n=this,r=t(this.$tip),i=t.Event(\"hide.bs.\"+this.type);function o(){\"in\"!=n.hoverState&&r.detach(),n.$element&&n.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+n.type),e&&e()}if(this.$element.trigger(i),!i.isDefaultPrevented())return r.removeClass(\"in\"),t.support.transition&&r.hasClass(\"fade\")?r.one(\"bsTransitionEnd\",o).emulateTransitionEnd(u.TRANSITION_DURATION):o(),this.hoverState=null,this},u.prototype.fixTitle=function(){var t=this.$element;(t.attr(\"title\")||\"string\"!=typeof t.attr(\"data-original-title\"))&&t.attr(\"data-original-title\",t.attr(\"title\")||\"\").attr(\"title\",\"\")},u.prototype.hasContent=function(){return this.getTitle()},u.prototype.getPosition=function(e){var n=(e=e||this.$element)[0],r=\"BODY\"==n.tagName,i=n.getBoundingClientRect();null==i.width&&(i=t.extend({},i,{width:i.right-i.left,height:i.bottom-i.top}));var o=window.SVGElement&&n instanceof window.SVGElement,s=r?{top:0,left:0}:o?null:e.offset(),a={scroll:r?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},u=r?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},i,a,u,s)},u.prototype.getCalculatedOffset=function(t,e,n,r){return\"bottom\"==t?{top:e.top+e.height,left:e.left+e.width/2-n/2}:\"top\"==t?{top:e.top-r,left:e.left+e.width/2-n/2}:\"left\"==t?{top:e.top+e.height/2-r/2,left:e.left-n}:{top:e.top+e.height/2-r/2,left:e.left+e.width}},u.prototype.getViewportAdjustedDelta=function(t,e,n,r){var i={top:0,left:0};if(!this.$viewport)return i;var o=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-o-s.scroll,u=e.top+o-s.scroll+r;a<s.top?i.top=s.top-a:u>s.top+s.height&&(i.top=s.top+s.height-u)}else{var l=e.left-o,c=e.left+o+n;l<s.left?i.left=s.left-l:c>s.right&&(i.left=s.left+s.width-c)}return i},u.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr(\"data-original-title\")||(\"function\"==typeof e.title?e.title.call(t[0]):e.title)},u.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},u.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},u.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},u.prototype.enable=function(){this.enabled=!0},u.prototype.disable=function(){this.enabled=!1},u.prototype.toggleEnabled=function(){this.enabled=!this.enabled},u.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data(\"bs.\"+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass(\"in\")?n.leave(n):n.enter(n)},u.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide((function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null}))},u.prototype.sanitizeHtml=function(t){return a(t,this.options.whiteList,this.options.sanitizeFn)};var l=t.fn.tooltip;t.fn.tooltip=function(e){return this.each((function(){var n=t(this),r=n.data(\"bs.tooltip\"),i=\"object\"==typeof e&&e;!r&&/destroy|hide/.test(e)||(r||n.data(\"bs.tooltip\",r=new u(this,i)),\"string\"==typeof e&&r[e]())}))},t.fn.tooltip.Constructor=u,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=l,this}}(jQuery),function(t){\"use strict\";var e=function(t,e){this.init(\"popover\",t,e)};if(!t.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");e.VERSION=\"3.4.1\",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();if(this.options.html){var r=typeof n;this.options.sanitize&&(e=this.sanitizeHtml(e),\"string\"===r&&(n=this.sanitizeHtml(n))),t.find(\".popover-title\").html(e),t.find(\".popover-content\").children().detach().end()[\"string\"===r?\"html\":\"append\"](n)}else t.find(\".popover-title\").text(e),t.find(\".popover-content\").children().detach().end().text(n);t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr(\"data-content\")||(\"function\"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var n=t.fn.popover;t.fn.popover=function(n){return this.each((function(){var r=t(this),i=r.data(\"bs.popover\"),o=\"object\"==typeof n&&n;!i&&/destroy|hide/.test(n)||(i||r.data(\"bs.popover\",i=new e(this,o)),\"string\"==typeof n&&i[n]())}))},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=n,this}}(jQuery),function(t){\"use strict\";function e(n,r){this.$body=t(document.body),this.$scrollElement=t(n).is(document.body)?t(window):t(n),this.options=t.extend({},e.DEFAULTS,r),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.scrollspy\"),o=\"object\"==typeof n&&n;i||r.data(\"bs.scrollspy\",i=new e(this,o)),\"string\"==typeof n&&i[n]()}))}e.VERSION=\"3.4.1\",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n=\"offset\",r=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n=\"position\",r=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map((function(){var e=t(this),i=e.data(\"target\")||e.attr(\"href\"),o=/^#./.test(i)&&t(i);return o&&o.length&&o.is(\":visible\")&&[[o[n]().top+r,i]]||null})).sort((function(t,e){return t[0]-e[0]})).each((function(){e.offsets.push(this[0]),e.targets.push(this[1])}))},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),r=this.options.offset+n-this.$scrollElement.height(),i=this.offsets,o=this.targets,s=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=r)return s!=(t=o[o.length-1])&&this.activate(t);if(s&&e<i[0])return this.activeTarget=null,this.clear();for(t=i.length;t--;)s!=o[t]&&e>=i[t]&&(void 0===i[t+1]||e<i[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var n=this.selector+'[data-target=\"'+e+'\"],'+this.selector+'[href=\"'+e+'\"]',r=t(n).parents(\"li\").addClass(\"active\");r.parent(\".dropdown-menu\").length&&(r=r.closest(\"li.dropdown\").addClass(\"active\")),r.trigger(\"activate.bs.scrollspy\")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var r=t.fn.scrollspy;t.fn.scrollspy=n,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=r,this},t(window).on(\"load.bs.scrollspy.data-api\",(function(){t('[data-spy=\"scroll\"]').each((function(){var e=t(this);n.call(e,e.data())}))}))}(jQuery),function(t){\"use strict\";var e=function(e){this.element=t(e)};function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.tab\");i||r.data(\"bs.tab\",i=new e(this)),\"string\"==typeof n&&i[n]()}))}e.VERSION=\"3.4.1\",e.TRANSITION_DURATION=150,e.prototype.show=function(){var e=this.element,n=e.closest(\"ul:not(.dropdown-menu)\"),r=e.data(\"target\");if(r||(r=(r=e.attr(\"href\"))&&r.replace(/.*(?=#[^\\s]*$)/,\"\")),!e.parent(\"li\").hasClass(\"active\")){var i=n.find(\".active:last a\"),o=t.Event(\"hide.bs.tab\",{relatedTarget:e[0]}),s=t.Event(\"show.bs.tab\",{relatedTarget:i[0]});if(i.trigger(o),e.trigger(s),!s.isDefaultPrevented()&&!o.isDefaultPrevented()){var a=t(document).find(r);this.activate(e.closest(\"li\"),n),this.activate(a,a.parent(),(function(){i.trigger({type:\"hidden.bs.tab\",relatedTarget:e[0]}),e.trigger({type:\"shown.bs.tab\",relatedTarget:i[0]})}))}}},e.prototype.activate=function(n,r,i){var o=r.find(\"> .active\"),s=i&&t.support.transition&&(o.length&&o.hasClass(\"fade\")||!!r.find(\"> .fade\").length);function a(){o.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),n.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),s?(n[0].offsetWidth,n.addClass(\"in\")):n.removeClass(\"fade\"),n.parent(\".dropdown-menu\").length&&n.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),i&&i()}o.length&&s?o.one(\"bsTransitionEnd\",a).emulateTransitionEnd(e.TRANSITION_DURATION):a(),o.removeClass(\"in\")};var r=t.fn.tab;t.fn.tab=n,t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=r,this};var i=function(e){e.preventDefault(),n.call(t(this),\"show\")};t(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',i).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',i)}(jQuery),function(t){\"use strict\";var e=function(n,r){this.options=t.extend({},e.DEFAULTS,r);var i=this.options.target===e.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=i.on(\"scroll.bs.affix.data-api\",t.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.affix\"),o=\"object\"==typeof n&&n;i||r.data(\"bs.affix\",i=new e(this,o)),\"string\"==typeof n&&i[n]()}))}e.VERSION=\"3.4.1\",e.RESET=\"affix affix-top affix-bottom\",e.DEFAULTS={offset:0,target:window},e.prototype.getState=function(t,e,n,r){var i=this.$target.scrollTop(),o=this.$element.offset(),s=this.$target.height();if(null!=n&&\"top\"==this.affixed)return i<n&&\"top\";if(\"bottom\"==this.affixed)return null!=n?!(i+this.unpin<=o.top)&&\"bottom\":!(i+s<=t-r)&&\"bottom\";var a=null==this.affixed,u=a?i:o.top;return null!=n&&i<=n?\"top\":null!=r&&u+(a?s:e)>=t-r&&\"bottom\"},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass(\"affix\");var t=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var n=this.$element.height(),r=this.options.offset,i=r.top,o=r.bottom,s=Math.max(t(document).height(),t(document.body).height());\"object\"!=typeof r&&(o=i=r),\"function\"==typeof i&&(i=r.top(this.$element)),\"function\"==typeof o&&(o=r.bottom(this.$element));var a=this.getState(s,n,i,o);if(this.affixed!=a){null!=this.unpin&&this.$element.css(\"top\",\"\");var u=\"affix\"+(a?\"-\"+a:\"\"),l=t.Event(u+\".bs.affix\");if(this.$element.trigger(l),l.isDefaultPrevented())return;this.affixed=a,this.unpin=\"bottom\"==a?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(u).trigger(u.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==a&&this.$element.offset({top:s-n-o})}};var r=t.fn.affix;t.fn.affix=n,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on(\"load\",(function(){t('[data-spy=\"affix\"]').each((function(){var e=t(this),r=e.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),n.call(e,r)}))}))}(jQuery)},755:function(t,e){var n;!function(e,n){\"use strict\";\"object\"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error(\"jQuery requires a window with a document\");return n(t)}:n(e)}(\"undefined\"!=typeof window?window:this,(function(r,i){\"use strict\";var o=[],s=Object.getPrototypeOf,a=o.slice,u=o.flat?function(t){return o.flat.call(t)}:function(t){return o.concat.apply([],t)},l=o.push,c=o.indexOf,f={},p=f.toString,h=f.hasOwnProperty,d=h.toString,g=d.call(Object),v={},m=function(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType&&\"function\"!=typeof t.item},y=function(t){return null!=t&&t===t.window},b=r.document,w={type:!0,src:!0,nonce:!0,noModule:!0};function _(t,e,n){var r,i,o=(n=n||b).createElement(\"script\");if(o.text=t,e)for(r in w)(i=e[r]||e.getAttribute&&e.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(t){return null==t?t+\"\":\"object\"==typeof t||\"function\"==typeof t?f[p.call(t)]||\"object\":typeof t}var T=\"3.6.4\",C=function(t,e){return new C.fn.init(t,e)};function A(t){var e=!!t&&\"length\"in t&&t.length,n=x(t);return!m(t)&&!y(t)&&(\"array\"===n||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}C.fn=C.prototype={jquery:T,constructor:C,length:0,toArray:function(){return a.call(this)},get:function(t){return null==t?a.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=C.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return C.each(this,t)},map:function(t){return this.pushStack(C.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(C.grep(this,(function(t,e){return(e+1)%2})))},odd:function(){return this.pushStack(C.grep(this,(function(t,e){return e%2})))},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n<e?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:l,sort:o.sort,splice:o.splice},C.extend=C.fn.extend=function(){var t,e,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for(\"boolean\"==typeof s&&(l=s,s=arguments[a]||{},a++),\"object\"==typeof s||m(s)||(s={}),a===u&&(s=this,a--);a<u;a++)if(null!=(t=arguments[a]))for(e in t)r=t[e],\"__proto__\"!==e&&s!==r&&(l&&r&&(C.isPlainObject(r)||(i=Array.isArray(r)))?(n=s[e],o=i&&!Array.isArray(n)?[]:i||C.isPlainObject(n)?n:{},i=!1,s[e]=C.extend(l,o,r)):void 0!==r&&(s[e]=r));return s},C.extend({expando:\"jQuery\"+(T+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isPlainObject:function(t){var e,n;return!(!t||\"[object Object]\"!==p.call(t))&&(!(e=s(t))||\"function\"==typeof(n=h.call(e,\"constructor\")&&e.constructor)&&d.call(n)===g)},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},globalEval:function(t,e,n){_(t,{nonce:e&&e.nonce},n)},each:function(t,e){var n,r=0;if(A(t))for(n=t.length;r<n&&!1!==e.call(t[r],r,t[r]);r++);else for(r in t)if(!1===e.call(t[r],r,t[r]))break;return t},makeArray:function(t,e){var n=e||[];return null!=t&&(A(Object(t))?C.merge(n,\"string\"==typeof t?[t]:t):l.call(n,t)),n},inArray:function(t,e,n){return null==e?-1:c.call(e,t,n)},merge:function(t,e){for(var n=+e.length,r=0,i=t.length;r<n;r++)t[i++]=e[r];return t.length=i,t},grep:function(t,e,n){for(var r=[],i=0,o=t.length,s=!n;i<o;i++)!e(t[i],i)!==s&&r.push(t[i]);return r},map:function(t,e,n){var r,i,o=0,s=[];if(A(t))for(r=t.length;o<r;o++)null!=(i=e(t[o],o,n))&&s.push(i);else for(o in t)null!=(i=e(t[o],o,n))&&s.push(i);return u(s)},guid:1,support:v}),\"function\"==typeof Symbol&&(C.fn[Symbol.iterator]=o[Symbol.iterator]),C.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),(function(t,e){f[\"[object \"+e+\"]\"]=e.toLowerCase()}));var S=function(t){var e,n,r,i,o,s,a,u,l,c,f,p,h,d,g,v,m,y,b,w=\"sizzle\"+1*new Date,_=t.document,x=0,T=0,C=ut(),A=ut(),S=ut(),$=ut(),E=function(t,e){return t===e&&(f=!0),0},k={}.hasOwnProperty,D=[],j=D.pop,O=D.push,N=D.push,R=D.slice,I=function(t,e){for(var n=0,r=t.length;n<r;n++)if(t[n]===e)return n;return-1},L=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",P=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",q=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+P+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",H=\"\\\\[\"+P+\"*(\"+q+\")(?:\"+P+\"*([*^$|!~]?=)\"+P+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+q+\"))|)\"+P+\"*\\\\]\",M=\":(\"+q+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+H+\")*)|.*)\\\\)|)\",U=new RegExp(P+\"+\",\"g\"),F=new RegExp(\"^\"+P+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+P+\"+$\",\"g\"),z=new RegExp(\"^\"+P+\"*,\"+P+\"*\"),B=new RegExp(\"^\"+P+\"*([>+~]|\"+P+\")\"+P+\"*\"),W=new RegExp(P+\"|>\"),G=new RegExp(M),V=new RegExp(\"^\"+q+\"$\"),K={ID:new RegExp(\"^#(\"+q+\")\"),CLASS:new RegExp(\"^\\\\.(\"+q+\")\"),TAG:new RegExp(\"^(\"+q+\"|[*])\"),ATTR:new RegExp(\"^\"+H),PSEUDO:new RegExp(\"^\"+M),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+P+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+P+\"*(?:([+-]|)\"+P+\"*(\\\\d+)|))\"+P+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+L+\")$\",\"i\"),needsContext:new RegExp(\"^\"+P+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+P+\"*((?:-\\\\d)?\\\\d*)\"+P+\"*\\\\)|)(?=[^-]|$)\",\"i\")},X=/HTML$/i,Y=/^(?:input|select|textarea|button)$/i,Q=/^h\\d$/i,J=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,tt=/[+~]/,et=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+P+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),nt=function(t,e){var n=\"0x\"+t.slice(1)-65536;return e||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},rt=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,it=function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},ot=function(){p()},st=wt((function(t){return!0===t.disabled&&\"fieldset\"===t.nodeName.toLowerCase()}),{dir:\"parentNode\",next:\"legend\"});try{N.apply(D=R.call(_.childNodes),_.childNodes),D[_.childNodes.length].nodeType}catch(t){N={apply:D.length?function(t,e){O.apply(t,R.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function at(t,e,r,i){var o,a,l,c,f,d,m,y=e&&e.ownerDocument,_=e?e.nodeType:9;if(r=r||[],\"string\"!=typeof t||!t||1!==_&&9!==_&&11!==_)return r;if(!i&&(p(e),e=e||h,g)){if(11!==_&&(f=Z.exec(t)))if(o=f[1]){if(9===_){if(!(l=e.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(y&&(l=y.getElementById(o))&&b(e,l)&&l.id===o)return r.push(l),r}else{if(f[2])return N.apply(r,e.getElementsByTagName(t)),r;if((o=f[3])&&n.getElementsByClassName&&e.getElementsByClassName)return N.apply(r,e.getElementsByClassName(o)),r}if(n.qsa&&!$[t+\" \"]&&(!v||!v.test(t))&&(1!==_||\"object\"!==e.nodeName.toLowerCase())){if(m=t,y=e,1===_&&(W.test(t)||B.test(t))){for((y=tt.test(t)&&mt(e.parentNode)||e)===e&&n.scope||((c=e.getAttribute(\"id\"))?c=c.replace(rt,it):e.setAttribute(\"id\",c=w)),a=(d=s(t)).length;a--;)d[a]=(c?\"#\"+c:\":scope\")+\" \"+bt(d[a]);m=d.join(\",\")}try{return N.apply(r,y.querySelectorAll(m)),r}catch(e){$(t,!0)}finally{c===w&&e.removeAttribute(\"id\")}}}return u(t.replace(F,\"$1\"),e,r,i)}function ut(){var t=[];return function e(n,i){return t.push(n+\" \")>r.cacheLength&&delete e[t.shift()],e[n+\" \"]=i}}function lt(t){return t[w]=!0,t}function ct(t){var e=h.createElement(\"fieldset\");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function ft(t,e){for(var n=t.split(\"|\"),i=n.length;i--;)r.attrHandle[n[i]]=e}function pt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ht(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function dt(t){return function(e){var n=e.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&e.type===t}}function gt(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&st(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function vt(t){return lt((function(e){return e=+e,lt((function(n,r){for(var i,o=t([],n.length,e),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))}))}))}function mt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=at.support={},o=at.isXML=function(t){var e=t&&t.namespaceURI,n=t&&(t.ownerDocument||t).documentElement;return!X.test(e||n&&n.nodeName||\"HTML\")},p=at.setDocument=function(t){var e,i,s=t?t.ownerDocument||t:_;return s!=h&&9===s.nodeType&&s.documentElement?(d=(h=s).documentElement,g=!o(h),_!=h&&(i=h.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",ot,!1):i.attachEvent&&i.attachEvent(\"onunload\",ot)),n.scope=ct((function(t){return d.appendChild(t).appendChild(h.createElement(\"div\")),void 0!==t.querySelectorAll&&!t.querySelectorAll(\":scope fieldset div\").length})),n.cssHas=ct((function(){try{return h.querySelector(\":has(*,:jqfake)\"),!1}catch(t){return!0}})),n.attributes=ct((function(t){return t.className=\"i\",!t.getAttribute(\"className\")})),n.getElementsByTagName=ct((function(t){return t.appendChild(h.createComment(\"\")),!t.getElementsByTagName(\"*\").length})),n.getElementsByClassName=J.test(h.getElementsByClassName),n.getById=ct((function(t){return d.appendChild(t).id=w,!h.getElementsByName||!h.getElementsByName(w).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){return t.getAttribute(\"id\")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode(\"id\");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if(\"*\"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&g)return e.getElementsByClassName(t)},m=[],v=[],(n.qsa=J.test(h.querySelectorAll))&&(ct((function(t){var e;d.appendChild(t).innerHTML=\"<a id='\"+w+\"'></a><select id='\"+w+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",t.querySelectorAll(\"[msallowcapture^='']\").length&&v.push(\"[*^$]=\"+P+\"*(?:''|\\\"\\\")\"),t.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[\"+P+\"*(?:value|\"+L+\")\"),t.querySelectorAll(\"[id~=\"+w+\"-]\").length||v.push(\"~=\"),(e=h.createElement(\"input\")).setAttribute(\"name\",\"\"),t.appendChild(e),t.querySelectorAll(\"[name='']\").length||v.push(\"\\\\[\"+P+\"*name\"+P+\"*=\"+P+\"*(?:''|\\\"\\\")\"),t.querySelectorAll(\":checked\").length||v.push(\":checked\"),t.querySelectorAll(\"a#\"+w+\"+*\").length||v.push(\".#.+[+~]\"),t.querySelectorAll(\"\\\\\\f\"),v.push(\"[\\\\r\\\\n\\\\f]\")})),ct((function(t){t.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var e=h.createElement(\"input\");e.setAttribute(\"type\",\"hidden\"),t.appendChild(e).setAttribute(\"name\",\"D\"),t.querySelectorAll(\"[name=d]\").length&&v.push(\"name\"+P+\"*[*^$|!~]?=\"),2!==t.querySelectorAll(\":enabled\").length&&v.push(\":enabled\",\":disabled\"),d.appendChild(t).disabled=!0,2!==t.querySelectorAll(\":disabled\").length&&v.push(\":enabled\",\":disabled\"),t.querySelectorAll(\"*,:x\"),v.push(\",.*:\")}))),(n.matchesSelector=J.test(y=d.matches||d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct((function(t){n.disconnectedMatch=y.call(t,\"*\"),y.call(t,\"[s!='']:x\"),m.push(\"!=\",M)})),n.cssHas||v.push(\":has\"),v=v.length&&new RegExp(v.join(\"|\")),m=m.length&&new RegExp(m.join(\"|\")),e=J.test(d.compareDocumentPosition),b=e||J.test(d.contains)?function(t,e){var n=9===t.nodeType&&t.documentElement||t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},E=e?function(t,e){if(t===e)return f=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t==h||t.ownerDocument==_&&b(_,t)?-1:e==h||e.ownerDocument==_&&b(_,e)?1:c?I(c,t)-I(c,e):0:4&r?-1:1)}:function(t,e){if(t===e)return f=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,s=[t],a=[e];if(!i||!o)return t==h?-1:e==h?1:i?-1:o?1:c?I(c,t)-I(c,e):0;if(i===o)return pt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?pt(s[r],a[r]):s[r]==_?-1:a[r]==_?1:0},h):h},at.matches=function(t,e){return at(t,null,null,e)},at.matchesSelector=function(t,e){if(p(t),n.matchesSelector&&g&&!$[e+\" \"]&&(!m||!m.test(e))&&(!v||!v.test(e)))try{var r=y.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){$(e,!0)}return at(e,h,null,[t]).length>0},at.contains=function(t,e){return(t.ownerDocument||t)!=h&&p(t),b(t,e)},at.attr=function(t,e){(t.ownerDocument||t)!=h&&p(t);var i=r.attrHandle[e.toLowerCase()],o=i&&k.call(r.attrHandle,e.toLowerCase())?i(t,e,!g):void 0;return void 0!==o?o:n.attributes||!g?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},at.escape=function(t){return(t+\"\").replace(rt,it)},at.error=function(t){throw new Error(\"Syntax error, unrecognized expression: \"+t)},at.uniqueSort=function(t){var e,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&t.slice(0),t.sort(E),f){for(;e=t[o++];)e===t[o]&&(i=r.push(o));for(;i--;)t.splice(r[i],1)}return c=null,t},i=at.getText=function(t){var e,n=\"\",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=i(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=i(e);return n},r=at.selectors={cacheLength:50,createPseudo:lt,match:K,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(et,nt),t[3]=(t[3]||t[4]||t[5]||\"\").replace(et,nt),\"~=\"===t[2]&&(t[3]=\" \"+t[3]+\" \"),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),\"nth\"===t[1].slice(0,3)?(t[3]||at.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*(\"even\"===t[3]||\"odd\"===t[3])),t[5]=+(t[7]+t[8]||\"odd\"===t[3])):t[3]&&at.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return K.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||\"\":n&&G.test(n)&&(e=s(n,!0))&&(e=n.indexOf(\")\",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(et,nt).toLowerCase();return\"*\"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=C[t+\" \"];return e||(e=new RegExp(\"(^|\"+P+\")\"+t+\"(\"+P+\"|$)\"))&&C(t,(function(t){return e.test(\"string\"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute(\"class\")||\"\")}))},ATTR:function(t,e,n){return function(r){var i=at.attr(r,t);return null==i?\"!=\"===e:!e||(i+=\"\",\"=\"===e?i===n:\"!=\"===e?i!==n:\"^=\"===e?n&&0===i.indexOf(n):\"*=\"===e?n&&i.indexOf(n)>-1:\"$=\"===e?n&&i.slice(-n.length)===n:\"~=\"===e?(\" \"+i.replace(U,\" \")+\" \").indexOf(n)>-1:\"|=\"===e&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(t,e,n,r,i){var o=\"nth\"!==t.slice(0,3),s=\"last\"!==t.slice(-4),a=\"of-type\"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,u){var l,c,f,p,h,d,g=o!==s?\"nextSibling\":\"previousSibling\",v=e.parentNode,m=a&&e.nodeName.toLowerCase(),y=!u&&!a,b=!1;if(v){if(o){for(;g;){for(p=e;p=p[g];)if(a?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;d=g=\"only\"===t&&!d&&\"nextSibling\"}return!0}if(d=[s?v.firstChild:v.lastChild],s&&y){for(b=(h=(l=(c=(f=(p=v)[w]||(p[w]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]||[])[0]===x&&l[1])&&l[2],p=h&&v.childNodes[h];p=++h&&p&&p[g]||(b=h=0)||d.pop();)if(1===p.nodeType&&++b&&p===e){c[t]=[x,h,b];break}}else if(y&&(b=h=(l=(c=(f=(p=e)[w]||(p[w]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]||[])[0]===x&&l[1]),!1===b)for(;(p=++h&&p&&p[g]||(b=h=0)||d.pop())&&((a?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++b||(y&&((c=(f=p[w]||(p[w]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]=[x,b]),p!==e)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(t,e){var n,i=r.pseudos[t]||r.setFilters[t.toLowerCase()]||at.error(\"unsupported pseudo: \"+t);return i[w]?i(e):i.length>1?(n=[t,t,\"\",e],r.setFilters.hasOwnProperty(t.toLowerCase())?lt((function(t,n){for(var r,o=i(t,e),s=o.length;s--;)t[r=I(t,o[s])]=!(n[r]=o[s])})):function(t){return i(t,0,n)}):i}},pseudos:{not:lt((function(t){var e=[],n=[],r=a(t.replace(F,\"$1\"));return r[w]?lt((function(t,e,n,i){for(var o,s=r(t,null,i,[]),a=t.length;a--;)(o=s[a])&&(t[a]=!(e[a]=o))})):function(t,i,o){return e[0]=t,r(e,null,o,n),e[0]=null,!n.pop()}})),has:lt((function(t){return function(e){return at(t,e).length>0}})),contains:lt((function(t){return t=t.replace(et,nt),function(e){return(e.textContent||i(e)).indexOf(t)>-1}})),lang:lt((function(t){return V.test(t||\"\")||at.error(\"unsupported lang: \"+t),t=t.replace(et,nt).toLowerCase(),function(e){var n;do{if(n=g?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(n=n.toLowerCase())===t||0===n.indexOf(t+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===d},focus:function(t){return t===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:gt(!1),disabled:gt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&!!t.checked||\"option\"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return Q.test(t.nodeName)},input:function(t){return Y.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&\"button\"===t.type||\"button\"===e},text:function(t){var e;return\"input\"===t.nodeName.toLowerCase()&&\"text\"===t.type&&(null==(e=t.getAttribute(\"type\"))||\"text\"===e.toLowerCase())},first:vt((function(){return[0]})),last:vt((function(t,e){return[e-1]})),eq:vt((function(t,e,n){return[n<0?n+e:n]})),even:vt((function(t,e){for(var n=0;n<e;n+=2)t.push(n);return t})),odd:vt((function(t,e){for(var n=1;n<e;n+=2)t.push(n);return t})),lt:vt((function(t,e,n){for(var r=n<0?n+e:n>e?e:n;--r>=0;)t.push(r);return t})),gt:vt((function(t,e,n){for(var r=n<0?n+e:n;++r<e;)t.push(r);return t}))}},r.pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[e]=ht(e);for(e in{submit:!0,reset:!0})r.pseudos[e]=dt(e);function yt(){}function bt(t){for(var e=0,n=t.length,r=\"\";e<n;e++)r+=t[e].value;return r}function wt(t,e,n){var r=e.dir,i=e.next,o=i||r,s=n&&\"parentNode\"===o,a=T++;return e.first?function(e,n,i){for(;e=e[r];)if(1===e.nodeType||s)return t(e,n,i);return!1}:function(e,n,u){var l,c,f,p=[x,a];if(u){for(;e=e[r];)if((1===e.nodeType||s)&&t(e,n,u))return!0}else for(;e=e[r];)if(1===e.nodeType||s)if(c=(f=e[w]||(e[w]={}))[e.uniqueID]||(f[e.uniqueID]={}),i&&i===e.nodeName.toLowerCase())e=e[r]||e;else{if((l=c[o])&&l[0]===x&&l[1]===a)return p[2]=l[2];if(c[o]=p,p[2]=t(e,n,u))return!0}return!1}}function _t(t){return t.length>1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function xt(t,e,n,r,i){for(var o,s=[],a=0,u=t.length,l=null!=e;a<u;a++)(o=t[a])&&(n&&!n(o,r,i)||(s.push(o),l&&e.push(a)));return s}function Tt(t,e,n,r,i,o){return r&&!r[w]&&(r=Tt(r)),i&&!i[w]&&(i=Tt(i,o)),lt((function(o,s,a,u){var l,c,f,p=[],h=[],d=s.length,g=o||function(t,e,n){for(var r=0,i=e.length;r<i;r++)at(t,e[r],n);return n}(e||\"*\",a.nodeType?[a]:a,[]),v=!t||!o&&e?g:xt(g,p,t,a,u),m=n?i||(o?t:d||r)?[]:s:v;if(n&&n(v,m,a,u),r)for(l=xt(m,h),r(l,[],a,u),c=l.length;c--;)(f=l[c])&&(m[h[c]]=!(v[h[c]]=f));if(o){if(i||t){if(i){for(l=[],c=m.length;c--;)(f=m[c])&&l.push(v[c]=f);i(null,m=[],l,u)}for(c=m.length;c--;)(f=m[c])&&(l=i?I(o,f):p[c])>-1&&(o[l]=!(s[l]=f))}}else m=xt(m===s?m.splice(d,m.length):m),i?i(null,s,m,u):N.apply(s,m)}))}function Ct(t){for(var e,n,i,o=t.length,s=r.relative[t[0].type],a=s||r.relative[\" \"],u=s?1:0,c=wt((function(t){return t===e}),a,!0),f=wt((function(t){return I(e,t)>-1}),a,!0),p=[function(t,n,r){var i=!s&&(r||n!==l)||((e=n).nodeType?c(t,n,r):f(t,n,r));return e=null,i}];u<o;u++)if(n=r.relative[t[u].type])p=[wt(_t(p),n)];else{if((n=r.filter[t[u].type].apply(null,t[u].matches))[w]){for(i=++u;i<o&&!r.relative[t[i].type];i++);return Tt(u>1&&_t(p),u>1&&bt(t.slice(0,u-1).concat({value:\" \"===t[u-2].type?\"*\":\"\"})).replace(F,\"$1\"),n,u<i&&Ct(t.slice(u,i)),i<o&&Ct(t=t.slice(i)),i<o&&bt(t))}p.push(n)}return _t(p)}return yt.prototype=r.filters=r.pseudos,r.setFilters=new yt,s=at.tokenize=function(t,e){var n,i,o,s,a,u,l,c=A[t+\" \"];if(c)return e?0:c.slice(0);for(a=t,u=[],l=r.preFilter;a;){for(s in n&&!(i=z.exec(a))||(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),n=!1,(i=B.exec(a))&&(n=i.shift(),o.push({value:n,type:i[0].replace(F,\" \")}),a=a.slice(n.length)),r.filter)!(i=K[s].exec(a))||l[s]&&!(i=l[s](i))||(n=i.shift(),o.push({value:n,type:s,matches:i}),a=a.slice(n.length));if(!n)break}return e?a.length:a?at.error(t):A(t,u).slice(0)},a=at.compile=function(t,e){var n,i=[],o=[],a=S[t+\" \"];if(!a){for(e||(e=s(t)),n=e.length;n--;)(a=Ct(e[n]))[w]?i.push(a):o.push(a);a=S(t,function(t,e){var n=e.length>0,i=t.length>0,o=function(o,s,a,u,c){var f,d,v,m=0,y=\"0\",b=o&&[],w=[],_=l,T=o||i&&r.find.TAG(\"*\",c),C=x+=null==_?1:Math.random()||.1,A=T.length;for(c&&(l=s==h||s||c);y!==A&&null!=(f=T[y]);y++){if(i&&f){for(d=0,s||f.ownerDocument==h||(p(f),a=!g);v=t[d++];)if(v(f,s||h,a)){u.push(f);break}c&&(x=C)}n&&((f=!v&&f)&&m--,o&&b.push(f))}if(m+=y,n&&y!==m){for(d=0;v=e[d++];)v(b,w,s,a);if(o){if(m>0)for(;y--;)b[y]||w[y]||(w[y]=j.call(u));w=xt(w)}N.apply(u,w),c&&!o&&w.length>0&&m+e.length>1&&at.uniqueSort(u)}return c&&(x=C,l=_),b};return n?lt(o):o}(o,i)),a.selector=t}return a},u=at.select=function(t,e,n,i){var o,u,l,c,f,p=\"function\"==typeof t&&t,h=!i&&s(t=p.selector||t);if(n=n||[],1===h.length){if((u=h[0]=h[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===e.nodeType&&g&&r.relative[u[1].type]){if(!(e=(r.find.ID(l.matches[0].replace(et,nt),e)||[])[0]))return n;p&&(e=e.parentNode),t=t.slice(u.shift().value.length)}for(o=K.needsContext.test(t)?0:u.length;o--&&(l=u[o],!r.relative[c=l.type]);)if((f=r.find[c])&&(i=f(l.matches[0].replace(et,nt),tt.test(u[0].type)&&mt(e.parentNode)||e))){if(u.splice(o,1),!(t=i.length&&bt(u)))return N.apply(n,i),n;break}}return(p||a(t,h))(i,e,!g,n,!e||tt.test(t)&&mt(e.parentNode)||e),n},n.sortStable=w.split(\"\").sort(E).join(\"\")===w,n.detectDuplicates=!!f,p(),n.sortDetached=ct((function(t){return 1&t.compareDocumentPosition(h.createElement(\"fieldset\"))})),ct((function(t){return t.innerHTML=\"<a href='#'></a>\",\"#\"===t.firstChild.getAttribute(\"href\")}))||ft(\"type|href|height|width\",(function(t,e,n){if(!n)return t.getAttribute(e,\"type\"===e.toLowerCase()?1:2)})),n.attributes&&ct((function(t){return t.innerHTML=\"<input/>\",t.firstChild.setAttribute(\"value\",\"\"),\"\"===t.firstChild.getAttribute(\"value\")}))||ft(\"value\",(function(t,e,n){if(!n&&\"input\"===t.nodeName.toLowerCase())return t.defaultValue})),ct((function(t){return null==t.getAttribute(\"disabled\")}))||ft(L,(function(t,e,n){var r;if(!n)return!0===t[e]?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null})),at}(r);C.find=S,C.expr=S.selectors,C.expr[\":\"]=C.expr.pseudos,C.uniqueSort=C.unique=S.uniqueSort,C.text=S.getText,C.isXMLDoc=S.isXML,C.contains=S.contains,C.escapeSelector=S.escape;var $=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&C(t).is(n))break;r.push(t)}return r},E=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},k=C.expr.match.needsContext;function D(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var j=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function O(t,e,n){return m(e)?C.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?C.grep(t,(function(t){return t===e!==n})):\"string\"!=typeof e?C.grep(t,(function(t){return c.call(e,t)>-1!==n})):C.filter(e,t,n)}C.filter=function(t,e,n){var r=e[0];return n&&(t=\":not(\"+t+\")\"),1===e.length&&1===r.nodeType?C.find.matchesSelector(r,t)?[r]:[]:C.find.matches(t,C.grep(e,(function(t){return 1===t.nodeType})))},C.fn.extend({find:function(t){var e,n,r=this.length,i=this;if(\"string\"!=typeof t)return this.pushStack(C(t).filter((function(){for(e=0;e<r;e++)if(C.contains(i[e],this))return!0})));for(n=this.pushStack([]),e=0;e<r;e++)C.find(t,i[e],n);return r>1?C.uniqueSort(n):n},filter:function(t){return this.pushStack(O(this,t||[],!1))},not:function(t){return this.pushStack(O(this,t||[],!0))},is:function(t){return!!O(this,\"string\"==typeof t&&k.test(t)?C(t):t||[],!1).length}});var N,R=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(C.fn.init=function(t,e,n){var r,i;if(!t)return this;if(n=n||N,\"string\"==typeof t){if(!(r=\"<\"===t[0]&&\">\"===t[t.length-1]&&t.length>=3?[null,t,null]:R.exec(t))||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof C?e[0]:e,C.merge(this,C.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:b,!0)),j.test(r[1])&&C.isPlainObject(e))for(r in e)m(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return(i=b.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):m(t)?void 0!==n.ready?n.ready(t):t(C):C.makeArray(t,this)}).prototype=C.fn,N=C(b);var I=/^(?:parents|prev(?:Until|All))/,L={children:!0,contents:!0,next:!0,prev:!0};function P(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}C.fn.extend({has:function(t){var e=C(t,this),n=e.length;return this.filter((function(){for(var t=0;t<n;t++)if(C.contains(this,e[t]))return!0}))},closest:function(t,e){var n,r=0,i=this.length,o=[],s=\"string\"!=typeof t&&C(t);if(!k.test(t))for(;r<i;r++)for(n=this[r];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&C.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?C.uniqueSort(o):o)},index:function(t){return t?\"string\"==typeof t?c.call(C(t),this[0]):c.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(C.uniqueSort(C.merge(this.get(),C(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),C.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return $(t,\"parentNode\")},parentsUntil:function(t,e,n){return $(t,\"parentNode\",n)},next:function(t){return P(t,\"nextSibling\")},prev:function(t){return P(t,\"previousSibling\")},nextAll:function(t){return $(t,\"nextSibling\")},prevAll:function(t){return $(t,\"previousSibling\")},nextUntil:function(t,e,n){return $(t,\"nextSibling\",n)},prevUntil:function(t,e,n){return $(t,\"previousSibling\",n)},siblings:function(t){return E((t.parentNode||{}).firstChild,t)},children:function(t){return E(t.firstChild)},contents:function(t){return null!=t.contentDocument&&s(t.contentDocument)?t.contentDocument:(D(t,\"template\")&&(t=t.content||t),C.merge([],t.childNodes))}},(function(t,e){C.fn[t]=function(n,r){var i=C.map(this,e,n);return\"Until\"!==t.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=C.filter(r,i)),this.length>1&&(L[t]||C.uniqueSort(i),I.test(t)&&i.reverse()),this.pushStack(i)}}));var q=/[^\\x20\\t\\r\\n\\f]+/g;function H(t){return t}function M(t){throw t}function U(t,e,n,r){var i;try{t&&m(i=t.promise)?i.call(t).done(e).fail(n):t&&m(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}C.Callbacks=function(t){t=\"string\"==typeof t?function(t){var e={};return C.each(t.match(q)||[],(function(t,n){e[n]=!0})),e}(t):C.extend({},t);var e,n,r,i,o=[],s=[],a=-1,u=function(){for(i=i||t.once,r=e=!0;s.length;a=-1)for(n=s.shift();++a<o.length;)!1===o[a].apply(n[0],n[1])&&t.stopOnFalse&&(a=o.length,n=!1);t.memory||(n=!1),e=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!e&&(a=o.length-1,s.push(n)),function e(n){C.each(n,(function(n,r){m(r)?t.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==x(r)&&e(r)}))}(arguments),n&&!e&&u()),this},remove:function(){return C.each(arguments,(function(t,e){for(var n;(n=C.inArray(e,o,n))>-1;)o.splice(n,1),n<=a&&a--})),this},has:function(t){return t?C.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||e||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},C.extend({Deferred:function(t){var e=[[\"notify\",\"progress\",C.Callbacks(\"memory\"),C.Callbacks(\"memory\"),2],[\"resolve\",\"done\",C.Callbacks(\"once memory\"),C.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",C.Callbacks(\"once memory\"),C.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return i.then(null,t)},pipe:function(){var t=arguments;return C.Deferred((function(n){C.each(e,(function(e,r){var i=m(t[r[4]])&&t[r[4]];o[r[1]]((function(){var t=i&&i.apply(this,arguments);t&&m(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,i?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,i){var o=0;function s(t,e,n,i){return function(){var a=this,u=arguments,l=function(){var r,l;if(!(t<o)){if((r=n.apply(a,u))===e.promise())throw new TypeError(\"Thenable self-resolution\");l=r&&(\"object\"==typeof r||\"function\"==typeof r)&&r.then,m(l)?i?l.call(r,s(o,e,H,i),s(o,e,M,i)):(o++,l.call(r,s(o,e,H,i),s(o,e,M,i),s(o,e,H,e.notifyWith))):(n!==H&&(a=void 0,u=[r]),(i||e.resolveWith)(a,u))}},c=i?l:function(){try{l()}catch(r){C.Deferred.exceptionHook&&C.Deferred.exceptionHook(r,c.stackTrace),t+1>=o&&(n!==M&&(a=void 0,u=[r]),e.rejectWith(a,u))}};t?c():(C.Deferred.getStackHook&&(c.stackTrace=C.Deferred.getStackHook()),r.setTimeout(c))}}return C.Deferred((function(r){e[0][3].add(s(0,r,m(i)?i:H,r.notifyWith)),e[1][3].add(s(0,r,m(t)?t:H)),e[2][3].add(s(0,r,m(n)?n:M))})).promise()},promise:function(t){return null!=t?C.extend(t,i):i}},o={};return C.each(e,(function(t,r){var s=r[2],a=r[5];i[r[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(r[3].fire),o[r[0]]=function(){return o[r[0]+\"With\"](this===o?void 0:this,arguments),this},o[r[0]+\"With\"]=s.fireWith})),i.promise(o),t&&t.call(o,o),o},when:function(t){var e=arguments.length,n=e,r=Array(n),i=a.call(arguments),o=C.Deferred(),s=function(t){return function(n){r[t]=this,i[t]=arguments.length>1?a.call(arguments):n,--e||o.resolveWith(r,i)}};if(e<=1&&(U(t,o.done(s(n)).resolve,o.reject,!e),\"pending\"===o.state()||m(i[n]&&i[n].then)))return o.then();for(;n--;)U(i[n],s(n),o.reject);return o.promise()}});var F=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;C.Deferred.exceptionHook=function(t,e){r.console&&r.console.warn&&t&&F.test(t.name)&&r.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,e)},C.readyException=function(t){r.setTimeout((function(){throw t}))};var z=C.Deferred();function B(){b.removeEventListener(\"DOMContentLoaded\",B),r.removeEventListener(\"load\",B),C.ready()}C.fn.ready=function(t){return z.then(t).catch((function(t){C.readyException(t)})),this},C.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--C.readyWait:C.isReady)||(C.isReady=!0,!0!==t&&--C.readyWait>0||z.resolveWith(b,[C]))}}),C.ready.then=z.then,\"complete\"===b.readyState||\"loading\"!==b.readyState&&!b.documentElement.doScroll?r.setTimeout(C.ready):(b.addEventListener(\"DOMContentLoaded\",B),r.addEventListener(\"load\",B));var W=function(t,e,n,r,i,o,s){var a=0,u=t.length,l=null==n;if(\"object\"===x(n))for(a in i=!0,n)W(t,e,a,n[a],!0,o,s);else if(void 0!==r&&(i=!0,m(r)||(s=!0),l&&(s?(e.call(t,r),e=null):(l=e,e=function(t,e,n){return l.call(C(t),n)})),e))for(;a<u;a++)e(t[a],n,s?r:r.call(t[a],a,e(t[a],n)));return i?t:l?e.call(t):u?e(t[0],n):o},G=/^-ms-/,V=/-([a-z])/g;function K(t,e){return e.toUpperCase()}function X(t){return t.replace(G,\"ms-\").replace(V,K)}var Y=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType};function Q(){this.expando=C.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(t){var e=t[this.expando];return e||(e={},Y(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,n){var r,i=this.cache(t);if(\"string\"==typeof e)i[X(e)]=n;else for(r in e)i[X(r)]=e[r];return i},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][X(e)]},access:function(t,e,n){return void 0===e||e&&\"string\"==typeof e&&void 0===n?this.get(t,e):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,r=t[this.expando];if(void 0!==r){if(void 0!==e){n=(e=Array.isArray(e)?e.map(X):(e=X(e))in r?[e]:e.match(q)||[]).length;for(;n--;)delete r[e[n]]}(void 0===e||C.isEmptyObject(r))&&(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&&!C.isEmptyObject(e)}};var J=new Q,Z=new Q,tt=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,et=/[A-Z]/g;function nt(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r=\"data-\"+e.replace(et,\"-$&\").toLowerCase(),\"string\"==typeof(n=t.getAttribute(r))){try{n=function(t){return\"true\"===t||\"false\"!==t&&(\"null\"===t?null:t===+t+\"\"?+t:tt.test(t)?JSON.parse(t):t)}(n)}catch(t){}Z.set(t,e,n)}else n=void 0;return n}C.extend({hasData:function(t){return Z.hasData(t)||J.hasData(t)},data:function(t,e,n){return Z.access(t,e,n)},removeData:function(t,e){Z.remove(t,e)},_data:function(t,e,n){return J.access(t,e,n)},_removeData:function(t,e){J.remove(t,e)}}),C.fn.extend({data:function(t,e){var n,r,i,o=this[0],s=o&&o.attributes;if(void 0===t){if(this.length&&(i=Z.get(o),1===o.nodeType&&!J.get(o,\"hasDataAttrs\"))){for(n=s.length;n--;)s[n]&&0===(r=s[n].name).indexOf(\"data-\")&&(r=X(r.slice(5)),nt(o,r,i[r]));J.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof t?this.each((function(){Z.set(this,t)})):W(this,(function(e){var n;if(o&&void 0===e)return void 0!==(n=Z.get(o,t))||void 0!==(n=nt(o,t))?n:void 0;this.each((function(){Z.set(this,t,e)}))}),null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each((function(){Z.remove(this,t)}))}}),C.extend({queue:function(t,e,n){var r;if(t)return e=(e||\"fx\")+\"queue\",r=J.get(t,e),n&&(!r||Array.isArray(n)?r=J.access(t,e,C.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||\"fx\";var n=C.queue(t,e),r=n.length,i=n.shift(),o=C._queueHooks(t,e);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===e&&n.unshift(\"inprogress\"),delete o.stop,i.call(t,(function(){C.dequeue(t,e)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+\"queueHooks\";return J.get(t,n)||J.access(t,n,{empty:C.Callbacks(\"once memory\").add((function(){J.remove(t,[e+\"queue\",n])}))})}}),C.fn.extend({queue:function(t,e){var n=2;return\"string\"!=typeof t&&(e=t,t=\"fx\",n--),arguments.length<n?C.queue(this[0],t):void 0===e?this:this.each((function(){var n=C.queue(this,t,e);C._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==n[0]&&C.dequeue(this,t)}))},dequeue:function(t){return this.each((function(){C.dequeue(this,t)}))},clearQueue:function(t){return this.queue(t||\"fx\",[])},promise:function(t,e){var n,r=1,i=C.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof t&&(e=t,t=void 0),t=t||\"fx\";s--;)(n=J.get(o[s],t+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(e)}});var rt=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,it=new RegExp(\"^(?:([+-])=|)(\"+rt+\")([a-z%]*)$\",\"i\"),ot=[\"Top\",\"Right\",\"Bottom\",\"Left\"],st=b.documentElement,at=function(t){return C.contains(t.ownerDocument,t)},ut={composed:!0};st.getRootNode&&(at=function(t){return C.contains(t.ownerDocument,t)||t.getRootNode(ut)===t.ownerDocument});var lt=function(t,e){return\"none\"===(t=e||t).style.display||\"\"===t.style.display&&at(t)&&\"none\"===C.css(t,\"display\")};function ct(t,e,n,r){var i,o,s=20,a=r?function(){return r.cur()}:function(){return C.css(t,e,\"\")},u=a(),l=n&&n[3]||(C.cssNumber[e]?\"\":\"px\"),c=t.nodeType&&(C.cssNumber[e]||\"px\"!==l&&+u)&&it.exec(C.css(t,e));if(c&&c[3]!==l){for(u/=2,l=l||c[3],c=+u||1;s--;)C.style(t,e,c+l),(1-o)*(1-(o=a()/u||.5))<=0&&(s=0),c/=o;c*=2,C.style(t,e,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ft={};function pt(t){var e,n=t.ownerDocument,r=t.nodeName,i=ft[r];return i||(e=n.body.appendChild(n.createElement(r)),i=C.css(e,\"display\"),e.parentNode.removeChild(e),\"none\"===i&&(i=\"block\"),ft[r]=i,i)}function ht(t,e){for(var n,r,i=[],o=0,s=t.length;o<s;o++)(r=t[o]).style&&(n=r.style.display,e?(\"none\"===n&&(i[o]=J.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&lt(r)&&(i[o]=pt(r))):\"none\"!==n&&(i[o]=\"none\",J.set(r,\"display\",n)));for(o=0;o<s;o++)null!=i[o]&&(t[o].style.display=i[o]);return t}C.fn.extend({show:function(){return ht(this,!0)},hide:function(){return ht(this)},toggle:function(t){return\"boolean\"==typeof t?t?this.show():this.hide():this.each((function(){lt(this)?C(this).show():C(this).hide()}))}});var dt,gt,vt=/^(?:checkbox|radio)$/i,mt=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,yt=/^$|^module$|\\/(?:java|ecma)script/i;dt=b.createDocumentFragment().appendChild(b.createElement(\"div\")),(gt=b.createElement(\"input\")).setAttribute(\"type\",\"radio\"),gt.setAttribute(\"checked\",\"checked\"),gt.setAttribute(\"name\",\"t\"),dt.appendChild(gt),v.checkClone=dt.cloneNode(!0).cloneNode(!0).lastChild.checked,dt.innerHTML=\"<textarea>x</textarea>\",v.noCloneChecked=!!dt.cloneNode(!0).lastChild.defaultValue,dt.innerHTML=\"<option></option>\",v.option=!!dt.lastChild;var bt={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function wt(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||\"*\"):void 0!==t.querySelectorAll?t.querySelectorAll(e||\"*\"):[],void 0===e||e&&D(t,e)?C.merge([t],n):n}function _t(t,e){for(var n=0,r=t.length;n<r;n++)J.set(t[n],\"globalEval\",!e||J.get(e[n],\"globalEval\"))}bt.tbody=bt.tfoot=bt.colgroup=bt.caption=bt.thead,bt.th=bt.td,v.option||(bt.optgroup=bt.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var xt=/<|&#?\\w+;/;function Tt(t,e,n,r,i){for(var o,s,a,u,l,c,f=e.createDocumentFragment(),p=[],h=0,d=t.length;h<d;h++)if((o=t[h])||0===o)if(\"object\"===x(o))C.merge(p,o.nodeType?[o]:o);else if(xt.test(o)){for(s=s||f.appendChild(e.createElement(\"div\")),a=(mt.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=bt[a]||bt._default,s.innerHTML=u[1]+C.htmlPrefilter(o)+u[2],c=u[0];c--;)s=s.lastChild;C.merge(p,s.childNodes),(s=f.firstChild).textContent=\"\"}else p.push(e.createTextNode(o));for(f.textContent=\"\",h=0;o=p[h++];)if(r&&C.inArray(o,r)>-1)i&&i.push(o);else if(l=at(o),s=wt(f.appendChild(o),\"script\"),l&&_t(s),n)for(c=0;o=s[c++];)yt.test(o.type||\"\")&&n.push(o);return f}var Ct=/^([^.]*)(?:\\.(.+)|)/;function At(){return!0}function St(){return!1}function $t(t,e){return t===function(){try{return b.activeElement}catch(t){}}()==(\"focus\"===e)}function Et(t,e,n,r,i,o){var s,a;if(\"object\"==typeof e){for(a in\"string\"!=typeof n&&(r=r||n,n=void 0),e)Et(t,a,n,r,e[a],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=St;else if(!i)return t;return 1===o&&(s=i,i=function(t){return C().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=C.guid++)),t.each((function(){C.event.add(this,e,i,r,n)}))}function kt(t,e,n){n?(J.set(t,e,!1),C.event.add(t,e,{namespace:!1,handler:function(t){var r,i,o=J.get(this,e);if(1&t.isTrigger&&this[e]){if(o.length)(C.event.special[e]||{}).delegateType&&t.stopPropagation();else if(o=a.call(arguments),J.set(this,e,o),r=n(this,e),this[e](),o!==(i=J.get(this,e))||r?J.set(this,e,!1):i={},o!==i)return t.stopImmediatePropagation(),t.preventDefault(),i&&i.value}else o.length&&(J.set(this,e,{value:C.event.trigger(C.extend(o[0],C.Event.prototype),o.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===J.get(t,e)&&C.event.add(t,e,At)}C.event={global:{},add:function(t,e,n,r,i){var o,s,a,u,l,c,f,p,h,d,g,v=J.get(t);if(Y(t))for(n.handler&&(n=(o=n).handler,i=o.selector),i&&C.find.matchesSelector(st,i),n.guid||(n.guid=C.guid++),(u=v.events)||(u=v.events=Object.create(null)),(s=v.handle)||(s=v.handle=function(e){return void 0!==C&&C.event.triggered!==e.type?C.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(q)||[\"\"]).length;l--;)h=g=(a=Ct.exec(e[l])||[])[1],d=(a[2]||\"\").split(\".\").sort(),h&&(f=C.event.special[h]||{},h=(i?f.delegateType:f.bindType)||h,f=C.event.special[h]||{},c=C.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&C.expr.match.needsContext.test(i),namespace:d.join(\".\")},o),(p=u[h])||((p=u[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,d,s)||t.addEventListener&&t.addEventListener(h,s)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),C.event.global[h]=!0)},remove:function(t,e,n,r,i){var o,s,a,u,l,c,f,p,h,d,g,v=J.hasData(t)&&J.get(t);if(v&&(u=v.events)){for(l=(e=(e||\"\").match(q)||[\"\"]).length;l--;)if(h=g=(a=Ct.exec(e[l])||[])[1],d=(a[2]||\"\").split(\".\").sort(),h){for(f=C.event.special[h]||{},p=u[h=(r?f.delegateType:f.bindType)||h]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(t,c));s&&!p.length&&(f.teardown&&!1!==f.teardown.call(t,d,v.handle)||C.removeEvent(t,h,v.handle),delete u[h])}else for(h in u)C.event.remove(t,h+e[l],n,r,!0);C.isEmptyObject(u)&&J.remove(t,\"handle events\")}},dispatch:function(t){var e,n,r,i,o,s,a=new Array(arguments.length),u=C.event.fix(t),l=(J.get(this,\"events\")||Object.create(null))[u.type]||[],c=C.event.special[u.type]||{};for(a[0]=u,e=1;e<arguments.length;e++)a[e]=arguments[e];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){for(s=C.event.handlers.call(this,u,l),e=0;(i=s[e++])&&!u.isPropagationStopped();)for(u.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!u.isImmediatePropagationStopped();)u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((C.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(t,e){var n,r,i,o,s,a=[],u=e.delegateCount,l=t.target;if(u&&l.nodeType&&!(\"click\"===t.type&&t.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==t.type||!0!==l.disabled)){for(o=[],s={},n=0;n<u;n++)void 0===s[i=(r=e[n]).selector+\" \"]&&(s[i]=r.needsContext?C(i,this).index(l)>-1:C.find(i,this,null,[l]).length),s[i]&&o.push(r);o.length&&a.push({elem:l,handlers:o})}return l=this,u<e.length&&a.push({elem:l,handlers:e.slice(u)}),a},addProp:function(t,e){Object.defineProperty(C.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(t){return t[C.expando]?t:new C.Event(t)},special:{load:{noBubble:!0},click:{setup:function(t){var e=this||t;return vt.test(e.type)&&e.click&&D(e,\"input\")&&kt(e,\"click\",At),!1},trigger:function(t){var e=this||t;return vt.test(e.type)&&e.click&&D(e,\"input\")&&kt(e,\"click\"),!0},_default:function(t){var e=t.target;return vt.test(e.type)&&e.click&&D(e,\"input\")&&J.get(e,\"click\")||D(e,\"a\")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}}},C.removeEvent=function(t,e,n){t.removeEventListener&&t.removeEventListener(e,n)},C.Event=function(t,e){if(!(this instanceof C.Event))return new C.Event(t,e);t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&!1===t.returnValue?At:St,this.target=t.target&&3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&&C.extend(this,e),this.timeStamp=t&&t.timeStamp||Date.now(),this[C.expando]=!0},C.Event.prototype={constructor:C.Event,isDefaultPrevented:St,isPropagationStopped:St,isImmediatePropagationStopped:St,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=At,t&&!this.isSimulated&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=At,t&&!this.isSimulated&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=At,t&&!this.isSimulated&&t.stopImmediatePropagation(),this.stopPropagation()}},C.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},C.event.addProp),C.each({focus:\"focusin\",blur:\"focusout\"},(function(t,e){C.event.special[t]={setup:function(){return kt(this,t,$t),!1},trigger:function(){return kt(this,t),!0},_default:function(e){return J.get(e.target,t)},delegateType:e}})),C.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},(function(t,e){C.event.special[t]={delegateType:e,bindType:e,handle:function(t){var n,r=t.relatedTarget,i=t.handleObj;return r&&(r===this||C.contains(this,r))||(t.type=i.origType,n=i.handler.apply(this,arguments),t.type=e),n}}})),C.fn.extend({on:function(t,e,n,r){return Et(this,t,e,n,r)},one:function(t,e,n,r){return Et(this,t,e,n,r,1)},off:function(t,e,n){var r,i;if(t&&t.preventDefault&&t.handleObj)return r=t.handleObj,C(t.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof t){for(i in t)this.off(i,e,t[i]);return this}return!1!==e&&\"function\"!=typeof e||(n=e,e=void 0),!1===n&&(n=St),this.each((function(){C.event.remove(this,t,n,e)}))}});var Dt=/<script|<style|<link/i,jt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Ot=/^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;function Nt(t,e){return D(t,\"table\")&&D(11!==e.nodeType?e:e.firstChild,\"tr\")&&C(t).children(\"tbody\")[0]||t}function Rt(t){return t.type=(null!==t.getAttribute(\"type\"))+\"/\"+t.type,t}function It(t){return\"true/\"===(t.type||\"\").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute(\"type\"),t}function Lt(t,e){var n,r,i,o,s,a;if(1===e.nodeType){if(J.hasData(t)&&(a=J.get(t).events))for(i in J.remove(e,\"handle events\"),a)for(n=0,r=a[i].length;n<r;n++)C.event.add(e,i,a[i][n]);Z.hasData(t)&&(o=Z.access(t),s=C.extend({},o),Z.set(e,s))}}function Pt(t,e){var n=e.nodeName.toLowerCase();\"input\"===n&&vt.test(t.type)?e.checked=t.checked:\"input\"!==n&&\"textarea\"!==n||(e.defaultValue=t.defaultValue)}function qt(t,e,n,r){e=u(e);var i,o,s,a,l,c,f=0,p=t.length,h=p-1,d=e[0],g=m(d);if(g||p>1&&\"string\"==typeof d&&!v.checkClone&&jt.test(d))return t.each((function(i){var o=t.eq(i);g&&(e[0]=d.call(this,i,o.html())),qt(o,e,n,r)}));if(p&&(o=(i=Tt(e,t[0].ownerDocument,!1,t,r)).firstChild,1===i.childNodes.length&&(i=o),o||r)){for(a=(s=C.map(wt(i,\"script\"),Rt)).length;f<p;f++)l=i,f!==h&&(l=C.clone(l,!0,!0),a&&C.merge(s,wt(l,\"script\"))),n.call(t[f],l,f);if(a)for(c=s[s.length-1].ownerDocument,C.map(s,It),f=0;f<a;f++)l=s[f],yt.test(l.type||\"\")&&!J.access(l,\"globalEval\")&&C.contains(c,l)&&(l.src&&\"module\"!==(l.type||\"\").toLowerCase()?C._evalUrl&&!l.noModule&&C._evalUrl(l.src,{nonce:l.nonce||l.getAttribute(\"nonce\")},c):_(l.textContent.replace(Ot,\"\"),l,c))}return t}function Ht(t,e,n){for(var r,i=e?C.filter(e,t):t,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||C.cleanData(wt(r)),r.parentNode&&(n&&at(r)&&_t(wt(r,\"script\")),r.parentNode.removeChild(r));return t}C.extend({htmlPrefilter:function(t){return t},clone:function(t,e,n){var r,i,o,s,a=t.cloneNode(!0),u=at(t);if(!(v.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||C.isXMLDoc(t)))for(s=wt(a),r=0,i=(o=wt(t)).length;r<i;r++)Pt(o[r],s[r]);if(e)if(n)for(o=o||wt(t),s=s||wt(a),r=0,i=o.length;r<i;r++)Lt(o[r],s[r]);else Lt(t,a);return(s=wt(a,\"script\")).length>0&&_t(s,!u&&wt(t,\"script\")),a},cleanData:function(t){for(var e,n,r,i=C.event.special,o=0;void 0!==(n=t[o]);o++)if(Y(n)){if(e=n[J.expando]){if(e.events)for(r in e.events)i[r]?C.event.remove(n,r):C.removeEvent(n,r,e.handle);n[J.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),C.fn.extend({detach:function(t){return Ht(this,t,!0)},remove:function(t){return Ht(this,t)},text:function(t){return W(this,(function(t){return void 0===t?C.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return qt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Nt(this,t).appendChild(t)}))},prepend:function(){return qt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Nt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return qt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return qt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(C.cleanData(wt(t,!1)),t.textContent=\"\");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return C.clone(this,t,e)}))},html:function(t){return W(this,(function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if(\"string\"==typeof t&&!Dt.test(t)&&!bt[(mt.exec(t)||[\"\",\"\"])[1].toLowerCase()]){t=C.htmlPrefilter(t);try{for(;n<r;n++)1===(e=this[n]||{}).nodeType&&(C.cleanData(wt(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)}),null,t,arguments.length)},replaceWith:function(){var t=[];return qt(this,arguments,(function(e){var n=this.parentNode;C.inArray(this,t)<0&&(C.cleanData(wt(this)),n&&n.replaceChild(e,this))}),t)}}),C.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},(function(t,e){C.fn[t]=function(t){for(var n,r=[],i=C(t),o=i.length-1,s=0;s<=o;s++)n=s===o?this:this.clone(!0),C(i[s])[e](n),l.apply(r,n.get());return this.pushStack(r)}}));var Mt=new RegExp(\"^(\"+rt+\")(?!px)[a-z%]+$\",\"i\"),Ut=/^--/,Ft=function(t){var e=t.ownerDocument.defaultView;return e&&e.opener||(e=r),e.getComputedStyle(t)},zt=function(t,e,n){var r,i,o={};for(i in e)o[i]=t.style[i],t.style[i]=e[i];for(i in r=n.call(t),e)t.style[i]=o[i];return r},Bt=new RegExp(ot.join(\"|\"),\"i\"),Wt=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",Gt=new RegExp(\"^\"+Wt+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+Wt+\"+$\",\"g\");function Vt(t,e,n){var r,i,o,s,a=Ut.test(e),u=t.style;return(n=n||Ft(t))&&(s=n.getPropertyValue(e)||n[e],a&&s&&(s=s.replace(Gt,\"$1\")||void 0),\"\"!==s||at(t)||(s=C.style(t,e)),!v.pixelBoxStyles()&&Mt.test(s)&&Bt.test(e)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=s,s=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==s?s+\"\":s}function Kt(t,e){return{get:function(){if(!t())return(this.get=e).apply(this,arguments);delete this.get}}}!function(){function t(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",st.appendChild(l).appendChild(c);var t=r.getComputedStyle(c);n=\"1%\"!==t.top,u=12===e(t.marginLeft),c.style.right=\"60%\",s=36===e(t.right),i=36===e(t.width),c.style.position=\"absolute\",o=12===e(c.offsetWidth/3),st.removeChild(l),c=null}}function e(t){return Math.round(parseFloat(t))}var n,i,o,s,a,u,l=b.createElement(\"div\"),c=b.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",v.clearCloneStyle=\"content-box\"===c.style.backgroundClip,C.extend(v,{boxSizingReliable:function(){return t(),i},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),n},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),o},reliableTrDimensions:function(){var t,e,n,i;return null==a&&(t=b.createElement(\"table\"),e=b.createElement(\"tr\"),n=b.createElement(\"div\"),t.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",e.style.cssText=\"border:1px solid\",e.style.height=\"1px\",n.style.height=\"9px\",n.style.display=\"block\",st.appendChild(t).appendChild(e).appendChild(n),i=r.getComputedStyle(e),a=parseInt(i.height,10)+parseInt(i.borderTopWidth,10)+parseInt(i.borderBottomWidth,10)===e.offsetHeight,st.removeChild(t)),a}}))}();var Xt=[\"Webkit\",\"Moz\",\"ms\"],Yt=b.createElement(\"div\").style,Qt={};function Jt(t){var e=C.cssProps[t]||Qt[t];return e||(t in Yt?t:Qt[t]=function(t){for(var e=t[0].toUpperCase()+t.slice(1),n=Xt.length;n--;)if((t=Xt[n]+e)in Yt)return t}(t)||t)}var Zt=/^(none|table(?!-c[ea]).+)/,te={position:\"absolute\",visibility:\"hidden\",display:\"block\"},ee={letterSpacing:\"0\",fontWeight:\"400\"};function ne(t,e,n){var r=it.exec(e);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):e}function re(t,e,n,r,i,o){var s=\"width\"===e?1:0,a=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;s<4;s+=2)\"margin\"===n&&(u+=C.css(t,n+ot[s],!0,i)),r?(\"content\"===n&&(u-=C.css(t,\"padding\"+ot[s],!0,i)),\"margin\"!==n&&(u-=C.css(t,\"border\"+ot[s]+\"Width\",!0,i))):(u+=C.css(t,\"padding\"+ot[s],!0,i),\"padding\"!==n?u+=C.css(t,\"border\"+ot[s]+\"Width\",!0,i):a+=C.css(t,\"border\"+ot[s]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(t[\"offset\"+e[0].toUpperCase()+e.slice(1)]-o-u-a-.5))||0),u}function ie(t,e,n){var r=Ft(t),i=(!v.boxSizingReliable()||n)&&\"border-box\"===C.css(t,\"boxSizing\",!1,r),o=i,s=Vt(t,e,r),a=\"offset\"+e[0].toUpperCase()+e.slice(1);if(Mt.test(s)){if(!n)return s;s=\"auto\"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&D(t,\"tr\")||\"auto\"===s||!parseFloat(s)&&\"inline\"===C.css(t,\"display\",!1,r))&&t.getClientRects().length&&(i=\"border-box\"===C.css(t,\"boxSizing\",!1,r),(o=a in t)&&(s=t[a])),(s=parseFloat(s)||0)+re(t,e,n||(i?\"border\":\"content\"),o,r,s)+\"px\"}function oe(t,e,n,r,i){return new oe.prototype.init(t,e,n,r,i)}C.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Vt(t,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var i,o,s,a=X(e),u=Ut.test(e),l=t.style;if(u||(e=Jt(a)),s=C.cssHooks[e]||C.cssHooks[a],void 0===n)return s&&\"get\"in s&&void 0!==(i=s.get(t,!1,r))?i:l[e];\"string\"===(o=typeof n)&&(i=it.exec(n))&&i[1]&&(n=ct(t,e,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(C.cssNumber[a]?\"\":\"px\")),v.clearCloneStyle||\"\"!==n||0!==e.indexOf(\"background\")||(l[e]=\"inherit\"),s&&\"set\"in s&&void 0===(n=s.set(t,n,r))||(u?l.setProperty(e,n):l[e]=n))}},css:function(t,e,n,r){var i,o,s,a=X(e);return Ut.test(e)||(e=Jt(a)),(s=C.cssHooks[e]||C.cssHooks[a])&&\"get\"in s&&(i=s.get(t,!0,n)),void 0===i&&(i=Vt(t,e,r)),\"normal\"===i&&e in ee&&(i=ee[e]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),C.each([\"height\",\"width\"],(function(t,e){C.cssHooks[e]={get:function(t,n,r){if(n)return!Zt.test(C.css(t,\"display\"))||t.getClientRects().length&&t.getBoundingClientRect().width?ie(t,e,r):zt(t,te,(function(){return ie(t,e,r)}))},set:function(t,n,r){var i,o=Ft(t),s=!v.scrollboxSize()&&\"absolute\"===o.position,a=(s||r)&&\"border-box\"===C.css(t,\"boxSizing\",!1,o),u=r?re(t,e,r,a,o):0;return a&&s&&(u-=Math.ceil(t[\"offset\"+e[0].toUpperCase()+e.slice(1)]-parseFloat(o[e])-re(t,e,\"border\",!1,o)-.5)),u&&(i=it.exec(n))&&\"px\"!==(i[3]||\"px\")&&(t.style[e]=n,n=C.css(t,e)),ne(0,n,u)}}})),C.cssHooks.marginLeft=Kt(v.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Vt(t,\"marginLeft\"))||t.getBoundingClientRect().left-zt(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+\"px\"})),C.each({margin:\"\",padding:\"\",border:\"Width\"},(function(t,e){C.cssHooks[t+e]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[t+ot[r]+e]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==t&&(C.cssHooks[t+e].set=ne)})),C.fn.extend({css:function(t,e){return W(this,(function(t,e,n){var r,i,o={},s=0;if(Array.isArray(e)){for(r=Ft(t),i=e.length;s<i;s++)o[e[s]]=C.css(t,e[s],!1,r);return o}return void 0!==n?C.style(t,e,n):C.css(t,e)}),t,e,arguments.length>1)}}),C.Tween=oe,oe.prototype={constructor:oe,init:function(t,e,n,r,i,o){this.elem=t,this.prop=n,this.easing=i||C.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=o||(C.cssNumber[n]?\"\":\"px\")},cur:function(){var t=oe.propHooks[this.prop];return t&&t.get?t.get(this):oe.propHooks._default.get(this)},run:function(t){var e,n=oe.propHooks[this.prop];return this.options.duration?this.pos=e=C.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):oe.propHooks._default.set(this),this}},oe.prototype.init.prototype=oe.prototype,oe.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=C.css(t.elem,t.prop,\"\"))&&\"auto\"!==e?e:0},set:function(t){C.fx.step[t.prop]?C.fx.step[t.prop](t):1!==t.elem.nodeType||!C.cssHooks[t.prop]&&null==t.elem.style[Jt(t.prop)]?t.elem[t.prop]=t.now:C.style(t.elem,t.prop,t.now+t.unit)}}},oe.propHooks.scrollTop=oe.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},C.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:\"swing\"},C.fx=oe.prototype.init,C.fx.step={};var se,ae,ue=/^(?:toggle|show|hide)$/,le=/queueHooks$/;function ce(){ae&&(!1===b.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(ce):r.setTimeout(ce,C.fx.interval),C.fx.tick())}function fe(){return r.setTimeout((function(){se=void 0})),se=Date.now()}function pe(t,e){var n,r=0,i={height:t};for(e=e?1:0;r<4;r+=2-e)i[\"margin\"+(n=ot[r])]=i[\"padding\"+n]=t;return e&&(i.opacity=i.width=t),i}function he(t,e,n){for(var r,i=(de.tweeners[e]||[]).concat(de.tweeners[\"*\"]),o=0,s=i.length;o<s;o++)if(r=i[o].call(n,e,t))return r}function de(t,e,n){var r,i,o=0,s=de.prefilters.length,a=C.Deferred().always((function(){delete u.elem})),u=function(){if(i)return!1;for(var e=se||fe(),n=Math.max(0,l.startTime+l.duration-e),r=1-(n/l.duration||0),o=0,s=l.tweens.length;o<s;o++)l.tweens[o].run(r);return a.notifyWith(t,[l,r,n]),r<1&&s?n:(s||a.notifyWith(t,[l,1,0]),a.resolveWith(t,[l]),!1)},l=a.promise({elem:t,props:C.extend({},e),opts:C.extend(!0,{specialEasing:{},easing:C.easing._default},n),originalProperties:e,originalOptions:n,startTime:se||fe(),duration:n.duration,tweens:[],createTween:function(e,n){var r=C.Tween(t,l.opts,e,n,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(r),r},stop:function(e){var n=0,r=e?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return e?(a.notifyWith(t,[l,1,0]),a.resolveWith(t,[l,e])):a.rejectWith(t,[l,e]),this}}),c=l.props;for(!function(t,e){var n,r,i,o,s;for(n in t)if(i=e[r=X(n)],o=t[n],Array.isArray(o)&&(i=o[1],o=t[n]=o[0]),n!==r&&(t[r]=o,delete t[n]),(s=C.cssHooks[r])&&\"expand\"in s)for(n in o=s.expand(o),delete t[r],o)n in t||(t[n]=o[n],e[n]=i);else e[r]=i}(c,l.opts.specialEasing);o<s;o++)if(r=de.prefilters[o].call(l,t,c,l.opts))return m(r.stop)&&(C._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return C.map(c,he,l),m(l.opts.start)&&l.opts.start.call(t,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),C.fx.timer(C.extend(u,{elem:t,anim:l,queue:l.opts.queue})),l}C.Animation=C.extend(de,{tweeners:{\"*\":[function(t,e){var n=this.createTween(t,e);return ct(n.elem,t,it.exec(e),n),n}]},tweener:function(t,e){m(t)?(e=t,t=[\"*\"]):t=t.match(q);for(var n,r=0,i=t.length;r<i;r++)n=t[r],de.tweeners[n]=de.tweeners[n]||[],de.tweeners[n].unshift(e)},prefilters:[function(t,e,n){var r,i,o,s,a,u,l,c,f=\"width\"in e||\"height\"in e,p=this,h={},d=t.style,g=t.nodeType&&lt(t),v=J.get(t,\"fxshow\");for(r in n.queue||(null==(s=C._queueHooks(t,\"fx\")).unqueued&&(s.unqueued=0,a=s.empty.fire,s.empty.fire=function(){s.unqueued||a()}),s.unqueued++,p.always((function(){p.always((function(){s.unqueued--,C.queue(t,\"fx\").length||s.empty.fire()}))}))),e)if(i=e[r],ue.test(i)){if(delete e[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}h[r]=v&&v[r]||C.style(t,r)}if((u=!C.isEmptyObject(e))||!C.isEmptyObject(h))for(r in f&&1===t.nodeType&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],null==(l=v&&v.display)&&(l=J.get(t,\"display\")),\"none\"===(c=C.css(t,\"display\"))&&(l?c=l:(ht([t],!0),l=t.style.display||l,c=C.css(t,\"display\"),ht([t]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===C.css(t,\"float\")&&(u||(p.done((function(){d.display=l})),null==l&&(c=d.display,l=\"none\"===c?\"\":c)),d.display=\"inline-block\")),n.overflow&&(d.overflow=\"hidden\",p.always((function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}))),u=!1,h)u||(v?\"hidden\"in v&&(g=v.hidden):v=J.access(t,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&ht([t],!0),p.done((function(){for(r in g||ht([t]),J.remove(t,\"fxshow\"),h)C.style(t,r,h[r])}))),u=he(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(t,e){e?de.prefilters.unshift(t):de.prefilters.push(t)}}),C.speed=function(t,e,n){var r=t&&\"object\"==typeof t?C.extend({},t):{complete:n||!n&&e||m(t)&&t,duration:t,easing:n&&e||e&&!m(e)&&e};return C.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in C.fx.speeds?r.duration=C.fx.speeds[r.duration]:r.duration=C.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&C.dequeue(this,r.queue)},r},C.fn.extend({fadeTo:function(t,e,n,r){return this.filter(lt).css(\"opacity\",0).show().end().animate({opacity:e},t,n,r)},animate:function(t,e,n,r){var i=C.isEmptyObject(t),o=C.speed(e,n,r),s=function(){var e=de(this,C.extend({},t),o);(i||J.get(this,\"finish\"))&&e.stop(!0)};return s.finish=s,i||!1===o.queue?this.each(s):this.queue(o.queue,s)},stop:function(t,e,n){var r=function(t){var e=t.stop;delete t.stop,e(n)};return\"string\"!=typeof t&&(n=e,e=t,t=void 0),e&&this.queue(t||\"fx\",[]),this.each((function(){var e=!0,i=null!=t&&t+\"queueHooks\",o=C.timers,s=J.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&le.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=t&&o[i].queue!==t||(o[i].anim.stop(n),e=!1,o.splice(i,1));!e&&n||C.dequeue(this,t)}))},finish:function(t){return!1!==t&&(t=t||\"fx\"),this.each((function(){var e,n=J.get(this),r=n[t+\"queue\"],i=n[t+\"queueHooks\"],o=C.timers,s=r?r.length:0;for(n.finish=!0,C.queue(this,t,[]),i&&i.stop&&i.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<s;e++)r[e]&&r[e].finish&&r[e].finish.call(this);delete n.finish}))}}),C.each([\"toggle\",\"show\",\"hide\"],(function(t,e){var n=C.fn[e];C.fn[e]=function(t,r,i){return null==t||\"boolean\"==typeof t?n.apply(this,arguments):this.animate(pe(e,!0),t,r,i)}})),C.each({slideDown:pe(\"show\"),slideUp:pe(\"hide\"),slideToggle:pe(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},(function(t,e){C.fn[t]=function(t,n,r){return this.animate(e,t,n,r)}})),C.timers=[],C.fx.tick=function(){var t,e=0,n=C.timers;for(se=Date.now();e<n.length;e++)(t=n[e])()||n[e]!==t||n.splice(e--,1);n.length||C.fx.stop(),se=void 0},C.fx.timer=function(t){C.timers.push(t),C.fx.start()},C.fx.interval=13,C.fx.start=function(){ae||(ae=!0,ce())},C.fx.stop=function(){ae=null},C.fx.speeds={slow:600,fast:200,_default:400},C.fn.delay=function(t,e){return t=C.fx&&C.fx.speeds[t]||t,e=e||\"fx\",this.queue(e,(function(e,n){var i=r.setTimeout(e,t);n.stop=function(){r.clearTimeout(i)}}))},function(){var t=b.createElement(\"input\"),e=b.createElement(\"select\").appendChild(b.createElement(\"option\"));t.type=\"checkbox\",v.checkOn=\"\"!==t.value,v.optSelected=e.selected,(t=b.createElement(\"input\")).value=\"t\",t.type=\"radio\",v.radioValue=\"t\"===t.value}();var ge,ve=C.expr.attrHandle;C.fn.extend({attr:function(t,e){return W(this,C.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each((function(){C.removeAttr(this,t)}))}}),C.extend({attr:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?C.prop(t,e,n):(1===o&&C.isXMLDoc(t)||(i=C.attrHooks[e.toLowerCase()]||(C.expr.match.bool.test(e)?ge:void 0)),void 0!==n?null===n?void C.removeAttr(t,e):i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:(t.setAttribute(e,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(t,e))?r:null==(r=C.find.attr(t,e))?void 0:r)},attrHooks:{type:{set:function(t,e){if(!v.radioValue&&\"radio\"===e&&D(t,\"input\")){var n=t.value;return t.setAttribute(\"type\",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,i=e&&e.match(q);if(i&&1===t.nodeType)for(;n=i[r++];)t.removeAttribute(n)}}),ge={set:function(t,e,n){return!1===e?C.removeAttr(t,n):t.setAttribute(n,n),n}},C.each(C.expr.match.bool.source.match(/\\w+/g),(function(t,e){var n=ve[e]||C.find.attr;ve[e]=function(t,e,r){var i,o,s=e.toLowerCase();return r||(o=ve[s],ve[s]=i,i=null!=n(t,e,r)?s:null,ve[s]=o),i}}));var me=/^(?:input|select|textarea|button)$/i,ye=/^(?:a|area)$/i;function be(t){return(t.match(q)||[]).join(\" \")}function we(t){return t.getAttribute&&t.getAttribute(\"class\")||\"\"}function _e(t){return Array.isArray(t)?t:\"string\"==typeof t&&t.match(q)||[]}C.fn.extend({prop:function(t,e){return W(this,C.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[C.propFix[t]||t]}))}}),C.extend({prop:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&C.isXMLDoc(t)||(e=C.propFix[e]||e,i=C.propHooks[e]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:t[e]=n:i&&\"get\"in i&&null!==(r=i.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=C.find.attr(t,\"tabindex\");return e?parseInt(e,10):me.test(t.nodeName)||ye.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),v.optSelected||(C.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),C.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){C.propFix[this.toLowerCase()]=this})),C.fn.extend({addClass:function(t){var e,n,r,i,o,s;return m(t)?this.each((function(e){C(this).addClass(t.call(this,e,we(this)))})):(e=_e(t)).length?this.each((function(){if(r=we(this),n=1===this.nodeType&&\" \"+be(r)+\" \"){for(o=0;o<e.length;o++)i=e[o],n.indexOf(\" \"+i+\" \")<0&&(n+=i+\" \");s=be(n),r!==s&&this.setAttribute(\"class\",s)}})):this},removeClass:function(t){var e,n,r,i,o,s;return m(t)?this.each((function(e){C(this).removeClass(t.call(this,e,we(this)))})):arguments.length?(e=_e(t)).length?this.each((function(){if(r=we(this),n=1===this.nodeType&&\" \"+be(r)+\" \"){for(o=0;o<e.length;o++)for(i=e[o];n.indexOf(\" \"+i+\" \")>-1;)n=n.replace(\" \"+i+\" \",\" \");s=be(n),r!==s&&this.setAttribute(\"class\",s)}})):this:this.attr(\"class\",\"\")},toggleClass:function(t,e){var n,r,i,o,s=typeof t,a=\"string\"===s||Array.isArray(t);return m(t)?this.each((function(n){C(this).toggleClass(t.call(this,n,we(this),e),e)})):\"boolean\"==typeof e&&a?e?this.addClass(t):this.removeClass(t):(n=_e(t),this.each((function(){if(a)for(o=C(this),i=0;i<n.length;i++)r=n[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&\"boolean\"!==s||((r=we(this))&&J.set(this,\"__className__\",r),this.setAttribute&&this.setAttribute(\"class\",r||!1===t?\"\":J.get(this,\"__className__\")||\"\"))})))},hasClass:function(t){var e,n,r=0;for(e=\" \"+t+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+be(we(n))+\" \").indexOf(e)>-1)return!0;return!1}});var xe=/\\r/g;C.fn.extend({val:function(t){var e,n,r,i=this[0];return arguments.length?(r=m(t),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?t.call(this,n,C(this).val()):t)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=C.map(i,(function(t){return null==t?\"\":t+\"\"}))),(e=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&\"set\"in e&&void 0!==e.set(this,i,\"value\")||(this.value=i))}))):i?(e=C.valHooks[i.type]||C.valHooks[i.nodeName.toLowerCase()])&&\"get\"in e&&void 0!==(n=e.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(xe,\"\"):null==n?\"\":n:void 0}}),C.extend({valHooks:{option:{get:function(t){var e=C.find.attr(t,\"value\");return null!=e?e:be(C.text(t))}},select:{get:function(t){var e,n,r,i=t.options,o=t.selectedIndex,s=\"select-one\"===t.type,a=s?null:[],u=s?o+1:i.length;for(r=o<0?u:s?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!D(n.parentNode,\"optgroup\"))){if(e=C(n).val(),s)return e;a.push(e)}return a},set:function(t,e){for(var n,r,i=t.options,o=C.makeArray(e),s=i.length;s--;)((r=i[s]).selected=C.inArray(C.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),C.each([\"radio\",\"checkbox\"],(function(){C.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=C.inArray(C(t).val(),e)>-1}},v.checkOn||(C.valHooks[this].get=function(t){return null===t.getAttribute(\"value\")?\"on\":t.value})})),v.focusin=\"onfocusin\"in r;var Te=/^(?:focusinfocus|focusoutblur)$/,Ce=function(t){t.stopPropagation()};C.extend(C.event,{trigger:function(t,e,n,i){var o,s,a,u,l,c,f,p,d=[n||b],g=h.call(t,\"type\")?t.type:t,v=h.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=p=a=n=n||b,3!==n.nodeType&&8!==n.nodeType&&!Te.test(g+C.event.triggered)&&(g.indexOf(\".\")>-1&&(v=g.split(\".\"),g=v.shift(),v.sort()),l=g.indexOf(\":\")<0&&\"on\"+g,(t=t[C.expando]?t:new C.Event(g,\"object\"==typeof t&&t)).isTrigger=i?2:3,t.namespace=v.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+v.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:C.makeArray(e,[t]),f=C.event.special[g]||{},i||!f.trigger||!1!==f.trigger.apply(n,e))){if(!i&&!f.noBubble&&!y(n)){for(u=f.delegateType||g,Te.test(u+g)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(n.ownerDocument||b)&&d.push(a.defaultView||a.parentWindow||r)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)p=s,t.type=o>1?u:f.bindType||g,(c=(J.get(s,\"events\")||Object.create(null))[t.type]&&J.get(s,\"handle\"))&&c.apply(s,e),(c=l&&s[l])&&c.apply&&Y(s)&&(t.result=c.apply(s,e),!1===t.result&&t.preventDefault());return t.type=g,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(d.pop(),e)||!Y(n)||l&&m(n[g])&&!y(n)&&((a=n[l])&&(n[l]=null),C.event.triggered=g,t.isPropagationStopped()&&p.addEventListener(g,Ce),n[g](),t.isPropagationStopped()&&p.removeEventListener(g,Ce),C.event.triggered=void 0,a&&(n[l]=a)),t.result}},simulate:function(t,e,n){var r=C.extend(new C.Event,n,{type:t,isSimulated:!0});C.event.trigger(r,null,e)}}),C.fn.extend({trigger:function(t,e){return this.each((function(){C.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return C.event.trigger(t,e,n,!0)}}),v.focusin||C.each({focus:\"focusin\",blur:\"focusout\"},(function(t,e){var n=function(t){C.event.simulate(e,t.target,C.event.fix(t))};C.event.special[e]={setup:function(){var r=this.ownerDocument||this.document||this,i=J.access(r,e);i||r.addEventListener(t,n,!0),J.access(r,e,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,i=J.access(r,e)-1;i?J.access(r,e,i):(r.removeEventListener(t,n,!0),J.remove(r,e))}}}));var Ae=r.location,Se={guid:Date.now()},$e=/\\?/;C.parseXML=function(t){var e,n;if(!t||\"string\"!=typeof t)return null;try{e=(new r.DOMParser).parseFromString(t,\"text/xml\")}catch(t){}return n=e&&e.getElementsByTagName(\"parsererror\")[0],e&&!n||C.error(\"Invalid XML: \"+(n?C.map(n.childNodes,(function(t){return t.textContent})).join(\"\\n\"):t)),e};var Ee=/\\[\\]$/,ke=/\\r?\\n/g,De=/^(?:submit|button|image|reset|file)$/i,je=/^(?:input|select|textarea|keygen)/i;function Oe(t,e,n,r){var i;if(Array.isArray(e))C.each(e,(function(e,i){n||Ee.test(t)?r(t,i):Oe(t+\"[\"+(\"object\"==typeof i&&null!=i?e:\"\")+\"]\",i,n,r)}));else if(n||\"object\"!==x(e))r(t,e);else for(i in e)Oe(t+\"[\"+i+\"]\",e[i],n,r)}C.param=function(t,e){var n,r=[],i=function(t,e){var n=m(e)?e():e;r[r.length]=encodeURIComponent(t)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==t)return\"\";if(Array.isArray(t)||t.jquery&&!C.isPlainObject(t))C.each(t,(function(){i(this.name,this.value)}));else for(n in t)Oe(n,t[n],e,i);return r.join(\"&\")},C.fn.extend({serialize:function(){return C.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=C.prop(this,\"elements\");return t?C.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!C(this).is(\":disabled\")&&je.test(this.nodeName)&&!De.test(t)&&(this.checked||!vt.test(t))})).map((function(t,e){var n=C(this).val();return null==n?null:Array.isArray(n)?C.map(n,(function(t){return{name:e.name,value:t.replace(ke,\"\\r\\n\")}})):{name:e.name,value:n.replace(ke,\"\\r\\n\")}})).get()}});var Ne=/%20/g,Re=/#.*$/,Ie=/([?&])_=[^&]*/,Le=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pe=/^(?:GET|HEAD)$/,qe=/^\\/\\//,He={},Me={},Ue=\"*/\".concat(\"*\"),Fe=b.createElement(\"a\");function ze(t){return function(e,n){\"string\"!=typeof e&&(n=e,e=\"*\");var r,i=0,o=e.toLowerCase().match(q)||[];if(m(n))for(;r=o[i++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(t[r]=t[r]||[]).unshift(n)):(t[r]=t[r]||[]).push(n)}}function Be(t,e,n,r){var i={},o=t===Me;function s(a){var u;return i[a]=!0,C.each(t[a]||[],(function(t,a){var l=a(e,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(e.dataTypes.unshift(l),s(l),!1)})),u}return s(e.dataTypes[0])||!i[\"*\"]&&s(\"*\")}function We(t,e){var n,r,i=C.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((i[n]?t:r||(r={}))[n]=e[n]);return r&&C.extend(!0,t,r),t}Fe.href=Ae.href,C.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ae.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ae.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Ue,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":C.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?We(We(t,C.ajaxSettings),e):We(C.ajaxSettings,t)},ajaxPrefilter:ze(He),ajaxTransport:ze(Me),ajax:function(t,e){\"object\"==typeof t&&(e=t,t=void 0),e=e||{};var n,i,o,s,a,u,l,c,f,p,h=C.ajaxSetup({},e),d=h.context||h,g=h.context&&(d.nodeType||d.jquery)?C(d):C.event,v=C.Deferred(),m=C.Callbacks(\"once memory\"),y=h.statusCode||{},w={},_={},x=\"canceled\",T={readyState:0,getResponseHeader:function(t){var e;if(l){if(!s)for(s={};e=Le.exec(o);)s[e[1].toLowerCase()+\" \"]=(s[e[1].toLowerCase()+\" \"]||[]).concat(e[2]);e=s[t.toLowerCase()+\" \"]}return null==e?null:e.join(\", \")},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(t,e){return null==l&&(t=_[t.toLowerCase()]=_[t.toLowerCase()]||t,w[t]=e),this},overrideMimeType:function(t){return null==l&&(h.mimeType=t),this},statusCode:function(t){var e;if(t)if(l)T.always(t[T.status]);else for(e in t)y[e]=[y[e],t[e]];return this},abort:function(t){var e=t||x;return n&&n.abort(e),A(0,e),this}};if(v.promise(T),h.url=((t||h.url||Ae.href)+\"\").replace(qe,Ae.protocol+\"//\"),h.type=e.method||e.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(q)||[\"\"],null==h.crossDomain){u=b.createElement(\"a\");try{u.href=h.url,u.href=u.href,h.crossDomain=Fe.protocol+\"//\"+Fe.host!=u.protocol+\"//\"+u.host}catch(t){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=C.param(h.data,h.traditional)),Be(He,h,e,T),l)return T;for(f in(c=C.event&&h.global)&&0==C.active++&&C.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Pe.test(h.type),i=h.url.replace(Re,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(Ne,\"+\")):(p=h.url.slice(i.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(i+=($e.test(i)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(i=i.replace(Ie,\"$1\"),p=($e.test(i)?\"&\":\"?\")+\"_=\"+Se.guid+++p),h.url=i+p),h.ifModified&&(C.lastModified[i]&&T.setRequestHeader(\"If-Modified-Since\",C.lastModified[i]),C.etag[i]&&T.setRequestHeader(\"If-None-Match\",C.etag[i])),(h.data&&h.hasContent&&!1!==h.contentType||e.contentType)&&T.setRequestHeader(\"Content-Type\",h.contentType),T.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+Ue+\"; q=0.01\":\"\"):h.accepts[\"*\"]),h.headers)T.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(!1===h.beforeSend.call(d,T,h)||l))return T.abort();if(x=\"abort\",m.add(h.complete),T.done(h.success),T.fail(h.error),n=Be(Me,h,e,T)){if(T.readyState=1,c&&g.trigger(\"ajaxSend\",[T,h]),l)return T;h.async&&h.timeout>0&&(a=r.setTimeout((function(){T.abort(\"timeout\")}),h.timeout));try{l=!1,n.send(w,A)}catch(t){if(l)throw t;A(-1,t)}}else A(-1,\"No Transport\");function A(t,e,s,u){var f,p,b,w,_,x=e;l||(l=!0,a&&r.clearTimeout(a),n=void 0,o=u||\"\",T.readyState=t>0?4:0,f=t>=200&&t<300||304===t,s&&(w=function(t,e,n){for(var r,i,o,s,a=t.contents,u=t.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader(\"Content-Type\"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||t.converters[i+\" \"+u[0]]){o=i;break}s||(s=i)}o=o||s}if(o)return o!==u[0]&&u.unshift(o),n[o]}(h,T,s)),!f&&C.inArray(\"script\",h.dataTypes)>-1&&C.inArray(\"json\",h.dataTypes)<0&&(h.converters[\"text script\"]=function(){}),w=function(t,e,n,r){var i,o,s,a,u,l={},c=t.dataTypes.slice();if(c[1])for(s in t.converters)l[s.toLowerCase()]=t.converters[s];for(o=c.shift();o;)if(t.responseFields[o]&&(n[t.responseFields[o]]=e),!u&&r&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(s=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((a=i.split(\" \"))[1]===o&&(s=l[u+\" \"+a[0]]||l[\"* \"+a[0]])){!0===s?s=l[i]:!0!==l[i]&&(o=a[0],c.unshift(a[1]));break}if(!0!==s)if(s&&t.throws)e=s(e);else try{e=s(e)}catch(t){return{state:\"parsererror\",error:s?t:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:e}}(h,w,T,f),f?(h.ifModified&&((_=T.getResponseHeader(\"Last-Modified\"))&&(C.lastModified[i]=_),(_=T.getResponseHeader(\"etag\"))&&(C.etag[i]=_)),204===t||\"HEAD\"===h.type?x=\"nocontent\":304===t?x=\"notmodified\":(x=w.state,p=w.data,f=!(b=w.error))):(b=x,!t&&x||(x=\"error\",t<0&&(t=0))),T.status=t,T.statusText=(e||x)+\"\",f?v.resolveWith(d,[p,x,T]):v.rejectWith(d,[T,x,b]),T.statusCode(y),y=void 0,c&&g.trigger(f?\"ajaxSuccess\":\"ajaxError\",[T,h,f?p:b]),m.fireWith(d,[T,x]),c&&(g.trigger(\"ajaxComplete\",[T,h]),--C.active||C.event.trigger(\"ajaxStop\")))}return T},getJSON:function(t,e,n){return C.get(t,e,n,\"json\")},getScript:function(t,e){return C.get(t,void 0,e,\"script\")}}),C.each([\"get\",\"post\"],(function(t,e){C[e]=function(t,n,r,i){return m(n)&&(i=i||r,r=n,n=void 0),C.ajax(C.extend({url:t,type:e,dataType:i,data:n,success:r},C.isPlainObject(t)&&t))}})),C.ajaxPrefilter((function(t){var e;for(e in t.headers)\"content-type\"===e.toLowerCase()&&(t.contentType=t.headers[e]||\"\")})),C._evalUrl=function(t,e,n){return C.ajax({url:t,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(t){C.globalEval(t,e,n)}})},C.fn.extend({wrapAll:function(t){var e;return this[0]&&(m(t)&&(t=t.call(this[0])),e=C(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return m(t)?this.each((function(e){C(this).wrapInner(t.call(this,e))})):this.each((function(){var e=C(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=m(t);return this.each((function(n){C(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not(\"body\").each((function(){C(this).replaceWith(this.childNodes)})),this}}),C.expr.pseudos.hidden=function(t){return!C.expr.pseudos.visible(t)},C.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},C.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(t){}};var Ge={0:200,1223:204},Ve=C.ajaxSettings.xhr();v.cors=!!Ve&&\"withCredentials\"in Ve,v.ajax=Ve=!!Ve,C.ajaxTransport((function(t){var e,n;if(v.cors||Ve&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];for(s in t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\"),i)a.setRequestHeader(s,i[s]);e=function(t){return function(){e&&(e=n=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,\"abort\"===t?a.abort():\"error\"===t?\"number\"!=typeof a.status?o(0,\"error\"):o(a.status,a.statusText):o(Ge[a.status]||a.status,a.statusText,\"text\"!==(a.responseType||\"text\")||\"string\"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=e(),n=a.onerror=a.ontimeout=e(\"error\"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&r.setTimeout((function(){e&&n()}))},e=e(\"abort\");try{a.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}})),C.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),C.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(t){return C.globalEval(t),t}}}),C.ajaxPrefilter(\"script\",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type=\"GET\")})),C.ajaxTransport(\"script\",(function(t){var e,n;if(t.crossDomain||t.scriptAttrs)return{send:function(r,i){e=C(\"<script>\").attr(t.scriptAttrs||{}).prop({charset:t.scriptCharset,src:t.url}).on(\"load error\",n=function(t){e.remove(),n=null,t&&i(\"error\"===t.type?404:200,t.type)}),b.head.appendChild(e[0])},abort:function(){n&&n()}}}));var Ke,Xe=[],Ye=/(=)\\?(?=&|$)|\\?\\?/;C.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var t=Xe.pop()||C.expando+\"_\"+Se.guid++;return this[t]=!0,t}}),C.ajaxPrefilter(\"json jsonp\",(function(t,e,n){var i,o,s,a=!1!==t.jsonp&&(Ye.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ye.test(t.data)&&\"data\");if(a||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=m(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(Ye,\"$1\"+i):!1!==t.jsonp&&(t.url+=($e.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return s||C.error(i+\" was not called\"),s[0]},t.dataTypes[0]=\"json\",o=r[i],r[i]=function(){s=arguments},n.always((function(){void 0===o?C(r).removeProp(i):r[i]=o,t[i]&&(t.jsonpCallback=e.jsonpCallback,Xe.push(i)),s&&m(o)&&o(s[0]),s=o=void 0})),\"script\"})),v.createHTMLDocument=((Ke=b.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Ke.childNodes.length),C.parseHTML=function(t,e,n){return\"string\"!=typeof t?[]:(\"boolean\"==typeof e&&(n=e,e=!1),e||(v.createHTMLDocument?((r=(e=b.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=b.location.href,e.head.appendChild(r)):e=b),o=!n&&[],(i=j.exec(t))?[e.createElement(i[1])]:(i=Tt([t],e,o),o&&o.length&&C(o).remove(),C.merge([],i.childNodes)));var r,i,o},C.fn.load=function(t,e,n){var r,i,o,s=this,a=t.indexOf(\" \");return a>-1&&(r=be(t.slice(a)),t=t.slice(0,a)),m(e)?(n=e,e=void 0):e&&\"object\"==typeof e&&(i=\"POST\"),s.length>0&&C.ajax({url:t,type:i||\"GET\",dataType:\"html\",data:e}).done((function(t){o=arguments,s.html(r?C(\"<div>\").append(C.parseHTML(t)).find(r):t)})).always(n&&function(t,e){s.each((function(){n.apply(this,o||[t.responseText,e,t])}))}),this},C.expr.pseudos.animated=function(t){return C.grep(C.timers,(function(e){return t===e.elem})).length},C.offset={setOffset:function(t,e,n){var r,i,o,s,a,u,l=C.css(t,\"position\"),c=C(t),f={};\"static\"===l&&(t.style.position=\"relative\"),a=c.offset(),o=C.css(t,\"top\"),u=C.css(t,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&(o+u).indexOf(\"auto\")>-1?(s=(r=c.position()).top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),m(e)&&(e=e.call(t,n,C.extend({},a))),null!=e.top&&(f.top=e.top-a.top+s),null!=e.left&&(f.left=e.left-a.left+i),\"using\"in e?e.using.call(t,f):c.css(f)}},C.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each((function(e){C.offset.setOffset(this,t,e)}));var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,n,r=this[0],i={top:0,left:0};if(\"fixed\"===C.css(r,\"position\"))e=r.getBoundingClientRect();else{for(e=this.offset(),n=r.ownerDocument,t=r.offsetParent||n.documentElement;t&&(t===n.body||t===n.documentElement)&&\"static\"===C.css(t,\"position\");)t=t.parentNode;t&&t!==r&&1===t.nodeType&&((i=C(t).offset()).top+=C.css(t,\"borderTopWidth\",!0),i.left+=C.css(t,\"borderLeftWidth\",!0))}return{top:e.top-i.top-C.css(r,\"marginTop\",!0),left:e.left-i.left-C.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent;t&&\"static\"===C.css(t,\"position\");)t=t.offsetParent;return t||st}))}}),C.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(t,e){var n=\"pageYOffset\"===e;C.fn[t]=function(r){return W(this,(function(t,r,i){var o;if(y(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===i)return o?o[e]:t[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):t[r]=i}),t,r,arguments.length)}})),C.each([\"top\",\"left\"],(function(t,e){C.cssHooks[e]=Kt(v.pixelPosition,(function(t,n){if(n)return n=Vt(t,e),Mt.test(n)?C(t).position()[e]+\"px\":n}))})),C.each({Height:\"height\",Width:\"width\"},(function(t,e){C.each({padding:\"inner\"+t,content:e,\"\":\"outer\"+t},(function(n,r){C.fn[r]=function(i,o){var s=arguments.length&&(n||\"boolean\"!=typeof i),a=n||(!0===i||!0===o?\"margin\":\"border\");return W(this,(function(e,n,i){var o;return y(e)?0===r.indexOf(\"outer\")?e[\"inner\"+t]:e.document.documentElement[\"client\"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body[\"scroll\"+t],o[\"scroll\"+t],e.body[\"offset\"+t],o[\"offset\"+t],o[\"client\"+t])):void 0===i?C.css(e,n,a):C.style(e,n,i,a)}),e,s?i:void 0,s)}}))})),C.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],(function(t,e){C.fn[e]=function(t){return this.on(e,t)}})),C.fn.extend({bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,r){return this.on(e,t,n,r)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,\"**\"):this.off(e,t||\"**\",n)},hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),C.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(t,e){C.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}));var Qe=/^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;C.proxy=function(t,e){var n,r,i;if(\"string\"==typeof e&&(n=t[e],e=t,t=n),m(t))return r=a.call(arguments,2),i=function(){return t.apply(e||this,r.concat(a.call(arguments)))},i.guid=t.guid=t.guid||C.guid++,i},C.holdReady=function(t){t?C.readyWait++:C.ready(!0)},C.isArray=Array.isArray,C.parseJSON=JSON.parse,C.nodeName=D,C.isFunction=m,C.isWindow=y,C.camelCase=X,C.type=x,C.now=Date.now,C.isNumeric=function(t){var e=C.type(t);return(\"number\"===e||\"string\"===e)&&!isNaN(t-parseFloat(t))},C.trim=function(t){return null==t?\"\":(t+\"\").replace(Qe,\"$1\")},void 0===(n=function(){return C}.apply(e,[]))||(t.exports=n);var Je=r.jQuery,Ze=r.$;return C.noConflict=function(t){return r.$===C&&(r.$=Ze),t&&r.jQuery===C&&(r.jQuery=Je),C},void 0===i&&(r.jQuery=r.$=C),C}))},486:function(t,e,n){var r;t=n.nmd(t),function(){var i,o=\"Expected a function\",s=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",u=16,l=32,c=64,f=128,p=256,h=1/0,d=9007199254740991,g=NaN,v=4294967295,m=[[\"ary\",f],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",u],[\"flip\",512],[\"partial\",l],[\"partialRight\",c],[\"rearg\",p]],y=\"[object Arguments]\",b=\"[object Array]\",w=\"[object Boolean]\",_=\"[object Date]\",x=\"[object Error]\",T=\"[object Function]\",C=\"[object GeneratorFunction]\",A=\"[object Map]\",S=\"[object Number]\",$=\"[object Object]\",E=\"[object Promise]\",k=\"[object RegExp]\",D=\"[object Set]\",j=\"[object String]\",O=\"[object Symbol]\",N=\"[object WeakMap]\",R=\"[object ArrayBuffer]\",I=\"[object DataView]\",L=\"[object Float32Array]\",P=\"[object Float64Array]\",q=\"[object Int8Array]\",H=\"[object Int16Array]\",M=\"[object Int32Array]\",U=\"[object Uint8Array]\",F=\"[object Uint8ClampedArray]\",z=\"[object Uint16Array]\",B=\"[object Uint32Array]\",W=/\\b__p \\+= '';/g,G=/\\b(__p \\+=) '' \\+/g,V=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,K=/&(?:amp|lt|gt|quot|#39);/g,X=/[&<>\"']/g,Y=RegExp(K.source),Q=RegExp(X.source),J=/<%-([\\s\\S]+?)%>/g,Z=/<%([\\s\\S]+?)%>/g,tt=/<%=([\\s\\S]+?)%>/g,et=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,nt=/^\\w*$/,rt=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,it=/[\\\\^$.*+?()[\\]{}|]/g,ot=RegExp(it.source),st=/^\\s+/,at=/\\s/,ut=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,lt=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ct=/,? & /,ft=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,pt=/[()=,{}\\[\\]\\/\\s]/,ht=/\\\\(\\\\)?/g,dt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,gt=/\\w*$/,vt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,yt=/^\\[object .+?Constructor\\]$/,bt=/^0o[0-7]+$/i,wt=/^(?:0|[1-9]\\d*)$/,_t=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,xt=/($^)/,Tt=/['\\n\\r\\u2028\\u2029\\\\]/g,Ct=\"\\\\ud800-\\\\udfff\",At=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",St=\"\\\\u2700-\\\\u27bf\",$t=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Et=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",kt=\"\\\\ufe0e\\\\ufe0f\",Dt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",jt=\"['’]\",Ot=\"[\"+Ct+\"]\",Nt=\"[\"+Dt+\"]\",Rt=\"[\"+At+\"]\",It=\"\\\\d+\",Lt=\"[\"+St+\"]\",Pt=\"[\"+$t+\"]\",qt=\"[^\"+Ct+Dt+It+St+$t+Et+\"]\",Ht=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Mt=\"[^\"+Ct+\"]\",Ut=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ft=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",zt=\"[\"+Et+\"]\",Bt=\"\\\\u200d\",Wt=\"(?:\"+Pt+\"|\"+qt+\")\",Gt=\"(?:\"+zt+\"|\"+qt+\")\",Vt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Kt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Xt=\"(?:\"+Rt+\"|\"+Ht+\")\"+\"?\",Yt=\"[\"+kt+\"]?\",Qt=Yt+Xt+(\"(?:\"+Bt+\"(?:\"+[Mt,Ut,Ft].join(\"|\")+\")\"+Yt+Xt+\")*\"),Jt=\"(?:\"+[Lt,Ut,Ft].join(\"|\")+\")\"+Qt,Zt=\"(?:\"+[Mt+Rt+\"?\",Rt,Ut,Ft,Ot].join(\"|\")+\")\",te=RegExp(jt,\"g\"),ee=RegExp(Rt,\"g\"),ne=RegExp(Ht+\"(?=\"+Ht+\")|\"+Zt+Qt,\"g\"),re=RegExp([zt+\"?\"+Pt+\"+\"+Vt+\"(?=\"+[Nt,zt,\"$\"].join(\"|\")+\")\",Gt+\"+\"+Kt+\"(?=\"+[Nt,zt+Wt,\"$\"].join(\"|\")+\")\",zt+\"?\"+Wt+\"+\"+Vt,zt+\"+\"+Kt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",It,Jt].join(\"|\"),\"g\"),ie=RegExp(\"[\"+Bt+Ct+At+kt+\"]\"),oe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,se=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ae=-1,ue={};ue[L]=ue[P]=ue[q]=ue[H]=ue[M]=ue[U]=ue[F]=ue[z]=ue[B]=!0,ue[y]=ue[b]=ue[R]=ue[w]=ue[I]=ue[_]=ue[x]=ue[T]=ue[A]=ue[S]=ue[$]=ue[k]=ue[D]=ue[j]=ue[N]=!1;var le={};le[y]=le[b]=le[R]=le[I]=le[w]=le[_]=le[L]=le[P]=le[q]=le[H]=le[M]=le[A]=le[S]=le[$]=le[k]=le[D]=le[j]=le[O]=le[U]=le[F]=le[z]=le[B]=!0,le[x]=le[T]=le[N]=!1;var ce={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},fe=parseFloat,pe=parseInt,he=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,de=\"object\"==typeof self&&self&&self.Object===Object&&self,ge=he||de||Function(\"return this\")(),ve=e&&!e.nodeType&&e,me=ve&&t&&!t.nodeType&&t,ye=me&&me.exports===ve,be=ye&&he.process,we=function(){try{var t=me&&me.require&&me.require(\"util\").types;return t||be&&be.binding&&be.binding(\"util\")}catch(t){}}(),_e=we&&we.isArrayBuffer,xe=we&&we.isDate,Te=we&&we.isMap,Ce=we&&we.isRegExp,Ae=we&&we.isSet,Se=we&&we.isTypedArray;function $e(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ee(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var s=t[i];e(r,s,n(s),t)}return r}function ke(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function De(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function je(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Oe(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var s=t[n];e(s,n,t)&&(o[i++]=s)}return o}function Ne(t,e){return!!(null==t?0:t.length)&&ze(t,e,0)>-1}function Re(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Ie(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Le(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Pe(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function qe(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function He(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Me=Ve(\"length\");function Ue(t,e,n){var r;return n(t,(function(t,n,i){if(e(t,n,i))return r=n,!1})),r}function Fe(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function ze(t,e,n){return e==e?function(t,e,n){var r=n-1,i=t.length;for(;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Fe(t,We,n)}function Be(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function We(t){return t!=t}function Ge(t,e){var n=null==t?0:t.length;return n?Ye(t,e)/n:g}function Ve(t){return function(e){return null==e?i:e[t]}}function Ke(t){return function(e){return null==t?i:t[e]}}function Xe(t,e,n,r,i){return i(t,(function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)})),n}function Ye(t,e){for(var n,r=-1,o=t.length;++r<o;){var s=e(t[r]);s!==i&&(n=n===i?s:n+s)}return n}function Qe(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Je(t){return t?t.slice(0,vn(t)+1).replace(st,\"\"):t}function Ze(t){return function(e){return t(e)}}function tn(t,e){return Ie(e,(function(e){return t[e]}))}function en(t,e){return t.has(e)}function nn(t,e){for(var n=-1,r=t.length;++n<r&&ze(e,t[n],0)>-1;);return n}function rn(t,e){for(var n=t.length;n--&&ze(e,t[n],0)>-1;);return n}var on=Ke({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),sn=Ke({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function an(t){return\"\\\\\"+ce[t]}function un(t){return ie.test(t)}function ln(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function cn(t,e){return function(n){return t(e(n))}}function fn(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var s=t[n];s!==e&&s!==a||(t[n]=a,o[i++]=n)}return o}function pn(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}function hn(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=[t,t]})),n}function dn(t){return un(t)?function(t){var e=ne.lastIndex=0;for(;ne.test(t);)++e;return e}(t):Me(t)}function gn(t){return un(t)?function(t){return t.match(ne)||[]}(t):function(t){return t.split(\"\")}(t)}function vn(t){for(var e=t.length;e--&&at.test(t.charAt(e)););return e}var mn=Ke({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"});var yn=function t(e){var n,r=(e=null==e?ge:yn.defaults(ge.Object(),e,yn.pick(ge,se))).Array,at=e.Date,Ct=e.Error,At=e.Function,St=e.Math,$t=e.Object,Et=e.RegExp,kt=e.String,Dt=e.TypeError,jt=r.prototype,Ot=At.prototype,Nt=$t.prototype,Rt=e[\"__core-js_shared__\"],It=Ot.toString,Lt=Nt.hasOwnProperty,Pt=0,qt=(n=/[^.]+$/.exec(Rt&&Rt.keys&&Rt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Ht=Nt.toString,Mt=It.call($t),Ut=ge._,Ft=Et(\"^\"+It.call(Lt).replace(it,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),zt=ye?e.Buffer:i,Bt=e.Symbol,Wt=e.Uint8Array,Gt=zt?zt.allocUnsafe:i,Vt=cn($t.getPrototypeOf,$t),Kt=$t.create,Xt=Nt.propertyIsEnumerable,Yt=jt.splice,Qt=Bt?Bt.isConcatSpreadable:i,Jt=Bt?Bt.iterator:i,Zt=Bt?Bt.toStringTag:i,ne=function(){try{var t=po($t,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ie=e.clearTimeout!==ge.clearTimeout&&e.clearTimeout,ce=at&&at.now!==ge.Date.now&&at.now,he=e.setTimeout!==ge.setTimeout&&e.setTimeout,de=St.ceil,ve=St.floor,me=$t.getOwnPropertySymbols,be=zt?zt.isBuffer:i,we=e.isFinite,Me=jt.join,Ke=cn($t.keys,$t),bn=St.max,wn=St.min,_n=at.now,xn=e.parseInt,Tn=St.random,Cn=jt.reverse,An=po(e,\"DataView\"),Sn=po(e,\"Map\"),$n=po(e,\"Promise\"),En=po(e,\"Set\"),kn=po(e,\"WeakMap\"),Dn=po($t,\"create\"),jn=kn&&new kn,On={},Nn=Ho(An),Rn=Ho(Sn),In=Ho($n),Ln=Ho(En),Pn=Ho(kn),qn=Bt?Bt.prototype:i,Hn=qn?qn.valueOf:i,Mn=qn?qn.toString:i;function Un(t){if(na(t)&&!Ws(t)&&!(t instanceof Wn)){if(t instanceof Bn)return t;if(Lt.call(t,\"__wrapped__\"))return Mo(t)}return new Bn(t)}var Fn=function(){function t(){}return function(e){if(!ea(e))return{};if(Kt)return Kt(e);t.prototype=e;var n=new t;return t.prototype=i,n}}();function zn(){}function Bn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=i}function Wn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=v,this.__views__=[]}function Gn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Kn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Xn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Kn;++e<n;)this.add(t[e])}function Yn(t){var e=this.__data__=new Vn(t);this.size=e.size}function Qn(t,e){var n=Ws(t),r=!n&&Bs(t),i=!n&&!r&&Xs(t),o=!n&&!r&&!i&&ca(t),s=n||r||i||o,a=s?Qe(t.length,kt):[],u=a.length;for(var l in t)!e&&!Lt.call(t,l)||s&&(\"length\"==l||i&&(\"offset\"==l||\"parent\"==l)||o&&(\"buffer\"==l||\"byteLength\"==l||\"byteOffset\"==l)||wo(l,u))||a.push(l);return a}function Jn(t){var e=t.length;return e?t[Xr(0,e-1)]:i}function Zn(t,e){return Lo(Di(t),ur(e,0,t.length))}function tr(t){return Lo(Di(t))}function er(t,e,n){(n!==i&&!Us(t[e],n)||n===i&&!(e in t))&&sr(t,e,n)}function nr(t,e,n){var r=t[e];Lt.call(t,e)&&Us(r,n)&&(n!==i||e in t)||sr(t,e,n)}function rr(t,e){for(var n=t.length;n--;)if(Us(t[n][0],e))return n;return-1}function ir(t,e,n,r){return hr(t,(function(t,i,o){e(r,t,n(t),o)})),r}function or(t,e){return t&&ji(e,Oa(e),t)}function sr(t,e,n){\"__proto__\"==e&&ne?ne(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ar(t,e){for(var n=-1,o=e.length,s=r(o),a=null==t;++n<o;)s[n]=a?i:$a(t,e[n]);return s}function ur(t,e,n){return t==t&&(n!==i&&(t=t<=n?t:n),e!==i&&(t=t>=e?t:e)),t}function lr(t,e,n,r,o,s){var a,u=1&e,l=2&e,c=4&e;if(n&&(a=o?n(t,r,o,s):n(t)),a!==i)return a;if(!ea(t))return t;var f=Ws(t);if(f){if(a=function(t){var e=t.length,n=new t.constructor(e);e&&\"string\"==typeof t[0]&&Lt.call(t,\"index\")&&(n.index=t.index,n.input=t.input);return n}(t),!u)return Di(t,a)}else{var p=vo(t),h=p==T||p==C;if(Xs(t))return Ci(t,u);if(p==$||p==y||h&&!o){if(a=l||h?{}:yo(t),!u)return l?function(t,e){return ji(t,go(t),e)}(t,function(t,e){return t&&ji(e,Na(e),t)}(a,t)):function(t,e){return ji(t,ho(t),e)}(t,or(a,t))}else{if(!le[p])return o?t:{};a=function(t,e,n){var r=t.constructor;switch(e){case R:return Ai(t);case w:case _:return new r(+t);case I:return function(t,e){var n=e?Ai(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case L:case P:case q:case H:case M:case U:case F:case z:case B:return Si(t,n);case A:return new r;case S:case j:return new r(t);case k:return function(t){var e=new t.constructor(t.source,gt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case D:return new r;case O:return i=t,Hn?$t(Hn.call(i)):{}}var i}(t,p,u)}}s||(s=new Yn);var d=s.get(t);if(d)return d;s.set(t,a),aa(t)?t.forEach((function(r){a.add(lr(r,e,n,r,t,s))})):ra(t)&&t.forEach((function(r,i){a.set(i,lr(r,e,n,i,t,s))}));var g=f?i:(c?l?oo:io:l?Na:Oa)(t);return ke(g||t,(function(r,i){g&&(r=t[i=r]),nr(a,i,lr(r,e,n,i,t,s))})),a}function cr(t,e,n){var r=n.length;if(null==t)return!r;for(t=$t(t);r--;){var o=n[r],s=e[o],a=t[o];if(a===i&&!(o in t)||!s(a))return!1}return!0}function fr(t,e,n){if(\"function\"!=typeof t)throw new Dt(o);return Oo((function(){t.apply(i,n)}),e)}function pr(t,e,n,r){var i=-1,o=Ne,s=!0,a=t.length,u=[],l=e.length;if(!a)return u;n&&(e=Ie(e,Ze(n))),r?(o=Re,s=!1):e.length>=200&&(o=en,s=!1,e=new Xn(e));t:for(;++i<a;){var c=t[i],f=null==n?c:n(c);if(c=r||0!==c?c:0,s&&f==f){for(var p=l;p--;)if(e[p]===f)continue t;u.push(c)}else o(e,f,r)||u.push(c)}return u}Un.templateSettings={escape:J,evaluate:Z,interpolate:tt,variable:\"\",imports:{_:Un}},Un.prototype=zn.prototype,Un.prototype.constructor=Un,Bn.prototype=Fn(zn.prototype),Bn.prototype.constructor=Bn,Wn.prototype=Fn(zn.prototype),Wn.prototype.constructor=Wn,Gn.prototype.clear=function(){this.__data__=Dn?Dn(null):{},this.size=0},Gn.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Gn.prototype.get=function(t){var e=this.__data__;if(Dn){var n=e[t];return n===s?i:n}return Lt.call(e,t)?e[t]:i},Gn.prototype.has=function(t){var e=this.__data__;return Dn?e[t]!==i:Lt.call(e,t)},Gn.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=Dn&&e===i?s:e,this},Vn.prototype.clear=function(){this.__data__=[],this.size=0},Vn.prototype.delete=function(t){var e=this.__data__,n=rr(e,t);return!(n<0)&&(n==e.length-1?e.pop():Yt.call(e,n,1),--this.size,!0)},Vn.prototype.get=function(t){var e=this.__data__,n=rr(e,t);return n<0?i:e[n][1]},Vn.prototype.has=function(t){return rr(this.__data__,t)>-1},Vn.prototype.set=function(t,e){var n=this.__data__,r=rr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Kn.prototype.clear=function(){this.size=0,this.__data__={hash:new Gn,map:new(Sn||Vn),string:new Gn}},Kn.prototype.delete=function(t){var e=co(this,t).delete(t);return this.size-=e?1:0,e},Kn.prototype.get=function(t){return co(this,t).get(t)},Kn.prototype.has=function(t){return co(this,t).has(t)},Kn.prototype.set=function(t,e){var n=co(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Xn.prototype.add=Xn.prototype.push=function(t){return this.__data__.set(t,s),this},Xn.prototype.has=function(t){return this.__data__.has(t)},Yn.prototype.clear=function(){this.__data__=new Vn,this.size=0},Yn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Yn.prototype.get=function(t){return this.__data__.get(t)},Yn.prototype.has=function(t){return this.__data__.has(t)},Yn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Vn){var r=n.__data__;if(!Sn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Kn(r)}return n.set(t,e),this.size=n.size,this};var hr=Ri(_r),dr=Ri(xr,!0);function gr(t,e){var n=!0;return hr(t,(function(t,r,i){return n=!!e(t,r,i)})),n}function vr(t,e,n){for(var r=-1,o=t.length;++r<o;){var s=t[r],a=e(s);if(null!=a&&(u===i?a==a&&!la(a):n(a,u)))var u=a,l=s}return l}function mr(t,e){var n=[];return hr(t,(function(t,r,i){e(t,r,i)&&n.push(t)})),n}function yr(t,e,n,r,i){var o=-1,s=t.length;for(n||(n=bo),i||(i=[]);++o<s;){var a=t[o];e>0&&n(a)?e>1?yr(a,e-1,n,r,i):Le(i,a):r||(i[i.length]=a)}return i}var br=Ii(),wr=Ii(!0);function _r(t,e){return t&&br(t,e,Oa)}function xr(t,e){return t&&wr(t,e,Oa)}function Tr(t,e){return Oe(e,(function(e){return Js(t[e])}))}function Cr(t,e){for(var n=0,r=(e=wi(e,t)).length;null!=t&&n<r;)t=t[qo(e[n++])];return n&&n==r?t:i}function Ar(t,e,n){var r=e(t);return Ws(t)?r:Le(r,n(t))}function Sr(t){return null==t?t===i?\"[object Undefined]\":\"[object Null]\":Zt&&Zt in $t(t)?function(t){var e=Lt.call(t,Zt),n=t[Zt];try{t[Zt]=i;var r=!0}catch(t){}var o=Ht.call(t);r&&(e?t[Zt]=n:delete t[Zt]);return o}(t):function(t){return Ht.call(t)}(t)}function $r(t,e){return t>e}function Er(t,e){return null!=t&&Lt.call(t,e)}function kr(t,e){return null!=t&&e in $t(t)}function Dr(t,e,n){for(var o=n?Re:Ne,s=t[0].length,a=t.length,u=a,l=r(a),c=1/0,f=[];u--;){var p=t[u];u&&e&&(p=Ie(p,Ze(e))),c=wn(p.length,c),l[u]=!n&&(e||s>=120&&p.length>=120)?new Xn(u&&p):i}p=t[0];var h=-1,d=l[0];t:for(;++h<s&&f.length<c;){var g=p[h],v=e?e(g):g;if(g=n||0!==g?g:0,!(d?en(d,v):o(f,v,n))){for(u=a;--u;){var m=l[u];if(!(m?en(m,v):o(t[u],v,n)))continue t}d&&d.push(v),f.push(g)}}return f}function jr(t,e,n){var r=null==(t=ko(t,e=wi(e,t)))?t:t[qo(Qo(e))];return null==r?i:$e(r,t,n)}function Or(t){return na(t)&&Sr(t)==y}function Nr(t,e,n,r,o){return t===e||(null==t||null==e||!na(t)&&!na(e)?t!=t&&e!=e:function(t,e,n,r,o,s){var a=Ws(t),u=Ws(e),l=a?b:vo(t),c=u?b:vo(e),f=(l=l==y?$:l)==$,p=(c=c==y?$:c)==$,h=l==c;if(h&&Xs(t)){if(!Xs(e))return!1;a=!0,f=!1}if(h&&!f)return s||(s=new Yn),a||ca(t)?no(t,e,n,r,o,s):function(t,e,n,r,i,o,s){switch(n){case I:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case R:return!(t.byteLength!=e.byteLength||!o(new Wt(t),new Wt(e)));case w:case _:case S:return Us(+t,+e);case x:return t.name==e.name&&t.message==e.message;case k:case j:return t==e+\"\";case A:var a=ln;case D:var u=1&r;if(a||(a=pn),t.size!=e.size&&!u)return!1;var l=s.get(t);if(l)return l==e;r|=2,s.set(t,e);var c=no(a(t),a(e),r,i,o,s);return s.delete(t),c;case O:if(Hn)return Hn.call(t)==Hn.call(e)}return!1}(t,e,l,n,r,o,s);if(!(1&n)){var d=f&&Lt.call(t,\"__wrapped__\"),g=p&&Lt.call(e,\"__wrapped__\");if(d||g){var v=d?t.value():t,m=g?e.value():e;return s||(s=new Yn),o(v,m,n,r,s)}}if(!h)return!1;return s||(s=new Yn),function(t,e,n,r,o,s){var a=1&n,u=io(t),l=u.length,c=io(e),f=c.length;if(l!=f&&!a)return!1;var p=l;for(;p--;){var h=u[p];if(!(a?h in e:Lt.call(e,h)))return!1}var d=s.get(t),g=s.get(e);if(d&&g)return d==e&&g==t;var v=!0;s.set(t,e),s.set(e,t);var m=a;for(;++p<l;){var y=t[h=u[p]],b=e[h];if(r)var w=a?r(b,y,h,e,t,s):r(y,b,h,t,e,s);if(!(w===i?y===b||o(y,b,n,r,s):w)){v=!1;break}m||(m=\"constructor\"==h)}if(v&&!m){var _=t.constructor,x=e.constructor;_==x||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof _&&_ instanceof _&&\"function\"==typeof x&&x instanceof x||(v=!1)}return s.delete(t),s.delete(e),v}(t,e,n,r,o,s)}(t,e,n,r,Nr,o))}function Rr(t,e,n,r){var o=n.length,s=o,a=!r;if(null==t)return!s;for(t=$t(t);o--;){var u=n[o];if(a&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++o<s;){var l=(u=n[o])[0],c=t[l],f=u[1];if(a&&u[2]){if(c===i&&!(l in t))return!1}else{var p=new Yn;if(r)var h=r(c,f,l,t,e,p);if(!(h===i?Nr(f,c,3,r,p):h))return!1}}return!0}function Ir(t){return!(!ea(t)||(e=t,qt&&qt in e))&&(Js(t)?Ft:yt).test(Ho(t));var e}function Lr(t){return\"function\"==typeof t?t:null==t?iu:\"object\"==typeof t?Ws(t)?Fr(t[0],t[1]):Ur(t):hu(t)}function Pr(t){if(!Ao(t))return Ke(t);var e=[];for(var n in $t(t))Lt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function qr(t){if(!ea(t))return function(t){var e=[];if(null!=t)for(var n in $t(t))e.push(n);return e}(t);var e=Ao(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Lt.call(t,r))&&n.push(r);return n}function Hr(t,e){return t<e}function Mr(t,e){var n=-1,i=Vs(t)?r(t.length):[];return hr(t,(function(t,r,o){i[++n]=e(t,r,o)})),i}function Ur(t){var e=fo(t);return 1==e.length&&e[0][2]?$o(e[0][0],e[0][1]):function(n){return n===t||Rr(n,t,e)}}function Fr(t,e){return xo(t)&&So(e)?$o(qo(t),e):function(n){var r=$a(n,t);return r===i&&r===e?Ea(n,t):Nr(e,r,3)}}function zr(t,e,n,r,o){t!==e&&br(e,(function(s,a){if(o||(o=new Yn),ea(s))!function(t,e,n,r,o,s,a){var u=Do(t,n),l=Do(e,n),c=a.get(l);if(c)return void er(t,n,c);var f=s?s(u,l,n+\"\",t,e,a):i,p=f===i;if(p){var h=Ws(l),d=!h&&Xs(l),g=!h&&!d&&ca(l);f=l,h||d||g?Ws(u)?f=u:Ks(u)?f=Di(u):d?(p=!1,f=Ci(l,!0)):g?(p=!1,f=Si(l,!0)):f=[]:oa(l)||Bs(l)?(f=u,Bs(u)?f=ya(u):ea(u)&&!Js(u)||(f=yo(l))):p=!1}p&&(a.set(l,f),o(f,l,r,s,a),a.delete(l));er(t,n,f)}(t,e,a,n,zr,r,o);else{var u=r?r(Do(t,a),s,a+\"\",t,e,o):i;u===i&&(u=s),er(t,a,u)}}),Na)}function Br(t,e){var n=t.length;if(n)return wo(e+=e<0?n:0,n)?t[e]:i}function Wr(t,e,n){e=e.length?Ie(e,(function(t){return Ws(t)?function(e){return Cr(e,1===t.length?t[0]:t)}:t})):[iu];var r=-1;e=Ie(e,Ze(lo()));var i=Mr(t,(function(t,n,i){var o=Ie(e,(function(e){return e(t)}));return{criteria:o,index:++r,value:t}}));return function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}(i,(function(t,e){return function(t,e,n){var r=-1,i=t.criteria,o=e.criteria,s=i.length,a=n.length;for(;++r<s;){var u=$i(i[r],o[r]);if(u)return r>=a?u:u*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)}))}function Gr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var s=e[r],a=Cr(t,s);n(a,s)&&ti(o,wi(s,t),a)}return o}function Vr(t,e,n,r){var i=r?Be:ze,o=-1,s=e.length,a=t;for(t===e&&(e=Di(e)),n&&(a=Ie(t,Ze(n)));++o<s;)for(var u=0,l=e[o],c=n?n(l):l;(u=i(a,c,u,r))>-1;)a!==t&&Yt.call(a,u,1),Yt.call(t,u,1);return t}function Kr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;wo(i)?Yt.call(t,i,1):pi(t,i)}}return t}function Xr(t,e){return t+ve(Tn()*(e-t+1))}function Yr(t,e){var n=\"\";if(!t||e<1||e>d)return n;do{e%2&&(n+=t),(e=ve(e/2))&&(t+=t)}while(e);return n}function Qr(t,e){return No(Eo(t,e,iu),t+\"\")}function Jr(t){return Jn(Ua(t))}function Zr(t,e){var n=Ua(t);return Lo(n,ur(e,0,n.length))}function ti(t,e,n,r){if(!ea(t))return t;for(var o=-1,s=(e=wi(e,t)).length,a=s-1,u=t;null!=u&&++o<s;){var l=qo(e[o]),c=n;if(\"__proto__\"===l||\"constructor\"===l||\"prototype\"===l)return t;if(o!=a){var f=u[l];(c=r?r(f,l,u):i)===i&&(c=ea(f)?f:wo(e[o+1])?[]:{})}nr(u,l,c),u=u[l]}return t}var ei=jn?function(t,e){return jn.set(t,e),t}:iu,ni=ne?function(t,e){return ne(t,\"toString\",{configurable:!0,enumerable:!1,value:eu(e),writable:!0})}:iu;function ri(t){return Lo(Ua(t))}function ii(t,e,n){var i=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var s=r(o);++i<o;)s[i]=t[i+e];return s}function oi(t,e){var n;return hr(t,(function(t,r,i){return!(n=e(t,r,i))})),!!n}function si(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,s=t[o];null!==s&&!la(s)&&(n?s<=e:s<e)?r=o+1:i=o}return i}return ai(t,e,iu,n)}function ai(t,e,n,r){var o=0,s=null==t?0:t.length;if(0===s)return 0;for(var a=(e=n(e))!=e,u=null===e,l=la(e),c=e===i;o<s;){var f=ve((o+s)/2),p=n(t[f]),h=p!==i,d=null===p,g=p==p,v=la(p);if(a)var m=r||g;else m=c?g&&(r||h):u?g&&h&&(r||!d):l?g&&h&&!d&&(r||!v):!d&&!v&&(r?p<=e:p<e);m?o=f+1:s=f}return wn(s,4294967294)}function ui(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var s=t[n],a=e?e(s):s;if(!n||!Us(a,u)){var u=a;o[i++]=0===s?0:s}}return o}function li(t){return\"number\"==typeof t?t:la(t)?g:+t}function ci(t){if(\"string\"==typeof t)return t;if(Ws(t))return Ie(t,ci)+\"\";if(la(t))return Mn?Mn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function fi(t,e,n){var r=-1,i=Ne,o=t.length,s=!0,a=[],u=a;if(n)s=!1,i=Re;else if(o>=200){var l=e?null:Yi(t);if(l)return pn(l);s=!1,i=en,u=new Xn}else u=e?[]:a;t:for(;++r<o;){var c=t[r],f=e?e(c):c;if(c=n||0!==c?c:0,s&&f==f){for(var p=u.length;p--;)if(u[p]===f)continue t;e&&u.push(f),a.push(c)}else i(u,f,n)||(u!==a&&u.push(f),a.push(c))}return a}function pi(t,e){return null==(t=ko(t,e=wi(e,t)))||delete t[qo(Qo(e))]}function hi(t,e,n,r){return ti(t,e,n(Cr(t,e)),r)}function di(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ii(t,r?0:o,r?o+1:i):ii(t,r?o+1:0,r?i:o)}function gi(t,e){var n=t;return n instanceof Wn&&(n=n.value()),Pe(e,(function(t,e){return e.func.apply(e.thisArg,Le([t],e.args))}),n)}function vi(t,e,n){var i=t.length;if(i<2)return i?fi(t[0]):[];for(var o=-1,s=r(i);++o<i;)for(var a=t[o],u=-1;++u<i;)u!=o&&(s[o]=pr(s[o]||a,t[u],e,n));return fi(yr(s,1),e,n)}function mi(t,e,n){for(var r=-1,o=t.length,s=e.length,a={};++r<o;){var u=r<s?e[r]:i;n(a,t[r],u)}return a}function yi(t){return Ks(t)?t:[]}function bi(t){return\"function\"==typeof t?t:iu}function wi(t,e){return Ws(t)?t:xo(t,e)?[t]:Po(ba(t))}var _i=Qr;function xi(t,e,n){var r=t.length;return n=n===i?r:n,!e&&n>=r?t:ii(t,e,n)}var Ti=ie||function(t){return ge.clearTimeout(t)};function Ci(t,e){if(e)return t.slice();var n=t.length,r=Gt?Gt(n):new t.constructor(n);return t.copy(r),r}function Ai(t){var e=new t.constructor(t.byteLength);return new Wt(e).set(new Wt(t)),e}function Si(t,e){var n=e?Ai(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function $i(t,e){if(t!==e){var n=t!==i,r=null===t,o=t==t,s=la(t),a=e!==i,u=null===e,l=e==e,c=la(e);if(!u&&!c&&!s&&t>e||s&&a&&l&&!u&&!c||r&&a&&l||!n&&l||!o)return 1;if(!r&&!s&&!c&&t<e||c&&n&&o&&!r&&!s||u&&n&&o||!a&&o||!l)return-1}return 0}function Ei(t,e,n,i){for(var o=-1,s=t.length,a=n.length,u=-1,l=e.length,c=bn(s-a,0),f=r(l+c),p=!i;++u<l;)f[u]=e[u];for(;++o<a;)(p||o<s)&&(f[n[o]]=t[o]);for(;c--;)f[u++]=t[o++];return f}function ki(t,e,n,i){for(var o=-1,s=t.length,a=-1,u=n.length,l=-1,c=e.length,f=bn(s-u,0),p=r(f+c),h=!i;++o<f;)p[o]=t[o];for(var d=o;++l<c;)p[d+l]=e[l];for(;++a<u;)(h||o<s)&&(p[d+n[a]]=t[o++]);return p}function Di(t,e){var n=-1,i=t.length;for(e||(e=r(i));++n<i;)e[n]=t[n];return e}function ji(t,e,n,r){var o=!n;n||(n={});for(var s=-1,a=e.length;++s<a;){var u=e[s],l=r?r(n[u],t[u],u,n,t):i;l===i&&(l=t[u]),o?sr(n,u,l):nr(n,u,l)}return n}function Oi(t,e){return function(n,r){var i=Ws(n)?Ee:ir,o=e?e():{};return i(n,t,lo(r,2),o)}}function Ni(t){return Qr((function(e,n){var r=-1,o=n.length,s=o>1?n[o-1]:i,a=o>2?n[2]:i;for(s=t.length>3&&\"function\"==typeof s?(o--,s):i,a&&_o(n[0],n[1],a)&&(s=o<3?i:s,o=1),e=$t(e);++r<o;){var u=n[r];u&&t(e,u,r,s)}return e}))}function Ri(t,e){return function(n,r){if(null==n)return n;if(!Vs(n))return t(n,r);for(var i=n.length,o=e?i:-1,s=$t(n);(e?o--:++o<i)&&!1!==r(s[o],o,s););return n}}function Ii(t){return function(e,n,r){for(var i=-1,o=$t(e),s=r(e),a=s.length;a--;){var u=s[t?a:++i];if(!1===n(o[u],u,o))break}return e}}function Li(t){return function(e){var n=un(e=ba(e))?gn(e):i,r=n?n[0]:e.charAt(0),o=n?xi(n,1).join(\"\"):e.slice(1);return r[t]()+o}}function Pi(t){return function(e){return Pe(Ja(Ba(e).replace(te,\"\")),t,\"\")}}function qi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Fn(t.prototype),r=t.apply(n,e);return ea(r)?r:n}}function Hi(t){return function(e,n,r){var o=$t(e);if(!Vs(e)){var s=lo(n,3);e=Oa(e),n=function(t){return s(o[t],t,o)}}var a=t(e,n,r);return a>-1?o[s?e[a]:a]:i}}function Mi(t){return ro((function(e){var n=e.length,r=n,s=Bn.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if(\"function\"!=typeof a)throw new Dt(o);if(s&&!u&&\"wrapper\"==ao(a))var u=new Bn([],!0)}for(r=u?r:n;++r<n;){var l=ao(a=e[r]),c=\"wrapper\"==l?so(a):i;u=c&&To(c[0])&&424==c[1]&&!c[4].length&&1==c[9]?u[ao(c[0])].apply(u,c[3]):1==a.length&&To(a)?u[l]():u.thru(a)}return function(){var t=arguments,r=t[0];if(u&&1==t.length&&Ws(r))return u.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}}))}function Ui(t,e,n,o,s,a,u,l,c,p){var h=e&f,d=1&e,g=2&e,v=24&e,m=512&e,y=g?i:qi(t);return function f(){for(var b=arguments.length,w=r(b),_=b;_--;)w[_]=arguments[_];if(v)var x=uo(f),T=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(w,x);if(o&&(w=Ei(w,o,s,v)),a&&(w=ki(w,a,u,v)),b-=T,v&&b<p){var C=fn(w,x);return Ki(t,e,Ui,f.placeholder,n,w,C,l,c,p-b)}var A=d?n:this,S=g?A[t]:t;return b=w.length,l?w=function(t,e){var n=t.length,r=wn(e.length,n),o=Di(t);for(;r--;){var s=e[r];t[r]=wo(s,n)?o[s]:i}return t}(w,l):m&&b>1&&w.reverse(),h&&c<b&&(w.length=c),this&&this!==ge&&this instanceof f&&(S=y||qi(S)),S.apply(A,w)}}function Fi(t,e){return function(n,r){return function(t,e,n,r){return _r(t,(function(t,i,o){e(r,n(t),i,o)})),r}(n,t,e(r),{})}}function zi(t,e){return function(n,r){var o;if(n===i&&r===i)return e;if(n!==i&&(o=n),r!==i){if(o===i)return r;\"string\"==typeof n||\"string\"==typeof r?(n=ci(n),r=ci(r)):(n=li(n),r=li(r)),o=t(n,r)}return o}}function Bi(t){return ro((function(e){return e=Ie(e,Ze(lo())),Qr((function(n){var r=this;return t(e,(function(t){return $e(t,r,n)}))}))}))}function Wi(t,e){var n=(e=e===i?\" \":ci(e)).length;if(n<2)return n?Yr(e,t):e;var r=Yr(e,de(t/dn(e)));return un(e)?xi(gn(r),0,t).join(\"\"):r.slice(0,t)}function Gi(t){return function(e,n,o){return o&&\"number\"!=typeof o&&_o(e,n,o)&&(n=o=i),e=da(e),n===i?(n=e,e=0):n=da(n),function(t,e,n,i){for(var o=-1,s=bn(de((e-t)/(n||1)),0),a=r(s);s--;)a[i?s:++o]=t,t+=n;return a}(e,n,o=o===i?e<n?1:-1:da(o),t)}}function Vi(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=ma(e),n=ma(n)),t(e,n)}}function Ki(t,e,n,r,o,s,a,u,f,p){var h=8&e;e|=h?l:c,4&(e&=~(h?c:l))||(e&=-4);var d=[t,e,o,h?s:i,h?a:i,h?i:s,h?i:a,u,f,p],g=n.apply(i,d);return To(t)&&jo(g,d),g.placeholder=r,Ro(g,t,e)}function Xi(t){var e=St[t];return function(t,n){if(t=ma(t),(n=null==n?0:wn(ga(n),292))&&we(t)){var r=(ba(t)+\"e\").split(\"e\");return+((r=(ba(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Yi=En&&1/pn(new En([,-0]))[1]==h?function(t){return new En(t)}:lu;function Qi(t){return function(e){var n=vo(e);return n==A?ln(e):n==D?hn(e):function(t,e){return Ie(e,(function(e){return[e,t[e]]}))}(e,t(e))}}function Ji(t,e,n,s,h,d,g,v){var m=2&e;if(!m&&\"function\"!=typeof t)throw new Dt(o);var y=s?s.length:0;if(y||(e&=-97,s=h=i),g=g===i?g:bn(ga(g),0),v=v===i?v:ga(v),y-=h?h.length:0,e&c){var b=s,w=h;s=h=i}var _=m?i:so(t),x=[t,e,n,s,h,b,w,d,g,v];if(_&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,s=r==f&&8==n||r==f&&n==p&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!s)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var u=e[3];if(u){var l=t[3];t[3]=l?Ei(l,u,e[4]):u,t[4]=l?fn(t[3],a):e[4]}(u=e[5])&&(l=t[5],t[5]=l?ki(l,u,e[6]):u,t[6]=l?fn(t[5],a):e[6]);(u=e[7])&&(t[7]=u);r&f&&(t[8]=null==t[8]?e[8]:wn(t[8],e[8]));null==t[9]&&(t[9]=e[9]);t[0]=e[0],t[1]=i}(x,_),t=x[0],e=x[1],n=x[2],s=x[3],h=x[4],!(v=x[9]=x[9]===i?m?0:t.length:bn(x[9]-y,0))&&24&e&&(e&=-25),e&&1!=e)T=8==e||e==u?function(t,e,n){var o=qi(t);return function s(){for(var a=arguments.length,u=r(a),l=a,c=uo(s);l--;)u[l]=arguments[l];var f=a<3&&u[0]!==c&&u[a-1]!==c?[]:fn(u,c);return(a-=f.length)<n?Ki(t,e,Ui,s.placeholder,i,u,f,i,i,n-a):$e(this&&this!==ge&&this instanceof s?o:t,this,u)}}(t,e,v):e!=l&&33!=e||h.length?Ui.apply(i,x):function(t,e,n,i){var o=1&e,s=qi(t);return function e(){for(var a=-1,u=arguments.length,l=-1,c=i.length,f=r(c+u),p=this&&this!==ge&&this instanceof e?s:t;++l<c;)f[l]=i[l];for(;u--;)f[l++]=arguments[++a];return $e(p,o?n:this,f)}}(t,e,n,s);else var T=function(t,e,n){var r=1&e,i=qi(t);return function e(){return(this&&this!==ge&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return Ro((_?ei:jo)(T,x),t,e)}function Zi(t,e,n,r){return t===i||Us(t,Nt[n])&&!Lt.call(r,n)?e:t}function to(t,e,n,r,o,s){return ea(t)&&ea(e)&&(s.set(e,t),zr(t,e,i,to,s),s.delete(e)),t}function eo(t){return oa(t)?i:t}function no(t,e,n,r,o,s){var a=1&n,u=t.length,l=e.length;if(u!=l&&!(a&&l>u))return!1;var c=s.get(t),f=s.get(e);if(c&&f)return c==e&&f==t;var p=-1,h=!0,d=2&n?new Xn:i;for(s.set(t,e),s.set(e,t);++p<u;){var g=t[p],v=e[p];if(r)var m=a?r(v,g,p,e,t,s):r(g,v,p,t,e,s);if(m!==i){if(m)continue;h=!1;break}if(d){if(!He(e,(function(t,e){if(!en(d,e)&&(g===t||o(g,t,n,r,s)))return d.push(e)}))){h=!1;break}}else if(g!==v&&!o(g,v,n,r,s)){h=!1;break}}return s.delete(t),s.delete(e),h}function ro(t){return No(Eo(t,i,Go),t+\"\")}function io(t){return Ar(t,Oa,ho)}function oo(t){return Ar(t,Na,go)}var so=jn?function(t){return jn.get(t)}:lu;function ao(t){for(var e=t.name+\"\",n=On[e],r=Lt.call(On,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function uo(t){return(Lt.call(Un,\"placeholder\")?Un:t).placeholder}function lo(){var t=Un.iteratee||ou;return t=t===ou?Lr:t,arguments.length?t(arguments[0],arguments[1]):t}function co(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function fo(t){for(var e=Oa(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,So(i)]}return e}function po(t,e){var n=function(t,e){return null==t?i:t[e]}(t,e);return Ir(n)?n:i}var ho=me?function(t){return null==t?[]:(t=$t(t),Oe(me(t),(function(e){return Xt.call(t,e)})))}:vu,go=me?function(t){for(var e=[];t;)Le(e,ho(t)),t=Vt(t);return e}:vu,vo=Sr;function mo(t,e,n){for(var r=-1,i=(e=wi(e,t)).length,o=!1;++r<i;){var s=qo(e[r]);if(!(o=null!=t&&n(t,s)))break;t=t[s]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&ta(i)&&wo(s,i)&&(Ws(t)||Bs(t))}function yo(t){return\"function\"!=typeof t.constructor||Ao(t)?{}:Fn(Vt(t))}function bo(t){return Ws(t)||Bs(t)||!!(Qt&&t&&t[Qt])}function wo(t,e){var n=typeof t;return!!(e=null==e?d:e)&&(\"number\"==n||\"symbol\"!=n&&wt.test(t))&&t>-1&&t%1==0&&t<e}function _o(t,e,n){if(!ea(n))return!1;var r=typeof e;return!!(\"number\"==r?Vs(n)&&wo(e,n.length):\"string\"==r&&e in n)&&Us(n[e],t)}function xo(t,e){if(Ws(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!la(t))||(nt.test(t)||!et.test(t)||null!=e&&t in $t(e))}function To(t){var e=ao(t),n=Un[e];if(\"function\"!=typeof n||!(e in Wn.prototype))return!1;if(t===n)return!0;var r=so(n);return!!r&&t===r[0]}(An&&vo(new An(new ArrayBuffer(1)))!=I||Sn&&vo(new Sn)!=A||$n&&vo($n.resolve())!=E||En&&vo(new En)!=D||kn&&vo(new kn)!=N)&&(vo=function(t){var e=Sr(t),n=e==$?t.constructor:i,r=n?Ho(n):\"\";if(r)switch(r){case Nn:return I;case Rn:return A;case In:return E;case Ln:return D;case Pn:return N}return e});var Co=Rt?Js:mu;function Ao(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Nt)}function So(t){return t==t&&!ea(t)}function $o(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==i||t in $t(n)))}}function Eo(t,e,n){return e=bn(e===i?t.length-1:e,0),function(){for(var i=arguments,o=-1,s=bn(i.length-e,0),a=r(s);++o<s;)a[o]=i[e+o];o=-1;for(var u=r(e+1);++o<e;)u[o]=i[o];return u[e]=n(a),$e(t,this,u)}}function ko(t,e){return e.length<2?t:Cr(t,ii(e,0,-1))}function Do(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var jo=Io(ei),Oo=he||function(t,e){return ge.setTimeout(t,e)},No=Io(ni);function Ro(t,e,n){var r=e+\"\";return No(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(ut,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return ke(m,(function(n){var r=\"_.\"+n[0];e&n[1]&&!Ne(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(lt);return e?e[1].split(ct):[]}(r),n)))}function Io(t){var e=0,n=0;return function(){var r=_n(),o=16-(r-n);if(n=r,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(i,arguments)}}function Lo(t,e){var n=-1,r=t.length,o=r-1;for(e=e===i?r:e;++n<e;){var s=Xr(n,o),a=t[s];t[s]=t[n],t[n]=a}return t.length=e,t}var Po=function(t){var e=Is(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(rt,(function(t,n,r,i){e.push(r?i.replace(ht,\"$1\"):n||t)})),e}));function qo(t){if(\"string\"==typeof t||la(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Ho(t){if(null!=t){try{return It.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Mo(t){if(t instanceof Wn)return t.clone();var e=new Bn(t.__wrapped__,t.__chain__);return e.__actions__=Di(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Uo=Qr((function(t,e){return Ks(t)?pr(t,yr(e,1,Ks,!0)):[]})),Fo=Qr((function(t,e){var n=Qo(e);return Ks(n)&&(n=i),Ks(t)?pr(t,yr(e,1,Ks,!0),lo(n,2)):[]})),zo=Qr((function(t,e){var n=Qo(e);return Ks(n)&&(n=i),Ks(t)?pr(t,yr(e,1,Ks,!0),i,n):[]}));function Bo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ga(n);return i<0&&(i=bn(r+i,0)),Fe(t,lo(e,3),i)}function Wo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=r-1;return n!==i&&(o=ga(n),o=n<0?bn(r+o,0):wn(o,r-1)),Fe(t,lo(e,3),o,!0)}function Go(t){return(null==t?0:t.length)?yr(t,1):[]}function Vo(t){return t&&t.length?t[0]:i}var Ko=Qr((function(t){var e=Ie(t,yi);return e.length&&e[0]===t[0]?Dr(e):[]})),Xo=Qr((function(t){var e=Qo(t),n=Ie(t,yi);return e===Qo(n)?e=i:n.pop(),n.length&&n[0]===t[0]?Dr(n,lo(e,2)):[]})),Yo=Qr((function(t){var e=Qo(t),n=Ie(t,yi);return(e=\"function\"==typeof e?e:i)&&n.pop(),n.length&&n[0]===t[0]?Dr(n,i,e):[]}));function Qo(t){var e=null==t?0:t.length;return e?t[e-1]:i}var Jo=Qr(Zo);function Zo(t,e){return t&&t.length&&e&&e.length?Vr(t,e):t}var ts=ro((function(t,e){var n=null==t?0:t.length,r=ar(t,e);return Kr(t,Ie(e,(function(t){return wo(t,n)?+t:t})).sort($i)),r}));function es(t){return null==t?t:Cn.call(t)}var ns=Qr((function(t){return fi(yr(t,1,Ks,!0))})),rs=Qr((function(t){var e=Qo(t);return Ks(e)&&(e=i),fi(yr(t,1,Ks,!0),lo(e,2))})),is=Qr((function(t){var e=Qo(t);return e=\"function\"==typeof e?e:i,fi(yr(t,1,Ks,!0),i,e)}));function os(t){if(!t||!t.length)return[];var e=0;return t=Oe(t,(function(t){if(Ks(t))return e=bn(t.length,e),!0})),Qe(e,(function(e){return Ie(t,Ve(e))}))}function ss(t,e){if(!t||!t.length)return[];var n=os(t);return null==e?n:Ie(n,(function(t){return $e(e,i,t)}))}var as=Qr((function(t,e){return Ks(t)?pr(t,e):[]})),us=Qr((function(t){return vi(Oe(t,Ks))})),ls=Qr((function(t){var e=Qo(t);return Ks(e)&&(e=i),vi(Oe(t,Ks),lo(e,2))})),cs=Qr((function(t){var e=Qo(t);return e=\"function\"==typeof e?e:i,vi(Oe(t,Ks),i,e)})),fs=Qr(os);var ps=Qr((function(t){var e=t.length,n=e>1?t[e-1]:i;return n=\"function\"==typeof n?(t.pop(),n):i,ss(t,n)}));function hs(t){var e=Un(t);return e.__chain__=!0,e}function ds(t,e){return e(t)}var gs=ro((function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return ar(e,t)};return!(e>1||this.__actions__.length)&&r instanceof Wn&&wo(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:ds,args:[o],thisArg:i}),new Bn(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(i),t}))):this.thru(o)}));var vs=Oi((function(t,e,n){Lt.call(t,n)?++t[n]:sr(t,n,1)}));var ms=Hi(Bo),ys=Hi(Wo);function bs(t,e){return(Ws(t)?ke:hr)(t,lo(e,3))}function ws(t,e){return(Ws(t)?De:dr)(t,lo(e,3))}var _s=Oi((function(t,e,n){Lt.call(t,n)?t[n].push(e):sr(t,n,[e])}));var xs=Qr((function(t,e,n){var i=-1,o=\"function\"==typeof e,s=Vs(t)?r(t.length):[];return hr(t,(function(t){s[++i]=o?$e(e,t,n):jr(t,e,n)})),s})),Ts=Oi((function(t,e,n){sr(t,n,e)}));function Cs(t,e){return(Ws(t)?Ie:Mr)(t,lo(e,3))}var As=Oi((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]}));var Ss=Qr((function(t,e){if(null==t)return[];var n=e.length;return n>1&&_o(t,e[0],e[1])?e=[]:n>2&&_o(e[0],e[1],e[2])&&(e=[e[0]]),Wr(t,yr(e,1),[])})),$s=ce||function(){return ge.Date.now()};function Es(t,e,n){return e=n?i:e,e=t&&null==e?t.length:e,Ji(t,f,i,i,i,i,e)}function ks(t,e){var n;if(\"function\"!=typeof e)throw new Dt(o);return t=ga(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=i),n}}var Ds=Qr((function(t,e,n){var r=1;if(n.length){var i=fn(n,uo(Ds));r|=l}return Ji(t,r,e,n,i)})),js=Qr((function(t,e,n){var r=3;if(n.length){var i=fn(n,uo(js));r|=l}return Ji(e,r,t,n,i)}));function Os(t,e,n){var r,s,a,u,l,c,f=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new Dt(o);function g(e){var n=r,o=s;return r=s=i,f=e,u=t.apply(o,n)}function v(t){var n=t-c;return c===i||n>=e||n<0||h&&t-f>=a}function m(){var t=$s();if(v(t))return y(t);l=Oo(m,function(t){var n=e-(t-c);return h?wn(n,a-(t-f)):n}(t))}function y(t){return l=i,d&&r?g(t):(r=s=i,u)}function b(){var t=$s(),n=v(t);if(r=arguments,s=this,c=t,n){if(l===i)return function(t){return f=t,l=Oo(m,e),p?g(t):u}(c);if(h)return Ti(l),l=Oo(m,e),g(c)}return l===i&&(l=Oo(m,e)),u}return e=ma(e)||0,ea(n)&&(p=!!n.leading,a=(h=\"maxWait\"in n)?bn(ma(n.maxWait)||0,e):a,d=\"trailing\"in n?!!n.trailing:d),b.cancel=function(){l!==i&&Ti(l),f=0,r=c=s=l=i},b.flush=function(){return l===i?u:y($s())},b}var Ns=Qr((function(t,e){return fr(t,1,e)})),Rs=Qr((function(t,e,n){return fr(t,ma(e)||0,n)}));function Is(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Dt(o);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=t.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Is.Cache||Kn),n}function Ls(t){if(\"function\"!=typeof t)throw new Dt(o);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Is.Cache=Kn;var Ps=_i((function(t,e){var n=(e=1==e.length&&Ws(e[0])?Ie(e[0],Ze(lo())):Ie(yr(e,1),Ze(lo()))).length;return Qr((function(r){for(var i=-1,o=wn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return $e(t,this,r)}))})),qs=Qr((function(t,e){var n=fn(e,uo(qs));return Ji(t,l,i,e,n)})),Hs=Qr((function(t,e){var n=fn(e,uo(Hs));return Ji(t,c,i,e,n)})),Ms=ro((function(t,e){return Ji(t,p,i,i,i,e)}));function Us(t,e){return t===e||t!=t&&e!=e}var Fs=Vi($r),zs=Vi((function(t,e){return t>=e})),Bs=Or(function(){return arguments}())?Or:function(t){return na(t)&&Lt.call(t,\"callee\")&&!Xt.call(t,\"callee\")},Ws=r.isArray,Gs=_e?Ze(_e):function(t){return na(t)&&Sr(t)==R};function Vs(t){return null!=t&&ta(t.length)&&!Js(t)}function Ks(t){return na(t)&&Vs(t)}var Xs=be||mu,Ys=xe?Ze(xe):function(t){return na(t)&&Sr(t)==_};function Qs(t){if(!na(t))return!1;var e=Sr(t);return e==x||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!oa(t)}function Js(t){if(!ea(t))return!1;var e=Sr(t);return e==T||e==C||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Zs(t){return\"number\"==typeof t&&t==ga(t)}function ta(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=d}function ea(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function na(t){return null!=t&&\"object\"==typeof t}var ra=Te?Ze(Te):function(t){return na(t)&&vo(t)==A};function ia(t){return\"number\"==typeof t||na(t)&&Sr(t)==S}function oa(t){if(!na(t)||Sr(t)!=$)return!1;var e=Vt(t);if(null===e)return!0;var n=Lt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&It.call(n)==Mt}var sa=Ce?Ze(Ce):function(t){return na(t)&&Sr(t)==k};var aa=Ae?Ze(Ae):function(t){return na(t)&&vo(t)==D};function ua(t){return\"string\"==typeof t||!Ws(t)&&na(t)&&Sr(t)==j}function la(t){return\"symbol\"==typeof t||na(t)&&Sr(t)==O}var ca=Se?Ze(Se):function(t){return na(t)&&ta(t.length)&&!!ue[Sr(t)]};var fa=Vi(Hr),pa=Vi((function(t,e){return t<=e}));function ha(t){if(!t)return[];if(Vs(t))return ua(t)?gn(t):Di(t);if(Jt&&t[Jt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Jt]());var e=vo(t);return(e==A?ln:e==D?pn:Ua)(t)}function da(t){return t?(t=ma(t))===h||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ga(t){var e=da(t),n=e%1;return e==e?n?e-n:e:0}function va(t){return t?ur(ga(t),0,v):0}function ma(t){if(\"number\"==typeof t)return t;if(la(t))return g;if(ea(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=ea(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Je(t);var n=mt.test(t);return n||bt.test(t)?pe(t.slice(2),n?2:8):vt.test(t)?g:+t}function ya(t){return ji(t,Na(t))}function ba(t){return null==t?\"\":ci(t)}var wa=Ni((function(t,e){if(Ao(e)||Vs(e))ji(e,Oa(e),t);else for(var n in e)Lt.call(e,n)&&nr(t,n,e[n])})),_a=Ni((function(t,e){ji(e,Na(e),t)})),xa=Ni((function(t,e,n,r){ji(e,Na(e),t,r)})),Ta=Ni((function(t,e,n,r){ji(e,Oa(e),t,r)})),Ca=ro(ar);var Aa=Qr((function(t,e){t=$t(t);var n=-1,r=e.length,o=r>2?e[2]:i;for(o&&_o(e[0],e[1],o)&&(r=1);++n<r;)for(var s=e[n],a=Na(s),u=-1,l=a.length;++u<l;){var c=a[u],f=t[c];(f===i||Us(f,Nt[c])&&!Lt.call(t,c))&&(t[c]=s[c])}return t})),Sa=Qr((function(t){return t.push(i,to),$e(Ia,i,t)}));function $a(t,e,n){var r=null==t?i:Cr(t,e);return r===i?n:r}function Ea(t,e){return null!=t&&mo(t,e,kr)}var ka=Fi((function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ht.call(e)),t[e]=n}),eu(iu)),Da=Fi((function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ht.call(e)),Lt.call(t,e)?t[e].push(n):t[e]=[n]}),lo),ja=Qr(jr);function Oa(t){return Vs(t)?Qn(t):Pr(t)}function Na(t){return Vs(t)?Qn(t,!0):qr(t)}var Ra=Ni((function(t,e,n){zr(t,e,n)})),Ia=Ni((function(t,e,n,r){zr(t,e,n,r)})),La=ro((function(t,e){var n={};if(null==t)return n;var r=!1;e=Ie(e,(function(e){return e=wi(e,t),r||(r=e.length>1),e})),ji(t,oo(t),n),r&&(n=lr(n,7,eo));for(var i=e.length;i--;)pi(n,e[i]);return n}));var Pa=ro((function(t,e){return null==t?{}:function(t,e){return Gr(t,e,(function(e,n){return Ea(t,n)}))}(t,e)}));function qa(t,e){if(null==t)return{};var n=Ie(oo(t),(function(t){return[t]}));return e=lo(e),Gr(t,n,(function(t,n){return e(t,n[0])}))}var Ha=Qi(Oa),Ma=Qi(Na);function Ua(t){return null==t?[]:tn(t,Oa(t))}var Fa=Pi((function(t,e,n){return e=e.toLowerCase(),t+(n?za(e):e)}));function za(t){return Qa(ba(t).toLowerCase())}function Ba(t){return(t=ba(t))&&t.replace(_t,on).replace(ee,\"\")}var Wa=Pi((function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()})),Ga=Pi((function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()})),Va=Li(\"toLowerCase\");var Ka=Pi((function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}));var Xa=Pi((function(t,e,n){return t+(n?\" \":\"\")+Qa(e)}));var Ya=Pi((function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()})),Qa=Li(\"toUpperCase\");function Ja(t,e,n){return t=ba(t),(e=n?i:e)===i?function(t){return oe.test(t)}(t)?function(t){return t.match(re)||[]}(t):function(t){return t.match(ft)||[]}(t):t.match(e)||[]}var Za=Qr((function(t,e){try{return $e(t,i,e)}catch(t){return Qs(t)?t:new Ct(t)}})),tu=ro((function(t,e){return ke(e,(function(e){e=qo(e),sr(t,e,Ds(t[e],t))})),t}));function eu(t){return function(){return t}}var nu=Mi(),ru=Mi(!0);function iu(t){return t}function ou(t){return Lr(\"function\"==typeof t?t:lr(t,1))}var su=Qr((function(t,e){return function(n){return jr(n,t,e)}})),au=Qr((function(t,e){return function(n){return jr(t,n,e)}}));function uu(t,e,n){var r=Oa(e),i=Tr(e,r);null!=n||ea(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Tr(e,Oa(e)));var o=!(ea(n)&&\"chain\"in n&&!n.chain),s=Js(t);return ke(i,(function(n){var r=e[n];t[n]=r,s&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Di(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Le([this.value()],arguments))})})),t}function lu(){}var cu=Bi(Ie),fu=Bi(je),pu=Bi(He);function hu(t){return xo(t)?Ve(qo(t)):function(t){return function(e){return Cr(e,t)}}(t)}var du=Gi(),gu=Gi(!0);function vu(){return[]}function mu(){return!1}var yu=zi((function(t,e){return t+e}),0),bu=Xi(\"ceil\"),wu=zi((function(t,e){return t/e}),1),_u=Xi(\"floor\");var xu,Tu=zi((function(t,e){return t*e}),1),Cu=Xi(\"round\"),Au=zi((function(t,e){return t-e}),0);return Un.after=function(t,e){if(\"function\"!=typeof e)throw new Dt(o);return t=ga(t),function(){if(--t<1)return e.apply(this,arguments)}},Un.ary=Es,Un.assign=wa,Un.assignIn=_a,Un.assignInWith=xa,Un.assignWith=Ta,Un.at=Ca,Un.before=ks,Un.bind=Ds,Un.bindAll=tu,Un.bindKey=js,Un.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Ws(t)?t:[t]},Un.chain=hs,Un.chunk=function(t,e,n){e=(n?_o(t,e,n):e===i)?1:bn(ga(e),0);var o=null==t?0:t.length;if(!o||e<1)return[];for(var s=0,a=0,u=r(de(o/e));s<o;)u[a++]=ii(t,s,s+=e);return u},Un.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Un.concat=function(){var t=arguments.length;if(!t)return[];for(var e=r(t-1),n=arguments[0],i=t;i--;)e[i-1]=arguments[i];return Le(Ws(n)?Di(n):[n],yr(e,1))},Un.cond=function(t){var e=null==t?0:t.length,n=lo();return t=e?Ie(t,(function(t){if(\"function\"!=typeof t[1])throw new Dt(o);return[n(t[0]),t[1]]})):[],Qr((function(n){for(var r=-1;++r<e;){var i=t[r];if($e(i[0],this,n))return $e(i[1],this,n)}}))},Un.conforms=function(t){return function(t){var e=Oa(t);return function(n){return cr(n,t,e)}}(lr(t,1))},Un.constant=eu,Un.countBy=vs,Un.create=function(t,e){var n=Fn(t);return null==e?n:or(n,e)},Un.curry=function t(e,n,r){var o=Ji(e,8,i,i,i,i,i,n=r?i:n);return o.placeholder=t.placeholder,o},Un.curryRight=function t(e,n,r){var o=Ji(e,u,i,i,i,i,i,n=r?i:n);return o.placeholder=t.placeholder,o},Un.debounce=Os,Un.defaults=Aa,Un.defaultsDeep=Sa,Un.defer=Ns,Un.delay=Rs,Un.difference=Uo,Un.differenceBy=Fo,Un.differenceWith=zo,Un.drop=function(t,e,n){var r=null==t?0:t.length;return r?ii(t,(e=n||e===i?1:ga(e))<0?0:e,r):[]},Un.dropRight=function(t,e,n){var r=null==t?0:t.length;return r?ii(t,0,(e=r-(e=n||e===i?1:ga(e)))<0?0:e):[]},Un.dropRightWhile=function(t,e){return t&&t.length?di(t,lo(e,3),!0,!0):[]},Un.dropWhile=function(t,e){return t&&t.length?di(t,lo(e,3),!0):[]},Un.fill=function(t,e,n,r){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&_o(t,e,n)&&(n=0,r=o),function(t,e,n,r){var o=t.length;for((n=ga(n))<0&&(n=-n>o?0:o+n),(r=r===i||r>o?o:ga(r))<0&&(r+=o),r=n>r?0:va(r);n<r;)t[n++]=e;return t}(t,e,n,r)):[]},Un.filter=function(t,e){return(Ws(t)?Oe:mr)(t,lo(e,3))},Un.flatMap=function(t,e){return yr(Cs(t,e),1)},Un.flatMapDeep=function(t,e){return yr(Cs(t,e),h)},Un.flatMapDepth=function(t,e,n){return n=n===i?1:ga(n),yr(Cs(t,e),n)},Un.flatten=Go,Un.flattenDeep=function(t){return(null==t?0:t.length)?yr(t,h):[]},Un.flattenDepth=function(t,e){return(null==t?0:t.length)?yr(t,e=e===i?1:ga(e)):[]},Un.flip=function(t){return Ji(t,512)},Un.flow=nu,Un.flowRight=ru,Un.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r},Un.functions=function(t){return null==t?[]:Tr(t,Oa(t))},Un.functionsIn=function(t){return null==t?[]:Tr(t,Na(t))},Un.groupBy=_s,Un.initial=function(t){return(null==t?0:t.length)?ii(t,0,-1):[]},Un.intersection=Ko,Un.intersectionBy=Xo,Un.intersectionWith=Yo,Un.invert=ka,Un.invertBy=Da,Un.invokeMap=xs,Un.iteratee=ou,Un.keyBy=Ts,Un.keys=Oa,Un.keysIn=Na,Un.map=Cs,Un.mapKeys=function(t,e){var n={};return e=lo(e,3),_r(t,(function(t,r,i){sr(n,e(t,r,i),t)})),n},Un.mapValues=function(t,e){var n={};return e=lo(e,3),_r(t,(function(t,r,i){sr(n,r,e(t,r,i))})),n},Un.matches=function(t){return Ur(lr(t,1))},Un.matchesProperty=function(t,e){return Fr(t,lr(e,1))},Un.memoize=Is,Un.merge=Ra,Un.mergeWith=Ia,Un.method=su,Un.methodOf=au,Un.mixin=uu,Un.negate=Ls,Un.nthArg=function(t){return t=ga(t),Qr((function(e){return Br(e,t)}))},Un.omit=La,Un.omitBy=function(t,e){return qa(t,Ls(lo(e)))},Un.once=function(t){return ks(2,t)},Un.orderBy=function(t,e,n,r){return null==t?[]:(Ws(e)||(e=null==e?[]:[e]),Ws(n=r?i:n)||(n=null==n?[]:[n]),Wr(t,e,n))},Un.over=cu,Un.overArgs=Ps,Un.overEvery=fu,Un.overSome=pu,Un.partial=qs,Un.partialRight=Hs,Un.partition=As,Un.pick=Pa,Un.pickBy=qa,Un.property=hu,Un.propertyOf=function(t){return function(e){return null==t?i:Cr(t,e)}},Un.pull=Jo,Un.pullAll=Zo,Un.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?Vr(t,e,lo(n,2)):t},Un.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?Vr(t,e,i,n):t},Un.pullAt=ts,Un.range=du,Un.rangeRight=gu,Un.rearg=Ms,Un.reject=function(t,e){return(Ws(t)?Oe:mr)(t,Ls(lo(e,3)))},Un.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=lo(e,3);++r<o;){var s=t[r];e(s,r,t)&&(n.push(s),i.push(r))}return Kr(t,i),n},Un.rest=function(t,e){if(\"function\"!=typeof t)throw new Dt(o);return Qr(t,e=e===i?e:ga(e))},Un.reverse=es,Un.sampleSize=function(t,e,n){return e=(n?_o(t,e,n):e===i)?1:ga(e),(Ws(t)?Zn:Zr)(t,e)},Un.set=function(t,e,n){return null==t?t:ti(t,e,n)},Un.setWith=function(t,e,n,r){return r=\"function\"==typeof r?r:i,null==t?t:ti(t,e,n,r)},Un.shuffle=function(t){return(Ws(t)?tr:ri)(t)},Un.slice=function(t,e,n){var r=null==t?0:t.length;return r?(n&&\"number\"!=typeof n&&_o(t,e,n)?(e=0,n=r):(e=null==e?0:ga(e),n=n===i?r:ga(n)),ii(t,e,n)):[]},Un.sortBy=Ss,Un.sortedUniq=function(t){return t&&t.length?ui(t):[]},Un.sortedUniqBy=function(t,e){return t&&t.length?ui(t,lo(e,2)):[]},Un.split=function(t,e,n){return n&&\"number\"!=typeof n&&_o(t,e,n)&&(e=n=i),(n=n===i?v:n>>>0)?(t=ba(t))&&(\"string\"==typeof e||null!=e&&!sa(e))&&!(e=ci(e))&&un(t)?xi(gn(t),0,n):t.split(e,n):[]},Un.spread=function(t,e){if(\"function\"!=typeof t)throw new Dt(o);return e=null==e?0:bn(ga(e),0),Qr((function(n){var r=n[e],i=xi(n,0,e);return r&&Le(i,r),$e(t,this,i)}))},Un.tail=function(t){var e=null==t?0:t.length;return e?ii(t,1,e):[]},Un.take=function(t,e,n){return t&&t.length?ii(t,0,(e=n||e===i?1:ga(e))<0?0:e):[]},Un.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?ii(t,(e=r-(e=n||e===i?1:ga(e)))<0?0:e,r):[]},Un.takeRightWhile=function(t,e){return t&&t.length?di(t,lo(e,3),!1,!0):[]},Un.takeWhile=function(t,e){return t&&t.length?di(t,lo(e,3)):[]},Un.tap=function(t,e){return e(t),t},Un.throttle=function(t,e,n){var r=!0,i=!0;if(\"function\"!=typeof t)throw new Dt(o);return ea(n)&&(r=\"leading\"in n?!!n.leading:r,i=\"trailing\"in n?!!n.trailing:i),Os(t,e,{leading:r,maxWait:e,trailing:i})},Un.thru=ds,Un.toArray=ha,Un.toPairs=Ha,Un.toPairsIn=Ma,Un.toPath=function(t){return Ws(t)?Ie(t,qo):la(t)?[t]:Di(Po(ba(t)))},Un.toPlainObject=ya,Un.transform=function(t,e,n){var r=Ws(t),i=r||Xs(t)||ca(t);if(e=lo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:ea(t)&&Js(o)?Fn(Vt(t)):{}}return(i?ke:_r)(t,(function(t,r,i){return e(n,t,r,i)})),n},Un.unary=function(t){return Es(t,1)},Un.union=ns,Un.unionBy=rs,Un.unionWith=is,Un.uniq=function(t){return t&&t.length?fi(t):[]},Un.uniqBy=function(t,e){return t&&t.length?fi(t,lo(e,2)):[]},Un.uniqWith=function(t,e){return e=\"function\"==typeof e?e:i,t&&t.length?fi(t,i,e):[]},Un.unset=function(t,e){return null==t||pi(t,e)},Un.unzip=os,Un.unzipWith=ss,Un.update=function(t,e,n){return null==t?t:hi(t,e,bi(n))},Un.updateWith=function(t,e,n,r){return r=\"function\"==typeof r?r:i,null==t?t:hi(t,e,bi(n),r)},Un.values=Ua,Un.valuesIn=function(t){return null==t?[]:tn(t,Na(t))},Un.without=as,Un.words=Ja,Un.wrap=function(t,e){return qs(bi(e),t)},Un.xor=us,Un.xorBy=ls,Un.xorWith=cs,Un.zip=fs,Un.zipObject=function(t,e){return mi(t||[],e||[],nr)},Un.zipObjectDeep=function(t,e){return mi(t||[],e||[],ti)},Un.zipWith=ps,Un.entries=Ha,Un.entriesIn=Ma,Un.extend=_a,Un.extendWith=xa,uu(Un,Un),Un.add=yu,Un.attempt=Za,Un.camelCase=Fa,Un.capitalize=za,Un.ceil=bu,Un.clamp=function(t,e,n){return n===i&&(n=e,e=i),n!==i&&(n=(n=ma(n))==n?n:0),e!==i&&(e=(e=ma(e))==e?e:0),ur(ma(t),e,n)},Un.clone=function(t){return lr(t,4)},Un.cloneDeep=function(t){return lr(t,5)},Un.cloneDeepWith=function(t,e){return lr(t,5,e=\"function\"==typeof e?e:i)},Un.cloneWith=function(t,e){return lr(t,4,e=\"function\"==typeof e?e:i)},Un.conformsTo=function(t,e){return null==e||cr(t,e,Oa(e))},Un.deburr=Ba,Un.defaultTo=function(t,e){return null==t||t!=t?e:t},Un.divide=wu,Un.endsWith=function(t,e,n){t=ba(t),e=ci(e);var r=t.length,o=n=n===i?r:ur(ga(n),0,r);return(n-=e.length)>=0&&t.slice(n,o)==e},Un.eq=Us,Un.escape=function(t){return(t=ba(t))&&Q.test(t)?t.replace(X,sn):t},Un.escapeRegExp=function(t){return(t=ba(t))&&ot.test(t)?t.replace(it,\"\\\\$&\"):t},Un.every=function(t,e,n){var r=Ws(t)?je:gr;return n&&_o(t,e,n)&&(e=i),r(t,lo(e,3))},Un.find=ms,Un.findIndex=Bo,Un.findKey=function(t,e){return Ue(t,lo(e,3),_r)},Un.findLast=ys,Un.findLastIndex=Wo,Un.findLastKey=function(t,e){return Ue(t,lo(e,3),xr)},Un.floor=_u,Un.forEach=bs,Un.forEachRight=ws,Un.forIn=function(t,e){return null==t?t:br(t,lo(e,3),Na)},Un.forInRight=function(t,e){return null==t?t:wr(t,lo(e,3),Na)},Un.forOwn=function(t,e){return t&&_r(t,lo(e,3))},Un.forOwnRight=function(t,e){return t&&xr(t,lo(e,3))},Un.get=$a,Un.gt=Fs,Un.gte=zs,Un.has=function(t,e){return null!=t&&mo(t,e,Er)},Un.hasIn=Ea,Un.head=Vo,Un.identity=iu,Un.includes=function(t,e,n,r){t=Vs(t)?t:Ua(t),n=n&&!r?ga(n):0;var i=t.length;return n<0&&(n=bn(i+n,0)),ua(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&ze(t,e,n)>-1},Un.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ga(n);return i<0&&(i=bn(r+i,0)),ze(t,e,i)},Un.inRange=function(t,e,n){return e=da(e),n===i?(n=e,e=0):n=da(n),function(t,e,n){return t>=wn(e,n)&&t<bn(e,n)}(t=ma(t),e,n)},Un.invoke=ja,Un.isArguments=Bs,Un.isArray=Ws,Un.isArrayBuffer=Gs,Un.isArrayLike=Vs,Un.isArrayLikeObject=Ks,Un.isBoolean=function(t){return!0===t||!1===t||na(t)&&Sr(t)==w},Un.isBuffer=Xs,Un.isDate=Ys,Un.isElement=function(t){return na(t)&&1===t.nodeType&&!oa(t)},Un.isEmpty=function(t){if(null==t)return!0;if(Vs(t)&&(Ws(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Xs(t)||ca(t)||Bs(t)))return!t.length;var e=vo(t);if(e==A||e==D)return!t.size;if(Ao(t))return!Pr(t).length;for(var n in t)if(Lt.call(t,n))return!1;return!0},Un.isEqual=function(t,e){return Nr(t,e)},Un.isEqualWith=function(t,e,n){var r=(n=\"function\"==typeof n?n:i)?n(t,e):i;return r===i?Nr(t,e,i,n):!!r},Un.isError=Qs,Un.isFinite=function(t){return\"number\"==typeof t&&we(t)},Un.isFunction=Js,Un.isInteger=Zs,Un.isLength=ta,Un.isMap=ra,Un.isMatch=function(t,e){return t===e||Rr(t,e,fo(e))},Un.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:i,Rr(t,e,fo(e),n)},Un.isNaN=function(t){return ia(t)&&t!=+t},Un.isNative=function(t){if(Co(t))throw new Ct(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Ir(t)},Un.isNil=function(t){return null==t},Un.isNull=function(t){return null===t},Un.isNumber=ia,Un.isObject=ea,Un.isObjectLike=na,Un.isPlainObject=oa,Un.isRegExp=sa,Un.isSafeInteger=function(t){return Zs(t)&&t>=-9007199254740991&&t<=d},Un.isSet=aa,Un.isString=ua,Un.isSymbol=la,Un.isTypedArray=ca,Un.isUndefined=function(t){return t===i},Un.isWeakMap=function(t){return na(t)&&vo(t)==N},Un.isWeakSet=function(t){return na(t)&&\"[object WeakSet]\"==Sr(t)},Un.join=function(t,e){return null==t?\"\":Me.call(t,e)},Un.kebabCase=Wa,Un.last=Qo,Un.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=r;return n!==i&&(o=(o=ga(n))<0?bn(r+o,0):wn(o,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Fe(t,We,o,!0)},Un.lowerCase=Ga,Un.lowerFirst=Va,Un.lt=fa,Un.lte=pa,Un.max=function(t){return t&&t.length?vr(t,iu,$r):i},Un.maxBy=function(t,e){return t&&t.length?vr(t,lo(e,2),$r):i},Un.mean=function(t){return Ge(t,iu)},Un.meanBy=function(t,e){return Ge(t,lo(e,2))},Un.min=function(t){return t&&t.length?vr(t,iu,Hr):i},Un.minBy=function(t,e){return t&&t.length?vr(t,lo(e,2),Hr):i},Un.stubArray=vu,Un.stubFalse=mu,Un.stubObject=function(){return{}},Un.stubString=function(){return\"\"},Un.stubTrue=function(){return!0},Un.multiply=Tu,Un.nth=function(t,e){return t&&t.length?Br(t,ga(e)):i},Un.noConflict=function(){return ge._===this&&(ge._=Ut),this},Un.noop=lu,Un.now=$s,Un.pad=function(t,e,n){t=ba(t);var r=(e=ga(e))?dn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Wi(ve(i),n)+t+Wi(de(i),n)},Un.padEnd=function(t,e,n){t=ba(t);var r=(e=ga(e))?dn(t):0;return e&&r<e?t+Wi(e-r,n):t},Un.padStart=function(t,e,n){t=ba(t);var r=(e=ga(e))?dn(t):0;return e&&r<e?Wi(e-r,n)+t:t},Un.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),xn(ba(t).replace(st,\"\"),e||0)},Un.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&_o(t,e,n)&&(e=n=i),n===i&&(\"boolean\"==typeof e?(n=e,e=i):\"boolean\"==typeof t&&(n=t,t=i)),t===i&&e===i?(t=0,e=1):(t=da(t),e===i?(e=t,t=0):e=da(e)),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var o=Tn();return wn(t+o*(e-t+fe(\"1e-\"+((o+\"\").length-1))),e)}return Xr(t,e)},Un.reduce=function(t,e,n){var r=Ws(t)?Pe:Xe,i=arguments.length<3;return r(t,lo(e,4),n,i,hr)},Un.reduceRight=function(t,e,n){var r=Ws(t)?qe:Xe,i=arguments.length<3;return r(t,lo(e,4),n,i,dr)},Un.repeat=function(t,e,n){return e=(n?_o(t,e,n):e===i)?1:ga(e),Yr(ba(t),e)},Un.replace=function(){var t=arguments,e=ba(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Un.result=function(t,e,n){var r=-1,o=(e=wi(e,t)).length;for(o||(o=1,t=i);++r<o;){var s=null==t?i:t[qo(e[r])];s===i&&(r=o,s=n),t=Js(s)?s.call(t):s}return t},Un.round=Cu,Un.runInContext=t,Un.sample=function(t){return(Ws(t)?Jn:Jr)(t)},Un.size=function(t){if(null==t)return 0;if(Vs(t))return ua(t)?dn(t):t.length;var e=vo(t);return e==A||e==D?t.size:Pr(t).length},Un.snakeCase=Ka,Un.some=function(t,e,n){var r=Ws(t)?He:oi;return n&&_o(t,e,n)&&(e=i),r(t,lo(e,3))},Un.sortedIndex=function(t,e){return si(t,e)},Un.sortedIndexBy=function(t,e,n){return ai(t,e,lo(n,2))},Un.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=si(t,e);if(r<n&&Us(t[r],e))return r}return-1},Un.sortedLastIndex=function(t,e){return si(t,e,!0)},Un.sortedLastIndexBy=function(t,e,n){return ai(t,e,lo(n,2),!0)},Un.sortedLastIndexOf=function(t,e){if(null==t?0:t.length){var n=si(t,e,!0)-1;if(Us(t[n],e))return n}return-1},Un.startCase=Xa,Un.startsWith=function(t,e,n){return t=ba(t),n=null==n?0:ur(ga(n),0,t.length),e=ci(e),t.slice(n,n+e.length)==e},Un.subtract=Au,Un.sum=function(t){return t&&t.length?Ye(t,iu):0},Un.sumBy=function(t,e){return t&&t.length?Ye(t,lo(e,2)):0},Un.template=function(t,e,n){var r=Un.templateSettings;n&&_o(t,e,n)&&(e=i),t=ba(t),e=xa({},e,r,Zi);var o,s,a=xa({},e.imports,r.imports,Zi),u=Oa(a),l=tn(a,u),c=0,f=e.interpolate||xt,p=\"__p += '\",h=Et((e.escape||xt).source+\"|\"+f.source+\"|\"+(f===tt?dt:xt).source+\"|\"+(e.evaluate||xt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Lt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ae+\"]\")+\"\\n\";t.replace(h,(function(e,n,r,i,a,u){return r||(r=i),p+=t.slice(c,u).replace(Tt,an),n&&(o=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),a&&(s=!0,p+=\"';\\n\"+a+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),c=u+e.length,e})),p+=\"';\\n\";var g=Lt.call(e,\"variable\")&&e.variable;if(g){if(pt.test(g))throw new Ct(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(W,\"\"):p).replace(G,\"$1\").replace(V,\"$1;\"),p=\"function(\"+(g||\"obj\")+\") {\\n\"+(g?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(o?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var v=Za((function(){return At(u,d+\"return \"+p).apply(i,l)}));if(v.source=p,Qs(v))throw v;return v},Un.times=function(t,e){if((t=ga(t))<1||t>d)return[];var n=v,r=wn(t,v);e=lo(e),t-=v;for(var i=Qe(r,e);++n<t;)e(n);return i},Un.toFinite=da,Un.toInteger=ga,Un.toLength=va,Un.toLower=function(t){return ba(t).toLowerCase()},Un.toNumber=ma,Un.toSafeInteger=function(t){return t?ur(ga(t),-9007199254740991,d):0===t?t:0},Un.toString=ba,Un.toUpper=function(t){return ba(t).toUpperCase()},Un.trim=function(t,e,n){if((t=ba(t))&&(n||e===i))return Je(t);if(!t||!(e=ci(e)))return t;var r=gn(t),o=gn(e);return xi(r,nn(r,o),rn(r,o)+1).join(\"\")},Un.trimEnd=function(t,e,n){if((t=ba(t))&&(n||e===i))return t.slice(0,vn(t)+1);if(!t||!(e=ci(e)))return t;var r=gn(t);return xi(r,0,rn(r,gn(e))+1).join(\"\")},Un.trimStart=function(t,e,n){if((t=ba(t))&&(n||e===i))return t.replace(st,\"\");if(!t||!(e=ci(e)))return t;var r=gn(t);return xi(r,nn(r,gn(e))).join(\"\")},Un.truncate=function(t,e){var n=30,r=\"...\";if(ea(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?ga(e.length):n,r=\"omission\"in e?ci(e.omission):r}var s=(t=ba(t)).length;if(un(t)){var a=gn(t);s=a.length}if(n>=s)return t;var u=n-dn(r);if(u<1)return r;var l=a?xi(a,0,u).join(\"\"):t.slice(0,u);if(o===i)return l+r;if(a&&(u+=l.length-u),sa(o)){if(t.slice(u).search(o)){var c,f=l;for(o.global||(o=Et(o.source,ba(gt.exec(o))+\"g\")),o.lastIndex=0;c=o.exec(f);)var p=c.index;l=l.slice(0,p===i?u:p)}}else if(t.indexOf(ci(o),u)!=u){var h=l.lastIndexOf(o);h>-1&&(l=l.slice(0,h))}return l+r},Un.unescape=function(t){return(t=ba(t))&&Y.test(t)?t.replace(K,mn):t},Un.uniqueId=function(t){var e=++Pt;return ba(t)+e},Un.upperCase=Ya,Un.upperFirst=Qa,Un.each=bs,Un.eachRight=ws,Un.first=Vo,uu(Un,(xu={},_r(Un,(function(t,e){Lt.call(Un.prototype,e)||(xu[e]=t)})),xu),{chain:!1}),Un.VERSION=\"4.17.21\",ke([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],(function(t){Un[t].placeholder=Un})),ke([\"drop\",\"take\"],(function(t,e){Wn.prototype[t]=function(n){n=n===i?1:bn(ga(n),0);var r=this.__filtered__&&!e?new Wn(this):this.clone();return r.__filtered__?r.__takeCount__=wn(n,r.__takeCount__):r.__views__.push({size:wn(n,v),type:t+(r.__dir__<0?\"Right\":\"\")}),r},Wn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}})),ke([\"filter\",\"map\",\"takeWhile\"],(function(t,e){var n=e+1,r=1==n||3==n;Wn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:lo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}})),ke([\"head\",\"last\"],(function(t,e){var n=\"take\"+(e?\"Right\":\"\");Wn.prototype[t]=function(){return this[n](1).value()[0]}})),ke([\"initial\",\"tail\"],(function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Wn.prototype[t]=function(){return this.__filtered__?new Wn(this):this[n](1)}})),Wn.prototype.compact=function(){return this.filter(iu)},Wn.prototype.find=function(t){return this.filter(t).head()},Wn.prototype.findLast=function(t){return this.reverse().find(t)},Wn.prototype.invokeMap=Qr((function(t,e){return\"function\"==typeof t?new Wn(this):this.map((function(n){return jr(n,t,e)}))})),Wn.prototype.reject=function(t){return this.filter(Ls(lo(t)))},Wn.prototype.slice=function(t,e){t=ga(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Wn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==i&&(n=(e=ga(e))<0?n.dropRight(-e):n.take(e-t)),n)},Wn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Wn.prototype.toArray=function(){return this.take(v)},_r(Wn.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),o=Un[r?\"take\"+(\"last\"==e?\"Right\":\"\"):e],s=r||/^find/.test(e);o&&(Un.prototype[e]=function(){var e=this.__wrapped__,a=r?[1]:arguments,u=e instanceof Wn,l=a[0],c=u||Ws(e),f=function(t){var e=o.apply(Un,Le([t],a));return r&&p?e[0]:e};c&&n&&\"function\"==typeof l&&1!=l.length&&(u=c=!1);var p=this.__chain__,h=!!this.__actions__.length,d=s&&!p,g=u&&!h;if(!s&&c){e=g?e:new Wn(this);var v=t.apply(e,a);return v.__actions__.push({func:ds,args:[f],thisArg:i}),new Bn(v,p)}return d&&g?t.apply(this,a):(v=this.thru(f),d?r?v.value()[0]:v.value():v)})})),ke([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],(function(t){var e=jt[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Un.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(Ws(i)?i:[],t)}return this[n]((function(n){return e.apply(Ws(n)?n:[],t)}))}})),_r(Wn.prototype,(function(t,e){var n=Un[e];if(n){var r=n.name+\"\";Lt.call(On,r)||(On[r]=[]),On[r].push({name:e,func:n})}})),On[Ui(i,2).name]=[{name:\"wrapper\",func:i}],Wn.prototype.clone=function(){var t=new Wn(this.__wrapped__);return t.__actions__=Di(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Di(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Di(this.__views__),t},Wn.prototype.reverse=function(){if(this.__filtered__){var t=new Wn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Wn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Ws(t),r=e<0,i=n?t.length:0,o=function(t,e,n){var r=-1,i=n.length;for(;++r<i;){var o=n[r],s=o.size;switch(o.type){case\"drop\":t+=s;break;case\"dropRight\":e-=s;break;case\"take\":e=wn(e,t+s);break;case\"takeRight\":t=bn(t,e-s)}}return{start:t,end:e}}(0,i,this.__views__),s=o.start,a=o.end,u=a-s,l=r?a:s-1,c=this.__iteratees__,f=c.length,p=0,h=wn(u,this.__takeCount__);if(!n||!r&&i==u&&h==u)return gi(t,this.__actions__);var d=[];t:for(;u--&&p<h;){for(var g=-1,v=t[l+=e];++g<f;){var m=c[g],y=m.iteratee,b=m.type,w=y(v);if(2==b)v=w;else if(!w){if(1==b)continue t;break t}}d[p++]=v}return d},Un.prototype.at=gs,Un.prototype.chain=function(){return hs(this)},Un.prototype.commit=function(){return new Bn(this.value(),this.__chain__)},Un.prototype.next=function(){this.__values__===i&&(this.__values__=ha(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?i:this.__values__[this.__index__++]}},Un.prototype.plant=function(t){for(var e,n=this;n instanceof zn;){var r=Mo(n);r.__index__=0,r.__values__=i,e?o.__wrapped__=r:e=r;var o=r;n=n.__wrapped__}return o.__wrapped__=t,e},Un.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Wn){var e=t;return this.__actions__.length&&(e=new Wn(this)),(e=e.reverse()).__actions__.push({func:ds,args:[es],thisArg:i}),new Bn(e,this.__chain__)}return this.thru(es)},Un.prototype.toJSON=Un.prototype.valueOf=Un.prototype.value=function(){return gi(this.__wrapped__,this.__actions__)},Un.prototype.first=Un.prototype.head,Jt&&(Un.prototype[Jt]=function(){return this}),Un}();ge._=yn,(r=function(){return yn}.call(e,n,e,t))===i||(t.exports=r)}.call(this)},155:t=>{var e,n,r=t.exports={};function i(){throw new Error(\"setTimeout has not been defined\")}function o(){throw new Error(\"clearTimeout has not been defined\")}function s(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(n){try{return e.call(null,t,0)}catch(n){return e.call(this,t,0)}}}!function(){try{e=\"function\"==typeof setTimeout?setTimeout:i}catch(t){e=i}try{n=\"function\"==typeof clearTimeout?clearTimeout:o}catch(t){n=o}}();var a,u=[],l=!1,c=-1;function f(){l&&a&&(l=!1,a.length?u=a.concat(u):c=-1,u.length&&p())}function p(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c<e;)a&&a[c].run();c=-1,e=u.length}a=null,l=!1,function(t){if(n===clearTimeout)return clearTimeout(t);if((n===o||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(t);try{return n(t)}catch(e){try{return n.call(null,t)}catch(e){return n.call(this,t)}}}(t)}}function h(t,e){this.fun=t,this.array=e}function d(){}r.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new h(t,e)),1!==u.length||l||s(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},r.title=\"browser\",r.browser=!0,r.env={},r.argv=[],r.version=\"\",r.versions={},r.on=d,r.addListener=d,r.once=d,r.off=d,r.removeListener=d,r.removeAllListeners=d,r.emit=d,r.prependListener=d,r.prependOnceListener=d,r.listeners=function(t){return[]},r.binding=function(t){throw new Error(\"process.binding is not supported\")},r.cwd=function(){return\"/\"},r.chdir=function(t){throw new Error(\"process.chdir is not supported\")},r.umask=function(){return 0}},686:(t,e,n)=>{var r,i,o;i=[n(755)],void 0===(o=\"function\"==typeof(r=function(t){var e=function(){if(t&&t.fn&&t.fn.select2&&t.fn.select2.amd)var e=t.fn.select2.amd;var n,r,i;return e&&e.requirejs||(e?r=e:e={},function(t){var e,o,s,a,u={},l={},c={},f={},p=Object.prototype.hasOwnProperty,h=[].slice,d=/\\.js$/;function g(t,e){return p.call(t,e)}function v(t,e){var n,r,i,o,s,a,u,l,f,p,h,g=e&&e.split(\"/\"),v=c.map,m=v&&v[\"*\"]||{};if(t){for(s=(t=t.split(\"/\")).length-1,c.nodeIdCompat&&d.test(t[s])&&(t[s]=t[s].replace(d,\"\")),\".\"===t[0].charAt(0)&&g&&(t=g.slice(0,g.length-1).concat(t)),f=0;f<t.length;f++)if(\".\"===(h=t[f]))t.splice(f,1),f-=1;else if(\"..\"===h){if(0===f||1===f&&\"..\"===t[2]||\"..\"===t[f-1])continue;f>0&&(t.splice(f-1,2),f-=2)}t=t.join(\"/\")}if((g||m)&&v){for(f=(n=t.split(\"/\")).length;f>0;f-=1){if(r=n.slice(0,f).join(\"/\"),g)for(p=g.length;p>0;p-=1)if((i=v[g.slice(0,p).join(\"/\")])&&(i=i[r])){o=i,a=f;break}if(o)break;!u&&m&&m[r]&&(u=m[r],l=f)}!o&&u&&(o=u,a=l),o&&(n.splice(0,a,o),t=n.join(\"/\"))}return t}function m(e,n){return function(){var r=h.call(arguments,0);return\"string\"!=typeof r[0]&&1===r.length&&r.push(null),o.apply(t,r.concat([e,n]))}}function y(t){return function(e){return v(e,t)}}function b(t){return function(e){u[t]=e}}function w(n){if(g(l,n)){var r=l[n];delete l[n],f[n]=!0,e.apply(t,r)}if(!g(u,n)&&!g(f,n))throw new Error(\"No \"+n);return u[n]}function _(t){var e,n=t?t.indexOf(\"!\"):-1;return n>-1&&(e=t.substring(0,n),t=t.substring(n+1,t.length)),[e,t]}function x(t){return t?_(t):[]}function T(t){return function(){return c&&c.config&&c.config[t]||{}}}s=function(t,e){var n,r=_(t),i=r[0],o=e[1];return t=r[1],i&&(n=w(i=v(i,o))),i?t=n&&n.normalize?n.normalize(t,y(o)):v(t,o):(i=(r=_(t=v(t,o)))[0],t=r[1],i&&(n=w(i))),{f:i?i+\"!\"+t:t,n:t,pr:i,p:n}},a={require:function(t){return m(t)},exports:function(t){var e=u[t];return void 0!==e?e:u[t]={}},module:function(t){return{id:t,uri:\"\",exports:u[t],config:T(t)}}},e=function(e,n,r,i){var o,c,p,h,d,v,y,_=[],T=typeof r;if(v=x(i=i||e),\"undefined\"===T||\"function\"===T){for(n=!n.length&&r.length?[\"require\",\"exports\",\"module\"]:n,d=0;d<n.length;d+=1)if(\"require\"===(c=(h=s(n[d],v)).f))_[d]=a.require(e);else if(\"exports\"===c)_[d]=a.exports(e),y=!0;else if(\"module\"===c)o=_[d]=a.module(e);else if(g(u,c)||g(l,c)||g(f,c))_[d]=w(c);else{if(!h.p)throw new Error(e+\" missing \"+c);h.p.load(h.n,m(i,!0),b(c),{}),_[d]=u[c]}p=r?r.apply(u[e],_):void 0,e&&(o&&o.exports!==t&&o.exports!==u[e]?u[e]=o.exports:p===t&&y||(u[e]=p))}else e&&(u[e]=r)},n=r=o=function(n,r,i,u,l){if(\"string\"==typeof n)return a[n]?a[n](r):w(s(n,x(r)).f);if(!n.splice){if((c=n).deps&&o(c.deps,c.callback),!r)return;r.splice?(n=r,r=i,i=null):n=t}return r=r||function(){},\"function\"==typeof i&&(i=u,u=l),u?e(t,n,r,i):setTimeout((function(){e(t,n,r,i)}),4),o},o.config=function(t){return o(t)},n._defined=u,(i=function(t,e,n){if(\"string\"!=typeof t)throw new Error(\"See almond README: incorrect module build, no module name\");e.splice||(n=e,e=[]),g(u,t)||g(l,t)||(l[t]=[t,e,n])}).amd={jQuery:!0}}(),e.requirejs=n,e.require=r,e.define=i),e.define(\"almond\",(function(){})),e.define(\"jquery\",[],(function(){var e=t||$;return null==e&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),e})),e.define(\"select2/utils\",[\"jquery\"],(function(t){var e={};function n(t){var e=t.prototype,n=[];for(var r in e)\"function\"==typeof e[r]&&\"constructor\"!==r&&n.push(r);return n}e.Extend=function(t,e){var n={}.hasOwnProperty;function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},e.Decorate=function(t,e){var r=n(e),i=n(t);function o(){var n=Array.prototype.unshift,r=e.prototype.constructor.length,i=t.prototype.constructor;r>0&&(n.call(arguments,t.prototype.constructor),i=e.prototype.constructor),i.apply(this,arguments)}function s(){this.constructor=o}e.displayName=t.displayName,o.prototype=new s;for(var a=0;a<i.length;a++){var u=i[a];o.prototype[u]=t.prototype[u]}for(var l=function(t){var n=function(){};t in o.prototype&&(n=o.prototype[t]);var r=e.prototype[t];return function(){return Array.prototype.unshift.call(arguments,n),r.apply(this,arguments)}},c=0;c<r.length;c++){var f=r[c];o.prototype[f]=l(f)}return o};var r=function(){this.listeners={}};r.prototype.on=function(t,e){this.listeners=this.listeners||{},t in this.listeners?this.listeners[t].push(e):this.listeners[t]=[e]},r.prototype.trigger=function(t){var e=Array.prototype.slice,n=e.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),n[0]._type=t,t in this.listeners&&this.invoke(this.listeners[t],e.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},r.prototype.invoke=function(t,e){for(var n=0,r=t.length;n<r;n++)t[n].apply(this,e)},e.Observable=r,e.generateChars=function(t){for(var e=\"\",n=0;n<t;n++)e+=Math.floor(36*Math.random()).toString(36);return e},e.bind=function(t,e){return function(){t.apply(e,arguments)}},e._convertData=function(t){for(var e in t){var n=e.split(\"-\"),r=t;if(1!==n.length){for(var i=0;i<n.length;i++){var o=n[i];(o=o.substring(0,1).toLowerCase()+o.substring(1))in r||(r[o]={}),i==n.length-1&&(r[o]=t[e]),r=r[o]}delete t[e]}}return t},e.hasScroll=function(e,n){var r=t(n),i=n.style.overflowX,o=n.style.overflowY;return(i!==o||\"hidden\"!==o&&\"visible\"!==o)&&(\"scroll\"===i||\"scroll\"===o||r.innerHeight()<n.scrollHeight||r.innerWidth()<n.scrollWidth)},e.escapeMarkup=function(t){var e={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#47;\"};return\"string\"!=typeof t?t:String(t).replace(/[&<>\"'\\/\\\\]/g,(function(t){return e[t]}))},e.appendMany=function(e,n){if(\"1.7\"===t.fn.jquery.substr(0,3)){var r=t();t.map(n,(function(t){r=r.add(t)})),n=r}e.append(n)},e.__cache={};var i=0;return e.GetUniqueElementId=function(t){var e=t.getAttribute(\"data-select2-id\");return null==e&&(t.id?(e=t.id,t.setAttribute(\"data-select2-id\",e)):(t.setAttribute(\"data-select2-id\",++i),e=i.toString())),e},e.StoreData=function(t,n,r){var i=e.GetUniqueElementId(t);e.__cache[i]||(e.__cache[i]={}),e.__cache[i][n]=r},e.GetData=function(n,r){var i=e.GetUniqueElementId(n);return r?e.__cache[i]&&null!=e.__cache[i][r]?e.__cache[i][r]:t(n).data(r):e.__cache[i]},e.RemoveData=function(t){var n=e.GetUniqueElementId(t);null!=e.__cache[n]&&delete e.__cache[n],t.removeAttribute(\"data-select2-id\")},e})),e.define(\"select2/results\",[\"jquery\",\"./utils\"],(function(t,e){function n(t,e,r){this.$element=t,this.data=r,this.options=e,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');return this.options.get(\"multiple\")&&e.attr(\"aria-multiselectable\",\"true\"),this.$results=e,e},n.prototype.clear=function(){this.$results.empty()},n.prototype.displayMessage=function(e){var n=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var r=t('<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'),i=this.options.get(\"translations\").get(e.message);r.append(n(i(e.args))),r[0].className+=\" select2-results__message\",this.$results.append(r)},n.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},n.prototype.append=function(t){this.hideLoading();var e=[];if(null!=t.results&&0!==t.results.length){t.results=this.sort(t.results);for(var n=0;n<t.results.length;n++){var r=t.results[n],i=this.option(r);e.push(i)}this.$results.append(e)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},n.prototype.position=function(t,e){e.find(\".select2-results\").append(t)},n.prototype.sort=function(t){return this.options.get(\"sorter\")(t)},n.prototype.highlightFirstItem=function(){var t=this.$results.find(\".select2-results__option[aria-selected]\"),e=t.filter(\"[aria-selected=true]\");e.length>0?e.first().trigger(\"mouseenter\"):t.first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},n.prototype.setClasses=function(){var n=this;this.data.current((function(r){var i=t.map(r,(function(t){return t.id.toString()}));n.$results.find(\".select2-results__option[aria-selected]\").each((function(){var n=t(this),r=e.GetData(this,\"data\"),o=\"\"+r.id;null!=r.element&&r.element.selected||null==r.element&&t.inArray(o,i)>-1?n.attr(\"aria-selected\",\"true\"):n.attr(\"aria-selected\",\"false\")}))}))},n.prototype.showLoading=function(t){this.hideLoading();var e={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(t)},n=this.option(e);n.className+=\" loading-results\",this.$results.prepend(n)},n.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},n.prototype.option=function(n){var r=document.createElement(\"li\");r.className=\"select2-results__option\";var i={role:\"option\",\"aria-selected\":\"false\"},o=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var s in(null!=n.element&&o.call(n.element,\":disabled\")||null==n.element&&n.disabled)&&(delete i[\"aria-selected\"],i[\"aria-disabled\"]=\"true\"),null==n.id&&delete i[\"aria-selected\"],null!=n._resultId&&(r.id=n._resultId),n.title&&(r.title=n.title),n.children&&(i.role=\"group\",i[\"aria-label\"]=n.text,delete i[\"aria-selected\"]),i){var a=i[s];r.setAttribute(s,a)}if(n.children){var u=t(r),l=document.createElement(\"strong\");l.className=\"select2-results__group\",t(l),this.template(n,l);for(var c=[],f=0;f<n.children.length;f++){var p=n.children[f],h=this.option(p);c.push(h)}var d=t(\"<ul></ul>\",{class:\"select2-results__options select2-results__options--nested\"});d.append(c),u.append(l),u.append(d)}else this.template(n,r);return e.StoreData(r,\"data\",n),r},n.prototype.bind=function(n,r){var i=this,o=n.id+\"-results\";this.$results.attr(\"id\",o),n.on(\"results:all\",(function(t){i.clear(),i.append(t.data),n.isOpen()&&(i.setClasses(),i.highlightFirstItem())})),n.on(\"results:append\",(function(t){i.append(t.data),n.isOpen()&&i.setClasses()})),n.on(\"query\",(function(t){i.hideMessages(),i.showLoading(t)})),n.on(\"select\",(function(){n.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())})),n.on(\"unselect\",(function(){n.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())})),n.on(\"open\",(function(){i.$results.attr(\"aria-expanded\",\"true\"),i.$results.attr(\"aria-hidden\",\"false\"),i.setClasses(),i.ensureHighlightVisible()})),n.on(\"close\",(function(){i.$results.attr(\"aria-expanded\",\"false\"),i.$results.attr(\"aria-hidden\",\"true\"),i.$results.removeAttr(\"aria-activedescendant\")})),n.on(\"results:toggle\",(function(){var t=i.getHighlightedResults();0!==t.length&&t.trigger(\"mouseup\")})),n.on(\"results:select\",(function(){var t=i.getHighlightedResults();if(0!==t.length){var n=e.GetData(t[0],\"data\");\"true\"==t.attr(\"aria-selected\")?i.trigger(\"close\",{}):i.trigger(\"select\",{data:n})}})),n.on(\"results:previous\",(function(){var t=i.getHighlightedResults(),e=i.$results.find(\"[aria-selected]\"),n=e.index(t);if(!(n<=0)){var r=n-1;0===t.length&&(r=0);var o=e.eq(r);o.trigger(\"mouseenter\");var s=i.$results.offset().top,a=o.offset().top,u=i.$results.scrollTop()+(a-s);0===r?i.$results.scrollTop(0):a-s<0&&i.$results.scrollTop(u)}})),n.on(\"results:next\",(function(){var t=i.getHighlightedResults(),e=i.$results.find(\"[aria-selected]\"),n=e.index(t)+1;if(!(n>=e.length)){var r=e.eq(n);r.trigger(\"mouseenter\");var o=i.$results.offset().top+i.$results.outerHeight(!1),s=r.offset().top+r.outerHeight(!1),a=i.$results.scrollTop()+s-o;0===n?i.$results.scrollTop(0):s>o&&i.$results.scrollTop(a)}})),n.on(\"results:focus\",(function(t){t.element.addClass(\"select2-results__option--highlighted\")})),n.on(\"results:message\",(function(t){i.displayMessage(t)})),t.fn.mousewheel&&this.$results.on(\"mousewheel\",(function(t){var e=i.$results.scrollTop(),n=i.$results.get(0).scrollHeight-e+t.deltaY,r=t.deltaY>0&&e-t.deltaY<=0,o=t.deltaY<0&&n<=i.$results.height();r?(i.$results.scrollTop(0),t.preventDefault(),t.stopPropagation()):o&&(i.$results.scrollTop(i.$results.get(0).scrollHeight-i.$results.height()),t.preventDefault(),t.stopPropagation())})),this.$results.on(\"mouseup\",\".select2-results__option[aria-selected]\",(function(n){var r=t(this),o=e.GetData(this,\"data\");\"true\"!==r.attr(\"aria-selected\")?i.trigger(\"select\",{originalEvent:n,data:o}):i.options.get(\"multiple\")?i.trigger(\"unselect\",{originalEvent:n,data:o}):i.trigger(\"close\",{})})),this.$results.on(\"mouseenter\",\".select2-results__option[aria-selected]\",(function(n){var r=e.GetData(this,\"data\");i.getHighlightedResults().removeClass(\"select2-results__option--highlighted\"),i.trigger(\"results:focus\",{data:r,element:t(this)})}))},n.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},n.prototype.destroy=function(){this.$results.remove()},n.prototype.ensureHighlightVisible=function(){var t=this.getHighlightedResults();if(0!==t.length){var e=this.$results.find(\"[aria-selected]\").index(t),n=this.$results.offset().top,r=t.offset().top,i=this.$results.scrollTop()+(r-n),o=r-n;i-=2*t.outerHeight(!1),e<=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o<0)&&this.$results.scrollTop(i)}},n.prototype.template=function(e,n){var r=this.options.get(\"templateResult\"),i=this.options.get(\"escapeMarkup\"),o=r(e,n);null==o?n.style.display=\"none\":\"string\"==typeof o?n.innerHTML=i(o):t(n).append(o)},n})),e.define(\"select2/keys\",[],(function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}})),e.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],(function(t,e,n){function r(t,e){this.$element=t,this.options=e,r.__super__.constructor.call(this)}return e.Extend(r,e.Observable),r.prototype.render=function(){var n=t('<span class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\"></span>');return this._tabindex=0,null!=e.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=e.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),n.attr(\"title\",this.$element.attr(\"title\")),n.attr(\"tabindex\",this._tabindex),n.attr(\"aria-disabled\",\"false\"),this.$selection=n,n},r.prototype.bind=function(t,e){var r=this,i=t.id+\"-results\";this.container=t,this.$selection.on(\"focus\",(function(t){r.trigger(\"focus\",t)})),this.$selection.on(\"blur\",(function(t){r._handleBlur(t)})),this.$selection.on(\"keydown\",(function(t){r.trigger(\"keypress\",t),t.which===n.SPACE&&t.preventDefault()})),t.on(\"results:focus\",(function(t){r.$selection.attr(\"aria-activedescendant\",t.data._resultId)})),t.on(\"selection:update\",(function(t){r.update(t.data)})),t.on(\"open\",(function(){r.$selection.attr(\"aria-expanded\",\"true\"),r.$selection.attr(\"aria-owns\",i),r._attachCloseHandler(t)})),t.on(\"close\",(function(){r.$selection.attr(\"aria-expanded\",\"false\"),r.$selection.removeAttr(\"aria-activedescendant\"),r.$selection.removeAttr(\"aria-owns\"),r.$selection.trigger(\"focus\"),r._detachCloseHandler(t)})),t.on(\"enable\",(function(){r.$selection.attr(\"tabindex\",r._tabindex),r.$selection.attr(\"aria-disabled\",\"false\")})),t.on(\"disable\",(function(){r.$selection.attr(\"tabindex\",\"-1\"),r.$selection.attr(\"aria-disabled\",\"true\")}))},r.prototype._handleBlur=function(e){var n=this;window.setTimeout((function(){document.activeElement==n.$selection[0]||t.contains(n.$selection[0],document.activeElement)||n.trigger(\"blur\",e)}),1)},r.prototype._attachCloseHandler=function(n){t(document.body).on(\"mousedown.select2.\"+n.id,(function(n){var r=t(n.target).closest(\".select2\");t(\".select2.select2-container--open\").each((function(){this!=r[0]&&e.GetData(this,\"element\").select2(\"close\")}))}))},r.prototype._detachCloseHandler=function(e){t(document.body).off(\"mousedown.select2.\"+e.id)},r.prototype.position=function(t,e){e.find(\".selection\").append(t)},r.prototype.destroy=function(){this._detachCloseHandler(this.container)},r.prototype.update=function(t){throw new Error(\"The `update` method must be defined in child classes.\")},r.prototype.isEnabled=function(){return!this.isDisabled()},r.prototype.isDisabled=function(){return this.options.get(\"disabled\")},r})),e.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],(function(t,e,n,r){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,e),i.prototype.render=function(){var t=i.__super__.render.call(this);return t.addClass(\"select2-selection--single\"),t.html('<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'),t},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var r=t.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",r).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",r),this.$selection.on(\"mousedown\",(function(t){1===t.which&&n.trigger(\"toggle\",{originalEvent:t})})),this.$selection.on(\"focus\",(function(t){})),this.$selection.on(\"blur\",(function(t){})),t.on(\"focus\",(function(e){t.isOpen()||n.$selection.trigger(\"focus\")}))},i.prototype.clear=function(){var t=this.$selection.find(\".select2-selection__rendered\");t.empty(),t.removeAttr(\"title\")},i.prototype.display=function(t,e){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(t,e))},i.prototype.selectionContainer=function(){return t(\"<span></span>\")},i.prototype.update=function(t){if(0!==t.length){var e=t[0],n=this.$selection.find(\".select2-selection__rendered\"),r=this.display(e,n);n.empty().append(r);var i=e.title||e.text;i?n.attr(\"title\",i):n.removeAttr(\"title\")}else this.clear()},i})),e.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],(function(t,e,n){function r(t,e){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,e),r.prototype.render=function(){var t=r.__super__.render.call(this);return t.addClass(\"select2-selection--multiple\"),t.html('<ul class=\"select2-selection__rendered\"></ul>'),t},r.prototype.bind=function(e,i){var o=this;r.__super__.bind.apply(this,arguments),this.$selection.on(\"click\",(function(t){o.trigger(\"toggle\",{originalEvent:t})})),this.$selection.on(\"click\",\".select2-selection__choice__remove\",(function(e){if(!o.isDisabled()){var r=t(this).parent(),i=n.GetData(r[0],\"data\");o.trigger(\"unselect\",{originalEvent:e,data:i})}}))},r.prototype.clear=function(){var t=this.$selection.find(\".select2-selection__rendered\");t.empty(),t.removeAttr(\"title\")},r.prototype.display=function(t,e){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(t,e))},r.prototype.selectionContainer=function(){return t('<li class=\"select2-selection__choice\"><span class=\"select2-selection__choice__remove\" role=\"presentation\">&times;</span></li>')},r.prototype.update=function(t){if(this.clear(),0!==t.length){for(var e=[],r=0;r<t.length;r++){var i=t[r],o=this.selectionContainer(),s=this.display(i,o);o.append(s);var a=i.title||i.text;a&&o.attr(\"title\",a),n.StoreData(o[0],\"data\",i),e.push(o)}var u=this.$selection.find(\".select2-selection__rendered\");n.appendMany(u,e)}},r})),e.define(\"select2/selection/placeholder\",[\"../utils\"],(function(t){function e(t,e,n){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),t.call(this,e,n)}return e.prototype.normalizePlaceholder=function(t,e){return\"string\"==typeof e&&(e={id:\"\",text:e}),e},e.prototype.createPlaceholder=function(t,e){var n=this.selectionContainer();return n.html(this.display(e)),n.addClass(\"select2-selection__placeholder\").removeClass(\"select2-selection__choice\"),n},e.prototype.update=function(t,e){var n=1==e.length&&e[0].id!=this.placeholder.id;if(e.length>1||n)return t.call(this,e);this.clear();var r=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(r)},e})),e.define(\"select2/selection/allowClear\",[\"jquery\",\"../keys\",\"../utils\"],(function(t,e,n){function r(){}return r.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",(function(t){r._handleClear(t)})),e.on(\"keypress\",(function(t){r._handleKeyboardClear(t,e)}))},r.prototype._handleClear=function(t,e){if(!this.isDisabled()){var r=this.$selection.find(\".select2-selection__clear\");if(0!==r.length){e.stopPropagation();var i=n.GetData(r[0],\"data\"),o=this.$element.val();this.$element.val(this.placeholder.id);var s={data:i};if(this.trigger(\"clear\",s),s.prevented)this.$element.val(o);else{for(var a=0;a<i.length;a++)if(s={data:i[a]},this.trigger(\"unselect\",s),s.prevented)return void this.$element.val(o);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},r.prototype._handleKeyboardClear=function(t,n,r){r.isOpen()||n.which!=e.DELETE&&n.which!=e.BACKSPACE||this._handleClear(n)},r.prototype.update=function(e,r){if(e.call(this,r),!(this.$selection.find(\".select2-selection__placeholder\").length>0||0===r.length)){var i=this.options.get(\"translations\").get(\"removeAllItems\"),o=t('<span class=\"select2-selection__clear\" title=\"'+i()+'\">&times;</span>');n.StoreData(o[0],\"data\",r),this.$selection.find(\".select2-selection__rendered\").prepend(o)}},r})),e.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],(function(t,e,n){function r(t,e,n){t.call(this,e,n)}return r.prototype.render=function(e){var n=t('<li class=\"select2-search select2-search--inline\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></li>');this.$searchContainer=n,this.$search=n.find(\"input\");var r=e.call(this);return this._transferTabIndex(),r},r.prototype.bind=function(t,r,i){var o=this,s=r.id+\"-results\";t.call(this,r,i),r.on(\"open\",(function(){o.$search.attr(\"aria-controls\",s),o.$search.trigger(\"focus\")})),r.on(\"close\",(function(){o.$search.val(\"\"),o.$search.removeAttr(\"aria-controls\"),o.$search.removeAttr(\"aria-activedescendant\"),o.$search.trigger(\"focus\")})),r.on(\"enable\",(function(){o.$search.prop(\"disabled\",!1),o._transferTabIndex()})),r.on(\"disable\",(function(){o.$search.prop(\"disabled\",!0)})),r.on(\"focus\",(function(t){o.$search.trigger(\"focus\")})),r.on(\"results:focus\",(function(t){t.data._resultId?o.$search.attr(\"aria-activedescendant\",t.data._resultId):o.$search.removeAttr(\"aria-activedescendant\")})),this.$selection.on(\"focusin\",\".select2-search--inline\",(function(t){o.trigger(\"focus\",t)})),this.$selection.on(\"focusout\",\".select2-search--inline\",(function(t){o._handleBlur(t)})),this.$selection.on(\"keydown\",\".select2-search--inline\",(function(t){if(t.stopPropagation(),o.trigger(\"keypress\",t),o._keyUpPrevented=t.isDefaultPrevented(),t.which===n.BACKSPACE&&\"\"===o.$search.val()){var r=o.$searchContainer.prev(\".select2-selection__choice\");if(r.length>0){var i=e.GetData(r[0],\"data\");o.searchRemoveChoice(i),t.preventDefault()}}})),this.$selection.on(\"click\",\".select2-search--inline\",(function(t){o.$search.val()&&t.stopPropagation()}));var a=document.documentMode,u=a&&a<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",(function(t){u?o.$selection.off(\"input.search input.searchcheck\"):o.$selection.off(\"keyup.search\")})),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",(function(t){if(u&&\"input\"===t.type)o.$selection.off(\"input.search input.searchcheck\");else{var e=t.which;e!=n.SHIFT&&e!=n.CTRL&&e!=n.ALT&&e!=n.TAB&&o.handleSearch(t)}}))},r.prototype._transferTabIndex=function(t){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},r.prototype.createPlaceholder=function(t,e){this.$search.attr(\"placeholder\",e.text)},r.prototype.update=function(t,e){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),t.call(this,e),this.$selection.find(\".select2-selection__rendered\").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},r.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var t=this.$search.val();this.trigger(\"query\",{term:t})}this._keyUpPrevented=!1},r.prototype.searchRemoveChoice=function(t,e){this.trigger(\"unselect\",{data:e}),this.$search.val(e.text),this.handleSearch()},r.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var t=\"\";t=\"\"!==this.$search.attr(\"placeholder\")?this.$selection.find(\".select2-selection__rendered\").width():.75*(this.$search.val().length+1)+\"em\",this.$search.css(\"width\",t)},r})),e.define(\"select2/selection/eventRelay\",[\"jquery\"],(function(t){function e(){}return e.prototype.bind=function(e,n,r){var i=this,o=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],s=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];e.call(this,n,r),n.on(\"*\",(function(e,n){if(-1!==t.inArray(e,o)){n=n||{};var r=t.Event(\"select2:\"+e,{params:n});i.$element.trigger(r),-1!==t.inArray(e,s)&&(n.prevented=r.isDefaultPrevented())}}))},e})),e.define(\"select2/translation\",[\"jquery\",\"require\"],(function(t,e){function n(t){this.dict=t||{}}return n.prototype.all=function(){return this.dict},n.prototype.get=function(t){return this.dict[t]},n.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},n._cache={},n.loadPath=function(t){if(!(t in n._cache)){var r=e(t);n._cache[t]=r}return new n(n._cache[t])},n})),e.define(\"select2/diacritics\",[],(function(){return{\"Ⓐ\":\"A\",Ａ:\"A\",À:\"A\",Á:\"A\",Â:\"A\",Ầ:\"A\",Ấ:\"A\",Ẫ:\"A\",Ẩ:\"A\",Ã:\"A\",Ā:\"A\",Ă:\"A\",Ằ:\"A\",Ắ:\"A\",Ẵ:\"A\",Ẳ:\"A\",Ȧ:\"A\",Ǡ:\"A\",Ä:\"A\",Ǟ:\"A\",Ả:\"A\",Å:\"A\",Ǻ:\"A\",Ǎ:\"A\",Ȁ:\"A\",Ȃ:\"A\",Ạ:\"A\",Ậ:\"A\",Ặ:\"A\",Ḁ:\"A\",Ą:\"A\",Ⱥ:\"A\",Ɐ:\"A\",Ꜳ:\"AA\",Æ:\"AE\",Ǽ:\"AE\",Ǣ:\"AE\",Ꜵ:\"AO\",Ꜷ:\"AU\",Ꜹ:\"AV\",Ꜻ:\"AV\",Ꜽ:\"AY\",\"Ⓑ\":\"B\",Ｂ:\"B\",Ḃ:\"B\",Ḅ:\"B\",Ḇ:\"B\",Ƀ:\"B\",Ƃ:\"B\",Ɓ:\"B\",\"Ⓒ\":\"C\",Ｃ:\"C\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",Ç:\"C\",Ḉ:\"C\",Ƈ:\"C\",Ȼ:\"C\",Ꜿ:\"C\",\"Ⓓ\":\"D\",Ｄ:\"D\",Ḋ:\"D\",Ď:\"D\",Ḍ:\"D\",Ḑ:\"D\",Ḓ:\"D\",Ḏ:\"D\",Đ:\"D\",Ƌ:\"D\",Ɗ:\"D\",Ɖ:\"D\",Ꝺ:\"D\",Ǳ:\"DZ\",Ǆ:\"DZ\",ǲ:\"Dz\",ǅ:\"Dz\",\"Ⓔ\":\"E\",Ｅ:\"E\",È:\"E\",É:\"E\",Ê:\"E\",Ề:\"E\",Ế:\"E\",Ễ:\"E\",Ể:\"E\",Ẽ:\"E\",Ē:\"E\",Ḕ:\"E\",Ḗ:\"E\",Ĕ:\"E\",Ė:\"E\",Ë:\"E\",Ẻ:\"E\",Ě:\"E\",Ȅ:\"E\",Ȇ:\"E\",Ẹ:\"E\",Ệ:\"E\",Ȩ:\"E\",Ḝ:\"E\",Ę:\"E\",Ḙ:\"E\",Ḛ:\"E\",Ɛ:\"E\",Ǝ:\"E\",\"Ⓕ\":\"F\",Ｆ:\"F\",Ḟ:\"F\",Ƒ:\"F\",Ꝼ:\"F\",\"Ⓖ\":\"G\",Ｇ:\"G\",Ǵ:\"G\",Ĝ:\"G\",Ḡ:\"G\",Ğ:\"G\",Ġ:\"G\",Ǧ:\"G\",Ģ:\"G\",Ǥ:\"G\",Ɠ:\"G\",Ꞡ:\"G\",Ᵹ:\"G\",Ꝿ:\"G\",\"Ⓗ\":\"H\",Ｈ:\"H\",Ĥ:\"H\",Ḣ:\"H\",Ḧ:\"H\",Ȟ:\"H\",Ḥ:\"H\",Ḩ:\"H\",Ḫ:\"H\",Ħ:\"H\",Ⱨ:\"H\",Ⱶ:\"H\",Ɥ:\"H\",\"Ⓘ\":\"I\",Ｉ:\"I\",Ì:\"I\",Í:\"I\",Î:\"I\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",İ:\"I\",Ï:\"I\",Ḯ:\"I\",Ỉ:\"I\",Ǐ:\"I\",Ȉ:\"I\",Ȋ:\"I\",Ị:\"I\",Į:\"I\",Ḭ:\"I\",Ɨ:\"I\",\"Ⓙ\":\"J\",Ｊ:\"J\",Ĵ:\"J\",Ɉ:\"J\",\"Ⓚ\":\"K\",Ｋ:\"K\",Ḱ:\"K\",Ǩ:\"K\",Ḳ:\"K\",Ķ:\"K\",Ḵ:\"K\",Ƙ:\"K\",Ⱪ:\"K\",Ꝁ:\"K\",Ꝃ:\"K\",Ꝅ:\"K\",Ꞣ:\"K\",\"Ⓛ\":\"L\",Ｌ:\"L\",Ŀ:\"L\",Ĺ:\"L\",Ľ:\"L\",Ḷ:\"L\",Ḹ:\"L\",Ļ:\"L\",Ḽ:\"L\",Ḻ:\"L\",Ł:\"L\",Ƚ:\"L\",Ɫ:\"L\",Ⱡ:\"L\",Ꝉ:\"L\",Ꝇ:\"L\",Ꞁ:\"L\",Ǉ:\"LJ\",ǈ:\"Lj\",\"Ⓜ\":\"M\",Ｍ:\"M\",Ḿ:\"M\",Ṁ:\"M\",Ṃ:\"M\",Ɱ:\"M\",Ɯ:\"M\",\"Ⓝ\":\"N\",Ｎ:\"N\",Ǹ:\"N\",Ń:\"N\",Ñ:\"N\",Ṅ:\"N\",Ň:\"N\",Ṇ:\"N\",Ņ:\"N\",Ṋ:\"N\",Ṉ:\"N\",Ƞ:\"N\",Ɲ:\"N\",Ꞑ:\"N\",Ꞥ:\"N\",Ǌ:\"NJ\",ǋ:\"Nj\",\"Ⓞ\":\"O\",Ｏ:\"O\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Ồ:\"O\",Ố:\"O\",Ỗ:\"O\",Ổ:\"O\",Õ:\"O\",Ṍ:\"O\",Ȭ:\"O\",Ṏ:\"O\",Ō:\"O\",Ṑ:\"O\",Ṓ:\"O\",Ŏ:\"O\",Ȯ:\"O\",Ȱ:\"O\",Ö:\"O\",Ȫ:\"O\",Ỏ:\"O\",Ő:\"O\",Ǒ:\"O\",Ȍ:\"O\",Ȏ:\"O\",Ơ:\"O\",Ờ:\"O\",Ớ:\"O\",Ỡ:\"O\",Ở:\"O\",Ợ:\"O\",Ọ:\"O\",Ộ:\"O\",Ǫ:\"O\",Ǭ:\"O\",Ø:\"O\",Ǿ:\"O\",Ɔ:\"O\",Ɵ:\"O\",Ꝋ:\"O\",Ꝍ:\"O\",Œ:\"OE\",Ƣ:\"OI\",Ꝏ:\"OO\",Ȣ:\"OU\",\"Ⓟ\":\"P\",Ｐ:\"P\",Ṕ:\"P\",Ṗ:\"P\",Ƥ:\"P\",Ᵽ:\"P\",Ꝑ:\"P\",Ꝓ:\"P\",Ꝕ:\"P\",\"Ⓠ\":\"Q\",Ｑ:\"Q\",Ꝗ:\"Q\",Ꝙ:\"Q\",Ɋ:\"Q\",\"Ⓡ\":\"R\",Ｒ:\"R\",Ŕ:\"R\",Ṙ:\"R\",Ř:\"R\",Ȑ:\"R\",Ȓ:\"R\",Ṛ:\"R\",Ṝ:\"R\",Ŗ:\"R\",Ṟ:\"R\",Ɍ:\"R\",Ɽ:\"R\",Ꝛ:\"R\",Ꞧ:\"R\",Ꞃ:\"R\",\"Ⓢ\":\"S\",Ｓ:\"S\",ẞ:\"S\",Ś:\"S\",Ṥ:\"S\",Ŝ:\"S\",Ṡ:\"S\",Š:\"S\",Ṧ:\"S\",Ṣ:\"S\",Ṩ:\"S\",Ș:\"S\",Ş:\"S\",Ȿ:\"S\",Ꞩ:\"S\",Ꞅ:\"S\",\"Ⓣ\":\"T\",Ｔ:\"T\",Ṫ:\"T\",Ť:\"T\",Ṭ:\"T\",Ț:\"T\",Ţ:\"T\",Ṱ:\"T\",Ṯ:\"T\",Ŧ:\"T\",Ƭ:\"T\",Ʈ:\"T\",Ⱦ:\"T\",Ꞇ:\"T\",Ꜩ:\"TZ\",\"Ⓤ\":\"U\",Ｕ:\"U\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ũ:\"U\",Ṹ:\"U\",Ū:\"U\",Ṻ:\"U\",Ŭ:\"U\",Ü:\"U\",Ǜ:\"U\",Ǘ:\"U\",Ǖ:\"U\",Ǚ:\"U\",Ủ:\"U\",Ů:\"U\",Ű:\"U\",Ǔ:\"U\",Ȕ:\"U\",Ȗ:\"U\",Ư:\"U\",Ừ:\"U\",Ứ:\"U\",Ữ:\"U\",Ử:\"U\",Ự:\"U\",Ụ:\"U\",Ṳ:\"U\",Ų:\"U\",Ṷ:\"U\",Ṵ:\"U\",Ʉ:\"U\",\"Ⓥ\":\"V\",Ｖ:\"V\",Ṽ:\"V\",Ṿ:\"V\",Ʋ:\"V\",Ꝟ:\"V\",Ʌ:\"V\",Ꝡ:\"VY\",\"Ⓦ\":\"W\",Ｗ:\"W\",Ẁ:\"W\",Ẃ:\"W\",Ŵ:\"W\",Ẇ:\"W\",Ẅ:\"W\",Ẉ:\"W\",Ⱳ:\"W\",\"Ⓧ\":\"X\",Ｘ:\"X\",Ẋ:\"X\",Ẍ:\"X\",\"Ⓨ\":\"Y\",Ｙ:\"Y\",Ỳ:\"Y\",Ý:\"Y\",Ŷ:\"Y\",Ỹ:\"Y\",Ȳ:\"Y\",Ẏ:\"Y\",Ÿ:\"Y\",Ỷ:\"Y\",Ỵ:\"Y\",Ƴ:\"Y\",Ɏ:\"Y\",Ỿ:\"Y\",\"Ⓩ\":\"Z\",Ｚ:\"Z\",Ź:\"Z\",Ẑ:\"Z\",Ż:\"Z\",Ž:\"Z\",Ẓ:\"Z\",Ẕ:\"Z\",Ƶ:\"Z\",Ȥ:\"Z\",Ɀ:\"Z\",Ⱬ:\"Z\",Ꝣ:\"Z\",\"ⓐ\":\"a\",ａ:\"a\",ẚ:\"a\",à:\"a\",á:\"a\",â:\"a\",ầ:\"a\",ấ:\"a\",ẫ:\"a\",ẩ:\"a\",ã:\"a\",ā:\"a\",ă:\"a\",ằ:\"a\",ắ:\"a\",ẵ:\"a\",ẳ:\"a\",ȧ:\"a\",ǡ:\"a\",ä:\"a\",ǟ:\"a\",ả:\"a\",å:\"a\",ǻ:\"a\",ǎ:\"a\",ȁ:\"a\",ȃ:\"a\",ạ:\"a\",ậ:\"a\",ặ:\"a\",ḁ:\"a\",ą:\"a\",ⱥ:\"a\",ɐ:\"a\",ꜳ:\"aa\",æ:\"ae\",ǽ:\"ae\",ǣ:\"ae\",ꜵ:\"ao\",ꜷ:\"au\",ꜹ:\"av\",ꜻ:\"av\",ꜽ:\"ay\",\"ⓑ\":\"b\",ｂ:\"b\",ḃ:\"b\",ḅ:\"b\",ḇ:\"b\",ƀ:\"b\",ƃ:\"b\",ɓ:\"b\",\"ⓒ\":\"c\",ｃ:\"c\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",ç:\"c\",ḉ:\"c\",ƈ:\"c\",ȼ:\"c\",ꜿ:\"c\",ↄ:\"c\",\"ⓓ\":\"d\",ｄ:\"d\",ḋ:\"d\",ď:\"d\",ḍ:\"d\",ḑ:\"d\",ḓ:\"d\",ḏ:\"d\",đ:\"d\",ƌ:\"d\",ɖ:\"d\",ɗ:\"d\",ꝺ:\"d\",ǳ:\"dz\",ǆ:\"dz\",\"ⓔ\":\"e\",ｅ:\"e\",è:\"e\",é:\"e\",ê:\"e\",ề:\"e\",ế:\"e\",ễ:\"e\",ể:\"e\",ẽ:\"e\",ē:\"e\",ḕ:\"e\",ḗ:\"e\",ĕ:\"e\",ė:\"e\",ë:\"e\",ẻ:\"e\",ě:\"e\",ȅ:\"e\",ȇ:\"e\",ẹ:\"e\",ệ:\"e\",ȩ:\"e\",ḝ:\"e\",ę:\"e\",ḙ:\"e\",ḛ:\"e\",ɇ:\"e\",ɛ:\"e\",ǝ:\"e\",\"ⓕ\":\"f\",ｆ:\"f\",ḟ:\"f\",ƒ:\"f\",ꝼ:\"f\",\"ⓖ\":\"g\",ｇ:\"g\",ǵ:\"g\",ĝ:\"g\",ḡ:\"g\",ğ:\"g\",ġ:\"g\",ǧ:\"g\",ģ:\"g\",ǥ:\"g\",ɠ:\"g\",ꞡ:\"g\",ᵹ:\"g\",ꝿ:\"g\",\"ⓗ\":\"h\",ｈ:\"h\",ĥ:\"h\",ḣ:\"h\",ḧ:\"h\",ȟ:\"h\",ḥ:\"h\",ḩ:\"h\",ḫ:\"h\",ẖ:\"h\",ħ:\"h\",ⱨ:\"h\",ⱶ:\"h\",ɥ:\"h\",ƕ:\"hv\",\"ⓘ\":\"i\",ｉ:\"i\",ì:\"i\",í:\"i\",î:\"i\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",ï:\"i\",ḯ:\"i\",ỉ:\"i\",ǐ:\"i\",ȉ:\"i\",ȋ:\"i\",ị:\"i\",į:\"i\",ḭ:\"i\",ɨ:\"i\",ı:\"i\",\"ⓙ\":\"j\",ｊ:\"j\",ĵ:\"j\",ǰ:\"j\",ɉ:\"j\",\"ⓚ\":\"k\",ｋ:\"k\",ḱ:\"k\",ǩ:\"k\",ḳ:\"k\",ķ:\"k\",ḵ:\"k\",ƙ:\"k\",ⱪ:\"k\",ꝁ:\"k\",ꝃ:\"k\",ꝅ:\"k\",ꞣ:\"k\",\"ⓛ\":\"l\",ｌ:\"l\",ŀ:\"l\",ĺ:\"l\",ľ:\"l\",ḷ:\"l\",ḹ:\"l\",ļ:\"l\",ḽ:\"l\",ḻ:\"l\",ſ:\"l\",ł:\"l\",ƚ:\"l\",ɫ:\"l\",ⱡ:\"l\",ꝉ:\"l\",ꞁ:\"l\",ꝇ:\"l\",ǉ:\"lj\",\"ⓜ\":\"m\",ｍ:\"m\",ḿ:\"m\",ṁ:\"m\",ṃ:\"m\",ɱ:\"m\",ɯ:\"m\",\"ⓝ\":\"n\",ｎ:\"n\",ǹ:\"n\",ń:\"n\",ñ:\"n\",ṅ:\"n\",ň:\"n\",ṇ:\"n\",ņ:\"n\",ṋ:\"n\",ṉ:\"n\",ƞ:\"n\",ɲ:\"n\",ŉ:\"n\",ꞑ:\"n\",ꞥ:\"n\",ǌ:\"nj\",\"ⓞ\":\"o\",ｏ:\"o\",ò:\"o\",ó:\"o\",ô:\"o\",ồ:\"o\",ố:\"o\",ỗ:\"o\",ổ:\"o\",õ:\"o\",ṍ:\"o\",ȭ:\"o\",ṏ:\"o\",ō:\"o\",ṑ:\"o\",ṓ:\"o\",ŏ:\"o\",ȯ:\"o\",ȱ:\"o\",ö:\"o\",ȫ:\"o\",ỏ:\"o\",ő:\"o\",ǒ:\"o\",ȍ:\"o\",ȏ:\"o\",ơ:\"o\",ờ:\"o\",ớ:\"o\",ỡ:\"o\",ở:\"o\",ợ:\"o\",ọ:\"o\",ộ:\"o\",ǫ:\"o\",ǭ:\"o\",ø:\"o\",ǿ:\"o\",ɔ:\"o\",ꝋ:\"o\",ꝍ:\"o\",ɵ:\"o\",œ:\"oe\",ƣ:\"oi\",ȣ:\"ou\",ꝏ:\"oo\",\"ⓟ\":\"p\",ｐ:\"p\",ṕ:\"p\",ṗ:\"p\",ƥ:\"p\",ᵽ:\"p\",ꝑ:\"p\",ꝓ:\"p\",ꝕ:\"p\",\"ⓠ\":\"q\",ｑ:\"q\",ɋ:\"q\",ꝗ:\"q\",ꝙ:\"q\",\"ⓡ\":\"r\",ｒ:\"r\",ŕ:\"r\",ṙ:\"r\",ř:\"r\",ȑ:\"r\",ȓ:\"r\",ṛ:\"r\",ṝ:\"r\",ŗ:\"r\",ṟ:\"r\",ɍ:\"r\",ɽ:\"r\",ꝛ:\"r\",ꞧ:\"r\",ꞃ:\"r\",\"ⓢ\":\"s\",ｓ:\"s\",ß:\"s\",ś:\"s\",ṥ:\"s\",ŝ:\"s\",ṡ:\"s\",š:\"s\",ṧ:\"s\",ṣ:\"s\",ṩ:\"s\",ș:\"s\",ş:\"s\",ȿ:\"s\",ꞩ:\"s\",ꞅ:\"s\",ẛ:\"s\",\"ⓣ\":\"t\",ｔ:\"t\",ṫ:\"t\",ẗ:\"t\",ť:\"t\",ṭ:\"t\",ț:\"t\",ţ:\"t\",ṱ:\"t\",ṯ:\"t\",ŧ:\"t\",ƭ:\"t\",ʈ:\"t\",ⱦ:\"t\",ꞇ:\"t\",ꜩ:\"tz\",\"ⓤ\":\"u\",ｕ:\"u\",ù:\"u\",ú:\"u\",û:\"u\",ũ:\"u\",ṹ:\"u\",ū:\"u\",ṻ:\"u\",ŭ:\"u\",ü:\"u\",ǜ:\"u\",ǘ:\"u\",ǖ:\"u\",ǚ:\"u\",ủ:\"u\",ů:\"u\",ű:\"u\",ǔ:\"u\",ȕ:\"u\",ȗ:\"u\",ư:\"u\",ừ:\"u\",ứ:\"u\",ữ:\"u\",ử:\"u\",ự:\"u\",ụ:\"u\",ṳ:\"u\",ų:\"u\",ṷ:\"u\",ṵ:\"u\",ʉ:\"u\",\"ⓥ\":\"v\",ｖ:\"v\",ṽ:\"v\",ṿ:\"v\",ʋ:\"v\",ꝟ:\"v\",ʌ:\"v\",ꝡ:\"vy\",\"ⓦ\":\"w\",ｗ:\"w\",ẁ:\"w\",ẃ:\"w\",ŵ:\"w\",ẇ:\"w\",ẅ:\"w\",ẘ:\"w\",ẉ:\"w\",ⱳ:\"w\",\"ⓧ\":\"x\",ｘ:\"x\",ẋ:\"x\",ẍ:\"x\",\"ⓨ\":\"y\",ｙ:\"y\",ỳ:\"y\",ý:\"y\",ŷ:\"y\",ỹ:\"y\",ȳ:\"y\",ẏ:\"y\",ÿ:\"y\",ỷ:\"y\",ẙ:\"y\",ỵ:\"y\",ƴ:\"y\",ɏ:\"y\",ỿ:\"y\",\"ⓩ\":\"z\",ｚ:\"z\",ź:\"z\",ẑ:\"z\",ż:\"z\",ž:\"z\",ẓ:\"z\",ẕ:\"z\",ƶ:\"z\",ȥ:\"z\",ɀ:\"z\",ⱬ:\"z\",ꝣ:\"z\",Ά:\"Α\",Έ:\"Ε\",Ή:\"Η\",Ί:\"Ι\",Ϊ:\"Ι\",Ό:\"Ο\",Ύ:\"Υ\",Ϋ:\"Υ\",Ώ:\"Ω\",ά:\"α\",έ:\"ε\",ή:\"η\",ί:\"ι\",ϊ:\"ι\",ΐ:\"ι\",ό:\"ο\",ύ:\"υ\",ϋ:\"υ\",ΰ:\"υ\",ώ:\"ω\",ς:\"σ\",\"’\":\"'\"}})),e.define(\"select2/data/base\",[\"../utils\"],(function(t){function e(t,n){e.__super__.constructor.call(this)}return t.Extend(e,t.Observable),e.prototype.current=function(t){throw new Error(\"The `current` method must be defined in child classes.\")},e.prototype.query=function(t,e){throw new Error(\"The `query` method must be defined in child classes.\")},e.prototype.bind=function(t,e){},e.prototype.destroy=function(){},e.prototype.generateResultId=function(e,n){var r=e.id+\"-result-\";return r+=t.generateChars(4),null!=n.id?r+=\"-\"+n.id.toString():r+=\"-\"+t.generateChars(4),r},e})),e.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],(function(t,e,n){function r(t,e){this.$element=t,this.options=e,r.__super__.constructor.call(this)}return e.Extend(r,t),r.prototype.current=function(t){var e=[],r=this;this.$element.find(\":selected\").each((function(){var t=n(this),i=r.item(t);e.push(i)})),t(e)},r.prototype.select=function(t){var e=this;if(t.selected=!0,n(t.element).is(\"option\"))return t.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");if(this.$element.prop(\"multiple\"))this.current((function(r){var i=[];(t=[t]).push.apply(t,r);for(var o=0;o<t.length;o++){var s=t[o].id;-1===n.inArray(s,i)&&i.push(s)}e.$element.val(i),e.$element.trigger(\"input\").trigger(\"change\")}));else{var r=t.id;this.$element.val(r),this.$element.trigger(\"input\").trigger(\"change\")}},r.prototype.unselect=function(t){var e=this;if(this.$element.prop(\"multiple\")){if(t.selected=!1,n(t.element).is(\"option\"))return t.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current((function(r){for(var i=[],o=0;o<r.length;o++){var s=r[o].id;s!==t.id&&-1===n.inArray(s,i)&&i.push(s)}e.$element.val(i),e.$element.trigger(\"input\").trigger(\"change\")}))}},r.prototype.bind=function(t,e){var n=this;this.container=t,t.on(\"select\",(function(t){n.select(t.data)})),t.on(\"unselect\",(function(t){n.unselect(t.data)}))},r.prototype.destroy=function(){this.$element.find(\"*\").each((function(){e.RemoveData(this)}))},r.prototype.query=function(t,e){var r=[],i=this;this.$element.children().each((function(){var e=n(this);if(e.is(\"option\")||e.is(\"optgroup\")){var o=i.item(e),s=i.matches(t,o);null!==s&&r.push(s)}})),e({results:r})},r.prototype.addOptions=function(t){e.appendMany(this.$element,t)},r.prototype.option=function(t){var r;t.children?(r=document.createElement(\"optgroup\")).label=t.text:void 0!==(r=document.createElement(\"option\")).textContent?r.textContent=t.text:r.innerText=t.text,void 0!==t.id&&(r.value=t.id),t.disabled&&(r.disabled=!0),t.selected&&(r.selected=!0),t.title&&(r.title=t.title);var i=n(r),o=this._normalizeItem(t);return o.element=r,e.StoreData(r,\"data\",o),i},r.prototype.item=function(t){var r={};if(null!=(r=e.GetData(t[0],\"data\")))return r;if(t.is(\"option\"))r={id:t.val(),text:t.text(),disabled:t.prop(\"disabled\"),selected:t.prop(\"selected\"),title:t.prop(\"title\")};else if(t.is(\"optgroup\")){r={text:t.prop(\"label\"),children:[],title:t.prop(\"title\")};for(var i=t.children(\"option\"),o=[],s=0;s<i.length;s++){var a=n(i[s]),u=this.item(a);o.push(u)}r.children=o}return(r=this._normalizeItem(r)).element=t[0],e.StoreData(t[0],\"data\",r),r},r.prototype._normalizeItem=function(t){t!==Object(t)&&(t={id:t,text:t});var e={selected:!1,disabled:!1};return null!=(t=n.extend({},{text:\"\"},t)).id&&(t.id=t.id.toString()),null!=t.text&&(t.text=t.text.toString()),null==t._resultId&&t.id&&null!=this.container&&(t._resultId=this.generateResultId(this.container,t)),n.extend({},e,t)},r.prototype.matches=function(t,e){return this.options.get(\"matcher\")(t,e)},r})),e.define(\"select2/data/array\",[\"./select\",\"../utils\",\"jquery\"],(function(t,e,n){function r(t,e){this._dataToConvert=e.get(\"data\")||[],r.__super__.constructor.call(this,t,e)}return e.Extend(r,t),r.prototype.bind=function(t,e){r.__super__.bind.call(this,t,e),this.addOptions(this.convertToOptions(this._dataToConvert))},r.prototype.select=function(t){var e=this.$element.find(\"option\").filter((function(e,n){return n.value==t.id.toString()}));0===e.length&&(e=this.option(t),this.addOptions(e)),r.__super__.select.call(this,t)},r.prototype.convertToOptions=function(t){var r=this,i=this.$element.find(\"option\"),o=i.map((function(){return r.item(n(this)).id})).get(),s=[];function a(t){return function(){return n(this).val()==t.id}}for(var u=0;u<t.length;u++){var l=this._normalizeItem(t[u]);if(n.inArray(l.id,o)>=0){var c=i.filter(a(l)),f=this.item(c),p=n.extend(!0,{},l,f),h=this.option(p);c.replaceWith(h)}else{var d=this.option(l);if(l.children){var g=this.convertToOptions(l.children);e.appendMany(d,g)}s.push(d)}}return s},r})),e.define(\"select2/data/ajax\",[\"./array\",\"../utils\",\"jquery\"],(function(t,e,n){function r(t,e){this.ajaxOptions=this._applyDefaults(e.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),r.__super__.constructor.call(this,t,e)}return e.Extend(r,t),r.prototype._applyDefaults=function(t){var e={data:function(t){return n.extend({},t,{q:t.term})},transport:function(t,e,r){var i=n.ajax(t);return i.then(e),i.fail(r),i}};return n.extend({},e,t,!0)},r.prototype.processResults=function(t){return t},r.prototype.query=function(t,e){var r=this;null!=this._request&&(n.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var i=n.extend({type:\"GET\"},this.ajaxOptions);function o(){var o=i.transport(i,(function(i){var o=r.processResults(i,t);r.options.get(\"debug\")&&window.console&&console.error&&(o&&o.results&&n.isArray(o.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),e(o)}),(function(){(!(\"status\"in o)||0!==o.status&&\"0\"!==o.status)&&r.trigger(\"results:message\",{message:\"errorLoading\"})}));r._request=o}\"function\"==typeof i.url&&(i.url=i.url.call(this.$element,t)),\"function\"==typeof i.data&&(i.data=i.data.call(this.$element,t)),this.ajaxOptions.delay&&null!=t.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(o,this.ajaxOptions.delay)):o()},r})),e.define(\"select2/data/tags\",[\"jquery\"],(function(t){function e(e,n,r){var i=r.get(\"tags\"),o=r.get(\"createTag\");void 0!==o&&(this.createTag=o);var s=r.get(\"insertTag\");if(void 0!==s&&(this.insertTag=s),e.call(this,n,r),t.isArray(i))for(var a=0;a<i.length;a++){var u=i[a],l=this._normalizeItem(u),c=this.option(l);this.$element.append(c)}}return e.prototype.query=function(t,e,n){var r=this;function i(t,o){for(var s=t.results,a=0;a<s.length;a++){var u=s[a],l=null!=u.children&&!i({results:u.children},!0);if((u.text||\"\").toUpperCase()===(e.term||\"\").toUpperCase()||l)return!o&&(t.data=s,void n(t))}if(o)return!0;var c=r.createTag(e);if(null!=c){var f=r.option(c);f.attr(\"data-select2-tag\",!0),r.addOptions([f]),r.insertTag(s,c)}t.results=s,n(t)}this._removeOldTags(),null!=e.term&&null==e.page?t.call(this,e,i):t.call(this,e,n)},e.prototype.createTag=function(e,n){var r=t.trim(n.term);return\"\"===r?null:{id:r,text:r}},e.prototype.insertTag=function(t,e,n){e.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find(\"option[data-select2-tag]\").each((function(){this.selected||t(this).remove()}))},e})),e.define(\"select2/data/tokenizer\",[\"jquery\"],(function(t){function e(t,e,n){var r=n.get(\"tokenizer\");void 0!==r&&(this.tokenizer=r),t.call(this,e,n)}return e.prototype.bind=function(t,e,n){t.call(this,e,n),this.$search=e.dropdown.$search||e.selection.$search||n.find(\".select2-search__field\")},e.prototype.query=function(e,n,r){var i=this;function o(e){var n=i._normalizeItem(e);if(!i.$element.find(\"option\").filter((function(){return t(this).val()===n.id})).length){var r=i.option(n);r.attr(\"data-select2-tag\",!0),i._removeOldTags(),i.addOptions([r])}s(n)}function s(t){i.trigger(\"select\",{data:t})}n.term=n.term||\"\";var a=this.tokenizer(n,this.options,o);a.term!==n.term&&(this.$search.length&&(this.$search.val(a.term),this.$search.trigger(\"focus\")),n.term=a.term),e.call(this,n,r)},e.prototype.tokenizer=function(e,n,r,i){for(var o=r.get(\"tokenSeparators\")||[],s=n.term,a=0,u=this.createTag||function(t){return{id:t.term,text:t.term}};a<s.length;){var l=s[a];if(-1!==t.inArray(l,o)){var c=s.substr(0,a),f=u(t.extend({},n,{term:c}));null!=f?(i(f),s=s.substr(a+1)||\"\",a=0):a++}else a++}return{term:s}},e})),e.define(\"select2/data/minimumInputLength\",[],(function(){function t(t,e,n){this.minimumInputLength=n.get(\"minimumInputLength\"),t.call(this,e,n)}return t.prototype.query=function(t,e,n){e.term=e.term||\"\",e.term.length<this.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:e.term,params:e}}):t.call(this,e,n)},t})),e.define(\"select2/data/maximumInputLength\",[],(function(){function t(t,e,n){this.maximumInputLength=n.get(\"maximumInputLength\"),t.call(this,e,n)}return t.prototype.query=function(t,e,n){e.term=e.term||\"\",this.maximumInputLength>0&&e.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:e.term,params:e}}):t.call(this,e,n)},t})),e.define(\"select2/data/maximumSelectionLength\",[],(function(){function t(t,e,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),t.call(this,e,n)}return t.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"select\",(function(){r._checkIfMaximumSelected()}))},t.prototype.query=function(t,e,n){var r=this;this._checkIfMaximumSelected((function(){t.call(r,e,n)}))},t.prototype._checkIfMaximumSelected=function(t,e){var n=this;this.current((function(t){var r=null!=t?t.length:0;n.maximumSelectionLength>0&&r>=n.maximumSelectionLength?n.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:n.maximumSelectionLength}}):e&&e()}))},t})),e.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],(function(t,e){function n(t,e){this.$element=t,this.options=e,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=e,e},n.prototype.bind=function(){},n.prototype.position=function(t,e){},n.prototype.destroy=function(){this.$dropdown.remove()},n})),e.define(\"select2/dropdown/search\",[\"jquery\",\"../utils\"],(function(t,e){function n(){}return n.prototype.render=function(e){var n=e.call(this),r=t('<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>');return this.$searchContainer=r,this.$search=r.find(\"input\"),n.prepend(r),n},n.prototype.bind=function(e,n,r){var i=this,o=n.id+\"-results\";e.call(this,n,r),this.$search.on(\"keydown\",(function(t){i.trigger(\"keypress\",t),i._keyUpPrevented=t.isDefaultPrevented()})),this.$search.on(\"input\",(function(e){t(this).off(\"keyup\")})),this.$search.on(\"keyup input\",(function(t){i.handleSearch(t)})),n.on(\"open\",(function(){i.$search.attr(\"tabindex\",0),i.$search.attr(\"aria-controls\",o),i.$search.trigger(\"focus\"),window.setTimeout((function(){i.$search.trigger(\"focus\")}),0)})),n.on(\"close\",(function(){i.$search.attr(\"tabindex\",-1),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.val(\"\"),i.$search.trigger(\"blur\")})),n.on(\"focus\",(function(){n.isOpen()||i.$search.trigger(\"focus\")})),n.on(\"results:all\",(function(t){null!=t.query.term&&\"\"!==t.query.term||(i.showSearch(t)?i.$searchContainer.removeClass(\"select2-search--hide\"):i.$searchContainer.addClass(\"select2-search--hide\"))})),n.on(\"results:focus\",(function(t){t.data._resultId?i.$search.attr(\"aria-activedescendant\",t.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")}))},n.prototype.handleSearch=function(t){if(!this._keyUpPrevented){var e=this.$search.val();this.trigger(\"query\",{term:e})}this._keyUpPrevented=!1},n.prototype.showSearch=function(t,e){return!0},n})),e.define(\"select2/dropdown/hidePlaceholder\",[],(function(){function t(t,e,n,r){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),t.call(this,e,n,r)}return t.prototype.append=function(t,e){e.results=this.removePlaceholder(e.results),t.call(this,e)},t.prototype.normalizePlaceholder=function(t,e){return\"string\"==typeof e&&(e={id:\"\",text:e}),e},t.prototype.removePlaceholder=function(t,e){for(var n=e.slice(0),r=e.length-1;r>=0;r--){var i=e[r];this.placeholder.id===i.id&&n.splice(r,1)}return n},t})),e.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],(function(t){function e(t,e,n,r){this.lastParams={},t.call(this,e,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(t,e){this.$loadingMore.remove(),this.loading=!1,t.call(this,e),this.showLoadingMore(e)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"query\",(function(t){r.lastParams=t,r.loading=!0})),e.on(\"query:append\",(function(t){r.lastParams=t,r.loading=!0})),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=t.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&e&&this.$results.offset().top+this.$results.outerHeight(!1)+50>=this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)&&this.loadMore()},e.prototype.loadMore=function(){this.loading=!0;var e=t.extend({},{page:1},this.lastParams);e.page++,this.trigger(\"query:append\",e)},e.prototype.showLoadingMore=function(t,e){return e.pagination&&e.pagination.more},e.prototype.createLoadingMore=function(){var e=t('<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'),n=this.options.get(\"translations\").get(\"loadingMore\");return e.html(n(this.lastParams)),e},e})),e.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],(function(t,e){function n(e,n,r){this.$dropdownParent=t(r.get(\"dropdownParent\")||document.body),e.call(this,n,r)}return n.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"open\",(function(){r._showDropdown(),r._attachPositioningHandler(e),r._bindContainerResultHandlers(e)})),e.on(\"close\",(function(){r._hideDropdown(),r._detachPositioningHandler(e)})),this.$dropdownContainer.on(\"mousedown\",(function(t){t.stopPropagation()}))},n.prototype.destroy=function(t){t.call(this),this.$dropdownContainer.remove()},n.prototype.position=function(t,e,n){e.attr(\"class\",n.attr(\"class\")),e.removeClass(\"select2\"),e.addClass(\"select2-container--open\"),e.css({position:\"absolute\",top:-999999}),this.$container=n},n.prototype.render=function(e){var n=t(\"<span></span>\"),r=e.call(this);return n.append(r),this.$dropdownContainer=n,n},n.prototype._hideDropdown=function(t){this.$dropdownContainer.detach()},n.prototype._bindContainerResultHandlers=function(t,e){if(!this._containerResultsHandlersBound){var n=this;e.on(\"results:all\",(function(){n._positionDropdown(),n._resizeDropdown()})),e.on(\"results:append\",(function(){n._positionDropdown(),n._resizeDropdown()})),e.on(\"results:message\",(function(){n._positionDropdown(),n._resizeDropdown()})),e.on(\"select\",(function(){n._positionDropdown(),n._resizeDropdown()})),e.on(\"unselect\",(function(){n._positionDropdown(),n._resizeDropdown()})),this._containerResultsHandlersBound=!0}},n.prototype._attachPositioningHandler=function(n,r){var i=this,o=\"scroll.select2.\"+r.id,s=\"resize.select2.\"+r.id,a=\"orientationchange.select2.\"+r.id,u=this.$container.parents().filter(e.hasScroll);u.each((function(){e.StoreData(this,\"select2-scroll-position\",{x:t(this).scrollLeft(),y:t(this).scrollTop()})})),u.on(o,(function(n){var r=e.GetData(this,\"select2-scroll-position\");t(this).scrollTop(r.y)})),t(window).on(o+\" \"+s+\" \"+a,(function(t){i._positionDropdown(),i._resizeDropdown()}))},n.prototype._detachPositioningHandler=function(n,r){var i=\"scroll.select2.\"+r.id,o=\"resize.select2.\"+r.id,s=\"orientationchange.select2.\"+r.id;this.$container.parents().filter(e.hasScroll).off(i),t(window).off(i+\" \"+o+\" \"+s)},n.prototype._positionDropdown=function(){var e=t(window),n=this.$dropdown.hasClass(\"select2-dropdown--above\"),r=this.$dropdown.hasClass(\"select2-dropdown--below\"),i=null,o=this.$container.offset();o.bottom=o.top+this.$container.outerHeight(!1);var s={height:this.$container.outerHeight(!1)};s.top=o.top,s.bottom=o.top+s.height;var a={height:this.$dropdown.outerHeight(!1)},u={top:e.scrollTop(),bottom:e.scrollTop()+e.height()},l=u.top<o.top-a.height,c=u.bottom>o.bottom+a.height,f={left:o.left,top:s.bottom},p=this.$dropdownParent;\"static\"===p.css(\"position\")&&(p=p.offsetParent());var h={top:0,left:0};(t.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),f.top-=h.top,f.left-=h.left,n||r||(i=\"below\"),c||!l||n?!l&&c&&n&&(i=\"below\"):i=\"above\",(\"above\"==i||n&&\"below\"!==i)&&(f.top=s.top-h.top-a.height),null!=i&&(this.$dropdown.removeClass(\"select2-dropdown--below select2-dropdown--above\").addClass(\"select2-dropdown--\"+i),this.$container.removeClass(\"select2-container--below select2-container--above\").addClass(\"select2-container--\"+i)),this.$dropdownContainer.css(f)},n.prototype._resizeDropdown=function(){var t={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(t.minWidth=t.width,t.position=\"relative\",t.width=\"auto\"),this.$dropdown.css(t)},n.prototype._showDropdown=function(t){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},n})),e.define(\"select2/dropdown/minimumResultsForSearch\",[],(function(){function t(e){for(var n=0,r=0;r<e.length;r++){var i=e[r];i.children?n+=t(i.children):n++}return n}function e(t,e,n,r){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),t.call(this,e,n,r)}return e.prototype.showSearch=function(e,n){return!(t(n.data.results)<this.minimumResultsForSearch)&&e.call(this,n)},e})),e.define(\"select2/dropdown/selectOnClose\",[\"../utils\"],(function(t){function e(){}return e.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"close\",(function(t){r._handleSelectOnClose(t)}))},e.prototype._handleSelectOnClose=function(e,n){if(n&&null!=n.originalSelect2Event){var r=n.originalSelect2Event;if(\"select\"===r._type||\"unselect\"===r._type)return}var i=this.getHighlightedResults();if(!(i.length<1)){var o=t.GetData(i[0],\"data\");null!=o.element&&o.element.selected||null==o.element&&o.selected||this.trigger(\"select\",{data:o})}},e})),e.define(\"select2/dropdown/closeOnSelect\",[],(function(){function t(){}return t.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"select\",(function(t){r._selectTriggered(t)})),e.on(\"unselect\",(function(t){r._selectTriggered(t)}))},t.prototype._selectTriggered=function(t,e){var n=e.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger(\"close\",{originalEvent:n,originalSelect2Event:e})},t})),e.define(\"select2/i18n/en\",[],(function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(t){var e=t.input.length-t.maximum,n=\"Please delete \"+e+\" character\";return 1!=e&&(n+=\"s\"),n},inputTooShort:function(t){return\"Please enter \"+(t.minimum-t.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(t){var e=\"You can only select \"+t.maximum+\" item\";return 1!=t.maximum&&(e+=\"s\"),e},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"}}})),e.define(\"select2/defaults\",[\"jquery\",\"require\",\"./results\",\"./selection/single\",\"./selection/multiple\",\"./selection/placeholder\",\"./selection/allowClear\",\"./selection/search\",\"./selection/eventRelay\",\"./utils\",\"./translation\",\"./diacritics\",\"./data/select\",\"./data/array\",\"./data/ajax\",\"./data/tags\",\"./data/tokenizer\",\"./data/minimumInputLength\",\"./data/maximumInputLength\",\"./data/maximumSelectionLength\",\"./dropdown\",\"./dropdown/search\",\"./dropdown/hidePlaceholder\",\"./dropdown/infiniteScroll\",\"./dropdown/attachBody\",\"./dropdown/minimumResultsForSearch\",\"./dropdown/selectOnClose\",\"./dropdown/closeOnSelect\",\"./i18n/en\"],(function(t,e,n,r,i,o,s,a,u,l,c,f,p,h,d,g,v,m,y,b,w,_,x,T,C,A,S,$,E){function k(){this.reset()}return k.prototype.apply=function(c){if(null==(c=t.extend(!0,{},this.defaults,c)).dataAdapter){if(null!=c.ajax?c.dataAdapter=d:null!=c.data?c.dataAdapter=h:c.dataAdapter=p,c.minimumInputLength>0&&(c.dataAdapter=l.Decorate(c.dataAdapter,m)),c.maximumInputLength>0&&(c.dataAdapter=l.Decorate(c.dataAdapter,y)),c.maximumSelectionLength>0&&(c.dataAdapter=l.Decorate(c.dataAdapter,b)),c.tags&&(c.dataAdapter=l.Decorate(c.dataAdapter,g)),null==c.tokenSeparators&&null==c.tokenizer||(c.dataAdapter=l.Decorate(c.dataAdapter,v)),null!=c.query){var f=e(c.amdBase+\"compat/query\");c.dataAdapter=l.Decorate(c.dataAdapter,f)}if(null!=c.initSelection){var E=e(c.amdBase+\"compat/initSelection\");c.dataAdapter=l.Decorate(c.dataAdapter,E)}}if(null==c.resultsAdapter&&(c.resultsAdapter=n,null!=c.ajax&&(c.resultsAdapter=l.Decorate(c.resultsAdapter,T)),null!=c.placeholder&&(c.resultsAdapter=l.Decorate(c.resultsAdapter,x)),c.selectOnClose&&(c.resultsAdapter=l.Decorate(c.resultsAdapter,S))),null==c.dropdownAdapter){if(c.multiple)c.dropdownAdapter=w;else{var k=l.Decorate(w,_);c.dropdownAdapter=k}if(0!==c.minimumResultsForSearch&&(c.dropdownAdapter=l.Decorate(c.dropdownAdapter,A)),c.closeOnSelect&&(c.dropdownAdapter=l.Decorate(c.dropdownAdapter,$)),null!=c.dropdownCssClass||null!=c.dropdownCss||null!=c.adaptDropdownCssClass){var D=e(c.amdBase+\"compat/dropdownCss\");c.dropdownAdapter=l.Decorate(c.dropdownAdapter,D)}c.dropdownAdapter=l.Decorate(c.dropdownAdapter,C)}if(null==c.selectionAdapter){if(c.multiple?c.selectionAdapter=i:c.selectionAdapter=r,null!=c.placeholder&&(c.selectionAdapter=l.Decorate(c.selectionAdapter,o)),c.allowClear&&(c.selectionAdapter=l.Decorate(c.selectionAdapter,s)),c.multiple&&(c.selectionAdapter=l.Decorate(c.selectionAdapter,a)),null!=c.containerCssClass||null!=c.containerCss||null!=c.adaptContainerCssClass){var j=e(c.amdBase+\"compat/containerCss\");c.selectionAdapter=l.Decorate(c.selectionAdapter,j)}c.selectionAdapter=l.Decorate(c.selectionAdapter,u)}c.language=this._resolveLanguage(c.language),c.language.push(\"en\");for(var O=[],N=0;N<c.language.length;N++){var R=c.language[N];-1===O.indexOf(R)&&O.push(R)}return c.language=O,c.translations=this._processTranslations(c.language,c.debug),c},k.prototype.reset=function(){function e(t){function e(t){return f[t]||t}return t.replace(/[^\\u0000-\\u007E]/g,e)}function n(r,i){if(\"\"===t.trim(r.term))return i;if(i.children&&i.children.length>0){for(var o=t.extend(!0,{},i),s=i.children.length-1;s>=0;s--)null==n(r,i.children[s])&&o.children.splice(s,1);return o.children.length>0?o:n(r,o)}var a=e(i.text).toUpperCase(),u=e(r.term).toUpperCase();return a.indexOf(u)>-1?i:null}this.defaults={amdBase:\"./\",amdLanguageBase:\"./i18n/\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:l.escapeMarkup,language:{},matcher:n,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(t){return t},templateResult:function(t){return t.text},templateSelection:function(t){return t.text},theme:\"default\",width:\"resolve\"}},k.prototype.applyFromElement=function(t,e){var n=t.language,r=this.defaults.language,i=e.prop(\"lang\"),o=e.closest(\"[lang]\").prop(\"lang\"),s=Array.prototype.concat.call(this._resolveLanguage(i),this._resolveLanguage(n),this._resolveLanguage(r),this._resolveLanguage(o));return t.language=s,t},k.prototype._resolveLanguage=function(e){if(!e)return[];if(t.isEmptyObject(e))return[];if(t.isPlainObject(e))return[e];var n;n=t.isArray(e)?e:[e];for(var r=[],i=0;i<n.length;i++)if(r.push(n[i]),\"string\"==typeof n[i]&&n[i].indexOf(\"-\")>0){var o=n[i].split(\"-\")[0];r.push(o)}return r},k.prototype._processTranslations=function(e,n){for(var r=new c,i=0;i<e.length;i++){var o=new c,s=e[i];if(\"string\"==typeof s)try{o=c.loadPath(s)}catch(t){try{s=this.defaults.amdLanguageBase+s,o=c.loadPath(s)}catch(t){n&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+s+'\" could not be automatically loaded. A fallback will be used instead.')}}else o=t.isPlainObject(s)?new c(s):s;r.extend(o)}return r},k.prototype.set=function(e,n){var r={};r[t.camelCase(e)]=n;var i=l._convertData(r);t.extend(!0,this.defaults,i)},new k})),e.define(\"select2/options\",[\"require\",\"jquery\",\"./defaults\",\"./utils\"],(function(t,e,n,r){function i(e,i){if(this.options=e,null!=i&&this.fromElement(i),null!=i&&(this.options=n.applyFromElement(this.options,i)),this.options=n.apply(this.options),i&&i.is(\"input\")){var o=t(this.get(\"amdBase\")+\"compat/inputData\");this.options.dataAdapter=r.Decorate(this.options.dataAdapter,o)}}return i.prototype.fromElement=function(t){var n=[\"select2\"];null==this.options.multiple&&(this.options.multiple=t.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=t.prop(\"disabled\")),null==this.options.dir&&(t.prop(\"dir\")?this.options.dir=t.prop(\"dir\"):t.closest(\"[dir]\").prop(\"dir\")?this.options.dir=t.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),t.prop(\"disabled\",this.options.disabled),t.prop(\"multiple\",this.options.multiple),r.GetData(t[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),r.StoreData(t[0],\"data\",r.GetData(t[0],\"select2Tags\")),r.StoreData(t[0],\"tags\",!0)),r.GetData(t[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),t.attr(\"ajax--url\",r.GetData(t[0],\"ajaxUrl\")),r.StoreData(t[0],\"ajax-Url\",r.GetData(t[0],\"ajaxUrl\")));var i={};function o(t,e){return e.toUpperCase()}for(var s=0;s<t[0].attributes.length;s++){var a=t[0].attributes[s].name,u=\"data-\";if(a.substr(0,u.length)==u){var l=a.substring(u.length),c=r.GetData(t[0],l);i[l.replace(/-([a-z])/g,o)]=c}}e.fn.jquery&&\"1.\"==e.fn.jquery.substr(0,2)&&t[0].dataset&&(i=e.extend(!0,{},t[0].dataset,i));var f=e.extend(!0,{},r.GetData(t[0]),i);for(var p in f=r._convertData(f))e.inArray(p,n)>-1||(e.isPlainObject(this.options[p])?e.extend(this.options[p],f[p]):this.options[p]=f[p]);return this},i.prototype.get=function(t){return this.options[t]},i.prototype.set=function(t,e){this.options[t]=e},i})),e.define(\"select2/core\",[\"jquery\",\"./options\",\"./utils\",\"./keys\"],(function(t,e,n,r){var i=function(t,r){null!=n.GetData(t[0],\"select2\")&&n.GetData(t[0],\"select2\").destroy(),this.$element=t,this.id=this._generateId(t),r=r||{},this.options=new e(r,t),i.__super__.constructor.call(this);var o=t.attr(\"tabindex\")||0;n.StoreData(t[0],\"old-tabindex\",o),t.attr(\"tabindex\",\"-1\");var s=this.options.get(\"dataAdapter\");this.dataAdapter=new s(t,this.options);var a=this.render();this._placeContainer(a);var u=this.options.get(\"selectionAdapter\");this.selection=new u(t,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,a);var l=this.options.get(\"dropdownAdapter\");this.dropdown=new l(t,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,a);var c=this.options.get(\"resultsAdapter\");this.results=new c(t,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var f=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current((function(t){f.trigger(\"selection:update\",{data:t})})),t.addClass(\"select2-hidden-accessible\"),t.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),n.StoreData(t[0],\"select2\",this),t.data(\"select2\",this)};return n.Extend(i,n.Observable),i.prototype._generateId=function(t){return\"select2-\"+(null!=t.attr(\"id\")?t.attr(\"id\"):null!=t.attr(\"name\")?t.attr(\"name\")+\"-\"+n.generateChars(2):n.generateChars(4)).replace(/(:|\\.|\\[|\\]|,)/g,\"\")},i.prototype._placeContainer=function(t){t.insertAfter(this.$element);var e=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=e&&t.css(\"width\",e)},i.prototype._resolveWidth=function(t,e){var n=/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(\"resolve\"==e){var r=this._resolveWidth(t,\"style\");return null!=r?r:this._resolveWidth(t,\"element\")}if(\"element\"==e){var i=t.outerWidth(!1);return i<=0?\"auto\":i+\"px\"}if(\"style\"==e){var o=t.attr(\"style\");if(\"string\"!=typeof o)return null;for(var s=o.split(\";\"),a=0,u=s.length;a<u;a+=1){var l=s[a].replace(/\\s/g,\"\").match(n);if(null!==l&&l.length>=1)return l[1]}return null}return\"computedstyle\"==e?window.getComputedStyle(t[0]).width:e},i.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},i.prototype._registerDomEvents=function(){var t=this;this.$element.on(\"change.select2\",(function(){t.dataAdapter.current((function(e){t.trigger(\"selection:update\",{data:e})}))})),this.$element.on(\"focus.select2\",(function(e){t.trigger(\"focus\",e)})),this._syncA=n.bind(this._syncAttributes,this),this._syncS=n.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent(\"onpropertychange\",this._syncA);var e=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=e?(this._observer=new e((function(e){t._syncA(),t._syncS(null,e)})),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener(\"DOMAttrModified\",t._syncA,!1),this.$element[0].addEventListener(\"DOMNodeInserted\",t._syncS,!1),this.$element[0].addEventListener(\"DOMNodeRemoved\",t._syncS,!1))},i.prototype._registerDataEvents=function(){var t=this;this.dataAdapter.on(\"*\",(function(e,n){t.trigger(e,n)}))},i.prototype._registerSelectionEvents=function(){var e=this,n=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",(function(){e.toggleDropdown()})),this.selection.on(\"focus\",(function(t){e.focus(t)})),this.selection.on(\"*\",(function(r,i){-1===t.inArray(r,n)&&e.trigger(r,i)}))},i.prototype._registerDropdownEvents=function(){var t=this;this.dropdown.on(\"*\",(function(e,n){t.trigger(e,n)}))},i.prototype._registerResultsEvents=function(){var t=this;this.results.on(\"*\",(function(e,n){t.trigger(e,n)}))},i.prototype._registerEvents=function(){var t=this;this.on(\"open\",(function(){t.$container.addClass(\"select2-container--open\")})),this.on(\"close\",(function(){t.$container.removeClass(\"select2-container--open\")})),this.on(\"enable\",(function(){t.$container.removeClass(\"select2-container--disabled\")})),this.on(\"disable\",(function(){t.$container.addClass(\"select2-container--disabled\")})),this.on(\"blur\",(function(){t.$container.removeClass(\"select2-container--focus\")})),this.on(\"query\",(function(e){t.isOpen()||t.trigger(\"open\",{}),this.dataAdapter.query(e,(function(n){t.trigger(\"results:all\",{data:n,query:e})}))})),this.on(\"query:append\",(function(e){this.dataAdapter.query(e,(function(n){t.trigger(\"results:append\",{data:n,query:e})}))})),this.on(\"keypress\",(function(e){var n=e.which;t.isOpen()?n===r.ESC||n===r.TAB||n===r.UP&&e.altKey?(t.close(e),e.preventDefault()):n===r.ENTER?(t.trigger(\"results:select\",{}),e.preventDefault()):n===r.SPACE&&e.ctrlKey?(t.trigger(\"results:toggle\",{}),e.preventDefault()):n===r.UP?(t.trigger(\"results:previous\",{}),e.preventDefault()):n===r.DOWN&&(t.trigger(\"results:next\",{}),e.preventDefault()):(n===r.ENTER||n===r.SPACE||n===r.DOWN&&e.altKey)&&(t.open(),e.preventDefault())}))},i.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},i.prototype._isChangeMutation=function(e,n){var r=!1,i=this;if(!e||!e.target||\"OPTION\"===e.target.nodeName||\"OPTGROUP\"===e.target.nodeName){if(n)if(n.addedNodes&&n.addedNodes.length>0)for(var o=0;o<n.addedNodes.length;o++)n.addedNodes[o].selected&&(r=!0);else n.removedNodes&&n.removedNodes.length>0?r=!0:t.isArray(n)&&t.each(n,(function(t,e){if(i._isChangeMutation(t,e))return r=!0,!1}));else r=!0;return r}},i.prototype._syncSubtree=function(t,e){var n=this._isChangeMutation(t,e),r=this;n&&this.dataAdapter.current((function(t){r.trigger(\"selection:update\",{data:t})}))},i.prototype.trigger=function(t,e){var n=i.__super__.trigger,r={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===e&&(e={}),t in r){var o=r[t],s={prevented:!1,name:t,args:e};if(n.call(this,o,s),s.prevented)return void(e.prevented=!0)}n.call(this,t,e)},i.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},i.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},i.prototype.close=function(t){this.isOpen()&&this.trigger(\"close\",{originalEvent:t})},i.prototype.isEnabled=function(){return!this.isDisabled()},i.prototype.isDisabled=function(){return this.options.get(\"disabled\")},i.prototype.isOpen=function(){return this.$container.hasClass(\"select2-container--open\")},i.prototype.hasFocus=function(){return this.$container.hasClass(\"select2-container--focus\")},i.prototype.focus=function(t){this.hasFocus()||(this.$container.addClass(\"select2-container--focus\"),this.trigger(\"focus\",{}))},i.prototype.enable=function(t){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'),null!=t&&0!==t.length||(t=[!0]);var e=!t[0];this.$element.prop(\"disabled\",e)},i.prototype.data=function(){this.options.get(\"debug\")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current((function(e){t=e})),t},i.prototype.val=function(e){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var n=e[0];t.isArray(n)&&(n=t.map(n,(function(t){return t.toString()}))),this.$element.val(n).trigger(\"input\").trigger(\"change\")},i.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent(\"onpropertychange\",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener(\"DOMAttrModified\",this._syncA,!1),this.$element[0].removeEventListener(\"DOMNodeInserted\",this._syncS,!1),this.$element[0].removeEventListener(\"DOMNodeRemoved\",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",n.GetData(this.$element[0],\"old-tabindex\")),this.$element.removeClass(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),n.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},i.prototype.render=function(){var e=t('<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$container=e,this.$container.addClass(\"select2-container--\"+this.options.get(\"theme\")),n.StoreData(e[0],\"element\",this.$element),e},i})),e.define(\"jquery-mousewheel\",[\"jquery\"],(function(t){return t})),e.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],(function(t,e,n,r,i){if(null==t.fn.select2){var o=[\"open\",\"close\",\"destroy\"];t.fn.select2=function(e){if(\"object\"==typeof(e=e||{}))return this.each((function(){var r=t.extend(!0,{},e);new n(t(this),r)})),this;if(\"string\"==typeof e){var r,s=Array.prototype.slice.call(arguments,1);return this.each((function(){var t=i.GetData(this,\"select2\");null==t&&window.console&&console.error&&console.error(\"The select2('\"+e+\"') method was called on an element that is not using Select2.\"),r=t[e].apply(t,s)})),t.inArray(e,o)>-1?this:r}throw new Error(\"Invalid arguments for Select2: \"+e)}}return null==t.fn.select2.defaults&&(t.fn.select2.defaults=r),n})),{define:e.define,require:e.require}}(),n=e.require(\"jquery.select2\");return t.fn.select2.amd=e,n})?r.apply(e,i):r)||(t.exports=o)},911:(t,e,n)=>{var r,i,o;!function(s){\"use strict\";i=[n(755)],r=function(t,e){var n={beforeShow:h,move:h,change:h,show:h,hide:h,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:\"body\",maxSelectionSize:7,cancelText:\"cancel\",chooseText:\"choose\",togglePaletteMoreText:\"more\",togglePaletteLessText:\"less\",clearText:\"Clear Color Selection\",noColorSelectedText:\"No Color Selected\",preferredFormat:!1,className:\"\",containerClassName:\"\",replacerClassName:\"\",showAlpha:!1,theme:\"sp-light\",palette:[[\"#ffffff\",\"#000000\",\"#ff0000\",\"#ff8000\",\"#ffff00\",\"#008000\",\"#0000ff\",\"#4b0082\",\"#9400d3\"]],selectionPalette:[],disabled:!1,offset:null},r=[],i=!!/msie/i.exec(window.navigator.userAgent),o=function(){function t(t,e){return!!~(\"\"+t).indexOf(e)}var e=document.createElement(\"div\").style;return e.cssText=\"background-color:rgba(0,0,0,.5)\",t(e.backgroundColor,\"rgba\")||t(e.backgroundColor,\"hsla\")}(),s=[\"<div class='sp-replacer'>\",\"<div class='sp-preview'><div class='sp-preview-inner'></div></div>\",\"<div class='sp-dd'>&#9660;</div>\",\"</div>\"].join(\"\"),a=function(){var t=\"\";if(i)for(var e=1;e<=6;e++)t+=\"<div class='sp-\"+e+\"'></div>\";return[\"<div class='sp-container sp-hidden'>\",\"<div class='sp-palette-container'>\",\"<div class='sp-palette sp-thumb sp-cf'></div>\",\"<div class='sp-palette-button-container sp-cf'>\",\"<button type='button' class='sp-palette-toggle'></button>\",\"</div>\",\"</div>\",\"<div class='sp-picker-container'>\",\"<div class='sp-top sp-cf'>\",\"<div class='sp-fill'></div>\",\"<div class='sp-top-inner'>\",\"<div class='sp-color'>\",\"<div class='sp-sat'>\",\"<div class='sp-val'>\",\"<div class='sp-dragger'></div>\",\"</div>\",\"</div>\",\"</div>\",\"<div class='sp-clear sp-clear-display'>\",\"</div>\",\"<div class='sp-hue'>\",\"<div class='sp-slider'></div>\",t,\"</div>\",\"</div>\",\"<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>\",\"</div>\",\"<div class='sp-input-container sp-cf'>\",\"<input class='sp-input' type='text' spellcheck='false'  />\",\"</div>\",\"<div class='sp-initial sp-thumb sp-cf'></div>\",\"<div class='sp-button-container sp-cf'>\",\"<a class='sp-cancel' href='#'></a>\",\"<button type='button' class='sp-choose'></button>\",\"</div>\",\"</div>\",\"</div>\"].join(\"\")}();function u(e,n,r,i){for(var s=[],a=0;a<e.length;a++){var u=e[a];if(u){var l=tinycolor(u),c=l.toHsl().l<.5?\"sp-thumb-el sp-thumb-dark\":\"sp-thumb-el sp-thumb-light\";c+=tinycolor.equals(n,u)?\" sp-thumb-active\":\"\";var f=l.toString(i.preferredFormat||\"rgb\"),p=o?\"background-color:\"+l.toRgbString():\"filter:\"+l.toFilter();s.push('<span title=\"'+f+'\" data-color=\"'+l.toRgbString()+'\" class=\"'+c+'\"><span class=\"sp-thumb-inner\" style=\"'+p+';\"></span></span>')}else{var h=\"sp-clear-display\";s.push(t(\"<div />\").append(t('<span data-color=\"\" style=\"background-color:transparent;\" class=\"'+h+'\"></span>').attr(\"title\",i.noColorSelectedText)).html())}}return\"<div class='sp-cf \"+r+\"'>\"+s.join(\"\")+\"</div>\"}function l(){for(var t=0;t<r.length;t++)r[t]&&r[t].hide()}function c(e,r){var i=t.extend({},n,e);return i.callbacks={move:g(i.move,r),change:g(i.change,r),show:g(i.show,r),hide:g(i.hide,r),beforeShow:g(i.beforeShow,r)},i}function f(n,f){var h=c(f,n),g=h.flat,b=h.showSelectionPalette,w=h.localStorageKey,_=h.theme,x=h.callbacks,T=m(Bt,10),C=!1,A=!1,S=0,$=0,E=0,k=0,D=0,j=0,O=0,N=0,R=0,I=0,L=1,P=[],q=[],H={},M=h.selectionPalette.slice(0),U=h.maxSelectionSize,F=\"sp-dragging\",z=null,B=n.ownerDocument,W=(B.body,t(n)),G=!1,V=t(a,B).addClass(_),K=V.find(\".sp-picker-container\"),X=V.find(\".sp-color\"),Y=V.find(\".sp-dragger\"),Q=V.find(\".sp-hue\"),J=V.find(\".sp-slider\"),Z=V.find(\".sp-alpha-inner\"),tt=V.find(\".sp-alpha\"),et=V.find(\".sp-alpha-handle\"),nt=V.find(\".sp-input\"),rt=V.find(\".sp-palette\"),it=V.find(\".sp-initial\"),ot=V.find(\".sp-cancel\"),st=V.find(\".sp-clear\"),at=V.find(\".sp-choose\"),ut=V.find(\".sp-palette-toggle\"),lt=W.is(\"input\"),ct=lt&&\"color\"===W.attr(\"type\")&&y(),ft=lt&&!g,pt=ft?t(s).addClass(_).addClass(h.className).addClass(h.replacerClassName):t([]),ht=ft?pt:W,dt=pt.find(\".sp-preview-inner\"),gt=h.color||lt&&W.val(),vt=!1,mt=h.preferredFormat,yt=!h.showButtons||h.clickoutFiresChange,bt=!gt,wt=h.allowEmpty&&!ct;function _t(){if(h.showPaletteOnly&&(h.showPalette=!0),ut.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),h.palette){P=h.palette.slice(0),q=t.isArray(P[0])?P:[P],H={};for(var e=0;e<q.length;e++)for(var n=0;n<q[e].length;n++){var r=tinycolor(q[e][n]).toRgbString();H[r]=!0}}V.toggleClass(\"sp-flat\",g),V.toggleClass(\"sp-input-disabled\",!h.showInput),V.toggleClass(\"sp-alpha-enabled\",h.showAlpha),V.toggleClass(\"sp-clear-enabled\",wt),V.toggleClass(\"sp-buttons-disabled\",!h.showButtons),V.toggleClass(\"sp-palette-buttons-disabled\",!h.togglePaletteOnly),V.toggleClass(\"sp-palette-disabled\",!h.showPalette),V.toggleClass(\"sp-palette-only\",h.showPaletteOnly),V.toggleClass(\"sp-initial-disabled\",!h.showInitial),V.addClass(h.className).addClass(h.containerClassName),Bt()}function xt(){if(i&&V.find(\"*:not(input)\").attr(\"unselectable\",\"on\"),_t(),ft&&W.after(pt).hide(),wt||st.hide(),g)W.after(V).hide();else{var e=\"parent\"===h.appendTo?W.parent():t(h.appendTo);1!==e.length&&(e=t(\"body\")),e.append(V)}function n(e){return e.data&&e.data.ignore?(Pt(t(e.target).closest(\".sp-thumb-el\").data(\"color\")),Mt()):(Pt(t(e.target).closest(\".sp-thumb-el\").data(\"color\")),Mt(),h.hideAfterPaletteSelect?(zt(!0),It()):zt()),!1}Tt(),ht.on(\"click.spectrum touchstart.spectrum\",(function(e){G||jt(),e.stopPropagation(),t(e.target).is(\"input\")||e.preventDefault()})),(W.is(\":disabled\")||!0===h.disabled)&&Kt(),V.click(d),nt.change(Dt),nt.on(\"paste\",(function(){setTimeout(Dt,1)})),nt.keydown((function(t){13==t.keyCode&&Dt()})),ot.text(h.cancelText),ot.on(\"click.spectrum\",(function(t){t.stopPropagation(),t.preventDefault(),Lt(),It()})),st.attr(\"title\",h.clearText),st.on(\"click.spectrum\",(function(t){t.stopPropagation(),t.preventDefault(),bt=!0,Mt(),g&&zt(!0)})),at.text(h.chooseText),at.on(\"click.spectrum\",(function(t){t.stopPropagation(),t.preventDefault(),i&&nt.is(\":focus\")&&nt.trigger(\"change\"),Ht()&&(zt(!0),It())})),ut.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),ut.on(\"click.spectrum\",(function(t){t.stopPropagation(),t.preventDefault(),h.showPaletteOnly=!h.showPaletteOnly,h.showPaletteOnly||g||V.css(\"left\",\"-=\"+(K.outerWidth(!0)+5)),_t()})),v(tt,(function(t,e,n){L=t/D,bt=!1,n.shiftKey&&(L=Math.round(10*L)/10),Mt()}),Et,kt),v(Q,(function(t,e){N=parseFloat(e/k),bt=!1,h.showAlpha||(L=1),Mt()}),Et,kt),v(X,(function(t,e,n){if(n.shiftKey){if(!z){var r=R*S,i=$-I*$,o=Math.abs(t-r)>Math.abs(e-i);z=o?\"x\":\"y\"}}else z=null;var s=!z||\"y\"===z;(!z||\"x\"===z)&&(R=parseFloat(t/S)),s&&(I=parseFloat(($-e)/$)),bt=!1,h.showAlpha||(L=1),Mt()}),Et,kt),gt?(Pt(gt),Ut(),mt=h.preferredFormat||tinycolor(gt).format,Ct(gt)):Ut(),g&&Ot();var r=i?\"mousedown.spectrum\":\"click.spectrum touchstart.spectrum\";rt.on(r,\".sp-thumb-el\",n),it.on(r,\".sp-thumb-el:nth-child(1)\",{ignore:!0},n)}function Tt(){if(w&&window.localStorage){try{var e=window.localStorage[w].split(\",#\");e.length>1&&(delete window.localStorage[w],t.each(e,(function(t,e){Ct(e)})))}catch(t){}try{M=window.localStorage[w].split(\";\")}catch(t){}}}function Ct(e){if(b){var n=tinycolor(e).toRgbString();if(!H[n]&&-1===t.inArray(n,M))for(M.push(n);M.length>U;)M.shift();if(w&&window.localStorage)try{window.localStorage[w]=M.join(\";\")}catch(t){}}}function At(){var t=[];if(h.showPalette)for(var e=0;e<M.length;e++){var n=tinycolor(M[e]).toRgbString();H[n]||t.push(M[e])}return t.reverse().slice(0,h.maxSelectionSize)}function St(){var e=qt(),n=t.map(q,(function(t,n){return u(t,e,\"sp-palette-row sp-palette-row-\"+n,h)}));Tt(),M&&n.push(u(At(),e,\"sp-palette-row sp-palette-row-selection\",h)),rt.html(n.join(\"\"))}function $t(){if(h.showInitial){var t=vt,e=qt();it.html(u([t,e],e,\"sp-palette-row-initial\",h))}}function Et(){($<=0||S<=0||k<=0)&&Bt(),A=!0,V.addClass(F),z=null,W.trigger(\"dragstart.spectrum\",[qt()])}function kt(){A=!1,V.removeClass(F),W.trigger(\"dragstop.spectrum\",[qt()])}function Dt(){var t=nt.val();if(null!==t&&\"\"!==t||!wt){var e=tinycolor(t);e.isValid()?(Pt(e),Mt(),zt()):nt.addClass(\"sp-validation-error\")}else Pt(null),Mt(),zt()}function jt(){C?It():Ot()}function Ot(){var e=t.Event(\"beforeShow.spectrum\");C?Bt():(W.trigger(e,[qt()]),!1===x.beforeShow(qt())||e.isDefaultPrevented()||(l(),C=!0,t(B).on(\"keydown.spectrum\",Nt),t(B).on(\"click.spectrum\",Rt),t(window).on(\"resize.spectrum\",T),pt.addClass(\"sp-active\"),V.removeClass(\"sp-hidden\"),Bt(),Ut(),vt=qt(),$t(),x.show(vt),W.trigger(\"show.spectrum\",[vt])))}function Nt(t){27===t.keyCode&&It()}function Rt(t){2!=t.button&&(A||(yt?zt(!0):Lt(),It()))}function It(){C&&!g&&(C=!1,t(B).off(\"keydown.spectrum\",Nt),t(B).off(\"click.spectrum\",Rt),t(window).off(\"resize.spectrum\",T),pt.removeClass(\"sp-active\"),V.addClass(\"sp-hidden\"),x.hide(qt()),W.trigger(\"hide.spectrum\",[qt()]))}function Lt(){Pt(vt,!0),zt(!0)}function Pt(t,e){var n,r;tinycolor.equals(t,qt())?Ut():(!t&&wt?bt=!0:(bt=!1,r=(n=tinycolor(t)).toHsv(),N=r.h%360/360,R=r.s,I=r.v,L=r.a),Ut(),n&&n.isValid()&&!e&&(mt=h.preferredFormat||n.getFormat()))}function qt(t){return t=t||{},wt&&bt?null:tinycolor.fromRatio({h:N,s:R,v:I,a:Math.round(1e3*L)/1e3},{format:t.format||mt})}function Ht(){return!nt.hasClass(\"sp-validation-error\")}function Mt(){Ut(),x.move(qt()),W.trigger(\"move.spectrum\",[qt()])}function Ut(){nt.removeClass(\"sp-validation-error\"),Ft();var t=tinycolor.fromRatio({h:N,s:1,v:1});X.css(\"background-color\",t.toHexString());var e=mt;L<1&&(0!==L||\"name\"!==e)&&(\"hex\"!==e&&\"hex3\"!==e&&\"hex6\"!==e&&\"name\"!==e||(e=\"rgb\"));var n=qt({format:e}),r=\"\";if(dt.removeClass(\"sp-clear-display\"),dt.css(\"background-color\",\"transparent\"),!n&&wt)dt.addClass(\"sp-clear-display\");else{var s=n.toHexString(),a=n.toRgbString();if(o||1===n.alpha?dt.css(\"background-color\",a):(dt.css(\"background-color\",\"transparent\"),dt.css(\"filter\",n.toFilter())),h.showAlpha){var u=n.toRgb();u.a=0;var l=tinycolor(u).toRgbString(),c=\"linear-gradient(left, \"+l+\", \"+s+\")\";i?Z.css(\"filter\",tinycolor(l).toFilter({gradientType:1},s)):(Z.css(\"background\",\"-webkit-\"+c),Z.css(\"background\",\"-moz-\"+c),Z.css(\"background\",\"-ms-\"+c),Z.css(\"background\",\"linear-gradient(to right, \"+l+\", \"+s+\")\"))}r=n.toString(e)}h.showInput&&nt.val(r),h.showPalette&&St(),$t()}function Ft(){var t=R,e=I;if(wt&&bt)et.hide(),J.hide(),Y.hide();else{et.show(),J.show(),Y.show();var n=t*S,r=$-e*$;n=Math.max(-E,Math.min(S-E,n-E)),r=Math.max(-E,Math.min($-E,r-E)),Y.css({top:r+\"px\",left:n+\"px\"});var i=L*D;et.css({left:i-j/2+\"px\"});var o=N*k;J.css({top:o-O+\"px\"})}}function zt(t){var e=qt(),n=\"\",r=!tinycolor.equals(e,vt);e&&(n=e.toString(mt),Ct(e)),lt&&W.val(n),t&&r&&(x.change(e),W.trigger(\"change\",[e]))}function Bt(){C&&(S=X.width(),$=X.height(),E=Y.height(),Q.width(),k=Q.height(),O=J.height(),D=tt.width(),j=et.width(),g||(V.css(\"position\",\"absolute\"),h.offset?V.offset(h.offset):V.offset(p(V,ht))),Ft(),h.showPalette&&St(),W.trigger(\"reflow.spectrum\"))}function Wt(){W.show(),ht.off(\"click.spectrum touchstart.spectrum\"),V.remove(),pt.remove(),r[Yt.id]=null}function Gt(n,r){return n===e?t.extend({},h):r===e?h[n]:(h[n]=r,\"preferredFormat\"===n&&(mt=h.preferredFormat),void _t())}function Vt(){G=!1,W.attr(\"disabled\",!1),ht.removeClass(\"sp-disabled\")}function Kt(){It(),G=!0,W.attr(\"disabled\",!0),ht.addClass(\"sp-disabled\")}function Xt(t){h.offset=t,Bt()}xt();var Yt={show:Ot,hide:It,toggle:jt,reflow:Bt,option:Gt,enable:Vt,disable:Kt,offset:Xt,set:function(t){Pt(t),zt()},get:qt,destroy:Wt,container:V};return Yt.id=r.push(Yt)-1,Yt}function p(e,n){var r=0,i=e.outerWidth(),o=e.outerHeight(),s=n.outerHeight(),a=e[0].ownerDocument,u=a.documentElement,l=u.clientWidth+t(a).scrollLeft(),c=u.clientHeight+t(a).scrollTop(),f=n.offset(),p=f.left,h=f.top;return h+=s,p-=Math.min(p,p+i>l&&l>i?Math.abs(p+i-l):0),{top:h-=Math.min(h,h+o>c&&c>o?Math.abs(o+s-r):r),bottom:f.bottom,left:p,right:f.right,width:f.width,height:f.height}}function h(){}function d(t){t.stopPropagation()}function g(t,e){var n=Array.prototype.slice,r=n.call(arguments,2);return function(){return t.apply(e,r.concat(n.call(arguments)))}}function v(e,n,r,o){n=n||function(){},r=r||function(){},o=o||function(){};var s=document,a=!1,u={},l=0,c=0,f=\"ontouchstart\"in window,p={};function h(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function d(t){if(a){if(i&&s.documentMode<9&&!t.button)return v();var r=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],o=r&&r.pageX||t.pageX,p=r&&r.pageY||t.pageY,d=Math.max(0,Math.min(o-u.left,c)),g=Math.max(0,Math.min(p-u.top,l));f&&h(t),n.apply(e,[d,g,t])}}function g(n){(n.which?3==n.which:2==n.button)||a||!1!==r.apply(e,arguments)&&(a=!0,l=t(e).height(),c=t(e).width(),u=t(e).offset(),t(s).on(p),t(s.body).addClass(\"sp-dragging\"),d(n),h(n))}function v(){a&&(t(s).off(p),t(s.body).removeClass(\"sp-dragging\"),setTimeout((function(){o.apply(e,arguments)}),0)),a=!1}p.selectstart=h,p.dragstart=h,p[\"touchmove mousemove\"]=d,p[\"touchend mouseup\"]=v,t(e).on(\"touchstart mousedown\",g)}function m(t,e,n){var r;return function(){var i=this,o=arguments,s=function(){r=null,t.apply(i,o)};n&&clearTimeout(r),!n&&r||(r=setTimeout(s,e))}}function y(){return t.fn.spectrum.inputTypeColorSupport()}var b=\"spectrum.id\";t.fn.spectrum=function(e,n){if(\"string\"==typeof e){var i=this,o=Array.prototype.slice.call(arguments,1);return this.each((function(){var n=r[t(this).data(b)];if(n){var s=n[e];if(!s)throw new Error(\"Spectrum: no such method: '\"+e+\"'\");\"get\"==e?i=n.get():\"container\"==e?i=n.container:\"option\"==e?i=n.option.apply(n,o):\"destroy\"==e?(n.destroy(),t(this).removeData(b)):s.apply(n,o)}})),i}return this.spectrum(\"destroy\").each((function(){var n=f(this,t.extend({},t(this).data(),e));t(this).data(b,n.id)}))},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=v,t.fn.spectrum.defaults=n,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var n=t(\"<input type='color'/>\")[0];e._cachedResult=\"color\"===n.type&&\"\"!==n.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t(\"input[type=color]\");e.length&&!y()&&e.spectrum({preferredFormat:\"hex6\"})},function(){var t=/^[\\s,#]+/,e=/\\s+$/,n=0,r=Math,i=r.round,o=r.min,s=r.max,a=r.random,u=function(t,e){if(e=e||{},(t=t||\"\")instanceof u)return t;if(!(this instanceof u))return new u(t,e);var r=l(t);this._originalInput=t,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=i(1e3*this._a)/1e3,this._format=e.format||r.format,this._gradientType=e.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=r.ok,this._tc_id=n++};function l(t){var e={r:0,g:0,b:0},n=1,r=!1,i=!1;return\"string\"==typeof t&&(t=V(t)),\"object\"==typeof t&&(t.hasOwnProperty(\"r\")&&t.hasOwnProperty(\"g\")&&t.hasOwnProperty(\"b\")?(e=c(t.r,t.g,t.b),r=!0,i=\"%\"===String(t.r).substr(-1)?\"prgb\":\"rgb\"):t.hasOwnProperty(\"h\")&&t.hasOwnProperty(\"s\")&&t.hasOwnProperty(\"v\")?(t.s=M(t.s),t.v=M(t.v),e=d(t.h,t.s,t.v),r=!0,i=\"hsv\"):t.hasOwnProperty(\"h\")&&t.hasOwnProperty(\"s\")&&t.hasOwnProperty(\"l\")&&(t.s=M(t.s),t.l=M(t.l),e=p(t.h,t.s,t.l),r=!0,i=\"hsl\"),t.hasOwnProperty(\"a\")&&(n=t.a)),n=N(n),{ok:r,format:t.format||i,r:o(255,s(e.r,0)),g:o(255,s(e.g,0)),b:o(255,s(e.b,0)),a:n}}function c(t,e,n){return{r:255*R(t,255),g:255*R(e,255),b:255*R(n,255)}}function f(t,e,n){t=R(t,255),e=R(e,255),n=R(n,255);var r,i,a=s(t,e,n),u=o(t,e,n),l=(a+u)/2;if(a==u)r=i=0;else{var c=a-u;switch(i=l>.5?c/(2-a-u):c/(a+u),a){case t:r=(e-n)/c+(e<n?6:0);break;case e:r=(n-t)/c+2;break;case n:r=(t-e)/c+4}r/=6}return{h:r,s:i,l}}function p(t,e,n){var r,i,o;function s(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}if(t=R(t,360),e=R(e,100),n=R(n,100),0===e)r=i=o=n;else{var a=n<.5?n*(1+e):n+e-n*e,u=2*n-a;r=s(u,a,t+1/3),i=s(u,a,t),o=s(u,a,t-1/3)}return{r:255*r,g:255*i,b:255*o}}function h(t,e,n){t=R(t,255),e=R(e,255),n=R(n,255);var r,i,a=s(t,e,n),u=o(t,e,n),l=a,c=a-u;if(i=0===a?0:c/a,a==u)r=0;else{switch(a){case t:r=(e-n)/c+(e<n?6:0);break;case e:r=(n-t)/c+2;break;case n:r=(t-e)/c+4}r/=6}return{h:r,s:i,v:l}}function d(t,e,n){t=6*R(t,360),e=R(e,100),n=R(n,100);var i=r.floor(t),o=t-i,s=n*(1-e),a=n*(1-o*e),u=n*(1-(1-o)*e),l=i%6;return{r:255*[n,a,s,s,u,n][l],g:255*[u,n,n,a,s,s][l],b:255*[s,s,u,n,n,a][l]}}function g(t,e,n,r){var o=[H(i(t).toString(16)),H(i(e).toString(16)),H(i(n).toString(16))];return r&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0):o.join(\"\")}function v(t,e,n,r){return[H(U(r)),H(i(t).toString(16)),H(i(e).toString(16)),H(i(n).toString(16))].join(\"\")}function m(t,e){e=0===e?0:e||10;var n=u(t).toHsl();return n.s-=e/100,n.s=I(n.s),u(n)}function y(t,e){e=0===e?0:e||10;var n=u(t).toHsl();return n.s+=e/100,n.s=I(n.s),u(n)}function b(t){return u(t).desaturate(100)}function w(t,e){e=0===e?0:e||10;var n=u(t).toHsl();return n.l+=e/100,n.l=I(n.l),u(n)}function _(t,e){e=0===e?0:e||10;var n=u(t).toRgb();return n.r=s(0,o(255,n.r-i(-e/100*255))),n.g=s(0,o(255,n.g-i(-e/100*255))),n.b=s(0,o(255,n.b-i(-e/100*255))),u(n)}function x(t,e){e=0===e?0:e||10;var n=u(t).toHsl();return n.l-=e/100,n.l=I(n.l),u(n)}function T(t,e){var n=u(t).toHsl(),r=(i(n.h)+e)%360;return n.h=r<0?360+r:r,u(n)}function C(t){var e=u(t).toHsl();return e.h=(e.h+180)%360,u(e)}function A(t){var e=u(t).toHsl(),n=e.h;return[u(t),u({h:(n+120)%360,s:e.s,l:e.l}),u({h:(n+240)%360,s:e.s,l:e.l})]}function S(t){var e=u(t).toHsl(),n=e.h;return[u(t),u({h:(n+90)%360,s:e.s,l:e.l}),u({h:(n+180)%360,s:e.s,l:e.l}),u({h:(n+270)%360,s:e.s,l:e.l})]}function $(t){var e=u(t).toHsl(),n=e.h;return[u(t),u({h:(n+72)%360,s:e.s,l:e.l}),u({h:(n+216)%360,s:e.s,l:e.l})]}function E(t,e,n){e=e||6,n=n||30;var r=u(t).toHsl(),i=360/n,o=[u(t)];for(r.h=(r.h-(i*e>>1)+720)%360;--e;)r.h=(r.h+i)%360,o.push(u(r));return o}function k(t,e){e=e||6;for(var n=u(t).toHsv(),r=n.h,i=n.s,o=n.v,s=[],a=1/e;e--;)s.push(u({h:r,s:i,v:o})),o=(o+a)%1;return s}u.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=N(t),this._roundA=i(1e3*this._a)/1e3,this},toHsv:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=h(this._r,this._g,this._b),e=i(360*t.h),n=i(100*t.s),r=i(100*t.v);return 1==this._a?\"hsv(\"+e+\", \"+n+\"%, \"+r+\"%)\":\"hsva(\"+e+\", \"+n+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHsl:function(){var t=f(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=f(this._r,this._g,this._b),e=i(360*t.h),n=i(100*t.s),r=i(100*t.l);return 1==this._a?\"hsl(\"+e+\", \"+n+\"%, \"+r+\"%)\":\"hsla(\"+e+\", \"+n+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHex:function(t){return g(this._r,this._g,this._b,t)},toHexString:function(t){return\"#\"+this.toHex(t)},toHex8:function(){return v(this._r,this._g,this._b,this._a)},toHex8String:function(){return\"#\"+this.toHex8()},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\"rgb(\"+i(this._r)+\", \"+i(this._g)+\", \"+i(this._b)+\")\":\"rgba(\"+i(this._r)+\", \"+i(this._g)+\", \"+i(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:i(100*R(this._r,255))+\"%\",g:i(100*R(this._g,255))+\"%\",b:i(100*R(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\"rgb(\"+i(100*R(this._r,255))+\"%, \"+i(100*R(this._g,255))+\"%, \"+i(100*R(this._b,255))+\"%)\":\"rgba(\"+i(100*R(this._r,255))+\"%, \"+i(100*R(this._g,255))+\"%, \"+i(100*R(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return 0===this._a?\"transparent\":!(this._a<1)&&(j[g(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e=\"#\"+v(this._r,this._g,this._b,this._a),n=e,r=this._gradientType?\"GradientType = 1, \":\"\";t&&(n=u(t).toHex8String());return\"progid:DXImageTransform.Microsoft.gradient(\"+r+\"startColorstr=\"+e+\",endColorstr=\"+n+\")\"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,r=this._a<1&&this._a>=0;return e||!r||\"hex\"!==t&&\"hex6\"!==t&&\"hex3\"!==t&&\"name\"!==t?(\"rgb\"===t&&(n=this.toRgbString()),\"prgb\"===t&&(n=this.toPercentageRgbString()),\"hex\"!==t&&\"hex6\"!==t||(n=this.toHexString()),\"hex3\"===t&&(n=this.toHexString(!0)),\"hex8\"===t&&(n=this.toHex8String()),\"name\"===t&&(n=this.toName()),\"hsl\"===t&&(n=this.toHslString()),\"hsv\"===t&&(n=this.toHsvString()),n||this.toHexString()):\"name\"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(w,arguments)},brighten:function(){return this._applyModification(_,arguments)},darken:function(){return this._applyModification(x,arguments)},desaturate:function(){return this._applyModification(m,arguments)},saturate:function(){return this._applyModification(y,arguments)},greyscale:function(){return this._applyModification(b,arguments)},spin:function(){return this._applyModification(T,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(C,arguments)},monochromatic:function(){return this._applyCombination(k,arguments)},splitcomplement:function(){return this._applyCombination($,arguments)},triad:function(){return this._applyCombination(A,arguments)},tetrad:function(){return this._applyCombination(S,arguments)}},u.fromRatio=function(t,e){if(\"object\"==typeof t){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]=\"a\"===r?t[r]:M(t[r]));t=n}return u(t,e)},u.equals=function(t,e){return!(!t||!e)&&u(t).toRgbString()==u(e).toRgbString()},u.random=function(){return u.fromRatio({r:a(),g:a(),b:a()})},u.mix=function(t,e,n){n=0===n?0:n||50;var r,i=u(t).toRgb(),o=u(e).toRgb(),s=n/100,a=2*s-1,l=o.a-i.a,c=1-(r=((r=a*l==-1?a:(a+l)/(1+a*l))+1)/2),f={r:o.r*r+i.r*c,g:o.g*r+i.g*c,b:o.b*r+i.b*c,a:o.a*s+i.a*(1-s)};return u(f)},u.readability=function(t,e){var n=u(t),r=u(e),i=n.toRgb(),o=r.toRgb(),s=n.getBrightness(),a=r.getBrightness(),l=Math.max(i.r,o.r)-Math.min(i.r,o.r)+Math.max(i.g,o.g)-Math.min(i.g,o.g)+Math.max(i.b,o.b)-Math.min(i.b,o.b);return{brightness:Math.abs(s-a),color:l}},u.isReadable=function(t,e){var n=u.readability(t,e);return n.brightness>125&&n.color>500},u.mostReadable=function(t,e){for(var n=null,r=0,i=!1,o=0;o<e.length;o++){var s=u.readability(t,e[o]),a=s.brightness>125&&s.color>500,l=s.brightness/125*3+s.color/500;(a&&!i||a&&i&&l>r||!a&&!i&&l>r)&&(i=a,r=l,n=u(e[o]))}return n};var D=u.names={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},j=u.hexNames=O(D);function O(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}function N(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function R(t,e){P(t)&&(t=\"100%\");var n=q(t);return t=o(e,s(0,parseFloat(t))),n&&(t=parseInt(t*e,10)/100),r.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function I(t){return o(1,s(0,t))}function L(t){return parseInt(t,16)}function P(t){return\"string\"==typeof t&&-1!=t.indexOf(\".\")&&1===parseFloat(t)}function q(t){return\"string\"==typeof t&&-1!=t.indexOf(\"%\")}function H(t){return 1==t.length?\"0\"+t:\"\"+t}function M(t){return t<=1&&(t=100*t+\"%\"),t}function U(t){return Math.round(255*parseFloat(t)).toString(16)}function F(t){return L(t)/255}var z,B,W,G=(B=\"[\\\\s|\\\\(]+(\"+(z=\"(?:[-\\\\+]?\\\\d*\\\\.\\\\d+%?)|(?:[-\\\\+]?\\\\d+%?)\")+\")[,|\\\\s]+(\"+z+\")[,|\\\\s]+(\"+z+\")\\\\s*\\\\)?\",W=\"[\\\\s|\\\\(]+(\"+z+\")[,|\\\\s]+(\"+z+\")[,|\\\\s]+(\"+z+\")[,|\\\\s]+(\"+z+\")\\\\s*\\\\)?\",{rgb:new RegExp(\"rgb\"+B),rgba:new RegExp(\"rgba\"+W),hsl:new RegExp(\"hsl\"+B),hsla:new RegExp(\"hsla\"+W),hsv:new RegExp(\"hsv\"+B),hsva:new RegExp(\"hsva\"+W),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function V(n){n=n.replace(t,\"\").replace(e,\"\").toLowerCase();var r,i=!1;if(D[n])n=D[n],i=!0;else if(\"transparent\"==n)return{r:0,g:0,b:0,a:0,format:\"name\"};return(r=G.rgb.exec(n))?{r:r[1],g:r[2],b:r[3]}:(r=G.rgba.exec(n))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=G.hsl.exec(n))?{h:r[1],s:r[2],l:r[3]}:(r=G.hsla.exec(n))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=G.hsv.exec(n))?{h:r[1],s:r[2],v:r[3]}:(r=G.hsva.exec(n))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=G.hex8.exec(n))?{a:F(r[1]),r:L(r[2]),g:L(r[3]),b:L(r[4]),format:i?\"name\":\"hex8\"}:(r=G.hex6.exec(n))?{r:L(r[1]),g:L(r[2]),b:L(r[3]),format:i?\"name\":\"hex\"}:!!(r=G.hex3.exec(n))&&{r:L(r[1]+\"\"+r[1]),g:L(r[2]+\"\"+r[2]),b:L(r[3]+\"\"+r[3]),format:i?\"name\":\"hex\"}}window.tinycolor=u}(),t((function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()}))},void 0===(o=\"function\"==typeof r?r.apply(e,i):r)||(t.exports=o)}()},593:t=>{\"use strict\";t.exports=JSON.parse('{\"name\":\"axios\",\"version\":\"0.21.4\",\"description\":\"Promise based HTTP client for the browser and node.js\",\"main\":\"index.js\",\"scripts\":{\"test\":\"grunt test\",\"start\":\"node ./sandbox/server.js\",\"build\":\"NODE_ENV=production grunt build\",\"preversion\":\"npm test\",\"version\":\"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\",\"postversion\":\"git push && git push --tags\",\"examples\":\"node ./examples/server.js\",\"coveralls\":\"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\"fix\":\"eslint --fix lib/**/*.js\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/axios/axios.git\"},\"keywords\":[\"xhr\",\"http\",\"ajax\",\"promise\",\"node\"],\"author\":\"Matt Zabriskie\",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/axios/axios/issues\"},\"homepage\":\"https://axios-http.com\",\"devDependencies\":{\"coveralls\":\"^3.0.0\",\"es6-promise\":\"^4.2.4\",\"grunt\":\"^1.3.0\",\"grunt-banner\":\"^0.6.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-clean\":\"^1.1.0\",\"grunt-contrib-watch\":\"^1.0.0\",\"grunt-eslint\":\"^23.0.0\",\"grunt-karma\":\"^4.0.0\",\"grunt-mocha-test\":\"^0.13.3\",\"grunt-ts\":\"^6.0.0-beta.19\",\"grunt-webpack\":\"^4.0.2\",\"istanbul-instrumenter-loader\":\"^1.0.0\",\"jasmine-core\":\"^2.4.1\",\"karma\":\"^6.3.2\",\"karma-chrome-launcher\":\"^3.1.0\",\"karma-firefox-launcher\":\"^2.1.0\",\"karma-jasmine\":\"^1.1.1\",\"karma-jasmine-ajax\":\"^0.1.13\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-sauce-launcher\":\"^4.3.6\",\"karma-sinon\":\"^1.0.5\",\"karma-sourcemap-loader\":\"^0.3.8\",\"karma-webpack\":\"^4.0.2\",\"load-grunt-tasks\":\"^3.5.2\",\"minimist\":\"^1.2.0\",\"mocha\":\"^8.2.1\",\"sinon\":\"^4.5.0\",\"terser-webpack-plugin\":\"^4.2.3\",\"typescript\":\"^4.0.5\",\"url-search-params\":\"^0.10.0\",\"webpack\":\"^4.44.2\",\"webpack-dev-server\":\"^3.11.0\"},\"browser\":{\"./lib/adapters/http.js\":\"./lib/adapters/xhr.js\"},\"jsdelivr\":\"dist/axios.min.js\",\"unpkg\":\"dist/axios.min.js\",\"typings\":\"./index.d.ts\",\"dependencies\":{\"follow-redirects\":\"^1.14.0\"},\"bundlesize\":[{\"path\":\"./dist/axios.min.js\",\"threshold\":\"5kB\"}]}')}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),(()=>{\"use strict\";var t=n(486),e=n.n(t),r=(n(686),n(911),n(669)),i=n.n(r);window._=e();try{window.$=window.jQuery=n(755),n(2)}catch(t){}window.axios=i(),window.axios.defaults.headers.common[\"X-Requested-With\"]=\"XMLHttpRequest\";var o=document.head.querySelector('meta[name=\"csrf-token\"]');o?(window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"]=o.content,$.ajaxSetup({headers:{\"X-CSRF-TOKEN\":o.content}})):console.error(\"CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token\"),$((function(){$(document).on(\"click\",\".sidebar-toggle\",(function(){$(\".sidebar-menu\").pushMenu(\"toggle\");var t=\"opened\";$(\"body\").hasClass(\"sidebar-collapse\")&&(t=\"closed\");var e=new Date;e.setTime(e.getTime()+2592e6);var n=\" expires=\"+e.toGMTString(),r=\"https:\"===location.protocol?\"secure; \":\"\";document.cookie=\"toggleState=\"+t+\"; path=/; \"+r+\"samesite=lax; \"+n}));var t=new RegExp(\"toggleState=([^;]+)\").exec(document.cookie);\"closed\"===(null!=t?decodeURI(t[1]):null)&&$(\"body\").addClass(\"sidebar-collapse hold-transition\").delay(100).queue((function(){$(this).removeClass(\"hold-transition\")}))})),$(document).ready((function(){$(document).on(\"focus\",\".select2.select2-container\",(function(t){t.originalEvent&&$(this).find(\".select2-selection--single\").length>0&&$(this).siblings(\"select\").select2(\"open\")}))})),$(document).on(\"select2:open\",(function(){var t=document.querySelectorAll(\".select2-container--open .select2-search__field\");t[t.length-1].focus()}))})()})();"
  },
  {
    "path": "public/js/vendor.js.LICENSE.txt",
    "content": "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under the MIT license\n */\n\n/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n\n/*!\n * Sizzle CSS Selector Engine v2.3.10\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2023-02-14\n */\n\n/*!\n * jQuery JavaScript Library v3.6.4\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-03-08T15:28Z\n */\n\n/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n"
  },
  {
    "path": "public/main.js",
    "content": "/******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \t\n/******/ \t\n/******/ })()\n;"
  },
  {
    "path": "public/mix-manifest.json",
    "content": "{\n    \"/js/vendor.js\": \"/js/vendor.js\"\n}\n"
  },
  {
    "path": "public/privacypolicy.html",
    "content": "<style>\n#ppBody\n{\n    font-size:11pt;\n    width:100%;\n    margin:0 auto;\n    text-align:justify;\n}\n\n#ppHeader\n{\n    font-family:verdana;\n    font-size:21pt;\n    width:100%;\n    margin:0 auto;\n}\n\n.ppConsistencies\n{\n    display:none;\n}\n</style><div id='ppHeader'>kanka.io Privacy Policy</div><div id='ppBody'><div class='ppConsistencies'><div class='col-2'>\n            <div class=\"quick-links text-center\">Information Collection</div>\n        </div><div class='col-2'>\n            <div class=\"quick-links text-center\">Information Usage</div>\n        </div><div class='col-2'>\n            <div class=\"quick-links text-center\">Information Protection</div>\n        </div><div class='col-2'>\n            <div class=\"quick-links text-center\">Cookie Usage</div>\n        </div><div class='col-2'>\n            <div class=\"quick-links text-center\">3rd Party Disclosure</div>\n        </div><div class='col-2'>\n            <div class=\"quick-links text-center\">3rd Party Links</div>\n        </div><div class='col-2'></div></div><div style='clear:both;height:10px;'></div><div class='ppConsistencies'><div class='col-2'>\n            <div class=\"col-12 quick-links2 gen-text-center\">Google AdSense</div>\n        </div><div class='col-2'>\n            <div class=\"col-12 quick-links2 gen-text-center\">\n                    Fair Information Practices\n                    <div class=\"col-8 gen-text-left gen-xs-text-center\" style=\"font-size:12px;position:relative;left:20px;\">Fair information<br> Practices</div>\n                </div>\n        </div><div class='col-2'>\n            <div class=\"col-12 quick-links2 gen-text-center coppa-pad\">\n                    COPPA\n\n                </div>\n        </div><div class='col-2'>\n            <div class=\"col-12 quick-links2 quick4 gen-text-center caloppa-pad\">\n                    CalOPPA\n\n                </div>\n        </div><div class='col-2'>\n            <div class=\"quick-links2 gen-text-center\">Our Contact Information<br></div>\n        </div></div><div style='clear:both;height:10px;'></div>\n<div class='innerText'>This privacy policy has been compiled to better serve those who are concerned with how their 'Personally Identifiable Information' (PII) is being used online. PII, as described in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.<br></div><span id='infoCo'></span><br><div class='grayText'><strong>What personal information do we collect from the people that visit our blog, website or app?</strong></div><br /><div class='innerText'>When ordering or registering on our site, as appropriate, you may be asked to enter your  or other details to help you with your experience.</div><br><div class='grayText'><strong>When do we collect information?</strong></div><br /><div class='innerText'>We collect information from you when you register on our site, subscribe to a newsletter, fill out a form, Open a Support Ticket or enter information on our site.</div><br>Provide us with feedback on our products or services  <span id='infoUs'></span><br><div class='grayText'><strong>How do we use your information? </strong></div><br /><div class='innerText'> We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:<br><br></div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> To improve our website in order to better serve you.</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> To allow us to better service you in responding to your customer service requests.</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> To follow up with them after correspondence (live chat, email or phone inquiries)</div><span id='infoPro'></span><br><div class='grayText'><strong>How do we protect your information?</strong></div><br /><div class='innerText'>We do not use vulnerability scanning and/or scanning to PCI standards.</div><div class='innerText'>We only provide articles and information. We never ask for credit card numbers.</div><div class='innerText'>We use regular Malware Scanning.<br><br></div><div class='innerText'>Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology. </div><br><div class='innerText'>We implement a variety of security measures when a user enters, submits, or accesses their information to maintain the safety of your personal information.</div><br><div class='innerText'>All transactions are processed through a gateway provider and are not stored or processed on our servers.</div><span id='coUs'></span><br><div class='grayText'><strong>Do we use 'cookies'?</strong></div><br /><div class='innerText'>Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow) that enables the site's or service provider's systems to recognize your browser and capture and remember certain information. For instance, we use cookies to help us remember and process the items in your shopping cart. They are also used to help us understand your preferences based on previous or current site activity, which enables us to provide you with improved services. We also use cookies to help us compile aggregate data about site traffic and site interaction so that we can offer better site experiences and tools in the future.</div><div class='innerText'><br><strong>We use cookies to:</strong></div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Understand and save user's preferences for future visits.</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Compile aggregate data about site traffic and site interactions in order to offer better site experiences and tools in the future. We may also use trusted third-party services that track this information on our behalf.</div><div class='innerText'><br>You can choose to have your computer warn you each time a cookie is being sent, or you can choose to turn off all cookies. You do this through your browser settings. Since browser is a little different, look at your browser's Help Menu to learn the correct way to modify your cookies.<br></div><div class='innerText'><br><strong>If users disable cookies in their browser:</strong></div><br><div class='innerText'>If you turn cookies off, Some of the features that make your site experience more efficient may not function properly.Some of the features that make your site experience more efficient and may not function properly.</div><br><span id='trDi'></span><br><div class='grayText'><strong>Third-party disclosure</strong></div><br /><div class='innerText'>We do not sell, trade, or otherwise transfer to outside parties your Personally Identifiable Information.</div><span id='trLi'></span><br><div class='grayText'><strong>Third-party links</strong></div><br /><div class='innerText'>Occasionally, at our discretion, we may include or offer third-party products or services on our website. These third-party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these linked sites. Nonetheless, we seek to protect the integrity of our site and welcome any feedback about these sites.</div><span id='gooAd'></span><br><div class='blueText'><strong>Google</strong></div><br /><div class='innerText'>Google's advertising requirements can be summed up by Google's Advertising Principles. They are put in place to provide a positive experience for users. https://support.google.com/adwordspolicy/answer/1316548?hl=en <br><br></div><div class='innerText'>We use Google AdSense Advertising on our website.</div><div class='innerText'><br>Google, as a third-party vendor, uses cookies to serve ads on our site. Google's use of the DART cookie enables it to serve ads to our users based on previous visits to our site and other sites on the Internet. Users may opt-out of the use of the DART cookie by visiting the Google Ad and Content Network privacy policy.<br></div><div class='innerText'><br><strong>We have implemented the following:</strong></div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Demographics and Interests Reporting</div><br><div class='innerText'>We, along with third-party vendors such as Google use first-party cookies (such as the Google Analytics cookies) and third-party cookies (such as the DoubleClick cookie) or other third-party identifiers together to compile data regarding user interactions with ad impressions and other ad service functions as they relate to our website. </div><div class='innerText'><br><strong>Opting out:</strong><br>\n\t\t\t\t\tUsers can set preferences for how Google advertises to you using the Google Ad Settings page. Alternatively, you can opt out by visiting the Network Advertising Initiative Opt Out page or by using the Google Analytics Opt Out Browser add on.</div><span id='calOppa'></span><br><div class='blueText'><strong>California Online Privacy Protection Act</strong></div><br /><div class='innerText'>CalOPPA is the first state law in the nation to require commercial websites and online services to post a privacy policy.  The law's reach stretches well beyond California to require any person or company in the United States (and conceivably the world) that operates websites collecting Personally Identifiable Information from California consumers to post a conspicuous privacy policy on its website stating exactly the information being collected and those individuals or companies with whom it is being shared. -  See more at: http://consumercal.org/california-online-privacy-protection-act-caloppa/#sthash.0FdRbT51.dpuf<br></div><div class='innerText'><br><strong>According to CalOPPA, we agree to the following:</strong><br></div><div class='innerText'>Users can visit our site anonymously.</div><div class='innerText'>Once this privacy policy is created, we will add a link to it on our home page or as a minimum, on the first significant page after entering our website.<br></div><div class='innerText'>Our Privacy Policy link includes the word 'Privacy' and can easily be found on the page specified above.</div><div class='innerText'><br>You will be notified of any Privacy Policy changes:</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> On our Privacy Policy Page<br></div><div class='innerText'>Can change your personal information:</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> By emailing us</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> By logging in to your account</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> By chatting with us or by sending us a support ticket</div><div class='innerText'><br><strong>How does our site handle Do Not Track signals?</strong><br></div><div class='innerText'>We honor Do Not Track signals and Do Not Track, plant cookies, or use advertising when a Do Not Track (DNT) browser mechanism is in place. </div><div class='innerText'><br><strong>Does our site allow third-party behavioral tracking?</strong><br></div><div class='innerText'>It's also important to note that we do not allow third-party behavioral tracking</div><span id='coppAct'></span><br><div class='blueText'><strong>COPPA (Children Online Privacy Protection Act)</strong></div><br /><div class='innerText'>When it comes to the collection of personal information from children under the age of 13 years old, the Children's Online Privacy Protection Act (COPPA) puts parents in control.  The Federal Trade Commission, United States' consumer protection agency, enforces the COPPA Rule, which spells out what operators of websites and online services must do to protect children's privacy and safety online.<br><br></div><div class='innerText'>We do not specifically market to children under the age of 13 years old.</div><div class='innerText'>Do we let third-parties, including ad networks or plug-ins collect PII from children under 13?</div><span id='ftcFip'></span><br><div class='blueText'><strong>Fair Information Practices</strong></div><br /><div class='innerText'>The Fair Information Practices Principles form the backbone of privacy law in the United States and the concepts they include have played a significant role in the development of data protection laws around the globe. Understanding the Fair Information Practice Principles and how they should be implemented is critical to comply with the various privacy laws that protect personal information.<br><br></div><div class='innerText'><strong>In order to be in line with Fair Information Practices we will take the following responsive action, should a data breach occur:</strong></div><div class='innerText'>We will notify you via email</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Within 7 business days</div><div class='innerText'>We will notify the users via in-site notification</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Within 7 business days</div><div class='innerText'><br>We also agree to the Individual Redress Principle which requires that individuals have the right to legally pursue enforceable rights against data collectors and processors who fail to adhere to the law. This principle requires not only that individuals have enforceable rights against data users, but also that individuals have recourse to courts or government agencies to investigate and/or prosecute non-compliance by data processors.</div><span id='canSpam'></span><br><div class='blueText'><strong>CAN SPAM Act</strong></div><br /><div class='innerText'>The CAN-SPAM Act is a law that sets the rules for commercial email, establishes requirements for commercial messages, gives recipients the right to have emails stopped from being sent to them, and spells out tough penalties for violations.<br><br></div><div class='innerText'><strong>We collect your email address in order to:</strong></div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Send information, respond to inquiries, and/or other requests or questions</div><div class='innerText'><br><strong>To be in accordance with CANSPAM, we agree to the following:</strong></div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Not use false or misleading subjects or email addresses.</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Identify the message as an advertisement in some reasonable way.</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Include the physical address of our business or site headquarters.</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Monitor third-party email marketing services for compliance, if one is used.</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Honor opt-out/unsubscribe requests quickly.</div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Allow users to unsubscribe by using the link at the bottom of each email.</div><div class='innerText'><strong><br>If at any time you would like to unsubscribe from receiving future emails, you can email us at</strong></div><div class='innerText'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&bull;</strong> Follow the instructions at the bottom of each email.</div> and we will promptly remove you from <strong>ALL</strong> correspondence.</div><br><span id='ourCon'></span><br><div class='blueText'><strong>Contacting Us</strong></div><br /><div class='innerText'>If there are any questions regarding this privacy policy, you may contact us using the information below.<br><br></div><div class='innerText'>kanka.io</div><div class='innerText'>Riburgpark 6</div>Moehlin, AG 4313 <div class='innerText'>Switzerland</div><div class='innerText'>hello@kanka.io</div><div class='innerText'><br>Last Edited on 2017-11-10</div></div>"
  },
  {
    "path": "public/vendor/binarytorch/larecipe/assets/css/app.css",
    "content": "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:sans-serif}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,p,pre{margin:0}button{background:transparent;padding:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset{margin:0;padding:0}ol,ul{margin:0}*,:after,:before{border:0 solid #dae1e7}img{border-style:solid}textarea{resize:vertical}img{max-width:100%;height:auto}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:inherit;opacity:.5}input::-moz-placeholder,textarea::-moz-placeholder{color:inherit;opacity:.5}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:inherit;opacity:.5}input::placeholder,textarea::placeholder{color:inherit;opacity:.5}[role=button],button{cursor:pointer}table{border-collapse:collapse}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1rem;padding-left:1rem}@media (min-width:576px){.container{max-width:576px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:992px){.container{max-width:992px}}.alert{position:relative;background-color:var(--primary);-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);margin-top:2rem;margin-bottom:2rem;padding:1.5rem;border-radius:.5rem;overflow:hidden;-webkit-transition:-webkit-box-shadow .1s;transition:-webkit-box-shadow .1s;transition:box-shadow .1s;transition:box-shadow .1s,-webkit-box-shadow .1s}.alert:hover{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.alert.is-info{background-color:var(--info)}.alert.is-success{background-color:var(--success)}.alert.is-danger{background-color:var(--danger)}.alert.is-warning{background-color:var(--warning)}.alert p{padding-left:2rem;margin-bottom:0;color:var(--white)}.alert .icon{position:absolute;width:4rem;height:4rem;opacity:.25;font-weight:700;left:-10px;top:-10px}.alert .icon svg{fill:#fff;width:60px;height:60px}.badge{padding:.5rem 1rem;font-size:.875rem}.badge.is-white{background-color:#f8fafc;color:#3d4852}.badge.is-black{background-color:#3d4852;color:var(--white)}.badge.is-primary{background-color:var(--primary);color:var(--white)}.badge.is-secondary{background-color:var(--secondary);color:var(--white)}.badge.is-success{background-color:var(--success);color:var(--white)}.badge.is-info{background-color:var(--info);color:var(--white)}.badge.is-warning{background-color:var(--warning);color:var(--white)}.badge.is-danger{background-color:var(--danger);color:var(--white)}.search-box{height:6rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:50;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1);margin-top:4.25rem}.search-box,.search-box input{width:100%;-webkit-transition:all .2s;transition:all .2s}.search-box input{border-style:none;margin-bottom:0;height:100%;text-align:center;outline:0;font-size:2rem;text-transform:uppercase;background:#f4f5f7}.search-box input:focus{background-color:var(--white)}.search-box .algolia-autocomplete{width:100%;height:100%}.internal-autocomplete-result,.search-box .algolia-autocomplete{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.internal-autocomplete-result{background-color:var(--white);min-width:300px;max-height:400px;position:absolute;top:7rem;right:10px;border-radius:10px;-webkit-transition:all .2s;transition:all .2s;z-index:100;overflow:scroll}.internal-autocomplete-result ul{list-style:none;margin-left:-20px!important;margin-right:20px!important}.internal-autocomplete-result ul li{width:100%;margin-top:20px}.internal-autocomplete-result ul li .page-title{color:#606f7b;font-weight:700}.internal-autocomplete-result ul li hr{background-color:#f1f5f8;width:100%;border-top-width:1px;border-color:#dae1e7;margin-top:.5rem;margin-bottom:.5rem}.internal-autocomplete-result ul li .heading{width:100%;margin-bottom:0;color:#b8c2cc;padding:5px 10px;cursor:pointer}.internal-autocomplete-result ul li .heading:hover{font-weight:700}.switch{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:3rem;margin-right:.5rem;line-height:1.5}.switch-checkbox{display:none}.switch-label{display:block;overflow:hidden;cursor:pointer;background-color:#dae1e7;border-radius:9999px;height:1.5rem;-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);border-width:2px;border-color:var(--white);-webkit-transition:background-color .1s ease-in;transition:background-color .1s ease-in}.switch-label:before{position:absolute;display:block;background-color:var(--white);border-width:1px;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1);top:0;bottom:0;width:1.5rem;border-radius:9999px;margin-left:-.25rem;right:50%;content:\"\";-webkit-transition:all .1s ease-in;transition:all .1s ease-in}.switch-checkbox:checked+.switch-label{background-color:var(--primary);-webkit-box-shadow:none;box-shadow:none}.switch-checkbox:checked+.switch-label:before{right:0}#backtotop{position:fixed;right:0;opacity:0;z-index:50;margin-right:1.5rem;bottom:25px;-webkit-transition:.35s;transition:.35s;-webkit-transform:scale(.7);transform:scale(.7);-webkit-transition:all .5s;transition:all .5s}#backtotop.visible{opacity:1;-webkit-transform:scale(1);transform:scale(1)}#backtotop.visible a:hover{opacity:.75}#backtotop.visible a:hover,#backtotop a{background-color:var(--primary);outline:0}#backtotop a{border-style:none;display:block;opacity:1;width:3rem;height:3rem;border-radius:9999px;text-decoration:none;-webkit-transition:all .3s;transition:all .3s;text-align:center;font-size:26px}body #backtotop a{outline:0;color:var(--white)}#backtotop a:after{outline:0;position:relative;display:block;content:\"\\F106\";font-family:Font Awesome\\ 5 Free;font-weight:900;top:50%;-webkit-transform:translateY(-55%);transform:translateY(-55%)}.documentation.is-dark code[class*=language-],.documentation.is-dark pre[class*=language-]{text-shadow:none}.documentation.is-dark :not(pre)>code[class*=language-],.documentation.is-dark pre[class*=language-]{background:#344258!important}.documentation.is-dark code[class*=language-],.documentation.is-dark pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.documentation.is-dark pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.documentation.is-dark :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.documentation.is-dark :not(pre)>code[class*=language-],.documentation.is-dark pre[class*=language-]{padding:20px;border-radius:5px}.documentation.is-dark .token.block-comment,.documentation.is-dark .token.cdata,.documentation.is-dark .token.comment,.documentation.is-dark .token.doctype,.documentation.is-dark .token.prolog{color:#999}.documentation.is-dark .token.punctuation{color:#ccc}.documentation.is-dark .token.attr-name,.documentation.is-dark .token.deleted,.documentation.is-dark .token.namespace,.documentation.is-dark .token.tag{color:#e2777a}.documentation.is-dark .token.function-name{color:#6196cc}.documentation.is-dark .token.boolean,.documentation.is-dark .token.function,.documentation.is-dark .token.number{color:#f08d49}.documentation.is-dark .token.class-name,.documentation.is-dark .token.constant,.documentation.is-dark .token.property,.documentation.is-dark .token.symbol{color:#f8c555}.documentation.is-dark .token.atrule,.documentation.is-dark .token.builtin,.documentation.is-dark .token.important,.documentation.is-dark .token.keyword,.documentation.is-dark .token.selector{color:#cc99cd}.documentation.is-dark .token.attr-value,.documentation.is-dark .token.char,.documentation.is-dark .token.regex,.documentation.is-dark .token.string,.documentation.is-dark .token.variable{color:#7ec699}.documentation.is-dark .token.entity,.documentation.is-dark .token.operator,.documentation.is-dark .token.url{color:#67cdcc}.documentation.is-dark .token.bold,.documentation.is-dark .token.important{font-weight:700}.documentation.is-dark .token.italic{font-style:italic}.documentation.is-dark .token.entity{cursor:help}.documentation.is-dark .token.inserted{color:green}.documentation.is-dark pre[data-line]{position:relative;padding:1em 0 1em 3em}.documentation.is-dark .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:-webkit-gradient(linear,left top,right top,color-stop(70%,hsla(24,20%,50%,.1)),to(hsla(24,20%,50%,0)));background:linear-gradient(90deg,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}.documentation.is-dark .line-highlight:before,.documentation.is-dark .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f5f2f0;font:700 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;-webkit-box-shadow:0 1px #fff;box-shadow:0 1px #fff}.documentation.is-dark .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.documentation.is-dark .line-numbers .line-highlight:after,.documentation.is-dark .line-numbers .line-highlight:before{content:none}.documentation.is-dark pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.documentation.is-dark pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.documentation.is-dark .line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.documentation.is-dark .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.documentation.is-dark .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.documentation.is-light code[class*=language-],.documentation.is-light pre[class*=language-]{color:#000;text-shadow:0 1px #fff;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.7;font-size:14px;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.documentation.is-light code[class*=language-]::-moz-selection,.documentation.is-light code[class*=language-] ::-moz-selection,.documentation.is-light pre[class*=language-]::-moz-selection,.documentation.is-light pre[class*=language-] ::-moz-selection{text-shadow:none;background:#b3d4fc}.documentation.is-light code[class*=language-]::selection,.documentation.is-light code[class*=language-] ::selection,.documentation.is-light pre[class*=language-]::selection,.documentation.is-light pre[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{.documentation.is-light code[class*=language-],.documentation.is-light pre[class*=language-]{text-shadow:none}}.documentation.is-light pre[class*=language-]{padding:1em;margin:10px 0 20px;overflow:auto}.documentation.is-light :not(pre)>code[class*=language-],.documentation.is-light pre[class*=language-]{background:#fff;border-radius:5px;padding:20px;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1);border-top-width:4px;border-color:var(--primary)}.documentation.is-light :not(pre)>code[class*=language-]{padding:1px 5px;border-radius:3px}.documentation.is-light .token.cdata,.documentation.is-light .token.comment,.documentation.is-light .token.doctype,.documentation.is-light .token.prolog,.documentation.is-light .token.punctuation{color:#999}.documentation.is-light .namespace{opacity:.7}.documentation.is-light .token.attr-name,.documentation.is-light .token.boolean,.documentation.is-light .token.constant,.documentation.is-light .token.deleted,.documentation.is-light .token.number,.documentation.is-light .token.property,.documentation.is-light .token.scope,.documentation.is-light .token.symbol,.documentation.is-light .token.tag{color:#da564a}.documentation.is-light .token.builtin,.documentation.is-light .token.char,.documentation.is-light .token.inserted,.documentation.is-light .token.selector,.documentation.is-light .token.string{color:#2e7d32}.documentation.is-light .language-css .token.string,.documentation.is-light .style .token.string,.documentation.is-light .token.entity,.documentation.is-light .token.operator,.documentation.is-light .token.url{color:#555}.documentation.is-light .token.atrule,.documentation.is-light .token.attr-value,.documentation.is-light .token.keyword{color:#07a}.documentation.is-light .token.function{color:#555}.documentation.is-light .token.important,.documentation.is-light .token.regex,.documentation.is-light .token.variable{color:#4ea1df}.documentation.is-light .token.bold,.documentation.is-light .token.important{font-weight:700}.documentation.is-light .token.italic{font-style:italic}.documentation.is-light .token.entity{cursor:help}.documentation.is-light pre.line-numbers{position:relative;padding-left:3.8em;padding-top:0;margin-top:-1px;border-radius:0;counter-reset:linenumber}.documentation.is-light pre.line-numbers>code{position:relative}.documentation.is-light .line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:-4px;padding-top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.documentation.is-light .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.documentation.is-light .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.documentation.is-light .dark-code code[class*=language-],.documentation.is-light .dark-code pre[class*=language-]{color:#f8f8f2;text-shadow:0 1px rgba(0,0,0,.3);direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.documentation.is-light .dark-code pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}.documentation.is-light .dark-code :not(pre)>code[class*=language-],.documentation.is-light .dark-code pre[class*=language-]{background:#272822}.documentation.is-light .dark-code :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em}.documentation.is-light .dark-code .token.cdata,.documentation.is-light .dark-code .token.comment,.documentation.is-light .dark-code .token.doctype,.documentation.is-light .dark-code .token.prolog{color:#708090}.documentation.is-light .dark-code .token.punctuation{color:#f8f8f2}.documentation.is-light .dark-code .namespace{opacity:.7}.documentation.is-light .dark-code .token.constant,.documentation.is-light .dark-code .token.deleted,.documentation.is-light .dark-code .token.property,.documentation.is-light .dark-code .token.symbol,.documentation.is-light .dark-code .token.tag{color:#f92672}.documentation.is-light .dark-code .token.boolean,.documentation.is-light .dark-code .token.number{color:#ae81ff}.documentation.is-light .dark-code .token.attr-name,.documentation.is-light .dark-code .token.builtin,.documentation.is-light .dark-code .token.char,.documentation.is-light .dark-code .token.inserted,.documentation.is-light .dark-code .token.selector,.documentation.is-light .dark-code .token.string{color:#a6e22e}.documentation.is-light .dark-code .language-css .token.string,.documentation.is-light .dark-code .style .token.string,.documentation.is-light .dark-code .token.entity,.documentation.is-light .dark-code .token.operator,.documentation.is-light .dark-code .token.url,.documentation.is-light .dark-code .token.variable{color:#f8f8f2}.documentation.is-light .dark-code .token.atrule,.documentation.is-light .dark-code .token.attr-value{color:#e6db74}.documentation.is-light .dark-code .token.keyword{color:#66d9ef}.documentation.is-light .dark-code .token.important,.documentation.is-light .dark-code .token.regex{color:#fd971f}.documentation.is-light .dark-code .token.bold,.documentation.is-light .dark-code .token.important{font-weight:700}.documentation.is-light .dark-code .token.italic{font-style:italic}.documentation.is-light .dark-code .token.entity{cursor:help}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:15px;right:10px;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar>.toolbar .toolbar-item{display:inline-block}div.code-toolbar>.toolbar a{cursor:pointer}div.code-toolbar>.toolbar button{background:none;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar a,div.code-toolbar>.toolbar button,div.code-toolbar>.toolbar span{color:var(--white);background-color:var(--primary);padding:.5rem;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1);border-radius:.5rem;font-size:.875rem;-webkit-transition:-webkit-box-shadow .2s;transition:-webkit-box-shadow .2s;transition:box-shadow .2s;transition:box-shadow .2s,-webkit-box-shadow .2s}div.code-toolbar>.toolbar a:focus,div.code-toolbar>.toolbar a:hover,div.code-toolbar>.toolbar button:focus,div.code-toolbar>.toolbar button:hover,div.code-toolbar>.toolbar span:focus,div.code-toolbar>.toolbar span:hover{color:#fff;text-decoration:none}div.code-toolbar>.toolbar a,div.code-toolbar>.toolbar button,div.code-toolbar>.toolbar span{padding:.25rem .5em}div.code-toolbar>.toolbar a:focus,div.code-toolbar>.toolbar a:hover,div.code-toolbar>.toolbar button:focus,div.code-toolbar>.toolbar button:hover,div.code-toolbar>.toolbar span:focus,div.code-toolbar>.toolbar span:hover{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}:root{--black:#22292f;--white:#fff;--primary:#787af6;--secondary:#2b9cf2;--info:#03a9f4;--warning:#fb6340;--success:#21b978;--danger:#f5365c;--sidebar:#f4f5f7;--documentation:#fefefe;--navbar:#fff}body,html{background-color:var(--documentation)}a{text-decoration:none}.sidebar{background-color:var(--sidebar);border-right-width:1px;border-color:#dae1e7;width:16rem;position:fixed;z-index:10;font-size:1rem;top:0;bottom:0;left:0;margin-top:4rem;overflow-y:auto;padding-top:2rem;padding-bottom:2rem;-webkit-transition:all .2s;transition:all .2s}.sidebar.is-hidden{left:-16rem}.sidebar>ul{list-style:none;padding:0}.sidebar>ul>li>h2{padding:1.25rem;color:#3d4852;font-size:1rem;margin-bottom:0}.sidebar>ul>li>ul{list-style:none;padding:0;line-height:2.25}.sidebar>ul>li>ul>li.is-active{padding-left:.5rem}.sidebar>ul>li>ul>li.is-active:before{content:\"\";position:absolute;left:0;z-index:100;width:2px;height:35px;background:var(--primary)}.sidebar>ul>li>ul>li.is-active a{font-weight:700}.sidebar>ul>li>ul>li.is-active>ul>li{margin-left:-.5rem}.sidebar>ul>li>ul>li.is-active>ul>li a{font-weight:400}.sidebar>ul>li>ul>li a{font-size:1rem;font-weight:200;color:#8795a1;padding:0 2rem;display:block;-webkit-transition:padding-left .3s;transition:padding-left .3s}.sidebar>ul>li>ul>li a:hover{padding-left:2.25rem}.sidebar>ul>li>ul>li ul{list-style:none;padding:0}.sidebar>ul>li>ul>li ul>li{padding-left:1rem}.sidebar>ul>li>ul>li ul>li.is-active{border-left-width:2px;border-color:var(--primary)}.sidebar>ul>li>ul>li ul>li.is-active a{font-weight:700}.card{padding:1.5rem;margin-top:1rem;margin-bottom:1rem;-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);border-radius:.25rem}.card.is-default{background-color:var(--white);color:#3d4852;border-width:1px;border-color:#f1f5f8}.card.is-white{background-color:#f8fafc;color:#3d4852}.card.is-black{background-color:#3d4852;color:var(--white)}.card.is-primary{background-color:var(--primary);color:var(--white)}.card.is-secondary{background-color:var(--secondary);color:var(--white)}.card.is-success{background-color:var(--success);color:var(--white)}.card.is-info{background-color:var(--info);color:var(--white)}.card.is-warning{background-color:var(--warning);color:var(--white)}.card.is-danger{background-color:var(--danger);color:var(--white)}.button{padding:.75rem 1.5rem;border-radius:.25rem;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1);-webkit-transition:all .1s;transition:all .1s}.button:hover{-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.button:focus{outline:0}.button.is-link{background-color:transparent;color:#b8c2cc;-webkit-box-shadow:none;box-shadow:none}.button.is-white{background-color:#f8fafc;color:#3d4852}.button.is-black{background-color:#3d4852;color:var(--white)}.button.is-primary{background-color:var(--primary);color:var(--white)}.button.is-secondary{background-color:var(--secondary);color:var(--white)}.button.is-success{background-color:var(--success);color:var(--white)}.button.is-info{background-color:var(--info);color:var(--white)}.button.is-warning{background-color:var(--warning);color:var(--white)}.button.is-danger{background-color:var(--danger);color:var(--white)}table{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);background-color:var(--white);width:100%;padding:1rem;margin-top:1rem;margin-bottom:1rem;-webkit-transition:-webkit-box-shadow .1s;transition:-webkit-box-shadow .1s;transition:box-shadow .1s;transition:box-shadow .1s,-webkit-box-shadow .1s}table:hover{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}table td,table th,table tr{border-width:1px;border-color:#dae1e7}table td:hover,table th:hover,table tr:hover{background-color:#f8fafc}table td,table th{padding:1rem}.medium-zoom-overlay,img.medium-zoom-image--opened{z-index:10}.documentation{background-color:var(--documentation);position:static;margin-top:8rem;margin-bottom:8rem;padding-left:20rem;width:75%;-webkit-transition:padding-left .2s;transition:padding-left .2s}.documentation.expanded{padding-left:5rem}.documentation h1:first-of-type{border-left-width:2px;border-color:var(--primary);padding-left:1rem;margin-bottom:1.5rem;font-weight:700}.documentation h2{margin-top:2.5rem;margin-bottom:1rem;font-weight:700}.documentation h2 a,.documentation h2 a:hover{color:#606f7b;text-decoration:none}.documentation h2 a:before{content:\"#\";margin-left:-1rem;margin-top:.25rem;position:absolute;font-size:1rem;color:var(--primary);opacity:.75}.documentation h3{margin-top:2.5rem;margin-bottom:1rem}.documentation hr{border-top-width:2px;border-style:dashed;border-color:#f1f5f8;margin-top:1rem;margin-bottom:1rem}.documentation img{max-width:100%}.documentation>ul:first-of-type{position:fixed;padding:1rem;list-style:none;padding:0;width:20%;top:100px;right:30px}.documentation>ul:first-of-type li{border-bottom-width:1px;border-style:dashed;border-color:#dae1e7;line-height:1.5;padding:.75rem}.documentation>ul:first-of-type li a{font-size:.875rem;color:#b8c2cc}.documentation>ul:first-of-type ul{list-style:none;padding:0;padding-left:1rem}.documentation :not(pre)>code{background-color:#f1f5f8;padding:.1rem .5rem;border-radius:.25rem;color:var(--primary);line-height:1.5;line-height:1.6}.documentation ol>li,.documentation ul>li{padding-top:.5rem;padding-bottom:.5rem}.documentation p{font-size:1rem;line-height:2}@media (max-width:780px){.documentation{padding:0 40px!important;width:100%}.documentation>ul:first-of-type{list-style:none;padding:0;width:100%;position:inherit;top:10px;right:30px}}.list-reset{list-style:none;padding:0}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.bg-transparent{background-color:transparent}.bg-black{background-color:var(--black)}.bg-white{background-color:var(--white)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-info{background-color:var(--info)}.bg-warning{background-color:var(--warning)}.bg-success{background-color:var(--success)}.bg-danger{background-color:var(--danger)}.bg-sidebar{background-color:var(--sidebar)}.bg-documentation{background-color:var(--documentation)}.bg-navbar{background-color:var(--navbar)}.bg-grey-darkest{background-color:#3d4852}.bg-grey-darker{background-color:#606f7b}.bg-grey-dark{background-color:#8795a1}.bg-grey{background-color:#b8c2cc}.bg-grey-light{background-color:#dae1e7}.bg-grey-lighter{background-color:#f1f5f8}.bg-grey-lightest{background-color:#f8fafc}.bg-red-darkest{background-color:#3b0d0c}.bg-red-darker{background-color:#621b18}.bg-red-dark{background-color:#cc1f1a}.bg-red{background-color:#e3342f}.bg-red-light{background-color:#ef5753}.bg-red-lighter{background-color:#f9acaa}.bg-red-lightest{background-color:#fcebea}.bg-orange-darkest{background-color:#462a16}.bg-orange-darker{background-color:#613b1f}.bg-orange-dark{background-color:#de751f}.bg-orange{background-color:#f6993f}.bg-orange-light{background-color:#faad63}.bg-orange-lighter{background-color:#fcd9b6}.bg-orange-lightest{background-color:#fff5eb}.bg-yellow-darkest{background-color:#453411}.bg-yellow-darker{background-color:#684f1d}.bg-yellow-dark{background-color:#f2d024}.bg-yellow{background-color:#ffed4a}.bg-yellow-light{background-color:#fff382}.bg-yellow-lighter{background-color:#fff9c2}.bg-yellow-lightest{background-color:#fcfbeb}.bg-green-darkest{background-color:#0f2f21}.bg-green-darker{background-color:#1a4731}.bg-green-dark{background-color:#1f9d55}.bg-green{background-color:#38c172}.bg-green-light{background-color:#51d88a}.bg-green-lighter{background-color:#a2f5bf}.bg-green-lightest{background-color:#e3fcec}.bg-teal-darkest{background-color:#0d3331}.bg-teal-darker{background-color:#20504f}.bg-teal-dark{background-color:#38a89d}.bg-teal{background-color:#4dc0b5}.bg-teal-light{background-color:#64d5ca}.bg-teal-lighter{background-color:#a0f0ed}.bg-teal-lightest{background-color:#e8fffe}.bg-blue-darkest{background-color:#12283a}.bg-blue-darker{background-color:#1c3d5a}.bg-blue-dark{background-color:#2779bd}.bg-blue{background-color:#3490dc}.bg-blue-light{background-color:#6cb2eb}.bg-blue-lighter{background-color:#bcdefa}.bg-blue-lightest{background-color:#eff8ff}.bg-indigo-darkest{background-color:#191e38}.bg-indigo-darker{background-color:#2f365f}.bg-indigo-dark{background-color:#5661b3}.bg-indigo{background-color:#6574cd}.bg-indigo-light{background-color:#7886d7}.bg-indigo-lighter{background-color:#b2b7ff}.bg-indigo-lightest{background-color:#e6e8ff}.bg-purple-darkest{background-color:#21183c}.bg-purple-darker{background-color:#382b5f}.bg-purple-dark{background-color:#794acf}.bg-purple{background-color:#9561e2}.bg-purple-light{background-color:#a779e9}.bg-purple-lighter{background-color:#d6bbfc}.bg-purple-lightest{background-color:#f3ebff}.bg-pink-darkest{background-color:#451225}.bg-pink-darker{background-color:#6f213f}.bg-pink-dark{background-color:#eb5286}.bg-pink{background-color:#f66d9b}.bg-pink-light{background-color:#fa7ea8}.bg-pink-lighter{background-color:#ffbbca}.bg-pink-lightest{background-color:#ffebef}.hover\\:bg-transparent:hover{background-color:transparent}.hover\\:bg-black:hover{background-color:var(--black)}.hover\\:bg-white:hover{background-color:var(--white)}.hover\\:bg-primary:hover{background-color:var(--primary)}.hover\\:bg-secondary:hover{background-color:var(--secondary)}.hover\\:bg-info:hover{background-color:var(--info)}.hover\\:bg-warning:hover{background-color:var(--warning)}.hover\\:bg-success:hover{background-color:var(--success)}.hover\\:bg-danger:hover{background-color:var(--danger)}.hover\\:bg-sidebar:hover{background-color:var(--sidebar)}.hover\\:bg-documentation:hover{background-color:var(--documentation)}.hover\\:bg-navbar:hover{background-color:var(--navbar)}.hover\\:bg-grey-darkest:hover{background-color:#3d4852}.hover\\:bg-grey-darker:hover{background-color:#606f7b}.hover\\:bg-grey-dark:hover{background-color:#8795a1}.hover\\:bg-grey:hover{background-color:#b8c2cc}.hover\\:bg-grey-light:hover{background-color:#dae1e7}.hover\\:bg-grey-lighter:hover{background-color:#f1f5f8}.hover\\:bg-grey-lightest:hover{background-color:#f8fafc}.hover\\:bg-red-darkest:hover{background-color:#3b0d0c}.hover\\:bg-red-darker:hover{background-color:#621b18}.hover\\:bg-red-dark:hover{background-color:#cc1f1a}.hover\\:bg-red:hover{background-color:#e3342f}.hover\\:bg-red-light:hover{background-color:#ef5753}.hover\\:bg-red-lighter:hover{background-color:#f9acaa}.hover\\:bg-red-lightest:hover{background-color:#fcebea}.hover\\:bg-orange-darkest:hover{background-color:#462a16}.hover\\:bg-orange-darker:hover{background-color:#613b1f}.hover\\:bg-orange-dark:hover{background-color:#de751f}.hover\\:bg-orange:hover{background-color:#f6993f}.hover\\:bg-orange-light:hover{background-color:#faad63}.hover\\:bg-orange-lighter:hover{background-color:#fcd9b6}.hover\\:bg-orange-lightest:hover{background-color:#fff5eb}.hover\\:bg-yellow-darkest:hover{background-color:#453411}.hover\\:bg-yellow-darker:hover{background-color:#684f1d}.hover\\:bg-yellow-dark:hover{background-color:#f2d024}.hover\\:bg-yellow:hover{background-color:#ffed4a}.hover\\:bg-yellow-light:hover{background-color:#fff382}.hover\\:bg-yellow-lighter:hover{background-color:#fff9c2}.hover\\:bg-yellow-lightest:hover{background-color:#fcfbeb}.hover\\:bg-green-darkest:hover{background-color:#0f2f21}.hover\\:bg-green-darker:hover{background-color:#1a4731}.hover\\:bg-green-dark:hover{background-color:#1f9d55}.hover\\:bg-green:hover{background-color:#38c172}.hover\\:bg-green-light:hover{background-color:#51d88a}.hover\\:bg-green-lighter:hover{background-color:#a2f5bf}.hover\\:bg-green-lightest:hover{background-color:#e3fcec}.hover\\:bg-teal-darkest:hover{background-color:#0d3331}.hover\\:bg-teal-darker:hover{background-color:#20504f}.hover\\:bg-teal-dark:hover{background-color:#38a89d}.hover\\:bg-teal:hover{background-color:#4dc0b5}.hover\\:bg-teal-light:hover{background-color:#64d5ca}.hover\\:bg-teal-lighter:hover{background-color:#a0f0ed}.hover\\:bg-teal-lightest:hover{background-color:#e8fffe}.hover\\:bg-blue-darkest:hover{background-color:#12283a}.hover\\:bg-blue-darker:hover{background-color:#1c3d5a}.hover\\:bg-blue-dark:hover{background-color:#2779bd}.hover\\:bg-blue:hover{background-color:#3490dc}.hover\\:bg-blue-light:hover{background-color:#6cb2eb}.hover\\:bg-blue-lighter:hover{background-color:#bcdefa}.hover\\:bg-blue-lightest:hover{background-color:#eff8ff}.hover\\:bg-indigo-darkest:hover{background-color:#191e38}.hover\\:bg-indigo-darker:hover{background-color:#2f365f}.hover\\:bg-indigo-dark:hover{background-color:#5661b3}.hover\\:bg-indigo:hover{background-color:#6574cd}.hover\\:bg-indigo-light:hover{background-color:#7886d7}.hover\\:bg-indigo-lighter:hover{background-color:#b2b7ff}.hover\\:bg-indigo-lightest:hover{background-color:#e6e8ff}.hover\\:bg-purple-darkest:hover{background-color:#21183c}.hover\\:bg-purple-darker:hover{background-color:#382b5f}.hover\\:bg-purple-dark:hover{background-color:#794acf}.hover\\:bg-purple:hover{background-color:#9561e2}.hover\\:bg-purple-light:hover{background-color:#a779e9}.hover\\:bg-purple-lighter:hover{background-color:#d6bbfc}.hover\\:bg-purple-lightest:hover{background-color:#f3ebff}.hover\\:bg-pink-darkest:hover{background-color:#451225}.hover\\:bg-pink-darker:hover{background-color:#6f213f}.hover\\:bg-pink-dark:hover{background-color:#eb5286}.hover\\:bg-pink:hover{background-color:#f66d9b}.hover\\:bg-pink-light:hover{background-color:#fa7ea8}.hover\\:bg-pink-lighter:hover{background-color:#ffbbca}.hover\\:bg-pink-lightest:hover{background-color:#ffebef}.focus\\:bg-transparent:focus{background-color:transparent}.focus\\:bg-black:focus{background-color:var(--black)}.focus\\:bg-white:focus{background-color:var(--white)}.focus\\:bg-primary:focus{background-color:var(--primary)}.focus\\:bg-secondary:focus{background-color:var(--secondary)}.focus\\:bg-info:focus{background-color:var(--info)}.focus\\:bg-warning:focus{background-color:var(--warning)}.focus\\:bg-success:focus{background-color:var(--success)}.focus\\:bg-danger:focus{background-color:var(--danger)}.focus\\:bg-sidebar:focus{background-color:var(--sidebar)}.focus\\:bg-documentation:focus{background-color:var(--documentation)}.focus\\:bg-navbar:focus{background-color:var(--navbar)}.focus\\:bg-grey-darkest:focus{background-color:#3d4852}.focus\\:bg-grey-darker:focus{background-color:#606f7b}.focus\\:bg-grey-dark:focus{background-color:#8795a1}.focus\\:bg-grey:focus{background-color:#b8c2cc}.focus\\:bg-grey-light:focus{background-color:#dae1e7}.focus\\:bg-grey-lighter:focus{background-color:#f1f5f8}.focus\\:bg-grey-lightest:focus{background-color:#f8fafc}.focus\\:bg-red-darkest:focus{background-color:#3b0d0c}.focus\\:bg-red-darker:focus{background-color:#621b18}.focus\\:bg-red-dark:focus{background-color:#cc1f1a}.focus\\:bg-red:focus{background-color:#e3342f}.focus\\:bg-red-light:focus{background-color:#ef5753}.focus\\:bg-red-lighter:focus{background-color:#f9acaa}.focus\\:bg-red-lightest:focus{background-color:#fcebea}.focus\\:bg-orange-darkest:focus{background-color:#462a16}.focus\\:bg-orange-darker:focus{background-color:#613b1f}.focus\\:bg-orange-dark:focus{background-color:#de751f}.focus\\:bg-orange:focus{background-color:#f6993f}.focus\\:bg-orange-light:focus{background-color:#faad63}.focus\\:bg-orange-lighter:focus{background-color:#fcd9b6}.focus\\:bg-orange-lightest:focus{background-color:#fff5eb}.focus\\:bg-yellow-darkest:focus{background-color:#453411}.focus\\:bg-yellow-darker:focus{background-color:#684f1d}.focus\\:bg-yellow-dark:focus{background-color:#f2d024}.focus\\:bg-yellow:focus{background-color:#ffed4a}.focus\\:bg-yellow-light:focus{background-color:#fff382}.focus\\:bg-yellow-lighter:focus{background-color:#fff9c2}.focus\\:bg-yellow-lightest:focus{background-color:#fcfbeb}.focus\\:bg-green-darkest:focus{background-color:#0f2f21}.focus\\:bg-green-darker:focus{background-color:#1a4731}.focus\\:bg-green-dark:focus{background-color:#1f9d55}.focus\\:bg-green:focus{background-color:#38c172}.focus\\:bg-green-light:focus{background-color:#51d88a}.focus\\:bg-green-lighter:focus{background-color:#a2f5bf}.focus\\:bg-green-lightest:focus{background-color:#e3fcec}.focus\\:bg-teal-darkest:focus{background-color:#0d3331}.focus\\:bg-teal-darker:focus{background-color:#20504f}.focus\\:bg-teal-dark:focus{background-color:#38a89d}.focus\\:bg-teal:focus{background-color:#4dc0b5}.focus\\:bg-teal-light:focus{background-color:#64d5ca}.focus\\:bg-teal-lighter:focus{background-color:#a0f0ed}.focus\\:bg-teal-lightest:focus{background-color:#e8fffe}.focus\\:bg-blue-darkest:focus{background-color:#12283a}.focus\\:bg-blue-darker:focus{background-color:#1c3d5a}.focus\\:bg-blue-dark:focus{background-color:#2779bd}.focus\\:bg-blue:focus{background-color:#3490dc}.focus\\:bg-blue-light:focus{background-color:#6cb2eb}.focus\\:bg-blue-lighter:focus{background-color:#bcdefa}.focus\\:bg-blue-lightest:focus{background-color:#eff8ff}.focus\\:bg-indigo-darkest:focus{background-color:#191e38}.focus\\:bg-indigo-darker:focus{background-color:#2f365f}.focus\\:bg-indigo-dark:focus{background-color:#5661b3}.focus\\:bg-indigo:focus{background-color:#6574cd}.focus\\:bg-indigo-light:focus{background-color:#7886d7}.focus\\:bg-indigo-lighter:focus{background-color:#b2b7ff}.focus\\:bg-indigo-lightest:focus{background-color:#e6e8ff}.focus\\:bg-purple-darkest:focus{background-color:#21183c}.focus\\:bg-purple-darker:focus{background-color:#382b5f}.focus\\:bg-purple-dark:focus{background-color:#794acf}.focus\\:bg-purple:focus{background-color:#9561e2}.focus\\:bg-purple-light:focus{background-color:#a779e9}.focus\\:bg-purple-lighter:focus{background-color:#d6bbfc}.focus\\:bg-purple-lightest:focus{background-color:#f3ebff}.focus\\:bg-pink-darkest:focus{background-color:#451225}.focus\\:bg-pink-darker:focus{background-color:#6f213f}.focus\\:bg-pink-dark:focus{background-color:#eb5286}.focus\\:bg-pink:focus{background-color:#f66d9b}.focus\\:bg-pink-light:focus{background-color:#fa7ea8}.focus\\:bg-pink-lighter:focus{background-color:#ffbbca}.focus\\:bg-pink-lightest:focus{background-color:#ffebef}.bg-bottom{background-position:bottom}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-left-bottom{background-position:0 100%}.bg-left-top{background-position:0 0}.bg-right{background-position:100%}.bg-right-bottom{background-position:100% 100%}.bg-right-top{background-position:100% 0}.bg-top{background-position:top}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-auto{background-size:auto}.bg-cover{background-size:cover}.bg-contain{background-size:contain}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-transparent{border-color:transparent}.border-black{border-color:var(--black)}.border-white{border-color:var(--white)}.border-primary{border-color:var(--primary)}.border-secondary{border-color:var(--secondary)}.border-info{border-color:var(--info)}.border-warning{border-color:var(--warning)}.border-success{border-color:var(--success)}.border-danger{border-color:var(--danger)}.border-sidebar{border-color:var(--sidebar)}.border-documentation{border-color:var(--documentation)}.border-navbar{border-color:var(--navbar)}.border-grey-darkest{border-color:#3d4852}.border-grey-darker{border-color:#606f7b}.border-grey-dark{border-color:#8795a1}.border-grey{border-color:#b8c2cc}.border-grey-light{border-color:#dae1e7}.border-grey-lighter{border-color:#f1f5f8}.border-grey-lightest{border-color:#f8fafc}.border-red-darkest{border-color:#3b0d0c}.border-red-darker{border-color:#621b18}.border-red-dark{border-color:#cc1f1a}.border-red{border-color:#e3342f}.border-red-light{border-color:#ef5753}.border-red-lighter{border-color:#f9acaa}.border-red-lightest{border-color:#fcebea}.border-orange-darkest{border-color:#462a16}.border-orange-darker{border-color:#613b1f}.border-orange-dark{border-color:#de751f}.border-orange{border-color:#f6993f}.border-orange-light{border-color:#faad63}.border-orange-lighter{border-color:#fcd9b6}.border-orange-lightest{border-color:#fff5eb}.border-yellow-darkest{border-color:#453411}.border-yellow-darker{border-color:#684f1d}.border-yellow-dark{border-color:#f2d024}.border-yellow{border-color:#ffed4a}.border-yellow-light{border-color:#fff382}.border-yellow-lighter{border-color:#fff9c2}.border-yellow-lightest{border-color:#fcfbeb}.border-green-darkest{border-color:#0f2f21}.border-green-darker{border-color:#1a4731}.border-green-dark{border-color:#1f9d55}.border-green{border-color:#38c172}.border-green-light{border-color:#51d88a}.border-green-lighter{border-color:#a2f5bf}.border-green-lightest{border-color:#e3fcec}.border-teal-darkest{border-color:#0d3331}.border-teal-darker{border-color:#20504f}.border-teal-dark{border-color:#38a89d}.border-teal{border-color:#4dc0b5}.border-teal-light{border-color:#64d5ca}.border-teal-lighter{border-color:#a0f0ed}.border-teal-lightest{border-color:#e8fffe}.border-blue-darkest{border-color:#12283a}.border-blue-darker{border-color:#1c3d5a}.border-blue-dark{border-color:#2779bd}.border-blue{border-color:#3490dc}.border-blue-light{border-color:#6cb2eb}.border-blue-lighter{border-color:#bcdefa}.border-blue-lightest{border-color:#eff8ff}.border-indigo-darkest{border-color:#191e38}.border-indigo-darker{border-color:#2f365f}.border-indigo-dark{border-color:#5661b3}.border-indigo{border-color:#6574cd}.border-indigo-light{border-color:#7886d7}.border-indigo-lighter{border-color:#b2b7ff}.border-indigo-lightest{border-color:#e6e8ff}.border-purple-darkest{border-color:#21183c}.border-purple-darker{border-color:#382b5f}.border-purple-dark{border-color:#794acf}.border-purple{border-color:#9561e2}.border-purple-light{border-color:#a779e9}.border-purple-lighter{border-color:#d6bbfc}.border-purple-lightest{border-color:#f3ebff}.border-pink-darkest{border-color:#451225}.border-pink-darker{border-color:#6f213f}.border-pink-dark{border-color:#eb5286}.border-pink{border-color:#f66d9b}.border-pink-light{border-color:#fa7ea8}.border-pink-lighter{border-color:#ffbbca}.border-pink-lightest{border-color:#ffebef}.hover\\:border-transparent:hover{border-color:transparent}.hover\\:border-black:hover{border-color:var(--black)}.hover\\:border-white:hover{border-color:var(--white)}.hover\\:border-primary:hover{border-color:var(--primary)}.hover\\:border-secondary:hover{border-color:var(--secondary)}.hover\\:border-info:hover{border-color:var(--info)}.hover\\:border-warning:hover{border-color:var(--warning)}.hover\\:border-success:hover{border-color:var(--success)}.hover\\:border-danger:hover{border-color:var(--danger)}.hover\\:border-sidebar:hover{border-color:var(--sidebar)}.hover\\:border-documentation:hover{border-color:var(--documentation)}.hover\\:border-navbar:hover{border-color:var(--navbar)}.hover\\:border-grey-darkest:hover{border-color:#3d4852}.hover\\:border-grey-darker:hover{border-color:#606f7b}.hover\\:border-grey-dark:hover{border-color:#8795a1}.hover\\:border-grey:hover{border-color:#b8c2cc}.hover\\:border-grey-light:hover{border-color:#dae1e7}.hover\\:border-grey-lighter:hover{border-color:#f1f5f8}.hover\\:border-grey-lightest:hover{border-color:#f8fafc}.hover\\:border-red-darkest:hover{border-color:#3b0d0c}.hover\\:border-red-darker:hover{border-color:#621b18}.hover\\:border-red-dark:hover{border-color:#cc1f1a}.hover\\:border-red:hover{border-color:#e3342f}.hover\\:border-red-light:hover{border-color:#ef5753}.hover\\:border-red-lighter:hover{border-color:#f9acaa}.hover\\:border-red-lightest:hover{border-color:#fcebea}.hover\\:border-orange-darkest:hover{border-color:#462a16}.hover\\:border-orange-darker:hover{border-color:#613b1f}.hover\\:border-orange-dark:hover{border-color:#de751f}.hover\\:border-orange:hover{border-color:#f6993f}.hover\\:border-orange-light:hover{border-color:#faad63}.hover\\:border-orange-lighter:hover{border-color:#fcd9b6}.hover\\:border-orange-lightest:hover{border-color:#fff5eb}.hover\\:border-yellow-darkest:hover{border-color:#453411}.hover\\:border-yellow-darker:hover{border-color:#684f1d}.hover\\:border-yellow-dark:hover{border-color:#f2d024}.hover\\:border-yellow:hover{border-color:#ffed4a}.hover\\:border-yellow-light:hover{border-color:#fff382}.hover\\:border-yellow-lighter:hover{border-color:#fff9c2}.hover\\:border-yellow-lightest:hover{border-color:#fcfbeb}.hover\\:border-green-darkest:hover{border-color:#0f2f21}.hover\\:border-green-darker:hover{border-color:#1a4731}.hover\\:border-green-dark:hover{border-color:#1f9d55}.hover\\:border-green:hover{border-color:#38c172}.hover\\:border-green-light:hover{border-color:#51d88a}.hover\\:border-green-lighter:hover{border-color:#a2f5bf}.hover\\:border-green-lightest:hover{border-color:#e3fcec}.hover\\:border-teal-darkest:hover{border-color:#0d3331}.hover\\:border-teal-darker:hover{border-color:#20504f}.hover\\:border-teal-dark:hover{border-color:#38a89d}.hover\\:border-teal:hover{border-color:#4dc0b5}.hover\\:border-teal-light:hover{border-color:#64d5ca}.hover\\:border-teal-lighter:hover{border-color:#a0f0ed}.hover\\:border-teal-lightest:hover{border-color:#e8fffe}.hover\\:border-blue-darkest:hover{border-color:#12283a}.hover\\:border-blue-darker:hover{border-color:#1c3d5a}.hover\\:border-blue-dark:hover{border-color:#2779bd}.hover\\:border-blue:hover{border-color:#3490dc}.hover\\:border-blue-light:hover{border-color:#6cb2eb}.hover\\:border-blue-lighter:hover{border-color:#bcdefa}.hover\\:border-blue-lightest:hover{border-color:#eff8ff}.hover\\:border-indigo-darkest:hover{border-color:#191e38}.hover\\:border-indigo-darker:hover{border-color:#2f365f}.hover\\:border-indigo-dark:hover{border-color:#5661b3}.hover\\:border-indigo:hover{border-color:#6574cd}.hover\\:border-indigo-light:hover{border-color:#7886d7}.hover\\:border-indigo-lighter:hover{border-color:#b2b7ff}.hover\\:border-indigo-lightest:hover{border-color:#e6e8ff}.hover\\:border-purple-darkest:hover{border-color:#21183c}.hover\\:border-purple-darker:hover{border-color:#382b5f}.hover\\:border-purple-dark:hover{border-color:#794acf}.hover\\:border-purple:hover{border-color:#9561e2}.hover\\:border-purple-light:hover{border-color:#a779e9}.hover\\:border-purple-lighter:hover{border-color:#d6bbfc}.hover\\:border-purple-lightest:hover{border-color:#f3ebff}.hover\\:border-pink-darkest:hover{border-color:#451225}.hover\\:border-pink-darker:hover{border-color:#6f213f}.hover\\:border-pink-dark:hover{border-color:#eb5286}.hover\\:border-pink:hover{border-color:#f66d9b}.hover\\:border-pink-light:hover{border-color:#fa7ea8}.hover\\:border-pink-lighter:hover{border-color:#ffbbca}.hover\\:border-pink-lightest:hover{border-color:#ffebef}.focus\\:border-transparent:focus{border-color:transparent}.focus\\:border-black:focus{border-color:var(--black)}.focus\\:border-white:focus{border-color:var(--white)}.focus\\:border-primary:focus{border-color:var(--primary)}.focus\\:border-secondary:focus{border-color:var(--secondary)}.focus\\:border-info:focus{border-color:var(--info)}.focus\\:border-warning:focus{border-color:var(--warning)}.focus\\:border-success:focus{border-color:var(--success)}.focus\\:border-danger:focus{border-color:var(--danger)}.focus\\:border-sidebar:focus{border-color:var(--sidebar)}.focus\\:border-documentation:focus{border-color:var(--documentation)}.focus\\:border-navbar:focus{border-color:var(--navbar)}.focus\\:border-grey-darkest:focus{border-color:#3d4852}.focus\\:border-grey-darker:focus{border-color:#606f7b}.focus\\:border-grey-dark:focus{border-color:#8795a1}.focus\\:border-grey:focus{border-color:#b8c2cc}.focus\\:border-grey-light:focus{border-color:#dae1e7}.focus\\:border-grey-lighter:focus{border-color:#f1f5f8}.focus\\:border-grey-lightest:focus{border-color:#f8fafc}.focus\\:border-red-darkest:focus{border-color:#3b0d0c}.focus\\:border-red-darker:focus{border-color:#621b18}.focus\\:border-red-dark:focus{border-color:#cc1f1a}.focus\\:border-red:focus{border-color:#e3342f}.focus\\:border-red-light:focus{border-color:#ef5753}.focus\\:border-red-lighter:focus{border-color:#f9acaa}.focus\\:border-red-lightest:focus{border-color:#fcebea}.focus\\:border-orange-darkest:focus{border-color:#462a16}.focus\\:border-orange-darker:focus{border-color:#613b1f}.focus\\:border-orange-dark:focus{border-color:#de751f}.focus\\:border-orange:focus{border-color:#f6993f}.focus\\:border-orange-light:focus{border-color:#faad63}.focus\\:border-orange-lighter:focus{border-color:#fcd9b6}.focus\\:border-orange-lightest:focus{border-color:#fff5eb}.focus\\:border-yellow-darkest:focus{border-color:#453411}.focus\\:border-yellow-darker:focus{border-color:#684f1d}.focus\\:border-yellow-dark:focus{border-color:#f2d024}.focus\\:border-yellow:focus{border-color:#ffed4a}.focus\\:border-yellow-light:focus{border-color:#fff382}.focus\\:border-yellow-lighter:focus{border-color:#fff9c2}.focus\\:border-yellow-lightest:focus{border-color:#fcfbeb}.focus\\:border-green-darkest:focus{border-color:#0f2f21}.focus\\:border-green-darker:focus{border-color:#1a4731}.focus\\:border-green-dark:focus{border-color:#1f9d55}.focus\\:border-green:focus{border-color:#38c172}.focus\\:border-green-light:focus{border-color:#51d88a}.focus\\:border-green-lighter:focus{border-color:#a2f5bf}.focus\\:border-green-lightest:focus{border-color:#e3fcec}.focus\\:border-teal-darkest:focus{border-color:#0d3331}.focus\\:border-teal-darker:focus{border-color:#20504f}.focus\\:border-teal-dark:focus{border-color:#38a89d}.focus\\:border-teal:focus{border-color:#4dc0b5}.focus\\:border-teal-light:focus{border-color:#64d5ca}.focus\\:border-teal-lighter:focus{border-color:#a0f0ed}.focus\\:border-teal-lightest:focus{border-color:#e8fffe}.focus\\:border-blue-darkest:focus{border-color:#12283a}.focus\\:border-blue-darker:focus{border-color:#1c3d5a}.focus\\:border-blue-dark:focus{border-color:#2779bd}.focus\\:border-blue:focus{border-color:#3490dc}.focus\\:border-blue-light:focus{border-color:#6cb2eb}.focus\\:border-blue-lighter:focus{border-color:#bcdefa}.focus\\:border-blue-lightest:focus{border-color:#eff8ff}.focus\\:border-indigo-darkest:focus{border-color:#191e38}.focus\\:border-indigo-darker:focus{border-color:#2f365f}.focus\\:border-indigo-dark:focus{border-color:#5661b3}.focus\\:border-indigo:focus{border-color:#6574cd}.focus\\:border-indigo-light:focus{border-color:#7886d7}.focus\\:border-indigo-lighter:focus{border-color:#b2b7ff}.focus\\:border-indigo-lightest:focus{border-color:#e6e8ff}.focus\\:border-purple-darkest:focus{border-color:#21183c}.focus\\:border-purple-darker:focus{border-color:#382b5f}.focus\\:border-purple-dark:focus{border-color:#794acf}.focus\\:border-purple:focus{border-color:#9561e2}.focus\\:border-purple-light:focus{border-color:#a779e9}.focus\\:border-purple-lighter:focus{border-color:#d6bbfc}.focus\\:border-purple-lightest:focus{border-color:#f3ebff}.focus\\:border-pink-darkest:focus{border-color:#451225}.focus\\:border-pink-darker:focus{border-color:#6f213f}.focus\\:border-pink-dark:focus{border-color:#eb5286}.focus\\:border-pink:focus{border-color:#f66d9b}.focus\\:border-pink-light:focus{border-color:#fa7ea8}.focus\\:border-pink-lighter:focus{border-color:#ffbbca}.focus\\:border-pink-lightest:focus{border-color:#ffebef}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-t-sm{border-top-left-radius:.125rem}.rounded-r-sm,.rounded-t-sm{border-top-right-radius:.125rem}.rounded-b-sm,.rounded-r-sm{border-bottom-right-radius:.125rem}.rounded-b-sm,.rounded-l-sm{border-bottom-left-radius:.125rem}.rounded-l-sm{border-top-left-radius:.125rem}.rounded-t{border-top-left-radius:.25rem}.rounded-r,.rounded-t{border-top-right-radius:.25rem}.rounded-b,.rounded-r{border-bottom-right-radius:.25rem}.rounded-b,.rounded-l{border-bottom-left-radius:.25rem}.rounded-l{border-top-left-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem}.rounded-r-lg,.rounded-t-lg{border-top-right-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-b-lg,.rounded-l-lg{border-bottom-left-radius:.5rem}.rounded-l-lg{border-top-left-radius:.5rem}.rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.rounded-r-full{border-top-right-radius:9999px}.rounded-b-full,.rounded-r-full{border-bottom-right-radius:9999px}.rounded-b-full,.rounded-l-full{border-bottom-left-radius:9999px}.rounded-l-full{border-top-left-radius:9999px}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.rounded-br-sm{border-bottom-right-radius:.125rem}.rounded-bl-sm{border-bottom-left-radius:.125rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-tr-lg{border-top-right-radius:.5rem}.rounded-br-lg{border-bottom-right-radius:.5rem}.rounded-bl-lg{border-bottom-left-radius:.5rem}.rounded-tl-full{border-top-left-radius:9999px}.rounded-tr-full{border-top-right-radius:9999px}.rounded-br-full{border-bottom-right-radius:9999px}.rounded-bl-full{border-bottom-left-radius:9999px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-none{border-style:none}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border-8{border-width:8px}.border{border-width:1px}.border-t-0{border-top-width:0}.border-r-0{border-right-width:0}.border-b-0{border-bottom-width:0}.border-l-0{border-left-width:0}.border-t-2{border-top-width:2px}.border-r-2{border-right-width:2px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-t-4{border-top-width:4px}.border-r-4{border-right-width:4px}.border-b-4{border-bottom-width:4px}.border-l-4{border-left-width:4px}.border-t-8{border-top-width:8px}.border-r-8{border-right-width:8px}.border-b-8{border-bottom-width:8px}.border-l-8{border-left-width:8px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.table{display:table}.table-row{display:table-row}.table-cell{display:table-cell}.hidden{display:none}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-row{-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-row,.flex-row-reverse{-webkit-box-orient:horizontal}.flex-row-reverse{-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-col{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-col-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.flex-no-wrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-auto{-ms-flex-item-align:auto;align-self:auto}.self-start{-ms-flex-item-align:start;align-self:flex-start}.self-end{-ms-flex-item-align:end;align-self:flex-end}.self-center{-ms-flex-item-align:center;align-self:center}.self-stretch{-ms-flex-item-align:stretch;align-self:stretch}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around{-ms-flex-pack:distribute;justify-content:space-around}.content-center{-ms-flex-line-pack:center;align-content:center}.content-start{-ms-flex-line-pack:start;align-content:flex-start}.content-end{-ms-flex-line-pack:end;align-content:flex-end}.content-between{-ms-flex-line-pack:justify;align-content:space-between}.content-around{-ms-flex-line-pack:distribute;align-content:space-around}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.flex-initial{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-grow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-shrink{-ms-flex-negative:1;flex-shrink:1}.flex-no-grow{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.flex-no-shrink{-ms-flex-negative:0;flex-shrink:0}.float-right{float:right}.float-left{float:left}.float-none{float:none}.clearfix:after{content:\"\";display:table;clear:both}.font-sans{font-family:system-ui,BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.font-serif{font-family:Constantia,Lucida Bright,Lucidabright,Lucida Serif,Lucida,DejaVu Serif,Bitstream Vera Serif,Liberation Serif,Georgia,serif}.font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-hairline{font-weight:100}.font-thin{font-weight:200}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-black{font-weight:900}.hover\\:font-hairline:hover{font-weight:100}.hover\\:font-thin:hover{font-weight:200}.hover\\:font-light:hover{font-weight:300}.hover\\:font-normal:hover{font-weight:400}.hover\\:font-medium:hover{font-weight:500}.hover\\:font-semibold:hover{font-weight:600}.hover\\:font-bold:hover{font-weight:700}.hover\\:font-extrabold:hover{font-weight:800}.hover\\:font-black:hover{font-weight:900}.focus\\:font-hairline:focus{font-weight:100}.focus\\:font-thin:focus{font-weight:200}.focus\\:font-light:focus{font-weight:300}.focus\\:font-normal:focus{font-weight:400}.focus\\:font-medium:focus{font-weight:500}.focus\\:font-semibold:focus{font-weight:600}.focus\\:font-bold:focus{font-weight:700}.focus\\:font-extrabold:focus{font-weight:800}.focus\\:font-black:focus{font-weight:900}.h-1{height:.25rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-24{height:6rem}.h-32{height:8rem}.h-48{height:12rem}.h-64{height:16rem}.h-auto{height:auto}.h-px{height:1px}.h-full{height:100%}.h-screen{height:100vh}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-normal{line-height:1.5}.leading-large{line-height:2}.leading-loose{line-height:2.25}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-8{margin:2rem}.m-10{margin:2.5rem}.m-12{margin:3rem}.m-16{margin:4rem}.m-20{margin:5rem}.m-24{margin:6rem}.m-32{margin:8rem}.m-auto{margin:auto}.m-px{margin:1px}.my-0{margin-top:0;margin-bottom:0}.mx-0{margin-left:0;margin-right:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mx-12{margin-left:3rem;margin-right:3rem}.my-16{margin-top:4rem;margin-bottom:4rem}.mx-16{margin-left:4rem;margin-right:4rem}.my-20{margin-top:5rem;margin-bottom:5rem}.mx-20{margin-left:5rem;margin-right:5rem}.my-24{margin-top:6rem;margin-bottom:6rem}.mx-24{margin-left:6rem;margin-right:6rem}.my-32{margin-top:8rem;margin-bottom:8rem}.mx-32{margin-left:8rem;margin-right:8rem}.my-auto{margin-top:auto;margin-bottom:auto}.mx-auto{margin-left:auto;margin-right:auto}.my-px{margin-top:1px;margin-bottom:1px}.mx-px{margin-left:1px;margin-right:1px}.mt-0{margin-top:0}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.mr-5{margin-right:1.25rem}.mb-5{margin-bottom:1.25rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mb-8{margin-bottom:2rem}.ml-8{margin-left:2rem}.mt-10{margin-top:2.5rem}.mr-10{margin-right:2.5rem}.mb-10{margin-bottom:2.5rem}.ml-10{margin-left:2.5rem}.mt-12{margin-top:3rem}.mr-12{margin-right:3rem}.mb-12{margin-bottom:3rem}.ml-12{margin-left:3rem}.mt-16{margin-top:4rem}.mr-16{margin-right:4rem}.mb-16{margin-bottom:4rem}.ml-16{margin-left:4rem}.mt-20{margin-top:5rem}.mr-20{margin-right:5rem}.mb-20{margin-bottom:5rem}.ml-20{margin-left:5rem}.mt-24{margin-top:6rem}.mr-24{margin-right:6rem}.mb-24{margin-bottom:6rem}.ml-24{margin-left:6rem}.mt-32{margin-top:8rem}.mr-32{margin-right:8rem}.mb-32{margin-bottom:8rem}.ml-32{margin-left:8rem}.mt-auto{margin-top:auto}.mr-auto{margin-right:auto}.mb-auto{margin-bottom:auto}.ml-auto{margin-left:auto}.mt-px{margin-top:1px}.mr-px{margin-right:1px}.mb-px{margin-bottom:1px}.ml-px{margin-left:1px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.max-w-xs{max-width:20rem}.max-w-sm{max-width:30rem}.max-w-md{max-width:40rem}.max-w-lg{max-width:50rem}.max-w-xl{max-width:60rem}.max-w-2xl{max-width:70rem}.max-w-3xl{max-width:80rem}.max-w-4xl{max-width:90rem}.max-w-5xl{max-width:100rem}.max-w-full{max-width:100%}.min-h-0{min-height:0}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-w-0{min-width:0}.min-w-full{min-width:100%}.-m-0{margin:0}.-m-1{margin:-.25rem}.-m-2{margin:-.5rem}.-m-3{margin:-.75rem}.-m-4{margin:-1rem}.-m-5{margin:-1.25rem}.-m-6{margin:-1.5rem}.-m-8{margin:-2rem}.-m-10{margin:-2.5rem}.-m-12{margin:-3rem}.-m-16{margin:-4rem}.-m-20{margin:-5rem}.-m-24{margin:-6rem}.-m-32{margin:-8rem}.-m-px{margin:-1px}.-my-0{margin-top:0;margin-bottom:0}.-mx-0{margin-left:0;margin-right:0}.-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.-my-4{margin-top:-1rem;margin-bottom:-1rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-8{margin-top:-2rem;margin-bottom:-2rem}.-mx-8{margin-left:-2rem;margin-right:-2rem}.-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.-my-12{margin-top:-3rem;margin-bottom:-3rem}.-mx-12{margin-left:-3rem;margin-right:-3rem}.-my-16{margin-top:-4rem;margin-bottom:-4rem}.-mx-16{margin-left:-4rem;margin-right:-4rem}.-my-20{margin-top:-5rem;margin-bottom:-5rem}.-mx-20{margin-left:-5rem;margin-right:-5rem}.-my-24{margin-top:-6rem;margin-bottom:-6rem}.-mx-24{margin-left:-6rem;margin-right:-6rem}.-my-32{margin-top:-8rem;margin-bottom:-8rem}.-mx-32{margin-left:-8rem;margin-right:-8rem}.-my-px{margin-top:-1px;margin-bottom:-1px}.-mx-px{margin-left:-1px;margin-right:-1px}.-mt-0{margin-top:0}.-mr-0{margin-right:0}.-mb-0{margin-bottom:0}.-ml-0{margin-left:0}.-mt-1{margin-top:-.25rem}.-mr-1{margin-right:-.25rem}.-mb-1{margin-bottom:-.25rem}.-ml-1{margin-left:-.25rem}.-mt-2{margin-top:-.5rem}.-mr-2{margin-right:-.5rem}.-mb-2{margin-bottom:-.5rem}.-ml-2{margin-left:-.5rem}.-mt-3{margin-top:-.75rem}.-mr-3{margin-right:-.75rem}.-mb-3{margin-bottom:-.75rem}.-ml-3{margin-left:-.75rem}.-mt-4{margin-top:-1rem}.-mr-4{margin-right:-1rem}.-mb-4{margin-bottom:-1rem}.-ml-4{margin-left:-1rem}.-mt-5{margin-top:-1.25rem}.-mr-5{margin-right:-1.25rem}.-mb-5{margin-bottom:-1.25rem}.-ml-5{margin-left:-1.25rem}.-mt-6{margin-top:-1.5rem}.-mr-6{margin-right:-1.5rem}.-mb-6{margin-bottom:-1.5rem}.-ml-6{margin-left:-1.5rem}.-mt-8{margin-top:-2rem}.-mr-8{margin-right:-2rem}.-mb-8{margin-bottom:-2rem}.-ml-8{margin-left:-2rem}.-mt-10{margin-top:-2.5rem}.-mr-10{margin-right:-2.5rem}.-mb-10{margin-bottom:-2.5rem}.-ml-10{margin-left:-2.5rem}.-mt-12{margin-top:-3rem}.-mr-12{margin-right:-3rem}.-mb-12{margin-bottom:-3rem}.-ml-12{margin-left:-3rem}.-mt-16{margin-top:-4rem}.-mr-16{margin-right:-4rem}.-mb-16{margin-bottom:-4rem}.-ml-16{margin-left:-4rem}.-mt-20{margin-top:-5rem}.-mr-20{margin-right:-5rem}.-mb-20{margin-bottom:-5rem}.-ml-20{margin-left:-5rem}.-mt-24{margin-top:-6rem}.-mr-24{margin-right:-6rem}.-mb-24{margin-bottom:-6rem}.-ml-24{margin-left:-6rem}.-mt-32{margin-top:-8rem}.-mr-32{margin-right:-8rem}.-mb-32{margin-bottom:-8rem}.-ml-32{margin-left:-8rem}.-mt-px{margin-top:-1px}.-mr-px{margin-right:-1px}.-mb-px{margin-bottom:-1px}.-ml-px{margin-left:-1px}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.focus\\:outline-none:focus,.outline-none{outline:0}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.scrolling-touch{-webkit-overflow-scrolling:touch}.scrolling-auto{-webkit-overflow-scrolling:auto}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-16{padding:4rem}.p-20{padding:5rem}.p-24{padding:6rem}.p-32{padding:8rem}.p-50{padding:20rem}.p-px{padding:1px}.py-0{padding-top:0;padding-bottom:0}.px-0{padding-left:0;padding-right:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-8{padding-left:2rem;padding-right:2rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-12{padding-left:3rem;padding-right:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.px-16{padding-left:4rem;padding-right:4rem}.py-20{padding-top:5rem;padding-bottom:5rem}.px-20{padding-left:5rem;padding-right:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.px-24{padding-left:6rem;padding-right:6rem}.py-32{padding-top:8rem;padding-bottom:8rem}.px-32{padding-left:8rem;padding-right:8rem}.py-50{padding-top:20rem;padding-bottom:20rem}.px-50{padding-left:20rem;padding-right:20rem}.py-px{padding-top:1px;padding-bottom:1px}.px-px{padding-left:1px;padding-right:1px}.pt-0{padding-top:0}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.pr-5{padding-right:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-8{padding-top:2rem}.pr-8{padding-right:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pt-10{padding-top:2.5rem}.pr-10{padding-right:2.5rem}.pb-10{padding-bottom:2.5rem}.pl-10{padding-left:2.5rem}.pt-12{padding-top:3rem}.pr-12{padding-right:3rem}.pb-12{padding-bottom:3rem}.pl-12{padding-left:3rem}.pt-16{padding-top:4rem}.pr-16{padding-right:4rem}.pb-16{padding-bottom:4rem}.pl-16{padding-left:4rem}.pt-20{padding-top:5rem}.pr-20{padding-right:5rem}.pb-20{padding-bottom:5rem}.pl-20{padding-left:5rem}.pt-24{padding-top:6rem}.pr-24{padding-right:6rem}.pb-24{padding-bottom:6rem}.pl-24{padding-left:6rem}.pt-32{padding-top:8rem}.pr-32{padding-right:8rem}.pb-32{padding-bottom:8rem}.pl-32{padding-left:8rem}.pt-50{padding-top:20rem}.pr-50{padding-right:20rem}.pb-50{padding-bottom:20rem}.pl-50{padding-left:20rem}.pt-px{padding-top:1px}.pr-px{padding-right:1px}.pb-px{padding-bottom:1px}.pl-px{padding-left:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.pin-none{top:auto;right:auto;bottom:auto;left:auto}.pin{right:0;left:0}.pin,.pin-y{top:0;bottom:0}.pin-x{right:0;left:0}.pin-t{top:0}.pin-r{right:0}.pin-b{bottom:0}.pin-l{left:0}.resize-none{resize:none}.resize-y{resize:vertical}.resize-x{resize:horizontal}.resize{resize:both}.shadow{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.shadow-xs{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.shadow-sm{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.shadow-md{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.shadow-lg{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.shadow-inner{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.shadow-outline{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.shadow-none{-webkit-box-shadow:none;box-shadow:none}.hover\\:shadow:hover{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.hover\\:shadow-xs:hover{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.hover\\:shadow-sm:hover{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.hover\\:shadow-md:hover{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.hover\\:shadow-lg:hover{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.hover\\:shadow-inner:hover{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.hover\\:shadow-outline:hover{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.hover\\:shadow-none:hover{-webkit-box-shadow:none;box-shadow:none}.focus\\:shadow:focus{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.focus\\:shadow-xs:focus{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.focus\\:shadow-sm:focus{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.focus\\:shadow-md:focus{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.focus\\:shadow-lg:focus{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.focus\\:shadow-inner:focus{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.focus\\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.focus\\:shadow-none:focus{-webkit-box-shadow:none;box-shadow:none}.fill-current{fill:currentColor}.stroke-current{stroke:currentColor}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-transparent{color:transparent}.text-black{color:var(--black)}.text-white{color:var(--white)}.text-primary{color:var(--primary)}.text-secondary{color:var(--secondary)}.text-info{color:var(--info)}.text-warning{color:var(--warning)}.text-success{color:var(--success)}.text-danger{color:var(--danger)}.text-sidebar{color:var(--sidebar)}.text-documentation{color:var(--documentation)}.text-navbar{color:var(--navbar)}.text-grey-darkest{color:#3d4852}.text-grey-darker{color:#606f7b}.text-grey-dark{color:#8795a1}.text-grey{color:#b8c2cc}.text-grey-light{color:#dae1e7}.text-grey-lighter{color:#f1f5f8}.text-grey-lightest{color:#f8fafc}.text-red-darkest{color:#3b0d0c}.text-red-darker{color:#621b18}.text-red-dark{color:#cc1f1a}.text-red{color:#e3342f}.text-red-light{color:#ef5753}.text-red-lighter{color:#f9acaa}.text-red-lightest{color:#fcebea}.text-orange-darkest{color:#462a16}.text-orange-darker{color:#613b1f}.text-orange-dark{color:#de751f}.text-orange{color:#f6993f}.text-orange-light{color:#faad63}.text-orange-lighter{color:#fcd9b6}.text-orange-lightest{color:#fff5eb}.text-yellow-darkest{color:#453411}.text-yellow-darker{color:#684f1d}.text-yellow-dark{color:#f2d024}.text-yellow{color:#ffed4a}.text-yellow-light{color:#fff382}.text-yellow-lighter{color:#fff9c2}.text-yellow-lightest{color:#fcfbeb}.text-green-darkest{color:#0f2f21}.text-green-darker{color:#1a4731}.text-green-dark{color:#1f9d55}.text-green{color:#38c172}.text-green-light{color:#51d88a}.text-green-lighter{color:#a2f5bf}.text-green-lightest{color:#e3fcec}.text-teal-darkest{color:#0d3331}.text-teal-darker{color:#20504f}.text-teal-dark{color:#38a89d}.text-teal{color:#4dc0b5}.text-teal-light{color:#64d5ca}.text-teal-lighter{color:#a0f0ed}.text-teal-lightest{color:#e8fffe}.text-blue-darkest{color:#12283a}.text-blue-darker{color:#1c3d5a}.text-blue-dark{color:#2779bd}.text-blue{color:#3490dc}.text-blue-light{color:#6cb2eb}.text-blue-lighter{color:#bcdefa}.text-blue-lightest{color:#eff8ff}.text-indigo-darkest{color:#191e38}.text-indigo-darker{color:#2f365f}.text-indigo-dark{color:#5661b3}.text-indigo{color:#6574cd}.text-indigo-light{color:#7886d7}.text-indigo-lighter{color:#b2b7ff}.text-indigo-lightest{color:#e6e8ff}.text-purple-darkest{color:#21183c}.text-purple-darker{color:#382b5f}.text-purple-dark{color:#794acf}.text-purple{color:#9561e2}.text-purple-light{color:#a779e9}.text-purple-lighter{color:#d6bbfc}.text-purple-lightest{color:#f3ebff}.text-pink-darkest{color:#451225}.text-pink-darker{color:#6f213f}.text-pink-dark{color:#eb5286}.text-pink{color:#f66d9b}.text-pink-light{color:#fa7ea8}.text-pink-lighter{color:#ffbbca}.text-pink-lightest{color:#ffebef}.hover\\:text-transparent:hover{color:transparent}.hover\\:text-black:hover{color:var(--black)}.hover\\:text-white:hover{color:var(--white)}.hover\\:text-primary:hover{color:var(--primary)}.hover\\:text-secondary:hover{color:var(--secondary)}.hover\\:text-info:hover{color:var(--info)}.hover\\:text-warning:hover{color:var(--warning)}.hover\\:text-success:hover{color:var(--success)}.hover\\:text-danger:hover{color:var(--danger)}.hover\\:text-sidebar:hover{color:var(--sidebar)}.hover\\:text-documentation:hover{color:var(--documentation)}.hover\\:text-navbar:hover{color:var(--navbar)}.hover\\:text-grey-darkest:hover{color:#3d4852}.hover\\:text-grey-darker:hover{color:#606f7b}.hover\\:text-grey-dark:hover{color:#8795a1}.hover\\:text-grey:hover{color:#b8c2cc}.hover\\:text-grey-light:hover{color:#dae1e7}.hover\\:text-grey-lighter:hover{color:#f1f5f8}.hover\\:text-grey-lightest:hover{color:#f8fafc}.hover\\:text-red-darkest:hover{color:#3b0d0c}.hover\\:text-red-darker:hover{color:#621b18}.hover\\:text-red-dark:hover{color:#cc1f1a}.hover\\:text-red:hover{color:#e3342f}.hover\\:text-red-light:hover{color:#ef5753}.hover\\:text-red-lighter:hover{color:#f9acaa}.hover\\:text-red-lightest:hover{color:#fcebea}.hover\\:text-orange-darkest:hover{color:#462a16}.hover\\:text-orange-darker:hover{color:#613b1f}.hover\\:text-orange-dark:hover{color:#de751f}.hover\\:text-orange:hover{color:#f6993f}.hover\\:text-orange-light:hover{color:#faad63}.hover\\:text-orange-lighter:hover{color:#fcd9b6}.hover\\:text-orange-lightest:hover{color:#fff5eb}.hover\\:text-yellow-darkest:hover{color:#453411}.hover\\:text-yellow-darker:hover{color:#684f1d}.hover\\:text-yellow-dark:hover{color:#f2d024}.hover\\:text-yellow:hover{color:#ffed4a}.hover\\:text-yellow-light:hover{color:#fff382}.hover\\:text-yellow-lighter:hover{color:#fff9c2}.hover\\:text-yellow-lightest:hover{color:#fcfbeb}.hover\\:text-green-darkest:hover{color:#0f2f21}.hover\\:text-green-darker:hover{color:#1a4731}.hover\\:text-green-dark:hover{color:#1f9d55}.hover\\:text-green:hover{color:#38c172}.hover\\:text-green-light:hover{color:#51d88a}.hover\\:text-green-lighter:hover{color:#a2f5bf}.hover\\:text-green-lightest:hover{color:#e3fcec}.hover\\:text-teal-darkest:hover{color:#0d3331}.hover\\:text-teal-darker:hover{color:#20504f}.hover\\:text-teal-dark:hover{color:#38a89d}.hover\\:text-teal:hover{color:#4dc0b5}.hover\\:text-teal-light:hover{color:#64d5ca}.hover\\:text-teal-lighter:hover{color:#a0f0ed}.hover\\:text-teal-lightest:hover{color:#e8fffe}.hover\\:text-blue-darkest:hover{color:#12283a}.hover\\:text-blue-darker:hover{color:#1c3d5a}.hover\\:text-blue-dark:hover{color:#2779bd}.hover\\:text-blue:hover{color:#3490dc}.hover\\:text-blue-light:hover{color:#6cb2eb}.hover\\:text-blue-lighter:hover{color:#bcdefa}.hover\\:text-blue-lightest:hover{color:#eff8ff}.hover\\:text-indigo-darkest:hover{color:#191e38}.hover\\:text-indigo-darker:hover{color:#2f365f}.hover\\:text-indigo-dark:hover{color:#5661b3}.hover\\:text-indigo:hover{color:#6574cd}.hover\\:text-indigo-light:hover{color:#7886d7}.hover\\:text-indigo-lighter:hover{color:#b2b7ff}.hover\\:text-indigo-lightest:hover{color:#e6e8ff}.hover\\:text-purple-darkest:hover{color:#21183c}.hover\\:text-purple-darker:hover{color:#382b5f}.hover\\:text-purple-dark:hover{color:#794acf}.hover\\:text-purple:hover{color:#9561e2}.hover\\:text-purple-light:hover{color:#a779e9}.hover\\:text-purple-lighter:hover{color:#d6bbfc}.hover\\:text-purple-lightest:hover{color:#f3ebff}.hover\\:text-pink-darkest:hover{color:#451225}.hover\\:text-pink-darker:hover{color:#6f213f}.hover\\:text-pink-dark:hover{color:#eb5286}.hover\\:text-pink:hover{color:#f66d9b}.hover\\:text-pink-light:hover{color:#fa7ea8}.hover\\:text-pink-lighter:hover{color:#ffbbca}.hover\\:text-pink-lightest:hover{color:#ffebef}.focus\\:text-transparent:focus{color:transparent}.focus\\:text-black:focus{color:var(--black)}.focus\\:text-white:focus{color:var(--white)}.focus\\:text-primary:focus{color:var(--primary)}.focus\\:text-secondary:focus{color:var(--secondary)}.focus\\:text-info:focus{color:var(--info)}.focus\\:text-warning:focus{color:var(--warning)}.focus\\:text-success:focus{color:var(--success)}.focus\\:text-danger:focus{color:var(--danger)}.focus\\:text-sidebar:focus{color:var(--sidebar)}.focus\\:text-documentation:focus{color:var(--documentation)}.focus\\:text-navbar:focus{color:var(--navbar)}.focus\\:text-grey-darkest:focus{color:#3d4852}.focus\\:text-grey-darker:focus{color:#606f7b}.focus\\:text-grey-dark:focus{color:#8795a1}.focus\\:text-grey:focus{color:#b8c2cc}.focus\\:text-grey-light:focus{color:#dae1e7}.focus\\:text-grey-lighter:focus{color:#f1f5f8}.focus\\:text-grey-lightest:focus{color:#f8fafc}.focus\\:text-red-darkest:focus{color:#3b0d0c}.focus\\:text-red-darker:focus{color:#621b18}.focus\\:text-red-dark:focus{color:#cc1f1a}.focus\\:text-red:focus{color:#e3342f}.focus\\:text-red-light:focus{color:#ef5753}.focus\\:text-red-lighter:focus{color:#f9acaa}.focus\\:text-red-lightest:focus{color:#fcebea}.focus\\:text-orange-darkest:focus{color:#462a16}.focus\\:text-orange-darker:focus{color:#613b1f}.focus\\:text-orange-dark:focus{color:#de751f}.focus\\:text-orange:focus{color:#f6993f}.focus\\:text-orange-light:focus{color:#faad63}.focus\\:text-orange-lighter:focus{color:#fcd9b6}.focus\\:text-orange-lightest:focus{color:#fff5eb}.focus\\:text-yellow-darkest:focus{color:#453411}.focus\\:text-yellow-darker:focus{color:#684f1d}.focus\\:text-yellow-dark:focus{color:#f2d024}.focus\\:text-yellow:focus{color:#ffed4a}.focus\\:text-yellow-light:focus{color:#fff382}.focus\\:text-yellow-lighter:focus{color:#fff9c2}.focus\\:text-yellow-lightest:focus{color:#fcfbeb}.focus\\:text-green-darkest:focus{color:#0f2f21}.focus\\:text-green-darker:focus{color:#1a4731}.focus\\:text-green-dark:focus{color:#1f9d55}.focus\\:text-green:focus{color:#38c172}.focus\\:text-green-light:focus{color:#51d88a}.focus\\:text-green-lighter:focus{color:#a2f5bf}.focus\\:text-green-lightest:focus{color:#e3fcec}.focus\\:text-teal-darkest:focus{color:#0d3331}.focus\\:text-teal-darker:focus{color:#20504f}.focus\\:text-teal-dark:focus{color:#38a89d}.focus\\:text-teal:focus{color:#4dc0b5}.focus\\:text-teal-light:focus{color:#64d5ca}.focus\\:text-teal-lighter:focus{color:#a0f0ed}.focus\\:text-teal-lightest:focus{color:#e8fffe}.focus\\:text-blue-darkest:focus{color:#12283a}.focus\\:text-blue-darker:focus{color:#1c3d5a}.focus\\:text-blue-dark:focus{color:#2779bd}.focus\\:text-blue:focus{color:#3490dc}.focus\\:text-blue-light:focus{color:#6cb2eb}.focus\\:text-blue-lighter:focus{color:#bcdefa}.focus\\:text-blue-lightest:focus{color:#eff8ff}.focus\\:text-indigo-darkest:focus{color:#191e38}.focus\\:text-indigo-darker:focus{color:#2f365f}.focus\\:text-indigo-dark:focus{color:#5661b3}.focus\\:text-indigo:focus{color:#6574cd}.focus\\:text-indigo-light:focus{color:#7886d7}.focus\\:text-indigo-lighter:focus{color:#b2b7ff}.focus\\:text-indigo-lightest:focus{color:#e6e8ff}.focus\\:text-purple-darkest:focus{color:#21183c}.focus\\:text-purple-darker:focus{color:#382b5f}.focus\\:text-purple-dark:focus{color:#794acf}.focus\\:text-purple:focus{color:#9561e2}.focus\\:text-purple-light:focus{color:#a779e9}.focus\\:text-purple-lighter:focus{color:#d6bbfc}.focus\\:text-purple-lightest:focus{color:#f3ebff}.focus\\:text-pink-darkest:focus{color:#451225}.focus\\:text-pink-darker:focus{color:#6f213f}.focus\\:text-pink-dark:focus{color:#eb5286}.focus\\:text-pink:focus{color:#f66d9b}.focus\\:text-pink-light:focus{color:#fa7ea8}.focus\\:text-pink-lighter:focus{color:#ffbbca}.focus\\:text-pink-lightest:focus{color:#ffebef}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.text-4xl{font-size:2.25rem}.text-5xl{font-size:3rem}.italic{font-style:italic}.roman{font-style:normal}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.no-underline{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.hover\\:italic:hover{font-style:italic}.hover\\:roman:hover{font-style:normal}.hover\\:uppercase:hover{text-transform:uppercase}.hover\\:lowercase:hover{text-transform:lowercase}.hover\\:capitalize:hover{text-transform:capitalize}.hover\\:normal-case:hover{text-transform:none}.hover\\:underline:hover{text-decoration:underline}.hover\\:line-through:hover{text-decoration:line-through}.hover\\:no-underline:hover{text-decoration:none}.hover\\:antialiased:hover{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.hover\\:subpixel-antialiased:hover{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.focus\\:italic:focus{font-style:italic}.focus\\:roman:focus{font-style:normal}.focus\\:uppercase:focus{text-transform:uppercase}.focus\\:lowercase:focus{text-transform:lowercase}.focus\\:capitalize:focus{text-transform:capitalize}.focus\\:normal-case:focus{text-transform:none}.focus\\:underline:focus{text-decoration:underline}.focus\\:line-through:focus{text-decoration:line-through}.focus\\:no-underline:focus{text-decoration:none}.focus\\:antialiased:focus{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.focus\\:subpixel-antialiased:focus{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.tracking-tight{letter-spacing:-.05em}.tracking-normal{letter-spacing:0}.tracking-wide{letter-spacing:.05em}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-top{vertical-align:text-top}.align-text-bottom{vertical-align:text-bottom}.visible{visibility:visible}.invisible{visibility:hidden}.whitespace-normal{white-space:normal}.whitespace-no-wrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{word-wrap:break-word}.break-normal{word-wrap:normal}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-24{width:6rem}.w-32{width:8rem}.w-48{width:12rem}.w-64{width:16rem}.w-auto{width:auto}.w-px{width:1px}.w-1\\/2{width:50%}.w-1\\/3{width:33.33333%}.w-2\\/3{width:66.66667%}.w-1\\/4{width:25%}.w-3\\/4{width:75%}.w-1\\/5{width:20%}.w-2\\/5{width:40%}.w-3\\/5{width:60%}.w-4\\/5{width:80%}.w-1\\/6{width:16.66667%}.w-5\\/6{width:83.33333%}.w-full{width:100%}.w-screen{width:100vw}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}@media (min-width:576px){.sm\\:list-reset{list-style:none;padding:0}.sm\\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.sm\\:bg-fixed{background-attachment:fixed}.sm\\:bg-local{background-attachment:local}.sm\\:bg-scroll{background-attachment:scroll}.sm\\:bg-transparent{background-color:transparent}.sm\\:bg-black{background-color:var(--black)}.sm\\:bg-white{background-color:var(--white)}.sm\\:bg-primary{background-color:var(--primary)}.sm\\:bg-secondary{background-color:var(--secondary)}.sm\\:bg-info{background-color:var(--info)}.sm\\:bg-warning{background-color:var(--warning)}.sm\\:bg-success{background-color:var(--success)}.sm\\:bg-danger{background-color:var(--danger)}.sm\\:bg-sidebar{background-color:var(--sidebar)}.sm\\:bg-documentation{background-color:var(--documentation)}.sm\\:bg-navbar{background-color:var(--navbar)}.sm\\:bg-grey-darkest{background-color:#3d4852}.sm\\:bg-grey-darker{background-color:#606f7b}.sm\\:bg-grey-dark{background-color:#8795a1}.sm\\:bg-grey{background-color:#b8c2cc}.sm\\:bg-grey-light{background-color:#dae1e7}.sm\\:bg-grey-lighter{background-color:#f1f5f8}.sm\\:bg-grey-lightest{background-color:#f8fafc}.sm\\:bg-red-darkest{background-color:#3b0d0c}.sm\\:bg-red-darker{background-color:#621b18}.sm\\:bg-red-dark{background-color:#cc1f1a}.sm\\:bg-red{background-color:#e3342f}.sm\\:bg-red-light{background-color:#ef5753}.sm\\:bg-red-lighter{background-color:#f9acaa}.sm\\:bg-red-lightest{background-color:#fcebea}.sm\\:bg-orange-darkest{background-color:#462a16}.sm\\:bg-orange-darker{background-color:#613b1f}.sm\\:bg-orange-dark{background-color:#de751f}.sm\\:bg-orange{background-color:#f6993f}.sm\\:bg-orange-light{background-color:#faad63}.sm\\:bg-orange-lighter{background-color:#fcd9b6}.sm\\:bg-orange-lightest{background-color:#fff5eb}.sm\\:bg-yellow-darkest{background-color:#453411}.sm\\:bg-yellow-darker{background-color:#684f1d}.sm\\:bg-yellow-dark{background-color:#f2d024}.sm\\:bg-yellow{background-color:#ffed4a}.sm\\:bg-yellow-light{background-color:#fff382}.sm\\:bg-yellow-lighter{background-color:#fff9c2}.sm\\:bg-yellow-lightest{background-color:#fcfbeb}.sm\\:bg-green-darkest{background-color:#0f2f21}.sm\\:bg-green-darker{background-color:#1a4731}.sm\\:bg-green-dark{background-color:#1f9d55}.sm\\:bg-green{background-color:#38c172}.sm\\:bg-green-light{background-color:#51d88a}.sm\\:bg-green-lighter{background-color:#a2f5bf}.sm\\:bg-green-lightest{background-color:#e3fcec}.sm\\:bg-teal-darkest{background-color:#0d3331}.sm\\:bg-teal-darker{background-color:#20504f}.sm\\:bg-teal-dark{background-color:#38a89d}.sm\\:bg-teal{background-color:#4dc0b5}.sm\\:bg-teal-light{background-color:#64d5ca}.sm\\:bg-teal-lighter{background-color:#a0f0ed}.sm\\:bg-teal-lightest{background-color:#e8fffe}.sm\\:bg-blue-darkest{background-color:#12283a}.sm\\:bg-blue-darker{background-color:#1c3d5a}.sm\\:bg-blue-dark{background-color:#2779bd}.sm\\:bg-blue{background-color:#3490dc}.sm\\:bg-blue-light{background-color:#6cb2eb}.sm\\:bg-blue-lighter{background-color:#bcdefa}.sm\\:bg-blue-lightest{background-color:#eff8ff}.sm\\:bg-indigo-darkest{background-color:#191e38}.sm\\:bg-indigo-darker{background-color:#2f365f}.sm\\:bg-indigo-dark{background-color:#5661b3}.sm\\:bg-indigo{background-color:#6574cd}.sm\\:bg-indigo-light{background-color:#7886d7}.sm\\:bg-indigo-lighter{background-color:#b2b7ff}.sm\\:bg-indigo-lightest{background-color:#e6e8ff}.sm\\:bg-purple-darkest{background-color:#21183c}.sm\\:bg-purple-darker{background-color:#382b5f}.sm\\:bg-purple-dark{background-color:#794acf}.sm\\:bg-purple{background-color:#9561e2}.sm\\:bg-purple-light{background-color:#a779e9}.sm\\:bg-purple-lighter{background-color:#d6bbfc}.sm\\:bg-purple-lightest{background-color:#f3ebff}.sm\\:bg-pink-darkest{background-color:#451225}.sm\\:bg-pink-darker{background-color:#6f213f}.sm\\:bg-pink-dark{background-color:#eb5286}.sm\\:bg-pink{background-color:#f66d9b}.sm\\:bg-pink-light{background-color:#fa7ea8}.sm\\:bg-pink-lighter{background-color:#ffbbca}.sm\\:bg-pink-lightest{background-color:#ffebef}.sm\\:hover\\:bg-transparent:hover{background-color:transparent}.sm\\:hover\\:bg-black:hover{background-color:var(--black)}.sm\\:hover\\:bg-white:hover{background-color:var(--white)}.sm\\:hover\\:bg-primary:hover{background-color:var(--primary)}.sm\\:hover\\:bg-secondary:hover{background-color:var(--secondary)}.sm\\:hover\\:bg-info:hover{background-color:var(--info)}.sm\\:hover\\:bg-warning:hover{background-color:var(--warning)}.sm\\:hover\\:bg-success:hover{background-color:var(--success)}.sm\\:hover\\:bg-danger:hover{background-color:var(--danger)}.sm\\:hover\\:bg-sidebar:hover{background-color:var(--sidebar)}.sm\\:hover\\:bg-documentation:hover{background-color:var(--documentation)}.sm\\:hover\\:bg-navbar:hover{background-color:var(--navbar)}.sm\\:hover\\:bg-grey-darkest:hover{background-color:#3d4852}.sm\\:hover\\:bg-grey-darker:hover{background-color:#606f7b}.sm\\:hover\\:bg-grey-dark:hover{background-color:#8795a1}.sm\\:hover\\:bg-grey:hover{background-color:#b8c2cc}.sm\\:hover\\:bg-grey-light:hover{background-color:#dae1e7}.sm\\:hover\\:bg-grey-lighter:hover{background-color:#f1f5f8}.sm\\:hover\\:bg-grey-lightest:hover{background-color:#f8fafc}.sm\\:hover\\:bg-red-darkest:hover{background-color:#3b0d0c}.sm\\:hover\\:bg-red-darker:hover{background-color:#621b18}.sm\\:hover\\:bg-red-dark:hover{background-color:#cc1f1a}.sm\\:hover\\:bg-red:hover{background-color:#e3342f}.sm\\:hover\\:bg-red-light:hover{background-color:#ef5753}.sm\\:hover\\:bg-red-lighter:hover{background-color:#f9acaa}.sm\\:hover\\:bg-red-lightest:hover{background-color:#fcebea}.sm\\:hover\\:bg-orange-darkest:hover{background-color:#462a16}.sm\\:hover\\:bg-orange-darker:hover{background-color:#613b1f}.sm\\:hover\\:bg-orange-dark:hover{background-color:#de751f}.sm\\:hover\\:bg-orange:hover{background-color:#f6993f}.sm\\:hover\\:bg-orange-light:hover{background-color:#faad63}.sm\\:hover\\:bg-orange-lighter:hover{background-color:#fcd9b6}.sm\\:hover\\:bg-orange-lightest:hover{background-color:#fff5eb}.sm\\:hover\\:bg-yellow-darkest:hover{background-color:#453411}.sm\\:hover\\:bg-yellow-darker:hover{background-color:#684f1d}.sm\\:hover\\:bg-yellow-dark:hover{background-color:#f2d024}.sm\\:hover\\:bg-yellow:hover{background-color:#ffed4a}.sm\\:hover\\:bg-yellow-light:hover{background-color:#fff382}.sm\\:hover\\:bg-yellow-lighter:hover{background-color:#fff9c2}.sm\\:hover\\:bg-yellow-lightest:hover{background-color:#fcfbeb}.sm\\:hover\\:bg-green-darkest:hover{background-color:#0f2f21}.sm\\:hover\\:bg-green-darker:hover{background-color:#1a4731}.sm\\:hover\\:bg-green-dark:hover{background-color:#1f9d55}.sm\\:hover\\:bg-green:hover{background-color:#38c172}.sm\\:hover\\:bg-green-light:hover{background-color:#51d88a}.sm\\:hover\\:bg-green-lighter:hover{background-color:#a2f5bf}.sm\\:hover\\:bg-green-lightest:hover{background-color:#e3fcec}.sm\\:hover\\:bg-teal-darkest:hover{background-color:#0d3331}.sm\\:hover\\:bg-teal-darker:hover{background-color:#20504f}.sm\\:hover\\:bg-teal-dark:hover{background-color:#38a89d}.sm\\:hover\\:bg-teal:hover{background-color:#4dc0b5}.sm\\:hover\\:bg-teal-light:hover{background-color:#64d5ca}.sm\\:hover\\:bg-teal-lighter:hover{background-color:#a0f0ed}.sm\\:hover\\:bg-teal-lightest:hover{background-color:#e8fffe}.sm\\:hover\\:bg-blue-darkest:hover{background-color:#12283a}.sm\\:hover\\:bg-blue-darker:hover{background-color:#1c3d5a}.sm\\:hover\\:bg-blue-dark:hover{background-color:#2779bd}.sm\\:hover\\:bg-blue:hover{background-color:#3490dc}.sm\\:hover\\:bg-blue-light:hover{background-color:#6cb2eb}.sm\\:hover\\:bg-blue-lighter:hover{background-color:#bcdefa}.sm\\:hover\\:bg-blue-lightest:hover{background-color:#eff8ff}.sm\\:hover\\:bg-indigo-darkest:hover{background-color:#191e38}.sm\\:hover\\:bg-indigo-darker:hover{background-color:#2f365f}.sm\\:hover\\:bg-indigo-dark:hover{background-color:#5661b3}.sm\\:hover\\:bg-indigo:hover{background-color:#6574cd}.sm\\:hover\\:bg-indigo-light:hover{background-color:#7886d7}.sm\\:hover\\:bg-indigo-lighter:hover{background-color:#b2b7ff}.sm\\:hover\\:bg-indigo-lightest:hover{background-color:#e6e8ff}.sm\\:hover\\:bg-purple-darkest:hover{background-color:#21183c}.sm\\:hover\\:bg-purple-darker:hover{background-color:#382b5f}.sm\\:hover\\:bg-purple-dark:hover{background-color:#794acf}.sm\\:hover\\:bg-purple:hover{background-color:#9561e2}.sm\\:hover\\:bg-purple-light:hover{background-color:#a779e9}.sm\\:hover\\:bg-purple-lighter:hover{background-color:#d6bbfc}.sm\\:hover\\:bg-purple-lightest:hover{background-color:#f3ebff}.sm\\:hover\\:bg-pink-darkest:hover{background-color:#451225}.sm\\:hover\\:bg-pink-darker:hover{background-color:#6f213f}.sm\\:hover\\:bg-pink-dark:hover{background-color:#eb5286}.sm\\:hover\\:bg-pink:hover{background-color:#f66d9b}.sm\\:hover\\:bg-pink-light:hover{background-color:#fa7ea8}.sm\\:hover\\:bg-pink-lighter:hover{background-color:#ffbbca}.sm\\:hover\\:bg-pink-lightest:hover{background-color:#ffebef}.sm\\:focus\\:bg-transparent:focus{background-color:transparent}.sm\\:focus\\:bg-black:focus{background-color:var(--black)}.sm\\:focus\\:bg-white:focus{background-color:var(--white)}.sm\\:focus\\:bg-primary:focus{background-color:var(--primary)}.sm\\:focus\\:bg-secondary:focus{background-color:var(--secondary)}.sm\\:focus\\:bg-info:focus{background-color:var(--info)}.sm\\:focus\\:bg-warning:focus{background-color:var(--warning)}.sm\\:focus\\:bg-success:focus{background-color:var(--success)}.sm\\:focus\\:bg-danger:focus{background-color:var(--danger)}.sm\\:focus\\:bg-sidebar:focus{background-color:var(--sidebar)}.sm\\:focus\\:bg-documentation:focus{background-color:var(--documentation)}.sm\\:focus\\:bg-navbar:focus{background-color:var(--navbar)}.sm\\:focus\\:bg-grey-darkest:focus{background-color:#3d4852}.sm\\:focus\\:bg-grey-darker:focus{background-color:#606f7b}.sm\\:focus\\:bg-grey-dark:focus{background-color:#8795a1}.sm\\:focus\\:bg-grey:focus{background-color:#b8c2cc}.sm\\:focus\\:bg-grey-light:focus{background-color:#dae1e7}.sm\\:focus\\:bg-grey-lighter:focus{background-color:#f1f5f8}.sm\\:focus\\:bg-grey-lightest:focus{background-color:#f8fafc}.sm\\:focus\\:bg-red-darkest:focus{background-color:#3b0d0c}.sm\\:focus\\:bg-red-darker:focus{background-color:#621b18}.sm\\:focus\\:bg-red-dark:focus{background-color:#cc1f1a}.sm\\:focus\\:bg-red:focus{background-color:#e3342f}.sm\\:focus\\:bg-red-light:focus{background-color:#ef5753}.sm\\:focus\\:bg-red-lighter:focus{background-color:#f9acaa}.sm\\:focus\\:bg-red-lightest:focus{background-color:#fcebea}.sm\\:focus\\:bg-orange-darkest:focus{background-color:#462a16}.sm\\:focus\\:bg-orange-darker:focus{background-color:#613b1f}.sm\\:focus\\:bg-orange-dark:focus{background-color:#de751f}.sm\\:focus\\:bg-orange:focus{background-color:#f6993f}.sm\\:focus\\:bg-orange-light:focus{background-color:#faad63}.sm\\:focus\\:bg-orange-lighter:focus{background-color:#fcd9b6}.sm\\:focus\\:bg-orange-lightest:focus{background-color:#fff5eb}.sm\\:focus\\:bg-yellow-darkest:focus{background-color:#453411}.sm\\:focus\\:bg-yellow-darker:focus{background-color:#684f1d}.sm\\:focus\\:bg-yellow-dark:focus{background-color:#f2d024}.sm\\:focus\\:bg-yellow:focus{background-color:#ffed4a}.sm\\:focus\\:bg-yellow-light:focus{background-color:#fff382}.sm\\:focus\\:bg-yellow-lighter:focus{background-color:#fff9c2}.sm\\:focus\\:bg-yellow-lightest:focus{background-color:#fcfbeb}.sm\\:focus\\:bg-green-darkest:focus{background-color:#0f2f21}.sm\\:focus\\:bg-green-darker:focus{background-color:#1a4731}.sm\\:focus\\:bg-green-dark:focus{background-color:#1f9d55}.sm\\:focus\\:bg-green:focus{background-color:#38c172}.sm\\:focus\\:bg-green-light:focus{background-color:#51d88a}.sm\\:focus\\:bg-green-lighter:focus{background-color:#a2f5bf}.sm\\:focus\\:bg-green-lightest:focus{background-color:#e3fcec}.sm\\:focus\\:bg-teal-darkest:focus{background-color:#0d3331}.sm\\:focus\\:bg-teal-darker:focus{background-color:#20504f}.sm\\:focus\\:bg-teal-dark:focus{background-color:#38a89d}.sm\\:focus\\:bg-teal:focus{background-color:#4dc0b5}.sm\\:focus\\:bg-teal-light:focus{background-color:#64d5ca}.sm\\:focus\\:bg-teal-lighter:focus{background-color:#a0f0ed}.sm\\:focus\\:bg-teal-lightest:focus{background-color:#e8fffe}.sm\\:focus\\:bg-blue-darkest:focus{background-color:#12283a}.sm\\:focus\\:bg-blue-darker:focus{background-color:#1c3d5a}.sm\\:focus\\:bg-blue-dark:focus{background-color:#2779bd}.sm\\:focus\\:bg-blue:focus{background-color:#3490dc}.sm\\:focus\\:bg-blue-light:focus{background-color:#6cb2eb}.sm\\:focus\\:bg-blue-lighter:focus{background-color:#bcdefa}.sm\\:focus\\:bg-blue-lightest:focus{background-color:#eff8ff}.sm\\:focus\\:bg-indigo-darkest:focus{background-color:#191e38}.sm\\:focus\\:bg-indigo-darker:focus{background-color:#2f365f}.sm\\:focus\\:bg-indigo-dark:focus{background-color:#5661b3}.sm\\:focus\\:bg-indigo:focus{background-color:#6574cd}.sm\\:focus\\:bg-indigo-light:focus{background-color:#7886d7}.sm\\:focus\\:bg-indigo-lighter:focus{background-color:#b2b7ff}.sm\\:focus\\:bg-indigo-lightest:focus{background-color:#e6e8ff}.sm\\:focus\\:bg-purple-darkest:focus{background-color:#21183c}.sm\\:focus\\:bg-purple-darker:focus{background-color:#382b5f}.sm\\:focus\\:bg-purple-dark:focus{background-color:#794acf}.sm\\:focus\\:bg-purple:focus{background-color:#9561e2}.sm\\:focus\\:bg-purple-light:focus{background-color:#a779e9}.sm\\:focus\\:bg-purple-lighter:focus{background-color:#d6bbfc}.sm\\:focus\\:bg-purple-lightest:focus{background-color:#f3ebff}.sm\\:focus\\:bg-pink-darkest:focus{background-color:#451225}.sm\\:focus\\:bg-pink-darker:focus{background-color:#6f213f}.sm\\:focus\\:bg-pink-dark:focus{background-color:#eb5286}.sm\\:focus\\:bg-pink:focus{background-color:#f66d9b}.sm\\:focus\\:bg-pink-light:focus{background-color:#fa7ea8}.sm\\:focus\\:bg-pink-lighter:focus{background-color:#ffbbca}.sm\\:focus\\:bg-pink-lightest:focus{background-color:#ffebef}.sm\\:bg-bottom{background-position:bottom}.sm\\:bg-center{background-position:50%}.sm\\:bg-left{background-position:0}.sm\\:bg-left-bottom{background-position:0 100%}.sm\\:bg-left-top{background-position:0 0}.sm\\:bg-right{background-position:100%}.sm\\:bg-right-bottom{background-position:100% 100%}.sm\\:bg-right-top{background-position:100% 0}.sm\\:bg-top{background-position:top}.sm\\:bg-repeat{background-repeat:repeat}.sm\\:bg-no-repeat{background-repeat:no-repeat}.sm\\:bg-repeat-x{background-repeat:repeat-x}.sm\\:bg-repeat-y{background-repeat:repeat-y}.sm\\:bg-auto{background-size:auto}.sm\\:bg-cover{background-size:cover}.sm\\:bg-contain{background-size:contain}.sm\\:border-transparent{border-color:transparent}.sm\\:border-black{border-color:var(--black)}.sm\\:border-white{border-color:var(--white)}.sm\\:border-primary{border-color:var(--primary)}.sm\\:border-secondary{border-color:var(--secondary)}.sm\\:border-info{border-color:var(--info)}.sm\\:border-warning{border-color:var(--warning)}.sm\\:border-success{border-color:var(--success)}.sm\\:border-danger{border-color:var(--danger)}.sm\\:border-sidebar{border-color:var(--sidebar)}.sm\\:border-documentation{border-color:var(--documentation)}.sm\\:border-navbar{border-color:var(--navbar)}.sm\\:border-grey-darkest{border-color:#3d4852}.sm\\:border-grey-darker{border-color:#606f7b}.sm\\:border-grey-dark{border-color:#8795a1}.sm\\:border-grey{border-color:#b8c2cc}.sm\\:border-grey-light{border-color:#dae1e7}.sm\\:border-grey-lighter{border-color:#f1f5f8}.sm\\:border-grey-lightest{border-color:#f8fafc}.sm\\:border-red-darkest{border-color:#3b0d0c}.sm\\:border-red-darker{border-color:#621b18}.sm\\:border-red-dark{border-color:#cc1f1a}.sm\\:border-red{border-color:#e3342f}.sm\\:border-red-light{border-color:#ef5753}.sm\\:border-red-lighter{border-color:#f9acaa}.sm\\:border-red-lightest{border-color:#fcebea}.sm\\:border-orange-darkest{border-color:#462a16}.sm\\:border-orange-darker{border-color:#613b1f}.sm\\:border-orange-dark{border-color:#de751f}.sm\\:border-orange{border-color:#f6993f}.sm\\:border-orange-light{border-color:#faad63}.sm\\:border-orange-lighter{border-color:#fcd9b6}.sm\\:border-orange-lightest{border-color:#fff5eb}.sm\\:border-yellow-darkest{border-color:#453411}.sm\\:border-yellow-darker{border-color:#684f1d}.sm\\:border-yellow-dark{border-color:#f2d024}.sm\\:border-yellow{border-color:#ffed4a}.sm\\:border-yellow-light{border-color:#fff382}.sm\\:border-yellow-lighter{border-color:#fff9c2}.sm\\:border-yellow-lightest{border-color:#fcfbeb}.sm\\:border-green-darkest{border-color:#0f2f21}.sm\\:border-green-darker{border-color:#1a4731}.sm\\:border-green-dark{border-color:#1f9d55}.sm\\:border-green{border-color:#38c172}.sm\\:border-green-light{border-color:#51d88a}.sm\\:border-green-lighter{border-color:#a2f5bf}.sm\\:border-green-lightest{border-color:#e3fcec}.sm\\:border-teal-darkest{border-color:#0d3331}.sm\\:border-teal-darker{border-color:#20504f}.sm\\:border-teal-dark{border-color:#38a89d}.sm\\:border-teal{border-color:#4dc0b5}.sm\\:border-teal-light{border-color:#64d5ca}.sm\\:border-teal-lighter{border-color:#a0f0ed}.sm\\:border-teal-lightest{border-color:#e8fffe}.sm\\:border-blue-darkest{border-color:#12283a}.sm\\:border-blue-darker{border-color:#1c3d5a}.sm\\:border-blue-dark{border-color:#2779bd}.sm\\:border-blue{border-color:#3490dc}.sm\\:border-blue-light{border-color:#6cb2eb}.sm\\:border-blue-lighter{border-color:#bcdefa}.sm\\:border-blue-lightest{border-color:#eff8ff}.sm\\:border-indigo-darkest{border-color:#191e38}.sm\\:border-indigo-darker{border-color:#2f365f}.sm\\:border-indigo-dark{border-color:#5661b3}.sm\\:border-indigo{border-color:#6574cd}.sm\\:border-indigo-light{border-color:#7886d7}.sm\\:border-indigo-lighter{border-color:#b2b7ff}.sm\\:border-indigo-lightest{border-color:#e6e8ff}.sm\\:border-purple-darkest{border-color:#21183c}.sm\\:border-purple-darker{border-color:#382b5f}.sm\\:border-purple-dark{border-color:#794acf}.sm\\:border-purple{border-color:#9561e2}.sm\\:border-purple-light{border-color:#a779e9}.sm\\:border-purple-lighter{border-color:#d6bbfc}.sm\\:border-purple-lightest{border-color:#f3ebff}.sm\\:border-pink-darkest{border-color:#451225}.sm\\:border-pink-darker{border-color:#6f213f}.sm\\:border-pink-dark{border-color:#eb5286}.sm\\:border-pink{border-color:#f66d9b}.sm\\:border-pink-light{border-color:#fa7ea8}.sm\\:border-pink-lighter{border-color:#ffbbca}.sm\\:border-pink-lightest{border-color:#ffebef}.sm\\:hover\\:border-transparent:hover{border-color:transparent}.sm\\:hover\\:border-black:hover{border-color:var(--black)}.sm\\:hover\\:border-white:hover{border-color:var(--white)}.sm\\:hover\\:border-primary:hover{border-color:var(--primary)}.sm\\:hover\\:border-secondary:hover{border-color:var(--secondary)}.sm\\:hover\\:border-info:hover{border-color:var(--info)}.sm\\:hover\\:border-warning:hover{border-color:var(--warning)}.sm\\:hover\\:border-success:hover{border-color:var(--success)}.sm\\:hover\\:border-danger:hover{border-color:var(--danger)}.sm\\:hover\\:border-sidebar:hover{border-color:var(--sidebar)}.sm\\:hover\\:border-documentation:hover{border-color:var(--documentation)}.sm\\:hover\\:border-navbar:hover{border-color:var(--navbar)}.sm\\:hover\\:border-grey-darkest:hover{border-color:#3d4852}.sm\\:hover\\:border-grey-darker:hover{border-color:#606f7b}.sm\\:hover\\:border-grey-dark:hover{border-color:#8795a1}.sm\\:hover\\:border-grey:hover{border-color:#b8c2cc}.sm\\:hover\\:border-grey-light:hover{border-color:#dae1e7}.sm\\:hover\\:border-grey-lighter:hover{border-color:#f1f5f8}.sm\\:hover\\:border-grey-lightest:hover{border-color:#f8fafc}.sm\\:hover\\:border-red-darkest:hover{border-color:#3b0d0c}.sm\\:hover\\:border-red-darker:hover{border-color:#621b18}.sm\\:hover\\:border-red-dark:hover{border-color:#cc1f1a}.sm\\:hover\\:border-red:hover{border-color:#e3342f}.sm\\:hover\\:border-red-light:hover{border-color:#ef5753}.sm\\:hover\\:border-red-lighter:hover{border-color:#f9acaa}.sm\\:hover\\:border-red-lightest:hover{border-color:#fcebea}.sm\\:hover\\:border-orange-darkest:hover{border-color:#462a16}.sm\\:hover\\:border-orange-darker:hover{border-color:#613b1f}.sm\\:hover\\:border-orange-dark:hover{border-color:#de751f}.sm\\:hover\\:border-orange:hover{border-color:#f6993f}.sm\\:hover\\:border-orange-light:hover{border-color:#faad63}.sm\\:hover\\:border-orange-lighter:hover{border-color:#fcd9b6}.sm\\:hover\\:border-orange-lightest:hover{border-color:#fff5eb}.sm\\:hover\\:border-yellow-darkest:hover{border-color:#453411}.sm\\:hover\\:border-yellow-darker:hover{border-color:#684f1d}.sm\\:hover\\:border-yellow-dark:hover{border-color:#f2d024}.sm\\:hover\\:border-yellow:hover{border-color:#ffed4a}.sm\\:hover\\:border-yellow-light:hover{border-color:#fff382}.sm\\:hover\\:border-yellow-lighter:hover{border-color:#fff9c2}.sm\\:hover\\:border-yellow-lightest:hover{border-color:#fcfbeb}.sm\\:hover\\:border-green-darkest:hover{border-color:#0f2f21}.sm\\:hover\\:border-green-darker:hover{border-color:#1a4731}.sm\\:hover\\:border-green-dark:hover{border-color:#1f9d55}.sm\\:hover\\:border-green:hover{border-color:#38c172}.sm\\:hover\\:border-green-light:hover{border-color:#51d88a}.sm\\:hover\\:border-green-lighter:hover{border-color:#a2f5bf}.sm\\:hover\\:border-green-lightest:hover{border-color:#e3fcec}.sm\\:hover\\:border-teal-darkest:hover{border-color:#0d3331}.sm\\:hover\\:border-teal-darker:hover{border-color:#20504f}.sm\\:hover\\:border-teal-dark:hover{border-color:#38a89d}.sm\\:hover\\:border-teal:hover{border-color:#4dc0b5}.sm\\:hover\\:border-teal-light:hover{border-color:#64d5ca}.sm\\:hover\\:border-teal-lighter:hover{border-color:#a0f0ed}.sm\\:hover\\:border-teal-lightest:hover{border-color:#e8fffe}.sm\\:hover\\:border-blue-darkest:hover{border-color:#12283a}.sm\\:hover\\:border-blue-darker:hover{border-color:#1c3d5a}.sm\\:hover\\:border-blue-dark:hover{border-color:#2779bd}.sm\\:hover\\:border-blue:hover{border-color:#3490dc}.sm\\:hover\\:border-blue-light:hover{border-color:#6cb2eb}.sm\\:hover\\:border-blue-lighter:hover{border-color:#bcdefa}.sm\\:hover\\:border-blue-lightest:hover{border-color:#eff8ff}.sm\\:hover\\:border-indigo-darkest:hover{border-color:#191e38}.sm\\:hover\\:border-indigo-darker:hover{border-color:#2f365f}.sm\\:hover\\:border-indigo-dark:hover{border-color:#5661b3}.sm\\:hover\\:border-indigo:hover{border-color:#6574cd}.sm\\:hover\\:border-indigo-light:hover{border-color:#7886d7}.sm\\:hover\\:border-indigo-lighter:hover{border-color:#b2b7ff}.sm\\:hover\\:border-indigo-lightest:hover{border-color:#e6e8ff}.sm\\:hover\\:border-purple-darkest:hover{border-color:#21183c}.sm\\:hover\\:border-purple-darker:hover{border-color:#382b5f}.sm\\:hover\\:border-purple-dark:hover{border-color:#794acf}.sm\\:hover\\:border-purple:hover{border-color:#9561e2}.sm\\:hover\\:border-purple-light:hover{border-color:#a779e9}.sm\\:hover\\:border-purple-lighter:hover{border-color:#d6bbfc}.sm\\:hover\\:border-purple-lightest:hover{border-color:#f3ebff}.sm\\:hover\\:border-pink-darkest:hover{border-color:#451225}.sm\\:hover\\:border-pink-darker:hover{border-color:#6f213f}.sm\\:hover\\:border-pink-dark:hover{border-color:#eb5286}.sm\\:hover\\:border-pink:hover{border-color:#f66d9b}.sm\\:hover\\:border-pink-light:hover{border-color:#fa7ea8}.sm\\:hover\\:border-pink-lighter:hover{border-color:#ffbbca}.sm\\:hover\\:border-pink-lightest:hover{border-color:#ffebef}.sm\\:focus\\:border-transparent:focus{border-color:transparent}.sm\\:focus\\:border-black:focus{border-color:var(--black)}.sm\\:focus\\:border-white:focus{border-color:var(--white)}.sm\\:focus\\:border-primary:focus{border-color:var(--primary)}.sm\\:focus\\:border-secondary:focus{border-color:var(--secondary)}.sm\\:focus\\:border-info:focus{border-color:var(--info)}.sm\\:focus\\:border-warning:focus{border-color:var(--warning)}.sm\\:focus\\:border-success:focus{border-color:var(--success)}.sm\\:focus\\:border-danger:focus{border-color:var(--danger)}.sm\\:focus\\:border-sidebar:focus{border-color:var(--sidebar)}.sm\\:focus\\:border-documentation:focus{border-color:var(--documentation)}.sm\\:focus\\:border-navbar:focus{border-color:var(--navbar)}.sm\\:focus\\:border-grey-darkest:focus{border-color:#3d4852}.sm\\:focus\\:border-grey-darker:focus{border-color:#606f7b}.sm\\:focus\\:border-grey-dark:focus{border-color:#8795a1}.sm\\:focus\\:border-grey:focus{border-color:#b8c2cc}.sm\\:focus\\:border-grey-light:focus{border-color:#dae1e7}.sm\\:focus\\:border-grey-lighter:focus{border-color:#f1f5f8}.sm\\:focus\\:border-grey-lightest:focus{border-color:#f8fafc}.sm\\:focus\\:border-red-darkest:focus{border-color:#3b0d0c}.sm\\:focus\\:border-red-darker:focus{border-color:#621b18}.sm\\:focus\\:border-red-dark:focus{border-color:#cc1f1a}.sm\\:focus\\:border-red:focus{border-color:#e3342f}.sm\\:focus\\:border-red-light:focus{border-color:#ef5753}.sm\\:focus\\:border-red-lighter:focus{border-color:#f9acaa}.sm\\:focus\\:border-red-lightest:focus{border-color:#fcebea}.sm\\:focus\\:border-orange-darkest:focus{border-color:#462a16}.sm\\:focus\\:border-orange-darker:focus{border-color:#613b1f}.sm\\:focus\\:border-orange-dark:focus{border-color:#de751f}.sm\\:focus\\:border-orange:focus{border-color:#f6993f}.sm\\:focus\\:border-orange-light:focus{border-color:#faad63}.sm\\:focus\\:border-orange-lighter:focus{border-color:#fcd9b6}.sm\\:focus\\:border-orange-lightest:focus{border-color:#fff5eb}.sm\\:focus\\:border-yellow-darkest:focus{border-color:#453411}.sm\\:focus\\:border-yellow-darker:focus{border-color:#684f1d}.sm\\:focus\\:border-yellow-dark:focus{border-color:#f2d024}.sm\\:focus\\:border-yellow:focus{border-color:#ffed4a}.sm\\:focus\\:border-yellow-light:focus{border-color:#fff382}.sm\\:focus\\:border-yellow-lighter:focus{border-color:#fff9c2}.sm\\:focus\\:border-yellow-lightest:focus{border-color:#fcfbeb}.sm\\:focus\\:border-green-darkest:focus{border-color:#0f2f21}.sm\\:focus\\:border-green-darker:focus{border-color:#1a4731}.sm\\:focus\\:border-green-dark:focus{border-color:#1f9d55}.sm\\:focus\\:border-green:focus{border-color:#38c172}.sm\\:focus\\:border-green-light:focus{border-color:#51d88a}.sm\\:focus\\:border-green-lighter:focus{border-color:#a2f5bf}.sm\\:focus\\:border-green-lightest:focus{border-color:#e3fcec}.sm\\:focus\\:border-teal-darkest:focus{border-color:#0d3331}.sm\\:focus\\:border-teal-darker:focus{border-color:#20504f}.sm\\:focus\\:border-teal-dark:focus{border-color:#38a89d}.sm\\:focus\\:border-teal:focus{border-color:#4dc0b5}.sm\\:focus\\:border-teal-light:focus{border-color:#64d5ca}.sm\\:focus\\:border-teal-lighter:focus{border-color:#a0f0ed}.sm\\:focus\\:border-teal-lightest:focus{border-color:#e8fffe}.sm\\:focus\\:border-blue-darkest:focus{border-color:#12283a}.sm\\:focus\\:border-blue-darker:focus{border-color:#1c3d5a}.sm\\:focus\\:border-blue-dark:focus{border-color:#2779bd}.sm\\:focus\\:border-blue:focus{border-color:#3490dc}.sm\\:focus\\:border-blue-light:focus{border-color:#6cb2eb}.sm\\:focus\\:border-blue-lighter:focus{border-color:#bcdefa}.sm\\:focus\\:border-blue-lightest:focus{border-color:#eff8ff}.sm\\:focus\\:border-indigo-darkest:focus{border-color:#191e38}.sm\\:focus\\:border-indigo-darker:focus{border-color:#2f365f}.sm\\:focus\\:border-indigo-dark:focus{border-color:#5661b3}.sm\\:focus\\:border-indigo:focus{border-color:#6574cd}.sm\\:focus\\:border-indigo-light:focus{border-color:#7886d7}.sm\\:focus\\:border-indigo-lighter:focus{border-color:#b2b7ff}.sm\\:focus\\:border-indigo-lightest:focus{border-color:#e6e8ff}.sm\\:focus\\:border-purple-darkest:focus{border-color:#21183c}.sm\\:focus\\:border-purple-darker:focus{border-color:#382b5f}.sm\\:focus\\:border-purple-dark:focus{border-color:#794acf}.sm\\:focus\\:border-purple:focus{border-color:#9561e2}.sm\\:focus\\:border-purple-light:focus{border-color:#a779e9}.sm\\:focus\\:border-purple-lighter:focus{border-color:#d6bbfc}.sm\\:focus\\:border-purple-lightest:focus{border-color:#f3ebff}.sm\\:focus\\:border-pink-darkest:focus{border-color:#451225}.sm\\:focus\\:border-pink-darker:focus{border-color:#6f213f}.sm\\:focus\\:border-pink-dark:focus{border-color:#eb5286}.sm\\:focus\\:border-pink:focus{border-color:#f66d9b}.sm\\:focus\\:border-pink-light:focus{border-color:#fa7ea8}.sm\\:focus\\:border-pink-lighter:focus{border-color:#ffbbca}.sm\\:focus\\:border-pink-lightest:focus{border-color:#ffebef}.sm\\:rounded-none{border-radius:0}.sm\\:rounded-sm{border-radius:.125rem}.sm\\:rounded{border-radius:.25rem}.sm\\:rounded-lg{border-radius:.5rem}.sm\\:rounded-full{border-radius:9999px}.sm\\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.sm\\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.sm\\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.sm\\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.sm\\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.sm\\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.sm\\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.sm\\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.sm\\:rounded-t{border-top-left-radius:.25rem}.sm\\:rounded-r,.sm\\:rounded-t{border-top-right-radius:.25rem}.sm\\:rounded-b,.sm\\:rounded-r{border-bottom-right-radius:.25rem}.sm\\:rounded-b,.sm\\:rounded-l{border-bottom-left-radius:.25rem}.sm\\:rounded-l{border-top-left-radius:.25rem}.sm\\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.sm\\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.sm\\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.sm\\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.sm\\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.sm\\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.sm\\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.sm\\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.sm\\:rounded-tl-none{border-top-left-radius:0}.sm\\:rounded-tr-none{border-top-right-radius:0}.sm\\:rounded-br-none{border-bottom-right-radius:0}.sm\\:rounded-bl-none{border-bottom-left-radius:0}.sm\\:rounded-tl-sm{border-top-left-radius:.125rem}.sm\\:rounded-tr-sm{border-top-right-radius:.125rem}.sm\\:rounded-br-sm{border-bottom-right-radius:.125rem}.sm\\:rounded-bl-sm{border-bottom-left-radius:.125rem}.sm\\:rounded-tl{border-top-left-radius:.25rem}.sm\\:rounded-tr{border-top-right-radius:.25rem}.sm\\:rounded-br{border-bottom-right-radius:.25rem}.sm\\:rounded-bl{border-bottom-left-radius:.25rem}.sm\\:rounded-tl-lg{border-top-left-radius:.5rem}.sm\\:rounded-tr-lg{border-top-right-radius:.5rem}.sm\\:rounded-br-lg{border-bottom-right-radius:.5rem}.sm\\:rounded-bl-lg{border-bottom-left-radius:.5rem}.sm\\:rounded-tl-full{border-top-left-radius:9999px}.sm\\:rounded-tr-full{border-top-right-radius:9999px}.sm\\:rounded-br-full{border-bottom-right-radius:9999px}.sm\\:rounded-bl-full{border-bottom-left-radius:9999px}.sm\\:border-solid{border-style:solid}.sm\\:border-dashed{border-style:dashed}.sm\\:border-dotted{border-style:dotted}.sm\\:border-none{border-style:none}.sm\\:border-0{border-width:0}.sm\\:border-2{border-width:2px}.sm\\:border-4{border-width:4px}.sm\\:border-8{border-width:8px}.sm\\:border{border-width:1px}.sm\\:border-t-0{border-top-width:0}.sm\\:border-r-0{border-right-width:0}.sm\\:border-b-0{border-bottom-width:0}.sm\\:border-l-0{border-left-width:0}.sm\\:border-t-2{border-top-width:2px}.sm\\:border-r-2{border-right-width:2px}.sm\\:border-b-2{border-bottom-width:2px}.sm\\:border-l-2{border-left-width:2px}.sm\\:border-t-4{border-top-width:4px}.sm\\:border-r-4{border-right-width:4px}.sm\\:border-b-4{border-bottom-width:4px}.sm\\:border-l-4{border-left-width:4px}.sm\\:border-t-8{border-top-width:8px}.sm\\:border-r-8{border-right-width:8px}.sm\\:border-b-8{border-bottom-width:8px}.sm\\:border-l-8{border-left-width:8px}.sm\\:border-t{border-top-width:1px}.sm\\:border-r{border-right-width:1px}.sm\\:border-b{border-bottom-width:1px}.sm\\:border-l{border-left-width:1px}.sm\\:cursor-auto{cursor:auto}.sm\\:cursor-default{cursor:default}.sm\\:cursor-pointer{cursor:pointer}.sm\\:cursor-wait{cursor:wait}.sm\\:cursor-move{cursor:move}.sm\\:cursor-not-allowed{cursor:not-allowed}.sm\\:block{display:block}.sm\\:inline-block{display:inline-block}.sm\\:inline{display:inline}.sm\\:table{display:table}.sm\\:table-row{display:table-row}.sm\\:table-cell{display:table-cell}.sm\\:hidden{display:none}.sm\\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.sm\\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.sm\\:flex-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sm\\:flex-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.sm\\:flex-col{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.sm\\:flex-col-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.sm\\:flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.sm\\:flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.sm\\:flex-no-wrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.sm\\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.sm\\:items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.sm\\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.sm\\:items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.sm\\:items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.sm\\:self-auto{-ms-flex-item-align:auto;align-self:auto}.sm\\:self-start{-ms-flex-item-align:start;align-self:flex-start}.sm\\:self-end{-ms-flex-item-align:end;align-self:flex-end}.sm\\:self-center{-ms-flex-item-align:center;align-self:center}.sm\\:self-stretch{-ms-flex-item-align:stretch;align-self:stretch}.sm\\:justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sm\\:justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.sm\\:justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.sm\\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.sm\\:justify-around{-ms-flex-pack:distribute;justify-content:space-around}.sm\\:content-center{-ms-flex-line-pack:center;align-content:center}.sm\\:content-start{-ms-flex-line-pack:start;align-content:flex-start}.sm\\:content-end{-ms-flex-line-pack:end;align-content:flex-end}.sm\\:content-between{-ms-flex-line-pack:justify;align-content:space-between}.sm\\:content-around{-ms-flex-line-pack:distribute;align-content:space-around}.sm\\:flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.sm\\:flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.sm\\:flex-initial{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.sm\\:flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.sm\\:flex-grow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.sm\\:flex-shrink{-ms-flex-negative:1;flex-shrink:1}.sm\\:flex-no-grow{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.sm\\:flex-no-shrink{-ms-flex-negative:0;flex-shrink:0}.sm\\:float-right{float:right}.sm\\:float-left{float:left}.sm\\:float-none{float:none}.sm\\:clearfix:after{content:\"\";display:table;clear:both}.sm\\:font-sans{font-family:system-ui,BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.sm\\:font-serif{font-family:Constantia,Lucida Bright,Lucidabright,Lucida Serif,Lucida,DejaVu Serif,Bitstream Vera Serif,Liberation Serif,Georgia,serif}.sm\\:font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.sm\\:font-hairline{font-weight:100}.sm\\:font-thin{font-weight:200}.sm\\:font-light{font-weight:300}.sm\\:font-normal{font-weight:400}.sm\\:font-medium{font-weight:500}.sm\\:font-semibold{font-weight:600}.sm\\:font-bold{font-weight:700}.sm\\:font-extrabold{font-weight:800}.sm\\:font-black{font-weight:900}.sm\\:hover\\:font-hairline:hover{font-weight:100}.sm\\:hover\\:font-thin:hover{font-weight:200}.sm\\:hover\\:font-light:hover{font-weight:300}.sm\\:hover\\:font-normal:hover{font-weight:400}.sm\\:hover\\:font-medium:hover{font-weight:500}.sm\\:hover\\:font-semibold:hover{font-weight:600}.sm\\:hover\\:font-bold:hover{font-weight:700}.sm\\:hover\\:font-extrabold:hover{font-weight:800}.sm\\:hover\\:font-black:hover{font-weight:900}.sm\\:focus\\:font-hairline:focus{font-weight:100}.sm\\:focus\\:font-thin:focus{font-weight:200}.sm\\:focus\\:font-light:focus{font-weight:300}.sm\\:focus\\:font-normal:focus{font-weight:400}.sm\\:focus\\:font-medium:focus{font-weight:500}.sm\\:focus\\:font-semibold:focus{font-weight:600}.sm\\:focus\\:font-bold:focus{font-weight:700}.sm\\:focus\\:font-extrabold:focus{font-weight:800}.sm\\:focus\\:font-black:focus{font-weight:900}.sm\\:h-1{height:.25rem}.sm\\:h-2{height:.5rem}.sm\\:h-3{height:.75rem}.sm\\:h-4{height:1rem}.sm\\:h-5{height:1.25rem}.sm\\:h-6{height:1.5rem}.sm\\:h-8{height:2rem}.sm\\:h-10{height:2.5rem}.sm\\:h-12{height:3rem}.sm\\:h-16{height:4rem}.sm\\:h-24{height:6rem}.sm\\:h-32{height:8rem}.sm\\:h-48{height:12rem}.sm\\:h-64{height:16rem}.sm\\:h-auto{height:auto}.sm\\:h-px{height:1px}.sm\\:h-full{height:100%}.sm\\:h-screen{height:100vh}.sm\\:leading-none{line-height:1}.sm\\:leading-tight{line-height:1.25}.sm\\:leading-normal{line-height:1.5}.sm\\:leading-large{line-height:2}.sm\\:leading-loose{line-height:2.25}.sm\\:m-0{margin:0}.sm\\:m-1{margin:.25rem}.sm\\:m-2{margin:.5rem}.sm\\:m-3{margin:.75rem}.sm\\:m-4{margin:1rem}.sm\\:m-5{margin:1.25rem}.sm\\:m-6{margin:1.5rem}.sm\\:m-8{margin:2rem}.sm\\:m-10{margin:2.5rem}.sm\\:m-12{margin:3rem}.sm\\:m-16{margin:4rem}.sm\\:m-20{margin:5rem}.sm\\:m-24{margin:6rem}.sm\\:m-32{margin:8rem}.sm\\:m-auto{margin:auto}.sm\\:m-px{margin:1px}.sm\\:my-0{margin-top:0;margin-bottom:0}.sm\\:mx-0{margin-left:0;margin-right:0}.sm\\:my-1{margin-top:.25rem;margin-bottom:.25rem}.sm\\:mx-1{margin-left:.25rem;margin-right:.25rem}.sm\\:my-2{margin-top:.5rem;margin-bottom:.5rem}.sm\\:mx-2{margin-left:.5rem;margin-right:.5rem}.sm\\:my-3{margin-top:.75rem;margin-bottom:.75rem}.sm\\:mx-3{margin-left:.75rem;margin-right:.75rem}.sm\\:my-4{margin-top:1rem;margin-bottom:1rem}.sm\\:mx-4{margin-left:1rem;margin-right:1rem}.sm\\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.sm\\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.sm\\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sm\\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\\:mx-8{margin-left:2rem;margin-right:2rem}.sm\\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.sm\\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.sm\\:my-12{margin-top:3rem;margin-bottom:3rem}.sm\\:mx-12{margin-left:3rem;margin-right:3rem}.sm\\:my-16{margin-top:4rem;margin-bottom:4rem}.sm\\:mx-16{margin-left:4rem;margin-right:4rem}.sm\\:my-20{margin-top:5rem;margin-bottom:5rem}.sm\\:mx-20{margin-left:5rem;margin-right:5rem}.sm\\:my-24{margin-top:6rem;margin-bottom:6rem}.sm\\:mx-24{margin-left:6rem;margin-right:6rem}.sm\\:my-32{margin-top:8rem;margin-bottom:8rem}.sm\\:mx-32{margin-left:8rem;margin-right:8rem}.sm\\:my-auto{margin-top:auto;margin-bottom:auto}.sm\\:mx-auto{margin-left:auto;margin-right:auto}.sm\\:my-px{margin-top:1px;margin-bottom:1px}.sm\\:mx-px{margin-left:1px;margin-right:1px}.sm\\:mt-0{margin-top:0}.sm\\:mr-0{margin-right:0}.sm\\:mb-0{margin-bottom:0}.sm\\:ml-0{margin-left:0}.sm\\:mt-1{margin-top:.25rem}.sm\\:mr-1{margin-right:.25rem}.sm\\:mb-1{margin-bottom:.25rem}.sm\\:ml-1{margin-left:.25rem}.sm\\:mt-2{margin-top:.5rem}.sm\\:mr-2{margin-right:.5rem}.sm\\:mb-2{margin-bottom:.5rem}.sm\\:ml-2{margin-left:.5rem}.sm\\:mt-3{margin-top:.75rem}.sm\\:mr-3{margin-right:.75rem}.sm\\:mb-3{margin-bottom:.75rem}.sm\\:ml-3{margin-left:.75rem}.sm\\:mt-4{margin-top:1rem}.sm\\:mr-4{margin-right:1rem}.sm\\:mb-4{margin-bottom:1rem}.sm\\:ml-4{margin-left:1rem}.sm\\:mt-5{margin-top:1.25rem}.sm\\:mr-5{margin-right:1.25rem}.sm\\:mb-5{margin-bottom:1.25rem}.sm\\:ml-5{margin-left:1.25rem}.sm\\:mt-6{margin-top:1.5rem}.sm\\:mr-6{margin-right:1.5rem}.sm\\:mb-6{margin-bottom:1.5rem}.sm\\:ml-6{margin-left:1.5rem}.sm\\:mt-8{margin-top:2rem}.sm\\:mr-8{margin-right:2rem}.sm\\:mb-8{margin-bottom:2rem}.sm\\:ml-8{margin-left:2rem}.sm\\:mt-10{margin-top:2.5rem}.sm\\:mr-10{margin-right:2.5rem}.sm\\:mb-10{margin-bottom:2.5rem}.sm\\:ml-10{margin-left:2.5rem}.sm\\:mt-12{margin-top:3rem}.sm\\:mr-12{margin-right:3rem}.sm\\:mb-12{margin-bottom:3rem}.sm\\:ml-12{margin-left:3rem}.sm\\:mt-16{margin-top:4rem}.sm\\:mr-16{margin-right:4rem}.sm\\:mb-16{margin-bottom:4rem}.sm\\:ml-16{margin-left:4rem}.sm\\:mt-20{margin-top:5rem}.sm\\:mr-20{margin-right:5rem}.sm\\:mb-20{margin-bottom:5rem}.sm\\:ml-20{margin-left:5rem}.sm\\:mt-24{margin-top:6rem}.sm\\:mr-24{margin-right:6rem}.sm\\:mb-24{margin-bottom:6rem}.sm\\:ml-24{margin-left:6rem}.sm\\:mt-32{margin-top:8rem}.sm\\:mr-32{margin-right:8rem}.sm\\:mb-32{margin-bottom:8rem}.sm\\:ml-32{margin-left:8rem}.sm\\:mt-auto{margin-top:auto}.sm\\:mr-auto{margin-right:auto}.sm\\:mb-auto{margin-bottom:auto}.sm\\:ml-auto{margin-left:auto}.sm\\:mt-px{margin-top:1px}.sm\\:mr-px{margin-right:1px}.sm\\:mb-px{margin-bottom:1px}.sm\\:ml-px{margin-left:1px}.sm\\:max-h-full{max-height:100%}.sm\\:max-h-screen{max-height:100vh}.sm\\:max-w-xs{max-width:20rem}.sm\\:max-w-sm{max-width:30rem}.sm\\:max-w-md{max-width:40rem}.sm\\:max-w-lg{max-width:50rem}.sm\\:max-w-xl{max-width:60rem}.sm\\:max-w-2xl{max-width:70rem}.sm\\:max-w-3xl{max-width:80rem}.sm\\:max-w-4xl{max-width:90rem}.sm\\:max-w-5xl{max-width:100rem}.sm\\:max-w-full{max-width:100%}.sm\\:min-h-0{min-height:0}.sm\\:min-h-full{min-height:100%}.sm\\:min-h-screen{min-height:100vh}.sm\\:min-w-0{min-width:0}.sm\\:min-w-full{min-width:100%}.sm\\:-m-0{margin:0}.sm\\:-m-1{margin:-.25rem}.sm\\:-m-2{margin:-.5rem}.sm\\:-m-3{margin:-.75rem}.sm\\:-m-4{margin:-1rem}.sm\\:-m-5{margin:-1.25rem}.sm\\:-m-6{margin:-1.5rem}.sm\\:-m-8{margin:-2rem}.sm\\:-m-10{margin:-2.5rem}.sm\\:-m-12{margin:-3rem}.sm\\:-m-16{margin:-4rem}.sm\\:-m-20{margin:-5rem}.sm\\:-m-24{margin:-6rem}.sm\\:-m-32{margin:-8rem}.sm\\:-m-px{margin:-1px}.sm\\:-my-0{margin-top:0;margin-bottom:0}.sm\\:-mx-0{margin-left:0;margin-right:0}.sm\\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.sm\\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.sm\\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.sm\\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.sm\\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.sm\\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.sm\\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.sm\\:-mx-4{margin-left:-1rem;margin-right:-1rem}.sm\\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.sm\\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.sm\\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.sm\\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.sm\\:-mx-8{margin-left:-2rem;margin-right:-2rem}.sm\\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.sm\\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.sm\\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.sm\\:-mx-12{margin-left:-3rem;margin-right:-3rem}.sm\\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.sm\\:-mx-16{margin-left:-4rem;margin-right:-4rem}.sm\\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.sm\\:-mx-20{margin-left:-5rem;margin-right:-5rem}.sm\\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.sm\\:-mx-24{margin-left:-6rem;margin-right:-6rem}.sm\\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.sm\\:-mx-32{margin-left:-8rem;margin-right:-8rem}.sm\\:-my-px{margin-top:-1px;margin-bottom:-1px}.sm\\:-mx-px{margin-left:-1px;margin-right:-1px}.sm\\:-mt-0{margin-top:0}.sm\\:-mr-0{margin-right:0}.sm\\:-mb-0{margin-bottom:0}.sm\\:-ml-0{margin-left:0}.sm\\:-mt-1{margin-top:-.25rem}.sm\\:-mr-1{margin-right:-.25rem}.sm\\:-mb-1{margin-bottom:-.25rem}.sm\\:-ml-1{margin-left:-.25rem}.sm\\:-mt-2{margin-top:-.5rem}.sm\\:-mr-2{margin-right:-.5rem}.sm\\:-mb-2{margin-bottom:-.5rem}.sm\\:-ml-2{margin-left:-.5rem}.sm\\:-mt-3{margin-top:-.75rem}.sm\\:-mr-3{margin-right:-.75rem}.sm\\:-mb-3{margin-bottom:-.75rem}.sm\\:-ml-3{margin-left:-.75rem}.sm\\:-mt-4{margin-top:-1rem}.sm\\:-mr-4{margin-right:-1rem}.sm\\:-mb-4{margin-bottom:-1rem}.sm\\:-ml-4{margin-left:-1rem}.sm\\:-mt-5{margin-top:-1.25rem}.sm\\:-mr-5{margin-right:-1.25rem}.sm\\:-mb-5{margin-bottom:-1.25rem}.sm\\:-ml-5{margin-left:-1.25rem}.sm\\:-mt-6{margin-top:-1.5rem}.sm\\:-mr-6{margin-right:-1.5rem}.sm\\:-mb-6{margin-bottom:-1.5rem}.sm\\:-ml-6{margin-left:-1.5rem}.sm\\:-mt-8{margin-top:-2rem}.sm\\:-mr-8{margin-right:-2rem}.sm\\:-mb-8{margin-bottom:-2rem}.sm\\:-ml-8{margin-left:-2rem}.sm\\:-mt-10{margin-top:-2.5rem}.sm\\:-mr-10{margin-right:-2.5rem}.sm\\:-mb-10{margin-bottom:-2.5rem}.sm\\:-ml-10{margin-left:-2.5rem}.sm\\:-mt-12{margin-top:-3rem}.sm\\:-mr-12{margin-right:-3rem}.sm\\:-mb-12{margin-bottom:-3rem}.sm\\:-ml-12{margin-left:-3rem}.sm\\:-mt-16{margin-top:-4rem}.sm\\:-mr-16{margin-right:-4rem}.sm\\:-mb-16{margin-bottom:-4rem}.sm\\:-ml-16{margin-left:-4rem}.sm\\:-mt-20{margin-top:-5rem}.sm\\:-mr-20{margin-right:-5rem}.sm\\:-mb-20{margin-bottom:-5rem}.sm\\:-ml-20{margin-left:-5rem}.sm\\:-mt-24{margin-top:-6rem}.sm\\:-mr-24{margin-right:-6rem}.sm\\:-mb-24{margin-bottom:-6rem}.sm\\:-ml-24{margin-left:-6rem}.sm\\:-mt-32{margin-top:-8rem}.sm\\:-mr-32{margin-right:-8rem}.sm\\:-mb-32{margin-bottom:-8rem}.sm\\:-ml-32{margin-left:-8rem}.sm\\:-mt-px{margin-top:-1px}.sm\\:-mr-px{margin-right:-1px}.sm\\:-mb-px{margin-bottom:-1px}.sm\\:-ml-px{margin-left:-1px}.sm\\:opacity-0{opacity:0}.sm\\:opacity-25{opacity:.25}.sm\\:opacity-50{opacity:.5}.sm\\:opacity-75{opacity:.75}.sm\\:opacity-100{opacity:1}.sm\\:overflow-auto{overflow:auto}.sm\\:overflow-hidden{overflow:hidden}.sm\\:overflow-visible{overflow:visible}.sm\\:overflow-scroll{overflow:scroll}.sm\\:overflow-x-auto{overflow-x:auto}.sm\\:overflow-y-auto{overflow-y:auto}.sm\\:overflow-x-hidden{overflow-x:hidden}.sm\\:overflow-y-hidden{overflow-y:hidden}.sm\\:overflow-x-visible{overflow-x:visible}.sm\\:overflow-y-visible{overflow-y:visible}.sm\\:overflow-x-scroll{overflow-x:scroll}.sm\\:overflow-y-scroll{overflow-y:scroll}.sm\\:scrolling-touch{-webkit-overflow-scrolling:touch}.sm\\:scrolling-auto{-webkit-overflow-scrolling:auto}.sm\\:p-0{padding:0}.sm\\:p-1{padding:.25rem}.sm\\:p-2{padding:.5rem}.sm\\:p-3{padding:.75rem}.sm\\:p-4{padding:1rem}.sm\\:p-5{padding:1.25rem}.sm\\:p-6{padding:1.5rem}.sm\\:p-8{padding:2rem}.sm\\:p-10{padding:2.5rem}.sm\\:p-12{padding:3rem}.sm\\:p-16{padding:4rem}.sm\\:p-20{padding:5rem}.sm\\:p-24{padding:6rem}.sm\\:p-32{padding:8rem}.sm\\:p-50{padding:20rem}.sm\\:p-px{padding:1px}.sm\\:py-0{padding-top:0;padding-bottom:0}.sm\\:px-0{padding-left:0;padding-right:0}.sm\\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\\:px-1{padding-left:.25rem;padding-right:.25rem}.sm\\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\\:px-4{padding-left:1rem;padding-right:1rem}.sm\\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sm\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\\:px-8{padding-left:2rem;padding-right:2rem}.sm\\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\\:px-10{padding-left:2.5rem;padding-right:2.5rem}.sm\\:py-12{padding-top:3rem;padding-bottom:3rem}.sm\\:px-12{padding-left:3rem;padding-right:3rem}.sm\\:py-16{padding-top:4rem;padding-bottom:4rem}.sm\\:px-16{padding-left:4rem;padding-right:4rem}.sm\\:py-20{padding-top:5rem;padding-bottom:5rem}.sm\\:px-20{padding-left:5rem;padding-right:5rem}.sm\\:py-24{padding-top:6rem;padding-bottom:6rem}.sm\\:px-24{padding-left:6rem;padding-right:6rem}.sm\\:py-32{padding-top:8rem;padding-bottom:8rem}.sm\\:px-32{padding-left:8rem;padding-right:8rem}.sm\\:py-50{padding-top:20rem;padding-bottom:20rem}.sm\\:px-50{padding-left:20rem;padding-right:20rem}.sm\\:py-px{padding-top:1px;padding-bottom:1px}.sm\\:px-px{padding-left:1px;padding-right:1px}.sm\\:pt-0{padding-top:0}.sm\\:pr-0{padding-right:0}.sm\\:pb-0{padding-bottom:0}.sm\\:pl-0{padding-left:0}.sm\\:pt-1{padding-top:.25rem}.sm\\:pr-1{padding-right:.25rem}.sm\\:pb-1{padding-bottom:.25rem}.sm\\:pl-1{padding-left:.25rem}.sm\\:pt-2{padding-top:.5rem}.sm\\:pr-2{padding-right:.5rem}.sm\\:pb-2{padding-bottom:.5rem}.sm\\:pl-2{padding-left:.5rem}.sm\\:pt-3{padding-top:.75rem}.sm\\:pr-3{padding-right:.75rem}.sm\\:pb-3{padding-bottom:.75rem}.sm\\:pl-3{padding-left:.75rem}.sm\\:pt-4{padding-top:1rem}.sm\\:pr-4{padding-right:1rem}.sm\\:pb-4{padding-bottom:1rem}.sm\\:pl-4{padding-left:1rem}.sm\\:pt-5{padding-top:1.25rem}.sm\\:pr-5{padding-right:1.25rem}.sm\\:pb-5{padding-bottom:1.25rem}.sm\\:pl-5{padding-left:1.25rem}.sm\\:pt-6{padding-top:1.5rem}.sm\\:pr-6{padding-right:1.5rem}.sm\\:pb-6{padding-bottom:1.5rem}.sm\\:pl-6{padding-left:1.5rem}.sm\\:pt-8{padding-top:2rem}.sm\\:pr-8{padding-right:2rem}.sm\\:pb-8{padding-bottom:2rem}.sm\\:pl-8{padding-left:2rem}.sm\\:pt-10{padding-top:2.5rem}.sm\\:pr-10{padding-right:2.5rem}.sm\\:pb-10{padding-bottom:2.5rem}.sm\\:pl-10{padding-left:2.5rem}.sm\\:pt-12{padding-top:3rem}.sm\\:pr-12{padding-right:3rem}.sm\\:pb-12{padding-bottom:3rem}.sm\\:pl-12{padding-left:3rem}.sm\\:pt-16{padding-top:4rem}.sm\\:pr-16{padding-right:4rem}.sm\\:pb-16{padding-bottom:4rem}.sm\\:pl-16{padding-left:4rem}.sm\\:pt-20{padding-top:5rem}.sm\\:pr-20{padding-right:5rem}.sm\\:pb-20{padding-bottom:5rem}.sm\\:pl-20{padding-left:5rem}.sm\\:pt-24{padding-top:6rem}.sm\\:pr-24{padding-right:6rem}.sm\\:pb-24{padding-bottom:6rem}.sm\\:pl-24{padding-left:6rem}.sm\\:pt-32{padding-top:8rem}.sm\\:pr-32{padding-right:8rem}.sm\\:pb-32{padding-bottom:8rem}.sm\\:pl-32{padding-left:8rem}.sm\\:pt-50{padding-top:20rem}.sm\\:pr-50{padding-right:20rem}.sm\\:pb-50{padding-bottom:20rem}.sm\\:pl-50{padding-left:20rem}.sm\\:pt-px{padding-top:1px}.sm\\:pr-px{padding-right:1px}.sm\\:pb-px{padding-bottom:1px}.sm\\:pl-px{padding-left:1px}.sm\\:pointer-events-none{pointer-events:none}.sm\\:pointer-events-auto{pointer-events:auto}.sm\\:static{position:static}.sm\\:fixed{position:fixed}.sm\\:absolute{position:absolute}.sm\\:relative{position:relative}.sm\\:sticky{position:-webkit-sticky;position:sticky}.sm\\:pin-none{top:auto;right:auto;bottom:auto;left:auto}.sm\\:pin{right:0;left:0}.sm\\:pin,.sm\\:pin-y{top:0;bottom:0}.sm\\:pin-x{right:0;left:0}.sm\\:pin-t{top:0}.sm\\:pin-r{right:0}.sm\\:pin-b{bottom:0}.sm\\:pin-l{left:0}.sm\\:resize-none{resize:none}.sm\\:resize-y{resize:vertical}.sm\\:resize-x{resize:horizontal}.sm\\:resize{resize:both}.sm\\:shadow{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.sm\\:shadow-xs{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.sm\\:shadow-sm{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.sm\\:shadow-md{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.sm\\:shadow-lg{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.sm\\:shadow-inner{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\\:shadow-outline{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.sm\\:shadow-none{-webkit-box-shadow:none;box-shadow:none}.sm\\:hover\\:shadow:hover{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.sm\\:hover\\:shadow-xs:hover{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.sm\\:hover\\:shadow-sm:hover{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.sm\\:hover\\:shadow-md:hover{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.sm\\:hover\\:shadow-lg:hover{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.sm\\:hover\\:shadow-inner:hover{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\\:hover\\:shadow-outline:hover{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.sm\\:hover\\:shadow-none:hover{-webkit-box-shadow:none;box-shadow:none}.sm\\:focus\\:shadow:focus{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.sm\\:focus\\:shadow-xs:focus{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.sm\\:focus\\:shadow-sm:focus{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.sm\\:focus\\:shadow-md:focus{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.sm\\:focus\\:shadow-lg:focus{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.sm\\:focus\\:shadow-inner:focus{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\\:focus\\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.sm\\:focus\\:shadow-none:focus{-webkit-box-shadow:none;box-shadow:none}.sm\\:table-auto{table-layout:auto}.sm\\:table-fixed{table-layout:fixed}.sm\\:text-left{text-align:left}.sm\\:text-center{text-align:center}.sm\\:text-right{text-align:right}.sm\\:text-justify{text-align:justify}.sm\\:text-transparent{color:transparent}.sm\\:text-black{color:var(--black)}.sm\\:text-white{color:var(--white)}.sm\\:text-primary{color:var(--primary)}.sm\\:text-secondary{color:var(--secondary)}.sm\\:text-info{color:var(--info)}.sm\\:text-warning{color:var(--warning)}.sm\\:text-success{color:var(--success)}.sm\\:text-danger{color:var(--danger)}.sm\\:text-sidebar{color:var(--sidebar)}.sm\\:text-documentation{color:var(--documentation)}.sm\\:text-navbar{color:var(--navbar)}.sm\\:text-grey-darkest{color:#3d4852}.sm\\:text-grey-darker{color:#606f7b}.sm\\:text-grey-dark{color:#8795a1}.sm\\:text-grey{color:#b8c2cc}.sm\\:text-grey-light{color:#dae1e7}.sm\\:text-grey-lighter{color:#f1f5f8}.sm\\:text-grey-lightest{color:#f8fafc}.sm\\:text-red-darkest{color:#3b0d0c}.sm\\:text-red-darker{color:#621b18}.sm\\:text-red-dark{color:#cc1f1a}.sm\\:text-red{color:#e3342f}.sm\\:text-red-light{color:#ef5753}.sm\\:text-red-lighter{color:#f9acaa}.sm\\:text-red-lightest{color:#fcebea}.sm\\:text-orange-darkest{color:#462a16}.sm\\:text-orange-darker{color:#613b1f}.sm\\:text-orange-dark{color:#de751f}.sm\\:text-orange{color:#f6993f}.sm\\:text-orange-light{color:#faad63}.sm\\:text-orange-lighter{color:#fcd9b6}.sm\\:text-orange-lightest{color:#fff5eb}.sm\\:text-yellow-darkest{color:#453411}.sm\\:text-yellow-darker{color:#684f1d}.sm\\:text-yellow-dark{color:#f2d024}.sm\\:text-yellow{color:#ffed4a}.sm\\:text-yellow-light{color:#fff382}.sm\\:text-yellow-lighter{color:#fff9c2}.sm\\:text-yellow-lightest{color:#fcfbeb}.sm\\:text-green-darkest{color:#0f2f21}.sm\\:text-green-darker{color:#1a4731}.sm\\:text-green-dark{color:#1f9d55}.sm\\:text-green{color:#38c172}.sm\\:text-green-light{color:#51d88a}.sm\\:text-green-lighter{color:#a2f5bf}.sm\\:text-green-lightest{color:#e3fcec}.sm\\:text-teal-darkest{color:#0d3331}.sm\\:text-teal-darker{color:#20504f}.sm\\:text-teal-dark{color:#38a89d}.sm\\:text-teal{color:#4dc0b5}.sm\\:text-teal-light{color:#64d5ca}.sm\\:text-teal-lighter{color:#a0f0ed}.sm\\:text-teal-lightest{color:#e8fffe}.sm\\:text-blue-darkest{color:#12283a}.sm\\:text-blue-darker{color:#1c3d5a}.sm\\:text-blue-dark{color:#2779bd}.sm\\:text-blue{color:#3490dc}.sm\\:text-blue-light{color:#6cb2eb}.sm\\:text-blue-lighter{color:#bcdefa}.sm\\:text-blue-lightest{color:#eff8ff}.sm\\:text-indigo-darkest{color:#191e38}.sm\\:text-indigo-darker{color:#2f365f}.sm\\:text-indigo-dark{color:#5661b3}.sm\\:text-indigo{color:#6574cd}.sm\\:text-indigo-light{color:#7886d7}.sm\\:text-indigo-lighter{color:#b2b7ff}.sm\\:text-indigo-lightest{color:#e6e8ff}.sm\\:text-purple-darkest{color:#21183c}.sm\\:text-purple-darker{color:#382b5f}.sm\\:text-purple-dark{color:#794acf}.sm\\:text-purple{color:#9561e2}.sm\\:text-purple-light{color:#a779e9}.sm\\:text-purple-lighter{color:#d6bbfc}.sm\\:text-purple-lightest{color:#f3ebff}.sm\\:text-pink-darkest{color:#451225}.sm\\:text-pink-darker{color:#6f213f}.sm\\:text-pink-dark{color:#eb5286}.sm\\:text-pink{color:#f66d9b}.sm\\:text-pink-light{color:#fa7ea8}.sm\\:text-pink-lighter{color:#ffbbca}.sm\\:text-pink-lightest{color:#ffebef}.sm\\:hover\\:text-transparent:hover{color:transparent}.sm\\:hover\\:text-black:hover{color:var(--black)}.sm\\:hover\\:text-white:hover{color:var(--white)}.sm\\:hover\\:text-primary:hover{color:var(--primary)}.sm\\:hover\\:text-secondary:hover{color:var(--secondary)}.sm\\:hover\\:text-info:hover{color:var(--info)}.sm\\:hover\\:text-warning:hover{color:var(--warning)}.sm\\:hover\\:text-success:hover{color:var(--success)}.sm\\:hover\\:text-danger:hover{color:var(--danger)}.sm\\:hover\\:text-sidebar:hover{color:var(--sidebar)}.sm\\:hover\\:text-documentation:hover{color:var(--documentation)}.sm\\:hover\\:text-navbar:hover{color:var(--navbar)}.sm\\:hover\\:text-grey-darkest:hover{color:#3d4852}.sm\\:hover\\:text-grey-darker:hover{color:#606f7b}.sm\\:hover\\:text-grey-dark:hover{color:#8795a1}.sm\\:hover\\:text-grey:hover{color:#b8c2cc}.sm\\:hover\\:text-grey-light:hover{color:#dae1e7}.sm\\:hover\\:text-grey-lighter:hover{color:#f1f5f8}.sm\\:hover\\:text-grey-lightest:hover{color:#f8fafc}.sm\\:hover\\:text-red-darkest:hover{color:#3b0d0c}.sm\\:hover\\:text-red-darker:hover{color:#621b18}.sm\\:hover\\:text-red-dark:hover{color:#cc1f1a}.sm\\:hover\\:text-red:hover{color:#e3342f}.sm\\:hover\\:text-red-light:hover{color:#ef5753}.sm\\:hover\\:text-red-lighter:hover{color:#f9acaa}.sm\\:hover\\:text-red-lightest:hover{color:#fcebea}.sm\\:hover\\:text-orange-darkest:hover{color:#462a16}.sm\\:hover\\:text-orange-darker:hover{color:#613b1f}.sm\\:hover\\:text-orange-dark:hover{color:#de751f}.sm\\:hover\\:text-orange:hover{color:#f6993f}.sm\\:hover\\:text-orange-light:hover{color:#faad63}.sm\\:hover\\:text-orange-lighter:hover{color:#fcd9b6}.sm\\:hover\\:text-orange-lightest:hover{color:#fff5eb}.sm\\:hover\\:text-yellow-darkest:hover{color:#453411}.sm\\:hover\\:text-yellow-darker:hover{color:#684f1d}.sm\\:hover\\:text-yellow-dark:hover{color:#f2d024}.sm\\:hover\\:text-yellow:hover{color:#ffed4a}.sm\\:hover\\:text-yellow-light:hover{color:#fff382}.sm\\:hover\\:text-yellow-lighter:hover{color:#fff9c2}.sm\\:hover\\:text-yellow-lightest:hover{color:#fcfbeb}.sm\\:hover\\:text-green-darkest:hover{color:#0f2f21}.sm\\:hover\\:text-green-darker:hover{color:#1a4731}.sm\\:hover\\:text-green-dark:hover{color:#1f9d55}.sm\\:hover\\:text-green:hover{color:#38c172}.sm\\:hover\\:text-green-light:hover{color:#51d88a}.sm\\:hover\\:text-green-lighter:hover{color:#a2f5bf}.sm\\:hover\\:text-green-lightest:hover{color:#e3fcec}.sm\\:hover\\:text-teal-darkest:hover{color:#0d3331}.sm\\:hover\\:text-teal-darker:hover{color:#20504f}.sm\\:hover\\:text-teal-dark:hover{color:#38a89d}.sm\\:hover\\:text-teal:hover{color:#4dc0b5}.sm\\:hover\\:text-teal-light:hover{color:#64d5ca}.sm\\:hover\\:text-teal-lighter:hover{color:#a0f0ed}.sm\\:hover\\:text-teal-lightest:hover{color:#e8fffe}.sm\\:hover\\:text-blue-darkest:hover{color:#12283a}.sm\\:hover\\:text-blue-darker:hover{color:#1c3d5a}.sm\\:hover\\:text-blue-dark:hover{color:#2779bd}.sm\\:hover\\:text-blue:hover{color:#3490dc}.sm\\:hover\\:text-blue-light:hover{color:#6cb2eb}.sm\\:hover\\:text-blue-lighter:hover{color:#bcdefa}.sm\\:hover\\:text-blue-lightest:hover{color:#eff8ff}.sm\\:hover\\:text-indigo-darkest:hover{color:#191e38}.sm\\:hover\\:text-indigo-darker:hover{color:#2f365f}.sm\\:hover\\:text-indigo-dark:hover{color:#5661b3}.sm\\:hover\\:text-indigo:hover{color:#6574cd}.sm\\:hover\\:text-indigo-light:hover{color:#7886d7}.sm\\:hover\\:text-indigo-lighter:hover{color:#b2b7ff}.sm\\:hover\\:text-indigo-lightest:hover{color:#e6e8ff}.sm\\:hover\\:text-purple-darkest:hover{color:#21183c}.sm\\:hover\\:text-purple-darker:hover{color:#382b5f}.sm\\:hover\\:text-purple-dark:hover{color:#794acf}.sm\\:hover\\:text-purple:hover{color:#9561e2}.sm\\:hover\\:text-purple-light:hover{color:#a779e9}.sm\\:hover\\:text-purple-lighter:hover{color:#d6bbfc}.sm\\:hover\\:text-purple-lightest:hover{color:#f3ebff}.sm\\:hover\\:text-pink-darkest:hover{color:#451225}.sm\\:hover\\:text-pink-darker:hover{color:#6f213f}.sm\\:hover\\:text-pink-dark:hover{color:#eb5286}.sm\\:hover\\:text-pink:hover{color:#f66d9b}.sm\\:hover\\:text-pink-light:hover{color:#fa7ea8}.sm\\:hover\\:text-pink-lighter:hover{color:#ffbbca}.sm\\:hover\\:text-pink-lightest:hover{color:#ffebef}.sm\\:focus\\:text-transparent:focus{color:transparent}.sm\\:focus\\:text-black:focus{color:var(--black)}.sm\\:focus\\:text-white:focus{color:var(--white)}.sm\\:focus\\:text-primary:focus{color:var(--primary)}.sm\\:focus\\:text-secondary:focus{color:var(--secondary)}.sm\\:focus\\:text-info:focus{color:var(--info)}.sm\\:focus\\:text-warning:focus{color:var(--warning)}.sm\\:focus\\:text-success:focus{color:var(--success)}.sm\\:focus\\:text-danger:focus{color:var(--danger)}.sm\\:focus\\:text-sidebar:focus{color:var(--sidebar)}.sm\\:focus\\:text-documentation:focus{color:var(--documentation)}.sm\\:focus\\:text-navbar:focus{color:var(--navbar)}.sm\\:focus\\:text-grey-darkest:focus{color:#3d4852}.sm\\:focus\\:text-grey-darker:focus{color:#606f7b}.sm\\:focus\\:text-grey-dark:focus{color:#8795a1}.sm\\:focus\\:text-grey:focus{color:#b8c2cc}.sm\\:focus\\:text-grey-light:focus{color:#dae1e7}.sm\\:focus\\:text-grey-lighter:focus{color:#f1f5f8}.sm\\:focus\\:text-grey-lightest:focus{color:#f8fafc}.sm\\:focus\\:text-red-darkest:focus{color:#3b0d0c}.sm\\:focus\\:text-red-darker:focus{color:#621b18}.sm\\:focus\\:text-red-dark:focus{color:#cc1f1a}.sm\\:focus\\:text-red:focus{color:#e3342f}.sm\\:focus\\:text-red-light:focus{color:#ef5753}.sm\\:focus\\:text-red-lighter:focus{color:#f9acaa}.sm\\:focus\\:text-red-lightest:focus{color:#fcebea}.sm\\:focus\\:text-orange-darkest:focus{color:#462a16}.sm\\:focus\\:text-orange-darker:focus{color:#613b1f}.sm\\:focus\\:text-orange-dark:focus{color:#de751f}.sm\\:focus\\:text-orange:focus{color:#f6993f}.sm\\:focus\\:text-orange-light:focus{color:#faad63}.sm\\:focus\\:text-orange-lighter:focus{color:#fcd9b6}.sm\\:focus\\:text-orange-lightest:focus{color:#fff5eb}.sm\\:focus\\:text-yellow-darkest:focus{color:#453411}.sm\\:focus\\:text-yellow-darker:focus{color:#684f1d}.sm\\:focus\\:text-yellow-dark:focus{color:#f2d024}.sm\\:focus\\:text-yellow:focus{color:#ffed4a}.sm\\:focus\\:text-yellow-light:focus{color:#fff382}.sm\\:focus\\:text-yellow-lighter:focus{color:#fff9c2}.sm\\:focus\\:text-yellow-lightest:focus{color:#fcfbeb}.sm\\:focus\\:text-green-darkest:focus{color:#0f2f21}.sm\\:focus\\:text-green-darker:focus{color:#1a4731}.sm\\:focus\\:text-green-dark:focus{color:#1f9d55}.sm\\:focus\\:text-green:focus{color:#38c172}.sm\\:focus\\:text-green-light:focus{color:#51d88a}.sm\\:focus\\:text-green-lighter:focus{color:#a2f5bf}.sm\\:focus\\:text-green-lightest:focus{color:#e3fcec}.sm\\:focus\\:text-teal-darkest:focus{color:#0d3331}.sm\\:focus\\:text-teal-darker:focus{color:#20504f}.sm\\:focus\\:text-teal-dark:focus{color:#38a89d}.sm\\:focus\\:text-teal:focus{color:#4dc0b5}.sm\\:focus\\:text-teal-light:focus{color:#64d5ca}.sm\\:focus\\:text-teal-lighter:focus{color:#a0f0ed}.sm\\:focus\\:text-teal-lightest:focus{color:#e8fffe}.sm\\:focus\\:text-blue-darkest:focus{color:#12283a}.sm\\:focus\\:text-blue-darker:focus{color:#1c3d5a}.sm\\:focus\\:text-blue-dark:focus{color:#2779bd}.sm\\:focus\\:text-blue:focus{color:#3490dc}.sm\\:focus\\:text-blue-light:focus{color:#6cb2eb}.sm\\:focus\\:text-blue-lighter:focus{color:#bcdefa}.sm\\:focus\\:text-blue-lightest:focus{color:#eff8ff}.sm\\:focus\\:text-indigo-darkest:focus{color:#191e38}.sm\\:focus\\:text-indigo-darker:focus{color:#2f365f}.sm\\:focus\\:text-indigo-dark:focus{color:#5661b3}.sm\\:focus\\:text-indigo:focus{color:#6574cd}.sm\\:focus\\:text-indigo-light:focus{color:#7886d7}.sm\\:focus\\:text-indigo-lighter:focus{color:#b2b7ff}.sm\\:focus\\:text-indigo-lightest:focus{color:#e6e8ff}.sm\\:focus\\:text-purple-darkest:focus{color:#21183c}.sm\\:focus\\:text-purple-darker:focus{color:#382b5f}.sm\\:focus\\:text-purple-dark:focus{color:#794acf}.sm\\:focus\\:text-purple:focus{color:#9561e2}.sm\\:focus\\:text-purple-light:focus{color:#a779e9}.sm\\:focus\\:text-purple-lighter:focus{color:#d6bbfc}.sm\\:focus\\:text-purple-lightest:focus{color:#f3ebff}.sm\\:focus\\:text-pink-darkest:focus{color:#451225}.sm\\:focus\\:text-pink-darker:focus{color:#6f213f}.sm\\:focus\\:text-pink-dark:focus{color:#eb5286}.sm\\:focus\\:text-pink:focus{color:#f66d9b}.sm\\:focus\\:text-pink-light:focus{color:#fa7ea8}.sm\\:focus\\:text-pink-lighter:focus{color:#ffbbca}.sm\\:focus\\:text-pink-lightest:focus{color:#ffebef}.sm\\:text-xs{font-size:.75rem}.sm\\:text-sm{font-size:.875rem}.sm\\:text-base{font-size:1rem}.sm\\:text-lg{font-size:1.125rem}.sm\\:text-xl{font-size:1.25rem}.sm\\:text-2xl{font-size:1.5rem}.sm\\:text-3xl{font-size:1.875rem}.sm\\:text-4xl{font-size:2.25rem}.sm\\:text-5xl{font-size:3rem}.sm\\:italic{font-style:italic}.sm\\:roman{font-style:normal}.sm\\:uppercase{text-transform:uppercase}.sm\\:lowercase{text-transform:lowercase}.sm\\:capitalize{text-transform:capitalize}.sm\\:normal-case{text-transform:none}.sm\\:underline{text-decoration:underline}.sm\\:line-through{text-decoration:line-through}.sm\\:no-underline{text-decoration:none}.sm\\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sm\\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.sm\\:hover\\:italic:hover{font-style:italic}.sm\\:hover\\:roman:hover{font-style:normal}.sm\\:hover\\:uppercase:hover{text-transform:uppercase}.sm\\:hover\\:lowercase:hover{text-transform:lowercase}.sm\\:hover\\:capitalize:hover{text-transform:capitalize}.sm\\:hover\\:normal-case:hover{text-transform:none}.sm\\:hover\\:underline:hover{text-decoration:underline}.sm\\:hover\\:line-through:hover{text-decoration:line-through}.sm\\:hover\\:no-underline:hover{text-decoration:none}.sm\\:hover\\:antialiased:hover{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sm\\:hover\\:subpixel-antialiased:hover{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.sm\\:focus\\:italic:focus{font-style:italic}.sm\\:focus\\:roman:focus{font-style:normal}.sm\\:focus\\:uppercase:focus{text-transform:uppercase}.sm\\:focus\\:lowercase:focus{text-transform:lowercase}.sm\\:focus\\:capitalize:focus{text-transform:capitalize}.sm\\:focus\\:normal-case:focus{text-transform:none}.sm\\:focus\\:underline:focus{text-decoration:underline}.sm\\:focus\\:line-through:focus{text-decoration:line-through}.sm\\:focus\\:no-underline:focus{text-decoration:none}.sm\\:focus\\:antialiased:focus{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sm\\:focus\\:subpixel-antialiased:focus{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.sm\\:tracking-tight{letter-spacing:-.05em}.sm\\:tracking-normal{letter-spacing:0}.sm\\:tracking-wide{letter-spacing:.05em}.sm\\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sm\\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sm\\:align-baseline{vertical-align:baseline}.sm\\:align-top{vertical-align:top}.sm\\:align-middle{vertical-align:middle}.sm\\:align-bottom{vertical-align:bottom}.sm\\:align-text-top{vertical-align:text-top}.sm\\:align-text-bottom{vertical-align:text-bottom}.sm\\:visible{visibility:visible}.sm\\:invisible{visibility:hidden}.sm\\:whitespace-normal{white-space:normal}.sm\\:whitespace-no-wrap{white-space:nowrap}.sm\\:whitespace-pre{white-space:pre}.sm\\:whitespace-pre-line{white-space:pre-line}.sm\\:whitespace-pre-wrap{white-space:pre-wrap}.sm\\:break-words{word-wrap:break-word}.sm\\:break-normal{word-wrap:normal}.sm\\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\\:w-1{width:.25rem}.sm\\:w-2{width:.5rem}.sm\\:w-3{width:.75rem}.sm\\:w-4{width:1rem}.sm\\:w-5{width:1.25rem}.sm\\:w-6{width:1.5rem}.sm\\:w-8{width:2rem}.sm\\:w-10{width:2.5rem}.sm\\:w-12{width:3rem}.sm\\:w-16{width:4rem}.sm\\:w-24{width:6rem}.sm\\:w-32{width:8rem}.sm\\:w-48{width:12rem}.sm\\:w-64{width:16rem}.sm\\:w-auto{width:auto}.sm\\:w-px{width:1px}.sm\\:w-1\\/2{width:50%}.sm\\:w-1\\/3{width:33.33333%}.sm\\:w-2\\/3{width:66.66667%}.sm\\:w-1\\/4{width:25%}.sm\\:w-3\\/4{width:75%}.sm\\:w-1\\/5{width:20%}.sm\\:w-2\\/5{width:40%}.sm\\:w-3\\/5{width:60%}.sm\\:w-4\\/5{width:80%}.sm\\:w-1\\/6{width:16.66667%}.sm\\:w-5\\/6{width:83.33333%}.sm\\:w-full{width:100%}.sm\\:w-screen{width:100vw}.sm\\:z-0{z-index:0}.sm\\:z-10{z-index:10}.sm\\:z-20{z-index:20}.sm\\:z-30{z-index:30}.sm\\:z-40{z-index:40}.sm\\:z-50{z-index:50}.sm\\:z-auto{z-index:auto}}@media (min-width:768px){.md\\:list-reset{list-style:none;padding:0}.md\\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.md\\:bg-fixed{background-attachment:fixed}.md\\:bg-local{background-attachment:local}.md\\:bg-scroll{background-attachment:scroll}.md\\:bg-transparent{background-color:transparent}.md\\:bg-black{background-color:var(--black)}.md\\:bg-white{background-color:var(--white)}.md\\:bg-primary{background-color:var(--primary)}.md\\:bg-secondary{background-color:var(--secondary)}.md\\:bg-info{background-color:var(--info)}.md\\:bg-warning{background-color:var(--warning)}.md\\:bg-success{background-color:var(--success)}.md\\:bg-danger{background-color:var(--danger)}.md\\:bg-sidebar{background-color:var(--sidebar)}.md\\:bg-documentation{background-color:var(--documentation)}.md\\:bg-navbar{background-color:var(--navbar)}.md\\:bg-grey-darkest{background-color:#3d4852}.md\\:bg-grey-darker{background-color:#606f7b}.md\\:bg-grey-dark{background-color:#8795a1}.md\\:bg-grey{background-color:#b8c2cc}.md\\:bg-grey-light{background-color:#dae1e7}.md\\:bg-grey-lighter{background-color:#f1f5f8}.md\\:bg-grey-lightest{background-color:#f8fafc}.md\\:bg-red-darkest{background-color:#3b0d0c}.md\\:bg-red-darker{background-color:#621b18}.md\\:bg-red-dark{background-color:#cc1f1a}.md\\:bg-red{background-color:#e3342f}.md\\:bg-red-light{background-color:#ef5753}.md\\:bg-red-lighter{background-color:#f9acaa}.md\\:bg-red-lightest{background-color:#fcebea}.md\\:bg-orange-darkest{background-color:#462a16}.md\\:bg-orange-darker{background-color:#613b1f}.md\\:bg-orange-dark{background-color:#de751f}.md\\:bg-orange{background-color:#f6993f}.md\\:bg-orange-light{background-color:#faad63}.md\\:bg-orange-lighter{background-color:#fcd9b6}.md\\:bg-orange-lightest{background-color:#fff5eb}.md\\:bg-yellow-darkest{background-color:#453411}.md\\:bg-yellow-darker{background-color:#684f1d}.md\\:bg-yellow-dark{background-color:#f2d024}.md\\:bg-yellow{background-color:#ffed4a}.md\\:bg-yellow-light{background-color:#fff382}.md\\:bg-yellow-lighter{background-color:#fff9c2}.md\\:bg-yellow-lightest{background-color:#fcfbeb}.md\\:bg-green-darkest{background-color:#0f2f21}.md\\:bg-green-darker{background-color:#1a4731}.md\\:bg-green-dark{background-color:#1f9d55}.md\\:bg-green{background-color:#38c172}.md\\:bg-green-light{background-color:#51d88a}.md\\:bg-green-lighter{background-color:#a2f5bf}.md\\:bg-green-lightest{background-color:#e3fcec}.md\\:bg-teal-darkest{background-color:#0d3331}.md\\:bg-teal-darker{background-color:#20504f}.md\\:bg-teal-dark{background-color:#38a89d}.md\\:bg-teal{background-color:#4dc0b5}.md\\:bg-teal-light{background-color:#64d5ca}.md\\:bg-teal-lighter{background-color:#a0f0ed}.md\\:bg-teal-lightest{background-color:#e8fffe}.md\\:bg-blue-darkest{background-color:#12283a}.md\\:bg-blue-darker{background-color:#1c3d5a}.md\\:bg-blue-dark{background-color:#2779bd}.md\\:bg-blue{background-color:#3490dc}.md\\:bg-blue-light{background-color:#6cb2eb}.md\\:bg-blue-lighter{background-color:#bcdefa}.md\\:bg-blue-lightest{background-color:#eff8ff}.md\\:bg-indigo-darkest{background-color:#191e38}.md\\:bg-indigo-darker{background-color:#2f365f}.md\\:bg-indigo-dark{background-color:#5661b3}.md\\:bg-indigo{background-color:#6574cd}.md\\:bg-indigo-light{background-color:#7886d7}.md\\:bg-indigo-lighter{background-color:#b2b7ff}.md\\:bg-indigo-lightest{background-color:#e6e8ff}.md\\:bg-purple-darkest{background-color:#21183c}.md\\:bg-purple-darker{background-color:#382b5f}.md\\:bg-purple-dark{background-color:#794acf}.md\\:bg-purple{background-color:#9561e2}.md\\:bg-purple-light{background-color:#a779e9}.md\\:bg-purple-lighter{background-color:#d6bbfc}.md\\:bg-purple-lightest{background-color:#f3ebff}.md\\:bg-pink-darkest{background-color:#451225}.md\\:bg-pink-darker{background-color:#6f213f}.md\\:bg-pink-dark{background-color:#eb5286}.md\\:bg-pink{background-color:#f66d9b}.md\\:bg-pink-light{background-color:#fa7ea8}.md\\:bg-pink-lighter{background-color:#ffbbca}.md\\:bg-pink-lightest{background-color:#ffebef}.md\\:hover\\:bg-transparent:hover{background-color:transparent}.md\\:hover\\:bg-black:hover{background-color:var(--black)}.md\\:hover\\:bg-white:hover{background-color:var(--white)}.md\\:hover\\:bg-primary:hover{background-color:var(--primary)}.md\\:hover\\:bg-secondary:hover{background-color:var(--secondary)}.md\\:hover\\:bg-info:hover{background-color:var(--info)}.md\\:hover\\:bg-warning:hover{background-color:var(--warning)}.md\\:hover\\:bg-success:hover{background-color:var(--success)}.md\\:hover\\:bg-danger:hover{background-color:var(--danger)}.md\\:hover\\:bg-sidebar:hover{background-color:var(--sidebar)}.md\\:hover\\:bg-documentation:hover{background-color:var(--documentation)}.md\\:hover\\:bg-navbar:hover{background-color:var(--navbar)}.md\\:hover\\:bg-grey-darkest:hover{background-color:#3d4852}.md\\:hover\\:bg-grey-darker:hover{background-color:#606f7b}.md\\:hover\\:bg-grey-dark:hover{background-color:#8795a1}.md\\:hover\\:bg-grey:hover{background-color:#b8c2cc}.md\\:hover\\:bg-grey-light:hover{background-color:#dae1e7}.md\\:hover\\:bg-grey-lighter:hover{background-color:#f1f5f8}.md\\:hover\\:bg-grey-lightest:hover{background-color:#f8fafc}.md\\:hover\\:bg-red-darkest:hover{background-color:#3b0d0c}.md\\:hover\\:bg-red-darker:hover{background-color:#621b18}.md\\:hover\\:bg-red-dark:hover{background-color:#cc1f1a}.md\\:hover\\:bg-red:hover{background-color:#e3342f}.md\\:hover\\:bg-red-light:hover{background-color:#ef5753}.md\\:hover\\:bg-red-lighter:hover{background-color:#f9acaa}.md\\:hover\\:bg-red-lightest:hover{background-color:#fcebea}.md\\:hover\\:bg-orange-darkest:hover{background-color:#462a16}.md\\:hover\\:bg-orange-darker:hover{background-color:#613b1f}.md\\:hover\\:bg-orange-dark:hover{background-color:#de751f}.md\\:hover\\:bg-orange:hover{background-color:#f6993f}.md\\:hover\\:bg-orange-light:hover{background-color:#faad63}.md\\:hover\\:bg-orange-lighter:hover{background-color:#fcd9b6}.md\\:hover\\:bg-orange-lightest:hover{background-color:#fff5eb}.md\\:hover\\:bg-yellow-darkest:hover{background-color:#453411}.md\\:hover\\:bg-yellow-darker:hover{background-color:#684f1d}.md\\:hover\\:bg-yellow-dark:hover{background-color:#f2d024}.md\\:hover\\:bg-yellow:hover{background-color:#ffed4a}.md\\:hover\\:bg-yellow-light:hover{background-color:#fff382}.md\\:hover\\:bg-yellow-lighter:hover{background-color:#fff9c2}.md\\:hover\\:bg-yellow-lightest:hover{background-color:#fcfbeb}.md\\:hover\\:bg-green-darkest:hover{background-color:#0f2f21}.md\\:hover\\:bg-green-darker:hover{background-color:#1a4731}.md\\:hover\\:bg-green-dark:hover{background-color:#1f9d55}.md\\:hover\\:bg-green:hover{background-color:#38c172}.md\\:hover\\:bg-green-light:hover{background-color:#51d88a}.md\\:hover\\:bg-green-lighter:hover{background-color:#a2f5bf}.md\\:hover\\:bg-green-lightest:hover{background-color:#e3fcec}.md\\:hover\\:bg-teal-darkest:hover{background-color:#0d3331}.md\\:hover\\:bg-teal-darker:hover{background-color:#20504f}.md\\:hover\\:bg-teal-dark:hover{background-color:#38a89d}.md\\:hover\\:bg-teal:hover{background-color:#4dc0b5}.md\\:hover\\:bg-teal-light:hover{background-color:#64d5ca}.md\\:hover\\:bg-teal-lighter:hover{background-color:#a0f0ed}.md\\:hover\\:bg-teal-lightest:hover{background-color:#e8fffe}.md\\:hover\\:bg-blue-darkest:hover{background-color:#12283a}.md\\:hover\\:bg-blue-darker:hover{background-color:#1c3d5a}.md\\:hover\\:bg-blue-dark:hover{background-color:#2779bd}.md\\:hover\\:bg-blue:hover{background-color:#3490dc}.md\\:hover\\:bg-blue-light:hover{background-color:#6cb2eb}.md\\:hover\\:bg-blue-lighter:hover{background-color:#bcdefa}.md\\:hover\\:bg-blue-lightest:hover{background-color:#eff8ff}.md\\:hover\\:bg-indigo-darkest:hover{background-color:#191e38}.md\\:hover\\:bg-indigo-darker:hover{background-color:#2f365f}.md\\:hover\\:bg-indigo-dark:hover{background-color:#5661b3}.md\\:hover\\:bg-indigo:hover{background-color:#6574cd}.md\\:hover\\:bg-indigo-light:hover{background-color:#7886d7}.md\\:hover\\:bg-indigo-lighter:hover{background-color:#b2b7ff}.md\\:hover\\:bg-indigo-lightest:hover{background-color:#e6e8ff}.md\\:hover\\:bg-purple-darkest:hover{background-color:#21183c}.md\\:hover\\:bg-purple-darker:hover{background-color:#382b5f}.md\\:hover\\:bg-purple-dark:hover{background-color:#794acf}.md\\:hover\\:bg-purple:hover{background-color:#9561e2}.md\\:hover\\:bg-purple-light:hover{background-color:#a779e9}.md\\:hover\\:bg-purple-lighter:hover{background-color:#d6bbfc}.md\\:hover\\:bg-purple-lightest:hover{background-color:#f3ebff}.md\\:hover\\:bg-pink-darkest:hover{background-color:#451225}.md\\:hover\\:bg-pink-darker:hover{background-color:#6f213f}.md\\:hover\\:bg-pink-dark:hover{background-color:#eb5286}.md\\:hover\\:bg-pink:hover{background-color:#f66d9b}.md\\:hover\\:bg-pink-light:hover{background-color:#fa7ea8}.md\\:hover\\:bg-pink-lighter:hover{background-color:#ffbbca}.md\\:hover\\:bg-pink-lightest:hover{background-color:#ffebef}.md\\:focus\\:bg-transparent:focus{background-color:transparent}.md\\:focus\\:bg-black:focus{background-color:var(--black)}.md\\:focus\\:bg-white:focus{background-color:var(--white)}.md\\:focus\\:bg-primary:focus{background-color:var(--primary)}.md\\:focus\\:bg-secondary:focus{background-color:var(--secondary)}.md\\:focus\\:bg-info:focus{background-color:var(--info)}.md\\:focus\\:bg-warning:focus{background-color:var(--warning)}.md\\:focus\\:bg-success:focus{background-color:var(--success)}.md\\:focus\\:bg-danger:focus{background-color:var(--danger)}.md\\:focus\\:bg-sidebar:focus{background-color:var(--sidebar)}.md\\:focus\\:bg-documentation:focus{background-color:var(--documentation)}.md\\:focus\\:bg-navbar:focus{background-color:var(--navbar)}.md\\:focus\\:bg-grey-darkest:focus{background-color:#3d4852}.md\\:focus\\:bg-grey-darker:focus{background-color:#606f7b}.md\\:focus\\:bg-grey-dark:focus{background-color:#8795a1}.md\\:focus\\:bg-grey:focus{background-color:#b8c2cc}.md\\:focus\\:bg-grey-light:focus{background-color:#dae1e7}.md\\:focus\\:bg-grey-lighter:focus{background-color:#f1f5f8}.md\\:focus\\:bg-grey-lightest:focus{background-color:#f8fafc}.md\\:focus\\:bg-red-darkest:focus{background-color:#3b0d0c}.md\\:focus\\:bg-red-darker:focus{background-color:#621b18}.md\\:focus\\:bg-red-dark:focus{background-color:#cc1f1a}.md\\:focus\\:bg-red:focus{background-color:#e3342f}.md\\:focus\\:bg-red-light:focus{background-color:#ef5753}.md\\:focus\\:bg-red-lighter:focus{background-color:#f9acaa}.md\\:focus\\:bg-red-lightest:focus{background-color:#fcebea}.md\\:focus\\:bg-orange-darkest:focus{background-color:#462a16}.md\\:focus\\:bg-orange-darker:focus{background-color:#613b1f}.md\\:focus\\:bg-orange-dark:focus{background-color:#de751f}.md\\:focus\\:bg-orange:focus{background-color:#f6993f}.md\\:focus\\:bg-orange-light:focus{background-color:#faad63}.md\\:focus\\:bg-orange-lighter:focus{background-color:#fcd9b6}.md\\:focus\\:bg-orange-lightest:focus{background-color:#fff5eb}.md\\:focus\\:bg-yellow-darkest:focus{background-color:#453411}.md\\:focus\\:bg-yellow-darker:focus{background-color:#684f1d}.md\\:focus\\:bg-yellow-dark:focus{background-color:#f2d024}.md\\:focus\\:bg-yellow:focus{background-color:#ffed4a}.md\\:focus\\:bg-yellow-light:focus{background-color:#fff382}.md\\:focus\\:bg-yellow-lighter:focus{background-color:#fff9c2}.md\\:focus\\:bg-yellow-lightest:focus{background-color:#fcfbeb}.md\\:focus\\:bg-green-darkest:focus{background-color:#0f2f21}.md\\:focus\\:bg-green-darker:focus{background-color:#1a4731}.md\\:focus\\:bg-green-dark:focus{background-color:#1f9d55}.md\\:focus\\:bg-green:focus{background-color:#38c172}.md\\:focus\\:bg-green-light:focus{background-color:#51d88a}.md\\:focus\\:bg-green-lighter:focus{background-color:#a2f5bf}.md\\:focus\\:bg-green-lightest:focus{background-color:#e3fcec}.md\\:focus\\:bg-teal-darkest:focus{background-color:#0d3331}.md\\:focus\\:bg-teal-darker:focus{background-color:#20504f}.md\\:focus\\:bg-teal-dark:focus{background-color:#38a89d}.md\\:focus\\:bg-teal:focus{background-color:#4dc0b5}.md\\:focus\\:bg-teal-light:focus{background-color:#64d5ca}.md\\:focus\\:bg-teal-lighter:focus{background-color:#a0f0ed}.md\\:focus\\:bg-teal-lightest:focus{background-color:#e8fffe}.md\\:focus\\:bg-blue-darkest:focus{background-color:#12283a}.md\\:focus\\:bg-blue-darker:focus{background-color:#1c3d5a}.md\\:focus\\:bg-blue-dark:focus{background-color:#2779bd}.md\\:focus\\:bg-blue:focus{background-color:#3490dc}.md\\:focus\\:bg-blue-light:focus{background-color:#6cb2eb}.md\\:focus\\:bg-blue-lighter:focus{background-color:#bcdefa}.md\\:focus\\:bg-blue-lightest:focus{background-color:#eff8ff}.md\\:focus\\:bg-indigo-darkest:focus{background-color:#191e38}.md\\:focus\\:bg-indigo-darker:focus{background-color:#2f365f}.md\\:focus\\:bg-indigo-dark:focus{background-color:#5661b3}.md\\:focus\\:bg-indigo:focus{background-color:#6574cd}.md\\:focus\\:bg-indigo-light:focus{background-color:#7886d7}.md\\:focus\\:bg-indigo-lighter:focus{background-color:#b2b7ff}.md\\:focus\\:bg-indigo-lightest:focus{background-color:#e6e8ff}.md\\:focus\\:bg-purple-darkest:focus{background-color:#21183c}.md\\:focus\\:bg-purple-darker:focus{background-color:#382b5f}.md\\:focus\\:bg-purple-dark:focus{background-color:#794acf}.md\\:focus\\:bg-purple:focus{background-color:#9561e2}.md\\:focus\\:bg-purple-light:focus{background-color:#a779e9}.md\\:focus\\:bg-purple-lighter:focus{background-color:#d6bbfc}.md\\:focus\\:bg-purple-lightest:focus{background-color:#f3ebff}.md\\:focus\\:bg-pink-darkest:focus{background-color:#451225}.md\\:focus\\:bg-pink-darker:focus{background-color:#6f213f}.md\\:focus\\:bg-pink-dark:focus{background-color:#eb5286}.md\\:focus\\:bg-pink:focus{background-color:#f66d9b}.md\\:focus\\:bg-pink-light:focus{background-color:#fa7ea8}.md\\:focus\\:bg-pink-lighter:focus{background-color:#ffbbca}.md\\:focus\\:bg-pink-lightest:focus{background-color:#ffebef}.md\\:bg-bottom{background-position:bottom}.md\\:bg-center{background-position:50%}.md\\:bg-left{background-position:0}.md\\:bg-left-bottom{background-position:0 100%}.md\\:bg-left-top{background-position:0 0}.md\\:bg-right{background-position:100%}.md\\:bg-right-bottom{background-position:100% 100%}.md\\:bg-right-top{background-position:100% 0}.md\\:bg-top{background-position:top}.md\\:bg-repeat{background-repeat:repeat}.md\\:bg-no-repeat{background-repeat:no-repeat}.md\\:bg-repeat-x{background-repeat:repeat-x}.md\\:bg-repeat-y{background-repeat:repeat-y}.md\\:bg-auto{background-size:auto}.md\\:bg-cover{background-size:cover}.md\\:bg-contain{background-size:contain}.md\\:border-transparent{border-color:transparent}.md\\:border-black{border-color:var(--black)}.md\\:border-white{border-color:var(--white)}.md\\:border-primary{border-color:var(--primary)}.md\\:border-secondary{border-color:var(--secondary)}.md\\:border-info{border-color:var(--info)}.md\\:border-warning{border-color:var(--warning)}.md\\:border-success{border-color:var(--success)}.md\\:border-danger{border-color:var(--danger)}.md\\:border-sidebar{border-color:var(--sidebar)}.md\\:border-documentation{border-color:var(--documentation)}.md\\:border-navbar{border-color:var(--navbar)}.md\\:border-grey-darkest{border-color:#3d4852}.md\\:border-grey-darker{border-color:#606f7b}.md\\:border-grey-dark{border-color:#8795a1}.md\\:border-grey{border-color:#b8c2cc}.md\\:border-grey-light{border-color:#dae1e7}.md\\:border-grey-lighter{border-color:#f1f5f8}.md\\:border-grey-lightest{border-color:#f8fafc}.md\\:border-red-darkest{border-color:#3b0d0c}.md\\:border-red-darker{border-color:#621b18}.md\\:border-red-dark{border-color:#cc1f1a}.md\\:border-red{border-color:#e3342f}.md\\:border-red-light{border-color:#ef5753}.md\\:border-red-lighter{border-color:#f9acaa}.md\\:border-red-lightest{border-color:#fcebea}.md\\:border-orange-darkest{border-color:#462a16}.md\\:border-orange-darker{border-color:#613b1f}.md\\:border-orange-dark{border-color:#de751f}.md\\:border-orange{border-color:#f6993f}.md\\:border-orange-light{border-color:#faad63}.md\\:border-orange-lighter{border-color:#fcd9b6}.md\\:border-orange-lightest{border-color:#fff5eb}.md\\:border-yellow-darkest{border-color:#453411}.md\\:border-yellow-darker{border-color:#684f1d}.md\\:border-yellow-dark{border-color:#f2d024}.md\\:border-yellow{border-color:#ffed4a}.md\\:border-yellow-light{border-color:#fff382}.md\\:border-yellow-lighter{border-color:#fff9c2}.md\\:border-yellow-lightest{border-color:#fcfbeb}.md\\:border-green-darkest{border-color:#0f2f21}.md\\:border-green-darker{border-color:#1a4731}.md\\:border-green-dark{border-color:#1f9d55}.md\\:border-green{border-color:#38c172}.md\\:border-green-light{border-color:#51d88a}.md\\:border-green-lighter{border-color:#a2f5bf}.md\\:border-green-lightest{border-color:#e3fcec}.md\\:border-teal-darkest{border-color:#0d3331}.md\\:border-teal-darker{border-color:#20504f}.md\\:border-teal-dark{border-color:#38a89d}.md\\:border-teal{border-color:#4dc0b5}.md\\:border-teal-light{border-color:#64d5ca}.md\\:border-teal-lighter{border-color:#a0f0ed}.md\\:border-teal-lightest{border-color:#e8fffe}.md\\:border-blue-darkest{border-color:#12283a}.md\\:border-blue-darker{border-color:#1c3d5a}.md\\:border-blue-dark{border-color:#2779bd}.md\\:border-blue{border-color:#3490dc}.md\\:border-blue-light{border-color:#6cb2eb}.md\\:border-blue-lighter{border-color:#bcdefa}.md\\:border-blue-lightest{border-color:#eff8ff}.md\\:border-indigo-darkest{border-color:#191e38}.md\\:border-indigo-darker{border-color:#2f365f}.md\\:border-indigo-dark{border-color:#5661b3}.md\\:border-indigo{border-color:#6574cd}.md\\:border-indigo-light{border-color:#7886d7}.md\\:border-indigo-lighter{border-color:#b2b7ff}.md\\:border-indigo-lightest{border-color:#e6e8ff}.md\\:border-purple-darkest{border-color:#21183c}.md\\:border-purple-darker{border-color:#382b5f}.md\\:border-purple-dark{border-color:#794acf}.md\\:border-purple{border-color:#9561e2}.md\\:border-purple-light{border-color:#a779e9}.md\\:border-purple-lighter{border-color:#d6bbfc}.md\\:border-purple-lightest{border-color:#f3ebff}.md\\:border-pink-darkest{border-color:#451225}.md\\:border-pink-darker{border-color:#6f213f}.md\\:border-pink-dark{border-color:#eb5286}.md\\:border-pink{border-color:#f66d9b}.md\\:border-pink-light{border-color:#fa7ea8}.md\\:border-pink-lighter{border-color:#ffbbca}.md\\:border-pink-lightest{border-color:#ffebef}.md\\:hover\\:border-transparent:hover{border-color:transparent}.md\\:hover\\:border-black:hover{border-color:var(--black)}.md\\:hover\\:border-white:hover{border-color:var(--white)}.md\\:hover\\:border-primary:hover{border-color:var(--primary)}.md\\:hover\\:border-secondary:hover{border-color:var(--secondary)}.md\\:hover\\:border-info:hover{border-color:var(--info)}.md\\:hover\\:border-warning:hover{border-color:var(--warning)}.md\\:hover\\:border-success:hover{border-color:var(--success)}.md\\:hover\\:border-danger:hover{border-color:var(--danger)}.md\\:hover\\:border-sidebar:hover{border-color:var(--sidebar)}.md\\:hover\\:border-documentation:hover{border-color:var(--documentation)}.md\\:hover\\:border-navbar:hover{border-color:var(--navbar)}.md\\:hover\\:border-grey-darkest:hover{border-color:#3d4852}.md\\:hover\\:border-grey-darker:hover{border-color:#606f7b}.md\\:hover\\:border-grey-dark:hover{border-color:#8795a1}.md\\:hover\\:border-grey:hover{border-color:#b8c2cc}.md\\:hover\\:border-grey-light:hover{border-color:#dae1e7}.md\\:hover\\:border-grey-lighter:hover{border-color:#f1f5f8}.md\\:hover\\:border-grey-lightest:hover{border-color:#f8fafc}.md\\:hover\\:border-red-darkest:hover{border-color:#3b0d0c}.md\\:hover\\:border-red-darker:hover{border-color:#621b18}.md\\:hover\\:border-red-dark:hover{border-color:#cc1f1a}.md\\:hover\\:border-red:hover{border-color:#e3342f}.md\\:hover\\:border-red-light:hover{border-color:#ef5753}.md\\:hover\\:border-red-lighter:hover{border-color:#f9acaa}.md\\:hover\\:border-red-lightest:hover{border-color:#fcebea}.md\\:hover\\:border-orange-darkest:hover{border-color:#462a16}.md\\:hover\\:border-orange-darker:hover{border-color:#613b1f}.md\\:hover\\:border-orange-dark:hover{border-color:#de751f}.md\\:hover\\:border-orange:hover{border-color:#f6993f}.md\\:hover\\:border-orange-light:hover{border-color:#faad63}.md\\:hover\\:border-orange-lighter:hover{border-color:#fcd9b6}.md\\:hover\\:border-orange-lightest:hover{border-color:#fff5eb}.md\\:hover\\:border-yellow-darkest:hover{border-color:#453411}.md\\:hover\\:border-yellow-darker:hover{border-color:#684f1d}.md\\:hover\\:border-yellow-dark:hover{border-color:#f2d024}.md\\:hover\\:border-yellow:hover{border-color:#ffed4a}.md\\:hover\\:border-yellow-light:hover{border-color:#fff382}.md\\:hover\\:border-yellow-lighter:hover{border-color:#fff9c2}.md\\:hover\\:border-yellow-lightest:hover{border-color:#fcfbeb}.md\\:hover\\:border-green-darkest:hover{border-color:#0f2f21}.md\\:hover\\:border-green-darker:hover{border-color:#1a4731}.md\\:hover\\:border-green-dark:hover{border-color:#1f9d55}.md\\:hover\\:border-green:hover{border-color:#38c172}.md\\:hover\\:border-green-light:hover{border-color:#51d88a}.md\\:hover\\:border-green-lighter:hover{border-color:#a2f5bf}.md\\:hover\\:border-green-lightest:hover{border-color:#e3fcec}.md\\:hover\\:border-teal-darkest:hover{border-color:#0d3331}.md\\:hover\\:border-teal-darker:hover{border-color:#20504f}.md\\:hover\\:border-teal-dark:hover{border-color:#38a89d}.md\\:hover\\:border-teal:hover{border-color:#4dc0b5}.md\\:hover\\:border-teal-light:hover{border-color:#64d5ca}.md\\:hover\\:border-teal-lighter:hover{border-color:#a0f0ed}.md\\:hover\\:border-teal-lightest:hover{border-color:#e8fffe}.md\\:hover\\:border-blue-darkest:hover{border-color:#12283a}.md\\:hover\\:border-blue-darker:hover{border-color:#1c3d5a}.md\\:hover\\:border-blue-dark:hover{border-color:#2779bd}.md\\:hover\\:border-blue:hover{border-color:#3490dc}.md\\:hover\\:border-blue-light:hover{border-color:#6cb2eb}.md\\:hover\\:border-blue-lighter:hover{border-color:#bcdefa}.md\\:hover\\:border-blue-lightest:hover{border-color:#eff8ff}.md\\:hover\\:border-indigo-darkest:hover{border-color:#191e38}.md\\:hover\\:border-indigo-darker:hover{border-color:#2f365f}.md\\:hover\\:border-indigo-dark:hover{border-color:#5661b3}.md\\:hover\\:border-indigo:hover{border-color:#6574cd}.md\\:hover\\:border-indigo-light:hover{border-color:#7886d7}.md\\:hover\\:border-indigo-lighter:hover{border-color:#b2b7ff}.md\\:hover\\:border-indigo-lightest:hover{border-color:#e6e8ff}.md\\:hover\\:border-purple-darkest:hover{border-color:#21183c}.md\\:hover\\:border-purple-darker:hover{border-color:#382b5f}.md\\:hover\\:border-purple-dark:hover{border-color:#794acf}.md\\:hover\\:border-purple:hover{border-color:#9561e2}.md\\:hover\\:border-purple-light:hover{border-color:#a779e9}.md\\:hover\\:border-purple-lighter:hover{border-color:#d6bbfc}.md\\:hover\\:border-purple-lightest:hover{border-color:#f3ebff}.md\\:hover\\:border-pink-darkest:hover{border-color:#451225}.md\\:hover\\:border-pink-darker:hover{border-color:#6f213f}.md\\:hover\\:border-pink-dark:hover{border-color:#eb5286}.md\\:hover\\:border-pink:hover{border-color:#f66d9b}.md\\:hover\\:border-pink-light:hover{border-color:#fa7ea8}.md\\:hover\\:border-pink-lighter:hover{border-color:#ffbbca}.md\\:hover\\:border-pink-lightest:hover{border-color:#ffebef}.md\\:focus\\:border-transparent:focus{border-color:transparent}.md\\:focus\\:border-black:focus{border-color:var(--black)}.md\\:focus\\:border-white:focus{border-color:var(--white)}.md\\:focus\\:border-primary:focus{border-color:var(--primary)}.md\\:focus\\:border-secondary:focus{border-color:var(--secondary)}.md\\:focus\\:border-info:focus{border-color:var(--info)}.md\\:focus\\:border-warning:focus{border-color:var(--warning)}.md\\:focus\\:border-success:focus{border-color:var(--success)}.md\\:focus\\:border-danger:focus{border-color:var(--danger)}.md\\:focus\\:border-sidebar:focus{border-color:var(--sidebar)}.md\\:focus\\:border-documentation:focus{border-color:var(--documentation)}.md\\:focus\\:border-navbar:focus{border-color:var(--navbar)}.md\\:focus\\:border-grey-darkest:focus{border-color:#3d4852}.md\\:focus\\:border-grey-darker:focus{border-color:#606f7b}.md\\:focus\\:border-grey-dark:focus{border-color:#8795a1}.md\\:focus\\:border-grey:focus{border-color:#b8c2cc}.md\\:focus\\:border-grey-light:focus{border-color:#dae1e7}.md\\:focus\\:border-grey-lighter:focus{border-color:#f1f5f8}.md\\:focus\\:border-grey-lightest:focus{border-color:#f8fafc}.md\\:focus\\:border-red-darkest:focus{border-color:#3b0d0c}.md\\:focus\\:border-red-darker:focus{border-color:#621b18}.md\\:focus\\:border-red-dark:focus{border-color:#cc1f1a}.md\\:focus\\:border-red:focus{border-color:#e3342f}.md\\:focus\\:border-red-light:focus{border-color:#ef5753}.md\\:focus\\:border-red-lighter:focus{border-color:#f9acaa}.md\\:focus\\:border-red-lightest:focus{border-color:#fcebea}.md\\:focus\\:border-orange-darkest:focus{border-color:#462a16}.md\\:focus\\:border-orange-darker:focus{border-color:#613b1f}.md\\:focus\\:border-orange-dark:focus{border-color:#de751f}.md\\:focus\\:border-orange:focus{border-color:#f6993f}.md\\:focus\\:border-orange-light:focus{border-color:#faad63}.md\\:focus\\:border-orange-lighter:focus{border-color:#fcd9b6}.md\\:focus\\:border-orange-lightest:focus{border-color:#fff5eb}.md\\:focus\\:border-yellow-darkest:focus{border-color:#453411}.md\\:focus\\:border-yellow-darker:focus{border-color:#684f1d}.md\\:focus\\:border-yellow-dark:focus{border-color:#f2d024}.md\\:focus\\:border-yellow:focus{border-color:#ffed4a}.md\\:focus\\:border-yellow-light:focus{border-color:#fff382}.md\\:focus\\:border-yellow-lighter:focus{border-color:#fff9c2}.md\\:focus\\:border-yellow-lightest:focus{border-color:#fcfbeb}.md\\:focus\\:border-green-darkest:focus{border-color:#0f2f21}.md\\:focus\\:border-green-darker:focus{border-color:#1a4731}.md\\:focus\\:border-green-dark:focus{border-color:#1f9d55}.md\\:focus\\:border-green:focus{border-color:#38c172}.md\\:focus\\:border-green-light:focus{border-color:#51d88a}.md\\:focus\\:border-green-lighter:focus{border-color:#a2f5bf}.md\\:focus\\:border-green-lightest:focus{border-color:#e3fcec}.md\\:focus\\:border-teal-darkest:focus{border-color:#0d3331}.md\\:focus\\:border-teal-darker:focus{border-color:#20504f}.md\\:focus\\:border-teal-dark:focus{border-color:#38a89d}.md\\:focus\\:border-teal:focus{border-color:#4dc0b5}.md\\:focus\\:border-teal-light:focus{border-color:#64d5ca}.md\\:focus\\:border-teal-lighter:focus{border-color:#a0f0ed}.md\\:focus\\:border-teal-lightest:focus{border-color:#e8fffe}.md\\:focus\\:border-blue-darkest:focus{border-color:#12283a}.md\\:focus\\:border-blue-darker:focus{border-color:#1c3d5a}.md\\:focus\\:border-blue-dark:focus{border-color:#2779bd}.md\\:focus\\:border-blue:focus{border-color:#3490dc}.md\\:focus\\:border-blue-light:focus{border-color:#6cb2eb}.md\\:focus\\:border-blue-lighter:focus{border-color:#bcdefa}.md\\:focus\\:border-blue-lightest:focus{border-color:#eff8ff}.md\\:focus\\:border-indigo-darkest:focus{border-color:#191e38}.md\\:focus\\:border-indigo-darker:focus{border-color:#2f365f}.md\\:focus\\:border-indigo-dark:focus{border-color:#5661b3}.md\\:focus\\:border-indigo:focus{border-color:#6574cd}.md\\:focus\\:border-indigo-light:focus{border-color:#7886d7}.md\\:focus\\:border-indigo-lighter:focus{border-color:#b2b7ff}.md\\:focus\\:border-indigo-lightest:focus{border-color:#e6e8ff}.md\\:focus\\:border-purple-darkest:focus{border-color:#21183c}.md\\:focus\\:border-purple-darker:focus{border-color:#382b5f}.md\\:focus\\:border-purple-dark:focus{border-color:#794acf}.md\\:focus\\:border-purple:focus{border-color:#9561e2}.md\\:focus\\:border-purple-light:focus{border-color:#a779e9}.md\\:focus\\:border-purple-lighter:focus{border-color:#d6bbfc}.md\\:focus\\:border-purple-lightest:focus{border-color:#f3ebff}.md\\:focus\\:border-pink-darkest:focus{border-color:#451225}.md\\:focus\\:border-pink-darker:focus{border-color:#6f213f}.md\\:focus\\:border-pink-dark:focus{border-color:#eb5286}.md\\:focus\\:border-pink:focus{border-color:#f66d9b}.md\\:focus\\:border-pink-light:focus{border-color:#fa7ea8}.md\\:focus\\:border-pink-lighter:focus{border-color:#ffbbca}.md\\:focus\\:border-pink-lightest:focus{border-color:#ffebef}.md\\:rounded-none{border-radius:0}.md\\:rounded-sm{border-radius:.125rem}.md\\:rounded{border-radius:.25rem}.md\\:rounded-lg{border-radius:.5rem}.md\\:rounded-full{border-radius:9999px}.md\\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.md\\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.md\\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.md\\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.md\\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.md\\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.md\\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.md\\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.md\\:rounded-t{border-top-left-radius:.25rem}.md\\:rounded-r,.md\\:rounded-t{border-top-right-radius:.25rem}.md\\:rounded-b,.md\\:rounded-r{border-bottom-right-radius:.25rem}.md\\:rounded-b,.md\\:rounded-l{border-bottom-left-radius:.25rem}.md\\:rounded-l{border-top-left-radius:.25rem}.md\\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.md\\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.md\\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.md\\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.md\\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.md\\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.md\\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.md\\:rounded-tl-none{border-top-left-radius:0}.md\\:rounded-tr-none{border-top-right-radius:0}.md\\:rounded-br-none{border-bottom-right-radius:0}.md\\:rounded-bl-none{border-bottom-left-radius:0}.md\\:rounded-tl-sm{border-top-left-radius:.125rem}.md\\:rounded-tr-sm{border-top-right-radius:.125rem}.md\\:rounded-br-sm{border-bottom-right-radius:.125rem}.md\\:rounded-bl-sm{border-bottom-left-radius:.125rem}.md\\:rounded-tl{border-top-left-radius:.25rem}.md\\:rounded-tr{border-top-right-radius:.25rem}.md\\:rounded-br{border-bottom-right-radius:.25rem}.md\\:rounded-bl{border-bottom-left-radius:.25rem}.md\\:rounded-tl-lg{border-top-left-radius:.5rem}.md\\:rounded-tr-lg{border-top-right-radius:.5rem}.md\\:rounded-br-lg{border-bottom-right-radius:.5rem}.md\\:rounded-bl-lg{border-bottom-left-radius:.5rem}.md\\:rounded-tl-full{border-top-left-radius:9999px}.md\\:rounded-tr-full{border-top-right-radius:9999px}.md\\:rounded-br-full{border-bottom-right-radius:9999px}.md\\:rounded-bl-full{border-bottom-left-radius:9999px}.md\\:border-solid{border-style:solid}.md\\:border-dashed{border-style:dashed}.md\\:border-dotted{border-style:dotted}.md\\:border-none{border-style:none}.md\\:border-0{border-width:0}.md\\:border-2{border-width:2px}.md\\:border-4{border-width:4px}.md\\:border-8{border-width:8px}.md\\:border{border-width:1px}.md\\:border-t-0{border-top-width:0}.md\\:border-r-0{border-right-width:0}.md\\:border-b-0{border-bottom-width:0}.md\\:border-l-0{border-left-width:0}.md\\:border-t-2{border-top-width:2px}.md\\:border-r-2{border-right-width:2px}.md\\:border-b-2{border-bottom-width:2px}.md\\:border-l-2{border-left-width:2px}.md\\:border-t-4{border-top-width:4px}.md\\:border-r-4{border-right-width:4px}.md\\:border-b-4{border-bottom-width:4px}.md\\:border-l-4{border-left-width:4px}.md\\:border-t-8{border-top-width:8px}.md\\:border-r-8{border-right-width:8px}.md\\:border-b-8{border-bottom-width:8px}.md\\:border-l-8{border-left-width:8px}.md\\:border-t{border-top-width:1px}.md\\:border-r{border-right-width:1px}.md\\:border-b{border-bottom-width:1px}.md\\:border-l{border-left-width:1px}.md\\:cursor-auto{cursor:auto}.md\\:cursor-default{cursor:default}.md\\:cursor-pointer{cursor:pointer}.md\\:cursor-wait{cursor:wait}.md\\:cursor-move{cursor:move}.md\\:cursor-not-allowed{cursor:not-allowed}.md\\:block{display:block}.md\\:inline-block{display:inline-block}.md\\:inline{display:inline}.md\\:table{display:table}.md\\:table-row{display:table-row}.md\\:table-cell{display:table-cell}.md\\:hidden{display:none}.md\\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.md\\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.md\\:flex-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.md\\:flex-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.md\\:flex-col{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.md\\:flex-col-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.md\\:flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.md\\:flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.md\\:flex-no-wrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.md\\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.md\\:items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.md\\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.md\\:items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.md\\:items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.md\\:self-auto{-ms-flex-item-align:auto;align-self:auto}.md\\:self-start{-ms-flex-item-align:start;align-self:flex-start}.md\\:self-end{-ms-flex-item-align:end;align-self:flex-end}.md\\:self-center{-ms-flex-item-align:center;align-self:center}.md\\:self-stretch{-ms-flex-item-align:stretch;align-self:stretch}.md\\:justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.md\\:justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.md\\:justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.md\\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.md\\:justify-around{-ms-flex-pack:distribute;justify-content:space-around}.md\\:content-center{-ms-flex-line-pack:center;align-content:center}.md\\:content-start{-ms-flex-line-pack:start;align-content:flex-start}.md\\:content-end{-ms-flex-line-pack:end;align-content:flex-end}.md\\:content-between{-ms-flex-line-pack:justify;align-content:space-between}.md\\:content-around{-ms-flex-line-pack:distribute;align-content:space-around}.md\\:flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.md\\:flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.md\\:flex-initial{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.md\\:flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.md\\:flex-grow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.md\\:flex-shrink{-ms-flex-negative:1;flex-shrink:1}.md\\:flex-no-grow{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.md\\:flex-no-shrink{-ms-flex-negative:0;flex-shrink:0}.md\\:float-right{float:right}.md\\:float-left{float:left}.md\\:float-none{float:none}.md\\:clearfix:after{content:\"\";display:table;clear:both}.md\\:font-sans{font-family:system-ui,BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.md\\:font-serif{font-family:Constantia,Lucida Bright,Lucidabright,Lucida Serif,Lucida,DejaVu Serif,Bitstream Vera Serif,Liberation Serif,Georgia,serif}.md\\:font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.md\\:font-hairline{font-weight:100}.md\\:font-thin{font-weight:200}.md\\:font-light{font-weight:300}.md\\:font-normal{font-weight:400}.md\\:font-medium{font-weight:500}.md\\:font-semibold{font-weight:600}.md\\:font-bold{font-weight:700}.md\\:font-extrabold{font-weight:800}.md\\:font-black{font-weight:900}.md\\:hover\\:font-hairline:hover{font-weight:100}.md\\:hover\\:font-thin:hover{font-weight:200}.md\\:hover\\:font-light:hover{font-weight:300}.md\\:hover\\:font-normal:hover{font-weight:400}.md\\:hover\\:font-medium:hover{font-weight:500}.md\\:hover\\:font-semibold:hover{font-weight:600}.md\\:hover\\:font-bold:hover{font-weight:700}.md\\:hover\\:font-extrabold:hover{font-weight:800}.md\\:hover\\:font-black:hover{font-weight:900}.md\\:focus\\:font-hairline:focus{font-weight:100}.md\\:focus\\:font-thin:focus{font-weight:200}.md\\:focus\\:font-light:focus{font-weight:300}.md\\:focus\\:font-normal:focus{font-weight:400}.md\\:focus\\:font-medium:focus{font-weight:500}.md\\:focus\\:font-semibold:focus{font-weight:600}.md\\:focus\\:font-bold:focus{font-weight:700}.md\\:focus\\:font-extrabold:focus{font-weight:800}.md\\:focus\\:font-black:focus{font-weight:900}.md\\:h-1{height:.25rem}.md\\:h-2{height:.5rem}.md\\:h-3{height:.75rem}.md\\:h-4{height:1rem}.md\\:h-5{height:1.25rem}.md\\:h-6{height:1.5rem}.md\\:h-8{height:2rem}.md\\:h-10{height:2.5rem}.md\\:h-12{height:3rem}.md\\:h-16{height:4rem}.md\\:h-24{height:6rem}.md\\:h-32{height:8rem}.md\\:h-48{height:12rem}.md\\:h-64{height:16rem}.md\\:h-auto{height:auto}.md\\:h-px{height:1px}.md\\:h-full{height:100%}.md\\:h-screen{height:100vh}.md\\:leading-none{line-height:1}.md\\:leading-tight{line-height:1.25}.md\\:leading-normal{line-height:1.5}.md\\:leading-large{line-height:2}.md\\:leading-loose{line-height:2.25}.md\\:m-0{margin:0}.md\\:m-1{margin:.25rem}.md\\:m-2{margin:.5rem}.md\\:m-3{margin:.75rem}.md\\:m-4{margin:1rem}.md\\:m-5{margin:1.25rem}.md\\:m-6{margin:1.5rem}.md\\:m-8{margin:2rem}.md\\:m-10{margin:2.5rem}.md\\:m-12{margin:3rem}.md\\:m-16{margin:4rem}.md\\:m-20{margin:5rem}.md\\:m-24{margin:6rem}.md\\:m-32{margin:8rem}.md\\:m-auto{margin:auto}.md\\:m-px{margin:1px}.md\\:my-0{margin-top:0;margin-bottom:0}.md\\:mx-0{margin-left:0;margin-right:0}.md\\:my-1{margin-top:.25rem;margin-bottom:.25rem}.md\\:mx-1{margin-left:.25rem;margin-right:.25rem}.md\\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\\:mx-2{margin-left:.5rem;margin-right:.5rem}.md\\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\\:my-4{margin-top:1rem;margin-bottom:1rem}.md\\:mx-4{margin-left:1rem;margin-right:1rem}.md\\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.md\\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.md\\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.md\\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\\:my-8{margin-top:2rem;margin-bottom:2rem}.md\\:mx-8{margin-left:2rem;margin-right:2rem}.md\\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.md\\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.md\\:my-12{margin-top:3rem;margin-bottom:3rem}.md\\:mx-12{margin-left:3rem;margin-right:3rem}.md\\:my-16{margin-top:4rem;margin-bottom:4rem}.md\\:mx-16{margin-left:4rem;margin-right:4rem}.md\\:my-20{margin-top:5rem;margin-bottom:5rem}.md\\:mx-20{margin-left:5rem;margin-right:5rem}.md\\:my-24{margin-top:6rem;margin-bottom:6rem}.md\\:mx-24{margin-left:6rem;margin-right:6rem}.md\\:my-32{margin-top:8rem;margin-bottom:8rem}.md\\:mx-32{margin-left:8rem;margin-right:8rem}.md\\:my-auto{margin-top:auto;margin-bottom:auto}.md\\:mx-auto{margin-left:auto;margin-right:auto}.md\\:my-px{margin-top:1px;margin-bottom:1px}.md\\:mx-px{margin-left:1px;margin-right:1px}.md\\:mt-0{margin-top:0}.md\\:mr-0{margin-right:0}.md\\:mb-0{margin-bottom:0}.md\\:ml-0{margin-left:0}.md\\:mt-1{margin-top:.25rem}.md\\:mr-1{margin-right:.25rem}.md\\:mb-1{margin-bottom:.25rem}.md\\:ml-1{margin-left:.25rem}.md\\:mt-2{margin-top:.5rem}.md\\:mr-2{margin-right:.5rem}.md\\:mb-2{margin-bottom:.5rem}.md\\:ml-2{margin-left:.5rem}.md\\:mt-3{margin-top:.75rem}.md\\:mr-3{margin-right:.75rem}.md\\:mb-3{margin-bottom:.75rem}.md\\:ml-3{margin-left:.75rem}.md\\:mt-4{margin-top:1rem}.md\\:mr-4{margin-right:1rem}.md\\:mb-4{margin-bottom:1rem}.md\\:ml-4{margin-left:1rem}.md\\:mt-5{margin-top:1.25rem}.md\\:mr-5{margin-right:1.25rem}.md\\:mb-5{margin-bottom:1.25rem}.md\\:ml-5{margin-left:1.25rem}.md\\:mt-6{margin-top:1.5rem}.md\\:mr-6{margin-right:1.5rem}.md\\:mb-6{margin-bottom:1.5rem}.md\\:ml-6{margin-left:1.5rem}.md\\:mt-8{margin-top:2rem}.md\\:mr-8{margin-right:2rem}.md\\:mb-8{margin-bottom:2rem}.md\\:ml-8{margin-left:2rem}.md\\:mt-10{margin-top:2.5rem}.md\\:mr-10{margin-right:2.5rem}.md\\:mb-10{margin-bottom:2.5rem}.md\\:ml-10{margin-left:2.5rem}.md\\:mt-12{margin-top:3rem}.md\\:mr-12{margin-right:3rem}.md\\:mb-12{margin-bottom:3rem}.md\\:ml-12{margin-left:3rem}.md\\:mt-16{margin-top:4rem}.md\\:mr-16{margin-right:4rem}.md\\:mb-16{margin-bottom:4rem}.md\\:ml-16{margin-left:4rem}.md\\:mt-20{margin-top:5rem}.md\\:mr-20{margin-right:5rem}.md\\:mb-20{margin-bottom:5rem}.md\\:ml-20{margin-left:5rem}.md\\:mt-24{margin-top:6rem}.md\\:mr-24{margin-right:6rem}.md\\:mb-24{margin-bottom:6rem}.md\\:ml-24{margin-left:6rem}.md\\:mt-32{margin-top:8rem}.md\\:mr-32{margin-right:8rem}.md\\:mb-32{margin-bottom:8rem}.md\\:ml-32{margin-left:8rem}.md\\:mt-auto{margin-top:auto}.md\\:mr-auto{margin-right:auto}.md\\:mb-auto{margin-bottom:auto}.md\\:ml-auto{margin-left:auto}.md\\:mt-px{margin-top:1px}.md\\:mr-px{margin-right:1px}.md\\:mb-px{margin-bottom:1px}.md\\:ml-px{margin-left:1px}.md\\:max-h-full{max-height:100%}.md\\:max-h-screen{max-height:100vh}.md\\:max-w-xs{max-width:20rem}.md\\:max-w-sm{max-width:30rem}.md\\:max-w-md{max-width:40rem}.md\\:max-w-lg{max-width:50rem}.md\\:max-w-xl{max-width:60rem}.md\\:max-w-2xl{max-width:70rem}.md\\:max-w-3xl{max-width:80rem}.md\\:max-w-4xl{max-width:90rem}.md\\:max-w-5xl{max-width:100rem}.md\\:max-w-full{max-width:100%}.md\\:min-h-0{min-height:0}.md\\:min-h-full{min-height:100%}.md\\:min-h-screen{min-height:100vh}.md\\:min-w-0{min-width:0}.md\\:min-w-full{min-width:100%}.md\\:-m-0{margin:0}.md\\:-m-1{margin:-.25rem}.md\\:-m-2{margin:-.5rem}.md\\:-m-3{margin:-.75rem}.md\\:-m-4{margin:-1rem}.md\\:-m-5{margin:-1.25rem}.md\\:-m-6{margin:-1.5rem}.md\\:-m-8{margin:-2rem}.md\\:-m-10{margin:-2.5rem}.md\\:-m-12{margin:-3rem}.md\\:-m-16{margin:-4rem}.md\\:-m-20{margin:-5rem}.md\\:-m-24{margin:-6rem}.md\\:-m-32{margin:-8rem}.md\\:-m-px{margin:-1px}.md\\:-my-0{margin-top:0;margin-bottom:0}.md\\:-mx-0{margin-left:0;margin-right:0}.md\\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.md\\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.md\\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.md\\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.md\\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.md\\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.md\\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.md\\:-mx-4{margin-left:-1rem;margin-right:-1rem}.md\\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.md\\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.md\\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.md\\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.md\\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.md\\:-mx-8{margin-left:-2rem;margin-right:-2rem}.md\\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.md\\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.md\\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.md\\:-mx-12{margin-left:-3rem;margin-right:-3rem}.md\\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.md\\:-mx-16{margin-left:-4rem;margin-right:-4rem}.md\\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.md\\:-mx-20{margin-left:-5rem;margin-right:-5rem}.md\\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.md\\:-mx-24{margin-left:-6rem;margin-right:-6rem}.md\\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.md\\:-mx-32{margin-left:-8rem;margin-right:-8rem}.md\\:-my-px{margin-top:-1px;margin-bottom:-1px}.md\\:-mx-px{margin-left:-1px;margin-right:-1px}.md\\:-mt-0{margin-top:0}.md\\:-mr-0{margin-right:0}.md\\:-mb-0{margin-bottom:0}.md\\:-ml-0{margin-left:0}.md\\:-mt-1{margin-top:-.25rem}.md\\:-mr-1{margin-right:-.25rem}.md\\:-mb-1{margin-bottom:-.25rem}.md\\:-ml-1{margin-left:-.25rem}.md\\:-mt-2{margin-top:-.5rem}.md\\:-mr-2{margin-right:-.5rem}.md\\:-mb-2{margin-bottom:-.5rem}.md\\:-ml-2{margin-left:-.5rem}.md\\:-mt-3{margin-top:-.75rem}.md\\:-mr-3{margin-right:-.75rem}.md\\:-mb-3{margin-bottom:-.75rem}.md\\:-ml-3{margin-left:-.75rem}.md\\:-mt-4{margin-top:-1rem}.md\\:-mr-4{margin-right:-1rem}.md\\:-mb-4{margin-bottom:-1rem}.md\\:-ml-4{margin-left:-1rem}.md\\:-mt-5{margin-top:-1.25rem}.md\\:-mr-5{margin-right:-1.25rem}.md\\:-mb-5{margin-bottom:-1.25rem}.md\\:-ml-5{margin-left:-1.25rem}.md\\:-mt-6{margin-top:-1.5rem}.md\\:-mr-6{margin-right:-1.5rem}.md\\:-mb-6{margin-bottom:-1.5rem}.md\\:-ml-6{margin-left:-1.5rem}.md\\:-mt-8{margin-top:-2rem}.md\\:-mr-8{margin-right:-2rem}.md\\:-mb-8{margin-bottom:-2rem}.md\\:-ml-8{margin-left:-2rem}.md\\:-mt-10{margin-top:-2.5rem}.md\\:-mr-10{margin-right:-2.5rem}.md\\:-mb-10{margin-bottom:-2.5rem}.md\\:-ml-10{margin-left:-2.5rem}.md\\:-mt-12{margin-top:-3rem}.md\\:-mr-12{margin-right:-3rem}.md\\:-mb-12{margin-bottom:-3rem}.md\\:-ml-12{margin-left:-3rem}.md\\:-mt-16{margin-top:-4rem}.md\\:-mr-16{margin-right:-4rem}.md\\:-mb-16{margin-bottom:-4rem}.md\\:-ml-16{margin-left:-4rem}.md\\:-mt-20{margin-top:-5rem}.md\\:-mr-20{margin-right:-5rem}.md\\:-mb-20{margin-bottom:-5rem}.md\\:-ml-20{margin-left:-5rem}.md\\:-mt-24{margin-top:-6rem}.md\\:-mr-24{margin-right:-6rem}.md\\:-mb-24{margin-bottom:-6rem}.md\\:-ml-24{margin-left:-6rem}.md\\:-mt-32{margin-top:-8rem}.md\\:-mr-32{margin-right:-8rem}.md\\:-mb-32{margin-bottom:-8rem}.md\\:-ml-32{margin-left:-8rem}.md\\:-mt-px{margin-top:-1px}.md\\:-mr-px{margin-right:-1px}.md\\:-mb-px{margin-bottom:-1px}.md\\:-ml-px{margin-left:-1px}.md\\:opacity-0{opacity:0}.md\\:opacity-25{opacity:.25}.md\\:opacity-50{opacity:.5}.md\\:opacity-75{opacity:.75}.md\\:opacity-100{opacity:1}.md\\:overflow-auto{overflow:auto}.md\\:overflow-hidden{overflow:hidden}.md\\:overflow-visible{overflow:visible}.md\\:overflow-scroll{overflow:scroll}.md\\:overflow-x-auto{overflow-x:auto}.md\\:overflow-y-auto{overflow-y:auto}.md\\:overflow-x-hidden{overflow-x:hidden}.md\\:overflow-y-hidden{overflow-y:hidden}.md\\:overflow-x-visible{overflow-x:visible}.md\\:overflow-y-visible{overflow-y:visible}.md\\:overflow-x-scroll{overflow-x:scroll}.md\\:overflow-y-scroll{overflow-y:scroll}.md\\:scrolling-touch{-webkit-overflow-scrolling:touch}.md\\:scrolling-auto{-webkit-overflow-scrolling:auto}.md\\:p-0{padding:0}.md\\:p-1{padding:.25rem}.md\\:p-2{padding:.5rem}.md\\:p-3{padding:.75rem}.md\\:p-4{padding:1rem}.md\\:p-5{padding:1.25rem}.md\\:p-6{padding:1.5rem}.md\\:p-8{padding:2rem}.md\\:p-10{padding:2.5rem}.md\\:p-12{padding:3rem}.md\\:p-16{padding:4rem}.md\\:p-20{padding:5rem}.md\\:p-24{padding:6rem}.md\\:p-32{padding:8rem}.md\\:p-50{padding:20rem}.md\\:p-px{padding:1px}.md\\:py-0{padding-top:0;padding-bottom:0}.md\\:px-0{padding-left:0;padding-right:0}.md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}.md\\:px-1{padding-left:.25rem;padding-right:.25rem}.md\\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\\:px-2{padding-left:.5rem;padding-right:.5rem}.md\\:py-3{padding-top:.75rem;padding-bottom:.75rem}.md\\:px-3{padding-left:.75rem;padding-right:.75rem}.md\\:py-4{padding-top:1rem;padding-bottom:1rem}.md\\:px-4{padding-left:1rem;padding-right:1rem}.md\\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.md\\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.md\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\\:py-8{padding-top:2rem;padding-bottom:2rem}.md\\:px-8{padding-left:2rem;padding-right:2rem}.md\\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\\:py-12{padding-top:3rem;padding-bottom:3rem}.md\\:px-12{padding-left:3rem;padding-right:3rem}.md\\:py-16{padding-top:4rem;padding-bottom:4rem}.md\\:px-16{padding-left:4rem;padding-right:4rem}.md\\:py-20{padding-top:5rem;padding-bottom:5rem}.md\\:px-20{padding-left:5rem;padding-right:5rem}.md\\:py-24{padding-top:6rem;padding-bottom:6rem}.md\\:px-24{padding-left:6rem;padding-right:6rem}.md\\:py-32{padding-top:8rem;padding-bottom:8rem}.md\\:px-32{padding-left:8rem;padding-right:8rem}.md\\:py-50{padding-top:20rem;padding-bottom:20rem}.md\\:px-50{padding-left:20rem;padding-right:20rem}.md\\:py-px{padding-top:1px;padding-bottom:1px}.md\\:px-px{padding-left:1px;padding-right:1px}.md\\:pt-0{padding-top:0}.md\\:pr-0{padding-right:0}.md\\:pb-0{padding-bottom:0}.md\\:pl-0{padding-left:0}.md\\:pt-1{padding-top:.25rem}.md\\:pr-1{padding-right:.25rem}.md\\:pb-1{padding-bottom:.25rem}.md\\:pl-1{padding-left:.25rem}.md\\:pt-2{padding-top:.5rem}.md\\:pr-2{padding-right:.5rem}.md\\:pb-2{padding-bottom:.5rem}.md\\:pl-2{padding-left:.5rem}.md\\:pt-3{padding-top:.75rem}.md\\:pr-3{padding-right:.75rem}.md\\:pb-3{padding-bottom:.75rem}.md\\:pl-3{padding-left:.75rem}.md\\:pt-4{padding-top:1rem}.md\\:pr-4{padding-right:1rem}.md\\:pb-4{padding-bottom:1rem}.md\\:pl-4{padding-left:1rem}.md\\:pt-5{padding-top:1.25rem}.md\\:pr-5{padding-right:1.25rem}.md\\:pb-5{padding-bottom:1.25rem}.md\\:pl-5{padding-left:1.25rem}.md\\:pt-6{padding-top:1.5rem}.md\\:pr-6{padding-right:1.5rem}.md\\:pb-6{padding-bottom:1.5rem}.md\\:pl-6{padding-left:1.5rem}.md\\:pt-8{padding-top:2rem}.md\\:pr-8{padding-right:2rem}.md\\:pb-8{padding-bottom:2rem}.md\\:pl-8{padding-left:2rem}.md\\:pt-10{padding-top:2.5rem}.md\\:pr-10{padding-right:2.5rem}.md\\:pb-10{padding-bottom:2.5rem}.md\\:pl-10{padding-left:2.5rem}.md\\:pt-12{padding-top:3rem}.md\\:pr-12{padding-right:3rem}.md\\:pb-12{padding-bottom:3rem}.md\\:pl-12{padding-left:3rem}.md\\:pt-16{padding-top:4rem}.md\\:pr-16{padding-right:4rem}.md\\:pb-16{padding-bottom:4rem}.md\\:pl-16{padding-left:4rem}.md\\:pt-20{padding-top:5rem}.md\\:pr-20{padding-right:5rem}.md\\:pb-20{padding-bottom:5rem}.md\\:pl-20{padding-left:5rem}.md\\:pt-24{padding-top:6rem}.md\\:pr-24{padding-right:6rem}.md\\:pb-24{padding-bottom:6rem}.md\\:pl-24{padding-left:6rem}.md\\:pt-32{padding-top:8rem}.md\\:pr-32{padding-right:8rem}.md\\:pb-32{padding-bottom:8rem}.md\\:pl-32{padding-left:8rem}.md\\:pt-50{padding-top:20rem}.md\\:pr-50{padding-right:20rem}.md\\:pb-50{padding-bottom:20rem}.md\\:pl-50{padding-left:20rem}.md\\:pt-px{padding-top:1px}.md\\:pr-px{padding-right:1px}.md\\:pb-px{padding-bottom:1px}.md\\:pl-px{padding-left:1px}.md\\:pointer-events-none{pointer-events:none}.md\\:pointer-events-auto{pointer-events:auto}.md\\:static{position:static}.md\\:fixed{position:fixed}.md\\:absolute{position:absolute}.md\\:relative{position:relative}.md\\:sticky{position:-webkit-sticky;position:sticky}.md\\:pin-none{top:auto;right:auto;bottom:auto;left:auto}.md\\:pin{right:0;left:0}.md\\:pin,.md\\:pin-y{top:0;bottom:0}.md\\:pin-x{right:0;left:0}.md\\:pin-t{top:0}.md\\:pin-r{right:0}.md\\:pin-b{bottom:0}.md\\:pin-l{left:0}.md\\:resize-none{resize:none}.md\\:resize-y{resize:vertical}.md\\:resize-x{resize:horizontal}.md\\:resize{resize:both}.md\\:shadow{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.md\\:shadow-xs{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.md\\:shadow-sm{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.md\\:shadow-md{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.md\\:shadow-lg{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.md\\:shadow-inner{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\\:shadow-outline{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.md\\:shadow-none{-webkit-box-shadow:none;box-shadow:none}.md\\:hover\\:shadow:hover{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.md\\:hover\\:shadow-xs:hover{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.md\\:hover\\:shadow-sm:hover{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.md\\:hover\\:shadow-md:hover{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.md\\:hover\\:shadow-lg:hover{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.md\\:hover\\:shadow-inner:hover{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\\:hover\\:shadow-outline:hover{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.md\\:hover\\:shadow-none:hover{-webkit-box-shadow:none;box-shadow:none}.md\\:focus\\:shadow:focus{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.md\\:focus\\:shadow-xs:focus{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.md\\:focus\\:shadow-sm:focus{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.md\\:focus\\:shadow-md:focus{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.md\\:focus\\:shadow-lg:focus{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.md\\:focus\\:shadow-inner:focus{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\\:focus\\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.md\\:focus\\:shadow-none:focus{-webkit-box-shadow:none;box-shadow:none}.md\\:table-auto{table-layout:auto}.md\\:table-fixed{table-layout:fixed}.md\\:text-left{text-align:left}.md\\:text-center{text-align:center}.md\\:text-right{text-align:right}.md\\:text-justify{text-align:justify}.md\\:text-transparent{color:transparent}.md\\:text-black{color:var(--black)}.md\\:text-white{color:var(--white)}.md\\:text-primary{color:var(--primary)}.md\\:text-secondary{color:var(--secondary)}.md\\:text-info{color:var(--info)}.md\\:text-warning{color:var(--warning)}.md\\:text-success{color:var(--success)}.md\\:text-danger{color:var(--danger)}.md\\:text-sidebar{color:var(--sidebar)}.md\\:text-documentation{color:var(--documentation)}.md\\:text-navbar{color:var(--navbar)}.md\\:text-grey-darkest{color:#3d4852}.md\\:text-grey-darker{color:#606f7b}.md\\:text-grey-dark{color:#8795a1}.md\\:text-grey{color:#b8c2cc}.md\\:text-grey-light{color:#dae1e7}.md\\:text-grey-lighter{color:#f1f5f8}.md\\:text-grey-lightest{color:#f8fafc}.md\\:text-red-darkest{color:#3b0d0c}.md\\:text-red-darker{color:#621b18}.md\\:text-red-dark{color:#cc1f1a}.md\\:text-red{color:#e3342f}.md\\:text-red-light{color:#ef5753}.md\\:text-red-lighter{color:#f9acaa}.md\\:text-red-lightest{color:#fcebea}.md\\:text-orange-darkest{color:#462a16}.md\\:text-orange-darker{color:#613b1f}.md\\:text-orange-dark{color:#de751f}.md\\:text-orange{color:#f6993f}.md\\:text-orange-light{color:#faad63}.md\\:text-orange-lighter{color:#fcd9b6}.md\\:text-orange-lightest{color:#fff5eb}.md\\:text-yellow-darkest{color:#453411}.md\\:text-yellow-darker{color:#684f1d}.md\\:text-yellow-dark{color:#f2d024}.md\\:text-yellow{color:#ffed4a}.md\\:text-yellow-light{color:#fff382}.md\\:text-yellow-lighter{color:#fff9c2}.md\\:text-yellow-lightest{color:#fcfbeb}.md\\:text-green-darkest{color:#0f2f21}.md\\:text-green-darker{color:#1a4731}.md\\:text-green-dark{color:#1f9d55}.md\\:text-green{color:#38c172}.md\\:text-green-light{color:#51d88a}.md\\:text-green-lighter{color:#a2f5bf}.md\\:text-green-lightest{color:#e3fcec}.md\\:text-teal-darkest{color:#0d3331}.md\\:text-teal-darker{color:#20504f}.md\\:text-teal-dark{color:#38a89d}.md\\:text-teal{color:#4dc0b5}.md\\:text-teal-light{color:#64d5ca}.md\\:text-teal-lighter{color:#a0f0ed}.md\\:text-teal-lightest{color:#e8fffe}.md\\:text-blue-darkest{color:#12283a}.md\\:text-blue-darker{color:#1c3d5a}.md\\:text-blue-dark{color:#2779bd}.md\\:text-blue{color:#3490dc}.md\\:text-blue-light{color:#6cb2eb}.md\\:text-blue-lighter{color:#bcdefa}.md\\:text-blue-lightest{color:#eff8ff}.md\\:text-indigo-darkest{color:#191e38}.md\\:text-indigo-darker{color:#2f365f}.md\\:text-indigo-dark{color:#5661b3}.md\\:text-indigo{color:#6574cd}.md\\:text-indigo-light{color:#7886d7}.md\\:text-indigo-lighter{color:#b2b7ff}.md\\:text-indigo-lightest{color:#e6e8ff}.md\\:text-purple-darkest{color:#21183c}.md\\:text-purple-darker{color:#382b5f}.md\\:text-purple-dark{color:#794acf}.md\\:text-purple{color:#9561e2}.md\\:text-purple-light{color:#a779e9}.md\\:text-purple-lighter{color:#d6bbfc}.md\\:text-purple-lightest{color:#f3ebff}.md\\:text-pink-darkest{color:#451225}.md\\:text-pink-darker{color:#6f213f}.md\\:text-pink-dark{color:#eb5286}.md\\:text-pink{color:#f66d9b}.md\\:text-pink-light{color:#fa7ea8}.md\\:text-pink-lighter{color:#ffbbca}.md\\:text-pink-lightest{color:#ffebef}.md\\:hover\\:text-transparent:hover{color:transparent}.md\\:hover\\:text-black:hover{color:var(--black)}.md\\:hover\\:text-white:hover{color:var(--white)}.md\\:hover\\:text-primary:hover{color:var(--primary)}.md\\:hover\\:text-secondary:hover{color:var(--secondary)}.md\\:hover\\:text-info:hover{color:var(--info)}.md\\:hover\\:text-warning:hover{color:var(--warning)}.md\\:hover\\:text-success:hover{color:var(--success)}.md\\:hover\\:text-danger:hover{color:var(--danger)}.md\\:hover\\:text-sidebar:hover{color:var(--sidebar)}.md\\:hover\\:text-documentation:hover{color:var(--documentation)}.md\\:hover\\:text-navbar:hover{color:var(--navbar)}.md\\:hover\\:text-grey-darkest:hover{color:#3d4852}.md\\:hover\\:text-grey-darker:hover{color:#606f7b}.md\\:hover\\:text-grey-dark:hover{color:#8795a1}.md\\:hover\\:text-grey:hover{color:#b8c2cc}.md\\:hover\\:text-grey-light:hover{color:#dae1e7}.md\\:hover\\:text-grey-lighter:hover{color:#f1f5f8}.md\\:hover\\:text-grey-lightest:hover{color:#f8fafc}.md\\:hover\\:text-red-darkest:hover{color:#3b0d0c}.md\\:hover\\:text-red-darker:hover{color:#621b18}.md\\:hover\\:text-red-dark:hover{color:#cc1f1a}.md\\:hover\\:text-red:hover{color:#e3342f}.md\\:hover\\:text-red-light:hover{color:#ef5753}.md\\:hover\\:text-red-lighter:hover{color:#f9acaa}.md\\:hover\\:text-red-lightest:hover{color:#fcebea}.md\\:hover\\:text-orange-darkest:hover{color:#462a16}.md\\:hover\\:text-orange-darker:hover{color:#613b1f}.md\\:hover\\:text-orange-dark:hover{color:#de751f}.md\\:hover\\:text-orange:hover{color:#f6993f}.md\\:hover\\:text-orange-light:hover{color:#faad63}.md\\:hover\\:text-orange-lighter:hover{color:#fcd9b6}.md\\:hover\\:text-orange-lightest:hover{color:#fff5eb}.md\\:hover\\:text-yellow-darkest:hover{color:#453411}.md\\:hover\\:text-yellow-darker:hover{color:#684f1d}.md\\:hover\\:text-yellow-dark:hover{color:#f2d024}.md\\:hover\\:text-yellow:hover{color:#ffed4a}.md\\:hover\\:text-yellow-light:hover{color:#fff382}.md\\:hover\\:text-yellow-lighter:hover{color:#fff9c2}.md\\:hover\\:text-yellow-lightest:hover{color:#fcfbeb}.md\\:hover\\:text-green-darkest:hover{color:#0f2f21}.md\\:hover\\:text-green-darker:hover{color:#1a4731}.md\\:hover\\:text-green-dark:hover{color:#1f9d55}.md\\:hover\\:text-green:hover{color:#38c172}.md\\:hover\\:text-green-light:hover{color:#51d88a}.md\\:hover\\:text-green-lighter:hover{color:#a2f5bf}.md\\:hover\\:text-green-lightest:hover{color:#e3fcec}.md\\:hover\\:text-teal-darkest:hover{color:#0d3331}.md\\:hover\\:text-teal-darker:hover{color:#20504f}.md\\:hover\\:text-teal-dark:hover{color:#38a89d}.md\\:hover\\:text-teal:hover{color:#4dc0b5}.md\\:hover\\:text-teal-light:hover{color:#64d5ca}.md\\:hover\\:text-teal-lighter:hover{color:#a0f0ed}.md\\:hover\\:text-teal-lightest:hover{color:#e8fffe}.md\\:hover\\:text-blue-darkest:hover{color:#12283a}.md\\:hover\\:text-blue-darker:hover{color:#1c3d5a}.md\\:hover\\:text-blue-dark:hover{color:#2779bd}.md\\:hover\\:text-blue:hover{color:#3490dc}.md\\:hover\\:text-blue-light:hover{color:#6cb2eb}.md\\:hover\\:text-blue-lighter:hover{color:#bcdefa}.md\\:hover\\:text-blue-lightest:hover{color:#eff8ff}.md\\:hover\\:text-indigo-darkest:hover{color:#191e38}.md\\:hover\\:text-indigo-darker:hover{color:#2f365f}.md\\:hover\\:text-indigo-dark:hover{color:#5661b3}.md\\:hover\\:text-indigo:hover{color:#6574cd}.md\\:hover\\:text-indigo-light:hover{color:#7886d7}.md\\:hover\\:text-indigo-lighter:hover{color:#b2b7ff}.md\\:hover\\:text-indigo-lightest:hover{color:#e6e8ff}.md\\:hover\\:text-purple-darkest:hover{color:#21183c}.md\\:hover\\:text-purple-darker:hover{color:#382b5f}.md\\:hover\\:text-purple-dark:hover{color:#794acf}.md\\:hover\\:text-purple:hover{color:#9561e2}.md\\:hover\\:text-purple-light:hover{color:#a779e9}.md\\:hover\\:text-purple-lighter:hover{color:#d6bbfc}.md\\:hover\\:text-purple-lightest:hover{color:#f3ebff}.md\\:hover\\:text-pink-darkest:hover{color:#451225}.md\\:hover\\:text-pink-darker:hover{color:#6f213f}.md\\:hover\\:text-pink-dark:hover{color:#eb5286}.md\\:hover\\:text-pink:hover{color:#f66d9b}.md\\:hover\\:text-pink-light:hover{color:#fa7ea8}.md\\:hover\\:text-pink-lighter:hover{color:#ffbbca}.md\\:hover\\:text-pink-lightest:hover{color:#ffebef}.md\\:focus\\:text-transparent:focus{color:transparent}.md\\:focus\\:text-black:focus{color:var(--black)}.md\\:focus\\:text-white:focus{color:var(--white)}.md\\:focus\\:text-primary:focus{color:var(--primary)}.md\\:focus\\:text-secondary:focus{color:var(--secondary)}.md\\:focus\\:text-info:focus{color:var(--info)}.md\\:focus\\:text-warning:focus{color:var(--warning)}.md\\:focus\\:text-success:focus{color:var(--success)}.md\\:focus\\:text-danger:focus{color:var(--danger)}.md\\:focus\\:text-sidebar:focus{color:var(--sidebar)}.md\\:focus\\:text-documentation:focus{color:var(--documentation)}.md\\:focus\\:text-navbar:focus{color:var(--navbar)}.md\\:focus\\:text-grey-darkest:focus{color:#3d4852}.md\\:focus\\:text-grey-darker:focus{color:#606f7b}.md\\:focus\\:text-grey-dark:focus{color:#8795a1}.md\\:focus\\:text-grey:focus{color:#b8c2cc}.md\\:focus\\:text-grey-light:focus{color:#dae1e7}.md\\:focus\\:text-grey-lighter:focus{color:#f1f5f8}.md\\:focus\\:text-grey-lightest:focus{color:#f8fafc}.md\\:focus\\:text-red-darkest:focus{color:#3b0d0c}.md\\:focus\\:text-red-darker:focus{color:#621b18}.md\\:focus\\:text-red-dark:focus{color:#cc1f1a}.md\\:focus\\:text-red:focus{color:#e3342f}.md\\:focus\\:text-red-light:focus{color:#ef5753}.md\\:focus\\:text-red-lighter:focus{color:#f9acaa}.md\\:focus\\:text-red-lightest:focus{color:#fcebea}.md\\:focus\\:text-orange-darkest:focus{color:#462a16}.md\\:focus\\:text-orange-darker:focus{color:#613b1f}.md\\:focus\\:text-orange-dark:focus{color:#de751f}.md\\:focus\\:text-orange:focus{color:#f6993f}.md\\:focus\\:text-orange-light:focus{color:#faad63}.md\\:focus\\:text-orange-lighter:focus{color:#fcd9b6}.md\\:focus\\:text-orange-lightest:focus{color:#fff5eb}.md\\:focus\\:text-yellow-darkest:focus{color:#453411}.md\\:focus\\:text-yellow-darker:focus{color:#684f1d}.md\\:focus\\:text-yellow-dark:focus{color:#f2d024}.md\\:focus\\:text-yellow:focus{color:#ffed4a}.md\\:focus\\:text-yellow-light:focus{color:#fff382}.md\\:focus\\:text-yellow-lighter:focus{color:#fff9c2}.md\\:focus\\:text-yellow-lightest:focus{color:#fcfbeb}.md\\:focus\\:text-green-darkest:focus{color:#0f2f21}.md\\:focus\\:text-green-darker:focus{color:#1a4731}.md\\:focus\\:text-green-dark:focus{color:#1f9d55}.md\\:focus\\:text-green:focus{color:#38c172}.md\\:focus\\:text-green-light:focus{color:#51d88a}.md\\:focus\\:text-green-lighter:focus{color:#a2f5bf}.md\\:focus\\:text-green-lightest:focus{color:#e3fcec}.md\\:focus\\:text-teal-darkest:focus{color:#0d3331}.md\\:focus\\:text-teal-darker:focus{color:#20504f}.md\\:focus\\:text-teal-dark:focus{color:#38a89d}.md\\:focus\\:text-teal:focus{color:#4dc0b5}.md\\:focus\\:text-teal-light:focus{color:#64d5ca}.md\\:focus\\:text-teal-lighter:focus{color:#a0f0ed}.md\\:focus\\:text-teal-lightest:focus{color:#e8fffe}.md\\:focus\\:text-blue-darkest:focus{color:#12283a}.md\\:focus\\:text-blue-darker:focus{color:#1c3d5a}.md\\:focus\\:text-blue-dark:focus{color:#2779bd}.md\\:focus\\:text-blue:focus{color:#3490dc}.md\\:focus\\:text-blue-light:focus{color:#6cb2eb}.md\\:focus\\:text-blue-lighter:focus{color:#bcdefa}.md\\:focus\\:text-blue-lightest:focus{color:#eff8ff}.md\\:focus\\:text-indigo-darkest:focus{color:#191e38}.md\\:focus\\:text-indigo-darker:focus{color:#2f365f}.md\\:focus\\:text-indigo-dark:focus{color:#5661b3}.md\\:focus\\:text-indigo:focus{color:#6574cd}.md\\:focus\\:text-indigo-light:focus{color:#7886d7}.md\\:focus\\:text-indigo-lighter:focus{color:#b2b7ff}.md\\:focus\\:text-indigo-lightest:focus{color:#e6e8ff}.md\\:focus\\:text-purple-darkest:focus{color:#21183c}.md\\:focus\\:text-purple-darker:focus{color:#382b5f}.md\\:focus\\:text-purple-dark:focus{color:#794acf}.md\\:focus\\:text-purple:focus{color:#9561e2}.md\\:focus\\:text-purple-light:focus{color:#a779e9}.md\\:focus\\:text-purple-lighter:focus{color:#d6bbfc}.md\\:focus\\:text-purple-lightest:focus{color:#f3ebff}.md\\:focus\\:text-pink-darkest:focus{color:#451225}.md\\:focus\\:text-pink-darker:focus{color:#6f213f}.md\\:focus\\:text-pink-dark:focus{color:#eb5286}.md\\:focus\\:text-pink:focus{color:#f66d9b}.md\\:focus\\:text-pink-light:focus{color:#fa7ea8}.md\\:focus\\:text-pink-lighter:focus{color:#ffbbca}.md\\:focus\\:text-pink-lightest:focus{color:#ffebef}.md\\:text-xs{font-size:.75rem}.md\\:text-sm{font-size:.875rem}.md\\:text-base{font-size:1rem}.md\\:text-lg{font-size:1.125rem}.md\\:text-xl{font-size:1.25rem}.md\\:text-2xl{font-size:1.5rem}.md\\:text-3xl{font-size:1.875rem}.md\\:text-4xl{font-size:2.25rem}.md\\:text-5xl{font-size:3rem}.md\\:italic{font-style:italic}.md\\:roman{font-style:normal}.md\\:uppercase{text-transform:uppercase}.md\\:lowercase{text-transform:lowercase}.md\\:capitalize{text-transform:capitalize}.md\\:normal-case{text-transform:none}.md\\:underline{text-decoration:underline}.md\\:line-through{text-decoration:line-through}.md\\:no-underline{text-decoration:none}.md\\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.md\\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.md\\:hover\\:italic:hover{font-style:italic}.md\\:hover\\:roman:hover{font-style:normal}.md\\:hover\\:uppercase:hover{text-transform:uppercase}.md\\:hover\\:lowercase:hover{text-transform:lowercase}.md\\:hover\\:capitalize:hover{text-transform:capitalize}.md\\:hover\\:normal-case:hover{text-transform:none}.md\\:hover\\:underline:hover{text-decoration:underline}.md\\:hover\\:line-through:hover{text-decoration:line-through}.md\\:hover\\:no-underline:hover{text-decoration:none}.md\\:hover\\:antialiased:hover{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.md\\:hover\\:subpixel-antialiased:hover{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.md\\:focus\\:italic:focus{font-style:italic}.md\\:focus\\:roman:focus{font-style:normal}.md\\:focus\\:uppercase:focus{text-transform:uppercase}.md\\:focus\\:lowercase:focus{text-transform:lowercase}.md\\:focus\\:capitalize:focus{text-transform:capitalize}.md\\:focus\\:normal-case:focus{text-transform:none}.md\\:focus\\:underline:focus{text-decoration:underline}.md\\:focus\\:line-through:focus{text-decoration:line-through}.md\\:focus\\:no-underline:focus{text-decoration:none}.md\\:focus\\:antialiased:focus{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.md\\:focus\\:subpixel-antialiased:focus{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.md\\:tracking-tight{letter-spacing:-.05em}.md\\:tracking-normal{letter-spacing:0}.md\\:tracking-wide{letter-spacing:.05em}.md\\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md\\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.md\\:align-baseline{vertical-align:baseline}.md\\:align-top{vertical-align:top}.md\\:align-middle{vertical-align:middle}.md\\:align-bottom{vertical-align:bottom}.md\\:align-text-top{vertical-align:text-top}.md\\:align-text-bottom{vertical-align:text-bottom}.md\\:visible{visibility:visible}.md\\:invisible{visibility:hidden}.md\\:whitespace-normal{white-space:normal}.md\\:whitespace-no-wrap{white-space:nowrap}.md\\:whitespace-pre{white-space:pre}.md\\:whitespace-pre-line{white-space:pre-line}.md\\:whitespace-pre-wrap{white-space:pre-wrap}.md\\:break-words{word-wrap:break-word}.md\\:break-normal{word-wrap:normal}.md\\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md\\:w-1{width:.25rem}.md\\:w-2{width:.5rem}.md\\:w-3{width:.75rem}.md\\:w-4{width:1rem}.md\\:w-5{width:1.25rem}.md\\:w-6{width:1.5rem}.md\\:w-8{width:2rem}.md\\:w-10{width:2.5rem}.md\\:w-12{width:3rem}.md\\:w-16{width:4rem}.md\\:w-24{width:6rem}.md\\:w-32{width:8rem}.md\\:w-48{width:12rem}.md\\:w-64{width:16rem}.md\\:w-auto{width:auto}.md\\:w-px{width:1px}.md\\:w-1\\/2{width:50%}.md\\:w-1\\/3{width:33.33333%}.md\\:w-2\\/3{width:66.66667%}.md\\:w-1\\/4{width:25%}.md\\:w-3\\/4{width:75%}.md\\:w-1\\/5{width:20%}.md\\:w-2\\/5{width:40%}.md\\:w-3\\/5{width:60%}.md\\:w-4\\/5{width:80%}.md\\:w-1\\/6{width:16.66667%}.md\\:w-5\\/6{width:83.33333%}.md\\:w-full{width:100%}.md\\:w-screen{width:100vw}.md\\:z-0{z-index:0}.md\\:z-10{z-index:10}.md\\:z-20{z-index:20}.md\\:z-30{z-index:30}.md\\:z-40{z-index:40}.md\\:z-50{z-index:50}.md\\:z-auto{z-index:auto}}@media (min-width:992px){.lg\\:list-reset{list-style:none;padding:0}.lg\\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lg\\:bg-fixed{background-attachment:fixed}.lg\\:bg-local{background-attachment:local}.lg\\:bg-scroll{background-attachment:scroll}.lg\\:bg-transparent{background-color:transparent}.lg\\:bg-black{background-color:var(--black)}.lg\\:bg-white{background-color:var(--white)}.lg\\:bg-primary{background-color:var(--primary)}.lg\\:bg-secondary{background-color:var(--secondary)}.lg\\:bg-info{background-color:var(--info)}.lg\\:bg-warning{background-color:var(--warning)}.lg\\:bg-success{background-color:var(--success)}.lg\\:bg-danger{background-color:var(--danger)}.lg\\:bg-sidebar{background-color:var(--sidebar)}.lg\\:bg-documentation{background-color:var(--documentation)}.lg\\:bg-navbar{background-color:var(--navbar)}.lg\\:bg-grey-darkest{background-color:#3d4852}.lg\\:bg-grey-darker{background-color:#606f7b}.lg\\:bg-grey-dark{background-color:#8795a1}.lg\\:bg-grey{background-color:#b8c2cc}.lg\\:bg-grey-light{background-color:#dae1e7}.lg\\:bg-grey-lighter{background-color:#f1f5f8}.lg\\:bg-grey-lightest{background-color:#f8fafc}.lg\\:bg-red-darkest{background-color:#3b0d0c}.lg\\:bg-red-darker{background-color:#621b18}.lg\\:bg-red-dark{background-color:#cc1f1a}.lg\\:bg-red{background-color:#e3342f}.lg\\:bg-red-light{background-color:#ef5753}.lg\\:bg-red-lighter{background-color:#f9acaa}.lg\\:bg-red-lightest{background-color:#fcebea}.lg\\:bg-orange-darkest{background-color:#462a16}.lg\\:bg-orange-darker{background-color:#613b1f}.lg\\:bg-orange-dark{background-color:#de751f}.lg\\:bg-orange{background-color:#f6993f}.lg\\:bg-orange-light{background-color:#faad63}.lg\\:bg-orange-lighter{background-color:#fcd9b6}.lg\\:bg-orange-lightest{background-color:#fff5eb}.lg\\:bg-yellow-darkest{background-color:#453411}.lg\\:bg-yellow-darker{background-color:#684f1d}.lg\\:bg-yellow-dark{background-color:#f2d024}.lg\\:bg-yellow{background-color:#ffed4a}.lg\\:bg-yellow-light{background-color:#fff382}.lg\\:bg-yellow-lighter{background-color:#fff9c2}.lg\\:bg-yellow-lightest{background-color:#fcfbeb}.lg\\:bg-green-darkest{background-color:#0f2f21}.lg\\:bg-green-darker{background-color:#1a4731}.lg\\:bg-green-dark{background-color:#1f9d55}.lg\\:bg-green{background-color:#38c172}.lg\\:bg-green-light{background-color:#51d88a}.lg\\:bg-green-lighter{background-color:#a2f5bf}.lg\\:bg-green-lightest{background-color:#e3fcec}.lg\\:bg-teal-darkest{background-color:#0d3331}.lg\\:bg-teal-darker{background-color:#20504f}.lg\\:bg-teal-dark{background-color:#38a89d}.lg\\:bg-teal{background-color:#4dc0b5}.lg\\:bg-teal-light{background-color:#64d5ca}.lg\\:bg-teal-lighter{background-color:#a0f0ed}.lg\\:bg-teal-lightest{background-color:#e8fffe}.lg\\:bg-blue-darkest{background-color:#12283a}.lg\\:bg-blue-darker{background-color:#1c3d5a}.lg\\:bg-blue-dark{background-color:#2779bd}.lg\\:bg-blue{background-color:#3490dc}.lg\\:bg-blue-light{background-color:#6cb2eb}.lg\\:bg-blue-lighter{background-color:#bcdefa}.lg\\:bg-blue-lightest{background-color:#eff8ff}.lg\\:bg-indigo-darkest{background-color:#191e38}.lg\\:bg-indigo-darker{background-color:#2f365f}.lg\\:bg-indigo-dark{background-color:#5661b3}.lg\\:bg-indigo{background-color:#6574cd}.lg\\:bg-indigo-light{background-color:#7886d7}.lg\\:bg-indigo-lighter{background-color:#b2b7ff}.lg\\:bg-indigo-lightest{background-color:#e6e8ff}.lg\\:bg-purple-darkest{background-color:#21183c}.lg\\:bg-purple-darker{background-color:#382b5f}.lg\\:bg-purple-dark{background-color:#794acf}.lg\\:bg-purple{background-color:#9561e2}.lg\\:bg-purple-light{background-color:#a779e9}.lg\\:bg-purple-lighter{background-color:#d6bbfc}.lg\\:bg-purple-lightest{background-color:#f3ebff}.lg\\:bg-pink-darkest{background-color:#451225}.lg\\:bg-pink-darker{background-color:#6f213f}.lg\\:bg-pink-dark{background-color:#eb5286}.lg\\:bg-pink{background-color:#f66d9b}.lg\\:bg-pink-light{background-color:#fa7ea8}.lg\\:bg-pink-lighter{background-color:#ffbbca}.lg\\:bg-pink-lightest{background-color:#ffebef}.lg\\:hover\\:bg-transparent:hover{background-color:transparent}.lg\\:hover\\:bg-black:hover{background-color:var(--black)}.lg\\:hover\\:bg-white:hover{background-color:var(--white)}.lg\\:hover\\:bg-primary:hover{background-color:var(--primary)}.lg\\:hover\\:bg-secondary:hover{background-color:var(--secondary)}.lg\\:hover\\:bg-info:hover{background-color:var(--info)}.lg\\:hover\\:bg-warning:hover{background-color:var(--warning)}.lg\\:hover\\:bg-success:hover{background-color:var(--success)}.lg\\:hover\\:bg-danger:hover{background-color:var(--danger)}.lg\\:hover\\:bg-sidebar:hover{background-color:var(--sidebar)}.lg\\:hover\\:bg-documentation:hover{background-color:var(--documentation)}.lg\\:hover\\:bg-navbar:hover{background-color:var(--navbar)}.lg\\:hover\\:bg-grey-darkest:hover{background-color:#3d4852}.lg\\:hover\\:bg-grey-darker:hover{background-color:#606f7b}.lg\\:hover\\:bg-grey-dark:hover{background-color:#8795a1}.lg\\:hover\\:bg-grey:hover{background-color:#b8c2cc}.lg\\:hover\\:bg-grey-light:hover{background-color:#dae1e7}.lg\\:hover\\:bg-grey-lighter:hover{background-color:#f1f5f8}.lg\\:hover\\:bg-grey-lightest:hover{background-color:#f8fafc}.lg\\:hover\\:bg-red-darkest:hover{background-color:#3b0d0c}.lg\\:hover\\:bg-red-darker:hover{background-color:#621b18}.lg\\:hover\\:bg-red-dark:hover{background-color:#cc1f1a}.lg\\:hover\\:bg-red:hover{background-color:#e3342f}.lg\\:hover\\:bg-red-light:hover{background-color:#ef5753}.lg\\:hover\\:bg-red-lighter:hover{background-color:#f9acaa}.lg\\:hover\\:bg-red-lightest:hover{background-color:#fcebea}.lg\\:hover\\:bg-orange-darkest:hover{background-color:#462a16}.lg\\:hover\\:bg-orange-darker:hover{background-color:#613b1f}.lg\\:hover\\:bg-orange-dark:hover{background-color:#de751f}.lg\\:hover\\:bg-orange:hover{background-color:#f6993f}.lg\\:hover\\:bg-orange-light:hover{background-color:#faad63}.lg\\:hover\\:bg-orange-lighter:hover{background-color:#fcd9b6}.lg\\:hover\\:bg-orange-lightest:hover{background-color:#fff5eb}.lg\\:hover\\:bg-yellow-darkest:hover{background-color:#453411}.lg\\:hover\\:bg-yellow-darker:hover{background-color:#684f1d}.lg\\:hover\\:bg-yellow-dark:hover{background-color:#f2d024}.lg\\:hover\\:bg-yellow:hover{background-color:#ffed4a}.lg\\:hover\\:bg-yellow-light:hover{background-color:#fff382}.lg\\:hover\\:bg-yellow-lighter:hover{background-color:#fff9c2}.lg\\:hover\\:bg-yellow-lightest:hover{background-color:#fcfbeb}.lg\\:hover\\:bg-green-darkest:hover{background-color:#0f2f21}.lg\\:hover\\:bg-green-darker:hover{background-color:#1a4731}.lg\\:hover\\:bg-green-dark:hover{background-color:#1f9d55}.lg\\:hover\\:bg-green:hover{background-color:#38c172}.lg\\:hover\\:bg-green-light:hover{background-color:#51d88a}.lg\\:hover\\:bg-green-lighter:hover{background-color:#a2f5bf}.lg\\:hover\\:bg-green-lightest:hover{background-color:#e3fcec}.lg\\:hover\\:bg-teal-darkest:hover{background-color:#0d3331}.lg\\:hover\\:bg-teal-darker:hover{background-color:#20504f}.lg\\:hover\\:bg-teal-dark:hover{background-color:#38a89d}.lg\\:hover\\:bg-teal:hover{background-color:#4dc0b5}.lg\\:hover\\:bg-teal-light:hover{background-color:#64d5ca}.lg\\:hover\\:bg-teal-lighter:hover{background-color:#a0f0ed}.lg\\:hover\\:bg-teal-lightest:hover{background-color:#e8fffe}.lg\\:hover\\:bg-blue-darkest:hover{background-color:#12283a}.lg\\:hover\\:bg-blue-darker:hover{background-color:#1c3d5a}.lg\\:hover\\:bg-blue-dark:hover{background-color:#2779bd}.lg\\:hover\\:bg-blue:hover{background-color:#3490dc}.lg\\:hover\\:bg-blue-light:hover{background-color:#6cb2eb}.lg\\:hover\\:bg-blue-lighter:hover{background-color:#bcdefa}.lg\\:hover\\:bg-blue-lightest:hover{background-color:#eff8ff}.lg\\:hover\\:bg-indigo-darkest:hover{background-color:#191e38}.lg\\:hover\\:bg-indigo-darker:hover{background-color:#2f365f}.lg\\:hover\\:bg-indigo-dark:hover{background-color:#5661b3}.lg\\:hover\\:bg-indigo:hover{background-color:#6574cd}.lg\\:hover\\:bg-indigo-light:hover{background-color:#7886d7}.lg\\:hover\\:bg-indigo-lighter:hover{background-color:#b2b7ff}.lg\\:hover\\:bg-indigo-lightest:hover{background-color:#e6e8ff}.lg\\:hover\\:bg-purple-darkest:hover{background-color:#21183c}.lg\\:hover\\:bg-purple-darker:hover{background-color:#382b5f}.lg\\:hover\\:bg-purple-dark:hover{background-color:#794acf}.lg\\:hover\\:bg-purple:hover{background-color:#9561e2}.lg\\:hover\\:bg-purple-light:hover{background-color:#a779e9}.lg\\:hover\\:bg-purple-lighter:hover{background-color:#d6bbfc}.lg\\:hover\\:bg-purple-lightest:hover{background-color:#f3ebff}.lg\\:hover\\:bg-pink-darkest:hover{background-color:#451225}.lg\\:hover\\:bg-pink-darker:hover{background-color:#6f213f}.lg\\:hover\\:bg-pink-dark:hover{background-color:#eb5286}.lg\\:hover\\:bg-pink:hover{background-color:#f66d9b}.lg\\:hover\\:bg-pink-light:hover{background-color:#fa7ea8}.lg\\:hover\\:bg-pink-lighter:hover{background-color:#ffbbca}.lg\\:hover\\:bg-pink-lightest:hover{background-color:#ffebef}.lg\\:focus\\:bg-transparent:focus{background-color:transparent}.lg\\:focus\\:bg-black:focus{background-color:var(--black)}.lg\\:focus\\:bg-white:focus{background-color:var(--white)}.lg\\:focus\\:bg-primary:focus{background-color:var(--primary)}.lg\\:focus\\:bg-secondary:focus{background-color:var(--secondary)}.lg\\:focus\\:bg-info:focus{background-color:var(--info)}.lg\\:focus\\:bg-warning:focus{background-color:var(--warning)}.lg\\:focus\\:bg-success:focus{background-color:var(--success)}.lg\\:focus\\:bg-danger:focus{background-color:var(--danger)}.lg\\:focus\\:bg-sidebar:focus{background-color:var(--sidebar)}.lg\\:focus\\:bg-documentation:focus{background-color:var(--documentation)}.lg\\:focus\\:bg-navbar:focus{background-color:var(--navbar)}.lg\\:focus\\:bg-grey-darkest:focus{background-color:#3d4852}.lg\\:focus\\:bg-grey-darker:focus{background-color:#606f7b}.lg\\:focus\\:bg-grey-dark:focus{background-color:#8795a1}.lg\\:focus\\:bg-grey:focus{background-color:#b8c2cc}.lg\\:focus\\:bg-grey-light:focus{background-color:#dae1e7}.lg\\:focus\\:bg-grey-lighter:focus{background-color:#f1f5f8}.lg\\:focus\\:bg-grey-lightest:focus{background-color:#f8fafc}.lg\\:focus\\:bg-red-darkest:focus{background-color:#3b0d0c}.lg\\:focus\\:bg-red-darker:focus{background-color:#621b18}.lg\\:focus\\:bg-red-dark:focus{background-color:#cc1f1a}.lg\\:focus\\:bg-red:focus{background-color:#e3342f}.lg\\:focus\\:bg-red-light:focus{background-color:#ef5753}.lg\\:focus\\:bg-red-lighter:focus{background-color:#f9acaa}.lg\\:focus\\:bg-red-lightest:focus{background-color:#fcebea}.lg\\:focus\\:bg-orange-darkest:focus{background-color:#462a16}.lg\\:focus\\:bg-orange-darker:focus{background-color:#613b1f}.lg\\:focus\\:bg-orange-dark:focus{background-color:#de751f}.lg\\:focus\\:bg-orange:focus{background-color:#f6993f}.lg\\:focus\\:bg-orange-light:focus{background-color:#faad63}.lg\\:focus\\:bg-orange-lighter:focus{background-color:#fcd9b6}.lg\\:focus\\:bg-orange-lightest:focus{background-color:#fff5eb}.lg\\:focus\\:bg-yellow-darkest:focus{background-color:#453411}.lg\\:focus\\:bg-yellow-darker:focus{background-color:#684f1d}.lg\\:focus\\:bg-yellow-dark:focus{background-color:#f2d024}.lg\\:focus\\:bg-yellow:focus{background-color:#ffed4a}.lg\\:focus\\:bg-yellow-light:focus{background-color:#fff382}.lg\\:focus\\:bg-yellow-lighter:focus{background-color:#fff9c2}.lg\\:focus\\:bg-yellow-lightest:focus{background-color:#fcfbeb}.lg\\:focus\\:bg-green-darkest:focus{background-color:#0f2f21}.lg\\:focus\\:bg-green-darker:focus{background-color:#1a4731}.lg\\:focus\\:bg-green-dark:focus{background-color:#1f9d55}.lg\\:focus\\:bg-green:focus{background-color:#38c172}.lg\\:focus\\:bg-green-light:focus{background-color:#51d88a}.lg\\:focus\\:bg-green-lighter:focus{background-color:#a2f5bf}.lg\\:focus\\:bg-green-lightest:focus{background-color:#e3fcec}.lg\\:focus\\:bg-teal-darkest:focus{background-color:#0d3331}.lg\\:focus\\:bg-teal-darker:focus{background-color:#20504f}.lg\\:focus\\:bg-teal-dark:focus{background-color:#38a89d}.lg\\:focus\\:bg-teal:focus{background-color:#4dc0b5}.lg\\:focus\\:bg-teal-light:focus{background-color:#64d5ca}.lg\\:focus\\:bg-teal-lighter:focus{background-color:#a0f0ed}.lg\\:focus\\:bg-teal-lightest:focus{background-color:#e8fffe}.lg\\:focus\\:bg-blue-darkest:focus{background-color:#12283a}.lg\\:focus\\:bg-blue-darker:focus{background-color:#1c3d5a}.lg\\:focus\\:bg-blue-dark:focus{background-color:#2779bd}.lg\\:focus\\:bg-blue:focus{background-color:#3490dc}.lg\\:focus\\:bg-blue-light:focus{background-color:#6cb2eb}.lg\\:focus\\:bg-blue-lighter:focus{background-color:#bcdefa}.lg\\:focus\\:bg-blue-lightest:focus{background-color:#eff8ff}.lg\\:focus\\:bg-indigo-darkest:focus{background-color:#191e38}.lg\\:focus\\:bg-indigo-darker:focus{background-color:#2f365f}.lg\\:focus\\:bg-indigo-dark:focus{background-color:#5661b3}.lg\\:focus\\:bg-indigo:focus{background-color:#6574cd}.lg\\:focus\\:bg-indigo-light:focus{background-color:#7886d7}.lg\\:focus\\:bg-indigo-lighter:focus{background-color:#b2b7ff}.lg\\:focus\\:bg-indigo-lightest:focus{background-color:#e6e8ff}.lg\\:focus\\:bg-purple-darkest:focus{background-color:#21183c}.lg\\:focus\\:bg-purple-darker:focus{background-color:#382b5f}.lg\\:focus\\:bg-purple-dark:focus{background-color:#794acf}.lg\\:focus\\:bg-purple:focus{background-color:#9561e2}.lg\\:focus\\:bg-purple-light:focus{background-color:#a779e9}.lg\\:focus\\:bg-purple-lighter:focus{background-color:#d6bbfc}.lg\\:focus\\:bg-purple-lightest:focus{background-color:#f3ebff}.lg\\:focus\\:bg-pink-darkest:focus{background-color:#451225}.lg\\:focus\\:bg-pink-darker:focus{background-color:#6f213f}.lg\\:focus\\:bg-pink-dark:focus{background-color:#eb5286}.lg\\:focus\\:bg-pink:focus{background-color:#f66d9b}.lg\\:focus\\:bg-pink-light:focus{background-color:#fa7ea8}.lg\\:focus\\:bg-pink-lighter:focus{background-color:#ffbbca}.lg\\:focus\\:bg-pink-lightest:focus{background-color:#ffebef}.lg\\:bg-bottom{background-position:bottom}.lg\\:bg-center{background-position:50%}.lg\\:bg-left{background-position:0}.lg\\:bg-left-bottom{background-position:0 100%}.lg\\:bg-left-top{background-position:0 0}.lg\\:bg-right{background-position:100%}.lg\\:bg-right-bottom{background-position:100% 100%}.lg\\:bg-right-top{background-position:100% 0}.lg\\:bg-top{background-position:top}.lg\\:bg-repeat{background-repeat:repeat}.lg\\:bg-no-repeat{background-repeat:no-repeat}.lg\\:bg-repeat-x{background-repeat:repeat-x}.lg\\:bg-repeat-y{background-repeat:repeat-y}.lg\\:bg-auto{background-size:auto}.lg\\:bg-cover{background-size:cover}.lg\\:bg-contain{background-size:contain}.lg\\:border-transparent{border-color:transparent}.lg\\:border-black{border-color:var(--black)}.lg\\:border-white{border-color:var(--white)}.lg\\:border-primary{border-color:var(--primary)}.lg\\:border-secondary{border-color:var(--secondary)}.lg\\:border-info{border-color:var(--info)}.lg\\:border-warning{border-color:var(--warning)}.lg\\:border-success{border-color:var(--success)}.lg\\:border-danger{border-color:var(--danger)}.lg\\:border-sidebar{border-color:var(--sidebar)}.lg\\:border-documentation{border-color:var(--documentation)}.lg\\:border-navbar{border-color:var(--navbar)}.lg\\:border-grey-darkest{border-color:#3d4852}.lg\\:border-grey-darker{border-color:#606f7b}.lg\\:border-grey-dark{border-color:#8795a1}.lg\\:border-grey{border-color:#b8c2cc}.lg\\:border-grey-light{border-color:#dae1e7}.lg\\:border-grey-lighter{border-color:#f1f5f8}.lg\\:border-grey-lightest{border-color:#f8fafc}.lg\\:border-red-darkest{border-color:#3b0d0c}.lg\\:border-red-darker{border-color:#621b18}.lg\\:border-red-dark{border-color:#cc1f1a}.lg\\:border-red{border-color:#e3342f}.lg\\:border-red-light{border-color:#ef5753}.lg\\:border-red-lighter{border-color:#f9acaa}.lg\\:border-red-lightest{border-color:#fcebea}.lg\\:border-orange-darkest{border-color:#462a16}.lg\\:border-orange-darker{border-color:#613b1f}.lg\\:border-orange-dark{border-color:#de751f}.lg\\:border-orange{border-color:#f6993f}.lg\\:border-orange-light{border-color:#faad63}.lg\\:border-orange-lighter{border-color:#fcd9b6}.lg\\:border-orange-lightest{border-color:#fff5eb}.lg\\:border-yellow-darkest{border-color:#453411}.lg\\:border-yellow-darker{border-color:#684f1d}.lg\\:border-yellow-dark{border-color:#f2d024}.lg\\:border-yellow{border-color:#ffed4a}.lg\\:border-yellow-light{border-color:#fff382}.lg\\:border-yellow-lighter{border-color:#fff9c2}.lg\\:border-yellow-lightest{border-color:#fcfbeb}.lg\\:border-green-darkest{border-color:#0f2f21}.lg\\:border-green-darker{border-color:#1a4731}.lg\\:border-green-dark{border-color:#1f9d55}.lg\\:border-green{border-color:#38c172}.lg\\:border-green-light{border-color:#51d88a}.lg\\:border-green-lighter{border-color:#a2f5bf}.lg\\:border-green-lightest{border-color:#e3fcec}.lg\\:border-teal-darkest{border-color:#0d3331}.lg\\:border-teal-darker{border-color:#20504f}.lg\\:border-teal-dark{border-color:#38a89d}.lg\\:border-teal{border-color:#4dc0b5}.lg\\:border-teal-light{border-color:#64d5ca}.lg\\:border-teal-lighter{border-color:#a0f0ed}.lg\\:border-teal-lightest{border-color:#e8fffe}.lg\\:border-blue-darkest{border-color:#12283a}.lg\\:border-blue-darker{border-color:#1c3d5a}.lg\\:border-blue-dark{border-color:#2779bd}.lg\\:border-blue{border-color:#3490dc}.lg\\:border-blue-light{border-color:#6cb2eb}.lg\\:border-blue-lighter{border-color:#bcdefa}.lg\\:border-blue-lightest{border-color:#eff8ff}.lg\\:border-indigo-darkest{border-color:#191e38}.lg\\:border-indigo-darker{border-color:#2f365f}.lg\\:border-indigo-dark{border-color:#5661b3}.lg\\:border-indigo{border-color:#6574cd}.lg\\:border-indigo-light{border-color:#7886d7}.lg\\:border-indigo-lighter{border-color:#b2b7ff}.lg\\:border-indigo-lightest{border-color:#e6e8ff}.lg\\:border-purple-darkest{border-color:#21183c}.lg\\:border-purple-darker{border-color:#382b5f}.lg\\:border-purple-dark{border-color:#794acf}.lg\\:border-purple{border-color:#9561e2}.lg\\:border-purple-light{border-color:#a779e9}.lg\\:border-purple-lighter{border-color:#d6bbfc}.lg\\:border-purple-lightest{border-color:#f3ebff}.lg\\:border-pink-darkest{border-color:#451225}.lg\\:border-pink-darker{border-color:#6f213f}.lg\\:border-pink-dark{border-color:#eb5286}.lg\\:border-pink{border-color:#f66d9b}.lg\\:border-pink-light{border-color:#fa7ea8}.lg\\:border-pink-lighter{border-color:#ffbbca}.lg\\:border-pink-lightest{border-color:#ffebef}.lg\\:hover\\:border-transparent:hover{border-color:transparent}.lg\\:hover\\:border-black:hover{border-color:var(--black)}.lg\\:hover\\:border-white:hover{border-color:var(--white)}.lg\\:hover\\:border-primary:hover{border-color:var(--primary)}.lg\\:hover\\:border-secondary:hover{border-color:var(--secondary)}.lg\\:hover\\:border-info:hover{border-color:var(--info)}.lg\\:hover\\:border-warning:hover{border-color:var(--warning)}.lg\\:hover\\:border-success:hover{border-color:var(--success)}.lg\\:hover\\:border-danger:hover{border-color:var(--danger)}.lg\\:hover\\:border-sidebar:hover{border-color:var(--sidebar)}.lg\\:hover\\:border-documentation:hover{border-color:var(--documentation)}.lg\\:hover\\:border-navbar:hover{border-color:var(--navbar)}.lg\\:hover\\:border-grey-darkest:hover{border-color:#3d4852}.lg\\:hover\\:border-grey-darker:hover{border-color:#606f7b}.lg\\:hover\\:border-grey-dark:hover{border-color:#8795a1}.lg\\:hover\\:border-grey:hover{border-color:#b8c2cc}.lg\\:hover\\:border-grey-light:hover{border-color:#dae1e7}.lg\\:hover\\:border-grey-lighter:hover{border-color:#f1f5f8}.lg\\:hover\\:border-grey-lightest:hover{border-color:#f8fafc}.lg\\:hover\\:border-red-darkest:hover{border-color:#3b0d0c}.lg\\:hover\\:border-red-darker:hover{border-color:#621b18}.lg\\:hover\\:border-red-dark:hover{border-color:#cc1f1a}.lg\\:hover\\:border-red:hover{border-color:#e3342f}.lg\\:hover\\:border-red-light:hover{border-color:#ef5753}.lg\\:hover\\:border-red-lighter:hover{border-color:#f9acaa}.lg\\:hover\\:border-red-lightest:hover{border-color:#fcebea}.lg\\:hover\\:border-orange-darkest:hover{border-color:#462a16}.lg\\:hover\\:border-orange-darker:hover{border-color:#613b1f}.lg\\:hover\\:border-orange-dark:hover{border-color:#de751f}.lg\\:hover\\:border-orange:hover{border-color:#f6993f}.lg\\:hover\\:border-orange-light:hover{border-color:#faad63}.lg\\:hover\\:border-orange-lighter:hover{border-color:#fcd9b6}.lg\\:hover\\:border-orange-lightest:hover{border-color:#fff5eb}.lg\\:hover\\:border-yellow-darkest:hover{border-color:#453411}.lg\\:hover\\:border-yellow-darker:hover{border-color:#684f1d}.lg\\:hover\\:border-yellow-dark:hover{border-color:#f2d024}.lg\\:hover\\:border-yellow:hover{border-color:#ffed4a}.lg\\:hover\\:border-yellow-light:hover{border-color:#fff382}.lg\\:hover\\:border-yellow-lighter:hover{border-color:#fff9c2}.lg\\:hover\\:border-yellow-lightest:hover{border-color:#fcfbeb}.lg\\:hover\\:border-green-darkest:hover{border-color:#0f2f21}.lg\\:hover\\:border-green-darker:hover{border-color:#1a4731}.lg\\:hover\\:border-green-dark:hover{border-color:#1f9d55}.lg\\:hover\\:border-green:hover{border-color:#38c172}.lg\\:hover\\:border-green-light:hover{border-color:#51d88a}.lg\\:hover\\:border-green-lighter:hover{border-color:#a2f5bf}.lg\\:hover\\:border-green-lightest:hover{border-color:#e3fcec}.lg\\:hover\\:border-teal-darkest:hover{border-color:#0d3331}.lg\\:hover\\:border-teal-darker:hover{border-color:#20504f}.lg\\:hover\\:border-teal-dark:hover{border-color:#38a89d}.lg\\:hover\\:border-teal:hover{border-color:#4dc0b5}.lg\\:hover\\:border-teal-light:hover{border-color:#64d5ca}.lg\\:hover\\:border-teal-lighter:hover{border-color:#a0f0ed}.lg\\:hover\\:border-teal-lightest:hover{border-color:#e8fffe}.lg\\:hover\\:border-blue-darkest:hover{border-color:#12283a}.lg\\:hover\\:border-blue-darker:hover{border-color:#1c3d5a}.lg\\:hover\\:border-blue-dark:hover{border-color:#2779bd}.lg\\:hover\\:border-blue:hover{border-color:#3490dc}.lg\\:hover\\:border-blue-light:hover{border-color:#6cb2eb}.lg\\:hover\\:border-blue-lighter:hover{border-color:#bcdefa}.lg\\:hover\\:border-blue-lightest:hover{border-color:#eff8ff}.lg\\:hover\\:border-indigo-darkest:hover{border-color:#191e38}.lg\\:hover\\:border-indigo-darker:hover{border-color:#2f365f}.lg\\:hover\\:border-indigo-dark:hover{border-color:#5661b3}.lg\\:hover\\:border-indigo:hover{border-color:#6574cd}.lg\\:hover\\:border-indigo-light:hover{border-color:#7886d7}.lg\\:hover\\:border-indigo-lighter:hover{border-color:#b2b7ff}.lg\\:hover\\:border-indigo-lightest:hover{border-color:#e6e8ff}.lg\\:hover\\:border-purple-darkest:hover{border-color:#21183c}.lg\\:hover\\:border-purple-darker:hover{border-color:#382b5f}.lg\\:hover\\:border-purple-dark:hover{border-color:#794acf}.lg\\:hover\\:border-purple:hover{border-color:#9561e2}.lg\\:hover\\:border-purple-light:hover{border-color:#a779e9}.lg\\:hover\\:border-purple-lighter:hover{border-color:#d6bbfc}.lg\\:hover\\:border-purple-lightest:hover{border-color:#f3ebff}.lg\\:hover\\:border-pink-darkest:hover{border-color:#451225}.lg\\:hover\\:border-pink-darker:hover{border-color:#6f213f}.lg\\:hover\\:border-pink-dark:hover{border-color:#eb5286}.lg\\:hover\\:border-pink:hover{border-color:#f66d9b}.lg\\:hover\\:border-pink-light:hover{border-color:#fa7ea8}.lg\\:hover\\:border-pink-lighter:hover{border-color:#ffbbca}.lg\\:hover\\:border-pink-lightest:hover{border-color:#ffebef}.lg\\:focus\\:border-transparent:focus{border-color:transparent}.lg\\:focus\\:border-black:focus{border-color:var(--black)}.lg\\:focus\\:border-white:focus{border-color:var(--white)}.lg\\:focus\\:border-primary:focus{border-color:var(--primary)}.lg\\:focus\\:border-secondary:focus{border-color:var(--secondary)}.lg\\:focus\\:border-info:focus{border-color:var(--info)}.lg\\:focus\\:border-warning:focus{border-color:var(--warning)}.lg\\:focus\\:border-success:focus{border-color:var(--success)}.lg\\:focus\\:border-danger:focus{border-color:var(--danger)}.lg\\:focus\\:border-sidebar:focus{border-color:var(--sidebar)}.lg\\:focus\\:border-documentation:focus{border-color:var(--documentation)}.lg\\:focus\\:border-navbar:focus{border-color:var(--navbar)}.lg\\:focus\\:border-grey-darkest:focus{border-color:#3d4852}.lg\\:focus\\:border-grey-darker:focus{border-color:#606f7b}.lg\\:focus\\:border-grey-dark:focus{border-color:#8795a1}.lg\\:focus\\:border-grey:focus{border-color:#b8c2cc}.lg\\:focus\\:border-grey-light:focus{border-color:#dae1e7}.lg\\:focus\\:border-grey-lighter:focus{border-color:#f1f5f8}.lg\\:focus\\:border-grey-lightest:focus{border-color:#f8fafc}.lg\\:focus\\:border-red-darkest:focus{border-color:#3b0d0c}.lg\\:focus\\:border-red-darker:focus{border-color:#621b18}.lg\\:focus\\:border-red-dark:focus{border-color:#cc1f1a}.lg\\:focus\\:border-red:focus{border-color:#e3342f}.lg\\:focus\\:border-red-light:focus{border-color:#ef5753}.lg\\:focus\\:border-red-lighter:focus{border-color:#f9acaa}.lg\\:focus\\:border-red-lightest:focus{border-color:#fcebea}.lg\\:focus\\:border-orange-darkest:focus{border-color:#462a16}.lg\\:focus\\:border-orange-darker:focus{border-color:#613b1f}.lg\\:focus\\:border-orange-dark:focus{border-color:#de751f}.lg\\:focus\\:border-orange:focus{border-color:#f6993f}.lg\\:focus\\:border-orange-light:focus{border-color:#faad63}.lg\\:focus\\:border-orange-lighter:focus{border-color:#fcd9b6}.lg\\:focus\\:border-orange-lightest:focus{border-color:#fff5eb}.lg\\:focus\\:border-yellow-darkest:focus{border-color:#453411}.lg\\:focus\\:border-yellow-darker:focus{border-color:#684f1d}.lg\\:focus\\:border-yellow-dark:focus{border-color:#f2d024}.lg\\:focus\\:border-yellow:focus{border-color:#ffed4a}.lg\\:focus\\:border-yellow-light:focus{border-color:#fff382}.lg\\:focus\\:border-yellow-lighter:focus{border-color:#fff9c2}.lg\\:focus\\:border-yellow-lightest:focus{border-color:#fcfbeb}.lg\\:focus\\:border-green-darkest:focus{border-color:#0f2f21}.lg\\:focus\\:border-green-darker:focus{border-color:#1a4731}.lg\\:focus\\:border-green-dark:focus{border-color:#1f9d55}.lg\\:focus\\:border-green:focus{border-color:#38c172}.lg\\:focus\\:border-green-light:focus{border-color:#51d88a}.lg\\:focus\\:border-green-lighter:focus{border-color:#a2f5bf}.lg\\:focus\\:border-green-lightest:focus{border-color:#e3fcec}.lg\\:focus\\:border-teal-darkest:focus{border-color:#0d3331}.lg\\:focus\\:border-teal-darker:focus{border-color:#20504f}.lg\\:focus\\:border-teal-dark:focus{border-color:#38a89d}.lg\\:focus\\:border-teal:focus{border-color:#4dc0b5}.lg\\:focus\\:border-teal-light:focus{border-color:#64d5ca}.lg\\:focus\\:border-teal-lighter:focus{border-color:#a0f0ed}.lg\\:focus\\:border-teal-lightest:focus{border-color:#e8fffe}.lg\\:focus\\:border-blue-darkest:focus{border-color:#12283a}.lg\\:focus\\:border-blue-darker:focus{border-color:#1c3d5a}.lg\\:focus\\:border-blue-dark:focus{border-color:#2779bd}.lg\\:focus\\:border-blue:focus{border-color:#3490dc}.lg\\:focus\\:border-blue-light:focus{border-color:#6cb2eb}.lg\\:focus\\:border-blue-lighter:focus{border-color:#bcdefa}.lg\\:focus\\:border-blue-lightest:focus{border-color:#eff8ff}.lg\\:focus\\:border-indigo-darkest:focus{border-color:#191e38}.lg\\:focus\\:border-indigo-darker:focus{border-color:#2f365f}.lg\\:focus\\:border-indigo-dark:focus{border-color:#5661b3}.lg\\:focus\\:border-indigo:focus{border-color:#6574cd}.lg\\:focus\\:border-indigo-light:focus{border-color:#7886d7}.lg\\:focus\\:border-indigo-lighter:focus{border-color:#b2b7ff}.lg\\:focus\\:border-indigo-lightest:focus{border-color:#e6e8ff}.lg\\:focus\\:border-purple-darkest:focus{border-color:#21183c}.lg\\:focus\\:border-purple-darker:focus{border-color:#382b5f}.lg\\:focus\\:border-purple-dark:focus{border-color:#794acf}.lg\\:focus\\:border-purple:focus{border-color:#9561e2}.lg\\:focus\\:border-purple-light:focus{border-color:#a779e9}.lg\\:focus\\:border-purple-lighter:focus{border-color:#d6bbfc}.lg\\:focus\\:border-purple-lightest:focus{border-color:#f3ebff}.lg\\:focus\\:border-pink-darkest:focus{border-color:#451225}.lg\\:focus\\:border-pink-darker:focus{border-color:#6f213f}.lg\\:focus\\:border-pink-dark:focus{border-color:#eb5286}.lg\\:focus\\:border-pink:focus{border-color:#f66d9b}.lg\\:focus\\:border-pink-light:focus{border-color:#fa7ea8}.lg\\:focus\\:border-pink-lighter:focus{border-color:#ffbbca}.lg\\:focus\\:border-pink-lightest:focus{border-color:#ffebef}.lg\\:rounded-none{border-radius:0}.lg\\:rounded-sm{border-radius:.125rem}.lg\\:rounded{border-radius:.25rem}.lg\\:rounded-lg{border-radius:.5rem}.lg\\:rounded-full{border-radius:9999px}.lg\\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.lg\\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.lg\\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.lg\\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.lg\\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.lg\\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.lg\\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.lg\\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.lg\\:rounded-t{border-top-left-radius:.25rem}.lg\\:rounded-r,.lg\\:rounded-t{border-top-right-radius:.25rem}.lg\\:rounded-b,.lg\\:rounded-r{border-bottom-right-radius:.25rem}.lg\\:rounded-b,.lg\\:rounded-l{border-bottom-left-radius:.25rem}.lg\\:rounded-l{border-top-left-radius:.25rem}.lg\\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.lg\\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.lg\\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.lg\\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.lg\\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.lg\\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.lg\\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.lg\\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.lg\\:rounded-tl-none{border-top-left-radius:0}.lg\\:rounded-tr-none{border-top-right-radius:0}.lg\\:rounded-br-none{border-bottom-right-radius:0}.lg\\:rounded-bl-none{border-bottom-left-radius:0}.lg\\:rounded-tl-sm{border-top-left-radius:.125rem}.lg\\:rounded-tr-sm{border-top-right-radius:.125rem}.lg\\:rounded-br-sm{border-bottom-right-radius:.125rem}.lg\\:rounded-bl-sm{border-bottom-left-radius:.125rem}.lg\\:rounded-tl{border-top-left-radius:.25rem}.lg\\:rounded-tr{border-top-right-radius:.25rem}.lg\\:rounded-br{border-bottom-right-radius:.25rem}.lg\\:rounded-bl{border-bottom-left-radius:.25rem}.lg\\:rounded-tl-lg{border-top-left-radius:.5rem}.lg\\:rounded-tr-lg{border-top-right-radius:.5rem}.lg\\:rounded-br-lg{border-bottom-right-radius:.5rem}.lg\\:rounded-bl-lg{border-bottom-left-radius:.5rem}.lg\\:rounded-tl-full{border-top-left-radius:9999px}.lg\\:rounded-tr-full{border-top-right-radius:9999px}.lg\\:rounded-br-full{border-bottom-right-radius:9999px}.lg\\:rounded-bl-full{border-bottom-left-radius:9999px}.lg\\:border-solid{border-style:solid}.lg\\:border-dashed{border-style:dashed}.lg\\:border-dotted{border-style:dotted}.lg\\:border-none{border-style:none}.lg\\:border-0{border-width:0}.lg\\:border-2{border-width:2px}.lg\\:border-4{border-width:4px}.lg\\:border-8{border-width:8px}.lg\\:border{border-width:1px}.lg\\:border-t-0{border-top-width:0}.lg\\:border-r-0{border-right-width:0}.lg\\:border-b-0{border-bottom-width:0}.lg\\:border-l-0{border-left-width:0}.lg\\:border-t-2{border-top-width:2px}.lg\\:border-r-2{border-right-width:2px}.lg\\:border-b-2{border-bottom-width:2px}.lg\\:border-l-2{border-left-width:2px}.lg\\:border-t-4{border-top-width:4px}.lg\\:border-r-4{border-right-width:4px}.lg\\:border-b-4{border-bottom-width:4px}.lg\\:border-l-4{border-left-width:4px}.lg\\:border-t-8{border-top-width:8px}.lg\\:border-r-8{border-right-width:8px}.lg\\:border-b-8{border-bottom-width:8px}.lg\\:border-l-8{border-left-width:8px}.lg\\:border-t{border-top-width:1px}.lg\\:border-r{border-right-width:1px}.lg\\:border-b{border-bottom-width:1px}.lg\\:border-l{border-left-width:1px}.lg\\:cursor-auto{cursor:auto}.lg\\:cursor-default{cursor:default}.lg\\:cursor-pointer{cursor:pointer}.lg\\:cursor-wait{cursor:wait}.lg\\:cursor-move{cursor:move}.lg\\:cursor-not-allowed{cursor:not-allowed}.lg\\:block{display:block}.lg\\:inline-block{display:inline-block}.lg\\:inline{display:inline}.lg\\:table{display:table}.lg\\:table-row{display:table-row}.lg\\:table-cell{display:table-cell}.lg\\:hidden{display:none}.lg\\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.lg\\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.lg\\:flex-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.lg\\:flex-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.lg\\:flex-col{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.lg\\:flex-col-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.lg\\:flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.lg\\:flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.lg\\:flex-no-wrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.lg\\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.lg\\:items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.lg\\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.lg\\:items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.lg\\:items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.lg\\:self-auto{-ms-flex-item-align:auto;align-self:auto}.lg\\:self-start{-ms-flex-item-align:start;align-self:flex-start}.lg\\:self-end{-ms-flex-item-align:end;align-self:flex-end}.lg\\:self-center{-ms-flex-item-align:center;align-self:center}.lg\\:self-stretch{-ms-flex-item-align:stretch;align-self:stretch}.lg\\:justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.lg\\:justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.lg\\:justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.lg\\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.lg\\:justify-around{-ms-flex-pack:distribute;justify-content:space-around}.lg\\:content-center{-ms-flex-line-pack:center;align-content:center}.lg\\:content-start{-ms-flex-line-pack:start;align-content:flex-start}.lg\\:content-end{-ms-flex-line-pack:end;align-content:flex-end}.lg\\:content-between{-ms-flex-line-pack:justify;align-content:space-between}.lg\\:content-around{-ms-flex-line-pack:distribute;align-content:space-around}.lg\\:flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.lg\\:flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.lg\\:flex-initial{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.lg\\:flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.lg\\:flex-grow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.lg\\:flex-shrink{-ms-flex-negative:1;flex-shrink:1}.lg\\:flex-no-grow{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.lg\\:flex-no-shrink{-ms-flex-negative:0;flex-shrink:0}.lg\\:float-right{float:right}.lg\\:float-left{float:left}.lg\\:float-none{float:none}.lg\\:clearfix:after{content:\"\";display:table;clear:both}.lg\\:font-sans{font-family:system-ui,BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.lg\\:font-serif{font-family:Constantia,Lucida Bright,Lucidabright,Lucida Serif,Lucida,DejaVu Serif,Bitstream Vera Serif,Liberation Serif,Georgia,serif}.lg\\:font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lg\\:font-hairline{font-weight:100}.lg\\:font-thin{font-weight:200}.lg\\:font-light{font-weight:300}.lg\\:font-normal{font-weight:400}.lg\\:font-medium{font-weight:500}.lg\\:font-semibold{font-weight:600}.lg\\:font-bold{font-weight:700}.lg\\:font-extrabold{font-weight:800}.lg\\:font-black{font-weight:900}.lg\\:hover\\:font-hairline:hover{font-weight:100}.lg\\:hover\\:font-thin:hover{font-weight:200}.lg\\:hover\\:font-light:hover{font-weight:300}.lg\\:hover\\:font-normal:hover{font-weight:400}.lg\\:hover\\:font-medium:hover{font-weight:500}.lg\\:hover\\:font-semibold:hover{font-weight:600}.lg\\:hover\\:font-bold:hover{font-weight:700}.lg\\:hover\\:font-extrabold:hover{font-weight:800}.lg\\:hover\\:font-black:hover{font-weight:900}.lg\\:focus\\:font-hairline:focus{font-weight:100}.lg\\:focus\\:font-thin:focus{font-weight:200}.lg\\:focus\\:font-light:focus{font-weight:300}.lg\\:focus\\:font-normal:focus{font-weight:400}.lg\\:focus\\:font-medium:focus{font-weight:500}.lg\\:focus\\:font-semibold:focus{font-weight:600}.lg\\:focus\\:font-bold:focus{font-weight:700}.lg\\:focus\\:font-extrabold:focus{font-weight:800}.lg\\:focus\\:font-black:focus{font-weight:900}.lg\\:h-1{height:.25rem}.lg\\:h-2{height:.5rem}.lg\\:h-3{height:.75rem}.lg\\:h-4{height:1rem}.lg\\:h-5{height:1.25rem}.lg\\:h-6{height:1.5rem}.lg\\:h-8{height:2rem}.lg\\:h-10{height:2.5rem}.lg\\:h-12{height:3rem}.lg\\:h-16{height:4rem}.lg\\:h-24{height:6rem}.lg\\:h-32{height:8rem}.lg\\:h-48{height:12rem}.lg\\:h-64{height:16rem}.lg\\:h-auto{height:auto}.lg\\:h-px{height:1px}.lg\\:h-full{height:100%}.lg\\:h-screen{height:100vh}.lg\\:leading-none{line-height:1}.lg\\:leading-tight{line-height:1.25}.lg\\:leading-normal{line-height:1.5}.lg\\:leading-large{line-height:2}.lg\\:leading-loose{line-height:2.25}.lg\\:m-0{margin:0}.lg\\:m-1{margin:.25rem}.lg\\:m-2{margin:.5rem}.lg\\:m-3{margin:.75rem}.lg\\:m-4{margin:1rem}.lg\\:m-5{margin:1.25rem}.lg\\:m-6{margin:1.5rem}.lg\\:m-8{margin:2rem}.lg\\:m-10{margin:2.5rem}.lg\\:m-12{margin:3rem}.lg\\:m-16{margin:4rem}.lg\\:m-20{margin:5rem}.lg\\:m-24{margin:6rem}.lg\\:m-32{margin:8rem}.lg\\:m-auto{margin:auto}.lg\\:m-px{margin:1px}.lg\\:my-0{margin-top:0;margin-bottom:0}.lg\\:mx-0{margin-left:0;margin-right:0}.lg\\:my-1{margin-top:.25rem;margin-bottom:.25rem}.lg\\:mx-1{margin-left:.25rem;margin-right:.25rem}.lg\\:my-2{margin-top:.5rem;margin-bottom:.5rem}.lg\\:mx-2{margin-left:.5rem;margin-right:.5rem}.lg\\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\\:mx-3{margin-left:.75rem;margin-right:.75rem}.lg\\:my-4{margin-top:1rem;margin-bottom:1rem}.lg\\:mx-4{margin-left:1rem;margin-right:1rem}.lg\\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.lg\\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lg\\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.lg\\:my-8{margin-top:2rem;margin-bottom:2rem}.lg\\:mx-8{margin-left:2rem;margin-right:2rem}.lg\\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.lg\\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.lg\\:my-12{margin-top:3rem;margin-bottom:3rem}.lg\\:mx-12{margin-left:3rem;margin-right:3rem}.lg\\:my-16{margin-top:4rem;margin-bottom:4rem}.lg\\:mx-16{margin-left:4rem;margin-right:4rem}.lg\\:my-20{margin-top:5rem;margin-bottom:5rem}.lg\\:mx-20{margin-left:5rem;margin-right:5rem}.lg\\:my-24{margin-top:6rem;margin-bottom:6rem}.lg\\:mx-24{margin-left:6rem;margin-right:6rem}.lg\\:my-32{margin-top:8rem;margin-bottom:8rem}.lg\\:mx-32{margin-left:8rem;margin-right:8rem}.lg\\:my-auto{margin-top:auto;margin-bottom:auto}.lg\\:mx-auto{margin-left:auto;margin-right:auto}.lg\\:my-px{margin-top:1px;margin-bottom:1px}.lg\\:mx-px{margin-left:1px;margin-right:1px}.lg\\:mt-0{margin-top:0}.lg\\:mr-0{margin-right:0}.lg\\:mb-0{margin-bottom:0}.lg\\:ml-0{margin-left:0}.lg\\:mt-1{margin-top:.25rem}.lg\\:mr-1{margin-right:.25rem}.lg\\:mb-1{margin-bottom:.25rem}.lg\\:ml-1{margin-left:.25rem}.lg\\:mt-2{margin-top:.5rem}.lg\\:mr-2{margin-right:.5rem}.lg\\:mb-2{margin-bottom:.5rem}.lg\\:ml-2{margin-left:.5rem}.lg\\:mt-3{margin-top:.75rem}.lg\\:mr-3{margin-right:.75rem}.lg\\:mb-3{margin-bottom:.75rem}.lg\\:ml-3{margin-left:.75rem}.lg\\:mt-4{margin-top:1rem}.lg\\:mr-4{margin-right:1rem}.lg\\:mb-4{margin-bottom:1rem}.lg\\:ml-4{margin-left:1rem}.lg\\:mt-5{margin-top:1.25rem}.lg\\:mr-5{margin-right:1.25rem}.lg\\:mb-5{margin-bottom:1.25rem}.lg\\:ml-5{margin-left:1.25rem}.lg\\:mt-6{margin-top:1.5rem}.lg\\:mr-6{margin-right:1.5rem}.lg\\:mb-6{margin-bottom:1.5rem}.lg\\:ml-6{margin-left:1.5rem}.lg\\:mt-8{margin-top:2rem}.lg\\:mr-8{margin-right:2rem}.lg\\:mb-8{margin-bottom:2rem}.lg\\:ml-8{margin-left:2rem}.lg\\:mt-10{margin-top:2.5rem}.lg\\:mr-10{margin-right:2.5rem}.lg\\:mb-10{margin-bottom:2.5rem}.lg\\:ml-10{margin-left:2.5rem}.lg\\:mt-12{margin-top:3rem}.lg\\:mr-12{margin-right:3rem}.lg\\:mb-12{margin-bottom:3rem}.lg\\:ml-12{margin-left:3rem}.lg\\:mt-16{margin-top:4rem}.lg\\:mr-16{margin-right:4rem}.lg\\:mb-16{margin-bottom:4rem}.lg\\:ml-16{margin-left:4rem}.lg\\:mt-20{margin-top:5rem}.lg\\:mr-20{margin-right:5rem}.lg\\:mb-20{margin-bottom:5rem}.lg\\:ml-20{margin-left:5rem}.lg\\:mt-24{margin-top:6rem}.lg\\:mr-24{margin-right:6rem}.lg\\:mb-24{margin-bottom:6rem}.lg\\:ml-24{margin-left:6rem}.lg\\:mt-32{margin-top:8rem}.lg\\:mr-32{margin-right:8rem}.lg\\:mb-32{margin-bottom:8rem}.lg\\:ml-32{margin-left:8rem}.lg\\:mt-auto{margin-top:auto}.lg\\:mr-auto{margin-right:auto}.lg\\:mb-auto{margin-bottom:auto}.lg\\:ml-auto{margin-left:auto}.lg\\:mt-px{margin-top:1px}.lg\\:mr-px{margin-right:1px}.lg\\:mb-px{margin-bottom:1px}.lg\\:ml-px{margin-left:1px}.lg\\:max-h-full{max-height:100%}.lg\\:max-h-screen{max-height:100vh}.lg\\:max-w-xs{max-width:20rem}.lg\\:max-w-sm{max-width:30rem}.lg\\:max-w-md{max-width:40rem}.lg\\:max-w-lg{max-width:50rem}.lg\\:max-w-xl{max-width:60rem}.lg\\:max-w-2xl{max-width:70rem}.lg\\:max-w-3xl{max-width:80rem}.lg\\:max-w-4xl{max-width:90rem}.lg\\:max-w-5xl{max-width:100rem}.lg\\:max-w-full{max-width:100%}.lg\\:min-h-0{min-height:0}.lg\\:min-h-full{min-height:100%}.lg\\:min-h-screen{min-height:100vh}.lg\\:min-w-0{min-width:0}.lg\\:min-w-full{min-width:100%}.lg\\:-m-0{margin:0}.lg\\:-m-1{margin:-.25rem}.lg\\:-m-2{margin:-.5rem}.lg\\:-m-3{margin:-.75rem}.lg\\:-m-4{margin:-1rem}.lg\\:-m-5{margin:-1.25rem}.lg\\:-m-6{margin:-1.5rem}.lg\\:-m-8{margin:-2rem}.lg\\:-m-10{margin:-2.5rem}.lg\\:-m-12{margin:-3rem}.lg\\:-m-16{margin:-4rem}.lg\\:-m-20{margin:-5rem}.lg\\:-m-24{margin:-6rem}.lg\\:-m-32{margin:-8rem}.lg\\:-m-px{margin:-1px}.lg\\:-my-0{margin-top:0;margin-bottom:0}.lg\\:-mx-0{margin-left:0;margin-right:0}.lg\\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.lg\\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lg\\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.lg\\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.lg\\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.lg\\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.lg\\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.lg\\:-mx-4{margin-left:-1rem;margin-right:-1rem}.lg\\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.lg\\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lg\\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.lg\\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.lg\\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.lg\\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.lg\\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.lg\\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.lg\\:-mx-12{margin-left:-3rem;margin-right:-3rem}.lg\\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.lg\\:-mx-16{margin-left:-4rem;margin-right:-4rem}.lg\\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.lg\\:-mx-20{margin-left:-5rem;margin-right:-5rem}.lg\\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.lg\\:-mx-24{margin-left:-6rem;margin-right:-6rem}.lg\\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.lg\\:-mx-32{margin-left:-8rem;margin-right:-8rem}.lg\\:-my-px{margin-top:-1px;margin-bottom:-1px}.lg\\:-mx-px{margin-left:-1px;margin-right:-1px}.lg\\:-mt-0{margin-top:0}.lg\\:-mr-0{margin-right:0}.lg\\:-mb-0{margin-bottom:0}.lg\\:-ml-0{margin-left:0}.lg\\:-mt-1{margin-top:-.25rem}.lg\\:-mr-1{margin-right:-.25rem}.lg\\:-mb-1{margin-bottom:-.25rem}.lg\\:-ml-1{margin-left:-.25rem}.lg\\:-mt-2{margin-top:-.5rem}.lg\\:-mr-2{margin-right:-.5rem}.lg\\:-mb-2{margin-bottom:-.5rem}.lg\\:-ml-2{margin-left:-.5rem}.lg\\:-mt-3{margin-top:-.75rem}.lg\\:-mr-3{margin-right:-.75rem}.lg\\:-mb-3{margin-bottom:-.75rem}.lg\\:-ml-3{margin-left:-.75rem}.lg\\:-mt-4{margin-top:-1rem}.lg\\:-mr-4{margin-right:-1rem}.lg\\:-mb-4{margin-bottom:-1rem}.lg\\:-ml-4{margin-left:-1rem}.lg\\:-mt-5{margin-top:-1.25rem}.lg\\:-mr-5{margin-right:-1.25rem}.lg\\:-mb-5{margin-bottom:-1.25rem}.lg\\:-ml-5{margin-left:-1.25rem}.lg\\:-mt-6{margin-top:-1.5rem}.lg\\:-mr-6{margin-right:-1.5rem}.lg\\:-mb-6{margin-bottom:-1.5rem}.lg\\:-ml-6{margin-left:-1.5rem}.lg\\:-mt-8{margin-top:-2rem}.lg\\:-mr-8{margin-right:-2rem}.lg\\:-mb-8{margin-bottom:-2rem}.lg\\:-ml-8{margin-left:-2rem}.lg\\:-mt-10{margin-top:-2.5rem}.lg\\:-mr-10{margin-right:-2.5rem}.lg\\:-mb-10{margin-bottom:-2.5rem}.lg\\:-ml-10{margin-left:-2.5rem}.lg\\:-mt-12{margin-top:-3rem}.lg\\:-mr-12{margin-right:-3rem}.lg\\:-mb-12{margin-bottom:-3rem}.lg\\:-ml-12{margin-left:-3rem}.lg\\:-mt-16{margin-top:-4rem}.lg\\:-mr-16{margin-right:-4rem}.lg\\:-mb-16{margin-bottom:-4rem}.lg\\:-ml-16{margin-left:-4rem}.lg\\:-mt-20{margin-top:-5rem}.lg\\:-mr-20{margin-right:-5rem}.lg\\:-mb-20{margin-bottom:-5rem}.lg\\:-ml-20{margin-left:-5rem}.lg\\:-mt-24{margin-top:-6rem}.lg\\:-mr-24{margin-right:-6rem}.lg\\:-mb-24{margin-bottom:-6rem}.lg\\:-ml-24{margin-left:-6rem}.lg\\:-mt-32{margin-top:-8rem}.lg\\:-mr-32{margin-right:-8rem}.lg\\:-mb-32{margin-bottom:-8rem}.lg\\:-ml-32{margin-left:-8rem}.lg\\:-mt-px{margin-top:-1px}.lg\\:-mr-px{margin-right:-1px}.lg\\:-mb-px{margin-bottom:-1px}.lg\\:-ml-px{margin-left:-1px}.lg\\:opacity-0{opacity:0}.lg\\:opacity-25{opacity:.25}.lg\\:opacity-50{opacity:.5}.lg\\:opacity-75{opacity:.75}.lg\\:opacity-100{opacity:1}.lg\\:overflow-auto{overflow:auto}.lg\\:overflow-hidden{overflow:hidden}.lg\\:overflow-visible{overflow:visible}.lg\\:overflow-scroll{overflow:scroll}.lg\\:overflow-x-auto{overflow-x:auto}.lg\\:overflow-y-auto{overflow-y:auto}.lg\\:overflow-x-hidden{overflow-x:hidden}.lg\\:overflow-y-hidden{overflow-y:hidden}.lg\\:overflow-x-visible{overflow-x:visible}.lg\\:overflow-y-visible{overflow-y:visible}.lg\\:overflow-x-scroll{overflow-x:scroll}.lg\\:overflow-y-scroll{overflow-y:scroll}.lg\\:scrolling-touch{-webkit-overflow-scrolling:touch}.lg\\:scrolling-auto{-webkit-overflow-scrolling:auto}.lg\\:p-0{padding:0}.lg\\:p-1{padding:.25rem}.lg\\:p-2{padding:.5rem}.lg\\:p-3{padding:.75rem}.lg\\:p-4{padding:1rem}.lg\\:p-5{padding:1.25rem}.lg\\:p-6{padding:1.5rem}.lg\\:p-8{padding:2rem}.lg\\:p-10{padding:2.5rem}.lg\\:p-12{padding:3rem}.lg\\:p-16{padding:4rem}.lg\\:p-20{padding:5rem}.lg\\:p-24{padding:6rem}.lg\\:p-32{padding:8rem}.lg\\:p-50{padding:20rem}.lg\\:p-px{padding:1px}.lg\\:py-0{padding-top:0;padding-bottom:0}.lg\\:px-0{padding-left:0;padding-right:0}.lg\\:py-1{padding-top:.25rem;padding-bottom:.25rem}.lg\\:px-1{padding-left:.25rem;padding-right:.25rem}.lg\\:py-2{padding-top:.5rem;padding-bottom:.5rem}.lg\\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\\:py-3{padding-top:.75rem;padding-bottom:.75rem}.lg\\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\\:py-4{padding-top:1rem;padding-bottom:1rem}.lg\\:px-4{padding-left:1rem;padding-right:1rem}.lg\\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.lg\\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.lg\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\\:py-8{padding-top:2rem;padding-bottom:2rem}.lg\\:px-8{padding-left:2rem;padding-right:2rem}.lg\\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.lg\\:px-10{padding-left:2.5rem;padding-right:2.5rem}.lg\\:py-12{padding-top:3rem;padding-bottom:3rem}.lg\\:px-12{padding-left:3rem;padding-right:3rem}.lg\\:py-16{padding-top:4rem;padding-bottom:4rem}.lg\\:px-16{padding-left:4rem;padding-right:4rem}.lg\\:py-20{padding-top:5rem;padding-bottom:5rem}.lg\\:px-20{padding-left:5rem;padding-right:5rem}.lg\\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\\:px-24{padding-left:6rem;padding-right:6rem}.lg\\:py-32{padding-top:8rem;padding-bottom:8rem}.lg\\:px-32{padding-left:8rem;padding-right:8rem}.lg\\:py-50{padding-top:20rem;padding-bottom:20rem}.lg\\:px-50{padding-left:20rem;padding-right:20rem}.lg\\:py-px{padding-top:1px;padding-bottom:1px}.lg\\:px-px{padding-left:1px;padding-right:1px}.lg\\:pt-0{padding-top:0}.lg\\:pr-0{padding-right:0}.lg\\:pb-0{padding-bottom:0}.lg\\:pl-0{padding-left:0}.lg\\:pt-1{padding-top:.25rem}.lg\\:pr-1{padding-right:.25rem}.lg\\:pb-1{padding-bottom:.25rem}.lg\\:pl-1{padding-left:.25rem}.lg\\:pt-2{padding-top:.5rem}.lg\\:pr-2{padding-right:.5rem}.lg\\:pb-2{padding-bottom:.5rem}.lg\\:pl-2{padding-left:.5rem}.lg\\:pt-3{padding-top:.75rem}.lg\\:pr-3{padding-right:.75rem}.lg\\:pb-3{padding-bottom:.75rem}.lg\\:pl-3{padding-left:.75rem}.lg\\:pt-4{padding-top:1rem}.lg\\:pr-4{padding-right:1rem}.lg\\:pb-4{padding-bottom:1rem}.lg\\:pl-4{padding-left:1rem}.lg\\:pt-5{padding-top:1.25rem}.lg\\:pr-5{padding-right:1.25rem}.lg\\:pb-5{padding-bottom:1.25rem}.lg\\:pl-5{padding-left:1.25rem}.lg\\:pt-6{padding-top:1.5rem}.lg\\:pr-6{padding-right:1.5rem}.lg\\:pb-6{padding-bottom:1.5rem}.lg\\:pl-6{padding-left:1.5rem}.lg\\:pt-8{padding-top:2rem}.lg\\:pr-8{padding-right:2rem}.lg\\:pb-8{padding-bottom:2rem}.lg\\:pl-8{padding-left:2rem}.lg\\:pt-10{padding-top:2.5rem}.lg\\:pr-10{padding-right:2.5rem}.lg\\:pb-10{padding-bottom:2.5rem}.lg\\:pl-10{padding-left:2.5rem}.lg\\:pt-12{padding-top:3rem}.lg\\:pr-12{padding-right:3rem}.lg\\:pb-12{padding-bottom:3rem}.lg\\:pl-12{padding-left:3rem}.lg\\:pt-16{padding-top:4rem}.lg\\:pr-16{padding-right:4rem}.lg\\:pb-16{padding-bottom:4rem}.lg\\:pl-16{padding-left:4rem}.lg\\:pt-20{padding-top:5rem}.lg\\:pr-20{padding-right:5rem}.lg\\:pb-20{padding-bottom:5rem}.lg\\:pl-20{padding-left:5rem}.lg\\:pt-24{padding-top:6rem}.lg\\:pr-24{padding-right:6rem}.lg\\:pb-24{padding-bottom:6rem}.lg\\:pl-24{padding-left:6rem}.lg\\:pt-32{padding-top:8rem}.lg\\:pr-32{padding-right:8rem}.lg\\:pb-32{padding-bottom:8rem}.lg\\:pl-32{padding-left:8rem}.lg\\:pt-50{padding-top:20rem}.lg\\:pr-50{padding-right:20rem}.lg\\:pb-50{padding-bottom:20rem}.lg\\:pl-50{padding-left:20rem}.lg\\:pt-px{padding-top:1px}.lg\\:pr-px{padding-right:1px}.lg\\:pb-px{padding-bottom:1px}.lg\\:pl-px{padding-left:1px}.lg\\:pointer-events-none{pointer-events:none}.lg\\:pointer-events-auto{pointer-events:auto}.lg\\:static{position:static}.lg\\:fixed{position:fixed}.lg\\:absolute{position:absolute}.lg\\:relative{position:relative}.lg\\:sticky{position:-webkit-sticky;position:sticky}.lg\\:pin-none{top:auto;right:auto;bottom:auto;left:auto}.lg\\:pin{right:0;left:0}.lg\\:pin,.lg\\:pin-y{top:0;bottom:0}.lg\\:pin-x{right:0;left:0}.lg\\:pin-t{top:0}.lg\\:pin-r{right:0}.lg\\:pin-b{bottom:0}.lg\\:pin-l{left:0}.lg\\:resize-none{resize:none}.lg\\:resize-y{resize:vertical}.lg\\:resize-x{resize:horizontal}.lg\\:resize{resize:both}.lg\\:shadow{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.lg\\:shadow-xs{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.lg\\:shadow-sm{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.lg\\:shadow-md{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.lg\\:shadow-lg{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.lg\\:shadow-inner{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\\:shadow-outline{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.lg\\:shadow-none{-webkit-box-shadow:none;box-shadow:none}.lg\\:hover\\:shadow:hover{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.lg\\:hover\\:shadow-xs:hover{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.lg\\:hover\\:shadow-sm:hover{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.lg\\:hover\\:shadow-md:hover{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.lg\\:hover\\:shadow-lg:hover{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.lg\\:hover\\:shadow-inner:hover{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\\:hover\\:shadow-outline:hover{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.lg\\:hover\\:shadow-none:hover{-webkit-box-shadow:none;box-shadow:none}.lg\\:focus\\:shadow:focus{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1)}.lg\\:focus\\:shadow-xs:focus{-webkit-box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03);box-shadow:0 2px 1px rgba(50,50,93,.03),0 1px 1px rgba(0,0,0,.03)}.lg\\:focus\\:shadow-sm:focus{-webkit-box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08)}.lg\\:focus\\:shadow-md:focus{-webkit-box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08);box-shadow:0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08)}.lg\\:focus\\:shadow-lg:focus{-webkit-box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08);box-shadow:0 15px 30px 0 rgba(0,0,0,.11),0 5px 15px 0 rgba(0,0,0,.08)}.lg\\:focus\\:shadow-inner:focus{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\\:focus\\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(52,144,220,.5);box-shadow:0 0 0 3px rgba(52,144,220,.5)}.lg\\:focus\\:shadow-none:focus{-webkit-box-shadow:none;box-shadow:none}.lg\\:table-auto{table-layout:auto}.lg\\:table-fixed{table-layout:fixed}.lg\\:text-left{text-align:left}.lg\\:text-center{text-align:center}.lg\\:text-right{text-align:right}.lg\\:text-justify{text-align:justify}.lg\\:text-transparent{color:transparent}.lg\\:text-black{color:var(--black)}.lg\\:text-white{color:var(--white)}.lg\\:text-primary{color:var(--primary)}.lg\\:text-secondary{color:var(--secondary)}.lg\\:text-info{color:var(--info)}.lg\\:text-warning{color:var(--warning)}.lg\\:text-success{color:var(--success)}.lg\\:text-danger{color:var(--danger)}.lg\\:text-sidebar{color:var(--sidebar)}.lg\\:text-documentation{color:var(--documentation)}.lg\\:text-navbar{color:var(--navbar)}.lg\\:text-grey-darkest{color:#3d4852}.lg\\:text-grey-darker{color:#606f7b}.lg\\:text-grey-dark{color:#8795a1}.lg\\:text-grey{color:#b8c2cc}.lg\\:text-grey-light{color:#dae1e7}.lg\\:text-grey-lighter{color:#f1f5f8}.lg\\:text-grey-lightest{color:#f8fafc}.lg\\:text-red-darkest{color:#3b0d0c}.lg\\:text-red-darker{color:#621b18}.lg\\:text-red-dark{color:#cc1f1a}.lg\\:text-red{color:#e3342f}.lg\\:text-red-light{color:#ef5753}.lg\\:text-red-lighter{color:#f9acaa}.lg\\:text-red-lightest{color:#fcebea}.lg\\:text-orange-darkest{color:#462a16}.lg\\:text-orange-darker{color:#613b1f}.lg\\:text-orange-dark{color:#de751f}.lg\\:text-orange{color:#f6993f}.lg\\:text-orange-light{color:#faad63}.lg\\:text-orange-lighter{color:#fcd9b6}.lg\\:text-orange-lightest{color:#fff5eb}.lg\\:text-yellow-darkest{color:#453411}.lg\\:text-yellow-darker{color:#684f1d}.lg\\:text-yellow-dark{color:#f2d024}.lg\\:text-yellow{color:#ffed4a}.lg\\:text-yellow-light{color:#fff382}.lg\\:text-yellow-lighter{color:#fff9c2}.lg\\:text-yellow-lightest{color:#fcfbeb}.lg\\:text-green-darkest{color:#0f2f21}.lg\\:text-green-darker{color:#1a4731}.lg\\:text-green-dark{color:#1f9d55}.lg\\:text-green{color:#38c172}.lg\\:text-green-light{color:#51d88a}.lg\\:text-green-lighter{color:#a2f5bf}.lg\\:text-green-lightest{color:#e3fcec}.lg\\:text-teal-darkest{color:#0d3331}.lg\\:text-teal-darker{color:#20504f}.lg\\:text-teal-dark{color:#38a89d}.lg\\:text-teal{color:#4dc0b5}.lg\\:text-teal-light{color:#64d5ca}.lg\\:text-teal-lighter{color:#a0f0ed}.lg\\:text-teal-lightest{color:#e8fffe}.lg\\:text-blue-darkest{color:#12283a}.lg\\:text-blue-darker{color:#1c3d5a}.lg\\:text-blue-dark{color:#2779bd}.lg\\:text-blue{color:#3490dc}.lg\\:text-blue-light{color:#6cb2eb}.lg\\:text-blue-lighter{color:#bcdefa}.lg\\:text-blue-lightest{color:#eff8ff}.lg\\:text-indigo-darkest{color:#191e38}.lg\\:text-indigo-darker{color:#2f365f}.lg\\:text-indigo-dark{color:#5661b3}.lg\\:text-indigo{color:#6574cd}.lg\\:text-indigo-light{color:#7886d7}.lg\\:text-indigo-lighter{color:#b2b7ff}.lg\\:text-indigo-lightest{color:#e6e8ff}.lg\\:text-purple-darkest{color:#21183c}.lg\\:text-purple-darker{color:#382b5f}.lg\\:text-purple-dark{color:#794acf}.lg\\:text-purple{color:#9561e2}.lg\\:text-purple-light{color:#a779e9}.lg\\:text-purple-lighter{color:#d6bbfc}.lg\\:text-purple-lightest{color:#f3ebff}.lg\\:text-pink-darkest{color:#451225}.lg\\:text-pink-darker{color:#6f213f}.lg\\:text-pink-dark{color:#eb5286}.lg\\:text-pink{color:#f66d9b}.lg\\:text-pink-light{color:#fa7ea8}.lg\\:text-pink-lighter{color:#ffbbca}.lg\\:text-pink-lightest{color:#ffebef}.lg\\:hover\\:text-transparent:hover{color:transparent}.lg\\:hover\\:text-black:hover{color:var(--black)}.lg\\:hover\\:text-white:hover{color:var(--white)}.lg\\:hover\\:text-primary:hover{color:var(--primary)}.lg\\:hover\\:text-secondary:hover{color:var(--secondary)}.lg\\:hover\\:text-info:hover{color:var(--info)}.lg\\:hover\\:text-warning:hover{color:var(--warning)}.lg\\:hover\\:text-success:hover{color:var(--success)}.lg\\:hover\\:text-danger:hover{color:var(--danger)}.lg\\:hover\\:text-sidebar:hover{color:var(--sidebar)}.lg\\:hover\\:text-documentation:hover{color:var(--documentation)}.lg\\:hover\\:text-navbar:hover{color:var(--navbar)}.lg\\:hover\\:text-grey-darkest:hover{color:#3d4852}.lg\\:hover\\:text-grey-darker:hover{color:#606f7b}.lg\\:hover\\:text-grey-dark:hover{color:#8795a1}.lg\\:hover\\:text-grey:hover{color:#b8c2cc}.lg\\:hover\\:text-grey-light:hover{color:#dae1e7}.lg\\:hover\\:text-grey-lighter:hover{color:#f1f5f8}.lg\\:hover\\:text-grey-lightest:hover{color:#f8fafc}.lg\\:hover\\:text-red-darkest:hover{color:#3b0d0c}.lg\\:hover\\:text-red-darker:hover{color:#621b18}.lg\\:hover\\:text-red-dark:hover{color:#cc1f1a}.lg\\:hover\\:text-red:hover{color:#e3342f}.lg\\:hover\\:text-red-light:hover{color:#ef5753}.lg\\:hover\\:text-red-lighter:hover{color:#f9acaa}.lg\\:hover\\:text-red-lightest:hover{color:#fcebea}.lg\\:hover\\:text-orange-darkest:hover{color:#462a16}.lg\\:hover\\:text-orange-darker:hover{color:#613b1f}.lg\\:hover\\:text-orange-dark:hover{color:#de751f}.lg\\:hover\\:text-orange:hover{color:#f6993f}.lg\\:hover\\:text-orange-light:hover{color:#faad63}.lg\\:hover\\:text-orange-lighter:hover{color:#fcd9b6}.lg\\:hover\\:text-orange-lightest:hover{color:#fff5eb}.lg\\:hover\\:text-yellow-darkest:hover{color:#453411}.lg\\:hover\\:text-yellow-darker:hover{color:#684f1d}.lg\\:hover\\:text-yellow-dark:hover{color:#f2d024}.lg\\:hover\\:text-yellow:hover{color:#ffed4a}.lg\\:hover\\:text-yellow-light:hover{color:#fff382}.lg\\:hover\\:text-yellow-lighter:hover{color:#fff9c2}.lg\\:hover\\:text-yellow-lightest:hover{color:#fcfbeb}.lg\\:hover\\:text-green-darkest:hover{color:#0f2f21}.lg\\:hover\\:text-green-darker:hover{color:#1a4731}.lg\\:hover\\:text-green-dark:hover{color:#1f9d55}.lg\\:hover\\:text-green:hover{color:#38c172}.lg\\:hover\\:text-green-light:hover{color:#51d88a}.lg\\:hover\\:text-green-lighter:hover{color:#a2f5bf}.lg\\:hover\\:text-green-lightest:hover{color:#e3fcec}.lg\\:hover\\:text-teal-darkest:hover{color:#0d3331}.lg\\:hover\\:text-teal-darker:hover{color:#20504f}.lg\\:hover\\:text-teal-dark:hover{color:#38a89d}.lg\\:hover\\:text-teal:hover{color:#4dc0b5}.lg\\:hover\\:text-teal-light:hover{color:#64d5ca}.lg\\:hover\\:text-teal-lighter:hover{color:#a0f0ed}.lg\\:hover\\:text-teal-lightest:hover{color:#e8fffe}.lg\\:hover\\:text-blue-darkest:hover{color:#12283a}.lg\\:hover\\:text-blue-darker:hover{color:#1c3d5a}.lg\\:hover\\:text-blue-dark:hover{color:#2779bd}.lg\\:hover\\:text-blue:hover{color:#3490dc}.lg\\:hover\\:text-blue-light:hover{color:#6cb2eb}.lg\\:hover\\:text-blue-lighter:hover{color:#bcdefa}.lg\\:hover\\:text-blue-lightest:hover{color:#eff8ff}.lg\\:hover\\:text-indigo-darkest:hover{color:#191e38}.lg\\:hover\\:text-indigo-darker:hover{color:#2f365f}.lg\\:hover\\:text-indigo-dark:hover{color:#5661b3}.lg\\:hover\\:text-indigo:hover{color:#6574cd}.lg\\:hover\\:text-indigo-light:hover{color:#7886d7}.lg\\:hover\\:text-indigo-lighter:hover{color:#b2b7ff}.lg\\:hover\\:text-indigo-lightest:hover{color:#e6e8ff}.lg\\:hover\\:text-purple-darkest:hover{color:#21183c}.lg\\:hover\\:text-purple-darker:hover{color:#382b5f}.lg\\:hover\\:text-purple-dark:hover{color:#794acf}.lg\\:hover\\:text-purple:hover{color:#9561e2}.lg\\:hover\\:text-purple-light:hover{color:#a779e9}.lg\\:hover\\:text-purple-lighter:hover{color:#d6bbfc}.lg\\:hover\\:text-purple-lightest:hover{color:#f3ebff}.lg\\:hover\\:text-pink-darkest:hover{color:#451225}.lg\\:hover\\:text-pink-darker:hover{color:#6f213f}.lg\\:hover\\:text-pink-dark:hover{color:#eb5286}.lg\\:hover\\:text-pink:hover{color:#f66d9b}.lg\\:hover\\:text-pink-light:hover{color:#fa7ea8}.lg\\:hover\\:text-pink-lighter:hover{color:#ffbbca}.lg\\:hover\\:text-pink-lightest:hover{color:#ffebef}.lg\\:focus\\:text-transparent:focus{color:transparent}.lg\\:focus\\:text-black:focus{color:var(--black)}.lg\\:focus\\:text-white:focus{color:var(--white)}.lg\\:focus\\:text-primary:focus{color:var(--primary)}.lg\\:focus\\:text-secondary:focus{color:var(--secondary)}.lg\\:focus\\:text-info:focus{color:var(--info)}.lg\\:focus\\:text-warning:focus{color:var(--warning)}.lg\\:focus\\:text-success:focus{color:var(--success)}.lg\\:focus\\:text-danger:focus{color:var(--danger)}.lg\\:focus\\:text-sidebar:focus{color:var(--sidebar)}.lg\\:focus\\:text-documentation:focus{color:var(--documentation)}.lg\\:focus\\:text-navbar:focus{color:var(--navbar)}.lg\\:focus\\:text-grey-darkest:focus{color:#3d4852}.lg\\:focus\\:text-grey-darker:focus{color:#606f7b}.lg\\:focus\\:text-grey-dark:focus{color:#8795a1}.lg\\:focus\\:text-grey:focus{color:#b8c2cc}.lg\\:focus\\:text-grey-light:focus{color:#dae1e7}.lg\\:focus\\:text-grey-lighter:focus{color:#f1f5f8}.lg\\:focus\\:text-grey-lightest:focus{color:#f8fafc}.lg\\:focus\\:text-red-darkest:focus{color:#3b0d0c}.lg\\:focus\\:text-red-darker:focus{color:#621b18}.lg\\:focus\\:text-red-dark:focus{color:#cc1f1a}.lg\\:focus\\:text-red:focus{color:#e3342f}.lg\\:focus\\:text-red-light:focus{color:#ef5753}.lg\\:focus\\:text-red-lighter:focus{color:#f9acaa}.lg\\:focus\\:text-red-lightest:focus{color:#fcebea}.lg\\:focus\\:text-orange-darkest:focus{color:#462a16}.lg\\:focus\\:text-orange-darker:focus{color:#613b1f}.lg\\:focus\\:text-orange-dark:focus{color:#de751f}.lg\\:focus\\:text-orange:focus{color:#f6993f}.lg\\:focus\\:text-orange-light:focus{color:#faad63}.lg\\:focus\\:text-orange-lighter:focus{color:#fcd9b6}.lg\\:focus\\:text-orange-lightest:focus{color:#fff5eb}.lg\\:focus\\:text-yellow-darkest:focus{color:#453411}.lg\\:focus\\:text-yellow-darker:focus{color:#684f1d}.lg\\:focus\\:text-yellow-dark:focus{color:#f2d024}.lg\\:focus\\:text-yellow:focus{color:#ffed4a}.lg\\:focus\\:text-yellow-light:focus{color:#fff382}.lg\\:focus\\:text-yellow-lighter:focus{color:#fff9c2}.lg\\:focus\\:text-yellow-lightest:focus{color:#fcfbeb}.lg\\:focus\\:text-green-darkest:focus{color:#0f2f21}.lg\\:focus\\:text-green-darker:focus{color:#1a4731}.lg\\:focus\\:text-green-dark:focus{color:#1f9d55}.lg\\:focus\\:text-green:focus{color:#38c172}.lg\\:focus\\:text-green-light:focus{color:#51d88a}.lg\\:focus\\:text-green-lighter:focus{color:#a2f5bf}.lg\\:focus\\:text-green-lightest:focus{color:#e3fcec}.lg\\:focus\\:text-teal-darkest:focus{color:#0d3331}.lg\\:focus\\:text-teal-darker:focus{color:#20504f}.lg\\:focus\\:text-teal-dark:focus{color:#38a89d}.lg\\:focus\\:text-teal:focus{color:#4dc0b5}.lg\\:focus\\:text-teal-light:focus{color:#64d5ca}.lg\\:focus\\:text-teal-lighter:focus{color:#a0f0ed}.lg\\:focus\\:text-teal-lightest:focus{color:#e8fffe}.lg\\:focus\\:text-blue-darkest:focus{color:#12283a}.lg\\:focus\\:text-blue-darker:focus{color:#1c3d5a}.lg\\:focus\\:text-blue-dark:focus{color:#2779bd}.lg\\:focus\\:text-blue:focus{color:#3490dc}.lg\\:focus\\:text-blue-light:focus{color:#6cb2eb}.lg\\:focus\\:text-blue-lighter:focus{color:#bcdefa}.lg\\:focus\\:text-blue-lightest:focus{color:#eff8ff}.lg\\:focus\\:text-indigo-darkest:focus{color:#191e38}.lg\\:focus\\:text-indigo-darker:focus{color:#2f365f}.lg\\:focus\\:text-indigo-dark:focus{color:#5661b3}.lg\\:focus\\:text-indigo:focus{color:#6574cd}.lg\\:focus\\:text-indigo-light:focus{color:#7886d7}.lg\\:focus\\:text-indigo-lighter:focus{color:#b2b7ff}.lg\\:focus\\:text-indigo-lightest:focus{color:#e6e8ff}.lg\\:focus\\:text-purple-darkest:focus{color:#21183c}.lg\\:focus\\:text-purple-darker:focus{color:#382b5f}.lg\\:focus\\:text-purple-dark:focus{color:#794acf}.lg\\:focus\\:text-purple:focus{color:#9561e2}.lg\\:focus\\:text-purple-light:focus{color:#a779e9}.lg\\:focus\\:text-purple-lighter:focus{color:#d6bbfc}.lg\\:focus\\:text-purple-lightest:focus{color:#f3ebff}.lg\\:focus\\:text-pink-darkest:focus{color:#451225}.lg\\:focus\\:text-pink-darker:focus{color:#6f213f}.lg\\:focus\\:text-pink-dark:focus{color:#eb5286}.lg\\:focus\\:text-pink:focus{color:#f66d9b}.lg\\:focus\\:text-pink-light:focus{color:#fa7ea8}.lg\\:focus\\:text-pink-lighter:focus{color:#ffbbca}.lg\\:focus\\:text-pink-lightest:focus{color:#ffebef}.lg\\:text-xs{font-size:.75rem}.lg\\:text-sm{font-size:.875rem}.lg\\:text-base{font-size:1rem}.lg\\:text-lg{font-size:1.125rem}.lg\\:text-xl{font-size:1.25rem}.lg\\:text-2xl{font-size:1.5rem}.lg\\:text-3xl{font-size:1.875rem}.lg\\:text-4xl{font-size:2.25rem}.lg\\:text-5xl{font-size:3rem}.lg\\:italic{font-style:italic}.lg\\:roman{font-style:normal}.lg\\:uppercase{text-transform:uppercase}.lg\\:lowercase{text-transform:lowercase}.lg\\:capitalize{text-transform:capitalize}.lg\\:normal-case{text-transform:none}.lg\\:underline{text-decoration:underline}.lg\\:line-through{text-decoration:line-through}.lg\\:no-underline{text-decoration:none}.lg\\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg\\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.lg\\:hover\\:italic:hover{font-style:italic}.lg\\:hover\\:roman:hover{font-style:normal}.lg\\:hover\\:uppercase:hover{text-transform:uppercase}.lg\\:hover\\:lowercase:hover{text-transform:lowercase}.lg\\:hover\\:capitalize:hover{text-transform:capitalize}.lg\\:hover\\:normal-case:hover{text-transform:none}.lg\\:hover\\:underline:hover{text-decoration:underline}.lg\\:hover\\:line-through:hover{text-decoration:line-through}.lg\\:hover\\:no-underline:hover{text-decoration:none}.lg\\:hover\\:antialiased:hover{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg\\:hover\\:subpixel-antialiased:hover{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.lg\\:focus\\:italic:focus{font-style:italic}.lg\\:focus\\:roman:focus{font-style:normal}.lg\\:focus\\:uppercase:focus{text-transform:uppercase}.lg\\:focus\\:lowercase:focus{text-transform:lowercase}.lg\\:focus\\:capitalize:focus{text-transform:capitalize}.lg\\:focus\\:normal-case:focus{text-transform:none}.lg\\:focus\\:underline:focus{text-decoration:underline}.lg\\:focus\\:line-through:focus{text-decoration:line-through}.lg\\:focus\\:no-underline:focus{text-decoration:none}.lg\\:focus\\:antialiased:focus{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg\\:focus\\:subpixel-antialiased:focus{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.lg\\:tracking-tight{letter-spacing:-.05em}.lg\\:tracking-normal{letter-spacing:0}.lg\\:tracking-wide{letter-spacing:.05em}.lg\\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lg\\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.lg\\:align-baseline{vertical-align:baseline}.lg\\:align-top{vertical-align:top}.lg\\:align-middle{vertical-align:middle}.lg\\:align-bottom{vertical-align:bottom}.lg\\:align-text-top{vertical-align:text-top}.lg\\:align-text-bottom{vertical-align:text-bottom}.lg\\:visible{visibility:visible}.lg\\:invisible{visibility:hidden}.lg\\:whitespace-normal{white-space:normal}.lg\\:whitespace-no-wrap{white-space:nowrap}.lg\\:whitespace-pre{white-space:pre}.lg\\:whitespace-pre-line{white-space:pre-line}.lg\\:whitespace-pre-wrap{white-space:pre-wrap}.lg\\:break-words{word-wrap:break-word}.lg\\:break-normal{word-wrap:normal}.lg\\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lg\\:w-1{width:.25rem}.lg\\:w-2{width:.5rem}.lg\\:w-3{width:.75rem}.lg\\:w-4{width:1rem}.lg\\:w-5{width:1.25rem}.lg\\:w-6{width:1.5rem}.lg\\:w-8{width:2rem}.lg\\:w-10{width:2.5rem}.lg\\:w-12{width:3rem}.lg\\:w-16{width:4rem}.lg\\:w-24{width:6rem}.lg\\:w-32{width:8rem}.lg\\:w-48{width:12rem}.lg\\:w-64{width:16rem}.lg\\:w-auto{width:auto}.lg\\:w-px{width:1px}.lg\\:w-1\\/2{width:50%}.lg\\:w-1\\/3{width:33.33333%}.lg\\:w-2\\/3{width:66.66667%}.lg\\:w-1\\/4{width:25%}.lg\\:w-3\\/4{width:75%}.lg\\:w-1\\/5{width:20%}.lg\\:w-2\\/5{width:40%}.lg\\:w-3\\/5{width:60%}.lg\\:w-4\\/5{width:80%}.lg\\:w-1\\/6{width:16.66667%}.lg\\:w-5\\/6{width:83.33333%}.lg\\:w-full{width:100%}.lg\\:w-screen{width:100vw}.lg\\:z-0{z-index:0}.lg\\:z-10{z-index:10}.lg\\:z-20{z-index:20}.lg\\:z-30{z-index:30}.lg\\:z-40{z-index:40}.lg\\:z-50{z-index:50}.lg\\:z-auto{z-index:auto}}"
  },
  {
    "path": "public/vendor/binarytorch/larecipe/assets/css/font-awesome-v4-shims.css",
    "content": "/*!\n * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */.fa.fa-glass:before{content:\"\\F000\"}.fa.fa-meetup{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-star-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-star-o:before{content:\"\\F005\"}.fa.fa-close:before,.fa.fa-remove:before{content:\"\\F00D\"}.fa.fa-gear:before{content:\"\\F013\"}.fa.fa-trash-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-trash-o:before{content:\"\\F2ED\"}.fa.fa-file-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-o:before{content:\"\\F15B\"}.fa.fa-clock-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-clock-o:before{content:\"\\F017\"}.fa.fa-arrow-circle-o-down{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-arrow-circle-o-down:before{content:\"\\F358\"}.fa.fa-arrow-circle-o-up{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-arrow-circle-o-up:before{content:\"\\F35B\"}.fa.fa-play-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-play-circle-o:before{content:\"\\F144\"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:\"\\F01E\"}.fa.fa-refresh:before{content:\"\\F021\"}.fa.fa-list-alt{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-dedent:before{content:\"\\F03B\"}.fa.fa-video-camera:before{content:\"\\F03D\"}.fa.fa-picture-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-picture-o:before{content:\"\\F03E\"}.fa.fa-photo{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-photo:before{content:\"\\F03E\"}.fa.fa-image{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-image:before{content:\"\\F03E\"}.fa.fa-pencil:before{content:\"\\F303\"}.fa.fa-map-marker:before{content:\"\\F3C5\"}.fa.fa-pencil-square-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-pencil-square-o:before{content:\"\\F044\"}.fa.fa-share-square-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-share-square-o:before{content:\"\\F14D\"}.fa.fa-check-square-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-check-square-o:before{content:\"\\F14A\"}.fa.fa-arrows:before{content:\"\\F0B2\"}.fa.fa-times-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-times-circle-o:before{content:\"\\F057\"}.fa.fa-check-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-check-circle-o:before{content:\"\\F058\"}.fa.fa-mail-forward:before{content:\"\\F064\"}.fa.fa-eye,.fa.fa-eye-slash{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-warning:before{content:\"\\F071\"}.fa.fa-calendar:before{content:\"\\F073\"}.fa.fa-arrows-v:before{content:\"\\F338\"}.fa.fa-arrows-h:before{content:\"\\F337\"}.fa.fa-bar-chart{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-bar-chart:before{content:\"\\F080\"}.fa.fa-bar-chart-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-bar-chart-o:before{content:\"\\F080\"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-gears:before{content:\"\\F085\"}.fa.fa-thumbs-o-up{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-thumbs-o-up:before{content:\"\\F164\"}.fa.fa-thumbs-o-down{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-thumbs-o-down:before{content:\"\\F165\"}.fa.fa-heart-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-heart-o:before{content:\"\\F004\"}.fa.fa-sign-out:before{content:\"\\F2F5\"}.fa.fa-linkedin-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-linkedin-square:before{content:\"\\F08C\"}.fa.fa-thumb-tack:before{content:\"\\F08D\"}.fa.fa-external-link:before{content:\"\\F35D\"}.fa.fa-sign-in:before{content:\"\\F2F6\"}.fa.fa-github-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-lemon-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-lemon-o:before{content:\"\\F094\"}.fa.fa-square-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-square-o:before{content:\"\\F0C8\"}.fa.fa-bookmark-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-bookmark-o:before{content:\"\\F02E\"}.fa.fa-facebook,.fa.fa-twitter{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-facebook:before{content:\"\\F39E\"}.fa.fa-facebook-f{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-facebook-f:before{content:\"\\F39E\"}.fa.fa-github{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-credit-card{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-feed:before{content:\"\\F09E\"}.fa.fa-hdd-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hdd-o:before{content:\"\\F0A0\"}.fa.fa-hand-o-right{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-o-right:before{content:\"\\F0A4\"}.fa.fa-hand-o-left{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-o-left:before{content:\"\\F0A5\"}.fa.fa-hand-o-up{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-o-up:before{content:\"\\F0A6\"}.fa.fa-hand-o-down{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-o-down:before{content:\"\\F0A7\"}.fa.fa-arrows-alt:before{content:\"\\F31E\"}.fa.fa-group:before{content:\"\\F0C0\"}.fa.fa-chain:before{content:\"\\F0C1\"}.fa.fa-scissors:before{content:\"\\F0C4\"}.fa.fa-files-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-files-o:before{content:\"\\F0C5\"}.fa.fa-floppy-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-floppy-o:before{content:\"\\F0C7\"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:\"\\F0C9\"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-google-plus:before{content:\"\\F0D5\"}.fa.fa-money{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-money:before{content:\"\\F3D1\"}.fa.fa-unsorted:before{content:\"\\F0DC\"}.fa.fa-sort-desc:before{content:\"\\F0DD\"}.fa.fa-sort-asc:before{content:\"\\F0DE\"}.fa.fa-linkedin{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-linkedin:before{content:\"\\F0E1\"}.fa.fa-rotate-left:before{content:\"\\F0E2\"}.fa.fa-legal:before{content:\"\\F0E3\"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:\"\\F3FD\"}.fa.fa-comment-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-comment-o:before{content:\"\\F075\"}.fa.fa-comments-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-comments-o:before{content:\"\\F086\"}.fa.fa-flash:before{content:\"\\F0E7\"}.fa.fa-clipboard,.fa.fa-paste{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-paste:before{content:\"\\F328\"}.fa.fa-lightbulb-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-lightbulb-o:before{content:\"\\F0EB\"}.fa.fa-exchange:before{content:\"\\F362\"}.fa.fa-cloud-download:before{content:\"\\F381\"}.fa.fa-cloud-upload:before{content:\"\\F382\"}.fa.fa-bell-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-bell-o:before{content:\"\\F0F3\"}.fa.fa-cutlery:before{content:\"\\F2E7\"}.fa.fa-file-text-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-text-o:before{content:\"\\F15C\"}.fa.fa-building-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-building-o:before{content:\"\\F1AD\"}.fa.fa-hospital-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hospital-o:before{content:\"\\F0F8\"}.fa.fa-tablet:before{content:\"\\F3FA\"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:\"\\F3CD\"}.fa.fa-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-circle-o:before{content:\"\\F111\"}.fa.fa-mail-reply:before{content:\"\\F3E5\"}.fa.fa-github-alt{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-folder-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-folder-o:before{content:\"\\F07B\"}.fa.fa-folder-open-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-folder-open-o:before{content:\"\\F07C\"}.fa.fa-smile-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-smile-o:before{content:\"\\F118\"}.fa.fa-frown-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-frown-o:before{content:\"\\F119\"}.fa.fa-meh-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-meh-o:before{content:\"\\F11A\"}.fa.fa-keyboard-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-keyboard-o:before{content:\"\\F11C\"}.fa.fa-flag-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-flag-o:before{content:\"\\F024\"}.fa.fa-mail-reply-all:before{content:\"\\F122\"}.fa.fa-star-half-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-star-half-o:before{content:\"\\F089\"}.fa.fa-star-half-empty{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-star-half-empty:before{content:\"\\F089\"}.fa.fa-star-half-full{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-star-half-full:before{content:\"\\F089\"}.fa.fa-code-fork:before{content:\"\\F126\"}.fa.fa-chain-broken:before{content:\"\\F127\"}.fa.fa-shield:before{content:\"\\F3ED\"}.fa.fa-calendar-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-calendar-o:before{content:\"\\F133\"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-ticket:before{content:\"\\F3FF\"}.fa.fa-minus-square-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-minus-square-o:before{content:\"\\F146\"}.fa.fa-level-up:before{content:\"\\F3BF\"}.fa.fa-level-down:before{content:\"\\F3BE\"}.fa.fa-pencil-square:before{content:\"\\F14B\"}.fa.fa-external-link-square:before{content:\"\\F360\"}.fa.fa-compass{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-caret-square-o-down{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-caret-square-o-down:before{content:\"\\F150\"}.fa.fa-toggle-down{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-toggle-down:before{content:\"\\F150\"}.fa.fa-caret-square-o-up{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-caret-square-o-up:before{content:\"\\F151\"}.fa.fa-toggle-up{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-toggle-up:before{content:\"\\F151\"}.fa.fa-caret-square-o-right{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-caret-square-o-right:before{content:\"\\F152\"}.fa.fa-toggle-right{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-toggle-right:before{content:\"\\F152\"}.fa.fa-eur:before,.fa.fa-euro:before{content:\"\\F153\"}.fa.fa-gbp:before{content:\"\\F154\"}.fa.fa-dollar:before,.fa.fa-usd:before{content:\"\\F155\"}.fa.fa-inr:before,.fa.fa-rupee:before{content:\"\\F156\"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:\"\\F157\"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:\"\\F158\"}.fa.fa-krw:before,.fa.fa-won:before{content:\"\\F159\"}.fa.fa-bitcoin,.fa.fa-btc{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-bitcoin:before{content:\"\\F15A\"}.fa.fa-file-text:before{content:\"\\F15C\"}.fa.fa-sort-alpha-asc:before{content:\"\\F15D\"}.fa.fa-sort-alpha-desc:before{content:\"\\F15E\"}.fa.fa-sort-amount-asc:before{content:\"\\F160\"}.fa.fa-sort-amount-desc:before{content:\"\\F161\"}.fa.fa-sort-numeric-asc:before{content:\"\\F162\"}.fa.fa-sort-numeric-desc:before{content:\"\\F163\"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-youtube-play:before{content:\"\\F167\"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-bitbucket-square:before{content:\"\\F171\"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-long-arrow-down:before{content:\"\\F309\"}.fa.fa-long-arrow-up:before{content:\"\\F30C\"}.fa.fa-long-arrow-left:before{content:\"\\F30A\"}.fa.fa-long-arrow-right:before{content:\"\\F30B\"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-gittip:before{content:\"\\F184\"}.fa.fa-sun-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-sun-o:before{content:\"\\F185\"}.fa.fa-moon-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-moon-o:before{content:\"\\F186\"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-arrow-circle-o-right{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-arrow-circle-o-right:before{content:\"\\F35A\"}.fa.fa-arrow-circle-o-left{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-arrow-circle-o-left:before{content:\"\\F359\"}.fa.fa-caret-square-o-left{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-caret-square-o-left:before{content:\"\\F191\"}.fa.fa-toggle-left{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-toggle-left:before{content:\"\\F191\"}.fa.fa-dot-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-dot-circle-o:before{content:\"\\F192\"}.fa.fa-vimeo-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:\"\\F195\"}.fa.fa-plus-square-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-plus-square-o:before{content:\"\\F0FE\"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:\"\\F19C\"}.fa.fa-mortar-board:before{content:\"\\F19D\"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-spoon:before{content:\"\\F2E5\"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-automobile:before{content:\"\\F1B9\"}.fa.fa-cab:before{content:\"\\F1BA\"}.fa.fa-envelope-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-envelope-o:before{content:\"\\F0E0\"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-file-pdf-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-pdf-o:before{content:\"\\F1C1\"}.fa.fa-file-word-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-word-o:before{content:\"\\F1C2\"}.fa.fa-file-excel-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-excel-o:before{content:\"\\F1C3\"}.fa.fa-file-powerpoint-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-powerpoint-o:before{content:\"\\F1C4\"}.fa.fa-file-image-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-image-o:before{content:\"\\F1C5\"}.fa.fa-file-photo-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-photo-o:before{content:\"\\F1C5\"}.fa.fa-file-picture-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-picture-o:before{content:\"\\F1C5\"}.fa.fa-file-archive-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-archive-o:before{content:\"\\F1C6\"}.fa.fa-file-zip-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-zip-o:before{content:\"\\F1C6\"}.fa.fa-file-audio-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-audio-o:before{content:\"\\F1C7\"}.fa.fa-file-sound-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-sound-o:before{content:\"\\F1C7\"}.fa.fa-file-video-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-video-o:before{content:\"\\F1C8\"}.fa.fa-file-movie-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-movie-o:before{content:\"\\F1C8\"}.fa.fa-file-code-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-file-code-o:before{content:\"\\F1C9\"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-life-bouy:before{content:\"\\F1CD\"}.fa.fa-life-buoy{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-life-buoy:before{content:\"\\F1CD\"}.fa.fa-life-saver{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-life-saver:before{content:\"\\F1CD\"}.fa.fa-support{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-support:before{content:\"\\F1CD\"}.fa.fa-circle-o-notch:before{content:\"\\F1CE\"}.fa.fa-ra,.fa.fa-rebel{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-ra:before{content:\"\\F1D0\"}.fa.fa-resistance{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-resistance:before{content:\"\\F1D0\"}.fa.fa-empire,.fa.fa-ge{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-ge:before{content:\"\\F1D1\"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-y-combinator-square:before{content:\"\\F1D4\"}.fa.fa-yc-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-yc-square:before{content:\"\\F1D4\"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-wechat:before{content:\"\\F1D7\"}.fa.fa-send:before{content:\"\\F1D8\"}.fa.fa-paper-plane-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-paper-plane-o:before{content:\"\\F1D8\"}.fa.fa-send-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-send-o:before{content:\"\\F1D8\"}.fa.fa-circle-thin{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-circle-thin:before{content:\"\\F111\"}.fa.fa-header:before{content:\"\\F1DC\"}.fa.fa-sliders:before{content:\"\\F1DE\"}.fa.fa-futbol-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-futbol-o:before{content:\"\\F1E3\"}.fa.fa-soccer-ball-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-soccer-ball-o:before{content:\"\\F1E3\"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-newspaper-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-newspaper-o:before{content:\"\\F1EA\"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-bell-slash-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-bell-slash-o:before{content:\"\\F1F6\"}.fa.fa-trash:before{content:\"\\F2ED\"}.fa.fa-copyright{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-eyedropper:before{content:\"\\F1FB\"}.fa.fa-area-chart:before{content:\"\\F1FE\"}.fa.fa-pie-chart:before{content:\"\\F200\"}.fa.fa-line-chart:before{content:\"\\F201\"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-cc{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-cc:before{content:\"\\F20A\"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:\"\\F20B\"}.fa.fa-meanpath{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-meanpath:before{content:\"\\F2B4\"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-diamond{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-diamond:before{content:\"\\F3A5\"}.fa.fa-intersex:before{content:\"\\F224\"}.fa.fa-facebook-official{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-facebook-official:before{content:\"\\F09A\"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-hotel:before{content:\"\\F236\"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-yc:before{content:\"\\F23B\"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:\"\\F240\"}.fa.fa-battery-3:before{content:\"\\F241\"}.fa.fa-battery-2:before{content:\"\\F242\"}.fa.fa-battery-1:before{content:\"\\F243\"}.fa.fa-battery-0:before{content:\"\\F244\"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-sticky-note-o:before{content:\"\\F249\"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hourglass-o:before{content:\"\\F254\"}.fa.fa-hourglass-1:before{content:\"\\F251\"}.fa.fa-hourglass-2:before{content:\"\\F252\"}.fa.fa-hourglass-3:before{content:\"\\F253\"}.fa.fa-hand-rock-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-rock-o:before{content:\"\\F255\"}.fa.fa-hand-grab-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-grab-o:before{content:\"\\F255\"}.fa.fa-hand-paper-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-paper-o:before{content:\"\\F256\"}.fa.fa-hand-stop-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-stop-o:before{content:\"\\F256\"}.fa.fa-hand-scissors-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-scissors-o:before{content:\"\\F257\"}.fa.fa-hand-lizard-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-lizard-o:before{content:\"\\F258\"}.fa.fa-hand-spock-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-spock-o:before{content:\"\\F259\"}.fa.fa-hand-pointer-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-pointer-o:before{content:\"\\F25A\"}.fa.fa-hand-peace-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-hand-peace-o:before{content:\"\\F25B\"}.fa.fa-registered{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-television:before{content:\"\\F26C\"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-calendar-plus-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-calendar-plus-o:before{content:\"\\F271\"}.fa.fa-calendar-minus-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-calendar-minus-o:before{content:\"\\F272\"}.fa.fa-calendar-times-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-calendar-times-o:before{content:\"\\F273\"}.fa.fa-calendar-check-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-calendar-check-o:before{content:\"\\F274\"}.fa.fa-map-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-map-o:before{content:\"\\F279\"}.fa.fa-commenting:before{content:\"\\F4AD\"}.fa.fa-commenting-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-commenting-o:before{content:\"\\F4AD\"}.fa.fa-houzz,.fa.fa-vimeo{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-vimeo:before{content:\"\\F27D\"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-credit-card-alt:before{content:\"\\F09D\"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-pause-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-pause-circle-o:before{content:\"\\F28B\"}.fa.fa-stop-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-stop-circle-o:before{content:\"\\F28D\"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-wheelchair-alt:before{content:\"\\F368\"}.fa.fa-question-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-question-circle-o:before{content:\"\\F059\"}.fa.fa-volume-control-phone:before{content:\"\\F2A0\"}.fa.fa-asl-interpreting:before{content:\"\\F2A3\"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:\"\\F2A4\"}.fa.fa-glide,.fa.fa-glide-g{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-signing:before{content:\"\\F2A7\"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-google-plus-official:before{content:\"\\F2B3\"}.fa.fa-google-plus-circle{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-google-plus-circle:before{content:\"\\F2B3\"}.fa.fa-fa,.fa.fa-font-awesome{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-fa:before{content:\"\\F2B4\"}.fa.fa-handshake-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-handshake-o:before{content:\"\\F2B5\"}.fa.fa-envelope-open-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-envelope-open-o:before{content:\"\\F2B6\"}.fa.fa-linode{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-address-book-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-address-book-o:before{content:\"\\F2B9\"}.fa.fa-vcard:before{content:\"\\F2BB\"}.fa.fa-address-card-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-address-card-o:before{content:\"\\F2BB\"}.fa.fa-vcard-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-vcard-o:before{content:\"\\F2BB\"}.fa.fa-user-circle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-user-circle-o:before{content:\"\\F2BD\"}.fa.fa-user-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-user-o:before{content:\"\\F007\"}.fa.fa-id-badge{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-drivers-license:before{content:\"\\F2C2\"}.fa.fa-id-card-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-id-card-o:before{content:\"\\F2C2\"}.fa.fa-drivers-license-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-drivers-license-o:before{content:\"\\F2C2\"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:\"\\F2C7\"}.fa.fa-thermometer-3:before{content:\"\\F2C8\"}.fa.fa-thermometer-2:before{content:\"\\F2C9\"}.fa.fa-thermometer-1:before{content:\"\\F2CA\"}.fa.fa-thermometer-0:before{content:\"\\F2CB\"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:\"\\F2CD\"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-times-rectangle:before{content:\"\\F410\"}.fa.fa-window-close-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-window-close-o:before{content:\"\\F410\"}.fa.fa-times-rectangle-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-times-rectangle-o:before{content:\"\\F410\"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:Font Awesome\\ 5 Brands;font-weight:400}.fa.fa-eercast:before{content:\"\\F2DA\"}.fa.fa-snowflake-o{font-family:Font Awesome\\ 5 Free;font-weight:400}.fa.fa-snowflake-o:before{content:\"\\F2DC\"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:Font Awesome\\ 5 Brands;font-weight:400}"
  },
  {
    "path": "public/vendor/binarytorch/larecipe/assets/css/font-awesome.css",
    "content": "/*!\n * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:\"\\F26E\"}.fa-accessible-icon:before{content:\"\\F368\"}.fa-accusoft:before{content:\"\\F369\"}.fa-acquisitions-incorporated:before{content:\"\\F6AF\"}.fa-ad:before{content:\"\\F641\"}.fa-address-book:before{content:\"\\F2B9\"}.fa-address-card:before{content:\"\\F2BB\"}.fa-adjust:before{content:\"\\F042\"}.fa-adn:before{content:\"\\F170\"}.fa-adobe:before{content:\"\\F778\"}.fa-adversal:before{content:\"\\F36A\"}.fa-affiliatetheme:before{content:\"\\F36B\"}.fa-air-freshener:before{content:\"\\F5D0\"}.fa-airbnb:before{content:\"\\F834\"}.fa-algolia:before{content:\"\\F36C\"}.fa-align-center:before{content:\"\\F037\"}.fa-align-justify:before{content:\"\\F039\"}.fa-align-left:before{content:\"\\F036\"}.fa-align-right:before{content:\"\\F038\"}.fa-alipay:before{content:\"\\F642\"}.fa-allergies:before{content:\"\\F461\"}.fa-amazon:before{content:\"\\F270\"}.fa-amazon-pay:before{content:\"\\F42C\"}.fa-ambulance:before{content:\"\\F0F9\"}.fa-american-sign-language-interpreting:before{content:\"\\F2A3\"}.fa-amilia:before{content:\"\\F36D\"}.fa-anchor:before{content:\"\\F13D\"}.fa-android:before{content:\"\\F17B\"}.fa-angellist:before{content:\"\\F209\"}.fa-angle-double-down:before{content:\"\\F103\"}.fa-angle-double-left:before{content:\"\\F100\"}.fa-angle-double-right:before{content:\"\\F101\"}.fa-angle-double-up:before{content:\"\\F102\"}.fa-angle-down:before{content:\"\\F107\"}.fa-angle-left:before{content:\"\\F104\"}.fa-angle-right:before{content:\"\\F105\"}.fa-angle-up:before{content:\"\\F106\"}.fa-angry:before{content:\"\\F556\"}.fa-angrycreative:before{content:\"\\F36E\"}.fa-angular:before{content:\"\\F420\"}.fa-ankh:before{content:\"\\F644\"}.fa-app-store:before{content:\"\\F36F\"}.fa-app-store-ios:before{content:\"\\F370\"}.fa-apper:before{content:\"\\F371\"}.fa-apple:before{content:\"\\F179\"}.fa-apple-alt:before{content:\"\\F5D1\"}.fa-apple-pay:before{content:\"\\F415\"}.fa-archive:before{content:\"\\F187\"}.fa-archway:before{content:\"\\F557\"}.fa-arrow-alt-circle-down:before{content:\"\\F358\"}.fa-arrow-alt-circle-left:before{content:\"\\F359\"}.fa-arrow-alt-circle-right:before{content:\"\\F35A\"}.fa-arrow-alt-circle-up:before{content:\"\\F35B\"}.fa-arrow-circle-down:before{content:\"\\F0AB\"}.fa-arrow-circle-left:before{content:\"\\F0A8\"}.fa-arrow-circle-right:before{content:\"\\F0A9\"}.fa-arrow-circle-up:before{content:\"\\F0AA\"}.fa-arrow-down:before{content:\"\\F063\"}.fa-arrow-left:before{content:\"\\F060\"}.fa-arrow-right:before{content:\"\\F061\"}.fa-arrow-up:before{content:\"\\F062\"}.fa-arrows-alt:before{content:\"\\F0B2\"}.fa-arrows-alt-h:before{content:\"\\F337\"}.fa-arrows-alt-v:before{content:\"\\F338\"}.fa-artstation:before{content:\"\\F77A\"}.fa-assistive-listening-systems:before{content:\"\\F2A2\"}.fa-asterisk:before{content:\"\\F069\"}.fa-asymmetrik:before{content:\"\\F372\"}.fa-at:before{content:\"\\F1FA\"}.fa-atlas:before{content:\"\\F558\"}.fa-atlassian:before{content:\"\\F77B\"}.fa-atom:before{content:\"\\F5D2\"}.fa-audible:before{content:\"\\F373\"}.fa-audio-description:before{content:\"\\F29E\"}.fa-autoprefixer:before{content:\"\\F41C\"}.fa-avianex:before{content:\"\\F374\"}.fa-aviato:before{content:\"\\F421\"}.fa-award:before{content:\"\\F559\"}.fa-aws:before{content:\"\\F375\"}.fa-baby:before{content:\"\\F77C\"}.fa-baby-carriage:before{content:\"\\F77D\"}.fa-backspace:before{content:\"\\F55A\"}.fa-backward:before{content:\"\\F04A\"}.fa-bacon:before{content:\"\\F7E5\"}.fa-balance-scale:before{content:\"\\F24E\"}.fa-ban:before{content:\"\\F05E\"}.fa-band-aid:before{content:\"\\F462\"}.fa-bandcamp:before{content:\"\\F2D5\"}.fa-barcode:before{content:\"\\F02A\"}.fa-bars:before{content:\"\\F0C9\"}.fa-baseball-ball:before{content:\"\\F433\"}.fa-basketball-ball:before{content:\"\\F434\"}.fa-bath:before{content:\"\\F2CD\"}.fa-battery-empty:before{content:\"\\F244\"}.fa-battery-full:before{content:\"\\F240\"}.fa-battery-half:before{content:\"\\F242\"}.fa-battery-quarter:before{content:\"\\F243\"}.fa-battery-three-quarters:before{content:\"\\F241\"}.fa-battle-net:before{content:\"\\F835\"}.fa-bed:before{content:\"\\F236\"}.fa-beer:before{content:\"\\F0FC\"}.fa-behance:before{content:\"\\F1B4\"}.fa-behance-square:before{content:\"\\F1B5\"}.fa-bell:before{content:\"\\F0F3\"}.fa-bell-slash:before{content:\"\\F1F6\"}.fa-bezier-curve:before{content:\"\\F55B\"}.fa-bible:before{content:\"\\F647\"}.fa-bicycle:before{content:\"\\F206\"}.fa-bimobject:before{content:\"\\F378\"}.fa-binoculars:before{content:\"\\F1E5\"}.fa-biohazard:before{content:\"\\F780\"}.fa-birthday-cake:before{content:\"\\F1FD\"}.fa-bitbucket:before{content:\"\\F171\"}.fa-bitcoin:before{content:\"\\F379\"}.fa-bity:before{content:\"\\F37A\"}.fa-black-tie:before{content:\"\\F27E\"}.fa-blackberry:before{content:\"\\F37B\"}.fa-blender:before{content:\"\\F517\"}.fa-blender-phone:before{content:\"\\F6B6\"}.fa-blind:before{content:\"\\F29D\"}.fa-blog:before{content:\"\\F781\"}.fa-blogger:before{content:\"\\F37C\"}.fa-blogger-b:before{content:\"\\F37D\"}.fa-bluetooth:before{content:\"\\F293\"}.fa-bluetooth-b:before{content:\"\\F294\"}.fa-bold:before{content:\"\\F032\"}.fa-bolt:before{content:\"\\F0E7\"}.fa-bomb:before{content:\"\\F1E2\"}.fa-bone:before{content:\"\\F5D7\"}.fa-bong:before{content:\"\\F55C\"}.fa-book:before{content:\"\\F02D\"}.fa-book-dead:before{content:\"\\F6B7\"}.fa-book-medical:before{content:\"\\F7E6\"}.fa-book-open:before{content:\"\\F518\"}.fa-book-reader:before{content:\"\\F5DA\"}.fa-bookmark:before{content:\"\\F02E\"}.fa-bootstrap:before{content:\"\\F836\"}.fa-bowling-ball:before{content:\"\\F436\"}.fa-box:before{content:\"\\F466\"}.fa-box-open:before{content:\"\\F49E\"}.fa-boxes:before{content:\"\\F468\"}.fa-braille:before{content:\"\\F2A1\"}.fa-brain:before{content:\"\\F5DC\"}.fa-bread-slice:before{content:\"\\F7EC\"}.fa-briefcase:before{content:\"\\F0B1\"}.fa-briefcase-medical:before{content:\"\\F469\"}.fa-broadcast-tower:before{content:\"\\F519\"}.fa-broom:before{content:\"\\F51A\"}.fa-brush:before{content:\"\\F55D\"}.fa-btc:before{content:\"\\F15A\"}.fa-buffer:before{content:\"\\F837\"}.fa-bug:before{content:\"\\F188\"}.fa-building:before{content:\"\\F1AD\"}.fa-bullhorn:before{content:\"\\F0A1\"}.fa-bullseye:before{content:\"\\F140\"}.fa-burn:before{content:\"\\F46A\"}.fa-buromobelexperte:before{content:\"\\F37F\"}.fa-bus:before{content:\"\\F207\"}.fa-bus-alt:before{content:\"\\F55E\"}.fa-business-time:before{content:\"\\F64A\"}.fa-buysellads:before{content:\"\\F20D\"}.fa-calculator:before{content:\"\\F1EC\"}.fa-calendar:before{content:\"\\F133\"}.fa-calendar-alt:before{content:\"\\F073\"}.fa-calendar-check:before{content:\"\\F274\"}.fa-calendar-day:before{content:\"\\F783\"}.fa-calendar-minus:before{content:\"\\F272\"}.fa-calendar-plus:before{content:\"\\F271\"}.fa-calendar-times:before{content:\"\\F273\"}.fa-calendar-week:before{content:\"\\F784\"}.fa-camera:before{content:\"\\F030\"}.fa-camera-retro:before{content:\"\\F083\"}.fa-campground:before{content:\"\\F6BB\"}.fa-canadian-maple-leaf:before{content:\"\\F785\"}.fa-candy-cane:before{content:\"\\F786\"}.fa-cannabis:before{content:\"\\F55F\"}.fa-capsules:before{content:\"\\F46B\"}.fa-car:before{content:\"\\F1B9\"}.fa-car-alt:before{content:\"\\F5DE\"}.fa-car-battery:before{content:\"\\F5DF\"}.fa-car-crash:before{content:\"\\F5E1\"}.fa-car-side:before{content:\"\\F5E4\"}.fa-caret-down:before{content:\"\\F0D7\"}.fa-caret-left:before{content:\"\\F0D9\"}.fa-caret-right:before{content:\"\\F0DA\"}.fa-caret-square-down:before{content:\"\\F150\"}.fa-caret-square-left:before{content:\"\\F191\"}.fa-caret-square-right:before{content:\"\\F152\"}.fa-caret-square-up:before{content:\"\\F151\"}.fa-caret-up:before{content:\"\\F0D8\"}.fa-carrot:before{content:\"\\F787\"}.fa-cart-arrow-down:before{content:\"\\F218\"}.fa-cart-plus:before{content:\"\\F217\"}.fa-cash-register:before{content:\"\\F788\"}.fa-cat:before{content:\"\\F6BE\"}.fa-cc-amazon-pay:before{content:\"\\F42D\"}.fa-cc-amex:before{content:\"\\F1F3\"}.fa-cc-apple-pay:before{content:\"\\F416\"}.fa-cc-diners-club:before{content:\"\\F24C\"}.fa-cc-discover:before{content:\"\\F1F2\"}.fa-cc-jcb:before{content:\"\\F24B\"}.fa-cc-mastercard:before{content:\"\\F1F1\"}.fa-cc-paypal:before{content:\"\\F1F4\"}.fa-cc-stripe:before{content:\"\\F1F5\"}.fa-cc-visa:before{content:\"\\F1F0\"}.fa-centercode:before{content:\"\\F380\"}.fa-centos:before{content:\"\\F789\"}.fa-certificate:before{content:\"\\F0A3\"}.fa-chair:before{content:\"\\F6C0\"}.fa-chalkboard:before{content:\"\\F51B\"}.fa-chalkboard-teacher:before{content:\"\\F51C\"}.fa-charging-station:before{content:\"\\F5E7\"}.fa-chart-area:before{content:\"\\F1FE\"}.fa-chart-bar:before{content:\"\\F080\"}.fa-chart-line:before{content:\"\\F201\"}.fa-chart-pie:before{content:\"\\F200\"}.fa-check:before{content:\"\\F00C\"}.fa-check-circle:before{content:\"\\F058\"}.fa-check-double:before{content:\"\\F560\"}.fa-check-square:before{content:\"\\F14A\"}.fa-cheese:before{content:\"\\F7EF\"}.fa-chess:before{content:\"\\F439\"}.fa-chess-bishop:before{content:\"\\F43A\"}.fa-chess-board:before{content:\"\\F43C\"}.fa-chess-king:before{content:\"\\F43F\"}.fa-chess-knight:before{content:\"\\F441\"}.fa-chess-pawn:before{content:\"\\F443\"}.fa-chess-queen:before{content:\"\\F445\"}.fa-chess-rook:before{content:\"\\F447\"}.fa-chevron-circle-down:before{content:\"\\F13A\"}.fa-chevron-circle-left:before{content:\"\\F137\"}.fa-chevron-circle-right:before{content:\"\\F138\"}.fa-chevron-circle-up:before{content:\"\\F139\"}.fa-chevron-down:before{content:\"\\F078\"}.fa-chevron-left:before{content:\"\\F053\"}.fa-chevron-right:before{content:\"\\F054\"}.fa-chevron-up:before{content:\"\\F077\"}.fa-child:before{content:\"\\F1AE\"}.fa-chrome:before{content:\"\\F268\"}.fa-chromecast:before{content:\"\\F838\"}.fa-church:before{content:\"\\F51D\"}.fa-circle:before{content:\"\\F111\"}.fa-circle-notch:before{content:\"\\F1CE\"}.fa-city:before{content:\"\\F64F\"}.fa-clinic-medical:before{content:\"\\F7F2\"}.fa-clipboard:before{content:\"\\F328\"}.fa-clipboard-check:before{content:\"\\F46C\"}.fa-clipboard-list:before{content:\"\\F46D\"}.fa-clock:before{content:\"\\F017\"}.fa-clone:before{content:\"\\F24D\"}.fa-closed-captioning:before{content:\"\\F20A\"}.fa-cloud:before{content:\"\\F0C2\"}.fa-cloud-download-alt:before{content:\"\\F381\"}.fa-cloud-meatball:before{content:\"\\F73B\"}.fa-cloud-moon:before{content:\"\\F6C3\"}.fa-cloud-moon-rain:before{content:\"\\F73C\"}.fa-cloud-rain:before{content:\"\\F73D\"}.fa-cloud-showers-heavy:before{content:\"\\F740\"}.fa-cloud-sun:before{content:\"\\F6C4\"}.fa-cloud-sun-rain:before{content:\"\\F743\"}.fa-cloud-upload-alt:before{content:\"\\F382\"}.fa-cloudscale:before{content:\"\\F383\"}.fa-cloudsmith:before{content:\"\\F384\"}.fa-cloudversify:before{content:\"\\F385\"}.fa-cocktail:before{content:\"\\F561\"}.fa-code:before{content:\"\\F121\"}.fa-code-branch:before{content:\"\\F126\"}.fa-codepen:before{content:\"\\F1CB\"}.fa-codiepie:before{content:\"\\F284\"}.fa-coffee:before{content:\"\\F0F4\"}.fa-cog:before{content:\"\\F013\"}.fa-cogs:before{content:\"\\F085\"}.fa-coins:before{content:\"\\F51E\"}.fa-columns:before{content:\"\\F0DB\"}.fa-comment:before{content:\"\\F075\"}.fa-comment-alt:before{content:\"\\F27A\"}.fa-comment-dollar:before{content:\"\\F651\"}.fa-comment-dots:before{content:\"\\F4AD\"}.fa-comment-medical:before{content:\"\\F7F5\"}.fa-comment-slash:before{content:\"\\F4B3\"}.fa-comments:before{content:\"\\F086\"}.fa-comments-dollar:before{content:\"\\F653\"}.fa-compact-disc:before{content:\"\\F51F\"}.fa-compass:before{content:\"\\F14E\"}.fa-compress:before{content:\"\\F066\"}.fa-compress-arrows-alt:before{content:\"\\F78C\"}.fa-concierge-bell:before{content:\"\\F562\"}.fa-confluence:before{content:\"\\F78D\"}.fa-connectdevelop:before{content:\"\\F20E\"}.fa-contao:before{content:\"\\F26D\"}.fa-cookie:before{content:\"\\F563\"}.fa-cookie-bite:before{content:\"\\F564\"}.fa-copy:before{content:\"\\F0C5\"}.fa-copyright:before{content:\"\\F1F9\"}.fa-couch:before{content:\"\\F4B8\"}.fa-cpanel:before{content:\"\\F388\"}.fa-creative-commons:before{content:\"\\F25E\"}.fa-creative-commons-by:before{content:\"\\F4E7\"}.fa-creative-commons-nc:before{content:\"\\F4E8\"}.fa-creative-commons-nc-eu:before{content:\"\\F4E9\"}.fa-creative-commons-nc-jp:before{content:\"\\F4EA\"}.fa-creative-commons-nd:before{content:\"\\F4EB\"}.fa-creative-commons-pd:before{content:\"\\F4EC\"}.fa-creative-commons-pd-alt:before{content:\"\\F4ED\"}.fa-creative-commons-remix:before{content:\"\\F4EE\"}.fa-creative-commons-sa:before{content:\"\\F4EF\"}.fa-creative-commons-sampling:before{content:\"\\F4F0\"}.fa-creative-commons-sampling-plus:before{content:\"\\F4F1\"}.fa-creative-commons-share:before{content:\"\\F4F2\"}.fa-creative-commons-zero:before{content:\"\\F4F3\"}.fa-credit-card:before{content:\"\\F09D\"}.fa-critical-role:before{content:\"\\F6C9\"}.fa-crop:before{content:\"\\F125\"}.fa-crop-alt:before{content:\"\\F565\"}.fa-cross:before{content:\"\\F654\"}.fa-crosshairs:before{content:\"\\F05B\"}.fa-crow:before{content:\"\\F520\"}.fa-crown:before{content:\"\\F521\"}.fa-crutch:before{content:\"\\F7F7\"}.fa-css3:before{content:\"\\F13C\"}.fa-css3-alt:before{content:\"\\F38B\"}.fa-cube:before{content:\"\\F1B2\"}.fa-cubes:before{content:\"\\F1B3\"}.fa-cut:before{content:\"\\F0C4\"}.fa-cuttlefish:before{content:\"\\F38C\"}.fa-d-and-d:before{content:\"\\F38D\"}.fa-d-and-d-beyond:before{content:\"\\F6CA\"}.fa-dashcube:before{content:\"\\F210\"}.fa-database:before{content:\"\\F1C0\"}.fa-deaf:before{content:\"\\F2A4\"}.fa-delicious:before{content:\"\\F1A5\"}.fa-democrat:before{content:\"\\F747\"}.fa-deploydog:before{content:\"\\F38E\"}.fa-deskpro:before{content:\"\\F38F\"}.fa-desktop:before{content:\"\\F108\"}.fa-dev:before{content:\"\\F6CC\"}.fa-deviantart:before{content:\"\\F1BD\"}.fa-dharmachakra:before{content:\"\\F655\"}.fa-dhl:before{content:\"\\F790\"}.fa-diagnoses:before{content:\"\\F470\"}.fa-diaspora:before{content:\"\\F791\"}.fa-dice:before{content:\"\\F522\"}.fa-dice-d20:before{content:\"\\F6CF\"}.fa-dice-d6:before{content:\"\\F6D1\"}.fa-dice-five:before{content:\"\\F523\"}.fa-dice-four:before{content:\"\\F524\"}.fa-dice-one:before{content:\"\\F525\"}.fa-dice-six:before{content:\"\\F526\"}.fa-dice-three:before{content:\"\\F527\"}.fa-dice-two:before{content:\"\\F528\"}.fa-digg:before{content:\"\\F1A6\"}.fa-digital-ocean:before{content:\"\\F391\"}.fa-digital-tachograph:before{content:\"\\F566\"}.fa-directions:before{content:\"\\F5EB\"}.fa-discord:before{content:\"\\F392\"}.fa-discourse:before{content:\"\\F393\"}.fa-divide:before{content:\"\\F529\"}.fa-dizzy:before{content:\"\\F567\"}.fa-dna:before{content:\"\\F471\"}.fa-dochub:before{content:\"\\F394\"}.fa-docker:before{content:\"\\F395\"}.fa-dog:before{content:\"\\F6D3\"}.fa-dollar-sign:before{content:\"\\F155\"}.fa-dolly:before{content:\"\\F472\"}.fa-dolly-flatbed:before{content:\"\\F474\"}.fa-donate:before{content:\"\\F4B9\"}.fa-door-closed:before{content:\"\\F52A\"}.fa-door-open:before{content:\"\\F52B\"}.fa-dot-circle:before{content:\"\\F192\"}.fa-dove:before{content:\"\\F4BA\"}.fa-download:before{content:\"\\F019\"}.fa-draft2digital:before{content:\"\\F396\"}.fa-drafting-compass:before{content:\"\\F568\"}.fa-dragon:before{content:\"\\F6D5\"}.fa-draw-polygon:before{content:\"\\F5EE\"}.fa-dribbble:before{content:\"\\F17D\"}.fa-dribbble-square:before{content:\"\\F397\"}.fa-dropbox:before{content:\"\\F16B\"}.fa-drum:before{content:\"\\F569\"}.fa-drum-steelpan:before{content:\"\\F56A\"}.fa-drumstick-bite:before{content:\"\\F6D7\"}.fa-drupal:before{content:\"\\F1A9\"}.fa-dumbbell:before{content:\"\\F44B\"}.fa-dumpster:before{content:\"\\F793\"}.fa-dumpster-fire:before{content:\"\\F794\"}.fa-dungeon:before{content:\"\\F6D9\"}.fa-dyalog:before{content:\"\\F399\"}.fa-earlybirds:before{content:\"\\F39A\"}.fa-ebay:before{content:\"\\F4F4\"}.fa-edge:before{content:\"\\F282\"}.fa-edit:before{content:\"\\F044\"}.fa-egg:before{content:\"\\F7FB\"}.fa-eject:before{content:\"\\F052\"}.fa-elementor:before{content:\"\\F430\"}.fa-ellipsis-h:before{content:\"\\F141\"}.fa-ellipsis-v:before{content:\"\\F142\"}.fa-ello:before{content:\"\\F5F1\"}.fa-ember:before{content:\"\\F423\"}.fa-empire:before{content:\"\\F1D1\"}.fa-envelope:before{content:\"\\F0E0\"}.fa-envelope-open:before{content:\"\\F2B6\"}.fa-envelope-open-text:before{content:\"\\F658\"}.fa-envelope-square:before{content:\"\\F199\"}.fa-envira:before{content:\"\\F299\"}.fa-equals:before{content:\"\\F52C\"}.fa-eraser:before{content:\"\\F12D\"}.fa-erlang:before{content:\"\\F39D\"}.fa-ethereum:before{content:\"\\F42E\"}.fa-ethernet:before{content:\"\\F796\"}.fa-etsy:before{content:\"\\F2D7\"}.fa-euro-sign:before{content:\"\\F153\"}.fa-evernote:before{content:\"\\F839\"}.fa-exchange-alt:before{content:\"\\F362\"}.fa-exclamation:before{content:\"\\F12A\"}.fa-exclamation-circle:before{content:\"\\F06A\"}.fa-exclamation-triangle:before{content:\"\\F071\"}.fa-expand:before{content:\"\\F065\"}.fa-expand-arrows-alt:before{content:\"\\F31E\"}.fa-expeditedssl:before{content:\"\\F23E\"}.fa-external-link-alt:before{content:\"\\F35D\"}.fa-external-link-square-alt:before{content:\"\\F360\"}.fa-eye:before{content:\"\\F06E\"}.fa-eye-dropper:before{content:\"\\F1FB\"}.fa-eye-slash:before{content:\"\\F070\"}.fa-facebook:before{content:\"\\F09A\"}.fa-facebook-f:before{content:\"\\F39E\"}.fa-facebook-messenger:before{content:\"\\F39F\"}.fa-facebook-square:before{content:\"\\F082\"}.fa-fantasy-flight-games:before{content:\"\\F6DC\"}.fa-fast-backward:before{content:\"\\F049\"}.fa-fast-forward:before{content:\"\\F050\"}.fa-fax:before{content:\"\\F1AC\"}.fa-feather:before{content:\"\\F52D\"}.fa-feather-alt:before{content:\"\\F56B\"}.fa-fedex:before{content:\"\\F797\"}.fa-fedora:before{content:\"\\F798\"}.fa-female:before{content:\"\\F182\"}.fa-fighter-jet:before{content:\"\\F0FB\"}.fa-figma:before{content:\"\\F799\"}.fa-file:before{content:\"\\F15B\"}.fa-file-alt:before{content:\"\\F15C\"}.fa-file-archive:before{content:\"\\F1C6\"}.fa-file-audio:before{content:\"\\F1C7\"}.fa-file-code:before{content:\"\\F1C9\"}.fa-file-contract:before{content:\"\\F56C\"}.fa-file-csv:before{content:\"\\F6DD\"}.fa-file-download:before{content:\"\\F56D\"}.fa-file-excel:before{content:\"\\F1C3\"}.fa-file-export:before{content:\"\\F56E\"}.fa-file-image:before{content:\"\\F1C5\"}.fa-file-import:before{content:\"\\F56F\"}.fa-file-invoice:before{content:\"\\F570\"}.fa-file-invoice-dollar:before{content:\"\\F571\"}.fa-file-medical:before{content:\"\\F477\"}.fa-file-medical-alt:before{content:\"\\F478\"}.fa-file-pdf:before{content:\"\\F1C1\"}.fa-file-powerpoint:before{content:\"\\F1C4\"}.fa-file-prescription:before{content:\"\\F572\"}.fa-file-signature:before{content:\"\\F573\"}.fa-file-upload:before{content:\"\\F574\"}.fa-file-video:before{content:\"\\F1C8\"}.fa-file-word:before{content:\"\\F1C2\"}.fa-fill:before{content:\"\\F575\"}.fa-fill-drip:before{content:\"\\F576\"}.fa-film:before{content:\"\\F008\"}.fa-filter:before{content:\"\\F0B0\"}.fa-fingerprint:before{content:\"\\F577\"}.fa-fire:before{content:\"\\F06D\"}.fa-fire-alt:before{content:\"\\F7E4\"}.fa-fire-extinguisher:before{content:\"\\F134\"}.fa-firefox:before{content:\"\\F269\"}.fa-first-aid:before{content:\"\\F479\"}.fa-first-order:before{content:\"\\F2B0\"}.fa-first-order-alt:before{content:\"\\F50A\"}.fa-firstdraft:before{content:\"\\F3A1\"}.fa-fish:before{content:\"\\F578\"}.fa-fist-raised:before{content:\"\\F6DE\"}.fa-flag:before{content:\"\\F024\"}.fa-flag-checkered:before{content:\"\\F11E\"}.fa-flag-usa:before{content:\"\\F74D\"}.fa-flask:before{content:\"\\F0C3\"}.fa-flickr:before{content:\"\\F16E\"}.fa-flipboard:before{content:\"\\F44D\"}.fa-flushed:before{content:\"\\F579\"}.fa-fly:before{content:\"\\F417\"}.fa-folder:before{content:\"\\F07B\"}.fa-folder-minus:before{content:\"\\F65D\"}.fa-folder-open:before{content:\"\\F07C\"}.fa-folder-plus:before{content:\"\\F65E\"}.fa-font:before{content:\"\\F031\"}.fa-font-awesome:before{content:\"\\F2B4\"}.fa-font-awesome-alt:before{content:\"\\F35C\"}.fa-font-awesome-flag:before{content:\"\\F425\"}.fa-font-awesome-logo-full:before{content:\"\\F4E6\"}.fa-fonticons:before{content:\"\\F280\"}.fa-fonticons-fi:before{content:\"\\F3A2\"}.fa-football-ball:before{content:\"\\F44E\"}.fa-fort-awesome:before{content:\"\\F286\"}.fa-fort-awesome-alt:before{content:\"\\F3A3\"}.fa-forumbee:before{content:\"\\F211\"}.fa-forward:before{content:\"\\F04E\"}.fa-foursquare:before{content:\"\\F180\"}.fa-free-code-camp:before{content:\"\\F2C5\"}.fa-freebsd:before{content:\"\\F3A4\"}.fa-frog:before{content:\"\\F52E\"}.fa-frown:before{content:\"\\F119\"}.fa-frown-open:before{content:\"\\F57A\"}.fa-fulcrum:before{content:\"\\F50B\"}.fa-funnel-dollar:before{content:\"\\F662\"}.fa-futbol:before{content:\"\\F1E3\"}.fa-galactic-republic:before{content:\"\\F50C\"}.fa-galactic-senate:before{content:\"\\F50D\"}.fa-gamepad:before{content:\"\\F11B\"}.fa-gas-pump:before{content:\"\\F52F\"}.fa-gavel:before{content:\"\\F0E3\"}.fa-gem:before{content:\"\\F3A5\"}.fa-genderless:before{content:\"\\F22D\"}.fa-get-pocket:before{content:\"\\F265\"}.fa-gg:before{content:\"\\F260\"}.fa-gg-circle:before{content:\"\\F261\"}.fa-ghost:before{content:\"\\F6E2\"}.fa-gift:before{content:\"\\F06B\"}.fa-gifts:before{content:\"\\F79C\"}.fa-git:before{content:\"\\F1D3\"}.fa-git-alt:before{content:\"\\F841\"}.fa-git-square:before{content:\"\\F1D2\"}.fa-github:before{content:\"\\F09B\"}.fa-github-alt:before{content:\"\\F113\"}.fa-github-square:before{content:\"\\F092\"}.fa-gitkraken:before{content:\"\\F3A6\"}.fa-gitlab:before{content:\"\\F296\"}.fa-gitter:before{content:\"\\F426\"}.fa-glass-cheers:before{content:\"\\F79F\"}.fa-glass-martini:before{content:\"\\F000\"}.fa-glass-martini-alt:before{content:\"\\F57B\"}.fa-glass-whiskey:before{content:\"\\F7A0\"}.fa-glasses:before{content:\"\\F530\"}.fa-glide:before{content:\"\\F2A5\"}.fa-glide-g:before{content:\"\\F2A6\"}.fa-globe:before{content:\"\\F0AC\"}.fa-globe-africa:before{content:\"\\F57C\"}.fa-globe-americas:before{content:\"\\F57D\"}.fa-globe-asia:before{content:\"\\F57E\"}.fa-globe-europe:before{content:\"\\F7A2\"}.fa-gofore:before{content:\"\\F3A7\"}.fa-golf-ball:before{content:\"\\F450\"}.fa-goodreads:before{content:\"\\F3A8\"}.fa-goodreads-g:before{content:\"\\F3A9\"}.fa-google:before{content:\"\\F1A0\"}.fa-google-drive:before{content:\"\\F3AA\"}.fa-google-play:before{content:\"\\F3AB\"}.fa-google-plus:before{content:\"\\F2B3\"}.fa-google-plus-g:before{content:\"\\F0D5\"}.fa-google-plus-square:before{content:\"\\F0D4\"}.fa-google-wallet:before{content:\"\\F1EE\"}.fa-gopuram:before{content:\"\\F664\"}.fa-graduation-cap:before{content:\"\\F19D\"}.fa-gratipay:before{content:\"\\F184\"}.fa-grav:before{content:\"\\F2D6\"}.fa-greater-than:before{content:\"\\F531\"}.fa-greater-than-equal:before{content:\"\\F532\"}.fa-grimace:before{content:\"\\F57F\"}.fa-grin:before{content:\"\\F580\"}.fa-grin-alt:before{content:\"\\F581\"}.fa-grin-beam:before{content:\"\\F582\"}.fa-grin-beam-sweat:before{content:\"\\F583\"}.fa-grin-hearts:before{content:\"\\F584\"}.fa-grin-squint:before{content:\"\\F585\"}.fa-grin-squint-tears:before{content:\"\\F586\"}.fa-grin-stars:before{content:\"\\F587\"}.fa-grin-tears:before{content:\"\\F588\"}.fa-grin-tongue:before{content:\"\\F589\"}.fa-grin-tongue-squint:before{content:\"\\F58A\"}.fa-grin-tongue-wink:before{content:\"\\F58B\"}.fa-grin-wink:before{content:\"\\F58C\"}.fa-grip-horizontal:before{content:\"\\F58D\"}.fa-grip-lines:before{content:\"\\F7A4\"}.fa-grip-lines-vertical:before{content:\"\\F7A5\"}.fa-grip-vertical:before{content:\"\\F58E\"}.fa-gripfire:before{content:\"\\F3AC\"}.fa-grunt:before{content:\"\\F3AD\"}.fa-guitar:before{content:\"\\F7A6\"}.fa-gulp:before{content:\"\\F3AE\"}.fa-h-square:before{content:\"\\F0FD\"}.fa-hacker-news:before{content:\"\\F1D4\"}.fa-hacker-news-square:before{content:\"\\F3AF\"}.fa-hackerrank:before{content:\"\\F5F7\"}.fa-hamburger:before{content:\"\\F805\"}.fa-hammer:before{content:\"\\F6E3\"}.fa-hamsa:before{content:\"\\F665\"}.fa-hand-holding:before{content:\"\\F4BD\"}.fa-hand-holding-heart:before{content:\"\\F4BE\"}.fa-hand-holding-usd:before{content:\"\\F4C0\"}.fa-hand-lizard:before{content:\"\\F258\"}.fa-hand-middle-finger:before{content:\"\\F806\"}.fa-hand-paper:before{content:\"\\F256\"}.fa-hand-peace:before{content:\"\\F25B\"}.fa-hand-point-down:before{content:\"\\F0A7\"}.fa-hand-point-left:before{content:\"\\F0A5\"}.fa-hand-point-right:before{content:\"\\F0A4\"}.fa-hand-point-up:before{content:\"\\F0A6\"}.fa-hand-pointer:before{content:\"\\F25A\"}.fa-hand-rock:before{content:\"\\F255\"}.fa-hand-scissors:before{content:\"\\F257\"}.fa-hand-spock:before{content:\"\\F259\"}.fa-hands:before{content:\"\\F4C2\"}.fa-hands-helping:before{content:\"\\F4C4\"}.fa-handshake:before{content:\"\\F2B5\"}.fa-hanukiah:before{content:\"\\F6E6\"}.fa-hard-hat:before{content:\"\\F807\"}.fa-hashtag:before{content:\"\\F292\"}.fa-hat-wizard:before{content:\"\\F6E8\"}.fa-haykal:before{content:\"\\F666\"}.fa-hdd:before{content:\"\\F0A0\"}.fa-heading:before{content:\"\\F1DC\"}.fa-headphones:before{content:\"\\F025\"}.fa-headphones-alt:before{content:\"\\F58F\"}.fa-headset:before{content:\"\\F590\"}.fa-heart:before{content:\"\\F004\"}.fa-heart-broken:before{content:\"\\F7A9\"}.fa-heartbeat:before{content:\"\\F21E\"}.fa-helicopter:before{content:\"\\F533\"}.fa-highlighter:before{content:\"\\F591\"}.fa-hiking:before{content:\"\\F6EC\"}.fa-hippo:before{content:\"\\F6ED\"}.fa-hips:before{content:\"\\F452\"}.fa-hire-a-helper:before{content:\"\\F3B0\"}.fa-history:before{content:\"\\F1DA\"}.fa-hockey-puck:before{content:\"\\F453\"}.fa-holly-berry:before{content:\"\\F7AA\"}.fa-home:before{content:\"\\F015\"}.fa-hooli:before{content:\"\\F427\"}.fa-hornbill:before{content:\"\\F592\"}.fa-horse:before{content:\"\\F6F0\"}.fa-horse-head:before{content:\"\\F7AB\"}.fa-hospital:before{content:\"\\F0F8\"}.fa-hospital-alt:before{content:\"\\F47D\"}.fa-hospital-symbol:before{content:\"\\F47E\"}.fa-hot-tub:before{content:\"\\F593\"}.fa-hotdog:before{content:\"\\F80F\"}.fa-hotel:before{content:\"\\F594\"}.fa-hotjar:before{content:\"\\F3B1\"}.fa-hourglass:before{content:\"\\F254\"}.fa-hourglass-end:before{content:\"\\F253\"}.fa-hourglass-half:before{content:\"\\F252\"}.fa-hourglass-start:before{content:\"\\F251\"}.fa-house-damage:before{content:\"\\F6F1\"}.fa-houzz:before{content:\"\\F27C\"}.fa-hryvnia:before{content:\"\\F6F2\"}.fa-html5:before{content:\"\\F13B\"}.fa-hubspot:before{content:\"\\F3B2\"}.fa-i-cursor:before{content:\"\\F246\"}.fa-ice-cream:before{content:\"\\F810\"}.fa-icicles:before{content:\"\\F7AD\"}.fa-id-badge:before{content:\"\\F2C1\"}.fa-id-card:before{content:\"\\F2C2\"}.fa-id-card-alt:before{content:\"\\F47F\"}.fa-igloo:before{content:\"\\F7AE\"}.fa-image:before{content:\"\\F03E\"}.fa-images:before{content:\"\\F302\"}.fa-imdb:before{content:\"\\F2D8\"}.fa-inbox:before{content:\"\\F01C\"}.fa-indent:before{content:\"\\F03C\"}.fa-industry:before{content:\"\\F275\"}.fa-infinity:before{content:\"\\F534\"}.fa-info:before{content:\"\\F129\"}.fa-info-circle:before{content:\"\\F05A\"}.fa-instagram:before{content:\"\\F16D\"}.fa-intercom:before{content:\"\\F7AF\"}.fa-internet-explorer:before{content:\"\\F26B\"}.fa-invision:before{content:\"\\F7B0\"}.fa-ioxhost:before{content:\"\\F208\"}.fa-italic:before{content:\"\\F033\"}.fa-itch-io:before{content:\"\\F83A\"}.fa-itunes:before{content:\"\\F3B4\"}.fa-itunes-note:before{content:\"\\F3B5\"}.fa-java:before{content:\"\\F4E4\"}.fa-jedi:before{content:\"\\F669\"}.fa-jedi-order:before{content:\"\\F50E\"}.fa-jenkins:before{content:\"\\F3B6\"}.fa-jira:before{content:\"\\F7B1\"}.fa-joget:before{content:\"\\F3B7\"}.fa-joint:before{content:\"\\F595\"}.fa-joomla:before{content:\"\\F1AA\"}.fa-journal-whills:before{content:\"\\F66A\"}.fa-js:before{content:\"\\F3B8\"}.fa-js-square:before{content:\"\\F3B9\"}.fa-jsfiddle:before{content:\"\\F1CC\"}.fa-kaaba:before{content:\"\\F66B\"}.fa-kaggle:before{content:\"\\F5FA\"}.fa-key:before{content:\"\\F084\"}.fa-keybase:before{content:\"\\F4F5\"}.fa-keyboard:before{content:\"\\F11C\"}.fa-keycdn:before{content:\"\\F3BA\"}.fa-khanda:before{content:\"\\F66D\"}.fa-kickstarter:before{content:\"\\F3BB\"}.fa-kickstarter-k:before{content:\"\\F3BC\"}.fa-kiss:before{content:\"\\F596\"}.fa-kiss-beam:before{content:\"\\F597\"}.fa-kiss-wink-heart:before{content:\"\\F598\"}.fa-kiwi-bird:before{content:\"\\F535\"}.fa-korvue:before{content:\"\\F42F\"}.fa-landmark:before{content:\"\\F66F\"}.fa-language:before{content:\"\\F1AB\"}.fa-laptop:before{content:\"\\F109\"}.fa-laptop-code:before{content:\"\\F5FC\"}.fa-laptop-medical:before{content:\"\\F812\"}.fa-laravel:before{content:\"\\F3BD\"}.fa-lastfm:before{content:\"\\F202\"}.fa-lastfm-square:before{content:\"\\F203\"}.fa-laugh:before{content:\"\\F599\"}.fa-laugh-beam:before{content:\"\\F59A\"}.fa-laugh-squint:before{content:\"\\F59B\"}.fa-laugh-wink:before{content:\"\\F59C\"}.fa-layer-group:before{content:\"\\F5FD\"}.fa-leaf:before{content:\"\\F06C\"}.fa-leanpub:before{content:\"\\F212\"}.fa-lemon:before{content:\"\\F094\"}.fa-less:before{content:\"\\F41D\"}.fa-less-than:before{content:\"\\F536\"}.fa-less-than-equal:before{content:\"\\F537\"}.fa-level-down-alt:before{content:\"\\F3BE\"}.fa-level-up-alt:before{content:\"\\F3BF\"}.fa-life-ring:before{content:\"\\F1CD\"}.fa-lightbulb:before{content:\"\\F0EB\"}.fa-line:before{content:\"\\F3C0\"}.fa-link:before{content:\"\\F0C1\"}.fa-linkedin:before{content:\"\\F08C\"}.fa-linkedin-in:before{content:\"\\F0E1\"}.fa-linode:before{content:\"\\F2B8\"}.fa-linux:before{content:\"\\F17C\"}.fa-lira-sign:before{content:\"\\F195\"}.fa-list:before{content:\"\\F03A\"}.fa-list-alt:before{content:\"\\F022\"}.fa-list-ol:before{content:\"\\F0CB\"}.fa-list-ul:before{content:\"\\F0CA\"}.fa-location-arrow:before{content:\"\\F124\"}.fa-lock:before{content:\"\\F023\"}.fa-lock-open:before{content:\"\\F3C1\"}.fa-long-arrow-alt-down:before{content:\"\\F309\"}.fa-long-arrow-alt-left:before{content:\"\\F30A\"}.fa-long-arrow-alt-right:before{content:\"\\F30B\"}.fa-long-arrow-alt-up:before{content:\"\\F30C\"}.fa-low-vision:before{content:\"\\F2A8\"}.fa-luggage-cart:before{content:\"\\F59D\"}.fa-lyft:before{content:\"\\F3C3\"}.fa-magento:before{content:\"\\F3C4\"}.fa-magic:before{content:\"\\F0D0\"}.fa-magnet:before{content:\"\\F076\"}.fa-mail-bulk:before{content:\"\\F674\"}.fa-mailchimp:before{content:\"\\F59E\"}.fa-male:before{content:\"\\F183\"}.fa-mandalorian:before{content:\"\\F50F\"}.fa-map:before{content:\"\\F279\"}.fa-map-marked:before{content:\"\\F59F\"}.fa-map-marked-alt:before{content:\"\\F5A0\"}.fa-map-marker:before{content:\"\\F041\"}.fa-map-marker-alt:before{content:\"\\F3C5\"}.fa-map-pin:before{content:\"\\F276\"}.fa-map-signs:before{content:\"\\F277\"}.fa-markdown:before{content:\"\\F60F\"}.fa-marker:before{content:\"\\F5A1\"}.fa-mars:before{content:\"\\F222\"}.fa-mars-double:before{content:\"\\F227\"}.fa-mars-stroke:before{content:\"\\F229\"}.fa-mars-stroke-h:before{content:\"\\F22B\"}.fa-mars-stroke-v:before{content:\"\\F22A\"}.fa-mask:before{content:\"\\F6FA\"}.fa-mastodon:before{content:\"\\F4F6\"}.fa-maxcdn:before{content:\"\\F136\"}.fa-medal:before{content:\"\\F5A2\"}.fa-medapps:before{content:\"\\F3C6\"}.fa-medium:before{content:\"\\F23A\"}.fa-medium-m:before{content:\"\\F3C7\"}.fa-medkit:before{content:\"\\F0FA\"}.fa-medrt:before{content:\"\\F3C8\"}.fa-meetup:before{content:\"\\F2E0\"}.fa-megaport:before{content:\"\\F5A3\"}.fa-meh:before{content:\"\\F11A\"}.fa-meh-blank:before{content:\"\\F5A4\"}.fa-meh-rolling-eyes:before{content:\"\\F5A5\"}.fa-memory:before{content:\"\\F538\"}.fa-mendeley:before{content:\"\\F7B3\"}.fa-menorah:before{content:\"\\F676\"}.fa-mercury:before{content:\"\\F223\"}.fa-meteor:before{content:\"\\F753\"}.fa-microchip:before{content:\"\\F2DB\"}.fa-microphone:before{content:\"\\F130\"}.fa-microphone-alt:before{content:\"\\F3C9\"}.fa-microphone-alt-slash:before{content:\"\\F539\"}.fa-microphone-slash:before{content:\"\\F131\"}.fa-microscope:before{content:\"\\F610\"}.fa-microsoft:before{content:\"\\F3CA\"}.fa-minus:before{content:\"\\F068\"}.fa-minus-circle:before{content:\"\\F056\"}.fa-minus-square:before{content:\"\\F146\"}.fa-mitten:before{content:\"\\F7B5\"}.fa-mix:before{content:\"\\F3CB\"}.fa-mixcloud:before{content:\"\\F289\"}.fa-mizuni:before{content:\"\\F3CC\"}.fa-mobile:before{content:\"\\F10B\"}.fa-mobile-alt:before{content:\"\\F3CD\"}.fa-modx:before{content:\"\\F285\"}.fa-monero:before{content:\"\\F3D0\"}.fa-money-bill:before{content:\"\\F0D6\"}.fa-money-bill-alt:before{content:\"\\F3D1\"}.fa-money-bill-wave:before{content:\"\\F53A\"}.fa-money-bill-wave-alt:before{content:\"\\F53B\"}.fa-money-check:before{content:\"\\F53C\"}.fa-money-check-alt:before{content:\"\\F53D\"}.fa-monument:before{content:\"\\F5A6\"}.fa-moon:before{content:\"\\F186\"}.fa-mortar-pestle:before{content:\"\\F5A7\"}.fa-mosque:before{content:\"\\F678\"}.fa-motorcycle:before{content:\"\\F21C\"}.fa-mountain:before{content:\"\\F6FC\"}.fa-mouse-pointer:before{content:\"\\F245\"}.fa-mug-hot:before{content:\"\\F7B6\"}.fa-music:before{content:\"\\F001\"}.fa-napster:before{content:\"\\F3D2\"}.fa-neos:before{content:\"\\F612\"}.fa-network-wired:before{content:\"\\F6FF\"}.fa-neuter:before{content:\"\\F22C\"}.fa-newspaper:before{content:\"\\F1EA\"}.fa-nimblr:before{content:\"\\F5A8\"}.fa-nintendo-switch:before{content:\"\\F418\"}.fa-node:before{content:\"\\F419\"}.fa-node-js:before{content:\"\\F3D3\"}.fa-not-equal:before{content:\"\\F53E\"}.fa-notes-medical:before{content:\"\\F481\"}.fa-npm:before{content:\"\\F3D4\"}.fa-ns8:before{content:\"\\F3D5\"}.fa-nutritionix:before{content:\"\\F3D6\"}.fa-object-group:before{content:\"\\F247\"}.fa-object-ungroup:before{content:\"\\F248\"}.fa-odnoklassniki:before{content:\"\\F263\"}.fa-odnoklassniki-square:before{content:\"\\F264\"}.fa-oil-can:before{content:\"\\F613\"}.fa-old-republic:before{content:\"\\F510\"}.fa-om:before{content:\"\\F679\"}.fa-opencart:before{content:\"\\F23D\"}.fa-openid:before{content:\"\\F19B\"}.fa-opera:before{content:\"\\F26A\"}.fa-optin-monster:before{content:\"\\F23C\"}.fa-osi:before{content:\"\\F41A\"}.fa-otter:before{content:\"\\F700\"}.fa-outdent:before{content:\"\\F03B\"}.fa-page4:before{content:\"\\F3D7\"}.fa-pagelines:before{content:\"\\F18C\"}.fa-pager:before{content:\"\\F815\"}.fa-paint-brush:before{content:\"\\F1FC\"}.fa-paint-roller:before{content:\"\\F5AA\"}.fa-palette:before{content:\"\\F53F\"}.fa-palfed:before{content:\"\\F3D8\"}.fa-pallet:before{content:\"\\F482\"}.fa-paper-plane:before{content:\"\\F1D8\"}.fa-paperclip:before{content:\"\\F0C6\"}.fa-parachute-box:before{content:\"\\F4CD\"}.fa-paragraph:before{content:\"\\F1DD\"}.fa-parking:before{content:\"\\F540\"}.fa-passport:before{content:\"\\F5AB\"}.fa-pastafarianism:before{content:\"\\F67B\"}.fa-paste:before{content:\"\\F0EA\"}.fa-patreon:before{content:\"\\F3D9\"}.fa-pause:before{content:\"\\F04C\"}.fa-pause-circle:before{content:\"\\F28B\"}.fa-paw:before{content:\"\\F1B0\"}.fa-paypal:before{content:\"\\F1ED\"}.fa-peace:before{content:\"\\F67C\"}.fa-pen:before{content:\"\\F304\"}.fa-pen-alt:before{content:\"\\F305\"}.fa-pen-fancy:before{content:\"\\F5AC\"}.fa-pen-nib:before{content:\"\\F5AD\"}.fa-pen-square:before{content:\"\\F14B\"}.fa-pencil-alt:before{content:\"\\F303\"}.fa-pencil-ruler:before{content:\"\\F5AE\"}.fa-penny-arcade:before{content:\"\\F704\"}.fa-people-carry:before{content:\"\\F4CE\"}.fa-pepper-hot:before{content:\"\\F816\"}.fa-percent:before{content:\"\\F295\"}.fa-percentage:before{content:\"\\F541\"}.fa-periscope:before{content:\"\\F3DA\"}.fa-person-booth:before{content:\"\\F756\"}.fa-phabricator:before{content:\"\\F3DB\"}.fa-phoenix-framework:before{content:\"\\F3DC\"}.fa-phoenix-squadron:before{content:\"\\F511\"}.fa-phone:before{content:\"\\F095\"}.fa-phone-slash:before{content:\"\\F3DD\"}.fa-phone-square:before{content:\"\\F098\"}.fa-phone-volume:before{content:\"\\F2A0\"}.fa-php:before{content:\"\\F457\"}.fa-pied-piper:before{content:\"\\F2AE\"}.fa-pied-piper-alt:before{content:\"\\F1A8\"}.fa-pied-piper-hat:before{content:\"\\F4E5\"}.fa-pied-piper-pp:before{content:\"\\F1A7\"}.fa-piggy-bank:before{content:\"\\F4D3\"}.fa-pills:before{content:\"\\F484\"}.fa-pinterest:before{content:\"\\F0D2\"}.fa-pinterest-p:before{content:\"\\F231\"}.fa-pinterest-square:before{content:\"\\F0D3\"}.fa-pizza-slice:before{content:\"\\F818\"}.fa-place-of-worship:before{content:\"\\F67F\"}.fa-plane:before{content:\"\\F072\"}.fa-plane-arrival:before{content:\"\\F5AF\"}.fa-plane-departure:before{content:\"\\F5B0\"}.fa-play:before{content:\"\\F04B\"}.fa-play-circle:before{content:\"\\F144\"}.fa-playstation:before{content:\"\\F3DF\"}.fa-plug:before{content:\"\\F1E6\"}.fa-plus:before{content:\"\\F067\"}.fa-plus-circle:before{content:\"\\F055\"}.fa-plus-square:before{content:\"\\F0FE\"}.fa-podcast:before{content:\"\\F2CE\"}.fa-poll:before{content:\"\\F681\"}.fa-poll-h:before{content:\"\\F682\"}.fa-poo:before{content:\"\\F2FE\"}.fa-poo-storm:before{content:\"\\F75A\"}.fa-poop:before{content:\"\\F619\"}.fa-portrait:before{content:\"\\F3E0\"}.fa-pound-sign:before{content:\"\\F154\"}.fa-power-off:before{content:\"\\F011\"}.fa-pray:before{content:\"\\F683\"}.fa-praying-hands:before{content:\"\\F684\"}.fa-prescription:before{content:\"\\F5B1\"}.fa-prescription-bottle:before{content:\"\\F485\"}.fa-prescription-bottle-alt:before{content:\"\\F486\"}.fa-print:before{content:\"\\F02F\"}.fa-procedures:before{content:\"\\F487\"}.fa-product-hunt:before{content:\"\\F288\"}.fa-project-diagram:before{content:\"\\F542\"}.fa-pushed:before{content:\"\\F3E1\"}.fa-puzzle-piece:before{content:\"\\F12E\"}.fa-python:before{content:\"\\F3E2\"}.fa-qq:before{content:\"\\F1D6\"}.fa-qrcode:before{content:\"\\F029\"}.fa-question:before{content:\"\\F128\"}.fa-question-circle:before{content:\"\\F059\"}.fa-quidditch:before{content:\"\\F458\"}.fa-quinscape:before{content:\"\\F459\"}.fa-quora:before{content:\"\\F2C4\"}.fa-quote-left:before{content:\"\\F10D\"}.fa-quote-right:before{content:\"\\F10E\"}.fa-quran:before{content:\"\\F687\"}.fa-r-project:before{content:\"\\F4F7\"}.fa-radiation:before{content:\"\\F7B9\"}.fa-radiation-alt:before{content:\"\\F7BA\"}.fa-rainbow:before{content:\"\\F75B\"}.fa-random:before{content:\"\\F074\"}.fa-raspberry-pi:before{content:\"\\F7BB\"}.fa-ravelry:before{content:\"\\F2D9\"}.fa-react:before{content:\"\\F41B\"}.fa-reacteurope:before{content:\"\\F75D\"}.fa-readme:before{content:\"\\F4D5\"}.fa-rebel:before{content:\"\\F1D0\"}.fa-receipt:before{content:\"\\F543\"}.fa-recycle:before{content:\"\\F1B8\"}.fa-red-river:before{content:\"\\F3E3\"}.fa-reddit:before{content:\"\\F1A1\"}.fa-reddit-alien:before{content:\"\\F281\"}.fa-reddit-square:before{content:\"\\F1A2\"}.fa-redhat:before{content:\"\\F7BC\"}.fa-redo:before{content:\"\\F01E\"}.fa-redo-alt:before{content:\"\\F2F9\"}.fa-registered:before{content:\"\\F25D\"}.fa-renren:before{content:\"\\F18B\"}.fa-reply:before{content:\"\\F3E5\"}.fa-reply-all:before{content:\"\\F122\"}.fa-replyd:before{content:\"\\F3E6\"}.fa-republican:before{content:\"\\F75E\"}.fa-researchgate:before{content:\"\\F4F8\"}.fa-resolving:before{content:\"\\F3E7\"}.fa-restroom:before{content:\"\\F7BD\"}.fa-retweet:before{content:\"\\F079\"}.fa-rev:before{content:\"\\F5B2\"}.fa-ribbon:before{content:\"\\F4D6\"}.fa-ring:before{content:\"\\F70B\"}.fa-road:before{content:\"\\F018\"}.fa-robot:before{content:\"\\F544\"}.fa-rocket:before{content:\"\\F135\"}.fa-rocketchat:before{content:\"\\F3E8\"}.fa-rockrms:before{content:\"\\F3E9\"}.fa-route:before{content:\"\\F4D7\"}.fa-rss:before{content:\"\\F09E\"}.fa-rss-square:before{content:\"\\F143\"}.fa-ruble-sign:before{content:\"\\F158\"}.fa-ruler:before{content:\"\\F545\"}.fa-ruler-combined:before{content:\"\\F546\"}.fa-ruler-horizontal:before{content:\"\\F547\"}.fa-ruler-vertical:before{content:\"\\F548\"}.fa-running:before{content:\"\\F70C\"}.fa-rupee-sign:before{content:\"\\F156\"}.fa-sad-cry:before{content:\"\\F5B3\"}.fa-sad-tear:before{content:\"\\F5B4\"}.fa-safari:before{content:\"\\F267\"}.fa-salesforce:before{content:\"\\F83B\"}.fa-sass:before{content:\"\\F41E\"}.fa-satellite:before{content:\"\\F7BF\"}.fa-satellite-dish:before{content:\"\\F7C0\"}.fa-save:before{content:\"\\F0C7\"}.fa-schlix:before{content:\"\\F3EA\"}.fa-school:before{content:\"\\F549\"}.fa-screwdriver:before{content:\"\\F54A\"}.fa-scribd:before{content:\"\\F28A\"}.fa-scroll:before{content:\"\\F70E\"}.fa-sd-card:before{content:\"\\F7C2\"}.fa-search:before{content:\"\\F002\"}.fa-search-dollar:before{content:\"\\F688\"}.fa-search-location:before{content:\"\\F689\"}.fa-search-minus:before{content:\"\\F010\"}.fa-search-plus:before{content:\"\\F00E\"}.fa-searchengin:before{content:\"\\F3EB\"}.fa-seedling:before{content:\"\\F4D8\"}.fa-sellcast:before{content:\"\\F2DA\"}.fa-sellsy:before{content:\"\\F213\"}.fa-server:before{content:\"\\F233\"}.fa-servicestack:before{content:\"\\F3EC\"}.fa-shapes:before{content:\"\\F61F\"}.fa-share:before{content:\"\\F064\"}.fa-share-alt:before{content:\"\\F1E0\"}.fa-share-alt-square:before{content:\"\\F1E1\"}.fa-share-square:before{content:\"\\F14D\"}.fa-shekel-sign:before{content:\"\\F20B\"}.fa-shield-alt:before{content:\"\\F3ED\"}.fa-ship:before{content:\"\\F21A\"}.fa-shipping-fast:before{content:\"\\F48B\"}.fa-shirtsinbulk:before{content:\"\\F214\"}.fa-shoe-prints:before{content:\"\\F54B\"}.fa-shopping-bag:before{content:\"\\F290\"}.fa-shopping-basket:before{content:\"\\F291\"}.fa-shopping-cart:before{content:\"\\F07A\"}.fa-shopware:before{content:\"\\F5B5\"}.fa-shower:before{content:\"\\F2CC\"}.fa-shuttle-van:before{content:\"\\F5B6\"}.fa-sign:before{content:\"\\F4D9\"}.fa-sign-in-alt:before{content:\"\\F2F6\"}.fa-sign-language:before{content:\"\\F2A7\"}.fa-sign-out-alt:before{content:\"\\F2F5\"}.fa-signal:before{content:\"\\F012\"}.fa-signature:before{content:\"\\F5B7\"}.fa-sim-card:before{content:\"\\F7C4\"}.fa-simplybuilt:before{content:\"\\F215\"}.fa-sistrix:before{content:\"\\F3EE\"}.fa-sitemap:before{content:\"\\F0E8\"}.fa-sith:before{content:\"\\F512\"}.fa-skating:before{content:\"\\F7C5\"}.fa-sketch:before{content:\"\\F7C6\"}.fa-skiing:before{content:\"\\F7C9\"}.fa-skiing-nordic:before{content:\"\\F7CA\"}.fa-skull:before{content:\"\\F54C\"}.fa-skull-crossbones:before{content:\"\\F714\"}.fa-skyatlas:before{content:\"\\F216\"}.fa-skype:before{content:\"\\F17E\"}.fa-slack:before{content:\"\\F198\"}.fa-slack-hash:before{content:\"\\F3EF\"}.fa-slash:before{content:\"\\F715\"}.fa-sleigh:before{content:\"\\F7CC\"}.fa-sliders-h:before{content:\"\\F1DE\"}.fa-slideshare:before{content:\"\\F1E7\"}.fa-smile:before{content:\"\\F118\"}.fa-smile-beam:before{content:\"\\F5B8\"}.fa-smile-wink:before{content:\"\\F4DA\"}.fa-smog:before{content:\"\\F75F\"}.fa-smoking:before{content:\"\\F48D\"}.fa-smoking-ban:before{content:\"\\F54D\"}.fa-sms:before{content:\"\\F7CD\"}.fa-snapchat:before{content:\"\\F2AB\"}.fa-snapchat-ghost:before{content:\"\\F2AC\"}.fa-snapchat-square:before{content:\"\\F2AD\"}.fa-snowboarding:before{content:\"\\F7CE\"}.fa-snowflake:before{content:\"\\F2DC\"}.fa-snowman:before{content:\"\\F7D0\"}.fa-snowplow:before{content:\"\\F7D2\"}.fa-socks:before{content:\"\\F696\"}.fa-solar-panel:before{content:\"\\F5BA\"}.fa-sort:before{content:\"\\F0DC\"}.fa-sort-alpha-down:before{content:\"\\F15D\"}.fa-sort-alpha-up:before{content:\"\\F15E\"}.fa-sort-amount-down:before{content:\"\\F160\"}.fa-sort-amount-up:before{content:\"\\F161\"}.fa-sort-down:before{content:\"\\F0DD\"}.fa-sort-numeric-down:before{content:\"\\F162\"}.fa-sort-numeric-up:before{content:\"\\F163\"}.fa-sort-up:before{content:\"\\F0DE\"}.fa-soundcloud:before{content:\"\\F1BE\"}.fa-sourcetree:before{content:\"\\F7D3\"}.fa-spa:before{content:\"\\F5BB\"}.fa-space-shuttle:before{content:\"\\F197\"}.fa-speakap:before{content:\"\\F3F3\"}.fa-speaker-deck:before{content:\"\\F83C\"}.fa-spider:before{content:\"\\F717\"}.fa-spinner:before{content:\"\\F110\"}.fa-splotch:before{content:\"\\F5BC\"}.fa-spotify:before{content:\"\\F1BC\"}.fa-spray-can:before{content:\"\\F5BD\"}.fa-square:before{content:\"\\F0C8\"}.fa-square-full:before{content:\"\\F45C\"}.fa-square-root-alt:before{content:\"\\F698\"}.fa-squarespace:before{content:\"\\F5BE\"}.fa-stack-exchange:before{content:\"\\F18D\"}.fa-stack-overflow:before{content:\"\\F16C\"}.fa-stackpath:before{content:\"\\F842\"}.fa-stamp:before{content:\"\\F5BF\"}.fa-star:before{content:\"\\F005\"}.fa-star-and-crescent:before{content:\"\\F699\"}.fa-star-half:before{content:\"\\F089\"}.fa-star-half-alt:before{content:\"\\F5C0\"}.fa-star-of-david:before{content:\"\\F69A\"}.fa-star-of-life:before{content:\"\\F621\"}.fa-staylinked:before{content:\"\\F3F5\"}.fa-steam:before{content:\"\\F1B6\"}.fa-steam-square:before{content:\"\\F1B7\"}.fa-steam-symbol:before{content:\"\\F3F6\"}.fa-step-backward:before{content:\"\\F048\"}.fa-step-forward:before{content:\"\\F051\"}.fa-stethoscope:before{content:\"\\F0F1\"}.fa-sticker-mule:before{content:\"\\F3F7\"}.fa-sticky-note:before{content:\"\\F249\"}.fa-stop:before{content:\"\\F04D\"}.fa-stop-circle:before{content:\"\\F28D\"}.fa-stopwatch:before{content:\"\\F2F2\"}.fa-store:before{content:\"\\F54E\"}.fa-store-alt:before{content:\"\\F54F\"}.fa-strava:before{content:\"\\F428\"}.fa-stream:before{content:\"\\F550\"}.fa-street-view:before{content:\"\\F21D\"}.fa-strikethrough:before{content:\"\\F0CC\"}.fa-stripe:before{content:\"\\F429\"}.fa-stripe-s:before{content:\"\\F42A\"}.fa-stroopwafel:before{content:\"\\F551\"}.fa-studiovinari:before{content:\"\\F3F8\"}.fa-stumbleupon:before{content:\"\\F1A4\"}.fa-stumbleupon-circle:before{content:\"\\F1A3\"}.fa-subscript:before{content:\"\\F12C\"}.fa-subway:before{content:\"\\F239\"}.fa-suitcase:before{content:\"\\F0F2\"}.fa-suitcase-rolling:before{content:\"\\F5C1\"}.fa-sun:before{content:\"\\F185\"}.fa-superpowers:before{content:\"\\F2DD\"}.fa-superscript:before{content:\"\\F12B\"}.fa-supple:before{content:\"\\F3F9\"}.fa-surprise:before{content:\"\\F5C2\"}.fa-suse:before{content:\"\\F7D6\"}.fa-swatchbook:before{content:\"\\F5C3\"}.fa-swimmer:before{content:\"\\F5C4\"}.fa-swimming-pool:before{content:\"\\F5C5\"}.fa-symfony:before{content:\"\\F83D\"}.fa-synagogue:before{content:\"\\F69B\"}.fa-sync:before{content:\"\\F021\"}.fa-sync-alt:before{content:\"\\F2F1\"}.fa-syringe:before{content:\"\\F48E\"}.fa-table:before{content:\"\\F0CE\"}.fa-table-tennis:before{content:\"\\F45D\"}.fa-tablet:before{content:\"\\F10A\"}.fa-tablet-alt:before{content:\"\\F3FA\"}.fa-tablets:before{content:\"\\F490\"}.fa-tachometer-alt:before{content:\"\\F3FD\"}.fa-tag:before{content:\"\\F02B\"}.fa-tags:before{content:\"\\F02C\"}.fa-tape:before{content:\"\\F4DB\"}.fa-tasks:before{content:\"\\F0AE\"}.fa-taxi:before{content:\"\\F1BA\"}.fa-teamspeak:before{content:\"\\F4F9\"}.fa-teeth:before{content:\"\\F62E\"}.fa-teeth-open:before{content:\"\\F62F\"}.fa-telegram:before{content:\"\\F2C6\"}.fa-telegram-plane:before{content:\"\\F3FE\"}.fa-temperature-high:before{content:\"\\F769\"}.fa-temperature-low:before{content:\"\\F76B\"}.fa-tencent-weibo:before{content:\"\\F1D5\"}.fa-tenge:before{content:\"\\F7D7\"}.fa-terminal:before{content:\"\\F120\"}.fa-text-height:before{content:\"\\F034\"}.fa-text-width:before{content:\"\\F035\"}.fa-th:before{content:\"\\F00A\"}.fa-th-large:before{content:\"\\F009\"}.fa-th-list:before{content:\"\\F00B\"}.fa-the-red-yeti:before{content:\"\\F69D\"}.fa-theater-masks:before{content:\"\\F630\"}.fa-themeco:before{content:\"\\F5C6\"}.fa-themeisle:before{content:\"\\F2B2\"}.fa-thermometer:before{content:\"\\F491\"}.fa-thermometer-empty:before{content:\"\\F2CB\"}.fa-thermometer-full:before{content:\"\\F2C7\"}.fa-thermometer-half:before{content:\"\\F2C9\"}.fa-thermometer-quarter:before{content:\"\\F2CA\"}.fa-thermometer-three-quarters:before{content:\"\\F2C8\"}.fa-think-peaks:before{content:\"\\F731\"}.fa-thumbs-down:before{content:\"\\F165\"}.fa-thumbs-up:before{content:\"\\F164\"}.fa-thumbtack:before{content:\"\\F08D\"}.fa-ticket-alt:before{content:\"\\F3FF\"}.fa-times:before{content:\"\\F00D\"}.fa-times-circle:before{content:\"\\F057\"}.fa-tint:before{content:\"\\F043\"}.fa-tint-slash:before{content:\"\\F5C7\"}.fa-tired:before{content:\"\\F5C8\"}.fa-toggle-off:before{content:\"\\F204\"}.fa-toggle-on:before{content:\"\\F205\"}.fa-toilet:before{content:\"\\F7D8\"}.fa-toilet-paper:before{content:\"\\F71E\"}.fa-toolbox:before{content:\"\\F552\"}.fa-tools:before{content:\"\\F7D9\"}.fa-tooth:before{content:\"\\F5C9\"}.fa-torah:before{content:\"\\F6A0\"}.fa-torii-gate:before{content:\"\\F6A1\"}.fa-tractor:before{content:\"\\F722\"}.fa-trade-federation:before{content:\"\\F513\"}.fa-trademark:before{content:\"\\F25C\"}.fa-traffic-light:before{content:\"\\F637\"}.fa-train:before{content:\"\\F238\"}.fa-tram:before{content:\"\\F7DA\"}.fa-transgender:before{content:\"\\F224\"}.fa-transgender-alt:before{content:\"\\F225\"}.fa-trash:before{content:\"\\F1F8\"}.fa-trash-alt:before{content:\"\\F2ED\"}.fa-trash-restore:before{content:\"\\F829\"}.fa-trash-restore-alt:before{content:\"\\F82A\"}.fa-tree:before{content:\"\\F1BB\"}.fa-trello:before{content:\"\\F181\"}.fa-tripadvisor:before{content:\"\\F262\"}.fa-trophy:before{content:\"\\F091\"}.fa-truck:before{content:\"\\F0D1\"}.fa-truck-loading:before{content:\"\\F4DE\"}.fa-truck-monster:before{content:\"\\F63B\"}.fa-truck-moving:before{content:\"\\F4DF\"}.fa-truck-pickup:before{content:\"\\F63C\"}.fa-tshirt:before{content:\"\\F553\"}.fa-tty:before{content:\"\\F1E4\"}.fa-tumblr:before{content:\"\\F173\"}.fa-tumblr-square:before{content:\"\\F174\"}.fa-tv:before{content:\"\\F26C\"}.fa-twitch:before{content:\"\\F1E8\"}.fa-twitter:before{content:\"\\F099\"}.fa-twitter-square:before{content:\"\\F081\"}.fa-typo3:before{content:\"\\F42B\"}.fa-uber:before{content:\"\\F402\"}.fa-ubuntu:before{content:\"\\F7DF\"}.fa-uikit:before{content:\"\\F403\"}.fa-umbrella:before{content:\"\\F0E9\"}.fa-umbrella-beach:before{content:\"\\F5CA\"}.fa-underline:before{content:\"\\F0CD\"}.fa-undo:before{content:\"\\F0E2\"}.fa-undo-alt:before{content:\"\\F2EA\"}.fa-uniregistry:before{content:\"\\F404\"}.fa-universal-access:before{content:\"\\F29A\"}.fa-university:before{content:\"\\F19C\"}.fa-unlink:before{content:\"\\F127\"}.fa-unlock:before{content:\"\\F09C\"}.fa-unlock-alt:before{content:\"\\F13E\"}.fa-untappd:before{content:\"\\F405\"}.fa-upload:before{content:\"\\F093\"}.fa-ups:before{content:\"\\F7E0\"}.fa-usb:before{content:\"\\F287\"}.fa-user:before{content:\"\\F007\"}.fa-user-alt:before{content:\"\\F406\"}.fa-user-alt-slash:before{content:\"\\F4FA\"}.fa-user-astronaut:before{content:\"\\F4FB\"}.fa-user-check:before{content:\"\\F4FC\"}.fa-user-circle:before{content:\"\\F2BD\"}.fa-user-clock:before{content:\"\\F4FD\"}.fa-user-cog:before{content:\"\\F4FE\"}.fa-user-edit:before{content:\"\\F4FF\"}.fa-user-friends:before{content:\"\\F500\"}.fa-user-graduate:before{content:\"\\F501\"}.fa-user-injured:before{content:\"\\F728\"}.fa-user-lock:before{content:\"\\F502\"}.fa-user-md:before{content:\"\\F0F0\"}.fa-user-minus:before{content:\"\\F503\"}.fa-user-ninja:before{content:\"\\F504\"}.fa-user-nurse:before{content:\"\\F82F\"}.fa-user-plus:before{content:\"\\F234\"}.fa-user-secret:before{content:\"\\F21B\"}.fa-user-shield:before{content:\"\\F505\"}.fa-user-slash:before{content:\"\\F506\"}.fa-user-tag:before{content:\"\\F507\"}.fa-user-tie:before{content:\"\\F508\"}.fa-user-times:before{content:\"\\F235\"}.fa-users:before{content:\"\\F0C0\"}.fa-users-cog:before{content:\"\\F509\"}.fa-usps:before{content:\"\\F7E1\"}.fa-ussunnah:before{content:\"\\F407\"}.fa-utensil-spoon:before{content:\"\\F2E5\"}.fa-utensils:before{content:\"\\F2E7\"}.fa-vaadin:before{content:\"\\F408\"}.fa-vector-square:before{content:\"\\F5CB\"}.fa-venus:before{content:\"\\F221\"}.fa-venus-double:before{content:\"\\F226\"}.fa-venus-mars:before{content:\"\\F228\"}.fa-viacoin:before{content:\"\\F237\"}.fa-viadeo:before{content:\"\\F2A9\"}.fa-viadeo-square:before{content:\"\\F2AA\"}.fa-vial:before{content:\"\\F492\"}.fa-vials:before{content:\"\\F493\"}.fa-viber:before{content:\"\\F409\"}.fa-video:before{content:\"\\F03D\"}.fa-video-slash:before{content:\"\\F4E2\"}.fa-vihara:before{content:\"\\F6A7\"}.fa-vimeo:before{content:\"\\F40A\"}.fa-vimeo-square:before{content:\"\\F194\"}.fa-vimeo-v:before{content:\"\\F27D\"}.fa-vine:before{content:\"\\F1CA\"}.fa-vk:before{content:\"\\F189\"}.fa-vnv:before{content:\"\\F40B\"}.fa-volleyball-ball:before{content:\"\\F45F\"}.fa-volume-down:before{content:\"\\F027\"}.fa-volume-mute:before{content:\"\\F6A9\"}.fa-volume-off:before{content:\"\\F026\"}.fa-volume-up:before{content:\"\\F028\"}.fa-vote-yea:before{content:\"\\F772\"}.fa-vr-cardboard:before{content:\"\\F729\"}.fa-vuejs:before{content:\"\\F41F\"}.fa-walking:before{content:\"\\F554\"}.fa-wallet:before{content:\"\\F555\"}.fa-warehouse:before{content:\"\\F494\"}.fa-water:before{content:\"\\F773\"}.fa-wave-square:before{content:\"\\F83E\"}.fa-waze:before{content:\"\\F83F\"}.fa-weebly:before{content:\"\\F5CC\"}.fa-weibo:before{content:\"\\F18A\"}.fa-weight:before{content:\"\\F496\"}.fa-weight-hanging:before{content:\"\\F5CD\"}.fa-weixin:before{content:\"\\F1D7\"}.fa-whatsapp:before{content:\"\\F232\"}.fa-whatsapp-square:before{content:\"\\F40C\"}.fa-wheelchair:before{content:\"\\F193\"}.fa-whmcs:before{content:\"\\F40D\"}.fa-wifi:before{content:\"\\F1EB\"}.fa-wikipedia-w:before{content:\"\\F266\"}.fa-wind:before{content:\"\\F72E\"}.fa-window-close:before{content:\"\\F410\"}.fa-window-maximize:before{content:\"\\F2D0\"}.fa-window-minimize:before{content:\"\\F2D1\"}.fa-window-restore:before{content:\"\\F2D2\"}.fa-windows:before{content:\"\\F17A\"}.fa-wine-bottle:before{content:\"\\F72F\"}.fa-wine-glass:before{content:\"\\F4E3\"}.fa-wine-glass-alt:before{content:\"\\F5CE\"}.fa-wix:before{content:\"\\F5CF\"}.fa-wizards-of-the-coast:before{content:\"\\F730\"}.fa-wolf-pack-battalion:before{content:\"\\F514\"}.fa-won-sign:before{content:\"\\F159\"}.fa-wordpress:before{content:\"\\F19A\"}.fa-wordpress-simple:before{content:\"\\F411\"}.fa-wpbeginner:before{content:\"\\F297\"}.fa-wpexplorer:before{content:\"\\F2DE\"}.fa-wpforms:before{content:\"\\F298\"}.fa-wpressr:before{content:\"\\F3E4\"}.fa-wrench:before{content:\"\\F0AD\"}.fa-x-ray:before{content:\"\\F497\"}.fa-xbox:before{content:\"\\F412\"}.fa-xing:before{content:\"\\F168\"}.fa-xing-square:before{content:\"\\F169\"}.fa-y-combinator:before{content:\"\\F23B\"}.fa-yahoo:before{content:\"\\F19E\"}.fa-yammer:before{content:\"\\F840\"}.fa-yandex:before{content:\"\\F413\"}.fa-yandex-international:before{content:\"\\F414\"}.fa-yarn:before{content:\"\\F7E3\"}.fa-yelp:before{content:\"\\F1E9\"}.fa-yen-sign:before{content:\"\\F157\"}.fa-yin-yang:before{content:\"\\F6AD\"}.fa-yoast:before{content:\"\\F2B1\"}.fa-youtube:before{content:\"\\F167\"}.fa-youtube-square:before{content:\"\\F431\"}.fa-zhihu:before{content:\"\\F63F\"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}\n\n/*!\n * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */@font-face{font-family:Font Awesome\\ 5 Brands;font-style:normal;font-weight:400;font-display:auto;src:url(\"../fonts/fa-brands-400.eot\");src:url(\"../fonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/fa-brands-400.woff2\") format(\"woff2\"),url(\"../fonts/fa-brands-400.woff\") format(\"woff\"),url(\"../fonts/fa-brands-400.ttf\") format(\"truetype\"),url(\"../fonts/fa-brands-400.svg#fontawesome\") format(\"svg\")}.fab{font-family:Font Awesome\\ 5 Brands}\n\n/*!\n * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */@font-face{font-family:Font Awesome\\ 5 Free;font-style:normal;font-weight:400;font-display:auto;src:url(\"../fonts/fa-regular-400.eot\");src:url(\"../fonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/fa-regular-400.woff2\") format(\"woff2\"),url(\"../fonts/fa-regular-400.woff\") format(\"woff\"),url(\"../fonts/fa-regular-400.ttf\") format(\"truetype\"),url(\"../fonts/fa-regular-400.svg#fontawesome\") format(\"svg\")}.far{font-weight:400}\n\n/*!\n * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */@font-face{font-family:Font Awesome\\ 5 Free;font-style:normal;font-weight:900;font-display:auto;src:url(\"../fonts/fa-solid-900.eot\");src:url(\"../fonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/fa-solid-900.woff2\") format(\"woff2\"),url(\"../fonts/fa-solid-900.woff\") format(\"woff\"),url(\"../fonts/fa-solid-900.ttf\") format(\"truetype\"),url(\"../fonts/fa-solid-900.svg#fontawesome\") format(\"svg\")}.fa,.far,.fas{font-family:Font Awesome\\ 5 Free}.fa,.fas{font-weight:900}"
  },
  {
    "path": "public/vendor/binarytorch/larecipe/assets/js/app.js",
    "content": "!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"/\",n(n.s=15)}([function(e,t,n){\"use strict\";var r=n(3),o=n(21),i=Object.prototype.toString;function a(e){return\"[object Array]\"===i.call(e)}function s(e){return null!==e&&\"object\"==typeof e}function c(e){return\"[object Function]\"===i.call(e)}function u(e,t){if(null!==e&&void 0!==e)if(\"object\"!=typeof e&&(e=[e]),a(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.call(null,e[o],o,e)}e.exports={isArray:a,isArrayBuffer:function(e){return\"[object ArrayBuffer]\"===i.call(e)},isBuffer:o,isFormData:function(e){return\"undefined\"!=typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return\"string\"==typeof e},isNumber:function(e){return\"number\"==typeof e},isObject:s,isUndefined:function(e){return void 0===e},isDate:function(e){return\"[object Date]\"===i.call(e)},isFile:function(e){return\"[object File]\"===i.call(e)},isBlob:function(e){return\"[object Blob]\"===i.call(e)},isFunction:c,isStream:function(e){return s(e)&&c(e.pipe)},isURLSearchParams:function(e){return\"undefined\"!=typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return(\"undefined\"==typeof navigator||\"ReactNative\"!==navigator.product&&\"NativeScript\"!==navigator.product&&\"NS\"!==navigator.product)&&\"undefined\"!=typeof window&&\"undefined\"!=typeof document},forEach:u,merge:function e(){var t={};function n(n,r){\"object\"==typeof t[r]&&\"object\"==typeof n?t[r]=e(t[r],n):t[r]=n}for(var r=0,o=arguments.length;r<o;r++)u(arguments[r],n);return t},deepMerge:function e(){var t={};function n(n,r){\"object\"==typeof t[r]&&\"object\"==typeof n?t[r]=e(t[r],n):t[r]=\"object\"==typeof n?e({},n):n}for(var r=0,o=arguments.length;r<o;r++)u(arguments[r],n);return t},extend:function(e,t,n){return u(t,function(t,o){e[o]=n&&\"function\"==typeof t?r(t,n):t}),e},trim:function(e){return e.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\")}}},function(e,t){e.exports=function(e,t,n,r,o,i){var a,s=e=e||{},c=typeof e.default;\"object\"!==c&&\"function\"!==c||(a=e,s=e.default);var u,l=\"function\"==typeof s?s.options:s;if(t&&(l.render=t.render,l.staticRenderFns=t.staticRenderFns,l._compiled=!0),n&&(l.functional=!0),o&&(l._scopeId=o),i?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},l._ssrRegister=u):r&&(u=r),u){var f=l.functional,p=f?l.render:l.beforeCreate;f?(l._injectStyles=u,l.render=function(e,t){return u.call(t),p(e,t)}):l.beforeCreate=p?[].concat(p,u):[u]}return{esModule:a,exports:s,options:l}}},function(e,t){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(e){\"object\"==typeof window&&(n=window)}e.exports=n},function(e,t,n){\"use strict\";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t,n){\"use strict\";var r=n(0);function o(e){return encodeURIComponent(e).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}e.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else if(r.isURLSearchParams(t))i=t.toString();else{var a=[];r.forEach(t,function(e,t){null!==e&&void 0!==e&&(r.isArray(e)?t+=\"[]\":e=[e],r.forEach(e,function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),a.push(o(t)+\"=\"+o(e))}))}),i=a.join(\"&\")}if(i){var s=e.indexOf(\"#\");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+i}return e}},function(e,t,n){\"use strict\";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){\"use strict\";(function(t){var r=n(0),o=n(26),i={\"Content-Type\":\"application/x-www-form-urlencoded\"};function a(e,t){!r.isUndefined(e)&&r.isUndefined(e[\"Content-Type\"])&&(e[\"Content-Type\"]=t)}var s,c={adapter:(void 0!==t&&\"[object process]\"===Object.prototype.toString.call(t)?s=n(8):\"undefined\"!=typeof XMLHttpRequest&&(s=n(8)),s),transformRequest:[function(e,t){return o(t,\"Accept\"),o(t,\"Content-Type\"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(a(t,\"application/x-www-form-urlencoded;charset=utf-8\"),e.toString()):r.isObject(e)?(a(t,\"application/json;charset=utf-8\"),JSON.stringify(e)):e}],transformResponse:[function(e){if(\"string\"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};c.headers={common:{Accept:\"application/json, text/plain, */*\"}},r.forEach([\"delete\",\"get\",\"head\"],function(e){c.headers[e]={}}),r.forEach([\"post\",\"put\",\"patch\"],function(e){c.headers[e]=r.merge(i)}),e.exports=c}).call(t,n(7))},function(e,t){var n,r,o=e.exports={};function i(){throw new Error(\"setTimeout has not been defined\")}function a(){throw new Error(\"clearTimeout has not been defined\")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n=\"function\"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r=\"function\"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function p(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&d())}function d(){if(!l){var e=s(p);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f<t;)c&&c[f].run();f=-1,t=u.length}c=null,l=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function m(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new h(e,t)),1!==u.length||l||s(d)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title=\"browser\",o.browser=!0,o.env={},o.argv=[],o.version=\"\",o.versions={},o.on=m,o.addListener=m,o.once=m,o.off=m,o.removeListener=m,o.removeAllListeners=m,o.emit=m,o.prependListener=m,o.prependOnceListener=m,o.listeners=function(e){return[]},o.binding=function(e){throw new Error(\"process.binding is not supported\")},o.cwd=function(){return\"/\"},o.chdir=function(e){throw new Error(\"process.chdir is not supported\")},o.umask=function(){return 0}},function(e,t,n){\"use strict\";var r=n(0),o=n(27),i=n(4),a=n(29),s=n(30),c=n(9);e.exports=function(e){return new Promise(function(t,u){var l=e.data,f=e.headers;r.isFormData(l)&&delete f[\"Content-Type\"];var p=new XMLHttpRequest;if(e.auth){var d=e.auth.username||\"\",h=e.auth.password||\"\";f.Authorization=\"Basic \"+btoa(d+\":\"+h)}if(p.open(e.method.toUpperCase(),i(e.url,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,p.onreadystatechange=function(){if(p&&4===p.readyState&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf(\"file:\"))){var n=\"getAllResponseHeaders\"in p?a(p.getAllResponseHeaders()):null,r={data:e.responseType&&\"text\"!==e.responseType?p.response:p.responseText,status:p.status,statusText:p.statusText,headers:n,config:e,request:p};o(t,u,r),p=null}},p.onabort=function(){p&&(u(c(\"Request aborted\",e,\"ECONNABORTED\",p)),p=null)},p.onerror=function(){u(c(\"Network Error\",e,null,p)),p=null},p.ontimeout=function(){u(c(\"timeout of \"+e.timeout+\"ms exceeded\",e,\"ECONNABORTED\",p)),p=null},r.isStandardBrowserEnv()){var m=n(31),g=(e.withCredentials||s(e.url))&&e.xsrfCookieName?m.read(e.xsrfCookieName):void 0;g&&(f[e.xsrfHeaderName]=g)}if(\"setRequestHeader\"in p&&r.forEach(f,function(e,t){void 0===l&&\"content-type\"===t.toLowerCase()?delete f[t]:p.setRequestHeader(t,e)}),e.withCredentials&&(p.withCredentials=!0),e.responseType)try{p.responseType=e.responseType}catch(t){if(\"json\"!==e.responseType)throw t}\"function\"==typeof e.onDownloadProgress&&p.addEventListener(\"progress\",e.onDownloadProgress),\"function\"==typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener(\"progress\",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){p&&(p.abort(),u(e),p=null)}),void 0===l&&(l=null),p.send(l)})}},function(e,t,n){\"use strict\";var r=n(28);e.exports=function(e,t,n,o,i){var a=new Error(e);return r(a,t,n,o,i)}},function(e,t,n){\"use strict\";var r=n(0);e.exports=function(e,t){t=t||{};var n={};return r.forEach([\"url\",\"method\",\"params\",\"data\"],function(e){void 0!==t[e]&&(n[e]=t[e])}),r.forEach([\"headers\",\"auth\",\"proxy\"],function(o){r.isObject(t[o])?n[o]=r.deepMerge(e[o],t[o]):void 0!==t[o]?n[o]=t[o]:r.isObject(e[o])?n[o]=r.deepMerge(e[o]):void 0!==e[o]&&(n[o]=e[o])}),r.forEach([\"baseURL\",\"transformRequest\",\"transformResponse\",\"paramsSerializer\",\"timeout\",\"withCredentials\",\"adapter\",\"responseType\",\"xsrfCookieName\",\"xsrfHeaderName\",\"onUploadProgress\",\"onDownloadProgress\",\"maxContentLength\",\"validateStatus\",\"maxRedirects\",\"httpAgent\",\"httpsAgent\",\"cancelToken\",\"socketPath\"],function(r){void 0!==t[r]?n[r]=t[r]:void 0!==e[r]&&(n[r]=e[r])}),n}},function(e,t,n){\"use strict\";function r(e){this.message=e}r.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},r.prototype.__CANCEL__=!0,e.exports=r},function(e,t){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=function(e,t){var n=e[1]||\"\",r=e[3];if(!r)return n;if(t&&\"function\"==typeof btoa){var o=(a=r,\"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(a))))+\" */\"),i=r.sources.map(function(e){return\"/*# sourceURL=\"+r.sourceRoot+e+\" */\"});return[n].concat(i).concat([o]).join(\"\\n\")}var a;return[n].join(\"\\n\")}(t,e);return t[2]?\"@media \"+t[2]+\"{\"+n+\"}\":n}).join(\"\")},t.i=function(e,n){\"string\"==typeof e&&(e=[[null,e,\"\"]]);for(var r={},o=0;o<this.length;o++){var i=this[o][0];\"number\"==typeof i&&(r[i]=!0)}for(o=0;o<e.length;o++){var a=e[o];\"number\"==typeof a[0]&&r[a[0]]||(n&&!a[2]?a[2]=n:n&&(a[2]=\"(\"+a[2]+\") and (\"+n+\")\"),t.push(a))}},t}},function(e,t){e.exports=\"/fonts/nucleo-icons.eot?c1733565b32b585676302d4233c39da8\"},function(e,t,n){var r,o,i={},a=(r=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===o&&(o=r.apply(this,arguments)),o}),s=function(e){var t={};return function(e){return void 0===t[e]&&(t[e]=function(e){return document.querySelector(e)}.call(this,e)),t[e]}}(),c=null,u=0,l=[],f=n(45);function p(e,t){for(var n=0;n<e.length;n++){var r=e[n],o=i[r.id];if(o){o.refs++;for(var a=0;a<o.parts.length;a++)o.parts[a](r.parts[a]);for(;a<r.parts.length;a++)o.parts.push(y(r.parts[a],t))}else{var s=[];for(a=0;a<r.parts.length;a++)s.push(y(r.parts[a],t));i[r.id]={id:r.id,refs:1,parts:s}}}}function d(e,t){for(var n=[],r={},o=0;o<e.length;o++){var i=e[o],a=t.base?i[0]+t.base:i[0],s={css:i[1],media:i[2],sourceMap:i[3]};r[a]?r[a].parts.push(s):n.push(r[a]={id:a,parts:[s]})}return n}function h(e,t){var n=s(e.insertInto);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");var r=l[l.length-1];if(\"top\"===e.insertAt)r?r.nextSibling?n.insertBefore(t,r.nextSibling):n.appendChild(t):n.insertBefore(t,n.firstChild),l.push(t);else{if(\"bottom\"!==e.insertAt)throw new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");n.appendChild(t)}}function m(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e);var t=l.indexOf(e);t>=0&&l.splice(t,1)}function g(e){var t=document.createElement(\"style\");return e.attrs.type=\"text/css\",v(t,e.attrs),h(e,t),t}function v(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function y(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var a=u++;n=c||(c=g(t)),r=w.bind(null,n,a,!1),o=w.bind(null,n,a,!0)}else e.sourceMap&&\"function\"==typeof URL&&\"function\"==typeof URL.createObjectURL&&\"function\"==typeof URL.revokeObjectURL&&\"function\"==typeof Blob&&\"function\"==typeof btoa?(n=function(e){var t=document.createElement(\"link\");return e.attrs.type=\"text/css\",e.attrs.rel=\"stylesheet\",v(t,e.attrs),h(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=f(r));o&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+\" */\");var a=new Blob([r],{type:\"text/css\"}),s=e.href;e.href=URL.createObjectURL(a),s&&URL.revokeObjectURL(s)}.bind(null,n,t),o=function(){m(n),n.href&&URL.revokeObjectURL(n.href)}):(n=g(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute(\"media\",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){m(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if(\"undefined\"!=typeof DEBUG&&DEBUG&&\"object\"!=typeof document)throw new Error(\"The style-loader cannot be used in a non-browser environment\");(t=t||{}).attrs=\"object\"==typeof t.attrs?t.attrs:{},t.singleton||(t.singleton=a()),t.insertInto||(t.insertInto=\"head\"),t.insertAt||(t.insertAt=\"bottom\");var n=d(e,t);return p(n,t),function(e){for(var r=[],o=0;o<n.length;o++){var a=n[o];(s=i[a.id]).refs--,r.push(s)}e&&p(d(e,t),t);for(o=0;o<r.length;o++){var s;if(0===(s=r[o]).refs){for(var c=0;c<s.parts.length;c++)s.parts[c]();delete i[s.id]}}}};var b,x=(b=[],function(e,t){return b[e]=t,b.filter(Boolean).join(\"\\n\")});function w(e,t,n,r){var o=n?\"\":r.css;if(e.styleSheet)e.styleSheet.cssText=x(t,o);else{var i=document.createTextNode(o),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(i,a[t]):e.appendChild(i)}}},function(e,t,n){n(16),n(79),n(80),e.exports=n(81)},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});n(38);var r=n(46),o=n.n(r),i=Object.assign||function(e){for(var t,n=1;n<arguments.length;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},a=function(e){return\"IMG\"===e.tagName},s=function(e){return e&&1===e.nodeType},c=function(e){return\".svg\"===(e.currentSrc||e.src).substr(-4).toLowerCase()},u=function(e){try{return Array.isArray(e)?e.filter(a):function(e){return NodeList.prototype.isPrototypeOf(e)}(e)?[].slice.call(e).filter(a):s(e)?[e].filter(a):\"string\"==typeof e?[].slice.call(document.querySelectorAll(e)).filter(a):[]}catch(e){throw new TypeError(\"The provided selector is invalid.\\nExpects a CSS selector, a Node element, a NodeList or an array.\\nSee: https://github.com/francoischalifour/medium-zoom\")}},l=function(e,t){var n=i({bubbles:!1,cancelable:!1,detail:void 0},t);if(\"function\"==typeof window.CustomEvent)return new CustomEvent(e,n);var r=document.createEvent(\"CustomEvent\");return r.initCustomEvent(e,n.bubbles,n.cancelable,n.detail),r};!function(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&\"undefined\"!=typeof document){var r=document.head||document.getElementsByTagName(\"head\")[0],o=document.createElement(\"style\");o.type=\"text/css\",\"top\"===n&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}(\".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}\");var f=function e(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(e){function t(){}e(t,t)},o=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.reduce(function(e,t){return[].concat(e,u(t))},[]);return r.filter(function(e){return-1===d.indexOf(e)}).forEach(function(e){d.push(e),e.classList.add(\"medium-zoom-image\")}),h.forEach(function(e){var t=e.type,n=e.listener,o=e.options;r.forEach(function(e){e.addEventListener(t,n,o)})}),x},a=function(){var e=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{}).target,t=function(){var e=Math.min,t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},n=void 0,r=void 0;if(v.container)if(v.container instanceof Object)n=(t=i({},t,v.container)).width-t.left-t.right-2*v.margin,r=t.height-t.top-t.bottom-2*v.margin;else{var o=(s(v.container)?v.container:document.querySelector(v.container)).getBoundingClientRect(),a=o.width,u=o.height,l=o.left,f=o.top;t=i({},t,{width:a,height:u,left:l,top:f})}n=n||t.width-2*v.margin,r=r||t.height-2*v.margin;var p=y.zoomedHd||y.original,d=c(p)?n:p.naturalWidth||n,h=c(p)?r:p.naturalHeight||r,m=p.getBoundingClientRect(),g=m.top,b=m.left,x=m.width,w=m.height,_=e(e(d,n)/x,e(h,r)/w),k=\"scale(\"+_+\") translate3d(\"+((n-x)/2-b+v.margin+t.left)/_+\"px, \"+((r-w)/2-g+v.margin+t.top)/_+\"px, 0)\";y.zoomed.style.transform=k,y.zoomedHd&&(y.zoomedHd.style.transform=k)};return new r(function(n){if(e&&-1===d.indexOf(e))n(x);else if(y.zoomed)n(x);else{if(e)y.original=e;else{if(!(0<d.length))return void n(x);var r=d;y.original=r[0]}if(y.original.dispatchEvent(l(\"medium-zoom:open\",{detail:{zoom:x}})),g=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,m=!0,y.zoomed=function(e){var t=e.getBoundingClientRect(),n=t.top,r=t.left,o=t.width,i=t.height,a=e.cloneNode(),s=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,c=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return a.removeAttribute(\"id\"),a.style.position=\"absolute\",a.style.top=n+s+\"px\",a.style.left=r+c+\"px\",a.style.width=o+\"px\",a.style.height=i+\"px\",a.style.transform=\"\",a}(y.original),document.body.appendChild(b),v.template){var o=s(v.template)?v.template:document.querySelector(v.template);y.template=document.createElement(\"div\"),y.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(y.template)}if(document.body.appendChild(y.zoomed),window.requestAnimationFrame(function(){document.body.classList.add(\"medium-zoom--opened\")}),y.original.classList.add(\"medium-zoom-image--hidden\"),y.zoomed.classList.add(\"medium-zoom-image--opened\"),y.zoomed.addEventListener(\"click\",f),y.zoomed.addEventListener(\"transitionend\",function e(){m=!1,y.zoomed.removeEventListener(\"transitionend\",e),y.original.dispatchEvent(l(\"medium-zoom:opened\",{detail:{zoom:x}})),n(x)}),y.original.getAttribute(\"data-zoom-src\")){y.zoomedHd=y.zoomed.cloneNode(),y.zoomedHd.removeAttribute(\"srcset\"),y.zoomedHd.removeAttribute(\"sizes\"),y.zoomedHd.src=y.zoomed.getAttribute(\"data-zoom-src\"),y.zoomedHd.onerror=function(){clearInterval(i),console.warn(\"Unable to reach the zoom image target \"+y.zoomedHd.src),y.zoomedHd=null,t()};var i=setInterval(function(){y.zoomedHd.complete&&(clearInterval(i),y.zoomedHd.classList.add(\"medium-zoom-image--opened\"),y.zoomedHd.addEventListener(\"click\",f),document.body.appendChild(y.zoomedHd),t())},10)}else if(y.original.hasAttribute(\"srcset\")){y.zoomedHd=y.zoomed.cloneNode(),y.zoomedHd.removeAttribute(\"sizes\");var a=y.zoomedHd.addEventListener(\"load\",function(){y.zoomedHd.removeEventListener(\"load\",a),y.zoomedHd.classList.add(\"medium-zoom-image--opened\"),y.zoomedHd.addEventListener(\"click\",f),document.body.appendChild(y.zoomedHd),t()})}else t()}})},f=function(){return new r(function(e){!m&&y.original?(m=!0,document.body.classList.remove(\"medium-zoom--opened\"),y.zoomed.style.transform=\"\",y.zoomedHd&&(y.zoomedHd.style.transform=\"\"),y.template&&(y.template.style.transition=\"opacity 150ms\",y.template.style.opacity=0),y.original.dispatchEvent(l(\"medium-zoom:close\",{detail:{zoom:x}})),y.zoomed.addEventListener(\"transitionend\",function t(){y.original.classList.remove(\"medium-zoom-image--hidden\"),document.body.removeChild(y.zoomed),y.zoomedHd&&document.body.removeChild(y.zoomedHd),document.body.removeChild(b),y.zoomed.classList.remove(\"medium-zoom-image--opened\"),y.template&&document.body.removeChild(y.template),m=!1,y.zoomed.removeEventListener(\"transitionend\",t),y.original.dispatchEvent(l(\"medium-zoom:closed\",{detail:{zoom:x}})),y.original=null,y.zoomed=null,y.zoomedHd=null,y.template=null,e(x)})):e(x)})},p=function(){var e=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{}).target;return y.original?f():a({target:e})},d=[],h=[],m=!1,g=0,v=n,y={original:null,zoomed:null,zoomedHd:null,template:null};\"[object Object]\"===Object.prototype.toString.call(t)?v=t:(t||\"string\"==typeof t)&&o(t);var b=function(e){var t=document.createElement(\"div\");return t.classList.add(\"medium-zoom-overlay\"),t.style.background=e,t}((v=i({margin:0,background:\"#fff\",scrollOffset:40,container:null,template:null},v)).background);document.addEventListener(\"click\",function(e){var t=e.target;return t===b?void f():void(-1===d.indexOf(t)||p({target:t}))}),document.addEventListener(\"keyup\",function(e){27===(e.keyCode||e.which)&&f()}),document.addEventListener(\"scroll\",function(){if(!m&&y.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(g-e)>v.scrollOffset&&setTimeout(f,150)}}),window.addEventListener(\"resize\",f);var x={open:a,close:f,toggle:p,update:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=e;if(e.background&&(b.style.background=e.background),e.container&&e.container instanceof Object&&(t.container=i({},v.container,e.container)),e.template){var n=s(e.template)?e.template:document.querySelector(e.template);t.template=n}return v=i({},v,t),d.forEach(function(e){e.dispatchEvent(l(\"medium-zoom:update\",{detail:{zoom:x}}))}),x},clone:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};return e(i({},v,t))},attach:o,detach:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];y.zoomed&&f();var r=0<t.length?t.reduce(function(e,t){return[].concat(e,u(t))},[]):d;return r.forEach(function(e){e.classList.remove(\"medium-zoom-image\"),e.dispatchEvent(l(\"medium-zoom:detach\",{detail:{zoom:x}}))}),d=d.filter(function(e){return-1===r.indexOf(e)}),x},on:function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return d.forEach(function(r){r.addEventListener(\"medium-zoom:\"+e,t,n)}),h.push({type:\"medium-zoom:\"+e,listener:t,options:n}),x},off:function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return d.forEach(function(r){r.removeEventListener(\"medium-zoom:\"+e,t,n)}),h=h.filter(function(n){return n.type!==\"medium-zoom:\"+e||n.listener.toString()!==t.toString()}),x},getOptions:function(){return v},getImages:function(){return d},getZoomedImage:function(){return y.original}};return x},p={bind:function(e,t,n){e.clickOutsideEvent=function(r){e==r.target||e.contains(r.target)||n.context[t.expression](r)},document.body.addEventListener(\"click\",e.clickOutsideEvent)},unbind:function(e){document.body.removeEventListener(\"click\",e.clickOutsideEvent)}},d=n(50),h=n.n(d),m=n(56),g=n.n(m),v=n(59),y=n.n(v),b=n(62),x=n.n(b),w=n(65),_=n.n(w),k=n(68),C=n.n(k),A=n(71),S=n.n(A),E=n(74),T=n.n(E),O={install:function(e){e.directive(\"click-outside\",p),e.component(h.a.name,h.a),e.component(g.a.name,g.a),e.component(y.a.name,y.a),e.component(x.a.name,x.a),e.component(_.a.name,_.a),e.component(C.a.name,C.a),e.component(S.a.name,S.a),e.component(T.a.name,T.a)}},N=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();o.a.use(O),o.a.config.productionTip=!1;var j={replace:function(){return\"(?!x)x\"}},L=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t,this.bootingCallbacks=[]}return N(e,[{key:\"booting\",value:function(e){this.bootingCallbacks.push(e)}},{key:\"boot\",value:function(){this.bootingCallbacks.forEach(function(e){return e(o.a)}),this.bootingCallbacks=[]}},{key:\"run\",value:function(){this.boot(),this.app=new o.a({el:\"#app\",delimiters:[j,j],data:function(){return{sidebar:!1,searchBox:!1}},watch:{sidebar:function(){localStorage.setItem(\"larecipeSidebar\",this.sidebar)}},mounted:function(){this.handleSidebarVisibility(),this.addLinksToHeaders(),this.setupSmoothScrolling(),this.activateCurrentSection(),this.parseDocsContent(),this.setupKeyboardShortcuts(),f(\".documentation img\")},methods:{handleSidebarVisibility:function(){var e=this;\"undefined\"!=typeof Storage&&null!==localStorage.getItem(\"larecipeSidebar\")&&(this.sidebar=\"true\"==localStorage.getItem(\"larecipeSidebar\")),$(\".documentation\").click(function(){window.matchMedia(\"(max-width: 960px)\").matches&&(e.sidebar=!1)})},addLinksToHeaders:function(){$(\".documentation\").find(\"a[name]\").each(function(){var e=$('<a href=\"#'+this.name+'\"/>');$(this).parent().next(\"h2\").wrapInner(e)})},setupSmoothScrolling:function(){$('.documentation > ul:first > li a[href*=\"#\"]:not([href=\"#\"])').click(function(){var e=$(this.hash);(e=e.length?e:$(\"[name=\"+this.hash.slice(1)+\"]\")).length&&$(\"html,body\").animate({scrollTop:e.offset().top-70},500)})},activateCurrentSection:function(){if($(\".sidebar ul\").length){var e=$(\".sidebar ul\").find('li a[href=\"'+window.location.pathname+'\"]');e.length&&e.parent().css(\"font-weight\",\"bold\").addClass(\"is-active\")}},parseDocsContent:function(){$(\".documentation blockquote p:first-child\").each(function(){var e=$(this).html();if(r=e.match(/\\{(.*?)\\}/))var t=r[1]||!1;if(t){var n=t;if(t.indexOf(\".\")>=0&&t.split(\".\")[1].startsWith(\"fa\")){var r;n=(r=t.split(\".\"))[0];t='<i class=\"fa '+r[1]+' fa-4x\"></i>'}else{t='<span class=\"svg\">'+{info:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:a=\"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/\" version=\"1.1\" x=\"0px\" y=\"0px\" width=\"90px\" height=\"90px\" viewBox=\"0 0 90 90\" enable-background=\"new 0 0 90 90\" xml:space=\"preserve\"><path fill=\"#FFFFFF\" d=\"M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z\"/></svg>',primary:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:a=\"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/\" version=\"1.1\" x=\"0px\" y=\"0px\" width=\"56.6px\" height=\"87.5px\" viewBox=\"0 0 56.6 87.5\" enable-background=\"new 0 0 56.6 87.5\" xml:space=\"preserve\"><path fill=\"#FFFFFF\" d=\"M28.7 64.5c-1.4 0-2.5-1.1-2.5-2.5v-5.7 -5V41c0-1.4 1.1-2.5 2.5-2.5s2.5 1.1 2.5 2.5v10.1 5 5.8C31.2 63.4 30.1 64.5 28.7 64.5zM26.4 0.1C11.9 1 0.3 13.1 0 27.7c-0.1 7.9 3 15.2 8.2 20.4 0.5 0.5 0.8 1 1 1.7l3.1 13.1c0.3 1.1 1.3 1.9 2.4 1.9 0.3 0 0.7-0.1 1.1-0.2 1.1-0.5 1.6-1.8 1.4-3l-2-8.4 -0.4-1.8c-0.7-2.9-2-5.7-4-8 -1-1.2-2-2.5-2.7-3.9C5.8 35.3 4.7 30.3 5.4 25 6.7 14.5 15.2 6.3 25.6 5.1c13.9-1.5 25.8 9.4 25.8 23 0 4.1-1.1 7.9-2.9 11.2 -0.8 1.4-1.7 2.7-2.7 3.9 -2 2.3-3.3 5-4 8L41.4 53l-2 8.4c-0.3 1.2 0.3 2.5 1.4 3 0.3 0.2 0.7 0.2 1.1 0.2 1.1 0 2.2-0.8 2.4-1.9l3.1-13.1c0.2-0.6 0.5-1.2 1-1.7 5-5.1 8.2-12.1 8.2-19.8C56.4 12 42.8-1 26.4 0.1zM43.7 69.6c0 0.5-0.1 0.9-0.3 1.3 -0.4 0.8-0.7 1.6-0.9 2.5 -0.7 3-2 8.6-2 8.6 -1.3 3.2-4.4 5.5-7.9 5.5h-4.1H28h-0.5 -3.6c-3.5 0-6.7-2.4-7.9-5.7l-0.1-0.4 -1.8-7.8c-0.4-1.1-0.8-2.1-1.2-3.1 -0.1-0.3-0.2-0.5-0.2-0.9 0.1-1.3 1.3-2.1 2.6-2.1H41C42.4 67.5 43.6 68.2 43.7 69.6zM37.7 72.5H26.9c-4.2 0-7.2 3.9-6.3 7.9 0.6 1.3 1.8 2.1 3.2 2.1h4.1 0.5 0.5 3.6c1.4 0 2.7-0.8 3.2-2.1L37.7 72.5z\"/></svg>',success:'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25.625 25.625\"><g transform=\"translate(-0.188 -0.188)\"><path d=\"M13,.188A12.813,12.813,0,1,0,25.813,13,12.815,12.815,0,0,0,13,.188Zm6.734,8.848L12.863,19.168a1.076,1.076,0,0,1-.848.5,1.378,1.378,0,0,1-.9-.4L7.086,15.238a.707.707,0,0,1,0-1l1-1a.7.7,0,0,1,.992,0L11.7,15.867l5.7-8.414a.712.712,0,0,1,.98-.187l1.168.793A.706.706,0,0,1,19.734,9.035Z\"/></g></svg>',danger:'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M25,0C15.625,0,8,5.977,8,13.313a10.656,10.656,0,0,0,1.5,5.781,10.92,10.92,0,0,1,1.438,4.969A10.908,10.908,0,0,0,13,18.406a25.849,25.849,0,0,0-.969-6.125,1.009,1.009,0,1,1,1.938-.562A27.747,27.747,0,0,1,15,18.406c0,2.887-1.4,5.184-2.531,7.031-.395.645-.766,1.227-1.031,1.781.609.895,1.863,1.25,3.875,1.563,2.086.324,4.688.7,4.688,3.406,0,.547,1.992,1.906,5,1.906s5-1.359,5-1.906c0-2.766,2.613-3.152,4.719-3.469,1.984-.3,3.238-.625,3.844-1.5-.27-.551-.637-1.137-1.031-1.781C36.4,23.59,35,21.293,35,18.406a27.747,27.747,0,0,1,1.031-6.687,1.009,1.009,0,0,1,1.938.563A25.849,25.849,0,0,0,37,18.406a11.028,11.028,0,0,0,2.063,5.688A10.841,10.841,0,0,1,40.5,19.219,10.937,10.937,0,0,0,42,13.313C42,5.977,34.375,0,25,0ZM19.813,18C21.711,18,23,19.988,23,21.688A4.084,4.084,0,0,1,18.594,26C17.492,26,16,24.988,16,21.688A3.655,3.655,0,0,1,19.813,18Zm10.375,0A3.655,3.655,0,0,1,34,21.688C34,24.988,32.508,26,31.406,26A4.084,4.084,0,0,1,27,21.688C27,19.988,28.289,18,30.188,18ZM4.563,21.031a2.914,2.914,0,0,0-2.719,1.625,4.086,4.086,0,0,0-.312,3.031A3.419,3.419,0,0,0,0,28.906a3.607,3.607,0,0,0,3.313,3.688,3.8,3.8,0,0,0,1.813-.437.926.926,0,0,1,.406-.125,3.079,3.079,0,0,1,1.094.406l7.281,2.969a31.556,31.556,0,0,0-.5-4.937,5.507,5.507,0,0,1-3.625-2.125,1.948,1.948,0,0,1-.156-1.969c.023-.047.07-.109.094-.156-.328-.125-.652-.262-.969-.375-.637-.23-.723-.469-.844-1.344a3.575,3.575,0,0,0-2.219-3.219A3.1,3.1,0,0,0,4.563,21.031Zm40.875,0a3.277,3.277,0,0,0-1.156.25,3.63,3.63,0,0,0-2.219,3.25c-.121.875-.16,1.1-.844,1.344-.3.121-.605.246-.906.375.016.031.047.063.063.094a2.035,2.035,0,0,1-.156,2.031,5.686,5.686,0,0,1-3.781,2.063,36.6,36.6,0,0,0-.375,4.781l7.375-2.812a2.843,2.843,0,0,1,1.031-.375,1.186,1.186,0,0,1,.406.156,3.873,3.873,0,0,0,1.813.406A3.61,3.61,0,0,0,50,28.906a3.413,3.413,0,0,0-1.531-3.156,4.136,4.136,0,0,0-.312-3.094A2.917,2.917,0,0,0,45.438,21.031ZM24.906,26C26.105,26,28,30.211,28,30.813a1.064,1.064,0,0,1-1.187,1.094c-.8,0-1.707-2.207-1.906-2.906h-.094c-.7,2-1.32,3-1.719,3-.8,0-1.094-.508-1.094-1.406C22,28.992,23.707,26,24.906,26Zm-9.375,4.813a59.9,59.9,0,0,1,.438,6.219c.027.785.059,1.641.094,2C16.848,40,21.578,44,25,44c3.438,0,8.215-4.02,8.938-5.031.027-.293.074-1.234.094-2.062.059-2.32.129-4.512.344-6.094a9.289,9.289,0,0,0-1.469.344c-.129.789-.223,1.5-.312,2.156C31.965,37.941,31.41,40,25,40c-6.5,0-7.055-2.055-7.656-6.719-.082-.637-.164-1.332-.281-2.094A10.3,10.3,0,0,0,15.531,30.813Zm4.031,3.813c.316,1.953.75,2.844,2.438,3.188V35.719A8.058,8.058,0,0,1,19.563,34.625Zm10.813.063A8.182,8.182,0,0,1,28,35.719v2.063C29.609,37.434,30.051,36.586,30.375,34.688ZM24,36.063V38c.313.008.641,0,1,0s.688.008,1,0V36.063c-.328.027-.66.031-1,.031S24.328,36.09,24,36.063Zm12,1.375a9.337,9.337,0,0,1-.156,2.188,9.893,9.893,0,0,1-3.031,3.063,63.421,63.421,0,0,1,5.688,3,4.654,4.654,0,0,1,.375,1.031c.363,1.23.965,3.281,3.313,3.281A3.3,3.3,0,0,0,45,48.75a4.55,4.55,0,0,0,.563-3.469c.059-.023.1-.07.156-.094a3.41,3.41,0,0,0,2.563-2.656,3.176,3.176,0,0,0-.437-2.5,2.955,2.955,0,0,0-2.219-1.219,3.549,3.549,0,0,0-2.812,1.156c-.187.168-.473.465-.687.438C40.93,39.855,36.582,37.723,36,37.438Zm-22.031.094c-1.348.633-5.039,2.363-6.156,2.844-.02.008-.074.055-.094.063A2.666,2.666,0,0,1,7.156,40a3.45,3.45,0,0,0-2.875-1.187,2.9,2.9,0,0,0-2.062,1.063,3.55,3.55,0,0,0-.625,2.563.879.879,0,0,0,.031.094,3.553,3.553,0,0,0,2.531,2.625c.063.027.125.07.188.094a4.665,4.665,0,0,0,.594,3.5A3.207,3.207,0,0,0,7.688,50c2.348,0,2.98-2.051,3.344-3.281a8.166,8.166,0,0,1,.313-1c1.219-.812,4.777-2.551,5.813-3.062a10.915,10.915,0,0,1-3-2.937A11.042,11.042,0,0,1,13.969,37.531Z\"/></svg>',warning:'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 37.087 50\"><path d=\"M39.531,7a2.353,2.353,0,0,0-2.5,2.531V23a1,1,0,0,1-1,1A1.026,1.026,0,0,1,35,23V4.48A2.33,2.33,0,0,0,32.52,2a2.417,2.417,0,0,0-2.5,2.508v17.5a1,1,0,0,1-1,1,1.012,1.012,0,0,1-1.016-1V2.508a2.5,2.5,0,1,0-5,0V23a1,1,0,0,1-2,0V6.547a2.5,2.5,0,0,0-5-.113V32.3a.665.665,0,0,1-.133.047l0-.047-5-6a3.384,3.384,0,0,0-4.9,0,3.382,3.382,0,0,0,0,4.9l.109.145a.924.924,0,0,0,.137.27l8.52,10.945,2.73,3.539,0-.035.352.453s0,0,.008,0a8.739,8.739,0,0,0,6.551,3.449c.125.012.262.02.4.023.043,0,.086.008.129.008,0,0,.008,0,.016,0,.027,0,.055,0,.086,0h8a8.912,8.912,0,0,0,9-9V9.582A2.347,2.347,0,0,0,39.531,7Z\" transform=\"translate(-4.913)\"/></svg>'}[t]+\"</span>\"}$(this).html(e.replace(/\\{(.*?)\\}/,'<div class=\"icon\">'+t+\"</div>\")),$(this).parent().addClass(\"alert is-\"+n)}}),$(\".documentation ul li\").each(function(){var e=/\\[.+\\]/,t=$(this).text(),n=t.match(e);if(n){$(this).parent().addClass(\"list-reset pl-0\");var r='<input type=\"checkbox\" disabled=\"\"'+(n[0].includes(\"x\")?' checked=\"\"':\"\")+\">\",o=t.replace(e,r);$(this).html(o)}})},setupKeyboardShortcuts:function(){var e=this,t=n(77);t.bind(\"/\",function(t){t.preventDefault(),e.sidebar=!e.sidebar}),t.bind(\"s\",function(t){t.preventDefault(),e.searchBox=!0}),t.bind(\"t\",function(e){e.preventDefault(),$(\"html,body\").animate({scrollTop:0},500)}),t.bind(\"b\",function(e){e.preventDefault(),$(\"html,body\").animate({scrollTop:$(document).height()},500)})}}})}}]),e}();n(17),function(){this.CreateLarecipe=function(e){return new L(e)}}.call(window)},function(e,t,n){window.jQuery=window.$=n(18),window.axios=n(19),window.axios.defaults.headers.common[\"X-Requested-With\"]=\"XMLHttpRequest\",window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"]=document.head.querySelector('meta[name=\"csrf-token\"]').content,n(36),Prism.plugins.autoloader.use_minified=!0,Prism.plugins.autoloader.languages_path=\"https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/components/\"},function(e,t,n){var r;!function(t,n){\"use strict\";\"object\"==typeof e&&\"object\"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(t)}(\"undefined\"!=typeof window?window:this,function(n,o){\"use strict\";var i=[],a=n.document,s=Object.getPrototypeOf,c=i.slice,u=i.concat,l=i.push,f=i.indexOf,p={},d=p.toString,h=p.hasOwnProperty,m=h.toString,g=m.call(Object),v={},y=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType},b=function(e){return null!=e&&e===e.window},x={type:!0,src:!0,nonce:!0,noModule:!0};function w(e,t,n){var r,o,i=(n=n||a).createElement(\"script\");if(i.text=e,t)for(r in x)(o=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function _(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?p[d.call(e)]||\"object\":typeof e}var k=function(e,t){return new k.fn.init(e,t)},C=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function A(e){var t=!!e&&\"length\"in e&&e.length,n=_(e);return!y(e)&&!b(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}k.fn=k.prototype={jquery:\"3.4.1\",constructor:k,length:0,toArray:function(){return c.call(this)},get:function(e){return null==e?c.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(e){return this.pushStack(k.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(c.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:l,sort:i.sort,splice:i.splice},k.extend=k.fn.extend=function(){var e,t,n,r,o,i,a=arguments[0]||{},s=1,c=arguments.length,u=!1;for(\"boolean\"==typeof a&&(u=a,a=arguments[s]||{},s++),\"object\"==typeof a||y(a)||(a={}),s===c&&(a=this,s--);s<c;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(u&&r&&(k.isPlainObject(r)||(o=Array.isArray(r)))?(n=a[t],i=o&&!Array.isArray(n)?[]:o||k.isPlainObject(n)?n:{},o=!1,a[t]=k.extend(u,i,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:\"jQuery\"+(\"3.4.1\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==d.call(e))&&(!(t=s(e))||\"function\"==typeof(n=h.call(t,\"constructor\")&&t.constructor)&&m.call(n)===g)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){w(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(A(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(C,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(A(Object(e))?k.merge(n,\"string\"==typeof e?[e]:e):l.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:f.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r=[],o=0,i=e.length,a=!n;o<i;o++)!t(e[o],o)!==a&&r.push(e[o]);return r},map:function(e,t,n){var r,o,i=0,a=[];if(A(e))for(r=e.length;i<r;i++)null!=(o=t(e[i],i,n))&&a.push(o);else for(i in e)null!=(o=t(e[i],i,n))&&a.push(o);return u.apply([],a)},guid:1,support:v}),\"function\"==typeof Symbol&&(k.fn[Symbol.iterator]=i[Symbol.iterator]),k.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){p[\"[object \"+t+\"]\"]=t.toLowerCase()});var S=function(e){var t,n,r,o,i,a,s,c,u,l,f,p,d,h,m,g,v,y,b,x=\"sizzle\"+1*new Date,w=e.document,_=0,k=0,C=ce(),A=ce(),S=ce(),E=ce(),T=function(e,t){return e===t&&(f=!0),0},O={}.hasOwnProperty,$=[],N=$.pop,j=$.push,L=$.push,D=$.slice,I=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",R=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",F=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",M=\"\\\\[\"+R+\"*(\"+F+\")(?:\"+R+\"*([*^$|!~]?=)\"+R+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+F+\"))|)\"+R+\"*\\\\]\",q=\":(\"+F+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+M+\")*)|.*)\\\\)|)\",H=new RegExp(R+\"+\",\"g\"),z=new RegExp(\"^\"+R+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+R+\"+$\",\"g\"),B=new RegExp(\"^\"+R+\"*,\"+R+\"*\"),U=new RegExp(\"^\"+R+\"*([>+~]|\"+R+\")\"+R+\"*\"),V=new RegExp(R+\"|>\"),W=new RegExp(q),K=new RegExp(\"^\"+F+\"$\"),J={ID:new RegExp(\"^#(\"+F+\")\"),CLASS:new RegExp(\"^\\\\.(\"+F+\")\"),TAG:new RegExp(\"^(\"+F+\"|[*])\"),ATTR:new RegExp(\"^\"+M),PSEUDO:new RegExp(\"^\"+q),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+R+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+R+\"*(?:([+-]|)\"+R+\"*(\\\\d+)|))\"+R+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+P+\")$\",\"i\"),needsContext:new RegExp(\"^\"+R+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+R+\"*((?:-\\\\d)?\\\\d*)\"+R+\"*\\\\)|)(?=[^-]|$)\",\"i\")},X=/HTML$/i,Z=/^(?:input|select|textarea|button)$/i,G=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,Y=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+R+\"?|(\"+R+\")|.)\",\"ig\"),ne=function(e,t,n){var r=\"0x\"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,oe=function(e,t){return t?\"\\0\"===e?\"�\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},ie=function(){p()},ae=xe(function(e){return!0===e.disabled&&\"fieldset\"===e.nodeName.toLowerCase()},{dir:\"parentNode\",next:\"legend\"});try{L.apply($=D.call(w.childNodes),w.childNodes),$[w.childNodes.length].nodeType}catch(e){L={apply:$.length?function(e,t){j.apply(e,D.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(e,t,r,o){var i,s,u,l,f,h,v,y=t&&t.ownerDocument,_=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==_&&9!==_&&11!==_)return r;if(!o&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,m)){if(11!==_&&(f=Y.exec(e)))if(i=f[1]){if(9===_){if(!(u=t.getElementById(i)))return r;if(u.id===i)return r.push(u),r}else if(y&&(u=y.getElementById(i))&&b(t,u)&&u.id===i)return r.push(u),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((i=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(i)),r}if(n.qsa&&!E[e+\" \"]&&(!g||!g.test(e))&&(1!==_||\"object\"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===_&&V.test(e)){for((l=t.getAttribute(\"id\"))?l=l.replace(re,oe):t.setAttribute(\"id\",l=x),s=(h=a(e)).length;s--;)h[s]=\"#\"+l+\" \"+be(h[s]);v=h.join(\",\"),y=ee.test(e)&&ve(t.parentNode)||t}try{return L.apply(r,y.querySelectorAll(v)),r}catch(t){E(e,!0)}finally{l===x&&t.removeAttribute(\"id\")}}}return c(e.replace(z,\"$1\"),t,r,o)}function ce(){var e=[];return function t(n,o){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=o}}function ue(e){return e[x]=!0,e}function le(e){var t=d.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var n=e.split(\"|\"),o=n.length;o--;)r.attrHandle[n[o]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function de(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function he(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function me(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ae(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function ge(e){return ue(function(t){return t=+t,ue(function(n,r){for(var o,i=e([],n.length,t),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))})})}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!X.test(t||n&&n.nodeName||\"HTML\")},p=se.setDocument=function(e){var t,o,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(h=(d=a).documentElement,m=!i(d),w!==d&&(o=d.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener(\"unload\",ie,!1):o.attachEvent&&o.attachEvent(\"onunload\",ie)),n.attributes=le(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),n.getElementsByTagName=le(function(e){return e.appendChild(d.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=le(function(e){return h.appendChild(e).id=x,!d.getElementsByName||!d.getElementsByName(x).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,o,i=t.getElementById(e);if(i){if((n=i.getAttributeNode(\"id\"))&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if((n=i.getAttributeNode(\"id\"))&&n.value===e)return[i]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if(\"*\"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=Q.test(d.querySelectorAll))&&(le(function(e){h.appendChild(e).innerHTML=\"<a id='\"+x+\"'></a><select id='\"+x+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&g.push(\"[*^$]=\"+R+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||g.push(\"\\\\[\"+R+\"*(?:value|\"+P+\")\"),e.querySelectorAll(\"[id~=\"+x+\"-]\").length||g.push(\"~=\"),e.querySelectorAll(\":checked\").length||g.push(\":checked\"),e.querySelectorAll(\"a#\"+x+\"+*\").length||g.push(\".#.+[+~]\")}),le(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=d.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&g.push(\"name\"+R+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&g.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&g.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),g.push(\",.*:\")})),(n.matchesSelector=Q.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&le(function(e){n.disconnectedMatch=y.call(e,\"*\"),y.call(e,\"[s!='']:x\"),v.push(\"!=\",q)}),g=g.length&&new RegExp(g.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=Q.test(h.compareDocumentPosition),b=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},T=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&b(w,e)?-1:t===d||t.ownerDocument===w&&b(w,t)?1:l?I(l,e)-I(l,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],s=[t];if(!o||!i)return e===d?-1:t===d?1:o?-1:i?1:l?I(l,e)-I(l,t):0;if(o===i)return pe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?pe(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),n.matchesSelector&&m&&!E[t+\" \"]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){E(t,!0)}return se(t,d,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),b(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var o=r.attrHandle[t.toLowerCase()],i=o&&O.call(r.attrHandle,t.toLowerCase())?o(e,t,!m):void 0;return void 0!==i?i:n.attributes||!m?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},se.escape=function(e){return(e+\"\").replace(re,oe)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,r=[],o=0,i=0;if(f=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(T),f){for(;t=e[i++];)t===e[i]&&(o=r.push(i));for(;o--;)e.splice(r[o],1)}return l=null,e},o=se.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=o(t);return n},(r=se.selectors={cacheLength:50,createPseudo:ue,match:J,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return J.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&W.test(n)&&(t=a(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+\" \"];return t||(t=new RegExp(\"(^|\"+R+\")\"+e+\"(\"+R+\"|$)\"))&&C(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var o=se.attr(r,e);return null==o?\"!=\"===t:!t||(o+=\"\",\"=\"===t?o===n:\"!=\"===t?o!==n:\"^=\"===t?n&&0===o.indexOf(n):\"*=\"===t?n&&o.indexOf(n)>-1:\"$=\"===t?n&&o.slice(-n.length)===n:\"~=\"===t?(\" \"+o.replace(H,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(o===n||o.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,o){var i=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,c){var u,l,f,p,d,h,m=i!==a?\"nextSibling\":\"previousSibling\",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!c&&!s,b=!1;if(g){if(i){for(;m;){for(p=t;p=p[m];)if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=m=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(b=(d=(u=(l=(f=(p=g)[x]||(p[x]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===_&&u[1])&&u[2],p=d&&g.childNodes[d];p=++d&&p&&p[m]||(b=d=0)||h.pop();)if(1===p.nodeType&&++b&&p===t){l[e]=[_,d,b];break}}else if(y&&(b=d=(u=(l=(f=(p=t)[x]||(p[x]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===_&&u[1]),!1===b)for(;(p=++d&&p&&p[m]||(b=d=0)||h.pop())&&((s?p.nodeName.toLowerCase()!==v:1!==p.nodeType)||!++b||(y&&((l=(f=p[x]||(p[x]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[_,b]),p!==t)););return(b-=o)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,o=r.pseudos[e]||r.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return o[x]?o(t):o.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?ue(function(e,n){for(var r,i=o(e,t),a=i.length;a--;)e[r=I(e,i[a])]=!(n[r]=i[a])}):function(e){return o(e,0,n)}):o}},pseudos:{not:ue(function(e){var t=[],n=[],r=s(e.replace(z,\"$1\"));return r[x]?ue(function(e,t,n,o){for(var i,a=r(e,null,o,[]),s=e.length;s--;)(i=a[s])&&(e[s]=!(t[s]=i))}):function(e,o,i){return t[0]=e,r(t,null,i,n),t[0]=null,!n.pop()}}),has:ue(function(e){return function(t){return se(e,t).length>0}}),contains:ue(function(e){return e=e.replace(te,ne),function(t){return(t.textContent||o(t)).indexOf(e)>-1}}),lang:ue(function(e){return K.test(e||\"\")||se.error(\"unsupported lang: \"+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return G.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ge(function(){return[0]}),last:ge(function(e,t){return[t-1]}),eq:ge(function(e,t,n){return[n<0?n+t:n]}),even:ge(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ge(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ge(function(e,t,n){for(var r=n<0?n+t:n>t?t:n;--r>=0;)e.push(r);return e}),gt:ge(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=de(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=he(t);function ye(){}function be(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function xe(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&\"parentNode\"===i,s=k++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||a)return e(t,n,o);return!1}:function(t,n,c){var u,l,f,p=[_,s];if(c){for(;t=t[r];)if((1===t.nodeType||a)&&e(t,n,c))return!0}else for(;t=t[r];)if(1===t.nodeType||a)if(l=(f=t[x]||(t[x]={}))[t.uniqueID]||(f[t.uniqueID]={}),o&&o===t.nodeName.toLowerCase())t=t[r]||t;else{if((u=l[i])&&u[0]===_&&u[1]===s)return p[2]=u[2];if(l[i]=p,p[2]=e(t,n,c))return!0}return!1}}function we(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function _e(e,t,n,r,o){for(var i,a=[],s=0,c=e.length,u=null!=t;s<c;s++)(i=e[s])&&(n&&!n(i,r,o)||(a.push(i),u&&t.push(s)));return a}function ke(e,t,n,r,o,i){return r&&!r[x]&&(r=ke(r)),o&&!o[x]&&(o=ke(o,i)),ue(function(i,a,s,c){var u,l,f,p=[],d=[],h=a.length,m=i||function(e,t,n){for(var r=0,o=t.length;r<o;r++)se(e,t[r],n);return n}(t||\"*\",s.nodeType?[s]:s,[]),g=!e||!i&&t?m:_e(m,p,e,s,c),v=n?o||(i?e:h||r)?[]:a:g;if(n&&n(g,v,s,c),r)for(u=_e(v,d),r(u,[],s,c),l=u.length;l--;)(f=u[l])&&(v[d[l]]=!(g[d[l]]=f));if(i){if(o||e){if(o){for(u=[],l=v.length;l--;)(f=v[l])&&u.push(g[l]=f);o(null,v=[],u,c)}for(l=v.length;l--;)(f=v[l])&&(u=o?I(i,f):p[l])>-1&&(i[u]=!(a[u]=f))}}else v=_e(v===a?v.splice(h,v.length):v),o?o(null,a,v,c):L.apply(a,v)})}function Ce(e){for(var t,n,o,i=e.length,a=r.relative[e[0].type],s=a||r.relative[\" \"],c=a?1:0,l=xe(function(e){return e===t},s,!0),f=xe(function(e){return I(t,e)>-1},s,!0),p=[function(e,n,r){var o=!a&&(r||n!==u)||((t=n).nodeType?l(e,n,r):f(e,n,r));return t=null,o}];c<i;c++)if(n=r.relative[e[c].type])p=[xe(we(p),n)];else{if((n=r.filter[e[c].type].apply(null,e[c].matches))[x]){for(o=++c;o<i&&!r.relative[e[o].type];o++);return ke(c>1&&we(p),c>1&&be(e.slice(0,c-1).concat({value:\" \"===e[c-2].type?\"*\":\"\"})).replace(z,\"$1\"),n,c<o&&Ce(e.slice(c,o)),o<i&&Ce(e=e.slice(o)),o<i&&be(e))}p.push(n)}return we(p)}return ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=se.tokenize=function(e,t){var n,o,i,a,s,c,u,l=A[e+\" \"];if(l)return t?0:l.slice(0);for(s=e,c=[],u=r.preFilter;s;){for(a in n&&!(o=B.exec(s))||(o&&(s=s.slice(o[0].length)||s),c.push(i=[])),n=!1,(o=U.exec(s))&&(n=o.shift(),i.push({value:n,type:o[0].replace(z,\" \")}),s=s.slice(n.length)),r.filter)!(o=J[a].exec(s))||u[a]&&!(o=u[a](o))||(n=o.shift(),i.push({value:n,type:a,matches:o}),s=s.slice(n.length));if(!n)break}return t?s.length:s?se.error(e):A(e,c).slice(0)},s=se.compile=function(e,t){var n,o=[],i=[],s=S[e+\" \"];if(!s){for(t||(t=a(e)),n=t.length;n--;)(s=Ce(t[n]))[x]?o.push(s):i.push(s);(s=S(e,function(e,t){var n=t.length>0,o=e.length>0,i=function(i,a,s,c,l){var f,h,g,v=0,y=\"0\",b=i&&[],x=[],w=u,k=i||o&&r.find.TAG(\"*\",l),C=_+=null==w?1:Math.random()||.1,A=k.length;for(l&&(u=a===d||a||l);y!==A&&null!=(f=k[y]);y++){if(o&&f){for(h=0,a||f.ownerDocument===d||(p(f),s=!m);g=e[h++];)if(g(f,a||d,s)){c.push(f);break}l&&(_=C)}n&&((f=!g&&f)&&v--,i&&b.push(f))}if(v+=y,n&&y!==v){for(h=0;g=t[h++];)g(b,x,a,s);if(i){if(v>0)for(;y--;)b[y]||x[y]||(x[y]=N.call(c));x=_e(x)}L.apply(c,x),l&&!i&&x.length>0&&v+t.length>1&&se.uniqueSort(c)}return l&&(_=C,u=w),b};return n?ue(i):i}(i,o))).selector=e}return s},c=se.select=function(e,t,n,o){var i,c,u,l,f,p=\"function\"==typeof e&&e,d=!o&&a(e=p.selector||e);if(n=n||[],1===d.length){if((c=d[0]=d[0].slice(0)).length>2&&\"ID\"===(u=c[0]).type&&9===t.nodeType&&m&&r.relative[c[1].type]){if(!(t=(r.find.ID(u.matches[0].replace(te,ne),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(c.shift().value.length)}for(i=J.needsContext.test(e)?0:c.length;i--&&(u=c[i],!r.relative[l=u.type]);)if((f=r.find[l])&&(o=f(u.matches[0].replace(te,ne),ee.test(c[0].type)&&ve(t.parentNode)||t))){if(c.splice(i,1),!(e=o.length&&be(c)))return L.apply(n,o),n;break}}return(p||s(e,d))(o,t,!m,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=x.split(\"\").sort(T).join(\"\")===x,n.detectDuplicates=!!f,p(),n.sortDetached=le(function(e){return 1&e.compareDocumentPosition(d.createElement(\"fieldset\"))}),le(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||fe(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),n.attributes&&le(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||fe(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),le(function(e){return null==e.getAttribute(\"disabled\")})||fe(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(n);k.find=S,k.expr=S.selectors,k.expr[\":\"]=k.expr.pseudos,k.uniqueSort=k.unique=S.uniqueSort,k.text=S.getText,k.isXMLDoc=S.isXML,k.contains=S.contains,k.escapeSelector=S.escape;var E=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&k(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},O=k.expr.match.needsContext;function $(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,t,n){return y(t)?k.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?k.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?k.grep(e,function(e){return f.call(t,e)>-1!==n}):k.filter(t,e,n)}k.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,o=this;if(\"string\"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(o[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,o[t],n);return r>1?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&O.test(e)?k(e):e||[],!1).length}});var L,D=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(k.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||L,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:D.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:a,!0)),N.test(r[1])&&k.isPlainObject(t))for(r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(o=a.getElementById(r[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,L=k(a);var I=/^(?:parents|prev(?:Until|All))/,P={children:!0,contents:!0,next:!0,prev:!0};function R(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,o=this.length,i=[],a=\"string\"!=typeof e&&k(e);if(!O.test(e))for(;r<o;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&k.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?k.uniqueSort(i):i)},index:function(e){return e?\"string\"==typeof e?f.call(k(e),this[0]):f.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return E(e,\"parentNode\")},parentsUntil:function(e,t,n){return E(e,\"parentNode\",n)},next:function(e){return R(e,\"nextSibling\")},prev:function(e){return R(e,\"previousSibling\")},nextAll:function(e){return E(e,\"nextSibling\")},prevAll:function(e){return E(e,\"previousSibling\")},nextUntil:function(e,t,n){return E(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return E(e,\"previousSibling\",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return void 0!==e.contentDocument?e.contentDocument:($(e,\"template\")&&(e=e.content||e),k.merge([],e.childNodes))}},function(e,t){k.fn[e]=function(n,r){var o=k.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(o=k.filter(r,o)),this.length>1&&(P[e]||k.uniqueSort(o),I.test(e)&&o.reverse()),this.pushStack(o)}});var F=/[^\\x20\\t\\r\\n\\f]+/g;function M(e){return e}function q(e){throw e}function H(e,t,n,r){var o;try{e&&y(o=e.promise)?o.call(e).done(t).fail(n):e&&y(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(e){e=\"string\"==typeof e?function(e){var t={};return k.each(e.match(F)||[],function(e,n){t[n]=!0}),t}(e):k.extend({},e);var t,n,r,o,i=[],a=[],s=-1,c=function(){for(o=o||e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s<i.length;)!1===i[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=i.length,n=!1);e.memory||(n=!1),t=!1,o&&(i=n?[]:\"\")},u={add:function(){return i&&(n&&!t&&(s=i.length-1,a.push(n)),function t(n){k.each(n,function(n,r){y(r)?e.unique&&u.has(r)||i.push(r):r&&r.length&&\"string\"!==_(r)&&t(r)})}(arguments),n&&!t&&c()),this},remove:function(){return k.each(arguments,function(e,t){for(var n;(n=k.inArray(t,i,n))>-1;)i.splice(n,1),n<=s&&s--}),this},has:function(e){return e?k.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=a=[],i=n=\"\",this},disabled:function(){return!i},lock:function(){return o=a=[],n||t||(i=n=\"\"),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||c()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!r}};return u},k.extend({Deferred:function(e){var t=[[\"notify\",\"progress\",k.Callbacks(\"memory\"),k.Callbacks(\"memory\"),2],[\"resolve\",\"done\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",o={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return k.Deferred(function(n){k.each(t,function(t,r){var o=y(e[r[4]])&&e[r[4]];i[r[1]](function(){var e=o&&o.apply(this,arguments);e&&y(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,o?[e]:arguments)})}),e=null}).promise()},then:function(e,r,o){var i=0;function a(e,t,r,o){return function(){var s=this,c=arguments,u=function(){var n,u;if(!(e<i)){if((n=r.apply(s,c))===t.promise())throw new TypeError(\"Thenable self-resolution\");u=n&&(\"object\"==typeof n||\"function\"==typeof n)&&n.then,y(u)?o?u.call(n,a(i,t,M,o),a(i,t,q,o)):(i++,u.call(n,a(i,t,M,o),a(i,t,q,o),a(i,t,M,t.notifyWith))):(r!==M&&(s=void 0,c=[n]),(o||t.resolveWith)(s,c))}},l=o?u:function(){try{u()}catch(n){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(n,l.stackTrace),e+1>=i&&(r!==q&&(s=void 0,c=[n]),t.rejectWith(s,c))}};e?l():(k.Deferred.getStackHook&&(l.stackTrace=k.Deferred.getStackHook()),n.setTimeout(l))}}return k.Deferred(function(n){t[0][3].add(a(0,n,y(o)?o:M,n.notifyWith)),t[1][3].add(a(0,n,y(e)?e:M)),t[2][3].add(a(0,n,y(r)?r:q))}).promise()},promise:function(e){return null!=e?k.extend(e,o):o}},i={};return k.each(t,function(e,n){var a=n[2],s=n[5];o[n[1]]=a.add,s&&a.add(function(){r=s},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(n[3].fire),i[n[0]]=function(){return i[n[0]+\"With\"](this===i?void 0:this,arguments),this},i[n[0]+\"With\"]=a.fireWith}),o.promise(i),e&&e.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),o=c.call(arguments),i=k.Deferred(),a=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?c.call(arguments):n,--t||i.resolveWith(r,o)}};if(t<=1&&(H(e,i.done(a(n)).resolve,i.reject,!t),\"pending\"===i.state()||y(o[n]&&o[n].then)))return i.then();for(;n--;)H(o[n],a(n),i.reject);return i.promise()}});var z=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&z.test(e.name)&&n.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},k.readyException=function(e){n.setTimeout(function(){throw e})};var B=k.Deferred();function U(){a.removeEventListener(\"DOMContentLoaded\",U),n.removeEventListener(\"load\",U),k.ready()}k.fn.ready=function(e){return B.then(e).catch(function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0,!0!==e&&--k.readyWait>0||B.resolveWith(a,[k]))}}),k.ready.then=B.then,\"complete\"===a.readyState||\"loading\"!==a.readyState&&!a.documentElement.doScroll?n.setTimeout(k.ready):(a.addEventListener(\"DOMContentLoaded\",U),n.addEventListener(\"load\",U));var V=function(e,t,n,r,o,i,a){var s=0,c=e.length,u=null==n;if(\"object\"===_(n))for(s in o=!0,n)V(e,t,s,n[s],!0,i,a);else if(void 0!==r&&(o=!0,y(r)||(a=!0),u&&(a?(t.call(e,r),t=null):(u=t,t=function(e,t,n){return u.call(k(e),n)})),t))for(;s<c;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return o?e:u?t.call(e):c?t(e[0],n):i},W=/^-ms-/,K=/-([a-z])/g;function J(e,t){return t.toUpperCase()}function X(e){return e.replace(W,\"ms-\").replace(K,J)}var Z=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=k.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Z(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if(\"string\"==typeof t)o[X(t)]=n;else for(r in t)o[X(r)]=t[r];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(F)||[]).length;for(;n--;)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new G,Y=new G,ee=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,te=/[A-Z]/g;function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(te,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=function(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:ee.test(e)?JSON.parse(e):e)}(n)}catch(e){}Y.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return Y.hasData(e)||Q.hasData(e)},data:function(e,t,n){return Y.access(e,t,n)},removeData:function(e,t){Y.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(e,t){var n,r,o,i=this[0],a=i&&i.attributes;if(void 0===e){if(this.length&&(o=Y.get(i),1===i.nodeType&&!Q.get(i,\"hasDataAttrs\"))){for(n=a.length;n--;)a[n]&&0===(r=a[n].name).indexOf(\"data-\")&&(r=X(r.slice(5)),ne(i,r,o[r]));Q.set(i,\"hasDataAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){Y.set(this,e)}):V(this,function(t){var n;if(i&&void 0===t)return void 0!==(n=Y.get(i,e))?n:void 0!==(n=ne(i,e))?n:void 0;this.each(function(){Y.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Y.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=k.queue(e,t),r=n.length,o=n.shift(),i=k._queueHooks(e,t);\"inprogress\"===o&&(o=n.shift(),r--),o&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete i.stop,o.call(e,function(){k.dequeue(e,t)},i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks(\"once memory\").add(function(){Q.remove(e,[t+\"queue\",n])})})}}),k.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?k.queue(this[0],e):void 0===t?this:this.each(function(){var n=k.queue(this,e,t);k._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&k.dequeue(this,e)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,o=k.Deferred(),i=this,a=this.length,s=function(){--r||o.resolveWith(i,[i])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";a--;)(n=Q.get(i[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),o.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,oe=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),ie=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ae=a.documentElement,se=function(e){return k.contains(e.ownerDocument,e)},ce={composed:!0};ae.getRootNode&&(se=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ce)===e.ownerDocument});var ue=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&se(e)&&\"none\"===k.css(e,\"display\")},le=function(e,t,n,r){var o,i,a={};for(i in t)a[i]=e.style[i],e.style[i]=t[i];for(i in o=n.apply(e,r||[]),t)e.style[i]=a[i];return o};function fe(e,t,n,r){var o,i,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,\"\")},c=s(),u=n&&n[3]||(k.cssNumber[t]?\"\":\"px\"),l=e.nodeType&&(k.cssNumber[t]||\"px\"!==u&&+c)&&oe.exec(k.css(e,t));if(l&&l[3]!==u){for(c/=2,u=u||l[3],l=+c||1;a--;)k.style(e,t,l+u),(1-i)*(1-(i=s()/c||.5))<=0&&(a=0),l/=i;l*=2,k.style(e,t,l+u),n=n||[]}return n&&(l=+l||+c||0,o=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=u,r.start=l,r.end=o)),o}var pe={};function de(e){var t,n=e.ownerDocument,r=e.nodeName,o=pe[r];return o||(t=n.body.appendChild(n.createElement(r)),o=k.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===o&&(o=\"block\"),pe[r]=o,o)}function he(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)(r=e[i]).style&&(n=r.style.display,t?(\"none\"===n&&(o[i]=Q.get(r,\"display\")||null,o[i]||(r.style.display=\"\")),\"\"===r.style.display&&ue(r)&&(o[i]=de(r))):\"none\"!==n&&(o[i]=\"none\",Q.set(r,\"display\",n)));for(i=0;i<a;i++)null!=o[i]&&(e[i].style.display=o[i]);return e}k.fn.extend({show:function(){return he(this,!0)},hide:function(){return he(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ue(this)?k(this).show():k(this).hide()})}});var me=/^(?:checkbox|radio)$/i,ge=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,ve=/^$|^module$|\\/(?:java|ecma)script/i,ye={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function be(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):void 0!==e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&$(e,t)?k.merge([e],n):n}function xe(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],\"globalEval\",!t||Q.get(t[n],\"globalEval\"))}ye.optgroup=ye.option,ye.tbody=ye.tfoot=ye.colgroup=ye.caption=ye.thead,ye.th=ye.td;var we,_e,ke=/<|&#?\\w+;/;function Ce(e,t,n,r,o){for(var i,a,s,c,u,l,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((i=e[d])||0===i)if(\"object\"===_(i))k.merge(p,i.nodeType?[i]:i);else if(ke.test(i)){for(a=a||f.appendChild(t.createElement(\"div\")),s=(ge.exec(i)||[\"\",\"\"])[1].toLowerCase(),c=ye[s]||ye._default,a.innerHTML=c[1]+k.htmlPrefilter(i)+c[2],l=c[0];l--;)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(i));for(f.textContent=\"\",d=0;i=p[d++];)if(r&&k.inArray(i,r)>-1)o&&o.push(i);else if(u=se(i),a=be(f.appendChild(i),\"script\"),u&&xe(a),n)for(l=0;i=a[l++];)ve.test(i.type||\"\")&&n.push(i);return f}we=a.createDocumentFragment().appendChild(a.createElement(\"div\")),(_e=a.createElement(\"input\")).setAttribute(\"type\",\"radio\"),_e.setAttribute(\"checked\",\"checked\"),_e.setAttribute(\"name\",\"t\"),we.appendChild(_e),v.checkClone=we.cloneNode(!0).cloneNode(!0).lastChild.checked,we.innerHTML=\"<textarea>x</textarea>\",v.noCloneChecked=!!we.cloneNode(!0).lastChild.defaultValue;var Ae=/^key/,Se=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\\.(.+)|)/;function Te(){return!0}function Oe(){return!1}function $e(e,t){return e===function(){try{return a.activeElement}catch(e){}}()==(\"focus\"===t)}function Ne(e,t,n,r,o,i){var a,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Ne(e,s,n,r,t[s],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&(\"string\"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=Oe;else if(!o)return e;return 1===i&&(a=o,(o=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,o,r,n)})}function je(e,t,n){n?(Q.set(e,t,!1),k.event.add(e,t,{namespace:!1,handler:function(e){var r,o,i=Q.get(this,t);if(1&e.isTrigger&&this[t]){if(i.length)(k.event.special[t]||{}).delegateType&&e.stopPropagation();else if(i=c.call(arguments),Q.set(this,t,i),r=n(this,t),this[t](),i!==(o=Q.get(this,t))||r?Q.set(this,t,!1):o={},i!==o)return e.stopImmediatePropagation(),e.preventDefault(),o.value}else i.length&&(Q.set(this,t,{value:k.event.trigger(k.extend(i[0],k.Event.prototype),i.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,t)&&k.event.add(e,t,Te)}k.event={global:{},add:function(e,t,n,r,o){var i,a,s,c,u,l,f,p,d,h,m,g=Q.get(e);if(g)for(n.handler&&(n=(i=n).handler,o=i.selector),o&&k.find.matchesSelector(ae,o),n.guid||(n.guid=k.guid++),(c=g.events)||(c=g.events={}),(a=g.handle)||(a=g.handle=function(t){return void 0!==k&&k.event.triggered!==t.type?k.event.dispatch.apply(e,arguments):void 0}),u=(t=(t||\"\").match(F)||[\"\"]).length;u--;)d=m=(s=Ee.exec(t[u])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=k.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},l=k.extend({type:d,origType:m,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&k.expr.match.needsContext.test(o),namespace:h.join(\".\")},i),(p=c[d])||((p=c[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),k.event.global[d]=!0)},remove:function(e,t,n,r,o){var i,a,s,c,u,l,f,p,d,h,m,g=Q.hasData(e)&&Q.get(e);if(g&&(c=g.events)){for(u=(t=(t||\"\").match(F)||[\"\"]).length;u--;)if(d=m=(s=Ee.exec(t[u])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d){for(f=k.event.special[d]||{},p=c[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=i=p.length;i--;)l=p[i],!o&&m!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&(\"**\"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,g.handle)||k.removeEvent(e,d,g.handle),delete c[d])}else for(d in c)k.event.remove(e,d+t[u],n,r,!0);k.isEmptyObject(c)&&Q.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,o,i,a,s=k.event.fix(e),c=new Array(arguments.length),u=(Q.get(this,\"events\")||{})[s.type]||[],l=k.event.special[s.type]||{};for(c[0]=s,t=1;t<arguments.length;t++)c[t]=arguments[t];if(s.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,s)){for(a=k.event.handlers.call(this,s,u),t=0;(o=a[t++])&&!s.isPropagationStopped();)for(s.currentTarget=o.elem,n=0;(i=o.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!1!==i.namespace&&!s.rnamespace.test(i.namespace)||(s.handleObj=i,s.data=i.data,void 0!==(r=((k.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,c))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,o,i,a,s=[],c=t.delegateCount,u=e.target;if(c&&u.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&(\"click\"!==e.type||!0!==u.disabled)){for(i=[],a={},n=0;n<c;n++)void 0===a[o=(r=t[n]).selector+\" \"]&&(a[o]=r.needsContext?k(o,this).index(u)>-1:k.find(o,this,null,[u]).length),a[o]&&i.push(r);i.length&&s.push({elem:u,handlers:i})}return u=this,c<t.length&&s.push({elem:u,handlers:t.slice(c)}),s},addProp:function(e,t){Object.defineProperty(k.Event.prototype,e,{enumerable:!0,configurable:!0,get:y(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return me.test(t.type)&&t.click&&$(t,\"input\")&&je(t,\"click\",Te),!1},trigger:function(e){var t=this||e;return me.test(t.type)&&t.click&&$(t,\"input\")&&je(t,\"click\"),!0},_default:function(e){var t=e.target;return me.test(t.type)&&t.click&&$(t,\"input\")&&Q.get(t,\"click\")||$(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Te:Oe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Oe,isPropagationStopped:Oe,isImmediatePropagationStopped:Oe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Te,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Te,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Te,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Ae.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Se.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){k.event.special[e]={setup:function(){return je(this,e,$e),!1},trigger:function(){return je(this,e),!0},delegateType:t}}),k.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){k.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=e.relatedTarget,o=e.handleObj;return r&&(r===this||k.contains(this,r))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),k.fn.extend({on:function(e,t,n,r){return Ne(this,e,t,n,r)},one:function(e,t,n,r){return Ne(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Oe),this.each(function(){k.event.remove(this,e,n,t)})}});var Le=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,De=/<script|<style|<link/i,Ie=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Pe=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Re(e,t){return $(e,\"table\")&&$(11!==t.nodeType?t:t.firstChild,\"tr\")&&k(e).children(\"tbody\")[0]||e}function Fe(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Me(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function qe(e,t){var n,r,o,i,a,s,c,u;if(1===t.nodeType){if(Q.hasData(e)&&(i=Q.access(e),a=Q.set(t,i),u=i.events))for(o in delete a.handle,a.events={},u)for(n=0,r=u[o].length;n<r;n++)k.event.add(t,o,u[o][n]);Y.hasData(e)&&(s=Y.access(e),c=k.extend({},s),Y.set(t,c))}}function He(e,t,n,r){t=u.apply([],t);var o,i,a,s,c,l,f=0,p=e.length,d=p-1,h=t[0],m=y(h);if(m||p>1&&\"string\"==typeof h&&!v.checkClone&&Ie.test(h))return e.each(function(o){var i=e.eq(o);m&&(t[0]=h.call(this,o,i.html())),He(i,t,n,r)});if(p&&(i=(o=Ce(t,e[0].ownerDocument,!1,e,r)).firstChild,1===o.childNodes.length&&(o=i),i||r)){for(s=(a=k.map(be(o,\"script\"),Fe)).length;f<p;f++)c=o,f!==d&&(c=k.clone(c,!0,!0),s&&k.merge(a,be(c,\"script\"))),n.call(e[f],c,f);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Me),f=0;f<s;f++)c=a[f],ve.test(c.type||\"\")&&!Q.access(c,\"globalEval\")&&k.contains(l,c)&&(c.src&&\"module\"!==(c.type||\"\").toLowerCase()?k._evalUrl&&!c.noModule&&k._evalUrl(c.src,{nonce:c.nonce||c.getAttribute(\"nonce\")}):w(c.textContent.replace(Pe,\"\"),c,l))}return e}function ze(e,t,n){for(var r,o=t?k.filter(t,e):e,i=0;null!=(r=o[i]);i++)n||1!==r.nodeType||k.cleanData(be(r)),r.parentNode&&(n&&se(r)&&xe(be(r,\"script\")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(Le,\"<$1></$2>\")},clone:function(e,t,n){var r,o,i,a,s,c,u,l=e.cloneNode(!0),f=se(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=be(l),r=0,o=(i=be(e)).length;r<o;r++)s=i[r],c=a[r],void 0,\"input\"===(u=c.nodeName.toLowerCase())&&me.test(s.type)?c.checked=s.checked:\"input\"!==u&&\"textarea\"!==u||(c.defaultValue=s.defaultValue);if(t)if(n)for(i=i||be(e),a=a||be(l),r=0,o=i.length;r<o;r++)qe(i[r],a[r]);else qe(e,l);return(a=be(l,\"script\")).length>0&&xe(a,!f&&be(e,\"script\")),l},cleanData:function(e){for(var t,n,r,o=k.event.special,i=0;void 0!==(n=e[i]);i++)if(Z(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)o[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[Y.expando]&&(n[Y.expando]=void 0)}}}),k.fn.extend({detach:function(e){return ze(this,e,!0)},remove:function(e){return ze(this,e)},text:function(e){return V(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(be(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return V(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!De.test(e)&&!ye[(ge.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(be(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return He(this,arguments,function(t){var n=this.parentNode;k.inArray(this,e)<0&&(k.cleanData(be(this)),n&&n.replaceChild(t,this))},e)}}),k.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){k.fn[e]=function(e){for(var n,r=[],o=k(e),i=o.length-1,a=0;a<=i;a++)n=a===i?this:this.clone(!0),k(o[a])[t](n),l.apply(r,n.get());return this.pushStack(r)}});var Be=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),Ue=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=n),t.getComputedStyle(e)},Ve=new RegExp(ie.join(\"|\"),\"i\");function We(e,t,n){var r,o,i,a,s=e.style;return(n=n||Ue(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||se(e)||(a=k.style(e,t)),!v.pixelBoxStyles()&&Be.test(a)&&Ve.test(t)&&(r=s.width,o=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=o,s.maxWidth=i)),void 0!==a?a+\"\":a}function Ke(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",l.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",ae.appendChild(u).appendChild(l);var e=n.getComputedStyle(l);r=\"1%\"!==e.top,c=12===t(e.marginLeft),l.style.right=\"60%\",s=36===t(e.right),o=36===t(e.width),l.style.position=\"absolute\",i=12===t(l.offsetWidth/3),ae.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var r,o,i,s,c,u=a.createElement(\"div\"),l=a.createElement(\"div\");l.style&&(l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",v.clearCloneStyle=\"content-box\"===l.style.backgroundClip,k.extend(v,{boxSizingReliable:function(){return e(),o},pixelBoxStyles:function(){return e(),s},pixelPosition:function(){return e(),r},reliableMarginLeft:function(){return e(),c},scrollboxSize:function(){return e(),i}}))}();var Je=[\"Webkit\",\"Moz\",\"ms\"],Xe=a.createElement(\"div\").style,Ze={};function Ge(e){var t=k.cssProps[e]||Ze[e];return t||(e in Xe?e:Ze[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Je.length;n--;)if((e=Je[n]+t)in Xe)return e}(e)||e)}var Qe=/^(none|table(?!-c[ea]).+)/,Ye=/^--/,et={position:\"absolute\",visibility:\"hidden\",display:\"block\"},tt={letterSpacing:\"0\",fontWeight:\"400\"};function nt(e,t,n){var r=oe.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function rt(e,t,n,r,o,i){var a=\"width\"===t?1:0,s=0,c=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(c+=k.css(e,n+ie[a],!0,o)),r?(\"content\"===n&&(c-=k.css(e,\"padding\"+ie[a],!0,o)),\"margin\"!==n&&(c-=k.css(e,\"border\"+ie[a]+\"Width\",!0,o))):(c+=k.css(e,\"padding\"+ie[a],!0,o),\"padding\"!==n?c+=k.css(e,\"border\"+ie[a]+\"Width\",!0,o):s+=k.css(e,\"border\"+ie[a]+\"Width\",!0,o));return!r&&i>=0&&(c+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-i-c-s-.5))||0),c}function ot(e,t,n){var r=Ue(e),o=(!v.boxSizingReliable()||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,r),i=o,a=We(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if(Be.test(a)){if(!n)return a;a=\"auto\"}return(!v.boxSizingReliable()&&o||\"auto\"===a||!parseFloat(a)&&\"inline\"===k.css(e,\"display\",!1,r))&&e.getClientRects().length&&(o=\"border-box\"===k.css(e,\"boxSizing\",!1,r),(i=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+rt(e,t,n||(o?\"border\":\"content\"),i,r,a)+\"px\"}function it(e,t,n,r,o){return new it.prototype.init(e,t,n,r,o)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,a,s=X(t),c=Ye.test(t),u=e.style;if(c||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(o=a.get(e,!1,r))?o:u[t];\"string\"===(i=typeof n)&&(o=oe.exec(n))&&o[1]&&(n=fe(e,t,o),i=\"number\"),null!=n&&n==n&&(\"number\"!==i||c||(n+=o&&o[3]||(k.cssNumber[s]?\"\":\"px\")),v.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(u[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(c?u.setProperty(t,n):u[t]=n))}},css:function(e,t,n,r){var o,i,a,s=X(t);return Ye.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&\"get\"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=We(e,t,r)),\"normal\"===o&&t in tt&&(o=tt[t]),\"\"===n||n?(i=parseFloat(o),!0===n||isFinite(i)?i||0:o):o}}),k.each([\"height\",\"width\"],function(e,t){k.cssHooks[t]={get:function(e,n,r){if(n)return!Qe.test(k.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,t,r):le(e,et,function(){return ot(e,t,r)})},set:function(e,n,r){var o,i=Ue(e),a=!v.scrollboxSize()&&\"absolute\"===i.position,s=(a||r)&&\"border-box\"===k.css(e,\"boxSizing\",!1,i),c=r?rt(e,t,r,s,i):0;return s&&a&&(c-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(i[t])-rt(e,t,\"border\",!1,i)-.5)),c&&(o=oe.exec(n))&&\"px\"!==(o[3]||\"px\")&&(e.style[t]=n,n=k.css(e,t)),nt(0,n,c)}}}),k.cssHooks.marginLeft=Ke(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,\"marginLeft\"))||e.getBoundingClientRect().left-le(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),k.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){k.cssHooks[e+t]={expand:function(n){for(var r=0,o={},i=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)o[e+ie[r]+t]=i[r]||i[r-2]||i[0];return o}},\"margin\"!==e&&(k.cssHooks[e+t].set=nt)}),k.fn.extend({css:function(e,t){return V(this,function(e,t,n){var r,o,i={},a=0;if(Array.isArray(t)){for(r=Ue(e),o=t.length;a<o;a++)i[t[a]]=k.css(e,t[a],!1,r);return i}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,arguments.length>1)}}),k.Tween=it,it.prototype={constructor:it,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(k.cssNumber[n]?\"\":\"px\")},cur:function(){var e=it.propHooks[this.prop];return e&&e.get?e.get(this):it.propHooks._default.get(this)},run:function(e){var t,n=it.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):it.propHooks._default.set(this),this}},it.prototype.init.prototype=it.prototype,it.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}},it.propHooks.scrollTop=it.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},k.fx=it.prototype.init,k.fx.step={};var at,st,ct=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){st&&(!1===a.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(lt):n.setTimeout(lt,k.fx.interval),k.fx.tick())}function ft(){return n.setTimeout(function(){at=void 0}),at=Date.now()}function pt(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)o[\"margin\"+(n=ie[r])]=o[\"padding\"+n]=e;return t&&(o.opacity=o.width=e),o}function dt(e,t,n){for(var r,o=(ht.tweeners[t]||[]).concat(ht.tweeners[\"*\"]),i=0,a=o.length;i<a;i++)if(r=o[i].call(n,t,e))return r}function ht(e,t,n){var r,o,i=0,a=ht.prefilters.length,s=k.Deferred().always(function(){delete c.elem}),c=function(){if(o)return!1;for(var t=at||ft(),n=Math.max(0,u.startTime+u.duration-t),r=1-(n/u.duration||0),i=0,a=u.tweens.length;i<a;i++)u.tweens[i].run(r);return s.notifyWith(e,[u,r,n]),r<1&&a?n:(a||s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:k.extend({},t),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},n),originalProperties:t,originalOptions:n,startTime:at||ft(),duration:n.duration,tweens:[],createTween:function(t,n){var r=k.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(o)return this;for(o=!0;n<r;n++)u.tweens[n].run(1);return t?(s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u,t])):s.rejectWith(e,[u,t]),this}}),l=u.props;for(!function(e,t){var n,r,o,i,a;for(n in e)if(o=t[r=X(n)],i=e[n],Array.isArray(i)&&(o=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),(a=k.cssHooks[r])&&\"expand\"in a)for(n in i=a.expand(i),delete e[r],i)n in e||(e[n]=i[n],t[n]=o);else t[r]=o}(l,u.opts.specialEasing);i<a;i++)if(r=ht.prefilters[i].call(u,e,l,u.opts))return y(r.stop)&&(k._queueHooks(u.elem,u.opts.queue).stop=r.stop.bind(r)),r;return k.map(l,dt,u),y(u.opts.start)&&u.opts.start.call(e,u),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always),k.fx.timer(k.extend(c,{elem:e,anim:u,queue:u.opts.queue})),u}k.Animation=k.extend(ht,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return fe(n.elem,e,oe.exec(t),n),n}]},tweener:function(e,t){y(e)?(t=e,e=[\"*\"]):e=e.match(F);for(var n,r=0,o=e.length;r<o;r++)n=e[r],ht.tweeners[n]=ht.tweeners[n]||[],ht.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,o,i,a,s,c,u,l,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,m=e.nodeType&&ue(e),g=Q.get(e,\"fxshow\");for(r in n.queue||(null==(a=k._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,\"fx\").length||a.empty.fire()})})),t)if(o=t[r],ct.test(o)){if(delete t[r],i=i||\"toggle\"===o,o===(m?\"hide\":\"show\")){if(\"show\"!==o||!g||void 0===g[r])continue;m=!0}d[r]=g&&g[r]||k.style(e,r)}if((c=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(u=g&&g.display)&&(u=Q.get(e,\"display\")),\"none\"===(l=k.css(e,\"display\"))&&(u?l=u:(he([e],!0),u=e.style.display||u,l=k.css(e,\"display\"),he([e]))),(\"inline\"===l||\"inline-block\"===l&&null!=u)&&\"none\"===k.css(e,\"float\")&&(c||(p.done(function(){h.display=u}),null==u&&(l=h.display,u=\"none\"===l?\"\":l)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),c=!1,d)c||(g?\"hidden\"in g&&(m=g.hidden):g=Q.access(e,\"fxshow\",{display:u}),i&&(g.hidden=!m),m&&he([e],!0),p.done(function(){for(r in m||he([e]),Q.remove(e,\"fxshow\"),d)k.style(e,r,d[r])})),c=dt(m?g[r]:0,r,p),r in g||(g[r]=c.start,m&&(c.end=c.start,c.start=0))}],prefilter:function(e,t){t?ht.prefilters.unshift(e):ht.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&\"object\"==typeof e?k.extend({},e):{complete:n||!n&&t||y(e)&&e,duration:e,easing:n&&t||t&&!y(t)&&t};return k.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){y(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ue).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=k.isEmptyObject(e),i=k.speed(t,n,r),a=function(){var t=ht(this,k.extend({},e),i);(o||Q.get(this,\"finish\"))&&t.stop(!0)};return a.finish=a,o||!1===i.queue?this.each(a):this.queue(i.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,o=null!=e&&e+\"queueHooks\",i=k.timers,a=Q.get(this);if(o)a[o]&&a[o].stop&&r(a[o]);else for(o in a)a[o]&&a[o].stop&&ut.test(o)&&r(a[o]);for(o=i.length;o--;)i[o].elem!==this||null!=e&&i[o].queue!==e||(i[o].anim.stop(n),t=!1,i.splice(o,1));!t&&n||k.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=Q.get(this),r=n[e+\"queue\"],o=n[e+\"queueHooks\"],i=k.timers,a=r?r.length:0;for(n.finish=!0,k.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),k.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=k.fn[t];k.fn[t]=function(e,r,o){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(pt(t,!0),e,r,o)}}),k.each({slideDown:pt(\"show\"),slideUp:pt(\"hide\"),slideToggle:pt(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){k.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(at=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),at=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){st||(st=!0,lt())},k.fx.stop=function(){st=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(e,t){return e=k.fx&&k.fx.speeds[e]||e,t=t||\"fx\",this.queue(t,function(t,r){var o=n.setTimeout(t,e);r.stop=function(){n.clearTimeout(o)}})},function(){var e=a.createElement(\"input\"),t=a.createElement(\"select\").appendChild(a.createElement(\"option\"));e.type=\"checkbox\",v.checkOn=\"\"!==e.value,v.optSelected=t.selected,(e=a.createElement(\"input\")).value=\"t\",e.type=\"radio\",v.radioValue=\"t\"===e.value}();var mt,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return V(this,k.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?k.prop(e,t,n):(1===i&&k.isXMLDoc(e)||(o=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):o&&\"get\"in o&&null!==(r=o.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&\"radio\"===t&&$(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(F);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=gt[t]||k.find.attr;gt[t]=function(e,t,r){var o,i,a=t.toLowerCase();return r||(i=gt[a],gt[a]=o,o=null!=n(e,t,r)?a:null,gt[a]=i),o}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function bt(e){return(e.match(F)||[]).join(\" \")}function xt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function wt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(F)||[]}k.fn.extend({prop:function(e,t){return V(this,k.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&k.isXMLDoc(e)||(t=k.propFix[t]||t,o=k.propHooks[t]),void 0!==n?o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&\"get\"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,\"tabindex\");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),v.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(e){var t,n,r,o,i,a,s,c=0;if(y(e))return this.each(function(t){k(this).addClass(e.call(this,t,xt(this)))});if((t=wt(e)).length)for(;n=this[c++];)if(o=xt(n),r=1===n.nodeType&&\" \"+bt(o)+\" \"){for(a=0;i=t[a++];)r.indexOf(\" \"+i+\" \")<0&&(r+=i+\" \");o!==(s=bt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,o,i,a,s,c=0;if(y(e))return this.each(function(t){k(this).removeClass(e.call(this,t,xt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((t=wt(e)).length)for(;n=this[c++];)if(o=xt(n),r=1===n.nodeType&&\" \"+bt(o)+\" \"){for(a=0;i=t[a++];)for(;r.indexOf(\" \"+i+\" \")>-1;)r=r.replace(\" \"+i+\" \",\" \");o!==(s=bt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):y(e)?this.each(function(n){k(this).toggleClass(e.call(this,n,xt(this),t),t)}):this.each(function(){var t,o,i,a;if(r)for(o=0,i=k(this),a=wt(e);t=a[o++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&\"boolean\"!==n||((t=xt(this))&&Q.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":Q.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+bt(xt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var _t=/\\r/g;k.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=y(e),this.each(function(n){var o;1===this.nodeType&&(null==(o=r?e.call(this,n,k(this).val()):e)?o=\"\":\"number\"==typeof o?o+=\"\":Array.isArray(o)&&(o=k.map(o,function(e){return null==e?\"\":e+\"\"})),(t=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,o,\"value\")||(this.value=o))})):o?(t=k.valHooks[o.type]||k.valHooks[o.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(o,\"value\"))?n:\"string\"==typeof(n=o.value)?n.replace(_t,\"\"):null==n?\"\":n:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,\"value\");return null!=t?t:bt(k.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],c=a?i+1:o.length;for(r=i<0?c:a?i:0;r<c;r++)if(((n=o[r]).selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!$(n.parentNode,\"optgroup\"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){for(var n,r,o=e.options,i=k.makeArray(t),a=o.length;a--;)((r=o[a]).selected=k.inArray(k.valHooks.option.get(r),i)>-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),k.each([\"radio\",\"checkbox\"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=k.inArray(k(e).val(),t)>-1}},v.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),v.focusin=\"onfocusin\"in n;var kt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,r,o){var i,s,c,u,l,f,p,d,m=[r||a],g=h.call(e,\"type\")?e.type:e,v=h.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(s=d=c=r=r||a,3!==r.nodeType&&8!==r.nodeType&&!kt.test(g+k.event.triggered)&&(g.indexOf(\".\")>-1&&(g=(v=g.split(\".\")).shift(),v.sort()),l=g.indexOf(\":\")<0&&\"on\"+g,(e=e[k.expando]?e:new k.Event(g,\"object\"==typeof e&&e)).isTrigger=o?2:3,e.namespace=v.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+v.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:k.makeArray(t,[e]),p=k.event.special[g]||{},o||!p.trigger||!1!==p.trigger.apply(r,t))){if(!o&&!p.noBubble&&!b(r)){for(u=p.delegateType||g,kt.test(u+g)||(s=s.parentNode);s;s=s.parentNode)m.push(s),c=s;c===(r.ownerDocument||a)&&m.push(c.defaultView||c.parentWindow||n)}for(i=0;(s=m[i++])&&!e.isPropagationStopped();)d=s,e.type=i>1?u:p.bindType||g,(f=(Q.get(s,\"events\")||{})[e.type]&&Q.get(s,\"handle\"))&&f.apply(s,t),(f=l&&s[l])&&f.apply&&Z(s)&&(e.result=f.apply(s,t),!1===e.result&&e.preventDefault());return e.type=g,o||e.isDefaultPrevented()||p._default&&!1!==p._default.apply(m.pop(),t)||!Z(r)||l&&y(r[g])&&!b(r)&&((c=r[l])&&(r[l]=null),k.event.triggered=g,e.isPropagationStopped()&&d.addEventListener(g,Ct),r[g](),e.isPropagationStopped()&&d.removeEventListener(g,Ct),k.event.triggered=void 0,c&&(r[l]=c)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),v.focusin||k.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){k.event.simulate(t,e.target,k.event.fix(e))};k.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Q.access(r,t);o||r.addEventListener(e,n,!0),Q.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Q.access(r,t)-1;o?Q.access(r,t,o):(r.removeEventListener(e,n,!0),Q.remove(r,t))}}});var At=n.location,St=Date.now(),Et=/\\?/;k.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||k.error(\"Invalid XML: \"+e),t};var Tt=/\\[\\]$/,Ot=/\\r?\\n/g,$t=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var o;if(Array.isArray(t))k.each(t,function(t,o){n||Tt.test(e)?r(e,o):jt(e+\"[\"+(\"object\"==typeof o&&null!=o?t:\"\")+\"]\",o,n,r)});else if(n||\"object\"!==_(t))r(e,t);else for(o in t)jt(e+\"[\"+o+\"]\",t[o],n,r)}k.param=function(e,t){var n,r=[],o=function(e,t){var n=y(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){o(this.name,this.value)});else for(n in e)jt(n,e[n],t,o);return r.join(\"&\")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,\"elements\");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(\":disabled\")&&Nt.test(this.nodeName)&&!$t.test(e)&&(this.checked||!me.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(Ot,\"\\r\\n\")}}):{name:t.name,value:n.replace(Ot,\"\\r\\n\")}}).get()}});var Lt=/%20/g,Dt=/#.*$/,It=/([?&])_=[^&]*/,Pt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Ft=/^\\/\\//,Mt={},qt={},Ht=\"*/\".concat(\"*\"),zt=a.createElement(\"a\");function Bt(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,o=0,i=t.toLowerCase().match(F)||[];if(y(n))for(;r=i[o++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Ut(e,t,n,r){var o={},i=e===qt;function a(s){var c;return o[s]=!0,k.each(e[s]||[],function(e,s){var u=s(t,n,r);return\"string\"!=typeof u||i||o[u]?i?!(c=u):void 0:(t.dataTypes.unshift(u),a(u),!1)}),c}return a(t.dataTypes[0])||!o[\"*\"]&&a(\"*\")}function Vt(e,t){var n,r,o=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}zt.href=At.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:At.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(At.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Ht,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Vt(Vt(e,k.ajaxSettings),t):Vt(k.ajaxSettings,e)},ajaxPrefilter:Bt(Mt),ajaxTransport:Bt(qt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var r,o,i,s,c,u,l,f,p,d,h=k.ajaxSetup({},t),m=h.context||h,g=h.context&&(m.nodeType||m.jquery)?k(m):k.event,v=k.Deferred(),y=k.Callbacks(\"once memory\"),b=h.statusCode||{},x={},w={},_=\"canceled\",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!s)for(s={};t=Pt.exec(i);)s[t[1].toLowerCase()+\" \"]=(s[t[1].toLowerCase()+\" \"]||[]).concat(t[2]);t=s[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return l?i:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,x[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||_;return r&&r.abort(t),A(0,t),this}};if(v.promise(C),h.url=((e||h.url||At.href)+\"\").replace(Ft,At.protocol+\"//\"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(F)||[\"\"],null==h.crossDomain){u=a.createElement(\"a\");try{u.href=h.url,u.href=u.href,h.crossDomain=zt.protocol+\"//\"+zt.host!=u.protocol+\"//\"+u.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=k.param(h.data,h.traditional)),Ut(Mt,h,t,C),l)return C;for(p in(f=k.event&&h.global)&&0==k.active++&&k.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Rt.test(h.type),o=h.url.replace(Dt,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(Lt,\"+\")):(d=h.url.slice(o.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(o+=(Et.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(It,\"$1\"),d=(Et.test(o)?\"&\":\"?\")+\"_=\"+St+++d),h.url=o+d),h.ifModified&&(k.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",k.lastModified[o]),k.etag[o]&&C.setRequestHeader(\"If-None-Match\",k.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&C.setRequestHeader(\"Content-Type\",h.contentType),C.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+Ht+\"; q=0.01\":\"\"):h.accepts[\"*\"]),h.headers)C.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(m,C,h)||l))return C.abort();if(_=\"abort\",y.add(h.complete),C.done(h.success),C.fail(h.error),r=Ut(qt,h,t,C)){if(C.readyState=1,f&&g.trigger(\"ajaxSend\",[C,h]),l)return C;h.async&&h.timeout>0&&(c=n.setTimeout(function(){C.abort(\"timeout\")},h.timeout));try{l=!1,r.send(x,A)}catch(e){if(l)throw e;A(-1,e)}}else A(-1,\"No Transport\");function A(e,t,a,s){var u,p,d,x,w,_=t;l||(l=!0,c&&n.clearTimeout(c),r=void 0,i=s||\"\",C.readyState=e>0?4:0,u=e>=200&&e<300||304===e,a&&(x=function(e,t,n){for(var r,o,i,a,s=e.contents,c=e.dataTypes;\"*\"===c[0];)c.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(o in s)if(s[o]&&s[o].test(r)){c.unshift(o);break}if(c[0]in n)i=c[0];else{for(o in n){if(!c[0]||e.converters[o+\" \"+c[0]]){i=o;break}a||(a=o)}i=i||a}if(i)return i!==c[0]&&c.unshift(i),n[i]}(h,C,a)),x=function(e,t,n,r){var o,i,a,s,c,u={},l=e.dataTypes.slice();if(l[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(i=l.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!c&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),c=i,i=l.shift())if(\"*\"===i)i=c;else if(\"*\"!==c&&c!==i){if(!(a=u[c+\" \"+i]||u[\"* \"+i]))for(o in u)if((s=o.split(\" \"))[1]===i&&(a=u[c+\" \"+s[0]]||u[\"* \"+s[0]])){!0===a?a=u[o]:!0!==u[o]&&(i=s[0],l.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+c+\" to \"+i}}}return{state:\"success\",data:t}}(h,x,C,u),u?(h.ifModified&&((w=C.getResponseHeader(\"Last-Modified\"))&&(k.lastModified[o]=w),(w=C.getResponseHeader(\"etag\"))&&(k.etag[o]=w)),204===e||\"HEAD\"===h.type?_=\"nocontent\":304===e?_=\"notmodified\":(_=x.state,p=x.data,u=!(d=x.error))):(d=_,!e&&_||(_=\"error\",e<0&&(e=0))),C.status=e,C.statusText=(t||_)+\"\",u?v.resolveWith(m,[p,_,C]):v.rejectWith(m,[C,_,d]),C.statusCode(b),b=void 0,f&&g.trigger(u?\"ajaxSuccess\":\"ajaxError\",[C,h,u?p:d]),y.fireWith(m,[C,_]),f&&(g.trigger(\"ajaxComplete\",[C,h]),--k.active||k.event.trigger(\"ajaxStop\")))}return C},getJSON:function(e,t,n){return k.get(e,t,n,\"json\")},getScript:function(e,t){return k.get(e,void 0,t,\"script\")}}),k.each([\"get\",\"post\"],function(e,t){k[t]=function(e,n,r,o){return y(n)&&(o=o||r,r=n,n=void 0),k.ajax(k.extend({url:e,type:t,dataType:o,data:n,success:r},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return y(e)?this.each(function(t){k(this).wrapInner(e.call(this,t))}):this.each(function(){var t=k(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=y(e);return this.each(function(n){k(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Kt=k.ajaxSettings.xhr();v.cors=!!Kt&&\"withCredentials\"in Kt,v.ajax=Kt=!!Kt,k.ajaxTransport(function(e){var t,r;if(v.cors||Kt&&!e.crossDomain)return{send:function(o,i){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||o[\"X-Requested-With\"]||(o[\"X-Requested-With\"]=\"XMLHttpRequest\"),o)s.setRequestHeader(a,o[a]);t=function(e){return function(){t&&(t=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?i(0,\"error\"):i(s.status,s.statusText):i(Wt[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),r=s.onerror=s.ontimeout=t(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout(function(){t&&r()})},t=t(\"abort\");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),k.ajaxTransport(\"script\",function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,o){t=k(\"<script>\").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),a.head.appendChild(t[0])},abort:function(){n&&n()}}});var Jt,Xt=[],Zt=/(=)\\?(?=&|$)|\\?\\?/;k.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Xt.pop()||k.expando+\"_\"+St++;return this[e]=!0,e}}),k.ajaxPrefilter(\"json jsonp\",function(e,t,r){var o,i,a,s=!1!==e.jsonp&&(Zt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Zt.test(e.data)&&\"data\");if(s||\"jsonp\"===e.dataTypes[0])return o=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Zt,\"$1\"+o):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+o),e.converters[\"script json\"]=function(){return a||k.error(o+\" was not called\"),a[0]},e.dataTypes[0]=\"json\",i=n[o],n[o]=function(){a=arguments},r.always(function(){void 0===i?k(n).removeProp(o):n[o]=i,e[o]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(o)),a&&y(i)&&i(a[0]),a=i=void 0}),\"script\"}),v.createHTMLDocument=((Jt=a.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Jt.childNodes.length),k.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=a.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=a.location.href,t.head.appendChild(r)):t=a),o=N.exec(e),i=!n&&[],o?[t.createElement(o[1])]:(o=Ce([e],t,i),i&&i.length&&k(i).remove(),k.merge([],o.childNodes)));var r,o,i},k.fn.load=function(e,t,n){var r,o,i,a=this,s=e.indexOf(\" \");return s>-1&&(r=bt(e.slice(s)),e=e.slice(0,s)),y(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(o=\"POST\"),a.length>0&&k.ajax({url:e,type:o||\"GET\",dataType:\"html\",data:t}).done(function(e){i=arguments,a.html(r?k(\"<div>\").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},k.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(e){return k.grep(k.timers,function(t){return e===t.elem}).length},k.offset={setOffset:function(e,t,n){var r,o,i,a,s,c,u=k.css(e,\"position\"),l=k(e),f={};\"static\"===u&&(e.style.position=\"relative\"),s=l.offset(),i=k.css(e,\"top\"),c=k.css(e,\"left\"),(\"absolute\"===u||\"fixed\"===u)&&(i+c).indexOf(\"auto\")>-1?(a=(r=l.position()).top,o=r.left):(a=parseFloat(i)||0,o=parseFloat(c)||0),y(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+o),\"using\"in t?t.using.call(e,f):l.css(f)}},k.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){k.offset.setOffset(this,e,t)});var t,n,r=this[0];return r?r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if(\"fixed\"===k.css(r,\"position\"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&\"static\"===k.css(e,\"position\");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((o=k(e).offset()).top+=k.css(e,\"borderTopWidth\",!0),o.left+=k.css(e,\"borderLeftWidth\",!0))}return{top:t.top-o.top-k.css(r,\"marginTop\",!0),left:t.left-o.left-k.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&\"static\"===k.css(e,\"position\");)e=e.offsetParent;return e||ae})}}),k.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;k.fn[e]=function(r){return V(this,function(e,r,o){var i;if(b(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===o)return i?i[t]:e[r];i?i.scrollTo(n?i.pageXOffset:o,n?o:i.pageYOffset):e[r]=o},e,r,arguments.length)}}),k.each([\"top\",\"left\"],function(e,t){k.cssHooks[t]=Ke(v.pixelPosition,function(e,n){if(n)return n=We(e,t),Be.test(n)?k(e).position()[t]+\"px\":n})}),k.each({Height:\"height\",Width:\"width\"},function(e,t){k.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){k.fn[r]=function(o,i){var a=arguments.length&&(n||\"boolean\"!=typeof o),s=n||(!0===o||!0===i?\"margin\":\"border\");return V(this,function(t,n,o){var i;return b(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===o?k.css(t,n,s):k.style(t,n,o,s)},t,a?o:void 0,a)}})}),k.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){k.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),k.proxy=function(e,t){var n,r,o;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),y(e))return r=c.call(arguments,2),(o=function(){return e.apply(t||this,r.concat(c.call(arguments)))}).guid=e.guid=e.guid||k.guid++,o},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=$,k.isFunction=y,k.isWindow=b,k.camelCase=X,k.type=_,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},void 0===(r=function(){return k}.apply(t,[]))||(e.exports=r);var Gt=n.jQuery,Qt=n.$;return k.noConflict=function(e){return n.$===k&&(n.$=Qt),e&&n.jQuery===k&&(n.jQuery=Gt),k},o||(n.jQuery=n.$=k),k})},function(e,t,n){e.exports=n(20)},function(e,t,n){\"use strict\";var r=n(0),o=n(3),i=n(22),a=n(10);function s(e){var t=new i(e),n=o(i.prototype.request,t);return r.extend(n,i.prototype,t),r.extend(n,t),n}var c=s(n(6));c.Axios=i,c.create=function(e){return s(a(c.defaults,e))},c.Cancel=n(11),c.CancelToken=n(34),c.isCancel=n(5),c.all=function(e){return Promise.all(e)},c.spread=n(35),e.exports=c,e.exports.default=c},function(e,t){e.exports=function(e){return null!=e&&null!=e.constructor&&\"function\"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},function(e,t,n){\"use strict\";var r=n(0),o=n(4),i=n(23),a=n(24),s=n(10);function c(e){this.defaults=e,this.interceptors={request:new i,response:new i}}c.prototype.request=function(e){\"string\"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=s(this.defaults,e)).method=e.method?e.method.toLowerCase():\"get\";var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},c.prototype.getUri=function(e){return e=s(this.defaults,e),o(e.url,e.params,e.paramsSerializer).replace(/^\\?/,\"\")},r.forEach([\"delete\",\"get\",\"head\",\"options\"],function(e){c.prototype[e]=function(t,n){return this.request(r.merge(n||{},{method:e,url:t}))}}),r.forEach([\"post\",\"put\",\"patch\"],function(e){c.prototype[e]=function(t,n,o){return this.request(r.merge(o||{},{method:e,url:t,data:n}))}}),e.exports=c},function(e,t,n){\"use strict\";var r=n(0);function o(){this.handlers=[]}o.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){r.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=o},function(e,t,n){\"use strict\";var r=n(0),o=n(25),i=n(5),a=n(6),s=n(32),c=n(33);function u(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return u(e),e.baseURL&&!s(e.url)&&(e.url=c(e.baseURL,e.url)),e.headers=e.headers||{},e.data=o(e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),r.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(t){delete e.headers[t]}),(e.adapter||a.adapter)(e).then(function(t){return u(e),t.data=o(t.data,t.headers,e.transformResponse),t},function(t){return i(t)||(u(e),t&&t.response&&(t.response.data=o(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){\"use strict\";var r=n(0);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t,n){\"use strict\";var r=n(0);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){\"use strict\";var r=n(9);e.exports=function(e,t,n){var o=n.config.validateStatus;!o||o(n.status)?e(n):t(r(\"Request failed with status code \"+n.status,n.config,null,n.request,n))}},function(e,t,n){\"use strict\";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){\"use strict\";var r=n(0),o=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];e.exports=function(e){var t,n,i,a={};return e?(r.forEach(e.split(\"\\n\"),function(e){if(i=e.indexOf(\":\"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(a[t]&&o.indexOf(t)>=0)return;a[t]=\"set-cookie\"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+\", \"+n:n}}),a):a}},function(e,t,n){\"use strict\";var r=n(0);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function o(e){var r=e;return t&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){\"use strict\";var r=n(0);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,o,i,a){var s=[];s.push(e+\"=\"+encodeURIComponent(t)),r.isNumber(n)&&s.push(\"expires=\"+new Date(n).toGMTString()),r.isString(o)&&s.push(\"path=\"+o),r.isString(i)&&s.push(\"domain=\"+i),!0===a&&s.push(\"secure\"),document.cookie=s.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,t,n){\"use strict\";e.exports=function(e){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(e)}},function(e,t,n){\"use strict\";e.exports=function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}},function(e,t,n){\"use strict\";var r=n(11);function o(e){if(\"function\"!=typeof e)throw new TypeError(\"executor must be a function.\");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new r(e),t(n.reason))})}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var e;return{token:new o(function(t){e=t}),cancel:e}},e.exports=o},function(e,t,n){\"use strict\";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t,n){(function(t){var r=\"undefined\"!=typeof window?window:\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},o=function(){var e=/\\blang(?:uage)?-([\\w-]+)\\b/i,t=0,n=r.Prism={manual:r.Prism&&r.Prism.manual,disableWorkerMessageHandler:r.Prism&&r.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof o?new o(e.type,n.util.encode(e.content),e.alias):\"Array\"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/\\u00a0/g,\" \")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,\"__id\",{value:++t}),e.__id},clone:function e(t,r){var o,i,a=n.util.type(t);switch(r=r||{},a){case\"Object\":if(i=n.util.objId(t),r[i])return r[i];for(var s in o={},r[i]=o,t)t.hasOwnProperty(s)&&(o[s]=e(t[s],r));return o;case\"Array\":return i=n.util.objId(t),r[i]?r[i]:(o=[],r[i]=o,t.forEach(function(t,n){o[n]=e(t,r)}),o);default:return t}}},languages:{extend:function(e,t){var r=n.util.clone(n.languages[e]);for(var o in t)r[o]=t[o];return r},insertBefore:function(e,t,r,o){var i=(o=o||n.languages)[e],a={};for(var s in i)if(i.hasOwnProperty(s)){if(s==t)for(var c in r)r.hasOwnProperty(c)&&(a[c]=r[c]);r.hasOwnProperty(s)||(a[s]=i[s])}var u=o[e];return o[e]=a,n.languages.DFS(n.languages,function(t,n){n===u&&t!=e&&(this[t]=a)}),a},DFS:function e(t,r,o,i){i=i||{};var a=n.util.objId;for(var s in t)if(t.hasOwnProperty(s)){r.call(t,s,t[s],o||s);var c=t[s],u=n.util.type(c);\"Object\"!==u||i[a(c)]?\"Array\"!==u||i[a(c)]||(i[a(c)]=!0,e(c,r,s,i)):(i[a(c)]=!0,e(c,r,null,i))}}},plugins:{},highlightAll:function(e,t){n.highlightAllUnder(document,e,t)},highlightAllUnder:function(e,t,r){var o={callback:r,selector:'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'};n.hooks.run(\"before-highlightall\",o);for(var i,a=o.elements||e.querySelectorAll(o.selector),s=0;i=a[s++];)n.highlightElement(i,!0===t,o.callback)},highlightElement:function(t,o,i){for(var a,s,c=t;c&&!e.test(c.className);)c=c.parentNode;c&&(a=(c.className.match(e)||[,\"\"])[1].toLowerCase(),s=n.languages[a]),t.className=t.className.replace(e,\"\").replace(/\\s+/g,\" \")+\" language-\"+a,t.parentNode&&(c=t.parentNode,/pre/i.test(c.nodeName)&&(c.className=c.className.replace(e,\"\").replace(/\\s+/g,\" \")+\" language-\"+a));var u={element:t,language:a,grammar:s,code:t.textContent},l=function(e){u.highlightedCode=e,n.hooks.run(\"before-insert\",u),u.element.innerHTML=u.highlightedCode,n.hooks.run(\"after-highlight\",u),n.hooks.run(\"complete\",u),i&&i.call(u.element)};if(n.hooks.run(\"before-sanity-check\",u),u.code)if(n.hooks.run(\"before-highlight\",u),u.grammar)if(o&&r.Worker){var f=new Worker(n.filename);f.onmessage=function(e){l(e.data)},f.postMessage(JSON.stringify({language:u.language,code:u.code,immediateClose:!0}))}else l(n.highlight(u.code,u.grammar,u.language));else l(n.util.encode(u.code));else n.hooks.run(\"complete\",u)},highlight:function(e,t,r){var i={code:e,grammar:t,language:r};return n.hooks.run(\"before-tokenize\",i),i.tokens=n.tokenize(i.code,i.grammar),n.hooks.run(\"after-tokenize\",i),o.stringify(n.util.encode(i.tokens),i.language)},matchGrammar:function(e,t,r,o,i,a,s){var c=n.Token;for(var u in r)if(r.hasOwnProperty(u)&&r[u]){if(u==s)return;var l=r[u];l=\"Array\"===n.util.type(l)?l:[l];for(var f=0;f<l.length;++f){var p=l[f],d=p.inside,h=!!p.lookbehind,m=!!p.greedy,g=0,v=p.alias;if(m&&!p.pattern.global){var y=p.pattern.toString().match(/[imuy]*$/)[0];p.pattern=RegExp(p.pattern.source,y+\"g\")}p=p.pattern||p;for(var b=o,x=i;b<t.length;x+=t[b].length,++b){var w=t[b];if(t.length>e.length)return;if(!(w instanceof c)){if(m&&b!=t.length-1){if(p.lastIndex=x,!(E=p.exec(e)))break;for(var _=E.index+(h?E[1].length:0),k=E.index+E[0].length,C=b,A=x,S=t.length;S>C&&(k>A||!t[C].type&&!t[C-1].greedy);++C)_>=(A+=t[C].length)&&(++b,x=A);if(t[b]instanceof c)continue;T=C-b,w=e.slice(x,A),E.index-=x}else{p.lastIndex=0;var E=p.exec(w),T=1}if(E){h&&(g=E[1]?E[1].length:0);k=(_=E.index+g)+(E=E[0].slice(g)).length;var O=w.slice(0,_),$=w.slice(k),N=[b,T];O&&(++b,x+=O.length,N.push(O));var j=new c(u,d?n.tokenize(E,d):E,v,E,m);if(N.push(j),$&&N.push($),Array.prototype.splice.apply(t,N),1!=T&&n.matchGrammar(e,t,r,b,x,!0,u),a)break}else if(a)break}}}}},tokenize:function(e,t){var r=[e],o=t.rest;if(o){for(var i in o)t[i]=o[i];delete t.rest}return n.matchGrammar(e,r,t,0,0,!1),r},hooks:{all:{},add:function(e,t){var r=n.hooks.all;r[e]=r[e]||[],r[e].push(t)},run:function(e,t){var r=n.hooks.all[e];if(r&&r.length)for(var o,i=0;o=r[i++];)o(t)}}},o=n.Token=function(e,t,n,r,o){this.type=e,this.content=t,this.alias=n,this.length=0|(r||\"\").length,this.greedy=!!o};if(o.stringify=function(e,t,r){if(\"string\"==typeof e)return e;if(\"Array\"===n.util.type(e))return e.map(function(n){return o.stringify(n,t,e)}).join(\"\");var i={type:e.type,content:o.stringify(e.content,t,r),tag:\"span\",classes:[\"token\",e.type],attributes:{},language:t,parent:r};if(e.alias){var a=\"Array\"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,a)}n.hooks.run(\"wrap\",i);var s=Object.keys(i.attributes).map(function(e){return e+'=\"'+(i.attributes[e]||\"\").replace(/\"/g,\"&quot;\")+'\"'}).join(\" \");return\"<\"+i.tag+' class=\"'+i.classes.join(\" \")+'\"'+(s?\" \"+s:\"\")+\">\"+i.content+\"</\"+i.tag+\">\"},!r.document)return r.addEventListener?(n.disableWorkerMessageHandler||r.addEventListener(\"message\",function(e){var t=JSON.parse(e.data),o=t.language,i=t.code,a=t.immediateClose;r.postMessage(n.highlight(i,n.languages[o],o)),a&&r.close()},!1),r.Prism):r.Prism;var i=document.currentScript||[].slice.call(document.getElementsByTagName(\"script\")).pop();return i&&(n.filename=i.src,n.manual||i.hasAttribute(\"data-manual\")||(\"loading\"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener(\"DOMContentLoaded\",n.highlightAll))),r.Prism}();void 0!==e&&e.exports&&(e.exports=o),void 0!==t&&(t.Prism=o),o.languages.markup={comment:/<!--[\\s\\S]*?-->/,prolog:/<\\?[\\s\\S]+?\\?>/,doctype:/<!DOCTYPE[\\s\\S]+?>/i,cdata:/<!\\[CDATA\\[[\\s\\S]*?]]>/i,tag:{pattern:/<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s\\/>])))+)?\\s*\\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\\/?[^\\s>\\/]+/i,inside:{punctuation:/^<\\/?/,namespace:/^[^\\s>\\/:]+:/}},\"attr-value\":{pattern:/=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\\s*)[\"']|[\"']$/,lookbehind:!0}]}},punctuation:/\\/?>/,\"attr-name\":{pattern:/[^\\s>\\/]+/,inside:{namespace:/^[^\\s>\\/:]+:/}}}},entity:/&#?[\\da-z]{1,8};/i},o.languages.markup.tag.inside[\"attr-value\"].inside.entity=o.languages.markup.entity,o.hooks.add(\"wrap\",function(e){\"entity\"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,\"&\"))}),o.languages.xml=o.languages.extend(\"markup\",{}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.css={comment:/\\/\\*[\\s\\S]*?\\*\\//,atrule:{pattern:/@[\\w-]+?[\\s\\S]*?(?:;|(?=\\s*\\{))/i,inside:{rule:/@[\\w-]+/}},url:/url\\((?:([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,selector:/[^{}\\s][^{};]*?(?=\\s*\\{)/,string:{pattern:/(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},property:/[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*(?=\\s*:)/i,important:/!important\\b/i,function:/[-a-z0-9]+(?=\\()/i,punctuation:/[(){};:,]/},o.languages.css.atrule.inside.rest=o.languages.css,o.languages.markup&&(o.languages.insertBefore(\"markup\",\"tag\",{style:{pattern:/(<style[\\s\\S]*?>)[\\s\\S]*?(?=<\\/style>)/i,lookbehind:!0,inside:o.languages.css,alias:\"language-css\",greedy:!0}}),o.languages.insertBefore(\"inside\",\"attr-value\",{\"style-attr\":{pattern:/\\s*style=(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/i,inside:{\"attr-name\":{pattern:/^\\s*style/i,inside:o.languages.markup.tag.inside},punctuation:/^\\s*=\\s*['\"]|['\"]\\s*$/,\"attr-value\":{pattern:/.+/i,inside:o.languages.css}},alias:\"language-css\"}},o.languages.markup.tag)),o.languages.clike={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},\"class-name\":{pattern:/((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[\\w.\\\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\\\]/}},keyword:/\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,boolean:/\\b(?:true|false)\\b/,function:/\\w+(?=\\()/,number:/\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,operator:/--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,punctuation:/[{}[\\];(),.:]/},o.languages.javascript=o.languages.extend(\"clike\",{\"class-name\":[o.languages.clike[\"class-name\"],{pattern:/(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\\s*)(?:catch|finally)\\b/,lookbehind:!0},/\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/],number:/\\b(?:(?:0[xX][\\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+)n?|\\d+n|NaN|Infinity)\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:[Ee][+-]?\\d+)?/,function:/[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,operator:/-[-=]?|\\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\\|[|=]?|\\*\\*?=?|\\/=?|~|\\^=?|%=?|\\?|\\.{3}/}),o.languages.javascript[\"class-name\"][0].pattern=/(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/,o.languages.insertBefore(\"javascript\",\"keyword\",{regex:{pattern:/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^\\/\\\\\\[\\r\\n])+\\/[gimyu]{0,5}(?=\\s*($|[\\r\\n,.;})\\]]))/,lookbehind:!0,greedy:!0},\"function-variable\":{pattern:/[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,alias:\"function\"},parameter:[{pattern:/(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,inside:o.languages.javascript},{pattern:/(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/}),o.languages.insertBefore(\"javascript\",\"string\",{\"template-string\":{pattern:/`(?:\\\\[\\s\\S]|\\${[^}]+}|[^\\\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\\${[^}]+}/,inside:{\"interpolation-punctuation\":{pattern:/^\\${|}$/,alias:\"punctuation\"},rest:o.languages.javascript}},string:/[\\s\\S]+/}}}),o.languages.markup&&o.languages.insertBefore(\"markup\",\"tag\",{script:{pattern:/(<script[\\s\\S]*?>)[\\s\\S]*?(?=<\\/script>)/i,lookbehind:!0,inside:o.languages.javascript,alias:\"language-javascript\",greedy:!0}}),o.languages.js=o.languages.javascript,function(){function e(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function t(e,t){return t=\" \"+t+\" \",(\" \"+e.className+\" \").replace(/[\\n\\t]/g,\" \").indexOf(t)>-1}function n(e,n,r){for(var a,s=(n=\"string\"==typeof n?n:e.getAttribute(\"data-line\")).replace(/\\s+/g,\"\").split(\",\"),c=+e.getAttribute(\"data-line-offset\")||0,u=(i()?parseInt:parseFloat)(getComputedStyle(e).lineHeight),l=t(e,\"line-numbers\"),f=0;a=s[f++];){var p=a.split(\"-\"),d=+p[0],h=+p[1]||d,m=e.querySelector('.line-highlight[data-range=\"'+a+'\"]')||document.createElement(\"div\");if(m.setAttribute(\"aria-hidden\",\"true\"),m.setAttribute(\"data-range\",a),m.className=(r||\"\")+\" line-highlight\",l&&o.plugins.lineNumbers){var g=o.plugins.lineNumbers.getLine(e,d),v=o.plugins.lineNumbers.getLine(e,h);g&&(m.style.top=g.offsetTop+\"px\"),v&&(m.style.height=v.offsetTop-g.offsetTop+v.offsetHeight+\"px\")}else m.setAttribute(\"data-start\",d),h>d&&m.setAttribute(\"data-end\",h),m.style.top=(d-c-1)*u+\"px\",m.textContent=new Array(h-d+2).join(\" \\n\");l?e.appendChild(m):(e.querySelector(\"code\")||e).appendChild(m)}}function r(){var t=location.hash.slice(1);e(\".temporary.line-highlight\").forEach(function(e){e.parentNode.removeChild(e)});var r=(t.match(/\\.([\\d,-]+)$/)||[,\"\"])[1];if(r&&!document.getElementById(t)){var o=t.slice(0,t.lastIndexOf(\".\")),i=document.getElementById(o);i&&(i.hasAttribute(\"data-line\")||i.setAttribute(\"data-line\",\"\"),n(i,r,\"temporary \"),document.querySelector(\".temporary.line-highlight\").scrollIntoView())}}if(\"undefined\"!=typeof self&&self.Prism&&self.document&&document.querySelector){var i=function(){var e;return function(){if(void 0===e){var t=document.createElement(\"div\");t.style.fontSize=\"13px\",t.style.lineHeight=\"1.5\",t.style.padding=0,t.style.border=0,t.innerHTML=\"&nbsp;<br />&nbsp;\",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}}(),a=0;o.hooks.add(\"before-sanity-check\",function(t){var n=t.element.parentNode,r=n&&n.getAttribute(\"data-line\");if(n&&r&&/pre/i.test(n.nodeName)){var o=0;e(\".line-highlight\",n).forEach(function(e){o+=e.textContent.length,e.parentNode.removeChild(e)}),o&&/^( \\n)+$/.test(t.code.slice(-o))&&(t.code=t.code.slice(0,-o))}}),o.hooks.add(\"complete\",function e(i){var s=i.element.parentNode,c=s&&s.getAttribute(\"data-line\");if(s&&c&&/pre/i.test(s.nodeName)){clearTimeout(a);var u=o.plugins.lineNumbers,l=i.plugins&&i.plugins.lineNumbers;t(s,\"line-numbers\")&&u&&!l?o.hooks.add(\"line-numbers\",e):(n(s,c),a=setTimeout(r,1))}}),window.addEventListener(\"hashchange\",r),window.addEventListener(\"resize\",function(){var e=document.querySelectorAll(\"pre[data-line]\");Array.prototype.forEach.call(e,function(e){n(e)})})}}(),function(){if(\"undefined\"!=typeof self&&self.Prism&&self.document){var e=\"line-numbers\",t=/\\n(?!$)/g,n=function(e){var n=r(e),o=n[\"white-space\"];if(\"pre-wrap\"===o||\"pre-line\"===o){var i=e.querySelector(\"code\"),a=e.querySelector(\".line-numbers-rows\"),s=e.querySelector(\".line-numbers-sizer\"),c=i.textContent.split(t);s||((s=document.createElement(\"span\")).className=\"line-numbers-sizer\",i.appendChild(s)),s.style.display=\"block\",c.forEach(function(e,t){s.textContent=e||\"\\n\";var n=s.getBoundingClientRect().height;a.children[t].style.height=n+\"px\"}),s.textContent=\"\",s.style.display=\"none\"}},r=function(e){return e?window.getComputedStyle?getComputedStyle(e):e.currentStyle||null:null};window.addEventListener(\"resize\",function(){Array.prototype.forEach.call(document.querySelectorAll(\"pre.\"+e),n)}),o.hooks.add(\"complete\",function(e){if(e.code){var r=e.element.parentNode,i=/\\s*\\bline-numbers\\b\\s*/;if(r&&/pre/i.test(r.nodeName)&&(i.test(r.className)||i.test(e.element.className))&&!e.element.querySelector(\".line-numbers-rows\")){i.test(e.element.className)&&(e.element.className=e.element.className.replace(i,\" \")),i.test(r.className)||(r.className+=\" line-numbers\");var a,s=e.code.match(t),c=s?s.length+1:1,u=new Array(c+1);u=u.join(\"<span></span>\"),(a=document.createElement(\"span\")).setAttribute(\"aria-hidden\",\"true\"),a.className=\"line-numbers-rows\",a.innerHTML=u,r.hasAttribute(\"data-start\")&&(r.style.counterReset=\"linenumber \"+(parseInt(r.getAttribute(\"data-start\"),10)-1)),e.element.appendChild(a),n(r),o.hooks.run(\"line-numbers\",e)}}}),o.hooks.add(\"line-numbers\",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}),o.plugins.lineNumbers={getLine:function(t,n){if(\"PRE\"===t.tagName&&t.classList.contains(e)){var r=t.querySelector(\".line-numbers-rows\"),o=parseInt(t.getAttribute(\"data-start\"),10)||1,i=o+(r.children.length-1);o>n&&(n=o),n>i&&(n=i);var a=n-o;return r.children[a]}}}}}(),function(){if(\"undefined\"!=typeof self&&self.Prism&&self.document){var e=[],t={},n=function(){};o.plugins.toolbar={};var r=o.plugins.toolbar.registerButton=function(n,r){var o;o=\"function\"==typeof r?r:function(e){var t;return\"function\"==typeof r.onClick?((t=document.createElement(\"button\")).type=\"button\",t.addEventListener(\"click\",function(){r.onClick.call(this,e)})):\"string\"==typeof r.url?(t=document.createElement(\"a\")).href=r.url:t=document.createElement(\"span\"),t.textContent=r.text,t},e.push(t[n]=o)},i=o.plugins.toolbar.hook=function(r){var o=r.element.parentNode;if(o&&/pre/i.test(o.nodeName)&&!o.parentNode.classList.contains(\"code-toolbar\")){var i=document.createElement(\"div\");i.classList.add(\"code-toolbar\"),o.parentNode.insertBefore(i,o),i.appendChild(o);var a=document.createElement(\"div\");a.classList.add(\"toolbar\"),document.body.hasAttribute(\"data-toolbar-order\")&&(e=document.body.getAttribute(\"data-toolbar-order\").split(\",\").map(function(e){return t[e]||n})),e.forEach(function(e){var t=e(r);if(t){var n=document.createElement(\"div\");n.classList.add(\"toolbar-item\"),n.appendChild(t),a.appendChild(n)}}),i.appendChild(a)}};r(\"label\",function(e){var t=e.element.parentNode;if(t&&/pre/i.test(t.nodeName)&&t.hasAttribute(\"data-label\")){var n,r,o=t.getAttribute(\"data-label\");try{r=document.querySelector(\"template#\"+o)}catch(e){}return r?n=r.content:(t.hasAttribute(\"data-url\")?(n=document.createElement(\"a\")).href=t.getAttribute(\"data-url\"):n=document.createElement(\"span\"),n.textContent=o),n}}),o.hooks.add(\"complete\",i)}}(),function(){if(\"undefined\"!=typeof self&&self.Prism&&self.document&&document.createElement){var e={javascript:\"clike\",actionscript:\"javascript\",arduino:\"cpp\",aspnet:[\"markup\",\"csharp\"],bison:\"c\",c:\"clike\",csharp:\"clike\",cpp:\"c\",coffeescript:\"javascript\",crystal:\"ruby\",\"css-extras\":\"css\",d:\"clike\",dart:\"clike\",django:\"markup\",erb:[\"ruby\",\"markup-templating\"],fsharp:\"clike\",flow:\"javascript\",glsl:\"clike\",gml:\"clike\",go:\"clike\",groovy:\"clike\",haml:\"ruby\",handlebars:\"markup-templating\",haxe:\"clike\",java:\"clike\",javadoc:[\"markup\",\"java\",\"javadoclike\"],jolie:\"clike\",jsdoc:[\"javascript\",\"javadoclike\"],\"js-extras\":\"javascript\",jsonp:\"json\",json5:\"json\",kotlin:\"clike\",less:\"css\",markdown:\"markup\",\"markup-templating\":\"markup\",n4js:\"javascript\",nginx:\"clike\",objectivec:\"c\",opencl:\"cpp\",parser:\"markup\",php:[\"clike\",\"markup-templating\"],phpdoc:[\"php\",\"javadoclike\"],\"php-extras\":\"php\",plsql:\"sql\",processing:\"clike\",protobuf:\"clike\",pug:\"javascript\",qore:\"clike\",jsx:[\"markup\",\"javascript\"],tsx:[\"jsx\",\"typescript\"],reason:\"clike\",ruby:\"clike\",sass:\"css\",scss:\"css\",scala:\"java\",smarty:\"markup-templating\",soy:\"markup-templating\",swift:\"clike\",tap:\"yaml\",textile:\"markup\",tt2:[\"clike\",\"markup-templating\"],twig:\"markup\",typescript:\"javascript\",vala:\"clike\",vbnet:\"basic\",velocity:\"markup\",wiki:\"markup\",xeora:\"markup\",xquery:\"markup\"},t={},n=document.getElementsByTagName(\"script\"),r=\"components/\";if((n=n[n.length-1]).hasAttribute(\"data-autoloader-path\")){var i=n.getAttribute(\"data-autoloader-path\").trim();i.length>0&&!/^[a-z]+:\\/\\//i.test(n.src)&&(r=i.replace(/\\/?$/,\"/\"))}else/[\\w-]+\\.js$/.test(n.src)&&(r=n.src.replace(/[\\w-]+\\.js$/,\"components/\"));var a=o.plugins.autoloader={languages_path:r,use_minified:!0},s=function(e){return a.languages_path+\"prism-\"+e+(a.use_minified?\".min\":\"\")+\".js\"},c=function(e,t,n){\"string\"==typeof e&&(e=[e]);var r=0,o=e.length;!function i(){o>r?u(e[r],function(){r++,i()},function(){n&&n(e[r])}):r===o&&t&&t(e)}()},u=function(n,r,i){var a=function(){var e=!1;n.indexOf(\"!\")>=0&&(e=!0,n=n.replace(\"!\",\"\"));var a=t[n];if(a||(a=t[n]={}),r&&(a.success_callbacks||(a.success_callbacks=[]),a.success_callbacks.push(r)),i&&(a.error_callbacks||(a.error_callbacks=[]),a.error_callbacks.push(i)),!e&&o.languages[n])l(n);else if(!e&&a.error)f(n);else if(e||!a.loading){a.loading=!0,function(e,t,n){var r=document.createElement(\"script\");r.src=e,r.async=!0,r.onload=function(){document.body.removeChild(r),t&&t()},r.onerror=function(){document.body.removeChild(r),n&&n()},document.body.appendChild(r)}(s(n),function(){a.loading=!1,l(n)},function(){a.loading=!1,a.error=!0,f(n)})}},u=e[n];u&&u.length?c(u,a):a()},l=function(e){t[e]&&t[e].success_callbacks&&t[e].success_callbacks.length&&t[e].success_callbacks.forEach(function(t){t(e)})},f=function(e){t[e]&&t[e].error_callbacks&&t[e].error_callbacks.length&&t[e].error_callbacks.forEach(function(t){t(e)})};o.hooks.add(\"complete\",function(e){e.element&&e.language&&!e.grammar&&\"none\"!==e.language&&function(e,n){var r=t[e];r||(r=t[e]={});var i=n.getAttribute(\"data-dependencies\");!i&&n.parentNode&&\"pre\"===n.parentNode.tagName.toLowerCase()&&(i=n.parentNode.getAttribute(\"data-dependencies\")),i=i?i.split(/\\s*,\\s*/g):[],c(i,function(){u(e,function(){o.highlightElement(n)})})}(e.language,e.element)})}}(),function(){if(\"undefined\"!=typeof self&&self.Prism&&self.document){if(!o.plugins.toolbar)return void console.warn(\"Copy to Clipboard plugin loaded before Toolbar plugin.\");var e=window.ClipboardJS||void 0;e||(e=n(37));var t=[];if(!e){var r=document.createElement(\"script\"),i=document.querySelector(\"head\");r.onload=function(){if(e=window.ClipboardJS)for(;t.length;)t.pop()()},r.src=\"https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js\",i.appendChild(r)}o.plugins.toolbar.registerButton(\"copy-to-clipboard\",function(n){function r(){var t=new e(i,{text:function(){return n.code}});t.on(\"success\",function(){i.textContent=\"Copied!\",o()}),t.on(\"error\",function(){i.textContent=\"Press Ctrl+C to copy\",o()})}function o(){setTimeout(function(){i.textContent=\"Copy\"},5e3)}var i=document.createElement(\"a\");return i.textContent=\"Copy\",e?r():t.push(r),i})}}()}).call(t,n(2))},function(e,t,n){var r;r=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=0)}([function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=c(n(1)),a=c(n(3)),s=c(n(4));function c(e){return e&&e.__esModule?e:{default:e}}var u=function(e){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.resolveOptions(n),r.listenClick(e),r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,a.default),o(t,[{key:\"resolveOptions\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=\"function\"==typeof e.action?e.action:this.defaultAction,this.target=\"function\"==typeof e.target?e.target:this.defaultTarget,this.text=\"function\"==typeof e.text?e.text:this.defaultText,this.container=\"object\"===r(e.container)?e.container:document.body}},{key:\"listenClick\",value:function(e){var t=this;this.listener=(0,s.default)(e,\"click\",function(e){return t.onClick(e)})}},{key:\"onClick\",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new i.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:\"defaultAction\",value:function(e){return l(\"action\",e)}},{key:\"defaultTarget\",value:function(e){var t=l(\"target\",e);if(t)return document.querySelector(t)}},{key:\"defaultText\",value:function(e){return l(\"text\",e)}},{key:\"destroy\",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:\"isSupported\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[\"copy\",\"cut\"],t=\"string\"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),t}();function l(e,t){var n=\"data-clipboard-\"+e;if(t.hasAttribute(n))return t.getAttribute(n)}e.exports=u},function(e,t,n){\"use strict\";var r,o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(2),s=(r=a)&&r.__esModule?r:{default:r};var c=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.resolveOptions(t),this.initSelection()}return i(e,[{key:\"resolveOptions\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=\"\"}},{key:\"initSelection\",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:\"selectFake\",value:function(){var e=this,t=\"rtl\"==document.documentElement.getAttribute(\"dir\");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener(\"click\",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement(\"textarea\"),this.fakeElem.style.fontSize=\"12pt\",this.fakeElem.style.border=\"0\",this.fakeElem.style.padding=\"0\",this.fakeElem.style.margin=\"0\",this.fakeElem.style.position=\"absolute\",this.fakeElem.style[t?\"right\":\"left\"]=\"-9999px\";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+\"px\",this.fakeElem.setAttribute(\"readonly\",\"\"),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:\"removeFake\",value:function(){this.fakeHandler&&(this.container.removeEventListener(\"click\",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:\"selectTarget\",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:\"copyText\",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:\"handleResult\",value:function(e){this.emitter.emit(e?\"success\":\"error\",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:\"clearSelection\",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:\"destroy\",value:function(){this.removeFake()}},{key:\"action\",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"copy\";if(this._action=e,\"copy\"!==this._action&&\"cut\"!==this._action)throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"')},get:function(){return this._action}},{key:\"target\",set:function(e){if(void 0!==e){if(!e||\"object\"!==(void 0===e?\"undefined\":o(e))||1!==e.nodeType)throw new Error('Invalid \"target\" value, use a valid Element');if(\"copy\"===this.action&&e.hasAttribute(\"disabled\"))throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');if(\"cut\"===this.action&&(e.hasAttribute(\"readonly\")||e.hasAttribute(\"disabled\")))throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=c},function(e,t){e.exports=function(e){var t;if(\"SELECT\"===e.nodeName)e.focus(),t=e.value;else if(\"INPUT\"===e.nodeName||\"TEXTAREA\"===e.nodeName){var n=e.hasAttribute(\"readonly\");n||e.setAttribute(\"readonly\",\"\"),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute(\"readonly\"),t=e.value}else{e.hasAttribute(\"contenteditable\")&&e.focus();var r=window.getSelection(),o=document.createRange();o.selectNodeContents(e),r.removeAllRanges(),r.addRange(o),t=r.toString()}return t}},function(e,t){function n(){}n.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var r=this;function o(){r.off(e,o),t.apply(n,arguments)}return o._=t,this.on(e,o,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,o=n.length;r<o;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],o=[];if(r&&t)for(var i=0,a=r.length;i<a;i++)r[i].fn!==t&&r[i].fn._!==t&&o.push(r[i]);return o.length?n[e]=o:delete n[e],this}},e.exports=n},function(e,t,n){var r=n(5),o=n(6);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error(\"Missing required arguments\");if(!r.string(t))throw new TypeError(\"Second argument must be a String\");if(!r.fn(n))throw new TypeError(\"Third argument must be a Function\");if(r.node(e))return function(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}(e,t,n);if(r.nodeList(e))return function(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}(e,t,n);if(r.string(e))return function(e,t,n){return o(document.body,e,t,n)}(e,t,n);throw new TypeError(\"First argument must be a String, HTMLElement, HTMLCollection, or NodeList\")}},function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&(\"[object NodeList]\"===n||\"[object HTMLCollection]\"===n)&&\"length\"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return\"string\"==typeof e||e instanceof String},t.fn=function(e){return\"[object Function]\"===Object.prototype.toString.call(e)}},function(e,t,n){var r=n(7);function o(e,t,n,o,i){var a=function(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}.apply(this,arguments);return e.addEventListener(n,a,i),{destroy:function(){e.removeEventListener(n,a,i)}}}e.exports=function(e,t,n,r,i){return\"function\"==typeof e.addEventListener?o.apply(null,arguments):\"function\"==typeof n?o.bind(null,document).apply(null,arguments):(\"string\"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,function(e){return o(e,t,n,r,i)}))}},function(e,t){var n=9;if(\"undefined\"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}e.exports=function(e,t){for(;e&&e.nodeType!==n;){if(\"function\"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}}])},e.exports=r()},function(e,t,n){var r=n(39);\"string\"==typeof r&&(r=[[e.i,r,\"\"]]);var o={transform:void 0};n(14)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){var r=n(40);(e.exports=n(12)(!1)).push([e.i,\"@font-face{font-family:NucleoIcons;src:url(\"+r(n(13))+\");src:url(\"+r(n(13))+') format(\"embedded-opentype\"),url('+r(n(41))+') format(\"woff2\"),url('+r(n(42))+') format(\"woff\"),url('+r(n(43))+') format(\"truetype\"),url('+r(n(44))+') format(\"svg\");font-weight:400;font-style:normal}.ni{display:inline-block;font:normal normal normal 14px/1 NucleoIcons;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ni-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.ni-2x{font-size:2em}.ni-3x{font-size:3em}.ni-4x{font-size:4em}.ni-5x{font-size:5em}.ni.circle,.ni.square{padding:.33333333em;vertical-align:-16%;background-color:#eee}.ni.circle{border-radius:50%}.ni-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.ni-ul>li{position:relative}.ni-ul>li>.ni{position:absolute;left:-1.57142857em;top:.14285714em;text-align:center}.ni-ul>li>.ni.lg{top:0;left:-1.35714286em}.ni-ul>li>.ni.circle,.ni-ul>li>.ni.square{top:-.19047619em;left:-1.9047619em}.ni.spin{-webkit-animation:nc-spin 2s infinite linear;-moz-animation:nc-spin 2s infinite linear;animation:nc-spin 2s infinite linear}@-webkit-keyframes nc-spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@-moz-keyframes nc-spin{0%{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(1turn)}}@keyframes nc-spin{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}.ni.rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.ni.rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.ni.rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.ni.flip-y{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.ni.flip-x{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scaleY(-1);-moz-transform:scaleY(-1);-ms-transform:scaleY(-1);-o-transform:scaleY(-1);transform:scaleY(-1)}.ni-active-40:before{content:\"\\\\EA02\"}.ni-air-baloon:before{content:\"\\\\EA03\"}.ni-album-2:before{content:\"\\\\EA04\"}.ni-align-center:before{content:\"\\\\EA05\"}.ni-align-left-2:before{content:\"\\\\EA06\"}.ni-ambulance:before{content:\"\\\\EA07\"}.ni-app:before{content:\"\\\\EA08\"}.ni-archive-2:before{content:\"\\\\EA09\"}.ni-atom:before{content:\"\\\\EA0A\"}.ni-badge:before{content:\"\\\\EA0B\"}.ni-bag-17:before{content:\"\\\\EA0C\"}.ni-basket:before{content:\"\\\\EA0D\"}.ni-bell-55:before{content:\"\\\\EA0E\"}.ni-bold-down:before{content:\"\\\\EA0F\"}.ni-bold-left:before{content:\"\\\\EA10\"}.ni-bold-right:before{content:\"\\\\EA11\"}.ni-bold-up:before{content:\"\\\\EA12\"}.ni-bold:before{content:\"\\\\EA13\"}.ni-book-bookmark:before{content:\"\\\\EA14\"}.ni-books:before{content:\"\\\\EA15\"}.ni-box-2:before{content:\"\\\\EA16\"}.ni-briefcase-24:before{content:\"\\\\EA17\"}.ni-building:before{content:\"\\\\EA18\"}.ni-bulb-61:before{content:\"\\\\EA19\"}.ni-bullet-list-67:before{content:\"\\\\EA1A\"}.ni-bus-front-12:before{content:\"\\\\EA1B\"}.ni-button-pause:before{content:\"\\\\EA1C\"}.ni-button-play:before{content:\"\\\\EA1D\"}.ni-button-power:before{content:\"\\\\EA1E\"}.ni-calendar-grid-58:before{content:\"\\\\EA1F\"}.ni-camera-compact:before{content:\"\\\\EA20\"}.ni-caps-small:before{content:\"\\\\EA21\"}.ni-cart:before{content:\"\\\\EA22\"}.ni-chart-bar-32:before{content:\"\\\\EA23\"}.ni-chart-pie-35:before{content:\"\\\\EA24\"}.ni-chat-round:before{content:\"\\\\EA25\"}.ni-check-bold:before{content:\"\\\\EA26\"}.ni-circle-08:before{content:\"\\\\EA27\"}.ni-cloud-download-95:before{content:\"\\\\EA28\"}.ni-cloud-upload-96:before{content:\"\\\\EA29\"}.ni-compass-04:before{content:\"\\\\EA2A\"}.ni-controller:before{content:\"\\\\EA2B\"}.ni-credit-card:before{content:\"\\\\EA2C\"}.ni-curved-next:before{content:\"\\\\EA2D\"}.ni-delivery-fast:before{content:\"\\\\EA2E\"}.ni-diamond:before{content:\"\\\\EA2F\"}.ni-email-83:before{content:\"\\\\EA30\"}.ni-fat-add:before{content:\"\\\\EA31\"}.ni-fat-delete:before{content:\"\\\\EA32\"}.ni-fat-remove:before{content:\"\\\\EA33\"}.ni-favourite-28:before{content:\"\\\\EA34\"}.ni-folder-17:before{content:\"\\\\EA35\"}.ni-glasses-2:before{content:\"\\\\EA36\"}.ni-hat-3:before{content:\"\\\\EA37\"}.ni-headphones:before{content:\"\\\\EA38\"}.ni-html5:before{content:\"\\\\EA39\"}.ni-istanbul:before{content:\"\\\\EA3A\"}.ni-key-25:before{content:\"\\\\EA3B\"}.ni-laptop:before{content:\"\\\\EA3C\"}.ni-like-2:before{content:\"\\\\EA3D\"}.ni-lock-circle-open:before{content:\"\\\\EA3E\"}.ni-map-big:before{content:\"\\\\EA3F\"}.ni-mobile-button:before{content:\"\\\\EA40\"}.ni-money-coins:before{content:\"\\\\EA41\"}.ni-note-03:before{content:\"\\\\EA42\"}.ni-notification-70:before{content:\"\\\\EA43\"}.ni-palette:before{content:\"\\\\EA44\"}.ni-paper-diploma:before{content:\"\\\\EA45\"}.ni-pin-3:before{content:\"\\\\EA46\"}.ni-planet:before{content:\"\\\\EA47\"}.ni-ruler-pencil:before{content:\"\\\\EA48\"}.ni-satisfied:before{content:\"\\\\EA49\"}.ni-scissors:before{content:\"\\\\EA4A\"}.ni-send:before{content:\"\\\\EA4B\"}.ni-settings-gear-65:before{content:\"\\\\EA4C\"}.ni-settings:before{content:\"\\\\EA4D\"}.ni-single-02:before{content:\"\\\\EA4E\"}.ni-single-copy-04:before{content:\"\\\\EA4F\"}.ni-sound-wave:before{content:\"\\\\EA50\"}.ni-spaceship:before{content:\"\\\\EA51\"}.ni-square-pin:before{content:\"\\\\EA52\"}.ni-support-16:before{content:\"\\\\EA53\"}.ni-tablet-button:before{content:\"\\\\EA54\"}.ni-tag:before{content:\"\\\\EA55\"}.ni-tie-bow:before{content:\"\\\\EA56\"}.ni-time-alarm:before{content:\"\\\\EA57\"}.ni-trophy:before{content:\"\\\\EA58\"}.ni-tv-2:before{content:\"\\\\EA59\"}.ni-umbrella-13:before{content:\"\\\\EA5A\"}.ni-user-run:before{content:\"\\\\EA5B\"}.ni-vector:before{content:\"\\\\EA5C\"}.ni-watch-time:before{content:\"\\\\EA5D\"}.ni-world:before{content:\"\\\\EA5E\"}.ni-zoom-split-in:before{content:\"\\\\EA5F\"}.ni-collection:before{content:\"\\\\EA60\"}.ni-image:before{content:\"\\\\EA61\"}.ni-shop:before{content:\"\\\\EA62\"}.ni-ungroup:before{content:\"\\\\EA63\"}.ni-world-2:before{content:\"\\\\EA64\"}.ni-ui-04:before{content:\"\\\\EA65\"}',\"\"])},function(e,t){e.exports=function(e){return\"string\"!=typeof e?e:(/^['\"].*['\"]$/.test(e)&&(e=e.slice(1,-1)),/[\"'() \\t\\n]/.test(e)?'\"'+e.replace(/\"/g,'\\\\\"').replace(/\\n/g,\"\\\\n\")+'\"':e)}},function(e,t){e.exports=\"/fonts/nucleo-icons.woff2?426439788ec5ba772cdf94057f6f4659\"},function(e,t){e.exports=\"/fonts/nucleo-icons.woff?2569aaea6eaaf8cd210db7f2fa016743\"},function(e,t){e.exports=\"/fonts/nucleo-icons.ttf?f82ec6ba2dc4181db2af35c499462840\"},function(e,t){e.exports=\"/fonts/nucleo-icons.svg?0b8a30b10cbe7708d5f3a4b007c1d665\"},function(e,t){e.exports=function(e){var t=\"undefined\"!=typeof window&&window.location;if(!t)throw new Error(\"fixUrls requires window.location\");if(!e||\"string\"!=typeof e)return e;var n=t.protocol+\"//\"+t.host,r=n+t.pathname.replace(/\\/[^\\/]*$/,\"/\");return e.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi,function(e,t){var o,i=t.trim().replace(/^\"(.*)\"$/,function(e,t){return t}).replace(/^'(.*)'$/,function(e,t){return t});return/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(i)?e:(o=0===i.indexOf(\"//\")?i:0===i.indexOf(\"/\")?n+i:r+i.replace(/^\\.\\//,\"\"),\"url(\"+JSON.stringify(o)+\")\")})}},function(e,t,n){e.exports=n(47)},function(e,t,n){\"use strict\";(function(t,n){var r=Object.freeze({});function o(e){return null==e}function i(e){return null!=e}function a(e){return!0===e}function s(e){return\"string\"==typeof e||\"number\"==typeof e||\"symbol\"==typeof e||\"boolean\"==typeof e}function c(e){return null!==e&&\"object\"==typeof e}var u=Object.prototype.toString;function l(e){return\"[object Object]\"===u.call(e)}function f(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function p(e){return i(e)&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}function d(e){return null==e?\"\":Array.isArray(e)||l(e)&&e.toString===u?JSON.stringify(e,null,2):String(e)}function h(e){var t=parseFloat(e);return isNaN(t)?e:t}function m(e,t){for(var n=Object.create(null),r=e.split(\",\"),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var g=m(\"slot,component\",!0),v=m(\"key,ref,slot,slot-scope,is\");function y(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function x(e,t){return b.call(e,t)}function w(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\\w)/g,k=w(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():\"\"})}),C=w(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),A=/\\B([A-Z])/g,S=w(function(e){return e.replace(A,\"-$1\").toLowerCase()}),E=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function T(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function O(e,t){for(var n in t)e[n]=t[n];return e}function $(e){for(var t={},n=0;n<e.length;n++)e[n]&&O(t,e[n]);return t}function N(e,t,n){}var j=function(e,t,n){return!1},L=function(e){return e};function D(e,t){if(e===t)return!0;var n=c(e),r=c(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var o=Array.isArray(e),i=Array.isArray(t);if(o&&i)return e.length===t.length&&e.every(function(e,n){return D(e,t[n])});if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(o||i)return!1;var a=Object.keys(e),s=Object.keys(t);return a.length===s.length&&a.every(function(n){return D(e[n],t[n])})}catch(e){return!1}}function I(e,t){for(var n=0;n<e.length;n++)if(D(e[n],t))return n;return-1}function P(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var R=\"data-server-rendered\",F=[\"component\",\"directive\",\"filter\"],M=[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\",\"errorCaptured\",\"serverPrefetch\"],q={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:j,isReservedAttr:j,isUnknownElement:j,getTagNamespace:N,parsePlatformTagName:L,mustUseProp:j,async:!0,_lifecycleHooks:M},H=/a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;function z(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var B,U=new RegExp(\"[^\"+H.source+\".$_\\\\d]\"),V=\"__proto__\"in{},W=\"undefined\"!=typeof window,K=\"undefined\"!=typeof WXEnvironment&&!!WXEnvironment.platform,J=K&&WXEnvironment.platform.toLowerCase(),X=W&&window.navigator.userAgent.toLowerCase(),Z=X&&/msie|trident/.test(X),G=X&&X.indexOf(\"msie 9.0\")>0,Q=X&&X.indexOf(\"edge/\")>0,Y=(X&&X.indexOf(\"android\"),X&&/iphone|ipad|ipod|ios/.test(X)||\"ios\"===J),ee=(X&&/chrome\\/\\d+/.test(X),X&&/phantomjs/.test(X),X&&X.match(/firefox\\/(\\d+)/)),te={}.watch,ne=!1;if(W)try{var re={};Object.defineProperty(re,\"passive\",{get:function(){ne=!0}}),window.addEventListener(\"test-passive\",null,re)}catch(r){}var oe=function(){return void 0===B&&(B=!W&&!K&&void 0!==t&&t.process&&\"server\"===t.process.env.VUE_ENV),B},ie=W&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ae(e){return\"function\"==typeof e&&/native code/.test(e.toString())}var se,ce=\"undefined\"!=typeof Symbol&&ae(Symbol)&&\"undefined\"!=typeof Reflect&&ae(Reflect.ownKeys);se=\"undefined\"!=typeof Set&&ae(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ue=N,le=0,fe=function(){this.id=le++,this.subs=[]};fe.prototype.addSub=function(e){this.subs.push(e)},fe.prototype.removeSub=function(e){y(this.subs,e)},fe.prototype.depend=function(){fe.target&&fe.target.addDep(this)},fe.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},fe.target=null;var pe=[];function de(e){pe.push(e),fe.target=e}function he(){pe.pop(),fe.target=pe[pe.length-1]}var me=function(e,t,n,r,o,i,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},ge={child:{configurable:!0}};ge.child.get=function(){return this.componentInstance},Object.defineProperties(me.prototype,ge);var ve=function(e){void 0===e&&(e=\"\");var t=new me;return t.text=e,t.isComment=!0,t};function ye(e){return new me(void 0,void 0,void 0,String(e))}function be(e){var t=new me(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var xe=Array.prototype,we=Object.create(xe);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(e){var t=xe[e];z(we,e,function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o,i=t.apply(this,n),a=this.__ob__;switch(e){case\"push\":case\"unshift\":o=n;break;case\"splice\":o=n.slice(2)}return o&&a.observeArray(o),a.dep.notify(),i})});var _e=Object.getOwnPropertyNames(we),ke=!0;function Ce(e){ke=e}var Ae=function(e){var t;this.value=e,this.dep=new fe,this.vmCount=0,z(e,\"__ob__\",this),Array.isArray(e)?(V?(t=we,e.__proto__=t):function(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];z(e,i,t[i])}}(e,we,_e),this.observeArray(e)):this.walk(e)};function Se(e,t){var n;if(c(e)&&!(e instanceof me))return x(e,\"__ob__\")&&e.__ob__ instanceof Ae?n=e.__ob__:ke&&!oe()&&(Array.isArray(e)||l(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Ae(e)),t&&n&&n.vmCount++,n}function Ee(e,t,n,r,o){var i=new fe,a=Object.getOwnPropertyDescriptor(e,t);if(!a||!1!==a.configurable){var s=a&&a.get,c=a&&a.set;s&&!c||2!==arguments.length||(n=e[t]);var u=!o&&Se(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=s?s.call(e):n;return fe.target&&(i.depend(),u&&(u.dep.depend(),Array.isArray(t)&&function e(t){for(var n=void 0,r=0,o=t.length;r<o;r++)(n=t[r])&&n.__ob__&&n.__ob__.dep.depend(),Array.isArray(n)&&e(n)}(t))),t},set:function(t){var r=s?s.call(e):n;t===r||t!=t&&r!=r||s&&!c||(c?c.call(e,t):n=t,u=!o&&Se(t),i.notify())}})}}function Te(e,t,n){if(Array.isArray(e)&&f(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(t in e&&!(t in Object.prototype))return e[t]=n,n;var r=e.__ob__;return e._isVue||r&&r.vmCount?n:r?(Ee(r.value,t,n),r.dep.notify(),n):(e[t]=n,n)}function Oe(e,t){if(Array.isArray(e)&&f(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount||x(e,t)&&(delete e[t],n&&n.dep.notify())}}Ae.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)Ee(e,t[n])},Ae.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Se(e[t])};var $e=q.optionMergeStrategies;function Ne(e,t){if(!t)return e;for(var n,r,o,i=ce?Reflect.ownKeys(t):Object.keys(t),a=0;a<i.length;a++)\"__ob__\"!==(n=i[a])&&(r=e[n],o=t[n],x(e,n)?r!==o&&l(r)&&l(o)&&Ne(r,o):Te(e,n,o));return e}function je(e,t,n){return n?function(){var r=\"function\"==typeof t?t.call(n,n):t,o=\"function\"==typeof e?e.call(n,n):e;return r?Ne(r,o):o}:t?e?function(){return Ne(\"function\"==typeof t?t.call(this,this):t,\"function\"==typeof e?e.call(this,this):e)}:t:e}function Le(e,t){var n=t?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n?function(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}function De(e,t,n,r){var o=Object.create(e||null);return t?O(o,t):o}$e.data=function(e,t,n){return n?je(e,t,n):t&&\"function\"!=typeof t?e:je(e,t)},M.forEach(function(e){$e[e]=Le}),F.forEach(function(e){$e[e+\"s\"]=De}),$e.watch=function(e,t,n,r){if(e===te&&(e=void 0),t===te&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var o={};for(var i in O(o,e),t){var a=o[i],s=t[i];a&&!Array.isArray(a)&&(a=[a]),o[i]=a?a.concat(s):Array.isArray(s)?s:[s]}return o},$e.props=$e.methods=$e.inject=$e.computed=function(e,t,n,r){if(!e)return t;var o=Object.create(null);return O(o,e),t&&O(o,t),o},$e.provide=je;var Ie=function(e,t){return void 0===t?e:t};function Pe(e,t,n){if(\"function\"==typeof t&&(t=t.options),function(e,t){var n=e.props;if(n){var r,o,i={};if(Array.isArray(n))for(r=n.length;r--;)\"string\"==typeof(o=n[r])&&(i[k(o)]={type:null});else if(l(n))for(var a in n)o=n[a],i[k(a)]=l(o)?o:{type:o};e.props=i}}(t),function(e,t){var n=e.inject;if(n){var r=e.inject={};if(Array.isArray(n))for(var o=0;o<n.length;o++)r[n[o]]={from:n[o]};else if(l(n))for(var i in n){var a=n[i];r[i]=l(a)?O({from:i},a):{from:a}}}}(t),function(e){var t=e.directives;if(t)for(var n in t){var r=t[n];\"function\"==typeof r&&(t[n]={bind:r,update:r})}}(t),!t._base&&(t.extends&&(e=Pe(e,t.extends,n)),t.mixins))for(var r=0,o=t.mixins.length;r<o;r++)e=Pe(e,t.mixins[r],n);var i,a={};for(i in e)s(i);for(i in t)x(e,i)||s(i);function s(r){var o=$e[r]||Ie;a[r]=o(e[r],t[r],n,r)}return a}function Re(e,t,n,r){if(\"string\"==typeof n){var o=e[t];if(x(o,n))return o[n];var i=k(n);if(x(o,i))return o[i];var a=C(i);return x(o,a)?o[a]:o[n]||o[i]||o[a]}}function Fe(e,t,n,r){var o=t[e],i=!x(n,e),a=n[e],s=He(Boolean,o.type);if(s>-1)if(i&&!x(o,\"default\"))a=!1;else if(\"\"===a||a===S(e)){var c=He(String,o.type);(c<0||s<c)&&(a=!0)}if(void 0===a){a=function(e,t,n){if(x(t,\"default\")){var r=t.default;return e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:\"function\"==typeof r&&\"Function\"!==Me(t.type)?r.call(e):r}}(r,o,e);var u=ke;Ce(!0),Se(a),Ce(u)}return a}function Me(e){var t=e&&e.toString().match(/^\\s*function (\\w+)/);return t?t[1]:\"\"}function qe(e,t){return Me(e)===Me(t)}function He(e,t){if(!Array.isArray(t))return qe(t,e)?0:-1;for(var n=0,r=t.length;n<r;n++)if(qe(t[n],e))return n;return-1}function ze(e,t,n){de();try{if(t)for(var r=t;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,e,t,n))return}catch(e){Ue(e,r,\"errorCaptured hook\")}}Ue(e,t,n)}finally{he()}}function Be(e,t,n,r,o){var i;try{(i=n?e.apply(t,n):e.call(t))&&!i._isVue&&p(i)&&!i._handled&&(i.catch(function(e){return ze(e,r,o+\" (Promise/async)\")}),i._handled=!0)}catch(e){ze(e,r,o)}return i}function Ue(e,t,n){if(q.errorHandler)try{return q.errorHandler.call(null,e,t,n)}catch(t){t!==e&&Ve(t,null,\"config.errorHandler\")}Ve(e,t,n)}function Ve(e,t,n){if(!W&&!K||\"undefined\"==typeof console)throw e;console.error(e)}var We,Ke=!1,Je=[],Xe=!1;function Ze(){Xe=!1;var e=Je.slice(0);Je.length=0;for(var t=0;t<e.length;t++)e[t]()}if(\"undefined\"!=typeof Promise&&ae(Promise)){var Ge=Promise.resolve();We=function(){Ge.then(Ze),Y&&setTimeout(N)},Ke=!0}else if(Z||\"undefined\"==typeof MutationObserver||!ae(MutationObserver)&&\"[object MutationObserverConstructor]\"!==MutationObserver.toString())We=void 0!==n&&ae(n)?function(){n(Ze)}:function(){setTimeout(Ze,0)};else{var Qe=1,Ye=new MutationObserver(Ze),et=document.createTextNode(String(Qe));Ye.observe(et,{characterData:!0}),We=function(){Qe=(Qe+1)%2,et.data=String(Qe)},Ke=!0}function tt(e,t){var n;if(Je.push(function(){if(e)try{e.call(t)}catch(e){ze(e,t,\"nextTick\")}else n&&n(t)}),Xe||(Xe=!0,We()),!e&&\"undefined\"!=typeof Promise)return new Promise(function(e){n=e})}var nt=new se;function rt(e){!function e(t,n){var r,o,i=Array.isArray(t);if(!(!i&&!c(t)||Object.isFrozen(t)||t instanceof me)){if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)e(t[r],n);else for(r=(o=Object.keys(t)).length;r--;)e(t[o[r]],n)}}(e,nt),nt.clear()}var ot=w(function(e){var t=\"&\"===e.charAt(0),n=\"~\"===(e=t?e.slice(1):e).charAt(0),r=\"!\"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}});function it(e,t){function n(){var e=arguments,r=n.fns;if(!Array.isArray(r))return Be(r,null,arguments,t,\"v-on handler\");for(var o=r.slice(),i=0;i<o.length;i++)Be(o[i],null,e,t,\"v-on handler\")}return n.fns=e,n}function at(e,t,n,r,i,s){var c,u,l,f;for(c in e)u=e[c],l=t[c],f=ot(c),o(u)||(o(l)?(o(u.fns)&&(u=e[c]=it(u,s)),a(f.once)&&(u=e[c]=i(f.name,u,f.capture)),n(f.name,u,f.capture,f.passive,f.params)):u!==l&&(l.fns=u,e[c]=l));for(c in t)o(e[c])&&r((f=ot(c)).name,t[c],f.capture)}function st(e,t,n){var r;e instanceof me&&(e=e.data.hook||(e.data.hook={}));var s=e[t];function c(){n.apply(this,arguments),y(r.fns,c)}o(s)?r=it([c]):i(s.fns)&&a(s.merged)?(r=s).fns.push(c):r=it([s,c]),r.merged=!0,e[t]=r}function ct(e,t,n,r,o){if(i(t)){if(x(t,n))return e[n]=t[n],o||delete t[n],!0;if(x(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function ut(e){return s(e)?[ye(e)]:Array.isArray(e)?function e(t,n){var r,c,u,l,f=[];for(r=0;r<t.length;r++)o(c=t[r])||\"boolean\"==typeof c||(l=f[u=f.length-1],Array.isArray(c)?c.length>0&&(lt((c=e(c,(n||\"\")+\"_\"+r))[0])&&lt(l)&&(f[u]=ye(l.text+c[0].text),c.shift()),f.push.apply(f,c)):s(c)?lt(l)?f[u]=ye(l.text+c):\"\"!==c&&f.push(ye(c)):lt(c)&&lt(l)?f[u]=ye(l.text+c.text):(a(t._isVList)&&i(c.tag)&&o(c.key)&&i(n)&&(c.key=\"__vlist\"+n+\"_\"+r+\"__\"),f.push(c)));return f}(e):void 0}function lt(e){return i(e)&&i(e.text)&&!1===e.isComment}function ft(e,t){if(e){for(var n=Object.create(null),r=ce?Reflect.ownKeys(e):Object.keys(e),o=0;o<r.length;o++){var i=r[o];if(\"__ob__\"!==i){for(var a=e[i].from,s=t;s;){if(s._provided&&x(s._provided,a)){n[i]=s._provided[a];break}s=s.$parent}if(!s&&\"default\"in e[i]){var c=e[i].default;n[i]=\"function\"==typeof c?c.call(t):c}}}return n}}function pt(e,t){if(!e||!e.length)return{};for(var n={},r=0,o=e.length;r<o;r++){var i=e[r],a=i.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,i.context!==t&&i.fnContext!==t||!a||null==a.slot)(n.default||(n.default=[])).push(i);else{var s=a.slot,c=n[s]||(n[s]=[]);\"template\"===i.tag?c.push.apply(c,i.children||[]):c.push(i)}}for(var u in n)n[u].every(dt)&&delete n[u];return n}function dt(e){return e.isComment&&!e.asyncFactory||\" \"===e.text}function ht(e,t,n){var o,i=Object.keys(t).length>0,a=e?!!e.$stable:!i,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(a&&n&&n!==r&&s===n.$key&&!i&&!n.$hasNormal)return n;for(var c in o={},e)e[c]&&\"$\"!==c[0]&&(o[c]=mt(t,c,e[c]))}else o={};for(var u in t)u in o||(o[u]=gt(t,u));return e&&Object.isExtensible(e)&&(e._normalized=o),z(o,\"$stable\",a),z(o,\"$key\",s),z(o,\"$hasNormal\",i),o}function mt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&\"object\"==typeof e&&!Array.isArray(e)?[e]:ut(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function gt(e,t){return function(){return e[t]}}function vt(e,t){var n,r,o,a,s;if(Array.isArray(e)||\"string\"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if(\"number\"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(c(e))if(ce&&e[Symbol.iterator]){n=[];for(var u=e[Symbol.iterator](),l=u.next();!l.done;)n.push(t(l.value,n.length)),l=u.next()}else for(a=Object.keys(e),n=new Array(a.length),r=0,o=a.length;r<o;r++)s=a[r],n[r]=t(e[s],s,r);return i(n)||(n=[]),n._isVList=!0,n}function yt(e,t,n,r){var o,i=this.$scopedSlots[e];i?(n=n||{},r&&(n=O(O({},r),n)),o=i(n)||t):o=this.$slots[e]||t;var a=n&&n.slot;return a?this.$createElement(\"template\",{slot:a},o):o}function bt(e){return Re(this.$options,\"filters\",e)||L}function xt(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}function wt(e,t,n,r,o){var i=q.keyCodes[t]||n;return o&&r&&!q.keyCodes[t]?xt(o,r):i?xt(i,e):r?S(r)!==t:void 0}function _t(e,t,n,r,o){if(n&&c(n)){var i;Array.isArray(n)&&(n=$(n));var a=function(a){if(\"class\"===a||\"style\"===a||v(a))i=e;else{var s=e.attrs&&e.attrs.type;i=r||q.mustUseProp(t,s,a)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var c=k(a),u=S(a);c in i||u in i||(i[a]=n[a],o&&((e.on||(e.on={}))[\"update:\"+a]=function(e){n[a]=e}))};for(var s in n)a(s)}return e}function kt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t?r:(At(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),\"__static__\"+e,!1),r)}function Ct(e,t,n){return At(e,\"__once__\"+t+(n?\"_\"+n:\"\"),!0),e}function At(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&\"string\"!=typeof e[r]&&St(e[r],t+\"_\"+r,n);else St(e,t,n)}function St(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function Et(e,t){if(t&&l(t)){var n=e.on=e.on?O({},e.on):{};for(var r in t){var o=n[r],i=t[r];n[r]=o?[].concat(o,i):i}}return e}function Tt(e,t,n,r){t=t||{$stable:!n};for(var o=0;o<e.length;o++){var i=e[o];Array.isArray(i)?Tt(i,t,n):i&&(i.proxy&&(i.fn.proxy=!0),t[i.key]=i.fn)}return r&&(t.$key=r),t}function Ot(e,t){for(var n=0;n<t.length;n+=2){var r=t[n];\"string\"==typeof r&&r&&(e[t[n]]=t[n+1])}return e}function $t(e,t){return\"string\"==typeof e?t+e:e}function Nt(e){e._o=Ct,e._n=h,e._s=d,e._l=vt,e._t=yt,e._q=D,e._i=I,e._m=kt,e._f=bt,e._k=wt,e._b=_t,e._v=ye,e._e=ve,e._u=Tt,e._g=Et,e._d=Ot,e._p=$t}function jt(e,t,n,o,i){var s,c=this,u=i.options;x(o,\"_uid\")?(s=Object.create(o))._original=o:(s=o,o=o._original);var l=a(u._compiled),f=!l;this.data=e,this.props=t,this.children=n,this.parent=o,this.listeners=e.on||r,this.injections=ft(u.inject,o),this.slots=function(){return c.$slots||ht(e.scopedSlots,c.$slots=pt(n,o)),c.$slots},Object.defineProperty(this,\"scopedSlots\",{enumerable:!0,get:function(){return ht(e.scopedSlots,this.slots())}}),l&&(this.$options=u,this.$slots=this.slots(),this.$scopedSlots=ht(e.scopedSlots,this.$slots)),u._scopeId?this._c=function(e,t,n,r){var i=Ht(s,e,t,n,r,f);return i&&!Array.isArray(i)&&(i.fnScopeId=u._scopeId,i.fnContext=o),i}:this._c=function(e,t,n,r){return Ht(s,e,t,n,r,f)}}function Lt(e,t,n,r,o){var i=be(e);return i.fnContext=n,i.fnOptions=r,t.slot&&((i.data||(i.data={})).slot=t.slot),i}function Dt(e,t){for(var n in t)e[k(n)]=t[n]}Nt(jt.prototype);var It={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var n=e;It.prepatch(n,n)}else(e.componentInstance=function(e,t){var n={_isComponent:!0,_parentVnode:e,parent:Gt},r=e.data.inlineTemplate;return i(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns),new e.componentOptions.Ctor(n)}(e)).$mount(t?e.elm:void 0,t)},prepatch:function(e,t){var n=t.componentOptions;!function(e,t,n,o,i){var a=o.data.scopedSlots,s=e.$scopedSlots,c=!!(a&&!a.$stable||s!==r&&!s.$stable||a&&e.$scopedSlots.$key!==a.$key),u=!!(i||e.$options._renderChildren||c);if(e.$options._parentVnode=o,e.$vnode=o,e._vnode&&(e._vnode.parent=o),e.$options._renderChildren=i,e.$attrs=o.data.attrs||r,e.$listeners=n||r,t&&e.$options.props){Ce(!1);for(var l=e._props,f=e.$options._propKeys||[],p=0;p<f.length;p++){var d=f[p],h=e.$options.props;l[d]=Fe(d,h,t,e)}Ce(!0),e.$options.propsData=t}n=n||r;var m=e.$options._parentListeners;e.$options._parentListeners=n,Zt(e,n,m),u&&(e.$slots=pt(i,o.context),e.$forceUpdate())}(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){var t,n=e.context,r=e.componentInstance;r._isMounted||(r._isMounted=!0,tn(r,\"mounted\")),e.data.keepAlive&&(n._isMounted?((t=r)._inactive=!1,rn.push(t)):en(r,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(!(n&&(t._directInactive=!0,Yt(t))||t._inactive)){t._inactive=!0;for(var r=0;r<t.$children.length;r++)e(t.$children[r]);tn(t,\"deactivated\")}}(t,!0):t.$destroy())}},Pt=Object.keys(It);function Rt(e,t,n,s,u){if(!o(e)){var l=n.$options._base;if(c(e)&&(e=l.extend(e)),\"function\"==typeof e){var f;if(o(e.cid)&&void 0===(e=function(e,t){if(a(e.error)&&i(e.errorComp))return e.errorComp;if(i(e.resolved))return e.resolved;var n=Bt;if(n&&i(e.owners)&&-1===e.owners.indexOf(n)&&e.owners.push(n),a(e.loading)&&i(e.loadingComp))return e.loadingComp;if(n&&!i(e.owners)){var r=e.owners=[n],s=!0,u=null,l=null;n.$on(\"hook:destroyed\",function(){return y(r,n)});var f=function(e){for(var t=0,n=r.length;t<n;t++)r[t].$forceUpdate();e&&(r.length=0,null!==u&&(clearTimeout(u),u=null),null!==l&&(clearTimeout(l),l=null))},d=P(function(n){e.resolved=Ut(n,t),s?r.length=0:f(!0)}),h=P(function(t){i(e.errorComp)&&(e.error=!0,f(!0))}),m=e(d,h);return c(m)&&(p(m)?o(e.resolved)&&m.then(d,h):p(m.component)&&(m.component.then(d,h),i(m.error)&&(e.errorComp=Ut(m.error,t)),i(m.loading)&&(e.loadingComp=Ut(m.loading,t),0===m.delay?e.loading=!0:u=setTimeout(function(){u=null,o(e.resolved)&&o(e.error)&&(e.loading=!0,f(!1))},m.delay||200)),i(m.timeout)&&(l=setTimeout(function(){l=null,o(e.resolved)&&h(null)},m.timeout)))),s=!1,e.loading?e.loadingComp:e.resolved}}(f=e,l)))return function(e,t,n,r,o){var i=ve();return i.asyncFactory=e,i.asyncMeta={data:t,context:n,children:r,tag:o},i}(f,t,n,s,u);t=t||{},kn(e),i(t.model)&&function(e,t){var n=e.model&&e.model.prop||\"value\",r=e.model&&e.model.event||\"input\";(t.attrs||(t.attrs={}))[n]=t.model.value;var o=t.on||(t.on={}),a=o[r],s=t.model.callback;i(a)?(Array.isArray(a)?-1===a.indexOf(s):a!==s)&&(o[r]=[s].concat(a)):o[r]=s}(e.options,t);var d=function(e,t,n){var r=t.options.props;if(!o(r)){var a={},s=e.attrs,c=e.props;if(i(s)||i(c))for(var u in r){var l=S(u);ct(a,c,u,l,!0)||ct(a,s,u,l,!1)}return a}}(t,e);if(a(e.options.functional))return function(e,t,n,o,a){var s=e.options,c={},u=s.props;if(i(u))for(var l in u)c[l]=Fe(l,u,t||r);else i(n.attrs)&&Dt(c,n.attrs),i(n.props)&&Dt(c,n.props);var f=new jt(n,c,a,o,e),p=s.render.call(null,f._c,f);if(p instanceof me)return Lt(p,n,f.parent,s);if(Array.isArray(p)){for(var d=ut(p)||[],h=new Array(d.length),m=0;m<d.length;m++)h[m]=Lt(d[m],n,f.parent,s);return h}}(e,d,t,n,s);var h=t.on;if(t.on=t.nativeOn,a(e.options.abstract)){var m=t.slot;t={},m&&(t.slot=m)}!function(e){for(var t=e.hook||(e.hook={}),n=0;n<Pt.length;n++){var r=Pt[n],o=t[r],i=It[r];o===i||o&&o._merged||(t[r]=o?Ft(i,o):i)}}(t);var g=e.options.name||u;return new me(\"vue-component-\"+e.cid+(g?\"-\"+g:\"\"),t,void 0,void 0,void 0,n,{Ctor:e,propsData:d,listeners:h,tag:u,children:s},f)}}}function Ft(e,t){var n=function(n,r){e(n,r),t(n,r)};return n._merged=!0,n}var Mt=1,qt=2;function Ht(e,t,n,r,u,l){return(Array.isArray(n)||s(n))&&(u=r,r=n,n=void 0),a(l)&&(u=qt),function(e,t,n,r,s){if(i(n)&&i(n.__ob__))return ve();if(i(n)&&i(n.is)&&(t=n.is),!t)return ve();var u,l,f;(Array.isArray(r)&&\"function\"==typeof r[0]&&((n=n||{}).scopedSlots={default:r[0]},r.length=0),s===qt?r=ut(r):s===Mt&&(r=function(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(r)),\"string\"==typeof t)?(l=e.$vnode&&e.$vnode.ns||q.getTagNamespace(t),u=q.isReservedTag(t)?new me(q.parsePlatformTagName(t),n,r,void 0,void 0,e):n&&n.pre||!i(f=Re(e.$options,\"components\",t))?new me(t,n,r,void 0,void 0,e):Rt(f,n,e,r,t)):u=Rt(t,n,e,r);return Array.isArray(u)?u:i(u)?(i(l)&&function e(t,n,r){if(t.ns=n,\"foreignObject\"===t.tag&&(n=void 0,r=!0),i(t.children))for(var s=0,c=t.children.length;s<c;s++){var u=t.children[s];i(u.tag)&&(o(u.ns)||a(r)&&\"svg\"!==u.tag)&&e(u,n,r)}}(u,l),i(n)&&function(e){c(e.style)&&rt(e.style),c(e.class)&&rt(e.class)}(n),u):ve()}(e,t,n,r,u)}var zt,Bt=null;function Ut(e,t){return(e.__esModule||ce&&\"Module\"===e[Symbol.toStringTag])&&(e=e.default),c(e)?t.extend(e):e}function Vt(e){return e.isComment&&e.asyncFactory}function Wt(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(i(n)&&(i(n.componentOptions)||Vt(n)))return n}}function Kt(e,t){zt.$on(e,t)}function Jt(e,t){zt.$off(e,t)}function Xt(e,t){var n=zt;return function r(){null!==t.apply(null,arguments)&&n.$off(e,r)}}function Zt(e,t,n){zt=e,at(t,n||{},Kt,Jt,Xt,e),zt=void 0}var Gt=null;function Qt(e){var t=Gt;return Gt=e,function(){Gt=t}}function Yt(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function en(e,t){if(t){if(e._directInactive=!1,Yt(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)en(e.$children[n]);tn(e,\"activated\")}}function tn(e,t){de();var n=e.$options[t],r=t+\" hook\";if(n)for(var o=0,i=n.length;o<i;o++)Be(n[o],e,null,e,r);e._hasHookEvent&&e.$emit(\"hook:\"+t),he()}var nn=[],rn=[],on={},an=!1,sn=!1,cn=0,un=0,ln=Date.now;if(W&&!Z){var fn=window.performance;fn&&\"function\"==typeof fn.now&&ln()>document.createEvent(\"Event\").timeStamp&&(ln=function(){return fn.now()})}function pn(){var e,t;for(un=ln(),sn=!0,nn.sort(function(e,t){return e.id-t.id}),cn=0;cn<nn.length;cn++)(e=nn[cn]).before&&e.before(),t=e.id,on[t]=null,e.run();var n=rn.slice(),r=nn.slice();cn=nn.length=rn.length=0,on={},an=sn=!1,function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,en(e[t],!0)}(n),function(e){for(var t=e.length;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&!r._isDestroyed&&tn(r,\"updated\")}}(r),ie&&q.devtools&&ie.emit(\"flush\")}var dn=0,hn=function(e,t,n,r,o){this.vm=e,o&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++dn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new se,this.newDepIds=new se,this.expression=\"\",\"function\"==typeof t?this.getter=t:(this.getter=function(e){if(!U.test(e)){var t=e.split(\".\");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}(t),this.getter||(this.getter=N)),this.value=this.lazy?void 0:this.get()};hn.prototype.get=function(){var e;de(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;ze(e,t,'getter for watcher \"'+this.expression+'\"')}finally{this.deep&&rt(e),he(),this.cleanupDeps()}return e},hn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},hn.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},hn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var t=e.id;if(null==on[t]){if(on[t]=!0,sn){for(var n=nn.length-1;n>cn&&nn[n].id>e.id;)n--;nn.splice(n+1,0,e)}else nn.push(e);an||(an=!0,tt(pn))}}(this)},hn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||c(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){ze(e,this.vm,'callback for watcher \"'+this.expression+'\"')}else this.cb.call(this.vm,e,t)}}},hn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},hn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},hn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var mn={enumerable:!0,configurable:!0,get:N,set:N};function gn(e,t,n){mn.get=function(){return this[t][n]},mn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,mn)}var vn={lazy:!0};function yn(e,t,n){var r=!oe();\"function\"==typeof n?(mn.get=r?bn(t):xn(n),mn.set=N):(mn.get=n.get?r&&!1!==n.cache?bn(t):xn(n.get):N,mn.set=n.set||N),Object.defineProperty(e,t,mn)}function bn(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),fe.target&&t.depend(),t.value}}function xn(e){return function(){return e.call(this,this)}}function wn(e,t,n,r){return l(n)&&(r=n,n=n.handler),\"string\"==typeof n&&(n=e[n]),e.$watch(t,n,r)}var _n=0;function kn(e){var t=e.options;if(e.super){var n=kn(e.super);if(n!==e.superOptions){e.superOptions=n;var r=function(e){var t,n=e.options,r=e.sealedOptions;for(var o in n)n[o]!==r[o]&&(t||(t={}),t[o]=n[o]);return t}(e);r&&O(e.extendOptions,r),(t=e.options=Pe(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function Cn(e){this._init(e)}function An(e){return e&&(e.Ctor.options.name||e.tag)}function Sn(e,t){return Array.isArray(e)?e.indexOf(t)>-1:\"string\"==typeof e?e.split(\",\").indexOf(t)>-1:(n=e,\"[object RegExp]\"===u.call(n)&&e.test(t));var n}function En(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=An(a.componentOptions);s&&!t(s)&&Tn(n,i,r,o)}}}function Tn(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,y(n,t)}Cn.prototype._init=function(e){var t=this;t._uid=_n++,t._isVue=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=Pe(kn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Zt(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,o=n&&n.context;e.$slots=pt(t._renderChildren,o),e.$scopedSlots=r,e._c=function(t,n,r,o){return Ht(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return Ht(e,t,n,r,o,!0)};var i=n&&n.data;Ee(e,\"$attrs\",i&&i.attrs||r,null,!0),Ee(e,\"$listeners\",t._parentListeners||r,null,!0)}(t),tn(t,\"beforeCreate\"),function(e){var t=ft(e.$options.inject,e);t&&(Ce(!1),Object.keys(t).forEach(function(n){Ee(e,n,t[n])}),Ce(!0))}(t),function(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[];e.$parent&&Ce(!1);var i=function(i){o.push(i);var a=Fe(i,t,n,e);Ee(r,i,a),i in e||gn(e,\"_props\",i)};for(var a in t)i(a);Ce(!0)}(e,t.props),t.methods&&function(e,t){for(var n in e.$options.props,t)e[n]=\"function\"!=typeof t[n]?N:E(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;l(t=e._data=\"function\"==typeof t?function(e,t){de();try{return e.call(t,t)}catch(e){return ze(e,t,\"data()\"),{}}finally{he()}}(t,e):t||{})||(t={});for(var n,r=Object.keys(t),o=e.$options.props,i=(e.$options.methods,r.length);i--;){var a=r[i];o&&x(o,a)||36!==(n=(a+\"\").charCodeAt(0))&&95!==n&&gn(e,\"_data\",a)}Se(t,!0)}(e):Se(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=oe();for(var o in t){var i=t[o],a=\"function\"==typeof i?i:i.get;r||(n[o]=new hn(e,a||N,N,vn)),o in e||yn(e,o,i)}}(e,t.computed),t.watch&&t.watch!==te&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)wn(e,n,r[o]);else wn(e,n,r)}}(e,t.watch)}(t),function(e){var t=e.$options.provide;t&&(e._provided=\"function\"==typeof t?t.call(e):t)}(t),tn(t,\"created\"),t.$options.el&&t.$mount(t.$options.el)},function(e){Object.defineProperty(e.prototype,\"$data\",{get:function(){return this._data}}),Object.defineProperty(e.prototype,\"$props\",{get:function(){return this._props}}),e.prototype.$set=Te,e.prototype.$delete=Oe,e.prototype.$watch=function(e,t,n){if(l(t))return wn(this,e,t,n);(n=n||{}).user=!0;var r=new hn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){ze(e,this,'callback for immediate watcher \"'+r.expression+'\"')}return function(){r.teardown()}}}(Cn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var o=0,i=e.length;o<i;o++)r.$on(e[o],n);else(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0);return r},e.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(e)){for(var r=0,o=e.length;r<o;r++)n.$off(e[r],t);return n}var i,a=n._events[e];if(!a)return n;if(!t)return n._events[e]=null,n;for(var s=a.length;s--;)if((i=a[s])===t||i.fn===t){a.splice(s,1);break}return n},e.prototype.$emit=function(e){var t=this._events[e];if(t){t=t.length>1?T(t):t;for(var n=T(arguments,1),r='event handler for \"'+e+'\"',o=0,i=t.length;o<i;o++)Be(t[o],this,n,this,r)}return this}}(Cn),function(e){e.prototype._update=function(e,t){var n=this,r=n.$el,o=n._vnode,i=Qt(n);n._vnode=e,n.$el=o?n.__patch__(o,e):n.__patch__(n.$el,e,t,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){tn(e,\"beforeDestroy\"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||y(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),tn(e,\"destroyed\"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(Cn),function(e){Nt(e.prototype),e.prototype.$nextTick=function(e){return tt(e,this)},e.prototype._render=function(){var e,t=this,n=t.$options,r=n.render,o=n._parentVnode;o&&(t.$scopedSlots=ht(o.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=o;try{Bt=t,e=r.call(t._renderProxy,t.$createElement)}catch(n){ze(n,t,\"render\"),e=t._vnode}finally{Bt=null}return Array.isArray(e)&&1===e.length&&(e=e[0]),e instanceof me||(e=ve()),e.parent=o,e}}(Cn);var On=[String,RegExp,Array],$n={KeepAlive:{name:\"keep-alive\",abstract:!0,props:{include:On,exclude:On,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Tn(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch(\"include\",function(t){En(e,function(e){return Sn(t,e)})}),this.$watch(\"exclude\",function(t){En(e,function(e){return!Sn(t,e)})})},render:function(){var e=this.$slots.default,t=Wt(e),n=t&&t.componentOptions;if(n){var r=An(n),o=this.include,i=this.exclude;if(o&&(!r||!Sn(o,r))||i&&r&&Sn(i,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?\"::\"+n.tag:\"\"):t.key;a[c]?(t.componentInstance=a[c].componentInstance,y(s,c),s.push(c)):(a[c]=t,s.push(c),this.max&&s.length>parseInt(this.max)&&Tn(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return q}};Object.defineProperty(e,\"config\",t),e.util={warn:ue,extend:O,mergeOptions:Pe,defineReactive:Ee},e.set=Te,e.delete=Oe,e.nextTick=tt,e.observable=function(e){return Se(e),e},e.options=Object.create(null),F.forEach(function(t){e.options[t+\"s\"]=Object.create(null)}),e.options._base=e,O(e.options.components,$n),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=T(arguments,1);return n.unshift(this),\"function\"==typeof e.install?e.install.apply(e,n):\"function\"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=Pe(this.options,e),this}}(e),function(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=t++,a.options=Pe(n.options,e),a.super=n,a.options.props&&function(e){var t=e.options.props;for(var n in t)gn(e.prototype,\"_props\",n)}(a),a.options.computed&&function(e){var t=e.options.computed;for(var n in t)yn(e.prototype,n,t[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,F.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=O({},a.options),o[r]=a,a}}(e),function(e){F.forEach(function(t){e[t]=function(e,n){return n?(\"component\"===t&&l(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),\"directive\"===t&&\"function\"==typeof n&&(n={bind:n,update:n}),this.options[t+\"s\"][e]=n,n):this.options[t+\"s\"][e]}})}(e)}(Cn),Object.defineProperty(Cn.prototype,\"$isServer\",{get:oe}),Object.defineProperty(Cn.prototype,\"$ssrContext\",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Cn,\"FunctionalRenderContext\",{value:jt}),Cn.version=\"2.6.10\";var Nn=m(\"style,class\"),jn=m(\"input,textarea,option,select,progress\"),Ln=function(e,t,n){return\"value\"===n&&jn(e)&&\"button\"!==t||\"selected\"===n&&\"option\"===e||\"checked\"===n&&\"input\"===e||\"muted\"===n&&\"video\"===e},Dn=m(\"contenteditable,draggable,spellcheck\"),In=m(\"events,caret,typing,plaintext-only\"),Pn=function(e,t){return Hn(t)||\"false\"===t?\"false\":\"contenteditable\"===e&&In(t)?t:\"true\"},Rn=m(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"),Fn=\"http://www.w3.org/1999/xlink\",Mn=function(e){return\":\"===e.charAt(5)&&\"xlink\"===e.slice(0,5)},qn=function(e){return Mn(e)?e.slice(6,e.length):\"\"},Hn=function(e){return null==e||!1===e};function zn(e,t){return{staticClass:Bn(e.staticClass,t.staticClass),class:i(e.class)?[e.class,t.class]:t.class}}function Bn(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Un(e){return Array.isArray(e)?function(e){for(var t,n=\"\",r=0,o=e.length;r<o;r++)i(t=Un(e[r]))&&\"\"!==t&&(n&&(n+=\" \"),n+=t);return n}(e):c(e)?function(e){var t=\"\";for(var n in e)e[n]&&(t&&(t+=\" \"),t+=n);return t}(e):\"string\"==typeof e?e:\"\"}var Vn={svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},Wn=m(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),Kn=m(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),Jn=function(e){return Wn(e)||Kn(e)};function Xn(e){return Kn(e)?\"svg\":\"math\"===e?\"math\":void 0}var Zn=Object.create(null),Gn=m(\"text,number,password,search,email,tel,url\");function Qn(e){return\"string\"==typeof e?document.querySelector(e)||document.createElement(\"div\"):e}var Yn=Object.freeze({createElement:function(e,t){var n=document.createElement(e);return\"select\"!==e?n:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute(\"multiple\",\"multiple\"),n)},createElementNS:function(e,t){return document.createElementNS(Vn[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,\"\")}}),er={create:function(e,t){tr(t)},update:function(e,t){e.data.ref!==t.data.ref&&(tr(e,!0),tr(t))},destroy:function(e){tr(e,!0)}};function tr(e,t){var n=e.data.ref;if(i(n)){var r=e.context,o=e.componentInstance||e.elm,a=r.$refs;t?Array.isArray(a[n])?y(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].indexOf(o)<0&&a[n].push(o):a[n]=[o]:a[n]=o}}var nr=new me(\"\",{},[]),rr=[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"];function or(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&i(e.data)===i(t.data)&&function(e,t){if(\"input\"!==e.tag)return!0;var n,r=i(n=e.data)&&i(n=n.attrs)&&n.type,o=i(n=t.data)&&i(n=n.attrs)&&n.type;return r===o||Gn(r)&&Gn(o)}(e,t)||a(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&o(t.asyncFactory.error))}function ir(e,t,n){var r,o,a={};for(r=t;r<=n;++r)i(o=e[r].key)&&(a[o]=r);return a}var ar={create:sr,update:sr,destroy:function(e){sr(e,nr)}};function sr(e,t){(e.data.directives||t.data.directives)&&function(e,t){var n,r,o,i=e===nr,a=t===nr,s=ur(e.data.directives,e.context),c=ur(t.data.directives,t.context),u=[],l=[];for(n in c)r=s[n],o=c[n],r?(o.oldValue=r.value,o.oldArg=r.arg,fr(o,\"update\",t,e),o.def&&o.def.componentUpdated&&l.push(o)):(fr(o,\"bind\",t,e),o.def&&o.def.inserted&&u.push(o));if(u.length){var f=function(){for(var n=0;n<u.length;n++)fr(u[n],\"inserted\",t,e)};i?st(t,\"insert\",f):f()}if(l.length&&st(t,\"postpatch\",function(){for(var n=0;n<l.length;n++)fr(l[n],\"componentUpdated\",t,e)}),!i)for(n in s)c[n]||fr(s[n],\"unbind\",e,e,a)}(e,t)}var cr=Object.create(null);function ur(e,t){var n,r,o=Object.create(null);if(!e)return o;for(n=0;n<e.length;n++)(r=e[n]).modifiers||(r.modifiers=cr),o[lr(r)]=r,r.def=Re(t.$options,\"directives\",r.name);return o}function lr(e){return e.rawName||e.name+\".\"+Object.keys(e.modifiers||{}).join(\".\")}function fr(e,t,n,r,o){var i=e.def&&e.def[t];if(i)try{i(n.elm,e,n,r,o)}catch(r){ze(r,n.context,\"directive \"+e.name+\" \"+t+\" hook\")}}var pr=[er,ar];function dr(e,t){var n=t.componentOptions;if(!(i(n)&&!1===n.Ctor.options.inheritAttrs||o(e.data.attrs)&&o(t.data.attrs))){var r,a,s=t.elm,c=e.data.attrs||{},u=t.data.attrs||{};for(r in i(u.__ob__)&&(u=t.data.attrs=O({},u)),u)a=u[r],c[r]!==a&&hr(s,r,a);for(r in(Z||Q)&&u.value!==c.value&&hr(s,\"value\",u.value),c)o(u[r])&&(Mn(r)?s.removeAttributeNS(Fn,qn(r)):Dn(r)||s.removeAttribute(r))}}function hr(e,t,n){e.tagName.indexOf(\"-\")>-1?mr(e,t,n):Rn(t)?Hn(n)?e.removeAttribute(t):(n=\"allowfullscreen\"===t&&\"EMBED\"===e.tagName?\"true\":t,e.setAttribute(t,n)):Dn(t)?e.setAttribute(t,Pn(t,n)):Mn(t)?Hn(n)?e.removeAttributeNS(Fn,qn(t)):e.setAttributeNS(Fn,t,n):mr(e,t,n)}function mr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(Z&&!G&&\"TEXTAREA\"===e.tagName&&\"placeholder\"===t&&\"\"!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",r)};e.addEventListener(\"input\",r),e.__ieph=!0}e.setAttribute(t,n)}}var gr={create:dr,update:dr};function vr(e,t){var n=t.elm,r=t.data,a=e.data;if(!(o(r.staticClass)&&o(r.class)&&(o(a)||o(a.staticClass)&&o(a.class)))){var s=function(e){for(var t=e.data,n=e,r=e;i(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=zn(r.data,t));for(;i(n=n.parent);)n&&n.data&&(t=zn(t,n.data));return function(e,t){return i(e)||i(t)?Bn(e,Un(t)):\"\"}(t.staticClass,t.class)}(t),c=n._transitionClasses;i(c)&&(s=Bn(s,Un(c))),s!==n._prevClass&&(n.setAttribute(\"class\",s),n._prevClass=s)}}var yr,br,xr,wr,_r,kr,Cr={create:vr,update:vr},Ar=/[\\w).+\\-_$\\]]/;function Sr(e){var t,n,r,o,i,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r<e.length;r++)if(n=t,t=e.charCodeAt(r),a)39===t&&92!==n&&(a=!1);else if(s)34===t&&92!==n&&(s=!1);else if(c)96===t&&92!==n&&(c=!1);else if(u)47===t&&92!==n&&(u=!1);else if(124!==t||124===e.charCodeAt(r+1)||124===e.charCodeAt(r-1)||l||f||p){switch(t){case 34:s=!0;break;case 39:a=!0;break;case 96:c=!0;break;case 40:p++;break;case 41:p--;break;case 91:f++;break;case 93:f--;break;case 123:l++;break;case 125:l--}if(47===t){for(var h=r-1,m=void 0;h>=0&&\" \"===(m=e.charAt(h));h--);m&&Ar.test(m)||(u=!0)}}else void 0===o?(d=r+1,o=e.slice(0,r).trim()):g();function g(){(i||(i=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===o?o=e.slice(0,r).trim():0!==d&&g(),i)for(r=0;r<i.length;r++)o=Er(o,i[r]);return o}function Er(e,t){var n=t.indexOf(\"(\");if(n<0)return'_f(\"'+t+'\")('+e+\")\";var r=t.slice(0,n),o=t.slice(n+1);return'_f(\"'+r+'\")('+e+(\")\"!==o?\",\"+o:o)}function Tr(e,t){console.error(\"[Vue compiler]: \"+e)}function Or(e,t){return e?e.map(function(e){return e[t]}).filter(function(e){return e}):[]}function $r(e,t,n,r,o){(e.props||(e.props=[])).push(Mr({name:t,value:n,dynamic:o},r)),e.plain=!1}function Nr(e,t,n,r,o){(o?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(Mr({name:t,value:n,dynamic:o},r)),e.plain=!1}function jr(e,t,n,r){e.attrsMap[t]=n,e.attrsList.push(Mr({name:t,value:n},r))}function Lr(e,t,n,r,o,i,a,s){(e.directives||(e.directives=[])).push(Mr({name:t,rawName:n,value:r,arg:o,isDynamicArg:i,modifiers:a},s)),e.plain=!1}function Dr(e,t,n){return n?\"_p(\"+t+',\"'+e+'\")':e+t}function Ir(e,t,n,o,i,a,s,c){var u;(o=o||r).right?c?t=\"(\"+t+\")==='click'?'contextmenu':(\"+t+\")\":\"click\"===t&&(t=\"contextmenu\",delete o.right):o.middle&&(c?t=\"(\"+t+\")==='click'?'mouseup':(\"+t+\")\":\"click\"===t&&(t=\"mouseup\")),o.capture&&(delete o.capture,t=Dr(\"!\",t,c)),o.once&&(delete o.once,t=Dr(\"~\",t,c)),o.passive&&(delete o.passive,t=Dr(\"&\",t,c)),o.native?(delete o.native,u=e.nativeEvents||(e.nativeEvents={})):u=e.events||(e.events={});var l=Mr({value:n.trim(),dynamic:c},s);o!==r&&(l.modifiers=o);var f=u[t];Array.isArray(f)?i?f.unshift(l):f.push(l):u[t]=f?i?[l,f]:[f,l]:l,e.plain=!1}function Pr(e,t,n){var r=Rr(e,\":\"+t)||Rr(e,\"v-bind:\"+t);if(null!=r)return Sr(r);if(!1!==n){var o=Rr(e,t);if(null!=o)return JSON.stringify(o)}}function Rr(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var o=e.attrsList,i=0,a=o.length;i<a;i++)if(o[i].name===t){o.splice(i,1);break}return n&&delete e.attrsMap[t],r}function Fr(e,t){for(var n=e.attrsList,r=0,o=n.length;r<o;r++){var i=n[r];if(t.test(i.name))return n.splice(r,1),i}}function Mr(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function qr(e,t,n){var r=n||{},o=r.number,i=\"$$v\";r.trim&&(i=\"(typeof $$v === 'string'? $$v.trim(): $$v)\"),o&&(i=\"_n(\"+i+\")\");var a=Hr(t,i);e.model={value:\"(\"+t+\")\",expression:JSON.stringify(t),callback:\"function ($$v) {\"+a+\"}\"}}function Hr(e,t){var n=function(e){if(e=e.trim(),yr=e.length,e.indexOf(\"[\")<0||e.lastIndexOf(\"]\")<yr-1)return(wr=e.lastIndexOf(\".\"))>-1?{exp:e.slice(0,wr),key:'\"'+e.slice(wr+1)+'\"'}:{exp:e,key:null};for(br=e,wr=_r=kr=0;!Br();)Ur(xr=zr())?Wr(xr):91===xr&&Vr(xr);return{exp:e.slice(0,_r),key:e.slice(_r+1,kr)}}(e);return null===n.key?e+\"=\"+t:\"$set(\"+n.exp+\", \"+n.key+\", \"+t+\")\"}function zr(){return br.charCodeAt(++wr)}function Br(){return wr>=yr}function Ur(e){return 34===e||39===e}function Vr(e){var t=1;for(_r=wr;!Br();)if(Ur(e=zr()))Wr(e);else if(91===e&&t++,93===e&&t--,0===t){kr=wr;break}}function Wr(e){for(var t=e;!Br()&&(e=zr())!==t;);}var Kr,Jr=\"__r\",Xr=\"__c\";function Zr(e,t,n){var r=Kr;return function o(){null!==t.apply(null,arguments)&&Yr(e,o,n,r)}}var Gr=Ke&&!(ee&&Number(ee[1])<=53);function Qr(e,t,n,r){if(Gr){var o=un,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=o||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}Kr.addEventListener(e,t,ne?{capture:n,passive:r}:n)}function Yr(e,t,n,r){(r||Kr).removeEventListener(e,t._wrapper||t,n)}function eo(e,t){if(!o(e.data.on)||!o(t.data.on)){var n=t.data.on||{},r=e.data.on||{};Kr=t.elm,function(e){if(i(e[Jr])){var t=Z?\"change\":\"input\";e[t]=[].concat(e[Jr],e[t]||[]),delete e[Jr]}i(e[Xr])&&(e.change=[].concat(e[Xr],e.change||[]),delete e[Xr])}(n),at(n,r,Qr,Yr,Zr,t.context),Kr=void 0}}var to,no={create:eo,update:eo};function ro(e,t){if(!o(e.data.domProps)||!o(t.data.domProps)){var n,r,a=t.elm,s=e.data.domProps||{},c=t.data.domProps||{};for(n in i(c.__ob__)&&(c=t.data.domProps=O({},c)),s)n in c||(a[n]=\"\");for(n in c){if(r=c[n],\"textContent\"===n||\"innerHTML\"===n){if(t.children&&(t.children.length=0),r===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if(\"value\"===n&&\"PROGRESS\"!==a.tagName){a._value=r;var u=o(r)?\"\":String(r);oo(a,u)&&(a.value=u)}else if(\"innerHTML\"===n&&Kn(a.tagName)&&o(a.innerHTML)){(to=to||document.createElement(\"div\")).innerHTML=\"<svg>\"+r+\"</svg>\";for(var l=to.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(r!==s[n])try{a[n]=r}catch(e){}}}}function oo(e,t){return!e.composing&&(\"OPTION\"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(i(r)){if(r.number)return h(n)!==h(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var io={create:ro,update:ro},ao=w(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function so(e){var t=co(e.style);return e.staticStyle?O(e.staticStyle,t):t}function co(e){return Array.isArray(e)?$(e):\"string\"==typeof e?ao(e):e}var uo,lo=/^--/,fo=/\\s*!important$/,po=function(e,t,n){if(lo.test(t))e.style.setProperty(t,n);else if(fo.test(n))e.style.setProperty(S(t),n.replace(fo,\"\"),\"important\");else{var r=mo(t);if(Array.isArray(n))for(var o=0,i=n.length;o<i;o++)e.style[r]=n[o];else e.style[r]=n}},ho=[\"Webkit\",\"Moz\",\"ms\"],mo=w(function(e){if(uo=uo||document.createElement(\"div\").style,\"filter\"!==(e=k(e))&&e in uo)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<ho.length;n++){var r=ho[n]+t;if(r in uo)return r}});function go(e,t){var n=t.data,r=e.data;if(!(o(n.staticStyle)&&o(n.style)&&o(r.staticStyle)&&o(r.style))){var a,s,c=t.elm,u=r.staticStyle,l=r.normalizedStyle||r.style||{},f=u||l,p=co(t.data.style)||{};t.data.normalizedStyle=i(p.__ob__)?O({},p):p;var d=function(e,t){for(var n,r={},o=e;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=so(o.data))&&O(r,n);(n=so(e.data))&&O(r,n);for(var i=e;i=i.parent;)i.data&&(n=so(i.data))&&O(r,n);return r}(t);for(s in f)o(d[s])&&po(c,s,\"\");for(s in d)(a=d[s])!==f[s]&&po(c,s,null==a?\"\":a)}}var vo={create:go,update:go},yo=/\\s+/;function bo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(yo).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=\" \"+(e.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+t+\" \")<0&&e.setAttribute(\"class\",(n+t).trim())}}function xo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(yo).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n=\" \"+(e.getAttribute(\"class\")||\"\")+\" \",r=\" \"+t+\" \";n.indexOf(r)>=0;)n=n.replace(r,\" \");(n=n.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function wo(e){if(e){if(\"object\"==typeof e){var t={};return!1!==e.css&&O(t,_o(e.name||\"v\")),O(t,e),t}return\"string\"==typeof e?_o(e):void 0}}var _o=w(function(e){return{enterClass:e+\"-enter\",enterToClass:e+\"-enter-to\",enterActiveClass:e+\"-enter-active\",leaveClass:e+\"-leave\",leaveToClass:e+\"-leave-to\",leaveActiveClass:e+\"-leave-active\"}}),ko=W&&!G,Co=\"transition\",Ao=\"animation\",So=\"transition\",Eo=\"transitionend\",To=\"animation\",Oo=\"animationend\";ko&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(So=\"WebkitTransition\",Eo=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(To=\"WebkitAnimation\",Oo=\"webkitAnimationEnd\"));var $o=W?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function No(e){$o(function(){$o(e)})}function jo(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),bo(e,t))}function Lo(e,t){e._transitionClasses&&y(e._transitionClasses,t),xo(e,t)}function Do(e,t,n){var r=Po(e,t),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===Co?Eo:Oo,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c<a&&u()},i+1),e.addEventListener(s,l)}var Io=/\\b(transform|all)(,|$)/;function Po(e,t){var n,r=window.getComputedStyle(e),o=(r[So+\"Delay\"]||\"\").split(\", \"),i=(r[So+\"Duration\"]||\"\").split(\", \"),a=Ro(o,i),s=(r[To+\"Delay\"]||\"\").split(\", \"),c=(r[To+\"Duration\"]||\"\").split(\", \"),u=Ro(s,c),l=0,f=0;return t===Co?a>0&&(n=Co,l=a,f=i.length):t===Ao?u>0&&(n=Ao,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Co:Ao:null)?n===Co?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Co&&Io.test(r[So+\"Property\"])}}function Ro(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map(function(t,n){return Fo(t)+Fo(e[n])}))}function Fo(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function Mo(e,t){var n=e.elm;i(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=wo(e.data.transition);if(!o(r)&&!i(n._enterCb)&&1===n.nodeType){for(var a=r.css,s=r.type,u=r.enterClass,l=r.enterToClass,f=r.enterActiveClass,p=r.appearClass,d=r.appearToClass,m=r.appearActiveClass,g=r.beforeEnter,v=r.enter,y=r.afterEnter,b=r.enterCancelled,x=r.beforeAppear,w=r.appear,_=r.afterAppear,k=r.appearCancelled,C=r.duration,A=Gt,S=Gt.$vnode;S&&S.parent;)A=S.context,S=S.parent;var E=!A._isMounted||!e.isRootInsert;if(!E||w||\"\"===w){var T=E&&p?p:u,O=E&&m?m:f,$=E&&d?d:l,N=E&&x||g,j=E&&\"function\"==typeof w?w:v,L=E&&_||y,D=E&&k||b,I=h(c(C)?C.enter:C),R=!1!==a&&!G,F=zo(j),M=n._enterCb=P(function(){R&&(Lo(n,$),Lo(n,O)),M.cancelled?(R&&Lo(n,T),D&&D(n)):L&&L(n),n._enterCb=null});e.data.show||st(e,\"insert\",function(){var t=n.parentNode,r=t&&t._pending&&t._pending[e.key];r&&r.tag===e.tag&&r.elm._leaveCb&&r.elm._leaveCb(),j&&j(n,M)}),N&&N(n),R&&(jo(n,T),jo(n,O),No(function(){Lo(n,T),M.cancelled||(jo(n,$),F||(Ho(I)?setTimeout(M,I):Do(n,s,M)))})),e.data.show&&(t&&t(),j&&j(n,M)),R||F||M()}}}function qo(e,t){var n=e.elm;i(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var r=wo(e.data.transition);if(o(r)||1!==n.nodeType)return t();if(!i(n._leaveCb)){var a=r.css,s=r.type,u=r.leaveClass,l=r.leaveToClass,f=r.leaveActiveClass,p=r.beforeLeave,d=r.leave,m=r.afterLeave,g=r.leaveCancelled,v=r.delayLeave,y=r.duration,b=!1!==a&&!G,x=zo(d),w=h(c(y)?y.leave:y),_=n._leaveCb=P(function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[e.key]=null),b&&(Lo(n,l),Lo(n,f)),_.cancelled?(b&&Lo(n,u),g&&g(n)):(t(),m&&m(n)),n._leaveCb=null});v?v(k):k()}function k(){_.cancelled||(!e.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[e.key]=e),p&&p(n),b&&(jo(n,u),jo(n,f),No(function(){Lo(n,u),_.cancelled||(jo(n,l),x||(Ho(w)?setTimeout(_,w):Do(n,s,_)))})),d&&d(n,_),b||x||_())}}function Ho(e){return\"number\"==typeof e&&!isNaN(e)}function zo(e){if(o(e))return!1;var t=e.fns;return i(t)?zo(Array.isArray(t)?t[0]:t):(e._length||e.length)>1}function Bo(e,t){!0!==t.data.show&&Mo(t)}var Uo=function(e){var t,n,r={},c=e.modules,u=e.nodeOps;for(t=0;t<rr.length;++t)for(r[rr[t]]=[],n=0;n<c.length;++n)i(c[n][rr[t]])&&r[rr[t]].push(c[n][rr[t]]);function l(e){var t=u.parentNode(e);i(t)&&u.removeChild(t,e)}function f(e,t,n,o,s,c,l){if(i(e.elm)&&i(c)&&(e=c[l]=be(e)),e.isRootInsert=!s,!function(e,t,n,o){var s=e.data;if(i(s)){var c=i(e.componentInstance)&&s.keepAlive;if(i(s=s.hook)&&i(s=s.init)&&s(e,!1),i(e.componentInstance))return p(e,t),d(n,e.elm,o),a(c)&&function(e,t,n,o){for(var a,s=e;s.componentInstance;)if(i(a=(s=s.componentInstance._vnode).data)&&i(a=a.transition)){for(a=0;a<r.activate.length;++a)r.activate[a](nr,s);t.push(s);break}d(n,e.elm,o)}(e,t,n,o),!0}}(e,t,n,o)){var f=e.data,m=e.children,g=e.tag;i(g)?(e.elm=e.ns?u.createElementNS(e.ns,g):u.createElement(g,e),y(e),h(e,m,t),i(f)&&v(e,t),d(n,e.elm,o)):a(e.isComment)?(e.elm=u.createComment(e.text),d(n,e.elm,o)):(e.elm=u.createTextNode(e.text),d(n,e.elm,o))}}function p(e,t){i(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,g(e)?(v(e,t),y(e)):(tr(e),t.push(e))}function d(e,t,n){i(e)&&(i(n)?u.parentNode(n)===e&&u.insertBefore(e,t,n):u.appendChild(e,t))}function h(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)f(t[r],n,e.elm,null,!0,t,r);else s(e.text)&&u.appendChild(e.elm,u.createTextNode(String(e.text)))}function g(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return i(e.tag)}function v(e,n){for(var o=0;o<r.create.length;++o)r.create[o](nr,e);i(t=e.data.hook)&&(i(t.create)&&t.create(nr,e),i(t.insert)&&n.push(e))}function y(e){var t;if(i(t=e.fnScopeId))u.setStyleScope(e.elm,t);else for(var n=e;n;)i(t=n.context)&&i(t=t.$options._scopeId)&&u.setStyleScope(e.elm,t),n=n.parent;i(t=Gt)&&t!==e.context&&t!==e.fnContext&&i(t=t.$options._scopeId)&&u.setStyleScope(e.elm,t)}function b(e,t,n,r,o,i){for(;r<=o;++r)f(n[r],i,e,t,!1,n,r)}function x(e){var t,n,o=e.data;if(i(o))for(i(t=o.hook)&&i(t=t.destroy)&&t(e),t=0;t<r.destroy.length;++t)r.destroy[t](e);if(i(t=e.children))for(n=0;n<e.children.length;++n)x(e.children[n])}function w(e,t,n,r){for(;n<=r;++n){var o=t[n];i(o)&&(i(o.tag)?(_(o),x(o)):l(o.elm))}}function _(e,t){if(i(t)||i(e.data)){var n,o=r.remove.length+1;for(i(t)?t.listeners+=o:t=function(e,t){function n(){0==--n.listeners&&l(e)}return n.listeners=t,n}(e.elm,o),i(n=e.componentInstance)&&i(n=n._vnode)&&i(n.data)&&_(n,t),n=0;n<r.remove.length;++n)r.remove[n](e,t);i(n=e.data.hook)&&i(n=n.remove)?n(e,t):t()}else l(e.elm)}function k(e,t,n,r){for(var o=n;o<r;o++){var a=t[o];if(i(a)&&or(e,a))return o}}function C(e,t,n,s,c,l){if(e!==t){i(t.elm)&&i(s)&&(t=s[c]=be(t));var p=t.elm=e.elm;if(a(e.isAsyncPlaceholder))i(t.asyncFactory.resolved)?E(e.elm,t,n):t.isAsyncPlaceholder=!0;else if(a(t.isStatic)&&a(e.isStatic)&&t.key===e.key&&(a(t.isCloned)||a(t.isOnce)))t.componentInstance=e.componentInstance;else{var d,h=t.data;i(h)&&i(d=h.hook)&&i(d=d.prepatch)&&d(e,t);var m=e.children,v=t.children;if(i(h)&&g(t)){for(d=0;d<r.update.length;++d)r.update[d](e,t);i(d=h.hook)&&i(d=d.update)&&d(e,t)}o(t.text)?i(m)&&i(v)?m!==v&&function(e,t,n,r,a){for(var s,c,l,p=0,d=0,h=t.length-1,m=t[0],g=t[h],v=n.length-1,y=n[0],x=n[v],_=!a;p<=h&&d<=v;)o(m)?m=t[++p]:o(g)?g=t[--h]:or(m,y)?(C(m,y,r,n,d),m=t[++p],y=n[++d]):or(g,x)?(C(g,x,r,n,v),g=t[--h],x=n[--v]):or(m,x)?(C(m,x,r,n,v),_&&u.insertBefore(e,m.elm,u.nextSibling(g.elm)),m=t[++p],x=n[--v]):or(g,y)?(C(g,y,r,n,d),_&&u.insertBefore(e,g.elm,m.elm),g=t[--h],y=n[++d]):(o(s)&&(s=ir(t,p,h)),o(c=i(y.key)?s[y.key]:k(y,t,p,h))?f(y,r,e,m.elm,!1,n,d):or(l=t[c],y)?(C(l,y,r,n,d),t[c]=void 0,_&&u.insertBefore(e,l.elm,m.elm)):f(y,r,e,m.elm,!1,n,d),y=n[++d]);p>h?b(e,o(n[v+1])?null:n[v+1].elm,n,d,v,r):d>v&&w(0,t,p,h)}(p,m,v,n,l):i(v)?(i(e.text)&&u.setTextContent(p,\"\"),b(p,null,v,0,v.length-1,n)):i(m)?w(0,m,0,m.length-1):i(e.text)&&u.setTextContent(p,\"\"):e.text!==t.text&&u.setTextContent(p,t.text),i(h)&&i(d=h.hook)&&i(d=d.postpatch)&&d(e,t)}}}function A(e,t,n){if(a(n)&&i(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var S=m(\"attrs,class,staticClass,staticStyle,key\");function E(e,t,n,r){var o,s=t.tag,c=t.data,u=t.children;if(r=r||c&&c.pre,t.elm=e,a(t.isComment)&&i(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(i(c)&&(i(o=c.hook)&&i(o=o.init)&&o(t,!0),i(o=t.componentInstance)))return p(t,n),!0;if(i(s)){if(i(u))if(e.hasChildNodes())if(i(o=c)&&i(o=o.domProps)&&i(o=o.innerHTML)){if(o!==e.innerHTML)return!1}else{for(var l=!0,f=e.firstChild,d=0;d<u.length;d++){if(!f||!E(f,u[d],n,r)){l=!1;break}f=f.nextSibling}if(!l||f)return!1}else h(t,u,n);if(i(c)){var m=!1;for(var g in c)if(!S(g)){m=!0,v(t,n);break}!m&&c.class&&rt(c.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,t,n,s){if(!o(t)){var c,l=!1,p=[];if(o(e))l=!0,f(t,p);else{var d=i(e.nodeType);if(!d&&or(e,t))C(e,t,p,null,null,s);else{if(d){if(1===e.nodeType&&e.hasAttribute(R)&&(e.removeAttribute(R),n=!0),a(n)&&E(e,t,p))return A(t,p,!0),e;c=e,e=new me(u.tagName(c).toLowerCase(),{},[],void 0,c)}var h=e.elm,m=u.parentNode(h);if(f(t,p,h._leaveCb?null:m,u.nextSibling(h)),i(t.parent))for(var v=t.parent,y=g(t);v;){for(var b=0;b<r.destroy.length;++b)r.destroy[b](v);if(v.elm=t.elm,y){for(var _=0;_<r.create.length;++_)r.create[_](nr,v);var k=v.data.hook.insert;if(k.merged)for(var S=1;S<k.fns.length;S++)k.fns[S]()}else tr(v);v=v.parent}i(m)?w(0,[e],0,0):i(e.tag)&&x(e)}}return A(t,p,l),t.elm}i(e)&&x(e)}}({nodeOps:Yn,modules:[gr,Cr,no,io,vo,W?{create:Bo,activate:Bo,remove:function(e,t){!0!==e.data.show?qo(e,t):t()}}:{}].concat(pr)});G&&document.addEventListener(\"selectionchange\",function(){var e=document.activeElement;e&&e.vmodel&&Qo(e,\"input\")});var Vo={inserted:function(e,t,n,r){\"select\"===n.tag?(r.elm&&!r.elm._vOptions?st(n,\"postpatch\",function(){Vo.componentUpdated(e,t,n)}):Wo(e,t,n.context),e._vOptions=[].map.call(e.options,Xo)):(\"textarea\"===n.tag||Gn(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener(\"compositionstart\",Zo),e.addEventListener(\"compositionend\",Go),e.addEventListener(\"change\",Go),G&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if(\"select\"===n.tag){Wo(e,t,n.context);var r=e._vOptions,o=e._vOptions=[].map.call(e.options,Xo);o.some(function(e,t){return!D(e,r[t])})&&(e.multiple?t.value.some(function(e){return Jo(e,o)}):t.value!==t.oldValue&&Jo(t.value,o))&&Qo(e,\"change\")}}};function Wo(e,t,n){Ko(e,t,n),(Z||Q)&&setTimeout(function(){Ko(e,t,n)},0)}function Ko(e,t,n){var r=t.value,o=e.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=e.options.length;s<c;s++)if(a=e.options[s],o)i=I(r,Xo(a))>-1,a.selected!==i&&(a.selected=i);else if(D(Xo(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));o||(e.selectedIndex=-1)}}function Jo(e,t){return t.every(function(t){return!D(t,e)})}function Xo(e){return\"_value\"in e?e._value:e.value}function Zo(e){e.target.composing=!0}function Go(e){e.target.composing&&(e.target.composing=!1,Qo(e.target,\"input\"))}function Qo(e,t){var n=document.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Yo(e){return!e.componentInstance||e.data&&e.data.transition?e:Yo(e.componentInstance._vnode)}var ei={model:Vo,show:{bind:function(e,t,n){var r=t.value,o=(n=Yo(n)).data&&n.data.transition,i=e.__vOriginalDisplay=\"none\"===e.style.display?\"\":e.style.display;r&&o?(n.data.show=!0,Mo(n,function(){e.style.display=i})):e.style.display=r?i:\"none\"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Yo(n)).data&&n.data.transition?(n.data.show=!0,r?Mo(n,function(){e.style.display=e.__vOriginalDisplay}):qo(n,function(){e.style.display=\"none\"})):e.style.display=r?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,o){o||(e.style.display=e.__vOriginalDisplay)}}},ti={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ni(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?ni(Wt(t.children)):e}function ri(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[k(i)]=o[i];return t}function oi(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var ii=function(e){return e.tag||Vt(e)},ai=function(e){return\"show\"===e.name},si={name:\"transition\",props:ti,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(ii)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var i=ni(o);if(!i)return o;if(this._leaving)return oi(e,o);var a=\"__transition-\"+this._uid+\"-\";i.key=null==i.key?i.isComment?a+\"comment\":a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var c=(i.data||(i.data={})).transition=ri(this),u=this._vnode,l=ni(u);if(i.data.directives&&i.data.directives.some(ai)&&(i.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(i,l)&&!Vt(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=O({},c);if(\"out-in\"===r)return this._leaving=!0,st(f,\"afterLeave\",function(){t._leaving=!1,t.$forceUpdate()}),oi(e,o);if(\"in-out\"===r){if(Vt(i))return u;var p,d=function(){p()};st(c,\"afterEnter\",d),st(c,\"enterCancelled\",d),st(f,\"delayLeave\",function(e){p=e})}}return o}}},ci=O({tag:String,moveClass:String},ti);function ui(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function li(e){e.data.newPos=e.elm.getBoundingClientRect()}function fi(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,o=t.top-n.top;if(r||o){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform=\"translate(\"+r+\"px,\"+o+\"px)\",i.transitionDuration=\"0s\"}}delete ci.mode;var pi={Transition:si,TransitionGroup:{props:ci,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var o=Qt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,o(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=ri(this),s=0;s<o.length;s++){var c=o[s];c.tag&&null!=c.key&&0!==String(c.key).indexOf(\"__vlist\")&&(i.push(c),n[c.key]=c,(c.data||(c.data={})).transition=a)}if(r){for(var u=[],l=[],f=0;f<r.length;f++){var p=r[f];p.data.transition=a,p.data.pos=p.elm.getBoundingClientRect(),n[p.key]?u.push(p):l.push(p)}this.kept=e(t,null,u),this.removed=l}return e(t,null,i)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||\"v\")+\"-move\";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach(ui),e.forEach(li),e.forEach(fi),this._reflow=document.body.offsetHeight,e.forEach(function(e){if(e.data.moved){var n=e.elm,r=n.style;jo(n,t),r.transform=r.WebkitTransform=r.transitionDuration=\"\",n.addEventListener(Eo,n._moveCb=function e(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Eo,e),n._moveCb=null,Lo(n,t))})}}))},methods:{hasMove:function(e,t){if(!ko)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach(function(e){xo(n,e)}),bo(n,t),n.style.display=\"none\",this.$el.appendChild(n);var r=Po(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}}};Cn.config.mustUseProp=Ln,Cn.config.isReservedTag=Jn,Cn.config.isReservedAttr=Nn,Cn.config.getTagNamespace=Xn,Cn.config.isUnknownElement=function(e){if(!W)return!0;if(Jn(e))return!1;if(e=e.toLowerCase(),null!=Zn[e])return Zn[e];var t=document.createElement(e);return e.indexOf(\"-\")>-1?Zn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Zn[e]=/HTMLUnknownElement/.test(t.toString())},O(Cn.options.directives,ei),O(Cn.options.components,pi),Cn.prototype.__patch__=W?Uo:N,Cn.prototype.$mount=function(e,t){return function(e,t,n){return e.$el=t,e.$options.render||(e.$options.render=ve),tn(e,\"beforeMount\"),new hn(e,function(){e._update(e._render(),n)},N,{before:function(){e._isMounted&&!e._isDestroyed&&tn(e,\"beforeUpdate\")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,tn(e,\"mounted\")),e}(this,e=e&&W?Qn(e):void 0,t)},W&&setTimeout(function(){q.devtools&&ie&&ie.emit(\"init\",Cn)},0);var di,hi=/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,mi=/[-.*+?^${}()|[\\]\\/\\\\]/g,gi=w(function(e){var t=e[0].replace(mi,\"\\\\$&\"),n=e[1].replace(mi,\"\\\\$&\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")}),vi={staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n=Rr(e,\"class\");n&&(e.staticClass=JSON.stringify(n));var r=Pr(e,\"class\",!1);r&&(e.classBinding=r)},genData:function(e){var t=\"\";return e.staticClass&&(t+=\"staticClass:\"+e.staticClass+\",\"),e.classBinding&&(t+=\"class:\"+e.classBinding+\",\"),t}},yi={staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n=Rr(e,\"style\");n&&(e.staticStyle=JSON.stringify(ao(n)));var r=Pr(e,\"style\",!1);r&&(e.styleBinding=r)},genData:function(e){var t=\"\";return e.staticStyle&&(t+=\"staticStyle:\"+e.staticStyle+\",\"),e.styleBinding&&(t+=\"style:(\"+e.styleBinding+\"),\"),t}},bi=m(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),xi=m(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),wi=m(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),_i=/^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,ki=/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,Ci=\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\"+H.source+\"]*\",Ai=\"((?:\"+Ci+\"\\\\:)?\"+Ci+\")\",Si=new RegExp(\"^<\"+Ai),Ei=/^\\s*(\\/?)>/,Ti=new RegExp(\"^<\\\\/\"+Ai+\"[^>]*>\"),Oi=/^<!DOCTYPE [^>]+>/i,$i=/^<!\\--/,Ni=/^<!\\[/,ji=m(\"script,style,textarea\",!0),Li={},Di={\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&amp;\":\"&\",\"&#10;\":\"\\n\",\"&#9;\":\"\\t\",\"&#39;\":\"'\"},Ii=/&(?:lt|gt|quot|amp|#39);/g,Pi=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ri=m(\"pre,textarea\",!0),Fi=function(e,t){return e&&Ri(e)&&\"\\n\"===t[0]};function Mi(e,t){var n=t?Pi:Ii;return e.replace(n,function(e){return Di[e]})}var qi,Hi,zi,Bi,Ui,Vi,Wi,Ki,Ji=/^@|^v-on:/,Xi=/^v-|^@|^:/,Zi=/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Gi=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,Qi=/^\\(|\\)$/g,Yi=/^\\[.*\\]$/,ea=/:(.*)$/,ta=/^:|^\\.|^v-bind:/,na=/\\.[^.\\]]+(?=[^\\]]*$)/g,ra=/^v-slot(:|$)|^#/,oa=/[\\r\\n]/,ia=/\\s+/g,aa=w(function(e){return(di=di||document.createElement(\"div\")).innerHTML=e,di.textContent}),sa=\"_empty_\";function ca(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:function(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n].name]=e[n].value;return t}(t),rawAttrsMap:{},parent:n,children:[]}}function ua(e,t){var n,r;(r=Pr(n=e,\"key\"))&&(n.key=r),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=Pr(e,\"ref\");t&&(e.ref=t,e.refInFor=function(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;\"template\"===e.tag?(t=Rr(e,\"scope\"),e.slotScope=t||Rr(e,\"slot-scope\")):(t=Rr(e,\"slot-scope\"))&&(e.slotScope=t);var n=Pr(e,\"slot\");if(n&&(e.slotTarget='\"\"'===n?'\"default\"':n,e.slotTargetDynamic=!(!e.attrsMap[\":slot\"]&&!e.attrsMap[\"v-bind:slot\"]),\"template\"===e.tag||e.slotScope||Nr(e,\"slot\",n,function(e,t){return e.rawAttrsMap[\":\"+t]||e.rawAttrsMap[\"v-bind:\"+t]||e.rawAttrsMap[t]}(e,\"slot\"))),\"template\"===e.tag){var r=Fr(e,ra);if(r){var o=pa(r),i=o.name,a=o.dynamic;e.slotTarget=i,e.slotTargetDynamic=a,e.slotScope=r.value||sa}}else{var s=Fr(e,ra);if(s){var c=e.scopedSlots||(e.scopedSlots={}),u=pa(s),l=u.name,f=u.dynamic,p=c[l]=ca(\"template\",[],e);p.slotTarget=l,p.slotTargetDynamic=f,p.children=e.children.filter(function(e){if(!e.slotScope)return e.parent=p,!0}),p.slotScope=s.value||sa,e.children=[],e.plain=!1}}}(e),function(e){\"slot\"===e.tag&&(e.slotName=Pr(e,\"name\"))}(e),function(e){var t;(t=Pr(e,\"is\"))&&(e.component=t),null!=Rr(e,\"inline-template\")&&(e.inlineTemplate=!0)}(e);for(var o=0;o<zi.length;o++)e=zi[o](e,t)||e;return function(e){var t,n,r,o,i,a,s,c,u=e.attrsList;for(t=0,n=u.length;t<n;t++)if(r=o=u[t].name,i=u[t].value,Xi.test(r))if(e.hasBindings=!0,(a=da(r.replace(Xi,\"\")))&&(r=r.replace(na,\"\")),ta.test(r))r=r.replace(ta,\"\"),i=Sr(i),(c=Yi.test(r))&&(r=r.slice(1,-1)),a&&(a.prop&&!c&&\"innerHtml\"===(r=k(r))&&(r=\"innerHTML\"),a.camel&&!c&&(r=k(r)),a.sync&&(s=Hr(i,\"$event\"),c?Ir(e,'\"update:\"+('+r+\")\",s,null,!1,0,u[t],!0):(Ir(e,\"update:\"+k(r),s,null,!1,0,u[t]),S(r)!==k(r)&&Ir(e,\"update:\"+S(r),s,null,!1,0,u[t])))),a&&a.prop||!e.component&&Wi(e.tag,e.attrsMap.type,r)?$r(e,r,i,u[t],c):Nr(e,r,i,u[t],c);else if(Ji.test(r))r=r.replace(Ji,\"\"),(c=Yi.test(r))&&(r=r.slice(1,-1)),Ir(e,r,i,a,!1,0,u[t],c);else{var l=(r=r.replace(Xi,\"\")).match(ea),f=l&&l[1];c=!1,f&&(r=r.slice(0,-(f.length+1)),Yi.test(f)&&(f=f.slice(1,-1),c=!0)),Lr(e,r,o,i,f,c,a,u[t])}else Nr(e,r,JSON.stringify(i),u[t]),!e.component&&\"muted\"===r&&Wi(e.tag,e.attrsMap.type,r)&&$r(e,r,\"true\",u[t])}(e),e}function la(e){var t;if(t=Rr(e,\"v-for\")){var n=function(e){var t=e.match(Zi);if(t){var n={};n.for=t[2].trim();var r=t[1].trim().replace(Qi,\"\"),o=r.match(Gi);return o?(n.alias=r.replace(Gi,\"\").trim(),n.iterator1=o[1].trim(),o[2]&&(n.iterator2=o[2].trim())):n.alias=r,n}}(t);n&&O(e,n)}}function fa(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function pa(e){var t=e.name.replace(ra,\"\");return t||\"#\"!==e.name[0]&&(t=\"default\"),Yi.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'\"'+t+'\"',dynamic:!1}}function da(e){var t=e.match(na);if(t){var n={};return t.forEach(function(e){n[e.slice(1)]=!0}),n}}var ha=/^xmlns:NS\\d+/,ma=/^NS\\d+:/;function ga(e){return ca(e.tag,e.attrsList.slice(),e.parent)}var va,ya,ba=[vi,yi,{preTransformNode:function(e,t){if(\"input\"===e.tag){var n,r=e.attrsMap;if(!r[\"v-model\"])return;if((r[\":type\"]||r[\"v-bind:type\"])&&(n=Pr(e,\"type\")),r.type||n||!r[\"v-bind\"]||(n=\"(\"+r[\"v-bind\"]+\").type\"),n){var o=Rr(e,\"v-if\",!0),i=o?\"&&(\"+o+\")\":\"\",a=null!=Rr(e,\"v-else\",!0),s=Rr(e,\"v-else-if\",!0),c=ga(e);la(c),jr(c,\"type\",\"checkbox\"),ua(c,t),c.processed=!0,c.if=\"(\"+n+\")==='checkbox'\"+i,fa(c,{exp:c.if,block:c});var u=ga(e);Rr(u,\"v-for\",!0),jr(u,\"type\",\"radio\"),ua(u,t),fa(c,{exp:\"(\"+n+\")==='radio'\"+i,block:u});var l=ga(e);return Rr(l,\"v-for\",!0),jr(l,\":type\",n),ua(l,t),fa(c,{exp:o,block:l}),a?c.else=!0:s&&(c.elseif=s),c}}}}],xa={expectHTML:!0,modules:ba,directives:{model:function(e,t,n){var r=t.value,o=t.modifiers,i=e.tag,a=e.attrsMap.type;if(e.component)return qr(e,r,o),!1;if(\"select\"===i)!function(e,t,n){var r='var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return '+(o&&o.number?\"_n(val)\":\"val\")+\"});\";Ir(e,\"change\",r=r+\" \"+Hr(t,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),null,!0)}(e,r);else if(\"input\"===i&&\"checkbox\"===a)!function(e,t,n){var r=n&&n.number,o=Pr(e,\"value\")||\"null\",i=Pr(e,\"true-value\")||\"true\",a=Pr(e,\"false-value\")||\"false\";$r(e,\"checked\",\"Array.isArray(\"+t+\")?_i(\"+t+\",\"+o+\")>-1\"+(\"true\"===i?\":(\"+t+\")\":\":_q(\"+t+\",\"+i+\")\")),Ir(e,\"change\",\"var $$a=\"+t+\",$$el=$event.target,$$c=$$el.checked?(\"+i+\"):(\"+a+\");if(Array.isArray($$a)){var $$v=\"+(r?\"_n(\"+o+\")\":o)+\",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(\"+Hr(t,\"$$a.concat([$$v])\")+\")}else{$$i>-1&&(\"+Hr(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\")+\")}}else{\"+Hr(t,\"$$c\")+\"}\",null,!0)}(e,r,o);else if(\"input\"===i&&\"radio\"===a)!function(e,t,n){var r=n&&n.number,o=Pr(e,\"value\")||\"null\";$r(e,\"checked\",\"_q(\"+t+\",\"+(o=r?\"_n(\"+o+\")\":o)+\")\"),Ir(e,\"change\",Hr(t,o),null,!0)}(e,r,o);else if(\"input\"===i||\"textarea\"===i)!function(e,t,n){var r=e.attrsMap.type,o=n||{},i=o.lazy,a=o.number,s=o.trim,c=!i&&\"range\"!==r,u=i?\"change\":\"range\"===r?Jr:\"input\",l=\"$event.target.value\";s&&(l=\"$event.target.value.trim()\"),a&&(l=\"_n(\"+l+\")\");var f=Hr(t,l);c&&(f=\"if($event.target.composing)return;\"+f),$r(e,\"value\",\"(\"+t+\")\"),Ir(e,u,f,null,!0),(s||a)&&Ir(e,\"blur\",\"$forceUpdate()\")}(e,r,o);else if(!q.isReservedTag(i))return qr(e,r,o),!1;return!0},text:function(e,t){t.value&&$r(e,\"textContent\",\"_s(\"+t.value+\")\",t)},html:function(e,t){t.value&&$r(e,\"innerHTML\",\"_s(\"+t.value+\")\",t)}},isPreTag:function(e){return\"pre\"===e},isUnaryTag:bi,mustUseProp:Ln,canBeLeftOpenTag:xi,isReservedTag:Jn,getTagNamespace:Xn,staticKeys:ba.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(\",\")},wa=w(function(e){return m(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))});var _a=/^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(/,ka=/\\([^)]*?\\);*$/,Ca=/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,Aa={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Sa={esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},Ea=function(e){return\"if(\"+e+\")return null;\"},Ta={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:Ea(\"$event.target !== $event.currentTarget\"),ctrl:Ea(\"!$event.ctrlKey\"),shift:Ea(\"!$event.shiftKey\"),alt:Ea(\"!$event.altKey\"),meta:Ea(\"!$event.metaKey\"),left:Ea(\"'button' in $event && $event.button !== 0\"),middle:Ea(\"'button' in $event && $event.button !== 1\"),right:Ea(\"'button' in $event && $event.button !== 2\")};function Oa(e,t){var n=t?\"nativeOn:\":\"on:\",r=\"\",o=\"\";for(var i in e){var a=$a(e[i]);e[i]&&e[i].dynamic?o+=i+\",\"+a+\",\":r+='\"'+i+'\":'+a+\",\"}return r=\"{\"+r.slice(0,-1)+\"}\",o?n+\"_d(\"+r+\",[\"+o.slice(0,-1)+\"])\":n+r}function $a(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return $a(e)}).join(\",\")+\"]\";var t=Ca.test(e.value),n=_a.test(e.value),r=Ca.test(e.value.replace(ka,\"\"));if(e.modifiers){var o=\"\",i=\"\",a=[];for(var s in e.modifiers)if(Ta[s])i+=Ta[s],Aa[s]&&a.push(s);else if(\"exact\"===s){var c=e.modifiers;i+=Ea([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter(function(e){return!c[e]}).map(function(e){return\"$event.\"+e+\"Key\"}).join(\"||\"))}else a.push(s);return a.length&&(o+=\"if(!$event.type.indexOf('key')&&\"+a.map(Na).join(\"&&\")+\")return null;\"),i&&(o+=i),\"function($event){\"+o+(t?\"return \"+e.value+\"($event)\":n?\"return (\"+e.value+\")($event)\":r?\"return \"+e.value:e.value)+\"}\"}return t||n?e.value:\"function($event){\"+(r?\"return \"+e.value:e.value)+\"}\"}function Na(e){var t=parseInt(e,10);if(t)return\"$event.keyCode!==\"+t;var n=Aa[e],r=Sa[e];return\"_k($event.keyCode,\"+JSON.stringify(e)+\",\"+JSON.stringify(n)+\",$event.key,\"+JSON.stringify(r)+\")\"}var ja={on:function(e,t){e.wrapListeners=function(e){return\"_g(\"+e+\",\"+t.value+\")\"}},bind:function(e,t){e.wrapData=function(n){return\"_b(\"+n+\",'\"+e.tag+\"',\"+t.value+\",\"+(t.modifiers&&t.modifiers.prop?\"true\":\"false\")+(t.modifiers&&t.modifiers.sync?\",true\":\"\")+\")\"}},cloak:N},La=function(e){this.options=e,this.warn=e.warn||Tr,this.transforms=Or(e.modules,\"transformCode\"),this.dataGenFns=Or(e.modules,\"genData\"),this.directives=O(O({},ja),e.directives);var t=e.isReservedTag||j;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Da(e,t){var n=new La(t);return{render:\"with(this){return \"+(e?Ia(e,n):'_c(\"div\")')+\"}\",staticRenderFns:n.staticRenderFns}}function Ia(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Pa(e,t);if(e.once&&!e.onceProcessed)return Ra(e,t);if(e.for&&!e.forProcessed)return Ma(e,t);if(e.if&&!e.ifProcessed)return Fa(e,t);if(\"template\"!==e.tag||e.slotTarget||t.pre){if(\"slot\"===e.tag)return function(e,t){var n=e.slotName||'\"default\"',r=Ba(e,t),o=\"_t(\"+n+(r?\",\"+r:\"\"),i=e.attrs||e.dynamicAttrs?Wa((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:k(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap[\"v-bind\"];return!i&&!a||r||(o+=\",null\"),i&&(o+=\",\"+i),a&&(o+=(i?\"\":\",null\")+\",\"+a),o+\")\"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:Ba(t,n,!0);return\"_c(\"+e+\",\"+qa(t,n)+(r?\",\"+r:\"\")+\")\"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=qa(e,t));var o=e.inlineTemplate?null:Ba(e,t,!0);n=\"_c('\"+e.tag+\"'\"+(r?\",\"+r:\"\")+(o?\",\"+o:\"\")+\")\"}for(var i=0;i<t.transforms.length;i++)n=t.transforms[i](e,n);return n}return Ba(e,t)||\"void 0\"}function Pa(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push(\"with(this){return \"+Ia(e,t)+\"}\"),t.pre=n,\"_m(\"+(t.staticRenderFns.length-1)+(e.staticInFor?\",true\":\"\")+\")\"}function Ra(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Fa(e,t);if(e.staticInFor){for(var n=\"\",r=e.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?\"_o(\"+Ia(e,t)+\",\"+t.onceId+++\",\"+n+\")\":Ia(e,t)}return Pa(e,t)}function Fa(e,t,n,r){return e.ifProcessed=!0,function e(t,n,r,o){if(!t.length)return o||\"_e()\";var i=t.shift();return i.exp?\"(\"+i.exp+\")?\"+a(i.block)+\":\"+e(t,n,r,o):\"\"+a(i.block);function a(e){return r?r(e,n):e.once?Ra(e,n):Ia(e,n)}}(e.ifConditions.slice(),t,n,r)}function Ma(e,t,n,r){var o=e.for,i=e.alias,a=e.iterator1?\",\"+e.iterator1:\"\",s=e.iterator2?\",\"+e.iterator2:\"\";return e.forProcessed=!0,(r||\"_l\")+\"((\"+o+\"),function(\"+i+a+s+\"){return \"+(n||Ia)(e,t)+\"})\"}function qa(e,t){var n=\"{\",r=function(e,t){var n=e.directives;if(n){var r,o,i,a,s=\"directives:[\",c=!1;for(r=0,o=n.length;r<o;r++){i=n[r],a=!0;var u=t.directives[i.name];u&&(a=!!u(e,i,t.warn)),a&&(c=!0,s+='{name:\"'+i.name+'\",rawName:\"'+i.rawName+'\"'+(i.value?\",value:(\"+i.value+\"),expression:\"+JSON.stringify(i.value):\"\")+(i.arg?\",arg:\"+(i.isDynamicArg?i.arg:'\"'+i.arg+'\"'):\"\")+(i.modifiers?\",modifiers:\"+JSON.stringify(i.modifiers):\"\")+\"},\")}return c?s.slice(0,-1)+\"]\":void 0}}(e,t);r&&(n+=r+\",\"),e.key&&(n+=\"key:\"+e.key+\",\"),e.ref&&(n+=\"ref:\"+e.ref+\",\"),e.refInFor&&(n+=\"refInFor:true,\"),e.pre&&(n+=\"pre:true,\"),e.component&&(n+='tag:\"'+e.tag+'\",');for(var o=0;o<t.dataGenFns.length;o++)n+=t.dataGenFns[o](e);if(e.attrs&&(n+=\"attrs:\"+Wa(e.attrs)+\",\"),e.props&&(n+=\"domProps:\"+Wa(e.props)+\",\"),e.events&&(n+=Oa(e.events,!1)+\",\"),e.nativeEvents&&(n+=Oa(e.nativeEvents,!0)+\",\"),e.slotTarget&&!e.slotScope&&(n+=\"slot:\"+e.slotTarget+\",\"),e.scopedSlots&&(n+=function(e,t,n){var r=e.for||Object.keys(t).some(function(e){var n=t[e];return n.slotTargetDynamic||n.if||n.for||Ha(n)}),o=!!e.if;if(!r)for(var i=e.parent;i;){if(i.slotScope&&i.slotScope!==sa||i.for){r=!0;break}i.if&&(o=!0),i=i.parent}var a=Object.keys(t).map(function(e){return za(t[e],n)}).join(\",\");return\"scopedSlots:_u([\"+a+\"]\"+(r?\",null,true\":\"\")+(!r&&o?\",null,false,\"+function(e){for(var t=5381,n=e.length;n;)t=33*t^e.charCodeAt(--n);return t>>>0}(a):\"\")+\")\"}(e,e.scopedSlots,t)+\",\"),e.model&&(n+=\"model:{value:\"+e.model.value+\",callback:\"+e.model.callback+\",expression:\"+e.model.expression+\"},\"),e.inlineTemplate){var i=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Da(n,t.options);return\"inlineTemplate:{render:function(){\"+r.render+\"},staticRenderFns:[\"+r.staticRenderFns.map(function(e){return\"function(){\"+e+\"}\"}).join(\",\")+\"]}\"}}(e,t);i&&(n+=i+\",\")}return n=n.replace(/,$/,\"\")+\"}\",e.dynamicAttrs&&(n=\"_b(\"+n+',\"'+e.tag+'\",'+Wa(e.dynamicAttrs)+\")\"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ha(e){return 1===e.type&&(\"slot\"===e.tag||e.children.some(Ha))}function za(e,t){var n=e.attrsMap[\"slot-scope\"];if(e.if&&!e.ifProcessed&&!n)return Fa(e,t,za,\"null\");if(e.for&&!e.forProcessed)return Ma(e,t,za);var r=e.slotScope===sa?\"\":String(e.slotScope),o=\"function(\"+r+\"){return \"+(\"template\"===e.tag?e.if&&n?\"(\"+e.if+\")?\"+(Ba(e,t)||\"undefined\")+\":undefined\":Ba(e,t)||\"undefined\":Ia(e,t))+\"}\",i=r?\"\":\",proxy:true\";return\"{key:\"+(e.slotTarget||'\"default\"')+\",fn:\"+o+i+\"}\"}function Ba(e,t,n,r,o){var i=e.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&\"template\"!==a.tag&&\"slot\"!==a.tag){var s=n?t.maybeComponent(a)?\",1\":\",0\":\"\";return\"\"+(r||Ia)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r<e.length;r++){var o=e[r];if(1===o.type){if(Ua(o)||o.ifConditions&&o.ifConditions.some(function(e){return Ua(e.block)})){n=2;break}(t(o)||o.ifConditions&&o.ifConditions.some(function(e){return t(e.block)}))&&(n=1)}}return n}(i,t.maybeComponent):0,u=o||Va;return\"[\"+i.map(function(e){return u(e,t)}).join(\",\")+\"]\"+(c?\",\"+c:\"\")}}function Ua(e){return void 0!==e.for||\"template\"===e.tag||\"slot\"===e.tag}function Va(e,t){return 1===e.type?Ia(e,t):3===e.type&&e.isComment?(r=e,\"_e(\"+JSON.stringify(r.text)+\")\"):\"_v(\"+(2===(n=e).type?n.expression:Ka(JSON.stringify(n.text)))+\")\";var n,r}function Wa(e){for(var t=\"\",n=\"\",r=0;r<e.length;r++){var o=e[r],i=Ka(o.value);o.dynamic?n+=o.name+\",\"+i+\",\":t+='\"'+o.name+'\":'+i+\",\"}return t=\"{\"+t.slice(0,-1)+\"}\",n?\"_d(\"+t+\",[\"+n.slice(0,-1)+\"])\":t}function Ka(e){return e.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}function Ja(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),N}}new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\");var Xa,Za,Ga=(Xa=function(e,t){var n=function(e,t){qi=t.warn||Tr,Vi=t.isPreTag||j,Wi=t.mustUseProp||j,Ki=t.getTagNamespace||j,t.isReservedTag,zi=Or(t.modules,\"transformNode\"),Bi=Or(t.modules,\"preTransformNode\"),Ui=Or(t.modules,\"postTransformNode\"),Hi=t.delimiters;var n,r,o=[],i=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=ua(e,t)),o.length||e===n||n.if&&(e.elseif||e.else)&&fa(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&fa(u,{exp:a.elseif,block:a});else{if(e.slotScope){var i=e.slotTarget||'\"default\"';(r.scopedSlots||(r.scopedSlots={}))[i]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),Vi(e.tag)&&(c=!1);for(var f=0;f<Ui.length;f++)Ui[f](e,t)}function l(e){if(!c)for(var t;(t=e.children[e.children.length-1])&&3===t.type&&\" \"===t.text;)e.children.pop()}return function(e,t){for(var n,r,o=[],i=t.expectHTML,a=t.isUnaryTag||j,s=t.canBeLeftOpenTag||j,c=0;e;){if(n=e,r&&ji(r)){var u=0,l=r.toLowerCase(),f=Li[l]||(Li[l]=new RegExp(\"([\\\\s\\\\S]*?)(</\"+l+\"[^>]*>)\",\"i\")),p=e.replace(f,function(e,n,r){return u=r.length,ji(l)||\"noscript\"===l||(n=n.replace(/<!\\--([\\s\\S]*?)-->/g,\"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g,\"$1\")),Fi(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),\"\"});c+=e.length-p.length,e=p,S(l,c-u,c)}else{var d=e.indexOf(\"<\");if(0===d){if($i.test(e)){var h=e.indexOf(\"--\\x3e\");if(h>=0){t.shouldKeepComment&&t.comment(e.substring(4,h),c,c+h+3),k(h+3);continue}}if(Ni.test(e)){var m=e.indexOf(\"]>\");if(m>=0){k(m+2);continue}}var g=e.match(Oi);if(g){k(g[0].length);continue}var v=e.match(Ti);if(v){var y=c;k(v[0].length),S(v[1],y,c);continue}var b=C();if(b){A(b),Fi(b.tagName,e)&&k(1);continue}}var x=void 0,w=void 0,_=void 0;if(d>=0){for(w=e.slice(d);!(Ti.test(w)||Si.test(w)||$i.test(w)||Ni.test(w)||(_=w.indexOf(\"<\",1))<0);)d+=_,w=e.slice(d);x=e.substring(0,d)}d<0&&(x=e),x&&k(x.length),t.chars&&x&&t.chars(x,c-x.length,c)}if(e===n){t.chars&&t.chars(e);break}}function k(t){c+=t,e=e.substring(t)}function C(){var t=e.match(Si);if(t){var n,r,o={tagName:t[1],attrs:[],start:c};for(k(t[0].length);!(n=e.match(Ei))&&(r=e.match(ki)||e.match(_i));)r.start=c,k(r[0].length),r.end=c,o.attrs.push(r);if(n)return o.unarySlash=n[1],k(n[0].length),o.end=c,o}}function A(e){var n=e.tagName,c=e.unarySlash;i&&(\"p\"===r&&wi(n)&&S(r),s(n)&&r===n&&S(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p<l;p++){var d=e.attrs[p],h=d[3]||d[4]||d[5]||\"\",m=\"a\"===n&&\"href\"===d[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;f[p]={name:d[1],value:Mi(h,m)}}u||(o.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:f,start:e.start,end:e.end}),r=n),t.start&&t.start(n,f,u,e.start,e.end)}function S(e,n,i){var a,s;if(null==n&&(n=c),null==i&&(i=c),e)for(s=e.toLowerCase(),a=o.length-1;a>=0&&o[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=o.length-1;u>=a;u--)t.end&&t.end(o[u].tag,n,i);o.length=a,r=a&&o[a-1].tag}else\"br\"===s?t.start&&t.start(e,[],!0,n,i):\"p\"===s&&(t.start&&t.start(e,[],!1,n,i),t.end&&t.end(e,n,i))}S()}(e,{warn:qi,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,i,a,l,f){var p=r&&r.ns||Ki(e);Z&&\"svg\"===p&&(i=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];ha.test(r.name)||(r.name=r.name.replace(ma,\"\"),t.push(r))}return t}(i));var d,h=ca(e,i,r);p&&(h.ns=p),\"style\"!==(d=h).tag&&(\"script\"!==d.tag||d.attrsMap.type&&\"text/javascript\"!==d.attrsMap.type)||oe()||(h.forbidden=!0);for(var m=0;m<Bi.length;m++)h=Bi[m](h,t)||h;s||(function(e){null!=Rr(e,\"v-pre\")&&(e.pre=!0)}(h),h.pre&&(s=!0)),Vi(h.tag)&&(c=!0),s?function(e){var t=e.attrsList,n=t.length;if(n)for(var r=e.attrs=new Array(n),o=0;o<n;o++)r[o]={name:t[o].name,value:JSON.stringify(t[o].value)},null!=t[o].start&&(r[o].start=t[o].start,r[o].end=t[o].end);else e.pre||(e.plain=!0)}(h):h.processed||(la(h),function(e){var t=Rr(e,\"v-if\");if(t)e.if=t,fa(e,{exp:t,block:e});else{null!=Rr(e,\"v-else\")&&(e.else=!0);var n=Rr(e,\"v-else-if\");n&&(e.elseif=n)}}(h),function(e){null!=Rr(e,\"v-once\")&&(e.once=!0)}(h)),n||(n=h),a?u(h):(r=h,o.push(h))},end:function(e,t,n){var i=o[o.length-1];o.length-=1,r=o[o.length-1],u(i)},chars:function(e,t,n){if(r&&(!Z||\"textarea\"!==r.tag||r.attrsMap.placeholder!==e)){var o,u,l,f=r.children;(e=c||e.trim()?\"script\"===(o=r).tag||\"style\"===o.tag?e:aa(e):f.length?a?\"condense\"===a&&oa.test(e)?\"\":\" \":i?\" \":\"\":\"\")&&(c||\"condense\"!==a||(e=e.replace(ia,\" \")),!s&&\" \"!==e&&(u=function(e,t){var n=Hi?gi(Hi):hi;if(n.test(e)){for(var r,o,i,a=[],s=[],c=n.lastIndex=0;r=n.exec(e);){(o=r.index)>c&&(s.push(i=e.slice(c,o)),a.push(JSON.stringify(i)));var u=Sr(r[1].trim());a.push(\"_s(\"+u+\")\"),s.push({\"@binding\":u}),c=o+r[0].length}return c<e.length&&(s.push(i=e.slice(c)),a.push(JSON.stringify(i))),{expression:a.join(\"+\"),tokens:s}}}(e))?l={type:2,expression:u.expression,tokens:u.tokens,text:e}:\" \"===e&&f.length&&\" \"===f[f.length-1].text||(l={type:3,text:e}),l&&f.push(l))}},comment:function(e,t,n){if(r){var o={type:3,text:e,isComment:!0};r.children.push(o)}}}),n}(e.trim(),t);!1!==t.optimize&&function(e,t){e&&(va=wa(t.staticKeys||\"\"),ya=t.isReservedTag||j,function e(t){if(t.static=function(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings||e.if||e.for||g(e.tag)||!ya(e.tag)||function(e){for(;e.parent;){if(\"template\"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(va))))}(t),1===t.type){if(!ya(t.tag)&&\"slot\"!==t.tag&&null==t.attrsMap[\"inline-template\"])return;for(var n=0,r=t.children.length;n<r;n++){var o=t.children[n];e(o),o.static||(t.static=!1)}if(t.ifConditions)for(var i=1,a=t.ifConditions.length;i<a;i++){var s=t.ifConditions[i].block;e(s),s.static||(t.static=!1)}}}(e),function e(t,n){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=n),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var r=0,o=t.children.length;r<o;r++)e(t.children[r],n||!!t.for);if(t.ifConditions)for(var i=1,a=t.ifConditions.length;i<a;i++)e(t.ifConditions[i].block,n)}}(e,!1))}(n,t);var r=Da(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(e){function t(t,n){var r=Object.create(e),o=[],i=[];if(n)for(var a in n.modules&&(r.modules=(e.modules||[]).concat(n.modules)),n.directives&&(r.directives=O(Object.create(e.directives||null),n.directives)),n)\"modules\"!==a&&\"directives\"!==a&&(r[a]=n[a]);r.warn=function(e,t,n){(n?i:o).push(e)};var s=Xa(t.trim(),r);return s.errors=o,s.tips=i,s}return{compile:t,compileToFunctions:function(e){var t=Object.create(null);return function(n,r,o){(r=O({},r)).warn,delete r.warn;var i=r.delimiters?String(r.delimiters)+n:n;if(t[i])return t[i];var a=e(n,r),s={},c=[];return s.render=Ja(a.render,c),s.staticRenderFns=a.staticRenderFns.map(function(e){return Ja(e,c)}),t[i]=s}}(t)}})(xa),Qa=(Ga.compile,Ga.compileToFunctions);function Ya(e){return(Za=Za||document.createElement(\"div\")).innerHTML=e?'<a href=\"\\n\"/>':'<div a=\"\\n\"/>',Za.innerHTML.indexOf(\"&#10;\")>0}var es=!!W&&Ya(!1),ts=!!W&&Ya(!0),ns=w(function(e){var t=Qn(e);return t&&t.innerHTML}),rs=Cn.prototype.$mount;Cn.prototype.$mount=function(e,t){if((e=e&&Qn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if(\"string\"==typeof r)\"#\"===r.charAt(0)&&(r=ns(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var o=Qa(r,{outputSourceRange:!1,shouldDecodeNewlines:es,shouldDecodeNewlinesForHref:ts,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return rs.call(this,e,t)},Cn.compile=Qa,e.exports=Cn}).call(t,n(2),n(48).setImmediate)},function(e,t,n){(function(e){var r=void 0!==e&&e||\"undefined\"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n(49),t.setImmediate=\"undefined\"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate=\"undefined\"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(t,n(2))},function(e,t,n){(function(e,t){!function(e,n){\"use strict\";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(e);p=p&&p.setTimeout?p:e,\"[object process]\"==={}.toString.call(e.process)?r=function(e){t.nextTick(function(){h(e)})}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage(\"\",\"*\"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){h(e.data)},r=function(e){i.port2.postMessage(e)}):f&&\"onreadystatechange\"in f.createElement(\"script\")?(o=f.documentElement,r=function(e){var t=f.createElement(\"script\");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(h,0,e)}:(a=\"setImmediate$\"+Math.random()+\"$\",s=function(t){t.source===e&&\"string\"==typeof t.data&&0===t.data.indexOf(a)&&h(+t.data.slice(a.length))},e.addEventListener?e.addEventListener(\"message\",s,!1):e.attachEvent(\"onmessage\",s),r=function(t){e.postMessage(a+t,\"*\")}),p.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var o={callback:e,args:t};return u[c]=o,r(c),c++},p.clearImmediate=d}function d(e){delete u[e]}function h(e){if(l)setTimeout(h,0,e);else{var t=u[e];if(t){l=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{d(e),l=!1}}}}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(t,n(2),n(7))},function(e,t,n){var r=n(1)(n(51),n(55),!1,null,null,null);e.exports=r.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(54),o=n.n(r);n(52),t.default={name:\"algolia-search-box\",props:[\"algoliaKey\",\"algoliaIndex\",\"version\"],methods:{close:function(e){var t=e.target.id;[\"search-button\",\"search-button-icon\"].includes(t)||this.$emit(\"close\")}},mounted:function(){o()({apiKey:this.algoliaKey,indexName:this.algoliaIndex,inputSelector:\".algolia-search-input\",algoliaOptions:{facetFilters:[\"version:\"+this.version]},debug:!1}),$(\".algolia-search-input\").focus()}}},function(e,t,n){var r=n(53);\"string\"==typeof r&&(r=[[e.i,r,\"\"]]);var o={transform:void 0};n(14)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(12)(!1)).push([e.i,'.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input::-webkit-input-placeholder{color:#aaa}.searchbox__input:-ms-input-placeholder,.searchbox__input::-ms-input-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:\"\"}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;-webkit-animation-name:sbx-reset-in;animation-name:sbx-reset-in;-webkit-animation-duration:.15s;animation-duration:.15s}@-webkit-keyframes sbx-reset-in{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes sbx-reset-in{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:\"\";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:\"\";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:\"\";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:\"|\"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url(\\'data:image/svg+xml;utf8,<svg width=\"10\" height=\"10\" viewBox=\"0 0 20 38\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.49 4.31l14 16.126.002-2.624-14 16.074-1.314 1.51 3.017 2.626 1.313-1.508 14-16.075 1.142-1.313-1.14-1.313-14-16.125L3.2.18.18 2.8l1.31 1.51z\" fill-rule=\"evenodd\" fill=\"%231D3657\" /></svg>\\');content:\"\";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:\"#\";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg width=\\'168\\' height=\\'24\\' xmlns=\\'http://www.w3.org/2000/svg\\'%3E%3Cg fill=\\'none\\' fill-rule=\\'evenodd\\'%3E%3Cpath d=\\'M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z\\' fill=\\'%235468FF\\'/%3E%3Cpath d=\\'M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z\\' fill=\\'%235D6494\\'/%3E%3Cpath d=\\'M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36\\' fill=\\'%23FFF\\'/%3E%3C/g%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}',\"\"])},function(e,t,n){var r;\"undefined\"!=typeof self&&self,r=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=22)}([function(e,t,n){\"use strict\";var r,o=n(1);function i(e){return e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")}e.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(e){if(void 0===e&&(e=navigator.userAgent),/(msie|trident)/i.test(e)){var t=e.match(/(msie |rv:)(\\d+(.\\d+)?)/i);if(t)return t[2]}return!1},escapeRegExChars:function(e){return e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")},isNumber:function(e){return\"number\"==typeof e},toStr:function(e){return void 0===e||null===e?\"\":e+\"\"},cloneDeep:function(e){var t=this.mixin({},e),n=this;return this.each(t,function(e,r){e&&(n.isArray(e)?t[r]=[].concat(e):n.isObject(e)&&(t[r]=n.cloneDeep(e)))}),t},error:function(e){throw new Error(e)},every:function(e,t){var n=!0;return e?(this.each(e,function(r,o){n&&(n=t.call(null,r,o,e)&&n)}),!!n):n},any:function(e,t){var n=!1;return e?(this.each(e,function(r,o){if(t.call(null,r,o,e))return n=!0,!1}),n):n},getUniqueId:(r=0,function(){return r++}),templatify:function(e){if(this.isFunction(e))return e;var t=o.element(e);return\"SCRIPT\"===t.prop(\"tagName\")?function(){return t.text()}:function(){return String(e)}},defer:function(e){setTimeout(e,0)},noop:function(){},formatPrefix:function(e,t){return t?\"\":e+\"-\"},className:function(e,t,n){return(n?\"\":\".\")+e+t},escapeHighlightedString:function(e,t,n){t=t||\"<em>\";var r=document.createElement(\"div\");r.appendChild(document.createTextNode(t)),n=n||\"</em>\";var o=document.createElement(\"div\");o.appendChild(document.createTextNode(n));var a=document.createElement(\"div\");return a.appendChild(document.createTextNode(e)),a.innerHTML.replace(RegExp(i(r.innerHTML),\"g\"),t).replace(RegExp(i(o.innerHTML),\"g\"),n)}}},function(e,t,n){\"use strict\";e.exports={element:null}},function(e,t){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;e.exports=function(e,t,o){if(\"[object Function]\"!==r.call(t))throw new TypeError(\"iterator must be a function\");var i=e.length;if(i===+i)for(var a=0;a<i;a++)t.call(o,e[a],a,e);else for(var s in e)n.call(e,s)&&t.call(o,e[s],s,e)}},function(e,t){e.exports=function(e){return JSON.parse(JSON.stringify(e))}},function(e,t){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(e){\"object\"==typeof window&&(n=window)}e.exports=n},function(e,t,n){\"use strict\";var r=n(12);function o(e,t){var r=n(2),o=this;\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):o.stack=(new Error).stack||\"Cannot get a stacktrace, browser is too old\",this.name=\"AlgoliaSearchError\",this.message=e||\"Unknown error\",t&&r(t,function(e,t){o[t]=e})}function i(e,t){function n(){var n=Array.prototype.slice.call(arguments,0);\"string\"!=typeof n[0]&&n.unshift(t),o.apply(this,n),this.name=\"AlgoliaSearch\"+e+\"Error\"}return r(n,o),n}r(o,Error),e.exports={AlgoliaSearchError:o,UnparsableJSON:i(\"UnparsableJSON\",\"Could not parse the incoming response as JSON, see err.more for details\"),RequestTimeout:i(\"RequestTimeout\",\"Request timedout before getting a response\"),Network:i(\"Network\",\"Network issue, see err.more for details\"),JSONPScriptFail:i(\"JSONPScriptFail\",\"<script> was loaded but did not call our provided callback\"),JSONPScriptError:i(\"JSONPScriptError\",\"<script> unable to load due to an `error` event on it\"),Unknown:i(\"Unknown\",\"Unknown error occured\")}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return\"[object Array]\"==n.call(e)}},function(e,t,n){var r=n(2);e.exports=function(e,t){var n=[];return r(e,function(r,o){n.push(t(r,o,e))}),n}},function(e,t,n){(function(r){function o(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==r&&\"env\"in r&&(e=Object({NODE_ENV:\"production\"}).DEBUG),e}(t=e.exports=n(39)).log=function(){return\"object\"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var n=this.useColors;if(e[0]=(n?\"%c\":\"\")+this.namespace+(n?\" %c\":\" \")+e[0]+(n?\"%c \":\" \")+\"+\"+t.humanize(this.diff),!n)return;var r=\"color: \"+this.color;e.splice(1,0,r,\"color: inherit\");var o=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){\"%%\"!==e&&\"%c\"===e&&(i=++o)}),e.splice(i,0,r)},t.save=function(e){try{null==e?t.storage.removeItem(\"debug\"):t.storage.debug=e}catch(e){}},t.load=o,t.useColors=function(){if(\"undefined\"!=typeof window&&window.process&&\"renderer\"===window.process.type)return!0;return\"undefined\"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||\"undefined\"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)},t.storage=\"undefined\"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=[\"lightseagreen\",\"forestgreen\",\"goldenrod\",\"dodgerblue\",\"darkorchid\",\"crimson\"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return\"[UnexpectedJSONParseError]: \"+e.message}},t.enable(o())}).call(t,n(9))},function(e,t){var n,r,o=e.exports={};function i(){throw new Error(\"setTimeout has not been defined\")}function a(){throw new Error(\"clearTimeout has not been defined\")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n=\"function\"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r=\"function\"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function p(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&d())}function d(){if(!l){var e=s(p);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f<t;)c&&c[f].run();f=-1,t=u.length}c=null,l=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function m(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new h(e,t)),1!==u.length||l||s(d)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title=\"browser\",o.browser=!0,o.env={},o.argv=[],o.version=\"\",o.versions={},o.on=m,o.addListener=m,o.once=m,o.off=m,o.removeListener=m,o.removeAllListeners=m,o.emit=m,o.prependListener=m,o.prependOnceListener=m,o.listeners=function(e){return[]},o.binding=function(e){throw new Error(\"process.binding is not supported\")},o.cwd=function(){return\"/\"},o.chdir=function(e){throw new Error(\"process.chdir is not supported\")},o.umask=function(){return 0}},function(e,t,n){\"use strict\";var r=n(53),o=/\\s+/;function i(e,t,n,r){var i;if(!n)return this;for(t=t.split(o),n=r?function(e,t){return e.bind?e.bind(t):function(){e.apply(t,[].slice.call(arguments,0))}}(n,r):n,this._callbacks=this._callbacks||{};i=t.shift();)this._callbacks[i]=this._callbacks[i]||{sync:[],async:[]},this._callbacks[i][e].push(n);return this}function a(e,t,n){return function(){for(var r,o=0,i=e.length;!r&&o<i;o+=1)r=!1===e[o].apply(t,n);return!r}}e.exports={onSync:function(e,t,n){return i.call(this,\"sync\",e,t,n)},onAsync:function(e,t,n){return i.call(this,\"async\",e,t,n)},off:function(e){var t;if(!this._callbacks)return this;e=e.split(o);for(;t=e.shift();)delete this._callbacks[t];return this},trigger:function(e){var t,n,i,s,c;if(!this._callbacks)return this;e=e.split(o),i=[].slice.call(arguments,1);for(;(t=e.shift())&&(n=this._callbacks[t]);)s=a(n.sync,this,[t].concat(i)),c=a(n.async,this,[t].concat(i)),s()&&r(c);return this}}},function(e,t,n){\"use strict\";var r=n(0),o={wrapper:{position:\"relative\",display:\"inline-block\"},hint:{position:\"absolute\",top:\"0\",left:\"0\",borderColor:\"transparent\",boxShadow:\"none\",opacity:\"1\"},input:{position:\"relative\",verticalAlign:\"top\",backgroundColor:\"transparent\"},inputWithNoHint:{position:\"relative\",verticalAlign:\"top\"},dropdown:{position:\"absolute\",top:\"100%\",left:\"0\",zIndex:\"100\",display:\"none\"},suggestions:{display:\"block\"},suggestion:{whiteSpace:\"nowrap\",cursor:\"pointer\"},suggestionChild:{whiteSpace:\"normal\"},ltr:{left:\"0\",right:\"auto\"},rtl:{left:\"auto\",right:\"0\"},defaultClasses:{root:\"algolia-autocomplete\",prefix:\"aa\",noPrefix:!1,dropdownMenu:\"dropdown-menu\",input:\"input\",hint:\"hint\",suggestions:\"suggestions\",suggestion:\"suggestion\",cursor:\"cursor\",dataset:\"dataset\",empty:\"empty\"},appendTo:{wrapper:{position:\"absolute\",zIndex:\"100\",display:\"none\"},input:{},inputWithNoHint:{},dropdown:{display:\"block\"}}};r.isMsie()&&r.mixin(o.input,{backgroundImage:\"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)\"}),r.isMsie()&&r.isMsie()<=7&&r.mixin(o.input,{marginTop:\"-1px\"}),e.exports=o},function(e,t){\"function\"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){e.exports=function(e,t){return function(n,o,i){if(\"function\"==typeof n&&\"object\"==typeof o||\"object\"==typeof i)throw new r.AlgoliaSearchError(\"index.search usage is index.search(query, params, cb)\");0===arguments.length||\"function\"==typeof n?(i=n,n=\"\"):1!==arguments.length&&\"function\"!=typeof o||(i=o,o=void 0),\"object\"==typeof n&&null!==n?(o=n,n=void 0):void 0!==n&&null!==n||(n=\"\");var a,s=\"\";return void 0!==n&&(s+=e+\"=\"+encodeURIComponent(n)),void 0!==o&&(o.additionalUA&&(a=o.additionalUA,delete o.additionalUA),s=this.as._getSearchParams(o,s)),this._search(s,t,i,a)}};var r=n(5)},function(e,t,n){e.exports=function(e,t){var r=n(36),o={};return n(2)(r(e),function(n){!0!==t(n)&&(o[n]=e[n])}),o}},function(e,t){!function(t,n){var r,o,i,a;e.exports=(r=t,function(e){var t,n=1,o=Array.prototype.slice,i=e.isFunction,a=function(e){return\"string\"==typeof e},s={},c={},u=\"onfocusin\"in r,l={focus:\"focusin\",blur:\"focusout\"},f={mouseenter:\"mouseover\",mouseleave:\"mouseout\"};function p(e){return e._zid||(e._zid=n++)}function d(e,t,n,r){if((t=h(t)).ns)var o=(i=t.ns,new RegExp(\"(?:^| )\"+i.replace(\" \",\" .* ?\")+\"(?: |$)\"));var i;return(s[p(e)]||[]).filter(function(e){return e&&(!t.e||e.e==t.e)&&(!t.ns||o.test(e.ns))&&(!n||p(e.fn)===p(n))&&(!r||e.sel==r)})}function h(e){var t=(\"\"+e).split(\".\");return{e:t[0],ns:t.slice(1).sort().join(\" \")}}function m(e,t){return e.del&&!u&&e.e in l||!!t}function g(e){return f[e]||u&&l[e]||e}function v(n,r,o,i,a,c,u){var l=p(n),d=s[l]||(s[l]=[]);r.split(/\\s/).forEach(function(r){if(\"ready\"==r)return e(document).ready(o);var s=h(r);s.fn=o,s.sel=a,s.e in f&&(o=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return s.fn.apply(this,arguments)}),s.del=c;var l=c||o;s.proxy=function(e){if(!(e=k(e)).isImmediatePropagationStopped()){try{var r=Object.getOwnPropertyDescriptor(e,\"data\");r&&!r.writable||(e.data=i)}catch(e){}var o=l.apply(n,e._args==t?[e]:[e].concat(e._args));return!1===o&&(e.preventDefault(),e.stopPropagation()),o}},s.i=d.length,d.push(s),\"addEventListener\"in n&&n.addEventListener(g(s.e),s.proxy,m(s,u))})}function y(e,t,n,r,o){var i=p(e);(t||\"\").split(/\\s/).forEach(function(t){d(e,t,n,r).forEach(function(t){delete s[i][t.i],\"removeEventListener\"in e&&e.removeEventListener(g(t.e),t.proxy,m(t,o))})})}c.click=c.mousedown=c.mouseup=c.mousemove=\"MouseEvents\",e.event={add:v,remove:y},e.proxy=function(t,n){var r=2 in arguments&&o.call(arguments,2);if(i(t)){var s=function(){return t.apply(n,r?r.concat(o.call(arguments)):arguments)};return s._zid=p(t),s}if(a(n))return r?(r.unshift(t[n],t),e.proxy.apply(null,r)):e.proxy(t[n],t);throw new TypeError(\"expected function\")},e.fn.bind=function(e,t,n){return this.on(e,t,n)},e.fn.unbind=function(e,t){return this.off(e,t)},e.fn.one=function(e,t,n,r){return this.on(e,t,n,r,1)};var b=function(){return!0},x=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:\"isDefaultPrevented\",stopImmediatePropagation:\"isImmediatePropagationStopped\",stopPropagation:\"isPropagationStopped\"};function k(n,r){return!r&&n.isDefaultPrevented||(r||(r=n),e.each(_,function(e,t){var o=r[e];n[e]=function(){return this[t]=b,o&&o.apply(r,arguments)},n[t]=x}),n.timeStamp||(n.timeStamp=Date.now()),(r.defaultPrevented!==t?r.defaultPrevented:\"returnValue\"in r?!1===r.returnValue:r.getPreventDefault&&r.getPreventDefault())&&(n.isDefaultPrevented=b)),n}function C(e){var n,r={originalEvent:e};for(n in e)w.test(n)||e[n]===t||(r[n]=e[n]);return k(r,e)}e.fn.delegate=function(e,t,n){return this.on(t,e,n)},e.fn.undelegate=function(e,t,n){return this.off(t,e,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(n,r,s,c,u){var l,f,p=this;return n&&!a(n)?(e.each(n,function(e,t){p.on(e,r,s,t,u)}),p):(a(r)||i(c)||!1===c||(c=s,s=r,r=t),c!==t&&!1!==s||(c=s,s=t),!1===c&&(c=x),p.each(function(t,i){u&&(l=function(e){return y(i,e.type,c),c.apply(this,arguments)}),r&&(f=function(t){var n,a=e(t.target).closest(r,i).get(0);if(a&&a!==i)return n=e.extend(C(t),{currentTarget:a,liveFired:i}),(l||c).apply(a,[n].concat(o.call(arguments,1)))}),v(i,n,c,s,r,f||l)}))},e.fn.off=function(n,r,o){var s=this;return n&&!a(n)?(e.each(n,function(e,t){s.off(e,r,t)}),s):(a(r)||i(o)||!1===o||(o=r,r=t),!1===o&&(o=x),s.each(function(){y(this,n,o,r)}))},e.fn.trigger=function(t,n){return(t=a(t)||e.isPlainObject(t)?e.Event(t):k(t))._args=n,this.each(function(){t.type in l&&\"function\"==typeof this[t.type]?this[t.type]():\"dispatchEvent\"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var r,o;return this.each(function(i,s){(r=C(a(t)?e.Event(t):t))._args=n,r.target=s,e.each(d(s,t.type||t),function(e,t){if(o=t.proxy(r),r.isImmediatePropagationStopped())return!1})}),o},\"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error\".split(\" \").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(e,t){a(e)||(e=(t=e).type);var n=document.createEvent(c[e]||\"Events\"),r=!0;if(t)for(var o in t)\"bubbles\"==o?r=!!t[o]:n[o]=t[o];return n.initEvent(e,r,!0),k(n)}}(o=function(){var e,t,n,o,i,a,s=[],c=s.concat,u=s.filter,l=s.slice,f=r.document,p={},d={},h={\"column-count\":1,columns:1,\"font-weight\":1,\"line-height\":1,opacity:1,\"z-index\":1,zoom:1},m=/^\\s*<(\\w+|!)[^>]*>/,g=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,y=/^(?:body|html)$/i,b=/([A-Z])/g,x=[\"val\",\"css\",\"html\",\"text\",\"data\",\"width\",\"height\",\"offset\"],w=f.createElement(\"table\"),_=f.createElement(\"tr\"),k={tr:f.createElement(\"tbody\"),tbody:w,thead:w,tfoot:w,td:_,th:_,\"*\":f.createElement(\"div\")},C=/complete|loaded|interactive/,A=/^[\\w-]*$/,S={},E=S.toString,T={},O=f.createElement(\"div\"),$={tabindex:\"tabIndex\",readonly:\"readOnly\",for:\"htmlFor\",class:\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},N=Array.isArray||function(e){return e instanceof Array};function j(e){return null==e?String(e):S[E.call(e)]||\"object\"}function L(e){return\"function\"==j(e)}function D(e){return null!=e&&e==e.window}function I(e){return null!=e&&e.nodeType==e.DOCUMENT_NODE}function P(e){return\"object\"==j(e)}function R(e){return P(e)&&!D(e)&&Object.getPrototypeOf(e)==Object.prototype}function F(e){var t=!!e&&\"length\"in e&&e.length,r=n.type(e);return\"function\"!=r&&!D(e)&&(\"array\"==r||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function M(e){return e.replace(/::/g,\"/\").replace(/([A-Z]+)([A-Z][a-z])/g,\"$1_$2\").replace(/([a-z\\d])([A-Z])/g,\"$1_$2\").replace(/_/g,\"-\").toLowerCase()}function q(e){return e in d?d[e]:d[e]=new RegExp(\"(^|\\\\s)\"+e+\"(\\\\s|$)\")}function H(e,t){return\"number\"!=typeof t||h[M(e)]?t:t+\"px\"}function z(e){return\"children\"in e?l.call(e.children):n.map(e.childNodes,function(e){if(1==e.nodeType)return e})}function B(e,t){var n,r=e?e.length:0;for(n=0;n<r;n++)this[n]=e[n];this.length=r,this.selector=t||\"\"}function U(e,t){return null==t?n(e):n(e).filter(t)}function V(e,t,n,r){return L(t)?t.call(e,n,r):t}function W(e,t,n){null==n?e.removeAttribute(t):e.setAttribute(t,n)}function K(t,n){var r=t.className||\"\",o=r&&r.baseVal!==e;if(n===e)return o?r.baseVal:r;o?r.baseVal=n:t.className=n}function J(e){try{return e?\"true\"==e||\"false\"!=e&&(\"null\"==e?null:+e+\"\"==e?+e:/^[\\[\\{]/.test(e)?n.parseJSON(e):e):e}catch(t){return e}}return T.matches=function(e,t){if(!t||!e||1!==e.nodeType)return!1;var n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.matchesSelector;if(n)return n.call(e,t);var r,o=e.parentNode,i=!o;return i&&(o=O).appendChild(e),r=~T.qsa(o,t).indexOf(e),i&&O.removeChild(e),r},i=function(e){return e.replace(/-+(.)?/g,function(e,t){return t?t.toUpperCase():\"\"})},a=function(e){return u.call(e,function(t,n){return e.indexOf(t)==n})},T.fragment=function(t,r,o){var i,a,s;return g.test(t)&&(i=n(f.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(v,\"<$1></$2>\")),r===e&&(r=m.test(t)&&RegExp.$1),r in k||(r=\"*\"),(s=k[r]).innerHTML=\"\"+t,i=n.each(l.call(s.childNodes),function(){s.removeChild(this)})),R(o)&&(a=n(i),n.each(o,function(e,t){x.indexOf(e)>-1?a[e](t):a.attr(e,t)})),i},T.Z=function(e,t){return new B(e,t)},T.isZ=function(e){return e instanceof T.Z},T.init=function(t,r){var o,i;if(!t)return T.Z();if(\"string\"==typeof t)if(\"<\"==(t=t.trim())[0]&&m.test(t))o=T.fragment(t,RegExp.$1,r),t=null;else{if(r!==e)return n(r).find(t);o=T.qsa(f,t)}else{if(L(t))return n(f).ready(t);if(T.isZ(t))return t;if(N(t))i=t,o=u.call(i,function(e){return null!=e});else if(P(t))o=[t],t=null;else if(m.test(t))o=T.fragment(t.trim(),RegExp.$1,r),t=null;else{if(r!==e)return n(r).find(t);o=T.qsa(f,t)}}return T.Z(o,t)},(n=function(e,t){return T.init(e,t)}).extend=function(n){var r,o=l.call(arguments,1);return\"boolean\"==typeof n&&(r=n,n=o.shift()),o.forEach(function(o){!function n(r,o,i){for(t in o)i&&(R(o[t])||N(o[t]))?(R(o[t])&&!R(r[t])&&(r[t]={}),N(o[t])&&!N(r[t])&&(r[t]=[]),n(r[t],o[t],i)):o[t]!==e&&(r[t]=o[t])}(n,o,r)}),n},T.qsa=function(e,t){var n,r=\"#\"==t[0],o=!r&&\".\"==t[0],i=r||o?t.slice(1):t,a=A.test(i);return e.getElementById&&a&&r?(n=e.getElementById(i))?[n]:[]:1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType?[]:l.call(a&&!r&&e.getElementsByClassName?o?e.getElementsByClassName(i):e.getElementsByTagName(t):e.querySelectorAll(t))},n.contains=f.documentElement.contains?function(e,t){return e!==t&&e.contains(t)}:function(e,t){for(;t&&(t=t.parentNode);)if(t===e)return!0;return!1},n.type=j,n.isFunction=L,n.isWindow=D,n.isArray=N,n.isPlainObject=R,n.isEmptyObject=function(e){var t;for(t in e)return!1;return!0},n.isNumeric=function(e){var t=Number(e),n=typeof e;return null!=e&&\"boolean\"!=n&&(\"string\"!=n||e.length)&&!isNaN(t)&&isFinite(t)||!1},n.inArray=function(e,t,n){return s.indexOf.call(t,e,n)},n.camelCase=i,n.trim=function(e){return null==e?\"\":String.prototype.trim.call(e)},n.uuid=0,n.support={},n.expr={},n.noop=function(){},n.map=function(e,t){var r,o,i,a,s=[];if(F(e))for(o=0;o<e.length;o++)null!=(r=t(e[o],o))&&s.push(r);else for(i in e)null!=(r=t(e[i],i))&&s.push(r);return(a=s).length>0?n.fn.concat.apply([],a):a},n.each=function(e,t){var n,r;if(F(e)){for(n=0;n<e.length;n++)if(!1===t.call(e[n],n,e[n]))return e}else for(r in e)if(!1===t.call(e[r],r,e[r]))return e;return e},n.grep=function(e,t){return u.call(e,t)},r.JSON&&(n.parseJSON=JSON.parse),n.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(e,t){S[\"[object \"+t+\"]\"]=t.toLowerCase()}),n.fn={constructor:T.Z,length:0,forEach:s.forEach,reduce:s.reduce,push:s.push,sort:s.sort,splice:s.splice,indexOf:s.indexOf,concat:function(){var e,t,n=[];for(e=0;e<arguments.length;e++)t=arguments[e],n[e]=T.isZ(t)?t.toArray():t;return c.apply(T.isZ(this)?this.toArray():this,n)},map:function(e){return n(n.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return n(l.apply(this,arguments))},ready:function(e){return C.test(f.readyState)&&f.body?e(n):f.addEventListener(\"DOMContentLoaded\",function(){e(n)},!1),this},get:function(t){return t===e?l.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(e){return s.every.call(this,function(t,n){return!1!==e.call(t,n,t)}),this},filter:function(e){return L(e)?this.not(this.not(e)):n(u.call(this,function(t){return T.matches(t,e)}))},add:function(e,t){return n(a(this.concat(n(e,t))))},is:function(e){return this.length>0&&T.matches(this[0],e)},not:function(t){var r=[];if(L(t)&&t.call!==e)this.each(function(e){t.call(this,e)||r.push(this)});else{var o=\"string\"==typeof t?this.filter(t):F(t)&&L(t.item)?l.call(t):n(t);this.forEach(function(e){o.indexOf(e)<0&&r.push(e)})}return n(r)},has:function(e){return this.filter(function(){return P(e)?n.contains(this,e):n(this).find(e).size()})},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){var e=this[0];return e&&!P(e)?e:n(e)},last:function(){var e=this[this.length-1];return e&&!P(e)?e:n(e)},find:function(e){var t=this;return e?\"object\"==typeof e?n(e).filter(function(){var e=this;return s.some.call(t,function(t){return n.contains(t,e)})}):1==this.length?n(T.qsa(this[0],e)):this.map(function(){return T.qsa(this,e)}):n()},closest:function(e,t){var r=[],o=\"object\"==typeof e&&n(e);return this.each(function(n,i){for(;i&&!(o?o.indexOf(i)>=0:T.matches(i,e));)i=i!==t&&!I(i)&&i.parentNode;i&&r.indexOf(i)<0&&r.push(i)}),n(r)},parents:function(e){for(var t=[],r=this;r.length>0;)r=n.map(r,function(e){if((e=e.parentNode)&&!I(e)&&t.indexOf(e)<0)return t.push(e),e});return U(t,e)},parent:function(e){return U(a(this.pluck(\"parentNode\")),e)},children:function(e){return U(this.map(function(){return z(this)}),e)},contents:function(){return this.map(function(){return this.contentDocument||l.call(this.childNodes)})},siblings:function(e){return U(this.map(function(e,t){return u.call(z(t.parentNode),function(e){return e!==t})}),e)},empty:function(){return this.each(function(){this.innerHTML=\"\"})},pluck:function(e){return n.map(this,function(t){return t[e]})},show:function(){return this.each(function(){\"none\"==this.style.display&&(this.style.display=\"\"),\"none\"==getComputedStyle(this,\"\").getPropertyValue(\"display\")&&(this.style.display=function(e){var t,n;p[e]||(t=f.createElement(e),f.body.appendChild(t),n=getComputedStyle(t,\"\").getPropertyValue(\"display\"),t.parentNode.removeChild(t),\"none\"==n&&(n=\"block\"),p[e]=n);return p[e]}(this.nodeName))})},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){var t=L(e);if(this[0]&&!t)var r=n(e).get(0),o=r.parentNode||this.length>1;return this.each(function(i){n(this).wrapAll(t?e.call(this,i):o?r.cloneNode(!0):r)})},wrapAll:function(e){if(this[0]){var t;for(n(this[0]).before(e=n(e));(t=e.children()).length;)e=t.first();n(e).append(this)}return this},wrapInner:function(e){var t=L(e);return this.each(function(r){var o=n(this),i=o.contents(),a=t?e.call(this,r):e;i.length?i.wrapAll(a):o.append(a)})},unwrap:function(){return this.parent().each(function(){n(this).replaceWith(n(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css(\"display\",\"none\")},toggle:function(t){return this.each(function(){var r=n(this);(t===e?\"none\"==r.css(\"display\"):t)?r.show():r.hide()})},prev:function(e){return n(this.pluck(\"previousElementSibling\")).filter(e||\"*\")},next:function(e){return n(this.pluck(\"nextElementSibling\")).filter(e||\"*\")},html:function(e){return 0 in arguments?this.each(function(t){var r=this.innerHTML;n(this).empty().append(V(this,e,t,r))}):0 in this?this[0].innerHTML:null},text:function(e){return 0 in arguments?this.each(function(t){var n=V(this,e,t,this.textContent);this.textContent=null==n?\"\":\"\"+n}):0 in this?this.pluck(\"textContent\").join(\"\"):null},attr:function(n,r){var o;return\"string\"!=typeof n||1 in arguments?this.each(function(e){if(1===this.nodeType)if(P(n))for(t in n)W(this,t,n[t]);else W(this,n,V(this,r,e,this.getAttribute(n)))}):0 in this&&1==this[0].nodeType&&null!=(o=this[0].getAttribute(n))?o:e},removeAttr:function(e){return this.each(function(){1===this.nodeType&&e.split(\" \").forEach(function(e){W(this,e)},this)})},prop:function(e,t){return e=$[e]||e,1 in arguments?this.each(function(n){this[e]=V(this,t,n,this[e])}):this[0]&&this[0][e]},removeProp:function(e){return e=$[e]||e,this.each(function(){delete this[e]})},data:function(t,n){var r=\"data-\"+t.replace(b,\"-$1\").toLowerCase(),o=1 in arguments?this.attr(r,n):this.attr(r);return null!==o?J(o):e},val:function(e){return 0 in arguments?(null==e&&(e=\"\"),this.each(function(t){this.value=V(this,e,t,this.value)})):this[0]&&(this[0].multiple?n(this[0]).find(\"option\").filter(function(){return this.selected}).pluck(\"value\"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var r=n(this),o=V(this,e,t,r.offset()),i=r.offsetParent().offset(),a={top:o.top-i.top,left:o.left-i.left};\"static\"==r.css(\"position\")&&(a.position=\"relative\"),r.css(a)});if(!this.length)return null;if(f.documentElement!==this[0]&&!n.contains(f.documentElement,this[0]))return{top:0,left:0};var t=this[0].getBoundingClientRect();return{left:t.left+r.pageXOffset,top:t.top+r.pageYOffset,width:Math.round(t.width),height:Math.round(t.height)}},css:function(e,r){if(arguments.length<2){var o=this[0];if(\"string\"==typeof e){if(!o)return;return o.style[i(e)]||getComputedStyle(o,\"\").getPropertyValue(e)}if(N(e)){if(!o)return;var a={},s=getComputedStyle(o,\"\");return n.each(e,function(e,t){a[t]=o.style[i(t)]||s.getPropertyValue(t)}),a}}var c=\"\";if(\"string\"==j(e))r||0===r?c=M(e)+\":\"+H(e,r):this.each(function(){this.style.removeProperty(M(e))});else for(t in e)e[t]||0===e[t]?c+=M(t)+\":\"+H(t,e[t])+\";\":this.each(function(){this.style.removeProperty(M(t))});return this.each(function(){this.style.cssText+=\";\"+c})},index:function(e){return e?this.indexOf(n(e)[0]):this.parent().children().indexOf(this[0])},hasClass:function(e){return!!e&&s.some.call(this,function(e){return this.test(K(e))},q(e))},addClass:function(e){return e?this.each(function(t){if(\"className\"in this){o=[];var r=K(this),i=V(this,e,t,r);i.split(/\\s+/g).forEach(function(e){n(this).hasClass(e)||o.push(e)},this),o.length&&K(this,r+(r?\" \":\"\")+o.join(\" \"))}}):this},removeClass:function(t){return this.each(function(n){if(\"className\"in this){if(t===e)return K(this,\"\");o=K(this),V(this,t,n,o).split(/\\s+/g).forEach(function(e){o=o.replace(q(e),\" \")}),K(this,o.trim())}})},toggleClass:function(t,r){return t?this.each(function(o){var i=n(this),a=V(this,t,o,K(this));a.split(/\\s+/g).forEach(function(t){(r===e?!i.hasClass(t):r)?i.addClass(t):i.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var n=\"scrollTop\"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n=\"scrollLeft\"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var e=this[0],t=this.offsetParent(),r=this.offset(),o=y.test(t[0].nodeName)?{top:0,left:0}:t.offset();return r.top-=parseFloat(n(e).css(\"margin-top\"))||0,r.left-=parseFloat(n(e).css(\"margin-left\"))||0,o.top+=parseFloat(n(t[0]).css(\"border-top-width\"))||0,o.left+=parseFloat(n(t[0]).css(\"border-left-width\"))||0,{top:r.top-o.top,left:r.left-o.left}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||f.body;e&&!y.test(e.nodeName)&&\"static\"==n(e).css(\"position\");)e=e.offsetParent;return e})}},n.fn.detach=n.fn.remove,[\"width\",\"height\"].forEach(function(t){var r=t.replace(/./,function(e){return e[0].toUpperCase()});n.fn[t]=function(o){var i,a=this[0];return o===e?D(a)?a[\"inner\"+r]:I(a)?a.documentElement[\"scroll\"+r]:(i=this.offset())&&i[t]:this.each(function(e){(a=n(this)).css(t,V(this,o,e,a[t]()))})}}),[\"after\",\"prepend\",\"before\",\"append\"].forEach(function(t,o){var i=o%2;n.fn[t]=function(){var t,a,s=n.map(arguments,function(r){var o=[];return\"array\"==(t=j(r))?(r.forEach(function(t){return t.nodeType!==e?o.push(t):n.zepto.isZ(t)?o=o.concat(t.get()):void(o=o.concat(T.fragment(t)))}),o):\"object\"==t||null==r?r:T.fragment(r)}),c=this.length>1;return s.length<1?this:this.each(function(e,t){a=i?t:t.parentNode,t=0==o?t.nextSibling:1==o?t.firstChild:2==o?t:null;var u=n.contains(f.documentElement,a);s.forEach(function(e){if(c)e=e.cloneNode(!0);else if(!a)return n(e).remove();a.insertBefore(e,t),u&&function e(t,n){n(t);for(var r=0,o=t.childNodes.length;r<o;r++)e(t.childNodes[r],n)}(e,function(e){if(!(null==e.nodeName||\"SCRIPT\"!==e.nodeName.toUpperCase()||e.type&&\"text/javascript\"!==e.type||e.src)){var t=e.ownerDocument?e.ownerDocument.defaultView:r;t.eval.call(t,e.innerHTML)}})})})},n.fn[i?t+\"To\":\"insert\"+(o?\"Before\":\"After\")]=function(e){return n(e)[t](this),this}}),T.Z.prototype=B.prototype=n.fn,T.uniq=a,T.deserializeValue=J,n.zepto=T,n}()),a=[],o.fn.remove=function(){return this.each(function(){this.parentNode&&(\"IMG\"===this.tagName&&(a.push(this),this.src=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=\",i&&clearTimeout(i),i=setTimeout(function(){a=[]},6e4)),this.parentNode.removeChild(this))})},function(e){var t={},n=e.fn.data,r=e.camelCase,o=e.expando=\"Zepto\"+ +new Date,i=[];function a(n,a,s){var c=n[o]||(n[o]=++e.uuid),u=t[c]||(t[c]=function(t){var n={};return e.each(t.attributes||i,function(t,o){0==o.name.indexOf(\"data-\")&&(n[r(o.name.replace(\"data-\",\"\"))]=e.zepto.deserializeValue(o.value))}),n}(n));return void 0!==a&&(u[r(a)]=s),u}e.fn.data=function(i,s){return void 0===s?e.isPlainObject(i)?this.each(function(t,n){e.each(i,function(e,t){a(n,e,t)})}):0 in this?function(i,s){var c=i[o],u=c&&t[c];if(void 0===s)return u||a(i);if(u){if(s in u)return u[s];var l=r(s);if(l in u)return u[l]}return n.call(e(i),s)}(this[0],i):void 0:this.each(function(){a(this,i,s)})},e.data=function(t,n,r){return e(t).data(n,r)},e.hasData=function(n){var r=n[o],i=r&&t[r];return!!i&&!e.isEmptyObject(i)},e.fn.removeData=function(n){return\"string\"==typeof n&&(n=n.split(/\\s+/)),this.each(function(){var i=this[o],a=i&&t[i];a&&e.each(n||a,function(e){delete a[n?r(this):e]})})},[\"remove\",\"empty\"].forEach(function(t){var n=e.fn[t];e.fn[t]=function(){var e=this.find(\"*\");return\"remove\"===t&&(e=e.add(this)),e.removeData(),n.call(this)}})}(o),o)}(window)},function(e,t,n){\"use strict\";var r=n(0),o=n(1);function i(e){e&&e.el||r.error(\"EventBus initialized without el\"),this.$el=o.element(e.el)}r.mixin(i.prototype,{trigger:function(e,t,n,o){var i=r.Event(\"autocomplete:\"+e);return this.$el.trigger(i,[t,n,o]),i}}),e.exports=i},function(e,t,n){\"use strict\";e.exports={wrapper:'<span class=\"%ROOT%\"></span>',dropdown:'<span class=\"%PREFIX%%DROPDOWN_MENU%\"></span>',dataset:'<div class=\"%PREFIX%%DATASET%-%CLASS%\"></div>',suggestions:'<span class=\"%PREFIX%%SUGGESTIONS%\"></span>',suggestion:'<div class=\"%PREFIX%%SUGGESTION%\"></div>'}},function(e,t){e.exports=\"0.36.0\"},function(e,t,n){\"use strict\";e.exports=function(e){var t=e.match(/Algolia for vanilla JavaScript (\\d+\\.)(\\d+\\.)(\\d+)/);if(t)return[t[1],t[2],t[3]]}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,o=n(15),i=(r=o)&&r.__esModule?r:{default:r};t.default=i.default},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=\"2.6.3\"},function(e,t,n){\"use strict\";var r,o=n(23),i=(r=o)&&r.__esModule?r:{default:r};e.exports=i.default},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=a(n(24)),o=a(n(25)),i=a(n(21));function a(e){return e&&e.__esModule?e:{default:e}}var s=(0,r.default)(o.default);s.version=i.default,t.default=s},function(e,t,n){\"use strict\";var r=Function.prototype.bind;e.exports=function(e){var t=function(){for(var t=arguments.length,n=Array(t),o=0;o<t;o++)n[o]=arguments[o];return new(r.apply(e,[null].concat(n)))};return t.__proto__=e,t.prototype=e.prototype,t}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=p(n(26)),a=p(n(29)),s=p(n(49)),c=p(n(64)),u=p(n(65)),l=p(n(21)),f=p(n(20));function p(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(t){var n=t.apiKey,o=t.indexName,i=t.inputSelector,u=t.appId,p=void 0===u?\"BH4D9OD16A\":u,d=t.debug,h=void 0!==d&&d,m=t.algoliaOptions,g=void 0===m?{}:m,v=t.queryDataCallback,y=void 0===v?null:v,b=t.autocompleteOptions,x=void 0===b?{debug:!1,hint:!1,autoselect:!0}:b,w=t.transformData,_=void 0!==w&&w,k=t.queryHook,C=void 0!==k&&k,A=t.handleSelected,S=void 0!==A&&A,E=t.enhancedSearchInput,T=void 0!==E&&E,O=t.layout,$=void 0===O?\"collumns\":O;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),e.checkArguments({apiKey:n,indexName:o,inputSelector:i,debug:h,algoliaOptions:g,queryDataCallback:y,autocompleteOptions:x,transformData:_,queryHook:C,handleSelected:S,enhancedSearchInput:T,layout:$}),this.apiKey=n,this.appId=p,this.indexName=o,this.input=e.getInputFromSelector(i),this.algoliaOptions=r({hitsPerPage:5},g),this.queryDataCallback=y||null;var N=!(!x||!x.debug)&&x.debug;x.debug=h||N,this.autocompleteOptions=x,this.autocompleteOptions.cssClasses=this.autocompleteOptions.cssClasses||{},this.autocompleteOptions.cssClasses.prefix=this.autocompleteOptions.cssClasses.prefix||\"ds\";var j=this.input&&\"function\"==typeof this.input.attr&&this.input.attr(\"aria-label\");this.autocompleteOptions.ariaLabel=this.autocompleteOptions.ariaLabel||j||\"search input\",this.isSimpleLayout=\"simple\"===$,this.client=(0,a.default)(this.appId,this.apiKey),this.client.addAlgoliaAgent(\"docsearch.js \"+l.default),T&&(this.input=e.injectSearchBox(this.input)),this.autocomplete=(0,s.default)(this.input,x,[{source:this.getAutocompleteSource(_,C),templates:{suggestion:e.getSuggestionTemplate(this.isSimpleLayout),footer:c.default.footer,empty:e.getEmptyTemplate()}}]);var L=S;this.handleSelected=L||this.handleSelected,L&&(0,f.default)(\".algolia-autocomplete\").on(\"click\",\".ds-suggestions a\",function(e){e.preventDefault()}),this.autocomplete.on(\"autocomplete:selected\",this.handleSelected.bind(null,this.autocomplete.autocomplete)),this.autocomplete.on(\"autocomplete:shown\",this.handleShown.bind(null,this.input)),T&&e.bindSearchBoxEvent()}return o(e,[{key:\"getAutocompleteSource\",value:function(t,n){var r=this;return function(o,i){n&&(o=n(o)||o),r.client.search([{indexName:r.indexName,query:o,params:r.algoliaOptions}]).then(function(n){r.queryDataCallback&&\"function\"==typeof r.queryDataCallback&&r.queryDataCallback(n);var o=n.results[0].hits;t&&(o=t(o)||o),i(e.formatHits(o))})}}},{key:\"handleSelected\",value:function(e,t,n,r){\"click\"!==(arguments.length>4&&void 0!==arguments[4]?arguments[4]:{}).selectionMethod&&(e.setVal(\"\"),window.location.assign(n.url))}},{key:\"handleShown\",value:function(e){var t=e.offset().left+e.width()/2,n=(0,f.default)(document).width()/2;isNaN(n)&&(n=900);var r=t-n>=0?\"algolia-autocomplete-right\":\"algolia-autocomplete-left\",o=t-n<0?\"algolia-autocomplete-right\":\"algolia-autocomplete-left\",i=(0,f.default)(\".algolia-autocomplete\");i.hasClass(r)||i.addClass(r),i.hasClass(o)&&i.removeClass(o)}}],[{key:\"checkArguments\",value:function(t){if(!t.apiKey||!t.indexName)throw new Error(\"Usage:\\n  documentationSearch({\\n  apiKey,\\n  indexName,\\n  inputSelector,\\n  [ appId ],\\n  [ algoliaOptions.{hitsPerPage} ]\\n  [ autocompleteOptions.{hint,debug} ]\\n})\");if(\"string\"!=typeof t.inputSelector)throw new Error(\"Error: inputSelector:\"+t.inputSelector+\"  must be a string. Each selector must match only one element and separated by ','\");if(!e.getInputFromSelector(t.inputSelector))throw new Error(\"Error: No input element in the page matches \"+t.inputSelector)}},{key:\"injectSearchBox\",value:function(e){e.before(c.default.searchBox);var t=e.prev().prev().find(\"input\");return e.remove(),t}},{key:\"bindSearchBoxEvent\",value:function(){(0,f.default)('.searchbox [type=\"reset\"]').on(\"click\",function(){(0,f.default)(\"input#docsearch\").focus(),(0,f.default)(this).addClass(\"hide\"),s.default.autocomplete.setVal(\"\")}),(0,f.default)(\"input#docsearch\").on(\"keyup\",function(){var e=document.querySelector(\"input#docsearch\"),t=document.querySelector('.searchbox [type=\"reset\"]');t.className=\"searchbox__reset\",0===e.value.length&&(t.className+=\" hide\")})}},{key:\"getInputFromSelector\",value:function(e){var t=(0,f.default)(e).filter(\"input\");return t.length?(0,f.default)(t[0]):null}},{key:\"formatHits\",value:function(t){var n=u.default.deepClone(t).map(function(e){return e._highlightResult&&(e._highlightResult=u.default.mergeKeyWithParent(e._highlightResult,\"hierarchy\")),u.default.mergeKeyWithParent(e,\"hierarchy\")}),r=u.default.groupBy(n,\"lvl0\");return f.default.each(r,function(e,t){var n=u.default.groupBy(t,\"lvl1\"),o=u.default.flattenAndFlagFirst(n,\"isSubCategoryHeader\");r[e]=o}),(r=u.default.flattenAndFlagFirst(r,\"isCategoryHeader\")).map(function(t){var n=e.formatURL(t),r=u.default.getHighlightedValue(t,\"lvl0\"),o=u.default.getHighlightedValue(t,\"lvl1\")||r,i=u.default.compact([u.default.getHighlightedValue(t,\"lvl2\")||o,u.default.getHighlightedValue(t,\"lvl3\"),u.default.getHighlightedValue(t,\"lvl4\"),u.default.getHighlightedValue(t,\"lvl5\"),u.default.getHighlightedValue(t,\"lvl6\")]).join('<span class=\"aa-suggestion-title-separator\" aria-hidden=\"true\"> › </span>'),a=u.default.getSnippetedValue(t,\"content\"),s=o&&\"\"!==o||i&&\"\"!==i,c=i&&\"\"!==i&&i!==o,l=!c&&o&&\"\"!==o&&o!==r;return{isLvl0:!l&&!c,isLvl1:l,isLvl2:c,isLvl1EmptyOrDuplicate:!o||\"\"===o||o===r,isCategoryHeader:t.isCategoryHeader,isSubCategoryHeader:t.isSubCategoryHeader,isTextOrSubcategoryNonEmpty:s,category:r,subcategory:o,title:i,text:a,url:n}})}},{key:\"formatURL\",value:function(e){var t=e.url,n=e.anchor;return t?-1!==t.indexOf(\"#\")?t:n?e.url+\"#\"+e.anchor:t:n?\"#\"+e.anchor:(console.warn(\"no anchor nor url for : \",JSON.stringify(e)),null)}},{key:\"getEmptyTemplate\",value:function(){return function(e){return i.default.compile(c.default.empty).render(e)}}},{key:\"getSuggestionTemplate\",value:function(e){var t=e?c.default.suggestionSimple:c.default.suggestion,n=i.default.compile(t);return function(e){return n.render(e)}}}]),e}();t.default=d},function(e,t,n){var r=n(27);r.Template=n(28).Template,r.template=r.Template,e.exports=r},function(e,t,n){!function(e){var t=/\\S/,n=/\\\"/g,r=/\\n/g,o=/\\r/g,i=/\\\\/g,a=/\\u2028/,s=/\\u2029/;function c(e){\"}\"===e.n.substr(e.n.length-1)&&(e.n=e.n.substring(0,e.n.length-1))}function u(e){return e.trim?e.trim():e.replace(/^\\s*|\\s*$/g,\"\")}function l(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var r=1,o=e.length;r<o;r++)if(t.charAt(n+r)!=e.charAt(r))return!1;return!0}e.tags={\"#\":1,\"^\":2,\"<\":3,$:4,\"/\":5,\"!\":6,\">\":7,\"=\":8,_v:9,\"{\":10,\"&\":11,_t:12},e.scan=function(n,r){var o=n.length,i=0,a=null,s=null,f=\"\",p=[],d=!1,h=0,m=0,g=\"{{\",v=\"}}\";function y(){f.length>0&&(p.push({tag:\"_t\",text:new String(f)}),f=\"\")}function b(n,r){if(y(),n&&function(){for(var n=!0,r=m;r<p.length;r++)if(!(n=e.tags[p[r].tag]<e.tags._v||\"_t\"==p[r].tag&&null===p[r].text.match(t)))return!1;return n}())for(var o,i=m;i<p.length;i++)p[i].text&&((o=p[i+1])&&\">\"==o.tag&&(o.indent=p[i].text.toString()),p.splice(i,1));else r||p.push({tag:\"\\n\"});d=!1,m=p.length}function x(e,t){var n=\"=\"+v,r=e.indexOf(n,t),o=u(e.substring(e.indexOf(\"=\",t)+1,r)).split(\" \");return g=o[0],v=o[o.length-1],r+n.length-1}for(r&&(r=r.split(\" \"),g=r[0],v=r[1]),h=0;h<o;h++)0==i?l(g,n,h)?(--h,y(),i=1):\"\\n\"==n.charAt(h)?b(d):f+=n.charAt(h):1==i?(h+=g.length-1,\"=\"==(a=(s=e.tags[n.charAt(h+1)])?n.charAt(h+1):\"_v\")?(h=x(n,h),i=0):(s&&h++,i=2),d=h):l(v,n,h)?(p.push({tag:a,n:u(f),otag:g,ctag:v,i:\"/\"==a?d-g.length:h+v.length}),f=\"\",h+=v.length-1,i=0,\"{\"==a&&(\"}}\"==v?h++:c(p[p.length-1]))):f+=n.charAt(h);return b(d,!0),p};var f={_t:!0,\"\\n\":!0,$:!0,\"/\":!0};function p(e,t){for(var n=0,r=t.length;n<r;n++)if(t[n].o==e.n)return e.tag=\"#\",!0}function d(e,t,n){for(var r=0,o=n.length;r<o;r++)if(n[r].c==e&&n[r].o==t)return!0}function h(e){var t=[];for(var n in e.partials)t.push('\"'+g(n)+'\":{name:\"'+g(e.partials[n].name)+'\", '+h(e.partials[n])+\"}\");return\"partials: {\"+t.join(\",\")+\"}, subs: \"+function(e){var t=[];for(var n in e)t.push('\"'+g(n)+'\": function(c,p,t,i) {'+e[n]+\"}\");return\"{ \"+t.join(\",\")+\" }\"}(e.subs)}e.stringify=function(t,n,r){return\"{code: function (c,p,i) { \"+e.wrapMain(t.code)+\" },\"+h(t)+\"}\"};var m=0;function g(e){return e.replace(i,\"\\\\\\\\\").replace(n,'\\\\\"').replace(r,\"\\\\n\").replace(o,\"\\\\r\").replace(a,\"\\\\u2028\").replace(s,\"\\\\u2029\")}function v(e){return~e.indexOf(\".\")?\"d\":\"f\"}function y(e,t){var n=\"<\"+(t.prefix||\"\")+e.n+m++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp(\"'+g(n)+'\",c,p,\"'+(e.indent||\"\")+'\"));',n}function b(e,t){t.code+=\"t.b(t.t(t.\"+v(e.n)+'(\"'+g(e.n)+'\",c,p,0)));'}function x(e){return\"t.b(\"+e+\");\"}e.generate=function(t,n,r){m=0;var o={code:\"\",subs:{},partials:{}};return e.walk(t,o),r.asString?this.stringify(o,n,r):this.makeTemplate(o,n,r)},e.wrapMain=function(e){return'var t=this;t.b(i=i||\"\");'+e+\"return t.fl();\"},e.template=e.Template,e.makeTemplate=function(e,t,n){var r=this.makePartials(e);return r.code=new Function(\"c\",\"p\",\"i\",this.wrapMain(e.code)),new this.template(r,t,this,n)},e.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function(\"c\",\"p\",\"t\",\"i\",e.subs[t]);return n},e.codegen={\"#\":function(t,n){n.code+=\"if(t.s(t.\"+v(t.n)+'(\"'+g(t.n)+'\",c,p,1),c,p,0,'+t.i+\",\"+t.end+',\"'+t.otag+\" \"+t.ctag+'\")){t.rs(c,p,function(c,p,t){',e.walk(t.nodes,n),n.code+=\"});c.pop();}\"},\"^\":function(t,n){n.code+=\"if(!t.s(t.\"+v(t.n)+'(\"'+g(t.n)+'\",c,p,1),c,p,1,0,0,\"\")){',e.walk(t.nodes,n),n.code+=\"};\"},\">\":y,\"<\":function(t,n){var r={partials:{},code:\"\",subs:{},inPartial:!0};e.walk(t.nodes,r);var o=n.partials[y(t,n)];o.subs=r.subs,o.partials=r.partials},$:function(t,n){var r={subs:{},code:\"\",partials:n.partials,prefix:t.n};e.walk(t.nodes,r),n.subs[t.n]=r.code,n.inPartial||(n.code+='t.sub(\"'+g(t.n)+'\",c,p,i);')},\"\\n\":function(e,t){t.code+=x('\"\\\\n\"'+(e.last?\"\":\" + i\"))},_v:function(e,t){t.code+=\"t.b(t.v(t.\"+v(e.n)+'(\"'+g(e.n)+'\",c,p,0)));'},_t:function(e,t){t.code+=x('\"'+g(e.text)+'\"')},\"{\":b,\"&\":b},e.walk=function(t,n){for(var r,o=0,i=t.length;o<i;o++)(r=e.codegen[t[o].tag])&&r(t[o],n);return n},e.parse=function(t,n,r){return function t(n,r,o,i){var a,s=[],c=null,u=null;for(a=o[o.length-1];n.length>0;){if(u=n.shift(),a&&\"<\"==a.tag&&!(u.tag in f))throw new Error(\"Illegal content in < super tag.\");if(e.tags[u.tag]<=e.tags.$||p(u,i))o.push(u),u.nodes=t(n,u.tag,o,i);else{if(\"/\"==u.tag){if(0===o.length)throw new Error(\"Closing tag without opener: /\"+u.n);if(c=o.pop(),u.n!=c.n&&!d(u.n,c.n,i))throw new Error(\"Nesting error: \"+c.n+\" vs. \"+u.n);return c.end=u.i,s}\"\\n\"==u.tag&&(u.last=0==n.length||\"\\n\"==n[0].tag)}s.push(u)}if(o.length>0)throw new Error(\"missing closing tag: \"+o.pop().n);return s}(t,0,[],(r=r||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join(\"||\")},e.compile=function(t,n){n=n||{};var r=e.cacheKey(t,n),o=this.cache[r];if(o){var i=o.partials;for(var a in i)delete i[a].instance;return o}return o=this.generate(this.parse(this.scan(t,n.delimiters),t,n),t,n),this.cache[r]=o}}(t)},function(e,t,n){!function(e){function t(e,t,n){var r;return t&&\"object\"==typeof t&&(void 0!==t[e]?r=t[e]:n&&t.get&&\"function\"==typeof t.get&&(r=t.get(e))),r}e.Template=function(e,t,n,r){e=e||{},this.r=e.code||this.r,this.c=n,this.options=r||{},this.text=t||\"\",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=\"\"},e.Template.prototype={r:function(e,t,n){return\"\"},v:function(e){return e=c(e),s.test(e)?e.replace(n,\"&amp;\").replace(r,\"&lt;\").replace(o,\"&gt;\").replace(i,\"&#39;\").replace(a,\"&quot;\"):e},t:c,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],r=t[n.name];if(n.instance&&n.base==r)return n.instance;if(\"string\"==typeof r){if(!this.c)throw new Error(\"No compiler available.\");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[e].base=r,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);r=function(e,t,n,r,o,i){function a(){}function s(){}var c;a.prototype=e,s.prototype=e.subs;var u=new a;for(c in u.subs=new s,u.subsText={},u.buf=\"\",r=r||{},u.stackSubs=r,u.subsText=i,t)r[c]||(r[c]=t[c]);for(c in r)u.subs[c]=r[c];for(c in o=o||{},u.stackPartials=o,n)o[c]||(o[c]=n[c]);for(c in o)u.partials[c]=o[c];return u}(r,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=r,r},rp:function(e,t,n,r){var o=this.ep(e,n);return o?o.ri(t,n,r):\"\"},rs:function(e,t,n){var r=e[e.length-1];if(u(r))for(var o=0;o<r.length;o++)e.push(r[o]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,r,o,i,a){var s;return(!u(e)||0!==e.length)&&(\"function\"==typeof e&&(e=this.ms(e,t,n,r,o,i,a)),s=!!e,!r&&s&&t&&t.push(\"object\"==typeof e?e:t[t.length-1]),s)},d:function(e,n,r,o){var i,a=e.split(\".\"),s=this.f(a[0],n,r,o),c=this.options.modelGet,l=null;if(\".\"===e&&u(n[n.length-2]))s=n[n.length-1];else for(var f=1;f<a.length;f++)void 0!==(i=t(a[f],s,c))?(l=s,s=i):s=\"\";return!(o&&!s)&&(o||\"function\"!=typeof s||(n.push(l),s=this.mv(s,n,r),n.pop()),s)},f:function(e,n,r,o){for(var i=!1,a=!1,s=this.options.modelGet,c=n.length-1;c>=0;c--)if(void 0!==(i=t(e,n[c],s))){a=!0;break}return a?(o||\"function\"!=typeof i||(i=this.mv(i,n,r)),i):!o&&\"\"},ls:function(e,t,n,r,o){var i=this.options.delimiters;return this.options.delimiters=o,this.b(this.ct(c(e.call(t,r)),t,n)),this.options.delimiters=i,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error(\"Lambda features disabled.\");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf=\"\",e},ms:function(e,t,n,r,o,i,a){var s,c=t[t.length-1],u=e.call(c);return\"function\"==typeof u?!!r||(s=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(u,c,n,s.substring(o,i),a)):u},mv:function(e,t,n){var r=t[t.length-1],o=e.call(r);return\"function\"==typeof o?this.ct(c(o.call(r)),r,n):o},sub:function(e,t,n,r){var o=this.subs[e];o&&(this.activeSub=e,o(t,n,this,r),this.activeSub=!1)}};var n=/&/g,r=/</g,o=/>/g,i=/\\'/g,a=/\\\"/g,s=/[&<>\\\"\\']/;function c(e){return String(null===e||void 0===e?\"\":e)}var u=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}}(t)},function(e,t,n){\"use strict\";var r=n(30),o=n(41);e.exports=o(r,\"(lite) \")},function(e,t,n){e.exports=c;var r=n(5),o=n(31),i=n(32),a=n(38),s=Object({NODE_ENV:\"production\"}).RESET_APP_DATA_TIMER&&parseInt(Object({NODE_ENV:\"production\"}).RESET_APP_DATA_TIMER,10)||12e4;function c(e,t,o){var i=n(8)(\"algoliasearch\"),a=n(3),s=n(6),c=n(7),l=\"Usage: algoliasearch(applicationID, apiKey, opts)\";if(!0!==o._allowEmptyCredentials&&!e)throw new r.AlgoliaSearchError(\"Please provide an application ID. \"+l);if(!0!==o._allowEmptyCredentials&&!t)throw new r.AlgoliaSearchError(\"Please provide an API key. \"+l);this.applicationID=e,this.apiKey=t,this.hosts={read:[],write:[]},o=o||{},this._timeouts=o.timeouts||{connect:1e3,read:2e3,write:3e4},o.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=o.timeout);var f=o.protocol||\"https:\";if(/:$/.test(f)||(f+=\":\"),\"http:\"!==f&&\"https:\"!==f)throw new r.AlgoliaSearchError(\"protocol must be `http:` or `https:` (was `\"+o.protocol+\"`)\");if(this._checkAppIdData(),o.hosts)s(o.hosts)?(this.hosts.read=a(o.hosts),this.hosts.write=a(o.hosts)):(this.hosts.read=a(o.hosts.read),this.hosts.write=a(o.hosts.write));else{var p=c(this._shuffleResult,function(t){return e+\"-\"+t+\".algolianet.com\"}),d=(!1===o.dsn?\"\":\"-dsn\")+\".algolia.net\";this.hosts.read=[this.applicationID+d].concat(p),this.hosts.write=[this.applicationID+\".algolia.net\"].concat(p)}this.hosts.read=c(this.hosts.read,u(f)),this.hosts.write=c(this.hosts.write,u(f)),this.extraHeaders={},this.cache=o._cache||{},this._ua=o._ua,this._useCache=!(void 0!==o._useCache&&!o._cache)||o._useCache,this._useRequestCache=this._useCache&&o._useRequestCache,this._useFallback=void 0===o.useFallback||o.useFallback,this._setTimeout=o._setTimeout,i(\"init done, %j\",this)}function u(e){return function(t){return e+\"//\"+t.toLowerCase()}}function l(e){if(void 0===Array.prototype.toJSON)return JSON.stringify(e);var t=Array.prototype.toJSON;delete Array.prototype.toJSON;var n=JSON.stringify(e);return Array.prototype.toJSON=t,n}function f(e){var t={};for(var n in e){var r;if(Object.prototype.hasOwnProperty.call(e,n))r=\"x-algolia-api-key\"===n||\"x-algolia-application-id\"===n?\"**hidden for security purposes**\":e[n],t[n]=r}return t}c.prototype.initIndex=function(e){return new i(this,e)},c.prototype.setExtraHeader=function(e,t){this.extraHeaders[e.toLowerCase()]=t},c.prototype.getExtraHeader=function(e){return this.extraHeaders[e.toLowerCase()]},c.prototype.unsetExtraHeader=function(e){delete this.extraHeaders[e.toLowerCase()]},c.prototype.addAlgoliaAgent=function(e){-1===this._ua.indexOf(\";\"+e)&&(this._ua+=\";\"+e)},c.prototype._jsonRequest=function(e){this._checkAppIdData();var t,i,a,s=n(8)(\"algoliasearch:\"+e.url),c=e.additionalUA||\"\",u=e.cache,p=this,d=0,h=!1,m=p._useFallback&&p._request.fallback&&e.fallback;this.apiKey.length>500&&void 0!==e.body&&(void 0!==e.body.params||void 0!==e.body.requests)?(e.body.apiKey=this.apiKey,a=this._computeRequestHeaders({additionalUA:c,withApiKey:!1,headers:e.headers})):a=this._computeRequestHeaders({additionalUA:c,headers:e.headers}),void 0!==e.body&&(t=l(e.body)),s(\"request start\");var g=[];function v(e,t,n){return p._useCache&&e&&t&&void 0!==t[n]}function y(t,n){if(v(p._useRequestCache,u,i)&&t.catch(function(){delete u[i]}),\"function\"!=typeof e.callback)return t.then(n);t.then(function(t){o(function(){e.callback(null,n(t))},p._setTimeout||setTimeout)},function(t){o(function(){e.callback(t)},p._setTimeout||setTimeout)})}if(p._useCache&&p._useRequestCache&&(i=e.url),p._useCache&&p._useRequestCache&&t&&(i+=\"_body_\"+t),v(p._useRequestCache,u,i)){s(\"serving request from cache\");var b=u[i];return y(\"function\"!=typeof b.then?p._promise.resolve({responseText:b}):b,function(e){return JSON.parse(e.responseText)})}var x=function n(o,y){p._checkAppIdData();var b=new Date;if(p._useCache&&!p._useRequestCache&&(i=e.url),p._useCache&&!p._useRequestCache&&t&&(i+=\"_body_\"+y.body),v(!p._useRequestCache,u,i)){s(\"serving response from cache\");var x=u[i];return p._promise.resolve({body:JSON.parse(x),responseText:x})}if(d>=p.hosts[e.hostType].length)return!m||h?(s(\"could not get any response\"),p._promise.reject(new r.AlgoliaSearchError(\"Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: \"+p.applicationID,{debugData:g}))):(s(\"switching to fallback\"),d=0,y.method=e.fallback.method,y.url=e.fallback.url,y.jsonBody=e.fallback.body,y.jsonBody&&(y.body=l(y.jsonBody)),a=p._computeRequestHeaders({additionalUA:c,headers:e.headers}),y.timeouts=p._getTimeoutsForRequest(e.hostType),p._setHostIndexByType(0,e.hostType),h=!0,n(p._request.fallback,y));var w=p._getHostByType(e.hostType),_=w+y.url,k={body:y.body,jsonBody:y.jsonBody,method:y.method,headers:a,timeouts:y.timeouts,debug:s,forceAuthHeaders:y.forceAuthHeaders};return s(\"method: %s, url: %s, headers: %j, timeouts: %d\",k.method,_,k.headers,k.timeouts),o===p._request.fallback&&s(\"using fallback\"),o.call(p,_,k).then(function(e){var n=e&&e.body&&e.body.message&&e.body.status||e.statusCode||e&&e.body&&200;s(\"received response: statusCode: %s, computed statusCode: %d, headers: %j\",e.statusCode,n,e.headers);var o=2===Math.floor(n/100),c=new Date;if(g.push({currentHost:w,headers:f(a),content:t||null,contentLength:void 0!==t?t.length:null,method:y.method,timeouts:y.timeouts,url:y.url,startTime:b,endTime:c,duration:c-b,statusCode:n}),o)return p._useCache&&!p._useRequestCache&&u&&(u[i]=e.responseText),{responseText:e.responseText,body:e.body};if(4!==Math.floor(n/100))return d+=1,C();s(\"unrecoverable error\");var l=new r.AlgoliaSearchError(e.body&&e.body.message,{debugData:g,statusCode:n});return p._promise.reject(l)},function(i){s(\"error: %s, stack: %s\",i.message,i.stack);var c=new Date;return g.push({currentHost:w,headers:f(a),content:t||null,contentLength:void 0!==t?t.length:null,method:y.method,timeouts:y.timeouts,url:y.url,startTime:b,endTime:c,duration:c-b}),i instanceof r.AlgoliaSearchError||(i=new r.Unknown(i&&i.message,i)),d+=1,i instanceof r.Unknown||i instanceof r.UnparsableJSON||d>=p.hosts[e.hostType].length&&(h||!m)?(i.debugData=g,p._promise.reject(i)):i instanceof r.RequestTimeout?(s(\"retrying request with higher timeout\"),p._incrementHostIndex(e.hostType),p._incrementTimeoutMultipler(),y.timeouts=p._getTimeoutsForRequest(e.hostType),n(o,y)):C()});function C(){return s(\"retrying request\"),p._incrementHostIndex(e.hostType),n(o,y)}}(p._request,{url:e.url,method:e.method,body:t,jsonBody:e.body,timeouts:p._getTimeoutsForRequest(e.hostType),forceAuthHeaders:e.forceAuthHeaders});return p._useCache&&p._useRequestCache&&u&&(u[i]=x),y(x,function(e){return e.body})},c.prototype._getSearchParams=function(e,t){if(void 0===e||null===e)return t;for(var n in e)null!==n&&void 0!==e[n]&&e.hasOwnProperty(n)&&(t+=\"\"===t?\"\":\"&\",t+=n+\"=\"+encodeURIComponent(\"[object Array]\"===Object.prototype.toString.call(e[n])?l(e[n]):e[n]));return t},c.prototype._computeRequestHeaders=function(e){var t=n(2),r={\"x-algolia-agent\":e.additionalUA?this._ua+\";\"+e.additionalUA:this._ua,\"x-algolia-application-id\":this.applicationID};return!1!==e.withApiKey&&(r[\"x-algolia-api-key\"]=this.apiKey),this.userToken&&(r[\"x-algolia-usertoken\"]=this.userToken),this.securityTags&&(r[\"x-algolia-tagfilters\"]=this.securityTags),t(this.extraHeaders,function(e,t){r[t]=e}),e.headers&&t(e.headers,function(e,t){r[t]=e}),r},c.prototype.search=function(e,t,r){var o=n(6),i=n(7);if(!o(e))throw new Error(\"Usage: client.search(arrayOfQueries[, callback])\");\"function\"==typeof t?(r=t,t={}):void 0===t&&(t={});var a=this,s={requests:i(e,function(e){var t=\"\";return void 0!==e.query&&(t+=\"query=\"+encodeURIComponent(e.query)),{indexName:e.indexName,params:a._getSearchParams(e.params,t)}})},c=i(s.requests,function(e,t){return t+\"=\"+encodeURIComponent(\"/1/indexes/\"+encodeURIComponent(e.indexName)+\"?\"+e.params)}).join(\"&\");return void 0!==t.strategy&&(s.strategy=t.strategy),this._jsonRequest({cache:this.cache,method:\"POST\",url:\"/1/indexes/*/queries\",body:s,hostType:\"read\",fallback:{method:\"GET\",url:\"/1/indexes/*\",body:{params:c}},callback:r})},c.prototype.searchForFacetValues=function(e){var t=n(6),r=n(7),o=\"Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])\";if(!t(e))throw new Error(o);var i=this;return i._promise.all(r(e,function(e){if(!e||void 0===e.indexName||void 0===e.params.facetName||void 0===e.params.facetQuery)throw new Error(o);var t=n(3),r=n(14),a=e.indexName,s=e.params,c=s.facetName,u=r(t(s),function(e){return\"facetName\"===e}),l=i._getSearchParams(u,\"\");return i._jsonRequest({cache:i.cache,method:\"POST\",url:\"/1/indexes/\"+encodeURIComponent(a)+\"/facets/\"+encodeURIComponent(c)+\"/query\",hostType:\"read\",body:{params:l}})}))},c.prototype.setSecurityTags=function(e){if(\"[object Array]\"===Object.prototype.toString.call(e)){for(var t=[],n=0;n<e.length;++n)if(\"[object Array]\"===Object.prototype.toString.call(e[n])){for(var r=[],o=0;o<e[n].length;++o)r.push(e[n][o]);t.push(\"(\"+r.join(\",\")+\")\")}else t.push(e[n]);e=t.join(\",\")}this.securityTags=e},c.prototype.setUserToken=function(e){this.userToken=e},c.prototype.clearCache=function(){this.cache={}},c.prototype.setRequestTimeout=function(e){e&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=e)},c.prototype.setTimeouts=function(e){this._timeouts=e},c.prototype.getTimeouts=function(){return this._timeouts},c.prototype._getAppIdData=function(){var e=a.get(this.applicationID);return null!==e&&this._cacheAppIdData(e),e},c.prototype._setAppIdData=function(e){return e.lastChange=(new Date).getTime(),this._cacheAppIdData(e),a.set(this.applicationID,e)},c.prototype._checkAppIdData=function(){var e=this._getAppIdData(),t=(new Date).getTime();return null===e||t-e.lastChange>s?this._resetInitialAppIdData(e):e},c.prototype._resetInitialAppIdData=function(e){var t=e||{};return t.hostIndexes={read:0,write:0},t.timeoutMultiplier=1,t.shuffleResult=t.shuffleResult||function(e){var t,n,r=e.length;for(;0!==r;)n=Math.floor(Math.random()*r),t=e[r-=1],e[r]=e[n],e[n]=t;return e}([1,2,3]),this._setAppIdData(t)},c.prototype._cacheAppIdData=function(e){this._hostIndexes=e.hostIndexes,this._timeoutMultiplier=e.timeoutMultiplier,this._shuffleResult=e.shuffleResult},c.prototype._partialAppIdDataUpdate=function(e){var t=n(2),r=this._getAppIdData();return t(e,function(e,t){r[t]=e}),this._setAppIdData(r)},c.prototype._getHostByType=function(e){return this.hosts[e][this._getHostIndexByType(e)]},c.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},c.prototype._getHostIndexByType=function(e){return this._hostIndexes[e]},c.prototype._setHostIndexByType=function(e,t){var r=n(3)(this._hostIndexes);return r[t]=e,this._partialAppIdDataUpdate({hostIndexes:r}),e},c.prototype._incrementHostIndex=function(e){return this._setHostIndexByType((this._getHostIndexByType(e)+1)%this.hosts[e].length,e)},c.prototype._incrementTimeoutMultipler=function(){var e=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:e})},c.prototype._getTimeoutsForRequest=function(e){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[e]*this._timeoutMultiplier}}},function(e,t){e.exports=function(e,t){t(e,0)}},function(e,t,n){var r=n(13),o=n(33),i=n(34);function a(e,t){this.indexName=t,this.as=e,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}e.exports=a,a.prototype.clearCache=function(){this.cache={}},a.prototype.search=r(\"query\"),a.prototype.similarSearch=r(\"similarQuery\"),a.prototype.browse=function(e,t,r){var o,i,a=n(35);0===arguments.length||1===arguments.length&&\"function\"==typeof arguments[0]?(o=0,r=arguments[0],e=void 0):\"number\"==typeof arguments[0]?(o=arguments[0],\"number\"==typeof arguments[1]?i=arguments[1]:\"function\"==typeof arguments[1]&&(r=arguments[1],i=void 0),e=void 0,t=void 0):\"object\"==typeof arguments[0]?(\"function\"==typeof arguments[1]&&(r=arguments[1]),t=arguments[0],e=void 0):\"string\"==typeof arguments[0]&&\"function\"==typeof arguments[1]&&(r=arguments[1],t=void 0),t=a({},t||{},{page:o,hitsPerPage:i,query:e});var s=this.as._getSearchParams(t,\"\");return this.as._jsonRequest({method:\"POST\",url:\"/1/indexes/\"+encodeURIComponent(this.indexName)+\"/browse\",body:{params:s},hostType:\"read\",callback:r})},a.prototype.browseFrom=function(e,t){return this.as._jsonRequest({method:\"POST\",url:\"/1/indexes/\"+encodeURIComponent(this.indexName)+\"/browse\",body:{cursor:e},hostType:\"read\",callback:t})},a.prototype.searchForFacetValues=function(e,t){var r=n(3),o=n(14);if(void 0===e.facetName||void 0===e.facetQuery)throw new Error(\"Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])\");var i=e.facetName,a=o(r(e),function(e){return\"facetName\"===e}),s=this.as._getSearchParams(a,\"\");return this.as._jsonRequest({method:\"POST\",url:\"/1/indexes/\"+encodeURIComponent(this.indexName)+\"/facets/\"+encodeURIComponent(i)+\"/query\",hostType:\"read\",body:{params:s},callback:t})},a.prototype.searchFacet=o(function(e,t){return this.searchForFacetValues(e,t)},i(\"index.searchFacet(params[, callback])\",\"index.searchForFacetValues(params[, callback])\")),a.prototype._search=function(e,t,n,r){return this.as._jsonRequest({cache:this.cache,method:\"POST\",url:t||\"/1/indexes/\"+encodeURIComponent(this.indexName)+\"/query\",body:{params:e},hostType:\"read\",fallback:{method:\"GET\",url:\"/1/indexes/\"+encodeURIComponent(this.indexName),body:{params:e}},callback:n,additionalUA:r})},a.prototype.getObject=function(e,t,n){1!==arguments.length&&\"function\"!=typeof t||(n=t,t=void 0);var r=\"\";if(void 0!==t){r=\"?attributes=\";for(var o=0;o<t.length;++o)0!==o&&(r+=\",\"),r+=t[o]}return this.as._jsonRequest({method:\"GET\",url:\"/1/indexes/\"+encodeURIComponent(this.indexName)+\"/\"+encodeURIComponent(e)+r,hostType:\"read\",callback:n})},a.prototype.getObjects=function(e,t,r){var o=n(6),i=n(7);if(!o(e))throw new Error(\"Usage: index.getObjects(arrayOfObjectIDs[, callback])\");var a=this;1!==arguments.length&&\"function\"!=typeof t||(r=t,t=void 0);var s={requests:i(e,function(e){var n={indexName:a.indexName,objectID:e};return t&&(n.attributesToRetrieve=t.join(\",\")),n})};return this.as._jsonRequest({method:\"POST\",url:\"/1/indexes/*/objects\",hostType:\"read\",body:s,callback:r})},a.prototype.as=null,a.prototype.indexName=null,a.prototype.typeAheadArgs=null,a.prototype.typeAheadValueOption=null},function(e,t){e.exports=function(e,t){var n=!1;return function(){return n||(console.warn(t),n=!0),e.apply(this,arguments)}}},function(e,t){e.exports=function(e,t){return\"algoliasearch: `\"+e+\"` was replaced by `\"+t+\"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#\"+e.toLowerCase().replace(/[\\.\\(\\)]/g,\"\")}},function(e,t,n){var r=n(2);e.exports=function e(t){var n=Array.prototype.slice.call(arguments);return r(n,function(n){for(var r in n)n.hasOwnProperty(r)&&(\"object\"==typeof t[r]&&\"object\"==typeof n[r]?t[r]=e({},t[r],n[r]):void 0!==n[r]&&(t[r]=n[r]))}),t}},function(e,t,n){\"use strict\";var r=Object.prototype.hasOwnProperty,o=Object.prototype.toString,i=Array.prototype.slice,a=n(37),s=Object.prototype.propertyIsEnumerable,c=!s.call({toString:null},\"toString\"),u=s.call(function(){},\"prototype\"),l=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],f=function(e){var t=e.constructor;return t&&t.prototype===e},p={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},d=function(){if(\"undefined\"==typeof window)return!1;for(var e in window)try{if(!p[\"$\"+e]&&r.call(window,e)&&null!==window[e]&&\"object\"==typeof window[e])try{f(window[e])}catch(e){return!0}}catch(e){return!0}return!1}(),h=function(e){var t=null!==e&&\"object\"==typeof e,n=\"[object Function]\"===o.call(e),i=a(e),s=t&&\"[object String]\"===o.call(e),p=[];if(!t&&!n&&!i)throw new TypeError(\"Object.keys called on a non-object\");var h=u&&n;if(s&&e.length>0&&!r.call(e,0))for(var m=0;m<e.length;++m)p.push(String(m));if(i&&e.length>0)for(var g=0;g<e.length;++g)p.push(String(g));else for(var v in e)h&&\"prototype\"===v||!r.call(e,v)||p.push(String(v));if(c)for(var y=function(e){if(\"undefined\"==typeof window||!d)return f(e);try{return f(e)}catch(e){return!1}}(e),b=0;b<l.length;++b)y&&\"constructor\"===l[b]||!r.call(e,l[b])||p.push(l[b]);return p};h.shim=function(){if(Object.keys){if(!function(){return 2===(Object.keys(arguments)||\"\").length}(1,2)){var e=Object.keys;Object.keys=function(t){return a(t)?e(i.call(t)):e(t)}}}else Object.keys=h;return Object.keys||h},e.exports=h},function(e,t,n){\"use strict\";var r=Object.prototype.toString;e.exports=function(e){var t=r.call(e),n=\"[object Arguments]\"===t;return n||(n=\"[object Array]\"!==t&&null!==e&&\"object\"==typeof e&&\"number\"==typeof e.length&&e.length>=0&&\"[object Function]\"===r.call(e.callee)),n}},function(e,t,n){(function(t){var r,o=n(8)(\"algoliasearch:src/hostIndexState.js\"),i=\"algoliasearch-client-js\",a={state:{},set:function(e,t){return this.state[e]=t,this.state[e]},get:function(e){return this.state[e]||null}},s={set:function(e,n){a.set(e,n);try{var r=JSON.parse(t.localStorage[i]);return r[e]=n,t.localStorage[i]=JSON.stringify(r),r[e]}catch(t){return c(e,t)}},get:function(e){try{return JSON.parse(t.localStorage[i])[e]||null}catch(t){return c(e,t)}}};function c(e,n){return o(\"localStorage failed with\",n),function(){try{t.localStorage.removeItem(i)}catch(e){}}(),(r=a).get(e)}function u(e,t){return 1===arguments.length?r.get(e):r.set(e,t)}function l(){try{return\"localStorage\"in t&&null!==t.localStorage&&(t.localStorage[i]||t.localStorage.setItem(i,JSON.stringify({})),!0)}catch(e){return!1}}r=l()?s:a,e.exports={get:u,set:u,supportsLocalStorage:l}}).call(t,n(4))},function(e,t,n){var r;function o(e){function n(){if(n.enabled){var e=n,o=+new Date,i=o-(r||o);e.diff=i,e.prev=r,e.curr=o,r=o;for(var a=new Array(arguments.length),s=0;s<a.length;s++)a[s]=arguments[s];a[0]=t.coerce(a[0]),\"string\"!=typeof a[0]&&a.unshift(\"%O\");var c=0;a[0]=a[0].replace(/%([a-zA-Z%])/g,function(n,r){if(\"%%\"===n)return n;c++;var o=t.formatters[r];if(\"function\"==typeof o){var i=a[c];n=o.call(e,i),a.splice(c,1),c--}return n}),t.formatArgs.call(e,a),(n.log||t.log||console.log.bind(console)).apply(e,a)}}return n.namespace=e,n.enabled=t.enabled(e),n.useColors=t.useColors(),n.color=function(e){var n,r=0;for(n in e)r=(r<<5)-r+e.charCodeAt(n),r|=0;return t.colors[Math.abs(r)%t.colors.length]}(e),\"function\"==typeof t.init&&t.init(n),n}(t=e.exports=o.debug=o.default=o).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable(\"\")},t.enable=function(e){t.save(e),t.names=[],t.skips=[];for(var n=(\"string\"==typeof e?e:\"\").split(/[\\s,]+/),r=n.length,o=0;o<r;o++)n[o]&&(\"-\"===(e=n[o].replace(/\\*/g,\".*?\"))[0]?t.skips.push(new RegExp(\"^\"+e.substr(1)+\"$\")):t.names.push(new RegExp(\"^\"+e+\"$\")))},t.enabled=function(e){var n,r;for(n=0,r=t.skips.length;n<r;n++)if(t.skips[n].test(e))return!1;for(n=0,r=t.names.length;n<r;n++)if(t.names[n].test(e))return!0;return!1},t.humanize=n(40),t.names=[],t.skips=[],t.formatters={}},function(e,t){var n=1e3,r=60*n,o=60*r,i=24*o,a=365.25*i;function s(e,t,n){if(!(e<t))return e<1.5*t?Math.floor(e/t)+\" \"+n:Math.ceil(e/t)+\" \"+n+\"s\"}e.exports=function(e,t){t=t||{};var c,u=typeof e;if(\"string\"===u&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var s=parseFloat(t[1]);switch((t[2]||\"ms\").toLowerCase()){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return s*a;case\"days\":case\"day\":case\"d\":return s*i;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return s*o;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return s*r;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return s*n;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return s;default:return}}(e);if(\"number\"===u&&!1===isNaN(e))return t.long?s(c=e,i,\"day\")||s(c,o,\"hour\")||s(c,r,\"minute\")||s(c,n,\"second\")||c+\" ms\":function(e){if(e>=i)return Math.round(e/i)+\"d\";if(e>=o)return Math.round(e/o)+\"h\";if(e>=r)return Math.round(e/r)+\"m\";if(e>=n)return Math.round(e/n)+\"s\";return e+\"ms\"}(e);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(e))}},function(e,t,n){\"use strict\";var r=n(42),o=r.Promise||n(43).Promise;e.exports=function(e,t){var i=n(12),a=n(5),s=n(44),c=n(46),u=n(47);function l(e,t,r){return(r=n(3)(r||{}))._ua=r._ua||l.ua,new p(e,t,r)}t=t||\"\",l.version=n(48),l.ua=\"Algolia for vanilla JavaScript \"+t+l.version,l.initPlaces=u(l),r.__algolia={debug:n(8),algoliasearch:l};var f={hasXMLHttpRequest:\"XMLHttpRequest\"in r,hasXDomainRequest:\"XDomainRequest\"in r};function p(){e.apply(this,arguments)}return f.hasXMLHttpRequest&&(f.cors=\"withCredentials\"in new XMLHttpRequest),i(p,e),p.prototype._request=function(e,t){return new o(function(n,r){if(f.cors||f.hasXDomainRequest){e=s(e,t.headers);var o,i,c=t.body,u=f.cors?new XMLHttpRequest:new XDomainRequest,l=!1;o=setTimeout(p,t.timeouts.connect),u.onprogress=function(){l||d()},\"onreadystatechange\"in u&&(u.onreadystatechange=function(){!l&&u.readyState>1&&d()}),u.onload=function(){if(i)return;var e;clearTimeout(o);try{e={body:JSON.parse(u.responseText),responseText:u.responseText,statusCode:u.status,headers:u.getAllResponseHeaders&&u.getAllResponseHeaders()||{}}}catch(t){e=new a.UnparsableJSON({more:u.responseText})}e instanceof a.UnparsableJSON?r(e):n(e)},u.onerror=function(e){if(i)return;clearTimeout(o),r(new a.Network({more:e}))},u instanceof XMLHttpRequest?(u.open(t.method,e,!0),t.forceAuthHeaders&&(u.setRequestHeader(\"x-algolia-application-id\",t.headers[\"x-algolia-application-id\"]),u.setRequestHeader(\"x-algolia-api-key\",t.headers[\"x-algolia-api-key\"]))):u.open(t.method,e),f.cors&&(c&&(\"POST\"===t.method?u.setRequestHeader(\"content-type\",\"application/x-www-form-urlencoded\"):u.setRequestHeader(\"content-type\",\"application/json\")),u.setRequestHeader(\"accept\",\"application/json\")),c?u.send(c):u.send()}else r(new a.Network(\"CORS not supported\"));function p(){i=!0,u.abort(),r(new a.RequestTimeout)}function d(){l=!0,clearTimeout(o),o=setTimeout(p,t.timeouts.complete)}})},p.prototype._request.fallback=function(e,t){return e=s(e,t.headers),new o(function(n,r){c(e,t,function(e,t){e?r(e):n(t)})})},p.prototype._promise={reject:function(e){return o.reject(e)},resolve:function(e){return o.resolve(e)},delay:function(e){return new o(function(t){setTimeout(t,e)})},all:function(e){return o.all(e)}},l}},function(e,t,n){(function(t){var n;n=\"undefined\"!=typeof window?window:void 0!==t?t:\"undefined\"!=typeof self?self:{},e.exports=n}).call(t,n(4))},function(e,t,n){(function(t,n){var r;r=function(){\"use strict\";function e(e){return\"function\"==typeof e}var r=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},o=0,i=void 0,a=void 0,s=function(e,t){h[o]=e,h[o+1]=t,2===(o+=2)&&(a?a(m):x())};var c=\"undefined\"!=typeof window?window:void 0,u=c||{},l=u.MutationObserver||u.WebKitMutationObserver,f=\"undefined\"==typeof self&&void 0!==t&&\"[object process]\"==={}.toString.call(t),p=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;function d(){var e=setTimeout;return function(){return e(m,1)}}var h=new Array(1e3);function m(){for(var e=0;e<o;e+=2){(0,h[e])(h[e+1]),h[e]=void 0,h[e+1]=void 0}o=0}var g,v,y,b,x=void 0;function w(e,t){var n=this,r=new this.constructor(C);void 0===r[k]&&M(r);var o=n._state;if(o){var i=arguments[o-1];s(function(){return R(o,r,i,n._result)})}else I(n,r,e,t);return r}function _(e){if(e&&\"object\"==typeof e&&e.constructor===this)return e;var t=new this(C);return N(t,e),t}f?x=function(){return t.nextTick(m)}:l?(v=0,y=new l(m),b=document.createTextNode(\"\"),y.observe(b,{characterData:!0}),x=function(){b.data=v=++v%2}):p?((g=new MessageChannel).port1.onmessage=m,x=function(){return g.port2.postMessage(0)}):x=void 0===c?function(){try{var e=Function(\"return this\")().require(\"vertx\");return void 0!==(i=e.runOnLoop||e.runOnContext)?function(){i(m)}:d()}catch(e){return d()}}():d();var k=Math.random().toString(36).substring(2);function C(){}var A=void 0,S=1,E=2,T={error:null};function O(e){try{return e.then}catch(e){return T.error=e,T}}function $(t,n,r){n.constructor===t.constructor&&r===w&&n.constructor.resolve===_?function(e,t){t._state===S?L(e,t._result):t._state===E?D(e,t._result):I(t,void 0,function(t){return N(e,t)},function(t){return D(e,t)})}(t,n):r===T?(D(t,T.error),T.error=null):void 0===r?L(t,n):e(r)?function(e,t,n){s(function(e){var r=!1,o=function(e,t,n,r){try{e.call(t,n,r)}catch(e){return e}}(n,t,function(n){r||(r=!0,t!==n?N(e,n):L(e,n))},function(t){r||(r=!0,D(e,t))},e._label);!r&&o&&(r=!0,D(e,o))},e)}(t,n,r):L(t,n)}function N(e,t){var n,r;e===t?D(e,new TypeError(\"You cannot resolve a promise with itself\")):(r=typeof(n=t),null===n||\"object\"!==r&&\"function\"!==r?L(e,t):$(e,t,O(t)))}function j(e){e._onerror&&e._onerror(e._result),P(e)}function L(e,t){e._state===A&&(e._result=t,e._state=S,0!==e._subscribers.length&&s(P,e))}function D(e,t){e._state===A&&(e._state=E,e._result=t,s(j,e))}function I(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+S]=n,o[i+E]=r,0===i&&e._state&&s(P,e)}function P(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r=void 0,o=void 0,i=e._result,a=0;a<t.length;a+=3)r=t[a],o=t[a+n],r?R(n,r,o,i):o(i);e._subscribers.length=0}}function R(t,n,r,o){var i=e(r),a=void 0,s=void 0,c=void 0,u=void 0;if(i){if((a=function(e,t){try{return e(t)}catch(e){return T.error=e,T}}(r,o))===T?(u=!0,s=a.error,a.error=null):c=!0,n===a)return void D(n,new TypeError(\"A promises callback cannot return that same promise.\"))}else a=o,c=!0;n._state!==A||(i&&c?N(n,a):u?D(n,s):t===S?L(n,a):t===E&&D(n,a))}var F=0;function M(e){e[k]=F++,e._state=void 0,e._result=void 0,e._subscribers=[]}var q=function(){function e(e,t){this._instanceConstructor=e,this.promise=new e(C),this.promise[k]||M(this.promise),r(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?L(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&L(this.promise,this._result))):D(this.promise,new Error(\"Array Methods must be provided an Array\"))}return e.prototype._enumerate=function(e){for(var t=0;this._state===A&&t<e.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===_){var o=O(e);if(o===w&&e._state!==A)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(n===H){var i=new n(C);$(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){return t(e)}),t)}else this._willSettleAt(r(e),t)},e.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===A&&(this._remaining--,e===E?D(r,n):this._result[t]=n),0===this._remaining&&L(r,this._result)},e.prototype._willSettleAt=function(e,t){var n=this;I(e,void 0,function(e){return n._settledAt(S,t,e)},function(e){return n._settledAt(E,t,e)})},e}();var H=function(){function e(t){this[k]=F++,this._result=this._state=void 0,this._subscribers=[],C!==t&&(\"function\"!=typeof t&&function(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}(),this instanceof e?function(e,t){try{t(function(t){N(e,t)},function(t){D(e,t)})}catch(t){D(e,t)}}(this,t):function(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}())}return e.prototype.catch=function(e){return this.then(null,e)},e.prototype.finally=function(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){throw n})})},e}();return H.prototype.then=w,H.all=function(e){return new q(this,e).promise},H.race=function(e){var t=this;return r(e)?new t(function(n,r){for(var o=e.length,i=0;i<o;i++)t.resolve(e[i]).then(n,r)}):new t(function(e,t){return t(new TypeError(\"You must pass an array to race.\"))})},H.resolve=_,H.reject=function(e){var t=new this(C);return D(t,e),t},H._setScheduler=function(e){a=e},H._setAsap=function(e){s=e},H._asap=s,H.polyfill=function(){var e=void 0;if(void 0!==n)e=n;else if(\"undefined\"!=typeof self)e=self;else try{e=Function(\"return this\")()}catch(e){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var t=e.Promise;if(t){var r=null;try{r=Object.prototype.toString.call(t.resolve())}catch(e){}if(\"[object Promise]\"===r&&!t.cast)return}e.Promise=H},H.Promise=H,H},e.exports=r()}).call(t,n(9),n(4))},function(e,t,n){\"use strict\";e.exports=function(e,t){/\\?/.test(e)?e+=\"&\":e+=\"?\";return e+r(t)};var r=n(45)},function(e,t,n){\"use strict\";var r=function(e){switch(typeof e){case\"string\":return e;case\"boolean\":return e?\"true\":\"false\";case\"number\":return isFinite(e)?e:\"\";default:return\"\"}};e.exports=function(e,t,n,s){return t=t||\"&\",n=n||\"=\",null===e&&(e=void 0),\"object\"==typeof e?i(a(e),function(a){var s=encodeURIComponent(r(a))+n;return o(e[a])?i(e[a],function(e){return s+encodeURIComponent(r(e))}).join(t):s+encodeURIComponent(r(e[a]))}).join(t):s?encodeURIComponent(r(s))+n+encodeURIComponent(r(e)):\"\"};var o=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)};function i(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++)n.push(t(e[r],r));return n}var a=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},function(e,t,n){\"use strict\";e.exports=function(e,t,n){if(\"GET\"!==t.method)return void n(new Error(\"Method \"+t.method+\" \"+e+\" is not supported by JSONP.\"));t.debug(\"JSONP: start\");var i=!1,a=!1;o+=1;var s=document.getElementsByTagName(\"head\")[0],c=document.createElement(\"script\"),u=\"algoliaJSONP_\"+o,l=!1;window[u]=function(e){!function(){try{delete window[u],delete window[u+\"_loaded\"]}catch(e){window[u]=window[u+\"_loaded\"]=void 0}}(),a?t.debug(\"JSONP: Late answer, ignoring\"):(i=!0,d(),n(null,{body:e,responseText:JSON.stringify(e)}))},e+=\"&callback=\"+u,t.jsonBody&&t.jsonBody.params&&(e+=\"&\"+t.jsonBody.params);var f=setTimeout(function(){t.debug(\"JSONP: Script timeout\"),a=!0,d(),n(new r.RequestTimeout)},t.timeouts.complete);function p(){t.debug(\"JSONP: success\"),l||a||(l=!0,i||(t.debug(\"JSONP: Fail. Script loaded but did not call the callback\"),d(),n(new r.JSONPScriptFail)))}function d(){clearTimeout(f),c.onload=null,c.onreadystatechange=null,c.onerror=null,s.removeChild(c)}c.onreadystatechange=function(){\"loaded\"!==this.readyState&&\"complete\"!==this.readyState||p()},c.onload=p,c.onerror=function(){if(t.debug(\"JSONP: Script error\"),l||a)return;d(),n(new r.JSONPScriptError)},c.async=!0,c.defer=!0,c.src=e,s.appendChild(c)};var r=n(5),o=0},function(e,t,n){e.exports=function(e){return function(t,o,i){var a=n(3);(i=i&&a(i)||{}).hosts=i.hosts||[\"places-dsn.algolia.net\",\"places-1.algolianet.com\",\"places-2.algolianet.com\",\"places-3.algolianet.com\"],0!==arguments.length&&\"object\"!=typeof t&&void 0!==t||(t=\"\",o=\"\",i._allowEmptyCredentials=!0);var s=e(t,o,i),c=s.initIndex(\"places\");return c.search=r(\"query\",\"/1/places/query\"),c.getObject=function(e,t){return this.as._jsonRequest({method:\"GET\",url:\"/1/places/\"+encodeURIComponent(e),hostType:\"read\",callback:t})},c}};var r=n(13)},function(e,t,n){\"use strict\";e.exports=\"3.30.0\"},function(e,t,n){\"use strict\";e.exports=n(50)},function(e,t,n){\"use strict\";var r=n(15);n(1).element=r;var o=n(0);o.isArray=r.isArray,o.isFunction=r.isFunction,o.isObject=r.isPlainObject,o.bind=r.proxy,o.each=function(e,t){r.each(e,function(e,n){return t(n,e)})},o.map=r.map,o.mixin=r.extend,o.Event=r.Event;var i=\"aaAutocomplete\",a=n(51),s=n(16);function c(e,t,n,c){n=o.isArray(n)?n:[].slice.call(arguments,2);var u=r(e).each(function(e,o){var u=r(o),l=new s({el:u}),f=c||new a({input:u,eventBus:l,dropdownMenuContainer:t.dropdownMenuContainer,hint:void 0===t.hint||!!t.hint,minLength:t.minLength,autoselect:t.autoselect,autoselectOnBlur:t.autoselectOnBlur,tabAutocomplete:t.tabAutocomplete,openOnFocus:t.openOnFocus,templates:t.templates,debug:t.debug,clearOnSelected:t.clearOnSelected,cssClasses:t.cssClasses,datasets:n,keyboardShortcuts:t.keyboardShortcuts,appendTo:t.appendTo,autoWidth:t.autoWidth,ariaLabel:t.ariaLabel||o.getAttribute(\"aria-label\")});u.data(i,f)});return u.autocomplete={},o.each([\"open\",\"close\",\"getVal\",\"setVal\",\"destroy\",\"getWrapper\"],function(e){u.autocomplete[e]=function(){var t,n=arguments;return u.each(function(o,a){var s=r(a).data(i);t=s[e].apply(s,n)}),t}}),u}c.sources=a.sources,c.escapeHighlightedString=o.escapeHighlightedString;var u=\"autocomplete\"in window,l=window.autocomplete;c.noConflict=function(){return u?window.autocomplete=l:delete window.autocomplete,c},e.exports=c},function(e,t,n){\"use strict\";var r=\"aaAttrs\",o=n(0),i=n(1),a=n(16),s=n(52),c=n(59),u=n(17),l=n(11);function f(e){var t,n;if((e=e||{}).input||o.error(\"missing input\"),this.isActivated=!1,this.debug=!!e.debug,this.autoselect=!!e.autoselect,this.autoselectOnBlur=!!e.autoselectOnBlur,this.openOnFocus=!!e.openOnFocus,this.minLength=o.isNumber(e.minLength)?e.minLength:1,this.autoWidth=void 0===e.autoWidth||!!e.autoWidth,this.clearOnSelected=!!e.clearOnSelected,this.tabAutocomplete=void 0===e.tabAutocomplete||!!e.tabAutocomplete,e.hint=!!e.hint,e.hint&&e.appendTo)throw new Error(\"[autocomplete.js] hint and appendTo options can't be used at the same time\");this.css=e.css=o.mixin({},l,e.appendTo?l.appendTo:{}),this.cssClasses=e.cssClasses=o.mixin({},l.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix=o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=e.listboxId=[this.cssClasses.root,\"listbox\",o.getUniqueId()].join(\"-\");var s=function(e){var t,n,a,s;t=i.element(e.input),n=i.element(u.wrapper.replace(\"%ROOT%\",e.cssClasses.root)).css(e.css.wrapper),e.appendTo||\"block\"!==t.css(\"display\")||\"table\"!==t.parent().css(\"display\")||n.css(\"display\",\"table-cell\");var c=u.dropdown.replace(\"%PREFIX%\",e.cssClasses.prefix).replace(\"%DROPDOWN_MENU%\",e.cssClasses.dropdownMenu);a=i.element(c).css(e.css.dropdown).attr({role:\"listbox\",id:e.listboxId}),e.templates&&e.templates.dropdownMenu&&a.html(o.templatify(e.templates.dropdownMenu)());(s=t.clone().css(e.css.hint).css((l=t,{backgroundAttachment:l.css(\"background-attachment\"),backgroundClip:l.css(\"background-clip\"),backgroundColor:l.css(\"background-color\"),backgroundImage:l.css(\"background-image\"),backgroundOrigin:l.css(\"background-origin\"),backgroundPosition:l.css(\"background-position\"),backgroundRepeat:l.css(\"background-repeat\"),backgroundSize:l.css(\"background-size\")}))).val(\"\").addClass(o.className(e.cssClasses.prefix,e.cssClasses.hint,!0)).removeAttr(\"id name placeholder required\").prop(\"readonly\",!0).attr({\"aria-hidden\":\"true\",autocomplete:\"off\",spellcheck:\"false\",tabindex:-1}),s.removeData&&s.removeData();var l;t.data(r,{\"aria-autocomplete\":t.attr(\"aria-autocomplete\"),\"aria-expanded\":t.attr(\"aria-expanded\"),\"aria-owns\":t.attr(\"aria-owns\"),autocomplete:t.attr(\"autocomplete\"),dir:t.attr(\"dir\"),role:t.attr(\"role\"),spellcheck:t.attr(\"spellcheck\"),style:t.attr(\"style\"),type:t.attr(\"type\")}),t.addClass(o.className(e.cssClasses.prefix,e.cssClasses.input,!0)).attr({autocomplete:\"off\",spellcheck:!1,role:\"combobox\",\"aria-autocomplete\":e.datasets&&e.datasets[0]&&e.datasets[0].displayKey?\"both\":\"list\",\"aria-expanded\":\"false\",\"aria-label\":e.ariaLabel,\"aria-owns\":e.listboxId}).css(e.hint?e.css.input:e.css.inputWithNoHint);try{t.attr(\"dir\")||t.attr(\"dir\",\"auto\")}catch(e){}return(n=e.appendTo?n.appendTo(i.element(e.appendTo).eq(0)).eq(0):t.wrap(n).parent()).prepend(e.hint?s:null).append(a),{wrapper:n,input:t,hint:s,menu:a}}(e);this.$node=s.wrapper;var c=this.$input=s.input;t=s.menu,n=s.hint,e.dropdownMenuContainer&&i.element(e.dropdownMenuContainer).css(\"position\",\"relative\").append(t.css(\"top\",\"0\")),c.on(\"blur.aa\",function(e){var n=document.activeElement;o.isMsie()&&(t[0]===n||t[0].contains(n))&&(e.preventDefault(),e.stopImmediatePropagation(),o.defer(function(){c.focus()}))}),t.on(\"mousedown.aa\",function(e){e.preventDefault()}),this.eventBus=e.eventBus||new a({el:c}),this.dropdown=new f.Dropdown({appendTo:e.appendTo,wrapper:this.$node,menu:t,datasets:e.datasets,templates:e.templates,cssClasses:e.cssClasses,minLength:this.minLength}).onSync(\"suggestionClicked\",this._onSuggestionClicked,this).onSync(\"cursorMoved\",this._onCursorMoved,this).onSync(\"cursorRemoved\",this._onCursorRemoved,this).onSync(\"opened\",this._onOpened,this).onSync(\"closed\",this._onClosed,this).onSync(\"shown\",this._onShown,this).onSync(\"empty\",this._onEmpty,this).onSync(\"redrawn\",this._onRedrawn,this).onAsync(\"datasetRendered\",this._onDatasetRendered,this),this.input=new f.Input({input:c,hint:n}).onSync(\"focused\",this._onFocused,this).onSync(\"blurred\",this._onBlurred,this).onSync(\"enterKeyed\",this._onEnterKeyed,this).onSync(\"tabKeyed\",this._onTabKeyed,this).onSync(\"escKeyed\",this._onEscKeyed,this).onSync(\"upKeyed\",this._onUpKeyed,this).onSync(\"downKeyed\",this._onDownKeyed,this).onSync(\"leftKeyed\",this._onLeftKeyed,this).onSync(\"rightKeyed\",this._onRightKeyed,this).onSync(\"queryChanged\",this._onQueryChanged,this).onSync(\"whitespaceChanged\",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(e),this._setLanguageDirection()}o.mixin(f.prototype,{_bindKeyboardShortcuts:function(e){if(e.keyboardShortcuts){var t=this.$input,n=[];o.each(e.keyboardShortcuts,function(e){\"string\"==typeof e&&(e=e.toUpperCase().charCodeAt(0)),n.push(e)}),i.element(document).keydown(function(e){var r=e.target||e.srcElement,o=r.tagName;if(!r.isContentEditable&&\"INPUT\"!==o&&\"SELECT\"!==o&&\"TEXTAREA\"!==o){var i=e.which||e.keyCode;-1!==n.indexOf(i)&&(t.focus(),e.stopPropagation(),e.preventDefault())}})}},_onSuggestionClicked:function(e,t){var n;(n=this.dropdown.getDatumForSuggestion(t))&&this._select(n,{selectionMethod:\"click\"})},_onCursorMoved:function(e,t){var n=this.dropdown.getDatumForCursor(),r=this.dropdown.getCurrentCursor().attr(\"id\");this.input.setActiveDescendant(r),n&&(t&&this.input.setInputValue(n.value,!0),this.eventBus.trigger(\"cursorchanged\",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger(\"cursorremoved\")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger(\"updated\")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger(\"opened\")},_onEmpty:function(){this.eventBus.trigger(\"empty\")},_onRedrawn:function(){this.$node.css(\"top\",\"0px\"),this.$node.css(\"left\",\"0px\");var e=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css(\"width\",e.width+\"px\");var t=this.$node[0].getBoundingClientRect(),n=e.bottom-t.top;this.$node.css(\"top\",n+\"px\");var r=e.left-t.left;this.$node.css(\"left\",r+\"px\"),this.eventBus.trigger(\"redrawn\")},_onShown:function(){this.eventBus.trigger(\"shown\"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger(\"closed\")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var e=this.input.getQuery();e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var e,t;e=this.dropdown.getDatumForCursor(),t=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:\"blur\"};this.debug||(this.autoselectOnBlur&&e?this._select(e,n):this.autoselectOnBlur&&t?this._select(t,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(e,t){var n,r;n=this.dropdown.getDatumForCursor(),r=this.dropdown.getDatumForTopSuggestion();var o={selectionMethod:\"enterKey\"};n?(this._select(n,o),t.preventDefault()):this.autoselect&&r&&(this._select(r,o),t.preventDefault())},_onTabKeyed:function(e,t){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:\"tabKey\"}),t.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var e=this.input.getQuery();this.dropdown.isEmpty&&e.length>=this.minLength?this.dropdown.update(e):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var e=this.input.getQuery();this.dropdown.isEmpty&&e.length>=this.minLength?this.dropdown.update(e):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){\"rtl\"===this.dir&&this._autocomplete()},_onRightKeyed:function(){\"ltr\"===this.dir&&this._autocomplete()},_onQueryChanged:function(e,t){this.input.clearHintIfInvalid(),t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var e=this.input.getLanguageDirection();this.dir!==e&&(this.dir=e,this.$node.css(\"direction\",e),this.dropdown.setLanguageDirection(e))},_updateHint:function(){var e,t,n,r,i;(e=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(t=this.input.getInputValue(),n=s.normalizeQuery(t),r=o.escapeRegExChars(n),(i=new RegExp(\"^(?:\"+r+\")(.+$)\",\"i\").exec(e.value))?this.input.setHint(t+i[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(e){var t,n,r,o;t=this.input.getHint(),n=this.input.getQuery(),r=e||this.input.isCursorAtEnd(),t&&n!==t&&r&&((o=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(o.value),this.eventBus.trigger(\"autocompleted\",o.raw,o.datasetName))},_select:function(e,t){void 0!==e.value&&this.input.setQuery(e.value),this.clearOnSelected?this.setVal(\"\"):this.input.setInputValue(e.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger(\"selected\",e.raw,e.datasetName,t).isDefaultPrevented()&&(this.dropdown.close(),o.defer(o.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var e=this.input.getInputValue();e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(e){e=o.toStr(e),this.isActivated?this.input.setInputValue(e):(this.input.setQuery(e),this.input.setInputValue(e,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(e,t){var n=e.find(o.className(t.prefix,t.input));o.each(n.data(r),function(e,t){void 0===e?n.removeAttr(t):n.attr(t,e)}),n.detach().removeClass(o.className(t.prefix,t.input,!0)).insertAfter(e),n.removeData&&n.removeData(r);e.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),f.Dropdown=c,f.Input=s,f.sources=n(61),e.exports=f},function(e,t,n){\"use strict\";var r;r={9:\"tab\",27:\"esc\",37:\"left\",39:\"right\",13:\"enter\",38:\"up\",40:\"down\"};var o=n(0),i=n(1),a=n(10);function s(e){var t,n,a,s,c,u=this;(e=e||{}).input||o.error(\"input is missing\"),t=o.bind(this._onBlur,this),n=o.bind(this._onFocus,this),a=o.bind(this._onKeydown,this),s=o.bind(this._onInput,this),this.$hint=i.element(e.hint),this.$input=i.element(e.input).on(\"blur.aa\",t).on(\"focus.aa\",n).on(\"keydown.aa\",a),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=o.noop),o.isMsie()?this.$input.on(\"keydown.aa keypress.aa cut.aa paste.aa\",function(e){r[e.which||e.keyCode]||o.defer(o.bind(u._onInput,u,e))}):this.$input.on(\"input.aa\",s),this.query=this.$input.val(),this.$overflowHelper=(c=this.$input,i.element('<pre aria-hidden=\"true\"></pre>').css({position:\"absolute\",visibility:\"hidden\",whiteSpace:\"pre\",fontFamily:c.css(\"font-family\"),fontSize:c.css(\"font-size\"),fontStyle:c.css(\"font-style\"),fontVariant:c.css(\"font-variant\"),fontWeight:c.css(\"font-weight\"),wordSpacing:c.css(\"word-spacing\"),letterSpacing:c.css(\"letter-spacing\"),textIndent:c.css(\"text-indent\"),textRendering:c.css(\"text-rendering\"),textTransform:c.css(\"text-transform\")}).insertAfter(c))}function c(e){return e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}s.normalizeQuery=function(e){return(e||\"\").replace(/^\\s*/g,\"\").replace(/\\s{2,}/g,\" \")},o.mixin(s.prototype,a,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr(\"aria-activedescendant\"),this.trigger(\"blurred\")},_onFocus:function(){this.trigger(\"focused\")},_onKeydown:function(e){var t=r[e.which||e.keyCode];this._managePreventDefault(t,e),t&&this._shouldTrigger(t,e)&&this.trigger(t+\"Keyed\",e)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(e,t){var n,r,o;switch(e){case\"tab\":r=this.getHint(),o=this.getInputValue(),n=r&&r!==o&&!c(t);break;case\"up\":case\"down\":n=!c(t);break;default:n=!1}n&&t.preventDefault()},_shouldTrigger:function(e,t){var n;switch(e){case\"tab\":n=!c(t);break;default:n=!0}return n},_checkInputValue:function(){var e,t,n,r,o;e=this.getInputValue(),r=e,o=this.query,n=!(!(t=s.normalizeQuery(r)===s.normalizeQuery(o))||!this.query)&&this.query.length!==e.length,this.query=e,t?n&&this.trigger(\"whitespaceChanged\",this.query):this.trigger(\"queryChanged\",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(e){this.query=e},getInputValue:function(){return this.$input.val()},setInputValue:function(e,t){void 0===e&&(e=this.query),this.$input.val(e),t?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr(\"aria-expanded\",\"true\")},collapse:function(){this.$input.attr(\"aria-expanded\",\"false\")},setActiveDescendant:function(e){this.$input.attr(\"aria-activedescendant\",e)},removeActiveDescendant:function(){this.$input.removeAttr(\"aria-activedescendant\")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(e){this.$hint.val(e)},clearHint:function(){this.setHint(\"\")},clearHintIfInvalid:function(){var e,t,n;n=(e=this.getInputValue())!==(t=this.getHint())&&0===t.indexOf(e),\"\"!==e&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css(\"direction\")||\"ltr\").toLowerCase()},hasOverflow:function(){var e=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=e},isCursorAtEnd:function(){var e,t,n;return e=this.$input.val().length,t=this.$input[0].selectionStart,o.isNumber(t)?t===e:!document.selection||((n=document.selection.createRange()).moveStart(\"character\",-e),e===n.text.length)},destroy:function(){this.$hint.off(\".aa\"),this.$input.off(\".aa\"),this.$hint=this.$input=this.$overflowHelper=null}}),e.exports=s},function(e,t,n){\"use strict\";var r,o,i,a=[n(54),n(55),n(56),n(57),n(58)],s=-1,c=[],u=!1;function l(){r&&o&&(r=!1,o.length?c=o.concat(c):s=-1,c.length&&f())}function f(){if(!r){u=!1,r=!0;for(var e=c.length,t=setTimeout(l);e;){for(o=c,c=[];o&&++s<e;)o[s].run();s=-1,e=c.length}o=null,s=-1,r=!1,clearTimeout(t)}}for(var p=-1,d=a.length;++p<d;)if(a[p]&&a[p].test&&a[p].test()){i=a[p].install(f);break}function h(e,t){this.fun=e,this.array=t}h.prototype.run=function(){var e=this.fun,t=this.array;switch(t.length){case 0:return e();case 1:return e(t[0]);case 2:return e(t[0],t[1]);case 3:return e(t[0],t[1],t[2]);default:return e.apply(null,t)}},e.exports=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new h(e,t)),u||r||(u=!0,i())}},function(e,t,n){\"use strict\";(function(e){t.test=function(){return void 0!==e&&!e.browser},t.install=function(t){return function(){e.nextTick(t)}}}).call(t,n(9))},function(e,t,n){\"use strict\";(function(e){var n=e.MutationObserver||e.WebKitMutationObserver;t.test=function(){return n},t.install=function(t){var r=0,o=new n(t),i=e.document.createTextNode(\"\");return o.observe(i,{characterData:!0}),function(){i.data=r=++r%2}}}).call(t,n(4))},function(e,t,n){\"use strict\";(function(e){t.test=function(){return!e.setImmediate&&void 0!==e.MessageChannel},t.install=function(t){var n=new e.MessageChannel;return n.port1.onmessage=t,function(){n.port2.postMessage(0)}}}).call(t,n(4))},function(e,t,n){\"use strict\";(function(e){t.test=function(){return\"document\"in e&&\"onreadystatechange\"in e.document.createElement(\"script\")},t.install=function(t){return function(){var n=e.document.createElement(\"script\");return n.onreadystatechange=function(){t(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},e.document.documentElement.appendChild(n),t}}}).call(t,n(4))},function(e,t,n){\"use strict\";t.test=function(){return!0},t.install=function(e){return function(){setTimeout(e,0)}}},function(e,t,n){\"use strict\";var r=n(0),o=n(1),i=n(10),a=n(60),s=n(11);function c(e){var t,n,i,a=this;(e=e||{}).menu||r.error(\"menu is required\"),r.isArray(e.datasets)||r.isObject(e.datasets)||r.error(\"1 or more datasets required\"),e.datasets||r.error(\"datasets is required\"),this.isOpen=!1,this.isEmpty=!0,this.minLength=e.minLength||0,this.templates={},this.appendTo=e.appendTo||!1,this.css=r.mixin({},s,e.appendTo?s.appendTo:{}),this.cssClasses=e.cssClasses=r.mixin({},s.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),t=r.bind(this._onSuggestionClick,this),n=r.bind(this._onSuggestionMouseEnter,this),i=r.bind(this._onSuggestionMouseLeave,this);var u=r.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=o.element(e.menu).on(\"mouseenter.aa\",u,n).on(\"mouseleave.aa\",u,i).on(\"click.aa\",u,t),this.$container=e.appendTo?e.wrapper:this.$menu,e.templates&&e.templates.header&&(this.templates.header=r.templatify(e.templates.header),this.$menu.prepend(this.templates.header())),e.templates&&e.templates.empty&&(this.templates.empty=r.templatify(e.templates.empty),this.$empty=o.element('<div class=\"'+r.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'\"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=r.map(e.datasets,function(t){return function(e,t,n){return new c.Dataset(r.mixin({$menu:e,cssClasses:n},t))}(a.$menu,t,e.cssClasses)}),r.each(this.datasets,function(e){var t=e.getRoot();t&&0===t.parent().length&&a.$menu.append(t),e.onSync(\"rendered\",a._onRendered,a)}),e.templates&&e.templates.footer&&(this.templates.footer=r.templatify(e.templates.footer),this.$menu.append(this.templates.footer()));var l=this;o.element(window).resize(function(){l._redraw()})}r.mixin(c.prototype,i,{_onSuggestionClick:function(e){this.trigger(\"suggestionClicked\",o.element(e.currentTarget))},_onSuggestionMouseEnter:function(e){var t=o.element(e.currentTarget);if(!t.hasClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout(function(){n._setCursor(t,!1)},0)}},_onSuggestionMouseLeave:function(e){if(e.relatedTarget&&o.element(e.relatedTarget).closest(\".\"+r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger(\"cursorRemoved\")},_onRendered:function(e,t){if(this.isEmpty=r.every(this.datasets,function(e){return e.isEmpty()}),this.isEmpty)if(t.length>=this.minLength&&this.trigger(\"empty\"),this.$empty)if(t.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else r.any(this.datasets,function(e){return e.templates&&e.templates.empty})?t.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),t.length>=this.minLength?this._show():this._hide());this.trigger(\"datasetRendered\")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css(\"display\",\"block\"),this._redraw(),this.trigger(\"shown\")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger(\"redrawn\")},_getSuggestions:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(e,t){e.first().addClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr(\"aria-selected\",\"true\"),this.trigger(\"cursorMoved\",t)},_removeCursor:function(){this._getCursor().removeClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr(\"aria-selected\")},_moveCursor:function(e){var t,n,r,o;this.isOpen&&(n=this._getCursor(),t=this._getSuggestions(),this._removeCursor(),-1!==(r=((r=t.index(n)+e)+1)%(t.length+1)-1)?(r<-1&&(r=t.length-1),this._setCursor(o=t.eq(r),!0),this._ensureVisible(o)):this.trigger(\"cursorRemoved\"))},_ensureVisible:function(e){var t,n,r,o;n=(t=e.position().top)+e.height()+parseInt(e.css(\"margin-top\"),10)+parseInt(e.css(\"margin-bottom\"),10),r=this.$menu.scrollTop(),o=this.$menu.height()+parseInt(this.$menu.css(\"padding-top\"),10)+parseInt(this.$menu.css(\"padding-bottom\"),10),t<0?this.$menu.scrollTop(r+t):o<n&&this.$menu.scrollTop(r+(n-o))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger(\"closed\"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger(\"opened\"))},setLanguageDirection:function(e){this.$menu.css(\"ltr\"===e?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(e){var t=null;return e.length&&(t={raw:a.extractDatum(e),value:a.extractValue(e),datasetName:a.extractDatasetName(e)}),t},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(e){r.each(this.datasets,function(t){t.update(e)})},empty:function(){r.each(this.datasets,function(e){e.clear()}),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(\".aa\"),this.$menu=null,r.each(this.datasets,function(e){e.destroy()})}}),c.Dataset=a,e.exports=c},function(e,t,n){\"use strict\";var r=\"aaDataset\",o=\"aaValue\",i=\"aaDatum\",a=n(0),s=n(1),c=n(17),u=n(11),l=n(10);function f(e){var t;(e=e||{}).templates=e.templates||{},e.source||a.error(\"missing source\"),e.name&&(t=e.name,!/^[_a-zA-Z0-9-]+$/.test(t))&&a.error(\"invalid dataset name: \"+e.name),this.query=null,this._isEmpty=!0,this.highlight=!!e.highlight,this.name=void 0===e.name||null===e.name?a.getUniqueId():e.name,this.source=e.source,this.displayFn=function(e){return e=e||\"value\",a.isFunction(e)?e:function(t){return t[e]}}(e.display||e.displayKey),this.debounce=e.debounce,this.cache=!1!==e.cache,this.templates=function(e,t){return{empty:e.empty&&a.templatify(e.empty),header:e.header&&a.templatify(e.header),footer:e.footer&&a.templatify(e.footer),suggestion:e.suggestion||function(e){return\"<p>\"+t(e)+\"</p>\"}}}(e.templates,this.displayFn),this.css=a.mixin({},u,e.appendTo?u.appendTo:{}),this.cssClasses=e.cssClasses=a.mixin({},u.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix||a.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=a.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=e.$menu&&e.$menu.find(n+\"-\"+this.name).length>0?s.element(e.$menu.find(n+\"-\"+this.name)[0]):s.element(c.dataset.replace(\"%CLASS%\",this.name).replace(\"%PREFIX%\",this.cssClasses.prefix).replace(\"%DATASET%\",this.cssClasses.dataset)),this.$menu=e.$menu,this.clearCachedSuggestions()}f.extractDatasetName=function(e){return s.element(e).data(r)},f.extractValue=function(e){return s.element(e).data(o)},f.extractDatum=function(e){var t=s.element(e).data(i);return\"string\"==typeof t&&(t=JSON.parse(t)),t},a.mixin(f.prototype,l,{_render:function(e,t){if(this.$el){var n,u=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=t&&t.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!0}].concat(t),u.templates.empty.apply(this,t)}.apply(this,l)).prepend(u.templates.header?f.apply(this,l):null).append(u.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var e,n,l=[].slice.call(arguments,0),f=this,p=c.suggestions.replace(\"%PREFIX%\",this.cssClasses.prefix).replace(\"%SUGGESTIONS%\",this.cssClasses.suggestions);return e=s.element(p).css(this.css.suggestions),n=a.map(t,function(e){var t,n=c.suggestion.replace(\"%PREFIX%\",f.cssClasses.prefix).replace(\"%SUGGESTION%\",f.cssClasses.suggestion);return(t=s.element(n).attr({role:\"option\",id:[\"option\",Math.floor(1e8*Math.random())].join(\"-\")}).append(u.templates.suggestion.apply(this,[e].concat(l)))).data(r,u.name),t.data(o,u.displayFn(e)||void 0),t.data(i,JSON.stringify(e)),t.children().each(function(){s.element(this).css(f.css.suggestionChild)}),t}),e.append.apply(e,n),e}.apply(this,l)).prepend(u.templates.header?f.apply(this,l):null).append(u.templates.footer?p.apply(this,l):null);else if(t&&!Array.isArray(t))throw new TypeError(\"suggestions must be an array\");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?\"with\":\"without\")+\"-\"+this.name).removeClass(this.cssClasses.prefix+(n?\"without\":\"with\")+\"-\"+this.name),this.trigger(\"rendered\",e)}function f(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!n}].concat(t),u.templates.header.apply(this,t)}function p(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!n}].concat(t),u.templates.footer.apply(this,t)}},getRoot:function(){return this.$el},update:function(e){function t(t){if(!this.canceled&&e===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(e,t,n),this._render.apply(this,[e,t].concat(n))}}if(this.query=e,this.canceled=!1,this.shouldFetchFromCache(e))t.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,r=function(){n.canceled||n.source(e,t.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout(function(){n.debounceTimeout=null,r()},this.debounce)}else r()}},cacheSuggestions:function(e,t,n){this.cachedQuery=e,this.cachedSuggestions=t,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(e){return this.cache&&this.cachedQuery===e&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger(\"rendered\",\"\")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),e.exports=f},function(e,t,n){\"use strict\";e.exports={hits:n(62),popularIn:n(63)}},function(e,t,n){\"use strict\";var r=n(0),o=n(18),i=n(19);e.exports=function(e,t){var n=i(e.as._ua);return n&&n[0]>=3&&n[1]>20&&((t=t||{}).additionalUA=\"autocomplete.js \"+o),function(n,o){e.search(n,t,function(e,t){e?r.error(e.message):o(t.hits,t)})}}},function(e,t,n){\"use strict\";var r=n(0),o=n(18),i=n(19);e.exports=function(e,t,n,a){var s=i(e.as._ua);if(s&&s[0]>=3&&s[1]>20&&((t=t||{}).additionalUA=\"autocomplete.js \"+o),!n.source)return r.error(\"Missing 'source' key\");var c=r.isFunction(n.source)?n.source:function(e){return e[n.source]};if(!n.index)return r.error(\"Missing 'index' key\");var u=n.index;return a=a||{},function(s,l){e.search(s,t,function(e,s){if(e)r.error(e.message);else{if(s.hits.length>0){var f=s.hits[0],p=r.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var d=i(u.as._ua);return d&&d[0]>=3&&d[1]>20&&(t.additionalUA=\"autocomplete.js \"+o),void u.search(c(f),p,function(e,t){if(e)r.error(e.message);else{var n=[];if(a.includeAll){var o=a.allTitle||\"All departments\";n.push(r.mixin({facet:{value:o,count:t.nbHits}},r.cloneDeep(f)))}r.each(t.facets,function(e,t){r.each(e,function(e,o){n.push(r.mixin({facet:{facet:t,value:o,count:e}},r.cloneDeep(f)))})});for(var i=1;i<s.hits.length;++i)n.push(s.hits[i]);l(n,s)}})}l([])}})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=\"algolia-docsearch-suggestion\",o={suggestion:'\\n  <a class=\"'+r+\"\\n    {{#isCategoryHeader}}\"+r+\"__main{{/isCategoryHeader}}\\n    {{#isSubCategoryHeader}}\"+r+'__secondary{{/isSubCategoryHeader}}\\n    \"\\n    aria-label=\"Link to the result\"\\n    href=\"{{{url}}}\"\\n    >\\n    <div class=\"'+r+'--category-header\">\\n        <span class=\"'+r+'--category-header-lvl0\">{{{category}}}</span>\\n    </div>\\n    <div class=\"'+r+'--wrapper\">\\n      <div class=\"'+r+'--subcategory-column\">\\n        <span class=\"'+r+'--subcategory-column-text\">{{{subcategory}}}</span>\\n      </div>\\n      {{#isTextOrSubcategoryNonEmpty}}\\n      <div class=\"'+r+'--content\">\\n        <div class=\"'+r+'--subcategory-inline\">{{{subcategory}}}</div>\\n        <div class=\"'+r+'--title\">{{{title}}}</div>\\n        {{#text}}<div class=\"'+r+'--text\">{{{text}}}</div>{{/text}}\\n      </div>\\n      {{/isTextOrSubcategoryNonEmpty}}\\n    </div>\\n  </a>\\n  ',suggestionSimple:'\\n  <div class=\"'+r+\"\\n    {{#isCategoryHeader}}\"+r+\"__main{{/isCategoryHeader}}\\n    {{#isSubCategoryHeader}}\"+r+'__secondary{{/isSubCategoryHeader}}\\n    suggestion-layout-simple\\n  \">\\n    <div class=\"'+r+'--category-header\">\\n        {{^isLvl0}}\\n        <span class=\"'+r+\"--category-header-lvl0 \"+r+'--category-header-item\">{{{category}}}</span>\\n          {{^isLvl1}}\\n          {{^isLvl1EmptyOrDuplicate}}\\n          <span class=\"'+r+\"--category-header-lvl1 \"+r+'--category-header-item\">\\n              {{{subcategory}}}\\n          </span>\\n          {{/isLvl1EmptyOrDuplicate}}\\n          {{/isLvl1}}\\n        {{/isLvl0}}\\n        <div class=\"'+r+\"--title \"+r+'--category-header-item\">\\n            {{#isLvl2}}\\n                {{{title}}}\\n            {{/isLvl2}}\\n            {{#isLvl1}}\\n                {{{subcategory}}}\\n            {{/isLvl1}}\\n            {{#isLvl0}}\\n                {{{category}}}\\n            {{/isLvl0}}\\n        </div>\\n    </div>\\n    <div class=\"'+r+'--wrapper\">\\n      {{#text}}\\n      <div class=\"'+r+'--content\">\\n        <div class=\"'+r+'--text\">{{{text}}}</div>\\n      </div>\\n      {{/text}}\\n    </div>\\n  </div>\\n  ',footer:'\\n    <div class=\"algolia-docsearch-footer\">\\n      Search by <a class=\"algolia-docsearch-footer--logo\" href=\"https://www.algolia.com/docsearch\">Algolia</a>\\n    </div>\\n  ',empty:'\\n  <div class=\"'+r+'\">\\n    <div class=\"'+r+'--wrapper\">\\n        <div class=\"'+r+\"--content \"+r+'--no-results\">\\n            <div class=\"'+r+'--title\">\\n                <div class=\"'+r+'--text\">\\n                    No results found for query <b>\"{{query}}\"</b>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n  </div>\\n  ',searchBox:'\\n  <form novalidate=\"novalidate\" onsubmit=\"return false;\" class=\"searchbox\">\\n    <div role=\"search\" class=\"searchbox__wrapper\">\\n      <input id=\"docsearch\" type=\"search\" name=\"search\" placeholder=\"Search the docs\" autocomplete=\"off\" required=\"required\" class=\"searchbox__input\"/>\\n      <button type=\"submit\" title=\"Submit your search query.\" class=\"searchbox__submit\" >\\n        <svg width=12 height=12 role=\"img\" aria-label=\"Search\">\\n          <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#sbx-icon-search-13\"></use>\\n        </svg>\\n      </button>\\n      <button type=\"reset\" title=\"Clear the search query.\" class=\"searchbox__reset hide\">\\n        <svg width=12 height=12 role=\"img\" aria-label=\"Reset\">\\n          <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#sbx-icon-clear-3\"></use>\\n        </svg>\\n      </button>\\n    </div>\\n</form>\\n\\n<div class=\"svg-icons\" style=\"height: 0; width: 0; position: absolute; visibility: hidden\">\\n  <svg xmlns=\"http://www.w3.org/2000/svg\">\\n    <symbol id=\"sbx-icon-clear-3\" viewBox=\"0 0 40 40\"><path d=\"M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z\" fill-rule=\"evenodd\"></symbol>\\n    <symbol id=\"sbx-icon-search-13\" viewBox=\"0 0 40 40\"><path d=\"M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z\" fill-rule=\"evenodd\"></symbol>\\n  </svg>\\n</div>\\n  '};t.default=o},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=n(20),a=(r=i)&&r.__esModule?r:{default:r};var s={mergeKeyWithParent:function(e,t){if(void 0===e[t])return e;if(\"object\"!==o(e[t]))return e;var n=a.default.extend({},e,e[t]);return delete n[t],n},groupBy:function(e,t){var n={};return a.default.each(e,function(e,r){if(void 0===r[t])throw new Error(\"[groupBy]: Object has no key \"+t);var o=r[t];\"string\"==typeof o&&(o=o.toLowerCase()),Object.prototype.hasOwnProperty.call(n,o)||(n[o]=[]),n[o].push(r)}),n},values:function(e){return Object.keys(e).map(function(t){return e[t]})},flatten:function(e){var t=[];return e.forEach(function(e){Array.isArray(e)?e.forEach(function(e){t.push(e)}):t.push(e)}),t},flattenAndFlagFirst:function(e,t){var n=this.values(e).map(function(e){return e.map(function(e,n){return e[t]=0===n,e})});return this.flatten(n)},compact:function(e){var t=[];return e.forEach(function(e){e&&t.push(e)}),t},getHighlightedValue:function(e,t){return e._highlightResult&&e._highlightResult.hierarchy_camel&&e._highlightResult.hierarchy_camel[t]&&e._highlightResult.hierarchy_camel[t].matchLevel&&\"none\"!==e._highlightResult.hierarchy_camel[t].matchLevel&&e._highlightResult.hierarchy_camel[t].value?e._highlightResult.hierarchy_camel[t].value:e._highlightResult&&e._highlightResult&&e._highlightResult[t]&&e._highlightResult[t].value?e._highlightResult[t].value:e[t]},getSnippetedValue:function(e,t){if(!e._snippetResult||!e._snippetResult[t]||!e._snippetResult[t].value)return e[t];var n=e._snippetResult[t].value;return n[0]!==n[0].toUpperCase()&&(n=\"…\"+n),-1===[\".\",\"!\",\"?\"].indexOf(n[n.length-1])&&(n+=\"…\"),n},deepClone:function(e){return JSON.parse(JSON.stringify(e))}};t.default=s}])},e.exports=r()},function(e,t){e.exports={render:function(){var e=this.$createElement,t=this._self._c||e;return t(\"div\",{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:this.close,expression:\"close\"}],staticClass:\"search-box fixed pin-t border-t\"},[t(\"input\",{staticClass:\"form-control outline-none algolia-search-input text-center\",attrs:{placeholder:\"Search...\"}})])},staticRenderFns:[]}},function(e,t,n){var r=n(1)(n(57),n(58),!1,null,null,null);e.exports=r.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"internal-search-box\",props:[\"versionUrl\",\"searchUrl\"],data:function(){return{search:\"\",pages:[],isLoaded:!1}},methods:{close:function(e){var t=e.target.id;[\"search-button\",\"search-button-icon\"].includes(t)||this.$emit(\"close\")},navigateToHeading:function(e,t){window.location=this.versionUrl+e.path+\"#\"+this.slugify(t)},slugify:function(e){return e.toString().toLowerCase().replace(/\\s+/g,\"-\")}},computed:{filteredPages:function(){var e=this;return this.pages.filter(function(t){var n=!1;return t.headings.forEach(function(t){t.toLowerCase().includes(e.search)&&(n=!0)}),t.title.toLowerCase().includes(e.search)||n})}},mounted:function(){var e=this;$(\".internal-search-input\").focus(),axios.get(this.searchUrl).then(function(t){e.pages=t.data,e.isLoaded=!0}).catch(function(){return e.isLoaded=!0})}}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:e.close,expression:\"close\"}],staticClass:\"search-box fixed pin-t border-t\"},[n(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.search,expression:\"search\"}],staticClass:\"form-control outline-none internal-search-input text-center\",attrs:{placeholder:\"Search...\"},domProps:{value:e.search},on:{input:function(t){t.target.composing||(e.search=t.target.value)}}}),e._v(\" \"),n(\"div\",{staticClass:\"internal-autocomplete-result\"},[e.filteredPages.length?n(\"ul\",e._l(e.filteredPages,function(t){return n(\"li\",{key:t.path},[n(\"a\",{attrs:{href:e.versionUrl+t.path}},[n(\"span\",{staticClass:\"page-title\"},[n(\"b\",[e._v(e._s(t.title))])])]),e._v(\" \"),n(\"hr\"),e._v(\" \"),e._l(t.headings,function(r){return n(\"p\",{key:r,staticClass:\"heading\",on:{click:function(n){return e.navigateToHeading(t,r)}}},[e._v(e._s(r))])})],2)}),0):e._e(),e._v(\" \"),!e.filteredPages.length&&e.isLoaded?n(\"div\",{staticClass:\"text-center py-8\"},[n(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",height:\"100px\",viewBox:\"0 -12 512.00032 512\",width:\"100px\"}},[n(\"path\",{attrs:{d:\"m455.074219 172.613281 53.996093-53.996093c2.226563-2.222657 3.273438-5.367188 2.828126-8.480469-.441407-3.113281-2.328126-5.839844-5.085938-7.355469l-64.914062-35.644531c-4.839844-2.65625-10.917969-.886719-13.578126 3.953125-2.65625 4.84375-.890624 10.921875 3.953126 13.578125l53.234374 29.230469-46.339843 46.335937-166.667969-91.519531 46.335938-46.335938 46.839843 25.722656c4.839844 2.65625 10.921875.890626 13.578125-3.953124 2.660156-4.839844.890625-10.921876-3.953125-13.578126l-53.417969-29.335937c-3.898437-2.140625-8.742187-1.449219-11.882812 1.695313l-54 54-54-54c-3.144531-3.144532-7.988281-3.832032-11.882812-1.695313l-184.929688 101.546875c-2.757812 1.515625-4.644531 4.238281-5.085938 7.355469-.445312 3.113281.601563 6.257812 2.828126 8.480469l53.996093 53.996093-53.996093 53.992188c-2.226563 2.226562-3.273438 5.367187-2.828126 8.484375.441407 3.113281 2.328126 5.839844 5.085938 7.351562l55.882812 30.6875v102.570313c0 3.652343 1.988282 7.011719 5.1875 8.769531l184.929688 101.542969c1.5.824219 3.15625 1.234375 4.8125 1.234375s3.3125-.410156 4.8125-1.234375l184.929688-101.542969c3.199218-1.757812 5.1875-5.117188 5.1875-8.769531v-102.570313l55.882812-30.683594c2.757812-1.515624 4.644531-4.242187 5.085938-7.355468.445312-3.113282-.601563-6.257813-2.828126-8.480469zm-199.074219 90.132813-164.152344-90.136719 164.152344-90.140625 164.152344 90.140625zm-62.832031-240.367188 46.332031 46.335938-166.667969 91.519531-46.335937-46.335937zm-120.328125 162.609375 166.667968 91.519531-46.339843 46.339844-166.671875-91.519531zm358.089844 184.796875-164.929688 90.5625v-102.222656c0-5.523438-4.476562-10-10-10s-10 4.476562-10 10v102.222656l-164.929688-90.5625v-85.671875l109.046876 59.878907c1.511718.828124 3.167968 1.234374 4.808593 1.234374 2.589844 0 5.152344-1.007812 7.074219-2.929687l54-54 54 54c1.921875 1.925781 4.484375 2.929687 7.074219 2.929687 1.640625 0 3.296875-.40625 4.808593-1.234374l109.046876-59.878907zm-112.09375-46.9375-46.339844-46.34375 166.667968-91.515625 46.34375 46.335938zm0 0\",fill:\"#9c9c9c\"}}),e._v(\" \"),n(\"path\",{attrs:{d:\"m404.800781 68.175781c2.628907 0 5.199219-1.070312 7.070313-2.933593 1.859375-1.859376 2.929687-4.4375 2.929687-7.066407 0-2.632812-1.070312-5.210937-2.929687-7.070312-1.859375-1.863281-4.441406-2.929688-7.070313-2.929688-2.640625 0-5.210937 1.066407-7.070312 2.929688-1.871094 1.859375-2.929688 4.4375-2.929688 7.070312 0 2.628907 1.058594 5.207031 2.929688 7.066407 1.859375 1.863281 4.441406 2.933593 7.070312 2.933593zm0 0\",fill:\"#9c9c9c\"}}),e._v(\" \"),n(\"path\",{attrs:{d:\"m256 314.925781c-2.628906 0-5.210938 1.066407-7.070312 2.929688-1.859376 1.867187-2.929688 4.4375-2.929688 7.070312 0 2.636719 1.070312 5.207031 2.929688 7.078125 1.859374 1.859375 4.441406 2.921875 7.070312 2.921875s5.210938-1.0625 7.070312-2.921875c1.859376-1.871094 2.929688-4.441406 2.929688-7.078125 0-2.632812-1.070312-5.203125-2.929688-7.070312-1.859374-1.863281-4.441406-2.929688-7.070312-2.929688zm0 0\",fill:\"#9c9c9c\"}})]),e._v(\" \"),n(\"p\",[e._v(\"No results found!\")])]):e._e()])])},staticRenderFns:[]}},function(e,t,n){var r=n(1)(n(60),n(61),!1,null,null,null);e.exports=r.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"larecipe-back-to-top\",mounted:function(){$(window).on(\"scroll\",function(){$(window).scrollTop()>=300?$(\"#backtotop\").addClass(\"visible\"):$(\"#backtotop\").removeClass(\"visible\")}),$(\"#backtotop a\").on(\"click\",function(){return $(\"html, body\").animate({scrollTop:0},500),!1})}}},function(e,t){e.exports={render:function(){this.$createElement;this._self._c;return this._m(0)},staticRenderFns:[function(){var e=this.$createElement,t=this._self._c||e;return t(\"div\",{attrs:{id:\"backtotop\"}},[t(\"a\",{attrs:{href:\"#\"}})])}]}},function(e,t,n){var r=n(1)(n(63),n(64),!1,null,null,null);e.exports=r.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"larecipe-badge\",props:{tag:{type:String,default:\"span\",description:\"Html tag to use for the badge.\"},rounded:{type:Boolean,default:!1,description:\"Whether badge is of pill type\"},circle:{type:Boolean,default:!1,description:\"Whether badge is circle\"},icon:{type:String,default:\"\",description:\"Icon name. Will be overwritten by slot if slot is used\"},type:{type:String,default:\"primary\",description:\"Badge type (info|danger|warning|success)\"}},computed:{classes:function(){return[\"is-\"+this.type,this.rounded&&\"rounded\",this.circle&&\"rounded-full h-8 w-8 flex items-center justify-center\"]}}}},function(e,t){e.exports={render:function(){var e=this.$createElement,t=this._self._c||e;return t(this.tag,{tag:\"component\",staticClass:\"badge inline-flex\",class:this.classes},[this._t(\"default\",[this.icon?t(\"i\",{class:this.icon}):this._e()])],2)},staticRenderFns:[]}},function(e,t,n){var r=n(1)(n(66),n(67),!1,null,null,null);e.exports=r.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"larecipe-button\",props:{tag:{type:String,default:\"button\",description:\"Button tag (default -> button)\"},type:{type:String,default:\"white\",description:\"Button type (e,g primary, danger etc)\"},textColor:{type:String,default:\"\",description:\"Button text color (e.g primary, danger etc)\"},radius:{type:String,default:\"md\",description:\"Border radius size\"},size:{type:String,default:\"base\",description:\"Border radius size\"},block:{type:Boolean,default:!1,description:\"Whether button is of block type\"}},computed:{classes:function(){var e,t,n;return[{\"w-full\":this.block},(e={},t=\"text-\"+this.textColor,n=this.textColor,t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e),\"is-\"+this.type,\"rounded-\"+this.radius,\"text-\"+this.size]}},methods:{handleClick:function(e){this.$emit(\"click\",e)}}}},function(e,t){e.exports={render:function(){var e=this.$createElement;return(this._self._c||e)(this.tag,{tag:\"component\",staticClass:\"button\",class:this.classes,on:{click:this.handleClick}},[this._t(\"default\")],2)},staticRenderFns:[]}},function(e,t,n){var r=n(1)(n(69),n(70),!1,null,null,null);e.exports=r.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"larecipe-card\",props:{type:{type:String,default:\"default\",description:\"Card type\"},shadow:{type:Boolean,description:\"Whether card has shadow\"},shadowSize:{type:String,description:\"Card shadow size\"}},computed:{classes:function(){return[{shadow:this.shadow},(e={},t=\"shadow-\"+this.shadowSize,n=this.shadowSize,t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e),\"is-\"+this.type];var e,t,n}}}},function(e,t){e.exports={render:function(){var e=this.$createElement,t=this._self._c||e;return t(\"div\",{staticClass:\"card\",class:this.classes},[t(\"div\",[this._t(\"default\")],2)])},staticRenderFns:[]}},function(e,t,n){var r=n(1)(n(72),n(73),!1,null,null,null);e.exports=r.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"larecipe-dropdown\",data:function(){return{isOpen:!1}},methods:{handleClickOutside:function(){this.isOpen&&(this.isOpen=!1)}}}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:e.handleClickOutside,expression:\"handleClickOutside\"}],staticClass:\"inline-flex relative\"},[n(\"div\",{on:{click:function(t){e.isOpen=!e.isOpen}}},[e._t(\"default\")],2),e._v(\" \"),n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.isOpen,expression:\"isOpen\"}],staticClass:\"absolute z-20 pin-r mt-12 shadow-lg rounded bg-white overflow-hidden\"},[e._t(\"list\")],2)])},staticRenderFns:[]}},function(e,t,n){var r=n(1)(n(75),n(76),!1,null,null,null);e.exports=r.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"larecipe-progress\",props:{type:{type:String,default:\"success\",description:\"Progress type (e.g danger, primary etc)\"},value:{type:Number,default:0,validator:function(e){return e>=0&&e<=100},description:\"Progress value\"}},computed:{computedClasses:function(){return[(e={},t=\"bg-\"+this.type,n=this.type,t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e)];var e,t,n}}}},function(e,t){e.exports={render:function(){var e=this.$createElement,t=this._self._c||e;return t(\"div\",{staticClass:\"bg-grey-light h-2 rounded overflow-hidden my-4\"},[t(\"div\",{staticClass:\"h-full\",class:this.computedClasses,style:\"width: \"+this.value+\"%;\"})])},staticRenderFns:[]}},function(e,t,n){var r;!function(o,i,a){function s(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent(\"on\"+t,n)}function c(e){if(\"keypress\"==e.type){var t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return d[e.which]?d[e.which]:h[e.which]?h[e.which]:String.fromCharCode(e.which).toLowerCase()}function u(e){return\"shift\"==e||\"ctrl\"==e||\"alt\"==e||\"meta\"==e}function l(e,t){var n,r,o,i=[];for(\"+\"===(n=e)?n=[\"+\"]:n=(n=n.replace(/\\+{2}/g,\"+plus\")).split(\"+\"),o=0;o<n.length;++o)r=n[o],g[r]&&(r=g[r]),t&&\"keypress\"!=t&&m[r]&&(r=m[r],i.push(\"shift\")),u(r)&&i.push(r);if(n=r,!(o=t)){if(!p)for(var a in p={},d)95<a&&112>a||d.hasOwnProperty(a)&&(p[d[a]]=a);o=p[n]?\"keydown\":\"keypress\"}return\"keypress\"==o&&i.length&&(o=\"keydown\"),{key:r,modifiers:i,action:o}}function f(e){function t(e){e=e||{};var t,n=!1;for(t in m)e[t]?n=!0:m[t]=0;n||(y=!1)}function n(e,t,n,r,o,i){var a,s,c=[],l=n.type;if(!d._callbacks[e])return[];for(\"keyup\"==l&&u(e)&&(t=[e]),a=0;a<d._callbacks[e].length;++a){var f;if(s=d._callbacks[e][a],(r||!s.seq||m[s.seq]==s.level)&&l==s.action)(f=\"keypress\"==l&&!n.metaKey&&!n.ctrlKey)||(f=s.modifiers,f=t.sort().join(\",\")===f.sort().join(\",\")),f&&(f=r&&s.seq==r&&s.level==i,(!r&&s.combo==o||f)&&d._callbacks[e].splice(a,1),c.push(s))}return c}function r(e,t,n,r){d.stopCallback(t,t.target||t.srcElement,n,r)||!1!==e(t,n)||(t.preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation?t.stopPropagation():t.cancelBubble=!0)}function o(e){\"number\"!=typeof e.which&&(e.which=e.keyCode);var t=c(e);t&&(\"keyup\"==e.type&&g===t?g=!1:d.handleKey(t,function(e){var t=[];return e.shiftKey&&t.push(\"shift\"),e.altKey&&t.push(\"alt\"),e.ctrlKey&&t.push(\"ctrl\"),e.metaKey&&t.push(\"meta\"),t}(e),e))}function a(e,n,o,i){function a(n){return function(){y=n,++m[e],clearTimeout(h),h=setTimeout(t,1e3)}}function s(n){r(o,n,e),\"keyup\"!==i&&(g=c(n)),setTimeout(t,10)}for(var u=m[e]=0;u<n.length;++u){var f=u+1===n.length?s:a(i||l(n[u+1]).action);p(n[u],f,i,e,u)}}function p(e,t,r,o,i){d._directMap[e+\":\"+r]=t;var s=(e=e.replace(/\\s+/g,\" \")).split(\" \");1<s.length?a(e,s,t,r):(r=l(e,r),d._callbacks[r.key]=d._callbacks[r.key]||[],n(r.key,r.modifiers,{type:r.action},o,e,i),d._callbacks[r.key][o?\"unshift\":\"push\"]({callback:t,modifiers:r.modifiers,action:r.action,seq:o,level:i,combo:e}))}var d=this;if(e=e||i,!(d instanceof f))return new f(e);d.target=e,d._callbacks={},d._directMap={};var h,m={},g=!1,v=!1,y=!1;d._handleKey=function(e,o,i){var a,s=n(e,o,i);o={};var c=0,l=!1;for(a=0;a<s.length;++a)s[a].seq&&(c=Math.max(c,s[a].level));for(a=0;a<s.length;++a)s[a].seq?s[a].level==c&&(l=!0,o[s[a].seq]=1,r(s[a].callback,i,s[a].combo,s[a].seq)):l||r(s[a].callback,i,s[a].combo);s=\"keypress\"==i.type&&v,i.type!=y||u(e)||s||t(o),v=l&&\"keydown\"==i.type},d._bindMultiple=function(e,t,n){for(var r=0;r<e.length;++r)p(e[r],t,n)},s(e,\"keypress\",o),s(e,\"keydown\",o),s(e,\"keyup\",o)}var p,d={8:\"backspace\",9:\"tab\",13:\"enter\",16:\"shift\",17:\"ctrl\",18:\"alt\",20:\"capslock\",27:\"esc\",32:\"space\",33:\"pageup\",34:\"pagedown\",35:\"end\",36:\"home\",37:\"left\",38:\"up\",39:\"right\",40:\"down\",45:\"ins\",46:\"del\",91:\"meta\",93:\"meta\",224:\"meta\"},h={106:\"*\",107:\"+\",109:\"-\",110:\".\",111:\"/\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"},m={\"~\":\"`\",\"!\":\"1\",\"@\":\"2\",\"#\":\"3\",$:\"4\",\"%\":\"5\",\"^\":\"6\",\"&\":\"7\",\"*\":\"8\",\"(\":\"9\",\")\":\"0\",_:\"-\",\"+\":\"=\",\":\":\";\",'\"':\"'\",\"<\":\",\",\">\":\".\",\"?\":\"/\",\"|\":\"\\\\\"},g={option:\"alt\",command:\"meta\",return:\"enter\",escape:\"esc\",plus:\"+\",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?\"meta\":\"ctrl\"};for(a=1;20>a;++a)d[111+a]=\"f\"+a;for(a=0;9>=a;++a)d[a+96]=a;f.prototype.bind=function(e,t,n){return e=e instanceof Array?e:[e],this._bindMultiple.call(this,e,t,n),this},f.prototype.unbind=function(e,t){return this.bind.call(this,e,function(){},t)},f.prototype.trigger=function(e,t){return this._directMap[e+\":\"+t]&&this._directMap[e+\":\"+t]({},e),this},f.prototype.reset=function(){return this._callbacks={},this._directMap={},this},f.prototype.stopCallback=function(e,t){return!(-1<(\" \"+t.className+\" \").indexOf(\" mousetrap \")||function e(t,n){return null!==t&&t!==i&&(t===n||e(t.parentNode,n))}(t,this.target))&&(\"INPUT\"==t.tagName||\"SELECT\"==t.tagName||\"TEXTAREA\"==t.tagName||t.isContentEditable)},f.prototype.handleKey=function(){return this._handleKey.apply(this,arguments)},f.init=function(){var e,t=f(i);for(e in t)\"_\"!==e.charAt(0)&&(f[e]=function(e){return function(){return t[e].apply(t,arguments)}}(e))},f.init(),o.Mousetrap=f,void 0!==e&&e.exports&&(e.exports=f),n(78)&&(void 0===(r=function(){return f}.call(t,n,t,e))||(e.exports=r))}(window,document)},function(e,t){(function(t){e.exports=t}).call(t,{})},function(e,t){},function(e,t){},function(e,t){}]);\n"
  },
  {
    "path": "public/vendor/bootstrap/css/bootstrap-grid.css",
    "content": "/*!\n * Bootstrap Grid v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nhtml {\n  box-sizing: border-box;\n  -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 20%;\n  flex: 0 0 20%;\n  max-width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n  margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n  margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */"
  },
  {
    "path": "public/vendor/bootstrap/css/bootstrap-reboot.css",
    "content": "/*!\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */"
  },
  {
    "path": "public/vendor/bootstrap/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n  --blue: #007bff;\n  --indigo: #6610f2;\n  --purple: #6f42c1;\n  --pink: #e83e8c;\n  --red: #dc3545;\n  --orange: #fd7e14;\n  --yellow: #ffc107;\n  --green: #28a745;\n  --teal: #20c997;\n  --cyan: #17a2b8;\n  --white: #fff;\n  --gray: #6c757d;\n  --gray-dark: #343a40;\n  --primary: #007bff;\n  --secondary: #6c757d;\n  --success: #28a745;\n  --info: #17a2b8;\n  --warning: #ffc107;\n  --danger: #dc3545;\n  --light: #f8f9fa;\n  --dark: #343a40;\n  --breakpoint-xs: 0;\n  --breakpoint-sm: 576px;\n  --breakpoint-md: 768px;\n  --breakpoint-lg: 992px;\n  --breakpoint-xl: 1200px;\n  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: 2.5rem;\n}\n\nh2, .h2 {\n  font-size: 2rem;\n}\n\nh3, .h3 {\n  font-size: 1.75rem;\n}\n\nh4, .h4 {\n  font-size: 1.5rem;\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: 6rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-2 {\n  font-size: 5.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-3 {\n  font-size: 4.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-4 {\n  font-size: 3.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\nhr {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n  font-size: 80%;\n  font-weight: 400;\n}\n\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote-footer {\n  display: block;\n  font-size: 80%;\n  color: #6c757d;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 90%;\n  color: #6c757d;\n}\n\ncode {\n  font-size: 87.5%;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 87.5%;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n}\n\npre {\n  display: block;\n  font-size: 87.5%;\n  color: #212529;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 20%;\n  flex: 0 0 20%;\n  max-width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #212529;\n}\n\n.table th,\n.table td {\n  padding: 0.75rem;\n  vertical-align: top;\n  border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n  border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n  padding: 0.3rem;\n}\n\n.table-bordered {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n  border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n  border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n  color: #212529;\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n  background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n  border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n  background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n  background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n  background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n  border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n  background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n  background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n  background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n  border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n  background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n  background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n  background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n  border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n  background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n  background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n  background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n  border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n  background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n  background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n  background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n  border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n  background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n  background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n  background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n  border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n  background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n  background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n  background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n  border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n  background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n  background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #454d55;\n}\n\n.table .thead-light th {\n  color: #495057;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.table-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n  border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n  border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-sm > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-md > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-lg > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-xl > .table-bordered {\n    border: 0;\n  }\n}\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n  border: 0;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n\n.form-control:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n  color: #495057;\n  background-color: #fff;\n  border-color: #80bdff;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n  display: block;\n  width: 100%;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  font-size: 1rem;\n  line-height: 1.5;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.form-control-lg {\n  height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n  height: auto;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 1rem;\n}\n\n.form-text {\n  display: block;\n  margin-top: 0.25rem;\n}\n\n.form-row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -5px;\n  margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\n.form-check {\n  position: relative;\n  display: block;\n  padding-left: 1.25rem;\n}\n\n.form-check-input {\n  position: absolute;\n  margin-top: 0.3rem;\n  margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n  color: #6c757d;\n}\n\n.form-check-label {\n  margin-bottom: 0;\n}\n\n.form-check-inline {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding-left: 0;\n  margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n  position: static;\n  margin-top: 0;\n  margin-right: 0.3125rem;\n  margin-left: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #28a745;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #fff;\n  background-color: rgba(40, 167, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #28a745;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n  border-color: #28a745;\n  padding-right: calc(0.75em + 2.3125rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n  color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n  border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n  border-color: #34ce57;\n  background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #dc3545;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc(0.75em + 2.3125rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n  color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n  border-color: #e4606d;\n  background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-flow: row wrap;\n  flex-flow: row wrap;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.form-inline .form-check {\n  width: 100%;\n}\n\n@media (min-width: 576px) {\n  .form-inline label {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n    -ms-flex-align: center;\n    align-items: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-plaintext {\n    display: inline-block;\n  }\n  .form-inline .input-group,\n  .form-inline .custom-select {\n    width: auto;\n  }\n  .form-inline .form-check {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: auto;\n    padding-left: 0;\n  }\n  .form-inline .form-check-input {\n    position: relative;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    margin-top: 0;\n    margin-right: 0.25rem;\n    margin-left: 0;\n  }\n  .form-inline .custom-control {\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n  }\n  .form-inline .custom-control-label {\n    margin-bottom: 0;\n  }\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  color: #212529;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #212529;\n  text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n  opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n  pointer-events: none;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #0069d9;\n  border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n  color: #fff;\n  background-color: #0069d9;\n  border-color: #0062cc;\n  box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #0062cc;\n  border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #5a6268;\n  border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n  color: #fff;\n  background-color: #5a6268;\n  border-color: #545b62;\n  box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #545b62;\n  border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #218838;\n  border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n  color: #fff;\n  background-color: #218838;\n  border-color: #1e7e34;\n  box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #1e7e34;\n  border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #138496;\n  border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n  color: #fff;\n  background-color: #138496;\n  border-color: #117a8b;\n  box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #117a8b;\n  border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:hover {\n  color: #212529;\n  background-color: #e0a800;\n  border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n  color: #212529;\n  background-color: #e0a800;\n  border-color: #d39e00;\n  box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #d39e00;\n  border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c82333;\n  border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n  color: #fff;\n  background-color: #c82333;\n  border-color: #bd2130;\n  box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #bd2130;\n  border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #212529;\n  background-color: #e2e6ea;\n  border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n  color: #212529;\n  background-color: #e2e6ea;\n  border-color: #dae0e5;\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n  color: #212529;\n  background-color: #dae0e5;\n  border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #23272b;\n  border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n  color: #fff;\n  background-color: #23272b;\n  border-color: #1d2124;\n  box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1d2124;\n  border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n  color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n  color: #007bff;\n  background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n  color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n  color: #6c757d;\n  background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n  color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n  color: #28a745;\n  background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n  color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n  color: #dc3545;\n  background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #007bff;\n  text-decoration: none;\n}\n\n.btn-link:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n  text-decoration: underline;\n  box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n.btn-block + .btn-block {\n  margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0.125rem 0 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n  display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n  right: auto;\n  bottom: auto;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1.5rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #16181b;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1.5rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #6c757d;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1.5rem;\n  color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n  z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n  margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n  position: relative;\n  -ms-flex: 1 1 0%;\n  flex: 1 1 0%;\n  min-width: 0;\n  margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n  margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n  z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n  z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n  z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n  margin-left: -1px;\n}\n\n.input-group-prepend {\n  margin-right: -1px;\n}\n\n.input-group-append {\n  margin-left: -1px;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n  height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n  height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n  padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.custom-control {\n  position: relative;\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 1rem;\n}\n\n.custom-control-input {\n  position: absolute;\n  left: 0;\n  z-index: -1;\n  width: 1rem;\n  height: 1.25rem;\n  opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n  color: #fff;\n  border-color: #007bff;\n  background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n  color: #fff;\n  background-color: #b3d7ff;\n  border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n  color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n  background-color: #e9ecef;\n}\n\n.custom-control-label {\n  position: relative;\n  margin-bottom: 0;\n  vertical-align: top;\n}\n\n.custom-control-label::before {\n  position: absolute;\n  top: 0.25rem;\n  left: -1.5rem;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  content: \"\";\n  background-color: #fff;\n  border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n  position: absolute;\n  top: 0.25rem;\n  left: -1.5rem;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  content: \"\";\n  background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n  border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n  border-color: #007bff;\n  background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n  border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n  padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n  left: -2.25rem;\n  width: 1.75rem;\n  pointer-events: all;\n  border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n  top: calc(0.25rem + 2px);\n  left: calc(-2.25rem + 2px);\n  width: calc(1rem - 4px);\n  height: calc(1rem - 4px);\n  background-color: #adb5bd;\n  border-radius: 0.5rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-switch .custom-control-label::after {\n    transition: none;\n  }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n  background-color: #fff;\n  -webkit-transform: translateX(0.75rem);\n  transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n  display: inline-block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  vertical-align: middle;\n  background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.custom-select:focus {\n  border-color: #80bdff;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n  height: auto;\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.custom-select:disabled {\n  color: #6c757d;\n  background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n  display: none;\n}\n\n.custom-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n  height: calc(1.5em + 0.5rem + 2px);\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n}\n\n.custom-select-lg {\n  height: calc(1.5em + 1rem + 2px);\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n}\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  margin-bottom: 0;\n}\n\n.custom-file-input {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  margin: 0;\n  opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n  border-color: #80bdff;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n  background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n  content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n  content: attr(data-browse);\n}\n\n.custom-file-label {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 0.75rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 3;\n  display: block;\n  height: calc(1.5em + 0.75rem);\n  padding: 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  content: \"Browse\";\n  background-color: #e9ecef;\n  border-left: inherit;\n  border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n  width: 100%;\n  height: 1.4rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.custom-range:focus {\n  outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n  border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.custom-range::-moz-range-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: 0;\n  margin-right: 0.2rem;\n  margin-left: 0.2rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-ms-thumb {\n    -ms-transition: none;\n    transition: none;\n  }\n}\n\n.custom-range::-ms-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: transparent;\n  border-color: transparent;\n  border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n  background-color: #dee2e6;\n  border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n  margin-right: 15px;\n  background-color: #dee2e6;\n  border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n  cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n  cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-control-label::before,\n  .custom-file-label,\n  .custom-select {\n    transition: none;\n  }\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n  text-decoration: none;\n}\n\n.nav-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n  margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #6c757d;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  display: inline-block;\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  line-height: inherit;\n  white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n  text-decoration: none;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n  float: none;\n}\n\n.navbar-text {\n  display: inline-block;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n  text-decoration: none;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  content: \"\";\n  background: no-repeat center center;\n  background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.5);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.5);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n  color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  min-height: 1px;\n  padding: 1.25rem;\n}\n\n.card-title {\n  margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n  margin-top: -0.375rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link:hover {\n  text-decoration: none;\n}\n\n.card-link + .card-link {\n  margin-left: 1.25rem;\n}\n\n.card-header {\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n  border-top: 0;\n}\n\n.card-footer {\n  padding: 0.75rem 1.25rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.625rem;\n  margin-bottom: -0.75rem;\n  margin-left: -0.625rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.625rem;\n  margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1.25rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-deck {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n  .card-deck .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-right: 15px;\n    margin-bottom: 0;\n    margin-left: 15px;\n  }\n}\n\n.card-group > .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.card-columns .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-columns {\n    -webkit-column-count: 3;\n    -moz-column-count: 3;\n    column-count: 3;\n    -webkit-column-gap: 1.25rem;\n    -moz-column-gap: 1.25rem;\n    column-gap: 1.25rem;\n    orphans: 1;\n    widows: 1;\n  }\n  .card-columns .card {\n    display: inline-block;\n    width: 100%;\n  }\n}\n\n.accordion > .card {\n  overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n  border-bottom: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n  border-radius: 0;\n  margin-bottom: -1px;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.75rem 1rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  display: inline-block;\n  padding-right: 0.5rem;\n  color: #6c757d;\n  content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: none;\n}\n\n.breadcrumb-item.active {\n  color: #6c757d;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #007bff;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #0056b3;\n  text-decoration: none;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 3;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n  margin-left: 0;\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: auto;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.25em 0.4em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .badge {\n    transition: none;\n  }\n}\n\na.badge:hover, a.badge:focus {\n  text-decoration: none;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.badge-pill {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n  border-radius: 10rem;\n}\n\n.badge-primary {\n  color: #fff;\n  background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n  color: #fff;\n  background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n  color: #fff;\n  background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n  color: #fff;\n  background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n  color: #fff;\n  background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n  color: #fff;\n  background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n  color: #fff;\n  background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n  color: #fff;\n  background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n  color: #212529;\n  background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n  color: #212529;\n  background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n  color: #fff;\n  background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n  color: #fff;\n  background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n  color: #212529;\n  background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n  color: #212529;\n  background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n  color: #fff;\n  background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n  padding: 2rem 1rem;\n  margin-bottom: 2rem;\n  background-color: #e9ecef;\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n  .jumbotron {\n    padding: 4rem 2rem;\n  }\n}\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  border-radius: 0;\n}\n\n.alert {\n  position: relative;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0.75rem 1.25rem;\n  color: inherit;\n}\n\n.alert-primary {\n  color: #004085;\n  background-color: #cce5ff;\n  border-color: #b8daff;\n}\n\n.alert-primary hr {\n  border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n  color: #002752;\n}\n\n.alert-secondary {\n  color: #383d41;\n  background-color: #e2e3e5;\n  border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n  border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n  color: #202326;\n}\n\n.alert-success {\n  color: #155724;\n  background-color: #d4edda;\n  border-color: #c3e6cb;\n}\n\n.alert-success hr {\n  border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n  color: #0b2e13;\n}\n\n.alert-info {\n  color: #0c5460;\n  background-color: #d1ecf1;\n  border-color: #bee5eb;\n}\n\n.alert-info hr {\n  border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n  color: #062c33;\n}\n\n.alert-warning {\n  color: #856404;\n  background-color: #fff3cd;\n  border-color: #ffeeba;\n}\n\n.alert-warning hr {\n  border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n  color: #533f03;\n}\n\n.alert-danger {\n  color: #721c24;\n  background-color: #f8d7da;\n  border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n  border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n  color: #491217;\n}\n\n.alert-light {\n  color: #818182;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light hr {\n  border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n  color: #686868;\n}\n\n.alert-dark {\n  color: #1b1e21;\n  background-color: #d6d8d9;\n  border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n  border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n  color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #007bff;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: progress-bar-stripes 1s linear infinite;\n  animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.media {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n  align-items: flex-start;\n}\n\n.media-body {\n  -ms-flex: 1;\n  flex: 1;\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.75rem 1.25rem;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush .list-group-item {\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0;\n}\n\n.list-group-flush .list-group-item:first-child {\n  border-top-width: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #004085;\n  background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #004085;\n  background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #004085;\n  border-color: #004085;\n}\n\n.list-group-item-secondary {\n  color: #383d41;\n  background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #383d41;\n  background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #383d41;\n  border-color: #383d41;\n}\n\n.list-group-item-success {\n  color: #155724;\n  background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #155724;\n  background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #155724;\n  border-color: #155724;\n}\n\n.list-group-item-info {\n  color: #0c5460;\n  background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #0c5460;\n  background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #0c5460;\n  border-color: #0c5460;\n}\n\n.list-group-item-warning {\n  color: #856404;\n  background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #856404;\n  background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #856404;\n  border-color: #856404;\n}\n\n.list-group-item-danger {\n  color: #721c24;\n  background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #721c24;\n  background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #721c24;\n  border-color: #721c24;\n}\n\n.list-group-item-light {\n  color: #818182;\n  background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #818182;\n  background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #818182;\n  border-color: #818182;\n}\n\n.list-group-item-dark {\n  color: #1b1e21;\n  background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1b1e21;\n  background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1b1e21;\n  border-color: #1b1e21;\n}\n\n.close {\n  float: right;\n  font-size: 1.5rem;\n  font-weight: 700;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: .5;\n}\n\n.close:hover {\n  color: #000;\n  text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n  opacity: .75;\n}\n\nbutton.close {\n  padding: 0;\n  background-color: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\na.close.disabled {\n  pointer-events: none;\n}\n\n.toast {\n  max-width: 350px;\n  overflow: hidden;\n  font-size: 0.875rem;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n  -webkit-backdrop-filter: blur(10px);\n  backdrop-filter: blur(10px);\n  opacity: 0;\n  border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n  opacity: 1;\n}\n\n.toast.show {\n  display: block;\n  opacity: 1;\n}\n\n.toast.hide {\n  display: none;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.25rem 0.75rem;\n  color: #6c757d;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n  padding: 0.75rem;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  display: -ms-flexbox;\n  display: flex;\n  max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: calc(100vh - 1rem);\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n  display: block;\n  height: calc(100vh - 1rem);\n  content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n  max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n  content: none;\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n  padding: 1rem 1rem;\n  margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    max-height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-scrollable .modal-content {\n    max-height: calc(100vh - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered::before {\n    height: calc(100vh - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n  top: 0;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n  right: 0;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n  bottom: 0;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n  left: 0;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: block;\n  max-width: 276px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n  margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n  margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n  margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n  margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n  margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 0.5rem 0.75rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-left,\n  .carousel-fade .active.carousel-item-right {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  color: #fff;\n  text-align: center;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 15;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding-left: 0;\n  margin-right: 15%;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: .5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators li {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: spinner-border .75s linear infinite;\n  animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: spinner-grow .75s linear infinite;\n  animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.bg-primary {\n  background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n  background-color: #0062cc !important;\n}\n\n.bg-secondary {\n  background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n  background-color: #545b62 !important;\n}\n\n.bg-success {\n  background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n  background-color: #1e7e34 !important;\n}\n\n.bg-info {\n  background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n  background-color: #117a8b !important;\n}\n\n.bg-warning {\n  background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n  background-color: #d39e00 !important;\n}\n\n.bg-danger {\n  background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n  background-color: #bd2130 !important;\n}\n\n.bg-light {\n  background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n  background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n  background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n  background-color: #1d2124 !important;\n}\n\n.bg-white {\n  background-color: #fff !important;\n}\n\n.bg-transparent {\n  background-color: transparent !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-right-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-left-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #007bff !important;\n}\n\n.border-secondary {\n  border-color: #6c757d !important;\n}\n\n.border-success {\n  border-color: #28a745 !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #dc3545 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.rounded-sm {\n  border-radius: 0.2rem !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n  border-top-left-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  width: 100%;\n  padding: 0;\n  overflow: hidden;\n}\n\n.embed-responsive::before {\n  display: block;\n  content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n\n.embed-responsive-21by9::before {\n  padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n  padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n  padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n  padding-top: 100%;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n.float-left {\n  float: left !important;\n}\n\n.float-right {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-left {\n    float: left !important;\n  }\n  .float-sm-right {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-left {\n    float: left !important;\n  }\n  .float-md-right {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-left {\n    float: left !important;\n  }\n  .float-lg-right {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-left {\n    float: left !important;\n  }\n  .float-xl-right {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n  .sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  overflow: visible;\n  clip: auto;\n  white-space: normal;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  pointer-events: auto;\n  content: \"\";\n  background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n  margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n  margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n\n.text-monospace {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n  text-align: justify !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.text-left {\n  text-align: left !important;\n}\n\n.text-right {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n@media (min-width: 576px) {\n  .text-sm-left {\n    text-align: left !important;\n  }\n  .text-sm-right {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .text-md-left {\n    text-align: left !important;\n  }\n  .text-md-right {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .text-lg-left {\n    text-align: left !important;\n  }\n  .text-lg-right {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .text-xl-left {\n    text-align: left !important;\n  }\n  .text-xl-right {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.font-weight-light {\n  font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n  font-weight: lighter !important;\n}\n\n.font-weight-normal {\n  font-weight: 400 !important;\n}\n\n.font-weight-bold {\n  font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n  font-weight: bolder !important;\n}\n\n.font-italic {\n  font-style: italic !important;\n}\n\n.text-white {\n  color: #fff !important;\n}\n\n.text-primary {\n  color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n  color: #0056b3 !important;\n}\n\n.text-secondary {\n  color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n  color: #494f54 !important;\n}\n\n.text-success {\n  color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n  color: #19692c !important;\n}\n\n.text-info {\n  color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n  color: #0f6674 !important;\n}\n\n.text-warning {\n  color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n  color: #ba8b00 !important;\n}\n\n.text-danger {\n  color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n  color: #a71d2a !important;\n}\n\n.text-light {\n  color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n  color: #cbd3da !important;\n}\n\n.text-dark {\n  color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n  color: #121416 !important;\n}\n\n.text-body {\n  color: #212529 !important;\n}\n\n.text-muted {\n  color: #6c757d !important;\n}\n\n.text-black-50 {\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-break {\n  word-break: break-word !important;\n  overflow-wrap: break-word !important;\n}\n\n.text-reset {\n  color: inherit !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media print {\n  *,\n  *::before,\n  *::after {\n    text-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a:not(.btn) {\n    text-decoration: underline;\n  }\n  abbr[title]::after {\n    content: \" (\" attr(title) \")\";\n  }\n  pre {\n    white-space: pre-wrap !important;\n  }\n  pre,\n  blockquote {\n    border: 1px solid #adb5bd;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  @page {\n    size: a3;\n  }\n  body {\n    min-width: 992px !important;\n  }\n  .container {\n    min-width: 992px !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .badge {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #dee2e6 !important;\n  }\n  .table-dark {\n    color: inherit;\n  }\n  .table-dark th,\n  .table-dark td,\n  .table-dark thead th,\n  .table-dark tbody + tbody {\n    border-color: #dee2e6;\n  }\n  .table .thead-dark th {\n    color: inherit;\n    border-color: #dee2e6;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "public/vendor/bootstrap/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v4.4.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery));\n}(this, (function (exports, $) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      if (enumerableOnly) symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n      keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n\n      if (i % 2) {\n        ownKeys(Object(source), true).forEach(function (key) {\n          _defineProperty(target, key, source[key]);\n        });\n      } else if (Object.getOwnPropertyDescriptors) {\n        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n      } else {\n        ownKeys(Object(source)).forEach(function (key) {\n          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n        });\n      }\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.4.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    },\n    jQueryDetection: function jQueryDetection() {\n      if (typeof $ === 'undefined') {\n        throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n      }\n\n      var version = $.fn.jquery.split(' ')[0].split('.');\n      var minMajor = 1;\n      var ltMajor = 2;\n      var minMinor = 9;\n      var minPatch = 1;\n      var maxMajor = 4;\n\n      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n        throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n      }\n    }\n  };\n  Util.jQueryDetection();\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.4.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.4.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLES: '[data-toggle=\"buttons\"]',\n    DATA_TOGGLE: '[data-toggle=\"button\"]',\n    DATA_TOGGLES_BUTTONS: '[data-toggle=\"buttons\"] .btn',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1),\n    LOAD_DATA_API: \"load\" + EVENT_KEY$1 + DATA_API_KEY$1\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLES)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          } else if (input.type === 'checkbox') {\n            if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            }\n          } else {\n            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n            triggerChangeEvent = false;\n          }\n\n          if (triggerChangeEvent) {\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n        if (addAriaPressed) {\n          this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n        }\n\n        if (triggerChangeEvent) {\n          $(this._element).toggleClass(ClassName$1.ACTIVE);\n        }\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON)[0];\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault(); // work around Firefox bug #1540995\n    } else {\n      var inputBtn = button.querySelector(Selector$1.INPUT);\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault(); // work around Firefox bug #1540995\n\n        return;\n      }\n\n      Button._jQueryInterface.call($(button), 'toggle');\n    }\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  $(window).on(Event$1.LOAD_DATA_API, function () {\n    // ensure correct active class is set to match the controls' actual values/states\n    // find all checkboxes/readio buttons inside data-toggle groups\n    var buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLES_BUTTONS));\n\n    for (var i = 0, len = buttons.length; i < len; i++) {\n      var button = buttons[i];\n      var input = button.querySelector(Selector$1.INPUT);\n\n      if (input.checked || input.hasAttribute('checked')) {\n        button.classList.add(ClassName$1.ACTIVE);\n      } else {\n        button.classList.remove(ClassName$1.ACTIVE);\n      }\n    } // find all button toggles\n\n\n    buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLE));\n\n    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n      var _button = buttons[_i];\n\n      if (_button.getAttribute('aria-pressed') === 'true') {\n        _button.classList.add(ClassName$1.ACTIVE);\n      } else {\n        _button.classList.remove(ClassName$1.ACTIVE);\n      }\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.4.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default, {}, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread2({}, Default, {}, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread2({}, _config, {}, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.4.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$1, {}, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread2({}, Default$1, {}, $this.data(), {}, typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**!\n   * @fileOverview Kickass library to create and place poppers near their reference elements.\n   * @version 1.16.0\n   * @license\n   * Copyright (c) 2016 Federico Zivolo and contributors\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy\n   * of this software and associated documentation files (the \"Software\"), to deal\n   * in the Software without restriction, including without limitation the rights\n   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n   * copies of the Software, and to permit persons to whom the Software is\n   * furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in all\n   * copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n   * SOFTWARE.\n   */\n  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\n  var timeoutDuration = function () {\n    var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n    for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n      if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n        return 1;\n      }\n    }\n    return 0;\n  }();\n\n  function microtaskDebounce(fn) {\n    var called = false;\n    return function () {\n      if (called) {\n        return;\n      }\n      called = true;\n      window.Promise.resolve().then(function () {\n        called = false;\n        fn();\n      });\n    };\n  }\n\n  function taskDebounce(fn) {\n    var scheduled = false;\n    return function () {\n      if (!scheduled) {\n        scheduled = true;\n        setTimeout(function () {\n          scheduled = false;\n          fn();\n        }, timeoutDuration);\n      }\n    };\n  }\n\n  var supportsMicroTasks = isBrowser && window.Promise;\n\n  /**\n  * Create a debounced version of a method, that's asynchronously deferred\n  * but called in the minimum time possible.\n  *\n  * @method\n  * @memberof Popper.Utils\n  * @argument {Function} fn\n  * @returns {Function}\n  */\n  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n  /**\n   * Check if the given variable is a function\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Any} functionToCheck - variable to check\n   * @returns {Boolean} answer to: is a function?\n   */\n  function isFunction(functionToCheck) {\n    var getType = {};\n    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n  }\n\n  /**\n   * Get CSS computed property of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Eement} element\n   * @argument {String} property\n   */\n  function getStyleComputedProperty(element, property) {\n    if (element.nodeType !== 1) {\n      return [];\n    }\n    // NOTE: 1 DOM access here\n    var window = element.ownerDocument.defaultView;\n    var css = window.getComputedStyle(element, null);\n    return property ? css[property] : css;\n  }\n\n  /**\n   * Returns the parentNode or the host of the element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} parent\n   */\n  function getParentNode(element) {\n    if (element.nodeName === 'HTML') {\n      return element;\n    }\n    return element.parentNode || element.host;\n  }\n\n  /**\n   * Returns the scrolling parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} scroll parent\n   */\n  function getScrollParent(element) {\n    // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n    if (!element) {\n      return document.body;\n    }\n\n    switch (element.nodeName) {\n      case 'HTML':\n      case 'BODY':\n        return element.ownerDocument.body;\n      case '#document':\n        return element.body;\n    }\n\n    // Firefox want us to check `-x` and `-y` variations as well\n\n    var _getStyleComputedProp = getStyleComputedProperty(element),\n        overflow = _getStyleComputedProp.overflow,\n        overflowX = _getStyleComputedProp.overflowX,\n        overflowY = _getStyleComputedProp.overflowY;\n\n    if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n      return element;\n    }\n\n    return getScrollParent(getParentNode(element));\n  }\n\n  /**\n   * Returns the reference node of the reference object, or the reference object itself.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n   * @returns {Element} parent\n   */\n  function getReferenceNode(reference) {\n    return reference && reference.referenceNode ? reference.referenceNode : reference;\n  }\n\n  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\n  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n  /**\n   * Determines if the browser is Internet Explorer\n   * @method\n   * @memberof Popper.Utils\n   * @param {Number} version to check\n   * @returns {Boolean} isIE\n   */\n  function isIE(version) {\n    if (version === 11) {\n      return isIE11;\n    }\n    if (version === 10) {\n      return isIE10;\n    }\n    return isIE11 || isIE10;\n  }\n\n  /**\n   * Returns the offset parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} offset parent\n   */\n  function getOffsetParent(element) {\n    if (!element) {\n      return document.documentElement;\n    }\n\n    var noOffsetParent = isIE(10) ? document.body : null;\n\n    // NOTE: 1 DOM access here\n    var offsetParent = element.offsetParent || null;\n    // Skip hidden elements which don't have an offsetParent\n    while (offsetParent === noOffsetParent && element.nextElementSibling) {\n      offsetParent = (element = element.nextElementSibling).offsetParent;\n    }\n\n    var nodeName = offsetParent && offsetParent.nodeName;\n\n    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n      return element ? element.ownerDocument.documentElement : document.documentElement;\n    }\n\n    // .offsetParent will return the closest TH, TD or TABLE in case\n    // no offsetParent is present, I hate this job...\n    if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n      return getOffsetParent(offsetParent);\n    }\n\n    return offsetParent;\n  }\n\n  function isOffsetContainer(element) {\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY') {\n      return false;\n    }\n    return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n  }\n\n  /**\n   * Finds the root node (document, shadowDOM root) of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} node\n   * @returns {Element} root node\n   */\n  function getRoot(node) {\n    if (node.parentNode !== null) {\n      return getRoot(node.parentNode);\n    }\n\n    return node;\n  }\n\n  /**\n   * Finds the offset parent common to the two provided nodes\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element1\n   * @argument {Element} element2\n   * @returns {Element} common offset parent\n   */\n  function findCommonOffsetParent(element1, element2) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n      return document.documentElement;\n    }\n\n    // Here we make sure to give as \"start\" the element that comes first in the DOM\n    var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n    var start = order ? element1 : element2;\n    var end = order ? element2 : element1;\n\n    // Get common ancestor container\n    var range = document.createRange();\n    range.setStart(start, 0);\n    range.setEnd(end, 0);\n    var commonAncestorContainer = range.commonAncestorContainer;\n\n    // Both nodes are inside #document\n\n    if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n      if (isOffsetContainer(commonAncestorContainer)) {\n        return commonAncestorContainer;\n      }\n\n      return getOffsetParent(commonAncestorContainer);\n    }\n\n    // one of the nodes is inside shadowDOM, find which one\n    var element1root = getRoot(element1);\n    if (element1root.host) {\n      return findCommonOffsetParent(element1root.host, element2);\n    } else {\n      return findCommonOffsetParent(element1, getRoot(element2).host);\n    }\n  }\n\n  /**\n   * Gets the scroll value of the given element in the given side (top and left)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {String} side `top` or `left`\n   * @returns {number} amount of scrolled pixels\n   */\n  function getScroll(element) {\n    var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n    var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      var html = element.ownerDocument.documentElement;\n      var scrollingElement = element.ownerDocument.scrollingElement || html;\n      return scrollingElement[upperSide];\n    }\n\n    return element[upperSide];\n  }\n\n  /*\n   * Sum or subtract the element scroll values (left and top) from a given rect object\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} rect - Rect object you want to change\n   * @param {HTMLElement} element - The element from the function reads the scroll values\n   * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n   * @return {Object} rect - The modifier rect object\n   */\n  function includeScroll(rect, element) {\n    var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var scrollTop = getScroll(element, 'top');\n    var scrollLeft = getScroll(element, 'left');\n    var modifier = subtract ? -1 : 1;\n    rect.top += scrollTop * modifier;\n    rect.bottom += scrollTop * modifier;\n    rect.left += scrollLeft * modifier;\n    rect.right += scrollLeft * modifier;\n    return rect;\n  }\n\n  /*\n   * Helper to detect borders of a given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {CSSStyleDeclaration} styles\n   * Result of `getStyleComputedProperty` on the given element\n   * @param {String} axis - `x` or `y`\n   * @return {number} borders - The borders size of the given axis\n   */\n\n  function getBordersSize(styles, axis) {\n    var sideA = axis === 'x' ? 'Left' : 'Top';\n    var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n    return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n  }\n\n  function getSize(axis, body, html, computedStyle) {\n    return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n  }\n\n  function getWindowSizes(document) {\n    var body = document.body;\n    var html = document.documentElement;\n    var computedStyle = isIE(10) && getComputedStyle(html);\n\n    return {\n      height: getSize('Height', body, html, computedStyle),\n      width: getSize('Width', body, html, computedStyle)\n    };\n  }\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n\n\n\n\n  var defineProperty = function (obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  };\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  /**\n   * Given element offsets, generate an output similar to getBoundingClientRect\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} offsets\n   * @returns {Object} ClientRect like output\n   */\n  function getClientRect(offsets) {\n    return _extends({}, offsets, {\n      right: offsets.left + offsets.width,\n      bottom: offsets.top + offsets.height\n    });\n  }\n\n  /**\n   * Get bounding client rect of given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} element\n   * @return {Object} client rect\n   */\n  function getBoundingClientRect(element) {\n    var rect = {};\n\n    // IE10 10 FIX: Please, don't ask, the element isn't\n    // considered in DOM in some circumstances...\n    // This isn't reproducible in IE10 compatibility mode of IE11\n    try {\n      if (isIE(10)) {\n        rect = element.getBoundingClientRect();\n        var scrollTop = getScroll(element, 'top');\n        var scrollLeft = getScroll(element, 'left');\n        rect.top += scrollTop;\n        rect.left += scrollLeft;\n        rect.bottom += scrollTop;\n        rect.right += scrollLeft;\n      } else {\n        rect = element.getBoundingClientRect();\n      }\n    } catch (e) {}\n\n    var result = {\n      left: rect.left,\n      top: rect.top,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n\n    // subtract scrollbar size from sizes\n    var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n    var width = sizes.width || element.clientWidth || result.width;\n    var height = sizes.height || element.clientHeight || result.height;\n\n    var horizScrollbar = element.offsetWidth - width;\n    var vertScrollbar = element.offsetHeight - height;\n\n    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n    // we make this check conditional for performance reasons\n    if (horizScrollbar || vertScrollbar) {\n      var styles = getStyleComputedProperty(element);\n      horizScrollbar -= getBordersSize(styles, 'x');\n      vertScrollbar -= getBordersSize(styles, 'y');\n\n      result.width -= horizScrollbar;\n      result.height -= vertScrollbar;\n    }\n\n    return getClientRect(result);\n  }\n\n  function getOffsetRectRelativeToArbitraryNode(children, parent) {\n    var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var isIE10 = isIE(10);\n    var isHTML = parent.nodeName === 'HTML';\n    var childrenRect = getBoundingClientRect(children);\n    var parentRect = getBoundingClientRect(parent);\n    var scrollParent = getScrollParent(children);\n\n    var styles = getStyleComputedProperty(parent);\n    var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n    var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n    // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n    if (fixedPosition && isHTML) {\n      parentRect.top = Math.max(parentRect.top, 0);\n      parentRect.left = Math.max(parentRect.left, 0);\n    }\n    var offsets = getClientRect({\n      top: childrenRect.top - parentRect.top - borderTopWidth,\n      left: childrenRect.left - parentRect.left - borderLeftWidth,\n      width: childrenRect.width,\n      height: childrenRect.height\n    });\n    offsets.marginTop = 0;\n    offsets.marginLeft = 0;\n\n    // Subtract margins of documentElement in case it's being used as parent\n    // we do this only on HTML because it's the only element that behaves\n    // differently when margins are applied to it. The margins are included in\n    // the box of the documentElement, in the other cases not.\n    if (!isIE10 && isHTML) {\n      var marginTop = parseFloat(styles.marginTop, 10);\n      var marginLeft = parseFloat(styles.marginLeft, 10);\n\n      offsets.top -= borderTopWidth - marginTop;\n      offsets.bottom -= borderTopWidth - marginTop;\n      offsets.left -= borderLeftWidth - marginLeft;\n      offsets.right -= borderLeftWidth - marginLeft;\n\n      // Attach marginTop and marginLeft because in some circumstances we may need them\n      offsets.marginTop = marginTop;\n      offsets.marginLeft = marginLeft;\n    }\n\n    if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n      offsets = includeScroll(offsets, parent);\n    }\n\n    return offsets;\n  }\n\n  function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n    var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var html = element.ownerDocument.documentElement;\n    var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n    var width = Math.max(html.clientWidth, window.innerWidth || 0);\n    var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n    var scrollTop = !excludeScroll ? getScroll(html) : 0;\n    var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n    var offset = {\n      top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n      left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n      width: width,\n      height: height\n    };\n\n    return getClientRect(offset);\n  }\n\n  /**\n   * Check if the given element is fixed or is inside a fixed parent\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {Element} customContainer\n   * @returns {Boolean} answer to \"isFixed?\"\n   */\n  function isFixed(element) {\n    var nodeName = element.nodeName;\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      return false;\n    }\n    if (getStyleComputedProperty(element, 'position') === 'fixed') {\n      return true;\n    }\n    var parentNode = getParentNode(element);\n    if (!parentNode) {\n      return false;\n    }\n    return isFixed(parentNode);\n  }\n\n  /**\n   * Finds the first parent of an element that has a transformed property defined\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} first transformed parent or documentElement\n   */\n\n  function getFixedPositionOffsetParent(element) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element || !element.parentElement || isIE()) {\n      return document.documentElement;\n    }\n    var el = element.parentElement;\n    while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n      el = el.parentElement;\n    }\n    return el || document.documentElement;\n  }\n\n  /**\n   * Computed the boundaries limits and return them\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} popper\n   * @param {HTMLElement} reference\n   * @param {number} padding\n   * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n   * @param {Boolean} fixedPosition - Is in fixed position mode\n   * @returns {Object} Coordinates of the boundaries\n   */\n  function getBoundaries(popper, reference, padding, boundariesElement) {\n    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n    // NOTE: 1 DOM access here\n\n    var boundaries = { top: 0, left: 0 };\n    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n    // Handle viewport case\n    if (boundariesElement === 'viewport') {\n      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n    } else {\n      // Handle other cases based on DOM element used as boundaries\n      var boundariesNode = void 0;\n      if (boundariesElement === 'scrollParent') {\n        boundariesNode = getScrollParent(getParentNode(reference));\n        if (boundariesNode.nodeName === 'BODY') {\n          boundariesNode = popper.ownerDocument.documentElement;\n        }\n      } else if (boundariesElement === 'window') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      } else {\n        boundariesNode = boundariesElement;\n      }\n\n      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n      // In case of HTML, we need a different computation\n      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n        var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n            height = _getWindowSizes.height,\n            width = _getWindowSizes.width;\n\n        boundaries.top += offsets.top - offsets.marginTop;\n        boundaries.bottom = height + offsets.top;\n        boundaries.left += offsets.left - offsets.marginLeft;\n        boundaries.right = width + offsets.left;\n      } else {\n        // for all the other DOM elements, this one is good\n        boundaries = offsets;\n      }\n    }\n\n    // Add paddings\n    padding = padding || 0;\n    var isPaddingNumber = typeof padding === 'number';\n    boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n    boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n    return boundaries;\n  }\n\n  function getArea(_ref) {\n    var width = _ref.width,\n        height = _ref.height;\n\n    return width * height;\n  }\n\n  /**\n   * Utility used to transform the `auto` placement to the placement with more\n   * available space.\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n    var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n    if (placement.indexOf('auto') === -1) {\n      return placement;\n    }\n\n    var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n    var rects = {\n      top: {\n        width: boundaries.width,\n        height: refRect.top - boundaries.top\n      },\n      right: {\n        width: boundaries.right - refRect.right,\n        height: boundaries.height\n      },\n      bottom: {\n        width: boundaries.width,\n        height: boundaries.bottom - refRect.bottom\n      },\n      left: {\n        width: refRect.left - boundaries.left,\n        height: boundaries.height\n      }\n    };\n\n    var sortedAreas = Object.keys(rects).map(function (key) {\n      return _extends({\n        key: key\n      }, rects[key], {\n        area: getArea(rects[key])\n      });\n    }).sort(function (a, b) {\n      return b.area - a.area;\n    });\n\n    var filteredAreas = sortedAreas.filter(function (_ref2) {\n      var width = _ref2.width,\n          height = _ref2.height;\n      return width >= popper.clientWidth && height >= popper.clientHeight;\n    });\n\n    var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n    var variation = placement.split('-')[1];\n\n    return computedPlacement + (variation ? '-' + variation : '');\n  }\n\n  /**\n   * Get offsets to the reference element\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} state\n   * @param {Element} popper - the popper element\n   * @param {Element} reference - the reference element (the popper will be relative to this)\n   * @param {Element} fixedPosition - is in fixed position mode\n   * @returns {Object} An object containing the offsets which will be applied to the popper\n   */\n  function getReferenceOffsets(state, popper, reference) {\n    var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n    return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n  }\n\n  /**\n   * Get the outer sizes of the given element (offset size + margins)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Object} object containing width and height properties\n   */\n  function getOuterSizes(element) {\n    var window = element.ownerDocument.defaultView;\n    var styles = window.getComputedStyle(element);\n    var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n    var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n    var result = {\n      width: element.offsetWidth + y,\n      height: element.offsetHeight + x\n    };\n    return result;\n  }\n\n  /**\n   * Get the opposite placement of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement\n   * @returns {String} flipped placement\n   */\n  function getOppositePlacement(placement) {\n    var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  /**\n   * Get offsets to the popper\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} position - CSS position the Popper will get applied\n   * @param {HTMLElement} popper - the popper element\n   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n   * @param {String} placement - one of the valid placement options\n   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n   */\n  function getPopperOffsets(popper, referenceOffsets, placement) {\n    placement = placement.split('-')[0];\n\n    // Get popper node sizes\n    var popperRect = getOuterSizes(popper);\n\n    // Add position, width and height to our offsets object\n    var popperOffsets = {\n      width: popperRect.width,\n      height: popperRect.height\n    };\n\n    // depending by the popper placement we have to compute its offsets slightly differently\n    var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n    var mainSide = isHoriz ? 'top' : 'left';\n    var secondarySide = isHoriz ? 'left' : 'top';\n    var measurement = isHoriz ? 'height' : 'width';\n    var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n    if (placement === secondarySide) {\n      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n    } else {\n      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n    }\n\n    return popperOffsets;\n  }\n\n  /**\n   * Mimics the `find` method of Array\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function find(arr, check) {\n    // use native find if supported\n    if (Array.prototype.find) {\n      return arr.find(check);\n    }\n\n    // use `filter` to obtain the same behavior of `find`\n    return arr.filter(check)[0];\n  }\n\n  /**\n   * Return the index of the matching object\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function findIndex(arr, prop, value) {\n    // use native findIndex if supported\n    if (Array.prototype.findIndex) {\n      return arr.findIndex(function (cur) {\n        return cur[prop] === value;\n      });\n    }\n\n    // use `find` + `indexOf` if `findIndex` isn't supported\n    var match = find(arr, function (obj) {\n      return obj[prop] === value;\n    });\n    return arr.indexOf(match);\n  }\n\n  /**\n   * Loop trough the list of modifiers and run them in order,\n   * each of them will then edit the data object.\n   * @method\n   * @memberof Popper.Utils\n   * @param {dataObject} data\n   * @param {Array} modifiers\n   * @param {String} ends - Optional modifier name used as stopper\n   * @returns {dataObject}\n   */\n  function runModifiers(modifiers, data, ends) {\n    var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n    modifiersToRun.forEach(function (modifier) {\n      if (modifier['function']) {\n        // eslint-disable-line dot-notation\n        console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n      }\n      var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n      if (modifier.enabled && isFunction(fn)) {\n        // Add properties to offsets to make them a complete clientRect object\n        // we do this before each modifier to make sure the previous one doesn't\n        // mess with these values\n        data.offsets.popper = getClientRect(data.offsets.popper);\n        data.offsets.reference = getClientRect(data.offsets.reference);\n\n        data = fn(data, modifier);\n      }\n    });\n\n    return data;\n  }\n\n  /**\n   * Updates the position of the popper, computing the new offsets and applying\n   * the new style.<br />\n   * Prefer `scheduleUpdate` over `update` because of performance reasons.\n   * @method\n   * @memberof Popper\n   */\n  function update() {\n    // if popper is destroyed, don't perform any further update\n    if (this.state.isDestroyed) {\n      return;\n    }\n\n    var data = {\n      instance: this,\n      styles: {},\n      arrowStyles: {},\n      attributes: {},\n      flipped: false,\n      offsets: {}\n    };\n\n    // compute reference element offsets\n    data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n    // store the computed placement inside `originalPlacement`\n    data.originalPlacement = data.placement;\n\n    data.positionFixed = this.options.positionFixed;\n\n    // compute the popper offsets\n    data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n    data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n    // run the modifiers\n    data = runModifiers(this.modifiers, data);\n\n    // the first `update` will call `onCreate` callback\n    // the other ones will call `onUpdate` callback\n    if (!this.state.isCreated) {\n      this.state.isCreated = true;\n      this.options.onCreate(data);\n    } else {\n      this.options.onUpdate(data);\n    }\n  }\n\n  /**\n   * Helper used to know if the given modifier is enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @returns {Boolean}\n   */\n  function isModifierEnabled(modifiers, modifierName) {\n    return modifiers.some(function (_ref) {\n      var name = _ref.name,\n          enabled = _ref.enabled;\n      return enabled && name === modifierName;\n    });\n  }\n\n  /**\n   * Get the prefixed supported property name\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} property (camelCase)\n   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n   */\n  function getSupportedPropertyName(property) {\n    var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n    var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n    for (var i = 0; i < prefixes.length; i++) {\n      var prefix = prefixes[i];\n      var toCheck = prefix ? '' + prefix + upperProp : property;\n      if (typeof document.body.style[toCheck] !== 'undefined') {\n        return toCheck;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Destroys the popper.\n   * @method\n   * @memberof Popper\n   */\n  function destroy() {\n    this.state.isDestroyed = true;\n\n    // touch DOM only if `applyStyle` modifier is enabled\n    if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n      this.popper.removeAttribute('x-placement');\n      this.popper.style.position = '';\n      this.popper.style.top = '';\n      this.popper.style.left = '';\n      this.popper.style.right = '';\n      this.popper.style.bottom = '';\n      this.popper.style.willChange = '';\n      this.popper.style[getSupportedPropertyName('transform')] = '';\n    }\n\n    this.disableEventListeners();\n\n    // remove the popper if user explicitly asked for the deletion on destroy\n    // do not use `remove` because IE11 doesn't support it\n    if (this.options.removeOnDestroy) {\n      this.popper.parentNode.removeChild(this.popper);\n    }\n    return this;\n  }\n\n  /**\n   * Get the window associated with the element\n   * @argument {Element} element\n   * @returns {Window}\n   */\n  function getWindow(element) {\n    var ownerDocument = element.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView : window;\n  }\n\n  function attachToScrollParents(scrollParent, event, callback, scrollParents) {\n    var isBody = scrollParent.nodeName === 'BODY';\n    var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n    target.addEventListener(event, callback, { passive: true });\n\n    if (!isBody) {\n      attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n    }\n    scrollParents.push(target);\n  }\n\n  /**\n   * Setup needed event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function setupEventListeners(reference, options, state, updateBound) {\n    // Resize event listener on window\n    state.updateBound = updateBound;\n    getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n    // Scroll event listener on scroll parents\n    var scrollElement = getScrollParent(reference);\n    attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n    state.scrollElement = scrollElement;\n    state.eventsEnabled = true;\n\n    return state;\n  }\n\n  /**\n   * It will add resize/scroll events and start recalculating\n   * position of the popper element when they are triggered.\n   * @method\n   * @memberof Popper\n   */\n  function enableEventListeners() {\n    if (!this.state.eventsEnabled) {\n      this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n    }\n  }\n\n  /**\n   * Remove event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function removeEventListeners(reference, state) {\n    // Remove resize event listener on window\n    getWindow(reference).removeEventListener('resize', state.updateBound);\n\n    // Remove scroll event listener on scroll parents\n    state.scrollParents.forEach(function (target) {\n      target.removeEventListener('scroll', state.updateBound);\n    });\n\n    // Reset state\n    state.updateBound = null;\n    state.scrollParents = [];\n    state.scrollElement = null;\n    state.eventsEnabled = false;\n    return state;\n  }\n\n  /**\n   * It will remove resize/scroll events and won't recalculate popper position\n   * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n   * unless you call `update` method manually.\n   * @method\n   * @memberof Popper\n   */\n  function disableEventListeners() {\n    if (this.state.eventsEnabled) {\n      cancelAnimationFrame(this.scheduleUpdate);\n      this.state = removeEventListeners(this.reference, this.state);\n    }\n  }\n\n  /**\n   * Tells if a given input is a number\n   * @method\n   * @memberof Popper.Utils\n   * @param {*} input to check\n   * @return {Boolean}\n   */\n  function isNumeric(n) {\n    return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n  }\n\n  /**\n   * Set the style to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the style to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setStyles(element, styles) {\n    Object.keys(styles).forEach(function (prop) {\n      var unit = '';\n      // add unit if the value is numeric and is one of the following\n      if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n        unit = 'px';\n      }\n      element.style[prop] = styles[prop] + unit;\n    });\n  }\n\n  /**\n   * Set the attributes to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the attributes to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setAttributes(element, attributes) {\n    Object.keys(attributes).forEach(function (prop) {\n      var value = attributes[prop];\n      if (value !== false) {\n        element.setAttribute(prop, attributes[prop]);\n      } else {\n        element.removeAttribute(prop);\n      }\n    });\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} data.styles - List of style properties - values to apply to popper element\n   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The same data object\n   */\n  function applyStyle(data) {\n    // any property present in `data.styles` will be applied to the popper,\n    // in this way we can make the 3rd party modifiers add custom styles to it\n    // Be aware, modifiers could override the properties defined in the previous\n    // lines of this modifier!\n    setStyles(data.instance.popper, data.styles);\n\n    // any property present in `data.attributes` will be applied to the popper,\n    // they will be set as HTML attributes of the element\n    setAttributes(data.instance.popper, data.attributes);\n\n    // if arrowElement is defined and arrowStyles has some properties\n    if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n      setStyles(data.arrowElement, data.arrowStyles);\n    }\n\n    return data;\n  }\n\n  /**\n   * Set the x-placement attribute before everything else because it could be used\n   * to add margins to the popper margins needs to be calculated to get the\n   * correct popper offsets.\n   * @method\n   * @memberof Popper.modifiers\n   * @param {HTMLElement} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as popper\n   * @param {Object} options - Popper.js options\n   */\n  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n    // compute reference element offsets\n    var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n    popper.setAttribute('x-placement', placement);\n\n    // Apply `position` to popper before anything else because\n    // without the position applied we can't guarantee correct computations\n    setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n    return options;\n  }\n\n  /**\n   * @function\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n   * @returns {Object} The popper's position offsets rounded\n   *\n   * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n   * good as it can be within reason.\n   * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n   *\n   * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n   * as well on High DPI screens).\n   *\n   * Firefox prefers no rounding for positioning and does not have blurriness on\n   * high DPI screens.\n   *\n   * Only horizontal placement and left/right values need to be considered.\n   */\n  function getRoundedOffsets(data, shouldRound) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n    var round = Math.round,\n        floor = Math.floor;\n\n    var noRound = function noRound(v) {\n      return v;\n    };\n\n    var referenceWidth = round(reference.width);\n    var popperWidth = round(popper.width);\n\n    var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n    var isVariation = data.placement.indexOf('-') !== -1;\n    var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n    var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n    var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n    var verticalToInteger = !shouldRound ? noRound : round;\n\n    return {\n      left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n      top: verticalToInteger(popper.top),\n      bottom: verticalToInteger(popper.bottom),\n      right: horizontalToInteger(popper.right)\n    };\n  }\n\n  var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeStyle(data, options) {\n    var x = options.x,\n        y = options.y;\n    var popper = data.offsets.popper;\n\n    // Remove this legacy support in Popper.js v2\n\n    var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'applyStyle';\n    }).gpuAcceleration;\n    if (legacyGpuAccelerationOption !== undefined) {\n      console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n    }\n    var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n    var offsetParent = getOffsetParent(data.instance.popper);\n    var offsetParentRect = getBoundingClientRect(offsetParent);\n\n    // Styles\n    var styles = {\n      position: popper.position\n    };\n\n    var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n    var sideA = x === 'bottom' ? 'top' : 'bottom';\n    var sideB = y === 'right' ? 'left' : 'right';\n\n    // if gpuAcceleration is set to `true` and transform is supported,\n    //  we use `translate3d` to apply the position to the popper we\n    // automatically use the supported prefixed version if needed\n    var prefixedProperty = getSupportedPropertyName('transform');\n\n    // now, let's make a step back and look at this code closely (wtf?)\n    // If the content of the popper grows once it's been positioned, it\n    // may happen that the popper gets misplaced because of the new content\n    // overflowing its reference element\n    // To avoid this problem, we provide two options (x and y), which allow\n    // the consumer to define the offset origin.\n    // If we position a popper on top of a reference element, we can set\n    // `x` to `top` to make the popper grow towards its top instead of\n    // its bottom.\n    var left = void 0,\n        top = void 0;\n    if (sideA === 'bottom') {\n      // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n      // and not the bottom of the html element\n      if (offsetParent.nodeName === 'HTML') {\n        top = -offsetParent.clientHeight + offsets.bottom;\n      } else {\n        top = -offsetParentRect.height + offsets.bottom;\n      }\n    } else {\n      top = offsets.top;\n    }\n    if (sideB === 'right') {\n      if (offsetParent.nodeName === 'HTML') {\n        left = -offsetParent.clientWidth + offsets.right;\n      } else {\n        left = -offsetParentRect.width + offsets.right;\n      }\n    } else {\n      left = offsets.left;\n    }\n    if (gpuAcceleration && prefixedProperty) {\n      styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n      styles[sideA] = 0;\n      styles[sideB] = 0;\n      styles.willChange = 'transform';\n    } else {\n      // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n      var invertTop = sideA === 'bottom' ? -1 : 1;\n      var invertLeft = sideB === 'right' ? -1 : 1;\n      styles[sideA] = top * invertTop;\n      styles[sideB] = left * invertLeft;\n      styles.willChange = sideA + ', ' + sideB;\n    }\n\n    // Attributes\n    var attributes = {\n      'x-placement': data.placement\n    };\n\n    // Update `data` attributes, styles and arrowStyles\n    data.attributes = _extends({}, attributes, data.attributes);\n    data.styles = _extends({}, styles, data.styles);\n    data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n    return data;\n  }\n\n  /**\n   * Helper used to know if the given modifier depends from another one.<br />\n   * It checks if the needed modifier is listed and enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Array} modifiers - list of modifiers\n   * @param {String} requestingName - name of requesting modifier\n   * @param {String} requestedName - name of requested modifier\n   * @returns {Boolean}\n   */\n  function isModifierRequired(modifiers, requestingName, requestedName) {\n    var requesting = find(modifiers, function (_ref) {\n      var name = _ref.name;\n      return name === requestingName;\n    });\n\n    var isRequired = !!requesting && modifiers.some(function (modifier) {\n      return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n    });\n\n    if (!isRequired) {\n      var _requesting = '`' + requestingName + '`';\n      var requested = '`' + requestedName + '`';\n      console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n    }\n    return isRequired;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function arrow(data, options) {\n    var _data$offsets$arrow;\n\n    // arrow depends on keepTogether in order to work\n    if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n      return data;\n    }\n\n    var arrowElement = options.element;\n\n    // if arrowElement is a string, suppose it's a CSS selector\n    if (typeof arrowElement === 'string') {\n      arrowElement = data.instance.popper.querySelector(arrowElement);\n\n      // if arrowElement is not found, don't run the modifier\n      if (!arrowElement) {\n        return data;\n      }\n    } else {\n      // if the arrowElement isn't a query selector we must check that the\n      // provided DOM node is child of its popper node\n      if (!data.instance.popper.contains(arrowElement)) {\n        console.warn('WARNING: `arrow.element` must be child of its popper element!');\n        return data;\n      }\n    }\n\n    var placement = data.placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n    var len = isVertical ? 'height' : 'width';\n    var sideCapitalized = isVertical ? 'Top' : 'Left';\n    var side = sideCapitalized.toLowerCase();\n    var altSide = isVertical ? 'left' : 'top';\n    var opSide = isVertical ? 'bottom' : 'right';\n    var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n    //\n    // extends keepTogether behavior making sure the popper and its\n    // reference have enough pixels in conjunction\n    //\n\n    // top/left side\n    if (reference[opSide] - arrowElementSize < popper[side]) {\n      data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n    }\n    // bottom/right side\n    if (reference[side] + arrowElementSize > popper[opSide]) {\n      data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n    }\n    data.offsets.popper = getClientRect(data.offsets.popper);\n\n    // compute center of the popper\n    var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n    // Compute the sideValue using the updated popper offsets\n    // take popper margin in account because we don't have this info available\n    var css = getStyleComputedProperty(data.instance.popper);\n    var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n    var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n    var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n    // prevent arrowElement from being placed not contiguously to its popper\n    sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n    data.arrowElement = arrowElement;\n    data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n    return data;\n  }\n\n  /**\n   * Get the opposite placement variation of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement variation\n   * @returns {String} flipped placement variation\n   */\n  function getOppositeVariation(variation) {\n    if (variation === 'end') {\n      return 'start';\n    } else if (variation === 'start') {\n      return 'end';\n    }\n    return variation;\n  }\n\n  /**\n   * List of accepted placements to use as values of the `placement` option.<br />\n   * Valid placements are:\n   * - `auto`\n   * - `top`\n   * - `right`\n   * - `bottom`\n   * - `left`\n   *\n   * Each placement can have a variation from this list:\n   * - `-start`\n   * - `-end`\n   *\n   * Variations are interpreted easily if you think of them as the left to right\n   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n   * is right.<br />\n   * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n   *\n   * Some valid examples are:\n   * - `top-end` (on top of reference, right aligned)\n   * - `right-start` (on right of reference, top aligned)\n   * - `bottom` (on bottom, centered)\n   * - `auto-end` (on the side with more space available, alignment depends by placement)\n   *\n   * @static\n   * @type {Array}\n   * @enum {String}\n   * @readonly\n   * @method placements\n   * @memberof Popper\n   */\n  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n  // Get rid of `auto` `auto-start` and `auto-end`\n  var validPlacements = placements.slice(3);\n\n  /**\n   * Given an initial placement, returns all the subsequent placements\n   * clockwise (or counter-clockwise).\n   *\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement - A valid placement (it accepts variations)\n   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n   * @returns {Array} placements including their variations\n   */\n  function clockwise(placement) {\n    var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var index = validPlacements.indexOf(placement);\n    var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n    return counter ? arr.reverse() : arr;\n  }\n\n  var BEHAVIORS = {\n    FLIP: 'flip',\n    CLOCKWISE: 'clockwise',\n    COUNTERCLOCKWISE: 'counterclockwise'\n  };\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function flip(data, options) {\n    // if `inner` modifier is enabled, we can't use the `flip` modifier\n    if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n      return data;\n    }\n\n    if (data.flipped && data.placement === data.originalPlacement) {\n      // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n      return data;\n    }\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n    var placement = data.placement.split('-')[0];\n    var placementOpposite = getOppositePlacement(placement);\n    var variation = data.placement.split('-')[1] || '';\n\n    var flipOrder = [];\n\n    switch (options.behavior) {\n      case BEHAVIORS.FLIP:\n        flipOrder = [placement, placementOpposite];\n        break;\n      case BEHAVIORS.CLOCKWISE:\n        flipOrder = clockwise(placement);\n        break;\n      case BEHAVIORS.COUNTERCLOCKWISE:\n        flipOrder = clockwise(placement, true);\n        break;\n      default:\n        flipOrder = options.behavior;\n    }\n\n    flipOrder.forEach(function (step, index) {\n      if (placement !== step || flipOrder.length === index + 1) {\n        return data;\n      }\n\n      placement = data.placement.split('-')[0];\n      placementOpposite = getOppositePlacement(placement);\n\n      var popperOffsets = data.offsets.popper;\n      var refOffsets = data.offsets.reference;\n\n      // using floor because the reference offsets may contain decimals we are not going to consider here\n      var floor = Math.floor;\n      var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n      var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n      var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n      var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n      var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n      var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n      // flip the variation if required\n      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n      // flips variation if reference element overflows boundaries\n      var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n      // flips variation if popper content overflows boundaries\n      var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n      var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n      if (overlapsRef || overflowsBoundaries || flippedVariation) {\n        // this boolean to detect any flip loop\n        data.flipped = true;\n\n        if (overlapsRef || overflowsBoundaries) {\n          placement = flipOrder[index + 1];\n        }\n\n        if (flippedVariation) {\n          variation = getOppositeVariation(variation);\n        }\n\n        data.placement = placement + (variation ? '-' + variation : '');\n\n        // this object contains `position`, we want to preserve it along with\n        // any additional property we may add in the future\n        data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n        data = runModifiers(data.instance.modifiers, data, 'flip');\n      }\n    });\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function keepTogether(data) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var placement = data.placement.split('-')[0];\n    var floor = Math.floor;\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    var side = isVertical ? 'right' : 'bottom';\n    var opSide = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    if (popper[side] < floor(reference[opSide])) {\n      data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n    }\n    if (popper[opSide] > floor(reference[side])) {\n      data.offsets.popper[opSide] = floor(reference[side]);\n    }\n\n    return data;\n  }\n\n  /**\n   * Converts a string containing value + unit into a px value number\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} str - Value + unit string\n   * @argument {String} measurement - `height` or `width`\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @returns {Number|String}\n   * Value in pixels, or original string if no values were extracted\n   */\n  function toValue(str, measurement, popperOffsets, referenceOffsets) {\n    // separate value from unit\n    var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n    var value = +split[1];\n    var unit = split[2];\n\n    // If it's not a number it's an operator, I guess\n    if (!value) {\n      return str;\n    }\n\n    if (unit.indexOf('%') === 0) {\n      var element = void 0;\n      switch (unit) {\n        case '%p':\n          element = popperOffsets;\n          break;\n        case '%':\n        case '%r':\n        default:\n          element = referenceOffsets;\n      }\n\n      var rect = getClientRect(element);\n      return rect[measurement] / 100 * value;\n    } else if (unit === 'vh' || unit === 'vw') {\n      // if is a vh or vw, we calculate the size based on the viewport\n      var size = void 0;\n      if (unit === 'vh') {\n        size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n      } else {\n        size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n      }\n      return size / 100 * value;\n    } else {\n      // if is an explicit pixel unit, we get rid of the unit and keep the value\n      // if is an implicit unit, it's px, and we return just the value\n      return value;\n    }\n  }\n\n  /**\n   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} offset\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @argument {String} basePlacement\n   * @returns {Array} a two cells array with x and y offsets in numbers\n   */\n  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n    var offsets = [0, 0];\n\n    // Use height if placement is left or right and index is 0 otherwise use width\n    // in this way the first offset will use an axis and the second one\n    // will use the other one\n    var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n    // Split the offset string to obtain a list of values and operands\n    // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n    var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n      return frag.trim();\n    });\n\n    // Detect if the offset string contains a pair of values or a single one\n    // they could be separated by comma or space\n    var divider = fragments.indexOf(find(fragments, function (frag) {\n      return frag.search(/,|\\s/) !== -1;\n    }));\n\n    if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n    }\n\n    // If divider is found, we divide the list of values and operands to divide\n    // them by ofset X and Y.\n    var splitRegex = /\\s*,\\s*|\\s+/;\n    var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n    // Convert the values with units to absolute pixels to allow our computations\n    ops = ops.map(function (op, index) {\n      // Most of the units rely on the orientation of the popper\n      var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n      var mergeWithPrevious = false;\n      return op\n      // This aggregates any `+` or `-` sign that aren't considered operators\n      // e.g.: 10 + +5 => [10, +, +5]\n      .reduce(function (a, b) {\n        if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n          a[a.length - 1] = b;\n          mergeWithPrevious = true;\n          return a;\n        } else if (mergeWithPrevious) {\n          a[a.length - 1] += b;\n          mergeWithPrevious = false;\n          return a;\n        } else {\n          return a.concat(b);\n        }\n      }, [])\n      // Here we convert the string values into number values (in px)\n      .map(function (str) {\n        return toValue(str, measurement, popperOffsets, referenceOffsets);\n      });\n    });\n\n    // Loop trough the offsets arrays and execute the operations\n    ops.forEach(function (op, index) {\n      op.forEach(function (frag, index2) {\n        if (isNumeric(frag)) {\n          offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n        }\n      });\n    });\n    return offsets;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @argument {Number|String} options.offset=0\n   * The offset value as described in the modifier description\n   * @returns {Object} The data object, properly modified\n   */\n  function offset(data, _ref) {\n    var offset = _ref.offset;\n    var placement = data.placement,\n        _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var basePlacement = placement.split('-')[0];\n\n    var offsets = void 0;\n    if (isNumeric(+offset)) {\n      offsets = [+offset, 0];\n    } else {\n      offsets = parseOffset(offset, popper, reference, basePlacement);\n    }\n\n    if (basePlacement === 'left') {\n      popper.top += offsets[0];\n      popper.left -= offsets[1];\n    } else if (basePlacement === 'right') {\n      popper.top += offsets[0];\n      popper.left += offsets[1];\n    } else if (basePlacement === 'top') {\n      popper.left += offsets[0];\n      popper.top -= offsets[1];\n    } else if (basePlacement === 'bottom') {\n      popper.left += offsets[0];\n      popper.top += offsets[1];\n    }\n\n    data.popper = popper;\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function preventOverflow(data, options) {\n    var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n    // If offsetParent is the reference element, we really want to\n    // go one step up and use the next offsetParent as reference to\n    // avoid to make this modifier completely useless and look like broken\n    if (data.instance.reference === boundariesElement) {\n      boundariesElement = getOffsetParent(boundariesElement);\n    }\n\n    // NOTE: DOM access here\n    // resets the popper's position so that the document size can be calculated excluding\n    // the size of the popper element itself\n    var transformProp = getSupportedPropertyName('transform');\n    var popperStyles = data.instance.popper.style; // assignment to help minification\n    var top = popperStyles.top,\n        left = popperStyles.left,\n        transform = popperStyles[transformProp];\n\n    popperStyles.top = '';\n    popperStyles.left = '';\n    popperStyles[transformProp] = '';\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n    // NOTE: DOM access here\n    // restores the original style properties after the offsets have been computed\n    popperStyles.top = top;\n    popperStyles.left = left;\n    popperStyles[transformProp] = transform;\n\n    options.boundaries = boundaries;\n\n    var order = options.priority;\n    var popper = data.offsets.popper;\n\n    var check = {\n      primary: function primary(placement) {\n        var value = popper[placement];\n        if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n          value = Math.max(popper[placement], boundaries[placement]);\n        }\n        return defineProperty({}, placement, value);\n      },\n      secondary: function secondary(placement) {\n        var mainSide = placement === 'right' ? 'left' : 'top';\n        var value = popper[mainSide];\n        if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n          value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n        }\n        return defineProperty({}, mainSide, value);\n      }\n    };\n\n    order.forEach(function (placement) {\n      var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n      popper = _extends({}, popper, check[side](placement));\n    });\n\n    data.offsets.popper = popper;\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function shift(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var shiftvariation = placement.split('-')[1];\n\n    // if shift shiftvariation is specified, run the modifier\n    if (shiftvariation) {\n      var _data$offsets = data.offsets,\n          reference = _data$offsets.reference,\n          popper = _data$offsets.popper;\n\n      var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n      var side = isVertical ? 'left' : 'top';\n      var measurement = isVertical ? 'width' : 'height';\n\n      var shiftOffsets = {\n        start: defineProperty({}, side, reference[side]),\n        end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n      };\n\n      data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function hide(data) {\n    if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n      return data;\n    }\n\n    var refRect = data.offsets.reference;\n    var bound = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'preventOverflow';\n    }).boundaries;\n\n    if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === true) {\n        return data;\n      }\n\n      data.hide = true;\n      data.attributes['x-out-of-boundaries'] = '';\n    } else {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === false) {\n        return data;\n      }\n\n      data.hide = false;\n      data.attributes['x-out-of-boundaries'] = false;\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function inner(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n    var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n    popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n    data.placement = getOppositePlacement(placement);\n    data.offsets.popper = getClientRect(popper);\n\n    return data;\n  }\n\n  /**\n   * Modifier function, each modifier can have a function of this type assigned\n   * to its `fn` property.<br />\n   * These functions will be called on each update, this means that you must\n   * make sure they are performant enough to avoid performance bottlenecks.\n   *\n   * @function ModifierFn\n   * @argument {dataObject} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {dataObject} The data object, properly modified\n   */\n\n  /**\n   * Modifiers are plugins used to alter the behavior of your poppers.<br />\n   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n   * needed by the library.\n   *\n   * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n   * All the other properties are configurations that could be tweaked.\n   * @namespace modifiers\n   */\n  var modifiers = {\n    /**\n     * Modifier used to shift the popper on the start or end of its reference\n     * element.<br />\n     * It will read the variation of the `placement` property.<br />\n     * It can be one either `-end` or `-start`.\n     * @memberof modifiers\n     * @inner\n     */\n    shift: {\n      /** @prop {number} order=100 - Index used to define the order of execution */\n      order: 100,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: shift\n    },\n\n    /**\n     * The `offset` modifier can shift your popper on both its axis.\n     *\n     * It accepts the following units:\n     * - `px` or unit-less, interpreted as pixels\n     * - `%` or `%r`, percentage relative to the length of the reference element\n     * - `%p`, percentage relative to the length of the popper element\n     * - `vw`, CSS viewport width unit\n     * - `vh`, CSS viewport height unit\n     *\n     * For length is intended the main axis relative to the placement of the popper.<br />\n     * This means that if the placement is `top` or `bottom`, the length will be the\n     * `width`. In case of `left` or `right`, it will be the `height`.\n     *\n     * You can provide a single value (as `Number` or `String`), or a pair of values\n     * as `String` divided by a comma or one (or more) white spaces.<br />\n     * The latter is a deprecated method because it leads to confusion and will be\n     * removed in v2.<br />\n     * Additionally, it accepts additions and subtractions between different units.\n     * Note that multiplications and divisions aren't supported.\n     *\n     * Valid examples are:\n     * ```\n     * 10\n     * '10%'\n     * '10, 10'\n     * '10%, 10'\n     * '10 + 10%'\n     * '10 - 5vh + 3%'\n     * '-10px + 5vh, 5px - 6%'\n     * ```\n     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n     * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    offset: {\n      /** @prop {number} order=200 - Index used to define the order of execution */\n      order: 200,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: offset,\n      /** @prop {Number|String} offset=0\n       * The offset value as described in the modifier description\n       */\n      offset: 0\n    },\n\n    /**\n     * Modifier used to prevent the popper from being positioned outside the boundary.\n     *\n     * A scenario exists where the reference itself is not within the boundaries.<br />\n     * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n     * In this case we need to decide whether the popper should either:\n     *\n     * - detach from the reference and remain \"trapped\" in the boundaries, or\n     * - if it should ignore the boundary and \"escape with its reference\"\n     *\n     * When `escapeWithReference` is set to`true` and reference is completely\n     * outside its boundaries, the popper will overflow (or completely leave)\n     * the boundaries in order to remain attached to the edge of the reference.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    preventOverflow: {\n      /** @prop {number} order=300 - Index used to define the order of execution */\n      order: 300,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: preventOverflow,\n      /**\n       * @prop {Array} [priority=['left','right','top','bottom']]\n       * Popper will try to prevent overflow following these priorities by default,\n       * then, it could overflow on the left and on top of the `boundariesElement`\n       */\n      priority: ['left', 'right', 'top', 'bottom'],\n      /**\n       * @prop {number} padding=5\n       * Amount of pixel used to define a minimum distance between the boundaries\n       * and the popper. This makes sure the popper always has a little padding\n       * between the edges of its container\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='scrollParent'\n       * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n       * `viewport` or any DOM element.\n       */\n      boundariesElement: 'scrollParent'\n    },\n\n    /**\n     * Modifier used to make sure the reference and its popper stay near each other\n     * without leaving any gap between the two. Especially useful when the arrow is\n     * enabled and you want to ensure that it points to its reference element.\n     * It cares only about the first axis. You can still have poppers with margin\n     * between the popper and its reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    keepTogether: {\n      /** @prop {number} order=400 - Index used to define the order of execution */\n      order: 400,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: keepTogether\n    },\n\n    /**\n     * This modifier is used to move the `arrowElement` of the popper to make\n     * sure it is positioned between the reference element and its popper element.\n     * It will read the outer size of the `arrowElement` node to detect how many\n     * pixels of conjunction are needed.\n     *\n     * It has no effect if no `arrowElement` is provided.\n     * @memberof modifiers\n     * @inner\n     */\n    arrow: {\n      /** @prop {number} order=500 - Index used to define the order of execution */\n      order: 500,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: arrow,\n      /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n      element: '[x-arrow]'\n    },\n\n    /**\n     * Modifier used to flip the popper's placement when it starts to overlap its\n     * reference element.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     *\n     * **NOTE:** this modifier will interrupt the current update cycle and will\n     * restart it if it detects the need to flip the placement.\n     * @memberof modifiers\n     * @inner\n     */\n    flip: {\n      /** @prop {number} order=600 - Index used to define the order of execution */\n      order: 600,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: flip,\n      /**\n       * @prop {String|Array} behavior='flip'\n       * The behavior used to change the popper's placement. It can be one of\n       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n       * placements (with optional variations)\n       */\n      behavior: 'flip',\n      /**\n       * @prop {number} padding=5\n       * The popper will flip if it hits the edges of the `boundariesElement`\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='viewport'\n       * The element which will define the boundaries of the popper position.\n       * The popper will never be placed outside of the defined boundaries\n       * (except if `keepTogether` is enabled)\n       */\n      boundariesElement: 'viewport',\n      /**\n       * @prop {Boolean} flipVariations=false\n       * The popper will switch placement variation between `-start` and `-end` when\n       * the reference element overlaps its boundaries.\n       *\n       * The original placement should have a set variation.\n       */\n      flipVariations: false,\n      /**\n       * @prop {Boolean} flipVariationsByContent=false\n       * The popper will switch placement variation between `-start` and `-end` when\n       * the popper element overlaps its reference boundaries.\n       *\n       * The original placement should have a set variation.\n       */\n      flipVariationsByContent: false\n    },\n\n    /**\n     * Modifier used to make the popper flow toward the inner of the reference element.\n     * By default, when this modifier is disabled, the popper will be placed outside\n     * the reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    inner: {\n      /** @prop {number} order=700 - Index used to define the order of execution */\n      order: 700,\n      /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n      enabled: false,\n      /** @prop {ModifierFn} */\n      fn: inner\n    },\n\n    /**\n     * Modifier used to hide the popper when its reference element is outside of the\n     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n     * be used to hide with a CSS selector the popper when its reference is\n     * out of boundaries.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     * @memberof modifiers\n     * @inner\n     */\n    hide: {\n      /** @prop {number} order=800 - Index used to define the order of execution */\n      order: 800,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: hide\n    },\n\n    /**\n     * Computes the style that will be applied to the popper element to gets\n     * properly positioned.\n     *\n     * Note that this modifier will not touch the DOM, it just prepares the styles\n     * so that `applyStyle` modifier can apply it. This separation is useful\n     * in case you need to replace `applyStyle` with a custom implementation.\n     *\n     * This modifier has `850` as `order` value to maintain backward compatibility\n     * with previous versions of Popper.js. Expect the modifiers ordering method\n     * to change in future major versions of the library.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    computeStyle: {\n      /** @prop {number} order=850 - Index used to define the order of execution */\n      order: 850,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: computeStyle,\n      /**\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: true,\n      /**\n       * @prop {string} [x='bottom']\n       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n       * Change this if your popper should grow in a direction different from `bottom`\n       */\n      x: 'bottom',\n      /**\n       * @prop {string} [x='left']\n       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n       * Change this if your popper should grow in a direction different from `right`\n       */\n      y: 'right'\n    },\n\n    /**\n     * Applies the computed styles to the popper element.\n     *\n     * All the DOM manipulations are limited to this modifier. This is useful in case\n     * you want to integrate Popper.js inside a framework or view library and you\n     * want to delegate all the DOM manipulations to it.\n     *\n     * Note that if you disable this modifier, you must make sure the popper element\n     * has its position set to `absolute` before Popper.js can do its work!\n     *\n     * Just disable this modifier and define your own to achieve the desired effect.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    applyStyle: {\n      /** @prop {number} order=900 - Index used to define the order of execution */\n      order: 900,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: applyStyle,\n      /** @prop {Function} */\n      onLoad: applyStyleOnLoad,\n      /**\n       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: undefined\n    }\n  };\n\n  /**\n   * The `dataObject` is an object containing all the information used by Popper.js.\n   * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n   * @name dataObject\n   * @property {Object} data.instance The Popper.js instance\n   * @property {String} data.placement Placement applied to popper\n   * @property {String} data.originalPlacement Placement originally defined on init\n   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n   * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.boundaries Offsets of the popper boundaries\n   * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n   */\n\n  /**\n   * Default options provided to Popper.js constructor.<br />\n   * These can be overridden using the `options` argument of Popper.js.<br />\n   * To override an option, simply pass an object with the same\n   * structure of the `options` object, as the 3rd argument. For example:\n   * ```\n   * new Popper(ref, pop, {\n   *   modifiers: {\n   *     preventOverflow: { enabled: false }\n   *   }\n   * })\n   * ```\n   * @type {Object}\n   * @static\n   * @memberof Popper\n   */\n  var Defaults = {\n    /**\n     * Popper's placement.\n     * @prop {Popper.placements} placement='bottom'\n     */\n    placement: 'bottom',\n\n    /**\n     * Set this to true if you want popper to position it self in 'fixed' mode\n     * @prop {Boolean} positionFixed=false\n     */\n    positionFixed: false,\n\n    /**\n     * Whether events (resize, scroll) are initially enabled.\n     * @prop {Boolean} eventsEnabled=true\n     */\n    eventsEnabled: true,\n\n    /**\n     * Set to true if you want to automatically remove the popper when\n     * you call the `destroy` method.\n     * @prop {Boolean} removeOnDestroy=false\n     */\n    removeOnDestroy: false,\n\n    /**\n     * Callback called when the popper is created.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onCreate}\n     */\n    onCreate: function onCreate() {},\n\n    /**\n     * Callback called when the popper is updated. This callback is not called\n     * on the initialization/creation of the popper, but only on subsequent\n     * updates.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onUpdate}\n     */\n    onUpdate: function onUpdate() {},\n\n    /**\n     * List of modifiers used to modify the offsets before they are applied to the popper.\n     * They provide most of the functionalities of Popper.js.\n     * @prop {modifiers}\n     */\n    modifiers: modifiers\n  };\n\n  /**\n   * @callback onCreate\n   * @param {dataObject} data\n   */\n\n  /**\n   * @callback onUpdate\n   * @param {dataObject} data\n   */\n\n  // Utils\n  // Methods\n  var Popper = function () {\n    /**\n     * Creates a new Popper.js instance.\n     * @class Popper\n     * @param {Element|referenceObject} reference - The reference element used to position the popper\n     * @param {Element} popper - The HTML / XML element used as the popper\n     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n     * @return {Object} instance - The generated Popper.js instance\n     */\n    function Popper(reference, popper) {\n      var _this = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      classCallCheck(this, Popper);\n\n      this.scheduleUpdate = function () {\n        return requestAnimationFrame(_this.update);\n      };\n\n      // make update() debounced, so that it only runs at most once-per-tick\n      this.update = debounce(this.update.bind(this));\n\n      // with {} we create a new object with the options inside it\n      this.options = _extends({}, Popper.Defaults, options);\n\n      // init state\n      this.state = {\n        isDestroyed: false,\n        isCreated: false,\n        scrollParents: []\n      };\n\n      // get reference and popper elements (allow jQuery wrappers)\n      this.reference = reference && reference.jquery ? reference[0] : reference;\n      this.popper = popper && popper.jquery ? popper[0] : popper;\n\n      // Deep merge modifiers options\n      this.options.modifiers = {};\n      Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n        _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n      });\n\n      // Refactoring modifiers' list (Object => Array)\n      this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n        return _extends({\n          name: name\n        }, _this.options.modifiers[name]);\n      })\n      // sort the modifiers by order\n      .sort(function (a, b) {\n        return a.order - b.order;\n      });\n\n      // modifiers have the ability to execute arbitrary code when Popper.js get inited\n      // such code is executed in the same order of its modifier\n      // they could add new properties to their options configuration\n      // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n      this.modifiers.forEach(function (modifierOptions) {\n        if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n          modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n        }\n      });\n\n      // fire the first update to position the popper in the right place\n      this.update();\n\n      var eventsEnabled = this.options.eventsEnabled;\n      if (eventsEnabled) {\n        // setup event listeners, they will take care of update the position in specific situations\n        this.enableEventListeners();\n      }\n\n      this.state.eventsEnabled = eventsEnabled;\n    }\n\n    // We can't use class properties because they don't get listed in the\n    // class prototype and break stuff like Sinon stubs\n\n\n    createClass(Popper, [{\n      key: 'update',\n      value: function update$$1() {\n        return update.call(this);\n      }\n    }, {\n      key: 'destroy',\n      value: function destroy$$1() {\n        return destroy.call(this);\n      }\n    }, {\n      key: 'enableEventListeners',\n      value: function enableEventListeners$$1() {\n        return enableEventListeners.call(this);\n      }\n    }, {\n      key: 'disableEventListeners',\n      value: function disableEventListeners$$1() {\n        return disableEventListeners.call(this);\n      }\n\n      /**\n       * Schedules an update. It will run on the next UI update available.\n       * @method scheduleUpdate\n       * @memberof Popper\n       */\n\n\n      /**\n       * Collection of utilities useful when writing custom modifiers.\n       * Starting from version 1.7, this method is available only if you\n       * include `popper-utils.js` before `popper.js`.\n       *\n       * **DEPRECATION**: This way to access PopperUtils is deprecated\n       * and will be removed in v2! Use the PopperUtils module directly instead.\n       * Due to the high instability of the methods contained in Utils, we can't\n       * guarantee them to follow semver. Use them at your own risk!\n       * @static\n       * @private\n       * @type {Object}\n       * @deprecated since version 1.8\n       * @member Utils\n       * @memberof Popper\n       */\n\n    }]);\n    return Popper;\n  }();\n\n  /**\n   * The `referenceObject` is an object that provides an interface compatible with Popper.js\n   * and lets you use it as replacement of a real DOM node.<br />\n   * You can use this method to position a popper relatively to a set of coordinates\n   * in case you don't have a DOM node to use as reference.\n   *\n   * ```\n   * new Popper(referenceObject, popperNode);\n   * ```\n   *\n   * NB: This feature isn't supported in Internet Explorer 10.\n   * @name referenceObject\n   * @property {Function} data.getBoundingClientRect\n   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n   * @property {number} data.clientWidth\n   * An ES6 getter that will return the width of the virtual reference element.\n   * @property {number} data.clientHeight\n   * An ES6 getter that will return the height of the virtual reference element.\n   */\n\n\n  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n  Popper.placements = placements;\n  Popper.Defaults = Defaults;\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.4.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string',\n    popperConfig: '(null|object)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      this.show(true);\n    };\n\n    _proto.show = function show(usePopper) {\n      if (usePopper === void 0) {\n        usePopper = false;\n      }\n\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar && usePopper) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, this.constructor.Default, {}, $(this._element).data(), {}, config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread2({}, data.offsets, {}, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        }\n      }; // Disable Popper.js if we have a static display\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return _objectSpread2({}, popperConfig, {}, this._config.popperConfig);\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n\n        if (context._popper) {\n          context._popper.destroy();\n        }\n\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive && event.which === ESCAPE_KEYCODE) {\n        return;\n      }\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)).filter(function (item) {\n        return $(item).is(':visible');\n      });\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.4.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDE_PREVENTED: \"hidePrevented\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show',\n    STATIC: 'modal-static'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$3, {}, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n      var _this3 = this;\n\n      if (this._config.backdrop === 'static') {\n        var hideEventPrevented = $.Event(Event$5.HIDE_PREVENTED);\n        $(this._element).trigger(hideEventPrevented);\n\n        if (hideEventPrevented.defaultPrevented) {\n          return;\n        }\n\n        this._element.classList.add(ClassName$5.STATIC);\n\n        var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function () {\n          _this3._element.classList.remove(ClassName$5.STATIC);\n        }).emulateTransitionEnd(modalTransitionDuration);\n\n        this._element.focus();\n      } else {\n        this.hide();\n      }\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this4 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n      var modalBody = this._dialog ? this._dialog.querySelector(Selector$5.MODAL_BODY) : null;\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE) && modalBody) {\n        modalBody.scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this4._config.focus) {\n          _this4._element.focus();\n        }\n\n        _this4._isTransitioning = false;\n        $(_this4._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this5 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {\n          _this5._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this6 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            _this6._triggerBackdropTransition();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this7 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this7.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this8 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this8._resetAdjustments();\n\n        _this8._resetScrollbar();\n\n        $(_this8._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this9 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this9._ignoreBackdropClick) {\n            _this9._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          _this9._triggerBackdropTransition();\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this9._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this10 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread2({}, Default$3, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this11 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this11).is(':visible')) {\n          _this11.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.4.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.4.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object',\n    popperConfig: '(null|object)'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist,\n    popperConfig: null\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getPopperConfig = function _getPopperConfig(attachment) {\n      var _this3 = this;\n\n      var defaultBsConfig = {\n        placement: attachment,\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            behavior: this.config.fallbackPlacement\n          },\n          arrow: {\n            element: Selector$6.ARROW\n          },\n          preventOverflow: {\n            boundariesElement: this.config.boundary\n          }\n        },\n        onCreate: function onCreate(data) {\n          if (data.originalPlacement !== data.placement) {\n            _this3._handlePopperPlacementChange(data);\n          }\n        },\n        onUpdate: function onUpdate(data) {\n          return _this3._handlePopperPlacementChange(data);\n        }\n      };\n      return _objectSpread2({}, defaultBsConfig, {}, this.config.popperConfig);\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this4 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread2({}, data.offsets, {}, _this4.config.offset(data.offsets, _this4.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this5 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n            return _this5.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n          $(_this5.element).on(eventIn, _this5.config.selector, function (event) {\n            return _this5._enter(event);\n          }).on(eventOut, _this5.config.selector, function (event) {\n            return _this5._leave(event);\n          });\n        }\n      });\n\n      this._hideModalHandler = function () {\n        if (_this5.element) {\n          _this5.hide();\n        }\n      };\n\n      $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n      if (this.config.selector) {\n        this.config = _objectSpread2({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread2({}, this.constructor.Default, {}, dataAttributes, {}, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.4.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread2({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.4.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$6, {}, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.4.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.4.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      var showEvent = $.Event(Event$a.SHOW);\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this._timeout = setTimeout(function () {\n            _this.hide();\n          }, _this._config.delay);\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      Util.reflow(this._element);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide() {\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$a.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._close();\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$7, {}, $(this._element).data(), {}, typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this2 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this2.hide();\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this3 = this;\n\n      var complete = function complete() {\n        _this3._element.classList.add(ClassName$a.HIDE);\n\n        $(_this3._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n  exports.Util = Util;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "public/vendor/bootstrap/js/bootstrap.js",
    "content": "/*!\n  * Bootstrap v4.4.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, (function (exports, $, Popper) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      if (enumerableOnly) symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n      keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n\n      if (i % 2) {\n        ownKeys(Object(source), true).forEach(function (key) {\n          _defineProperty(target, key, source[key]);\n        });\n      } else if (Object.getOwnPropertyDescriptors) {\n        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n      } else {\n        ownKeys(Object(source)).forEach(function (key) {\n          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n        });\n      }\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.4.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    },\n    jQueryDetection: function jQueryDetection() {\n      if (typeof $ === 'undefined') {\n        throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n      }\n\n      var version = $.fn.jquery.split(' ')[0].split('.');\n      var minMajor = 1;\n      var ltMajor = 2;\n      var minMinor = 9;\n      var minPatch = 1;\n      var maxMajor = 4;\n\n      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n        throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n      }\n    }\n  };\n  Util.jQueryDetection();\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.4.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.4.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLES: '[data-toggle=\"buttons\"]',\n    DATA_TOGGLE: '[data-toggle=\"button\"]',\n    DATA_TOGGLES_BUTTONS: '[data-toggle=\"buttons\"] .btn',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1),\n    LOAD_DATA_API: \"load\" + EVENT_KEY$1 + DATA_API_KEY$1\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLES)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          } else if (input.type === 'checkbox') {\n            if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            }\n          } else {\n            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n            triggerChangeEvent = false;\n          }\n\n          if (triggerChangeEvent) {\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n        if (addAriaPressed) {\n          this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n        }\n\n        if (triggerChangeEvent) {\n          $(this._element).toggleClass(ClassName$1.ACTIVE);\n        }\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON)[0];\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault(); // work around Firefox bug #1540995\n    } else {\n      var inputBtn = button.querySelector(Selector$1.INPUT);\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault(); // work around Firefox bug #1540995\n\n        return;\n      }\n\n      Button._jQueryInterface.call($(button), 'toggle');\n    }\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  $(window).on(Event$1.LOAD_DATA_API, function () {\n    // ensure correct active class is set to match the controls' actual values/states\n    // find all checkboxes/readio buttons inside data-toggle groups\n    var buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLES_BUTTONS));\n\n    for (var i = 0, len = buttons.length; i < len; i++) {\n      var button = buttons[i];\n      var input = button.querySelector(Selector$1.INPUT);\n\n      if (input.checked || input.hasAttribute('checked')) {\n        button.classList.add(ClassName$1.ACTIVE);\n      } else {\n        button.classList.remove(ClassName$1.ACTIVE);\n      }\n    } // find all button toggles\n\n\n    buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLE));\n\n    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n      var _button = buttons[_i];\n\n      if (_button.getAttribute('aria-pressed') === 'true') {\n        _button.classList.add(ClassName$1.ACTIVE);\n      } else {\n        _button.classList.remove(ClassName$1.ACTIVE);\n      }\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.4.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default, {}, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread2({}, Default, {}, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread2({}, _config, {}, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.4.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$1, {}, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread2({}, Default$1, {}, $this.data(), {}, typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.4.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string',\n    popperConfig: '(null|object)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      this.show(true);\n    };\n\n    _proto.show = function show(usePopper) {\n      if (usePopper === void 0) {\n        usePopper = false;\n      }\n\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar && usePopper) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, this.constructor.Default, {}, $(this._element).data(), {}, config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread2({}, data.offsets, {}, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        }\n      }; // Disable Popper.js if we have a static display\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return _objectSpread2({}, popperConfig, {}, this._config.popperConfig);\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n\n        if (context._popper) {\n          context._popper.destroy();\n        }\n\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive && event.which === ESCAPE_KEYCODE) {\n        return;\n      }\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)).filter(function (item) {\n        return $(item).is(':visible');\n      });\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.4.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDE_PREVENTED: \"hidePrevented\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show',\n    STATIC: 'modal-static'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$3, {}, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n      var _this3 = this;\n\n      if (this._config.backdrop === 'static') {\n        var hideEventPrevented = $.Event(Event$5.HIDE_PREVENTED);\n        $(this._element).trigger(hideEventPrevented);\n\n        if (hideEventPrevented.defaultPrevented) {\n          return;\n        }\n\n        this._element.classList.add(ClassName$5.STATIC);\n\n        var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function () {\n          _this3._element.classList.remove(ClassName$5.STATIC);\n        }).emulateTransitionEnd(modalTransitionDuration);\n\n        this._element.focus();\n      } else {\n        this.hide();\n      }\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this4 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n      var modalBody = this._dialog ? this._dialog.querySelector(Selector$5.MODAL_BODY) : null;\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE) && modalBody) {\n        modalBody.scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this4._config.focus) {\n          _this4._element.focus();\n        }\n\n        _this4._isTransitioning = false;\n        $(_this4._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this5 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {\n          _this5._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this6 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            _this6._triggerBackdropTransition();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this7 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this7.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this8 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this8._resetAdjustments();\n\n        _this8._resetScrollbar();\n\n        $(_this8._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this9 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this9._ignoreBackdropClick) {\n            _this9._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          _this9._triggerBackdropTransition();\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this9._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this10 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread2({}, Default$3, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this11 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this11).is(':visible')) {\n          _this11.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.4.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.4.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object',\n    popperConfig: '(null|object)'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist,\n    popperConfig: null\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getPopperConfig = function _getPopperConfig(attachment) {\n      var _this3 = this;\n\n      var defaultBsConfig = {\n        placement: attachment,\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            behavior: this.config.fallbackPlacement\n          },\n          arrow: {\n            element: Selector$6.ARROW\n          },\n          preventOverflow: {\n            boundariesElement: this.config.boundary\n          }\n        },\n        onCreate: function onCreate(data) {\n          if (data.originalPlacement !== data.placement) {\n            _this3._handlePopperPlacementChange(data);\n          }\n        },\n        onUpdate: function onUpdate(data) {\n          return _this3._handlePopperPlacementChange(data);\n        }\n      };\n      return _objectSpread2({}, defaultBsConfig, {}, this.config.popperConfig);\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this4 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread2({}, data.offsets, {}, _this4.config.offset(data.offsets, _this4.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this5 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n            return _this5.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n          $(_this5.element).on(eventIn, _this5.config.selector, function (event) {\n            return _this5._enter(event);\n          }).on(eventOut, _this5.config.selector, function (event) {\n            return _this5._leave(event);\n          });\n        }\n      });\n\n      this._hideModalHandler = function () {\n        if (_this5.element) {\n          _this5.hide();\n        }\n      };\n\n      $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n      if (this.config.selector) {\n        this.config = _objectSpread2({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread2({}, this.constructor.Default, {}, dataAttributes, {}, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.4.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread2({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.4.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$6, {}, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.4.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.4.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      var showEvent = $.Event(Event$a.SHOW);\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this._timeout = setTimeout(function () {\n            _this.hide();\n          }, _this._config.delay);\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      Util.reflow(this._element);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide() {\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$a.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._close();\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread2({}, Default$7, {}, $(this._element).data(), {}, typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this2 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this2.hide();\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this3 = this;\n\n      var complete = function complete() {\n        _this3._element.classList.add(ClassName$a.HIDE);\n\n        $(_this3._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n  exports.Util = Util;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.js.map\n"
  },
  {
    "path": "public/vendor/bootstrap-switch/css/bootstrap2/bootstrap-switch.css",
    "content": "/**\n  * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.\n  *\n  * @version v3.3.4\n  * @homepage https://bttstrp.github.io/bootstrap-switch\n  * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)\n  * @license Apache-2.0\n  */\n\n.clearfix {\n  *zoom: 1;\n}\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.clearfix:after {\n  clear: both;\n}\n.hide-text {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.input-block-level {\n  display: block;\n  width: 100%;\n  min-height: 30px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.bootstrap-switch {\n  display: inline-block;\n  direction: ltr;\n  cursor: pointer;\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n  border: 1px solid;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  position: relative;\n  text-align: left;\n  overflow: hidden;\n  line-height: 8px;\n  z-index: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  vertical-align: middle;\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -moz-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.bootstrap-switch .bootstrap-switch-container {\n  display: inline-block;\n  top: 0;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n.bootstrap-switch .bootstrap-switch-handle-on,\n.bootstrap-switch .bootstrap-switch-handle-off,\n.bootstrap-switch .bootstrap-switch-label {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  cursor: pointer;\n  display: inline-block !important;\n  padding-top: 4px;\n  padding-bottom: 4px;\n  padding-left: 8px;\n  padding-right: 8px;\n  font-size: 14px;\n  line-height: 20px;\n}\n.bootstrap-switch .bootstrap-switch-handle-on,\n.bootstrap-switch .bootstrap-switch-handle-off {\n  text-align: center;\n  z-index: 1;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {\n  color: #fff;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n  background-color: #005fcc;\n  background-image: -moz-linear-gradient(top, #0044cc, #08c);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0044cc), to(#08c));\n  background-image: -webkit-linear-gradient(top, #0044cc, #08c);\n  background-image: -o-linear-gradient(top, #0044cc, #08c);\n  background-image: linear-gradient(to bottom, #0044cc, #08c);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0044cc', endColorstr='#ff0088cc', GradientType=0);\n  border-color: #08c #08c #005580;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  *background-color: #08c;\n  /* Darken IE7 buttons by default so they stand out more given they won't have borders */\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary:hover,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary:hover,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary:focus,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary:focus,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary.active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary.disabled,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary.disabled,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary[disabled],\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary[disabled] {\n  color: #fff;\n  background-color: #08c;\n  *background-color: #0077b3;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary.active {\n  background-color: #006699 \\9;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {\n  color: #fff;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n  background-color: #41a7c5;\n  background-image: -moz-linear-gradient(top, #2f96b4, #5bc0de);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#2f96b4), to(#5bc0de));\n  background-image: -webkit-linear-gradient(top, #2f96b4, #5bc0de);\n  background-image: -o-linear-gradient(top, #2f96b4, #5bc0de);\n  background-image: linear-gradient(to bottom, #2f96b4, #5bc0de);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f96b4', endColorstr='#ff5bc0de', GradientType=0);\n  border-color: #5bc0de #5bc0de #28a1c5;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  *background-color: #5bc0de;\n  /* Darken IE7 buttons by default so they stand out more given they won't have borders */\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info:hover,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info:hover,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info:focus,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info:focus,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info.active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info.disabled,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info.disabled,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info[disabled],\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info[disabled] {\n  color: #fff;\n  background-color: #5bc0de;\n  *background-color: #46b8da;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info.active {\n  background-color: #31b0d5 \\9;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {\n  color: #fff;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n  background-color: #58b058;\n  background-image: -moz-linear-gradient(top, #51a351, #62c462);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#51a351), to(#62c462));\n  background-image: -webkit-linear-gradient(top, #51a351, #62c462);\n  background-image: -o-linear-gradient(top, #51a351, #62c462);\n  background-image: linear-gradient(to bottom, #51a351, #62c462);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff51a351', endColorstr='#ff62c462', GradientType=0);\n  border-color: #62c462 #62c462 #3b9e3b;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  *background-color: #62c462;\n  /* Darken IE7 buttons by default so they stand out more given they won't have borders */\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success:hover,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success:hover,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success:focus,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success:focus,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success.active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success.disabled,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success.disabled,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success[disabled],\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success[disabled] {\n  color: #fff;\n  background-color: #62c462;\n  *background-color: #4fbd4f;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success.active {\n  background-color: #42b142 \\9;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {\n  color: #fff;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n  background-color: #f9a123;\n  background-image: -moz-linear-gradient(top, #f89406, #fbb450);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f89406), to(#fbb450));\n  background-image: -webkit-linear-gradient(top, #f89406, #fbb450);\n  background-image: -o-linear-gradient(top, #f89406, #fbb450);\n  background-image: linear-gradient(to bottom, #f89406, #fbb450);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff89406', endColorstr='#fffbb450', GradientType=0);\n  border-color: #fbb450 #fbb450 #f89406;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  *background-color: #fbb450;\n  /* Darken IE7 buttons by default so they stand out more given they won't have borders */\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning:hover,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning:hover,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning:focus,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning:focus,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning.active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning.disabled,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning.disabled,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning[disabled],\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning[disabled] {\n  color: #fff;\n  background-color: #fbb450;\n  *background-color: #faa937;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning.active {\n  background-color: #fa9f1e \\9;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {\n  color: #fff;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n  background-color: #d14641;\n  background-image: -moz-linear-gradient(top, #bd362f, #ee5f5b);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#bd362f), to(#ee5f5b));\n  background-image: -webkit-linear-gradient(top, #bd362f, #ee5f5b);\n  background-image: -o-linear-gradient(top, #bd362f, #ee5f5b);\n  background-image: linear-gradient(to bottom, #bd362f, #ee5f5b);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbd362f', endColorstr='#ffee5f5b', GradientType=0);\n  border-color: #ee5f5b #ee5f5b #e51d18;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  *background-color: #ee5f5b;\n  /* Darken IE7 buttons by default so they stand out more given they won't have borders */\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger:hover,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger:hover,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger:focus,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger:focus,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger.active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger.disabled,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger.disabled,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger[disabled],\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger[disabled] {\n  color: #fff;\n  background-color: #ee5f5b;\n  *background-color: #ec4844;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger.active {\n  background-color: #e9322d \\9;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {\n  color: #333;\n  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);\n  background-color: #f0f0f0;\n  background-image: -moz-linear-gradient(top, #e6e6e6, #fff);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#fff));\n  background-image: -webkit-linear-gradient(top, #e6e6e6, #fff);\n  background-image: -o-linear-gradient(top, #e6e6e6, #fff);\n  background-image: linear-gradient(to bottom, #e6e6e6, #fff);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffffffff', GradientType=0);\n  border-color: #fff #fff #d9d9d9;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  *background-color: #fff;\n  /* Darken IE7 buttons by default so they stand out more given they won't have borders */\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default:hover,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default:hover,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default:focus,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default:focus,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default.active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default.disabled,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default.disabled,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default[disabled],\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default[disabled] {\n  color: #333;\n  background-color: #fff;\n  *background-color: #f2f2f2;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default:active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default:active,\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default.active,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default.active {\n  background-color: #e6e6e6 \\9;\n}\n.bootstrap-switch .bootstrap-switch-label {\n  text-align: center;\n  margin-top: -1px;\n  margin-bottom: -1px;\n  z-index: 100;\n  border-left: 1px solid #ccc;\n  border-right: 1px solid #ccc;\n  color: #333;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n  background-color: #f5f5f5;\n  background-image: -moz-linear-gradient(top, #fff, #e6e6e6);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#e6e6e6));\n  background-image: -webkit-linear-gradient(top, #fff, #e6e6e6);\n  background-image: -o-linear-gradient(top, #fff, #e6e6e6);\n  background-image: linear-gradient(to bottom, #fff, #e6e6e6);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);\n  border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  *background-color: #e6e6e6;\n  /* Darken IE7 buttons by default so they stand out more given they won't have borders */\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.bootstrap-switch .bootstrap-switch-label:hover,\n.bootstrap-switch .bootstrap-switch-label:focus,\n.bootstrap-switch .bootstrap-switch-label:active,\n.bootstrap-switch .bootstrap-switch-label.active,\n.bootstrap-switch .bootstrap-switch-label.disabled,\n.bootstrap-switch .bootstrap-switch-label[disabled] {\n  color: #333;\n  background-color: #e6e6e6;\n  *background-color: #d9d9d9;\n}\n.bootstrap-switch .bootstrap-switch-label:active,\n.bootstrap-switch .bootstrap-switch-label.active {\n  background-color: #cccccc \\9;\n}\n.bootstrap-switch span::before {\n  content: \"\\200b\";\n}\n.bootstrap-switch .bootstrap-switch-handle-on {\n  -webkit-border-top-left-radius: 4px;\n  -moz-border-radius-topleft: 4px;\n  border-top-left-radius: 4px;\n  -webkit-border-bottom-left-radius: 4px;\n  -moz-border-radius-bottomleft: 4px;\n  border-bottom-left-radius: 4px;\n}\n.bootstrap-switch .bootstrap-switch-handle-off {\n  -webkit-border-top-right-radius: 4px;\n  -moz-border-radius-topright: 4px;\n  border-top-right-radius: 4px;\n  -webkit-border-bottom-right-radius: 4px;\n  -moz-border-radius-bottomright: 4px;\n  border-bottom-right-radius: 4px;\n}\n.bootstrap-switch input[type='radio'],\n.bootstrap-switch input[type='checkbox'] {\n  position: absolute !important;\n  top: 0;\n  left: 0;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  z-index: -1;\n  visibility: hidden;\n}\n.bootstrap-switch input[type='radio'].form-control,\n.bootstrap-switch input[type='checkbox'].form-control {\n  height: auto;\n}\n.bootstrap-switch.bootstrap-switch-mini {\n  min-width: 71px;\n}\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {\n  padding: 3px 6px;\n  font-size: 10px;\n  line-height: 9px;\n}\n.bootstrap-switch.bootstrap-switch-small {\n  min-width: 79px;\n}\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {\n  padding: 3px 6px;\n  font-size: 12px;\n  line-height: 18px;\n}\n.bootstrap-switch.bootstrap-switch-large {\n  min-width: 120px;\n}\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {\n  padding: 9px 12px;\n  font-size: 16px;\n  line-height: normal;\n}\n.bootstrap-switch.bootstrap-switch-disabled,\n.bootstrap-switch.bootstrap-switch-readonly,\n.bootstrap-switch.bootstrap-switch-indeterminate {\n  cursor: default !important;\n}\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default !important;\n}\n.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {\n  -webkit-transition: margin-left 0.5s;\n  -moz-transition: margin-left 0.5s;\n  -o-transition: margin-left 0.5s;\n  transition: margin-left 0.5s;\n}\n.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {\n  -webkit-border-top-left-radius: 0;\n  -moz-border-radius-topleft: 0;\n  border-top-left-radius: 0;\n  -webkit-border-bottom-left-radius: 0;\n  -moz-border-radius-bottomleft: 0;\n  border-bottom-left-radius: 0;\n  -webkit-border-top-right-radius: 4px;\n  -moz-border-radius-topright: 4px;\n  border-top-right-radius: 4px;\n  -webkit-border-bottom-right-radius: 4px;\n  -moz-border-radius-bottomright: 4px;\n  border-bottom-right-radius: 4px;\n}\n.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {\n  -webkit-border-top-right-radius: 0;\n  -moz-border-radius-topright: 0;\n  border-top-right-radius: 0;\n  -webkit-border-bottom-right-radius: 0;\n  -moz-border-radius-bottomright: 0;\n  border-bottom-right-radius: 0;\n  -webkit-border-top-left-radius: 4px;\n  -moz-border-radius-topleft: 4px;\n  border-top-left-radius: 4px;\n  -webkit-border-bottom-left-radius: 4px;\n  -moz-border-radius-bottomleft: 4px;\n  border-bottom-left-radius: 4px;\n}\n.bootstrap-switch.bootstrap-switch-focused {\n  border-color: rgba(82, 168, 236, 0.8);\n  outline: 0;\n  outline: thin dotted \\9;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82, 168, 236, .6);\n  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82, 168, 236, .6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82, 168, 236, .6);\n}\n.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label {\n  -webkit-border-top-right-radius: 4px;\n  -moz-border-radius-topright: 4px;\n  border-top-right-radius: 4px;\n  -webkit-border-bottom-right-radius: 4px;\n  -moz-border-radius-bottomright: 4px;\n  border-bottom-right-radius: 4px;\n}\n.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label {\n  -webkit-border-top-left-radius: 4px;\n  -moz-border-radius-topleft: 4px;\n  border-top-left-radius: 4px;\n  -webkit-border-bottom-left-radius: 4px;\n  -moz-border-radius-bottomleft: 4px;\n  border-bottom-left-radius: 4px;\n}\n"
  },
  {
    "path": "public/vendor/bootstrap-switch/css/bootstrap3/bootstrap-switch.css",
    "content": "/**\n  * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.\n  *\n  * @version v3.3.4\n  * @homepage https://bttstrp.github.io/bootstrap-switch\n  * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)\n  * @license Apache-2.0\n  */\n\n.bootstrap-switch {\n  display: inline-block;\n  direction: ltr;\n  cursor: pointer;\n  border-radius: 4px;\n  border: 1px solid;\n  border-color: #ccc;\n  position: relative;\n  text-align: left;\n  overflow: hidden;\n  line-height: 8px;\n  z-index: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  vertical-align: middle;\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.bootstrap-switch .bootstrap-switch-container {\n  display: inline-block;\n  top: 0;\n  border-radius: 4px;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n.bootstrap-switch .bootstrap-switch-handle-on,\n.bootstrap-switch .bootstrap-switch-handle-off,\n.bootstrap-switch .bootstrap-switch-label {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  cursor: pointer;\n  display: table-cell;\n  vertical-align: middle;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 20px;\n}\n.bootstrap-switch .bootstrap-switch-handle-on,\n.bootstrap-switch .bootstrap-switch-handle-off {\n  text-align: center;\n  z-index: 1;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {\n  color: #fff;\n  background: #337ab7;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {\n  color: #fff;\n  background: #5bc0de;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {\n  color: #fff;\n  background: #5cb85c;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {\n  background: #f0ad4e;\n  color: #fff;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {\n  color: #fff;\n  background: #d9534f;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {\n  color: #000;\n  background: #eeeeee;\n}\n.bootstrap-switch .bootstrap-switch-label {\n  text-align: center;\n  margin-top: -1px;\n  margin-bottom: -1px;\n  z-index: 100;\n  color: #333;\n  background: #fff;\n}\n.bootstrap-switch span::before {\n  content: \"\\200b\";\n}\n.bootstrap-switch .bootstrap-switch-handle-on {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.bootstrap-switch .bootstrap-switch-handle-off {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.bootstrap-switch input[type='radio'],\n.bootstrap-switch input[type='checkbox'] {\n  position: absolute !important;\n  top: 0;\n  left: 0;\n  margin: 0;\n  z-index: -1;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  visibility: hidden;\n}\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {\n  padding: 6px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.bootstrap-switch.bootstrap-switch-disabled,\n.bootstrap-switch.bootstrap-switch-readonly,\n.bootstrap-switch.bootstrap-switch-indeterminate {\n  cursor: default !important;\n}\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default !important;\n}\n.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {\n  -webkit-transition: margin-left 0.5s;\n  -o-transition: margin-left 0.5s;\n  transition: margin-left 0.5s;\n}\n.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.bootstrap-switch.bootstrap-switch-focused {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,\n.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n"
  },
  {
    "path": "public/vendor/bootstrap-switch/js/bootstrap-switch.js",
    "content": "/**\n  * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.\n  *\n  * @version v3.3.4\n  * @homepage https://bttstrp.github.io/bootstrap-switch\n  * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)\n  * @license Apache-2.0\n  */\n\n(function (global, factory) {\n  if (typeof define === \"function\" && define.amd) {\n    define(['jquery'], factory);\n  } else if (typeof exports !== \"undefined\") {\n    factory(require('jquery'));\n  } else {\n    var mod = {\n      exports: {}\n    };\n    factory(global.jquery);\n    global.bootstrapSwitch = mod.exports;\n  }\n})(this, function (_jquery) {\n  'use strict';\n\n  var _jquery2 = _interopRequireDefault(_jquery);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var _createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var $ = _jquery2.default || window.jQuery || window.$;\n\n  var BootstrapSwitch = function () {\n    function BootstrapSwitch(element) {\n      var _this = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      _classCallCheck(this, BootstrapSwitch);\n\n      this.$element = $(element);\n      this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, this._getElementOptions(), options);\n      this.prevOptions = {};\n      this.$wrapper = $('<div>', {\n        class: function _class() {\n          var classes = [];\n          classes.push(_this.options.state ? 'on' : 'off');\n          if (_this.options.size) {\n            classes.push(_this.options.size);\n          }\n          if (_this.options.disabled) {\n            classes.push('disabled');\n          }\n          if (_this.options.readonly) {\n            classes.push('readonly');\n          }\n          if (_this.options.indeterminate) {\n            classes.push('indeterminate');\n          }\n          if (_this.options.inverse) {\n            classes.push('inverse');\n          }\n          if (_this.$element.attr('id')) {\n            classes.push('id-' + _this.$element.attr('id'));\n          }\n          return classes.map(_this._getClass.bind(_this)).concat([_this.options.baseClass], _this._getClasses(_this.options.wrapperClass)).join(' ');\n        }\n      });\n      this.$container = $('<div>', { class: this._getClass('container') });\n      this.$on = $('<span>', {\n        html: this.options.onText,\n        class: this._getClass('handle-on') + ' ' + this._getClass(this.options.onColor)\n      });\n      this.$off = $('<span>', {\n        html: this.options.offText,\n        class: this._getClass('handle-off') + ' ' + this._getClass(this.options.offColor)\n      });\n      this.$label = $('<span>', {\n        html: this.options.labelText,\n        class: this._getClass('label')\n      });\n\n      this.$element.on('init.bootstrapSwitch', this.options.onInit.bind(this, element));\n      this.$element.on('switchChange.bootstrapSwitch', function () {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        if (_this.options.onSwitchChange.apply(element, args) === false) {\n          if (_this.$element.is(':radio')) {\n            $('[name=\"' + _this.$element.attr('name') + '\"]').trigger('previousState.bootstrapSwitch', true);\n          } else {\n            _this.$element.trigger('previousState.bootstrapSwitch', true);\n          }\n        }\n      });\n\n      this.$container = this.$element.wrap(this.$container).parent();\n      this.$wrapper = this.$container.wrap(this.$wrapper).parent();\n      this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off);\n\n      if (this.options.indeterminate) {\n        this.$element.prop('indeterminate', true);\n      }\n\n      this._init();\n      this._elementHandlers();\n      this._handleHandlers();\n      this._labelHandlers();\n      this._formHandler();\n      this._externalLabelHandler();\n      this.$element.trigger('init.bootstrapSwitch', this.options.state);\n    }\n\n    _createClass(BootstrapSwitch, [{\n      key: 'setPrevOptions',\n      value: function setPrevOptions() {\n        this.prevOptions = _extends({}, this.options);\n      }\n    }, {\n      key: 'state',\n      value: function state(value, skip) {\n        if (typeof value === 'undefined') {\n          return this.options.state;\n        }\n        if (this.options.disabled || this.options.readonly || this.options.state && !this.options.radioAllOff && this.$element.is(':radio')) {\n          return this.$element;\n        }\n        if (this.$element.is(':radio')) {\n          $('[name=\"' + this.$element.attr('name') + '\"]').trigger('setPreviousOptions.bootstrapSwitch');\n        } else {\n          this.$element.trigger('setPreviousOptions.bootstrapSwitch');\n        }\n        if (this.options.indeterminate) {\n          this.indeterminate(false);\n        }\n        this.$element.prop('checked', Boolean(value)).trigger('change.bootstrapSwitch', skip);\n        return this.$element;\n      }\n    }, {\n      key: 'toggleState',\n      value: function toggleState(skip) {\n        if (this.options.disabled || this.options.readonly) {\n          return this.$element;\n        }\n        if (this.options.indeterminate) {\n          this.indeterminate(false);\n          return this.state(true);\n        } else {\n          return this.$element.prop('checked', !this.options.state).trigger('change.bootstrapSwitch', skip);\n        }\n      }\n    }, {\n      key: 'size',\n      value: function size(value) {\n        if (typeof value === 'undefined') {\n          return this.options.size;\n        }\n        if (this.options.size != null) {\n          this.$wrapper.removeClass(this._getClass(this.options.size));\n        }\n        if (value) {\n          this.$wrapper.addClass(this._getClass(value));\n        }\n        this._width();\n        this._containerPosition();\n        this.options.size = value;\n        return this.$element;\n      }\n    }, {\n      key: 'animate',\n      value: function animate(value) {\n        if (typeof value === 'undefined') {\n          return this.options.animate;\n        }\n        if (this.options.animate === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleAnimate();\n      }\n    }, {\n      key: 'toggleAnimate',\n      value: function toggleAnimate() {\n        this.options.animate = !this.options.animate;\n        this.$wrapper.toggleClass(this._getClass('animate'));\n        return this.$element;\n      }\n    }, {\n      key: 'disabled',\n      value: function disabled(value) {\n        if (typeof value === 'undefined') {\n          return this.options.disabled;\n        }\n        if (this.options.disabled === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleDisabled();\n      }\n    }, {\n      key: 'toggleDisabled',\n      value: function toggleDisabled() {\n        this.options.disabled = !this.options.disabled;\n        this.$element.prop('disabled', this.options.disabled);\n        this.$wrapper.toggleClass(this._getClass('disabled'));\n        return this.$element;\n      }\n    }, {\n      key: 'readonly',\n      value: function readonly(value) {\n        if (typeof value === 'undefined') {\n          return this.options.readonly;\n        }\n        if (this.options.readonly === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleReadonly();\n      }\n    }, {\n      key: 'toggleReadonly',\n      value: function toggleReadonly() {\n        this.options.readonly = !this.options.readonly;\n        this.$element.prop('readonly', this.options.readonly);\n        this.$wrapper.toggleClass(this._getClass('readonly'));\n        return this.$element;\n      }\n    }, {\n      key: 'indeterminate',\n      value: function indeterminate(value) {\n        if (typeof value === 'undefined') {\n          return this.options.indeterminate;\n        }\n        if (this.options.indeterminate === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleIndeterminate();\n      }\n    }, {\n      key: 'toggleIndeterminate',\n      value: function toggleIndeterminate() {\n        this.options.indeterminate = !this.options.indeterminate;\n        this.$element.prop('indeterminate', this.options.indeterminate);\n        this.$wrapper.toggleClass(this._getClass('indeterminate'));\n        this._containerPosition();\n        return this.$element;\n      }\n    }, {\n      key: 'inverse',\n      value: function inverse(value) {\n        if (typeof value === 'undefined') {\n          return this.options.inverse;\n        }\n        if (this.options.inverse === Boolean(value)) {\n          return this.$element;\n        }\n        return this.toggleInverse();\n      }\n    }, {\n      key: 'toggleInverse',\n      value: function toggleInverse() {\n        this.$wrapper.toggleClass(this._getClass('inverse'));\n        var $on = this.$on.clone(true);\n        var $off = this.$off.clone(true);\n        this.$on.replaceWith($off);\n        this.$off.replaceWith($on);\n        this.$on = $off;\n        this.$off = $on;\n        this.options.inverse = !this.options.inverse;\n        return this.$element;\n      }\n    }, {\n      key: 'onColor',\n      value: function onColor(value) {\n        if (typeof value === 'undefined') {\n          return this.options.onColor;\n        }\n        if (this.options.onColor) {\n          this.$on.removeClass(this._getClass(this.options.onColor));\n        }\n        this.$on.addClass(this._getClass(value));\n        this.options.onColor = value;\n        return this.$element;\n      }\n    }, {\n      key: 'offColor',\n      value: function offColor(value) {\n        if (typeof value === 'undefined') {\n          return this.options.offColor;\n        }\n        if (this.options.offColor) {\n          this.$off.removeClass(this._getClass(this.options.offColor));\n        }\n        this.$off.addClass(this._getClass(value));\n        this.options.offColor = value;\n        return this.$element;\n      }\n    }, {\n      key: 'onText',\n      value: function onText(value) {\n        if (typeof value === 'undefined') {\n          return this.options.onText;\n        }\n        this.$on.html(value);\n        this._width();\n        this._containerPosition();\n        this.options.onText = value;\n        return this.$element;\n      }\n    }, {\n      key: 'offText',\n      value: function offText(value) {\n        if (typeof value === 'undefined') {\n          return this.options.offText;\n        }\n        this.$off.html(value);\n        this._width();\n        this._containerPosition();\n        this.options.offText = value;\n        return this.$element;\n      }\n    }, {\n      key: 'labelText',\n      value: function labelText(value) {\n        if (typeof value === 'undefined') {\n          return this.options.labelText;\n        }\n        this.$label.html(value);\n        this._width();\n        this.options.labelText = value;\n        return this.$element;\n      }\n    }, {\n      key: 'handleWidth',\n      value: function handleWidth(value) {\n        if (typeof value === 'undefined') {\n          return this.options.handleWidth;\n        }\n        this.options.handleWidth = value;\n        this._width();\n        this._containerPosition();\n        return this.$element;\n      }\n    }, {\n      key: 'labelWidth',\n      value: function labelWidth(value) {\n        if (typeof value === 'undefined') {\n          return this.options.labelWidth;\n        }\n        this.options.labelWidth = value;\n        this._width();\n        this._containerPosition();\n        return this.$element;\n      }\n    }, {\n      key: 'baseClass',\n      value: function baseClass(value) {\n        return this.options.baseClass;\n      }\n    }, {\n      key: 'wrapperClass',\n      value: function wrapperClass(value) {\n        if (typeof value === 'undefined') {\n          return this.options.wrapperClass;\n        }\n        if (!value) {\n          value = $.fn.bootstrapSwitch.defaults.wrapperClass;\n        }\n        this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(' '));\n        this.$wrapper.addClass(this._getClasses(value).join(' '));\n        this.options.wrapperClass = value;\n        return this.$element;\n      }\n    }, {\n      key: 'radioAllOff',\n      value: function radioAllOff(value) {\n        if (typeof value === 'undefined') {\n          return this.options.radioAllOff;\n        }\n        var val = Boolean(value);\n        if (this.options.radioAllOff === val) {\n          return this.$element;\n        }\n        this.options.radioAllOff = val;\n        return this.$element;\n      }\n    }, {\n      key: 'onInit',\n      value: function onInit(value) {\n        if (typeof value === 'undefined') {\n          return this.options.onInit;\n        }\n        if (!value) {\n          value = $.fn.bootstrapSwitch.defaults.onInit;\n        }\n        this.options.onInit = value;\n        return this.$element;\n      }\n    }, {\n      key: 'onSwitchChange',\n      value: function onSwitchChange(value) {\n        if (typeof value === 'undefined') {\n          return this.options.onSwitchChange;\n        }\n        if (!value) {\n          value = $.fn.bootstrapSwitch.defaults.onSwitchChange;\n        }\n        this.options.onSwitchChange = value;\n        return this.$element;\n      }\n    }, {\n      key: 'destroy',\n      value: function destroy() {\n        var $form = this.$element.closest('form');\n        if ($form.length) {\n          $form.off('reset.bootstrapSwitch').removeData('bootstrap-switch');\n        }\n        this.$container.children().not(this.$element).remove();\n        this.$element.unwrap().unwrap().off('.bootstrapSwitch').removeData('bootstrap-switch');\n        return this.$element;\n      }\n    }, {\n      key: '_getElementOptions',\n      value: function _getElementOptions() {\n        return {\n          state: this.$element.is(':checked'),\n          size: this.$element.data('size'),\n          animate: this.$element.data('animate'),\n          disabled: this.$element.is(':disabled'),\n          readonly: this.$element.is('[readonly]'),\n          indeterminate: this.$element.data('indeterminate'),\n          inverse: this.$element.data('inverse'),\n          radioAllOff: this.$element.data('radio-all-off'),\n          onColor: this.$element.data('on-color'),\n          offColor: this.$element.data('off-color'),\n          onText: this.$element.data('on-text'),\n          offText: this.$element.data('off-text'),\n          labelText: this.$element.data('label-text'),\n          handleWidth: this.$element.data('handle-width'),\n          labelWidth: this.$element.data('label-width'),\n          baseClass: this.$element.data('base-class'),\n          wrapperClass: this.$element.data('wrapper-class')\n        };\n      }\n    }, {\n      key: '_width',\n      value: function _width() {\n        var _this2 = this;\n\n        var $handles = this.$on.add(this.$off).add(this.$label).css('width', '');\n        var handleWidth = this.options.handleWidth === 'auto' ? Math.round(Math.max(this.$on.width(), this.$off.width())) : this.options.handleWidth;\n        $handles.width(handleWidth);\n        this.$label.width(function (index, width) {\n          if (_this2.options.labelWidth !== 'auto') {\n            return _this2.options.labelWidth;\n          }\n          if (width < handleWidth) {\n            return handleWidth;\n          }\n          return width;\n        });\n        this._handleWidth = this.$on.outerWidth();\n        this._labelWidth = this.$label.outerWidth();\n        this.$container.width(this._handleWidth * 2 + this._labelWidth);\n        return this.$wrapper.width(this._handleWidth + this._labelWidth);\n      }\n    }, {\n      key: '_containerPosition',\n      value: function _containerPosition() {\n        var _this3 = this;\n\n        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.state;\n        var callback = arguments[1];\n\n        this.$container.css('margin-left', function () {\n          var values = [0, '-' + _this3._handleWidth + 'px'];\n          if (_this3.options.indeterminate) {\n            return '-' + _this3._handleWidth / 2 + 'px';\n          }\n          if (state) {\n            if (_this3.options.inverse) {\n              return values[1];\n            } else {\n              return values[0];\n            }\n          } else {\n            if (_this3.options.inverse) {\n              return values[0];\n            } else {\n              return values[1];\n            }\n          }\n        });\n      }\n    }, {\n      key: '_init',\n      value: function _init() {\n        var _this4 = this;\n\n        var init = function init() {\n          _this4.setPrevOptions();\n          _this4._width();\n          _this4._containerPosition();\n          setTimeout(function () {\n            if (_this4.options.animate) {\n              return _this4.$wrapper.addClass(_this4._getClass('animate'));\n            }\n          }, 50);\n        };\n        if (this.$wrapper.is(':visible')) {\n          init();\n          return;\n        }\n        var initInterval = window.setInterval(function () {\n          if (_this4.$wrapper.is(':visible')) {\n            init();\n            return window.clearInterval(initInterval);\n          }\n        }, 50);\n      }\n    }, {\n      key: '_elementHandlers',\n      value: function _elementHandlers() {\n        var _this5 = this;\n\n        return this.$element.on({\n          'setPreviousOptions.bootstrapSwitch': this.setPrevOptions.bind(this),\n\n          'previousState.bootstrapSwitch': function previousStateBootstrapSwitch() {\n            _this5.options = _this5.prevOptions;\n            if (_this5.options.indeterminate) {\n              _this5.$wrapper.addClass(_this5._getClass('indeterminate'));\n            }\n            _this5.$element.prop('checked', _this5.options.state).trigger('change.bootstrapSwitch', true);\n          },\n\n          'change.bootstrapSwitch': function changeBootstrapSwitch(event, skip) {\n            event.preventDefault();\n            event.stopImmediatePropagation();\n            var state = _this5.$element.is(':checked');\n            _this5._containerPosition(state);\n            if (state === _this5.options.state) {\n              return;\n            }\n            _this5.options.state = state;\n            _this5.$wrapper.toggleClass(_this5._getClass('off')).toggleClass(_this5._getClass('on'));\n            if (!skip) {\n              if (_this5.$element.is(':radio')) {\n                $('[name=\"' + _this5.$element.attr('name') + '\"]').not(_this5.$element).prop('checked', false).trigger('change.bootstrapSwitch', true);\n              }\n              _this5.$element.trigger('switchChange.bootstrapSwitch', [state]);\n            }\n          },\n\n          'focus.bootstrapSwitch': function focusBootstrapSwitch(event) {\n            event.preventDefault();\n            _this5.$wrapper.addClass(_this5._getClass('focused'));\n          },\n\n          'blur.bootstrapSwitch': function blurBootstrapSwitch(event) {\n            event.preventDefault();\n            _this5.$wrapper.removeClass(_this5._getClass('focused'));\n          },\n\n          'keydown.bootstrapSwitch': function keydownBootstrapSwitch(event) {\n            if (!event.which || _this5.options.disabled || _this5.options.readonly) {\n              return;\n            }\n            if (event.which === 37 || event.which === 39) {\n              event.preventDefault();\n              event.stopImmediatePropagation();\n              _this5.state(event.which === 39);\n            }\n          }\n        });\n      }\n    }, {\n      key: '_handleHandlers',\n      value: function _handleHandlers() {\n        var _this6 = this;\n\n        this.$on.on('click.bootstrapSwitch', function (event) {\n          event.preventDefault();\n          event.stopPropagation();\n          _this6.state(false);\n          return _this6.$element.trigger('focus.bootstrapSwitch');\n        });\n        return this.$off.on('click.bootstrapSwitch', function (event) {\n          event.preventDefault();\n          event.stopPropagation();\n          _this6.state(true);\n          return _this6.$element.trigger('focus.bootstrapSwitch');\n        });\n      }\n    }, {\n      key: '_labelHandlers',\n      value: function _labelHandlers() {\n        var _this7 = this;\n\n        var handlers = {\n          click: function click(event) {\n            event.stopPropagation();\n          },\n\n\n          'mousedown.bootstrapSwitch touchstart.bootstrapSwitch': function mousedownBootstrapSwitchTouchstartBootstrapSwitch(event) {\n            if (_this7._dragStart || _this7.options.disabled || _this7.options.readonly) {\n              return;\n            }\n            event.preventDefault();\n            event.stopPropagation();\n            _this7._dragStart = (event.pageX || event.originalEvent.touches[0].pageX) - parseInt(_this7.$container.css('margin-left'), 10);\n            if (_this7.options.animate) {\n              _this7.$wrapper.removeClass(_this7._getClass('animate'));\n            }\n            _this7.$element.trigger('focus.bootstrapSwitch');\n          },\n\n          'mousemove.bootstrapSwitch touchmove.bootstrapSwitch': function mousemoveBootstrapSwitchTouchmoveBootstrapSwitch(event) {\n            if (_this7._dragStart == null) {\n              return;\n            }\n            var difference = (event.pageX || event.originalEvent.touches[0].pageX) - _this7._dragStart;\n            event.preventDefault();\n            if (difference < -_this7._handleWidth || difference > 0) {\n              return;\n            }\n            _this7._dragEnd = difference;\n            _this7.$container.css('margin-left', _this7._dragEnd + 'px');\n          },\n\n          'mouseup.bootstrapSwitch touchend.bootstrapSwitch': function mouseupBootstrapSwitchTouchendBootstrapSwitch(event) {\n            if (!_this7._dragStart) {\n              return;\n            }\n            event.preventDefault();\n            if (_this7.options.animate) {\n              _this7.$wrapper.addClass(_this7._getClass('animate'));\n            }\n            if (_this7._dragEnd) {\n              var state = _this7._dragEnd > -(_this7._handleWidth / 2);\n              _this7._dragEnd = false;\n              _this7.state(_this7.options.inverse ? !state : state);\n            } else {\n              _this7.state(!_this7.options.state);\n            }\n            _this7._dragStart = false;\n          },\n\n          'mouseleave.bootstrapSwitch': function mouseleaveBootstrapSwitch() {\n            _this7.$label.trigger('mouseup.bootstrapSwitch');\n          }\n        };\n        this.$label.on(handlers);\n      }\n    }, {\n      key: '_externalLabelHandler',\n      value: function _externalLabelHandler() {\n        var _this8 = this;\n\n        var $externalLabel = this.$element.closest('label');\n        $externalLabel.on('click', function (event) {\n          event.preventDefault();\n          event.stopImmediatePropagation();\n          if (event.target === $externalLabel[0]) {\n            _this8.toggleState();\n          }\n        });\n      }\n    }, {\n      key: '_formHandler',\n      value: function _formHandler() {\n        var $form = this.$element.closest('form');\n        if ($form.data('bootstrap-switch')) {\n          return;\n        }\n        $form.on('reset.bootstrapSwitch', function () {\n          window.setTimeout(function () {\n            $form.find('input').filter(function () {\n              return $(this).data('bootstrap-switch');\n            }).each(function () {\n              return $(this).bootstrapSwitch('state', this.checked);\n            });\n          }, 1);\n        }).data('bootstrap-switch', true);\n      }\n    }, {\n      key: '_getClass',\n      value: function _getClass(name) {\n        return this.options.baseClass + '-' + name;\n      }\n    }, {\n      key: '_getClasses',\n      value: function _getClasses(classes) {\n        if (!$.isArray(classes)) {\n          return [this._getClass(classes)];\n        }\n        return classes.map(this._getClass.bind(this));\n      }\n    }]);\n\n    return BootstrapSwitch;\n  }();\n\n  $.fn.bootstrapSwitch = function (option) {\n    for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    function reducer(ret, next) {\n      var $this = $(next);\n      var existingData = $this.data('bootstrap-switch');\n      var data = existingData || new BootstrapSwitch(next, option);\n      if (!existingData) {\n        $this.data('bootstrap-switch', data);\n      }\n      if (typeof option === 'string') {\n        return data[option].apply(data, args);\n      }\n      return ret;\n    }\n    return Array.prototype.reduce.call(this, reducer, this);\n  };\n  $.fn.bootstrapSwitch.Constructor = BootstrapSwitch;\n  $.fn.bootstrapSwitch.defaults = {\n    state: true,\n    size: null,\n    animate: true,\n    disabled: false,\n    readonly: false,\n    indeterminate: false,\n    inverse: false,\n    radioAllOff: false,\n    onColor: 'primary',\n    offColor: 'default',\n    onText: 'ON',\n    offText: 'OFF',\n    labelText: '&nbsp',\n    handleWidth: 'auto',\n    labelWidth: 'auto',\n    baseClass: 'bootstrap-switch',\n    wrapperClass: 'wrapper',\n    onInit: function onInit() {},\n    onSwitchChange: function onSwitchChange() {}\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/comment/comment.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var noOptions = {};\n  var nonWS = /[^\\s\\u00a0]/;\n  var Pos = CodeMirror.Pos, cmp = CodeMirror.cmpPos;\n\n  function firstNonWS(str) {\n    var found = str.search(nonWS);\n    return found == -1 ? 0 : found;\n  }\n\n  CodeMirror.commands.toggleComment = function(cm) {\n    cm.toggleComment();\n  };\n\n  CodeMirror.defineExtension(\"toggleComment\", function(options) {\n    if (!options) options = noOptions;\n    var cm = this;\n    var minLine = Infinity, ranges = this.listSelections(), mode = null;\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      if (from.line >= minLine) continue;\n      if (to.line >= minLine) to = Pos(minLine, 0);\n      minLine = from.line;\n      if (mode == null) {\n        if (cm.uncomment(from, to, options)) mode = \"un\";\n        else { cm.lineComment(from, to, options); mode = \"line\"; }\n      } else if (mode == \"un\") {\n        cm.uncomment(from, to, options);\n      } else {\n        cm.lineComment(from, to, options);\n      }\n    }\n  });\n\n  // Rough heuristic to try and detect lines that are part of multi-line string\n  function probablyInsideString(cm, pos, line) {\n    return /\\bstring\\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\\'\\\"\\`]/.test(line)\n  }\n\n  function getMode(cm, pos) {\n    var mode = cm.getMode()\n    return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos)\n  }\n\n  CodeMirror.defineExtension(\"lineComment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var firstLine = self.getLine(from.line);\n    if (firstLine == null || probablyInsideString(self, from, firstLine)) return;\n\n    var commentString = options.lineComment || mode.lineComment;\n    if (!commentString) {\n      if (options.blockCommentStart || mode.blockCommentStart) {\n        options.fullLines = true;\n        self.blockComment(from, to, options);\n      }\n      return;\n    }\n\n    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);\n    var pad = options.padding == null ? \" \" : options.padding;\n    var blankLines = options.commentBlankLines || from.line == to.line;\n\n    self.operation(function() {\n      if (options.indent) {\n        var baseString = null;\n        for (var i = from.line; i < end; ++i) {\n          var line = self.getLine(i);\n          var whitespace = line.slice(0, firstNonWS(line));\n          if (baseString == null || baseString.length > whitespace.length) {\n            baseString = whitespace;\n          }\n        }\n        for (var i = from.line; i < end; ++i) {\n          var line = self.getLine(i), cut = baseString.length;\n          if (!blankLines && !nonWS.test(line)) continue;\n          if (line.slice(0, cut) != baseString) cut = firstNonWS(line);\n          self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));\n        }\n      } else {\n        for (var i = from.line; i < end; ++i) {\n          if (blankLines || nonWS.test(self.getLine(i)))\n            self.replaceRange(commentString + pad, Pos(i, 0));\n        }\n      }\n    });\n  });\n\n  CodeMirror.defineExtension(\"blockComment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var startString = options.blockCommentStart || mode.blockCommentStart;\n    var endString = options.blockCommentEnd || mode.blockCommentEnd;\n    if (!startString || !endString) {\n      if ((options.lineComment || mode.lineComment) && options.fullLines != false)\n        self.lineComment(from, to, options);\n      return;\n    }\n    if (/\\bcomment\\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return\n\n    var end = Math.min(to.line, self.lastLine());\n    if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;\n\n    var pad = options.padding == null ? \" \" : options.padding;\n    if (from.line > end) return;\n\n    self.operation(function() {\n      if (options.fullLines != false) {\n        var lastLineHasText = nonWS.test(self.getLine(end));\n        self.replaceRange(pad + endString, Pos(end));\n        self.replaceRange(startString + pad, Pos(from.line, 0));\n        var lead = options.blockCommentLead || mode.blockCommentLead;\n        if (lead != null) for (var i = from.line + 1; i <= end; ++i)\n          if (i != end || lastLineHasText)\n            self.replaceRange(lead + pad, Pos(i, 0));\n      } else {\n        var atCursor = cmp(self.getCursor(\"to\"), to) == 0, empty = !self.somethingSelected()\n        self.replaceRange(endString, to);\n        if (atCursor) self.setSelection(empty ? to : self.getCursor(\"from\"), to)\n        self.replaceRange(startString, from);\n      }\n    });\n  });\n\n  CodeMirror.defineExtension(\"uncomment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);\n\n    // Try finding line comments\n    var lineString = options.lineComment || mode.lineComment, lines = [];\n    var pad = options.padding == null ? \" \" : options.padding, didSomething;\n    lineComment: {\n      if (!lineString) break lineComment;\n      for (var i = start; i <= end; ++i) {\n        var line = self.getLine(i);\n        var found = line.indexOf(lineString);\n        if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;\n        if (found == -1 && nonWS.test(line)) break lineComment;\n        if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;\n        lines.push(line);\n      }\n      self.operation(function() {\n        for (var i = start; i <= end; ++i) {\n          var line = lines[i - start];\n          var pos = line.indexOf(lineString), endPos = pos + lineString.length;\n          if (pos < 0) continue;\n          if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;\n          didSomething = true;\n          self.replaceRange(\"\", Pos(i, pos), Pos(i, endPos));\n        }\n      });\n      if (didSomething) return true;\n    }\n\n    // Try block comments\n    var startString = options.blockCommentStart || mode.blockCommentStart;\n    var endString = options.blockCommentEnd || mode.blockCommentEnd;\n    if (!startString || !endString) return false;\n    var lead = options.blockCommentLead || mode.blockCommentLead;\n    var startLine = self.getLine(start), open = startLine.indexOf(startString)\n    if (open == -1) return false\n    var endLine = end == start ? startLine : self.getLine(end)\n    var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);\n    var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1)\n    if (close == -1 ||\n        !/comment/.test(self.getTokenTypeAt(insideStart)) ||\n        !/comment/.test(self.getTokenTypeAt(insideEnd)) ||\n        self.getRange(insideStart, insideEnd, \"\\n\").indexOf(endString) > -1)\n      return false;\n\n    // Avoid killing block comments completely outside the selection.\n    // Positions of the last startString before the start of the selection, and the first endString after it.\n    var lastStart = startLine.lastIndexOf(startString, from.ch);\n    var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);\n    if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;\n    // Positions of the first endString after the end of the selection, and the last startString before it.\n    firstEnd = endLine.indexOf(endString, to.ch);\n    var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);\n    lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;\n    if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;\n\n    self.operation(function() {\n      self.replaceRange(\"\", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),\n                        Pos(end, close + endString.length));\n      var openEnd = open + startString.length;\n      if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;\n      self.replaceRange(\"\", Pos(start, open), Pos(start, openEnd));\n      if (lead) for (var i = start + 1; i <= end; ++i) {\n        var line = self.getLine(i), found = line.indexOf(lead);\n        if (found == -1 || nonWS.test(line.slice(0, found))) continue;\n        var foundEnd = found + lead.length;\n        if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;\n        self.replaceRange(\"\", Pos(i, found), Pos(i, foundEnd));\n      }\n    });\n    return true;\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/comment/continuecomment.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var nonspace = /\\S/g;\n  var repeat = String.prototype.repeat || function (n) { return Array(n + 1).join(this); };\n  function continueComment(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), mode, inserts = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var pos = ranges[i].head\n      if (!/\\bcomment\\b/.test(cm.getTokenTypeAt(pos))) return CodeMirror.Pass;\n      var modeHere = cm.getModeAt(pos)\n      if (!mode) mode = modeHere;\n      else if (mode != modeHere) return CodeMirror.Pass;\n\n      var insert = null, line, found;\n      var blockStart = mode.blockCommentStart, lineCmt = mode.lineComment;\n      if (blockStart && mode.blockCommentContinue) {\n        line = cm.getLine(pos.line);\n        var end = line.lastIndexOf(mode.blockCommentEnd, pos.ch - mode.blockCommentEnd.length);\n        // 1. if this block comment ended\n        // 2. if this is actually inside a line comment\n        if (end != -1 && end == pos.ch - mode.blockCommentEnd.length ||\n            lineCmt && (found = line.lastIndexOf(lineCmt, pos.ch - 1)) > -1 &&\n            /\\bcomment\\b/.test(cm.getTokenTypeAt({line: pos.line, ch: found + 1}))) {\n          // ...then don't continue it\n        } else if (pos.ch >= blockStart.length &&\n                   (found = line.lastIndexOf(blockStart, pos.ch - blockStart.length)) > -1 &&\n                   found > end) {\n          // reuse the existing leading spaces/tabs/mixed\n          // or build the correct indent using CM's tab/indent options\n          if (nonspaceAfter(0, line) >= found) {\n            insert = line.slice(0, found);\n          } else {\n            var tabSize = cm.options.tabSize, numTabs;\n            found = CodeMirror.countColumn(line, found, tabSize);\n            insert = !cm.options.indentWithTabs ? repeat.call(\" \", found) :\n              repeat.call(\"\\t\", (numTabs = Math.floor(found / tabSize))) +\n              repeat.call(\" \", found - tabSize * numTabs);\n          }\n        } else if ((found = line.indexOf(mode.blockCommentContinue)) > -1 &&\n                   found <= pos.ch &&\n                   found <= nonspaceAfter(0, line)) {\n          insert = line.slice(0, found);\n        }\n        if (insert != null) insert += mode.blockCommentContinue\n      }\n      if (insert == null && lineCmt && continueLineCommentEnabled(cm)) {\n        if (line == null) line = cm.getLine(pos.line);\n        found = line.indexOf(lineCmt);\n        // cursor at pos 0, line comment also at pos 0 => shift it down, don't continue\n        if (!pos.ch && !found) insert = \"\";\n        // continue only if the line starts with an optional space + line comment\n        else if (found > -1 && nonspaceAfter(0, line) >= found) {\n          // don't continue if there's only space(s) after cursor or the end of the line\n          insert = nonspaceAfter(pos.ch, line) > -1;\n          // but always continue if the next line starts with a line comment too\n          if (!insert) {\n            var next = cm.getLine(pos.line + 1) || '',\n                nextFound = next.indexOf(lineCmt);\n            insert = nextFound > -1 && nonspaceAfter(0, next) >= nextFound || null;\n          }\n          if (insert) {\n            insert = line.slice(0, found) + lineCmt +\n                     line.slice(found + lineCmt.length).match(/^\\s*/)[0];\n          }\n        }\n      }\n      if (insert == null) return CodeMirror.Pass;\n      inserts[i] = \"\\n\" + insert;\n    }\n\n    cm.operation(function() {\n      for (var i = ranges.length - 1; i >= 0; i--)\n        cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), \"+insert\");\n    });\n  }\n\n  function nonspaceAfter(ch, str) {\n    nonspace.lastIndex = ch;\n    var m = nonspace.exec(str);\n    return m ? m.index : -1;\n  }\n\n  function continueLineCommentEnabled(cm) {\n    var opt = cm.getOption(\"continueComments\");\n    if (opt && typeof opt == \"object\")\n      return opt.continueLineComment !== false;\n    return true;\n  }\n\n  CodeMirror.defineOption(\"continueComments\", null, function(cm, val, prev) {\n    if (prev && prev != CodeMirror.Init)\n      cm.removeKeyMap(\"continueComment\");\n    if (val) {\n      var key = \"Enter\";\n      if (typeof val == \"string\")\n        key = val;\n      else if (typeof val == \"object\" && val.key)\n        key = val.key;\n      var map = {name: \"continueComment\"};\n      map[key] = continueComment;\n      cm.addKeyMap(map);\n    }\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/dialog/dialog.css",
    "content": ".CodeMirror-dialog {\n  position: absolute;\n  left: 0; right: 0;\n  background: inherit;\n  z-index: 15;\n  padding: .1em .8em;\n  overflow: hidden;\n  color: inherit;\n}\n\n.CodeMirror-dialog-top {\n  border-bottom: 1px solid #eee;\n  top: 0;\n}\n\n.CodeMirror-dialog-bottom {\n  border-top: 1px solid #eee;\n  bottom: 0;\n}\n\n.CodeMirror-dialog input {\n  border: none;\n  outline: none;\n  background: transparent;\n  width: 20em;\n  color: inherit;\n  font-family: monospace;\n}\n\n.CodeMirror-dialog button {\n  font-size: 70%;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/addon/dialog/dialog.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Open simple dialogs on top of an editor. Relies on dialog.css.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  function dialogDiv(cm, template, bottom) {\n    var wrap = cm.getWrapperElement();\n    var dialog;\n    dialog = wrap.appendChild(document.createElement(\"div\"));\n    if (bottom)\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-bottom\";\n    else\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-top\";\n\n    if (typeof template == \"string\") {\n      dialog.innerHTML = template;\n    } else { // Assuming it's a detached DOM element.\n      dialog.appendChild(template);\n    }\n    CodeMirror.addClass(wrap, 'dialog-opened');\n    return dialog;\n  }\n\n  function closeNotification(cm, newVal) {\n    if (cm.state.currentNotificationClose)\n      cm.state.currentNotificationClose();\n    cm.state.currentNotificationClose = newVal;\n  }\n\n  CodeMirror.defineExtension(\"openDialog\", function(template, callback, options) {\n    if (!options) options = {};\n\n    closeNotification(this, null);\n\n    var dialog = dialogDiv(this, template, options.bottom);\n    var closed = false, me = this;\n    function close(newVal) {\n      if (typeof newVal == 'string') {\n        inp.value = newVal;\n      } else {\n        if (closed) return;\n        closed = true;\n        CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n        dialog.parentNode.removeChild(dialog);\n        me.focus();\n\n        if (options.onClose) options.onClose(dialog);\n      }\n    }\n\n    var inp = dialog.getElementsByTagName(\"input\")[0], button;\n    if (inp) {\n      inp.focus();\n\n      if (options.value) {\n        inp.value = options.value;\n        if (options.selectValueOnOpen !== false) {\n          inp.select();\n        }\n      }\n\n      if (options.onInput)\n        CodeMirror.on(inp, \"input\", function(e) { options.onInput(e, inp.value, close);});\n      if (options.onKeyUp)\n        CodeMirror.on(inp, \"keyup\", function(e) {options.onKeyUp(e, inp.value, close);});\n\n      CodeMirror.on(inp, \"keydown\", function(e) {\n        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }\n        if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n          inp.blur();\n          CodeMirror.e_stop(e);\n          close();\n        }\n        if (e.keyCode == 13) callback(inp.value, e);\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(dialog, \"focusout\", function (evt) {\n        if (evt.relatedTarget !== null) close();\n      });\n    } else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n      CodeMirror.on(button, \"click\", function() {\n        close();\n        me.focus();\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(button, \"blur\", close);\n\n      button.focus();\n    }\n    return close;\n  });\n\n  CodeMirror.defineExtension(\"openConfirm\", function(template, callbacks, options) {\n    closeNotification(this, null);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var buttons = dialog.getElementsByTagName(\"button\");\n    var closed = false, me = this, blurring = 1;\n    function close() {\n      if (closed) return;\n      closed = true;\n      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n      dialog.parentNode.removeChild(dialog);\n      me.focus();\n    }\n    buttons[0].focus();\n    for (var i = 0; i < buttons.length; ++i) {\n      var b = buttons[i];\n      (function(callback) {\n        CodeMirror.on(b, \"click\", function(e) {\n          CodeMirror.e_preventDefault(e);\n          close();\n          if (callback) callback(me);\n        });\n      })(callbacks[i]);\n      CodeMirror.on(b, \"blur\", function() {\n        --blurring;\n        setTimeout(function() { if (blurring <= 0) close(); }, 200);\n      });\n      CodeMirror.on(b, \"focus\", function() { ++blurring; });\n    }\n  });\n\n  /*\n   * openNotification\n   * Opens a notification, that can be closed with an optional timer\n   * (default 5000ms timer) and always closes on click.\n   *\n   * If a notification is opened while another is opened, it will close the\n   * currently opened one and open the new one immediately.\n   */\n  CodeMirror.defineExtension(\"openNotification\", function(template, options) {\n    closeNotification(this, close);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var closed = false, doneTimer;\n    var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n\n    function close() {\n      if (closed) return;\n      closed = true;\n      clearTimeout(doneTimer);\n      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n      dialog.parentNode.removeChild(dialog);\n    }\n\n    CodeMirror.on(dialog, 'click', function(e) {\n      CodeMirror.e_preventDefault(e);\n      close();\n    });\n\n    if (duration)\n      doneTimer = setTimeout(close, duration);\n\n    return close;\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/display/autorefresh.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"))\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod)\n  else // Plain browser env\n    mod(CodeMirror)\n})(function(CodeMirror) {\n  \"use strict\"\n\n  CodeMirror.defineOption(\"autoRefresh\", false, function(cm, val) {\n    if (cm.state.autoRefresh) {\n      stopListening(cm, cm.state.autoRefresh)\n      cm.state.autoRefresh = null\n    }\n    if (val && cm.display.wrapper.offsetHeight == 0)\n      startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})\n  })\n\n  function startListening(cm, state) {\n    function check() {\n      if (cm.display.wrapper.offsetHeight) {\n        stopListening(cm, state)\n        if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)\n          cm.refresh()\n      } else {\n        state.timeout = setTimeout(check, state.delay)\n      }\n    }\n    state.timeout = setTimeout(check, state.delay)\n    state.hurry = function() {\n      clearTimeout(state.timeout)\n      state.timeout = setTimeout(check, 50)\n    }\n    CodeMirror.on(window, \"mouseup\", state.hurry)\n    CodeMirror.on(window, \"keyup\", state.hurry)\n  }\n\n  function stopListening(_cm, state) {\n    clearTimeout(state.timeout)\n    CodeMirror.off(window, \"mouseup\", state.hurry)\n    CodeMirror.off(window, \"keyup\", state.hurry)\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/display/fullscreen.css",
    "content": ".CodeMirror-fullscreen {\n  position: fixed;\n  top: 0; left: 0; right: 0; bottom: 0;\n  height: auto;\n  z-index: 9;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/addon/display/fullscreen.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"fullScreen\", false, function(cm, val, old) {\n    if (old == CodeMirror.Init) old = false;\n    if (!old == !val) return;\n    if (val) setFullscreen(cm);\n    else setNormal(cm);\n  });\n\n  function setFullscreen(cm) {\n    var wrap = cm.getWrapperElement();\n    cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,\n                                  width: wrap.style.width, height: wrap.style.height};\n    wrap.style.width = \"\";\n    wrap.style.height = \"auto\";\n    wrap.className += \" CodeMirror-fullscreen\";\n    document.documentElement.style.overflow = \"hidden\";\n    cm.refresh();\n  }\n\n  function setNormal(cm) {\n    var wrap = cm.getWrapperElement();\n    wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n    document.documentElement.style.overflow = \"\";\n    var info = cm.state.fullScreenRestore;\n    wrap.style.width = info.width; wrap.style.height = info.height;\n    window.scrollTo(info.scrollLeft, info.scrollTop);\n    cm.refresh();\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/display/panel.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function (mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function (CodeMirror) {\n  CodeMirror.defineExtension(\"addPanel\", function (node, options) {\n    options = options || {};\n\n    if (!this.state.panels) initPanels(this);\n\n    var info = this.state.panels;\n    var wrapper = info.wrapper;\n    var cmWrapper = this.getWrapperElement();\n    var replace = options.replace instanceof Panel && !options.replace.cleared;\n\n    if (options.after instanceof Panel && !options.after.cleared) {\n      wrapper.insertBefore(node, options.before.node.nextSibling);\n    } else if (options.before instanceof Panel && !options.before.cleared) {\n      wrapper.insertBefore(node, options.before.node);\n    } else if (replace) {\n      wrapper.insertBefore(node, options.replace.node);\n      options.replace.clear(true);\n    } else if (options.position == \"bottom\") {\n      wrapper.appendChild(node);\n    } else if (options.position == \"before-bottom\") {\n      wrapper.insertBefore(node, cmWrapper.nextSibling);\n    } else if (options.position == \"after-top\") {\n      wrapper.insertBefore(node, cmWrapper);\n    } else {\n      wrapper.insertBefore(node, wrapper.firstChild);\n    }\n\n    var height = (options && options.height) || node.offsetHeight;\n\n    var panel = new Panel(this, node, options, height);\n    info.panels.push(panel);\n\n    this.setSize();\n    if (options.stable && isAtTop(this, node))\n      this.scrollTo(null, this.getScrollInfo().top + height);\n\n    return panel;\n  });\n\n  function Panel(cm, node, options, height) {\n    this.cm = cm;\n    this.node = node;\n    this.options = options;\n    this.height = height;\n    this.cleared = false;\n  }\n\n  /* when skipRemove is true, clear() was called from addPanel().\n   * Thus removePanels() should not be called (issue 5518) */\n  Panel.prototype.clear = function (skipRemove) {\n    if (this.cleared) return;\n    this.cleared = true;\n    var info = this.cm.state.panels;\n    info.panels.splice(info.panels.indexOf(this), 1);\n    this.cm.setSize();\n    if (this.options.stable && isAtTop(this.cm, this.node))\n      this.cm.scrollTo(null, this.cm.getScrollInfo().top - this.height)\n    info.wrapper.removeChild(this.node);\n    if (info.panels.length == 0 && !skipRemove) removePanels(this.cm);\n  };\n\n  Panel.prototype.changed = function () {\n    this.height = this.node.getBoundingClientRect().height;\n    this.cm.setSize();\n  };\n\n  function initPanels(cm) {\n    var wrap = cm.getWrapperElement()\n    var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle;\n    var height = parseInt(style.height);\n    var info = cm.state.panels = {\n      setHeight: wrap.style.height,\n      panels: [],\n      wrapper: document.createElement(\"div\")\n    };\n    var hasFocus = cm.hasFocus(), scrollPos = cm.getScrollInfo()\n    wrap.parentNode.insertBefore(info.wrapper, wrap);\n    info.wrapper.appendChild(wrap);\n    cm.scrollTo(scrollPos.left, scrollPos.top)\n    if (hasFocus) cm.focus();\n\n    cm._setSize = cm.setSize;\n    if (height != null) cm.setSize = function (width, newHeight) {\n      if (!newHeight) newHeight = info.wrapper.offsetHeight;\n      info.setHeight = newHeight;\n      if (typeof newHeight != \"number\") {\n        var px = /^(\\d+\\.?\\d*)px$/.exec(newHeight);\n        if (px) {\n          newHeight = Number(px[1]);\n        } else {\n          info.wrapper.style.height = newHeight;\n          newHeight = info.wrapper.offsetHeight;\n        }\n      }\n      var editorheight = newHeight - info.panels\n        .map(function (p) { return p.node.getBoundingClientRect().height; })\n        .reduce(function (a, b) { return a + b; }, 0);\n      cm._setSize(width, editorheight);\n      height = newHeight;\n    };\n  }\n\n  function removePanels(cm) {\n    var info = cm.state.panels;\n    cm.state.panels = null;\n\n    var wrap = cm.getWrapperElement()\n    var hasFocus = cm.hasFocus(), scrollPos = cm.getScrollInfo()\n    info.wrapper.parentNode.replaceChild(wrap, info.wrapper);\n    cm.scrollTo(scrollPos.left, scrollPos.top)\n    if (hasFocus) cm.focus();\n    wrap.style.height = info.setHeight;\n    cm.setSize = cm._setSize;\n    cm.setSize();\n  }\n\n  function isAtTop(cm, dom) {\n    for (var sibling = dom.nextSibling; sibling; sibling = sibling.nextSibling)\n      if (sibling == cm.getWrapperElement()) return true\n    return false\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/display/placeholder.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n    var prev = old && old != CodeMirror.Init;\n    if (val && !prev) {\n      cm.on(\"blur\", onBlur);\n      cm.on(\"change\", onChange);\n      cm.on(\"swapDoc\", onChange);\n      CodeMirror.on(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose = function() { onComposition(cm) })\n      onChange(cm);\n    } else if (!val && prev) {\n      cm.off(\"blur\", onBlur);\n      cm.off(\"change\", onChange);\n      cm.off(\"swapDoc\", onChange);\n      CodeMirror.off(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose)\n      clearPlaceholder(cm);\n      var wrapper = cm.getWrapperElement();\n      wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n    }\n\n    if (val && !cm.hasFocus()) onBlur(cm);\n  });\n\n  function clearPlaceholder(cm) {\n    if (cm.state.placeholder) {\n      cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n      cm.state.placeholder = null;\n    }\n  }\n  function setPlaceholder(cm) {\n    clearPlaceholder(cm);\n    var elt = cm.state.placeholder = document.createElement(\"pre\");\n    elt.style.cssText = \"height: 0; overflow: visible\";\n    elt.style.direction = cm.getOption(\"direction\");\n    elt.className = \"CodeMirror-placeholder CodeMirror-line-like\";\n    var placeHolder = cm.getOption(\"placeholder\")\n    if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n    elt.appendChild(placeHolder)\n    cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n  }\n\n  function onComposition(cm) {\n    setTimeout(function() {\n      var empty = false\n      if (cm.lineCount() == 1) {\n        var input = cm.getInputField()\n        empty = input.nodeName == \"TEXTAREA\" ? !cm.getLine(0).length\n          : !/[^\\u200b]/.test(input.querySelector(\".CodeMirror-line\").textContent)\n      }\n      if (empty) setPlaceholder(cm)\n      else clearPlaceholder(cm)\n    }, 20)\n  }\n\n  function onBlur(cm) {\n    if (isEmpty(cm)) setPlaceholder(cm);\n  }\n  function onChange(cm) {\n    var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n    wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n    if (empty) setPlaceholder(cm);\n    else clearPlaceholder(cm);\n  }\n\n  function isEmpty(cm) {\n    return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/display/rulers.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"rulers\", false, function(cm, val) {\n    if (cm.state.rulerDiv) {\n      cm.state.rulerDiv.parentElement.removeChild(cm.state.rulerDiv)\n      cm.state.rulerDiv = null\n      cm.off(\"refresh\", drawRulers)\n    }\n    if (val && val.length) {\n      cm.state.rulerDiv = cm.display.lineSpace.parentElement.insertBefore(document.createElement(\"div\"), cm.display.lineSpace)\n      cm.state.rulerDiv.className = \"CodeMirror-rulers\"\n      drawRulers(cm)\n      cm.on(\"refresh\", drawRulers)\n    }\n  });\n\n  function drawRulers(cm) {\n    cm.state.rulerDiv.textContent = \"\"\n    var val = cm.getOption(\"rulers\");\n    var cw = cm.defaultCharWidth();\n    var left = cm.charCoords(CodeMirror.Pos(cm.firstLine(), 0), \"div\").left;\n    cm.state.rulerDiv.style.minHeight = (cm.display.scroller.offsetHeight + 30) + \"px\";\n    for (var i = 0; i < val.length; i++) {\n      var elt = document.createElement(\"div\");\n      elt.className = \"CodeMirror-ruler\";\n      var col, conf = val[i];\n      if (typeof conf == \"number\") {\n        col = conf;\n      } else {\n        col = conf.column;\n        if (conf.className) elt.className += \" \" + conf.className;\n        if (conf.color) elt.style.borderColor = conf.color;\n        if (conf.lineStyle) elt.style.borderLeftStyle = conf.lineStyle;\n        if (conf.width) elt.style.borderLeftWidth = conf.width;\n      }\n      elt.style.left = (left + col * cw) + \"px\";\n      cm.state.rulerDiv.appendChild(elt)\n    }\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/edit/closebrackets.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var defaults = {\n    pairs: \"()[]{}''\\\"\\\"\",\n    closeBefore: \")]}'\\\":;>\",\n    triples: \"\",\n    explode: \"[]{}\"\n  };\n\n  var Pos = CodeMirror.Pos;\n\n  CodeMirror.defineOption(\"autoCloseBrackets\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.removeKeyMap(keyMap);\n      cm.state.closeBrackets = null;\n    }\n    if (val) {\n      ensureBound(getOption(val, \"pairs\"))\n      cm.state.closeBrackets = val;\n      cm.addKeyMap(keyMap);\n    }\n  });\n\n  function getOption(conf, name) {\n    if (name == \"pairs\" && typeof conf == \"string\") return conf;\n    if (typeof conf == \"object\" && conf[name] != null) return conf[name];\n    return defaults[name];\n  }\n\n  var keyMap = {Backspace: handleBackspace, Enter: handleEnter};\n  function ensureBound(chars) {\n    for (var i = 0; i < chars.length; i++) {\n      var ch = chars.charAt(i), key = \"'\" + ch + \"'\"\n      if (!keyMap[key]) keyMap[key] = handler(ch)\n    }\n  }\n  ensureBound(defaults.pairs + \"`\")\n\n  function handler(ch) {\n    return function(cm) { return handleChar(cm, ch); };\n  }\n\n  function getConfig(cm) {\n    var deflt = cm.state.closeBrackets;\n    if (!deflt || deflt.override) return deflt;\n    var mode = cm.getModeAt(cm.getCursor());\n    return mode.closeBrackets || deflt;\n  }\n\n  function handleBackspace(cm) {\n    var conf = getConfig(cm);\n    if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n    var pairs = getOption(conf, \"pairs\");\n    var ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) return CodeMirror.Pass;\n      var around = charsAround(cm, ranges[i].head);\n      if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass;\n    }\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var cur = ranges[i].head;\n      cm.replaceRange(\"\", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), \"+delete\");\n    }\n  }\n\n  function handleEnter(cm) {\n    var conf = getConfig(cm);\n    var explode = conf && getOption(conf, \"explode\");\n    if (!explode || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n    var ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) return CodeMirror.Pass;\n      var around = charsAround(cm, ranges[i].head);\n      if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass;\n    }\n    cm.operation(function() {\n      var linesep = cm.lineSeparator() || \"\\n\";\n      cm.replaceSelection(linesep + linesep, null);\n      moveSel(cm, -1)\n      ranges = cm.listSelections();\n      for (var i = 0; i < ranges.length; i++) {\n        var line = ranges[i].head.line;\n        cm.indentLine(line, null, true);\n        cm.indentLine(line + 1, null, true);\n      }\n    });\n  }\n\n  function moveSel(cm, dir) {\n    var newRanges = [], ranges = cm.listSelections(), primary = 0\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i]\n      if (range.head == cm.getCursor()) primary = i\n      var pos = range.head.ch || dir > 0 ? {line: range.head.line, ch: range.head.ch + dir} : {line: range.head.line - 1}\n      newRanges.push({anchor: pos, head: pos})\n    }\n    cm.setSelections(newRanges, primary)\n  }\n\n  function contractSelection(sel) {\n    var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0;\n    return {anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)),\n            head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1))};\n  }\n\n  function handleChar(cm, ch) {\n    var conf = getConfig(cm);\n    if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n    var pairs = getOption(conf, \"pairs\");\n    var pos = pairs.indexOf(ch);\n    if (pos == -1) return CodeMirror.Pass;\n\n    var closeBefore = getOption(conf,\"closeBefore\");\n\n    var triples = getOption(conf, \"triples\");\n\n    var identical = pairs.charAt(pos + 1) == ch;\n    var ranges = cm.listSelections();\n    var opening = pos % 2 == 0;\n\n    var type;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], cur = range.head, curType;\n      var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1));\n      if (opening && !range.empty()) {\n        curType = \"surround\";\n      } else if ((identical || !opening) && next == ch) {\n        if (identical && stringStartsAfter(cm, cur))\n          curType = \"both\";\n        else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch)\n          curType = \"skipThree\";\n        else\n          curType = \"skip\";\n      } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 &&\n                 cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) {\n        if (cur.ch > 2 && /\\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass;\n        curType = \"addFour\";\n      } else if (identical) {\n        var prev = cur.ch == 0 ? \" \" : cm.getRange(Pos(cur.line, cur.ch - 1), cur)\n        if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = \"both\";\n        else return CodeMirror.Pass;\n      } else if (opening && (next.length === 0 || /\\s/.test(next) || closeBefore.indexOf(next) > -1)) {\n        curType = \"both\";\n      } else {\n        return CodeMirror.Pass;\n      }\n      if (!type) type = curType;\n      else if (type != curType) return CodeMirror.Pass;\n    }\n\n    var left = pos % 2 ? pairs.charAt(pos - 1) : ch;\n    var right = pos % 2 ? ch : pairs.charAt(pos + 1);\n    cm.operation(function() {\n      if (type == \"skip\") {\n        moveSel(cm, 1)\n      } else if (type == \"skipThree\") {\n        moveSel(cm, 3)\n      } else if (type == \"surround\") {\n        var sels = cm.getSelections();\n        for (var i = 0; i < sels.length; i++)\n          sels[i] = left + sels[i] + right;\n        cm.replaceSelections(sels, \"around\");\n        sels = cm.listSelections().slice();\n        for (var i = 0; i < sels.length; i++)\n          sels[i] = contractSelection(sels[i]);\n        cm.setSelections(sels);\n      } else if (type == \"both\") {\n        cm.replaceSelection(left + right, null);\n        cm.triggerElectric(left + right);\n        moveSel(cm, -1)\n      } else if (type == \"addFour\") {\n        cm.replaceSelection(left + left + left + left, \"before\");\n        moveSel(cm, 1)\n      }\n    });\n  }\n\n  function charsAround(cm, pos) {\n    var str = cm.getRange(Pos(pos.line, pos.ch - 1),\n                          Pos(pos.line, pos.ch + 1));\n    return str.length == 2 ? str : null;\n  }\n\n  function stringStartsAfter(cm, pos) {\n    var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1))\n    return /\\bstring/.test(token.type) && token.start == pos.ch &&\n      (pos.ch == 0 || !/\\bstring/.test(cm.getTokenTypeAt(pos)))\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/edit/closetag.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n/**\n * Tag-closer extension for CodeMirror.\n *\n * This extension adds an \"autoCloseTags\" option that can be set to\n * either true to get the default behavior, or an object to further\n * configure its behavior.\n *\n * These are supported options:\n *\n * `whenClosing` (default true)\n *   Whether to autoclose when the '/' of a closing tag is typed.\n * `whenOpening` (default true)\n *   Whether to autoclose the tag when the final '>' of an opening\n *   tag is typed.\n * `dontCloseTags` (default is empty tags for HTML, none for XML)\n *   An array of tag names that should not be autoclosed.\n * `indentTags` (default is block tags for HTML, none for XML)\n *   An array of tag names that should, when opened, cause a\n *   blank line to be added inside the tag, and the blank line and\n *   closing line to be indented.\n * `emptyTags` (default is none)\n *   An array of XML tag names that should be autoclosed with '/>'.\n *\n * See demos/closetag.html for a usage example.\n */\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  CodeMirror.defineOption(\"autoCloseTags\", false, function(cm, val, old) {\n    if (old != CodeMirror.Init && old)\n      cm.removeKeyMap(\"autoCloseTags\");\n    if (!val) return;\n    var map = {name: \"autoCloseTags\"};\n    if (typeof val != \"object\" || val.whenClosing !== false)\n      map[\"'/'\"] = function(cm) { return autoCloseSlash(cm); };\n    if (typeof val != \"object\" || val.whenOpening !== false)\n      map[\"'>'\"] = function(cm) { return autoCloseGT(cm); };\n    cm.addKeyMap(map);\n  });\n\n  var htmlDontClose = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\",\n                       \"source\", \"track\", \"wbr\"];\n  var htmlIndent = [\"applet\", \"blockquote\", \"body\", \"button\", \"div\", \"dl\", \"fieldset\", \"form\", \"frameset\", \"h1\", \"h2\", \"h3\", \"h4\",\n                    \"h5\", \"h6\", \"head\", \"html\", \"iframe\", \"layer\", \"legend\", \"object\", \"ol\", \"p\", \"select\", \"table\", \"ul\"];\n\n  function autoCloseGT(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), replacements = [];\n    var opt = cm.getOption(\"autoCloseTags\");\n    for (var i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) return CodeMirror.Pass;\n      var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n      var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n      var tagInfo = inner.mode.xmlCurrentTag && inner.mode.xmlCurrentTag(state)\n      var tagName = tagInfo && tagInfo.name\n      if (!tagName) return CodeMirror.Pass\n\n      var html = inner.mode.configuration == \"html\";\n      var dontCloseTags = (typeof opt == \"object\" && opt.dontCloseTags) || (html && htmlDontClose);\n      var indentTags = (typeof opt == \"object\" && opt.indentTags) || (html && htmlIndent);\n\n      if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch);\n      var lowerTagName = tagName.toLowerCase();\n      // Don't process the '>' at the end of an end-tag or self-closing tag\n      if (!tagName ||\n          tok.type == \"string\" && (tok.end != pos.ch || !/[\\\"\\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) ||\n          tok.type == \"tag\" && tagInfo.close ||\n          tok.string.indexOf(\"/\") == (pos.ch - tok.start - 1) || // match something like <someTagName />\n          dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 ||\n          closingTagExists(cm, inner.mode.xmlCurrentContext && inner.mode.xmlCurrentContext(state) || [], tagName, pos, true))\n        return CodeMirror.Pass;\n\n      var emptyTags = typeof opt == \"object\" && opt.emptyTags;\n      if (emptyTags && indexOf(emptyTags, tagName) > -1) {\n        replacements[i] = { text: \"/>\", newPos: CodeMirror.Pos(pos.line, pos.ch + 2) };\n        continue;\n      }\n\n      var indent = indentTags && indexOf(indentTags, lowerTagName) > -1;\n      replacements[i] = {indent: indent,\n                         text: \">\" + (indent ? \"\\n\\n\" : \"\") + \"</\" + tagName + \">\",\n                         newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)};\n    }\n\n    var dontIndentOnAutoClose = (typeof opt == \"object\" && opt.dontIndentOnAutoClose);\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var info = replacements[i];\n      cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, \"+insert\");\n      var sel = cm.listSelections().slice(0);\n      sel[i] = {head: info.newPos, anchor: info.newPos};\n      cm.setSelections(sel);\n      if (!dontIndentOnAutoClose && info.indent) {\n        cm.indentLine(info.newPos.line, null, true);\n        cm.indentLine(info.newPos.line + 1, null, true);\n      }\n    }\n  }\n\n  function autoCloseCurrent(cm, typingSlash) {\n    var ranges = cm.listSelections(), replacements = [];\n    var head = typingSlash ? \"/\" : \"</\";\n    var opt = cm.getOption(\"autoCloseTags\");\n    var dontIndentOnAutoClose = (typeof opt == \"object\" && opt.dontIndentOnSlash);\n    for (var i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) return CodeMirror.Pass;\n      var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n      var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n      if (typingSlash && (tok.type == \"string\" || tok.string.charAt(0) != \"<\" ||\n                          tok.start != pos.ch - 1))\n        return CodeMirror.Pass;\n      // Kludge to get around the fact that we are not in XML mode\n      // when completing in JS/CSS snippet in htmlmixed mode. Does not\n      // work for other XML embedded languages (there is no general\n      // way to go from a mixed mode to its current XML state).\n      var replacement, mixed = inner.mode.name != \"xml\" && cm.getMode().name == \"htmlmixed\"\n      if (mixed && inner.mode.name == \"javascript\") {\n        replacement = head + \"script\";\n      } else if (mixed && inner.mode.name == \"css\") {\n        replacement = head + \"style\";\n      } else {\n        var context = inner.mode.xmlCurrentContext && inner.mode.xmlCurrentContext(state)\n        var top = context.length ? context[context.length - 1] : \"\"\n        if (!context || (context.length && closingTagExists(cm, context, top, pos)))\n          return CodeMirror.Pass;\n        replacement = head + top\n      }\n      if (cm.getLine(pos.line).charAt(tok.end) != \">\") replacement += \">\";\n      replacements[i] = replacement;\n    }\n    cm.replaceSelections(replacements);\n    ranges = cm.listSelections();\n    if (!dontIndentOnAutoClose) {\n        for (var i = 0; i < ranges.length; i++)\n            if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line)\n                cm.indentLine(ranges[i].head.line);\n    }\n  }\n\n  function autoCloseSlash(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    return autoCloseCurrent(cm, true);\n  }\n\n  CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); };\n\n  function indexOf(collection, elt) {\n    if (collection.indexOf) return collection.indexOf(elt);\n    for (var i = 0, e = collection.length; i < e; ++i)\n      if (collection[i] == elt) return i;\n    return -1;\n  }\n\n  // If xml-fold is loaded, we use its functionality to try and verify\n  // whether a given tag is actually unclosed.\n  function closingTagExists(cm, context, tagName, pos, newTag) {\n    if (!CodeMirror.scanForClosingTag) return false;\n    var end = Math.min(cm.lastLine() + 1, pos.line + 500);\n    var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end);\n    if (!nextClose || nextClose.tag != tagName) return false;\n    // If the immediate wrapping context contains onCx instances of\n    // the same tag, a closing tag only exists if there are at least\n    // that many closing tags of that type following.\n    var onCx = newTag ? 1 : 0\n    for (var i = context.length - 1; i >= 0; i--) {\n      if (context[i] == tagName) ++onCx\n      else break\n    }\n    pos = nextClose.to;\n    for (var i = 1; i < onCx; i++) {\n      var next = CodeMirror.scanForClosingTag(cm, pos, null, end);\n      if (!next || next.tag != tagName) return false;\n      pos = next.to;\n    }\n    return true;\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/edit/continuelist.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n      emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n      unorderedListRE = /[*+-]\\s/;\n\n  CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), replacements = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var pos = ranges[i].head;\n\n      // If we're not in Markdown mode, fall back to normal newlineAndIndent\n      var eolState = cm.getStateAfter(pos.line);\n      var inner = CodeMirror.innerMode(cm.getMode(), eolState);\n      if (inner.mode.name !== \"markdown\") {\n        cm.execCommand(\"newlineAndIndent\");\n        return;\n      } else {\n        eolState = inner.state;\n      }\n\n      var inList = eolState.list !== false;\n      var inQuote = eolState.quote !== 0;\n\n      var line = cm.getLine(pos.line), match = listRE.exec(line);\n      var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n      if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n        cm.execCommand(\"newlineAndIndent\");\n        return;\n      }\n      if (emptyListRE.test(line)) {\n        var endOfQuote = inQuote && />\\s*$/.test(line)\n        var endOfList = !/>\\s*$/.test(line)\n        if (endOfQuote || endOfList) cm.replaceRange(\"\", {\n          line: pos.line, ch: 0\n        }, {\n          line: pos.line, ch: pos.ch + 1\n        });\n        replacements[i] = \"\\n\";\n      } else {\n        var indent = match[1], after = match[5];\n        var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0);\n        var bullet = numbered ? (parseInt(match[3], 10) + 1) + match[4] : match[2].replace(\"x\", \" \");\n        replacements[i] = \"\\n\" + indent + bullet + after;\n\n        if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n      }\n    }\n\n    cm.replaceSelections(replacements);\n  };\n\n  // Auto-updating Markdown list numbers when a new item is added to the\n  // middle of a list\n  function incrementRemainingMarkdownListNumbers(cm, pos) {\n    var startLine = pos.line, lookAhead = 0, skipCount = 0;\n    var startItem = listRE.exec(cm.getLine(startLine)), startIndent = startItem[1];\n\n    do {\n      lookAhead += 1;\n      var nextLineNumber = startLine + lookAhead;\n      var nextLine = cm.getLine(nextLineNumber), nextItem = listRE.exec(nextLine);\n\n      if (nextItem) {\n        var nextIndent = nextItem[1];\n        var newNumber = (parseInt(startItem[3], 10) + lookAhead - skipCount);\n        var nextNumber = (parseInt(nextItem[3], 10)), itemNumber = nextNumber;\n\n        if (startIndent === nextIndent && !isNaN(nextNumber)) {\n          if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n          if (newNumber > nextNumber) itemNumber = newNumber + 1;\n          cm.replaceRange(\n            nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n          {\n            line: nextLineNumber, ch: 0\n          }, {\n            line: nextLineNumber, ch: nextLine.length\n          });\n        } else {\n          if (startIndent.length > nextIndent.length) return;\n          // This doesn't run if the next line immediately indents, as it is\n          // not clear of the users intention (new indented item or same level)\n          if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return;\n          skipCount += 1;\n        }\n      }\n    } while (nextItem);\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/edit/matchbrackets.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var ie_lt8 = /MSIE \\d/.test(navigator.userAgent) &&\n    (document.documentMode == null || document.documentMode < 8);\n\n  var Pos = CodeMirror.Pos;\n\n  var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\", \"<\": \">>\", \">\": \"<<\"};\n\n  function bracketRegex(config) {\n    return config && config.bracketRegex || /[(){}[\\]]/\n  }\n\n  function findMatchingBracket(cm, where, config) {\n    var line = cm.getLineHandle(where.line), pos = where.ch - 1;\n    var afterCursor = config && config.afterCursor\n    if (afterCursor == null)\n      afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className)\n    var re = bracketRegex(config)\n\n    // A cursor is defined as between two characters, but in in vim command mode\n    // (i.e. not insert mode), the cursor is visually represented as a\n    // highlighted box on top of the 2nd character. Otherwise, we allow matches\n    // from before or after the cursor.\n    var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) ||\n        re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)];\n    if (!match) return null;\n    var dir = match.charAt(1) == \">\" ? 1 : -1;\n    if (config && config.strict && (dir > 0) != (pos == where.ch)) return null;\n    var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));\n\n    var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config);\n    if (found == null) return null;\n    return {from: Pos(where.line, pos), to: found && found.pos,\n            match: found && found.ch == match.charAt(0), forward: dir > 0};\n  }\n\n  // bracketRegex is used to specify which type of bracket to scan\n  // should be a regexp, e.g. /[[\\]]/\n  //\n  // Note: If \"where\" is on an open bracket, then this bracket is ignored.\n  //\n  // Returns false when no bracket was found, null when it reached\n  // maxScanLines and gave up\n  function scanForBracket(cm, where, dir, style, config) {\n    var maxScanLen = (config && config.maxScanLineLength) || 10000;\n    var maxScanLines = (config && config.maxScanLines) || 1000;\n\n    var stack = [];\n    var re = bracketRegex(config)\n    var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)\n                          : Math.max(cm.firstLine() - 1, where.line - maxScanLines);\n    for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {\n      var line = cm.getLine(lineNo);\n      if (!line) continue;\n      var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;\n      if (line.length > maxScanLen) continue;\n      if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);\n      for (; pos != end; pos += dir) {\n        var ch = line.charAt(pos);\n        if (re.test(ch) && (style === undefined ||\n                            (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || \"\") == (style || \"\"))) {\n          var match = matching[ch];\n          if (match && (match.charAt(1) == \">\") == (dir > 0)) stack.push(ch);\n          else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};\n          else stack.pop();\n        }\n      }\n    }\n    return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;\n  }\n\n  function matchBrackets(cm, autoclear, config) {\n    // Disable brace matching in long lines, since it'll cause hugely slow updates\n    var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000,\n      highlightNonMatching = config && config.highlightNonMatching;\n    var marks = [], ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config);\n      if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) {\n        var style = match.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n        marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));\n        if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)\n          marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));\n      }\n    }\n\n    if (marks.length) {\n      // Kludge to work around the IE bug from issue #1193, where text\n      // input stops going to the textarea whenever this fires.\n      if (ie_lt8 && cm.state.focused) cm.focus();\n\n      var clear = function() {\n        cm.operation(function() {\n          for (var i = 0; i < marks.length; i++) marks[i].clear();\n        });\n      };\n      if (autoclear) setTimeout(clear, 800);\n      else return clear;\n    }\n  }\n\n  function doMatchBrackets(cm) {\n    cm.operation(function() {\n      if (cm.state.matchBrackets.currentlyHighlighted) {\n        cm.state.matchBrackets.currentlyHighlighted();\n        cm.state.matchBrackets.currentlyHighlighted = null;\n      }\n      cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);\n    });\n  }\n\n  function clearHighlighted(cm) {\n    if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) {\n      cm.state.matchBrackets.currentlyHighlighted();\n      cm.state.matchBrackets.currentlyHighlighted = null;\n    }\n  }\n\n  CodeMirror.defineOption(\"matchBrackets\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.off(\"cursorActivity\", doMatchBrackets);\n      cm.off(\"focus\", doMatchBrackets)\n      cm.off(\"blur\", clearHighlighted)\n      clearHighlighted(cm);\n    }\n    if (val) {\n      cm.state.matchBrackets = typeof val == \"object\" ? val : {};\n      cm.on(\"cursorActivity\", doMatchBrackets);\n      cm.on(\"focus\", doMatchBrackets)\n      cm.on(\"blur\", clearHighlighted)\n    }\n  });\n\n  CodeMirror.defineExtension(\"matchBrackets\", function() {matchBrackets(this, true);});\n  CodeMirror.defineExtension(\"findMatchingBracket\", function(pos, config, oldConfig){\n    // Backwards-compatibility kludge\n    if (oldConfig || typeof config == \"boolean\") {\n      if (!oldConfig) {\n        config = config ? {strict: true} : null\n      } else {\n        oldConfig.strict = config\n        config = oldConfig\n      }\n    }\n    return findMatchingBracket(this, pos, config)\n  });\n  CodeMirror.defineExtension(\"scanForBracket\", function(pos, dir, style, config){\n    return scanForBracket(this, pos, dir, style, config);\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/edit/matchtags.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"matchTags\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.off(\"cursorActivity\", doMatchTags);\n      cm.off(\"viewportChange\", maybeUpdateMatch);\n      clear(cm);\n    }\n    if (val) {\n      cm.state.matchBothTags = typeof val == \"object\" && val.bothTags;\n      cm.on(\"cursorActivity\", doMatchTags);\n      cm.on(\"viewportChange\", maybeUpdateMatch);\n      doMatchTags(cm);\n    }\n  });\n\n  function clear(cm) {\n    if (cm.state.tagHit) cm.state.tagHit.clear();\n    if (cm.state.tagOther) cm.state.tagOther.clear();\n    cm.state.tagHit = cm.state.tagOther = null;\n  }\n\n  function doMatchTags(cm) {\n    cm.state.failedTagMatch = false;\n    cm.operation(function() {\n      clear(cm);\n      if (cm.somethingSelected()) return;\n      var cur = cm.getCursor(), range = cm.getViewport();\n      range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to);\n      var match = CodeMirror.findMatchingTag(cm, cur, range);\n      if (!match) return;\n      if (cm.state.matchBothTags) {\n        var hit = match.at == \"open\" ? match.open : match.close;\n        if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: \"CodeMirror-matchingtag\"});\n      }\n      var other = match.at == \"close\" ? match.open : match.close;\n      if (other)\n        cm.state.tagOther = cm.markText(other.from, other.to, {className: \"CodeMirror-matchingtag\"});\n      else\n        cm.state.failedTagMatch = true;\n    });\n  }\n\n  function maybeUpdateMatch(cm) {\n    if (cm.state.failedTagMatch) doMatchTags(cm);\n  }\n\n  CodeMirror.commands.toMatchingTag = function(cm) {\n    var found = CodeMirror.findMatchingTag(cm, cm.getCursor());\n    if (found) {\n      var other = found.at == \"close\" ? found.open : found.close;\n      if (other) cm.extendSelection(other.to, other.from);\n    }\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/edit/trailingspace.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  CodeMirror.defineOption(\"showTrailingSpace\", false, function(cm, val, prev) {\n    if (prev == CodeMirror.Init) prev = false;\n    if (prev && !val)\n      cm.removeOverlay(\"trailingspace\");\n    else if (!prev && val)\n      cm.addOverlay({\n        token: function(stream) {\n          for (var l = stream.string.length, i = l; i && /\\s/.test(stream.string.charAt(i - 1)); --i) {}\n          if (i > stream.pos) { stream.pos = i; return null; }\n          stream.pos = l;\n          return \"trailingspace\";\n        },\n        name: \"trailingspace\"\n      });\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/fold/brace-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nfunction bracketFolding(pairs) {\n  return function(cm, start) {\n    var line = start.line, lineText = cm.getLine(line);\n\n    function findOpening(pair) {\n      var tokenType;\n      for (var at = start.ch, pass = 0;;) {\n        var found = at <= 0 ? -1 : lineText.lastIndexOf(pair[0], at - 1);\n        if (found == -1) {\n          if (pass == 1) break;\n          pass = 1;\n          at = lineText.length;\n          continue;\n        }\n        if (pass == 1 && found < start.ch) break;\n        tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1));\n        if (!/^(comment|string)/.test(tokenType)) return {ch: found + 1, tokenType: tokenType, pair: pair};\n        at = found - 1;\n      }\n    }\n\n    function findRange(found) {\n      var count = 1, lastLine = cm.lastLine(), end, startCh = found.ch, endCh\n      outer: for (var i = line; i <= lastLine; ++i) {\n        var text = cm.getLine(i), pos = i == line ? startCh : 0;\n        for (;;) {\n          var nextOpen = text.indexOf(found.pair[0], pos), nextClose = text.indexOf(found.pair[1], pos);\n          if (nextOpen < 0) nextOpen = text.length;\n          if (nextClose < 0) nextClose = text.length;\n          pos = Math.min(nextOpen, nextClose);\n          if (pos == text.length) break;\n          if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == found.tokenType) {\n            if (pos == nextOpen) ++count;\n            else if (!--count) { end = i; endCh = pos; break outer; }\n          }\n          ++pos;\n        }\n      }\n\n      if (end == null || line == end) return null\n      return {from: CodeMirror.Pos(line, startCh),\n              to: CodeMirror.Pos(end, endCh)};\n    }\n\n    var found = []\n    for (var i = 0; i < pairs.length; i++) {\n      var open = findOpening(pairs[i])\n      if (open) found.push(open)\n    }\n    found.sort(function(a, b) { return a.ch - b.ch })\n    for (var i = 0; i < found.length; i++) {\n      var range = findRange(found[i])\n      if (range) return range\n    }\n    return null\n  }\n}\n\nCodeMirror.registerHelper(\"fold\", \"brace\", bracketFolding([[\"{\", \"}\"], [\"[\", \"]\"]]));\n\nCodeMirror.registerHelper(\"fold\", \"brace-paren\", bracketFolding([[\"{\", \"}\"], [\"[\", \"]\"], [\"(\", \")\"]]));\n\nCodeMirror.registerHelper(\"fold\", \"import\", function(cm, start) {\n  function hasImport(line) {\n    if (line < cm.firstLine() || line > cm.lastLine()) return null;\n    var start = cm.getTokenAt(CodeMirror.Pos(line, 1));\n    if (!/\\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1));\n    if (start.type != \"keyword\" || start.string != \"import\") return null;\n    // Now find closing semicolon, return its position\n    for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) {\n      var text = cm.getLine(i), semi = text.indexOf(\";\");\n      if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)};\n    }\n  }\n\n  var startLine = start.line, has = hasImport(startLine), prev;\n  if (!has || hasImport(startLine - 1) || ((prev = hasImport(startLine - 2)) && prev.end.line == startLine - 1))\n    return null;\n  for (var end = has.end;;) {\n    var next = hasImport(end.line + 1);\n    if (next == null) break;\n    end = next.end;\n  }\n  return {from: cm.clipPos(CodeMirror.Pos(startLine, has.startCh + 1)), to: end};\n});\n\nCodeMirror.registerHelper(\"fold\", \"include\", function(cm, start) {\n  function hasInclude(line) {\n    if (line < cm.firstLine() || line > cm.lastLine()) return null;\n    var start = cm.getTokenAt(CodeMirror.Pos(line, 1));\n    if (!/\\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1));\n    if (start.type == \"meta\" && start.string.slice(0, 8) == \"#include\") return start.start + 8;\n  }\n\n  var startLine = start.line, has = hasInclude(startLine);\n  if (has == null || hasInclude(startLine - 1) != null) return null;\n  for (var end = startLine;;) {\n    var next = hasInclude(end + 1);\n    if (next == null) break;\n    ++end;\n  }\n  return {from: CodeMirror.Pos(startLine, has + 1),\n          to: cm.clipPos(CodeMirror.Pos(end))};\n});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/fold/comment-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.registerGlobalHelper(\"fold\", \"comment\", function(mode) {\n  return mode.blockCommentStart && mode.blockCommentEnd;\n}, function(cm, start) {\n  var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd;\n  if (!startToken || !endToken) return;\n  var line = start.line, lineText = cm.getLine(line);\n\n  var startCh;\n  for (var at = start.ch, pass = 0;;) {\n    var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1);\n    if (found == -1) {\n      if (pass == 1) return;\n      pass = 1;\n      at = lineText.length;\n      continue;\n    }\n    if (pass == 1 && found < start.ch) return;\n    if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1))) &&\n        (found == 0 || lineText.slice(found - endToken.length, found) == endToken ||\n         !/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found))))) {\n      startCh = found + startToken.length;\n      break;\n    }\n    at = found - 1;\n  }\n\n  var depth = 1, lastLine = cm.lastLine(), end, endCh;\n  outer: for (var i = line; i <= lastLine; ++i) {\n    var text = cm.getLine(i), pos = i == line ? startCh : 0;\n    for (;;) {\n      var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos);\n      if (nextOpen < 0) nextOpen = text.length;\n      if (nextClose < 0) nextClose = text.length;\n      pos = Math.min(nextOpen, nextClose);\n      if (pos == text.length) break;\n      if (pos == nextOpen) ++depth;\n      else if (!--depth) { end = i; endCh = pos; break outer; }\n      ++pos;\n    }\n  }\n  if (end == null || line == end && endCh == startCh) return;\n  return {from: CodeMirror.Pos(line, startCh),\n          to: CodeMirror.Pos(end, endCh)};\n});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/fold/foldcode.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function doFold(cm, pos, options, force) {\n    if (options && options.call) {\n      var finder = options;\n      options = null;\n    } else {\n      var finder = getOption(cm, options, \"rangeFinder\");\n    }\n    if (typeof pos == \"number\") pos = CodeMirror.Pos(pos, 0);\n    var minSize = getOption(cm, options, \"minFoldSize\");\n\n    function getRange(allowFolded) {\n      var range = finder(cm, pos);\n      if (!range || range.to.line - range.from.line < minSize) return null;\n      if (force === \"fold\") return range;\n\n      var marks = cm.findMarksAt(range.from);\n      for (var i = 0; i < marks.length; ++i) {\n        if (marks[i].__isFold) {\n          if (!allowFolded) return null;\n          range.cleared = true;\n          marks[i].clear();\n        }\n      }\n      return range;\n    }\n\n    var range = getRange(true);\n    if (getOption(cm, options, \"scanUp\")) while (!range && pos.line > cm.firstLine()) {\n      pos = CodeMirror.Pos(pos.line - 1, 0);\n      range = getRange(false);\n    }\n    if (!range || range.cleared || force === \"unfold\") return;\n\n    var myWidget = makeWidget(cm, options, range);\n    CodeMirror.on(myWidget, \"mousedown\", function(e) {\n      myRange.clear();\n      CodeMirror.e_preventDefault(e);\n    });\n    var myRange = cm.markText(range.from, range.to, {\n      replacedWith: myWidget,\n      clearOnEnter: getOption(cm, options, \"clearOnEnter\"),\n      __isFold: true\n    });\n    myRange.on(\"clear\", function(from, to) {\n      CodeMirror.signal(cm, \"unfold\", cm, from, to);\n    });\n    CodeMirror.signal(cm, \"fold\", cm, range.from, range.to);\n  }\n\n  function makeWidget(cm, options, range) {\n    var widget = getOption(cm, options, \"widget\");\n\n    if (typeof widget == \"function\") {\n      widget = widget(range.from, range.to);\n    }\n\n    if (typeof widget == \"string\") {\n      var text = document.createTextNode(widget);\n      widget = document.createElement(\"span\");\n      widget.appendChild(text);\n      widget.className = \"CodeMirror-foldmarker\";\n    } else if (widget) {\n      widget = widget.cloneNode(true)\n    }\n    return widget;\n  }\n\n  // Clumsy backwards-compatible interface\n  CodeMirror.newFoldFunction = function(rangeFinder, widget) {\n    return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); };\n  };\n\n  // New-style interface\n  CodeMirror.defineExtension(\"foldCode\", function(pos, options, force) {\n    doFold(this, pos, options, force);\n  });\n\n  CodeMirror.defineExtension(\"isFolded\", function(pos) {\n    var marks = this.findMarksAt(pos);\n    for (var i = 0; i < marks.length; ++i)\n      if (marks[i].__isFold) return true;\n  });\n\n  CodeMirror.commands.toggleFold = function(cm) {\n    cm.foldCode(cm.getCursor());\n  };\n  CodeMirror.commands.fold = function(cm) {\n    cm.foldCode(cm.getCursor(), null, \"fold\");\n  };\n  CodeMirror.commands.unfold = function(cm) {\n    cm.foldCode(cm.getCursor(), { scanUp: false }, \"unfold\");\n  };\n  CodeMirror.commands.foldAll = function(cm) {\n    cm.operation(function() {\n      for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)\n        cm.foldCode(CodeMirror.Pos(i, 0), { scanUp: false }, \"fold\");\n    });\n  };\n  CodeMirror.commands.unfoldAll = function(cm) {\n    cm.operation(function() {\n      for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)\n        cm.foldCode(CodeMirror.Pos(i, 0), { scanUp: false }, \"unfold\");\n    });\n  };\n\n  CodeMirror.registerHelper(\"fold\", \"combine\", function() {\n    var funcs = Array.prototype.slice.call(arguments, 0);\n    return function(cm, start) {\n      for (var i = 0; i < funcs.length; ++i) {\n        var found = funcs[i](cm, start);\n        if (found) return found;\n      }\n    };\n  });\n\n  CodeMirror.registerHelper(\"fold\", \"auto\", function(cm, start) {\n    var helpers = cm.getHelpers(start, \"fold\");\n    for (var i = 0; i < helpers.length; i++) {\n      var cur = helpers[i](cm, start);\n      if (cur) return cur;\n    }\n  });\n\n  var defaultOptions = {\n    rangeFinder: CodeMirror.fold.auto,\n    widget: \"\\u2194\",\n    minFoldSize: 0,\n    scanUp: false,\n    clearOnEnter: true\n  };\n\n  CodeMirror.defineOption(\"foldOptions\", null);\n\n  function getOption(cm, options, name) {\n    if (options && options[name] !== undefined)\n      return options[name];\n    var editorOptions = cm.options.foldOptions;\n    if (editorOptions && editorOptions[name] !== undefined)\n      return editorOptions[name];\n    return defaultOptions[name];\n  }\n\n  CodeMirror.defineExtension(\"foldOption\", function(options, name) {\n    return getOption(this, options, name);\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/fold/foldgutter.css",
    "content": ".CodeMirror-foldmarker {\n  color: blue;\n  text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px;\n  font-family: arial;\n  line-height: .3;\n  cursor: pointer;\n}\n.CodeMirror-foldgutter {\n  width: .7em;\n}\n.CodeMirror-foldgutter-open,\n.CodeMirror-foldgutter-folded {\n  cursor: pointer;\n}\n.CodeMirror-foldgutter-open:after {\n  content: \"\\25BE\";\n}\n.CodeMirror-foldgutter-folded:after {\n  content: \"\\25B8\";\n}\n"
  },
  {
    "path": "public/vendor/codemirror/addon/fold/foldgutter.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./foldcode\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./foldcode\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"foldGutter\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.clearGutter(cm.state.foldGutter.options.gutter);\n      cm.state.foldGutter = null;\n      cm.off(\"gutterClick\", onGutterClick);\n      cm.off(\"changes\", onChange);\n      cm.off(\"viewportChange\", onViewportChange);\n      cm.off(\"fold\", onFold);\n      cm.off(\"unfold\", onFold);\n      cm.off(\"swapDoc\", onChange);\n    }\n    if (val) {\n      cm.state.foldGutter = new State(parseOptions(val));\n      updateInViewport(cm);\n      cm.on(\"gutterClick\", onGutterClick);\n      cm.on(\"changes\", onChange);\n      cm.on(\"viewportChange\", onViewportChange);\n      cm.on(\"fold\", onFold);\n      cm.on(\"unfold\", onFold);\n      cm.on(\"swapDoc\", onChange);\n    }\n  });\n\n  var Pos = CodeMirror.Pos;\n\n  function State(options) {\n    this.options = options;\n    this.from = this.to = 0;\n  }\n\n  function parseOptions(opts) {\n    if (opts === true) opts = {};\n    if (opts.gutter == null) opts.gutter = \"CodeMirror-foldgutter\";\n    if (opts.indicatorOpen == null) opts.indicatorOpen = \"CodeMirror-foldgutter-open\";\n    if (opts.indicatorFolded == null) opts.indicatorFolded = \"CodeMirror-foldgutter-folded\";\n    return opts;\n  }\n\n  function isFolded(cm, line) {\n    var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0));\n    for (var i = 0; i < marks.length; ++i) {\n      if (marks[i].__isFold) {\n        var fromPos = marks[i].find(-1);\n        if (fromPos && fromPos.line === line)\n          return marks[i];\n      }\n    }\n  }\n\n  function marker(spec) {\n    if (typeof spec == \"string\") {\n      var elt = document.createElement(\"div\");\n      elt.className = spec + \" CodeMirror-guttermarker-subtle\";\n      return elt;\n    } else {\n      return spec.cloneNode(true);\n    }\n  }\n\n  function updateFoldInfo(cm, from, to) {\n    var opts = cm.state.foldGutter.options, cur = from - 1;\n    var minSize = cm.foldOption(opts, \"minFoldSize\");\n    var func = cm.foldOption(opts, \"rangeFinder\");\n    // we can reuse the built-in indicator element if its className matches the new state\n    var clsFolded = typeof opts.indicatorFolded == \"string\" && classTest(opts.indicatorFolded);\n    var clsOpen = typeof opts.indicatorOpen == \"string\" && classTest(opts.indicatorOpen);\n    cm.eachLine(from, to, function(line) {\n      ++cur;\n      var mark = null;\n      var old = line.gutterMarkers;\n      if (old) old = old[opts.gutter];\n      if (isFolded(cm, cur)) {\n        if (clsFolded && old && clsFolded.test(old.className)) return;\n        mark = marker(opts.indicatorFolded);\n      } else {\n        var pos = Pos(cur, 0);\n        var range = func && func(cm, pos);\n        if (range && range.to.line - range.from.line >= minSize) {\n          if (clsOpen && old && clsOpen.test(old.className)) return;\n          mark = marker(opts.indicatorOpen);\n        }\n      }\n      if (!mark && !old) return;\n      cm.setGutterMarker(line, opts.gutter, mark);\n    });\n  }\n\n  // copied from CodeMirror/src/util/dom.js\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  function updateInViewport(cm) {\n    var vp = cm.getViewport(), state = cm.state.foldGutter;\n    if (!state) return;\n    cm.operation(function() {\n      updateFoldInfo(cm, vp.from, vp.to);\n    });\n    state.from = vp.from; state.to = vp.to;\n  }\n\n  function onGutterClick(cm, line, gutter) {\n    var state = cm.state.foldGutter;\n    if (!state) return;\n    var opts = state.options;\n    if (gutter != opts.gutter) return;\n    var folded = isFolded(cm, line);\n    if (folded) folded.clear();\n    else cm.foldCode(Pos(line, 0), opts);\n  }\n\n  function onChange(cm) {\n    var state = cm.state.foldGutter;\n    if (!state) return;\n    var opts = state.options;\n    state.from = state.to = 0;\n    clearTimeout(state.changeUpdate);\n    state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600);\n  }\n\n  function onViewportChange(cm) {\n    var state = cm.state.foldGutter;\n    if (!state) return;\n    var opts = state.options;\n    clearTimeout(state.changeUpdate);\n    state.changeUpdate = setTimeout(function() {\n      var vp = cm.getViewport();\n      if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {\n        updateInViewport(cm);\n      } else {\n        cm.operation(function() {\n          if (vp.from < state.from) {\n            updateFoldInfo(cm, vp.from, state.from);\n            state.from = vp.from;\n          }\n          if (vp.to > state.to) {\n            updateFoldInfo(cm, state.to, vp.to);\n            state.to = vp.to;\n          }\n        });\n      }\n    }, opts.updateViewportTimeSpan || 400);\n  }\n\n  function onFold(cm, from) {\n    var state = cm.state.foldGutter;\n    if (!state) return;\n    var line = from.line;\n    if (line >= state.from && line < state.to)\n      updateFoldInfo(cm, line, line + 1);\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/fold/indent-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nfunction lineIndent(cm, lineNo) {\n  var text = cm.getLine(lineNo)\n  var spaceTo = text.search(/\\S/)\n  if (spaceTo == -1 || /\\bcomment\\b/.test(cm.getTokenTypeAt(CodeMirror.Pos(lineNo, spaceTo + 1))))\n    return -1\n  return CodeMirror.countColumn(text, null, cm.getOption(\"tabSize\"))\n}\n\nCodeMirror.registerHelper(\"fold\", \"indent\", function(cm, start) {\n  var myIndent = lineIndent(cm, start.line)\n  if (myIndent < 0) return\n  var lastLineInFold = null\n\n  // Go through lines until we find a line that definitely doesn't belong in\n  // the block we're folding, or to the end.\n  for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) {\n    var indent = lineIndent(cm, i)\n    if (indent == -1) {\n    } else if (indent > myIndent) {\n      // Lines with a greater indent are considered part of the block.\n      lastLineInFold = i;\n    } else {\n      // If this line has non-space, non-comment content, and is\n      // indented less or equal to the start line, it is the start of\n      // another block.\n      break;\n    }\n  }\n  if (lastLineInFold) return {\n    from: CodeMirror.Pos(start.line, cm.getLine(start.line).length),\n    to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length)\n  };\n});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/fold/markdown-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.registerHelper(\"fold\", \"markdown\", function(cm, start) {\n  var maxDepth = 100;\n\n  function isHeader(lineNo) {\n    var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0));\n    return tokentype && /\\bheader\\b/.test(tokentype);\n  }\n\n  function headerLevel(lineNo, line, nextLine) {\n    var match = line && line.match(/^#+/);\n    if (match && isHeader(lineNo)) return match[0].length;\n    match = nextLine && nextLine.match(/^[=\\-]+\\s*$/);\n    if (match && isHeader(lineNo + 1)) return nextLine[0] == \"=\" ? 1 : 2;\n    return maxDepth;\n  }\n\n  var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1);\n  var level = headerLevel(start.line, firstLine, nextLine);\n  if (level === maxDepth) return undefined;\n\n  var lastLineNo = cm.lastLine();\n  var end = start.line, nextNextLine = cm.getLine(end + 2);\n  while (end < lastLineNo) {\n    if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break;\n    ++end;\n    nextLine = nextNextLine;\n    nextNextLine = cm.getLine(end + 2);\n  }\n\n  return {\n    from: CodeMirror.Pos(start.line, firstLine.length),\n    to: CodeMirror.Pos(end, cm.getLine(end).length)\n  };\n});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/fold/xml-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var Pos = CodeMirror.Pos;\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }\n\n  var nameStartChar = \"A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n  var nameChar = nameStartChar + \"\\-\\:\\.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n  var xmlTagStart = new RegExp(\"<(/?)([\" + nameStartChar + \"][\" + nameChar + \"]*)\", \"g\");\n\n  function Iter(cm, line, ch, range) {\n    this.line = line; this.ch = ch;\n    this.cm = cm; this.text = cm.getLine(line);\n    this.min = range ? Math.max(range.from, cm.firstLine()) : cm.firstLine();\n    this.max = range ? Math.min(range.to - 1, cm.lastLine()) : cm.lastLine();\n  }\n\n  function tagAt(iter, ch) {\n    var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));\n    return type && /\\btag\\b/.test(type);\n  }\n\n  function nextLine(iter) {\n    if (iter.line >= iter.max) return;\n    iter.ch = 0;\n    iter.text = iter.cm.getLine(++iter.line);\n    return true;\n  }\n  function prevLine(iter) {\n    if (iter.line <= iter.min) return;\n    iter.text = iter.cm.getLine(--iter.line);\n    iter.ch = iter.text.length;\n    return true;\n  }\n\n  function toTagEnd(iter) {\n    for (;;) {\n      var gt = iter.text.indexOf(\">\", iter.ch);\n      if (gt == -1) { if (nextLine(iter)) continue; else return; }\n      if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }\n      var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n      var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n      iter.ch = gt + 1;\n      return selfClose ? \"selfClose\" : \"regular\";\n    }\n  }\n  function toTagStart(iter) {\n    for (;;) {\n      var lt = iter.ch ? iter.text.lastIndexOf(\"<\", iter.ch - 1) : -1;\n      if (lt == -1) { if (prevLine(iter)) continue; else return; }\n      if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }\n      xmlTagStart.lastIndex = lt;\n      iter.ch = lt;\n      var match = xmlTagStart.exec(iter.text);\n      if (match && match.index == lt) return match;\n    }\n  }\n\n  function toNextTag(iter) {\n    for (;;) {\n      xmlTagStart.lastIndex = iter.ch;\n      var found = xmlTagStart.exec(iter.text);\n      if (!found) { if (nextLine(iter)) continue; else return; }\n      if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }\n      iter.ch = found.index + found[0].length;\n      return found;\n    }\n  }\n  function toPrevTag(iter) {\n    for (;;) {\n      var gt = iter.ch ? iter.text.lastIndexOf(\">\", iter.ch - 1) : -1;\n      if (gt == -1) { if (prevLine(iter)) continue; else return; }\n      if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }\n      var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n      var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n      iter.ch = gt + 1;\n      return selfClose ? \"selfClose\" : \"regular\";\n    }\n  }\n\n  function findMatchingClose(iter, tag) {\n    var stack = [];\n    for (;;) {\n      var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);\n      if (!next || !(end = toTagEnd(iter))) return;\n      if (end == \"selfClose\") continue;\n      if (next[1]) { // closing tag\n        for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {\n          stack.length = i;\n          break;\n        }\n        if (i < 0 && (!tag || tag == next[2])) return {\n          tag: next[2],\n          from: Pos(startLine, startCh),\n          to: Pos(iter.line, iter.ch)\n        };\n      } else { // opening tag\n        stack.push(next[2]);\n      }\n    }\n  }\n  function findMatchingOpen(iter, tag) {\n    var stack = [];\n    for (;;) {\n      var prev = toPrevTag(iter);\n      if (!prev) return;\n      if (prev == \"selfClose\") { toTagStart(iter); continue; }\n      var endLine = iter.line, endCh = iter.ch;\n      var start = toTagStart(iter);\n      if (!start) return;\n      if (start[1]) { // closing tag\n        stack.push(start[2]);\n      } else { // opening tag\n        for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {\n          stack.length = i;\n          break;\n        }\n        if (i < 0 && (!tag || tag == start[2])) return {\n          tag: start[2],\n          from: Pos(iter.line, iter.ch),\n          to: Pos(endLine, endCh)\n        };\n      }\n    }\n  }\n\n  CodeMirror.registerHelper(\"fold\", \"xml\", function(cm, start) {\n    var iter = new Iter(cm, start.line, 0);\n    for (;;) {\n      var openTag = toNextTag(iter)\n      if (!openTag || iter.line != start.line) return\n      var end = toTagEnd(iter)\n      if (!end) return\n      if (!openTag[1] && end != \"selfClose\") {\n        var startPos = Pos(iter.line, iter.ch);\n        var endPos = findMatchingClose(iter, openTag[2]);\n        return endPos && cmp(endPos.from, startPos) > 0 ? {from: startPos, to: endPos.from} : null\n      }\n    }\n  });\n  CodeMirror.findMatchingTag = function(cm, pos, range) {\n    var iter = new Iter(cm, pos.line, pos.ch, range);\n    if (iter.text.indexOf(\">\") == -1 && iter.text.indexOf(\"<\") == -1) return;\n    var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);\n    var start = end && toTagStart(iter);\n    if (!end || !start || cmp(iter, pos) > 0) return;\n    var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};\n    if (end == \"selfClose\") return {open: here, close: null, at: \"open\"};\n\n    if (start[1]) { // closing tag\n      return {open: findMatchingOpen(iter, start[2]), close: here, at: \"close\"};\n    } else { // opening tag\n      iter = new Iter(cm, to.line, to.ch, range);\n      return {open: here, close: findMatchingClose(iter, start[2]), at: \"open\"};\n    }\n  };\n\n  CodeMirror.findEnclosingTag = function(cm, pos, range, tag) {\n    var iter = new Iter(cm, pos.line, pos.ch, range);\n    for (;;) {\n      var open = findMatchingOpen(iter, tag);\n      if (!open) break;\n      var forward = new Iter(cm, pos.line, pos.ch, range);\n      var close = findMatchingClose(forward, open.tag);\n      if (close) return {open: open, close: close};\n    }\n  };\n\n  // Used by addon/edit/closetag.js\n  CodeMirror.scanForClosingTag = function(cm, pos, name, end) {\n    var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);\n    return findMatchingClose(iter, name);\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/hint/anyword-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var WORD = /[\\w$]+/, RANGE = 500;\n\n  CodeMirror.registerHelper(\"hint\", \"anyword\", function(editor, options) {\n    var word = options && options.word || WORD;\n    var range = options && options.range || RANGE;\n    var cur = editor.getCursor(), curLine = editor.getLine(cur.line);\n    var end = cur.ch, start = end;\n    while (start && word.test(curLine.charAt(start - 1))) --start;\n    var curWord = start != end && curLine.slice(start, end);\n\n    var list = options && options.list || [], seen = {};\n    var re = new RegExp(word.source, \"g\");\n    for (var dir = -1; dir <= 1; dir += 2) {\n      var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;\n      for (; line != endLine; line += dir) {\n        var text = editor.getLine(line), m;\n        while (m = re.exec(text)) {\n          if (line == cur.line && m[0] === curWord) continue;\n          if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) {\n            seen[m[0]] = true;\n            list.push(m[0]);\n          }\n        }\n      }\n    }\n    return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/hint/css-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../../mode/css/css\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../../mode/css/css\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var pseudoClasses = {\"active\":1, \"after\":1, \"before\":1, \"checked\":1, \"default\":1,\n    \"disabled\":1, \"empty\":1, \"enabled\":1, \"first-child\":1, \"first-letter\":1,\n    \"first-line\":1, \"first-of-type\":1, \"focus\":1, \"hover\":1, \"in-range\":1,\n    \"indeterminate\":1, \"invalid\":1, \"lang\":1, \"last-child\":1, \"last-of-type\":1,\n    \"link\":1, \"not\":1, \"nth-child\":1, \"nth-last-child\":1, \"nth-last-of-type\":1,\n    \"nth-of-type\":1, \"only-of-type\":1, \"only-child\":1, \"optional\":1, \"out-of-range\":1,\n    \"placeholder\":1, \"read-only\":1, \"read-write\":1, \"required\":1, \"root\":1,\n    \"selection\":1, \"target\":1, \"valid\":1, \"visited\":1\n  };\n\n  CodeMirror.registerHelper(\"hint\", \"css\", function(cm) {\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur);\n    var inner = CodeMirror.innerMode(cm.getMode(), token.state);\n    if (inner.mode.name != \"css\") return;\n\n    if (token.type == \"keyword\" && \"!important\".indexOf(token.string) == 0)\n      return {list: [\"!important\"], from: CodeMirror.Pos(cur.line, token.start),\n              to: CodeMirror.Pos(cur.line, token.end)};\n\n    var start = token.start, end = cur.ch, word = token.string.slice(0, end - start);\n    if (/[^\\w$_-]/.test(word)) {\n      word = \"\"; start = end = cur.ch;\n    }\n\n    var spec = CodeMirror.resolveMode(\"text/css\");\n\n    var result = [];\n    function add(keywords) {\n      for (var name in keywords)\n        if (!word || name.lastIndexOf(word, 0) == 0)\n          result.push(name);\n    }\n\n    var st = inner.state.state;\n    if (st == \"pseudo\" || token.type == \"variable-3\") {\n      add(pseudoClasses);\n    } else if (st == \"block\" || st == \"maybeprop\") {\n      add(spec.propertyKeywords);\n    } else if (st == \"prop\" || st == \"parens\" || st == \"at\" || st == \"params\") {\n      add(spec.valueKeywords);\n      add(spec.colorKeywords);\n    } else if (st == \"media\" || st == \"media_parens\") {\n      add(spec.mediaTypes);\n      add(spec.mediaFeatures);\n    }\n\n    if (result.length) return {\n      list: result,\n      from: CodeMirror.Pos(cur.line, start),\n      to: CodeMirror.Pos(cur.line, end)\n    };\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/hint/html-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./xml-hint\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./xml-hint\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var langs = \"ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu\".split(\" \");\n  var targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\n  var charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\n  var methods = [\"get\", \"post\", \"put\", \"delete\"];\n  var encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\n  var media = [\"all\", \"screen\", \"print\", \"embossed\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\", \"tty\", \"tv\", \"speech\",\n               \"3d-glasses\", \"resolution [>][<][=] [X]\", \"device-aspect-ratio: X/Y\", \"orientation:portrait\",\n               \"orientation:landscape\", \"device-height: [X]\", \"device-width: [X]\"];\n  var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags\n\n  var data = {\n    a: {\n      attrs: {\n        href: null, ping: null, type: null,\n        media: media,\n        target: targets,\n        hreflang: langs\n      }\n    },\n    abbr: s,\n    acronym: s,\n    address: s,\n    applet: s,\n    area: {\n      attrs: {\n        alt: null, coords: null, href: null, target: null, ping: null,\n        media: media, hreflang: langs, type: null,\n        shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n      }\n    },\n    article: s,\n    aside: s,\n    audio: {\n      attrs: {\n        src: null, mediagroup: null,\n        crossorigin: [\"anonymous\", \"use-credentials\"],\n        preload: [\"none\", \"metadata\", \"auto\"],\n        autoplay: [\"\", \"autoplay\"],\n        loop: [\"\", \"loop\"],\n        controls: [\"\", \"controls\"]\n      }\n    },\n    b: s,\n    base: { attrs: { href: null, target: targets } },\n    basefont: s,\n    bdi: s,\n    bdo: s,\n    big: s,\n    blockquote: { attrs: { cite: null } },\n    body: s,\n    br: s,\n    button: {\n      attrs: {\n        form: null, formaction: null, name: null, value: null,\n        autofocus: [\"\", \"autofocus\"],\n        disabled: [\"\", \"autofocus\"],\n        formenctype: encs,\n        formmethod: methods,\n        formnovalidate: [\"\", \"novalidate\"],\n        formtarget: targets,\n        type: [\"submit\", \"reset\", \"button\"]\n      }\n    },\n    canvas: { attrs: { width: null, height: null } },\n    caption: s,\n    center: s,\n    cite: s,\n    code: s,\n    col: { attrs: { span: null } },\n    colgroup: { attrs: { span: null } },\n    command: {\n      attrs: {\n        type: [\"command\", \"checkbox\", \"radio\"],\n        label: null, icon: null, radiogroup: null, command: null, title: null,\n        disabled: [\"\", \"disabled\"],\n        checked: [\"\", \"checked\"]\n      }\n    },\n    data: { attrs: { value: null } },\n    datagrid: { attrs: { disabled: [\"\", \"disabled\"], multiple: [\"\", \"multiple\"] } },\n    datalist: { attrs: { data: null } },\n    dd: s,\n    del: { attrs: { cite: null, datetime: null } },\n    details: { attrs: { open: [\"\", \"open\"] } },\n    dfn: s,\n    dir: s,\n    div: s,\n    dialog: { attrs: { open: null } },\n    dl: s,\n    dt: s,\n    em: s,\n    embed: { attrs: { src: null, type: null, width: null, height: null } },\n    eventsource: { attrs: { src: null } },\n    fieldset: { attrs: { disabled: [\"\", \"disabled\"], form: null, name: null } },\n    figcaption: s,\n    figure: s,\n    font: s,\n    footer: s,\n    form: {\n      attrs: {\n        action: null, name: null,\n        \"accept-charset\": charsets,\n        autocomplete: [\"on\", \"off\"],\n        enctype: encs,\n        method: methods,\n        novalidate: [\"\", \"novalidate\"],\n        target: targets\n      }\n    },\n    frame: s,\n    frameset: s,\n    h1: s, h2: s, h3: s, h4: s, h5: s, h6: s,\n    head: {\n      attrs: {},\n      children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n    },\n    header: s,\n    hgroup: s,\n    hr: s,\n    html: {\n      attrs: { manifest: null },\n      children: [\"head\", \"body\"]\n    },\n    i: s,\n    iframe: {\n      attrs: {\n        src: null, srcdoc: null, name: null, width: null, height: null,\n        sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n        seamless: [\"\", \"seamless\"]\n      }\n    },\n    img: {\n      attrs: {\n        alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n        crossorigin: [\"anonymous\", \"use-credentials\"]\n      }\n    },\n    input: {\n      attrs: {\n        alt: null, dirname: null, form: null, formaction: null,\n        height: null, list: null, max: null, maxlength: null, min: null,\n        name: null, pattern: null, placeholder: null, size: null, src: null,\n        step: null, value: null, width: null,\n        accept: [\"audio/*\", \"video/*\", \"image/*\"],\n        autocomplete: [\"on\", \"off\"],\n        autofocus: [\"\", \"autofocus\"],\n        checked: [\"\", \"checked\"],\n        disabled: [\"\", \"disabled\"],\n        formenctype: encs,\n        formmethod: methods,\n        formnovalidate: [\"\", \"novalidate\"],\n        formtarget: targets,\n        multiple: [\"\", \"multiple\"],\n        readonly: [\"\", \"readonly\"],\n        required: [\"\", \"required\"],\n        type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n               \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n               \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n      }\n    },\n    ins: { attrs: { cite: null, datetime: null } },\n    kbd: s,\n    keygen: {\n      attrs: {\n        challenge: null, form: null, name: null,\n        autofocus: [\"\", \"autofocus\"],\n        disabled: [\"\", \"disabled\"],\n        keytype: [\"RSA\"]\n      }\n    },\n    label: { attrs: { \"for\": null, form: null } },\n    legend: s,\n    li: { attrs: { value: null } },\n    link: {\n      attrs: {\n        href: null, type: null,\n        hreflang: langs,\n        media: media,\n        sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n      }\n    },\n    map: { attrs: { name: null } },\n    mark: s,\n    menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n    meta: {\n      attrs: {\n        content: null,\n        charset: charsets,\n        name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n        \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n      }\n    },\n    meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n    nav: s,\n    noframes: s,\n    noscript: s,\n    object: {\n      attrs: {\n        data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n        typemustmatch: [\"\", \"typemustmatch\"]\n      }\n    },\n    ol: { attrs: { reversed: [\"\", \"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] } },\n    optgroup: { attrs: { disabled: [\"\", \"disabled\"], label: null } },\n    option: { attrs: { disabled: [\"\", \"disabled\"], label: null, selected: [\"\", \"selected\"], value: null } },\n    output: { attrs: { \"for\": null, form: null, name: null } },\n    p: s,\n    param: { attrs: { name: null, value: null } },\n    pre: s,\n    progress: { attrs: { value: null, max: null } },\n    q: { attrs: { cite: null } },\n    rp: s,\n    rt: s,\n    ruby: s,\n    s: s,\n    samp: s,\n    script: {\n      attrs: {\n        type: [\"text/javascript\"],\n        src: null,\n        async: [\"\", \"async\"],\n        defer: [\"\", \"defer\"],\n        charset: charsets\n      }\n    },\n    section: s,\n    select: {\n      attrs: {\n        form: null, name: null, size: null,\n        autofocus: [\"\", \"autofocus\"],\n        disabled: [\"\", \"disabled\"],\n        multiple: [\"\", \"multiple\"]\n      }\n    },\n    small: s,\n    source: { attrs: { src: null, type: null, media: null } },\n    span: s,\n    strike: s,\n    strong: s,\n    style: {\n      attrs: {\n        type: [\"text/css\"],\n        media: media,\n        scoped: null\n      }\n    },\n    sub: s,\n    summary: s,\n    sup: s,\n    table: s,\n    tbody: s,\n    td: { attrs: { colspan: null, rowspan: null, headers: null } },\n    textarea: {\n      attrs: {\n        dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n        rows: null, cols: null,\n        autofocus: [\"\", \"autofocus\"],\n        disabled: [\"\", \"disabled\"],\n        readonly: [\"\", \"readonly\"],\n        required: [\"\", \"required\"],\n        wrap: [\"soft\", \"hard\"]\n      }\n    },\n    tfoot: s,\n    th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n    thead: s,\n    time: { attrs: { datetime: null } },\n    title: s,\n    tr: s,\n    track: {\n      attrs: {\n        src: null, label: null, \"default\": null,\n        kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n        srclang: langs\n      }\n    },\n    tt: s,\n    u: s,\n    ul: s,\n    \"var\": s,\n    video: {\n      attrs: {\n        src: null, poster: null, width: null, height: null,\n        crossorigin: [\"anonymous\", \"use-credentials\"],\n        preload: [\"auto\", \"metadata\", \"none\"],\n        autoplay: [\"\", \"autoplay\"],\n        mediagroup: [\"movie\"],\n        muted: [\"\", \"muted\"],\n        controls: [\"\", \"controls\"]\n      }\n    },\n    wbr: s\n  };\n\n  var globalAttrs = {\n    accesskey: [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n    \"class\": null,\n    contenteditable: [\"true\", \"false\"],\n    contextmenu: null,\n    dir: [\"ltr\", \"rtl\", \"auto\"],\n    draggable: [\"true\", \"false\", \"auto\"],\n    dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n    hidden: [\"hidden\"],\n    id: null,\n    inert: [\"inert\"],\n    itemid: null,\n    itemprop: null,\n    itemref: null,\n    itemscope: [\"itemscope\"],\n    itemtype: null,\n    lang: [\"en\", \"es\"],\n    spellcheck: [\"true\", \"false\"],\n    autocorrect: [\"true\", \"false\"],\n    autocapitalize: [\"true\", \"false\"],\n    style: null,\n    tabindex: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n    title: null,\n    translate: [\"yes\", \"no\"],\n    onclick: null,\n    rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"]\n  };\n  function populate(obj) {\n    for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr))\n      obj.attrs[attr] = globalAttrs[attr];\n  }\n\n  populate(s);\n  for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s)\n    populate(data[tag]);\n\n  CodeMirror.htmlSchema = data;\n  function htmlHint(cm, options) {\n    var local = {schemaInfo: data};\n    if (options) for (var opt in options) local[opt] = options[opt];\n    return CodeMirror.hint.xml(cm, local);\n  }\n  CodeMirror.registerHelper(\"hint\", \"html\", htmlHint);\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/hint/javascript-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var Pos = CodeMirror.Pos;\n\n  function forEach(arr, f) {\n    for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);\n  }\n\n  function arrayContains(arr, item) {\n    if (!Array.prototype.indexOf) {\n      var i = arr.length;\n      while (i--) {\n        if (arr[i] === item) {\n          return true;\n        }\n      }\n      return false;\n    }\n    return arr.indexOf(item) != -1;\n  }\n\n  function scriptHint(editor, keywords, getToken, options) {\n    // Find the token at the cursor\n    var cur = editor.getCursor(), token = getToken(editor, cur);\n    if (/\\b(?:string|comment)\\b/.test(token.type)) return;\n    var innerMode = CodeMirror.innerMode(editor.getMode(), token.state);\n    if (innerMode.mode.helperType === \"json\") return;\n    token.state = innerMode.state;\n\n    // If it's not a 'word-style' token, ignore the token.\n    if (!/^[\\w$_]*$/.test(token.string)) {\n      token = {start: cur.ch, end: cur.ch, string: \"\", state: token.state,\n               type: token.string == \".\" ? \"property\" : null};\n    } else if (token.end > cur.ch) {\n      token.end = cur.ch;\n      token.string = token.string.slice(0, cur.ch - token.start);\n    }\n\n    var tprop = token;\n    // If it is a property, find out what it is a property of.\n    while (tprop.type == \"property\") {\n      tprop = getToken(editor, Pos(cur.line, tprop.start));\n      if (tprop.string != \".\") return;\n      tprop = getToken(editor, Pos(cur.line, tprop.start));\n      if (!context) var context = [];\n      context.push(tprop);\n    }\n    return {list: getCompletions(token, context, keywords, options),\n            from: Pos(cur.line, token.start),\n            to: Pos(cur.line, token.end)};\n  }\n\n  function javascriptHint(editor, options) {\n    return scriptHint(editor, javascriptKeywords,\n                      function (e, cur) {return e.getTokenAt(cur);},\n                      options);\n  };\n  CodeMirror.registerHelper(\"hint\", \"javascript\", javascriptHint);\n\n  function getCoffeeScriptToken(editor, cur) {\n  // This getToken, it is for coffeescript, imitates the behavior of\n  // getTokenAt method in javascript.js, that is, returning \"property\"\n  // type and treat \".\" as independent token.\n    var token = editor.getTokenAt(cur);\n    if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') {\n      token.end = token.start;\n      token.string = '.';\n      token.type = \"property\";\n    }\n    else if (/^\\.[\\w$_]*$/.test(token.string)) {\n      token.type = \"property\";\n      token.start++;\n      token.string = token.string.replace(/\\./, '');\n    }\n    return token;\n  }\n\n  function coffeescriptHint(editor, options) {\n    return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options);\n  }\n  CodeMirror.registerHelper(\"hint\", \"coffeescript\", coffeescriptHint);\n\n  var stringProps = (\"charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight \" +\n                     \"toUpperCase toLowerCase split concat match replace search\").split(\" \");\n  var arrayProps = (\"length concat join splice push pop shift unshift slice reverse sort indexOf \" +\n                    \"lastIndexOf every some filter forEach map reduce reduceRight \").split(\" \");\n  var funcProps = \"prototype apply call bind\".split(\" \");\n  var javascriptKeywords = (\"break case catch class const continue debugger default delete do else export extends false finally for function \" +\n                  \"if in import instanceof new null return super switch this throw true try typeof var void while with yield\").split(\" \");\n  var coffeescriptKeywords = (\"and break catch class continue delete do else extends false finally for \" +\n                  \"if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes\").split(\" \");\n\n  function forAllProps(obj, callback) {\n    if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) {\n      for (var name in obj) callback(name)\n    } else {\n      for (var o = obj; o; o = Object.getPrototypeOf(o))\n        Object.getOwnPropertyNames(o).forEach(callback)\n    }\n  }\n\n  function getCompletions(token, context, keywords, options) {\n    var found = [], start = token.string, global = options && options.globalScope || window;\n    function maybeAdd(str) {\n      if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str);\n    }\n    function gatherCompletions(obj) {\n      if (typeof obj == \"string\") forEach(stringProps, maybeAdd);\n      else if (obj instanceof Array) forEach(arrayProps, maybeAdd);\n      else if (obj instanceof Function) forEach(funcProps, maybeAdd);\n      forAllProps(obj, maybeAdd)\n    }\n\n    if (context && context.length) {\n      // If this is a property, see if it belongs to some object we can\n      // find in the current environment.\n      var obj = context.pop(), base;\n      if (obj.type && obj.type.indexOf(\"variable\") === 0) {\n        if (options && options.additionalContext)\n          base = options.additionalContext[obj.string];\n        if (!options || options.useGlobalScope !== false)\n          base = base || global[obj.string];\n      } else if (obj.type == \"string\") {\n        base = \"\";\n      } else if (obj.type == \"atom\") {\n        base = 1;\n      } else if (obj.type == \"function\") {\n        if (global.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') &&\n            (typeof global.jQuery == 'function'))\n          base = global.jQuery();\n        else if (global._ != null && (obj.string == '_') && (typeof global._ == 'function'))\n          base = global._();\n      }\n      while (base != null && context.length)\n        base = base[context.pop().string];\n      if (base != null) gatherCompletions(base);\n    } else {\n      // If not, just look in the global object, any local scope, and optional additional-context\n      // (reading into JS mode internals to get at the local and global variables)\n      for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name);\n      for (var c = token.state.context; c; c = c.prev)\n        for (var v = c.vars; v; v = v.next) maybeAdd(v.name)\n      for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name);\n      if (options && options.additionalContext != null)\n        for (var key in options.additionalContext)\n          maybeAdd(key);\n      if (!options || options.useGlobalScope !== false)\n        gatherCompletions(global);\n      forEach(keywords, maybeAdd);\n    }\n    return found;\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/hint/show-hint.css",
    "content": ".CodeMirror-hints {\n  position: absolute;\n  z-index: 10;\n  overflow: hidden;\n  list-style: none;\n\n  margin: 0;\n  padding: 2px;\n\n  -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  border-radius: 3px;\n  border: 1px solid silver;\n\n  background: white;\n  font-size: 90%;\n  font-family: monospace;\n\n  max-height: 20em;\n  overflow-y: auto;\n}\n\n.CodeMirror-hint {\n  margin: 0;\n  padding: 0 4px;\n  border-radius: 2px;\n  white-space: pre;\n  color: black;\n  cursor: pointer;\n}\n\nli.CodeMirror-hint-active {\n  background: #08f;\n  color: white;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/addon/hint/show-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// declare global: DOMRect\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var HINT_ELEMENT_CLASS        = \"CodeMirror-hint\";\n  var ACTIVE_HINT_ELEMENT_CLASS = \"CodeMirror-hint-active\";\n\n  // This is the old interface, kept around for now to stay\n  // backwards-compatible.\n  CodeMirror.showHint = function(cm, getHints, options) {\n    if (!getHints) return cm.showHint(options);\n    if (options && options.async) getHints.async = true;\n    var newOpts = {hint: getHints};\n    if (options) for (var prop in options) newOpts[prop] = options[prop];\n    return cm.showHint(newOpts);\n  };\n\n  CodeMirror.defineExtension(\"showHint\", function(options) {\n    options = parseOptions(this, this.getCursor(\"start\"), options);\n    var selections = this.listSelections()\n    if (selections.length > 1) return;\n    // By default, don't allow completion when something is selected.\n    // A hint function can have a `supportsSelection` property to\n    // indicate that it can handle selections.\n    if (this.somethingSelected()) {\n      if (!options.hint.supportsSelection) return;\n      // Don't try with cross-line selections\n      for (var i = 0; i < selections.length; i++)\n        if (selections[i].head.line != selections[i].anchor.line) return;\n    }\n\n    if (this.state.completionActive) this.state.completionActive.close();\n    var completion = this.state.completionActive = new Completion(this, options);\n    if (!completion.options.hint) return;\n\n    CodeMirror.signal(this, \"startCompletion\", this);\n    completion.update(true);\n  });\n\n  CodeMirror.defineExtension(\"closeHint\", function() {\n    if (this.state.completionActive) this.state.completionActive.close()\n  })\n\n  function Completion(cm, options) {\n    this.cm = cm;\n    this.options = options;\n    this.widget = null;\n    this.debounce = 0;\n    this.tick = 0;\n    this.startPos = this.cm.getCursor(\"start\");\n    this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;\n\n    if (this.options.updateOnCursorActivity) {\n      var self = this;\n      cm.on(\"cursorActivity\", this.activityFunc = function() { self.cursorActivity(); });\n    }\n  }\n\n  var requestAnimationFrame = window.requestAnimationFrame || function(fn) {\n    return setTimeout(fn, 1000/60);\n  };\n  var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;\n\n  Completion.prototype = {\n    close: function() {\n      if (!this.active()) return;\n      this.cm.state.completionActive = null;\n      this.tick = null;\n      if (this.options.updateOnCursorActivity) {\n        this.cm.off(\"cursorActivity\", this.activityFunc);\n      }\n\n      if (this.widget && this.data) CodeMirror.signal(this.data, \"close\");\n      if (this.widget) this.widget.close();\n      CodeMirror.signal(this.cm, \"endCompletion\", this.cm);\n    },\n\n    active: function() {\n      return this.cm.state.completionActive == this;\n    },\n\n    pick: function(data, i) {\n      var completion = data.list[i], self = this;\n      this.cm.operation(function() {\n        if (completion.hint)\n          completion.hint(self.cm, data, completion);\n        else\n          self.cm.replaceRange(getText(completion), completion.from || data.from,\n                               completion.to || data.to, \"complete\");\n        CodeMirror.signal(data, \"pick\", completion);\n        self.cm.scrollIntoView();\n      });\n      if (this.options.closeOnPick) {\n        this.close();\n      }\n    },\n\n    cursorActivity: function() {\n      if (this.debounce) {\n        cancelAnimationFrame(this.debounce);\n        this.debounce = 0;\n      }\n\n      var identStart = this.startPos;\n      if(this.data) {\n        identStart = this.data.from;\n      }\n\n      var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);\n      if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||\n          pos.ch < identStart.ch || this.cm.somethingSelected() ||\n          (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {\n        this.close();\n      } else {\n        var self = this;\n        this.debounce = requestAnimationFrame(function() {self.update();});\n        if (this.widget) this.widget.disable();\n      }\n    },\n\n    update: function(first) {\n      if (this.tick == null) return\n      var self = this, myTick = ++this.tick\n      fetchHints(this.options.hint, this.cm, this.options, function(data) {\n        if (self.tick == myTick) self.finishUpdate(data, first)\n      })\n    },\n\n    finishUpdate: function(data, first) {\n      if (this.data) CodeMirror.signal(this.data, \"update\");\n\n      var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);\n      if (this.widget) this.widget.close();\n\n      this.data = data;\n\n      if (data && data.list.length) {\n        if (picked && data.list.length == 1) {\n          this.pick(data, 0);\n        } else {\n          this.widget = new Widget(this, data);\n          CodeMirror.signal(data, \"shown\");\n        }\n      }\n    }\n  };\n\n  function parseOptions(cm, pos, options) {\n    var editor = cm.options.hintOptions;\n    var out = {};\n    for (var prop in defaultOptions) out[prop] = defaultOptions[prop];\n    if (editor) for (var prop in editor)\n      if (editor[prop] !== undefined) out[prop] = editor[prop];\n    if (options) for (var prop in options)\n      if (options[prop] !== undefined) out[prop] = options[prop];\n    if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)\n    return out;\n  }\n\n  function getText(completion) {\n    if (typeof completion == \"string\") return completion;\n    else return completion.text;\n  }\n\n  function buildKeyMap(completion, handle) {\n    var baseMap = {\n      Up: function() {handle.moveFocus(-1);},\n      Down: function() {handle.moveFocus(1);},\n      PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},\n      PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},\n      Home: function() {handle.setFocus(0);},\n      End: function() {handle.setFocus(handle.length - 1);},\n      Enter: handle.pick,\n      Tab: handle.pick,\n      Esc: handle.close\n    };\n\n    var mac = /Mac/.test(navigator.platform);\n\n    if (mac) {\n      baseMap[\"Ctrl-P\"] = function() {handle.moveFocus(-1);};\n      baseMap[\"Ctrl-N\"] = function() {handle.moveFocus(1);};\n    }\n\n    var custom = completion.options.customKeys;\n    var ourMap = custom ? {} : baseMap;\n    function addBinding(key, val) {\n      var bound;\n      if (typeof val != \"string\")\n        bound = function(cm) { return val(cm, handle); };\n      // This mechanism is deprecated\n      else if (baseMap.hasOwnProperty(val))\n        bound = baseMap[val];\n      else\n        bound = val;\n      ourMap[key] = bound;\n    }\n    if (custom)\n      for (var key in custom) if (custom.hasOwnProperty(key))\n        addBinding(key, custom[key]);\n    var extra = completion.options.extraKeys;\n    if (extra)\n      for (var key in extra) if (extra.hasOwnProperty(key))\n        addBinding(key, extra[key]);\n    return ourMap;\n  }\n\n  function getHintElement(hintsElement, el) {\n    while (el && el != hintsElement) {\n      if (el.nodeName.toUpperCase() === \"LI\" && el.parentNode == hintsElement) return el;\n      el = el.parentNode;\n    }\n  }\n\n  function Widget(completion, data) {\n    this.id = \"cm-complete-\" + Math.floor(Math.random(1e6))\n    this.completion = completion;\n    this.data = data;\n    this.picked = false;\n    var widget = this, cm = completion.cm;\n    var ownerDocument = cm.getInputField().ownerDocument;\n    var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow;\n\n    var hints = this.hints = ownerDocument.createElement(\"ul\");\n    hints.setAttribute(\"role\", \"listbox\")\n    hints.setAttribute(\"aria-expanded\", \"true\")\n    hints.id = this.id\n    var theme = completion.cm.options.theme;\n    hints.className = \"CodeMirror-hints \" + theme;\n    this.selectedHint = data.selectedHint || 0;\n\n    var completions = data.list;\n    for (var i = 0; i < completions.length; ++i) {\n      var elt = hints.appendChild(ownerDocument.createElement(\"li\")), cur = completions[i];\n      var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? \"\" : \" \" + ACTIVE_HINT_ELEMENT_CLASS);\n      if (cur.className != null) className = cur.className + \" \" + className;\n      elt.className = className;\n      if (i == this.selectedHint) elt.setAttribute(\"aria-selected\", \"true\")\n      elt.id = this.id + \"-\" + i\n      elt.setAttribute(\"role\", \"option\")\n      if (cur.render) cur.render(elt, data, cur);\n      else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur)));\n      elt.hintId = i;\n    }\n\n    var container = completion.options.container || ownerDocument.body;\n    var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);\n    var left = pos.left, top = pos.bottom, below = true;\n    var offsetLeft = 0, offsetTop = 0;\n    if (container !== ownerDocument.body) {\n      // We offset the cursor position because left and top are relative to the offsetParent's top left corner.\n      var isContainerPositioned = ['absolute', 'relative', 'fixed'].indexOf(parentWindow.getComputedStyle(container).position) !== -1;\n      var offsetParent = isContainerPositioned ? container : container.offsetParent;\n      var offsetParentPosition = offsetParent.getBoundingClientRect();\n      var bodyPosition = ownerDocument.body.getBoundingClientRect();\n      offsetLeft = (offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft);\n      offsetTop = (offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop);\n    }\n    hints.style.left = (left - offsetLeft) + \"px\";\n    hints.style.top = (top - offsetTop) + \"px\";\n\n    // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.\n    var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);\n    var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);\n    container.appendChild(hints);\n    cm.getInputField().setAttribute(\"aria-autocomplete\", \"list\")\n    cm.getInputField().setAttribute(\"aria-owns\", this.id)\n    cm.getInputField().setAttribute(\"aria-activedescendant\", this.id + \"-\" + this.selectedHint)\n\n    var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect();\n    var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false;\n\n    // Compute in the timeout to avoid reflow on init\n    var startScroll;\n    setTimeout(function() { startScroll = cm.getScrollInfo(); });\n\n    var overlapY = box.bottom - winH;\n    if (overlapY > 0) {\n      var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);\n      if (curTop - height > 0) { // Fits above cursor\n        hints.style.top = (top = pos.top - height - offsetTop) + \"px\";\n        below = false;\n      } else if (height > winH) {\n        hints.style.height = (winH - 5) + \"px\";\n        hints.style.top = (top = pos.bottom - box.top - offsetTop) + \"px\";\n        var cursor = cm.getCursor();\n        if (data.from.ch != cursor.ch) {\n          pos = cm.cursorCoords(cursor);\n          hints.style.left = (left = pos.left - offsetLeft) + \"px\";\n          box = hints.getBoundingClientRect();\n        }\n      }\n    }\n    var overlapX = box.right - winW;\n    if (scrolls) overlapX += cm.display.nativeBarWidth;\n    if (overlapX > 0) {\n      if (box.right - box.left > winW) {\n        hints.style.width = (winW - 5) + \"px\";\n        overlapX -= (box.right - box.left) - winW;\n      }\n      hints.style.left = (left = pos.left - overlapX - offsetLeft) + \"px\";\n    }\n    if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)\n      node.style.paddingRight = cm.display.nativeBarWidth + \"px\"\n\n    cm.addKeyMap(this.keyMap = buildKeyMap(completion, {\n      moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },\n      setFocus: function(n) { widget.changeActive(n); },\n      menuSize: function() { return widget.screenAmount(); },\n      length: completions.length,\n      close: function() { completion.close(); },\n      pick: function() { widget.pick(); },\n      data: data\n    }));\n\n    if (completion.options.closeOnUnfocus) {\n      var closingOnBlur;\n      cm.on(\"blur\", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });\n      cm.on(\"focus\", this.onFocus = function() { clearTimeout(closingOnBlur); });\n    }\n\n    cm.on(\"scroll\", this.onScroll = function() {\n      var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();\n      if (!startScroll) startScroll = cm.getScrollInfo();\n      var newTop = top + startScroll.top - curScroll.top;\n      var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop);\n      if (!below) point += hints.offsetHeight;\n      if (point <= editor.top || point >= editor.bottom) return completion.close();\n      hints.style.top = newTop + \"px\";\n      hints.style.left = (left + startScroll.left - curScroll.left) + \"px\";\n    });\n\n    CodeMirror.on(hints, \"dblclick\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}\n    });\n\n    CodeMirror.on(hints, \"click\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {\n        widget.changeActive(t.hintId);\n        if (completion.options.completeOnSingleClick) widget.pick();\n      }\n    });\n\n    CodeMirror.on(hints, \"mousedown\", function() {\n      setTimeout(function(){cm.focus();}, 20);\n    });\n\n    // The first hint doesn't need to be scrolled to on init\n    var selectedHintRange = this.getSelectedHintRange();\n    if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) {\n      this.scrollToActive();\n    }\n\n    CodeMirror.signal(data, \"select\", completions[this.selectedHint], hints.childNodes[this.selectedHint]);\n    return true;\n  }\n\n  Widget.prototype = {\n    close: function() {\n      if (this.completion.widget != this) return;\n      this.completion.widget = null;\n      if (this.hints.parentNode) this.hints.parentNode.removeChild(this.hints);\n      this.completion.cm.removeKeyMap(this.keyMap);\n      var input = this.completion.cm.getInputField()\n      input.removeAttribute(\"aria-activedescendant\")\n      input.removeAttribute(\"aria-owns\")\n\n      var cm = this.completion.cm;\n      if (this.completion.options.closeOnUnfocus) {\n        cm.off(\"blur\", this.onBlur);\n        cm.off(\"focus\", this.onFocus);\n      }\n      cm.off(\"scroll\", this.onScroll);\n    },\n\n    disable: function() {\n      this.completion.cm.removeKeyMap(this.keyMap);\n      var widget = this;\n      this.keyMap = {Enter: function() { widget.picked = true; }};\n      this.completion.cm.addKeyMap(this.keyMap);\n    },\n\n    pick: function() {\n      this.completion.pick(this.data, this.selectedHint);\n    },\n\n    changeActive: function(i, avoidWrap) {\n      if (i >= this.data.list.length)\n        i = avoidWrap ? this.data.list.length - 1 : 0;\n      else if (i < 0)\n        i = avoidWrap ? 0  : this.data.list.length - 1;\n      if (this.selectedHint == i) return;\n      var node = this.hints.childNodes[this.selectedHint];\n      if (node) {\n        node.className = node.className.replace(\" \" + ACTIVE_HINT_ELEMENT_CLASS, \"\");\n        node.removeAttribute(\"aria-selected\")\n      }\n      node = this.hints.childNodes[this.selectedHint = i];\n      node.className += \" \" + ACTIVE_HINT_ELEMENT_CLASS;\n      node.setAttribute(\"aria-selected\", \"true\")\n      this.completion.cm.getInputField().setAttribute(\"aria-activedescendant\", node.id)\n      this.scrollToActive()\n      CodeMirror.signal(this.data, \"select\", this.data.list[this.selectedHint], node);\n    },\n\n    scrollToActive: function() {\n      var selectedHintRange = this.getSelectedHintRange();\n      var node1 = this.hints.childNodes[selectedHintRange.from];\n      var node2 = this.hints.childNodes[selectedHintRange.to];\n      var firstNode = this.hints.firstChild;\n      if (node1.offsetTop < this.hints.scrollTop)\n        this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop;\n      else if (node2.offsetTop + node2.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)\n        this.hints.scrollTop = node2.offsetTop + node2.offsetHeight - this.hints.clientHeight + firstNode.offsetTop;\n    },\n\n    screenAmount: function() {\n      return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;\n    },\n\n    getSelectedHintRange: function() {\n      var margin = this.completion.options.scrollMargin || 0;\n      return {\n        from: Math.max(0, this.selectedHint - margin),\n        to: Math.min(this.data.list.length - 1, this.selectedHint + margin),\n      };\n    }\n  };\n\n  function applicableHelpers(cm, helpers) {\n    if (!cm.somethingSelected()) return helpers\n    var result = []\n    for (var i = 0; i < helpers.length; i++)\n      if (helpers[i].supportsSelection) result.push(helpers[i])\n    return result\n  }\n\n  function fetchHints(hint, cm, options, callback) {\n    if (hint.async) {\n      hint(cm, callback, options)\n    } else {\n      var result = hint(cm, options)\n      if (result && result.then) result.then(callback)\n      else callback(result)\n    }\n  }\n\n  function resolveAutoHints(cm, pos) {\n    var helpers = cm.getHelpers(pos, \"hint\"), words\n    if (helpers.length) {\n      var resolved = function(cm, callback, options) {\n        var app = applicableHelpers(cm, helpers);\n        function run(i) {\n          if (i == app.length) return callback(null)\n          fetchHints(app[i], cm, options, function(result) {\n            if (result && result.list.length > 0) callback(result)\n            else run(i + 1)\n          })\n        }\n        run(0)\n      }\n      resolved.async = true\n      resolved.supportsSelection = true\n      return resolved\n    } else if (words = cm.getHelper(cm.getCursor(), \"hintWords\")) {\n      return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }\n    } else if (CodeMirror.hint.anyword) {\n      return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }\n    } else {\n      return function() {}\n    }\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"auto\", {\n    resolve: resolveAutoHints\n  });\n\n  CodeMirror.registerHelper(\"hint\", \"fromList\", function(cm, options) {\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur)\n    var term, from = CodeMirror.Pos(cur.line, token.start), to = cur\n    if (token.start < cur.ch && /\\w/.test(token.string.charAt(cur.ch - token.start - 1))) {\n      term = token.string.substr(0, cur.ch - token.start)\n    } else {\n      term = \"\"\n      from = cur\n    }\n    var found = [];\n    for (var i = 0; i < options.words.length; i++) {\n      var word = options.words[i];\n      if (word.slice(0, term.length) == term)\n        found.push(word);\n    }\n\n    if (found.length) return {list: found, from: from, to: to};\n  });\n\n  CodeMirror.commands.autocomplete = CodeMirror.showHint;\n\n  var defaultOptions = {\n    hint: CodeMirror.hint.auto,\n    completeSingle: true,\n    alignWithWord: true,\n    closeCharacters: /[\\s()\\[\\]{};:>,]/,\n    closeOnPick: true,\n    closeOnUnfocus: true,\n    updateOnCursorActivity: true,\n    completeOnSingleClick: true,\n    container: null,\n    customKeys: null,\n    extraKeys: null,\n    paddingForScrollbar: true,\n    moveOnOverlap: true,\n  };\n\n  CodeMirror.defineOption(\"hintOptions\", null);\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/hint/sql-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../../mode/sql/sql\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../../mode/sql/sql\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var tables;\n  var defaultTable;\n  var keywords;\n  var identifierQuote;\n  var CONS = {\n    QUERY_DIV: \";\",\n    ALIAS_KEYWORD: \"AS\"\n  };\n  var Pos = CodeMirror.Pos, cmpPos = CodeMirror.cmpPos;\n\n  function isArray(val) { return Object.prototype.toString.call(val) == \"[object Array]\" }\n\n  function getKeywords(editor) {\n    var mode = editor.doc.modeOption;\n    if (mode === \"sql\") mode = \"text/x-sql\";\n    return CodeMirror.resolveMode(mode).keywords;\n  }\n\n  function getIdentifierQuote(editor) {\n    var mode = editor.doc.modeOption;\n    if (mode === \"sql\") mode = \"text/x-sql\";\n    return CodeMirror.resolveMode(mode).identifierQuote || \"`\";\n  }\n\n  function getText(item) {\n    return typeof item == \"string\" ? item : item.text;\n  }\n\n  function wrapTable(name, value) {\n    if (isArray(value)) value = {columns: value}\n    if (!value.text) value.text = name\n    return value\n  }\n\n  function parseTables(input) {\n    var result = {}\n    if (isArray(input)) {\n      for (var i = input.length - 1; i >= 0; i--) {\n        var item = input[i]\n        result[getText(item).toUpperCase()] = wrapTable(getText(item), item)\n      }\n    } else if (input) {\n      for (var name in input)\n        result[name.toUpperCase()] = wrapTable(name, input[name])\n    }\n    return result\n  }\n\n  function getTable(name) {\n    return tables[name.toUpperCase()]\n  }\n\n  function shallowClone(object) {\n    var result = {};\n    for (var key in object) if (object.hasOwnProperty(key))\n      result[key] = object[key];\n    return result;\n  }\n\n  function match(string, word) {\n    var len = string.length;\n    var sub = getText(word).substr(0, len);\n    return string.toUpperCase() === sub.toUpperCase();\n  }\n\n  function addMatches(result, search, wordlist, formatter) {\n    if (isArray(wordlist)) {\n      for (var i = 0; i < wordlist.length; i++)\n        if (match(search, wordlist[i])) result.push(formatter(wordlist[i]))\n    } else {\n      for (var word in wordlist) if (wordlist.hasOwnProperty(word)) {\n        var val = wordlist[word]\n        if (!val || val === true)\n          val = word\n        else\n          val = val.displayText ? {text: val.text, displayText: val.displayText} : val.text\n        if (match(search, val)) result.push(formatter(val))\n      }\n    }\n  }\n\n  function cleanName(name) {\n    // Get rid name from identifierQuote and preceding dot(.)\n    if (name.charAt(0) == \".\") {\n      name = name.substr(1);\n    }\n    // replace duplicated identifierQuotes with single identifierQuotes\n    // and remove single identifierQuotes\n    var nameParts = name.split(identifierQuote+identifierQuote);\n    for (var i = 0; i < nameParts.length; i++)\n      nameParts[i] = nameParts[i].replace(new RegExp(identifierQuote,\"g\"), \"\");\n    return nameParts.join(identifierQuote);\n  }\n\n  function insertIdentifierQuotes(name) {\n    var nameParts = getText(name).split(\".\");\n    for (var i = 0; i < nameParts.length; i++)\n      nameParts[i] = identifierQuote +\n        // duplicate identifierQuotes\n        nameParts[i].replace(new RegExp(identifierQuote,\"g\"), identifierQuote+identifierQuote) +\n        identifierQuote;\n    var escaped = nameParts.join(\".\");\n    if (typeof name == \"string\") return escaped;\n    name = shallowClone(name);\n    name.text = escaped;\n    return name;\n  }\n\n  function nameCompletion(cur, token, result, editor) {\n    // Try to complete table, column names and return start position of completion\n    var useIdentifierQuotes = false;\n    var nameParts = [];\n    var start = token.start;\n    var cont = true;\n    while (cont) {\n      cont = (token.string.charAt(0) == \".\");\n      useIdentifierQuotes = useIdentifierQuotes || (token.string.charAt(0) == identifierQuote);\n\n      start = token.start;\n      nameParts.unshift(cleanName(token.string));\n\n      token = editor.getTokenAt(Pos(cur.line, token.start));\n      if (token.string == \".\") {\n        cont = true;\n        token = editor.getTokenAt(Pos(cur.line, token.start));\n      }\n    }\n\n    // Try to complete table names\n    var string = nameParts.join(\".\");\n    addMatches(result, string, tables, function(w) {\n      return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n    });\n\n    // Try to complete columns from defaultTable\n    addMatches(result, string, defaultTable, function(w) {\n      return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n    });\n\n    // Try to complete columns\n    string = nameParts.pop();\n    var table = nameParts.join(\".\");\n\n    var alias = false;\n    var aliasTable = table;\n    // Check if table is available. If not, find table by Alias\n    if (!getTable(table)) {\n      var oldTable = table;\n      table = findTableByAlias(table, editor);\n      if (table !== oldTable) alias = true;\n    }\n\n    var columns = getTable(table);\n    if (columns && columns.columns)\n      columns = columns.columns;\n\n    if (columns) {\n      addMatches(result, string, columns, function(w) {\n        var tableInsert = table;\n        if (alias == true) tableInsert = aliasTable;\n        if (typeof w == \"string\") {\n          w = tableInsert + \".\" + w;\n        } else {\n          w = shallowClone(w);\n          w.text = tableInsert + \".\" + w.text;\n        }\n        return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n      });\n    }\n\n    return start;\n  }\n\n  function eachWord(lineText, f) {\n    var words = lineText.split(/\\s+/)\n    for (var i = 0; i < words.length; i++)\n      if (words[i]) f(words[i].replace(/[`,;]/g, ''))\n  }\n\n  function findTableByAlias(alias, editor) {\n    var doc = editor.doc;\n    var fullQuery = doc.getValue();\n    var aliasUpperCase = alias.toUpperCase();\n    var previousWord = \"\";\n    var table = \"\";\n    var separator = [];\n    var validRange = {\n      start: Pos(0, 0),\n      end: Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).length)\n    };\n\n    //add separator\n    var indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV);\n    while(indexOfSeparator != -1) {\n      separator.push(doc.posFromIndex(indexOfSeparator));\n      indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV, indexOfSeparator+1);\n    }\n    separator.unshift(Pos(0, 0));\n    separator.push(Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).text.length));\n\n    //find valid range\n    var prevItem = null;\n    var current = editor.getCursor()\n    for (var i = 0; i < separator.length; i++) {\n      if ((prevItem == null || cmpPos(current, prevItem) > 0) && cmpPos(current, separator[i]) <= 0) {\n        validRange = {start: prevItem, end: separator[i]};\n        break;\n      }\n      prevItem = separator[i];\n    }\n\n    if (validRange.start) {\n      var query = doc.getRange(validRange.start, validRange.end, false);\n\n      for (var i = 0; i < query.length; i++) {\n        var lineText = query[i];\n        eachWord(lineText, function(word) {\n          var wordUpperCase = word.toUpperCase();\n          if (wordUpperCase === aliasUpperCase && getTable(previousWord))\n            table = previousWord;\n          if (wordUpperCase !== CONS.ALIAS_KEYWORD)\n            previousWord = word;\n        });\n        if (table) break;\n      }\n    }\n    return table;\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"sql\", function(editor, options) {\n    tables = parseTables(options && options.tables)\n    var defaultTableName = options && options.defaultTable;\n    var disableKeywords = options && options.disableKeywords;\n    defaultTable = defaultTableName && getTable(defaultTableName);\n    keywords = getKeywords(editor);\n    identifierQuote = getIdentifierQuote(editor);\n\n    if (defaultTableName && !defaultTable)\n      defaultTable = findTableByAlias(defaultTableName, editor);\n\n    defaultTable = defaultTable || [];\n\n    if (defaultTable.columns)\n      defaultTable = defaultTable.columns;\n\n    var cur = editor.getCursor();\n    var result = [];\n    var token = editor.getTokenAt(cur), start, end, search;\n    if (token.end > cur.ch) {\n      token.end = cur.ch;\n      token.string = token.string.slice(0, cur.ch - token.start);\n    }\n\n    if (token.string.match(/^[.`\"'\\w@][\\w$#]*$/g)) {\n      search = token.string;\n      start = token.start;\n      end = token.end;\n    } else {\n      start = end = cur.ch;\n      search = \"\";\n    }\n    if (search.charAt(0) == \".\" || search.charAt(0) == identifierQuote) {\n      start = nameCompletion(cur, token, result, editor);\n    } else {\n      var objectOrClass = function(w, className) {\n        if (typeof w === \"object\") {\n          w.className = className;\n        } else {\n          w = { text: w, className: className };\n        }\n        return w;\n      };\n    addMatches(result, search, defaultTable, function(w) {\n        return objectOrClass(w, \"CodeMirror-hint-table CodeMirror-hint-default-table\");\n    });\n    addMatches(\n        result,\n        search,\n        tables, function(w) {\n          return objectOrClass(w, \"CodeMirror-hint-table\");\n        }\n    );\n    if (!disableKeywords)\n      addMatches(result, search, keywords, function(w) {\n          return objectOrClass(w.toUpperCase(), \"CodeMirror-hint-keyword\");\n      });\n  }\n\n    return {list: result, from: Pos(cur.line, start), to: Pos(cur.line, end)};\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/hint/xml-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var Pos = CodeMirror.Pos;\n\n  function matches(hint, typed, matchInMiddle) {\n    if (matchInMiddle) return hint.indexOf(typed) >= 0;\n    else return hint.lastIndexOf(typed, 0) == 0;\n  }\n\n  function getHints(cm, options) {\n    var tags = options && options.schemaInfo;\n    var quote = (options && options.quoteChar) || '\"';\n    var matchInMiddle = options && options.matchInMiddle;\n    if (!tags) return;\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur);\n    if (token.end > cur.ch) {\n      token.end = cur.ch;\n      token.string = token.string.slice(0, cur.ch - token.start);\n    }\n    var inner = CodeMirror.innerMode(cm.getMode(), token.state);\n    if (!inner.mode.xmlCurrentTag) return\n    var result = [], replaceToken = false, prefix;\n    var tag = /\\btag\\b/.test(token.type) && !/>$/.test(token.string);\n    var tagName = tag && /^\\w/.test(token.string), tagStart;\n\n    if (tagName) {\n      var before = cm.getLine(cur.line).slice(Math.max(0, token.start - 2), token.start);\n      var tagType = /<\\/$/.test(before) ? \"close\" : /<$/.test(before) ? \"open\" : null;\n      if (tagType) tagStart = token.start - (tagType == \"close\" ? 2 : 1);\n    } else if (tag && token.string == \"<\") {\n      tagType = \"open\";\n    } else if (tag && token.string == \"</\") {\n      tagType = \"close\";\n    }\n\n    var tagInfo = inner.mode.xmlCurrentTag(inner.state)\n    if (!tag && !tagInfo || tagType) {\n      if (tagName)\n        prefix = token.string;\n      replaceToken = tagType;\n      var context = inner.mode.xmlCurrentContext ? inner.mode.xmlCurrentContext(inner.state) : []\n      var inner = context.length && context[context.length - 1]\n      var curTag = inner && tags[inner]\n      var childList = inner ? curTag && curTag.children : tags[\"!top\"];\n      if (childList && tagType != \"close\") {\n        for (var i = 0; i < childList.length; ++i) if (!prefix || matches(childList[i], prefix, matchInMiddle))\n          result.push(\"<\" + childList[i]);\n      } else if (tagType != \"close\") {\n        for (var name in tags)\n          if (tags.hasOwnProperty(name) && name != \"!top\" && name != \"!attrs\" && (!prefix || matches(name, prefix, matchInMiddle)))\n            result.push(\"<\" + name);\n      }\n      if (inner && (!prefix || tagType == \"close\" && matches(inner, prefix, matchInMiddle)))\n        result.push(\"</\" + inner + \">\");\n    } else {\n      // Attribute completion\n      var curTag = tagInfo && tags[tagInfo.name], attrs = curTag && curTag.attrs;\n      var globalAttrs = tags[\"!attrs\"];\n      if (!attrs && !globalAttrs) return;\n      if (!attrs) {\n        attrs = globalAttrs;\n      } else if (globalAttrs) { // Combine tag-local and global attributes\n        var set = {};\n        for (var nm in globalAttrs) if (globalAttrs.hasOwnProperty(nm)) set[nm] = globalAttrs[nm];\n        for (var nm in attrs) if (attrs.hasOwnProperty(nm)) set[nm] = attrs[nm];\n        attrs = set;\n      }\n      if (token.type == \"string\" || token.string == \"=\") { // A value\n        var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)),\n                                 Pos(cur.line, token.type == \"string\" ? token.start : token.end));\n        var atName = before.match(/([^\\s\\u00a0=<>\\\"\\']+)=$/), atValues;\n        if (!atName || !attrs.hasOwnProperty(atName[1]) || !(atValues = attrs[atName[1]])) return;\n        if (typeof atValues == 'function') atValues = atValues.call(this, cm); // Functions can be used to supply values for autocomplete widget\n        if (token.type == \"string\") {\n          prefix = token.string;\n          var n = 0;\n          if (/['\"]/.test(token.string.charAt(0))) {\n            quote = token.string.charAt(0);\n            prefix = token.string.slice(1);\n            n++;\n          }\n          var len = token.string.length;\n          if (/['\"]/.test(token.string.charAt(len - 1))) {\n            quote = token.string.charAt(len - 1);\n            prefix = token.string.substr(n, len - 2);\n          }\n          if (n) { // an opening quote\n            var line = cm.getLine(cur.line);\n            if (line.length > token.end && line.charAt(token.end) == quote) token.end++; // include a closing quote\n          }\n          replaceToken = true;\n        }\n        var returnHintsFromAtValues = function(atValues) {\n          if (atValues)\n            for (var i = 0; i < atValues.length; ++i) if (!prefix || matches(atValues[i], prefix, matchInMiddle))\n              result.push(quote + atValues[i] + quote);\n          return returnHints();\n        };\n        if (atValues && atValues.then) return atValues.then(returnHintsFromAtValues);\n        return returnHintsFromAtValues(atValues);\n      } else { // An attribute name\n        if (token.type == \"attribute\") {\n          prefix = token.string;\n          replaceToken = true;\n        }\n        for (var attr in attrs) if (attrs.hasOwnProperty(attr) && (!prefix || matches(attr, prefix, matchInMiddle)))\n          result.push(attr);\n      }\n    }\n    function returnHints() {\n      return {\n        list: result,\n        from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur,\n        to: replaceToken ? Pos(cur.line, token.end) : cur\n      };\n    }\n    return returnHints();\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"xml\", getHints);\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/lint/coffeescript-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js\n\n// declare global: coffeelint\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.registerHelper(\"lint\", \"coffeescript\", function(text) {\n  var found = [];\n  if (!window.coffeelint) {\n    if (window.console) {\n      window.console.error(\"Error: window.coffeelint not defined, CodeMirror CoffeeScript linting cannot run.\");\n    }\n    return found;\n  }\n  var parseError = function(err) {\n    var loc = err.lineNumber;\n    found.push({from: CodeMirror.Pos(loc-1, 0),\n                to: CodeMirror.Pos(loc, 0),\n                severity: err.level,\n                message: err.message});\n  };\n  try {\n    var res = coffeelint.lint(text);\n    for(var i = 0; i < res.length; i++) {\n      parseError(res[i]);\n    }\n  } catch(e) {\n    found.push({from: CodeMirror.Pos(e.location.first_line, 0),\n                to: CodeMirror.Pos(e.location.last_line, e.location.last_column),\n                severity: 'error',\n                message: e.message});\n  }\n  return found;\n});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/lint/css-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Depends on csslint.js from https://github.com/stubbornella/csslint\n\n// declare global: CSSLint\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.registerHelper(\"lint\", \"css\", function(text, options) {\n  var found = [];\n  if (!window.CSSLint) {\n    if (window.console) {\n        window.console.error(\"Error: window.CSSLint not defined, CodeMirror CSS linting cannot run.\");\n    }\n    return found;\n  }\n  var results = CSSLint.verify(text, options), messages = results.messages, message = null;\n  for ( var i = 0; i < messages.length; i++) {\n    message = messages[i];\n    var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col;\n    found.push({\n      from: CodeMirror.Pos(startLine, startCol),\n      to: CodeMirror.Pos(endLine, endCol),\n      message: message.message,\n      severity : message.type\n    });\n  }\n  return found;\n});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/lint/html-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Depends on htmlhint.js from http://htmlhint.com/js/htmlhint.js\n\n// declare global: HTMLHint\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"htmlhint\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"htmlhint\"], mod);\n  else // Plain browser env\n    mod(CodeMirror, window.HTMLHint);\n})(function(CodeMirror, HTMLHint) {\n  \"use strict\";\n\n  var defaultRules = {\n    \"tagname-lowercase\": true,\n    \"attr-lowercase\": true,\n    \"attr-value-double-quotes\": true,\n    \"doctype-first\": false,\n    \"tag-pair\": true,\n    \"spec-char-escape\": true,\n    \"id-unique\": true,\n    \"src-not-empty\": true,\n    \"attr-no-duplication\": true\n  };\n\n  CodeMirror.registerHelper(\"lint\", \"html\", function(text, options) {\n    var found = [];\n    if (HTMLHint && !HTMLHint.verify) {\n      if(typeof HTMLHint.default !== 'undefined') {\n        HTMLHint = HTMLHint.default;\n      } else {\n        HTMLHint = HTMLHint.HTMLHint;\n      }\n    }\n    if (!HTMLHint) HTMLHint = window.HTMLHint;\n    if (!HTMLHint) {\n      if (window.console) {\n          window.console.error(\"Error: HTMLHint not found, not defined on window, or not available through define/require, CodeMirror HTML linting cannot run.\");\n      }\n      return found;\n    }\n    var messages = HTMLHint.verify(text, options && options.rules || defaultRules);\n    for (var i = 0; i < messages.length; i++) {\n      var message = messages[i];\n      var startLine = message.line - 1, endLine = message.line - 1, startCol = message.col - 1, endCol = message.col;\n      found.push({\n        from: CodeMirror.Pos(startLine, startCol),\n        to: CodeMirror.Pos(endLine, endCol),\n        message: message.message,\n        severity : message.type\n      });\n    }\n    return found;\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/lint/javascript-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Depends on jshint.js from https://github.com/jshint/jshint\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n  // declare global: JSHINT\n\n  function validator(text, options) {\n    if (!window.JSHINT) {\n      if (window.console) {\n        window.console.error(\"Error: window.JSHINT not defined, CodeMirror JavaScript linting cannot run.\");\n      }\n      return [];\n    }\n    if (!options.indent) // JSHint error.character actually is a column index, this fixes underlining on lines using tabs for indentation\n      options.indent = 1; // JSHint default value is 4\n    JSHINT(text, options, options.globals);\n    var errors = JSHINT.data().errors, result = [];\n    if (errors) parseErrors(errors, result);\n    return result;\n  }\n\n  CodeMirror.registerHelper(\"lint\", \"javascript\", validator);\n\n  function parseErrors(errors, output) {\n    for ( var i = 0; i < errors.length; i++) {\n      var error = errors[i];\n      if (error) {\n        if (error.line <= 0) {\n          if (window.console) {\n            window.console.warn(\"Cannot display JSHint error (invalid line \" + error.line + \")\", error);\n          }\n          continue;\n        }\n\n        var start = error.character - 1, end = start + 1;\n        if (error.evidence) {\n          var index = error.evidence.substring(start).search(/.\\b/);\n          if (index > -1) {\n            end += index;\n          }\n        }\n\n        // Convert to format expected by validation service\n        var hint = {\n          message: error.reason,\n          severity: error.code ? (error.code.startsWith('W') ? \"warning\" : \"error\") : \"error\",\n          from: CodeMirror.Pos(error.line - 1, start),\n          to: CodeMirror.Pos(error.line - 1, end)\n        };\n\n        output.push(hint);\n      }\n    }\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/lint/json-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Depends on jsonlint.js from https://github.com/zaach/jsonlint\n\n// declare global: jsonlint\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.registerHelper(\"lint\", \"json\", function(text) {\n  var found = [];\n  if (!window.jsonlint) {\n    if (window.console) {\n      window.console.error(\"Error: window.jsonlint not defined, CodeMirror JSON linting cannot run.\");\n    }\n    return found;\n  }\n  // for jsonlint's web dist jsonlint is exported as an object with a single property parser, of which parseError\n  // is a subproperty\n  var jsonlint = window.jsonlint.parser || window.jsonlint\n  jsonlint.parseError = function(str, hash) {\n    var loc = hash.loc;\n    found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column),\n                to: CodeMirror.Pos(loc.last_line - 1, loc.last_column),\n                message: str});\n  };\n  try { jsonlint.parse(text); }\n  catch(e) {}\n  return found;\n});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/lint/lint.css",
    "content": "/* The lint marker gutter */\n.CodeMirror-lint-markers {\n  width: 16px;\n}\n\n.CodeMirror-lint-tooltip {\n  background-color: #ffd;\n  border: 1px solid black;\n  border-radius: 4px 4px 4px 4px;\n  color: black;\n  font-family: monospace;\n  font-size: 10pt;\n  overflow: hidden;\n  padding: 2px 5px;\n  position: fixed;\n  white-space: pre;\n  white-space: pre-wrap;\n  z-index: 100;\n  max-width: 600px;\n  opacity: 0;\n  transition: opacity .4s;\n  -moz-transition: opacity .4s;\n  -webkit-transition: opacity .4s;\n  -o-transition: opacity .4s;\n  -ms-transition: opacity .4s;\n}\n\n.CodeMirror-lint-mark {\n  background-position: left bottom;\n  background-repeat: repeat-x;\n}\n\n.CodeMirror-lint-mark-warning {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=\");\n}\n\n.CodeMirror-lint-mark-error {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==\");\n}\n\n.CodeMirror-lint-marker {\n  background-position: center center;\n  background-repeat: no-repeat;\n  cursor: pointer;\n  display: inline-block;\n  height: 16px;\n  width: 16px;\n  vertical-align: middle;\n  position: relative;\n}\n\n.CodeMirror-lint-message {\n  padding-left: 18px;\n  background-position: top left;\n  background-repeat: no-repeat;\n}\n\n.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=\");\n}\n\n.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=\");\n}\n\n.CodeMirror-lint-marker-multiple {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC\");\n  background-repeat: no-repeat;\n  background-position: right bottom;\n  width: 100%; height: 100%;\n}\n\n.CodeMirror-lint-line-error {\n  background-color: rgba(183, 76, 81, 0.08);\n}\n\n.CodeMirror-lint-line-warning {\n  background-color: rgba(255, 211, 0, 0.1);\n}\n"
  },
  {
    "path": "public/vendor/codemirror/addon/lint/lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n  var GUTTER_ID = \"CodeMirror-lint-markers\";\n  var LINT_LINE_ID = \"CodeMirror-lint-line-\";\n\n  function showTooltip(cm, e, content) {\n    var tt = document.createElement(\"div\");\n    tt.className = \"CodeMirror-lint-tooltip cm-s-\" + cm.options.theme;\n    tt.appendChild(content.cloneNode(true));\n    if (cm.state.lint.options.selfContain)\n      cm.getWrapperElement().appendChild(tt);\n    else\n      document.body.appendChild(tt);\n\n    function position(e) {\n      if (!tt.parentNode) return CodeMirror.off(document, \"mousemove\", position);\n      tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + \"px\";\n      tt.style.left = (e.clientX + 5) + \"px\";\n    }\n    CodeMirror.on(document, \"mousemove\", position);\n    position(e);\n    if (tt.style.opacity != null) tt.style.opacity = 1;\n    return tt;\n  }\n  function rm(elt) {\n    if (elt.parentNode) elt.parentNode.removeChild(elt);\n  }\n  function hideTooltip(tt) {\n    if (!tt.parentNode) return;\n    if (tt.style.opacity == null) rm(tt);\n    tt.style.opacity = 0;\n    setTimeout(function() { rm(tt); }, 600);\n  }\n\n  function showTooltipFor(cm, e, content, node) {\n    var tooltip = showTooltip(cm, e, content);\n    function hide() {\n      CodeMirror.off(node, \"mouseout\", hide);\n      if (tooltip) { hideTooltip(tooltip); tooltip = null; }\n    }\n    var poll = setInterval(function() {\n      if (tooltip) for (var n = node;; n = n.parentNode) {\n        if (n && n.nodeType == 11) n = n.host;\n        if (n == document.body) return;\n        if (!n) { hide(); break; }\n      }\n      if (!tooltip) return clearInterval(poll);\n    }, 400);\n    CodeMirror.on(node, \"mouseout\", hide);\n  }\n\n  function LintState(cm, conf, hasGutter) {\n    this.marked = [];\n    if (conf instanceof Function) conf = {getAnnotations: conf};\n    if (!conf || conf === true) conf = {};\n    this.options = {};\n    this.linterOptions = conf.options || {};\n    for (var prop in defaults) this.options[prop] = defaults[prop];\n    for (var prop in conf) {\n      if (defaults.hasOwnProperty(prop)) {\n        if (conf[prop] != null) this.options[prop] = conf[prop];\n      } else if (!conf.options) {\n        this.linterOptions[prop] = conf[prop];\n      }\n    }\n    this.timeout = null;\n    this.hasGutter = hasGutter;\n    this.onMouseOver = function(e) { onMouseOver(cm, e); };\n    this.waitingFor = 0\n  }\n\n  var defaults = {\n    highlightLines: false,\n    tooltips: true,\n    delay: 500,\n    lintOnChange: true,\n    getAnnotations: null,\n    async: false,\n    selfContain: null,\n    formatAnnotation: null,\n    onUpdateLinting: null\n  }\n\n  function clearMarks(cm) {\n    var state = cm.state.lint;\n    if (state.hasGutter) cm.clearGutter(GUTTER_ID);\n    if (state.options.highlightLines) clearErrorLines(cm);\n    for (var i = 0; i < state.marked.length; ++i)\n      state.marked[i].clear();\n    state.marked.length = 0;\n  }\n\n  function clearErrorLines(cm) {\n    cm.eachLine(function(line) {\n      var has = line.wrapClass && /\\bCodeMirror-lint-line-\\w+\\b/.exec(line.wrapClass);\n      if (has) cm.removeLineClass(line, \"wrap\", has[0]);\n    })\n  }\n\n  function makeMarker(cm, labels, severity, multiple, tooltips) {\n    var marker = document.createElement(\"div\"), inner = marker;\n    marker.className = \"CodeMirror-lint-marker CodeMirror-lint-marker-\" + severity;\n    if (multiple) {\n      inner = marker.appendChild(document.createElement(\"div\"));\n      inner.className = \"CodeMirror-lint-marker CodeMirror-lint-marker-multiple\";\n    }\n\n    if (tooltips != false) CodeMirror.on(inner, \"mouseover\", function(e) {\n      showTooltipFor(cm, e, labels, inner);\n    });\n\n    return marker;\n  }\n\n  function getMaxSeverity(a, b) {\n    if (a == \"error\") return a;\n    else return b;\n  }\n\n  function groupByLine(annotations) {\n    var lines = [];\n    for (var i = 0; i < annotations.length; ++i) {\n      var ann = annotations[i], line = ann.from.line;\n      (lines[line] || (lines[line] = [])).push(ann);\n    }\n    return lines;\n  }\n\n  function annotationTooltip(ann) {\n    var severity = ann.severity;\n    if (!severity) severity = \"error\";\n    var tip = document.createElement(\"div\");\n    tip.className = \"CodeMirror-lint-message CodeMirror-lint-message-\" + severity;\n    if (typeof ann.messageHTML != 'undefined') {\n      tip.innerHTML = ann.messageHTML;\n    } else {\n      tip.appendChild(document.createTextNode(ann.message));\n    }\n    return tip;\n  }\n\n  function lintAsync(cm, getAnnotations) {\n    var state = cm.state.lint\n    var id = ++state.waitingFor\n    function abort() {\n      id = -1\n      cm.off(\"change\", abort)\n    }\n    cm.on(\"change\", abort)\n    getAnnotations(cm.getValue(), function(annotations, arg2) {\n      cm.off(\"change\", abort)\n      if (state.waitingFor != id) return\n      if (arg2 && annotations instanceof CodeMirror) annotations = arg2\n      cm.operation(function() {updateLinting(cm, annotations)})\n    }, state.linterOptions, cm);\n  }\n\n  function startLinting(cm) {\n    var state = cm.state.lint;\n    if (!state) return;\n    var options = state.options;\n    /*\n     * Passing rules in `options` property prevents JSHint (and other linters) from complaining\n     * about unrecognized rules like `onUpdateLinting`, `delay`, `lintOnChange`, etc.\n     */\n    var getAnnotations = options.getAnnotations || cm.getHelper(CodeMirror.Pos(0, 0), \"lint\");\n    if (!getAnnotations) return;\n    if (options.async || getAnnotations.async) {\n      lintAsync(cm, getAnnotations)\n    } else {\n      var annotations = getAnnotations(cm.getValue(), state.linterOptions, cm);\n      if (!annotations) return;\n      if (annotations.then) annotations.then(function(issues) {\n        cm.operation(function() {updateLinting(cm, issues)})\n      });\n      else cm.operation(function() {updateLinting(cm, annotations)})\n    }\n  }\n\n  function updateLinting(cm, annotationsNotSorted) {\n    var state = cm.state.lint;\n    if (!state) return;\n    var options = state.options;\n    clearMarks(cm);\n\n    var annotations = groupByLine(annotationsNotSorted);\n\n    for (var line = 0; line < annotations.length; ++line) {\n      var anns = annotations[line];\n      if (!anns) continue;\n\n      // filter out duplicate messages\n      var message = [];\n      anns = anns.filter(function(item) { return message.indexOf(item.message) > -1 ? false : message.push(item.message) });\n\n      var maxSeverity = null;\n      var tipLabel = state.hasGutter && document.createDocumentFragment();\n\n      for (var i = 0; i < anns.length; ++i) {\n        var ann = anns[i];\n        var severity = ann.severity;\n        if (!severity) severity = \"error\";\n        maxSeverity = getMaxSeverity(maxSeverity, severity);\n\n        if (options.formatAnnotation) ann = options.formatAnnotation(ann);\n        if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann));\n\n        if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, {\n          className: \"CodeMirror-lint-mark CodeMirror-lint-mark-\" + severity,\n          __annotation: ann\n        }));\n      }\n      // use original annotations[line] to show multiple messages\n      if (state.hasGutter)\n        cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, annotations[line].length > 1,\n                                                       options.tooltips));\n\n      if (options.highlightLines)\n        cm.addLineClass(line, \"wrap\", LINT_LINE_ID + maxSeverity);\n    }\n    if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm);\n  }\n\n  function onChange(cm) {\n    var state = cm.state.lint;\n    if (!state) return;\n    clearTimeout(state.timeout);\n    state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay);\n  }\n\n  function popupTooltips(cm, annotations, e) {\n    var target = e.target || e.srcElement;\n    var tooltip = document.createDocumentFragment();\n    for (var i = 0; i < annotations.length; i++) {\n      var ann = annotations[i];\n      tooltip.appendChild(annotationTooltip(ann));\n    }\n    showTooltipFor(cm, e, tooltip, target);\n  }\n\n  function onMouseOver(cm, e) {\n    var target = e.target || e.srcElement;\n    if (!/\\bCodeMirror-lint-mark-/.test(target.className)) return;\n    var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2;\n    var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, \"client\"));\n\n    var annotations = [];\n    for (var i = 0; i < spans.length; ++i) {\n      var ann = spans[i].__annotation;\n      if (ann) annotations.push(ann);\n    }\n    if (annotations.length) popupTooltips(cm, annotations, e);\n  }\n\n  CodeMirror.defineOption(\"lint\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      clearMarks(cm);\n      if (cm.state.lint.options.lintOnChange !== false)\n        cm.off(\"change\", onChange);\n      CodeMirror.off(cm.getWrapperElement(), \"mouseover\", cm.state.lint.onMouseOver);\n      clearTimeout(cm.state.lint.timeout);\n      delete cm.state.lint;\n    }\n\n    if (val) {\n      var gutters = cm.getOption(\"gutters\"), hasLintGutter = false;\n      for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true;\n      var state = cm.state.lint = new LintState(cm, val, hasLintGutter);\n      if (state.options.lintOnChange)\n        cm.on(\"change\", onChange);\n      if (state.options.tooltips != false && state.options.tooltips != \"gutter\")\n        CodeMirror.on(cm.getWrapperElement(), \"mouseover\", state.onMouseOver);\n\n      startLinting(cm);\n    }\n  });\n\n  CodeMirror.defineExtension(\"performLint\", function() {\n    startLinting(this);\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/lint/yaml-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\n// Depends on js-yaml.js from https://github.com/nodeca/js-yaml\n\n// declare global: jsyaml\n\nCodeMirror.registerHelper(\"lint\", \"yaml\", function(text) {\n  var found = [];\n  if (!window.jsyaml) {\n    if (window.console) {\n      window.console.error(\"Error: window.jsyaml not defined, CodeMirror YAML linting cannot run.\");\n    }\n    return found;\n  }\n  try { jsyaml.loadAll(text); }\n  catch(e) {\n      var loc = e.mark,\n          // js-yaml YAMLException doesn't always provide an accurate lineno\n          // e.g., when there are multiple yaml docs\n          // ---\n          // ---\n          // foo:bar\n          from = loc ? CodeMirror.Pos(loc.line, loc.column) : CodeMirror.Pos(0, 0),\n          to = from;\n      found.push({ from: from, to: to, message: e.message });\n  }\n  return found;\n});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/merge/merge.css",
    "content": ".CodeMirror-merge {\n  position: relative;\n  border: 1px solid #ddd;\n  white-space: pre;\n}\n\n.CodeMirror-merge, .CodeMirror-merge .CodeMirror {\n  height: 350px;\n}\n\n.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; }\n.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; }\n.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; }\n.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; }\n\n.CodeMirror-merge-pane {\n  display: inline-block;\n  white-space: normal;\n  vertical-align: top;\n}\n.CodeMirror-merge-pane-rightmost {\n  position: absolute;\n  right: 0px;\n  z-index: 1;\n}\n\n.CodeMirror-merge-gap {\n  z-index: 2;\n  display: inline-block;\n  height: 100%;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow: hidden;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #ddd;\n  position: relative;\n  background: #f8f8f8;\n}\n\n.CodeMirror-merge-scrolllock-wrap {\n  position: absolute;\n  bottom: 0; left: 50%;\n}\n.CodeMirror-merge-scrolllock {\n  position: relative;\n  left: -50%;\n  cursor: pointer;\n  color: #555;\n  line-height: 1;\n}\n.CodeMirror-merge-scrolllock:after {\n  content: \"\\21db\\00a0\\00a0\\21da\";\n}\n.CodeMirror-merge-scrolllock.CodeMirror-merge-scrolllock-enabled:after {\n  content: \"\\21db\\21da\";\n}\n\n.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {\n  position: absolute;\n  left: 0; top: 0;\n  right: 0; bottom: 0;\n  line-height: 1;\n}\n\n.CodeMirror-merge-copy {\n  position: absolute;\n  cursor: pointer;\n  color: #44c;\n  z-index: 3;\n}\n\n.CodeMirror-merge-copy-reverse {\n  position: absolute;\n  cursor: pointer;\n  color: #44c;\n}\n\n.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; }\n.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; }\n\n.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);\n  background-position: bottom left;\n  background-repeat: repeat-x;\n}\n\n.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);\n  background-position: bottom left;\n  background-repeat: repeat-x;\n}\n\n.CodeMirror-merge-r-chunk { background: #ffffe0; }\n.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; }\n.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; }\n.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; }\n\n.CodeMirror-merge-l-chunk { background: #eef; }\n.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; }\n.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; }\n.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; }\n\n.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; }\n.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; }\n.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; }\n\n.CodeMirror-merge-collapsed-widget:before {\n  content: \"(...)\";\n}\n.CodeMirror-merge-collapsed-widget {\n  cursor: pointer;\n  color: #88b;\n  background: #eef;\n  border: 1px solid #ddf;\n  font-size: 90%;\n  padding: 0 3px;\n  border-radius: 4px;\n}\n.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; }\n"
  },
  {
    "path": "public/vendor/codemirror/addon/merge/merge.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\")); // Note non-packaged dependency diff_match_patch\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"diff_match_patch\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n  var Pos = CodeMirror.Pos;\n  var svgNS = \"http://www.w3.org/2000/svg\";\n\n  function DiffView(mv, type) {\n    this.mv = mv;\n    this.type = type;\n    this.classes = type == \"left\"\n      ? {chunk: \"CodeMirror-merge-l-chunk\",\n         start: \"CodeMirror-merge-l-chunk-start\",\n         end: \"CodeMirror-merge-l-chunk-end\",\n         insert: \"CodeMirror-merge-l-inserted\",\n         del: \"CodeMirror-merge-l-deleted\",\n         connect: \"CodeMirror-merge-l-connect\"}\n      : {chunk: \"CodeMirror-merge-r-chunk\",\n         start: \"CodeMirror-merge-r-chunk-start\",\n         end: \"CodeMirror-merge-r-chunk-end\",\n         insert: \"CodeMirror-merge-r-inserted\",\n         del: \"CodeMirror-merge-r-deleted\",\n         connect: \"CodeMirror-merge-r-connect\"};\n  }\n\n  DiffView.prototype = {\n    constructor: DiffView,\n    init: function(pane, orig, options) {\n      this.edit = this.mv.edit;\n      ;(this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this);\n      this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options)));\n      if (this.mv.options.connect == \"align\") {\n        if (!this.edit.state.trackAlignable) this.edit.state.trackAlignable = new TrackAlignable(this.edit)\n        this.orig.state.trackAlignable = new TrackAlignable(this.orig)\n      }\n      this.lockButton.title = this.edit.phrase(\"Toggle locked scrolling\");\n\n      this.orig.state.diffViews = [this];\n      var classLocation = options.chunkClassLocation || \"background\";\n      if (Object.prototype.toString.call(classLocation) != \"[object Array]\") classLocation = [classLocation]\n      this.classes.classLocation = classLocation\n\n      this.diff = getDiff(asString(orig), asString(options.value), this.mv.options.ignoreWhitespace);\n      this.chunks = getChunks(this.diff);\n      this.diffOutOfDate = this.dealigned = false;\n      this.needsScrollSync = null\n\n      this.showDifferences = options.showDifferences !== false;\n    },\n    registerEvents: function(otherDv) {\n      this.forceUpdate = registerUpdate(this);\n      setScrollLock(this, true, false);\n      registerScroll(this, otherDv);\n    },\n    setShowDifferences: function(val) {\n      val = val !== false;\n      if (val != this.showDifferences) {\n        this.showDifferences = val;\n        this.forceUpdate(\"full\");\n      }\n    }\n  };\n\n  function ensureDiff(dv) {\n    if (dv.diffOutOfDate) {\n      dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue(), dv.mv.options.ignoreWhitespace);\n      dv.chunks = getChunks(dv.diff);\n      dv.diffOutOfDate = false;\n      CodeMirror.signal(dv.edit, \"updateDiff\", dv.diff);\n    }\n  }\n\n  var updating = false;\n  function registerUpdate(dv) {\n    var edit = {from: 0, to: 0, marked: []};\n    var orig = {from: 0, to: 0, marked: []};\n    var debounceChange, updatingFast = false;\n    function update(mode) {\n      updating = true;\n      updatingFast = false;\n      if (mode == \"full\") {\n        if (dv.svg) clear(dv.svg);\n        if (dv.copyButtons) clear(dv.copyButtons);\n        clearMarks(dv.edit, edit.marked, dv.classes);\n        clearMarks(dv.orig, orig.marked, dv.classes);\n        edit.from = edit.to = orig.from = orig.to = 0;\n      }\n      ensureDiff(dv);\n      if (dv.showDifferences) {\n        updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);\n        updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);\n      }\n\n      if (dv.mv.options.connect == \"align\")\n        alignChunks(dv);\n      makeConnections(dv);\n      if (dv.needsScrollSync != null) syncScroll(dv, dv.needsScrollSync)\n\n      updating = false;\n    }\n    function setDealign(fast) {\n      if (updating) return;\n      dv.dealigned = true;\n      set(fast);\n    }\n    function set(fast) {\n      if (updating || updatingFast) return;\n      clearTimeout(debounceChange);\n      if (fast === true) updatingFast = true;\n      debounceChange = setTimeout(update, fast === true ? 20 : 250);\n    }\n    function change(_cm, change) {\n      if (!dv.diffOutOfDate) {\n        dv.diffOutOfDate = true;\n        edit.from = edit.to = orig.from = orig.to = 0;\n      }\n      // Update faster when a line was added/removed\n      setDealign(change.text.length - 1 != change.to.line - change.from.line);\n    }\n    function swapDoc() {\n      dv.diffOutOfDate = true;\n      dv.dealigned = true;\n      update(\"full\");\n    }\n    dv.edit.on(\"change\", change);\n    dv.orig.on(\"change\", change);\n    dv.edit.on(\"swapDoc\", swapDoc);\n    dv.orig.on(\"swapDoc\", swapDoc);\n    if (dv.mv.options.connect == \"align\") {\n      CodeMirror.on(dv.edit.state.trackAlignable, \"realign\", setDealign)\n      CodeMirror.on(dv.orig.state.trackAlignable, \"realign\", setDealign)\n    }\n    dv.edit.on(\"viewportChange\", function() { set(false); });\n    dv.orig.on(\"viewportChange\", function() { set(false); });\n    update();\n    return update;\n  }\n\n  function registerScroll(dv, otherDv) {\n    dv.edit.on(\"scroll\", function() {\n      syncScroll(dv, true) && makeConnections(dv);\n    });\n    dv.orig.on(\"scroll\", function() {\n      syncScroll(dv, false) && makeConnections(dv);\n      if (otherDv) syncScroll(otherDv, true) && makeConnections(otherDv);\n    });\n  }\n\n  function syncScroll(dv, toOrig) {\n    // Change handler will do a refresh after a timeout when diff is out of date\n    if (dv.diffOutOfDate) {\n      if (dv.lockScroll && dv.needsScrollSync == null) dv.needsScrollSync = toOrig\n      return false\n    }\n    dv.needsScrollSync = null\n    if (!dv.lockScroll) return true;\n    var editor, other, now = +new Date;\n    if (toOrig) { editor = dv.edit; other = dv.orig; }\n    else { editor = dv.orig; other = dv.edit; }\n    // Don't take action if the position of this editor was recently set\n    // (to prevent feedback loops)\n    if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 250 > now) return false;\n\n    var sInfo = editor.getScrollInfo();\n    if (dv.mv.options.connect == \"align\") {\n      targetPos = sInfo.top;\n    } else {\n      var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen;\n      var mid = editor.lineAtHeight(midY, \"local\");\n      var around = chunkBoundariesAround(dv.chunks, mid, toOrig);\n      var off = getOffsets(editor, toOrig ? around.edit : around.orig);\n      var offOther = getOffsets(other, toOrig ? around.orig : around.edit);\n      var ratio = (midY - off.top) / (off.bot - off.top);\n      var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top);\n\n      var botDist, mix;\n      // Some careful tweaking to make sure no space is left out of view\n      // when scrolling to top or bottom.\n      if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) {\n        targetPos = targetPos * mix + sInfo.top * (1 - mix);\n      } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) {\n        var otherInfo = other.getScrollInfo();\n        var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos;\n        if (botDistOther > botDist && (mix = botDist / halfScreen) < 1)\n          targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix);\n      }\n    }\n\n    other.scrollTo(sInfo.left, targetPos);\n    other.state.scrollSetAt = now;\n    other.state.scrollSetBy = dv;\n    return true;\n  }\n\n  function getOffsets(editor, around) {\n    var bot = around.after;\n    if (bot == null) bot = editor.lastLine() + 1;\n    return {top: editor.heightAtLine(around.before || 0, \"local\"),\n            bot: editor.heightAtLine(bot, \"local\")};\n  }\n\n  function setScrollLock(dv, val, action) {\n    dv.lockScroll = val;\n    if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv);\n    (val ? CodeMirror.addClass : CodeMirror.rmClass)(dv.lockButton, \"CodeMirror-merge-scrolllock-enabled\");\n  }\n\n  // Updating the marks for editor content\n\n  function removeClass(editor, line, classes) {\n    var locs = classes.classLocation\n    for (var i = 0; i < locs.length; i++) {\n      editor.removeLineClass(line, locs[i], classes.chunk);\n      editor.removeLineClass(line, locs[i], classes.start);\n      editor.removeLineClass(line, locs[i], classes.end);\n    }\n  }\n\n  function clearMarks(editor, arr, classes) {\n    for (var i = 0; i < arr.length; ++i) {\n      var mark = arr[i];\n      if (mark instanceof CodeMirror.TextMarker)\n        mark.clear();\n      else if (mark.parent)\n        removeClass(editor, mark, classes);\n    }\n    arr.length = 0;\n  }\n\n  // FIXME maybe add a margin around viewport to prevent too many updates\n  function updateMarks(editor, diff, state, type, classes) {\n    var vp = editor.getViewport();\n    editor.operation(function() {\n      if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {\n        clearMarks(editor, state.marked, classes);\n        markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes);\n        state.from = vp.from; state.to = vp.to;\n      } else {\n        if (vp.from < state.from) {\n          markChanges(editor, diff, type, state.marked, vp.from, state.from, classes);\n          state.from = vp.from;\n        }\n        if (vp.to > state.to) {\n          markChanges(editor, diff, type, state.marked, state.to, vp.to, classes);\n          state.to = vp.to;\n        }\n      }\n    });\n  }\n\n  function addClass(editor, lineNr, classes, main, start, end) {\n    var locs = classes.classLocation, line = editor.getLineHandle(lineNr);\n    for (var i = 0; i < locs.length; i++) {\n      if (main) editor.addLineClass(line, locs[i], classes.chunk);\n      if (start) editor.addLineClass(line, locs[i], classes.start);\n      if (end) editor.addLineClass(line, locs[i], classes.end);\n    }\n    return line;\n  }\n\n  function markChanges(editor, diff, type, marks, from, to, classes) {\n    var pos = Pos(0, 0);\n    var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1));\n    var cls = type == DIFF_DELETE ? classes.del : classes.insert;\n    function markChunk(start, end) {\n      var bfrom = Math.max(from, start), bto = Math.min(to, end);\n      for (var i = bfrom; i < bto; ++i)\n        marks.push(addClass(editor, i, classes, true, i == start, i == end - 1));\n      // When the chunk is empty, make sure a horizontal line shows up\n      if (start == end && bfrom == end && bto == end) {\n        if (bfrom)\n          marks.push(addClass(editor, bfrom - 1, classes, false, false, true));\n        else\n          marks.push(addClass(editor, bfrom, classes, false, true, false));\n      }\n    }\n\n    var chunkStart = 0, pending = false;\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i], tp = part[0], str = part[1];\n      if (tp == DIFF_EQUAL) {\n        var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1);\n        moveOver(pos, str);\n        var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0);\n        if (cleanTo > cleanFrom) {\n          if (pending) { markChunk(chunkStart, cleanFrom); pending = false }\n          chunkStart = cleanTo;\n        }\n      } else {\n        pending = true\n        if (tp == type) {\n          var end = moveOver(pos, str, true);\n          var a = posMax(top, pos), b = posMin(bot, end);\n          if (!posEq(a, b))\n            marks.push(editor.markText(a, b, {className: cls}));\n          pos = end;\n        }\n      }\n    }\n    if (pending) markChunk(chunkStart, pos.line + 1);\n  }\n\n  // Updating the gap between editor and original\n\n  function makeConnections(dv) {\n    if (!dv.showDifferences) return;\n\n    if (dv.svg) {\n      clear(dv.svg);\n      var w = dv.gap.offsetWidth;\n      attrs(dv.svg, \"width\", w, \"height\", dv.gap.offsetHeight);\n    }\n    if (dv.copyButtons) clear(dv.copyButtons);\n\n    var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport();\n    var outerTop = dv.mv.wrap.getBoundingClientRect().top\n    var sTopEdit = outerTop - dv.edit.getScrollerElement().getBoundingClientRect().top + dv.edit.getScrollInfo().top\n    var sTopOrig = outerTop - dv.orig.getScrollerElement().getBoundingClientRect().top + dv.orig.getScrollInfo().top;\n    for (var i = 0; i < dv.chunks.length; i++) {\n      var ch = dv.chunks[i];\n      if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from &&\n          ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from)\n        drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w);\n    }\n  }\n\n  function getMatchingOrigLine(editLine, chunks) {\n    var editStart = 0, origStart = 0;\n    for (var i = 0; i < chunks.length; i++) {\n      var chunk = chunks[i];\n      if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null;\n      if (chunk.editFrom > editLine) break;\n      editStart = chunk.editTo;\n      origStart = chunk.origTo;\n    }\n    return origStart + (editLine - editStart);\n  }\n\n  // Combines information about chunks and widgets/markers to return\n  // an array of lines, in a single editor, that probably need to be\n  // aligned with their counterparts in the editor next to it.\n  function alignableFor(cm, chunks, isOrig) {\n    var tracker = cm.state.trackAlignable\n    var start = cm.firstLine(), trackI = 0\n    var result = []\n    for (var i = 0;; i++) {\n      var chunk = chunks[i]\n      var chunkStart = !chunk ? 1e9 : isOrig ? chunk.origFrom : chunk.editFrom\n      for (; trackI < tracker.alignable.length; trackI += 2) {\n        var n = tracker.alignable[trackI] + 1\n        if (n <= start) continue\n        if (n <= chunkStart) result.push(n)\n        else break\n      }\n      if (!chunk) break\n      result.push(start = isOrig ? chunk.origTo : chunk.editTo)\n    }\n    return result\n  }\n\n  // Given information about alignable lines in two editors, fill in\n  // the result (an array of three-element arrays) to reflect the\n  // lines that need to be aligned with each other.\n  function mergeAlignable(result, origAlignable, chunks, setIndex) {\n    var rI = 0, origI = 0, chunkI = 0, diff = 0\n    outer: for (;; rI++) {\n      var nextR = result[rI], nextO = origAlignable[origI]\n      if (!nextR && nextO == null) break\n\n      var rLine = nextR ? nextR[0] : 1e9, oLine = nextO == null ? 1e9 : nextO\n      while (chunkI < chunks.length) {\n        var chunk = chunks[chunkI]\n        if (chunk.origFrom <= oLine && chunk.origTo > oLine) {\n          origI++\n          rI--\n          continue outer;\n        }\n        if (chunk.editTo > rLine) {\n          if (chunk.editFrom <= rLine) continue outer;\n          break\n        }\n        diff += (chunk.origTo - chunk.origFrom) - (chunk.editTo - chunk.editFrom)\n        chunkI++\n      }\n      if (rLine == oLine - diff) {\n        nextR[setIndex] = oLine\n        origI++\n      } else if (rLine < oLine - diff) {\n        nextR[setIndex] = rLine + diff\n      } else {\n        var record = [oLine - diff, null, null]\n        record[setIndex] = oLine\n        result.splice(rI, 0, record)\n        origI++\n      }\n    }\n  }\n\n  function findAlignedLines(dv, other) {\n    var alignable = alignableFor(dv.edit, dv.chunks, false), result = []\n    if (other) for (var i = 0, j = 0; i < other.chunks.length; i++) {\n      var n = other.chunks[i].editTo\n      while (j < alignable.length && alignable[j] < n) j++\n      if (j == alignable.length || alignable[j] != n) alignable.splice(j++, 0, n)\n    }\n    for (var i = 0; i < alignable.length; i++)\n      result.push([alignable[i], null, null])\n\n    mergeAlignable(result, alignableFor(dv.orig, dv.chunks, true), dv.chunks, 1)\n    if (other)\n      mergeAlignable(result, alignableFor(other.orig, other.chunks, true), other.chunks, 2)\n\n    return result\n  }\n\n  function alignChunks(dv, force) {\n    if (!dv.dealigned && !force) return;\n    if (!dv.orig.curOp) return dv.orig.operation(function() {\n      alignChunks(dv, force);\n    });\n\n    dv.dealigned = false;\n    var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left;\n    if (other) {\n      ensureDiff(other);\n      other.dealigned = false;\n    }\n    var linesToAlign = findAlignedLines(dv, other);\n\n    // Clear old aligners\n    var aligners = dv.mv.aligners;\n    for (var i = 0; i < aligners.length; i++)\n      aligners[i].clear();\n    aligners.length = 0;\n\n    var cm = [dv.edit, dv.orig], scroll = [], offset = []\n    if (other) cm.push(other.orig);\n    for (var i = 0; i < cm.length; i++) {\n      scroll.push(cm[i].getScrollInfo().top);\n      offset.push(-cm[i].getScrollerElement().getBoundingClientRect().top)\n    }\n\n    if (offset[0] != offset[1] || cm.length == 3 && offset[1] != offset[2])\n      alignLines(cm, offset, [0, 0, 0], aligners)\n    for (var ln = 0; ln < linesToAlign.length; ln++)\n      alignLines(cm, offset, linesToAlign[ln], aligners);\n\n    for (var i = 0; i < cm.length; i++)\n      cm[i].scrollTo(null, scroll[i]);\n  }\n\n  function alignLines(cm, cmOffset, lines, aligners) {\n    var maxOffset = -1e8, offset = [];\n    for (var i = 0; i < cm.length; i++) if (lines[i] != null) {\n      var off = cm[i].heightAtLine(lines[i], \"local\") - cmOffset[i];\n      offset[i] = off;\n      maxOffset = Math.max(maxOffset, off);\n    }\n    for (var i = 0; i < cm.length; i++) if (lines[i] != null) {\n      var diff = maxOffset - offset[i];\n      if (diff > 1)\n        aligners.push(padAbove(cm[i], lines[i], diff));\n    }\n  }\n\n  function padAbove(cm, line, size) {\n    var above = true;\n    if (line > cm.lastLine()) {\n      line--;\n      above = false;\n    }\n    var elt = document.createElement(\"div\");\n    elt.className = \"CodeMirror-merge-spacer\";\n    elt.style.height = size + \"px\"; elt.style.minWidth = \"1px\";\n    return cm.addLineWidget(line, elt, {height: size, above: above, mergeSpacer: true, handleMouseEvents: true});\n  }\n\n  function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) {\n    var flip = dv.type == \"left\";\n    var top = dv.orig.heightAtLine(chunk.origFrom, \"local\", true) - sTopOrig;\n    if (dv.svg) {\n      var topLpx = top;\n      var topRpx = dv.edit.heightAtLine(chunk.editFrom, \"local\", true) - sTopEdit;\n      if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; }\n      var botLpx = dv.orig.heightAtLine(chunk.origTo, \"local\", true) - sTopOrig;\n      var botRpx = dv.edit.heightAtLine(chunk.editTo, \"local\", true) - sTopEdit;\n      if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; }\n      var curveTop = \" C \" + w/2 + \" \" + topRpx + \" \" + w/2 + \" \" + topLpx + \" \" + (w + 2) + \" \" + topLpx;\n      var curveBot = \" C \" + w/2 + \" \" + botLpx + \" \" + w/2 + \" \" + botRpx + \" -1 \" + botRpx;\n      attrs(dv.svg.appendChild(document.createElementNS(svgNS, \"path\")),\n            \"d\", \"M -1 \" + topRpx + curveTop + \" L \" + (w + 2) + \" \" + botLpx + curveBot + \" z\",\n            \"class\", dv.classes.connect);\n    }\n    if (dv.copyButtons) {\n      var copy = dv.copyButtons.appendChild(elt(\"div\", dv.type == \"left\" ? \"\\u21dd\" : \"\\u21dc\",\n                                                \"CodeMirror-merge-copy\"));\n      var editOriginals = dv.mv.options.allowEditingOriginals;\n      copy.title = dv.edit.phrase(editOriginals ? \"Push to left\" : \"Revert chunk\");\n      copy.chunk = chunk;\n      copy.style.top = (chunk.origTo > chunk.origFrom ? top : dv.edit.heightAtLine(chunk.editFrom, \"local\") - sTopEdit) + \"px\";\n      copy.setAttribute(\"role\", \"button\");\n\n      if (editOriginals) {\n        var topReverse = dv.edit.heightAtLine(chunk.editFrom, \"local\") - sTopEdit;\n        var copyReverse = dv.copyButtons.appendChild(elt(\"div\", dv.type == \"right\" ? \"\\u21dd\" : \"\\u21dc\",\n                                                         \"CodeMirror-merge-copy-reverse\"));\n        copyReverse.title = \"Push to right\";\n        copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo,\n                             origFrom: chunk.editFrom, origTo: chunk.editTo};\n        copyReverse.style.top = topReverse + \"px\";\n        dv.type == \"right\" ? copyReverse.style.left = \"2px\" : copyReverse.style.right = \"2px\";\n        copyReverse.setAttribute(\"role\", \"button\");\n      }\n    }\n  }\n\n  function copyChunk(dv, to, from, chunk) {\n    if (dv.diffOutOfDate) return;\n    var origStart = chunk.origTo > from.lastLine() ? Pos(chunk.origFrom - 1) : Pos(chunk.origFrom, 0)\n    var origEnd = Pos(chunk.origTo, 0)\n    var editStart = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0)\n    var editEnd = Pos(chunk.editTo, 0)\n    var handler = dv.mv.options.revertChunk\n    if (handler)\n      handler(dv.mv, from, origStart, origEnd, to, editStart, editEnd)\n    else\n      to.replaceRange(from.getRange(origStart, origEnd), editStart, editEnd)\n  }\n\n  // Merge view, containing 0, 1, or 2 diff views.\n\n  var MergeView = CodeMirror.MergeView = function(node, options) {\n    if (!(this instanceof MergeView)) return new MergeView(node, options);\n\n    this.options = options;\n    var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight;\n\n    var hasLeft = origLeft != null, hasRight = origRight != null;\n    var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0);\n    var wrap = [], left = this.left = null, right = this.right = null;\n    var self = this;\n\n    if (hasLeft) {\n      left = this.left = new DiffView(this, \"left\");\n      var leftPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-left\");\n      wrap.push(leftPane);\n      wrap.push(buildGap(left));\n    }\n\n    var editPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-editor\");\n    wrap.push(editPane);\n\n    if (hasRight) {\n      right = this.right = new DiffView(this, \"right\");\n      wrap.push(buildGap(right));\n      var rightPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-right\");\n      wrap.push(rightPane);\n    }\n\n    (hasRight ? rightPane : editPane).className += \" CodeMirror-merge-pane-rightmost\";\n\n    wrap.push(elt(\"div\", null, null, \"height: 0; clear: both;\"));\n\n    var wrapElt = this.wrap = node.appendChild(elt(\"div\", wrap, \"CodeMirror-merge CodeMirror-merge-\" + panes + \"pane\"));\n    this.edit = CodeMirror(editPane, copyObj(options));\n\n    if (left) left.init(leftPane, origLeft, options);\n    if (right) right.init(rightPane, origRight, options);\n    if (options.collapseIdentical)\n      this.editor().operation(function() {\n        collapseIdenticalStretches(self, options.collapseIdentical);\n      });\n    if (options.connect == \"align\") {\n      this.aligners = [];\n      alignChunks(this.left || this.right, true);\n    }\n    if (left) left.registerEvents(right)\n    if (right) right.registerEvents(left)\n\n\n    var onResize = function() {\n      if (left) makeConnections(left);\n      if (right) makeConnections(right);\n    };\n    CodeMirror.on(window, \"resize\", onResize);\n    var resizeInterval = setInterval(function() {\n      for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {}\n      if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, \"resize\", onResize); }\n    }, 5000);\n  };\n\n  function buildGap(dv) {\n    var lock = dv.lockButton = elt(\"div\", null, \"CodeMirror-merge-scrolllock\");\n    lock.setAttribute(\"role\", \"button\");\n    var lockWrap = elt(\"div\", [lock], \"CodeMirror-merge-scrolllock-wrap\");\n    CodeMirror.on(lock, \"click\", function() { setScrollLock(dv, !dv.lockScroll); });\n    var gapElts = [lockWrap];\n    if (dv.mv.options.revertButtons !== false) {\n      dv.copyButtons = elt(\"div\", null, \"CodeMirror-merge-copybuttons-\" + dv.type);\n      CodeMirror.on(dv.copyButtons, \"click\", function(e) {\n        var node = e.target || e.srcElement;\n        if (!node.chunk) return;\n        if (node.className == \"CodeMirror-merge-copy-reverse\") {\n          copyChunk(dv, dv.orig, dv.edit, node.chunk);\n          return;\n        }\n        copyChunk(dv, dv.edit, dv.orig, node.chunk);\n      });\n      gapElts.unshift(dv.copyButtons);\n    }\n    if (dv.mv.options.connect != \"align\") {\n      var svg = document.createElementNS && document.createElementNS(svgNS, \"svg\");\n      if (svg && !svg.createSVGRect) svg = null;\n      dv.svg = svg;\n      if (svg) gapElts.push(svg);\n    }\n\n    return dv.gap = elt(\"div\", gapElts, \"CodeMirror-merge-gap\");\n  }\n\n  MergeView.prototype = {\n    constructor: MergeView,\n    editor: function() { return this.edit; },\n    rightOriginal: function() { return this.right && this.right.orig; },\n    leftOriginal: function() { return this.left && this.left.orig; },\n    setShowDifferences: function(val) {\n      if (this.right) this.right.setShowDifferences(val);\n      if (this.left) this.left.setShowDifferences(val);\n    },\n    rightChunks: function() {\n      if (this.right) { ensureDiff(this.right); return this.right.chunks; }\n    },\n    leftChunks: function() {\n      if (this.left) { ensureDiff(this.left); return this.left.chunks; }\n    }\n  };\n\n  function asString(obj) {\n    if (typeof obj == \"string\") return obj;\n    else return obj.getValue();\n  }\n\n  // Operations on diffs\n  var dmp;\n  function getDiff(a, b, ignoreWhitespace) {\n    if (!dmp) dmp = new diff_match_patch();\n\n    var diff = dmp.diff_main(a, b);\n    // The library sometimes leaves in empty parts, which confuse the algorithm\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i];\n      if (ignoreWhitespace ? !/[^ \\t]/.test(part[1]) : !part[1]) {\n        diff.splice(i--, 1);\n      } else if (i && diff[i - 1][0] == part[0]) {\n        diff.splice(i--, 1);\n        diff[i][1] += part[1];\n      }\n    }\n    return diff;\n  }\n\n  function getChunks(diff) {\n    var chunks = [];\n    if (!diff.length) return chunks;\n    var startEdit = 0, startOrig = 0;\n    var edit = Pos(0, 0), orig = Pos(0, 0);\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i], tp = part[0];\n      if (tp == DIFF_EQUAL) {\n        var startOff = !startOfLineClean(diff, i) || edit.line < startEdit || orig.line < startOrig ? 1 : 0;\n        var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff;\n        moveOver(edit, part[1], null, orig);\n        var endOff = endOfLineClean(diff, i) ? 1 : 0;\n        var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff;\n        if (cleanToEdit > cleanFromEdit) {\n          if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig,\n                              editFrom: startEdit, editTo: cleanFromEdit});\n          startEdit = cleanToEdit; startOrig = cleanToOrig;\n        }\n      } else {\n        moveOver(tp == DIFF_INSERT ? edit : orig, part[1]);\n      }\n    }\n    if (startEdit <= edit.line || startOrig <= orig.line)\n      chunks.push({origFrom: startOrig, origTo: orig.line + 1,\n                   editFrom: startEdit, editTo: edit.line + 1});\n    return chunks;\n  }\n\n  function endOfLineClean(diff, i) {\n    if (i == diff.length - 1) return true;\n    var next = diff[i + 1][1];\n    if ((next.length == 1 && i < diff.length - 2) || next.charCodeAt(0) != 10) return false;\n    if (i == diff.length - 2) return true;\n    next = diff[i + 2][1];\n    return (next.length > 1 || i == diff.length - 3) && next.charCodeAt(0) == 10;\n  }\n\n  function startOfLineClean(diff, i) {\n    if (i == 0) return true;\n    var last = diff[i - 1][1];\n    if (last.charCodeAt(last.length - 1) != 10) return false;\n    if (i == 1) return true;\n    last = diff[i - 2][1];\n    return last.charCodeAt(last.length - 1) == 10;\n  }\n\n  function chunkBoundariesAround(chunks, n, nInEdit) {\n    var beforeE, afterE, beforeO, afterO;\n    for (var i = 0; i < chunks.length; i++) {\n      var chunk = chunks[i];\n      var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom;\n      var toLocal = nInEdit ? chunk.editTo : chunk.origTo;\n      if (afterE == null) {\n        if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; }\n        else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; }\n      }\n      if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; }\n      else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; }\n    }\n    return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}};\n  }\n\n  function collapseSingle(cm, from, to) {\n    cm.addLineClass(from, \"wrap\", \"CodeMirror-merge-collapsed-line\");\n    var widget = document.createElement(\"span\");\n    widget.className = \"CodeMirror-merge-collapsed-widget\";\n    widget.title = cm.phrase(\"Identical text collapsed. Click to expand.\");\n    var mark = cm.markText(Pos(from, 0), Pos(to - 1), {\n      inclusiveLeft: true,\n      inclusiveRight: true,\n      replacedWith: widget,\n      clearOnEnter: true\n    });\n    function clear() {\n      mark.clear();\n      cm.removeLineClass(from, \"wrap\", \"CodeMirror-merge-collapsed-line\");\n    }\n    if (mark.explicitlyCleared) clear();\n    CodeMirror.on(widget, \"click\", clear);\n    mark.on(\"clear\", clear);\n    CodeMirror.on(widget, \"click\", clear);\n    return {mark: mark, clear: clear};\n  }\n\n  function collapseStretch(size, editors) {\n    var marks = [];\n    function clear() {\n      for (var i = 0; i < marks.length; i++) marks[i].clear();\n    }\n    for (var i = 0; i < editors.length; i++) {\n      var editor = editors[i];\n      var mark = collapseSingle(editor.cm, editor.line, editor.line + size);\n      marks.push(mark);\n      mark.mark.on(\"clear\", clear);\n    }\n    return marks[0].mark;\n  }\n\n  function unclearNearChunks(dv, margin, off, clear) {\n    for (var i = 0; i < dv.chunks.length; i++) {\n      var chunk = dv.chunks[i];\n      for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) {\n        var pos = l + off;\n        if (pos >= 0 && pos < clear.length) clear[pos] = false;\n      }\n    }\n  }\n\n  function collapseIdenticalStretches(mv, margin) {\n    if (typeof margin != \"number\") margin = 2;\n    var clear = [], edit = mv.editor(), off = edit.firstLine();\n    for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true);\n    if (mv.left) unclearNearChunks(mv.left, margin, off, clear);\n    if (mv.right) unclearNearChunks(mv.right, margin, off, clear);\n\n    for (var i = 0; i < clear.length; i++) {\n      if (clear[i]) {\n        var line = i + off;\n        for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {}\n        if (size > margin) {\n          var editors = [{line: line, cm: edit}];\n          if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig});\n          if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig});\n          var mark = collapseStretch(size, editors);\n          if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark);\n        }\n      }\n    }\n  }\n\n  // General utilities\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) e.className = className;\n    if (style) e.style.cssText = style;\n    if (typeof content == \"string\") e.appendChild(document.createTextNode(content));\n    else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);\n    return e;\n  }\n\n  function clear(node) {\n    for (var count = node.childNodes.length; count > 0; --count)\n      node.removeChild(node.firstChild);\n  }\n\n  function attrs(elt) {\n    for (var i = 1; i < arguments.length; i += 2)\n      elt.setAttribute(arguments[i], arguments[i+1]);\n  }\n\n  function copyObj(obj, target) {\n    if (!target) target = {};\n    for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];\n    return target;\n  }\n\n  function moveOver(pos, str, copy, other) {\n    var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0;\n    for (;;) {\n      var nl = str.indexOf(\"\\n\", at);\n      if (nl == -1) break;\n      ++out.line;\n      if (other) ++other.line;\n      at = nl + 1;\n    }\n    out.ch = (at ? 0 : out.ch) + (str.length - at);\n    if (other) other.ch = (at ? 0 : other.ch) + (str.length - at);\n    return out;\n  }\n\n  // Tracks collapsed markers and line widgets, in order to be able to\n  // accurately align the content of two editors.\n\n  var F_WIDGET = 1, F_WIDGET_BELOW = 2, F_MARKER = 4\n\n  function TrackAlignable(cm) {\n    this.cm = cm\n    this.alignable = []\n    this.height = cm.doc.height\n    var self = this\n    cm.on(\"markerAdded\", function(_, marker) {\n      if (!marker.collapsed) return\n      var found = marker.find(1)\n      if (found != null) self.set(found.line, F_MARKER)\n    })\n    cm.on(\"markerCleared\", function(_, marker, _min, max) {\n      if (max != null && marker.collapsed)\n        self.check(max, F_MARKER, self.hasMarker)\n    })\n    cm.on(\"markerChanged\", this.signal.bind(this))\n    cm.on(\"lineWidgetAdded\", function(_, widget, lineNo) {\n      if (widget.mergeSpacer) return\n      if (widget.above) self.set(lineNo - 1, F_WIDGET_BELOW)\n      else self.set(lineNo, F_WIDGET)\n    })\n    cm.on(\"lineWidgetCleared\", function(_, widget, lineNo) {\n      if (widget.mergeSpacer) return\n      if (widget.above) self.check(lineNo - 1, F_WIDGET_BELOW, self.hasWidgetBelow)\n      else self.check(lineNo, F_WIDGET, self.hasWidget)\n    })\n    cm.on(\"lineWidgetChanged\", this.signal.bind(this))\n    cm.on(\"change\", function(_, change) {\n      var start = change.from.line, nBefore = change.to.line - change.from.line\n      var nAfter = change.text.length - 1, end = start + nAfter\n      if (nBefore || nAfter) self.map(start, nBefore, nAfter)\n      self.check(end, F_MARKER, self.hasMarker)\n      if (nBefore || nAfter) self.check(change.from.line, F_MARKER, self.hasMarker)\n    })\n    cm.on(\"viewportChange\", function() {\n      if (self.cm.doc.height != self.height) self.signal()\n    })\n  }\n\n  TrackAlignable.prototype = {\n    signal: function() {\n      CodeMirror.signal(this, \"realign\")\n      this.height = this.cm.doc.height\n    },\n\n    set: function(n, flags) {\n      var pos = -1\n      for (; pos < this.alignable.length; pos += 2) {\n        var diff = this.alignable[pos] - n\n        if (diff == 0) {\n          if ((this.alignable[pos + 1] & flags) == flags) return\n          this.alignable[pos + 1] |= flags\n          this.signal()\n          return\n        }\n        if (diff > 0) break\n      }\n      this.signal()\n      this.alignable.splice(pos, 0, n, flags)\n    },\n\n    find: function(n) {\n      for (var i = 0; i < this.alignable.length; i += 2)\n        if (this.alignable[i] == n) return i\n      return -1\n    },\n\n    check: function(n, flag, pred) {\n      var found = this.find(n)\n      if (found == -1 || !(this.alignable[found + 1] & flag)) return\n      if (!pred.call(this, n)) {\n        this.signal()\n        var flags = this.alignable[found + 1] & ~flag\n        if (flags) this.alignable[found + 1] = flags\n        else this.alignable.splice(found, 2)\n      }\n    },\n\n    hasMarker: function(n) {\n      var handle = this.cm.getLineHandle(n)\n      if (handle.markedSpans) for (var i = 0; i < handle.markedSpans.length; i++)\n        if (handle.markedSpans[i].marker.collapsed && handle.markedSpans[i].to != null)\n          return true\n      return false\n    },\n\n    hasWidget: function(n) {\n      var handle = this.cm.getLineHandle(n)\n      if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++)\n        if (!handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true\n      return false\n    },\n\n    hasWidgetBelow: function(n) {\n      if (n == this.cm.lastLine()) return false\n      var handle = this.cm.getLineHandle(n + 1)\n      if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++)\n        if (handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true\n      return false\n    },\n\n    map: function(from, nBefore, nAfter) {\n      var diff = nAfter - nBefore, to = from + nBefore, widgetFrom = -1, widgetTo = -1\n      for (var i = 0; i < this.alignable.length; i += 2) {\n        var n = this.alignable[i]\n        if (n == from && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetFrom = i\n        if (n == to && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetTo = i\n        if (n <= from) continue\n        else if (n < to) this.alignable.splice(i--, 2)\n        else this.alignable[i] += diff\n      }\n      if (widgetFrom > -1) {\n        var flags = this.alignable[widgetFrom + 1]\n        if (flags == F_WIDGET_BELOW) this.alignable.splice(widgetFrom, 2)\n        else this.alignable[widgetFrom + 1] = flags & ~F_WIDGET_BELOW\n      }\n      if (widgetTo > -1 && nAfter)\n        this.set(from + nAfter, F_WIDGET_BELOW)\n    }\n  }\n\n  function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; }\n  function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; }\n  function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }\n\n  function findPrevDiff(chunks, start, isOrig) {\n    for (var i = chunks.length - 1; i >= 0; i--) {\n      var chunk = chunks[i];\n      var to = (isOrig ? chunk.origTo : chunk.editTo) - 1;\n      if (to < start) return to;\n    }\n  }\n\n  function findNextDiff(chunks, start, isOrig) {\n    for (var i = 0; i < chunks.length; i++) {\n      var chunk = chunks[i];\n      var from = (isOrig ? chunk.origFrom : chunk.editFrom);\n      if (from > start) return from;\n    }\n  }\n\n  function goNearbyDiff(cm, dir) {\n    var found = null, views = cm.state.diffViews, line = cm.getCursor().line;\n    if (views) for (var i = 0; i < views.length; i++) {\n      var dv = views[i], isOrig = cm == dv.orig;\n      ensureDiff(dv);\n      var pos = dir < 0 ? findPrevDiff(dv.chunks, line, isOrig) : findNextDiff(dv.chunks, line, isOrig);\n      if (pos != null && (found == null || (dir < 0 ? pos > found : pos < found)))\n        found = pos;\n    }\n    if (found != null)\n      cm.setCursor(found, 0);\n    else\n      return CodeMirror.Pass;\n  }\n\n  CodeMirror.commands.goNextDiff = function(cm) {\n    return goNearbyDiff(cm, 1);\n  };\n  CodeMirror.commands.goPrevDiff = function(cm) {\n    return goNearbyDiff(cm, -1);\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/mode/loadmode.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), \"cjs\");\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], function(CM) { mod(CM, \"amd\"); });\n  else // Plain browser env\n    mod(CodeMirror, \"plain\");\n})(function(CodeMirror, env) {\n  if (!CodeMirror.modeURL) CodeMirror.modeURL = \"../mode/%N/%N.js\";\n\n  var loading = {};\n  function splitCallback(cont, n) {\n    var countDown = n;\n    return function() { if (--countDown == 0) cont(); };\n  }\n  function ensureDeps(mode, cont, options) {\n    var modeObj = CodeMirror.modes[mode], deps = modeObj && modeObj.dependencies;\n    if (!deps) return cont();\n    var missing = [];\n    for (var i = 0; i < deps.length; ++i) {\n      if (!CodeMirror.modes.hasOwnProperty(deps[i]))\n        missing.push(deps[i]);\n    }\n    if (!missing.length) return cont();\n    var split = splitCallback(cont, missing.length);\n    for (var i = 0; i < missing.length; ++i)\n      CodeMirror.requireMode(missing[i], split, options);\n  }\n\n  CodeMirror.requireMode = function(mode, cont, options) {\n    if (typeof mode != \"string\") mode = mode.name;\n    if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont, options);\n    if (loading.hasOwnProperty(mode)) return loading[mode].push(cont);\n\n    var file = options && options.path ? options.path(mode) : CodeMirror.modeURL.replace(/%N/g, mode);\n    if (options && options.loadMode) {\n      options.loadMode(file, function() { ensureDeps(mode, cont, options) })\n    } else if (env == \"plain\") {\n      var script = document.createElement(\"script\");\n      script.src = file;\n      var others = document.getElementsByTagName(\"script\")[0];\n      var list = loading[mode] = [cont];\n      CodeMirror.on(script, \"load\", function() {\n        ensureDeps(mode, function() {\n          for (var i = 0; i < list.length; ++i) list[i]();\n        }, options);\n      });\n      others.parentNode.insertBefore(script, others);\n    } else if (env == \"cjs\") {\n      require(file);\n      cont();\n    } else if (env == \"amd\") {\n      requirejs([file], cont);\n    }\n  };\n\n  CodeMirror.autoLoadMode = function(instance, mode, options) {\n    if (!CodeMirror.modes.hasOwnProperty(mode))\n      CodeMirror.requireMode(mode, function() {\n        instance.setOption(\"mode\", instance.getOption(\"mode\"));\n      }, options);\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/mode/multiplex.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.multiplexingMode = function(outer /*, others */) {\n  // Others should be {open, close, mode [, delimStyle] [, innerStyle] [, parseDelimiters]} objects\n  var others = Array.prototype.slice.call(arguments, 1);\n\n  function indexOf(string, pattern, from, returnEnd) {\n    if (typeof pattern == \"string\") {\n      var found = string.indexOf(pattern, from);\n      return returnEnd && found > -1 ? found + pattern.length : found;\n    }\n    var m = pattern.exec(from ? string.slice(from) : string);\n    return m ? m.index + from + (returnEnd ? m[0].length : 0) : -1;\n  }\n\n  return {\n    startState: function() {\n      return {\n        outer: CodeMirror.startState(outer),\n        innerActive: null,\n        inner: null,\n        startingInner: false\n      };\n    },\n\n    copyState: function(state) {\n      return {\n        outer: CodeMirror.copyState(outer, state.outer),\n        innerActive: state.innerActive,\n        inner: state.innerActive && CodeMirror.copyState(state.innerActive.mode, state.inner),\n        startingInner: state.startingInner\n      };\n    },\n\n    token: function(stream, state) {\n      if (!state.innerActive) {\n        var cutOff = Infinity, oldContent = stream.string;\n        for (var i = 0; i < others.length; ++i) {\n          var other = others[i];\n          var found = indexOf(oldContent, other.open, stream.pos);\n          if (found == stream.pos) {\n            if (!other.parseDelimiters) stream.match(other.open);\n            state.startingInner = !!other.parseDelimiters\n            state.innerActive = other;\n\n            // Get the outer indent, making sure to handle CodeMirror.Pass\n            var outerIndent = 0;\n            if (outer.indent) {\n              var possibleOuterIndent = outer.indent(state.outer, \"\", \"\");\n              if (possibleOuterIndent !== CodeMirror.Pass) outerIndent = possibleOuterIndent;\n            }\n\n            state.inner = CodeMirror.startState(other.mode, outerIndent);\n            return other.delimStyle && (other.delimStyle + \" \" + other.delimStyle + \"-open\");\n          } else if (found != -1 && found < cutOff) {\n            cutOff = found;\n          }\n        }\n        if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff);\n        var outerToken = outer.token(stream, state.outer);\n        if (cutOff != Infinity) stream.string = oldContent;\n        return outerToken;\n      } else {\n        var curInner = state.innerActive, oldContent = stream.string;\n        if (!curInner.close && stream.sol()) {\n          state.innerActive = state.inner = null;\n          return this.token(stream, state);\n        }\n        var found = curInner.close && !state.startingInner ?\n            indexOf(oldContent, curInner.close, stream.pos, curInner.parseDelimiters) : -1;\n        if (found == stream.pos && !curInner.parseDelimiters) {\n          stream.match(curInner.close);\n          state.innerActive = state.inner = null;\n          return curInner.delimStyle && (curInner.delimStyle + \" \" + curInner.delimStyle + \"-close\");\n        }\n        if (found > -1) stream.string = oldContent.slice(0, found);\n        var innerToken = curInner.mode.token(stream, state.inner);\n        if (found > -1) stream.string = oldContent;\n        else if (stream.pos > stream.start) state.startingInner = false\n\n        if (found == stream.pos && curInner.parseDelimiters)\n          state.innerActive = state.inner = null;\n\n        if (curInner.innerStyle) {\n          if (innerToken) innerToken = innerToken + \" \" + curInner.innerStyle;\n          else innerToken = curInner.innerStyle;\n        }\n\n        return innerToken;\n      }\n    },\n\n    indent: function(state, textAfter, line) {\n      var mode = state.innerActive ? state.innerActive.mode : outer;\n      if (!mode.indent) return CodeMirror.Pass;\n      return mode.indent(state.innerActive ? state.inner : state.outer, textAfter, line);\n    },\n\n    blankLine: function(state) {\n      var mode = state.innerActive ? state.innerActive.mode : outer;\n      if (mode.blankLine) {\n        mode.blankLine(state.innerActive ? state.inner : state.outer);\n      }\n      if (!state.innerActive) {\n        for (var i = 0; i < others.length; ++i) {\n          var other = others[i];\n          if (other.open === \"\\n\") {\n            state.innerActive = other;\n            state.inner = CodeMirror.startState(other.mode, mode.indent ? mode.indent(state.outer, \"\", \"\") : 0);\n          }\n        }\n      } else if (state.innerActive.close === \"\\n\") {\n        state.innerActive = state.inner = null;\n      }\n    },\n\n    electricChars: outer.electricChars,\n\n    innerMode: function(state) {\n      return state.inner ? {state: state.inner, mode: state.innerActive.mode} : {state: state.outer, mode: outer};\n    }\n  };\n};\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/mode/multiplex_test.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function() {\n  CodeMirror.defineMode(\"markdown_with_stex\", function(){\n    var inner = CodeMirror.getMode({}, \"stex\");\n    var outer = CodeMirror.getMode({}, \"markdown\");\n\n    var innerOptions = {\n      open: '$',\n      close: '$',\n      mode: inner,\n      delimStyle: 'delim',\n      innerStyle: 'inner'\n    };\n\n    return CodeMirror.multiplexingMode(outer, innerOptions);\n  });\n\n  var mode = CodeMirror.getMode({}, \"markdown_with_stex\");\n\n  function MT(name) {\n    test.mode(\n      name,\n      mode,\n      Array.prototype.slice.call(arguments, 1),\n      'multiplexing');\n  }\n\n  MT(\n    \"stexInsideMarkdown\",\n    \"[strong **Equation:**] [delim&delim-open $][inner&tag \\\\pi][delim&delim-close $]\");\n\n  CodeMirror.defineMode(\"identical_delim_multiplex\", function() {\n    return CodeMirror.multiplexingMode(CodeMirror.getMode({indentUnit: 2}, \"javascript\"), {\n      open: \"#\",\n      close: \"#\",\n      mode: CodeMirror.getMode({}, \"markdown\"),\n      parseDelimiters: true,\n      innerStyle: \"q\"\n    });\n  });\n\n  var mode2 = CodeMirror.getMode({}, \"identical_delim_multiplex\");\n\n  test.mode(\"identical_delimiters_with_parseDelimiters\", mode2, [\n    \"[keyword let] [def x] [operator =] [q #foo][q&em *bar*][q #];\"\n  ], \"multiplexing\")\n})();\n"
  },
  {
    "path": "public/vendor/codemirror/addon/mode/overlay.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.overlayMode = function(base, overlay, combine) {\n  return {\n    startState: function() {\n      return {\n        base: CodeMirror.startState(base),\n        overlay: CodeMirror.startState(overlay),\n        basePos: 0, baseCur: null,\n        overlayPos: 0, overlayCur: null,\n        streamSeen: null\n      };\n    },\n    copyState: function(state) {\n      return {\n        base: CodeMirror.copyState(base, state.base),\n        overlay: CodeMirror.copyState(overlay, state.overlay),\n        basePos: state.basePos, baseCur: null,\n        overlayPos: state.overlayPos, overlayCur: null\n      };\n    },\n\n    token: function(stream, state) {\n      if (stream != state.streamSeen ||\n          Math.min(state.basePos, state.overlayPos) < stream.start) {\n        state.streamSeen = stream;\n        state.basePos = state.overlayPos = stream.start;\n      }\n\n      if (stream.start == state.basePos) {\n        state.baseCur = base.token(stream, state.base);\n        state.basePos = stream.pos;\n      }\n      if (stream.start == state.overlayPos) {\n        stream.pos = stream.start;\n        state.overlayCur = overlay.token(stream, state.overlay);\n        state.overlayPos = stream.pos;\n      }\n      stream.pos = Math.min(state.basePos, state.overlayPos);\n\n      // state.overlay.combineTokens always takes precedence over combine,\n      // unless set to null\n      if (state.overlayCur == null) return state.baseCur;\n      else if (state.baseCur != null &&\n               state.overlay.combineTokens ||\n               combine && state.overlay.combineTokens == null)\n        return state.baseCur + \" \" + state.overlayCur;\n      else return state.overlayCur;\n    },\n\n    indent: base.indent && function(state, textAfter, line) {\n      return base.indent(state.base, textAfter, line);\n    },\n    electricChars: base.electricChars,\n\n    innerMode: function(state) { return {state: state.base, mode: base}; },\n\n    blankLine: function(state) {\n      var baseToken, overlayToken;\n      if (base.blankLine) baseToken = base.blankLine(state.base);\n      if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n\n      return overlayToken == null ?\n        baseToken :\n        (combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken);\n    }\n  };\n};\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/mode/simple.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineSimpleMode = function(name, states) {\n    CodeMirror.defineMode(name, function(config) {\n      return CodeMirror.simpleMode(config, states);\n    });\n  };\n\n  CodeMirror.simpleMode = function(config, states) {\n    ensureState(states, \"start\");\n    var states_ = {}, meta = states.meta || {}, hasIndentation = false;\n    for (var state in states) if (state != meta && states.hasOwnProperty(state)) {\n      var list = states_[state] = [], orig = states[state];\n      for (var i = 0; i < orig.length; i++) {\n        var data = orig[i];\n        list.push(new Rule(data, states));\n        if (data.indent || data.dedent) hasIndentation = true;\n      }\n    }\n    var mode = {\n      startState: function() {\n        return {state: \"start\", pending: null,\n                local: null, localState: null,\n                indent: hasIndentation ? [] : null};\n      },\n      copyState: function(state) {\n        var s = {state: state.state, pending: state.pending,\n                 local: state.local, localState: null,\n                 indent: state.indent && state.indent.slice(0)};\n        if (state.localState)\n          s.localState = CodeMirror.copyState(state.local.mode, state.localState);\n        if (state.stack)\n          s.stack = state.stack.slice(0);\n        for (var pers = state.persistentStates; pers; pers = pers.next)\n          s.persistentStates = {mode: pers.mode,\n                                spec: pers.spec,\n                                state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state),\n                                next: s.persistentStates};\n        return s;\n      },\n      token: tokenFunction(states_, config),\n      innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; },\n      indent: indentFunction(states_, meta)\n    };\n    if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop))\n      mode[prop] = meta[prop];\n    return mode;\n  };\n\n  function ensureState(states, name) {\n    if (!states.hasOwnProperty(name))\n      throw new Error(\"Undefined state \" + name + \" in simple mode\");\n  }\n\n  function toRegex(val, caret) {\n    if (!val) return /(?:)/;\n    var flags = \"\";\n    if (val instanceof RegExp) {\n      if (val.ignoreCase) flags = \"i\";\n      if (val.unicode) flags += \"u\"\n      val = val.source;\n    } else {\n      val = String(val);\n    }\n    return new RegExp((caret === false ? \"\" : \"^\") + \"(?:\" + val + \")\", flags);\n  }\n\n  function asToken(val) {\n    if (!val) return null;\n    if (val.apply) return val\n    if (typeof val == \"string\") return val.replace(/\\./g, \" \");\n    var result = [];\n    for (var i = 0; i < val.length; i++)\n      result.push(val[i] && val[i].replace(/\\./g, \" \"));\n    return result;\n  }\n\n  function Rule(data, states) {\n    if (data.next || data.push) ensureState(states, data.next || data.push);\n    this.regex = toRegex(data.regex);\n    this.token = asToken(data.token);\n    this.data = data;\n  }\n\n  function tokenFunction(states, config) {\n    return function(stream, state) {\n      if (state.pending) {\n        var pend = state.pending.shift();\n        if (state.pending.length == 0) state.pending = null;\n        stream.pos += pend.text.length;\n        return pend.token;\n      }\n\n      if (state.local) {\n        if (state.local.end && stream.match(state.local.end)) {\n          var tok = state.local.endToken || null;\n          state.local = state.localState = null;\n          return tok;\n        } else {\n          var tok = state.local.mode.token(stream, state.localState), m;\n          if (state.local.endScan && (m = state.local.endScan.exec(stream.current())))\n            stream.pos = stream.start + m.index;\n          return tok;\n        }\n      }\n\n      var curState = states[state.state];\n      for (var i = 0; i < curState.length; i++) {\n        var rule = curState[i];\n        var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex);\n        if (matches) {\n          if (rule.data.next) {\n            state.state = rule.data.next;\n          } else if (rule.data.push) {\n            (state.stack || (state.stack = [])).push(state.state);\n            state.state = rule.data.push;\n          } else if (rule.data.pop && state.stack && state.stack.length) {\n            state.state = state.stack.pop();\n          }\n\n          if (rule.data.mode)\n            enterLocalMode(config, state, rule.data.mode, rule.token);\n          if (rule.data.indent)\n            state.indent.push(stream.indentation() + config.indentUnit);\n          if (rule.data.dedent)\n            state.indent.pop();\n          var token = rule.token\n          if (token && token.apply) token = token(matches)\n          if (matches.length > 2 && rule.token && typeof rule.token != \"string\") {\n            for (var j = 2; j < matches.length; j++)\n              if (matches[j])\n                (state.pending || (state.pending = [])).push({text: matches[j], token: rule.token[j - 1]});\n            stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0));\n            return token[0];\n          } else if (token && token.join) {\n            return token[0];\n          } else {\n            return token;\n          }\n        }\n      }\n      stream.next();\n      return null;\n    };\n  }\n\n  function cmp(a, b) {\n    if (a === b) return true;\n    if (!a || typeof a != \"object\" || !b || typeof b != \"object\") return false;\n    var props = 0;\n    for (var prop in a) if (a.hasOwnProperty(prop)) {\n      if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false;\n      props++;\n    }\n    for (var prop in b) if (b.hasOwnProperty(prop)) props--;\n    return props == 0;\n  }\n\n  function enterLocalMode(config, state, spec, token) {\n    var pers;\n    if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next)\n      if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p;\n    var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec);\n    var lState = pers ? pers.state : CodeMirror.startState(mode);\n    if (spec.persistent && !pers)\n      state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates};\n\n    state.localState = lState;\n    state.local = {mode: mode,\n                   end: spec.end && toRegex(spec.end),\n                   endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false),\n                   endToken: token && token.join ? token[token.length - 1] : token};\n  }\n\n  function indexOf(val, arr) {\n    for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true;\n  }\n\n  function indentFunction(states, meta) {\n    return function(state, textAfter, line) {\n      if (state.local && state.local.mode.indent)\n        return state.local.mode.indent(state.localState, textAfter, line);\n      if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1)\n        return CodeMirror.Pass;\n\n      var pos = state.indent.length - 1, rules = states[state.state];\n      scan: for (;;) {\n        for (var i = 0; i < rules.length; i++) {\n          var rule = rules[i];\n          if (rule.data.dedent && rule.data.dedentIfLineStart !== false) {\n            var m = rule.regex.exec(textAfter);\n            if (m && m[0]) {\n              pos--;\n              if (rule.next || rule.push) rules = states[rule.next || rule.push];\n              textAfter = textAfter.slice(m[0].length);\n              continue scan;\n            }\n          }\n        }\n        break;\n      }\n      return pos < 0 ? 0 : state.indent[pos];\n    };\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/runmode/colorize.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./runmode\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./runmode\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var isBlock = /^(p|li|div|h\\\\d|pre|blockquote|td)$/;\n\n  function textContent(node, out) {\n    if (node.nodeType == 3) return out.push(node.nodeValue);\n    for (var ch = node.firstChild; ch; ch = ch.nextSibling) {\n      textContent(ch, out);\n      if (isBlock.test(node.nodeType)) out.push(\"\\n\");\n    }\n  }\n\n  CodeMirror.colorize = function(collection, defaultMode) {\n    if (!collection) collection = document.body.getElementsByTagName(\"pre\");\n\n    for (var i = 0; i < collection.length; ++i) {\n      var node = collection[i];\n      var mode = node.getAttribute(\"data-lang\") || defaultMode;\n      if (!mode) continue;\n\n      var text = [];\n      textContent(node, text);\n      node.innerHTML = \"\";\n      CodeMirror.runMode(text.join(\"\"), mode, node);\n\n      node.className += \" cm-s-default\";\n    }\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/runmode/runmode-standalone.js",
    "content": "(function () {\n  'use strict';\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  var modeMethods = {\n    __proto__: null,\n    modes: modes,\n    mimeModes: mimeModes,\n    defineMode: defineMode,\n    defineMIME: defineMIME,\n    resolveMode: resolveMode,\n    getMode: getMode,\n    modeExtensions: modeExtensions,\n    extendMode: extendMode,\n    copyState: copyState,\n    innerMode: innerMode,\n    startState: startState\n  };\n\n  // declare global: globalThis, CodeMirror\n\n  // Create a minimal CodeMirror needed to use runMode, and assign to root.\n  var root = typeof globalThis !== 'undefined' ? globalThis : window;\n  root.CodeMirror = {};\n\n  // Copy StringStream and mode methods into CodeMirror object.\n  CodeMirror.StringStream = StringStream;\n  for (var exported in modeMethods) { CodeMirror[exported] = modeMethods[exported]; }\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min;\n  CodeMirror.splitLines = function(string) { return string.split(/\\r?\\n|\\r/) };\n  CodeMirror.countColumn = countColumn;\n\n  CodeMirror.defaults = { indentUnit: 2 };\n\n  // CodeMirror, copyright (c) by Marijn Haverbeke and others\n  // Distributed under an MIT license: https://codemirror.net/LICENSE\n\n  (function(mod) {\n    if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n      { mod(require(\"../../lib/codemirror\")); }\n    else if (typeof define == \"function\" && define.amd) // AMD\n      { define([\"../../lib/codemirror\"], mod); }\n    else // Plain browser env\n      { mod(CodeMirror); }\n  })(function(CodeMirror) {\n\n  CodeMirror.runMode = function(string, modespec, callback, options) {\n    var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);\n    var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;\n\n    // Create a tokenizing callback function if passed-in callback is a DOM element.\n    if (callback.appendChild) {\n      var ie = /MSIE \\d/.test(navigator.userAgent);\n      var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);\n      var node = callback, col = 0;\n      node.innerHTML = \"\";\n      callback = function(text, style) {\n        if (text == \"\\n\") {\n          // Emitting LF or CRLF on IE8 or earlier results in an incorrect display.\n          // Emitting a carriage return makes everything ok.\n          node.appendChild(document.createTextNode(ie_lt9 ? '\\r' : text));\n          col = 0;\n          return;\n        }\n        var content = \"\";\n        // replace tabs\n        for (var pos = 0;;) {\n          var idx = text.indexOf(\"\\t\", pos);\n          if (idx == -1) {\n            content += text.slice(pos);\n            col += text.length - pos;\n            break;\n          } else {\n            col += idx - pos;\n            content += text.slice(pos, idx);\n            var size = tabSize - col % tabSize;\n            col += size;\n            for (var i = 0; i < size; ++i) { content += \" \"; }\n            pos = idx + 1;\n          }\n        }\n        // Create a node with token style and append it to the callback DOM element.\n        if (style) {\n          var sp = node.appendChild(document.createElement(\"span\"));\n          sp.className = \"cm-\" + style.replace(/ +/g, \" cm-\");\n          sp.appendChild(document.createTextNode(content));\n        } else {\n          node.appendChild(document.createTextNode(content));\n        }\n      };\n    }\n\n    var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);\n    for (var i = 0, e = lines.length; i < e; ++i) {\n      if (i) { callback(\"\\n\"); }\n      var stream = new CodeMirror.StringStream(lines[i], null, {\n        lookAhead: function(n) { return lines[i + n] },\n        baseToken: function() {}\n      });\n      if (!stream.string && mode.blankLine) { mode.blankLine(state); }\n      while (!stream.eol()) {\n        var style = mode.token(stream, state);\n        callback(stream.current(), style, i, stream.start, state, mode);\n        stream.start = stream.pos;\n      }\n    }\n  };\n\n  });\n\n}());\n"
  },
  {
    "path": "public/vendor/codemirror/addon/runmode/runmode.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.runMode = function(string, modespec, callback, options) {\n  var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);\n  var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;\n\n  // Create a tokenizing callback function if passed-in callback is a DOM element.\n  if (callback.appendChild) {\n    var ie = /MSIE \\d/.test(navigator.userAgent);\n    var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);\n    var node = callback, col = 0;\n    node.innerHTML = \"\";\n    callback = function(text, style) {\n      if (text == \"\\n\") {\n        // Emitting LF or CRLF on IE8 or earlier results in an incorrect display.\n        // Emitting a carriage return makes everything ok.\n        node.appendChild(document.createTextNode(ie_lt9 ? '\\r' : text));\n        col = 0;\n        return;\n      }\n      var content = \"\";\n      // replace tabs\n      for (var pos = 0;;) {\n        var idx = text.indexOf(\"\\t\", pos);\n        if (idx == -1) {\n          content += text.slice(pos);\n          col += text.length - pos;\n          break;\n        } else {\n          col += idx - pos;\n          content += text.slice(pos, idx);\n          var size = tabSize - col % tabSize;\n          col += size;\n          for (var i = 0; i < size; ++i) content += \" \";\n          pos = idx + 1;\n        }\n      }\n      // Create a node with token style and append it to the callback DOM element.\n      if (style) {\n        var sp = node.appendChild(document.createElement(\"span\"));\n        sp.className = \"cm-\" + style.replace(/ +/g, \" cm-\");\n        sp.appendChild(document.createTextNode(content));\n      } else {\n        node.appendChild(document.createTextNode(content));\n      }\n    };\n  }\n\n  var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);\n  for (var i = 0, e = lines.length; i < e; ++i) {\n    if (i) callback(\"\\n\");\n    var stream = new CodeMirror.StringStream(lines[i], null, {\n      lookAhead: function(n) { return lines[i + n] },\n      baseToken: function() {}\n    });\n    if (!stream.string && mode.blankLine) mode.blankLine(state);\n    while (!stream.eol()) {\n      var style = mode.token(stream, state);\n      callback(stream.current(), style, i, stream.start, state, mode);\n      stream.start = stream.pos;\n    }\n  }\n};\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/runmode/runmode.node.js",
    "content": "'use strict';\n\nfunction copyObj(obj, target, overwrite) {\n  if (!target) { target = {}; }\n  for (var prop in obj)\n    { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n      { target[prop] = obj[prop]; } }\n  return target\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countColumn(string, end, tabSize, startIndex, startValue) {\n  if (end == null) {\n    end = string.search(/[^\\s\\u00a0]/);\n    if (end == -1) { end = string.length; }\n  }\n  for (var i = startIndex || 0, n = startValue || 0;;) {\n    var nextTab = string.indexOf(\"\\t\", i);\n    if (nextTab < 0 || nextTab >= end)\n      { return n + (end - i) }\n    n += nextTab - i;\n    n += tabSize - (n % tabSize);\n    i = nextTab + 1;\n  }\n}\n\nfunction nothing() {}\n\nfunction createObj(base, props) {\n  var inst;\n  if (Object.create) {\n    inst = Object.create(base);\n  } else {\n    nothing.prototype = base;\n    inst = new nothing();\n  }\n  if (props) { copyObj(props, inst); }\n  return inst\n}\n\n// STRING STREAM\n\n// Fed to the mode parsers, provides helper functions to make\n// parsers more succinct.\n\nvar StringStream = function(string, tabSize, lineOracle) {\n  this.pos = this.start = 0;\n  this.string = string;\n  this.tabSize = tabSize || 8;\n  this.lastColumnPos = this.lastColumnValue = 0;\n  this.lineStart = 0;\n  this.lineOracle = lineOracle;\n};\n\nStringStream.prototype.eol = function () {return this.pos >= this.string.length};\nStringStream.prototype.sol = function () {return this.pos == this.lineStart};\nStringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\nStringStream.prototype.next = function () {\n  if (this.pos < this.string.length)\n    { return this.string.charAt(this.pos++) }\n};\nStringStream.prototype.eat = function (match) {\n  var ch = this.string.charAt(this.pos);\n  var ok;\n  if (typeof match == \"string\") { ok = ch == match; }\n  else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n  if (ok) {++this.pos; return ch}\n};\nStringStream.prototype.eatWhile = function (match) {\n  var start = this.pos;\n  while (this.eat(match)){}\n  return this.pos > start\n};\nStringStream.prototype.eatSpace = function () {\n  var start = this.pos;\n  while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n  return this.pos > start\n};\nStringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\nStringStream.prototype.skipTo = function (ch) {\n  var found = this.string.indexOf(ch, this.pos);\n  if (found > -1) {this.pos = found; return true}\n};\nStringStream.prototype.backUp = function (n) {this.pos -= n;};\nStringStream.prototype.column = function () {\n  if (this.lastColumnPos < this.start) {\n    this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n    this.lastColumnPos = this.start;\n  }\n  return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n};\nStringStream.prototype.indentation = function () {\n  return countColumn(this.string, null, this.tabSize) -\n    (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n};\nStringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n  if (typeof pattern == \"string\") {\n    var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n    var substr = this.string.substr(this.pos, pattern.length);\n    if (cased(substr) == cased(pattern)) {\n      if (consume !== false) { this.pos += pattern.length; }\n      return true\n    }\n  } else {\n    var match = this.string.slice(this.pos).match(pattern);\n    if (match && match.index > 0) { return null }\n    if (match && consume !== false) { this.pos += match[0].length; }\n    return match\n  }\n};\nStringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\nStringStream.prototype.hideFirstChars = function (n, inner) {\n  this.lineStart += n;\n  try { return inner() }\n  finally { this.lineStart -= n; }\n};\nStringStream.prototype.lookAhead = function (n) {\n  var oracle = this.lineOracle;\n  return oracle && oracle.lookAhead(n)\n};\nStringStream.prototype.baseToken = function () {\n  var oracle = this.lineOracle;\n  return oracle && oracle.baseToken(this.pos)\n};\n\n// Known modes, by name and by MIME\nvar modes = {}, mimeModes = {};\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nfunction defineMode(name, mode) {\n  if (arguments.length > 2)\n    { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n  modes[name] = mode;\n}\n\nfunction defineMIME(mime, spec) {\n  mimeModes[mime] = spec;\n}\n\n// Given a MIME type, a {name, ...options} config object, or a name\n// string, return a mode config object.\nfunction resolveMode(spec) {\n  if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n    spec = mimeModes[spec];\n  } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n    var found = mimeModes[spec.name];\n    if (typeof found == \"string\") { found = {name: found}; }\n    spec = createObj(found, spec);\n    spec.name = found.name;\n  } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n    return resolveMode(\"application/xml\")\n  } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n    return resolveMode(\"application/json\")\n  }\n  if (typeof spec == \"string\") { return {name: spec} }\n  else { return spec || {name: \"null\"} }\n}\n\n// Given a mode spec (anything that resolveMode accepts), find and\n// initialize an actual mode object.\nfunction getMode(options, spec) {\n  spec = resolveMode(spec);\n  var mfactory = modes[spec.name];\n  if (!mfactory) { return getMode(options, \"text/plain\") }\n  var modeObj = mfactory(options, spec);\n  if (modeExtensions.hasOwnProperty(spec.name)) {\n    var exts = modeExtensions[spec.name];\n    for (var prop in exts) {\n      if (!exts.hasOwnProperty(prop)) { continue }\n      if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n      modeObj[prop] = exts[prop];\n    }\n  }\n  modeObj.name = spec.name;\n  if (spec.helperType) { modeObj.helperType = spec.helperType; }\n  if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n    { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n  return modeObj\n}\n\n// This can be used to attach properties to mode objects from\n// outside the actual mode definition.\nvar modeExtensions = {};\nfunction extendMode(mode, properties) {\n  var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n  copyObj(properties, exts);\n}\n\nfunction copyState(mode, state) {\n  if (state === true) { return state }\n  if (mode.copyState) { return mode.copyState(state) }\n  var nstate = {};\n  for (var n in state) {\n    var val = state[n];\n    if (val instanceof Array) { val = val.concat([]); }\n    nstate[n] = val;\n  }\n  return nstate\n}\n\n// Given a mode and a state (for that mode), find the inner mode and\n// state at the position that the state refers to.\nfunction innerMode(mode, state) {\n  var info;\n  while (mode.innerMode) {\n    info = mode.innerMode(state);\n    if (!info || info.mode == mode) { break }\n    state = info.state;\n    mode = info.mode;\n  }\n  return info || {mode: mode, state: state}\n}\n\nfunction startState(mode, a1, a2) {\n  return mode.startState ? mode.startState(a1, a2) : true\n}\n\nvar modeMethods = {\n  __proto__: null,\n  modes: modes,\n  mimeModes: mimeModes,\n  defineMode: defineMode,\n  defineMIME: defineMIME,\n  resolveMode: resolveMode,\n  getMode: getMode,\n  modeExtensions: modeExtensions,\n  extendMode: extendMode,\n  copyState: copyState,\n  innerMode: innerMode,\n  startState: startState\n};\n\n// Copy StringStream and mode methods into exports (CodeMirror) object.\nexports.StringStream = StringStream;\nexports.countColumn = countColumn;\nfor (var exported in modeMethods) { exports[exported] = modeMethods[exported]; }\n\n// Shim library CodeMirror with the minimal CodeMirror defined above.\nrequire.cache[require.resolve(\"../../lib/codemirror\")] = require.cache[require.resolve(\"./runmode.node\")];\nrequire.cache[require.resolve(\"../../addon/runmode/runmode\")] = require.cache[require.resolve(\"./runmode.node\")];\n\n// Minimal default mode.\nexports.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\nexports.defineMIME(\"text/plain\", \"null\");\n\nexports.registerHelper = exports.registerGlobalHelper = Math.min;\nexports.splitLines = function(string) { return string.split(/\\r?\\n|\\r/) };\n\nexports.defaults = { indentUnit: 2 };\n\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    { mod(require(\"../../lib/codemirror\")); }\n  else if (typeof define == \"function\" && define.amd) // AMD\n    { define([\"../../lib/codemirror\"], mod); }\n  else // Plain browser env\n    { mod(CodeMirror); }\n})(function(CodeMirror) {\n\nCodeMirror.runMode = function(string, modespec, callback, options) {\n  var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);\n  var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;\n\n  // Create a tokenizing callback function if passed-in callback is a DOM element.\n  if (callback.appendChild) {\n    var ie = /MSIE \\d/.test(navigator.userAgent);\n    var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);\n    var node = callback, col = 0;\n    node.innerHTML = \"\";\n    callback = function(text, style) {\n      if (text == \"\\n\") {\n        // Emitting LF or CRLF on IE8 or earlier results in an incorrect display.\n        // Emitting a carriage return makes everything ok.\n        node.appendChild(document.createTextNode(ie_lt9 ? '\\r' : text));\n        col = 0;\n        return;\n      }\n      var content = \"\";\n      // replace tabs\n      for (var pos = 0;;) {\n        var idx = text.indexOf(\"\\t\", pos);\n        if (idx == -1) {\n          content += text.slice(pos);\n          col += text.length - pos;\n          break;\n        } else {\n          col += idx - pos;\n          content += text.slice(pos, idx);\n          var size = tabSize - col % tabSize;\n          col += size;\n          for (var i = 0; i < size; ++i) { content += \" \"; }\n          pos = idx + 1;\n        }\n      }\n      // Create a node with token style and append it to the callback DOM element.\n      if (style) {\n        var sp = node.appendChild(document.createElement(\"span\"));\n        sp.className = \"cm-\" + style.replace(/ +/g, \" cm-\");\n        sp.appendChild(document.createTextNode(content));\n      } else {\n        node.appendChild(document.createTextNode(content));\n      }\n    };\n  }\n\n  var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);\n  for (var i = 0, e = lines.length; i < e; ++i) {\n    if (i) { callback(\"\\n\"); }\n    var stream = new CodeMirror.StringStream(lines[i], null, {\n      lookAhead: function(n) { return lines[i + n] },\n      baseToken: function() {}\n    });\n    if (!stream.string && mode.blankLine) { mode.blankLine(state); }\n    while (!stream.eol()) {\n      var style = mode.token(stream, state);\n      callback(stream.current(), style, i, stream.start, state, mode);\n      stream.start = stream.pos;\n    }\n  }\n};\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/scroll/annotatescrollbar.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineExtension(\"annotateScrollbar\", function(options) {\n    if (typeof options == \"string\") options = {className: options};\n    return new Annotation(this, options);\n  });\n\n  CodeMirror.defineOption(\"scrollButtonHeight\", 0);\n\n  function Annotation(cm, options) {\n    this.cm = cm;\n    this.options = options;\n    this.buttonHeight = options.scrollButtonHeight || cm.getOption(\"scrollButtonHeight\");\n    this.annotations = [];\n    this.doRedraw = this.doUpdate = null;\n    this.div = cm.getWrapperElement().appendChild(document.createElement(\"div\"));\n    this.div.style.cssText = \"position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none\";\n    this.computeScale();\n\n    function scheduleRedraw(delay) {\n      clearTimeout(self.doRedraw);\n      self.doRedraw = setTimeout(function() { self.redraw(); }, delay);\n    }\n\n    var self = this;\n    cm.on(\"refresh\", this.resizeHandler = function() {\n      clearTimeout(self.doUpdate);\n      self.doUpdate = setTimeout(function() {\n        if (self.computeScale()) scheduleRedraw(20);\n      }, 100);\n    });\n    cm.on(\"markerAdded\", this.resizeHandler);\n    cm.on(\"markerCleared\", this.resizeHandler);\n    if (options.listenForChanges !== false)\n      cm.on(\"changes\", this.changeHandler = function() {\n        scheduleRedraw(250);\n      });\n  }\n\n  Annotation.prototype.computeScale = function() {\n    var cm = this.cm;\n    var hScale = (cm.getWrapperElement().clientHeight - cm.display.barHeight - this.buttonHeight * 2) /\n      cm.getScrollerElement().scrollHeight\n    if (hScale != this.hScale) {\n      this.hScale = hScale;\n      return true;\n    }\n  };\n\n  Annotation.prototype.update = function(annotations) {\n    this.annotations = annotations;\n    this.redraw();\n  };\n\n  Annotation.prototype.redraw = function(compute) {\n    if (compute !== false) this.computeScale();\n    var cm = this.cm, hScale = this.hScale;\n\n    var frag = document.createDocumentFragment(), anns = this.annotations;\n\n    var wrapping = cm.getOption(\"lineWrapping\");\n    var singleLineH = wrapping && cm.defaultTextHeight() * 1.5;\n    var curLine = null, curLineObj = null;\n\n    function getY(pos, top) {\n      if (curLine != pos.line) {\n        curLine = pos.line\n        curLineObj = cm.getLineHandle(pos.line)\n        var visual = cm.getLineHandleVisualStart(curLineObj)\n        if (visual != curLineObj) {\n          curLine = cm.getLineNumber(visual)\n          curLineObj = visual\n        }\n      }\n      if ((curLineObj.widgets && curLineObj.widgets.length) ||\n          (wrapping && curLineObj.height > singleLineH))\n        return cm.charCoords(pos, \"local\")[top ? \"top\" : \"bottom\"];\n      var topY = cm.heightAtLine(curLineObj, \"local\");\n      return topY + (top ? 0 : curLineObj.height);\n    }\n\n    var lastLine = cm.lastLine()\n    if (cm.display.barWidth) for (var i = 0, nextTop; i < anns.length; i++) {\n      var ann = anns[i];\n      if (ann.to.line > lastLine) continue;\n      var top = nextTop || getY(ann.from, true) * hScale;\n      var bottom = getY(ann.to, false) * hScale;\n      while (i < anns.length - 1) {\n        if (anns[i + 1].to.line > lastLine) break;\n        nextTop = getY(anns[i + 1].from, true) * hScale;\n        if (nextTop > bottom + .9) break;\n        ann = anns[++i];\n        bottom = getY(ann.to, false) * hScale;\n      }\n      if (bottom == top) continue;\n      var height = Math.max(bottom - top, 3);\n\n      var elt = frag.appendChild(document.createElement(\"div\"));\n      elt.style.cssText = \"position: absolute; right: 0px; width: \" + Math.max(cm.display.barWidth - 1, 2) + \"px; top: \"\n        + (top + this.buttonHeight) + \"px; height: \" + height + \"px\";\n      elt.className = this.options.className;\n      if (ann.id) {\n        elt.setAttribute(\"annotation-id\", ann.id);\n      }\n    }\n    this.div.textContent = \"\";\n    this.div.appendChild(frag);\n  };\n\n  Annotation.prototype.clear = function() {\n    this.cm.off(\"refresh\", this.resizeHandler);\n    this.cm.off(\"markerAdded\", this.resizeHandler);\n    this.cm.off(\"markerCleared\", this.resizeHandler);\n    if (this.changeHandler) this.cm.off(\"changes\", this.changeHandler);\n    this.div.parentNode.removeChild(this.div);\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/scroll/scrollpastend.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"scrollPastEnd\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.off(\"change\", onChange);\n      cm.off(\"refresh\", updateBottomMargin);\n      cm.display.lineSpace.parentNode.style.paddingBottom = \"\";\n      cm.state.scrollPastEndPadding = null;\n    }\n    if (val) {\n      cm.on(\"change\", onChange);\n      cm.on(\"refresh\", updateBottomMargin);\n      updateBottomMargin(cm);\n    }\n  });\n\n  function onChange(cm, change) {\n    if (CodeMirror.changeEnd(change).line == cm.lastLine())\n      updateBottomMargin(cm);\n  }\n\n  function updateBottomMargin(cm) {\n    var padding = \"\";\n    if (cm.lineCount() > 1) {\n      var totalH = cm.display.scroller.clientHeight - 30,\n          lastLineH = cm.getLineHandle(cm.lastLine()).height;\n      padding = (totalH - lastLineH) + \"px\";\n    }\n    if (cm.state.scrollPastEndPadding != padding) {\n      cm.state.scrollPastEndPadding = padding;\n      cm.display.lineSpace.parentNode.style.paddingBottom = padding;\n      cm.off(\"refresh\", updateBottomMargin);\n      cm.setSize();\n      cm.on(\"refresh\", updateBottomMargin);\n    }\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/scroll/simplescrollbars.css",
    "content": ".CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div {\n  position: absolute;\n  background: #ccc;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  border: 1px solid #bbb;\n  border-radius: 2px;\n}\n\n.CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical {\n  position: absolute;\n  z-index: 6;\n  background: #eee;\n}\n\n.CodeMirror-simplescroll-horizontal {\n  bottom: 0; left: 0;\n  height: 8px;\n}\n.CodeMirror-simplescroll-horizontal div {\n  bottom: 0;\n  height: 100%;\n}\n\n.CodeMirror-simplescroll-vertical {\n  right: 0; top: 0;\n  width: 8px;\n}\n.CodeMirror-simplescroll-vertical div {\n  right: 0;\n  width: 100%;\n}\n\n\n.CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler {\n  display: none;\n}\n\n.CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div {\n  position: absolute;\n  background: #bcd;\n  border-radius: 3px;\n}\n\n.CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical {\n  position: absolute;\n  z-index: 6;\n}\n\n.CodeMirror-overlayscroll-horizontal {\n  bottom: 0; left: 0;\n  height: 6px;\n}\n.CodeMirror-overlayscroll-horizontal div {\n  bottom: 0;\n  height: 100%;\n}\n\n.CodeMirror-overlayscroll-vertical {\n  right: 0; top: 0;\n  width: 6px;\n}\n.CodeMirror-overlayscroll-vertical div {\n  right: 0;\n  width: 100%;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/addon/scroll/simplescrollbars.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function Bar(cls, orientation, scroll) {\n    this.orientation = orientation;\n    this.scroll = scroll;\n    this.screen = this.total = this.size = 1;\n    this.pos = 0;\n\n    this.node = document.createElement(\"div\");\n    this.node.className = cls + \"-\" + orientation;\n    this.inner = this.node.appendChild(document.createElement(\"div\"));\n\n    var self = this;\n    CodeMirror.on(this.inner, \"mousedown\", function(e) {\n      if (e.which != 1) return;\n      CodeMirror.e_preventDefault(e);\n      var axis = self.orientation == \"horizontal\" ? \"pageX\" : \"pageY\";\n      var start = e[axis], startpos = self.pos;\n      function done() {\n        CodeMirror.off(document, \"mousemove\", move);\n        CodeMirror.off(document, \"mouseup\", done);\n      }\n      function move(e) {\n        if (e.which != 1) return done();\n        self.moveTo(startpos + (e[axis] - start) * (self.total / self.size));\n      }\n      CodeMirror.on(document, \"mousemove\", move);\n      CodeMirror.on(document, \"mouseup\", done);\n    });\n\n    CodeMirror.on(this.node, \"click\", function(e) {\n      CodeMirror.e_preventDefault(e);\n      var innerBox = self.inner.getBoundingClientRect(), where;\n      if (self.orientation == \"horizontal\")\n        where = e.clientX < innerBox.left ? -1 : e.clientX > innerBox.right ? 1 : 0;\n      else\n        where = e.clientY < innerBox.top ? -1 : e.clientY > innerBox.bottom ? 1 : 0;\n      self.moveTo(self.pos + where * self.screen);\n    });\n\n    function onWheel(e) {\n      var moved = CodeMirror.wheelEventPixels(e)[self.orientation == \"horizontal\" ? \"x\" : \"y\"];\n      var oldPos = self.pos;\n      self.moveTo(self.pos + moved);\n      if (self.pos != oldPos) CodeMirror.e_preventDefault(e);\n    }\n    CodeMirror.on(this.node, \"mousewheel\", onWheel);\n    CodeMirror.on(this.node, \"DOMMouseScroll\", onWheel);\n  }\n\n  Bar.prototype.setPos = function(pos, force) {\n    if (pos < 0) pos = 0;\n    if (pos > this.total - this.screen) pos = this.total - this.screen;\n    if (!force && pos == this.pos) return false;\n    this.pos = pos;\n    this.inner.style[this.orientation == \"horizontal\" ? \"left\" : \"top\"] =\n      (pos * (this.size / this.total)) + \"px\";\n    return true\n  };\n\n  Bar.prototype.moveTo = function(pos) {\n    if (this.setPos(pos)) this.scroll(pos, this.orientation);\n  }\n\n  var minButtonSize = 10;\n\n  Bar.prototype.update = function(scrollSize, clientSize, barSize) {\n    var sizeChanged = this.screen != clientSize || this.total != scrollSize || this.size != barSize\n    if (sizeChanged) {\n      this.screen = clientSize;\n      this.total = scrollSize;\n      this.size = barSize;\n    }\n\n    var buttonSize = this.screen * (this.size / this.total);\n    if (buttonSize < minButtonSize) {\n      this.size -= minButtonSize - buttonSize;\n      buttonSize = minButtonSize;\n    }\n    this.inner.style[this.orientation == \"horizontal\" ? \"width\" : \"height\"] =\n      buttonSize + \"px\";\n    this.setPos(this.pos, sizeChanged);\n  };\n\n  function SimpleScrollbars(cls, place, scroll) {\n    this.addClass = cls;\n    this.horiz = new Bar(cls, \"horizontal\", scroll);\n    place(this.horiz.node);\n    this.vert = new Bar(cls, \"vertical\", scroll);\n    place(this.vert.node);\n    this.width = null;\n  }\n\n  SimpleScrollbars.prototype.update = function(measure) {\n    if (this.width == null) {\n      var style = window.getComputedStyle ? window.getComputedStyle(this.horiz.node) : this.horiz.node.currentStyle;\n      if (style) this.width = parseInt(style.height);\n    }\n    var width = this.width || 0;\n\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    this.vert.node.style.display = needsV ? \"block\" : \"none\";\n    this.horiz.node.style.display = needsH ? \"block\" : \"none\";\n\n    if (needsV) {\n      this.vert.update(measure.scrollHeight, measure.clientHeight,\n                       measure.viewHeight - (needsH ? width : 0));\n      this.vert.node.style.bottom = needsH ? width + \"px\" : \"0\";\n    }\n    if (needsH) {\n      this.horiz.update(measure.scrollWidth, measure.clientWidth,\n                        measure.viewWidth - (needsV ? width : 0) - measure.barLeft);\n      this.horiz.node.style.right = needsV ? width + \"px\" : \"0\";\n      this.horiz.node.style.left = measure.barLeft + \"px\";\n    }\n\n    return {right: needsV ? width : 0, bottom: needsH ? width : 0};\n  };\n\n  SimpleScrollbars.prototype.setScrollTop = function(pos) {\n    this.vert.setPos(pos);\n  };\n\n  SimpleScrollbars.prototype.setScrollLeft = function(pos) {\n    this.horiz.setPos(pos);\n  };\n\n  SimpleScrollbars.prototype.clear = function() {\n    var parent = this.horiz.node.parentNode;\n    parent.removeChild(this.horiz.node);\n    parent.removeChild(this.vert.node);\n  };\n\n  CodeMirror.scrollbarModel.simple = function(place, scroll) {\n    return new SimpleScrollbars(\"CodeMirror-simplescroll\", place, scroll);\n  };\n  CodeMirror.scrollbarModel.overlay = function(place, scroll) {\n    return new SimpleScrollbars(\"CodeMirror-overlayscroll\", place, scroll);\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/search/jump-to-line.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Defines jumpToLine command. Uses dialog.js if present.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../dialog/dialog\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../dialog/dialog\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  // default search panel location\n  CodeMirror.defineOption(\"search\", {bottom: false});\n\n  function dialog(cm, text, shortText, deflt, f) {\n    if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom});\n    else f(prompt(shortText, deflt));\n  }\n\n  function getJumpDialog(cm) {\n    return cm.phrase(\"Jump to line:\") + ' <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use line:column or scroll% syntax)\") + '</span>';\n  }\n\n  function interpretLine(cm, string) {\n    var num = Number(string)\n    if (/^[-+]/.test(string)) return cm.getCursor().line + num\n    else return num - 1\n  }\n\n  CodeMirror.commands.jumpToLine = function(cm) {\n    var cur = cm.getCursor();\n    dialog(cm, getJumpDialog(cm), cm.phrase(\"Jump to line:\"), (cur.line + 1) + \":\" + cur.ch, function(posStr) {\n      if (!posStr) return;\n\n      var match;\n      if (match = /^\\s*([\\+\\-]?\\d+)\\s*\\:\\s*(\\d+)\\s*$/.exec(posStr)) {\n        cm.setCursor(interpretLine(cm, match[1]), Number(match[2]))\n      } else if (match = /^\\s*([\\+\\-]?\\d+(\\.\\d+)?)\\%\\s*/.exec(posStr)) {\n        var line = Math.round(cm.lineCount() * Number(match[1]) / 100);\n        if (/^[-+]/.test(match[1])) line = cur.line + line + 1;\n        cm.setCursor(line - 1, cur.ch);\n      } else if (match = /^\\s*\\:?\\s*([\\+\\-]?\\d+)\\s*/.exec(posStr)) {\n        cm.setCursor(interpretLine(cm, match[1]), cur.ch);\n      }\n    });\n  };\n\n  CodeMirror.keyMap[\"default\"][\"Alt-G\"] = \"jumpToLine\";\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/search/match-highlighter.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Highlighting text that matches the selection\n//\n// Defines an option highlightSelectionMatches, which, when enabled,\n// will style strings that match the selection throughout the\n// document.\n//\n// The option can be set to true to simply enable it, or to a\n// {minChars, style, wordsOnly, showToken, delay} object to explicitly\n// configure it. minChars is the minimum amount of characters that should be\n// selected for the behavior to occur, and style is the token style to\n// apply to the matches. This will be prefixed by \"cm-\" to create an\n// actual CSS class name. If wordsOnly is enabled, the matches will be\n// highlighted only if the selected text is a word. showToken, when enabled,\n// will cause the current token to be highlighted when nothing is selected.\n// delay is used to specify how much time to wait, in milliseconds, before\n// highlighting the matches. If annotateScrollbar is enabled, the occurrences\n// will be highlighted on the scrollbar via the matchesonscrollbar addon.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./matchesonscrollbar\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./matchesonscrollbar\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var defaults = {\n    style: \"matchhighlight\",\n    minChars: 2,\n    delay: 100,\n    wordsOnly: false,\n    annotateScrollbar: false,\n    showToken: false,\n    trim: true\n  }\n\n  function State(options) {\n    this.options = {}\n    for (var name in defaults)\n      this.options[name] = (options && options.hasOwnProperty(name) ? options : defaults)[name]\n    this.overlay = this.timeout = null;\n    this.matchesonscroll = null;\n    this.active = false;\n  }\n\n  CodeMirror.defineOption(\"highlightSelectionMatches\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      removeOverlay(cm);\n      clearTimeout(cm.state.matchHighlighter.timeout);\n      cm.state.matchHighlighter = null;\n      cm.off(\"cursorActivity\", cursorActivity);\n      cm.off(\"focus\", onFocus)\n    }\n    if (val) {\n      var state = cm.state.matchHighlighter = new State(val);\n      if (cm.hasFocus()) {\n        state.active = true\n        highlightMatches(cm)\n      } else {\n        cm.on(\"focus\", onFocus)\n      }\n      cm.on(\"cursorActivity\", cursorActivity);\n    }\n  });\n\n  function cursorActivity(cm) {\n    var state = cm.state.matchHighlighter;\n    if (state.active || cm.hasFocus()) scheduleHighlight(cm, state)\n  }\n\n  function onFocus(cm) {\n    var state = cm.state.matchHighlighter\n    if (!state.active) {\n      state.active = true\n      scheduleHighlight(cm, state)\n    }\n  }\n\n  function scheduleHighlight(cm, state) {\n    clearTimeout(state.timeout);\n    state.timeout = setTimeout(function() {highlightMatches(cm);}, state.options.delay);\n  }\n\n  function addOverlay(cm, query, hasBoundary, style) {\n    var state = cm.state.matchHighlighter;\n    cm.addOverlay(state.overlay = makeOverlay(query, hasBoundary, style));\n    if (state.options.annotateScrollbar && cm.showMatchesOnScrollbar) {\n      var searchFor = hasBoundary ? new RegExp((/\\w/.test(query.charAt(0)) ? \"\\\\b\" : \"\") +\n                                               query.replace(/[\\\\\\[.+*?(){|^$]/g, \"\\\\$&\") +\n                                               (/\\w/.test(query.charAt(query.length - 1)) ? \"\\\\b\" : \"\")) : query;\n      state.matchesonscroll = cm.showMatchesOnScrollbar(searchFor, false,\n        {className: \"CodeMirror-selection-highlight-scrollbar\"});\n    }\n  }\n\n  function removeOverlay(cm) {\n    var state = cm.state.matchHighlighter;\n    if (state.overlay) {\n      cm.removeOverlay(state.overlay);\n      state.overlay = null;\n      if (state.matchesonscroll) {\n        state.matchesonscroll.clear();\n        state.matchesonscroll = null;\n      }\n    }\n  }\n\n  function highlightMatches(cm) {\n    cm.operation(function() {\n      var state = cm.state.matchHighlighter;\n      removeOverlay(cm);\n      if (!cm.somethingSelected() && state.options.showToken) {\n        var re = state.options.showToken === true ? /[\\w$]/ : state.options.showToken;\n        var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start;\n        while (start && re.test(line.charAt(start - 1))) --start;\n        while (end < line.length && re.test(line.charAt(end))) ++end;\n        if (start < end)\n          addOverlay(cm, line.slice(start, end), re, state.options.style);\n        return;\n      }\n      var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n      if (from.line != to.line) return;\n      if (state.options.wordsOnly && !isWord(cm, from, to)) return;\n      var selection = cm.getRange(from, to)\n      if (state.options.trim) selection = selection.replace(/^\\s+|\\s+$/g, \"\")\n      if (selection.length >= state.options.minChars)\n        addOverlay(cm, selection, false, state.options.style);\n    });\n  }\n\n  function isWord(cm, from, to) {\n    var str = cm.getRange(from, to);\n    if (str.match(/^\\w+$/) !== null) {\n        if (from.ch > 0) {\n            var pos = {line: from.line, ch: from.ch - 1};\n            var chr = cm.getRange(pos, from);\n            if (chr.match(/\\W/) === null) return false;\n        }\n        if (to.ch < cm.getLine(from.line).length) {\n            var pos = {line: to.line, ch: to.ch + 1};\n            var chr = cm.getRange(to, pos);\n            if (chr.match(/\\W/) === null) return false;\n        }\n        return true;\n    } else return false;\n  }\n\n  function boundariesAround(stream, re) {\n    return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) &&\n      (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos)));\n  }\n\n  function makeOverlay(query, hasBoundary, style) {\n    return {token: function(stream) {\n      if (stream.match(query) &&\n          (!hasBoundary || boundariesAround(stream, hasBoundary)))\n        return style;\n      stream.next();\n      stream.skipTo(query.charAt(0)) || stream.skipToEnd();\n    }};\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/search/matchesonscrollbar.css",
    "content": ".CodeMirror-search-match {\n  background: gold;\n  border-top: 1px solid orange;\n  border-bottom: 1px solid orange;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  opacity: .5;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/addon/search/matchesonscrollbar.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./searchcursor\"), require(\"../scroll/annotatescrollbar\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./searchcursor\", \"../scroll/annotatescrollbar\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineExtension(\"showMatchesOnScrollbar\", function(query, caseFold, options) {\n    if (typeof options == \"string\") options = {className: options};\n    if (!options) options = {};\n    return new SearchAnnotation(this, query, caseFold, options);\n  });\n\n  function SearchAnnotation(cm, query, caseFold, options) {\n    this.cm = cm;\n    this.options = options;\n    var annotateOptions = {listenForChanges: false};\n    for (var prop in options) annotateOptions[prop] = options[prop];\n    if (!annotateOptions.className) annotateOptions.className = \"CodeMirror-search-match\";\n    this.annotation = cm.annotateScrollbar(annotateOptions);\n    this.query = query;\n    this.caseFold = caseFold;\n    this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1};\n    this.matches = [];\n    this.update = null;\n\n    this.findMatches();\n    this.annotation.update(this.matches);\n\n    var self = this;\n    cm.on(\"change\", this.changeHandler = function(_cm, change) { self.onChange(change); });\n  }\n\n  var MAX_MATCHES = 1000;\n\n  SearchAnnotation.prototype.findMatches = function() {\n    if (!this.gap) return;\n    for (var i = 0; i < this.matches.length; i++) {\n      var match = this.matches[i];\n      if (match.from.line >= this.gap.to) break;\n      if (match.to.line >= this.gap.from) this.matches.splice(i--, 1);\n    }\n    var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), {caseFold: this.caseFold, multiline: this.options.multiline});\n    var maxMatches = this.options && this.options.maxMatches || MAX_MATCHES;\n    while (cursor.findNext()) {\n      var match = {from: cursor.from(), to: cursor.to()};\n      if (match.from.line >= this.gap.to) break;\n      this.matches.splice(i++, 0, match);\n      if (this.matches.length > maxMatches) break;\n    }\n    this.gap = null;\n  };\n\n  function offsetLine(line, changeStart, sizeChange) {\n    if (line <= changeStart) return line;\n    return Math.max(changeStart, line + sizeChange);\n  }\n\n  SearchAnnotation.prototype.onChange = function(change) {\n    var startLine = change.from.line;\n    var endLine = CodeMirror.changeEnd(change).line;\n    var sizeChange = endLine - change.to.line;\n    if (this.gap) {\n      this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line);\n      this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line);\n    } else {\n      this.gap = {from: change.from.line, to: endLine + 1};\n    }\n\n    if (sizeChange) for (var i = 0; i < this.matches.length; i++) {\n      var match = this.matches[i];\n      var newFrom = offsetLine(match.from.line, startLine, sizeChange);\n      if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch);\n      var newTo = offsetLine(match.to.line, startLine, sizeChange);\n      if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch);\n    }\n    clearTimeout(this.update);\n    var self = this;\n    this.update = setTimeout(function() { self.updateAfterChange(); }, 250);\n  };\n\n  SearchAnnotation.prototype.updateAfterChange = function() {\n    this.findMatches();\n    this.annotation.update(this.matches);\n  };\n\n  SearchAnnotation.prototype.clear = function() {\n    this.cm.off(\"change\", this.changeHandler);\n    this.annotation.clear();\n  };\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/search/search.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Define search commands. Depends on dialog.js or another\n// implementation of the openDialog method.\n\n// Replace works a little oddly -- it will do the replace on the next\n// Ctrl-G (or whatever is bound to findNext) press. You prevent a\n// replace by making sure the match is no longer selected when hitting\n// Ctrl-G.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./searchcursor\"), require(\"../dialog/dialog\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./searchcursor\", \"../dialog/dialog\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  // default search panel location\n  CodeMirror.defineOption(\"search\", {bottom: false});\n\n  function searchOverlay(query, caseInsensitive) {\n    if (typeof query == \"string\")\n      query = new RegExp(query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\"), caseInsensitive ? \"gi\" : \"g\");\n    else if (!query.global)\n      query = new RegExp(query.source, query.ignoreCase ? \"gi\" : \"g\");\n\n    return {token: function(stream) {\n      query.lastIndex = stream.pos;\n      var match = query.exec(stream.string);\n      if (match && match.index == stream.pos) {\n        stream.pos += match[0].length || 1;\n        return \"searching\";\n      } else if (match) {\n        stream.pos = match.index;\n      } else {\n        stream.skipToEnd();\n      }\n    }};\n  }\n\n  function SearchState() {\n    this.posFrom = this.posTo = this.lastQuery = this.query = null;\n    this.overlay = null;\n  }\n\n  function getSearchState(cm) {\n    return cm.state.search || (cm.state.search = new SearchState());\n  }\n\n  function queryCaseInsensitive(query) {\n    return typeof query == \"string\" && query == query.toLowerCase();\n  }\n\n  function getSearchCursor(cm, query, pos) {\n    // Heuristic: if the query string is all lowercase, do a case insensitive search.\n    return cm.getSearchCursor(query, pos, {caseFold: queryCaseInsensitive(query), multiline: true});\n  }\n\n  function persistentDialog(cm, text, deflt, onEnter, onKeyDown) {\n    cm.openDialog(text, onEnter, {\n      value: deflt,\n      selectValueOnOpen: true,\n      closeOnEnter: false,\n      onClose: function() { clearSearch(cm); },\n      onKeyDown: onKeyDown,\n      bottom: cm.options.search.bottom\n    });\n  }\n\n  function dialog(cm, text, shortText, deflt, f) {\n    if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom});\n    else f(prompt(shortText, deflt));\n  }\n\n  function confirmDialog(cm, text, shortText, fs) {\n    if (cm.openConfirm) cm.openConfirm(text, fs);\n    else if (confirm(shortText)) fs[0]();\n  }\n\n  function parseString(string) {\n    return string.replace(/\\\\([nrt\\\\])/g, function(match, ch) {\n      if (ch == \"n\") return \"\\n\"\n      if (ch == \"r\") return \"\\r\"\n      if (ch == \"t\") return \"\\t\"\n      if (ch == \"\\\\\") return \"\\\\\"\n      return match\n    })\n  }\n\n  function parseQuery(query) {\n    var isRE = query.match(/^\\/(.*)\\/([a-z]*)$/);\n    if (isRE) {\n      try { query = new RegExp(isRE[1], isRE[2].indexOf(\"i\") == -1 ? \"\" : \"i\"); }\n      catch(e) {} // Not a regular expression after all, do a string search\n    } else {\n      query = parseString(query)\n    }\n    if (typeof query == \"string\" ? query == \"\" : query.test(\"\"))\n      query = /x^/;\n    return query;\n  }\n\n  function startSearch(cm, state, query) {\n    state.queryText = query;\n    state.query = parseQuery(query);\n    cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query));\n    state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query));\n    cm.addOverlay(state.overlay);\n    if (cm.showMatchesOnScrollbar) {\n      if (state.annotate) { state.annotate.clear(); state.annotate = null; }\n      state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query));\n    }\n  }\n\n  function doSearch(cm, rev, persistent, immediate) {\n    var state = getSearchState(cm);\n    if (state.query) return findNext(cm, rev);\n    var q = cm.getSelection() || state.lastQuery;\n    if (q instanceof RegExp && q.source == \"x^\") q = null\n    if (persistent && cm.openDialog) {\n      var hiding = null\n      var searchNext = function(query, event) {\n        CodeMirror.e_stop(event);\n        if (!query) return;\n        if (query != state.queryText) {\n          startSearch(cm, state, query);\n          state.posFrom = state.posTo = cm.getCursor();\n        }\n        if (hiding) hiding.style.opacity = 1\n        findNext(cm, event.shiftKey, function(_, to) {\n          var dialog\n          if (to.line < 3 && document.querySelector &&\n              (dialog = cm.display.wrapper.querySelector(\".CodeMirror-dialog\")) &&\n              dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, \"window\").top)\n            (hiding = dialog).style.opacity = .4\n        })\n      };\n      persistentDialog(cm, getQueryDialog(cm), q, searchNext, function(event, query) {\n        var keyName = CodeMirror.keyName(event)\n        var extra = cm.getOption('extraKeys'), cmd = (extra && extra[keyName]) || CodeMirror.keyMap[cm.getOption(\"keyMap\")][keyName]\n        if (cmd == \"findNext\" || cmd == \"findPrev\" ||\n          cmd == \"findPersistentNext\" || cmd == \"findPersistentPrev\") {\n          CodeMirror.e_stop(event);\n          startSearch(cm, getSearchState(cm), query);\n          cm.execCommand(cmd);\n        } else if (cmd == \"find\" || cmd == \"findPersistent\") {\n          CodeMirror.e_stop(event);\n          searchNext(query, event);\n        }\n      });\n      if (immediate && q) {\n        startSearch(cm, state, q);\n        findNext(cm, rev);\n      }\n    } else {\n      dialog(cm, getQueryDialog(cm), \"Search for:\", q, function(query) {\n        if (query && !state.query) cm.operation(function() {\n          startSearch(cm, state, query);\n          state.posFrom = state.posTo = cm.getCursor();\n          findNext(cm, rev);\n        });\n      });\n    }\n  }\n\n  function findNext(cm, rev, callback) {cm.operation(function() {\n    var state = getSearchState(cm);\n    var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo);\n    if (!cursor.find(rev)) {\n      cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0));\n      if (!cursor.find(rev)) return;\n    }\n    cm.setSelection(cursor.from(), cursor.to());\n    cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20);\n    state.posFrom = cursor.from(); state.posTo = cursor.to();\n    if (callback) callback(cursor.from(), cursor.to())\n  });}\n\n  function clearSearch(cm) {cm.operation(function() {\n    var state = getSearchState(cm);\n    state.lastQuery = state.query;\n    if (!state.query) return;\n    state.query = state.queryText = null;\n    cm.removeOverlay(state.overlay);\n    if (state.annotate) { state.annotate.clear(); state.annotate = null; }\n  });}\n\n  function el(tag, attrs) {\n    var element = tag ? document.createElement(tag) : document.createDocumentFragment();\n    for (var key in attrs) {\n      element[key] = attrs[key];\n    }\n    for (var i = 2; i < arguments.length; i++) {\n      var child = arguments[i]\n      element.appendChild(typeof child == \"string\" ? document.createTextNode(child) : child);\n    }\n    return element;\n  }\n\n  function getQueryDialog(cm)  {\n    return el(\"\", null,\n              el(\"span\", {className: \"CodeMirror-search-label\"}, cm.phrase(\"Search:\")), \" \",\n              el(\"input\", {type: \"text\", \"style\": \"width: 10em\", className: \"CodeMirror-search-field\"}), \" \",\n              el(\"span\", {style: \"color: #888\", className: \"CodeMirror-search-hint\"},\n                 cm.phrase(\"(Use /re/ syntax for regexp search)\")));\n  }\n  function getReplaceQueryDialog(cm) {\n    return el(\"\", null, \" \",\n              el(\"input\", {type: \"text\", \"style\": \"width: 10em\", className: \"CodeMirror-search-field\"}), \" \",\n              el(\"span\", {style: \"color: #888\", className: \"CodeMirror-search-hint\"},\n                 cm.phrase(\"(Use /re/ syntax for regexp search)\")));\n  }\n  function getReplacementQueryDialog(cm) {\n    return el(\"\", null,\n              el(\"span\", {className: \"CodeMirror-search-label\"}, cm.phrase(\"With:\")), \" \",\n              el(\"input\", {type: \"text\", \"style\": \"width: 10em\", className: \"CodeMirror-search-field\"}));\n  }\n  function getDoReplaceConfirm(cm) {\n    return el(\"\", null,\n              el(\"span\", {className: \"CodeMirror-search-label\"}, cm.phrase(\"Replace?\")), \" \",\n              el(\"button\", {}, cm.phrase(\"Yes\")), \" \",\n              el(\"button\", {}, cm.phrase(\"No\")), \" \",\n              el(\"button\", {}, cm.phrase(\"All\")), \" \",\n              el(\"button\", {}, cm.phrase(\"Stop\")));\n  }\n\n  function replaceAll(cm, query, text) {\n    cm.operation(function() {\n      for (var cursor = getSearchCursor(cm, query); cursor.findNext();) {\n        if (typeof query != \"string\") {\n          var match = cm.getRange(cursor.from(), cursor.to()).match(query);\n          cursor.replace(text.replace(/\\$(\\d)/g, function(_, i) {return match[i];}));\n        } else cursor.replace(text);\n      }\n    });\n  }\n\n  function replace(cm, all) {\n    if (cm.getOption(\"readOnly\")) return;\n    var query = cm.getSelection() || getSearchState(cm).lastQuery;\n    var dialogText = all ? cm.phrase(\"Replace all:\") : cm.phrase(\"Replace:\")\n    var fragment = el(\"\", null,\n                      el(\"span\", {className: \"CodeMirror-search-label\"}, dialogText),\n                      getReplaceQueryDialog(cm))\n    dialog(cm, fragment, dialogText, query, function(query) {\n      if (!query) return;\n      query = parseQuery(query);\n      dialog(cm, getReplacementQueryDialog(cm), cm.phrase(\"Replace with:\"), \"\", function(text) {\n        text = parseString(text)\n        if (all) {\n          replaceAll(cm, query, text)\n        } else {\n          clearSearch(cm);\n          var cursor = getSearchCursor(cm, query, cm.getCursor(\"from\"));\n          var advance = function() {\n            var start = cursor.from(), match;\n            if (!(match = cursor.findNext())) {\n              cursor = getSearchCursor(cm, query);\n              if (!(match = cursor.findNext()) ||\n                  (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return;\n            }\n            cm.setSelection(cursor.from(), cursor.to());\n            cm.scrollIntoView({from: cursor.from(), to: cursor.to()});\n            confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase(\"Replace?\"),\n                          [function() {doReplace(match);}, advance,\n                           function() {replaceAll(cm, query, text)}]);\n          };\n          var doReplace = function(match) {\n            cursor.replace(typeof query == \"string\" ? text :\n                           text.replace(/\\$(\\d)/g, function(_, i) {return match[i];}));\n            advance();\n          };\n          advance();\n        }\n      });\n    });\n  }\n\n  CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);};\n  CodeMirror.commands.findPersistent = function(cm) {clearSearch(cm); doSearch(cm, false, true);};\n  CodeMirror.commands.findPersistentNext = function(cm) {doSearch(cm, false, true, true);};\n  CodeMirror.commands.findPersistentPrev = function(cm) {doSearch(cm, true, true, true);};\n  CodeMirror.commands.findNext = doSearch;\n  CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);};\n  CodeMirror.commands.clearSearch = clearSearch;\n  CodeMirror.commands.replace = replace;\n  CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);};\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/search/searchcursor.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"))\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod)\n  else // Plain browser env\n    mod(CodeMirror)\n})(function(CodeMirror) {\n  \"use strict\"\n  var Pos = CodeMirror.Pos\n\n  function regexpFlags(regexp) {\n    var flags = regexp.flags\n    return flags != null ? flags : (regexp.ignoreCase ? \"i\" : \"\")\n      + (regexp.global ? \"g\" : \"\")\n      + (regexp.multiline ? \"m\" : \"\")\n  }\n\n  function ensureFlags(regexp, flags) {\n    var current = regexpFlags(regexp), target = current\n    for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1)\n      target += flags.charAt(i)\n    return current == target ? regexp : new RegExp(regexp.source, target)\n  }\n\n  function maybeMultiline(regexp) {\n    return /\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(regexp.source)\n  }\n\n  function searchRegexpForward(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"g\")\n    for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {\n      regexp.lastIndex = ch\n      var string = doc.getLine(line), match = regexp.exec(string)\n      if (match)\n        return {from: Pos(line, match.index),\n                to: Pos(line, match.index + match[0].length),\n                match: match}\n    }\n  }\n\n  function searchRegexpForwardMultiline(doc, regexp, start) {\n    if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start)\n\n    regexp = ensureFlags(regexp, \"gm\")\n    var string, chunk = 1\n    for (var line = start.line, last = doc.lastLine(); line <= last;) {\n      // This grows the search buffer in exponentially-sized chunks\n      // between matches, so that nearby matches are fast and don't\n      // require concatenating the whole document (in case we're\n      // searching for something that has tons of matches), but at the\n      // same time, the amount of retries is limited.\n      for (var i = 0; i < chunk; i++) {\n        if (line > last) break\n        var curLine = doc.getLine(line++)\n        string = string == null ? curLine : string + \"\\n\" + curLine\n      }\n      chunk = chunk * 2\n      regexp.lastIndex = start.ch\n      var match = regexp.exec(string)\n      if (match) {\n        var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n        var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length\n        return {from: Pos(startLine, startCh),\n                to: Pos(startLine + inside.length - 1,\n                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n                match: match}\n      }\n    }\n  }\n\n  function lastMatchIn(string, regexp, endMargin) {\n    var match, from = 0\n    while (from <= string.length) {\n      regexp.lastIndex = from\n      var newMatch = regexp.exec(string)\n      if (!newMatch) break\n      var end = newMatch.index + newMatch[0].length\n      if (end > string.length - endMargin) break\n      if (!match || end > match.index + match[0].length)\n        match = newMatch\n      from = newMatch.index + 1\n    }\n    return match\n  }\n\n  function searchRegexpBackward(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"g\")\n    for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {\n      var string = doc.getLine(line)\n      var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch)\n      if (match)\n        return {from: Pos(line, match.index),\n                to: Pos(line, match.index + match[0].length),\n                match: match}\n    }\n  }\n\n  function searchRegexpBackwardMultiline(doc, regexp, start) {\n    if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start)\n    regexp = ensureFlags(regexp, \"gm\")\n    var string, chunkSize = 1, endMargin = doc.getLine(start.line).length - start.ch\n    for (var line = start.line, first = doc.firstLine(); line >= first;) {\n      for (var i = 0; i < chunkSize && line >= first; i++) {\n        var curLine = doc.getLine(line--)\n        string = string == null ? curLine : curLine + \"\\n\" + string\n      }\n      chunkSize *= 2\n\n      var match = lastMatchIn(string, regexp, endMargin)\n      if (match) {\n        var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n        var startLine = line + before.length, startCh = before[before.length - 1].length\n        return {from: Pos(startLine, startCh),\n                to: Pos(startLine + inside.length - 1,\n                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n                match: match}\n      }\n    }\n  }\n\n  var doFold, noFold\n  if (String.prototype.normalize) {\n    doFold = function(str) { return str.normalize(\"NFD\").toLowerCase() }\n    noFold = function(str) { return str.normalize(\"NFD\") }\n  } else {\n    doFold = function(str) { return str.toLowerCase() }\n    noFold = function(str) { return str }\n  }\n\n  // Maps a position in a case-folded line back to a position in the original line\n  // (compensating for codepoints increasing in number during folding)\n  function adjustPos(orig, folded, pos, foldFunc) {\n    if (orig.length == folded.length) return pos\n    for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {\n      if (min == max) return min\n      var mid = (min + max) >> 1\n      var len = foldFunc(orig.slice(0, mid)).length\n      if (len == pos) return mid\n      else if (len > pos) max = mid\n      else min = mid + 1\n    }\n  }\n\n  function searchStringForward(doc, query, start, caseFold) {\n    // Empty string would match anything and never progress, so we\n    // define it to match nothing instead.\n    if (!query.length) return null\n    var fold = caseFold ? doFold : noFold\n    var lines = fold(query).split(/\\r|\\n\\r?/)\n\n    search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {\n      var orig = doc.getLine(line).slice(ch), string = fold(orig)\n      if (lines.length == 1) {\n        var found = string.indexOf(lines[0])\n        if (found == -1) continue search\n        var start = adjustPos(orig, string, found, fold) + ch\n        return {from: Pos(line, adjustPos(orig, string, found, fold) + ch),\n                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)}\n      } else {\n        var cutFrom = string.length - lines[0].length\n        if (string.slice(cutFrom) != lines[0]) continue search\n        for (var i = 1; i < lines.length - 1; i++)\n          if (fold(doc.getLine(line + i)) != lines[i]) continue search\n        var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]\n        if (endString.slice(0, lastLine.length) != lastLine) continue search\n        return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),\n                to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))}\n      }\n    }\n  }\n\n  function searchStringBackward(doc, query, start, caseFold) {\n    if (!query.length) return null\n    var fold = caseFold ? doFold : noFold\n    var lines = fold(query).split(/\\r|\\n\\r?/)\n\n    search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {\n      var orig = doc.getLine(line)\n      if (ch > -1) orig = orig.slice(0, ch)\n      var string = fold(orig)\n      if (lines.length == 1) {\n        var found = string.lastIndexOf(lines[0])\n        if (found == -1) continue search\n        return {from: Pos(line, adjustPos(orig, string, found, fold)),\n                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))}\n      } else {\n        var lastLine = lines[lines.length - 1]\n        if (string.slice(0, lastLine.length) != lastLine) continue search\n        for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++)\n          if (fold(doc.getLine(start + i)) != lines[i]) continue search\n        var top = doc.getLine(line + 1 - lines.length), topString = fold(top)\n        if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search\n        return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),\n                to: Pos(line, adjustPos(orig, string, lastLine.length, fold))}\n      }\n    }\n  }\n\n  function SearchCursor(doc, query, pos, options) {\n    this.atOccurrence = false\n    this.afterEmptyMatch = false\n    this.doc = doc\n    pos = pos ? doc.clipPos(pos) : Pos(0, 0)\n    this.pos = {from: pos, to: pos}\n\n    var caseFold\n    if (typeof options == \"object\") {\n      caseFold = options.caseFold\n    } else { // Backwards compat for when caseFold was the 4th argument\n      caseFold = options\n      options = null\n    }\n\n    if (typeof query == \"string\") {\n      if (caseFold == null) caseFold = false\n      this.matches = function(reverse, pos) {\n        return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold)\n      }\n    } else {\n      query = ensureFlags(query, \"gm\")\n      if (!options || options.multiline !== false)\n        this.matches = function(reverse, pos) {\n          return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos)\n        }\n      else\n        this.matches = function(reverse, pos) {\n          return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos)\n        }\n    }\n  }\n\n  SearchCursor.prototype = {\n    findNext: function() {return this.find(false)},\n    findPrevious: function() {return this.find(true)},\n\n    find: function(reverse) {\n      var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to);\n      if (this.afterEmptyMatch && this.atOccurrence) {\n        // do not return the same 0 width match twice\n        head = Pos(head.line, head.ch)\n        if (reverse) {\n          head.ch--;\n          if (head.ch < 0) {\n            head.line--;\n            head.ch = (this.doc.getLine(head.line) || \"\").length;\n          }\n        } else {\n          head.ch++;\n          if (head.ch > (this.doc.getLine(head.line) || \"\").length) {\n            head.ch = 0;\n            head.line++;\n          }\n        }\n        if (CodeMirror.cmpPos(head, this.doc.clipPos(head)) != 0) {\n           return this.atOccurrence = false\n        }\n      }\n      var result = this.matches(reverse, head)\n      this.afterEmptyMatch = result && CodeMirror.cmpPos(result.from, result.to) == 0\n\n      if (result) {\n        this.pos = result\n        this.atOccurrence = true\n        return this.pos.match || true\n      } else {\n        var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0)\n        this.pos = {from: end, to: end}\n        return this.atOccurrence = false\n      }\n    },\n\n    from: function() {if (this.atOccurrence) return this.pos.from},\n    to: function() {if (this.atOccurrence) return this.pos.to},\n\n    replace: function(newText, origin) {\n      if (!this.atOccurrence) return\n      var lines = CodeMirror.splitLines(newText)\n      this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin)\n      this.pos.to = Pos(this.pos.from.line + lines.length - 1,\n                        lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0))\n    }\n  }\n\n  CodeMirror.defineExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this.doc, query, pos, caseFold)\n  })\n  CodeMirror.defineDocExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this, query, pos, caseFold)\n  })\n\n  CodeMirror.defineExtension(\"selectMatches\", function(query, caseFold) {\n    var ranges = []\n    var cur = this.getSearchCursor(query, this.getCursor(\"from\"), caseFold)\n    while (cur.findNext()) {\n      if (CodeMirror.cmpPos(cur.to(), this.getCursor(\"to\")) > 0) break\n      ranges.push({anchor: cur.from(), head: cur.to()})\n    }\n    if (ranges.length)\n      this.setSelections(ranges, 0)\n  })\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/selection/active-line.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n  var WRAP_CLASS = \"CodeMirror-activeline\";\n  var BACK_CLASS = \"CodeMirror-activeline-background\";\n  var GUTT_CLASS = \"CodeMirror-activeline-gutter\";\n\n  CodeMirror.defineOption(\"styleActiveLine\", false, function(cm, val, old) {\n    var prev = old == CodeMirror.Init ? false : old;\n    if (val == prev) return\n    if (prev) {\n      cm.off(\"beforeSelectionChange\", selectionChange);\n      clearActiveLines(cm);\n      delete cm.state.activeLines;\n    }\n    if (val) {\n      cm.state.activeLines = [];\n      updateActiveLines(cm, cm.listSelections());\n      cm.on(\"beforeSelectionChange\", selectionChange);\n    }\n  });\n\n  function clearActiveLines(cm) {\n    for (var i = 0; i < cm.state.activeLines.length; i++) {\n      cm.removeLineClass(cm.state.activeLines[i], \"wrap\", WRAP_CLASS);\n      cm.removeLineClass(cm.state.activeLines[i], \"background\", BACK_CLASS);\n      cm.removeLineClass(cm.state.activeLines[i], \"gutter\", GUTT_CLASS);\n    }\n  }\n\n  function sameArray(a, b) {\n    if (a.length != b.length) return false;\n    for (var i = 0; i < a.length; i++)\n      if (a[i] != b[i]) return false;\n    return true;\n  }\n\n  function updateActiveLines(cm, ranges) {\n    var active = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      var option = cm.getOption(\"styleActiveLine\");\n      if (typeof option == \"object\" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())\n        continue\n      var line = cm.getLineHandleVisualStart(range.head.line);\n      if (active[active.length - 1] != line) active.push(line);\n    }\n    if (sameArray(cm.state.activeLines, active)) return;\n    cm.operation(function() {\n      clearActiveLines(cm);\n      for (var i = 0; i < active.length; i++) {\n        cm.addLineClass(active[i], \"wrap\", WRAP_CLASS);\n        cm.addLineClass(active[i], \"background\", BACK_CLASS);\n        cm.addLineClass(active[i], \"gutter\", GUTT_CLASS);\n      }\n      cm.state.activeLines = active;\n    });\n  }\n\n  function selectionChange(cm, sel) {\n    updateActiveLines(cm, sel.ranges);\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/selection/mark-selection.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"styleSelectedText\", false, function(cm, val, old) {\n    var prev = old && old != CodeMirror.Init;\n    if (val && !prev) {\n      cm.state.markedSelection = [];\n      cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n      reset(cm);\n      cm.on(\"cursorActivity\", onCursorActivity);\n      cm.on(\"change\", onChange);\n    } else if (!val && prev) {\n      cm.off(\"cursorActivity\", onCursorActivity);\n      cm.off(\"change\", onChange);\n      clear(cm);\n      cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n    }\n  });\n\n  function onCursorActivity(cm) {\n    if (cm.state.markedSelection)\n      cm.operation(function() { update(cm); });\n  }\n\n  function onChange(cm) {\n    if (cm.state.markedSelection && cm.state.markedSelection.length)\n      cm.operation(function() { clear(cm); });\n  }\n\n  var CHUNK_SIZE = 8;\n  var Pos = CodeMirror.Pos;\n  var cmp = CodeMirror.cmpPos;\n\n  function coverRange(cm, from, to, addAt) {\n    if (cmp(from, to) == 0) return;\n    var array = cm.state.markedSelection;\n    var cls = cm.state.markedSelectionStyle;\n    for (var line = from.line;;) {\n      var start = line == from.line ? from : Pos(line, 0);\n      var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;\n      var end = atEnd ? to : Pos(endLine, 0);\n      var mark = cm.markText(start, end, {className: cls});\n      if (addAt == null) array.push(mark);\n      else array.splice(addAt++, 0, mark);\n      if (atEnd) break;\n      line = endLine;\n    }\n  }\n\n  function clear(cm) {\n    var array = cm.state.markedSelection;\n    for (var i = 0; i < array.length; ++i) array[i].clear();\n    array.length = 0;\n  }\n\n  function reset(cm) {\n    clear(cm);\n    var ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++)\n      coverRange(cm, ranges[i].from(), ranges[i].to());\n  }\n\n  function update(cm) {\n    if (!cm.somethingSelected()) return clear(cm);\n    if (cm.listSelections().length > 1) return reset(cm);\n\n    var from = cm.getCursor(\"start\"), to = cm.getCursor(\"end\");\n\n    var array = cm.state.markedSelection;\n    if (!array.length) return coverRange(cm, from, to);\n\n    var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();\n    if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||\n        cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)\n      return reset(cm);\n\n    while (cmp(from, coverStart.from) > 0) {\n      array.shift().clear();\n      coverStart = array[0].find();\n    }\n    if (cmp(from, coverStart.from) < 0) {\n      if (coverStart.to.line - from.line < CHUNK_SIZE) {\n        array.shift().clear();\n        coverRange(cm, from, coverStart.to, 0);\n      } else {\n        coverRange(cm, from, coverStart.from, 0);\n      }\n    }\n\n    while (cmp(to, coverEnd.to) < 0) {\n      array.pop().clear();\n      coverEnd = array[array.length - 1].find();\n    }\n    if (cmp(to, coverEnd.to) > 0) {\n      if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n        array.pop().clear();\n        coverRange(cm, coverEnd.from, to);\n      } else {\n        coverRange(cm, coverEnd.to, to);\n      }\n    }\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/selection/selection-pointer.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"selectionPointer\", false, function(cm, val) {\n    var data = cm.state.selectionPointer;\n    if (data) {\n      CodeMirror.off(cm.getWrapperElement(), \"mousemove\", data.mousemove);\n      CodeMirror.off(cm.getWrapperElement(), \"mouseout\", data.mouseout);\n      CodeMirror.off(window, \"scroll\", data.windowScroll);\n      cm.off(\"cursorActivity\", reset);\n      cm.off(\"scroll\", reset);\n      cm.state.selectionPointer = null;\n      cm.display.lineDiv.style.cursor = \"\";\n    }\n    if (val) {\n      data = cm.state.selectionPointer = {\n        value: typeof val == \"string\" ? val : \"default\",\n        mousemove: function(event) { mousemove(cm, event); },\n        mouseout: function(event) { mouseout(cm, event); },\n        windowScroll: function() { reset(cm); },\n        rects: null,\n        mouseX: null, mouseY: null,\n        willUpdate: false\n      };\n      CodeMirror.on(cm.getWrapperElement(), \"mousemove\", data.mousemove);\n      CodeMirror.on(cm.getWrapperElement(), \"mouseout\", data.mouseout);\n      CodeMirror.on(window, \"scroll\", data.windowScroll);\n      cm.on(\"cursorActivity\", reset);\n      cm.on(\"scroll\", reset);\n    }\n  });\n\n  function mousemove(cm, event) {\n    var data = cm.state.selectionPointer;\n    if (event.buttons == null ? event.which : event.buttons) {\n      data.mouseX = data.mouseY = null;\n    } else {\n      data.mouseX = event.clientX;\n      data.mouseY = event.clientY;\n    }\n    scheduleUpdate(cm);\n  }\n\n  function mouseout(cm, event) {\n    if (!cm.getWrapperElement().contains(event.relatedTarget)) {\n      var data = cm.state.selectionPointer;\n      data.mouseX = data.mouseY = null;\n      scheduleUpdate(cm);\n    }\n  }\n\n  function reset(cm) {\n    cm.state.selectionPointer.rects = null;\n    scheduleUpdate(cm);\n  }\n\n  function scheduleUpdate(cm) {\n    if (!cm.state.selectionPointer.willUpdate) {\n      cm.state.selectionPointer.willUpdate = true;\n      setTimeout(function() {\n        update(cm);\n        cm.state.selectionPointer.willUpdate = false;\n      }, 50);\n    }\n  }\n\n  function update(cm) {\n    var data = cm.state.selectionPointer;\n    if (!data) return;\n    if (data.rects == null && data.mouseX != null) {\n      data.rects = [];\n      if (cm.somethingSelected()) {\n        for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling)\n          data.rects.push(sel.getBoundingClientRect());\n      }\n    }\n    var inside = false;\n    if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) {\n      var rect = data.rects[i];\n      if (rect.left <= data.mouseX && rect.right >= data.mouseX &&\n          rect.top <= data.mouseY && rect.bottom >= data.mouseY)\n        inside = true;\n    }\n    var cursor = inside ? data.value : \"\";\n    if (cm.display.lineDiv.style.cursor != cursor)\n      cm.display.lineDiv.style.cursor = cursor;\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/tern/tern.css",
    "content": ".CodeMirror-Tern-completion {\n  padding-left: 22px;\n  position: relative;\n  line-height: 1.5;\n}\n.CodeMirror-Tern-completion:before {\n  position: absolute;\n  left: 2px;\n  bottom: 2px;\n  border-radius: 50%;\n  font-size: 12px;\n  font-weight: bold;\n  height: 15px;\n  width: 15px;\n  line-height: 16px;\n  text-align: center;\n  color: white;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.CodeMirror-Tern-completion-unknown:before {\n  content: \"?\";\n  background: #4bb;\n}\n.CodeMirror-Tern-completion-object:before {\n  content: \"O\";\n  background: #77c;\n}\n.CodeMirror-Tern-completion-fn:before {\n  content: \"F\";\n  background: #7c7;\n}\n.CodeMirror-Tern-completion-array:before {\n  content: \"A\";\n  background: #c66;\n}\n.CodeMirror-Tern-completion-number:before {\n  content: \"1\";\n  background: #999;\n}\n.CodeMirror-Tern-completion-string:before {\n  content: \"S\";\n  background: #999;\n}\n.CodeMirror-Tern-completion-bool:before {\n  content: \"B\";\n  background: #999;\n}\n\n.CodeMirror-Tern-completion-guess {\n  color: #999;\n}\n\n.CodeMirror-Tern-tooltip {\n  border: 1px solid silver;\n  border-radius: 3px;\n  color: #444;\n  padding: 2px 5px;\n  font-size: 90%;\n  font-family: monospace;\n  background-color: white;\n  white-space: pre-wrap;\n\n  max-width: 40em;\n  position: absolute;\n  z-index: 10;\n  -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n\n  transition: opacity 1s;\n  -moz-transition: opacity 1s;\n  -webkit-transition: opacity 1s;\n  -o-transition: opacity 1s;\n  -ms-transition: opacity 1s;\n}\n\n.CodeMirror-Tern-hint-doc {\n  max-width: 25em;\n  margin-top: -3px;\n}\n\n.CodeMirror-Tern-fname { color: black; }\n.CodeMirror-Tern-farg { color: #70a; }\n.CodeMirror-Tern-farg-current { text-decoration: underline; }\n.CodeMirror-Tern-type { color: #07c; }\n.CodeMirror-Tern-fhint-guess { opacity: .7; }\n"
  },
  {
    "path": "public/vendor/codemirror/addon/tern/tern.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Glue code between CodeMirror and Tern.\n//\n// Create a CodeMirror.TernServer to wrap an actual Tern server,\n// register open documents (CodeMirror.Doc instances) with it, and\n// call its methods to activate the assisting functions that Tern\n// provides.\n//\n// Options supported (all optional):\n// * defs: An array of JSON definition data structures.\n// * plugins: An object mapping plugin names to configuration\n//   options.\n// * getFile: A function(name, c) that can be used to access files in\n//   the project that haven't been loaded yet. Simply do c(null) to\n//   indicate that a file is not available.\n// * fileFilter: A function(value, docName, doc) that will be applied\n//   to documents before passing them on to Tern.\n// * switchToDoc: A function(name, doc) that should, when providing a\n//   multi-file view, switch the view or focus to the named file.\n// * showError: A function(editor, message) that can be used to\n//   override the way errors are displayed.\n// * completionTip: Customize the content in tooltips for completions.\n//   Is passed a single argument—the completion's data as returned by\n//   Tern—and may return a string, DOM node, or null to indicate that\n//   no tip should be shown. By default the docstring is shown.\n// * typeTip: Like completionTip, but for the tooltips shown for type\n//   queries.\n// * responseFilter: A function(doc, query, request, error, data) that\n//   will be applied to the Tern responses before treating them\n//\n//\n// It is possible to run the Tern server in a web worker by specifying\n// these additional options:\n// * useWorker: Set to true to enable web worker mode. You'll probably\n//   want to feature detect the actual value you use here, for example\n//   !!window.Worker.\n// * workerScript: The main script of the worker. Point this to\n//   wherever you are hosting worker.js from this directory.\n// * workerDeps: An array of paths pointing (relative to workerScript)\n//   to the Acorn and Tern libraries and any Tern plugins you want to\n//   load. Or, if you minified those into a single script and included\n//   them in the workerScript, simply leave this undefined.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n  // declare global: tern\n\n  CodeMirror.TernServer = function(options) {\n    var self = this;\n    this.options = options || {};\n    var plugins = this.options.plugins || (this.options.plugins = {});\n    if (!plugins.doc_comment) plugins.doc_comment = true;\n    this.docs = Object.create(null);\n    if (this.options.useWorker) {\n      this.server = new WorkerServer(this);\n    } else {\n      this.server = new tern.Server({\n        getFile: function(name, c) { return getFile(self, name, c); },\n        async: true,\n        defs: this.options.defs || [],\n        plugins: plugins\n      });\n    }\n    this.trackChange = function(doc, change) { trackChange(self, doc, change); };\n\n    this.cachedArgHints = null;\n    this.activeArgHints = null;\n    this.jumpStack = [];\n\n    this.getHint = function(cm, c) { return hint(self, cm, c); };\n    this.getHint.async = true;\n  };\n\n  CodeMirror.TernServer.prototype = {\n    addDoc: function(name, doc) {\n      var data = {doc: doc, name: name, changed: null};\n      this.server.addFile(name, docValue(this, data));\n      CodeMirror.on(doc, \"change\", this.trackChange);\n      return this.docs[name] = data;\n    },\n\n    delDoc: function(id) {\n      var found = resolveDoc(this, id);\n      if (!found) return;\n      CodeMirror.off(found.doc, \"change\", this.trackChange);\n      delete this.docs[found.name];\n      this.server.delFile(found.name);\n    },\n\n    hideDoc: function(id) {\n      closeArgHints(this);\n      var found = resolveDoc(this, id);\n      if (found && found.changed) sendDoc(this, found);\n    },\n\n    complete: function(cm) {\n      cm.showHint({hint: this.getHint});\n    },\n\n    showType: function(cm, pos, c) { showContextInfo(this, cm, pos, \"type\", c); },\n\n    showDocs: function(cm, pos, c) { showContextInfo(this, cm, pos, \"documentation\", c); },\n\n    updateArgHints: function(cm) { updateArgHints(this, cm); },\n\n    jumpToDef: function(cm) { jumpToDef(this, cm); },\n\n    jumpBack: function(cm) { jumpBack(this, cm); },\n\n    rename: function(cm) { rename(this, cm); },\n\n    selectName: function(cm) { selectName(this, cm); },\n\n    request: function (cm, query, c, pos) {\n      var self = this;\n      var doc = findDoc(this, cm.getDoc());\n      var request = buildRequest(this, doc, query, pos);\n      var extraOptions = request.query && this.options.queryOptions && this.options.queryOptions[request.query.type]\n      if (extraOptions) for (var prop in extraOptions) request.query[prop] = extraOptions[prop];\n\n      this.server.request(request, function (error, data) {\n        if (!error && self.options.responseFilter)\n          data = self.options.responseFilter(doc, query, request, error, data);\n        c(error, data);\n      });\n    },\n\n    destroy: function () {\n      closeArgHints(this)\n      if (this.worker) {\n        this.worker.terminate();\n        this.worker = null;\n      }\n    }\n  };\n\n  var Pos = CodeMirror.Pos;\n  var cls = \"CodeMirror-Tern-\";\n  var bigDoc = 250;\n\n  function getFile(ts, name, c) {\n    var buf = ts.docs[name];\n    if (buf)\n      c(docValue(ts, buf));\n    else if (ts.options.getFile)\n      ts.options.getFile(name, c);\n    else\n      c(null);\n  }\n\n  function findDoc(ts, doc, name) {\n    for (var n in ts.docs) {\n      var cur = ts.docs[n];\n      if (cur.doc == doc) return cur;\n    }\n    if (!name) for (var i = 0;; ++i) {\n      n = \"[doc\" + (i || \"\") + \"]\";\n      if (!ts.docs[n]) { name = n; break; }\n    }\n    return ts.addDoc(name, doc);\n  }\n\n  function resolveDoc(ts, id) {\n    if (typeof id == \"string\") return ts.docs[id];\n    if (id instanceof CodeMirror) id = id.getDoc();\n    if (id instanceof CodeMirror.Doc) return findDoc(ts, id);\n  }\n\n  function trackChange(ts, doc, change) {\n    var data = findDoc(ts, doc);\n\n    var argHints = ts.cachedArgHints;\n    if (argHints && argHints.doc == doc && cmpPos(argHints.start, change.to) >= 0)\n      ts.cachedArgHints = null;\n\n    var changed = data.changed;\n    if (changed == null)\n      data.changed = changed = {from: change.from.line, to: change.from.line};\n    var end = change.from.line + (change.text.length - 1);\n    if (change.from.line < changed.to) changed.to = changed.to - (change.to.line - end);\n    if (end >= changed.to) changed.to = end + 1;\n    if (changed.from > change.from.line) changed.from = change.from.line;\n\n    if (doc.lineCount() > bigDoc && change.to - changed.from > 100) setTimeout(function() {\n      if (data.changed && data.changed.to - data.changed.from > 100) sendDoc(ts, data);\n    }, 200);\n  }\n\n  function sendDoc(ts, doc) {\n    ts.server.request({files: [{type: \"full\", name: doc.name, text: docValue(ts, doc)}]}, function(error) {\n      if (error) window.console.error(error);\n      else doc.changed = null;\n    });\n  }\n\n  // Completion\n\n  function hint(ts, cm, c) {\n    ts.request(cm, {type: \"completions\", types: true, docs: true, urls: true}, function(error, data) {\n      if (error) return showError(ts, cm, error);\n      var completions = [], after = \"\";\n      var from = data.start, to = data.end;\n      if (cm.getRange(Pos(from.line, from.ch - 2), from) == \"[\\\"\" &&\n          cm.getRange(to, Pos(to.line, to.ch + 2)) != \"\\\"]\")\n        after = \"\\\"]\";\n\n      for (var i = 0; i < data.completions.length; ++i) {\n        var completion = data.completions[i], className = typeToIcon(completion.type);\n        if (data.guess) className += \" \" + cls + \"guess\";\n        completions.push({text: completion.name + after,\n                          displayText: completion.displayName || completion.name,\n                          className: className,\n                          data: completion});\n      }\n\n      var obj = {from: from, to: to, list: completions};\n      var tooltip = null;\n      CodeMirror.on(obj, \"close\", function() { remove(tooltip); });\n      CodeMirror.on(obj, \"update\", function() { remove(tooltip); });\n      CodeMirror.on(obj, \"select\", function(cur, node) {\n        remove(tooltip);\n        var content = ts.options.completionTip ? ts.options.completionTip(cur.data) : cur.data.doc;\n        if (content) {\n          tooltip = makeTooltip(node.parentNode.getBoundingClientRect().right + window.pageXOffset,\n                                node.getBoundingClientRect().top + window.pageYOffset, content, cm, cls + \"hint-doc\");\n        }\n      });\n      c(obj);\n    });\n  }\n\n  function typeToIcon(type) {\n    var suffix;\n    if (type == \"?\") suffix = \"unknown\";\n    else if (type == \"number\" || type == \"string\" || type == \"bool\") suffix = type;\n    else if (/^fn\\(/.test(type)) suffix = \"fn\";\n    else if (/^\\[/.test(type)) suffix = \"array\";\n    else suffix = \"object\";\n    return cls + \"completion \" + cls + \"completion-\" + suffix;\n  }\n\n  // Type queries\n\n  function showContextInfo(ts, cm, pos, queryName, c) {\n    ts.request(cm, queryName, function(error, data) {\n      if (error) return showError(ts, cm, error);\n      if (ts.options.typeTip) {\n        var tip = ts.options.typeTip(data);\n      } else {\n        var tip = elt(\"span\", null, elt(\"strong\", null, data.type || \"not found\"));\n        if (data.doc)\n          tip.appendChild(document.createTextNode(\" — \" + data.doc));\n        if (data.url) {\n          tip.appendChild(document.createTextNode(\" \"));\n          var child = tip.appendChild(elt(\"a\", null, \"[docs]\"));\n          child.href = data.url;\n          child.target = \"_blank\";\n        }\n      }\n      tempTooltip(cm, tip, ts);\n      if (c) c();\n    }, pos);\n  }\n\n  // Maintaining argument hints\n\n  function updateArgHints(ts, cm) {\n    closeArgHints(ts);\n\n    if (cm.somethingSelected()) return;\n    var state = cm.getTokenAt(cm.getCursor()).state;\n    var inner = CodeMirror.innerMode(cm.getMode(), state);\n    if (inner.mode.name != \"javascript\") return;\n    var lex = inner.state.lexical;\n    if (lex.info != \"call\") return;\n\n    var ch, argPos = lex.pos || 0, tabSize = cm.getOption(\"tabSize\");\n    for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) {\n      var str = cm.getLine(line), extra = 0;\n      for (var pos = 0;;) {\n        var tab = str.indexOf(\"\\t\", pos);\n        if (tab == -1) break;\n        extra += tabSize - (tab + extra) % tabSize - 1;\n        pos = tab + 1;\n      }\n      ch = lex.column - extra;\n      if (str.charAt(ch) == \"(\") {found = true; break;}\n    }\n    if (!found) return;\n\n    var start = Pos(line, ch);\n    var cache = ts.cachedArgHints;\n    if (cache && cache.doc == cm.getDoc() && cmpPos(start, cache.start) == 0)\n      return showArgHints(ts, cm, argPos);\n\n    ts.request(cm, {type: \"type\", preferFunction: true, end: start}, function(error, data) {\n      if (error || !data.type || !(/^fn\\(/).test(data.type)) return;\n      ts.cachedArgHints = {\n        start: start,\n        type: parseFnType(data.type),\n        name: data.exprName || data.name || \"fn\",\n        guess: data.guess,\n        doc: cm.getDoc()\n      };\n      showArgHints(ts, cm, argPos);\n    });\n  }\n\n  function showArgHints(ts, cm, pos) {\n    closeArgHints(ts);\n\n    var cache = ts.cachedArgHints, tp = cache.type;\n    var tip = elt(\"span\", cache.guess ? cls + \"fhint-guess\" : null,\n                  elt(\"span\", cls + \"fname\", cache.name), \"(\");\n    for (var i = 0; i < tp.args.length; ++i) {\n      if (i) tip.appendChild(document.createTextNode(\", \"));\n      var arg = tp.args[i];\n      tip.appendChild(elt(\"span\", cls + \"farg\" + (i == pos ? \" \" + cls + \"farg-current\" : \"\"), arg.name || \"?\"));\n      if (arg.type != \"?\") {\n        tip.appendChild(document.createTextNode(\":\\u00a0\"));\n        tip.appendChild(elt(\"span\", cls + \"type\", arg.type));\n      }\n    }\n    tip.appendChild(document.createTextNode(tp.rettype ? \") ->\\u00a0\" : \")\"));\n    if (tp.rettype) tip.appendChild(elt(\"span\", cls + \"type\", tp.rettype));\n    var place = cm.cursorCoords(null, \"page\");\n    var tooltip = ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip, cm)\n    setTimeout(function() {\n      tooltip.clear = onEditorActivity(cm, function() {\n        if (ts.activeArgHints == tooltip) closeArgHints(ts) })\n    }, 20)\n  }\n\n  function parseFnType(text) {\n    var args = [], pos = 3;\n\n    function skipMatching(upto) {\n      var depth = 0, start = pos;\n      for (;;) {\n        var next = text.charAt(pos);\n        if (upto.test(next) && !depth) return text.slice(start, pos);\n        if (/[{\\[\\(]/.test(next)) ++depth;\n        else if (/[}\\]\\)]/.test(next)) --depth;\n        ++pos;\n      }\n    }\n\n    // Parse arguments\n    if (text.charAt(pos) != \")\") for (;;) {\n      var name = text.slice(pos).match(/^([^, \\(\\[\\{]+): /);\n      if (name) {\n        pos += name[0].length;\n        name = name[1];\n      }\n      args.push({name: name, type: skipMatching(/[\\),]/)});\n      if (text.charAt(pos) == \")\") break;\n      pos += 2;\n    }\n\n    var rettype = text.slice(pos).match(/^\\) -> (.*)$/);\n\n    return {args: args, rettype: rettype && rettype[1]};\n  }\n\n  // Moving to the definition of something\n\n  function jumpToDef(ts, cm) {\n    function inner(varName) {\n      var req = {type: \"definition\", variable: varName || null};\n      var doc = findDoc(ts, cm.getDoc());\n      ts.server.request(buildRequest(ts, doc, req), function(error, data) {\n        if (error) return showError(ts, cm, error);\n        if (!data.file && data.url) { window.open(data.url); return; }\n\n        if (data.file) {\n          var localDoc = ts.docs[data.file], found;\n          if (localDoc && (found = findContext(localDoc.doc, data))) {\n            ts.jumpStack.push({file: doc.name,\n                               start: cm.getCursor(\"from\"),\n                               end: cm.getCursor(\"to\")});\n            moveTo(ts, doc, localDoc, found.start, found.end);\n            return;\n          }\n        }\n        showError(ts, cm, \"Could not find a definition.\");\n      });\n    }\n\n    if (!atInterestingExpression(cm))\n      dialog(cm, \"Jump to variable\", function(name) { if (name) inner(name); });\n    else\n      inner();\n  }\n\n  function jumpBack(ts, cm) {\n    var pos = ts.jumpStack.pop(), doc = pos && ts.docs[pos.file];\n    if (!doc) return;\n    moveTo(ts, findDoc(ts, cm.getDoc()), doc, pos.start, pos.end);\n  }\n\n  function moveTo(ts, curDoc, doc, start, end) {\n    doc.doc.setSelection(start, end);\n    if (curDoc != doc && ts.options.switchToDoc) {\n      closeArgHints(ts);\n      ts.options.switchToDoc(doc.name, doc.doc);\n    }\n  }\n\n  // The {line,ch} representation of positions makes this rather awkward.\n  function findContext(doc, data) {\n    var before = data.context.slice(0, data.contextOffset).split(\"\\n\");\n    var startLine = data.start.line - (before.length - 1);\n    var start = Pos(startLine, (before.length == 1 ? data.start.ch : doc.getLine(startLine).length) - before[0].length);\n\n    var text = doc.getLine(startLine).slice(start.ch);\n    for (var cur = startLine + 1; cur < doc.lineCount() && text.length < data.context.length; ++cur)\n      text += \"\\n\" + doc.getLine(cur);\n    if (text.slice(0, data.context.length) == data.context) return data;\n\n    var cursor = doc.getSearchCursor(data.context, 0, false);\n    var nearest, nearestDist = Infinity;\n    while (cursor.findNext()) {\n      var from = cursor.from(), dist = Math.abs(from.line - start.line) * 10000;\n      if (!dist) dist = Math.abs(from.ch - start.ch);\n      if (dist < nearestDist) { nearest = from; nearestDist = dist; }\n    }\n    if (!nearest) return null;\n\n    if (before.length == 1)\n      nearest.ch += before[0].length;\n    else\n      nearest = Pos(nearest.line + (before.length - 1), before[before.length - 1].length);\n    if (data.start.line == data.end.line)\n      var end = Pos(nearest.line, nearest.ch + (data.end.ch - data.start.ch));\n    else\n      var end = Pos(nearest.line + (data.end.line - data.start.line), data.end.ch);\n    return {start: nearest, end: end};\n  }\n\n  function atInterestingExpression(cm) {\n    var pos = cm.getCursor(\"end\"), tok = cm.getTokenAt(pos);\n    if (tok.start < pos.ch && tok.type == \"comment\") return false;\n    return /[\\w)\\]]/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1));\n  }\n\n  // Variable renaming\n\n  function rename(ts, cm) {\n    var token = cm.getTokenAt(cm.getCursor());\n    if (!/\\w/.test(token.string)) return showError(ts, cm, \"Not at a variable\");\n    dialog(cm, \"New name for \" + token.string, function(newName) {\n      ts.request(cm, {type: \"rename\", newName: newName, fullDocs: true}, function(error, data) {\n        if (error) return showError(ts, cm, error);\n        applyChanges(ts, data.changes);\n      });\n    });\n  }\n\n  function selectName(ts, cm) {\n    var name = findDoc(ts, cm.doc).name;\n    ts.request(cm, {type: \"refs\"}, function(error, data) {\n      if (error) return showError(ts, cm, error);\n      var ranges = [], cur = 0;\n      var curPos = cm.getCursor();\n      for (var i = 0; i < data.refs.length; i++) {\n        var ref = data.refs[i];\n        if (ref.file == name) {\n          ranges.push({anchor: ref.start, head: ref.end});\n          if (cmpPos(curPos, ref.start) >= 0 && cmpPos(curPos, ref.end) <= 0)\n            cur = ranges.length - 1;\n        }\n      }\n      cm.setSelections(ranges, cur);\n    });\n  }\n\n  var nextChangeOrig = 0;\n  function applyChanges(ts, changes) {\n    var perFile = Object.create(null);\n    for (var i = 0; i < changes.length; ++i) {\n      var ch = changes[i];\n      (perFile[ch.file] || (perFile[ch.file] = [])).push(ch);\n    }\n    for (var file in perFile) {\n      var known = ts.docs[file], chs = perFile[file];;\n      if (!known) continue;\n      chs.sort(function(a, b) { return cmpPos(b.start, a.start); });\n      var origin = \"*rename\" + (++nextChangeOrig);\n      for (var i = 0; i < chs.length; ++i) {\n        var ch = chs[i];\n        known.doc.replaceRange(ch.text, ch.start, ch.end, origin);\n      }\n    }\n  }\n\n  // Generic request-building helper\n\n  function buildRequest(ts, doc, query, pos) {\n    var files = [], offsetLines = 0, allowFragments = !query.fullDocs;\n    if (!allowFragments) delete query.fullDocs;\n    if (typeof query == \"string\") query = {type: query};\n    query.lineCharPositions = true;\n    if (query.end == null) {\n      query.end = pos || doc.doc.getCursor(\"end\");\n      if (doc.doc.somethingSelected())\n        query.start = doc.doc.getCursor(\"start\");\n    }\n    var startPos = query.start || query.end;\n\n    if (doc.changed) {\n      if (doc.doc.lineCount() > bigDoc && allowFragments !== false &&\n          doc.changed.to - doc.changed.from < 100 &&\n          doc.changed.from <= startPos.line && doc.changed.to > query.end.line) {\n        files.push(getFragmentAround(doc, startPos, query.end));\n        query.file = \"#0\";\n        var offsetLines = files[0].offsetLines;\n        if (query.start != null) query.start = Pos(query.start.line - -offsetLines, query.start.ch);\n        query.end = Pos(query.end.line - offsetLines, query.end.ch);\n      } else {\n        files.push({type: \"full\",\n                    name: doc.name,\n                    text: docValue(ts, doc)});\n        query.file = doc.name;\n        doc.changed = null;\n      }\n    } else {\n      query.file = doc.name;\n    }\n    for (var name in ts.docs) {\n      var cur = ts.docs[name];\n      if (cur.changed && cur != doc) {\n        files.push({type: \"full\", name: cur.name, text: docValue(ts, cur)});\n        cur.changed = null;\n      }\n    }\n\n    return {query: query, files: files};\n  }\n\n  function getFragmentAround(data, start, end) {\n    var doc = data.doc;\n    var minIndent = null, minLine = null, endLine, tabSize = 4;\n    for (var p = start.line - 1, min = Math.max(0, p - 50); p >= min; --p) {\n      var line = doc.getLine(p), fn = line.search(/\\bfunction\\b/);\n      if (fn < 0) continue;\n      var indent = CodeMirror.countColumn(line, null, tabSize);\n      if (minIndent != null && minIndent <= indent) continue;\n      minIndent = indent;\n      minLine = p;\n    }\n    if (minLine == null) minLine = min;\n    var max = Math.min(doc.lastLine(), end.line + 20);\n    if (minIndent == null || minIndent == CodeMirror.countColumn(doc.getLine(start.line), null, tabSize))\n      endLine = max;\n    else for (endLine = end.line + 1; endLine < max; ++endLine) {\n      var indent = CodeMirror.countColumn(doc.getLine(endLine), null, tabSize);\n      if (indent <= minIndent) break;\n    }\n    var from = Pos(minLine, 0);\n\n    return {type: \"part\",\n            name: data.name,\n            offsetLines: from.line,\n            text: doc.getRange(from, Pos(endLine, end.line == endLine ? null : 0))};\n  }\n\n  // Generic utilities\n\n  var cmpPos = CodeMirror.cmpPos;\n\n  function elt(tagname, cls /*, ... elts*/) {\n    var e = document.createElement(tagname);\n    if (cls) e.className = cls;\n    for (var i = 2; i < arguments.length; ++i) {\n      var elt = arguments[i];\n      if (typeof elt == \"string\") elt = document.createTextNode(elt);\n      e.appendChild(elt);\n    }\n    return e;\n  }\n\n  function dialog(cm, text, f) {\n    if (cm.openDialog)\n      cm.openDialog(text + \": <input type=text>\", f);\n    else\n      f(prompt(text, \"\"));\n  }\n\n  // Tooltips\n\n  function tempTooltip(cm, content, ts) {\n    if (cm.state.ternTooltip) remove(cm.state.ternTooltip);\n    var where = cm.cursorCoords();\n    var tip = cm.state.ternTooltip = makeTooltip(where.right + 1, where.bottom, content, cm);\n    function maybeClear() {\n      old = true;\n      if (!mouseOnTip) clear();\n    }\n    function clear() {\n      cm.state.ternTooltip = null;\n      if (tip.parentNode) fadeOut(tip)\n      clearActivity()\n    }\n    var mouseOnTip = false, old = false;\n    CodeMirror.on(tip, \"mousemove\", function() { mouseOnTip = true; });\n    CodeMirror.on(tip, \"mouseout\", function(e) {\n      var related = e.relatedTarget || e.toElement\n      if (!related || !CodeMirror.contains(tip, related)) {\n        if (old) clear();\n        else mouseOnTip = false;\n      }\n    });\n    setTimeout(maybeClear, ts.options.hintDelay ? ts.options.hintDelay : 1700);\n    var clearActivity = onEditorActivity(cm, clear)\n  }\n\n  function onEditorActivity(cm, f) {\n    cm.on(\"cursorActivity\", f)\n    cm.on(\"blur\", f)\n    cm.on(\"scroll\", f)\n    cm.on(\"setDoc\", f)\n    return function() {\n      cm.off(\"cursorActivity\", f)\n      cm.off(\"blur\", f)\n      cm.off(\"scroll\", f)\n      cm.off(\"setDoc\", f)\n    }\n  }\n\n  function makeTooltip(x, y, content, cm, className) {\n    var node = elt(\"div\", cls + \"tooltip\" + \" \" + (className || \"\"), content);\n    node.style.left = x + \"px\";\n    node.style.top = y + \"px\";\n    var container = ((cm.options || {}).hintOptions || {}).container || document.body;\n    container.appendChild(node);\n\n    var pos = cm.cursorCoords();\n    var winW = window.innerWidth;\n    var winH = window.innerHeight;\n    var box = node.getBoundingClientRect();\n    var hints = document.querySelector(\".CodeMirror-hints\");\n    var overlapY = box.bottom - winH;\n    var overlapX = box.right - winW;\n\n    if (hints && overlapX > 0) {\n      node.style.left = 0;\n      var box = node.getBoundingClientRect();\n      node.style.left = (x = x - hints.offsetWidth - box.width) + \"px\";\n      overlapX = box.right - winW;\n    }\n    if (overlapY > 0) {\n      var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);\n      if (curTop - height > 0) { // Fits above cursor\n        node.style.top = (pos.top - height) + \"px\";\n      } else if (height > winH) {\n        node.style.height = (winH - 5) + \"px\";\n        node.style.top = (pos.bottom - box.top) + \"px\";\n      }\n    }\n    if (overlapX > 0) {\n      if (box.right - box.left > winW) {\n        node.style.width = (winW - 5) + \"px\";\n        overlapX -= (box.right - box.left) - winW;\n      }\n      node.style.left = (x - overlapX) + \"px\";\n    }\n\n    return node;\n  }\n\n  function remove(node) {\n    var p = node && node.parentNode;\n    if (p) p.removeChild(node);\n  }\n\n  function fadeOut(tooltip) {\n    tooltip.style.opacity = \"0\";\n    setTimeout(function() { remove(tooltip); }, 1100);\n  }\n\n  function showError(ts, cm, msg) {\n    if (ts.options.showError)\n      ts.options.showError(cm, msg);\n    else\n      tempTooltip(cm, String(msg), ts);\n  }\n\n  function closeArgHints(ts) {\n    if (ts.activeArgHints) {\n      if (ts.activeArgHints.clear) ts.activeArgHints.clear()\n      remove(ts.activeArgHints)\n      ts.activeArgHints = null\n    }\n  }\n\n  function docValue(ts, doc) {\n    var val = doc.doc.getValue();\n    if (ts.options.fileFilter) val = ts.options.fileFilter(val, doc.name, doc.doc);\n    return val;\n  }\n\n  // Worker wrapper\n\n  function WorkerServer(ts) {\n    var worker = ts.worker = new Worker(ts.options.workerScript);\n    worker.postMessage({type: \"init\",\n                        defs: ts.options.defs,\n                        plugins: ts.options.plugins,\n                        scripts: ts.options.workerDeps});\n    var msgId = 0, pending = {};\n\n    function send(data, c) {\n      if (c) {\n        data.id = ++msgId;\n        pending[msgId] = c;\n      }\n      worker.postMessage(data);\n    }\n    worker.onmessage = function(e) {\n      var data = e.data;\n      if (data.type == \"getFile\") {\n        getFile(ts, data.name, function(err, text) {\n          send({type: \"getFile\", err: String(err), text: text, id: data.id});\n        });\n      } else if (data.type == \"debug\") {\n        window.console.log(data.message);\n      } else if (data.id && pending[data.id]) {\n        pending[data.id](data.err, data.body);\n        delete pending[data.id];\n      }\n    };\n    worker.onerror = function(e) {\n      for (var id in pending) pending[id](e);\n      pending = {};\n    };\n\n    this.addFile = function(name, text) { send({type: \"add\", name: name, text: text}); };\n    this.delFile = function(name) { send({type: \"del\", name: name}); };\n    this.request = function(body, c) { send({type: \"req\", body: body}, c); };\n  }\n});\n"
  },
  {
    "path": "public/vendor/codemirror/addon/tern/worker.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// declare global: tern, server\n\nvar server;\n\nthis.onmessage = function(e) {\n  var data = e.data;\n  switch (data.type) {\n  case \"init\": return startServer(data.defs, data.plugins, data.scripts);\n  case \"add\": return server.addFile(data.name, data.text);\n  case \"del\": return server.delFile(data.name);\n  case \"req\": return server.request(data.body, function(err, reqData) {\n    postMessage({id: data.id, body: reqData, err: err && String(err)});\n  });\n  case \"getFile\":\n    var c = pending[data.id];\n    delete pending[data.id];\n    return c(data.err, data.text);\n  default: throw new Error(\"Unknown message type: \" + data.type);\n  }\n};\n\nvar nextId = 0, pending = {};\nfunction getFile(file, c) {\n  postMessage({type: \"getFile\", name: file, id: ++nextId});\n  pending[nextId] = c;\n}\n\nfunction startServer(defs, plugins, scripts) {\n  if (scripts) importScripts.apply(null, scripts);\n\n  server = new tern.Server({\n    getFile: getFile,\n    async: true,\n    defs: defs,\n    plugins: plugins\n  });\n}\n\nthis.console = {\n  log: function(v) { postMessage({type: \"debug\", message: v}); }\n};\n"
  },
  {
    "path": "public/vendor/codemirror/addon/wrap/hardwrap.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var Pos = CodeMirror.Pos;\n\n  function findParagraph(cm, pos, options) {\n    var startRE = options.paragraphStart || cm.getHelper(pos, \"paragraphStart\");\n    for (var start = pos.line, first = cm.firstLine(); start > first; --start) {\n      var line = cm.getLine(start);\n      if (startRE && startRE.test(line)) break;\n      if (!/\\S/.test(line)) { ++start; break; }\n    }\n    var endRE = options.paragraphEnd || cm.getHelper(pos, \"paragraphEnd\");\n    for (var end = pos.line + 1, last = cm.lastLine(); end <= last; ++end) {\n      var line = cm.getLine(end);\n      if (endRE && endRE.test(line)) { ++end; break; }\n      if (!/\\S/.test(line)) break;\n    }\n    return {from: start, to: end};\n  }\n\n  function findBreakPoint(text, column, wrapOn, killTrailingSpace, forceBreak) {\n    var at = column\n    while (at < text.length && text.charAt(at) == \" \") at++\n    for (; at > 0; --at)\n      if (wrapOn.test(text.slice(at - 1, at + 1))) break;\n\n    if (!forceBreak && at <= text.match(/^[ \\t]*/)[0].length) {\n      // didn't find a break point before column, in non-forceBreak mode try to\n      // find one after 'column'.\n      for (at = column + 1; at < text.length - 1; ++at) {\n        if (wrapOn.test(text.slice(at - 1, at + 1))) break;\n      }\n    }\n\n    for (var first = true;; first = false) {\n      var endOfText = at;\n      if (killTrailingSpace)\n        while (text.charAt(endOfText - 1) == \" \") --endOfText;\n      if (endOfText == 0 && first) at = column;\n      else return {from: endOfText, to: at};\n    }\n  }\n\n  function wrapRange(cm, from, to, options) {\n    from = cm.clipPos(from); to = cm.clipPos(to);\n    var column = options.column || 80;\n    var wrapOn = options.wrapOn || /\\s\\S|-[^\\.\\d]/;\n    var forceBreak = options.forceBreak !== false;\n    var killTrailing = options.killTrailingSpace !== false;\n    var changes = [], curLine = \"\", curNo = from.line;\n    var lines = cm.getRange(from, to, false);\n    if (!lines.length) return null;\n    var leadingSpace = lines[0].match(/^[ \\t]*/)[0];\n    if (leadingSpace.length >= column) column = leadingSpace.length + 1\n\n    for (var i = 0; i < lines.length; ++i) {\n      var text = lines[i], oldLen = curLine.length, spaceInserted = 0;\n      if (curLine && text && !wrapOn.test(curLine.charAt(curLine.length - 1) + text.charAt(0))) {\n        curLine += \" \";\n        spaceInserted = 1;\n      }\n      var spaceTrimmed = \"\";\n      if (i) {\n        spaceTrimmed = text.match(/^\\s*/)[0];\n        text = text.slice(spaceTrimmed.length);\n      }\n      curLine += text;\n      if (i) {\n        var firstBreak = curLine.length > column && leadingSpace == spaceTrimmed &&\n          findBreakPoint(curLine, column, wrapOn, killTrailing, forceBreak);\n        // If this isn't broken, or is broken at a different point, remove old break\n        if (!firstBreak || firstBreak.from != oldLen || firstBreak.to != oldLen + spaceInserted) {\n          changes.push({text: [spaceInserted ? \" \" : \"\"],\n                        from: Pos(curNo, oldLen),\n                        to: Pos(curNo + 1, spaceTrimmed.length)});\n        } else {\n          curLine = leadingSpace + text;\n          ++curNo;\n        }\n      }\n      while (curLine.length > column) {\n        var bp = findBreakPoint(curLine, column, wrapOn, killTrailing, forceBreak);\n        if (bp.from != bp.to ||\n            forceBreak && leadingSpace !== curLine.slice(0, bp.to)) {\n          changes.push({text: [\"\", leadingSpace],\n                        from: Pos(curNo, bp.from),\n                        to: Pos(curNo, bp.to)});\n          curLine = leadingSpace + curLine.slice(bp.to);\n          ++curNo;\n        } else {\n          break;\n        }\n      }\n    }\n    if (changes.length) cm.operation(function() {\n      for (var i = 0; i < changes.length; ++i) {\n        var change = changes[i];\n        if (change.text || CodeMirror.cmpPos(change.from, change.to))\n          cm.replaceRange(change.text, change.from, change.to);\n      }\n    });\n    return changes.length ? {from: changes[0].from, to: CodeMirror.changeEnd(changes[changes.length - 1])} : null;\n  }\n\n  CodeMirror.defineExtension(\"wrapParagraph\", function(pos, options) {\n    options = options || {};\n    if (!pos) pos = this.getCursor();\n    var para = findParagraph(this, pos, options);\n    return wrapRange(this, Pos(para.from, 0), Pos(para.to - 1), options);\n  });\n\n  CodeMirror.commands.wrapLines = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections(), at = cm.lastLine() + 1;\n      for (var i = ranges.length - 1; i >= 0; i--) {\n        var range = ranges[i], span;\n        if (range.empty()) {\n          var para = findParagraph(cm, range.head, {});\n          span = {from: Pos(para.from, 0), to: Pos(para.to - 1)};\n        } else {\n          span = {from: range.from(), to: range.to()};\n        }\n        if (span.to.line >= at) continue;\n        at = span.from.line;\n        wrapRange(cm, span.from, span.to, {});\n      }\n    });\n  };\n\n  CodeMirror.defineExtension(\"wrapRange\", function(from, to, options) {\n    return wrapRange(this, from, to, options || {});\n  });\n\n  CodeMirror.defineExtension(\"wrapParagraphsInRange\", function(from, to, options) {\n    options = options || {};\n    var cm = this, paras = [];\n    for (var line = from.line; line <= to.line;) {\n      var para = findParagraph(cm, Pos(line, 0), options);\n      paras.push(para);\n      line = para.to;\n    }\n    var madeChange = false;\n    if (paras.length) cm.operation(function() {\n      for (var i = paras.length - 1; i >= 0; --i)\n        madeChange = madeChange || wrapRange(cm, Pos(paras[i].from, 0), Pos(paras[i].to - 1), options);\n    });\n    return madeChange;\n  });\n});\n"
  },
  {
    "path": "public/vendor/codemirror/lib/codemirror.css",
    "content": "/* BASICS */\n\n.CodeMirror {\n  /* Set height, width, borders, and global font properties here */\n  font-family: monospace;\n  height: 300px;\n  color: black;\n  direction: ltr;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n  padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n  padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n  border-right: 1px solid #ddd;\n  background-color: #f7f7f7;\n  white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n  padding: 0 3px 0 5px;\n  min-width: 20px;\n  text-align: right;\n  color: #999;\n  white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n  border-left: 1px solid black;\n  border-right: none;\n  width: 0;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n  border-left: 1px solid silver;\n}\n.cm-fat-cursor .CodeMirror-cursor {\n  width: auto;\n  border: 0 !important;\n  background: #7e7;\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n  z-index: 1;\n}\n.cm-fat-cursor .CodeMirror-line::selection,\n.cm-fat-cursor .CodeMirror-line > span::selection, \n.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; }\n.cm-fat-cursor .CodeMirror-line::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; }\n.cm-fat-cursor { caret-color: transparent; }\n@-moz-keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n@-webkit-keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n@keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n  position: absolute;\n  left: 0; right: 0; top: -50px; bottom: 0;\n  overflow: hidden;\n}\n.CodeMirror-ruler {\n  border-left: 1px solid #ccc;\n  top: 0; bottom: 0;\n  position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n   the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n  position: relative;\n  overflow: hidden;\n  background: white;\n}\n\n.CodeMirror-scroll {\n  overflow: scroll !important; /* Things will break if this is overridden */\n  /* 50px is the magic margin used to hide the element's real scrollbars */\n  /* See overflow: hidden in .CodeMirror */\n  margin-bottom: -50px; margin-right: -50px;\n  padding-bottom: 50px;\n  height: 100%;\n  outline: none; /* Prevent dragging from highlighting the element */\n  position: relative;\n  z-index: 0;\n}\n.CodeMirror-sizer {\n  position: relative;\n  border-right: 50px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n   before actual scrolling happens, thus preventing shaking and\n   flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  position: absolute;\n  z-index: 6;\n  display: none;\n  outline: none;\n}\n.CodeMirror-vscrollbar {\n  right: 0; top: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n  bottom: 0; left: 0;\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n  right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n  left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n  position: absolute; left: 0; top: 0;\n  min-height: 100%;\n  z-index: 3;\n}\n.CodeMirror-gutter {\n  white-space: normal;\n  height: 100%;\n  display: inline-block;\n  vertical-align: top;\n  margin-bottom: -50px;\n}\n.CodeMirror-gutter-wrapper {\n  position: absolute;\n  z-index: 4;\n  background: none !important;\n  border: none !important;\n}\n.CodeMirror-gutter-background {\n  position: absolute;\n  top: 0; bottom: 0;\n  z-index: 4;\n}\n.CodeMirror-gutter-elt {\n  position: absolute;\n  cursor: default;\n  z-index: 4;\n}\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n  cursor: text;\n  min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n  /* Reset some styles that the rest of the page might have set */\n  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n  border-width: 0;\n  background: transparent;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  white-space: pre;\n  word-wrap: normal;\n  line-height: inherit;\n  color: inherit;\n  z-index: 2;\n  position: relative;\n  overflow: visible;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-font-variant-ligatures: contextual;\n  font-variant-ligatures: contextual;\n}\n.CodeMirror-wrap pre.CodeMirror-line,\n.CodeMirror-wrap pre.CodeMirror-line-like {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n.CodeMirror-linebackground {\n  position: absolute;\n  left: 0; right: 0; top: 0; bottom: 0;\n  z-index: 0;\n}\n\n.CodeMirror-linewidget {\n  position: relative;\n  z-index: 2;\n  padding: 0.1px; /* Force widget margins to stay inside of the container */\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n  outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.CodeMirror-cursor {\n  position: absolute;\n  pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n  visibility: hidden;\n  position: relative;\n  z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n  visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n  background-color: #ffa;\n  background-color: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursors {\n    visibility: hidden;\n  }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n"
  },
  {
    "path": "public/vendor/codemirror/lib/codemirror.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var edge = /Edge\\/(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up || edge;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n  var webkit = !edge && /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = !edge && /Chrome\\//.test(userAgent);\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n  var android = /Android/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) { presto_version = Number(presto_version[1]); }\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  var rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      { e.removeChild(e.firstChild); }\n    return e\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e)\n  }\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) { e.className = className; }\n    if (style) { e.style.cssText = style; }\n    if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n    return e\n  }\n  // wrapper for elt, which removes the elt from the accessibility tree\n  function eltP(tag, content, className, style) {\n    var e = elt(tag, content, className, style);\n    e.setAttribute(\"role\", \"presentation\");\n    return e\n  }\n\n  var range;\n  if (document.createRange) { range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r\n  }; }\n  else { range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r\n  }; }\n\n  function contains(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      { child = child.parentNode; }\n    if (parent.contains)\n      { return parent.contains(child) }\n    do {\n      if (child.nodeType == 11) { child = child.host; }\n      if (child == parent) { return true }\n    } while (child = child.parentNode)\n  }\n\n  function activeElt() {\n    // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n    // IE < 10 will throw when accessed while the page is loading or in an iframe.\n    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n    var activeElement;\n    try {\n      activeElement = document.activeElement;\n    } catch(e) {\n      activeElement = document.body || null;\n    }\n    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n      { activeElement = activeElement.shadowRoot.activeElement; }\n    return activeElement\n  }\n\n  function addClass(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n    return b\n  }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n  else if (ie) // Suppress mysterious IE10 errors\n    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args)}\n  }\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  var Delayed = function() {\n    this.id = null;\n    this.f = null;\n    this.time = 0;\n    this.handler = bind(this.onTimeout, this);\n  };\n  Delayed.prototype.onTimeout = function (self) {\n    self.id = 0;\n    if (self.time <= +new Date) {\n      self.f();\n    } else {\n      setTimeout(self.handler, self.time - +new Date);\n    }\n  };\n  Delayed.prototype.set = function (ms, f) {\n    this.f = f;\n    var time = +new Date + ms;\n    if (!this.id || time < this.time) {\n      clearTimeout(this.id);\n      this.id = setTimeout(this.handler, ms);\n      this.time = time;\n    }\n  };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      { if (array[i] == elt) { return i } }\n    return -1\n  }\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 50;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) { nextTab = string.length; }\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        { return pos + Math.min(skipped, goal - col) }\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) { return pos }\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      { spaceStrs.push(lst(spaceStrs) + \" \"); }\n    return spaceStrs[n]\n  }\n\n  function lst(arr) { return arr[arr.length-1] }\n\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n    return out\n  }\n\n  function insertSorted(array, value, score) {\n    var pos = 0, priority = score(value);\n    while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n    array.splice(pos, 0, value);\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordCharBasic(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n  }\n  function isWordChar(ch, helper) {\n    if (!helper) { return isWordCharBasic(ch) }\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n    return helper.test(ch)\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n    return true\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n  function skipExtendingChars(str, pos, dir) {\n    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n    return pos\n  }\n\n  // Returns the value from the range [`from`; `to`] that satisfies\n  // `pred` and is closest to `from`. Assumes that at least `to`\n  // satisfies `pred`. Supports `from` being greater than `to`.\n  function findFirst(pred, from, to) {\n    // At any point we are certain `to` satisfies `pred`, don't know\n    // whether `from` does.\n    var dir = from > to ? -1 : 1;\n    for (;;) {\n      if (from == to) { return from }\n      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n      if (mid == from) { return pred(mid) ? from : to }\n      if (pred(mid)) { to = mid; }\n      else { from = mid + dir; }\n    }\n  }\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) { return f(from, to, \"ltr\", 0) }\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n        found = true;\n      }\n    }\n    if (!found) { f(from, to, \"ltr\"); }\n  }\n\n  var bidiOther = null;\n  function getBidiPartAt(order, ch, sticky) {\n    var found;\n    bidiOther = null;\n    for (var i = 0; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < ch && cur.to > ch) { return i }\n      if (cur.to == ch) {\n        if (cur.from != cur.to && sticky == \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n      if (cur.from == ch) {\n        if (cur.from != cur.to && sticky != \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n    }\n    return found != null ? found : bidiOther\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6f9\n    var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n    function charType(code) {\n      if (code <= 0xf7) { return lowTypes.charAt(code) }\n      else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n      else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n      else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n      else if (code == 0x200c) { return \"b\" }\n      else { return \"L\" }\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str, direction) {\n      var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n      if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n      var len = str.length, types = [];\n      for (var i = 0; i < len; ++i)\n        { types.push(charType(str.charCodeAt(i))); }\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n        var type = types[i$1];\n        if (type == \"m\") { types[i$1] = prev; }\n        else { prev = type; }\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n        var type$1 = types[i$2];\n        if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n        var type$2 = types[i$3];\n        if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n        else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n                 (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n        prev$1 = type$2;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i$4 = 0; i$4 < len; ++i$4) {\n        var type$3 = types[i$4];\n        if (type$3 == \",\") { types[i$4] = \"N\"; }\n        else if (type$3 == \"%\") {\n          var end = (void 0);\n          for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i$4; j < end; ++j) { types[j] = replace; }\n          i$4 = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n        var type$4 = types[i$5];\n        if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n        else if (isStrong.test(type$4)) { cur$1 = type$4; }\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i$6 = 0; i$6 < len; ++i$6) {\n        if (isNeutral.test(types[i$6])) {\n          var end$1 = (void 0);\n          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n          var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n          var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n          var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n          i$6 = end$1 - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i$7 = 0; i$7 < len;) {\n        if (countsAsLeft.test(types[i$7])) {\n          var start = i$7;\n          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n          order.push(new BidiSpan(0, start, i$7));\n        } else {\n          var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n          for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n          for (var j$2 = pos; j$2 < i$7;) {\n            if (countsAsNum.test(types[j$2])) {\n              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n              var nstart = j$2;\n              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n              at += isRTL;\n              pos = j$2;\n            } else { ++j$2; }\n          }\n          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n        }\n      }\n      if (direction == \"ltr\") {\n        if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n          order[0].from = m[0].length;\n          order.unshift(new BidiSpan(0, 0, m[0].length));\n        }\n        if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n          lst(order).to -= m[0].length;\n          order.push(new BidiSpan(0, len - m[0].length, len));\n        }\n      }\n\n      return direction == \"rtl\" ? order.reverse() : order\n    }\n  })();\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line, direction) {\n    var order = line.order;\n    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n    return order\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var noHandlers = [];\n\n  var on = function(emitter, type, f) {\n    if (emitter.addEventListener) {\n      emitter.addEventListener(type, f, false);\n    } else if (emitter.attachEvent) {\n      emitter.attachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      map[type] = (map[type] || noHandlers).concat(f);\n    }\n  };\n\n  function getHandlers(emitter, type) {\n    return emitter._handlers && emitter._handlers[type] || noHandlers\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener) {\n      emitter.removeEventListener(type, f, false);\n    } else if (emitter.detachEvent) {\n      emitter.detachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers, arr = map && map[type];\n      if (arr) {\n        var index = indexOf(arr, f);\n        if (index > -1)\n          { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n      }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type);\n    if (!handlers.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) { return }\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n      { set.push(arr[i]); } }\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) { e.preventDefault(); }\n    else { e.returnValue = false; }\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) { e.stopPropagation(); }\n    else { e.cancelBubble = true; }\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n  function e_target(e) {return e.target || e.srcElement}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) { b = 1; }\n      else if (e.button & 2) { b = 3; }\n      else if (e.button & 4) { b = 2; }\n    }\n    if (mac && e.ctrlKey && b == 1) { b = 3; }\n    return b\n  }\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) { return false }\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) { return badBidiRects }\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3)\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) { nl = string.length; }\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result\n  } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n  var hasSelection = window.getSelection ? function (te) {\n    try { return te.selectionStart != te.selectionEnd }\n    catch(e) { return false }\n  } : function (te) {\n    var range;\n    try {range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) { return false }\n    return range.compareEndPoints(\"StartToEnd\", range) != 0\n  };\n\n  var hasCopyEvent = (function () {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) { return true }\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\"\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) { return badZoomedRects }\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n  }\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n    var chunk = doc;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n]\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function (line) {\n      var text = line.text;\n      if (n == end.line) { text = text.slice(0, end.ch); }\n      if (n == start.line) { text = text.slice(start.ch); }\n      out.push(text);\n      ++n;\n    });\n    return out\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n    return out\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) { return null }\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) { break }\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n        var child = chunk.children[i$1], ch = child.height;\n        if (h < ch) { chunk = child; continue outer }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n\n    } while (!chunk.lines)\n    var i = 0;\n    for (; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) { break }\n      h -= lh;\n    }\n    return n + i\n  }\n\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber))\n  }\n\n  // A Pos instance represents a position within the text.\n  function Pos(line, ch, sticky) {\n    if ( sticky === void 0 ) sticky = null;\n\n    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n    this.line = line;\n    this.ch = ch;\n    this.sticky = sticky;\n  }\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n  function copyPos(x) {return Pos(x.line, x.ch)}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) { return Pos(doc.first, 0) }\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n    return clipToLen(pos, getLine(doc, pos.line).text.length)\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n    else if (ch < 0) { return Pos(pos.line, 0) }\n    else { return pos }\n  }\n  function clipPosArray(doc, array) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n    return out\n  }\n\n  var SavedContext = function(state, lookAhead) {\n    this.state = state;\n    this.lookAhead = lookAhead;\n  };\n\n  var Context = function(doc, state, line, lookAhead) {\n    this.state = state;\n    this.doc = doc;\n    this.line = line;\n    this.maxLookAhead = lookAhead || 0;\n    this.baseTokens = null;\n    this.baseTokenPos = 1;\n  };\n\n  Context.prototype.lookAhead = function (n) {\n    var line = this.doc.getLine(this.line + n);\n    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n    return line\n  };\n\n  Context.prototype.baseToken = function (n) {\n    if (!this.baseTokens) { return null }\n    while (this.baseTokens[this.baseTokenPos] <= n)\n      { this.baseTokenPos += 2; }\n    var type = this.baseTokens[this.baseTokenPos + 1];\n    return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n            size: this.baseTokens[this.baseTokenPos] - n}\n  };\n\n  Context.prototype.nextLine = function () {\n    this.line++;\n    if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n  };\n\n  Context.fromSaved = function (doc, saved, line) {\n    if (saved instanceof SavedContext)\n      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n    else\n      { return new Context(doc, copyState(doc.mode, saved), line) }\n  };\n\n  Context.prototype.save = function (copy) {\n    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n  };\n\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, context, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n            lineClasses, forceToEnd);\n    var state = context.state;\n\n    // Run overlays, adjust style array.\n    var loop = function ( o ) {\n      context.baseTokens = st;\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      context.state = true;\n      runMode(cm, line.text, overlay.mode, context, function (end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            { st.splice(i, 1, end, st[i+1], i_end); }\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) { return }\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n          }\n        }\n      }, lineClasses);\n      context.state = state;\n      context.baseTokens = null;\n      context.baseTokenPos = 1;\n    };\n\n    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var context = getContextBefore(cm, lineNo(line));\n      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n      var result = highlightLine(cm, line, context);\n      if (resetState) { context.state = resetState; }\n      line.stateAfter = context.save(!resetState);\n      line.styles = result.styles;\n      if (result.classes) { line.styleClasses = result.classes; }\n      else if (line.styleClasses) { line.styleClasses = null; }\n      if (updateFrontier === cm.doc.highlightFrontier)\n        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n    }\n    return line.styles\n  }\n\n  function getContextBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) { return new Context(doc, true, n) }\n    var start = findStartLine(cm, n, precise);\n    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n    doc.iter(start, n, function (line) {\n      processLine(cm, line.text, context);\n      var pos = context.line;\n      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n      context.nextLine();\n    });\n    if (precise) { doc.modeFrontier = context.line; }\n    return context\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, context, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize, context);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") { callBlankLine(mode, context.state); }\n    while (!stream.eol()) {\n      readToken(mode, stream, context.state);\n      stream.start = stream.pos;\n    }\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) { return mode.blankLine(state) }\n    if (!mode.innerMode) { return }\n    var inner = innerMode(mode, state);\n    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) { inner[0] = innerMode(mode, state).mode; }\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) { return style }\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n  }\n\n  var Token = function(stream, type, state) {\n    this.start = stream.start; this.end = stream.pos;\n    this.string = stream.current();\n    this.type = type || null;\n    this.state = state;\n  };\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n    if (asArray) { tokens = []; }\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, context.state);\n      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n    }\n    return asArray ? tokens : new Token(stream, style, context.state)\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) { for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) { break }\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        { output[prop] = lineClass[2]; }\n      else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n        { output[prop] += \" \" + lineClass[2]; }\n    } }\n    return type\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize, context), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 5000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444\n      // characters, and returns inaccurate measurements in nodes\n      // starting around 5000 chars.\n      var pos = Math.min(stream.pos, curStart + 5000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) { return doc.first }\n      var line = getLine(doc, search - 1), after = line.stateAfter;\n      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n        { return search }\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline\n  }\n\n  function retreatFrontier(doc, n) {\n    doc.modeFrontier = Math.min(doc.modeFrontier, n);\n    if (doc.highlightFrontier < n - 10) { return }\n    var start = doc.first;\n    for (var line = n - 1; line > start; line--) {\n      var saved = getLine(doc, line).stateAfter;\n      // change is on 3\n      // state on line 1 looked ahead 2 -- so saw 3\n      // test 1 + 2 < 3 should cover this\n      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n        start = line + 1;\n        break\n      }\n    }\n    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n  }\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  function seeReadOnlySpans() {\n    sawReadOnlySpans = true;\n  }\n\n  function seeCollapsedSpans() {\n    sawCollapsedSpans = true;\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) { for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) { return span }\n    } }\n  }\n\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    var r;\n    for (var i = 0; i < spans.length; ++i)\n      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n    return r\n  }\n\n  // Add a span to a line.\n  function addMarkedSpan(line, span, op) {\n    var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));\n    if (inThisOp && inThisOp.has(line.markedSpans)) {\n      line.markedSpans.push(span);\n    } else {\n      line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n      if (inThisOp) { inThisOp.add(line.markedSpans); }\n    }\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    } }\n    return nw\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    } }\n    return nw\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) { return null }\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) { return null }\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) { span.to = startCh; }\n          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i$1 = 0; i$1 < last.length; ++i$1) {\n        var span$1 = last[i$1];\n        if (span$1.to != null) { span$1.to += offset; }\n        if (span$1.from == null) {\n          var found$1 = getMarkedSpanFor(first, span$1.marker);\n          if (!found$1) {\n            span$1.from = offset;\n            if (sameLine) { (first || (first = [])).push(span$1); }\n          }\n        } else {\n          span$1.from += offset;\n          if (sameLine) { (first || (first = [])).push(span$1); }\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) { first = clearEmptySpans(first); }\n    if (last && last != first) { last = clearEmptySpans(last); }\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        { for (var i$2 = 0; i$2 < first.length; ++i$2)\n          { if (first[i$2].to == null)\n            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n      for (var i$3 = 0; i$3 < gap; ++i$3)\n        { newMarkers.push(gapMarkers); }\n      newMarkers.push(last);\n    }\n    return newMarkers\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        { spans.splice(i--, 1); }\n    }\n    if (!spans.length) { return null }\n    return spans\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function (line) {\n      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          { (markers || (markers = [])).push(mark); }\n      } }\n    });\n    if (!markers) { return null }\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          { newParts.push({from: p.from, to: m.from}); }\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          { newParts.push({from: m.to, to: p.to}); }\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 3;\n      }\n    }\n    return parts\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.detachLine(line); }\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.attachLine(line); }\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) { return lenDiff }\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) { return -fromCmp }\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) { return toCmp }\n    return b.id - a.id\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        { found = sp.marker; }\n    } }\n    return found\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n  function collapsedSpanAround(line, ch) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n    } }\n    return found\n  }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        { return true }\n    } }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      { line = merged.find(-1, true).line; }\n    return line\n  }\n\n  function visualLineEnd(line) {\n    var merged;\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return line\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line\n      ;(lines || (lines = [])).push(line);\n    }\n    return lines\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) { return lineN }\n    return lineNo(vis)\n  }\n\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) { return lineN }\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) { return lineN }\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return lineNo(line) + 1\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      if (sp.from == null) { return true }\n      if (sp.marker.widgetNode) { continue }\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        { return true }\n    } }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      { return true }\n    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) { return true }\n    }\n  }\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) { break }\n      else { h += line.height; }\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n        var cur = p.children[i$1];\n        if (cur == chunk) { break }\n        else { h += cur.height; }\n      }\n    }\n    return h\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) { return 0 }\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found$1 = merged.find(0, true);\n      len -= cur.text.length - found$1.from.ch;\n      cur = found$1.to.line;\n      len += cur.text.length - found$1.to.ch;\n    }\n    return len\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function (line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n\n  Line.prototype.lineNo = function () { return lineNo(this) };\n  eventMixin(Line);\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) { line.stateAfter = null; }\n    if (line.styles) { line.styles = null; }\n    if (line.order != null) { line.order = null; }\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) { return null }\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n        if (line.styleClasses.textClass)\n          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild;\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        { builder.content.className = \"cm-tab-wrap-hack\"; }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n    return builder\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n    if (!text) { return }\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    var content;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) { mustWrap = true; }\n      builder.pos += text.length;\n    } else {\n      content = document.createDocumentFragment();\n      var pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n          else { content.appendChild(txt); }\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) { break }\n        pos += skipped + 1;\n        var txt$1 = (void 0);\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt$1.setAttribute(\"role\", \"presentation\");\n          txt$1.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n          else { content.appendChild(txt$1); }\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt$1);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n    if (style || startStyle || endStyle || mustWrap || css || attributes) {\n      var fullStyle = style || \"\";\n      if (startStyle) { fullStyle += startStyle; }\n      if (endStyle) { fullStyle += endStyle; }\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (attributes) {\n        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n          { token.setAttribute(attr, attributes[attr]); } }\n      }\n      return builder.content.appendChild(token)\n    }\n    builder.content.appendChild(content);\n  }\n\n  // Change some spaces to NBSP to prevent the browser from collapsing\n  // trailing spaces at the end of a line when rendering text (issue #1362).\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) { return text }\n    var spaceBefore = trailingBefore, result = \"\";\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i);\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        { ch = \"\\u00a0\"; }\n      result += ch;\n      spaceBefore = ch == \" \";\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function (builder, text, style, startStyle, endStyle, css, attributes) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        var part = (void 0);\n        for (var i = 0; i < order.length; i++) {\n          part = order[i];\n          if (part.to > start && part.from <= start) { break }\n        }\n        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    }\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        { widget = builder.content.appendChild(document.createElement(\"span\")); }\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n      return\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n        attributes = null;\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles = (void 0);\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) { spanStyle += \" \" + m.className; }\n            if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n            if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n            // support for the old title property\n            // https://github.com/codemirror/CodeMirror/pull/5673\n            if (m.title) { (attributes || (attributes = {})).title = m.title; }\n            if (m.attributes) {\n              for (var attr in m.attributes)\n                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n            }\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              { collapsed = sp; }\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) { return }\n          if (collapsed.to == pos) { collapsed = false; }\n        }\n      }\n      if (pos >= len) { break }\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array\n  }\n\n  var operationGroup = null;\n\n  function pushOperation(op) {\n    if (operationGroup) {\n      operationGroup.ops.push(op);\n    } else {\n      op.ownsGroup = operationGroup = {\n        ops: [op],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        { callbacks[i].call(null); }\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n      }\n    } while (i < callbacks.length)\n  }\n\n  function finishOperation(op, endCb) {\n    var group = op.ownsGroup;\n    if (!group) { return }\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      endCb(group);\n    }\n  }\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type);\n    if (!arr.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    var loop = function ( i ) {\n      list.push(function () { return arr[i].apply(null, args); });\n    };\n\n    for (var i = 0; i < arr.length; ++i)\n      loop( i );\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") { updateLineText(cm, lineView); }\n      else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n      else if (type == \"class\") { updateLineClasses(cm, lineView); }\n      else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n    }\n    return lineView.node\n  }\n\n  function updateLineBackground(cm, lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) { cls += \" CodeMirror-linebackground\"; }\n    if (lineView.background) {\n      if (cls) { lineView.background.className = cls; }\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n      cm.display.input.setUneditable(lineView.background);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built\n    }\n    return buildLineContent(cm, lineView)\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) { lineView.node = built.pre; }\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(cm, lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(cm, lineView) {\n    updateLineBackground(cm, lineView);\n    if (lineView.line.wrapClass)\n      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n    else if (lineView.node != lineView.text)\n      { lineView.node.className = \"\"; }\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(lineView.gutterBackground);\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap$1 = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n      gutterWrap.setAttribute(\"aria-hidden\", \"true\");\n      cm.display.input.setUneditable(gutterWrap);\n      wrap$1.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        { lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                     (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n      } }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) { lineView.alignable = null; }\n    var isWidget = classTest(\"CodeMirror-linewidget\");\n    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n      next = node.nextSibling;\n      if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) { lineView.bgClass = built.bgClass; }\n    if (built.textClass) { lineView.textClass = built.textClass; }\n\n    updateLineClasses(cm, lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) { return }\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n      if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n      else\n        { wrap.appendChild(node); }\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n  (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n    }\n  }\n\n  function widgetHeight(widget) {\n    if (widget.height != null) { return widget.height }\n    var cm = widget.doc.cm;\n    if (!cm) { return 0 }\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n      if (widget.noHScroll)\n        { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight\n  }\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        { return true }\n    }\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n  function paddingH(display) {\n    if (display.cachedPaddingH) { return display.cachedPaddingH }\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n    return data\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n    if (lineView.rest) {\n      for (var i = 0; i < lineView.rest.length; i++)\n        { if (lineView.rest[i] == line)\n          { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n      for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n        { if (lineNo(lineView.rest[i$1]) > lineN)\n          { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n    }\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      { return cm.display.view[findViewIndex(cm, lineN)] }\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      { return ext }\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      { view = updateExternalMeasurement(cm, line); }\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    }\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) { ch = -1; }\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) { prepared.cache[key] = found; }\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom}\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map, ch, bias) {\n    var node, start, end, collapse, mStart, mEnd;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      mStart = map[i];\n      mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) { collapse = \"right\"; }\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          { collapse = bias; }\n        if (bias == \"left\" && start == 0)\n          { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          } }\n        if (bias == \"right\" && start == mEnd - mStart)\n          { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          } }\n        break\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect;\n    if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) { break }\n    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n      if ((rect = rects[i$1]).left != rect.right) { break }\n    } }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          { rect = node.parentNode.getBoundingClientRect(); }\n        else\n          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n        if (rect.left || rect.right || start == 0) { break }\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) { collapse = bias = \"right\"; }\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n      else\n        { rect = node.getBoundingClientRect(); }\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n      else\n        { rect = nullRect; }\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    var i = 0;\n    for (; i < heights.length - 1; i++)\n      { if (mid < heights[i]) { break } }\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) { result.bogus = true; }\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      { return rect }\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n        { lineView.measure.caches[i] = {}; } }\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      { clearLineMeasurementCacheFor(cm.display.view[i]); }\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() {\n    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n    // which causes page_Offset and bounding client rects to use\n    // different reference viewports and invalidate our calculations.\n    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n    return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n  }\n  function pageScrollY() {\n    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n    return window.pageYOffset || (document.documentElement || document.body).scrollTop\n  }\n\n  function widgetTopHeight(lineObj) {\n    var ref = visualLine(lineObj);\n    var widgets = ref.widgets;\n    var height = 0;\n    if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above)\n      { height += widgetHeight(widgets[i]); } } }\n    return height\n  }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n    if (!includeWidgets) {\n      var height = widgetTopHeight(lineObj);\n      rect.top += height; rect.bottom += height;\n    }\n    if (context == \"line\") { return rect }\n    if (!context) { context = \"local\"; }\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") { yOff += paddingTop(cm.display); }\n    else { yOff -= cm.display.viewOffset; }\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") { return coords }\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n  // and after `char - 1` in writing order of `char - 1`\n  // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n  // and before `char` in writing order of `char`\n  // Examples (upper-case letters are RTL, lower-case are LTR):\n  //     Pos(0, 1, ...)\n  //     before   after\n  // ab     a|b     a|b\n  // aB     a|B     aB|\n  // Ab     |Ab     A|b\n  // AB     B|A     B|A\n  // Every position after the last character on a line is considered to stick\n  // to the last character on the line.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) { m.left = m.right; } else { m.right = m.left; }\n      return intoCoordSystem(cm, lineObj, m, context)\n    }\n    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n    if (ch >= lineObj.text.length) {\n      ch = lineObj.text.length;\n      sticky = \"before\";\n    } else if (ch <= 0) {\n      ch = 0;\n      sticky = \"after\";\n    }\n    if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n    function getBidi(ch, partPos, invert) {\n      var part = order[partPos], right = part.level == 1;\n      return get(invert ? ch - 1 : ch, right != invert)\n    }\n    var partPos = getBidiPartAt(order, ch, sticky);\n    var other = bidiOther;\n    var val = getBidi(ch, partPos, sticky == \"before\");\n    if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n    return val\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0;\n    pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height}\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, sticky, outside, xRel) {\n    var pos = Pos(line, ch, sticky);\n    pos.xRel = xRel;\n    if (outside) { pos.outside = outside; }\n    return pos\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n    if (x < 0) { x = 0; }\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n      if (!collapsed) { return found }\n      var rangeEnd = collapsed.find(1);\n      if (rangeEnd.line == lineN) { return rangeEnd }\n      lineObj = getLine(doc, lineN = rangeEnd.line);\n    }\n  }\n\n  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n    y -= widgetTopHeight(lineObj);\n    var end = lineObj.text.length;\n    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n    return {begin: begin, end: end}\n  }\n\n  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n  }\n\n  // Returns true if the given side of a box is after the given\n  // coordinates, in top-to-bottom, left-to-right order.\n  function boxIsAfter(box, x, y, left) {\n    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    // Move y into line-local coordinate space\n    y -= heightAtLine(lineObj);\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    // When directly calling `measureCharPrepared`, we have to adjust\n    // for the widgets at this line.\n    var widgetHeight = widgetTopHeight(lineObj);\n    var begin = 0, end = lineObj.text.length, ltr = true;\n\n    var order = getOrder(lineObj, cm.doc.direction);\n    // If the line isn't plain left-to-right text, first figure out\n    // which bidi section the coordinates fall into.\n    if (order) {\n      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n                   (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n      ltr = part.level != 1;\n      // The awkward -1 offsets are needed because findFirst (called\n      // on these below) will treat its first bound as inclusive,\n      // second as exclusive, but we want to actually address the\n      // characters in the part's range\n      begin = ltr ? part.from : part.to - 1;\n      end = ltr ? part.to : part.from - 1;\n    }\n\n    // A binary search to find the first character whose bounding box\n    // starts after the coordinates. If we run across any whose box wrap\n    // the coordinates, store that.\n    var chAround = null, boxAround = null;\n    var ch = findFirst(function (ch) {\n      var box = measureCharPrepared(cm, preparedMeasure, ch);\n      box.top += widgetHeight; box.bottom += widgetHeight;\n      if (!boxIsAfter(box, x, y, false)) { return false }\n      if (box.top <= y && box.left <= x) {\n        chAround = ch;\n        boxAround = box;\n      }\n      return true\n    }, begin, end);\n\n    var baseX, sticky, outside = false;\n    // If a box around the coordinates was found, use that\n    if (boxAround) {\n      // Distinguish coordinates nearer to the left or right side of the box\n      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n      ch = chAround + (atStart ? 0 : 1);\n      sticky = atStart ? \"after\" : \"before\";\n      baseX = atLeft ? boxAround.left : boxAround.right;\n    } else {\n      // (Adjust for extended bound, if necessary.)\n      if (!ltr && (ch == end || ch == begin)) { ch++; }\n      // To determine which side to associate with, get the box to the\n      // left of the character and compare it's vertical position to the\n      // coordinates\n      sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n        \"after\" : \"before\";\n      // Now get accurate coordinates for this place, in order to get a\n      // base X position\n      var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n      baseX = coords.left;\n      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n    }\n\n    ch = skipExtendingChars(lineObj.text, ch, 1);\n    return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n  }\n\n  function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n    // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n    // situation, we can take this ordering to correspond to the visual\n    // ordering. This finds the first part whose end is after the given\n    // coordinates.\n    var index = findFirst(function (i) {\n      var part = order[i], ltr = part.level != 1;\n      return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n                                     \"line\", lineObj, preparedMeasure), x, y, true)\n    }, 0, order.length - 1);\n    var part = order[index];\n    // If this isn't the first part, the part's start is also after\n    // the coordinates, and the coordinates aren't on the same line as\n    // that start, move one part back.\n    if (index > 0) {\n      var ltr = part.level != 1;\n      var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n                               \"line\", lineObj, preparedMeasure);\n      if (boxIsAfter(start, x, y, true) && start.top > y)\n        { part = order[index - 1]; }\n    }\n    return part\n  }\n\n  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n    // In a wrapped line, rtl text on wrapping boundaries can do things\n    // that don't correspond to the ordering in our `order` array at\n    // all, so a binary search doesn't work, and we want to return a\n    // part that only spans one line so that the binary search in\n    // coordsCharInner is safe. As such, we first find the extent of the\n    // wrapped line, and then do a flat search in which we discard any\n    // spans that aren't on the line.\n    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n    var begin = ref.begin;\n    var end = ref.end;\n    if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n    var part = null, closestDist = null;\n    for (var i = 0; i < order.length; i++) {\n      var p = order[i];\n      if (p.from >= end || p.to <= begin) { continue }\n      var ltr = p.level != 1;\n      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n      // Weigh against spans ending before this, so that they are only\n      // picked if nothing ends after\n      var dist = endX < x ? x - endX + 1e9 : endX - x;\n      if (!part || closestDist > dist) {\n        part = p;\n        closestDist = dist;\n      }\n    }\n    if (!part) { part = order[order.length - 1]; }\n    // Clip the part to the wrapped line.\n    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n    return part\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n    if (measureText == null) {\n      measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) { display.cachedTextHeight = height; }\n    removeChildren(display.measure);\n    return height || 1\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) { display.cachedCharWidth = width; }\n    return width || 10\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      var id = cm.display.gutterSpecs[i].className;\n      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[id] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth}\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function (line) {\n      if (lineIsHidden(cm.doc, line)) { return 0 }\n\n      var widgetsHeight = 0;\n      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n      } }\n\n      if (wrapping)\n        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n      else\n        { return widgetsHeight + th }\n    }\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function (line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n    });\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e$1) { return null }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) { return null }\n    n -= cm.display.viewFrom;\n    if (n < 0) { return null }\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) { return i }\n    }\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) { from = cm.doc.first; }\n    if (to == null) { to = cm.doc.first + cm.doc.size; }\n    if (!lendiff) { lendiff = 0; }\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      { display.updateLineNumbers = from; }\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        { resetView(cm); }\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut$1 = viewCuttingPoint(cm, from, from, -1);\n      if (cut$1) {\n        display.view = display.view.slice(0, cut$1.index);\n        display.viewTo = cut$1.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        { ext.lineN += lendiff; }\n      else if (from < ext.lineN + ext.size)\n        { display.externalMeasured = null; }\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      { display.externalMeasured = null; }\n\n    if (line < display.viewFrom || line >= display.viewTo) { return }\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) { return }\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) { arr.push(type); }\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      { return {index: index, lineN: newN} }\n    var n = cm.display.viewFrom;\n    for (var i = 0; i < index; i++)\n      { n += view[i].size; }\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) { return null }\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN}\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n      else if (display.viewFrom < from)\n        { display.view = display.view.slice(findViewIndex(cm, from)); }\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n      else if (display.viewTo > to)\n        { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n    }\n    return dirty\n  }\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    if ( primary === void 0 ) primary = true;\n\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    var customCursor = cm.options.$customCursor;\n    if (customCursor) { primary = true; }\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (!primary && i == doc.sel.primIndex) { continue }\n      var range = doc.sel.ranges[i];\n      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n      var collapsed = range.empty();\n      if (customCursor) {\n        var head = customCursor(cm, range);\n        if (head) { drawSelectionCursor(cm, head, curFragment); }\n      } else if (collapsed || cm.options.showCursorWhenSelecting) {\n        drawSelectionCursor(cm, range.head, curFragment);\n      }\n      if (!collapsed)\n        { drawSelectionRange(cm, range, selFragment); }\n    }\n    return result\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n      var charPos = charCoords(cm, head, \"div\", null, null);\n      var width = charPos.right - charPos.left;\n      cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + \"px\";\n    }\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n    var docLTR = doc.direction == \"ltr\";\n\n    function add(left, top, width, bottom) {\n      if (top < 0) { top = 0; }\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n                             top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n                             height: \" + (bottom - top) + \"px\")));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n      }\n\n      function wrapX(pos, dir, side) {\n        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n        var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n        var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n        return coords(ch, prop)[prop]\n      }\n\n      var order = getOrder(lineObj, doc.direction);\n      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n        var ltr = dir == \"ltr\";\n        var fromPos = coords(from, ltr ? \"left\" : \"right\");\n        var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n        var first = i == 0, last = !order || i == order.length - 1;\n        if (toPos.top - fromPos.top <= 3) { // Single line\n          var openLeft = (docLTR ? openStart : openEnd) && first;\n          var openRight = (docLTR ? openEnd : openStart) && last;\n          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n          add(left, fromPos.top, right - left, fromPos.bottom);\n        } else { // Multiple lines\n          var topLeft, topRight, botLeft, botRight;\n          if (ltr) {\n            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n            topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n            botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n            botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n          } else {\n            topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n            botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n          }\n          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n        }\n\n        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n        if (cmpCoords(toPos, start) < 0) { start = toPos; }\n        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n        if (cmpCoords(toPos, end) < 0) { end = toPos; }\n      });\n      return {start: start, end: end}\n    }\n\n    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) { return }\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      { display.blinker = setInterval(function () {\n        if (!cm.hasFocus()) { onBlur(cm); }\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate); }\n    else if (cm.options.cursorBlinkRate < 0)\n      { display.cursorDiv.style.visibility = \"hidden\"; }\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.hasFocus()) {\n      cm.display.input.focus();\n      if (!cm.state.focused) { onFocus(cm); }\n    }\n  }\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { if (cm.state.delayingBlurEvent) {\n      cm.state.delayingBlurEvent = false;\n      if (cm.state.focused) { onBlur(cm); }\n    } }, 100);\n  }\n\n  function onFocus(cm, e) {\n    if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n    if (cm.options.readOnly == \"nocursor\") { return }\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm, e);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm, e) {\n    if (cm.state.delayingBlurEvent) { return }\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm, e);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);\n    var oldHeight = display.lineDiv.getBoundingClientRect().top;\n    var mustScroll = 0;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], wrapping = cm.options.lineWrapping;\n      var height = (void 0), width = 0;\n      if (cur.hidden) { continue }\n      oldHeight += cur.line.height;\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n        // Check that lines don't extend past the right of the current\n        // editor width\n        if (!wrapping && cur.text.firstChild)\n          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n      }\n      var diff = cur.line.height - height;\n      if (diff > .005 || diff < -.005) {\n        if (oldHeight < viewTop) { mustScroll -= diff; }\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n          { updateWidgetHeight(cur.rest[j]); } }\n      }\n      if (width > cm.display.sizerWidth) {\n        var chWidth = Math.ceil(width / charWidth(cm.display));\n        if (chWidth > cm.display.maxLineLength) {\n          cm.display.maxLineLength = chWidth;\n          cm.display.maxLine = cur.line;\n          cm.display.maxLineChanged = true;\n        }\n      }\n    }\n    if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n      var w = line.widgets[i], parent = w.node.parentNode;\n      if (parent) { w.height = parent.offsetHeight; }\n    } }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)}\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, rect) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (rect.top + box.top < 0) { doScroll = true; }\n    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n                         top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n                         height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n                         left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) { margin = 0; }\n    var rect;\n    if (!cm.options.lineWrapping && pos == end) {\n      // Set pos and end to the cursor positions around the character pos sticks to\n      // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n      // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n      end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n      pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n    }\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false;\n      var coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      rect = {left: Math.min(coords.left, endCoords.left),\n              top: Math.min(coords.top, endCoords.top) - margin,\n              right: Math.max(coords.left, endCoords.left),\n              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n      var scrollPos = calculateScrollPos(cm, rect);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        updateScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n      }\n      if (!changed) { break }\n    }\n    return rect\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, rect) {\n    var scrollPos = calculateScrollPos(cm, rect);\n    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, rect) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (rect.top < 0) { rect.top = 0; }\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n    if (rect.top < screentop) {\n      result.scrollTop = atTop ? 0 : rect.top;\n    } else if (rect.bottom > screentop + screen) {\n      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n      if (newTop != screentop) { result.scrollTop = newTop; }\n    }\n\n    var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n    var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n    var tooWide = rect.right - rect.left > screenw;\n    if (tooWide) { rect.right = rect.left + screenw; }\n    if (rect.left < 10)\n      { result.scrollLeft = 0; }\n    else if (rect.left < screenleft)\n      { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n    else if (rect.right > screenw + screenleft - 3)\n      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n    return result\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollTop(cm, top) {\n    if (top == null) { return }\n    resolveScrollToPos(cm);\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor();\n    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n  }\n\n  function scrollToCoords(cm, x, y) {\n    if (x != null || y != null) { resolveScrollToPos(cm); }\n    if (x != null) { cm.curOp.scrollLeft = x; }\n    if (y != null) { cm.curOp.scrollTop = y; }\n  }\n\n  function scrollToRange(cm, range) {\n    resolveScrollToPos(cm);\n    cm.curOp.scrollToPos = range;\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      scrollToCoordsRange(cm, from, to, range.margin);\n    }\n  }\n\n  function scrollToCoordsRange(cm, from, to, margin) {\n    var sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + margin\n    });\n    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n  }\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function updateScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n    if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n    setScrollTop(cm, val, true);\n    if (gecko) { updateDisplaySimple(cm); }\n    startWorker(cm, 100);\n  }\n\n  function setScrollTop(cm, val, forceScroll) {\n    val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n    cm.doc.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n  }\n\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller, forceScroll) {\n    val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    }\n  }\n\n  var NativeScrollbars = function(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    vert.tabIndex = horiz.tabIndex = -1;\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function () {\n      if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n    });\n    on(horiz, \"scroll\", function () {\n      if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n  };\n\n  NativeScrollbars.prototype.update = function (measure) {\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    var sWidth = measure.nativeBarWidth;\n\n    if (needsV) {\n      this.vert.style.display = \"block\";\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n    } else {\n      this.vert.scrollTop = 0;\n      this.vert.style.display = \"\";\n      this.vert.firstChild.style.height = \"0\";\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\";\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n      this.horiz.style.left = measure.barLeft + \"px\";\n      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n    } else {\n      this.horiz.style.display = \"\";\n      this.horiz.firstChild.style.width = \"0\";\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) { this.zeroWidthHack(); }\n      this.checkedZeroWidth = true;\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  };\n\n  NativeScrollbars.prototype.setScrollLeft = function (pos) {\n    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n  };\n\n  NativeScrollbars.prototype.setScrollTop = function (pos) {\n    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n  };\n\n  NativeScrollbars.prototype.zeroWidthHack = function () {\n    var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n    this.horiz.style.height = this.vert.style.width = w;\n    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n    this.disableHoriz = new Delayed;\n    this.disableVert = new Delayed;\n  };\n\n  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n    bar.style.pointerEvents = \"auto\";\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      var box = bar.getBoundingClientRect();\n      var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n      if (elt != bar) { bar.style.pointerEvents = \"none\"; }\n      else { delay.set(1000, maybeDisable); }\n    }\n    delay.set(1000, maybeDisable);\n  };\n\n  NativeScrollbars.prototype.clear = function () {\n    var parent = this.horiz.parentNode;\n    parent.removeChild(this.horiz);\n    parent.removeChild(this.vert);\n  };\n\n  var NullScrollbars = function () {};\n\n  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n  NullScrollbars.prototype.setScrollLeft = function () {};\n  NullScrollbars.prototype.setScrollTop = function () {};\n  NullScrollbars.prototype.clear = function () {};\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) { measure = measureForScrollbars(cm); }\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        { updateHeightsInViewport(cm); }\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else { d.scrollbarFiller.style.display = \"\"; }\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else { d.gutterFiller.style.display = \"\"; }\n  }\n\n  var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n    }\n\n    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function () {\n        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function (pos, axis) {\n      if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n      else { updateScrollTop(cm, pos); }\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n  }\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: 0,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId,          // Unique ID\n      markArrays: null         // Used by addMarkedSpan\n    };\n    pushOperation(cm.curOp);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp;\n    if (op) { finishOperation(op, function (group) {\n      for (var i = 0; i < group.ops.length; i++)\n        { group.ops[i].cm.curOp = null; }\n      endOperations(group);\n    }); }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      { endOperation_R1(ops[i]); }\n    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n      { endOperation_W1(ops[i$1]); }\n    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n      { endOperation_R2(ops[i$2]); }\n    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n      { endOperation_W2(ops[i$3]); }\n    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n      { endOperation_finish(ops[i$4]); }\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) { findMaxLine(cm); }\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      { op.preparedSelection = display.input.prepareSelection(); }\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt();\n    if (op.preparedSelection)\n      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      { updateScrollbars(cm, op.barMeasure); }\n    if (op.updatedDisplay)\n      { setDocumentHeight(cm, op.barMeasure); }\n\n    if (op.selectionChanged) { restartBlink(cm); }\n\n    if (cm.state.focused && op.updateInput)\n      { cm.display.input.reset(op.typing); }\n    if (takeFocus) { ensureFocus(op.cm); }\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      { display.wheelStartX = display.wheelStartY = null; }\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      maybeScrollWindow(cm, rect);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) { for (var i = 0; i < hidden.length; ++i)\n      { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n    if (display.wrapper.offsetHeight)\n      { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      { signal(cm, \"changes\", cm, op.changeObjs); }\n    if (op.update)\n      { op.update.finish(); }\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) { return f() }\n    startOperation(cm);\n    try { return f() }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) { return f.apply(cm, arguments) }\n      startOperation(cm);\n      try { return f.apply(cm, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) { return f.apply(this, arguments) }\n      startOperation(this);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(this); }\n    }\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) { return f.apply(this, arguments) }\n      startOperation(cm);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.highlightFrontier < cm.display.viewTo)\n      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.highlightFrontier >= cm.display.viewTo) { return }\n    var end = +new Date + cm.options.workTime;\n    var context = getContextBefore(cm, doc.highlightFrontier);\n    var changedLines = [];\n\n    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n      if (context.line >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n        var highlighted = highlightLine(cm, line, context, true);\n        if (resetState) { context.state = resetState; }\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) { line.styleClasses = newCls; }\n        else if (oldCls) { line.styleClasses = null; }\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n        if (ischange) { changedLines.push(context.line); }\n        line.stateAfter = context.save();\n        context.nextLine();\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          { processLine(cm, line.text, context); }\n        line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n        context.nextLine();\n      }\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true\n      }\n    });\n    doc.highlightFrontier = context.line;\n    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n    if (changedLines.length) { runInOp(cm, function () {\n      for (var i = 0; i < changedLines.length; i++)\n        { regLineChange(cm, changedLines[i], \"text\"); }\n    }); }\n  }\n\n  // DISPLAY DRAWING\n\n  var DisplayUpdate = function(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  };\n\n  DisplayUpdate.prototype.signal = function (emitter, type) {\n    if (hasHandler(emitter, type))\n      { this.events.push(arguments); }\n  };\n  DisplayUpdate.prototype.finish = function () {\n    for (var i = 0; i < this.events.length; i++)\n      { signal.apply(null, this.events[i]); }\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  function selectionSnapshot(cm) {\n    if (cm.hasFocus()) { return null }\n    var active = activeElt();\n    if (!active || !contains(cm.display.lineDiv, active)) { return null }\n    var result = {activeElt: active};\n    if (window.getSelection) {\n      var sel = window.getSelection();\n      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n        result.anchorNode = sel.anchorNode;\n        result.anchorOffset = sel.anchorOffset;\n        result.focusNode = sel.focusNode;\n        result.focusOffset = sel.focusOffset;\n      }\n    }\n    return result\n  }\n\n  function restoreSelection(snapshot) {\n    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n    snapshot.activeElt.focus();\n    if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n        snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n      var sel = window.getSelection(), range = document.createRange();\n      range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n      range.collapse(false);\n      sel.removeAllRanges();\n      sel.addRange(range);\n      sel.extend(snapshot.focusNode, snapshot.focusOffset);\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      { return false }\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      { return false }\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var selSnapshot = selectionSnapshot(cm);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    restoreSelection(selSnapshot);\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          { break }\n      } else if (first) {\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n      }\n      if (!updateDisplayIfNeeded(cm, update)) { break }\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.force = false;\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        { node.style.display = \"none\"; }\n      else\n        { node.parentNode.removeChild(node); }\n      return next\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) { cur = rm(cur); }\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) { cur = rm(cur); }\n  }\n\n  function updateGutterSpace(display) {\n    var width = display.gutters.offsetWidth;\n    display.sizer.style.marginLeft = width + \"px\";\n    // Send an event to consumers responding to changes in gutter width.\n    signalLater(display, \"gutterChanged\", display);\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n      if (cm.options.fixedGutter) {\n        if (view[i].gutter)\n          { view[i].gutter.style.left = left; }\n        if (view[i].gutterBackground)\n          { view[i].gutterBackground.style.left = left; }\n      }\n      var align = view[i].alignable;\n      if (align) { for (var j = 0; j < align.length; j++)\n        { align[j].style.left = left; } }\n    } }\n    if (cm.options.fixedGutter)\n      { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) { return false }\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm.display);\n      return true\n    }\n    return false\n  }\n\n  function getGutters(gutters, lineNumbers) {\n    var result = [], sawLineNumbers = false;\n    for (var i = 0; i < gutters.length; i++) {\n      var name = gutters[i], style = null;\n      if (typeof name != \"string\") { style = name.style; name = name.className; }\n      if (name == \"CodeMirror-linenumbers\") {\n        if (!lineNumbers) { continue }\n        else { sawLineNumbers = true; }\n      }\n      result.push({className: name, style: style});\n    }\n    if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n    return result\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function renderGutters(display) {\n    var gutters = display.gutters, specs = display.gutterSpecs;\n    removeChildren(gutters);\n    display.lineGutter = null;\n    for (var i = 0; i < specs.length; ++i) {\n      var ref = specs[i];\n      var className = ref.className;\n      var style = ref.style;\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n      if (style) { gElt.style.cssText = style; }\n      if (className == \"CodeMirror-linenumbers\") {\n        display.lineGutter = gElt;\n        gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = specs.length ? \"\" : \"none\";\n    updateGutterSpace(display);\n  }\n\n  function updateGutters(cm) {\n    renderGutters(cm.display);\n    regChange(cm);\n    alignHorizontally(cm);\n  }\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input, options) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [lines], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // This attribute is respected by automatic translation systems such as Google Translate,\n    // and may also be respected by tools used by human translators.\n    d.wrapper.setAttribute('translate', 'no');\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n    if (place) {\n      if (place.appendChild) { place.appendChild(d.wrapper); }\n      else { place(d.wrapper); }\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n    renderGutters(d);\n\n    input.init(d);\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) { wheelPixelsPerUnit = -.53; }\n  else if (gecko) { wheelPixelsPerUnit = 15; }\n  else if (chrome) { wheelPixelsPerUnit = -.7; }\n  else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n  function wheelEventDelta(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n    else if (dy == null) { dy = e.wheelDelta; }\n    return {x: dx, y: dy}\n  }\n  function wheelEventPixels(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta\n  }\n\n  function onScrollWheel(cm, e) {\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n    var pixelsPerUnit = wheelPixelsPerUnit;\n    if (e.deltaMode === 0) {\n      dx = e.deltaX;\n      dy = e.deltaY;\n      pixelsPerUnit = 1;\n    }\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && pixelsPerUnit != null) {\n      if (dy && canScrollY)\n        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); }\n      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        { e_preventDefault(e); }\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && pixelsPerUnit != null) {\n      var pixels = dy * pixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20 && e.deltaMode !== 0) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function () {\n          if (display.wheelStartX == null) { return }\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) { return }\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  var Selection = function(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  };\n\n  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n  Selection.prototype.equals = function (other) {\n    if (other == this) { return true }\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var here = this.ranges[i], there = other.ranges[i];\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n    }\n    return true\n  };\n\n  Selection.prototype.deepCopy = function () {\n    var out = [];\n    for (var i = 0; i < this.ranges.length; i++)\n      { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n    return new Selection(out, this.primIndex)\n  };\n\n  Selection.prototype.somethingSelected = function () {\n    for (var i = 0; i < this.ranges.length; i++)\n      { if (!this.ranges[i].empty()) { return true } }\n    return false\n  };\n\n  Selection.prototype.contains = function (pos, end) {\n    if (!end) { end = pos; }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var range = this.ranges[i];\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        { return i }\n    }\n    return -1\n  };\n\n  var Range = function(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  };\n\n  Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(cm, ranges, primIndex) {\n    var mayTouch = cm && cm.options.selectionsMayTouch;\n    var prim = ranges[primIndex];\n    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      var diff = cmp(prev.to(), cur.from());\n      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) { --primIndex; }\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex)\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0)\n  }\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  function changeEnd(change) {\n    if (!change.text) { return change.to }\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n  }\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) { return pos }\n    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n    return Pos(line, ch)\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n    else\n      { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex)\n  }\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function (line) {\n      if (line.stateAfter) { line.stateAfter = null; }\n      if (line.styles) { line.styles = null; }\n    });\n    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) { regChange(cm); }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      var result = [];\n      for (var i = start; i < end; ++i)\n        { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n      return result\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) { doc.remove(from.line, nlines); }\n      if (added.length) { doc.insert(from.line, added); }\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added$1 = linesFor(1, text.length - 1);\n        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added$1);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added$2 = linesFor(1, text.length - 1);\n      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n      doc.insert(from.line + 1, added$2);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) { continue }\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) { continue }\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      } }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) { throw new Error(\"This document is already in use.\") }\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    setDirectionClass(cm);\n    cm.options.direction = doc.direction;\n    if (!cm.options.lineWrapping) { findMaxLine(cm); }\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  function setDirectionClass(cm) {\n  (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n  }\n\n  function directionChanged(cm) {\n    runInOp(cm, function () {\n      setDirectionClass(cm);\n      regChange(cm);\n    });\n  }\n\n  function History(prev) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = prev ? prev.undoDepth : Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n    return histChange\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) { array.pop(); }\n      else { break }\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done)\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done)\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done)\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, or are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n    var last;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        { pushSelectionToHistory(doc.sel, hist.done); }\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) { hist.done.shift(); }\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) { signal(doc, \"historyAdded\"); }\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      { hist.done[hist.done.length - 1] = sel; }\n    else\n      { pushSelectionToHistory(sel, hist.done); }\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      { clearSelectionEvents(hist.undone); }\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      { dest.push(sel); }\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n      if (line.markedSpans)\n        { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) { return null }\n    var out;\n    for (var i = 0; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n      else if (out) { out.push(spans[i]); }\n    }\n    return !out ? spans : out.length ? out : null\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) { return null }\n    var nw = [];\n    for (var i = 0; i < change.text.length; ++i)\n      { nw.push(removeClearedSpans(found[i])); }\n    return nw\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) { return stretched }\n    if (!stretched) { return old }\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            { if (oldCur[k].marker == span.marker) { continue spans } }\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    var copy = [];\n    for (var i = 0; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m = (void 0);\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        } } }\n      }\n    }\n    return copy\n  }\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(range, head, other, extend) {\n    if (extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head)\n    } else {\n      return new Range(other || head, head)\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options, extend) {\n    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    var out = [];\n    var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n    for (var i = 0; i < doc.sel.ranges.length; i++)\n      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head)); }\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n    else { return sel }\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      { sel = filterSelectionChange(doc, sel, options); }\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption(\"readOnly\") != \"nocursor\")\n      { ensureCursorVisible(doc.cm); }\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) { return }\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = 1;\n      doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) { out = sel.ranges.slice(0, i); }\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n\n      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n      // is with selectLeft/Right\n      var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n      var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) { break }\n            else {--i; continue}\n          }\n        }\n        if (!m.atomic) { continue }\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n          if (dir < 0 ? preventCursorRight : preventCursorLeft)\n            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? preventCursorLeft : preventCursorRight)\n          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n      }\n    } }\n    return pos\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0)\n    }\n    return found\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n      else { return null }\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n      else { return null }\n    } else {\n      return new Pos(pos.line, pos.ch + dir)\n    }\n  }\n\n  function selectAll(cm) {\n    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n  }\n\n  // UPDATING\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function () { return obj.canceled = true; }\n    };\n    if (update) { obj.update = function (from, to, text, origin) {\n      if (from) { obj.from = clipPos(doc, from); }\n      if (to) { obj.to = clipPos(doc, to); }\n      if (text) { obj.text = text; }\n      if (origin !== undefined) { obj.origin = origin; }\n    }; }\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n    if (obj.canceled) {\n      if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n      return null\n    }\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n      if (doc.cm.state.suppressEdits) { return }\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) { return }\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function (doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    var suppress = doc.cm && doc.cm.state.suppressEdits;\n    if (suppress && !allowSelectionOnly) { return }\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    var i = 0;\n    for (; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        { break }\n    }\n    if (i == source.length) { return }\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return\n        }\n        selAfter = event;\n      } else if (suppress) {\n        source.push(event);\n        return\n      } else { break }\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    var loop = function ( i ) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return {}\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function (doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    };\n\n    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n      var returned = loop( i$1 );\n\n      if ( returned ) return returned.v;\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) { return }\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n      Pos(range.anchor.line + distance, range.anchor.ch),\n      Pos(range.head.line + distance, range.head.ch)\n    ); }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        { regLineChange(doc.cm, l, \"gutter\"); }\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return\n    }\n    if (change.from.line > doc.lastLine()) { return }\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n    else { updateDoc(doc, change, spans); }\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n      { doc.cantEdit = false; }\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function (line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      { signalCursorActivity(cm); }\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n    }\n\n    retreatFrontier(doc, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      { regChange(cm); }\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      { regLineChange(cm, from.line, \"text\"); }\n    else\n      { regChange(cm, from.line, to.line + 1, lendiff); }\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    var assign;\n\n    if (!to) { to = from; }\n    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n    if (typeof code == \"string\") { code = doc.splitLines(code); }\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue\n      }\n      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n        var cur = sub.changes[j$1];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n    else { no = lineNo(handle); }\n    if (no == null) { return null }\n    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n    return line\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    var height = 0;\n    for (var i = 0; i < lines.length; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length },\n\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n    },\n\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        { if (op(this.lines[at])) { return true } }\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size },\n\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n\n    collapse: function(lines) {\n      for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n    },\n\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25;\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this.children.splice(++i, 0, leaf);\n              leaf.parent = this;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this.maybeSpill();\n          }\n          break\n        }\n        at -= sz;\n      }\n    },\n\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) { return }\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10)\n      me.parent.maybeSpill();\n    },\n\n    iterN: function(at, n, op) {\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) { return true }\n          if ((n -= used) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n    }\n  };\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = function(doc, node, options) {\n    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n      { this[opt] = options[opt]; } } }\n    this.doc = doc;\n    this.node = node;\n  };\n\n  LineWidget.prototype.clear = function () {\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) { return }\n    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n    if (!ws.length) { line.widgets = null; }\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) {\n      runInOp(cm, function () {\n        adjustScrollWhenAboveVisible(cm, line, -height);\n        regLineChange(cm, no, \"widget\");\n      });\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n    }\n  };\n\n  LineWidget.prototype.changed = function () {\n      var this$1 = this;\n\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) { return }\n    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n    if (cm) {\n      runInOp(cm, function () {\n        cm.curOp.forceUpdate = true;\n        adjustScrollWhenAboveVisible(cm, line, diff);\n        signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n      });\n    }\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      { addToScrollTop(cm, diff); }\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n    changeLine(doc, handle, \"widget\", function (line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) { widgets.push(widget); }\n      else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) { addToScrollTop(cm, widget.height); }\n        cm.curOp.forceUpdate = true;\n      }\n      return true\n    });\n    if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n    return widget\n  }\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  var TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) { startOperation(cm); }\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) { signalLater(this, \"clear\", found.from, found.to); }\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n      else if (cm) {\n        if (span.to != null) { max = lineNo(line); }\n        if (span.from != null) { min = lineNo(line); }\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        { updateLineHeight(line, textHeight(cm.display)); }\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n      var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    } }\n\n    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) { reCheckSelection(cm.doc); }\n    }\n    if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n    if (withOp) { endOperation(cm); }\n    if (this.parent) { this.parent.clear(); }\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function (side, lineObj) {\n    if (side == null && this.type == \"bookmark\") { side = 1; }\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) { return from }\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) { return to }\n      }\n    }\n    return from && {from: from, to: to}\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function () {\n      var this$1 = this;\n\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) { return }\n    runInOp(cm, function () {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          { updateLineHeight(line, line.height + dHeight); }\n      }\n      signalLater(cm, \"markerChanged\", cm, this$1);\n    });\n  };\n\n  TextMarker.prototype.attachLine = function (line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n    }\n    this.lines.push(line);\n  };\n\n  TextMarker.prototype.detachLine = function (line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n  eventMixin(TextMarker);\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) { copyObj(options, marker, false); }\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      { return marker }\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n      seeCollapsedSpans();\n    }\n\n    if (marker.addToHistory)\n      { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function (line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        { updateMaxLine = true; }\n      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n    }); }\n\n    if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n    if (marker.readOnly) {\n      seeReadOnlySpans();\n      if (doc.history.done.length || doc.history.undone.length)\n        { doc.clearHistory(); }\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n      if (marker.collapsed)\n        { regChange(cm, from.line, to.line + 1); }\n      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n               marker.attributes || marker.title)\n        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n      if (marker.atomic) { reCheckSelection(cm.doc); }\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      { markers[i].parent = this; }\n  };\n\n  SharedTextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      { this.markers[i].clear(); }\n    signalLater(this, \"clear\");\n  };\n\n  SharedTextMarker.prototype.find = function (side, lineObj) {\n    return this.primary.find(side, lineObj)\n  };\n  eventMixin(SharedTextMarker);\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function (doc) {\n      if (widget) { options.widgetNode = widget.cloneNode(true); }\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        { if (doc.linked[i].isParent) { return } }\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary)\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    var loop = function ( i ) {\n      var marker = markers[i], linked = [marker.primary.doc];\n      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    };\n\n    for (var i = 0; i < markers.length; i++) loop( i );\n  }\n\n  var nextDocId = 0;\n  var Doc = function(text, mode, firstLine, lineSep, direction) {\n    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n    if (firstLine == null) { firstLine = 0; }\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.modeFrontier = this.highlightFrontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n    this.extend = false;\n\n    if (typeof text == \"string\") { text = this.splitLines(text); }\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) { this.iterN(from - this.first, to - from, op); }\n      else { this.iterN(this.first, this.first + this.size, from); }\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n      setSelection(this, simpleSelection(top), sel_dontScroll);\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) { return lines }\n      if (lineSep === '') { return lines.join('') }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n    getLineNumber: function(line) {return lineNo(line)},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") { line = getLine(this, line); }\n      return visualLine(line)\n    },\n\n    lineCount: function() {return this.size},\n    firstLine: function() {return this.first},\n    lastLine: function() {return this.first + this.size - 1},\n\n    clipPos: function(pos) {return clipPos(this, pos)},\n\n    getCursor: function(start) {\n      var range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") { pos = range.head; }\n      else if (start == \"anchor\") { pos = range.anchor; }\n      else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n      else { pos = range.from(); }\n      return pos\n    },\n    listSelections: function() { return this.sel.ranges },\n    somethingSelected: function() {return this.sel.somethingSelected()},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) { return }\n      var out = [];\n      for (var i = 0; i < ranges.length; i++)\n        { out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head || ranges[i].anchor)); }\n      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n      setSelection(this, normalizeSelection(this.cm, out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) { return lines }\n      else { return lines.join(lineSep || this.lineSeparator()) }\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n        parts[i] = sel;\n      }\n      return parts\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        { dup[i] = code; }\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n        { makeChange(this, changes[i$1]); }\n      if (newSel) { setSelectionReplaceHistory(this, newSel); }\n      else if (this.cm) { ensureCursorVisible(this.cm); }\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n      return {undo: done, redo: undone}\n    },\n    clearHistory: function() {\n      var this$1 = this;\n\n      this.history = new History(this.history);\n      linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n    },\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n      return this.history.generation\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration)\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)}\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    setGutterMarker: docMethodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function (line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n        return true\n      })\n    }),\n\n    clearGutter: docMethodOp(function(gutterID) {\n      var this$1 = this;\n\n      this.iter(function (line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          changeLine(this$1, line, \"gutter\", function () {\n            line.gutterMarkers[gutterID] = null;\n            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n            return true\n          });\n        }\n      });\n    }),\n\n    lineInfo: function(line) {\n      var n;\n      if (typeof line == \"number\") {\n        if (!isLine(this, line)) { return null }\n        n = line;\n        line = getLine(this, line);\n        if (!line) { return null }\n      } else {\n        n = lineNo(line);\n        if (n == null) { return null }\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets}\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) { line[prop] = cls; }\n        else if (classTest(cls).test(line[prop])) { return false }\n        else { line[prop] += \" \" + cls; }\n        return true\n      })\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) { return false }\n        else if (cls == null) { line[prop] = null; }\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) { return false }\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true\n      })\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options)\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\")\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) { for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          { markers.push(span.marker.parent || span.marker); }\n      } }\n      return markers\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function (line) {\n        var spans = line.markedSpans;\n        if (spans) { for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n                span.from == null && lineNo != from.line ||\n                span.from != null && lineNo == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            { found.push(span.marker.parent || span.marker); }\n        } }\n        ++lineNo;\n      });\n      return found\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function (line) {\n        var sps = line.markedSpans;\n        if (sps) { for (var i = 0; i < sps.length; ++i)\n          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n      });\n      return markers\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function (line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch))\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) { return 0 }\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n        index += line.text.length + sepSize;\n      });\n      return index\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep, this.direction);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc\n    },\n\n    linkedDoc: function(options) {\n      if (!options) { options = {}; }\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) { from = options.from; }\n      if (options.to != null && options.to < to) { to = options.to; }\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n      if (options.sharedHist) { copy.history = this.history\n      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) { other = other.doc; }\n      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) { continue }\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        detachSharedMarkers(findSharedMarkers(this));\n        break\n      } }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode},\n    getEditor: function() {return this.cm},\n\n    splitLines: function(str) {\n      if (this.lineSep) { return str.split(this.lineSep) }\n      return splitLinesAuto(str)\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n    setDirection: docMethodOp(function (dir) {\n      if (dir != \"rtl\") { dir = \"ltr\"; }\n      if (dir == this.direction) { return }\n      this.direction = dir;\n      this.iter(function (line) { return line.order = null; });\n      if (this.cm) { directionChanged(this.cm); }\n    })\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      { return }\n    e_preventDefault(e);\n    if (ie) { lastDrop = +new Date; }\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) { return }\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var markAsReadAndPasteIfAllFilesAreRead = function () {\n        if (++read == n) {\n          operation(cm, function () {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(\n                              text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n          })();\n        }\n      };\n      var readTextFromFile = function (file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n          markAsReadAndPasteIfAllFilesAreRead();\n          return\n        }\n        var reader = new FileReader;\n        reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n        reader.onload = function () {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n            markAsReadAndPasteIfAllFilesAreRead();\n            return\n          }\n          text[i] = content;\n          markAsReadAndPasteIfAllFilesAreRead();\n        };\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function () { return cm.display.input.focus(); }, 20);\n        return\n      }\n      try {\n        var text$1 = e.dataTransfer.getData(\"Text\");\n        if (text$1) {\n          var selected;\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            { selected = cm.listSelections(); }\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n            { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n          cm.replaceSelection(text$1, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e$1){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\";\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) { img.parentNode.removeChild(img); }\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) { return }\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.getElementsByClassName) { return }\n    var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) { editors.push(cm); }\n    }\n    if (editors.length) { editors[0].operation(function () {\n      for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n    }); }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) { return }\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function () {\n      if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100); }\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n  }\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  var keyNames = {\n    3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n\n  // Number keys\n  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n  // Alphabetic keys\n  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n  // Function keys\n  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n  var keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    \"fallthrough\": \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\", \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\",\n    \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\",\n    \"Ctrl-T\": \"transposeChars\", \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    \"fallthrough\": [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/);\n    name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n      else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n      else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n      else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n    }\n    if (alt) { name = \"Alt-\" + name; }\n    if (ctrl) { name = \"Ctrl-\" + name; }\n    if (cmd) { name = \"Cmd-\" + name; }\n    if (shift) { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  function normalizeKeyMap(keymap) {\n    var copy = {};\n    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n      if (value == \"...\") { delete keymap[keyname]; continue }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val = (void 0), name = (void 0);\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) { copy[name] = val; }\n        else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n      }\n      delete keymap[keyname];\n    } }\n    for (var prop in copy) { keymap[prop] = copy[prop]; }\n    return keymap\n  }\n\n  function lookupKey(key, map, handle, context) {\n    map = getKeyMap(map);\n    var found = map.call ? map.call(key, context) : map[key];\n    if (found === false) { return \"nothing\" }\n    if (found === \"...\") { return \"multi\" }\n    if (found != null && handle(found)) { return \"handled\" }\n\n    if (map.fallthrough) {\n      if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n        { return lookupKey(key, map.fallthrough, handle, context) }\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle, context);\n        if (result) { return result }\n      }\n    }\n  }\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  function isModifierKey(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n  }\n\n  function addModifierNames(name, event, noShift) {\n    var base = name;\n    if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n    if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // Look up the name of a key as indicated by an event object.\n  function keyName(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) { return false }\n    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n    if (event.keyCode == 3 && event.code) { name = event.code; }\n    return addModifierNames(name, event, noShift)\n  }\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function () {\n      for (var i = kill.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n      ensureCursorVisible(cm);\n    });\n  }\n\n  function moveCharLogically(line, ch, dir) {\n    var target = skipExtendingChars(line.text, ch + dir, dir);\n    return target < 0 || target > line.text.length ? null : target\n  }\n\n  function moveLogically(line, start, dir) {\n    var ch = moveCharLogically(line, start.ch, dir);\n    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n  }\n\n  function endOfLine(visually, cm, lineObj, lineNo, dir) {\n    if (visually) {\n      if (cm.doc.direction == \"rtl\") { dir = -dir; }\n      var order = getOrder(lineObj, cm.doc.direction);\n      if (order) {\n        var part = dir < 0 ? lst(order) : order[0];\n        var moveInStorageOrder = (dir < 0) == (part.level == 1);\n        var sticky = moveInStorageOrder ? \"after\" : \"before\";\n        var ch;\n        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n        // it could be that the last bidi part is not on the last visual line,\n        // since visual lines contain content order-consecutive chunks.\n        // Thus, in rtl, we are looking for the first (content-order) character\n        // in the rtl chunk that is on the last line (that is, the same line\n        // as the last (content-order) character).\n        if (part.level > 0 || cm.doc.direction == \"rtl\") {\n          var prep = prepareMeasureForLine(cm, lineObj);\n          ch = dir < 0 ? lineObj.text.length - 1 : 0;\n          var targetTop = measureCharPrepared(cm, prep, ch).top;\n          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n          if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n        } else { ch = dir < 0 ? part.to : part.from; }\n        return new Pos(lineNo, ch, sticky)\n      }\n    }\n    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n  }\n\n  function moveVisually(cm, line, start, dir) {\n    var bidi = getOrder(line, cm.doc.direction);\n    if (!bidi) { return moveLogically(line, start, dir) }\n    if (start.ch >= line.text.length) {\n      start.ch = line.text.length;\n      start.sticky = \"before\";\n    } else if (start.ch <= 0) {\n      start.ch = 0;\n      start.sticky = \"after\";\n    }\n    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n    if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n      // nothing interesting happens.\n      return moveLogically(line, start, dir)\n    }\n\n    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n    var prep;\n    var getWrappedLineExtent = function (ch) {\n      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n      prep = prep || prepareMeasureForLine(cm, line);\n      return wrappedLineExtentChar(cm, line, prep, ch)\n    };\n    var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n    if (cm.doc.direction == \"rtl\" || part.level == 1) {\n      var moveInStorageOrder = (part.level == 1) == (dir < 0);\n      var ch = mv(start, moveInStorageOrder ? 1 : -1);\n      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n        // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n        var sticky = moveInStorageOrder ? \"before\" : \"after\";\n        return new Pos(start.line, ch, sticky)\n      }\n    }\n\n    // Case 3: Could not move within this bidi part in this visual line, so leave\n    // the current bidi part\n\n    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n        ? new Pos(start.line, mv(ch, 1), \"before\")\n        : new Pos(start.line, ch, \"after\"); };\n\n      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n        var part = bidi[partPos];\n        var moveInStorageOrder = (dir > 0) == (part.level != 1);\n        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n        ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n      }\n    };\n\n    // Case 3a: Look for other bidi parts on the same visual line\n    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n    if (res) { return res }\n\n    // Case 3b: Look for other bidi parts on the next visual line\n    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n      if (res) { return res }\n    }\n\n    // Case 4: Nowhere to move\n    return null\n  }\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = {\n    selectAll: selectAll,\n    singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n    killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n      if (range.empty()) {\n        var len = getLine(cm.doc, range.head.line).text.length;\n        if (range.head.ch == len && range.head.line < cm.lastLine())\n          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n        else\n          { return {from: range.head, to: Pos(range.head.line, len)} }\n      } else {\n        return {from: range.from(), to: range.to()}\n      }\n    }); },\n    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0),\n      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n    }); }); },\n    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0), to: range.from()\n    }); }); },\n    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n      return {from: leftPos, to: range.from()}\n    }); },\n    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      return {from: range.from(), to: rightPos }\n    }); },\n    undo: function (cm) { return cm.undo(); },\n    redo: function (cm) { return cm.redo(); },\n    undoSelection: function (cm) { return cm.undoSelection(); },\n    redoSelection: function (cm) { return cm.redoSelection(); },\n    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n      {origin: \"+move\", bias: -1}\n    ); },\n    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: 0, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n      if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n      return pos\n    }, sel_move); },\n    goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n    goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n    goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n    goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n    goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n    goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n    goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n    goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n    goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n    goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n    goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n    goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n    delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n    delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n    delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n    delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n    delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n    delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n    indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n    indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n    indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n    insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n    insertSoftTab: function (cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function (cm) {\n      if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n      else { cm.execCommand(\"insertTab\"); }\n    },\n    // Swap the two chars left and right of each selection's head.\n    // Move cursor behind the two swapped characters afterwards.\n    //\n    // Doesn't consider line feeds a character.\n    // Doesn't scan more than one line above to find a character.\n    // Doesn't do anything on an empty line.\n    // Doesn't do anything with non-empty selections.\n    transposeChars: function (cm) { return runInOp(cm, function () {\n      var ranges = cm.listSelections(), newSel = [];\n      for (var i = 0; i < ranges.length; i++) {\n        if (!ranges[i].empty()) { continue }\n        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n        if (line) {\n          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n          if (cur.ch > 0) {\n            cur = new Pos(cur.line, cur.ch + 1);\n            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                            Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n          } else if (cur.line > cm.doc.first) {\n            var prev = getLine(cm.doc, cur.line - 1).text;\n            if (prev) {\n              cur = new Pos(cur.line, 1);\n              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                              prev.charAt(prev.length - 1),\n                              Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n            }\n          }\n        }\n        newSel.push(new Range(cur, cur));\n      }\n      cm.setSelections(newSel);\n    }); },\n    newlineAndIndent: function (cm) { return runInOp(cm, function () {\n      var sels = cm.listSelections();\n      for (var i = sels.length - 1; i >= 0; i--)\n        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n      sels = cm.listSelections();\n      for (var i$1 = 0; i$1 < sels.length; i$1++)\n        { cm.indentLine(sels[i$1].from().line, null, true); }\n      ensureCursorVisible(cm);\n    }); },\n    openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n  };\n\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, visual, lineN, 1)\n  }\n  function lineEnd(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLineEnd(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, line, lineN, -1)\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line, cm.doc.direction);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n    }\n    return start\n  }\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) { return false }\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n      if (dropShift) { cm.display.shift = false; }\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) { return result }\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm)\n  }\n\n  // Note that, despite the name, this function is also used to check\n  // for bound mouse clicks.\n\n  var stopSeq = new Delayed;\n\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) { return \"handled\" }\n      if (/\\'$/.test(name))\n        { cm.state.keySeq = null; }\n      else\n        { stopSeq.set(50, function () {\n          if (cm.state.keySeq == seq) {\n            cm.state.keySeq = null;\n            cm.display.input.reset();\n          }\n        }); }\n      if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n    }\n    return dispatchKeyInner(cm, name, e, handle)\n  }\n\n  function dispatchKeyInner(cm, name, e, handle) {\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      { cm.state.keySeq = name; }\n    if (result == \"handled\")\n      { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    return !!result\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) { return false }\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n          || dispatchKey(cm, name, e, function (b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 { return doHandleBinding(cm, b) }\n             })\n    } else {\n      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    cm.curOp.focus = activeElt();\n    if (signalDOMEvent(cm, e)) { return }\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        { cm.replaceSelection(\"\", null, \"cut\"); }\n    }\n    if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n      { document.execCommand(\"cut\"); }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      { showCrossHair(cm); }\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) { this.doc.sel.shift = false; }\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    // Some browsers fire keypress events for backspace\n    if (ch == \"\\x08\") { return }\n    if (handleCharBinding(cm, e, ch)) { return }\n    cm.display.input.onKeyPress(e);\n  }\n\n  var DOUBLECLICK_DELAY = 400;\n\n  var PastClick = function(time, pos, button) {\n    this.time = time;\n    this.pos = pos;\n    this.button = button;\n  };\n\n  PastClick.prototype.compare = function (time, pos, button) {\n    return this.time + DOUBLECLICK_DELAY > time &&\n      cmp(pos, this.pos) == 0 && button == this.button\n  };\n\n  var lastClick, lastDoubleClick;\n  function clickRepeat(pos, button) {\n    var now = +new Date;\n    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n      lastClick = lastDoubleClick = null;\n      return \"triple\"\n    } else if (lastClick && lastClick.compare(now, pos, button)) {\n      lastDoubleClick = new PastClick(now, pos, button);\n      lastClick = null;\n      return \"double\"\n    } else {\n      lastClick = new PastClick(now, pos, button);\n      lastDoubleClick = null;\n      return \"single\"\n    }\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n    display.input.ensurePolled();\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function () { return display.scroller.draggable = true; }, 100);\n      }\n      return\n    }\n    if (clickInGutter(cm, e)) { return }\n    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n    window.focus();\n\n    // #3261: make sure, that we're not starting a second selection\n    if (button == 1 && cm.state.selectingText)\n      { cm.state.selectingText(e); }\n\n    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n    if (button == 1) {\n      if (pos) { leftButtonDown(cm, pos, repeat, e); }\n      else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n    } else if (button == 2) {\n      if (pos) { extendSelection(cm.doc, pos); }\n      setTimeout(function () { return display.input.focus(); }, 20);\n    } else if (button == 3) {\n      if (captureRightClick) { cm.display.input.onContextMenu(e); }\n      else { delayBlurEvent(cm); }\n    }\n  }\n\n  function handleMappedButton(cm, button, pos, repeat, event) {\n    var name = \"Click\";\n    if (repeat == \"double\") { name = \"Double\" + name; }\n    else if (repeat == \"triple\") { name = \"Triple\" + name; }\n    name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {\n      if (typeof bound == \"string\") { bound = commands[bound]; }\n      if (!bound) { return false }\n      var done = false;\n      try {\n        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n        done = bound(cm, pos) != Pass;\n      } finally {\n        cm.state.suppressEdits = false;\n      }\n      return done\n    })\n  }\n\n  function configureMouse(cm, repeat, event) {\n    var option = cm.getOption(\"configureMouse\");\n    var value = option ? option(cm, repeat, event) : {};\n    if (value.unit == null) {\n      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n      value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n    }\n    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n    return value\n  }\n\n  function leftButtonDown(cm, pos, repeat, event) {\n    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n    else { cm.curOp.focus = activeElt(); }\n\n    var behavior = configureMouse(cm, repeat, event);\n\n    var sel = cm.doc.sel, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n      { leftButtonStartDrag(cm, event, pos, behavior); }\n    else\n      { leftButtonSelect(cm, event, pos, behavior); }\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, event, pos, behavior) {\n    var display = cm.display, moved = false;\n    var dragEnd = operation(cm, function (e) {\n      if (webkit) { display.scroller.draggable = false; }\n      cm.state.draggingText = false;\n      if (cm.state.delayingBlurEvent) {\n        if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n        else { delayBlurEvent(cm); }\n      }\n      off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n      off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n      off(display.scroller, \"dragstart\", dragStart);\n      off(display.scroller, \"drop\", dragEnd);\n      if (!moved) {\n        e_preventDefault(e);\n        if (!behavior.addNew)\n          { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if ((webkit && !safari) || ie && ie_version == 9)\n          { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n        else\n          { display.input.focus(); }\n      }\n    });\n    var mouseMove = function(e2) {\n      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n    };\n    var dragStart = function () { return moved = true; };\n    // Let the drag handler handle this.\n    if (webkit) { display.scroller.draggable = true; }\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = !behavior.moveOnDrag;\n    on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n    on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n    on(display.scroller, \"dragstart\", dragStart);\n    on(display.scroller, \"drop\", dragEnd);\n\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { return display.input.focus(); }, 20);\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n  }\n\n  function rangeForUnit(cm, pos, unit) {\n    if (unit == \"char\") { return new Range(pos, pos) }\n    if (unit == \"word\") { return cm.findWordAt(pos) }\n    if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n    var result = unit(cm, pos);\n    return new Range(result.from, result.to)\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, event, start, behavior) {\n    if (ie) { delayBlurEvent(cm); }\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(event);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (behavior.addNew && !behavior.extend) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        { ourRange = ranges[ourIndex]; }\n      else\n        { ourRange = new Range(start, start); }\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (behavior.unit == \"rectangle\") {\n      if (!behavior.addNew) { ourRange = new Range(start, start); }\n      start = posFromMouse(cm, event, true, true);\n      ourIndex = -1;\n    } else {\n      var range = rangeForUnit(cm, start, behavior.unit);\n      if (behavior.extend)\n        { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n      else\n        { ourRange = range; }\n    }\n\n    if (!behavior.addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) { return }\n      lastPos = pos;\n\n      if (behavior.unit == \"rectangle\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n          else if (text.length > leftPos)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n        }\n        if (!ranges.length) { ranges.push(new Range(start, start)); }\n        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var range = rangeForUnit(cm, pos, behavior.unit);\n        var anchor = oldRange.anchor, head;\n        if (cmp(range.anchor, anchor) > 0) {\n          head = range.head;\n          anchor = minPos(oldRange.from(), range.anchor);\n        } else {\n          head = range.anchor;\n          anchor = maxPos(oldRange.to(), range.head);\n        }\n        var ranges$1 = startSel.ranges.slice(0);\n        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n      if (!cur) { return }\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt();\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) { setTimeout(operation(cm, function () {\n          if (counter != curCount) { return }\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50); }\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      // If e is null or undefined we interpret this as someone trying\n      // to explicitly cancel the selection rather than the user\n      // letting go of the mouse button.\n      if (e) {\n        e_preventDefault(e);\n        display.input.focus();\n      }\n      off(display.wrapper.ownerDocument, \"mousemove\", move);\n      off(display.wrapper.ownerDocument, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function (e) {\n      if (e.buttons === 0 || !e_button(e)) { done(e); }\n      else { extend(e); }\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(display.wrapper.ownerDocument, \"mousemove\", move);\n    on(display.wrapper.ownerDocument, \"mouseup\", up);\n  }\n\n  // Used when mouse-selecting to adjust the anchor to the proper side\n  // of a bidi jump depending on the visual position of the head.\n  function bidiSimplify(cm, range) {\n    var anchor = range.anchor;\n    var head = range.head;\n    var anchorLine = getLine(cm.doc, anchor.line);\n    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n    var order = getOrder(anchorLine);\n    if (!order) { return range }\n    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n    if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n    if (boundary == 0 || boundary == order.length) { return range }\n\n    // Compute the relative visual position of the head compared to the\n    // anchor (<0 is to the left, >0 to the right)\n    var leftSide;\n    if (head.line != anchor.line) {\n      leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n    } else {\n      var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n      if (headIndex == boundary - 1 || headIndex == boundary)\n        { leftSide = dir < 0; }\n      else\n        { leftSide = dir > 0; }\n    }\n\n    var usePart = order[boundary + (leftSide ? -1 : 0)];\n    var from = leftSide == (usePart.level == 1);\n    var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n    return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n  }\n\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    var mX, mY;\n    if (e.touches) {\n      mX = e.touches[0].clientX;\n      mY = e.touches[0].clientY;\n    } else {\n      try { mX = e.clientX; mY = e.clientY; }\n      catch(e$1) { return false }\n    }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n    if (prevent) { e_preventDefault(e); }\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.display.gutterSpecs[i];\n        signal(cm, type, cm, line, gutter.className, e);\n        return e_defaultPrevented(e)\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true)\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n    if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n    if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n    return gutterEvent(cm, e, \"gutterContextMenu\", false)\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n  var defaults = {};\n  var optionHandlers = {};\n\n  function defineOptions(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    function option(name, deflt, handle, notOnInit) {\n      CodeMirror.defaults[name] = deflt;\n      if (handle) { optionHandlers[name] =\n        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n    }\n\n    CodeMirror.defineOption = option;\n\n    // Passed to option handlers when there is no old value.\n    CodeMirror.Init = Init;\n\n    // These two are, on init, called from the constructor because they\n    // have to be initialized before the editor can start at all.\n    option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n    option(\"mode\", null, function (cm, val) {\n      cm.doc.modeOption = val;\n      loadMode(cm);\n    }, true);\n\n    option(\"indentUnit\", 2, loadMode, true);\n    option(\"indentWithTabs\", false);\n    option(\"smartIndent\", true);\n    option(\"tabSize\", 4, function (cm) {\n      resetModeState(cm);\n      clearCaches(cm);\n      regChange(cm);\n    }, true);\n\n    option(\"lineSeparator\", null, function (cm, val) {\n      cm.doc.lineSep = val;\n      if (!val) { return }\n      var newBreaks = [], lineNo = cm.doc.first;\n      cm.doc.iter(function (line) {\n        for (var pos = 0;;) {\n          var found = line.text.indexOf(val, pos);\n          if (found == -1) { break }\n          pos = found + val.length;\n          newBreaks.push(Pos(lineNo, found));\n        }\n        lineNo++;\n      });\n      for (var i = newBreaks.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n    });\n    option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n      cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n      if (old != Init) { cm.refresh(); }\n    });\n    option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n    option(\"electricChars\", true);\n    option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n      throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n    }, true);\n    option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n    option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n    option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n    option(\"rtlMoveVisually\", !windows);\n    option(\"wholeLineUpdateBefore\", true);\n\n    option(\"theme\", \"default\", function (cm) {\n      themeChanged(cm);\n      updateGutters(cm);\n    }, true);\n    option(\"keyMap\", \"default\", function (cm, val, old) {\n      var next = getKeyMap(val);\n      var prev = old != Init && getKeyMap(old);\n      if (prev && prev.detach) { prev.detach(cm, next); }\n      if (next.attach) { next.attach(cm, prev || null); }\n    });\n    option(\"extraKeys\", null);\n    option(\"configureMouse\", null);\n\n    option(\"lineWrapping\", false, wrappingChanged, true);\n    option(\"gutters\", [], function (cm, val) {\n      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n      updateGutters(cm);\n    }, true);\n    option(\"fixedGutter\", true, function (cm, val) {\n      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n      cm.refresh();\n    }, true);\n    option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n    option(\"scrollbarStyle\", \"native\", function (cm) {\n      initScrollbars(cm);\n      updateScrollbars(cm);\n      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n    }, true);\n    option(\"lineNumbers\", false, function (cm, val) {\n      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n      updateGutters(cm);\n    }, true);\n    option(\"firstLineNumber\", 1, updateGutters, true);\n    option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n    option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n    option(\"resetSelectionOnContextMenu\", true);\n    option(\"lineWiseCopyCut\", true);\n    option(\"pasteLinesPerSelection\", true);\n    option(\"selectionsMayTouch\", false);\n\n    option(\"readOnly\", false, function (cm, val) {\n      if (val == \"nocursor\") {\n        onBlur(cm);\n        cm.display.input.blur();\n      }\n      cm.display.input.readOnlyChanged(val);\n    });\n\n    option(\"screenReaderLabel\", null, function (cm, val) {\n      val = (val === '') ? null : val;\n      cm.display.input.screenReaderLabelChanged(val);\n    });\n\n    option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n    option(\"dragDrop\", true, dragDropChanged);\n    option(\"allowDropFileTypes\", null);\n\n    option(\"cursorBlinkRate\", 530);\n    option(\"cursorScrollMargin\", 0);\n    option(\"cursorHeight\", 1, updateSelection, true);\n    option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n    option(\"workTime\", 100);\n    option(\"workDelay\", 100);\n    option(\"flattenSpans\", true, resetModeState, true);\n    option(\"addModeClass\", false, resetModeState, true);\n    option(\"pollInterval\", 100);\n    option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n    option(\"historyEventDelay\", 1250);\n    option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n    option(\"maxHighlightLength\", 10000, resetModeState, true);\n    option(\"moveInputWithCursor\", true, function (cm, val) {\n      if (!val) { cm.display.input.resetPosition(); }\n    });\n\n    option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n    option(\"autofocus\", null);\n    option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n    option(\"phrases\", null);\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function () { return updateScrollbars(cm); }, 100);\n  }\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    var this$1 = this;\n\n    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n    else if (options.mode) { doc.modeOption = options.mode; }\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input, options);\n    display.wrapper.CodeMirror = this;\n    themeChanged(this);\n    if (options.lineWrapping)\n      { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    if (options.autofocus && !mobile) { display.input.focus(); }\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || this.hasFocus())\n      { setTimeout(function () {\n        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n      }, 20); }\n    else\n      { onBlur(this); }\n\n    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n      { optionHandlers[opt](this, options[opt], Init); } }\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) { options.finishInit(this); }\n    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      { display.lineDiv.style.textRendering = \"auto\"; }\n  }\n\n  // The default configuration options.\n  CodeMirror.defaults = defaults;\n  // Functions to run when options are changed.\n  CodeMirror.optionHandlers = optionHandlers;\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n        if (signalDOMEvent(cm, e)) { return }\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      })); }\n    else\n      { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n    on(d.input.getField(), \"contextmenu\", function (e) {\n      if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n    });\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    }\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) { return false }\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1\n    }\n    function farAway(touch, other) {\n      if (other.left == null) { return true }\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20\n    }\n    on(d.scroller, \"touchstart\", function (e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n        d.input.ensurePolled();\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function () {\n      if (d.activeTouch) { d.activeTouch.moved = true; }\n    });\n    on(d.scroller, \"touchend\", function (e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          { range = new Range(pos, pos); }\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          { range = cm.findWordAt(pos); }\n        else // Triple tap\n          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function () {\n      if (d.scroller.clientHeight) {\n        updateScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n    on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function (e) { return onDragStart(cm, e); },\n      drop: operation(cm, onDrop),\n      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n    on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n  }\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) { how = \"add\"; }\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) { how = \"prev\"; }\n      else { state = getContextBefore(cm, n).state; }\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) { line.stateAfter = null; }\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) { return }\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n      else { indentation = 0; }\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n    if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n        var range = doc.sel.ranges[i$1];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos$1 = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n          break\n        }\n      }\n    }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function setLastCopied(newLastCopied) {\n    lastCopied = newLastCopied;\n  }\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) { sel = doc.sel; }\n\n    var recent = +new Date - 200;\n    var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n    var textLines = splitLinesAuto(inserted), multiPaste = null;\n    // When pasting N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n        }\n      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n        multiPaste = map(textLines, function (l) { return [l]; });\n      }\n    }\n\n    var updateInput = cm.curOp.updateInput;\n    // Normal behavior is to insert the new text into every selection\n    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n      var range = sel.ranges[i$1];\n      var from = range.from(), to = range.to();\n      if (range.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          { from = Pos(from.line, from.ch - deleted); }\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n          { from = to = Pos(from.line, 0); }\n      }\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      { triggerElectric(cm, inserted); }\n\n    ensureCursorVisible(cm);\n    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput)\n        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n      return true\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range = sel.ranges[i];\n      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n      var mode = cm.getModeAt(range.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range.head.line, \"smart\");\n            break\n          } }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n          { indented = indentLine(cm, range.head.line, \"smart\"); }\n      }\n      if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges}\n  }\n\n  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n    field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n    field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n    field.setAttribute(\"spellcheck\", !!spellcheck);\n  }\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) { te.style.width = \"1000px\"; }\n    else { te.setAttribute(\"wrap\", \"off\"); }\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) { te.style.border = \"1px solid black\"; }\n    disableBrowserMagic(te);\n    return div\n  }\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  function addEditorMethods(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    var helpers = CodeMirror.helpers = {};\n\n    CodeMirror.prototype = {\n      constructor: CodeMirror,\n      focus: function(){window.focus(); this.display.input.focus();},\n\n      setOption: function(option, value) {\n        var options = this.options, old = options[option];\n        if (options[option] == value && option != \"mode\") { return }\n        options[option] = value;\n        if (optionHandlers.hasOwnProperty(option))\n          { operation(this, optionHandlers[option])(this, value, old); }\n        signal(this, \"optionChange\", this, option);\n      },\n\n      getOption: function(option) {return this.options[option]},\n      getDoc: function() {return this.doc},\n\n      addKeyMap: function(map, bottom) {\n        this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n      },\n      removeKeyMap: function(map) {\n        var maps = this.state.keyMaps;\n        for (var i = 0; i < maps.length; ++i)\n          { if (maps[i] == map || maps[i].name == map) {\n            maps.splice(i, 1);\n            return true\n          } }\n      },\n\n      addOverlay: methodOp(function(spec, options) {\n        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n        if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n        insertSorted(this.state.overlays,\n                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                      priority: (options && options.priority) || 0},\n                     function (overlay) { return overlay.priority; });\n        this.state.modeGen++;\n        regChange(this);\n      }),\n      removeOverlay: methodOp(function(spec) {\n        var overlays = this.state.overlays;\n        for (var i = 0; i < overlays.length; ++i) {\n          var cur = overlays[i].modeSpec;\n          if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n            overlays.splice(i, 1);\n            this.state.modeGen++;\n            regChange(this);\n            return\n          }\n        }\n      }),\n\n      indentLine: methodOp(function(n, dir, aggressive) {\n        if (typeof dir != \"string\" && typeof dir != \"number\") {\n          if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n          else { dir = dir ? \"add\" : \"subtract\"; }\n        }\n        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n      }),\n      indentSelection: methodOp(function(how) {\n        var ranges = this.doc.sel.ranges, end = -1;\n        for (var i = 0; i < ranges.length; i++) {\n          var range = ranges[i];\n          if (!range.empty()) {\n            var from = range.from(), to = range.to();\n            var start = Math.max(end, from.line);\n            end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n            for (var j = start; j < end; ++j)\n              { indentLine(this, j, how); }\n            var newRanges = this.doc.sel.ranges;\n            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n              { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n          } else if (range.head.line > end) {\n            indentLine(this, range.head.line, how, true);\n            end = range.head.line;\n            if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n          }\n        }\n      }),\n\n      // Fetch the parser token for a given character. Useful for hacks\n      // that want to inspect the mode state (say, for completion).\n      getTokenAt: function(pos, precise) {\n        return takeToken(this, pos, precise)\n      },\n\n      getLineTokens: function(line, precise) {\n        return takeToken(this, Pos(line), precise, true)\n      },\n\n      getTokenTypeAt: function(pos) {\n        pos = clipPos(this.doc, pos);\n        var styles = getLineStyles(this, getLine(this.doc, pos.line));\n        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n        var type;\n        if (ch == 0) { type = styles[2]; }\n        else { for (;;) {\n          var mid = (before + after) >> 1;\n          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n          else { type = styles[mid * 2 + 2]; break }\n        } }\n        var cut = type ? type.indexOf(\"overlay \") : -1;\n        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n      },\n\n      getModeAt: function(pos) {\n        var mode = this.doc.mode;\n        if (!mode.innerMode) { return mode }\n        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n      },\n\n      getHelper: function(pos, type) {\n        return this.getHelpers(pos, type)[0]\n      },\n\n      getHelpers: function(pos, type) {\n        var found = [];\n        if (!helpers.hasOwnProperty(type)) { return found }\n        var help = helpers[type], mode = this.getModeAt(pos);\n        if (typeof mode[type] == \"string\") {\n          if (help[mode[type]]) { found.push(help[mode[type]]); }\n        } else if (mode[type]) {\n          for (var i = 0; i < mode[type].length; i++) {\n            var val = help[mode[type][i]];\n            if (val) { found.push(val); }\n          }\n        } else if (mode.helperType && help[mode.helperType]) {\n          found.push(help[mode.helperType]);\n        } else if (help[mode.name]) {\n          found.push(help[mode.name]);\n        }\n        for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n          var cur = help._global[i$1];\n          if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n            { found.push(cur.val); }\n        }\n        return found\n      },\n\n      getStateAfter: function(line, precise) {\n        var doc = this.doc;\n        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n        return getContextBefore(this, line + 1, precise).state\n      },\n\n      cursorCoords: function(start, mode) {\n        var pos, range = this.doc.sel.primary();\n        if (start == null) { pos = range.head; }\n        else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n        else { pos = start ? range.from() : range.to(); }\n        return cursorCoords(this, pos, mode || \"page\")\n      },\n\n      charCoords: function(pos, mode) {\n        return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n      },\n\n      coordsChar: function(coords, mode) {\n        coords = fromCoordSystem(this, coords, mode || \"page\");\n        return coordsChar(this, coords.left, coords.top)\n      },\n\n      lineAtHeight: function(height, mode) {\n        height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n        return lineAtHeight(this.doc, height + this.display.viewOffset)\n      },\n      heightAtLine: function(line, mode, includeWidgets) {\n        var end = false, lineObj;\n        if (typeof line == \"number\") {\n          var last = this.doc.first + this.doc.size - 1;\n          if (line < this.doc.first) { line = this.doc.first; }\n          else if (line > last) { line = last; end = true; }\n          lineObj = getLine(this.doc, line);\n        } else {\n          lineObj = line;\n        }\n        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n          (end ? this.doc.height - heightAtLine(lineObj) : 0)\n      },\n\n      defaultTextHeight: function() { return textHeight(this.display) },\n      defaultCharWidth: function() { return charWidth(this.display) },\n\n      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n      addWidget: function(pos, node, scroll, vert, horiz) {\n        var display = this.display;\n        pos = cursorCoords(this, clipPos(this.doc, pos));\n        var top = pos.bottom, left = pos.left;\n        node.style.position = \"absolute\";\n        node.setAttribute(\"cm-ignore-events\", \"true\");\n        this.display.input.setUneditable(node);\n        display.sizer.appendChild(node);\n        if (vert == \"over\") {\n          top = pos.top;\n        } else if (vert == \"above\" || vert == \"near\") {\n          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n          // Default to positioning above (if specified and possible); otherwise default to positioning below\n          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n            { top = pos.top - node.offsetHeight; }\n          else if (pos.bottom + node.offsetHeight <= vspace)\n            { top = pos.bottom; }\n          if (left + node.offsetWidth > hspace)\n            { left = hspace - node.offsetWidth; }\n        }\n        node.style.top = top + \"px\";\n        node.style.left = node.style.right = \"\";\n        if (horiz == \"right\") {\n          left = display.sizer.clientWidth - node.offsetWidth;\n          node.style.right = \"0px\";\n        } else {\n          if (horiz == \"left\") { left = 0; }\n          else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n          node.style.left = left + \"px\";\n        }\n        if (scroll)\n          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n      },\n\n      triggerOnKeyDown: methodOp(onKeyDown),\n      triggerOnKeyPress: methodOp(onKeyPress),\n      triggerOnKeyUp: onKeyUp,\n      triggerOnMouseDown: methodOp(onMouseDown),\n\n      execCommand: function(cmd) {\n        if (commands.hasOwnProperty(cmd))\n          { return commands[cmd].call(null, this) }\n      },\n\n      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n      findPosH: function(from, amount, unit, visually) {\n        var dir = 1;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          cur = findPosH(this.doc, cur, dir, unit, visually);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveH: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        this.extendSelectionsBy(function (range) {\n          if (this$1.display.shift || this$1.doc.extend || range.empty())\n            { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n          else\n            { return dir < 0 ? range.from() : range.to() }\n        }, sel_move);\n      }),\n\n      deleteH: methodOp(function(dir, unit) {\n        var sel = this.doc.sel, doc = this.doc;\n        if (sel.somethingSelected())\n          { doc.replaceSelection(\"\", null, \"+delete\"); }\n        else\n          { deleteNearSelection(this, function (range) {\n            var other = findPosH(doc, range.head, dir, unit, false);\n            return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n          }); }\n      }),\n\n      findPosV: function(from, amount, unit, goalColumn) {\n        var dir = 1, x = goalColumn;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          var coords = cursorCoords(this, cur, \"div\");\n          if (x == null) { x = coords.left; }\n          else { coords.left = x; }\n          cur = findPosV(this, coords, dir, unit);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveV: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        var doc = this.doc, goals = [];\n        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n        doc.extendSelectionsBy(function (range) {\n          if (collapse)\n            { return dir < 0 ? range.from() : range.to() }\n          var headPos = cursorCoords(this$1, range.head, \"div\");\n          if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n          goals.push(headPos.left);\n          var pos = findPosV(this$1, headPos, dir, unit);\n          if (unit == \"page\" && range == doc.sel.primary())\n            { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n          return pos\n        }, sel_move);\n        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n          { doc.sel.ranges[i].goalColumn = goals[i]; } }\n      }),\n\n      // Find the word at the given position (as returned by coordsChar).\n      findWordAt: function(pos) {\n        var doc = this.doc, line = getLine(doc, pos.line).text;\n        var start = pos.ch, end = pos.ch;\n        if (line) {\n          var helper = this.getHelper(pos, \"wordChars\");\n          if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n          var startChar = line.charAt(start);\n          var check = isWordChar(startChar, helper)\n            ? function (ch) { return isWordChar(ch, helper); }\n            : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n            : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n          while (start > 0 && check(line.charAt(start - 1))) { --start; }\n          while (end < line.length && check(line.charAt(end))) { ++end; }\n        }\n        return new Range(Pos(pos.line, start), Pos(pos.line, end))\n      },\n\n      toggleOverwrite: function(value) {\n        if (value != null && value == this.state.overwrite) { return }\n        if (this.state.overwrite = !this.state.overwrite)\n          { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n        else\n          { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n        signal(this, \"overwriteToggle\", this, this.state.overwrite);\n      },\n      hasFocus: function() { return this.display.input.getField() == activeElt() },\n      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n      getScrollInfo: function() {\n        var scroller = this.display.scroller;\n        return {left: scroller.scrollLeft, top: scroller.scrollTop,\n                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n      },\n\n      scrollIntoView: methodOp(function(range, margin) {\n        if (range == null) {\n          range = {from: this.doc.sel.primary().head, to: null};\n          if (margin == null) { margin = this.options.cursorScrollMargin; }\n        } else if (typeof range == \"number\") {\n          range = {from: Pos(range, 0), to: null};\n        } else if (range.from == null) {\n          range = {from: range, to: null};\n        }\n        if (!range.to) { range.to = range.from; }\n        range.margin = margin || 0;\n\n        if (range.from.line != null) {\n          scrollToRange(this, range);\n        } else {\n          scrollToCoordsRange(this, range.from, range.to, range.margin);\n        }\n      }),\n\n      setSize: methodOp(function(width, height) {\n        var this$1 = this;\n\n        var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n        if (width != null) { this.display.wrapper.style.width = interpret(width); }\n        if (height != null) { this.display.wrapper.style.height = interpret(height); }\n        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n        var lineNo = this.display.viewFrom;\n        this.doc.iter(lineNo, this.display.viewTo, function (line) {\n          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n          ++lineNo;\n        });\n        this.curOp.forceUpdate = true;\n        signal(this, \"refresh\", this);\n      }),\n\n      operation: function(f){return runInOp(this, f)},\n      startOperation: function(){return startOperation(this)},\n      endOperation: function(){return endOperation(this)},\n\n      refresh: methodOp(function() {\n        var oldHeight = this.display.cachedTextHeight;\n        regChange(this);\n        this.curOp.forceUpdate = true;\n        clearCaches(this);\n        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n        updateGutterSpace(this.display);\n        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n          { estimateLineHeights(this); }\n        signal(this, \"refresh\", this);\n      }),\n\n      swapDoc: methodOp(function(doc) {\n        var old = this.doc;\n        old.cm = null;\n        // Cancel the current text selection if any (#5821)\n        if (this.state.selectingText) { this.state.selectingText(); }\n        attachDoc(this, doc);\n        clearCaches(this);\n        this.display.input.reset();\n        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n        this.curOp.forceScroll = true;\n        signalLater(this, \"swapDoc\", this, old);\n        return old\n      }),\n\n      phrase: function(phraseText) {\n        var phrases = this.options.phrases;\n        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n      },\n\n      getInputField: function(){return this.display.input.getField()},\n      getWrapperElement: function(){return this.display.wrapper},\n      getScrollerElement: function(){return this.display.scroller},\n      getGutterElement: function(){return this.display.gutters}\n    };\n    eventMixin(CodeMirror);\n\n    CodeMirror.registerHelper = function(type, name, value) {\n      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n      helpers[type][name] = value;\n    };\n    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n      CodeMirror.registerHelper(type, name, value);\n      helpers[type]._global.push({pred: predicate, val: value});\n    };\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n  // doesn't cross line boundaries), \"word\" (across next word), or\n  // \"group\" (to the start of next group of word or\n  // non-word-non-whitespace chars). The visually param controls\n  // whether, in right-to-left text, direction 1 means to move towards\n  // the next index in the string, or towards the character to the right\n  // of the current position. The resulting position will have a\n  // hitSide=true property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var oldPos = pos;\n    var origDir = dir;\n    var lineObj = getLine(doc, pos.line);\n    var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n    function findNextLine() {\n      var l = pos.line + lineDir;\n      if (l < doc.first || l >= doc.first + doc.size) { return false }\n      pos = new Pos(l, pos.ch, pos.sticky);\n      return lineObj = getLine(doc, l)\n    }\n    function moveOnce(boundToLine) {\n      var next;\n      if (unit == \"codepoint\") {\n        var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\n        if (isNaN(ch)) {\n          next = null;\n        } else {\n          var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;\n          next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);\n        }\n      } else if (visually) {\n        next = moveVisually(doc.cm, lineObj, pos, dir);\n      } else {\n        next = moveLogically(lineObj, pos, dir);\n      }\n      if (next == null) {\n        if (!boundToLine && findNextLine())\n          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n        else\n          { return false }\n      } else {\n        pos = next;\n      }\n      return true\n    }\n\n    if (unit == \"char\" || unit == \"codepoint\") {\n      moveOnce();\n    } else if (unit == \"column\") {\n      moveOnce(true);\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) { break }\n        var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) { type = \"s\"; }\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n          break\n        }\n\n        if (type) { sawType = type; }\n        if (dir > 0 && !moveOnce(!first)) { break }\n      }\n    }\n    var result = skipAtomic(doc, pos, oldPos, origDir, true);\n    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n    return result\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    var target;\n    for (;;) {\n      target = coordsChar(cm, x, y);\n      if (!target.outside) { break }\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n      y += dir * 5;\n    }\n    return target\n  }\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  var ContentEditableInput = function(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.composing = null;\n    this.gracePeriod = false;\n    this.readDOMTimeout = null;\n  };\n\n  ContentEditableInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = input.cm;\n    var div = input.div = display.lineDiv;\n    div.contentEditable = true;\n    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n    function belongsToInput(e) {\n      for (var t = e.target; t; t = t.parentNode) {\n        if (t == div) { return true }\n        if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n      }\n      return false\n    }\n\n    on(div, \"paste\", function (e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n    });\n\n    on(div, \"compositionstart\", function (e) {\n      this$1.composing = {data: e.data, done: false};\n    });\n    on(div, \"compositionupdate\", function (e) {\n      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n    });\n    on(div, \"compositionend\", function (e) {\n      if (this$1.composing) {\n        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n        this$1.composing.done = true;\n      }\n    });\n\n    on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n    on(div, \"input\", function () {\n      if (!this$1.composing) { this$1.readFromDOMSoon(); }\n    });\n\n    function onCopyCut(e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n        if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.operation(function () {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n            cm.replaceSelection(\"\", null, \"cut\");\n          });\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData();\n        var content = lastCopied.text.join(\"\\n\");\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content);\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault();\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      var kludge = hiddenTextarea(), te = kludge.firstChild;\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n      te.value = lastCopied.text.join(\"\\n\");\n      var hadFocus = activeElt();\n      selectInput(te);\n      setTimeout(function () {\n        cm.display.lineSpace.removeChild(kludge);\n        hadFocus.focus();\n        if (hadFocus == div) { input.showPrimarySelection(); }\n      }, 50);\n    }\n    on(div, \"copy\", onCopyCut);\n    on(div, \"cut\", onCopyCut);\n  };\n\n  ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.div.setAttribute('aria-label', label);\n    } else {\n      this.div.removeAttribute('aria-label');\n    }\n  };\n\n  ContentEditableInput.prototype.prepareSelection = function () {\n    var result = prepareSelection(this.cm, false);\n    result.focus = activeElt() == this.div;\n    return result\n  };\n\n  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n    if (!info || !this.cm.display.view.length) { return }\n    if (info.focus || takeFocus) { this.showPrimarySelection(); }\n    this.showMultipleSelections(info);\n  };\n\n  ContentEditableInput.prototype.getSelection = function () {\n    return this.cm.display.wrapper.ownerDocument.getSelection()\n  };\n\n  ContentEditableInput.prototype.showPrimarySelection = function () {\n    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n    var from = prim.from(), to = prim.to();\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      { return }\n\n    var view = cm.display.view;\n    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0};\n    var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n    if (!end) {\n      var measure = view[view.length - 1].measure;\n      var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var old = sel.rangeCount && sel.getRangeAt(0), rng;\n    try { rng = range(start.node, start.offset, end.offset, end.node); }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset);\n        if (!rng.collapsed) {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n      } else {\n        sel.removeAllRanges();\n        sel.addRange(rng);\n      }\n      if (old && sel.anchorNode == null) { sel.addRange(old); }\n      else if (gecko) { this.startGracePeriod(); }\n    }\n    this.rememberSelection();\n  };\n\n  ContentEditableInput.prototype.startGracePeriod = function () {\n      var this$1 = this;\n\n    clearTimeout(this.gracePeriod);\n    this.gracePeriod = setTimeout(function () {\n      this$1.gracePeriod = false;\n      if (this$1.selectionChanged())\n        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n    }, 20);\n  };\n\n  ContentEditableInput.prototype.showMultipleSelections = function (info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n  };\n\n  ContentEditableInput.prototype.rememberSelection = function () {\n    var sel = this.getSelection();\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n  };\n\n  ContentEditableInput.prototype.selectionInEditor = function () {\n    var sel = this.getSelection();\n    if (!sel.rangeCount) { return false }\n    var node = sel.getRangeAt(0).commonAncestorContainer;\n    return contains(this.div, node)\n  };\n\n  ContentEditableInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor() || activeElt() != this.div)\n        { this.showSelection(this.prepareSelection(), true); }\n      this.div.focus();\n    }\n  };\n  ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n  ContentEditableInput.prototype.getField = function () { return this.div };\n\n  ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n  ContentEditableInput.prototype.receivedFocus = function () {\n      var this$1 = this;\n\n    var input = this;\n    if (this.selectionInEditor())\n      { setTimeout(function () { return this$1.pollSelection(); }, 20); }\n    else\n      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection();\n        input.polling.set(input.cm.options.pollInterval, poll);\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll);\n  };\n\n  ContentEditableInput.prototype.selectionChanged = function () {\n    var sel = this.getSelection();\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  };\n\n  ContentEditableInput.prototype.pollSelection = function () {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n    var sel = this.getSelection(), cm = this.cm;\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n      this.blur();\n      this.focus();\n      return\n    }\n    if (this.composing) { return }\n    this.rememberSelection();\n    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (anchor && head) { runInOp(cm, function () {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n    }); }\n  };\n\n  ContentEditableInput.prototype.pollContent = function () {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout);\n      this.readDOMTimeout = null;\n    }\n\n    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n    var from = sel.from(), to = sel.to();\n    if (from.ch == 0 && from.line > cm.firstLine())\n      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      { to = Pos(to.line + 1, 0); }\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n    var fromIndex, fromLine, fromNode;\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line);\n      fromNode = display.view[0].node;\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line);\n      fromNode = display.view[fromIndex - 1].node.nextSibling;\n    }\n    var toIndex = findViewIndex(cm, to.line);\n    var toLine, toNode;\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1;\n      toNode = display.lineDiv.lastChild;\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1;\n      toNode = display.view[toIndex + 1].node.previousSibling;\n    }\n\n    if (!fromNode) { return false }\n    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n      else { break }\n    }\n\n    var cutFront = 0, cutEnd = 0;\n    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      { ++cutFront; }\n    var newBot = lst(newText), oldBot = lst(oldText);\n    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0));\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      { ++cutEnd; }\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--;\n        cutEnd++;\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n    var chFrom = Pos(fromLine, cutFront);\n    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n      return true\n    }\n  };\n\n  ContentEditableInput.prototype.ensurePolled = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.reset = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.forceCompositionEnd = function () {\n    if (!this.composing) { return }\n    clearTimeout(this.readDOMTimeout);\n    this.composing = null;\n    this.updateFromDOM();\n    this.div.blur();\n    this.div.focus();\n  };\n  ContentEditableInput.prototype.readFromDOMSoon = function () {\n      var this$1 = this;\n\n    if (this.readDOMTimeout != null) { return }\n    this.readDOMTimeout = setTimeout(function () {\n      this$1.readDOMTimeout = null;\n      if (this$1.composing) {\n        if (this$1.composing.done) { this$1.composing = null; }\n        else { return }\n      }\n      this$1.updateFromDOM();\n    }, 80);\n  };\n\n  ContentEditableInput.prototype.updateFromDOM = function () {\n      var this$1 = this;\n\n    if (this.cm.isReadOnly() || !this.pollContent())\n      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n  };\n\n  ContentEditableInput.prototype.setUneditable = function (node) {\n    node.contentEditable = \"false\";\n  };\n\n  ContentEditableInput.prototype.onKeyPress = function (e) {\n    if (e.charCode == 0 || this.composing) { return }\n    e.preventDefault();\n    if (!this.cm.isReadOnly())\n      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n  };\n\n  ContentEditableInput.prototype.readOnlyChanged = function (val) {\n    this.div.contentEditable = String(val != \"nocursor\");\n  };\n\n  ContentEditableInput.prototype.onContextMenu = function () {};\n  ContentEditableInput.prototype.resetPosition = function () {};\n\n  ContentEditableInput.prototype.needsContentAttribute = true;\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) { return null }\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line, cm.doc.direction), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result\n  }\n\n  function isInGutter(node) {\n    for (var scan = node; scan; scan = scan.parentNode)\n      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n    return false\n  }\n\n  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n    function close() {\n      if (closing) {\n        text += lineSep;\n        if (extraLinebreak) { text += lineSep; }\n        closing = extraLinebreak = false;\n      }\n    }\n    function addText(str) {\n      if (str) {\n        close();\n        text += str;\n      }\n    }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText) {\n          addText(cmText);\n          return\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range = found[0].find(0)))\n            { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n          return\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n        if (isBlock) { close(); }\n        for (var i = 0; i < node.childNodes.length; i++)\n          { walk(node.childNodes[i]); }\n\n        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n        if (isBlock) { closing = true; }\n      } else if (node.nodeType == 3) {\n        addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) { break }\n      from = from.nextSibling;\n      extraLinebreak = false;\n    }\n    return text\n  }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        { return locateNodeInLineView(lineView, node, offset) }\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad)\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) { offset = textNode.nodeValue.length; }\n    }\n    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map.length; j += 3) {\n          var curNode = map[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map[j] + offset;\n            if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n            return Pos(line, ch)\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) { return badPos(found, bad) }\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        { return badPos(Pos(found.line, found.ch - dist), bad) }\n      else\n        { dist += after.textContent.length; }\n    }\n    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n      else\n        { dist$1 += before.textContent.length; }\n    }\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  var TextareaInput = function(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n  };\n\n  TextareaInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = this.cm;\n    this.createField(display);\n    var te = this.textarea;\n\n    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) { te.style.width = \"0px\"; }\n\n    on(te, \"input\", function () {\n      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n      input.poll();\n    });\n\n    on(te, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n      cm.state.pasteIncoming = +new Date;\n      input.fastPoll();\n    });\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll);\n        } else {\n          input.prevInput = \"\";\n          te.value = ranges.text.join(\"\\n\");\n          selectInput(te);\n        }\n      }\n      if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n    }\n    on(te, \"cut\", prepareCopyCut);\n    on(te, \"copy\", prepareCopyCut);\n\n    on(display.scroller, \"paste\", function (e) {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n      if (!te.dispatchEvent) {\n        cm.state.pasteIncoming = +new Date;\n        input.focus();\n        return\n      }\n\n      // Pass the `paste` event to the textarea so it's handled by its event listener.\n      var event = new Event(\"paste\");\n      event.clipboardData = e.clipboardData;\n      te.dispatchEvent(event);\n    });\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", function (e) {\n      if (!eventInWidget(display, e)) { e_preventDefault(e); }\n    });\n\n    on(te, \"compositionstart\", function () {\n      var start = cm.getCursor(\"from\");\n      if (input.composing) { input.composing.range.clear(); }\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      };\n    });\n    on(te, \"compositionend\", function () {\n      if (input.composing) {\n        input.poll();\n        input.composing.range.clear();\n        input.composing = null;\n      }\n    });\n  };\n\n  TextareaInput.prototype.createField = function (_display) {\n    // Wraps and hides input textarea\n    this.wrapper = hiddenTextarea();\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    this.textarea = this.wrapper.firstChild;\n  };\n\n  TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.textarea.setAttribute('aria-label', label);\n    } else {\n      this.textarea.removeAttribute('aria-label');\n    }\n  };\n\n  TextareaInput.prototype.prepareSelection = function () {\n    // Redraw the selection and/or cursor\n    var cm = this.cm, display = cm.display, doc = cm.doc;\n    var result = prepareSelection(cm);\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result\n  };\n\n  TextareaInput.prototype.showSelection = function (drawn) {\n    var cm = this.cm, display = cm.display;\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\";\n      this.wrapper.style.left = drawn.teLeft + \"px\";\n    }\n  };\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  TextareaInput.prototype.reset = function (typing) {\n    if (this.contextMenuPending || this.composing) { return }\n    var cm = this.cm;\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\";\n      var content = cm.getSelection();\n      this.textarea.value = content;\n      if (cm.state.focused) { selectInput(this.textarea); }\n      if (ie && ie_version >= 9) { this.hasSelection = content; }\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\";\n      if (ie && ie_version >= 9) { this.hasSelection = null; }\n    }\n  };\n\n  TextareaInput.prototype.getField = function () { return this.textarea };\n\n  TextareaInput.prototype.supportsTouch = function () { return false };\n\n  TextareaInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n      try { this.textarea.focus(); }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  };\n\n  TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n  TextareaInput.prototype.resetPosition = function () {\n    this.wrapper.style.top = this.wrapper.style.left = 0;\n  };\n\n  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  TextareaInput.prototype.slowPoll = function () {\n      var this$1 = this;\n\n    if (this.pollingFast) { return }\n    this.polling.set(this.cm.options.pollInterval, function () {\n      this$1.poll();\n      if (this$1.cm.state.focused) { this$1.slowPoll(); }\n    });\n  };\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  TextareaInput.prototype.fastPoll = function () {\n    var missed = false, input = this;\n    input.pollingFast = true;\n    function p() {\n      var changed = input.poll();\n      if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n      else {input.pollingFast = false; input.slowPoll();}\n    }\n    input.polling.set(20, p);\n  };\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  TextareaInput.prototype.poll = function () {\n      var this$1 = this;\n\n    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      { return false }\n\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) { return false }\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset();\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      var first = text.charCodeAt(0);\n      if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n    runInOp(cm, function () {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this$1.composing ? \"*compose\" : null);\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n      else { this$1.prevInput = text; }\n\n      if (this$1.composing) {\n        this$1.composing.range.clear();\n        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"});\n      }\n    });\n    return true\n  };\n\n  TextareaInput.prototype.ensurePolled = function () {\n    if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n  };\n\n  TextareaInput.prototype.onKeyPress = function () {\n    if (ie && ie_version >= 9) { this.hasSelection = null; }\n    this.fastPoll();\n  };\n\n  TextareaInput.prototype.onContextMenu = function (e) {\n    var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n    if (input.contextMenuPending) { input.contextMenuPending(); }\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) { return } // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n    input.wrapper.style.cssText = \"position: static\";\n    te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n      top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n      z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    var oldScrollY;\n    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n    display.input.focus();\n    if (webkit) { window.scrollTo(null, oldScrollY); }\n    display.input.reset();\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n    input.contextMenuPending = rehide;\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = \"\\u200b\" + (selected ? te.value : \"\");\n        te.value = \"\\u21da\"; // Used to catch context-menu undo\n        te.value = extval;\n        input.prevInput = selected ? \"\" : \"\\u200b\";\n        te.selectionStart = 1; te.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      if (input.contextMenuPending != rehide) { return }\n      input.contextMenuPending = false;\n      input.wrapper.style.cssText = oldWrapperCSS;\n      te.style.cssText = oldCSS;\n      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n        var i = 0, poll = function () {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm);\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500);\n          } else {\n            display.selForContextMenu = null;\n            display.input.reset();\n          }\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function () {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  };\n\n  TextareaInput.prototype.readOnlyChanged = function (val) {\n    if (!val) { this.reset(); }\n    this.textarea.disabled = val == \"nocursor\";\n    this.textarea.readOnly = !!val;\n  };\n\n  TextareaInput.prototype.setUneditable = function () {};\n\n  TextareaInput.prototype.needsContentAttribute = false;\n\n  function fromTextArea(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      { options.tabindex = textarea.tabIndex; }\n    if (!options.placeholder && textarea.placeholder)\n      { options.placeholder = textarea.placeholder; }\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n\n    var realSubmit;\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form;\n        realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function () {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function (cm) {\n      cm.save = save;\n      cm.getTextArea = function () { return textarea; };\n      cm.toTextArea = function () {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n            { textarea.form.submit = realSubmit; }\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n      options);\n    return cm\n  }\n\n  function addLegacyProps(CodeMirror) {\n    CodeMirror.off = off;\n    CodeMirror.on = on;\n    CodeMirror.wheelEventPixels = wheelEventPixels;\n    CodeMirror.Doc = Doc;\n    CodeMirror.splitLines = splitLinesAuto;\n    CodeMirror.countColumn = countColumn;\n    CodeMirror.findColumn = findColumn;\n    CodeMirror.isWordChar = isWordCharBasic;\n    CodeMirror.Pass = Pass;\n    CodeMirror.signal = signal;\n    CodeMirror.Line = Line;\n    CodeMirror.changeEnd = changeEnd;\n    CodeMirror.scrollbarModel = scrollbarModel;\n    CodeMirror.Pos = Pos;\n    CodeMirror.cmpPos = cmp;\n    CodeMirror.modes = modes;\n    CodeMirror.mimeModes = mimeModes;\n    CodeMirror.resolveMode = resolveMode;\n    CodeMirror.getMode = getMode;\n    CodeMirror.modeExtensions = modeExtensions;\n    CodeMirror.extendMode = extendMode;\n    CodeMirror.copyState = copyState;\n    CodeMirror.startState = startState;\n    CodeMirror.innerMode = innerMode;\n    CodeMirror.commands = commands;\n    CodeMirror.keyMap = keyMap;\n    CodeMirror.keyName = keyName;\n    CodeMirror.isModifierKey = isModifierKey;\n    CodeMirror.lookupKey = lookupKey;\n    CodeMirror.normalizeKeyMap = normalizeKeyMap;\n    CodeMirror.StringStream = StringStream;\n    CodeMirror.SharedTextMarker = SharedTextMarker;\n    CodeMirror.TextMarker = TextMarker;\n    CodeMirror.LineWidget = LineWidget;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.addClass = addClass;\n    CodeMirror.contains = contains;\n    CodeMirror.rmClass = rmClass;\n    CodeMirror.keyNames = keyNames;\n  }\n\n  // EDITOR CONSTRUCTOR\n\n  defineOptions(CodeMirror);\n\n  addEditorMethods(CodeMirror);\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    { CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments)}\n    })(Doc.prototype[prop]); } }\n\n  eventMixin(Doc);\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name/*, mode, …*/) {\n    if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n    defineMode.apply(this, arguments);\n  };\n\n  CodeMirror.defineMIME = defineMIME;\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function (name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function (name, func) {\n    Doc.prototype[name] = func;\n  };\n\n  CodeMirror.fromTextArea = fromTextArea;\n\n  addLegacyProps(CodeMirror);\n\n  CodeMirror.version = \"5.65.1\";\n\n  return CodeMirror;\n\n})));\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/css.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"css\", function(config, parserConfig) {\n  var inline = parserConfig.inline\n  if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode(\"text/css\");\n\n  var indentUnit = config.indentUnit,\n      tokenHooks = parserConfig.tokenHooks,\n      documentTypes = parserConfig.documentTypes || {},\n      mediaTypes = parserConfig.mediaTypes || {},\n      mediaFeatures = parserConfig.mediaFeatures || {},\n      mediaValueKeywords = parserConfig.mediaValueKeywords || {},\n      propertyKeywords = parserConfig.propertyKeywords || {},\n      nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},\n      fontProperties = parserConfig.fontProperties || {},\n      counterDescriptors = parserConfig.counterDescriptors || {},\n      colorKeywords = parserConfig.colorKeywords || {},\n      valueKeywords = parserConfig.valueKeywords || {},\n      allowNested = parserConfig.allowNested,\n      lineComment = parserConfig.lineComment,\n      supportsAtComponent = parserConfig.supportsAtComponent === true,\n      highlightNonStandardPropertyKeywords = config.highlightNonStandardPropertyKeywords !== false;\n\n  var type, override;\n  function ret(style, tp) { type = tp; return style; }\n\n  // Tokenizers\n\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (tokenHooks[ch]) {\n      var result = tokenHooks[ch](stream, state);\n      if (result !== false) return result;\n    }\n    if (ch == \"@\") {\n      stream.eatWhile(/[\\w\\\\\\-]/);\n      return ret(\"def\", stream.current());\n    } else if (ch == \"=\" || (ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) {\n      return ret(null, \"compare\");\n    } else if (ch == \"\\\"\" || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    } else if (ch == \"#\") {\n      stream.eatWhile(/[\\w\\\\\\-]/);\n      return ret(\"atom\", \"hash\");\n    } else if (ch == \"!\") {\n      stream.match(/^\\s*\\w*/);\n      return ret(\"keyword\", \"important\");\n    } else if (/\\d/.test(ch) || ch == \".\" && stream.eat(/\\d/)) {\n      stream.eatWhile(/[\\w.%]/);\n      return ret(\"number\", \"unit\");\n    } else if (ch === \"-\") {\n      if (/[\\d.]/.test(stream.peek())) {\n        stream.eatWhile(/[\\w.%]/);\n        return ret(\"number\", \"unit\");\n      } else if (stream.match(/^-[\\w\\\\\\-]*/)) {\n        stream.eatWhile(/[\\w\\\\\\-]/);\n        if (stream.match(/^\\s*:/, false))\n          return ret(\"variable-2\", \"variable-definition\");\n        return ret(\"variable-2\", \"variable\");\n      } else if (stream.match(/^\\w+-/)) {\n        return ret(\"meta\", \"meta\");\n      }\n    } else if (/[,+>*\\/]/.test(ch)) {\n      return ret(null, \"select-op\");\n    } else if (ch == \".\" && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {\n      return ret(\"qualifier\", \"qualifier\");\n    } else if (/[:;{}\\[\\]\\(\\)]/.test(ch)) {\n      return ret(null, ch);\n    } else if (stream.match(/^[\\w-.]+(?=\\()/)) {\n      if (/^(url(-prefix)?|domain|regexp)$/i.test(stream.current())) {\n        state.tokenize = tokenParenthesized;\n      }\n      return ret(\"variable callee\", \"variable\");\n    } else if (/[\\w\\\\\\-]/.test(ch)) {\n      stream.eatWhile(/[\\w\\\\\\-]/);\n      return ret(\"property\", \"word\");\n    } else {\n      return ret(null, null);\n    }\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == quote && !escaped) {\n          if (quote == \")\") stream.backUp(1);\n          break;\n        }\n        escaped = !escaped && ch == \"\\\\\";\n      }\n      if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n      return ret(\"string\", \"string\");\n    };\n  }\n\n  function tokenParenthesized(stream, state) {\n    stream.next(); // Must be '('\n    if (!stream.match(/^\\s*[\\\"\\')]/, false))\n      state.tokenize = tokenString(\")\");\n    else\n      state.tokenize = null;\n    return ret(null, \"(\");\n  }\n\n  // Context management\n\n  function Context(type, indent, prev) {\n    this.type = type;\n    this.indent = indent;\n    this.prev = prev;\n  }\n\n  function pushContext(state, stream, type, indent) {\n    state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);\n    return type;\n  }\n\n  function popContext(state) {\n    if (state.context.prev)\n      state.context = state.context.prev;\n    return state.context.type;\n  }\n\n  function pass(type, stream, state) {\n    return states[state.context.type](type, stream, state);\n  }\n  function popAndPass(type, stream, state, n) {\n    for (var i = n || 1; i > 0; i--)\n      state.context = state.context.prev;\n    return pass(type, stream, state);\n  }\n\n  // Parser\n\n  function wordAsValue(stream) {\n    var word = stream.current().toLowerCase();\n    if (valueKeywords.hasOwnProperty(word))\n      override = \"atom\";\n    else if (colorKeywords.hasOwnProperty(word))\n      override = \"keyword\";\n    else\n      override = \"variable\";\n  }\n\n  var states = {};\n\n  states.top = function(type, stream, state) {\n    if (type == \"{\") {\n      return pushContext(state, stream, \"block\");\n    } else if (type == \"}\" && state.context.prev) {\n      return popContext(state);\n    } else if (supportsAtComponent && /@component/i.test(type)) {\n      return pushContext(state, stream, \"atComponentBlock\");\n    } else if (/^@(-moz-)?document$/i.test(type)) {\n      return pushContext(state, stream, \"documentTypes\");\n    } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {\n      return pushContext(state, stream, \"atBlock\");\n    } else if (/^@(font-face|counter-style)/i.test(type)) {\n      state.stateArg = type;\n      return \"restricted_atBlock_before\";\n    } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {\n      return \"keyframes\";\n    } else if (type && type.charAt(0) == \"@\") {\n      return pushContext(state, stream, \"at\");\n    } else if (type == \"hash\") {\n      override = \"builtin\";\n    } else if (type == \"word\") {\n      override = \"tag\";\n    } else if (type == \"variable-definition\") {\n      return \"maybeprop\";\n    } else if (type == \"interpolation\") {\n      return pushContext(state, stream, \"interpolation\");\n    } else if (type == \":\") {\n      return \"pseudo\";\n    } else if (allowNested && type == \"(\") {\n      return pushContext(state, stream, \"parens\");\n    }\n    return state.context.type;\n  };\n\n  states.block = function(type, stream, state) {\n    if (type == \"word\") {\n      var word = stream.current().toLowerCase();\n      if (propertyKeywords.hasOwnProperty(word)) {\n        override = \"property\";\n        return \"maybeprop\";\n      } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {\n        override = highlightNonStandardPropertyKeywords ? \"string-2\" : \"property\";\n        return \"maybeprop\";\n      } else if (allowNested) {\n        override = stream.match(/^\\s*:(?:\\s|$)/, false) ? \"property\" : \"tag\";\n        return \"block\";\n      } else {\n        override += \" error\";\n        return \"maybeprop\";\n      }\n    } else if (type == \"meta\") {\n      return \"block\";\n    } else if (!allowNested && (type == \"hash\" || type == \"qualifier\")) {\n      override = \"error\";\n      return \"block\";\n    } else {\n      return states.top(type, stream, state);\n    }\n  };\n\n  states.maybeprop = function(type, stream, state) {\n    if (type == \":\") return pushContext(state, stream, \"prop\");\n    return pass(type, stream, state);\n  };\n\n  states.prop = function(type, stream, state) {\n    if (type == \";\") return popContext(state);\n    if (type == \"{\" && allowNested) return pushContext(state, stream, \"propBlock\");\n    if (type == \"}\" || type == \"{\") return popAndPass(type, stream, state);\n    if (type == \"(\") return pushContext(state, stream, \"parens\");\n\n    if (type == \"hash\" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {\n      override += \" error\";\n    } else if (type == \"word\") {\n      wordAsValue(stream);\n    } else if (type == \"interpolation\") {\n      return pushContext(state, stream, \"interpolation\");\n    }\n    return \"prop\";\n  };\n\n  states.propBlock = function(type, _stream, state) {\n    if (type == \"}\") return popContext(state);\n    if (type == \"word\") { override = \"property\"; return \"maybeprop\"; }\n    return state.context.type;\n  };\n\n  states.parens = function(type, stream, state) {\n    if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n    if (type == \")\") return popContext(state);\n    if (type == \"(\") return pushContext(state, stream, \"parens\");\n    if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n    if (type == \"word\") wordAsValue(stream);\n    return \"parens\";\n  };\n\n  states.pseudo = function(type, stream, state) {\n    if (type == \"meta\") return \"pseudo\";\n\n    if (type == \"word\") {\n      override = \"variable-3\";\n      return state.context.type;\n    }\n    return pass(type, stream, state);\n  };\n\n  states.documentTypes = function(type, stream, state) {\n    if (type == \"word\" && documentTypes.hasOwnProperty(stream.current())) {\n      override = \"tag\";\n      return state.context.type;\n    } else {\n      return states.atBlock(type, stream, state);\n    }\n  };\n\n  states.atBlock = function(type, stream, state) {\n    if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n    if (type == \"}\" || type == \";\") return popAndPass(type, stream, state);\n    if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\");\n\n    if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n\n    if (type == \"word\") {\n      var word = stream.current().toLowerCase();\n      if (word == \"only\" || word == \"not\" || word == \"and\" || word == \"or\")\n        override = \"keyword\";\n      else if (mediaTypes.hasOwnProperty(word))\n        override = \"attribute\";\n      else if (mediaFeatures.hasOwnProperty(word))\n        override = \"property\";\n      else if (mediaValueKeywords.hasOwnProperty(word))\n        override = \"keyword\";\n      else if (propertyKeywords.hasOwnProperty(word))\n        override = \"property\";\n      else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n        override = highlightNonStandardPropertyKeywords ? \"string-2\" : \"property\";\n      else if (valueKeywords.hasOwnProperty(word))\n        override = \"atom\";\n      else if (colorKeywords.hasOwnProperty(word))\n        override = \"keyword\";\n      else\n        override = \"error\";\n    }\n    return state.context.type;\n  };\n\n  states.atComponentBlock = function(type, stream, state) {\n    if (type == \"}\")\n      return popAndPass(type, stream, state);\n    if (type == \"{\")\n      return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\", false);\n    if (type == \"word\")\n      override = \"error\";\n    return state.context.type;\n  };\n\n  states.atBlock_parens = function(type, stream, state) {\n    if (type == \")\") return popContext(state);\n    if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state, 2);\n    return states.atBlock(type, stream, state);\n  };\n\n  states.restricted_atBlock_before = function(type, stream, state) {\n    if (type == \"{\")\n      return pushContext(state, stream, \"restricted_atBlock\");\n    if (type == \"word\" && state.stateArg == \"@counter-style\") {\n      override = \"variable\";\n      return \"restricted_atBlock_before\";\n    }\n    return pass(type, stream, state);\n  };\n\n  states.restricted_atBlock = function(type, stream, state) {\n    if (type == \"}\") {\n      state.stateArg = null;\n      return popContext(state);\n    }\n    if (type == \"word\") {\n      if ((state.stateArg == \"@font-face\" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||\n          (state.stateArg == \"@counter-style\" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))\n        override = \"error\";\n      else\n        override = \"property\";\n      return \"maybeprop\";\n    }\n    return \"restricted_atBlock\";\n  };\n\n  states.keyframes = function(type, stream, state) {\n    if (type == \"word\") { override = \"variable\"; return \"keyframes\"; }\n    if (type == \"{\") return pushContext(state, stream, \"top\");\n    return pass(type, stream, state);\n  };\n\n  states.at = function(type, stream, state) {\n    if (type == \";\") return popContext(state);\n    if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n    if (type == \"word\") override = \"tag\";\n    else if (type == \"hash\") override = \"builtin\";\n    return \"at\";\n  };\n\n  states.interpolation = function(type, stream, state) {\n    if (type == \"}\") return popContext(state);\n    if (type == \"{\" || type == \";\") return popAndPass(type, stream, state);\n    if (type == \"word\") override = \"variable\";\n    else if (type != \"variable\" && type != \"(\" && type != \")\") override = \"error\";\n    return \"interpolation\";\n  };\n\n  return {\n    startState: function(base) {\n      return {tokenize: null,\n              state: inline ? \"block\" : \"top\",\n              stateArg: null,\n              context: new Context(inline ? \"block\" : \"top\", base || 0, null)};\n    },\n\n    token: function(stream, state) {\n      if (!state.tokenize && stream.eatSpace()) return null;\n      var style = (state.tokenize || tokenBase)(stream, state);\n      if (style && typeof style == \"object\") {\n        type = style[1];\n        style = style[0];\n      }\n      override = style;\n      if (type != \"comment\")\n        state.state = states[state.state](type, stream, state);\n      return override;\n    },\n\n    indent: function(state, textAfter) {\n      var cx = state.context, ch = textAfter && textAfter.charAt(0);\n      var indent = cx.indent;\n      if (cx.type == \"prop\" && (ch == \"}\" || ch == \")\")) cx = cx.prev;\n      if (cx.prev) {\n        if (ch == \"}\" && (cx.type == \"block\" || cx.type == \"top\" ||\n                          cx.type == \"interpolation\" || cx.type == \"restricted_atBlock\")) {\n          // Resume indentation from parent context.\n          cx = cx.prev;\n          indent = cx.indent;\n        } else if (ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n            ch == \"{\" && (cx.type == \"at\" || cx.type == \"atBlock\")) {\n          // Dedent relative to current context.\n          indent = Math.max(0, cx.indent - indentUnit);\n        }\n      }\n      return indent;\n    },\n\n    electricChars: \"}\",\n    blockCommentStart: \"/*\",\n    blockCommentEnd: \"*/\",\n    blockCommentContinue: \" * \",\n    lineComment: lineComment,\n    fold: \"brace\"\n  };\n});\n\n  function keySet(array) {\n    var keys = {};\n    for (var i = 0; i < array.length; ++i) {\n      keys[array[i].toLowerCase()] = true;\n    }\n    return keys;\n  }\n\n  var documentTypes_ = [\n    \"domain\", \"regexp\", \"url\", \"url-prefix\"\n  ], documentTypes = keySet(documentTypes_);\n\n  var mediaTypes_ = [\n    \"all\", \"aural\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\",\n    \"tty\", \"tv\", \"embossed\"\n  ], mediaTypes = keySet(mediaTypes_);\n\n  var mediaFeatures_ = [\n    \"width\", \"min-width\", \"max-width\", \"height\", \"min-height\", \"max-height\",\n    \"device-width\", \"min-device-width\", \"max-device-width\", \"device-height\",\n    \"min-device-height\", \"max-device-height\", \"aspect-ratio\",\n    \"min-aspect-ratio\", \"max-aspect-ratio\", \"device-aspect-ratio\",\n    \"min-device-aspect-ratio\", \"max-device-aspect-ratio\", \"color\", \"min-color\",\n    \"max-color\", \"color-index\", \"min-color-index\", \"max-color-index\",\n    \"monochrome\", \"min-monochrome\", \"max-monochrome\", \"resolution\",\n    \"min-resolution\", \"max-resolution\", \"scan\", \"grid\", \"orientation\",\n    \"device-pixel-ratio\", \"min-device-pixel-ratio\", \"max-device-pixel-ratio\",\n    \"pointer\", \"any-pointer\", \"hover\", \"any-hover\", \"prefers-color-scheme\",\n    \"dynamic-range\", \"video-dynamic-range\"\n  ], mediaFeatures = keySet(mediaFeatures_);\n\n  var mediaValueKeywords_ = [\n    \"landscape\", \"portrait\", \"none\", \"coarse\", \"fine\", \"on-demand\", \"hover\",\n    \"interlace\", \"progressive\",\n    \"dark\", \"light\",\n    \"standard\", \"high\"\n  ], mediaValueKeywords = keySet(mediaValueKeywords_);\n\n  var propertyKeywords_ = [\n    \"align-content\", \"align-items\", \"align-self\", \"alignment-adjust\",\n    \"alignment-baseline\", \"all\", \"anchor-point\", \"animation\", \"animation-delay\",\n    \"animation-direction\", \"animation-duration\", \"animation-fill-mode\",\n    \"animation-iteration-count\", \"animation-name\", \"animation-play-state\",\n    \"animation-timing-function\", \"appearance\", \"azimuth\", \"backdrop-filter\",\n    \"backface-visibility\", \"background\", \"background-attachment\",\n    \"background-blend-mode\", \"background-clip\", \"background-color\",\n    \"background-image\", \"background-origin\", \"background-position\",\n    \"background-position-x\", \"background-position-y\", \"background-repeat\",\n    \"background-size\", \"baseline-shift\", \"binding\", \"bleed\", \"block-size\",\n    \"bookmark-label\", \"bookmark-level\", \"bookmark-state\", \"bookmark-target\",\n    \"border\", \"border-bottom\", \"border-bottom-color\", \"border-bottom-left-radius\",\n    \"border-bottom-right-radius\", \"border-bottom-style\", \"border-bottom-width\",\n    \"border-collapse\", \"border-color\", \"border-image\", \"border-image-outset\",\n    \"border-image-repeat\", \"border-image-slice\", \"border-image-source\",\n    \"border-image-width\", \"border-left\", \"border-left-color\", \"border-left-style\",\n    \"border-left-width\", \"border-radius\", \"border-right\", \"border-right-color\",\n    \"border-right-style\", \"border-right-width\", \"border-spacing\", \"border-style\",\n    \"border-top\", \"border-top-color\", \"border-top-left-radius\",\n    \"border-top-right-radius\", \"border-top-style\", \"border-top-width\",\n    \"border-width\", \"bottom\", \"box-decoration-break\", \"box-shadow\", \"box-sizing\",\n    \"break-after\", \"break-before\", \"break-inside\", \"caption-side\", \"caret-color\",\n    \"clear\", \"clip\", \"color\", \"color-profile\", \"column-count\", \"column-fill\",\n    \"column-gap\", \"column-rule\", \"column-rule-color\", \"column-rule-style\",\n    \"column-rule-width\", \"column-span\", \"column-width\", \"columns\", \"contain\",\n    \"content\", \"counter-increment\", \"counter-reset\", \"crop\", \"cue\", \"cue-after\",\n    \"cue-before\", \"cursor\", \"direction\", \"display\", \"dominant-baseline\",\n    \"drop-initial-after-adjust\", \"drop-initial-after-align\",\n    \"drop-initial-before-adjust\", \"drop-initial-before-align\", \"drop-initial-size\",\n    \"drop-initial-value\", \"elevation\", \"empty-cells\", \"fit\", \"fit-content\", \"fit-position\",\n    \"flex\", \"flex-basis\", \"flex-direction\", \"flex-flow\", \"flex-grow\",\n    \"flex-shrink\", \"flex-wrap\", \"float\", \"float-offset\", \"flow-from\", \"flow-into\",\n    \"font\", \"font-family\", \"font-feature-settings\", \"font-kerning\",\n    \"font-language-override\", \"font-optical-sizing\", \"font-size\",\n    \"font-size-adjust\", \"font-stretch\", \"font-style\", \"font-synthesis\",\n    \"font-variant\", \"font-variant-alternates\", \"font-variant-caps\",\n    \"font-variant-east-asian\", \"font-variant-ligatures\", \"font-variant-numeric\",\n    \"font-variant-position\", \"font-variation-settings\", \"font-weight\", \"gap\",\n    \"grid\", \"grid-area\", \"grid-auto-columns\", \"grid-auto-flow\", \"grid-auto-rows\",\n    \"grid-column\", \"grid-column-end\", \"grid-column-gap\", \"grid-column-start\",\n    \"grid-gap\", \"grid-row\", \"grid-row-end\", \"grid-row-gap\", \"grid-row-start\",\n    \"grid-template\", \"grid-template-areas\", \"grid-template-columns\",\n    \"grid-template-rows\", \"hanging-punctuation\", \"height\", \"hyphens\", \"icon\",\n    \"image-orientation\", \"image-rendering\", \"image-resolution\", \"inline-box-align\",\n    \"inset\", \"inset-block\", \"inset-block-end\", \"inset-block-start\", \"inset-inline\",\n    \"inset-inline-end\", \"inset-inline-start\", \"isolation\", \"justify-content\",\n    \"justify-items\", \"justify-self\", \"left\", \"letter-spacing\", \"line-break\",\n    \"line-height\", \"line-height-step\", \"line-stacking\", \"line-stacking-ruby\",\n    \"line-stacking-shift\", \"line-stacking-strategy\", \"list-style\",\n    \"list-style-image\", \"list-style-position\", \"list-style-type\", \"margin\",\n    \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\", \"marks\",\n    \"marquee-direction\", \"marquee-loop\", \"marquee-play-count\", \"marquee-speed\",\n    \"marquee-style\", \"mask-clip\", \"mask-composite\", \"mask-image\", \"mask-mode\",\n    \"mask-origin\", \"mask-position\", \"mask-repeat\", \"mask-size\",\"mask-type\",\n    \"max-block-size\", \"max-height\", \"max-inline-size\",\n    \"max-width\", \"min-block-size\", \"min-height\", \"min-inline-size\", \"min-width\",\n    \"mix-blend-mode\", \"move-to\", \"nav-down\", \"nav-index\", \"nav-left\", \"nav-right\",\n    \"nav-up\", \"object-fit\", \"object-position\", \"offset\", \"offset-anchor\",\n    \"offset-distance\", \"offset-path\", \"offset-position\", \"offset-rotate\",\n    \"opacity\", \"order\", \"orphans\", \"outline\", \"outline-color\", \"outline-offset\",\n    \"outline-style\", \"outline-width\", \"overflow\", \"overflow-style\",\n    \"overflow-wrap\", \"overflow-x\", \"overflow-y\", \"padding\", \"padding-bottom\",\n    \"padding-left\", \"padding-right\", \"padding-top\", \"page\", \"page-break-after\",\n    \"page-break-before\", \"page-break-inside\", \"page-policy\", \"pause\",\n    \"pause-after\", \"pause-before\", \"perspective\", \"perspective-origin\", \"pitch\",\n    \"pitch-range\", \"place-content\", \"place-items\", \"place-self\", \"play-during\",\n    \"position\", \"presentation-level\", \"punctuation-trim\", \"quotes\",\n    \"region-break-after\", \"region-break-before\", \"region-break-inside\",\n    \"region-fragment\", \"rendering-intent\", \"resize\", \"rest\", \"rest-after\",\n    \"rest-before\", \"richness\", \"right\", \"rotate\", \"rotation\", \"rotation-point\",\n    \"row-gap\", \"ruby-align\", \"ruby-overhang\", \"ruby-position\", \"ruby-span\",\n    \"scale\", \"scroll-behavior\", \"scroll-margin\", \"scroll-margin-block\",\n    \"scroll-margin-block-end\", \"scroll-margin-block-start\", \"scroll-margin-bottom\",\n    \"scroll-margin-inline\", \"scroll-margin-inline-end\",\n    \"scroll-margin-inline-start\", \"scroll-margin-left\", \"scroll-margin-right\",\n    \"scroll-margin-top\", \"scroll-padding\", \"scroll-padding-block\",\n    \"scroll-padding-block-end\", \"scroll-padding-block-start\",\n    \"scroll-padding-bottom\", \"scroll-padding-inline\", \"scroll-padding-inline-end\",\n    \"scroll-padding-inline-start\", \"scroll-padding-left\", \"scroll-padding-right\",\n    \"scroll-padding-top\", \"scroll-snap-align\", \"scroll-snap-type\",\n    \"shape-image-threshold\", \"shape-inside\", \"shape-margin\", \"shape-outside\",\n    \"size\", \"speak\", \"speak-as\", \"speak-header\", \"speak-numeral\",\n    \"speak-punctuation\", \"speech-rate\", \"stress\", \"string-set\", \"tab-size\",\n    \"table-layout\", \"target\", \"target-name\", \"target-new\", \"target-position\",\n    \"text-align\", \"text-align-last\", \"text-combine-upright\", \"text-decoration\",\n    \"text-decoration-color\", \"text-decoration-line\", \"text-decoration-skip\",\n    \"text-decoration-skip-ink\", \"text-decoration-style\", \"text-emphasis\",\n    \"text-emphasis-color\", \"text-emphasis-position\", \"text-emphasis-style\",\n    \"text-height\", \"text-indent\", \"text-justify\", \"text-orientation\",\n    \"text-outline\", \"text-overflow\", \"text-rendering\", \"text-shadow\",\n    \"text-size-adjust\", \"text-space-collapse\", \"text-transform\",\n    \"text-underline-position\", \"text-wrap\", \"top\", \"touch-action\", \"transform\", \"transform-origin\",\n    \"transform-style\", \"transition\", \"transition-delay\", \"transition-duration\",\n    \"transition-property\", \"transition-timing-function\", \"translate\",\n    \"unicode-bidi\", \"user-select\", \"vertical-align\", \"visibility\", \"voice-balance\",\n    \"voice-duration\", \"voice-family\", \"voice-pitch\", \"voice-range\", \"voice-rate\",\n    \"voice-stress\", \"voice-volume\", \"volume\", \"white-space\", \"widows\", \"width\",\n    \"will-change\", \"word-break\", \"word-spacing\", \"word-wrap\", \"writing-mode\", \"z-index\",\n    // SVG-specific\n    \"clip-path\", \"clip-rule\", \"mask\", \"enable-background\", \"filter\", \"flood-color\",\n    \"flood-opacity\", \"lighting-color\", \"stop-color\", \"stop-opacity\", \"pointer-events\",\n    \"color-interpolation\", \"color-interpolation-filters\",\n    \"color-rendering\", \"fill\", \"fill-opacity\", \"fill-rule\", \"image-rendering\",\n    \"marker\", \"marker-end\", \"marker-mid\", \"marker-start\", \"paint-order\", \"shape-rendering\", \"stroke\",\n    \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\",\n    \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"text-rendering\",\n    \"baseline-shift\", \"dominant-baseline\", \"glyph-orientation-horizontal\",\n    \"glyph-orientation-vertical\", \"text-anchor\", \"writing-mode\",\n  ], propertyKeywords = keySet(propertyKeywords_);\n\n  var nonStandardPropertyKeywords_ = [\n    \"accent-color\", \"aspect-ratio\", \"border-block\", \"border-block-color\", \"border-block-end\",\n    \"border-block-end-color\", \"border-block-end-style\", \"border-block-end-width\",\n    \"border-block-start\", \"border-block-start-color\", \"border-block-start-style\",\n    \"border-block-start-width\", \"border-block-style\", \"border-block-width\",\n    \"border-inline\", \"border-inline-color\", \"border-inline-end\",\n    \"border-inline-end-color\", \"border-inline-end-style\",\n    \"border-inline-end-width\", \"border-inline-start\", \"border-inline-start-color\",\n    \"border-inline-start-style\", \"border-inline-start-width\",\n    \"border-inline-style\", \"border-inline-width\", \"content-visibility\", \"margin-block\",\n    \"margin-block-end\", \"margin-block-start\", \"margin-inline\", \"margin-inline-end\",\n    \"margin-inline-start\", \"overflow-anchor\", \"overscroll-behavior\", \"padding-block\", \"padding-block-end\",\n    \"padding-block-start\", \"padding-inline\", \"padding-inline-end\",\n    \"padding-inline-start\", \"scroll-snap-stop\", \"scrollbar-3d-light-color\",\n    \"scrollbar-arrow-color\", \"scrollbar-base-color\", \"scrollbar-dark-shadow-color\",\n    \"scrollbar-face-color\", \"scrollbar-highlight-color\", \"scrollbar-shadow-color\",\n    \"scrollbar-track-color\", \"searchfield-cancel-button\", \"searchfield-decoration\",\n    \"searchfield-results-button\", \"searchfield-results-decoration\", \"shape-inside\", \"zoom\"\n  ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);\n\n  var fontProperties_ = [\n    \"font-display\", \"font-family\", \"src\", \"unicode-range\", \"font-variant\",\n     \"font-feature-settings\", \"font-stretch\", \"font-weight\", \"font-style\"\n  ], fontProperties = keySet(fontProperties_);\n\n  var counterDescriptors_ = [\n    \"additive-symbols\", \"fallback\", \"negative\", \"pad\", \"prefix\", \"range\",\n    \"speak-as\", \"suffix\", \"symbols\", \"system\"\n  ], counterDescriptors = keySet(counterDescriptors_);\n\n  var colorKeywords_ = [\n    \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n    \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n    \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n    \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n    \"darkgray\", \"darkgreen\", \"darkgrey\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n    \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n    \"darkslateblue\", \"darkslategray\", \"darkslategrey\", \"darkturquoise\", \"darkviolet\",\n    \"deeppink\", \"deepskyblue\", \"dimgray\", \"dimgrey\", \"dodgerblue\", \"firebrick\",\n    \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n    \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n    \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n    \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n    \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightgrey\", \"lightpink\",\n    \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\", \"lightslategrey\",\n    \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n    \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n    \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n    \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n    \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n    \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n    \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n    \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n    \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n    \"slateblue\", \"slategray\", \"slategrey\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n    \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n    \"whitesmoke\", \"yellow\", \"yellowgreen\"\n  ], colorKeywords = keySet(colorKeywords_);\n\n  var valueKeywords_ = [\n    \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"afar\",\n    \"after-white-space\", \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\",\n    \"always\", \"amharic\", \"amharic-abegede\", \"antialiased\", \"appworkspace\",\n    \"arabic-indic\", \"armenian\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\", \"avoid-page\",\n    \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\", \"bidi-override\", \"binary\",\n    \"bengali\", \"blink\", \"block\", \"block-axis\", \"blur\", \"bold\", \"bolder\", \"border\", \"border-box\",\n    \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"brightness\", \"bullets\", \"button\", \"button-bevel\",\n    \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"cambodian\",\n    \"capitalize\", \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\",\n    \"cell\", \"center\", \"checkbox\", \"circle\", \"cjk-decimal\", \"cjk-earthly-branch\",\n    \"cjk-heavenly-stem\", \"cjk-ideographic\", \"clear\", \"clip\", \"close-quote\",\n    \"col-resize\", \"collapse\", \"color\", \"color-burn\", \"color-dodge\", \"column\", \"column-reverse\",\n    \"compact\", \"condensed\", \"conic-gradient\", \"contain\", \"content\", \"contents\",\n    \"content-box\", \"context-menu\", \"continuous\", \"contrast\", \"copy\", \"counter\", \"counters\", \"cover\", \"crop\",\n    \"cross\", \"crosshair\", \"cubic-bezier\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n    \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\",\n    \"destination-in\", \"destination-out\", \"destination-over\", \"devanagari\", \"difference\",\n    \"disc\", \"discard\", \"disclosure-closed\", \"disclosure-open\", \"document\",\n    \"dot-dash\", \"dot-dot-dash\",\n    \"dotted\", \"double\", \"down\", \"drop-shadow\", \"e-resize\", \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\",\n    \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\", \"ethiopic\", \"ethiopic-abegede\",\n    \"ethiopic-abegede-am-et\", \"ethiopic-abegede-gez\", \"ethiopic-abegede-ti-er\",\n    \"ethiopic-abegede-ti-et\", \"ethiopic-halehame-aa-er\",\n    \"ethiopic-halehame-aa-et\", \"ethiopic-halehame-am-et\",\n    \"ethiopic-halehame-gez\", \"ethiopic-halehame-om-et\",\n    \"ethiopic-halehame-sid-et\", \"ethiopic-halehame-so-et\",\n    \"ethiopic-halehame-ti-er\", \"ethiopic-halehame-ti-et\", \"ethiopic-halehame-tig\",\n    \"ethiopic-numeric\", \"ew-resize\", \"exclusion\", \"expanded\", \"extends\", \"extra-condensed\",\n    \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\", \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\",\n    \"forwards\", \"from\", \"geometricPrecision\", \"georgian\", \"grayscale\", \"graytext\", \"grid\", \"groove\",\n    \"gujarati\", \"gurmukhi\", \"hand\", \"hangul\", \"hangul-consonant\", \"hard-light\", \"hebrew\",\n    \"help\", \"hidden\", \"hide\", \"higher\", \"highlight\", \"highlighttext\",\n    \"hiragana\", \"hiragana-iroha\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"hue-rotate\", \"icon\", \"ignore\",\n    \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\",\n    \"infobackground\", \"infotext\", \"inherit\", \"initial\", \"inline\", \"inline-axis\",\n    \"inline-block\", \"inline-flex\", \"inline-grid\", \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\",\n    \"italic\", \"japanese-formal\", \"japanese-informal\", \"justify\", \"kannada\",\n    \"katakana\", \"katakana-iroha\", \"keep-all\", \"khmer\",\n    \"korean-hangul-formal\", \"korean-hanja-formal\", \"korean-hanja-informal\",\n    \"landscape\", \"lao\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\",\n    \"line-through\", \"linear\", \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\",\n    \"local\", \"logical\", \"loud\", \"lower\", \"lower-alpha\", \"lower-armenian\",\n    \"lower-greek\", \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\",\n    \"lower-roman\", \"lowercase\", \"ltr\", \"luminosity\", \"malayalam\", \"manipulation\", \"match\", \"matrix\", \"matrix3d\",\n    \"media-controls-background\", \"media-current-time-display\",\n    \"media-fullscreen-button\", \"media-mute-button\", \"media-play-button\",\n    \"media-return-to-realtime-button\", \"media-rewind-button\",\n    \"media-seek-back-button\", \"media-seek-forward-button\", \"media-slider\",\n    \"media-sliderthumb\", \"media-time-remaining-display\", \"media-volume-slider\",\n    \"media-volume-slider-container\", \"media-volume-sliderthumb\", \"medium\",\n    \"menu\", \"menulist\", \"menulist-button\", \"menulist-text\",\n    \"menulist-textfield\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n    \"mix\", \"mongolian\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"myanmar\", \"n-resize\",\n    \"narrower\", \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\",\n    \"no-open-quote\", \"no-repeat\", \"none\", \"normal\", \"not-allowed\", \"nowrap\",\n    \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\", \"oblique\", \"octal\", \"opacity\", \"open-quote\",\n    \"optimizeLegibility\", \"optimizeSpeed\", \"oriya\", \"oromo\", \"outset\",\n    \"outside\", \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\",\n    \"painted\", \"page\", \"paused\", \"persian\", \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\",\n    \"pointer\", \"polygon\", \"portrait\", \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\",\n    \"progress\", \"push-button\", \"radial-gradient\", \"radio\", \"read-only\",\n    \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\",\n    \"relative\", \"repeat\", \"repeating-linear-gradient\", \"repeating-radial-gradient\",\n    \"repeating-conic-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n    \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\",\n    \"rotateZ\", \"round\", \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\",\n    \"s-resize\", \"sans-serif\", \"saturate\", \"saturation\", \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\",\n    \"scroll\", \"scrollbar\", \"scroll-position\", \"se-resize\", \"searchfield\",\n    \"searchfield-cancel-button\", \"searchfield-decoration\",\n    \"searchfield-results-button\", \"searchfield-results-decoration\", \"self-start\", \"self-end\",\n    \"semi-condensed\", \"semi-expanded\", \"separate\", \"sepia\", \"serif\", \"show\", \"sidama\",\n    \"simp-chinese-formal\", \"simp-chinese-informal\", \"single\",\n    \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n    \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\",\n    \"small\", \"small-caps\", \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"somali\",\n    \"source-atop\", \"source-in\", \"source-out\", \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\",\n    \"square-button\", \"start\", \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\",\n    \"subpixel-antialiased\", \"svg_masks\", \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\",\n    \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\",\n    \"table-footer-group\", \"table-header-group\", \"table-row\", \"table-row-group\",\n    \"tamil\",\n    \"telugu\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thai\",\n    \"thick\", \"thin\", \"threeddarkshadow\", \"threedface\", \"threedhighlight\",\n    \"threedlightshadow\", \"threedshadow\", \"tibetan\", \"tigre\", \"tigrinya-er\",\n    \"tigrinya-er-abegede\", \"tigrinya-et\", \"tigrinya-et-abegede\", \"to\", \"top\",\n    \"trad-chinese-formal\", \"trad-chinese-informal\", \"transform\",\n    \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\",\n    \"transparent\", \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\",\n    \"upper-alpha\", \"upper-armenian\", \"upper-greek\", \"upper-hexadecimal\",\n    \"upper-latin\", \"upper-norwegian\", \"upper-roman\", \"uppercase\", \"urdu\", \"url\",\n    \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\", \"visiblePainted\",\n    \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\",\n    \"window\", \"windowframe\", \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\",\n    \"xx-large\", \"xx-small\"\n  ], valueKeywords = keySet(valueKeywords_);\n\n  var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)\n    .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)\n    .concat(valueKeywords_);\n  CodeMirror.registerHelper(\"hintWords\", \"css\", allWords);\n\n  function tokenCComment(stream, state) {\n    var maybeEnd = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (maybeEnd && ch == \"/\") {\n        state.tokenize = null;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return [\"comment\", \"comment\"];\n  }\n\n  CodeMirror.defineMIME(\"text/css\", {\n    documentTypes: documentTypes,\n    mediaTypes: mediaTypes,\n    mediaFeatures: mediaFeatures,\n    mediaValueKeywords: mediaValueKeywords,\n    propertyKeywords: propertyKeywords,\n    nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n    fontProperties: fontProperties,\n    counterDescriptors: counterDescriptors,\n    colorKeywords: colorKeywords,\n    valueKeywords: valueKeywords,\n    tokenHooks: {\n      \"/\": function(stream, state) {\n        if (!stream.eat(\"*\")) return false;\n        state.tokenize = tokenCComment;\n        return tokenCComment(stream, state);\n      }\n    },\n    name: \"css\"\n  });\n\n  CodeMirror.defineMIME(\"text/x-scss\", {\n    mediaTypes: mediaTypes,\n    mediaFeatures: mediaFeatures,\n    mediaValueKeywords: mediaValueKeywords,\n    propertyKeywords: propertyKeywords,\n    nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n    colorKeywords: colorKeywords,\n    valueKeywords: valueKeywords,\n    fontProperties: fontProperties,\n    allowNested: true,\n    lineComment: \"//\",\n    tokenHooks: {\n      \"/\": function(stream, state) {\n        if (stream.eat(\"/\")) {\n          stream.skipToEnd();\n          return [\"comment\", \"comment\"];\n        } else if (stream.eat(\"*\")) {\n          state.tokenize = tokenCComment;\n          return tokenCComment(stream, state);\n        } else {\n          return [\"operator\", \"operator\"];\n        }\n      },\n      \":\": function(stream) {\n        if (stream.match(/^\\s*\\{/, false))\n          return [null, null]\n        return false;\n      },\n      \"$\": function(stream) {\n        stream.match(/^[\\w-]+/);\n        if (stream.match(/^\\s*:/, false))\n          return [\"variable-2\", \"variable-definition\"];\n        return [\"variable-2\", \"variable\"];\n      },\n      \"#\": function(stream) {\n        if (!stream.eat(\"{\")) return false;\n        return [null, \"interpolation\"];\n      }\n    },\n    name: \"css\",\n    helperType: \"scss\"\n  });\n\n  CodeMirror.defineMIME(\"text/x-less\", {\n    mediaTypes: mediaTypes,\n    mediaFeatures: mediaFeatures,\n    mediaValueKeywords: mediaValueKeywords,\n    propertyKeywords: propertyKeywords,\n    nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n    colorKeywords: colorKeywords,\n    valueKeywords: valueKeywords,\n    fontProperties: fontProperties,\n    allowNested: true,\n    lineComment: \"//\",\n    tokenHooks: {\n      \"/\": function(stream, state) {\n        if (stream.eat(\"/\")) {\n          stream.skipToEnd();\n          return [\"comment\", \"comment\"];\n        } else if (stream.eat(\"*\")) {\n          state.tokenize = tokenCComment;\n          return tokenCComment(stream, state);\n        } else {\n          return [\"operator\", \"operator\"];\n        }\n      },\n      \"@\": function(stream) {\n        if (stream.eat(\"{\")) return [null, \"interpolation\"];\n        if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i, false)) return false;\n        stream.eatWhile(/[\\w\\\\\\-]/);\n        if (stream.match(/^\\s*:/, false))\n          return [\"variable-2\", \"variable-definition\"];\n        return [\"variable-2\", \"variable\"];\n      },\n      \"&\": function() {\n        return [\"atom\", \"atom\"];\n      }\n    },\n    name: \"css\",\n    helperType: \"less\"\n  });\n\n  CodeMirror.defineMIME(\"text/x-gss\", {\n    documentTypes: documentTypes,\n    mediaTypes: mediaTypes,\n    mediaFeatures: mediaFeatures,\n    propertyKeywords: propertyKeywords,\n    nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n    fontProperties: fontProperties,\n    counterDescriptors: counterDescriptors,\n    colorKeywords: colorKeywords,\n    valueKeywords: valueKeywords,\n    supportsAtComponent: true,\n    tokenHooks: {\n      \"/\": function(stream, state) {\n        if (!stream.eat(\"*\")) return false;\n        state.tokenize = tokenCComment;\n        return tokenCComment(stream, state);\n      }\n    },\n    name: \"css\",\n    helperType: \"gss\"\n  });\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/gss.html",
    "content": "<!doctype html>\n\n<title>CodeMirror: Closure Stylesheets (GSS) mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc/docs.css\">\n\n<link rel=\"stylesheet\" href=\"../../lib/codemirror.css\">\n<link rel=\"stylesheet\" href=\"../../addon/hint/show-hint.css\">\n<script src=\"../../lib/codemirror.js\"></script>\n<script src=\"css.js\"></script>\n<script src=\"../../addon/edit/matchbrackets.js\"></script>\n<script src=\"../../addon/hint/show-hint.js\"></script>\n<script src=\"../../addon/hint/css-hint.js\"></script>\n<style>.CodeMirror {background: #f8f8f8;}</style>\n<div id=nav>\n  <a href=\"https://codemirror.net\"><h1>CodeMirror</h1><img id=logo src=\"../../doc/logo.png\" alt=\"\"></a>\n\n  <ul>\n    <li><a href=\"../../index.html\">Home</a>\n    <li><a href=\"../../doc/manual.html\">Manual</a>\n    <li><a href=\"https://github.com/codemirror/codemirror\">Code</a>\n  </ul>\n  <ul>\n    <li><a href=\"../index.html\">Language modes</a>\n    <li><a class=active href=\"#\">Closure Stylesheets (GSS)</a>\n  </ul>\n</div>\n\n<article>\n<h2>Closure Stylesheets (GSS) mode</h2>\n<form><textarea id=\"code\" name=\"code\">\n/* Some example Closure Stylesheets */\n\n@provide 'some.styles';\n\n@require 'other.styles';\n\n@component {\n\n@def FONT_FAMILY           \"Times New Roman\", Georgia, Serif;\n@def FONT_SIZE_NORMAL      15px;\n@def FONT_NORMAL           normal FONT_SIZE_NORMAL FONT_FAMILY;\n\n@def BG_COLOR              rgb(235, 239, 249);\n\n@def DIALOG_BORDER_COLOR   rgb(107, 144, 218);\n@def DIALOG_BG_COLOR       BG_COLOR;\n\n@def LEFT_HAND_NAV_WIDTH    180px;\n@def LEFT_HAND_NAV_PADDING  3px;\n\n@defmixin size(WIDTH, HEIGHT) {\n  width: WIDTH;\n  height: HEIGHT;\n}\n\nbody {\n  background-color: BG_COLOR;\n  margin: 0;\n  padding: 3em 6em;\n  font: FONT_NORMAL;\n  color: #000;\n}\n\n#navigation a {\n  font-weight: bold;\n  text-decoration: none !important;\n}\n\n.dialog {\n  background-color: DIALOG_BG_COLOR;\n  border: 1px solid DIALOG_BORDER_COLOR;\n}\n\n.content {\n  position: absolute;\n  margin-left: add(LEFT_HAND_NAV_PADDING,  /* padding left */\n                   LEFT_HAND_NAV_WIDTH,\n                   LEFT_HAND_NAV_PADDING); /* padding right */\n\n}\n\n.logo {\n  @mixin size(150px, 55px);\n  background-image: url('http://www.google.com/images/logo_sm.gif');\n}\n\n}\n</textarea></form>\n    <script>\n      var editor = CodeMirror.fromTextArea(document.getElementById(\"code\"), {\n        extraKeys: {\"Ctrl-Space\": \"autocomplete\"},\n        lineNumbers: true,\n        matchBrackets: true,\n        mode: \"text/x-gss\"\n      });\n    </script>\n\n    <p>A mode for <a href=\"https://github.com/google/closure-stylesheets\">Closure Stylesheets</a> (GSS).</p>\n    <p><strong>MIME type defined:</strong> <code>text/x-gss</code>.</p>\n\n    <p><strong>Parsing/Highlighting Tests:</strong> <a href=\"../../test/index.html#gss_*\">normal</a>,  <a href=\"../../test/index.html#verbose,gss_*\">verbose</a>.</p>\n\n  </article>\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/gss_test.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function() {\n  \"use strict\";\n\n  var mode = CodeMirror.getMode({indentUnit: 2}, \"text/x-gss\");\n  function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), \"gss\"); }\n\n  MT(\"atComponent\",\n     \"[def @component] {\",\n     \"[tag foo] {\",\n     \"  [property color]: [keyword black];\",\n     \"}\",\n     \"}\");\n\n})();\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/index.html",
    "content": "<!doctype html>\n\n<title>CodeMirror: CSS mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc/docs.css\">\n\n<link rel=\"stylesheet\" href=\"../../lib/codemirror.css\">\n<link rel=\"stylesheet\" href=\"../../addon/hint/show-hint.css\">\n<script src=\"../../lib/codemirror.js\"></script>\n<script src=\"css.js\"></script>\n<script src=\"../../addon/hint/show-hint.js\"></script>\n<script src=\"../../addon/hint/css-hint.js\"></script>\n<style>.CodeMirror {background: #f8f8f8;}</style>\n<div id=nav>\n  <a href=\"https://codemirror.net\"><h1>CodeMirror</h1><img id=logo src=\"../../doc/logo.png\" alt=\"\"></a>\n\n  <ul>\n    <li><a href=\"../../index.html\">Home</a>\n    <li><a href=\"../../doc/manual.html\">Manual</a>\n    <li><a href=\"https://github.com/codemirror/codemirror\">Code</a>\n  </ul>\n  <ul>\n    <li><a href=\"../index.html\">Language modes</a>\n    <li><a class=active href=\"#\">CSS</a>\n  </ul>\n</div>\n\n<article>\n<h2>CSS mode</h2>\n<form><textarea id=\"code\" name=\"code\">\n/* Some example CSS */\n\n@import url(\"something.css\");\n\nbody {\n  margin: 0;\n  padding: 3em 6em;\n  font-family: tahoma, arial, sans-serif;\n  color: #000;\n}\n\n#navigation a {\n  font-weight: bold;\n  text-decoration: none !important;\n}\n\nh1 {\n  font-size: 2.5em;\n}\n\nh2 {\n  font-size: 1.7em;\n}\n\nh1:before, h2:before {\n  content: \"::\";\n}\n\ncode {\n  font-family: courier, monospace;\n  font-size: 80%;\n  color: #418A8A;\n}\n</textarea></form>\n    <script>\n      var editor = CodeMirror.fromTextArea(document.getElementById(\"code\"), {\n        extraKeys: {\"Ctrl-Space\": \"autocomplete\"}\n      });\n    </script>\n\n  <p>CSS mode supports this option:</p>\n  <d1>\n    <dt><code><strong>highlightNonStandardPropertyKeywords</strong>: boolean</code></dt>\n    <dd>Whether to highlight non-standard CSS property keywords such as <code>margin-inline</code> or <code>zoom</code> (default: <code>true</code>).</dd>\n  </d1>\n\n    <p><strong>MIME types defined:</strong> <code>text/css</code>, <code>text/x-scss</code> (<a href=\"scss.html\">demo</a>), <code>text/x-less</code> (<a href=\"less.html\">demo</a>).</p>\n\n    <p><strong>Parsing/Highlighting Tests:</strong> <a href=\"../../test/index.html#css_*\">normal</a>,  <a href=\"../../test/index.html#verbose,css_*\">verbose</a>.</p>\n\n  </article>\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/less.html",
    "content": "<!doctype html>\n\n<title>CodeMirror: LESS mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc/docs.css\">\n\n<link rel=\"stylesheet\" href=\"../../lib/codemirror.css\">\n<script src=\"../../lib/codemirror.js\"></script>\n<script src=\"../../addon/edit/matchbrackets.js\"></script>\n<script src=\"css.js\"></script>\n<style>.CodeMirror {border: 1px solid #ddd; line-height: 1.2;}</style>\n<div id=nav>\n  <a href=\"https://codemirror.net\"><h1>CodeMirror</h1><img id=logo src=\"../../doc/logo.png\" alt=\"\"></a>\n\n  <ul>\n    <li><a href=\"../../index.html\">Home</a>\n    <li><a href=\"../../doc/manual.html\">Manual</a>\n    <li><a href=\"https://github.com/codemirror/codemirror\">Code</a>\n  </ul>\n  <ul>\n    <li><a href=\"../index.html\">Language modes</a>\n    <li><a class=active href=\"#\">LESS</a>\n  </ul>\n</div>\n\n<article>\n<h2>LESS mode</h2>\n<form><textarea id=\"code\" name=\"code\">@media screen and (device-aspect-ratio: 16/9) { … }\n@media screen and (device-aspect-ratio: 1280/720) { … }\n@media screen and (device-aspect-ratio: 2560/1440) { … }\n\nhtml:lang(fr-be)\n\ntr:nth-child(2n+1) /* represents every odd row of an HTML table */\n\nimg:nth-of-type(2n+1) { float: right; }\nimg:nth-of-type(2n) { float: left; }\n\nbody > h2:not(:first-of-type):not(:last-of-type)\n\nhtml|*:not(:link):not(:visited)\n*|*:not(:hover)\np::first-line { text-transform: uppercase }\n\n@namespace foo url(http://www.example.com);\nfoo|h1 { color: blue }  /* first rule */\n\nspan[hello=\"Ocean\"][goodbye=\"Land\"]\n\nE[foo]{\n  padding:65px;\n}\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n  -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner { // Inner padding and border oddities in FF3/4\n  padding: 0;\n  border: 0;\n}\n.btn {\n  // reset here as of 2.0.3 due to Recess property order\n  border-color: #ccc;\n  border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);\n}\nfieldset span button, fieldset span input[type=\"file\"] {\n  font-size:12px;\n\tfont-family:Arial, Helvetica, sans-serif;\n}\n\n.rounded-corners (@radius: 5px) {\n  border-radius: @radius;\n  -webkit-border-radius: @radius;\n  -moz-border-radius: @radius;\n}\n\n@import url(\"something.css\");\n\n@light-blue:   hsl(190, 50%, 65%);\n\n#menu {\n  position: absolute;\n  width: 100%;\n  z-index: 3;\n  clear: both;\n  display: block;\n  background-color: @blue;\n  height: 42px;\n  border-top: 2px solid lighten(@alpha-blue, 20%);\n  border-bottom: 2px solid darken(@alpha-blue, 25%);\n  .box-shadow(0, 1px, 8px, 0.6);\n  -moz-box-shadow: 0 0 0 #000; // Because firefox sucks.\n\n  &.docked {\n    background-color: hsla(210, 60%, 40%, 0.4);\n  }\n  &:hover {\n    background-color: @blue;\n  }\n\n  #dropdown {\n    margin: 0 0 0 117px;\n    padding: 0;\n    padding-top: 5px;\n    display: none;\n    width: 190px;\n    border-top: 2px solid @medium;\n    color: @highlight;\n    border: 2px solid darken(@medium, 25%);\n    border-left-color: darken(@medium, 15%);\n    border-right-color: darken(@medium, 15%);\n    border-top-width: 0;\n    background-color: darken(@medium, 10%);\n    ul {\n      padding: 0px;  \n    }\n    li {\n      font-size: 14px;\n      display: block;\n      text-align: left;\n      padding: 0;\n      border: 0;\n      a {\n        display: block;\n        padding: 0px 15px;  \n        text-decoration: none;\n        color: white;  \n        &:hover {\n          background-color: darken(@medium, 15%);\n          text-decoration: none;\n        }\n      }\n    }\n    .border-radius(5px, bottom);\n    .box-shadow(0, 6px, 8px, 0.5);\n  }\n}\n</textarea></form>\n    <script>\n      var editor = CodeMirror.fromTextArea(document.getElementById(\"code\"), {\n        lineNumbers: true,\n        matchBrackets: true,\n        mode: \"text/x-less\"\n      });\n    </script>\n\n    <p>The LESS mode is a sub-mode of the <a href=\"index.html\">CSS mode</a> (defined in <code>css.js</code>).</p>\n\n    <p><strong>Parsing/Highlighting Tests:</strong> <a href=\"../../test/index.html#less_*\">normal</a>,  <a href=\"../../test/index.html#verbose,less_*\">verbose</a>.</p>\n  </article>\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/less_test.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function() {\n  \"use strict\";\n\n  var mode = CodeMirror.getMode({indentUnit: 2}, \"text/x-less\");\n  function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), \"less\"); }\n\n  MT(\"variable\",\n     \"[variable-2 @base]: [atom #f04615];\",\n     \"[qualifier .class] {\",\n     \"  [property width]: [variable&callee percentage]([number 0.5]); [comment // returns `50%`]\",\n     \"  [property color]: [variable&callee saturate]([variable-2 @base], [number 5%]);\",\n     \"}\");\n\n  MT(\"amp\",\n     \"[qualifier .child], [qualifier .sibling] {\",\n     \"  [qualifier .parent] [atom &] {\",\n     \"    [property color]: [keyword black];\",\n     \"  }\",\n     \"  [atom &] + [atom &] {\",\n     \"    [property color]: [keyword red];\",\n     \"  }\",\n     \"}\");\n\n  MT(\"mixin\",\n     \"[qualifier .mixin] ([variable dark]; [variable-2 @color]) {\",\n     \"  [property color]: [variable&callee darken]([variable-2 @color], [number 10%]);\",\n     \"}\",\n     \"[qualifier .mixin] ([variable light]; [variable-2 @color]) {\",\n     \"  [property color]: [variable&callee lighten]([variable-2 @color], [number 10%]);\",\n     \"}\",\n     \"[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {\",\n     \"  [property display]: [atom block];\",\n     \"}\",\n     \"[variable-2 @switch]: [variable light];\",\n     \"[qualifier .class] {\",\n     \"  [qualifier .mixin]([variable-2 @switch]; [atom #888]);\",\n     \"}\");\n\n  MT(\"nest\",\n     \"[qualifier .one] {\",\n     \"  [def @media] ([property width]: [number 400px]) {\",\n     \"    [property font-size]: [number 1.2em];\",\n     \"    [def @media] [attribute print] [keyword and] [property color] {\",\n     \"      [property color]: [keyword blue];\",\n     \"    }\",\n     \"  }\",\n     \"}\");\n\n\n  MT(\"interpolation\", \".@{[variable foo]} { [property font-weight]: [atom bold]; }\");\n})();\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/scss.html",
    "content": "<!doctype html>\n\n<title>CodeMirror: SCSS mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc/docs.css\">\n\n<link rel=\"stylesheet\" href=\"../../lib/codemirror.css\">\n<script src=\"../../lib/codemirror.js\"></script>\n<script src=\"../../addon/edit/matchbrackets.js\"></script>\n<script src=\"css.js\"></script>\n<style>.CodeMirror {background: #f8f8f8;}</style>\n<div id=nav>\n  <a href=\"https://codemirror.net\"><h1>CodeMirror</h1><img id=logo src=\"../../doc/logo.png\" alt=\"\"></a>\n\n  <ul>\n    <li><a href=\"../../index.html\">Home</a>\n    <li><a href=\"../../doc/manual.html\">Manual</a>\n    <li><a href=\"https://github.com/codemirror/codemirror\">Code</a>\n  </ul>\n  <ul>\n    <li><a href=\"../index.html\">Language modes</a>\n    <li><a class=active href=\"#\">SCSS</a>\n  </ul>\n</div>\n\n<article>\n<h2>SCSS mode</h2>\n<form><textarea id=\"code\" name=\"code\">\n/* Some example SCSS */\n\n@import \"compass/css3\";\n$variable: #333;\n\n$blue: #3bbfce;\n$margin: 16px;\n\n.content-navigation {\n  #nested {\n    background-color: black;\n  }\n  border-color: $blue;\n  color:\n    darken($blue, 9%);\n}\n\n.border {\n  padding: $margin / 2;\n  margin: $margin / 2;\n  border-color: $blue;\n}\n\n@mixin table-base {\n  th {\n    text-align: center;\n    font-weight: bold;\n  }\n  td, th {padding: 2px}\n}\n\ntable.hl {\n  margin: 2em 0;\n  td.ln {\n    text-align: right;\n  }\n}\n\nli {\n  font: {\n    family: serif;\n    weight: bold;\n    size: 1.2em;\n  }\n}\n\n@mixin left($dist) {\n  float: left;\n  margin-left: $dist;\n}\n\n#data {\n  @include left(10px);\n  @include table-base;\n}\n\n.source {\n  @include flow-into(target);\n  border: 10px solid green;\n  margin: 20px;\n  width: 200px; }\n\n.new-container {\n  @include flow-from(target);\n  border: 10px solid red;\n  margin: 20px;\n  width: 200px; }\n\nbody {\n  margin: 0;\n  padding: 3em 6em;\n  font-family: tahoma, arial, sans-serif;\n  color: #000;\n}\n\n@mixin yellow() {\n  background: yellow;\n}\n\n.big {\n  font-size: 14px;\n}\n\n.nested {\n  @include border-radius(3px);\n  @extend .big;\n  p {\n    background: whitesmoke;\n    a {\n      color: red;\n    }\n  }\n}\n\n#navigation a {\n  font-weight: bold;\n  text-decoration: none !important;\n}\n\nh1 {\n  font-size: 2.5em;\n}\n\nh2 {\n  font-size: 1.7em;\n}\n\nh1:before, h2:before {\n  content: \"::\";\n}\n\ncode {\n  font-family: courier, monospace;\n  font-size: 80%;\n  color: #418A8A;\n}\n</textarea></form>\n    <script>\n      var editor = CodeMirror.fromTextArea(document.getElementById(\"code\"), {\n        lineNumbers: true,\n        matchBrackets: true,\n        mode: \"text/x-scss\"\n      });\n    </script>\n\n    <p>The SCSS mode is a sub-mode of the <a href=\"index.html\">CSS mode</a> (defined in <code>css.js</code>).</p>\n\n    <p><strong>Parsing/Highlighting Tests:</strong> <a href=\"../../test/index.html#scss_*\">normal</a>,  <a href=\"../../test/index.html#verbose,scss_*\">verbose</a>.</p>\n\n  </article>\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/scss_test.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function() {\n  var mode = CodeMirror.getMode({indentUnit: 2}, \"text/x-scss\");\n  function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), \"scss\"); }\n\n  MT('url_with_quotation',\n    \"[tag foo] { [property background]:[variable&callee url]([string test.jpg]) }\");\n\n  MT('url_with_double_quotes',\n    \"[tag foo] { [property background]:[variable&callee url]([string \\\"test.jpg\\\"]) }\");\n\n  MT('url_with_single_quotes',\n    \"[tag foo] { [property background]:[variable&callee url]([string \\'test.jpg\\']) }\");\n\n  MT('string',\n    \"[def @import] [string \\\"compass/css3\\\"]\");\n\n  MT('important_keyword',\n    \"[tag foo] { [property background]:[variable&callee url]([string \\'test.jpg\\']) [keyword !important] }\");\n\n  MT('variable',\n    \"[variable-2 $blue]:[atom #333]\");\n\n  MT('variable_as_attribute',\n    \"[tag foo] { [property color]:[variable-2 $blue] }\");\n\n  MT('numbers',\n    \"[tag foo] { [property padding]:[number 10px] [number 10] [number 10em] [number 8in] }\");\n\n  MT('number_percentage',\n    \"[tag foo] { [property width]:[number 80%] }\");\n\n  MT('selector',\n    \"[builtin #hello][qualifier .world]{}\");\n\n  MT('singleline_comment',\n    \"[comment // this is a comment]\");\n\n  MT('multiline_comment',\n    \"[comment /*foobar*/]\");\n\n  MT('attribute_with_hyphen',\n    \"[tag foo] { [property font-size]:[number 10px] }\");\n\n  MT('string_after_attribute',\n    \"[tag foo] { [property content]:[string \\\"::\\\"] }\");\n\n  MT('directives',\n    \"[def @include] [qualifier .mixin]\");\n\n  MT('basic_structure',\n    \"[tag p] { [property background]:[keyword red]; }\");\n\n  MT('nested_structure',\n    \"[tag p] { [tag a] { [property color]:[keyword red]; } }\");\n\n  MT('mixin',\n    \"[def @mixin] [tag table-base] {}\");\n\n  MT('number_without_semicolon',\n    \"[tag p] {[property width]:[number 12]}\",\n    \"[tag a] {[property color]:[keyword red];}\");\n\n  MT('atom_in_nested_block',\n    \"[tag p] { [tag a] { [property color]:[atom #000]; } }\");\n\n  MT('interpolation_in_property',\n    \"[tag foo] { #{[variable-2 $hello]}:[number 2]; }\");\n\n  MT('interpolation_in_selector',\n    \"[tag foo]#{[variable-2 $hello]} { [property color]:[atom #000]; }\");\n\n  MT('interpolation_error',\n    \"[tag foo]#{[variable foo]} { [property color]:[atom #000]; }\");\n\n  MT(\"divide_operator\",\n    \"[tag foo] { [property width]:[number 4] [operator /] [number 2] }\");\n\n  MT('nested_structure_with_id_selector',\n    \"[tag p] { [builtin #hello] { [property color]:[keyword red]; } }\");\n\n  MT('indent_mixin',\n     \"[def @mixin] [tag container] (\",\n     \"  [variable-2 $a]: [number 10],\",\n     \"  [variable-2 $b]: [number 10])\",\n     \"{}\");\n\n  MT('indent_nested',\n     \"[tag foo] {\",\n     \"  [tag bar] {\",\n     \"  }\",\n     \"}\");\n\n  MT('indent_parentheses',\n     \"[tag foo] {\",\n     \"  [property color]: [variable&callee darken]([variable-2 $blue],\",\n     \"    [number 9%]);\",\n     \"}\");\n\n  MT('indent_vardef',\n     \"[variable-2 $name]:\",\n     \"  [string 'val'];\",\n     \"[tag tag] {\",\n     \"  [tag inner] {\",\n     \"    [property margin]: [number 3px];\",\n     \"  }\",\n     \"}\");\n})();\n"
  },
  {
    "path": "public/vendor/codemirror/mode/css/test.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function() {\n  var mode = CodeMirror.getMode({indentUnit: 2}, \"css\");\n  function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }\n\n  // Error, because \"foobarhello\" is neither a known type or property, but\n  // property was expected (after \"and\"), and it should be in parentheses.\n  MT(\"atMediaUnknownType\",\n     \"[def @media] [attribute screen] [keyword and] [error foobarhello] { }\");\n\n  // Soft error, because \"foobarhello\" is not a known property or type.\n  MT(\"atMediaUnknownProperty\",\n     \"[def @media] [attribute screen] [keyword and] ([error foobarhello]) { }\");\n\n  // Make sure nesting works with media queries\n  MT(\"atMediaMaxWidthNested\",\n     \"[def @media] [attribute screen] [keyword and] ([property max-width]: [number 25px]) { [tag foo] { } }\");\n\n  MT(\"atMediaFeatureValueKeyword\",\n     \"[def @media] ([property orientation]: [keyword landscape]) { }\");\n\n  MT(\"atMediaUnknownFeatureValueKeyword\",\n     \"[def @media] ([property orientation]: [error upsidedown]) { }\");\n\n  MT(\"atMediaUppercase\",\n     \"[def @MEDIA] ([property orienTAtion]: [keyword landScape]) { }\");\n\n  MT(\"tagSelector\",\n     \"[tag foo] { }\");\n\n  MT(\"classSelector\",\n     \"[qualifier .foo-bar_hello] { }\");\n\n  MT(\"idSelector\",\n     \"[builtin #foo] { [error #foo] }\");\n\n  MT(\"tagSelectorUnclosed\",\n     \"[tag foo] { [property margin]: [number 0] } [tag bar] { }\");\n\n  MT(\"tagStringNoQuotes\",\n     \"[tag foo] { [property font-family]: [variable hello] [variable world]; }\");\n\n  MT(\"tagStringDouble\",\n     \"[tag foo] { [property font-family]: [string \\\"hello world\\\"]; }\");\n\n  MT(\"tagStringSingle\",\n     \"[tag foo] { [property font-family]: [string 'hello world']; }\");\n\n  MT(\"tagColorKeyword\",\n     \"[tag foo] {\",\n     \"  [property color]: [keyword black];\",\n     \"  [property color]: [keyword navy];\",\n     \"  [property color]: [keyword yellow];\",\n     \"}\");\n\n  MT(\"tagColorHex3\",\n     \"[tag foo] { [property background]: [atom #fff]; }\");\n\n  MT(\"tagColorHex4\",\n     \"[tag foo] { [property background]: [atom #ffff]; }\");\n\n  MT(\"tagColorHex6\",\n     \"[tag foo] { [property background]: [atom #ffffff]; }\");\n\n  MT(\"tagColorHex8\",\n     \"[tag foo] { [property background]: [atom #ffffffff]; }\");\n\n  MT(\"tagColorHex5Invalid\",\n     \"[tag foo] { [property background]: [atom&error #fffff]; }\");\n\n  MT(\"tagColorHexInvalid\",\n     \"[tag foo] { [property background]: [atom&error #ffg]; }\");\n\n  MT(\"tagNegativeNumber\",\n     \"[tag foo] { [property margin]: [number -5px]; }\");\n\n  MT(\"tagPositiveNumber\",\n     \"[tag foo] { [property padding]: [number 5px]; }\");\n\n  MT(\"tagVendor\",\n     \"[tag foo] { [meta -foo-][property box-sizing]: [meta -foo-][atom border-box]; }\");\n\n  MT(\"tagBogusProperty\",\n     \"[tag foo] { [property&error barhelloworld]: [number 0]; }\");\n\n  MT(\"tagTwoProperties\",\n     \"[tag foo] { [property margin]: [number 0]; [property padding]: [number 0]; }\");\n\n  MT(\"tagTwoPropertiesURL\",\n     \"[tag foo] { [property background]: [variable&callee url]([string //example.com/foo.png]); [property padding]: [number 0]; }\");\n\n  MT(\"indent_tagSelector\",\n     \"[tag strong], [tag em] {\",\n     \"  [property background]: [variable&callee rgba](\",\n     \"    [number 255], [number 255], [number 0], [number .2]\",\n     \"  );\",\n     \"}\");\n\n  MT(\"indent_atMedia\",\n     \"[def @media] {\",\n     \"  [tag foo] {\",\n     \"    [property color]:\",\n     \"      [keyword yellow];\",\n     \"  }\",\n     \"}\");\n\n  MT(\"indent_comma\",\n     \"[tag foo] {\",\n     \"  [property font-family]: [variable verdana],\",\n     \"    [atom sans-serif];\",\n     \"}\");\n\n  MT(\"indent_parentheses\",\n     \"[tag foo]:[variable-3 before] {\",\n     \"  [property background]: [variable&callee url](\",\n     \"[string     blahblah]\",\n     \"[string     etc]\",\n     \"[string   ]) [keyword !important];\",\n     \"}\");\n\n  MT(\"font_face\",\n     \"[def @font-face] {\",\n     \"  [property font-family]: [string 'myfont'];\",\n     \"  [error nonsense]: [string 'abc'];\",\n     \"  [property src]: [variable&callee url]([string http://blah]),\",\n     \"    [variable&callee url]([string http://foo]);\",\n     \"}\");\n\n  MT(\"empty_url\",\n     \"[def @import] [variable&callee url]() [attribute screen];\");\n\n  MT(\"parens\",\n     \"[qualifier .foo] {\",\n     \"  [property background-image]: [variable&callee fade]([atom #000], [number 20%]);\",\n     \"  [property border-image]: [variable&callee linear-gradient](\",\n     \"    [atom to] [atom bottom],\",\n     \"    [variable&callee fade]([atom #000], [number 20%]) [number 0%],\",\n     \"    [variable&callee fade]([atom #000], [number 20%]) [number 100%]\",\n     \"  );\",\n     \"}\");\n\n  MT(\"css_variable\",\n     \":[variable-3 root] {\",\n     \"  [variable-2 --main-color]: [atom #06c];\",\n     \"}\",\n     \"[tag h1][builtin #foo] {\",\n     \"  [property color]: [variable&callee var]([variable-2 --main-color]);\",\n     \"}\");\n\n  MT(\"blank_css_variable\",\n     \":[variable-3 root] {\",\n     \"  [variable-2 --]: [atom #06c];\",\n     \"}\",\n     \"[tag h1][builtin #foo] {\",\n     \"  [property color]: [variable&callee var]([variable-2 --]);\",\n     \"}\");\n\n  MT(\"supports\",\n     \"[def @supports] ([keyword not] (([property text-align-last]: [atom justify]) [keyword or] ([meta -moz-][property text-align-last]: [atom justify])) {\",\n     \"  [property text-align-last]: [atom justify];\",\n     \"}\");\n\n   MT(\"document\",\n      \"[def @document] [variable&callee url]([string http://blah]),\",\n      \"  [variable&callee url-prefix]([string https://]),\",\n      \"  [variable&callee domain]([string blah.com]),\",\n      \"  [variable&callee regexp]([string \\\".*blah.+\\\"]) {\",\n      \"    [builtin #id] {\",\n      \"      [property background-color]: [keyword white];\",\n      \"    }\",\n      \"    [tag foo] {\",\n      \"      [property font-family]: [variable Verdana], [atom sans-serif];\",\n      \"    }\",\n      \"}\");\n\n   MT(\"document_url\",\n      \"[def @document] [variable&callee url]([string http://blah]) { [qualifier .class] { } }\");\n\n   MT(\"document_urlPrefix\",\n      \"[def @document] [variable&callee url-prefix]([string https://]) { [builtin #id] { } }\");\n\n   MT(\"document_domain\",\n      \"[def @document] [variable&callee domain]([string blah.com]) { [tag foo] { } }\");\n\n   MT(\"document_regexp\",\n      \"[def @document] [variable&callee regexp]([string \\\".*blah.+\\\"]) { [builtin #id] { } }\");\n\n   MT(\"counter-style\",\n      \"[def @counter-style] [variable binary] {\",\n      \"  [property system]: [atom numeric];\",\n      \"  [property symbols]: [number 0] [number 1];\",\n      \"  [property suffix]: [string \\\".\\\"];\",\n      \"  [property range]: [atom infinite];\",\n      \"  [property speak-as]: [atom numeric];\",\n      \"}\");\n\n   MT(\"counter-style-additive-symbols\",\n      \"[def @counter-style] [variable simple-roman] {\",\n      \"  [property system]: [atom additive];\",\n      \"  [property additive-symbols]: [number 10] [variable X], [number 5] [variable V], [number 1] [variable I];\",\n      \"  [property range]: [number 1] [number 49];\",\n      \"}\");\n\n   MT(\"counter-style-use\",\n      \"[tag ol][qualifier .roman] { [property list-style]: [variable simple-roman]; }\");\n\n   MT(\"counter-style-symbols\",\n      \"[tag ol] { [property list-style]: [variable&callee symbols]([atom cyclic] [string \\\"*\\\"] [string \\\"\\\\2020\\\"] [string \\\"\\\\2021\\\"] [string \\\"\\\\A7\\\"]); }\");\n\n  MT(\"comment-does-not-disrupt\",\n     \"[def @font-face] [comment /* foo */] {\",\n     \"  [property src]: [variable&callee url]([string x]);\",\n     \"  [property font-family]: [variable One];\",\n     \"}\")\n})();\n"
  },
  {
    "path": "public/vendor/codemirror/mode/htmlmixed/htmlmixed.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../javascript/javascript\"), require(\"../css/css\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../xml/xml\", \"../javascript/javascript\", \"../css/css\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var defaultTags = {\n    script: [\n      [\"lang\", /(javascript|babel)/i, \"javascript\"],\n      [\"type\", /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, \"javascript\"],\n      [\"type\", /./, \"text/plain\"],\n      [null, null, \"javascript\"]\n    ],\n    style:  [\n      [\"lang\", /^css$/i, \"css\"],\n      [\"type\", /^(text\\/)?(x-)?(stylesheet|css)$/i, \"css\"],\n      [\"type\", /./, \"text/plain\"],\n      [null, null, \"css\"]\n    ]\n  };\n\n  function maybeBackup(stream, pat, style) {\n    var cur = stream.current(), close = cur.search(pat);\n    if (close > -1) {\n      stream.backUp(cur.length - close);\n    } else if (cur.match(/<\\/?$/)) {\n      stream.backUp(cur.length);\n      if (!stream.match(pat, false)) stream.match(cur);\n    }\n    return style;\n  }\n\n  var attrRegexpCache = {};\n  function getAttrRegexp(attr) {\n    var regexp = attrRegexpCache[attr];\n    if (regexp) return regexp;\n    return attrRegexpCache[attr] = new RegExp(\"\\\\s+\" + attr + \"\\\\s*=\\\\s*('|\\\")?([^'\\\"]+)('|\\\")?\\\\s*\");\n  }\n\n  function getAttrValue(text, attr) {\n    var match = text.match(getAttrRegexp(attr))\n    return match ? /^\\s*(.*?)\\s*$/.exec(match[2])[1] : \"\"\n  }\n\n  function getTagRegexp(tagName, anchored) {\n    return new RegExp((anchored ? \"^\" : \"\") + \"<\\/\\s*\" + tagName + \"\\s*>\", \"i\");\n  }\n\n  function addTags(from, to) {\n    for (var tag in from) {\n      var dest = to[tag] || (to[tag] = []);\n      var source = from[tag];\n      for (var i = source.length - 1; i >= 0; i--)\n        dest.unshift(source[i])\n    }\n  }\n\n  function findMatchingMode(tagInfo, tagText) {\n    for (var i = 0; i < tagInfo.length; i++) {\n      var spec = tagInfo[i];\n      if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];\n    }\n  }\n\n  CodeMirror.defineMode(\"htmlmixed\", function (config, parserConfig) {\n    var htmlMode = CodeMirror.getMode(config, {\n      name: \"xml\",\n      htmlMode: true,\n      multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,\n      multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag,\n      allowMissingTagName: parserConfig.allowMissingTagName,\n    });\n\n    var tags = {};\n    var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes;\n    addTags(defaultTags, tags);\n    if (configTags) addTags(configTags, tags);\n    if (configScript) for (var i = configScript.length - 1; i >= 0; i--)\n      tags.script.unshift([\"type\", configScript[i].matches, configScript[i].mode])\n\n    function html(stream, state) {\n      var style = htmlMode.token(stream, state.htmlState), tag = /\\btag\\b/.test(style), tagName\n      if (tag && !/[<>\\s\\/]/.test(stream.current()) &&\n          (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&\n          tags.hasOwnProperty(tagName)) {\n        state.inTag = tagName + \" \"\n      } else if (state.inTag && tag && />$/.test(stream.current())) {\n        var inTag = /^([\\S]+) (.*)/.exec(state.inTag)\n        state.inTag = null\n        var modeSpec = stream.current() == \">\" && findMatchingMode(tags[inTag[1]], inTag[2])\n        var mode = CodeMirror.getMode(config, modeSpec)\n        var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false);\n        state.token = function (stream, state) {\n          if (stream.match(endTagA, false)) {\n            state.token = html;\n            state.localState = state.localMode = null;\n            return null;\n          }\n          return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));\n        };\n        state.localMode = mode;\n        state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, \"\", \"\"));\n      } else if (state.inTag) {\n        state.inTag += stream.current()\n        if (stream.eol()) state.inTag += \" \"\n      }\n      return style;\n    };\n\n    return {\n      startState: function () {\n        var state = CodeMirror.startState(htmlMode);\n        return {token: html, inTag: null, localMode: null, localState: null, htmlState: state};\n      },\n\n      copyState: function (state) {\n        var local;\n        if (state.localState) {\n          local = CodeMirror.copyState(state.localMode, state.localState);\n        }\n        return {token: state.token, inTag: state.inTag,\n                localMode: state.localMode, localState: local,\n                htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\n      },\n\n      token: function (stream, state) {\n        return state.token(stream, state);\n      },\n\n      indent: function (state, textAfter, line) {\n        if (!state.localMode || /^\\s*<\\//.test(textAfter))\n          return htmlMode.indent(state.htmlState, textAfter, line);\n        else if (state.localMode.indent)\n          return state.localMode.indent(state.localState, textAfter, line);\n        else\n          return CodeMirror.Pass;\n      },\n\n      innerMode: function (state) {\n        return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};\n      }\n    };\n  }, \"xml\", \"javascript\", \"css\");\n\n  CodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n});\n"
  },
  {
    "path": "public/vendor/codemirror/mode/htmlmixed/index.html",
    "content": "<!doctype html>\n\n<title>CodeMirror: HTML mixed mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc/docs.css\">\n\n<link rel=\"stylesheet\" href=\"../../lib/codemirror.css\">\n<script src=\"../../lib/codemirror.js\"></script>\n<script src=\"../../addon/selection/selection-pointer.js\"></script>\n<script src=\"../xml/xml.js\"></script>\n<script src=\"../javascript/javascript.js\"></script>\n<script src=\"../css/css.js\"></script>\n<script src=\"../vbscript/vbscript.js\"></script>\n<script src=\"htmlmixed.js\"></script>\n<style>.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>\n<div id=nav>\n  <a href=\"https://codemirror.net\"><h1>CodeMirror</h1><img id=logo src=\"../../doc/logo.png\" alt=\"\"></a>\n\n  <ul>\n    <li><a href=\"../../index.html\">Home</a>\n    <li><a href=\"../../doc/manual.html\">Manual</a>\n    <li><a href=\"https://github.com/codemirror/codemirror\">Code</a>\n  </ul>\n  <ul>\n    <li><a href=\"../index.html\">Language modes</a>\n    <li><a class=active href=\"#\">HTML mixed</a>\n  </ul>\n</div>\n\n<article>\n<h2>HTML mixed mode</h2>\n<form><textarea id=\"code\" name=\"code\">\n<html style=\"color: green\">\n  <!-- this is a comment -->\n  <head>\n    <title>Mixed HTML Example</title>\n    <style>\n      h1 {font-family: comic sans; color: #f0f;}\n      div {background: yellow !important;}\n      body {\n        max-width: 50em;\n        margin: 1em 2em 1em 5em;\n      }\n    </style>\n  </head>\n  <body>\n    <h1>Mixed HTML Example</h1>\n    <script>\n      function jsFunc(arg1, arg2) {\n        if (arg1 && arg2) document.body.innerHTML = \"achoo\";\n      }\n    </script>\n  </body>\n</html>\n</textarea></form>\n    <script>\n      // Define an extended mixed-mode that understands vbscript and\n      // leaves mustache/handlebars embedded templates in html mode\n      var mixedMode = {\n        name: \"htmlmixed\",\n        scriptTypes: [{matches: /\\/x-handlebars-template|\\/x-mustache/i,\n                       mode: null},\n                      {matches: /(text|application)\\/(x-)?vb(a|script)/i,\n                       mode: \"vbscript\"}]\n      };\n      var editor = CodeMirror.fromTextArea(document.getElementById(\"code\"), {\n        mode: mixedMode,\n        selectionPointer: true\n      });\n    </script>\n\n    <p>The HTML mixed mode depends on the XML, JavaScript, and CSS modes.</p>\n\n    <p>It takes an optional mode configuration\n    option, <code>tags</code>, which can be used to add custom\n    behavior for specific tags. When given, it should be an object\n    mapping tag names (for example <code>script</code>) to arrays or\n    three-element arrays. Those inner arrays indicate [attributeName,\n    valueRegexp, <a href=\"../../doc/manual.html#option_mode\">modeSpec</a>]\n    specifications. For example, you could use <code>[\"type\", /^foo$/,\n    \"foo\"]</code> to map the attribute <code>type=\"foo\"</code> to\n    the <code>foo</code> mode. When the first two fields are null\n    (<code>[null, null, \"mode\"]</code>), the given mode is used for\n    any such tag that doesn't match any of the previously given\n    attributes. For example:</p>\n\n    <pre>var myModeSpec = {\n  name: \"htmlmixed\",\n  tags: {\n    style: [[\"type\", /^text\\/(x-)?scss$/, \"text/x-scss\"],\n            [null, null, \"css\"]],\n    custom: [[null, null, \"customMode\"]]\n  }\n}</pre>\n\n    <p><strong>MIME types defined:</strong> <code>text/html</code>\n    (redefined, only takes effect if you load this parser after the\n    XML parser).</p>\n\n  </article>\n"
  },
  {
    "path": "public/vendor/codemirror/mode/xml/index.html",
    "content": "<!doctype html>\n\n<title>CodeMirror: XML mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc/docs.css\">\n\n<link rel=\"stylesheet\" href=\"../../lib/codemirror.css\">\n<script src=\"../../lib/codemirror.js\"></script>\n<script src=\"xml.js\"></script>\n<style>.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>\n<div id=nav>\n  <a href=\"https://codemirror.net\"><h1>CodeMirror</h1><img id=logo src=\"../../doc/logo.png\" alt=\"\"></a>\n\n  <ul>\n    <li><a href=\"../../index.html\">Home</a>\n    <li><a href=\"../../doc/manual.html\">Manual</a>\n    <li><a href=\"https://github.com/codemirror/codemirror\">Code</a>\n  </ul>\n  <ul>\n    <li><a href=\"../index.html\">Language modes</a>\n    <li><a class=active href=\"#\">XML</a>\n  </ul>\n</div>\n\n<article>\n<h2>XML mode</h2>\n<form><textarea id=\"code\" name=\"code\">\n&lt;html style=\"color: green\"&gt;\n  &lt;!-- this is a comment --&gt;\n  &lt;head&gt;\n    &lt;title&gt;HTML Example&lt;/title&gt;\n  &lt;/head&gt;\n  &lt;body&gt;\n    The indentation tries to be &lt;em&gt;somewhat &amp;quot;do what\n    I mean&amp;quot;&lt;/em&gt;... but might not match your style.\n  &lt;/body&gt;\n&lt;/html&gt;\n</textarea></form>\n    <script>\n      var editor = CodeMirror.fromTextArea(document.getElementById(\"code\"), {\n        mode: \"text/html\",\n        lineNumbers: true\n      });\n    </script>\n    <p>The XML mode supports these configuration parameters:</p>\n    <dl>\n      <dt><code>htmlMode (boolean)</code></dt>\n      <dd>This switches the mode to parse HTML instead of XML. This\n      means attributes do not have to be quoted, and some elements\n      (such as <code>br</code>) do not require a closing tag.</dd>\n      <dt><code>matchClosing (boolean)</code></dt>\n      <dd>Controls whether the mode checks that close tags match the\n      corresponding opening tag, and highlights mismatches as errors.\n      Defaults to true.</dd>\n      <dt><code>alignCDATA (boolean)</code></dt>\n      <dd>Setting this to true will force the opening tag of CDATA\n      blocks to not be indented.</dd>\n    </dl>\n\n    <p><strong>MIME types defined:</strong> <code>application/xml</code>, <code>text/html</code>.</p>\n  </article>\n"
  },
  {
    "path": "public/vendor/codemirror/mode/xml/test.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function() {\n  var mode = CodeMirror.getMode({indentUnit: 2}, \"xml\"), mname = \"xml\";\n  function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname); }\n\n  MT(\"matching\",\n     \"[tag&bracket <][tag top][tag&bracket >]\",\n     \"  text\",\n     \"  [tag&bracket <][tag inner][tag&bracket />]\",\n     \"[tag&bracket </][tag top][tag&bracket >]\");\n\n  MT(\"nonmatching\",\n     \"[tag&bracket <][tag top][tag&bracket >]\",\n     \"  [tag&bracket <][tag inner][tag&bracket />]\",\n     \"  [tag&bracket </][tag&error tip][tag&bracket&error >]\");\n\n  MT(\"doctype\",\n     \"[meta <!doctype foobar>]\",\n     \"[tag&bracket <][tag top][tag&bracket />]\");\n\n  MT(\"cdata\",\n     \"[tag&bracket <][tag top][tag&bracket >]\",\n     \"  [atom <![CDATA[foo]\",\n     \"[atom barbazguh]]]]>]\",\n     \"[tag&bracket </][tag top][tag&bracket >]\");\n\n  // HTML tests\n  mode = CodeMirror.getMode({indentUnit: 2}, \"text/html\");\n\n  MT(\"selfclose\",\n     \"[tag&bracket <][tag html][tag&bracket >]\",\n     \"  [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string \\\"/foobar\\\"][tag&bracket >]\",\n     \"[tag&bracket </][tag html][tag&bracket >]\");\n\n  MT(\"list\",\n     \"[tag&bracket <][tag ol][tag&bracket >]\",\n     \"  [tag&bracket <][tag li][tag&bracket >]one\",\n     \"  [tag&bracket <][tag li][tag&bracket >]two\",\n     \"[tag&bracket </][tag ol][tag&bracket >]\");\n\n  MT(\"valueless\",\n     \"[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]\");\n\n  MT(\"pThenArticle\",\n     \"[tag&bracket <][tag p][tag&bracket >]\",\n     \"  foo\",\n     \"[tag&bracket <][tag article][tag&bracket >]bar\");\n\n})();\n"
  },
  {
    "path": "public/vendor/codemirror/mode/xml/xml.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n  autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                    'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                    'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                    'track': true, 'wbr': true, 'menuitem': true},\n  implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                     'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                     'th': true, 'tr': true},\n  contextGrabbers: {\n    'dd': {'dd': true, 'dt': true},\n    'dt': {'dd': true, 'dt': true},\n    'li': {'li': true},\n    'option': {'option': true, 'optgroup': true},\n    'optgroup': {'optgroup': true},\n    'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n          'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n          'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n          'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n          'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n    'rp': {'rp': true, 'rt': true},\n    'rt': {'rp': true, 'rt': true},\n    'tbody': {'tbody': true, 'tfoot': true},\n    'td': {'td': true, 'th': true},\n    'tfoot': {'tbody': true},\n    'th': {'td': true, 'th': true},\n    'thead': {'tbody': true, 'tfoot': true},\n    'tr': {'tr': true}\n  },\n  doNotIndent: {\"pre\": true},\n  allowUnquoted: true,\n  allowMissing: true,\n  caseFold: true\n}\n\nvar xmlConfig = {\n  autoSelfClosers: {},\n  implicitlyClosed: {},\n  contextGrabbers: {},\n  doNotIndent: {},\n  allowUnquoted: false,\n  allowMissing: false,\n  allowMissingTagName: false,\n  caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n  var indentUnit = editorConf.indentUnit\n  var config = {}\n  var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n  for (var prop in defaults) config[prop] = defaults[prop]\n  for (var prop in config_) config[prop] = config_[prop]\n\n  // Return variables for tokenizers\n  var type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag bracket\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n  inText.isInText = true;\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag bracket\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" tag error\" : \"tag error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    }\n  }\n\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function lower(tagName) {\n    return tagName && tagName.toLowerCase();\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName || \"\";\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName;\n      if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) ||\n          !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagStart = stream.column();\n      return tagNameState;\n    } else if (type == \"closeTag\") {\n      return closeTagNameState;\n    } else {\n      return baseState;\n    }\n  }\n  function tagNameState(type, stream, state) {\n    if (type == \"word\") {\n      state.tagName = stream.current();\n      setStyle = \"tag\";\n      return attrState;\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return attrState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return tagNameState;\n    }\n  }\n  function closeTagNameState(type, stream, state) {\n    if (type == \"word\") {\n      var tagName = stream.current();\n      if (state.context && state.context.tagName != tagName &&\n          config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName)))\n        popContext(state);\n      if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n        setStyle = \"tag\";\n        return closeState;\n      } else {\n        setStyle = \"tag error\";\n        return closeStateErr;\n      }\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return closeState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return closeStateErr;\n    }\n  }\n\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          config.autoSelfClosers.hasOwnProperty(lower(tagName))) {\n        maybePopContext(state, tagName);\n      } else {\n        maybePopContext(state, tagName);\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!config.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function(baseIndent) {\n      var state = {tokenize: inText,\n                   state: baseState,\n                   indented: baseIndent || 0,\n                   tagName: null, tagStart: null,\n                   context: null}\n      if (baseIndent != null) state.baseIndent = baseIndent\n      return state\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        if (state.tagStart == state.indented)\n          return state.stringStartCol + 1;\n        else\n          return state.indented + indentUnit;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (config.multilineTagIndentPastTag !== false)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n      }\n      if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n      if (tagAfter && tagAfter[1]) { // Closing tag spotted\n        while (context) {\n          if (context.tagName == tagAfter[2]) {\n            context = context.prev;\n            break;\n          } else if (config.implicitlyClosed.hasOwnProperty(lower(context.tagName))) {\n            context = context.prev;\n          } else {\n            break;\n          }\n        }\n      } else if (tagAfter) { // Opening tag spotted\n        while (context) {\n          var grabbers = config.contextGrabbers[lower(context.tagName)];\n          if (grabbers && grabbers.hasOwnProperty(lower(tagAfter[2])))\n            context = context.prev;\n          else\n            break;\n        }\n      }\n      while (context && context.prev && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return state.baseIndent || 0;\n    },\n\n    electricInput: /<\\/[\\s\\w:]+>$/,\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: config.htmlMode ? \"html\" : \"xml\",\n    helperType: config.htmlMode ? \"html\" : \"xml\",\n\n    skipAttribute: function(state) {\n      if (state.state == attrValueState)\n        state.state = attrState\n    },\n\n    xmlCurrentTag: function(state) {\n      return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n    },\n\n    xmlCurrentContext: function(state) {\n      var context = []\n      for (var cx = state.context; cx; cx = cx.prev)\n        context.push(cx.tagName)\n      return context.reverse()\n    }\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n"
  },
  {
    "path": "public/vendor/codemirror/theme/3024-day.css",
    "content": "/*\n\n    Name:       3024 day\n    Author:     Jan T. Sott (http://github.com/idleberg)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-3024-day.CodeMirror { background: #f7f7f7; color: #3a3432; }\n.cm-s-3024-day div.CodeMirror-selected { background: #d6d5d4; }\n\n.cm-s-3024-day .CodeMirror-line::selection, .cm-s-3024-day .CodeMirror-line > span::selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d6d5d4; }\n.cm-s-3024-day .CodeMirror-line::-moz-selection, .cm-s-3024-day .CodeMirror-line > span::-moz-selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d9d9d9; }\n\n.cm-s-3024-day .CodeMirror-gutters { background: #f7f7f7; border-right: 0px; }\n.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; }\n.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; }\n.cm-s-3024-day .CodeMirror-linenumber { color: #807d7c; }\n\n.cm-s-3024-day .CodeMirror-cursor { border-left: 1px solid #5c5855; }\n\n.cm-s-3024-day span.cm-comment { color: #cdab53; }\n.cm-s-3024-day span.cm-atom { color: #a16a94; }\n.cm-s-3024-day span.cm-number { color: #a16a94; }\n\n.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute { color: #01a252; }\n.cm-s-3024-day span.cm-keyword { color: #db2d20; }\n.cm-s-3024-day span.cm-string { color: #fded02; }\n\n.cm-s-3024-day span.cm-variable { color: #01a252; }\n.cm-s-3024-day span.cm-variable-2 { color: #01a0e4; }\n.cm-s-3024-day span.cm-def { color: #e8bbd0; }\n.cm-s-3024-day span.cm-bracket { color: #3a3432; }\n.cm-s-3024-day span.cm-tag { color: #db2d20; }\n.cm-s-3024-day span.cm-link { color: #a16a94; }\n.cm-s-3024-day span.cm-error { background: #db2d20; color: #5c5855; }\n\n.cm-s-3024-day .CodeMirror-activeline-background { background: #e8f2ff; }\n.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/3024-night.css",
    "content": "/*\n\n    Name:       3024 night\n    Author:     Jan T. Sott (http://github.com/idleberg)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-3024-night.CodeMirror { background: #090300; color: #d6d5d4; }\n.cm-s-3024-night div.CodeMirror-selected { background: #3a3432; }\n.cm-s-3024-night .CodeMirror-line::selection, .cm-s-3024-night .CodeMirror-line > span::selection, .cm-s-3024-night .CodeMirror-line > span > span::selection { background: rgba(58, 52, 50, .99); }\n.cm-s-3024-night .CodeMirror-line::-moz-selection, .cm-s-3024-night .CodeMirror-line > span::-moz-selection, .cm-s-3024-night .CodeMirror-line > span > span::-moz-selection { background: rgba(58, 52, 50, .99); }\n.cm-s-3024-night .CodeMirror-gutters { background: #090300; border-right: 0px; }\n.cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; }\n.cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; }\n.cm-s-3024-night .CodeMirror-linenumber { color: #5c5855; }\n\n.cm-s-3024-night .CodeMirror-cursor { border-left: 1px solid #807d7c; }\n\n.cm-s-3024-night span.cm-comment { color: #cdab53; }\n.cm-s-3024-night span.cm-atom { color: #a16a94; }\n.cm-s-3024-night span.cm-number { color: #a16a94; }\n\n.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute { color: #01a252; }\n.cm-s-3024-night span.cm-keyword { color: #db2d20; }\n.cm-s-3024-night span.cm-string { color: #fded02; }\n\n.cm-s-3024-night span.cm-variable { color: #01a252; }\n.cm-s-3024-night span.cm-variable-2 { color: #01a0e4; }\n.cm-s-3024-night span.cm-def { color: #e8bbd0; }\n.cm-s-3024-night span.cm-bracket { color: #d6d5d4; }\n.cm-s-3024-night span.cm-tag { color: #db2d20; }\n.cm-s-3024-night span.cm-link { color: #a16a94; }\n.cm-s-3024-night span.cm-error { background: #db2d20; color: #807d7c; }\n\n.cm-s-3024-night .CodeMirror-activeline-background { background: #2F2F2F; }\n.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/abbott.css",
    "content": "/*\n * abbott.css\n * A warm, dark theme for prose and code, with pastels and pretty greens.\n *\n * Ported from abbott.vim (https://github.com/bcat/abbott.vim) version 2.1.\n * Original design and CodeMirror port by Jonathan Rascher.\n *\n * This theme shares the following color palette with the Vim color scheme.\n *\n * Brown shades:\n *   bistre: #231c14\n *   chocolate: #3c3022\n *   cocoa: #745d42\n *   vanilla_cream: #fef3b4\n *\n * Red shades:\n *   crimson: #d80450\n *   cinnabar: #f63f05\n *\n * Green shades:\n *   dark_olive: #273900\n *   forest_green: #24a507\n *   chartreuse: #a0ea00\n *   pastel_chartreuse: #d8ff84\n *\n * Yellow shades:\n *   marigold: #fbb32f\n *   lemon_meringue: #fbec5d\n *\n * Blue shades:\n *   cornflower_blue: #3f91f1\n *   periwinkle_blue: #8ccdf0\n *\n * Magenta shades:\n *   french_pink: #ec6c99\n *   lavender: #e6a2f3\n *\n * Cyan shades:\n *   zomp: #39a78d\n *   seafoam_green: #00ff7f\n */\n\n/* Style the UI: */\n\n/* Equivalent to Vim's Normal group. */\n.cm-s-abbott.CodeMirror {\n  background: #231c14 /* bistre */;\n  color: #d8ff84 /* pastel_chartreuse */;\n}\n\n/* Roughly equivalent to Vim's LineNr group. */\n.cm-s-abbott .CodeMirror-gutters {\n  background: #231c14 /* bistre */;\n  border: none;\n}\n.cm-s-abbott .CodeMirror-linenumber { color: #fbec5d /* lemon_meringue */; }\n\n.cm-s-abbott .CodeMirror-guttermarker { color: #f63f05 /* cinnabar */; }\n\n/* Roughly equivalent to Vim's FoldColumn group. */\n.cm-s-abbott .CodeMirror-guttermarker-subtle { color: #fbb32f /* marigold */; }\n\n/*\n * Roughly equivalent to Vim's CursorColumn group. (We use a brighter color\n * since Vim's cursorcolumn option highlights a whole column, whereas\n * CodeMirror's rule just highlights a thin line.)\n */\n.cm-s-abbott .CodeMirror-ruler { border-color: #745d42 /* cocoa */; }\n\n/* Equivalent to Vim's Cursor group in insert mode. */\n.cm-s-abbott .CodeMirror-cursor { border-color: #a0ea00 /* chartreuse */; }\n\n/* Equivalent to Vim's Cursor group in normal mode. */\n.cm-s-abbott.cm-fat-cursor .CodeMirror-cursor,\n.cm-s-abbott .cm-animate-fat-cursor {\n  /*\n   * CodeMirror doesn't allow changing the foreground color of the character\n   * under the cursor, so we can't use a reverse video effect for the cursor.\n   * Instead, make it semitransparent.\n   */\n  background: rgba(160, 234, 0, 0.5) /* chartreuse */;\n}\n.cm-s-abbott.cm-fat-cursor .CodeMirror-cursors {\n  /*\n   * Boost the z-index so the fat cursor shows up on top of text and\n   * matchingbracket/matchingtag highlights.\n   */\n  z-index: 3;\n}\n\n/* Equivalent to Vim's Cursor group in replace mode. */\n.cm-s-abbott .CodeMirror-overwrite .CodeMirror-cursor {\n  border-bottom: 1px solid #a0ea00 /* chartreuse */;\n  border-left: none;\n  width: auto;\n}\n\n/* Roughly equivalent to Vim's CursorIM group. */\n.cm-s-abbott .CodeMirror-secondarycursor {\n  border-color: #00ff7f /* seafoam_green */;\n}\n\n/* Roughly equivalent to Vim's Visual group. */\n.cm-s-abbott .CodeMirror-selected,\n.cm-s-abbott.CodeMirror-focused .CodeMirror-selected {\n  background: #273900 /* dark_olive */;\n}\n.cm-s-abbott .CodeMirror-line::selection,\n.cm-s-abbott .CodeMirror-line > span::selection,\n.cm-s-abbott .CodeMirror-line > span > span::selection {\n  background: #273900 /* dark_olive */;\n}\n.cm-s-abbott .CodeMirror-line::-moz-selection,\n.cm-s-abbott .CodeMirror-line > span::-moz-selection,\n.cm-s-abbott .CodeMirror-line > span > span::-moz-selection {\n  background: #273900 /* dark_olive */;\n}\n\n/* Roughly equivalent to Vim's SpecialKey group. */\n.cm-s-abbott .cm-tab { color: #00ff7f /* seafoam_green */; }\n\n/* Equivalent to Vim's Search group. */\n.cm-s-abbott .cm-searching {\n  background: #fef3b4 /* vanilla_cream */ !important;\n  color: #231c14 /* bistre */ !important;\n}\n\n/* Style syntax highlighting modes: */\n\n/* Equivalent to Vim's Comment group. */\n.cm-s-abbott span.cm-comment {\n  color: #fbb32f /* marigold */;\n  font-style: italic;\n}\n\n/* Equivalent to Vim's String group. */\n.cm-s-abbott span.cm-string,\n.cm-s-abbott span.cm-string-2 {\n  color: #e6a2f3 /* lavender */;\n}\n\n/* Equivalent to Vim's Constant group. */\n.cm-s-abbott span.cm-number,\n.cm-s-abbott span.cm-string.cm-url { color: #f63f05 /* cinnabar */; }\n\n/* Roughly equivalent to Vim's SpecialKey group. */\n.cm-s-abbott span.cm-invalidchar { color: #00ff7f /* seafoam_green */; }\n\n/* Equivalent to Vim's Special group. */\n.cm-s-abbott span.cm-atom { color: #fef3b4 /* vanilla_cream */; }\n\n/* Equivalent to Vim's Delimiter group. */\n.cm-s-abbott span.cm-bracket,\n.cm-s-abbott span.cm-punctuation {\n  color: #fef3b4 /* vanilla_cream */;\n}\n\n/* Equivalent Vim's Operator group. */\n.cm-s-abbott span.cm-operator { font-weight: bold; }\n\n/* Roughly equivalent to Vim's Identifier group. */\n.cm-s-abbott span.cm-def,\n.cm-s-abbott span.cm-variable,\n.cm-s-abbott span.cm-variable-2,\n.cm-s-abbott span.cm-variable-3 {\n  color: #8ccdf0 /* periwinkle_blue */;\n}\n\n/* Roughly equivalent to Vim's Function group. */\n.cm-s-abbott span.cm-builtin,\n.cm-s-abbott span.cm-property,\n.cm-s-abbott span.cm-qualifier {\n  color: #3f91f1 /* cornflower_blue */;\n}\n\n/* Equivalent to Vim's Type group. */\n.cm-s-abbott span.cm-type { color: #24a507 /* forest_green */; }\n\n/* Equivalent to Vim's Keyword group. */\n.cm-s-abbott span.cm-keyword {\n  color: #d80450 /* crimson */;\n  font-weight: bold;\n}\n\n/* Equivalent to Vim's PreProc group. */\n.cm-s-abbott span.cm-meta { color: #ec6c99 /* french_pink */; }\n\n/* Equivalent to Vim's htmlTagName group (linked to Statement). */\n.cm-s-abbott span.cm-tag {\n  color: #d80450 /* crimson */;\n  font-weight: bold;\n}\n\n/* Equivalent to Vim's htmlArg group (linked to Type). */\n.cm-s-abbott span.cm-attribute { color: #24a507 /* forest_green */; }\n\n/* Equivalent to Vim's htmlH1, markdownH1, etc. groups (linked to Title). */\n.cm-s-abbott span.cm-header {\n  color: #d80450 /* crimson */;\n  font-weight: bold;\n}\n\n/* Equivalent to Vim's markdownRule group (linked to PreProc). */\n.cm-s-abbott span.cm-hr { color: #ec6c99 /* french_pink */; }\n\n/* Roughly equivalent to Vim's Underlined group. */\n.cm-s-abbott span.cm-link { color: #e6a2f3 /* lavender */; }\n\n/* Equivalent to Vim's diffRemoved group. */\n.cm-s-abbott span.cm-negative {\n  background: #d80450 /* crimson */;\n  color: #231c14 /* bistre */;\n}\n\n/* Equivalent to Vim's diffAdded group. */\n.cm-s-abbott span.cm-positive {\n  background: #a0ea00 /* chartreuse */;\n  color: #231c14 /* bistre */;\n  font-weight: bold;\n}\n\n/* Equivalent to Vim's Error group. */\n.cm-s-abbott span.cm-error {\n  background: #d80450 /* crimson */;\n  color: #231c14 /* bistre */;\n}\n\n/* Style addons: */\n\n/* Equivalent to Vim's MatchParen group. */\n.cm-s-abbott span.CodeMirror-matchingbracket {\n  background: #745d42 /* cocoa */ !important;\n  color: #231c14 /* bistre */ !important;\n  font-weight: bold;\n}\n\n/*\n * Roughly equivalent to Vim's Error group. (Vim doesn't seem to have a direct\n * equivalent in its own matchparen plugin, but many syntax highlighting plugins\n * mark mismatched brackets as Error.)\n */\n.cm-s-abbott span.CodeMirror-nonmatchingbracket {\n  background: #d80450 /* crimson */ !important;\n  color: #231c14 /* bistre */ !important;\n}\n\n.cm-s-abbott .CodeMirror-matchingtag,\n.cm-s-abbott .cm-matchhighlight {\n  outline: 1px solid #39a78d /* zomp */;\n}\n\n/* Equivalent to Vim's CursorLine group. */\n.cm-s-abbott .CodeMirror-activeline-background,\n.cm-s-abbott .CodeMirror-activeline-gutter {\n  background: #3c3022 /* chocolate */;\n}\n\n/* Equivalent to Vim's CursorLineNr group. */\n.cm-s-abbott .CodeMirror-activeline-gutter .CodeMirror-linenumber {\n  color: #d8ff84 /* pastel_chartreuse */;\n  font-weight: bold;\n}\n\n/* Roughly equivalent to Vim's Folded group. */\n.cm-s-abbott .CodeMirror-foldmarker {\n  color: #f63f05 /* cinnabar */;\n  text-shadow: none;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/abcdef.css",
    "content": ".cm-s-abcdef.CodeMirror { background: #0f0f0f; color: #defdef; }\n.cm-s-abcdef div.CodeMirror-selected { background: #515151; }\n.cm-s-abcdef .CodeMirror-line::selection, .cm-s-abcdef .CodeMirror-line > span::selection, .cm-s-abcdef .CodeMirror-line > span > span::selection { background: rgba(56, 56, 56, 0.99); }\n.cm-s-abcdef .CodeMirror-line::-moz-selection, .cm-s-abcdef .CodeMirror-line > span::-moz-selection, .cm-s-abcdef .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 56, 56, 0.99); }\n.cm-s-abcdef .CodeMirror-gutters { background: #555; border-right: 2px solid #314151; }\n.cm-s-abcdef .CodeMirror-guttermarker { color: #222; }\n.cm-s-abcdef .CodeMirror-guttermarker-subtle { color: azure; }\n.cm-s-abcdef .CodeMirror-linenumber { color: #FFFFFF; }\n.cm-s-abcdef .CodeMirror-cursor { border-left: 1px solid #00FF00; }\n\n.cm-s-abcdef span.cm-keyword { color: darkgoldenrod; font-weight: bold; }\n.cm-s-abcdef span.cm-atom { color: #77F; }\n.cm-s-abcdef span.cm-number { color: violet; }\n.cm-s-abcdef span.cm-def { color: #fffabc; }\n.cm-s-abcdef span.cm-variable { color: #abcdef; }\n.cm-s-abcdef span.cm-variable-2 { color: #cacbcc; }\n.cm-s-abcdef span.cm-variable-3, .cm-s-abcdef span.cm-type { color: #def; }\n.cm-s-abcdef span.cm-property { color: #fedcba; }\n.cm-s-abcdef span.cm-operator { color: #ff0; }\n.cm-s-abcdef span.cm-comment { color: #7a7b7c; font-style: italic;}\n.cm-s-abcdef span.cm-string { color: #2b4; }\n.cm-s-abcdef span.cm-meta { color: #C9F; }\n.cm-s-abcdef span.cm-qualifier { color: #FFF700; }\n.cm-s-abcdef span.cm-builtin { color: #30aabc; }\n.cm-s-abcdef span.cm-bracket { color: #8a8a8a; }\n.cm-s-abcdef span.cm-tag { color: #FFDD44; }\n.cm-s-abcdef span.cm-attribute { color: #DDFF00; }\n.cm-s-abcdef span.cm-error { color: #FF0000; }\n.cm-s-abcdef span.cm-header { color: aquamarine; font-weight: bold; }\n.cm-s-abcdef span.cm-link { color: blueviolet; }\n\n.cm-s-abcdef .CodeMirror-activeline-background { background: #314151; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/ambiance-mobile.css",
    "content": ".cm-s-ambiance.CodeMirror {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/ambiance.css",
    "content": "/* ambiance theme for codemirror */\n\n/* Color scheme */\n\n.cm-s-ambiance .cm-header { color: blue; }\n.cm-s-ambiance .cm-quote { color: #24C2C7; }\n\n.cm-s-ambiance .cm-keyword { color: #cda869; }\n.cm-s-ambiance .cm-atom { color: #CF7EA9; }\n.cm-s-ambiance .cm-number { color: #78CF8A; }\n.cm-s-ambiance .cm-def { color: #aac6e3; }\n.cm-s-ambiance .cm-variable { color: #ffb795; }\n.cm-s-ambiance .cm-variable-2 { color: #eed1b3; }\n.cm-s-ambiance .cm-variable-3, .cm-s-ambiance .cm-type { color: #faded3; }\n.cm-s-ambiance .cm-property { color: #eed1b3; }\n.cm-s-ambiance .cm-operator { color: #fa8d6a; }\n.cm-s-ambiance .cm-comment { color: #555; font-style:italic; }\n.cm-s-ambiance .cm-string { color: #8f9d6a; }\n.cm-s-ambiance .cm-string-2 { color: #9d937c; }\n.cm-s-ambiance .cm-meta { color: #D2A8A1; }\n.cm-s-ambiance .cm-qualifier { color: yellow; }\n.cm-s-ambiance .cm-builtin { color: #9999cc; }\n.cm-s-ambiance .cm-bracket { color: #24C2C7; }\n.cm-s-ambiance .cm-tag { color: #fee4ff; }\n.cm-s-ambiance .cm-attribute { color: #9B859D; }\n.cm-s-ambiance .cm-hr { color: pink; }\n.cm-s-ambiance .cm-link { color: #F4C20B; }\n.cm-s-ambiance .cm-special { color: #FF9D00; }\n.cm-s-ambiance .cm-error { color: #AF2018; }\n\n.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }\n.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }\n\n.cm-s-ambiance div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); }\n.cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-ambiance .CodeMirror-line::selection, .cm-s-ambiance .CodeMirror-line > span::selection, .cm-s-ambiance .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-ambiance .CodeMirror-line::-moz-selection, .cm-s-ambiance .CodeMirror-line > span::-moz-selection, .cm-s-ambiance .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n\n/* Editor styling */\n\n.cm-s-ambiance.CodeMirror {\n  line-height: 1.40em;\n  color: #E6E1DC;\n  background-color: #202020;\n  -webkit-box-shadow: inset 0 0 10px black;\n  -moz-box-shadow: inset 0 0 10px black;\n  box-shadow: inset 0 0 10px black;\n}\n\n.cm-s-ambiance .CodeMirror-gutters {\n  background: #3D3D3D;\n  border-right: 1px solid #4D4D4D;\n  box-shadow: 0 10px 20px black;\n}\n\n.cm-s-ambiance .CodeMirror-linenumber {\n  text-shadow: 0px 1px 1px #4d4d4d;\n  color: #111;\n  padding: 0 5px;\n}\n\n.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; }\n.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; }\n\n.cm-s-ambiance .CodeMirror-cursor { border-left: 1px solid #7991E8; }\n\n.cm-s-ambiance .CodeMirror-activeline-background {\n  background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);\n}\n\n.cm-s-ambiance.CodeMirror,\n.cm-s-ambiance .CodeMirror-gutters {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\");\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/ayu-dark.css",
    "content": "/* Based on https://github.com/dempfi/ayu */\n\n.cm-s-ayu-dark.CodeMirror { background: #0a0e14; color: #b3b1ad; }\n.cm-s-ayu-dark div.CodeMirror-selected { background: #273747; }\n.cm-s-ayu-dark .CodeMirror-line::selection, .cm-s-ayu-dark .CodeMirror-line > span::selection, .cm-s-ayu-dark .CodeMirror-line > span > span::selection { background: rgba(39, 55, 71, 99); }\n.cm-s-ayu-dark .CodeMirror-line::-moz-selection, .cm-s-ayu-dark .CodeMirror-line > span::-moz-selection, .cm-s-ayu-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 55, 71, 99); }\n.cm-s-ayu-dark .CodeMirror-gutters { background: #0a0e14; border-right: 0px; }\n.cm-s-ayu-dark .CodeMirror-guttermarker { color: white; }\n.cm-s-ayu-dark .CodeMirror-guttermarker-subtle { color: #3d424d; }\n.cm-s-ayu-dark .CodeMirror-linenumber { color: #3d424d; }\n.cm-s-ayu-dark .CodeMirror-cursor { border-left: 1px solid #e6b450; }\n.cm-s-ayu-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #a2a8a175 !important; }\n.cm-s-ayu-dark .cm-animate-fat-cursor { background-color: #a2a8a175 !important; }\n\n.cm-s-ayu-dark span.cm-comment { color: #626a73; }\n.cm-s-ayu-dark span.cm-atom { color: #ae81ff; }\n.cm-s-ayu-dark span.cm-number { color: #e6b450; }\n\n.cm-s-ayu-dark span.cm-comment.cm-attribute { color: #ffb454; }\n.cm-s-ayu-dark span.cm-comment.cm-def { color: rgba(57, 186, 230, 80); }\n.cm-s-ayu-dark span.cm-comment.cm-tag { color: #39bae6; }\n.cm-s-ayu-dark span.cm-comment.cm-type { color: #5998a6; }\n\n.cm-s-ayu-dark span.cm-property, .cm-s-ayu-dark span.cm-attribute { color: #ffb454; }  \n.cm-s-ayu-dark span.cm-keyword { color: #ff8f40; } \n.cm-s-ayu-dark span.cm-builtin { color: #e6b450; }\n.cm-s-ayu-dark span.cm-string { color: #c2d94c; }\n\n.cm-s-ayu-dark span.cm-variable { color: #b3b1ad; }\n.cm-s-ayu-dark span.cm-variable-2 { color: #f07178; }\n.cm-s-ayu-dark span.cm-variable-3 { color: #39bae6; }\n.cm-s-ayu-dark span.cm-type { color: #ff8f40; }\n.cm-s-ayu-dark span.cm-def { color: #ffee99; }\n.cm-s-ayu-dark span.cm-bracket { color: #f8f8f2; }\n.cm-s-ayu-dark span.cm-tag { color: rgba(57, 186, 230, 80); }\n.cm-s-ayu-dark span.cm-header { color: #c2d94c; }\n.cm-s-ayu-dark span.cm-link { color: #39bae6; }\n.cm-s-ayu-dark span.cm-error { color: #ff3333; } \n\n.cm-s-ayu-dark .CodeMirror-activeline-background { background: #01060e; }\n.cm-s-ayu-dark .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/ayu-mirage.css",
    "content": "/* Based on https://github.com/dempfi/ayu */\n\n.cm-s-ayu-mirage.CodeMirror { background: #1f2430; color: #cbccc6; }\n.cm-s-ayu-mirage div.CodeMirror-selected { background: #34455a; }\n.cm-s-ayu-mirage .CodeMirror-line::selection, .cm-s-ayu-mirage .CodeMirror-line > span::selection, .cm-s-ayu-mirage .CodeMirror-line > span > span::selection { background: #34455a; }\n.cm-s-ayu-mirage .CodeMirror-line::-moz-selection, .cm-s-ayu-mirage .CodeMirror-line > span::-moz-selection, .cm-s-ayu-mirage .CodeMirror-line > span > span::-moz-selection { background: rgba(25, 30, 42, 99); }\n.cm-s-ayu-mirage .CodeMirror-gutters { background: #1f2430; border-right: 0px; }\n.cm-s-ayu-mirage .CodeMirror-guttermarker { color: white; }\n.cm-s-ayu-mirage .CodeMirror-guttermarker-subtle { color:  rgba(112, 122, 140, 66); }\n.cm-s-ayu-mirage .CodeMirror-linenumber { color: rgba(61, 66, 77, 99); }\n.cm-s-ayu-mirage .CodeMirror-cursor { border-left: 1px solid #ffcc66;  }\n.cm-s-ayu-mirage.cm-fat-cursor .CodeMirror-cursor {background-color: #a2a8a175 !important;}\n.cm-s-ayu-mirage .cm-animate-fat-cursor { background-color: #a2a8a175 !important; }\n\n.cm-s-ayu-mirage span.cm-comment { color: #5c6773; font-style:italic; }\n.cm-s-ayu-mirage span.cm-atom { color: #ae81ff; }\n.cm-s-ayu-mirage span.cm-number { color: #ffcc66; }\n\n.cm-s-ayu-mirage span.cm-comment.cm-attribute { color: #ffd580; }\n.cm-s-ayu-mirage span.cm-comment.cm-def { color: #d4bfff; }\n.cm-s-ayu-mirage span.cm-comment.cm-tag { color: #5ccfe6; }\n.cm-s-ayu-mirage span.cm-comment.cm-type { color: #5998a6; }\n\n.cm-s-ayu-mirage span.cm-property { color: #f29e74; }\n.cm-s-ayu-mirage span.cm-attribute { color: #ffd580; }  \n.cm-s-ayu-mirage span.cm-keyword { color: #ffa759; } \n.cm-s-ayu-mirage span.cm-builtin { color: #ffcc66; }\n.cm-s-ayu-mirage span.cm-string { color: #bae67e; }\n\n.cm-s-ayu-mirage span.cm-variable { color: #cbccc6; }\n.cm-s-ayu-mirage span.cm-variable-2 { color: #f28779; }\n.cm-s-ayu-mirage span.cm-variable-3 { color: #5ccfe6; }\n.cm-s-ayu-mirage span.cm-type { color: #ffa759; }\n.cm-s-ayu-mirage span.cm-def { color: #ffd580; }\n.cm-s-ayu-mirage span.cm-bracket { color: rgba(92, 207, 230, 80); }\n.cm-s-ayu-mirage span.cm-tag { color: #5ccfe6; }\n.cm-s-ayu-mirage span.cm-header { color: #bae67e; }\n.cm-s-ayu-mirage span.cm-link { color: #5ccfe6; }\n.cm-s-ayu-mirage span.cm-error { color: #ff3333; } \n\n.cm-s-ayu-mirage .CodeMirror-activeline-background { background: #191e2a; }\n.cm-s-ayu-mirage .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/base16-dark.css",
    "content": "/*\n\n    Name:       Base16 Default Dark\n    Author:     Chris Kempson (http://chriskempson.com)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-base16-dark.CodeMirror { background: #151515; color: #e0e0e0; }\n.cm-s-base16-dark div.CodeMirror-selected { background: #303030; }\n.cm-s-base16-dark .CodeMirror-line::selection, .cm-s-base16-dark .CodeMirror-line > span::selection, .cm-s-base16-dark .CodeMirror-line > span > span::selection { background: rgba(48, 48, 48, .99); }\n.cm-s-base16-dark .CodeMirror-line::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(48, 48, 48, .99); }\n.cm-s-base16-dark .CodeMirror-gutters { background: #151515; border-right: 0px; }\n.cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; }\n.cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; }\n.cm-s-base16-dark .CodeMirror-linenumber { color: #505050; }\n.cm-s-base16-dark .CodeMirror-cursor { border-left: 1px solid #b0b0b0; }\n.cm-s-base16-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #8e8d8875 !important; }\n.cm-s-base16-dark .cm-animate-fat-cursor { background-color: #8e8d8875 !important; }\n\n.cm-s-base16-dark span.cm-comment { color: #8f5536; }\n.cm-s-base16-dark span.cm-atom { color: #aa759f; }\n.cm-s-base16-dark span.cm-number { color: #aa759f; }\n\n.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute { color: #90a959; }\n.cm-s-base16-dark span.cm-keyword { color: #ac4142; }\n.cm-s-base16-dark span.cm-string { color: #f4bf75; }\n\n.cm-s-base16-dark span.cm-variable { color: #90a959; }\n.cm-s-base16-dark span.cm-variable-2 { color: #6a9fb5; }\n.cm-s-base16-dark span.cm-def { color: #d28445; }\n.cm-s-base16-dark span.cm-bracket { color: #e0e0e0; }\n.cm-s-base16-dark span.cm-tag { color: #ac4142; }\n.cm-s-base16-dark span.cm-link { color: #aa759f; }\n.cm-s-base16-dark span.cm-error { background: #ac4142; color: #b0b0b0; }\n\n.cm-s-base16-dark .CodeMirror-activeline-background { background: #202020; }\n.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/base16-light.css",
    "content": "/*\n\n    Name:       Base16 Default Light\n    Author:     Chris Kempson (http://chriskempson.com)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-base16-light.CodeMirror { background: #f5f5f5; color: #202020; }\n.cm-s-base16-light div.CodeMirror-selected { background: #e0e0e0; }\n.cm-s-base16-light .CodeMirror-line::selection, .cm-s-base16-light .CodeMirror-line > span::selection, .cm-s-base16-light .CodeMirror-line > span > span::selection { background: #e0e0e0; }\n.cm-s-base16-light .CodeMirror-line::-moz-selection, .cm-s-base16-light .CodeMirror-line > span::-moz-selection, .cm-s-base16-light .CodeMirror-line > span > span::-moz-selection { background: #e0e0e0; }\n.cm-s-base16-light .CodeMirror-gutters { background: #f5f5f5; border-right: 0px; }\n.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; }\n.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; }\n.cm-s-base16-light .CodeMirror-linenumber { color: #b0b0b0; }\n.cm-s-base16-light .CodeMirror-cursor { border-left: 1px solid #505050; }\n\n.cm-s-base16-light span.cm-comment { color: #8f5536; }\n.cm-s-base16-light span.cm-atom { color: #aa759f; }\n.cm-s-base16-light span.cm-number { color: #aa759f; }\n\n.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute { color: #90a959; }\n.cm-s-base16-light span.cm-keyword { color: #ac4142; }\n.cm-s-base16-light span.cm-string { color: #f4bf75; }\n\n.cm-s-base16-light span.cm-variable { color: #90a959; }\n.cm-s-base16-light span.cm-variable-2 { color: #6a9fb5; }\n.cm-s-base16-light span.cm-def { color: #d28445; }\n.cm-s-base16-light span.cm-bracket { color: #202020; }\n.cm-s-base16-light span.cm-tag { color: #ac4142; }\n.cm-s-base16-light span.cm-link { color: #aa759f; }\n.cm-s-base16-light span.cm-error { background: #ac4142; color: #505050; }\n\n.cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; }\n.cm-s-base16-light .CodeMirror-matchingbracket { color: #f5f5f5 !important; background-color: #6A9FB5 !important}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/bespin.css",
    "content": "/*\n\n    Name:       Bespin\n    Author:     Mozilla / Jan T. Sott\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;}\n.cm-s-bespin div.CodeMirror-selected {background: #36312e !important;}\n.cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;}\n.cm-s-bespin .CodeMirror-linenumber {color: #666666;}\n.cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;}\n\n.cm-s-bespin span.cm-comment {color: #937121;}\n.cm-s-bespin span.cm-atom {color: #9b859d;}\n.cm-s-bespin span.cm-number {color: #9b859d;}\n\n.cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;}\n.cm-s-bespin span.cm-keyword {color: #cf6a4c;}\n.cm-s-bespin span.cm-string {color: #f9ee98;}\n\n.cm-s-bespin span.cm-variable {color: #54be0d;}\n.cm-s-bespin span.cm-variable-2 {color: #5ea6ea;}\n.cm-s-bespin span.cm-def {color: #cf7d34;}\n.cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;}\n.cm-s-bespin span.cm-bracket {color: #9d9b97;}\n.cm-s-bespin span.cm-tag {color: #cf6a4c;}\n.cm-s-bespin span.cm-link {color: #9b859d;}\n\n.cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n.cm-s-bespin .CodeMirror-activeline-background { background: #404040; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/blackboard.css",
    "content": "/* Port of TextMate's Blackboard theme */\n\n.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; }\n.cm-s-blackboard div.CodeMirror-selected { background: #253B76; }\n.cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); }\n.cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); }\n.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; }\n.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; }\n.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; }\n.cm-s-blackboard .CodeMirror-linenumber { color: #888; }\n.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; }\n\n.cm-s-blackboard .cm-keyword { color: #FBDE2D; }\n.cm-s-blackboard .cm-atom { color: #D8FA3C; }\n.cm-s-blackboard .cm-number { color: #D8FA3C; }\n.cm-s-blackboard .cm-def { color: #8DA6CE; }\n.cm-s-blackboard .cm-variable { color: #FF6400; }\n.cm-s-blackboard .cm-operator { color: #FBDE2D; }\n.cm-s-blackboard .cm-comment { color: #AEAEAE; }\n.cm-s-blackboard .cm-string { color: #61CE3C; }\n.cm-s-blackboard .cm-string-2 { color: #61CE3C; }\n.cm-s-blackboard .cm-meta { color: #D8FA3C; }\n.cm-s-blackboard .cm-builtin { color: #8DA6CE; }\n.cm-s-blackboard .cm-tag { color: #8DA6CE; }\n.cm-s-blackboard .cm-attribute { color: #8DA6CE; }\n.cm-s-blackboard .cm-header { color: #FF6400; }\n.cm-s-blackboard .cm-hr { color: #AEAEAE; }\n.cm-s-blackboard .cm-link { color: #8DA6CE; }\n.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }\n\n.cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; }\n.cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/cobalt.css",
    "content": ".cm-s-cobalt.CodeMirror { background: #002240; color: white; }\n.cm-s-cobalt div.CodeMirror-selected { background: #b36539; }\n.cm-s-cobalt .CodeMirror-line::selection, .cm-s-cobalt .CodeMirror-line > span::selection, .cm-s-cobalt .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); }\n.cm-s-cobalt .CodeMirror-line::-moz-selection, .cm-s-cobalt .CodeMirror-line > span::-moz-selection, .cm-s-cobalt .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); }\n.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }\n.cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; }\n.cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; }\n.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-cobalt span.cm-comment { color: #08f; }\n.cm-s-cobalt span.cm-atom { color: #845dc4; }\n.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; }\n.cm-s-cobalt span.cm-keyword { color: #ffee80; }\n.cm-s-cobalt span.cm-string { color: #3ad900; }\n.cm-s-cobalt span.cm-meta { color: #ff9d00; }\n.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; }\n.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def, .cm-s-cobalt .cm-type { color: white; }\n.cm-s-cobalt span.cm-bracket { color: #d8d8d8; }\n.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; }\n.cm-s-cobalt span.cm-link { color: #845dc4; }\n.cm-s-cobalt span.cm-error { color: #9d1e15; }\n\n.cm-s-cobalt .CodeMirror-activeline-background { background: #002D57; }\n.cm-s-cobalt .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/colorforth.css",
    "content": ".cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; }\n.cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }\n.cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; }\n.cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; }\n.cm-s-colorforth .CodeMirror-linenumber { color: #bababa; }\n.cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-colorforth span.cm-comment     { color: #ededed; }\n.cm-s-colorforth span.cm-def         { color: #ff1c1c; font-weight:bold; }\n.cm-s-colorforth span.cm-keyword     { color: #ffd900; }\n.cm-s-colorforth span.cm-builtin     { color: #00d95a; }\n.cm-s-colorforth span.cm-variable    { color: #73ff00; }\n.cm-s-colorforth span.cm-string      { color: #007bff; }\n.cm-s-colorforth span.cm-number      { color: #00c4ff; }\n.cm-s-colorforth span.cm-atom        { color: #606060; }\n\n.cm-s-colorforth span.cm-variable-2  { color: #EEE; }\n.cm-s-colorforth span.cm-variable-3, .cm-s-colorforth span.cm-type { color: #DDD; }\n.cm-s-colorforth span.cm-property    {}\n.cm-s-colorforth span.cm-operator    {}\n\n.cm-s-colorforth span.cm-meta        { color: yellow; }\n.cm-s-colorforth span.cm-qualifier   { color: #FFF700; }\n.cm-s-colorforth span.cm-bracket     { color: #cc7; }\n.cm-s-colorforth span.cm-tag         { color: #FFBD40; }\n.cm-s-colorforth span.cm-attribute   { color: #FFF700; }\n.cm-s-colorforth span.cm-error       { color: #f00; }\n\n.cm-s-colorforth div.CodeMirror-selected { background: #333d53; }\n\n.cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); }\n\n.cm-s-colorforth .CodeMirror-activeline-background { background: #253540; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/darcula.css",
    "content": "/**\n    Name: IntelliJ IDEA darcula theme\n    From IntelliJ IDEA by JetBrains\n */\n\n.cm-s-darcula  { font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;}\n.cm-s-darcula.CodeMirror { background: #2B2B2B; color: #A9B7C6; }\n\n.cm-s-darcula span.cm-meta { color: #BBB529; }\n.cm-s-darcula span.cm-number { color: #6897BB; }\n.cm-s-darcula span.cm-keyword { color: #CC7832; line-height: 1em; font-weight: bold; }\n.cm-s-darcula span.cm-def { color: #A9B7C6; font-style: italic; }\n.cm-s-darcula span.cm-variable { color: #A9B7C6; }\n.cm-s-darcula span.cm-variable-2 { color: #A9B7C6; }\n.cm-s-darcula span.cm-variable-3 { color: #9876AA; }\n.cm-s-darcula span.cm-type { color: #AABBCC; font-weight: bold; }\n.cm-s-darcula span.cm-property { color: #FFC66D; }\n.cm-s-darcula span.cm-operator { color: #A9B7C6; }\n.cm-s-darcula span.cm-string { color: #6A8759; }\n.cm-s-darcula span.cm-string-2 { color: #6A8759; }\n.cm-s-darcula span.cm-comment { color: #61A151; font-style: italic; }\n.cm-s-darcula span.cm-link { color: #CC7832; }\n.cm-s-darcula span.cm-atom { color: #CC7832; }\n.cm-s-darcula span.cm-error { color: #BC3F3C; }\n.cm-s-darcula span.cm-tag { color: #629755; font-weight: bold; font-style: italic; text-decoration: underline; }\n.cm-s-darcula span.cm-attribute { color: #6897bb; }\n.cm-s-darcula span.cm-qualifier { color: #6A8759; }\n.cm-s-darcula span.cm-bracket { color: #A9B7C6; }\n.cm-s-darcula span.cm-builtin { color: #FF9E59; }\n.cm-s-darcula span.cm-special { color: #FF9E59; }\n.cm-s-darcula span.cm-matchhighlight { color: #FFFFFF; background-color: rgba(50, 89, 48, .7); font-weight: normal;}\n.cm-s-darcula span.cm-searching { color: #FFFFFF; background-color: rgba(61, 115, 59, .7); font-weight: normal;}\n\n.cm-s-darcula .CodeMirror-cursor { border-left: 1px solid #A9B7C6; }\n.cm-s-darcula .CodeMirror-activeline-background { background: #323232; }\n.cm-s-darcula .CodeMirror-gutters { background: #313335; border-right: 1px solid #313335; }\n.cm-s-darcula .CodeMirror-guttermarker { color: #FFEE80; }\n.cm-s-darcula .CodeMirror-guttermarker-subtle { color: #D0D0D0; }\n.cm-s-darcula .CodeMirrir-linenumber { color: #606366; }\n.cm-s-darcula .CodeMirror-matchingbracket { background-color: #3B514D; color: #FFEF28 !important; font-weight: bold; }\n\n.cm-s-darcula div.CodeMirror-selected { background: #214283; }\n\n.CodeMirror-hints.darcula {\n  font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;\n  color: #9C9E9E;\n  background-color: #3B3E3F !important;\n}\n\n.CodeMirror-hints.darcula .CodeMirror-hint-active {\n  background-color: #494D4E !important;\n  color: #9C9E9E !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/dracula.css",
    "content": "/*\n\n    Name:       dracula\n    Author:     Michael Kaminsky (http://github.com/mkaminsky11)\n\n    Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n  background-color: #282a36 !important;\n  color: #f8f8f2 !important;\n  border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/duotone-dark.css",
    "content": "/*\nName:   DuoTone-Dark\nAuthor: by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes)\n\nCodeMirror template by Jan T. Sott (https://github.com/idleberg), adapted by Bram de Haan (https://github.com/atelierbram/)\n*/\n\n.cm-s-duotone-dark.CodeMirror { background: #2a2734; color: #6c6783; }\n.cm-s-duotone-dark div.CodeMirror-selected { background: #545167!important; }\n.cm-s-duotone-dark .CodeMirror-gutters { background: #2a2734; border-right: 0px; }\n.cm-s-duotone-dark .CodeMirror-linenumber { color: #545167; }\n\n/* begin cursor */\n.cm-s-duotone-dark .CodeMirror-cursor { border-left: 1px solid #ffad5c; /* border-left: 1px solid #ffad5c80; */ border-right: .5em solid #ffad5c; /* border-right: .5em solid #ffad5c80; */ opacity: .5; }\n.cm-s-duotone-dark .CodeMirror-activeline-background { background: #363342; /* background: #36334280;  */ opacity: .5;}\n.cm-s-duotone-dark .cm-fat-cursor .CodeMirror-cursor { background: #ffad5c; /* background: #ffad5c80; */ opacity: .5;}\n/* end cursor */\n\n.cm-s-duotone-dark span.cm-atom, .cm-s-duotone-dark span.cm-number, .cm-s-duotone-dark span.cm-keyword, .cm-s-duotone-dark span.cm-variable, .cm-s-duotone-dark span.cm-attribute, .cm-s-duotone-dark span.cm-quote, .cm-s-duotone-dark span.cm-hr, .cm-s-duotone-dark span.cm-link { color: #ffcc99; }\n\n.cm-s-duotone-dark span.cm-property { color: #9a86fd; }\n.cm-s-duotone-dark span.cm-punctuation, .cm-s-duotone-dark span.cm-unit, .cm-s-duotone-dark span.cm-negative { color: #e09142; }\n.cm-s-duotone-dark span.cm-string { color: #ffb870; }\n.cm-s-duotone-dark span.cm-operator { color: #ffad5c; }\n.cm-s-duotone-dark span.cm-positive { color: #6a51e6; }\n\n.cm-s-duotone-dark span.cm-variable-2, .cm-s-duotone-dark span.cm-variable-3, .cm-s-duotone-dark span.cm-type, .cm-s-duotone-dark span.cm-string-2, .cm-s-duotone-dark span.cm-url { color: #7a63ee; }\n.cm-s-duotone-dark span.cm-def, .cm-s-duotone-dark span.cm-tag, .cm-s-duotone-dark span.cm-builtin, .cm-s-duotone-dark span.cm-qualifier, .cm-s-duotone-dark span.cm-header, .cm-s-duotone-dark span.cm-em { color: #eeebff; }\n.cm-s-duotone-dark span.cm-bracket, .cm-s-duotone-dark span.cm-comment { color: #6c6783; }\n\n/* using #f00 red for errors, don't think any of the colorscheme variables will stand out enough, ... maybe by giving it a background-color ... */\n.cm-s-duotone-dark span.cm-error, .cm-s-duotone-dark span.cm-invalidchar { color: #f00; }\n\n.cm-s-duotone-dark span.cm-header { font-weight: normal; }\n.cm-s-duotone-dark .CodeMirror-matchingbracket { text-decoration: underline; color: #eeebff !important; } \n"
  },
  {
    "path": "public/vendor/codemirror/theme/duotone-light.css",
    "content": "/*\nName:   DuoTone-Light\nAuthor: by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes)\n\nCodeMirror template by Jan T. Sott (https://github.com/idleberg), adapted by Bram de Haan (https://github.com/atelierbram/)\n*/\n\n.cm-s-duotone-light.CodeMirror { background: #faf8f5; color: #b29762; }\n.cm-s-duotone-light div.CodeMirror-selected { background: #e3dcce !important; }\n.cm-s-duotone-light .CodeMirror-gutters { background: #faf8f5; border-right: 0px; }\n.cm-s-duotone-light .CodeMirror-linenumber { color: #cdc4b1; }\n\n/* begin cursor */\n.cm-s-duotone-light .CodeMirror-cursor { border-left: 1px solid #93abdc; /* border-left: 1px solid #93abdc80; */ border-right: .5em solid #93abdc; /* border-right: .5em solid #93abdc80; */ opacity: .5; }\n.cm-s-duotone-light .CodeMirror-activeline-background { background: #e3dcce;  /* background: #e3dcce80; */ opacity: .5; }\n.cm-s-duotone-light .cm-fat-cursor .CodeMirror-cursor { background: #93abdc; /* #93abdc80; */ opacity: .5; }\n/* end cursor */\n\n.cm-s-duotone-light span.cm-atom, .cm-s-duotone-light span.cm-number, .cm-s-duotone-light span.cm-keyword, .cm-s-duotone-light span.cm-variable, .cm-s-duotone-light span.cm-attribute, .cm-s-duotone-light span.cm-quote, .cm-s-duotone-light-light span.cm-hr, .cm-s-duotone-light-light span.cm-link { color: #063289; }\n\n.cm-s-duotone-light span.cm-property { color: #b29762; }\n.cm-s-duotone-light span.cm-punctuation, .cm-s-duotone-light span.cm-unit, .cm-s-duotone-light span.cm-negative { color: #063289; }\n.cm-s-duotone-light span.cm-string, .cm-s-duotone-light span.cm-operator { color: #1659df; }\n.cm-s-duotone-light span.cm-positive { color: #896724; }\n\n.cm-s-duotone-light span.cm-variable-2, .cm-s-duotone-light span.cm-variable-3, .cm-s-duotone-light span.cm-type, .cm-s-duotone-light span.cm-string-2, .cm-s-duotone-light span.cm-url { color: #896724; }\n.cm-s-duotone-light span.cm-def, .cm-s-duotone-light span.cm-tag, .cm-s-duotone-light span.cm-builtin, .cm-s-duotone-light span.cm-qualifier, .cm-s-duotone-light span.cm-header, .cm-s-duotone-light span.cm-em { color: #2d2006; }\n.cm-s-duotone-light span.cm-bracket, .cm-s-duotone-light span.cm-comment { color: #b6ad9a; }\n\n/* using #f00 red for errors, don't think any of the colorscheme variables will stand out enough, ... maybe by giving it a background-color ... */\n/* .cm-s-duotone-light span.cm-error { background: #896724; color: #728fcb; } */\n.cm-s-duotone-light span.cm-error, .cm-s-duotone-light span.cm-invalidchar { color: #f00; }\n\n.cm-s-duotone-light span.cm-header { font-weight: normal; }\n.cm-s-duotone-light .CodeMirror-matchingbracket { text-decoration: underline; color: #faf8f5 !important; }\n\n"
  },
  {
    "path": "public/vendor/codemirror/theme/eclipse.css",
    "content": ".cm-s-eclipse span.cm-meta { color: #FF1717; }\n.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; }\n.cm-s-eclipse span.cm-atom { color: #219; }\n.cm-s-eclipse span.cm-number { color: #164; }\n.cm-s-eclipse span.cm-def { color: #00f; }\n.cm-s-eclipse span.cm-variable { color: black; }\n.cm-s-eclipse span.cm-variable-2 { color: #0000C0; }\n.cm-s-eclipse span.cm-variable-3, .cm-s-eclipse span.cm-type { color: #0000C0; }\n.cm-s-eclipse span.cm-property { color: black; }\n.cm-s-eclipse span.cm-operator { color: black; }\n.cm-s-eclipse span.cm-comment { color: #3F7F5F; }\n.cm-s-eclipse span.cm-string { color: #2A00FF; }\n.cm-s-eclipse span.cm-string-2 { color: #f50; }\n.cm-s-eclipse span.cm-qualifier { color: #555; }\n.cm-s-eclipse span.cm-builtin { color: #30a; }\n.cm-s-eclipse span.cm-bracket { color: #cc7; }\n.cm-s-eclipse span.cm-tag { color: #170; }\n.cm-s-eclipse span.cm-attribute { color: #00c; }\n.cm-s-eclipse span.cm-link { color: #219; }\n.cm-s-eclipse span.cm-error { color: #f00; }\n\n.cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; }\n.cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/elegant.css",
    "content": ".cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; }\n.cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; }\n.cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; }\n.cm-s-elegant span.cm-variable { color: black; }\n.cm-s-elegant span.cm-variable-2 { color: #b11; }\n.cm-s-elegant span.cm-qualifier { color: #555; }\n.cm-s-elegant span.cm-keyword { color: #730; }\n.cm-s-elegant span.cm-builtin { color: #30a; }\n.cm-s-elegant span.cm-link { color: #762; }\n.cm-s-elegant span.cm-error { background-color: #fdd; }\n\n.cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; }\n.cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/erlang-dark.css",
    "content": ".cm-s-erlang-dark.CodeMirror { background: #002240; color: white; }\n.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539; }\n.cm-s-erlang-dark .CodeMirror-line::selection, .cm-s-erlang-dark .CodeMirror-line > span::selection, .cm-s-erlang-dark .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); }\n.cm-s-erlang-dark .CodeMirror-line::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); }\n.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }\n.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; }\n.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; }\n.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-erlang-dark span.cm-quote      { color: #ccc; }\n.cm-s-erlang-dark span.cm-atom       { color: #f133f1; }\n.cm-s-erlang-dark span.cm-attribute  { color: #ff80e1; }\n.cm-s-erlang-dark span.cm-bracket    { color: #ff9d00; }\n.cm-s-erlang-dark span.cm-builtin    { color: #eaa; }\n.cm-s-erlang-dark span.cm-comment    { color: #77f; }\n.cm-s-erlang-dark span.cm-def        { color: #e7a; }\n.cm-s-erlang-dark span.cm-keyword    { color: #ffee80; }\n.cm-s-erlang-dark span.cm-meta       { color: #50fefe; }\n.cm-s-erlang-dark span.cm-number     { color: #ffd0d0; }\n.cm-s-erlang-dark span.cm-operator   { color: #d55; }\n.cm-s-erlang-dark span.cm-property   { color: #ccc; }\n.cm-s-erlang-dark span.cm-qualifier  { color: #ccc; }\n.cm-s-erlang-dark span.cm-special    { color: #ffbbbb; }\n.cm-s-erlang-dark span.cm-string     { color: #3ad900; }\n.cm-s-erlang-dark span.cm-string-2   { color: #ccc; }\n.cm-s-erlang-dark span.cm-tag        { color: #9effff; }\n.cm-s-erlang-dark span.cm-variable   { color: #50fe50; }\n.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; }\n.cm-s-erlang-dark span.cm-variable-3, .cm-s-erlang-dark span.cm-type { color: #ccc; }\n.cm-s-erlang-dark span.cm-error      { color: #9d1e15; }\n\n.cm-s-erlang-dark .CodeMirror-activeline-background { background: #013461; }\n.cm-s-erlang-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/gruvbox-dark.css",
    "content": "/*\n\n    Name:       gruvbox-dark\n    Author:     kRkk (https://github.com/krkk)\n\n    Original gruvbox color scheme by Pavel Pertsev (https://github.com/morhetz/gruvbox)\n\n*/\n\n.cm-s-gruvbox-dark.CodeMirror, .cm-s-gruvbox-dark .CodeMirror-gutters { background-color: #282828; color: #bdae93; }\n.cm-s-gruvbox-dark .CodeMirror-gutters {background: #282828; border-right: 0px;}\n.cm-s-gruvbox-dark .CodeMirror-linenumber {color: #7c6f64;}\n.cm-s-gruvbox-dark .CodeMirror-cursor { border-left: 1px solid #ebdbb2; }\n.cm-s-gruvbox-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #8e8d8875 !important; }\n.cm-s-gruvbox-dark .cm-animate-fat-cursor { background-color: #8e8d8875 !important; }\n.cm-s-gruvbox-dark div.CodeMirror-selected { background: #928374; }\n.cm-s-gruvbox-dark span.cm-meta { color: #83a598; }\n\n.cm-s-gruvbox-dark span.cm-comment { color: #928374; }\n.cm-s-gruvbox-dark span.cm-number, span.cm-atom { color: #d3869b; }\n.cm-s-gruvbox-dark span.cm-keyword { color: #f84934; }\n\n.cm-s-gruvbox-dark span.cm-variable { color: #ebdbb2; }\n.cm-s-gruvbox-dark span.cm-variable-2 { color: #ebdbb2; }\n.cm-s-gruvbox-dark span.cm-variable-3, .cm-s-gruvbox-dark span.cm-type { color: #fabd2f; }\n.cm-s-gruvbox-dark span.cm-operator { color: #ebdbb2; }\n.cm-s-gruvbox-dark span.cm-callee { color: #ebdbb2; }\n.cm-s-gruvbox-dark span.cm-def { color: #ebdbb2; }\n.cm-s-gruvbox-dark span.cm-property { color: #ebdbb2; }\n.cm-s-gruvbox-dark span.cm-string { color: #b8bb26; }\n.cm-s-gruvbox-dark span.cm-string-2 { color: #8ec07c; }\n.cm-s-gruvbox-dark span.cm-qualifier { color: #8ec07c; }\n.cm-s-gruvbox-dark span.cm-attribute { color: #8ec07c; }\n\n.cm-s-gruvbox-dark .CodeMirror-activeline-background { background: #3c3836; }\n.cm-s-gruvbox-dark .CodeMirror-matchingbracket { background: #928374; color:#282828 !important; }\n\n.cm-s-gruvbox-dark span.cm-builtin { color: #fe8019; }\n.cm-s-gruvbox-dark span.cm-tag { color: #fe8019; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/hopscotch.css",
    "content": "/*\n\n    Name:       Hopscotch\n    Author:     Jan T. Sott\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;}\n.cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;}\n.cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;}\n.cm-s-hopscotch .CodeMirror-linenumber {color: #797379;}\n.cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;}\n\n.cm-s-hopscotch span.cm-comment {color: #b33508;}\n.cm-s-hopscotch span.cm-atom {color: #c85e7c;}\n.cm-s-hopscotch span.cm-number {color: #c85e7c;}\n\n.cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;}\n.cm-s-hopscotch span.cm-keyword {color: #dd464c;}\n.cm-s-hopscotch span.cm-string {color: #fdcc59;}\n\n.cm-s-hopscotch span.cm-variable {color: #8fc13e;}\n.cm-s-hopscotch span.cm-variable-2 {color: #1290bf;}\n.cm-s-hopscotch span.cm-def {color: #fd8b19;}\n.cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;}\n.cm-s-hopscotch span.cm-bracket {color: #d5d3d5;}\n.cm-s-hopscotch span.cm-tag {color: #dd464c;}\n.cm-s-hopscotch span.cm-link {color: #c85e7c;}\n\n.cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n.cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/icecoder.css",
    "content": "/*\nICEcoder default theme by Matt Pass, used in code editor available at https://icecoder.net\n*/\n\n.cm-s-icecoder { color: #666; background: #1d1d1b; }\n\n.cm-s-icecoder span.cm-keyword { color: #eee; font-weight:bold; }  /* off-white 1 */\n.cm-s-icecoder span.cm-atom { color: #e1c76e; }                    /* yellow */\n.cm-s-icecoder span.cm-number { color: #6cb5d9; }                  /* blue */\n.cm-s-icecoder span.cm-def { color: #b9ca4a; }                     /* green */\n\n.cm-s-icecoder span.cm-variable { color: #6cb5d9; }                /* blue */\n.cm-s-icecoder span.cm-variable-2 { color: #cc1e5c; }              /* pink */\n.cm-s-icecoder span.cm-variable-3, .cm-s-icecoder span.cm-type { color: #f9602c; } /* orange */\n\n.cm-s-icecoder span.cm-property { color: #eee; }                   /* off-white 1 */\n.cm-s-icecoder span.cm-operator { color: #9179bb; }                /* purple */\n.cm-s-icecoder span.cm-comment { color: #97a3aa; }                 /* grey-blue */\n\n.cm-s-icecoder span.cm-string { color: #b9ca4a; }                  /* green */\n.cm-s-icecoder span.cm-string-2 { color: #6cb5d9; }                /* blue */\n\n.cm-s-icecoder span.cm-meta { color: #555; }                       /* grey */\n\n.cm-s-icecoder span.cm-qualifier { color: #555; }                  /* grey */\n.cm-s-icecoder span.cm-builtin { color: #214e7b; }                 /* bright blue */\n.cm-s-icecoder span.cm-bracket { color: #cc7; }                    /* grey-yellow */\n\n.cm-s-icecoder span.cm-tag { color: #e8e8e8; }                     /* off-white 2 */\n.cm-s-icecoder span.cm-attribute { color: #099; }                  /* teal */\n\n.cm-s-icecoder span.cm-header { color: #6a0d6a; }                  /* purple-pink */\n.cm-s-icecoder span.cm-quote { color: #186718; }                   /* dark green */\n.cm-s-icecoder span.cm-hr { color: #888; }                         /* mid-grey */\n.cm-s-icecoder span.cm-link { color: #e1c76e; }                    /* yellow */\n.cm-s-icecoder span.cm-error { color: #d00; }                      /* red */\n\n.cm-s-icecoder .CodeMirror-cursor { border-left: 1px solid white; }\n.cm-s-icecoder div.CodeMirror-selected { color: #fff; background: #037; }\n.cm-s-icecoder .CodeMirror-gutters { background: #1d1d1b; min-width: 41px; border-right: 0; }\n.cm-s-icecoder .CodeMirror-linenumber { color: #555; cursor: default; }\n.cm-s-icecoder .CodeMirror-matchingbracket { color: #fff !important; background: #555 !important; }\n.cm-s-icecoder .CodeMirror-activeline-background { background: #000; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/idea.css",
    "content": "/**\n    Name:       IDEA default theme\n    From IntelliJ IDEA by JetBrains\n */\n\n.cm-s-idea span.cm-meta { color: #808000; }\n.cm-s-idea span.cm-number { color: #0000FF; }\n.cm-s-idea span.cm-keyword { line-height: 1em; font-weight: bold; color: #000080; }\n.cm-s-idea span.cm-atom { font-weight: bold; color: #000080; }\n.cm-s-idea span.cm-def { color: #000000; }\n.cm-s-idea span.cm-variable { color: black; }\n.cm-s-idea span.cm-variable-2 { color: black; }\n.cm-s-idea span.cm-variable-3, .cm-s-idea span.cm-type { color: black; }\n.cm-s-idea span.cm-property { color: black; }\n.cm-s-idea span.cm-operator { color: black; }\n.cm-s-idea span.cm-comment { color: #808080; }\n.cm-s-idea span.cm-string { color: #008000; }\n.cm-s-idea span.cm-string-2 { color: #008000; }\n.cm-s-idea span.cm-qualifier { color: #555; }\n.cm-s-idea span.cm-error { color: #FF0000; }\n.cm-s-idea span.cm-attribute { color: #0000FF; }\n.cm-s-idea span.cm-tag { color: #000080; }\n.cm-s-idea span.cm-link { color: #0000FF; }\n.cm-s-idea .CodeMirror-activeline-background { background: #FFFAE3; }\n\n.cm-s-idea span.cm-builtin { color: #30a; }\n.cm-s-idea span.cm-bracket { color: #cc7; }\n.cm-s-idea  { font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;}\n\n\n.cm-s-idea .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; }\n\n.CodeMirror-hints.idea {\n  font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;\n  color: #616569;\n  background-color: #ebf3fd !important;\n}\n\n.CodeMirror-hints.idea .CodeMirror-hint-active {\n  background-color: #a2b8c9 !important;\n  color: #5c6065 !important;\n}"
  },
  {
    "path": "public/vendor/codemirror/theme/isotope.css",
    "content": "/*\n\n    Name:       Isotope\n    Author:     David Desandro / Jan T. Sott\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;}\n.cm-s-isotope div.CodeMirror-selected {background: #404040 !important;}\n.cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;}\n.cm-s-isotope .CodeMirror-linenumber {color: #808080;}\n.cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;}\n\n.cm-s-isotope span.cm-comment {color: #3300ff;}\n.cm-s-isotope span.cm-atom {color: #cc00ff;}\n.cm-s-isotope span.cm-number {color: #cc00ff;}\n\n.cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;}\n.cm-s-isotope span.cm-keyword {color: #ff0000;}\n.cm-s-isotope span.cm-string {color: #ff0099;}\n\n.cm-s-isotope span.cm-variable {color: #33ff00;}\n.cm-s-isotope span.cm-variable-2 {color: #0066ff;}\n.cm-s-isotope span.cm-def {color: #ff9900;}\n.cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;}\n.cm-s-isotope span.cm-bracket {color: #e0e0e0;}\n.cm-s-isotope span.cm-tag {color: #ff0000;}\n.cm-s-isotope span.cm-link {color: #cc00ff;}\n\n.cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n.cm-s-isotope .CodeMirror-activeline-background { background: #202020; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/juejin.css",
    "content": ".cm-s-juejin.CodeMirror {\n  background: #f8f9fa;\n}\n.cm-s-juejin .cm-header,\n.cm-s-juejin .cm-def {\n  color: #1ba2f0;\n}\n.cm-s-juejin .cm-comment {\n  color: #009e9d;\n}\n.cm-s-juejin .cm-quote,\n.cm-s-juejin .cm-link,\n.cm-s-juejin .cm-strong,\n.cm-s-juejin .cm-attribute {\n  color: #fd7741;\n}\n.cm-s-juejin .cm-url,\n.cm-s-juejin .cm-keyword,\n.cm-s-juejin .cm-builtin {\n  color: #bb51b8;\n}\n.cm-s-juejin .cm-hr {\n  color: #909090;\n}\n.cm-s-juejin .cm-tag {\n  color: #107000;\n}\n.cm-s-juejin .cm-variable-2 {\n  color: #0050a0;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/lesser-dark.css",
    "content": "/*\nhttp://lesscss.org/ dark theme\nPorted to CodeMirror by Peter Kroon\n*/\n.cm-s-lesser-dark {\n  line-height: 1.3em;\n}\n.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; }\n.cm-s-lesser-dark div.CodeMirror-selected { background: #45443B; } /* 33322B*/\n.cm-s-lesser-dark .CodeMirror-line::selection, .cm-s-lesser-dark .CodeMirror-line > span::selection, .cm-s-lesser-dark .CodeMirror-line > span > span::selection { background: rgba(69, 68, 59, .99); }\n.cm-s-lesser-dark .CodeMirror-line::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(69, 68, 59, .99); }\n.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white; }\n.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/\n\n.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/\n\n.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; }\n.cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; }\n.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; }\n.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; }\n\n.cm-s-lesser-dark span.cm-header { color: #a0a; }\n.cm-s-lesser-dark span.cm-quote { color: #090; }\n.cm-s-lesser-dark span.cm-keyword { color: #599eff; }\n.cm-s-lesser-dark span.cm-atom { color: #C2B470; }\n.cm-s-lesser-dark span.cm-number { color: #B35E4D; }\n.cm-s-lesser-dark span.cm-def { color: white; }\n.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; }\n.cm-s-lesser-dark span.cm-variable-2 { color: #669199; }\n.cm-s-lesser-dark span.cm-variable-3, .cm-s-lesser-dark span.cm-type { color: white; }\n.cm-s-lesser-dark span.cm-property { color: #92A75C; }\n.cm-s-lesser-dark span.cm-operator { color: #92A75C; }\n.cm-s-lesser-dark span.cm-comment { color: #666; }\n.cm-s-lesser-dark span.cm-string { color: #BCD279; }\n.cm-s-lesser-dark span.cm-string-2 { color: #f50; }\n.cm-s-lesser-dark span.cm-meta { color: #738C73; }\n.cm-s-lesser-dark span.cm-qualifier { color: #555; }\n.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; }\n.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; }\n.cm-s-lesser-dark span.cm-tag { color: #669199; }\n.cm-s-lesser-dark span.cm-attribute { color: #81a4d5; }\n.cm-s-lesser-dark span.cm-hr { color: #999; }\n.cm-s-lesser-dark span.cm-link { color: #7070E6; }\n.cm-s-lesser-dark span.cm-error { color: #9d1e15; }\n\n.cm-s-lesser-dark .CodeMirror-activeline-background { background: #3C3A3A; }\n.cm-s-lesser-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/liquibyte.css",
    "content": ".cm-s-liquibyte.CodeMirror {\n\tbackground-color: #000;\n\tcolor: #fff;\n\tline-height: 1.2em;\n\tfont-size: 1em;\n}\n.cm-s-liquibyte .CodeMirror-focused .cm-matchhighlight {\n\ttext-decoration: underline;\n\ttext-decoration-color: #0f0;\n\ttext-decoration-style: wavy;\n}\n.cm-s-liquibyte .cm-trailingspace {\n\ttext-decoration: line-through;\n\ttext-decoration-color: #f00;\n\ttext-decoration-style: dotted;\n}\n.cm-s-liquibyte .cm-tab {\n\ttext-decoration: line-through;\n\ttext-decoration-color: #404040;\n\ttext-decoration-style: dotted;\n}\n.cm-s-liquibyte .CodeMirror-gutters { background-color: #262626; border-right: 1px solid #505050; padding-right: 0.8em; }\n.cm-s-liquibyte .CodeMirror-gutter-elt div { font-size: 1.2em; }\n.cm-s-liquibyte .CodeMirror-guttermarker {  }\n.cm-s-liquibyte .CodeMirror-guttermarker-subtle {  }\n.cm-s-liquibyte .CodeMirror-linenumber { color: #606060; padding-left: 0; }\n.cm-s-liquibyte .CodeMirror-cursor { border-left: 1px solid #eee; }\n\n.cm-s-liquibyte span.cm-comment     { color: #008000; }\n.cm-s-liquibyte span.cm-def         { color: #ffaf40; font-weight: bold; }\n.cm-s-liquibyte span.cm-keyword     { color: #c080ff; font-weight: bold; }\n.cm-s-liquibyte span.cm-builtin     { color: #ffaf40; font-weight: bold; }\n.cm-s-liquibyte span.cm-variable    { color: #5967ff; font-weight: bold; }\n.cm-s-liquibyte span.cm-string      { color: #ff8000; }\n.cm-s-liquibyte span.cm-number      { color: #0f0; font-weight: bold; }\n.cm-s-liquibyte span.cm-atom        { color: #bf3030; font-weight: bold; }\n\n.cm-s-liquibyte span.cm-variable-2  { color: #007f7f; font-weight: bold; }\n.cm-s-liquibyte span.cm-variable-3, .cm-s-liquibyte span.cm-type { color: #c080ff; font-weight: bold; }\n.cm-s-liquibyte span.cm-property    { color: #999; font-weight: bold; }\n.cm-s-liquibyte span.cm-operator    { color: #fff; }\n\n.cm-s-liquibyte span.cm-meta        { color: #0f0; }\n.cm-s-liquibyte span.cm-qualifier   { color: #fff700; font-weight: bold; }\n.cm-s-liquibyte span.cm-bracket     { color: #cc7; }\n.cm-s-liquibyte span.cm-tag         { color: #ff0; font-weight: bold; }\n.cm-s-liquibyte span.cm-attribute   { color: #c080ff; font-weight: bold; }\n.cm-s-liquibyte span.cm-error       { color: #f00; }\n\n.cm-s-liquibyte div.CodeMirror-selected { background-color: rgba(255, 0, 0, 0.25); }\n\n.cm-s-liquibyte span.cm-compilation { background-color: rgba(255, 255, 255, 0.12); }\n\n.cm-s-liquibyte .CodeMirror-activeline-background { background-color: rgba(0, 255, 0, 0.15); }\n\n/* Default styles for common addons */\n.cm-s-liquibyte .CodeMirror span.CodeMirror-matchingbracket { color: #0f0; font-weight: bold; }\n.cm-s-liquibyte .CodeMirror span.CodeMirror-nonmatchingbracket { color: #f00; font-weight: bold; }\n.CodeMirror-matchingtag { background-color: rgba(150, 255, 0, .3); }\n/* Scrollbars */\n/* Simple */\n.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover, .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div:hover {\n\tbackground-color: rgba(80, 80, 80, .7);\n}\n.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div, .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div {\n\tbackground-color: rgba(80, 80, 80, .3);\n\tborder: 1px solid #404040;\n\tborder-radius: 5px;\n}\n.cm-s-liquibyte div.CodeMirror-simplescroll-vertical div {\n\tborder-top: 1px solid #404040;\n\tborder-bottom: 1px solid #404040;\n}\n.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div {\n\tborder-left: 1px solid #404040;\n\tborder-right: 1px solid #404040;\n}\n.cm-s-liquibyte div.CodeMirror-simplescroll-vertical {\n\tbackground-color: #262626;\n}\n.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal {\n\tbackground-color: #262626;\n\tborder-top: 1px solid #404040;\n}\n/* Overlay */\n.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div, div.CodeMirror-overlayscroll-vertical div {\n\tbackground-color: #404040;\n\tborder-radius: 5px;\n}\n.cm-s-liquibyte div.CodeMirror-overlayscroll-vertical div {\n\tborder: 1px solid #404040;\n}\n.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div {\n\tborder: 1px solid #404040;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/lucario.css",
    "content": "/*\n  Name:       lucario\n  Author:     Raphael Amorim\n\n  Original Lucario color scheme (https://github.com/raphamorim/lucario)\n*/\n\n.cm-s-lucario.CodeMirror, .cm-s-lucario .CodeMirror-gutters {\n  background-color: #2b3e50 !important;\n  color: #f8f8f2 !important;\n  border: none;\n}\n.cm-s-lucario .CodeMirror-gutters { color: #2b3e50; }\n.cm-s-lucario .CodeMirror-cursor { border-left: solid thin #E6C845; }\n.cm-s-lucario .CodeMirror-linenumber { color: #f8f8f2; }\n.cm-s-lucario .CodeMirror-selected { background: #243443; }\n.cm-s-lucario .CodeMirror-line::selection, .cm-s-lucario .CodeMirror-line > span::selection, .cm-s-lucario .CodeMirror-line > span > span::selection { background: #243443; }\n.cm-s-lucario .CodeMirror-line::-moz-selection, .cm-s-lucario .CodeMirror-line > span::-moz-selection, .cm-s-lucario .CodeMirror-line > span > span::-moz-selection { background: #243443; }\n.cm-s-lucario span.cm-comment { color: #5c98cd; }\n.cm-s-lucario span.cm-string, .cm-s-lucario span.cm-string-2 { color: #E6DB74; }\n.cm-s-lucario span.cm-number { color: #ca94ff; }\n.cm-s-lucario span.cm-variable { color: #f8f8f2; }\n.cm-s-lucario span.cm-variable-2 { color: #f8f8f2; }\n.cm-s-lucario span.cm-def { color: #72C05D; }\n.cm-s-lucario span.cm-operator { color: #66D9EF; }\n.cm-s-lucario span.cm-keyword { color: #ff6541; }\n.cm-s-lucario span.cm-atom { color: #bd93f9; }\n.cm-s-lucario span.cm-meta { color: #f8f8f2; }\n.cm-s-lucario span.cm-tag { color: #ff6541; }\n.cm-s-lucario span.cm-attribute { color: #66D9EF; }\n.cm-s-lucario span.cm-qualifier { color: #72C05D; }\n.cm-s-lucario span.cm-property { color: #f8f8f2; }\n.cm-s-lucario span.cm-builtin { color: #72C05D; }\n.cm-s-lucario span.cm-variable-3, .cm-s-lucario span.cm-type { color: #ffb86c; }\n\n.cm-s-lucario .CodeMirror-activeline-background { background: #243443; }\n.cm-s-lucario .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/material-darker.css",
    "content": "/*\n  Name:       material\n  Author:     Mattia Astorino (http://github.com/equinusocio)\n  Website:    https://material-theme.site/\n*/\n\n.cm-s-material-darker.CodeMirror {\n  background-color: #212121;\n  color: #EEFFFF;\n}\n\n.cm-s-material-darker .CodeMirror-gutters {\n  background: #212121;\n  color: #545454;\n  border: none;\n}\n\n.cm-s-material-darker .CodeMirror-guttermarker,\n.cm-s-material-darker .CodeMirror-guttermarker-subtle,\n.cm-s-material-darker .CodeMirror-linenumber {\n  color: #545454;\n}\n\n.cm-s-material-darker .CodeMirror-cursor {\n  border-left: 1px solid #FFCC00;\n}\n\n.cm-s-material-darker div.CodeMirror-selected {\n  background: rgba(97, 97, 97, 0.2);\n}\n\n.cm-s-material-darker.CodeMirror-focused div.CodeMirror-selected {\n  background: rgba(97, 97, 97, 0.2);\n}\n\n.cm-s-material-darker .CodeMirror-line::selection,\n.cm-s-material-darker .CodeMirror-line>span::selection,\n.cm-s-material-darker .CodeMirror-line>span>span::selection {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material-darker .CodeMirror-line::-moz-selection,\n.cm-s-material-darker .CodeMirror-line>span::-moz-selection,\n.cm-s-material-darker .CodeMirror-line>span>span::-moz-selection {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material-darker .CodeMirror-activeline-background {\n  background: rgba(0, 0, 0, 0.5);\n}\n\n.cm-s-material-darker .cm-keyword {\n  color: #C792EA;\n}\n\n.cm-s-material-darker .cm-operator {\n  color: #89DDFF;\n}\n\n.cm-s-material-darker .cm-variable-2 {\n  color: #EEFFFF;\n}\n\n.cm-s-material-darker .cm-variable-3,\n.cm-s-material-darker .cm-type {\n  color: #f07178;\n}\n\n.cm-s-material-darker .cm-builtin {\n  color: #FFCB6B;\n}\n\n.cm-s-material-darker .cm-atom {\n  color: #F78C6C;\n}\n\n.cm-s-material-darker .cm-number {\n  color: #FF5370;\n}\n\n.cm-s-material-darker .cm-def {\n  color: #82AAFF;\n}\n\n.cm-s-material-darker .cm-string {\n  color: #C3E88D;\n}\n\n.cm-s-material-darker .cm-string-2 {\n  color: #f07178;\n}\n\n.cm-s-material-darker .cm-comment {\n  color: #545454;\n}\n\n.cm-s-material-darker .cm-variable {\n  color: #f07178;\n}\n\n.cm-s-material-darker .cm-tag {\n  color: #FF5370;\n}\n\n.cm-s-material-darker .cm-meta {\n  color: #FFCB6B;\n}\n\n.cm-s-material-darker .cm-attribute {\n  color: #C792EA;\n}\n\n.cm-s-material-darker .cm-property {\n  color: #C792EA;\n}\n\n.cm-s-material-darker .cm-qualifier {\n  color: #DECB6B;\n}\n\n.cm-s-material-darker .cm-variable-3,\n.cm-s-material-darker .cm-type {\n  color: #DECB6B;\n}\n\n\n.cm-s-material-darker .cm-error {\n  color: rgba(255, 255, 255, 1.0);\n  background-color: #FF5370;\n}\n\n.cm-s-material-darker .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}"
  },
  {
    "path": "public/vendor/codemirror/theme/material-ocean.css",
    "content": "/*\n  Name:       material\n  Author:     Mattia Astorino (http://github.com/equinusocio)\n  Website:    https://material-theme.site/\n*/\n\n.cm-s-material-ocean.CodeMirror {\n  background-color: #0F111A;\n  color: #8F93A2;\n}\n\n.cm-s-material-ocean .CodeMirror-gutters {\n  background: #0F111A;\n  color: #464B5D;\n  border: none;\n}\n\n.cm-s-material-ocean .CodeMirror-guttermarker,\n.cm-s-material-ocean .CodeMirror-guttermarker-subtle,\n.cm-s-material-ocean .CodeMirror-linenumber {\n  color: #464B5D;\n}\n\n.cm-s-material-ocean .CodeMirror-cursor {\n  border-left: 1px solid #FFCC00;\n}\n.cm-s-material-ocean.cm-fat-cursor .CodeMirror-cursor {\n  background-color: #a2a8a175 !important;\n}\n.cm-s-material-ocean .cm-animate-fat-cursor {\n  background-color: #a2a8a175 !important;\n}\n\n.cm-s-material-ocean div.CodeMirror-selected {\n  background: rgba(113, 124, 180, 0.2);\n}\n\n.cm-s-material-ocean.CodeMirror-focused div.CodeMirror-selected {\n  background: rgba(113, 124, 180, 0.2);\n}\n\n.cm-s-material-ocean .CodeMirror-line::selection,\n.cm-s-material-ocean .CodeMirror-line>span::selection,\n.cm-s-material-ocean .CodeMirror-line>span>span::selection {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material-ocean .CodeMirror-line::-moz-selection,\n.cm-s-material-ocean .CodeMirror-line>span::-moz-selection,\n.cm-s-material-ocean .CodeMirror-line>span>span::-moz-selection {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material-ocean .CodeMirror-activeline-background {\n  background: rgba(0, 0, 0, 0.5);\n}\n\n.cm-s-material-ocean .cm-keyword {\n  color: #C792EA;\n}\n\n.cm-s-material-ocean .cm-operator {\n  color: #89DDFF;\n}\n\n.cm-s-material-ocean .cm-variable-2 {\n  color: #EEFFFF;\n}\n\n.cm-s-material-ocean .cm-variable-3,\n.cm-s-material-ocean .cm-type {\n  color: #f07178;\n}\n\n.cm-s-material-ocean .cm-builtin {\n  color: #FFCB6B;\n}\n\n.cm-s-material-ocean .cm-atom {\n  color: #F78C6C;\n}\n\n.cm-s-material-ocean .cm-number {\n  color: #FF5370;\n}\n\n.cm-s-material-ocean .cm-def {\n  color: #82AAFF;\n}\n\n.cm-s-material-ocean .cm-string {\n  color: #C3E88D;\n}\n\n.cm-s-material-ocean .cm-string-2 {\n  color: #f07178;\n}\n\n.cm-s-material-ocean .cm-comment {\n  color: #464B5D;\n}\n\n.cm-s-material-ocean .cm-variable {\n  color: #f07178;\n}\n\n.cm-s-material-ocean .cm-tag {\n  color: #FF5370;\n}\n\n.cm-s-material-ocean .cm-meta {\n  color: #FFCB6B;\n}\n\n.cm-s-material-ocean .cm-attribute {\n  color: #C792EA;\n}\n\n.cm-s-material-ocean .cm-property {\n  color: #C792EA;\n}\n\n.cm-s-material-ocean .cm-qualifier {\n  color: #DECB6B;\n}\n\n.cm-s-material-ocean .cm-variable-3,\n.cm-s-material-ocean .cm-type {\n  color: #DECB6B;\n}\n\n\n.cm-s-material-ocean .cm-error {\n  color: rgba(255, 255, 255, 1.0);\n  background-color: #FF5370;\n}\n\n.cm-s-material-ocean .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/material-palenight.css",
    "content": "/*\n  Name:       material\n  Author:     Mattia Astorino (http://github.com/equinusocio)\n  Website:    https://material-theme.site/\n*/\n\n.cm-s-material-palenight.CodeMirror {\n  background-color: #292D3E;\n  color: #A6ACCD;\n}\n\n.cm-s-material-palenight .CodeMirror-gutters {\n  background: #292D3E;\n  color: #676E95;\n  border: none;\n}\n\n.cm-s-material-palenight .CodeMirror-guttermarker,\n.cm-s-material-palenight .CodeMirror-guttermarker-subtle,\n.cm-s-material-palenight .CodeMirror-linenumber {\n  color: #676E95;\n}\n\n.cm-s-material-palenight .CodeMirror-cursor {\n  border-left: 1px solid #FFCC00;\n}\n.cm-s-material-palenight.cm-fat-cursor .CodeMirror-cursor {\n  background-color: #607c8b80 !important;\n}\n.cm-s-material-palenight .cm-animate-fat-cursor {\n  background-color: #607c8b80 !important;\n}\n\n.cm-s-material-palenight div.CodeMirror-selected {\n  background: rgba(113, 124, 180, 0.2);\n}\n\n.cm-s-material-palenight.CodeMirror-focused div.CodeMirror-selected {\n  background: rgba(113, 124, 180, 0.2);\n}\n\n.cm-s-material-palenight .CodeMirror-line::selection,\n.cm-s-material-palenight .CodeMirror-line>span::selection,\n.cm-s-material-palenight .CodeMirror-line>span>span::selection {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material-palenight .CodeMirror-line::-moz-selection,\n.cm-s-material-palenight .CodeMirror-line>span::-moz-selection,\n.cm-s-material-palenight .CodeMirror-line>span>span::-moz-selection {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material-palenight .CodeMirror-activeline-background {\n  background: rgba(0, 0, 0, 0.5);\n}\n\n.cm-s-material-palenight .cm-keyword {\n  color: #C792EA;\n}\n\n.cm-s-material-palenight .cm-operator {\n  color: #89DDFF;\n}\n\n.cm-s-material-palenight .cm-variable-2 {\n  color: #EEFFFF;\n}\n\n.cm-s-material-palenight .cm-variable-3,\n.cm-s-material-palenight .cm-type {\n  color: #f07178;\n}\n\n.cm-s-material-palenight .cm-builtin {\n  color: #FFCB6B;\n}\n\n.cm-s-material-palenight .cm-atom {\n  color: #F78C6C;\n}\n\n.cm-s-material-palenight .cm-number {\n  color: #FF5370;\n}\n\n.cm-s-material-palenight .cm-def {\n  color: #82AAFF;\n}\n\n.cm-s-material-palenight .cm-string {\n  color: #C3E88D;\n}\n\n.cm-s-material-palenight .cm-string-2 {\n  color: #f07178;\n}\n\n.cm-s-material-palenight .cm-comment {\n  color: #676E95;\n}\n\n.cm-s-material-palenight .cm-variable {\n  color: #f07178;\n}\n\n.cm-s-material-palenight .cm-tag {\n  color: #FF5370;\n}\n\n.cm-s-material-palenight .cm-meta {\n  color: #FFCB6B;\n}\n\n.cm-s-material-palenight .cm-attribute {\n  color: #C792EA;\n}\n\n.cm-s-material-palenight .cm-property {\n  color: #C792EA;\n}\n\n.cm-s-material-palenight .cm-qualifier {\n  color: #DECB6B;\n}\n\n.cm-s-material-palenight .cm-variable-3,\n.cm-s-material-palenight .cm-type {\n  color: #DECB6B;\n}\n\n\n.cm-s-material-palenight .cm-error {\n  color: rgba(255, 255, 255, 1.0);\n  background-color: #FF5370;\n}\n\n.cm-s-material-palenight .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/material.css",
    "content": "/*\n  Name:       material\n  Author:     Mattia Astorino (http://github.com/equinusocio)\n  Website:    https://material-theme.site/\n*/\n\n.cm-s-material.CodeMirror {\n  background-color: #263238;\n  color: #EEFFFF;\n}\n\n.cm-s-material .CodeMirror-gutters {\n  background: #263238;\n  color: #546E7A;\n  border: none;\n}\n\n.cm-s-material .CodeMirror-guttermarker,\n.cm-s-material .CodeMirror-guttermarker-subtle,\n.cm-s-material .CodeMirror-linenumber {\n  color: #546E7A;\n}\n\n.cm-s-material .CodeMirror-cursor {\n  border-left: 1px solid #FFCC00;\n}\n.cm-s-material.cm-fat-cursor .CodeMirror-cursor {\n  background-color: #5d6d5c80 !important;\n}\n.cm-s-material .cm-animate-fat-cursor {\n  background-color: #5d6d5c80 !important;\n}\n\n.cm-s-material div.CodeMirror-selected {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material.CodeMirror-focused div.CodeMirror-selected {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material .CodeMirror-line::selection,\n.cm-s-material .CodeMirror-line>span::selection,\n.cm-s-material .CodeMirror-line>span>span::selection {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material .CodeMirror-line::-moz-selection,\n.cm-s-material .CodeMirror-line>span::-moz-selection,\n.cm-s-material .CodeMirror-line>span>span::-moz-selection {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-material .CodeMirror-activeline-background {\n  background: rgba(0, 0, 0, 0.5);\n}\n\n.cm-s-material .cm-keyword {\n  color: #C792EA;\n}\n\n.cm-s-material .cm-operator {\n  color: #89DDFF;\n}\n\n.cm-s-material .cm-variable-2 {\n  color: #EEFFFF;\n}\n\n.cm-s-material .cm-variable-3,\n.cm-s-material .cm-type {\n  color: #f07178;\n}\n\n.cm-s-material .cm-builtin {\n  color: #FFCB6B;\n}\n\n.cm-s-material .cm-atom {\n  color: #F78C6C;\n}\n\n.cm-s-material .cm-number {\n  color: #FF5370;\n}\n\n.cm-s-material .cm-def {\n  color: #82AAFF;\n}\n\n.cm-s-material .cm-string {\n  color: #C3E88D;\n}\n\n.cm-s-material .cm-string-2 {\n  color: #f07178;\n}\n\n.cm-s-material .cm-comment {\n  color: #546E7A;\n}\n\n.cm-s-material .cm-variable {\n  color: #f07178;\n}\n\n.cm-s-material .cm-tag {\n  color: #FF5370;\n}\n\n.cm-s-material .cm-meta {\n  color: #FFCB6B;\n}\n\n.cm-s-material .cm-attribute {\n  color: #C792EA;\n}\n\n.cm-s-material .cm-property {\n  color: #C792EA;\n}\n\n.cm-s-material .cm-qualifier {\n  color: #DECB6B;\n}\n\n.cm-s-material .cm-variable-3,\n.cm-s-material .cm-type {\n  color: #DECB6B;\n}\n\n\n.cm-s-material .cm-error {\n  color: rgba(255, 255, 255, 1.0);\n  background-color: #FF5370;\n}\n\n.cm-s-material .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/mbo.css",
    "content": "/****************************************************************/\n/*   Based on mbonaci's Brackets mbo theme                      */\n/*   https://github.com/mbonaci/global/blob/master/Mbo.tmTheme  */\n/*   Create your own: http://tmtheme-editor.herokuapp.com       */\n/****************************************************************/\n\n.cm-s-mbo.CodeMirror { background: #2c2c2c; color: #ffffec; }\n.cm-s-mbo div.CodeMirror-selected { background: #716C62; }\n.cm-s-mbo .CodeMirror-line::selection, .cm-s-mbo .CodeMirror-line > span::selection, .cm-s-mbo .CodeMirror-line > span > span::selection { background: rgba(113, 108, 98, .99); }\n.cm-s-mbo .CodeMirror-line::-moz-selection, .cm-s-mbo .CodeMirror-line > span::-moz-selection, .cm-s-mbo .CodeMirror-line > span > span::-moz-selection { background: rgba(113, 108, 98, .99); }\n.cm-s-mbo .CodeMirror-gutters { background: #4e4e4e; border-right: 0px; }\n.cm-s-mbo .CodeMirror-guttermarker { color: white; }\n.cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; }\n.cm-s-mbo .CodeMirror-linenumber { color: #dadada; }\n.cm-s-mbo .CodeMirror-cursor { border-left: 1px solid #ffffec; }\n\n.cm-s-mbo span.cm-comment { color: #95958a; }\n.cm-s-mbo span.cm-atom { color: #00a8c6; }\n.cm-s-mbo span.cm-number { color: #00a8c6; }\n\n.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute { color: #9ddfe9; }\n.cm-s-mbo span.cm-keyword { color: #ffb928; }\n.cm-s-mbo span.cm-string { color: #ffcf6c; }\n.cm-s-mbo span.cm-string.cm-property { color: #ffffec; }\n\n.cm-s-mbo span.cm-variable { color: #ffffec; }\n.cm-s-mbo span.cm-variable-2 { color: #00a8c6; }\n.cm-s-mbo span.cm-def { color: #ffffec; }\n.cm-s-mbo span.cm-bracket { color: #fffffc; font-weight: bold; }\n.cm-s-mbo span.cm-tag { color: #9ddfe9; }\n.cm-s-mbo span.cm-link { color: #f54b07; }\n.cm-s-mbo span.cm-error { border-bottom: #636363; color: #ffffec; }\n.cm-s-mbo span.cm-qualifier { color: #ffffec; }\n\n.cm-s-mbo .CodeMirror-activeline-background { background: #494b41; }\n.cm-s-mbo .CodeMirror-matchingbracket { color: #ffb928 !important; }\n.cm-s-mbo .CodeMirror-matchingtag { background: rgba(255, 255, 255, .37); }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/mdn-like.css",
    "content": "/*\n  MDN-LIKE Theme - Mozilla\n  Ported to CodeMirror by Peter Kroon <plakroon@gmail.com>\n  Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues\n  GitHub: @peterkroon\n\n  The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation\n\n*/\n.cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; }\n.cm-s-mdn-like div.CodeMirror-selected { background: #cfc; }\n.cm-s-mdn-like .CodeMirror-line::selection, .cm-s-mdn-like .CodeMirror-line > span::selection, .cm-s-mdn-like .CodeMirror-line > span > span::selection { background: #cfc; }\n.cm-s-mdn-like .CodeMirror-line::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span > span::-moz-selection { background: #cfc; }\n\n.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; }\n.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; padding-left: 8px; }\n.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; }\n\n.cm-s-mdn-like .cm-keyword { color: #6262FF; }\n.cm-s-mdn-like .cm-atom { color: #F90; }\n.cm-s-mdn-like .cm-number { color:  #ca7841; }\n.cm-s-mdn-like .cm-def { color: #8DA6CE; }\n.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; }\n.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def, .cm-s-mdn-like span.cm-type { color: #07a; }\n\n.cm-s-mdn-like .cm-variable { color: #07a; }\n.cm-s-mdn-like .cm-property { color: #905; }\n.cm-s-mdn-like .cm-qualifier { color: #690; }\n\n.cm-s-mdn-like .cm-operator { color: #cda869; }\n.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; }\n.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; }\n.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/\n.cm-s-mdn-like .cm-meta { color: #000; } /*?*/\n.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/\n.cm-s-mdn-like .cm-tag { color: #997643; }\n.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/\n.cm-s-mdn-like .cm-header { color: #FF6400; }\n.cm-s-mdn-like .cm-hr { color: #AEAEAE; }\n.cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; }\n.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; }\n\ndiv.cm-s-mdn-like .CodeMirror-activeline-background { background: #efefff; }\ndiv.cm-s-mdn-like span.CodeMirror-matchingbracket { outline:1px solid grey; color: inherit; }\n\n.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/midnight.css",
    "content": "/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */\n\n/*<!--activeline-->*/\n.cm-s-midnight .CodeMirror-activeline-background { background: #253540; }\n\n.cm-s-midnight.CodeMirror {\n    background: #0F192A;\n    color: #D1EDFF;\n}\n\n.cm-s-midnight div.CodeMirror-selected { background: #314D67; }\n.cm-s-midnight .CodeMirror-line::selection, .cm-s-midnight .CodeMirror-line > span::selection, .cm-s-midnight .CodeMirror-line > span > span::selection { background: rgba(49, 77, 103, .99); }\n.cm-s-midnight .CodeMirror-line::-moz-selection, .cm-s-midnight .CodeMirror-line > span::-moz-selection, .cm-s-midnight .CodeMirror-line > span > span::-moz-selection { background: rgba(49, 77, 103, .99); }\n.cm-s-midnight .CodeMirror-gutters { background: #0F192A; border-right: 1px solid; }\n.cm-s-midnight .CodeMirror-guttermarker { color: white; }\n.cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; }\n.cm-s-midnight .CodeMirror-linenumber { color: #D0D0D0; }\n.cm-s-midnight .CodeMirror-cursor { border-left: 1px solid #F8F8F0; }\n\n.cm-s-midnight span.cm-comment { color: #428BDD; }\n.cm-s-midnight span.cm-atom { color: #AE81FF; }\n.cm-s-midnight span.cm-number { color: #D1EDFF; }\n\n.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute { color: #A6E22E; }\n.cm-s-midnight span.cm-keyword { color: #E83737; }\n.cm-s-midnight span.cm-string { color: #1DC116; }\n\n.cm-s-midnight span.cm-variable { color: #FFAA3E; }\n.cm-s-midnight span.cm-variable-2 { color: #FFAA3E; }\n.cm-s-midnight span.cm-def { color: #4DD; }\n.cm-s-midnight span.cm-bracket { color: #D1EDFF; }\n.cm-s-midnight span.cm-tag { color: #449; }\n.cm-s-midnight span.cm-link { color: #AE81FF; }\n.cm-s-midnight span.cm-error { background: #F92672; color: #F8F8F0; }\n\n.cm-s-midnight .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/monokai.css",
    "content": "/* Based on Sublime Text's Monokai theme */\n\n.cm-s-monokai.CodeMirror { background: #272822; color: #f8f8f2; }\n.cm-s-monokai div.CodeMirror-selected { background: #49483E; }\n.cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); }\n.cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); }\n.cm-s-monokai .CodeMirror-gutters { background: #272822; border-right: 0px; }\n.cm-s-monokai .CodeMirror-guttermarker { color: white; }\n.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; }\n.cm-s-monokai .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; }\n\n.cm-s-monokai span.cm-comment { color: #75715e; }\n.cm-s-monokai span.cm-atom { color: #ae81ff; }\n.cm-s-monokai span.cm-number { color: #ae81ff; }\n\n.cm-s-monokai span.cm-comment.cm-attribute { color: #97b757; }\n.cm-s-monokai span.cm-comment.cm-def { color: #bc9262; }\n.cm-s-monokai span.cm-comment.cm-tag { color: #bc6283; }\n.cm-s-monokai span.cm-comment.cm-type { color: #5998a6; }\n\n.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; }\n.cm-s-monokai span.cm-keyword { color: #f92672; }\n.cm-s-monokai span.cm-builtin { color: #66d9ef; }\n.cm-s-monokai span.cm-string { color: #e6db74; }\n\n.cm-s-monokai span.cm-variable { color: #f8f8f2; }\n.cm-s-monokai span.cm-variable-2 { color: #9effff; }\n.cm-s-monokai span.cm-variable-3, .cm-s-monokai span.cm-type { color: #66d9ef; }\n.cm-s-monokai span.cm-def { color: #fd971f; }\n.cm-s-monokai span.cm-bracket { color: #f8f8f2; }\n.cm-s-monokai span.cm-tag { color: #f92672; }\n.cm-s-monokai span.cm-header { color: #ae81ff; }\n.cm-s-monokai span.cm-link { color: #ae81ff; }\n.cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; }\n\n.cm-s-monokai .CodeMirror-activeline-background { background: #373831; }\n.cm-s-monokai .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/moxer.css",
    "content": "/*\n  Name:       Moxer Theme\n  Author:     Mattia Astorino (http://github.com/equinusocio)\n  Website:    https://github.com/moxer-theme/moxer-code\n*/\n\n.cm-s-moxer.CodeMirror {\n  background-color: #090A0F;\n  color: #8E95B4;\n  line-height: 1.8;\n}\n\n.cm-s-moxer .CodeMirror-gutters {\n  background: #090A0F;\n  color: #35394B;\n  border: none;\n}\n\n.cm-s-moxer .CodeMirror-guttermarker,\n.cm-s-moxer .CodeMirror-guttermarker-subtle,\n.cm-s-moxer .CodeMirror-linenumber {\n  color: #35394B;\n}\n\n\n.cm-s-moxer .CodeMirror-cursor {\n  border-left: 1px solid #FFCC00;\n}\n\n.cm-s-moxer div.CodeMirror-selected {\n  background: rgba(128, 203, 196, 0.2);\n}\n\n.cm-s-moxer.CodeMirror-focused div.CodeMirror-selected {\n  background: #212431;\n}\n\n.cm-s-moxer .CodeMirror-line::selection,\n.cm-s-moxer .CodeMirror-line>span::selection,\n.cm-s-moxer .CodeMirror-line>span>span::selection {\n  background: #212431;\n}\n\n.cm-s-moxer .CodeMirror-line::-moz-selection,\n.cm-s-moxer .CodeMirror-line>span::-moz-selection,\n.cm-s-moxer .CodeMirror-line>span>span::-moz-selection {\n  background: #212431;\n}\n\n.cm-s-moxer .CodeMirror-activeline-background,\n.cm-s-moxer .CodeMirror-activeline-gutter .CodeMirror-linenumber {\n  background: rgba(33, 36, 49, 0.5);\n}\n\n.cm-s-moxer .cm-keyword {\n  color: #D46C6C;\n}\n\n.cm-s-moxer .cm-operator {\n  color: #D46C6C;\n}\n\n.cm-s-moxer .cm-variable-2 {\n  color: #81C5DA;\n}\n\n\n.cm-s-moxer .cm-variable-3,\n.cm-s-moxer .cm-type {\n  color: #f07178;\n}\n\n.cm-s-moxer .cm-builtin {\n  color: #FFCB6B;\n}\n\n.cm-s-moxer .cm-atom {\n  color: #A99BE2;\n}\n\n.cm-s-moxer .cm-number {\n  color: #7CA4C0;\n}\n\n.cm-s-moxer .cm-def {\n  color: #F5DFA5;\n}\n\n.cm-s-moxer .CodeMirror-line .cm-def ~ .cm-def {\n  color: #81C5DA;\n}\n\n.cm-s-moxer .cm-string {\n  color: #B2E4AE;\n}\n\n.cm-s-moxer .cm-string-2 {\n  color: #f07178;\n}\n\n.cm-s-moxer .cm-comment {\n  color: #3F445A;\n}\n\n.cm-s-moxer .cm-variable {\n  color: #8E95B4;\n}\n\n.cm-s-moxer .cm-tag {\n  color: #FF5370;\n}\n\n.cm-s-moxer .cm-meta {\n  color: #FFCB6B;\n}\n\n.cm-s-moxer .cm-attribute {\n  color: #C792EA;\n}\n\n.cm-s-moxer .cm-property {\n  color: #81C5DA;\n}\n\n.cm-s-moxer .cm-qualifier {\n  color: #DECB6B;\n}\n\n.cm-s-moxer .cm-variable-3,\n.cm-s-moxer .cm-type {\n  color: #DECB6B;\n}\n\n\n.cm-s-moxer .cm-error {\n  color: rgba(255, 255, 255, 1.0);\n  background-color: #FF5370;\n}\n\n.cm-s-moxer .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}"
  },
  {
    "path": "public/vendor/codemirror/theme/neat.css",
    "content": ".cm-s-neat span.cm-comment { color: #a86; }\n.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; }\n.cm-s-neat span.cm-string { color: #a22; }\n.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; }\n.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; }\n.cm-s-neat span.cm-variable { color: black; }\n.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; }\n.cm-s-neat span.cm-meta { color: #555; }\n.cm-s-neat span.cm-link { color: #3a3; }\n\n.cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; }\n.cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/neo.css",
    "content": "/* neo theme for codemirror */\n\n/* Color scheme */\n\n.cm-s-neo.CodeMirror {\n  background-color:#ffffff;\n  color:#2e383c;\n  line-height:1.4375;\n}\n.cm-s-neo .cm-comment { color:#75787b; }\n.cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; }\n.cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; }\n.cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; }\n.cm-s-neo .cm-string { color:#b35e14; }\n.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; }\n\n\n/* Editor styling */\n\n.cm-s-neo pre {\n  padding:0;\n}\n\n.cm-s-neo .CodeMirror-gutters {\n  border:none;\n  border-right:10px solid transparent;\n  background-color:transparent;\n}\n\n.cm-s-neo .CodeMirror-linenumber {\n  padding:0;\n  color:#e0e2e5;\n}\n\n.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; }\n.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; }\n\n.cm-s-neo .CodeMirror-cursor {\n  width: auto;\n  border: 0;\n  background: rgba(155,157,162,0.37);\n  z-index: 1;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/night.css",
    "content": "/* Loosely based on the Midnight Textmate theme */\n\n.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; }\n.cm-s-night div.CodeMirror-selected { background: #447; }\n.cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); }\n.cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); }\n.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }\n.cm-s-night .CodeMirror-guttermarker { color: white; }\n.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; }\n.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; }\n.cm-s-night .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-night span.cm-comment { color: #8900d1; }\n.cm-s-night span.cm-atom { color: #845dc4; }\n.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }\n.cm-s-night span.cm-keyword { color: #599eff; }\n.cm-s-night span.cm-string { color: #37f14a; }\n.cm-s-night span.cm-meta { color: #7678e2; }\n.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }\n.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def, .cm-s-night span.cm-type { color: white; }\n.cm-s-night span.cm-bracket { color: #8da6ce; }\n.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }\n.cm-s-night span.cm-link { color: #845dc4; }\n.cm-s-night span.cm-error { color: #9d1e15; }\n\n.cm-s-night .CodeMirror-activeline-background { background: #1C005A; }\n.cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/nord.css",
    "content": "/* Based on arcticicestudio's Nord theme */\n/* https://github.com/arcticicestudio/nord */\n\n.cm-s-nord.CodeMirror { background: #2e3440; color: #d8dee9; }\n.cm-s-nord div.CodeMirror-selected { background: #434c5e; }\n.cm-s-nord .CodeMirror-line::selection, .cm-s-nord .CodeMirror-line > span::selection, .cm-s-nord .CodeMirror-line > span > span::selection { background: #3b4252; }\n.cm-s-nord .CodeMirror-line::-moz-selection, .cm-s-nord .CodeMirror-line > span::-moz-selection, .cm-s-nord .CodeMirror-line > span > span::-moz-selection { background: #3b4252; }\n.cm-s-nord .CodeMirror-gutters { background: #2e3440; border-right: 0px; }\n.cm-s-nord .CodeMirror-guttermarker { color: #4c566a; }\n.cm-s-nord .CodeMirror-guttermarker-subtle { color: #4c566a; }\n.cm-s-nord .CodeMirror-linenumber { color: #4c566a; }\n.cm-s-nord .CodeMirror-cursor { border-left: 1px solid #f8f8f0; }\n\n.cm-s-nord span.cm-comment { color: #4c566a; }\n.cm-s-nord span.cm-atom { color: #b48ead; }\n.cm-s-nord span.cm-number { color: #b48ead; }\n\n.cm-s-nord span.cm-comment.cm-attribute { color: #97b757; }\n.cm-s-nord span.cm-comment.cm-def { color: #bc9262; }\n.cm-s-nord span.cm-comment.cm-tag { color: #bc6283; }\n.cm-s-nord span.cm-comment.cm-type { color: #5998a6; }\n\n.cm-s-nord span.cm-property, .cm-s-nord span.cm-attribute { color: #8FBCBB; }\n.cm-s-nord span.cm-keyword { color: #81A1C1; }\n.cm-s-nord span.cm-builtin { color: #81A1C1; }\n.cm-s-nord span.cm-string { color: #A3BE8C; }\n\n.cm-s-nord span.cm-variable { color: #d8dee9; }\n.cm-s-nord span.cm-variable-2 { color: #d8dee9; }\n.cm-s-nord span.cm-variable-3, .cm-s-nord span.cm-type { color: #d8dee9; }\n.cm-s-nord span.cm-def { color: #8FBCBB; }\n.cm-s-nord span.cm-bracket { color: #81A1C1; }\n.cm-s-nord span.cm-tag { color: #bf616a; }\n.cm-s-nord span.cm-header { color: #b48ead; }\n.cm-s-nord span.cm-link { color: #b48ead; }\n.cm-s-nord span.cm-error { background: #bf616a; color: #f8f8f0; }\n\n.cm-s-nord .CodeMirror-activeline-background { background: #3b4252; }\n.cm-s-nord .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/oceanic-next.css",
    "content": "/*\n\n    Name:       oceanic-next\n    Author:     Filype Pereira (https://github.com/fpereira1)\n\n    Original oceanic-next color scheme by Dmitri Voronianski (https://github.com/voronianski/oceanic-next-color-scheme)\n\n*/\n\n.cm-s-oceanic-next.CodeMirror { background: #304148; color: #f8f8f2; }\n.cm-s-oceanic-next div.CodeMirror-selected { background: rgba(101, 115, 126, 0.33); }\n.cm-s-oceanic-next .CodeMirror-line::selection, .cm-s-oceanic-next .CodeMirror-line > span::selection, .cm-s-oceanic-next .CodeMirror-line > span > span::selection { background: rgba(101, 115, 126, 0.33); }\n.cm-s-oceanic-next .CodeMirror-line::-moz-selection, .cm-s-oceanic-next .CodeMirror-line > span::-moz-selection, .cm-s-oceanic-next .CodeMirror-line > span > span::-moz-selection { background: rgba(101, 115, 126, 0.33); }\n.cm-s-oceanic-next .CodeMirror-gutters { background: #304148; border-right: 10px; }\n.cm-s-oceanic-next .CodeMirror-guttermarker { color: white; }\n.cm-s-oceanic-next .CodeMirror-guttermarker-subtle { color: #d0d0d0; }\n.cm-s-oceanic-next .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-oceanic-next .CodeMirror-cursor { border-left: 1px solid #f8f8f0; }\n.cm-s-oceanic-next.cm-fat-cursor .CodeMirror-cursor { background-color: #a2a8a175 !important; }\n.cm-s-oceanic-next .cm-animate-fat-cursor { background-color: #a2a8a175 !important; }\n\n.cm-s-oceanic-next span.cm-comment { color: #65737E; }\n.cm-s-oceanic-next span.cm-atom { color: #C594C5; }\n.cm-s-oceanic-next span.cm-number { color: #F99157; }\n\n.cm-s-oceanic-next span.cm-property { color: #99C794; }\n.cm-s-oceanic-next span.cm-attribute,\n.cm-s-oceanic-next span.cm-keyword { color: #C594C5; }\n.cm-s-oceanic-next span.cm-builtin { color: #66d9ef; }\n.cm-s-oceanic-next span.cm-string { color: #99C794; }\n\n.cm-s-oceanic-next span.cm-variable,\n.cm-s-oceanic-next span.cm-variable-2,\n.cm-s-oceanic-next span.cm-variable-3 { color: #f8f8f2; }\n.cm-s-oceanic-next span.cm-def { color: #6699CC; }\n.cm-s-oceanic-next span.cm-bracket { color: #5FB3B3; }\n.cm-s-oceanic-next span.cm-tag { color: #C594C5; }\n.cm-s-oceanic-next span.cm-header { color: #C594C5; }\n.cm-s-oceanic-next span.cm-link { color: #C594C5; }\n.cm-s-oceanic-next span.cm-error { background: #C594C5; color: #f8f8f0; }\n\n.cm-s-oceanic-next .CodeMirror-activeline-background { background: rgba(101, 115, 126, 0.33); }\n.cm-s-oceanic-next .CodeMirror-matchingbracket {\n  text-decoration: underline;\n  color: white !important;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/panda-syntax.css",
    "content": "/*\n\tName:       Panda Syntax\n\tAuthor:     Siamak Mokhtari (http://github.com/siamak/)\n\tCodeMirror template by Siamak Mokhtari (https://github.com/siamak/atom-panda-syntax)\n*/\n.cm-s-panda-syntax {\n\tbackground: #292A2B;\n\tcolor: #E6E6E6;\n\tline-height: 1.5;\n\tfont-family: 'Operator Mono', 'Source Code Pro', Menlo, Monaco, Consolas, Courier New, monospace;\n}\n.cm-s-panda-syntax .CodeMirror-cursor { border-color: #ff2c6d; }\n.cm-s-panda-syntax .CodeMirror-activeline-background {\n\tbackground: rgba(99, 123, 156, 0.1);\n}\n.cm-s-panda-syntax .CodeMirror-selected {\n\tbackground: #FFF;\n}\n.cm-s-panda-syntax .cm-comment {\n\tfont-style: italic;\n\tcolor: #676B79;\n}\n.cm-s-panda-syntax .cm-operator {\n\tcolor: #f3f3f3;\n}\n.cm-s-panda-syntax .cm-string {\n\tcolor: #19F9D8;\n}\n.cm-s-panda-syntax .cm-string-2 {\n    color: #FFB86C;\n}\n\n.cm-s-panda-syntax .cm-tag {\n\tcolor: #ff2c6d;\n}\n.cm-s-panda-syntax .cm-meta {\n\tcolor: #b084eb;\n}\n\n.cm-s-panda-syntax .cm-number {\n\tcolor: #FFB86C;\n}\n.cm-s-panda-syntax .cm-atom {\n\tcolor: #ff2c6d;\n}\n.cm-s-panda-syntax .cm-keyword {\n\tcolor: #FF75B5;\n}\n.cm-s-panda-syntax .cm-variable {\n\tcolor: #ffb86c;\n}\n.cm-s-panda-syntax .cm-variable-2 {\n\tcolor: #ff9ac1;\n}\n.cm-s-panda-syntax .cm-variable-3, .cm-s-panda-syntax .cm-type {\n\tcolor: #ff9ac1;\n}\n\n.cm-s-panda-syntax .cm-def {\n\tcolor: #e6e6e6;\n}\n.cm-s-panda-syntax .cm-property {\n\tcolor: #f3f3f3;\n}\n.cm-s-panda-syntax .cm-unit {\n    color: #ffb86c;\n}\n\n.cm-s-panda-syntax .cm-attribute {\n    color: #ffb86c;\n}\n\n.cm-s-panda-syntax .CodeMirror-matchingbracket {\n    border-bottom: 1px dotted #19F9D8;\n    padding-bottom: 2px;\n    color: #e6e6e6;\n}\n.cm-s-panda-syntax .CodeMirror-gutters {\n    background: #292a2b;\n    border-right-color: rgba(255, 255, 255, 0.1);\n}\n.cm-s-panda-syntax .CodeMirror-linenumber {\n    color: #e6e6e6;\n    opacity: 0.6;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/paraiso-dark.css",
    "content": "/*\n\n    Name:       Paraíso (Dark)\n    Author:     Jan T. Sott\n\n    Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)\n    Inspired by the art of Rubens LP (http://www.rubenslp.com.br)\n\n*/\n\n.cm-s-paraiso-dark.CodeMirror { background: #2f1e2e; color: #b9b6b0; }\n.cm-s-paraiso-dark div.CodeMirror-selected { background: #41323f; }\n.cm-s-paraiso-dark .CodeMirror-line::selection, .cm-s-paraiso-dark .CodeMirror-line > span::selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::selection { background: rgba(65, 50, 63, .99); }\n.cm-s-paraiso-dark .CodeMirror-line::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(65, 50, 63, .99); }\n.cm-s-paraiso-dark .CodeMirror-gutters { background: #2f1e2e; border-right: 0px; }\n.cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; }\n.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; }\n.cm-s-paraiso-dark .CodeMirror-linenumber { color: #776e71; }\n.cm-s-paraiso-dark .CodeMirror-cursor { border-left: 1px solid #8d8687; }\n\n.cm-s-paraiso-dark span.cm-comment { color: #e96ba8; }\n.cm-s-paraiso-dark span.cm-atom { color: #815ba4; }\n.cm-s-paraiso-dark span.cm-number { color: #815ba4; }\n\n.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute { color: #48b685; }\n.cm-s-paraiso-dark span.cm-keyword { color: #ef6155; }\n.cm-s-paraiso-dark span.cm-string { color: #fec418; }\n\n.cm-s-paraiso-dark span.cm-variable { color: #48b685; }\n.cm-s-paraiso-dark span.cm-variable-2 { color: #06b6ef; }\n.cm-s-paraiso-dark span.cm-def { color: #f99b15; }\n.cm-s-paraiso-dark span.cm-bracket { color: #b9b6b0; }\n.cm-s-paraiso-dark span.cm-tag { color: #ef6155; }\n.cm-s-paraiso-dark span.cm-link { color: #815ba4; }\n.cm-s-paraiso-dark span.cm-error { background: #ef6155; color: #8d8687; }\n\n.cm-s-paraiso-dark .CodeMirror-activeline-background { background: #4D344A; }\n.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/paraiso-light.css",
    "content": "/*\n\n    Name:       Paraíso (Light)\n    Author:     Jan T. Sott\n\n    Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)\n    Inspired by the art of Rubens LP (http://www.rubenslp.com.br)\n\n*/\n\n.cm-s-paraiso-light.CodeMirror { background: #e7e9db; color: #41323f; }\n.cm-s-paraiso-light div.CodeMirror-selected { background: #b9b6b0; }\n.cm-s-paraiso-light .CodeMirror-line::selection, .cm-s-paraiso-light .CodeMirror-line > span::selection, .cm-s-paraiso-light .CodeMirror-line > span > span::selection { background: #b9b6b0; }\n.cm-s-paraiso-light .CodeMirror-line::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span > span::-moz-selection { background: #b9b6b0; }\n.cm-s-paraiso-light .CodeMirror-gutters { background: #e7e9db; border-right: 0px; }\n.cm-s-paraiso-light .CodeMirror-guttermarker { color: black; }\n.cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; }\n.cm-s-paraiso-light .CodeMirror-linenumber { color: #8d8687; }\n.cm-s-paraiso-light .CodeMirror-cursor { border-left: 1px solid #776e71; }\n\n.cm-s-paraiso-light span.cm-comment { color: #e96ba8; }\n.cm-s-paraiso-light span.cm-atom { color: #815ba4; }\n.cm-s-paraiso-light span.cm-number { color: #815ba4; }\n\n.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute { color: #48b685; }\n.cm-s-paraiso-light span.cm-keyword { color: #ef6155; }\n.cm-s-paraiso-light span.cm-string { color: #fec418; }\n\n.cm-s-paraiso-light span.cm-variable { color: #48b685; }\n.cm-s-paraiso-light span.cm-variable-2 { color: #06b6ef; }\n.cm-s-paraiso-light span.cm-def { color: #f99b15; }\n.cm-s-paraiso-light span.cm-bracket { color: #41323f; }\n.cm-s-paraiso-light span.cm-tag { color: #ef6155; }\n.cm-s-paraiso-light span.cm-link { color: #815ba4; }\n.cm-s-paraiso-light span.cm-error { background: #ef6155; color: #776e71; }\n\n.cm-s-paraiso-light .CodeMirror-activeline-background { background: #CFD1C4; }\n.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/pastel-on-dark.css",
    "content": "/**\n * Pastel On Dark theme ported from ACE editor\n * @license MIT\n * @copyright AtomicPages LLC 2014\n * @author Dennis Thompson, AtomicPages LLC\n * @version 1.1\n * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme\n */\n\n.cm-s-pastel-on-dark.CodeMirror {\n\tbackground: #2c2827;\n\tcolor: #8F938F;\n\tline-height: 1.5;\n}\n.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2); }\n.cm-s-pastel-on-dark .CodeMirror-line::selection, .cm-s-pastel-on-dark .CodeMirror-line > span::selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::selection { background: rgba(221,240,255,0.2); }\n.cm-s-pastel-on-dark .CodeMirror-line::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(221,240,255,0.2); }\n\n.cm-s-pastel-on-dark .CodeMirror-gutters {\n\tbackground: #34302f;\n\tborder-right: 0px;\n\tpadding: 0 3px;\n}\n.cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; }\n.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; }\n.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; }\n.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7; }\n.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; }\n.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; }\n.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; }\n.cm-s-pastel-on-dark span.cm-property { color: #8F938F; }\n.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; }\n.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; }\n.cm-s-pastel-on-dark span.cm-string { color: #66A968; }\n.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; }\n.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; }\n.cm-s-pastel-on-dark span.cm-variable-3, .cm-s-pastel-on-dark span.cm-type { color: #DE8E30; }\n.cm-s-pastel-on-dark span.cm-def { color: #757aD8; }\n.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; }\n.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; }\n.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; }\n.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; }\n.cm-s-pastel-on-dark span.cm-error {\n\tbackground: #757aD8;\n\tcolor: #f8f8f0;\n}\n.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031); }\n.cm-s-pastel-on-dark .CodeMirror-matchingbracket {\n\tborder: 1px solid rgba(255,255,255,0.25);\n\tcolor: #8F938F !important;\n\tmargin: -1px -1px 0 -1px;\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/railscasts.css",
    "content": "/*\n\n    Name:       Railscasts\n    Author:     Ryan Bates (http://railscasts.com)\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-railscasts.CodeMirror {background: #2b2b2b; color: #f4f1ed;}\n.cm-s-railscasts div.CodeMirror-selected {background: #272935 !important;}\n.cm-s-railscasts .CodeMirror-gutters {background: #2b2b2b; border-right: 0px;}\n.cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;}\n.cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;}\n\n.cm-s-railscasts span.cm-comment {color: #bc9458;}\n.cm-s-railscasts span.cm-atom {color: #b6b3eb;}\n.cm-s-railscasts span.cm-number {color: #b6b3eb;}\n\n.cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;}\n.cm-s-railscasts span.cm-keyword {color: #da4939;}\n.cm-s-railscasts span.cm-string {color: #ffc66d;}\n\n.cm-s-railscasts span.cm-variable {color: #a5c261;}\n.cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;}\n.cm-s-railscasts span.cm-def {color: #cc7833;}\n.cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;}\n.cm-s-railscasts span.cm-bracket {color: #f4f1ed;}\n.cm-s-railscasts span.cm-tag {color: #da4939;}\n.cm-s-railscasts span.cm-link {color: #b6b3eb;}\n\n.cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}\n.cm-s-railscasts .CodeMirror-activeline-background { background: #303040; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/rubyblue.css",
    "content": ".cm-s-rubyblue.CodeMirror { background: #112435; color: white; }\n.cm-s-rubyblue div.CodeMirror-selected { background: #38566F; }\n.cm-s-rubyblue .CodeMirror-line::selection, .cm-s-rubyblue .CodeMirror-line > span::selection, .cm-s-rubyblue .CodeMirror-line > span > span::selection { background: rgba(56, 86, 111, 0.99); }\n.cm-s-rubyblue .CodeMirror-line::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 86, 111, 0.99); }\n.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; }\n.cm-s-rubyblue .CodeMirror-guttermarker { color: white; }\n.cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; }\n.cm-s-rubyblue .CodeMirror-linenumber { color: white; }\n.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; }\n.cm-s-rubyblue span.cm-atom { color: #F4C20B; }\n.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; }\n.cm-s-rubyblue span.cm-keyword { color: #F0F; }\n.cm-s-rubyblue span.cm-string { color: #F08047; }\n.cm-s-rubyblue span.cm-meta { color: #F0F; }\n.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; }\n.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def, .cm-s-rubyblue span.cm-type { color: white; }\n.cm-s-rubyblue span.cm-bracket { color: #F0F; }\n.cm-s-rubyblue span.cm-link { color: #F4C20B; }\n.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; }\n.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; }\n.cm-s-rubyblue span.cm-error { color: #AF2018; }\n\n.cm-s-rubyblue .CodeMirror-activeline-background { background: #173047; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/seti.css",
    "content": "/*\n\n    Name:       seti\n    Author:     Michael Kaminsky (http://github.com/mkaminsky11)\n\n    Original seti color scheme by Jesse Weed (https://github.com/jesseweed/seti-syntax)\n\n*/\n\n\n.cm-s-seti.CodeMirror {\n  background-color: #151718 !important;\n  color: #CFD2D1 !important;\n  border: none;\n}\n.cm-s-seti .CodeMirror-gutters {\n  color: #404b53;\n  background-color: #0E1112;\n  border: none;\n}\n.cm-s-seti .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-seti .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-seti.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-seti .CodeMirror-line::selection, .cm-s-seti .CodeMirror-line > span::selection, .cm-s-seti .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-seti .CodeMirror-line::-moz-selection, .cm-s-seti .CodeMirror-line > span::-moz-selection, .cm-s-seti .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-seti span.cm-comment { color: #41535b; }\n.cm-s-seti span.cm-string, .cm-s-seti span.cm-string-2 { color: #55b5db; }\n.cm-s-seti span.cm-number { color: #cd3f45; }\n.cm-s-seti span.cm-variable { color: #55b5db; }\n.cm-s-seti span.cm-variable-2 { color: #a074c4; }\n.cm-s-seti span.cm-def { color: #55b5db; }\n.cm-s-seti span.cm-keyword { color: #ff79c6; }\n.cm-s-seti span.cm-operator { color: #9fca56; }\n.cm-s-seti span.cm-keyword { color: #e6cd69; }\n.cm-s-seti span.cm-atom { color: #cd3f45; }\n.cm-s-seti span.cm-meta { color: #55b5db; }\n.cm-s-seti span.cm-tag { color: #55b5db; }\n.cm-s-seti span.cm-attribute { color: #9fca56; }\n.cm-s-seti span.cm-qualifier { color: #9fca56; }\n.cm-s-seti span.cm-property { color: #a074c4; }\n.cm-s-seti span.cm-variable-3, .cm-s-seti span.cm-type { color: #9fca56; }\n.cm-s-seti span.cm-builtin { color: #9fca56; }\n.cm-s-seti .CodeMirror-activeline-background { background: #101213; }\n.cm-s-seti .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/shadowfox.css",
    "content": "/*\n\n    Name:       shadowfox\n    Author:     overdodactyl (http://github.com/overdodactyl)\n\n    Original shadowfox color scheme by Firefox\n\n*/\n\n.cm-s-shadowfox.CodeMirror { background: #2a2a2e; color: #b1b1b3; }\n.cm-s-shadowfox div.CodeMirror-selected { background: #353B48; }\n.cm-s-shadowfox .CodeMirror-line::selection, .cm-s-shadowfox .CodeMirror-line > span::selection, .cm-s-shadowfox .CodeMirror-line > span > span::selection { background: #353B48; }\n.cm-s-shadowfox .CodeMirror-line::-moz-selection, .cm-s-shadowfox .CodeMirror-line > span::-moz-selection, .cm-s-shadowfox .CodeMirror-line > span > span::-moz-selection { background: #353B48; }\n.cm-s-shadowfox .CodeMirror-gutters { background: #0c0c0d ; border-right: 1px solid #0c0c0d; }\n.cm-s-shadowfox .CodeMirror-guttermarker { color: #555; }\n.cm-s-shadowfox .CodeMirror-linenumber { color: #939393; }\n.cm-s-shadowfox .CodeMirror-cursor { border-left: 1px solid #fff; }\n\n.cm-s-shadowfox span.cm-comment { color: #939393; }\n.cm-s-shadowfox span.cm-atom { color: #FF7DE9; }\n.cm-s-shadowfox span.cm-quote { color: #FF7DE9; }\n.cm-s-shadowfox span.cm-builtin { color: #FF7DE9; }\n.cm-s-shadowfox span.cm-attribute { color: #FF7DE9; }\n.cm-s-shadowfox span.cm-keyword { color: #FF7DE9; }\n.cm-s-shadowfox span.cm-error { color: #FF7DE9; }\n\n.cm-s-shadowfox span.cm-number { color: #6B89FF; }\n.cm-s-shadowfox span.cm-string { color: #6B89FF; }\n.cm-s-shadowfox span.cm-string-2 { color: #6B89FF; }\n\n.cm-s-shadowfox span.cm-meta { color: #939393; }\n.cm-s-shadowfox span.cm-hr { color: #939393; }\n\n.cm-s-shadowfox span.cm-header { color: #75BFFF; }\n.cm-s-shadowfox span.cm-qualifier { color: #75BFFF; }\n.cm-s-shadowfox span.cm-variable-2 { color: #75BFFF; }\n\n.cm-s-shadowfox span.cm-property { color: #86DE74; }\n\n.cm-s-shadowfox span.cm-def { color: #75BFFF; }\n.cm-s-shadowfox span.cm-bracket { color: #75BFFF; }\n.cm-s-shadowfox span.cm-tag { color: #75BFFF; }\n.cm-s-shadowfox span.cm-link:visited { color: #75BFFF; }\n\n.cm-s-shadowfox span.cm-variable { color: #B98EFF; }\n.cm-s-shadowfox span.cm-variable-3 { color: #d7d7db; }\n.cm-s-shadowfox span.cm-link { color: #737373; }\n.cm-s-shadowfox span.cm-operator { color: #b1b1b3; }\n.cm-s-shadowfox span.cm-special { color: #d7d7db; }\n\n.cm-s-shadowfox .CodeMirror-activeline-background { background: rgba(185, 215, 253, .15) }\n.cm-s-shadowfox .CodeMirror-matchingbracket { outline: solid 1px rgba(255, 255, 255, .25); color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/solarized.css",
    "content": "/*\nSolarized theme for code-mirror\nhttp://ethanschoonover.com/solarized\n*/\n\n/*\nSolarized color palette\nhttp://ethanschoonover.com/solarized/img/solarized-palette.png\n*/\n\n.solarized.base03 { color: #002b36; }\n.solarized.base02 { color: #073642; }\n.solarized.base01 { color: #586e75; }\n.solarized.base00 { color: #657b83; }\n.solarized.base0 { color: #839496; }\n.solarized.base1 { color: #93a1a1; }\n.solarized.base2 { color: #eee8d5; }\n.solarized.base3  { color: #fdf6e3; }\n.solarized.solar-yellow  { color: #b58900; }\n.solarized.solar-orange  { color: #cb4b16; }\n.solarized.solar-red { color: #dc322f; }\n.solarized.solar-magenta { color: #d33682; }\n.solarized.solar-violet  { color: #6c71c4; }\n.solarized.solar-blue { color: #268bd2; }\n.solarized.solar-cyan { color: #2aa198; }\n.solarized.solar-green { color: #859900; }\n\n/* Color scheme for code-mirror */\n\n.cm-s-solarized {\n  line-height: 1.45em;\n  color-profile: sRGB;\n  rendering-intent: auto;\n}\n.cm-s-solarized.cm-s-dark {\n  color: #839496;\n  background-color: #002b36;\n}\n.cm-s-solarized.cm-s-light {\n  background-color: #fdf6e3;\n  color: #657b83;\n}\n\n.cm-s-solarized .CodeMirror-widget {\n  text-shadow: none;\n}\n\n.cm-s-solarized .cm-header { color: #586e75; }\n.cm-s-solarized .cm-quote { color: #93a1a1; }\n\n.cm-s-solarized .cm-keyword { color: #cb4b16; }\n.cm-s-solarized .cm-atom { color: #d33682; }\n.cm-s-solarized .cm-number { color: #d33682; }\n.cm-s-solarized .cm-def { color: #2aa198; }\n\n.cm-s-solarized .cm-variable { color: #839496; }\n.cm-s-solarized .cm-variable-2 { color: #b58900; }\n.cm-s-solarized .cm-variable-3, .cm-s-solarized .cm-type { color: #6c71c4; }\n\n.cm-s-solarized .cm-property { color: #2aa198; }\n.cm-s-solarized .cm-operator { color: #6c71c4; }\n\n.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; }\n\n.cm-s-solarized .cm-string { color: #859900; }\n.cm-s-solarized .cm-string-2 { color: #b58900; }\n\n.cm-s-solarized .cm-meta { color: #859900; }\n.cm-s-solarized .cm-qualifier { color: #b58900; }\n.cm-s-solarized .cm-builtin { color: #d33682; }\n.cm-s-solarized .cm-bracket { color: #cb4b16; }\n.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; }\n.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; }\n.cm-s-solarized .cm-tag { color: #93a1a1; }\n.cm-s-solarized .cm-attribute { color: #2aa198; }\n.cm-s-solarized .cm-hr {\n  color: transparent;\n  border-top: 1px solid #586e75;\n  display: block;\n}\n.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; }\n.cm-s-solarized .cm-special { color: #6c71c4; }\n.cm-s-solarized .cm-em {\n  color: #999;\n  text-decoration: underline;\n  text-decoration-style: dotted;\n}\n.cm-s-solarized .cm-error,\n.cm-s-solarized .cm-invalidchar {\n  color: #586e75;\n  border-bottom: 1px dotted #dc322f;\n}\n\n.cm-s-solarized.cm-s-dark div.CodeMirror-selected { background: #073642; }\n.cm-s-solarized.cm-s-dark.CodeMirror ::selection { background: rgba(7, 54, 66, 0.99); }\n.cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection, .cm-s-dark .CodeMirror-line > span::-moz-selection, .cm-s-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(7, 54, 66, 0.99); }\n\n.cm-s-solarized.cm-s-light div.CodeMirror-selected { background: #eee8d5; }\n.cm-s-solarized.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: #eee8d5; }\n.cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-light .CodeMirror-line > span::-moz-selection, .cm-s-light .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; }\n\n/* Editor styling */\n\n\n\n/* Little shadow on the view-port of the buffer view */\n.cm-s-solarized.CodeMirror {\n  -moz-box-shadow: inset 7px 0 12px -6px #000;\n  -webkit-box-shadow: inset 7px 0 12px -6px #000;\n  box-shadow: inset 7px 0 12px -6px #000;\n}\n\n/* Remove gutter border */\n.cm-s-solarized .CodeMirror-gutters {\n  border-right: 0;\n}\n\n/* Gutter colors and line number styling based of color scheme (dark / light) */\n\n/* Dark */\n.cm-s-solarized.cm-s-dark .CodeMirror-gutters {\n  background-color: #073642;\n}\n\n.cm-s-solarized.cm-s-dark .CodeMirror-linenumber {\n  color: #586e75;\n}\n\n/* Light */\n.cm-s-solarized.cm-s-light .CodeMirror-gutters {\n  background-color: #eee8d5;\n}\n\n.cm-s-solarized.cm-s-light .CodeMirror-linenumber {\n  color: #839496;\n}\n\n/* Common */\n.cm-s-solarized .CodeMirror-linenumber {\n  padding: 0 5px;\n}\n.cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; }\n.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; }\n.cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; }\n\n.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text {\n  color: #586e75;\n}\n\n/* Cursor */\n.cm-s-solarized .CodeMirror-cursor { border-left: 1px solid #819090; }\n\n/* Fat cursor */\n.cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor { background: #77ee77; }\n.cm-s-solarized.cm-s-light .cm-animate-fat-cursor { background-color: #77ee77; }\n.cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor { background: #586e75; }\n.cm-s-solarized.cm-s-dark .cm-animate-fat-cursor { background-color: #586e75; }\n\n/* Active line */\n.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background {\n  background: rgba(255, 255, 255, 0.06);\n}\n.cm-s-solarized.cm-s-light .CodeMirror-activeline-background {\n  background: rgba(0, 0, 0, 0.06);\n}\n"
  },
  {
    "path": "public/vendor/codemirror/theme/ssms.css",
    "content": ".cm-s-ssms span.cm-keyword { color: blue; }\n.cm-s-ssms span.cm-comment { color: darkgreen; }\n.cm-s-ssms span.cm-string { color: red; }\n.cm-s-ssms span.cm-def { color: black; }\n.cm-s-ssms span.cm-variable { color: black; }\n.cm-s-ssms span.cm-variable-2 { color: black; }\n.cm-s-ssms span.cm-atom { color: darkgray; }\n.cm-s-ssms .CodeMirror-linenumber { color: teal; }\n.cm-s-ssms .CodeMirror-activeline-background { background: #ffffff; }\n.cm-s-ssms span.cm-string-2 { color: #FF00FF; }\n.cm-s-ssms span.cm-operator, \n.cm-s-ssms span.cm-bracket, \n.cm-s-ssms span.cm-punctuation { color: darkgray; }\n.cm-s-ssms .CodeMirror-gutters { border-right: 3px solid #ffee62; background-color: #ffffff; }\n.cm-s-ssms div.CodeMirror-selected { background: #ADD6FF; }\n\n"
  },
  {
    "path": "public/vendor/codemirror/theme/the-matrix.css",
    "content": ".cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; }\n.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D; }\n.cm-s-the-matrix .CodeMirror-line::selection, .cm-s-the-matrix .CodeMirror-line > span::selection, .cm-s-the-matrix .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); }\n.cm-s-the-matrix .CodeMirror-line::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); }\n.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; }\n.cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; }\n.cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; }\n.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; }\n.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00; }\n\n.cm-s-the-matrix span.cm-keyword { color: #008803; font-weight: bold; }\n.cm-s-the-matrix span.cm-atom { color: #3FF; }\n.cm-s-the-matrix span.cm-number { color: #FFB94F; }\n.cm-s-the-matrix span.cm-def { color: #99C; }\n.cm-s-the-matrix span.cm-variable { color: #F6C; }\n.cm-s-the-matrix span.cm-variable-2 { color: #C6F; }\n.cm-s-the-matrix span.cm-variable-3, .cm-s-the-matrix span.cm-type { color: #96F; }\n.cm-s-the-matrix span.cm-property { color: #62FFA0; }\n.cm-s-the-matrix span.cm-operator { color: #999; }\n.cm-s-the-matrix span.cm-comment { color: #CCCCCC; }\n.cm-s-the-matrix span.cm-string { color: #39C; }\n.cm-s-the-matrix span.cm-meta { color: #C9F; }\n.cm-s-the-matrix span.cm-qualifier { color: #FFF700; }\n.cm-s-the-matrix span.cm-builtin { color: #30a; }\n.cm-s-the-matrix span.cm-bracket { color: #cc7; }\n.cm-s-the-matrix span.cm-tag { color: #FFBD40; }\n.cm-s-the-matrix span.cm-attribute { color: #FFF700; }\n.cm-s-the-matrix span.cm-error { color: #FF0000; }\n\n.cm-s-the-matrix .CodeMirror-activeline-background { background: #040; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/tomorrow-night-bright.css",
    "content": "/*\n\n    Name:       Tomorrow Night - Bright\n    Author:     Chris Kempson\n\n    Port done by Gerard Braad <me@gbraad.nl>\n\n*/\n\n.cm-s-tomorrow-night-bright.CodeMirror { background: #000000; color: #eaeaea; }\n.cm-s-tomorrow-night-bright div.CodeMirror-selected { background: #424242; }\n.cm-s-tomorrow-night-bright .CodeMirror-gutters { background: #000000; border-right: 0px; }\n.cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; }\n.cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; }\n.cm-s-tomorrow-night-bright .CodeMirror-linenumber { color: #424242; }\n.cm-s-tomorrow-night-bright .CodeMirror-cursor { border-left: 1px solid #6A6A6A; }\n\n.cm-s-tomorrow-night-bright span.cm-comment { color: #d27b53; }\n.cm-s-tomorrow-night-bright span.cm-atom { color: #a16a94; }\n.cm-s-tomorrow-night-bright span.cm-number { color: #a16a94; }\n\n.cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute { color: #99cc99; }\n.cm-s-tomorrow-night-bright span.cm-keyword { color: #d54e53; }\n.cm-s-tomorrow-night-bright span.cm-string { color: #e7c547; }\n\n.cm-s-tomorrow-night-bright span.cm-variable { color: #b9ca4a; }\n.cm-s-tomorrow-night-bright span.cm-variable-2 { color: #7aa6da; }\n.cm-s-tomorrow-night-bright span.cm-def { color: #e78c45; }\n.cm-s-tomorrow-night-bright span.cm-bracket { color: #eaeaea; }\n.cm-s-tomorrow-night-bright span.cm-tag { color: #d54e53; }\n.cm-s-tomorrow-night-bright span.cm-link { color: #a16a94; }\n.cm-s-tomorrow-night-bright span.cm-error { background: #d54e53; color: #6A6A6A; }\n\n.cm-s-tomorrow-night-bright .CodeMirror-activeline-background { background: #2a2a2a; }\n.cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/tomorrow-night-eighties.css",
    "content": "/*\n\n    Name:       Tomorrow Night - Eighties\n    Author:     Chris Kempson\n\n    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-tomorrow-night-eighties.CodeMirror { background: #000000; color: #CCCCCC; }\n.cm-s-tomorrow-night-eighties div.CodeMirror-selected { background: #2D2D2D; }\n.cm-s-tomorrow-night-eighties .CodeMirror-line::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); }\n.cm-s-tomorrow-night-eighties .CodeMirror-line::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); }\n.cm-s-tomorrow-night-eighties .CodeMirror-gutters { background: #000000; border-right: 0px; }\n.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; }\n.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; }\n.cm-s-tomorrow-night-eighties .CodeMirror-linenumber { color: #515151; }\n.cm-s-tomorrow-night-eighties .CodeMirror-cursor { border-left: 1px solid #6A6A6A; }\n\n.cm-s-tomorrow-night-eighties span.cm-comment { color: #d27b53; }\n.cm-s-tomorrow-night-eighties span.cm-atom { color: #a16a94; }\n.cm-s-tomorrow-night-eighties span.cm-number { color: #a16a94; }\n\n.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute { color: #99cc99; }\n.cm-s-tomorrow-night-eighties span.cm-keyword { color: #f2777a; }\n.cm-s-tomorrow-night-eighties span.cm-string { color: #ffcc66; }\n\n.cm-s-tomorrow-night-eighties span.cm-variable { color: #99cc99; }\n.cm-s-tomorrow-night-eighties span.cm-variable-2 { color: #6699cc; }\n.cm-s-tomorrow-night-eighties span.cm-def { color: #f99157; }\n.cm-s-tomorrow-night-eighties span.cm-bracket { color: #CCCCCC; }\n.cm-s-tomorrow-night-eighties span.cm-tag { color: #f2777a; }\n.cm-s-tomorrow-night-eighties span.cm-link { color: #a16a94; }\n.cm-s-tomorrow-night-eighties span.cm-error { background: #f2777a; color: #6A6A6A; }\n\n.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background { background: #343600; }\n.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/ttcn.css",
    "content": ".cm-s-ttcn .cm-quote { color: #090; }\n.cm-s-ttcn .cm-negative { color: #d44; }\n.cm-s-ttcn .cm-positive { color: #292; }\n.cm-s-ttcn .cm-header, .cm-strong { font-weight: bold; }\n.cm-s-ttcn .cm-em { font-style: italic; }\n.cm-s-ttcn .cm-link { text-decoration: underline; }\n.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; }\n.cm-s-ttcn .cm-header { color: #00f; font-weight: bold; }\n\n.cm-s-ttcn .cm-atom { color: #219; }\n.cm-s-ttcn .cm-attribute { color: #00c; }\n.cm-s-ttcn .cm-bracket { color: #997; }\n.cm-s-ttcn .cm-comment { color: #333333; }\n.cm-s-ttcn .cm-def { color: #00f; }\n.cm-s-ttcn .cm-em { font-style: italic; }\n.cm-s-ttcn .cm-error { color: #f00; }\n.cm-s-ttcn .cm-hr { color: #999; }\n.cm-s-ttcn .cm-invalidchar { color: #f00; }\n.cm-s-ttcn .cm-keyword { font-weight:bold; }\n.cm-s-ttcn .cm-link { color: #00c; text-decoration: underline; }\n.cm-s-ttcn .cm-meta { color: #555; }\n.cm-s-ttcn .cm-negative { color: #d44; }\n.cm-s-ttcn .cm-positive { color: #292; }\n.cm-s-ttcn .cm-qualifier { color: #555; }\n.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; }\n.cm-s-ttcn .cm-string { color: #006400; }\n.cm-s-ttcn .cm-string-2 { color: #f50; }\n.cm-s-ttcn .cm-strong { font-weight: bold; }\n.cm-s-ttcn .cm-tag { color: #170; }\n.cm-s-ttcn .cm-variable { color: #8B2252; }\n.cm-s-ttcn .cm-variable-2 { color: #05a; }\n.cm-s-ttcn .cm-variable-3, .cm-s-ttcn .cm-type { color: #085; }\n\n.cm-s-ttcn .cm-invalidchar { color: #f00; }\n\n/* ASN */\n.cm-s-ttcn .cm-accessTypes,\n.cm-s-ttcn .cm-compareTypes { color: #27408B; }\n.cm-s-ttcn .cm-cmipVerbs { color: #8B2252; }\n.cm-s-ttcn .cm-modifier { color:#D2691E; }\n.cm-s-ttcn .cm-status { color:#8B4545; }\n.cm-s-ttcn .cm-storage { color:#A020F0; }\n.cm-s-ttcn .cm-tags { color:#006400; }\n\n/* CFG */\n.cm-s-ttcn .cm-externalCommands { color: #8B4545; font-weight:bold; }\n.cm-s-ttcn .cm-fileNCtrlMaskOptions,\n.cm-s-ttcn .cm-sectionTitle { color: #2E8B57; font-weight:bold; }\n\n/* TTCN */\n.cm-s-ttcn .cm-booleanConsts,\n.cm-s-ttcn .cm-otherConsts,\n.cm-s-ttcn .cm-verdictConsts { color: #006400; }\n.cm-s-ttcn .cm-configOps,\n.cm-s-ttcn .cm-functionOps,\n.cm-s-ttcn .cm-portOps,\n.cm-s-ttcn .cm-sutOps,\n.cm-s-ttcn .cm-timerOps,\n.cm-s-ttcn .cm-verdictOps { color: #0000FF; }\n.cm-s-ttcn .cm-preprocessor,\n.cm-s-ttcn .cm-templateMatch,\n.cm-s-ttcn .cm-ttcn3Macros { color: #27408B; }\n.cm-s-ttcn .cm-types { color: #A52A2A; font-weight:bold; }\n.cm-s-ttcn .cm-visibilityModifiers { font-weight:bold; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/twilight.css",
    "content": ".cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/\n.cm-s-twilight div.CodeMirror-selected { background: #323232; } /**/\n.cm-s-twilight .CodeMirror-line::selection, .cm-s-twilight .CodeMirror-line > span::selection, .cm-s-twilight .CodeMirror-line > span > span::selection { background: rgba(50, 50, 50, 0.99); }\n.cm-s-twilight .CodeMirror-line::-moz-selection, .cm-s-twilight .CodeMirror-line > span::-moz-selection, .cm-s-twilight .CodeMirror-line > span > span::-moz-selection { background: rgba(50, 50, 50, 0.99); }\n\n.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; }\n.cm-s-twilight .CodeMirror-guttermarker { color: white; }\n.cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; }\n.cm-s-twilight .CodeMirror-linenumber { color: #aaa; }\n.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-twilight .cm-keyword { color: #f9ee98; } /**/\n.cm-s-twilight .cm-atom { color: #FC0; }\n.cm-s-twilight .cm-number { color:  #ca7841; } /**/\n.cm-s-twilight .cm-def { color: #8DA6CE; }\n.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/\n.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def, .cm-s-twilight span.cm-type { color: #607392; } /**/\n.cm-s-twilight .cm-operator { color: #cda869; } /**/\n.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/\n.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/\n.cm-s-twilight .cm-string-2 { color:#bd6b18; } /*?*/\n.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/\n.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/\n.cm-s-twilight .cm-tag { color: #997643; } /**/\n.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/\n.cm-s-twilight .cm-header { color: #FF6400; }\n.cm-s-twilight .cm-hr { color: #AEAEAE; }\n.cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/\n.cm-s-twilight .cm-error { border-bottom: 1px solid red; }\n\n.cm-s-twilight .CodeMirror-activeline-background { background: #27282E; }\n.cm-s-twilight .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/vibrant-ink.css",
    "content": "/* Taken from the popular Visual Studio Vibrant Ink Schema */\n\n.cm-s-vibrant-ink.CodeMirror { background: black; color: white; }\n.cm-s-vibrant-ink div.CodeMirror-selected { background: #35493c; }\n.cm-s-vibrant-ink .CodeMirror-line::selection, .cm-s-vibrant-ink .CodeMirror-line > span::selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::selection { background: rgba(53, 73, 60, 0.99); }\n.cm-s-vibrant-ink .CodeMirror-line::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::-moz-selection { background: rgba(53, 73, 60, 0.99); }\n\n.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }\n.cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; }\n.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; }\n.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-vibrant-ink .cm-keyword { color: #CC7832; }\n.cm-s-vibrant-ink .cm-atom { color: #FC0; }\n.cm-s-vibrant-ink .cm-number { color:  #FFEE98; }\n.cm-s-vibrant-ink .cm-def { color: #8DA6CE; }\n.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D; }\n.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def, .cm-s-vibrant span.cm-type { color: #FFC66D; }\n.cm-s-vibrant-ink .cm-operator { color: #888; }\n.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; }\n.cm-s-vibrant-ink .cm-string { color:  #A5C25C; }\n.cm-s-vibrant-ink .cm-string-2 { color: red; }\n.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; }\n.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; }\n.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; }\n.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; }\n.cm-s-vibrant-ink .cm-header { color: #FF6400; }\n.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; }\n.cm-s-vibrant-ink .cm-link { color: #5656F3; }\n.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; }\n\n.cm-s-vibrant-ink .CodeMirror-activeline-background { background: #27282E; }\n.cm-s-vibrant-ink .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/xq-dark.css",
    "content": "/*\nCopyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; }\n.cm-s-xq-dark div.CodeMirror-selected { background: #27007A; }\n.cm-s-xq-dark .CodeMirror-line::selection, .cm-s-xq-dark .CodeMirror-line > span::selection, .cm-s-xq-dark .CodeMirror-line > span > span::selection { background: rgba(39, 0, 122, 0.99); }\n.cm-s-xq-dark .CodeMirror-line::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 0, 122, 0.99); }\n.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }\n.cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; }\n.cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; }\n.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; }\n.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-xq-dark span.cm-keyword { color: #FFBD40; }\n.cm-s-xq-dark span.cm-atom { color: #6C8CD5; }\n.cm-s-xq-dark span.cm-number { color: #164; }\n.cm-s-xq-dark span.cm-def { color: #FFF; text-decoration:underline; }\n.cm-s-xq-dark span.cm-variable { color: #FFF; }\n.cm-s-xq-dark span.cm-variable-2 { color: #EEE; }\n.cm-s-xq-dark span.cm-variable-3, .cm-s-xq-dark span.cm-type { color: #DDD; }\n.cm-s-xq-dark span.cm-property {}\n.cm-s-xq-dark span.cm-operator {}\n.cm-s-xq-dark span.cm-comment { color: gray; }\n.cm-s-xq-dark span.cm-string { color: #9FEE00; }\n.cm-s-xq-dark span.cm-meta { color: yellow; }\n.cm-s-xq-dark span.cm-qualifier { color: #FFF700; }\n.cm-s-xq-dark span.cm-builtin { color: #30a; }\n.cm-s-xq-dark span.cm-bracket { color: #cc7; }\n.cm-s-xq-dark span.cm-tag { color: #FFBD40; }\n.cm-s-xq-dark span.cm-attribute { color: #FFF700; }\n.cm-s-xq-dark span.cm-error { color: #f00; }\n\n.cm-s-xq-dark .CodeMirror-activeline-background { background: #27282E; }\n.cm-s-xq-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/xq-light.css",
    "content": "/*\nCopyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n.cm-s-xq-light span.cm-keyword { line-height: 1em; font-weight: bold; color: #5A5CAD; }\n.cm-s-xq-light span.cm-atom { color: #6C8CD5; }\n.cm-s-xq-light span.cm-number { color: #164; }\n.cm-s-xq-light span.cm-def { text-decoration:underline; }\n.cm-s-xq-light span.cm-variable { color: black; }\n.cm-s-xq-light span.cm-variable-2 { color:black; }\n.cm-s-xq-light span.cm-variable-3, .cm-s-xq-light span.cm-type { color: black; }\n.cm-s-xq-light span.cm-property {}\n.cm-s-xq-light span.cm-operator {}\n.cm-s-xq-light span.cm-comment { color: #0080FF; font-style: italic; }\n.cm-s-xq-light span.cm-string { color: red; }\n.cm-s-xq-light span.cm-meta { color: yellow; }\n.cm-s-xq-light span.cm-qualifier { color: grey; }\n.cm-s-xq-light span.cm-builtin { color: #7EA656; }\n.cm-s-xq-light span.cm-bracket { color: #cc7; }\n.cm-s-xq-light span.cm-tag { color: #3F7F7F; }\n.cm-s-xq-light span.cm-attribute { color: #7F007F; }\n.cm-s-xq-light span.cm-error { color: #f00; }\n\n.cm-s-xq-light .CodeMirror-activeline-background { background: #e8f2ff; }\n.cm-s-xq-light .CodeMirror-matchingbracket { outline:1px solid grey;color:black !important;background:yellow; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/yeti.css",
    "content": "/*\n\n    Name:       yeti\n    Author:     Michael Kaminsky (http://github.com/mkaminsky11)\n\n    Original yeti color scheme by Jesse Weed (https://github.com/jesseweed/yeti-syntax)\n\n*/\n\n\n.cm-s-yeti.CodeMirror {\n  background-color: #ECEAE8 !important;\n  color: #d1c9c0 !important;\n  border: none;\n}\n\n.cm-s-yeti .CodeMirror-gutters {\n  color: #adaba6;\n  background-color: #E5E1DB;\n  border: none;\n}\n.cm-s-yeti .CodeMirror-cursor { border-left: solid thin #d1c9c0; }\n.cm-s-yeti .CodeMirror-linenumber { color: #adaba6; }\n.cm-s-yeti.CodeMirror-focused div.CodeMirror-selected { background: #DCD8D2; }\n.cm-s-yeti .CodeMirror-line::selection, .cm-s-yeti .CodeMirror-line > span::selection, .cm-s-yeti .CodeMirror-line > span > span::selection { background: #DCD8D2; }\n.cm-s-yeti .CodeMirror-line::-moz-selection, .cm-s-yeti .CodeMirror-line > span::-moz-selection, .cm-s-yeti .CodeMirror-line > span > span::-moz-selection { background: #DCD8D2; }\n.cm-s-yeti span.cm-comment { color: #d4c8be; }\n.cm-s-yeti span.cm-string, .cm-s-yeti span.cm-string-2 { color: #96c0d8; }\n.cm-s-yeti span.cm-number { color: #a074c4; }\n.cm-s-yeti span.cm-variable { color: #55b5db; }\n.cm-s-yeti span.cm-variable-2 { color: #a074c4; }\n.cm-s-yeti span.cm-def { color: #55b5db; }\n.cm-s-yeti span.cm-operator { color: #9fb96e; }\n.cm-s-yeti span.cm-keyword { color: #9fb96e; }\n.cm-s-yeti span.cm-atom { color: #a074c4; }\n.cm-s-yeti span.cm-meta { color: #96c0d8; }\n.cm-s-yeti span.cm-tag { color: #96c0d8; }\n.cm-s-yeti span.cm-attribute { color: #9fb96e; }\n.cm-s-yeti span.cm-qualifier { color: #96c0d8; }\n.cm-s-yeti span.cm-property { color: #a074c4; }\n.cm-s-yeti span.cm-builtin { color: #a074c4; }\n.cm-s-yeti span.cm-variable-3, .cm-s-yeti span.cm-type { color: #96c0d8; }\n.cm-s-yeti .CodeMirror-activeline-background { background: #E7E4E0; }\n.cm-s-yeti .CodeMirror-matchingbracket { text-decoration: underline; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/yonce.css",
    "content": "/*\n\n    Name:       yoncé\n    Author:     Thomas MacLean (http://github.com/thomasmaclean)\n\n    Original yoncé color scheme by Mina Markham (https://github.com/minamarkham)\n\n*/\n\n.cm-s-yonce.CodeMirror { background: #1C1C1C; color: #d4d4d4; } /**/\n.cm-s-yonce div.CodeMirror-selected { background: rgba(252, 69, 133, 0.478); } /**/\n.cm-s-yonce .CodeMirror-selectedtext,\n.cm-s-yonce .CodeMirror-selected,\n.cm-s-yonce .CodeMirror-line::selection,\n.cm-s-yonce .CodeMirror-line > span::selection,\n.cm-s-yonce .CodeMirror-line > span > span::selection,\n.cm-s-yonce .CodeMirror-line::-moz-selection,\n.cm-s-yonce .CodeMirror-line > span::-moz-selection,\n.cm-s-yonce .CodeMirror-line > span > span::-moz-selection { background: rgba(252, 67, 132, 0.47); }\n\n.cm-s-yonce.CodeMirror pre { padding-left: 0px; }\n.cm-s-yonce .CodeMirror-gutters {background: #1C1C1C; border-right: 0px;}\n.cm-s-yonce .CodeMirror-linenumber {color: #777777;  padding-right: 10px; }\n.cm-s-yonce .CodeMirror-activeline .CodeMirror-linenumber.CodeMirror-gutter-elt { background: #1C1C1C; color: #fc4384; }\n.cm-s-yonce .CodeMirror-linenumber { color: #777; }\n.cm-s-yonce .CodeMirror-cursor { border-left: 2px solid #FC4384; }\n.cm-s-yonce .cm-searching { background: rgba(243, 155, 53, .3) !important; outline: 1px solid #F39B35; }\n.cm-s-yonce .cm-searching.CodeMirror-selectedtext { background: rgba(243, 155, 53, .7) !important; color: white; }\n\n.cm-s-yonce .cm-keyword { color: #00A7AA; } /**/\n.cm-s-yonce .cm-atom { color: #F39B35; }\n.cm-s-yonce .cm-number, .cm-s-yonce span.cm-type { color:  #A06FCA; } /**/\n.cm-s-yonce .cm-def { color: #98E342; }\n.cm-s-yonce .cm-property,\n.cm-s-yonce span.cm-variable { color: #D4D4D4; font-style: italic; }\n.cm-s-yonce span.cm-variable-2 { color: #da7dae; font-style: italic; }\n.cm-s-yonce span.cm-variable-3 { color: #A06FCA; }\n.cm-s-yonce .cm-type.cm-def { color: #FC4384; font-style: normal; text-decoration: underline; }\n.cm-s-yonce .cm-property.cm-def { color: #FC4384; font-style: normal; }\n.cm-s-yonce .cm-callee { color: #FC4384; font-style: normal; }\n.cm-s-yonce .cm-operator { color: #FC4384; } /**/\n.cm-s-yonce .cm-qualifier,\n.cm-s-yonce .cm-tag { color: #FC4384; }\n.cm-s-yonce .cm-tag.cm-bracket { color: #D4D4D4; }\n.cm-s-yonce .cm-attribute { color: #A06FCA; }\n.cm-s-yonce .cm-comment { color:#696d70; font-style:italic; font-weight:normal; } /**/\n.cm-s-yonce .cm-comment.cm-tag { color: #FC4384 }\n.cm-s-yonce .cm-comment.cm-attribute { color: #D4D4D4; }\n.cm-s-yonce .cm-string { color:#E6DB74; } /**/\n.cm-s-yonce .cm-string-2 { color:#F39B35; } /*?*/\n.cm-s-yonce .cm-meta { color: #D4D4D4; background: inherit; }\n.cm-s-yonce .cm-builtin { color: #FC4384; } /*?*/\n.cm-s-yonce .cm-header { color: #da7dae; }\n.cm-s-yonce .cm-hr { color: #98E342; }\n.cm-s-yonce .cm-link { color:#696d70; font-style:italic; text-decoration:none; } /**/\n.cm-s-yonce .cm-error { border-bottom: 1px solid #C42412; }\n\n.cm-s-yonce .CodeMirror-activeline-background { background: #272727; }\n.cm-s-yonce .CodeMirror-matchingbracket { outline:1px solid grey; color:#D4D4D4 !important; }\n"
  },
  {
    "path": "public/vendor/codemirror/theme/zenburn.css",
    "content": "/**\n * \"\n *  Using Zenburn color palette from the Emacs Zenburn Theme\n *  https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el\n *\n *  Also using parts of https://github.com/xavi/coderay-lighttable-theme\n * \"\n * From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css\n */\n\n.cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; }\n.cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; }\n.cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white; }\n.cm-s-zenburn.CodeMirror { background-color: #3f3f3f; color: #dcdccc; }\n.cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; }\n.cm-s-zenburn span.cm-comment { color: #7f9f7f; }\n.cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; }\n.cm-s-zenburn span.cm-atom { color: #bfebbf; }\n.cm-s-zenburn span.cm-def { color: #dcdccc; }\n.cm-s-zenburn span.cm-variable { color: #dfaf8f; }\n.cm-s-zenburn span.cm-variable-2 { color: #dcdccc; }\n.cm-s-zenburn span.cm-string { color: #cc9393; }\n.cm-s-zenburn span.cm-string-2 { color: #cc9393; }\n.cm-s-zenburn span.cm-number { color: #dcdccc; }\n.cm-s-zenburn span.cm-tag { color: #93e0e3; }\n.cm-s-zenburn span.cm-property { color: #dfaf8f; }\n.cm-s-zenburn span.cm-attribute { color: #dfaf8f; }\n.cm-s-zenburn span.cm-qualifier { color: #7cb8bb; }\n.cm-s-zenburn span.cm-meta { color: #f0dfaf; }\n.cm-s-zenburn span.cm-header { color: #f0efd0; }\n.cm-s-zenburn span.cm-operator { color: #f0efd0; }\n.cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; }\n.cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; }\n.cm-s-zenburn .CodeMirror-activeline { background: #000000; }\n.cm-s-zenburn .CodeMirror-activeline-background { background: #000000; }\n.cm-s-zenburn div.CodeMirror-selected { background: #545454; }\n.cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected { background: #4f4f4f; }\n"
  },
  {
    "path": "public/vendor/dnd5emonster/css/template.css",
    "content": ".attribute-layout-dnd5e{background-color:#fae6a5;padding:10px;color:#000}.attribute-layout-dnd5e .attributes,.attribute-layout-dnd5e .first,.attribute-layout-dnd5e .skills{color:#822522!important}.attribute-layout-dnd5e .abilities br,.attribute-layout-dnd5e .actions br,.attribute-layout-dnd5e .legendary br,.attribute-layout-dnd5e .reactions br{margin-bottom:10px}.attribute-layout-dnd5e .abilities strong,.attribute-layout-dnd5e .actions strong{font-style:italic}.attribute-layout-dnd5e p{margin-bottom:10px;color:#000}.attribute-layout-dnd5e h3{margin:5px 0;color:#822522!important}.attribute-layout-dnd5e h4{font-size:.529cm;border-bottom:2px solid #822522;color:#822522!important}.attribute-layout-dnd5e h5{font-size:.35cm;font-weight:900;margin-bottom:5px;color:#822522!important}.attribute-layout-dnd5e hr{border-bottom:5px solid #822522;margin:2px 0 7px}"
  },
  {
    "path": "public/vendor/dnd5emonster/js/template.js",
    "content": "!function(n){function t(e){if(r[e])return r[e].exports;var o=r[e]={i:e,l:!1,exports:{}};return n[e].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};t.m=n,t.c=r,t.i=function(n){return n},t.d=function(n,r,e){t.o(n,r)||Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:e})},t.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(r,\"a\",r),r},t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},t.p=\"\",t(t.s=4)}([function(n,t){},,,,function(n,t,r){n.exports=r(0)}]);"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/LICENSE.txt",
    "content": "Fonticons, Inc. (https://fontawesome.com)\n\n--------------------------------------------------------------------------------\n\nFont Awesome Free License\n\nFont Awesome Free is free, open source, and GPL friendly. You can use it for\ncommercial projects, open source projects, or really almost whatever you want.\nFull Font Awesome Free license: https://fontawesome.com/license/free.\n\n--------------------------------------------------------------------------------\n\n# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)\n\nThe Font Awesome Free download is licensed under a Creative Commons\nAttribution 4.0 International License and applies to all icons packaged\nas SVG and JS file types.\n\n--------------------------------------------------------------------------------\n\n# Fonts: SIL OFL 1.1 License\n\nIn the Font Awesome Free download, the SIL OFL license applies to all icons\npackaged as web and desktop font files.\n\nCopyright (c) 2022 Fonticons, Inc. (https://fontawesome.com)\nwith Reserved Font Name: \"Font Awesome\".\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is copied below, and is also available with a FAQ at:\nhttp://scripts.sil.org/OFL\n\nSIL OPEN FONT LICENSE\nVersion 1.1 - 26 February 2007\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting — in part or in whole — any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.\n\n--------------------------------------------------------------------------------\n\n# Code: MIT License (https://opensource.org/licenses/MIT)\n\nIn the Font Awesome Free download, the MIT license applies to all non-font and\nnon-icon files.\n\nCopyright 2022 Fonticons, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in the\nSoftware without restriction, including without limitation the rights to use, copy,\nmodify, merge, publish, distribute, sublicense, and/or sell copies of the Software,\nand to permit persons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n--------------------------------------------------------------------------------\n\n# Attribution\n\nAttribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font\nAwesome Free files already contain embedded comments with sufficient\nattribution, so you shouldn't need to do anything additional when using these\nfiles normally.\n\nWe've kept attribution comments terse, so we ask that you do not actively work\nto remove them from files, especially code. They're a great way for folks to\nlearn about Font Awesome.\n\n--------------------------------------------------------------------------------\n\n# Brand Icons\n\nAll brand icons are trademarks of their respective owners. The use of these\ntrademarks does not indicate endorsement of the trademark holder by Font\nAwesome, nor vice versa. **Please do not use brand logos for any purpose except\nto represent the company, product, or service to which they refer.**\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/all.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n.fa {\n  font-family: var(--fa-style-family, \"Font Awesome 6 Free\");\n  font-weight: var(--fa-style, 900); }\n\n.fa,\n.fas,\n.fa-solid,\n.far,\n.fa-regular,\n.fal,\n.fa-light,\n.fat,\n.fa-thin,\n.fad,\n.fa-duotone,\n.fab,\n.fa-brands {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: var(--fa-display, inline-block);\n  font-style: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-rendering: auto; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-2xs {\n  font-size: 0.625em;\n  line-height: 0.1em;\n  vertical-align: 0.225em; }\n\n.fa-xs {\n  font-size: 0.75em;\n  line-height: 0.08333em;\n  vertical-align: 0.125em; }\n\n.fa-sm {\n  font-size: 0.875em;\n  line-height: 0.07143em;\n  vertical-align: 0.05357em; }\n\n.fa-lg {\n  font-size: 1.25em;\n  line-height: 0.05em;\n  vertical-align: -0.075em; }\n\n.fa-xl {\n  font-size: 1.5em;\n  line-height: 0.04167em;\n  vertical-align: -0.125em; }\n\n.fa-2xl {\n  font-size: 2em;\n  line-height: 0.03125em;\n  vertical-align: -0.1875em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: var(--fa-li-margin, 2.5em);\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: calc(var(--fa-li-width, 2em) * -1);\n  position: absolute;\n  text-align: center;\n  width: var(--fa-li-width, 2em);\n  line-height: inherit; }\n\n.fa-border {\n  border-color: var(--fa-border-color, #eee);\n  border-radius: var(--fa-border-radius, 0.1em);\n  border-style: var(--fa-border-style, solid);\n  border-width: var(--fa-border-width, 0.08em);\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }\n\n.fa-pull-left {\n  float: left;\n  margin-right: var(--fa-pull-margin, 0.3em); }\n\n.fa-pull-right {\n  float: right;\n  margin-left: var(--fa-pull-margin, 0.3em); }\n\n.fa-beat {\n  -webkit-animation-name: fa-beat;\n          animation-name: fa-beat;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n          animation-timing-function: var(--fa-animation-timing, ease-in-out); }\n\n.fa-bounce {\n  -webkit-animation-name: fa-bounce;\n          animation-name: fa-bounce;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }\n\n.fa-fade {\n  -webkit-animation-name: fa-fade;\n          animation-name: fa-fade;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }\n\n.fa-beat-fade {\n  -webkit-animation-name: fa-beat-fade;\n          animation-name: fa-beat-fade;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }\n\n.fa-flip {\n  -webkit-animation-name: fa-flip;\n          animation-name: fa-flip;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n          animation-timing-function: var(--fa-animation-timing, ease-in-out); }\n\n.fa-shake {\n  -webkit-animation-name: fa-shake;\n          animation-name: fa-shake;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n          animation-timing-function: var(--fa-animation-timing, linear); }\n\n.fa-spin {\n  -webkit-animation-name: fa-spin;\n          animation-name: fa-spin;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 2s);\n          animation-duration: var(--fa-animation-duration, 2s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n          animation-timing-function: var(--fa-animation-timing, linear); }\n\n.fa-spin-reverse {\n  --fa-animation-direction: reverse; }\n\n.fa-pulse,\n.fa-spin-pulse {\n  -webkit-animation-name: fa-spin;\n          animation-name: fa-spin;\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n          animation-timing-function: var(--fa-animation-timing, steps(8)); }\n\n@media (prefers-reduced-motion: reduce) {\n  .fa-beat,\n  .fa-bounce,\n  .fa-fade,\n  .fa-beat-fade,\n  .fa-flip,\n  .fa-pulse,\n  .fa-shake,\n  .fa-spin,\n  .fa-spin-pulse {\n    -webkit-animation-delay: -1ms;\n            animation-delay: -1ms;\n    -webkit-animation-duration: 1ms;\n            animation-duration: 1ms;\n    -webkit-animation-iteration-count: 1;\n            animation-iteration-count: 1;\n    transition-delay: 0s;\n    transition-duration: 0s; } }\n\n@-webkit-keyframes fa-beat {\n  0%, 90% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n            transform: scale(var(--fa-beat-scale, 1.25)); } }\n\n@keyframes fa-beat {\n  0%, 90% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n            transform: scale(var(--fa-beat-scale, 1.25)); } }\n\n@-webkit-keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }\n  57% {\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }\n  64% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  100% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); } }\n\n@keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }\n  57% {\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }\n  64% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  100% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); } }\n\n@-webkit-keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4); } }\n\n@keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4); } }\n\n@-webkit-keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }\n\n@keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }\n\n@-webkit-keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }\n\n@keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }\n\n@-webkit-keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n            transform: rotate(-15deg); }\n  4% {\n    -webkit-transform: rotate(15deg);\n            transform: rotate(15deg); }\n  8%, 24% {\n    -webkit-transform: rotate(-18deg);\n            transform: rotate(-18deg); }\n  12%, 28% {\n    -webkit-transform: rotate(18deg);\n            transform: rotate(18deg); }\n  16% {\n    -webkit-transform: rotate(-22deg);\n            transform: rotate(-22deg); }\n  20% {\n    -webkit-transform: rotate(22deg);\n            transform: rotate(22deg); }\n  32% {\n    -webkit-transform: rotate(-12deg);\n            transform: rotate(-12deg); }\n  36% {\n    -webkit-transform: rotate(12deg);\n            transform: rotate(12deg); }\n  40%, 100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); } }\n\n@keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n            transform: rotate(-15deg); }\n  4% {\n    -webkit-transform: rotate(15deg);\n            transform: rotate(15deg); }\n  8%, 24% {\n    -webkit-transform: rotate(-18deg);\n            transform: rotate(-18deg); }\n  12%, 28% {\n    -webkit-transform: rotate(18deg);\n            transform: rotate(18deg); }\n  16% {\n    -webkit-transform: rotate(-22deg);\n            transform: rotate(-22deg); }\n  20% {\n    -webkit-transform: rotate(22deg);\n            transform: rotate(22deg); }\n  32% {\n    -webkit-transform: rotate(-12deg);\n            transform: rotate(-12deg); }\n  36% {\n    -webkit-transform: rotate(12deg);\n            transform: rotate(12deg); }\n  40%, 100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); } }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n.fa-rotate-by {\n  -webkit-transform: rotate(var(--fa-rotate-angle, none));\n          transform: rotate(var(--fa-rotate-angle, none)); }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2.5em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%;\n  z-index: var(--fa-stack-z-index, auto); }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: var(--fa-inverse, #fff); }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-0::before {\n  content: \"\\30\"; }\n\n.fa-1::before {\n  content: \"\\31\"; }\n\n.fa-2::before {\n  content: \"\\32\"; }\n\n.fa-3::before {\n  content: \"\\33\"; }\n\n.fa-4::before {\n  content: \"\\34\"; }\n\n.fa-5::before {\n  content: \"\\35\"; }\n\n.fa-6::before {\n  content: \"\\36\"; }\n\n.fa-7::before {\n  content: \"\\37\"; }\n\n.fa-8::before {\n  content: \"\\38\"; }\n\n.fa-9::before {\n  content: \"\\39\"; }\n\n.fa-a::before {\n  content: \"\\41\"; }\n\n.fa-address-book::before {\n  content: \"\\f2b9\"; }\n\n.fa-contact-book::before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card::before {\n  content: \"\\f2bb\"; }\n\n.fa-contact-card::before {\n  content: \"\\f2bb\"; }\n\n.fa-vcard::before {\n  content: \"\\f2bb\"; }\n\n.fa-align-center::before {\n  content: \"\\f037\"; }\n\n.fa-align-justify::before {\n  content: \"\\f039\"; }\n\n.fa-align-left::before {\n  content: \"\\f036\"; }\n\n.fa-align-right::before {\n  content: \"\\f038\"; }\n\n.fa-anchor::before {\n  content: \"\\f13d\"; }\n\n.fa-angle-down::before {\n  content: \"\\f107\"; }\n\n.fa-angle-left::before {\n  content: \"\\f104\"; }\n\n.fa-angle-right::before {\n  content: \"\\f105\"; }\n\n.fa-angle-up::before {\n  content: \"\\f106\"; }\n\n.fa-angles-down::before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-down::before {\n  content: \"\\f103\"; }\n\n.fa-angles-left::before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-left::before {\n  content: \"\\f100\"; }\n\n.fa-angles-right::before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-right::before {\n  content: \"\\f101\"; }\n\n.fa-angles-up::before {\n  content: \"\\f102\"; }\n\n.fa-angle-double-up::before {\n  content: \"\\f102\"; }\n\n.fa-ankh::before {\n  content: \"\\f644\"; }\n\n.fa-apple-whole::before {\n  content: \"\\f5d1\"; }\n\n.fa-apple-alt::before {\n  content: \"\\f5d1\"; }\n\n.fa-archway::before {\n  content: \"\\f557\"; }\n\n.fa-arrow-down::before {\n  content: \"\\f063\"; }\n\n.fa-arrow-down-1-9::before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-asc::before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-down::before {\n  content: \"\\f162\"; }\n\n.fa-arrow-down-9-1::before {\n  content: \"\\f886\"; }\n\n.fa-sort-numeric-desc::before {\n  content: \"\\f886\"; }\n\n.fa-sort-numeric-down-alt::before {\n  content: \"\\f886\"; }\n\n.fa-arrow-down-a-z::before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-asc::before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-down::before {\n  content: \"\\f15d\"; }\n\n.fa-arrow-down-long::before {\n  content: \"\\f175\"; }\n\n.fa-long-arrow-down::before {\n  content: \"\\f175\"; }\n\n.fa-arrow-down-short-wide::before {\n  content: \"\\f884\"; }\n\n.fa-sort-amount-desc::before {\n  content: \"\\f884\"; }\n\n.fa-sort-amount-down-alt::before {\n  content: \"\\f884\"; }\n\n.fa-arrow-down-wide-short::before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-asc::before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-down::before {\n  content: \"\\f160\"; }\n\n.fa-arrow-down-z-a::before {\n  content: \"\\f881\"; }\n\n.fa-sort-alpha-desc::before {\n  content: \"\\f881\"; }\n\n.fa-sort-alpha-down-alt::before {\n  content: \"\\f881\"; }\n\n.fa-arrow-left::before {\n  content: \"\\f060\"; }\n\n.fa-arrow-left-long::before {\n  content: \"\\f177\"; }\n\n.fa-long-arrow-left::before {\n  content: \"\\f177\"; }\n\n.fa-arrow-pointer::before {\n  content: \"\\f245\"; }\n\n.fa-mouse-pointer::before {\n  content: \"\\f245\"; }\n\n.fa-arrow-right::before {\n  content: \"\\f061\"; }\n\n.fa-arrow-right-arrow-left::before {\n  content: \"\\f0ec\"; }\n\n.fa-exchange::before {\n  content: \"\\f0ec\"; }\n\n.fa-arrow-right-from-bracket::before {\n  content: \"\\f08b\"; }\n\n.fa-sign-out::before {\n  content: \"\\f08b\"; }\n\n.fa-arrow-right-long::before {\n  content: \"\\f178\"; }\n\n.fa-long-arrow-right::before {\n  content: \"\\f178\"; }\n\n.fa-arrow-right-to-bracket::before {\n  content: \"\\f090\"; }\n\n.fa-sign-in::before {\n  content: \"\\f090\"; }\n\n.fa-arrow-rotate-left::before {\n  content: \"\\f0e2\"; }\n\n.fa-arrow-left-rotate::before {\n  content: \"\\f0e2\"; }\n\n.fa-arrow-rotate-back::before {\n  content: \"\\f0e2\"; }\n\n.fa-arrow-rotate-backward::before {\n  content: \"\\f0e2\"; }\n\n.fa-undo::before {\n  content: \"\\f0e2\"; }\n\n.fa-arrow-rotate-right::before {\n  content: \"\\f01e\"; }\n\n.fa-arrow-right-rotate::before {\n  content: \"\\f01e\"; }\n\n.fa-arrow-rotate-forward::before {\n  content: \"\\f01e\"; }\n\n.fa-redo::before {\n  content: \"\\f01e\"; }\n\n.fa-arrow-trend-down::before {\n  content: \"\\e097\"; }\n\n.fa-arrow-trend-up::before {\n  content: \"\\e098\"; }\n\n.fa-arrow-turn-down::before {\n  content: \"\\f149\"; }\n\n.fa-level-down::before {\n  content: \"\\f149\"; }\n\n.fa-arrow-turn-up::before {\n  content: \"\\f148\"; }\n\n.fa-level-up::before {\n  content: \"\\f148\"; }\n\n.fa-arrow-up::before {\n  content: \"\\f062\"; }\n\n.fa-arrow-up-1-9::before {\n  content: \"\\f163\"; }\n\n.fa-sort-numeric-up::before {\n  content: \"\\f163\"; }\n\n.fa-arrow-up-9-1::before {\n  content: \"\\f887\"; }\n\n.fa-sort-numeric-up-alt::before {\n  content: \"\\f887\"; }\n\n.fa-arrow-up-a-z::before {\n  content: \"\\f15e\"; }\n\n.fa-sort-alpha-up::before {\n  content: \"\\f15e\"; }\n\n.fa-arrow-up-from-bracket::before {\n  content: \"\\e09a\"; }\n\n.fa-arrow-up-long::before {\n  content: \"\\f176\"; }\n\n.fa-long-arrow-up::before {\n  content: \"\\f176\"; }\n\n.fa-arrow-up-right-from-square::before {\n  content: \"\\f08e\"; }\n\n.fa-external-link::before {\n  content: \"\\f08e\"; }\n\n.fa-arrow-up-short-wide::before {\n  content: \"\\f885\"; }\n\n.fa-sort-amount-up-alt::before {\n  content: \"\\f885\"; }\n\n.fa-arrow-up-wide-short::before {\n  content: \"\\f161\"; }\n\n.fa-sort-amount-up::before {\n  content: \"\\f161\"; }\n\n.fa-arrow-up-z-a::before {\n  content: \"\\f882\"; }\n\n.fa-sort-alpha-up-alt::before {\n  content: \"\\f882\"; }\n\n.fa-arrows-left-right::before {\n  content: \"\\f07e\"; }\n\n.fa-arrows-h::before {\n  content: \"\\f07e\"; }\n\n.fa-arrows-rotate::before {\n  content: \"\\f021\"; }\n\n.fa-refresh::before {\n  content: \"\\f021\"; }\n\n.fa-sync::before {\n  content: \"\\f021\"; }\n\n.fa-arrows-up-down::before {\n  content: \"\\f07d\"; }\n\n.fa-arrows-v::before {\n  content: \"\\f07d\"; }\n\n.fa-arrows-up-down-left-right::before {\n  content: \"\\f047\"; }\n\n.fa-arrows::before {\n  content: \"\\f047\"; }\n\n.fa-asterisk::before {\n  content: \"\\2a\"; }\n\n.fa-at::before {\n  content: \"\\40\"; }\n\n.fa-atom::before {\n  content: \"\\f5d2\"; }\n\n.fa-audio-description::before {\n  content: \"\\f29e\"; }\n\n.fa-austral-sign::before {\n  content: \"\\e0a9\"; }\n\n.fa-award::before {\n  content: \"\\f559\"; }\n\n.fa-b::before {\n  content: \"\\42\"; }\n\n.fa-baby::before {\n  content: \"\\f77c\"; }\n\n.fa-baby-carriage::before {\n  content: \"\\f77d\"; }\n\n.fa-carriage-baby::before {\n  content: \"\\f77d\"; }\n\n.fa-backward::before {\n  content: \"\\f04a\"; }\n\n.fa-backward-fast::before {\n  content: \"\\f049\"; }\n\n.fa-fast-backward::before {\n  content: \"\\f049\"; }\n\n.fa-backward-step::before {\n  content: \"\\f048\"; }\n\n.fa-step-backward::before {\n  content: \"\\f048\"; }\n\n.fa-bacon::before {\n  content: \"\\f7e5\"; }\n\n.fa-bacteria::before {\n  content: \"\\e059\"; }\n\n.fa-bacterium::before {\n  content: \"\\e05a\"; }\n\n.fa-bag-shopping::before {\n  content: \"\\f290\"; }\n\n.fa-shopping-bag::before {\n  content: \"\\f290\"; }\n\n.fa-bahai::before {\n  content: \"\\f666\"; }\n\n.fa-baht-sign::before {\n  content: \"\\e0ac\"; }\n\n.fa-ban::before {\n  content: \"\\f05e\"; }\n\n.fa-cancel::before {\n  content: \"\\f05e\"; }\n\n.fa-ban-smoking::before {\n  content: \"\\f54d\"; }\n\n.fa-smoking-ban::before {\n  content: \"\\f54d\"; }\n\n.fa-bandage::before {\n  content: \"\\f462\"; }\n\n.fa-band-aid::before {\n  content: \"\\f462\"; }\n\n.fa-barcode::before {\n  content: \"\\f02a\"; }\n\n.fa-bars::before {\n  content: \"\\f0c9\"; }\n\n.fa-navicon::before {\n  content: \"\\f0c9\"; }\n\n.fa-bars-progress::before {\n  content: \"\\f828\"; }\n\n.fa-tasks-alt::before {\n  content: \"\\f828\"; }\n\n.fa-bars-staggered::before {\n  content: \"\\f550\"; }\n\n.fa-reorder::before {\n  content: \"\\f550\"; }\n\n.fa-stream::before {\n  content: \"\\f550\"; }\n\n.fa-baseball::before {\n  content: \"\\f433\"; }\n\n.fa-baseball-ball::before {\n  content: \"\\f433\"; }\n\n.fa-baseball-bat-ball::before {\n  content: \"\\f432\"; }\n\n.fa-basket-shopping::before {\n  content: \"\\f291\"; }\n\n.fa-shopping-basket::before {\n  content: \"\\f291\"; }\n\n.fa-basketball::before {\n  content: \"\\f434\"; }\n\n.fa-basketball-ball::before {\n  content: \"\\f434\"; }\n\n.fa-bath::before {\n  content: \"\\f2cd\"; }\n\n.fa-bathtub::before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty::before {\n  content: \"\\f244\"; }\n\n.fa-battery-0::before {\n  content: \"\\f244\"; }\n\n.fa-battery-full::before {\n  content: \"\\f240\"; }\n\n.fa-battery::before {\n  content: \"\\f240\"; }\n\n.fa-battery-5::before {\n  content: \"\\f240\"; }\n\n.fa-battery-half::before {\n  content: \"\\f242\"; }\n\n.fa-battery-3::before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter::before {\n  content: \"\\f243\"; }\n\n.fa-battery-2::before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters::before {\n  content: \"\\f241\"; }\n\n.fa-battery-4::before {\n  content: \"\\f241\"; }\n\n.fa-bed::before {\n  content: \"\\f236\"; }\n\n.fa-bed-pulse::before {\n  content: \"\\f487\"; }\n\n.fa-procedures::before {\n  content: \"\\f487\"; }\n\n.fa-beer-mug-empty::before {\n  content: \"\\f0fc\"; }\n\n.fa-beer::before {\n  content: \"\\f0fc\"; }\n\n.fa-bell::before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-concierge::before {\n  content: \"\\f562\"; }\n\n.fa-concierge-bell::before {\n  content: \"\\f562\"; }\n\n.fa-bell-slash::before {\n  content: \"\\f1f6\"; }\n\n.fa-bezier-curve::before {\n  content: \"\\f55b\"; }\n\n.fa-bicycle::before {\n  content: \"\\f206\"; }\n\n.fa-binoculars::before {\n  content: \"\\f1e5\"; }\n\n.fa-biohazard::before {\n  content: \"\\f780\"; }\n\n.fa-bitcoin-sign::before {\n  content: \"\\e0b4\"; }\n\n.fa-blender::before {\n  content: \"\\f517\"; }\n\n.fa-blender-phone::before {\n  content: \"\\f6b6\"; }\n\n.fa-blog::before {\n  content: \"\\f781\"; }\n\n.fa-bold::before {\n  content: \"\\f032\"; }\n\n.fa-bolt::before {\n  content: \"\\f0e7\"; }\n\n.fa-zap::before {\n  content: \"\\f0e7\"; }\n\n.fa-bolt-lightning::before {\n  content: \"\\e0b7\"; }\n\n.fa-bomb::before {\n  content: \"\\f1e2\"; }\n\n.fa-bone::before {\n  content: \"\\f5d7\"; }\n\n.fa-bong::before {\n  content: \"\\f55c\"; }\n\n.fa-book::before {\n  content: \"\\f02d\"; }\n\n.fa-book-atlas::before {\n  content: \"\\f558\"; }\n\n.fa-atlas::before {\n  content: \"\\f558\"; }\n\n.fa-book-bible::before {\n  content: \"\\f647\"; }\n\n.fa-bible::before {\n  content: \"\\f647\"; }\n\n.fa-book-journal-whills::before {\n  content: \"\\f66a\"; }\n\n.fa-journal-whills::before {\n  content: \"\\f66a\"; }\n\n.fa-book-medical::before {\n  content: \"\\f7e6\"; }\n\n.fa-book-open::before {\n  content: \"\\f518\"; }\n\n.fa-book-open-reader::before {\n  content: \"\\f5da\"; }\n\n.fa-book-reader::before {\n  content: \"\\f5da\"; }\n\n.fa-book-quran::before {\n  content: \"\\f687\"; }\n\n.fa-quran::before {\n  content: \"\\f687\"; }\n\n.fa-book-skull::before {\n  content: \"\\f6b7\"; }\n\n.fa-book-dead::before {\n  content: \"\\f6b7\"; }\n\n.fa-bookmark::before {\n  content: \"\\f02e\"; }\n\n.fa-border-all::before {\n  content: \"\\f84c\"; }\n\n.fa-border-none::before {\n  content: \"\\f850\"; }\n\n.fa-border-top-left::before {\n  content: \"\\f853\"; }\n\n.fa-border-style::before {\n  content: \"\\f853\"; }\n\n.fa-bowling-ball::before {\n  content: \"\\f436\"; }\n\n.fa-box::before {\n  content: \"\\f466\"; }\n\n.fa-box-archive::before {\n  content: \"\\f187\"; }\n\n.fa-archive::before {\n  content: \"\\f187\"; }\n\n.fa-box-open::before {\n  content: \"\\f49e\"; }\n\n.fa-box-tissue::before {\n  content: \"\\e05b\"; }\n\n.fa-boxes-stacked::before {\n  content: \"\\f468\"; }\n\n.fa-boxes::before {\n  content: \"\\f468\"; }\n\n.fa-boxes-alt::before {\n  content: \"\\f468\"; }\n\n.fa-braille::before {\n  content: \"\\f2a1\"; }\n\n.fa-brain::before {\n  content: \"\\f5dc\"; }\n\n.fa-brazilian-real-sign::before {\n  content: \"\\e46c\"; }\n\n.fa-bread-slice::before {\n  content: \"\\f7ec\"; }\n\n.fa-briefcase::before {\n  content: \"\\f0b1\"; }\n\n.fa-briefcase-medical::before {\n  content: \"\\f469\"; }\n\n.fa-broom::before {\n  content: \"\\f51a\"; }\n\n.fa-broom-ball::before {\n  content: \"\\f458\"; }\n\n.fa-quidditch::before {\n  content: \"\\f458\"; }\n\n.fa-quidditch-broom-ball::before {\n  content: \"\\f458\"; }\n\n.fa-brush::before {\n  content: \"\\f55d\"; }\n\n.fa-bug::before {\n  content: \"\\f188\"; }\n\n.fa-bug-slash::before {\n  content: \"\\e490\"; }\n\n.fa-building::before {\n  content: \"\\f1ad\"; }\n\n.fa-building-columns::before {\n  content: \"\\f19c\"; }\n\n.fa-bank::before {\n  content: \"\\f19c\"; }\n\n.fa-institution::before {\n  content: \"\\f19c\"; }\n\n.fa-museum::before {\n  content: \"\\f19c\"; }\n\n.fa-university::before {\n  content: \"\\f19c\"; }\n\n.fa-bullhorn::before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye::before {\n  content: \"\\f140\"; }\n\n.fa-burger::before {\n  content: \"\\f805\"; }\n\n.fa-hamburger::before {\n  content: \"\\f805\"; }\n\n.fa-bus::before {\n  content: \"\\f207\"; }\n\n.fa-bus-simple::before {\n  content: \"\\f55e\"; }\n\n.fa-bus-alt::before {\n  content: \"\\f55e\"; }\n\n.fa-business-time::before {\n  content: \"\\f64a\"; }\n\n.fa-briefcase-clock::before {\n  content: \"\\f64a\"; }\n\n.fa-c::before {\n  content: \"\\43\"; }\n\n.fa-cake-candles::before {\n  content: \"\\f1fd\"; }\n\n.fa-birthday-cake::before {\n  content: \"\\f1fd\"; }\n\n.fa-cake::before {\n  content: \"\\f1fd\"; }\n\n.fa-calculator::before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar::before {\n  content: \"\\f133\"; }\n\n.fa-calendar-check::before {\n  content: \"\\f274\"; }\n\n.fa-calendar-day::before {\n  content: \"\\f783\"; }\n\n.fa-calendar-days::before {\n  content: \"\\f073\"; }\n\n.fa-calendar-alt::before {\n  content: \"\\f073\"; }\n\n.fa-calendar-minus::before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus::before {\n  content: \"\\f271\"; }\n\n.fa-calendar-week::before {\n  content: \"\\f784\"; }\n\n.fa-calendar-xmark::before {\n  content: \"\\f273\"; }\n\n.fa-calendar-times::before {\n  content: \"\\f273\"; }\n\n.fa-camera::before {\n  content: \"\\f030\"; }\n\n.fa-camera-alt::before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro::before {\n  content: \"\\f083\"; }\n\n.fa-camera-rotate::before {\n  content: \"\\e0d8\"; }\n\n.fa-campground::before {\n  content: \"\\f6bb\"; }\n\n.fa-candy-cane::before {\n  content: \"\\f786\"; }\n\n.fa-cannabis::before {\n  content: \"\\f55f\"; }\n\n.fa-capsules::before {\n  content: \"\\f46b\"; }\n\n.fa-car::before {\n  content: \"\\f1b9\"; }\n\n.fa-automobile::before {\n  content: \"\\f1b9\"; }\n\n.fa-car-battery::before {\n  content: \"\\f5df\"; }\n\n.fa-battery-car::before {\n  content: \"\\f5df\"; }\n\n.fa-car-crash::before {\n  content: \"\\f5e1\"; }\n\n.fa-car-rear::before {\n  content: \"\\f5de\"; }\n\n.fa-car-alt::before {\n  content: \"\\f5de\"; }\n\n.fa-car-side::before {\n  content: \"\\f5e4\"; }\n\n.fa-caravan::before {\n  content: \"\\f8ff\"; }\n\n.fa-caret-down::before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left::before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right::before {\n  content: \"\\f0da\"; }\n\n.fa-caret-up::before {\n  content: \"\\f0d8\"; }\n\n.fa-carrot::before {\n  content: \"\\f787\"; }\n\n.fa-cart-arrow-down::before {\n  content: \"\\f218\"; }\n\n.fa-cart-flatbed::before {\n  content: \"\\f474\"; }\n\n.fa-dolly-flatbed::before {\n  content: \"\\f474\"; }\n\n.fa-cart-flatbed-suitcase::before {\n  content: \"\\f59d\"; }\n\n.fa-luggage-cart::before {\n  content: \"\\f59d\"; }\n\n.fa-cart-plus::before {\n  content: \"\\f217\"; }\n\n.fa-cart-shopping::before {\n  content: \"\\f07a\"; }\n\n.fa-shopping-cart::before {\n  content: \"\\f07a\"; }\n\n.fa-cash-register::before {\n  content: \"\\f788\"; }\n\n.fa-cat::before {\n  content: \"\\f6be\"; }\n\n.fa-cedi-sign::before {\n  content: \"\\e0df\"; }\n\n.fa-cent-sign::before {\n  content: \"\\e3f5\"; }\n\n.fa-certificate::before {\n  content: \"\\f0a3\"; }\n\n.fa-chair::before {\n  content: \"\\f6c0\"; }\n\n.fa-chalkboard::before {\n  content: \"\\f51b\"; }\n\n.fa-blackboard::before {\n  content: \"\\f51b\"; }\n\n.fa-chalkboard-user::before {\n  content: \"\\f51c\"; }\n\n.fa-chalkboard-teacher::before {\n  content: \"\\f51c\"; }\n\n.fa-champagne-glasses::before {\n  content: \"\\f79f\"; }\n\n.fa-glass-cheers::before {\n  content: \"\\f79f\"; }\n\n.fa-charging-station::before {\n  content: \"\\f5e7\"; }\n\n.fa-chart-area::before {\n  content: \"\\f1fe\"; }\n\n.fa-area-chart::before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar::before {\n  content: \"\\f080\"; }\n\n.fa-bar-chart::before {\n  content: \"\\f080\"; }\n\n.fa-chart-column::before {\n  content: \"\\e0e3\"; }\n\n.fa-chart-gantt::before {\n  content: \"\\e0e4\"; }\n\n.fa-chart-line::before {\n  content: \"\\f201\"; }\n\n.fa-line-chart::before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie::before {\n  content: \"\\f200\"; }\n\n.fa-pie-chart::before {\n  content: \"\\f200\"; }\n\n.fa-check::before {\n  content: \"\\f00c\"; }\n\n.fa-check-double::before {\n  content: \"\\f560\"; }\n\n.fa-check-to-slot::before {\n  content: \"\\f772\"; }\n\n.fa-vote-yea::before {\n  content: \"\\f772\"; }\n\n.fa-cheese::before {\n  content: \"\\f7ef\"; }\n\n.fa-chess::before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop::before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board::before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king::before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight::before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn::before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen::before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook::before {\n  content: \"\\f447\"; }\n\n.fa-chevron-down::before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left::before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right::before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up::before {\n  content: \"\\f077\"; }\n\n.fa-child::before {\n  content: \"\\f1ae\"; }\n\n.fa-church::before {\n  content: \"\\f51d\"; }\n\n.fa-circle::before {\n  content: \"\\f111\"; }\n\n.fa-circle-arrow-down::before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-down::before {\n  content: \"\\f0ab\"; }\n\n.fa-circle-arrow-left::before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-left::before {\n  content: \"\\f0a8\"; }\n\n.fa-circle-arrow-right::before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-right::before {\n  content: \"\\f0a9\"; }\n\n.fa-circle-arrow-up::before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-circle-up::before {\n  content: \"\\f0aa\"; }\n\n.fa-circle-check::before {\n  content: \"\\f058\"; }\n\n.fa-check-circle::before {\n  content: \"\\f058\"; }\n\n.fa-circle-chevron-down::before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-down::before {\n  content: \"\\f13a\"; }\n\n.fa-circle-chevron-left::before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-left::before {\n  content: \"\\f137\"; }\n\n.fa-circle-chevron-right::before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-right::before {\n  content: \"\\f138\"; }\n\n.fa-circle-chevron-up::before {\n  content: \"\\f139\"; }\n\n.fa-chevron-circle-up::before {\n  content: \"\\f139\"; }\n\n.fa-circle-dollar-to-slot::before {\n  content: \"\\f4b9\"; }\n\n.fa-donate::before {\n  content: \"\\f4b9\"; }\n\n.fa-circle-dot::before {\n  content: \"\\f192\"; }\n\n.fa-dot-circle::before {\n  content: \"\\f192\"; }\n\n.fa-circle-down::before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-down::before {\n  content: \"\\f358\"; }\n\n.fa-circle-exclamation::before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-circle::before {\n  content: \"\\f06a\"; }\n\n.fa-circle-h::before {\n  content: \"\\f47e\"; }\n\n.fa-hospital-symbol::before {\n  content: \"\\f47e\"; }\n\n.fa-circle-half-stroke::before {\n  content: \"\\f042\"; }\n\n.fa-adjust::before {\n  content: \"\\f042\"; }\n\n.fa-circle-info::before {\n  content: \"\\f05a\"; }\n\n.fa-info-circle::before {\n  content: \"\\f05a\"; }\n\n.fa-circle-left::before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-left::before {\n  content: \"\\f359\"; }\n\n.fa-circle-minus::before {\n  content: \"\\f056\"; }\n\n.fa-minus-circle::before {\n  content: \"\\f056\"; }\n\n.fa-circle-notch::before {\n  content: \"\\f1ce\"; }\n\n.fa-circle-pause::before {\n  content: \"\\f28b\"; }\n\n.fa-pause-circle::before {\n  content: \"\\f28b\"; }\n\n.fa-circle-play::before {\n  content: \"\\f144\"; }\n\n.fa-play-circle::before {\n  content: \"\\f144\"; }\n\n.fa-circle-plus::before {\n  content: \"\\f055\"; }\n\n.fa-plus-circle::before {\n  content: \"\\f055\"; }\n\n.fa-circle-question::before {\n  content: \"\\f059\"; }\n\n.fa-question-circle::before {\n  content: \"\\f059\"; }\n\n.fa-circle-radiation::before {\n  content: \"\\f7ba\"; }\n\n.fa-radiation-alt::before {\n  content: \"\\f7ba\"; }\n\n.fa-circle-right::before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-right::before {\n  content: \"\\f35a\"; }\n\n.fa-circle-stop::before {\n  content: \"\\f28d\"; }\n\n.fa-stop-circle::before {\n  content: \"\\f28d\"; }\n\n.fa-circle-up::before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-alt-circle-up::before {\n  content: \"\\f35b\"; }\n\n.fa-circle-user::before {\n  content: \"\\f2bd\"; }\n\n.fa-user-circle::before {\n  content: \"\\f2bd\"; }\n\n.fa-circle-xmark::before {\n  content: \"\\f057\"; }\n\n.fa-times-circle::before {\n  content: \"\\f057\"; }\n\n.fa-xmark-circle::before {\n  content: \"\\f057\"; }\n\n.fa-city::before {\n  content: \"\\f64f\"; }\n\n.fa-clapperboard::before {\n  content: \"\\e131\"; }\n\n.fa-clipboard::before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check::before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list::before {\n  content: \"\\f46d\"; }\n\n.fa-clock::before {\n  content: \"\\f017\"; }\n\n.fa-clock-four::before {\n  content: \"\\f017\"; }\n\n.fa-clock-rotate-left::before {\n  content: \"\\f1da\"; }\n\n.fa-history::before {\n  content: \"\\f1da\"; }\n\n.fa-clone::before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning::before {\n  content: \"\\f20a\"; }\n\n.fa-cloud::before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-arrow-down::before {\n  content: \"\\f0ed\"; }\n\n.fa-cloud-download::before {\n  content: \"\\f0ed\"; }\n\n.fa-cloud-download-alt::before {\n  content: \"\\f0ed\"; }\n\n.fa-cloud-arrow-up::before {\n  content: \"\\f0ee\"; }\n\n.fa-cloud-upload::before {\n  content: \"\\f0ee\"; }\n\n.fa-cloud-upload-alt::before {\n  content: \"\\f0ee\"; }\n\n.fa-cloud-meatball::before {\n  content: \"\\f73b\"; }\n\n.fa-cloud-moon::before {\n  content: \"\\f6c3\"; }\n\n.fa-cloud-moon-rain::before {\n  content: \"\\f73c\"; }\n\n.fa-cloud-rain::before {\n  content: \"\\f73d\"; }\n\n.fa-cloud-showers-heavy::before {\n  content: \"\\f740\"; }\n\n.fa-cloud-sun::before {\n  content: \"\\f6c4\"; }\n\n.fa-cloud-sun-rain::before {\n  content: \"\\f743\"; }\n\n.fa-clover::before {\n  content: \"\\e139\"; }\n\n.fa-code::before {\n  content: \"\\f121\"; }\n\n.fa-code-branch::before {\n  content: \"\\f126\"; }\n\n.fa-code-commit::before {\n  content: \"\\f386\"; }\n\n.fa-code-compare::before {\n  content: \"\\e13a\"; }\n\n.fa-code-fork::before {\n  content: \"\\e13b\"; }\n\n.fa-code-merge::before {\n  content: \"\\f387\"; }\n\n.fa-code-pull-request::before {\n  content: \"\\e13c\"; }\n\n.fa-coins::before {\n  content: \"\\f51e\"; }\n\n.fa-colon-sign::before {\n  content: \"\\e140\"; }\n\n.fa-comment::before {\n  content: \"\\f075\"; }\n\n.fa-comment-dollar::before {\n  content: \"\\f651\"; }\n\n.fa-comment-dots::before {\n  content: \"\\f4ad\"; }\n\n.fa-commenting::before {\n  content: \"\\f4ad\"; }\n\n.fa-comment-medical::before {\n  content: \"\\f7f5\"; }\n\n.fa-comment-slash::before {\n  content: \"\\f4b3\"; }\n\n.fa-comment-sms::before {\n  content: \"\\f7cd\"; }\n\n.fa-sms::before {\n  content: \"\\f7cd\"; }\n\n.fa-comments::before {\n  content: \"\\f086\"; }\n\n.fa-comments-dollar::before {\n  content: \"\\f653\"; }\n\n.fa-compact-disc::before {\n  content: \"\\f51f\"; }\n\n.fa-compass::before {\n  content: \"\\f14e\"; }\n\n.fa-compass-drafting::before {\n  content: \"\\f568\"; }\n\n.fa-drafting-compass::before {\n  content: \"\\f568\"; }\n\n.fa-compress::before {\n  content: \"\\f066\"; }\n\n.fa-computer-mouse::before {\n  content: \"\\f8cc\"; }\n\n.fa-mouse::before {\n  content: \"\\f8cc\"; }\n\n.fa-cookie::before {\n  content: \"\\f563\"; }\n\n.fa-cookie-bite::before {\n  content: \"\\f564\"; }\n\n.fa-copy::before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright::before {\n  content: \"\\f1f9\"; }\n\n.fa-couch::before {\n  content: \"\\f4b8\"; }\n\n.fa-credit-card::before {\n  content: \"\\f09d\"; }\n\n.fa-credit-card-alt::before {\n  content: \"\\f09d\"; }\n\n.fa-crop::before {\n  content: \"\\f125\"; }\n\n.fa-crop-simple::before {\n  content: \"\\f565\"; }\n\n.fa-crop-alt::before {\n  content: \"\\f565\"; }\n\n.fa-cross::before {\n  content: \"\\f654\"; }\n\n.fa-crosshairs::before {\n  content: \"\\f05b\"; }\n\n.fa-crow::before {\n  content: \"\\f520\"; }\n\n.fa-crown::before {\n  content: \"\\f521\"; }\n\n.fa-crutch::before {\n  content: \"\\f7f7\"; }\n\n.fa-cruzeiro-sign::before {\n  content: \"\\e152\"; }\n\n.fa-cube::before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes::before {\n  content: \"\\f1b3\"; }\n\n.fa-d::before {\n  content: \"\\44\"; }\n\n.fa-database::before {\n  content: \"\\f1c0\"; }\n\n.fa-delete-left::before {\n  content: \"\\f55a\"; }\n\n.fa-backspace::before {\n  content: \"\\f55a\"; }\n\n.fa-democrat::before {\n  content: \"\\f747\"; }\n\n.fa-desktop::before {\n  content: \"\\f390\"; }\n\n.fa-desktop-alt::before {\n  content: \"\\f390\"; }\n\n.fa-dharmachakra::before {\n  content: \"\\f655\"; }\n\n.fa-diagram-next::before {\n  content: \"\\e476\"; }\n\n.fa-diagram-predecessor::before {\n  content: \"\\e477\"; }\n\n.fa-diagram-project::before {\n  content: \"\\f542\"; }\n\n.fa-project-diagram::before {\n  content: \"\\f542\"; }\n\n.fa-diagram-successor::before {\n  content: \"\\e47a\"; }\n\n.fa-diamond::before {\n  content: \"\\f219\"; }\n\n.fa-diamond-turn-right::before {\n  content: \"\\f5eb\"; }\n\n.fa-directions::before {\n  content: \"\\f5eb\"; }\n\n.fa-dice::before {\n  content: \"\\f522\"; }\n\n.fa-dice-d20::before {\n  content: \"\\f6cf\"; }\n\n.fa-dice-d6::before {\n  content: \"\\f6d1\"; }\n\n.fa-dice-five::before {\n  content: \"\\f523\"; }\n\n.fa-dice-four::before {\n  content: \"\\f524\"; }\n\n.fa-dice-one::before {\n  content: \"\\f525\"; }\n\n.fa-dice-six::before {\n  content: \"\\f526\"; }\n\n.fa-dice-three::before {\n  content: \"\\f527\"; }\n\n.fa-dice-two::before {\n  content: \"\\f528\"; }\n\n.fa-disease::before {\n  content: \"\\f7fa\"; }\n\n.fa-divide::before {\n  content: \"\\f529\"; }\n\n.fa-dna::before {\n  content: \"\\f471\"; }\n\n.fa-dog::before {\n  content: \"\\f6d3\"; }\n\n.fa-dollar-sign::before {\n  content: \"\\24\"; }\n\n.fa-dollar::before {\n  content: \"\\24\"; }\n\n.fa-usd::before {\n  content: \"\\24\"; }\n\n.fa-dolly::before {\n  content: \"\\f472\"; }\n\n.fa-dolly-box::before {\n  content: \"\\f472\"; }\n\n.fa-dong-sign::before {\n  content: \"\\e169\"; }\n\n.fa-door-closed::before {\n  content: \"\\f52a\"; }\n\n.fa-door-open::before {\n  content: \"\\f52b\"; }\n\n.fa-dove::before {\n  content: \"\\f4ba\"; }\n\n.fa-down-left-and-up-right-to-center::before {\n  content: \"\\f422\"; }\n\n.fa-compress-alt::before {\n  content: \"\\f422\"; }\n\n.fa-down-long::before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-down::before {\n  content: \"\\f309\"; }\n\n.fa-download::before {\n  content: \"\\f019\"; }\n\n.fa-dragon::before {\n  content: \"\\f6d5\"; }\n\n.fa-draw-polygon::before {\n  content: \"\\f5ee\"; }\n\n.fa-droplet::before {\n  content: \"\\f043\"; }\n\n.fa-tint::before {\n  content: \"\\f043\"; }\n\n.fa-droplet-slash::before {\n  content: \"\\f5c7\"; }\n\n.fa-tint-slash::before {\n  content: \"\\f5c7\"; }\n\n.fa-drum::before {\n  content: \"\\f569\"; }\n\n.fa-drum-steelpan::before {\n  content: \"\\f56a\"; }\n\n.fa-drumstick-bite::before {\n  content: \"\\f6d7\"; }\n\n.fa-dumbbell::before {\n  content: \"\\f44b\"; }\n\n.fa-dumpster::before {\n  content: \"\\f793\"; }\n\n.fa-dumpster-fire::before {\n  content: \"\\f794\"; }\n\n.fa-dungeon::before {\n  content: \"\\f6d9\"; }\n\n.fa-e::before {\n  content: \"\\45\"; }\n\n.fa-ear-deaf::before {\n  content: \"\\f2a4\"; }\n\n.fa-deaf::before {\n  content: \"\\f2a4\"; }\n\n.fa-deafness::before {\n  content: \"\\f2a4\"; }\n\n.fa-hard-of-hearing::before {\n  content: \"\\f2a4\"; }\n\n.fa-ear-listen::before {\n  content: \"\\f2a2\"; }\n\n.fa-assistive-listening-systems::before {\n  content: \"\\f2a2\"; }\n\n.fa-earth-africa::before {\n  content: \"\\f57c\"; }\n\n.fa-globe-africa::before {\n  content: \"\\f57c\"; }\n\n.fa-earth-americas::before {\n  content: \"\\f57d\"; }\n\n.fa-earth::before {\n  content: \"\\f57d\"; }\n\n.fa-earth-america::before {\n  content: \"\\f57d\"; }\n\n.fa-globe-americas::before {\n  content: \"\\f57d\"; }\n\n.fa-earth-asia::before {\n  content: \"\\f57e\"; }\n\n.fa-globe-asia::before {\n  content: \"\\f57e\"; }\n\n.fa-earth-europe::before {\n  content: \"\\f7a2\"; }\n\n.fa-globe-europe::before {\n  content: \"\\f7a2\"; }\n\n.fa-earth-oceania::before {\n  content: \"\\e47b\"; }\n\n.fa-globe-oceania::before {\n  content: \"\\e47b\"; }\n\n.fa-egg::before {\n  content: \"\\f7fb\"; }\n\n.fa-eject::before {\n  content: \"\\f052\"; }\n\n.fa-elevator::before {\n  content: \"\\e16d\"; }\n\n.fa-ellipsis::before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-h::before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-vertical::before {\n  content: \"\\f142\"; }\n\n.fa-ellipsis-v::before {\n  content: \"\\f142\"; }\n\n.fa-envelope::before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open::before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-open-text::before {\n  content: \"\\f658\"; }\n\n.fa-envelopes-bulk::before {\n  content: \"\\f674\"; }\n\n.fa-mail-bulk::before {\n  content: \"\\f674\"; }\n\n.fa-equals::before {\n  content: \"\\3d\"; }\n\n.fa-eraser::before {\n  content: \"\\f12d\"; }\n\n.fa-ethernet::before {\n  content: \"\\f796\"; }\n\n.fa-euro-sign::before {\n  content: \"\\f153\"; }\n\n.fa-eur::before {\n  content: \"\\f153\"; }\n\n.fa-euro::before {\n  content: \"\\f153\"; }\n\n.fa-exclamation::before {\n  content: \"\\21\"; }\n\n.fa-expand::before {\n  content: \"\\f065\"; }\n\n.fa-eye::before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper::before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-dropper-empty::before {\n  content: \"\\f1fb\"; }\n\n.fa-eyedropper::before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-low-vision::before {\n  content: \"\\f2a8\"; }\n\n.fa-low-vision::before {\n  content: \"\\f2a8\"; }\n\n.fa-eye-slash::before {\n  content: \"\\f070\"; }\n\n.fa-f::before {\n  content: \"\\46\"; }\n\n.fa-face-angry::before {\n  content: \"\\f556\"; }\n\n.fa-angry::before {\n  content: \"\\f556\"; }\n\n.fa-face-dizzy::before {\n  content: \"\\f567\"; }\n\n.fa-dizzy::before {\n  content: \"\\f567\"; }\n\n.fa-face-flushed::before {\n  content: \"\\f579\"; }\n\n.fa-flushed::before {\n  content: \"\\f579\"; }\n\n.fa-face-frown::before {\n  content: \"\\f119\"; }\n\n.fa-frown::before {\n  content: \"\\f119\"; }\n\n.fa-face-frown-open::before {\n  content: \"\\f57a\"; }\n\n.fa-frown-open::before {\n  content: \"\\f57a\"; }\n\n.fa-face-grimace::before {\n  content: \"\\f57f\"; }\n\n.fa-grimace::before {\n  content: \"\\f57f\"; }\n\n.fa-face-grin::before {\n  content: \"\\f580\"; }\n\n.fa-grin::before {\n  content: \"\\f580\"; }\n\n.fa-face-grin-beam::before {\n  content: \"\\f582\"; }\n\n.fa-grin-beam::before {\n  content: \"\\f582\"; }\n\n.fa-face-grin-beam-sweat::before {\n  content: \"\\f583\"; }\n\n.fa-grin-beam-sweat::before {\n  content: \"\\f583\"; }\n\n.fa-face-grin-hearts::before {\n  content: \"\\f584\"; }\n\n.fa-grin-hearts::before {\n  content: \"\\f584\"; }\n\n.fa-face-grin-squint::before {\n  content: \"\\f585\"; }\n\n.fa-grin-squint::before {\n  content: \"\\f585\"; }\n\n.fa-face-grin-squint-tears::before {\n  content: \"\\f586\"; }\n\n.fa-grin-squint-tears::before {\n  content: \"\\f586\"; }\n\n.fa-face-grin-stars::before {\n  content: \"\\f587\"; }\n\n.fa-grin-stars::before {\n  content: \"\\f587\"; }\n\n.fa-face-grin-tears::before {\n  content: \"\\f588\"; }\n\n.fa-grin-tears::before {\n  content: \"\\f588\"; }\n\n.fa-face-grin-tongue::before {\n  content: \"\\f589\"; }\n\n.fa-grin-tongue::before {\n  content: \"\\f589\"; }\n\n.fa-face-grin-tongue-squint::before {\n  content: \"\\f58a\"; }\n\n.fa-grin-tongue-squint::before {\n  content: \"\\f58a\"; }\n\n.fa-face-grin-tongue-wink::before {\n  content: \"\\f58b\"; }\n\n.fa-grin-tongue-wink::before {\n  content: \"\\f58b\"; }\n\n.fa-face-grin-wide::before {\n  content: \"\\f581\"; }\n\n.fa-grin-alt::before {\n  content: \"\\f581\"; }\n\n.fa-face-grin-wink::before {\n  content: \"\\f58c\"; }\n\n.fa-grin-wink::before {\n  content: \"\\f58c\"; }\n\n.fa-face-kiss::before {\n  content: \"\\f596\"; }\n\n.fa-kiss::before {\n  content: \"\\f596\"; }\n\n.fa-face-kiss-beam::before {\n  content: \"\\f597\"; }\n\n.fa-kiss-beam::before {\n  content: \"\\f597\"; }\n\n.fa-face-kiss-wink-heart::before {\n  content: \"\\f598\"; }\n\n.fa-kiss-wink-heart::before {\n  content: \"\\f598\"; }\n\n.fa-face-laugh::before {\n  content: \"\\f599\"; }\n\n.fa-laugh::before {\n  content: \"\\f599\"; }\n\n.fa-face-laugh-beam::before {\n  content: \"\\f59a\"; }\n\n.fa-laugh-beam::before {\n  content: \"\\f59a\"; }\n\n.fa-face-laugh-squint::before {\n  content: \"\\f59b\"; }\n\n.fa-laugh-squint::before {\n  content: \"\\f59b\"; }\n\n.fa-face-laugh-wink::before {\n  content: \"\\f59c\"; }\n\n.fa-laugh-wink::before {\n  content: \"\\f59c\"; }\n\n.fa-face-meh::before {\n  content: \"\\f11a\"; }\n\n.fa-meh::before {\n  content: \"\\f11a\"; }\n\n.fa-face-meh-blank::before {\n  content: \"\\f5a4\"; }\n\n.fa-meh-blank::before {\n  content: \"\\f5a4\"; }\n\n.fa-face-rolling-eyes::before {\n  content: \"\\f5a5\"; }\n\n.fa-meh-rolling-eyes::before {\n  content: \"\\f5a5\"; }\n\n.fa-face-sad-cry::before {\n  content: \"\\f5b3\"; }\n\n.fa-sad-cry::before {\n  content: \"\\f5b3\"; }\n\n.fa-face-sad-tear::before {\n  content: \"\\f5b4\"; }\n\n.fa-sad-tear::before {\n  content: \"\\f5b4\"; }\n\n.fa-face-smile::before {\n  content: \"\\f118\"; }\n\n.fa-smile::before {\n  content: \"\\f118\"; }\n\n.fa-face-smile-beam::before {\n  content: \"\\f5b8\"; }\n\n.fa-smile-beam::before {\n  content: \"\\f5b8\"; }\n\n.fa-face-smile-wink::before {\n  content: \"\\f4da\"; }\n\n.fa-smile-wink::before {\n  content: \"\\f4da\"; }\n\n.fa-face-surprise::before {\n  content: \"\\f5c2\"; }\n\n.fa-surprise::before {\n  content: \"\\f5c2\"; }\n\n.fa-face-tired::before {\n  content: \"\\f5c8\"; }\n\n.fa-tired::before {\n  content: \"\\f5c8\"; }\n\n.fa-fan::before {\n  content: \"\\f863\"; }\n\n.fa-faucet::before {\n  content: \"\\e005\"; }\n\n.fa-fax::before {\n  content: \"\\f1ac\"; }\n\n.fa-feather::before {\n  content: \"\\f52d\"; }\n\n.fa-feather-pointed::before {\n  content: \"\\f56b\"; }\n\n.fa-feather-alt::before {\n  content: \"\\f56b\"; }\n\n.fa-file::before {\n  content: \"\\f15b\"; }\n\n.fa-file-arrow-down::before {\n  content: \"\\f56d\"; }\n\n.fa-file-download::before {\n  content: \"\\f56d\"; }\n\n.fa-file-arrow-up::before {\n  content: \"\\f574\"; }\n\n.fa-file-upload::before {\n  content: \"\\f574\"; }\n\n.fa-file-audio::before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code::before {\n  content: \"\\f1c9\"; }\n\n.fa-file-contract::before {\n  content: \"\\f56c\"; }\n\n.fa-file-csv::before {\n  content: \"\\f6dd\"; }\n\n.fa-file-excel::before {\n  content: \"\\f1c3\"; }\n\n.fa-file-export::before {\n  content: \"\\f56e\"; }\n\n.fa-arrow-right-from-file::before {\n  content: \"\\f56e\"; }\n\n.fa-file-image::before {\n  content: \"\\f1c5\"; }\n\n.fa-file-import::before {\n  content: \"\\f56f\"; }\n\n.fa-arrow-right-to-file::before {\n  content: \"\\f56f\"; }\n\n.fa-file-invoice::before {\n  content: \"\\f570\"; }\n\n.fa-file-invoice-dollar::before {\n  content: \"\\f571\"; }\n\n.fa-file-lines::before {\n  content: \"\\f15c\"; }\n\n.fa-file-alt::before {\n  content: \"\\f15c\"; }\n\n.fa-file-text::before {\n  content: \"\\f15c\"; }\n\n.fa-file-medical::before {\n  content: \"\\f477\"; }\n\n.fa-file-pdf::before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint::before {\n  content: \"\\f1c4\"; }\n\n.fa-file-prescription::before {\n  content: \"\\f572\"; }\n\n.fa-file-signature::before {\n  content: \"\\f573\"; }\n\n.fa-file-video::before {\n  content: \"\\f1c8\"; }\n\n.fa-file-waveform::before {\n  content: \"\\f478\"; }\n\n.fa-file-medical-alt::before {\n  content: \"\\f478\"; }\n\n.fa-file-word::before {\n  content: \"\\f1c2\"; }\n\n.fa-file-zipper::before {\n  content: \"\\f1c6\"; }\n\n.fa-file-archive::before {\n  content: \"\\f1c6\"; }\n\n.fa-fill::before {\n  content: \"\\f575\"; }\n\n.fa-fill-drip::before {\n  content: \"\\f576\"; }\n\n.fa-film::before {\n  content: \"\\f008\"; }\n\n.fa-filter::before {\n  content: \"\\f0b0\"; }\n\n.fa-filter-circle-dollar::before {\n  content: \"\\f662\"; }\n\n.fa-funnel-dollar::before {\n  content: \"\\f662\"; }\n\n.fa-filter-circle-xmark::before {\n  content: \"\\e17b\"; }\n\n.fa-fingerprint::before {\n  content: \"\\f577\"; }\n\n.fa-fire::before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher::before {\n  content: \"\\f134\"; }\n\n.fa-fire-flame-curved::before {\n  content: \"\\f7e4\"; }\n\n.fa-fire-alt::before {\n  content: \"\\f7e4\"; }\n\n.fa-fire-flame-simple::before {\n  content: \"\\f46a\"; }\n\n.fa-burn::before {\n  content: \"\\f46a\"; }\n\n.fa-fish::before {\n  content: \"\\f578\"; }\n\n.fa-flag::before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered::before {\n  content: \"\\f11e\"; }\n\n.fa-flag-usa::before {\n  content: \"\\f74d\"; }\n\n.fa-flask::before {\n  content: \"\\f0c3\"; }\n\n.fa-floppy-disk::before {\n  content: \"\\f0c7\"; }\n\n.fa-save::before {\n  content: \"\\f0c7\"; }\n\n.fa-florin-sign::before {\n  content: \"\\e184\"; }\n\n.fa-folder::before {\n  content: \"\\f07b\"; }\n\n.fa-folder-minus::before {\n  content: \"\\f65d\"; }\n\n.fa-folder-open::before {\n  content: \"\\f07c\"; }\n\n.fa-folder-plus::before {\n  content: \"\\f65e\"; }\n\n.fa-folder-tree::before {\n  content: \"\\f802\"; }\n\n.fa-font::before {\n  content: \"\\f031\"; }\n\n.fa-football::before {\n  content: \"\\f44e\"; }\n\n.fa-football-ball::before {\n  content: \"\\f44e\"; }\n\n.fa-forward::before {\n  content: \"\\f04e\"; }\n\n.fa-forward-fast::before {\n  content: \"\\f050\"; }\n\n.fa-fast-forward::before {\n  content: \"\\f050\"; }\n\n.fa-forward-step::before {\n  content: \"\\f051\"; }\n\n.fa-step-forward::before {\n  content: \"\\f051\"; }\n\n.fa-franc-sign::before {\n  content: \"\\e18f\"; }\n\n.fa-frog::before {\n  content: \"\\f52e\"; }\n\n.fa-futbol::before {\n  content: \"\\f1e3\"; }\n\n.fa-futbol-ball::before {\n  content: \"\\f1e3\"; }\n\n.fa-soccer-ball::before {\n  content: \"\\f1e3\"; }\n\n.fa-g::before {\n  content: \"\\47\"; }\n\n.fa-gamepad::before {\n  content: \"\\f11b\"; }\n\n.fa-gas-pump::before {\n  content: \"\\f52f\"; }\n\n.fa-gauge::before {\n  content: \"\\f624\"; }\n\n.fa-dashboard::before {\n  content: \"\\f624\"; }\n\n.fa-gauge-med::before {\n  content: \"\\f624\"; }\n\n.fa-tachometer-alt-average::before {\n  content: \"\\f624\"; }\n\n.fa-gauge-high::before {\n  content: \"\\f625\"; }\n\n.fa-tachometer-alt::before {\n  content: \"\\f625\"; }\n\n.fa-tachometer-alt-fast::before {\n  content: \"\\f625\"; }\n\n.fa-gauge-simple::before {\n  content: \"\\f629\"; }\n\n.fa-gauge-simple-med::before {\n  content: \"\\f629\"; }\n\n.fa-tachometer-average::before {\n  content: \"\\f629\"; }\n\n.fa-gauge-simple-high::before {\n  content: \"\\f62a\"; }\n\n.fa-tachometer::before {\n  content: \"\\f62a\"; }\n\n.fa-tachometer-fast::before {\n  content: \"\\f62a\"; }\n\n.fa-gavel::before {\n  content: \"\\f0e3\"; }\n\n.fa-legal::before {\n  content: \"\\f0e3\"; }\n\n.fa-gear::before {\n  content: \"\\f013\"; }\n\n.fa-cog::before {\n  content: \"\\f013\"; }\n\n.fa-gears::before {\n  content: \"\\f085\"; }\n\n.fa-cogs::before {\n  content: \"\\f085\"; }\n\n.fa-gem::before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless::before {\n  content: \"\\f22d\"; }\n\n.fa-ghost::before {\n  content: \"\\f6e2\"; }\n\n.fa-gift::before {\n  content: \"\\f06b\"; }\n\n.fa-gifts::before {\n  content: \"\\f79c\"; }\n\n.fa-glasses::before {\n  content: \"\\f530\"; }\n\n.fa-globe::before {\n  content: \"\\f0ac\"; }\n\n.fa-golf-ball-tee::before {\n  content: \"\\f450\"; }\n\n.fa-golf-ball::before {\n  content: \"\\f450\"; }\n\n.fa-gopuram::before {\n  content: \"\\f664\"; }\n\n.fa-graduation-cap::before {\n  content: \"\\f19d\"; }\n\n.fa-mortar-board::before {\n  content: \"\\f19d\"; }\n\n.fa-greater-than::before {\n  content: \"\\3e\"; }\n\n.fa-greater-than-equal::before {\n  content: \"\\f532\"; }\n\n.fa-grip::before {\n  content: \"\\f58d\"; }\n\n.fa-grip-horizontal::before {\n  content: \"\\f58d\"; }\n\n.fa-grip-lines::before {\n  content: \"\\f7a4\"; }\n\n.fa-grip-lines-vertical::before {\n  content: \"\\f7a5\"; }\n\n.fa-grip-vertical::before {\n  content: \"\\f58e\"; }\n\n.fa-guarani-sign::before {\n  content: \"\\e19a\"; }\n\n.fa-guitar::before {\n  content: \"\\f7a6\"; }\n\n.fa-gun::before {\n  content: \"\\e19b\"; }\n\n.fa-h::before {\n  content: \"\\48\"; }\n\n.fa-hammer::before {\n  content: \"\\f6e3\"; }\n\n.fa-hamsa::before {\n  content: \"\\f665\"; }\n\n.fa-hand::before {\n  content: \"\\f256\"; }\n\n.fa-hand-paper::before {\n  content: \"\\f256\"; }\n\n.fa-hand-back-fist::before {\n  content: \"\\f255\"; }\n\n.fa-hand-rock::before {\n  content: \"\\f255\"; }\n\n.fa-hand-dots::before {\n  content: \"\\f461\"; }\n\n.fa-allergies::before {\n  content: \"\\f461\"; }\n\n.fa-hand-fist::before {\n  content: \"\\f6de\"; }\n\n.fa-fist-raised::before {\n  content: \"\\f6de\"; }\n\n.fa-hand-holding::before {\n  content: \"\\f4bd\"; }\n\n.fa-hand-holding-dollar::before {\n  content: \"\\f4c0\"; }\n\n.fa-hand-holding-usd::before {\n  content: \"\\f4c0\"; }\n\n.fa-hand-holding-droplet::before {\n  content: \"\\f4c1\"; }\n\n.fa-hand-holding-water::before {\n  content: \"\\f4c1\"; }\n\n.fa-hand-holding-heart::before {\n  content: \"\\f4be\"; }\n\n.fa-hand-holding-medical::before {\n  content: \"\\e05c\"; }\n\n.fa-hand-lizard::before {\n  content: \"\\f258\"; }\n\n.fa-hand-middle-finger::before {\n  content: \"\\f806\"; }\n\n.fa-hand-peace::before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down::before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left::before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right::before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up::before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer::before {\n  content: \"\\f25a\"; }\n\n.fa-hand-scissors::before {\n  content: \"\\f257\"; }\n\n.fa-hand-sparkles::before {\n  content: \"\\e05d\"; }\n\n.fa-hand-spock::before {\n  content: \"\\f259\"; }\n\n.fa-hands::before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-language::before {\n  content: \"\\f2a7\"; }\n\n.fa-signing::before {\n  content: \"\\f2a7\"; }\n\n.fa-hands-asl-interpreting::before {\n  content: \"\\f2a3\"; }\n\n.fa-american-sign-language-interpreting::before {\n  content: \"\\f2a3\"; }\n\n.fa-asl-interpreting::before {\n  content: \"\\f2a3\"; }\n\n.fa-hands-american-sign-language-interpreting::before {\n  content: \"\\f2a3\"; }\n\n.fa-hands-bubbles::before {\n  content: \"\\e05e\"; }\n\n.fa-hands-wash::before {\n  content: \"\\e05e\"; }\n\n.fa-hands-clapping::before {\n  content: \"\\e1a8\"; }\n\n.fa-hands-holding::before {\n  content: \"\\f4c2\"; }\n\n.fa-hands-praying::before {\n  content: \"\\f684\"; }\n\n.fa-praying-hands::before {\n  content: \"\\f684\"; }\n\n.fa-handshake::before {\n  content: \"\\f2b5\"; }\n\n.fa-handshake-angle::before {\n  content: \"\\f4c4\"; }\n\n.fa-hands-helping::before {\n  content: \"\\f4c4\"; }\n\n.fa-handshake-simple-slash::before {\n  content: \"\\e05f\"; }\n\n.fa-handshake-alt-slash::before {\n  content: \"\\e05f\"; }\n\n.fa-handshake-slash::before {\n  content: \"\\e060\"; }\n\n.fa-hanukiah::before {\n  content: \"\\f6e6\"; }\n\n.fa-hard-drive::before {\n  content: \"\\f0a0\"; }\n\n.fa-hdd::before {\n  content: \"\\f0a0\"; }\n\n.fa-hashtag::before {\n  content: \"\\23\"; }\n\n.fa-hat-cowboy::before {\n  content: \"\\f8c0\"; }\n\n.fa-hat-cowboy-side::before {\n  content: \"\\f8c1\"; }\n\n.fa-hat-wizard::before {\n  content: \"\\f6e8\"; }\n\n.fa-head-side-cough::before {\n  content: \"\\e061\"; }\n\n.fa-head-side-cough-slash::before {\n  content: \"\\e062\"; }\n\n.fa-head-side-mask::before {\n  content: \"\\e063\"; }\n\n.fa-head-side-virus::before {\n  content: \"\\e064\"; }\n\n.fa-heading::before {\n  content: \"\\f1dc\"; }\n\n.fa-header::before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones::before {\n  content: \"\\f025\"; }\n\n.fa-headphones-simple::before {\n  content: \"\\f58f\"; }\n\n.fa-headphones-alt::before {\n  content: \"\\f58f\"; }\n\n.fa-headset::before {\n  content: \"\\f590\"; }\n\n.fa-heart::before {\n  content: \"\\f004\"; }\n\n.fa-heart-crack::before {\n  content: \"\\f7a9\"; }\n\n.fa-heart-broken::before {\n  content: \"\\f7a9\"; }\n\n.fa-heart-pulse::before {\n  content: \"\\f21e\"; }\n\n.fa-heartbeat::before {\n  content: \"\\f21e\"; }\n\n.fa-helicopter::before {\n  content: \"\\f533\"; }\n\n.fa-helmet-safety::before {\n  content: \"\\f807\"; }\n\n.fa-hard-hat::before {\n  content: \"\\f807\"; }\n\n.fa-hat-hard::before {\n  content: \"\\f807\"; }\n\n.fa-highlighter::before {\n  content: \"\\f591\"; }\n\n.fa-hippo::before {\n  content: \"\\f6ed\"; }\n\n.fa-hockey-puck::before {\n  content: \"\\f453\"; }\n\n.fa-holly-berry::before {\n  content: \"\\f7aa\"; }\n\n.fa-horse::before {\n  content: \"\\f6f0\"; }\n\n.fa-horse-head::before {\n  content: \"\\f7ab\"; }\n\n.fa-hospital::before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-alt::before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-wide::before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-user::before {\n  content: \"\\f80d\"; }\n\n.fa-hot-tub-person::before {\n  content: \"\\f593\"; }\n\n.fa-hot-tub::before {\n  content: \"\\f593\"; }\n\n.fa-hotdog::before {\n  content: \"\\f80f\"; }\n\n.fa-hotel::before {\n  content: \"\\f594\"; }\n\n.fa-hourglass::before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-2::before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-half::before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-empty::before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-end::before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-3::before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-start::before {\n  content: \"\\f251\"; }\n\n.fa-hourglass-1::before {\n  content: \"\\f251\"; }\n\n.fa-house::before {\n  content: \"\\f015\"; }\n\n.fa-home::before {\n  content: \"\\f015\"; }\n\n.fa-home-alt::before {\n  content: \"\\f015\"; }\n\n.fa-home-lg-alt::before {\n  content: \"\\f015\"; }\n\n.fa-house-chimney::before {\n  content: \"\\e3af\"; }\n\n.fa-home-lg::before {\n  content: \"\\e3af\"; }\n\n.fa-house-chimney-crack::before {\n  content: \"\\f6f1\"; }\n\n.fa-house-damage::before {\n  content: \"\\f6f1\"; }\n\n.fa-house-chimney-medical::before {\n  content: \"\\f7f2\"; }\n\n.fa-clinic-medical::before {\n  content: \"\\f7f2\"; }\n\n.fa-house-chimney-user::before {\n  content: \"\\e065\"; }\n\n.fa-house-chimney-window::before {\n  content: \"\\e00d\"; }\n\n.fa-house-crack::before {\n  content: \"\\e3b1\"; }\n\n.fa-house-laptop::before {\n  content: \"\\e066\"; }\n\n.fa-laptop-house::before {\n  content: \"\\e066\"; }\n\n.fa-house-medical::before {\n  content: \"\\e3b2\"; }\n\n.fa-house-user::before {\n  content: \"\\e1b0\"; }\n\n.fa-home-user::before {\n  content: \"\\e1b0\"; }\n\n.fa-hryvnia-sign::before {\n  content: \"\\f6f2\"; }\n\n.fa-hryvnia::before {\n  content: \"\\f6f2\"; }\n\n.fa-i::before {\n  content: \"\\49\"; }\n\n.fa-i-cursor::before {\n  content: \"\\f246\"; }\n\n.fa-ice-cream::before {\n  content: \"\\f810\"; }\n\n.fa-icicles::before {\n  content: \"\\f7ad\"; }\n\n.fa-icons::before {\n  content: \"\\f86d\"; }\n\n.fa-heart-music-camera-bolt::before {\n  content: \"\\f86d\"; }\n\n.fa-id-badge::before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card::before {\n  content: \"\\f2c2\"; }\n\n.fa-drivers-license::before {\n  content: \"\\f2c2\"; }\n\n.fa-id-card-clip::before {\n  content: \"\\f47f\"; }\n\n.fa-id-card-alt::before {\n  content: \"\\f47f\"; }\n\n.fa-igloo::before {\n  content: \"\\f7ae\"; }\n\n.fa-image::before {\n  content: \"\\f03e\"; }\n\n.fa-image-portrait::before {\n  content: \"\\f3e0\"; }\n\n.fa-portrait::before {\n  content: \"\\f3e0\"; }\n\n.fa-images::before {\n  content: \"\\f302\"; }\n\n.fa-inbox::before {\n  content: \"\\f01c\"; }\n\n.fa-indent::before {\n  content: \"\\f03c\"; }\n\n.fa-indian-rupee-sign::before {\n  content: \"\\e1bc\"; }\n\n.fa-indian-rupee::before {\n  content: \"\\e1bc\"; }\n\n.fa-inr::before {\n  content: \"\\e1bc\"; }\n\n.fa-industry::before {\n  content: \"\\f275\"; }\n\n.fa-infinity::before {\n  content: \"\\f534\"; }\n\n.fa-info::before {\n  content: \"\\f129\"; }\n\n.fa-italic::before {\n  content: \"\\f033\"; }\n\n.fa-j::before {\n  content: \"\\4a\"; }\n\n.fa-jedi::before {\n  content: \"\\f669\"; }\n\n.fa-jet-fighter::before {\n  content: \"\\f0fb\"; }\n\n.fa-fighter-jet::before {\n  content: \"\\f0fb\"; }\n\n.fa-joint::before {\n  content: \"\\f595\"; }\n\n.fa-k::before {\n  content: \"\\4b\"; }\n\n.fa-kaaba::before {\n  content: \"\\f66b\"; }\n\n.fa-key::before {\n  content: \"\\f084\"; }\n\n.fa-keyboard::before {\n  content: \"\\f11c\"; }\n\n.fa-khanda::before {\n  content: \"\\f66d\"; }\n\n.fa-kip-sign::before {\n  content: \"\\e1c4\"; }\n\n.fa-kit-medical::before {\n  content: \"\\f479\"; }\n\n.fa-first-aid::before {\n  content: \"\\f479\"; }\n\n.fa-kiwi-bird::before {\n  content: \"\\f535\"; }\n\n.fa-l::before {\n  content: \"\\4c\"; }\n\n.fa-landmark::before {\n  content: \"\\f66f\"; }\n\n.fa-language::before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop::before {\n  content: \"\\f109\"; }\n\n.fa-laptop-code::before {\n  content: \"\\f5fc\"; }\n\n.fa-laptop-medical::before {\n  content: \"\\f812\"; }\n\n.fa-lari-sign::before {\n  content: \"\\e1c8\"; }\n\n.fa-layer-group::before {\n  content: \"\\f5fd\"; }\n\n.fa-leaf::before {\n  content: \"\\f06c\"; }\n\n.fa-left-long::before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-left::before {\n  content: \"\\f30a\"; }\n\n.fa-left-right::before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-h::before {\n  content: \"\\f337\"; }\n\n.fa-lemon::before {\n  content: \"\\f094\"; }\n\n.fa-less-than::before {\n  content: \"\\3c\"; }\n\n.fa-less-than-equal::before {\n  content: \"\\f537\"; }\n\n.fa-life-ring::before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb::before {\n  content: \"\\f0eb\"; }\n\n.fa-link::before {\n  content: \"\\f0c1\"; }\n\n.fa-chain::before {\n  content: \"\\f0c1\"; }\n\n.fa-link-slash::before {\n  content: \"\\f127\"; }\n\n.fa-chain-broken::before {\n  content: \"\\f127\"; }\n\n.fa-chain-slash::before {\n  content: \"\\f127\"; }\n\n.fa-unlink::before {\n  content: \"\\f127\"; }\n\n.fa-lira-sign::before {\n  content: \"\\f195\"; }\n\n.fa-list::before {\n  content: \"\\f03a\"; }\n\n.fa-list-squares::before {\n  content: \"\\f03a\"; }\n\n.fa-list-check::before {\n  content: \"\\f0ae\"; }\n\n.fa-tasks::before {\n  content: \"\\f0ae\"; }\n\n.fa-list-ol::before {\n  content: \"\\f0cb\"; }\n\n.fa-list-1-2::before {\n  content: \"\\f0cb\"; }\n\n.fa-list-numeric::before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul::before {\n  content: \"\\f0ca\"; }\n\n.fa-list-dots::before {\n  content: \"\\f0ca\"; }\n\n.fa-litecoin-sign::before {\n  content: \"\\e1d3\"; }\n\n.fa-location-arrow::before {\n  content: \"\\f124\"; }\n\n.fa-location-crosshairs::before {\n  content: \"\\f601\"; }\n\n.fa-location::before {\n  content: \"\\f601\"; }\n\n.fa-location-dot::before {\n  content: \"\\f3c5\"; }\n\n.fa-map-marker-alt::before {\n  content: \"\\f3c5\"; }\n\n.fa-location-pin::before {\n  content: \"\\f041\"; }\n\n.fa-map-marker::before {\n  content: \"\\f041\"; }\n\n.fa-lock::before {\n  content: \"\\f023\"; }\n\n.fa-lock-open::before {\n  content: \"\\f3c1\"; }\n\n.fa-lungs::before {\n  content: \"\\f604\"; }\n\n.fa-lungs-virus::before {\n  content: \"\\e067\"; }\n\n.fa-m::before {\n  content: \"\\4d\"; }\n\n.fa-magnet::before {\n  content: \"\\f076\"; }\n\n.fa-magnifying-glass::before {\n  content: \"\\f002\"; }\n\n.fa-search::before {\n  content: \"\\f002\"; }\n\n.fa-magnifying-glass-dollar::before {\n  content: \"\\f688\"; }\n\n.fa-search-dollar::before {\n  content: \"\\f688\"; }\n\n.fa-magnifying-glass-location::before {\n  content: \"\\f689\"; }\n\n.fa-search-location::before {\n  content: \"\\f689\"; }\n\n.fa-magnifying-glass-minus::before {\n  content: \"\\f010\"; }\n\n.fa-search-minus::before {\n  content: \"\\f010\"; }\n\n.fa-magnifying-glass-plus::before {\n  content: \"\\f00e\"; }\n\n.fa-search-plus::before {\n  content: \"\\f00e\"; }\n\n.fa-manat-sign::before {\n  content: \"\\e1d5\"; }\n\n.fa-map::before {\n  content: \"\\f279\"; }\n\n.fa-map-location::before {\n  content: \"\\f59f\"; }\n\n.fa-map-marked::before {\n  content: \"\\f59f\"; }\n\n.fa-map-location-dot::before {\n  content: \"\\f5a0\"; }\n\n.fa-map-marked-alt::before {\n  content: \"\\f5a0\"; }\n\n.fa-map-pin::before {\n  content: \"\\f276\"; }\n\n.fa-marker::before {\n  content: \"\\f5a1\"; }\n\n.fa-mars::before {\n  content: \"\\f222\"; }\n\n.fa-mars-and-venus::before {\n  content: \"\\f224\"; }\n\n.fa-mars-double::before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke::before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-right::before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-h::before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-up::before {\n  content: \"\\f22a\"; }\n\n.fa-mars-stroke-v::before {\n  content: \"\\f22a\"; }\n\n.fa-martini-glass::before {\n  content: \"\\f57b\"; }\n\n.fa-glass-martini-alt::before {\n  content: \"\\f57b\"; }\n\n.fa-martini-glass-citrus::before {\n  content: \"\\f561\"; }\n\n.fa-cocktail::before {\n  content: \"\\f561\"; }\n\n.fa-martini-glass-empty::before {\n  content: \"\\f000\"; }\n\n.fa-glass-martini::before {\n  content: \"\\f000\"; }\n\n.fa-mask::before {\n  content: \"\\f6fa\"; }\n\n.fa-mask-face::before {\n  content: \"\\e1d7\"; }\n\n.fa-masks-theater::before {\n  content: \"\\f630\"; }\n\n.fa-theater-masks::before {\n  content: \"\\f630\"; }\n\n.fa-maximize::before {\n  content: \"\\f31e\"; }\n\n.fa-expand-arrows-alt::before {\n  content: \"\\f31e\"; }\n\n.fa-medal::before {\n  content: \"\\f5a2\"; }\n\n.fa-memory::before {\n  content: \"\\f538\"; }\n\n.fa-menorah::before {\n  content: \"\\f676\"; }\n\n.fa-mercury::before {\n  content: \"\\f223\"; }\n\n.fa-message::before {\n  content: \"\\f27a\"; }\n\n.fa-comment-alt::before {\n  content: \"\\f27a\"; }\n\n.fa-meteor::before {\n  content: \"\\f753\"; }\n\n.fa-microchip::before {\n  content: \"\\f2db\"; }\n\n.fa-microphone::before {\n  content: \"\\f130\"; }\n\n.fa-microphone-lines::before {\n  content: \"\\f3c9\"; }\n\n.fa-microphone-alt::before {\n  content: \"\\f3c9\"; }\n\n.fa-microphone-lines-slash::before {\n  content: \"\\f539\"; }\n\n.fa-microphone-alt-slash::before {\n  content: \"\\f539\"; }\n\n.fa-microphone-slash::before {\n  content: \"\\f131\"; }\n\n.fa-microscope::before {\n  content: \"\\f610\"; }\n\n.fa-mill-sign::before {\n  content: \"\\e1ed\"; }\n\n.fa-minimize::before {\n  content: \"\\f78c\"; }\n\n.fa-compress-arrows-alt::before {\n  content: \"\\f78c\"; }\n\n.fa-minus::before {\n  content: \"\\f068\"; }\n\n.fa-subtract::before {\n  content: \"\\f068\"; }\n\n.fa-mitten::before {\n  content: \"\\f7b5\"; }\n\n.fa-mobile::before {\n  content: \"\\f3ce\"; }\n\n.fa-mobile-android::before {\n  content: \"\\f3ce\"; }\n\n.fa-mobile-phone::before {\n  content: \"\\f3ce\"; }\n\n.fa-mobile-button::before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-screen-button::before {\n  content: \"\\f3cd\"; }\n\n.fa-mobile-alt::before {\n  content: \"\\f3cd\"; }\n\n.fa-money-bill::before {\n  content: \"\\f0d6\"; }\n\n.fa-money-bill-1::before {\n  content: \"\\f3d1\"; }\n\n.fa-money-bill-alt::before {\n  content: \"\\f3d1\"; }\n\n.fa-money-bill-1-wave::before {\n  content: \"\\f53b\"; }\n\n.fa-money-bill-wave-alt::before {\n  content: \"\\f53b\"; }\n\n.fa-money-bill-wave::before {\n  content: \"\\f53a\"; }\n\n.fa-money-check::before {\n  content: \"\\f53c\"; }\n\n.fa-money-check-dollar::before {\n  content: \"\\f53d\"; }\n\n.fa-money-check-alt::before {\n  content: \"\\f53d\"; }\n\n.fa-monument::before {\n  content: \"\\f5a6\"; }\n\n.fa-moon::before {\n  content: \"\\f186\"; }\n\n.fa-mortar-pestle::before {\n  content: \"\\f5a7\"; }\n\n.fa-mosque::before {\n  content: \"\\f678\"; }\n\n.fa-motorcycle::before {\n  content: \"\\f21c\"; }\n\n.fa-mountain::before {\n  content: \"\\f6fc\"; }\n\n.fa-mug-hot::before {\n  content: \"\\f7b6\"; }\n\n.fa-mug-saucer::before {\n  content: \"\\f0f4\"; }\n\n.fa-coffee::before {\n  content: \"\\f0f4\"; }\n\n.fa-music::before {\n  content: \"\\f001\"; }\n\n.fa-n::before {\n  content: \"\\4e\"; }\n\n.fa-naira-sign::before {\n  content: \"\\e1f6\"; }\n\n.fa-network-wired::before {\n  content: \"\\f6ff\"; }\n\n.fa-neuter::before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper::before {\n  content: \"\\f1ea\"; }\n\n.fa-not-equal::before {\n  content: \"\\f53e\"; }\n\n.fa-note-sticky::before {\n  content: \"\\f249\"; }\n\n.fa-sticky-note::before {\n  content: \"\\f249\"; }\n\n.fa-notes-medical::before {\n  content: \"\\f481\"; }\n\n.fa-o::before {\n  content: \"\\4f\"; }\n\n.fa-object-group::before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup::before {\n  content: \"\\f248\"; }\n\n.fa-oil-can::before {\n  content: \"\\f613\"; }\n\n.fa-om::before {\n  content: \"\\f679\"; }\n\n.fa-otter::before {\n  content: \"\\f700\"; }\n\n.fa-outdent::before {\n  content: \"\\f03b\"; }\n\n.fa-dedent::before {\n  content: \"\\f03b\"; }\n\n.fa-p::before {\n  content: \"\\50\"; }\n\n.fa-pager::before {\n  content: \"\\f815\"; }\n\n.fa-paint-roller::before {\n  content: \"\\f5aa\"; }\n\n.fa-paintbrush::before {\n  content: \"\\f1fc\"; }\n\n.fa-paint-brush::before {\n  content: \"\\f1fc\"; }\n\n.fa-palette::before {\n  content: \"\\f53f\"; }\n\n.fa-pallet::before {\n  content: \"\\f482\"; }\n\n.fa-panorama::before {\n  content: \"\\e209\"; }\n\n.fa-paper-plane::before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip::before {\n  content: \"\\f0c6\"; }\n\n.fa-parachute-box::before {\n  content: \"\\f4cd\"; }\n\n.fa-paragraph::before {\n  content: \"\\f1dd\"; }\n\n.fa-passport::before {\n  content: \"\\f5ab\"; }\n\n.fa-paste::before {\n  content: \"\\f0ea\"; }\n\n.fa-file-clipboard::before {\n  content: \"\\f0ea\"; }\n\n.fa-pause::before {\n  content: \"\\f04c\"; }\n\n.fa-paw::before {\n  content: \"\\f1b0\"; }\n\n.fa-peace::before {\n  content: \"\\f67c\"; }\n\n.fa-pen::before {\n  content: \"\\f304\"; }\n\n.fa-pen-clip::before {\n  content: \"\\f305\"; }\n\n.fa-pen-alt::before {\n  content: \"\\f305\"; }\n\n.fa-pen-fancy::before {\n  content: \"\\f5ac\"; }\n\n.fa-pen-nib::before {\n  content: \"\\f5ad\"; }\n\n.fa-pen-ruler::before {\n  content: \"\\f5ae\"; }\n\n.fa-pencil-ruler::before {\n  content: \"\\f5ae\"; }\n\n.fa-pen-to-square::before {\n  content: \"\\f044\"; }\n\n.fa-edit::before {\n  content: \"\\f044\"; }\n\n.fa-pencil::before {\n  content: \"\\f303\"; }\n\n.fa-pencil-alt::before {\n  content: \"\\f303\"; }\n\n.fa-people-arrows-left-right::before {\n  content: \"\\e068\"; }\n\n.fa-people-arrows::before {\n  content: \"\\e068\"; }\n\n.fa-people-carry-box::before {\n  content: \"\\f4ce\"; }\n\n.fa-people-carry::before {\n  content: \"\\f4ce\"; }\n\n.fa-pepper-hot::before {\n  content: \"\\f816\"; }\n\n.fa-percent::before {\n  content: \"\\25\"; }\n\n.fa-percentage::before {\n  content: \"\\25\"; }\n\n.fa-person::before {\n  content: \"\\f183\"; }\n\n.fa-male::before {\n  content: \"\\f183\"; }\n\n.fa-person-biking::before {\n  content: \"\\f84a\"; }\n\n.fa-biking::before {\n  content: \"\\f84a\"; }\n\n.fa-person-booth::before {\n  content: \"\\f756\"; }\n\n.fa-person-dots-from-line::before {\n  content: \"\\f470\"; }\n\n.fa-diagnoses::before {\n  content: \"\\f470\"; }\n\n.fa-person-dress::before {\n  content: \"\\f182\"; }\n\n.fa-female::before {\n  content: \"\\f182\"; }\n\n.fa-person-hiking::before {\n  content: \"\\f6ec\"; }\n\n.fa-hiking::before {\n  content: \"\\f6ec\"; }\n\n.fa-person-praying::before {\n  content: \"\\f683\"; }\n\n.fa-pray::before {\n  content: \"\\f683\"; }\n\n.fa-person-running::before {\n  content: \"\\f70c\"; }\n\n.fa-running::before {\n  content: \"\\f70c\"; }\n\n.fa-person-skating::before {\n  content: \"\\f7c5\"; }\n\n.fa-skating::before {\n  content: \"\\f7c5\"; }\n\n.fa-person-skiing::before {\n  content: \"\\f7c9\"; }\n\n.fa-skiing::before {\n  content: \"\\f7c9\"; }\n\n.fa-person-skiing-nordic::before {\n  content: \"\\f7ca\"; }\n\n.fa-skiing-nordic::before {\n  content: \"\\f7ca\"; }\n\n.fa-person-snowboarding::before {\n  content: \"\\f7ce\"; }\n\n.fa-snowboarding::before {\n  content: \"\\f7ce\"; }\n\n.fa-person-swimming::before {\n  content: \"\\f5c4\"; }\n\n.fa-swimmer::before {\n  content: \"\\f5c4\"; }\n\n.fa-person-walking::before {\n  content: \"\\f554\"; }\n\n.fa-walking::before {\n  content: \"\\f554\"; }\n\n.fa-person-walking-with-cane::before {\n  content: \"\\f29d\"; }\n\n.fa-blind::before {\n  content: \"\\f29d\"; }\n\n.fa-peseta-sign::before {\n  content: \"\\e221\"; }\n\n.fa-peso-sign::before {\n  content: \"\\e222\"; }\n\n.fa-phone::before {\n  content: \"\\f095\"; }\n\n.fa-phone-flip::before {\n  content: \"\\f879\"; }\n\n.fa-phone-alt::before {\n  content: \"\\f879\"; }\n\n.fa-phone-slash::before {\n  content: \"\\f3dd\"; }\n\n.fa-phone-volume::before {\n  content: \"\\f2a0\"; }\n\n.fa-volume-control-phone::before {\n  content: \"\\f2a0\"; }\n\n.fa-photo-film::before {\n  content: \"\\f87c\"; }\n\n.fa-photo-video::before {\n  content: \"\\f87c\"; }\n\n.fa-piggy-bank::before {\n  content: \"\\f4d3\"; }\n\n.fa-pills::before {\n  content: \"\\f484\"; }\n\n.fa-pizza-slice::before {\n  content: \"\\f818\"; }\n\n.fa-place-of-worship::before {\n  content: \"\\f67f\"; }\n\n.fa-plane::before {\n  content: \"\\f072\"; }\n\n.fa-plane-arrival::before {\n  content: \"\\f5af\"; }\n\n.fa-plane-departure::before {\n  content: \"\\f5b0\"; }\n\n.fa-plane-slash::before {\n  content: \"\\e069\"; }\n\n.fa-play::before {\n  content: \"\\f04b\"; }\n\n.fa-plug::before {\n  content: \"\\f1e6\"; }\n\n.fa-plus::before {\n  content: \"\\2b\"; }\n\n.fa-add::before {\n  content: \"\\2b\"; }\n\n.fa-plus-minus::before {\n  content: \"\\e43c\"; }\n\n.fa-podcast::before {\n  content: \"\\f2ce\"; }\n\n.fa-poo::before {\n  content: \"\\f2fe\"; }\n\n.fa-poo-storm::before {\n  content: \"\\f75a\"; }\n\n.fa-poo-bolt::before {\n  content: \"\\f75a\"; }\n\n.fa-poop::before {\n  content: \"\\f619\"; }\n\n.fa-power-off::before {\n  content: \"\\f011\"; }\n\n.fa-prescription::before {\n  content: \"\\f5b1\"; }\n\n.fa-prescription-bottle::before {\n  content: \"\\f485\"; }\n\n.fa-prescription-bottle-medical::before {\n  content: \"\\f486\"; }\n\n.fa-prescription-bottle-alt::before {\n  content: \"\\f486\"; }\n\n.fa-print::before {\n  content: \"\\f02f\"; }\n\n.fa-pump-medical::before {\n  content: \"\\e06a\"; }\n\n.fa-pump-soap::before {\n  content: \"\\e06b\"; }\n\n.fa-puzzle-piece::before {\n  content: \"\\f12e\"; }\n\n.fa-q::before {\n  content: \"\\51\"; }\n\n.fa-qrcode::before {\n  content: \"\\f029\"; }\n\n.fa-question::before {\n  content: \"\\3f\"; }\n\n.fa-quote-left::before {\n  content: \"\\f10d\"; }\n\n.fa-quote-left-alt::before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right::before {\n  content: \"\\f10e\"; }\n\n.fa-quote-right-alt::before {\n  content: \"\\f10e\"; }\n\n.fa-r::before {\n  content: \"\\52\"; }\n\n.fa-radiation::before {\n  content: \"\\f7b9\"; }\n\n.fa-rainbow::before {\n  content: \"\\f75b\"; }\n\n.fa-receipt::before {\n  content: \"\\f543\"; }\n\n.fa-record-vinyl::before {\n  content: \"\\f8d9\"; }\n\n.fa-rectangle-ad::before {\n  content: \"\\f641\"; }\n\n.fa-ad::before {\n  content: \"\\f641\"; }\n\n.fa-rectangle-list::before {\n  content: \"\\f022\"; }\n\n.fa-list-alt::before {\n  content: \"\\f022\"; }\n\n.fa-rectangle-xmark::before {\n  content: \"\\f410\"; }\n\n.fa-rectangle-times::before {\n  content: \"\\f410\"; }\n\n.fa-times-rectangle::before {\n  content: \"\\f410\"; }\n\n.fa-window-close::before {\n  content: \"\\f410\"; }\n\n.fa-recycle::before {\n  content: \"\\f1b8\"; }\n\n.fa-registered::before {\n  content: \"\\f25d\"; }\n\n.fa-repeat::before {\n  content: \"\\f363\"; }\n\n.fa-reply::before {\n  content: \"\\f3e5\"; }\n\n.fa-mail-reply::before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all::before {\n  content: \"\\f122\"; }\n\n.fa-mail-reply-all::before {\n  content: \"\\f122\"; }\n\n.fa-republican::before {\n  content: \"\\f75e\"; }\n\n.fa-restroom::before {\n  content: \"\\f7bd\"; }\n\n.fa-retweet::before {\n  content: \"\\f079\"; }\n\n.fa-ribbon::before {\n  content: \"\\f4d6\"; }\n\n.fa-right-from-bracket::before {\n  content: \"\\f2f5\"; }\n\n.fa-sign-out-alt::before {\n  content: \"\\f2f5\"; }\n\n.fa-right-left::before {\n  content: \"\\f362\"; }\n\n.fa-exchange-alt::before {\n  content: \"\\f362\"; }\n\n.fa-right-long::before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-right::before {\n  content: \"\\f30b\"; }\n\n.fa-right-to-bracket::before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-in-alt::before {\n  content: \"\\f2f6\"; }\n\n.fa-ring::before {\n  content: \"\\f70b\"; }\n\n.fa-road::before {\n  content: \"\\f018\"; }\n\n.fa-robot::before {\n  content: \"\\f544\"; }\n\n.fa-rocket::before {\n  content: \"\\f135\"; }\n\n.fa-rotate::before {\n  content: \"\\f2f1\"; }\n\n.fa-sync-alt::before {\n  content: \"\\f2f1\"; }\n\n.fa-rotate-left::before {\n  content: \"\\f2ea\"; }\n\n.fa-rotate-back::before {\n  content: \"\\f2ea\"; }\n\n.fa-rotate-backward::before {\n  content: \"\\f2ea\"; }\n\n.fa-undo-alt::before {\n  content: \"\\f2ea\"; }\n\n.fa-rotate-right::before {\n  content: \"\\f2f9\"; }\n\n.fa-redo-alt::before {\n  content: \"\\f2f9\"; }\n\n.fa-rotate-forward::before {\n  content: \"\\f2f9\"; }\n\n.fa-route::before {\n  content: \"\\f4d7\"; }\n\n.fa-rss::before {\n  content: \"\\f09e\"; }\n\n.fa-feed::before {\n  content: \"\\f09e\"; }\n\n.fa-ruble-sign::before {\n  content: \"\\f158\"; }\n\n.fa-rouble::before {\n  content: \"\\f158\"; }\n\n.fa-rub::before {\n  content: \"\\f158\"; }\n\n.fa-ruble::before {\n  content: \"\\f158\"; }\n\n.fa-ruler::before {\n  content: \"\\f545\"; }\n\n.fa-ruler-combined::before {\n  content: \"\\f546\"; }\n\n.fa-ruler-horizontal::before {\n  content: \"\\f547\"; }\n\n.fa-ruler-vertical::before {\n  content: \"\\f548\"; }\n\n.fa-rupee-sign::before {\n  content: \"\\f156\"; }\n\n.fa-rupee::before {\n  content: \"\\f156\"; }\n\n.fa-rupiah-sign::before {\n  content: \"\\e23d\"; }\n\n.fa-s::before {\n  content: \"\\53\"; }\n\n.fa-sailboat::before {\n  content: \"\\e445\"; }\n\n.fa-satellite::before {\n  content: \"\\f7bf\"; }\n\n.fa-satellite-dish::before {\n  content: \"\\f7c0\"; }\n\n.fa-scale-balanced::before {\n  content: \"\\f24e\"; }\n\n.fa-balance-scale::before {\n  content: \"\\f24e\"; }\n\n.fa-scale-unbalanced::before {\n  content: \"\\f515\"; }\n\n.fa-balance-scale-left::before {\n  content: \"\\f515\"; }\n\n.fa-scale-unbalanced-flip::before {\n  content: \"\\f516\"; }\n\n.fa-balance-scale-right::before {\n  content: \"\\f516\"; }\n\n.fa-school::before {\n  content: \"\\f549\"; }\n\n.fa-scissors::before {\n  content: \"\\f0c4\"; }\n\n.fa-cut::before {\n  content: \"\\f0c4\"; }\n\n.fa-screwdriver::before {\n  content: \"\\f54a\"; }\n\n.fa-screwdriver-wrench::before {\n  content: \"\\f7d9\"; }\n\n.fa-tools::before {\n  content: \"\\f7d9\"; }\n\n.fa-scroll::before {\n  content: \"\\f70e\"; }\n\n.fa-scroll-torah::before {\n  content: \"\\f6a0\"; }\n\n.fa-torah::before {\n  content: \"\\f6a0\"; }\n\n.fa-sd-card::before {\n  content: \"\\f7c2\"; }\n\n.fa-section::before {\n  content: \"\\e447\"; }\n\n.fa-seedling::before {\n  content: \"\\f4d8\"; }\n\n.fa-sprout::before {\n  content: \"\\f4d8\"; }\n\n.fa-server::before {\n  content: \"\\f233\"; }\n\n.fa-shapes::before {\n  content: \"\\f61f\"; }\n\n.fa-triangle-circle-square::before {\n  content: \"\\f61f\"; }\n\n.fa-share::before {\n  content: \"\\f064\"; }\n\n.fa-arrow-turn-right::before {\n  content: \"\\f064\"; }\n\n.fa-mail-forward::before {\n  content: \"\\f064\"; }\n\n.fa-share-from-square::before {\n  content: \"\\f14d\"; }\n\n.fa-share-square::before {\n  content: \"\\f14d\"; }\n\n.fa-share-nodes::before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt::before {\n  content: \"\\f1e0\"; }\n\n.fa-shekel-sign::before {\n  content: \"\\f20b\"; }\n\n.fa-ils::before {\n  content: \"\\f20b\"; }\n\n.fa-shekel::before {\n  content: \"\\f20b\"; }\n\n.fa-sheqel::before {\n  content: \"\\f20b\"; }\n\n.fa-sheqel-sign::before {\n  content: \"\\f20b\"; }\n\n.fa-shield::before {\n  content: \"\\f132\"; }\n\n.fa-shield-blank::before {\n  content: \"\\f3ed\"; }\n\n.fa-shield-alt::before {\n  content: \"\\f3ed\"; }\n\n.fa-shield-virus::before {\n  content: \"\\e06c\"; }\n\n.fa-ship::before {\n  content: \"\\f21a\"; }\n\n.fa-shirt::before {\n  content: \"\\f553\"; }\n\n.fa-t-shirt::before {\n  content: \"\\f553\"; }\n\n.fa-tshirt::before {\n  content: \"\\f553\"; }\n\n.fa-shoe-prints::before {\n  content: \"\\f54b\"; }\n\n.fa-shop::before {\n  content: \"\\f54f\"; }\n\n.fa-store-alt::before {\n  content: \"\\f54f\"; }\n\n.fa-shop-slash::before {\n  content: \"\\e070\"; }\n\n.fa-store-alt-slash::before {\n  content: \"\\e070\"; }\n\n.fa-shower::before {\n  content: \"\\f2cc\"; }\n\n.fa-shrimp::before {\n  content: \"\\e448\"; }\n\n.fa-shuffle::before {\n  content: \"\\f074\"; }\n\n.fa-random::before {\n  content: \"\\f074\"; }\n\n.fa-shuttle-space::before {\n  content: \"\\f197\"; }\n\n.fa-space-shuttle::before {\n  content: \"\\f197\"; }\n\n.fa-sign-hanging::before {\n  content: \"\\f4d9\"; }\n\n.fa-sign::before {\n  content: \"\\f4d9\"; }\n\n.fa-signal::before {\n  content: \"\\f012\"; }\n\n.fa-signal-5::before {\n  content: \"\\f012\"; }\n\n.fa-signal-perfect::before {\n  content: \"\\f012\"; }\n\n.fa-signature::before {\n  content: \"\\f5b7\"; }\n\n.fa-signs-post::before {\n  content: \"\\f277\"; }\n\n.fa-map-signs::before {\n  content: \"\\f277\"; }\n\n.fa-sim-card::before {\n  content: \"\\f7c4\"; }\n\n.fa-sink::before {\n  content: \"\\e06d\"; }\n\n.fa-sitemap::before {\n  content: \"\\f0e8\"; }\n\n.fa-skull::before {\n  content: \"\\f54c\"; }\n\n.fa-skull-crossbones::before {\n  content: \"\\f714\"; }\n\n.fa-slash::before {\n  content: \"\\f715\"; }\n\n.fa-sleigh::before {\n  content: \"\\f7cc\"; }\n\n.fa-sliders::before {\n  content: \"\\f1de\"; }\n\n.fa-sliders-h::before {\n  content: \"\\f1de\"; }\n\n.fa-smog::before {\n  content: \"\\f75f\"; }\n\n.fa-smoking::before {\n  content: \"\\f48d\"; }\n\n.fa-snowflake::before {\n  content: \"\\f2dc\"; }\n\n.fa-snowman::before {\n  content: \"\\f7d0\"; }\n\n.fa-snowplow::before {\n  content: \"\\f7d2\"; }\n\n.fa-soap::before {\n  content: \"\\e06e\"; }\n\n.fa-socks::before {\n  content: \"\\f696\"; }\n\n.fa-solar-panel::before {\n  content: \"\\f5ba\"; }\n\n.fa-sort::before {\n  content: \"\\f0dc\"; }\n\n.fa-unsorted::before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-down::before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-desc::before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-up::before {\n  content: \"\\f0de\"; }\n\n.fa-sort-asc::before {\n  content: \"\\f0de\"; }\n\n.fa-spa::before {\n  content: \"\\f5bb\"; }\n\n.fa-spaghetti-monster-flying::before {\n  content: \"\\f67b\"; }\n\n.fa-pastafarianism::before {\n  content: \"\\f67b\"; }\n\n.fa-spell-check::before {\n  content: \"\\f891\"; }\n\n.fa-spider::before {\n  content: \"\\f717\"; }\n\n.fa-spinner::before {\n  content: \"\\f110\"; }\n\n.fa-splotch::before {\n  content: \"\\f5bc\"; }\n\n.fa-spoon::before {\n  content: \"\\f2e5\"; }\n\n.fa-utensil-spoon::before {\n  content: \"\\f2e5\"; }\n\n.fa-spray-can::before {\n  content: \"\\f5bd\"; }\n\n.fa-spray-can-sparkles::before {\n  content: \"\\f5d0\"; }\n\n.fa-air-freshener::before {\n  content: \"\\f5d0\"; }\n\n.fa-square::before {\n  content: \"\\f0c8\"; }\n\n.fa-square-arrow-up-right::before {\n  content: \"\\f14c\"; }\n\n.fa-external-link-square::before {\n  content: \"\\f14c\"; }\n\n.fa-square-caret-down::before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-down::before {\n  content: \"\\f150\"; }\n\n.fa-square-caret-left::before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-left::before {\n  content: \"\\f191\"; }\n\n.fa-square-caret-right::before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-right::before {\n  content: \"\\f152\"; }\n\n.fa-square-caret-up::before {\n  content: \"\\f151\"; }\n\n.fa-caret-square-up::before {\n  content: \"\\f151\"; }\n\n.fa-square-check::before {\n  content: \"\\f14a\"; }\n\n.fa-check-square::before {\n  content: \"\\f14a\"; }\n\n.fa-square-envelope::before {\n  content: \"\\f199\"; }\n\n.fa-envelope-square::before {\n  content: \"\\f199\"; }\n\n.fa-square-full::before {\n  content: \"\\f45c\"; }\n\n.fa-square-h::before {\n  content: \"\\f0fd\"; }\n\n.fa-h-square::before {\n  content: \"\\f0fd\"; }\n\n.fa-square-minus::before {\n  content: \"\\f146\"; }\n\n.fa-minus-square::before {\n  content: \"\\f146\"; }\n\n.fa-square-parking::before {\n  content: \"\\f540\"; }\n\n.fa-parking::before {\n  content: \"\\f540\"; }\n\n.fa-square-pen::before {\n  content: \"\\f14b\"; }\n\n.fa-pen-square::before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-square::before {\n  content: \"\\f14b\"; }\n\n.fa-square-phone::before {\n  content: \"\\f098\"; }\n\n.fa-phone-square::before {\n  content: \"\\f098\"; }\n\n.fa-square-phone-flip::before {\n  content: \"\\f87b\"; }\n\n.fa-phone-square-alt::before {\n  content: \"\\f87b\"; }\n\n.fa-square-plus::before {\n  content: \"\\f0fe\"; }\n\n.fa-plus-square::before {\n  content: \"\\f0fe\"; }\n\n.fa-square-poll-horizontal::before {\n  content: \"\\f682\"; }\n\n.fa-poll-h::before {\n  content: \"\\f682\"; }\n\n.fa-square-poll-vertical::before {\n  content: \"\\f681\"; }\n\n.fa-poll::before {\n  content: \"\\f681\"; }\n\n.fa-square-root-variable::before {\n  content: \"\\f698\"; }\n\n.fa-square-root-alt::before {\n  content: \"\\f698\"; }\n\n.fa-square-rss::before {\n  content: \"\\f143\"; }\n\n.fa-rss-square::before {\n  content: \"\\f143\"; }\n\n.fa-square-share-nodes::before {\n  content: \"\\f1e1\"; }\n\n.fa-share-alt-square::before {\n  content: \"\\f1e1\"; }\n\n.fa-square-up-right::before {\n  content: \"\\f360\"; }\n\n.fa-external-link-square-alt::before {\n  content: \"\\f360\"; }\n\n.fa-square-xmark::before {\n  content: \"\\f2d3\"; }\n\n.fa-times-square::before {\n  content: \"\\f2d3\"; }\n\n.fa-xmark-square::before {\n  content: \"\\f2d3\"; }\n\n.fa-stairs::before {\n  content: \"\\e289\"; }\n\n.fa-stamp::before {\n  content: \"\\f5bf\"; }\n\n.fa-star::before {\n  content: \"\\f005\"; }\n\n.fa-star-and-crescent::before {\n  content: \"\\f699\"; }\n\n.fa-star-half::before {\n  content: \"\\f089\"; }\n\n.fa-star-half-stroke::before {\n  content: \"\\f5c0\"; }\n\n.fa-star-half-alt::before {\n  content: \"\\f5c0\"; }\n\n.fa-star-of-david::before {\n  content: \"\\f69a\"; }\n\n.fa-star-of-life::before {\n  content: \"\\f621\"; }\n\n.fa-sterling-sign::before {\n  content: \"\\f154\"; }\n\n.fa-gbp::before {\n  content: \"\\f154\"; }\n\n.fa-pound-sign::before {\n  content: \"\\f154\"; }\n\n.fa-stethoscope::before {\n  content: \"\\f0f1\"; }\n\n.fa-stop::before {\n  content: \"\\f04d\"; }\n\n.fa-stopwatch::before {\n  content: \"\\f2f2\"; }\n\n.fa-stopwatch-20::before {\n  content: \"\\e06f\"; }\n\n.fa-store::before {\n  content: \"\\f54e\"; }\n\n.fa-store-slash::before {\n  content: \"\\e071\"; }\n\n.fa-street-view::before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough::before {\n  content: \"\\f0cc\"; }\n\n.fa-stroopwafel::before {\n  content: \"\\f551\"; }\n\n.fa-subscript::before {\n  content: \"\\f12c\"; }\n\n.fa-suitcase::before {\n  content: \"\\f0f2\"; }\n\n.fa-suitcase-medical::before {\n  content: \"\\f0fa\"; }\n\n.fa-medkit::before {\n  content: \"\\f0fa\"; }\n\n.fa-suitcase-rolling::before {\n  content: \"\\f5c1\"; }\n\n.fa-sun::before {\n  content: \"\\f185\"; }\n\n.fa-superscript::before {\n  content: \"\\f12b\"; }\n\n.fa-swatchbook::before {\n  content: \"\\f5c3\"; }\n\n.fa-synagogue::before {\n  content: \"\\f69b\"; }\n\n.fa-syringe::before {\n  content: \"\\f48e\"; }\n\n.fa-t::before {\n  content: \"\\54\"; }\n\n.fa-table::before {\n  content: \"\\f0ce\"; }\n\n.fa-table-cells::before {\n  content: \"\\f00a\"; }\n\n.fa-th::before {\n  content: \"\\f00a\"; }\n\n.fa-table-cells-large::before {\n  content: \"\\f009\"; }\n\n.fa-th-large::before {\n  content: \"\\f009\"; }\n\n.fa-table-columns::before {\n  content: \"\\f0db\"; }\n\n.fa-columns::before {\n  content: \"\\f0db\"; }\n\n.fa-table-list::before {\n  content: \"\\f00b\"; }\n\n.fa-th-list::before {\n  content: \"\\f00b\"; }\n\n.fa-table-tennis-paddle-ball::before {\n  content: \"\\f45d\"; }\n\n.fa-ping-pong-paddle-ball::before {\n  content: \"\\f45d\"; }\n\n.fa-table-tennis::before {\n  content: \"\\f45d\"; }\n\n.fa-tablet::before {\n  content: \"\\f3fb\"; }\n\n.fa-tablet-android::before {\n  content: \"\\f3fb\"; }\n\n.fa-tablet-button::before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-screen-button::before {\n  content: \"\\f3fa\"; }\n\n.fa-tablet-alt::before {\n  content: \"\\f3fa\"; }\n\n.fa-tablets::before {\n  content: \"\\f490\"; }\n\n.fa-tachograph-digital::before {\n  content: \"\\f566\"; }\n\n.fa-digital-tachograph::before {\n  content: \"\\f566\"; }\n\n.fa-tag::before {\n  content: \"\\f02b\"; }\n\n.fa-tags::before {\n  content: \"\\f02c\"; }\n\n.fa-tape::before {\n  content: \"\\f4db\"; }\n\n.fa-taxi::before {\n  content: \"\\f1ba\"; }\n\n.fa-cab::before {\n  content: \"\\f1ba\"; }\n\n.fa-teeth::before {\n  content: \"\\f62e\"; }\n\n.fa-teeth-open::before {\n  content: \"\\f62f\"; }\n\n.fa-temperature-empty::before {\n  content: \"\\f2cb\"; }\n\n.fa-temperature-0::before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-0::before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-empty::before {\n  content: \"\\f2cb\"; }\n\n.fa-temperature-full::before {\n  content: \"\\f2c7\"; }\n\n.fa-temperature-4::before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-4::before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-full::before {\n  content: \"\\f2c7\"; }\n\n.fa-temperature-half::before {\n  content: \"\\f2c9\"; }\n\n.fa-temperature-2::before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-2::before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-half::before {\n  content: \"\\f2c9\"; }\n\n.fa-temperature-high::before {\n  content: \"\\f769\"; }\n\n.fa-temperature-low::before {\n  content: \"\\f76b\"; }\n\n.fa-temperature-quarter::before {\n  content: \"\\f2ca\"; }\n\n.fa-temperature-1::before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-1::before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-quarter::before {\n  content: \"\\f2ca\"; }\n\n.fa-temperature-three-quarters::before {\n  content: \"\\f2c8\"; }\n\n.fa-temperature-3::before {\n  content: \"\\f2c8\"; }\n\n.fa-thermometer-3::before {\n  content: \"\\f2c8\"; }\n\n.fa-thermometer-three-quarters::before {\n  content: \"\\f2c8\"; }\n\n.fa-tenge-sign::before {\n  content: \"\\f7d7\"; }\n\n.fa-tenge::before {\n  content: \"\\f7d7\"; }\n\n.fa-terminal::before {\n  content: \"\\f120\"; }\n\n.fa-text-height::before {\n  content: \"\\f034\"; }\n\n.fa-text-slash::before {\n  content: \"\\f87d\"; }\n\n.fa-remove-format::before {\n  content: \"\\f87d\"; }\n\n.fa-text-width::before {\n  content: \"\\f035\"; }\n\n.fa-thermometer::before {\n  content: \"\\f491\"; }\n\n.fa-thumbs-down::before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up::before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack::before {\n  content: \"\\f08d\"; }\n\n.fa-thumb-tack::before {\n  content: \"\\f08d\"; }\n\n.fa-ticket::before {\n  content: \"\\f145\"; }\n\n.fa-ticket-simple::before {\n  content: \"\\f3ff\"; }\n\n.fa-ticket-alt::before {\n  content: \"\\f3ff\"; }\n\n.fa-timeline::before {\n  content: \"\\e29c\"; }\n\n.fa-toggle-off::before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on::before {\n  content: \"\\f205\"; }\n\n.fa-toilet::before {\n  content: \"\\f7d8\"; }\n\n.fa-toilet-paper::before {\n  content: \"\\f71e\"; }\n\n.fa-toilet-paper-slash::before {\n  content: \"\\e072\"; }\n\n.fa-toolbox::before {\n  content: \"\\f552\"; }\n\n.fa-tooth::before {\n  content: \"\\f5c9\"; }\n\n.fa-torii-gate::before {\n  content: \"\\f6a1\"; }\n\n.fa-tower-broadcast::before {\n  content: \"\\f519\"; }\n\n.fa-broadcast-tower::before {\n  content: \"\\f519\"; }\n\n.fa-tractor::before {\n  content: \"\\f722\"; }\n\n.fa-trademark::before {\n  content: \"\\f25c\"; }\n\n.fa-traffic-light::before {\n  content: \"\\f637\"; }\n\n.fa-trailer::before {\n  content: \"\\e041\"; }\n\n.fa-train::before {\n  content: \"\\f238\"; }\n\n.fa-train-subway::before {\n  content: \"\\f239\"; }\n\n.fa-subway::before {\n  content: \"\\f239\"; }\n\n.fa-train-tram::before {\n  content: \"\\f7da\"; }\n\n.fa-tram::before {\n  content: \"\\f7da\"; }\n\n.fa-transgender::before {\n  content: \"\\f225\"; }\n\n.fa-transgender-alt::before {\n  content: \"\\f225\"; }\n\n.fa-trash::before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-arrow-up::before {\n  content: \"\\f829\"; }\n\n.fa-trash-restore::before {\n  content: \"\\f829\"; }\n\n.fa-trash-can::before {\n  content: \"\\f2ed\"; }\n\n.fa-trash-alt::before {\n  content: \"\\f2ed\"; }\n\n.fa-trash-can-arrow-up::before {\n  content: \"\\f82a\"; }\n\n.fa-trash-restore-alt::before {\n  content: \"\\f82a\"; }\n\n.fa-tree::before {\n  content: \"\\f1bb\"; }\n\n.fa-triangle-exclamation::before {\n  content: \"\\f071\"; }\n\n.fa-exclamation-triangle::before {\n  content: \"\\f071\"; }\n\n.fa-warning::before {\n  content: \"\\f071\"; }\n\n.fa-trophy::before {\n  content: \"\\f091\"; }\n\n.fa-truck::before {\n  content: \"\\f0d1\"; }\n\n.fa-truck-fast::before {\n  content: \"\\f48b\"; }\n\n.fa-shipping-fast::before {\n  content: \"\\f48b\"; }\n\n.fa-truck-medical::before {\n  content: \"\\f0f9\"; }\n\n.fa-ambulance::before {\n  content: \"\\f0f9\"; }\n\n.fa-truck-monster::before {\n  content: \"\\f63b\"; }\n\n.fa-truck-moving::before {\n  content: \"\\f4df\"; }\n\n.fa-truck-pickup::before {\n  content: \"\\f63c\"; }\n\n.fa-truck-ramp-box::before {\n  content: \"\\f4de\"; }\n\n.fa-truck-loading::before {\n  content: \"\\f4de\"; }\n\n.fa-tty::before {\n  content: \"\\f1e4\"; }\n\n.fa-teletype::before {\n  content: \"\\f1e4\"; }\n\n.fa-turkish-lira-sign::before {\n  content: \"\\e2bb\"; }\n\n.fa-try::before {\n  content: \"\\e2bb\"; }\n\n.fa-turkish-lira::before {\n  content: \"\\e2bb\"; }\n\n.fa-turn-down::before {\n  content: \"\\f3be\"; }\n\n.fa-level-down-alt::before {\n  content: \"\\f3be\"; }\n\n.fa-turn-up::before {\n  content: \"\\f3bf\"; }\n\n.fa-level-up-alt::before {\n  content: \"\\f3bf\"; }\n\n.fa-tv::before {\n  content: \"\\f26c\"; }\n\n.fa-television::before {\n  content: \"\\f26c\"; }\n\n.fa-tv-alt::before {\n  content: \"\\f26c\"; }\n\n.fa-u::before {\n  content: \"\\55\"; }\n\n.fa-umbrella::before {\n  content: \"\\f0e9\"; }\n\n.fa-umbrella-beach::before {\n  content: \"\\f5ca\"; }\n\n.fa-underline::before {\n  content: \"\\f0cd\"; }\n\n.fa-universal-access::before {\n  content: \"\\f29a\"; }\n\n.fa-unlock::before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-keyhole::before {\n  content: \"\\f13e\"; }\n\n.fa-unlock-alt::before {\n  content: \"\\f13e\"; }\n\n.fa-up-down::before {\n  content: \"\\f338\"; }\n\n.fa-arrows-alt-v::before {\n  content: \"\\f338\"; }\n\n.fa-up-down-left-right::before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt::before {\n  content: \"\\f0b2\"; }\n\n.fa-up-long::before {\n  content: \"\\f30c\"; }\n\n.fa-long-arrow-alt-up::before {\n  content: \"\\f30c\"; }\n\n.fa-up-right-and-down-left-from-center::before {\n  content: \"\\f424\"; }\n\n.fa-expand-alt::before {\n  content: \"\\f424\"; }\n\n.fa-up-right-from-square::before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-alt::before {\n  content: \"\\f35d\"; }\n\n.fa-upload::before {\n  content: \"\\f093\"; }\n\n.fa-user::before {\n  content: \"\\f007\"; }\n\n.fa-user-astronaut::before {\n  content: \"\\f4fb\"; }\n\n.fa-user-check::before {\n  content: \"\\f4fc\"; }\n\n.fa-user-clock::before {\n  content: \"\\f4fd\"; }\n\n.fa-user-doctor::before {\n  content: \"\\f0f0\"; }\n\n.fa-user-md::before {\n  content: \"\\f0f0\"; }\n\n.fa-user-gear::before {\n  content: \"\\f4fe\"; }\n\n.fa-user-cog::before {\n  content: \"\\f4fe\"; }\n\n.fa-user-graduate::before {\n  content: \"\\f501\"; }\n\n.fa-user-group::before {\n  content: \"\\f500\"; }\n\n.fa-user-friends::before {\n  content: \"\\f500\"; }\n\n.fa-user-injured::before {\n  content: \"\\f728\"; }\n\n.fa-user-large::before {\n  content: \"\\f406\"; }\n\n.fa-user-alt::before {\n  content: \"\\f406\"; }\n\n.fa-user-large-slash::before {\n  content: \"\\f4fa\"; }\n\n.fa-user-alt-slash::before {\n  content: \"\\f4fa\"; }\n\n.fa-user-lock::before {\n  content: \"\\f502\"; }\n\n.fa-user-minus::before {\n  content: \"\\f503\"; }\n\n.fa-user-ninja::before {\n  content: \"\\f504\"; }\n\n.fa-user-nurse::before {\n  content: \"\\f82f\"; }\n\n.fa-user-pen::before {\n  content: \"\\f4ff\"; }\n\n.fa-user-edit::before {\n  content: \"\\f4ff\"; }\n\n.fa-user-plus::before {\n  content: \"\\f234\"; }\n\n.fa-user-secret::before {\n  content: \"\\f21b\"; }\n\n.fa-user-shield::before {\n  content: \"\\f505\"; }\n\n.fa-user-slash::before {\n  content: \"\\f506\"; }\n\n.fa-user-tag::before {\n  content: \"\\f507\"; }\n\n.fa-user-tie::before {\n  content: \"\\f508\"; }\n\n.fa-user-xmark::before {\n  content: \"\\f235\"; }\n\n.fa-user-times::before {\n  content: \"\\f235\"; }\n\n.fa-users::before {\n  content: \"\\f0c0\"; }\n\n.fa-users-gear::before {\n  content: \"\\f509\"; }\n\n.fa-users-cog::before {\n  content: \"\\f509\"; }\n\n.fa-users-slash::before {\n  content: \"\\e073\"; }\n\n.fa-utensils::before {\n  content: \"\\f2e7\"; }\n\n.fa-cutlery::before {\n  content: \"\\f2e7\"; }\n\n.fa-v::before {\n  content: \"\\56\"; }\n\n.fa-van-shuttle::before {\n  content: \"\\f5b6\"; }\n\n.fa-shuttle-van::before {\n  content: \"\\f5b6\"; }\n\n.fa-vault::before {\n  content: \"\\e2c5\"; }\n\n.fa-vector-square::before {\n  content: \"\\f5cb\"; }\n\n.fa-venus::before {\n  content: \"\\f221\"; }\n\n.fa-venus-double::before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars::before {\n  content: \"\\f228\"; }\n\n.fa-vest::before {\n  content: \"\\e085\"; }\n\n.fa-vest-patches::before {\n  content: \"\\e086\"; }\n\n.fa-vial::before {\n  content: \"\\f492\"; }\n\n.fa-vials::before {\n  content: \"\\f493\"; }\n\n.fa-video::before {\n  content: \"\\f03d\"; }\n\n.fa-video-camera::before {\n  content: \"\\f03d\"; }\n\n.fa-video-slash::before {\n  content: \"\\f4e2\"; }\n\n.fa-vihara::before {\n  content: \"\\f6a7\"; }\n\n.fa-virus::before {\n  content: \"\\e074\"; }\n\n.fa-virus-covid::before {\n  content: \"\\e4a8\"; }\n\n.fa-virus-covid-slash::before {\n  content: \"\\e4a9\"; }\n\n.fa-virus-slash::before {\n  content: \"\\e075\"; }\n\n.fa-viruses::before {\n  content: \"\\e076\"; }\n\n.fa-voicemail::before {\n  content: \"\\f897\"; }\n\n.fa-volleyball::before {\n  content: \"\\f45f\"; }\n\n.fa-volleyball-ball::before {\n  content: \"\\f45f\"; }\n\n.fa-volume-high::before {\n  content: \"\\f028\"; }\n\n.fa-volume-up::before {\n  content: \"\\f028\"; }\n\n.fa-volume-low::before {\n  content: \"\\f027\"; }\n\n.fa-volume-down::before {\n  content: \"\\f027\"; }\n\n.fa-volume-off::before {\n  content: \"\\f026\"; }\n\n.fa-volume-xmark::before {\n  content: \"\\f6a9\"; }\n\n.fa-volume-mute::before {\n  content: \"\\f6a9\"; }\n\n.fa-volume-times::before {\n  content: \"\\f6a9\"; }\n\n.fa-vr-cardboard::before {\n  content: \"\\f729\"; }\n\n.fa-w::before {\n  content: \"\\57\"; }\n\n.fa-wallet::before {\n  content: \"\\f555\"; }\n\n.fa-wand-magic::before {\n  content: \"\\f0d0\"; }\n\n.fa-magic::before {\n  content: \"\\f0d0\"; }\n\n.fa-wand-magic-sparkles::before {\n  content: \"\\e2ca\"; }\n\n.fa-magic-wand-sparkles::before {\n  content: \"\\e2ca\"; }\n\n.fa-wand-sparkles::before {\n  content: \"\\f72b\"; }\n\n.fa-warehouse::before {\n  content: \"\\f494\"; }\n\n.fa-water::before {\n  content: \"\\f773\"; }\n\n.fa-water-ladder::before {\n  content: \"\\f5c5\"; }\n\n.fa-ladder-water::before {\n  content: \"\\f5c5\"; }\n\n.fa-swimming-pool::before {\n  content: \"\\f5c5\"; }\n\n.fa-wave-square::before {\n  content: \"\\f83e\"; }\n\n.fa-weight-hanging::before {\n  content: \"\\f5cd\"; }\n\n.fa-weight-scale::before {\n  content: \"\\f496\"; }\n\n.fa-weight::before {\n  content: \"\\f496\"; }\n\n.fa-wheelchair::before {\n  content: \"\\f193\"; }\n\n.fa-whiskey-glass::before {\n  content: \"\\f7a0\"; }\n\n.fa-glass-whiskey::before {\n  content: \"\\f7a0\"; }\n\n.fa-wifi::before {\n  content: \"\\f1eb\"; }\n\n.fa-wifi-3::before {\n  content: \"\\f1eb\"; }\n\n.fa-wifi-strong::before {\n  content: \"\\f1eb\"; }\n\n.fa-wind::before {\n  content: \"\\f72e\"; }\n\n.fa-window-maximize::before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize::before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore::before {\n  content: \"\\f2d2\"; }\n\n.fa-wine-bottle::before {\n  content: \"\\f72f\"; }\n\n.fa-wine-glass::before {\n  content: \"\\f4e3\"; }\n\n.fa-wine-glass-empty::before {\n  content: \"\\f5ce\"; }\n\n.fa-wine-glass-alt::before {\n  content: \"\\f5ce\"; }\n\n.fa-won-sign::before {\n  content: \"\\f159\"; }\n\n.fa-krw::before {\n  content: \"\\f159\"; }\n\n.fa-won::before {\n  content: \"\\f159\"; }\n\n.fa-wrench::before {\n  content: \"\\f0ad\"; }\n\n.fa-x::before {\n  content: \"\\58\"; }\n\n.fa-x-ray::before {\n  content: \"\\f497\"; }\n\n.fa-xmark::before {\n  content: \"\\f00d\"; }\n\n.fa-close::before {\n  content: \"\\f00d\"; }\n\n.fa-multiply::before {\n  content: \"\\f00d\"; }\n\n.fa-remove::before {\n  content: \"\\f00d\"; }\n\n.fa-times::before {\n  content: \"\\f00d\"; }\n\n.fa-y::before {\n  content: \"\\59\"; }\n\n.fa-yen-sign::before {\n  content: \"\\f157\"; }\n\n.fa-cny::before {\n  content: \"\\f157\"; }\n\n.fa-jpy::before {\n  content: \"\\f157\"; }\n\n.fa-rmb::before {\n  content: \"\\f157\"; }\n\n.fa-yen::before {\n  content: \"\\f157\"; }\n\n.fa-yin-yang::before {\n  content: \"\\f6ad\"; }\n\n.fa-z::before {\n  content: \"\\5a\"; }\n\n.sr-only,\n.fa-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0; }\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0; }\n:root, :host {\n  --fa-font-brands: normal 400 1em/1 \"Font Awesome 6 Brands\"; }\n\n@font-face {\n  font-family: 'Font Awesome 6 Brands';\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"); }\n\n.fab,\n.fa-brands {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa-42-group:before {\n  content: \"\\e080\"; }\n\n.fa-innosoft:before {\n  content: \"\\e080\"; }\n\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-airbnb:before {\n  content: \"\\f834\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-alipay:before {\n  content: \"\\f642\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-artstation:before {\n  content: \"\\f77a\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-atlassian:before {\n  content: \"\\f77b\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-battle-net:before {\n  content: \"\\f835\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bilibili:before {\n  content: \"\\e3d9\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bootstrap:before {\n  content: \"\\f836\"; }\n\n.fa-bots:before {\n  content: \"\\e340\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-buffer:before {\n  content: \"\\f837\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-buy-n-large:before {\n  content: \"\\f8a6\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-canadian-maple-leaf:before {\n  content: \"\\f785\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-centos:before {\n  content: \"\\f789\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-chromecast:before {\n  content: \"\\f838\"; }\n\n.fa-cloudflare:before {\n  content: \"\\e07d\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-cmplid:before {\n  content: \"\\e360\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-confluence:before {\n  content: \"\\f78d\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-cotton-bureau:before {\n  content: \"\\f89e\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-creative-commons-by:before {\n  content: \"\\f4e7\"; }\n\n.fa-creative-commons-nc:before {\n  content: \"\\f4e8\"; }\n\n.fa-creative-commons-nc-eu:before {\n  content: \"\\f4e9\"; }\n\n.fa-creative-commons-nc-jp:before {\n  content: \"\\f4ea\"; }\n\n.fa-creative-commons-nd:before {\n  content: \"\\f4eb\"; }\n\n.fa-creative-commons-pd:before {\n  content: \"\\f4ec\"; }\n\n.fa-creative-commons-pd-alt:before {\n  content: \"\\f4ed\"; }\n\n.fa-creative-commons-remix:before {\n  content: \"\\f4ee\"; }\n\n.fa-creative-commons-sa:before {\n  content: \"\\f4ef\"; }\n\n.fa-creative-commons-sampling:before {\n  content: \"\\f4f0\"; }\n\n.fa-creative-commons-sampling-plus:before {\n  content: \"\\f4f1\"; }\n\n.fa-creative-commons-share:before {\n  content: \"\\f4f2\"; }\n\n.fa-creative-commons-zero:before {\n  content: \"\\f4f3\"; }\n\n.fa-critical-role:before {\n  content: \"\\f6c9\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-d-and-d-beyond:before {\n  content: \"\\f6ca\"; }\n\n.fa-dailymotion:before {\n  content: \"\\e052\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-deezer:before {\n  content: \"\\e077\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-dev:before {\n  content: \"\\f6cc\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-dhl:before {\n  content: \"\\f790\"; }\n\n.fa-diaspora:before {\n  content: \"\\f791\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-ebay:before {\n  content: \"\\f4f4\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edge-legacy:before {\n  content: \"\\e078\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ello:before {\n  content: \"\\f5f1\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-evernote:before {\n  content: \"\\f839\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fantasy-flight-games:before {\n  content: \"\\f6dc\"; }\n\n.fa-fedex:before {\n  content: \"\\f797\"; }\n\n.fa-fedora:before {\n  content: \"\\f798\"; }\n\n.fa-figma:before {\n  content: \"\\f799\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-firefox-browser:before {\n  content: \"\\e007\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-first-order-alt:before {\n  content: \"\\f50a\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-logo-full:before {\n  content: \"\\f2b4\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-fulcrum:before {\n  content: \"\\f50b\"; }\n\n.fa-galactic-republic:before {\n  content: \"\\f50c\"; }\n\n.fa-galactic-senate:before {\n  content: \"\\f50d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-alt:before {\n  content: \"\\f841\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golang:before {\n  content: \"\\e40f\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-pay:before {\n  content: \"\\e079\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-guilded:before {\n  content: \"\\e07e\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hackerrank:before {\n  content: \"\\f5f7\"; }\n\n.fa-hashnode:before {\n  content: \"\\e499\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-hive:before {\n  content: \"\\e07f\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hornbill:before {\n  content: \"\\f592\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-ideal:before {\n  content: \"\\e013\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-instagram-square:before {\n  content: \"\\e055\"; }\n\n.fa-instalod:before {\n  content: \"\\e081\"; }\n\n.fa-intercom:before {\n  content: \"\\f7af\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-invision:before {\n  content: \"\\f7b0\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-itch-io:before {\n  content: \"\\f83a\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-java:before {\n  content: \"\\f4e4\"; }\n\n.fa-jedi-order:before {\n  content: \"\\f50e\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-jira:before {\n  content: \"\\f7b1\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-kaggle:before {\n  content: \"\\f5fa\"; }\n\n.fa-keybase:before {\n  content: \"\\f4f5\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-mailchimp:before {\n  content: \"\\f59e\"; }\n\n.fa-mandalorian:before {\n  content: \"\\f50f\"; }\n\n.fa-markdown:before {\n  content: \"\\f60f\"; }\n\n.fa-mastodon:before {\n  content: \"\\f4f6\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-mdb:before {\n  content: \"\\f8ca\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f23a\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-megaport:before {\n  content: \"\\f5a3\"; }\n\n.fa-mendeley:before {\n  content: \"\\f7b3\"; }\n\n.fa-microblog:before {\n  content: \"\\e01a\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mixer:before {\n  content: \"\\e056\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neos:before {\n  content: \"\\f612\"; }\n\n.fa-nimblr:before {\n  content: \"\\f5a8\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-octopus-deploy:before {\n  content: \"\\e082\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-old-republic:before {\n  content: \"\\f510\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-orcid:before {\n  content: \"\\f8d2\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-padlet:before {\n  content: \"\\e4a0\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-perbyte:before {\n  content: \"\\e083\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phoenix-squadron:before {\n  content: \"\\f511\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-hat:before {\n  content: \"\\f4e5\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pied-piper-square:before {\n  content: \"\\e01e\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-pix:before {\n  content: \"\\e43a\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-r-project:before {\n  content: \"\\f4f7\"; }\n\n.fa-raspberry-pi:before {\n  content: \"\\f7bb\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-reacteurope:before {\n  content: \"\\f75d\"; }\n\n.fa-readme:before {\n  content: \"\\f4d5\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redhat:before {\n  content: \"\\f7bc\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-researchgate:before {\n  content: \"\\f4f8\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-rev:before {\n  content: \"\\f5b2\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rust:before {\n  content: \"\\e07a\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-salesforce:before {\n  content: \"\\f83b\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopify:before {\n  content: \"\\e057\"; }\n\n.fa-shopware:before {\n  content: \"\\f5b5\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sith:before {\n  content: \"\\f512\"; }\n\n.fa-sitrox:before {\n  content: \"\\e44a\"; }\n\n.fa-sketch:before {\n  content: \"\\f7c6\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f198\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-sourcetree:before {\n  content: \"\\f7d3\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-speaker-deck:before {\n  content: \"\\f83c\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square-font-awesome:before {\n  content: \"\\f425\"; }\n\n.fa-square-font-awesome-stroke:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-squarespace:before {\n  content: \"\\f5be\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-stackpath:before {\n  content: \"\\f842\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-suse:before {\n  content: \"\\f7d6\"; }\n\n.fa-swift:before {\n  content: \"\\f8e1\"; }\n\n.fa-symfony:before {\n  content: \"\\f83d\"; }\n\n.fa-teamspeak:before {\n  content: \"\\f4f9\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f2c6\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-the-red-yeti:before {\n  content: \"\\f69d\"; }\n\n.fa-themeco:before {\n  content: \"\\f5c6\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-think-peaks:before {\n  content: \"\\f731\"; }\n\n.fa-tiktok:before {\n  content: \"\\e07b\"; }\n\n.fa-trade-federation:before {\n  content: \"\\f513\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-ubuntu:before {\n  content: \"\\f7df\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbraco:before {\n  content: \"\\f8e8\"; }\n\n.fa-uncharted:before {\n  content: \"\\e084\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-unity:before {\n  content: \"\\e049\"; }\n\n.fa-unsplash:before {\n  content: \"\\e07c\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-ups:before {\n  content: \"\\f7e0\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-usps:before {\n  content: \"\\f7e1\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-watchman-monitoring:before {\n  content: \"\\e087\"; }\n\n.fa-waze:before {\n  content: \"\\f83f\"; }\n\n.fa-weebly:before {\n  content: \"\\f5cc\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-wirsindhandwerk:before {\n  content: \"\\e2d0\"; }\n\n.fa-wsh:before {\n  content: \"\\e2d0\"; }\n\n.fa-wix:before {\n  content: \"\\f5cf\"; }\n\n.fa-wizards-of-the-coast:before {\n  content: \"\\f730\"; }\n\n.fa-wodu:before {\n  content: \"\\e088\"; }\n\n.fa-wolf-pack-battalion:before {\n  content: \"\\f514\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wpressr:before {\n  content: \"\\f3e4\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yammer:before {\n  content: \"\\f840\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yarn:before {\n  content: \"\\f7e3\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.fa-zhihu:before {\n  content: \"\\f63f\"; }\n:root, :host {\n  --fa-font-regular: normal 400 1em/1 \"Font Awesome 6 Free\"; }\n\n@font-face {\n  font-family: 'Font Awesome 6 Free';\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"); }\n\n.far,\n.fa-regular {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n:root, :host {\n  --fa-font-solid: normal 900 1em/1 \"Font Awesome 6 Free\"; }\n\n@font-face {\n  font-family: 'Font Awesome 6 Free';\n  font-style: normal;\n  font-weight: 900;\n  font-display: block;\n  src: url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"); }\n\n.fas,\n.fa-solid {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 900; }\n@font-face {\n  font-family: \"Font Awesome 5 Brands\";\n  font-display: block;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Font Awesome 5 Free\";\n  font-display: block;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Font Awesome 5 Free\";\n  font-display: block;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"); }\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\");\n  unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(\"../webfonts/fa-v4compatibility.woff2\") format(\"woff2\"), url(\"../webfonts/fa-v4compatibility.ttf\") format(\"truetype\");\n  unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F250,U+F252,U+F27A; }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/brands.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n:root, :host {\n  --fa-font-brands: normal 400 1em/1 \"Font Awesome 6 Brands\"; }\n\n@font-face {\n  font-family: 'Font Awesome 6 Brands';\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"); }\n\n.fab,\n.fa-brands {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa-42-group:before {\n  content: \"\\e080\"; }\n\n.fa-innosoft:before {\n  content: \"\\e080\"; }\n\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-airbnb:before {\n  content: \"\\f834\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-alipay:before {\n  content: \"\\f642\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-artstation:before {\n  content: \"\\f77a\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-atlassian:before {\n  content: \"\\f77b\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-battle-net:before {\n  content: \"\\f835\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bilibili:before {\n  content: \"\\e3d9\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bootstrap:before {\n  content: \"\\f836\"; }\n\n.fa-bots:before {\n  content: \"\\e340\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-buffer:before {\n  content: \"\\f837\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-buy-n-large:before {\n  content: \"\\f8a6\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-canadian-maple-leaf:before {\n  content: \"\\f785\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-centos:before {\n  content: \"\\f789\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-chromecast:before {\n  content: \"\\f838\"; }\n\n.fa-cloudflare:before {\n  content: \"\\e07d\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-cmplid:before {\n  content: \"\\e360\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-confluence:before {\n  content: \"\\f78d\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-cotton-bureau:before {\n  content: \"\\f89e\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-creative-commons-by:before {\n  content: \"\\f4e7\"; }\n\n.fa-creative-commons-nc:before {\n  content: \"\\f4e8\"; }\n\n.fa-creative-commons-nc-eu:before {\n  content: \"\\f4e9\"; }\n\n.fa-creative-commons-nc-jp:before {\n  content: \"\\f4ea\"; }\n\n.fa-creative-commons-nd:before {\n  content: \"\\f4eb\"; }\n\n.fa-creative-commons-pd:before {\n  content: \"\\f4ec\"; }\n\n.fa-creative-commons-pd-alt:before {\n  content: \"\\f4ed\"; }\n\n.fa-creative-commons-remix:before {\n  content: \"\\f4ee\"; }\n\n.fa-creative-commons-sa:before {\n  content: \"\\f4ef\"; }\n\n.fa-creative-commons-sampling:before {\n  content: \"\\f4f0\"; }\n\n.fa-creative-commons-sampling-plus:before {\n  content: \"\\f4f1\"; }\n\n.fa-creative-commons-share:before {\n  content: \"\\f4f2\"; }\n\n.fa-creative-commons-zero:before {\n  content: \"\\f4f3\"; }\n\n.fa-critical-role:before {\n  content: \"\\f6c9\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-d-and-d-beyond:before {\n  content: \"\\f6ca\"; }\n\n.fa-dailymotion:before {\n  content: \"\\e052\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-deezer:before {\n  content: \"\\e077\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-dev:before {\n  content: \"\\f6cc\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-dhl:before {\n  content: \"\\f790\"; }\n\n.fa-diaspora:before {\n  content: \"\\f791\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-ebay:before {\n  content: \"\\f4f4\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edge-legacy:before {\n  content: \"\\e078\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ello:before {\n  content: \"\\f5f1\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-evernote:before {\n  content: \"\\f839\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fantasy-flight-games:before {\n  content: \"\\f6dc\"; }\n\n.fa-fedex:before {\n  content: \"\\f797\"; }\n\n.fa-fedora:before {\n  content: \"\\f798\"; }\n\n.fa-figma:before {\n  content: \"\\f799\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-firefox-browser:before {\n  content: \"\\e007\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-first-order-alt:before {\n  content: \"\\f50a\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-logo-full:before {\n  content: \"\\f2b4\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-fulcrum:before {\n  content: \"\\f50b\"; }\n\n.fa-galactic-republic:before {\n  content: \"\\f50c\"; }\n\n.fa-galactic-senate:before {\n  content: \"\\f50d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-alt:before {\n  content: \"\\f841\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golang:before {\n  content: \"\\e40f\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-pay:before {\n  content: \"\\e079\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-guilded:before {\n  content: \"\\e07e\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hackerrank:before {\n  content: \"\\f5f7\"; }\n\n.fa-hashnode:before {\n  content: \"\\e499\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-hive:before {\n  content: \"\\e07f\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hornbill:before {\n  content: \"\\f592\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-ideal:before {\n  content: \"\\e013\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-instagram-square:before {\n  content: \"\\e055\"; }\n\n.fa-instalod:before {\n  content: \"\\e081\"; }\n\n.fa-intercom:before {\n  content: \"\\f7af\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-invision:before {\n  content: \"\\f7b0\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-itch-io:before {\n  content: \"\\f83a\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-java:before {\n  content: \"\\f4e4\"; }\n\n.fa-jedi-order:before {\n  content: \"\\f50e\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-jira:before {\n  content: \"\\f7b1\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-kaggle:before {\n  content: \"\\f5fa\"; }\n\n.fa-keybase:before {\n  content: \"\\f4f5\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-mailchimp:before {\n  content: \"\\f59e\"; }\n\n.fa-mandalorian:before {\n  content: \"\\f50f\"; }\n\n.fa-markdown:before {\n  content: \"\\f60f\"; }\n\n.fa-mastodon:before {\n  content: \"\\f4f6\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-mdb:before {\n  content: \"\\f8ca\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f23a\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-megaport:before {\n  content: \"\\f5a3\"; }\n\n.fa-mendeley:before {\n  content: \"\\f7b3\"; }\n\n.fa-microblog:before {\n  content: \"\\e01a\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mixer:before {\n  content: \"\\e056\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neos:before {\n  content: \"\\f612\"; }\n\n.fa-nimblr:before {\n  content: \"\\f5a8\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-octopus-deploy:before {\n  content: \"\\e082\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-old-republic:before {\n  content: \"\\f510\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-orcid:before {\n  content: \"\\f8d2\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-padlet:before {\n  content: \"\\e4a0\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-perbyte:before {\n  content: \"\\e083\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phoenix-squadron:before {\n  content: \"\\f511\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-hat:before {\n  content: \"\\f4e5\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pied-piper-square:before {\n  content: \"\\e01e\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-pix:before {\n  content: \"\\e43a\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-r-project:before {\n  content: \"\\f4f7\"; }\n\n.fa-raspberry-pi:before {\n  content: \"\\f7bb\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-reacteurope:before {\n  content: \"\\f75d\"; }\n\n.fa-readme:before {\n  content: \"\\f4d5\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redhat:before {\n  content: \"\\f7bc\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-researchgate:before {\n  content: \"\\f4f8\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-rev:before {\n  content: \"\\f5b2\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rust:before {\n  content: \"\\e07a\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-salesforce:before {\n  content: \"\\f83b\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopify:before {\n  content: \"\\e057\"; }\n\n.fa-shopware:before {\n  content: \"\\f5b5\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sith:before {\n  content: \"\\f512\"; }\n\n.fa-sitrox:before {\n  content: \"\\e44a\"; }\n\n.fa-sketch:before {\n  content: \"\\f7c6\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f198\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-sourcetree:before {\n  content: \"\\f7d3\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-speaker-deck:before {\n  content: \"\\f83c\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square-font-awesome:before {\n  content: \"\\f425\"; }\n\n.fa-square-font-awesome-stroke:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-squarespace:before {\n  content: \"\\f5be\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-stackpath:before {\n  content: \"\\f842\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-suse:before {\n  content: \"\\f7d6\"; }\n\n.fa-swift:before {\n  content: \"\\f8e1\"; }\n\n.fa-symfony:before {\n  content: \"\\f83d\"; }\n\n.fa-teamspeak:before {\n  content: \"\\f4f9\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f2c6\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-the-red-yeti:before {\n  content: \"\\f69d\"; }\n\n.fa-themeco:before {\n  content: \"\\f5c6\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-think-peaks:before {\n  content: \"\\f731\"; }\n\n.fa-tiktok:before {\n  content: \"\\e07b\"; }\n\n.fa-trade-federation:before {\n  content: \"\\f513\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-ubuntu:before {\n  content: \"\\f7df\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbraco:before {\n  content: \"\\f8e8\"; }\n\n.fa-uncharted:before {\n  content: \"\\e084\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-unity:before {\n  content: \"\\e049\"; }\n\n.fa-unsplash:before {\n  content: \"\\e07c\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-ups:before {\n  content: \"\\f7e0\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-usps:before {\n  content: \"\\f7e1\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-watchman-monitoring:before {\n  content: \"\\e087\"; }\n\n.fa-waze:before {\n  content: \"\\f83f\"; }\n\n.fa-weebly:before {\n  content: \"\\f5cc\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-wirsindhandwerk:before {\n  content: \"\\e2d0\"; }\n\n.fa-wsh:before {\n  content: \"\\e2d0\"; }\n\n.fa-wix:before {\n  content: \"\\f5cf\"; }\n\n.fa-wizards-of-the-coast:before {\n  content: \"\\f730\"; }\n\n.fa-wodu:before {\n  content: \"\\e088\"; }\n\n.fa-wolf-pack-battalion:before {\n  content: \"\\f514\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wpressr:before {\n  content: \"\\f3e4\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yammer:before {\n  content: \"\\f840\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yarn:before {\n  content: \"\\f7e3\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.fa-zhihu:before {\n  content: \"\\f63f\"; }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/fontawesome.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n.fa {\n  font-family: var(--fa-style-family, \"Font Awesome 6 Free\");\n  font-weight: var(--fa-style, 900); }\n\n.fa,\n.fas,\n.fa-solid,\n.far,\n.fa-regular,\n.fal,\n.fa-light,\n.fat,\n.fa-thin,\n.fad,\n.fa-duotone,\n.fab,\n.fa-brands {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: var(--fa-display, inline-block);\n  font-style: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-rendering: auto; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-2xs {\n  font-size: 0.625em;\n  line-height: 0.1em;\n  vertical-align: 0.225em; }\n\n.fa-xs {\n  font-size: 0.75em;\n  line-height: 0.08333em;\n  vertical-align: 0.125em; }\n\n.fa-sm {\n  font-size: 0.875em;\n  line-height: 0.07143em;\n  vertical-align: 0.05357em; }\n\n.fa-lg {\n  font-size: 1.25em;\n  line-height: 0.05em;\n  vertical-align: -0.075em; }\n\n.fa-xl {\n  font-size: 1.5em;\n  line-height: 0.04167em;\n  vertical-align: -0.125em; }\n\n.fa-2xl {\n  font-size: 2em;\n  line-height: 0.03125em;\n  vertical-align: -0.1875em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: var(--fa-li-margin, 2.5em);\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: calc(var(--fa-li-width, 2em) * -1);\n  position: absolute;\n  text-align: center;\n  width: var(--fa-li-width, 2em);\n  line-height: inherit; }\n\n.fa-border {\n  border-color: var(--fa-border-color, #eee);\n  border-radius: var(--fa-border-radius, 0.1em);\n  border-style: var(--fa-border-style, solid);\n  border-width: var(--fa-border-width, 0.08em);\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }\n\n.fa-pull-left {\n  float: left;\n  margin-right: var(--fa-pull-margin, 0.3em); }\n\n.fa-pull-right {\n  float: right;\n  margin-left: var(--fa-pull-margin, 0.3em); }\n\n.fa-beat {\n  -webkit-animation-name: fa-beat;\n          animation-name: fa-beat;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n          animation-timing-function: var(--fa-animation-timing, ease-in-out); }\n\n.fa-bounce {\n  -webkit-animation-name: fa-bounce;\n          animation-name: fa-bounce;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }\n\n.fa-fade {\n  -webkit-animation-name: fa-fade;\n          animation-name: fa-fade;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }\n\n.fa-beat-fade {\n  -webkit-animation-name: fa-beat-fade;\n          animation-name: fa-beat-fade;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }\n\n.fa-flip {\n  -webkit-animation-name: fa-flip;\n          animation-name: fa-flip;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n          animation-timing-function: var(--fa-animation-timing, ease-in-out); }\n\n.fa-shake {\n  -webkit-animation-name: fa-shake;\n          animation-name: fa-shake;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n          animation-timing-function: var(--fa-animation-timing, linear); }\n\n.fa-spin {\n  -webkit-animation-name: fa-spin;\n          animation-name: fa-spin;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 2s);\n          animation-duration: var(--fa-animation-duration, 2s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n          animation-timing-function: var(--fa-animation-timing, linear); }\n\n.fa-spin-reverse {\n  --fa-animation-direction: reverse; }\n\n.fa-pulse,\n.fa-spin-pulse {\n  -webkit-animation-name: fa-spin;\n          animation-name: fa-spin;\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n          animation-timing-function: var(--fa-animation-timing, steps(8)); }\n\n@media (prefers-reduced-motion: reduce) {\n  .fa-beat,\n  .fa-bounce,\n  .fa-fade,\n  .fa-beat-fade,\n  .fa-flip,\n  .fa-pulse,\n  .fa-shake,\n  .fa-spin,\n  .fa-spin-pulse {\n    -webkit-animation-delay: -1ms;\n            animation-delay: -1ms;\n    -webkit-animation-duration: 1ms;\n            animation-duration: 1ms;\n    -webkit-animation-iteration-count: 1;\n            animation-iteration-count: 1;\n    transition-delay: 0s;\n    transition-duration: 0s; } }\n\n@-webkit-keyframes fa-beat {\n  0%, 90% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n            transform: scale(var(--fa-beat-scale, 1.25)); } }\n\n@keyframes fa-beat {\n  0%, 90% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n            transform: scale(var(--fa-beat-scale, 1.25)); } }\n\n@-webkit-keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }\n  57% {\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }\n  64% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  100% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); } }\n\n@keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }\n  57% {\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }\n  64% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  100% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); } }\n\n@-webkit-keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4); } }\n\n@keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4); } }\n\n@-webkit-keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }\n\n@keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }\n\n@-webkit-keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }\n\n@keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }\n\n@-webkit-keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n            transform: rotate(-15deg); }\n  4% {\n    -webkit-transform: rotate(15deg);\n            transform: rotate(15deg); }\n  8%, 24% {\n    -webkit-transform: rotate(-18deg);\n            transform: rotate(-18deg); }\n  12%, 28% {\n    -webkit-transform: rotate(18deg);\n            transform: rotate(18deg); }\n  16% {\n    -webkit-transform: rotate(-22deg);\n            transform: rotate(-22deg); }\n  20% {\n    -webkit-transform: rotate(22deg);\n            transform: rotate(22deg); }\n  32% {\n    -webkit-transform: rotate(-12deg);\n            transform: rotate(-12deg); }\n  36% {\n    -webkit-transform: rotate(12deg);\n            transform: rotate(12deg); }\n  40%, 100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); } }\n\n@keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n            transform: rotate(-15deg); }\n  4% {\n    -webkit-transform: rotate(15deg);\n            transform: rotate(15deg); }\n  8%, 24% {\n    -webkit-transform: rotate(-18deg);\n            transform: rotate(-18deg); }\n  12%, 28% {\n    -webkit-transform: rotate(18deg);\n            transform: rotate(18deg); }\n  16% {\n    -webkit-transform: rotate(-22deg);\n            transform: rotate(-22deg); }\n  20% {\n    -webkit-transform: rotate(22deg);\n            transform: rotate(22deg); }\n  32% {\n    -webkit-transform: rotate(-12deg);\n            transform: rotate(-12deg); }\n  36% {\n    -webkit-transform: rotate(12deg);\n            transform: rotate(12deg); }\n  40%, 100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); } }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n.fa-rotate-by {\n  -webkit-transform: rotate(var(--fa-rotate-angle, none));\n          transform: rotate(var(--fa-rotate-angle, none)); }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2.5em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%;\n  z-index: var(--fa-stack-z-index, auto); }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: var(--fa-inverse, #fff); }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-0::before {\n  content: \"\\30\"; }\n\n.fa-1::before {\n  content: \"\\31\"; }\n\n.fa-2::before {\n  content: \"\\32\"; }\n\n.fa-3::before {\n  content: \"\\33\"; }\n\n.fa-4::before {\n  content: \"\\34\"; }\n\n.fa-5::before {\n  content: \"\\35\"; }\n\n.fa-6::before {\n  content: \"\\36\"; }\n\n.fa-7::before {\n  content: \"\\37\"; }\n\n.fa-8::before {\n  content: \"\\38\"; }\n\n.fa-9::before {\n  content: \"\\39\"; }\n\n.fa-a::before {\n  content: \"\\41\"; }\n\n.fa-address-book::before {\n  content: \"\\f2b9\"; }\n\n.fa-contact-book::before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card::before {\n  content: \"\\f2bb\"; }\n\n.fa-contact-card::before {\n  content: \"\\f2bb\"; }\n\n.fa-vcard::before {\n  content: \"\\f2bb\"; }\n\n.fa-align-center::before {\n  content: \"\\f037\"; }\n\n.fa-align-justify::before {\n  content: \"\\f039\"; }\n\n.fa-align-left::before {\n  content: \"\\f036\"; }\n\n.fa-align-right::before {\n  content: \"\\f038\"; }\n\n.fa-anchor::before {\n  content: \"\\f13d\"; }\n\n.fa-angle-down::before {\n  content: \"\\f107\"; }\n\n.fa-angle-left::before {\n  content: \"\\f104\"; }\n\n.fa-angle-right::before {\n  content: \"\\f105\"; }\n\n.fa-angle-up::before {\n  content: \"\\f106\"; }\n\n.fa-angles-down::before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-down::before {\n  content: \"\\f103\"; }\n\n.fa-angles-left::before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-left::before {\n  content: \"\\f100\"; }\n\n.fa-angles-right::before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-right::before {\n  content: \"\\f101\"; }\n\n.fa-angles-up::before {\n  content: \"\\f102\"; }\n\n.fa-angle-double-up::before {\n  content: \"\\f102\"; }\n\n.fa-ankh::before {\n  content: \"\\f644\"; }\n\n.fa-apple-whole::before {\n  content: \"\\f5d1\"; }\n\n.fa-apple-alt::before {\n  content: \"\\f5d1\"; }\n\n.fa-archway::before {\n  content: \"\\f557\"; }\n\n.fa-arrow-down::before {\n  content: \"\\f063\"; }\n\n.fa-arrow-down-1-9::before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-asc::before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-down::before {\n  content: \"\\f162\"; }\n\n.fa-arrow-down-9-1::before {\n  content: \"\\f886\"; }\n\n.fa-sort-numeric-desc::before {\n  content: \"\\f886\"; }\n\n.fa-sort-numeric-down-alt::before {\n  content: \"\\f886\"; }\n\n.fa-arrow-down-a-z::before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-asc::before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-down::before {\n  content: \"\\f15d\"; }\n\n.fa-arrow-down-long::before {\n  content: \"\\f175\"; }\n\n.fa-long-arrow-down::before {\n  content: \"\\f175\"; }\n\n.fa-arrow-down-short-wide::before {\n  content: \"\\f884\"; }\n\n.fa-sort-amount-desc::before {\n  content: \"\\f884\"; }\n\n.fa-sort-amount-down-alt::before {\n  content: \"\\f884\"; }\n\n.fa-arrow-down-wide-short::before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-asc::before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-down::before {\n  content: \"\\f160\"; }\n\n.fa-arrow-down-z-a::before {\n  content: \"\\f881\"; }\n\n.fa-sort-alpha-desc::before {\n  content: \"\\f881\"; }\n\n.fa-sort-alpha-down-alt::before {\n  content: \"\\f881\"; }\n\n.fa-arrow-left::before {\n  content: \"\\f060\"; }\n\n.fa-arrow-left-long::before {\n  content: \"\\f177\"; }\n\n.fa-long-arrow-left::before {\n  content: \"\\f177\"; }\n\n.fa-arrow-pointer::before {\n  content: \"\\f245\"; }\n\n.fa-mouse-pointer::before {\n  content: \"\\f245\"; }\n\n.fa-arrow-right::before {\n  content: \"\\f061\"; }\n\n.fa-arrow-right-arrow-left::before {\n  content: \"\\f0ec\"; }\n\n.fa-exchange::before {\n  content: \"\\f0ec\"; }\n\n.fa-arrow-right-from-bracket::before {\n  content: \"\\f08b\"; }\n\n.fa-sign-out::before {\n  content: \"\\f08b\"; }\n\n.fa-arrow-right-long::before {\n  content: \"\\f178\"; }\n\n.fa-long-arrow-right::before {\n  content: \"\\f178\"; }\n\n.fa-arrow-right-to-bracket::before {\n  content: \"\\f090\"; }\n\n.fa-sign-in::before {\n  content: \"\\f090\"; }\n\n.fa-arrow-rotate-left::before {\n  content: \"\\f0e2\"; }\n\n.fa-arrow-left-rotate::before {\n  content: \"\\f0e2\"; }\n\n.fa-arrow-rotate-back::before {\n  content: \"\\f0e2\"; }\n\n.fa-arrow-rotate-backward::before {\n  content: \"\\f0e2\"; }\n\n.fa-undo::before {\n  content: \"\\f0e2\"; }\n\n.fa-arrow-rotate-right::before {\n  content: \"\\f01e\"; }\n\n.fa-arrow-right-rotate::before {\n  content: \"\\f01e\"; }\n\n.fa-arrow-rotate-forward::before {\n  content: \"\\f01e\"; }\n\n.fa-redo::before {\n  content: \"\\f01e\"; }\n\n.fa-arrow-trend-down::before {\n  content: \"\\e097\"; }\n\n.fa-arrow-trend-up::before {\n  content: \"\\e098\"; }\n\n.fa-arrow-turn-down::before {\n  content: \"\\f149\"; }\n\n.fa-level-down::before {\n  content: \"\\f149\"; }\n\n.fa-arrow-turn-up::before {\n  content: \"\\f148\"; }\n\n.fa-level-up::before {\n  content: \"\\f148\"; }\n\n.fa-arrow-up::before {\n  content: \"\\f062\"; }\n\n.fa-arrow-up-1-9::before {\n  content: \"\\f163\"; }\n\n.fa-sort-numeric-up::before {\n  content: \"\\f163\"; }\n\n.fa-arrow-up-9-1::before {\n  content: \"\\f887\"; }\n\n.fa-sort-numeric-up-alt::before {\n  content: \"\\f887\"; }\n\n.fa-arrow-up-a-z::before {\n  content: \"\\f15e\"; }\n\n.fa-sort-alpha-up::before {\n  content: \"\\f15e\"; }\n\n.fa-arrow-up-from-bracket::before {\n  content: \"\\e09a\"; }\n\n.fa-arrow-up-long::before {\n  content: \"\\f176\"; }\n\n.fa-long-arrow-up::before {\n  content: \"\\f176\"; }\n\n.fa-arrow-up-right-from-square::before {\n  content: \"\\f08e\"; }\n\n.fa-external-link::before {\n  content: \"\\f08e\"; }\n\n.fa-arrow-up-short-wide::before {\n  content: \"\\f885\"; }\n\n.fa-sort-amount-up-alt::before {\n  content: \"\\f885\"; }\n\n.fa-arrow-up-wide-short::before {\n  content: \"\\f161\"; }\n\n.fa-sort-amount-up::before {\n  content: \"\\f161\"; }\n\n.fa-arrow-up-z-a::before {\n  content: \"\\f882\"; }\n\n.fa-sort-alpha-up-alt::before {\n  content: \"\\f882\"; }\n\n.fa-arrows-left-right::before {\n  content: \"\\f07e\"; }\n\n.fa-arrows-h::before {\n  content: \"\\f07e\"; }\n\n.fa-arrows-rotate::before {\n  content: \"\\f021\"; }\n\n.fa-refresh::before {\n  content: \"\\f021\"; }\n\n.fa-sync::before {\n  content: \"\\f021\"; }\n\n.fa-arrows-up-down::before {\n  content: \"\\f07d\"; }\n\n.fa-arrows-v::before {\n  content: \"\\f07d\"; }\n\n.fa-arrows-up-down-left-right::before {\n  content: \"\\f047\"; }\n\n.fa-arrows::before {\n  content: \"\\f047\"; }\n\n.fa-asterisk::before {\n  content: \"\\2a\"; }\n\n.fa-at::before {\n  content: \"\\40\"; }\n\n.fa-atom::before {\n  content: \"\\f5d2\"; }\n\n.fa-audio-description::before {\n  content: \"\\f29e\"; }\n\n.fa-austral-sign::before {\n  content: \"\\e0a9\"; }\n\n.fa-award::before {\n  content: \"\\f559\"; }\n\n.fa-b::before {\n  content: \"\\42\"; }\n\n.fa-baby::before {\n  content: \"\\f77c\"; }\n\n.fa-baby-carriage::before {\n  content: \"\\f77d\"; }\n\n.fa-carriage-baby::before {\n  content: \"\\f77d\"; }\n\n.fa-backward::before {\n  content: \"\\f04a\"; }\n\n.fa-backward-fast::before {\n  content: \"\\f049\"; }\n\n.fa-fast-backward::before {\n  content: \"\\f049\"; }\n\n.fa-backward-step::before {\n  content: \"\\f048\"; }\n\n.fa-step-backward::before {\n  content: \"\\f048\"; }\n\n.fa-bacon::before {\n  content: \"\\f7e5\"; }\n\n.fa-bacteria::before {\n  content: \"\\e059\"; }\n\n.fa-bacterium::before {\n  content: \"\\e05a\"; }\n\n.fa-bag-shopping::before {\n  content: \"\\f290\"; }\n\n.fa-shopping-bag::before {\n  content: \"\\f290\"; }\n\n.fa-bahai::before {\n  content: \"\\f666\"; }\n\n.fa-baht-sign::before {\n  content: \"\\e0ac\"; }\n\n.fa-ban::before {\n  content: \"\\f05e\"; }\n\n.fa-cancel::before {\n  content: \"\\f05e\"; }\n\n.fa-ban-smoking::before {\n  content: \"\\f54d\"; }\n\n.fa-smoking-ban::before {\n  content: \"\\f54d\"; }\n\n.fa-bandage::before {\n  content: \"\\f462\"; }\n\n.fa-band-aid::before {\n  content: \"\\f462\"; }\n\n.fa-barcode::before {\n  content: \"\\f02a\"; }\n\n.fa-bars::before {\n  content: \"\\f0c9\"; }\n\n.fa-navicon::before {\n  content: \"\\f0c9\"; }\n\n.fa-bars-progress::before {\n  content: \"\\f828\"; }\n\n.fa-tasks-alt::before {\n  content: \"\\f828\"; }\n\n.fa-bars-staggered::before {\n  content: \"\\f550\"; }\n\n.fa-reorder::before {\n  content: \"\\f550\"; }\n\n.fa-stream::before {\n  content: \"\\f550\"; }\n\n.fa-baseball::before {\n  content: \"\\f433\"; }\n\n.fa-baseball-ball::before {\n  content: \"\\f433\"; }\n\n.fa-baseball-bat-ball::before {\n  content: \"\\f432\"; }\n\n.fa-basket-shopping::before {\n  content: \"\\f291\"; }\n\n.fa-shopping-basket::before {\n  content: \"\\f291\"; }\n\n.fa-basketball::before {\n  content: \"\\f434\"; }\n\n.fa-basketball-ball::before {\n  content: \"\\f434\"; }\n\n.fa-bath::before {\n  content: \"\\f2cd\"; }\n\n.fa-bathtub::before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty::before {\n  content: \"\\f244\"; }\n\n.fa-battery-0::before {\n  content: \"\\f244\"; }\n\n.fa-battery-full::before {\n  content: \"\\f240\"; }\n\n.fa-battery::before {\n  content: \"\\f240\"; }\n\n.fa-battery-5::before {\n  content: \"\\f240\"; }\n\n.fa-battery-half::before {\n  content: \"\\f242\"; }\n\n.fa-battery-3::before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter::before {\n  content: \"\\f243\"; }\n\n.fa-battery-2::before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters::before {\n  content: \"\\f241\"; }\n\n.fa-battery-4::before {\n  content: \"\\f241\"; }\n\n.fa-bed::before {\n  content: \"\\f236\"; }\n\n.fa-bed-pulse::before {\n  content: \"\\f487\"; }\n\n.fa-procedures::before {\n  content: \"\\f487\"; }\n\n.fa-beer-mug-empty::before {\n  content: \"\\f0fc\"; }\n\n.fa-beer::before {\n  content: \"\\f0fc\"; }\n\n.fa-bell::before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-concierge::before {\n  content: \"\\f562\"; }\n\n.fa-concierge-bell::before {\n  content: \"\\f562\"; }\n\n.fa-bell-slash::before {\n  content: \"\\f1f6\"; }\n\n.fa-bezier-curve::before {\n  content: \"\\f55b\"; }\n\n.fa-bicycle::before {\n  content: \"\\f206\"; }\n\n.fa-binoculars::before {\n  content: \"\\f1e5\"; }\n\n.fa-biohazard::before {\n  content: \"\\f780\"; }\n\n.fa-bitcoin-sign::before {\n  content: \"\\e0b4\"; }\n\n.fa-blender::before {\n  content: \"\\f517\"; }\n\n.fa-blender-phone::before {\n  content: \"\\f6b6\"; }\n\n.fa-blog::before {\n  content: \"\\f781\"; }\n\n.fa-bold::before {\n  content: \"\\f032\"; }\n\n.fa-bolt::before {\n  content: \"\\f0e7\"; }\n\n.fa-zap::before {\n  content: \"\\f0e7\"; }\n\n.fa-bolt-lightning::before {\n  content: \"\\e0b7\"; }\n\n.fa-bomb::before {\n  content: \"\\f1e2\"; }\n\n.fa-bone::before {\n  content: \"\\f5d7\"; }\n\n.fa-bong::before {\n  content: \"\\f55c\"; }\n\n.fa-book::before {\n  content: \"\\f02d\"; }\n\n.fa-book-atlas::before {\n  content: \"\\f558\"; }\n\n.fa-atlas::before {\n  content: \"\\f558\"; }\n\n.fa-book-bible::before {\n  content: \"\\f647\"; }\n\n.fa-bible::before {\n  content: \"\\f647\"; }\n\n.fa-book-journal-whills::before {\n  content: \"\\f66a\"; }\n\n.fa-journal-whills::before {\n  content: \"\\f66a\"; }\n\n.fa-book-medical::before {\n  content: \"\\f7e6\"; }\n\n.fa-book-open::before {\n  content: \"\\f518\"; }\n\n.fa-book-open-reader::before {\n  content: \"\\f5da\"; }\n\n.fa-book-reader::before {\n  content: \"\\f5da\"; }\n\n.fa-book-quran::before {\n  content: \"\\f687\"; }\n\n.fa-quran::before {\n  content: \"\\f687\"; }\n\n.fa-book-skull::before {\n  content: \"\\f6b7\"; }\n\n.fa-book-dead::before {\n  content: \"\\f6b7\"; }\n\n.fa-bookmark::before {\n  content: \"\\f02e\"; }\n\n.fa-border-all::before {\n  content: \"\\f84c\"; }\n\n.fa-border-none::before {\n  content: \"\\f850\"; }\n\n.fa-border-top-left::before {\n  content: \"\\f853\"; }\n\n.fa-border-style::before {\n  content: \"\\f853\"; }\n\n.fa-bowling-ball::before {\n  content: \"\\f436\"; }\n\n.fa-box::before {\n  content: \"\\f466\"; }\n\n.fa-box-archive::before {\n  content: \"\\f187\"; }\n\n.fa-archive::before {\n  content: \"\\f187\"; }\n\n.fa-box-open::before {\n  content: \"\\f49e\"; }\n\n.fa-box-tissue::before {\n  content: \"\\e05b\"; }\n\n.fa-boxes-stacked::before {\n  content: \"\\f468\"; }\n\n.fa-boxes::before {\n  content: \"\\f468\"; }\n\n.fa-boxes-alt::before {\n  content: \"\\f468\"; }\n\n.fa-braille::before {\n  content: \"\\f2a1\"; }\n\n.fa-brain::before {\n  content: \"\\f5dc\"; }\n\n.fa-brazilian-real-sign::before {\n  content: \"\\e46c\"; }\n\n.fa-bread-slice::before {\n  content: \"\\f7ec\"; }\n\n.fa-briefcase::before {\n  content: \"\\f0b1\"; }\n\n.fa-briefcase-medical::before {\n  content: \"\\f469\"; }\n\n.fa-broom::before {\n  content: \"\\f51a\"; }\n\n.fa-broom-ball::before {\n  content: \"\\f458\"; }\n\n.fa-quidditch::before {\n  content: \"\\f458\"; }\n\n.fa-quidditch-broom-ball::before {\n  content: \"\\f458\"; }\n\n.fa-brush::before {\n  content: \"\\f55d\"; }\n\n.fa-bug::before {\n  content: \"\\f188\"; }\n\n.fa-bug-slash::before {\n  content: \"\\e490\"; }\n\n.fa-building::before {\n  content: \"\\f1ad\"; }\n\n.fa-building-columns::before {\n  content: \"\\f19c\"; }\n\n.fa-bank::before {\n  content: \"\\f19c\"; }\n\n.fa-institution::before {\n  content: \"\\f19c\"; }\n\n.fa-museum::before {\n  content: \"\\f19c\"; }\n\n.fa-university::before {\n  content: \"\\f19c\"; }\n\n.fa-bullhorn::before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye::before {\n  content: \"\\f140\"; }\n\n.fa-burger::before {\n  content: \"\\f805\"; }\n\n.fa-hamburger::before {\n  content: \"\\f805\"; }\n\n.fa-bus::before {\n  content: \"\\f207\"; }\n\n.fa-bus-simple::before {\n  content: \"\\f55e\"; }\n\n.fa-bus-alt::before {\n  content: \"\\f55e\"; }\n\n.fa-business-time::before {\n  content: \"\\f64a\"; }\n\n.fa-briefcase-clock::before {\n  content: \"\\f64a\"; }\n\n.fa-c::before {\n  content: \"\\43\"; }\n\n.fa-cake-candles::before {\n  content: \"\\f1fd\"; }\n\n.fa-birthday-cake::before {\n  content: \"\\f1fd\"; }\n\n.fa-cake::before {\n  content: \"\\f1fd\"; }\n\n.fa-calculator::before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar::before {\n  content: \"\\f133\"; }\n\n.fa-calendar-check::before {\n  content: \"\\f274\"; }\n\n.fa-calendar-day::before {\n  content: \"\\f783\"; }\n\n.fa-calendar-days::before {\n  content: \"\\f073\"; }\n\n.fa-calendar-alt::before {\n  content: \"\\f073\"; }\n\n.fa-calendar-minus::before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus::before {\n  content: \"\\f271\"; }\n\n.fa-calendar-week::before {\n  content: \"\\f784\"; }\n\n.fa-calendar-xmark::before {\n  content: \"\\f273\"; }\n\n.fa-calendar-times::before {\n  content: \"\\f273\"; }\n\n.fa-camera::before {\n  content: \"\\f030\"; }\n\n.fa-camera-alt::before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro::before {\n  content: \"\\f083\"; }\n\n.fa-camera-rotate::before {\n  content: \"\\e0d8\"; }\n\n.fa-campground::before {\n  content: \"\\f6bb\"; }\n\n.fa-candy-cane::before {\n  content: \"\\f786\"; }\n\n.fa-cannabis::before {\n  content: \"\\f55f\"; }\n\n.fa-capsules::before {\n  content: \"\\f46b\"; }\n\n.fa-car::before {\n  content: \"\\f1b9\"; }\n\n.fa-automobile::before {\n  content: \"\\f1b9\"; }\n\n.fa-car-battery::before {\n  content: \"\\f5df\"; }\n\n.fa-battery-car::before {\n  content: \"\\f5df\"; }\n\n.fa-car-crash::before {\n  content: \"\\f5e1\"; }\n\n.fa-car-rear::before {\n  content: \"\\f5de\"; }\n\n.fa-car-alt::before {\n  content: \"\\f5de\"; }\n\n.fa-car-side::before {\n  content: \"\\f5e4\"; }\n\n.fa-caravan::before {\n  content: \"\\f8ff\"; }\n\n.fa-caret-down::before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left::before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right::before {\n  content: \"\\f0da\"; }\n\n.fa-caret-up::before {\n  content: \"\\f0d8\"; }\n\n.fa-carrot::before {\n  content: \"\\f787\"; }\n\n.fa-cart-arrow-down::before {\n  content: \"\\f218\"; }\n\n.fa-cart-flatbed::before {\n  content: \"\\f474\"; }\n\n.fa-dolly-flatbed::before {\n  content: \"\\f474\"; }\n\n.fa-cart-flatbed-suitcase::before {\n  content: \"\\f59d\"; }\n\n.fa-luggage-cart::before {\n  content: \"\\f59d\"; }\n\n.fa-cart-plus::before {\n  content: \"\\f217\"; }\n\n.fa-cart-shopping::before {\n  content: \"\\f07a\"; }\n\n.fa-shopping-cart::before {\n  content: \"\\f07a\"; }\n\n.fa-cash-register::before {\n  content: \"\\f788\"; }\n\n.fa-cat::before {\n  content: \"\\f6be\"; }\n\n.fa-cedi-sign::before {\n  content: \"\\e0df\"; }\n\n.fa-cent-sign::before {\n  content: \"\\e3f5\"; }\n\n.fa-certificate::before {\n  content: \"\\f0a3\"; }\n\n.fa-chair::before {\n  content: \"\\f6c0\"; }\n\n.fa-chalkboard::before {\n  content: \"\\f51b\"; }\n\n.fa-blackboard::before {\n  content: \"\\f51b\"; }\n\n.fa-chalkboard-user::before {\n  content: \"\\f51c\"; }\n\n.fa-chalkboard-teacher::before {\n  content: \"\\f51c\"; }\n\n.fa-champagne-glasses::before {\n  content: \"\\f79f\"; }\n\n.fa-glass-cheers::before {\n  content: \"\\f79f\"; }\n\n.fa-charging-station::before {\n  content: \"\\f5e7\"; }\n\n.fa-chart-area::before {\n  content: \"\\f1fe\"; }\n\n.fa-area-chart::before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar::before {\n  content: \"\\f080\"; }\n\n.fa-bar-chart::before {\n  content: \"\\f080\"; }\n\n.fa-chart-column::before {\n  content: \"\\e0e3\"; }\n\n.fa-chart-gantt::before {\n  content: \"\\e0e4\"; }\n\n.fa-chart-line::before {\n  content: \"\\f201\"; }\n\n.fa-line-chart::before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie::before {\n  content: \"\\f200\"; }\n\n.fa-pie-chart::before {\n  content: \"\\f200\"; }\n\n.fa-check::before {\n  content: \"\\f00c\"; }\n\n.fa-check-double::before {\n  content: \"\\f560\"; }\n\n.fa-check-to-slot::before {\n  content: \"\\f772\"; }\n\n.fa-vote-yea::before {\n  content: \"\\f772\"; }\n\n.fa-cheese::before {\n  content: \"\\f7ef\"; }\n\n.fa-chess::before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop::before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board::before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king::before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight::before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn::before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen::before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook::before {\n  content: \"\\f447\"; }\n\n.fa-chevron-down::before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left::before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right::before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up::before {\n  content: \"\\f077\"; }\n\n.fa-child::before {\n  content: \"\\f1ae\"; }\n\n.fa-church::before {\n  content: \"\\f51d\"; }\n\n.fa-circle::before {\n  content: \"\\f111\"; }\n\n.fa-circle-arrow-down::before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-down::before {\n  content: \"\\f0ab\"; }\n\n.fa-circle-arrow-left::before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-left::before {\n  content: \"\\f0a8\"; }\n\n.fa-circle-arrow-right::before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-right::before {\n  content: \"\\f0a9\"; }\n\n.fa-circle-arrow-up::before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-circle-up::before {\n  content: \"\\f0aa\"; }\n\n.fa-circle-check::before {\n  content: \"\\f058\"; }\n\n.fa-check-circle::before {\n  content: \"\\f058\"; }\n\n.fa-circle-chevron-down::before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-down::before {\n  content: \"\\f13a\"; }\n\n.fa-circle-chevron-left::before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-left::before {\n  content: \"\\f137\"; }\n\n.fa-circle-chevron-right::before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-right::before {\n  content: \"\\f138\"; }\n\n.fa-circle-chevron-up::before {\n  content: \"\\f139\"; }\n\n.fa-chevron-circle-up::before {\n  content: \"\\f139\"; }\n\n.fa-circle-dollar-to-slot::before {\n  content: \"\\f4b9\"; }\n\n.fa-donate::before {\n  content: \"\\f4b9\"; }\n\n.fa-circle-dot::before {\n  content: \"\\f192\"; }\n\n.fa-dot-circle::before {\n  content: \"\\f192\"; }\n\n.fa-circle-down::before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-down::before {\n  content: \"\\f358\"; }\n\n.fa-circle-exclamation::before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-circle::before {\n  content: \"\\f06a\"; }\n\n.fa-circle-h::before {\n  content: \"\\f47e\"; }\n\n.fa-hospital-symbol::before {\n  content: \"\\f47e\"; }\n\n.fa-circle-half-stroke::before {\n  content: \"\\f042\"; }\n\n.fa-adjust::before {\n  content: \"\\f042\"; }\n\n.fa-circle-info::before {\n  content: \"\\f05a\"; }\n\n.fa-info-circle::before {\n  content: \"\\f05a\"; }\n\n.fa-circle-left::before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-left::before {\n  content: \"\\f359\"; }\n\n.fa-circle-minus::before {\n  content: \"\\f056\"; }\n\n.fa-minus-circle::before {\n  content: \"\\f056\"; }\n\n.fa-circle-notch::before {\n  content: \"\\f1ce\"; }\n\n.fa-circle-pause::before {\n  content: \"\\f28b\"; }\n\n.fa-pause-circle::before {\n  content: \"\\f28b\"; }\n\n.fa-circle-play::before {\n  content: \"\\f144\"; }\n\n.fa-play-circle::before {\n  content: \"\\f144\"; }\n\n.fa-circle-plus::before {\n  content: \"\\f055\"; }\n\n.fa-plus-circle::before {\n  content: \"\\f055\"; }\n\n.fa-circle-question::before {\n  content: \"\\f059\"; }\n\n.fa-question-circle::before {\n  content: \"\\f059\"; }\n\n.fa-circle-radiation::before {\n  content: \"\\f7ba\"; }\n\n.fa-radiation-alt::before {\n  content: \"\\f7ba\"; }\n\n.fa-circle-right::before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-right::before {\n  content: \"\\f35a\"; }\n\n.fa-circle-stop::before {\n  content: \"\\f28d\"; }\n\n.fa-stop-circle::before {\n  content: \"\\f28d\"; }\n\n.fa-circle-up::before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-alt-circle-up::before {\n  content: \"\\f35b\"; }\n\n.fa-circle-user::before {\n  content: \"\\f2bd\"; }\n\n.fa-user-circle::before {\n  content: \"\\f2bd\"; }\n\n.fa-circle-xmark::before {\n  content: \"\\f057\"; }\n\n.fa-times-circle::before {\n  content: \"\\f057\"; }\n\n.fa-xmark-circle::before {\n  content: \"\\f057\"; }\n\n.fa-city::before {\n  content: \"\\f64f\"; }\n\n.fa-clapperboard::before {\n  content: \"\\e131\"; }\n\n.fa-clipboard::before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check::before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list::before {\n  content: \"\\f46d\"; }\n\n.fa-clock::before {\n  content: \"\\f017\"; }\n\n.fa-clock-four::before {\n  content: \"\\f017\"; }\n\n.fa-clock-rotate-left::before {\n  content: \"\\f1da\"; }\n\n.fa-history::before {\n  content: \"\\f1da\"; }\n\n.fa-clone::before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning::before {\n  content: \"\\f20a\"; }\n\n.fa-cloud::before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-arrow-down::before {\n  content: \"\\f0ed\"; }\n\n.fa-cloud-download::before {\n  content: \"\\f0ed\"; }\n\n.fa-cloud-download-alt::before {\n  content: \"\\f0ed\"; }\n\n.fa-cloud-arrow-up::before {\n  content: \"\\f0ee\"; }\n\n.fa-cloud-upload::before {\n  content: \"\\f0ee\"; }\n\n.fa-cloud-upload-alt::before {\n  content: \"\\f0ee\"; }\n\n.fa-cloud-meatball::before {\n  content: \"\\f73b\"; }\n\n.fa-cloud-moon::before {\n  content: \"\\f6c3\"; }\n\n.fa-cloud-moon-rain::before {\n  content: \"\\f73c\"; }\n\n.fa-cloud-rain::before {\n  content: \"\\f73d\"; }\n\n.fa-cloud-showers-heavy::before {\n  content: \"\\f740\"; }\n\n.fa-cloud-sun::before {\n  content: \"\\f6c4\"; }\n\n.fa-cloud-sun-rain::before {\n  content: \"\\f743\"; }\n\n.fa-clover::before {\n  content: \"\\e139\"; }\n\n.fa-code::before {\n  content: \"\\f121\"; }\n\n.fa-code-branch::before {\n  content: \"\\f126\"; }\n\n.fa-code-commit::before {\n  content: \"\\f386\"; }\n\n.fa-code-compare::before {\n  content: \"\\e13a\"; }\n\n.fa-code-fork::before {\n  content: \"\\e13b\"; }\n\n.fa-code-merge::before {\n  content: \"\\f387\"; }\n\n.fa-code-pull-request::before {\n  content: \"\\e13c\"; }\n\n.fa-coins::before {\n  content: \"\\f51e\"; }\n\n.fa-colon-sign::before {\n  content: \"\\e140\"; }\n\n.fa-comment::before {\n  content: \"\\f075\"; }\n\n.fa-comment-dollar::before {\n  content: \"\\f651\"; }\n\n.fa-comment-dots::before {\n  content: \"\\f4ad\"; }\n\n.fa-commenting::before {\n  content: \"\\f4ad\"; }\n\n.fa-comment-medical::before {\n  content: \"\\f7f5\"; }\n\n.fa-comment-slash::before {\n  content: \"\\f4b3\"; }\n\n.fa-comment-sms::before {\n  content: \"\\f7cd\"; }\n\n.fa-sms::before {\n  content: \"\\f7cd\"; }\n\n.fa-comments::before {\n  content: \"\\f086\"; }\n\n.fa-comments-dollar::before {\n  content: \"\\f653\"; }\n\n.fa-compact-disc::before {\n  content: \"\\f51f\"; }\n\n.fa-compass::before {\n  content: \"\\f14e\"; }\n\n.fa-compass-drafting::before {\n  content: \"\\f568\"; }\n\n.fa-drafting-compass::before {\n  content: \"\\f568\"; }\n\n.fa-compress::before {\n  content: \"\\f066\"; }\n\n.fa-computer-mouse::before {\n  content: \"\\f8cc\"; }\n\n.fa-mouse::before {\n  content: \"\\f8cc\"; }\n\n.fa-cookie::before {\n  content: \"\\f563\"; }\n\n.fa-cookie-bite::before {\n  content: \"\\f564\"; }\n\n.fa-copy::before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright::before {\n  content: \"\\f1f9\"; }\n\n.fa-couch::before {\n  content: \"\\f4b8\"; }\n\n.fa-credit-card::before {\n  content: \"\\f09d\"; }\n\n.fa-credit-card-alt::before {\n  content: \"\\f09d\"; }\n\n.fa-crop::before {\n  content: \"\\f125\"; }\n\n.fa-crop-simple::before {\n  content: \"\\f565\"; }\n\n.fa-crop-alt::before {\n  content: \"\\f565\"; }\n\n.fa-cross::before {\n  content: \"\\f654\"; }\n\n.fa-crosshairs::before {\n  content: \"\\f05b\"; }\n\n.fa-crow::before {\n  content: \"\\f520\"; }\n\n.fa-crown::before {\n  content: \"\\f521\"; }\n\n.fa-crutch::before {\n  content: \"\\f7f7\"; }\n\n.fa-cruzeiro-sign::before {\n  content: \"\\e152\"; }\n\n.fa-cube::before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes::before {\n  content: \"\\f1b3\"; }\n\n.fa-d::before {\n  content: \"\\44\"; }\n\n.fa-database::before {\n  content: \"\\f1c0\"; }\n\n.fa-delete-left::before {\n  content: \"\\f55a\"; }\n\n.fa-backspace::before {\n  content: \"\\f55a\"; }\n\n.fa-democrat::before {\n  content: \"\\f747\"; }\n\n.fa-desktop::before {\n  content: \"\\f390\"; }\n\n.fa-desktop-alt::before {\n  content: \"\\f390\"; }\n\n.fa-dharmachakra::before {\n  content: \"\\f655\"; }\n\n.fa-diagram-next::before {\n  content: \"\\e476\"; }\n\n.fa-diagram-predecessor::before {\n  content: \"\\e477\"; }\n\n.fa-diagram-project::before {\n  content: \"\\f542\"; }\n\n.fa-project-diagram::before {\n  content: \"\\f542\"; }\n\n.fa-diagram-successor::before {\n  content: \"\\e47a\"; }\n\n.fa-diamond::before {\n  content: \"\\f219\"; }\n\n.fa-diamond-turn-right::before {\n  content: \"\\f5eb\"; }\n\n.fa-directions::before {\n  content: \"\\f5eb\"; }\n\n.fa-dice::before {\n  content: \"\\f522\"; }\n\n.fa-dice-d20::before {\n  content: \"\\f6cf\"; }\n\n.fa-dice-d6::before {\n  content: \"\\f6d1\"; }\n\n.fa-dice-five::before {\n  content: \"\\f523\"; }\n\n.fa-dice-four::before {\n  content: \"\\f524\"; }\n\n.fa-dice-one::before {\n  content: \"\\f525\"; }\n\n.fa-dice-six::before {\n  content: \"\\f526\"; }\n\n.fa-dice-three::before {\n  content: \"\\f527\"; }\n\n.fa-dice-two::before {\n  content: \"\\f528\"; }\n\n.fa-disease::before {\n  content: \"\\f7fa\"; }\n\n.fa-divide::before {\n  content: \"\\f529\"; }\n\n.fa-dna::before {\n  content: \"\\f471\"; }\n\n.fa-dog::before {\n  content: \"\\f6d3\"; }\n\n.fa-dollar-sign::before {\n  content: \"\\24\"; }\n\n.fa-dollar::before {\n  content: \"\\24\"; }\n\n.fa-usd::before {\n  content: \"\\24\"; }\n\n.fa-dolly::before {\n  content: \"\\f472\"; }\n\n.fa-dolly-box::before {\n  content: \"\\f472\"; }\n\n.fa-dong-sign::before {\n  content: \"\\e169\"; }\n\n.fa-door-closed::before {\n  content: \"\\f52a\"; }\n\n.fa-door-open::before {\n  content: \"\\f52b\"; }\n\n.fa-dove::before {\n  content: \"\\f4ba\"; }\n\n.fa-down-left-and-up-right-to-center::before {\n  content: \"\\f422\"; }\n\n.fa-compress-alt::before {\n  content: \"\\f422\"; }\n\n.fa-down-long::before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-down::before {\n  content: \"\\f309\"; }\n\n.fa-download::before {\n  content: \"\\f019\"; }\n\n.fa-dragon::before {\n  content: \"\\f6d5\"; }\n\n.fa-draw-polygon::before {\n  content: \"\\f5ee\"; }\n\n.fa-droplet::before {\n  content: \"\\f043\"; }\n\n.fa-tint::before {\n  content: \"\\f043\"; }\n\n.fa-droplet-slash::before {\n  content: \"\\f5c7\"; }\n\n.fa-tint-slash::before {\n  content: \"\\f5c7\"; }\n\n.fa-drum::before {\n  content: \"\\f569\"; }\n\n.fa-drum-steelpan::before {\n  content: \"\\f56a\"; }\n\n.fa-drumstick-bite::before {\n  content: \"\\f6d7\"; }\n\n.fa-dumbbell::before {\n  content: \"\\f44b\"; }\n\n.fa-dumpster::before {\n  content: \"\\f793\"; }\n\n.fa-dumpster-fire::before {\n  content: \"\\f794\"; }\n\n.fa-dungeon::before {\n  content: \"\\f6d9\"; }\n\n.fa-e::before {\n  content: \"\\45\"; }\n\n.fa-ear-deaf::before {\n  content: \"\\f2a4\"; }\n\n.fa-deaf::before {\n  content: \"\\f2a4\"; }\n\n.fa-deafness::before {\n  content: \"\\f2a4\"; }\n\n.fa-hard-of-hearing::before {\n  content: \"\\f2a4\"; }\n\n.fa-ear-listen::before {\n  content: \"\\f2a2\"; }\n\n.fa-assistive-listening-systems::before {\n  content: \"\\f2a2\"; }\n\n.fa-earth-africa::before {\n  content: \"\\f57c\"; }\n\n.fa-globe-africa::before {\n  content: \"\\f57c\"; }\n\n.fa-earth-americas::before {\n  content: \"\\f57d\"; }\n\n.fa-earth::before {\n  content: \"\\f57d\"; }\n\n.fa-earth-america::before {\n  content: \"\\f57d\"; }\n\n.fa-globe-americas::before {\n  content: \"\\f57d\"; }\n\n.fa-earth-asia::before {\n  content: \"\\f57e\"; }\n\n.fa-globe-asia::before {\n  content: \"\\f57e\"; }\n\n.fa-earth-europe::before {\n  content: \"\\f7a2\"; }\n\n.fa-globe-europe::before {\n  content: \"\\f7a2\"; }\n\n.fa-earth-oceania::before {\n  content: \"\\e47b\"; }\n\n.fa-globe-oceania::before {\n  content: \"\\e47b\"; }\n\n.fa-egg::before {\n  content: \"\\f7fb\"; }\n\n.fa-eject::before {\n  content: \"\\f052\"; }\n\n.fa-elevator::before {\n  content: \"\\e16d\"; }\n\n.fa-ellipsis::before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-h::before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-vertical::before {\n  content: \"\\f142\"; }\n\n.fa-ellipsis-v::before {\n  content: \"\\f142\"; }\n\n.fa-envelope::before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open::before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-open-text::before {\n  content: \"\\f658\"; }\n\n.fa-envelopes-bulk::before {\n  content: \"\\f674\"; }\n\n.fa-mail-bulk::before {\n  content: \"\\f674\"; }\n\n.fa-equals::before {\n  content: \"\\3d\"; }\n\n.fa-eraser::before {\n  content: \"\\f12d\"; }\n\n.fa-ethernet::before {\n  content: \"\\f796\"; }\n\n.fa-euro-sign::before {\n  content: \"\\f153\"; }\n\n.fa-eur::before {\n  content: \"\\f153\"; }\n\n.fa-euro::before {\n  content: \"\\f153\"; }\n\n.fa-exclamation::before {\n  content: \"\\21\"; }\n\n.fa-expand::before {\n  content: \"\\f065\"; }\n\n.fa-eye::before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper::before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-dropper-empty::before {\n  content: \"\\f1fb\"; }\n\n.fa-eyedropper::before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-low-vision::before {\n  content: \"\\f2a8\"; }\n\n.fa-low-vision::before {\n  content: \"\\f2a8\"; }\n\n.fa-eye-slash::before {\n  content: \"\\f070\"; }\n\n.fa-f::before {\n  content: \"\\46\"; }\n\n.fa-face-angry::before {\n  content: \"\\f556\"; }\n\n.fa-angry::before {\n  content: \"\\f556\"; }\n\n.fa-face-dizzy::before {\n  content: \"\\f567\"; }\n\n.fa-dizzy::before {\n  content: \"\\f567\"; }\n\n.fa-face-flushed::before {\n  content: \"\\f579\"; }\n\n.fa-flushed::before {\n  content: \"\\f579\"; }\n\n.fa-face-frown::before {\n  content: \"\\f119\"; }\n\n.fa-frown::before {\n  content: \"\\f119\"; }\n\n.fa-face-frown-open::before {\n  content: \"\\f57a\"; }\n\n.fa-frown-open::before {\n  content: \"\\f57a\"; }\n\n.fa-face-grimace::before {\n  content: \"\\f57f\"; }\n\n.fa-grimace::before {\n  content: \"\\f57f\"; }\n\n.fa-face-grin::before {\n  content: \"\\f580\"; }\n\n.fa-grin::before {\n  content: \"\\f580\"; }\n\n.fa-face-grin-beam::before {\n  content: \"\\f582\"; }\n\n.fa-grin-beam::before {\n  content: \"\\f582\"; }\n\n.fa-face-grin-beam-sweat::before {\n  content: \"\\f583\"; }\n\n.fa-grin-beam-sweat::before {\n  content: \"\\f583\"; }\n\n.fa-face-grin-hearts::before {\n  content: \"\\f584\"; }\n\n.fa-grin-hearts::before {\n  content: \"\\f584\"; }\n\n.fa-face-grin-squint::before {\n  content: \"\\f585\"; }\n\n.fa-grin-squint::before {\n  content: \"\\f585\"; }\n\n.fa-face-grin-squint-tears::before {\n  content: \"\\f586\"; }\n\n.fa-grin-squint-tears::before {\n  content: \"\\f586\"; }\n\n.fa-face-grin-stars::before {\n  content: \"\\f587\"; }\n\n.fa-grin-stars::before {\n  content: \"\\f587\"; }\n\n.fa-face-grin-tears::before {\n  content: \"\\f588\"; }\n\n.fa-grin-tears::before {\n  content: \"\\f588\"; }\n\n.fa-face-grin-tongue::before {\n  content: \"\\f589\"; }\n\n.fa-grin-tongue::before {\n  content: \"\\f589\"; }\n\n.fa-face-grin-tongue-squint::before {\n  content: \"\\f58a\"; }\n\n.fa-grin-tongue-squint::before {\n  content: \"\\f58a\"; }\n\n.fa-face-grin-tongue-wink::before {\n  content: \"\\f58b\"; }\n\n.fa-grin-tongue-wink::before {\n  content: \"\\f58b\"; }\n\n.fa-face-grin-wide::before {\n  content: \"\\f581\"; }\n\n.fa-grin-alt::before {\n  content: \"\\f581\"; }\n\n.fa-face-grin-wink::before {\n  content: \"\\f58c\"; }\n\n.fa-grin-wink::before {\n  content: \"\\f58c\"; }\n\n.fa-face-kiss::before {\n  content: \"\\f596\"; }\n\n.fa-kiss::before {\n  content: \"\\f596\"; }\n\n.fa-face-kiss-beam::before {\n  content: \"\\f597\"; }\n\n.fa-kiss-beam::before {\n  content: \"\\f597\"; }\n\n.fa-face-kiss-wink-heart::before {\n  content: \"\\f598\"; }\n\n.fa-kiss-wink-heart::before {\n  content: \"\\f598\"; }\n\n.fa-face-laugh::before {\n  content: \"\\f599\"; }\n\n.fa-laugh::before {\n  content: \"\\f599\"; }\n\n.fa-face-laugh-beam::before {\n  content: \"\\f59a\"; }\n\n.fa-laugh-beam::before {\n  content: \"\\f59a\"; }\n\n.fa-face-laugh-squint::before {\n  content: \"\\f59b\"; }\n\n.fa-laugh-squint::before {\n  content: \"\\f59b\"; }\n\n.fa-face-laugh-wink::before {\n  content: \"\\f59c\"; }\n\n.fa-laugh-wink::before {\n  content: \"\\f59c\"; }\n\n.fa-face-meh::before {\n  content: \"\\f11a\"; }\n\n.fa-meh::before {\n  content: \"\\f11a\"; }\n\n.fa-face-meh-blank::before {\n  content: \"\\f5a4\"; }\n\n.fa-meh-blank::before {\n  content: \"\\f5a4\"; }\n\n.fa-face-rolling-eyes::before {\n  content: \"\\f5a5\"; }\n\n.fa-meh-rolling-eyes::before {\n  content: \"\\f5a5\"; }\n\n.fa-face-sad-cry::before {\n  content: \"\\f5b3\"; }\n\n.fa-sad-cry::before {\n  content: \"\\f5b3\"; }\n\n.fa-face-sad-tear::before {\n  content: \"\\f5b4\"; }\n\n.fa-sad-tear::before {\n  content: \"\\f5b4\"; }\n\n.fa-face-smile::before {\n  content: \"\\f118\"; }\n\n.fa-smile::before {\n  content: \"\\f118\"; }\n\n.fa-face-smile-beam::before {\n  content: \"\\f5b8\"; }\n\n.fa-smile-beam::before {\n  content: \"\\f5b8\"; }\n\n.fa-face-smile-wink::before {\n  content: \"\\f4da\"; }\n\n.fa-smile-wink::before {\n  content: \"\\f4da\"; }\n\n.fa-face-surprise::before {\n  content: \"\\f5c2\"; }\n\n.fa-surprise::before {\n  content: \"\\f5c2\"; }\n\n.fa-face-tired::before {\n  content: \"\\f5c8\"; }\n\n.fa-tired::before {\n  content: \"\\f5c8\"; }\n\n.fa-fan::before {\n  content: \"\\f863\"; }\n\n.fa-faucet::before {\n  content: \"\\e005\"; }\n\n.fa-fax::before {\n  content: \"\\f1ac\"; }\n\n.fa-feather::before {\n  content: \"\\f52d\"; }\n\n.fa-feather-pointed::before {\n  content: \"\\f56b\"; }\n\n.fa-feather-alt::before {\n  content: \"\\f56b\"; }\n\n.fa-file::before {\n  content: \"\\f15b\"; }\n\n.fa-file-arrow-down::before {\n  content: \"\\f56d\"; }\n\n.fa-file-download::before {\n  content: \"\\f56d\"; }\n\n.fa-file-arrow-up::before {\n  content: \"\\f574\"; }\n\n.fa-file-upload::before {\n  content: \"\\f574\"; }\n\n.fa-file-audio::before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code::before {\n  content: \"\\f1c9\"; }\n\n.fa-file-contract::before {\n  content: \"\\f56c\"; }\n\n.fa-file-csv::before {\n  content: \"\\f6dd\"; }\n\n.fa-file-excel::before {\n  content: \"\\f1c3\"; }\n\n.fa-file-export::before {\n  content: \"\\f56e\"; }\n\n.fa-arrow-right-from-file::before {\n  content: \"\\f56e\"; }\n\n.fa-file-image::before {\n  content: \"\\f1c5\"; }\n\n.fa-file-import::before {\n  content: \"\\f56f\"; }\n\n.fa-arrow-right-to-file::before {\n  content: \"\\f56f\"; }\n\n.fa-file-invoice::before {\n  content: \"\\f570\"; }\n\n.fa-file-invoice-dollar::before {\n  content: \"\\f571\"; }\n\n.fa-file-lines::before {\n  content: \"\\f15c\"; }\n\n.fa-file-alt::before {\n  content: \"\\f15c\"; }\n\n.fa-file-text::before {\n  content: \"\\f15c\"; }\n\n.fa-file-medical::before {\n  content: \"\\f477\"; }\n\n.fa-file-pdf::before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint::before {\n  content: \"\\f1c4\"; }\n\n.fa-file-prescription::before {\n  content: \"\\f572\"; }\n\n.fa-file-signature::before {\n  content: \"\\f573\"; }\n\n.fa-file-video::before {\n  content: \"\\f1c8\"; }\n\n.fa-file-waveform::before {\n  content: \"\\f478\"; }\n\n.fa-file-medical-alt::before {\n  content: \"\\f478\"; }\n\n.fa-file-word::before {\n  content: \"\\f1c2\"; }\n\n.fa-file-zipper::before {\n  content: \"\\f1c6\"; }\n\n.fa-file-archive::before {\n  content: \"\\f1c6\"; }\n\n.fa-fill::before {\n  content: \"\\f575\"; }\n\n.fa-fill-drip::before {\n  content: \"\\f576\"; }\n\n.fa-film::before {\n  content: \"\\f008\"; }\n\n.fa-filter::before {\n  content: \"\\f0b0\"; }\n\n.fa-filter-circle-dollar::before {\n  content: \"\\f662\"; }\n\n.fa-funnel-dollar::before {\n  content: \"\\f662\"; }\n\n.fa-filter-circle-xmark::before {\n  content: \"\\e17b\"; }\n\n.fa-fingerprint::before {\n  content: \"\\f577\"; }\n\n.fa-fire::before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher::before {\n  content: \"\\f134\"; }\n\n.fa-fire-flame-curved::before {\n  content: \"\\f7e4\"; }\n\n.fa-fire-alt::before {\n  content: \"\\f7e4\"; }\n\n.fa-fire-flame-simple::before {\n  content: \"\\f46a\"; }\n\n.fa-burn::before {\n  content: \"\\f46a\"; }\n\n.fa-fish::before {\n  content: \"\\f578\"; }\n\n.fa-flag::before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered::before {\n  content: \"\\f11e\"; }\n\n.fa-flag-usa::before {\n  content: \"\\f74d\"; }\n\n.fa-flask::before {\n  content: \"\\f0c3\"; }\n\n.fa-floppy-disk::before {\n  content: \"\\f0c7\"; }\n\n.fa-save::before {\n  content: \"\\f0c7\"; }\n\n.fa-florin-sign::before {\n  content: \"\\e184\"; }\n\n.fa-folder::before {\n  content: \"\\f07b\"; }\n\n.fa-folder-minus::before {\n  content: \"\\f65d\"; }\n\n.fa-folder-open::before {\n  content: \"\\f07c\"; }\n\n.fa-folder-plus::before {\n  content: \"\\f65e\"; }\n\n.fa-folder-tree::before {\n  content: \"\\f802\"; }\n\n.fa-font::before {\n  content: \"\\f031\"; }\n\n.fa-football::before {\n  content: \"\\f44e\"; }\n\n.fa-football-ball::before {\n  content: \"\\f44e\"; }\n\n.fa-forward::before {\n  content: \"\\f04e\"; }\n\n.fa-forward-fast::before {\n  content: \"\\f050\"; }\n\n.fa-fast-forward::before {\n  content: \"\\f050\"; }\n\n.fa-forward-step::before {\n  content: \"\\f051\"; }\n\n.fa-step-forward::before {\n  content: \"\\f051\"; }\n\n.fa-franc-sign::before {\n  content: \"\\e18f\"; }\n\n.fa-frog::before {\n  content: \"\\f52e\"; }\n\n.fa-futbol::before {\n  content: \"\\f1e3\"; }\n\n.fa-futbol-ball::before {\n  content: \"\\f1e3\"; }\n\n.fa-soccer-ball::before {\n  content: \"\\f1e3\"; }\n\n.fa-g::before {\n  content: \"\\47\"; }\n\n.fa-gamepad::before {\n  content: \"\\f11b\"; }\n\n.fa-gas-pump::before {\n  content: \"\\f52f\"; }\n\n.fa-gauge::before {\n  content: \"\\f624\"; }\n\n.fa-dashboard::before {\n  content: \"\\f624\"; }\n\n.fa-gauge-med::before {\n  content: \"\\f624\"; }\n\n.fa-tachometer-alt-average::before {\n  content: \"\\f624\"; }\n\n.fa-gauge-high::before {\n  content: \"\\f625\"; }\n\n.fa-tachometer-alt::before {\n  content: \"\\f625\"; }\n\n.fa-tachometer-alt-fast::before {\n  content: \"\\f625\"; }\n\n.fa-gauge-simple::before {\n  content: \"\\f629\"; }\n\n.fa-gauge-simple-med::before {\n  content: \"\\f629\"; }\n\n.fa-tachometer-average::before {\n  content: \"\\f629\"; }\n\n.fa-gauge-simple-high::before {\n  content: \"\\f62a\"; }\n\n.fa-tachometer::before {\n  content: \"\\f62a\"; }\n\n.fa-tachometer-fast::before {\n  content: \"\\f62a\"; }\n\n.fa-gavel::before {\n  content: \"\\f0e3\"; }\n\n.fa-legal::before {\n  content: \"\\f0e3\"; }\n\n.fa-gear::before {\n  content: \"\\f013\"; }\n\n.fa-cog::before {\n  content: \"\\f013\"; }\n\n.fa-gears::before {\n  content: \"\\f085\"; }\n\n.fa-cogs::before {\n  content: \"\\f085\"; }\n\n.fa-gem::before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless::before {\n  content: \"\\f22d\"; }\n\n.fa-ghost::before {\n  content: \"\\f6e2\"; }\n\n.fa-gift::before {\n  content: \"\\f06b\"; }\n\n.fa-gifts::before {\n  content: \"\\f79c\"; }\n\n.fa-glasses::before {\n  content: \"\\f530\"; }\n\n.fa-globe::before {\n  content: \"\\f0ac\"; }\n\n.fa-golf-ball-tee::before {\n  content: \"\\f450\"; }\n\n.fa-golf-ball::before {\n  content: \"\\f450\"; }\n\n.fa-gopuram::before {\n  content: \"\\f664\"; }\n\n.fa-graduation-cap::before {\n  content: \"\\f19d\"; }\n\n.fa-mortar-board::before {\n  content: \"\\f19d\"; }\n\n.fa-greater-than::before {\n  content: \"\\3e\"; }\n\n.fa-greater-than-equal::before {\n  content: \"\\f532\"; }\n\n.fa-grip::before {\n  content: \"\\f58d\"; }\n\n.fa-grip-horizontal::before {\n  content: \"\\f58d\"; }\n\n.fa-grip-lines::before {\n  content: \"\\f7a4\"; }\n\n.fa-grip-lines-vertical::before {\n  content: \"\\f7a5\"; }\n\n.fa-grip-vertical::before {\n  content: \"\\f58e\"; }\n\n.fa-guarani-sign::before {\n  content: \"\\e19a\"; }\n\n.fa-guitar::before {\n  content: \"\\f7a6\"; }\n\n.fa-gun::before {\n  content: \"\\e19b\"; }\n\n.fa-h::before {\n  content: \"\\48\"; }\n\n.fa-hammer::before {\n  content: \"\\f6e3\"; }\n\n.fa-hamsa::before {\n  content: \"\\f665\"; }\n\n.fa-hand::before {\n  content: \"\\f256\"; }\n\n.fa-hand-paper::before {\n  content: \"\\f256\"; }\n\n.fa-hand-back-fist::before {\n  content: \"\\f255\"; }\n\n.fa-hand-rock::before {\n  content: \"\\f255\"; }\n\n.fa-hand-dots::before {\n  content: \"\\f461\"; }\n\n.fa-allergies::before {\n  content: \"\\f461\"; }\n\n.fa-hand-fist::before {\n  content: \"\\f6de\"; }\n\n.fa-fist-raised::before {\n  content: \"\\f6de\"; }\n\n.fa-hand-holding::before {\n  content: \"\\f4bd\"; }\n\n.fa-hand-holding-dollar::before {\n  content: \"\\f4c0\"; }\n\n.fa-hand-holding-usd::before {\n  content: \"\\f4c0\"; }\n\n.fa-hand-holding-droplet::before {\n  content: \"\\f4c1\"; }\n\n.fa-hand-holding-water::before {\n  content: \"\\f4c1\"; }\n\n.fa-hand-holding-heart::before {\n  content: \"\\f4be\"; }\n\n.fa-hand-holding-medical::before {\n  content: \"\\e05c\"; }\n\n.fa-hand-lizard::before {\n  content: \"\\f258\"; }\n\n.fa-hand-middle-finger::before {\n  content: \"\\f806\"; }\n\n.fa-hand-peace::before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down::before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left::before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right::before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up::before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer::before {\n  content: \"\\f25a\"; }\n\n.fa-hand-scissors::before {\n  content: \"\\f257\"; }\n\n.fa-hand-sparkles::before {\n  content: \"\\e05d\"; }\n\n.fa-hand-spock::before {\n  content: \"\\f259\"; }\n\n.fa-hands::before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-language::before {\n  content: \"\\f2a7\"; }\n\n.fa-signing::before {\n  content: \"\\f2a7\"; }\n\n.fa-hands-asl-interpreting::before {\n  content: \"\\f2a3\"; }\n\n.fa-american-sign-language-interpreting::before {\n  content: \"\\f2a3\"; }\n\n.fa-asl-interpreting::before {\n  content: \"\\f2a3\"; }\n\n.fa-hands-american-sign-language-interpreting::before {\n  content: \"\\f2a3\"; }\n\n.fa-hands-bubbles::before {\n  content: \"\\e05e\"; }\n\n.fa-hands-wash::before {\n  content: \"\\e05e\"; }\n\n.fa-hands-clapping::before {\n  content: \"\\e1a8\"; }\n\n.fa-hands-holding::before {\n  content: \"\\f4c2\"; }\n\n.fa-hands-praying::before {\n  content: \"\\f684\"; }\n\n.fa-praying-hands::before {\n  content: \"\\f684\"; }\n\n.fa-handshake::before {\n  content: \"\\f2b5\"; }\n\n.fa-handshake-angle::before {\n  content: \"\\f4c4\"; }\n\n.fa-hands-helping::before {\n  content: \"\\f4c4\"; }\n\n.fa-handshake-simple-slash::before {\n  content: \"\\e05f\"; }\n\n.fa-handshake-alt-slash::before {\n  content: \"\\e05f\"; }\n\n.fa-handshake-slash::before {\n  content: \"\\e060\"; }\n\n.fa-hanukiah::before {\n  content: \"\\f6e6\"; }\n\n.fa-hard-drive::before {\n  content: \"\\f0a0\"; }\n\n.fa-hdd::before {\n  content: \"\\f0a0\"; }\n\n.fa-hashtag::before {\n  content: \"\\23\"; }\n\n.fa-hat-cowboy::before {\n  content: \"\\f8c0\"; }\n\n.fa-hat-cowboy-side::before {\n  content: \"\\f8c1\"; }\n\n.fa-hat-wizard::before {\n  content: \"\\f6e8\"; }\n\n.fa-head-side-cough::before {\n  content: \"\\e061\"; }\n\n.fa-head-side-cough-slash::before {\n  content: \"\\e062\"; }\n\n.fa-head-side-mask::before {\n  content: \"\\e063\"; }\n\n.fa-head-side-virus::before {\n  content: \"\\e064\"; }\n\n.fa-heading::before {\n  content: \"\\f1dc\"; }\n\n.fa-header::before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones::before {\n  content: \"\\f025\"; }\n\n.fa-headphones-simple::before {\n  content: \"\\f58f\"; }\n\n.fa-headphones-alt::before {\n  content: \"\\f58f\"; }\n\n.fa-headset::before {\n  content: \"\\f590\"; }\n\n.fa-heart::before {\n  content: \"\\f004\"; }\n\n.fa-heart-crack::before {\n  content: \"\\f7a9\"; }\n\n.fa-heart-broken::before {\n  content: \"\\f7a9\"; }\n\n.fa-heart-pulse::before {\n  content: \"\\f21e\"; }\n\n.fa-heartbeat::before {\n  content: \"\\f21e\"; }\n\n.fa-helicopter::before {\n  content: \"\\f533\"; }\n\n.fa-helmet-safety::before {\n  content: \"\\f807\"; }\n\n.fa-hard-hat::before {\n  content: \"\\f807\"; }\n\n.fa-hat-hard::before {\n  content: \"\\f807\"; }\n\n.fa-highlighter::before {\n  content: \"\\f591\"; }\n\n.fa-hippo::before {\n  content: \"\\f6ed\"; }\n\n.fa-hockey-puck::before {\n  content: \"\\f453\"; }\n\n.fa-holly-berry::before {\n  content: \"\\f7aa\"; }\n\n.fa-horse::before {\n  content: \"\\f6f0\"; }\n\n.fa-horse-head::before {\n  content: \"\\f7ab\"; }\n\n.fa-hospital::before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-alt::before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-wide::before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-user::before {\n  content: \"\\f80d\"; }\n\n.fa-hot-tub-person::before {\n  content: \"\\f593\"; }\n\n.fa-hot-tub::before {\n  content: \"\\f593\"; }\n\n.fa-hotdog::before {\n  content: \"\\f80f\"; }\n\n.fa-hotel::before {\n  content: \"\\f594\"; }\n\n.fa-hourglass::before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-2::before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-half::before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-empty::before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-end::before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-3::before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-start::before {\n  content: \"\\f251\"; }\n\n.fa-hourglass-1::before {\n  content: \"\\f251\"; }\n\n.fa-house::before {\n  content: \"\\f015\"; }\n\n.fa-home::before {\n  content: \"\\f015\"; }\n\n.fa-home-alt::before {\n  content: \"\\f015\"; }\n\n.fa-home-lg-alt::before {\n  content: \"\\f015\"; }\n\n.fa-house-chimney::before {\n  content: \"\\e3af\"; }\n\n.fa-home-lg::before {\n  content: \"\\e3af\"; }\n\n.fa-house-chimney-crack::before {\n  content: \"\\f6f1\"; }\n\n.fa-house-damage::before {\n  content: \"\\f6f1\"; }\n\n.fa-house-chimney-medical::before {\n  content: \"\\f7f2\"; }\n\n.fa-clinic-medical::before {\n  content: \"\\f7f2\"; }\n\n.fa-house-chimney-user::before {\n  content: \"\\e065\"; }\n\n.fa-house-chimney-window::before {\n  content: \"\\e00d\"; }\n\n.fa-house-crack::before {\n  content: \"\\e3b1\"; }\n\n.fa-house-laptop::before {\n  content: \"\\e066\"; }\n\n.fa-laptop-house::before {\n  content: \"\\e066\"; }\n\n.fa-house-medical::before {\n  content: \"\\e3b2\"; }\n\n.fa-house-user::before {\n  content: \"\\e1b0\"; }\n\n.fa-home-user::before {\n  content: \"\\e1b0\"; }\n\n.fa-hryvnia-sign::before {\n  content: \"\\f6f2\"; }\n\n.fa-hryvnia::before {\n  content: \"\\f6f2\"; }\n\n.fa-i::before {\n  content: \"\\49\"; }\n\n.fa-i-cursor::before {\n  content: \"\\f246\"; }\n\n.fa-ice-cream::before {\n  content: \"\\f810\"; }\n\n.fa-icicles::before {\n  content: \"\\f7ad\"; }\n\n.fa-icons::before {\n  content: \"\\f86d\"; }\n\n.fa-heart-music-camera-bolt::before {\n  content: \"\\f86d\"; }\n\n.fa-id-badge::before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card::before {\n  content: \"\\f2c2\"; }\n\n.fa-drivers-license::before {\n  content: \"\\f2c2\"; }\n\n.fa-id-card-clip::before {\n  content: \"\\f47f\"; }\n\n.fa-id-card-alt::before {\n  content: \"\\f47f\"; }\n\n.fa-igloo::before {\n  content: \"\\f7ae\"; }\n\n.fa-image::before {\n  content: \"\\f03e\"; }\n\n.fa-image-portrait::before {\n  content: \"\\f3e0\"; }\n\n.fa-portrait::before {\n  content: \"\\f3e0\"; }\n\n.fa-images::before {\n  content: \"\\f302\"; }\n\n.fa-inbox::before {\n  content: \"\\f01c\"; }\n\n.fa-indent::before {\n  content: \"\\f03c\"; }\n\n.fa-indian-rupee-sign::before {\n  content: \"\\e1bc\"; }\n\n.fa-indian-rupee::before {\n  content: \"\\e1bc\"; }\n\n.fa-inr::before {\n  content: \"\\e1bc\"; }\n\n.fa-industry::before {\n  content: \"\\f275\"; }\n\n.fa-infinity::before {\n  content: \"\\f534\"; }\n\n.fa-info::before {\n  content: \"\\f129\"; }\n\n.fa-italic::before {\n  content: \"\\f033\"; }\n\n.fa-j::before {\n  content: \"\\4a\"; }\n\n.fa-jedi::before {\n  content: \"\\f669\"; }\n\n.fa-jet-fighter::before {\n  content: \"\\f0fb\"; }\n\n.fa-fighter-jet::before {\n  content: \"\\f0fb\"; }\n\n.fa-joint::before {\n  content: \"\\f595\"; }\n\n.fa-k::before {\n  content: \"\\4b\"; }\n\n.fa-kaaba::before {\n  content: \"\\f66b\"; }\n\n.fa-key::before {\n  content: \"\\f084\"; }\n\n.fa-keyboard::before {\n  content: \"\\f11c\"; }\n\n.fa-khanda::before {\n  content: \"\\f66d\"; }\n\n.fa-kip-sign::before {\n  content: \"\\e1c4\"; }\n\n.fa-kit-medical::before {\n  content: \"\\f479\"; }\n\n.fa-first-aid::before {\n  content: \"\\f479\"; }\n\n.fa-kiwi-bird::before {\n  content: \"\\f535\"; }\n\n.fa-l::before {\n  content: \"\\4c\"; }\n\n.fa-landmark::before {\n  content: \"\\f66f\"; }\n\n.fa-language::before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop::before {\n  content: \"\\f109\"; }\n\n.fa-laptop-code::before {\n  content: \"\\f5fc\"; }\n\n.fa-laptop-medical::before {\n  content: \"\\f812\"; }\n\n.fa-lari-sign::before {\n  content: \"\\e1c8\"; }\n\n.fa-layer-group::before {\n  content: \"\\f5fd\"; }\n\n.fa-leaf::before {\n  content: \"\\f06c\"; }\n\n.fa-left-long::before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-left::before {\n  content: \"\\f30a\"; }\n\n.fa-left-right::before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-h::before {\n  content: \"\\f337\"; }\n\n.fa-lemon::before {\n  content: \"\\f094\"; }\n\n.fa-less-than::before {\n  content: \"\\3c\"; }\n\n.fa-less-than-equal::before {\n  content: \"\\f537\"; }\n\n.fa-life-ring::before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb::before {\n  content: \"\\f0eb\"; }\n\n.fa-link::before {\n  content: \"\\f0c1\"; }\n\n.fa-chain::before {\n  content: \"\\f0c1\"; }\n\n.fa-link-slash::before {\n  content: \"\\f127\"; }\n\n.fa-chain-broken::before {\n  content: \"\\f127\"; }\n\n.fa-chain-slash::before {\n  content: \"\\f127\"; }\n\n.fa-unlink::before {\n  content: \"\\f127\"; }\n\n.fa-lira-sign::before {\n  content: \"\\f195\"; }\n\n.fa-list::before {\n  content: \"\\f03a\"; }\n\n.fa-list-squares::before {\n  content: \"\\f03a\"; }\n\n.fa-list-check::before {\n  content: \"\\f0ae\"; }\n\n.fa-tasks::before {\n  content: \"\\f0ae\"; }\n\n.fa-list-ol::before {\n  content: \"\\f0cb\"; }\n\n.fa-list-1-2::before {\n  content: \"\\f0cb\"; }\n\n.fa-list-numeric::before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul::before {\n  content: \"\\f0ca\"; }\n\n.fa-list-dots::before {\n  content: \"\\f0ca\"; }\n\n.fa-litecoin-sign::before {\n  content: \"\\e1d3\"; }\n\n.fa-location-arrow::before {\n  content: \"\\f124\"; }\n\n.fa-location-crosshairs::before {\n  content: \"\\f601\"; }\n\n.fa-location::before {\n  content: \"\\f601\"; }\n\n.fa-location-dot::before {\n  content: \"\\f3c5\"; }\n\n.fa-map-marker-alt::before {\n  content: \"\\f3c5\"; }\n\n.fa-location-pin::before {\n  content: \"\\f041\"; }\n\n.fa-map-marker::before {\n  content: \"\\f041\"; }\n\n.fa-lock::before {\n  content: \"\\f023\"; }\n\n.fa-lock-open::before {\n  content: \"\\f3c1\"; }\n\n.fa-lungs::before {\n  content: \"\\f604\"; }\n\n.fa-lungs-virus::before {\n  content: \"\\e067\"; }\n\n.fa-m::before {\n  content: \"\\4d\"; }\n\n.fa-magnet::before {\n  content: \"\\f076\"; }\n\n.fa-magnifying-glass::before {\n  content: \"\\f002\"; }\n\n.fa-search::before {\n  content: \"\\f002\"; }\n\n.fa-magnifying-glass-dollar::before {\n  content: \"\\f688\"; }\n\n.fa-search-dollar::before {\n  content: \"\\f688\"; }\n\n.fa-magnifying-glass-location::before {\n  content: \"\\f689\"; }\n\n.fa-search-location::before {\n  content: \"\\f689\"; }\n\n.fa-magnifying-glass-minus::before {\n  content: \"\\f010\"; }\n\n.fa-search-minus::before {\n  content: \"\\f010\"; }\n\n.fa-magnifying-glass-plus::before {\n  content: \"\\f00e\"; }\n\n.fa-search-plus::before {\n  content: \"\\f00e\"; }\n\n.fa-manat-sign::before {\n  content: \"\\e1d5\"; }\n\n.fa-map::before {\n  content: \"\\f279\"; }\n\n.fa-map-location::before {\n  content: \"\\f59f\"; }\n\n.fa-map-marked::before {\n  content: \"\\f59f\"; }\n\n.fa-map-location-dot::before {\n  content: \"\\f5a0\"; }\n\n.fa-map-marked-alt::before {\n  content: \"\\f5a0\"; }\n\n.fa-map-pin::before {\n  content: \"\\f276\"; }\n\n.fa-marker::before {\n  content: \"\\f5a1\"; }\n\n.fa-mars::before {\n  content: \"\\f222\"; }\n\n.fa-mars-and-venus::before {\n  content: \"\\f224\"; }\n\n.fa-mars-double::before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke::before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-right::before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-h::before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-up::before {\n  content: \"\\f22a\"; }\n\n.fa-mars-stroke-v::before {\n  content: \"\\f22a\"; }\n\n.fa-martini-glass::before {\n  content: \"\\f57b\"; }\n\n.fa-glass-martini-alt::before {\n  content: \"\\f57b\"; }\n\n.fa-martini-glass-citrus::before {\n  content: \"\\f561\"; }\n\n.fa-cocktail::before {\n  content: \"\\f561\"; }\n\n.fa-martini-glass-empty::before {\n  content: \"\\f000\"; }\n\n.fa-glass-martini::before {\n  content: \"\\f000\"; }\n\n.fa-mask::before {\n  content: \"\\f6fa\"; }\n\n.fa-mask-face::before {\n  content: \"\\e1d7\"; }\n\n.fa-masks-theater::before {\n  content: \"\\f630\"; }\n\n.fa-theater-masks::before {\n  content: \"\\f630\"; }\n\n.fa-maximize::before {\n  content: \"\\f31e\"; }\n\n.fa-expand-arrows-alt::before {\n  content: \"\\f31e\"; }\n\n.fa-medal::before {\n  content: \"\\f5a2\"; }\n\n.fa-memory::before {\n  content: \"\\f538\"; }\n\n.fa-menorah::before {\n  content: \"\\f676\"; }\n\n.fa-mercury::before {\n  content: \"\\f223\"; }\n\n.fa-message::before {\n  content: \"\\f27a\"; }\n\n.fa-comment-alt::before {\n  content: \"\\f27a\"; }\n\n.fa-meteor::before {\n  content: \"\\f753\"; }\n\n.fa-microchip::before {\n  content: \"\\f2db\"; }\n\n.fa-microphone::before {\n  content: \"\\f130\"; }\n\n.fa-microphone-lines::before {\n  content: \"\\f3c9\"; }\n\n.fa-microphone-alt::before {\n  content: \"\\f3c9\"; }\n\n.fa-microphone-lines-slash::before {\n  content: \"\\f539\"; }\n\n.fa-microphone-alt-slash::before {\n  content: \"\\f539\"; }\n\n.fa-microphone-slash::before {\n  content: \"\\f131\"; }\n\n.fa-microscope::before {\n  content: \"\\f610\"; }\n\n.fa-mill-sign::before {\n  content: \"\\e1ed\"; }\n\n.fa-minimize::before {\n  content: \"\\f78c\"; }\n\n.fa-compress-arrows-alt::before {\n  content: \"\\f78c\"; }\n\n.fa-minus::before {\n  content: \"\\f068\"; }\n\n.fa-subtract::before {\n  content: \"\\f068\"; }\n\n.fa-mitten::before {\n  content: \"\\f7b5\"; }\n\n.fa-mobile::before {\n  content: \"\\f3ce\"; }\n\n.fa-mobile-android::before {\n  content: \"\\f3ce\"; }\n\n.fa-mobile-phone::before {\n  content: \"\\f3ce\"; }\n\n.fa-mobile-button::before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-screen-button::before {\n  content: \"\\f3cd\"; }\n\n.fa-mobile-alt::before {\n  content: \"\\f3cd\"; }\n\n.fa-money-bill::before {\n  content: \"\\f0d6\"; }\n\n.fa-money-bill-1::before {\n  content: \"\\f3d1\"; }\n\n.fa-money-bill-alt::before {\n  content: \"\\f3d1\"; }\n\n.fa-money-bill-1-wave::before {\n  content: \"\\f53b\"; }\n\n.fa-money-bill-wave-alt::before {\n  content: \"\\f53b\"; }\n\n.fa-money-bill-wave::before {\n  content: \"\\f53a\"; }\n\n.fa-money-check::before {\n  content: \"\\f53c\"; }\n\n.fa-money-check-dollar::before {\n  content: \"\\f53d\"; }\n\n.fa-money-check-alt::before {\n  content: \"\\f53d\"; }\n\n.fa-monument::before {\n  content: \"\\f5a6\"; }\n\n.fa-moon::before {\n  content: \"\\f186\"; }\n\n.fa-mortar-pestle::before {\n  content: \"\\f5a7\"; }\n\n.fa-mosque::before {\n  content: \"\\f678\"; }\n\n.fa-motorcycle::before {\n  content: \"\\f21c\"; }\n\n.fa-mountain::before {\n  content: \"\\f6fc\"; }\n\n.fa-mug-hot::before {\n  content: \"\\f7b6\"; }\n\n.fa-mug-saucer::before {\n  content: \"\\f0f4\"; }\n\n.fa-coffee::before {\n  content: \"\\f0f4\"; }\n\n.fa-music::before {\n  content: \"\\f001\"; }\n\n.fa-n::before {\n  content: \"\\4e\"; }\n\n.fa-naira-sign::before {\n  content: \"\\e1f6\"; }\n\n.fa-network-wired::before {\n  content: \"\\f6ff\"; }\n\n.fa-neuter::before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper::before {\n  content: \"\\f1ea\"; }\n\n.fa-not-equal::before {\n  content: \"\\f53e\"; }\n\n.fa-note-sticky::before {\n  content: \"\\f249\"; }\n\n.fa-sticky-note::before {\n  content: \"\\f249\"; }\n\n.fa-notes-medical::before {\n  content: \"\\f481\"; }\n\n.fa-o::before {\n  content: \"\\4f\"; }\n\n.fa-object-group::before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup::before {\n  content: \"\\f248\"; }\n\n.fa-oil-can::before {\n  content: \"\\f613\"; }\n\n.fa-om::before {\n  content: \"\\f679\"; }\n\n.fa-otter::before {\n  content: \"\\f700\"; }\n\n.fa-outdent::before {\n  content: \"\\f03b\"; }\n\n.fa-dedent::before {\n  content: \"\\f03b\"; }\n\n.fa-p::before {\n  content: \"\\50\"; }\n\n.fa-pager::before {\n  content: \"\\f815\"; }\n\n.fa-paint-roller::before {\n  content: \"\\f5aa\"; }\n\n.fa-paintbrush::before {\n  content: \"\\f1fc\"; }\n\n.fa-paint-brush::before {\n  content: \"\\f1fc\"; }\n\n.fa-palette::before {\n  content: \"\\f53f\"; }\n\n.fa-pallet::before {\n  content: \"\\f482\"; }\n\n.fa-panorama::before {\n  content: \"\\e209\"; }\n\n.fa-paper-plane::before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip::before {\n  content: \"\\f0c6\"; }\n\n.fa-parachute-box::before {\n  content: \"\\f4cd\"; }\n\n.fa-paragraph::before {\n  content: \"\\f1dd\"; }\n\n.fa-passport::before {\n  content: \"\\f5ab\"; }\n\n.fa-paste::before {\n  content: \"\\f0ea\"; }\n\n.fa-file-clipboard::before {\n  content: \"\\f0ea\"; }\n\n.fa-pause::before {\n  content: \"\\f04c\"; }\n\n.fa-paw::before {\n  content: \"\\f1b0\"; }\n\n.fa-peace::before {\n  content: \"\\f67c\"; }\n\n.fa-pen::before {\n  content: \"\\f304\"; }\n\n.fa-pen-clip::before {\n  content: \"\\f305\"; }\n\n.fa-pen-alt::before {\n  content: \"\\f305\"; }\n\n.fa-pen-fancy::before {\n  content: \"\\f5ac\"; }\n\n.fa-pen-nib::before {\n  content: \"\\f5ad\"; }\n\n.fa-pen-ruler::before {\n  content: \"\\f5ae\"; }\n\n.fa-pencil-ruler::before {\n  content: \"\\f5ae\"; }\n\n.fa-pen-to-square::before {\n  content: \"\\f044\"; }\n\n.fa-edit::before {\n  content: \"\\f044\"; }\n\n.fa-pencil::before {\n  content: \"\\f303\"; }\n\n.fa-pencil-alt::before {\n  content: \"\\f303\"; }\n\n.fa-people-arrows-left-right::before {\n  content: \"\\e068\"; }\n\n.fa-people-arrows::before {\n  content: \"\\e068\"; }\n\n.fa-people-carry-box::before {\n  content: \"\\f4ce\"; }\n\n.fa-people-carry::before {\n  content: \"\\f4ce\"; }\n\n.fa-pepper-hot::before {\n  content: \"\\f816\"; }\n\n.fa-percent::before {\n  content: \"\\25\"; }\n\n.fa-percentage::before {\n  content: \"\\25\"; }\n\n.fa-person::before {\n  content: \"\\f183\"; }\n\n.fa-male::before {\n  content: \"\\f183\"; }\n\n.fa-person-biking::before {\n  content: \"\\f84a\"; }\n\n.fa-biking::before {\n  content: \"\\f84a\"; }\n\n.fa-person-booth::before {\n  content: \"\\f756\"; }\n\n.fa-person-dots-from-line::before {\n  content: \"\\f470\"; }\n\n.fa-diagnoses::before {\n  content: \"\\f470\"; }\n\n.fa-person-dress::before {\n  content: \"\\f182\"; }\n\n.fa-female::before {\n  content: \"\\f182\"; }\n\n.fa-person-hiking::before {\n  content: \"\\f6ec\"; }\n\n.fa-hiking::before {\n  content: \"\\f6ec\"; }\n\n.fa-person-praying::before {\n  content: \"\\f683\"; }\n\n.fa-pray::before {\n  content: \"\\f683\"; }\n\n.fa-person-running::before {\n  content: \"\\f70c\"; }\n\n.fa-running::before {\n  content: \"\\f70c\"; }\n\n.fa-person-skating::before {\n  content: \"\\f7c5\"; }\n\n.fa-skating::before {\n  content: \"\\f7c5\"; }\n\n.fa-person-skiing::before {\n  content: \"\\f7c9\"; }\n\n.fa-skiing::before {\n  content: \"\\f7c9\"; }\n\n.fa-person-skiing-nordic::before {\n  content: \"\\f7ca\"; }\n\n.fa-skiing-nordic::before {\n  content: \"\\f7ca\"; }\n\n.fa-person-snowboarding::before {\n  content: \"\\f7ce\"; }\n\n.fa-snowboarding::before {\n  content: \"\\f7ce\"; }\n\n.fa-person-swimming::before {\n  content: \"\\f5c4\"; }\n\n.fa-swimmer::before {\n  content: \"\\f5c4\"; }\n\n.fa-person-walking::before {\n  content: \"\\f554\"; }\n\n.fa-walking::before {\n  content: \"\\f554\"; }\n\n.fa-person-walking-with-cane::before {\n  content: \"\\f29d\"; }\n\n.fa-blind::before {\n  content: \"\\f29d\"; }\n\n.fa-peseta-sign::before {\n  content: \"\\e221\"; }\n\n.fa-peso-sign::before {\n  content: \"\\e222\"; }\n\n.fa-phone::before {\n  content: \"\\f095\"; }\n\n.fa-phone-flip::before {\n  content: \"\\f879\"; }\n\n.fa-phone-alt::before {\n  content: \"\\f879\"; }\n\n.fa-phone-slash::before {\n  content: \"\\f3dd\"; }\n\n.fa-phone-volume::before {\n  content: \"\\f2a0\"; }\n\n.fa-volume-control-phone::before {\n  content: \"\\f2a0\"; }\n\n.fa-photo-film::before {\n  content: \"\\f87c\"; }\n\n.fa-photo-video::before {\n  content: \"\\f87c\"; }\n\n.fa-piggy-bank::before {\n  content: \"\\f4d3\"; }\n\n.fa-pills::before {\n  content: \"\\f484\"; }\n\n.fa-pizza-slice::before {\n  content: \"\\f818\"; }\n\n.fa-place-of-worship::before {\n  content: \"\\f67f\"; }\n\n.fa-plane::before {\n  content: \"\\f072\"; }\n\n.fa-plane-arrival::before {\n  content: \"\\f5af\"; }\n\n.fa-plane-departure::before {\n  content: \"\\f5b0\"; }\n\n.fa-plane-slash::before {\n  content: \"\\e069\"; }\n\n.fa-play::before {\n  content: \"\\f04b\"; }\n\n.fa-plug::before {\n  content: \"\\f1e6\"; }\n\n.fa-plus::before {\n  content: \"\\2b\"; }\n\n.fa-add::before {\n  content: \"\\2b\"; }\n\n.fa-plus-minus::before {\n  content: \"\\e43c\"; }\n\n.fa-podcast::before {\n  content: \"\\f2ce\"; }\n\n.fa-poo::before {\n  content: \"\\f2fe\"; }\n\n.fa-poo-storm::before {\n  content: \"\\f75a\"; }\n\n.fa-poo-bolt::before {\n  content: \"\\f75a\"; }\n\n.fa-poop::before {\n  content: \"\\f619\"; }\n\n.fa-power-off::before {\n  content: \"\\f011\"; }\n\n.fa-prescription::before {\n  content: \"\\f5b1\"; }\n\n.fa-prescription-bottle::before {\n  content: \"\\f485\"; }\n\n.fa-prescription-bottle-medical::before {\n  content: \"\\f486\"; }\n\n.fa-prescription-bottle-alt::before {\n  content: \"\\f486\"; }\n\n.fa-print::before {\n  content: \"\\f02f\"; }\n\n.fa-pump-medical::before {\n  content: \"\\e06a\"; }\n\n.fa-pump-soap::before {\n  content: \"\\e06b\"; }\n\n.fa-puzzle-piece::before {\n  content: \"\\f12e\"; }\n\n.fa-q::before {\n  content: \"\\51\"; }\n\n.fa-qrcode::before {\n  content: \"\\f029\"; }\n\n.fa-question::before {\n  content: \"\\3f\"; }\n\n.fa-quote-left::before {\n  content: \"\\f10d\"; }\n\n.fa-quote-left-alt::before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right::before {\n  content: \"\\f10e\"; }\n\n.fa-quote-right-alt::before {\n  content: \"\\f10e\"; }\n\n.fa-r::before {\n  content: \"\\52\"; }\n\n.fa-radiation::before {\n  content: \"\\f7b9\"; }\n\n.fa-rainbow::before {\n  content: \"\\f75b\"; }\n\n.fa-receipt::before {\n  content: \"\\f543\"; }\n\n.fa-record-vinyl::before {\n  content: \"\\f8d9\"; }\n\n.fa-rectangle-ad::before {\n  content: \"\\f641\"; }\n\n.fa-ad::before {\n  content: \"\\f641\"; }\n\n.fa-rectangle-list::before {\n  content: \"\\f022\"; }\n\n.fa-list-alt::before {\n  content: \"\\f022\"; }\n\n.fa-rectangle-xmark::before {\n  content: \"\\f410\"; }\n\n.fa-rectangle-times::before {\n  content: \"\\f410\"; }\n\n.fa-times-rectangle::before {\n  content: \"\\f410\"; }\n\n.fa-window-close::before {\n  content: \"\\f410\"; }\n\n.fa-recycle::before {\n  content: \"\\f1b8\"; }\n\n.fa-registered::before {\n  content: \"\\f25d\"; }\n\n.fa-repeat::before {\n  content: \"\\f363\"; }\n\n.fa-reply::before {\n  content: \"\\f3e5\"; }\n\n.fa-mail-reply::before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all::before {\n  content: \"\\f122\"; }\n\n.fa-mail-reply-all::before {\n  content: \"\\f122\"; }\n\n.fa-republican::before {\n  content: \"\\f75e\"; }\n\n.fa-restroom::before {\n  content: \"\\f7bd\"; }\n\n.fa-retweet::before {\n  content: \"\\f079\"; }\n\n.fa-ribbon::before {\n  content: \"\\f4d6\"; }\n\n.fa-right-from-bracket::before {\n  content: \"\\f2f5\"; }\n\n.fa-sign-out-alt::before {\n  content: \"\\f2f5\"; }\n\n.fa-right-left::before {\n  content: \"\\f362\"; }\n\n.fa-exchange-alt::before {\n  content: \"\\f362\"; }\n\n.fa-right-long::before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-right::before {\n  content: \"\\f30b\"; }\n\n.fa-right-to-bracket::before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-in-alt::before {\n  content: \"\\f2f6\"; }\n\n.fa-ring::before {\n  content: \"\\f70b\"; }\n\n.fa-road::before {\n  content: \"\\f018\"; }\n\n.fa-robot::before {\n  content: \"\\f544\"; }\n\n.fa-rocket::before {\n  content: \"\\f135\"; }\n\n.fa-rotate::before {\n  content: \"\\f2f1\"; }\n\n.fa-sync-alt::before {\n  content: \"\\f2f1\"; }\n\n.fa-rotate-left::before {\n  content: \"\\f2ea\"; }\n\n.fa-rotate-back::before {\n  content: \"\\f2ea\"; }\n\n.fa-rotate-backward::before {\n  content: \"\\f2ea\"; }\n\n.fa-undo-alt::before {\n  content: \"\\f2ea\"; }\n\n.fa-rotate-right::before {\n  content: \"\\f2f9\"; }\n\n.fa-redo-alt::before {\n  content: \"\\f2f9\"; }\n\n.fa-rotate-forward::before {\n  content: \"\\f2f9\"; }\n\n.fa-route::before {\n  content: \"\\f4d7\"; }\n\n.fa-rss::before {\n  content: \"\\f09e\"; }\n\n.fa-feed::before {\n  content: \"\\f09e\"; }\n\n.fa-ruble-sign::before {\n  content: \"\\f158\"; }\n\n.fa-rouble::before {\n  content: \"\\f158\"; }\n\n.fa-rub::before {\n  content: \"\\f158\"; }\n\n.fa-ruble::before {\n  content: \"\\f158\"; }\n\n.fa-ruler::before {\n  content: \"\\f545\"; }\n\n.fa-ruler-combined::before {\n  content: \"\\f546\"; }\n\n.fa-ruler-horizontal::before {\n  content: \"\\f547\"; }\n\n.fa-ruler-vertical::before {\n  content: \"\\f548\"; }\n\n.fa-rupee-sign::before {\n  content: \"\\f156\"; }\n\n.fa-rupee::before {\n  content: \"\\f156\"; }\n\n.fa-rupiah-sign::before {\n  content: \"\\e23d\"; }\n\n.fa-s::before {\n  content: \"\\53\"; }\n\n.fa-sailboat::before {\n  content: \"\\e445\"; }\n\n.fa-satellite::before {\n  content: \"\\f7bf\"; }\n\n.fa-satellite-dish::before {\n  content: \"\\f7c0\"; }\n\n.fa-scale-balanced::before {\n  content: \"\\f24e\"; }\n\n.fa-balance-scale::before {\n  content: \"\\f24e\"; }\n\n.fa-scale-unbalanced::before {\n  content: \"\\f515\"; }\n\n.fa-balance-scale-left::before {\n  content: \"\\f515\"; }\n\n.fa-scale-unbalanced-flip::before {\n  content: \"\\f516\"; }\n\n.fa-balance-scale-right::before {\n  content: \"\\f516\"; }\n\n.fa-school::before {\n  content: \"\\f549\"; }\n\n.fa-scissors::before {\n  content: \"\\f0c4\"; }\n\n.fa-cut::before {\n  content: \"\\f0c4\"; }\n\n.fa-screwdriver::before {\n  content: \"\\f54a\"; }\n\n.fa-screwdriver-wrench::before {\n  content: \"\\f7d9\"; }\n\n.fa-tools::before {\n  content: \"\\f7d9\"; }\n\n.fa-scroll::before {\n  content: \"\\f70e\"; }\n\n.fa-scroll-torah::before {\n  content: \"\\f6a0\"; }\n\n.fa-torah::before {\n  content: \"\\f6a0\"; }\n\n.fa-sd-card::before {\n  content: \"\\f7c2\"; }\n\n.fa-section::before {\n  content: \"\\e447\"; }\n\n.fa-seedling::before {\n  content: \"\\f4d8\"; }\n\n.fa-sprout::before {\n  content: \"\\f4d8\"; }\n\n.fa-server::before {\n  content: \"\\f233\"; }\n\n.fa-shapes::before {\n  content: \"\\f61f\"; }\n\n.fa-triangle-circle-square::before {\n  content: \"\\f61f\"; }\n\n.fa-share::before {\n  content: \"\\f064\"; }\n\n.fa-arrow-turn-right::before {\n  content: \"\\f064\"; }\n\n.fa-mail-forward::before {\n  content: \"\\f064\"; }\n\n.fa-share-from-square::before {\n  content: \"\\f14d\"; }\n\n.fa-share-square::before {\n  content: \"\\f14d\"; }\n\n.fa-share-nodes::before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt::before {\n  content: \"\\f1e0\"; }\n\n.fa-shekel-sign::before {\n  content: \"\\f20b\"; }\n\n.fa-ils::before {\n  content: \"\\f20b\"; }\n\n.fa-shekel::before {\n  content: \"\\f20b\"; }\n\n.fa-sheqel::before {\n  content: \"\\f20b\"; }\n\n.fa-sheqel-sign::before {\n  content: \"\\f20b\"; }\n\n.fa-shield::before {\n  content: \"\\f132\"; }\n\n.fa-shield-blank::before {\n  content: \"\\f3ed\"; }\n\n.fa-shield-alt::before {\n  content: \"\\f3ed\"; }\n\n.fa-shield-virus::before {\n  content: \"\\e06c\"; }\n\n.fa-ship::before {\n  content: \"\\f21a\"; }\n\n.fa-shirt::before {\n  content: \"\\f553\"; }\n\n.fa-t-shirt::before {\n  content: \"\\f553\"; }\n\n.fa-tshirt::before {\n  content: \"\\f553\"; }\n\n.fa-shoe-prints::before {\n  content: \"\\f54b\"; }\n\n.fa-shop::before {\n  content: \"\\f54f\"; }\n\n.fa-store-alt::before {\n  content: \"\\f54f\"; }\n\n.fa-shop-slash::before {\n  content: \"\\e070\"; }\n\n.fa-store-alt-slash::before {\n  content: \"\\e070\"; }\n\n.fa-shower::before {\n  content: \"\\f2cc\"; }\n\n.fa-shrimp::before {\n  content: \"\\e448\"; }\n\n.fa-shuffle::before {\n  content: \"\\f074\"; }\n\n.fa-random::before {\n  content: \"\\f074\"; }\n\n.fa-shuttle-space::before {\n  content: \"\\f197\"; }\n\n.fa-space-shuttle::before {\n  content: \"\\f197\"; }\n\n.fa-sign-hanging::before {\n  content: \"\\f4d9\"; }\n\n.fa-sign::before {\n  content: \"\\f4d9\"; }\n\n.fa-signal::before {\n  content: \"\\f012\"; }\n\n.fa-signal-5::before {\n  content: \"\\f012\"; }\n\n.fa-signal-perfect::before {\n  content: \"\\f012\"; }\n\n.fa-signature::before {\n  content: \"\\f5b7\"; }\n\n.fa-signs-post::before {\n  content: \"\\f277\"; }\n\n.fa-map-signs::before {\n  content: \"\\f277\"; }\n\n.fa-sim-card::before {\n  content: \"\\f7c4\"; }\n\n.fa-sink::before {\n  content: \"\\e06d\"; }\n\n.fa-sitemap::before {\n  content: \"\\f0e8\"; }\n\n.fa-skull::before {\n  content: \"\\f54c\"; }\n\n.fa-skull-crossbones::before {\n  content: \"\\f714\"; }\n\n.fa-slash::before {\n  content: \"\\f715\"; }\n\n.fa-sleigh::before {\n  content: \"\\f7cc\"; }\n\n.fa-sliders::before {\n  content: \"\\f1de\"; }\n\n.fa-sliders-h::before {\n  content: \"\\f1de\"; }\n\n.fa-smog::before {\n  content: \"\\f75f\"; }\n\n.fa-smoking::before {\n  content: \"\\f48d\"; }\n\n.fa-snowflake::before {\n  content: \"\\f2dc\"; }\n\n.fa-snowman::before {\n  content: \"\\f7d0\"; }\n\n.fa-snowplow::before {\n  content: \"\\f7d2\"; }\n\n.fa-soap::before {\n  content: \"\\e06e\"; }\n\n.fa-socks::before {\n  content: \"\\f696\"; }\n\n.fa-solar-panel::before {\n  content: \"\\f5ba\"; }\n\n.fa-sort::before {\n  content: \"\\f0dc\"; }\n\n.fa-unsorted::before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-down::before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-desc::before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-up::before {\n  content: \"\\f0de\"; }\n\n.fa-sort-asc::before {\n  content: \"\\f0de\"; }\n\n.fa-spa::before {\n  content: \"\\f5bb\"; }\n\n.fa-spaghetti-monster-flying::before {\n  content: \"\\f67b\"; }\n\n.fa-pastafarianism::before {\n  content: \"\\f67b\"; }\n\n.fa-spell-check::before {\n  content: \"\\f891\"; }\n\n.fa-spider::before {\n  content: \"\\f717\"; }\n\n.fa-spinner::before {\n  content: \"\\f110\"; }\n\n.fa-splotch::before {\n  content: \"\\f5bc\"; }\n\n.fa-spoon::before {\n  content: \"\\f2e5\"; }\n\n.fa-utensil-spoon::before {\n  content: \"\\f2e5\"; }\n\n.fa-spray-can::before {\n  content: \"\\f5bd\"; }\n\n.fa-spray-can-sparkles::before {\n  content: \"\\f5d0\"; }\n\n.fa-air-freshener::before {\n  content: \"\\f5d0\"; }\n\n.fa-square::before {\n  content: \"\\f0c8\"; }\n\n.fa-square-arrow-up-right::before {\n  content: \"\\f14c\"; }\n\n.fa-external-link-square::before {\n  content: \"\\f14c\"; }\n\n.fa-square-caret-down::before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-down::before {\n  content: \"\\f150\"; }\n\n.fa-square-caret-left::before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-left::before {\n  content: \"\\f191\"; }\n\n.fa-square-caret-right::before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-right::before {\n  content: \"\\f152\"; }\n\n.fa-square-caret-up::before {\n  content: \"\\f151\"; }\n\n.fa-caret-square-up::before {\n  content: \"\\f151\"; }\n\n.fa-square-check::before {\n  content: \"\\f14a\"; }\n\n.fa-check-square::before {\n  content: \"\\f14a\"; }\n\n.fa-square-envelope::before {\n  content: \"\\f199\"; }\n\n.fa-envelope-square::before {\n  content: \"\\f199\"; }\n\n.fa-square-full::before {\n  content: \"\\f45c\"; }\n\n.fa-square-h::before {\n  content: \"\\f0fd\"; }\n\n.fa-h-square::before {\n  content: \"\\f0fd\"; }\n\n.fa-square-minus::before {\n  content: \"\\f146\"; }\n\n.fa-minus-square::before {\n  content: \"\\f146\"; }\n\n.fa-square-parking::before {\n  content: \"\\f540\"; }\n\n.fa-parking::before {\n  content: \"\\f540\"; }\n\n.fa-square-pen::before {\n  content: \"\\f14b\"; }\n\n.fa-pen-square::before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-square::before {\n  content: \"\\f14b\"; }\n\n.fa-square-phone::before {\n  content: \"\\f098\"; }\n\n.fa-phone-square::before {\n  content: \"\\f098\"; }\n\n.fa-square-phone-flip::before {\n  content: \"\\f87b\"; }\n\n.fa-phone-square-alt::before {\n  content: \"\\f87b\"; }\n\n.fa-square-plus::before {\n  content: \"\\f0fe\"; }\n\n.fa-plus-square::before {\n  content: \"\\f0fe\"; }\n\n.fa-square-poll-horizontal::before {\n  content: \"\\f682\"; }\n\n.fa-poll-h::before {\n  content: \"\\f682\"; }\n\n.fa-square-poll-vertical::before {\n  content: \"\\f681\"; }\n\n.fa-poll::before {\n  content: \"\\f681\"; }\n\n.fa-square-root-variable::before {\n  content: \"\\f698\"; }\n\n.fa-square-root-alt::before {\n  content: \"\\f698\"; }\n\n.fa-square-rss::before {\n  content: \"\\f143\"; }\n\n.fa-rss-square::before {\n  content: \"\\f143\"; }\n\n.fa-square-share-nodes::before {\n  content: \"\\f1e1\"; }\n\n.fa-share-alt-square::before {\n  content: \"\\f1e1\"; }\n\n.fa-square-up-right::before {\n  content: \"\\f360\"; }\n\n.fa-external-link-square-alt::before {\n  content: \"\\f360\"; }\n\n.fa-square-xmark::before {\n  content: \"\\f2d3\"; }\n\n.fa-times-square::before {\n  content: \"\\f2d3\"; }\n\n.fa-xmark-square::before {\n  content: \"\\f2d3\"; }\n\n.fa-stairs::before {\n  content: \"\\e289\"; }\n\n.fa-stamp::before {\n  content: \"\\f5bf\"; }\n\n.fa-star::before {\n  content: \"\\f005\"; }\n\n.fa-star-and-crescent::before {\n  content: \"\\f699\"; }\n\n.fa-star-half::before {\n  content: \"\\f089\"; }\n\n.fa-star-half-stroke::before {\n  content: \"\\f5c0\"; }\n\n.fa-star-half-alt::before {\n  content: \"\\f5c0\"; }\n\n.fa-star-of-david::before {\n  content: \"\\f69a\"; }\n\n.fa-star-of-life::before {\n  content: \"\\f621\"; }\n\n.fa-sterling-sign::before {\n  content: \"\\f154\"; }\n\n.fa-gbp::before {\n  content: \"\\f154\"; }\n\n.fa-pound-sign::before {\n  content: \"\\f154\"; }\n\n.fa-stethoscope::before {\n  content: \"\\f0f1\"; }\n\n.fa-stop::before {\n  content: \"\\f04d\"; }\n\n.fa-stopwatch::before {\n  content: \"\\f2f2\"; }\n\n.fa-stopwatch-20::before {\n  content: \"\\e06f\"; }\n\n.fa-store::before {\n  content: \"\\f54e\"; }\n\n.fa-store-slash::before {\n  content: \"\\e071\"; }\n\n.fa-street-view::before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough::before {\n  content: \"\\f0cc\"; }\n\n.fa-stroopwafel::before {\n  content: \"\\f551\"; }\n\n.fa-subscript::before {\n  content: \"\\f12c\"; }\n\n.fa-suitcase::before {\n  content: \"\\f0f2\"; }\n\n.fa-suitcase-medical::before {\n  content: \"\\f0fa\"; }\n\n.fa-medkit::before {\n  content: \"\\f0fa\"; }\n\n.fa-suitcase-rolling::before {\n  content: \"\\f5c1\"; }\n\n.fa-sun::before {\n  content: \"\\f185\"; }\n\n.fa-superscript::before {\n  content: \"\\f12b\"; }\n\n.fa-swatchbook::before {\n  content: \"\\f5c3\"; }\n\n.fa-synagogue::before {\n  content: \"\\f69b\"; }\n\n.fa-syringe::before {\n  content: \"\\f48e\"; }\n\n.fa-t::before {\n  content: \"\\54\"; }\n\n.fa-table::before {\n  content: \"\\f0ce\"; }\n\n.fa-table-cells::before {\n  content: \"\\f00a\"; }\n\n.fa-th::before {\n  content: \"\\f00a\"; }\n\n.fa-table-cells-large::before {\n  content: \"\\f009\"; }\n\n.fa-th-large::before {\n  content: \"\\f009\"; }\n\n.fa-table-columns::before {\n  content: \"\\f0db\"; }\n\n.fa-columns::before {\n  content: \"\\f0db\"; }\n\n.fa-table-list::before {\n  content: \"\\f00b\"; }\n\n.fa-th-list::before {\n  content: \"\\f00b\"; }\n\n.fa-table-tennis-paddle-ball::before {\n  content: \"\\f45d\"; }\n\n.fa-ping-pong-paddle-ball::before {\n  content: \"\\f45d\"; }\n\n.fa-table-tennis::before {\n  content: \"\\f45d\"; }\n\n.fa-tablet::before {\n  content: \"\\f3fb\"; }\n\n.fa-tablet-android::before {\n  content: \"\\f3fb\"; }\n\n.fa-tablet-button::before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-screen-button::before {\n  content: \"\\f3fa\"; }\n\n.fa-tablet-alt::before {\n  content: \"\\f3fa\"; }\n\n.fa-tablets::before {\n  content: \"\\f490\"; }\n\n.fa-tachograph-digital::before {\n  content: \"\\f566\"; }\n\n.fa-digital-tachograph::before {\n  content: \"\\f566\"; }\n\n.fa-tag::before {\n  content: \"\\f02b\"; }\n\n.fa-tags::before {\n  content: \"\\f02c\"; }\n\n.fa-tape::before {\n  content: \"\\f4db\"; }\n\n.fa-taxi::before {\n  content: \"\\f1ba\"; }\n\n.fa-cab::before {\n  content: \"\\f1ba\"; }\n\n.fa-teeth::before {\n  content: \"\\f62e\"; }\n\n.fa-teeth-open::before {\n  content: \"\\f62f\"; }\n\n.fa-temperature-empty::before {\n  content: \"\\f2cb\"; }\n\n.fa-temperature-0::before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-0::before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-empty::before {\n  content: \"\\f2cb\"; }\n\n.fa-temperature-full::before {\n  content: \"\\f2c7\"; }\n\n.fa-temperature-4::before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-4::before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-full::before {\n  content: \"\\f2c7\"; }\n\n.fa-temperature-half::before {\n  content: \"\\f2c9\"; }\n\n.fa-temperature-2::before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-2::before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-half::before {\n  content: \"\\f2c9\"; }\n\n.fa-temperature-high::before {\n  content: \"\\f769\"; }\n\n.fa-temperature-low::before {\n  content: \"\\f76b\"; }\n\n.fa-temperature-quarter::before {\n  content: \"\\f2ca\"; }\n\n.fa-temperature-1::before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-1::before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-quarter::before {\n  content: \"\\f2ca\"; }\n\n.fa-temperature-three-quarters::before {\n  content: \"\\f2c8\"; }\n\n.fa-temperature-3::before {\n  content: \"\\f2c8\"; }\n\n.fa-thermometer-3::before {\n  content: \"\\f2c8\"; }\n\n.fa-thermometer-three-quarters::before {\n  content: \"\\f2c8\"; }\n\n.fa-tenge-sign::before {\n  content: \"\\f7d7\"; }\n\n.fa-tenge::before {\n  content: \"\\f7d7\"; }\n\n.fa-terminal::before {\n  content: \"\\f120\"; }\n\n.fa-text-height::before {\n  content: \"\\f034\"; }\n\n.fa-text-slash::before {\n  content: \"\\f87d\"; }\n\n.fa-remove-format::before {\n  content: \"\\f87d\"; }\n\n.fa-text-width::before {\n  content: \"\\f035\"; }\n\n.fa-thermometer::before {\n  content: \"\\f491\"; }\n\n.fa-thumbs-down::before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up::before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack::before {\n  content: \"\\f08d\"; }\n\n.fa-thumb-tack::before {\n  content: \"\\f08d\"; }\n\n.fa-ticket::before {\n  content: \"\\f145\"; }\n\n.fa-ticket-simple::before {\n  content: \"\\f3ff\"; }\n\n.fa-ticket-alt::before {\n  content: \"\\f3ff\"; }\n\n.fa-timeline::before {\n  content: \"\\e29c\"; }\n\n.fa-toggle-off::before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on::before {\n  content: \"\\f205\"; }\n\n.fa-toilet::before {\n  content: \"\\f7d8\"; }\n\n.fa-toilet-paper::before {\n  content: \"\\f71e\"; }\n\n.fa-toilet-paper-slash::before {\n  content: \"\\e072\"; }\n\n.fa-toolbox::before {\n  content: \"\\f552\"; }\n\n.fa-tooth::before {\n  content: \"\\f5c9\"; }\n\n.fa-torii-gate::before {\n  content: \"\\f6a1\"; }\n\n.fa-tower-broadcast::before {\n  content: \"\\f519\"; }\n\n.fa-broadcast-tower::before {\n  content: \"\\f519\"; }\n\n.fa-tractor::before {\n  content: \"\\f722\"; }\n\n.fa-trademark::before {\n  content: \"\\f25c\"; }\n\n.fa-traffic-light::before {\n  content: \"\\f637\"; }\n\n.fa-trailer::before {\n  content: \"\\e041\"; }\n\n.fa-train::before {\n  content: \"\\f238\"; }\n\n.fa-train-subway::before {\n  content: \"\\f239\"; }\n\n.fa-subway::before {\n  content: \"\\f239\"; }\n\n.fa-train-tram::before {\n  content: \"\\f7da\"; }\n\n.fa-tram::before {\n  content: \"\\f7da\"; }\n\n.fa-transgender::before {\n  content: \"\\f225\"; }\n\n.fa-transgender-alt::before {\n  content: \"\\f225\"; }\n\n.fa-trash::before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-arrow-up::before {\n  content: \"\\f829\"; }\n\n.fa-trash-restore::before {\n  content: \"\\f829\"; }\n\n.fa-trash-can::before {\n  content: \"\\f2ed\"; }\n\n.fa-trash-alt::before {\n  content: \"\\f2ed\"; }\n\n.fa-trash-can-arrow-up::before {\n  content: \"\\f82a\"; }\n\n.fa-trash-restore-alt::before {\n  content: \"\\f82a\"; }\n\n.fa-tree::before {\n  content: \"\\f1bb\"; }\n\n.fa-triangle-exclamation::before {\n  content: \"\\f071\"; }\n\n.fa-exclamation-triangle::before {\n  content: \"\\f071\"; }\n\n.fa-warning::before {\n  content: \"\\f071\"; }\n\n.fa-trophy::before {\n  content: \"\\f091\"; }\n\n.fa-truck::before {\n  content: \"\\f0d1\"; }\n\n.fa-truck-fast::before {\n  content: \"\\f48b\"; }\n\n.fa-shipping-fast::before {\n  content: \"\\f48b\"; }\n\n.fa-truck-medical::before {\n  content: \"\\f0f9\"; }\n\n.fa-ambulance::before {\n  content: \"\\f0f9\"; }\n\n.fa-truck-monster::before {\n  content: \"\\f63b\"; }\n\n.fa-truck-moving::before {\n  content: \"\\f4df\"; }\n\n.fa-truck-pickup::before {\n  content: \"\\f63c\"; }\n\n.fa-truck-ramp-box::before {\n  content: \"\\f4de\"; }\n\n.fa-truck-loading::before {\n  content: \"\\f4de\"; }\n\n.fa-tty::before {\n  content: \"\\f1e4\"; }\n\n.fa-teletype::before {\n  content: \"\\f1e4\"; }\n\n.fa-turkish-lira-sign::before {\n  content: \"\\e2bb\"; }\n\n.fa-try::before {\n  content: \"\\e2bb\"; }\n\n.fa-turkish-lira::before {\n  content: \"\\e2bb\"; }\n\n.fa-turn-down::before {\n  content: \"\\f3be\"; }\n\n.fa-level-down-alt::before {\n  content: \"\\f3be\"; }\n\n.fa-turn-up::before {\n  content: \"\\f3bf\"; }\n\n.fa-level-up-alt::before {\n  content: \"\\f3bf\"; }\n\n.fa-tv::before {\n  content: \"\\f26c\"; }\n\n.fa-television::before {\n  content: \"\\f26c\"; }\n\n.fa-tv-alt::before {\n  content: \"\\f26c\"; }\n\n.fa-u::before {\n  content: \"\\55\"; }\n\n.fa-umbrella::before {\n  content: \"\\f0e9\"; }\n\n.fa-umbrella-beach::before {\n  content: \"\\f5ca\"; }\n\n.fa-underline::before {\n  content: \"\\f0cd\"; }\n\n.fa-universal-access::before {\n  content: \"\\f29a\"; }\n\n.fa-unlock::before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-keyhole::before {\n  content: \"\\f13e\"; }\n\n.fa-unlock-alt::before {\n  content: \"\\f13e\"; }\n\n.fa-up-down::before {\n  content: \"\\f338\"; }\n\n.fa-arrows-alt-v::before {\n  content: \"\\f338\"; }\n\n.fa-up-down-left-right::before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt::before {\n  content: \"\\f0b2\"; }\n\n.fa-up-long::before {\n  content: \"\\f30c\"; }\n\n.fa-long-arrow-alt-up::before {\n  content: \"\\f30c\"; }\n\n.fa-up-right-and-down-left-from-center::before {\n  content: \"\\f424\"; }\n\n.fa-expand-alt::before {\n  content: \"\\f424\"; }\n\n.fa-up-right-from-square::before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-alt::before {\n  content: \"\\f35d\"; }\n\n.fa-upload::before {\n  content: \"\\f093\"; }\n\n.fa-user::before {\n  content: \"\\f007\"; }\n\n.fa-user-astronaut::before {\n  content: \"\\f4fb\"; }\n\n.fa-user-check::before {\n  content: \"\\f4fc\"; }\n\n.fa-user-clock::before {\n  content: \"\\f4fd\"; }\n\n.fa-user-doctor::before {\n  content: \"\\f0f0\"; }\n\n.fa-user-md::before {\n  content: \"\\f0f0\"; }\n\n.fa-user-gear::before {\n  content: \"\\f4fe\"; }\n\n.fa-user-cog::before {\n  content: \"\\f4fe\"; }\n\n.fa-user-graduate::before {\n  content: \"\\f501\"; }\n\n.fa-user-group::before {\n  content: \"\\f500\"; }\n\n.fa-user-friends::before {\n  content: \"\\f500\"; }\n\n.fa-user-injured::before {\n  content: \"\\f728\"; }\n\n.fa-user-large::before {\n  content: \"\\f406\"; }\n\n.fa-user-alt::before {\n  content: \"\\f406\"; }\n\n.fa-user-large-slash::before {\n  content: \"\\f4fa\"; }\n\n.fa-user-alt-slash::before {\n  content: \"\\f4fa\"; }\n\n.fa-user-lock::before {\n  content: \"\\f502\"; }\n\n.fa-user-minus::before {\n  content: \"\\f503\"; }\n\n.fa-user-ninja::before {\n  content: \"\\f504\"; }\n\n.fa-user-nurse::before {\n  content: \"\\f82f\"; }\n\n.fa-user-pen::before {\n  content: \"\\f4ff\"; }\n\n.fa-user-edit::before {\n  content: \"\\f4ff\"; }\n\n.fa-user-plus::before {\n  content: \"\\f234\"; }\n\n.fa-user-secret::before {\n  content: \"\\f21b\"; }\n\n.fa-user-shield::before {\n  content: \"\\f505\"; }\n\n.fa-user-slash::before {\n  content: \"\\f506\"; }\n\n.fa-user-tag::before {\n  content: \"\\f507\"; }\n\n.fa-user-tie::before {\n  content: \"\\f508\"; }\n\n.fa-user-xmark::before {\n  content: \"\\f235\"; }\n\n.fa-user-times::before {\n  content: \"\\f235\"; }\n\n.fa-users::before {\n  content: \"\\f0c0\"; }\n\n.fa-users-gear::before {\n  content: \"\\f509\"; }\n\n.fa-users-cog::before {\n  content: \"\\f509\"; }\n\n.fa-users-slash::before {\n  content: \"\\e073\"; }\n\n.fa-utensils::before {\n  content: \"\\f2e7\"; }\n\n.fa-cutlery::before {\n  content: \"\\f2e7\"; }\n\n.fa-v::before {\n  content: \"\\56\"; }\n\n.fa-van-shuttle::before {\n  content: \"\\f5b6\"; }\n\n.fa-shuttle-van::before {\n  content: \"\\f5b6\"; }\n\n.fa-vault::before {\n  content: \"\\e2c5\"; }\n\n.fa-vector-square::before {\n  content: \"\\f5cb\"; }\n\n.fa-venus::before {\n  content: \"\\f221\"; }\n\n.fa-venus-double::before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars::before {\n  content: \"\\f228\"; }\n\n.fa-vest::before {\n  content: \"\\e085\"; }\n\n.fa-vest-patches::before {\n  content: \"\\e086\"; }\n\n.fa-vial::before {\n  content: \"\\f492\"; }\n\n.fa-vials::before {\n  content: \"\\f493\"; }\n\n.fa-video::before {\n  content: \"\\f03d\"; }\n\n.fa-video-camera::before {\n  content: \"\\f03d\"; }\n\n.fa-video-slash::before {\n  content: \"\\f4e2\"; }\n\n.fa-vihara::before {\n  content: \"\\f6a7\"; }\n\n.fa-virus::before {\n  content: \"\\e074\"; }\n\n.fa-virus-covid::before {\n  content: \"\\e4a8\"; }\n\n.fa-virus-covid-slash::before {\n  content: \"\\e4a9\"; }\n\n.fa-virus-slash::before {\n  content: \"\\e075\"; }\n\n.fa-viruses::before {\n  content: \"\\e076\"; }\n\n.fa-voicemail::before {\n  content: \"\\f897\"; }\n\n.fa-volleyball::before {\n  content: \"\\f45f\"; }\n\n.fa-volleyball-ball::before {\n  content: \"\\f45f\"; }\n\n.fa-volume-high::before {\n  content: \"\\f028\"; }\n\n.fa-volume-up::before {\n  content: \"\\f028\"; }\n\n.fa-volume-low::before {\n  content: \"\\f027\"; }\n\n.fa-volume-down::before {\n  content: \"\\f027\"; }\n\n.fa-volume-off::before {\n  content: \"\\f026\"; }\n\n.fa-volume-xmark::before {\n  content: \"\\f6a9\"; }\n\n.fa-volume-mute::before {\n  content: \"\\f6a9\"; }\n\n.fa-volume-times::before {\n  content: \"\\f6a9\"; }\n\n.fa-vr-cardboard::before {\n  content: \"\\f729\"; }\n\n.fa-w::before {\n  content: \"\\57\"; }\n\n.fa-wallet::before {\n  content: \"\\f555\"; }\n\n.fa-wand-magic::before {\n  content: \"\\f0d0\"; }\n\n.fa-magic::before {\n  content: \"\\f0d0\"; }\n\n.fa-wand-magic-sparkles::before {\n  content: \"\\e2ca\"; }\n\n.fa-magic-wand-sparkles::before {\n  content: \"\\e2ca\"; }\n\n.fa-wand-sparkles::before {\n  content: \"\\f72b\"; }\n\n.fa-warehouse::before {\n  content: \"\\f494\"; }\n\n.fa-water::before {\n  content: \"\\f773\"; }\n\n.fa-water-ladder::before {\n  content: \"\\f5c5\"; }\n\n.fa-ladder-water::before {\n  content: \"\\f5c5\"; }\n\n.fa-swimming-pool::before {\n  content: \"\\f5c5\"; }\n\n.fa-wave-square::before {\n  content: \"\\f83e\"; }\n\n.fa-weight-hanging::before {\n  content: \"\\f5cd\"; }\n\n.fa-weight-scale::before {\n  content: \"\\f496\"; }\n\n.fa-weight::before {\n  content: \"\\f496\"; }\n\n.fa-wheelchair::before {\n  content: \"\\f193\"; }\n\n.fa-whiskey-glass::before {\n  content: \"\\f7a0\"; }\n\n.fa-glass-whiskey::before {\n  content: \"\\f7a0\"; }\n\n.fa-wifi::before {\n  content: \"\\f1eb\"; }\n\n.fa-wifi-3::before {\n  content: \"\\f1eb\"; }\n\n.fa-wifi-strong::before {\n  content: \"\\f1eb\"; }\n\n.fa-wind::before {\n  content: \"\\f72e\"; }\n\n.fa-window-maximize::before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize::before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore::before {\n  content: \"\\f2d2\"; }\n\n.fa-wine-bottle::before {\n  content: \"\\f72f\"; }\n\n.fa-wine-glass::before {\n  content: \"\\f4e3\"; }\n\n.fa-wine-glass-empty::before {\n  content: \"\\f5ce\"; }\n\n.fa-wine-glass-alt::before {\n  content: \"\\f5ce\"; }\n\n.fa-won-sign::before {\n  content: \"\\f159\"; }\n\n.fa-krw::before {\n  content: \"\\f159\"; }\n\n.fa-won::before {\n  content: \"\\f159\"; }\n\n.fa-wrench::before {\n  content: \"\\f0ad\"; }\n\n.fa-x::before {\n  content: \"\\58\"; }\n\n.fa-x-ray::before {\n  content: \"\\f497\"; }\n\n.fa-xmark::before {\n  content: \"\\f00d\"; }\n\n.fa-close::before {\n  content: \"\\f00d\"; }\n\n.fa-multiply::before {\n  content: \"\\f00d\"; }\n\n.fa-remove::before {\n  content: \"\\f00d\"; }\n\n.fa-times::before {\n  content: \"\\f00d\"; }\n\n.fa-y::before {\n  content: \"\\59\"; }\n\n.fa-yen-sign::before {\n  content: \"\\f157\"; }\n\n.fa-cny::before {\n  content: \"\\f157\"; }\n\n.fa-jpy::before {\n  content: \"\\f157\"; }\n\n.fa-rmb::before {\n  content: \"\\f157\"; }\n\n.fa-yen::before {\n  content: \"\\f157\"; }\n\n.fa-yin-yang::before {\n  content: \"\\f6ad\"; }\n\n.fa-z::before {\n  content: \"\\5a\"; }\n\n.sr-only,\n.fa-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0; }\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0; }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/regular.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n:root, :host {\n  --fa-font-regular: normal 400 1em/1 \"Font Awesome 6 Free\"; }\n\n@font-face {\n  font-family: 'Font Awesome 6 Free';\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"); }\n\n.far,\n.fa-regular {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/solid.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n:root, :host {\n  --fa-font-solid: normal 900 1em/1 \"Font Awesome 6 Free\"; }\n\n@font-face {\n  font-family: 'Font Awesome 6 Free';\n  font-style: normal;\n  font-weight: 900;\n  font-display: block;\n  src: url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"); }\n\n.fas,\n.fa-solid {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/svg-with-js.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n:root, :host {\n  --fa-font-solid: normal 900 1em/1 \"Font Awesome 6 Solid\";\n  --fa-font-regular: normal 400 1em/1 \"Font Awesome 6 Regular\";\n  --fa-font-light: normal 300 1em/1 \"Font Awesome 6 Light\";\n  --fa-font-thin: normal 100 1em/1 \"Font Awesome 6 Thin\";\n  --fa-font-duotone: normal 900 1em/1 \"Font Awesome 6 Duotone\";\n  --fa-font-brands: normal 400 1em/1 \"Font Awesome 6 Brands\"; }\n\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\n  overflow: visible;\n  box-sizing: content-box; }\n\n.svg-inline--fa {\n  display: var(--fa-display, inline-block);\n  height: 1em;\n  overflow: visible;\n  vertical-align: -.125em; }\n  .svg-inline--fa.fa-2xs {\n    vertical-align: 0.1em; }\n  .svg-inline--fa.fa-xs {\n    vertical-align: 0em; }\n  .svg-inline--fa.fa-sm {\n    vertical-align: -0.07143em; }\n  .svg-inline--fa.fa-lg {\n    vertical-align: -0.2em; }\n  .svg-inline--fa.fa-xl {\n    vertical-align: -0.25em; }\n  .svg-inline--fa.fa-2xl {\n    vertical-align: -0.3125em; }\n  .svg-inline--fa.fa-pull-left {\n    margin-right: var(--fa-pull-margin, 0.3em);\n    width: auto; }\n  .svg-inline--fa.fa-pull-right {\n    margin-left: var(--fa-pull-margin, 0.3em);\n    width: auto; }\n  .svg-inline--fa.fa-li {\n    width: var(--fa-li-width, 2em);\n    top: 0.25em; }\n  .svg-inline--fa.fa-fw {\n    width: var(--fa-fw-width, 1.25em); }\n\n.fa-layers svg.svg-inline--fa {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0; }\n\n.fa-layers-text, .fa-layers-counter {\n  display: inline-block;\n  position: absolute;\n  text-align: center; }\n\n.fa-layers {\n  display: inline-block;\n  height: 1em;\n  position: relative;\n  text-align: center;\n  vertical-align: -.125em;\n  width: 1em; }\n  .fa-layers svg.svg-inline--fa {\n    -webkit-transform-origin: center center;\n            transform-origin: center center; }\n\n.fa-layers-text {\n  left: 50%;\n  top: 50%;\n  -webkit-transform: translate(-50%, -50%);\n          transform: translate(-50%, -50%);\n  -webkit-transform-origin: center center;\n          transform-origin: center center; }\n\n.fa-layers-counter {\n  background-color: var(--fa-counter-background-color, #ff253a);\n  border-radius: var(--fa-counter-border-radius, 1em);\n  box-sizing: border-box;\n  color: var(--fa-inverse, #fff);\n  line-height: var(--fa-counter-line-height, 1);\n  max-width: var(--fa-counter-max-width, 5em);\n  min-width: var(--fa-counter-min-width, 1.5em);\n  overflow: hidden;\n  padding: var(--fa-counter-padding, 0.25em 0.5em);\n  right: var(--fa-right, 0);\n  text-overflow: ellipsis;\n  top: var(--fa-top, 0);\n  -webkit-transform: scale(var(--fa-counter-scale, 0.25));\n          transform: scale(var(--fa-counter-scale, 0.25));\n  -webkit-transform-origin: top right;\n          transform-origin: top right; }\n\n.fa-layers-bottom-right {\n  bottom: var(--fa-bottom, 0);\n  right: var(--fa-right, 0);\n  top: auto;\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n          transform: scale(var(--fa-layers-scale, 0.25));\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right; }\n\n.fa-layers-bottom-left {\n  bottom: var(--fa-bottom, 0);\n  left: var(--fa-left, 0);\n  right: auto;\n  top: auto;\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n          transform: scale(var(--fa-layers-scale, 0.25));\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left; }\n\n.fa-layers-top-right {\n  top: var(--fa-top, 0);\n  right: var(--fa-right, 0);\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n          transform: scale(var(--fa-layers-scale, 0.25));\n  -webkit-transform-origin: top right;\n          transform-origin: top right; }\n\n.fa-layers-top-left {\n  left: var(--fa-left, 0);\n  right: auto;\n  top: var(--fa-top, 0);\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n          transform: scale(var(--fa-layers-scale, 0.25));\n  -webkit-transform-origin: top left;\n          transform-origin: top left; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-2xs {\n  font-size: 0.625em;\n  line-height: 0.1em;\n  vertical-align: 0.225em; }\n\n.fa-xs {\n  font-size: 0.75em;\n  line-height: 0.08333em;\n  vertical-align: 0.125em; }\n\n.fa-sm {\n  font-size: 0.875em;\n  line-height: 0.07143em;\n  vertical-align: 0.05357em; }\n\n.fa-lg {\n  font-size: 1.25em;\n  line-height: 0.05em;\n  vertical-align: -0.075em; }\n\n.fa-xl {\n  font-size: 1.5em;\n  line-height: 0.04167em;\n  vertical-align: -0.125em; }\n\n.fa-2xl {\n  font-size: 2em;\n  line-height: 0.03125em;\n  vertical-align: -0.1875em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: var(--fa-li-margin, 2.5em);\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: calc(var(--fa-li-width, 2em) * -1);\n  position: absolute;\n  text-align: center;\n  width: var(--fa-li-width, 2em);\n  line-height: inherit; }\n\n.fa-border {\n  border-color: var(--fa-border-color, #eee);\n  border-radius: var(--fa-border-radius, 0.1em);\n  border-style: var(--fa-border-style, solid);\n  border-width: var(--fa-border-width, 0.08em);\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }\n\n.fa-pull-left {\n  float: left;\n  margin-right: var(--fa-pull-margin, 0.3em); }\n\n.fa-pull-right {\n  float: right;\n  margin-left: var(--fa-pull-margin, 0.3em); }\n\n.fa-beat {\n  -webkit-animation-name: fa-beat;\n          animation-name: fa-beat;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n          animation-timing-function: var(--fa-animation-timing, ease-in-out); }\n\n.fa-bounce {\n  -webkit-animation-name: fa-bounce;\n          animation-name: fa-bounce;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }\n\n.fa-fade {\n  -webkit-animation-name: fa-fade;\n          animation-name: fa-fade;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }\n\n.fa-beat-fade {\n  -webkit-animation-name: fa-beat-fade;\n          animation-name: fa-beat-fade;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }\n\n.fa-flip {\n  -webkit-animation-name: fa-flip;\n          animation-name: fa-flip;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n          animation-timing-function: var(--fa-animation-timing, ease-in-out); }\n\n.fa-shake {\n  -webkit-animation-name: fa-shake;\n          animation-name: fa-shake;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n          animation-timing-function: var(--fa-animation-timing, linear); }\n\n.fa-spin {\n  -webkit-animation-name: fa-spin;\n          animation-name: fa-spin;\n  -webkit-animation-delay: var(--fa-animation-delay, 0);\n          animation-delay: var(--fa-animation-delay, 0);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 2s);\n          animation-duration: var(--fa-animation-duration, 2s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n          animation-timing-function: var(--fa-animation-timing, linear); }\n\n.fa-spin-reverse {\n  --fa-animation-direction: reverse; }\n\n.fa-pulse,\n.fa-spin-pulse {\n  -webkit-animation-name: fa-spin;\n          animation-name: fa-spin;\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n          animation-timing-function: var(--fa-animation-timing, steps(8)); }\n\n@media (prefers-reduced-motion: reduce) {\n  .fa-beat,\n  .fa-bounce,\n  .fa-fade,\n  .fa-beat-fade,\n  .fa-flip,\n  .fa-pulse,\n  .fa-shake,\n  .fa-spin,\n  .fa-spin-pulse {\n    -webkit-animation-delay: -1ms;\n            animation-delay: -1ms;\n    -webkit-animation-duration: 1ms;\n            animation-duration: 1ms;\n    -webkit-animation-iteration-count: 1;\n            animation-iteration-count: 1;\n    transition-delay: 0s;\n    transition-duration: 0s; } }\n\n@-webkit-keyframes fa-beat {\n  0%, 90% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n            transform: scale(var(--fa-beat-scale, 1.25)); } }\n\n@keyframes fa-beat {\n  0%, 90% {\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n            transform: scale(var(--fa-beat-scale, 1.25)); } }\n\n@-webkit-keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }\n  57% {\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }\n  64% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  100% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); } }\n\n@keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }\n  57% {\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }\n  64% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); }\n  100% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0); } }\n\n@-webkit-keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4); } }\n\n@keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4); } }\n\n@-webkit-keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }\n\n@keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }\n\n@-webkit-keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }\n\n@keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }\n\n@-webkit-keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n            transform: rotate(-15deg); }\n  4% {\n    -webkit-transform: rotate(15deg);\n            transform: rotate(15deg); }\n  8%, 24% {\n    -webkit-transform: rotate(-18deg);\n            transform: rotate(-18deg); }\n  12%, 28% {\n    -webkit-transform: rotate(18deg);\n            transform: rotate(18deg); }\n  16% {\n    -webkit-transform: rotate(-22deg);\n            transform: rotate(-22deg); }\n  20% {\n    -webkit-transform: rotate(22deg);\n            transform: rotate(22deg); }\n  32% {\n    -webkit-transform: rotate(-12deg);\n            transform: rotate(-12deg); }\n  36% {\n    -webkit-transform: rotate(12deg);\n            transform: rotate(12deg); }\n  40%, 100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); } }\n\n@keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n            transform: rotate(-15deg); }\n  4% {\n    -webkit-transform: rotate(15deg);\n            transform: rotate(15deg); }\n  8%, 24% {\n    -webkit-transform: rotate(-18deg);\n            transform: rotate(-18deg); }\n  12%, 28% {\n    -webkit-transform: rotate(18deg);\n            transform: rotate(18deg); }\n  16% {\n    -webkit-transform: rotate(-22deg);\n            transform: rotate(-22deg); }\n  20% {\n    -webkit-transform: rotate(22deg);\n            transform: rotate(22deg); }\n  32% {\n    -webkit-transform: rotate(-12deg);\n            transform: rotate(-12deg); }\n  36% {\n    -webkit-transform: rotate(12deg);\n            transform: rotate(12deg); }\n  40%, 100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); } }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n.fa-rotate-by {\n  -webkit-transform: rotate(var(--fa-rotate-angle, none));\n          transform: rotate(var(--fa-rotate-angle, none)); }\n\n.fa-stack {\n  display: inline-block;\n  vertical-align: middle;\n  height: 2em;\n  position: relative;\n  width: 2.5em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: var(--fa-stack-z-index, auto); }\n\n.svg-inline--fa.fa-stack-1x {\n  height: 1em;\n  width: 1.25em; }\n\n.svg-inline--fa.fa-stack-2x {\n  height: 2em;\n  width: 2.5em; }\n\n.fa-inverse {\n  color: var(--fa-inverse, #fff); }\n\n.sr-only,\n.fa-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0; }\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0; }\n\n.svg-inline--fa .fa-primary {\n  fill: var(--fa-primary-color, currentColor);\n  opacity: var(--fa-primary-opacity, 1); }\n\n.svg-inline--fa .fa-secondary {\n  fill: var(--fa-secondary-color, currentColor);\n  opacity: var(--fa-secondary-opacity, 0.4); }\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n  opacity: var(--fa-secondary-opacity, 0.4); }\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n  opacity: var(--fa-primary-opacity, 1); }\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n  fill: black; }\n\n.fad.fa-inverse,\n.fa-duotone.fa-inverse {\n  color: var(--fa-inverse, #fff); }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/v4-font-face.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\");\n  unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(\"../webfonts/fa-v4compatibility.woff2\") format(\"woff2\"), url(\"../webfonts/fa-v4compatibility.ttf\") format(\"truetype\");\n  unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F250,U+F252,U+F27A; }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/v4-shims.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n.fa.fa-glass:before {\n  content: \"\\f000\"; }\n\n.fa.fa-envelope-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-envelope-o:before {\n  content: \"\\f0e0\"; }\n\n.fa.fa-star-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-star-o:before {\n  content: \"\\f005\"; }\n\n.fa.fa-remove:before {\n  content: \"\\f00d\"; }\n\n.fa.fa-close:before {\n  content: \"\\f00d\"; }\n\n.fa.fa-gear:before {\n  content: \"\\f013\"; }\n\n.fa.fa-trash-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-trash-o:before {\n  content: \"\\f2ed\"; }\n\n.fa.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa.fa-file-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-o:before {\n  content: \"\\f15b\"; }\n\n.fa.fa-clock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-clock-o:before {\n  content: \"\\f017\"; }\n\n.fa.fa-arrow-circle-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-arrow-circle-o-down:before {\n  content: \"\\f358\"; }\n\n.fa.fa-arrow-circle-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-arrow-circle-o-up:before {\n  content: \"\\f35b\"; }\n\n.fa.fa-play-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-play-circle-o:before {\n  content: \"\\f144\"; }\n\n.fa.fa-repeat:before {\n  content: \"\\f01e\"; }\n\n.fa.fa-rotate-right:before {\n  content: \"\\f01e\"; }\n\n.fa.fa-refresh:before {\n  content: \"\\f021\"; }\n\n.fa.fa-list-alt {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa.fa-dedent:before {\n  content: \"\\f03b\"; }\n\n.fa.fa-video-camera:before {\n  content: \"\\f03d\"; }\n\n.fa.fa-picture-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-picture-o:before {\n  content: \"\\f03e\"; }\n\n.fa.fa-photo {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-photo:before {\n  content: \"\\f03e\"; }\n\n.fa.fa-image {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa.fa-map-marker:before {\n  content: \"\\f3c5\"; }\n\n.fa.fa-pencil-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-pencil-square-o:before {\n  content: \"\\f044\"; }\n\n.fa.fa-edit {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa.fa-share-square-o:before {\n  content: \"\\f14d\"; }\n\n.fa.fa-check-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-check-square-o:before {\n  content: \"\\f14a\"; }\n\n.fa.fa-arrows:before {\n  content: \"\\f0b2\"; }\n\n.fa.fa-times-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-times-circle-o:before {\n  content: \"\\f057\"; }\n\n.fa.fa-check-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-check-circle-o:before {\n  content: \"\\f058\"; }\n\n.fa.fa-mail-forward:before {\n  content: \"\\f064\"; }\n\n.fa.fa-expand:before {\n  content: \"\\f424\"; }\n\n.fa.fa-compress:before {\n  content: \"\\f422\"; }\n\n.fa.fa-eye {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-eye-slash {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-warning:before {\n  content: \"\\f071\"; }\n\n.fa.fa-calendar:before {\n  content: \"\\f073\"; }\n\n.fa.fa-arrows-v:before {\n  content: \"\\f338\"; }\n\n.fa.fa-arrows-h:before {\n  content: \"\\f337\"; }\n\n.fa.fa-bar-chart:before {\n  content: \"\\e0e3\"; }\n\n.fa.fa-bar-chart-o:before {\n  content: \"\\e0e3\"; }\n\n.fa.fa-twitter-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-facebook-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-gears:before {\n  content: \"\\f085\"; }\n\n.fa.fa-thumbs-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-thumbs-o-up:before {\n  content: \"\\f164\"; }\n\n.fa.fa-thumbs-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-thumbs-o-down:before {\n  content: \"\\f165\"; }\n\n.fa.fa-heart-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-heart-o:before {\n  content: \"\\f004\"; }\n\n.fa.fa-sign-out:before {\n  content: \"\\f2f5\"; }\n\n.fa.fa-linkedin-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-linkedin-square:before {\n  content: \"\\f08c\"; }\n\n.fa.fa-thumb-tack:before {\n  content: \"\\f08d\"; }\n\n.fa.fa-external-link:before {\n  content: \"\\f35d\"; }\n\n.fa.fa-sign-in:before {\n  content: \"\\f2f6\"; }\n\n.fa.fa-github-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-lemon-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-lemon-o:before {\n  content: \"\\f094\"; }\n\n.fa.fa-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-square-o:before {\n  content: \"\\f0c8\"; }\n\n.fa.fa-bookmark-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-bookmark-o:before {\n  content: \"\\f02e\"; }\n\n.fa.fa-twitter {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-facebook {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-facebook:before {\n  content: \"\\f39e\"; }\n\n.fa.fa-facebook-f {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa.fa-github {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-credit-card {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-feed:before {\n  content: \"\\f09e\"; }\n\n.fa.fa-hdd-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hdd-o:before {\n  content: \"\\f0a0\"; }\n\n.fa.fa-hand-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-o-right:before {\n  content: \"\\f0a4\"; }\n\n.fa.fa-hand-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-o-left:before {\n  content: \"\\f0a5\"; }\n\n.fa.fa-hand-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-o-up:before {\n  content: \"\\f0a6\"; }\n\n.fa.fa-hand-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-o-down:before {\n  content: \"\\f0a7\"; }\n\n.fa.fa-globe:before {\n  content: \"\\f57d\"; }\n\n.fa.fa-tasks:before {\n  content: \"\\f828\"; }\n\n.fa.fa-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa.fa-group:before {\n  content: \"\\f0c0\"; }\n\n.fa.fa-chain:before {\n  content: \"\\f0c1\"; }\n\n.fa.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa.fa-files-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-files-o:before {\n  content: \"\\f0c5\"; }\n\n.fa.fa-floppy-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-floppy-o:before {\n  content: \"\\f0c7\"; }\n\n.fa.fa-save {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa.fa-navicon:before {\n  content: \"\\f0c9\"; }\n\n.fa.fa-reorder:before {\n  content: \"\\f0c9\"; }\n\n.fa.fa-magic:before {\n  content: \"\\e2ca\"; }\n\n.fa.fa-pinterest {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-pinterest-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-google-plus-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-google-plus {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-google-plus:before {\n  content: \"\\f0d5\"; }\n\n.fa.fa-money:before {\n  content: \"\\f3d1\"; }\n\n.fa.fa-unsorted:before {\n  content: \"\\f0dc\"; }\n\n.fa.fa-sort-desc:before {\n  content: \"\\f0dd\"; }\n\n.fa.fa-sort-asc:before {\n  content: \"\\f0de\"; }\n\n.fa.fa-linkedin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-linkedin:before {\n  content: \"\\f0e1\"; }\n\n.fa.fa-rotate-left:before {\n  content: \"\\f0e2\"; }\n\n.fa.fa-legal:before {\n  content: \"\\f0e3\"; }\n\n.fa.fa-tachometer:before {\n  content: \"\\f625\"; }\n\n.fa.fa-dashboard:before {\n  content: \"\\f625\"; }\n\n.fa.fa-comment-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-comment-o:before {\n  content: \"\\f075\"; }\n\n.fa.fa-comments-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-comments-o:before {\n  content: \"\\f086\"; }\n\n.fa.fa-flash:before {\n  content: \"\\f0e7\"; }\n\n.fa.fa-clipboard:before {\n  content: \"\\f0ea\"; }\n\n.fa.fa-lightbulb-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-lightbulb-o:before {\n  content: \"\\f0eb\"; }\n\n.fa.fa-exchange:before {\n  content: \"\\f362\"; }\n\n.fa.fa-cloud-download:before {\n  content: \"\\f0ed\"; }\n\n.fa.fa-cloud-upload:before {\n  content: \"\\f0ee\"; }\n\n.fa.fa-bell-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-bell-o:before {\n  content: \"\\f0f3\"; }\n\n.fa.fa-cutlery:before {\n  content: \"\\f2e7\"; }\n\n.fa.fa-file-text-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-text-o:before {\n  content: \"\\f15c\"; }\n\n.fa.fa-building-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-building-o:before {\n  content: \"\\f1ad\"; }\n\n.fa.fa-hospital-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hospital-o:before {\n  content: \"\\f0f8\"; }\n\n.fa.fa-tablet:before {\n  content: \"\\f3fa\"; }\n\n.fa.fa-mobile:before {\n  content: \"\\f3cd\"; }\n\n.fa.fa-mobile-phone:before {\n  content: \"\\f3cd\"; }\n\n.fa.fa-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-circle-o:before {\n  content: \"\\f111\"; }\n\n.fa.fa-mail-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa.fa-github-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-folder-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-folder-o:before {\n  content: \"\\f07b\"; }\n\n.fa.fa-folder-open-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-folder-open-o:before {\n  content: \"\\f07c\"; }\n\n.fa.fa-smile-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-smile-o:before {\n  content: \"\\f118\"; }\n\n.fa.fa-frown-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-frown-o:before {\n  content: \"\\f119\"; }\n\n.fa.fa-meh-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-meh-o:before {\n  content: \"\\f11a\"; }\n\n.fa.fa-keyboard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-keyboard-o:before {\n  content: \"\\f11c\"; }\n\n.fa.fa-flag-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-flag-o:before {\n  content: \"\\f024\"; }\n\n.fa.fa-mail-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa.fa-star-half-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-star-half-o:before {\n  content: \"\\f5c0\"; }\n\n.fa.fa-star-half-empty {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-star-half-empty:before {\n  content: \"\\f5c0\"; }\n\n.fa.fa-star-half-full {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-star-half-full:before {\n  content: \"\\f5c0\"; }\n\n.fa.fa-code-fork:before {\n  content: \"\\f126\"; }\n\n.fa.fa-chain-broken:before {\n  content: \"\\f127\"; }\n\n.fa.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa.fa-calendar-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-calendar-o:before {\n  content: \"\\f133\"; }\n\n.fa.fa-maxcdn {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-html5 {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-css3 {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-unlock-alt:before {\n  content: \"\\f09c\"; }\n\n.fa.fa-minus-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-minus-square-o:before {\n  content: \"\\f146\"; }\n\n.fa.fa-level-up:before {\n  content: \"\\f3bf\"; }\n\n.fa.fa-level-down:before {\n  content: \"\\f3be\"; }\n\n.fa.fa-pencil-square:before {\n  content: \"\\f14b\"; }\n\n.fa.fa-external-link-square:before {\n  content: \"\\f360\"; }\n\n.fa.fa-compass {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-caret-square-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-caret-square-o-down:before {\n  content: \"\\f150\"; }\n\n.fa.fa-toggle-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-toggle-down:before {\n  content: \"\\f150\"; }\n\n.fa.fa-caret-square-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-caret-square-o-up:before {\n  content: \"\\f151\"; }\n\n.fa.fa-toggle-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-toggle-up:before {\n  content: \"\\f151\"; }\n\n.fa.fa-caret-square-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-caret-square-o-right:before {\n  content: \"\\f152\"; }\n\n.fa.fa-toggle-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-toggle-right:before {\n  content: \"\\f152\"; }\n\n.fa.fa-eur:before {\n  content: \"\\f153\"; }\n\n.fa.fa-euro:before {\n  content: \"\\f153\"; }\n\n.fa.fa-gbp:before {\n  content: \"\\f154\"; }\n\n.fa.fa-usd:before {\n  content: \"\\24\"; }\n\n.fa.fa-dollar:before {\n  content: \"\\24\"; }\n\n.fa.fa-inr:before {\n  content: \"\\e1bc\"; }\n\n.fa.fa-rupee:before {\n  content: \"\\e1bc\"; }\n\n.fa.fa-jpy:before {\n  content: \"\\f157\"; }\n\n.fa.fa-cny:before {\n  content: \"\\f157\"; }\n\n.fa.fa-rmb:before {\n  content: \"\\f157\"; }\n\n.fa.fa-yen:before {\n  content: \"\\f157\"; }\n\n.fa.fa-rub:before {\n  content: \"\\f158\"; }\n\n.fa.fa-ruble:before {\n  content: \"\\f158\"; }\n\n.fa.fa-rouble:before {\n  content: \"\\f158\"; }\n\n.fa.fa-krw:before {\n  content: \"\\f159\"; }\n\n.fa.fa-won:before {\n  content: \"\\f159\"; }\n\n.fa.fa-btc {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-bitcoin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-bitcoin:before {\n  content: \"\\f15a\"; }\n\n.fa.fa-file-text:before {\n  content: \"\\f15c\"; }\n\n.fa.fa-sort-alpha-asc:before {\n  content: \"\\f15d\"; }\n\n.fa.fa-sort-alpha-desc:before {\n  content: \"\\f881\"; }\n\n.fa.fa-sort-amount-asc:before {\n  content: \"\\f884\"; }\n\n.fa.fa-sort-amount-desc:before {\n  content: \"\\f160\"; }\n\n.fa.fa-sort-numeric-asc:before {\n  content: \"\\f162\"; }\n\n.fa.fa-sort-numeric-desc:before {\n  content: \"\\f886\"; }\n\n.fa.fa-youtube-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-youtube {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-xing {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-xing-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-youtube-play {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-youtube-play:before {\n  content: \"\\f167\"; }\n\n.fa.fa-dropbox {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-stack-overflow {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-instagram {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-flickr {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-adn {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-bitbucket {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-bitbucket-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-bitbucket-square:before {\n  content: \"\\f171\"; }\n\n.fa.fa-tumblr {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-tumblr-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-long-arrow-down:before {\n  content: \"\\f309\"; }\n\n.fa.fa-long-arrow-up:before {\n  content: \"\\f30c\"; }\n\n.fa.fa-long-arrow-left:before {\n  content: \"\\f30a\"; }\n\n.fa.fa-long-arrow-right:before {\n  content: \"\\f30b\"; }\n\n.fa.fa-apple {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-windows {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-android {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-linux {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-dribbble {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-skype {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-foursquare {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-trello {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-gratipay {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-gittip {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-gittip:before {\n  content: \"\\f184\"; }\n\n.fa.fa-sun-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-sun-o:before {\n  content: \"\\f185\"; }\n\n.fa.fa-moon-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-moon-o:before {\n  content: \"\\f186\"; }\n\n.fa.fa-vk {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-weibo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-renren {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-pagelines {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-stack-exchange {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-arrow-circle-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-arrow-circle-o-right:before {\n  content: \"\\f35a\"; }\n\n.fa.fa-arrow-circle-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-arrow-circle-o-left:before {\n  content: \"\\f359\"; }\n\n.fa.fa-caret-square-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-caret-square-o-left:before {\n  content: \"\\f191\"; }\n\n.fa.fa-toggle-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-toggle-left:before {\n  content: \"\\f191\"; }\n\n.fa.fa-dot-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-dot-circle-o:before {\n  content: \"\\f192\"; }\n\n.fa.fa-vimeo-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-try:before {\n  content: \"\\e2bb\"; }\n\n.fa.fa-turkish-lira:before {\n  content: \"\\e2bb\"; }\n\n.fa.fa-plus-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-plus-square-o:before {\n  content: \"\\f0fe\"; }\n\n.fa.fa-slack {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wordpress {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-openid {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-institution:before {\n  content: \"\\f19c\"; }\n\n.fa.fa-bank:before {\n  content: \"\\f19c\"; }\n\n.fa.fa-mortar-board:before {\n  content: \"\\f19d\"; }\n\n.fa.fa-yahoo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-google {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-reddit {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-reddit-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-stumbleupon-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-stumbleupon {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-delicious {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-digg {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-pied-piper-pp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-pied-piper-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-drupal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-joomla {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-behance {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-behance-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-steam {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-steam-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-automobile:before {\n  content: \"\\f1b9\"; }\n\n.fa.fa-cab:before {\n  content: \"\\f1ba\"; }\n\n.fa.fa-spotify {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-deviantart {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-soundcloud {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-file-pdf-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-pdf-o:before {\n  content: \"\\f1c1\"; }\n\n.fa.fa-file-word-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-word-o:before {\n  content: \"\\f1c2\"; }\n\n.fa.fa-file-excel-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-excel-o:before {\n  content: \"\\f1c3\"; }\n\n.fa.fa-file-powerpoint-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\"; }\n\n.fa.fa-file-image-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-image-o:before {\n  content: \"\\f1c5\"; }\n\n.fa.fa-file-photo-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-photo-o:before {\n  content: \"\\f1c5\"; }\n\n.fa.fa-file-picture-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-picture-o:before {\n  content: \"\\f1c5\"; }\n\n.fa.fa-file-archive-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-archive-o:before {\n  content: \"\\f1c6\"; }\n\n.fa.fa-file-zip-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-zip-o:before {\n  content: \"\\f1c6\"; }\n\n.fa.fa-file-audio-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-audio-o:before {\n  content: \"\\f1c7\"; }\n\n.fa.fa-file-sound-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-sound-o:before {\n  content: \"\\f1c7\"; }\n\n.fa.fa-file-video-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-video-o:before {\n  content: \"\\f1c8\"; }\n\n.fa.fa-file-movie-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-movie-o:before {\n  content: \"\\f1c8\"; }\n\n.fa.fa-file-code-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-file-code-o:before {\n  content: \"\\f1c9\"; }\n\n.fa.fa-vine {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-codepen {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-jsfiddle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-life-bouy:before {\n  content: \"\\f1cd\"; }\n\n.fa.fa-life-buoy:before {\n  content: \"\\f1cd\"; }\n\n.fa.fa-life-saver:before {\n  content: \"\\f1cd\"; }\n\n.fa.fa-support:before {\n  content: \"\\f1cd\"; }\n\n.fa.fa-circle-o-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa.fa-rebel {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-ra {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-ra:before {\n  content: \"\\f1d0\"; }\n\n.fa.fa-resistance {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-resistance:before {\n  content: \"\\f1d0\"; }\n\n.fa.fa-empire {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-ge {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-ge:before {\n  content: \"\\f1d1\"; }\n\n.fa.fa-git-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-git {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-hacker-news {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-y-combinator-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-y-combinator-square:before {\n  content: \"\\f1d4\"; }\n\n.fa.fa-yc-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-yc-square:before {\n  content: \"\\f1d4\"; }\n\n.fa.fa-tencent-weibo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-qq {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-weixin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wechat {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wechat:before {\n  content: \"\\f1d7\"; }\n\n.fa.fa-send:before {\n  content: \"\\f1d8\"; }\n\n.fa.fa-paper-plane-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-paper-plane-o:before {\n  content: \"\\f1d8\"; }\n\n.fa.fa-send-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-send-o:before {\n  content: \"\\f1d8\"; }\n\n.fa.fa-circle-thin {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-circle-thin:before {\n  content: \"\\f111\"; }\n\n.fa.fa-header:before {\n  content: \"\\f1dc\"; }\n\n.fa.fa-futbol-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-futbol-o:before {\n  content: \"\\f1e3\"; }\n\n.fa.fa-soccer-ball-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-soccer-ball-o:before {\n  content: \"\\f1e3\"; }\n\n.fa.fa-slideshare {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-twitch {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-yelp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-newspaper-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-newspaper-o:before {\n  content: \"\\f1ea\"; }\n\n.fa.fa-paypal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-google-wallet {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-cc-visa {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-cc-mastercard {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-cc-discover {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-cc-amex {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-cc-paypal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-cc-stripe {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-bell-slash-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-bell-slash-o:before {\n  content: \"\\f1f6\"; }\n\n.fa.fa-trash:before {\n  content: \"\\f2ed\"; }\n\n.fa.fa-copyright {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-eyedropper:before {\n  content: \"\\f1fb\"; }\n\n.fa.fa-area-chart:before {\n  content: \"\\f1fe\"; }\n\n.fa.fa-pie-chart:before {\n  content: \"\\f200\"; }\n\n.fa.fa-line-chart:before {\n  content: \"\\f201\"; }\n\n.fa.fa-lastfm {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-lastfm-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-ioxhost {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-angellist {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-cc {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-cc:before {\n  content: \"\\f20a\"; }\n\n.fa.fa-ils:before {\n  content: \"\\f20b\"; }\n\n.fa.fa-shekel:before {\n  content: \"\\f20b\"; }\n\n.fa.fa-sheqel:before {\n  content: \"\\f20b\"; }\n\n.fa.fa-buysellads {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-connectdevelop {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-dashcube {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-forumbee {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-leanpub {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-sellsy {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-shirtsinbulk {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-simplybuilt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-skyatlas {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-diamond {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-diamond:before {\n  content: \"\\f3a5\"; }\n\n.fa.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa.fa-intersex:before {\n  content: \"\\f224\"; }\n\n.fa.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa.fa-facebook-official {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-facebook-official:before {\n  content: \"\\f09a\"; }\n\n.fa.fa-pinterest-p {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-whatsapp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-hotel:before {\n  content: \"\\f236\"; }\n\n.fa.fa-viacoin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-medium {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-y-combinator {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-yc {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-yc:before {\n  content: \"\\f23b\"; }\n\n.fa.fa-optin-monster {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-opencart {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-expeditedssl {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-battery-4:before {\n  content: \"\\f240\"; }\n\n.fa.fa-battery:before {\n  content: \"\\f240\"; }\n\n.fa.fa-battery-3:before {\n  content: \"\\f241\"; }\n\n.fa.fa-battery-2:before {\n  content: \"\\f242\"; }\n\n.fa.fa-battery-1:before {\n  content: \"\\f243\"; }\n\n.fa.fa-battery-0:before {\n  content: \"\\f244\"; }\n\n.fa.fa-object-group {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-object-ungroup {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-sticky-note-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-sticky-note-o:before {\n  content: \"\\f249\"; }\n\n.fa.fa-cc-jcb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-cc-diners-club {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-clone {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hourglass-o:before {\n  content: \"\\f252\"; }\n\n.fa.fa-hourglass-1:before {\n  content: \"\\f251\"; }\n\n.fa.fa-hourglass-half:before {\n  content: \"\\f254\"; }\n\n.fa.fa-hourglass-2:before {\n  content: \"\\f254\"; }\n\n.fa.fa-hourglass-3:before {\n  content: \"\\f253\"; }\n\n.fa.fa-hand-rock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-rock-o:before {\n  content: \"\\f255\"; }\n\n.fa.fa-hand-grab-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-grab-o:before {\n  content: \"\\f255\"; }\n\n.fa.fa-hand-paper-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-paper-o:before {\n  content: \"\\f256\"; }\n\n.fa.fa-hand-stop-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-stop-o:before {\n  content: \"\\f256\"; }\n\n.fa.fa-hand-scissors-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-scissors-o:before {\n  content: \"\\f257\"; }\n\n.fa.fa-hand-lizard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-lizard-o:before {\n  content: \"\\f258\"; }\n\n.fa.fa-hand-spock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-spock-o:before {\n  content: \"\\f259\"; }\n\n.fa.fa-hand-pointer-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-pointer-o:before {\n  content: \"\\f25a\"; }\n\n.fa.fa-hand-peace-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-hand-peace-o:before {\n  content: \"\\f25b\"; }\n\n.fa.fa-registered {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-creative-commons {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-gg {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-gg-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-odnoklassniki {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-odnoklassniki-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-get-pocket {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wikipedia-w {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-safari {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-chrome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-firefox {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-opera {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-internet-explorer {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-television:before {\n  content: \"\\f26c\"; }\n\n.fa.fa-contao {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-500px {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-amazon {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-calendar-plus-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-calendar-plus-o:before {\n  content: \"\\f271\"; }\n\n.fa.fa-calendar-minus-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-calendar-minus-o:before {\n  content: \"\\f272\"; }\n\n.fa.fa-calendar-times-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-calendar-times-o:before {\n  content: \"\\f273\"; }\n\n.fa.fa-calendar-check-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-calendar-check-o:before {\n  content: \"\\f274\"; }\n\n.fa.fa-map-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-map-o:before {\n  content: \"\\f279\"; }\n\n.fa.fa-commenting:before {\n  content: \"\\f4ad\"; }\n\n.fa.fa-commenting-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-commenting-o:before {\n  content: \"\\f4ad\"; }\n\n.fa.fa-houzz {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-vimeo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-vimeo:before {\n  content: \"\\f27d\"; }\n\n.fa.fa-black-tie {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-fonticons {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-reddit-alien {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-edge {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-credit-card-alt:before {\n  content: \"\\f09d\"; }\n\n.fa.fa-codiepie {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-modx {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-fort-awesome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-usb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-product-hunt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-mixcloud {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-scribd {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-pause-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-pause-circle-o:before {\n  content: \"\\f28b\"; }\n\n.fa.fa-stop-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-stop-circle-o:before {\n  content: \"\\f28d\"; }\n\n.fa.fa-bluetooth {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-bluetooth-b {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-gitlab {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wpbeginner {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wpforms {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-envira {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wheelchair-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wheelchair-alt:before {\n  content: \"\\f368\"; }\n\n.fa.fa-question-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-question-circle-o:before {\n  content: \"\\f059\"; }\n\n.fa.fa-volume-control-phone:before {\n  content: \"\\f2a0\"; }\n\n.fa.fa-asl-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa.fa-deafness:before {\n  content: \"\\f2a4\"; }\n\n.fa.fa-hard-of-hearing:before {\n  content: \"\\f2a4\"; }\n\n.fa.fa-glide {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-glide-g {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-signing:before {\n  content: \"\\f2a7\"; }\n\n.fa.fa-viadeo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-viadeo-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-snapchat {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-snapchat-ghost {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-snapchat-ghost:before {\n  content: \"\\f2ab\"; }\n\n.fa.fa-snapchat-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-pied-piper {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-first-order {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-yoast {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-themeisle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-google-plus-official {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-google-plus-official:before {\n  content: \"\\f2b3\"; }\n\n.fa.fa-google-plus-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-google-plus-circle:before {\n  content: \"\\f2b3\"; }\n\n.fa.fa-font-awesome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-fa {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-fa:before {\n  content: \"\\f2b4\"; }\n\n.fa.fa-handshake-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-handshake-o:before {\n  content: \"\\f2b5\"; }\n\n.fa.fa-envelope-open-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-envelope-open-o:before {\n  content: \"\\f2b6\"; }\n\n.fa.fa-linode {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-address-book-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-address-book-o:before {\n  content: \"\\f2b9\"; }\n\n.fa.fa-vcard:before {\n  content: \"\\f2bb\"; }\n\n.fa.fa-address-card-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-address-card-o:before {\n  content: \"\\f2bb\"; }\n\n.fa.fa-vcard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-vcard-o:before {\n  content: \"\\f2bb\"; }\n\n.fa.fa-user-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-user-circle-o:before {\n  content: \"\\f2bd\"; }\n\n.fa.fa-user-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-user-o:before {\n  content: \"\\f007\"; }\n\n.fa.fa-id-badge {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-drivers-license:before {\n  content: \"\\f2c2\"; }\n\n.fa.fa-id-card-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-id-card-o:before {\n  content: \"\\f2c2\"; }\n\n.fa.fa-drivers-license-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-drivers-license-o:before {\n  content: \"\\f2c2\"; }\n\n.fa.fa-quora {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-free-code-camp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-telegram {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-thermometer-4:before {\n  content: \"\\f2c7\"; }\n\n.fa.fa-thermometer:before {\n  content: \"\\f2c7\"; }\n\n.fa.fa-thermometer-3:before {\n  content: \"\\f2c8\"; }\n\n.fa.fa-thermometer-2:before {\n  content: \"\\f2c9\"; }\n\n.fa.fa-thermometer-1:before {\n  content: \"\\f2ca\"; }\n\n.fa.fa-thermometer-0:before {\n  content: \"\\f2cb\"; }\n\n.fa.fa-bathtub:before {\n  content: \"\\f2cd\"; }\n\n.fa.fa-s15:before {\n  content: \"\\f2cd\"; }\n\n.fa.fa-window-maximize {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-window-restore {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-times-rectangle:before {\n  content: \"\\f410\"; }\n\n.fa.fa-window-close-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-window-close-o:before {\n  content: \"\\f410\"; }\n\n.fa.fa-times-rectangle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-times-rectangle-o:before {\n  content: \"\\f410\"; }\n\n.fa.fa-bandcamp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-grav {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-etsy {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-imdb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-ravelry {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-eercast {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-eercast:before {\n  content: \"\\f2da\"; }\n\n.fa.fa-snowflake-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400; }\n\n.fa.fa-snowflake-o:before {\n  content: \"\\f2dc\"; }\n\n.fa.fa-superpowers {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-wpexplorer {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n\n.fa.fa-meetup {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400; }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/css/v5-font-face.css",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n@font-face {\n  font-family: \"Font Awesome 5 Brands\";\n  font-display: block;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Font Awesome 5 Free\";\n  font-display: block;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Font Awesome 5 Free\";\n  font-display: block;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"); }\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/js/all.js",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n(function () {\n  'use strict';\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var PRODUCTION = function () {\n    try {\n      return \"production\" === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce(function (acc, iconName) {\n      var icon = icons[iconName];\n      var expanded = !!icon.icon;\n\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n\n      return acc;\n    }, {});\n  }\n\n  function defineIcons(prefix, icons) {\n    var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _params$skipHooks = params.skipHooks,\n        skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n    var normalized = normalizeIcons(icons);\n\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n\n\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"42-group\": [640, 512, [\"innosoft\"], \"e080\", \"M320 96V416C341 416 361.8 411.9 381.2 403.8C400.6 395.8 418.3 383.1 433.1 369.1C447.1 354.3 459.8 336.6 467.8 317.2C475.9 297.8 480 277 480 256C480 234.1 475.9 214.2 467.8 194.8C459.8 175.4 447.1 157.7 433.1 142.9C418.3 128 400.6 116.2 381.2 108.2C361.8 100.1 341 96 320 96zM0 256L160 416L320 256L160 96L0 256zM480 256C480 277 484.1 297.8 492.2 317.2C500.2 336.6 512 354.3 526.9 369.1C541.7 383.1 559.4 395.8 578.8 403.8C598.2 411.9 618.1 416 640 416V96C597.6 96 556.9 112.9 526.9 142.9C496.9 172.9 480 213.6 480 256z\"],\n    \"500px\": [448, 512, [], \"f26e\", \"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3 .3-16 16.5-21.2 23.9l-.5 .6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6 .2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"],\n    \"accessible-icon\": [448, 512, [62107], \"f368\", \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"],\n    \"accusoft\": [640, 512, [], \"f369\", \"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7 .8 0 114.5-36.6 114.5-36.6 .5-.6-.1-.1 .6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8 .5-116.5 .6-19.2 .1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1 .2-9.6 .8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6 .2 2.5 2 2.6 4.6 3.5 2.7 .8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"],\n    \"adn\": [496, 512, [], \"f170\", \"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"],\n    \"adversal\": [512, 512, [], \"f36a\", \"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4 .4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7 .4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6 .4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1 .2-.1 .3-.1 .5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2 .4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"],\n    \"affiliatetheme\": [512, 512, [], \"f36b\", \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9 .1-8.5-.3-16.8-1-25z\"],\n    \"airbnb\": [448, 512, [], \"f834\", \"M224 373.1c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.6-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.1 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.1 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.7-231.2 115.9-241.6 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.5 114.8 239.1 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.1C280.3 35.93 273.1 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.2 22 349.8-3.22 419.1 48.74 480 111.6 480c21.71 0 60.61-6.06 112.4-62.4 58.68 63.78 101.3 62.4 112.4 62.4 62.89 .05 114.8-60.86 89.61-130.2 .02-3.89-16.82-38.9-16.82-39.58z\"],\n    \"algolia\": [448, 512, [], \"f36c\", \"M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8 .9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1 .7 1.3 .2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7 .5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z\"],\n    \"alipay\": [448, 512, [], \"f642\", \"M377.7 32H70.26C31.41 32 0 63.41 0 102.3v307.5C0 448.6 31.41 480 70.26 480h307.5c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.6-60.34-171.6-88.44-32.07 43.97-84.14 81-148.6 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.1 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.4V92.34h50.92v50.42h109.4v19.01H248.6v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100 36.04 148.6 52.74V102.3C447.8 63.57 416.4 32 377.7 32zM47.28 322.1c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.9-72.9-44.63-18.68-84.48-31.41-109.4-31.41-67.45 0-79.35 33.06-78.36 50.58z\"],\n    \"amazon\": [448, 512, [], \"f270\", \"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"],\n    \"amazon-pay\": [640, 512, [], \"f42c\", \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.9 595.9 0 0 0 127.4 46.3 616.6 616.6 0 0 0 63.2 11.8 603.3 603.3 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.7 603.7 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1 -9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.3 473.3 0 0 1 -75.1 17.6 431 431 0 0 1 -53.2 4.8 21.3 21.3 0 0 0 -2.5 .3H308a21.3 21.3 0 0 0 -2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1 -50.4-5.3A448.4 448.4 0 0 1 164 420a443.3 443.3 0 0 1 -145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3 .6a80.92 80.92 0 0 0 -38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1 -.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1 .1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1 .9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1 .5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1 -1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9 .4a148 148 0 0 0 -28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7 .1 3.3-.1 6.6 0 9.9 .1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4 .3 8.3 .2 16.6 .3 24.9a7.84 7.84 0 0 1 -.2 1.4c-.5-.1-.9 0-1.3-.1a180.6 180.6 0 0 0 -32-4.9c-11.3-.6-22.5 .1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4 .1 10.9 .1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0 -.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9 .1-7.9 .1-11.9 .1zm35 127.7a3.33 3.33 0 0 1 -1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7 .6-11.4 .4-16.8-1.8a20.08 20.08 0 0 1 -12.4-13.3 32.9 32.9 0 0 1 -.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4 .7 16.6 2.3 25 3.4 1.6 .2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0 -21-3.9 147.3 147.3 0 0 0 -39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0 -3.7 3.5 5.11 5.11 0 0 0 -.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4 .4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0 -1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.9 145.9 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6 .8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6 .2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1 -15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.2 108.2 0 0 0 16.9 2c17.1 .4 30.7-6.5 39.5-21.4a131.6 131.6 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0 -7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"],\n    \"amilia\": [448, 512, [], \"f36d\", \"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5 .3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\"],\n    \"android\": [576, 512, [], \"f17b\", \"M420.5 301.9a24 24 0 1 1 24-24 24 24 0 0 1 -24 24m-265.1 0a24 24 0 1 1 24-24 24 24 0 0 1 -24 24m273.7-144.5 47.94-83a10 10 0 1 0 -17.27-10h0l-48.54 84.07a301.3 301.3 0 0 0 -246.6 0L116.2 64.45a10 10 0 1 0 -17.27 10h0l47.94 83C64.53 202.2 8.24 285.5 0 384H576c-8.24-98.45-64.54-181.8-146.9-226.6\"],\n    \"angellist\": [448, 512, [], \"f209\", \"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7 .1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3 .3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7 .1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"],\n    \"angrycreative\": [640, 512, [], \"f36e\", \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8 .3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1 .6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"],\n    \"angular\": [448, 512, [], \"f420\", \"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\"],\n    \"app-store\": [512, 512, [], \"f36f\", \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"],\n    \"app-store-ios\": [448, 512, [], \"f370\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"],\n    \"apper\": [640, 512, [], \"f371\", \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8 .3-3.3 .3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"],\n    \"apple\": [384, 512, [], \"f179\", \"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"],\n    \"apple-pay\": [640, 512, [], \"f415\", \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9 .3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5 .1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8 .4 9.3 .7 11.6 .7z\"],\n    \"artstation\": [512, 512, [], \"f77a\", \"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\"],\n    \"asymmetrik\": [576, 512, [], \"f372\", \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1 .8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"],\n    \"atlassian\": [512, 512, [], \"f77b\", \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8 .1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6 .1z\"],\n    \"audible\": [640, 512, [], \"f373\", \"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"],\n    \"autoprefixer\": [640, 512, [], \"f41c\", \"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"],\n    \"avianex\": [512, 512, [], \"f374\", \"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"],\n    \"aviato\": [640, 512, [], \"f421\", \"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2 .3-2 .5-4.2 .6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1 .3-.1 .7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3 .3 4.4 .6 6.5 .3 2.6 .8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9 .9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1 .2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9 .9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"],\n    \"aws\": [640, 512, [], \"f375\", \"M180.4 203c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1 -4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1 -5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.61 78.61 0 0 1 -62.61 29.45c-16.28 .89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1 .02 21.6 .37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4 .01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.86 76.86 0 0 1 55.69 17.28 70.29 70.29 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.9 23.05c-7.86 .72-11.52-4.86-12.68-10.37l-49.8-164.6c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.8 33.16-140.8c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.6L420.1 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.7 110.7l-32.78 136.1c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.5 5.63c-5.88 .01-33.92-.3-57.36-12.29a12.8 12.8 0 0 1 -7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89 .91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.9c-70.03 51.72-171.7 79.25-258.5 79.25A469.1 469.1 0 0 1 2.83 327.5c-6.53-5.89-.77-13.96 7.17-9.47a637.4 637.4 0 0 0 316.9 84.12 630.2 630.2 0 0 0 241.6-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79 .77-7.94-5.12-1.79-9.47 40.07-28.17 105.9-20.1 113.4-10.63 7.55 9.47-2.05 75.41-39.56 106.9-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"],\n    \"bandcamp\": [512, 512, [], \"f2d5\", \"M256 8C119 8 8 119 8 256S119 504 256 504 504 393 504 256 393 8 256 8zm48.2 326.1h-181L207.9 178h181z\"],\n    \"battle-net\": [512, 512, [], \"f835\", \"M448.6 225.6c26.87 .18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.1-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.2 7.14 238.7 1.07 228.2 .22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.6-9.22 5.22 53 29.75 101.8 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61 .15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.8 4.6 143.3-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.2c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.7c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.4c-10.29-5.34-21.16-10.34-32.38-15.05a722.5 722.5 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.2 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.8 718.8 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.3 98-132.8 115.9-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.1 12.3 .91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.2 695.2 0 0 0 44.67 152.8c.93-.38 1.84 .88 18.67-8.25-26.33-74.47-33.76-138.2-34-173.4 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.3 30.71q-10.69 15.66-23.33 32.47C365.6 152 339.1 145.8 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.6 717.6 0 0 0 -115.3-31.71 646.6 646.6 0 0 0 -39.39-6.05c-.07 .45-1.81 1.85-2.16 20.33C300 190.3 358.8 215.7 389.4 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.6 306.6 111zm-130.6 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.1 74.8\"],\n    \"behance\": [576, 512, [], \"f1b4\", \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2 .6-8.7 .6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"],\n    \"behance-square\": [448, 512, [], \"f1b5\", \"M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6 .1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3 .3-4.8 .3-7.2z\"],\n    \"bilibili\": [512, 512, [], \"e3d9\", \"M488.6 104.1C505.3 122.2 513 143.8 511.9 169.8V372.2C511.5 398.6 502.7 420.3 485.4 437.3C468.2 454.3 446.3 463.2 419.9 464H92.02C65.57 463.2 43.81 454.2 26.74 436.8C9.682 419.4 .7667 396.5 0 368.2V169.8C.7667 143.8 9.682 122.2 26.74 104.1C43.81 87.75 65.57 78.77 92.02 78H121.4L96.05 52.19C90.3 46.46 87.42 39.19 87.42 30.4C87.42 21.6 90.3 14.34 96.05 8.603C101.8 2.868 109.1 0 117.9 0C126.7 0 134 2.868 139.8 8.603L213.1 78H301.1L375.6 8.603C381.7 2.868 389.2 0 398 0C406.8 0 414.1 2.868 419.9 8.603C425.6 14.34 428.5 21.6 428.5 30.4C428.5 39.19 425.6 46.46 419.9 52.19L394.6 78L423.9 78C450.3 78.77 471.9 87.75 488.6 104.1H488.6zM449.8 173.8C449.4 164.2 446.1 156.4 439.1 150.3C433.9 144.2 425.1 140.9 416.4 140.5H96.05C86.46 140.9 78.6 144.2 72.47 150.3C66.33 156.4 63.07 164.2 62.69 173.8V368.2C62.69 377.4 65.95 385.2 72.47 391.7C78.99 398.2 86.85 401.5 96.05 401.5H416.4C425.6 401.5 433.4 398.2 439.7 391.7C446 385.2 449.4 377.4 449.8 368.2L449.8 173.8zM185.5 216.5C191.8 222.8 195.2 230.6 195.6 239.7V273C195.2 282.2 191.9 289.9 185.8 296.2C179.6 302.5 171.8 305.7 162.2 305.7C152.6 305.7 144.7 302.5 138.6 296.2C132.5 289.9 129.2 282.2 128.8 273V239.7C129.2 230.6 132.6 222.8 138.9 216.5C145.2 210.2 152.1 206.9 162.2 206.5C171.4 206.9 179.2 210.2 185.5 216.5H185.5zM377 216.5C383.3 222.8 386.7 230.6 387.1 239.7V273C386.7 282.2 383.4 289.9 377.3 296.2C371.2 302.5 363.3 305.7 353.7 305.7C344.1 305.7 336.3 302.5 330.1 296.2C323.1 289.9 320.7 282.2 320.4 273V239.7C320.7 230.6 324.1 222.8 330.4 216.5C336.7 210.2 344.5 206.9 353.7 206.5C362.9 206.9 370.7 210.2 377 216.5H377z\"],\n    \"bimobject\": [448, 512, [], \"f378\", \"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"],\n    \"bitbucket\": [512, 512, [61810], \"f171\", \"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0 -13.2-18.3 24.58 24.58 0 0 0 -2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\"],\n    \"bitcoin\": [512, 512, [], \"f379\", \"M504 256c0 136.1-111 248-248 248S8 392.1 8 256 119 8 256 8s248 111 248 248zm-141.7-35.33c4.937-32.1-20.19-50.74-54.55-62.57l11.15-44.7-27.21-6.781-10.85 43.52c-7.154-1.783-14.5-3.464-21.8-5.13l10.93-43.81-27.2-6.781-11.15 44.69c-5.922-1.349-11.73-2.682-17.38-4.084l.031-.14-37.53-9.37-7.239 29.06s20.19 4.627 19.76 4.913c11.02 2.751 13.01 10.04 12.68 15.82l-12.7 50.92c.76 .194 1.744 .473 2.829 .907-.907-.225-1.876-.473-2.876-.713l-17.8 71.34c-1.349 3.348-4.767 8.37-12.47 6.464 .271 .395-19.78-4.937-19.78-4.937l-13.51 31.15 35.41 8.827c6.588 1.651 13.05 3.379 19.4 5.006l-11.26 45.21 27.18 6.781 11.15-44.73a1038 1038 0 0 0 21.69 5.627l-11.11 44.52 27.21 6.781 11.26-45.13c46.4 8.781 81.3 5.239 95.99-36.73 11.84-33.79-.589-53.28-25-65.99 17.78-4.098 31.17-15.79 34.75-39.95zm-62.18 87.18c-8.41 33.79-65.31 15.52-83.75 10.94l14.94-59.9c18.45 4.603 77.6 13.72 68.81 48.96zm8.417-87.67c-7.673 30.74-55.03 15.12-70.39 11.29l13.55-54.33c15.36 3.828 64.84 10.97 56.85 43.03z\"],\n    \"bity\": [496, 512, [], \"f37a\", \"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3 .8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"],\n    \"black-tie\": [448, 512, [], \"f27e\", \"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"],\n    \"blackberry\": [512, 512, [], \"f37b\", \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1 .1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 .1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1 .1-16.3-11.6-39.7-53.7-39.7z\"],\n    \"blogger\": [448, 512, [], \"f37c\", \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1 .1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4 .1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8 .2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9 .7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6 .2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5 .4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7 .5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"],\n    \"blogger-b\": [448, 512, [], \"f37d\", \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8 .6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7 .7 165.8 .2 246.8c-.6 101.5 .1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4 .1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5 .2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5 .9c-68.1 .8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"],\n    \"bluetooth\": [448, 512, [], \"f293\", \"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"],\n    \"bluetooth-b\": [320, 512, [], \"f294\", \"M196.5 260l92.63-103.3L143.1 0v206.3l-86.11-86.11-31.41 31.41 108.1 108.4L25.61 368.4l31.41 31.41 86.11-86.11L145.8 512l148.6-148.6-97.91-103.3zm40.86-102.1l-49.98 49.98-.338-100.3 50.31 50.32zM187.4 313l49.98 49.98-50.31 50.32 .338-100.3z\"],\n    \"bootstrap\": [576, 512, [], \"f836\", \"M333.5 201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4 238.2 333.5 225 333.5 201.4zM517 188.6c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1 0-55.8 28.1-54.7 58.5c1 29.3-.3 67.2-9.8 98.1c-9.6 31-25.7 50.6-52.2 53.1v28.5c26.4 2.5 42.6 22.1 52.2 53.1c9.5 30.9 10.9 68.8 9.8 98.1c-1.1 30.5 22.7 58.5 54.7 58.5h328.7c32.1 0 55.8-28.1 54.7-58.5c-1-29.3 .3-67.2 9.8-98.1c9.6-31 25.7-50.6 52.1-53.1v-28.5C542.7 239.2 526.5 219.6 517 188.6zM300.2 375.1h-97.9V136.8h97.4c43.3 0 71.7 23.4 71.7 59.4c0 25.3-19.1 47.9-43.5 51.8v1.3c33.2 3.6 55.5 26.6 55.5 58.3C383.4 349.7 352.1 375.1 300.2 375.1zM290.2 266.4h-50.1v78.4h52.3c34.2 0 52.3-13.7 52.3-39.5C344.7 279.6 326.1 266.4 290.2 266.4z\"],\n    \"bots\": [640, 512, [], \"e340\", \"M86.34 197.8a51.77 51.77 0 0 0 -41.57 20.06V156a8.19 8.19 0 0 0 -8.19-8.19H8.19A8.19 8.19 0 0 0 0 156V333.6a8.189 8.189 0 0 0 8.19 8.189H36.58a8.189 8.189 0 0 0 8.19-8.189v-8.088c11.63 13.37 25.87 19.77 41.57 19.77 34.6 0 61.92-26.16 61.92-73.84C148.3 225.5 121.2 197.8 86.34 197.8zM71.52 305.7c-9.593 0-21.22-4.942-26.75-12.5V250.2c5.528-7.558 17.15-12.79 26.75-12.79 17.73 0 31.11 13.08 31.11 34.01C102.6 292.6 89.25 305.7 71.52 305.7zm156.4-59.03a17.4 17.4 0 1 0 17.4 17.4A17.4 17.4 0 0 0 227.9 246.7zM273.1 156.7V112a13.31 13.31 0 1 0 -10.24 0V156.7a107.5 107.5 0 1 0 10.24 0zm85.99 107.4c0 30.53-40.79 55.28-91.11 55.28s-91.11-24.75-91.11-55.28 40.79-55.28 91.11-55.28S359.9 233.5 359.9 264.1zm-50.16 17.4a17.4 17.4 0 1 0 -17.4-17.4h0A17.4 17.4 0 0 0 309.8 281.5zM580.7 250.5c-14.83-2.617-22.39-3.78-22.39-9.885 0-5.523 7.268-9.884 17.74-9.884a65.56 65.56 0 0 1 34.48 10.1 8.171 8.171 0 0 0 11.29-2.468c.07-.11 .138-.221 .2-.333l8.611-14.89a8.2 8.2 0 0 0 -2.867-11.12 99.86 99.86 0 0 0 -52.01-14.14c-38.96 0-60.18 21.51-60.18 46.22 0 36.34 33.72 41.86 57.56 45.64 13.37 2.326 24.13 4.361 24.13 11.05 0 6.4-5.523 10.76-18.9 10.76-13.55 0-30.99-6.222-42.62-13.58a8.206 8.206 0 0 0 -11.34 2.491c-.035 .054-.069 .108-.1 .164l-10.2 16.89a8.222 8.222 0 0 0 2.491 11.07c15.22 10.3 37.66 16.69 59.44 16.69 40.41 0 63.96-19.77 63.96-46.51C640 260.6 604.5 254.8 580.7 250.5zm-95.93 60.79a8.211 8.211 0 0 0 -9.521-5.938 23.17 23.17 0 0 1 -4.155 .387c-7.849 0-12.5-6.106-12.5-14.24V240.3h20.35a8.143 8.143 0 0 0 8.141-8.143V209.5a8.143 8.143 0 0 0 -8.141-8.143H458.6V171.1a8.143 8.143 0 0 0 -8.143-8.143H422.3a8.143 8.143 0 0 0 -8.143 8.143h0v30.23H399a8.143 8.143 0 0 0 -8.143 8.143h0v22.67A8.143 8.143 0 0 0 399 240.3h15.11v63.67c0 27.04 15.41 41.28 43.9 41.28 12.18 0 21.38-2.2 27.6-5.446a8.161 8.161 0 0 0 4.145-9.278z\"],\n    \"btc\": [384, 512, [], \"f15a\", \"M310.2 242.6c27.73-14.18 45.38-39.39 41.28-81.3-5.358-57.35-52.46-76.57-114.8-81.93V0h-48.53v77.2c-12.6 0-25.52 .315-38.44 .63V0h-48.53v79.41c-17.84 .539-38.62 .276-97.37 0v51.68c38.31-.678 58.42-3.14 63.02 21.43v217.4c-2.925 19.49-18.52 16.68-53.26 16.07L3.765 443.7c88.48 0 97.37 .315 97.37 .315V512h48.53v-67.06c13.23 .315 26.15 .315 38.44 .315V512h48.53v-68c81.3-4.412 135.6-24.89 142.9-101.5 5.671-61.45-23.32-88.86-69.33-99.89zM150.6 134.6c27.42 0 113.1-8.507 113.1 48.53 0 54.51-85.71 48.21-113.1 48.21v-96.74zm0 251.8V279.8c32.77 0 133.1-9.138 133.1 53.26-.001 60.19-100.4 53.25-133.1 53.25z\"],\n    \"buffer\": [448, 512, [], \"f837\", \"M427.8 380.7l-196.5 97.82a18.6 18.6 0 0 1 -14.67 0L20.16 380.7c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.8 67a18.51 18.51 0 0 0 14.67 0l134.8-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.5l-47.06-23.43a18.62 18.62 0 0 0 -14.68 0l-134.8 67.08a18.68 18.68 0 0 1 -14.67 0L81.91 220.7a18.65 18.65 0 0 0 -14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.5 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.4l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.5-90.29c4-1.86 4-4.89 0-6.74L231.3 33.4a19.88 19.88 0 0 0 -14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\"],\n    \"buromobelexperte\": [448, 512, [], \"f37f\", \"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"],\n    \"buy-n-large\": [576, 512, [], \"f8a6\", \"M288 32C133.3 32 7.79 132.3 7.79 256S133.3 480 288 480s280.2-100.3 280.2-224S442.7 32 288 32zm-85.39 357.2L64.1 390.5l77.25-290.7h133.4c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1 -1.5 6.85 77.39 77.39 0 0 0 -17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.7 61.52zM358 207.1h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.9 182.1H306.8L322.6 328a78.8 78.8 0 0 0 11.47 .83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.4h103.9zM211.7 269.4H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.7h21.37c18 0 35.38-14.64 39.21-30.14C265.2 168.7 251.1 170 233 170z\"],\n    \"buysellads\": [448, 512, [], \"f20d\", \"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"],\n    \"canadian-maple-leaf\": [512, 512, [], \"f785\", \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"],\n    \"cc-amazon-pay\": [576, 512, [], \"f42d\", \"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3 .4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5 .9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5 .9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8 .1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7 .9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4 .2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9 .9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3 .1 4.6 1.6 6.7 6.2 7.5 4.7 .8 9.4 1.6 14.2 1.7 14.3 .3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5 .6-1.5 1.1-3 1.3-4.6 .4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5 .4-.3 .8-.6 1.4-1 .5 3.2 .9 6.2 1.5 9.2 .5 2.6 2.1 4.3 4.5 4.4 4.6 .1 9.1 .1 13.7 0 2.3-.1 3.8-1.6 4-3.9 .1-.8 .1-1.6 .1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8 .1-1.6 .3-2.5 .3-8.2 .4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5 .1 2.8-.1 5.6 0 8.3 .1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4 .8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7 .3 6.9 .2 13.9 .3 20.8 0 .4-.1 .7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9 .1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7 .1 2.5 .2 2.5 1.7 4.1 4.1 4.2 5.9 .1 11.8 .1 17.7 0 2.5 0 4-1.7 4.1-4.1 .1-.8 .1-1.7 .1-2.5v-60.7c.9 .7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2 .2-2.4 .3-3.6 .5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6 .7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4 .7 0 1.4 .2 2.1 .3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2 .8-2.4 1.8-3.1 3-.6 .9-.7 2.3-.5 3.4 .3 1.3 1.7 1.6 3 1.5 .6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1 .3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7 .3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3 .8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6 .7-3 1.2-6.1 1.7-9.1 .2-4.7 .2-9.6 .2-14.5z\"],\n    \"cc-amex\": [576, 512, [], \"f1f3\", \"M325.1 167.8c0-16.4-14.1-18.4-27.4-18.4l-39.1-.3v69.3H275v-25.1h18c18.4 0 14.5 10.3 14.8 25.1h16.6v-13.5c0-9.2-1.5-15.1-11-18.4 7.4-3 11.8-10.7 11.7-18.7zm-29.4 11.3H275v-15.3h21c5.1 0 10.7 1 10.7 7.4 0 6.6-5.3 7.9-11 7.9zM279 268.6h-52.7l-21 22.8-20.5-22.8h-66.5l-.1 69.3h65.4l21.3-23 20.4 23h32.2l.1-23.3c18.9 0 49.3 4.6 49.3-23.3 0-17.3-12.3-22.7-27.9-22.7zm-103.8 54.7h-40.6v-13.8h36.3v-14.1h-36.3v-12.5h41.7l17.9 20.2zm65.8 8.2l-25.3-28.1L241 276zm37.8-31h-21.2v-17.6h21.5c5.6 0 10.2 2.3 10.2 8.4 0 6.4-4.6 9.2-10.5 9.2zm-31.6-136.7v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5zM576 255.4h-.2zm-194.6 31.9c0-16.4-14.1-18.7-27.1-18.7h-39.4l-.1 69.3h16.6l.1-25.3h17.6c11 0 14.8 2 14.8 13.8l-.1 11.5h16.6l.1-13.8c0-8.9-1.8-15.1-11-18.4 7.7-3.1 11.8-10.8 11.9-18.4zm-29.2 11.2h-20.7v-15.6h21c5.1 0 10.7 1 10.7 7.4 0 6.9-5.4 8.2-11 8.2zm-172.8-80v-69.3h-27.6l-19.7 47-21.7-47H83.3v65.7l-28.1-65.7H30.7L1 218.5h17.9l6.4-15.3h34.5l6.4 15.3H100v-54.2l24 54.2h14.6l24-54.2v54.2zM31.2 188.8l11.2-27.6 11.5 27.6zm477.4 158.9v-4.5c-10.8 5.6-3.9 4.5-156.7 4.5 0-25.2 .1-23.9 0-25.2-1.7-.1-3.2-.1-9.4-.1 0 17.9-.1 6.8-.1 25.3h-39.6c0-12.1 .1-15.3 .1-29.2-10 6-22.8 6.4-34.3 6.2 0 14.7-.1 8.3-.1 23h-48.9c-5.1-5.7-2.7-3.1-15.4-17.4-3.2 3.5-12.8 13.9-16.1 17.4h-82v-92.3h83.1c5 5.6 2.8 3.1 15.5 17.2 3.2-3.5 12.2-13.4 15.7-17.2h58c9.8 0 18 1.9 24.3 5.6v-5.6c54.3 0 64.3-1.4 75.7 5.1v-5.1h78.2v5.2c11.4-6.9 19.6-5.2 64.9-5.2v5c10.3-5.9 16.6-5.2 54.3-5V80c0-26.5-21.5-48-48-48h-480c-26.5 0-48 21.5-48 48v109.8c9.4-21.9 19.7-46 23.1-53.9h39.7c4.3 10.1 1.6 3.7 9 21.1v-21.1h46c2.9 6.2 11.1 24 13.9 30 5.8-13.6 10.1-23.9 12.6-30h103c0-.1 11.5 0 11.6 0 43.7 .2 53.6-.8 64.4 5.3v-5.3H363v9.3c7.6-6.1 17.9-9.3 30.7-9.3h27.6c0 .5 1.9 .3 2.3 .3H456c4.2 9.8 2.6 6 8.8 20.6v-20.6h43.3c4.9 8-1-1.8 11.2 18.4v-18.4h39.9v92h-41.6c-5.4-9-1.4-2.2-13.2-21.9v21.9h-52.8c-6.4-14.8-.1-.3-6.6-15.3h-19c-4.2 10-2.2 5.2-6.4 15.3h-26.8c-12.3 0-22.3-3-29.7-8.9v8.9h-66.5c-.3-13.9-.1-24.8-.1-24.8-1.8-.3-3.4-.2-9.8-.2v25.1H151.2v-11.4c-2.5 5.6-2.7 5.9-5.1 11.4h-29.5c-4-8.9-2.9-6.4-5.1-11.4v11.4H58.6c-4.2-10.1-2.2-5.3-6.4-15.3H33c-4.2 10-2.2 5.2-6.4 15.3H0V432c0 26.5 21.5 48 48 48h480.1c26.5 0 48-21.5 48-48v-90.4c-12.7 8.3-32.7 6.1-67.5 6.1zm36.3-64.5H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-57 39.8h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-42.2-40.1v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5zm-56.3-108.1c-.3 .2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9 .2 .1 1.1 .5 3.4 .5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm20.4-10.5h-.1zm-16.2-15.2c-23.5 0-34 12-34 35.3 0 22.2 10.2 34 33 34h19.2l6.4-15.3h34.3l6.6 15.3h33.7v-51.9l31.2 51.9h23.6v-69h-16.9v48.1l-29.1-48.1h-25.3v65.4l-27.9-65.4h-24.8l-23.5 54.5h-7.4c-13.3 0-16.1-8.1-16.1-19.9 0-23.8 15.7-20 33.1-19.7v-15.2zm42.1 12.1l11.2 27.6h-22.8zm-101.1-12v69.3h16.9v-69.3z\"],\n    \"cc-apple-pay\": [576, 512, [], \"f416\", \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3 .9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4 .7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4 .3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5 .2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2 .4 6.5 .5 8.1 .5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"],\n    \"cc-diners-club\": [576, 512, [], \"f24c\", \"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8 .3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"],\n    \"cc-discover\": [576, 512, [], \"f1f2\", \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9 .1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"],\n    \"cc-jcb\": [576, 512, [], \"f24b\", \"M431.5 244.3V212c41.2 0 38.5 .2 38.5 .2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2 .4-3.3 .3-38.5 .3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3 .1 42.3-12.9 42.3-33.2z\"],\n    \"cc-mastercard\": [576, 512, [], \"f1f1\", \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8 .3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3 .3 .5 .3 1.1 0 .3-.3 .5-.3 1.1-.3 .3-.3 .5-.5 .8-.3 .3-.5 .5-1.1 .5-.3 .3-.5 .3-1.1 .3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8 .3-1.1 0-.5 .3-.8 .5-1.1 .3-.3 .5-.3 .8-.5 .5-.3 .8-.3 1.1-.3 .5 0 .8 0 1.1 .3 .5 .3 .8 .3 1.1 .5s.2 .6 .5 1.1zm-2.2 1.4c.5 0 .5-.3 .8-.3 .3-.3 .3-.5 .3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7 .8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8 .3-1.4 .3-.5 .3-.8 .5-1.1 .8-.5 .3-.8 .8-.8 1.1-.3 .5-.3 1.1-.3 1.6 0 .3 0 .8 .3 1.4 0 .3 .3 .8 .8 1.1 .3 .3 .5 .5 1.1 .8 .5 .3 1.1 .3 1.4 .3 .5 0 1.1 0 1.6-.3 .3-.3 .8-.5 1.1-.8 .3-.3 .5-.8 .8-1.1 .3-.6 .3-1.1 .3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4 .1 138.5-61.9 138.5-138.4z\"],\n    \"cc-paypal\": [576, 512, [], \"f1f4\", \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5 .5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3 .5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5 .1-9.8-6.9-15.5-16.2-15.5z\"],\n    \"cc-stripe\": [576, 512, [], \"f1f5\", \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"],\n    \"cc-visa\": [576, 512, [], \"f1f0\", \"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2 .3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4 .2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2 .2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2 .1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"],\n    \"centercode\": [512, 512, [], \"f380\", \"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"],\n    \"centos\": [448, 512, [], \"f789\", \"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\"],\n    \"chrome\": [496, 512, [], \"f268\", \"M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z\"],\n    \"chromecast\": [512, 512, [], \"f838\", \"M447.8 64H64c-23.6 0-42.7 19.1-42.7 42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6 0 42.7-19.1 42.7-42.7V106.7C490.7 83.1 471.4 64 447.8 64zM21.3 383.6L21.3 383.6l0 63.9h63.9C85.2 412.2 56.6 383.6 21.3 383.6L21.3 383.6zM21.3 298.6V341c58.9 0 106.6 48.1 106.6 107h42.7C170.7 365.6 103.7 298.7 21.3 298.6zM213.4 448h42.7c-.5-129.5-105.3-234.3-234.8-234.6l0 42.4C127.3 255.6 213.3 342 213.4 448z\"],\n    \"cloudflare\": [640, 512, [], \"e07d\", \"M407.9 319.9l-230.8-2.928a4.58 4.58 0 0 1 -3.632-1.926 4.648 4.648 0 0 1 -.494-4.147 6.143 6.143 0 0 1 5.361-4.076L411.3 303.9c27.63-1.26 57.55-23.57 68.02-50.78l13.29-34.54a7.944 7.944 0 0 0 .524-2.936 7.735 7.735 0 0 0 -.164-1.631A151.9 151.9 0 0 0 201.3 198.4 68.12 68.12 0 0 0 94.2 269.6C41.92 271.1 0 313.7 0 366.1a96.05 96.05 0 0 0 1.029 13.96 4.508 4.508 0 0 0 4.445 3.871l426.1 .051c.043 0 .08-.019 .122-.02a5.606 5.606 0 0 0 5.271-4l3.273-11.27c3.9-13.4 2.448-25.8-4.1-34.9C430.1 325.4 420.1 320.5 407.9 319.9zM513.9 221.1c-2.141 0-4.271 .062-6.391 .164a3.771 3.771 0 0 0 -3.324 2.653l-9.077 31.19c-3.9 13.4-2.449 25.79 4.1 34.89 6.02 8.4 16.05 13.32 28.24 13.9l49.2 2.939a4.491 4.491 0 0 1 3.51 1.894 4.64 4.64 0 0 1 .514 4.169 6.153 6.153 0 0 1 -5.351 4.075l-51.13 2.939c-27.75 1.27-57.67 23.57-68.14 50.78l-3.695 9.606a2.716 2.716 0 0 0 2.427 3.68c.046 0 .088 .017 .136 .017h175.9a4.69 4.69 0 0 0 4.539-3.37 124.8 124.8 0 0 0 4.682-34C640 277.3 583.5 221.1 513.9 221.1z\"],\n    \"cloudscale\": [448, 512, [], \"f383\", \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6 .4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"],\n    \"cloudsmith\": [332, 512, [], \"f384\", \"M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z\"],\n    \"cloudversify\": [616, 512, [], \"f385\", \"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"],\n    \"cmplid\": [640, 512, [], \"e360\", \"M226.1 388.2a3.816 3.816 0 0 0 -2.294-3.5 3.946 3.946 0 0 0 -1.629-.385L72.6 384.3a19.24 19.24 0 0 1 -17.92-26.02L81.58 255.7a35.72 35.72 0 0 1 32.37-26H262.5a7.07 7.07 0 0 0 6.392-5.194l10.77-41.13a3.849 3.849 0 0 0 -2.237-4.937 3.755 3.755 0 0 0 -1.377-.261c-.063 0-.126 0-.189 .005H127.4a106.8 106.8 0 0 0 -96.99 77.1L3.483 358.8A57.47 57.47 0 0 0 57.31 436q1.43 0 2.86-.072H208.7a7.131 7.131 0 0 0 6.391-5.193L225.8 389.6A3.82 3.82 0 0 0 226.1 388.2zM306.7 81.2a3.861 3.861 0 0 0 .251-1.367A3.813 3.813 0 0 0 303.1 76c-.064 0-.128 0-.192 0h-41A7.034 7.034 0 0 0 255.5 81.2l-21.35 80.92h51.13zM180.4 368.2H231.5L263.5 245.7H212.3zM511.9 79.72a3.809 3.809 0 0 0 -3.8-3.661c-.058 0-.137 0-.23 .007h-41a7.1 7.1 0 0 0 -6.584 5.129L368.9 430.6a3.54 3.54 0 0 0 -.262 1.335 3.873 3.873 0 0 0 3.864 3.863c.056 0 .112 0 .169 0h41a7.068 7.068 0 0 0 6.392-5.193L511.5 81.2A3.624 3.624 0 0 0 511.9 79.72zM324.6 384.5h-41a7.2 7.2 0 0 0 -6.392 5.194L266.5 430.8a3.662 3.662 0 0 0 -.268 1.374A3.783 3.783 0 0 0 270 436c.06 0 .166 0 .3-.012h40.9a7.036 7.036 0 0 0 6.391-5.193l10.77-41.13a3.75 3.75 0 0 0 -3.445-5.208c-.108 0-.217 0-.326 .014zm311.3-308.4h-41a7.066 7.066 0 0 0 -6.392 5.129l-91.46 349.4a4.073 4.073 0 0 0 -.229 1.347 3.872 3.872 0 0 0 3.863 3.851c.056 0 .112 0 .169 0h40.97a7.1 7.1 0 0 0 6.392-5.193L639.7 81.2a3.624 3.624 0 0 0 .32-1.475 3.841 3.841 0 0 0 -3.821-3.564c-.068 0-.137 0-.206 .006zM371.6 225.2l10.8-41.1a4.369 4.369 0 0 0 .227-1.388 3.869 3.869 0 0 0 -3.861-3.842c-.057 0-.113 0-.169 0h-41.1a7.292 7.292 0 0 0 -6.391 5.226l-10.83 41.1a4.417 4.417 0 0 0 -.26 1.493c0 .069 0 .138 0 .206a3.776 3.776 0 0 0 3.757 3.507c.076 0 .18 0 .3-.012h41.13A7.034 7.034 0 0 0 371.6 225.2z\"],\n    \"codepen\": [512, 512, [], \"f1cb\", \"M502.3 159.7l-234-156c-7.987-4.915-16.51-4.96-24.57 0l-234 156C3.714 163.7 0 170.8 0 177.1v155.1c0 7.143 3.714 14.29 9.715 18.29l234 156c7.987 4.915 16.51 4.96 24.57 0l234-156c6-3.999 9.715-11.14 9.715-18.29V177.1c-.001-7.142-3.715-14.29-9.716-18.28zM278 63.13l172.3 114.9-76.86 51.43L278 165.7V63.13zm-44 0v102.6l-95.43 63.72-76.86-51.43L234 63.13zM44 219.1l55.14 36.86L44 292.8v-73.71zm190 229.7L61.71 333.1l76.86-51.43L234 346.3v102.6zm22-140.9l-77.71-52 77.71-52 77.71 52-77.71 52zm22 140.9V346.3l95.43-63.72 76.86 51.43L278 448.8zm190-156l-55.14-36.86L468 219.1v73.71z\"],\n    \"codiepie\": [472, 512, [], \"f284\", \"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"],\n    \"confluence\": [512, 512, [], \"f78d\", \"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1 .1-.2 .1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8 .4 21.7-7.7 .1-.1 .1-.3 .2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2 .3-.4 .6-.6 1-67.3 112.6-81.1 95.6-280.6 .9-8.1-3.9-17.8-.4-21.7 7.7-.1 .1-.1 .3-.2 .4L22.2 141.3c-3.6 8.1 .1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"],\n    \"connectdevelop\": [576, 512, [], \"f20e\", \"M550.5 241l-50.09-86.79c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.73-14.73-15l-55.45-95.89c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.27-15.27-15.27-4.821 0-8.839 2.143-11.79 5.625H299.5C296.8 18.14 292.8 16 288 16s-8.839 2.143-11.52 5.625H170.4C167.5 18.14 163.4 16 158.6 16c-8.303 0-15.27 6.696-15.27 15.27 0 1.607 .536 3.482 1.072 4.821l-55.98 97.23c-5.356 2.41-9.107 7.5-9.107 13.66 0 .535 .268 1.071 .268 1.607l-53.3 92.14c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.39 12.05 15l55.18 95.36c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.39 12.05 14.73l51.7 89.73c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.27 15.27 15.27 4.821 0 8.839-2.143 11.52-5.357h106.9C279.2 493.9 283.4 496 288 496s8.839-2.143 11.52-5.357h107.1c2.678 2.946 6.696 4.821 10.98 4.821 8.571 0 15.27-6.964 15.27-15.27 0-1.607-.267-2.946-.803-4.285l51.7-90.27c6.964-1.339 12.05-7.5 12.05-14.73 0-1.607-.268-3.214-.804-4.821l54.91-95.36c6.964-1.339 12.32-7.5 12.32-15-.002-7.232-5.092-13.39-11.79-14.73zM153.5 450.7l-43.66-75.8h43.66v75.8zm0-83.84h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.1-47.41v50.62zm0-62.41l-50.36 53.3c-1.339-.536-2.679-1.34-4.018-1.607L43.45 259.8c.535-1.339 .535-2.679 .535-4.018s0-2.41-.268-3.482l51.97-90c2.679-.268 5.357-1.072 7.768-2.679l50.09 51.97v92.95zm0-102.3l-45.8-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.93-15.8v72.05zm0-80.63l-43.66 15.8 43.66-75.54v59.73zm326.5 39.11l.804 1.339L445.5 329.1l-63.75-67.23 98.04-101.5 .268 .268zM291.8 355.1l11.52 11.79H280.5l11.25-11.79zm-.268-11.25l-83.3-85.45 79.55-84.38 83.04 87.59-79.29 82.23zm5.357 5.893l79.29-82.23 67.5 71.25-5.892 28.13H313.7l-16.88-17.14zM410.4 44.39c1.071 .536 2.142 1.072 3.482 1.34l57.86 100.7v.536c0 2.946 .803 5.624 2.143 7.767L376.4 256l-83.04-87.59L410.4 44.39zm-9.107-2.143L287.7 162.5l-57.05-60.27 166.3-60h4.287zm-123.5 0c2.678 2.678 6.16 4.285 10.18 4.285s7.5-1.607 10.18-4.285h75L224.8 95.82 173.9 42.25h103.9zm-116.2 5.625l1.071-2.142a33.83 33.83 0 0 0 2.679-.804l51.16 53.84-54.91 19.82V47.88zm0 79.29l60.8-21.96 59.73 63.21-79.55 84.11-40.98-42.05v-83.3zm0 92.68L198 257.6l-36.43 38.3v-76.07zm0 87.86l42.05-44.46 82.77 85.98-17.14 17.68H161.6v-59.2zm6.964 162.1c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.73h99.91l-91.61 94.82h-1.339zm129.9 0c-2.679-2.41-6.428-4.285-10.45-4.285s-7.767 1.875-10.45 4.285h-96.43l91.61-94.82h38.3l91.61 94.82H298.4zm120-11.79l-4.286 7.5c-1.339 .268-2.41 .803-3.482 1.339l-89.2-91.88h114.4l-17.41 83.04zm12.86-22.23l12.86-60.8h21.96l-34.82 60.8zm34.82-68.84h-20.36l4.553-21.16 17.14 18.21c-.535 .803-1.071 1.874-1.339 2.946zm66.16-107.4l-55.45 96.7c-1.339 .535-2.679 1.071-4.018 1.874l-20.63-21.96 34.55-163.9 45.8 79.29c-.267 1.339-.803 2.678-.803 4.285 0 1.339 .268 2.411 .536 3.75z\"],\n    \"contao\": [512, 512, [], \"f26d\", \"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"],\n    \"cotton-bureau\": [512, 512, [], \"f89e\", \"M474.3 330.4c-23.66 91.85-94.23 144.6-201.9 148.4V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.2 0C110.5 157.7 74 194.6 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.4-5-211.1-85.07-211.1-223 0-141.8 81.35-223.2 223.2-223.2 114.8 0 189.8 53.2 214.7 148.8H500C473.9 71.51 388.2 8 259.8 8 105 8 12 101.2 12 255.8 12 411.1 105.2 504.3 259.8 504c128.3 0 213.9-63.81 239.7-173.6zM357 182.3c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.8zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.4c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.5 71.65 120.8-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.3c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0 -33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z\"],\n    \"cpanel\": [640, 512, [], \"f388\", \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5 .2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\"],\n    \"creative-commons\": [496, 512, [], \"f25e\", \"M245.8 214.9l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.1 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.6 8.05C104.7 8.05 0 123.1 0 256c0 138.5 113.6 248 247.6 248 129.9 0 248.4-100.9 248.4-248 0-137.9-106.6-248-248.4-248zm.87 450.8c-112.5 0-203.7-93.04-203.7-202.8 0-105.4 85.43-203.3 203.7-203.3 112.5 0 202.8 89.46 202.8 203.3-.01 121.7-99.68 202.8-202.8 202.8z\"],\n    \"creative-commons-by\": [496, 512, [], \"f4e7\", \"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3z\"],\n    \"creative-commons-nc\": [496, 512, [], \"f4e8\", \"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"],\n    \"creative-commons-nc-eu\": [496, 512, [], \"f4e9\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4 .9 .4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"],\n    \"creative-commons-nc-jp\": [496, 512, [], \"f4ea\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"],\n    \"creative-commons-nd\": [496, 512, [], \"f4eb\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"],\n    \"creative-commons-pd\": [496, 512, [], \"f4ec\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"],\n    \"creative-commons-pd-alt\": [496, 512, [], \"f4ed\", \"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6 .9 41.6z\"],\n    \"creative-commons-remix\": [496, 512, [], \"f4ee\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4 .4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"],\n    \"creative-commons-sa\": [496, 512, [], \"f4ef\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"],\n    \"creative-commons-sampling\": [496, 512, [], \"f4f0\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9 .6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9 .5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6 .5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6 .6 0 10.6 .7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"],\n    \"creative-commons-sampling-plus\": [496, 512, [], \"f4f1\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1 .4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2 .2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1 .1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4 .3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"],\n    \"creative-commons-share\": [496, 512, [], \"f4f2\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"],\n    \"creative-commons-zero\": [496, 512, [], \"f4f3\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4 .5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"],\n    \"critical-role\": [448, 512, [], \"f6c9\", \"M225.8 0c.26 .15 216.6 124.5 217.1 124.7 3 1.18 3.7 3.46 3.7 6.56q-.11 125.2 0 250.4a5.88 5.88 0 0 1 -3.38 5.78c-21.37 12-207.9 118.3-218.9 124.6h-3C142 466.3 3.08 386.6 2.93 386.5a3.29 3.29 0 0 1 -1.88-3.24c0-.87 0-225.9-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.1 213.2 6 224.1 0zM215.4 20.42l-.22-.16Q118.1 75.55 21 130.9c0 .12 .08 .23 .13 .35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.4c.88-1.41 64.07-110.9 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4 .09 1.48 .22 .78 1.42-41.19 71.33-36.4 63-67.48 116.9-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82 .29 26.21 .15 25.27 1 32.66 .52 4.37 2.16 4.2 9.69 4.81 3.14 .26 3.88 4.08 .52 4.92-1.57 .39-31.6 .51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16 .81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4 .88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06 .89 .13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5 .2 1.48 1.33 0 .11 .88 26.69 .87 26.8-.05 1.52 .67 1.62 1.89 1.62h186.7Q386.5 304.6 346 234.3c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.1V138c-1.72 .5-103.3 38.72-105.8 39.68-1.08 .42-1.55 .2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13 .65-1.39 .1 0 95.53-35.85 103-38.77-65.42-37.57-130.6-75-196-112.6l86.82 150.4-.28 .33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.7-82-142.2-9.1 14.67-83.56 146.2-85.37 146.3-2.93 .17-5.88 .08-9.25 .08q43.25-74.74 86.18-149zm51.93 129.9a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53 .2 2.6 1.92 0 .11 .07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.1 0 .89 .52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75 .13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.3 .05-1.08-.62-1.16-1.35-1.15-32.35 .52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95 .23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85 .68-27.49 .58-22.59 1-29.55a2.69 2.69 0 0 0 -1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0 -2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9 .43 1.12 1.24 1.11 .1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76 .31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1 -1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1 -2.66-1.79c2.38-3.75 5.89 .92 5.86-6.14-.08-25.75 .21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05 .72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73 .95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42 .26 4.73 .45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49 .53 1 3.38 0 .05-.16 0-.24 0-3.61 .26-3.94 1-4 4.62-.27 43.93 .07 40.23 .41 42.82 .11 .84 .27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37 .08-20.74 0-31.11 .07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37 .88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57 .83 3.55zm275-10.15c-1.21 7.13 .17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1 -3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0 -2-1.44 138 138 0 0 0 -14.58 .07 2.23 2.23 0 0 0 -1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72 .66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61 .13 4-1.11 4.13-4.29 .09-1.87 .08 1.17 .07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06 .21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0 -2.66 2.83c-.07 1.63-.19 38.89 .29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25 .43 14.92 .44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.7 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11 .38 37.19-.65 1.68-.19 2.38 .24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31 .34 15.69-1.52 .47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58 .32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64 .48 14.4 0 16.43-5.71 .84-2.37 3.5-1.77 3.18 .58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.5c2.46 .61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1 .57 11.89-6 12.75-1.6 .21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.1c3.28 0 3.66 3 .16 3.43-2.61 .32-5-.42-5 5.46 0 2-.19 29.05 .4 41.45 .11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76 .84 2.76 1.08 .35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94 .4 5.13-2.8 1-15.87 .57-44.65 .34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22 .34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61 .1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09 .41-3.15 1.29 0 20.19-.41 21.17 .21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.3a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.6 197.4-112.5-.14-.43 11.26-.18-181.5-.27-1.22 0-1.57 .37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1 -1.36 7.71c-.55 1.83 .38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1 -2-10.79c.16-2.46 .8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.3 102.6 196 112.8zm-90.9-188.8c0 2.4 .36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51 .05 8.04 .01 11.61 .02 41.65zm105.8-15.05c0 2.13 1.07 38.68 1.09 39.13 .34 9.94-25.58 5.77-25.23-2.59 .08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1 -.36 .12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88 .07-14.91zm-80.15 103.8c0 1.8 .41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81 .05 4.5-.03 13.68 .02 18.59zm212.3 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\"],\n    \"css3\": [512, 512, [], \"f13c\", \"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"],\n    \"css3-alt\": [384, 512, [], \"f38b\", \"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3 .1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2 .1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"],\n    \"cuttlefish\": [440, 512, [], \"f38c\", \"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"],\n    \"d-and-d\": [576, 512, [], \"f38d\", \"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2 .3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1 .7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5 .6-11.4 12.5-14.1 27.4-10.9 43.6 .2 1.3 .4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6 .1 .5 .1 1.1 .1 1.6 0 .3-.1 .5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5 .9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2 .2-1.9 .3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3 .3 .3 .7 .6 1 .9 .3-.6 .5-1.2 .9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8 .7-3.5 .9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3 .4-.4 .9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6 .2-.1 .3-.2 .4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8 .9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9 .8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7 .3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3 .2-.2 .4-.3 .6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8 .6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1 .1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8 .4 4.7 .8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1 .7-52.3 .3 2.2 .4 4.3 .9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8 .1-50.9-10.6 .7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6 .2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3 .8-2.4 2.3-4.6 4-6.6 .6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2 .5-1 1.1-2 1.9-3.3 .5 4.2 .6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1 .6 .5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7 .4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6 .5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2 .4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3 .3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5 .8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8 .8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3 .6-4.5 .8-9.2 .1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6 .1-23.3 1.3-.9 .1-1.7 .3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"],\n    \"d-and-d-beyond\": [640, 512, [], \"f6ca\", \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9 .2-5.8 1.6-7.5 .6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9 .6-.3 1.3 0 .6 1.9-.2 .6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3 .1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9 .9 7.5 .2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1 .6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6 .7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4 .2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5 .5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4 .8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6 .5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9 .5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8 .5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6 .3 3 .6 4.3 1.1-2.1 .8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2 .8 .2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8 .6-2.6-.2s.3-4.3 .3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3 .6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7 .2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7 .6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8 .8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5 .3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9 .3 5.6 1.1V196c-1.1 .5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1 .2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5 .2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1 .2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3 .3-99.3zm-.3 77.5c-37.4 0-36.9-55.3 .2-55.3 36.8 .1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8 .2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1 .1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5 .8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6 .3-39.9-4 .1 .8 .5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8 .2-39.9-4 .1 .7 .5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6 .3-4 1.1-6.1 2.9 .1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"],\n    \"dailymotion\": [448, 512, [], \"e052\", \"M298.9 267a48.4 48.4 0 0 0 -24.36-6.21q-19.83 0-33.44 13.27t-13.61 33.42q0 21.16 13.28 34.6t33.43 13.44q20.5 0 34.11-13.78T322 307.5A47.13 47.13 0 0 0 315.9 284 44.13 44.13 0 0 0 298.9 267zM0 32V480H448V32zM374.7 405.3h-53.1V381.4h-.67q-15.79 26.2-55.78 26.2-27.56 0-48.89-13.1a88.29 88.29 0 0 1 -32.94-35.77q-11.6-22.68-11.59-50.89 0-27.56 11.76-50.22a89.9 89.9 0 0 1 32.93-35.78q21.18-13.09 47.72-13.1a80.87 80.87 0 0 1 29.74 5.21q13.28 5.21 25 17V153l55.79-12.09z\"],\n    \"dashcube\": [448, 512, [], \"f210\", \"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"],\n    \"deezer\": [576, 512, [], \"e077\", \"M451.5 244.7H576V172H451.5zm0-173.9v72.67H576V70.82zm0 275.1H576V273.2H451.5zM0 447.1H124.5V374.4H0zm150.5 0H275V374.4H150.5zm150.5 0H425.5V374.4H301zm150.5 0H576V374.4H451.5zM301 345.9H425.5V273.2H301zm-150.5 0H275V273.2H150.5zm0-101.2H275V172H150.5z\"],\n    \"delicious\": [448, 512, [], \"f1a5\", \"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1 .5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\"],\n    \"deploydog\": [512, 512, [], \"f38e\", \"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"],\n    \"deskpro\": [480, 512, [], \"f38f\", \"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7 .3 15 .1h82c.2 0 .3 .1 .5 .1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"],\n    \"dev\": [448, 512, [], \"f6cc\", \"M120.1 208.3c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.5h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.4 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.2c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.1h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.7-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16 .29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.6 115.3c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.7 29.57-113.7h32.58l-38.46 144.8z\"],\n    \"deviantart\": [320, 512, [], \"f1bd\", \"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"],\n    \"dhl\": [640, 512, [], \"f790\", \"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4 .7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\"],\n    \"diaspora\": [512, 512, [], \"f791\", \"M251.6 354.5c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.3s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1 .6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3 .4-2 1-148.6 1.7-149.6 .8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3 .8 .9 31.9 102.2 31.5 102.6-.9 .9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\"],\n    \"digg\": [512, 512, [], \"f1a6\", \"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"],\n    \"digital-ocean\": [512, 512, [], \"f391\", \"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\"],\n    \"discord\": [640, 512, [], \"f392\", \"M524.5 69.84a1.5 1.5 0 0 0 -.764-.7A485.1 485.1 0 0 0 404.1 32.03a1.816 1.816 0 0 0 -1.923 .91 337.5 337.5 0 0 0 -14.9 30.6 447.8 447.8 0 0 0 -134.4 0 309.5 309.5 0 0 0 -15.14-30.6 1.89 1.89 0 0 0 -1.924-.91A483.7 483.7 0 0 0 116.1 69.14a1.712 1.712 0 0 0 -.788 .676C39.07 183.7 18.19 294.7 28.43 404.4a2.016 2.016 0 0 0 .765 1.375A487.7 487.7 0 0 0 176 479.9a1.9 1.9 0 0 0 2.063-.676A348.2 348.2 0 0 0 208.1 430.4a1.86 1.86 0 0 0 -1.019-2.588 321.2 321.2 0 0 1 -45.87-21.85 1.885 1.885 0 0 1 -.185-3.126c3.082-2.309 6.166-4.711 9.109-7.137a1.819 1.819 0 0 1 1.9-.256c96.23 43.92 200.4 43.92 295.5 0a1.812 1.812 0 0 1 1.924 .233c2.944 2.426 6.027 4.851 9.132 7.16a1.884 1.884 0 0 1 -.162 3.126 301.4 301.4 0 0 1 -45.89 21.83 1.875 1.875 0 0 0 -1 2.611 391.1 391.1 0 0 0 30.01 48.81 1.864 1.864 0 0 0 2.063 .7A486 486 0 0 0 610.7 405.7a1.882 1.882 0 0 0 .765-1.352C623.7 277.6 590.9 167.5 524.5 69.84zM222.5 337.6c-28.97 0-52.84-26.59-52.84-59.24S193.1 219.1 222.5 219.1c29.67 0 53.31 26.82 52.84 59.24C275.3 310.1 251.9 337.6 222.5 337.6zm195.4 0c-28.97 0-52.84-26.59-52.84-59.24S388.4 219.1 417.9 219.1c29.67 0 53.31 26.82 52.84 59.24C470.7 310.1 447.5 337.6 417.9 337.6z\"],\n    \"discourse\": [448, 512, [], \"f393\", \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"],\n    \"dochub\": [416, 512, [], \"f394\", \"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1 .8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"],\n    \"docker\": [640, 512, [], \"f395\", \"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4 .4 67.6 .1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"],\n    \"draft2digital\": [480, 512, [], \"f396\", \"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\"],\n    \"dribbble\": [512, 512, [], \"f17d\", \"M256 8C119.3 8 8 119.3 8 256s111.3 248 248 248 248-111.3 248-248S392.7 8 256 8zm163.1 114.4c29.5 36.05 47.37 81.96 47.83 131.1-6.984-1.477-77.02-15.68-147.5-6.818-5.752-14.04-11.18-26.39-18.62-41.61 78.32-31.98 113.8-77.48 118.3-83.52zM396.4 97.87c-3.81 5.427-35.7 48.29-111 76.52-34.71-63.78-73.18-116.2-79.04-124 67.18-16.19 137.1 1.27 190.1 47.49zm-230.5-33.25c5.585 7.659 43.44 60.12 78.54 122.5-99.09 26.31-186.4 25.93-195.8 25.81C62.38 147.2 106.7 92.57 165.9 64.62zM44.17 256.3c0-2.166 .043-4.322 .108-6.473 9.268 .19 111.9 1.513 217.7-30.15 6.064 11.87 11.86 23.92 17.17 35.95-76.6 21.58-146.2 83.53-180.5 142.3C64.79 360.4 44.17 310.7 44.17 256.3zm81.81 167.1c22.13-45.23 82.18-103.6 167.6-132.8 29.74 77.28 42.04 142.1 45.19 160.6-68.11 29.01-150 21.05-212.8-27.88zm248.4 8.489c-2.171-12.89-13.45-74.9-41.15-151 66.38-10.63 124.7 6.768 131.9 9.055-9.442 58.94-43.27 109.8-90.79 141.1z\"],\n    \"dribbble-square\": [448, 512, [], \"f397\", \"M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z\"],\n    \"dropbox\": [528, 512, [], \"f16b\", \"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"],\n    \"drupal\": [448, 512, [], \"f1a9\", \"M303.1 108.1C268.2 72.46 234.2 38.35 224 0c-9.957 38.35-44.25 72.46-80.02 108.1C90.47 161.7 29.72 222.4 29.72 313.4c-2.337 107.3 82.75 196.2 190.1 198.5S415.9 429.2 418.3 321.9q.091-4.231 0-8.464C418.3 222.4 357.5 161.7 303.1 108.1zm-174.3 223a130.3 130.3 0 0 0 -15.21 24.15 4.978 4.978 0 0 1 -3.319 2.766h-1.659c-4.333 0-9.219-8.481-9.219-8.481h0c-1.29-2.028-2.489-4.149-3.687-6.361l-.83-1.752c-11.25-25.72-1.475-62.32-1.475-62.32h0a160.6 160.6 0 0 1 23.23-49.87A290.8 290.8 0 0 1 138.5 201.6l9.219 9.219 43.51 44.43a4.979 4.979 0 0 1 0 6.638L145.8 312.3h0zm96.61 127.3a67.2 67.2 0 0 1 -49.78-111.9c14.2-16.87 31.53-33.46 50.33-55.31 22.31 23.78 36.88 40.1 51.16 57.99a28.41 28.41 0 0 1 2.95 4.425 65.9 65.9 0 0 1 11.98 37.98 66.65 66.65 0 0 1 -66.47 66.84zM352.4 351.6h0a7.743 7.743 0 0 1 -6.176 5.347H344.9a11.25 11.25 0 0 1 -6.269-5.07h0a348.2 348.2 0 0 0 -39.46-48.95L281.4 284.5 222.3 223.2a497.9 497.9 0 0 1 -35.4-36.32 12.03 12.03 0 0 0 -.922-1.382 35.4 35.4 0 0 1 -4.7-9.219V174.5a31.35 31.35 0 0 1 9.218-27.66c11.43-11.43 22.95-22.95 33.83-34.94 11.98 13.27 24.8 26 37.43 38.63h0a530.1 530.1 0 0 1 69.6 79.1 147.5 147.5 0 0 1 27.01 83.8A134.1 134.1 0 0 1 352.4 351.6z\"],\n    \"dyalog\": [416, 512, [], \"f399\", \"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"],\n    \"earlybirds\": [480, 512, [], \"f39a\", \"M313.2 47.5c1.2-13 21.3-14 36.6-8.7 .9 .3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2 .3 .9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2 .8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7 .9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2 .8-10.5-25.4 21.5-42.6 66.8-73.4 .7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1 .3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1 .6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7 .6 11.6 .8 12.7 2.6 .3 .5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"],\n    \"ebay\": [640, 512, [], \"f4f4\", \"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7 .4-42.4 .9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6 .3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\"],\n    \"edge\": [512, 512, [], \"f282\", \"M481.9 134.5C440.9 54.18 352.3 8 255.9 8 137.1 8 37.51 91.68 13.47 203.7c26-46.49 86.22-79.14 149.5-79.14 79.27 0 121.1 48.93 122.3 50.18 22 23.8 33 50.39 33 83.1 0 10.4-5.31 25.82-15.11 38.57-1.57 2-6.39 4.84-6.39 11 0 5.06 3.29 9.92 9.14 14 27.86 19.37 80.37 16.81 80.51 16.81A115.4 115.4 0 0 0 444.9 322a118.9 118.9 0 0 0 58.95-102.4C504.4 176.1 488.4 147.3 481.9 134.5zM212.8 475.7a154.9 154.9 0 0 1 -46.64-45c-32.94-47.42-34.24-95.6-20.1-136A155.5 155.5 0 0 1 203 215.8c59-45.2 94.84-5.65 99.06-1a80 80 0 0 0 -4.89-10.14c-9.24-15.93-24-36.41-56.56-53.51-33.72-17.69-70.59-18.59-77.64-18.59-38.71 0-77.9 13-107.5 35.69C35.68 183.3 12.77 208.7 8.6 243c-1.08 12.31-2.75 62.8 23 118.3a248 248 0 0 0 248.3 141.6C241.8 496.3 214.1 476.2 212.8 475.7zm250.7-98.33a7.76 7.76 0 0 0 -7.92-.23 181.7 181.7 0 0 1 -20.41 9.12 197.5 197.5 0 0 1 -69.55 12.52c-91.67 0-171.5-63.06-171.5-144A61.12 61.12 0 0 1 200.6 228 168.7 168.7 0 0 0 161.9 278c-14.92 29.37-33 88.13 13.33 151.7 6.51 8.91 23 30 56 47.67 23.57 12.65 49 19.61 71.7 19.61 35.14 0 115.4-33.44 163-108.9A7.75 7.75 0 0 0 463.5 377.3z\"],\n    \"edge-legacy\": [512, 512, [], \"e078\", \"M25.71 228.2l.35-.48c0 .16 0 .32-.07 .48zm460.6 15.51c0-44-7.76-84.46-28.81-122.4C416.5 47.88 343.9 8 258.9 8 119 7.72 40.62 113.2 26.06 227.7c42.42-61.31 117.1-121.4 220.4-125 0 0 109.7 0 99.42 105H170c6.37-37.39 18.55-59 34.34-78.93-75.05 34.9-121.8 96.1-120.8 188.3 .83 71.45 50.13 144.8 120.8 172 83.35 31.84 192.8 7.2 240.1-21.33V363.3C363.6 419.8 173.6 424.2 172.2 295.7H486.3V243.7z\"],\n    \"elementor\": [448, 512, [], \"f430\", \"M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z\"],\n    \"ello\": [496, 512, [], \"f5f1\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S384.1 8 248 8zm143.8 285.2C375.3 358.5 315.8 404.8 248 404.8s-127.3-46.29-143.8-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.6 90.11s102.5-37.2 116.6-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\"],\n    \"ember\": [640, 512, [], \"f423\", \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6 .5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7 .8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5 .3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7 .3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"],\n    \"empire\": [496, 512, [], \"f1d1\", \"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5 .8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"],\n    \"envira\": [448, 512, [], \"f299\", \"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"],\n    \"erlang\": [640, 512, [], \"f39d\", \"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9 .1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7 .5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\"],\n    \"ethereum\": [320, 512, [], \"f42e\", \"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"],\n    \"etsy\": [384, 512, [], \"f2d7\", \"M384 348c-1.75 10.75-13.75 110-15.5 132-117.9-4.299-219.9-4.743-368.5 0v-25.5c45.46-8.948 60.63-8.019 61-35.25 1.793-72.32 3.524-244.1 0-322-1.029-28.46-12.13-26.76-61-36v-25.5c73.89 2.358 255.9 8.551 362.1-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.9 115.7 313.2 68 277.3 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.25h25.75c-4.407 101.4-3.91 61.83-1.75 160.3H257c-9.155-40.09-9.065-61.04-39.5-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.64 0 66.56-24.1 98.75-99.75H384z\"],\n    \"evernote\": [384, 512, [], \"f839\", \"M120.8 132.2c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56 .22-.74 0-.37-.37L123.8 46.45c.38-.37 .6-.22 .38 .37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.5v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.9-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.8 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.1 8.91 238.5 7.8 238.5C362.1 485.5 267.1 480 267.1 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.8c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\"],\n    \"expeditedssl\": [496, 512, [], \"f23e\", \"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"],\n    \"facebook\": [512, 512, [62000], \"f09a\", \"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.8 90.69 226.4 209.3 245V327.7h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.3 482.4 504 379.8 504 256z\"],\n    \"facebook-f\": [320, 512, [], \"f39e\", \"M279.1 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.4 0 225.4 0c-73.22 0-121.1 44.38-121.1 124.7v70.62H22.89V288h81.39v224h100.2V288z\"],\n    \"facebook-messenger\": [512, 512, [], \"f39f\", \"M256.5 8C116.5 8 8 110.3 8 248.6c0 72.3 29.71 134.8 78.07 177.9 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.3c52.91-23.3 53.59-25.14 62.56-22.7C337.9 521.8 504 423.7 504 248.6 504 110.3 396.6 8 256.5 8zm149.2 185.1l-73 115.6a37.37 37.37 0 0 1 -53.91 9.93l-58.08-43.47a15 15 0 0 0 -18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.6a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z\"],\n    \"facebook-square\": [448, 512, [], \"f082\", \"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.3V327.7h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0 -48-48z\"],\n    \"fantasy-flight-games\": [512, 512, [], \"f6dc\", \"M256 32.86L32.86 256 256 479.1 479.1 256 256 32.86zM88.34 255.8c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.8-18.69 24.63 18.4 62.06 58.9 62.15 59 .68 .74 1.07 2.86 .58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43 .12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99zm234.8 101.6c-35.49 35.43-78.09 38.14-106.1 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64 .14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29 .26-.26 .65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\"],\n    \"fedex\": [640, 512, [], \"f797\", \"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\"],\n    \"fedora\": [448, 512, [], \"f798\", \"M.0413 255.8C.1219 132.2 100.3 32 224 32C347.7 32 448 132.3 448 256C448 379.7 347.8 479.9 224.1 480H50.93C22.84 480 .0832 457.3 .0416 429.2H0V255.8H.0413zM342.6 192.7C342.6 153 307 124.2 269.4 124.2C234.5 124.2 203.6 150.5 199.3 184.1C199.1 187.9 198.9 189.1 198.9 192.6C198.8 213.7 198.9 235.4 198.1 257C199 283.1 199.1 309.1 198.1 333.6C198.1 360.7 178.7 379.1 153.4 379.1C128.1 379.1 107.6 358.9 107.6 333.6C108.1 305.9 130.2 288.3 156.1 287.5H156.3L182.6 287.3V250L156.3 250.2C109.2 249.8 71.72 286.7 70.36 333.6C70.36 379.2 107.9 416.5 153.4 416.5C196.4 416.5 232.1 382.9 236 340.9L236.2 287.4L268.8 287.1C294.1 287.3 293.8 249.3 268.6 249.8L236.2 250.1C236.2 243.7 236.3 237.3 236.3 230.9C236.4 218.2 236.4 205.5 236.2 192.7C236.3 176.2 252 161.5 269.4 161.5C286.9 161.5 305.3 170.2 305.3 192.7C305.3 195.9 305.2 197.8 305 199C303.1 209.5 310.2 219.4 320.7 220.9C331.3 222.4 340.9 214.8 341.9 204.3C342.5 200.1 342.6 196.4 342.6 192.7H342.6z\"],\n    \"figma\": [384, 512, [], \"f799\", \"M14 95.79C14 42.89 56.89 0 109.8 0H274.2C327.1 0 369.1 42.89 369.1 95.79C369.1 129.3 352.8 158.8 326.7 175.9C352.8 193 369.1 222.5 369.1 256C369.1 308.9 327.1 351.8 274.2 351.8H272.1C247.3 351.8 224.7 342.4 207.7 326.9V415.2C207.7 468.8 163.7 512 110.3 512C57.54 512 14 469.2 14 416.2C14 382.7 31.19 353.2 57.24 336.1C31.19 318.1 14 289.5 14 256C14 222.5 31.2 193 57.24 175.9C31.2 158.8 14 129.3 14 95.79zM176.3 191.6H109.8C74.22 191.6 45.38 220.4 45.38 256C45.38 291.4 73.99 320.2 109.4 320.4C109.5 320.4 109.7 320.4 109.8 320.4H176.3V191.6zM207.7 256C207.7 291.6 236.5 320.4 272.1 320.4H274.2C309.7 320.4 338.6 291.6 338.6 256C338.6 220.4 309.7 191.6 274.2 191.6H272.1C236.5 191.6 207.7 220.4 207.7 256zM109.8 351.8C109.7 351.8 109.5 351.8 109.4 351.8C73.99 352 45.38 380.8 45.38 416.2C45.38 451.7 74.6 480.6 110.3 480.6C146.6 480.6 176.3 451.2 176.3 415.2V351.8H109.8zM109.8 31.38C74.22 31.38 45.38 60.22 45.38 95.79C45.38 131.4 74.22 160.2 109.8 160.2H176.3V31.38H109.8zM207.7 160.2H274.2C309.7 160.2 338.6 131.4 338.6 95.79C338.6 60.22 309.7 31.38 274.2 31.38H207.7V160.2z\"],\n    \"firefox\": [512, 512, [], \"f269\", \"M503.5 241.5c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.9 245.9 0 0 0 -7.32-41.15c0-.12 0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27 8.27 0 0 0 -.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48 0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07 18.07 0 0 0 -1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63 15.63 0 0 0 -1.2-1.8L463.2 119a15.63 15.63 0 0 0 -1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.8 248.8 0 0 0 -23.51-26.64A186.8 186.8 0 0 0 412 62.46c-4-3.48-8.16-6.72-12.48-9.84a162.5 162.5 0 0 0 -24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254 254 0 0 0 -55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.4 236.4 0 0 0 -38-4H255.1a234.6 234.6 0 0 0 -45.48 5c-33.59 7.08-63.23 21.24-82.91 39-1.08 1-1.92 1.68-2.4 2.16l-.48 .48H124l-.12 .12 .12-.12a.12 .12 0 0 0 .12-.12l-.12 .12a.42 .42 0 0 1 .24-.12c14.64-8.76 34.92-16 49.44-19.56l5.88-1.44c.36-.12 .84-.12 1.2-.24 1.68-.36 3.36-.72 5.16-1.08 .24 0 .6-.12 .84-.12C250.9 20.94 319.3 40.14 367 85.61a171.5 171.5 0 0 1 26.88 32.76c30.36 49.2 27.48 111.1 3.84 147.6-34.44 53-111.3 71.27-159 24.84a84.19 84.19 0 0 1 -25.56-59 74.05 74.05 0 0 1 6.24-31c1.68-3.84 13.08-25.67 18.24-24.59-13.08-2.76-37.55 2.64-54.71 28.19-15.36 22.92-14.52 58.2-5 83.28a132.9 132.9 0 0 1 -12.12-39.24c-12.24-82.55 43.31-153 94.31-170.5-27.48-24-96.47-22.31-147.7 15.36-29.88 22-51.23 53.16-62.51 90.36 1.68-20.88 9.6-52.08 25.8-83.88-17.16 8.88-39 37-49.8 62.88-15.6 37.43-21 82.19-16.08 124.8 .36 3.24 .72 6.36 1.08 9.6 19.92 117.1 122 206.4 244.8 206.4C392.8 503.4 504 392.2 504 255 503.9 250.5 503.8 245.9 503.5 241.5z\"],\n    \"firefox-browser\": [512, 512, [], \"e007\", \"M130.2 127.5C130.4 127.6 130.3 127.6 130.2 127.5V127.5zM481.6 172.9C471 147.4 449.6 119.9 432.7 111.2C446.4 138.1 454.4 165 457.4 185.2C457.4 185.3 457.4 185.4 457.5 185.6C429.9 116.8 383.1 89.11 344.9 28.75C329.9 5.058 333.1 3.518 331.8 4.088L331.7 4.158C284.1 30.11 256.4 82.53 249.1 126.9C232.5 127.8 216.2 131.9 201.2 139C199.8 139.6 198.7 140.7 198.1 142C197.4 143.4 197.2 144.9 197.5 146.3C197.7 147.2 198.1 147.1 198.6 148.6C199.1 149.3 199.8 149.9 200.5 150.3C201.3 150.7 202.1 150.1 202.1 151.1C203.8 151.1 204.7 151 205.5 150.8L206 150.6C221.5 143.3 238.4 139.4 255.5 139.2C318.4 138.7 352.7 183.3 363.2 201.5C350.2 192.4 326.8 183.3 304.3 187.2C392.1 231.1 368.5 381.8 246.1 376.4C187.5 373.8 149.9 325.5 146.4 285.6C146.4 285.6 157.7 243.7 227 243.7C234.5 243.7 255.1 222.8 256.4 216.7C256.3 214.7 213.8 197.8 197.3 181.5C188.4 172.8 184.2 168.6 180.5 165.5C178.5 163.8 176.4 162.2 174.2 160.7C168.6 141.2 168.4 120.6 173.5 101.1C148.4 112.5 128.1 130.5 114.8 146.4H114.7C105 134.2 105.7 93.78 106.3 85.35C106.1 84.82 99.02 89.02 98.1 89.66C89.53 95.71 81.55 102.6 74.26 110.1C57.97 126.7 30.13 160.2 18.76 211.3C14.22 231.7 12 255.7 12 263.6C12 398.3 121.2 507.5 255.9 507.5C376.6 507.5 478.9 420.3 496.4 304.9C507.9 228.2 481.6 173.8 481.6 172.9z\"],\n    \"first-order\": [448, 512, [], \"f2b0\", \"M12.9 229.2c.1-.1 .2-.3 .3-.4 0 .1 0 .3-.1 .4h-.2zM224 96.6c-7.1 0-14.6 .6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"],\n    \"first-order-alt\": [496, 512, [], \"f50a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S384.1 8 248 8zm0 488.2C115.3 496.2 7.79 388.7 7.79 256S115.3 15.79 248 15.79 488.2 123.3 488.2 256 380.7 496.2 248 496.2zm0-459.9C126.7 36.29 28.29 134.7 28.29 256S126.7 475.7 248 475.7 467.7 377.3 467.7 256 369.3 36.29 248 36.29zm0 431.2c-116.8 0-211.5-94.69-211.5-211.5S131.2 44.49 248 44.49 459.5 139.2 459.5 256 364.8 467.5 248 467.5zm186.2-162.1a191.6 191.6 0 0 1 -20.13 48.69l-74.13-35.88 61.48 54.82a193.5 193.5 0 0 1 -37.2 37.29l-54.8-61.57 35.88 74.27a190.9 190.9 0 0 1 -48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.4 191.4 0 0 1 -48.65-20.2l35.93-74.34-54.87 61.64a193.9 193.9 0 0 1 -37.22-37.28l61.59-54.9-74.26 35.93a191.6 191.6 0 0 1 -20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.7 191.7 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.9 193.9 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.5 191.5 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71 .62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.1 193.1 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.5 191.5 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"],\n    \"firstdraft\": [384, 512, [], \"f3a1\", \"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"],\n    \"flickr\": [448, 512, [], \"f16e\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"],\n    \"flipboard\": [448, 512, [], \"f44d\", \"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"],\n    \"fly\": [384, 512, [], \"f417\", \"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9 .3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3 .1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"],\n    \"font-awesome\": [448, 512, [62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M448 48V384C385 407 366 416 329 416C266 416 242 384 179 384C159 384 143 388 128 392V328C143 324 159 320 179 320C242 320 266 352 329 352C349 352 364 349 384 343V135C364 141 349 144 329 144C266 144 242 112 179 112C128 112 104 133 64 141V448C64 466 50 480 32 480S0 466 0 448V64C0 46 14 32 32 32S64 46 64 64V77C104 69 128 48 179 48C242 48 266 80 329 80C366 80 385 71 448 48z\"],\n    \"fonticons\": [448, 512, [], \"f280\", \"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\"],\n    \"fonticons-fi\": [384, 512, [], \"f3a2\", \"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"],\n    \"fort-awesome\": [512, 512, [], \"f286\", \"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"],\n    \"fort-awesome-alt\": [512, 512, [], \"f3a3\", \"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1 .7 .1 1.3 .1 2 .1 1.3 .1 2.7 .2 4 0 .8 .1 1.5 .1 2.3 0 1.3 .1 2.5 .2 3.7 .1 .8 .1 1.6 .2 2.4 .1 1.1 .2 2.3 .3 3.5 0 .8 .1 1.6 .2 2.4 .1 1.2 .3 2.4 .4 3.6 .1 .8 .2 1.5 .3 2.3 .1 1.3 .3 2.6 .5 3.9 .1 .6 .2 1.3 .3 1.9l.9 5.7c.1 .6 .2 1.1 .3 1.7 .3 1.3 .5 2.7 .8 4 .2 .8 .3 1.6 .5 2.4 .2 1 .5 2.1 .7 3.2 .2 .9 .4 1.7 .6 2.6 .2 1 .4 2 .7 3 .2 .9 .5 1.8 .7 2.7 .3 1 .5 1.9 .8 2.9 .3 .9 .5 1.8 .8 2.7 .2 .9 .5 1.9 .8 2.8s.5 1.8 .8 2.7c.3 1 .6 1.9 .9 2.8 .6 1.6 1.1 3.3 1.7 4.9 .4 1 .7 1.9 1 2.8 .3 1 .7 2 1.1 3 .3 .8 .6 1.5 .9 2.3l1.2 3c.3 .7 .6 1.5 .9 2.2 .4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3 .7 .6 1.3 .9 2 .5 1 1 2.1 1.5 3.1 .2 .6 .5 1.1 .8 1.7 .6 1.1 1.1 2.2 1.7 3.3 .1 .2 .2 .3 .3 .5 2.2 4.1 4.4 8.2 6.8 12.2 .2 .4 .5 .8 .7 1.2 .7 1.1 1.3 2.2 2 3.3 .3 .5 .6 .9 .9 1.4 .6 1.1 1.3 2.1 2 3.2 .3 .5 .6 .9 .9 1.4 .7 1.1 1.4 2.1 2.1 3.2 .2 .4 .5 .8 .8 1.2 .7 1.1 1.5 2.2 2.3 3.3 .2 .2 .3 .5 .5 .7 37.5 51.7 94.4 88.5 160 99.4 .9 .1 1.7 .3 2.6 .4 1 .2 2.1 .4 3.1 .5s1.9 .3 2.8 .4c1 .2 2 .3 3 .4 .9 .1 1.9 .2 2.9 .3s1.9 .2 2.9 .3 2.1 .2 3.1 .3c.9 .1 1.8 .1 2.7 .2 1.1 .1 2.3 .1 3.4 .2 .8 0 1.7 .1 2.5 .1 1.3 0 2.6 .1 3.9 .1 .7 .1 1.4 .1 2.1 .1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1 .8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2 .9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5 .9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4 .2-.2 .3-.5 .5-.7 .8-1.1 1.5-2.2 2.3-3.3 .2-.4 .5-.8 .8-1.2 .7-1.1 1.4-2.1 2.1-3.2 .3-.5 .6-.9 .9-1.4 .6-1.1 1.3-2.1 2-3.2 .3-.5 .6-.9 .9-1.4 .7-1.1 1.3-2.2 2-3.3 .2-.4 .5-.8 .7-1.2 2.4-4 4.6-8.1 6.8-12.2 .1-.2 .2-.3 .3-.5 .6-1.1 1.1-2.2 1.7-3.3 .2-.6 .5-1.1 .8-1.7 .5-1 1-2.1 1.5-3.1 .3-.7 .6-1.3 .9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7 .6-1.5 .9-2.2l1.2-3c.3-.8 .6-1.5 .9-2.3 .4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9 .3-1 .6-1.9 .9-2.8s.5-1.8 .8-2.7c.2-.9 .5-1.9 .8-2.8s.6-1.8 .8-2.7c.3-1 .5-1.9 .8-2.9 .2-.9 .5-1.8 .7-2.7 .2-1 .5-2 .7-3 .2-.9 .4-1.7 .6-2.6 .2-1 .5-2.1 .7-3.2 .2-.8 .3-1.6 .5-2.4 .3-1.3 .6-2.7 .8-4 .1-.6 .2-1.1 .3-1.7l.9-5.7c.1-.6 .2-1.3 .3-1.9 .1-1.3 .3-2.6 .5-3.9 .1-.8 .2-1.5 .3-2.3 .1-1.2 .3-2.4 .4-3.6 0-.8 .1-1.6 .2-2.4 .1-1.1 .2-2.3 .3-3.5 .1-.8 .1-1.6 .2-2.4 .1 1.7 .1 .5 .2-.7 0-.8 .1-1.5 .1-2.3 .1-1.3 .2-2.7 .2-4 .1-.7 .1-1.3 .1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\"],\n    \"forumbee\": [448, 512, [], \"f211\", \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"],\n    \"foursquare\": [368, 512, [], \"f180\", \"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9 .9-1.8 .6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"],\n    \"free-code-camp\": [576, 512, [], \"f2c5\", \"M97.22 96.21c10.36-10.65 16-17.12 16-21.9 0-2.76-1.92-5.51-3.83-7.42A14.81 14.81 0 0 0 101 64.05c-8.48 0-20.92 8.79-35.84 25.69C23.68 137 2.51 182.8 3.37 250.3s17.47 117 54.06 161.9C76.22 435.9 90.62 448 100.9 448a13.55 13.55 0 0 0 8.37-3.84c1.91-2.76 3.81-5.63 3.81-8.38 0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25 188.8 54 137.8 97.22 96.21zM239.5 420.1c.58 .37 .91 .55 .91 .55zm93.79 .55 .17-.13C333.2 420.6 333.2 420.7 333.3 420.6zm3.13-158.2c-16.24-4.15 50.41-82.89-68.05-177.2 0 0 15.54 49.38-62.83 159.6-74.27 104.3 23.46 168.7 34 175.2-6.73-4.35-47.4-35.7 9.55-128.6 11-18.3 25.53-34.87 43.5-72.16 0 0 15.91 22.45 7.6 71.13C287.7 364 354 342.9 355 343.9c22.75 26.78-17.72 73.51-21.58 76.55 5.49-3.65 117.7-78 33-188.1C360.4 238.4 352.6 266.6 336.4 262.4zM510.9 89.69C496 72.79 483.5 64 475 64a14.81 14.81 0 0 0 -8.39 2.84c-1.91 1.91-3.83 4.66-3.83 7.42 0 4.78 5.6 11.26 16 21.9 43.23 41.61 65 92.59 64.82 154.1-.16 68-23 122.6-67.48 165-9.34 8.35-13.18 14.92-13.2 20.55 0 2.75 1.9 5.62 3.81 8.38A13.61 13.61 0 0 0 475.1 448c10.28 0 24.68-12.13 43.47-35.79 36.59-44.85 53.14-94.38 54.06-161.9S552.3 137 510.9 89.69z\"],\n    \"freebsd\": [448, 512, [], \"f3a4\", \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4 .9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"],\n    \"fulcrum\": [320, 512, [], \"f50b\", \"M95.75 164.1l-35.38 43.55L25 164.1l35.38-43.55zM144.2 0l-20.54 198.2L72.72 256l51 57.82L144.2 512V300.9L103.2 256l41.08-44.89zm79.67 164.1l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.8 247 256l-51-57.82L175.4 0z\"],\n    \"galactic-republic\": [496, 512, [], \"f50c\", \"M248 504C111.3 504 0 392.8 0 256S111.3 8 248 8s248 111.3 248 248-111.3 248-248 248zm0-479.5C120.4 24.53 16.53 128.4 16.53 256S120.4 487.5 248 487.5 479.5 383.6 479.5 256 375.6 24.53 248 24.53zm27.62 21.81v24.62a185.9 185.9 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.1-41.8zm-55.37 .07c-37.64 4.94-72.16 19.8-100.9 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.87 77.87 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.2 30.72l-17.36 17.36a186.3 186.3 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101zm-335.5 .13c-22.06 28.72-36.91 63.26-41.85 100.9h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.7c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.1h-24.62zM136.7 406.4l-17.36 17.36c28.73 22.09 63.3 36.98 100.1 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.5 .05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.1-41.85l-17.31-17.39h-.08z\"],\n    \"galactic-senate\": [512, 512, [], \"f50d\", \"M249.9 33.48v26.07C236.3 80.17 226 168.1 225.4 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32 .75-10.53 2.19-15.65 .65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.8-10.91-194.7-24.49-215.4V33.48h-12.28zm-26.34 147.8c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68 .18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51 .73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47 .96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.5 147.5 0 0 0 -27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.8-1.45-156.4 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.3 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87 .01 .01-.01 .04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19 .02 16.37-1.07 24.04-3.21 .01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43 .39 95.49 20.26 108 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.4-29.17-156.4-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.8 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19 .07-21.6 .36-30.5 1.66 .43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28 .94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76 .42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09 .02-.17 .04-.27 .05-.05 .01-.11 .04-.16 .05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"],\n    \"get-pocket\": [448, 512, [], \"f265\", \"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"],\n    \"gg\": [512, 512, [], \"f260\", \"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"],\n    \"gg-circle\": [512, 512, [], \"f261\", \"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"],\n    \"git\": [512, 512, [], \"f1d3\", \"M216.3 158.4H137C97 147.9 6.51 150.6 6.51 233.2c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.6 0 393.4 0 411.6c0 32.11 28.05 50.82 101.6 50.82 70.75 0 111.8-26.42 111.8-73.18 0-58.66-45.16-56.5-151.6-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.9 32.1-104.9 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.6c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.5v-32.1c26.75-3.66 27.24-2 27.24-11V203.6c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.7c0 6.51 .4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.3c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.5c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.8c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\"],\n    \"git-alt\": [448, 512, [], \"f841\", \"M439.5 236.1L244 40.45a28.87 28.87 0 0 0 -40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.2 199v121.8c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1 -48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.6 101 8.45 235.1a28.86 28.86 0 0 0 0 40.81l195.6 195.6a28.86 28.86 0 0 0 40.8 0l194.7-194.7a28.86 28.86 0 0 0 0-40.81z\"],\n    \"git-square\": [448, 512, [], \"f1d2\", \"M100.6 334.2c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52 .01-5.09 3.29-9.4 6.6-13.46zm27.95-116.6c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47 .75-44.47zM448 80v352a48 48 0 0 1 -48 48H48a48 48 0 0 1 -48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.6 127 243.9 127c-14.48 0-22.88 7.84-22.88 22.31zM199.2 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.2 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.4 81.53 385 127.5 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.8l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.5h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z\"],\n    \"github\": [496, 512, [], \"f09b\", \"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"],\n    \"github-alt\": [480, 512, [], \"f113\", \"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"],\n    \"github-square\": [448, 512, [], \"f092\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4 .2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9 .2 36.5 .2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9 .4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7 .6 3.9 1.9 .3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2 .2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7 .9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2 .4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8 .9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1 .9-1.1 2.8-.9 4.3 .6 1.3 1.3 1.8 3.3 .9 4.1zm-9.1-9.1c-.9 .6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9 .9-2.4 .4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5 .9-.9 2.4-.4 3.5 .6 1.1 1.3 1.3 2.8 .4 3.5zm-6.7-7.4c-.4 .9-1.7 1.1-2.8 .4-1.3-.6-1.9-1.7-1.5-2.6 .4-.6 1.5-.9 2.8-.4 1.3 .7 1.9 1.8 1.5 2.6z\"],\n    \"gitkraken\": [592, 512, [], \"f3a6\", \"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8 .4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"],\n    \"gitlab\": [512, 512, [], \"f296\", \"M510.5 284.5l-27.26-83.96c.012 .038 .016 .077 .028 .115-.013-.044-.021-.088-.033-.132v-.01L429.1 33.87a21.33 21.33 0 0 0 -20.44-14.6A21.04 21.04 0 0 0 388.5 34L337.1 192.2H175L123.5 33.99A21.03 21.03 0 0 0 103.3 19.27h-.113A21.47 21.47 0 0 0 82.86 34L28.89 200.5l-.008 .021v0c-.013 .042-.019 .084-.033 .127 .012-.038 .017-.077 .029-.115L1.514 284.5a30.6 30.6 0 0 0 11.12 34.28L248.9 490.4c.035 .026 .074 .041 .109 .067 .1 .072 .2 .146 .3 .214-.1-.065-.187-.136-.282-.2l0 0c.015 .012 .033 .02 .05 .031s.027 .015 .041 .024l.006 0a11.99 11.99 0 0 0 1.137 .7c.054 .03 .1 .068 .157 .1l0 0c.033 .016 .064 .038 .1 .054s.053 .02 .077 .032 .038 .015 .056 .023c.044 .021 .092 .034 .136 .057 .205 .1 .421 .178 .633 .264 .2 .082 .389 .177 .592 .248l.025 .011c.034 .012 .064 .028 .1 .04s.083 .032 .125 .046l.05 .012c.053 .016 .11 .024 .163 .039 .019 .006 .042 .009 .063 .015 .284 .086 .579 .148 .872 .213 .115 .026 .225 .062 .341 .083 .017 0 .032 .009 .05 .012 .038 .008 .073 .021 .112 .027 .062 .011 .122 .031 .186 .04 .049 .007 .1 0 .151 .012h.033a11.92 11.92 0 0 0 1.7 .136h.019a11.97 11.97 0 0 0 1.7-.136h.033c.05-.008 .1 0 .153-.012s.124-.029 .187-.04c.038-.006 .073-.019 .11-.027 .017 0 .032-.009 .049-.012 .118-.023 .231-.059 .349-.084 .288-.064 .578-.126 .861-.21 .019-.006 .039-.008 .059-.014 .055-.017 .113-.024 .169-.041 .016-.006 .035-.007 .051-.012 .044-.013 .086-.032 .129-.047s.063-.028 .1-.041l.026-.01c.214-.076 .417-.175 .627-.261s.394-.154 .584-.245c.047-.023 .1-.036 .142-.059 .018-.009 .04-.015 .058-.024s.053-.02 .078-.033 .068-.04 .1-.056l0 0c.056-.028 .106-.069 .161-.1a12.34 12.34 0 0 0 1.132-.695c.029-.02 .062-.035 .092-.056 .008-.006 .017-.009 .024-.015 .035-.026 .076-.043 .11-.068l236.3-171.7A30.6 30.6 0 0 0 510.5 284.5zM408.8 49.48l46.34 142.7H362.5zm-305.6 0 46.43 142.7H56.95zM26.82 299.3a6.526 6.526 0 0 1 -2.361-7.308l20.34-62.42L193.8 420.6zm38.24-82.97h92.41L223.4 419.2zm183.4 273.8c-.047-.038-.092-.079-.138-.118-.009-.008-.018-.018-.028-.026-.091-.075-.18-.152-.268-.231-.172-.15-.341-.3-.5-.462 .014 .012 .029 .022 .043 .035l.055 .046a12.19 12.19 0 0 0 1.091 .929l.012 .011c.018 .013 .033 .03 .051 .045C248.7 490.3 248.6 490.2 248.5 490.1zm7.514-48.48L217.2 322.2 182.8 216.3H329.3zm7.935 48.11c-.091 .079-.178 .157-.27 .233l-.032 .028c-.047 .038-.091 .079-.136 .117-.1 .08-.209 .152-.313 .229 .018-.013 .033-.032 .053-.044l.009-.009a11.69 11.69 0 0 0 1.086-.926c.014-.013 .03-.024 .044-.036s.038-.03 .054-.047C264.3 489.4 264.1 489.6 263.9 489.7zm90.7-273.5h92.4l-18.91 24.23-139.5 178.7zm130.6 82.97L318.2 420.6 467.3 229.5l20.26 62.39A6.528 6.528 0 0 1 485.2 299.2z\"],\n    \"gitter\": [384, 512, [], \"f426\", \"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"],\n    \"glide\": [448, 512, [], \"f2a5\", \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8 .1 4.1-1.7 4.1-3.5z\"],\n    \"glide-g\": [448, 512, [], \"f2a6\", \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9 .1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"],\n    \"gofore\": [400, 512, [], \"f3a7\", \"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"],\n    \"golang\": [640, 512, [], \"e40f\", \"M400.1 194.8C389.2 197.6 380.2 199.1 371 202.4C363.7 204.3 356.3 206.3 347.8 208.5L347.2 208.6C343 209.8 342.6 209.9 338.7 205.4C334 200.1 330.6 196.7 324.1 193.5C304.4 183.9 285.4 186.7 267.7 198.2C246.5 211.9 235.6 232.2 235.9 257.4C236.2 282.4 253.3 302.9 277.1 306.3C299.1 309.1 316.9 301.7 330.9 285.8C333 283.2 334.9 280.5 337 277.5V277.5L337 277.5C337.8 276.5 338.5 275.4 339.3 274.2H279.2C272.7 274.2 271.1 270.2 273.3 264.9C277.3 255.2 284.8 239 289.2 230.9C290.1 229.1 292.3 225.1 296.1 225.1H397.2C401.7 211.7 409 198.2 418.8 185.4C441.5 155.5 468.1 139.9 506 133.4C537.8 127.8 567.7 130.9 594.9 149.3C619.5 166.1 634.7 188.9 638.8 218.8C644.1 260.9 631.9 295.1 602.1 324.4C582.4 345.3 557.2 358.4 528.2 364.3C522.6 365.3 517.1 365.8 511.7 366.3C508.8 366.5 506 366.8 503.2 367.1C474.9 366.5 449 358.4 427.2 339.7C411.9 326.4 401.3 310.1 396.1 291.2C392.4 298.5 388.1 305.6 382.1 312.3C360.5 341.9 331.2 360.3 294.2 365.2C263.6 369.3 235.3 363.4 210.3 344.7C187.3 327.2 174.2 304.2 170.8 275.5C166.7 241.5 176.7 210.1 197.2 184.2C219.4 155.2 248.7 136.8 284.5 130.3C313.8 124.1 341.8 128.4 367.1 145.6C383.6 156.5 395.4 171.4 403.2 189.5C405.1 192.3 403.8 193.9 400.1 194.8zM48.3 200.4C47.05 200.4 46.74 199.8 47.36 198.8L53.91 190.4C54.53 189.5 56.09 188.9 57.34 188.9H168.6C169.8 188.9 170.1 189.8 169.5 190.7L164.2 198.8C163.6 199.8 162 200.7 161.1 200.7L48.3 200.4zM1.246 229.1C0 229.1-.3116 228.4 .3116 227.5L6.855 219.1C7.479 218.2 9.037 217.5 10.28 217.5H152.4C153.6 217.5 154.2 218.5 153.9 219.4L151.4 226.9C151.1 228.1 149.9 228.8 148.6 228.8L1.246 229.1zM75.72 255.9C75.1 256.8 75.41 257.7 76.65 257.7L144.6 258C145.5 258 146.8 257.1 146.8 255.9L147.4 248.4C147.4 247.1 146.8 246.2 145.5 246.2H83.2C81.95 246.2 80.71 247.1 80.08 248.1L75.72 255.9zM577.2 237.9C577 235.3 576.9 233.1 576.5 230.9C570.9 200.1 542.5 182.6 512.9 189.5C483.9 196 465.2 214.4 458.4 243.7C452.8 268 464.6 292.6 487 302.6C504.2 310.1 521.3 309.2 537.8 300.7C562.4 287.1 575.8 268 577.4 241.2C577.3 240 577.3 238.9 577.2 237.9z\"],\n    \"goodreads\": [448, 512, [], \"f3a8\", \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8 .3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9 .4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2 .5-1 1.1-1.9 1.7-2.9 .2 .1 .4 .1 .6 .2 .3 3.8 .2 30.7 .1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"],\n    \"goodreads-g\": [384, 512, [], \"f3a9\", \"M42.6 403.3h2.8c12.7 0 25.5 0 38.2 .1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5 .1-5.8 .3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3 .6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3 .5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3 .1 332.2 .1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"],\n    \"google\": [488, 512, [], \"f1a0\", \"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"],\n    \"google-drive\": [512, 512, [], \"f3aa\", \"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"],\n    \"google-pay\": [640, 512, [], \"e079\", \"M105.7 215v41.25h57.1a49.66 49.66 0 0 1 -21.14 32.6c-9.54 6.55-21.72 10.28-36 10.28-27.6 0-50.93-18.91-59.3-44.22a65.61 65.61 0 0 1 0-41l0 0c8.37-25.46 31.7-44.37 59.3-44.37a56.43 56.43 0 0 1 40.51 16.08L176.5 155a101.2 101.2 0 0 0 -70.75-27.84 105.6 105.6 0 0 0 -94.38 59.11 107.6 107.6 0 0 0 0 96.18v.15a105.4 105.4 0 0 0 94.38 59c28.47 0 52.55-9.53 70-25.91 20-18.61 31.41-46.15 31.41-78.91A133.8 133.8 0 0 0 205.4 215zm389.4-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46 0-39.34 8.34-50.5 24.86l20.85 13.26q11.45-17 31.26-17a34.05 34.05 0 0 1 22.75 8.79A28.14 28.14 0 0 1 487.8 248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44 0-29.65 3.88-39.49 11.77s-14.82 18.31-14.82 31.56a39.74 39.74 0 0 0 13.94 31.27c9.25 8.34 21 12.51 34.79 12.51 16.29 0 29.21-7.3 39-21.89h1v17.72h22.61V250C510.3 233.4 505.3 220.3 495.1 211zM475.9 300.3a37.32 37.32 0 0 1 -26.57 11.16A28.61 28.61 0 0 1 431 305.2a19.41 19.41 0 0 1 -7.77-15.63c0-7 3.22-12.81 9.54-17.42s14.53-7 24.07-7C470 265 480.3 268 487.6 273.9 487.6 284.1 483.7 292.9 475.9 300.3zm-93.65-142A55.71 55.71 0 0 0 341.7 142H279.1V328.7H302.7V253.1h39c16 0 29.5-5.36 40.51-15.93 .88-.89 1.76-1.79 2.65-2.68A54.45 54.45 0 0 0 382.3 158.3zm-16.58 62.23a30.65 30.65 0 0 1 -23.34 9.68H302.7V165h39.63a32 32 0 0 1 22.6 9.23A33.18 33.18 0 0 1 365.7 220.5zM614.3 201 577.8 292.7h-.45L539.9 201H514.2L566 320.5l-29.35 64.32H561L640 201z\"],\n    \"google-play\": [512, 512, [], \"f3ab\", \"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"],\n    \"google-plus\": [512, 512, [], \"f2b3\", \"M256 8C119.1 8 8 119.1 8 256S119.1 504 256 504 504 392.9 504 256 392.9 8 256 8zM185.3 380a124 124 0 0 1 0-248c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1S142.3 334 185.3 334c32.6 0 64.9-19.1 70.1-53.3H185.3V238.1H302.2a109.2 109.2 0 0 1 1.9 20.7c0 70.8-47.5 121.2-118.8 121.2zM415.5 273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5z\"],\n    \"google-plus-g\": [640, 512, [], \"f0d5\", \"M386.1 228.5c1.834 9.692 3.143 19.38 3.143 31.96C389.2 370.2 315.6 448 204.8 448c-106.1 0-192-85.92-192-192s85.92-192 192-192c51.86 0 95.08 18.86 128.6 50.29l-52.13 50.03c-14.15-13.62-39.03-29.6-76.49-29.6-65.48 0-118.9 54.22-118.9 121.3 0 67.06 53.44 121.3 118.9 121.3 75.96 0 104.5-54.74 108.1-82.77H204.8v-66.01h181.3zm185.4 6.437V179.2h-56v55.73h-55.73v56h55.73v55.73h56v-55.73H627.2v-56h-55.73z\"],\n    \"google-plus-square\": [448, 512, [], \"f0d4\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z\"],\n    \"google-wallet\": [448, 512, [], \"f1ee\", \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"],\n    \"gratipay\": [496, 512, [], \"f184\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"],\n    \"grav\": [512, 512, [], \"f2d6\", \"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8 .8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1 .3-6.4 0-13-9.4-24.9 3.9-12.5 .3-22.4 .3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8 .1-.2 .3-.4 .4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7 .3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"],\n    \"gripfire\": [384, 512, [], \"f3ac\", \"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4 .4 3.3 .6 6.7 .6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"],\n    \"grunt\": [384, 512, [], \"f3ad\", \"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1 .7-7.5 2.2-12.8 4-16.6 .4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8 .6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6 .6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1 .4-4.7 .8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5 .9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3 .2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7 .3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7 .5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2 .8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6 .7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4 .1-6.6 .5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4 .3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6 .9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7 .2 .2 .4 .3 .4 .3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1 .4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5 .6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9 .7 .6 1.5 1.2 2.2 1.8l.5 .4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6 .9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3 .3-11.7 .7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2 .9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6 .9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2 .9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"],\n    \"guilded\": [448, 512, [], \"e07e\", \"M443.4 64H4.571c0 103.3 22.19 180.1 43.42 222.4C112 414.1 224 448 225.3 448a312.8 312.8 0 0 0 140.6-103.5c25.91-33.92 53.1-87.19 65.92-145.8H171.8c4.14 36.43 22.18 67.95 45.1 86.94h88.59c-17.01 28.21-48.19 54.4-80.46 69.48-31.23-13.26-69.09-46.54-96.55-98.36-26.73-53.83-27.09-105.9-27.09-105.9H437.6A625.9 625.9 0 0 0 443.4 64z\"],\n    \"gulp\": [256, 512, [], \"f3ae\", \"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7 .9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3 .2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5 .9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9 .1-1.8 .3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6 .8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5 .6 .2 1.1 .4 1.6 .7 2.6 1.8 1.6 4.5 .3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3 .5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4 .5 3.2 1.5 1.7 2.2 1.3 4.5 .4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9 .9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2 .4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3 .5-.4 .9-.6 .6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3 .8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7 .2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3 .9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3 .2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8 .1 26.3 .4l12.6-48.7L228.1 .6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1 .1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2 .8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2 .1-.3l.2-.7c-1.8 .6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7 .1 13.9-1.6 13.9-3.7z\"],\n    \"hacker-news\": [448, 512, [], \"f1d4\", \"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1 .2-.3 .3-.4 0 .1 0 .3-.1 .4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"],\n    \"hacker-news-square\": [448, 512, [], \"f3af\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1 .2-.3 .3-.4 0 .1 0 .3-.1 .4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"],\n    \"hackerrank\": [512, 512, [], \"f5f7\", \"M477.5 128C463 103.1 285.1 0 256.2 0S49.25 102.8 34.84 128s-14.49 230.8 0 256 192.4 128 221.3 128S463 409.1 477.5 384s14.51-231 .01-256zM316.1 414.2c-4 0-40.91-35.77-38-38.69 .87-.87 6.26-1.48 17.55-1.83 0-26.23 .59-68.59 .94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88 .23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11 .92-33.44 3-84-.15-212.7v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87 .87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.4h80.26c0-4.55 .39-34.74-1.2-83.64-.1-3.39 .95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.6 336 341.3 336 373.7c8.87 .35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\"],\n    \"hashnode\": [512, 512, [], \"e499\", \"M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z\"],\n    \"hips\": [640, 512, [], \"f452\", \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7 .9-2.7 2.7v279.2c0 1.9 .9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5 .4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4 .2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3 .7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8 .6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7 .1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2 .1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"],\n    \"hire-a-helper\": [512, 512, [], \"f3b0\", \"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4 .1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"],\n    \"hive\": [512, 512, [], \"e07f\", \"M260.4 254.9 131.5 33.1a2.208 2.208 0 0 0 -3.829 .009L.3 254.9A2.234 2.234 0 0 0 .3 257.1L129.1 478.9a2.208 2.208 0 0 0 3.83-.009L260.4 257.1A2.239 2.239 0 0 0 260.4 254.9zm39.08-25.71a2.19 2.19 0 0 0 1.9 1.111h66.51a2.226 2.226 0 0 0 1.9-3.341L259.1 33.11a2.187 2.187 0 0 0 -1.9-1.111H190.7a2.226 2.226 0 0 0 -1.9 3.341zM511.7 254.9 384.9 33.11A2.2 2.2 0 0 0 382.1 32h-66.6a2.226 2.226 0 0 0 -1.906 3.34L440.7 256 314.5 476.7a2.226 2.226 0 0 0 1.906 3.34h66.6a2.2 2.2 0 0 0 1.906-1.112L511.7 257.1A2.243 2.243 0 0 0 511.7 254.9zM366 284.9H299.5a2.187 2.187 0 0 0 -1.9 1.111l-108.8 190.6a2.226 2.226 0 0 0 1.9 3.341h66.51a2.187 2.187 0 0 0 1.9-1.111l108.8-190.6A2.226 2.226 0 0 0 366 284.9z\"],\n    \"hooli\": [640, 512, [], \"f427\", \"M144.5 352l38.3 .8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4 .8c36.5 12.5 69.9 14.2 94.7 7.2-19.9 .2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3 .1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\"],\n    \"hornbill\": [512, 512, [], \"f592\", \"M76.38 370.3a37.8 37.8 0 1 1 -32.07-32.42c-78.28-111.3 52-190.5 52-190.5-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49 .93 64.06 39.81 72.87a140.4 140.4 0 0 0 131.7 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.9-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0 -31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.4 140.4 0 0 1 207 132.7c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.6-54.06zm304.2 134.2a37.94 37.94 0 1 0 -53.84-28.7C403 126.1 344.9 99 251.3 100.3l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.4 140.4 0 0 1 130.5 88.76c39.1 9 105.1 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.4-81.16 49-194.6a37.45 37.45 0 0 0 19.31-3.5zM374.1 436.2c21.43-32.46 46.42-89.69 45.14-179.7l-19.52 .14c.08 2.06 .3 4.07 .3 6.15a140.3 140.3 0 0 1 -91.39 131.4c-8.85 38.95-31.44 106.7-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.3 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\"],\n    \"hotjar\": [448, 512, [], \"f3b1\", \"M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z\"],\n    \"houzz\": [448, 512, [], \"f27c\", \"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\"],\n    \"html5\": [384, 512, [], \"f13b\", \"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"],\n    \"hubspot\": [512, 512, [], \"f3b2\", \"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"],\n    \"ideal\": [576, 512, [], \"e013\", \"M125.6 165.5a49.07 49.07 0 1 0 49.06 49.06A49.08 49.08 0 0 0 125.6 165.5zM86.15 425.8h78.94V285.3H86.15zm151.5-211.6c0-20-10-22.53-18.74-22.53H204.8V237.5h14.05C228.6 237.5 237.6 234.7 237.6 214.2zm201.7 46V168.9h22.75V237.5h33.69C486.5 113.1 388.6 86.19 299.7 86.19H204.8V169h14c25.6 0 41.5 17.35 41.5 45.26 0 28.81-15.52 46-41.5 46h-14V425.9h94.83c144.6 0 194.9-67.16 196.7-165.6zm-109.8 0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51zm74.66 0-5.16-17.67H369.3l-5.18 17.67H340.5L368 168.9h32.35l27.53 91.34zM299.6 32H32V480H299.6c161.9 0 251-79.73 251-224.5C550.6 172 518 32 299.6 32zm0 426.9H53.07V53.07H299.6c142.1 0 229.9 64.61 229.9 202.4C529.5 389.6 448.5 458.9 299.6 458.9zm83.86-264.9L376 219.9H392.4l-7.52-25.81z\"],\n    \"imdb\": [448, 512, [], \"f2d8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.3 229.2H21c.1-.1 .2-.3 .3-.4zM97 319.8H64V192h33zm113.2 0h-28.7v-86.4l-11.6 86.4h-20.6l-12.2-84.5v84.5h-29V192h42.8c3.3 19.8 6 39.9 8.7 59.9l7.6-59.9h43zm11.4 0V192h24.6c17.6 0 44.7-1.6 49 20.9 1.7 7.6 1.4 16.3 1.4 24.4 0 88.5 11.1 82.6-75 82.5zm160.9-29.2c0 15.7-2.4 30.9-22.2 30.9-9 0-15.2-3-20.9-9.8l-1.9 8.1h-29.8V192h31.7v41.7c6-6.5 12-9.2 20.9-9.2 21.4 0 22.2 12.8 22.2 30.1zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2 .3 10.3-8.7 10.3-18.4zm85.5 26.1c0-5.4 1.1-12.7-6.2-12.7-6 0-4.9 8.9-4.9 12.7 0 .6-1.1 39.6 1.1 44.7 .8 1.6 2.2 2.4 3.8 2.4 7.8 0 6.2-9 6.2-14.4z\"],\n    \"instagram\": [448, 512, [], \"f16d\", \"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"],\n    \"instagram-square\": [448, 512, [], \"e055\", \"M224 202.7A53.34 53.34 0 1 0 277.4 256 53.38 53.38 0 0 0 224 202.7zm124.7-41a54 54 0 0 0 -30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31 6.43a54 54 0 0 0 -30.41 30.41c-8.28 21-6.43 71.05-6.43 94.33S91 329.3 99.32 350.3a54 54 0 0 0 30.41 30.41c21 8.29 71 6.43 94.31 6.43s73.24 1.93 94.3-6.43a54 54 0 0 0 30.41-30.41c8.35-21 6.43-71.05 6.43-94.33S357.1 182.7 348.8 161.7zM224 338a82 82 0 1 1 82-82A81.9 81.9 0 0 1 224 338zm85.38-148.3a19.14 19.14 0 1 1 19.13-19.14A19.1 19.1 0 0 1 309.4 189.7zM400 32H48A48 48 0 0 0 0 80V432a48 48 0 0 0 48 48H400a48 48 0 0 0 48-48V80A48 48 0 0 0 400 32zM382.9 322c-1.29 25.63-7.14 48.34-25.85 67s-41.4 24.63-67 25.85c-26.41 1.49-105.6 1.49-132 0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.6 0-132 1.29-25.63 7.07-48.34 25.85-67s41.47-24.56 67-25.78c26.41-1.49 105.6-1.49 132 0 25.63 1.29 48.33 7.15 67 25.85s24.63 41.42 25.85 67.05C384.4 216.4 384.4 295.6 382.9 322z\"],\n    \"instalod\": [512, 512, [], \"e081\", \"M153.4 480H387.1L502.6 275.8 204.2 333.2zM504.7 240.1 387.1 32H155.7L360.2 267.9zM124.4 48.81 7.274 256 123.2 461.2 225.6 165.6z\"],\n    \"intercom\": [448, 512, [], \"f7af\", \"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\"],\n    \"internet-explorer\": [512, 512, [], \"f26b\", \"M483 159.7c10.85-24.58 21.42-60.44 21.42-87.87 0-72.72-79.64-98.37-209.7-38.58-107.6-7.181-211.2 73.67-237.1 186.5 30.85-34.86 78.27-82.3 121.1-101.2C125.4 166.9 79.13 228 43.99 291.7 23.25 329.7 0 390.9 0 436.7c0 98.57 92.85 86.5 180.3 42.01 31.42 15.43 66.56 15.57 101.7 15.57 97.12 0 184.2-54.29 216.8-146H377.9c-52.51 88.59-196.8 52.1-196.8-47.44H509.9c6.407-43.58-1.655-95.71-26.85-141.2zM64.56 346.9c17.71 51.15 53.7 95.87 100.3 123.3-88.74 48.94-173.3 29.1-100.3-123.3zm115.1-108.9c2-55.15 50.28-94.87 103.1-94.87 53.42 0 101.1 39.72 103.1 94.87H180.5zm184.5-187.6c21.42-10.29 48.56-22 72.56-22 31.42 0 54.27 21.72 54.27 53.72 0 20-7.427 49.01-14.57 67.87-26.28-42.29-65.99-81.58-112.3-99.59z\"],\n    \"invision\": [448, 512, [], \"f7b0\", \"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9 .7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3 .1-14.3 .9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"],\n    \"ioxhost\": [640, 512, [], \"f208\", \"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"],\n    \"itch-io\": [512, 512, [], \"f83a\", \"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.7v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.6 32.4 325.8 32 256 32S91.14 33.1 71.92 34.77zm132.3 134.4c-22 38.4-77.9 38.71-99.85 .25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.1 17.73 269.1 80 18.67 302.1 18.12 379.8 0 31.65-32.27 21.32-232 17.75-269.1-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1 -51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.9 436.9 0 0 1 88.18 0C318.2 223 332.9 223 349.3 223c52.33 0 65.22 77.53 83.87 144.4 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.9 8.79-155.6 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.4 83.88-144.4zM256 270.8s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34 .16 23.33 .16 11.65 .54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\"],\n    \"itunes\": [448, 512, [], \"f3b4\", \"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1 .5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7 .9-127 2.6-133.7 .4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6 .4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"],\n    \"itunes-note\": [384, 512, [], \"f3b5\", \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2 .8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6 .2 344.5 1.1 326-1.8 338.5z\"],\n    \"java\": [384, 512, [], \"f4e4\", \"M277.7 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.8 0 242.8 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1 -2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0 -8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6 .7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.8 509.4 401 461.3 348 437.4zM124.4 396c-78.7 22 47.9 67.4 148.1 24.5a185.9 185.9 0 0 1 -28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.6 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1 -21.1-12.8z\"],\n    \"jedi-order\": [448, 512, [], \"f50e\", \"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"],\n    \"jenkins\": [512, 512, [], \"f3b6\", \"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8 .2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2 .7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8 .7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4 .7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4 .7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7 .3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2 .5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8 .7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1 .6-16.5zm-17.2-20c-16.8 .8-26-1.2-38.3-10.8 .2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3 .8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5 .7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2 .5-.4 .8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5 .4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9 .8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8 .6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1 .8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7 .5 0 1 0 1.4 .1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9 .9-36.6-17.1 11.9 .7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"],\n    \"jira\": [496, 512, [], \"f7b1\", \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\"],\n    \"joget\": [496, 512, [], \"f3b7\", \"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\"],\n    \"joomla\": [448, 512, [], \"f1aa\", \"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1 .6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6 .6 120.7 .6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"],\n    \"js\": [448, 512, [], \"f3b8\", \"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"],\n    \"js-square\": [448, 512, [], \"f3b9\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"],\n    \"jsfiddle\": [576, 512, [], \"f1cc\", \"M510.6 237.5c-4.727-2.621-5.664-5.748-6.381-10.78-2.352-16.49-3.539-33.62-9.097-49.1-35.9-99.96-153.1-143.4-246.8-91.65-27.37 15.25-48.97 36.37-65.49 63.9-3.184-1.508-5.458-2.71-7.824-3.686-30.1-12.42-59.05-10.12-85.33 9.167-25.53 18.74-36.42 44.55-32.68 76.41 .355 3.025-1.967 7.621-4.514 9.545-39.71 29.99-56.03 78.07-41.9 124.6 13.83 45.57 57.51 79.8 105.6 81.43 30.29 1.031 60.64 .546 90.96 .539 84.04-.021 168.1 .531 252.1-.48 52.66-.634 96.11-36.87 108.2-87.29 11.54-48.07-11.14-97.3-56.83-122.6zm21.11 156.9c-18.23 22.43-42.34 35.25-71.28 35.65-56.87 .781-113.8 .23-170.7 .23 0 .7-163 .159-163.7 .154-43.86-.332-76.74-19.77-95.18-59.99-18.9-41.24-4.004-90.85 34.19-116.1 9.182-6.073 12.51-11.57 10.1-23.14-5.49-26.36 4.453-47.96 26.42-62.98 22.99-15.72 47.42-16.15 72.03-3.083 10.27 5.45 14.61 11.56 22.2-2.527 14.22-26.4 34.56-46.73 60.67-61.29 97.46-54.37 228.4 7.568 230.2 132.7 .122 8.15 2.412 12.43 9.848 15.89 57.56 26.83 74.46 96.12 35.14 144.5zm-87.79-80.5c-5.848 31.16-34.62 55.1-66.67 55.1-16.95-.001-32.06-6.545-44.08-17.7-27.7-25.71-71.14-74.98-95.94-93.39-20.06-14.89-41.99-12.33-60.27 3.782-49.1 44.07 15.86 121.8 67.06 77.19 4.548-3.96 7.84-9.543 12.74-12.84 8.184-5.509 20.77-.884 13.17 10.62-17.36 26.28-49.33 38.2-78.86 29.3-28.9-8.704-48.84-35.97-48.63-70.18 1.225-22.49 12.36-43.06 35.41-55.97 22.58-12.64 46.37-13.15 66.99 2.474C295.7 280.7 320.5 323.1 352.2 343.5c24.56 15.1 54.25 7.363 68.82-17.51 28.83-49.21-34.59-105-78.87-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.98 6.811-17.33-4.113-12.81-10.35 20.7-28.55 50.46-40.44 83.27-28.21 31.43 11.71 49.11 44.37 42.76 78.19z\"],\n    \"kaggle\": [320, 512, [], \"f5fa\", \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\"],\n    \"keybase\": [448, 512, [], \"f4f5\", \"M286.2 419a18 18 0 1 0 18 18 18 18 0 0 0 -18-18zm111.9-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0 -47.88-104.1c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.7 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0 -8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93 .54a214 214 0 0 0 -46.29 35.54C14 304.7 14 374 14 429.8v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.3 178.3 0 0 1 -15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.4-61.76 236.3-38.59 34.2 10.05 67.45 .69 84.74-23.84 .72-1 1.2-2.16 1.85-3.22a156.1 156.1 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.3c0-38.58-13-77.46-35.91-110.9zM142.4 128.6l-15.7-.93-1.39 21.79 13.13 .78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1 -11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.4 144.4 0 0 0 -7 19.17zm148.4 172.2a10.51 10.51 0 0 1 -14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1 -11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1 -10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.2s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1 -1.74 13.44zM187.4 419a18 18 0 1 0 18 18 18 18 0 0 0 -18-18z\"],\n    \"keycdn\": [512, 512, [], \"f3ba\", \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5 .7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4 .3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3 .3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2 .7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3 .1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9 .4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1 .8-57.3 24.8-58.2 58.3zM256 160\"],\n    \"kickstarter\": [448, 512, [], \"f3bb\", \"M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z\"],\n    \"kickstarter-k\": [384, 512, [], \"f3bc\", \"M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z\"],\n    \"korvue\": [446, 512, [], \"f42f\", \"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"],\n    \"laravel\": [512, 512, [], \"f3bd\", \"M504.4 115.8a5.72 5.72 0 0 0 -.28-.68 8.52 8.52 0 0 0 -.53-1.25 6 6 0 0 0 -.54-.71 9.36 9.36 0 0 0 -.72-.94c-.23-.22-.52-.4-.77-.6a8.84 8.84 0 0 0 -.9-.68L404.4 55.55a8 8 0 0 0 -8 0L300.1 111h0a8.07 8.07 0 0 0 -.88 .69 7.68 7.68 0 0 0 -.78 .6 8.23 8.23 0 0 0 -.72 .93c-.17 .24-.39 .45-.54 .71a9.7 9.7 0 0 0 -.52 1.25c-.08 .23-.21 .44-.28 .68a8.08 8.08 0 0 0 -.28 2.08V223.2l-80.22 46.19V63.44a7.8 7.8 0 0 0 -.28-2.09c-.06-.24-.2-.45-.28-.68a8.35 8.35 0 0 0 -.52-1.24c-.14-.26-.37-.47-.54-.72a9.36 9.36 0 0 0 -.72-.94 9.46 9.46 0 0 0 -.78-.6 9.8 9.8 0 0 0 -.88-.68h0L115.6 1.07a8 8 0 0 0 -8 0L11.34 56.49h0a6.52 6.52 0 0 0 -.88 .69 7.81 7.81 0 0 0 -.79 .6 8.15 8.15 0 0 0 -.71 .93c-.18 .25-.4 .46-.55 .72a7.88 7.88 0 0 0 -.51 1.24 6.46 6.46 0 0 0 -.29 .67 8.18 8.18 0 0 0 -.28 2.1v329.7a8 8 0 0 0 4 6.95l192.5 110.8a8.83 8.83 0 0 0 1.33 .54c.21 .08 .41 .2 .63 .26a7.92 7.92 0 0 0 4.1 0c.2-.05 .37-.16 .55-.22a8.6 8.6 0 0 0 1.4-.58L404.4 400.1a8 8 0 0 0 4-6.95V287.9l92.24-53.11a8 8 0 0 0 4-7V117.9A8.63 8.63 0 0 0 504.4 115.8zM111.6 17.28h0l80.19 46.15-80.2 46.18L31.41 63.44zm88.25 60V278.6l-46.53 26.79-33.69 19.4V123.5l46.53-26.79zm0 412.8L23.37 388.5V77.32L57.06 96.7l46.52 26.8V338.7a6.94 6.94 0 0 0 .12 .9 8 8 0 0 0 .16 1.18h0a5.92 5.92 0 0 0 .38 .9 6.38 6.38 0 0 0 .42 1v0a8.54 8.54 0 0 0 .6 .78 7.62 7.62 0 0 0 .66 .84l0 0c.23 .22 .52 .38 .77 .58a8.93 8.93 0 0 0 .86 .66l0 0 0 0 92.19 52.18zm8-106.2-80.06-45.32 84.09-48.41 92.26-53.11 80.13 46.13-58.8 33.56zm184.5 4.57L215.9 490.1V397.8L346.6 323.2l45.77-26.15zm0-119.1L358.7 250l-46.53-26.79V131.8l33.69 19.4L392.4 178zm8-105.3-80.2-46.17 80.2-46.16 80.18 46.15zm8 105.3V178L455 151.2l33.68-19.4v91.39h0z\"],\n    \"lastfm\": [512, 512, [], \"f202\", \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"],\n    \"lastfm-square\": [448, 512, [], \"f203\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5 .1 36.7-30.7 50.6-76.1 50.6z\"],\n    \"leanpub\": [576, 512, [], \"f212\", \"M386.5 111.5l15.1 248.1-10.98-.275c-36.23-.824-71.64 8.783-102.7 27.1-31.02-19.21-66.42-27.1-102.7-27.1-45.56 0-82.07 10.7-123.5 27.72L93.12 129.6c28.55-11.8 61.48-18.11 92.23-18.11 41.17 0 73.84 13.18 102.7 42.54 27.72-28.27 59.01-41.72 98.54-42.54zM569.1 448c-25.53 0-47.49-5.215-70.54-15.65-34.31-15.65-69.99-24.98-107.9-24.98-38.98 0-74.93 12.9-102.7 40.62-27.72-27.72-63.68-40.62-102.7-40.62-37.88 0-73.56 9.333-107.9 24.98C55.24 442.2 32.73 448 8.303 448H6.93L49.47 98.86C88.73 76.63 136.5 64 181.8 64 218.8 64 256.1 71.68 288 93.1 319 71.68 357.2 64 394.2 64c45.29 0 93.05 12.63 132.3 34.86L569.1 448zm-43.37-44.74l-34.04-280.2c-30.74-13.1-67.25-21.41-101-21.41-38.43 0-74.39 12.08-102.7 38.7-28.27-26.63-64.23-38.7-102.7-38.7-33.76 0-70.27 7.411-101 21.41L50.3 403.3c47.21-19.49 82.89-33.49 135-33.49 37.6 0 70.82 9.606 102.7 29.64 31.84-20.04 65.05-29.64 102.7-29.64 52.15 0 87.83 13.1 135 33.49z\"],\n    \"less\": [640, 512, [], \"f41d\", \"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5 .5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1 .8-4.6 .8-6.2 .8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4 .6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"],\n    \"line\": [448, 512, [], \"f3c0\", \"M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1 .5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9 .3 1.6 .9 2.2 .6 .5 1.3 .9 2.2 .9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8 .1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z\"],\n    \"linkedin\": [448, 512, [], \"f08c\", \"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"],\n    \"linkedin-in\": [448, 512, [], \"f0e1\", \"M100.3 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.6 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.3 61.9 111.3 142.3V448z\"],\n    \"linode\": [448, 512, [], \"f2b8\", \"M366 186.9l-59.5 36.87-.838 36.87-29.33-19.27-39.38 24.3c2.238 55.21 2.483 59.27 2.51 59.5l-97.2 65.36L127.2 285.7l108.1-62.01L195.1 197.8l-75.42 38.55L98.72 93.01 227.8 43.57 136.4 0 10.74 39.38 38.39 174.3l41.9 32.68L48.44 222.1 69.39 323.5 98.72 351.1 77.77 363.7l16.76 78.77L160.7 512c-10.8-74.84-11.66-78.64-11.73-78.77l77.93-55.3c16.76-12.57 15.08-10.89 15.08-10.89l.838 24.3 33.52 28.49-.838-77.09 46.93-33.52 26.82-18.43-2.514 36.03 25.14 17.6 6.7-74.58 58.66-43.58z\"],\n    \"linux\": [448, 512, [], \"f17c\", \"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5 .2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4 .2-.8 .7-.6 1.1 .3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6 .2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5 .1-1.3 .6-3.4 1.5-3.2 2.9 .1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7 .1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9 .6 7.9 1.2 11.8 1.2 8.1 2.5 15.7 .8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1 .6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3 .4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4 .7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6 .6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7 .8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4 .6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1 .8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7 .4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6 .8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1 .3-.2 .7-.3 1-.5 .8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"],\n    \"lyft\": [512, 512, [], \"f3c3\", \"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"],\n    \"magento\": [448, 512, [], \"f3c4\", \"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6 .1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"],\n    \"mailchimp\": [448, 512, [], \"f59e\", \"M330.6 243.5a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43 .45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0 -30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06 .85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1 .9 .34 1.17 .81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92 .34 4.31 .52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81 .28-15.96zm-218.8 78.9c-1.32 .31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27 .57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0 -.2-2.33c.03 .89 .68-1.3-3.35-.39zm299.7-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.4-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.8 25.78 273.9l14.76 12.51a72.49 72.49 0 0 0 -4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.1 267.9 133.3 322.3 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.6C69.14 252.5 55.78 261.1 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.2C112.4 90.56 186.2 39.68 220.4 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.2 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.8 102.8 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.9 106.9 0 0 1 362.5 421a132.4 132.4 0 0 1 -20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1 -3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0 -1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48 .5 15.89 1.59 22.88 1.88 11.69 .5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49 .29 6.72 1.1 23 1.38 27.63 .63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.5 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.4-21.35 .69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.5 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73 .73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75 .75 0 0 0 1.16 .79c11.49-7.83 31.48-16.22 49-17.3a.77 .77 0 0 1 .52 1.38 41.86 41.86 0 0 0 -7.71 7.74 .75 .75 0 0 0 .59 1.19c12.31 .09 29.66 4.4 41 10.74 .76 .43 .22 1.91-.64 1.72-69.55-15.94-123.1 18.53-134.5 26.83a.76 .76 0 0 1 -1-1.12z\"],\n    \"mandalorian\": [448, 512, [], \"f50f\", \"M232.3 511.9c-1-3.26-1.69-15.83-1.39-24.58 .55-15.89 1-24.72 1.4-28.76 .64-6.2 2.87-20.72 3.28-21.38 .6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0 -.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.5 109.5 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39 .37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34 .21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1 -1.55 4.26c-1 1-1.14 .91-2.05-.53a14.87 14.87 0 0 1 -1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36 .66 .51 1.35 .34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64 .73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95 .7-3 2.26-18.29 3.33-32.62 .36-4.78 .81-10.5 1-12.71 .83-9.37 1.66-20.35 2.61-34.78 .56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81 .75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0 -2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79 .1 18.55a101.2 101.2 0 0 0 -1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18 .8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.9 132.9 0 0 0 -2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.2 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0 -2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0 -1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0 -2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22 .29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15 .88 .22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51 .68 3 .57 7.05-1.67l4.35-2.4L268.3 5c10.44-.4 10.81-.47 15.26-2.68L288.2 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1 -1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1 -4.09 3.71 13.62 13.62 0 0 0 -4.38 4.78 5.89 5.89 0 0 1 -2.49 2.91 6.88 6.88 0 0 0 -2.45 1.71 67.62 67.62 0 0 1 -7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0 -2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56 .71 8.84a33.45 33.45 0 0 0 -1.06 8.91c0 4.88 .22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09 .11 8.42c.06 4.63 .47 9.53 .92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12 .83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69 .52 12.69-11 22.84l-4 3.49 .07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27 .63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36 .47 2.26 .78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43 .17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1 -1.73-10.79 100.5 100.5 0 0 0 -1.73-10.79 37.53 37.53 0 0 1 -1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62 .62 0 0 1 -1-.14zm-87.18-266.6c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.3 86.25 255 78.55 268c-31 52-6 101.6 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.7zm210.8 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.6 92.46 149.4 4.3 70.64-78.7 91.18-105.3 61.71z\"],\n    \"markdown\": [640, 512, [], \"f60f\", \"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\"],\n    \"mastodon\": [448, 512, [], \"f4f6\", \"M433 179.1c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.6-28.4-290.5 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.6 289.1 40.51 10.7 75.32 13 103.3 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.5 102.5 0 0 1 -.9-13.9c85.63 20.9 158.6 9.1 178.8 6.7 56.12-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.8-6.1 23.71 27.3 18.4 53 18.4 175z\"],\n    \"maxcdn\": [512, 512, [], \"f136\", \"M461.1 442.7h-97.4L415.6 200c2.3-10.2 .9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"],\n    \"mdb\": [576, 512, [], \"f8ca\", \"M17.37 160.4L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.6H146.7L106 277.7 63.67 160.4zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.5V204.8s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.3-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.6H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.5l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z\"],\n    \"medapps\": [320, 512, [], \"f3c6\", \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7 .2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"],\n    \"medium\": [640, 512, [62407, \"medium-m\"], \"f23a\", \"M180.5 74.26C80.81 74.26 0 155.6 0 256S80.82 437.7 180.5 437.7 361 356.4 361 256 280.2 74.26 180.5 74.26zm288.3 10.65c-49.85 0-90.25 76.62-90.25 171.1s40.41 171.1 90.25 171.1 90.25-76.62 90.25-171.1H559C559 161.5 518.6 84.91 468.8 84.91zm139.5 17.82c-17.53 0-31.74 68.63-31.74 153.3s14.2 153.3 31.74 153.3S640 340.6 640 256C640 171.4 625.8 102.7 608.3 102.7z\"],\n    \"medrt\": [544, 512, [], \"f3c8\", \"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"],\n    \"meetup\": [512, 512, [], \"f2e0\", \"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1 .9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9 .6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3 .9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"],\n    \"megaport\": [496, 512, [], \"f5a3\", \"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\"],\n    \"mendeley\": [640, 512, [], \"f7b3\", \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4 .7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1 .1-.2 .2-.3 .4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"],\n    \"microblog\": [448, 512, [], \"e01a\", \"M399.4 362.2c29.49-34.69 47.1-78.34 47.1-125.8C446.5 123.5 346.9 32 224 32S1.54 123.5 1.54 236.4 101.1 440.9 224 440.9a239.3 239.3 0 0 0 79.44-13.44 7.18 7.18 0 0 1 8.12 2.56c18.58 25.09 47.61 42.74 79.89 49.92a4.42 4.42 0 0 0 5.22-3.43 4.37 4.37 0 0 0 -.85-3.62 87 87 0 0 1 3.69-110.7zM329.5 212.4l-57.3 43.49L293 324.8a6.5 6.5 0 0 1 -9.94 7.22L224 290.9 164.9 332a6.51 6.51 0 0 1 -9.95-7.22l20.79-68.86-57.3-43.49a6.5 6.5 0 0 1 3.8-11.68l71.88-1.51 23.66-67.92a6.5 6.5 0 0 1 12.28 0l23.66 67.92 71.88 1.51a6.5 6.5 0 0 1 3.88 11.68z\"],\n    \"microsoft\": [448, 512, [], \"f3ca\", \"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"],\n    \"mix\": [448, 512, [], \"f3cb\", \"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"],\n    \"mixcloud\": [640, 512, [], \"f289\", \"M424.4 219.7C416.1 134.7 344.1 68 256.9 68c-72.27 0-136.2 46.52-159.2 114.1-54.54 8.029-96.63 54.82-96.63 111.6 0 62.3 50.67 112.1 113.2 112.1h289.6c52.33 0 94.97-42.36 94.97-94.69 0-45.13-32.12-83.06-74.48-92.2zm-20.49 144.5H114.3c-39.04 0-70.88-31.56-70.88-70.6s31.84-70.6 70.88-70.6c18.83 0 36.55 7.475 49.84 20.77 19.96 19.96 50.13-10.23 30.18-30.18-14.68-14.4-32.67-24.36-52.05-29.35 19.93-44.3 64.79-73.93 114.6-73.93 69.5 0 125.1 56.48 125.1 125.7 0 13.57-2.215 26.86-6.369 39.59-8.943 27.52 32.13 38.94 40.15 13.29 2.769-8.306 4.984-16.89 6.369-25.47 19.38 7.476 33.5 26.3 33.5 48.45 0 28.8-23.53 52.33-52.61 52.33zm235.1-52.33c0 44.02-12.74 86.39-37.1 122.7-4.153 6.092-10.8 9.414-17.72 9.414-16.32 0-27.13-18.83-17.44-32.95 19.38-29.35 29.9-63.68 29.9-99.12s-10.52-69.77-29.9-98.85c-15.65-22.83 19.36-47.24 35.16-23.53 24.37 35.99 37.1 78.36 37.1 122.4zm-70.88 0c0 31.57-9.137 62.02-26.86 88.32-4.153 6.091-10.8 9.136-17.72 9.136-17.2 0-27.02-18.98-17.44-32.95 13.01-19.1 19.66-41.26 19.66-64.51 0-22.98-6.645-45.41-19.66-64.51-15.76-22.99 19.01-47.1 35.16-23.53 17.72 26.03 26.86 56.48 26.86 88.05z\"],\n    \"mixer\": [512, 512, [], \"e056\", \"M114.6 76.07a45.71 45.71 0 0 0 -67.51-6.41c-17.58 16.18-19 43.52-4.75 62.77l91.78 123L41.76 379.6c-14.23 19.25-13.11 46.59 4.74 62.77A45.71 45.71 0 0 0 114 435.9L242.9 262.7a12.14 12.14 0 0 0 0-14.23zM470.2 379.6 377.9 255.4l91.78-123c14.22-19.25 12.83-46.59-4.75-62.77a45.71 45.71 0 0 0 -67.51 6.41l-128 172.1a12.14 12.14 0 0 0 0 14.23L398 435.9a45.71 45.71 0 0 0 67.51 6.41C483.4 426.2 484.5 398.8 470.2 379.6z\"],\n    \"mizuni\": [496, 512, [], \"f3cc\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"],\n    \"modx\": [448, 512, [], \"f285\", \"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"],\n    \"monero\": [496, 512, [], \"f3d0\", \"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"],\n    \"napster\": [496, 512, [], \"f3d2\", \"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9 .1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1 .1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7 .2-158.2V93.2c-17.3 .5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5 .1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"],\n    \"neos\": [512, 512, [], \"f612\", \"M415.4 512h-95.11L212.1 357.5v91.1L125.7 512H28V29.82L68.47 0h108.1l123.7 176.1V63.45L386.7 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.6h84.79l52.35-38.17h-78.27L69 13zm82.54 466.6l80-58.78v-101l-79.76-114.4v220.9L49 501.9h72.34zM80.63 10.77l310.6 442.6h82.37V10.77h-79.75v317.6L170.9 10.77zM311 191.6l72 102.8V15.93l-72 53v122.7z\"],\n    \"nimblr\": [384, 512, [], \"f5a8\", \"M246.6 299.3c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.3c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.8 159C157 159 89.45 178.8 59.25 227L14 0v335.5C14 433.1 93.61 512 191.8 512s177.8-78.95 177.8-176.5S290.1 159 191.8 159zm0 308.1c-73.27 0-132.5-58.9-132.5-131.6s59.24-131.6 132.5-131.6 132.5 58.86 132.5 131.5S265 467.1 191.8 467.1z\"],\n    \"node\": [640, 512, [], \"f419\", \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4 .1l14.8 8.8c.5 .3 1.3 .3 1.8 0L375 408c.5-.3 .9-.9 .9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6 .3-.9 1-.9 1.6v66.7c0 .6 .4 1.2 .9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9 .7-1.7 1.7-1.7h7.3c.9 0 1.7 .7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6 .2 .8 .8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5 .3-.4 .5-.8 .4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7 .7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7 .1 1.8 1.2 2.1 2.8 .1 1 .3 2.7 .6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3 .4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3 .7 2.5 1.8 3.2 1.1 .7 2.5 .7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6 .3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1 .7 2.6 .7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6 .3-.9 .9-.9 1.6v24.3c0 .7 .4 1.3 .9 1.6l21 12.1c.6 .3 1.3 .3 1.8 0l21-12.1c.6-.3 .9-.9 .9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3 .7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1 .7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4 .3-.7 .7-.7 1.2v13.6c0 .5 .3 1 .7 1.2l11.8 6.8c.4 .3 1 .3 1.4 0L584 235c.4-.3 .7-.7 .7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7 .1-.5 .2-1.1 .2-1.7zm-74.3-124.9l-.8 .5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"],\n    \"node-js\": [448, 512, [], \"f3d3\", \"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6 .4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2 .7 376.3 .7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8 .5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"],\n    \"npm\": [576, 512, [], \"f3d4\", \"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"],\n    \"ns8\": [640, 512, [], \"f3d5\", \"M104.3 269.2h26.07V242.1H104.3zm52.47-26.18-.055-26.18v-.941a39.33 39.33 0 0 0 -78.64 .941v.166h26.4v-.166a12.98 12.98 0 0 1 25.96 0v26.18zm52.36 25.85a91.1 91.1 0 0 1 -91.1 91.1h-.609a91.1 91.1 0 0 1 -91.1-91.1H0v.166A117.3 117.3 0 0 0 117.4 386.3h.775A117.3 117.3 0 0 0 235.5 268.8V242.8H209.1zm-157.2 0a65.36 65.36 0 0 0 130.7 0H156.3a39.02 39.02 0 0 1 -78.04 0V242.9H51.97v-26.62A65.42 65.42 0 0 1 182.8 217.5v25.29h26.34V217.5a91.76 91.76 0 0 0 -183.5 0v25.4H51.91zm418.4-71.17c13.67 0 24.57 6.642 30.05 18.26l.719 1.549 23.25-11.51-.609-1.439c-8.025-19.26-28.5-31.27-53.41-31.27-23.13 0-43.61 11.4-50.97 28.45-.123 26.88-.158 23.9 0 24.85 4.7 11.01 14.56 19.37 28.67 24.24a102 102 0 0 0 19.81 3.984c5.479 .72 10.63 1.384 15.83 3.1 6.364 2.1 10.46 5.257 12.84 9.851v9.851c-3.708 7.527-13.78 12.34-25.79 12.34-14.33 0-25.96-6.918-31.93-19.04l-.72-1.494L415 280.9l.553 1.439c7.915 19.43 29.61 32.04 55.29 32.04 23.63 0 44.61-11.4 52.3-28.45l.166-25.9-.166-.664c-4.87-11.01-15.22-19.65-28.94-24.24-7.693-2.712-14.34-3.6-20.7-4.427a83.78 83.78 0 0 1 -14.83-2.878c-6.31-1.937-10.4-5.092-12.62-9.63v-8.412C449.5 202.4 458.1 197.7 470.3 197.7zM287.6 311.3h26.07v-68.4H287.6zm352.3-53.3c-2.933-6.254-8.3-12.01-15.44-16.71A37.99 37.99 0 0 0 637.4 226l.166-25.35-.166-.664C630 184 610.7 173.3 589.3 173.3S548.5 184 541.1 199.1l-.166 25.35 .166 .664a39.64 39.64 0 0 0 13.01 15.33c-7.2 4.7-12.51 10.46-15.44 16.71l-.166 28.89 .166 .72c7.582 15.99 27.89 26.73 50.58 26.73s43.06-10.74 50.58-26.73l.166-28.89zm-73.22-50.81c3.6-6.31 12.56-10.52 22.58-10.52s19.04 4.206 22.64 10.52v13.73c-3.542 6.2-12.56 10.35-22.64 10.35s-19.09-4.15-22.58-10.35zm47.32 72.17c-3.764 6.641-13.34 10.9-24.68 10.9-11.13 0-20.98-4.372-24.68-10.9V263.3c3.708-6.309 13.5-10.52 24.68-10.52 11.35 0 20.92 4.15 24.68 10.52zM376.4 265.1l-59.83-89.71h-29v40.62h26.51v.387l62.54 94.08H402.3V176.2H376.4z\"],\n    \"nutritionix\": [400, 512, [], \"f3d6\", \"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"],\n    \"octopus-deploy\": [512, 512, [], \"e082\", \"M455.6 349.2c-45.89-39.09-36.67-77.88-16.09-128.1C475.2 134 415.1 34.14 329.9 8.3 237-19.6 134.3 24.34 99.68 117.1a180.9 180.9 0 0 0 -10.99 73.54c1.733 29.54 14.72 52.97 24.09 80.3 17.2 50.16-28.1 92.74-66.66 117.6-46.81 30.2-36.32 39.86-8.428 41.86 23.38 1.68 44.48-4.548 65.26-15.05 9.2-4.647 40.69-18.93 45.13-28.59C135.9 413.4 111.1 459.5 126.6 488.9c19.1 36.23 67.11-31.77 76.71-45.81 8.591-12.57 42.96-81.28 63.63-46.93 18.86 31.36 8.6 76.39 35.74 104.6 32.85 34.2 51.15-18.31 51.41-44.22 .163-16.41-6.1-95.85 29.9-59.94C405.4 418 436.9 467.8 472.6 463.6c38.74-4.516-22.12-67.97-28.26-78.69 5.393 4.279 53.67 34.13 53.82 9.52C498.2 375.7 468 359.8 455.6 349.2z\"],\n    \"odnoklassniki\": [320, 512, [], \"f263\", \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"],\n    \"odnoklassniki-square\": [448, 512, [], \"f264\", \"M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z\"],\n    \"old-republic\": [496, 512, [], \"f510\", \"M235.8 10.23c7.5-.31 15-.28 22.5-.09 3.61 .14 7.2 .4 10.79 .73 4.92 .27 9.79 1.03 14.67 1.62 2.93 .43 5.83 .98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83 .57 3.14 1.04 6.3 1.4 9.47 .55 3.83 .94 7.69 1.18 11.56 .83 8.34 .84 16.73 .77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.5 246.5 0 0 1 -56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66 .91-9.34 1.73-14.03 2.48-5.25 .66-10.5 1.44-15.79 1.74-6.69 .66-13.41 .84-20.12 .81-6.82 .03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49 .14-3.51 .34-7.01 .7-10.51 .31-3.17 .46-6.37 .92-9.52 .41-2.81 .65-5.65 1.16-8.44 .7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23 .1-18.43 .99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.7-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8 .11 7.14 .38 14.28 1.22 21.37 .62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91 .29 5.81 .61 8.72 .9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.3 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75 .13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1 .9 3.02 .66 6.2 .69 9.31 .02 4.1-.04 8.2 .03 12.3 .14 3.54-.02 7.09 .11 10.63 .08 2.38 .02 4.76 .05 7.14 .16 5.77 .06 11.53 .15 17.3 .11 2.91 .02 5.82 .13 8.74 .03 1.63 .13 3.28-.03 4.91-.91 .12-1.82 .18-2.73 .16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73 .84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.4-20.12c2.74 .74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57 .41 4.54 .44 9.09 .45 13.64 .07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51 .69-7.08 1.08-10.66 1.21-1.85 .06-3.72 .16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73 .14-7.45 .1-11.17 .19-7.02 .02-14.05 .21-21.07 .03-2.38-.03-4.76 .03-7.14 .17-5.07-.04-10.14 .14-15.21 .1-2.99-.24-6.04 .51-8.96 .66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46 .86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61 .93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07 .32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.3-.01 221 0 1.35-.08 2.7 .04 4.04 .13 1.48 .82 2.83 1.47 4.15 .86 1.66 1.78 3.34 3.18 4.62 .85 .77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57 .96-1.51 1.68-3.16 2.28-4.85 .76-2.13 .44-4.42 .54-6.63 .14-4.03-.02-8.06 .14-12.09 .03-5.89 .03-11.77 .06-17.66 .14-3.62 .03-7.24 .11-10.86 .15-4.03-.02-8.06 .14-12.09 .03-5.99 .03-11.98 .07-17.97 .14-3.62 .02-7.24 .11-10.86 .14-3.93-.02-7.86 .14-11.78 .03-5.99 .03-11.98 .06-17.97 .16-3.94-.01-7.88 .19-11.82 .29 1.44 .13 2.92 .22 4.38 .19 3.61 .42 7.23 .76 10.84 .32 3.44 .44 6.89 .86 10.32 .37 3.1 .51 6.22 .95 9.31 .57 4.09 .87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21 .27 .25 .55 .51 .88 .71 .6 .25 1.31-.07 1.7-.57 .71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31 .7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11 .75 19.56 1.85 3.69 .58 7.4 1.17 11.13 1.41 3.74 .1 7.48 .05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46 .37 2.96 .46 4.45 .6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66 .24-9.32 .36-13.98 .36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11 .73 6.32 .47 9.47 .81 2.77 .28 5.56 .2 8.34 .3 5.05 .06 10.11 .04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83 .61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52 .67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13 .56-3.98 .83-7.99 1.31-11.97 .87-10.64 1.9-21.27 2.24-31.94 .08-1.86 .24-3.71 .25-5.57 .01-4.35 .25-8.69 .22-13.03-.01-2.38-.01-4.76 0-7.13 .05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64 .07-2.99 .7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06 .71-.12 1.07-.19 .19 1.79 .09 3.58 .1 5.37v38.13c-.01 1.74 .13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32 .09-4.98-.03-.03-.39-.26-.91 .16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54 .04-.56 .02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2 .06 15.3-.12 3.36-.13 6.73 .08 10.09-.07 .12-.39 .26-.77 .37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36 .05 .72 .12 1.08 .2 .98 3.85 1.73 7.76 2.71 11.61 .36 1.42 .56 2.88 1.03 4.27 2.53 .18 5.07-.01 7.61 .05 5.16 .12 10.33 .12 15.49 .07 .76-.01 1.52 .03 2.28 .08-.04 .36-.07 .72-.1 1.08-1.82 .83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57 .17-1.12 .42-1.67 .64-.15 .55-.18 1.12-.12 1.69 .87 .48 1.82 .81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6 .38 .13 .78 .27 1.13 .49 .4 .27 .23 .79 .15 1.18-1.66 .13-3.31 .03-4.97 .04-5.17 .01-10.33-.01-15.5 .01-1.61 .03-3.22-.02-4.82 .21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36 .01-.71 .02-1.06 .06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58 .11-5.37zM65.05 168.3c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83 .96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67 .99 2.9 1.59 5.91 2.17 8.92 .15 .75 .22 1.52 .16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11 .78-8.29 .99-12.46 1.08-10.25 .24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43 .11-6.18 .25-12.37 1.07-18.5 .4-2.86 .67-5.74 1.15-8.6 .98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.7-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05 .02 1.76 .07 3.52 .11 5.29 .13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51 .25-2.99 .53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05 .63-2.87 1.04-5.78 1.52-8.68 .87-6.09 1.59-12.22 1.68-18.38 .12-6.65 .14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"],\n    \"opencart\": [640, 512, [], \"f23d\", \"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"],\n    \"openid\": [448, 512, [], \"f19b\", \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"],\n    \"opera\": [496, 512, [], \"f26a\", \"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1 .3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"],\n    \"optin-monster\": [576, 512, [], \"f23c\", \"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7 .3-6.5 .3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8 .9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8 .5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4 .5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3 .5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1 .2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3 .3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1 .5-8.1 .8-11.6 .8-1.9-21.9-6.8-44-14.3-64.6 3.7 .3 8.1 .3 11.8 .3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1 .8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3 .3 26.6 .3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6 .8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3 .3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2 .8 2.2 .8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8 .3 1.9 .5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3 .9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5 .9-8.4-20.2-23.5-29.1-25.1z\"],\n    \"orcid\": [512, 512, [], \"f8d2\", \"M294.8 188.2h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.8h-29.84v-207.5h29.84zm-14.92-231.1a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1 -19.57 19.57zM300 369h-81V161.3h80.6c76.73 0 110.4 54.83 110.4 103.8C410 318.4 368.4 369 300 369z\"],\n    \"osi\": [512, 512, [], \"f41a\", \"M8 266.4C10.3 130.6 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0 -64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6 .6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4 .8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3 .6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"],\n    \"padlet\": [640, 512, [], \"e4a0\", \"M297.9 0L298 .001C305.6 .1078 312.4 4.72 315.5 11.78L447.5 320.3L447.8 320.2L448 320.6L445.2 330.6L402.3 488.6C398.6 504.8 382.6 514.9 366.5 511.2L298.1 495.6L229.6 511.2C213.5 514.9 197.5 504.8 193.8 488.6L150.9 330.6L148.2 320.6L148.3 320.2L280.4 11.78C283.4 4.797 290.3 .1837 297.9 .0006L297.9 0zM160.1 322.1L291.1 361.2L298 483.7L305.9 362.2L436.5 322.9L436.7 322.8L305.7 347.9L297.1 27.72L291.9 347.9L160.1 322.1zM426 222.6L520.4 181.6H594.2L437.2 429.2L468.8 320.2L426 222.6zM597.5 181.4L638.9 257.6C642.9 265.1 635 273.5 627.3 269.8L579.7 247.1L597.5 181.4zM127.3 318.5L158.7 430L1.61 154.5C-4.292 144.1 7.128 132.5 17.55 138.3L169.4 222.5L127.3 318.5z\"],\n    \"page4\": [496, 512, [], \"f3d7\", \"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"],\n    \"pagelines\": [384, 512, [], \"f18c\", \"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4 .5 1.6 .5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"],\n    \"palfed\": [576, 512, [], \"f3d8\", \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8 .7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4 .9 74.4 2.7 100v.2c.2 3.4 .6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4 .2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9 .2 2.5 .4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"],\n    \"patreon\": [512, 512, [], \"f3d9\", \"M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z\"],\n    \"paypal\": [384, 512, [], \"f1ed\", \"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4 .7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9 .7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"],\n    \"perbyte\": [448, 512, [], \"e083\", \"M305.3 284.6H246.6V383.3h58.71q24.42 0 38.19-13.77t13.77-36.11q0-21.83-14.03-35.33T305.3 284.6zM149.4 128.7H90.72v98.72h58.71q24.42 0 38.19-13.77t13.77-36.11q0-21.83-14.03-35.34T149.4 128.7zM366.6 32H81.35A81.44 81.44 0 0 0 0 113.4V398.6A81.44 81.44 0 0 0 81.35 480H366.6A81.44 81.44 0 0 0 448 398.6V113.4A81.44 81.44 0 0 0 366.6 32zm63.63 366.6a63.71 63.71 0 0 1 -63.63 63.63H81.35a63.71 63.71 0 0 1 -63.63-63.63V113.4A63.71 63.71 0 0 1 81.35 49.72H366.6a63.71 63.71 0 0 1 63.63 63.63zM305.3 128.7H246.6v98.72h58.71q24.42 0 38.19-13.77t13.77-36.11q0-21.83-14.03-35.34T305.3 128.7z\"],\n    \"periscope\": [448, 512, [], \"f3da\", \"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3 .1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"],\n    \"phabricator\": [496, 512, [], \"f3db\", \"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4 .5 .2 28.9 .2 28.9l-9.1 9.1s-29.2-.9-29.7 .4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5 .5 29.5 .5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4 .6 20.7-23.5 20.7-23.5l13.1 .2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2 .9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3 .8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1 .1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"],\n    \"phoenix-framework\": [640, 512, [], \"f3dc\", \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4 .1-.8 .2-1.1 .3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8 .6-1.5 1.2-2.2 1.8 .1 .2 .1 .3 .2 .5 .8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7 .3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1 .2-.3 .3-.4 .5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6 .1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2 .1-.2 2.1 .6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4 .2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7 .3 .2 .4 .5 .7 .9-.5 0-.7 .1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1 .2-.1 .4-.2 .6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2 .1-.3 .1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7 .4-.1 .9 0 1.5 .3-.6 .4-1.2 .9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4 .6-.8 .9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5 .1-.1 .2 0 .4 .4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7 .5-.2 .8-.4 1.1-.4 13.1 .1 26.1 .7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"],\n    \"phoenix-squadron\": [512, 512, [], \"f511\", \"M96 63.38C142.5 27.25 201.6 7.31 260.5 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.2 27 191 48.84 162.2 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3 .3a203 203 0 0 1 -35.82 15.37c-20 6.17-42.16 8.46-62.1 .78 12.79 1.73 26.06 .31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.6 526.6 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0 -51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28 .75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.6 183.6 0 0 0 -14.21-104.6c20.78 32 32.34 69.58 35.71 107.5 .49 12.73 .49 25.51 0 38.23A243.2 243.2 0 0 1 482 371.3c-26.12 47.34-68 85.63-117.2 108-78.29 36.23-174.7 31.32-248-14.68A248.3 248.3 0 0 1 25.36 366 238.3 238.3 0 0 1 0 273.1v-31.34C3.93 172 40.87 105.8 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\"],\n    \"php\": [640, 512, [], \"f457\", \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"],\n    \"pied-piper\": [480, 512, [], \"f2ae\", \"M455.9 23.2C429.2 30 387.8 51.69 341.4 90.66A206 206 0 0 0 240 64C125.1 64 32 157.1 32 272s93.13 208 208 208 208-93.13 208-208a207.3 207.3 0 0 0 -58.75-144.8 155.4 155.4 0 0 0 -17 27.4A176.2 176.2 0 0 1 417.1 272c0 97.66-79.44 177.1-177.1 177.1a175.8 175.8 0 0 1 -87.63-23.4c82.94-107.3 150.8-37.77 184.3-226.6 5.79-32.62 28-94.26 126.2-160.2C471 33.45 465.4 20.8 455.9 23.2zM125 406.4A176.7 176.7 0 0 1 62.9 272C62.9 174.3 142.4 94.9 240 94.9a174 174 0 0 1 76.63 17.75C250.6 174.8 189.8 265.5 125 406.4z\"],\n    \"pied-piper-alt\": [576, 512, [], \"f1a8\", \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3 .9 .6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9 .6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"],\n    \"pied-piper-hat\": [640, 512, [], \"f4e5\", \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9 .6 2.8 .8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1 .6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"],\n    \"pied-piper-pp\": [448, 512, [], \"f1a7\", \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4 .2-9.6 .7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"],\n    \"pied-piper-square\": [448, 512, [], \"e01e\", \"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"],\n    \"pinterest\": [496, 512, [], \"f0d2\", \"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3 .8-3.4 5-20.3 6.9-28.1 .6-2.5 .3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"],\n    \"pinterest-p\": [384, 512, [], \"f231\", \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"],\n    \"pinterest-square\": [448, 512, [], \"f0d3\", \"M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3 .8-3.4 5-20.1 6.8-27.8 .6-2.5 .3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2 .8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z\"],\n    \"pix\": [512, 512, [], \"e43a\", \"M242.4 292.5C247.8 287.1 257.1 287.1 262.5 292.5L339.5 369.5C353.7 383.7 372.6 391.5 392.6 391.5H407.7L310.6 488.6C280.3 518.1 231.1 518.1 200.8 488.6L103.3 391.2H112.6C132.6 391.2 151.5 383.4 165.7 369.2L242.4 292.5zM262.5 218.9C256.1 224.4 247.9 224.5 242.4 218.9L165.7 142.2C151.5 127.1 132.6 120.2 112.6 120.2H103.3L200.7 22.76C231.1-7.586 280.3-7.586 310.6 22.76L407.8 119.9H392.6C372.6 119.9 353.7 127.7 339.5 141.9L262.5 218.9zM112.6 142.7C126.4 142.7 139.1 148.3 149.7 158.1L226.4 234.8C233.6 241.1 243 245.6 252.5 245.6C261.9 245.6 271.3 241.1 278.5 234.8L355.5 157.8C365.3 148.1 378.8 142.5 392.6 142.5H430.3L488.6 200.8C518.9 231.1 518.9 280.3 488.6 310.6L430.3 368.9H392.6C378.8 368.9 365.3 363.3 355.5 353.5L278.5 276.5C264.6 262.6 240.3 262.6 226.4 276.6L149.7 353.2C139.1 363 126.4 368.6 112.6 368.6H80.78L22.76 310.6C-7.586 280.3-7.586 231.1 22.76 200.8L80.78 142.7H112.6z\"],\n    \"playstation\": [576, 512, [], \"f3df\", \"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9 .6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"],\n    \"product-hunt\": [512, 512, [], \"f288\", \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"],\n    \"pushed\": [432, 512, [], \"f3e1\", \"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"],\n    \"python\": [448, 512, [], \"f3e2\", \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4 .1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8 .1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3 .1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"],\n    \"qq\": [448, 512, [], \"f1d6\", \"M433.8 420.4c-11.53 1.393-44.86-52.74-44.86-52.74 0 31.34-16.14 72.25-51.05 101.8 16.84 5.192 54.84 19.17 45.8 34.42-7.316 12.34-125.5 7.881-159.6 4.037-34.12 3.844-152.3 8.306-159.6-4.037-9.045-15.25 28.92-29.21 45.78-34.42-34.92-29.54-51.06-70.44-51.06-101.8 0 0-33.33 54.13-44.86 52.74-5.37-.65-12.42-29.64 9.347-99.7 10.26-33.02 21.1-60.48 40.14-105.8C60.68 98.06 108.1 .006 224 0c113.7 .006 163.2 96.13 160.3 214.1 18.12 45.22 29.91 72.85 40.14 105.8 21.77 70.06 14.72 99.05 9.346 99.7z\"],\n    \"quinscape\": [512, 512, [], \"f459\", \"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.4 237.4 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4 .1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0 -99.2-99.2z\"],\n    \"quora\": [448, 512, [], \"f2c4\", \"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7 .1 41.8-5.4 75.6-16.7 100.5z\"],\n    \"r-project\": [581, 512, [], \"f4f7\", \"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"],\n    \"raspberry-pi\": [407, 512, [], \"f7bb\", \"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2 .7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6 .8C271.6 .6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9 .1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6 .1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7 .8 14.1 .6 23.9 .8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8 .4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2 .1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7 .9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6 .9 2.7 3.6 4.4 6.7 5.8-15.4 .9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8 .7 8.3 .1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6 .4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3 .4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6 .2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9 .5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6 .2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"],\n    \"ravelry\": [512, 512, [], \"f2d9\", \"M498.3 234.2c-1.208-10.34-1.7-20.83-3.746-31a310.3 310.3 0 0 0 -9.622-36.6 184.1 184.1 0 0 0 -30.87-57.5 251.2 251.2 0 0 0 -18.82-21.69 237.4 237.4 0 0 0 -47.11-36.12A240.8 240.8 0 0 0 331.4 26.65c-11.02-3.1-22.27-5.431-33.51-7.615-6.78-1.314-13.75-1.667-20.63-2.482-.316-.036-.6-.358-.9-.553q-16.14 .009-32.29 .006c-2.41 .389-4.808 .925-7.236 1.15a179.3 179.3 0 0 0 -34.26 7.1 221.5 221.5 0 0 0 -39.77 16.35 281.4 281.4 0 0 0 -38.08 24.16c-6.167 4.61-12.27 9.36-17.97 14.52C96.54 88.49 86.34 97.72 76.79 107.6a243.9 243.9 0 0 0 -33.65 43.95 206.5 206.5 0 0 0 -20.49 44.6 198.2 198.2 0 0 0 -7.691 34.76A201.1 201.1 0 0 0 13.4 266.4a299.7 299.7 0 0 0 4.425 40.24 226.9 226.9 0 0 0 16.73 53.3 210.5 210.5 0 0 0 24 39.53 213.6 213.6 0 0 0 26.36 28.42A251.3 251.3 0 0 0 126.7 458.5a287.8 287.8 0 0 0 55.9 25.28 269.5 269.5 0 0 0 40.64 9.835c6.071 1.01 12.27 1.253 18.41 1.873a4.149 4.149 0 0 1 1.19 .56h32.29c2.507-.389 5-.937 7.527-1.143 16.34-1.332 32.11-5.335 47.49-10.72A219.1 219.1 0 0 0 379.1 460.3c9.749-6.447 19.4-13.08 28.74-20.1 5.785-4.348 10.99-9.5 16.3-14.46 3.964-3.7 7.764-7.578 11.51-11.5a232.2 232.2 0 0 0 31.43-41.64c9.542-16.05 17.35-32.9 22.3-50.93 2.859-10.41 4.947-21.05 7.017-31.65 1.032-5.279 1.251-10.72 1.87-16.09 .036-.317 .358-.6 .552-.9V236A9.757 9.757 0 0 1 498.3 234.2zm-161.1-1.15s-16.57-2.98-28.47-2.98c-27.2 0-33.57 14.9-33.57 37.04V360.8H201.6V170.1H275.1v31.93c8.924-26.82 26.77-36.19 62.04-36.19z\"],\n    \"react\": [512, 512, [], \"f41b\", \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1 .9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2 .6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6 .4 19.5 .6 29.5 .6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8 .9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\"],\n    \"reacteurope\": [576, 512, [], \"f75d\", \"M250.6 211.7l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2 .1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2 .1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0 -4.2-3.4h-6.9a3.68 3.68 0 0 0 -4 3.4l-11 59.2c-.5 2.7 .9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 .04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0 -2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0 -2-1.9h-22.2a1.62 1.62 0 0 0 -2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0 -2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0 -2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0 -2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.4 364.4 0 0 0 -35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.8 587.8 0 0 0 -84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2 .1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0 -93.9 .9 547.8 547.8 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.3 598.3 0 0 0 -50.7 64.2 569.7 569.7 0 0 0 -84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.4 695.4 0 0 0 93.9-.9 547.8 547.8 0 0 1 -42.2 52.4q5.1 5.25 10.2 10.2a588.5 588.5 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1 -10.7-5.7l-.1 .1a19.61 19.61 0 0 1 -5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1 -72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1 -6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.9 711.9 0 0 1 -112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1 -3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.8 548.8 0 0 1 -72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4 .2-8.4-1a17.58 17.58 0 0 1 -6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.6c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.7 711.7 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1 .1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.7 359.7 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0 -1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0 -1.9-1.9H309a1.81 1.81 0 0 0 -2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0 -2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0 -2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0 -2-1.9h-22.2a1.81 1.81 0 0 0 -2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0 -2-2.06zm-7.4-99.4L286 192l-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\"],\n    \"readme\": [576, 512, [], \"f4d5\", \"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"],\n    \"rebel\": [512, 512, [], \"f1d0\", \"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1 .8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7 .8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4 .6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5 .8-2.8 .8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"],\n    \"red-river\": [448, 512, [], \"f3e3\", \"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"],\n    \"reddit\": [512, 512, [], \"f1a1\", \"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z\"],\n    \"reddit-alien\": [512, 512, [], \"f281\", \"M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2 .1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z\"],\n    \"reddit-square\": [448, 512, [], \"f1a2\", \"M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z\"],\n    \"redhat\": [512, 512, [], \"f7bc\", \"M341.5 285.6c33.65 0 82.34-6.94 82.34-47 .22-6.74 .86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.1 228.5 106.1M429 254.8c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.7 .08-235.9-73.65-235.9-122.3a49.55 49.55 0 0 1 4.06-19.72C58.56 200.9 0 208.9 0 260.6c0 84.67 200.6 189 359.5 189 121.8 0 152.5-55.08 152.5-98.58 0-34.21-29.59-73.05-82.93-96.24\"],\n    \"renren\": [512, 512, [], \"f18b\", \"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"],\n    \"replyd\": [448, 512, [], \"f3e6\", \"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9 .5-4.4 .7-8.6 .7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"],\n    \"researchgate\": [448, 512, [], \"f4f8\", \"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1 .6-33.6 .8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"],\n    \"resolving\": [496, 512, [], \"f3e7\", \"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"],\n    \"rev\": [448, 512, [], \"f5b2\", \"M289.7 274.9a65.57 65.57 0 1 1 -65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.6-5.05h-.13a204.7 204.7 0 0 0 -74.32-153l-45.38 26.2a157.1 157.1 0 0 1 71.81 131.8C381.2 361.5 310.7 432 224.1 432S67 361.5 67 274.9c0-81.88 63-149.3 143-156.4v39.12l108.8-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.6 0 111.6 89.12 202.3 200.1 205v.11h210.2V269.8z\"],\n    \"rocketchat\": [576, 512, [], \"f3e8\", \"M284 224.8a34.11 34.11 0 1 0 34.32 34.11A34.22 34.22 0 0 0 284 224.8zm-110.4 0a34.11 34.11 0 1 0 34.32 34.11A34.22 34.22 0 0 0 173.6 224.8zm220.9 0a34.11 34.11 0 1 0 34.32 34.11A34.22 34.22 0 0 0 394.5 224.8zm153.8-55.32c-15.53-24.17-37.31-45.57-64.68-63.62-52.89-34.82-122.4-54-195.7-54a405.1 405.1 0 0 0 -72.03 6.357 238.5 238.5 0 0 0 -49.51-36.59C99.68-11.7 40.86 .711 11.14 11.42A14.29 14.29 0 0 0 5.58 34.78C26.54 56.46 61.22 99.3 52.7 138.3c-33.14 33.9-51.11 74.78-51.11 117.3 0 43.37 17.97 84.25 51.11 118.1 8.526 38.96-26.15 81.82-47.12 103.5a14.28 14.28 0 0 0 5.555 23.34c29.72 10.71 88.55 23.15 155.3-10.2a238.7 238.7 0 0 0 49.51-36.59A405.1 405.1 0 0 0 288 460.1c73.31 0 142.8-19.16 195.7-53.97 27.37-18.05 49.15-39.43 64.68-63.62 17.31-26.92 26.07-55.92 26.07-86.13C574.4 225.4 565.6 196.4 548.3 169.5zM284.1 409.9a345.6 345.6 0 0 1 -89.45-11.5l-20.13 19.39a184.4 184.4 0 0 1 -37.14 27.58 145.8 145.8 0 0 1 -52.52 14.87c.983-1.771 1.881-3.563 2.842-5.356q30.26-55.68 16.33-100.1c-32.99-25.96-52.78-59.2-52.78-95.4 0-83.1 104.3-150.5 232.8-150.5s232.9 67.37 232.9 150.5C517.9 342.5 413.6 409.9 284.1 409.9z\"],\n    \"rockrms\": [496, 512, [], \"f3e9\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2 .2-74.2 .2l101.5 118.9z\"],\n    \"rust\": [512, 512, [], \"e07a\", \"M508.5 249.8 486.7 236.2c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35 7.35 0 0 0 -2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35 7.35 0 0 0 -4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35 7.35 0 0 0 -6.95-10.39l-25.82 .91q-1.79-2.22-3.61-4.4L439 81.84A7.36 7.36 0 0 0 430.2 73L405 78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35 7.35 0 0 0 -10.39-7L367.7 53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4 25.08a7.35 7.35 0 0 0 -11.54-4.79L326 35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35 7.35 0 0 0 -12.25-2.44l-17.5 18.72c-1.95-.21-3.91-.38-5.88-.55L262.3 3.48a7.35 7.35 0 0 0 -12.5 0L236.2 25.3c-2 .17-3.93 .34-5.88 .55L212.9 7.13a7.35 7.35 0 0 0 -12.25 2.44l-9 24c-1.89 .55-3.79 1.08-5.66 1.68l-20.82-15a7.35 7.35 0 0 0 -11.54 4.79l-4.15 25.41c-1.73 .9-3.45 1.79-5.16 2.73L120.9 42.55a7.35 7.35 0 0 0 -10.39 7l.92 25.81c-1.49 1.19-3 2.39-4.42 3.61L81.84 73A7.36 7.36 0 0 0 73 81.84L78.93 107c-1.23 1.45-2.43 2.93-3.62 4.41l-25.81-.91a7.42 7.42 0 0 0 -6.37 3.26 7.35 7.35 0 0 0 -.57 7.13l10.66 23.41c-.94 1.7-1.83 3.43-2.73 5.16L25.08 153.6a7.35 7.35 0 0 0 -4.79 11.54l15 20.82c-.59 1.87-1.13 3.77-1.68 5.66l-24 9a7.35 7.35 0 0 0 -2.44 12.25l18.72 17.5c-.21 1.95-.38 3.91-.55 5.88L3.48 249.8a7.35 7.35 0 0 0 0 12.5L25.3 275.8c.17 2 .34 3.92 .55 5.87L7.13 299.1a7.35 7.35 0 0 0 2.44 12.25l24 9c.55 1.89 1.08 3.78 1.68 5.65l-15 20.83a7.35 7.35 0 0 0 4.79 11.54l25.42 4.15c.9 1.72 1.79 3.45 2.73 5.14L42.56 391.1a7.35 7.35 0 0 0 .57 7.13 7.13 7.13 0 0 0 6.37 3.26l25.83-.91q1.77 2.22 3.6 4.4L73 430.2A7.36 7.36 0 0 0 81.84 439L107 433.1q2.18 1.83 4.41 3.61l-.92 25.82a7.35 7.35 0 0 0 10.39 6.95l23.43-10.68c1.69 .94 3.42 1.83 5.14 2.73l4.15 25.42a7.34 7.34 0 0 0 11.54 4.78l20.83-15c1.86 .6 3.76 1.13 5.65 1.68l9 24a7.36 7.36 0 0 0 12.25 2.44l17.5-18.72c1.95 .21 3.92 .38 5.88 .55l13.51 21.82a7.35 7.35 0 0 0 12.5 0l13.51-21.82c2-.17 3.93-.34 5.88-.56l17.5 18.73a7.36 7.36 0 0 0 12.25-2.44l9-24c1.89-.55 3.78-1.08 5.65-1.68l20.82 15a7.34 7.34 0 0 0 11.54-4.78l4.15-25.42c1.72-.9 3.45-1.79 5.15-2.73l23.42 10.68a7.35 7.35 0 0 0 10.39-6.95l-.91-25.82q2.22-1.79 4.4-3.61L430.2 439a7.36 7.36 0 0 0 8.84-8.84L433.1 405q1.83-2.17 3.61-4.4l25.82 .91a7.23 7.23 0 0 0 6.37-3.26 7.35 7.35 0 0 0 .58-7.13L458.8 367.7c.94-1.7 1.83-3.43 2.73-5.15l25.42-4.15a7.35 7.35 0 0 0 4.79-11.54l-15-20.83c.59-1.87 1.13-3.76 1.67-5.65l24-9a7.35 7.35 0 0 0 2.44-12.25l-18.72-17.5c.21-1.95 .38-3.91 .55-5.87l21.82-13.51a7.35 7.35 0 0 0 0-12.5zm-151 129.1A13.91 13.91 0 0 0 341 389.5l-7.64 35.67A187.5 187.5 0 0 1 177 424.4l-7.64-35.66a13.87 13.87 0 0 0 -16.46-10.68l-31.51 6.76a187.4 187.4 0 0 1 -16.26-19.21H258.3c1.72 0 2.89-.29 2.89-1.91V309.5c0-1.57-1.17-1.91-2.89-1.91H213.5l.05-34.35H262c4.41 0 23.66 1.28 29.79 25.87 1.91 7.55 6.17 32.14 9.06 40 2.89 8.82 14.6 26.46 27.1 26.46H407a187.3 187.3 0 0 1 -17.34 20.09zm25.77 34.49A15.24 15.24 0 1 1 368 398.1h.44A15.23 15.23 0 0 1 383.2 413.3zm-225.6-.68a15.24 15.24 0 1 1 -15.25-15.25h.45A15.25 15.25 0 0 1 157.6 412.6zM69.57 234.1l32.83-14.6a13.88 13.88 0 0 0 7.06-18.33L102.7 186h26.56V305.7H75.65A187.6 187.6 0 0 1 69.57 234.1zM58.31 198.1a15.24 15.24 0 0 1 15.23-15.25H74a15.24 15.24 0 1 1 -15.67 15.24zm155.2 24.49 .05-35.32h63.26c3.28 0 23.07 3.77 23.07 18.62 0 12.29-15.19 16.7-27.68 16.7zM399 306.7c-9.8 1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4 18.86-11.95 38.46-29.64 38.46-53.26 0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.3A187.5 187.5 0 0 1 221.2 70.06l23.47 24.6a13.82 13.82 0 0 0 19.6 .44l26.26-25a187.5 187.5 0 0 1 128.4 91.43l-18 40.57A14 14 0 0 0 408 220.4l34.59 15.33a187.1 187.1 0 0 1 .4 32.54H423.7c-1.91 0-2.69 1.27-2.69 3.13v8.82C421 301 409.3 305.6 399 306.7zM240 60.21A15.24 15.24 0 0 1 255.2 45h.45A15.24 15.24 0 1 1 240 60.21zM436.8 214a15.24 15.24 0 1 1 0-30.48h.44a15.24 15.24 0 0 1 -.44 30.48z\"],\n    \"safari\": [512, 512, [], \"f267\", \"M274.7 274.7l-37.38-37.38L166 346zM256 8C119 8 8 119 8 256S119 504 256 504 504 393 504 256 393 8 256 8zM411.9 182.8l14.78-6.13A8 8 0 0 1 437.1 181h0a8 8 0 0 1 -4.33 10.46L418 197.6a8 8 0 0 1 -10.45-4.33h0A8 8 0 0 1 411.9 182.8zM314.4 94l6.12-14.78A8 8 0 0 1 331 74.92h0a8 8 0 0 1 4.33 10.45l-6.13 14.78a8 8 0 0 1 -10.45 4.33h0A8 8 0 0 1 314.4 94zM256 60h0a8 8 0 0 1 8 8V84a8 8 0 0 1 -8 8h0a8 8 0 0 1 -8-8V68A8 8 0 0 1 256 60zM181 74.92a8 8 0 0 1 10.46 4.33L197.6 94a8 8 0 1 1 -14.78 6.12l-6.13-14.78A8 8 0 0 1 181 74.92zm-63.58 42.49h0a8 8 0 0 1 11.31 0L140 128.7A8 8 0 0 1 140 140h0a8 8 0 0 1 -11.31 0l-11.31-11.31A8 8 0 0 1 117.4 117.4zM60 256h0a8 8 0 0 1 8-8H84a8 8 0 0 1 8 8h0a8 8 0 0 1 -8 8H68A8 8 0 0 1 60 256zm40.15 73.21-14.78 6.13A8 8 0 0 1 74.92 331h0a8 8 0 0 1 4.33-10.46L94 314.4a8 8 0 0 1 10.45 4.33h0A8 8 0 0 1 100.2 329.2zm4.33-136h0A8 8 0 0 1 94 197.6l-14.78-6.12A8 8 0 0 1 74.92 181h0a8 8 0 0 1 10.45-4.33l14.78 6.13A8 8 0 0 1 104.5 193.2zM197.6 418l-6.12 14.78a8 8 0 0 1 -14.79-6.12l6.13-14.78A8 8 0 1 1 197.6 418zM264 444a8 8 0 0 1 -8 8h0a8 8 0 0 1 -8-8V428a8 8 0 0 1 8-8h0a8 8 0 0 1 8 8zm67-6.92h0a8 8 0 0 1 -10.46-4.33L314.4 418a8 8 0 0 1 4.33-10.45h0a8 8 0 0 1 10.45 4.33l6.13 14.78A8 8 0 0 1 331 437.1zm63.58-42.49h0a8 8 0 0 1 -11.31 0L372 383.3A8 8 0 0 1 372 372h0a8 8 0 0 1 11.31 0l11.31 11.31A8 8 0 0 1 394.6 394.6zM286.3 286.3 110.3 401.7 225.8 225.8 401.7 110.3zM437.1 331h0a8 8 0 0 1 -10.45 4.33l-14.78-6.13a8 8 0 0 1 -4.33-10.45h0A8 8 0 0 1 418 314.4l14.78 6.12A8 8 0 0 1 437.1 331zM444 264H428a8 8 0 0 1 -8-8h0a8 8 0 0 1 8-8h16a8 8 0 0 1 8 8h0A8 8 0 0 1 444 264z\"],\n    \"salesforce\": [640, 512, [], \"f83b\", \"M248.9 245.6h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.7-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.2 23.76a8.63 8.63 0 0 0 -3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93 .95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.4-165.4 136.4-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.9 92.18-213.8-5.17C8.91 428.8-50.19 266.5 53.36 205.6 18.61 126.2 76 32 167.7 32a124.2 124.2 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.7 640 232zm-519.5 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17 .71 1.64-.47 .24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0 -.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1 -19-6.35c-.47-.23-1.42-.71-1.65 .71l-2.4 7.47c-.47 .94 .23 1.18 .23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0 -.24 1.41l2.59 7.06a1 1 0 0 0 1.18 .7c.65 0 6.8-4 16.93-4 4 0 7.06 .71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0 -7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61 .32-21.64-22.78-21.64zM199 200.2a1.11 1.11 0 0 0 -1.18-1.18H188a1.11 1.11 0 0 0 -1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16 .23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12 .15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76 .47-.24 .71-.71 .24-1.88l-2.35-6.83a1.26 1.26 0 0 0 -1.41-.7c-2.59 .94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18 .71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0 -.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1 -19-6.35 1 1 0 0 0 -1.65 .71l-2.35 7.52c-.47 .94 .23 1.18 .23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.1 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14 .94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17 .47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0 -1.17 1.18l-1.42 7.76c0 .7 .24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41 .71-.24 .71-2.59 6.82-2.83 7.53s0 1.41 .47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52 .09 .3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0 -1.18-1.17h-9.4a1.11 1.11 0 0 0 -1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91 .05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0 -.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94 .47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53 .23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59 .74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0 -1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76 .47-.24 .71-.71 .24-1.88l-2.36-6.83a1.26 1.26 0 0 0 -1.41-.7c-2.59 .94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01 .94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\"],\n    \"sass\": [640, 512, [], \"f41e\", \"M301.8 378.9c-.3 .6-.6 1.08 0 0zm249.1-87a131.2 131.2 0 0 0 -58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.8 122.8 0 0 0 -5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4 .8-.7 1.3-.9 1.7 .3-.5 .5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4 .3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.9-65.2-99.07-116.5 1-18.7 7.5-67.8 127.1-127.4 98-48.8 176.4-35.4 189.8-5.6 19.4 42.5-41.89 121.6-143.7 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.2-11.8 61.78-23.8 109.9-90.1 95.77-145.6C386.5 18.32 293-.18 204.6 31.22c-52.69 18.7-109.7 48.1-150.7 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.1 125.7-1.6 .9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.6-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4 .7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.2 201.2 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31 .31 0 0 0 .1 .2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.7 450.1 270 450.1 270a201.2 201.2 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.2 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.4 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9 .8-.5 1.2-.7 1.2-.7 .9-.6 1.9-1.1 2.9-1.7 8.29 30.4 .3 57.2-19.1 78.3zm134.4-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5 .1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\"],\n    \"schlix\": [448, 512, [], \"f3ea\", \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2 .4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"],\n    \"scribd\": [384, 512, [], \"f28a\", \"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9 .6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9 .2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"],\n    \"searchengin\": [460, 512, [], \"f3eb\", \"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"],\n    \"sellcast\": [448, 512, [], \"f2da\", \"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8 .1 .1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8 .1 .1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"],\n    \"sellsy\": [640, 512, [], \"f213\", \"M539.7 237.3c3.064-12.26 4.29-24.82 4.29-37.38C544 107.4 468.6 32 376.1 32c-77.22 0-144.6 53.01-163 127.8-15.32-13.18-34.93-20.53-55.16-20.53-46.27 0-83.96 37.69-83.96 83.96 0 7.354 .92 15.02 3.065 22.37-42.9 20.23-70.79 63.74-70.79 111.2C6.216 424.8 61.68 480 129.4 480h381.2c67.72 0 123.2-55.16 123.2-123.2 .001-56.38-38.92-106-94.07-119.5zM199.9 401.6c0 8.274-7.048 15.32-15.32 15.32H153.6c-8.274 0-15.32-7.048-15.32-15.32V290.6c0-8.273 7.048-15.32 15.32-15.32h30.95c8.274 0 15.32 7.048 15.32 15.32v110.9zm89.48 0c0 8.274-7.048 15.32-15.32 15.32h-30.95c-8.274 0-15.32-7.048-15.32-15.32V270.1c0-8.274 7.048-15.32 15.32-15.32h30.95c8.274 0 15.32 7.048 15.32 15.32v131.5zm89.48 0c0 8.274-7.047 15.32-15.32 15.32h-30.95c-8.274 0-15.32-7.048-15.32-15.32V238.8c0-8.274 7.048-15.32 15.32-15.32h30.95c8.274 0 15.32 7.048 15.32 15.32v162.7zm87.03 0c0 8.274-7.048 15.32-15.32 15.32h-28.5c-8.274 0-15.32-7.048-15.32-15.32V176.9c0-8.579 7.047-15.63 15.32-15.63h28.5c8.274 0 15.32 7.048 15.32 15.63v224.6z\"],\n    \"servicestack\": [496, 512, [], \"f3ec\", \"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"],\n    \"shirtsinbulk\": [448, 512, [], \"f214\", \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\"],\n    \"shopify\": [448, 512, [], \"e057\", \"M388.3 104.1a4.66 4.66 0 0 0 -4.4-4c-2 0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.8 472S388.7 106.5 388.3 104.1zM288.6 70.47a116.7 116.7 0 0 0 -7.21-17.61C271 32.85 255.4 22 237 22a15 15 0 0 0 -4 .4c-.4-.8-1.2-1.2-1.6-2C223.4 11.63 213 7.63 200.6 8c-24 .8-48 18-67.25 48.83-13.61 21.62-24 48.84-26.82 70.06-27.62 8.4-46.83 14.41-47.23 14.81-14 4.4-14.41 4.8-16 18-1.2 10-38 291.8-38 291.8L307.9 504V65.67a41.66 41.66 0 0 0 -4.4 .4S297.9 67.67 288.6 70.47zM233.4 87.69c-16 4.8-33.63 10.4-50.84 15.61 4.8-18.82 14.41-37.63 25.62-50 4.4-4.4 10.41-9.61 17.21-12.81C232.2 54.86 233.8 74.48 233.4 87.69zM200.6 24.44A27.49 27.49 0 0 1 215 28c-6.4 3.2-12.81 8.41-18.81 14.41-15.21 16.42-26.82 42-31.62 66.45-14.42 4.41-28.83 8.81-42 12.81C131.3 83.28 163.8 25.24 200.6 24.44zM154.1 244.6c1.6 25.61 69.25 31.22 73.25 91.66 2.8 47.64-25.22 80.06-65.65 82.47-48.83 3.2-75.65-25.62-75.65-25.62l10.4-44s26.82 20.42 48.44 18.82c14-.8 19.22-12.41 18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44 27.22-93.27 94.47-97.68 26-1.6 39.23 4.81 39.23 4.81L221.4 225.4s-17.21-8-37.63-6.4C154.1 221 153.8 239.8 154.1 244.6zM249.4 82.88c0-12-1.6-29.22-7.21-43.63 18.42 3.6 27.22 24 31.23 36.43Q262.6 78.68 249.4 82.88z\"],\n    \"shopware\": [512, 512, [], \"f5b5\", \"M403.5 455.4A246.2 246.2 0 0 1 256 504C118.8 504 8 393 8 256 8 118.8 119 8 256 8a247.4 247.4 0 0 1 165.7 63.5 3.57 3.57 0 0 1 -2.86 6.18A418.6 418.6 0 0 0 362.1 74c-129.4 0-222.4 53.47-222.4 155.4 0 109 92.13 145.9 176.8 178.7 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.1a3.64 3.64 0 0 0 -1.27-2.44c-51.76-43-93.62-60.48-144.5-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.3 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.1z\"],\n    \"simplybuilt\": [512, 512, [], \"f215\", \"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"],\n    \"sistrix\": [448, 512, [], \"f3ee\", \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"],\n    \"sith\": [448, 512, [], \"f512\", \"M0 32l69.71 118.8-58.86-11.52 69.84 91.03a146.7 146.7 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.8-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.8 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.8 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21 .78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.2 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.2 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.9s89.65 34.18 123.8 0c34.18-34.18 34.19-89.68 0-123.9-17.09-17.09-39.5-25.61-61.92-25.61z\"],\n    \"sitrox\": [448, 512, [], \"e44a\", \"M212.4 .0085V0H448V128H64C64 57.6 141.8 .4753 212.4 .0085zM237.3 192V192C307.1 192.5 384 249.6 384 320H210.8V319.1C140.9 319.6 64 262.4 64 192H237.3zM235.6 511.1C306.3 511.5 384 454.4 384 384H0V512H235.6V511.1z\"],\n    \"sketch\": [512, 512, [], \"f7c6\", \"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\"],\n    \"skyatlas\": [640, 512, [], \"f216\", \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4 .1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"],\n    \"skype\": [448, 512, [], \"f17e\", \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"],\n    \"slack\": [448, 512, [62447, \"slack-hash\"], \"f198\", \"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.8c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.1c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.1 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.1 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.9c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.8c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\"],\n    \"slideshare\": [512, 512, [], \"f1e7\", \"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7 .1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7 .3-56.6 .3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7 .3 92.8 .3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\"],\n    \"snapchat\": [512, 512, [62124, \"snapchat-ghost\"], \"f2ab\", \"M496.9 366.6c-3.373-9.176-9.8-14.09-17.11-18.15-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.61-27.34-52.96-45.42a102.9 102.9 0 0 1 -9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.22 10.22 0 0 1 2.914-3.038c3.918-2.591 7.96-5.22 10.7-6.993 4.885-3.162 8.754-5.667 11.25-7.44 9.362-6.547 15.91-13.5 20-21.28a42.37 42.37 0 0 0 2.1-35.19c-6.2-16.32-21.61-26.45-40.29-26.45a55.54 55.54 0 0 0 -11.72 1.24c-1.029 .224-2.059 .459-3.063 .72 .174-11.16-.074-22.94-1.066-34.53-3.522-40.76-17.79-62.12-32.67-79.16A130.2 130.2 0 0 0 332.1 36.44C309.5 23.55 283.9 17 256 17S202.6 23.55 180 36.44a129.7 129.7 0 0 0 -33.28 26.78c-14.88 17.04-29.15 38.44-32.67 79.16-.992 11.59-1.24 23.43-1.079 34.53-1-.26-2.021-.5-3.051-.719a55.46 55.46 0 0 0 -11.72-1.24c-18.69 0-34.13 10.13-40.3 26.45a42.42 42.42 0 0 0 2.046 35.23c4.105 7.774 10.65 14.73 20.01 21.28 2.48 1.736 6.361 4.24 11.25 7.44 2.641 1.711 6.5 4.216 10.28 6.72a11.05 11.05 0 0 1 3.3 3.311c.794 1.624 .818 3.373-.36 6.6a102 102 0 0 1 -8.94 15.78c-12.08 17.67-29.36 32.65-51.43 44.64C32.35 348.6 20.2 352.8 15.07 366.7c-3.868 10.53-1.339 22.51 8.494 32.6a49.14 49.14 0 0 0 12.4 9.387 134.3 134.3 0 0 0 30.34 12.14 20.02 20.02 0 0 1 6.126 2.741c3.583 3.137 3.075 7.861 7.849 14.78a34.47 34.47 0 0 0 8.977 9.127c10.02 6.919 21.28 7.353 33.21 7.811 10.78 .41 22.99 .881 36.94 5.481 5.778 1.91 11.78 5.605 18.74 9.92C194.8 480.1 217.7 495 255.1 495s61.29-14.12 78.12-24.43c6.907-4.24 12.87-7.9 18.49-9.758 13.95-4.613 26.16-5.072 36.94-5.481 11.93-.459 23.19-.893 33.21-7.812a34.58 34.58 0 0 0 10.22-11.16c3.434-5.84 3.348-9.919 6.572-12.77a18.97 18.97 0 0 1 5.753-2.629A134.9 134.9 0 0 0 476 408.7a48.34 48.34 0 0 0 13.02-10.19l.124-.149C498.4 388.5 500.7 376.9 496.9 366.6zm-34.01 18.28c-20.75 11.46-34.53 10.23-45.26 17.14-9.114 5.865-3.72 18.51-10.34 23.08-8.134 5.617-32.18-.4-63.24 9.858-25.62 8.469-41.96 32.82-88.04 32.82s-62.04-24.3-88.08-32.88c-31-10.26-55.09-4.241-63.24-9.858-6.609-4.563-1.24-17.21-10.34-23.08-10.74-6.907-24.53-5.679-45.26-17.08-13.21-7.291-5.716-11.8-1.314-13.94 75.14-36.38 87.13-92.55 87.67-96.72 .645-5.046 1.364-9.014-4.191-14.15-5.369-4.96-29.19-19.7-35.8-24.32-10.94-7.638-15.75-15.26-12.2-24.64 2.48-6.485 8.531-8.928 14.88-8.928a27.64 27.64 0 0 1 5.965 .67c12 2.6 23.66 8.617 30.39 10.24a10.75 10.75 0 0 0 2.48 .335c3.6 0 4.86-1.811 4.612-5.927-.768-13.13-2.628-38.72-.558-62.64 2.84-32.91 13.44-49.22 26.04-63.64 6.051-6.932 34.48-36.98 88.86-36.98s82.88 29.92 88.93 36.83c12.61 14.42 23.23 30.73 26.04 63.64 2.071 23.92 .285 49.53-.558 62.64-.285 4.327 1.017 5.927 4.613 5.927a10.65 10.65 0 0 0 2.48-.335c6.745-1.624 18.4-7.638 30.4-10.24a27.64 27.64 0 0 1 5.964-.67c6.386 0 12.4 2.48 14.88 8.928 3.546 9.374-1.24 17-12.19 24.64-6.609 4.612-30.43 19.34-35.8 24.32-5.568 5.134-4.836 9.1-4.191 14.15 .533 4.228 12.51 60.4 87.67 96.72C468.6 373 476.1 377.5 462.9 384.9z\"],\n    \"snapchat-square\": [448, 512, [], \"f2ad\", \"M384 32H64A64 64 0 0 0 0 96V416a64 64 0 0 0 64 64H384a64 64 0 0 0 64-64V96A64 64 0 0 0 384 32zm-3.907 319.3-.083 .1a32.36 32.36 0 0 1 -8.717 6.823 90.26 90.26 0 0 1 -20.59 8.2 12.69 12.69 0 0 0 -3.852 1.76c-2.158 1.909-2.1 4.64-4.4 8.55a23.14 23.14 0 0 1 -6.84 7.471c-6.707 4.632-14.24 4.923-22.23 5.23-7.214 .274-15.39 .581-24.73 3.669-3.761 1.245-7.753 3.694-12.38 6.533-11.27 6.9-26.68 16.35-52.3 16.35s-40.92-9.4-52.11-16.28c-4.657-2.888-8.675-5.362-12.54-6.64-9.339-3.08-17.52-3.4-24.73-3.67-7.986-.307-15.52-.6-22.23-5.229a23.08 23.08 0 0 1 -6.01-6.11c-3.2-4.632-2.855-7.8-5.254-9.895a13.43 13.43 0 0 0 -4.1-1.834 89.99 89.99 0 0 1 -20.31-8.127 32.9 32.9 0 0 1 -8.3-6.284c-6.583-6.757-8.276-14.78-5.686-21.82 3.436-9.338 11.57-12.11 19.4-16.26 14.78-8.027 26.35-18.06 34.43-29.88a68.24 68.24 0 0 0 5.985-10.57c.789-2.158 .772-3.329 .241-4.416a7.386 7.386 0 0 0 -2.208-2.217c-2.532-1.676-5.113-3.353-6.882-4.5-3.27-2.141-5.868-3.818-7.529-4.98-6.267-4.383-10.65-9.04-13.4-14.24a28.4 28.4 0 0 1 -1.369-23.58c4.134-10.92 14.47-17.71 26.98-17.71a37.14 37.14 0 0 1 7.845 .83c.689 .15 1.37 .307 2.042 .482-.108-7.43 .058-15.36 .722-23.12 2.358-27.26 11.91-41.59 21.87-52.99a86.84 86.84 0 0 1 22.28-17.93C188.3 100.4 205.3 96 224 96s35.83 4.383 50.94 13.02a87.17 87.17 0 0 1 22.24 17.9c9.961 11.41 19.52 25.71 21.87 52.99a231.2 231.2 0 0 1 .713 23.12c.673-.174 1.362-.332 2.051-.481a37.13 37.13 0 0 1 7.844-.83c12.5 0 22.82 6.782 26.97 17.71a28.37 28.37 0 0 1 -1.4 23.56c-2.74 5.2-7.123 9.861-13.39 14.24-1.668 1.187-4.258 2.864-7.529 4.981-1.835 1.187-4.541 2.947-7.164 4.682a6.856 6.856 0 0 0 -1.951 2.034c-.506 1.046-.539 2.191 .166 4.208a69.01 69.01 0 0 0 6.085 10.79c8.268 12.1 20.19 22.31 35.45 30.41 1.486 .772 2.98 1.5 4.441 2.258 .722 .332 1.569 .763 2.491 1.3 4.9 2.723 9.2 6.01 11.45 12.15C387.8 336.9 386.3 344.7 380.1 351.3zm-16.72-18.46c-50.31-24.31-58.33-61.92-58.69-64.75-.431-3.379-.921-6.035 2.806-9.472 3.594-3.328 19.54-13.19 23.97-16.28 7.33-5.114 10.53-10.22 8.16-16.5-1.66-4.316-5.686-5.976-9.961-5.976a18.5 18.5 0 0 0 -3.993 .448c-8.035 1.743-15.84 5.769-20.35 6.857a7.1 7.1 0 0 1 -1.66 .224c-2.408 0-3.279-1.071-3.088-3.968 .564-8.783 1.759-25.92 .373-41.94-1.884-22.03-8.99-32.95-17.43-42.6-4.051-4.624-23.14-24.65-59.54-24.65S168.5 134.4 164.5 139c-8.434 9.654-15.53 20.57-17.43 42.6-1.386 16.01-.141 33.15 .373 41.94 .166 2.756-.68 3.968-3.088 3.968a7.1 7.1 0 0 1 -1.66-.224c-4.507-1.087-12.31-5.113-20.35-6.856a18.49 18.49 0 0 0 -3.993-.449c-4.25 0-8.3 1.636-9.961 5.977-2.374 6.276 .847 11.38 8.168 16.49 4.425 3.088 20.37 12.96 23.97 16.28 3.719 3.437 3.237 6.093 2.805 9.471-.356 2.79-8.384 40.39-58.69 64.75-2.946 1.428-7.96 4.45 .88 9.331 13.88 7.628 23.11 6.807 30.3 11.43 6.093 3.927 2.5 12.39 6.923 15.45 5.454 3.76 21.58-.266 42.33 6.6 17.43 5.744 28.12 22.01 58.96 22.01s41.79-16.3 58.94-21.97c20.8-6.865 36.89-2.839 42.34-6.6 4.433-3.055 .822-11.52 6.923-15.45 7.181-4.624 16.41-3.8 30.3-11.47C371.4 337.4 366.3 334.3 363.4 332.8z\"],\n    \"soundcloud\": [640, 512, [], \"f1be\", \"M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2 .8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1 .6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7 .6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3 .1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z\"],\n    \"sourcetree\": [448, 512, [], \"f7d3\", \"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.9 202.9 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.2 203.2 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"],\n    \"speakap\": [448, 512, [], \"f3f3\", \"M64 391.8C-15.41 303.6-8 167.4 80.64 87.64s224.8-73 304.2 15.24 72 224.4-16.64 304.1c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.9 35-346.2-67.5zm213.3-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33 .29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23 .18 96.42 .33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75 .41-23.25 31-25.37 37.53-25.26 .43 0 26.62 .26 39.62 17.37z\"],\n    \"speaker-deck\": [512, 512, [], \"f83c\", \"M213.9 296H100a100 100 0 0 1 0-200h132.8a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.8a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.9c26.48 0 26.46-40 0-40zM298 416a120.2 120.2 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0 -19.66-20H296.4a60.77 60.77 0 0 0 0-80h136.9c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\"],\n    \"spotify\": [496, 512, [], \"f1bc\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"],\n    \"square-font-awesome\": [448, 512, [], \"f425\", \"M384.5 32.5h-320c-35.3 0-64 28.7-64 64v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64v-320C448.5 61.2 419.8 32.5 384.5 32.5zM336.5 312.5c-31.6 11.2-41.2 16-59.8 16c-31.4 0-43.2-16-74.6-16c-10.2 0-18.2 1.6-25.6 4v-32c7.4-2.2 15.4-4 25.6-4c31.2 0 43.2 16 74.6 16c10.2 0 17.8-1.4 27.8-4.6v-96c-10 3.2-17.6 4.6-27.8 4.6c-31.4 0-43.2-16-74.6-16c-25.4 0-37.4 10.4-57.6 14.4v153.6c0 8.8-7.2 16-16 16c-8.8 0-16-7.2-16-16v-192c0-8.8 7.2-16 16-16c8.8 0 16 7.2 16 16v6.4c20.2-4 32.2-14.4 57.6-14.4c31.2 0 43.2 16 74.6 16c18.6 0 28.2-4.8 59.8-16V312.5z\"],\n    \"square-font-awesome-stroke\": [448, 512, [\"font-awesome-alt\"], \"f35c\", \"M201.6 152c-25.4 0-37.4 10.4-57.6 14.4V160c0-8.8-7.2-16-16-16s-16 7.2-16 16v192c0 .8 .1 1.6 .2 2.4c.1 .4 .1 .8 .2 1.2c1.6 7.1 8 12.4 15.6 12.4s14-5.3 15.6-12.4c.1-.4 .2-.8 .2-1.2c.1-.8 .2-1.6 .2-2.4V198.4c4-.8 7.7-1.8 11.2-3c14.3-4.7 26-11.4 46.4-11.4c31.4 0 43.2 16 74.6 16c8.9 0 15.9-1.1 24.2-3.5c1.2-.3 2.4-.7 3.6-1.1v96c-10 3.2-17.6 4.6-27.8 4.6c-31.4 0-43.4-16-74.6-16c-10.2 0-18.2 1.8-25.6 4v32c7.4-2.4 15.4-4 25.6-4c31.4 0 43.2 16 74.6 16c18.6 0 28.2-4.8 59.8-16V152c-31.6 11.2-41.2 16-59.8 16C244.8 168 232.8 152 201.6 152zM384 32H64C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96C448 60.7 419.3 32 384 32zM416 416c0 17.6-14.4 32-32 32H64c-17.6 0-32-14.4-32-32V96c0-17.6 14.4-32 32-32h320c17.6 0 32 14.4 32 32V416z\"],\n    \"squarespace\": [512, 512, [], \"f5be\", \"M186.1 343.3c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.2 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.1 445.1c19.27 19.29 50.53 19.31 69.82 .04l.04-.04 119.3-119.2c38.59-38.59 38.59-101.1 0-139.7-38.59-38.59-101.2-38.59-139.7 0l-157.2 157.2zm244.5-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.2c-19.27 19.29-50.53 19.31-69.82 .05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01 .01c-9.65 9.64-9.66 25.28-.02 34.93l.02 .02c38.58 38.57 101.1 38.57 139.7 0l157.2-157.2c9.65-9.65 9.65-25.29 .01-34.93zm-261.1 87.33l157.2-157.2c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.7 290.9c-19.28 19.29-50.56 19.3-69.85 .01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02 .02L28.93 186.1c-38.58 38.59-38.58 101.1 0 139.7 38.6 38.59 101.1 38.59 139.7 .01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.2-157.2c19.28-19.29 50.55-19.3 69.84-.02l.02 .02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.1-38.59-139.7 0L81.33 238.5c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"],\n    \"stack-exchange\": [448, 512, [], \"f18d\", \"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"],\n    \"stack-overflow\": [384, 512, [], \"f16c\", \"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"],\n    \"stackpath\": [448, 512, [], \"f842\", \"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.8c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18 .56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.4-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.2h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.9 325L347 186.8h-31.09L268 325zm106.5-138.2h-31.09L325.5 325h29.94z\"],\n    \"staylinked\": [440, 512, [], \"f3f5\", \"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7 .7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3 .4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7 .9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1 .1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9 .5l160.4 159c3.7 3.5 10 3.7 14.1 .5l45.8-35.8c4.1-3.2 4.4-8.7 .7-12.2z\"],\n    \"steam\": [496, 512, [], \"f1b6\", \"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3 .1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"],\n    \"steam-square\": [448, 512, [], \"f1b7\", \"M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4 .5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z\"],\n    \"steam-symbol\": [448, 512, [], \"f3f6\", \"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5 .2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9 .1 76.2-33.9 76.2-76.2z\"],\n    \"sticker-mule\": [576, 512, [], \"f3f7\", \"M561.7 199.6c-1.3 .3 .3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3 .5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8 .4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5 .5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5 .5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4 .5 1 1 2 1.5 3.5 .5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5 .5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5 .3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6 .5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3 .8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"],\n    \"strava\": [384, 512, [], \"f428\", \"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\"],\n    \"stripe\": [640, 512, [], \"f429\", \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3 .6-11.6 .6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4 .1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6 .1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4 .1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\"],\n    \"stripe-s\": [384, 512, [], \"f42a\", \"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.1 396.1 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"],\n    \"studiovinari\": [512, 512, [], \"f3f8\", \"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3 .7 20.3 .7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"],\n    \"stumbleupon\": [512, 512, [], \"f1a4\", \"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"],\n    \"stumbleupon-circle\": [496, 512, [], \"f1a3\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"],\n    \"superpowers\": [448, 512, [], \"f2dd\", \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"],\n    \"supple\": [640, 512, [], \"f3f9\", \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7 .4 15.5 .6 23.4 .6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6 .2 23.3 .5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"],\n    \"suse\": [640, 512, [], \"f7d6\", \"M471.1 102.7s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.12 307 7 335.1a111 111 0 0 0 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2 .3 27.8 24.3 42.6 41.5 42.6a49 49 0 0 0 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9 .5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5 .4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3 .5-76.2-25.4-81.6-28.2-.3-.4 .1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7 .8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3 .1-.1-.9-.3-.9 .7zm60.4 72.8a37.54 37.54 0 0 1 38.9-36.3c33.4 1.2 48.8 42.3 24.4 65.2-24.2 22.7-64.4 4.6-63.3-28.9zm38.6-25.3a26.27 26.27 0 1 0 25.4 27.2 26.19 26.19 0 0 0 -25.4-27.2zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.64 0 15.64z\"],\n    \"swift\": [448, 512, [], \"f8e1\", \"M448 156.1c0-4.51-.08-9-.2-13.52a196.3 196.3 0 0 0 -2.58-29.42 99.62 99.62 0 0 0 -9.22-28A94.08 94.08 0 0 0 394.8 44a99.17 99.17 0 0 0 -28-9.22 195 195 0 0 0 -29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.1c-4.51 0-9 .08-13.52 .2-2.45 .07-4.91 .15-7.37 .27a171.7 171.7 0 0 0 -22.06 2.32 103.1 103.1 0 0 0 -21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0 -18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0 -9.22 28 196.3 196.3 0 0 0 -2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.8c0 4.51 .08 9 .21 13.51a196.1 196.1 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5 .12 9 .17 13.52 .2H323.9c4.51 0 9-.08 13.52-.2a196.6 196.6 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.8a99.3 99.3 0 0 0 9.22-28 194.8 194.8 0 0 0 2.59-29.42c.12-4.5 .17-9 .2-13.51V172.1c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42 .25c-39.5 21-92.53 22.54-145.9-.38A234.6 234.6 0 0 1 45 290.1a230.6 230.6 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.1-147.2a197.1 197.1 0 0 1 -18.78-25.9c43.7 40 112.7 90.22 137.5 104.1-52.57-55.49-98.89-123.9-96.72-121.7 82.79 83.42 159.2 130.6 159.2 130.6 2.88 1.58 5 2.85 6.73 4a127.4 127.4 0 0 0 4.16-12.47c13.22-48.33-1.66-103.6-35.31-149.2C329.6 141.8 375 229.3 356.4 303.4c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z\"],\n    \"symfony\": [512, 512, [], \"f83d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.7 143.5c-11.47 .41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.8 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.7-29 34.46-58.4 39.82-71.58 40.26-24.65 .85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71 .11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.3 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.2 140.1 251.9 197 262 205.3c37.17-109 100.5-105.5 102.4-105.5 25.16-.81 44.19 10.59 44.83 28.65 .25 7.69-4.17 22.59-19.52 23.13z\"],\n    \"teamspeak\": [512, 512, [], \"f4f9\", \"M244.2 346.8c2.4-12.3-12-30-32.4-48.7-20.9-19.2-48.2-39.1-63.4-46.6-21.7-12-41.7-1.8-46.3 22.7-5 26.2 0 51.4 14.5 73.9 10.2 15.5 25.4 22.7 43.4 24 11.6 .6 52.5 2.2 61.7-1 11.9-4.3 20.1-11.8 22.5-24.3zm205 20.8a5.22 5.22 0 0 0 -8.3 2.4c-8 25.4-44.7 112.5-172.1 121.5-149.7 10.5 80.3 43.6 145.4-6.4 22.7-17.4 47.6-35 46.6-85.4-.4-10.1-4.9-26.69-11.6-32.1zm62-122.4c-.3-18.9-8.6-33.4-26-42.2-2.9-1.3-5-2.7-5.9-6.4A222.6 222.6 0 0 0 438.9 103c-1.1-1.5-3.5-3.2-2.2-5 8.5-11.5-.3-18-7-24.4Q321.4-31.11 177.4 13.09c-40.1 12.3-73.9 35.6-102 67.4-4 4.3-6.7 9.1-3 14.5 3 4 1.3 6.2-1 9.3C51.6 132 38.2 162.6 32.1 196c-.7 4.3-2.9 6-6.4 7.8-14.2 7-22.5 18.5-24.9 34L0 264.3v20.9c0 30.8 21 50.4 51.8 49 7.7-.3 11.7-4.3 12-11.5 2-77.5-2.4-95.4 3.7-125.8C92.1 72.39 234.3 5 345.3 65.39 411.4 102 445.7 159 447.6 234.8c.8 28.2 0 56.5 0 84.6 0 7 2.2 12.5 9.4 14.2 24.1 5 49.2-12 53.2-36.7 2.9-17.1 1-34.5 1-51.7zm-159.6 131.5c36.5 2.8 59.3-28.5 58.4-60.5-2.1-45.2-66.2-16.5-87.8-8-73.2 28.1-45 54.9-22.2 60.8z\"],\n    \"telegram\": [496, 512, [62462, \"telegram-plane\"], \"f2c6\", \"M248 8C111 8 0 119 0 256S111 504 248 504 496 392.1 496 256 384.1 8 248 8zM362.1 176.7c-3.732 39.22-19.88 134.4-28.1 178.3-3.476 18.58-10.32 24.82-16.95 25.42-14.4 1.326-25.34-9.517-39.29-18.66-21.83-14.31-34.16-23.22-55.35-37.18-24.49-16.14-8.612-25 5.342-39.5 3.652-3.793 67.11-61.51 68.33-66.75 .153-.655 .3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283 .746-104.6 69.14-14.85 10.19-26.89 9.934c-8.855-.191-25.89-5.006-38.55-9.123-15.53-5.048-27.88-7.717-26.8-16.29q.84-6.7 18.45-13.7 108.4-47.25 144.6-62.3c68.87-28.65 83.18-33.62 92.51-33.79 2.052-.034 6.639 .474 9.61 2.885a10.45 10.45 0 0 1 3.53 6.716A43.76 43.76 0 0 1 362.1 176.7z\"],\n    \"tencent-weibo\": [384, 512, [], \"f1d5\", \"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1 .1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"],\n    \"the-red-yeti\": [512, 512, [], \"f69d\", \"M488.2 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0 -25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5 .5a239.4 239.4 0 0 0 -68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0 -.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.3 194.3 0 0 0 -46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.2 200.2 0 0 0 -27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7 .7 3.4 1.2 5.2 0 25.5 .4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.8 181.8 0 0 0 495 255a44.74 44.74 0 0 0 -6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.4 242.4 0 0 1 -27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1 -1.7-15.2c5.4 .5 8.8 3.4 9.3 10.1 .5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8 .9-.7 14.8h-2.5a62.32 62.32 0 0 0 -8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5 .5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.7 234.7 0 0 0 -6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1 .5c-11.8 13.5-27.8 21.9-48.5 24.8a201.3 201.3 0 0 1 -23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0 -14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7 .5 1.2c2 .2 3.9 .5 6.2 .7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4 .5 13 1 19.4 1.2 6.4 0 8.4 .5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.1 141.1 0 0 1 -3 28.3 209.9 209.9 0 0 1 -16 46l2.5 .5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2 .2-.2 .2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.3-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3 .5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.6 262.6 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2 .7 89.5zm115.3-214.4l-2.5 .5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.8 214.8 0 0 1 -93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2 .4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7 .5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.2 254.2 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0 -14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2 .5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5 .5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6 .3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5 .5 .5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0 -.5-1.7 14.21 14.21 0 0 0 -13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0 -2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1 -11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9 .5 .5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1 .5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2 .5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1 .5c-5.9 1.2-12.3 4.2-19.4 8.4z\"],\n    \"themeco\": [448, 512, [], \"f5c6\", \"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.8c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.8 503.7c-9.93 5.66-26 5.57-35.85-.21L17.86 395.1C8 389.3 0 375.4 0 364V146.7c0-11.44 8-25.36 17.91-31.08zm-77.4 199.8c-15.94 0-31.89 .14-47.83 .14v101.4H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.1 100.3l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.6h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.6-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\"],\n    \"themeisle\": [512, 512, [], \"f2b2\", \"M208 88.29c0-10 6.286-21.71 17.72-21.71 11.14 0 17.71 11.71 17.71 21.71 0 10.28-6.572 21.71-17.71 21.71C214.3 110 208 98.57 208 88.29zm304 160c0 36-11.43 102.3-36.29 129.7-22.86 24.86-87.43 61.14-120.9 70.57l-1.143 .286v32.57c0 16.29-12.57 30.57-29.14 30.57-10 0-19.43-5.714-24.57-14.29-5.427 8.572-14.86 14.29-24.86 14.29-10 0-19.43-5.714-24.86-14.29-5.142 8.572-14.57 14.29-24.57 14.29-10.29 0-19.43-5.714-24.86-14.29-5.143 8.572-14.57 14.29-24.57 14.29-18.86 0-29.43-15.71-29.43-32.86-16.29 12.28-35.72 19.43-56.57 19.43-22 0-43.43-8.285-60.29-22.86 10.28-.286 20.57-2.286 30.28-5.714-20.86-5.714-39.43-18.86-52-36.29 21.37 4.645 46.21 1.673 67.14-11.14-22-22-56.57-58.86-68.57-87.43C1.143 321.7 0 303.7 0 289.4c0-49.71 20.29-160 86.29-160 10.57 0 18.86 4.858 23.14 14.86a158.8 158.8 0 0 1 12-15.43c2-2.572 5.714-5.429 7.143-8.286 7.999-12.57 11.71-21.14 21.71-34C182.6 45.43 232 17.14 285.1 17.14c6 0 12 .285 17.71 1.143C313.7 6.571 328.9 0 344.6 0c14.57 0 29.71 6 40 16.29 .857 .858 1.428 2.286 1.428 3.428 0 3.714-10.28 13.43-12.86 16.29 4.286 1.429 15.71 6.858 15.71 12 0 2.857-2.857 5.143-4.571 7.143 31.43 27.71 49.43 67.14 56.29 108 4.286-5.143 10.28-8.572 17.14-8.572 10.57 0 20.86 7.144 28.57 14C507.1 187.1 512 221.7 512 248.3zM188 89.43c0 18.29 12.57 37.14 32.29 37.14 19.71 0 32.28-18.86 32.28-37.14 0-18-12.57-36.86-32.28-36.86-19.72 0-32.29 18.86-32.29 36.86zM237.7 194c0-19.71 3.714-39.14 8.571-58.29-52.04 79.53-13.53 184.6 68.86 184.6 21.43 0 42.57-7.714 60-20 2-7.429 3.714-14.86 3.714-22.57 0-14.29-6.286-21.43-20.57-21.43-4.571 0-9.143 .857-13.43 1.714-63.34 12.67-107.1 3.669-107.1-63.1zm-41.14 254.9c0-11.14-8.858-20.86-20.29-20.86-11.43 0-20 9.715-20 20.86v32.57c0 11.14 8.571 21.14 20 21.14 11.43 0 20.29-9.715 20.29-21.14v-32.57zm49.14 0c0-11.14-8.572-20.86-20-20.86-11.43 0-20.29 9.715-20.29 20.86v32.57c0 11.14 8.857 21.14 20.29 21.14 11.43 0 20-10 20-21.14v-32.57zm49.71 0c0-11.14-8.857-20.86-20.28-20.86-11.43 0-20.29 9.715-20.29 20.86v32.57c0 11.14 8.857 21.14 20.29 21.14 11.43 0 20.28-9.715 20.28-21.14v-32.57zm49.72 0c0-11.14-8.857-20.86-20.29-20.86-11.43 0-20.29 9.715-20.29 20.86v32.57c0 11.14 8.858 21.14 20.29 21.14 11.43 0 20.29-10 20.29-21.14v-32.57zM421.7 286c-30.86 59.14-90.29 102.6-158.6 102.6-96.57 0-160.6-84.57-160.6-176.6 0-16.86 2-33.43 6-49.71-20 33.72-29.71 72.57-29.71 111.4 0 60.29 24.86 121.7 71.43 160.9 5.143-9.714 14.86-16.29 26-16.29 10 0 19.43 5.714 24.57 14.29 5.429-8.571 14.57-14.29 24.86-14.29 10 0 19.43 5.714 24.57 14.29 5.429-8.571 14.86-14.29 24.86-14.29 10 0 19.43 5.714 24.86 14.29 5.143-8.571 14.57-14.29 24.57-14.29 10.86 0 20.86 6.572 25.71 16 43.43-36.29 68.57-92 71.43-148.3zm10.57-99.71c0-53.71-34.57-105.7-92.57-105.7-30.28 0-58.57 15.14-78.86 36.86C240.9 183.8 233.4 254 302.3 254c28.81 0 97.36-28.54 84.29 36.86 28.86-26 45.71-65.71 45.71-104.6z\"],\n    \"think-peaks\": [576, 512, [], \"f731\", \"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5 .1-235.8-404.6z\"],\n    \"tiktok\": [448, 512, [], \"e07b\", \"M448 209.9a210.1 210.1 0 0 1 -122.8-39.25V349.4A162.6 162.6 0 1 1 185 188.3V278.2a74.62 74.62 0 1 0 52.23 71.18V0l88 0a121.2 121.2 0 0 0 1.86 22.17h0A122.2 122.2 0 0 0 381 102.4a121.4 121.4 0 0 0 67 20.14z\"],\n    \"trade-federation\": [496, 512, [], \"f513\", \"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5 .1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\"],\n    \"trello\": [448, 512, [], \"f181\", \"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8 .1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\"],\n    \"tumblr\": [320, 512, [], \"f173\", \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1 .8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5 .9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"],\n    \"tumblr-square\": [448, 512, [], \"f174\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2 .5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2 .5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z\"],\n    \"twitch\": [512, 512, [], \"f1e8\", \"M391.2 103.5H352.5v109.7h38.63zM285 103H246.4V212.8H285zM120.8 0 24.31 91.42V420.6H140.1V512l96.53-91.42h77.25L487.7 256V0zM449.1 237.8l-77.22 73.12H294.6l-67.6 64v-64H140.1V36.58H449.1z\"],\n    \"twitter\": [512, 512, [], \"f099\", \"M459.4 151.7c.325 4.548 .325 9.097 .325 13.65 0 138.7-105.6 298.6-298.6 298.6-59.45 0-114.7-17.22-161.1-47.11 8.447 .974 16.57 1.299 25.34 1.299 49.06 0 94.21-16.57 130.3-44.83-46.13-.975-84.79-31.19-98.11-72.77 6.498 .974 12.99 1.624 19.82 1.624 9.421 0 18.84-1.3 27.61-3.573-48.08-9.747-84.14-51.98-84.14-102.1v-1.299c13.97 7.797 30.21 12.67 47.43 13.32-28.26-18.84-46.78-51.01-46.78-87.39 0-19.49 5.197-37.36 14.29-52.95 51.65 63.67 129.3 105.3 216.4 109.8-1.624-7.797-2.599-15.92-2.599-24.04 0-57.83 46.78-104.9 104.9-104.9 30.21 0 57.5 12.67 76.67 33.14 23.72-4.548 46.46-13.32 66.6-25.34-7.798 24.37-24.37 44.83-46.13 57.83 21.12-2.273 41.58-8.122 60.43-16.24-14.29 20.79-32.16 39.31-52.63 54.25z\"],\n    \"twitter-square\": [448, 512, [], \"f081\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8 .2 5.7 .2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3 .6 10.4 .8 15.8 .8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.45 65.45 0 0 1 -29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z\"],\n    \"typo3\": [448, 512, [], \"f42b\", \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"],\n    \"uber\": [448, 512, [], \"f402\", \"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"],\n    \"ubuntu\": [496, 512, [], \"f7df\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm52.7 93c8.8-15.2 28.3-20.5 43.5-11.7 15.3 8.8 20.5 28.3 11.7 43.6-8.8 15.2-28.3 20.5-43.5 11.7-15.3-8.9-20.5-28.4-11.7-43.6zM87.4 287.9c-17.6 0-31.9-14.3-31.9-31.9 0-17.6 14.3-31.9 31.9-31.9 17.6 0 31.9 14.3 31.9 31.9 0 17.6-14.3 31.9-31.9 31.9zm28.1 3.1c22.3-17.9 22.4-51.9 0-69.9 8.6-32.8 29.1-60.7 56.5-79.1l23.7 39.6c-51.5 36.3-51.5 112.5 0 148.8L172 370c-27.4-18.3-47.8-46.3-56.5-79zm228.7 131.7c-15.3 8.8-34.7 3.6-43.5-11.7-8.8-15.3-3.6-34.8 11.7-43.6 15.2-8.8 34.7-3.6 43.5 11.7 8.8 15.3 3.6 34.8-11.7 43.6zm.3-69.5c-26.7-10.3-56.1 6.6-60.5 35-5.2 1.4-48.9 14.3-96.7-9.4l22.5-40.3c57 26.5 123.4-11.7 128.9-74.4l46.1 .7c-2.3 34.5-17.3 65.5-40.3 88.4zm-5.9-105.3c-5.4-62-71.3-101.2-128.9-74.4l-22.5-40.3c47.9-23.7 91.5-10.8 96.7-9.4 4.4 28.3 33.8 45.3 60.5 35 23.1 22.9 38 53.9 40.2 88.5l-46 .6z\"],\n    \"uikit\": [448, 512, [], \"f403\", \"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"],\n    \"umbraco\": [510, 512, [], \"f8e8\", \"M255.4 8C118.4 7.83 7.14 118.7 7 255.7c-.07 137 111 248.2 248 248.3 136.9 0 247.8-110.7 248-247.7S392.3 8.17 255.4 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78 .22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.8 224.8 0 0 1 0-30.71 418.4 418.4 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.6 380.6 0 0 0 -2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.6 242.6 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0 -2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05 .81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.7 415.7 0 0 1 3.61 43.88 228.1 228.1 0 0 1 -.04 30.73z\"],\n    \"uncharted\": [448, 512, [], \"e084\", \"M171.7 232.8A5.381 5.381 0 0 0 176.7 229.5 48.08 48.08 0 0 1 191.6 204.2c1.243-.828 1.657-2.484 1.657-4.141a4.22 4.22 0 0 0 -2.071-3.312L74.43 128.5 148.1 85a9.941 9.941 0 0 0 4.968-8.281 9.108 9.108 0 0 0 -4.968-8.281L126.6 55.6a9.748 9.748 0 0 0 -9.523 0l-100.2 57.97a9.943 9.943 0 0 0 -4.969 8.281V236.1a9.109 9.109 0 0 0 4.969 8.281L39.24 258.1a8.829 8.829 0 0 0 4.968 1.242 9.4 9.4 0 0 0 6.625-2.484 10.8 10.8 0 0 0 2.9-7.039V164.5L169.7 232.4A4.5 4.5 0 0 0 171.7 232.8zM323.3 377.7a12.48 12.48 0 0 0 -4.969 1.242l-74.53 43.06V287.9c0-2.9-2.9-5.8-6.211-4.555a53.04 53.04 0 0 1 -28.98 .414 4.86 4.86 0 0 0 -6.21 4.555V421.6l-74.53-43.06a8.83 8.83 0 0 0 -4.969-1.242 9.631 9.631 0 0 0 -9.523 9.523v26.08a9.107 9.107 0 0 0 4.969 8.281l100.2 57.55A8.829 8.829 0 0 0 223.5 480a11.03 11.03 0 0 0 4.969-1.242l100.2-57.55a9.941 9.941 0 0 0 4.968-8.281V386.8C332.8 382.3 328.2 377.7 323.3 377.7zM286 78a23 23 0 1 0 -23-23A23 23 0 0 0 286 78zm63.63-10.09a23 23 0 1 0 23 23A23 23 0 0 0 349.6 67.91zM412.8 151.6a23 23 0 1 0 -23-23A23 23 0 0 0 412.8 151.6zm-63.18-9.2a23 23 0 1 0 23 23A23 23 0 0 0 349.6 142.4zm-63.63 83.24a23 23 0 1 0 -23-23A23 23 0 0 0 286 225.6zm-62.07 36.36a23 23 0 1 0 -23-23A23 23 0 0 0 223.9 262zm188.9-82.36a23 23 0 1 0 23 23A23 23 0 0 0 412.8 179.6zm0 72.27a23 23 0 1 0 23 23A23 23 0 0 0 412.8 251.9z\"],\n    \"uniregistry\": [384, 512, [], \"f404\", \"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5 .2-4.9 .2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\"],\n    \"unity\": [448, 512, [], \"e049\", \"M243.6 91.6L323.7 138.4C326.6 140 326.7 144.6 323.7 146.2L228.5 201.9C225.6 203.6 222.2 203.4 219.5 201.9L124.4 146.2C121.4 144.6 121.4 139.1 124.4 138.4L204.4 91.6V0L0 119.4V358.3L78.38 312.5V218.9C78.33 215.6 82.21 213.2 85.09 214.1L180.3 270.6C183.2 272.3 184.8 275.3 184.8 278.5V389.7C184.8 393 180.1 395.4 178.1 393.6L97.97 346.8L19.58 392.6L224 512L428.4 392.6L350 346.8L269.9 393.6C267.1 395.3 263.1 393.1 263.2 389.7V278.5C263.2 275.1 265.1 272.2 267.7 270.6L362.9 214.1C365.7 213.2 369.7 215.5 369.6 218.9V312.5L448 358.3V119.4L243.6 0V91.6z\"],\n    \"unsplash\": [448, 512, [], \"e07c\", \"M448 230.2V480H0V230.2H141.1V355.1H306.9V230.2zM306.9 32H141.1V156.9H306.9z\"],\n    \"untappd\": [640, 512, [], \"f405\", \"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1 .6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4 .9-2.5 4.4-2.3 7.4 .1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4 .9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3 .5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5 .1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6 .3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6 .5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"],\n    \"ups\": [384, 512, [], \"f7e0\", \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4 .6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2 .6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"],\n    \"usb\": [640, 512, [], \"f287\", \"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4 .8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9 .3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"],\n    \"usps\": [576, 512, [], \"f7e1\", \"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8 .1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\"],\n    \"ussunnah\": [512, 512, [], \"f407\", \"M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2 .8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7 .2-9.4 .5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5 .2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4 15 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6 .5 9.3 .5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 .8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3 .2 .6 .5 1.4 .6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2 .3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8 .5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6 .9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z\"],\n    \"vaadin\": [448, 512, [], \"f408\", \"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"],\n    \"viacoin\": [384, 512, [], \"f237\", \"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"],\n    \"viadeo\": [448, 512, [], \"f2a9\", \"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"],\n    \"viadeo-square\": [448, 512, [], \"f2aa\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4 .2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z\"],\n    \"viber\": [512, 512, [], \"f409\", \"M444 49.9C431.3 38.2 379.9 .9 265.3 .4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9 .4-85.7 .4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9 .4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9 .6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4 .7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5 .9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9 .1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7 .5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1 .8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"],\n    \"vimeo\": [448, 512, [], \"f40a\", \"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3 .9 49 22.5 47.1 64.7z\"],\n    \"vimeo-square\": [448, 512, [], \"f194\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z\"],\n    \"vimeo-v\": [448, 512, [], \"f27d\", \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"],\n    \"vine\": [384, 512, [], \"f1ca\", \"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"],\n    \"vk\": [448, 512, [], \"f189\", \"M31.49 63.49C0 94.98 0 145.7 0 247V264.1C0 366.3 0 417 31.49 448.5C62.98 480 113.7 480 215 480H232.1C334.3 480 385 480 416.5 448.5C448 417 448 366.3 448 264.1V247C448 145.7 448 94.98 416.5 63.49C385 32 334.3 32 232.1 32H215C113.7 32 62.98 32 31.49 63.49zM75.6 168.3H126.7C128.4 253.8 166.1 289.1 196 297.4V168.3H244.2V242C273.7 238.8 304.6 205.2 315.1 168.3H363.3C359.3 187.4 351.5 205.6 340.2 221.6C328.9 237.6 314.5 251.1 297.7 261.2C316.4 270.5 332.9 283.6 346.1 299.8C359.4 315.9 369 334.6 374.5 354.7H321.4C316.6 337.3 306.6 321.6 292.9 309.8C279.1 297.9 262.2 290.4 244.2 288.1V354.7H238.4C136.3 354.7 78.03 284.7 75.6 168.3z\"],\n    \"vnv\": [640, 512, [], \"f40b\", \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"],\n    \"vuejs\": [448, 512, [], \"f41f\", \"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"],\n    \"watchman-monitoring\": [512, 512, [], \"e087\", \"M256 16C123.5 16 16 123.5 16 256S123.5 496 256 496 496 388.5 496 256 388.5 16 256 16zM121.7 429.1C70.06 388.1 36.74 326.3 36.74 256a218.5 218.5 0 0 1 9.587-64.12l102.9-17.9-.121 10.97-13.94 2.013s-.144 12.5-.144 19.55a12.78 12.78 0 0 0 4.887 10.35l9.468 7.4zm105.7-283.3 8.48-7.618s6.934-5.38-.143-9.344c-7.188-4.024-39.53-34.5-39.53-34.5-5.348-5.477-8.257-7.347-15.46 0 0 0-32.34 30.47-39.53 34.5-7.078 3.964-.144 9.344-.144 9.344l8.481 7.618-.048 4.369L75.98 131c39.64-56.94 105.5-94.3 180-94.3A218.8 218.8 0 0 1 420.9 111.8l-193.5 37.7zm34.06 329.3-33.9-250.9 9.467-7.4a12.78 12.78 0 0 0 4.888-10.35c0-7.044-.144-19.55-.144-19.55l-13.94-2.013-.116-10.47 241.7 31.39A218.9 218.9 0 0 1 475.3 256C475.3 375.1 379.8 472.2 261.4 475.1z\"],\n    \"waze\": [512, 512, [], \"f83f\", \"M502.2 201.7C516.7 287.5 471.2 369.6 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1 -51.57-49c-6.44 .19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.9c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.3C94.8 95.2 193.1 32 288.1 32c102.5 0 197.1 70.67 214.1 169.7zM373.5 388.3c42-19.18 81.33-56.71 96.29-102.1 40.48-123.1-64.15-228-181.7-228-83.45 0-170.3 55.42-186.1 136-9.53 48.91 5 131.4-68.75 131.4C58.21 358.6 91.6 378.1 127 389.5c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9 .82a51.69 51.69 0 0 1 78.78-16.42zM205.1 187.1c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.6 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.6 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06 .28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\"],\n    \"weebly\": [512, 512, [], \"f5cc\", \"M425.1 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143c0 28.96 4.18 33.27 77.17 233.5 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.6 77.5-205.6 77.5-227.2 .63-48.32-36.01-83.47-86.92-83.47zm26.34 114.8l-65.57 176.4c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.4h-.95L216.1 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.6c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.8h.95l44.66-136.8c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.8h.95l44.03-139.8c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"],\n    \"weibo\": [512, 512, [], \"f18a\", \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8 .3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4 .6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"],\n    \"weixin\": [576, 512, [], \"f1d7\", \"M385.2 167.6c6.4 0 12.6 .3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2 .1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3 .1 10-9.9 19.6-24.4 19.6z\"],\n    \"whatsapp\": [448, 512, [], \"f232\", \"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7 .9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"],\n    \"whatsapp-square\": [448, 512, [], \"f40c\", \"M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4 .9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6 .1 2.4 .1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3 .3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9 .9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z\"],\n    \"whmcs\": [448, 512, [], \"f40d\", \"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6 .3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1 .5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2 .2 6.9 .1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"],\n    \"wikipedia-w\": [640, 512, [], \"f266\", \"M640 51.2l-.3 12.2c-28.1 .8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3 .3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4 .2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5 .3v13.1c-19.4 .6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4 .3-3.6 0-10.3 .3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5 .8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1 .2 .5z\"],\n    \"windows\": [448, 512, [], \"f17a\", \"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"],\n    \"wirsindhandwerk\": [512, 512, [\"wsh\"], \"e2d0\", \"M50.77 479.8h83.36V367.8l-83.36 47.01zm329 0h82.35V414.9l-82.35-47.01zm.0057-448V251.6L256.2 179.2 134.5 251.6V31.81H50.77V392.6L256.2 270.3 462.2 392.6V31.81z\"],\n    \"wix\": [640, 512, [], \"f5cf\", \"M393.4 131.7c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.7-28.48-108.6c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.9 55.28 167.2C49.73 140.5 23.86 128.1 0 131.1l65.57 247.9s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.4 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.9c-24.42-3.07-49.82 8.93-55.3 35.27zm115.8 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.1s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.4l-.02 .01v-8.98zm163.4 84.08L640 132.8s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47 .73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.7-82.97 123.4s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.5z\"],\n    \"wizards-of-the-coast\": [640, 512, [], \"f730\", \"M219.2 345.7c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92 .26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.8 75.94c-.34 1.7-.55 1.67 .79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.3-78.03-54.73-6.02-124.4 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79 .26c63.89-58.4 131.2-77.25 184.4-73.85 58.4 3.67 100 34.04 100 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.3 240.4c.79 7.07 4.19 10.21 9.17 10.47 5.5 .26 9.43-2.62 10.47-6.55 .79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.8 89.32 13.1 226.8 .79 241.2c-1.05 .52-1.31 .79 .79 1.31 60.49 16.5 155.8 81.18 196.1 202.2l1.05 .26c55.25-69.92 140.9-128.1 236.1-128.1 80.92 0 130.1 42.16 130.1 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2 .79 .79 .79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26 .52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78 .79 3.4 2.09 9.69 2.36 14.93 0 1.05 .79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.7 176 489.4 89.32 342.3 89.32zm-99.24 289.6c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5 .28 .39 12.13 16.57-4.71 31.16zm2.09-136.4l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.6l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52 .26c1.31 1.83 2.09 2.88 3.4 4.71l-.26 .52c-1.05-.26-2.36-.79-5.24 .26-2.09 .79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83 .52 1.83 1.83 5.5l-.26 .26c-3.06 .61-4.65 .34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26 .26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76 .26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52 .26 3.14 4.98-.26 .52c-3.53-1.76-7.35 .76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26 .52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4 .79-8.9 2.62-12.83 3.93l-.26 .26c.79 2.62 3.14 9.95 4.19 13.88 .79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88 .26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26 .26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26 .26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45 .54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26 .26c-4.71 .52-14.14 2.36-22.52 4.19l-.26-.26 .79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26 .26c.52 2.36 .79 3.14 1.57 5.5l-.26 .26c-1.14-1.14-3.34-3.2-16.24-.79l-.26 .26c.26 1.57 1.05 6.55 1.57 9.95l.26 .26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26 .26c.26 2.09 1.57 9.43 2.09 12.57l.26 .26c1.15 .38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25 .02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24 .79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69 .26 2.36 .52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26 .26c-.52 1.83-1.83 6.02-1.83 6.28l-.52 .52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26 .52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69 .79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.4c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24 .59-7.27 .26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09 .79 5.5 2.09 7.59 2.88 .48 .48 .18-1.87-1.05 25.14-.24 1.81 .02 2.6 .8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27 .09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26 .26-5.76-4.45 .26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26 .26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59 .75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38 .79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.5-191.9-129.6-53.42-1.05-94.27 15.45-132.8 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05 .26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.6 101.1 231.9 93.23 231.5c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4 .52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.1-35.88 67.04 1.05 167.3 40.85 199.8 139.8 .78 2.1-.01 2.63-.79 .27zM203.5 152.4s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.8 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.4 67.07c-58.4 0-106.1 12.05-114.1 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57 .26c6.55-1.83 48.97-13.88 110.2-13.88 180.2 0 301.7 116.8 301.7 223.4v9.95c0 1.31 .79 2.62 1.05 .52 .52-2.09 .79-8.64 .79-19.64 .26-83.79-96.63-227.6-321.6-227.6zm211.1 169.7c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81 .52 13.35 6.02 14.66 3.67 1.05 8.9 .52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.6c1.83 .52 3.14 1.05 5.76 1.83 0-1.83 .52-8.38 .79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\"],\n    \"wodu\": [640, 512, [], \"e088\", \"M178.4 339.7H141.1L112.2 223.5h-.478L83.23 339.7H45.2L0 168.9H37.55L64.57 285.2h.478L94.71 168.9h35.16l29.18 117.7h.479L187.5 168.9h36.83zM271.4 212.7c38.98 0 64.1 25.83 64.1 65.29 0 39.22-25.11 65.05-64.1 65.05-38.74 0-63.85-25.83-63.85-65.05C207.5 238.5 232.7 212.7 271.4 212.7zm0 104.8c23.2 0 30.13-19.85 30.13-39.46 0-19.85-6.934-39.7-30.13-39.7-27.7 0-29.89 19.85-29.89 39.7C241.5 297.6 248.4 317.5 271.4 317.5zM435.1 323.9h-.478c-7.893 13.39-21.76 19.13-37.55 19.13-37.31 0-55.49-32.04-55.49-66.25 0-33.24 18.42-64.1 54.77-64.1 14.59 0 28.94 6.218 36.83 18.42h.24V168.9h33.96v170.8H435.1zM405.4 238.3c-22.24 0-29.89 19.13-29.89 39.46 0 19.37 8.848 39.7 29.89 39.7 22.48 0 29.18-19.61 29.18-39.94C434.6 257.4 427.4 238.3 405.4 238.3zM592.1 339.7H560.7V322.5h-.718c-8.609 13.87-23.44 20.57-37.79 20.57-36.11 0-45.2-20.33-45.2-50.94V216.1h33.96V285.9c0 20.33 5.979 30.37 21.76 30.37 18.42 0 26.31-10.28 26.31-35.39V216.1H592.1zM602.5 302.9H640v36.83H602.5z\"],\n    \"wolf-pack-battalion\": [512, 512, [], \"f514\", \"M267.7 471.5l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.1-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.2 456.4 239.7l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.2l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.8l-58 38.71-3.52 93.25L369.8 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.6 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.6-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.3 59.82-3.52-93.25-58.06-38.71C185 65.1 135.8 22.87 95.3 0c-17.54 61.12-4.4 118.8 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.4 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.2 81.37 149.1 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.1 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1 -18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.7 376.5L181.5 366c-7.47-4.36-13.76-8.42-19.35-12.32 .6 7.26 .27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94 .9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\"],\n    \"wordpress\": [512, 512, [], \"f19a\", \"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"],\n    \"wordpress-simple\": [512, 512, [], \"f411\", \"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"],\n    \"wpbeginner\": [512, 512, [], \"f297\", \"M462.8 322.4C519 386.7 466.1 480 370.9 480c-39.6 0-78.82-17.69-100.1-50.04-6.887 .356-22.7 .356-29.59 0C219.8 462.4 180.6 480 141.1 480c-95.49 0-148.3-92.1-91.86-157.6C-29.92 190.5 80.48 32 256 32c175.6 0 285.9 158.6 206.8 290.4zm-339.6-82.97h41.53v-58.08h-41.53v58.08zm217.2 86.07v-23.84c-60.51 20.92-132.4 9.198-187.6-33.97l.246 24.9c51.1 46.37 131.7 57.88 187.3 32.91zm-150.8-86.07h166.1v-58.08H189.6v58.08z\"],\n    \"wpexplorer\": [512, 512, [], \"f2de\", \"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"],\n    \"wpforms\": [448, 512, [], \"f298\", \"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2 .1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"],\n    \"wpressr\": [496, 512, [], \"f3e4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S384.1 8 248 8zm171.3 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03 .06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.8 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24 .1 28.48 .02 42.72 .05 6.24 .01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6 .23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21 .08 30.43 .02 45.64 .04 5.56 .01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33 .04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43 .05 52.86 0 79.29 .05 12.44 .02 13.93-13.65 3.9-13.64-25.26 .03-50.52 .02-75.78 .02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09 .06 25.98 .02 130.8 .03 6.08-.01 8.03 2.79 5.62 8.27z\"],\n    \"xbox\": [512, 512, [], \"f412\", \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7 .1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"],\n    \"xing\": [384, 512, [], \"f168\", \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8 .3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1 .2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"],\n    \"xing-square\": [448, 512, [], \"f169\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6 .2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1 .1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z\"],\n    \"y-combinator\": [448, 512, [], \"f23b\", \"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"],\n    \"yahoo\": [512, 512, [], \"f19e\", \"M223.7 141.1 167 284.2 111 141.1H14.93L120.8 390.2 82.19 480h94.17L317.3 141.1zm105.4 135.8a58.22 58.22 0 1 0 58.22 58.22A58.22 58.22 0 0 0 329.1 276.9zM394.6 32l-93 223.5H406.4L499.1 32z\"],\n    \"yammer\": [512, 512, [], \"f840\", \"M500.7 159.5a12.78 12.78 0 0 0 -6.4-8.282 13.95 13.95 0 0 0 -10.08-1.125L457.8 156.7l-.043-.2-22.3 5.785-1.243 .333-.608-2.17A369 369 0 0 0 347.5 4.289a14.1 14.1 0 0 0 -19.78-.463l-102.9 102.7H24.95A24.9 24.9 0 0 0 0 131.4V380.4a24.96 24.96 0 0 0 24.92 24.9H224.1L328.1 508a13.67 13.67 0 0 0 19.33 0c.126-.126 .249-.255 .37-.385a368 368 0 0 0 69.58-107.4 403.5 403.5 0 0 0 17.3-50.8v-.028l20.41 5.336 .029-.073L483.3 362a20.25 20.25 0 0 0 2.619 .5 13.36 13.36 0 0 0 4.139-.072 13.5 13.5 0 0 0 10.52-9.924 415.9 415.9 0 0 0 .058-193zM337.1 24.65l.013 .014h-.013zm-110.2 165.2L174.3 281.1a11.34 11.34 0 0 0 -1.489 5.655v46.19a22.04 22.04 0 0 1 -22.04 22h-3.4A22.07 22.07 0 0 1 125.3 332.1V287.3a11.53 11.53 0 0 0 -1.388-5.51l-51.6-92.2a21.99 21.99 0 0 1 19.26-32.73h3.268a22.06 22.06 0 0 1 19.61 11.92l36.36 70.28 37.51-70.51a22.07 22.07 0 0 1 38.56-.695 21.7 21.7 0 0 1 0 21.97zM337.1 24.67a348.1 348.1 0 0 1 75.8 141.3l.564 1.952-114.1 29.6V131.4a25.01 25.01 0 0 0 -24.95-24.9H255.1zm60.5 367.3v-.043l-.014 .014a347.2 347.2 0 0 1 -60.18 95.23l-82.2-81.89h19.18a24.98 24.98 0 0 0 24.95-24.9v-66.2l114.6 29.86A385.2 385.2 0 0 1 397.6 391.1zm84-52.45 .015 .014-50.62-13.13L299.4 292.1V219.6l119.7-30.99 4.468-1.157 39.54-10.25 18.51-4.816A393 393 0 0 1 481.6 339.5z\"],\n    \"yandex\": [256, 512, [], \"f413\", \"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"],\n    \"yandex-international\": [320, 512, [], \"f414\", \"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"],\n    \"yarn\": [496, 512, [], \"f7e3\", \"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4 .1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3 .8-10.8-5.7 .8-19.2 .8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3 .8 1.4 13.7 .8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2 .9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4 .2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"],\n    \"yelp\": [384, 512, [], \"f1e9\", \"M42.9 240.3l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.5a22.79 22.79 0 0 1 -28.21-19.6 197.2 197.2 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.3a199.4 199.4 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.9 490l3.9-110.8c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.3-109.9l58.81 94a22.93 22.93 0 0 0 34 5.5 198.4 198.4 0 0 0 52.71-67.61A23 23 0 0 0 364.2 370l-105.4-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.3-132.2a197.4 197.4 0 0 0 -50.41-69.31 22.85 22.85 0 0 0 -34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.6a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0 -9.9 32l104.1 180.4c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0 -24.5-22.8 320.4 320.4 0 0 0 -112.3 30.1z\"],\n    \"yoast\": [448, 512, [], \"f2b1\", \"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1 .6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"],\n    \"youtube\": [576, 512, [61802], \"f167\", \"M549.7 124.1c-6.281-23.65-24.79-42.28-48.28-48.6C458.8 64 288 64 288 64S117.2 64 74.63 75.49c-23.5 6.322-42 24.95-48.28 48.6-11.41 42.87-11.41 132.3-11.41 132.3s0 89.44 11.41 132.3c6.281 23.65 24.79 41.5 48.28 47.82C117.2 448 288 448 288 448s170.8 0 213.4-11.49c23.5-6.321 42-24.17 48.28-47.82 11.41-42.87 11.41-132.3 11.41-132.3s0-89.44-11.41-132.3zm-317.5 213.5V175.2l142.7 81.21-142.7 81.2z\"],\n    \"youtube-square\": [448, 512, [61798], \"f431\", \"M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z\"],\n    \"zhihu\": [640, 512, [], \"f63f\", \"M170.5 148.1v217.5l23.43 .01 7.71 26.37 42.01-26.37h49.53V148.1H170.5zm97.75 193.9h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.8h72.82v170.3zm-118.5-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.1 0 396.3c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.1c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.1-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.4c-19.78 0-130.9 .93-131.1 .93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.2 16.49-232.4 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15 .89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.4s2.82 22.31 25.51 22.85h107.9v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08 .11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.4c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\"]\n  };\n\n  bunker(function () {\n    defineIcons('fab', icons);\n    defineIcons('fa-brands', icons);\n  });\n\n}());\n(function () {\n  'use strict';\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var PRODUCTION = function () {\n    try {\n      return \"production\" === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce(function (acc, iconName) {\n      var icon = icons[iconName];\n      var expanded = !!icon.icon;\n\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n\n      return acc;\n    }, {});\n  }\n\n  function defineIcons(prefix, icons) {\n    var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _params$skipHooks = params.skipHooks,\n        skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n    var normalized = normalizeIcons(icons);\n\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n\n\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"address-book\": [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M272 288h-64C163.8 288 128 323.8 128 368C128 376.8 135.2 384 144 384h192c8.836 0 16-7.164 16-16C352 323.8 316.2 288 272 288zM240 256c35.35 0 64-28.65 64-64s-28.65-64-64-64c-35.34 0-64 28.65-64 64S204.7 256 240 256zM496 320H480v96h16c8.836 0 16-7.164 16-16v-64C512 327.2 504.8 320 496 320zM496 64H480v96h16C504.8 160 512 152.8 512 144v-64C512 71.16 504.8 64 496 64zM496 192H480v96h16C504.8 288 512 280.8 512 272v-64C512 199.2 504.8 192 496 192zM384 0H96C60.65 0 32 28.65 32 64v384c0 35.35 28.65 64 64 64h288c35.35 0 64-28.65 64-64V64C448 28.65 419.3 0 384 0zM400 448c0 8.836-7.164 16-16 16H96c-8.836 0-16-7.164-16-16V64c0-8.838 7.164-16 16-16h288c8.836 0 16 7.162 16 16V448z\"],\n    \"address-card\": [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M208 256c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64s-64 28.65-64 64C144 227.3 172.7 256 208 256zM464 232h-96c-13.25 0-24 10.75-24 24s10.75 24 24 24h96c13.25 0 24-10.75 24-24S477.3 232 464 232zM240 288h-64C131.8 288 96 323.8 96 368C96 376.8 103.2 384 112 384h192c8.836 0 16-7.164 16-16C320 323.8 284.2 288 240 288zM464 152h-96c-13.25 0-24 10.75-24 24s10.75 24 24 24h96c13.25 0 24-10.75 24-24S477.3 152 464 152zM512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM528 416c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16V96c0-8.822 7.178-16 16-16h448c8.822 0 16 7.178 16 16V416z\"],\n    \"bell\": [448, 512, [61602, 128276], \"f0f3\", \"M256 32V49.88C328.5 61.39 384 124.2 384 200V233.4C384 278.8 399.5 322.9 427.8 358.4L442.7 377C448.5 384.2 449.6 394.1 445.6 402.4C441.6 410.7 433.2 416 424 416H24C14.77 416 6.365 410.7 2.369 402.4C-1.628 394.1-.504 384.2 5.26 377L20.17 358.4C48.54 322.9 64 278.8 64 233.4V200C64 124.2 119.5 61.39 192 49.88V32C192 14.33 206.3 0 224 0C241.7 0 256 14.33 256 32V32zM216 96C158.6 96 112 142.6 112 200V233.4C112 281.3 98.12 328 72.31 368H375.7C349.9 328 336 281.3 336 233.4V200C336 142.6 289.4 96 232 96H216zM288 448C288 464.1 281.3 481.3 269.3 493.3C257.3 505.3 240.1 512 224 512C207 512 190.7 505.3 178.7 493.3C166.7 481.3 160 464.1 160 448H288z\"],\n    \"bell-slash\": [640, 512, [61943, 128277], \"f1f6\", \"M183.6 118.6C206.5 82.58 244.1 56.84 288 49.88V32C288 14.33 302.3 .0003 320 .0003C337.7 .0003 352 14.33 352 32V49.88C424.5 61.39 480 124.2 480 200V233.4C480 278.8 495.5 322.9 523.8 358.4L538.7 377C543.1 383.5 545.4 392.2 542.6 400L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L183.6 118.6zM221.7 148.4L450.7 327.1C438.4 298.2 432 266.1 432 233.4V200C432 142.6 385.4 96 328 96H312C273.3 96 239.6 117.1 221.7 148.4V148.4zM160 233.4V222.1L206.7 258.9C202.7 297.7 189.5 335.2 168.3 368H345.2L406.2 416H120C110.8 416 102.4 410.7 98.37 402.4C94.37 394.1 95.5 384.2 101.3 377L116.2 358.4C144.5 322.9 160 278.8 160 233.4V233.4zM384 448C384 464.1 377.3 481.3 365.3 493.3C353.3 505.3 336.1 512 320 512C303 512 286.7 505.3 274.7 493.3C262.7 481.3 256 464.1 256 448H384z\"],\n    \"bookmark\": [384, 512, [61591, 128278], \"f02e\", \"M336 0h-288C21.49 0 0 21.49 0 48v431.9c0 24.7 26.79 40.08 48.12 27.64L192 423.6l143.9 83.93C357.2 519.1 384 504.6 384 479.9V48C384 21.49 362.5 0 336 0zM336 452L192 368l-144 84V54C48 50.63 50.63 48 53.1 48h276C333.4 48 336 50.63 336 54V452z\"],\n    \"building\": [384, 512, [61687, 127970], \"f1ad\", \"M88 104C88 95.16 95.16 88 104 88H152C160.8 88 168 95.16 168 104V152C168 160.8 160.8 168 152 168H104C95.16 168 88 160.8 88 152V104zM280 88C288.8 88 296 95.16 296 104V152C296 160.8 288.8 168 280 168H232C223.2 168 216 160.8 216 152V104C216 95.16 223.2 88 232 88H280zM88 232C88 223.2 95.16 216 104 216H152C160.8 216 168 223.2 168 232V280C168 288.8 160.8 296 152 296H104C95.16 296 88 288.8 88 280V232zM280 216C288.8 216 296 223.2 296 232V280C296 288.8 288.8 296 280 296H232C223.2 296 216 288.8 216 280V232C216 223.2 223.2 216 232 216H280zM0 64C0 28.65 28.65 0 64 0H320C355.3 0 384 28.65 384 64V448C384 483.3 355.3 512 320 512H64C28.65 512 0 483.3 0 448V64zM48 64V448C48 456.8 55.16 464 64 464H144V400C144 373.5 165.5 352 192 352C218.5 352 240 373.5 240 400V464H320C328.8 464 336 456.8 336 448V64C336 55.16 328.8 48 320 48H64C55.16 48 48 55.16 48 64z\"],\n    \"calendar\": [448, 512, [128198, 128197], \"f133\", \"M152 64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0C141.3 0 152 10.75 152 24V64zM48 448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192H48V448z\"],\n    \"calendar-check\": [448, 512, [], \"f274\", \"M216.1 408.1C207.6 418.3 192.4 418.3 183 408.1L119 344.1C109.7 335.6 109.7 320.4 119 311C128.4 301.7 143.6 301.7 152.1 311L200 358.1L295 263C304.4 253.7 319.6 253.7 328.1 263C338.3 272.4 338.3 287.6 328.1 296.1L216.1 408.1zM128 0C141.3 0 152 10.75 152 24V64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0zM400 192H48V448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192z\"],\n    \"calendar-days\": [448, 512, [\"calendar-alt\"], \"f073\", \"M152 64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0C141.3 0 152 10.75 152 24V64zM48 248H128V192H48V248zM48 296V360H128V296H48zM176 296V360H272V296H176zM320 296V360H400V296H320zM400 192H320V248H400V192zM400 408H320V464H384C392.8 464 400 456.8 400 448V408zM272 408H176V464H272V408zM128 408H48V448C48 456.8 55.16 464 64 464H128V408zM272 192H176V248H272V192z\"],\n    \"calendar-minus\": [448, 512, [], \"f272\", \"M152 352C138.7 352 128 341.3 128 328C128 314.7 138.7 304 152 304H296C309.3 304 320 314.7 320 328C320 341.3 309.3 352 296 352H152zM128 0C141.3 0 152 10.75 152 24V64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0zM400 192H48V448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192z\"],\n    \"calendar-plus\": [448, 512, [], \"f271\", \"M224 232C237.3 232 248 242.7 248 256V304H296C309.3 304 320 314.7 320 328C320 341.3 309.3 352 296 352H248V400C248 413.3 237.3 424 224 424C210.7 424 200 413.3 200 400V352H152C138.7 352 128 341.3 128 328C128 314.7 138.7 304 152 304H200V256C200 242.7 210.7 232 224 232zM152 64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0C141.3 0 152 10.75 152 24V64zM48 448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192H48V448z\"],\n    \"calendar-xmark\": [448, 512, [\"calendar-times\"], \"f273\", \"M257.9 328L304.1 375C314.3 384.4 314.3 399.6 304.1 408.1C295.6 418.3 280.4 418.3 271 408.1L224 361.9L176.1 408.1C167.6 418.3 152.4 418.3 143 408.1C133.7 399.6 133.7 384.4 143 375L190.1 328L143 280.1C133.7 271.6 133.7 256.4 143 247C152.4 237.7 167.6 237.7 176.1 247L224 294.1L271 247C280.4 237.7 295.6 237.7 304.1 247C314.3 256.4 314.3 271.6 304.1 280.1L257.9 328zM128 0C141.3 0 152 10.75 152 24V64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0zM400 192H48V448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192z\"],\n    \"chart-bar\": [512, 512, [\"bar-chart\"], \"f080\", \"M24 32C37.25 32 48 42.75 48 56V408C48 421.3 58.75 432 72 432H488C501.3 432 512 442.7 512 456C512 469.3 501.3 480 488 480H72C32.24 480 0 447.8 0 408V56C0 42.75 10.75 32 24 32zM128 136C128 122.7 138.7 112 152 112H360C373.3 112 384 122.7 384 136C384 149.3 373.3 160 360 160H152C138.7 160 128 149.3 128 136zM296 208C309.3 208 320 218.7 320 232C320 245.3 309.3 256 296 256H152C138.7 256 128 245.3 128 232C128 218.7 138.7 208 152 208H296zM424 304C437.3 304 448 314.7 448 328C448 341.3 437.3 352 424 352H152C138.7 352 128 341.3 128 328C128 314.7 138.7 304 152 304H424z\"],\n    \"chess-bishop\": [320, 512, [9821], \"f43a\", \"M296 464H23.1C10.75 464 0 474.7 0 487.1S10.75 512 23.1 512h272C309.3 512 320 501.3 320 488S309.3 464 296 464zM0 304c0 51.63 30.12 85.25 64 96v32h48v-67.13l-33.5-10.63C63.75 349.5 48 333.9 48 304c0-84.1 93.2-206.5 112.6-206.5c19.63 0 60.01 67.18 70.28 85.8l-66.13 66.13c-3.125 3.125-4.688 7.219-4.688 11.31S161.6 268.9 164.8 272L176 283.2c3.125 3.125 7.219 4.688 11.31 4.688s8.188-1.562 11.31-4.688L253 229C264.4 256.8 272 283.5 272 304c0 29.88-15.75 45.5-30.5 50.25L208 364.9V432H256v-32c33.88-10.75 64-44.38 64-96c0-73.38-67.75-197.2-120.6-241.5C213.4 59.12 224 47 224 32c0-17.62-14.38-32-32-32H128C110.4 0 96 14.38 96 32c0 15 10.62 27.12 24.62 30.5C67.75 106.8 0 230.6 0 304z\"],\n    \"chess-king\": [448, 512, [9818], \"f43f\", \"M391.9 464H55.95c-13.25 0-23.1 10.75-23.1 23.1S42.7 512 55.95 512h335.1c13.25 0 23.1-10.75 23.1-23.1S405.2 464 391.9 464zM448 216c0-11.82-3.783-23.51-11.08-33.17c-10.3-14.39-27-22.88-44.73-22.88L247.9 160V104h31.1c13.2 0 24.06-10.8 24.06-24S293.1 56 279.9 56h-31.1V23.1C247.9 10.8 237.2 0 223.1 0S199.9 10.8 199.9 23.1V56H167.9c-13.2 0-23.97 10.8-23.97 24S154.7 104 167.9 104h31.1V160H55.95C24.72 160 0 185.3 0 215.9C0 221.6 .8893 227.4 2.704 233L68.45 432h50.5L48.33 218.4C48.09 217.6 47.98 216.9 47.98 216.1C47.98 212.3 50.93 208 55.95 208h335.9c6.076 0 8.115 5.494 8.115 8.113c0 .6341-.078 1.269-.2405 1.887L328.8 432h50.62l65.1-199.2C447.2 227.3 448 221.7 448 216z\"],\n    \"chess-knight\": [384, 512, [9822], \"f441\", \"M44 320.6l14.5 6.5c-17.01 20.24-26.44 45.91-26.44 72.35C32.06 399.7 32.12 432 32.12 432h48v-32c0-24.75 14-47.5 36.13-58.63l38.13-23.37c13.25-6.625 21.75-20.25 21.75-35.13v-58.75l-15.37 9C155.6 235.8 151.9 240.4 150.5 245.9L143 271c-2.25 7.625-8 13.88-15.38 16.75L117.1 292C114 293.3 110.7 293.9 107.4 293.9c-3.626 0-7.263-.7514-10.66-2.254L63.5 276.9C54.12 272.6 48 263.2 48 252.9V140.5c0-5.125 2.125-10.12 5.75-13.88l7.375-7.375L49.5 96C48.5 94.12 48 92 48 89.88C48 84.38 52.38 80 57.88 80h105c86.75 0 156.1 70.38 156.1 157.1V432h48.06l-.0625-194.9C367.9 124 276 32 162.9 32H57.88C25.88 32 0 57.88 0 89.88c0 8.5 1.75 16.88 5.125 24.62C1.75 122.8 0 131.6 0 140.5v112.4C0 282.2 17.25 308.8 44 320.6zM80.12 164c0 11 8.875 20 20 20c11 0 20-9 20-20s-9-20-20-20C89 144 80.12 153 80.12 164zM360 464H23.1C10.75 464 0 474.7 0 487.1S10.75 512 23.1 512H360C373.3 512 384 501.3 384 488S373.3 464 360 464z\"],\n    \"chess-pawn\": [320, 512, [9823], \"f443\", \"M296 463.1H23.1c-13.25 0-23.1 10.75-23.1 24s10.75 24 23.1 24h272c13.25 0 23.1-10.75 23.1-23.1S309.3 463.1 296 463.1zM55.1 287.1L80 287.1v29.5c0 40.25-3.5 81.25-23.38 114.5h53.5C125.1 394.1 128 354.6 128 317.5v-29.5h64v29.5c0 37.13 2.875 77.5 17.88 114.5h53.5C243.5 398.7 240 357.7 240 317.5V287.1l24-.0001C277.3 287.1 288 277.3 288 263.1c0-13.25-10.75-24-23.1-24H241c23.75-21.88 38.1-53.12 38.1-87.1c0-9.393-1.106-19.05-3.451-28.86C272.3 105.4 244.9 32 159.1 32C93.75 32 40 85.75 40 151.1c0 34.88 15.12 66.12 39 88H55.1C42.75 239.1 32 250.7 32 263.1C32 277.3 42.75 287.1 55.1 287.1zM160 79.1c39.75 0 72 32.25 72 72S199.8 223.1 160 223.1S88 191.7 88 151.1S120.2 79.1 160 79.1z\"],\n    \"chess-queen\": [512, 512, [9819], \"f445\", \"M256 112c30.88 0 56-25.12 56-56S286.9 0 256 0S199.1 25.12 199.1 56S225.1 112 256 112zM511.1 197.4c0-5.178-2.509-10.2-7.096-13.26L476.4 168.2c-2.5-1.75-5.497-2.62-8.497-2.62c-5.501 .125-10.63 2.87-13.75 7.245c-9.001 12-23.16 19.13-38.16 19.13c-3.125 0-6.089-.2528-9.089-.8778c-23.13-4.25-38.88-26.25-38.88-49.75C367.1 134 361.1 128 354.6 128h-38.75c-6.001 0-11.63 4-12.88 9.875C298.2 160.1 278.7 176 255.1 176c-22.75 0-42.25-15.88-47-38.12C207.7 132 202.2 128 196.1 128h-38.75C149.1 128 143.1 134 143.1 141.4c0 18.49-13.66 50.62-47.95 50.62c-15.13 0-29.3-7.118-38.3-19.24C54.6 168.4 49.66 165.7 44.15 165.6c-3 0-5.931 .8951-8.432 2.645l-28.63 16C2.509 187.2 0 192.3 0 197.4c0 2.438 .5583 4.901 1.72 7.185L109.9 432h53.13L69.85 236.4C78.35 238.8 87.11 240 95.98 240c2.432 0 56.83 1.503 84.76-52.5C198.1 210.5 226.6 224 255.9 224c29.38 0 57.01-13.38 75.26-36.25C336.1 197.6 360.6 240 416 240c8.751 0 17.5-1.125 26-3.5L349 432h53.13l108.1-227.4C511.4 202.3 511.1 199.8 511.1 197.4zM424 464H87.98c-13.26 0-24 10.75-24 23.1S74.72 512 87.98 512h336c13.26 0 24-10.75 24-23.1S437.3 464 424 464z\"],\n    \"chess-rook\": [384, 512, [9820], \"f447\", \"M360 464H23.1C10.75 464 0 474.7 0 487.1S10.75 512 23.1 512H360C373.3 512 384 501.3 384 488S373.3 464 360 464zM345.1 32h-308C17 32 0 49 0 70v139.4C0 218.8 4 227.5 11 233.6L48 265.8c0 8.885 .0504 17.64 .0504 26.46c0 39.32-1.001 79.96-11.93 139.8h49C94.95 374.3 96.11 333.3 96.11 285.5C96.11 270.7 96 255.1 96 238.2L48 196.5V80h64V128H160V80h64V128h48V80h64v116.5L288 238.2c0 16.77-.1124 32.25-.1124 47.1c0 47.79 1.164 89.15 10.99 146.7h49c-10.92-59.83-11.93-100.6-11.93-139.9C335.9 283.3 336 274.6 336 265.8l37-32.13C380 227.5 384 218.8 384 209.4V70C384 49 367 32 345.1 32zM192 224C174.4 224 160 238.4 160 256v64h64V256C224 238.4 209.6 224 192 224z\"],\n    \"circle\": [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9898, 9899, 11044, 61708, 61915, 9679], \"f111\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"circle-check\": [512, 512, [61533, \"check-circle\"], \"f058\", \"M243.8 339.8C232.9 350.7 215.1 350.7 204.2 339.8L140.2 275.8C129.3 264.9 129.3 247.1 140.2 236.2C151.1 225.3 168.9 225.3 179.8 236.2L224 280.4L332.2 172.2C343.1 161.3 360.9 161.3 371.8 172.2C382.7 183.1 382.7 200.9 371.8 211.8L243.8 339.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"circle-dot\": [512, 512, [128280, \"dot-circle\"], \"f192\", \"M160 256C160 202.1 202.1 160 256 160C309 160 352 202.1 352 256C352 309 309 352 256 352C202.1 352 160 309 160 256zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"circle-down\": [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M344 240h-56L287.1 152c0-13.25-10.75-24-24-24h-16C234.7 128 223.1 138.8 223.1 152L224 240h-56c-9.531 0-18.16 5.656-22 14.38C142.2 263.1 143.9 273.3 150.4 280.3l88.75 96C243.7 381.2 250.1 384 256.8 384c7.781-.3125 13.25-2.875 17.75-7.844l87.25-96c6.406-7.031 8.031-17.19 4.188-25.88S353.5 240 344 240zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-left\": [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M360 224L272 224v-56c0-9.531-5.656-18.16-14.38-22C248.9 142.2 238.7 143.9 231.7 150.4l-96 88.75C130.8 243.7 128 250.1 128 256.8c.3125 7.781 2.875 13.25 7.844 17.75l96 87.25c7.031 6.406 17.19 8.031 25.88 4.188s14.28-12.44 14.28-21.94l-.002-56L360 288C373.3 288 384 277.3 384 264v-16C384 234.8 373.3 224 360 224zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-pause\": [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M200 160C186.8 160 176 170.8 176 184v144C176 341.3 186.8 352 200 352S224 341.3 224 328v-144C224 170.8 213.3 160 200 160zM312 160C298.8 160 288 170.8 288 184v144c0 13.25 10.75 24 24 24s24-10.75 24-24v-144C336 170.8 325.3 160 312 160zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-play\": [512, 512, [61469, \"play-circle\"], \"f144\", \"M188.3 147.1C195.8 142.8 205.1 142.1 212.5 147.5L356.5 235.5C363.6 239.9 368 247.6 368 256C368 264.4 363.6 272.1 356.5 276.5L212.5 364.5C205.1 369 195.8 369.2 188.3 364.9C180.7 360.7 176 352.7 176 344V167.1C176 159.3 180.7 151.3 188.3 147.1V147.1zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"circle-question\": [512, 512, [62108, \"question-circle\"], \"f059\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464zM256 336c-18 0-32 14-32 32s13.1 32 32 32c17.1 0 32-14 32-32S273.1 336 256 336zM289.1 128h-51.1C199 128 168 159 168 198c0 13 11 24 24 24s24-11 24-24C216 186 225.1 176 237.1 176h51.1C301.1 176 312 186 312 198c0 8-4 14.1-11 18.1L244 251C236 256 232 264 232 272V288c0 13 11 24 24 24S280 301 280 288V286l45.1-28c21-13 34-36 34-60C360 159 329 128 289.1 128z\"],\n    \"circle-right\": [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M280.2 150.2C273.1 143.8 262.1 142.2 254.3 146.1S239.1 158.5 239.1 167.1l.002 56L152 224C138.8 224 128 234.8 128 248v16C128 277.3 138.8 288 152 288L240 287.1v56c0 9.531 5.656 18.16 14.38 22c8.75 3.812 18.91 2.094 25.91-4.375l96-88.75C381.2 268.3 384 261.9 384 255.2c-.3125-7.781-2.875-13.25-7.844-17.75L280.2 150.2zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-stop\": [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M328 160h-144C170.8 160 160 170.8 160 184v144C160 341.2 170.8 352 184 352h144c13.2 0 24-10.8 24-24v-144C352 170.8 341.2 160 328 160zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-up\": [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M272.9 135.7C268.3 130.8 261.9 128 255.2 128C247.5 128.3 241.1 130.9 237.5 135.8l-87.25 96C143.8 238.9 142.2 249 146.1 257.7C149.9 266.4 158.5 272 167.1 272h56L224 360c0 13.25 10.75 24 24 24h16c13.25 0 23.1-10.75 23.1-24L287.1 272h56c9.531 0 18.16-5.656 22-14.38c3.811-8.75 2.092-18.91-4.377-25.91L272.9 135.7zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-user\": [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M256 112c-48.6 0-88 39.4-88 88C168 248.6 207.4 288 256 288s88-39.4 88-88C344 151.4 304.6 112 256 112zM256 240c-22.06 0-40-17.95-40-40C216 177.9 233.9 160 256 160s40 17.94 40 40C296 222.1 278.1 240 256 240zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-46.73 0-89.76-15.68-124.5-41.79C148.8 389 182.4 368 220.2 368h71.69c37.75 0 71.31 21.01 88.68 54.21C345.8 448.3 302.7 464 256 464zM416.2 388.5C389.2 346.3 343.2 320 291.8 320H220.2c-51.36 0-97.35 26.25-124.4 68.48C65.96 352.5 48 306.3 48 256c0-114.7 93.31-208 208-208s208 93.31 208 208C464 306.3 446 352.5 416.2 388.5z\"],\n    \"circle-xmark\": [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M175 175C184.4 165.7 199.6 165.7 208.1 175L255.1 222.1L303 175C312.4 165.7 327.6 165.7 336.1 175C346.3 184.4 346.3 199.6 336.1 208.1L289.9 255.1L336.1 303C346.3 312.4 346.3 327.6 336.1 336.1C327.6 346.3 312.4 346.3 303 336.1L255.1 289.9L208.1 336.1C199.6 346.3 184.4 346.3 175 336.1C165.7 327.6 165.7 312.4 175 303L222.1 255.1L175 208.1C165.7 199.6 165.7 184.4 175 175V175zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"clipboard\": [384, 512, [128203], \"f328\", \"M320 64h-49.61C262.1 27.48 230.7 0 192 0S121 27.48 113.6 64H64C28.65 64 0 92.66 0 128v320c0 35.34 28.65 64 64 64h256c35.35 0 64-28.66 64-64V128C384 92.66 355.3 64 320 64zM192 48c13.23 0 24 10.77 24 24S205.2 96 192 96S168 85.23 168 72S178.8 48 192 48zM336 448c0 8.82-7.178 16-16 16H64c-8.822 0-16-7.18-16-16V128c0-8.82 7.178-16 16-16h18.26C80.93 117.1 80 122.4 80 128v16C80 152.8 87.16 160 96 160h192c8.836 0 16-7.164 16-16V128c0-5.559-.9316-10.86-2.264-16H320c8.822 0 16 7.18 16 16V448z\"],\n    \"clock\": [512, 512, [128339, \"clock-four\"], \"f017\", \"M232 120C232 106.7 242.7 96 256 96C269.3 96 280 106.7 280 120V243.2L365.3 300C376.3 307.4 379.3 322.3 371.1 333.3C364.6 344.3 349.7 347.3 338.7 339.1L242.7 275.1C236 271.5 232 264 232 255.1L232 120zM256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0zM48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256z\"],\n    \"clone\": [512, 512, [], \"f24d\", \"M64 464H288C296.8 464 304 456.8 304 448V384H352V448C352 483.3 323.3 512 288 512H64C28.65 512 0 483.3 0 448V224C0 188.7 28.65 160 64 160H128V208H64C55.16 208 48 215.2 48 224V448C48 456.8 55.16 464 64 464zM160 64C160 28.65 188.7 0 224 0H448C483.3 0 512 28.65 512 64V288C512 323.3 483.3 352 448 352H224C188.7 352 160 323.3 160 288V64zM224 304H448C456.8 304 464 296.8 464 288V64C464 55.16 456.8 48 448 48H224C215.2 48 208 55.16 208 64V288C208 296.8 215.2 304 224 304z\"],\n    \"closed-captioning\": [576, 512, [], \"f20a\", \"M512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM528 416c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16V96c0-8.822 7.178-16 16-16h448c8.822 0 16 7.178 16 16V416zM236.5 222.1c9.375 9.375 24.56 9.375 33.94 0c9.375-9.375 9.375-24.56 0-33.94c-37.44-37.44-98.31-37.44-135.7 0C116.5 206.2 106.5 230.4 106.5 256s9.1 49.75 28.12 67.88c18.72 18.72 43.28 28.08 67.87 28.08s49.16-9.359 67.87-28.08c9.375-9.375 9.375-24.56 0-33.94c-9.375-9.375-24.56-9.375-33.94 0c-18.69 18.72-49.19 18.72-67.87 0C159.5 280.9 154.5 268.8 154.5 256s5-24.88 14.06-33.94C187.3 203.3 217.8 203.3 236.5 222.1zM428.5 222.1c9.375 9.375 24.56 9.375 33.94 0c9.375-9.375 9.375-24.56 0-33.94c-37.44-37.44-98.31-37.44-135.7 0C308.5 206.2 298.5 230.4 298.5 256s9.1 49.75 28.12 67.88c18.72 18.72 43.28 28.08 67.87 28.08s49.16-9.359 67.87-28.08c9.375-9.375 9.375-24.56 0-33.94c-9.375-9.375-24.56-9.375-33.94 0c-18.69 18.72-49.19 18.72-67.87 0C351.5 280.9 346.5 268.8 346.5 256s5-24.88 14.06-33.94C379.3 203.3 409.8 203.3 428.5 222.1z\"],\n    \"comment\": [512, 512, [61669, 128489], \"f075\", \"M256 32C114.6 32 .0272 125.1 .0272 240c0 47.63 19.91 91.25 52.91 126.2c-14.88 39.5-45.87 72.88-46.37 73.25c-6.625 7-8.375 17.25-4.625 26C5.818 474.2 14.38 480 24 480c61.5 0 109.1-25.75 139.1-46.25C191.1 442.8 223.3 448 256 448c141.4 0 255.1-93.13 255.1-208S397.4 32 256 32zM256.1 400c-26.75 0-53.12-4.125-78.38-12.12l-22.75-7.125l-19.5 13.75c-14.25 10.12-33.88 21.38-57.5 29c7.375-12.12 14.37-25.75 19.88-40.25l10.62-28l-20.62-21.87C69.82 314.1 48.07 282.2 48.07 240c0-88.25 93.25-160 208-160s208 71.75 208 160S370.8 400 256.1 400z\"],\n    \"comment-dots\": [512, 512, [62075, 128172, \"commenting\"], \"f4ad\", \"M144 208C126.3 208 112 222.2 112 239.1C112 257.7 126.3 272 144 272s31.1-14.25 31.1-32S161.8 208 144 208zM256 207.1c-17.75 0-31.1 14.25-31.1 32s14.25 31.1 31.1 31.1s31.1-14.25 31.1-31.1S273.8 207.1 256 207.1zM368 208c-17.75 0-31.1 14.25-31.1 32s14.25 32 31.1 32c17.75 0 31.99-14.25 31.99-32C400 222.2 385.8 208 368 208zM256 31.1c-141.4 0-255.1 93.12-255.1 208c0 47.62 19.91 91.25 52.91 126.3c-14.87 39.5-45.87 72.88-46.37 73.25c-6.624 7-8.373 17.25-4.624 26C5.818 474.2 14.38 480 24 480c61.49 0 109.1-25.75 139.1-46.25c28.87 9 60.16 14.25 92.9 14.25c141.4 0 255.1-93.13 255.1-207.1S397.4 31.1 256 31.1zM256 400c-26.75 0-53.12-4.125-78.36-12.12l-22.75-7.125L135.4 394.5c-14.25 10.12-33.87 21.38-57.49 29c7.374-12.12 14.37-25.75 19.87-40.25l10.62-28l-20.62-21.87C69.81 314.1 48.06 282.2 48.06 240c0-88.25 93.24-160 207.1-160s207.1 71.75 207.1 160S370.8 400 256 400z\"],\n    \"comments\": [640, 512, [61670, 128490], \"f086\", \"M208 0C322.9 0 416 78.8 416 176C416 273.2 322.9 352 208 352C189.3 352 171.2 349.7 153.9 345.8C123.3 364.8 79.13 384 24.95 384C14.97 384 5.93 378.1 2.018 368.9C-1.896 359.7-.0074 349.1 6.739 341.9C7.26 341.5 29.38 317.4 45.73 285.9C17.18 255.8 0 217.6 0 176C0 78.8 93.13 0 208 0zM164.6 298.1C179.2 302.3 193.8 304 208 304C296.2 304 368 246.6 368 176C368 105.4 296.2 48 208 48C119.8 48 48 105.4 48 176C48 211.2 65.71 237.2 80.57 252.9L104.1 277.8L88.31 308.1C84.74 314.1 80.73 321.9 76.55 328.5C94.26 323.4 111.7 315.5 128.7 304.1L145.4 294.6L164.6 298.1zM441.6 128.2C552 132.4 640 209.5 640 304C640 345.6 622.8 383.8 594.3 413.9C610.6 445.4 632.7 469.5 633.3 469.9C640 477.1 641.9 487.7 637.1 496.9C634.1 506.1 625 512 615 512C560.9 512 516.7 492.8 486.1 473.8C468.8 477.7 450.7 480 432 480C350 480 279.1 439.8 245.2 381.5C262.5 379.2 279.1 375.3 294.9 369.9C322.9 407.1 373.9 432 432 432C446.2 432 460.8 430.3 475.4 426.1L494.6 422.6L511.3 432.1C528.3 443.5 545.7 451.4 563.5 456.5C559.3 449.9 555.3 442.1 551.7 436.1L535.9 405.8L559.4 380.9C574.3 365.3 592 339.2 592 304C592 237.7 528.7 183.1 447.1 176.6L448 176C448 159.5 445.8 143.5 441.6 128.2H441.6z\"],\n    \"compass\": [512, 512, [129517], \"f14e\", \"M306.7 325.1L162.4 380.6C142.1 388.1 123.9 369 131.4 349.6L186.9 205.3C190.1 196.8 196.8 190.1 205.3 186.9L349.6 131.4C369 123.9 388.1 142.1 380.6 162.4L325.1 306.7C321.9 315.2 315.2 321.9 306.7 325.1V325.1zM255.1 224C238.3 224 223.1 238.3 223.1 256C223.1 273.7 238.3 288 255.1 288C273.7 288 288 273.7 288 256C288 238.3 273.7 224 255.1 224V224zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"copy\": [512, 512, [], \"f0c5\", \"M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z\"],\n    \"copyright\": [512, 512, [169], \"f1f9\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464zM255.1 176C255.1 176 255.1 176 255.1 176c21.06 0 40.92 8.312 55.83 23.38c9.375 9.344 24.53 9.5 33.97 .1562c9.406-9.344 9.469-24.53 .1562-33.97c-24-24.22-55.95-37.56-89.95-37.56c0 0 .0313 0 0 0c-33.97 0-65.95 13.34-89.95 37.56c-49.44 49.88-49.44 131 0 180.9c24 24.22 55.98 37.56 89.95 37.56c.0313 0 0 0 0 0c34 0 65.95-13.34 89.95-37.56c9.312-9.438 9.25-24.62-.1562-33.97c-9.438-9.312-24.59-9.219-33.97 .1562c-14.91 15.06-34.77 23.38-55.83 23.38c0 0 .0313 0 0 0c-21.09 0-40.95-8.312-55.89-23.38c-30.94-31.22-30.94-82.03 0-113.3C214.2 184.3 234 176 255.1 176z\"],\n    \"credit-card\": [576, 512, [62083, 128179, \"credit-card-alt\"], \"f09d\", \"M168 336C181.3 336 192 346.7 192 360C192 373.3 181.3 384 168 384H120C106.7 384 96 373.3 96 360C96 346.7 106.7 336 120 336H168zM360 336C373.3 336 384 346.7 384 360C384 373.3 373.3 384 360 384H248C234.7 384 224 373.3 224 360C224 346.7 234.7 336 248 336H360zM512 32C547.3 32 576 60.65 576 96V416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H512zM512 80H64C55.16 80 48 87.16 48 96V128H528V96C528 87.16 520.8 80 512 80zM528 224H48V416C48 424.8 55.16 432 64 432H512C520.8 432 528 424.8 528 416V224z\"],\n    \"envelope\": [512, 512, [128386, 61443, 9993], \"f0e0\", \"M448 64H64C28.65 64 0 92.65 0 128v256c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V128C512 92.65 483.3 64 448 64zM64 112h384c8.822 0 16 7.178 16 16v22.16l-166.8 138.1c-23.19 19.28-59.34 19.27-82.47 .0156L48 150.2V128C48 119.2 55.18 112 64 112zM448 400H64c-8.822 0-16-7.178-16-16V212.7l136.1 113.4C204.3 342.8 229.8 352 256 352s51.75-9.188 71.97-25.98L464 212.7V384C464 392.8 456.8 400 448 400z\"],\n    \"envelope-open\": [512, 512, [62135], \"f2b6\", \"M493.6 163c-24.88-19.62-45.5-35.37-164.3-121.6C312.7 29.21 279.7 0 256.4 0H255.6C232.3 0 199.3 29.21 182.6 41.38C63.88 127.6 43.25 143.4 18.38 163C6.75 172 0 186 0 200.8v247.2C0 483.3 28.65 512 64 512h384c35.35 0 64-28.67 64-64.01V200.8C512 186 505.3 172 493.6 163zM464 448c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16V276.7l136.1 113.4C204.3 406.8 229.8 416 256 416s51.75-9.211 71.97-26.01L464 276.7V448zM464 214.2l-166.8 138.1c-23.19 19.28-59.34 19.27-82.47 .0156L48 214.2l.1055-13.48c23.24-18.33 42.25-32.97 162.9-120.6c3.082-2.254 6.674-5.027 10.63-8.094C229.4 65.99 246.7 52.59 256 48.62c9.312 3.973 26.62 17.37 34.41 23.41c3.959 3.066 7.553 5.84 10.76 8.186C421.6 167.7 440.7 182.4 464 200.8V214.2z\"],\n    \"eye\": [576, 512, [128065], \"f06e\", \"M160 256C160 185.3 217.3 128 288 128C358.7 128 416 185.3 416 256C416 326.7 358.7 384 288 384C217.3 384 160 326.7 160 256zM288 336C332.2 336 368 300.2 368 256C368 211.8 332.2 176 288 176C287.3 176 286.7 176 285.1 176C287.3 181.1 288 186.5 288 192C288 227.3 259.3 256 224 256C218.5 256 213.1 255.3 208 253.1C208 254.7 208 255.3 208 255.1C208 300.2 243.8 336 288 336L288 336zM95.42 112.6C142.5 68.84 207.2 32 288 32C368.8 32 433.5 68.84 480.6 112.6C527.4 156 558.7 207.1 573.5 243.7C576.8 251.6 576.8 260.4 573.5 268.3C558.7 304 527.4 355.1 480.6 399.4C433.5 443.2 368.8 480 288 480C207.2 480 142.5 443.2 95.42 399.4C48.62 355.1 17.34 304 2.461 268.3C-.8205 260.4-.8205 251.6 2.461 243.7C17.34 207.1 48.62 156 95.42 112.6V112.6zM288 80C222.8 80 169.2 109.6 128.1 147.7C89.6 183.5 63.02 225.1 49.44 256C63.02 286 89.6 328.5 128.1 364.3C169.2 402.4 222.8 432 288 432C353.2 432 406.8 402.4 447.9 364.3C486.4 328.5 512.1 286 526.6 256C512.1 225.1 486.4 183.5 447.9 147.7C406.8 109.6 353.2 80 288 80V80z\"],\n    \"eye-slash\": [640, 512, [], \"f070\", \"M150.7 92.77C195 58.27 251.8 32 320 32C400.8 32 465.5 68.84 512.6 112.6C559.4 156 590.7 207.1 605.5 243.7C608.8 251.6 608.8 260.4 605.5 268.3C592.1 300.6 565.2 346.1 525.6 386.7L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L150.7 92.77zM189.8 123.5L235.8 159.5C258.3 139.9 287.8 128 320 128C390.7 128 448 185.3 448 256C448 277.2 442.9 297.1 433.8 314.7L487.6 356.9C521.1 322.8 545.9 283.1 558.6 256C544.1 225.1 518.4 183.5 479.9 147.7C438.8 109.6 385.2 79.1 320 79.1C269.5 79.1 225.1 97.73 189.8 123.5L189.8 123.5zM394.9 284.2C398.2 275.4 400 265.9 400 255.1C400 211.8 364.2 175.1 320 175.1C319.3 175.1 318.7 176 317.1 176C319.3 181.1 320 186.5 320 191.1C320 202.2 317.6 211.8 313.4 220.3L394.9 284.2zM404.3 414.5L446.2 447.5C409.9 467.1 367.8 480 320 480C239.2 480 174.5 443.2 127.4 399.4C80.62 355.1 49.34 304 34.46 268.3C31.18 260.4 31.18 251.6 34.46 243.7C44 220.8 60.29 191.2 83.09 161.5L120.8 191.2C102.1 214.5 89.76 237.6 81.45 255.1C95.02 286 121.6 328.5 160.1 364.3C201.2 402.4 254.8 432 320 432C350.7 432 378.8 425.4 404.3 414.5H404.3zM192 255.1C192 253.1 192.1 250.3 192.3 247.5L248.4 291.7C258.9 312.8 278.5 328.6 302 333.1L358.2 378.2C346.1 381.1 333.3 384 319.1 384C249.3 384 191.1 326.7 191.1 255.1H192z\"],\n    \"face-angry\": [512, 512, [128544, \"angry\"], \"f556\", \"M328.4 393.5C318.7 402.6 303.5 402.1 294.5 392.4C287.1 384.5 274.4 376 256 376C237.6 376 224.9 384.5 217.5 392.4C208.5 402.1 193.3 402.6 183.6 393.5C173.9 384.5 173.4 369.3 182.5 359.6C196.7 344.3 221.4 328 256 328C290.6 328 315.3 344.3 329.5 359.6C338.6 369.3 338.1 384.5 328.4 393.5zM144.4 240C144.4 231.2 147.9 223.2 153.7 217.4L122.9 207.2C114.6 204.4 110 195.3 112.8 186.9C115.6 178.6 124.7 174 133.1 176.8L229.1 208.8C237.4 211.6 241.1 220.7 239.2 229.1C236.4 237.4 227.3 241.1 218.9 239.2L208.1 235.6C208.3 237 208.4 238.5 208.4 240C208.4 257.7 194 272 176.4 272C158.7 272 144.4 257.7 144.4 240V240zM368.4 240C368.4 257.7 354 272 336.4 272C318.7 272 304.4 257.7 304.4 240C304.4 238.4 304.5 236.8 304.7 235.3L293.1 239.2C284.7 241.1 275.6 237.4 272.8 229.1C270 220.7 274.6 211.6 282.9 208.8L378.9 176.8C387.3 174 396.4 178.6 399.2 186.9C401.1 195.3 397.4 204.4 389.1 207.2L358.9 217.2C364.7 223 368.4 231.1 368.4 240H368.4zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-dizzy\": [512, 512, [\"dizzy\"], \"f567\", \"M192 352C192 316.7 220.7 288 256 288C291.3 288 320 316.7 320 352C320 387.3 291.3 416 256 416C220.7 416 192 387.3 192 352zM103 135C112.4 125.7 127.6 125.7 136.1 135L160 158.1L183 135C192.4 125.7 207.6 125.7 216.1 135C226.3 144.4 226.3 159.6 216.1 168.1L193.9 192L216.1 215C226.3 224.4 226.3 239.6 216.1 248.1C207.6 258.3 192.4 258.3 183 248.1L160 225.9L136.1 248.1C127.6 258.3 112.4 258.3 103 248.1C93.66 239.6 93.66 224.4 103 215L126.1 192L103 168.1C93.66 159.6 93.66 144.4 103 135V135zM295 135C304.4 125.7 319.6 125.7 328.1 135L352 158.1L375 135C384.4 125.7 399.6 125.7 408.1 135C418.3 144.4 418.3 159.6 408.1 168.1L385.9 192L408.1 215C418.3 224.4 418.3 239.6 408.1 248.1C399.6 258.3 384.4 258.3 375 248.1L352 225.9L328.1 248.1C319.6 258.3 304.4 258.3 295 248.1C285.7 239.6 285.7 224.4 295 215L318.1 192L295 168.1C285.7 159.6 285.7 144.4 295 135V135zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-flushed\": [512, 512, [128563, \"flushed\"], \"f579\", \"M320 336C333.3 336 344 346.7 344 360C344 373.3 333.3 384 320 384H192C178.7 384 168 373.3 168 360C168 346.7 178.7 336 192 336H320zM136.4 224C136.4 210.7 147.1 200 160.4 200C173.6 200 184.4 210.7 184.4 224C184.4 237.3 173.6 248 160.4 248C147.1 248 136.4 237.3 136.4 224zM80 224C80 179.8 115.8 144 160 144C204.2 144 240 179.8 240 224C240 268.2 204.2 304 160 304C115.8 304 80 268.2 80 224zM160 272C186.5 272 208 250.5 208 224C208 197.5 186.5 176 160 176C133.5 176 112 197.5 112 224C112 250.5 133.5 272 160 272zM376.4 224C376.4 237.3 365.6 248 352.4 248C339.1 248 328.4 237.3 328.4 224C328.4 210.7 339.1 200 352.4 200C365.6 200 376.4 210.7 376.4 224zM432 224C432 268.2 396.2 304 352 304C307.8 304 272 268.2 272 224C272 179.8 307.8 144 352 144C396.2 144 432 179.8 432 224zM352 176C325.5 176 304 197.5 304 224C304 250.5 325.5 272 352 272C378.5 272 400 250.5 400 224C400 197.5 378.5 176 352 176zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-frown\": [512, 512, [9785, \"frown\"], \"f119\", \"M143.9 398.6C131.4 394.1 124.9 380.3 129.4 367.9C146.9 319.4 198.9 288 256 288C313.1 288 365.1 319.4 382.6 367.9C387.1 380.3 380.6 394.1 368.1 398.6C355.7 403.1 341.9 396.6 337.4 384.1C328.2 358.5 297.2 336 256 336C214.8 336 183.8 358.5 174.6 384.1C170.1 396.6 156.3 403.1 143.9 398.6V398.6zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-frown-open\": [512, 512, [128550, \"frown-open\"], \"f57a\", \"M179.3 369.3C166.1 374.5 153.1 365.1 158.4 352.9C175.1 314.7 214.3 287.8 259.9 287.8C305.6 287.8 344.8 314.7 361.4 352.1C366.7 365.2 352.9 374.5 340.6 369.3C316.2 359 288.8 353.2 259.9 353.2C231 353.2 203.7 358.1 179.3 369.3L179.3 369.3zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grimace\": [512, 512, [128556, \"grimace\"], \"f57f\", \"M344 288C374.9 288 400 313.1 400 344C400 374.9 374.9 400 344 400H168C137.1 400 112 374.9 112 344C112 313.1 137.1 288 168 288H344zM168 320C154.7 320 144 330.7 144 344C144 357.3 154.7 368 168 368H176V320H168zM208 368H240V320H208V368zM304 320H272V368H304V320zM336 368H344C357.3 368 368 357.3 368 344C368 330.7 357.3 320 344 320H336V368zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin\": [512, 512, [128512, \"grin\"], \"f580\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-beam\": [512, 512, [128516, \"grin-beam\"], \"f582\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM217.6 228.8L217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 120 227.4 120 224C120 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 176 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 232 206.1 232 224C232 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8V228.8zM377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8L377.6 228.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-beam-sweat\": [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M464 128C437.5 128 416 107 416 81.01C416 76.01 417.8 69.74 420.6 62.87C420.9 62.17 421.2 61.46 421.6 60.74C430.5 40.51 448.1 15.86 457.6 3.281C460.8-1.094 467.2-1.094 470.4 3.281C483.4 20.65 512 61.02 512 81.01C512 102.7 497.1 120.8 476.8 126.3C472.7 127.4 468.4 128 464 128L464 128zM391.1 50.53C387.8 58.57 384 69.57 384 81.01C384 84.1 384.3 88.91 384.9 92.72C349.4 64.71 304.7 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 219.7 454.7 185.5 438.3 155.8C446.4 158.5 455.1 160 464 160C473.6 160 482.8 158.3 491.4 155.2C504.7 186.2 512 220.2 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 .0002 256 .0002C307.4 .0002 355.3 15.15 395.4 41.23C393.9 44.32 392.4 47.43 391.1 50.53V50.53zM255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.9 255.9 318.9C289 318.9 320.6 315.1 349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1zM217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 119.1 227.4 119.1 224C119.1 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 175.1 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 231.1 206.1 231.1 224C231.1 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8L217.6 228.8zM377.6 228.8L377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8V228.8z\"],\n    \"face-grin-hearts\": [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM238.9 177.1L221.4 243C219.1 251.6 210.4 256.6 201.8 254.3L136.7 236.9C118.9 232.1 108.4 213.8 113.1 196.1C117.9 178.3 136.2 167.7 153.1 172.5L170.1 176.8L174.4 160.7C179.2 142.9 197.5 132.4 215.3 137.1C233.1 141.9 243.6 160.2 238.9 177.1H238.9zM341.9 176.8L358 172.5C375.8 167.7 394.1 178.3 398.9 196.1C403.6 213.8 393.1 232.1 375.3 236.9L310.2 254.3C301.6 256.6 292.9 251.6 290.6 243L273.1 177.1C268.4 160.2 278.9 141.9 296.7 137.1C314.5 132.4 332.8 142.9 337.6 160.7L341.9 176.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-squint\": [512, 512, [128518, \"grin-squint\"], \"f585\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM223.4 194.6C234.1 200.3 234.1 215.7 223.4 221.4L133.5 269.3C125.6 273.6 116 267.8 116 258.9C116 256.1 116.1 253.4 118.8 251.2L154.8 208L118.8 164.8C116.1 162.6 116 159.9 116 157.1C116 148.2 125.6 142.4 133.5 146.7L223.4 194.6zM393.2 164.8L357.2 208L393.2 251.2C395 253.4 396 256.1 396 258.9C396 267.8 386.4 273.6 378.5 269.3L288.6 221.4C277.9 215.7 277.9 200.3 288.6 194.6L378.5 146.7C386.4 142.4 396 148.2 396 157.1C396 159.9 395 162.6 393.2 164.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-squint-tears\": [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.18C446-5.046 477.5-4.646 497.1 14.92C516.6 34.49 517 65.95 497.8 85.18C483 99.97 432.2 108.8 409.6 111.9C403.1 112.8 399.2 108 400.1 102.4C403.3 79.94 412 28.97 426.8 14.18H426.8zM74.98 74.98C158.2-8.253 284.5-22.19 382.2 33.17C380.6 37.96 379.3 42.81 378.1 47.52C375 59.67 372.6 72.08 370.8 82.52C290.1 28.93 180.1 37.74 108.9 108.9C37.75 180.1 28.94 290 82.49 370.8C72.01 372.6 59.6 374.1 47.46 378.1C42.76 379.3 37.93 380.6 33.15 382.1C-22.19 284.5-8.245 158.2 74.98 74.98V74.98zM478.8 129.9C534.2 227.5 520.2 353.8 437 437C353.8 520.3 227.5 534.2 129.8 478.8C131.3 474 132.7 469.2 133.9 464.5C136.1 452.3 139.4 439.9 141.2 429.5C221.9 483.1 331.9 474.3 403.1 403.1C474.3 331.9 483.1 221.1 429.5 141.2C439.1 139.4 452.4 137 464.5 133.9C469.2 132.7 474.1 131.4 478.8 129.9L478.8 129.9zM359.2 226.9C369.3 210.6 393 210 397 228.8C406.6 273.1 393.4 322.3 357.8 357.9C322.2 393.5 273 406.7 228.6 397.1C209.9 393.1 210.5 369.4 226.8 359.3C252 343.6 276.1 323.9 300.4 300.5C323.8 277.1 343.5 252.1 359.2 226.9L359.2 226.9zM189.5 235.7C201.1 232.1 211.1 242.1 208.5 254.6L178.8 352.1C176.2 360.7 165.4 363.4 159 357C157.1 355 155.8 352.5 155.6 349.7L150.5 293.6L94.43 288.5C91.66 288.3 89.07 287.1 87.1 285.1C80.76 278.7 83.46 267.9 92.05 265.3L189.5 235.7zM288.5 94.43L293.6 150.5L349.7 155.6C352.5 155.8 355 157.1 357 159C363.4 165.4 360.7 176.2 352.1 178.8L254.6 208.5C242.1 211.1 232.1 201.1 235.7 189.5L265.3 92.05C267.9 83.46 278.7 80.76 285.1 87.1C287.1 89.07 288.3 91.66 288.5 94.43V94.43zM14.18 426.8C28.97 412 79.85 403.2 102.4 400.1C108 399.2 112.8 403.1 111.9 409.6C108.7 432.1 99.97 483 85.18 497.8C65.95 517 34.5 516.6 14.93 497.1C-4.645 477.5-5.046 446 14.18 426.8H14.18z\"],\n    \"face-grin-stars\": [512, 512, [129321, \"grin-stars\"], \"f587\", \"M199.8 167.3L237.9 172.3C240.1 172.7 243.5 174.8 244.5 177.8C245.4 180.7 244.6 183.9 242.4 186L214.5 212.5L221.5 250.3C222 253.4 220.8 256.4 218.3 258.2C215.8 260.1 212.5 260.3 209.8 258.8L175.1 240.5L142.2 258.8C139.5 260.3 136.2 260.1 133.7 258.2C131.2 256.4 129.1 253.4 130.5 250.3L137.5 212.5L109.6 186C107.4 183.9 106.6 180.7 107.5 177.8C108.5 174.8 111 172.7 114.1 172.3L152.2 167.3L168.8 132.6C170.1 129.8 172.9 128 175.1 128C179.1 128 181.9 129.8 183.2 132.6L199.8 167.3zM359.8 167.3L397.9 172.3C400.1 172.7 403.5 174.8 404.5 177.8C405.4 180.7 404.6 183.9 402.4 186L374.5 212.5L381.5 250.3C382 253.4 380.8 256.4 378.3 258.2C375.8 260.1 372.5 260.3 369.8 258.8L336 240.5L302.2 258.8C299.5 260.3 296.2 260.1 293.7 258.2C291.2 256.4 289.1 253.4 290.5 250.3L297.5 212.5L269.6 186C267.4 183.9 266.6 180.7 267.5 177.8C268.5 174.8 271 172.7 274.1 172.3L312.2 167.3L328.8 132.6C330.1 129.8 332.9 128 336 128C339.1 128 341.9 129.8 343.2 132.6L359.8 167.3zM349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-grin-tears\": [640, 512, [128514, \"grin-tears\"], \"f588\", \"M519.4 334.4C522.7 342.5 527.8 352.1 535.9 361.1C539.9 365 544.1 368.4 548.6 371.4C506.4 454.8 419.9 512 319.1 512C220.1 512 133.6 454.8 91.4 371.4C95.87 368.4 100.1 365 104.1 361.1C112.2 352.1 117.3 342.5 120.6 334.4C121.8 331.5 122.9 328.6 123.9 325.5C152.5 406.2 229.5 464 319.1 464C410.5 464 487.5 406.2 516.1 325.5C517.1 328.6 518.2 331.5 519.4 334.4V334.4zM319.1 47.1C218.6 47.1 134.2 120.5 115.7 216.5C109.1 213.4 101.4 212.2 93.4 213.3C86.59 214.3 77.18 215.7 66.84 217.7C85.31 94.5 191.6 0 319.1 0C448.4 0 554.7 94.5 573.2 217.7C562.8 215.7 553.4 214.3 546.6 213.3C538.6 212.2 530.9 213.4 524.2 216.5C505.8 120.5 421.4 48 319.1 48V47.1zM78.5 341.1C59.98 356.7 32.01 355.5 14.27 337.7C-4.442 319-4.825 288.9 13.55 270.6C22.19 261.9 43.69 255.4 64.05 250.1C77.02 248.2 89.53 246.2 97.94 245C103.3 244.2 107.8 248.7 106.1 254.1C103.9 275.6 95.58 324.3 81.43 338.4C80.49 339.4 79.51 340.3 78.5 341.1V341.1zM561.5 341.1C560.7 340.5 559.1 339.8 559.2 339.1C559 338.9 558.8 338.7 558.6 338.4C544.4 324.3 536.1 275.6 533 254.1C532.2 248.7 536.7 244.2 542.1 245C543.1 245.2 544.2 245.3 545.4 245.5C553.6 246.7 564.6 248.5 575.1 250.1C596.3 255.4 617.8 261.9 626.4 270.6C644.8 288.9 644.4 319 625.7 337.7C607.1 355.5 580 356.7 561.5 341.1L561.5 341.1zM319.9 399.1C269.6 399.1 225.5 374.6 200.9 336.5C190.5 320.4 207.7 303.1 226.3 308.4C255.3 315.1 286.8 318.8 319.9 318.8C353 318.8 384.6 315.1 413.5 308.4C432.2 303.1 449.4 320.4 438.1 336.5C414.4 374.6 370.3 399.1 319.9 399.1zM281.6 228.8L281.4 228.5C281.2 228.3 281 228 280.7 227.6C280 226.8 279.1 225.7 277.9 224.3C275.4 221.4 271.9 217.7 267.7 213.1C258.9 206.2 248.8 200 239.1 200C231.2 200 221.1 206.2 212.3 213.1C208.1 217.7 204.6 221.4 202.1 224.3C200.9 225.7 199.1 226.8 199.3 227.6C198.1 228 198.8 228.3 198.6 228.5L198.4 228.8L198.4 228.8C196.3 231.6 192.7 232.7 189.5 231.6C186.2 230.5 183.1 227.4 183.1 224C183.1 206.1 190.7 188.4 200.6 175.2C210.4 162.2 224.5 152 239.1 152C255.5 152 269.6 162.2 279.4 175.2C289.3 188.4 295.1 206.1 295.1 224C295.1 227.4 293.8 230.5 290.5 231.6C287.3 232.7 283.7 231.6 281.6 228.8L281.6 228.8zM441.6 228.8L441.6 228.8L441.4 228.5C441.2 228.3 441 228 440.7 227.6C440 226.8 439.1 225.7 437.9 224.3C435.4 221.4 431.9 217.7 427.7 213.1C418.9 206.2 408.8 200 400 200C391.2 200 381.1 206.2 372.3 213.1C368.1 217.7 364.6 221.4 362.1 224.3C360.9 225.7 359.1 226.8 359.3 227.6C358.1 228 358.8 228.3 358.6 228.5L358.4 228.8L358.4 228.8C356.3 231.6 352.7 232.7 349.5 231.6C346.2 230.5 344 227.4 344 223.1C344 206.1 350.7 188.4 360.6 175.2C370.4 162.2 384.5 151.1 400 151.1C415.5 151.1 429.6 162.2 439.4 175.2C449.3 188.4 456 206.1 456 223.1C456 227.4 453.8 230.5 450.5 231.6C447.3 232.7 443.7 231.6 441.6 228.8V228.8z\"],\n    \"face-grin-tongue\": [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208zM368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 337.7 95.13 408.4 163.7 442.4C161.3 434 160 425.2 160 416V363.6C151.1 355.6 143.3 346.5 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C368.6 346.4 360.8 355.5 352 363.5V416C352 425.2 350.7 434 348.3 442.4C416.9 408.4 464 337.7 464 256C464 141.1 370.9 48 255.1 48H256zM320 416V378.6C320 363.9 308.1 352 293.4 352H291.4C280.1 352 270.3 359.9 267.8 370.9C264.1 383.5 247 383.5 244.2 370.9C241.7 359.9 231.9 352 220.6 352H218.6C203.9 352 192 363.9 192 378.6V416C192 451.3 220.7 480 256 480C291.3 480 320 451.3 320 416z\"],\n    \"face-grin-tongue-squint\": [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M116 157.1C116 148.2 125.6 142.4 133.5 146.7L223.4 194.6C234.1 200.3 234.1 215.7 223.4 221.4L133.5 269.3C125.6 273.6 116 267.8 116 258.9C116 256.1 116.1 253.4 118.8 251.2L154.8 208L118.8 164.8C116.1 162.6 116 159.9 116 157.1V157.1zM378.5 146.7C386.4 142.4 396 148.2 396 157.1C396 159.9 395 162.6 393.2 164.8L357.2 208L393.2 251.2C395 253.4 396 256.1 396 258.9C396 267.8 386.4 273.6 378.5 269.3L288.6 221.4C277.9 215.7 277.9 200.3 288.6 194.6L378.5 146.7zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 337.7 95.13 408.4 163.7 442.4C161.3 434 160 425.2 160 416V392.7C135.1 375.1 116.9 351.3 105.2 323.5C100.2 311.7 112.2 301 124.5 304.8C164.1 316.9 208.9 323.8 256.3 323.8C303.7 323.8 348.4 316.9 388.1 304.8C400.4 301 412.4 311.7 407.4 323.5C395.6 351.5 376.3 375.5 352 393.1V416C352 425.2 350.7 434 348.3 442.4C416.9 408.4 464 337.7 464 255.1C464 141.1 370.9 47.1 256 47.1L256 48zM320 416V378.6C320 363.9 308.1 352 293.4 352H291.4C280.1 352 270.3 359.9 267.8 370.9C264.1 383.5 247 383.5 244.2 370.9C241.7 359.9 231.9 352 220.6 352H218.6C203.9 352 192 363.9 192 378.6V416C192 451.3 220.7 480 256 480C291.3 480 320 451.3 320 416z\"],\n    \"face-grin-tongue-wink\": [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M159.6 220C148.1 220 139.7 223.8 134.2 229.7C126.7 237.7 114 238.1 105.9 230.6C97.89 223 97.48 210.4 105 202.3C119.6 186.8 140.3 180 159.6 180C178.1 180 199.7 186.8 214.2 202.3C221.8 210.4 221.4 223 213.3 230.6C205.2 238.1 192.6 237.7 185 229.7C179.6 223.8 170.3 220 159.6 220zM312.4 208C312.4 194.7 323.1 184 336.4 184C349.6 184 360.4 194.7 360.4 208C360.4 221.3 349.6 232 336.4 232C323.1 232 312.4 221.3 312.4 208zM256 208C256 163.8 291.8 128 336 128C380.2 128 416 163.8 416 208C416 252.2 380.2 288 336 288C291.8 288 256 252.2 256 208zM336 256C362.5 256 384 234.5 384 208C384 181.5 362.5 160 336 160C309.5 160 288 181.5 288 208C288 234.5 309.5 256 336 256zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM348.3 442.4C416.9 408.4 464 337.7 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 337.7 95.13 408.4 163.7 442.4C161.3 434 160 425.2 160 416V363.6C151.1 355.6 143.3 346.5 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C368.6 346.4 360.8 355.5 352 363.5V416C352 425.2 350.7 434 348.3 442.4H348.3zM320 416V378.6C320 363.9 308.1 352 293.4 352H291.4C280.1 352 270.3 359.9 267.8 370.9C264.1 383.5 247 383.5 244.2 370.9C241.7 359.9 231.9 352 220.6 352H218.6C203.9 352 192 363.9 192 378.6V416C192 451.3 220.7 480 256 480C291.3 480 320 451.3 320 416z\"],\n    \"face-grin-wide\": [512, 512, [128515, \"grin-alt\"], \"f581\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM224 192C224 227.3 209.7 256 192 256C174.3 256 160 227.3 160 192C160 156.7 174.3 128 192 128C209.7 128 224 156.7 224 192zM288 192C288 156.7 302.3 128 320 128C337.7 128 352 156.7 352 192C352 227.3 337.7 256 320 256C302.3 256 288 227.3 288 192zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-wink\": [512, 512, [\"grin-wink\"], \"f58c\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM281.9 230.6C273.9 223 273.5 210.4 281 202.3C295.6 186.8 316.3 180 335.6 180C354.1 180 375.7 186.8 390.2 202.3C397.8 210.4 397.4 223 389.3 230.6C381.2 238.1 368.6 237.7 361 229.7C355.6 223.8 346.3 220 335.6 220C324.1 220 315.7 223.8 310.2 229.7C302.7 237.7 290 238.1 281.9 230.6zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-kiss\": [512, 512, [128535, \"kiss\"], \"f596\", \"M304.7 281.7C308.9 286.8 312 293.1 312 300C312 306.9 308.9 313.2 304.7 318.3C300.4 323.5 294.5 328 287.9 331.7C285.2 333.3 282.3 334.7 279.2 336C282.3 337.3 285.2 338.7 287.9 340.3C294.5 343.1 300.4 348.5 304.7 353.7C308.9 358.8 312 365.1 312 372C312 378.9 308.9 385.2 304.7 390.3C300.4 395.5 294.5 400 287.9 403.7C274.7 411.1 257.4 416 240 416C236.4 416 233.2 413.5 232.3 410C231.3 406.5 232.9 402.8 236.1 401L236.1 401L236.3 400.9C236.5 400.8 236.8 400.6 237.2 400.3C238 399.9 239.2 399.1 240.6 398.2C243.4 396.4 247.2 393.7 250.8 390.6C254.6 387.5 258 384 260.5 380.6C262.1 377 264 374.2 264 372C264 369.8 262.1 366.1 260.5 363.4C258 359.1 254.6 356.5 250.8 353.4C247.2 350.3 243.4 347.6 240.6 345.8C239.2 344.9 238 344.1 237.2 343.7L236.5 343.2L236.3 343.1L236.1 342.1L236.1 342.1C233.6 341.6 232 338.9 232 336C232 333.1 233.6 330.4 236.1 329L236.1 329L236.3 328.9C236.5 328.8 236.8 328.6 237.2 328.3C238 327.9 239.2 327.1 240.6 326.2C243.4 324.4 247.2 321.7 250.8 318.6C254.6 315.5 258 312.1 260.5 308.6C262.1 305 264 302.2 264 300C264 297.8 262.1 294.1 260.5 291.4C258 287.1 254.6 284.5 250.8 281.4C247.2 278.3 243.4 275.6 240.6 273.8C239.2 272.9 238 272.1 237.2 271.7C236.8 271.4 236.5 271.2 236.3 271.1L236.1 270.1L236.1 270.1C232.9 269.2 231.3 265.5 232.3 261.1C233.2 258.5 236.4 256 240 256C257.4 256 274.7 260.9 287.9 268.3C294.5 271.1 300.4 276.5 304.7 281.7V281.7zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-kiss-beam\": [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M304.7 297.7C308.9 302.8 312 309.1 312 316C312 322.9 308.9 329.2 304.7 334.3C300.4 339.5 294.5 344 287.9 347.7C285.2 349.3 282.3 350.7 279.2 352C282.3 353.3 285.2 354.7 287.9 356.3C294.5 359.1 300.4 364.5 304.7 369.7C308.9 374.8 312 381.1 312 388C312 394.9 308.9 401.2 304.7 406.3C300.4 411.5 294.5 416 287.9 419.7C274.7 427.1 257.4 432 240 432C236.4 432 233.2 429.5 232.3 426C231.3 422.5 232.9 418.8 236.1 417L236.1 417L236.3 416.9C236.5 416.8 236.8 416.6 237.2 416.3C238 415.9 239.2 415.1 240.6 414.2C243.4 412.4 247.2 409.7 250.8 406.6C254.6 403.5 258 400 260.5 396.6C262.1 393 264 390.2 264 388C264 385.8 262.1 382.1 260.5 379.4C258 375.1 254.6 372.5 250.8 369.4C247.2 366.3 243.4 363.6 240.6 361.8C239.2 360.9 238 360.1 237.2 359.7C236.8 359.4 236.5 359.2 236.3 359.1L236.1 358.1L236.1 358.1C233.6 357.6 232 354.9 232 352C232 349.1 233.6 346.4 236.1 345L236.1 345L236.3 344.9C236.5 344.8 236.8 344.6 237.2 344.3C238 343.9 239.2 343.1 240.6 342.2C243.4 340.4 247.2 337.7 250.8 334.6C254.6 331.5 258 328.1 260.5 324.6C262.1 321 264 318.2 264 316C264 313.8 262.1 310.1 260.5 307.4C258 303.1 254.6 300.5 250.8 297.4C247.2 294.3 243.4 291.6 240.6 289.8C239.2 288.9 238 288.1 237.2 287.7C236.8 287.4 236.5 287.2 236.3 287.1L236.1 286.1L236.1 286.1C232.9 285.2 231.3 281.5 232.3 277.1C233.2 274.5 236.4 272 240 272C257.4 272 274.7 276.9 287.9 284.3C294.5 287.1 300.4 292.5 304.7 297.7L304.7 297.7zM217.6 228.8L217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 120 227.4 120 224C120 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 176 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 232 206.1 232 224C232 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8V228.8zM377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8L377.6 228.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-kiss-wink-heart\": [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M345.3 472.1C347.3 479.7 350.9 486.4 355.7 491.8C325.1 504.8 291.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 285.3 507.1 313.4 498 339.7C486.9 334.1 474.5 333.1 461.8 334.6C459.7 329.4 457 324.6 453.9 320.1C460.5 299.9 464 278.4 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C285.4 464 313.5 457.9 338.9 446.8L345.3 472.1zM288.7 334.3C284.4 339.5 278.5 344 271.9 347.7C269.2 349.3 266.3 350.7 263.2 352C266.3 353.3 269.2 354.7 271.9 356.3C278.5 359.1 284.4 364.5 288.7 369.7C292.9 374.8 296 381.1 296 388C296 394.9 292.9 401.2 288.7 406.3C284.4 411.5 278.5 416 271.9 419.7C258.7 427.1 241.4 432 224 432C220.4 432 217.2 429.5 216.3 426C215.3 422.5 216.9 418.8 220.1 417L220.1 417L220.3 416.9C220.5 416.8 220.8 416.6 221.2 416.3C222 415.9 223.2 415.1 224.6 414.2C227.4 412.4 231.2 409.7 234.8 406.6C238.6 403.5 242 400 244.5 396.6C246.1 393 248 390.2 248 388C248 385.8 246.1 382.1 244.5 379.4C242 375.1 238.6 372.5 234.8 369.4C231.2 366.3 227.4 363.6 224.6 361.8C223.2 360.9 222 360.1 221.2 359.7C220.8 359.4 220.5 359.2 220.3 359.1L220.1 358.1L220.1 358.1C217.6 357.6 216 354.9 216 352C216 349.1 217.6 346.4 220.1 345L220.1 345L220.3 344.9C220.5 344.8 220.8 344.6 221.2 344.3C222 343.9 223.2 343.1 224.6 342.2C227.4 340.4 231.2 337.7 234.8 334.6C238.6 331.5 242 328.1 244.5 324.6C246.1 321 248 318.2 248 316C248 313.8 246.1 310.1 244.5 307.4C242 303.1 238.6 300.5 234.8 297.4C231.2 294.3 227.4 291.6 224.6 289.8C223.2 288.9 222 288.1 221.2 287.7C220.8 287.4 220.5 287.2 220.3 287.1L220.1 286.1L220.1 286.1C216.9 285.2 215.3 281.5 216.3 277.1C217.2 274.5 220.4 272 224 272C241.4 272 258.7 276.9 271.9 284.3C278.5 287.1 284.4 292.5 288.7 297.7C292.9 302.8 296 309.1 296 316C296 322.9 292.9 329.2 288.7 334.3V334.3zM144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208zM335.6 220C324.1 220 315.7 223.8 310.2 229.7C302.7 237.7 290 238.1 281.9 230.6C273.9 223 273.5 210.4 281 202.3C295.6 186.8 316.3 180 335.6 180C354.1 180 375.7 186.8 390.2 202.3C397.8 210.4 397.4 223 389.3 230.6C381.2 238.1 368.6 237.7 361 229.7C355.6 223.8 346.3 220 335.6 220zM439.4 373.3L459.5 367.6C481.7 361.4 504.6 375.2 510.6 398.4C516.5 421.7 503.3 445.6 481.1 451.8L396.1 475.6C387.5 478 378.6 472.9 376.3 464.2L353.4 374.9C347.5 351.6 360.7 327.7 382.9 321.5C405.2 315.3 428 329.1 433.1 352.3L439.4 373.3z\"],\n    \"face-laugh\": [512, 512, [\"laugh\"], \"f599\", \"M130.7 313.9C126.5 300.4 137.8 288 151.1 288H364.5C378.7 288 389.9 300.4 385.8 313.9C368.1 368.4 318.2 408 258.2 408C198.2 408 147.5 368.4 130.7 313.9V313.9zM208.4 192C208.4 209.7 194 224 176.4 224C158.7 224 144.4 209.7 144.4 192C144.4 174.3 158.7 160 176.4 160C194 160 208.4 174.3 208.4 192zM304.4 192C304.4 174.3 318.7 160 336.4 160C354 160 368.4 174.3 368.4 192C368.4 209.7 354 224 336.4 224C318.7 224 304.4 209.7 304.4 192zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-laugh-beam\": [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M130.7 313.9C126.5 300.4 137.8 288 151.1 288H364.5C378.7 288 389.9 300.4 385.8 313.9C368.1 368.4 318.2 408 258.2 408C198.2 408 147.5 368.4 130.7 313.9V313.9zM217.6 228.8L217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 120 227.4 120 224C120 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 176 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 232 206.1 232 224C232 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8V228.8zM377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8L377.6 228.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-laugh-squint\": [512, 512, [\"laugh-squint\"], \"f59b\", \"M130.7 313.9C126.5 300.4 137.8 288 151.1 288H364.5C378.7 288 389.9 300.4 385.8 313.9C368.1 368.4 318.2 408 258.2 408C198.2 408 147.5 368.4 130.7 313.9V313.9zM223.4 178.6C234.1 184.3 234.1 199.7 223.4 205.4L133.5 253.3C125.6 257.6 116 251.8 116 242.9C116 240.1 116.1 237.4 118.8 235.2L154.8 192L118.8 148.8C116.1 146.6 116 143.9 116 141.1C116 132.2 125.6 126.4 133.5 130.7L223.4 178.6zM393.2 148.8L357.2 192L393.2 235.2C395 237.4 396 240.1 396 242.9C396 251.8 386.4 257.6 378.5 253.3L288.6 205.4C277.9 199.7 277.9 184.3 288.6 178.6L378.5 130.7C386.4 126.4 396 132.2 396 141.1C396 143.9 395 146.6 393.2 148.8V148.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-laugh-wink\": [512, 512, [\"laugh-wink\"], \"f59c\", \"M130.7 313.9C126.5 300.4 137.8 288 151.1 288H364.5C378.7 288 389.9 300.4 385.8 313.9C368.1 368.4 318.2 408 258.2 408C198.2 408 147.5 368.4 130.7 313.9V313.9zM208.4 192C208.4 209.7 194 224 176.4 224C158.7 224 144.4 209.7 144.4 192C144.4 174.3 158.7 160 176.4 160C194 160 208.4 174.3 208.4 192zM281.9 214.6C273.9 207 273.5 194.4 281 186.3C295.6 170.8 316.3 164 335.6 164C354.1 164 375.7 170.8 390.2 186.3C397.8 194.4 397.4 207 389.3 214.6C381.2 222.1 368.6 221.7 361 213.7C355.6 207.8 346.3 204 335.6 204C324.1 204 315.7 207.8 310.2 213.7C302.7 221.7 290 222.1 281.9 214.6zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-meh\": [512, 512, [128528, \"meh\"], \"f11a\", \"M144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208zM368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208zM328 328C341.3 328 352 338.7 352 352C352 365.3 341.3 376 328 376H184C170.7 376 160 365.3 160 352C160 338.7 170.7 328 184 328H328zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-meh-blank\": [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-rolling-eyes\": [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M168 376C168 362.7 178.7 352 192 352H320C333.3 352 344 362.7 344 376C344 389.3 333.3 400 320 400H192C178.7 400 168 389.3 168 376zM80 224C80 179.8 115.8 144 160 144C204.2 144 240 179.8 240 224C240 268.2 204.2 304 160 304C115.8 304 80 268.2 80 224zM160 272C186.5 272 208 250.5 208 224C208 209.7 201.7 196.8 191.8 188C191.9 189.3 192 190.6 192 192C192 209.7 177.7 224 160 224C142.3 224 128 209.7 128 192C128 190.6 128.1 189.3 128.2 188C118.3 196.8 112 209.7 112 224C112 250.5 133.5 272 160 272V272zM272 224C272 179.8 307.8 144 352 144C396.2 144 432 179.8 432 224C432 268.2 396.2 304 352 304C307.8 304 272 268.2 272 224zM352 272C378.5 272 400 250.5 400 224C400 209.7 393.7 196.8 383.8 188C383.9 189.3 384 190.6 384 192C384 209.7 369.7 224 352 224C334.3 224 320 209.7 320 192C320 190.6 320.1 189.3 320.2 188C310.3 196.8 304 209.7 304 224C304 250.5 325.5 272 352 272zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-sad-cry\": [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M159.6 220C148.1 220 139.7 223.8 134.2 229.7C126.7 237.7 114 238.1 105.1 230.6C97.89 223 97.48 210.4 105 202.3C119.6 186.8 140.3 180 159.6 180C178.1 180 199.7 186.8 214.2 202.3C221.8 210.4 221.4 223 213.3 230.6C205.2 238.1 192.6 237.7 185 229.7C179.6 223.8 170.3 220 159.6 220zM297.9 230.6C289.9 223 289.5 210.4 297 202.3C311.6 186.8 332.3 180 351.6 180C370.1 180 391.7 186.8 406.2 202.3C413.8 210.4 413.4 223 405.3 230.6C397.2 238.1 384.6 237.7 377 229.7C371.6 223.8 362.3 220 351.6 220C340.1 220 331.7 223.8 326.2 229.7C318.7 237.7 306 238.1 297.9 230.6zM208 320C208 293.5 229.5 272 256 272C282.5 272 304 293.5 304 320V352C304 378.5 282.5 400 256 400C229.5 400 208 378.5 208 352V320zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM400 406.1C439.4 368.2 464 314.1 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 314.1 72.55 368.2 112 406.1V288C112 274.7 122.7 264 136 264C149.3 264 160 274.7 160 288V440.6C188.7 455.5 221.4 464 256 464C290.6 464 323.3 455.5 352 440.6V288C352 274.7 362.7 264 376 264C389.3 264 400 274.7 400 288V406.1z\"],\n    \"face-sad-tear\": [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M169.6 291.3C172.8 286.9 179.2 286.9 182.4 291.3C195.6 308.6 223.1 349 223.1 369C223.1 395 202.5 416 175.1 416C149.5 416 127.1 395 127.1 369C127.1 349 156.6 308.6 169.6 291.3H169.6zM368 346.8C377.9 355.6 378.7 370.8 369.9 380.7C361 390.6 345.9 391.4 335.1 382.6C314.7 363.5 286.7 352 256 352C242.7 352 232 341.3 232 328C232 314.7 242.7 304 256 304C299 304 338.3 320.2 368 346.8L368 346.8zM335.6 176C353.3 176 367.6 190.3 367.6 208C367.6 225.7 353.3 240 335.6 240C317.1 240 303.6 225.7 303.6 208C303.6 190.3 317.1 176 335.6 176zM175.6 240C157.1 240 143.6 225.7 143.6 208C143.6 190.3 157.1 176 175.6 176C193.3 176 207.6 190.3 207.6 208C207.6 225.7 193.3 240 175.6 240zM256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0zM175.9 448C200.5 458.3 227.6 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 308.7 67.59 356.8 99.88 393.4C110.4 425.4 140.9 447.9 175.9 448V448z\"],\n    \"face-smile\": [512, 512, [128578, \"smile\"], \"f118\", \"M256 352C293.2 352 319.2 334.5 334.4 318.1C343.3 308.4 358.5 307.7 368.3 316.7C378 325.7 378.6 340.9 369.6 350.6C347.7 374.5 309.7 400 256 400C202.3 400 164.3 374.5 142.4 350.6C133.4 340.9 133.1 325.7 143.7 316.7C153.5 307.7 168.7 308.4 177.6 318.1C192.8 334.5 218.8 352 256 352zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-smile-beam\": [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M256 352C293.2 352 319.2 334.5 334.4 318.1C343.3 308.4 358.5 307.7 368.3 316.7C378 325.7 378.6 340.9 369.6 350.6C347.7 374.5 309.7 400 256 400C202.3 400 164.3 374.5 142.4 350.6C133.4 340.9 133.1 325.7 143.7 316.7C153.5 307.7 168.7 308.4 177.6 318.1C192.8 334.5 218.8 352 256 352zM217.6 228.8L217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 120 227.4 120 224C120 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 176 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 232 206.1 232 224C232 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8V228.8zM377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8L377.6 228.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-smile-wink\": [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M256 352C293.2 352 319.2 334.5 334.4 318.1C343.3 308.4 358.5 307.7 368.3 316.7C378 325.7 378.6 340.9 369.6 350.6C347.7 374.5 309.7 400 256 400C202.3 400 164.3 374.5 142.4 350.6C133.4 340.9 133.1 325.7 143.7 316.7C153.5 307.7 168.7 308.4 177.6 318.1C192.8 334.5 218.8 352 256 352zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM281.9 230.6C273.9 223 273.5 210.4 281 202.3C295.6 186.8 316.3 180 335.6 180C354.1 180 375.7 186.8 390.2 202.3C397.8 210.4 397.4 223 389.3 230.6C381.2 238.1 368.6 237.7 361 229.7C355.6 223.8 346.3 220 335.6 220C324.1 220 315.7 223.8 310.2 229.7C302.7 237.7 290 238.1 281.9 230.6zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-surprise\": [512, 512, [128558, \"surprise\"], \"f5c2\", \"M144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208zM368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208zM192 352C192 316.7 220.7 288 256 288C291.3 288 320 316.7 320 352C320 387.3 291.3 416 256 416C220.7 416 192 387.3 192 352zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-tired\": [512, 512, [128555, \"tired\"], \"f5c8\", \"M176.5 320.3C196.1 302.1 223.8 288 256 288C288.2 288 315.9 302.1 335.5 320.3C354.5 338.1 368 362 368 384C368 389.4 365.3 394.4 360.8 397.4C356.2 400.3 350.5 400.8 345.6 398.7L328.4 391.1C305.6 381.2 280.9 376 256 376C231.1 376 206.4 381.2 183.6 391.1L166.4 398.7C161.5 400.8 155.8 400.3 151.2 397.4C146.7 394.4 144 389.4 144 384C144 362 157.5 338.1 176.5 320.3zM223.4 194.6C234.1 200.3 234.1 215.7 223.4 221.4L133.5 269.3C125.6 273.6 116 267.8 116 258.9C116 256.1 116.1 253.4 118.8 251.2L154.8 208L118.8 164.8C116.1 162.6 116 159.9 116 157.1C116 148.2 125.6 142.4 133.5 146.7L223.4 194.6zM393.2 164.8L357.2 208L393.2 251.2C395 253.4 396 256.1 396 258.9C396 267.8 386.4 273.6 378.5 269.3L288.6 221.4C277.9 215.7 277.9 200.3 288.6 194.6L378.5 146.7C386.4 142.4 396 148.2 396 157.1C396 159.9 395 162.6 393.2 164.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"file\": [384, 512, [128459, 61462, 128196], \"f15b\", \"M365.3 93.38l-74.63-74.64C278.6 6.743 262.3 0 245.4 0L64-.0001c-35.35 0-64 28.65-64 64l.0065 384c0 35.35 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM320 464H64.02c-8.836 0-15.1-7.163-16-15.1L48 64.13c-.0004-8.837 7.163-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1v288C336 456.8 328.8 464 320 464z\"],\n    \"file-audio\": [384, 512, [], \"f1c7\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0L64-.0001c-35.35 0-64 28.65-64 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM171.5 259.5L136 296H92C85.38 296 80 301.4 80 308v56C80 370.7 85.38 376 92 376H136l35.5 36.5C179.1 420 192 414.8 192 404v-136C192 257.3 179.1 251.9 171.5 259.5zM235.1 260.7c-6.25 6.25-6.25 16.38 0 22.62C235.3 283.5 256 305.1 256 336c0 30.94-20.77 52.53-20.91 52.69c-6.25 6.25-6.25 16.38 0 22.62C238.2 414.4 242.3 416 246.4 416s8.188-1.562 11.31-4.688C258.1 410.1 288 380.5 288 336s-29.05-74.06-30.28-75.31C251.5 254.4 241.3 254.4 235.1 260.7z\"],\n    \"file-code\": [384, 512, [], \"f1c9\", \"M162.1 257.8c-7.812-7.812-20.47-7.812-28.28 0l-48 48c-7.812 7.812-7.812 20.5 0 28.31l48 48C137.8 386.1 142.9 388 148 388s10.23-1.938 14.14-5.844c7.812-7.812 7.812-20.5 0-28.31L128.3 320l33.86-33.84C169.1 278.3 169.1 265.7 162.1 257.8zM365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM221.9 257.8c-7.812 7.812-7.812 20.5 0 28.31L255.7 320l-33.86 33.84c-7.812 7.812-7.812 20.5 0 28.31C225.8 386.1 230.9 388 236 388s10.23-1.938 14.14-5.844l48-48c7.812-7.812 7.812-20.5 0-28.31l-48-48C242.3 250 229.7 250 221.9 257.8z\"],\n    \"file-excel\": [384, 512, [], \"f1c3\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM229.1 233.3L192 280.9L154.9 233.3C146.8 222.8 131.8 220.9 121.3 229.1C110.8 237.2 108.9 252.3 117.1 262.8L161.6 320l-44.53 57.25c-8.156 10.47-6.25 25.56 4.188 33.69C125.7 414.3 130.8 416 135.1 416c7.156 0 14.25-3.188 18.97-9.25L192 359.1l37.06 47.65C233.8 412.8 240.9 416 248 416c5.125 0 10.31-1.656 14.72-5.062c10.44-8.125 12.34-23.22 4.188-33.69L222.4 320l44.53-57.25c8.156-10.47 6.25-25.56-4.188-33.69C252.2 220.9 237.2 222.8 229.1 233.3z\"],\n    \"file-image\": [384, 512, [128443], \"f1c5\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM215.3 292c-4.68 0-9.051 2.34-11.65 6.234L164 357.8l-11.68-17.53C149.7 336.3 145.3 334 140.7 334c-4.682 0-9.053 2.34-11.65 6.234l-46.67 70c-2.865 4.297-3.131 9.82-.6953 14.37C84.09 429.2 88.84 432 93.1 432h196c5.163 0 9.907-2.844 12.34-7.395c2.436-4.551 2.17-10.07-.6953-14.37l-74.67-112C224.4 294.3 220 292 215.3 292zM128 288c17.67 0 32-14.33 32-32S145.7 224 128 224S96 238.3 96 256S110.3 288 128 288z\"],\n    \"file-lines\": [384, 512, [128462, 61686, 128441, \"file-alt\", \"file-text\"], \"f15c\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0L64-.0001c-35.35 0-64 28.65-64 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM96 280C96 293.3 106.8 304 120 304h144C277.3 304 288 293.3 288 280S277.3 256 264 256h-144C106.8 256 96 266.8 96 280zM264 352h-144C106.8 352 96 362.8 96 376s10.75 24 24 24h144c13.25 0 24-10.75 24-24S277.3 352 264 352z\"],\n    \"file-pdf\": [384, 512, [], \"f1c1\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM202 286.1c.877-2.688 1.74-5.398 2.582-8.145c1.434-5.762 7.488-31.54 7.488-52.47C212.1 207 197.1 192 178.6 192C160.1 192 145.1 207 145.1 225.5c0 .2969 .1641 28.81 13.85 62.3c-7.035 19.36-15.57 38.8-25.41 57.93c-21.49 10.11-39.24 22.23-52.8 36.07c-6.234 6.438-9.367 14.74-9.367 24.72c0 18.45 15.01 33.46 33.46 33.46c10.8 0 20.98-5.227 27.22-13.98c7.322-10.28 18.38-26.9 30.47-48.95c15.8-6.352 33.88-11.72 53.88-16c13.55 9.578 28.9 17.29 45.71 22.95c4.527 1.551 9.402 2.348 14.43 2.348c20.26 0 36.13-16.19 36.13-36.86c0-20.33-16.54-36.87-36.87-36.87h-3.705c-2.727 .125-20.51 1.141-45.37 5.367C216.9 308.9 208.6 298.3 202 286.1zM110.2 410.4c-3.273 4.688-12.03 2.777-12.03-5.312c0-1.754 .6289-3.43 1.729-4.555c9.02-9.219 19.94-17.05 31.85-23.72C122.3 393.1 114.3 404.7 110.2 410.4zM178.6 218.8c3.693 0 6.703 3.008 6.703 6.703c0 15.21-4.109 34.84-5.746 42.1C172.1 245 171.9 227.2 171.9 225.5C171.9 221.8 174.9 218.8 178.6 218.8zM162.3 348.3c6.611-13.48 13.22-28.46 19.38-44.7c6.389 10.92 14.56 21.86 24.96 31.97C192.6 338.8 177.4 342.9 162.3 348.3zM272.4 339.5h3.352c5.539 0 10.05 4.5 10.05 10.79c0 5.129-4.176 9.32-9.32 9.32c-2.029 0-4.059-.3164-5.852-.9414c-12.33-4.137-23.11-9.32-32.54-15.19C258.3 340.3 272.1 339.5 272.4 339.5z\"],\n    \"file-powerpoint\": [384, 512, [], \"f1c4\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM200 224H128C119.2 224 112 231.2 112 240v168c0 13.25 10.75 24 24 24S160 421.3 160 408v-32h44c44.21 0 79.73-37.95 75.69-82.98C276.1 253.2 240 224 200 224zM204 328H160V272h44c15.44 0 28 12.56 28 28S219.4 328 204 328z\"],\n    \"file-video\": [384, 512, [], \"f1c8\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM240 288c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-16.52l43.84 30.2C292.3 403.5 304 397.6 304 387.4V284.6c0-10.16-11.64-16.16-20.16-10.32L240 304.5V288z\"],\n    \"file-word\": [384, 512, [], \"f1c2\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM214.6 248C211.3 238.4 202.2 232 192 232s-19.25 6.406-22.62 16L144.7 318.1l-25.89-77.66C114.6 227.8 101 221.2 88.41 225.2C75.83 229.4 69.05 243 73.23 255.6l48 144C124.5 409.3 133.5 415.9 143.8 416c10.17 0 19.45-6.406 22.83-16L192 328.1L217.4 400C220.8 409.6 229.8 416 240 416c10.27-.0938 19.53-6.688 22.77-16.41l48-144c4.188-12.59-2.594-26.16-15.17-30.38c-12.61-4.125-26.2 2.594-30.36 15.19l-25.89 77.66L214.6 248z\"],\n    \"file-zipper\": [384, 512, [\"file-archive\"], \"f1c6\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0L64-.0001c-35.35 0-64 28.65-64 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h48V64h64V48.13h48.01L224 128c0 17.67 14.33 32 32 32h79.1V448zM176 96h-64v32h64V96zM176 160h-64v32h64V160zM176 224h-64l-30.56 116.5C73.51 379.5 103.7 416 144.3 416c40.26 0 70.45-36.3 62.68-75.15L176 224zM160 368H128c-8.836 0-16-7.164-16-16s7.164-16 16-16h32c8.836 0 16 7.164 16 16S168.8 368 160 368z\"],\n    \"flag\": [512, 512, [61725, 127988], \"f024\", \"M476.3 0c-6.365 0-13.01 1.35-19.34 4.233c-45.69 20.86-79.56 27.94-107.8 27.94c-59.96 0-94.81-31.86-163.9-31.87c-34.63 0-77.87 8.003-137.2 32.05V24C48 10.75 37.25 0 24 0S0 10.75 0 24v464C0 501.3 10.75 512 24 512s24-10.75 24-24v-104c53.59-23.86 96.02-31.81 132.8-31.81c73.63 0 124.9 31.78 198.6 31.78c31.91 0 68.02-5.971 111.1-23.09C504.1 355.9 512 344.4 512 332.1V30.73C512 11.1 495.3 0 476.3 0zM464 319.8c-30.31 10.82-58.08 16.1-84.6 16.1c-30.8 0-58.31-7-87.44-14.41c-32.01-8.141-68.29-17.37-111.1-17.37c-42.35 0-85.99 9.09-132.8 27.73V84.14l18.03-7.301c47.39-19.2 86.38-28.54 119.2-28.54c28.24 .0039 49.12 6.711 73.31 14.48c25.38 8.148 54.13 17.39 90.58 17.39c35.43 0 72.24-8.496 114.9-26.61V319.8z\"],\n    \"floppy-disk\": [448, 512, [128426, 128190, \"save\"], \"f0c7\", \"M224 256c-35.2 0-64 28.8-64 64c0 35.2 28.8 64 64 64c35.2 0 64-28.8 64-64C288 284.8 259.2 256 224 256zM433.1 129.1l-83.9-83.9C341.1 37.06 328.8 32 316.1 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V163.9C448 151.2 442.9 138.9 433.1 129.1zM128 80h144V160H128V80zM400 416c0 8.836-7.164 16-16 16H64c-8.836 0-16-7.164-16-16V96c0-8.838 7.164-16 16-16h16v104c0 13.25 10.75 24 24 24h192C309.3 208 320 197.3 320 184V83.88l78.25 78.25C399.4 163.2 400 164.8 400 166.3V416z\"],\n    \"folder\": [512, 512, [128447, 61716, 128193], \"f07b\", \"M448 96h-172.1L226.7 50.75C214.7 38.74 198.5 32 181.5 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h384c35.35 0 64-28.66 64-64V160C512 124.7 483.3 96 448 96zM64 80h117.5c4.273 0 8.293 1.664 11.31 4.688L256 144h192c8.822 0 16 7.176 16 16v32h-416V96C48 87.18 55.18 80 64 80zM448 432H64c-8.822 0-16-7.176-16-16V240h416V416C464 424.8 456.8 432 448 432z\"],\n    \"folder-open\": [576, 512, [128449, 61717, 128194], \"f07c\", \"M572.6 270.3l-96 192C471.2 473.2 460.1 480 447.1 480H64c-35.35 0-64-28.66-64-64V96c0-35.34 28.65-64 64-64h117.5c16.97 0 33.25 6.742 45.26 18.75L275.9 96H416c35.35 0 64 28.66 64 64v32h-48V160c0-8.824-7.178-16-16-16H256L192.8 84.69C189.8 81.66 185.8 80 181.5 80H64C55.18 80 48 87.18 48 96v288l71.16-142.3C124.6 230.8 135.7 224 147.8 224h396.2C567.7 224 583.2 249 572.6 270.3z\"],\n    \"font-awesome\": [448, 512, [62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M448 48V384c-63.09 22.54-82.34 32-119.5 32c-62.82 0-86.6-32-149.3-32c-21.69 0-38.48 3.791-53.74 8.766C110.1 397.5 96 386.1 96 371.7v-.7461c0-9.275 5.734-17.6 14.42-20.86C129.1 342.8 150.2 336 179.2 336c62.73 0 86.51 32 149.3 32c25.5 0 42.85-4.604 71.47-14.7v-240C379.2 120.6 357.7 128 328.5 128c-.0039 0 .0039 0 0 0c-62.81 0-86.61-32-149.3-32C122.1 96 98.8 122.1 48 126.1V456C48 469.3 37.25 480 24 480S0 469.3 0 456V56C0 42.74 10.75 32 24 32S48 42.74 48 56v22.99C98.8 74.14 122.1 48 179.2 48c62.77 0 86.45 32 149.3 32C366.1 80 386.8 69.85 448 48z\"],\n    \"futbol\": [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M177.1 228.6L207.9 320h96.5l29.62-91.38L256 172.1L177.1 228.6zM255.1 0C114.6 0 .0001 114.6 .0001 256S114.6 512 256 512s255.1-114.6 255.1-255.1S397.4 0 255.1 0zM435.2 361.1l-103.9-1.578l-30.67 99.52C286.2 462.2 271.3 464 256 464s-30.19-1.773-44.56-4.93L180.8 359.6L76.83 361.1c-14.93-25.35-24.79-54.01-27.8-84.72L134.3 216.4L100.7 118.1c19.85-22.34 44.32-40.45 72.04-52.62L256 128l83.29-62.47c27.72 12.17 52.19 30.27 72.04 52.62L377.7 216.4l85.23 59.97C459.1 307.1 450.1 335.8 435.2 361.1z\"],\n    \"gem\": [512, 512, [128142], \"f3a5\", \"M507.9 196.4l-104-153.8C399.4 35.95 391.1 32 384 32H127.1C120 32 112.6 35.95 108.1 42.56l-103.1 153.8c-6.312 9.297-5.281 21.72 2.406 29.89l231.1 246.2C243.1 477.3 249.4 480 256 480s12.94-2.734 17.47-7.547l232-246.2C513.2 218.1 514.2 205.7 507.9 196.4zM382.5 96.59L446.1 192h-140.1L382.5 96.59zM256 178.9L177.6 80h156.7L256 178.9zM129.5 96.59L205.1 192H65.04L129.5 96.59zM256 421L85.42 240h341.2L256 421z\"],\n    \"hand\": [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M408 80c-3.994 0-7.91 .3262-11.73 .9551c-9.586-28.51-36.57-49.11-68.27-49.11c-6.457 0-12.72 .8555-18.68 2.457C296.6 13.73 273.9 0 248 0C222.1 0 199.3 13.79 186.6 34.44C180.7 32.85 174.5 32 168.1 32C128.4 32 96.01 64.3 96.01 104v121.6C90.77 224.6 85.41 224 80.01 224c-.0026 0 .0026 0 0 0C36.43 224 0 259.2 0 304.1c0 20.29 7.558 39.52 21.46 54.45l81.25 87.24C141.9 487.9 197.4 512 254.9 512h33.08C393.9 512 480 425.9 480 320V152C480 112.3 447.7 80 408 80zM432 320c0 79.41-64.59 144-143.1 144H254.9c-44.41 0-86.83-18.46-117.1-50.96l-79.76-85.63c-6.202-6.659-9.406-15.4-9.406-23.1c0-22.16 18.53-31.4 31.35-31.4c8.56 0 17.1 3.416 23.42 10.18l26.72 28.69C131.8 312.7 133.9 313.4 135.9 313.4c4.106 0 8.064-3.172 8.064-8.016V104c0-13.25 10.75-24 23.1-24c13.25 0 23.1 10.75 23.1 24v152C192 264.8 199.2 272 208 272s15.1-7.163 15.1-15.1L224 72c0-13.25 10.75-24 23.1-24c13.25 0 23.1 10.75 23.1 24v184C272 264.8 279.2 272 288 272s15.99-7.164 15.99-15.1l.0077-152.2c0-13.25 10.75-24 23.1-24c13.25 0 23.1 10.75 23.1 24v152.2C352 264.8 359.2 272 368 272s15.1-7.163 15.1-15.1V152c0-13.25 10.75-24 23.1-24c13.25 0 23.1 10.75 23.1 24V320z\"],\n    \"hand-back-fist\": [448, 512, [\"hand-rock\"], \"f255\", \"M377.1 68.05C364.4 50.65 343.7 40 321.2 40h-13.53c-3.518 0-7.039 .2754-10.53 .8184C284.8 31.33 269.6 26 253.5 26H240c-3.977 0-7.904 .3691-11.75 1.084C216.7 10.71 197.6 0 176 0H160C124.7 0 96 28.65 96 64v49.71L63.04 143.3C43.3 160 32 184.6 32 210.9v78.97c0 32.1 17.11 61.65 44.65 77.12L112 386.9v101.1C112 501.3 122.7 512 135.1 512S160 501.3 160 488v-129.9c-1.316-.6543-2.775-.9199-4.062-1.639l-55.78-31.34C87.72 318.2 80 304.6 80 289.9V210.9c0-12.31 5.281-23.77 14.5-31.39L112 163.8V208C112 216.8 119.2 224 128 224s16-7.156 16-16V64c0-8.828 7.188-16 16-16h16C184.8 48 192 55.17 192 64v16c0 9.578 7.942 16.04 16.15 16.04c6.432 0 12.31-4.018 14.73-10.17C223.3 84.84 228.3 74 240 74h13.53c20.97 0 17.92 19.58 34.27 19.58c8.177 0 9.9-5.584 19.88-5.584h13.53c25.54 0 18.27 28.23 38.66 28.23c.1562 0 .3125-.002 .4668-.0078L375.4 116C388.1 116 400 127.7 400 142V272c0 36.15-19.54 67.32-48 83.69v132.3C352 501.3 362.7 512 375.1 512S400 501.3 400 488v-108.1C430.1 352.8 448 313.6 448 272V142C448 102.1 416.8 69.44 377.1 68.05z\"],\n    \"hand-lizard\": [512, 512, [], \"f258\", \"M512 331.8V424c0 13.25-10.75 24-24 24c-13.25 0-24-10.75-24-24v-92.17c0-10.09-3.031-19.8-8.766-28.08l-118.6-170.5C327.4 119.1 312.2 112 295.1 112H53.32c-2.5 0-5.25 2.453-5.313 4.172c-.2969 9.5 3.156 18.47 9.75 25.28C64.36 148.3 73.2 152 82.67 152h161.8c17.09 0 33.4 8.281 43.4 22.14c9.984 13.88 12.73 31.83 7.328 48.05l-9.781 29.34C278.2 273.3 257.8 288 234.9 288H138.7C129.2 288 120.4 291.8 113.8 298.5c-6.594 6.812-10.05 15.78-9.75 25.28C104.1 325.5 106.8 328 109.3 328h156.6c5.188 0 10.14 1.688 14.3 4.797l78.22 58.67c6.031 4.531 9.594 11.66 9.594 19.2L367.1 424c0 13.25-10.75 24-24 24s-24-10.75-24-24v-1.328L257.8 376H109.3c-28.48 0-52.39-22.72-53.28-50.64c-.7187-22.61 7.531-43.98 23.23-60.2C94.1 248.9 116.1 240 138.7 240h96.19c2.297 0 4.328-1.469 5.063-3.656l9.781-29.33c.7031-2.141-.0156-3.797-.7344-4.797C248.2 201.2 246.9 200 244.6 200H82.67c-22.58 0-43.67-8.938-59.39-25.16C7.575 158.6-.6755 137.3 .0433 114.6C.9339 86.72 24.84 64 53.32 64h242.7c31.94 0 61.86 15.67 80.05 41.92l118.6 170.5C506 292.8 512 311.9 512 331.8z\"],\n    \"hand-peace\": [512, 512, [9996], \"f25b\", \"M412 160c-8.326 0-16.3 1.51-23.68 4.27C375.1 151.8 358.9 144 340 144c-11.64 0-22.44 3.223-32.03 8.418l11.12-68.95c.6228-3.874 .9243-7.725 .9243-11.53c0-36.08-28.91-71.95-72.09-71.95c-34.68 0-65.31 25.16-71.03 60.54L173.4 82.22L168.9 72.77c-12.4-25.75-38.07-40.78-64.89-40.78c-40.8 0-72.01 33.28-72.01 72.07c0 10.48 2.296 21.11 7.144 31.18L89.05 238.9C64.64 250.4 48 275.7 48 303.1v80c0 22.06 10.4 43.32 27.83 56.86l45.95 35.74c29.35 22.83 65.98 35.41 103.2 35.41l78.81 .0352C400.9 512 480 432.1 480 335.8v-107.5C480 189.6 447.9 160 412 160zM320 212.3C320 201.1 328.1 192 340 192c11.02 0 20 9.078 20 20.25v55.5C360 278.9 351 288 340 288C328.1 288 320 278.9 320 267.8V212.3zM247.9 47.98c12.05 0 24.13 9.511 24.13 23.98c0 1.277-.1022 2.57-.3134 3.871L248.4 220.5C240.7 217.6 232.4 215.1 223.9 215.1c0 0 .002 0 0 0c-4.475 0-8.967 .4199-13.38 1.254l-10.55 1.627l24.32-150.7C226.2 56.42 236.4 47.98 247.9 47.98zM79.1 104c0-13.27 10.79-24.04 24.02-24.04c8.937 0 17.5 5.023 21.61 13.61l61.29 127.3L137.3 228.5L82.38 114.4C80.76 111.1 79.1 107.5 79.1 104zM303.8 464l-78.81-.0352c-26.56 0-52.72-8.984-73.69-25.3l-45.97-35.75C99.47 398.4 96 391.3 96 383.1v-80c0-11.23 7.969-21.11 17.59-23.22l105.3-16.23C220.6 264.2 222.3 263.1 223.9 263.1c11.91 0 24.09 9.521 24.09 24.06c0 11.04-7.513 20.95-17.17 23.09L172.8 319c-12.03 1.633-20.78 11.92-20.78 23.75c0 20.21 18.82 24.08 23.7 24.08c2.645 0 64.61-8.619 65.54-8.826c23.55-5.227 41.51-22.23 49.73-43.64C303.3 327.5 320.6 336 340 336c8.326 0 16.31-1.51 23.69-4.27C376 344.2 393.1 352 412 352c.1992 0 10.08-.4453 18.65-2.92C423.9 413.5 369.9 464 303.8 464zM432 283.8C432 294.9 423 304 412 304c-11.02 0-20-9.078-20-20.25v-55.5C392 217.1 400.1 208 412 208c11.02 0 20 9.078 20 20.25V283.8z\"],\n    \"hand-point-down\": [448, 512, [], \"f0a7\", \"M448 248V144C448 64.6 385.1 0 307.7 0H199.8C176.4 0 153.1 6.104 132.5 17.65L76.63 49C49.1 64.47 32 94.02 32 126.1V176c0 27.23 12.51 51.53 32 67.69V440C64 479.7 96.3 512 136 512s72-32.3 72-72v-56.44C210.6 383.9 213.3 384 216 384c25.95 0 48.73-13.79 61.4-34.43C283.3 351.2 289.6 352 296 352c25.95 0 48.73-13.79 61.4-34.43C363.3 319.2 369.6 320 376 320C415.7 320 448 287.7 448 248zM272 232c0-13.23 10.78-24 24-24S320 218.9 320 232.1V280c0 13.23-10.78 24-24 24S272 293.2 272 280V232zM192 264h12c12.39 0 23.93-3.264 34.27-8.545C239.3 258.1 240 260.1 240 264v48c0 13.23-10.78 24-24 24S192 325.2 192 312V264zM112 264c0-.2813 .1504-.5137 .1602-.793C114.8 263.4 117.3 264 120 264H160v176c0 13.23-10.78 24-24 24S112 453.2 112 440V264zM397.9 123.8C390.9 121.6 383.7 120 376 120c-29.04 0-53.96 17.37-65.34 42.18C305.8 161.2 301 160 296 160c-7.139 0-13.96 1.273-20.46 3.355C265.2 133.6 237.2 112 204 112H152C138.8 112 128 122.8 128 136S138.8 160 152 160h52c15.44 0 28 12.56 28 28S219.4 216 204 216H120C97.94 216 80 198.1 80 176V126.1c0-14.77 7.719-28.28 20.16-35.27l55.78-31.34C169.4 51.98 184.6 48 199.8 48h107.9C351.9 48 388.9 80.56 397.9 123.8zM400 248c0 13.23-10.78 24-24 24S352 261.2 352 248V192c0-13.23 10.78-24 24-24S400 178.8 400 192V248z\"],\n    \"hand-point-left\": [512, 512, [], \"f0a5\", \"M264 480h104c79.4 0 144-62.95 144-140.3V231.8c0-23.44-6.104-46.73-17.65-67.35L462.1 108.6C447.5 81.1 417.1 64 385.9 64H336c-27.23 0-51.53 12.51-67.69 32H72C32.3 96 0 128.3 0 168S32.3 240 72 240h56.44C128.1 242.6 128 245.3 128 248c0 25.95 13.79 48.73 34.43 61.4C160.8 315.3 160 321.6 160 328c0 25.95 13.79 48.73 34.43 61.4C192.8 395.3 192 401.6 192 408C192 447.7 224.3 480 264 480zM280 304c13.23 0 24 10.78 24 24S293.1 352 279.9 352H232c-13.23 0-24-10.78-24-24S218.8 304 232 304H280zM248 224v12c0 12.39 3.264 23.93 8.545 34.27C253.9 271.3 251 272 248 272h-48C186.8 272 176 261.2 176 248S186.8 224 200 224H248zM248 144c.2813 0 .5137 .1504 .793 .1602C248.6 146.8 248 149.3 248 152V192h-176C58.77 192 48 181.2 48 168S58.77 144 72 144H248zM388.2 429.9C390.4 422.9 392 415.7 392 408c0-29.04-17.37-53.96-42.18-65.34C350.8 337.8 352 333 352 328c0-7.139-1.273-13.96-3.355-20.46C378.4 297.2 400 269.2 400 236V184C400 170.8 389.3 160 376 160S352 170.8 352 184v52c0 15.44-12.56 28-28 28S296 251.4 296 236V152c0-22.06 17.94-40 40-40h49.88c14.77 0 28.28 7.719 35.27 20.16l31.34 55.78C460 201.4 464 216.6 464 231.8v107.9C464 383.9 431.4 420.9 388.2 429.9zM264 432c-13.23 0-24-10.78-24-24S250.8 384 264 384H320c13.23 0 24 10.78 24 24S333.2 432 320 432H264z\"],\n    \"hand-point-right\": [512, 512, [], \"f0a4\", \"M320 408c0-6.428-.8457-12.66-2.434-18.6C338.2 376.7 352 353.9 352 328c0-6.428-.8457-12.66-2.434-18.6C370.2 296.7 384 273.9 384 248c0-2.705-.1484-5.373-.4414-8H440C479.7 240 512 207.7 512 168S479.7 96 440 96H243.7C227.5 76.51 203.2 64 176 64H126.1C94.02 64 64.47 81.1 49 108.6L17.65 164.5C6.104 185.1 0 208.4 0 231.8v107.9C0 417.1 64.6 480 144 480h104C287.7 480 320 447.7 320 408zM280 304c13.23 0 24 10.78 24 24S293.2 352 280 352H232.1C218.9 352 208 341.2 208 328S218.8 304 232 304H280zM312 224c13.23 0 24 10.78 24 24S325.2 272 312 272h-48c-3.029 0-5.875-.7012-8.545-1.73C260.7 259.9 264 248.4 264 236V224H312zM440 144c13.23 0 24 10.78 24 24S453.2 192 440 192h-176V152c0-2.686-.5566-5.217-.793-7.84C263.5 144.2 263.7 144 264 144H440zM48 339.7V231.8c0-15.25 3.984-30.41 11.52-43.88l31.34-55.78C97.84 119.7 111.4 112 126.1 112H176c22.06 0 40 17.94 40 40v84c0 15.44-12.56 28-28 28S160 251.4 160 236V184C160 170.8 149.3 160 136 160S112 170.8 112 184v52c0 33.23 21.58 61.25 51.36 71.54C161.3 314 160 320.9 160 328c0 5.041 1.166 9.836 2.178 14.66C137.4 354 120 378.1 120 408c0 7.684 1.557 14.94 3.836 21.87C80.56 420.9 48 383.9 48 339.7zM192 432c-13.23 0-24-10.78-24-24S178.8 384 192 384h56c13.23 0 24 10.78 24 24s-10.77 24-24 24H192z\"],\n    \"hand-point-up\": [448, 512, [9757], \"f0a6\", \"M376 192c-6.428 0-12.66 .8457-18.6 2.434C344.7 173.8 321.9 160 296 160c-6.428 0-12.66 .8457-18.6 2.434C264.7 141.8 241.9 128 216 128C213.3 128 210.6 128.1 208 128.4V72C208 32.3 175.7 0 136 0S64 32.3 64 72v196.3C44.51 284.5 32 308.8 32 336v49.88c0 32.1 17.1 61.65 44.63 77.12l55.83 31.35C153.1 505.9 176.4 512 199.8 512h107.9C385.1 512 448 447.4 448 368V264C448 224.3 415.7 192 376 192zM272 232c0-13.23 10.78-24 24-24S320 218.8 320 232v47.91C320 293.1 309.2 304 296 304S272 293.2 272 280V232zM192 200C192 186.8 202.8 176 216 176s24 10.77 24 24v48c0 3.029-.7012 5.875-1.73 8.545C227.9 251.3 216.4 248 204 248H192V200zM112 72c0-13.23 10.78-24 24-24S160 58.77 160 72v176H120c-2.686 0-5.217 .5566-7.84 .793C112.2 248.5 112 248.3 112 248V72zM307.7 464H199.8c-15.25 0-30.41-3.984-43.88-11.52l-55.78-31.34C87.72 414.2 80 400.6 80 385.9V336c0-22.06 17.94-40 40-40h84c15.44 0 28 12.56 28 28S219.4 352 204 352H152C138.8 352 128 362.8 128 376s10.75 24 24 24h52c33.23 0 61.25-21.58 71.54-51.36C282 350.7 288.9 352 296 352c5.041 0 9.836-1.166 14.66-2.178C322 374.6 346.1 392 376 392c7.684 0 14.94-1.557 21.87-3.836C388.9 431.4 351.9 464 307.7 464zM400 320c0 13.23-10.78 24-24 24S352 333.2 352 320V264c0-13.23 10.78-24 24-24s24 10.77 24 24V320z\"],\n    \"hand-pointer\": [448, 512, [], \"f25a\", \"M208 288C199.2 288 192 295.2 192 304v96C192 408.8 199.2 416 208 416s16-7.164 16-16v-96C224 295.2 216.8 288 208 288zM272 288C263.2 288 256 295.2 256 304v96c0 8.836 7.162 16 15.1 16S288 408.8 288 400l-.0013-96C287.1 295.2 280.8 288 272 288zM376.9 201.2c-13.74-17.12-34.8-27.45-56.92-27.45h-13.72c-3.713 0-7.412 .291-11.07 .8652C282.7 165.1 267.4 160 251.4 160h-11.44V72c0-39.7-32.31-72-72.01-72c-39.7 0-71.98 32.3-71.98 72v168.5C84.85 235.1 75.19 235.4 69.83 235.4c-44.35 0-69.83 37.23-69.83 69.85c0 14.99 4.821 29.51 13.99 41.69l78.14 104.2C120.7 489.3 166.2 512 213.7 512h109.7c6.309 0 12.83-.957 18.14-2.645c28.59-5.447 53.87-19.41 73.17-40.44C436.1 446.3 448 416.2 448 384.2V274.3C448 234.6 416.3 202.3 376.9 201.2zM400 384.2c0 19.62-7.219 38.06-20.44 52.06c-12.53 13.66-29.03 22.67-49.69 26.56C327.4 463.6 325.3 464 323.4 464H213.7c-32.56 0-63.65-15.55-83.18-41.59L52.36 318.2C49.52 314.4 48.02 309.8 48.02 305.2c0-16.32 14.5-21.75 21.72-21.75c4.454 0 12.01 1.55 17.34 8.703l28.12 37.5c3.093 4.105 7.865 6.419 12.8 6.419c11.94 0 16.01-10.7 16.01-16.01V72c0-13.23 10.78-24 23.1-24c13.22 0 24 10.77 24 24v130.7c0 6.938 5.451 16.01 16.03 16.01C219.5 218.7 220.1 208 237.7 208h13.72c21.5 0 18.56 19.21 34.7 19.21c8.063 0 9.805-5.487 20.15-5.487h13.72c26.96 0 17.37 27.43 40.77 27.43l14.07-.0037c13.88 0 25.16 11.28 25.16 25.14V384.2zM336 288C327.2 288 320 295.2 320 304v96c0 8.836 7.164 16 16 16s16-7.164 16-16v-96C352 295.2 344.8 288 336 288z\"],\n    \"hand-scissors\": [512, 512, [], \"f257\", \"M270.1 480h97.92C447.4 480 512 417.1 512 339.7V231.8c0-23.45-6.106-46.73-17.66-67.33l-31.35-55.85C447.5 81.1 417.1 64 385.9 64h-46.97c-26.63 0-51.56 11.63-68.4 31.93l-15.46 18.71L127.3 68.44C119 65.46 110.5 64.05 102.1 64.05c-30.02 0-58.37 18.06-69.41 47.09C15.06 156.8 46.19 194 76.75 204.9l2.146 .7637L68.79 206.4C30.21 209 0 241.2 0 279.3c0 39.7 33.27 72.09 73.92 72.09c1.745 0 3.501-.0605 5.268-.1833l88.79-6.135v8.141c0 22.11 10.55 43.11 28.05 56.74C197.4 448.8 230.2 480 270.1 480zM269.1 432c-14.34 0-26-11.03-26-24.62c0 0 .0403-14.31 .0403-14.71c0-6.894-4.102-14.2-10.67-16.39c-10.39-3.5-17.38-12.78-17.38-23.06v-13.53c0-16.98 13.7-16.4 13.7-29.89c0-9.083-7.392-15.96-15.96-15.96c-.3646 0-.7311 .0125-1.099 .0377c0 0-138.1 9.505-138.7 9.505c-14.32 0-25.93-11.04-25.93-24.49c0-13.28 10.7-23.74 24.1-24.64l163.2-11.28c2.674-.1882 14.92-2.907 14.92-16.18c0-6.675-4.284-12.58-10.65-14.85L92.84 159.7C85.39 156.1 75.97 149.4 75.97 136.7c0-11.14 9.249-24.66 25.97-24.66c3.043 0 6.141 .5115 9.166 1.59l234.1 85.03c1.801 .6581 3.644 .9701 5.456 .9701c8.96 0 16-7.376 16-15.1c0-6.514-4.068-12.69-10.59-15.04l-64.81-23.47l15.34-18.56C315.2 117.3 326.6 112 338.9 112h46.97c14.77 0 28.28 7.719 35.27 20.16L452.5 188c7.531 13.41 11.52 28.56 11.52 43.81v107.9c0 50.91-43.06 92.31-96 92.31H269.1z\"],\n    \"hand-spock\": [576, 512, [128406], \"f259\", \"M234.9 48.02c10.43 0 20.72 5.834 24.13 19.17l47.33 184.1c2.142 8.456 9.174 12.62 16.21 12.62c7.326 0 14.66-4.505 16.51-13.37l31.72-155.1c2.921-14.09 13.76-20.57 24.67-20.57c13.01 0 26.14 9.19 26.14 25.62c0 2.19-.2333 4.508-.7313 6.951l-28.48 139.2c-.2389 1.156-.3514 2.265-.3514 3.323c0 8.644 7.504 13.9 14.86 13.9c5.869 0 11.65-3.341 13.46-10.98l24.73-104.2c.2347-.9802 4.12-19.76 24.28-19.76c13.21 0 26.64 9.4 26.64 24.79c0 2.168-.2665 4.455-.8378 6.852l-48.06 204.7c-13.59 57.85-65.15 98.74-124.5 98.74l-48.79-.0234c-40.7-.0196-79.86-15.58-109.5-43.51l-75.93-71.55c-5.938-5.584-8.419-11.1-8.419-18.2c0-13.88 12.45-26.69 26.38-26.69c5.756 0 11.76 2.182 17.26 7.376l51.08 48.14c1.682 1.569 3.599 2.249 5.448 2.249c4.192 0 8.04-3.49 8.04-8.001c0-23.76-3.372-47.39-10.12-70.28L142 161.1C141.2 159.1 140.8 156.3 140.8 153.7c0-15.23 13.48-24.82 26.75-24.82c10.11 0 20.1 5.559 23.94 18.42l31.22 105.8c2.231 7.546 8.029 10.8 13.9 10.8c7.752 0 15.64-5.659 15.64-14.57c0-1.339-.1783-2.752-.562-4.23L209.3 80.06C208.7 77.45 208.3 74.97 208.3 72.62C208.3 57.33 221.7 48.02 234.9 48.02zM234.9 0C201.5 0 160.4 25.24 160.4 72.72c0 2.807 .1579 5.632 .4761 8.463C129.9 83.9 92.84 108.9 92.84 153.8c0 7.175 1.038 14.47 3.148 21.68l24.33 81.94C115.8 256.5 111.1 256 106.4 256C65.74 256 32 290.6 32 330.8c0 19.59 8.162 38.58 23.6 53.1l75.89 71.51c38.68 36.45 89.23 56.53 142.3 56.56L322.6 512c82.1 0 152.5-55.83 171.3-135.8l48.06-204.7C543.3 165.7 544 159.7 544 153.9c0-54.55-49.55-72.95-74.59-72.95c-.7689 0-1.534 .0117-2.297 .0352c-10.49-39.43-46.46-54.11-71.62-54.11c-34.1 0-64.45 24.19-71.63 58.83L319.2 108.5l-13.7-53.29C297.1 22.22 268.7 0 234.9 0z\"],\n    \"handshake\": [640, 512, [], \"f2b5\", \"M506.1 127.1c-17.97-20.17-61.46-61.65-122.7-71.1c-22.5-3.354-45.39 3.606-63.41 18.21C302 60.47 279.1 53.42 256.5 56.86C176.8 69.17 126.7 136.2 124.6 139.1c-7.844 10.69-5.531 25.72 5.125 33.57c4.281 3.157 9.281 4.657 14.19 4.657c7.406 0 14.69-3.375 19.38-9.782c.4062-.5626 40.19-53.91 100.5-63.23c7.457-.9611 14.98 .67 21.56 4.483L227.2 168.2C214.8 180.5 207.1 196.1 207.1 214.5c0 17.5 6.812 33.94 19.16 46.29C239.5 273.2 255.9 279.1 273.4 279.1s33.94-6.813 46.31-19.19l11.35-11.35l124.2 100.9c2.312 1.875 2.656 5.251 .5 7.97l-27.69 35.75c-1.844 2.25-5.25 2.594-7.156 1.063l-22.22-18.69l-26.19 27.75c-2.344 2.875-5.344 3.563-6.906 3.719c-1.656 .1562-4.562 .125-6.812-1.719l-32.41-27.66L310.7 392.3l-2.812 2.938c-5.844 7.157-14.09 11.66-23.28 12.6c-9.469 .8126-18.25-1.75-24.5-6.782L170.3 319.8H96V128.3L0 128.3v255.6l64 .0404c11.74 0 21.57-6.706 27.14-16.14h60.64l77.06 69.66C243.7 449.6 261.9 456 280.8 456c2.875 0 5.781-.125 8.656-.4376c13.62-1.406 26.41-6.063 37.47-13.5l.9062 .8126c12.03 9.876 27.28 14.41 42.69 12.78c13.19-1.375 25.28-7.032 33.91-15.35c21.09 8.188 46.09 2.344 61.25-16.47l27.69-35.75c18.47-22.82 14.97-56.48-7.844-75.01l-120.3-97.76l8.381-8.382c9.375-9.376 9.375-24.57 0-33.94c-9.375-9.376-24.56-9.376-33.94 0L285.8 226.8C279.2 233.5 267.7 233.5 261.1 226.8c-3.312-3.282-5.125-7.657-5.125-12.31c0-4.688 1.812-9.064 5.281-12.53l85.91-87.64c7.812-7.845 18.53-11.75 28.94-10.03c59.75 9.22 100.2 62.73 100.6 63.29c3.088 4.155 7.264 6.946 11.84 8.376H544v175.1c0 17.67 14.33 32.05 31.1 32.05L640 384V128.1L506.1 127.1zM48 352c-8.75 0-16-7.245-16-15.99c0-8.876 7.25-15.99 16-15.99S64 327.2 64 336.1C64 344.8 56.75 352 48 352zM592 352c-8.75 0-16-7.245-16-15.99c0-8.876 7.25-15.99 16-15.99s16 7.117 16 15.99C608 344.8 600.8 352 592 352z\"],\n    \"hard-drive\": [512, 512, [128436, \"hdd\"], \"f0a0\", \"M304 344c-13.25 0-24 10.74-24 24c0 13.25 10.75 24 24 24c13.26 0 24-10.75 24-24C328 354.7 317.3 344 304 344zM448 32h-384c-35.35 0-64 28.65-64 64v320c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V96C512 60.65 483.3 32 448 32zM464 416c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16v-96c0-8.822 7.178-16 16-16h384C456.8 304 464 311.2 464 320V416zM464 258.3C458.9 256.9 453.6 256 448 256H64C58.44 256 53.14 256.9 48 258.3V96c0-8.822 7.178-16 16-16h384c8.822 0 16 7.178 16 16V258.3zM400 344c-13.25 0-24 10.74-24 24c0 13.25 10.75 24 24 24c13.26 0 24-10.75 24-24C424 354.7 413.3 344 400 344z\"],\n    \"heart\": [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 10084, 61578, 9829], \"f004\", \"M244 84L255.1 96L267.1 84.02C300.6 51.37 347 36.51 392.6 44.1C461.5 55.58 512 115.2 512 185.1V190.9C512 232.4 494.8 272.1 464.4 300.4L283.7 469.1C276.2 476.1 266.3 480 256 480C245.7 480 235.8 476.1 228.3 469.1L47.59 300.4C17.23 272.1 0 232.4 0 190.9V185.1C0 115.2 50.52 55.58 119.4 44.1C164.1 36.51 211.4 51.37 244 84C243.1 84 244 84.01 244 84L244 84zM255.1 163.9L210.1 117.1C188.4 96.28 157.6 86.4 127.3 91.44C81.55 99.07 48 138.7 48 185.1V190.9C48 219.1 59.71 246.1 80.34 265.3L256 429.3L431.7 265.3C452.3 246.1 464 219.1 464 190.9V185.1C464 138.7 430.4 99.07 384.7 91.44C354.4 86.4 323.6 96.28 301.9 117.1L255.1 163.9z\"],\n    \"hospital\": [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M296 96C296 87.16 303.2 80 312 80H328C336.8 80 344 87.16 344 96V120H368C376.8 120 384 127.2 384 136V152C384 160.8 376.8 168 368 168H344V192C344 200.8 336.8 208 328 208H312C303.2 208 296 200.8 296 192V168H272C263.2 168 256 160.8 256 152V136C256 127.2 263.2 120 272 120H296V96zM408 0C447.8 0 480 32.24 480 72V80H568C607.8 80 640 112.2 640 152V440C640 479.8 607.8 512 568 512H71.98C32.19 512 0 479.8 0 440V152C0 112.2 32.24 80 72 80H160V72C160 32.24 192.2 0 232 0L408 0zM480 128V464H568C581.3 464 592 453.3 592 440V336H536C522.7 336 512 325.3 512 312C512 298.7 522.7 288 536 288H592V240H536C522.7 240 512 229.3 512 216C512 202.7 522.7 192 536 192H592V152C592 138.7 581.3 128 568 128H480zM48 152V192H104C117.3 192 128 202.7 128 216C128 229.3 117.3 240 104 240H48V288H104C117.3 288 128 298.7 128 312C128 325.3 117.3 336 104 336H48V440C48 453.3 58.74 464 71.98 464H160V128H72C58.75 128 48 138.7 48 152V152zM208 464H272V400C272 373.5 293.5 352 320 352C346.5 352 368 373.5 368 400V464H432V72C432 58.75 421.3 48 408 48H232C218.7 48 208 58.75 208 72V464z\"],\n    \"hourglass\": [384, 512, [62032, 9203, \"hourglass-2\", \"hourglass-half\"], \"f254\", \"M0 24C0 10.75 10.75 0 24 0H360C373.3 0 384 10.75 384 24C384 37.25 373.3 48 360 48H352V66.98C352 107.3 335.1 145.1 307.5 174.5L225.9 256L307.5 337.5C335.1 366 352 404.7 352 445V464H360C373.3 464 384 474.7 384 488C384 501.3 373.3 512 360 512H24C10.75 512 0 501.3 0 488C0 474.7 10.75 464 24 464H32V445C32 404.7 48.01 366 76.52 337.5L158.1 256L76.52 174.5C48.01 145.1 32 107.3 32 66.98V48H24C10.75 48 0 37.25 0 24V24zM99.78 384H284.2C281 379.6 277.4 375.4 273.5 371.5L192 289.9L110.5 371.5C106.6 375.4 102.1 379.6 99.78 384H99.78zM284.2 128C296.1 110.4 304 89.03 304 66.98V48H80V66.98C80 89.03 87 110.4 99.78 128H284.2z\"],\n    \"id-badge\": [384, 512, [], \"f2c1\", \"M320 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h256c35.35 0 64-28.65 64-64V64C384 28.65 355.3 0 320 0zM336 448c0 8.836-7.164 16-16 16H64c-8.836 0-16-7.164-16-16V64c0-8.838 7.164-16 16-16h64V64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V48h64c8.836 0 16 7.162 16 16V448zM192 288c35.35 0 64-28.65 64-64s-28.65-64-64-64C156.7 160 128 188.7 128 224S156.7 288 192 288zM224 320H160c-44.18 0-80 35.82-80 80C80 408.8 87.16 416 96 416h192c8.836 0 16-7.164 16-16C304 355.8 268.2 320 224 320z\"],\n    \"id-card\": [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M368 344h96c13.25 0 24-10.75 24-24s-10.75-24-24-24h-96c-13.25 0-24 10.75-24 24S354.8 344 368 344zM208 320c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64s-64 28.65-64 64C144 291.3 172.7 320 208 320zM512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM528 416c0 8.822-7.178 16-16 16h-192c0-44.18-35.82-80-80-80h-64C131.8 352 96 387.8 96 432H64c-8.822 0-16-7.178-16-16V160h480V416zM368 264h96c13.25 0 24-10.75 24-24s-10.75-24-24-24h-96c-13.25 0-24 10.75-24 24S354.8 264 368 264z\"],\n    \"image\": [512, 512, [], \"f03e\", \"M152 120c-26.51 0-48 21.49-48 48s21.49 48 48 48s48-21.49 48-48S178.5 120 152 120zM447.1 32h-384C28.65 32-.0091 60.65-.0091 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96C511.1 60.65 483.3 32 447.1 32zM463.1 409.3l-136.8-185.9C323.8 218.8 318.1 216 312 216c-6.113 0-11.82 2.768-15.21 7.379l-106.6 144.1l-37.09-46.1c-3.441-4.279-8.934-6.809-14.77-6.809c-5.842 0-11.33 2.529-14.78 6.809l-75.52 93.81c0-.0293 0 .0293 0 0L47.99 96c0-8.822 7.178-16 16-16h384c8.822 0 16 7.178 16 16V409.3z\"],\n    \"images\": [576, 512, [], \"f302\", \"M512 32H160c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64H512c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM528 320c0 8.822-7.178 16-16 16h-16l-109.3-160.9C383.7 170.7 378.7 168 373.3 168c-5.352 0-10.35 2.672-13.31 7.125l-62.74 94.11L274.9 238.6C271.9 234.4 267.1 232 262 232c-5.109 0-9.914 2.441-12.93 6.574L176 336H160c-8.822 0-16-7.178-16-16V96c0-8.822 7.178-16 16-16H512c8.822 0 16 7.178 16 16V320zM224 112c-17.67 0-32 14.33-32 32s14.33 32 32 32c17.68 0 32-14.33 32-32S241.7 112 224 112zM456 480H120C53.83 480 0 426.2 0 360v-240C0 106.8 10.75 96 24 96S48 106.8 48 120v240c0 39.7 32.3 72 72 72h336c13.25 0 24 10.75 24 24S469.3 480 456 480z\"],\n    \"keyboard\": [576, 512, [9000], \"f11c\", \"M512 64H64C28.65 64 0 92.65 0 128v256c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V128C576 92.65 547.3 64 512 64zM528 384c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16V128c0-8.822 7.178-16 16-16h448c8.822 0 16 7.178 16 16V384zM140 152h-24c-6.656 0-12 5.344-12 12v24c0 6.656 5.344 12 12 12h24c6.656 0 12-5.344 12-12v-24C152 157.3 146.7 152 140 152zM196 200h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C184 194.7 189.3 200 196 200zM276 200h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C264 194.7 269.3 200 276 200zM356 200h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C344 194.7 349.3 200 356 200zM460 152h-24c-6.656 0-12 5.344-12 12v24c0 6.656 5.344 12 12 12h24c6.656 0 12-5.344 12-12v-24C472 157.3 466.7 152 460 152zM140 232h-24c-6.656 0-12 5.344-12 12v24c0 6.656 5.344 12 12 12h24c6.656 0 12-5.344 12-12v-24C152 237.3 146.7 232 140 232zM196 280h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C184 274.7 189.3 280 196 280zM276 280h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C264 274.7 269.3 280 276 280zM356 280h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C344 274.7 349.3 280 356 280zM460 232h-24c-6.656 0-12 5.344-12 12v24c0 6.656 5.344 12 12 12h24c6.656 0 12-5.344 12-12v-24C472 237.3 466.7 232 460 232zM400 320h-224C167.1 320 160 327.1 160 336V352c0 8.875 7.125 16 16 16h224c8.875 0 16-7.125 16-16v-16C416 327.1 408.9 320 400 320z\"],\n    \"lemon\": [448, 512, [127819], \"f094\", \"M439.9 144.6c15.34-26.38 8.372-62.41-16.96-87.62c-25.21-25.32-61.22-32.26-87.61-16.95c-9.044 5.218-27.15 3.702-48.08 1.968c-50.78-4.327-127.4-10.73-207.6 69.56C-.6501 191.9 5.801 268.5 10.07 319.3c1.749 20.96 3.28 39.07-1.984 48.08c-15.35 26.4-8.357 62.45 16.92 87.57c16.26 16.37 37.05 25.09 56.83 25.09c10.89 0 21.46-2.64 30.83-8.092c9.013-5.249 27.12-3.718 48.08-1.968c50.69 4.233 127.4 10.7 207.6-69.56c80.27-80.28 73.82-156.9 69.56-207.7C436.2 171.8 434.7 153.7 439.9 144.6zM398.4 120.5c-12.87 22.09-10.67 48.41-8.326 76.25c4.155 49.3 8.841 105.2-55.67 169.7c-64.53 64.49-120.5 59.78-169.7 55.68c-27.85-2.328-54.12-4.53-76.26 8.311c-6.139 3.64-19.17 1.031-29.58-9.451c-10.39-10.33-12.95-23.35-9.372-29.49c12.87-22.09 10.67-48.41 8.326-76.25C53.72 265.1 49.04 210.1 113.5 145.5c48.27-48.27 91.71-57.8 131.2-57.8c13.28 0 26.12 1.078 38.52 2.125c27.9 2.359 54.17 4.561 76.26-8.311c6.123-3.577 19.18-1.031 29.49 9.357C399.4 101.2 402 114.4 398.4 120.5zM239.5 124.1c2.156 8.561-3.062 17.25-11.62 19.43C183.6 154.7 122.7 215.6 111.6 259.9C109.7 267.1 103.2 271.1 96.05 271.1c-1.281 0-2.593-.1562-3.905-.4687C83.58 269.3 78.4 260.6 80.52 252.1C94.67 195.8 163.8 126.7 220.1 112.5C228.8 110.4 237.3 115.5 239.5 124.1z\"],\n    \"life-ring\": [512, 512, [], \"f1cd\", \"M464.1 431C474.3 440.4 474.3 455.6 464.1 464.1C455.6 474.3 440.4 474.3 431 464.1L419.3 453.2C374.9 489.9 318.1 512 256 512C193.9 512 137.1 489.9 92.74 453.2L80.97 464.1C71.6 474.3 56.4 474.3 47.03 464.1C37.66 455.6 37.66 440.4 47.03 431L58.8 419.3C22.08 374.9 0 318.1 0 256C0 193.9 22.08 137.1 58.8 92.74L47.03 80.97C37.66 71.6 37.66 56.4 47.03 47.03C56.4 37.66 71.6 37.66 80.97 47.03L92.74 58.8C137.1 22.08 193.9 0 256 0C318.1 0 374.9 22.08 419.3 58.8L431 47.03C440.4 37.66 455.6 37.66 464.1 47.03C474.3 56.4 474.3 71.6 464.1 80.97L453.2 92.74C489.9 137.1 512 193.9 512 256C512 318.1 489.9 374.9 453.2 419.3L464.1 431zM304.8 338.7C290.5 347.2 273.8 352 256 352C238.2 352 221.5 347.2 207.2 338.7L126.9 419.1C162.3 447.2 207.2 464 256 464C304.8 464 349.7 447.2 385.1 419.1L304.8 338.7zM464 256C464 207.2 447.2 162.3 419.1 126.9L338.7 207.2C347.2 221.5 352 238.2 352 256C352 273.8 347.2 290.5 338.7 304.8L419.1 385.1C447.2 349.7 464 304.8 464 256V256zM256 48C207.2 48 162.3 64.8 126.9 92.93L207.2 173.3C221.5 164.8 238.2 160 256 160C273.8 160 290.5 164.8 304.8 173.3L385.1 92.93C349.7 64.8 304.8 48 256 48V48zM173.3 304.8C164.8 290.5 160 273.8 160 256C160 238.2 164.8 221.5 173.3 207.2L92.93 126.9C64.8 162.3 48 207.2 48 256C48 304.8 64.8 349.7 92.93 385.1L173.3 304.8zM256 208C229.5 208 208 229.5 208 256C208 282.5 229.5 304 256 304C282.5 304 304 282.5 304 256C304 229.5 282.5 208 256 208z\"],\n    \"lightbulb\": [384, 512, [128161], \"f0eb\", \"M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z\"],\n    \"map\": [576, 512, [62072, 128506], \"f279\", \"M565.6 36.24C572.1 40.72 576 48.11 576 56V392C576 401.1 569.8 410.9 560.5 414.4L392.5 478.4C387.4 480.4 381.7 480.5 376.4 478.8L192.5 417.5L32.54 478.4C25.17 481.2 16.88 480.2 10.38 475.8C3.882 471.3 0 463.9 0 456V120C0 110 6.15 101.1 15.46 97.57L183.5 33.57C188.6 31.6 194.3 31.48 199.6 33.23L383.5 94.52L543.5 33.57C550.8 30.76 559.1 31.76 565.6 36.24H565.6zM48 421.2L168 375.5V90.83L48 136.5V421.2zM360 137.3L216 89.3V374.7L360 422.7V137.3zM408 421.2L528 375.5V90.83L408 136.5V421.2z\"],\n    \"message\": [512, 512, [\"comment-alt\"], \"f27a\", \"M447.1 0h-384c-35.25 0-64 28.75-64 63.1v287.1c0 35.25 28.75 63.1 64 63.1h96v83.98c0 9.836 11.02 15.55 19.12 9.7l124.9-93.68h144c35.25 0 64-28.75 64-63.1V63.1C511.1 28.75 483.2 0 447.1 0zM464 352c0 8.75-7.25 16-16 16h-160l-80 60v-60H64c-8.75 0-16-7.25-16-16V64c0-8.75 7.25-16 16-16h384c8.75 0 16 7.25 16 16V352z\"],\n    \"money-bill-1\": [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M400 256C400 317.9 349.9 368 288 368C226.1 368 176 317.9 176 256C176 194.1 226.1 144 288 144C349.9 144 400 194.1 400 256zM272 224V288H264C255.2 288 248 295.2 248 304C248 312.8 255.2 320 264 320H312C320.8 320 328 312.8 328 304C328 295.2 320.8 288 312 288H304V208C304 199.2 296.8 192 288 192H272C263.2 192 256 199.2 256 208C256 216.8 263.2 224 272 224zM0 128C0 92.65 28.65 64 64 64H512C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128zM48 176V336C83.35 336 112 364.7 112 400H464C464 364.7 492.7 336 528 336V176C492.7 176 464 147.3 464 112H112C112 147.3 83.35 176 48 176z\"],\n    \"moon\": [512, 512, [127769, 9214], \"f186\", \"M421.6 379.9c-.6641 0-1.35 .0625-2.049 .1953c-11.24 2.143-22.37 3.17-33.32 3.17c-94.81 0-174.1-77.14-174.1-175.5c0-63.19 33.79-121.3 88.73-152.6c8.467-4.812 6.339-17.66-3.279-19.44c-11.2-2.078-29.53-3.746-40.9-3.746C132.3 31.1 32 132.2 32 256c0 123.6 100.1 224 223.8 224c69.04 0 132.1-31.45 173.8-82.93C435.3 389.1 429.1 379.9 421.6 379.9zM255.8 432C158.9 432 80 353 80 256c0-76.32 48.77-141.4 116.7-165.8C175.2 125 163.2 165.6 163.2 207.8c0 99.44 65.13 183.9 154.9 212.8C298.5 428.1 277.4 432 255.8 432z\"],\n    \"newspaper\": [512, 512, [128240], \"f1ea\", \"M456 32h-304C121.1 32 96 57.13 96 88v320c0 13.22-10.77 24-24 24S48 421.2 48 408V112c0-13.25-10.75-24-24-24S0 98.75 0 112v296C0 447.7 32.3 480 72 480h352c48.53 0 88-39.47 88-88v-304C512 57.13 486.9 32 456 32zM464 392c0 22.06-17.94 40-40 40H139.9C142.5 424.5 144 416.4 144 408v-320c0-4.406 3.594-8 8-8h304c4.406 0 8 3.594 8 8V392zM264 272h-64C186.8 272 176 282.8 176 296S186.8 320 200 320h64C277.3 320 288 309.3 288 296S277.3 272 264 272zM408 272h-64C330.8 272 320 282.8 320 296S330.8 320 344 320h64c13.25 0 24-10.75 24-24S421.3 272 408 272zM264 352h-64c-13.25 0-24 10.75-24 24s10.75 24 24 24h64c13.25 0 24-10.75 24-24S277.3 352 264 352zM408 352h-64C330.8 352 320 362.8 320 376s10.75 24 24 24h64c13.25 0 24-10.75 24-24S421.3 352 408 352zM400 112h-192c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64C432 126.3 417.7 112 400 112z\"],\n    \"note-sticky\": [448, 512, [62026, \"sticky-note\"], \"f249\", \"M384 32H64.01C28.66 32 .0085 60.65 .0065 96L0 415.1C-.002 451.3 28.65 480 64 480h232.1c25.46 0 49.88-10.12 67.89-28.12l55.88-55.89C437.9 377.1 448 353.6 448 328.1V96C448 60.8 419.2 32 384 32zM52.69 427.3C50.94 425.6 48 421.8 48 416l.0195-319.1C48.02 87.18 55.2 80 64.02 80H384c8.674 0 16 7.328 16 16v192h-88C281.1 288 256 313.1 256 344v88H64C58.23 432 54.44 429.1 52.69 427.3zM330.1 417.9C322.9 425.1 313.8 429.6 304 431.2V344c0-4.406 3.594-8 8-8h87.23c-1.617 9.812-6.115 18.88-13.29 26.05L330.1 417.9z\"],\n    \"object-group\": [576, 512, [], \"f247\", \"M128 160C128 142.3 142.3 128 160 128H288C305.7 128 320 142.3 320 160V256C320 273.7 305.7 288 288 288H160C142.3 288 128 273.7 128 256V160zM288 320C323.3 320 352 291.3 352 256V224H416C433.7 224 448 238.3 448 256V352C448 369.7 433.7 384 416 384H288C270.3 384 256 369.7 256 352V320H288zM48 115.8C38.18 106.1 32 94.22 32 80C32 53.49 53.49 32 80 32C94.22 32 106.1 38.18 115.8 48H460.2C469 38.18 481.8 32 496 32C522.5 32 544 53.49 544 80C544 94.22 537.8 106.1 528 115.8V396.2C537.8 405 544 417.8 544 432C544 458.5 522.5 480 496 480C481.8 480 469 473.8 460.2 464H115.8C106.1 473.8 94.22 480 80 480C53.49 480 32 458.5 32 432C32 417.8 38.18 405 48 396.2V115.8zM96 125.3V386.7C109.6 391.6 120.4 402.4 125.3 416H450.7C455.6 402.4 466.4 391.6 480 386.7V125.3C466.4 120.4 455.6 109.6 450.7 96H125.3C120.4 109.6 109.6 120.4 96 125.3z\"],\n    \"object-ungroup\": [640, 512, [], \"f248\", \"M64 0C90.86 0 113.9 16.55 123.3 40H324.7C334.1 16.55 357.1 0 384 0C419.3 0 448 28.65 448 64C448 90.86 431.5 113.9 408 123.3V228.7C431.5 238.1 448 261.1 448 288C448 323.3 419.3 352 384 352C357.1 352 334.1 335.5 324.7 312H123.3C113.9 335.5 90.86 352 64 352C28.65 352 0 323.3 0 288C0 261.1 16.55 238.1 40 228.7V123.3C16.55 113.9 0 90.86 0 64C0 28.65 28.65 0 64 0V0zM64 80C72.84 80 80 72.84 80 64C80 56.1 74.28 49.54 66.75 48.24C65.86 48.08 64.94 48 64 48C55.16 48 48 55.16 48 64C48 64.07 48 64.14 48 64.21C48.01 65.07 48.09 65.92 48.24 66.75C49.54 74.28 56.1 80 64 80zM384 48C383.1 48 382.1 48.08 381.2 48.24C373.7 49.54 368 56.1 368 64C368 72.84 375.2 80 384 80C391.9 80 398.5 74.28 399.8 66.75C399.9 65.86 400 64.94 400 64C400 55.16 392.8 48 384 48V48zM324.7 88H123.3C116.9 104 104 116.9 88 123.3V228.7C104 235.1 116.9 247.1 123.3 264H324.7C331.1 247.1 343.1 235.1 360 228.7V123.3C343.1 116.9 331.1 104 324.7 88zM400 288C400 287.1 399.9 286.1 399.8 285.2C398.5 277.7 391.9 272 384 272C375.2 272 368 279.2 368 288C368 295.9 373.7 302.5 381.2 303.8C382.1 303.9 383.1 304 384 304C392.8 304 400 296.8 400 288zM64 272C56.1 272 49.54 277.7 48.24 285.2C48.08 286.1 48 287.1 48 288C48 296.8 55.16 304 64 304L64.22 303.1C65.08 303.1 65.93 303.9 66.75 303.8C74.28 302.5 80 295.9 80 288C80 279.2 72.84 272 64 272zM471.3 248C465.8 235.9 457.8 225.2 448 216.4V200H516.7C526.1 176.5 549.1 160 576 160C611.3 160 640 188.7 640 224C640 250.9 623.5 273.9 600 283.3V388.7C623.5 398.1 640 421.1 640 448C640 483.3 611.3 512 576 512C549.1 512 526.1 495.5 516.7 472H315.3C305.9 495.5 282.9 512 256 512C220.7 512 192 483.3 192 448C192 421.1 208.5 398.1 232 388.7V352H280V388.7C296 395.1 308.9 407.1 315.3 424H516.7C523.1 407.1 535.1 395.1 552 388.7V283.3C535.1 276.9 523.1 264 516.7 248H471.3zM592 224C592 215.2 584.8 208 576 208C575.1 208 574.1 208.1 573.2 208.2C565.7 209.5 560 216.1 560 224C560 232.8 567.2 240 576 240C583.9 240 590.5 234.3 591.8 226.8C591.9 225.9 592 224.9 592 224zM240 448C240 456.8 247.2 464 256 464C256.9 464 257.9 463.9 258.8 463.8C266.3 462.5 272 455.9 272 448C272 439.2 264.8 432 256 432C248.1 432 241.5 437.7 240.2 445.2C240.1 446.1 240 447.1 240 448zM573.2 463.8C574.1 463.9 575.1 464 576 464C584.8 464 592 456.8 592 448C592 447.1 591.9 446.2 591.8 445.3L591.8 445.2C590.5 437.7 583.9 432 576 432C567.2 432 560 439.2 560 448C560 455.9 565.7 462.5 573.2 463.8V463.8z\"],\n    \"paper-plane\": [512, 512, [61913], \"f1d8\", \"M501.6 4.186c-7.594-5.156-17.41-5.594-25.44-1.063L12.12 267.1C4.184 271.7-.5037 280.3 .0431 289.4c.5469 9.125 6.234 17.16 14.66 20.69l153.3 64.38v113.5c0 8.781 4.797 16.84 12.5 21.06C184.1 511 188 512 191.1 512c4.516 0 9.038-1.281 12.99-3.812l111.2-71.46l98.56 41.4c2.984 1.25 6.141 1.875 9.297 1.875c4.078 0 8.141-1.031 11.78-3.094c6.453-3.625 10.88-10.06 11.95-17.38l64-432C513.1 18.44 509.1 9.373 501.6 4.186zM369.3 119.2l-187.1 208.9L78.23 284.7L369.3 119.2zM215.1 444v-49.36l46.45 19.51L215.1 444zM404.8 421.9l-176.6-74.19l224.6-249.5L404.8 421.9z\"],\n    \"paste\": [512, 512, [\"file-clipboard\"], \"f0ea\", \"M502.6 198.6l-61.25-61.25C435.4 131.4 427.3 128 418.8 128H256C220.7 128 191.1 156.7 192 192l.0065 255.1C192 483.3 220.7 512 256 512h192c35.2 0 64-28.8 64-64l.0098-226.7C512 212.8 508.6 204.6 502.6 198.6zM464 448c0 8.836-7.164 16-16 16h-192c-8.838 0-16-7.164-16-16L240 192.1c0-8.836 7.164-16 16-16h128L384 224c0 17.67 14.33 32 32 32h48.01V448zM317.7 96C310.6 68.45 285.8 48 256 48H215.2C211.3 20.93 188.1 0 160 0C131.9 0 108.7 20.93 104.8 48H64c-35.35 0-64 28.65-64 64V384c0 35.34 28.65 64 64 64h96v-48H64c-8.836 0-16-7.164-16-16V112C48 103.2 55.18 96 64 96h16v16c0 17.67 14.33 32 32 32h61.35C190 115.4 220.6 96 256 96H317.7zM160 72c-8.822 0-16-7.176-16-16s7.178-16 16-16s16 7.176 16 16S168.8 72 160 72z\"],\n    \"pen-to-square\": [512, 512, [\"edit\"], \"f044\", \"M373.1 24.97C401.2-3.147 446.8-3.147 474.9 24.97L487 37.09C515.1 65.21 515.1 110.8 487 138.9L289.8 336.2C281.1 344.8 270.4 351.1 258.6 354.5L158.6 383.1C150.2 385.5 141.2 383.1 135 376.1C128.9 370.8 126.5 361.8 128.9 353.4L157.5 253.4C160.9 241.6 167.2 230.9 175.8 222.2L373.1 24.97zM440.1 58.91C431.6 49.54 416.4 49.54 407 58.91L377.9 88L424 134.1L453.1 104.1C462.5 95.6 462.5 80.4 453.1 71.03L440.1 58.91zM203.7 266.6L186.9 325.1L245.4 308.3C249.4 307.2 252.9 305.1 255.8 302.2L390.1 168L344 121.9L209.8 256.2C206.9 259.1 204.8 262.6 203.7 266.6zM200 64C213.3 64 224 74.75 224 88C224 101.3 213.3 112 200 112H88C65.91 112 48 129.9 48 152V424C48 446.1 65.91 464 88 464H360C382.1 464 400 446.1 400 424V312C400 298.7 410.7 288 424 288C437.3 288 448 298.7 448 312V424C448 472.6 408.6 512 360 512H88C39.4 512 0 472.6 0 424V152C0 103.4 39.4 64 88 64H200z\"],\n    \"rectangle-list\": [576, 512, [\"list-alt\"], \"f022\", \"M128 192C110.3 192 96 177.7 96 160C96 142.3 110.3 128 128 128C145.7 128 160 142.3 160 160C160 177.7 145.7 192 128 192zM200 160C200 146.7 210.7 136 224 136H448C461.3 136 472 146.7 472 160C472 173.3 461.3 184 448 184H224C210.7 184 200 173.3 200 160zM200 256C200 242.7 210.7 232 224 232H448C461.3 232 472 242.7 472 256C472 269.3 461.3 280 448 280H224C210.7 280 200 269.3 200 256zM200 352C200 338.7 210.7 328 224 328H448C461.3 328 472 338.7 472 352C472 365.3 461.3 376 448 376H224C210.7 376 200 365.3 200 352zM128 224C145.7 224 160 238.3 160 256C160 273.7 145.7 288 128 288C110.3 288 96 273.7 96 256C96 238.3 110.3 224 128 224zM128 384C110.3 384 96 369.7 96 352C96 334.3 110.3 320 128 320C145.7 320 160 334.3 160 352C160 369.7 145.7 384 128 384zM0 96C0 60.65 28.65 32 64 32H512C547.3 32 576 60.65 576 96V416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H512C520.8 432 528 424.8 528 416V96C528 87.16 520.8 80 512 80H64C55.16 80 48 87.16 48 96z\"],\n    \"rectangle-xmark\": [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M175 175C184.4 165.7 199.6 165.7 208.1 175L255.1 222.1L303 175C312.4 165.7 327.6 165.7 336.1 175C346.3 184.4 346.3 199.6 336.1 208.1L289.9 255.1L336.1 303C346.3 312.4 346.3 327.6 336.1 336.1C327.6 346.3 312.4 346.3 303 336.1L255.1 289.9L208.1 336.1C199.6 346.3 184.4 346.3 175 336.1C165.7 327.6 165.7 312.4 175 303L222.1 255.1L175 208.1C165.7 199.6 165.7 184.4 175 175V175zM0 96C0 60.65 28.65 32 64 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H448C456.8 432 464 424.8 464 416V96C464 87.16 456.8 80 448 80H64C55.16 80 48 87.16 48 96z\"],\n    \"registered\": [512, 512, [174], \"f25d\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464zM352 208c0-44.13-35.88-80-80-80L184 128c-13.25 0-24 10.75-24 24v208c0 13.25 10.75 24 24 24s24-10.75 24-24v-72h59.79l38.46 82.19C310.3 378.9 319 384 328 384c3.438 0 6.875-.7187 10.19-2.25c12-5.625 17.16-19.91 11.56-31.94l-34.87-74.5C337.1 261.1 352 236.3 352 208zM272 240h-64v-64h64c17.66 0 32 14.34 32 32S289.7 240 272 240z\"],\n    \"share-from-square\": [576, 512, [61509, \"share-square\"], \"f14d\", \"M568.5 142.6l-144-135.1c-9.625-9.156-24.81-8.656-33.91 .9687c-9.125 9.625-8.688 24.81 .9687 33.91l100.1 94.56h-163.4C287.5 134.2 249.7 151 221 179.4C192 208.2 176 246.7 176 288v87.1c0 13.25 10.75 23.1 24 23.1S224 389.3 224 376V288c0-28.37 10.94-54.84 30.78-74.5C274.3 194.2 298.9 183 328 184h163.6l-100.1 94.56c-9.656 9.094-10.09 24.28-.9687 33.91c4.719 4.1 11.06 7.531 17.44 7.531c5.906 0 11.84-2.156 16.47-6.562l144-135.1C573.3 172.9 576 166.6 576 160S573.3 147.1 568.5 142.6zM360 384c-13.25 0-24 10.75-24 23.1v47.1c0 4.406-3.594 7.1-8 7.1h-272c-4.406 0-8-3.594-8-7.1V184c0-4.406 3.594-7.1 8-7.1H112c13.25 0 24-10.75 24-23.1s-10.75-23.1-24-23.1H56c-30.88 0-56 25.12-56 55.1v271.1C0 486.9 25.13 512 56 512h272c30.88 0 56-25.12 56-55.1v-47.1C384 394.8 373.3 384 360 384z\"],\n    \"snowflake\": [512, 512, [10054, 10052], \"f2dc\", \"M484.4 294.4c1.715 6.402 .6758 12.89-2.395 18.21s-8.172 9.463-14.57 11.18l-31.46 8.43l32.96 19.03C480.4 357.8 484.4 372.5 477.8 384s-21.38 15.41-32.86 8.783l-32.96-19.03l8.43 31.46c3.432 12.81-4.162 25.96-16.97 29.39s-25.96-4.162-29.39-16.97l-20.85-77.82L280 297.6v84.49l56.97 56.97c9.375 9.375 9.375 24.56 0 33.94C332.3 477.7 326.1 480 320 480s-12.28-2.344-16.97-7.031L280 449.9V488c0 13.25-10.75 24-24 24s-24-10.75-24-24v-38.06l-23.03 23.03c-9.375 9.375-24.56 9.375-33.94 0s-9.375-24.56 0-33.94L232 382.1V297.6l-73.17 42.25l-20.85 77.82c-3.432 12.81-16.58 20.4-29.39 16.97s-20.4-16.58-16.97-29.39l8.43-31.46l-32.96 19.03C55.61 399.4 40.85 395.5 34.22 384s-2.615-26.16 8.859-32.79l32.96-19.03l-31.46-8.43c-12.81-3.432-20.4-16.58-16.97-29.39s16.58-20.4 29.39-16.97l77.82 20.85L208 255.1L134.8 213.8L57.01 234.6C44.2 238 31.05 230.4 27.62 217.6s4.162-25.96 16.97-29.39l31.46-8.432L43.08 160.8C31.61 154.2 27.6 139.5 34.22 128s21.38-15.41 32.86-8.785l32.96 19.03L91.62 106.8C88.18 93.98 95.78 80.83 108.6 77.39s25.96 4.162 29.39 16.97l20.85 77.82L232 214.4V129.9L175 72.97c-9.375-9.375-9.375-24.56 0-33.94s24.56-9.375 33.94 0L232 62.06V24C232 10.75 242.8 0 256 0s24 10.75 24 24v38.06l23.03-23.03c9.375-9.375 24.56-9.375 33.94 0s9.375 24.56 0 33.94L280 129.9v84.49l73.17-42.25l20.85-77.82c3.432-12.81 16.58-20.4 29.39-16.97c6.402 1.715 11.5 5.861 14.57 11.18s4.109 11.81 2.395 18.21l-8.43 31.46l32.96-19.03C456.4 112.6 471.2 116.5 477.8 128s2.615 26.16-8.859 32.78l-32.96 19.03l31.46 8.432c12.81 3.432 20.4 16.58 16.97 29.39s-16.58 20.4-29.39 16.97l-77.82-20.85L304 255.1l73.17 42.25l77.82-20.85C467.8 273.1 480.1 281.6 484.4 294.4z\"],\n    \"square\": [448, 512, [9723, 9724, 61590, 9632], \"f0c8\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM384 80H64C55.16 80 48 87.16 48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80z\"],\n    \"square-caret-down\": [448, 512, [\"caret-square-down\"], \"f150\", \"M320 192H128C118.5 192 109.8 197.7 105.1 206.4C102.2 215.1 103.9 225.3 110.4 232.3l96 104C210.9 341.2 217.3 344 224 344s13.09-2.812 17.62-7.719l96-104c6.469-7 8.188-17.19 4.375-25.91C338.2 197.7 329.5 192 320 192zM384 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM400 416c0 8.82-7.178 16-16 16H64c-8.822 0-16-7.18-16-16V96c0-8.82 7.178-16 16-16h320c8.822 0 16 7.18 16 16V416z\"],\n    \"square-caret-left\": [448, 512, [\"caret-square-left\"], \"f191\", \"M384 32H64C28.66 32 0 60.66 0 96v320c0 35.34 28.66 64 64 64h320c35.34 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM400 416c0 8.82-7.18 16-16 16H64c-8.82 0-16-7.18-16-16V96c0-8.82 7.18-16 16-16h320c8.82 0 16 7.18 16 16V416zM273.6 138c-8.719-3.812-18.91-2.094-25.91 4.375l-104 96C138.8 242.9 136 249.3 136 256s2.812 13.09 7.719 17.62l104 96c7 6.469 17.19 8.188 25.91 4.375C282.3 370.2 288 361.5 288 352V160C288 150.5 282.3 141.8 273.6 138z\"],\n    \"square-caret-right\": [448, 512, [\"caret-square-right\"], \"f152\", \"M200.3 142.4C193.3 135.9 183.1 134.2 174.4 138C165.7 141.8 160 150.5 160 159.1v192C160 361.5 165.7 370.2 174.4 374c8.719 3.812 18.91 2.094 25.91-4.375l104-96C309.2 269.1 312 262.7 312 256s-2.812-13.09-7.719-17.62L200.3 142.4zM384 32H64C28.66 32 0 60.66 0 96v320c0 35.34 28.66 64 64 64h320c35.34 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM400 416c0 8.82-7.18 16-16 16H64c-8.82 0-16-7.18-16-16V96c0-8.82 7.18-16 16-16h320c8.82 0 16 7.18 16 16V416z\"],\n    \"square-caret-up\": [448, 512, [\"caret-square-up\"], \"f151\", \"M241.6 175.7C237.1 170.8 230.7 168 224 168S210.9 170.8 206.4 175.7l-96 104c-6.469 7-8.188 17.19-4.375 25.91C109.8 314.3 118.5 320 127.1 320h192c9.531 0 18.16-5.656 22-14.38c3.813-8.719 2.094-18.91-4.375-25.91L241.6 175.7zM384 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM400 416c0 8.82-7.178 16-16 16H64c-8.822 0-16-7.18-16-16V96c0-8.82 7.178-16 16-16h320c8.822 0 16 7.18 16 16V416z\"],\n    \"square-check\": [448, 512, [9989, 61510, 9745, \"check-square\"], \"f14a\", \"M211.8 339.8C200.9 350.7 183.1 350.7 172.2 339.8L108.2 275.8C97.27 264.9 97.27 247.1 108.2 236.2C119.1 225.3 136.9 225.3 147.8 236.2L192 280.4L300.2 172.2C311.1 161.3 328.9 161.3 339.8 172.2C350.7 183.1 350.7 200.9 339.8 211.8L211.8 339.8zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z\"],\n    \"square-full\": [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11036, 11035], \"f45c\", \"M512 0V512H0V0H512zM464 48H48V464H464V48z\"],\n    \"square-minus\": [448, 512, [61767, \"minus-square\"], \"f146\", \"M312 232C325.3 232 336 242.7 336 256C336 269.3 325.3 280 312 280H136C122.7 280 112 269.3 112 256C112 242.7 122.7 232 136 232H312zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z\"],\n    \"square-plus\": [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M200 344V280H136C122.7 280 112 269.3 112 256C112 242.7 122.7 232 136 232H200V168C200 154.7 210.7 144 224 144C237.3 144 248 154.7 248 168V232H312C325.3 232 336 242.7 336 256C336 269.3 325.3 280 312 280H248V344C248 357.3 237.3 368 224 368C210.7 368 200 357.3 200 344zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z\"],\n    \"star\": [576, 512, [61446, 11088], \"f005\", \"M287.9 0C297.1 0 305.5 5.25 309.5 13.52L378.1 154.8L531.4 177.5C540.4 178.8 547.8 185.1 550.7 193.7C553.5 202.4 551.2 211.9 544.8 218.2L433.6 328.4L459.9 483.9C461.4 492.9 457.7 502.1 450.2 507.4C442.8 512.7 432.1 513.4 424.9 509.1L287.9 435.9L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.9 115.1 483.9L142.2 328.4L31.11 218.2C24.65 211.9 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C270.4 5.249 278.7 0 287.9 0L287.9 0zM287.9 78.95L235.4 187.2C231.9 194.3 225.1 199.3 217.3 200.5L98.98 217.9L184.9 303C190.4 308.5 192.9 316.4 191.6 324.1L171.4 443.7L276.6 387.5C283.7 383.7 292.2 383.7 299.2 387.5L404.4 443.7L384.2 324.1C382.9 316.4 385.5 308.5 391 303L476.9 217.9L358.6 200.5C350.7 199.3 343.9 194.3 340.5 187.2L287.9 78.95z\"],\n    \"star-half\": [576, 512, [61731], \"f089\", \"M293.3 .6123C304.2 3.118 311.9 12.82 311.9 24V408.7C311.9 417.5 307.1 425.7 299.2 429.8L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.1 115.1 483.9L142.2 328.4L31.11 218.3C24.65 211.9 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C271.2 3.46 282.4-1.893 293.3 .6127L293.3 .6123zM263.9 128.4L235.4 187.2C231.9 194.3 225.1 199.3 217.3 200.5L98.98 217.9L184.9 303C190.4 308.5 192.9 316.4 191.6 324.1L171.4 443.7L263.9 394.3L263.9 128.4z\"],\n    \"star-half-stroke\": [576, 512, [\"star-half-alt\"], \"f5c0\", \"M378.1 154.8L531.4 177.5C540.4 178.8 547.8 185.1 550.7 193.7C553.5 202.4 551.2 211.9 544.8 218.2L433.6 328.4L459.9 483.9C461.4 492.9 457.7 502.1 450.2 507.4C442.8 512.7 432.1 513.4 424.9 509.1L287.9 435.9L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.9 115.1 483.9L142.2 328.4L31.11 218.2C24.65 211.9 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C270.4 5.249 278.7 0 287.9 0C297.1 0 305.5 5.25 309.5 13.52L378.1 154.8zM287.1 384.7C291.9 384.7 295.7 385.6 299.2 387.5L404.4 443.7L384.2 324.1C382.9 316.4 385.5 308.5 391 303L476.9 217.9L358.6 200.5C350.7 199.3 343.9 194.3 340.5 187.2L287.1 79.09L287.1 384.7z\"],\n    \"sun\": [512, 512, [9728], \"f185\", \"M505.2 324.8l-47.73-68.78l47.75-68.81c7.359-10.62 8.797-24.12 3.844-36.06c-4.969-11.94-15.52-20.44-28.22-22.72l-82.39-14.88l-14.89-82.41c-2.281-12.72-10.76-23.25-22.69-28.22c-11.97-4.936-25.42-3.498-36.12 3.844L256 54.49L187.2 6.709C176.5-.6016 163.1-2.039 151.1 2.896c-11.92 4.971-20.4 15.5-22.7 28.19l-14.89 82.44L31.15 128.4C18.42 130.7 7.854 139.2 2.9 151.2C-2.051 163.1-.5996 176.6 6.775 187.2l47.73 68.78l-47.75 68.81c-7.359 10.62-8.795 24.12-3.844 36.06c4.969 11.94 15.52 20.44 28.22 22.72l82.39 14.88l14.89 82.41c2.297 12.72 10.78 23.25 22.7 28.22c11.95 4.906 25.44 3.531 36.09-3.844L256 457.5l68.83 47.78C331.3 509.7 338.8 512 346.3 512c4.906 0 9.859-.9687 14.56-2.906c11.92-4.969 20.4-15.5 22.7-28.19l14.89-82.44l82.37-14.88c12.73-2.281 23.3-10.78 28.25-22.75C514.1 348.9 512.6 335.4 505.2 324.8zM456.8 339.2l-99.61 18l-18 99.63L256 399.1L172.8 456.8l-18-99.63l-99.61-18L112.9 255.1L55.23 172.8l99.61-18l18-99.63L256 112.9l83.15-57.75l18.02 99.66l99.61 18L399.1 255.1L456.8 339.2zM256 143.1c-61.85 0-111.1 50.14-111.1 111.1c0 61.85 50.15 111.1 111.1 111.1s111.1-50.14 111.1-111.1C367.1 194.1 317.8 143.1 256 143.1zM256 319.1c-35.28 0-63.99-28.71-63.99-63.99S220.7 192 256 192s63.99 28.71 63.99 63.1S291.3 319.1 256 319.1z\"],\n    \"thumbs-down\": [512, 512, [61576, 128078], \"f165\", \"M128 288V64.03c0-17.67-14.33-31.1-32-31.1H32c-17.67 0-32 14.33-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64C113.7 320 128 305.7 128 288zM481.5 229.1c1.234-5.092 1.875-10.32 1.875-15.64c0-22.7-11.44-43.13-29.28-55.28c.4219-3.015 .6406-6.076 .6406-9.122c0-22.32-11.06-42.6-28.83-54.83c-2.438-34.71-31.47-62.2-66.8-62.2h-52.53c-35.94 0-71.55 11.87-100.3 33.41L169.6 92.93c-6.285 4.71-9.596 11.85-9.596 19.13c0 12.76 10.29 24.04 24.03 24.04c5.013 0 10.07-1.565 14.38-4.811l36.66-27.51c20.48-15.34 45.88-23.81 71.5-23.81h52.53c10.45 0 18.97 8.497 18.97 18.95c0 3.5-1.11 4.94-1.11 9.456c0 26.97 29.77 17.91 29.77 40.64c0 9.254-6.392 10.96-6.392 22.25c0 13.97 10.85 21.95 19.58 23.59c8.953 1.671 15.45 9.481 15.45 18.56c0 13.04-11.39 13.37-11.39 28.91c0 12.54 9.702 23.08 22.36 23.94C456.2 266.1 464 275.2 464 284.1c0 10.43-8.516 18.93-18.97 18.93H307.4c-12.44 0-24 10.02-24 23.1c0 4.038 1.02 8.078 3.066 11.72C304.4 371.7 312 403.8 312 411.2c0 8.044-5.984 20.79-22.06 20.79c-12.53 0-14.27-.9059-24.94-28.07c-24.75-62.91-61.74-99.9-80.98-99.9c-13.8 0-24.02 11.27-24.02 23.99c0 7.041 3.083 14.02 9.016 18.76C238.1 402 211.4 480 289.9 480C333.8 480 360 445 360 411.2c0-12.7-5.328-35.21-14.83-59.33h99.86C481.1 351.9 512 321.9 512 284.1C512 261.8 499.9 241 481.5 229.1z\"],\n    \"thumbs-up\": [512, 512, [61575, 128077], \"f164\", \"M96 191.1H32c-17.67 0-32 14.33-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64c17.67 0 32-14.33 32-31.1V223.1C128 206.3 113.7 191.1 96 191.1zM512 227c0-36.89-30.05-66.92-66.97-66.92h-99.86C354.7 135.1 360 113.5 360 100.8c0-33.8-26.2-68.78-70.06-68.78c-46.61 0-59.36 32.44-69.61 58.5c-31.66 80.5-60.33 66.39-60.33 93.47c0 12.84 10.36 23.99 24.02 23.99c5.256 0 10.55-1.721 14.97-5.26c76.76-61.37 57.97-122.7 90.95-122.7c16.08 0 22.06 12.75 22.06 20.79c0 7.404-7.594 39.55-25.55 71.59c-2.046 3.646-3.066 7.686-3.066 11.72c0 13.92 11.43 23.1 24 23.1h137.6C455.5 208.1 464 216.6 464 227c0 9.809-7.766 18.03-17.67 18.71c-12.66 .8593-22.36 11.4-22.36 23.94c0 15.47 11.39 15.95 11.39 28.91c0 25.37-35.03 12.34-35.03 42.15c0 11.22 6.392 13.03 6.392 22.25c0 22.66-29.77 13.76-29.77 40.64c0 4.515 1.11 5.961 1.11 9.456c0 10.45-8.516 18.95-18.97 18.95h-52.53c-25.62 0-51.02-8.466-71.5-23.81l-36.66-27.51c-4.315-3.245-9.37-4.811-14.38-4.811c-13.85 0-24.03 11.38-24.03 24.04c0 7.287 3.312 14.42 9.596 19.13l36.67 27.52C235 468.1 270.6 480 306.6 480h52.53c35.33 0 64.36-27.49 66.8-62.2c17.77-12.23 28.83-32.51 28.83-54.83c0-3.046-.2187-6.107-.6406-9.122c17.84-12.15 29.28-32.58 29.28-55.28c0-5.311-.6406-10.54-1.875-15.64C499.9 270.1 512 250.2 512 227z\"],\n    \"trash-can\": [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M160 400C160 408.8 152.8 416 144 416C135.2 416 128 408.8 128 400V192C128 183.2 135.2 176 144 176C152.8 176 160 183.2 160 192V400zM240 400C240 408.8 232.8 416 224 416C215.2 416 208 408.8 208 400V192C208 183.2 215.2 176 224 176C232.8 176 240 183.2 240 192V400zM320 400C320 408.8 312.8 416 304 416C295.2 416 288 408.8 288 400V192C288 183.2 295.2 176 304 176C312.8 176 320 183.2 320 192V400zM317.5 24.94L354.2 80H424C437.3 80 448 90.75 448 104C448 117.3 437.3 128 424 128H416V432C416 476.2 380.2 512 336 512H112C67.82 512 32 476.2 32 432V128H24C10.75 128 0 117.3 0 104C0 90.75 10.75 80 24 80H93.82L130.5 24.94C140.9 9.357 158.4 0 177.1 0H270.9C289.6 0 307.1 9.358 317.5 24.94H317.5zM151.5 80H296.5L277.5 51.56C276 49.34 273.5 48 270.9 48H177.1C174.5 48 171.1 49.34 170.5 51.56L151.5 80zM80 432C80 449.7 94.33 464 112 464H336C353.7 464 368 449.7 368 432V128H80V432z\"],\n    \"user\": [448, 512, [62144, 128100], \"f007\", \"M272 304h-96C78.8 304 0 382.8 0 480c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32C448 382.8 369.2 304 272 304zM48.99 464C56.89 400.9 110.8 352 176 352h96c65.16 0 119.1 48.95 127 112H48.99zM224 256c70.69 0 128-57.31 128-128c0-70.69-57.31-128-128-128S96 57.31 96 128C96 198.7 153.3 256 224 256zM224 48c44.11 0 80 35.89 80 80c0 44.11-35.89 80-80 80S144 172.1 144 128C144 83.89 179.9 48 224 48z\"],\n    \"window-maximize\": [512, 512, [128470], \"f2d0\", \"M7.724 65.49C13.36 55.11 21.79 46.47 32 40.56C39.63 36.15 48.25 33.26 57.46 32.33C59.61 32.11 61.79 32 64 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 93.79 .112 91.61 .3306 89.46C1.204 80.85 3.784 72.75 7.724 65.49V65.49zM48 416C48 424.8 55.16 432 64 432H448C456.8 432 464 424.8 464 416V224H48V416z\"],\n    \"window-minimize\": [512, 512, [128469], \"f2d1\", \"M0 456C0 442.7 10.75 432 24 432H488C501.3 432 512 442.7 512 456C512 469.3 501.3 480 488 480H24C10.75 480 0 469.3 0 456z\"],\n    \"window-restore\": [512, 512, [], \"f2d2\", \"M432 48H208C190.3 48 176 62.33 176 80V96H128V80C128 35.82 163.8 0 208 0H432C476.2 0 512 35.82 512 80V304C512 348.2 476.2 384 432 384H416V336H432C449.7 336 464 321.7 464 304V80C464 62.33 449.7 48 432 48zM320 128C355.3 128 384 156.7 384 192V448C384 483.3 355.3 512 320 512H64C28.65 512 0 483.3 0 448V192C0 156.7 28.65 128 64 128H320zM64 464H320C328.8 464 336 456.8 336 448V256H48V448C48 456.8 55.16 464 64 464z\"]\n  };\n\n  bunker(function () {\n    defineIcons('far', icons);\n    defineIcons('fa-regular', icons);\n  });\n\n}());\n(function () {\n  'use strict';\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var PRODUCTION = function () {\n    try {\n      return \"production\" === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce(function (acc, iconName) {\n      var icon = icons[iconName];\n      var expanded = !!icon.icon;\n\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n\n      return acc;\n    }, {});\n  }\n\n  function defineIcons(prefix, icons) {\n    var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _params$skipHooks = params.skipHooks,\n        skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n    var normalized = normalizeIcons(icons);\n\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n\n\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"0\": [320, 512, [], \"30\", \"M160 32.01c-88.37 0-160 71.63-160 160v127.1c0 88.37 71.63 160 160 160s160-71.63 160-160V192C320 103.6 248.4 32.01 160 32.01zM256 320c0 52.93-43.06 96-96 96c-52.93 0-96-43.07-96-96V192c0-52.94 43.07-96 96-96c52.94 0 96 43.06 96 96V320z\"],\n    \"1\": [256, 512, [], \"31\", \"M256 448c0 17.67-14.33 32-32 32H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h64V123.8L49.75 154.6C35.02 164.5 15.19 160.4 5.375 145.8C-4.422 131.1-.4531 111.2 14.25 101.4l96-64c9.828-6.547 22.45-7.187 32.84-1.594C153.5 41.37 160 52.22 160 64.01v352h64C241.7 416 256 430.3 256 448z\"],\n    \"2\": [320, 512, [], \"32\", \"M320 448c0 17.67-14.33 32-32 32H32c-13.08 0-24.83-7.953-29.7-20.09c-4.859-12.12-1.859-26 7.594-35.03l193.6-185.1c31.36-30.17 33.95-80 5.812-113.4c-14.91-17.69-35.86-28.12-58.97-29.38C127.4 95.83 105.3 103.9 88.53 119.9L53.52 151.7c-13.08 11.91-33.33 10.89-45.2-2.172C-3.563 136.5-2.594 116.2 10.48 104.3l34.45-31.3c28.67-27.34 68.39-42.11 108.9-39.88c40.33 2.188 78.39 21.16 104.4 52.03c49.8 59.05 45.2 147.3-10.45 200.8l-136 130H288C305.7 416 320 430.3 320 448z\"],\n    \"3\": [320, 512, [], \"33\", \"M320 344c0 74.98-61.02 136-136 136H103.6c-46.34 0-87.31-29.53-101.1-73.48c-5.594-16.77 3.484-34.88 20.25-40.47c16.75-5.609 34.89 3.484 40.47 20.25c5.922 17.77 22.48 29.7 41.23 29.7H184c39.7 0 72-32.3 72-72s-32.3-72-72-72H80c-13.2 0-25.05-8.094-29.83-20.41C45.39 239.3 48.66 225.3 58.38 216.4l131.4-120.4H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h240c13.2 0 25.05 8.094 29.83 20.41c4.781 12.3 1.516 26.27-8.203 35.19l-131.4 120.4H184C258.1 208 320 269 320 344z\"],\n    \"4\": [384, 512, [], \"34\", \"M384 334.2c0 17.67-14.33 32-32 32h-32v81.78c0 17.67-14.33 32-32 32s-32-14.33-32-32v-81.78H32c-10.97 0-21.17-5.625-27.05-14.89c-5.859-9.266-6.562-20.89-1.875-30.81l128-270.2C138.6 34.33 157.8 27.56 173.7 35.09c15.97 7.562 22.78 26.66 15.22 42.63L82.56 302.2H256V160c0-17.67 14.33-32 32-32s32 14.33 32 32v142.2h32C369.7 302.2 384 316.6 384 334.2z\"],\n    \"5\": [320, 512, [], \"35\", \"M320 344.6c0 74.66-60.73 135.4-135.4 135.4H104.7c-46.81 0-88.22-29.83-103-74.23c-5.594-16.77 3.469-34.89 20.23-40.48c16.83-5.625 34.91 3.469 40.48 20.23c6.078 18.23 23.08 30.48 42.3 30.48h79.95c39.36 0 71.39-32.03 71.39-71.39s-32.03-71.38-71.39-71.38H32c-9.484 0-18.47-4.203-24.56-11.48C1.359 254.5-1.172 244.9 .5156 235.6l32-177.2C35.27 43.09 48.52 32.01 64 32.01l192 .0049c17.67 0 32 14.33 32 32s-14.33 32-32 32H90.73L70.3 209.2h114.3C259.3 209.2 320 269.1 320 344.6z\"],\n    \"6\": [320, 512, [], \"36\", \"M167.7 160.8l64.65-76.06c11.47-13.45 9.812-33.66-3.656-45.09C222.7 34.51 215.3 32.01 208 32.01c-9.062 0-18.06 3.833-24.38 11.29C38.07 214.5 0 245.5 0 320c0 88.22 71.78 160 160 160s160-71.78 160-160C320 234.4 252.3 164.9 167.7 160.8zM160 416c-52.94 0-96-43.06-96-96s43.06-95.1 96-95.1s96 43.06 96 95.1S212.9 416 160 416z\"],\n    \"7\": [320, 512, [], \"37\", \"M315.6 80.14l-224 384c-5.953 10.19-16.66 15.88-27.67 15.88c-5.469 0-11.02-1.406-16.09-4.359c-15.27-8.906-20.42-28.5-11.52-43.77l195.9-335.9H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h256c11.45 0 22.05 6.125 27.75 16.06S321.4 70.23 315.6 80.14z\"],\n    \"8\": [320, 512, [], \"38\", \"M267.5 249.2C290 226.1 304 194.7 304 160c0-70.58-57.42-128-128-128h-32c-70.58 0-128 57.42-128 128c0 34.7 13.99 66.12 36.48 89.19C20.83 272.5 0 309.8 0 352c0 70.58 57.42 128 128 128h64c70.58 0 128-57.42 128-128C320 309.8 299.2 272.5 267.5 249.2zM144 96.01h32c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32c-35.3 0-64-28.7-64-64S108.7 96.01 144 96.01zM192 416H128c-35.3 0-64-28.7-64-64s28.7-64 64-64h64c35.3 0 64 28.7 64 64S227.3 416 192 416z\"],\n    \"9\": [320, 512, [], \"39\", \"M160 32.01c-88.22 0-160 71.78-160 160c0 85.57 67.71 155.1 152.3 159.2l-64.65 76.06c-11.47 13.45-9.812 33.66 3.656 45.09c6 5.125 13.38 7.62 20.72 7.62c9.062 0 18.06-3.823 24.38-11.28C281.9 297.5 320 266.6 320 192C320 103.8 248.2 32.01 160 32.01zM160 288c-52.94 0-96-43.06-96-95.1s43.06-96 96-96s96 43.06 96 96S212.9 288 160 288z\"],\n    \"a\": [384, 512, [97], \"41\", \"M381.5 435.7l-160-384C216.6 39.78 204.9 32.01 192 32.01S167.4 39.78 162.5 51.7l-160 384c-6.797 16.31 .9062 35.05 17.22 41.84c16.38 6.828 35.08-.9219 41.84-17.22l31.8-76.31h197.3l31.8 76.31c5.109 12.28 17.02 19.7 29.55 19.7c4.094 0 8.266-.7969 12.3-2.484C380.6 470.7 388.3 452 381.5 435.7zM119.1 320L192 147.2l72 172.8H119.1z\"],\n    \"address-book\": [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M384 0H96C60.65 0 32 28.65 32 64v384c0 35.35 28.65 64 64 64h288c35.35 0 64-28.65 64-64V64C448 28.65 419.3 0 384 0zM240 128c35.35 0 64 28.65 64 64s-28.65 64-64 64c-35.34 0-64-28.65-64-64S204.7 128 240 128zM336 384h-192C135.2 384 128 376.8 128 368C128 323.8 163.8 288 208 288h64c44.18 0 80 35.82 80 80C352 376.8 344.8 384 336 384zM496 64H480v96h16C504.8 160 512 152.8 512 144v-64C512 71.16 504.8 64 496 64zM496 192H480v96h16C504.8 288 512 280.8 512 272v-64C512 199.2 504.8 192 496 192zM496 320H480v96h16c8.836 0 16-7.164 16-16v-64C512 327.2 504.8 320 496 320z\"],\n    \"address-card\": [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM176 128c35.35 0 64 28.65 64 64s-28.65 64-64 64s-64-28.65-64-64S140.7 128 176 128zM272 384h-192C71.16 384 64 376.8 64 368C64 323.8 99.82 288 144 288h64c44.18 0 80 35.82 80 80C288 376.8 280.8 384 272 384zM496 320h-128C359.2 320 352 312.8 352 304S359.2 288 368 288h128C504.8 288 512 295.2 512 304S504.8 320 496 320zM496 256h-128C359.2 256 352 248.8 352 240S359.2 224 368 224h128C504.8 224 512 231.2 512 240S504.8 256 496 256zM496 192h-128C359.2 192 352 184.8 352 176S359.2 160 368 160h128C504.8 160 512 167.2 512 176S504.8 192 496 192z\"],\n    \"align-center\": [448, 512, [], \"f037\", \"M320 96H128C110.3 96 96 81.67 96 64C96 46.33 110.3 32 128 32H320C337.7 32 352 46.33 352 64C352 81.67 337.7 96 320 96zM416 224H32C14.33 224 0 209.7 0 192C0 174.3 14.33 160 32 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224zM0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480H32C14.33 480 0 465.7 0 448zM320 352H128C110.3 352 96 337.7 96 320C96 302.3 110.3 288 128 288H320C337.7 288 352 302.3 352 320C352 337.7 337.7 352 320 352z\"],\n    \"align-justify\": [448, 512, [], \"f039\", \"M416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96zM416 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288H416C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352zM0 192C0 174.3 14.33 160 32 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H32C14.33 224 0 209.7 0 192zM416 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480z\"],\n    \"align-left\": [448, 512, [], \"f036\", \"M256 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H256C273.7 32 288 46.33 288 64C288 81.67 273.7 96 256 96zM256 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288H256C273.7 288 288 302.3 288 320C288 337.7 273.7 352 256 352zM0 192C0 174.3 14.33 160 32 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H32C14.33 224 0 209.7 0 192zM416 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480z\"],\n    \"align-right\": [448, 512, [], \"f038\", \"M416 96H192C174.3 96 160 81.67 160 64C160 46.33 174.3 32 192 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96zM416 352H192C174.3 352 160 337.7 160 320C160 302.3 174.3 288 192 288H416C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352zM0 192C0 174.3 14.33 160 32 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H32C14.33 224 0 209.7 0 192zM416 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480z\"],\n    \"anchor\": [576, 512, [9875], \"f13d\", \"M352 176C369.7 176 384 190.3 384 208C384 225.7 369.7 240 352 240H320V448H368C421 448 464 405 464 352V345.9L456.1 352.1C447.6 362.3 432.4 362.3 423 352.1C413.7 343.6 413.7 328.4 423 319L479 263C488.4 253.7 503.6 253.7 512.1 263L568.1 319C578.3 328.4 578.3 343.6 568.1 352.1C559.6 362.3 544.4 362.3 535 352.1L528 345.9V352C528 440.4 456.4 512 368 512H208C119.6 512 48 440.4 48 352V345.9L40.97 352.1C31.6 362.3 16.4 362.3 7.029 352.1C-2.343 343.6-2.343 328.4 7.029 319L63.03 263C72.4 253.7 87.6 253.7 96.97 263L152.1 319C162.3 328.4 162.3 343.6 152.1 352.1C143.6 362.3 128.4 362.3 119 352.1L112 345.9V352C112 405 154.1 448 208 448H256V240H224C206.3 240 192 225.7 192 208C192 190.3 206.3 176 224 176H234.9C209 158.8 192 129.4 192 96C192 42.98 234.1 0 288 0C341 0 384 42.98 384 96C384 129.4 366.1 158.8 341.1 176H352zM288 128C305.7 128 320 113.7 320 96C320 78.33 305.7 64 288 64C270.3 64 256 78.33 256 96C256 113.7 270.3 128 288 128z\"],\n    \"angle-down\": [384, 512, [8964], \"f107\", \"M192 384c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L192 306.8l137.4-137.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-160 160C208.4 380.9 200.2 384 192 384z\"],\n    \"angle-left\": [256, 512, [8249], \"f104\", \"M192 448c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l137.4 137.4c12.5 12.5 12.5 32.75 0 45.25C208.4 444.9 200.2 448 192 448z\"],\n    \"angle-right\": [256, 512, [8250], \"f105\", \"M64 448c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L178.8 256L41.38 118.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160c12.5 12.5 12.5 32.75 0 45.25l-160 160C80.38 444.9 72.19 448 64 448z\"],\n    \"angle-up\": [384, 512, [8963], \"f106\", \"M352 352c-8.188 0-16.38-3.125-22.62-9.375L192 205.3l-137.4 137.4c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0l160 160c12.5 12.5 12.5 32.75 0 45.25C368.4 348.9 360.2 352 352 352z\"],\n    \"angles-down\": [384, 512, [\"angle-double-down\"], \"f103\", \"M169.4 278.6C175.6 284.9 183.8 288 192 288s16.38-3.125 22.62-9.375l160-160c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0L192 210.8L54.63 73.38c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25L169.4 278.6zM329.4 265.4L192 402.8L54.63 265.4c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l160 160C175.6 476.9 183.8 480 192 480s16.38-3.125 22.62-9.375l160-160c12.5-12.5 12.5-32.75 0-45.25S341.9 252.9 329.4 265.4z\"],\n    \"angles-left\": [448, 512, [171, \"angle-double-left\"], \"f100\", \"M77.25 256l137.4-137.4c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0l-160 160c-12.5 12.5-12.5 32.75 0 45.25l160 160C175.6 444.9 183.8 448 192 448s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25L77.25 256zM269.3 256l137.4-137.4c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0l-160 160c-12.5 12.5-12.5 32.75 0 45.25l160 160C367.6 444.9 375.8 448 384 448s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25L269.3 256z\"],\n    \"angles-right\": [448, 512, [187, \"angle-double-right\"], \"f101\", \"M246.6 233.4l-160-160c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25L178.8 256l-137.4 137.4c-12.5 12.5-12.5 32.75 0 45.25C47.63 444.9 55.81 448 64 448s16.38-3.125 22.62-9.375l160-160C259.1 266.1 259.1 245.9 246.6 233.4zM438.6 233.4l-160-160c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25L370.8 256l-137.4 137.4c-12.5 12.5-12.5 32.75 0 45.25C239.6 444.9 247.8 448 256 448s16.38-3.125 22.62-9.375l160-160C451.1 266.1 451.1 245.9 438.6 233.4z\"],\n    \"angles-up\": [384, 512, [\"angle-double-up\"], \"f102\", \"M54.63 246.6L192 109.3l137.4 137.4C335.6 252.9 343.8 256 352 256s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25l-160-160c-12.5-12.5-32.75-12.5-45.25 0l-160 160c-12.5 12.5-12.5 32.75 0 45.25S42.13 259.1 54.63 246.6zM214.6 233.4c-12.5-12.5-32.75-12.5-45.25 0l-160 160c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0L192 301.3l137.4 137.4C335.6 444.9 343.8 448 352 448s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25L214.6 233.4z\"],\n    \"ankh\": [320, 512, [9765], \"f644\", \"M296 256h-44.63C272.5 222 288 181.6 288 144C288 55.62 230.8 0 160 0S32 55.62 32 144C32 181.6 47.5 222 68.63 256H24C10.75 256 0 266.8 0 280v32c0 13.25 10.75 24 24 24h96v152C120 501.2 130.8 512 144 512h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32C320 266.8 309.2 256 296 256zM160 80c29.62 0 48 24.5 48 64c0 34.62-27.12 78.12-48 100.9C139.1 222.1 112 178.6 112 144C112 104.5 130.4 80 160 80z\"],\n    \"apple-whole\": [448, 512, [127823, 127822, \"apple-alt\"], \"f5d1\", \"M336 128c-32 0-80.02 16.03-112 32.03c-32.01-16-79.1-32.02-111.1-32.03C32 128 .4134 210.5 .0033 288c-.5313 99.97 63.99 224 159.1 224c32 0 48-16 64-16c16 0 32 16 64 16c96 0 160.4-122.8 159.1-224C447.7 211.6 416 128 336 128zM320 32V0h-32C243.8 0 208 35.82 208 80v32h32C284.2 112 320 76.18 320 32z\"],\n    \"archway\": [512, 512, [], \"f557\", \"M480 32C497.7 32 512 46.33 512 64C512 81.67 497.7 96 480 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H480zM32 128H480V416C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H352V352C352 298.1 309 256 256 256C202.1 256 160 298.1 160 352V480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416V128z\"],\n    \"arrow-down\": [384, 512, [8595], \"f063\", \"M374.6 310.6l-160 160C208.4 476.9 200.2 480 192 480s-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 370.8V64c0-17.69 14.33-31.1 31.1-31.1S224 46.31 224 64v306.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0S387.1 298.1 374.6 310.6z\"],\n    \"arrow-down-1-9\": [512, 512, [\"sort-numeric-asc\", \"sort-numeric-down\"], \"f162\", \"M320 192c0 17.69 14.31 31.1 32 31.1L416 224c17.69 0 32-14.31 32-32s-14.31-32-32-32V63.98c0-11.19-5.844-21.53-15.38-27.34c-9.531-5.781-21.41-6.188-31.34-1.062l-32 16.59c-15.69 8.125-21.81 27.44-13.69 43.13C329.3 106.3 340.4 112.6 352 112.6V160C334.3 160 320 174.3 320 192zM392 255.6c-48.6 0-88 39.4-88 88c0 36.44 22.15 67.7 53.71 81.07l-7.682 8.004c-10.72 11.16-10.34 28.88 .8125 39.56C356.3 477.4 363.3 480 370.2 480c7.344 0 14.72-2.875 20.19-8.625c69.61-72.53 89.6-85.39 89.6-127.8C480 294.1 440.6 255.6 392 255.6zM392 367.6c-13.23 0-24-10.77-24-24s10.77-24 24-24s24 10.77 24 24S405.2 367.6 392 367.6zM216 320.3c-8.672 0-17.3 3.5-23.61 10.38L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-11.95-13.01-32.2-13.91-45.22-1.969c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C231.5 323.1 223.7 320.3 216 320.3z\"],\n    \"arrow-down-9-1\": [512, 512, [\"sort-numeric-desc\", \"sort-numeric-down-alt\"], \"f886\", \"M216 320.3c-8.672 0-17.3 3.5-23.61 10.38L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-11.95-13.01-32.2-13.91-45.22-1.969c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C231.5 323.1 223.7 320.3 216 320.3zM357.7 201.1l-7.682 8.004c-10.72 11.16-10.34 28.88 .8125 39.56c5.406 5.219 12.41 7.812 19.38 7.812c7.344 0 14.72-2.875 20.19-8.625c69.61-72.53 89.6-85.39 89.6-127.8c0-48.6-39.4-88-88-88s-88 39.4-88 88C303.1 156.4 326.1 187.7 357.7 201.1zM392 96c13.23 0 24 10.77 24 24S405.2 144 392 144S368 133.2 368 120S378.8 96 392 96zM416 416.4v-96.02c0-11.19-5.844-21.53-15.38-27.34c-9.531-5.781-21.41-6.188-31.34-1.062l-32 16.59c-15.69 8.125-21.81 27.44-13.69 43.13C329.3 362.8 340.4 369 352 369v47.41c-17.69 0-32 14.31-32 32s14.31 32 32 32h64c17.69 0 32-14.31 32-32S433.7 416.4 416 416.4z\"],\n    \"arrow-down-a-z\": [512, 512, [\"sort-alpha-asc\", \"sort-alpha-down\"], \"f15d\", \"M239.6 373.1c11.94-13.05 11.06-33.31-1.969-45.27c-13.55-12.42-33.76-10.52-45.22 1.973L160 366.1V64.03c0-17.7-14.33-32.03-32-32.03S96 46.33 96 64.03v302l-32.4-35.39C51.64 317.7 31.39 316.7 18.38 328.7c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0L239.6 373.1zM448 416h-50.75l73.38-73.38c9.156-9.156 11.89-22.91 6.938-34.88S460.9 288 447.1 288H319.1C302.3 288 288 302.3 288 320s14.33 32 32 32h50.75l-73.38 73.38c-9.156 9.156-11.89 22.91-6.938 34.88S307.1 480 319.1 480h127.1C465.7 480 480 465.7 480 448S465.7 416 448 416zM492.6 209.3l-79.99-160.1c-10.84-21.81-46.4-21.81-57.24 0L275.4 209.3c-7.906 15.91-1.5 35.24 14.31 43.19c15.87 7.922 35.04 1.477 42.93-14.4l7.154-14.39h88.43l7.154 14.39c6.174 12.43 23.97 23.87 42.93 14.4C494.1 244.6 500.5 225.2 492.6 209.3zM367.8 167.4L384 134.7l16.22 32.63H367.8z\"],\n    \"arrow-down-long\": [320, 512, [\"long-arrow-down\"], \"f175\", \"M9.375 329.4c12.51-12.51 32.76-12.49 45.25 0L128 402.8V32c0-17.69 14.31-32 32-32s32 14.31 32 32v370.8l73.38-73.38c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-128 128c-12.5 12.5-32.75 12.5-45.25 0l-128-128C-3.125 362.1-3.125 341.9 9.375 329.4z\"],\n    \"arrow-down-short-wide\": [576, 512, [\"sort-amount-desc\", \"sort-amount-down-alt\"], \"f884\", \"M320 224H416c17.67 0 32-14.33 32-32s-14.33-32-32-32h-95.1c-17.67 0-32 14.33-32 32S302.3 224 320 224zM320 352H480c17.67 0 32-14.33 32-32s-14.33-32-32-32h-159.1c-17.67 0-32 14.33-32 32S302.3 352 320 352zM320 96h32c17.67 0 31.1-14.33 31.1-32s-14.33-32-31.1-32h-32c-17.67 0-32 14.33-32 32S302.3 96 320 96zM544 416h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 416 544 416zM192.4 330.7L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-6.312-6.883-14.94-10.38-23.61-10.38c-7.719 0-15.47 2.781-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C224.6 316.8 204.4 317.7 192.4 330.7z\"],\n    \"arrow-down-wide-short\": [576, 512, [\"sort-amount-asc\", \"sort-amount-down\"], \"f160\", \"M416 288h-95.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H416c17.67 0 32-14.33 32-32S433.7 288 416 288zM544 32h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 32 544 32zM352 416h-32c-17.67 0-32 14.33-32 32s14.33 32 32 32h32c17.67 0 31.1-14.33 31.1-32S369.7 416 352 416zM480 160h-159.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H480c17.67 0 32-14.33 32-32S497.7 160 480 160zM192.4 330.7L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-6.312-6.883-14.94-10.38-23.61-10.38c-7.719 0-15.47 2.781-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C224.6 316.8 204.4 317.7 192.4 330.7z\"],\n    \"arrow-down-z-a\": [512, 512, [\"sort-alpha-desc\", \"sort-alpha-down-alt\"], \"f881\", \"M104.4 470.1c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27c-13.02-11.95-33.27-11.04-45.22 1.973L160 366.1V64.03c0-17.7-14.33-32.03-32-32.03S96 46.33 96 64.03v302l-32.4-35.39c-6.312-6.883-14.94-10.39-23.61-10.39c-7.719 0-15.47 2.785-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27L104.4 470.1zM320 96h50.75l-73.38 73.38c-9.156 9.156-11.89 22.91-6.938 34.88s16.63 19.74 29.56 19.74h127.1C465.7 223.1 480 209.7 480 192s-14.33-32-32-32h-50.75l73.38-73.38c9.156-9.156 11.89-22.91 6.938-34.88S460.9 32 447.1 32h-127.1C302.3 32 288 46.31 288 64S302.3 96 320 96zM492.6 433.3l-79.99-160.1c-10.84-21.81-46.4-21.81-57.24 0l-79.99 160.1c-7.906 15.91-1.5 35.24 14.31 43.19c15.87 7.922 35.04 1.477 42.93-14.4l7.154-14.39h88.43l7.154 14.39c6.174 12.43 23.97 23.87 42.93 14.4C494.1 468.6 500.5 449.2 492.6 433.3zM367.8 391.4L384 358.7l16.22 32.63H367.8z\"],\n    \"arrow-left\": [448, 512, [8592], \"f060\", \"M447.1 256C447.1 273.7 433.7 288 416 288H109.3l105.4 105.4c12.5 12.5 12.5 32.75 0 45.25C208.4 444.9 200.2 448 192 448s-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L109.3 224H416C433.7 224 447.1 238.3 447.1 256z\"],\n    \"arrow-left-long\": [512, 512, [\"long-arrow-left\"], \"f177\", \"M9.375 233.4l128-128c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L109.3 224H480c17.69 0 32 14.31 32 32s-14.31 32-32 32H109.3l73.38 73.38c12.5 12.5 12.5 32.75 0 45.25c-12.49 12.49-32.74 12.51-45.25 0l-128-128C-3.125 266.1-3.125 245.9 9.375 233.4z\"],\n    \"arrow-pointer\": [320, 512, [\"mouse-pointer\"], \"f245\", \"M318.4 304.5c-3.531 9.344-12.47 15.52-22.45 15.52h-105l45.15 94.82c9.496 19.94 1.031 43.8-18.91 53.31c-19.95 9.504-43.82 1.035-53.32-18.91L117.3 351.3l-75 88.25c-4.641 5.469-11.37 8.453-18.28 8.453c-2.781 0-5.578-.4844-8.281-1.469C6.281 443.1 0 434.1 0 423.1V56.02c0-9.438 5.531-18.03 14.12-21.91C22.75 30.26 32.83 31.77 39.87 37.99l271.1 240C319.4 284.6 321.1 295.1 318.4 304.5z\"],\n    \"arrow-right\": [448, 512, [8594], \"f061\", \"M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z\"],\n    \"arrow-right-arrow-left\": [512, 512, [8644, \"exchange\"], \"f0ec\", \"M32 176h370.8l-57.38 57.38c-12.5 12.5-12.5 32.75 0 45.25C351.6 284.9 359.8 288 368 288s16.38-3.125 22.62-9.375l112-112c12.5-12.5 12.5-32.75 0-45.25l-112-112c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25L402.8 112H32c-17.69 0-32 14.31-32 32S14.31 176 32 176zM480 336H109.3l57.38-57.38c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0l-112 112c-12.5 12.5-12.5 32.75 0 45.25l112 112C127.6 508.9 135.8 512 144 512s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25L109.3 400H480c17.69 0 32-14.31 32-32S497.7 336 480 336z\"],\n    \"arrow-right-from-bracket\": [512, 512, [\"sign-out\"], \"f08b\", \"M160 416H96c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h64c17.67 0 32-14.33 32-32S177.7 32 160 32H96C42.98 32 0 74.98 0 128v256c0 53.02 42.98 96 96 96h64c17.67 0 32-14.33 32-32S177.7 416 160 416zM502.6 233.4l-128-128c-12.51-12.51-32.76-12.49-45.25 0c-12.5 12.5-12.5 32.75 0 45.25L402.8 224H192C174.3 224 160 238.3 160 256s14.31 32 32 32h210.8l-73.38 73.38c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0l128-128C515.1 266.1 515.1 245.9 502.6 233.4z\"],\n    \"arrow-right-long\": [512, 512, [\"long-arrow-right\"], \"f178\", \"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"],\n    \"arrow-right-to-bracket\": [512, 512, [\"sign-in\"], \"f090\", \"M416 32h-64c-17.67 0-32 14.33-32 32s14.33 32 32 32h64c17.67 0 32 14.33 32 32v256c0 17.67-14.33 32-32 32h-64c-17.67 0-32 14.33-32 32s14.33 32 32 32h64c53.02 0 96-42.98 96-96V128C512 74.98 469 32 416 32zM342.6 233.4l-128-128c-12.51-12.51-32.76-12.49-45.25 0c-12.5 12.5-12.5 32.75 0 45.25L242.8 224H32C14.31 224 0 238.3 0 256s14.31 32 32 32h210.8l-73.38 73.38c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0l128-128C355.1 266.1 355.1 245.9 342.6 233.4z\"],\n    \"arrow-rotate-left\": [512, 512, [8634, \"arrow-left-rotate\", \"arrow-rotate-back\", \"arrow-rotate-backward\", \"undo\"], \"f0e2\", \"M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.86 0-95.19-15.58-134.2-44.86c-14.14-10.59-17-30.66-6.391-44.81c10.61-14.09 30.69-16.97 44.8-6.375c27.84 20.91 61 31.94 95.89 31.94C344.3 415.8 416 344.1 416 256s-71.67-159.8-159.8-159.8C205.9 96.22 158.6 120.3 128.6 160H192c17.67 0 32 14.31 32 32S209.7 224 192 224H48c-17.67 0-32-14.31-32-32V48c0-17.69 14.33-32 32-32s32 14.31 32 32v70.23C122.1 64.58 186.1 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z\"],\n    \"arrow-rotate-right\": [512, 512, [8635, \"arrow-right-rotate\", \"arrow-rotate-forward\", \"redo\"], \"f01e\", \"M496 48V192c0 17.69-14.31 32-32 32H320c-17.69 0-32-14.31-32-32s14.31-32 32-32h63.39c-29.97-39.7-77.25-63.78-127.6-63.78C167.7 96.22 96 167.9 96 256s71.69 159.8 159.8 159.8c34.88 0 68.03-11.03 95.88-31.94c14.22-10.53 34.22-7.75 44.81 6.375c10.59 14.16 7.75 34.22-6.375 44.81c-39.03 29.28-85.36 44.86-134.2 44.86C132.5 479.9 32 379.4 32 256s100.5-223.9 223.9-223.9c69.15 0 134 32.47 176.1 86.12V48c0-17.69 14.31-32 32-32S496 30.31 496 48z\"],\n    \"arrow-trend-down\": [576, 512, [], \"e097\", \"M466.7 352L320 205.3L214.6 310.6C202.1 323.1 181.9 323.1 169.4 310.6L9.372 150.6C-3.124 138.1-3.124 117.9 9.372 105.4C21.87 92.88 42.13 92.88 54.63 105.4L191.1 242.7L297.4 137.4C309.9 124.9 330.1 124.9 342.6 137.4L512 306.7V223.1C512 206.3 526.3 191.1 544 191.1C561.7 191.1 576 206.3 576 223.1V384C576 401.7 561.7 416 544 416H384C366.3 416 352 401.7 352 384C352 366.3 366.3 352 384 352L466.7 352z\"],\n    \"arrow-trend-up\": [576, 512, [], \"e098\", \"M384 160C366.3 160 352 145.7 352 128C352 110.3 366.3 96 384 96H544C561.7 96 576 110.3 576 128V288C576 305.7 561.7 320 544 320C526.3 320 512 305.7 512 288V205.3L342.6 374.6C330.1 387.1 309.9 387.1 297.4 374.6L191.1 269.3L54.63 406.6C42.13 419.1 21.87 419.1 9.372 406.6C-3.124 394.1-3.124 373.9 9.372 361.4L169.4 201.4C181.9 188.9 202.1 188.9 214.6 201.4L320 306.7L466.7 159.1L384 160z\"],\n    \"arrow-turn-down\": [384, 512, [\"level-down\"], \"f149\", \"M342.6 374.6l-128 128C208.4 508.9 200.2 512 191.1 512s-16.38-3.125-22.63-9.375l-127.1-128c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 402.8V80C160 71.19 152.8 64 144 64H32C14.33 64 0 49.69 0 32s14.33-32 32-32h112C188.1 0 224 35.88 224 80v322.8l73.37-73.38c12.5-12.5 32.75-12.5 45.25 0S355.1 362.1 342.6 374.6z\"],\n    \"arrow-turn-up\": [384, 512, [\"level-up\"], \"f148\", \"M342.6 182.6C336.4 188.9 328.2 192 319.1 192s-16.38-3.125-22.62-9.375L224 109.3V432c0 44.13-35.89 80-80 80H32c-17.67 0-32-14.31-32-32s14.33-32 32-32h112C152.8 448 160 440.8 160 432V109.3L86.62 182.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l127.1-128c12.5-12.5 32.75-12.5 45.25 0l128 128C355.1 149.9 355.1 170.1 342.6 182.6z\"],\n    \"arrow-up\": [384, 512, [8593], \"f062\", \"M374.6 246.6C368.4 252.9 360.2 256 352 256s-16.38-3.125-22.62-9.375L224 141.3V448c0 17.69-14.33 31.1-31.1 31.1S160 465.7 160 448V141.3L54.63 246.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0l160 160C387.1 213.9 387.1 234.1 374.6 246.6z\"],\n    \"arrow-up-1-9\": [512, 512, [\"sort-numeric-up\"], \"f163\", \"M320 192c0 17.69 14.31 31.1 32 31.1L416 224c17.69 0 32-14.31 32-32s-14.31-32-32-32V63.98c0-11.19-5.844-21.53-15.38-27.34c-9.531-5.781-21.41-6.188-31.34-1.062l-32 16.59c-15.69 8.125-21.81 27.44-13.69 43.13C329.3 106.3 340.4 112.6 352 112.6V160C334.3 160 320 174.3 320 192zM392 255.6c-48.6 0-88 39.4-88 88c0 36.44 22.15 67.7 53.71 81.07l-7.682 8.004c-10.72 11.16-10.34 28.88 .8125 39.56C356.3 477.4 363.3 480 370.2 480c7.344 0 14.72-2.875 20.19-8.625c69.61-72.53 89.6-85.39 89.6-127.8C480 294.1 440.6 255.6 392 255.6zM392 367.6c-13.23 0-24-10.77-24-24s10.77-24 24-24s24 10.77 24 24S405.2 367.6 392 367.6zM39.99 191.7c8.672 0 17.3-3.5 23.61-10.38L96 145.9v302c0 17.7 14.33 32.03 31.1 32.03s32-14.33 32-32.03V145.9L192.4 181.3C204.4 194.3 224.6 195.2 237.6 183.3c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.94c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.475 151.1 5.35 171.3 18.38 183.3C24.52 188.9 32.27 191.7 39.99 191.7z\"],\n    \"arrow-up-9-1\": [512, 512, [\"sort-numeric-up-alt\"], \"f887\", \"M237.6 183.3c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.94c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.475 151.1 5.35 171.3 18.38 183.3c13.02 11.95 33.27 11.04 45.22-1.969L96 145.9v302c0 17.7 14.33 32.03 31.1 32.03s32-14.33 32-32.03V145.9L192.4 181.3c6.312 6.883 14.94 10.38 23.61 10.38C223.7 191.7 231.5 188.9 237.6 183.3zM357.7 201.1l-7.682 8.004c-10.72 11.16-10.34 28.88 .8125 39.56c5.406 5.219 12.41 7.812 19.38 7.812c7.344 0 14.72-2.875 20.19-8.625c69.61-72.53 89.6-85.39 89.6-127.8c0-48.6-39.4-88-88-88s-88 39.4-88 88C303.1 156.4 326.1 187.7 357.7 201.1zM392 96c13.23 0 24 10.77 24 24S405.2 144 392 144S368 133.2 368 120S378.8 96 392 96zM416 416.4v-96.02c0-11.19-5.844-21.53-15.38-27.34c-9.531-5.781-21.41-6.188-31.34-1.062l-32 16.59c-15.69 8.125-21.81 27.44-13.69 43.13C329.3 362.8 340.4 369 352 369v47.41c-17.69 0-32 14.31-32 32s14.31 32 32 32h64c17.69 0 32-14.31 32-32S433.7 416.4 416 416.4z\"],\n    \"arrow-up-a-z\": [512, 512, [\"sort-alpha-up\"], \"f15e\", \"M151.6 41.95c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.473 151.1 5.348 171.4 18.38 183.3c13.02 11.95 33.27 11.04 45.22-1.973L96 145.9v302C96 465.7 110.3 480 128 480S160 465.7 160 447.1V145.9L192.4 181.3c11.46 12.49 31.67 14.39 45.22 1.973c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.95zM448 416h-50.75l73.38-73.38c9.156-9.156 11.89-22.91 6.938-34.88s-16.63-19.86-29.56-19.86H319.1C302.3 287.9 288 302.3 288 320s14.33 32 32 32h50.75l-73.38 73.38c-9.156 9.156-11.89 22.91-6.938 34.88S307.1 480 319.1 480h127.1C465.7 480 480 465.7 480 448S465.7 416 448 416zM492.6 209.3l-79.99-160.1c-10.84-21.81-46.4-21.81-57.24 0L275.4 209.3c-7.906 15.91-1.5 35.24 14.31 43.19c15.87 7.922 35.04 1.477 42.93-14.4l7.154-14.39h88.43l7.154 14.39c6.174 12.43 23.97 23.87 42.93 14.4C494.1 244.6 500.5 225.2 492.6 209.3zM367.8 167.4L384 134.7l16.22 32.63H367.8z\"],\n    \"arrow-up-from-bracket\": [448, 512, [], \"e09a\", \"M384 352v64c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32v-64c0-17.67-14.33-32-32-32s-32 14.33-32 32v64c0 53.02 42.98 96 96 96h256c53.02 0 96-42.98 96-96v-64c0-17.67-14.33-32-32-32S384 334.3 384 352zM201.4 9.375l-128 128c-12.51 12.51-12.49 32.76 0 45.25c12.5 12.5 32.75 12.5 45.25 0L192 109.3V320c0 17.69 14.31 32 32 32s32-14.31 32-32V109.3l73.38 73.38c12.5 12.5 32.75 12.5 45.25 0s12.5-32.75 0-45.25l-128-128C234.1-3.125 213.9-3.125 201.4 9.375z\"],\n    \"arrow-up-long\": [320, 512, [\"long-arrow-up\"], \"f176\", \"M310.6 182.6c-12.51 12.51-32.76 12.49-45.25 0L192 109.3V480c0 17.69-14.31 32-32 32s-32-14.31-32-32V109.3L54.63 182.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l128-128c12.5-12.5 32.75-12.5 45.25 0l128 128C323.1 149.9 323.1 170.1 310.6 182.6z\"],\n    \"arrow-up-right-from-square\": [512, 512, [\"external-link\"], \"f08e\", \"M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM502.6 9.367C496.8 3.578 488.8 0 480 0h-160c-17.67 0-31.1 14.32-31.1 31.1c0 17.67 14.32 31.1 31.99 31.1h82.75L178.7 290.7c-12.5 12.5-12.5 32.76 0 45.26C191.2 348.5 211.5 348.5 224 336l224-226.8V192c0 17.67 14.33 31.1 31.1 31.1S512 209.7 512 192V31.1C512 23.16 508.4 15.16 502.6 9.367z\"],\n    \"arrow-up-short-wide\": [576, 512, [\"sort-amount-up-alt\"], \"f885\", \"M544 416h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 416 544 416zM320 96h32c17.67 0 31.1-14.33 31.1-32s-14.33-32-31.1-32h-32c-17.67 0-32 14.33-32 32S302.3 96 320 96zM320 224H416c17.67 0 32-14.33 32-32s-14.33-32-32-32h-95.1c-17.67 0-32 14.33-32 32S302.3 224 320 224zM320 352H480c17.67 0 32-14.33 32-32s-14.33-32-32-32h-159.1c-17.67 0-32 14.33-32 32S302.3 352 320 352zM151.6 41.95c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.475 151.1 5.35 171.4 18.38 183.3c6.141 5.629 13.89 8.414 21.61 8.414c8.672 0 17.3-3.504 23.61-10.39L96 145.9v302C96 465.7 110.3 480 128 480s32-14.33 32-32.03V145.9L192.4 181.3C204.4 194.3 224.6 195.3 237.6 183.3c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.95z\"],\n    \"arrow-up-wide-short\": [576, 512, [\"sort-amount-up\"], \"f161\", \"M416 288h-95.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H416c17.67 0 32-14.33 32-32S433.7 288 416 288zM352 416h-32c-17.67 0-32 14.33-32 32s14.33 32 32 32h32c17.67 0 31.1-14.33 31.1-32S369.7 416 352 416zM480 160h-159.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H480c17.67 0 32-14.33 32-32S497.7 160 480 160zM544 32h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 32 544 32zM151.6 41.95c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.475 151.1 5.35 171.4 18.38 183.3c6.141 5.629 13.89 8.414 21.61 8.414c8.672 0 17.3-3.504 23.61-10.39L96 145.9v302C96 465.7 110.3 480 128 480s32-14.33 32-32.03V145.9L192.4 181.3C204.4 194.3 224.6 195.3 237.6 183.3c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.95z\"],\n    \"arrow-up-z-a\": [512, 512, [\"sort-alpha-up-alt\"], \"f882\", \"M151.6 41.95c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.473 151.1 5.348 171.4 18.38 183.3c13.02 11.95 33.27 11.04 45.22-1.973L96 145.9v302C96 465.7 110.3 480 128 480S160 465.7 160 447.1V145.9L192.4 181.3c6.312 6.883 14.94 10.39 23.61 10.39c7.719 0 15.47-2.785 21.61-8.414c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.95zM320 96h50.75l-73.38 73.38c-9.156 9.156-11.89 22.91-6.938 34.88s16.63 19.74 29.56 19.74h127.1C465.7 223.1 480 209.7 480 192s-14.33-32-32-32h-50.75l73.38-73.38c9.156-9.156 11.89-22.91 6.938-34.88S460.9 32 447.1 32h-127.1C302.3 32 288 46.31 288 64S302.3 96 320 96zM492.6 433.3l-79.99-160.1c-10.84-21.81-46.4-21.81-57.24 0l-79.99 160.1c-7.906 15.91-1.5 35.24 14.31 43.19c15.87 7.922 35.04 1.477 42.93-14.4l7.154-14.39h88.43l7.154 14.39c6.174 12.43 23.97 23.87 42.93 14.4C494.1 468.6 500.5 449.2 492.6 433.3zM367.8 391.4L384 358.7l16.22 32.63H367.8z\"],\n    \"arrows-left-right\": [512, 512, [\"arrows-h\"], \"f07e\", \"M502.6 278.6l-96 96C400.4 380.9 392.2 384 384 384s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L402.8 288h-293.5l41.38 41.38c12.5 12.5 12.5 32.75 0 45.25C144.4 380.9 136.2 384 128 384s-16.38-3.125-22.62-9.375l-96-96c-12.5-12.5-12.5-32.75 0-45.25l96-96c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L109.3 224h293.5l-41.38-41.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l96 96C515.1 245.9 515.1 266.1 502.6 278.6z\"],\n    \"arrows-rotate\": [512, 512, [128472, \"refresh\", \"sync\"], \"f021\", \"M464 16c-17.67 0-32 14.31-32 32v74.09C392.1 66.52 327.4 32 256 32C161.5 32 78.59 92.34 49.58 182.2c-5.438 16.81 3.797 34.88 20.61 40.28c16.89 5.5 34.88-3.812 40.3-20.59C130.9 138.5 189.4 96 256 96c50.5 0 96.26 24.55 124.4 64H336c-17.67 0-32 14.31-32 32s14.33 32 32 32h128c17.67 0 32-14.31 32-32V48C496 30.31 481.7 16 464 16zM441.8 289.6c-16.92-5.438-34.88 3.812-40.3 20.59C381.1 373.5 322.6 416 256 416c-50.5 0-96.25-24.55-124.4-64H176c17.67 0 32-14.31 32-32s-14.33-32-32-32h-128c-17.67 0-32 14.31-32 32v144c0 17.69 14.33 32 32 32s32-14.31 32-32v-74.09C119.9 445.5 184.6 480 255.1 480c94.45 0 177.4-60.34 206.4-150.2C467.9 313 458.6 294.1 441.8 289.6z\"],\n    \"arrows-up-down\": [256, 512, [\"arrows-v\"], \"f07d\", \"M246.6 361.4C252.9 367.6 256 375.8 256 384s-3.125 16.38-9.375 22.62l-96 96c-12.5 12.5-32.75 12.5-45.25 0l-96-96c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L96 402.8v-293.5L54.63 150.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l96-96c12.5-12.5 32.75-12.5 45.25 0l96 96C252.9 111.6 256 119.8 256 128s-3.125 16.38-9.375 22.62c-12.5 12.5-32.75 12.5-45.25 0L160 109.3v293.5l41.38-41.38C213.9 348.9 234.1 348.9 246.6 361.4z\"],\n    \"arrows-up-down-left-right\": [512, 512, [\"arrows\"], \"f047\", \"M512 255.1c0 8.188-3.125 16.41-9.375 22.66l-72 72C424.4 356.9 416.2 360 408 360c-18.28 0-32-14.95-32-32c0-8.188 3.125-16.38 9.375-22.62L402.8 288H288v114.8l17.38-17.38C311.6 379.1 319.8 376 328 376c18.28 0 32 14.95 32 32c0 8.188-3.125 16.38-9.375 22.62l-72 72C272.4 508.9 264.2 512 256 512s-16.38-3.125-22.62-9.375l-72-72C155.1 424.4 152 416.2 152 408c0-17.05 13.73-32 32-32c8.188 0 16.38 3.125 22.62 9.375L224 402.8V288H109.3l17.38 17.38C132.9 311.6 136 319.8 136 328c0 17.05-13.73 32-32 32c-8.188 0-16.38-3.125-22.62-9.375l-72-72C3.125 272.4 0 264.2 0 255.1s3.125-16.34 9.375-22.59l72-72C87.63 155.1 95.81 152 104 152c18.28 0 32 14.95 32 32c0 8.188-3.125 16.38-9.375 22.62L109.3 224H224V109.3L206.6 126.6C200.4 132.9 192.2 136 184 136c-18.28 0-32-14.95-32-32c0-8.188 3.125-16.38 9.375-22.62l72-72C239.6 3.125 247.8 0 256 0s16.38 3.125 22.62 9.375l72 72C356.9 87.63 360 95.81 360 104c0 17.05-13.73 32-32 32c-8.188 0-16.38-3.125-22.62-9.375L288 109.3V224h114.8l-17.38-17.38C379.1 200.4 376 192.2 376 184c0-17.05 13.73-32 32-32c8.188 0 16.38 3.125 22.62 9.375l72 72C508.9 239.6 512 247.8 512 255.1z\"],\n    \"asterisk\": [448, 512, [10033, 61545], \"2a\", \"M417.1 368c-5.937 10.27-16.69 16-27.75 16c-5.422 0-10.92-1.375-15.97-4.281L256 311.4V448c0 17.67-14.33 32-31.1 32S192 465.7 192 448V311.4l-118.3 68.29C68.67 382.6 63.17 384 57.75 384c-11.06 0-21.81-5.734-27.75-16c-8.828-15.31-3.594-34.88 11.72-43.72L159.1 256L41.72 187.7C26.41 178.9 21.17 159.3 29.1 144C36.63 132.5 49.26 126.7 61.65 128.2C65.78 128.7 69.88 130.1 73.72 132.3L192 200.6V64c0-17.67 14.33-32 32-32S256 46.33 256 64v136.6l118.3-68.29c3.838-2.213 7.939-3.539 12.07-4.051C398.7 126.7 411.4 132.5 417.1 144c8.828 15.31 3.594 34.88-11.72 43.72L288 256l118.3 68.28C421.6 333.1 426.8 352.7 417.1 368z\"],\n    \"at\": [512, 512, [129664, 61946], \"40\", \"M207.8 20.73c-93.45 18.32-168.7 93.66-187 187.1c-27.64 140.9 68.65 266.2 199.1 285.1c19.01 2.888 36.17-12.26 36.17-31.49l.0001-.6631c0-15.74-11.44-28.88-26.84-31.24c-84.35-12.98-149.2-86.13-149.2-174.2c0-102.9 88.61-185.5 193.4-175.4c91.54 8.869 158.6 91.25 158.6 183.2l0 16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-40.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98 .0036c-7.299 0-13.2 4.992-15.12 11.68c-24.85-12.15-54.24-16.38-86.06-5.106c-38.75 13.73-68.12 48.91-73.72 89.64c-9.483 69.01 43.81 128 110.9 128c26.44 0 50.43-9.544 69.59-24.88c24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.3C495.1 107.1 361.2-9.332 207.8 20.73zM239.1 304.3c-26.47 0-48-21.56-48-48.05s21.53-48.05 48-48.05s48 21.56 48 48.05S266.5 304.3 239.1 304.3z\"],\n    \"atom\": [512, 512, [9883], \"f5d2\", \"M256 224C238.4 224 223.1 238.4 223.1 256S238.4 288 256 288c17.63 0 32-14.38 32-32S273.6 224 256 224zM470.2 128c-10.88-19.5-40.51-50.75-116.3-41.88C332.4 34.88 299.6 0 256 0S179.6 34.88 158.1 86.12C82.34 77.38 52.71 108.5 41.83 128c-16.38 29.38-14.91 73.12 25.23 128c-40.13 54.88-41.61 98.63-25.23 128c29.13 52.38 101.6 43.63 116.3 41.88C179.6 477.1 212.4 512 256 512s76.39-34.88 97.9-86.13C368.5 427.6 441 436.4 470.2 384c16.38-29.38 14.91-73.13-25.23-128C485.1 201.1 486.5 157.4 470.2 128zM95.34 352c-4.001-7.25-.1251-24.75 15-48.25c6.876 6.5 14.13 12.87 21.88 19.12c1.625 13.75 4.001 27.13 6.751 40.13C114.3 363.9 99.09 358.6 95.34 352zM132.2 189.1C124.5 195.4 117.2 201.8 110.3 208.2C95.22 184.8 91.34 167.2 95.34 160c3.376-6.125 16.38-11.5 37.88-11.5c1.75 0 3.876 .375 5.751 .375C136.1 162.2 133.8 175.6 132.2 189.1zM256 64c9.502 0 22.25 13.5 33.88 37.25C278.6 105 267.4 109.3 256 114.1C244.6 109.3 233.4 105 222.1 101.2C233.7 77.5 246.5 64 256 64zM256 448c-9.502 0-22.25-13.5-33.88-37.25C233.4 407 244.6 402.7 256 397.9c11.38 4.875 22.63 9.135 33.88 12.89C278.3 434.5 265.5 448 256 448zM256 336c-44.13 0-80.02-35.88-80.02-80S211.9 176 256 176s80.02 35.88 80.02 80S300.1 336 256 336zM416.7 352c-3.626 6.625-19 11.88-43.63 11c2.751-12.1 5.126-26.38 6.751-40.13c7.752-6.25 15-12.63 21.88-19.12C416.8 327.2 420.7 344.8 416.7 352zM401.7 208.2c-6.876-6.5-14.13-12.87-21.88-19.12c-1.625-13.5-3.876-26.88-6.751-40.25c1.875 0 4.001-.375 5.751-.375c21.5 0 34.51 5.375 37.88 11.5C420.7 167.2 416.8 184.8 401.7 208.2z\"],\n    \"audio-description\": [576, 512, [], \"f29e\", \"M170.8 280H213.2L192 237.7L170.8 280zM512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM274.7 349.5C271.3 351.2 267.6 352 264 352c-8.812 0-17.28-4.859-21.5-13.27L233.2 320H150.8l-9.367 18.73c-5.906 11.86-20.31 16.7-32.19 10.73c-11.88-5.938-16.69-20.34-10.75-32.2l72-144c8.125-16.25 34.81-16.25 42.94 0l72 144C291.4 329.1 286.6 343.5 274.7 349.5zM384 352h-56c-13.25 0-24-10.75-24-24v-144C304 170.8 314.8 160 328 160H384c52.94 0 96 43.06 96 96S436.9 352 384 352zM384 208h-32v96h32c26.47 0 48-21.53 48-48S410.5 208 384 208z\"],\n    \"austral-sign\": [448, 512, [], \"e0a9\", \"M325.3 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H352L365.3 320H416C433.7 320 448 334.3 448 352C448 369.7 433.7 384 416 384H392L413.5 435.7C420.3 452 412.6 470.7 396.3 477.5C379.1 484.3 361.3 476.6 354.5 460.3L322.7 384H125.3L93.54 460.3C86.74 476.6 68.01 484.3 51.69 477.5C35.38 470.7 27.66 452 34.46 435.7L56 384H32C14.33 384 0 369.7 0 352C0 334.3 14.33 320 32 320H82.67L96 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H122.7L194.5 51.69C199.4 39.77 211.1 32 224 32C236.9 32 248.6 39.77 253.5 51.69L325.3 224zM256 224L223.1 147.2L191.1 224H256zM165.3 288L151.1 320H296L282.7 288H165.3z\"],\n    \"award\": [384, 512, [], \"f559\", \"M288 358.3c13.98-8.088 17.53-30.04 28.88-41.39c11.35-11.35 33.3-14.88 41.39-28.87c7.98-13.79 .1658-34.54 4.373-50.29C366.7 222.5 383.1 208.5 383.1 192c0-16.5-17.27-30.52-21.34-45.73c-4.207-15.75 3.612-36.5-4.365-50.29c-8.086-13.98-30.03-17.52-41.38-28.87c-11.35-11.35-14.89-33.3-28.87-41.39c-13.79-7.979-34.54-.1637-50.29-4.375C222.5 17.27 208.5 0 192 0C175.5 0 161.5 17.27 146.3 21.34C130.5 25.54 109.8 17.73 95.98 25.7C82 33.79 78.46 55.74 67.11 67.08C55.77 78.43 33.81 81.97 25.72 95.95C17.74 109.7 25.56 130.5 21.35 146.2C17.27 161.5 .0008 175.5 .0008 192c0 16.5 17.27 30.52 21.34 45.73c4.207 15.75-3.615 36.5 4.361 50.29C33.8 302 55.74 305.5 67.08 316.9c11.35 11.35 14.89 33.3 28.88 41.4c13.79 7.979 34.53 .1582 50.28 4.369C161.5 366.7 175.5 384 192 384c16.5 0 30.52-17.27 45.74-21.34C253.5 358.5 274.2 366.3 288 358.3zM112 192c0-44.27 35.81-80 80-80s80 35.73 80 80c0 44.17-35.81 80-80 80S112 236.2 112 192zM1.719 433.2c-3.25 8.188-1.781 17.48 3.875 24.25c5.656 6.75 14.53 9.898 23.12 8.148l45.19-9.035l21.43 42.27C99.46 507 107.6 512 116.7 512c.3438 0 .6641-.0117 1.008-.0273c9.5-.375 17.65-6.082 21.24-14.88l33.58-82.08c-53.71-4.639-102-28.12-138.2-63.95L1.719 433.2zM349.6 351.1c-36.15 35.83-84.45 59.31-138.2 63.95l33.58 82.08c3.594 8.797 11.74 14.5 21.24 14.88C266.6 511.1 266.1 512 267.3 512c9.094 0 17.23-4.973 21.35-13.14l21.43-42.28l45.19 9.035c8.594 1.75 17.47-1.398 23.12-8.148c5.656-6.766 7.125-16.06 3.875-24.25L349.6 351.1z\"],\n    \"b\": [320, 512, [98], \"42\", \"M257.1 242.4C276.1 220.1 288 191.6 288 160c0-70.58-57.42-128-128-128H32c-17.67 0-32 14.33-32 32v384c0 17.67 14.33 32 32 32l160-.0049c70.58 0 128-57.42 128-128C320 305.3 294.6 264.8 257.1 242.4zM64 96.01h96c35.3 0 64 28.7 64 64s-28.7 64-64 64H64V96.01zM192 416H64v-128h128c35.3 0 64 28.7 64 64S227.3 416 192 416z\"],\n    \"baby\": [448, 512, [], \"f77c\", \"M156.8 411.8l31.22-31.22l-60.04-53.09l-52.29 52.28C61.63 393.8 60.07 416.1 72 432l48 64C127.9 506.5 139.9 512 152 512c8.345 0 16.78-2.609 23.97-8c17.69-13.25 21.25-38.33 8-56L156.8 411.8zM224 159.1c44.25 0 79.99-35.75 79.99-79.1S268.3 0 224 0S144 35.75 144 79.1S179.8 159.1 224 159.1zM408.7 145c-12.75-18.12-37.63-22.38-55.76-9.75l-40.63 28.5c-52.63 37-124.1 37-176.8 0l-40.63-28.5C76.84 122.6 51.97 127 39.22 145C26.59 163.1 30.97 188 48.97 200.8l40.63 28.5C101.7 237.7 114.7 244.3 128 250.2L128 288h192l.0002-37.71c13.25-5.867 26.22-12.48 38.34-21.04l40.63-28.5C417.1 188 421.4 163.1 408.7 145zM320 327.4l-60.04 53.09l31.22 31.22L264 448c-13.25 17.67-9.689 42.75 8 56C279.2 509.4 287.6 512 295.1 512c12.16 0 24.19-5.516 32.03-16l48-64c11.94-15.92 10.38-38.2-3.719-52.28L320 327.4z\"],\n    \"baby-carriage\": [512, 512, [\"carriage-baby\"], \"f77d\", \"M255.1 192H.1398C2.741 117.9 41.34 52.95 98.98 14.1C112.2 5.175 129.8 9.784 138.9 22.92L255.1 192zM384 160C384 124.7 412.7 96 448 96H480C497.7 96 512 110.3 512 128C512 145.7 497.7 160 480 160H448V224C448 249.2 442.2 274.2 430.9 297.5C419.7 320.8 403.2 341.9 382.4 359.8C361.6 377.6 336.9 391.7 309.7 401.4C282.5 411 253.4 416 223.1 416C194.6 416 165.5 411 138.3 401.4C111.1 391.7 86.41 377.6 65.61 359.8C44.81 341.9 28.31 320.8 17.05 297.5C5.794 274.2 0 249.2 0 224H384L384 160zM31.1 464C31.1 437.5 53.49 416 79.1 416C106.5 416 127.1 437.5 127.1 464C127.1 490.5 106.5 512 79.1 512C53.49 512 31.1 490.5 31.1 464zM416 464C416 490.5 394.5 512 368 512C341.5 512 320 490.5 320 464C320 437.5 341.5 416 368 416C394.5 416 416 437.5 416 464z\"],\n    \"backward\": [512, 512, [9194], \"f04a\", \"M459.5 71.41l-171.5 142.9v83.45l171.5 142.9C480.1 457.7 512 443.3 512 415.1V96.03C512 68.66 480.1 54.28 459.5 71.41zM203.5 71.41L11.44 231.4c-15.25 12.87-15.25 36.37 0 49.24l192 159.1c20.63 17.12 52.51 2.749 52.51-24.62v-319.9C255.1 68.66 224.1 54.28 203.5 71.41z\"],\n    \"backward-fast\": [512, 512, [9198, \"fast-backward\"], \"f049\", \"M0 415.1V96.03c0-17.67 14.33-31.1 31.1-31.1C49.67 64.03 64 78.36 64 96.03v131.8l171.5-156.5C256.1 54.28 288 68.66 288 96.03v131.9l171.5-156.5C480.1 54.28 512 68.66 512 96.03v319.9c0 27.37-31.88 41.74-52.5 24.62L288 285.2v130.7c0 27.37-31.88 41.74-52.5 24.62L64 285.2v130.7c0 17.67-14.33 31.1-31.1 31.1C14.33 447.1 0 433.6 0 415.1z\"],\n    \"backward-step\": [320, 512, [\"step-backward\"], \"f048\", \"M31.1 64.03c-17.67 0-31.1 14.33-31.1 32v319.9c0 17.67 14.33 32 32 32C49.67 447.1 64 433.6 64 415.1V96.03C64 78.36 49.67 64.03 31.1 64.03zM267.5 71.41l-192 159.1C67.82 237.8 64 246.9 64 256c0 9.094 3.82 18.18 11.44 24.62l192 159.1c20.63 17.12 52.51 2.75 52.51-24.62v-319.9C319.1 68.66 288.1 54.28 267.5 71.41z\"],\n    \"bacon\": [576, 512, [129363], \"f7e5\", \"M29.34 432.5l-18.06-20.15c-9.406-10.47-13.25-25.3-10.31-39.65c2.813-13.71 11.23-24.74 23.09-30.23l68.88-31.94c47.95-22.25 87.64-60.2 114.8-109.8l20.66-37.76c28.77-52.59 70.98-92.93 122.1-116.6l92.75-42.99c14.84-6.812 32.41-3.078 43.69 9.518l34.08 38.01l-104.8 48.56c-55.72 25.83-101.7 69.73-133 127L261.3 266.5c-28.03 51.22-69 90.42-118.5 113.4L29.34 432.5zM564.7 99.68l-21.4-23.87l-113.6 52.68c-49.47 22.94-90.44 62.11-118.5 113.3L289.3 281.9c-31.33 57.27-77.34 101.2-133.1 127l-104.5 48.43l37.43 41.74C96.64 507.5 106.1 512 117.5 512c5.188 0 10.41-1.11 15.33-3.375l92.75-42.99c51.13-23.69 93.34-64.03 122.1-116.6l20.66-37.76c27.11-49.56 66.8-87.5 114.8-109.8l68.88-31.94c11.86-5.486 20.28-16.52 23.09-30.23C577.1 124.1 574.1 110.1 564.7 99.68z\"],\n    \"bacteria\": [640, 512, [], \"e059\", \"M627.3 227.3c9.439-2.781 14.81-12.65 12-22.04c-3.039-10.21-13.57-14.52-22.14-11.95l-11.27 3.33c-8.086-15.15-20.68-27.55-36.4-35.43l2.888-11.06c1.867-7.158-1.9-22.19-17.26-22.19c-7.92 0-15.14 5.288-17.23 13.28l-2.865 10.97c-7.701-.2793-26.9-.6485-48.75 13.63L477.6 157.1c-3.777-3.873-15.44-9.779-25.19-.3691c-7.062 6.822-7.225 18.04-.3711 25.07l9.14 9.373c-11.96 18.85-10.27 28.38-15.88 46.61c-8.023-3.758-11.44-5.943-16.66-5.943c-6.689 0-13.09 3.763-16.13 10.19c-4.188 8.856-.3599 19.42 8.546 23.58l8.797 4.115c-14.91 22.05-34.42 33.57-34.83 33.83l-3.922-8.855C387.2 285.8 376.7 281.7 367.7 285.6c-9 3.959-13.08 14.42-9.115 23.39l4.041 9.127c-16.38 4.559-27.93 4.345-46.15 16.94l-9.996-9.012c-6.969-6.303-18.28-6.33-25.15 1.235c-6.609 7.26-6.053 18.47 1.24 25.04l9.713 8.756c-8.49 14.18-12.74 30.77-11.64 48.17l-11.86 3.512c-9.428 2.793-14.8 12.66-11.99 22.05c2.781 9.385 12.69 14.71 22.15 11.94l11.34-3.359c8.287 15.49 20.99 27.86 36.38 35.57l-2.839 10.85c-2.482 9.477 3.224 19.16 12.75 21.62c9.566 2.482 19.25-3.221 21.72-12.69l2.82-10.78c5.508 .1875 11.11-.1523 16.75-1.102c11.37-1.893 22.23-5.074 33.1-8.24l3.379 9.455c3.305 9.225 13.5 14.11 22.75 10.76c9.266-3.279 14.1-13.41 10.81-22.65l-3.498-9.792c15.41-6.654 30.08-14.46 43.95-23.57l6.321 8.429c5.891 7.84 17.05 9.443 24.93 3.602c7.885-5.863 9.498-16.97 3.617-24.82l-6.457-8.611c12.66-10.78 24.33-22.54 34.96-35.33l8.816 6.413c7.932 5.795 19.07 4.074 24.89-3.855c5.809-7.908 4.072-18.1-3.874-24.77l-8.885-6.465c8.893-13.88 16.54-28.52 22.99-43.91l10.47 3.59c9.334 3.186 19.43-1.719 22.64-10.99c3.211-9.258-1.739-19.35-11.04-22.53l-10.33-3.541c5.744-20.5 9.424-31.81 8.338-49.26L627.3 227.3zM416 416c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32c17.67 0 32 14.33 32 32C448 401.7 433.7 416 416 416zM272.3 226.4c9-3.959 13.08-14.42 9.115-23.39L277.4 193.9c16.38-4.561 27.93-4.345 46.15-16.94l9.996 9.012c6.969 6.301 18.28 6.326 25.15-1.236c6.609-7.26 6.053-18.47-1.24-25.04l-9.713-8.756c8.49-14.18 12.74-30.77 11.64-48.18l11.86-3.511c9.428-2.793 14.8-12.66 11.99-22.05c-2.781-9.385-12.69-14.71-22.15-11.94l-11.34 3.357C341.5 53.13 328.8 40.76 313.4 33.05l2.838-10.85C318.7 12.73 313 3.04 303.5 .5811c-9.566-2.482-19.25 3.222-21.72 12.69l-2.82 10.78C273.4 23.86 267.8 24.2 262.2 25.15C250.8 27.04 239.1 30.22 229.1 33.39L225.7 23.93C222.4 14.71 212.2 9.827 202.1 13.17C193.7 16.45 188.9 26.59 192.2 35.82l3.498 9.793C180.2 52.27 165.6 60.07 151.7 69.19L145.4 60.76C139.5 52.92 128.3 51.32 120.5 57.16C112.6 63.02 110.1 74.13 116.8 81.98l6.457 8.611C110.6 101.4 98.96 113.1 88.34 125.9L79.52 119.5c-7.932-5.795-19.08-4.074-24.89 3.855c-5.809 7.908-4.07 19 3.875 24.77l8.885 6.465C58.5 168.5 50.86 183.1 44.41 198.5L33.93 194.9c-9.334-3.186-19.44 1.721-22.64 10.99C8.086 215.2 13.04 225.3 22.34 228.4l10.33 3.541C26.93 252.5 23.25 263.8 24.33 281.2L12.75 284.7C3.309 287.4-2.061 297.3 .7441 306.7c3.041 10.21 13.57 14.52 22.14 11.95l11.27-3.33c8.086 15.15 20.68 27.55 36.39 35.43l-2.887 11.06c-1.865 7.156 1.902 22.19 17.26 22.19c7.92 0 15.14-5.287 17.23-13.28l2.863-10.97c7.701 .2773 26.9 .6465 48.76-13.63l8.59 8.809c3.777 3.873 15.44 9.779 25.19 .3691c7.062-6.822 7.225-18.04 .3711-25.07l-9.14-9.373c11.96-18.85 10.27-28.38 15.88-46.61c8.025 3.756 11.44 5.943 16.66 5.943c6.689 0 13.09-3.762 16.13-10.19C231.6 261.1 227.8 250.6 218.9 246.4L210.1 242.3C225 220.2 244.5 208.7 244.9 208.5l3.922 8.856C252.8 226.2 263.3 230.3 272.3 226.4zM128 256C110.3 256 96 241.7 96 223.1c0-17.67 14.33-32 32-32c17.67 0 32 14.33 32 32C160 241.7 145.7 256 128 256zM208 160c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C224 152.8 216.8 160 208 160z\"],\n    \"bacterium\": [576, 512, [], \"e05a\", \"M543 102.9c-3.711-12.51-16.92-19.61-29.53-15.92l-15.12 4.48c-11.05-20.65-27.98-37.14-48.5-47.43l3.783-14.46c3.309-12.64-4.299-25.55-16.99-28.83c-12.76-3.309-25.67 4.295-28.96 16.92l-3.76 14.37c-9.947-.3398-26.22 .1016-66.67 11.88l-4.301-12.03c-4.406-12.3-17.1-18.81-30.34-14.34c-12.35 4.371-18.8 17.88-14.41 30.2l4.303 12.04c-20.6 8.889-40.16 19.64-58.69 31.83L225.9 81.01C217.1 70.56 203.1 68.42 192.6 76.21C182.1 84.03 179.9 98.83 187.8 109.3l7.975 10.63C178.8 134.3 163.3 150.3 149.1 167.4L138 159.3C127.5 151.6 112.6 153.9 104.8 164.5c-7.748 10.54-5.428 25.33 5.164 33.03l11.09 8.066C109.2 224.1 98.79 243.7 90.18 264.3l-12.93-4.431c-12.45-4.248-25.92 2.293-30.18 14.65C42.78 286.9 49.38 300.3 61.78 304.6l13.05 4.474c-11.86 42.33-11.02 55.76-10.39 65.93l-15.45 4.566c-12.59 3.709-19.74 16.87-16 29.38c4.053 13.61 18.1 19.36 29.52 15.93l15.02-4.441c10.78 20.21 27.57 36.73 48.53 47.24l-3.852 14.75C119.7 491.1 124.8 512 145.2 512c10.56 0 20.19-7.049 22.98-17.7l3.816-14.63c10.2 .377 35.85 .873 65.01-18.17l11.45 11.74c5.037 5.164 20.59 13.04 33.58 .4922c9.416-9.096 9.633-24.06 .4941-33.43l-12.19-12.5c7.805-12.29 13.56-26.13 16.11-41.4c1.186-7.107 3.082-13.95 5.158-20.7c10.66 4.988 15.16 7.881 22.12 7.881c8.922 0 17.46-5.018 21.51-13.59c5.582-11.8 .4785-25.89-11.4-31.45l-11.73-5.486c20.09-29.62 45.89-44.76 46.44-45.11l5.23 11.81c5.273 11.86 19.19 17.36 31.33 12.1c11.1-5.279 17.44-19.22 12.15-31.18L401.9 258.5c5.438-1.512 10.86-3.078 16.52-4.021c16.8-2.797 31.88-9.459 45.02-18.54l13.33 12.02c9.289 8.395 24.37 8.439 33.54-1.648c8.814-9.68 8.072-24.62-1.654-33.38l-12.95-11.68c11.32-18.9 16.99-41.02 15.52-64.23l15.81-4.681C539.6 128.6 546.7 115.4 543 102.9zM192 368c-26.51 0-48.01-21.49-48.01-48s21.5-48 48.01-48S240.1 293.5 240.1 320S218.6 368 192 368zM272 232c-13.25 0-23.92-10.75-23.92-24c0-13.26 10.67-23.1 23.92-23.1c13.26 0 23.1 10.74 23.1 23.1C295.1 221.3 285.3 232 272 232z\"],\n    \"bag-shopping\": [448, 512, [\"shopping-bag\"], \"f290\", \"M112 112C112 50.14 162.1 0 224 0C285.9 0 336 50.14 336 112V160H400C426.5 160 448 181.5 448 208V416C448 469 405 512 352 512H96C42.98 512 0 469 0 416V208C0 181.5 21.49 160 48 160H112V112zM160 160H288V112C288 76.65 259.3 48 224 48C188.7 48 160 76.65 160 112V160zM136 256C149.3 256 160 245.3 160 232C160 218.7 149.3 208 136 208C122.7 208 112 218.7 112 232C112 245.3 122.7 256 136 256zM312 208C298.7 208 288 218.7 288 232C288 245.3 298.7 256 312 256C325.3 256 336 245.3 336 232C336 218.7 325.3 208 312 208z\"],\n    \"bahai\": [512, 512, [], \"f666\", \"M496.3 202.5l-110-15.38l41.88-104.4c6.625-16.63-11.63-32.25-26.63-22.63L307.5 120l-34.13-107.1C270.6 4.25 263.4 0 255.1 0C248.6 0 241.4 4.25 238.6 12.88L204.5 120L110.5 60.12c-15-9.5-33.22 5.1-26.6 22.63l41.85 104.4L15.71 202.5C-1.789 205-5.915 228.8 9.71 237.2l98.14 52.63l-74.51 83.5c-10.88 12.25-1.78 31 13.35 31c1.25 0 2.657-.25 4.032-.5l108.6-23.63l-4.126 112.5C154.7 504.4 164.1 512 173.6 512c5.125 0 10.38-2.25 14.25-7.25l68.13-88.88l68.23 88.88C327.1 509.8 333.2 512 338.4 512c9.5 0 18.88-7.625 18.38-19.25l-4.032-112.5l108.5 23.63c17.38 3.75 29.25-17.25 17.38-30.5l-74.51-83.5l98.14-52.72C517.9 228.8 513.8 205 496.3 202.5zM338.5 311.6L286.6 300.4l2 53.75l-32.63-42.5l-32.63 42.5l2-53.75L173.5 311.6l35.63-39.87L162.1 246.6L214.7 239.2L194.7 189.4l45 28.63L255.1 166.8l16.25 51.25l45-28.63L297.2 239.2l52.63 7.375l-47 25.13L338.5 311.6z\"],\n    \"baht-sign\": [320, 512, [], \"e0ac\", \"M176 32V64C237.9 64 288 114.1 288 176C288 200.2 280.3 222.6 267.3 240.9C298.9 260.7 320 295.9 320 336C320 397.9 269.9 448 208 448H176V480C176 497.7 161.7 512 144 512C126.3 512 112 497.7 112 480V448H41.74C18.69 448 0 429.3 0 406.3V101.6C0 80.82 16.82 64 37.57 64H112V32C112 14.33 126.3 0 144 0C161.7 0 176 14.33 176 32V32zM112 128H64V224H112V128zM224 176C224 149.5 202.5 128 176 128V224C202.5 224 224 202.5 224 176zM112 288H64V384H112V288zM208 384C234.5 384 256 362.5 256 336C256 309.5 234.5 288 208 288H176V384H208z\"],\n    \"ban\": [512, 512, [128683, \"cancel\"], \"f05e\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM99.5 144.8C77.15 176.1 64 214.5 64 256C64 362 149.1 448 256 448C297.5 448 335.9 434.9 367.2 412.5L99.5 144.8zM448 256C448 149.1 362 64 256 64C214.5 64 176.1 77.15 144.8 99.5L412.5 367.2C434.9 335.9 448 297.5 448 256V256z\"],\n    \"ban-smoking\": [512, 512, [128685, \"smoking-ban\"], \"f54d\", \"M96 304C96 312.8 103.3 320 112 320h117.5l-96-96H112C103.3 224 96 231.3 96 240V304zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 448c-105.9 0-192-86.13-192-192c0-41.38 13.25-79.75 35.75-111.1l267.4 267.4C335.8 434.8 297.4 448 256 448zM301.2 256H384v32h-50.81L301.2 256zM412.3 367.1L365.2 320H400c8.75 0 16-7.25 16-16v-64C416 231.3 408.8 224 400 224h-130.8L144.9 99.75C176.3 77.25 214.6 64 256 64C361.9 64 448 150.1 448 256C448 297.4 434.8 335.8 412.3 367.1zM320.6 128C305 128 292 116.8 289.3 102.1C288.5 98.5 285.3 96 281.5 96h-16.25c-5 0-8.625 4.5-8 9.375C261.9 136.3 288.5 160 320.6 160C336.3 160 349.3 171.3 352 185.9C352.8 189.5 356 192 359.8 192h16.17c5 0 8.708-4.5 7.958-9.375C379.3 151.7 352.8 128 320.6 128z\"],\n    \"bandage\": [640, 512, [129657, \"band-aid\"], \"f462\", \"M480 96H576C611.3 96 640 124.7 640 160V352C640 387.3 611.3 416 576 416H480V96zM448 416H192V96H448V416zM272 184C258.7 184 248 194.7 248 208C248 221.3 258.7 232 272 232C285.3 232 296 221.3 296 208C296 194.7 285.3 184 272 184zM368 232C381.3 232 392 221.3 392 208C392 194.7 381.3 184 368 184C354.7 184 344 194.7 344 208C344 221.3 354.7 232 368 232zM272 280C258.7 280 248 290.7 248 304C248 317.3 258.7 328 272 328C285.3 328 296 317.3 296 304C296 290.7 285.3 280 272 280zM368 328C381.3 328 392 317.3 392 304C392 290.7 381.3 280 368 280C354.7 280 344 290.7 344 304C344 317.3 354.7 328 368 328zM64 96H160V416H64C28.65 416 0 387.3 0 352V160C0 124.7 28.65 96 64 96z\"],\n    \"barcode\": [512, 512, [], \"f02a\", \"M40 32C53.25 32 64 42.75 64 56V456C64 469.3 53.25 480 40 480H24C10.75 480 0 469.3 0 456V56C0 42.75 10.75 32 24 32H40zM128 48V464C128 472.8 120.8 480 112 480C103.2 480 96 472.8 96 464V48C96 39.16 103.2 32 112 32C120.8 32 128 39.16 128 48zM200 32C213.3 32 224 42.75 224 56V456C224 469.3 213.3 480 200 480H184C170.7 480 160 469.3 160 456V56C160 42.75 170.7 32 184 32H200zM296 32C309.3 32 320 42.75 320 56V456C320 469.3 309.3 480 296 480H280C266.7 480 256 469.3 256 456V56C256 42.75 266.7 32 280 32H296zM448 56C448 42.75 458.7 32 472 32H488C501.3 32 512 42.75 512 56V456C512 469.3 501.3 480 488 480H472C458.7 480 448 469.3 448 456V56zM384 48C384 39.16 391.2 32 400 32C408.8 32 416 39.16 416 48V464C416 472.8 408.8 480 400 480C391.2 480 384 472.8 384 464V48z\"],\n    \"bars\": [448, 512, [\"navicon\"], \"f0c9\", \"M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM0 256C0 238.3 14.33 224 32 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H32C14.33 288 0 273.7 0 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z\"],\n    \"bars-progress\": [512, 512, [\"tasks-alt\"], \"f828\", \"M464 64C490.5 64 512 85.49 512 112V176C512 202.5 490.5 224 464 224H48C21.49 224 0 202.5 0 176V112C0 85.49 21.49 64 48 64H464zM448 128H320V160H448V128zM464 288C490.5 288 512 309.5 512 336V400C512 426.5 490.5 448 464 448H48C21.49 448 0 426.5 0 400V336C0 309.5 21.49 288 48 288H464zM192 352V384H448V352H192z\"],\n    \"bars-staggered\": [512, 512, [\"reorder\", \"stream\"], \"f550\", \"M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM64 256C64 238.3 78.33 224 96 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H96C78.33 288 64 273.7 64 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z\"],\n    \"baseball\": [512, 512, [129358, 9918, \"baseball-ball\"], \"f433\", \"M429.6 272.9c0-16.26 16.36-16.81 29.99-16.81l2.931 .0029c16.64 0 33.14 2.056 49.2 5.834C511.7 259.9 512 258 512 256c0-141.4-114.6-256-256-256C253.9 0 251.1 .2578 249.9 .3047c3.658 15.51 6.111 31.34 6.111 47.54c0 6-.2813 12.03-.7813 18C254.6 74.19 247.6 80.5 239.3 80.5c-6.091 0-16.03-4.68-16.03-15.97c0-1.733 .7149-7.153 .7149-16.69c0-15.26-2.389-30.18-6.225-44.69C106.9 19.79 19.5 107.3 3.08 218.3c14.44 3.819 29.38 5.79 44.45 5.79c10.07 0 15.59-.811 17.42-.811c6.229 0 16.49 4.657 16.49 15.99c0 16.11-16.13 16.77-29.73 16.77L48.16 256c-16.33 0-32.25-2.445-47.85-6.109C.2578 251.1 0 253.9 0 256c0 141.4 114.6 256 256 256c2.066 0 4.062-.2578 6.117-.3086C258.5 496.2 256 480.4 256 464.2c0-5.688 .25-11.38 .7187-17.03c.6964-8.538 8.287-14.61 16.49-14.61c7.1 0 15.44 6.938 15.44 15.92c0 2.358-.6524 5.88-.6524 15.72c0 15.25 2.383 30.16 6.209 44.66c110.8-16.63 198.2-104.1 214.7-215c-14.55-3.851-29.59-5.871-44.74-5.871c-10.47 0-16.24 .895-18.13 .895C443.3 288.9 429.6 286.5 429.6 272.9zM238.2 128.9c0 27.78-78.3 108.1-108.6 108.1c-8.612 0-16.01-6.963-16.01-15.98c0-6.002 3.394-11.75 9.163-14.49c80.3-38.08 76.21-94.5 99.39-94.5C234.7 112.8 238.2 124.2 238.2 128.9zM397.5 290.6c0 5.965-3.364 11.68-9.131 14.43c-78.82 37.57-75.92 95-98.94 95c-12.58 0-16.01-11.54-16.01-16.03c0-28 78.29-109.4 108.1-109.4C390.8 274.6 397.5 282.3 397.5 290.6z\"],\n    \"baseball-bat-ball\": [640, 512, [], \"f432\", \"M57.89 397.2c-6.262-8.616-16.02-13.19-25.92-13.19c-23.33 0-31.98 20.68-31.98 32.03c0 6.522 1.987 13.1 6.115 18.78l46.52 64C58.89 507.4 68.64 512 78.55 512c23.29 0 31.97-20.66 31.97-32.03c0-6.522-1.988-13.1-6.115-18.78L57.89 397.2zM496.1 352c-44.13 0-79.72 35.75-79.72 80s35.59 80 79.72 80s79.91-35.75 79.91-80S540.2 352 496.1 352zM640 99.38c0-13.61-4.133-27.34-12.72-39.2l-23.63-32.5c-13.44-18.5-33.77-27.68-54.12-27.68c-13.89 0-27.79 4.281-39.51 12.8L307.8 159.7C262.2 192.8 220.4 230.9 183.4 273.4c-24.22 27.88-59.18 63.99-103.5 99.63l56.34 77.52c53.79-35.39 99.15-55.3 127.1-67.27c51.88-22 101.3-49.87 146.9-82.1l202.3-146.7C630.5 140.4 640 120 640 99.38z\"],\n    \"basket-shopping\": [576, 512, [\"shopping-basket\"], \"f291\", \"M171.7 191.1H404.3L322.7 35.07C316.6 23.31 321.2 8.821 332.9 2.706C344.7-3.409 359.2 1.167 365.3 12.93L458.4 191.1H544C561.7 191.1 576 206.3 576 223.1C576 241.7 561.7 255.1 544 255.1L492.1 463.5C484.1 492 459.4 512 430 512H145.1C116.6 512 91 492 83.88 463.5L32 255.1C14.33 255.1 0 241.7 0 223.1C0 206.3 14.33 191.1 32 191.1H117.6L210.7 12.93C216.8 1.167 231.3-3.409 243.1 2.706C254.8 8.821 259.4 23.31 253.3 35.07L171.7 191.1zM191.1 303.1C191.1 295.1 184.8 287.1 175.1 287.1C167.2 287.1 159.1 295.1 159.1 303.1V399.1C159.1 408.8 167.2 415.1 175.1 415.1C184.8 415.1 191.1 408.8 191.1 399.1V303.1zM271.1 303.1V399.1C271.1 408.8 279.2 415.1 287.1 415.1C296.8 415.1 304 408.8 304 399.1V303.1C304 295.1 296.8 287.1 287.1 287.1C279.2 287.1 271.1 295.1 271.1 303.1zM416 303.1C416 295.1 408.8 287.1 400 287.1C391.2 287.1 384 295.1 384 303.1V399.1C384 408.8 391.2 415.1 400 415.1C408.8 415.1 416 408.8 416 399.1V303.1z\"],\n    \"basketball\": [512, 512, [127936, \"basketball-ball\"], \"f434\", \"M148.7 171.3L64.21 86.83c-28.39 32.16-48.9 71.38-58.3 114.8C19.41 205.4 33.34 208 48 208C86.34 208 121.1 193.9 148.7 171.3zM194.5 171.9L256 233.4l169.2-169.2C380 24.37 320.9 0 256 0C248.6 0 241.2 .4922 233.1 1.113C237.8 16.15 240 31.8 240 48C240 95.19 222.8 138.4 194.5 171.9zM208 48c0-14.66-2.623-28.59-6.334-42.09C158.2 15.31 118.1 35.82 86.83 64.21l84.48 84.48C193.9 121.1 208 86.34 208 48zM171.9 194.5C138.4 222.8 95.19 240 48 240c-16.2 0-31.85-2.236-46.89-6.031C.4922 241.2 0 248.6 0 256c0 64.93 24.37 124 64.21 169.2L233.4 256L171.9 194.5zM317.5 340.1L256 278.6l-169.2 169.2C131.1 487.6 191.1 512 256 512c7.438 0 14.75-.4922 22.03-1.113C274.2 495.8 272 480.2 272 464C272 416.8 289.2 373.6 317.5 340.1zM363.3 340.7l84.48 84.48c28.39-32.16 48.9-71.38 58.3-114.8C492.6 306.6 478.7 304 464 304C425.7 304 390.9 318.1 363.3 340.7zM447.8 86.83L278.6 256l61.52 61.52C373.6 289.2 416.8 272 464 272c16.2 0 31.85 2.236 46.89 6.031C511.5 270.8 512 263.4 512 256C512 191.1 487.6 131.1 447.8 86.83zM304 464c0 14.66 2.623 28.59 6.334 42.09c43.46-9.4 82.67-29.91 114.8-58.3l-84.48-84.48C318.1 390.9 304 425.7 304 464z\"],\n    \"bath\": [512, 512, [128705, \"bathtub\"], \"f2cd\", \"M32 384c0 28.32 12.49 53.52 32 71.09V496C64 504.8 71.16 512 80 512h32C120.8 512 128 504.8 128 496v-15.1h256V496c0 8.836 7.164 16 16 16h32c8.836 0 16-7.164 16-16v-40.9c19.51-17.57 32-42.77 32-71.09V352H32V384zM496 256H96V77.25C95.97 66.45 111 60.23 118.6 67.88L132.4 81.66C123.6 108.6 129.4 134.5 144.2 153.2C137.9 159.5 137.8 169.8 144 176l11.31 11.31c6.248 6.248 16.38 6.248 22.63 0l105.4-105.4c6.248-6.248 6.248-16.38 0-22.63l-11.31-11.31c-6.248-6.248-16.38-6.248-22.63 0C230.7 33.26 204.7 27.55 177.7 36.41L163.9 22.64C149.5 8.25 129.6 0 109.3 0C66.66 0 32 34.66 32 77.25v178.8L16 256C7.164 256 0 263.2 0 272v32C0 312.8 7.164 320 16 320h480c8.836 0 16-7.164 16-16v-32C512 263.2 504.8 256 496 256z\"],\n    \"battery-empty\": [576, 512, [\"battery-0\"], \"f244\", \"M464 96C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176C0 131.8 35.82 96 80 96H464zM64 336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80C71.16 160 64 167.2 64 176V336z\"],\n    \"battery-full\": [576, 512, [128267, \"battery\", \"battery-5\"], \"f240\", \"M448 320H96V192H448V320zM0 176C0 131.8 35.82 96 80 96H464C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176zM80 160C71.16 160 64 167.2 64 176V336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80z\"],\n    \"battery-half\": [576, 512, [\"battery-3\"], \"f242\", \"M288 320H96V192H288V320zM0 176C0 131.8 35.82 96 80 96H464C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176zM80 160C71.16 160 64 167.2 64 176V336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80z\"],\n    \"battery-quarter\": [576, 512, [\"battery-2\"], \"f243\", \"M192 320H96V192H192V320zM0 176C0 131.8 35.82 96 80 96H464C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176zM80 160C71.16 160 64 167.2 64 176V336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80z\"],\n    \"battery-three-quarters\": [576, 512, [\"battery-4\"], \"f241\", \"M352 320H96V192H352V320zM0 176C0 131.8 35.82 96 80 96H464C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176zM80 160C71.16 160 64 167.2 64 176V336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80z\"],\n    \"bed\": [640, 512, [128716], \"f236\", \"M176 288C220.1 288 256 252.1 256 208S220.1 128 176 128S96 163.9 96 208S131.9 288 176 288zM544 128H304C295.2 128 288 135.2 288 144V320H64V48C64 39.16 56.84 32 48 32h-32C7.163 32 0 39.16 0 48v416C0 472.8 7.163 480 16 480h32C56.84 480 64 472.8 64 464V416h512v48c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V224C640 170.1 597 128 544 128z\"],\n    \"bed-pulse\": [640, 512, [\"procedures\"], \"f487\", \"M96 318.3v1.689h1.689C97.12 319.4 96.56 318.9 96 318.3zM176 320c44.13 0 80-35.88 80-79.1s-35.88-79.1-80-79.1S96 195.9 96 240S131.9 320 176 320zM256 318.3C255.4 318.9 254.9 319.4 254.3 320H256V318.3zM544 160h-82.1L450.7 183.9C441.5 203.2 421.8 215.8 400 216c-21.23 0-40.97-12.31-50.3-31.35l-12.08-24.64H304c-8.836 0-16 7.161-16 15.1v175.1L64 352V80.01c0-8.834-7.164-15.1-16-15.1h-32c-8.836 0-16 7.163-16 15.1V496C0 504.8 7.164 512 16 512h32C56.84 512 64 504.8 64 496v-47.1h512V496c0 8.836 7.164 16 16 16h32c8.836 0 16-7.164 16-16V256C640 202.1 597 160 544 160zM624 48.01h-115.2l-24.88-37.31c-2.324-3.48-5.539-6.131-9.158-7.977c-1.172-.6016-2.486-.5508-3.738-.9512C468.8 1.035 466.5 0 464.1 0c-.625 0-1.25 .0254-1.875 .0781c-8.625 .6406-16.25 5.876-19.94 13.7l-42.72 90.81l-21.12-43.12c-4.027-8.223-12.39-13.44-21.54-13.44L208 48.02C199.2 48.01 192 55.18 192 64.02v15.99c0 8.836 7.163 15.1 15.1 16l133.1 .0091l36.46 74.55C382.5 178.8 390.8 184 400 184c9.219-.0781 17.78-5.438 21.72-13.78l45.91-97.52l8.406 12.62C480.5 91.1 487.1 96.01 496 96.01h128c8.836 0 16-7.164 16-16V64.01C640 55.18 632.8 48.01 624 48.01z\"],\n    \"beer-mug-empty\": [512, 512, [\"beer\"], \"f0fc\", \"M432 96H384V64c0-17.67-14.33-32-32-32H64C46.33 32 32 46.33 32 64v352c0 35.35 28.65 64 64 64h224c35.35 0 64-28.65 64-64v-32.08l80.66-35.94C493.5 335.1 512 306.5 512 275V176C512 131.8 476.2 96 432 96zM160 368C160 376.9 152.9 384 144 384S128 376.9 128 368v-224C128 135.1 135.1 128 144 128S160 135.1 160 144V368zM224 368C224 376.9 216.9 384 208 384S192 376.9 192 368v-224C192 135.1 199.1 128 208 128S224 135.1 224 144V368zM288 368c0 8.875-7.125 16-16 16S256 376.9 256 368v-224C256 135.1 263.1 128 272 128S288 135.1 288 144V368zM448 275c0 6.25-3.75 12-9.5 14.62L384 313.9V160h48C440.9 160 448 167.1 448 176V275z\"],\n    \"bell\": [448, 512, [61602, 128276], \"f0f3\", \"M256 32V51.2C329 66.03 384 130.6 384 208V226.8C384 273.9 401.3 319.2 432.5 354.4L439.9 362.7C448.3 372.2 450.4 385.6 445.2 397.1C440 408.6 428.6 416 416 416H32C19.4 416 7.971 408.6 2.809 397.1C-2.353 385.6-.2883 372.2 8.084 362.7L15.5 354.4C46.74 319.2 64 273.9 64 226.8V208C64 130.6 118.1 66.03 192 51.2V32C192 14.33 206.3 0 224 0C241.7 0 256 14.33 256 32H256zM224 512C207 512 190.7 505.3 178.7 493.3C166.7 481.3 160 464.1 160 448H288C288 464.1 281.3 481.3 269.3 493.3C257.3 505.3 240.1 512 224 512z\"],\n    \"bell-concierge\": [512, 512, [128718, \"concierge-bell\"], \"f562\", \"M280 145.3V112h16C309.3 112 320 101.3 320 88S309.3 64 296 64H215.1C202.7 64 192 74.75 192 87.1S202.7 112 215.1 112H232v33.32C119.6 157.3 32 252.4 32 368h448C480 252.4 392.4 157.3 280 145.3zM488 400h-464C10.75 400 0 410.7 0 423.1C0 437.3 10.75 448 23.1 448h464c13.25 0 24-10.75 24-23.1C512 410.7 501.3 400 488 400z\"],\n    \"bell-slash\": [640, 512, [61943, 128277], \"f1f6\", \"M186 120.5C209 85.38 245.4 59.84 288 51.2V32C288 14.33 302.3 .0003 320 .0003C337.7 .0003 352 14.33 352 32V51.2C425 66.03 480 130.6 480 208V226.8C480 273.9 497.3 319.2 528.5 354.4L535.9 362.7C544.3 372.2 546.4 385.6 541.2 397.1C540.1 397.5 540.8 397.1 540.6 398.4L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L186 120.5zM160 226.8V222.1L406.2 416H128C115.4 416 103.1 408.6 98.81 397.1C93.65 385.6 95.71 372.2 104.1 362.7L111.5 354.4C142.7 319.2 160 273.9 160 226.8V226.8zM320 512C303 512 286.7 505.3 274.7 493.3C262.7 481.3 256 464.1 256 448H384C384 464.1 377.3 481.3 365.3 493.3C353.3 505.3 336.1 512 320 512z\"],\n    \"bezier-curve\": [640, 512, [], \"f55b\", \"M352 32C378.5 32 400 53.49 400 80V84H518.4C528.8 62.69 550.7 48 576 48C611.3 48 640 76.65 640 112C640 147.3 611.3 176 576 176C550.7 176 528.8 161.3 518.4 140H451.5C510.4 179.6 550.4 244.1 555.5 320H560C586.5 320 608 341.5 608 368V432C608 458.5 586.5 480 560 480H496C469.5 480 448 458.5 448 432V368C448 341.5 469.5 320 496 320H499.3C493.4 253 450.8 196.6 391.8 170.9C383.1 183.6 368.6 192 352 192H288C271.4 192 256.9 183.6 248.2 170.9C189.2 196.6 146.6 253 140.7 320H144C170.5 320 192 341.5 192 368V432C192 458.5 170.5 480 144 480H80C53.49 480 32 458.5 32 432V368C32 341.5 53.49 320 80 320H84.53C89.56 244.1 129.6 179.6 188.5 140H121.6C111.2 161.3 89.3 176 64 176C28.65 176 0 147.3 0 112C0 76.65 28.65 48 64 48C89.3 48 111.2 62.69 121.6 84H240V80C240 53.49 261.5 32 288 32H352zM296 136H344V88H296V136zM88 376V424H136V376H88zM552 424V376H504V424H552z\"],\n    \"bicycle\": [640, 512, [128690], \"f206\", \"M347.2 32C358.1 32 369.8 38.44 375.4 48.78L473.3 229.1C485.5 226.1 498.5 224 512 224C582.7 224 640 281.3 640 352C640 422.7 582.7 480 512 480C441.3 480 384 422.7 384 352C384 311.1 402.4 276.3 431.1 252.8L409.4 212.7L324.7 356.2C320.3 363.5 312.5 368 304 368H255C247.1 431.1 193.3 480 128 480C57.31 480 0 422.7 0 352C0 281.3 57.31 224 128 224C138.7 224 149.2 225.3 159.2 227.8L185.8 174.7L163.7 144H120C106.7 144 96 133.3 96 120C96 106.7 106.7 96 120 96H176C183.7 96 190.1 99.71 195.5 105.1L222.9 144H372.3L337.7 80H311.1C298.7 80 287.1 69.25 287.1 56C287.1 42.75 298.7 32 311.1 32H347.2zM440 352C440 391.8 472.2 424 512 424C551.8 424 584 391.8 584 352C584 312.2 551.8 280 512 280C508.2 280 504.5 280.3 500.8 280.9L533.1 340.6C539.4 352.2 535.1 366.8 523.4 373.1C511.8 379.4 497.2 375.1 490.9 363.4L458.6 303.7C447 316.5 440 333.4 440 352V352zM108.8 328.6L133.1 280.2C131.4 280.1 129.7 280 127.1 280C88.24 280 55.1 312.2 55.1 352C55.1 391.8 88.24 424 127.1 424C162.3 424 190.9 400.1 198.2 368H133.2C112.1 368 99.81 346.7 108.8 328.6H108.8zM290.3 320L290.4 319.9L217.5 218.7L166.8 320H290.3zM257.4 192L317 274.8L365.9 192H257.4z\"],\n    \"binoculars\": [512, 512, [], \"f1e5\", \"M416 48C416 39.13 408.9 32 400 32h-64C327.1 32 320 39.13 320 48V96h96.04L416 48zM63.88 160.1C61.34 253.9 3.5 274.3 0 404V448c0 17.6 14.4 32 32 32h128c17.6 0 32-14.4 32-32V128H95.88C78.26 128 64.35 142.5 63.88 160.1zM448.1 160.1C447.6 142.5 433.7 128 416.1 128H320v320c0 17.6 14.4 32 32 32h128c17.6 0 32-14.4 32-32v-44C508.5 274.3 450.7 253.9 448.1 160.1zM224 288h64V128H224V288zM176 32h-64C103.1 32 96 39.13 96 48L95.96 96H192V48C192 39.13 184.9 32 176 32z\"],\n    \"biohazard\": [576, 512, [9763], \"f780\", \"M575.5 283.5c-13.13-39.11-39.5-71.98-74.13-92.35c-17.5-10.37-36.25-16.62-55.25-19.87c6-17.75 10-36.49 10-56.24c0-40.99-14.5-80.73-41-112.2c-2.5-3-6.625-3.623-10-1.75c-3.25 1.875-4.75 5.998-3.625 9.748c4.5 13.75 6.625 26.24 6.625 38.49c0 67.73-53.76 122.8-120 122.8s-120-55.11-120-122.8c0-12.12 2.25-24.74 6.625-38.49c1.125-3.75-.375-7.873-3.625-9.748c-3.375-1.873-7.502-1.25-10 1.75C134.7 34.3 120.1 74.04 120.1 115c0 19.75 3.875 38.49 10 56.24C111.2 174.5 92.32 180.8 74.82 191.1c-34.63 20.49-61.01 53.24-74.38 92.35c-1.25 3.75 .25 7.748 3.5 9.748c3.375 2 7.5 1.375 10-1.5c9.377-10.87 19-19.12 29.25-25.12c57.25-33.87 130.8-13.75 163.9 44.99c33.13 58.61 13.38 133.1-43.88 167.8c-10.25 6.123-22 10.37-35.88 13.37c-3.627 .875-6.377 4.25-6.377 8.123c.125 4 2.75 7.248 6.502 7.998c39.75 7.748 80.63 .7495 115.3-19.74c18-10.5 32.88-24.49 45.25-39.99c12.38 15.5 27.38 29.49 45.38 39.99c34.5 20.49 75.51 27.49 115.1 19.74c3.875-.75 6.375-3.998 6.5-7.998c0-3.873-2.625-7.248-6.375-8.123c-13.88-2.873-25.63-7.248-35.75-13.37c-57.38-33.87-77.01-109.2-44-167.8c33.13-58.73 106.6-78.85 164-44.99c10.12 6.123 19.75 14.25 29.13 25.12c2.5 2.875 6.752 3.5 10 1.5C575.4 291.2 576.9 287.2 575.5 283.5zM287.1 320.1c-26.5 0-48-21.49-48-47.99c0-26.49 21.5-47.99 48-47.99c26.5 0 48.01 21.49 48.01 47.99C335.1 298.6 314.5 320.1 287.1 320.1zM385 377.6c1.152 22.77 10.74 44.63 27.22 60.92c47.45-35.44 79.13-90.58 83.1-153.4c-22.58-6.173-45.69-2.743-65.57 8.76C424.7 326.9 408.5 355.1 385 377.6zM253.3 132.6c26.22-6.551 45.37-6.024 69.52 .0254c21.93-9.777 39.07-28.55 47.48-51.75C345 69.98 317.3 63.94 288.1 63.94c-29.18 0-56.96 5.986-82.16 16.84C214.3 103.1 231.4 122.8 253.3 132.6zM163.8 438.5c16.46-16.26 26.03-38.19 27.14-61.01c-23.49-21.59-39.59-50.67-44.71-83.6C126.9 282.7 103.8 278.8 80.67 285.1C84.64 347.9 116.3 403.1 163.8 438.5z\"],\n    \"bitcoin-sign\": [320, 512, [], \"e0b4\", \"M48 32C48 14.33 62.33 0 80 0C97.67 0 112 14.33 112 32V64H144V32C144 14.33 158.3 0 176 0C193.7 0 208 14.33 208 32V64C208 65.54 207.9 67.06 207.7 68.54C254.1 82.21 288 125.1 288 176C288 200.2 280.3 222.6 267.3 240.9C298.9 260.7 320 295.9 320 336C320 397.9 269.9 448 208 448V480C208 497.7 193.7 512 176 512C158.3 512 144 497.7 144 480V448H112V480C112 497.7 97.67 512 80 512C62.33 512 48 497.7 48 480V448H41.74C18.69 448 0 429.3 0 406.3V101.6C0 80.82 16.82 64 37.57 64H48V32zM176 224C202.5 224 224 202.5 224 176C224 149.5 202.5 128 176 128H64V224H176zM64 288V384H208C234.5 384 256 362.5 256 336C256 309.5 234.5 288 208 288H64z\"],\n    \"blender\": [512, 512, [], \"f517\", \"M336 64h158.5L512 0H48C21.49 0 0 21.49 0 48v160C0 234.5 21.49 256 48 256h103.3L160 352h256l17.49-64H336C327.2 288 320 280.8 320 272S327.2 256 336 256h106.1l17.49-64H336C327.2 192 320 184.8 320 176S327.2 160 336 160h132.4l17.49-64H336C327.2 96 320 88.8 320 80S327.2 64 336 64zM64 192V64h69.88L145.5 192H64zM416 384H160c-35.38 0-64 28.62-64 64l-.0001 32c0 17.62 14.38 32 32 32h320c17.62 0 32-14.38 32-32l.0003-32C480 412.6 451.4 384 416 384zM288 480c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S305.6 480 288 480z\"],\n    \"blender-phone\": [576, 512, [], \"f6b6\", \"M158.7 334.1L132.1 271.7C130.2 264.1 123.2 260.7 115.7 261.5l-45 4.374c-17.25-46.87-17.63-99.74 0-147.6l45 4.374C123.2 123.4 130.2 119.1 132.1 112.4l25.75-63.25C161.9 41.76 158.1 33.26 152.1 29.01L112.9 4.887C98.49-3.863 80.12-.4886 68.99 12.01C-23.64 115.6-23.01 271.5 70.99 374.5c9.875 10.75 29.13 12.5 41.75 4.75l39.38-24.12C158.1 350.9 161.7 342.4 158.7 334.1zM479.1 384H224c-35.38 0-63.1 28.62-63.1 63.1l-.0052 32c0 17.62 14.37 31.1 31.1 31.1L511.1 512c17.63 0 32-14.38 32-31.1l.0019-31.1C543.1 412.6 515.4 384 479.1 384zM352 480c-17.63 0-31.1-14.38-31.1-31.1c0-17.62 14.37-31.1 31.1-31.1s31.1 14.38 31.1 31.1C384 465.6 369.6 480 352 480zM399.1 64h158.5L576 .008L191.1 .006l-.0023 351.1h288l17.49-64h-97.49c-8.801 0-16-7.199-16-15.1c0-8.799 7.199-15.1 16-15.1h106.1l17.49-63.1h-123.6c-8.801 0-16-7.199-16-15.1c0-8.799 7.199-15.1 16-15.1h132.4l17.49-63.1h-149.9c-8.801 0-16-7.199-16-15.1C383.1 71.2 391.2 64 399.1 64z\"],\n    \"blog\": [512, 512, [], \"f781\", \"M217.6 96.1c-12.95-.625-24.66 9.156-25.52 22.37C191.2 131.7 201.2 143.1 214.4 143.1c79.53 5.188 148.4 74.09 153.6 153.6c.8281 12.69 11.39 22.43 23.94 22.43c.5156 0 1.047-.0313 1.578-.0625c13.22-.8438 23.25-12.28 22.39-25.5C409.3 191.8 320.3 102.8 217.6 96.1zM224 0C206.3 0 192 14.31 192 32s14.33 32 32 32c123.5 0 224 100.5 224 224c0 17.69 14.33 32 32 32s32-14.31 32-32C512 129.2 382.8 0 224 0zM172.3 226.8C157.7 223.9 144 235.8 144 250.6v50.37c0 10.25 7.127 18.37 16.75 21.1c18.13 6.75 31.26 24.38 31.26 44.1c0 26.5-21.5 47.1-48.01 47.1c-26.5 0-48.01-21.5-48.01-47.1V120c0-13.25-10.75-23.1-24.01-23.1l-48.01 .0076C10.75 96.02 0 106.8 0 120v247.1c0 89.5 82.14 160.2 175 140.7c54.38-11.5 98.27-55.5 109.8-109.7C302.2 316.1 247.8 241.8 172.3 226.8z\"],\n    \"bold\": [384, 512, [], \"f032\", \"M321.1 242.4C340.1 220.1 352 191.6 352 160c0-70.59-57.42-128-128-128L32 32.01c-17.67 0-32 14.31-32 32s14.33 32 32 32h16v320H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h224c70.58 0 128-57.41 128-128C384 305.3 358.6 264.8 321.1 242.4zM112 96.01H224c35.3 0 64 28.72 64 64s-28.7 64-64 64H112V96.01zM256 416H112v-128H256c35.3 0 64 28.71 64 63.1S291.3 416 256 416z\"],\n    \"bolt\": [384, 512, [9889, \"zap\"], \"f0e7\", \"M240.5 224H352C365.3 224 377.3 232.3 381.1 244.7C386.6 257.2 383.1 271.3 373.1 280.1L117.1 504.1C105.8 513.9 89.27 514.7 77.19 505.9C65.1 497.1 60.7 481.1 66.59 467.4L143.5 288H31.1C18.67 288 6.733 279.7 2.044 267.3C-2.645 254.8 .8944 240.7 10.93 231.9L266.9 7.918C278.2-1.92 294.7-2.669 306.8 6.114C318.9 14.9 323.3 30.87 317.4 44.61L240.5 224z\"],\n    \"bolt-lightning\": [384, 512, [], \"e0b7\", \"M381.2 172.8C377.1 164.9 368.9 160 360 160h-156.6l50.84-127.1c2.969-7.375 2.062-15.78-2.406-22.38S239.1 0 232 0h-176C43.97 0 33.81 8.906 32.22 20.84l-32 240C-.7179 267.7 1.376 274.6 5.938 279.8C10.5 285 17.09 288 24 288h146.3l-41.78 194.1c-2.406 11.22 3.469 22.56 14 27.09C145.6 511.4 148.8 512 152 512c7.719 0 15.22-3.75 19.81-10.44l208-304C384.8 190.2 385.4 180.7 381.2 172.8z\"],\n    \"bomb\": [512, 512, [128163], \"f1e2\", \"M440.8 4.994C441.9 1.99 444.8 0 448 0C451.2 0 454.1 1.99 455.2 4.994L469.3 42.67L507 56.79C510 57.92 512 60.79 512 64C512 67.21 510 70.08 507 71.21L469.3 85.33L455.2 123C454.1 126 451.2 128 448 128C444.8 128 441.9 126 440.8 123L426.7 85.33L388.1 71.21C385.1 70.08 384 67.21 384 64C384 60.79 385.1 57.92 388.1 56.79L426.7 42.67L440.8 4.994zM289.4 97.37C301.9 84.88 322.1 84.88 334.6 97.37L363.3 126.1L380.7 108.7C386.9 102.4 397.1 102.4 403.3 108.7C409.6 114.9 409.6 125.1 403.3 131.3L385.9 148.7L414.6 177.4C427.1 189.9 427.1 210.1 414.6 222.6L403.8 233.5C411.7 255.5 416 279.3 416 304C416 418.9 322.9 512 208 512C93.12 512 0 418.9 0 304C0 189.1 93.12 96 208 96C232.7 96 256.5 100.3 278.5 108.3L289.4 97.37zM95.1 296C95.1 238.6 142.6 192 199.1 192H207.1C216.8 192 223.1 184.8 223.1 176C223.1 167.2 216.8 160 207.1 160H199.1C124.9 160 63.1 220.9 63.1 296V304C63.1 312.8 71.16 320 79.1 320C88.84 320 95.1 312.8 95.1 304V296z\"],\n    \"bone\": [576, 512, [129460], \"f5d7\", \"M534.9 267.5C560.1 280 576 305.8 576 334v4.387c0 35.55-23.49 68.35-58.24 75.88c-38.18 8.264-74.96-13.73-86.76-49.14c-.0352-.1035-.0684-.207-.1035-.3125C425.3 347.7 409.6 336 391.6 336H184.4c-17.89 0-33.63 11.57-39.23 28.56L145 365.1c-11.8 35.41-48.58 57.4-86.76 49.14C23.49 406.7 0 373.9 0 338.4v-4.387C0 305.8 15.88 280 41.13 267.5c9.375-4.75 9.375-18.25 0-23C15.88 232 0 206.3 0 178V173.6c0-35.55 23.49-68.35 58.24-75.88c38.18-8.264 74.99 13.82 86.79 49.23C150.7 164.1 166.4 176 184.4 176h207.2c17.89 0 33.63-11.57 39.23-28.56L431 146.9c11.8-35.41 48.58-57.4 86.76-49.14C552.5 105.3 576 138.1 576 173.6v4.387C576 206.3 560.1 232 534.9 244.5C525.5 249.3 525.5 262.8 534.9 267.5z\"],\n    \"bong\": [512, 512, [], \"f55c\", \"M334.5 512c23.12 0 44.38-12.62 56-32.63C406.8 451.2 416 418.8 416 384c0-36.13-10.11-69.75-27.49-98.63l43.5-43.37l9.376 9.375c6.25 6.25 16.38 6.25 22.63 0L475.3 240c6.25-6.25 6.25-16.38 0-22.62l-52.63-52.75c-6.25-6.25-16.38-6.25-22.63 0L388.6 176c-6.25 6.25-6.25 16.38 0 22.62L398 208l-39.38 39.38c-11.5-11.38-24.51-21.25-38.63-29.5l.0067-154.1h16c8.75 0 16-7.25 16-16L352 16.01C352 7.14 344.9 0 336 0L111.1 .1667c-8.75 0-15.99 7.11-15.99 15.99L96 48c0 8.875 7.126 16 16 16h16L128 217.9C70.63 251.1 32 313 32 384c0 34.75 9.252 67.25 25.5 95.38C69.13 499.4 90.38 512 113.5 512H334.5zM152 259.4l23.97-13.87V64.03L272 63.75l.0168 181.8l23.97 13.87C320.7 273.8 340 295.1 352.5 320H95.51C108 295.1 127.3 273.8 152 259.4z\"],\n    \"book\": [448, 512, [128212], \"f02d\", \"M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM143.1 128h192C344.8 128 352 135.2 352 144C352 152.8 344.8 160 336 160H143.1C135.2 160 128 152.8 128 144C128 135.2 135.2 128 143.1 128zM143.1 192h192C344.8 192 352 199.2 352 208C352 216.8 344.8 224 336 224H143.1C135.2 224 128 216.8 128 208C128 199.2 135.2 192 143.1 192zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448z\"],\n    \"book-atlas\": [448, 512, [\"atlas\"], \"f558\", \"M240 97.25C232.3 104.8 219.3 131.8 216.6 176h46.88C260.8 131.8 247.8 104.8 240 97.25zM334.4 176c-5.25-31.25-25.62-57.13-53.25-70.38C288.8 124.6 293.8 149 295.3 176H334.4zM334.4 208h-39.13c-1.5 27-6.5 51.38-14.12 70.38C308.8 265.1 329.1 239.3 334.4 208zM263.4 208H216.5C219.3 252.3 232.3 279.3 240 286.8C247.8 279.3 260.8 252.3 263.4 208zM198.9 105.6C171.3 118.9 150.9 144.8 145.6 176h39.13C186.3 149 191.3 124.6 198.9 105.6zM448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-32c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM240 64c70.75 0 128 57.25 128 128s-57.25 128-128 128s-128-57.25-128-128S169.3 64 240 64zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448zM198.9 278.4C191.3 259.4 186.3 235 184.8 208H145.6C150.9 239.3 171.3 265.1 198.9 278.4z\"],\n    \"book-bible\": [448, 512, [\"bible\"], \"f647\", \"M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM144 144c0-8.875 7.125-15.1 16-15.1L208 128V80c0-8.875 7.125-15.1 16-15.1l32 .0009c8.875 0 16 7.12 16 15.1V128L320 128c8.875 0 16 7.121 16 15.1v32c0 8.875-7.125 16-16 16L272 192v112c0 8.875-7.125 16-16 16l-32-.0002c-8.875 0-16-7.127-16-16V192L160 192c-8.875 0-16-7.127-16-16V144zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448z\"],\n    \"book-journal-whills\": [448, 512, [\"journal-whills\"], \"f66a\", \"M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM133.1 160.4l21.25 21.25c3.125 3.125 8.125 3.125 11.25 0s3.125-8.125 0-11.25l-26.38-26.5c10-20.75 26.25-38 46.38-49.25c-17 27.12-11 62.75 14 82.63C185.5 192 180.5 213.1 186.5 232.5c5.875 19.38 22 34.13 41.88 38.25l1.375-32.75L219.4 245.1C218.8 245.5 217.9 245.8 217.1 245.8c-1 0-2-.375-2.75-1c-.75-.875-1.25-1.875-1.25-3c0-.625 .25-1.375 .5-2L222.3 225.5l-18-3.75c-1.75-.375-3.125-2.125-3.125-4s1.375-3.5 3.125-3.875l18-3.75L213.6 195.9C212.8 194.3 213 192.1 214.4 190.9s3.5-1.5 5-.375l12 8.125L236 87.88C236.1 85.63 237.9 84 240 84s3.875 1.625 4 3.875l4.75 112.3l14.12-9.625c.625-.5 1.5-.625 2.25-.75c1.5 0 2.75 .75 3.5 2s.625 2.875-.125 4.125L260 210.1l17.1 3.75c1.75 .375 3.125 2 3.125 3.875s-1.375 3.625-3.125 4L260 225.4l8.5 14.38c.75 1.25 .875 2.75 .125 4s-2 2-3.5 2c-.75 0-1.625-.25-2.25-.625L250.3 236.5l1.375 34.25c19.88-4.125 36-18.88 41.88-38.25c6-19.38 1-40.63-13.12-55.25c25-19.88 31-55.5 14-82.63c20.25 11.25 36.38 28.5 46.38 49.25l-26.38 26.5c-3.125 3.125-3.125 8.125 0 11.25s8.125 3.125 11.25 0l21.25-21.25C349.9 170.5 352 181 352 192c0 .5-.125 1-.125 1.5l-37.13 32.5C313.1 227.6 312.1 229.8 312 232c.125 1.875 .7496 3.75 1.1 5.25C315.6 238.9 317.8 239.9 320 240c1.1 0 3.875-.7499 5.25-1.1l23.62-20.63C337.3 267 293.1 304 240 304S142.8 267 131.1 217.4l23.62 20.63C156.3 239.3 158.1 239.9 160 240c3.375 0 6.25-2.125 7.5-5.125c1.125-3.125 .25-6.75-2.25-8.875L128.1 193.5C128.1 193 128 192.5 128 192C128 181 130.1 170.5 133.1 160.4zM384 448H96c-17.67 0-32-14.33-32-32s14.33-32 32-32h288V448z\"],\n    \"book-medical\": [448, 512, [], \"f7e6\", \"M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM128 166c0-8.838 7.164-16 16-16h53.1V96c0-8.838 7.164-16 16-16h52c8.836 0 16 7.162 16 16v54H336c8.836 0 16 7.162 16 16v52c0 8.836-7.164 16-16 16h-54V288c0 8.836-7.164 16-16 16h-52c-8.836 0-16-7.164-16-16V234H144c-8.836 0-16-7.164-16-16V166zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448z\"],\n    \"book-open\": [576, 512, [128366, 128214], \"f518\", \"M144.3 32.04C106.9 31.29 63.7 41.44 18.6 61.29c-11.42 5.026-18.6 16.67-18.6 29.15l0 357.6c0 11.55 11.99 19.55 22.45 14.65c126.3-59.14 219.8 11 223.8 14.01C249.1 478.9 252.5 480 256 480c12.4 0 16-11.38 16-15.98V80.04c0-5.203-2.531-10.08-6.781-13.08C263.3 65.58 216.7 33.35 144.3 32.04zM557.4 61.29c-45.11-19.79-88.48-29.61-125.7-29.26c-72.44 1.312-118.1 33.55-120.9 34.92C306.5 69.96 304 74.83 304 80.04v383.1C304 468.4 307.5 480 320 480c3.484 0 6.938-1.125 9.781-3.328c3.925-3.018 97.44-73.16 223.8-14c10.46 4.896 22.45-3.105 22.45-14.65l.0001-357.6C575.1 77.97 568.8 66.31 557.4 61.29z\"],\n    \"book-open-reader\": [512, 512, [\"book-reader\"], \"f5da\", \"M0 219.2v212.5c0 14.25 11.62 26.25 26.5 27C75.32 461.2 180.2 471.3 240 511.9V245.2C181.4 205.5 79.99 194.8 29.84 192C13.59 191.1 0 203.6 0 219.2zM482.2 192c-50.09 2.848-151.3 13.47-209.1 53.09C272.1 245.2 272 245.3 272 245.5v266.5c60.04-40.39 164.7-50.76 213.5-53.28C500.4 457.9 512 445.9 512 431.7V219.2C512 203.6 498.4 191.1 482.2 192zM352 96c0-53-43-96-96-96S160 43 160 96s43 96 96 96S352 149 352 96z\"],\n    \"book-quran\": [448, 512, [\"quran\"], \"f687\", \"M352 0H48C21.49 0 0 21.49 0 48v288c0 14.16 6.246 26.76 16 35.54v81.36C6.607 458.5 0 468.3 0 479.1C0 497.7 14.33 512 31.1 512h320c53.02 0 96-42.98 96-96V96C448 42.98 405 0 352 0zM324.8 170.4c3.006 .4297 4.295 4.154 2.004 6.301L306.2 196.9l4.869 28.5c.4297 2.434-1.576 4.439-3.725 4.439c-.5723 0-1.145-.1445-1.719-.4297L280 215.9l-25.63 13.46c-.5723 .2852-1.145 .4297-1.719 .4297c-2.146 0-4.152-2.006-3.723-4.439l4.869-28.5l-20.62-20.19c-2.291-2.146-1.002-5.871 2.006-6.301l28.64-4.152l12.89-25.92C277.3 138.9 278.7 138.2 280 138.2s2.721 .7168 3.295 2.148l12.89 25.92L324.8 170.4zM216 72c23.66 0 46.61 6.953 66.36 20.09c3.219 2.141 4.438 6.281 2.906 9.844c-1.547 3.547-5.453 5.562-9.172 4.594C268.8 104.8 262.2 104 256 104C207.5 104 168 143.5 168 192S207.5 280 256 280c6.234 0 12.81-.8281 20.09-2.531c3.719-.9687 7.625 1.047 9.172 4.594c1.531 3.562 .3125 7.703-2.906 9.844C262.6 305 239.7 312 216 312C149.8 312 96 258.2 96 192S149.8 72 216 72zM352 448H64v-64h288c17.67 0 32 14.33 32 32C384 433.7 369.7 448 352 448z\"],\n    \"book-skull\": [448, 512, [\"book-dead\"], \"f6b7\", \"M272 144C280.8 144 288 136.8 288 128s-7.25-16-16-16S256 119.3 256 128S263.3 144 272 144zM448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM240 64C284.3 64 320 92.75 320 128c0 20.88-12.75 39.25-32 50.88V192c0 8.75-7.25 16-16 16h-64C199.3 208 192 200.8 192 192V178.9C172.8 167.3 160 148.9 160 128C160 92.75 195.8 64 240 64zM121.7 238.7c-8.125-3.484-11.91-12.89-8.438-21.02c3.469-8.094 12.94-11.86 21-8.422L240 254.5l105.7-45.21c8.031-3.438 17.53 .3281 21 8.422c3.469 8.125-.3125 17.53-8.438 21.02l-77.58 33.18l77.58 33.18c8.125 3.484 11.91 12.89 8.438 21.02C364.1 332.2 358.2 335.8 352 335.8c-2.094 0-4.25-.4062-6.281-1.281L240 289.3l-105.7 45.21C132.3 335.4 130.1 335.8 128 335.8c-6.219 0-12.12-3.641-14.72-9.703C109.8 317.1 113.6 308.6 121.7 305.1l77.58-33.18L121.7 238.7zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448zM208 144C216.8 144 224 136.8 224 128S216.8 112 208 112S192 119.3 192 128S199.3 144 208 144z\"],\n    \"bookmark\": [384, 512, [61591, 128278], \"f02e\", \"M384 48V512l-192-112L0 512V48C0 21.5 21.5 0 48 0h288C362.5 0 384 21.5 384 48z\"],\n    \"border-all\": [448, 512, [], \"f84c\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM384 96H256V224H384V96zM384 288H256V416H384V288zM192 224V96H64V224H192zM64 416H192V288H64V416z\"],\n    \"border-none\": [448, 512, [], \"f850\", \"M64 448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416C49.67 416 64 430.3 64 448zM128 480C110.3 480 96 465.7 96 448C96 430.3 110.3 416 128 416C145.7 416 160 430.3 160 448C160 465.7 145.7 480 128 480zM128 96C110.3 96 96 81.67 96 64C96 46.33 110.3 32 128 32C145.7 32 160 46.33 160 64C160 81.67 145.7 96 128 96zM160 256C160 273.7 145.7 288 128 288C110.3 288 96 273.7 96 256C96 238.3 110.3 224 128 224C145.7 224 160 238.3 160 256zM320 480C302.3 480 288 465.7 288 448C288 430.3 302.3 416 320 416C337.7 416 352 430.3 352 448C352 465.7 337.7 480 320 480zM352 64C352 81.67 337.7 96 320 96C302.3 96 288 81.67 288 64C288 46.33 302.3 32 320 32C337.7 32 352 46.33 352 64zM320 288C302.3 288 288 273.7 288 256C288 238.3 302.3 224 320 224C337.7 224 352 238.3 352 256C352 273.7 337.7 288 320 288zM256 448C256 465.7 241.7 480 224 480C206.3 480 192 465.7 192 448C192 430.3 206.3 416 224 416C241.7 416 256 430.3 256 448zM224 96C206.3 96 192 81.67 192 64C192 46.33 206.3 32 224 32C241.7 32 256 46.33 256 64C256 81.67 241.7 96 224 96zM256 256C256 273.7 241.7 288 224 288C206.3 288 192 273.7 192 256C192 238.3 206.3 224 224 224C241.7 224 256 238.3 256 256zM416 480C398.3 480 384 465.7 384 448C384 430.3 398.3 416 416 416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480zM416 96C398.3 96 384 81.67 384 64C384 46.33 398.3 32 416 32C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96zM64 64C64 81.67 49.67 96 32 96C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32C49.67 32 64 46.33 64 64zM416 288C398.3 288 384 273.7 384 256C384 238.3 398.3 224 416 224C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288zM64 256C64 273.7 49.67 288 32 288C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224C49.67 224 64 238.3 64 256zM224 384C206.3 384 192 369.7 192 352C192 334.3 206.3 320 224 320C241.7 320 256 334.3 256 352C256 369.7 241.7 384 224 384zM448 352C448 369.7 433.7 384 416 384C398.3 384 384 369.7 384 352C384 334.3 398.3 320 416 320C433.7 320 448 334.3 448 352zM32 384C14.33 384 0 369.7 0 352C0 334.3 14.33 320 32 320C49.67 320 64 334.3 64 352C64 369.7 49.67 384 32 384zM448 160C448 177.7 433.7 192 416 192C398.3 192 384 177.7 384 160C384 142.3 398.3 128 416 128C433.7 128 448 142.3 448 160zM32 192C14.33 192 0 177.7 0 160C0 142.3 14.33 128 32 128C49.67 128 64 142.3 64 160C64 177.7 49.67 192 32 192zM256 160C256 177.7 241.7 192 224 192C206.3 192 192 177.7 192 160C192 142.3 206.3 128 224 128C241.7 128 256 142.3 256 160z\"],\n    \"border-top-left\": [448, 512, [\"border-style\"], \"f853\", \"M0 112C0 67.82 35.82 32 80 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H80C71.16 96 64 103.2 64 112V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448V112zM128 480C110.3 480 96 465.7 96 448C96 430.3 110.3 416 128 416C145.7 416 160 430.3 160 448C160 465.7 145.7 480 128 480zM320 480C302.3 480 288 465.7 288 448C288 430.3 302.3 416 320 416C337.7 416 352 430.3 352 448C352 465.7 337.7 480 320 480zM256 448C256 465.7 241.7 480 224 480C206.3 480 192 465.7 192 448C192 430.3 206.3 416 224 416C241.7 416 256 430.3 256 448zM416 480C398.3 480 384 465.7 384 448C384 430.3 398.3 416 416 416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480zM416 288C398.3 288 384 273.7 384 256C384 238.3 398.3 224 416 224C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288zM448 352C448 369.7 433.7 384 416 384C398.3 384 384 369.7 384 352C384 334.3 398.3 320 416 320C433.7 320 448 334.3 448 352zM416 192C398.3 192 384 177.7 384 160C384 142.3 398.3 128 416 128C433.7 128 448 142.3 448 160C448 177.7 433.7 192 416 192z\"],\n    \"bowling-ball\": [512, 512, [], \"f436\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM144 208c-17.7 0-32-14.25-32-32s14.3-32 32-32s32 14.25 32 32S161.7 208 144 208zM240 80c17.66 0 31.95 14.25 31.95 32s-14.29 32-31.95 32s-32.05-14.25-32.05-32S222.4 80 240 80zM240 240c-17.7 0-32-14.25-32-32s14.3-32 32-32s32 14.25 32 32S257.7 240 240 240z\"],\n    \"box\": [448, 512, [128230], \"f466\", \"M50.73 58.53C58.86 42.27 75.48 32 93.67 32H208V160H0L50.73 58.53zM240 160V32H354.3C372.5 32 389.1 42.27 397.3 58.53L448 160H240zM448 416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V192H448V416z\"],\n    \"box-archive\": [512, 512, [\"archive\"], \"f187\", \"M32 432C32 458.5 53.49 480 80 480h352c26.51 0 48-21.49 48-48V160H32V432zM160 236C160 229.4 165.4 224 172 224h168C346.6 224 352 229.4 352 236v8C352 250.6 346.6 256 340 256h-168C165.4 256 160 250.6 160 244V236zM480 32H32C14.31 32 0 46.31 0 64v48C0 120.8 7.188 128 16 128h480C504.8 128 512 120.8 512 112V64C512 46.31 497.7 32 480 32z\"],\n    \"box-open\": [640, 512, [], \"f49e\", \"M75.23 33.4L320 63.1L564.8 33.4C571.5 32.56 578 36.06 581.1 42.12L622.8 125.5C631.7 143.4 622.2 165.1 602.9 170.6L439.6 217.3C425.7 221.2 410.8 215.4 403.4 202.1L320 63.1L236.6 202.1C229.2 215.4 214.3 221.2 200.4 217.3L37.07 170.6C17.81 165.1 8.283 143.4 17.24 125.5L58.94 42.12C61.97 36.06 68.5 32.56 75.23 33.4H75.23zM321.1 128L375.9 219.4C390.8 244.2 420.5 255.1 448.4 248L576 211.6V378.5C576 400.5 561 419.7 539.6 425.1L335.5 476.1C325.3 478.7 314.7 478.7 304.5 476.1L100.4 425.1C78.99 419.7 64 400.5 64 378.5V211.6L191.6 248C219.5 255.1 249.2 244.2 264.1 219.4L318.9 128H321.1z\"],\n    \"box-tissue\": [512, 512, [], \"e05b\", \"M384 288l64-192h-109.4C308.4 96 281.6 76.66 272 48C262.4 19.33 235.6 0 205.4 0H64l64 288H384zM0 480c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-64H0V480zM480 224h-40.94l-21.33 64H432C440.8 288 448 295.2 448 304S440.8 320 432 320h-352C71.16 320 64 312.8 64 304S71.16 288 80 288h15.22l-14.22-64H32C14.33 224 0 238.3 0 256v128h512V256C512 238.3 497.7 224 480 224z\"],\n    \"boxes-stacked\": [576, 512, [62625, \"boxes\", \"boxes-alt\"], \"f468\", \"M160 48C160 21.49 181.5 0 208 0H256V80C256 88.84 263.2 96 272 96H304C312.8 96 320 88.84 320 80V0H368C394.5 0 416 21.49 416 48V176C416 202.5 394.5 224 368 224H208C181.5 224 160 202.5 160 176V48zM96 288V368C96 376.8 103.2 384 112 384H144C152.8 384 160 376.8 160 368V288H208C234.5 288 256 309.5 256 336V464C256 490.5 234.5 512 208 512H48C21.49 512 0 490.5 0 464V336C0 309.5 21.49 288 48 288H96zM416 288V368C416 376.8 423.2 384 432 384H464C472.8 384 480 376.8 480 368V288H528C554.5 288 576 309.5 576 336V464C576 490.5 554.5 512 528 512H368C341.5 512 320 490.5 320 464V336C320 309.5 341.5 288 368 288H416z\"],\n    \"braille\": [640, 512, [], \"f2a1\", \"M128 96C128 131.3 99.35 160 64 160C28.65 160 0 131.3 0 96C0 60.65 28.65 32 64 32C99.35 32 128 60.65 128 96zM160 256C160 220.7 188.7 192 224 192C259.3 192 288 220.7 288 256C288 291.3 259.3 320 224 320C188.7 320 160 291.3 160 256zM224 272C232.8 272 240 264.8 240 256C240 247.2 232.8 240 224 240C215.2 240 208 247.2 208 256C208 264.8 215.2 272 224 272zM128 416C128 451.3 99.35 480 64 480C28.65 480 0 451.3 0 416C0 380.7 28.65 352 64 352C99.35 352 128 380.7 128 416zM64 400C55.16 400 48 407.2 48 416C48 424.8 55.16 432 64 432C72.84 432 80 424.8 80 416C80 407.2 72.84 400 64 400zM288 416C288 451.3 259.3 480 224 480C188.7 480 160 451.3 160 416C160 380.7 188.7 352 224 352C259.3 352 288 380.7 288 416zM224 400C215.2 400 208 407.2 208 416C208 424.8 215.2 432 224 432C232.8 432 240 424.8 240 416C240 407.2 232.8 400 224 400zM0 256C0 220.7 28.65 192 64 192C99.35 192 128 220.7 128 256C128 291.3 99.35 320 64 320C28.65 320 0 291.3 0 256zM160 96C160 60.65 188.7 32 224 32C259.3 32 288 60.65 288 96C288 131.3 259.3 160 224 160C188.7 160 160 131.3 160 96zM480 96C480 131.3 451.3 160 416 160C380.7 160 352 131.3 352 96C352 60.65 380.7 32 416 32C451.3 32 480 60.65 480 96zM640 96C640 131.3 611.3 160 576 160C540.7 160 512 131.3 512 96C512 60.65 540.7 32 576 32C611.3 32 640 60.65 640 96zM576 80C567.2 80 560 87.16 560 96C560 104.8 567.2 112 576 112C584.8 112 592 104.8 592 96C592 87.16 584.8 80 576 80zM512 256C512 220.7 540.7 192 576 192C611.3 192 640 220.7 640 256C640 291.3 611.3 320 576 320C540.7 320 512 291.3 512 256zM576 272C584.8 272 592 264.8 592 256C592 247.2 584.8 240 576 240C567.2 240 560 247.2 560 256C560 264.8 567.2 272 576 272zM640 416C640 451.3 611.3 480 576 480C540.7 480 512 451.3 512 416C512 380.7 540.7 352 576 352C611.3 352 640 380.7 640 416zM576 400C567.2 400 560 407.2 560 416C560 424.8 567.2 432 576 432C584.8 432 592 424.8 592 416C592 407.2 584.8 400 576 400zM352 256C352 220.7 380.7 192 416 192C451.3 192 480 220.7 480 256C480 291.3 451.3 320 416 320C380.7 320 352 291.3 352 256zM416 272C424.8 272 432 264.8 432 256C432 247.2 424.8 240 416 240C407.2 240 400 247.2 400 256C400 264.8 407.2 272 416 272zM480 416C480 451.3 451.3 480 416 480C380.7 480 352 451.3 352 416C352 380.7 380.7 352 416 352C451.3 352 480 380.7 480 416zM416 400C407.2 400 400 407.2 400 416C400 424.8 407.2 432 416 432C424.8 432 432 424.8 432 416C432 407.2 424.8 400 416 400z\"],\n    \"brain\": [512, 512, [129504], \"f5dc\", \"M184 0C214.9 0 240 25.07 240 56V456C240 486.9 214.9 512 184 512C155.1 512 131.3 490.1 128.3 461.9C123.1 463.3 117.6 464 112 464C76.65 464 48 435.3 48 400C48 392.6 49.27 385.4 51.59 378.8C21.43 367.4 0 338.2 0 304C0 272.1 18.71 244.5 45.77 231.7C37.15 220.8 32 206.1 32 192C32 161.3 53.59 135.7 82.41 129.4C80.84 123.9 80 118 80 112C80 82.06 100.6 56.92 128.3 49.93C131.3 21.86 155.1 0 184 0zM383.7 49.93C411.4 56.92 432 82.06 432 112C432 118 431.2 123.9 429.6 129.4C458.4 135.7 480 161.3 480 192C480 206.1 474.9 220.8 466.2 231.7C493.3 244.5 512 272.1 512 304C512 338.2 490.6 367.4 460.4 378.8C462.7 385.4 464 392.6 464 400C464 435.3 435.3 464 400 464C394.4 464 388.9 463.3 383.7 461.9C380.7 490.1 356.9 512 328 512C297.1 512 272 486.9 272 456V56C272 25.07 297.1 0 328 0C356.9 0 380.7 21.86 383.7 49.93z\"],\n    \"brazilian-real-sign\": [512, 512, [], \"e46c\", \"M400 .0003C417.7 .0003 432 14.33 432 32V50.22C444.5 52.52 456.7 56.57 468.2 62.3L478.3 67.38C494.1 75.28 500.5 94.5 492.6 110.3C484.7 126.1 465.5 132.5 449.7 124.6L439.5 119.5C429.6 114.6 418.7 112 407.6 112H405.9C376.1 112 352 136.1 352 165.9C352 187.9 365.4 207.7 385.9 215.9L437.9 236.7C482.7 254.6 512 297.9 512 346.1V349.5C512 400.7 478.4 444.1 432 458.7V480C432 497.7 417.7 512 400 512C382.3 512 368 497.7 368 480V460.6C352.1 457.1 338.6 450.9 325.7 442.3L302.2 426.6C287.5 416.8 283.6 396.1 293.4 382.2C303.2 367.5 323 363.6 337.8 373.4L361.2 389C371.9 396.2 384.6 400 397.5 400C425.4 400 448 377.4 448 349.5V346.1C448 324.1 434.6 304.3 414.1 296.1L362.1 275.3C317.3 257.4 288 214.1 288 165.9C288 114 321.5 69.99 368 54.21V32C368 14.33 382.3 0 400 0L400 .0003zM.0003 64C.0003 46.33 14.33 32 32 32H112C191.5 32 256 96.47 256 176C256 234.8 220.8 285.3 170.3 307.7L221.7 436.1C228.3 452.5 220.3 471.1 203.9 477.7C187.5 484.3 168.9 476.3 162.3 459.9L106.3 320H64V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448L.0003 64zM64 256H112C156.2 256 192 220.2 192 176C192 131.8 156.2 96 112 96H64V256z\"],\n    \"bread-slice\": [512, 512, [], \"f7ec\", \"M512 176.1C512 203 490.4 224 455.1 224H448v224c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32V224H56.89C21.56 224 0 203 0 176.1C0 112 96 32 256 32S512 112 512 176.1z\"],\n    \"briefcase\": [512, 512, [128188], \"f0b1\", \"M320 336c0 8.844-7.156 16-16 16h-96C199.2 352 192 344.8 192 336V288H0v144C0 457.6 22.41 480 48 480h416c25.59 0 48-22.41 48-48V288h-192V336zM464 96H384V48C384 22.41 361.6 0 336 0h-160C150.4 0 128 22.41 128 48V96H48C22.41 96 0 118.4 0 144V256h512V144C512 118.4 489.6 96 464 96zM336 96h-160V48h160V96z\"],\n    \"briefcase-medical\": [512, 512, [], \"f469\", \"M464 96H384V48C384 21.5 362.5 0 336 0h-160C149.5 0 128 21.5 128 48V96H48C21.5 96 0 117.5 0 144v288C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-288C512 117.5 490.5 96 464 96zM176 48h160V96h-160V48zM368 314c0 8.836-7.164 16-16 16h-54V384c0 8.836-7.164 16-15.1 16h-52c-8.835 0-16-7.164-16-16v-53.1H160c-8.836 0-16-7.164-16-16v-52c0-8.838 7.164-16 16-16h53.1V192c0-8.838 7.165-16 16-16h52c8.836 0 15.1 7.162 15.1 16v54H352c8.836 0 16 7.162 16 16V314z\"],\n    \"broom\": [640, 512, [129529], \"f51a\", \"M93.13 257.7C71.25 275.1 53 313.5 38.63 355.1L99 333.1c5.75-2.125 10.62 4.749 6.625 9.499L11 454.7C3.75 486.1 0 510.2 0 510.2s206.6 13.62 266.6-34.12c60-47.87 76.63-150.1 76.63-150.1L256.5 216.7C256.5 216.7 153.1 209.1 93.13 257.7zM633.2 12.34c-10.84-13.91-30.91-16.45-44.91-5.624l-225.7 175.6l-34.99-44.06C322.5 131.9 312.5 133.1 309 140.5L283.8 194.1l86.75 109.2l58.75-12.5c8-1.625 11.38-11.12 6.375-17.5l-33.19-41.79l225.2-175.2C641.6 46.38 644.1 26.27 633.2 12.34z\"],\n    \"broom-ball\": [640, 512, [\"quidditch\", \"quidditch-broom-ball\"], \"f458\", \"M495.1 351.1c-44.18 0-79.1 35.72-79.1 79.91c0 44.18 35.82 80.09 79.1 80.09s79.1-35.91 79.1-80.09C575.1 387.7 540.2 351.1 495.1 351.1zM242.7 216.4c-30.16 0-102.9 4.15-149.4 41.34c-22 17.5-40.25 55.75-54.63 97.5l60.38-22.12c.7363-.2715 1.46-.3967 2.151-.3967c3.33 0 5.935 2.885 5.935 6.039c0 1.301-.4426 2.647-1.462 3.856L11 454.7C3.75 487.1 0 510.2 0 510.2S27.07 512 64.45 512c65.94 0 163.1-5.499 202.2-35.89c60-47.75 76.63-150.1 76.63-150.1l-86.75-109.2C256.5 216.7 251.4 216.4 242.7 216.4zM607.1 .0074c-6.863 0-13.78 2.192-19.62 6.719L362.7 182.3l-29.88-37.67c-3.248-4.094-7.892-6.058-12.5-6.058c-5.891 0-11.73 3.204-14.54 9.26L283.8 195.1l86.75 109.1l50.88-10.72c7.883-1.66 12.72-8.546 12.72-15.71c0-3.412-1.096-6.886-3.478-9.89l-28.16-35.5l225.2-175.2c8.102-6.312 12.35-15.75 12.35-25.29C640 14.94 626.3 .0074 607.1 .0074z\"],\n    \"brush\": [384, 512, [], \"f55d\", \"M224 0H336C362.5 0 384 21.49 384 48V256H0V48C0 21.49 21.49 0 48 0H64L96 64L128 0H160L192 64L224 0zM384 288V320C384 355.3 355.3 384 320 384H256V448C256 483.3 227.3 512 192 512C156.7 512 128 483.3 128 448V384H64C28.65 384 0 355.3 0 320V288H384zM192 464C200.8 464 208 456.8 208 448C208 439.2 200.8 432 192 432C183.2 432 176 439.2 176 448C176 456.8 183.2 464 192 464z\"],\n    \"bug\": [512, 512, [], \"f188\", \"M352 96V99.56C352 115.3 339.3 128 323.6 128H188.4C172.7 128 159.1 115.3 159.1 99.56V96C159.1 42.98 202.1 0 255.1 0C309 0 352 42.98 352 96zM41.37 105.4C53.87 92.88 74.13 92.88 86.63 105.4L150.6 169.4C151.3 170 151.9 170.7 152.5 171.4C166.8 164.1 182.9 160 199.1 160H312C329.1 160 345.2 164.1 359.5 171.4C360.1 170.7 360.7 170 361.4 169.4L425.4 105.4C437.9 92.88 458.1 92.88 470.6 105.4C483.1 117.9 483.1 138.1 470.6 150.6L406.6 214.6C405.1 215.3 405.3 215.9 404.6 216.5C410.7 228.5 414.6 241.9 415.7 256H480C497.7 256 512 270.3 512 288C512 305.7 497.7 320 480 320H416C416 344.6 410.5 367.8 400.6 388.6C402.7 389.9 404.8 391.5 406.6 393.4L470.6 457.4C483.1 469.9 483.1 490.1 470.6 502.6C458.1 515.1 437.9 515.1 425.4 502.6L362.3 439.6C337.8 461.4 306.5 475.8 272 479.2V240C272 231.2 264.8 224 255.1 224C247.2 224 239.1 231.2 239.1 240V479.2C205.5 475.8 174.2 461.4 149.7 439.6L86.63 502.6C74.13 515.1 53.87 515.1 41.37 502.6C28.88 490.1 28.88 469.9 41.37 457.4L105.4 393.4C107.2 391.5 109.3 389.9 111.4 388.6C101.5 367.8 96 344.6 96 320H32C14.33 320 0 305.7 0 288C0 270.3 14.33 256 32 256H96.3C97.38 241.9 101.3 228.5 107.4 216.5C106.7 215.9 106 215.3 105.4 214.6L41.37 150.6C28.88 138.1 28.88 117.9 41.37 105.4H41.37z\"],\n    \"bug-slash\": [640, 512, [], \"e490\", \"M239.1 162.8C247.7 160.1 255.7 160 264 160H376C393.1 160 409.2 164.1 423.5 171.4C424.1 170.7 424.7 170 425.4 169.4L489.4 105.4C501.9 92.88 522.1 92.88 534.6 105.4C547.1 117.9 547.1 138.1 534.6 150.6L470.6 214.6C469.1 215.3 469.3 215.9 468.6 216.5C474.7 228.5 478.6 241.9 479.7 256H544C561.7 256 576 270.3 576 288C576 305.7 561.7 320 544 320H480C480 329.9 479.1 339.5 477.4 348.9L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L239.1 162.8zM416 96V99.56C416 115.3 403.3 128 387.6 128H252.4C236.7 128 224 115.3 224 99.56V96C224 42.98 266.1 .001 320 .001C373 .001 416 42.98 416 96V96zM160.3 256C161.1 245.1 163.3 236.3 166.7 227.3L304 335.5V479.2C269.5 475.8 238.2 461.4 213.7 439.6L150.6 502.6C138.1 515.1 117.9 515.1 105.4 502.6C92.88 490.1 92.88 469.9 105.4 457.4L169.4 393.4C171.2 391.5 173.3 389.9 175.4 388.6C165.5 367.8 160 344.6 160 320H96C78.33 320 64 305.7 64 288C64 270.3 78.33 256 96 256H160.3zM336 479.2V360.7L430.8 435.4C405.7 459.6 372.7 475.6 336 479.2V479.2z\"],\n    \"building\": [384, 512, [61687, 127970], \"f1ad\", \"M336 0C362.5 0 384 21.49 384 48V464C384 490.5 362.5 512 336 512H240V432C240 405.5 218.5 384 192 384C165.5 384 144 405.5 144 432V512H48C21.49 512 0 490.5 0 464V48C0 21.49 21.49 0 48 0H336zM64 272C64 280.8 71.16 288 80 288H112C120.8 288 128 280.8 128 272V240C128 231.2 120.8 224 112 224H80C71.16 224 64 231.2 64 240V272zM176 224C167.2 224 160 231.2 160 240V272C160 280.8 167.2 288 176 288H208C216.8 288 224 280.8 224 272V240C224 231.2 216.8 224 208 224H176zM256 272C256 280.8 263.2 288 272 288H304C312.8 288 320 280.8 320 272V240C320 231.2 312.8 224 304 224H272C263.2 224 256 231.2 256 240V272zM80 96C71.16 96 64 103.2 64 112V144C64 152.8 71.16 160 80 160H112C120.8 160 128 152.8 128 144V112C128 103.2 120.8 96 112 96H80zM160 144C160 152.8 167.2 160 176 160H208C216.8 160 224 152.8 224 144V112C224 103.2 216.8 96 208 96H176C167.2 96 160 103.2 160 112V144zM272 96C263.2 96 256 103.2 256 112V144C256 152.8 263.2 160 272 160H304C312.8 160 320 152.8 320 144V112C320 103.2 312.8 96 304 96H272z\"],\n    \"building-columns\": [512, 512, [\"bank\", \"institution\", \"museum\", \"university\"], \"f19c\", \"M243.4 2.587C251.4-.8625 260.6-.8625 268.6 2.587L492.6 98.59C506.6 104.6 514.4 119.6 511.3 134.4C508.3 149.3 495.2 159.1 479.1 160V168C479.1 181.3 469.3 192 455.1 192H55.1C42.74 192 31.1 181.3 31.1 168V160C16.81 159.1 3.708 149.3 .6528 134.4C-2.402 119.6 5.429 104.6 19.39 98.59L243.4 2.587zM256 128C273.7 128 288 113.7 288 96C288 78.33 273.7 64 256 64C238.3 64 224 78.33 224 96C224 113.7 238.3 128 256 128zM127.1 416H167.1V224H231.1V416H280V224H344V416H384V224H448V420.3C448.6 420.6 449.2 420.1 449.8 421.4L497.8 453.4C509.5 461.2 514.7 475.8 510.6 489.3C506.5 502.8 494.1 512 480 512H31.1C17.9 512 5.458 502.8 1.372 489.3C-2.715 475.8 2.515 461.2 14.25 453.4L62.25 421.4C62.82 420.1 63.41 420.6 63.1 420.3V224H127.1V416z\"],\n    \"bullhorn\": [512, 512, [128363, 128226], \"f0a1\", \"M480 179.6C498.6 188.4 512 212.1 512 240C512 267.9 498.6 291.6 480 300.4V448C480 460.9 472.2 472.6 460.2 477.6C448.3 482.5 434.5 479.8 425.4 470.6L381.7 426.1C333.7 378.1 268.6 352 200.7 352H192V480C192 497.7 177.7 512 160 512H96C78.33 512 64 497.7 64 480V352C28.65 352 0 323.3 0 288V192C0 156.7 28.65 128 64 128H200.7C268.6 128 333.7 101 381.7 53.02L425.4 9.373C434.5 .2215 448.3-2.516 460.2 2.437C472.2 7.39 480 19.06 480 32V179.6zM200.7 192H192V288H200.7C280.5 288 357.2 317.8 416 371.3V108.7C357.2 162.2 280.5 192 200.7 192V192z\"],\n    \"bullseye\": [512, 512, [], \"f140\", \"M288 256C288 273.7 273.7 288 256 288C238.3 288 224 273.7 224 256C224 238.3 238.3 224 256 224C273.7 224 288 238.3 288 256zM112 256C112 176.5 176.5 112 256 112C335.5 112 400 176.5 400 256C400 335.5 335.5 400 256 400C176.5 400 112 335.5 112 256zM256 336C300.2 336 336 300.2 336 256C336 211.8 300.2 176 256 176C211.8 176 176 211.8 176 256C176 300.2 211.8 336 256 336zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 64C149.1 64 64 149.1 64 256C64 362 149.1 448 256 448C362 448 448 362 448 256C448 149.1 362 64 256 64z\"],\n    \"burger\": [512, 512, [\"hamburger\"], \"f805\", \"M481.9 270.1C490.9 279.1 496 291.3 496 304C496 316.7 490.9 328.9 481.9 337.9C472.9 346.9 460.7 352 448 352H64C51.27 352 39.06 346.9 30.06 337.9C21.06 328.9 16 316.7 16 304C16 291.3 21.06 279.1 30.06 270.1C39.06 261.1 51.27 256 64 256H448C460.7 256 472.9 261.1 481.9 270.1zM475.3 388.7C478.3 391.7 480 395.8 480 400V416C480 432.1 473.3 449.3 461.3 461.3C449.3 473.3 432.1 480 416 480H96C79.03 480 62.75 473.3 50.75 461.3C38.74 449.3 32 432.1 32 416V400C32 395.8 33.69 391.7 36.69 388.7C39.69 385.7 43.76 384 48 384H464C468.2 384 472.3 385.7 475.3 388.7zM50.39 220.8C45.93 218.6 42.03 215.5 38.97 211.6C35.91 207.7 33.79 203.2 32.75 198.4C31.71 193.5 31.8 188.5 32.99 183.7C54.98 97.02 146.5 32 256 32C365.5 32 457 97.02 479 183.7C480.2 188.5 480.3 193.5 479.2 198.4C478.2 203.2 476.1 207.7 473 211.6C469.1 215.5 466.1 218.6 461.6 220.8C457.2 222.9 452.3 224 447.3 224H64.67C59.73 224 54.84 222.9 50.39 220.8zM372.7 116.7C369.7 119.7 368 123.8 368 128C368 131.2 368.9 134.3 370.7 136.9C372.5 139.5 374.1 141.6 377.9 142.8C380.8 143.1 384 144.3 387.1 143.7C390.2 143.1 393.1 141.6 395.3 139.3C397.6 137.1 399.1 134.2 399.7 131.1C400.3 128 399.1 124.8 398.8 121.9C397.6 118.1 395.5 116.5 392.9 114.7C390.3 112.9 387.2 111.1 384 111.1C379.8 111.1 375.7 113.7 372.7 116.7V116.7zM244.7 84.69C241.7 87.69 240 91.76 240 96C240 99.16 240.9 102.3 242.7 104.9C244.5 107.5 246.1 109.6 249.9 110.8C252.8 111.1 256 112.3 259.1 111.7C262.2 111.1 265.1 109.6 267.3 107.3C269.6 105.1 271.1 102.2 271.7 99.12C272.3 96.02 271.1 92.8 270.8 89.88C269.6 86.95 267.5 84.45 264.9 82.7C262.3 80.94 259.2 79.1 256 79.1C251.8 79.1 247.7 81.69 244.7 84.69V84.69zM116.7 116.7C113.7 119.7 112 123.8 112 128C112 131.2 112.9 134.3 114.7 136.9C116.5 139.5 118.1 141.6 121.9 142.8C124.8 143.1 128 144.3 131.1 143.7C134.2 143.1 137.1 141.6 139.3 139.3C141.6 137.1 143.1 134.2 143.7 131.1C144.3 128 143.1 124.8 142.8 121.9C141.6 118.1 139.5 116.5 136.9 114.7C134.3 112.9 131.2 111.1 128 111.1C123.8 111.1 119.7 113.7 116.7 116.7L116.7 116.7z\"],\n    \"bus\": [576, 512, [128653], \"f207\", \"M288 0C422.4 0 512 35.2 512 80V128C529.7 128 544 142.3 544 160V224C544 241.7 529.7 256 512 256L512 416C512 433.7 497.7 448 480 448V480C480 497.7 465.7 512 448 512H416C398.3 512 384 497.7 384 480V448H192V480C192 497.7 177.7 512 160 512H128C110.3 512 96 497.7 96 480V448C78.33 448 64 433.7 64 416L64 256C46.33 256 32 241.7 32 224V160C32 142.3 46.33 128 64 128V80C64 35.2 153.6 0 288 0zM128 256C128 273.7 142.3 288 160 288H272V128H160C142.3 128 128 142.3 128 160V256zM304 288H416C433.7 288 448 273.7 448 256V160C448 142.3 433.7 128 416 128H304V288zM144 400C161.7 400 176 385.7 176 368C176 350.3 161.7 336 144 336C126.3 336 112 350.3 112 368C112 385.7 126.3 400 144 400zM432 400C449.7 400 464 385.7 464 368C464 350.3 449.7 336 432 336C414.3 336 400 350.3 400 368C400 385.7 414.3 400 432 400zM368 64H208C199.2 64 192 71.16 192 80C192 88.84 199.2 96 208 96H368C376.8 96 384 88.84 384 80C384 71.16 376.8 64 368 64z\"],\n    \"bus-simple\": [448, 512, [\"bus-alt\"], \"f55e\", \"M224 0C348.8 0 448 35.2 448 80V416C448 433.7 433.7 448 416 448V480C416 497.7 401.7 512 384 512H352C334.3 512 320 497.7 320 480V448H128V480C128 497.7 113.7 512 96 512H64C46.33 512 32 497.7 32 480V448C14.33 448 0 433.7 0 416V80C0 35.2 99.19 0 224 0zM64 256C64 273.7 78.33 288 96 288H352C369.7 288 384 273.7 384 256V128C384 110.3 369.7 96 352 96H96C78.33 96 64 110.3 64 128V256zM80 400C97.67 400 112 385.7 112 368C112 350.3 97.67 336 80 336C62.33 336 48 350.3 48 368C48 385.7 62.33 400 80 400zM368 400C385.7 400 400 385.7 400 368C400 350.3 385.7 336 368 336C350.3 336 336 350.3 336 368C336 385.7 350.3 400 368 400z\"],\n    \"business-time\": [640, 512, [\"briefcase-clock\"], \"f64a\", \"M496 224C416.4 224 352 288.4 352 368s64.38 144 144 144s144-64.38 144-144S575.6 224 496 224zM544 384h-54.25C484.4 384 480 379.6 480 374.3V304C480 295.2 487.2 288 496 288C504.8 288 512 295.2 512 304V352h32c8.838 0 16 7.162 16 16C560 376.8 552.8 384 544 384zM320.1 352H208C199.2 352 192 344.8 192 336V288H0v144C0 457.6 22.41 480 48 480h312.2C335.1 449.6 320 410.5 320 368C320 362.6 320.5 357.3 320.1 352zM496 192c5.402 0 10.72 .3301 16 .8066V144C512 118.4 489.6 96 464 96H384V48C384 22.41 361.6 0 336 0h-160C150.4 0 128 22.41 128 48V96H48C22.41 96 0 118.4 0 144V256h360.2C392.5 216.9 441.3 192 496 192zM336 96h-160V48h160V96z\"],\n    \"c\": [384, 512, [99], \"43\", \"M352 359.8c22.46 0 31.1 19.53 31.1 31.99c0 23.14-66.96 88.23-164.5 88.23c-137.1 0-219.4-117.8-219.4-224c0-103.8 79.87-223.1 219.4-223.1c99.47 0 164.5 66.12 164.5 88.23c0 12.27-9.527 32.01-32.01 32.01c-31.32 0-45.8-56.25-132.5-56.25c-97.99 0-155.4 84.59-155.4 159.1c0 74.03 56.42 160 155.4 160C306.5 416 320.5 359.8 352 359.8z\"],\n    \"cake-candles\": [448, 512, [127874, \"birthday-cake\", \"cake\"], \"f1fd\", \"M352 111.1c22.09 0 40-17.88 40-39.97S352 0 352 0s-40 49.91-40 72S329.9 111.1 352 111.1zM224 111.1c22.09 0 40-17.88 40-39.97S224 0 224 0S184 49.91 184 72S201.9 111.1 224 111.1zM383.1 223.1L384 160c0-8.836-7.164-16-16-16h-32C327.2 144 320 151.2 320 160v64h-64V160c0-8.836-7.164-16-16-16h-32C199.2 144 192 151.2 192 160v64H128V160c0-8.836-7.164-16-16-16h-32C71.16 144 64 151.2 64 160v63.97c-35.35 0-64 28.65-64 63.1v68.7c9.814 6.102 21.39 11.33 32 11.33c20.64 0 45.05-19.73 52.7-27.33c6.25-6.219 16.34-6.219 22.59 0C114.1 348.3 139.4 367.1 160 367.1s45.05-19.73 52.7-27.33c6.25-6.219 16.34-6.219 22.59 0C242.1 348.3 267.4 367.1 288 367.1s45.05-19.73 52.7-27.33c6.25-6.219 16.34-6.219 22.59 0C370.1 348.3 395.4 367.1 416 367.1c10.61 0 22.19-5.227 32-11.33V287.1C448 252.6 419.3 223.1 383.1 223.1zM352 373.3c-13.75 10.95-38.03 26.66-64 26.66s-50.25-15.7-64-26.66c-13.75 10.95-38.03 26.66-64 26.66s-50.25-15.7-64-26.66c-13.75 10.95-38.03 26.66-64 26.66c-11.27 0-22.09-3.121-32-7.377v87.38C0 497.7 14.33 512 32 512h384c17.67 0 32-14.33 32-32v-87.38c-9.91 4.256-20.73 7.377-32 7.377C390 399.1 365.8 384.3 352 373.3zM96 111.1c22.09 0 40-17.88 40-39.97S96 0 96 0S56 49.91 56 72S73.91 111.1 96 111.1z\"],\n    \"calculator\": [384, 512, [128425], \"f1ec\", \"M336 0h-288C22.38 0 0 22.38 0 48v416C0 489.6 22.38 512 48 512h288c25.62 0 48-22.38 48-48v-416C384 22.38 361.6 0 336 0zM64 208C64 199.2 71.2 192 80 192h32C120.8 192 128 199.2 128 208v32C128 248.8 120.8 256 112 256h-32C71.2 256 64 248.8 64 240V208zM64 304C64 295.2 71.2 288 80 288h32C120.8 288 128 295.2 128 304v32C128 344.8 120.8 352 112 352h-32C71.2 352 64 344.8 64 336V304zM224 432c0 8.801-7.199 16-16 16h-128C71.2 448 64 440.8 64 432v-32C64 391.2 71.2 384 80 384h128c8.801 0 16 7.199 16 16V432zM224 336c0 8.801-7.199 16-16 16h-32C167.2 352 160 344.8 160 336v-32C160 295.2 167.2 288 176 288h32C216.8 288 224 295.2 224 304V336zM224 240C224 248.8 216.8 256 208 256h-32C167.2 256 160 248.8 160 240v-32C160 199.2 167.2 192 176 192h32C216.8 192 224 199.2 224 208V240zM320 432c0 8.801-7.199 16-16 16h-32c-8.799 0-16-7.199-16-16v-32c0-8.801 7.201-16 16-16h32c8.801 0 16 7.199 16 16V432zM320 336c0 8.801-7.199 16-16 16h-32c-8.799 0-16-7.199-16-16v-32C256 295.2 263.2 288 272 288h32C312.8 288 320 295.2 320 304V336zM320 240C320 248.8 312.8 256 304 256h-32C263.2 256 256 248.8 256 240v-32C256 199.2 263.2 192 272 192h32C312.8 192 320 199.2 320 208V240zM320 144C320 152.8 312.8 160 304 160h-224C71.2 160 64 152.8 64 144v-64C64 71.2 71.2 64 80 64h224C312.8 64 320 71.2 320 80V144z\"],\n    \"calendar\": [448, 512, [128198, 128197], \"f133\", \"M96 32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32zM448 464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192H448V464z\"],\n    \"calendar-check\": [448, 512, [], \"f274\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM328.1 304.1C338.3 295.6 338.3 280.4 328.1 271C319.6 261.7 304.4 261.7 295 271L200 366.1L152.1 319C143.6 309.7 128.4 309.7 119 319C109.7 328.4 109.7 343.6 119 352.1L183 416.1C192.4 426.3 207.6 426.3 216.1 416.1L328.1 304.1z\"],\n    \"calendar-day\": [448, 512, [], \"f783\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM80 256C71.16 256 64 263.2 64 272V368C64 376.8 71.16 384 80 384H176C184.8 384 192 376.8 192 368V272C192 263.2 184.8 256 176 256H80z\"],\n    \"calendar-days\": [448, 512, [\"calendar-alt\"], \"f073\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM64 304C64 312.8 71.16 320 80 320H112C120.8 320 128 312.8 128 304V272C128 263.2 120.8 256 112 256H80C71.16 256 64 263.2 64 272V304zM192 304C192 312.8 199.2 320 208 320H240C248.8 320 256 312.8 256 304V272C256 263.2 248.8 256 240 256H208C199.2 256 192 263.2 192 272V304zM336 256C327.2 256 320 263.2 320 272V304C320 312.8 327.2 320 336 320H368C376.8 320 384 312.8 384 304V272C384 263.2 376.8 256 368 256H336zM64 432C64 440.8 71.16 448 80 448H112C120.8 448 128 440.8 128 432V400C128 391.2 120.8 384 112 384H80C71.16 384 64 391.2 64 400V432zM208 384C199.2 384 192 391.2 192 400V432C192 440.8 199.2 448 208 448H240C248.8 448 256 440.8 256 432V400C256 391.2 248.8 384 240 384H208zM320 432C320 440.8 327.2 448 336 448H368C376.8 448 384 440.8 384 432V400C384 391.2 376.8 384 368 384H336C327.2 384 320 391.2 320 400V432z\"],\n    \"calendar-minus\": [448, 512, [], \"f272\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM312 376C325.3 376 336 365.3 336 352C336 338.7 325.3 328 312 328H136C122.7 328 112 338.7 112 352C112 365.3 122.7 376 136 376H312z\"],\n    \"calendar-plus\": [448, 512, [], \"f271\", \"M96 32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32zM448 464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192H448V464zM200 272V328H144C130.7 328 120 338.7 120 352C120 365.3 130.7 376 144 376H200V432C200 445.3 210.7 456 224 456C237.3 456 248 445.3 248 432V376H304C317.3 376 328 365.3 328 352C328 338.7 317.3 328 304 328H248V272C248 258.7 237.3 248 224 248C210.7 248 200 258.7 200 272z\"],\n    \"calendar-week\": [448, 512, [], \"f784\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM80 256C71.16 256 64 263.2 64 272V336C64 344.8 71.16 352 80 352H368C376.8 352 384 344.8 384 336V272C384 263.2 376.8 256 368 256H80z\"],\n    \"calendar-xmark\": [448, 512, [\"calendar-times\"], \"f273\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM304.1 304.1C314.3 295.6 314.3 280.4 304.1 271C295.6 261.7 280.4 261.7 271 271L224 318.1L176.1 271C167.6 261.7 152.4 261.7 143 271C133.7 280.4 133.7 295.6 143 304.1L190.1 352L143 399C133.7 408.4 133.7 423.6 143 432.1C152.4 442.3 167.6 442.3 176.1 432.1L224 385.9L271 432.1C280.4 442.3 295.6 442.3 304.1 432.1C314.3 423.6 314.3 408.4 304.1 399L257.9 352L304.1 304.1z\"],\n    \"camera\": [512, 512, [62258, \"camera-alt\"], \"f030\", \"M194.6 32H317.4C338.1 32 356.4 45.22 362.9 64.82L373.3 96H448C483.3 96 512 124.7 512 160V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V160C0 124.7 28.65 96 64 96H138.7L149.1 64.82C155.6 45.22 173.9 32 194.6 32H194.6zM256 384C309 384 352 341 352 288C352 234.1 309 192 256 192C202.1 192 160 234.1 160 288C160 341 202.1 384 256 384z\"],\n    \"camera-retro\": [512, 512, [128247], \"f083\", \"M64 64V48C64 39.16 71.16 32 80 32H144C152.8 32 160 39.16 160 48V64H192L242.5 38.76C251.4 34.31 261.2 32 271.1 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V128C0 92.65 28.65 64 64 64zM220.6 121.2C211.7 125.7 201.9 128 192 128H64V192H178.8C200.8 176.9 227.3 168 256 168C284.7 168 311.2 176.9 333.2 192H448V96H271.1L220.6 121.2zM256 216C207.4 216 168 255.4 168 304C168 352.6 207.4 392 256 392C304.6 392 344 352.6 344 304C344 255.4 304.6 216 256 216z\"],\n    \"camera-rotate\": [512, 512, [], \"e0d8\", \"M464 96h-88l-12.38-32.88C356.6 44.38 338.8 32 318.8 32h-125.5c-20 0-38 12.38-45 31.12L136 96H48C21.5 96 0 117.5 0 144v288C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-288C512 117.5 490.5 96 464 96zM356.9 366.8C332.4 398.1 295.7 416 256 416c-31.78 0-61.37-11.94-84.58-32.61l-19.28 19.29C143.2 411.6 128 405.3 128 392.7V316.3c0-5.453 4.359-9.838 9.775-9.99h76.98c12.35 .3027 18.47 15.27 9.654 24.09l-19.27 19.28C219.3 361.4 237.1 368 256 368c24.8 0 47.78-11.22 63.08-30.78c8.172-10.44 23.25-12.28 33.69-4.125S365.1 356.3 356.9 366.8zM384 259.7c0 5.453-4.359 9.838-9.775 9.99h-76.98c-12.35-.3027-18.47-15.27-9.654-24.09l19.27-19.28C292.7 214.6 274.9 208 256 208c-24.8 0-47.78 11.22-63.08 30.78C184.8 249.2 169.7 251.1 159.2 242.9C148.8 234.8 146.9 219.7 155.1 209.2C179.6 177.9 216.3 160 256 160c31.78 0 61.37 11.94 84.58 32.61l19.28-19.29C368.8 164.4 384 170.7 384 183.3V259.7z\"],\n    \"campground\": [576, 512, [9978], \"f6bb\", \"M328.1 112L563.7 405.4C571.7 415.4 576 427.7 576 440.4V464C576 490.5 554.5 512 528 512H48C21.49 512 0 490.5 0 464V440.4C0 427.7 4.328 415.4 12.27 405.4L247 112L199 51.99C187.1 38.19 190.2 18.05 204 7.013C217.8-4.027 237.9-1.789 248.1 12.01L288 60.78L327 12.01C338.1-1.789 358.2-4.027 371.1 7.013C385.8 18.05 388 38.19 376.1 51.99L328.1 112zM407.5 448L288 291.7L168.5 448H407.5z\"],\n    \"candy-cane\": [512, 512, [], \"f786\", \"M497.5 91.1C469.6 33.13 411.8 0 352.4 0c-27.88 0-56.14 7.25-81.77 22.62L243.1 38.1C227.9 48.12 223 67.75 232.1 82.87l32.76 54.87c8.522 14.2 27.59 20.6 43.88 11.06l27.51-16.37c5.125-3.125 10.95-4.439 16.58-4.439c10.88 0 21.35 5.625 27.35 15.62c9 15.12 3.917 34.59-11.08 43.71L15.6 397.6c-15.25 9.125-20.13 28.62-11 43.87l32.76 54.87c8.522 14.2 27.59 20.66 43.88 11.12l347.4-206.5C500.2 258.1 533.2 167.5 497.5 91.1zM319.7 104.1L317.2 106.5l-20.5-61.5c9.75-4.75 19.88-8.125 30.38-10.25l20.63 61.87C337.8 97.37 328.2 99.87 319.7 104.1zM145.8 431.7l-60.5-38.5l30.88-18.25l60.5 38.5L145.8 431.7zM253.3 367.9l-60.5-38.5l30.88-18.25l60.5 38.5L253.3 367.9zM364.2 301.1L303.7 263.5l30.88-18.25l60.5 38.5L364.2 301.1zM384.7 104.7l46-45.1c8.375 6.5 16 13.1 22.5 22.5l-45.63 45.81C401.9 117.8 393.9 110.1 384.7 104.7zM466.7 212.5l-59.5-19.75c3.25-5.375 5.875-10.1 7.5-17.12c1-4.5 1.625-9.125 1.75-13.62l60.38 20.12C474.7 192.5 471.4 202.7 466.7 212.5z\"],\n    \"cannabis\": [576, 512, [], \"f55f\", \"M544 374.4c0 6-3.25 11.38-8.5 14.12c-2.5 1.375-60.75 31.75-133.5 31.75c-6.124 0-12-.125-17.5-.25c11.38 22.25 16.5 38.25 16.75 39.13c1.875 5.75 .375 12-3.875 16.12c-4.125 4.25-10.38 5.75-16.12 4c-1.631-.4648-32.94-10.66-69.25-34.06v42.81C312 501.3 301.3 512 288 512s-24-10.75-24-23.1v-42.81c-36.31 23.4-67.62 33.59-69.25 34.06c-5.75 1.75-12 .25-16.12-4c-4.25-4.25-5.75-10.38-3.875-16.12C175 458.3 180.1 442.1 191.5 420c-5.501 .125-11.37 .25-17.5 .25c-72.75 0-130.1-30.38-133.5-31.75C35.25 385.8 32 380.4 32 374.4c0-5.875 3.25-11.38 8.5-14.12c1.625-.875 32.38-16.88 76.75-25.75c-64.25-75.13-84-161.8-84.88-165.8C31.25 163.5 32.75 157.9 36.63 154C39.75 151 43.75 149.4 48 149.4c1.125 0 2.25 .125 3.375 .375C55.38 150.6 137.1 169.3 212 229.5V225.1c0-118.9 60-213.8 62.5-217.8C277.5 2.75 282.5 0 288 0s10.5 2.75 13.5 7.375C304 11.38 364 106.3 364 225.1V229.5c73.1-60.25 156.6-79 160.5-79.75C525.8 149.5 526.9 149.4 528 149.4c4.25 0 8.25 1.625 11.38 4.625c3.75 3.875 5.375 9.5 4.25 14.75c-.875 4-20.62 90.63-84.88 165.8c44.38 8.875 75.13 24.88 76.75 25.75C540.8 363 544 368.5 544 374.4z\"],\n    \"capsules\": [576, 512, [], \"f46b\", \"M555.3 300.1L424.3 112.8C401.9 81 366.4 64 330.4 64c-22.63 0-45.5 6.75-65.5 20.75C245.2 98.5 231.2 117.5 223.4 138.5C220.5 79.25 171.1 32 111.1 32c-61.88 0-111.1 50.08-111.1 111.1L-.0028 368c0 61.88 50.12 112 112 112s112-50.13 112-112L223.1 218.9C227.2 227.5 231.2 236 236.7 243.9l131.3 187.4C390.3 463 425.8 480 461.8 480c22.75 0 45.5-6.75 65.5-20.75C579 423.1 591.5 351.8 555.3 300.1zM159.1 256H63.99V144c0-26.5 21.5-48 48-48s48 21.5 48 48V256zM354.8 300.9l-65.5-93.63c-7.75-11-10.75-24.5-8.375-37.63c2.375-13.25 9.75-24.87 20.75-32.5C310.1 131.1 320.1 128 330.4 128c16.5 0 31.88 8 41.38 21.5l65.5 93.75L354.8 300.9z\"],\n    \"car\": [512, 512, [128664, \"automobile\"], \"f1b9\", \"M39.61 196.8L74.8 96.29C88.27 57.78 124.6 32 165.4 32H346.6C387.4 32 423.7 57.78 437.2 96.29L472.4 196.8C495.6 206.4 512 229.3 512 256V448C512 465.7 497.7 480 480 480H448C430.3 480 416 465.7 416 448V400H96V448C96 465.7 81.67 480 64 480H32C14.33 480 0 465.7 0 448V256C0 229.3 16.36 206.4 39.61 196.8V196.8zM109.1 192H402.9L376.8 117.4C372.3 104.6 360.2 96 346.6 96H165.4C151.8 96 139.7 104.6 135.2 117.4L109.1 192zM96 256C78.33 256 64 270.3 64 288C64 305.7 78.33 320 96 320C113.7 320 128 305.7 128 288C128 270.3 113.7 256 96 256zM416 320C433.7 320 448 305.7 448 288C448 270.3 433.7 256 416 256C398.3 256 384 270.3 384 288C384 305.7 398.3 320 416 320z\"],\n    \"car-battery\": [512, 512, [\"battery-car\"], \"f5df\", \"M80 96C80 78.33 94.33 64 112 64H176C193.7 64 208 78.33 208 96H304C304 78.33 318.3 64 336 64H400C417.7 64 432 78.33 432 96H448C483.3 96 512 124.7 512 160V384C512 419.3 483.3 448 448 448H64C28.65 448 0 419.3 0 384V160C0 124.7 28.65 96 64 96H80zM384 192C384 183.2 376.8 176 368 176C359.2 176 352 183.2 352 192V224H320C311.2 224 304 231.2 304 240C304 248.8 311.2 256 320 256H352V288C352 296.8 359.2 304 368 304C376.8 304 384 296.8 384 288V256H416C424.8 256 432 248.8 432 240C432 231.2 424.8 224 416 224H384V192zM96 256H192C200.8 256 208 248.8 208 240C208 231.2 200.8 224 192 224H96C87.16 224 80 231.2 80 240C80 248.8 87.16 256 96 256z\"],\n    \"car-crash\": [640, 512, [], \"f5e1\", \"M176 8C182.6 8 188.4 11.1 190.9 18.09L220.3 92.05L296.4 68.93C302.7 67.03 309.5 69.14 313.6 74.27C314.1 74.85 314.5 75.45 314.9 76.08C297.8 84.32 282.7 96.93 271.4 113.3L230.4 172.5C203.1 181.4 180.6 203.5 172.6 233.4L152.7 307.4L117.4 339.9C112.6 344.4 105.5 345.4 99.64 342.6C93.73 339.7 90.16 333.6 90.62 327L96.21 247.6L17.56 235.4C11.08 234.4 5.871 229.6 4.413 223.2C2.954 216.8 5.54 210.1 10.94 206.4L76.5 161.3L37.01 92.18C33.76 86.49 34.31 79.39 38.4 74.27C42.48 69.14 49.28 67.03 55.55 68.93L131.7 92.05L161.1 18.09C163.6 11.1 169.4 8 176 8L176 8zM384.2 99.67L519.8 135.1C552.5 144.7 576.1 173.1 578.8 206.8L585.7 290.7C602.9 304.2 611.3 327 605.3 349.4L570.1 480.8C565.5 497.8 547.1 507.1 530.9 503.4L515.5 499.3C498.4 494.7 488.3 477.1 492.8 460.1L501.1 429.1L253.8 362.9L245.6 393.8C240.1 410.9 223.4 421 206.4 416.4L190.9 412.3C173.8 407.7 163.7 390.2 168.3 373.1L203.5 241.7C209.5 219.3 228.2 203.8 249.8 200.7L297.7 131.5C316.9 103.6 351.6 90.92 384.2 99.67L384.2 99.67zM367.7 161.5C361.1 159.7 354.2 162.3 350.4 167.8L318.1 214.5L519.6 268.5L515 211.1C514.5 205.2 509.8 199.6 503.2 197.8L367.7 161.5zM268.3 308.8C281.1 312.2 294.3 304.6 297.7 291.8C301.2 279 293.6 265.9 280.8 262.4C267.1 259 254.8 266.6 251.4 279.4C247.9 292.2 255.5 305.4 268.3 308.8zM528 328.7C515.2 325.3 502.1 332.9 498.6 345.7C495.2 358.5 502.8 371.6 515.6 375.1C528.4 378.5 541.6 370.9 545 358.1C548.4 345.3 540.8 332.1 528 328.7z\"],\n    \"car-rear\": [512, 512, [\"car-alt\"], \"f5de\", \"M165.4 32H346.6C387.4 32 423.7 57.78 437.2 96.29L472.4 196.8C495.6 206.4 512 229.3 512 256V336C512 359.7 499.1 380.4 480 391.4V448C480 465.7 465.7 480 448 480H416C398.3 480 384 465.7 384 448V400H128V448C128 465.7 113.7 480 96 480H64C46.33 480 32 465.7 32 448V391.4C12.87 380.4 0 359.7 0 336V256C0 229.3 16.36 206.4 39.61 196.8L74.8 96.29C88.27 57.78 124.6 32 165.4 32V32zM165.4 96C151.8 96 139.7 104.6 135.2 117.4L109.1 192H402.9L376.8 117.4C372.3 104.6 360.2 96 346.6 96H165.4zM208 272C199.2 272 192 279.2 192 288V320C192 328.8 199.2 336 208 336H304C312.8 336 320 328.8 320 320V288C320 279.2 312.8 272 304 272H208zM72 304H104C117.3 304 128 293.3 128 280C128 266.7 117.3 256 104 256H72C58.75 256 48 266.7 48 280C48 293.3 58.75 304 72 304zM408 256C394.7 256 384 266.7 384 280C384 293.3 394.7 304 408 304H440C453.3 304 464 293.3 464 280C464 266.7 453.3 256 440 256H408z\"],\n    \"car-side\": [640, 512, [128663], \"f5e4\", \"M640 320V368C640 385.7 625.7 400 608 400H574.7C567.1 445.4 527.6 480 480 480C432.4 480 392.9 445.4 385.3 400H254.7C247.1 445.4 207.6 480 160 480C112.4 480 72.94 445.4 65.33 400H32C14.33 400 0 385.7 0 368V256C0 228.9 16.81 205.8 40.56 196.4L82.2 92.35C96.78 55.9 132.1 32 171.3 32H353.2C382.4 32 409.1 45.26 428.2 68.03L528.2 193C591.2 200.1 640 254.8 640 319.1V320zM171.3 96C158.2 96 146.5 103.1 141.6 116.1L111.3 192H224V96H171.3zM272 192H445.4L378.2 108C372.2 100.4 362.1 96 353.2 96H272V192zM525.3 400C527 394.1 528 389.6 528 384C528 357.5 506.5 336 480 336C453.5 336 432 357.5 432 384C432 389.6 432.1 394.1 434.7 400C441.3 418.6 459.1 432 480 432C500.9 432 518.7 418.6 525.3 400zM205.3 400C207 394.1 208 389.6 208 384C208 357.5 186.5 336 160 336C133.5 336 112 357.5 112 384C112 389.6 112.1 394.1 114.7 400C121.3 418.6 139.1 432 160 432C180.9 432 198.7 418.6 205.3 400z\"],\n    \"caravan\": [640, 512, [], \"f8ff\", \"M0 112C0 67.82 35.82 32 80 32H416C504.4 32 576 103.6 576 192V352H608C625.7 352 640 366.3 640 384C640 401.7 625.7 416 608 416H288C288 469 245 512 192 512C138.1 512 96 469 96 416H80C35.82 416 0 380.2 0 336V112zM320 352H448V256H416C407.2 256 400 248.8 400 240C400 231.2 407.2 224 416 224H448V160C448 142.3 433.7 128 416 128H352C334.3 128 320 142.3 320 160V352zM96 128C78.33 128 64 142.3 64 160V224C64 241.7 78.33 256 96 256H224C241.7 256 256 241.7 256 224V160C256 142.3 241.7 128 224 128H96zM192 464C218.5 464 240 442.5 240 416C240 389.5 218.5 368 192 368C165.5 368 144 389.5 144 416C144 442.5 165.5 464 192 464z\"],\n    \"caret-down\": [320, 512, [], \"f0d7\", \"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"],\n    \"caret-left\": [256, 512, [], \"f0d9\", \"M137.4 406.6l-128-127.1C3.125 272.4 0 264.2 0 255.1s3.125-16.38 9.375-22.63l128-127.1c9.156-9.156 22.91-11.9 34.88-6.943S192 115.1 192 128v255.1c0 12.94-7.781 24.62-19.75 29.58S146.5 415.8 137.4 406.6z\"],\n    \"caret-right\": [256, 512, [], \"f0da\", \"M118.6 105.4l128 127.1C252.9 239.6 256 247.8 256 255.1s-3.125 16.38-9.375 22.63l-128 127.1c-9.156 9.156-22.91 11.9-34.88 6.943S64 396.9 64 383.1V128c0-12.94 7.781-24.62 19.75-29.58S109.5 96.23 118.6 105.4z\"],\n    \"caret-up\": [320, 512, [], \"f0d8\", \"M9.39 265.4l127.1-128C143.6 131.1 151.8 128 160 128s16.38 3.125 22.63 9.375l127.1 128c9.156 9.156 11.9 22.91 6.943 34.88S300.9 320 287.1 320H32.01c-12.94 0-24.62-7.781-29.58-19.75S.2333 274.5 9.39 265.4z\"],\n    \"carrot\": [512, 512, [129365], \"f787\", \"M298.2 156.6C245.5 130.9 183.7 146.1 147.1 189.4l55.27 55.31c6.25 6.25 6.25 16.33 0 22.58c-3.127 3-7.266 4.605-11.39 4.605s-8.068-1.605-11.19-4.605L130.3 217l-128.1 262.8c-2.875 6-3 13.25 0 19.63c5.5 11.12 19 15.75 30 10.38l133.6-65.25L116.7 395.3c-6.377-6.125-6.377-16.38 0-22.5c6.25-6.25 16.37-6.25 22.5 0l56.98 56.98l102-49.89c24-11.63 44.5-31.26 57.13-57.13C385.5 261.1 359.9 186.8 298.2 156.6zM390.2 121.8C409.7 81 399.7 32.88 359.1 0c-50.25 41.75-52.51 107.5-7.875 151.9l8 8C404.5 204.5 470.4 202.3 512 152C479.1 112.3 430.1 102.3 390.2 121.8z\"],\n    \"cart-arrow-down\": [576, 512, [], \"f218\", \"M0 24C0 10.75 10.75 0 24 0H96C107.5 0 117.4 8.19 119.6 19.51L121.1 32H312V134.1L288.1 111C279.6 101.7 264.4 101.7 255 111C245.7 120.4 245.7 135.6 255 144.1L319 208.1C328.4 218.3 343.6 218.3 352.1 208.1L416.1 144.1C426.3 135.6 426.3 120.4 416.1 111C407.6 101.7 392.4 101.7 383 111L360 134.1V32H541.8C562.1 32 578.3 52.25 572.6 72.66L518.6 264.7C514.7 278.5 502.1 288 487.8 288H170.7L179.9 336H488C501.3 336 512 346.7 512 360C512 373.3 501.3 384 488 384H159.1C148.5 384 138.6 375.8 136.4 364.5L76.14 48H24C10.75 48 0 37.25 0 24V24zM224 464C224 490.5 202.5 512 176 512C149.5 512 128 490.5 128 464C128 437.5 149.5 416 176 416C202.5 416 224 437.5 224 464zM416 464C416 437.5 437.5 416 464 416C490.5 416 512 437.5 512 464C512 490.5 490.5 512 464 512C437.5 512 416 490.5 416 464z\"],\n    \"cart-flatbed\": [640, 512, [\"dolly-flatbed\"], \"f474\", \"M240 320h320c26.4 0 48-21.6 48-48v-192C608 53.6 586.4 32 560 32H448v128l-48-32L352 160V32H240C213.6 32 192 53.6 192 80v192C192 298.4 213.6 320 240 320zM608 384H128V64c0-35.2-28.8-64-64-64H31.1C14.4 0 0 14.4 0 32S14.4 64 31.1 64H48C56.84 64 64 71.16 64 80v335.1c0 17.6 14.4 32 32 32l66.92-.0009C161.1 453 160 458.4 160 464C160 490.5 181.5 512 208 512S256 490.5 256 464c0-5.641-1.13-10.97-2.917-16h197.9c-1.787 5.027-2.928 10.36-2.928 16C448 490.5 469.5 512 496 512c26.51 0 48.01-21.49 48.01-47.1c0-5.641-1.12-10.97-2.907-16l66.88 .0009C625.6 448 640 433.6 640 415.1C640 398.4 625.6 384 608 384z\"],\n    \"cart-flatbed-suitcase\": [640, 512, [\"luggage-cart\"], \"f59d\", \"M541.2 448C542.1 453 544.1 458.4 544.1 464C544.1 490.5 522.6 512 496 512C469.5 512 448.1 490.5 448.1 464C448.1 458.4 449.2 453 450.1 448H253.1C254.9 453 256 458.4 256 464C256 490.5 234.5 512 208 512C181.5 512 160 490.5 160 464C160 458.4 161.1 453 162.9 448L96 448C78.4 448 64 433.6 64 416V80C64 71.16 56.84 64 48 64H32C14.4 64 0 49.6 0 32C0 14.4 14.4 0 32 0H64C99.2 0 128 28.8 128 64V384H608C625.6 384 640 398.4 640 416C640 433.6 625.6 448 608 448L541.2 448zM432 0C458.5 0 480 21.5 480 48V320H288V48C288 21.5 309.5 0 336 0H432zM336 96H432V48H336V96zM256 320H224C206.4 320 192 305.6 192 288V128C192 110.4 206.4 96 224 96H256V320zM576 128V288C576 305.6 561.6 320 544 320H512V96H544C561.6 96 576 110.4 576 128z\"],\n    \"cart-plus\": [576, 512, [], \"f217\", \"M96 0C107.5 0 117.4 8.19 119.6 19.51L121.1 32H541.8C562.1 32 578.3 52.25 572.6 72.66L518.6 264.7C514.7 278.5 502.1 288 487.8 288H170.7L179.9 336H488C501.3 336 512 346.7 512 360C512 373.3 501.3 384 488 384H159.1C148.5 384 138.6 375.8 136.4 364.5L76.14 48H24C10.75 48 0 37.25 0 24C0 10.75 10.75 0 24 0H96zM272 180H316V224C316 235 324.1 244 336 244C347 244 356 235 356 224V180H400C411 180 420 171 420 160C420 148.1 411 140 400 140H356V96C356 84.95 347 76 336 76C324.1 76 316 84.95 316 96V140H272C260.1 140 252 148.1 252 160C252 171 260.1 180 272 180zM128 464C128 437.5 149.5 416 176 416C202.5 416 224 437.5 224 464C224 490.5 202.5 512 176 512C149.5 512 128 490.5 128 464zM512 464C512 490.5 490.5 512 464 512C437.5 512 416 490.5 416 464C416 437.5 437.5 416 464 416C490.5 416 512 437.5 512 464z\"],\n    \"cart-shopping\": [576, 512, [128722, \"shopping-cart\"], \"f07a\", \"M96 0C107.5 0 117.4 8.19 119.6 19.51L121.1 32H541.8C562.1 32 578.3 52.25 572.6 72.66L518.6 264.7C514.7 278.5 502.1 288 487.8 288H170.7L179.9 336H488C501.3 336 512 346.7 512 360C512 373.3 501.3 384 488 384H159.1C148.5 384 138.6 375.8 136.4 364.5L76.14 48H24C10.75 48 0 37.25 0 24C0 10.75 10.75 0 24 0H96zM128 464C128 437.5 149.5 416 176 416C202.5 416 224 437.5 224 464C224 490.5 202.5 512 176 512C149.5 512 128 490.5 128 464zM512 464C512 490.5 490.5 512 464 512C437.5 512 416 490.5 416 464C416 437.5 437.5 416 464 416C490.5 416 512 437.5 512 464z\"],\n    \"cash-register\": [512, 512, [], \"f788\", \"M288 0C305.7 0 320 14.33 320 32V96C320 113.7 305.7 128 288 128H208V160H424.1C456.6 160 483.5 183.1 488.2 214.4L510.9 364.1C511.6 368.8 512 373.6 512 378.4V448C512 483.3 483.3 512 448 512H64C28.65 512 0 483.3 0 448V378.4C0 373.6 .3622 368.8 1.083 364.1L23.76 214.4C28.5 183.1 55.39 160 87.03 160H143.1V128H63.1C46.33 128 31.1 113.7 31.1 96V32C31.1 14.33 46.33 0 63.1 0L288 0zM96 48C87.16 48 80 55.16 80 64C80 72.84 87.16 80 96 80H256C264.8 80 272 72.84 272 64C272 55.16 264.8 48 256 48H96zM80 448H432C440.8 448 448 440.8 448 432C448 423.2 440.8 416 432 416H80C71.16 416 64 423.2 64 432C64 440.8 71.16 448 80 448zM112 216C98.75 216 88 226.7 88 240C88 253.3 98.75 264 112 264C125.3 264 136 253.3 136 240C136 226.7 125.3 216 112 216zM208 264C221.3 264 232 253.3 232 240C232 226.7 221.3 216 208 216C194.7 216 184 226.7 184 240C184 253.3 194.7 264 208 264zM160 296C146.7 296 136 306.7 136 320C136 333.3 146.7 344 160 344C173.3 344 184 333.3 184 320C184 306.7 173.3 296 160 296zM304 264C317.3 264 328 253.3 328 240C328 226.7 317.3 216 304 216C290.7 216 280 226.7 280 240C280 253.3 290.7 264 304 264zM256 296C242.7 296 232 306.7 232 320C232 333.3 242.7 344 256 344C269.3 344 280 333.3 280 320C280 306.7 269.3 296 256 296zM400 264C413.3 264 424 253.3 424 240C424 226.7 413.3 216 400 216C386.7 216 376 226.7 376 240C376 253.3 386.7 264 400 264zM352 296C338.7 296 328 306.7 328 320C328 333.3 338.7 344 352 344C365.3 344 376 333.3 376 320C376 306.7 365.3 296 352 296z\"],\n    \"cat\": [576, 512, [128008], \"f6be\", \"M322.6 192C302.4 192 215.8 194 160 278V192c0-53-43-96-96-96C46.38 96 32 110.4 32 128s14.38 32 32 32s32 14.38 32 32v256c0 35.25 28.75 64 64 64h176c8.875 0 16-7.125 16-15.1V480c0-17.62-14.38-32-32-32h-32l128-96v144c0 8.875 7.125 16 16 16h32c8.875 0 16-7.125 16-16V289.9c-10.25 2.625-20.88 4.5-32 4.5C386.2 294.4 334.5 250.4 322.6 192zM480 96h-64l-64-64v134.4c0 53 43 95.1 96 95.1s96-42.1 96-95.1V32L480 96zM408 176c-8.875 0-16-7.125-16-16s7.125-16 16-16s16 7.125 16 16S416.9 176 408 176zM488 176c-8.875 0-16-7.125-16-16s7.125-16 16-16s16 7.125 16 16S496.9 176 488 176z\"],\n    \"cedi-sign\": [320, 512, [], \"e0df\", \"M224 66.66C254.9 71.84 283.2 84.39 307.2 102.4C321.4 113 324.2 133.1 313.6 147.2C302.1 161.4 282.9 164.2 268.8 153.6C255.6 143.7 240.4 136.3 224 132V379.1C240.4 375.7 255.6 368.3 268.8 358.4C282.9 347.8 302.1 350.6 313.6 364.8C324.2 378.9 321.4 398.1 307.2 409.6C283.2 427.6 254.9 440.2 224 445.3V480C224 497.7 209.7 512 192 512C174.3 512 160 497.7 160 480V445.3C69.19 430.1 0 351.1 0 256C0 160.9 69.19 81.89 160 66.65V32C160 14.33 174.3 0 192 0C209.7 0 224 14.33 224 32V66.66zM160 132C104.8 146.2 64 196.4 64 255.1C64 315.6 104.8 365.8 160 379.1V132z\"],\n    \"cent-sign\": [320, 512, [], \"e3f5\", \"M192 0C209.7 0 224 14.33 224 32V66.66C254.9 71.84 283.2 84.39 307.2 102.4C321.4 113 324.2 133.1 313.6 147.2C302.1 161.4 282.9 164.2 268.8 153.6C247.4 137.5 220.9 128 192 128C121.3 128 64 185.3 64 256C64 326.7 121.3 384 192 384C220.9 384 247.4 374.5 268.8 358.4C282.9 347.8 302.1 350.6 313.6 364.8C324.2 378.9 321.4 398.1 307.2 409.6C283.2 427.6 254.9 440.2 224 445.3V480C224 497.7 209.7 512 192 512C174.3 512 160 497.7 160 480V445.3C69.19 430.1 0 351.1 0 256C0 160.9 69.19 81.89 160 66.66V32C160 14.33 174.3 .0006 192 .0006V0z\"],\n    \"certificate\": [512, 512, [], \"f0a3\", \"M256 53.46L300.1 7.261C307 1.034 315.1-1.431 324.4 .8185C332.8 3.068 339.3 9.679 341.4 18.1L357.3 80.6L419.3 63.07C427.7 60.71 436.7 63.05 442.8 69.19C448.1 75.34 451.3 84.33 448.9 92.69L431.4 154.7L493.9 170.6C502.3 172.7 508.9 179.2 511.2 187.6C513.4 196 510.1 204.1 504.7 211L458.5 256L504.7 300.1C510.1 307 513.4 315.1 511.2 324.4C508.9 332.8 502.3 339.3 493.9 341.4L431.4 357.3L448.9 419.3C451.3 427.7 448.1 436.7 442.8 442.8C436.7 448.1 427.7 451.3 419.3 448.9L357.3 431.4L341.4 493.9C339.3 502.3 332.8 508.9 324.4 511.2C315.1 513.4 307 510.1 300.1 504.7L256 458.5L211 504.7C204.1 510.1 196 513.4 187.6 511.2C179.2 508.9 172.7 502.3 170.6 493.9L154.7 431.4L92.69 448.9C84.33 451.3 75.34 448.1 69.19 442.8C63.05 436.7 60.71 427.7 63.07 419.3L80.6 357.3L18.1 341.4C9.679 339.3 3.068 332.8 .8186 324.4C-1.431 315.1 1.034 307 7.261 300.1L53.46 256L7.261 211C1.034 204.1-1.431 196 .8186 187.6C3.068 179.2 9.679 172.7 18.1 170.6L80.6 154.7L63.07 92.69C60.71 84.33 63.05 75.34 69.19 69.19C75.34 63.05 84.33 60.71 92.69 63.07L154.7 80.6L170.6 18.1C172.7 9.679 179.2 3.068 187.6 .8185C196-1.431 204.1 1.034 211 7.261L256 53.46z\"],\n    \"chair\": [448, 512, [129681], \"f6c0\", \"M445.1 338.6l-14.77-32C425.1 295.3 413.7 288 401.2 288H46.76C34.28 288 22.94 295.3 17.7 306.6l-14.77 32c-4.563 9.906-3.766 21.47 2.109 30.66S21.09 384 31.1 384l.001 112c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V384h256v112c0 8.836 7.164 16 16 16h31.1c8.838 0 16-7.164 16-16L416 384c10.91 0 21.08-5.562 26.95-14.75S449.6 348.5 445.1 338.6zM111.1 128c0-29.48 16.2-54.1 40-68.87L151.1 256h48l.0092-208h48L247.1 256h48l.0093-196.9C319.8 73 335.1 98.52 335.1 128l-.0094 128h48.03l-.0123-128c0-70.69-57.31-128-128-128H191.1C121.3 0 63.98 57.31 63.98 128l.0158 128h47.97L111.1 128z\"],\n    \"chalkboard\": [576, 512, [\"blackboard\"], \"f51b\", \"M96 96h384v288h64V72C544 50 525.1 32 504 32H72C49.1 32 32 50 32 72V384h64V96zM560 416H416v-48c0-8.838-7.164-16-16-16h-160C231.2 352 224 359.2 224 368V416H16C7.164 416 0 423.2 0 432v32C0 472.8 7.164 480 16 480h544c8.836 0 16-7.164 16-16v-32C576 423.2 568.8 416 560 416z\"],\n    \"chalkboard-user\": [640, 512, [\"chalkboard-teacher\"], \"f51c\", \"M592 0h-384C181.5 0 160 22.25 160 49.63V96c23.42 0 45.1 6.781 63.1 17.81V64h352v288h-64V304c0-8.838-7.164-16-16-16h-96c-8.836 0-16 7.162-16 16V352H287.3c22.07 16.48 39.54 38.5 50.76 64h253.9C618.5 416 640 393.8 640 366.4V49.63C640 22.25 618.5 0 592 0zM160 320c53.02 0 96-42.98 96-96c0-53.02-42.98-96-96-96C106.1 128 64 170.1 64 224C64 277 106.1 320 160 320zM192 352H128c-70.69 0-128 57.31-128 128c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32C320 409.3 262.7 352 192 352z\"],\n    \"champagne-glasses\": [640, 512, [129346, \"glass-cheers\"], \"f79f\", \"M639.4 433.6c-8.374-20.37-31.75-30.12-52.12-21.62l-22.12 9.249l-38.75-101.1c47.87-34.1 64.87-100.2 34.5-152.7l-86.62-150.5c-7.999-13.87-24.1-19.75-39.1-13.62l-114.2 47.37L205.8 2.415C190.8-3.71 173.8 2.165 165.8 16.04L79.15 166.5C48.9 219 65.78 284.3 113.6 319.2l-38.75 101.9L52.78 411.9c-20.37-8.499-43.62 1.25-52.12 21.62c-1.75 4.124 .125 8.749 4.25 10.5l162.4 67.37c3.1 1.75 8.624-.125 10.37-4.249c8.374-20.37-1.25-43.87-21.62-52.37l-22.12-9.124l39.37-103.6c4.5 .4999 8.874 1.25 13.12 1.25c51.75 0 99.37-32.1 113.4-85.24l20.25-75.36l20.25 75.36c13.1 52.24 61.62 85.24 113.4 85.24c4.25 0 8.624-.7499 13.12-1.25l39.25 103.6l-22.12 9.124c-20.37 8.499-30.12 31.1-21.62 52.37c1.75 4.124 6.5 5.999 10.5 4.249l162.4-67.37C639.1 442.2 641.1 437.7 639.4 433.6zM275.9 162.1L163.8 115.6l36.5-63.37L294.8 91.4L275.9 162.1zM364.1 162.1l-18.87-70.74l94.49-39.12l36.5 63.37L364.1 162.1z\"],\n    \"charging-station\": [576, 512, [], \"f5e7\", \"M256 0C291.3 0 320 28.65 320 64V256H336C384.6 256 424 295.4 424 344V376C424 389.3 434.7 400 448 400C461.3 400 472 389.3 472 376V252.3C439.5 242.1 416 211.8 416 176V144C416 135.2 423.2 128 432 128H448V80C448 71.16 455.2 64 464 64C472.8 64 480 71.16 480 80V128H512V80C512 71.16 519.2 64 528 64C536.8 64 544 71.16 544 80V128H560C568.8 128 576 135.2 576 144V176C576 211.8 552.5 242.1 520 252.3V376C520 415.8 487.8 448 448 448C408.2 448 376 415.8 376 376V344C376 321.9 358.1 304 336 304H320V448C337.7 448 352 462.3 352 480C352 497.7 337.7 512 320 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V64C32 28.65 60.65 0 96 0H256zM197.6 83.85L85.59 179.9C80.5 184.2 78.67 191.3 80.99 197.6C83.32 203.8 89.3 208 95.1 208H153.8L128.8 282.9C126.5 289.8 129.1 297.3 135.1 301.3C141 305.3 148.1 304.8 154.4 300.1L266.4 204.1C271.5 199.8 273.3 192.7 271 186.4C268.7 180.2 262.7 176 256 176H198.2L223.2 101.1C225.5 94.24 222.9 86.74 216.9 82.72C210.1 78.71 203 79.17 197.6 83.85V83.85z\"],\n    \"chart-area\": [512, 512, [\"area-chart\"], \"f1fe\", \"M64 400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32C49.67 32 64 46.33 64 64V400zM128 320V236C128 228.3 130.8 220.8 135.9 214.1L215.3 124.2C228.3 109.4 251.4 109.7 263.1 124.8L303.2 171.8C312.2 182.7 328.6 183.4 338.6 173.4L359.6 152.4C372.7 139.3 394.4 140.1 406.5 154.2L472.3 231C477.3 236.8 480 244.2 480 251.8V320C480 337.7 465.7 352 448 352H159.1C142.3 352 127.1 337.7 127.1 320L128 320z\"],\n    \"chart-bar\": [512, 512, [\"bar-chart\"], \"f080\", \"M32 32C49.67 32 64 46.33 64 64V400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32zM128 128C128 110.3 142.3 96 160 96H352C369.7 96 384 110.3 384 128C384 145.7 369.7 160 352 160H160C142.3 160 128 145.7 128 128zM288 192C305.7 192 320 206.3 320 224C320 241.7 305.7 256 288 256H160C142.3 256 128 241.7 128 224C128 206.3 142.3 192 160 192H288zM416 288C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352H160C142.3 352 128 337.7 128 320C128 302.3 142.3 288 160 288H416z\"],\n    \"chart-column\": [512, 512, [], \"e0e3\", \"M32 32C49.67 32 64 46.33 64 64V400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32zM160 224C177.7 224 192 238.3 192 256V320C192 337.7 177.7 352 160 352C142.3 352 128 337.7 128 320V256C128 238.3 142.3 224 160 224zM288 320C288 337.7 273.7 352 256 352C238.3 352 224 337.7 224 320V160C224 142.3 238.3 128 256 128C273.7 128 288 142.3 288 160V320zM352 192C369.7 192 384 206.3 384 224V320C384 337.7 369.7 352 352 352C334.3 352 320 337.7 320 320V224C320 206.3 334.3 192 352 192zM480 320C480 337.7 465.7 352 448 352C430.3 352 416 337.7 416 320V96C416 78.33 430.3 64 448 64C465.7 64 480 78.33 480 96V320z\"],\n    \"chart-gantt\": [512, 512, [], \"e0e4\", \"M32 32C49.67 32 64 46.33 64 64V400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32zM128 128C128 110.3 142.3 96 160 96H256C273.7 96 288 110.3 288 128C288 145.7 273.7 160 256 160H160C142.3 160 128 145.7 128 128zM352 192C369.7 192 384 206.3 384 224C384 241.7 369.7 256 352 256H224C206.3 256 192 241.7 192 224C192 206.3 206.3 192 224 192H352zM448 288C465.7 288 480 302.3 480 320C480 337.7 465.7 352 448 352H384C366.3 352 352 337.7 352 320C352 302.3 366.3 288 384 288H448z\"],\n    \"chart-line\": [512, 512, [\"line-chart\"], \"f201\", \"M64 400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32C49.67 32 64 46.33 64 64V400zM342.6 278.6C330.1 291.1 309.9 291.1 297.4 278.6L240 221.3L150.6 310.6C138.1 323.1 117.9 323.1 105.4 310.6C92.88 298.1 92.88 277.9 105.4 265.4L217.4 153.4C229.9 140.9 250.1 140.9 262.6 153.4L320 210.7L425.4 105.4C437.9 92.88 458.1 92.88 470.6 105.4C483.1 117.9 483.1 138.1 470.6 150.6L342.6 278.6z\"],\n    \"chart-pie\": [576, 512, [\"pie-chart\"], \"f200\", \"M304 16.58C304 7.555 310.1 0 320 0C443.7 0 544 100.3 544 224C544 233 536.4 240 527.4 240H304V16.58zM32 272C32 150.7 122.1 50.34 238.1 34.25C248.2 32.99 256 40.36 256 49.61V288L412.5 444.5C419.2 451.2 418.7 462.2 411 467.7C371.8 495.6 323.8 512 272 512C139.5 512 32 404.6 32 272zM558.4 288C567.6 288 575 295.8 573.8 305C566.1 360.9 539.1 410.6 499.9 447.3C493.9 452.1 484.5 452.5 478.7 446.7L320 288H558.4z\"],\n    \"check\": [448, 512, [10004, 10003], \"f00c\", \"M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z\"],\n    \"check-double\": [448, 512, [], \"f560\", \"M182.6 246.6C170.1 259.1 149.9 259.1 137.4 246.6L57.37 166.6C44.88 154.1 44.88 133.9 57.37 121.4C69.87 108.9 90.13 108.9 102.6 121.4L159.1 178.7L297.4 41.37C309.9 28.88 330.1 28.88 342.6 41.37C355.1 53.87 355.1 74.13 342.6 86.63L182.6 246.6zM182.6 470.6C170.1 483.1 149.9 483.1 137.4 470.6L9.372 342.6C-3.124 330.1-3.124 309.9 9.372 297.4C21.87 284.9 42.13 284.9 54.63 297.4L159.1 402.7L393.4 169.4C405.9 156.9 426.1 156.9 438.6 169.4C451.1 181.9 451.1 202.1 438.6 214.6L182.6 470.6z\"],\n    \"check-to-slot\": [576, 512, [\"vote-yea\"], \"f772\", \"M480 80C480 53.49 458.5 32 432 32h-288C117.5 32 96 53.49 96 80V384h384V80zM378.9 166.8l-88 112c-4.031 5.156-10 8.438-16.53 9.062C273.6 287.1 272.7 287.1 271.1 287.1c-5.719 0-11.21-2.019-15.58-5.769l-56-48C190.3 225.6 189.2 210.4 197.8 200.4c8.656-10.06 23.81-11.19 33.84-2.594l36.97 31.69l72.53-92.28c8.188-10.41 23.31-12.22 33.69-4.062C385.3 141.3 387.1 156.4 378.9 166.8zM528 288H512v112c0 8.836-7.164 16-16 16h-416C71.16 416 64 408.8 64 400V288H48C21.49 288 0 309.5 0 336v96C0 458.5 21.49 480 48 480h480c26.51 0 48-21.49 48-48v-96C576 309.5 554.5 288 528 288z\"],\n    \"cheese\": [512, 512, [], \"f7ef\", \"M0 288v159.1C0 465.6 14.38 480 32 480h448c17.62 0 32-14.38 32-31.1V288H0zM299.9 32.01c-7.75-.25-15.25 2.25-21.12 6.1L0 255.1l512-.0118C512 136.1 417.1 38.26 299.9 32.01z\"],\n    \"chess\": [512, 512, [], \"f439\", \"M74.01 208h-10c-8.875 0-16 7.125-16 16v16c0 8.875 7.122 16 15.1 16h16c-.25 43.13-5.5 86.13-16 128h128c-10.5-41.88-15.75-84.88-16-128h15.1c8.875 0 16-7.125 16-16L208 224c0-8.875-7.122-16-15.1-16h-10l33.88-90.38C216.6 115.8 216.9 113.1 216.9 112.1C216.9 103.1 209.5 96 200.9 96H144V64h16c8.844 0 16-7.156 16-16S168.9 32 160 32h-16l.0033-16c0-8.844-7.16-16-16-16s-16 7.156-16 16V32H96.01c-8.844 0-16 7.156-16 16S87.16 64 96.01 64h16v32H55.13C46.63 96 39.07 102.8 39.07 111.9c0 1.93 .3516 3.865 1.061 5.711L74.01 208zM339.9 301.8L336.6 384h126.8l-3.25-82.25l24.5-20.75C491.9 274.9 496 266 496 256.5V198C496 194.6 493.4 192 489.1 192h-26.37c-3.375 0-6 2.625-6 6V224h-24.75V198C432.9 194.6 430.3 192 426.9 192h-53.75c-3.375 0-6 2.625-6 6V224h-24.75V198C342.4 194.6 339.8 192 336.4 192h-26.38C306.6 192 304 194.6 304 198v58.62c0 9.375 4.125 18.25 11.38 24.38L339.9 301.8zM384 304C384 295.1 391.1 288 400 288S416 295.1 416 304v32h-32V304zM247.1 459.6L224 448v-16C224 423.1 216.9 416 208 416h-160C39.13 416 32 423.1 32 432V448l-23.12 11.62C3.375 462.3 0 467.9 0 473.9V496C0 504.9 7.125 512 16 512h224c8.875 0 16-7.125 16-16v-22.12C256 467.9 252.6 462.3 247.1 459.6zM503.1 459.6L480 448v-16c0-8.875-7.125-16-16-16h-128c-8.875 0-16 7.125-16 16V448l-23.12 11.62C291.4 462.3 288 467.9 288 473.9V496c0 8.875 7.125 16 16 16h192c8.875 0 16-7.125 16-16v-22.12C512 467.9 508.6 462.3 503.1 459.6z\"],\n    \"chess-bishop\": [320, 512, [9821], \"f43a\", \"M272 448h-224C21.49 448 0 469.5 0 496C0 504.8 7.164 512 16 512h288c8.836 0 16-7.164 16-16C320 469.5 298.5 448 272 448zM8 287.9c0 51.63 22.12 73.88 56 84.63V416h192v-43.5c33.88-10.75 56-33 56-84.63c0-30.62-10.75-67.13-26.75-102.5L185 285.6c-1.565 1.565-3.608 2.349-5.651 2.349c-2.036 0-4.071-.7787-5.63-2.339l-11.35-11.27c-1.56-1.56-2.339-3.616-2.339-5.672c0-2.063 .7839-4.128 2.349-5.693l107.9-107.9C249.5 117.3 223.8 83 199.4 62.5C213.4 59.13 224 47 224 32c0-17.62-14.38-32-32-32H128C110.4 0 96 14.38 96 32c0 15 10.62 27.12 24.62 30.5C67.75 106.8 8 214.5 8 287.9z\"],\n    \"chess-board\": [448, 512, [], \"f43c\", \"M192 224H128v64h64V224zM384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96C448 60.65 419.3 32 384 32zM384 160h-64v64h64v64h-64v64h64v64h-64v-64h-64v64H192v-64H128v64H64v-64h64V288H64V224h64V160H64V96h64v64h64V96h64v64h64V96h64V160zM192 288v64h64V288H192zM256 224V160H192v64H256zM256 288h64V224h-64V288z\"],\n    \"chess-king\": [448, 512, [9818], \"f43f\", \"M367.1 448H79.97c-26.51 0-48.01 21.49-48.01 47.1C31.96 504.8 39.13 512 47.96 512h352c8.838 0 16-7.163 16-16C416 469.5 394.5 448 367.1 448zM416.1 160h-160V112h16.01c17.6 0 31.98-14.4 31.98-32C303.1 62.4 289.6 48 272 48h-16.01V32C256 14.4 241.6 0 223.1 0C206.4 0 191.1 14.4 191.1 32.01V48H175.1c-17.6 0-32.01 14.4-32.01 32C143.1 97.6 158.4 112 175.1 112h16.01V160h-160C17.34 160 0 171.5 0 192C0 195.2 .4735 198.4 1.437 201.5L74.46 416h299.1l73.02-214.5C447.5 198.4 448 195.2 448 192C448 171.6 430.1 160 416.1 160z\"],\n    \"chess-knight\": [384, 512, [9822], \"f441\", \"M19 272.5l40.62 18C63.78 292.3 68.25 293.3 72.72 293.3c4 0 8.001-.7543 11.78-2.289l12.75-5.125c9.125-3.625 16-11.12 18.75-20.5L125.2 234.8C127 227.9 131.5 222.2 137.9 219.1L160 208v50.38C160 276.5 149.6 293.1 133.4 301.2L76.25 329.9C49.12 343.5 32 371.1 32 401.5V416h319.9l-.0417-192c0-105.1-85.83-192-191.8-192H12C5.375 32 0 37.38 0 44c0 2.625 .625 5.25 1.75 7.625L16 80L7 89C2.5 93.5 0 99.62 0 106V243.2C0 255.9 7.5 267.4 19 272.5zM52 128C63 128 72 137 72 148S63 168 52 168S32 159 32 148S41 128 52 128zM336 448H47.1C21.49 448 0 469.5 0 495.1C0 504.8 7.163 512 16 512h352c8.837 0 16-7.163 16-16C384 469.5 362.5 448 336 448z\"],\n    \"chess-pawn\": [320, 512, [9823], \"f443\", \"M105.1 224H80C71.12 224 64 231.1 64 240v32c0 8.875 7.125 15.1 16 15.1L96 288v5.5C96 337.5 91.88 380.1 72 416h176C228.1 380.1 224 337.5 224 293.5V288l16-.0001c8.875 0 16-7.125 16-15.1v-32C256 231.1 248.9 224 240 224h-25.12C244.3 205.6 264 173.2 264 136C264 78.5 217.5 32 159.1 32S56 78.5 56 136C56 173.2 75.74 205.6 105.1 224zM272 448H47.1C21.49 448 0 469.5 0 495.1C0 504.8 7.163 512 16 512h288c8.837 0 16-7.163 16-16C320 469.5 298.5 448 272 448z\"],\n    \"chess-queen\": [512, 512, [9819], \"f445\", \"M256 112c30.88 0 56-25.12 56-56S286.9 0 256 0S199.1 25.12 199.1 56S225.1 112 256 112zM399.1 448H111.1c-26.51 0-48 21.49-48 47.1C63.98 504.8 71.15 512 79.98 512h352c8.837 0 16-7.163 16-16C447.1 469.5 426.5 448 399.1 448zM511.1 197.4c0-5.178-2.509-10.2-7.096-13.26L476.4 168.2c-2.684-1.789-5.602-2.62-8.497-2.62c-17.22 0-17.39 26.37-51.92 26.37c-29.35 0-47.97-25.38-47.97-50.63C367.1 134 361.1 128 354.6 128h-38.75c-6 0-11.63 4-12.88 9.875C298.2 160.1 278.7 176 255.1 176c-22.75 0-42.25-15.88-47-38.12C207.7 132 202.2 128 196.1 128h-38.75C149.1 128 143.1 134 143.1 141.4c0 18.45-13.73 50.62-47.95 50.62c-34.58 0-34.87-26.39-51.87-26.39c-2.909 0-5.805 .8334-8.432 2.645l-28.63 16C2.509 187.2 0 192.3 0 197.4C0 199.9 .5585 202.3 1.72 204.6L104.2 416h303.5l102.5-211.4C511.4 202.3 511.1 199.8 511.1 197.4z\"],\n    \"chess-rook\": [384, 512, [9820], \"f447\", \"M368 32h-56c-8.875 0-16 7.125-16 16V96h-48V48c0-8.875-7.125-16-16-16h-80c-8.875 0-16 7.125-16 16V96H88.12V48c0-8.875-7.25-16-16-16H16C7.125 32 0 39.12 0 48V224l64 32c0 48.38-1.5 95-13.25 160h282.5C321.5 351 320 303.8 320 256l64-32V48C384 39.12 376.9 32 368 32zM224 320H160V256c0-17.62 14.38-32 32-32s32 14.38 32 32V320zM336 448H47.1C21.49 448 0 469.5 0 495.1C0 504.8 7.163 512 16 512h352c8.837 0 16-7.163 16-16C384 469.5 362.5 448 336 448z\"],\n    \"chevron-down\": [448, 512, [], \"f078\", \"M224 416c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 338.8l169.4-169.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-192 192C240.4 412.9 232.2 416 224 416z\"],\n    \"chevron-left\": [320, 512, [9001], \"f053\", \"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\"],\n    \"chevron-right\": [320, 512, [9002], \"f054\", \"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\"],\n    \"chevron-up\": [448, 512, [], \"f077\", \"M416 352c-8.188 0-16.38-3.125-22.62-9.375L224 173.3l-169.4 169.4c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25C432.4 348.9 424.2 352 416 352z\"],\n    \"child\": [448, 512, [], \"f1ae\", \"M224 144c39.75 0 72-32.25 72-72S263.8-.0004 224-.0004S151.1 32.25 151.1 72S184.3 144 224 144zM415.1 110.8c-13.89-17.14-39.06-19.8-56.25-5.906L307.6 146.4c-47.16 38.19-120.1 38.19-167.3 0L89.17 104.9C72.02 91 46.8 93.67 32.92 110.8C19.02 128 21.66 153.2 38.83 167.1l51.19 41.47c11.73 9.496 24.63 17.16 37.98 23.92L127.1 480c0 17.62 14.38 32 32 32h15.1c17.62 0 32-14.38 32-32v-112h32V480c0 17.62 14.38 32 32 32h15.1c17.62 0 32-14.38 32-32l-.0001-247.5c13.35-6.756 26.25-14.42 37.97-23.91l51.2-41.47C426.3 153.2 428.1 128 415.1 110.8z\"],\n    \"church\": [640, 512, [9962], \"f51d\", \"M344 48H376C389.3 48 400 58.75 400 72C400 85.25 389.3 96 376 96H344V142.4L456.7 210C471.2 218.7 480 234.3 480 251.2V512H384V416C384 380.7 355.3 352 320 352C284.7 352 256 380.7 256 416V512H160V251.2C160 234.3 168.8 218.7 183.3 210L296 142.4V96H264C250.7 96 240 85.25 240 72C240 58.75 250.7 48 264 48H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V48zM24.87 330.3L128 273.6V512H48C21.49 512 0 490.5 0 464V372.4C0 354.9 9.53 338.8 24.87 330.3V330.3zM592 512H512V273.6L615.1 330.3C630.5 338.8 640 354.9 640 372.4V464C640 490.5 618.5 512 592 512V512z\"],\n    \"circle\": [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9898, 9899, 11044, 61708, 61915, 9679], \"f111\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256z\"],\n    \"circle-arrow-down\": [512, 512, [\"arrow-circle-down\"], \"f0ab\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM382.6 302.6l-103.1 103.1C270.7 414.6 260.9 416 256 416c-4.881 0-14.65-1.391-22.65-9.398L129.4 302.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 306.8V128c0-17.69 14.33-32 32-32s32 14.31 32 32v178.8l49.38-49.38c12.5-12.5 32.75-12.5 45.25 0S395.1 290.1 382.6 302.6z\"],\n    \"circle-arrow-left\": [512, 512, [\"arrow-circle-left\"], \"f0a8\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM384 288H205.3l49.38 49.38c12.5 12.5 12.5 32.75 0 45.25s-32.75 12.5-45.25 0L105.4 278.6C97.4 270.7 96 260.9 96 256c0-4.883 1.391-14.66 9.398-22.65l103.1-103.1c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L205.3 224H384c17.69 0 32 14.33 32 32S401.7 288 384 288z\"],\n    \"circle-arrow-right\": [512, 512, [\"arrow-circle-right\"], \"f0a9\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM406.6 278.6l-103.1 103.1c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25L306.8 288H128C110.3 288 96 273.7 96 256s14.31-32 32-32h178.8l-49.38-49.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l103.1 103.1C414.6 241.3 416 251.1 416 256C416 260.9 414.6 270.7 406.6 278.6z\"],\n    \"circle-arrow-up\": [512, 512, [\"arrow-circle-up\"], \"f0aa\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM382.6 254.6c-12.5 12.5-32.75 12.5-45.25 0L288 205.3V384c0 17.69-14.33 32-32 32s-32-14.31-32-32V205.3L174.6 254.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l103.1-103.1C241.3 97.4 251.1 96 256 96c4.881 0 14.65 1.391 22.65 9.398l103.1 103.1C395.1 221.9 395.1 242.1 382.6 254.6z\"],\n    \"circle-check\": [512, 512, [61533, \"check-circle\"], \"f058\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM371.8 211.8C382.7 200.9 382.7 183.1 371.8 172.2C360.9 161.3 343.1 161.3 332.2 172.2L224 280.4L179.8 236.2C168.9 225.3 151.1 225.3 140.2 236.2C129.3 247.1 129.3 264.9 140.2 275.8L204.2 339.8C215.1 350.7 232.9 350.7 243.8 339.8L371.8 211.8z\"],\n    \"circle-chevron-down\": [512, 512, [\"chevron-circle-down\"], \"f13a\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM390.6 246.6l-112 112C272.4 364.9 264.2 368 256 368s-16.38-3.125-22.62-9.375l-112-112c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L256 290.8l89.38-89.38c12.5-12.5 32.75-12.5 45.25 0S403.1 234.1 390.6 246.6z\"],\n    \"circle-chevron-left\": [512, 512, [\"chevron-circle-left\"], \"f137\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM310.6 345.4c12.5 12.5 12.5 32.75 0 45.25s-32.75 12.5-45.25 0l-112-112C147.1 272.4 144 264.2 144 256s3.125-16.38 9.375-22.62l112-112c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L221.3 256L310.6 345.4z\"],\n    \"circle-chevron-right\": [512, 512, [\"chevron-circle-right\"], \"f138\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM358.6 278.6l-112 112c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25L290.8 256L201.4 166.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l112 112C364.9 239.6 368 247.8 368 256S364.9 272.4 358.6 278.6z\"],\n    \"circle-chevron-up\": [512, 512, [\"chevron-circle-up\"], \"f139\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM390.6 310.6c-12.5 12.5-32.75 12.5-45.25 0L256 221.3L166.6 310.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l112-112C239.6 147.1 247.8 144 256 144s16.38 3.125 22.62 9.375l112 112C403.1 277.9 403.1 298.1 390.6 310.6z\"],\n    \"circle-dollar-to-slot\": [512, 512, [\"donate\"], \"f4b9\", \"M326.7 403.7C304.7 411.6 280.8 416 256 416C231.2 416 207.3 411.6 185.3 403.7C184.1 403.6 184.7 403.5 184.5 403.4C154.4 392.4 127.6 374.6 105.9 352C70.04 314.6 48 263.9 48 208C48 93.12 141.1 0 256 0C370.9 0 464 93.12 464 208C464 263.9 441.1 314.6 406.1 352C405.1 353 404.1 354.1 403.1 355.1C381.7 376.4 355.7 393.2 326.7 403.7L326.7 403.7zM235.9 111.1V118C230.3 119.2 224.1 120.9 220 123.1C205.1 129.9 192.1 142.5 188.9 160.8C187.1 171 188.1 180.9 192.3 189.8C196.5 198.6 203 204.8 209.6 209.3C221.2 217.2 236.5 221.8 248.2 225.3L250.4 225.9C264.4 230.2 273.8 233.3 279.7 237.6C282.2 239.4 283.1 240.8 283.4 241.7C283.8 242.5 284.4 244.3 283.7 248.3C283.1 251.8 281.2 254.8 275.7 257.1C269.6 259.7 259.7 261 246.9 259C240.9 258 230.2 254.4 220.7 251.2C218.5 250.4 216.3 249.7 214.3 249C203.8 245.5 192.5 251.2 189 261.7C185.5 272.2 191.2 283.5 201.7 286.1C202.9 287.4 204.4 287.9 206.1 288.5C213.1 291.2 226.4 295.4 235.9 297.6V304C235.9 315.1 244.9 324.1 255.1 324.1C267.1 324.1 276.1 315.1 276.1 304V298.5C281.4 297.5 286.6 295.1 291.4 293.9C307.2 287.2 319.8 274.2 323.1 255.2C324.9 244.8 324.1 234.8 320.1 225.7C316.2 216.7 309.9 210.1 303.2 205.3C291.1 196.4 274.9 191.6 262.8 187.9L261.1 187.7C247.8 183.4 238.2 180.4 232.1 176.2C229.5 174.4 228.7 173.2 228.5 172.7C228.3 172.3 227.7 171.1 228.3 167.7C228.7 165.7 230.2 162.4 236.5 159.6C242.1 156.7 252.9 155.1 265.1 156.1C269.5 157.7 283 160.3 286.9 161.3C297.5 164.2 308.5 157.8 311.3 147.1C314.2 136.5 307.8 125.5 297.1 122.7C292.7 121.5 282.7 119.5 276.1 118.3V112C276.1 100.9 267.1 91.9 256 91.9C244.9 91.9 235.9 100.9 235.9 112V111.1zM48 352H63.98C83.43 377.9 108 399.7 136.2 416H64V448H448V416H375.8C403.1 399.7 428.6 377.9 448 352H464C490.5 352 512 373.5 512 400V464C512 490.5 490.5 512 464 512H48C21.49 512 0 490.5 0 464V400C0 373.5 21.49 352 48 352H48z\"],\n    \"circle-dot\": [512, 512, [128280, \"dot-circle\"], \"f192\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 352C309 352 352 309 352 256C352 202.1 309 160 256 160C202.1 160 160 202.1 160 256C160 309 202.1 352 256 352z\"],\n    \"circle-down\": [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M256 512c141.4 0 256-114.6 256-256s-114.6-256-256-256C114.6 0 0 114.6 0 256S114.6 512 256 512zM129.2 265.9C131.7 259.9 137.5 256 144 256h64V160c0-17.67 14.33-32 32-32h32c17.67 0 32 14.33 32 32v96h64c6.469 0 12.31 3.891 14.78 9.875c2.484 5.984 1.109 12.86-3.469 17.44l-112 112c-6.248 6.248-16.38 6.248-22.62 0l-112-112C128.1 278.7 126.7 271.9 129.2 265.9z\"],\n    \"circle-exclamation\": [512, 512, [\"exclamation-circle\"], \"f06a\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM232 152C232 138.8 242.8 128 256 128s24 10.75 24 24v128c0 13.25-10.75 24-24 24S232 293.3 232 280V152zM256 400c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 385.9 273.4 400 256 400z\"],\n    \"circle-h\": [512, 512, [9405, \"hospital-symbol\"], \"f47e\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM368 360c0 13.25-10.75 24-24 24S320 373.3 320 360v-80H192v80C192 373.3 181.3 384 168 384S144 373.3 144 360v-208C144 138.8 154.8 128 168 128S192 138.8 192 152v80h128v-80C320 138.8 330.8 128 344 128s24 10.75 24 24V360z\"],\n    \"circle-half-stroke\": [512, 512, [9680, \"adjust\"], \"f042\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 64V448C362 448 448 362 448 256C448 149.1 362 64 256 64z\"],\n    \"circle-info\": [512, 512, [\"info-circle\"], \"f05a\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z\"],\n    \"circle-left\": [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M0 256c0 141.4 114.6 256 256 256s256-114.6 256-256c0-141.4-114.6-256-256-256S0 114.6 0 256zM246.1 129.2C252.1 131.7 256 137.5 256 144v64h96c17.67 0 32 14.33 32 32v32c0 17.67-14.33 32-32 32h-96v64c0 6.469-3.891 12.31-9.875 14.78c-5.984 2.484-12.86 1.109-17.44-3.469l-112-112c-6.248-6.248-6.248-16.38 0-22.62l112-112C233.3 128.1 240.1 126.7 246.1 129.2z\"],\n    \"circle-minus\": [512, 512, [\"minus-circle\"], \"f056\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM168 232C154.7 232 144 242.7 144 256C144 269.3 154.7 280 168 280H344C357.3 280 368 269.3 368 256C368 242.7 357.3 232 344 232H168z\"],\n    \"circle-notch\": [512, 512, [], \"f1ce\", \"M222.7 32.15C227.7 49.08 218.1 66.9 201.1 71.94C121.8 95.55 64 169.1 64 255.1C64 362 149.1 447.1 256 447.1C362 447.1 448 362 448 255.1C448 169.1 390.2 95.55 310.9 71.94C293.9 66.9 284.3 49.08 289.3 32.15C294.4 15.21 312.2 5.562 329.1 10.6C434.9 42.07 512 139.1 512 255.1C512 397.4 397.4 511.1 256 511.1C114.6 511.1 0 397.4 0 255.1C0 139.1 77.15 42.07 182.9 10.6C199.8 5.562 217.6 15.21 222.7 32.15V32.15z\"],\n    \"circle-pause\": [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM224 191.1v128C224 337.7 209.7 352 192 352S160 337.7 160 320V191.1C160 174.3 174.3 160 191.1 160S224 174.3 224 191.1zM352 191.1v128C352 337.7 337.7 352 320 352S288 337.7 288 320V191.1C288 174.3 302.3 160 319.1 160S352 174.3 352 191.1z\"],\n    \"circle-play\": [512, 512, [61469, \"play-circle\"], \"f144\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM176 168V344C176 352.7 180.7 360.7 188.3 364.9C195.8 369.2 205.1 369 212.5 364.5L356.5 276.5C363.6 272.1 368 264.4 368 256C368 247.6 363.6 239.9 356.5 235.5L212.5 147.5C205.1 142.1 195.8 142.8 188.3 147.1C180.7 151.3 176 159.3 176 168V168z\"],\n    \"circle-plus\": [512, 512, [\"plus-circle\"], \"f055\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 368C269.3 368 280 357.3 280 344V280H344C357.3 280 368 269.3 368 256C368 242.7 357.3 232 344 232H280V168C280 154.7 269.3 144 256 144C242.7 144 232 154.7 232 168V232H168C154.7 232 144 242.7 144 256C144 269.3 154.7 280 168 280H232V344C232 357.3 242.7 368 256 368z\"],\n    \"circle-question\": [512, 512, [62108, \"question-circle\"], \"f059\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 400c-18 0-32-14-32-32s13.1-32 32-32c17.1 0 32 14 32 32S273.1 400 256 400zM325.1 258L280 286V288c0 13-11 24-24 24S232 301 232 288V272c0-8 4-16 12-21l57-34C308 213 312 206 312 198C312 186 301.1 176 289.1 176h-51.1C225.1 176 216 186 216 198c0 13-11 24-24 24s-24-11-24-24C168 159 199 128 237.1 128h51.1C329 128 360 159 360 198C360 222 347 245 325.1 258z\"],\n    \"circle-radiation\": [512, 512, [9762, \"radiation-alt\"], \"f7ba\", \"M226.4 208.6L184.8 141.9C179.6 133.7 168.3 132 160.7 138.2C130.8 162.3 110.1 197.4 105.1 237.4C103.9 247.2 111.2 256 121 256H200C200 236 210.6 218.6 226.4 208.6zM256 288c17.67 0 32-14.33 32-32s-14.33-32-32-32C238.3 224 224 238.3 224 256S238.3 288 256 288zM285.6 303.3C276.1 308.7 266.9 312 256 312c-10.89 0-20.98-3.252-29.58-8.65l-41.74 66.8c-5.211 8.338-1.613 19.07 7.27 23.29C211.4 402.7 233.1 408 256 408c22.97 0 44.64-5.334 64.12-14.59c8.883-4.219 12.48-14.95 7.262-23.29L285.6 303.3zM351.4 138.2c-7.604-6.145-18.86-4.518-24.04 3.77l-41.71 66.67C301.4 218.6 312 236 312 256h78.96c9.844 0 17.11-8.791 15.91-18.56C401.9 197.5 381.3 162.4 351.4 138.2zM256 16C123.4 16 16 123.4 16 256s107.4 240 240 240c132.6 0 240-107.4 240-240S388.6 16 256 16zM256 432c-97.05 0-176-78.99-176-176S158.1 80 256 80s176 78.95 176 176S353 432 256 432z\"],\n    \"circle-right\": [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M512 256c0-141.4-114.6-256-256-256S0 114.6 0 256c0 141.4 114.6 256 256 256S512 397.4 512 256zM265.9 382.8C259.9 380.3 256 374.5 256 368v-64H160c-17.67 0-32-14.33-32-32v-32c0-17.67 14.33-32 32-32h96v-64c0-6.469 3.891-12.31 9.875-14.78c5.984-2.484 12.86-1.109 17.44 3.469l112 112c6.248 6.248 6.248 16.38 0 22.62l-112 112C278.7 383.9 271.9 385.3 265.9 382.8z\"],\n    \"circle-stop\": [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM352 328c0 13.2-10.8 24-24 24h-144C170.8 352 160 341.2 160 328v-144C160 170.8 170.8 160 184 160h144C341.2 160 352 170.8 352 184V328z\"],\n    \"circle-up\": [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256c141.4 0 256-114.6 256-256S397.4 0 256 0zM382.8 246.1C380.3 252.1 374.5 256 368 256h-64v96c0 17.67-14.33 32-32 32h-32c-17.67 0-32-14.33-32-32V256h-64C137.5 256 131.7 252.1 129.2 246.1C126.7 240.1 128.1 233.3 132.7 228.7l112-112c6.248-6.248 16.38-6.248 22.62 0l112 112C383.9 233.3 385.3 240.1 382.8 246.1z\"],\n    \"circle-user\": [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c39.77 0 72 32.24 72 72S295.8 272 256 272c-39.76 0-72-32.24-72-72S216.2 128 256 128zM256 448c-52.93 0-100.9-21.53-135.7-56.29C136.5 349.9 176.5 320 224 320h64c47.54 0 87.54 29.88 103.7 71.71C356.9 426.5 308.9 448 256 448z\"],\n    \"circle-xmark\": [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM175 208.1L222.1 255.1L175 303C165.7 312.4 165.7 327.6 175 336.1C184.4 346.3 199.6 346.3 208.1 336.1L255.1 289.9L303 336.1C312.4 346.3 327.6 346.3 336.1 336.1C346.3 327.6 346.3 312.4 336.1 303L289.9 255.1L336.1 208.1C346.3 199.6 346.3 184.4 336.1 175C327.6 165.7 312.4 165.7 303 175L255.1 222.1L208.1 175C199.6 165.7 184.4 165.7 175 175C165.7 184.4 165.7 199.6 175 208.1V208.1z\"],\n    \"city\": [640, 512, [127961], \"f64f\", \"M480 192H592C618.5 192 640 213.5 640 240V464C640 490.5 618.5 512 592 512H48C21.49 512 0 490.5 0 464V144C0 117.5 21.49 96 48 96H64V24C64 10.75 74.75 0 88 0C101.3 0 112 10.75 112 24V96H176V24C176 10.75 186.7 0 200 0C213.3 0 224 10.75 224 24V96H288V48C288 21.49 309.5 0 336 0H432C458.5 0 480 21.49 480 48V192zM576 368C576 359.2 568.8 352 560 352H528C519.2 352 512 359.2 512 368V400C512 408.8 519.2 416 528 416H560C568.8 416 576 408.8 576 400V368zM240 416C248.8 416 256 408.8 256 400V368C256 359.2 248.8 352 240 352H208C199.2 352 192 359.2 192 368V400C192 408.8 199.2 416 208 416H240zM128 368C128 359.2 120.8 352 112 352H80C71.16 352 64 359.2 64 368V400C64 408.8 71.16 416 80 416H112C120.8 416 128 408.8 128 400V368zM528 256C519.2 256 512 263.2 512 272V304C512 312.8 519.2 320 528 320H560C568.8 320 576 312.8 576 304V272C576 263.2 568.8 256 560 256H528zM256 176C256 167.2 248.8 160 240 160H208C199.2 160 192 167.2 192 176V208C192 216.8 199.2 224 208 224H240C248.8 224 256 216.8 256 208V176zM80 160C71.16 160 64 167.2 64 176V208C64 216.8 71.16 224 80 224H112C120.8 224 128 216.8 128 208V176C128 167.2 120.8 160 112 160H80zM256 272C256 263.2 248.8 256 240 256H208C199.2 256 192 263.2 192 272V304C192 312.8 199.2 320 208 320H240C248.8 320 256 312.8 256 304V272zM112 320C120.8 320 128 312.8 128 304V272C128 263.2 120.8 256 112 256H80C71.16 256 64 263.2 64 272V304C64 312.8 71.16 320 80 320H112zM416 272C416 263.2 408.8 256 400 256H368C359.2 256 352 263.2 352 272V304C352 312.8 359.2 320 368 320H400C408.8 320 416 312.8 416 304V272zM368 64C359.2 64 352 71.16 352 80V112C352 120.8 359.2 128 368 128H400C408.8 128 416 120.8 416 112V80C416 71.16 408.8 64 400 64H368zM416 176C416 167.2 408.8 160 400 160H368C359.2 160 352 167.2 352 176V208C352 216.8 359.2 224 368 224H400C408.8 224 416 216.8 416 208V176z\"],\n    \"clapperboard\": [512, 512, [], \"e131\", \"M326.1 160l127.4-127.4C451.7 32.39 449.9 32 448 32h-86.06l-128 128H326.1zM166.1 160l128-128H201.9l-128 128H166.1zM497.7 56.19L393.9 160H512V96C512 80.87 506.5 67.15 497.7 56.19zM134.1 32H64C28.65 32 0 60.65 0 96v64h6.062L134.1 32zM0 416c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V192H0V416z\"],\n    \"clipboard\": [384, 512, [128203], \"f328\", \"M336 64h-53.88C268.9 26.8 233.7 0 192 0S115.1 26.8 101.9 64H48C21.5 64 0 85.48 0 112v352C0 490.5 21.5 512 48 512h288c26.5 0 48-21.48 48-48v-352C384 85.48 362.5 64 336 64zM192 64c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S160 113.7 160 96C160 78.33 174.3 64 192 64zM272 224h-160C103.2 224 96 216.8 96 208C96 199.2 103.2 192 112 192h160C280.8 192 288 199.2 288 208S280.8 224 272 224z\"],\n    \"clipboard-check\": [384, 512, [], \"f46c\", \"M336 64h-53.88C268.9 26.8 233.7 0 192 0S115.1 26.8 101.9 64H48C21.5 64 0 85.48 0 112v352C0 490.5 21.5 512 48 512h288c26.5 0 48-21.48 48-48v-352C384 85.48 362.5 64 336 64zM192 64c17.67 0 32 14.33 32 32s-14.33 32-32 32S160 113.7 160 96S174.3 64 192 64zM282.9 262.8l-88 112c-4.047 5.156-10.02 8.438-16.53 9.062C177.6 383.1 176.8 384 176 384c-5.703 0-11.25-2.031-15.62-5.781l-56-48c-10.06-8.625-11.22-23.78-2.594-33.84c8.609-10.06 23.77-11.22 33.84-2.594l36.98 31.69l72.52-92.28c8.188-10.44 23.3-12.22 33.7-4.062C289.3 237.3 291.1 252.4 282.9 262.8z\"],\n    \"clipboard-list\": [384, 512, [], \"f46d\", \"M336 64h-53.88C268.9 26.8 233.7 0 192 0S115.1 26.8 101.9 64H48C21.5 64 0 85.48 0 112v352C0 490.5 21.5 512 48 512h288c26.5 0 48-21.48 48-48v-352C384 85.48 362.5 64 336 64zM96 392c-13.25 0-24-10.75-24-24S82.75 344 96 344s24 10.75 24 24S109.3 392 96 392zM96 296c-13.25 0-24-10.75-24-24S82.75 248 96 248S120 258.8 120 272S109.3 296 96 296zM192 64c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S160 113.7 160 96C160 78.33 174.3 64 192 64zM304 384h-128C167.2 384 160 376.8 160 368C160 359.2 167.2 352 176 352h128c8.801 0 16 7.199 16 16C320 376.8 312.8 384 304 384zM304 288h-128C167.2 288 160 280.8 160 272C160 263.2 167.2 256 176 256h128C312.8 256 320 263.2 320 272C320 280.8 312.8 288 304 288z\"],\n    \"clock\": [512, 512, [128339, \"clock-four\"], \"f017\", \"M256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512zM232 256C232 264 236 271.5 242.7 275.1L338.7 339.1C349.7 347.3 364.6 344.3 371.1 333.3C379.3 322.3 376.3 307.4 365.3 300L280 243.2V120C280 106.7 269.3 96 255.1 96C242.7 96 231.1 106.7 231.1 120L232 256z\"],\n    \"clock-rotate-left\": [512, 512, [\"history\"], \"f1da\", \"M256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C201.7 512 151.2 495 109.7 466.1C95.2 455.1 91.64 436 101.8 421.5C111.9 407 131.8 403.5 146.3 413.6C177.4 435.3 215.2 448 256 448C362 448 448 362 448 256C448 149.1 362 64 256 64C202.1 64 155 85.46 120.2 120.2L151 151C166.1 166.1 155.4 192 134.1 192H24C10.75 192 0 181.3 0 168V57.94C0 36.56 25.85 25.85 40.97 40.97L74.98 74.98C121.3 28.69 185.3 0 255.1 0L256 0zM256 128C269.3 128 280 138.7 280 152V246.1L344.1 311C354.3 320.4 354.3 335.6 344.1 344.1C335.6 354.3 320.4 354.3 311 344.1L239 272.1C234.5 268.5 232 262.4 232 256V152C232 138.7 242.7 128 256 128V128z\"],\n    \"clone\": [512, 512, [], \"f24d\", \"M0 224C0 188.7 28.65 160 64 160H128V288C128 341 170.1 384 224 384H352V448C352 483.3 323.3 512 288 512H64C28.65 512 0 483.3 0 448V224zM224 352C188.7 352 160 323.3 160 288V64C160 28.65 188.7 0 224 0H448C483.3 0 512 28.65 512 64V288C512 323.3 483.3 352 448 352H224z\"],\n    \"closed-captioning\": [576, 512, [], \"f20a\", \"M512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM168.6 289.9c18.69 18.72 49.19 18.72 67.87 0c9.375-9.375 24.56-9.375 33.94 0s9.375 24.56 0 33.94c-18.72 18.72-43.28 28.08-67.87 28.08s-49.16-9.359-67.87-28.08C116.5 305.8 106.5 281.6 106.5 256s9.1-49.75 28.12-67.88c37.44-37.44 98.31-37.44 135.7 0c9.375 9.375 9.375 24.56 0 33.94s-24.56 9.375-33.94 0c-18.69-18.72-49.19-18.72-67.87 0C159.5 231.1 154.5 243.2 154.5 256S159.5 280.9 168.6 289.9zM360.6 289.9c18.69 18.72 49.19 18.72 67.87 0c9.375-9.375 24.56-9.375 33.94 0s9.375 24.56 0 33.94c-18.72 18.72-43.28 28.08-67.87 28.08s-49.16-9.359-67.87-28.08C308.5 305.8 298.5 281.6 298.5 256s9.1-49.75 28.12-67.88c37.44-37.44 98.31-37.44 135.7 0c9.375 9.375 9.375 24.56 0 33.94s-24.56 9.375-33.94 0c-18.69-18.72-49.19-18.72-67.87 0C351.5 231.1 346.5 243.2 346.5 256S351.5 280.9 360.6 289.9z\"],\n    \"cloud\": [640, 512, [9729], \"f0c2\", \"M96.2 200.1C96.07 197.4 96 194.7 96 192C96 103.6 167.6 32 256 32C315.3 32 367 64.25 394.7 112.2C409.9 101.1 428.3 96 448 96C501 96 544 138.1 544 192C544 204.2 541.7 215.8 537.6 226.6C596 238.4 640 290.1 640 352C640 422.7 582.7 480 512 480H144C64.47 480 0 415.5 0 336C0 273.2 40.17 219.8 96.2 200.1z\"],\n    \"cloud-arrow-down\": [640, 512, [62337, \"cloud-download\", \"cloud-download-alt\"], \"f0ed\", \"M144 480C64.47 480 0 415.5 0 336C0 273.2 40.17 219.8 96.2 200.1C96.07 197.4 96 194.7 96 192C96 103.6 167.6 32 256 32C315.3 32 367 64.25 394.7 112.2C409.9 101.1 428.3 96 448 96C501 96 544 138.1 544 192C544 204.2 541.7 215.8 537.6 226.6C596 238.4 640 290.1 640 352C640 422.7 582.7 480 512 480H144zM303 392.1C312.4 402.3 327.6 402.3 336.1 392.1L416.1 312.1C426.3 303.6 426.3 288.4 416.1 279C407.6 269.7 392.4 269.7 383 279L344 318.1V184C344 170.7 333.3 160 320 160C306.7 160 296 170.7 296 184V318.1L256.1 279C247.6 269.7 232.4 269.7 223 279C213.7 288.4 213.7 303.6 223 312.1L303 392.1z\"],\n    \"cloud-arrow-up\": [640, 512, [62338, \"cloud-upload\", \"cloud-upload-alt\"], \"f0ee\", \"M144 480C64.47 480 0 415.5 0 336C0 273.2 40.17 219.8 96.2 200.1C96.07 197.4 96 194.7 96 192C96 103.6 167.6 32 256 32C315.3 32 367 64.25 394.7 112.2C409.9 101.1 428.3 96 448 96C501 96 544 138.1 544 192C544 204.2 541.7 215.8 537.6 226.6C596 238.4 640 290.1 640 352C640 422.7 582.7 480 512 480H144zM223 263C213.7 272.4 213.7 287.6 223 296.1C232.4 306.3 247.6 306.3 256.1 296.1L296 257.9V392C296 405.3 306.7 416 320 416C333.3 416 344 405.3 344 392V257.9L383 296.1C392.4 306.3 407.6 306.3 416.1 296.1C426.3 287.6 426.3 272.4 416.1 263L336.1 183C327.6 173.7 312.4 173.7 303 183L223 263z\"],\n    \"cloud-meatball\": [576, 512, [], \"f73b\", \"M80 352C53.5 352 32 373.5 32 400S53.5 448 80 448S128 426.5 128 400S106.5 352 80 352zM496 352c-26.5 0-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48S522.5 352 496 352zM377 363.1c4.625-14.5 1.625-30.88-9.75-42.37c-11.5-11.5-27.87-14.38-42.37-9.875c-7-13.5-20.63-23-36.88-23s-29.88 9.5-36.88 23C236.6 306.2 220.2 309.2 208.8 320.8c-11.5 11.5-14.38 27.87-9.875 42.37c-13.5 7-23 20.63-23 36.88s9.5 29.88 23 36.88c-4.625 14.5-1.625 30.88 9.875 42.37c8.25 8.125 19 12.25 29.75 12.25c4.25 0 8.5-1.125 12.62-2.5C258.1 502.5 271.8 512 288 512s29.88-9.5 36.88-23c4.125 1.25 8.375 2.5 12.62 2.5c10.75 0 21.5-4.125 29.75-12.25c11.5-11.5 14.38-27.87 9.75-42.37C390.5 429.9 400 416.2 400 400S390.5 370.1 377 363.1zM544 224c0-53-43-96-96-96c-.625 0-1.125 .25-1.625 .25C447.5 123 448 117.6 448 112C448 67.75 412.2 32 368 32c-24.62 0-46.25 11.25-61 28.75C288.4 24.75 251.2 0 208 0C146.1 0 96 50.12 96 112c0 7.25 .75 14.25 2.125 21.25C59.75 145.8 32 181.5 32 224c0 53 43 96 96 96h43.38C175 312 179.8 304.6 186.2 298.2C199.8 284.8 217.8 277.1 237 276.9C250.5 263.8 268.8 256 288 256s37.5 7.75 51 20.88c19.25 .25 37.25 7.875 50.75 21.37C396.2 304.6 401.1 312 404.6 320H448C501 320 544 277 544 224z\"],\n    \"cloud-moon\": [576, 512, [], \"f6c3\", \"M342.7 352.7c5.75-9.625 9.25-20.75 9.25-32.75c0-35.25-28.75-64-63.1-64c-17.25 0-32.75 6.875-44.25 17.87C227.4 244.2 196.2 223.1 159.1 223.1c-53 0-96 43.06-96 96.06c0 2 .5029 3.687 .6279 5.687c-37.5 13-64.62 48.38-64.62 90.25C-.0048 468.1 42.99 512 95.99 512h239.1c44.25 0 79.1-35.75 79.1-80C415.1 390.1 383.7 356.2 342.7 352.7zM565.2 298.4c-93 17.75-178.5-53.62-178.5-147.6c0-54.25 28.1-104 76.12-130.9c7.375-4.125 5.375-15.12-2.75-16.63C448.4 1.125 436.7 0 424.1 0c-105.9 0-191.9 85.88-191.9 192c0 8.5 .625 16.75 1.75 25c5.875 4.25 11.62 8.875 16.75 14.25C262.1 226.5 275.2 224 287.1 224c52.88 0 95.1 43.13 95.1 96c0 3.625-.25 7.25-.625 10.75c23.62 10.75 42.37 29.5 53.5 52.5c54.38-3.375 103.7-29.25 137.1-70.37C579.2 306.4 573.5 296.8 565.2 298.4z\"],\n    \"cloud-moon-rain\": [576, 512, [], \"f73c\", \"M350.5 225.5c-6.876-37.25-39.25-65.5-78.51-65.5c-12.25 0-23.88 2.1-34.25 7.1C220.3 143.9 192.1 128 160 128c-53.01 0-96.01 42.1-96.01 95.1c0 .5 .25 1.125 .25 1.625C27.63 232.9 0 265.3 0 304c0 44.25 35.75 79.1 80.01 79.1h256c44.25 0 80.01-35.75 80.01-79.1C416 264.8 387.8 232.3 350.5 225.5zM567.9 223.8C497.6 237.1 432.9 183.5 432.9 113c0-40.63 21.88-78 57.5-98.13c5.501-3.125 4.077-11.37-2.173-12.5C479.6 .7538 470.8 0 461.8 0c-77.88 0-141.1 61.25-144.4 137.9c26.75 11.88 48.26 33.88 58.88 61.75c37.13 14.25 64.01 47.38 70.26 86.75c5.126 .5 10.05 1.522 15.3 1.522c44.63 0 85.46-20.15 112.5-53.27C578.6 229.8 574.2 222.6 567.9 223.8zM340.1 426.7l-32 48c-7.345 11.03-4.376 25.94 6.657 33.28C318.8 510.7 323.4 512 327.1 512c7.751 0 15.38-3.75 20-10.69l32-48c7.345-11.03 4.376-25.94-6.657-33.28C362.3 412.7 347.4 415.7 340.1 426.7zM244 426.7l-32 48c-7.345 11.03-4.376 25.94 6.657 33.28C222.8 510.7 227.4 512 231.1 512c7.751 0 15.38-3.75 20-10.69l32-48c7.345-11.03 4.376-25.94-6.657-33.28C266.3 412.7 251.4 415.7 244 426.7zM148 426.7l-32 48c-7.345 11.03-4.376 25.94 6.657 33.28C126.8 510.7 131.4 512 135.1 512c7.751 0 15.38-3.75 20-10.69l32-48c7.345-11.03 4.376-25.94-6.657-33.28C170.3 412.7 155.4 415.7 148 426.7zM52.03 426.7l-32 48c-7.345 11.03-4.376 25.94 6.657 33.28C30.78 510.7 35.41 512 39.97 512c7.751 0 15.38-3.75 20-10.69l32-48c7.345-11.03 4.376-25.94-6.657-33.28C74.25 412.7 59.41 415.7 52.03 426.7z\"],\n    \"cloud-rain\": [512, 512, [127783, 9926], \"f73d\", \"M416 128c-.625 0-1.125 .25-1.625 .25C415.5 123 416 117.6 416 112C416 67.75 380.3 32 336 32c-24.62 0-46.25 11.25-61 28.75C256.4 24.75 219.3 0 176 0C114.1 0 64 50.13 64 112c0 7.25 .75 14.25 2.125 21.25C27.75 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96S469 128 416 128zM368 464c0 26.51 21.49 48 48 48s48-21.49 48-48s-48.01-95.1-48.01-95.1S368 437.5 368 464zM48 464C48 490.5 69.49 512 96 512s48-21.49 48-48s-48.01-95.1-48.01-95.1S48 437.5 48 464zM208 464c0 26.51 21.49 48 48 48s48-21.49 48-48s-48.01-95.1-48.01-95.1S208 437.5 208 464z\"],\n    \"cloud-showers-heavy\": [512, 512, [], \"f740\", \"M416 128c-.625 0-1.125 .25-1.625 .25C415.5 123 416 117.6 416 112c0-44.25-35.75-80-79.1-80c-24.62 0-46.25 11.25-60.1 28.75C256.4 24.75 219.3 0 176 0C114.3 0 64 50.13 64 112c0 7.25 .7512 14.25 2.126 21.25C27.76 145.8 .0054 181.5 .0054 224c0 53 42.1 96 95.1 96h319.1C469 320 512 277 512 224S469 128 416 128zM198.8 353.9c-12.17-5.219-26.3 .4062-31.52 12.59l-47.1 112c-5.219 12.19 .4219 26.31 12.61 31.53C134.1 511.4 138.2 512 141.3 512c9.312 0 18.17-5.438 22.08-14.53l47.1-112C216.6 373.3 210.1 359.2 198.8 353.9zM81.46 353.9c-12.19-5.219-26.3 .4062-31.52 12.59l-47.1 112C-3.276 490.7 2.365 504.8 14.55 510.1C17.63 511.4 20.83 512 23.99 512c9.312 0 18.17-5.438 22.08-14.53l47.1-112C99.29 373.3 93.64 359.2 81.46 353.9zM316.1 353.9c-12.19-5.219-26.3 .4062-31.52 12.59l-47.1 112c-5.219 12.19 .4219 26.31 12.61 31.53C252.3 511.4 255.5 512 258.7 512c9.312 0 18.17-5.438 22.08-14.53l47.1-112C333.1 373.3 328.3 359.2 316.1 353.9zM433.5 353.9c-12.17-5.219-26.28 .4062-31.52 12.59l-47.1 112c-5.219 12.19 .4219 26.31 12.61 31.53C369.6 511.4 372.8 512 375.1 512c9.312 0 18.17-5.438 22.08-14.53l47.1-112C451.3 373.3 445.6 359.2 433.5 353.9z\"],\n    \"cloud-sun\": [640, 512, [9925], \"f6c4\", \"M96 208c0-61.86 50.14-111.1 111.1-111.1c52.65 0 96.5 36.45 108.5 85.42C334.7 173.1 354.7 168 375.1 168c4.607 0 9.152 .3809 13.68 .8203l24.13-34.76c5.145-7.414 .8965-17.67-7.984-19.27L317.2 98.78L301.2 10.21C299.6 1.325 289.4-2.919 281.9 2.226L208 53.54L134.1 2.225C126.6-2.92 116.4 1.326 114.8 10.21L98.78 98.78L10.21 114.8C1.326 116.4-2.922 126.7 2.223 134.1l51.3 73.94L2.224 281.9c-5.145 7.414-.8975 17.67 7.983 19.27L98.78 317.2l16.01 88.58c1.604 8.881 11.86 13.13 19.27 7.982l10.71-7.432c2.725-35.15 19.85-66.51 45.83-88.1C137.1 309.8 96 263.9 96 208zM128 208c0 44.18 35.82 80 80 80c9.729 0 18.93-1.996 27.56-5.176c7.002-33.65 25.53-62.85 51.57-83.44C282.8 159.3 249.2 128 208 128C163.8 128 128 163.8 128 208zM575.2 325.6c.125-2 .7453-3.744 .7453-5.619c0-35.38-28.75-64-63.1-64c-12.62 0-24.25 3.749-34.13 9.999c-17.62-38.88-56.5-65.1-101.9-65.1c-61.75 0-112 50.12-112 111.1c0 3 .7522 5.743 .8772 8.618c-49.63 3.75-88.88 44.74-88.88 95.37C175.1 469 218.1 512 271.1 512h272c53 0 96-42.99 96-95.99C639.1 373.9 612.7 338.6 575.2 325.6z\"],\n    \"cloud-sun-rain\": [640, 512, [127782], \"f743\", \"M255.7 139.1C244.8 125.5 227.6 116 208 116c-33.14 0-60 26.86-60 59.1c0 25.56 16.06 47.24 38.58 55.88C197.2 219.3 210.5 208.9 225.9 201.1C229.1 178.5 240.6 157.3 255.7 139.1zM120 175.1c0-48.6 39.4-87.1 88-87.1c27.8 0 52.29 13.14 68.42 33.27c21.24-15.67 47.22-25.3 75.58-25.3c.0098 0-.0098 0 0 0L300.4 83.58L286.9 8.637C285.9 3.346 281.3 .0003 276.5 .0003c-2.027 0-4.096 .5928-5.955 1.881l-62.57 43.42L145.4 1.882C143.6 .5925 141.5-.0003 139.5-.0003c-4.818 0-9.399 3.346-10.35 8.636l-13.54 74.95L40.64 97.13c-5.289 .9556-8.637 5.538-8.637 10.36c0 2.026 .5921 4.094 1.881 5.951l43.41 62.57L33.88 238.6C32.59 240.4 32 242.5 32 244.5c0 4.817 3.347 9.398 8.636 10.35l74.95 13.54l13.54 74.95c.9555 5.289 5.537 8.636 10.35 8.636c2.027 0 4.096-.5927 5.954-1.882l19.47-13.51c-3.16-10.34-4.934-21.28-4.934-32.64c0-17.17 4.031-33.57 11.14-48.32C141 241.7 120 211.4 120 175.1zM542.5 225.5c-6.875-37.25-39.25-65.5-78.51-65.5c-12.25 0-23.88 3-34.25 8c-17.5-24.13-45.63-40-77.76-40c-53 0-96.01 43-96.01 96c0 .5 .25 1.125 .25 1.625C219.6 232.1 191.1 265.2 191.1 303.1c0 44.25 35.75 80 80.01 80h256C572.2 383.1 608 348.2 608 303.1C608 264.7 579.7 232.2 542.5 225.5zM552 415.1c-7.753 0-15.35 3.752-19.97 10.69l-32 48c-2.731 4.093-4.037 8.719-4.037 13.29C496 501.4 506.9 512 520 512c7.75 0 15.36-3.75 19.98-10.69l32-48c2.731-4.093 4.037-8.719 4.037-13.29C576 426.6 565.1 415.1 552 415.1zM456 415.1c-7.751 0-15.34 3.752-19.98 10.69l-32 48c-2.731 4.093-4.037 8.719-4.037 13.29C400 501.4 410.9 512 423.1 512c7.75 0 15.36-3.75 19.98-10.69l32-48c2.731-4.093 4.037-8.719 4.037-13.29C480 426.6 469.1 415.1 456 415.1zM360 415.1c-7.753 0-15.34 3.752-19.97 10.69l-32 48c-2.731 4.093-4.037 8.719-4.037 13.29C304 501.4 314.9 512 327.1 512c7.75 0 15.36-3.75 19.99-10.69l32-48c2.731-4.093 4.037-8.719 4.037-13.29C384 426.6 373.1 415.1 360 415.1zM264 415.1c-7.756 0-15.35 3.752-19.97 10.69l-32 48c-2.731 4.093-4.037 8.719-4.037 13.29C208 501.4 218.9 512 231.1 512c7.75 0 15.36-3.75 19.98-10.69l32-48c2.731-4.093 4.037-8.719 4.037-13.29C288 426.6 277.1 415.1 264 415.1z\"],\n    \"clover\": [512, 512, [], \"e139\", \"M512 302.3c0 35.29-28.99 63.91-64.28 63.91c-38.82 0-88.7-22.75-122.4-40.92c18.17 33.7 40.92 83.57 40.92 122.4c0 35.29-28.61 63.91-63.91 63.91c-18.1 0-34.45-7.52-46.09-19.63C244.6 504.3 228 512 209.7 512c-35.29 0-63.91-28.99-63.91-64.28c0-38.82 22.75-88.7 40.92-122.4c-33.7 18.17-83.57 40.92-122.4 40.92c-35.29 0-63.91-28.61-63.91-63.91c0-18.1 7.52-34.45 19.63-46.09C7.676 244.6 0 228 0 209.7c0-35.29 28.99-63.91 64.28-63.91c38.82 0 88.7 22.75 122.4 40.92C168.5 152.1 145.8 103.1 145.8 64.28c0-35.29 28.61-63.91 63.91-63.91c18.1 0 34.45 7.52 46.09 19.63C267.4 7.676 283.1 0 302.3 0c35.29 0 63.91 28.99 63.91 64.28c0 38.82-22.75 88.7-40.92 122.4c33.7-18.17 83.57-40.92 122.4-40.92c35.29 0 63.91 28.61 63.91 63.91c0 18.1-7.52 34.45-19.63 46.09C504.3 267.4 512 283.1 512 302.3z\"],\n    \"code\": [640, 512, [], \"f121\", \"M414.8 40.79L286.8 488.8C281.9 505.8 264.2 515.6 247.2 510.8C230.2 505.9 220.4 488.2 225.2 471.2L353.2 23.21C358.1 6.216 375.8-3.624 392.8 1.232C409.8 6.087 419.6 23.8 414.8 40.79H414.8zM518.6 121.4L630.6 233.4C643.1 245.9 643.1 266.1 630.6 278.6L518.6 390.6C506.1 403.1 485.9 403.1 473.4 390.6C460.9 378.1 460.9 357.9 473.4 345.4L562.7 256L473.4 166.6C460.9 154.1 460.9 133.9 473.4 121.4C485.9 108.9 506.1 108.9 518.6 121.4V121.4zM166.6 166.6L77.25 256L166.6 345.4C179.1 357.9 179.1 378.1 166.6 390.6C154.1 403.1 133.9 403.1 121.4 390.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4L121.4 121.4C133.9 108.9 154.1 108.9 166.6 121.4C179.1 133.9 179.1 154.1 166.6 166.6V166.6z\"],\n    \"code-branch\": [448, 512, [], \"f126\", \"M160 80C160 112.8 140.3 140.1 112 153.3V241.1C130.8 230.2 152.7 224 176 224H272C307.3 224 336 195.3 336 160V153.3C307.7 140.1 288 112.8 288 80C288 35.82 323.8 0 368 0C412.2 0 448 35.82 448 80C448 112.8 428.3 140.1 400 153.3V160C400 230.7 342.7 288 272 288H176C140.7 288 112 316.7 112 352V358.7C140.3 371 160 399.2 160 432C160 476.2 124.2 512 80 512C35.82 512 0 476.2 0 432C0 399.2 19.75 371 48 358.7V153.3C19.75 140.1 0 112.8 0 80C0 35.82 35.82 0 80 0C124.2 0 160 35.82 160 80V80zM80 104C93.25 104 104 93.25 104 80C104 66.75 93.25 56 80 56C66.75 56 56 66.75 56 80C56 93.25 66.75 104 80 104zM368 56C354.7 56 344 66.75 344 80C344 93.25 354.7 104 368 104C381.3 104 392 93.25 392 80C392 66.75 381.3 56 368 56zM80 456C93.25 456 104 445.3 104 432C104 418.7 93.25 408 80 408C66.75 408 56 418.7 56 432C56 445.3 66.75 456 80 456z\"],\n    \"code-commit\": [640, 512, [], \"f386\", \"M476.8 288C461.1 361 397.4 416 320 416C242.6 416 178 361 163.2 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H163.2C178 150.1 242.6 96 320 96C397.4 96 461.1 150.1 476.8 224H608C625.7 224 640 238.3 640 256C640 273.7 625.7 288 608 288H476.8zM320 336C364.2 336 400 300.2 400 256C400 211.8 364.2 176 320 176C275.8 176 240 211.8 240 256C240 300.2 275.8 336 320 336z\"],\n    \"code-compare\": [512, 512, [], \"e13a\", \"M320 488C320 497.5 314.4 506.1 305.8 509.9C297.1 513.8 286.1 512.2 279.9 505.8L199.9 433.8C194.9 429.3 192 422.8 192 416C192 409.2 194.9 402.7 199.9 398.2L279.9 326.2C286.1 319.8 297.1 318.2 305.8 322.1C314.4 325.9 320 334.5 320 344V384H336C371.3 384 400 355.3 400 320V153.3C371.7 140.1 352 112.8 352 80C352 35.82 387.8 0 432 0C476.2 0 512 35.82 512 80C512 112.8 492.3 140.1 464 153.3V320C464 390.7 406.7 448 336 448H320V488zM456 79.1C456 66.74 445.3 55.1 432 55.1C418.7 55.1 408 66.74 408 79.1C408 93.25 418.7 103.1 432 103.1C445.3 103.1 456 93.25 456 79.1zM192 24C192 14.52 197.6 5.932 206.2 2.076C214.9-1.78 225-.1789 232.1 6.161L312.1 78.16C317.1 82.71 320 89.2 320 96C320 102.8 317.1 109.3 312.1 113.8L232.1 185.8C225 192.2 214.9 193.8 206.2 189.9C197.6 186.1 192 177.5 192 168V128H176C140.7 128 112 156.7 112 192V358.7C140.3 371 160 399.2 160 432C160 476.2 124.2 512 80 512C35.82 512 0 476.2 0 432C0 399.2 19.75 371 48 358.7V192C48 121.3 105.3 64 176 64H192V24zM56 432C56 445.3 66.75 456 80 456C93.25 456 104 445.3 104 432C104 418.7 93.25 408 80 408C66.75 408 56 418.7 56 432z\"],\n    \"code-fork\": [448, 512, [], \"e13b\", \"M160 80C160 112.8 140.3 140.1 112 153.3V192C112 209.7 126.3 224 144 224H304C321.7 224 336 209.7 336 192V153.3C307.7 140.1 288 112.8 288 80C288 35.82 323.8 0 368 0C412.2 0 448 35.82 448 80C448 112.8 428.3 140.1 400 153.3V192C400 245 357 288 304 288H256V358.7C284.3 371 304 399.2 304 432C304 476.2 268.2 512 224 512C179.8 512 144 476.2 144 432C144 399.2 163.7 371 192 358.7V288H144C90.98 288 48 245 48 192V153.3C19.75 140.1 0 112.8 0 80C0 35.82 35.82 0 80 0C124.2 0 160 35.82 160 80V80zM80 104C93.25 104 104 93.25 104 80C104 66.75 93.25 56 80 56C66.75 56 56 66.75 56 80C56 93.25 66.75 104 80 104zM368 104C381.3 104 392 93.25 392 80C392 66.75 381.3 56 368 56C354.7 56 344 66.75 344 80C344 93.25 354.7 104 368 104zM224 408C210.7 408 200 418.7 200 432C200 445.3 210.7 456 224 456C237.3 456 248 445.3 248 432C248 418.7 237.3 408 224 408z\"],\n    \"code-merge\": [448, 512, [], \"f387\", \"M208 239.1H294.7C307 211.7 335.2 191.1 368 191.1C412.2 191.1 448 227.8 448 271.1C448 316.2 412.2 352 368 352C335.2 352 307 332.3 294.7 303.1H208C171.1 303.1 138.7 292.1 112 272V358.7C140.3 371 160 399.2 160 432C160 476.2 124.2 512 80 512C35.82 512 0 476.2 0 432C0 399.2 19.75 371 48 358.7V153.3C19.75 140.1 0 112.8 0 80C0 35.82 35.82 0 80 0C124.2 0 160 35.82 160 80C160 112.6 140.5 140.7 112.4 153.2C117 201.9 158.1 240 208 240V239.1zM80 103.1C93.25 103.1 104 93.25 104 79.1C104 66.74 93.25 55.1 80 55.1C66.75 55.1 56 66.74 56 79.1C56 93.25 66.75 103.1 80 103.1zM80 456C93.25 456 104 445.3 104 432C104 418.7 93.25 408 80 408C66.75 408 56 418.7 56 432C56 445.3 66.75 456 80 456zM368 247.1C354.7 247.1 344 258.7 344 271.1C344 285.3 354.7 295.1 368 295.1C381.3 295.1 392 285.3 392 271.1C392 258.7 381.3 247.1 368 247.1z\"],\n    \"code-pull-request\": [512, 512, [], \"e13c\", \"M305.8 2.076C314.4 5.932 320 14.52 320 24V64H336C406.7 64 464 121.3 464 192V358.7C492.3 371 512 399.2 512 432C512 476.2 476.2 512 432 512C387.8 512 352 476.2 352 432C352 399.2 371.7 371 400 358.7V192C400 156.7 371.3 128 336 128H320V168C320 177.5 314.4 186.1 305.8 189.9C297.1 193.8 286.1 192.2 279.9 185.8L199.9 113.8C194.9 109.3 192 102.8 192 96C192 89.2 194.9 82.71 199.9 78.16L279.9 6.161C286.1-.1791 297.1-1.779 305.8 2.077V2.076zM432 456C445.3 456 456 445.3 456 432C456 418.7 445.3 408 432 408C418.7 408 408 418.7 408 432C408 445.3 418.7 456 432 456zM112 358.7C140.3 371 160 399.2 160 432C160 476.2 124.2 512 80 512C35.82 512 0 476.2 0 432C0 399.2 19.75 371 48 358.7V153.3C19.75 140.1 0 112.8 0 80C0 35.82 35.82 .0004 80 .0004C124.2 .0004 160 35.82 160 80C160 112.8 140.3 140.1 112 153.3V358.7zM80 56C66.75 56 56 66.75 56 80C56 93.25 66.75 104 80 104C93.25 104 104 93.25 104 80C104 66.75 93.25 56 80 56zM80 408C66.75 408 56 418.7 56 432C56 445.3 66.75 456 80 456C93.25 456 104 445.3 104 432C104 418.7 93.25 408 80 408z\"],\n    \"coins\": [512, 512, [], \"f51e\", \"M512 80C512 98.01 497.7 114.6 473.6 128C444.5 144.1 401.2 155.5 351.3 158.9C347.7 157.2 343.9 155.5 340.1 153.9C300.6 137.4 248.2 128 192 128C183.7 128 175.6 128.2 167.5 128.6L166.4 128C142.3 114.6 128 98.01 128 80C128 35.82 213.1 0 320 0C426 0 512 35.82 512 80V80zM160.7 161.1C170.9 160.4 181.3 160 192 160C254.2 160 309.4 172.3 344.5 191.4C369.3 204.9 384 221.7 384 240C384 243.1 383.3 247.9 381.9 251.7C377.3 264.9 364.1 277 346.9 287.3C346.9 287.3 346.9 287.3 346.9 287.3C346.8 287.3 346.6 287.4 346.5 287.5L346.5 287.5C346.2 287.7 345.9 287.8 345.6 288C310.6 307.4 254.8 320 192 320C132.4 320 79.06 308.7 43.84 290.9C41.97 289.9 40.15 288.1 38.39 288C14.28 274.6 0 258 0 240C0 205.2 53.43 175.5 128 164.6C138.5 163 149.4 161.8 160.7 161.1L160.7 161.1zM391.9 186.6C420.2 182.2 446.1 175.2 468.1 166.1C484.4 159.3 499.5 150.9 512 140.6V176C512 195.3 495.5 213.1 468.2 226.9C453.5 234.3 435.8 240.5 415.8 245.3C415.9 243.6 416 241.8 416 240C416 218.1 405.4 200.1 391.9 186.6V186.6zM384 336C384 354 369.7 370.6 345.6 384C343.8 384.1 342 385.9 340.2 386.9C304.9 404.7 251.6 416 192 416C129.2 416 73.42 403.4 38.39 384C14.28 370.6 .0003 354 .0003 336V300.6C12.45 310.9 27.62 319.3 43.93 326.1C83.44 342.6 135.8 352 192 352C248.2 352 300.6 342.6 340.1 326.1C347.9 322.9 355.4 319.2 362.5 315.2C368.6 311.8 374.3 308 379.7 304C381.2 302.9 382.6 301.7 384 300.6L384 336zM416 278.1C434.1 273.1 452.5 268.6 468.1 262.1C484.4 255.3 499.5 246.9 512 236.6V272C512 282.5 507 293 497.1 302.9C480.8 319.2 452.1 332.6 415.8 341.3C415.9 339.6 416 337.8 416 336V278.1zM192 448C248.2 448 300.6 438.6 340.1 422.1C356.4 415.3 371.5 406.9 384 396.6V432C384 476.2 298 512 192 512C85.96 512 .0003 476.2 .0003 432V396.6C12.45 406.9 27.62 415.3 43.93 422.1C83.44 438.6 135.8 448 192 448z\"],\n    \"colon-sign\": [320, 512, [], \"e140\", \"M216.6 65.56C226.4 66.81 235.9 68.8 245.2 71.46L256.1 24.24C261.2 7.093 278.6-3.331 295.8 .9552C312.9 5.242 323.3 22.62 319 39.76L303.1 100C305.1 100.8 306.2 101.6 307.2 102.4C321.4 113 324.2 133.1 313.6 147.2C307.5 155.3 298.4 159.7 288.1 159.1L234.8 376.7C247.1 372.3 258.5 366.1 268.8 358.4C282.9 347.8 302.1 350.6 313.6 364.8C324.2 378.9 321.4 398.1 307.2 409.6C281.5 428.9 250.8 441.9 217.4 446.3L207 487.8C202.8 504.9 185.4 515.3 168.2 511C151.1 506.8 140.7 489.4 144.1 472.2L152.1 443.8C142.4 441.8 133.1 439.1 124.1 435.6L111 487.8C106.8 504.9 89.38 515.3 72.24 511C55.09 506.8 44.67 489.4 48.96 472.2L66.65 401.4C25.84 366.2 0 314.1 0 256C0 164.4 64.09 87.85 149.9 68.64L160.1 24.24C165.2 7.093 182.6-3.331 199.8 .9552C216.9 5.242 227.3 22.62 223 39.76L216.6 65.56zM131.2 143.3C91.17 164.1 64 207.3 64 256C64 282.2 71.85 306.5 85.32 326.8L131.2 143.3zM167.6 381.7L229.6 133.6C220.4 130.8 210.8 128.1 200.9 128.3L139.8 372.9C148.6 376.8 157.9 379.8 167.6 381.7V381.7z\"],\n    \"comment\": [512, 512, [61669, 128489], \"f075\", \"M256 32C114.6 32 .0272 125.1 .0272 240c0 49.63 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734C1.979 478.2 4.75 480 8 480c66.25 0 115.1-31.76 140.6-51.39C181.2 440.9 217.6 448 256 448c141.4 0 255.1-93.13 255.1-208S397.4 32 256 32z\"],\n    \"comment-dollar\": [512, 512, [], \"f651\", \"M256 31.1c-141.4 0-255.1 93.09-255.1 208c0 49.59 21.37 94.1 56.97 130.7c-12.5 50.39-54.31 95.3-54.81 95.8C0 468.8-.5938 472.2 .6875 475.2C1.1 478.2 4.813 479.1 8 479.1c66.31 0 116-31.8 140.6-51.41c32.72 12.31 69.02 19.41 107.4 19.41c141.4 0 255.1-93.09 255.1-207.1S397.4 31.1 256 31.1zM317.8 282.3c-3.623 20.91-19.47 34.64-41.83 39.43V332c0 11.03-8.946 20-19.99 20S236 343 236 332v-10.77c-8.682-1.922-17.3-4.723-25.06-7.512l-4.266-1.5C196.3 308.5 190.8 297.1 194.5 286.7c3.688-10.41 15.11-15.81 25.52-12.22l4.469 1.625c7.844 2.812 16.72 6 23.66 7.031c13.72 2.125 28.94 .1875 30.31-7.625c.875-5.094 1.359-7.906-27.92-16.28L244.7 257.5c-17.33-5.094-57.92-17-50.52-59.84C197.8 176.8 213.6 162.8 236 157.1V148c0-11.03 8.961-20 20.01-20s19.99 8.969 19.99 20v10.63c5.453 1.195 11.34 2.789 18.56 5.273c10.44 3.625 15.95 15.03 12.33 25.47c-3.625 10.41-15.06 15.94-25.45 12.34c-5.859-2.031-12-4-17.59-4.844C250.2 194.8 234.1 196.7 233.6 204.5C232.8 208.1 232.3 212.2 255.1 219.2l5.547 1.594C283.8 227.1 325.3 239 317.8 282.3z\"],\n    \"comment-dots\": [512, 512, [62075, 128172, \"commenting\"], \"f4ad\", \"M256 31.1c-141.4 0-255.1 93.12-255.1 208c0 49.62 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734c1.249 3 4.021 4.766 7.271 4.766c66.25 0 115.1-31.76 140.6-51.39c32.63 12.25 69.02 19.39 107.4 19.39c141.4 0 255.1-93.13 255.1-207.1S397.4 31.1 256 31.1zM127.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S145.7 271.1 127.1 271.1zM256 271.1c-17.75 0-31.1-14.25-31.1-31.1s14.25-32 31.1-32s31.1 14.25 31.1 32S273.8 271.1 256 271.1zM383.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S401.7 271.1 383.1 271.1z\"],\n    \"comment-medical\": [512, 512, [], \"f7f5\", \"M256 31.1c-141.4 0-255.1 93.09-255.1 208c0 49.59 21.38 94.1 56.97 130.7c-12.5 50.39-54.31 95.3-54.81 95.8C0 468.8-.5938 472.2 .6875 475.2c1.312 3 4.125 4.797 7.312 4.797c66.31 0 116-31.8 140.6-51.41c32.72 12.31 69.01 19.41 107.4 19.41C397.4 447.1 512 354.9 512 239.1S397.4 31.1 256 31.1zM368 266c0 8.836-7.164 16-16 16h-54V336c0 8.836-7.164 16-16 16h-52c-8.836 0-16-7.164-16-16V282H160c-8.836 0-16-7.164-16-16V214c0-8.838 7.164-16 16-16h53.1V144c0-8.838 7.164-16 16-16h52c8.836 0 16 7.162 16 16v54H352c8.836 0 16 7.162 16 16V266z\"],\n    \"comment-slash\": [640, 512, [], \"f4b3\", \"M64.03 239.1c0 49.59 21.38 94.1 56.97 130.7c-12.5 50.39-54.31 95.3-54.81 95.8c-2.187 2.297-2.781 5.703-1.5 8.703c1.312 3 4.125 4.797 7.312 4.797c66.31 0 116-31.8 140.6-51.41c32.72 12.31 69.02 19.41 107.4 19.41c37.39 0 72.78-6.663 104.8-18.36L82.93 161.7C70.81 185.9 64.03 212.3 64.03 239.1zM630.8 469.1l-118.1-92.59C551.1 340 576 292.4 576 240c0-114.9-114.6-207.1-255.1-207.1c-67.74 0-129.1 21.55-174.9 56.47L38.81 5.117C28.21-3.154 13.16-1.096 5.115 9.19C-3.072 19.63-1.249 34.72 9.188 42.89l591.1 463.1c10.5 8.203 25.57 6.333 33.7-4.073C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"comment-sms\": [512, 512, [\"sms\"], \"f7cd\", \"M256 32C114.6 32 .0137 125.1 .0137 240c0 49.59 21.39 95 56.99 130.7c-12.5 50.39-54.31 95.3-54.81 95.8C0 468.8-.5938 472.2 .6875 475.2C1.1 478.2 4.813 480 8 480c66.31 0 116-31.8 140.6-51.41C181.3 440.9 217.6 448 256 448C397.4 448 512 354.9 512 240S397.4 32 256 32zM167.3 271.9C163.9 291.1 146.3 304 121.1 304c-4.031 0-8.25-.3125-12.59-1C101.1 301.8 92.81 298.8 85.5 296.1c-8.312-3-14.06-12.66-11.09-20.97S85 261.1 93.38 264.9c6.979 2.498 14.53 5.449 20.88 6.438C125.7 273.1 135 271 135.8 266.4c1.053-5.912-10.84-8.396-24.56-12.34c-12.12-3.531-44.28-12.97-38.63-46c4.062-23.38 27.31-35.91 58-31.09c5.906 .9062 12.44 2.844 18.59 4.969c8.344 2.875 12.78 12 9.906 20.34C156.3 210.7 147.2 215.1 138.8 212.2c-4.344-1.5-8.938-2.938-13.09-3.594c-11.22-1.656-20.72 .4062-21.5 4.906C103.2 219.2 113.6 221.5 124.4 224.6C141.4 229.5 173.1 238.5 167.3 271.9zM320 288c0 8.844-7.156 16-16 16S288 296.8 288 288V240l-19.19 25.59c-6.062 8.062-19.55 8.062-25.62 0L224 240V288c0 8.844-7.156 16-16 16S192 296.8 192 288V192c0-6.875 4.406-12.1 10.94-15.18c6.5-2.094 13.71 .0586 17.87 5.59L256 229.3l35.19-46.93c4.156-5.531 11.4-7.652 17.87-5.59C315.6 179 320 185.1 320 192V288zM439.3 271.9C435.9 291.1 418.3 304 393.1 304c-4.031 0-8.25-.3125-12.59-1c-8.25-1.25-16.56-4.25-23.88-6.906c-8.312-3-14.06-12.66-11.09-20.97s10.59-13.16 18.97-10.19c6.979 2.498 14.53 5.449 20.88 6.438c11.44 1.719 20.78-.375 21.56-4.938c1.053-5.912-10.84-8.396-24.56-12.34c-12.12-3.531-44.28-12.97-38.63-46c4.031-23.38 27.25-35.91 58-31.09c5.906 .9062 12.44 2.844 18.59 4.969c8.344 2.875 12.78 12 9.906 20.34c-2.875 8.344-11.94 12.81-20.34 9.906c-4.344-1.5-8.938-2.938-13.09-3.594c-11.19-1.656-20.72 .4062-21.5 4.906C375.2 219.2 385.6 221.5 396.4 224.6C413.4 229.5 445.1 238.5 439.3 271.9z\"],\n    \"comments\": [640, 512, [61670, 128490], \"f086\", \"M416 176C416 78.8 322.9 0 208 0S0 78.8 0 176c0 39.57 15.62 75.96 41.67 105.4c-16.39 32.76-39.23 57.32-39.59 57.68c-2.1 2.205-2.67 5.475-1.441 8.354C1.9 350.3 4.602 352 7.66 352c38.35 0 70.76-11.12 95.74-24.04C134.2 343.1 169.8 352 208 352C322.9 352 416 273.2 416 176zM599.6 443.7C624.8 413.9 640 376.6 640 336C640 238.8 554 160 448 160c-.3145 0-.6191 .041-.9336 .043C447.5 165.3 448 170.6 448 176c0 98.62-79.68 181.2-186.1 202.5C282.7 455.1 357.1 512 448 512c33.69 0 65.32-8.008 92.85-21.98C565.2 502 596.1 512 632.3 512c3.059 0 5.76-1.725 7.02-4.605c1.229-2.879 .6582-6.148-1.441-8.354C637.6 498.7 615.9 475.3 599.6 443.7z\"],\n    \"comments-dollar\": [640, 512, [], \"f653\", \"M416 176C416 78.8 322.9 0 208 0S0 78.8 0 176c0 39.57 15.62 75.96 41.67 105.4c-16.39 32.76-39.23 57.32-39.59 57.68c-2.1 2.205-2.67 5.475-1.441 8.354C1.9 350.3 4.602 352 7.66 352c38.35 0 70.76-11.12 95.74-24.04C134.2 343.1 169.8 352 208 352C322.9 352 416 273.2 416 176zM269.8 218.3C266.2 239.2 250.4 252.1 228 257.7V268c0 11.03-8.953 20-20 20s-20-8.969-20-20V257.2c-8.682-1.922-17.3-4.723-25.06-7.512l-4.266-1.5C148.3 244.5 142.8 233.1 146.5 222.7c3.688-10.41 15.11-15.81 25.52-12.22l4.469 1.625c7.844 2.812 16.72 6 23.66 7.031C213.8 221.3 229 219.3 230.4 211.5C231.3 206.4 231.8 203.6 202.5 195.2L196.7 193.5c-17.33-5.094-57.92-17-50.52-59.84C149.8 112.8 165.6 98.76 188 93.99V84c0-11.03 8.953-20 20-20s20 8.969 20 20v10.63c5.453 1.195 11.34 2.789 18.56 5.273C257 103.5 262.5 114.9 258.9 125.4C255.3 135.8 243.8 141.3 233.4 137.7c-5.859-2.031-12-4-17.59-4.844C202.2 130.8 186.1 132.7 185.6 140.5C184.8 144.1 184.3 148.2 207.1 155.2L213.5 156.8C235.8 163.1 277.3 175 269.8 218.3zM599.6 443.7C624.8 413.9 640 376.6 640 336C640 238.8 554 160 448 160c-.3145 0-.6191 .041-.9336 .043C447.5 165.3 448 170.6 448 176c0 98.62-79.68 181.2-186.1 202.5C282.7 455.1 357.1 512 448 512c33.69 0 65.32-8.008 92.85-21.98C565.2 502 596.1 512 632.3 512c3.059 0 5.76-1.725 7.02-4.605c1.229-2.879 .6582-6.148-1.441-8.354C637.6 498.7 615.9 475.3 599.6 443.7z\"],\n    \"compact-disc\": [512, 512, [128192, 128440, 128191], \"f51f\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM80.72 256H79.63c-9.078 0-16.4-8.011-15.56-17.34C72.36 146 146.5 72.06 239.3 64.06C248.3 63.28 256 70.75 256 80.09c0 8.35-6.215 15.28-14.27 15.99C164.7 102.9 103.1 164.3 96.15 241.4C95.4 249.6 88.77 256 80.72 256zM256 351.1c-53.02 0-96-43-96-95.1s42.98-96 96-96s96 43 96 96S309 351.1 256 351.1zM256 224C238.3 224 224 238.2 224 256s14.3 32 32 32c17.7 0 32-14.25 32-32S273.7 224 256 224z\"],\n    \"compass\": [512, 512, [129517], \"f14e\", \"M288 256C288 273.7 273.7 288 256 288C238.3 288 224 273.7 224 256C224 238.3 238.3 224 256 224C273.7 224 288 238.3 288 256zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM325.1 306.7L380.6 162.4C388.1 142.1 369 123.9 349.6 131.4L205.3 186.9C196.8 190.1 190.1 196.8 186.9 205.3L131.4 349.6C123.9 369 142.1 388.1 162.4 380.6L306.7 325.1C315.2 321.9 321.9 315.2 325.1 306.7V306.7z\"],\n    \"compass-drafting\": [512, 512, [\"drafting-compass\"], \"f568\", \"M352 96C352 110.3 348.9 123.9 343.2 136.2L396 227.4C372.3 252.7 341.9 271.5 307.6 281L256 192H255.1L187.9 309.5C209.4 316.3 232.3 320 256 320C326.7 320 389.8 287.3 430.9 235.1C441.9 222.2 462.1 219.1 475.9 231C489.7 242.1 491.9 262.2 480.8 276C428.1 341.8 346.1 384 256 384C220.6 384 186.6 377.6 155.3 365.9L98.65 463.7C93.95 471.8 86.97 478.4 78.58 482.6L23.16 510.3C18.2 512.8 12.31 512.5 7.588 509.6C2.871 506.7 0 501.5 0 496V440.6C0 432.2 2.228 423.9 6.46 416.5L66.49 312.9C53.66 301.6 41.84 289.3 31.18 276C20.13 262.2 22.34 242.1 36.13 231C49.92 219.1 70.06 222.2 81.12 235.1C86.79 243.1 92.87 249.8 99.34 256.1L168.8 136.2C163.1 123.9 160 110.3 160 96C160 42.98 202.1 0 256 0C309 0 352 42.98 352 96L352 96zM256 128C273.7 128 288 113.7 288 96C288 78.33 273.7 64 256 64C238.3 64 224 78.33 224 96C224 113.7 238.3 128 256 128zM372.1 393.9C405.5 381.1 435.5 363.2 461.8 341L505.5 416.5C509.8 423.9 512 432.2 512 440.6V496C512 501.5 509.1 506.7 504.4 509.6C499.7 512.5 493.8 512.8 488.8 510.3L433.4 482.6C425 478.4 418.1 471.8 413.3 463.7L372.1 393.9z\"],\n    \"compress\": [448, 512, [], \"f066\", \"M128 320H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h64v64c0 17.69 14.31 32 32 32s32-14.31 32-32v-96C160 334.3 145.7 320 128 320zM416 320h-96c-17.69 0-32 14.31-32 32v96c0 17.69 14.31 32 32 32s32-14.31 32-32v-64h64c17.69 0 32-14.31 32-32S433.7 320 416 320zM320 192h96c17.69 0 32-14.31 32-32s-14.31-32-32-32h-64V64c0-17.69-14.31-32-32-32s-32 14.31-32 32v96C288 177.7 302.3 192 320 192zM128 32C110.3 32 96 46.31 96 64v64H32C14.31 128 0 142.3 0 160s14.31 32 32 32h96c17.69 0 32-14.31 32-32V64C160 46.31 145.7 32 128 32z\"],\n    \"computer-mouse\": [384, 512, [128433, \"mouse\"], \"f8cc\", \"M0 352c0 88.38 71.63 160 160 160h64c88.38 0 160-71.63 160-160V224H0V352zM176 0H160C71.63 0 0 71.62 0 160v32h176V0zM224 0h-16v192H384V160C384 71.62 312.4 0 224 0z\"],\n    \"cookie\": [512, 512, [127850], \"f563\", \"M494.5 254.8l-11.37-71.48c-4.102-25.9-16.29-49.8-34.8-68.32l-51.33-51.33c-18.52-18.52-42.3-30.7-68.2-34.8L256.9 17.53C231.2 13.42 204.7 17.64 181.5 29.48L116.7 62.53C93.23 74.36 74.36 93.35 62.41 116.7L29.51 181.2c-11.84 23.44-16.08 50.04-11.98 75.94l11.37 71.48c4.101 25.9 16.29 49.77 34.8 68.41l51.33 51.33c18.52 18.4 42.3 30.61 68.2 34.72l71.84 11.37c25.78 4.102 52.27-.1173 75.47-11.95l64.8-33.05c23.32-11.84 42.3-30.82 54.26-54.14l32.81-64.57C494.4 307.3 498.6 280.8 494.5 254.8zM176 367.1c-17.62 0-31.1-14.37-31.1-31.1c0-17.62 14.37-31.1 31.1-31.1s31.1 14.37 31.1 31.1C208 353.6 193.6 367.1 176 367.1zM208 208c-17.62 0-31.1-14.37-31.1-31.1s14.38-31.1 31.1-31.1c17.62 0 31.1 14.37 31.1 31.1S225.6 208 208 208zM368 335.1c-17.62 0-31.1-14.37-31.1-31.1c0-17.62 14.37-31.1 31.1-31.1s31.1 14.37 31.1 31.1C400 321.6 385.6 335.1 368 335.1z\"],\n    \"cookie-bite\": [512, 512, [], \"f564\", \"M494.6 255.9c-65.63-.8203-118.6-54.14-118.6-119.9c-65.74 0-119.1-52.97-119.8-118.6c-25.66-3.867-51.8 .2346-74.77 12.07L116.7 62.41C93.35 74.36 74.36 93.35 62.41 116.7L29.6 181.2c-11.95 23.44-16.17 49.92-12.07 75.94l11.37 71.48c4.102 25.9 16.29 49.8 34.81 68.32l51.36 51.39C133.6 466.9 157.3 479 183.2 483.1l71.84 11.37c25.9 4.101 52.27-.1172 75.59-11.95l64.81-33.05c23.32-11.84 42.31-30.82 54.14-54.14l32.93-64.57C494.3 307.7 498.5 281.4 494.6 255.9zM176 367.1c-17.62 0-32-14.37-32-31.1s14.38-31.1 32-31.1s32 14.37 32 31.1S193.6 367.1 176 367.1zM208 208c-17.62 0-32-14.37-32-31.1s14.38-31.1 32-31.1s32 14.37 32 31.1S225.6 208 208 208zM368 335.1c-17.62 0-32-14.37-32-31.1s14.38-31.1 32-31.1s32 14.37 32 31.1S385.6 335.1 368 335.1z\"],\n    \"copy\": [512, 512, [], \"f0c5\", \"M384 96L384 0h-112c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48H464c26.51 0 48-21.49 48-48V128h-95.1C398.4 128 384 113.6 384 96zM416 0v96h96L416 0zM192 352V128h-144c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h192c26.51 0 48-21.49 48-48L288 416h-32C220.7 416 192 387.3 192 352z\"],\n    \"copyright\": [512, 512, [169], \"f1f9\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM199.2 312.6c14.94 15.06 34.8 23.38 55.89 23.38c.0313 0 0 0 0 0c21.06 0 40.92-8.312 55.83-23.38c9.375-9.375 24.53-9.469 33.97-.1562c9.406 9.344 9.469 24.53 .1562 33.97c-24 24.22-55.95 37.56-89.95 37.56c0 0 .0313 0 0 0c-33.97 0-65.95-13.34-89.95-37.56c-49.44-49.88-49.44-131 0-180.9c24-24.22 55.98-37.56 89.95-37.56c.0313 0 0 0 0 0c34 0 65.95 13.34 89.95 37.56c9.312 9.438 9.25 24.62-.1562 33.97c-9.438 9.344-24.59 9.188-33.97-.1562c-14.91-15.06-34.77-23.38-55.83-23.38c0 0 .0313 0 0 0c-21.09 0-40.95 8.312-55.89 23.38C168.3 230.6 168.3 281.4 199.2 312.6z\"],\n    \"couch\": [640, 512, [], \"f4b8\", \"M592 224C565.5 224 544 245.5 544 272V352H96V272C96 245.5 74.51 224 48 224S0 245.5 0 272v192C0 472.8 7.164 480 16 480h64c8.836 0 15.1-7.164 15.1-16L96 448h448v16c0 8.836 7.164 16 16 16h64c8.836 0 16-7.164 16-16v-192C640 245.5 618.5 224 592 224zM128 272V320h384V272c0-38.63 27.53-70.95 64-78.38V160c0-70.69-57.31-128-128-128H191.1c-70.69 0-128 57.31-128 128L64 193.6C100.5 201.1 128 233.4 128 272z\"],\n    \"credit-card\": [576, 512, [62083, 128179, \"credit-card-alt\"], \"f09d\", \"M512 32C547.3 32 576 60.65 576 96V128H0V96C0 60.65 28.65 32 64 32H512zM576 416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V224H576V416zM112 352C103.2 352 96 359.2 96 368C96 376.8 103.2 384 112 384H176C184.8 384 192 376.8 192 368C192 359.2 184.8 352 176 352H112zM240 384H368C376.8 384 384 376.8 384 368C384 359.2 376.8 352 368 352H240C231.2 352 224 359.2 224 368C224 376.8 231.2 384 240 384z\"],\n    \"crop\": [512, 512, [], \"f125\", \"M448 384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H448V480C448 497.7 433.7 512 416 512C398.3 512 384 497.7 384 480V173.3L173.3 384H352V448H128C92.65 448 64 419.3 64 384V128H32C14.33 128 0 113.7 0 96C0 78.33 14.33 64 32 64H64V32C64 14.33 78.33 0 96 0C113.7 0 128 14.33 128 32V338.7L338.7 128H160V64H402.7L457.4 9.372C469.9-3.124 490.1-3.124 502.6 9.372C515.1 21.87 515.1 42.13 502.6 54.63L448 109.3V384z\"],\n    \"crop-simple\": [512, 512, [\"crop-alt\"], \"f565\", \"M128 384H352V448H128C92.65 448 64 419.3 64 384V128H32C14.33 128 0 113.7 0 96C0 78.33 14.33 64 32 64H64V32C64 14.33 78.33 0 96 0C113.7 0 128 14.33 128 32V384zM384 128H160V64H384C419.3 64 448 92.65 448 128V384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H448V480C448 497.7 433.7 512 416 512C398.3 512 384 497.7 384 480V128z\"],\n    \"cross\": [384, 512, [128327, 10013], \"f654\", \"M383.1 160v64c0 17.62-14.37 32-31.1 32h-96v224c0 17.62-14.38 32-31.1 32H160c-17.62 0-32-14.38-32-32V256h-96C14.37 256-.0008 241.6-.0008 224V160c0-17.62 14.38-32 32-32h96V32c0-17.62 14.38-32 32-32h64c17.62 0 31.1 14.38 31.1 32v96h96C369.6 128 383.1 142.4 383.1 160z\"],\n    \"crosshairs\": [512, 512, [], \"f05b\", \"M224 256C224 238.3 238.3 224 256 224C273.7 224 288 238.3 288 256C288 273.7 273.7 288 256 288C238.3 288 224 273.7 224 256zM256 0C273.7 0 288 14.33 288 32V42.35C381.7 56.27 455.7 130.3 469.6 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H469.6C455.7 381.7 381.7 455.7 288 469.6V480C288 497.7 273.7 512 256 512C238.3 512 224 497.7 224 480V469.6C130.3 455.7 56.27 381.7 42.35 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H42.35C56.27 130.3 130.3 56.27 224 42.35V32C224 14.33 238.3 0 256 0V0zM224 404.6V384C224 366.3 238.3 352 256 352C273.7 352 288 366.3 288 384V404.6C346.3 392.1 392.1 346.3 404.6 288H384C366.3 288 352 273.7 352 256C352 238.3 366.3 224 384 224H404.6C392.1 165.7 346.3 119.9 288 107.4V128C288 145.7 273.7 160 256 160C238.3 160 224 145.7 224 128V107.4C165.7 119.9 119.9 165.7 107.4 224H128C145.7 224 160 238.3 160 256C160 273.7 145.7 288 128 288H107.4C119.9 346.3 165.7 392.1 224 404.6z\"],\n    \"crow\": [640, 512, [], \"f520\", \"M523.9 31.1H574C603.4 31.1 628.1 51.99 636.1 80.48L640 95.1L544 119.1V191.1C544 279.1 484.9 354.1 404.2 376.8L446.2 478.9C451.2 491.1 445.4 505.1 433.1 510.2C420.9 515.2 406.9 509.4 401.8 497.1L355.2 383.1C354.1 383.1 353.1 384 352 384H311.1L350.2 478.9C355.2 491.1 349.4 505.1 337.1 510.2C324.9 515.2 310.9 509.4 305.8 497.1L259.2 384H126.1L51.51 441.4C37.5 452.1 17.41 449.5 6.638 435.5C-4.138 421.5-1.517 401.4 12.49 390.6L368 117.2V88C368 39.4 407.4 0 456 0C483.3 0 507.7 12.46 523.9 32V31.1zM456 111.1C469.3 111.1 480 101.3 480 87.1C480 74.74 469.3 63.1 456 63.1C442.7 63.1 432 74.74 432 87.1C432 101.3 442.7 111.1 456 111.1z\"],\n    \"crown\": [576, 512, [128081], \"f521\", \"M576 136c0 22.09-17.91 40-40 40c-.248 0-.4551-.1266-.7031-.1305l-50.52 277.9C482 468.9 468.8 480 453.3 480H122.7c-15.46 0-28.72-11.06-31.48-26.27L40.71 175.9C40.46 175.9 40.25 176 39.1 176c-22.09 0-40-17.91-40-40S17.91 96 39.1 96s40 17.91 40 40c0 8.998-3.521 16.89-8.537 23.57l89.63 71.7c15.91 12.73 39.5 7.544 48.61-10.68l57.6-115.2C255.1 98.34 247.1 86.34 247.1 72C247.1 49.91 265.9 32 288 32s39.1 17.91 39.1 40c0 14.34-7.963 26.34-19.3 33.4l57.6 115.2c9.111 18.22 32.71 23.4 48.61 10.68l89.63-71.7C499.5 152.9 496 144.1 496 136C496 113.9 513.9 96 536 96S576 113.9 576 136z\"],\n    \"crutch\": [512, 512, [], \"f7f7\", \"M502.6 168.1l-159.6-159.5c-12.54-12.54-32.85-12.6-45.46-.1256c-12.68 12.54-12.73 33.1-.1256 45.71l159.6 159.5c12.6 12.59 33.03 12.57 45.59-.0628C515.1 201.9 515.1 181.5 502.6 168.1zM334.4 245.4l-67.88-67.87l55.13-55.12l-45.25-45.25L166.7 186.8C154.1 199.6 145.2 215.6 141.1 233.2L113.3 353.4l-108.6 108.6c-6.25 6.25-6.25 16.37 0 22.62l22.63 22.62c6.25 6.25 16.38 6.25 22.63 0l108.6-108.6l120.3-27.75c17.5-4.125 33.63-13 46.38-25.62l109.6-109.7l-45.25-45.25L334.4 245.4zM279.9 300.1C275.7 304.2 270.3 307.2 264.4 308.6l-79.25 18.25l18.25-79.25c1.375-5.875 4.375-11.25 8.5-15.5l9.375-9.25l67.88 67.87L279.9 300.1z\"],\n    \"cruzeiro-sign\": [384, 512, [], \"e152\", \"M159.1 402.7V256C159.1 238.3 174.3 224 191.1 224C199.7 224 206.8 226.7 212.3 231.3C223 226.6 234.8 224 247.3 224C264.5 224 281.3 229.1 295.7 238.7L305.8 245.4C320.5 255.2 324.4 275 314.6 289.8C304.8 304.5 284.1 308.4 270.2 298.6L260.2 291.9C256.3 289.4 251.9 288 247.3 288C234.4 288 224 298.4 224 311.3V416C264.1 416 302.3 400.6 330.7 375.3C343.8 363.5 364.1 364.6 375.8 377.8C387.6 390.9 386.5 411.2 373.3 422.1C333.7 458.4 281.4 480 224 480C100.3 480 0 379.7 0 256C0 132.3 100.3 32 224 32C281.4 32 333.7 53.59 373.3 89.04C386.5 100.8 387.6 121.1 375.8 134.2C364.1 147.4 343.8 148.5 330.7 136.7C302.3 111.4 264.1 96 224 96C135.6 96 63.1 167.6 63.1 256C63.1 321.6 103.5 377.1 159.1 402.7V402.7z\"],\n    \"cube\": [512, 512, [], \"f1b2\", \"M234.5 5.709C248.4 .7377 263.6 .7377 277.5 5.709L469.5 74.28C494.1 83.38 512 107.5 512 134.6V377.4C512 404.5 494.1 428.6 469.5 437.7L277.5 506.3C263.6 511.3 248.4 511.3 234.5 506.3L42.47 437.7C17 428.6 0 404.5 0 377.4V134.6C0 107.5 17 83.38 42.47 74.28L234.5 5.709zM256 65.98L82.34 128L256 190L429.7 128L256 65.98zM288 434.6L448 377.4V189.4L288 246.6V434.6z\"],\n    \"cubes\": [576, 512, [], \"f1b3\", \"M172.1 40.16L268.1 3.76C280.9-1.089 295.1-1.089 307.9 3.76L403.9 40.16C425.6 48.41 440 69.25 440 92.52V204.7C441.3 205.1 442.6 205.5 443.9 205.1L539.9 242.4C561.6 250.6 576 271.5 576 294.7V413.9C576 436.1 562.9 456.2 542.5 465.1L446.5 507.3C432.2 513.7 415.8 513.7 401.5 507.3L288 457.5L174.5 507.3C160.2 513.7 143.8 513.7 129.5 507.3L33.46 465.1C13.13 456.2 0 436.1 0 413.9V294.7C0 271.5 14.39 250.6 36.15 242.4L132.1 205.1C133.4 205.5 134.7 205.1 136 204.7V92.52C136 69.25 150.4 48.41 172.1 40.16V40.16zM290.8 48.64C289 47.95 286.1 47.95 285.2 48.64L206.8 78.35L287.1 109.5L369.2 78.35L290.8 48.64zM392 210.6V121L309.6 152.6V241.8L392 210.6zM154.8 250.9C153 250.2 150.1 250.2 149.2 250.9L70.81 280.6L152 311.7L233.2 280.6L154.8 250.9zM173.6 455.3L256 419.1V323.2L173.6 354.8V455.3zM342.8 280.6L424 311.7L505.2 280.6L426.8 250.9C425 250.2 422.1 250.2 421.2 250.9L342.8 280.6zM528 413.9V323.2L445.6 354.8V455.3L523.2 421.2C526.1 419.9 528 417.1 528 413.9V413.9z\"],\n    \"d\": [384, 512, [100], \"44\", \"M160 32.01L32 32.01c-17.67 0-32 14.33-32 32v384c0 17.67 14.33 32 32 32l128-.0073c123.5 0 224-100.5 224-224S283.5 32.01 160 32.01zM160 416H64v-320h96c88.22 0 160 71.78 160 159.1S248.2 416 160 416z\"],\n    \"database\": [448, 512, [], \"f1c0\", \"M448 80V128C448 172.2 347.7 208 224 208C100.3 208 0 172.2 0 128V80C0 35.82 100.3 0 224 0C347.7 0 448 35.82 448 80zM393.2 214.7C413.1 207.3 433.1 197.8 448 186.1V288C448 332.2 347.7 368 224 368C100.3 368 0 332.2 0 288V186.1C14.93 197.8 34.02 207.3 54.85 214.7C99.66 230.7 159.5 240 224 240C288.5 240 348.3 230.7 393.2 214.7V214.7zM54.85 374.7C99.66 390.7 159.5 400 224 400C288.5 400 348.3 390.7 393.2 374.7C413.1 367.3 433.1 357.8 448 346.1V432C448 476.2 347.7 512 224 512C100.3 512 0 476.2 0 432V346.1C14.93 357.8 34.02 367.3 54.85 374.7z\"],\n    \"delete-left\": [576, 512, [9003, \"backspace\"], \"f55a\", \"M576 384C576 419.3 547.3 448 512 448H205.3C188.3 448 172 441.3 160 429.3L9.372 278.6C3.371 272.6 0 264.5 0 256C0 247.5 3.372 239.4 9.372 233.4L160 82.75C172 70.74 188.3 64 205.3 64H512C547.3 64 576 92.65 576 128V384zM271 208.1L318.1 256L271 303C261.7 312.4 261.7 327.6 271 336.1C280.4 346.3 295.6 346.3 304.1 336.1L352 289.9L399 336.1C408.4 346.3 423.6 346.3 432.1 336.1C442.3 327.6 442.3 312.4 432.1 303L385.9 256L432.1 208.1C442.3 199.6 442.3 184.4 432.1 175C423.6 165.7 408.4 165.7 399 175L352 222.1L304.1 175C295.6 165.7 280.4 165.7 271 175C261.7 184.4 261.7 199.6 271 208.1V208.1z\"],\n    \"democrat\": [640, 512, [], \"f747\", \"M191.1 479.1C191.1 497.6 206.4 512 223.1 512h32c17.6 0 32-14.4 32-32v-64h160v64c0 17.6 14.41 32 32.01 32L511.1 512c17.6 0 32-14.4 32-32l.0102-128H192L191.1 479.1zM637.2 256.9l-19.5-29.38c-28.25-42.25-75.38-67.5-126.1-67.5H255.1L174.7 78.75c20.13-20 22.63-51 7.5-73.88C178.9-.2552 171.5-1.005 167.1 3.37L125.2 45.25L82.36 2.37C78.74-1.255 72.74-.6302 69.99 3.62c-12.25 18.63-10.25 44 6.125 60.38c3.25 3.25 7.25 5.25 11.25 7.5c-2.125 1.75-4.625 3.125-6.375 5.375l-74.63 99.38C-.8895 185.9-2.014 198.9 3.361 209.7l14.38 28.5c5.375 10.88 16.5 17.75 28.5 17.75H77.24c8.5 0 16.63-3.375 22.63-9.375l38.13-34.63l54.04 108h351.1l-.0102-77.75c16.25 12.13 18.25 17.5 40.13 50.25c4.875 7.375 14.75 9.25 22.13 4.375l26.63-17.63C640.2 274.2 642.2 264.2 637.2 256.9zM296.2 243.2L279.7 259.4l3.875 22.75c.625 4.125-3.625 7.125-7.25 5.25L255.1 276.7L235.6 287.4C231.1 289.2 227.7 286.2 228.4 282.1l3.875-22.75L215.7 243.2c-3-2.875-1.25-7.875 2.875-8.5l22.75-3.25l10.25-20.75c1.75-3.625 7.125-3.625 9 0l10.13 20.75l22.88 3.25C297.6 235.4 299.2 240.4 296.2 243.2zM408.2 243.2l-16.5 16.13l3.875 22.75c.625 4.125-3.625 7.125-7.25 5.25L367.1 276.7l-20.38 10.63c-3.625 1.875-7.875-1.125-7.25-5.25l3.875-22.75l-16.5-16.13c-3-2.875-1.25-7.875 2.875-8.5l22.75-3.25l10.25-20.75c1.75-3.625 7.125-3.625 9 0l10.13 20.75l22.88 3.25C409.6 235.4 411.2 240.4 408.2 243.2zM520.2 243.2l-16.5 16.13l3.875 22.75c.625 4.125-3.625 7.125-7.25 5.25l-20.38-10.63l-20.38 10.63c-3.625 1.875-7.875-1.125-7.25-5.25l3.875-22.75l-16.5-16.13c-3-2.875-1.25-7.875 2.875-8.5l22.75-3.25l10.25-20.75c1.75-3.625 7.125-3.625 9 0l10.13 20.75l22.88 3.25C521.6 235.4 523.2 240.4 520.2 243.2z\"],\n    \"desktop\": [576, 512, [61704, 128421, \"desktop-alt\"], \"f390\", \"M528 0h-480C21.5 0 0 21.5 0 48v320C0 394.5 21.5 416 48 416h192L224 464H152C138.8 464 128 474.8 128 488S138.8 512 152 512h272c13.25 0 24-10.75 24-24s-10.75-24-24-24H352L336 416h192c26.5 0 48-21.5 48-48v-320C576 21.5 554.5 0 528 0zM512 288H64V64h448V288z\"],\n    \"dharmachakra\": [512, 512, [9784], \"f655\", \"M495 225l-17.24 1.124c-5.25-39.5-20.76-75.63-43.89-105.9l12.1-11.37c6.875-6.125 7.25-16.75 .75-23.38L426.5 64.38c-6.625-6.5-17.25-6.125-23.38 .75l-11.37 12.1c-30.25-23.12-66.38-38.64-105.9-43.89L287 17C287.5 7.75 280.2 0 271 0h-30c-9.25 0-16.5 7.75-16 17l1.124 17.24c-39.5 5.25-75.63 20.76-105.9 43.89L108.9 65.13C102.8 58.25 92.13 57.88 85.63 64.38L64.38 85.5C57.88 92.12 58.25 102.8 65.13 108.9l12.1 11.37C54.1 150.5 39.49 186.6 34.24 226.1L17 225C7.75 224.5 0 231.8 0 241v30c0 9.25 7.75 16.5 17 16l17.24-1.124c5.25 39.5 20.76 75.63 43.89 105.9l-12.1 11.37c-6.875 6.125-7.25 16.75-.75 23.25l21.25 21.25c6.5 6.5 17.13 6.125 23.25-.75l11.37-12.1c30.25 23.12 66.38 38.64 105.9 43.89L225 495C224.5 504.2 231.8 512 241 512h30c9.25 0 16.5-7.75 16-17l-1.124-17.24c39.5-5.25 75.63-20.76 105.9-43.89l11.37 12.1c6.125 6.875 16.75 7.25 23.38 .75l21.12-21.25c6.5-6.5 6.125-17.13-.75-23.25l-12.1-11.37c23.12-30.25 38.64-66.38 43.89-105.9L495 287C504.3 287.5 512 280.2 512 271v-30C512 231.8 504.3 224.5 495 225zM281.9 98.68c24.75 4 47.61 13.59 67.24 27.71L306.5 174.6c-8.75-5.375-18.38-9.507-28.62-11.88L281.9 98.68zM230.1 98.68l3.996 64.06C223.9 165.1 214.3 169.2 205.5 174.6L162.9 126.4C182.5 112.3 205.4 102.7 230.1 98.68zM126.4 163l48.35 42.48c-5.5 8.75-9.606 18.4-11.98 28.65L98.68 230.1C102.7 205.4 112.2 182.5 126.4 163zM98.68 281.9l64.06-3.996C165.1 288.1 169.3 297.8 174.6 306.5l-48.23 42.61C112.3 329.5 102.7 306.6 98.68 281.9zM230.1 413.3c-24.75-4-47.61-13.59-67.24-27.71l42.58-48.33c8.75 5.5 18.4 9.606 28.65 11.98L230.1 413.3zM256 288C238.4 288 224 273.6 224 256s14.38-32 32-32s32 14.38 32 32S273.6 288 256 288zM281.9 413.3l-3.996-64.06c10.25-2.375 19.9-6.48 28.65-11.98l42.48 48.35C329.5 399.8 306.6 409.3 281.9 413.3zM385.6 349l-48.25-42.5c5.375-8.75 9.507-18.38 11.88-28.62l64.06 3.996C409.3 306.6 399.8 329.5 385.6 349zM349.3 234.1c-2.375-10.25-6.48-19.9-11.98-28.65L385.6 163c14.13 19.5 23.69 42.38 27.69 67.13L349.3 234.1z\"],\n    \"diagram-next\": [512, 512, [], \"e476\", \"M512 160C512 195.3 483.3 224 448 224H280V288H326.1C347.4 288 358.1 313.9 343 328.1L272.1 399C263.6 408.4 248.4 408.4 239 399L168.1 328.1C153.9 313.9 164.6 288 185.9 288H232V224H64C28.65 224 0 195.3 0 160V96C0 60.65 28.65 32 64 32H448C483.3 32 512 60.65 512 96V160zM312.6 416H448V352H376.6L384.1 343.6C401 327.6 404.6 306.4 399 288H448C483.3 288 512 316.7 512 352V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V352C0 316.7 28.65 288 64 288H112.1C107.4 306.4 110.1 327.6 127 343.6L135.4 352H64V416H199.4L216.4 432.1C238.3 454.8 273.7 454.8 295.6 432.1L312.6 416z\"],\n    \"diagram-predecessor\": [512, 512, [], \"e477\", \"M64 480C28.65 480 0 451.3 0 416V352C0 316.7 28.65 288 64 288H448C483.3 288 512 316.7 512 352V416C512 451.3 483.3 480 448 480H64zM448 416V352H64V416H448zM288 160C288 195.3 259.3 224 224 224H64C28.65 224 0 195.3 0 160V96C0 60.65 28.65 32 64 32H368C412.2 32 448 67.82 448 112V128H486.1C507.4 128 518.1 153.9 503 168.1L432.1 239C423.6 248.4 408.4 248.4 399 239L328.1 168.1C313.9 153.9 324.6 128 345.9 128H384V112C384 103.2 376.8 96 368 96H288V160z\"],\n    \"diagram-project\": [576, 512, [\"project-diagram\"], \"f542\", \"M0 80C0 53.49 21.49 32 48 32H144C170.5 32 192 53.49 192 80V96H384V80C384 53.49 405.5 32 432 32H528C554.5 32 576 53.49 576 80V176C576 202.5 554.5 224 528 224H432C405.5 224 384 202.5 384 176V160H192V176C192 177.7 191.9 179.4 191.7 180.1L272 288H368C394.5 288 416 309.5 416 336V432C416 458.5 394.5 480 368 480H272C245.5 480 224 458.5 224 432V336C224 334.3 224.1 332.6 224.3 331L144 224H48C21.49 224 0 202.5 0 176V80z\"],\n    \"diagram-successor\": [512, 512, [], \"e47a\", \"M512 416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V352C0 316.7 28.65 288 64 288H448C483.3 288 512 316.7 512 352V416zM224 224H64C28.65 224 0 195.3 0 160V96C0 60.65 28.65 32 64 32H368C412.2 32 448 67.82 448 112V128H486.1C507.4 128 518.1 153.9 503 168.1L432.1 239C423.6 248.4 408.4 248.4 399 239L328.1 168.1C313.9 153.9 324.6 128 345.9 128H384V112C384 103.2 376.8 96 368 96H288V160C288 195.3 259.3 224 224 224V224zM64 160H224V96H64V160z\"],\n    \"diamond\": [512, 512, [9830], \"f219\", \"M500.3 227.7C515.9 243.3 515.9 268.7 500.3 284.3L284.3 500.3C268.7 515.9 243.3 515.9 227.7 500.3L11.72 284.3C-3.905 268.7-3.905 243.3 11.72 227.7L227.7 11.72C243.3-3.905 268.7-3.905 284.3 11.72L500.3 227.7z\"],\n    \"diamond-turn-right\": [512, 512, [\"directions\"], \"f5eb\", \"M497.1 222.1l-208.1-208.1c-9.364-9.364-21.62-14.04-33.89-14.03C243.7 .0092 231.5 4.686 222.1 14.03L14.03 222.1C4.676 231.5 .0002 243.7 .0004 255.1c.0002 12.26 4.676 24.52 14.03 33.87l208.1 208.1C231.5 507.3 243.7 511.1 256 511.1c12.26 0 24.52-4.677 33.87-14.03l208.1-208.1c9.352-9.353 14.03-21.61 14.03-33.87C511.1 243.7 507.3 231.5 497.1 222.1zM410.5 252l-96 84c-10.79 9.545-26.53 .9824-26.53-12.03V272H223.1l-.0001 48C223.1 337.6 209.6 352 191.1 352S159.1 337.6 159.1 320V240c0-17.6 14.4-32 32-32h95.1V156c0-13.85 16.39-20.99 26.53-12.03l96 84C414 231 415.1 235.4 415.1 240S414 249 410.5 252z\"],\n    \"dice\": [640, 512, [127922], \"f522\", \"M447.1 224c0-12.56-4.781-25.13-14.35-34.76l-174.9-174.9C249.1 4.786 236.5 0 223.1 0C211.4 0 198.9 4.786 189.2 14.35L14.35 189.2C4.783 198.9-.0011 211.4-.0011 223.1c0 12.56 4.785 25.17 14.35 34.8l174.9 174.9c9.625 9.562 22.19 14.35 34.75 14.35s25.13-4.783 34.75-14.35l174.9-174.9C443.2 249.1 447.1 236.6 447.1 224zM96 248c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1S120 210.8 120 224S109.3 248 96 248zM224 376c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1s23.1 10.75 23.1 23.1S237.3 376 224 376zM224 248c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1S248 210.8 248 224S237.3 248 224 248zM224 120c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1s23.1 10.75 23.1 23.1S237.3 120 224 120zM352 248c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1s23.1 10.75 23.1 23.1S365.3 248 352 248zM591.1 192l-118.7 0c4.418 10.27 6.604 21.25 6.604 32.23c0 20.7-7.865 41.38-23.63 57.14l-136.2 136.2v46.37C320 490.5 341.5 512 368 512h223.1c26.5 0 47.1-21.5 47.1-47.1V240C639.1 213.5 618.5 192 591.1 192zM479.1 376c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1s23.1 10.75 23.1 23.1S493.2 376 479.1 376z\"],\n    \"dice-d20\": [512, 512, [], \"f6cf\", \"M20.04 317.3C18 317.3 16 315.8 16 313.3V150.5c0-2.351 1.91-4.012 4.001-4.012c.6882 0 1.396 .18 2.062 .5748l76.62 45.1l-75.28 122.3C22.59 316.8 21.31 317.3 20.04 317.3zM231.4 405.2l-208.2-22.06c-4.27-.4821-7.123-4.117-7.123-7.995c0-1.401 .3725-2.834 1.185-4.161L122.7 215.1L231.4 405.2zM31.1 420.1c0-2.039 1.508-4.068 3.93-4.068c.1654 0 .3351 .0095 .5089 .0291l203.6 22.31v65.66C239.1 508.6 236.2 512 232 512c-1.113 0-2.255-.2387-3.363-.7565L34.25 423.6C32.69 422.8 31.1 421.4 31.1 420.1zM33.94 117.1c-1.289-.7641-1.938-2.088-1.938-3.417c0-1.281 .6019-2.567 1.813-3.364l150.8-98.59C185.1 10.98 187.3 10.64 188.6 10.64c4.32 0 8.003 3.721 8.003 8.022c0 1.379-.3788 2.818-1.237 4.214L115.5 165.8L33.94 117.1zM146.8 175.1l95.59-168.4C245.5 2.53 250.7 0 255.1 0s10.5 2.53 13.62 7.624l95.59 168.4H146.8zM356.4 207.1l-100.4 175.7L155.6 207.1H356.4zM476.1 415.1c2.422 0 3.93 2.029 3.93 4.068c0 1.378-.6893 2.761-2.252 3.524l-194.4 87.66c-1.103 .5092-2.241 .7443-3.35 .7443c-4.2 0-7.994-3.371-7.994-7.994v-65.69l203.6-22.28C475.7 416 475.9 415.1 476.1 415.1zM494.8 370.9C495.6 372.3 496 373.7 496 375.1c0 3.872-2.841 7.499-7.128 7.98l-208.2 22.06l108.6-190.1L494.8 370.9zM316.6 22.87c-.8581-1.395-1.237-2.834-1.237-4.214c0-4.301 3.683-8.022 8.003-8.022c1.308 0 2.675 .3411 4.015 1.11l150.8 98.59c1.211 .7973 1.813 2.076 1.813 3.353c0 1.325-.6488 2.649-1.938 3.429L396.5 165.8L316.6 22.87zM491.1 146.5c2.091 0 4.001 1.661 4.001 4.012v162.8c0 2.483-2.016 4.006-4.053 4.006c-1.27 0-2.549-.5919-3.353-1.912l-75.28-122.3l76.62-45.1C490.6 146.7 491.3 146.5 491.1 146.5z\"],\n    \"dice-d6\": [448, 512, [], \"f6d1\", \"M7.994 153.5c1.326 0 2.687 .3508 3.975 1.119L208 271.5v223.8c0 9.741-7.656 16.71-16.01 16.71c-2.688 0-5.449-.7212-8.05-2.303l-152.2-92.47C12.13 405.3 0 383.3 0 359.5v-197.7C0 156.1 3.817 153.5 7.994 153.5zM426.2 117.2c0 2.825-1.352 5.647-4.051 7.248L224 242.6L25.88 124.4C23.19 122.8 21.85 119.1 21.85 117.2c0-2.8 1.32-5.603 3.965-7.221l165.1-100.9C201.7 3.023 212.9 0 224 0s22.27 3.023 32.22 9.07l165.1 100.9C424.8 111.6 426.2 114.4 426.2 117.2zM440 153.5C444.2 153.5 448 156.1 448 161.8v197.7c0 23.75-12.12 45.75-31.78 57.69l-152.2 92.5C261.5 511.3 258.7 512 256 512C247.7 512 240 505 240 495.3V271.5l196-116.9C437.3 153.8 438.7 153.5 440 153.5z\"],\n    \"dice-five\": [448, 512, [9860], \"f523\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S145.6 384 128 384zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM224 288C206.4 288 192 273.6 192 256s14.38-32 32-32s32 14.38 32 32S241.6 288 224 288zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384zM320 192c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 192 320 192z\"],\n    \"dice-four\": [448, 512, [9859], \"f524\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S145.6 384 128 384zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384zM320 192c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 192 320 192z\"],\n    \"dice-one\": [448, 512, [9856], \"f525\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM224 288C206.4 288 192 273.6 192 256s14.38-32 32-32s32 14.38 32 32S241.6 288 224 288z\"],\n    \"dice-six\": [448, 512, [9861], \"f526\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S145.6 384 128 384zM128 288C110.4 288 96 273.6 96 256s14.38-32 32-32s32 14.38 32 32S145.6 288 128 288zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384zM320 288c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 288 320 288zM320 192c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 192 320 192z\"],\n    \"dice-three\": [448, 512, [9858], \"f527\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM224 288C206.4 288 192 273.6 192 256s14.38-32 32-32s32 14.38 32 32S241.6 288 224 288zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384z\"],\n    \"dice-two\": [448, 512, [9857], \"f528\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384z\"],\n    \"disease\": [512, 512, [], \"f7fa\", \"M472.2 195.9l-66.1-22.1c-19.25-6.624-33.5-20.87-38.13-38.24l-16-60.49c-11.62-43.74-76.63-57.11-110-22.62L194.1 99.3c-13.25 13.75-33.5 20.87-54.25 19.25L68.86 112.9c-52-3.999-86.88 44.99-59 82.86l38.63 52.49c11 14.1 12.75 33.74 4.625 50.12l-28.5 56.99c-20.62 41.24 22.88 84.86 73.5 73.86l69.1-15.25c20.12-4.499 41.38 .0001 57 11.62l54.38 40.87c39.38 29.62 101 7.623 104.5-37.24l4.625-61.86c1.375-17.75 12.88-33.87 30.62-42.99l61.1-31.62C526.1 269.8 520.9 212.5 472.2 195.9zM159.1 256c-17.62 0-31.1-14.37-31.1-31.1s14.37-31.1 31.1-31.1s31.1 14.37 31.1 31.1S177.6 256 159.1 256zM287.1 351.1c-17.62 0-31.1-14.37-31.1-31.1c0-17.62 14.37-31.1 31.1-31.1s31.1 14.37 31.1 31.1C319.1 337.6 305.6 351.1 287.1 351.1zM303.1 224c-8.875 0-15.1-7.125-15.1-15.1c0-8.873 7.125-15.1 15.1-15.1s15.1 7.125 15.1 15.1C319.1 216.9 312.9 224 303.1 224z\"],\n    \"divide\": [448, 512, [10135, 247], \"f529\", \"M400 224h-352c-17.69 0-32 14.31-32 31.1s14.31 32 32 32h352c17.69 0 32-14.31 32-32S417.7 224 400 224zM224 144c26.47 0 48-21.53 48-48s-21.53-48-48-48s-48 21.53-48 48S197.5 144 224 144zM224 368c-26.47 0-48 21.53-48 48s21.53 48 48 48s48-21.53 48-48S250.5 368 224 368z\"],\n    \"dna\": [448, 512, [129516], \"f471\", \"M.1193 494.1c-1.125 9.5 6.312 17.87 15.94 17.87l32.06 .0635c8.125 0 15.21-5.833 16.21-13.83c.7501-4.875 1.869-11.17 3.494-18.17h312c1.625 6.875 2.904 13.31 3.529 18.18c1.125 7.1 7.84 13.94 15.97 13.82l32.46-.0625c9.625 0 17.12-8.374 15.99-17.87c-4.625-37.87-25.75-128.1-119.1-207.7c-17.5 12.37-36.98 24.37-58.48 35.49c6.25 4.625 11.56 9.405 17.06 14.15H159.7c21.25-18.12 47.03-35.63 78.65-51.38c172.1-85.5 203.7-218.8 209.5-266.7c1.125-9.5-6.297-17.88-15.92-17.88L399.6 .001c-8.125 0-14.84 5.832-15.96 13.83c-.7501 4.875-1.869 11.17-3.369 18.17H67.74C66.24 25 65.08 18.81 64.33 13.81C63.21 5.813 56.48-.124 48.36 .001L16.1 .1338c-9.625 0-17.09 8.354-15.96 17.85c5.125 42.87 31.29 153.8 159.9 238.1C31.55 340.3 5.245 451.2 .1193 494.1zM223.9 219.7C198.8 205.9 177.6 191.3 159.7 176h128.5C270.4 191.3 249 206.1 223.9 219.7zM355.1 96c-5.875 10.37-12.88 21.12-21 31.1H113.1c-8.25-10.87-15.3-21.63-21.05-32L355.1 96zM93 415.1c5.875-10.37 12.74-21.13 20.87-32h219.4c8.375 10.87 15.48 21.63 21.23 32H93z\"],\n    \"dog\": [576, 512, [128021], \"f6d3\", \"M332.7 19.85C334.6 8.395 344.5 0 356.1 0C363.6 0 370.6 3.52 375.1 9.502L392 32H444.1C456.8 32 469.1 37.06 478.1 46.06L496 64H552C565.3 64 576 74.75 576 88V112C576 156.2 540.2 192 496 192H426.7L421.6 222.5L309.6 158.5L332.7 19.85zM448 64C439.2 64 432 71.16 432 80C432 88.84 439.2 96 448 96C456.8 96 464 88.84 464 80C464 71.16 456.8 64 448 64zM416 256.1V480C416 497.7 401.7 512 384 512H352C334.3 512 320 497.7 320 480V364.8C295.1 377.1 268.8 384 240 384C211.2 384 184 377.1 160 364.8V480C160 497.7 145.7 512 128 512H96C78.33 512 64 497.7 64 480V249.8C35.23 238.9 12.64 214.5 4.836 183.3L.9558 167.8C-3.331 150.6 7.094 133.2 24.24 128.1C41.38 124.7 58.76 135.1 63.05 152.2L66.93 167.8C70.49 182 83.29 191.1 97.97 191.1H303.8L416 256.1z\"],\n    \"dollar-sign\": [320, 512, [128178, 61781, \"dollar\", \"usd\"], \"24\", \"M160 0C177.7 0 192 14.33 192 32V67.68C193.6 67.89 195.1 68.12 196.7 68.35C207.3 69.93 238.9 75.02 251.9 78.31C268.1 82.65 279.4 100.1 275 117.2C270.7 134.3 253.3 144.7 236.1 140.4C226.8 137.1 198.5 133.3 187.3 131.7C155.2 126.9 127.7 129.3 108.8 136.5C90.52 143.5 82.93 153.4 80.92 164.5C78.98 175.2 80.45 181.3 82.21 185.1C84.1 189.1 87.79 193.6 95.14 198.5C111.4 209.2 136.2 216.4 168.4 225.1L171.2 225.9C199.6 233.6 234.4 243.1 260.2 260.2C274.3 269.6 287.6 282.3 295.8 299.9C304.1 317.7 305.9 337.7 302.1 358.1C295.1 397 268.1 422.4 236.4 435.6C222.8 441.2 207.8 444.8 192 446.6V480C192 497.7 177.7 512 160 512C142.3 512 128 497.7 128 480V445.1C127.6 445.1 127.1 444.1 126.7 444.9L126.5 444.9C102.2 441.1 62.07 430.6 35 418.6C18.85 411.4 11.58 392.5 18.76 376.3C25.94 360.2 44.85 352.9 60.1 360.1C81.9 369.4 116.3 378.5 136.2 381.6C168.2 386.4 194.5 383.6 212.3 376.4C229.2 369.5 236.9 359.5 239.1 347.5C241 336.8 239.6 330.7 237.8 326.9C235.9 322.9 232.2 318.4 224.9 313.5C208.6 302.8 183.8 295.6 151.6 286.9L148.8 286.1C120.4 278.4 85.58 268.9 59.76 251.8C45.65 242.4 32.43 229.7 24.22 212.1C15.89 194.3 14.08 174.3 17.95 153C25.03 114.1 53.05 89.29 85.96 76.73C98.98 71.76 113.1 68.49 128 66.73V32C128 14.33 142.3 0 160 0V0z\"],\n    \"dolly\": [576, 512, [\"dolly-box\"], \"f472\", \"M294.2 277.8c17.1 5 34.62 13.38 49.5 24.62l161.5-53.75c8.375-2.875 12.88-11.88 10-20.25L454.8 47.25c-2.748-8.502-11.88-13-20.12-10.12l-61.13 20.37l33.12 99.38l-60.75 20.13l-33.12-99.38L251.2 98.13c-8.373 2.75-12.87 11.88-9.998 20.12L294.2 277.8zM574.4 309.9c-5.594-16.75-23.67-25.91-40.48-20.23l-202.5 67.51c-17.22-22.01-43.57-36.41-73.54-36.97L165.7 43.75C156.9 17.58 132.5 0 104.9 0H32C14.33 0 0 14.33 0 32s14.33 32 32 32h72.94l92.22 276.7C174.7 358.2 160 385.3 160 416c0 53.02 42.98 96 96 96c52.4 0 94.84-42.03 95.82-94.2l202.3-67.44C570.9 344.8 579.1 326.6 574.4 309.9zM256 448c-17.67 0-32-14.33-32-32c0-17.67 14.33-31.1 32-31.1S288 398.3 288 416C288 433.7 273.7 448 256 448z\"],\n    \"dong-sign\": [384, 512, [], \"e169\", \"M320 64C337.7 64 352 78.33 352 96C352 113.7 337.7 128 320 128V384C320 401.7 305.7 416 288 416C275 416 263.9 408.3 258.8 397.2C239.4 409.1 216.5 416 192 416C121.3 416 64 358.7 64 288C64 217.3 121.3 160 192 160C215.3 160 237.2 166.2 256 177.1V128H224C206.3 128 192 113.7 192 96C192 78.33 206.3 64 224 64H256C256 46.33 270.3 32 288 32C305.7 32 320 46.33 320 64V64zM256 288C256 252.7 227.3 224 192 224C156.7 224 128 252.7 128 288C128 323.3 156.7 352 192 352C227.3 352 256 323.3 256 288zM352 448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448H352z\"],\n    \"door-closed\": [576, 512, [128682], \"f52a\", \"M560 448H480V50.75C480 22.75 458.5 0 432 0h-288C117.5 0 96 22.75 96 50.75V448H16C7.125 448 0 455.1 0 464v32C0 504.9 7.125 512 16 512h544c8.875 0 16-7.125 16-16v-32C576 455.1 568.9 448 560 448zM384 288c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S401.6 288 384 288z\"],\n    \"door-open\": [576, 512, [], \"f52b\", \"M560 448H512V113.5c0-27.25-21.5-49.5-48-49.5L352 64.01V128h96V512h112c8.875 0 16-7.125 16-15.1v-31.1C576 455.1 568.9 448 560 448zM280.3 1.007l-192 49.75C73.1 54.51 64 67.76 64 82.88V448H16c-8.875 0-16 7.125-16 15.1v31.1C0 504.9 7.125 512 16 512H320V33.13C320 11.63 300.5-4.243 280.3 1.007zM232 288c-13.25 0-24-14.37-24-31.1c0-17.62 10.75-31.1 24-31.1S256 238.4 256 256C256 273.6 245.3 288 232 288z\"],\n    \"dove\": [512, 512, [128330], \"f4ba\", \"M288 167.2V139.1c-28.25-36.38-47.13-79.29-54.13-125.2C231.7 .4054 214.8-5.02 206.1 5.481C184.1 30.36 168.4 59.7 157.2 92.07C191.4 130.3 237.2 156.7 288 167.2zM400 63.97c-44.25 0-79.1 35.82-79.1 80.08l.0014 59.44c-104.4-6.251-193-70.46-233-161.7C81.48 29.25 63.76 28.58 58.01 40.83C41.38 75.96 32.01 115.2 32.01 156.6c0 70.76 34.11 136.9 85.11 185.9c13.12 12.75 26.13 23.27 38.88 32.77L12.12 411.2c-10.75 2.75-15.5 15.09-9.5 24.47c17.38 26.88 60.42 72.54 153.2 76.29c8 .25 15.99-2.633 22.12-7.883l65.23-56.12l76.84 .0561c88.38 0 160-71.49 160-159.9l.0013-160.2l31.1-63.99L400 63.97zM400 160.1c-8.75 0-16.01-7.259-16.01-16.01c0-8.876 7.261-16.05 16.01-16.05s15.99 7.136 15.99 16.01C416 152.8 408.8 160.1 400 160.1z\"],\n    \"down-left-and-up-right-to-center\": [512, 512, [\"compress-alt\"], \"f422\", \"M215.1 272h-136c-12.94 0-24.63 7.797-29.56 19.75C45.47 303.7 48.22 317.5 57.37 326.6l30.06 30.06l-78.06 78.07c-12.5 12.5-12.5 32.75-.0012 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.26 .0013l78.06-78.07l30.06 30.06c6.125 6.125 14.31 9.367 22.63 9.367c4.125 0 8.279-.7891 12.25-2.43c11.97-4.953 19.75-16.62 19.75-29.56V296C239.1 282.7 229.3 272 215.1 272zM296 240h136c12.94 0 24.63-7.797 29.56-19.75c4.969-11.97 2.219-25.72-6.938-34.87l-30.06-30.06l78.06-78.07c12.5-12.5 12.5-32.76 .0002-45.26l-22.62-22.62c-12.5-12.5-32.76-12.5-45.26-.0003l-78.06 78.07l-30.06-30.06c-9.156-9.141-22.87-11.84-34.87-6.937c-11.97 4.953-19.75 16.62-19.75 29.56v135.1C272 229.3 282.7 240 296 240z\"],\n    \"down-long\": [320, 512, [\"long-arrow-alt-down\"], \"f309\", \"M281.6 392.3l-104 112.1c-9.498 10.24-25.69 10.24-35.19 0l-104-112.1c-6.484-6.992-8.219-17.18-4.404-25.94c3.811-8.758 12.45-14.42 21.1-14.42H128V32c0-17.69 14.33-32 32-32S192 14.31 192 32v319.9h72c9.547 0 18.19 5.66 22 14.42C289.8 375.1 288.1 385.3 281.6 392.3z\"],\n    \"download\": [512, 512, [], \"f019\", \"M480 352h-133.5l-45.25 45.25C289.2 409.3 273.1 416 256 416s-33.16-6.656-45.25-18.75L165.5 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96C512 366.3 497.7 352 480 352zM432 456c-13.2 0-24-10.8-24-24c0-13.2 10.8-24 24-24s24 10.8 24 24C456 445.2 445.2 456 432 456zM233.4 374.6C239.6 380.9 247.8 384 256 384s16.38-3.125 22.62-9.375l128-128c12.49-12.5 12.49-32.75 0-45.25c-12.5-12.5-32.76-12.5-45.25 0L288 274.8V32c0-17.67-14.33-32-32-32C238.3 0 224 14.33 224 32v242.8L150.6 201.4c-12.49-12.5-32.75-12.5-45.25 0c-12.49 12.5-12.49 32.75 0 45.25L233.4 374.6z\"],\n    \"dragon\": [640, 512, [128009], \"f6d5\", \"M18.43 255.8L192 224L100.8 292.6C90.67 302.8 97.8 320 112 320h222.7c-9.499-26.5-14.75-54.5-14.75-83.38V194.2L200.3 106.8C176.5 90.88 145 92.75 123.3 111.2l-117.5 116.4C-6.562 238 2.436 258 18.43 255.8zM575.2 289.9l-100.7-50.25c-16.25-8.125-26.5-24.75-26.5-43V160h63.99l28.12 22.62C546.1 188.6 554.2 192 562.7 192h30.1c11.1 0 23.12-6.875 28.5-17.75l14.37-28.62c5.374-10.87 4.25-23.75-2.999-33.5l-74.49-99.37C552.1 4.75 543.5 0 533.5 0H296C288.9 0 285.4 8.625 290.4 13.62L351.1 64L292.4 88.75c-5.874 3-5.874 11.37 0 14.37L351.1 128l-.0011 108.6c0 72 35.99 139.4 95.99 179.4c-195.6 6.75-344.4 41-434.1 60.88c-8.124 1.75-13.87 9-13.87 17.38C.0463 504 8.045 512 17.79 512h499.1c63.24 0 119.6-47.5 122.1-110.8C642.3 354 617.1 310.9 575.2 289.9zM489.1 66.25l45.74 11.38c-2.75 11-12.5 18.88-24.12 18.25C497.7 95.25 484.8 83.38 489.1 66.25z\"],\n    \"draw-polygon\": [448, 512, [], \"f5ee\", \"M384.3 352C419.5 352.2 448 380.7 448 416C448 451.3 419.3 480 384 480C360.3 480 339.6 467.1 328.6 448H119.4C108.4 467.1 87.69 480 64 480C28.65 480 0 451.3 0 416C0 392.3 12.87 371.6 32 360.6V151.4C12.87 140.4 0 119.7 0 96C0 60.65 28.65 32 64 32C87.69 32 108.4 44.87 119.4 64H328.6C339.6 44.87 360.3 32 384 32C419.3 32 448 60.65 448 96C448 131.3 419.5 159.8 384.3 159.1L345.5 227.9C349.7 236.4 352 245.9 352 256C352 266.1 349.7 275.6 345.5 284.1L384.3 352zM96 360.6C105.7 366.2 113.8 374.3 119.4 384H328.6C328.6 383.9 328.7 383.8 328.7 383.7L292.2 319.9C290.8 319.1 289.4 320 288 320C252.7 320 224 291.3 224 256C224 220.7 252.7 192 288 192C289.4 192 290.8 192 292.2 192.1L328.7 128.3L328.6 128H119.4C113.8 137.7 105.7 145.8 96 151.4L96 360.6z\"],\n    \"droplet\": [384, 512, [128167, \"tint\"], \"f043\", \"M16 319.1C16 245.9 118.3 89.43 166.9 19.3C179.2 1.585 204.8 1.585 217.1 19.3C265.7 89.43 368 245.9 368 319.1C368 417.2 289.2 496 192 496C94.8 496 16 417.2 16 319.1zM112 319.1C112 311.2 104.8 303.1 96 303.1C87.16 303.1 80 311.2 80 319.1C80 381.9 130.1 432 192 432C200.8 432 208 424.8 208 416C208 407.2 200.8 400 192 400C147.8 400 112 364.2 112 319.1z\"],\n    \"droplet-slash\": [640, 512, [\"tint-slash\"], \"f5c7\", \"M215.3 143.4C243.5 95.07 274.2 49.29 294.9 19.3C307.2 1.585 332.8 1.585 345.1 19.3C393.7 89.43 496 245.9 496 319.1C496 333.7 494.4 347.1 491.5 359.9L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L215.3 143.4zM143.1 319.1C143.1 296.5 154.3 264.6 169.1 229.9L443.5 445.4C411.7 476.7 368.1 496 319.1 496C222.8 496 143.1 417.2 143.1 319.1V319.1zM239.1 319.1C239.1 311.2 232.8 303.1 223.1 303.1C215.2 303.1 207.1 311.2 207.1 319.1C207.1 381.9 258.1 432 319.1 432C328.8 432 336 424.8 336 416C336 407.2 328.8 400 319.1 400C275.8 400 239.1 364.2 239.1 319.1V319.1z\"],\n    \"drum\": [512, 512, [129345], \"f569\", \"M431.1 122l70.02-45.91c11.09-7.273 14.19-22.14 6.906-33.25c-7.219-11.07-22.09-14.23-33.22-6.924l-106.4 69.73c-49.81-8.787-97.18-9.669-112.4-9.669c-.002 0 .002 0 0 0C219.5 96 0 100.6 0 208.3v160.1c0 30.27 27.5 57.68 71.1 77.85v-101.9c0-13.27 10.75-24.03 24-24.03s23.1 10.76 23.1 24.03v118.9C153 472.4 191.1 478.3 231.1 480v-103.6c0-13.27 10.75-24.03 24-24.03c.002 0-.002 0 0 0c13.25 0 24 10.76 24 24.03V480c40.93-1.668 78.95-7.615 111.1-16.72v-118.9c0-13.27 10.75-24.03 24-24.03s24 10.76 24 24.03v101.9c44.49-20.17 71.1-47.58 71.1-77.85V208.3C511.1 164.9 476.1 138.4 431.1 122zM255.1 272.5C255.1 272.5 255.1 272.5 255.1 272.5c-114.9 0-207.1-28.97-207.1-64.39s93.12-63.1 207.1-63.1c.002 0-.002 0 0 0c17.5 0 34.47 .7139 50.71 1.966L242.8 187.1c-11.09 7.273-14.19 22.14-6.906 33.25C240.5 228.3 248.2 232.1 256 232.1c4.5 0 9.062-1.265 13.12-3.923l109.3-71.67c51.77 11.65 85.5 30.38 85.5 51.67C463.1 243.6 370.9 272.5 255.1 272.5z\"],\n    \"drum-steelpan\": [576, 512, [], \"f56a\", \"M288 32C129 32 0 89.25 0 160v192c0 70.75 129 128 288 128s288-57.25 288-128V160C576 89.25 447 32 288 32zM205 190.4c-4.5 16.62-14.5 30.5-28.25 40.5C100.2 217.5 48 190.8 48 160c0-30.12 50.12-56.38 124-69.1l25.62 44.25C207.5 151.4 210.1 171.2 205 190.4zM288 240c-21.12 0-41.38-.1-60.88-2.75C235.1 211.1 259.2 192 288 192s52.88 19.12 60.88 45.25C329.4 239 309.1 240 288 240zM352 96c0 35.25-28.75 64-64 64S224 131.2 224 96V83C244.4 81.12 265.8 80 288 80s43.63 1.125 64 3V96zM398.9 230.9c-13.75-9.875-23.88-23.88-28.38-40.5c-5.125-19.13-2.5-39 7.375-56l25.62-44.5C477.8 103.5 528 129.8 528 160C528 190.9 475.6 217.5 398.9 230.9z\"],\n    \"drumstick-bite\": [512, 512, [], \"f6d7\", \"M512 168.9c0 1.766-.0229 3.398-.0768 5.164c-16.91-9.132-35.51-13.76-53.96-13.76c-82.65 0-105.5 74.17-105.5 105.4c0 27.04 9.923 54.43 29.63 76.25c-19.52 6.629-39.99 9.997-60.62 9.997l-87.18 .0038l-40.59 40.49c-6.104 6.103-8.921 14.01-8.921 22.17c0 13.98 7.244 17.1 7.244 37.03C192.1 485.4 164.6 512 131.7 512c-15.63 0-31.11-6.055-42.72-17.8c-11.55-11.46-16.82-26.31-16.82-41.26c0-4.948 .575-9.903 1.695-14.75c-4.842 1.11-9.793 1.681-14.72 1.681c-42.15 0-59.13-36.64-59.13-59.5c0-33.43 27.15-60.34 60.39-60.34c18.97 0 22.97 7.219 36.96 7.219c8.159 0 16.04-2.811 22.14-8.914l40.57-40.47L160.1 191.1c0-63.1 27.79-107 63.17-142.4c33.13-33.06 76.39-49.59 119.7-49.59s86.79 16.53 119.9 49.59C495.9 82.5 512 125.7 512 168.9z\"],\n    \"dumbbell\": [640, 512, [], \"f44b\", \"M104 96h-48C42.75 96 32 106.8 32 120V224C14.33 224 0 238.3 0 256c0 17.67 14.33 32 31.1 32L32 392C32 405.3 42.75 416 56 416h48C117.3 416 128 405.3 128 392v-272C128 106.8 117.3 96 104 96zM456 32h-48C394.8 32 384 42.75 384 56V224H256V56C256 42.75 245.3 32 232 32h-48C170.8 32 160 42.75 160 56v400C160 469.3 170.8 480 184 480h48C245.3 480 256 469.3 256 456V288h128v168c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24V56C480 42.75 469.3 32 456 32zM608 224V120C608 106.8 597.3 96 584 96h-48C522.8 96 512 106.8 512 120v272c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24V288c17.67 0 32-14.33 32-32C640 238.3 625.7 224 608 224z\"],\n    \"dumpster\": [576, 512, [], \"f793\", \"M560 160c10.38 0 17.1-9.75 15.5-19.88l-24-95.1C549.8 37 543.3 32 536 32h-98.88l25.62 128H560zM272 32H171.5L145.9 160H272V32zM404.5 32H304v128h126.1L404.5 32zM16 160h97.25l25.63-128H40C32.75 32 26.25 37 24.5 44.12l-24 95.1C-2.001 150.2 5.625 160 16 160zM560 224h-20L544 192H32l4 32H16C7.25 224 0 231.2 0 240v32C0 280.8 7.25 288 16 288h28L64 448v16C64 472.8 71.25 480 80 480h32C120.8 480 128 472.8 128 464V448h320v16c0 8.75 7.25 16 16 16h32c8.75 0 16-7.25 16-16V448l20-160H560C568.8 288 576 280.8 576 272v-32C576 231.2 568.8 224 560 224z\"],\n    \"dumpster-fire\": [640, 512, [], \"f794\", \"M418.8 104.2L404.6 32H304.1L304 159.1h60.77C381.1 140.7 399.1 121.8 418.8 104.2zM272.1 32.12H171.5L145.9 160.1h126.1L272.1 32.12zM461.3 104.2c18.25 16.25 35.51 33.62 51.14 51.49c5.751-5.623 11.38-11.12 17.38-16.37l21.26-18.98l21.25 18.98c1.125 .9997 2.125 2.124 3.126 3.124c-.125-.7498 .2501-1.5 0-2.249l-24-95.97c-1.625-7.123-8.127-12.12-15.38-12.12H437.2l12.25 61.5L461.3 104.2zM16 160.1l97.26-.0223l25.64-127.9h-98.89c-7.251 0-13.75 4.999-15.5 12.12L.5001 140.2C-2.001 150.3 5.626 160.1 16 160.1zM340.6 192.1L32.01 192.1l4.001 31.99L16 224.1C7.252 224.1 0 231.3 0 240.1V272c0 8.748 7.251 15.1 16 15.1l28.01 .0177l20 159.1L64.01 464C64.01 472.8 71.26 480 80.01 480h32.01c8.752 0 16-7.248 16-15.1v-15.1l208.8-.002c-30.13-33.74-48.73-77.85-48.73-126.3C288.1 285.8 307.9 238.8 340.6 192.1zM551.2 163.3c-14.88 13.25-28.38 27.12-40.26 41.12c-19.5-25.74-43.63-51.99-71.01-76.36c-70.14 62.73-120 144.2-120 193.6C319.1 409.1 391.6 480 479.1 480s160-70.87 160-158.3C640.1 285 602.1 209.4 551.2 163.3zM532.6 392.6c-14.75 10.62-32.88 16.1-52.51 16.1c-49.01 0-88.89-33.49-88.89-87.98c0-27.12 16.5-50.99 49.38-91.85c4.751 5.498 67.14 87.98 67.14 87.98l39.76-46.99c2.876 4.874 5.375 9.497 7.75 13.1C573.9 321.5 565.1 368.4 532.6 392.6z\"],\n    \"dungeon\": [512, 512, [], \"f6d9\", \"M336.6 156.5C327.3 148.1 322.6 136.5 327.1 125.3L357.6 49.18C362.7 36.27 377.8 30.36 389.7 37.63C410.9 50.63 430 66.62 446.5 85.02C455.7 95.21 452.9 110.9 441.5 118.5L373.9 163.5C363.6 170.4 349.8 168.1 340.5 159.9C339.2 158.7 337.9 157.6 336.6 156.5H336.6zM297.7 112.6C293.2 123.1 280.9 129.8 268.7 128.6C264.6 128.2 260.3 128 256 128C251.7 128 247.4 128.2 243.3 128.6C231.1 129.8 218.8 123.1 214.3 112.6L183.1 36.82C178.8 24.02 185.5 9.433 198.1 6.374C217.3 2.203 236.4 0 256 0C275.6 0 294.7 2.203 313 6.374C326.5 9.433 333.2 24.02 328 36.82L297.7 112.6zM122.3 37.63C134.2 30.36 149.3 36.27 154.4 49.18L184.9 125.3C189.4 136.5 184.7 148.1 175.4 156.5C174.1 157.6 172.8 158.7 171.5 159.9C162.2 168.1 148.4 170.4 138.1 163.5L70.52 118.5C59.13 110.9 56.32 95.21 65.46 85.02C81.99 66.62 101.1 50.63 122.3 37.63H122.3zM379.5 222.1C376.3 210.7 379.7 198.1 389.5 191.6L458.1 145.8C469.7 138.1 485.6 141.9 491.2 154.7C501.6 178.8 508.4 204.8 510.9 232C512.1 245.2 501.3 255.1 488 255.1H408C394.7 255.1 384.2 245.2 381.8 232.1C381.1 228.7 380.4 225.4 379.5 222.1V222.1zM122.5 191.6C132.3 198.1 135.7 210.7 132.5 222.1C131.6 225.4 130.9 228.7 130.2 232.1C127.8 245.2 117.3 256 104 256H24C10.75 256-.1184 245.2 1.107 232C3.636 204.8 10.43 178.8 20.82 154.7C26.36 141.9 42.26 138.1 53.91 145.8L122.5 191.6zM104 288C117.3 288 128 298.7 128 312V360C128 373.3 117.3 384 104 384H24C10.75 384 0 373.3 0 360V312C0 298.7 10.75 288 24 288H104zM488 288C501.3 288 512 298.7 512 312V360C512 373.3 501.3 384 488 384H408C394.7 384 384 373.3 384 360V312C384 298.7 394.7 288 408 288H488zM104 416C117.3 416 128 426.7 128 440V488C128 501.3 117.3 512 104 512H24C10.75 512 0 501.3 0 488V440C0 426.7 10.75 416 24 416H104zM488 416C501.3 416 512 426.7 512 440V488C512 501.3 501.3 512 488 512H408C394.7 512 384 501.3 384 488V440C384 426.7 394.7 416 408 416H488zM272 464C272 472.8 264.8 480 256 480C247.2 480 240 472.8 240 464V192C240 183.2 247.2 176 256 176C264.8 176 272 183.2 272 192V464zM208 464C208 472.8 200.8 480 192 480C183.2 480 176 472.8 176 464V224C176 215.2 183.2 208 192 208C200.8 208 208 215.2 208 224V464zM336 464C336 472.8 328.8 480 320 480C311.2 480 304 472.8 304 464V224C304 215.2 311.2 208 320 208C328.8 208 336 215.2 336 224V464z\"],\n    \"e\": [320, 512, [101], \"45\", \"M320 448c0 17.67-14.33 32-32 32H32c-17.67 0-32-14.33-32-32v-384C0 46.34 14.33 32.01 32 32.01h256c17.67 0 32 14.33 32 32s-14.33 32-32 32H64v128h160c17.67 0 32 14.32 32 31.99s-14.33 32.01-32 32.01H64v128h224C305.7 416 320 430.3 320 448z\"],\n    \"ear-deaf\": [512, 512, [\"deaf\", \"deafness\", \"hard-of-hearing\"], \"f2a4\", \"M192 319.1C185.8 313.7 177.6 310.6 169.4 310.6S153 313.7 146.8 319.1l-137.4 137.4C3.124 463.6 0 471.8 0 480c0 18.3 14.96 31.1 31.1 31.1c8.188 0 16.38-3.124 22.62-9.371l137.4-137.4c6.247-6.247 9.371-14.44 9.371-22.62S198.3 326.2 192 319.1zM200 240c0-22.06 17.94-40 40-40s40 17.94 40 40c0 13.25 10.75 24 24 24s24-10.75 24-24c0-48.53-39.47-88-88-88S152 191.5 152 240c0 13.25 10.75 24 24 24S200 253.3 200 240zM511.1 31.1c0-8.188-3.124-16.38-9.371-22.62s-14.44-9.372-22.63-9.372s-16.38 3.124-22.62 9.372L416 50.75c-6.248 6.248-9.372 14.44-9.372 22.63c0 8.188 3.123 16.38 9.37 22.62c6.247 6.248 14.44 9.372 22.63 9.372s16.38-3.124 22.63-9.372l41.38-41.38C508.9 48.37 511.1 40.18 511.1 31.1zM415.1 241.6c0-57.78-42.91-177.6-175.1-177.6c-153.6 0-175.2 150.8-175.2 160.4c0 17.32 14.99 31.58 32.75 31.58c16.61 0 29.25-13.07 31.24-29.55c6.711-55.39 54.02-98.45 111.2-98.45c80.45 0 111.2 75.56 111.2 119.6c0 57.94-38.22 98.14-46.37 106.3L288 370.7v13.25c0 31.4-22.71 57.58-52.58 62.98C220.4 449.7 208 463.3 208 478.6c0 17.95 14.72 32.09 32.03 32.09c4.805 0 100.5-14.34 111.2-112.7C412.6 335.8 415.1 263.4 415.1 241.6z\"],\n    \"ear-listen\": [512, 512, [\"assistive-listening-systems\"], \"f2a2\", \"M160.1 320c-17.64 0-32.02 14.37-32.02 31.1s14.38 31.1 32.02 31.1s32.02-14.37 32.02-31.1S177.8 320 160.1 320zM86.66 361.4c-12.51-12.49-32.77-12.49-45.27 0c-12.51 12.5-12.51 32.78 0 45.27l63.96 63.99c12.51 12.49 32.77 12.49 45.27 .002c12.51-12.5 12.51-32.78 0-45.27L86.66 361.4zM32.02 448C14.38 448 0 462.4 0 480S14.38 512 32.02 512c17.64 0 32.02-14.37 32.02-31.1S49.66 448 32.02 448zM287.7 70.31c-110.9-29.38-211.7 47.53-222.8 150.9C62.1 239.9 78.73 255.1 97.57 255.1c16.61 0 29.25-13.07 31.24-29.55c6.934-57.22 57.21-101.3 116.9-98.3c71.71 3.594 117.1 76.82 102.5 146.9c-6.551 29.65-21.4 56.87-43.38 78.87L288 370.7v13.25c0 31.4-22.71 57.58-52.58 62.98C220.4 449.7 208 463.3 208 478.6c0 19.78 17.88 34.94 37.38 31.64c55.92-9.443 99.63-55.28 105.9-112.2c40.11-40.68 62.89-93.95 64.65-150.9C418.4 166.4 365.8 91 287.7 70.31zM240 200c22.06 0 40 17.94 40 40c0 13.25 10.75 24 24 24s24-10.75 24-24c0-48.53-39.47-88-88-88S152 191.5 152 240c0 13.25 10.75 24 24 24S200 253.3 200 240C200 217.9 217.9 200 240 200zM397.8 3.125c-15.91-7.594-35.05-.8438-42.66 15.09c-7.594 15.97-.8281 35.06 15.12 42.66C417.5 83.41 448 134.9 448 192c0 17.69 14.33 32 32 32S512 209.7 512 192C512 110.3 467.2 36.19 397.8 3.125z\"],\n    \"earth-africa\": [512, 512, [127757, \"globe-africa\"], \"f57c\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM177.8 63.19L187.8 80.62C190.5 85.46 192 90.93 192 96.5V137.9C192 141.8 193.6 145.6 196.3 148.3C202.6 154.6 212.8 153.1 218.3 147.1L231.9 130.1C236.6 124.2 244.8 122.4 251.6 125.8L266.8 133.4C270.2 135.1 273.1 136 277.8 136C284.3 136 290.6 133.4 295.2 128.8L299.1 124.9C302 121.1 306.5 121.2 310.1 123.1L339.4 137.7C347.1 141.6 352 149.5 352 158.1C352 168.6 344.9 177.8 334.7 180.3L299.3 189.2C291.9 191 284.2 190.7 276.1 188.3L244.1 177.7C241.7 176.6 238.2 176 234.8 176C227.8 176 220.1 178.3 215.4 182.5L176 212C165.9 219.6 160 231.4 160 244V272C160 298.5 181.5 320 208 320H240C248.8 320 256 327.2 256 336V384C256 401.7 270.3 416 288 416C298.1 416 307.6 411.3 313.6 403.2L339.2 369.1C347.5 357.1 352 344.5 352 330.7V318.6C352 314.7 354.6 311.3 358.4 310.4L363.7 309.1C375.6 306.1 384 295.4 384 283.1C384 275.1 381.2 269.2 376.2 264.2L342.7 230.7C338.1 226.1 338.1 221 342.7 217.3C348.4 211.6 356.8 209.6 364.5 212.2L378.6 216.9C390.9 220.1 404.3 215.4 410.1 203.8C413.6 196.8 421.3 193.1 428.1 194.6L456.4 200.1C431.1 112.4 351.5 48 256 48C228.3 48 201.1 53.4 177.8 63.19L177.8 63.19z\"],\n    \"earth-americas\": [512, 512, [127758, \"earth\", \"earth-america\", \"globe-americas\"], \"f57d\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM57.71 192.1L67.07 209.4C75.36 223.9 88.99 234.6 105.1 239.2L162.1 255.7C180.2 260.6 192 276.3 192 294.2V334.1C192 345.1 198.2 355.1 208 359.1C217.8 364.9 224 374.9 224 385.9V424.9C224 440.5 238.9 451.7 253.9 447.4C270.1 442.8 282.5 429.1 286.6 413.7L289.4 402.5C293.6 385.6 304.6 371.1 319.7 362.4L327.8 357.8C342.8 349.3 352 333.4 352 316.1V307.9C352 295.1 346.9 282.9 337.9 273.9L334.1 270.1C325.1 261.1 312.8 255.1 300.1 255.1H256.1C245.9 255.1 234.9 253.1 225.2 247.6L190.7 227.8C186.4 225.4 183.1 221.4 181.6 216.7C178.4 207.1 182.7 196.7 191.7 192.1L197.7 189.2C204.3 185.9 211.9 185.3 218.1 187.7L242.2 195.4C250.3 198.1 259.3 195 264.1 187.9C268.8 180.8 268.3 171.5 262.9 165L249.3 148.8C239.3 136.8 239.4 119.3 249.6 107.5L265.3 89.12C274.1 78.85 275.5 64.16 268.8 52.42L266.4 48.26C262.1 48.09 259.5 48 256 48C163.1 48 84.4 108.9 57.71 192.1L57.71 192.1zM437.6 154.5L412 164.8C396.3 171.1 388.2 188.5 393.5 204.6L410.4 255.3C413.9 265.7 422.4 273.6 433 276.3L462.2 283.5C463.4 274.5 464 265.3 464 256C464 219.2 454.4 184.6 437.6 154.5H437.6z\"],\n    \"earth-asia\": [512, 512, [127759, \"globe-asia\"], \"f57e\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM51.68 295.1L83.41 301.5C91.27 303.1 99.41 300.6 105.1 294.9L120.5 279.5C132 267.1 151.6 271.1 158.9 285.8L168.2 304.3C172.1 313.9 182.8 319.1 193.5 319.1C208.7 319.1 219.6 305.4 215.2 290.8L209.3 270.9C204.6 255.5 216.2 240 232.3 240H234.6C247.1 240 260.5 233.3 267.9 222.2L278.6 206.1C284.2 197.7 283.9 186.6 277.8 178.4L261.7 156.9C251.4 143.2 258.4 123.4 275.1 119.2L292.1 114.1C299.6 113.1 305.7 107.8 308.6 100.6L324.9 59.69C303.4 52.12 280.2 48 255.1 48C141.1 48 47.1 141.1 47.1 256C47.1 269.4 49.26 282.5 51.68 295.1L51.68 295.1zM450.4 300.4L434.6 304.9C427.9 306.7 420.8 304 417.1 298.2L415.1 295.1C409.1 285.7 398.7 279.1 387.5 279.1C376.4 279.1 365.1 285.7 359.9 295.1L353.8 304.6C352.4 306.8 350.5 308.7 348.2 309.1L311.1 330.1C293.9 340.2 286.5 362.5 294.1 381.4L300.5 393.8C309.1 413 331.2 422.3 350.1 414.9L353.5 413.1C363.6 410.2 374.8 411.8 383.5 418.1L385 419.2C422.2 389.7 449.1 347.8 459.4 299.7C456.4 299.4 453.4 299.6 450.4 300.4H450.4zM156.1 367.5L188.1 375.5C196.7 377.7 205.4 372.5 207.5 363.9C209.7 355.3 204.5 346.6 195.9 344.5L163.9 336.5C155.3 334.3 146.6 339.5 144.5 348.1C142.3 356.7 147.5 365.4 156.1 367.5V367.5zM236.5 328.1C234.3 336.7 239.5 345.4 248.1 347.5C256.7 349.7 265.4 344.5 267.5 335.9L275.5 303.9C277.7 295.3 272.5 286.6 263.9 284.5C255.3 282.3 246.6 287.5 244.5 296.1L236.5 328.1zM321.7 120.8L305.7 152.8C301.7 160.7 304.9 170.4 312.8 174.3C320.7 178.3 330.4 175.1 334.3 167.2L350.3 135.2C354.3 127.3 351.1 117.6 343.2 113.7C335.3 109.7 325.6 112.9 321.7 120.8V120.8z\"],\n    \"earth-europe\": [512, 512, [\"globe-europe\"], \"f7a2\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM266.3 48.25L232.5 73.6C227.2 77.63 224 83.95 224 90.67V99.72C224 106.5 229.5 112 236.3 112C238.7 112 241.1 111.3 243.1 109.9L284.9 82.06C286.9 80.72 289.3 80 291.7 80H292.7C298.9 80 304 85.07 304 91.31C304 94.31 302.8 97.19 300.7 99.31L280.8 119.2C275 124.1 267.9 129.4 260.2 131.9L233.6 140.8C227.9 142.7 224 148.1 224 154.2C224 157.9 222.5 161.5 219.9 164.1L201.9 182.1C195.6 188.4 192 197.1 192 206.1V210.3C192 226.7 205.6 240 221.9 240C232.9 240 243.1 233.8 248 224L252 215.9C254.5 211.1 259.4 208 264.8 208C269.4 208 273.6 210.1 276.3 213.7L292.6 235.5C294.7 238.3 298.1 240 301.7 240C310.1 240 315.6 231.1 311.8 223.6L310.7 221.3C307.1 214.3 310.7 205.8 318.1 203.3L339.3 196.2C346.9 193.7 352 186.6 352 178.6C352 168.3 360.3 160 370.6 160H400C408.8 160 416 167.2 416 176C416 184.8 408.8 192 400 192H379.3C372.1 192 365.1 194.9 360 200L355.3 204.7C353.2 206.8 352 209.7 352 212.7C352 218.9 357.1 224 363.3 224H374.6C380.6 224 386.4 226.4 390.6 230.6L397.2 237.2C398.1 238.1 400 241.4 400 244C400 246.6 398.1 249 397.2 250.8L389.7 258.3C386 261.1 384 266.9 384 272C384 277.1 386 282 389.7 285.7L408 304C418.2 314.2 432.1 320 446.6 320H453.1C460.5 299.8 464 278.3 464 256C464 144.6 376.4 53.64 266.3 48.25V48.25zM438.4 356.1C434.7 353.5 430.2 352 425.4 352C419.4 352 413.6 349.6 409.4 345.4L395.1 331.1C388.3 324.3 377.9 320 367.1 320C357.4 320 347.9 316.5 340.5 310.2L313.1 287.4C302.4 277.5 287.6 271.1 272.3 271.1H251.4C238.7 271.1 226.4 275.7 215.9 282.7L188.5 301C170.7 312.9 160 332.9 160 354.3V357.5C160 374.5 166.7 390.7 178.7 402.7L194.7 418.7C203.2 427.2 214.7 432 226.7 432H248C261.3 432 272 442.7 272 456C272 458.5 272.4 461 273.1 463.3C344.5 457.5 405.6 415.7 438.4 356.1L438.4 356.1zM164.7 100.7L132.7 132.7C126.4 138.9 126.4 149.1 132.7 155.3C138.9 161.6 149.1 161.6 155.3 155.3L187.3 123.3C193.6 117.1 193.6 106.9 187.3 100.7C181.1 94.44 170.9 94.44 164.7 100.7V100.7z\"],\n    \"earth-oceania\": [512, 512, [\"globe-oceania\"], \"e47b\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM215.5 360.6L240.9 377C247.1 381.6 256.2 384 264.6 384C278 384 290.7 377.8 298.1 367.2L311 351.8C316.8 344.4 320 335.2 320 325.8C320 316.4 316.8 307.2 311 299.8L293.1 276.9C288.3 270.7 284.4 263.1 281.6 256.7L271.5 230.8C269.9 226.7 265.9 224 261.5 224C258 224 254.8 225.6 252.8 228.4L242.4 242.6C237.7 248.1 229.7 252.1 221.9 250.5C218.7 249.8 215.8 247.1 213.8 245.4L209.3 239.3C202.1 229.7 190.7 224 178.7 224C166.7 224 155.3 229.7 148.1 239.3L142.8 246.3C141.3 248.4 139.2 250 136.9 251.1L101.6 267.9C81.08 277.7 72.8 302.6 83.37 322.7L86.65 328.9C95.67 346.1 115.7 354.3 134.1 348.4L149.5 343.6C156 341.5 163.1 341.6 169.6 343.8L208.6 357.3C211 358.1 213.4 359.2 215.5 360.6H215.5zM273.8 142.5C264.3 132.1 250.8 128.9 237.6 131.5L199.1 139.2C183.8 142.3 181.5 163.2 195.7 169.5L238.5 188.6C243.7 190.8 249.2 192 254.8 192H284.7C298.9 192 306.1 174.8 296 164.7L273.8 142.5zM264 448H280C288.8 448 296 440.8 296 432C296 423.2 288.8 416 280 416H264C255.2 416 248 423.2 248 432C248 440.8 255.2 448 264 448zM431.2 298.9C428.4 290.6 419.3 286 410.9 288.8C402.6 291.6 398 300.7 400.8 309.1L408.8 333.1C411.6 341.4 420.7 345.1 429.1 343.2C437.4 340.4 441.1 331.3 439.2 322.9L431.2 298.9zM411.3 379.3C417.6 373.1 417.6 362.9 411.3 356.7C405.1 350.4 394.9 350.4 388.7 356.7L356.7 388.7C350.4 394.9 350.4 405.1 356.7 411.3C362.9 417.6 373.1 417.6 379.3 411.3L411.3 379.3z\"],\n    \"egg\": [384, 512, [129370], \"f7fb\", \"M192 16c-106 0-192 182-192 288c0 106 85.1 192 192 192c105.1 0 192-85.1 192-192C384 198 297.1 16 192 16zM160.1 138C128.6 177.1 96 249.8 96 304C96 312.8 88.84 320 80 320S64 312.8 64 304c0-63.56 36.7-143.3 71.22-186c5.562-6.906 15.64-7.969 22.5-2.406C164.6 121.1 165.7 131.2 160.1 138z\"],\n    \"eject\": [448, 512, [9167], \"f052\", \"M48.01 319.1h351.1c41.62 0 63.49-49.63 35.37-80.38l-175.1-192.1c-19-20.62-51.75-20.62-70.75 0L12.64 239.6C-15.48 270.2 6.393 319.1 48.01 319.1zM399.1 384H48.01c-26.39 0-47.99 21.59-47.99 47.98C.0117 458.4 21.61 480 48.01 480h351.1c26.39 0 47.99-21.6 47.99-47.99C447.1 405.6 426.4 384 399.1 384z\"],\n    \"elevator\": [512, 512, [], \"e16d\", \"M79 96h130c5.967 0 11.37-3.402 13.75-8.662c2.385-5.262 1.299-11.39-2.754-15.59l-65-67.34c-5.684-5.881-16.31-5.881-21.99 0l-65 67.34C63.95 75.95 62.87 82.08 65.25 87.34C67.63 92.6 73.03 96 79 96zM357 91.59c5.686 5.881 16.31 5.881 21.99 0l65-67.34c4.053-4.199 5.137-10.32 2.754-15.59C444.4 3.402 438.1 0 433 0h-130c-5.967 0-11.37 3.402-13.75 8.662c-2.385 5.262-1.301 11.39 2.752 15.59L357 91.59zM448 128H64c-35.35 0-64 28.65-64 63.1v255.1C0 483.3 28.65 512 64 512h384c35.35 0 64-28.65 64-63.1V192C512 156.7 483.3 128 448 128zM352 224C378.5 224.1 400 245.5 400 272c0 26.46-21.47 47.9-48 48C325.5 319.9 304 298.5 304 272C304 245.5 325.5 224.1 352 224zM160 224C186.5 224.1 208 245.5 208 272c0 26.46-21.47 47.9-48 48C133.5 319.9 112 298.5 112 272C112 245.5 133.5 224.1 160 224zM240 448h-160v-48C80 373.5 101.5 352 128 352h64c26.51 0 48 21.49 48 48V448zM432 448h-160v-48c0-26.51 21.49-48 48-48h64c26.51 0 48 21.49 48 48V448z\"],\n    \"ellipsis\": [448, 512, [\"ellipsis-h\"], \"f141\", \"M120 256C120 286.9 94.93 312 64 312C33.07 312 8 286.9 8 256C8 225.1 33.07 200 64 200C94.93 200 120 225.1 120 256zM280 256C280 286.9 254.9 312 224 312C193.1 312 168 286.9 168 256C168 225.1 193.1 200 224 200C254.9 200 280 225.1 280 256zM328 256C328 225.1 353.1 200 384 200C414.9 200 440 225.1 440 256C440 286.9 414.9 312 384 312C353.1 312 328 286.9 328 256z\"],\n    \"ellipsis-vertical\": [128, 512, [\"ellipsis-v\"], \"f142\", \"M64 360C94.93 360 120 385.1 120 416C120 446.9 94.93 472 64 472C33.07 472 8 446.9 8 416C8 385.1 33.07 360 64 360zM64 200C94.93 200 120 225.1 120 256C120 286.9 94.93 312 64 312C33.07 312 8 286.9 8 256C8 225.1 33.07 200 64 200zM64 152C33.07 152 8 126.9 8 96C8 65.07 33.07 40 64 40C94.93 40 120 65.07 120 96C120 126.9 94.93 152 64 152z\"],\n    \"envelope\": [512, 512, [128386, 61443, 9993], \"f0e0\", \"M256 352c-16.53 0-33.06-5.422-47.16-16.41L0 173.2V400C0 426.5 21.49 448 48 448h416c26.51 0 48-21.49 48-48V173.2l-208.8 162.5C289.1 346.6 272.5 352 256 352zM16.29 145.3l212.2 165.1c16.19 12.6 38.87 12.6 55.06 0l212.2-165.1C505.1 137.3 512 125 512 112C512 85.49 490.5 64 464 64h-416C21.49 64 0 85.49 0 112C0 125 6.01 137.3 16.29 145.3z\"],\n    \"envelope-open\": [512, 512, [62135], \"f2b6\", \"M493.6 163c-24.88-19.62-45.5-35.37-164.3-121.6C312.7 29.21 279.7 0 256.4 0H255.6C232.3 0 199.3 29.21 182.6 41.38c-118.8 86.25-139.4 101.1-164.3 121.6C6.75 172 0 186 0 200.8v263.2C0 490.5 21.49 512 48 512h416c26.51 0 48-21.49 48-47.1V200.8C512 186 505.3 172 493.6 163zM303.2 367.5C289.1 378.5 272.5 384 256 384s-33.06-5.484-47.16-16.47L64 254.9V208.5c21.16-16.59 46.48-35.66 156.4-115.5c3.18-2.328 6.891-5.187 10.98-8.353C236.9 80.44 247.8 71.97 256 66.84c8.207 5.131 19.14 13.6 24.61 17.84c4.09 3.166 7.801 6.027 11.15 8.478C400.9 172.5 426.6 191.7 448 208.5v46.32L303.2 367.5z\"],\n    \"envelope-open-text\": [512, 512, [], \"f658\", \"M256 417.1c-16.38 0-32.88-4.1-46.88-15.12L0 250.9v213.1C0 490.5 21.5 512 48 512h416c26.5 0 48-21.5 48-47.1V250.9l-209.1 151.1C288.9 412 272.4 417.1 256 417.1zM493.6 163C484.8 156 476.4 149.5 464 140.1v-44.12c0-26.5-21.5-48-48-48l-77.5 .0016c-3.125-2.25-5.875-4.25-9.125-6.5C312.6 29.13 279.3-.3732 256 .0018C232.8-.3732 199.4 29.13 182.6 41.5c-3.25 2.25-6 4.25-9.125 6.5L96 48c-26.5 0-48 21.5-48 48v44.12C35.63 149.5 27.25 156 18.38 163C6.75 172 0 186 0 200.8v10.62l96 69.37V96h320v184.7l96-69.37V200.8C512 186 505.3 172 493.6 163zM176 255.1h160c8.836 0 16-7.164 16-15.1c0-8.838-7.164-16-16-16h-160c-8.836 0-16 7.162-16 16C160 248.8 167.2 255.1 176 255.1zM176 191.1h160c8.836 0 16-7.164 16-16c0-8.838-7.164-15.1-16-15.1h-160c-8.836 0-16 7.162-16 15.1C160 184.8 167.2 191.1 176 191.1z\"],\n    \"envelopes-bulk\": [640, 512, [\"mail-bulk\"], \"f674\", \"M191.9 448.6c-9.766 0-19.48-2.969-27.78-8.891L32 340.2V480c0 17.62 14.38 32 32 32h256c17.62 0 32-14.38 32-32v-139.8L220.2 439.5C211.7 445.6 201.8 448.6 191.9 448.6zM192 192c0-35.25 28.75-64 64-64h224V32c0-17.62-14.38-32-32-32H128C110.4 0 96 14.38 96 32v192h96V192zM320 256H64C46.38 256 32 270.4 32 288v12.18l151 113.8c5.25 3.719 12.7 3.734 18.27-.25L352 300.2V288C352 270.4 337.6 256 320 256zM576 160H256C238.4 160 224 174.4 224 192v32h96c33.25 0 60.63 25.38 63.75 57.88L384 416h192c17.62 0 32-14.38 32-32V192C608 174.4 593.6 160 576 160zM544 288h-64V224h64V288z\"],\n    \"equals\": [448, 512, [62764], \"3d\", \"M48 192h352c17.69 0 32-14.32 32-32s-14.31-31.1-32-31.1h-352c-17.69 0-32 14.31-32 31.1S30.31 192 48 192zM400 320h-352c-17.69 0-32 14.31-32 31.1s14.31 32 32 32h352c17.69 0 32-14.32 32-32S417.7 320 400 320z\"],\n    \"eraser\": [512, 512, [], \"f12d\", \"M480 416C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H150.6C133.7 480 117.4 473.3 105.4 461.3L25.37 381.3C.3786 356.3 .3786 315.7 25.37 290.7L258.7 57.37C283.7 32.38 324.3 32.38 349.3 57.37L486.6 194.7C511.6 219.7 511.6 260.3 486.6 285.3L355.9 416H480zM265.4 416L332.7 348.7L195.3 211.3L70.63 336L150.6 416L265.4 416z\"],\n    \"ethernet\": [512, 512, [], \"f796\", \"M512 208v224c0 8.75-7.25 16-16 16H416v-128h-32v128h-64v-128h-32v128H224v-128H192v128H128v-128H96v128H16C7.25 448 0 440.8 0 432v-224C0 199.2 7.25 192 16 192H64V144C64 135.2 71.25 128 80 128H128V80C128 71.25 135.2 64 144 64h224C376.8 64 384 71.25 384 80V128h48C440.8 128 448 135.2 448 144V192h48C504.8 192 512 199.2 512 208z\"],\n    \"euro-sign\": [384, 512, [8364, \"eur\", \"euro\"], \"f153\", \"M64 240C46.33 240 32 225.7 32 208C32 190.3 46.33 176 64 176H92.29C121.9 92.11 201.1 32 296 32H320C337.7 32 352 46.33 352 64C352 81.67 337.7 96 320 96H296C238.1 96 187.8 128.4 162.1 176H288C305.7 176 320 190.3 320 208C320 225.7 305.7 240 288 240H144.2C144.1 242.6 144 245.3 144 248V264C144 266.7 144.1 269.4 144.2 272H288C305.7 272 320 286.3 320 304C320 321.7 305.7 336 288 336H162.1C187.8 383.6 238.1 416 296 416H320C337.7 416 352 430.3 352 448C352 465.7 337.7 480 320 480H296C201.1 480 121.9 419.9 92.29 336H64C46.33 336 32 321.7 32 304C32 286.3 46.33 272 64 272H80.15C80.05 269.3 80 266.7 80 264V248C80 245.3 80.05 242.7 80.15 240H64z\"],\n    \"exclamation\": [128, 512, [10069, 10071, 61738], \"21\", \"M64 352c17.69 0 32-14.32 32-31.1V64.01c0-17.67-14.31-32.01-32-32.01S32 46.34 32 64.01v255.1C32 337.7 46.31 352 64 352zM64 400c-22.09 0-40 17.91-40 40s17.91 39.1 40 39.1s40-17.9 40-39.1S86.09 400 64 400z\"],\n    \"expand\": [448, 512, [], \"f065\", \"M128 32H32C14.31 32 0 46.31 0 64v96c0 17.69 14.31 32 32 32s32-14.31 32-32V96h64c17.69 0 32-14.31 32-32S145.7 32 128 32zM416 32h-96c-17.69 0-32 14.31-32 32s14.31 32 32 32h64v64c0 17.69 14.31 32 32 32s32-14.31 32-32V64C448 46.31 433.7 32 416 32zM128 416H64v-64c0-17.69-14.31-32-32-32s-32 14.31-32 32v96c0 17.69 14.31 32 32 32h96c17.69 0 32-14.31 32-32S145.7 416 128 416zM416 320c-17.69 0-32 14.31-32 32v64h-64c-17.69 0-32 14.31-32 32s14.31 32 32 32h96c17.69 0 32-14.31 32-32v-96C448 334.3 433.7 320 416 320z\"],\n    \"eye\": [576, 512, [128065], \"f06e\", \"M279.6 160.4C282.4 160.1 285.2 160 288 160C341 160 384 202.1 384 256C384 309 341 352 288 352C234.1 352 192 309 192 256C192 253.2 192.1 250.4 192.4 247.6C201.7 252.1 212.5 256 224 256C259.3 256 288 227.3 288 192C288 180.5 284.1 169.7 279.6 160.4zM480.6 112.6C527.4 156 558.7 207.1 573.5 243.7C576.8 251.6 576.8 260.4 573.5 268.3C558.7 304 527.4 355.1 480.6 399.4C433.5 443.2 368.8 480 288 480C207.2 480 142.5 443.2 95.42 399.4C48.62 355.1 17.34 304 2.461 268.3C-.8205 260.4-.8205 251.6 2.461 243.7C17.34 207.1 48.62 156 95.42 112.6C142.5 68.84 207.2 32 288 32C368.8 32 433.5 68.84 480.6 112.6V112.6zM288 112C208.5 112 144 176.5 144 256C144 335.5 208.5 400 288 400C367.5 400 432 335.5 432 256C432 176.5 367.5 112 288 112z\"],\n    \"eye-dropper\": [512, 512, [\"eye-dropper-empty\", \"eyedropper\"], \"f1fb\", \"M482.8 29.23C521.7 68.21 521.7 131.4 482.8 170.4L381.2 271.9L390.6 281.4C403.1 293.9 403.1 314.1 390.6 326.6C378.1 339.1 357.9 339.1 345.4 326.6L185.4 166.6C172.9 154.1 172.9 133.9 185.4 121.4C197.9 108.9 218.1 108.9 230.6 121.4L240.1 130.8L341.6 29.23C380.6-9.744 443.8-9.744 482.8 29.23L482.8 29.23zM55.43 323.3L176.1 202.6L221.4 247.9L100.7 368.6C97.69 371.6 96 375.6 96 379.9V416H132.1C136.4 416 140.4 414.3 143.4 411.3L264.1 290.6L309.4 335.9L188.7 456.6C173.7 471.6 153.3 480 132.1 480H89.69L49.75 506.6C37.06 515.1 20.16 513.4 9.373 502.6C-1.413 491.8-3.086 474.9 5.375 462.2L32 422.3V379.9C32 358.7 40.43 338.3 55.43 323.3L55.43 323.3z\"],\n    \"eye-low-vision\": [640, 512, [\"low-vision\"], \"f2a8\", \"M150.7 92.77C195 58.27 251.8 32 320 32C400.8 32 465.5 68.84 512.6 112.6C559.4 156 590.7 207.1 605.5 243.7C608.8 251.6 608.8 260.4 605.5 268.3C592.1 300.6 565.2 346.1 525.6 386.7L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L150.7 92.77zM223.1 149.5L313.4 220.3C317.6 211.8 320 202.2 320 191.1C320 180.5 316.1 169.7 311.6 160.4C314.4 160.1 317.2 159.1 320 159.1C373 159.1 416 202.1 416 255.1C416 269.7 413.1 282.7 407.1 294.5L446.6 324.7C457.7 304.3 464 280.9 464 255.1C464 176.5 399.5 111.1 320 111.1C282.7 111.1 248.6 126.2 223.1 149.5zM393.6 469.4L54.65 203.7C62.6 190.1 72.08 175.8 83.09 161.5L446.2 447.5C429.8 456.4 412.3 463.8 393.6 469.4V469.4zM34.46 268.3C31.74 261.8 31.27 254.5 33.08 247.8L329.2 479.8C326.1 479.9 323.1 480 320 480C239.2 480 174.5 443.2 127.4 399.4C80.62 355.1 49.34 304 34.46 268.3H34.46z\"],\n    \"eye-slash\": [640, 512, [], \"f070\", \"M150.7 92.77C195 58.27 251.8 32 320 32C400.8 32 465.5 68.84 512.6 112.6C559.4 156 590.7 207.1 605.5 243.7C608.8 251.6 608.8 260.4 605.5 268.3C592.1 300.6 565.2 346.1 525.6 386.7L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L150.7 92.77zM223.1 149.5L313.4 220.3C317.6 211.8 320 202.2 320 191.1C320 180.5 316.1 169.7 311.6 160.4C314.4 160.1 317.2 159.1 320 159.1C373 159.1 416 202.1 416 255.1C416 269.7 413.1 282.7 407.1 294.5L446.6 324.7C457.7 304.3 464 280.9 464 255.1C464 176.5 399.5 111.1 320 111.1C282.7 111.1 248.6 126.2 223.1 149.5zM320 480C239.2 480 174.5 443.2 127.4 399.4C80.62 355.1 49.34 304 34.46 268.3C31.18 260.4 31.18 251.6 34.46 243.7C44 220.8 60.29 191.2 83.09 161.5L177.4 235.8C176.5 242.4 176 249.1 176 255.1C176 335.5 240.5 400 320 400C338.7 400 356.6 396.4 373 389.9L446.2 447.5C409.9 467.1 367.8 480 320 480H320z\"],\n    \"f\": [320, 512, [102], \"46\", \"M320 64.01c0 17.67-14.33 32-32 32H64v128h160c17.67 0 32 14.32 32 31.1s-14.33 32-32 32H64v160c0 17.67-14.33 32-32 32s-32-14.33-32-32v-384C0 46.34 14.33 32.01 32 32.01h256C305.7 32.01 320 46.34 320 64.01z\"],\n    \"face-angry\": [512, 512, [128544, \"angry\"], \"f556\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM339.9 373.3C323.8 355.4 295.7 336 256 336C216.3 336 188.2 355.4 172.1 373.3C166.2 379.9 166.7 389.1 173.3 395.9C179.9 401.8 189.1 401.3 195.9 394.7C207.6 381.7 227.5 368 255.1 368C284.5 368 304.4 381.7 316.1 394.7C322 401.3 332.1 401.8 338.7 395.9C345.3 389.1 345.8 379.9 339.9 373.3H339.9zM176.4 272C194 272 208.4 257.7 208.4 240C208.4 238.5 208.3 237 208.1 235.6L218.9 239.2C227.3 241.1 236.4 237.4 239.2 229.1C241.1 220.7 237.4 211.6 229.1 208.8L133.1 176.8C124.7 174 115.6 178.6 112.8 186.9C110 195.3 114.6 204.4 122.9 207.2L153.7 217.4C147.9 223.2 144.4 231.2 144.4 240C144.4 257.7 158.7 272 176.4 272zM358.9 217.2L389.1 207.2C397.4 204.4 401.1 195.3 399.2 186.9C396.4 178.6 387.3 174 378.9 176.8L282.9 208.8C274.6 211.6 270 220.7 272.8 229.1C275.6 237.4 284.7 241.1 293.1 239.2L304.7 235.3C304.5 236.8 304.4 238.4 304.4 240C304.4 257.7 318.7 272 336.4 272C354 272 368.4 257.7 368.4 240C368.4 231.1 364.7 223 358.9 217.2H358.9z\"],\n    \"face-dizzy\": [512, 512, [\"dizzy\"], \"f567\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 416C291.3 416 320 387.3 320 352C320 316.7 291.3 288 256 288C220.7 288 192 316.7 192 352C192 387.3 220.7 416 256 416zM100.7 155.3L137.4 192L100.7 228.7C94.44 234.9 94.44 245.1 100.7 251.3C106.9 257.6 117.1 257.6 123.3 251.3L160 214.6L196.7 251.3C202.9 257.6 213.1 257.6 219.3 251.3C225.6 245.1 225.6 234.9 219.3 228.7L182.6 192L219.3 155.3C225.6 149.1 225.6 138.9 219.3 132.7C213.1 126.4 202.9 126.4 196.7 132.7L160 169.4L123.3 132.7C117.1 126.4 106.9 126.4 100.7 132.7C94.44 138.9 94.44 149.1 100.7 155.3zM292.7 155.3L329.4 192L292.7 228.7C286.4 234.9 286.4 245.1 292.7 251.3C298.9 257.6 309.1 257.6 315.3 251.3L352 214.6L388.7 251.3C394.9 257.6 405.1 257.6 411.3 251.3C417.6 245.1 417.6 234.9 411.3 228.7L374.6 192L411.3 155.3C417.6 149.1 417.6 138.9 411.3 132.7C405.1 126.4 394.9 126.4 388.7 132.7L352 169.4L315.3 132.7C309.1 126.4 298.9 126.4 292.7 132.7C286.4 138.9 286.4 149.1 292.7 155.3z\"],\n    \"face-flushed\": [512, 512, [128563, \"flushed\"], \"f579\", \"M184 224C184 237.3 173.3 248 160 248C146.7 248 136 237.3 136 224C136 210.7 146.7 200 160 200C173.3 200 184 210.7 184 224zM376 224C376 237.3 365.3 248 352 248C338.7 248 328 237.3 328 224C328 210.7 338.7 200 352 200C365.3 200 376 210.7 376 224zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM192 400H320C328.8 400 336 392.8 336 384C336 375.2 328.8 368 320 368H192C183.2 368 176 375.2 176 384C176 392.8 183.2 400 192 400zM160 296C199.8 296 232 263.8 232 224C232 184.2 199.8 152 160 152C120.2 152 88 184.2 88 224C88 263.8 120.2 296 160 296zM352 152C312.2 152 280 184.2 280 224C280 263.8 312.2 296 352 296C391.8 296 424 263.8 424 224C424 184.2 391.8 152 352 152z\"],\n    \"face-frown\": [512, 512, [9785, \"frown\"], \"f119\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM159.3 388.7C171.5 349.4 209.9 320 256 320C302.1 320 340.5 349.4 352.7 388.7C355.3 397.2 364.3 401.9 372.7 399.3C381.2 396.7 385.9 387.7 383.3 379.3C366.8 326.1 315.8 287.1 256 287.1C196.3 287.1 145.2 326.1 128.7 379.3C126.1 387.7 130.8 396.7 139.3 399.3C147.7 401.9 156.7 397.2 159.3 388.7H159.3zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-frown-open\": [512, 512, [128550, \"frown-open\"], \"f57a\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176zM259.9 369.4C288.8 369.4 316.2 375.2 340.6 385.5C352.9 390.7 366.7 381.3 361.4 369.1C344.8 330.9 305.6 303.1 259.9 303.1C214.3 303.1 175.1 330.8 158.4 369.1C153.1 381.3 166.1 390.6 179.3 385.4C203.7 375.1 231 369.4 259.9 369.4L259.9 369.4z\"],\n    \"face-grimace\": [512, 512, [128556, \"grimace\"], \"f57f\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM399.3 360H344V400H352C375.8 400 395.5 382.7 399.3 360zM352 304H344V344H399.3C395.5 321.3 375.8 304 352 304zM328 344V304H264V344H328zM328 400V360H264V400H328zM184 304V344H248V304H184zM184 360V400H248V360H184zM168 344V304H160C136.2 304 116.5 321.3 112.7 344H168zM168 400V360H112.7C116.5 382.7 136.2 400 160 400H168zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-grin\": [512, 512, [128512, \"grin\"], \"f580\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-grin-beam\": [512, 512, [128516, \"grin-beam\"], \"f582\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM226.5 231.6C229.8 230.5 232 227.4 232 224C232 206.1 225.3 188.4 215.4 175.2C205.6 162.2 191.5 152 176 152C160.5 152 146.4 162.2 136.6 175.2C126.7 188.4 120 206.1 120 224C120 227.4 122.2 230.5 125.5 231.6C128.7 232.7 132.3 231.6 134.4 228.8L134.4 228.8L134.6 228.5C134.8 228.3 134.1 228 135.3 227.6C135.1 226.8 136.9 225.7 138.1 224.3C140.6 221.4 144.1 217.7 148.3 213.1C157.1 206.2 167.2 200 176 200C184.8 200 194.9 206.2 203.7 213.1C207.9 217.7 211.4 221.4 213.9 224.3C215.1 225.7 216 226.8 216.7 227.6C217 228 217.2 228.3 217.4 228.5L217.6 228.8L217.6 228.8C219.7 231.6 223.3 232.7 226.5 231.6V231.6zM377.6 228.8C379.7 231.6 383.3 232.7 386.5 231.6C389.8 230.5 392 227.4 392 224C392 206.1 385.3 188.4 375.4 175.2C365.6 162.2 351.5 152 336 152C320.5 152 306.4 162.2 296.6 175.2C286.7 188.4 280 206.1 280 224C280 227.4 282.2 230.5 285.5 231.6C288.7 232.7 292.3 231.6 294.4 228.8L294.4 228.8L294.6 228.5C294.8 228.3 294.1 228 295.3 227.6C295.1 226.8 296.9 225.7 298.1 224.3C300.6 221.4 304.1 217.7 308.3 213.1C317.1 206.2 327.2 200 336 200C344.8 200 354.9 206.2 363.7 213.1C367.9 217.7 371.4 221.4 373.9 224.3C375.1 225.7 376 226.8 376.7 227.6C377 228 377.2 228.3 377.4 228.5L377.6 228.8L377.6 228.8z\"],\n    \"face-grin-beam-sweat\": [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M464 128C437.5 128 416 107 416 81.01C416 76.01 417.8 69.74 420.6 62.87C420.9 62.17 421.2 61.46 421.6 60.74C430.5 40.51 448.1 15.86 457.6 3.282C460.8-1.093 467.2-1.094 470.4 3.281C483.4 20.65 512 61.02 512 81.01C512 102.7 497.1 120.8 476.8 126.3C472.7 127.4 468.4 128 464 128L464 128zM256 .0003C307.4 .0003 355.3 15.15 395.4 41.23C393.9 44.32 392.4 47.43 391.1 50.53C387.8 58.57 384 69.57 384 81.01C384 125.4 420.6 160 464 160C473.6 160 482.8 158.3 491.4 155.2C504.7 186.1 512 220.2 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0V.0003zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM226.5 231.6C229.8 230.5 232 227.4 232 224C232 206.1 225.3 188.4 215.4 175.2C205.6 162.2 191.5 152 176 152C160.5 152 146.4 162.2 136.6 175.2C126.7 188.4 120 206.1 120 224C120 227.4 122.2 230.5 125.5 231.6C128.7 232.7 132.3 231.6 134.4 228.8L134.4 228.8L134.6 228.5C134.8 228.3 134.1 228 135.3 227.6C135.1 226.8 136.9 225.7 138.1 224.3C140.6 221.4 144.1 217.7 148.3 213.1C157.1 206.2 167.2 200 176 200C184.8 200 194.9 206.2 203.7 213.1C207.9 217.7 211.4 221.4 213.9 224.3C215.1 225.7 216 226.8 216.7 227.6C217 228 217.2 228.3 217.4 228.5L217.6 228.8L217.6 228.8C219.7 231.6 223.3 232.7 226.5 231.6V231.6zM377.6 228.8C379.7 231.6 383.3 232.7 386.5 231.6C389.8 230.5 392 227.4 392 224C392 206.1 385.3 188.4 375.4 175.2C365.6 162.2 351.5 152 336 152C320.5 152 306.4 162.2 296.6 175.2C286.7 188.4 280 206.1 280 224C280 227.4 282.2 230.5 285.5 231.6C288.7 232.7 292.3 231.6 294.4 228.8L294.4 228.8L294.6 228.5C294.8 228.3 294.1 228 295.3 227.6C295.1 226.8 296.9 225.7 298.1 224.3C300.6 221.4 304.1 217.7 308.3 213.1C317.1 206.2 327.2 200 336 200C344.8 200 354.9 206.2 363.7 213.1C367.9 217.7 371.4 221.4 373.9 224.3C375.1 225.7 376 226.8 376.7 227.6C377 228 377.2 228.3 377.4 228.5L377.6 228.8L377.6 228.8z\"],\n    \"face-grin-hearts\": [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM199.3 129.1C181.5 124.4 163.2 134.9 158.4 152.7L154.1 168.8L137.1 164.5C120.2 159.7 101.9 170.3 97.14 188.1C92.38 205.8 102.9 224.1 120.7 228.9L185.8 246.3C194.4 248.6 203.1 243.6 205.4 235L222.9 169.1C227.6 152.2 217.1 133.9 199.3 129.1H199.3zM353.6 152.7C348.8 134.9 330.5 124.4 312.7 129.1C294.9 133.9 284.4 152.2 289.1 169.1L306.6 235C308.9 243.6 317.6 248.6 326.2 246.3L391.3 228.9C409.1 224.1 419.6 205.8 414.9 188.1C410.1 170.3 391.8 159.7 374 164.5L357.9 168.8L353.6 152.7z\"],\n    \"face-grin-squint\": [512, 512, [128518, \"grin-squint\"], \"f585\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM133.5 146.7C125.6 142.4 116 148.2 116 157.1C116 159.9 116.1 162.6 118.8 164.8L154.8 208L118.8 251.2C116.1 253.4 116 256.1 116 258.9C116 267.8 125.6 273.6 133.5 269.3L223.4 221.4C234.1 215.7 234.1 200.3 223.4 194.6L133.5 146.7zM396 157.1C396 148.2 386.4 142.4 378.5 146.7L288.6 194.6C277.9 200.3 277.9 215.7 288.6 221.4L378.5 269.3C386.4 273.6 396 267.8 396 258.9C396 256.1 395 253.4 393.2 251.2L357.2 208L393.2 164.8C395 162.6 396 159.9 396 157.1V157.1z\"],\n    \"face-grin-squint-tears\": [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.18C446-5.046 477.5-4.645 497.1 14.92C516.6 34.49 517 65.95 497.8 85.18C490.1 92.02 476.4 97.59 460.5 101.9C444.1 106.3 426.4 109.4 414.1 111.2C412.5 111.5 410.1 111.7 409.6 111.9C403.1 112.8 399.2 108 400.1 102.4C401.7 91.19 404.7 72.82 409.1 55.42C409.4 54.12 409.8 52.84 410.1 51.56C414.4 35.62 419.1 21.02 426.8 14.18L426.8 14.18zM382.2 33.17C380.6 37.96 379.3 42.81 378.1 47.52C373.3 66.46 370.1 86.05 368.4 97.79C364.5 124.6 387.4 147.5 414.1 143.6C426 141.9 445.6 138.8 464.5 133.9C469.2 132.7 474.1 131.4 478.8 129.9C534.2 227.5 520.2 353.8 437 437C353.8 520.3 227.5 534.2 129.8 478.8C131.3 474 132.7 469.2 133.9 464.5C138.7 445.5 141.9 425.1 143.6 414.2C147.5 387.4 124.6 364.5 97.89 368.4C85.97 370.1 66.39 373.2 47.46 378.1C42.76 379.3 37.93 380.6 33.15 382.1C-22.19 284.5-8.245 158.2 74.98 74.98C158.2-8.253 284.5-22.19 382.2 33.17V33.17zM416.4 202.3C411.6 190.4 395.6 191.4 389.6 202.7C370.1 239.4 343.3 275.9 309.8 309.4C276.3 342.9 239.8 369.7 203.1 389.2C191.8 395.2 190.8 411.2 202.7 416C262.1 440.2 332.6 428.3 380.7 380.3C428.7 332.2 440.6 261.7 416.4 202.3H416.4zM94.43 288.5L150.5 293.6L155.6 349.7C155.8 352.5 157.1 355 159 357C165.4 363.4 176.2 360.7 178.8 352.1L208.5 254.6C211.1 242.1 201.1 232.1 189.5 235.7L92.05 265.3C83.46 267.9 80.76 278.7 87.1 285.1C89.07 287.1 91.66 288.3 94.43 288.5V288.5zM235.7 189.5C232.1 201.1 242.1 211.1 254.6 208.5L352.1 178.8C360.7 176.2 363.4 165.4 357 159C355 157.1 352.5 155.8 349.7 155.6L293.6 150.5L288.5 94.43C288.3 91.66 287.1 89.07 285.1 87.1C278.7 80.76 267.9 83.46 265.3 92.05L235.7 189.5zM51.53 410.1C70.01 405.1 90.3 401.8 102.4 400.1C108 399.2 112.8 403.1 111.9 409.6C110.2 421.7 106.9 441.9 101.9 460.4C97.57 476.4 92.02 490.1 85.18 497.8C65.95 517 34.49 516.6 14.92 497.1C-4.645 477.5-5.046 446 14.18 426.8C21.02 419.1 35.6 414.4 51.53 410.1V410.1z\"],\n    \"face-grin-stars\": [512, 512, [129321, \"grin-stars\"], \"f587\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5H407.4zM152.8 124.6L136.2 159.3L98.09 164.3C95.03 164.7 92.48 166.8 91.52 169.8C90.57 172.7 91.39 175.9 93.62 178L121.5 204.5L114.5 242.3C113.1 245.4 115.2 248.4 117.7 250.2C120.2 252.1 123.5 252.3 126.2 250.8L159.1 232.5L193.8 250.8C196.5 252.3 199.8 252.1 202.3 250.2C204.8 248.4 206 245.4 205.5 242.3L198.5 204.5L226.4 178C228.6 175.9 229.4 172.7 228.5 169.8C227.5 166.8 224.1 164.7 221.9 164.3L183.8 159.3L167.2 124.6C165.9 121.8 163.1 120 159.1 120C156.9 120 154.1 121.8 152.8 124.6V124.6zM344.8 124.6L328.2 159.3L290.1 164.3C287 164.7 284.5 166.8 283.5 169.8C282.6 172.7 283.4 175.9 285.6 178L313.5 204.5L306.5 242.3C305.1 245.4 307.2 248.4 309.7 250.2C312.2 252.1 315.5 252.3 318.2 250.8L352 232.5L385.8 250.8C388.5 252.3 391.8 252.1 394.3 250.2C396.8 248.4 398 245.4 397.5 242.3L390.5 204.5L418.4 178C420.6 175.9 421.4 172.7 420.5 169.8C419.5 166.8 416.1 164.7 413.9 164.3L375.8 159.3L359.2 124.6C357.9 121.8 355.1 120 352 120C348.9 120 346.1 121.8 344.8 124.6H344.8z\"],\n    \"face-grin-tears\": [640, 512, [128514, \"grin-tears\"], \"f588\", \"M548.6 371.4C506.4 454.8 419.9 512 319.1 512C220.1 512 133.6 454.8 91.4 371.4C95.87 368.4 100.1 365 104.1 361.1C112.2 352.1 117.3 342.5 120.6 334.4C124.2 325.7 127.1 316 129.4 306.9C134 288.7 137 269.1 138.6 258.7C142.6 232.2 119.9 209.5 93.4 213.3C86.59 214.3 77.18 215.7 66.84 217.7C85.31 94.5 191.6 0 319.1 0C448.4 0 554.7 94.5 573.2 217.7C562.8 215.7 553.4 214.3 546.6 213.3C520.1 209.5 497.4 232.2 501.4 258.7C502.1 269.1 505.1 288.7 510.6 306.9C512.9 316 515.8 325.7 519.4 334.4C522.7 342.5 527.8 352.1 535.9 361.1C539.9 365 544.1 368.4 548.6 371.4V371.4zM471.4 331.5C476.4 319.7 464.4 309 452.1 312.8C412.4 324.9 367.7 331.8 320.3 331.8C272.9 331.8 228.1 324.9 188.5 312.8C176.2 309 164.2 319.7 169.2 331.5C194.1 390.6 252.4 432 320.3 432C388.2 432 446.4 390.6 471.4 331.5H471.4zM281.6 228.8C283.7 231.6 287.3 232.7 290.5 231.6C293.8 230.5 295.1 227.4 295.1 224C295.1 206.1 289.3 188.4 279.4 175.2C269.6 162.2 255.5 152 239.1 152C224.5 152 210.4 162.2 200.6 175.2C190.7 188.4 183.1 206.1 183.1 224C183.1 227.4 186.2 230.5 189.5 231.6C192.7 232.7 196.3 231.6 198.4 228.8L198.4 228.8L198.6 228.5C198.8 228.3 198.1 228 199.3 227.6C199.1 226.8 200.9 225.7 202.1 224.3C204.6 221.4 208.1 217.7 212.3 213.1C221.1 206.2 231.2 200 239.1 200C248.8 200 258.9 206.2 267.7 213.1C271.9 217.7 275.4 221.4 277.9 224.3C279.1 225.7 280 226.8 280.7 227.6C281 228 281.2 228.3 281.4 228.5L281.6 228.8L281.6 228.8zM450.5 231.6C453.8 230.5 456 227.4 456 224C456 206.1 449.3 188.4 439.4 175.2C429.6 162.2 415.5 152 400 152C384.5 152 370.4 162.2 360.6 175.2C350.7 188.4 344 206.1 344 224C344 227.4 346.2 230.5 349.5 231.6C352.7 232.7 356.3 231.6 358.4 228.8L358.4 228.8L358.6 228.5C358.8 228.3 358.1 228 359.3 227.6C359.1 226.8 360.9 225.7 362.1 224.3C364.6 221.4 368.1 217.7 372.3 213.1C381.1 206.2 391.2 200 400 200C408.8 200 418.9 206.2 427.7 213.1C431.9 217.7 435.4 221.4 437.9 224.3C439.1 225.7 440 226.8 440.7 227.6C441 228 441.2 228.3 441.4 228.5L441.6 228.8L441.6 228.8C443.7 231.6 447.3 232.7 450.5 231.6V231.6zM106.1 254.1C103.9 275.6 95.58 324.3 81.43 338.4C80.49 339.4 79.51 340.3 78.5 341.1C59.98 356.7 32.01 355.5 14.27 337.7C-4.442 319-4.825 288.9 13.55 270.6C22.19 261.9 43.69 255.4 64.05 250.1C77.02 248.2 89.53 246.2 97.94 245C103.3 244.2 107.8 248.7 106.1 254.1V254.1zM561.5 341.1C560.7 340.5 559.1 339.8 559.2 339.1C559 338.9 558.8 338.7 558.6 338.4C544.4 324.3 536.1 275.6 533 254.1C532.2 248.7 536.7 244.2 542.1 245C543.1 245.2 544.2 245.3 545.4 245.5C553.6 246.7 564.6 248.5 575.1 250.1C596.3 255.4 617.8 261.9 626.4 270.6C644.8 288.9 644.4 319 625.7 337.7C607.1 355.5 580 356.7 561.5 341.1L561.5 341.1z\"],\n    \"face-grin-tongue\": [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M256 0C397.4 0 512 114.6 512 256C512 368.9 438.9 464.7 337.5 498.8C346.7 484 352 466.6 352 448V401.1C376.3 383.5 395.6 359.5 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C116.9 359.3 135.1 383.1 160 400.7V448C160 466.6 165.3 484 174.5 498.8C73.07 464.7 0 368.9 0 256C0 114.6 114.6 .0003 256 .0003L256 0zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176zM256 512C220.7 512 192 483.3 192 448V402.6C192 387.9 203.9 376 218.6 376H220.6C231.9 376 241.7 383.9 244.2 394.9C247 407.5 264.1 407.5 267.8 394.9C270.3 383.9 280.1 376 291.4 376H293.4C308.1 376 320 387.9 320 402.6V448C320 483.3 291.3 512 256 512V512z\"],\n    \"face-grin-tongue-squint\": [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M256 0C397.4 0 512 114.6 512 256C512 368.9 438.9 464.7 337.5 498.8C346.7 484 352 466.6 352 448V401.1C376.3 383.5 395.6 359.5 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C116.9 359.3 135.1 383.1 160 400.7V448C160 466.6 165.3 484 174.5 498.8C73.07 464.7 0 368.9 0 256C0 114.6 114.6 .0003 256 .0003L256 0zM118.8 148.8L154.8 192L118.8 235.2C116.1 237.4 116 240.1 116 242.9C116 251.8 125.6 257.6 133.5 253.3L223.4 205.4C234.1 199.7 234.1 184.3 223.4 178.6L133.5 130.7C125.6 126.4 116 132.2 116 141.1C116 143.9 116.1 146.6 118.8 148.8V148.8zM288.6 178.6C277.9 184.3 277.9 199.7 288.6 205.4L378.5 253.3C386.4 257.6 396 251.8 396 242.9C396 240.1 395 237.4 393.2 235.2L357.2 192L393.2 148.8C395 146.6 396 143.9 396 141.1C396 132.2 386.4 126.4 378.5 130.7L288.6 178.6zM256 512C220.7 512 192 483.3 192 448V402.6C192 387.9 203.9 376 218.6 376H220.6C231.9 376 241.7 383.9 244.2 394.9C247 407.5 264.1 407.5 267.8 394.9C270.3 383.9 280.1 376 291.4 376H293.4C308.1 376 320 387.9 320 402.6V448C320 483.3 291.3 512 256 512V512z\"],\n    \"face-grin-tongue-wink\": [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M312 208C312 194.7 322.7 184 336 184C349.3 184 360 194.7 360 208C360 221.3 349.3 232 336 232C322.7 232 312 221.3 312 208zM174.5 498.8C73.07 464.7 0 368.9 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 368.9 438.9 464.7 337.5 498.8C346.7 484 352 466.6 352 448V401.1C376.3 383.5 395.6 359.5 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C116.9 359.3 135.1 383.1 159.1 400.7V448C159.1 466.6 165.3 484 174.5 498.8L174.5 498.8zM217.6 236.8C224.7 231.5 226.1 221.5 220.8 214.4C190.4 173.9 129.6 173.9 99.2 214.4C93.9 221.5 95.33 231.5 102.4 236.8C109.5 242.1 119.5 240.7 124.8 233.6C142.4 210.1 177.6 210.1 195.2 233.6C200.5 240.7 210.5 242.1 217.6 236.8zM336 272C371.3 272 400 243.3 400 208C400 172.7 371.3 144 336 144C300.7 144 272 172.7 272 208C272 243.3 300.7 272 336 272zM320 402.6V448C320 483.3 291.3 512 256 512C220.7 512 192 483.3 192 448V402.6C192 387.9 203.9 376 218.6 376H220.6C231.9 376 241.7 383.9 244.2 394.9C247 407.5 264.1 407.5 267.8 394.9C270.3 383.9 280.1 376 291.4 376H293.4C308.1 376 320 387.9 320 402.6V402.6z\"],\n    \"face-grin-wide\": [512, 512, [128515, \"grin-alt\"], \"f581\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM176 128C158.3 128 144 156.7 144 192C144 227.3 158.3 256 176 256C193.7 256 208 227.3 208 192C208 156.7 193.7 128 176 128zM336 256C353.7 256 368 227.3 368 192C368 156.7 353.7 128 336 128C318.3 128 304 156.7 304 192C304 227.3 318.3 256 336 256z\"],\n    \"face-grin-wink\": [512, 512, [\"grin-wink\"], \"f58c\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM393.6 236.8C400.7 231.5 402.1 221.5 396.8 214.4C366.4 173.9 305.6 173.9 275.2 214.4C269.9 221.5 271.3 231.5 278.4 236.8C285.5 242.1 295.5 240.7 300.8 233.6C318.4 210.1 353.6 210.1 371.2 233.6C376.5 240.7 386.5 242.1 393.6 236.8zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240z\"],\n    \"face-kiss\": [512, 512, [128535, \"kiss\"], \"f596\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM287.9 300.3C274.7 292.9 257.4 288 240 288C236.4 288 233.2 290.5 232.3 293.1C231.3 297.5 232.9 301.2 236.1 302.1L236.1 302.1L236.3 303.1L236.8 303.4L237.2 303.7C238 304.1 239.2 304.9 240.6 305.8C243.4 307.6 247.2 310.3 250.8 313.4C254.6 316.5 258 319.1 260.5 323.4C262.1 326.1 264 329.8 264 332C264 334.2 262.1 337 260.5 340.6C258 344 254.6 347.5 250.8 350.6C247.2 353.7 243.4 356.4 240.6 358.2C239.2 359.1 238 359.9 237.2 360.3L236.6 360.7L236.3 360.9L236.1 361L236.1 361C233.6 362.4 232 365.1 232 368C232 370.9 233.6 373.6 236.1 374.1L236.1 374.1L236.3 375.1C236.5 375.2 236.8 375.4 237.2 375.7C238 376.1 239.2 376.9 240.6 377.8C243.4 379.6 247.2 382.3 250.8 385.4C254.6 388.5 258 391.9 260.5 395.4C262.1 398.1 264 401.8 264 403.1C264 406.2 262.1 409 260.5 412.6C258 416 254.6 419.5 250.8 422.6C247.2 425.7 243.4 428.4 240.6 430.2C239.2 431.1 238 431.9 237.2 432.3C236.8 432.6 236.5 432.8 236.3 432.9L236.1 432.1L236.1 433C232.9 434.8 231.3 438.5 232.3 442C233.2 445.5 236.4 447.1 240 447.1C257.4 447.1 274.7 443.1 287.9 435.7C294.5 432 300.4 427.5 304.7 422.3C308.9 417.2 312 410.9 312 403.1C312 397.1 308.9 390.8 304.7 385.7C300.4 380.5 294.5 375.1 287.9 372.3C285.2 370.7 282.3 369.3 279.2 367.1C282.3 366.7 285.2 365.3 287.9 363.7C294.5 360 300.4 355.5 304.7 350.3C308.9 345.2 312 338.9 312 331.1C312 325.1 308.9 318.8 304.7 313.7C300.4 308.5 294.5 303.1 287.9 300.3L287.9 300.3zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-kiss-beam\": [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM287.9 300.3C274.7 292.9 257.4 288 240 288C236.4 288 233.2 290.5 232.3 293.1C231.3 297.5 232.9 301.2 236.1 302.1L236.1 302.1L236.3 303.1L236.8 303.4L237.2 303.7C238 304.1 239.2 304.9 240.6 305.8C243.4 307.6 247.2 310.3 250.8 313.4C254.6 316.5 258 319.1 260.5 323.4C262.1 326.1 264 329.8 264 332C264 334.2 262.1 337 260.5 340.6C258 344 254.6 347.5 250.8 350.6C247.2 353.7 243.4 356.4 240.6 358.2C239.2 359.1 238 359.9 237.2 360.3L236.6 360.7L236.3 360.9L236.1 361L236.1 361C233.6 362.4 232 365.1 232 368C232 370.9 233.6 373.6 236.1 374.1L236.1 374.1L236.3 375.1C236.5 375.2 236.8 375.4 237.2 375.7C238 376.1 239.2 376.9 240.6 377.8C243.4 379.6 247.2 382.3 250.8 385.4C254.6 388.5 258 391.9 260.5 395.4C262.1 398.1 264 401.8 264 403.1C264 406.2 262.1 409 260.5 412.6C258 416 254.6 419.5 250.8 422.6C247.2 425.7 243.4 428.4 240.6 430.2C239.2 431.1 238 431.9 237.2 432.3C236.8 432.6 236.5 432.8 236.3 432.9L236.1 432.1L236.1 433C232.9 434.8 231.3 438.5 232.3 442C233.2 445.5 236.4 447.1 240 447.1C257.4 447.1 274.7 443.1 287.9 435.7C294.5 432 300.4 427.5 304.7 422.3C308.9 417.2 312 410.9 312 403.1C312 397.1 308.9 390.8 304.7 385.7C300.4 380.5 294.5 375.1 287.9 372.3C285.2 370.7 282.3 369.3 279.2 367.1C282.3 366.7 285.2 365.3 287.9 363.7C294.5 360 300.4 355.5 304.7 350.3C308.9 345.2 312 338.9 312 331.1C312 325.1 308.9 318.8 304.7 313.7C300.4 308.5 294.5 303.1 287.9 300.3L287.9 300.3zM226.5 231.6C229.8 230.5 232 227.4 232 224C232 206.1 225.3 188.4 215.4 175.2C205.6 162.2 191.5 152 176 152C160.5 152 146.4 162.2 136.6 175.2C126.7 188.4 120 206.1 120 224C120 227.4 122.2 230.5 125.5 231.6C128.7 232.7 132.3 231.6 134.4 228.8L134.4 228.8L134.6 228.5C134.8 228.3 134.1 228 135.3 227.6C135.1 226.8 136.9 225.7 138.1 224.3C140.6 221.4 144.1 217.7 148.3 213.1C157.1 206.2 167.2 200 176 200C184.8 200 194.9 206.2 203.7 213.1C207.9 217.7 211.4 221.4 213.9 224.3C215.1 225.7 216 226.8 216.7 227.6C217 228 217.2 228.3 217.4 228.5L217.6 228.8L217.6 228.8C219.7 231.6 223.3 232.7 226.5 231.6V231.6zM377.6 228.8C379.7 231.6 383.3 232.7 386.5 231.6C389.8 230.5 392 227.4 392 224C392 206.1 385.3 188.4 375.4 175.2C365.6 162.2 351.5 152 336 152C320.5 152 306.4 162.2 296.6 175.2C286.7 188.4 280 206.1 280 224C280 227.4 282.2 230.5 285.5 231.6C288.7 232.7 292.3 231.6 294.4 228.8L294.4 228.8L294.6 228.5C294.8 228.3 294.1 228 295.3 227.6C295.1 226.8 296.9 225.7 298.1 224.3C300.6 221.4 304.1 217.7 308.3 213.1C317.1 206.2 327.2 200 336 200C344.8 200 354.9 206.2 363.7 213.1C367.9 217.7 371.4 221.4 373.9 224.3C375.1 225.7 376 226.8 376.7 227.6C377 228 377.2 228.3 377.4 228.5L377.6 228.8L377.6 228.8z\"],\n    \"face-kiss-wink-heart\": [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M461.8 334.6C448.1 300.8 411.5 280.3 374.3 290.7C334.2 301.9 312.4 343.8 322.4 382.8L345.3 472.1C347.3 479.7 350.9 486.4 355.7 491.8C325.1 504.8 291.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 285.3 507.1 313.4 498 339.7C486.9 334.1 474.5 333.1 461.8 334.6L461.8 334.6zM296 332C296 325.1 292.9 318.8 288.7 313.7C284.4 308.5 278.5 303.1 271.9 300.3C258.7 292.9 241.4 288 224 288C220.4 288 217.2 290.5 216.3 293.1C215.3 297.5 216.9 301.2 220.1 302.1L220.1 302.1L220.3 303.1C220.5 303.2 220.8 303.4 221.2 303.7C222 304.1 223.2 304.9 224.6 305.8C227.4 307.6 231.2 310.3 234.8 313.4C238.6 316.5 242 319.1 244.5 323.4C246.1 326.1 248 329.8 248 332C248 334.2 246.1 337 244.5 340.6C242 344 238.6 347.5 234.8 350.6C231.2 353.7 227.4 356.4 224.6 358.2C223.2 359.1 222 359.9 221.2 360.3C220.8 360.6 220.5 360.8 220.3 360.9L220.1 361L220.1 361C217.6 362.4 216 365.1 216 368C216 370.9 217.6 373.6 220.1 374.1L220.1 374.1L220.3 375.1L220.6 375.3L221.2 375.7C222 376.1 223.2 376.9 224.6 377.8C227.4 379.6 231.2 382.3 234.8 385.4C238.6 388.5 242 391.9 244.5 395.4C246.1 398.1 248 401.8 248 404C248 406.2 246.1 409 244.5 412.6C242 416 238.6 419.5 234.8 422.6C231.2 425.7 227.4 428.4 224.6 430.2C223.2 431.1 222 431.9 221.2 432.3C220.8 432.6 220.5 432.8 220.3 432.9L220.1 433L220.1 433C216.9 434.8 215.3 438.5 216.3 442C217.2 445.5 220.4 447.1 224 447.1C241.4 447.1 258.7 443.1 271.9 435.7C278.5 432 284.4 427.5 288.7 422.3C292.9 417.2 296 410.9 296 403.1C296 397.1 292.9 390.8 288.7 385.7C284.4 380.5 278.5 375.1 271.9 372.3C269.2 370.7 266.3 369.3 263.2 367.1C266.3 366.7 269.2 365.3 271.9 363.7C278.5 360 284.4 355.5 288.7 350.3C292.9 345.2 296 338.9 296 331.1V332zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM393.6 236.8C400.7 231.5 402.1 221.5 396.8 214.4C366.4 173.9 305.6 173.9 275.2 214.4C269.9 221.5 271.3 231.5 278.4 236.8C285.5 242.1 295.5 240.7 300.8 233.6C318.4 210.1 353.6 210.1 371.2 233.6C376.5 240.7 386.5 242.1 393.6 236.8zM439.4 373.3L459.5 367.6C481.7 361.4 504.6 375.2 510.6 398.4C516.5 421.7 503.3 445.6 481.1 451.8L396.1 475.6C387.5 478 378.6 472.9 376.3 464.2L353.4 374.9C347.5 351.6 360.7 327.7 382.9 321.5C405.2 315.3 428 329.1 433.1 352.3L439.4 373.3z\"],\n    \"face-laugh\": [512, 512, [\"laugh\"], \"f599\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM176.4 160C158.7 160 144.4 174.3 144.4 192C144.4 209.7 158.7 224 176.4 224C194 224 208.4 209.7 208.4 192C208.4 174.3 194 160 176.4 160zM336.4 224C354 224 368.4 209.7 368.4 192C368.4 174.3 354 160 336.4 160C318.7 160 304.4 174.3 304.4 192C304.4 209.7 318.7 224 336.4 224z\"],\n    \"face-laugh-beam\": [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM226.5 215.6C229.8 214.5 232 211.4 232 208C232 190.1 225.3 172.4 215.4 159.2C205.6 146.2 191.5 136 176 136C160.5 136 146.4 146.2 136.6 159.2C126.7 172.4 120 190.1 120 208C120 211.4 122.2 214.5 125.5 215.6C128.7 216.7 132.3 215.6 134.4 212.8L134.4 212.8L134.6 212.5C134.8 212.3 134.1 212 135.3 211.6C135.1 210.8 136.9 209.7 138.1 208.3C140.6 205.4 144.1 201.7 148.3 197.1C157.1 190.2 167.2 184 176 184C184.8 184 194.9 190.2 203.7 197.1C207.9 201.7 211.4 205.4 213.9 208.3C215.1 209.7 216 210.8 216.7 211.6C217 212 217.2 212.3 217.4 212.5L217.6 212.8L217.6 212.8C219.7 215.6 223.3 216.7 226.5 215.6V215.6zM377.6 212.8C379.7 215.6 383.3 216.7 386.5 215.6C389.8 214.5 392 211.4 392 208C392 190.1 385.3 172.4 375.4 159.2C365.6 146.2 351.5 136 336 136C320.5 136 306.4 146.2 296.6 159.2C286.7 172.4 280 190.1 280 208C280 211.4 282.2 214.5 285.5 215.6C288.7 216.7 292.3 215.6 294.4 212.8L294.4 212.8L294.6 212.5C294.8 212.3 294.1 212 295.3 211.6C295.1 210.8 296.9 209.7 298.1 208.3C300.6 205.4 304.1 201.7 308.3 197.1C317.1 190.2 327.2 184 336 184C344.8 184 354.9 190.2 363.7 197.1C367.9 201.7 371.4 205.4 373.9 208.3C375.1 209.7 376 210.8 376.7 211.6C377 212 377.2 212.3 377.4 212.5L377.6 212.8L377.6 212.8z\"],\n    \"face-laugh-squint\": [512, 512, [\"laugh-squint\"], \"f59b\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM133.5 114.7C125.6 110.4 116 116.2 116 125.1C116 127.9 116.1 130.6 118.8 132.8L154.8 176L118.8 219.2C116.1 221.4 116 224.1 116 226.9C116 235.8 125.6 241.6 133.5 237.3L223.4 189.4C234.1 183.7 234.1 168.3 223.4 162.6L133.5 114.7zM396 125.1C396 116.2 386.4 110.4 378.5 114.7L288.6 162.6C277.9 168.3 277.9 183.7 288.6 189.4L378.5 237.3C386.4 241.6 396 235.8 396 226.9C396 224.1 395 221.4 393.2 219.2L357.2 176L393.2 132.8C395 130.6 396 127.9 396 125.1V125.1z\"],\n    \"face-laugh-wink\": [512, 512, [\"laugh-wink\"], \"f59c\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM176.4 160C158.7 160 144.4 174.3 144.4 192C144.4 209.7 158.7 224 176.4 224C194 224 208.4 209.7 208.4 192C208.4 174.3 194 160 176.4 160zM300.8 217.6C318.4 194.1 353.6 194.1 371.2 217.6C376.5 224.7 386.5 226.1 393.6 220.8C400.7 215.5 402.1 205.5 396.8 198.4C366.4 157.9 305.6 157.9 275.2 198.4C269.9 205.5 271.3 215.5 278.4 220.8C285.5 226.1 295.5 224.7 300.8 217.6z\"],\n    \"face-meh\": [512, 512, [128528, \"meh\"], \"f11a\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176zM160 336C151.2 336 144 343.2 144 352C144 360.8 151.2 368 160 368H352C360.8 368 368 360.8 368 352C368 343.2 360.8 336 352 336H160z\"],\n    \"face-meh-blank\": [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-rolling-eyes\": [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM192 368C183.2 368 176 375.2 176 384C176 392.8 183.2 400 192 400H320C328.8 400 336 392.8 336 384C336 375.2 328.8 368 320 368H192zM186.2 165.6C189.8 170.8 192 177.1 192 184C192 201.7 177.7 216 160 216C142.3 216 128 201.7 128 184C128 177.1 130.2 170.8 133.8 165.6C111.5 175.6 96 197.1 96 224C96 259.3 124.7 288 160 288C195.3 288 224 259.3 224 224C224 197.1 208.5 175.6 186.2 165.6zM352 288C387.3 288 416 259.3 416 224C416 197.1 400.5 175.6 378.2 165.6C381.8 170.8 384 177.1 384 184C384 201.7 369.7 216 352 216C334.3 216 320 201.7 320 184C320 177.1 322.2 170.8 325.8 165.6C303.5 175.6 288 197.1 288 224C288 259.3 316.7 288 352 288z\"],\n    \"face-sad-cry\": [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M352 493.4C322.4 505.4 289.9 512 256 512C222.1 512 189.6 505.4 160 493.4V288C160 279.2 152.8 272 144 272C135.2 272 128 279.2 128 288V477.8C51.48 433.5 0 350.8 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 350.8 460.5 433.5 384 477.8V288C384 279.2 376.8 272 368 272C359.2 272 352 279.2 352 288V493.4zM217.6 236.8C224.7 231.5 226.1 221.5 220.8 214.4C190.4 173.9 129.6 173.9 99.2 214.4C93.9 221.5 95.33 231.5 102.4 236.8C109.5 242.1 119.5 240.7 124.8 233.6C142.4 210.1 177.6 210.1 195.2 233.6C200.5 240.7 210.5 242.1 217.6 236.8zM316.8 233.6C334.4 210.1 369.6 210.1 387.2 233.6C392.5 240.7 402.5 242.1 409.6 236.8C416.7 231.5 418.1 221.5 412.8 214.4C382.4 173.9 321.6 173.9 291.2 214.4C285.9 221.5 287.3 231.5 294.4 236.8C301.5 242.1 311.5 240.7 316.8 233.6zM208 368C208 394.5 229.5 416 256 416C282.5 416 304 394.5 304 368V336C304 309.5 282.5 288 256 288C229.5 288 208 309.5 208 336V368z\"],\n    \"face-sad-tear\": [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0zM256 352C290.9 352 323.2 367.8 348.3 394.9C354.3 401.4 364.4 401.7 370.9 395.7C377.4 389.7 377.7 379.6 371.7 373.1C341.6 340.5 301 320 256 320C247.2 320 240 327.2 240 336C240 344.8 247.2 352 256 352H256zM208 369C208 349 179.6 308.6 166.4 291.3C163.2 286.9 156.8 286.9 153.6 291.3C140.6 308.6 112 349 112 369C112 395 133.5 416 160 416C186.5 416 208 395 208 369H208zM303.6 208C303.6 225.7 317.1 240 335.6 240C353.3 240 367.6 225.7 367.6 208C367.6 190.3 353.3 176 335.6 176C317.1 176 303.6 190.3 303.6 208zM207.6 208C207.6 190.3 193.3 176 175.6 176C157.1 176 143.6 190.3 143.6 208C143.6 225.7 157.1 240 175.6 240C193.3 240 207.6 225.7 207.6 208z\"],\n    \"face-smile\": [512, 512, [128578, \"smile\"], \"f118\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM164.1 325.5C158.3 318.8 148.2 318.1 141.5 323.9C134.8 329.7 134.1 339.8 139.9 346.5C162.1 372.1 200.9 400 255.1 400C311.1 400 349.8 372.1 372.1 346.5C377.9 339.8 377.2 329.7 370.5 323.9C363.8 318.1 353.7 318.8 347.9 325.5C329.9 346.2 299.4 368 255.1 368C212.6 368 182 346.2 164.1 325.5H164.1zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-smile-beam\": [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM164.1 325.5C158.3 318.8 148.2 318.1 141.5 323.9C134.8 329.7 134.1 339.8 139.9 346.5C162.1 372.1 200.9 400 255.1 400C311.1 400 349.8 372.1 372.1 346.5C377.9 339.8 377.2 329.7 370.5 323.9C363.8 318.1 353.7 318.8 347.9 325.5C329.9 346.2 299.4 368 255.1 368C212.6 368 182 346.2 164.1 325.5H164.1zM226.5 231.6C229.8 230.5 232 227.4 232 224C232 206.1 225.3 188.4 215.4 175.2C205.6 162.2 191.5 152 176 152C160.5 152 146.4 162.2 136.6 175.2C126.7 188.4 120 206.1 120 224C120 227.4 122.2 230.5 125.5 231.6C128.7 232.7 132.3 231.6 134.4 228.8L134.4 228.8L134.6 228.5C134.8 228.3 134.1 228 135.3 227.6C135.1 226.8 136.9 225.7 138.1 224.3C140.6 221.4 144.1 217.7 148.3 213.1C157.1 206.2 167.2 200 176 200C184.8 200 194.9 206.2 203.7 213.1C207.9 217.7 211.4 221.4 213.9 224.3C215.1 225.7 216 226.8 216.7 227.6C217 228 217.2 228.3 217.4 228.5L217.6 228.8L217.6 228.8C219.7 231.6 223.3 232.7 226.5 231.6V231.6zM377.6 228.8C379.7 231.6 383.3 232.7 386.5 231.6C389.8 230.5 392 227.4 392 224C392 206.1 385.3 188.4 375.4 175.2C365.6 162.2 351.5 152 336 152C320.5 152 306.4 162.2 296.6 175.2C286.7 188.4 280 206.1 280 224C280 227.4 282.2 230.5 285.5 231.6C288.7 232.7 292.3 231.6 294.4 228.8L294.4 228.8L294.6 228.5C294.8 228.3 294.1 228 295.3 227.6C295.1 226.8 296.9 225.7 298.1 224.3C300.6 221.4 304.1 217.7 308.3 213.1C317.1 206.2 327.2 200 336 200C344.8 200 354.9 206.2 363.7 213.1C367.9 217.7 371.4 221.4 373.9 224.3C375.1 225.7 376 226.8 376.7 227.6C377 228 377.2 228.3 377.4 228.5L377.6 228.8L377.6 228.8z\"],\n    \"face-smile-wink\": [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM164.1 325.5C158.3 318.8 148.2 318.1 141.5 323.9C134.8 329.7 134.1 339.8 139.9 346.5C162.1 372.1 200.9 400 255.1 400C311.1 400 349.8 372.1 372.1 346.5C377.9 339.8 377.2 329.7 370.5 323.9C363.8 318.1 353.7 318.8 347.9 325.5C329.9 346.2 299.4 368 255.1 368C212.6 368 182 346.2 164.1 325.5H164.1zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM300.8 233.6C318.4 210.1 353.6 210.1 371.2 233.6C376.5 240.7 386.5 242.1 393.6 236.8C400.7 231.5 402.1 221.5 396.8 214.4C366.4 173.9 305.6 173.9 275.2 214.4C269.9 221.5 271.3 231.5 278.4 236.8C285.5 242.1 295.5 240.7 300.8 233.6z\"],\n    \"face-surprise\": [512, 512, [128558, \"surprise\"], \"f5c2\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176zM256 416C291.3 416 320 387.3 320 352C320 316.7 291.3 288 256 288C220.7 288 192 316.7 192 352C192 387.3 220.7 416 256 416z\"],\n    \"face-tired\": [512, 512, [128555, \"tired\"], \"f5c8\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM138.3 364.1C132.2 375.8 128 388.4 128 400C128 405.2 130.6 410.2 134.9 413.2C139.2 416.1 144.7 416.8 149.6 414.1L170.2 407.3C197.1 397.2 225.6 392 254.4 392H257.6C286.4 392 314.9 397.2 341.8 407.3L362.4 414.1C367.3 416.8 372.8 416.1 377.1 413.2C381.4 410.2 384 405.2 384 400C384 388.4 379.8 375.8 373.7 364.1C367.4 352.1 358.4 339.8 347.3 328.7C325.3 306.7 293.4 287.1 256 287.1C218.6 287.1 186.7 306.7 164.7 328.7C153.6 339.8 144.6 352.1 138.3 364.1H138.3zM133.5 146.7C125.6 142.4 116 148.2 116 157.1C116 159.9 116.1 162.6 118.8 164.8L154.8 208L118.8 251.2C116.1 253.4 116 256.1 116 258.9C116 267.8 125.6 273.6 133.5 269.3L223.4 221.4C234.1 215.7 234.1 200.3 223.4 194.6L133.5 146.7zM396 157.1C396 148.2 386.4 142.4 378.5 146.7L288.6 194.6C277.9 200.3 277.9 215.7 288.6 221.4L378.5 269.3C386.4 273.6 396 267.8 396 258.9C396 256.1 395 253.4 393.2 251.2L357.2 208L393.2 164.8C395 162.6 396 159.9 396 157.1V157.1z\"],\n    \"fan\": [512, 512, [], \"f863\", \"M352.6 127.1c-28.12 0-54.13 4.5-77.13 12.88l12.38-123.1c1.125-10.5-8.125-18.88-18.5-17.63C189.6 10.12 127.1 77.62 127.1 159.4c0 28.12 4.5 54.13 12.88 77.13L17.75 224.1c-10.5-1.125-18.88 8.125-17.63 18.5c9.1 79.75 77.5 141.4 159.3 141.4c28.12 0 54.13-4.5 77.13-12.88l-12.38 123.1c-1.125 10.38 8.125 18.88 18.5 17.63c79.75-10 141.4-77.5 141.4-159.3c0-28.12-4.5-54.13-12.88-77.13l123.1 12.38c10.5 1.125 18.88-8.125 17.63-18.5C501.9 189.6 434.4 127.1 352.6 127.1zM255.1 287.1c-17.62 0-31.1-14.38-31.1-32s14.37-32 31.1-32s31.1 14.38 31.1 32S273.6 287.1 255.1 287.1z\"],\n    \"faucet\": [512, 512, [], \"e005\", \"M352 256h-38.54C297.7 242.5 277.9 232.9 256 228V180.5L224 177L192 180.5V228C170.1 233 150.3 242.6 134.5 256H16C7.125 256 0 263.1 0 272v96C0 376.9 7.125 384 16 384h92.78C129.4 421.8 173 448 224 448s94.59-26.25 115.2-64H352c17.62 0 32 14.29 32 31.91S398.4 448 416 448h64c17.62 0 32-14.31 32-31.94C512 327.7 440.4 256 352 256zM81.63 159.9L224 144.9l142.4 15C375.9 160.9 384 153.1 384 143.1V112.9c0-10-8.125-17.74-17.62-16.74L256 107.8V80C256 71.12 248.9 64 240 64h-32C199.1 64 192 71.12 192 80v27.75L81.63 96.14C72.13 95.14 64 102.9 64 112.9v30.24C64 153.1 72.13 160.9 81.63 159.9z\"],\n    \"fax\": [512, 512, [128439, 128224], \"f1ac\", \"M192 64h197.5L416 90.51V160h64V77.25c0-8.484-3.375-16.62-9.375-22.62l-45.25-45.25C419.4 3.375 411.2 0 402.8 0H160C142.3 0 128 14.33 128 32v128h64V64zM64 128H32C14.38 128 0 142.4 0 160v320c0 17.62 14.38 32 32 32h32c17.62 0 32-14.38 32-32V160C96 142.4 81.63 128 64 128zM480 192H128v288c0 17.6 14.4 32 32 32h320c17.6 0 32-14.4 32-32V224C512 206.4 497.6 192 480 192zM288 432c0 8.875-7.125 16-16 16h-32C231.1 448 224 440.9 224 432v-32C224 391.1 231.1 384 240 384h32c8.875 0 16 7.125 16 16V432zM288 304c0 8.875-7.125 16-16 16h-32C231.1 320 224 312.9 224 304v-32C224 263.1 231.1 256 240 256h32C280.9 256 288 263.1 288 272V304zM416 432c0 8.875-7.125 16-16 16h-32c-8.875 0-16-7.125-16-16v-32c0-8.875 7.125-16 16-16h32c8.875 0 16 7.125 16 16V432zM416 304c0 8.875-7.125 16-16 16h-32C359.1 320 352 312.9 352 304v-32C352 263.1 359.1 256 368 256h32C408.9 256 416 263.1 416 272V304z\"],\n    \"feather\": [512, 512, [129718], \"f52d\", \"M483.4 244.2L351.9 287.1h97.74c-9.874 10.62 3.75-3.125-46.24 46.87l-147.6 49.12h98.24c-74.99 73.12-194.6 70.62-246.8 54.1l-66.14 65.99c-9.374 9.374-24.6 9.374-33.98 0s-9.374-24.6 0-33.98l259.5-259.2c6.249-6.25 6.249-16.37 0-22.62c-6.249-6.249-16.37-6.249-22.62 0l-178.4 178.2C58.78 306.1 68.61 216.7 129.1 156.3l85.74-85.68c90.62-90.62 189.8-88.27 252.3-25.78C517.8 95.34 528.9 169.7 483.4 244.2z\"],\n    \"feather-pointed\": [512, 512, [\"feather-alt\"], \"f56b\", \"M467.1 241.1L351.1 288h94.34c-7.711 14.85-16.29 29.28-25.87 43.01l-132.5 52.99h85.65c-59.34 52.71-144.1 80.34-264.5 52.82l-68.13 68.13c-9.38 9.38-24.56 9.374-33.94 0c-9.375-9.375-9.375-24.56 0-33.94l253.4-253.4c4.846-6.275 4.643-15.19-1.113-20.95c-6.25-6.25-16.38-6.25-22.62 0l-168.6 168.6C24.56 58 366.9 8.118 478.9 .0846c18.87-1.354 34.41 14.19 33.05 33.05C508.7 78.53 498.5 161.8 467.1 241.1z\"],\n    \"file\": [384, 512, [128459, 61462, 128196], \"f15b\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128z\"],\n    \"file-arrow-down\": [384, 512, [\"file-download\"], \"f56d\", \"M384 128h-128V0L384 128zM256 160H384v304c0 26.51-21.49 48-48 48h-288C21.49 512 0 490.5 0 464v-416C0 21.49 21.49 0 48 0H224l.0039 128C224 145.7 238.3 160 256 160zM255 295L216 334.1V232c0-13.25-10.75-24-24-24S168 218.8 168 232v102.1L128.1 295C124.3 290.3 118.2 288 112 288S99.72 290.3 95.03 295c-9.375 9.375-9.375 24.56 0 33.94l80 80c9.375 9.375 24.56 9.375 33.94 0l80-80c9.375-9.375 9.375-24.56 0-33.94S264.4 285.7 255 295z\"],\n    \"file-arrow-up\": [384, 512, [\"file-upload\"], \"f574\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM288.1 344.1C284.3 349.7 278.2 352 272 352s-12.28-2.344-16.97-7.031L216 305.9V408c0 13.25-10.75 24-24 24s-24-10.75-24-24V305.9l-39.03 39.03c-9.375 9.375-24.56 9.375-33.94 0s-9.375-24.56 0-33.94l80-80c9.375-9.375 24.56-9.375 33.94 0l80 80C298.3 320.4 298.3 335.6 288.1 344.1z\"],\n    \"file-audio\": [384, 512, [], \"f1c7\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM176 404c0 10.75-12.88 15.98-20.5 8.484L120 376H76C69.38 376 64 370.6 64 364v-56C64 301.4 69.38 296 76 296H120l35.5-36.5C163.1 251.9 176 257.3 176 268V404zM224 387.8c-4.391 0-8.75-1.835-11.91-5.367c-5.906-6.594-5.359-16.69 1.219-22.59C220.2 353.7 224 345.2 224 336s-3.797-17.69-10.69-23.88c-6.578-5.906-7.125-16-1.219-22.59c5.922-6.594 16.05-7.094 22.59-1.219C248.2 300.5 256 317.8 256 336s-7.766 35.53-21.31 47.69C231.6 386.4 227.8 387.8 224 387.8zM320 336c0 41.81-20.5 81.11-54.84 105.1c-2.781 1.938-5.988 2.875-9.145 2.875c-5.047 0-10.03-2.375-13.14-6.844c-5.047-7.25-3.281-17.22 3.969-22.28C272.6 396.9 288 367.4 288 336s-15.38-60.84-41.14-78.8c-7.25-5.062-9.027-15.03-3.98-22.28c5.047-7.281 14.99-9.062 22.27-3.969C299.5 254.9 320 294.2 320 336zM256 0v128h128L256 0z\"],\n    \"file-code\": [384, 512, [], \"f1c9\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM154.1 353.8c7.812 7.812 7.812 20.5 0 28.31C150.2 386.1 145.1 388 140 388s-10.23-1.938-14.14-5.844l-48-48c-7.812-7.812-7.812-20.5 0-28.31l48-48c7.812-7.812 20.47-7.812 28.28 0s7.812 20.5 0 28.31L120.3 320L154.1 353.8zM306.1 305.8c7.812 7.812 7.812 20.5 0 28.31l-48 48C254.2 386.1 249.1 388 244 388s-10.23-1.938-14.14-5.844c-7.812-7.812-7.812-20.5 0-28.31L263.7 320l-33.86-33.84c-7.812-7.812-7.812-20.5 0-28.31s20.47-7.812 28.28 0L306.1 305.8zM256 0v128h128L256 0z\"],\n    \"file-contract\": [384, 512, [], \"f56c\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM64 72C64 67.63 67.63 64 72 64h80C156.4 64 160 67.63 160 72v16C160 92.38 156.4 96 152 96h-80C67.63 96 64 92.38 64 88V72zM64 136C64 131.6 67.63 128 72 128h80C156.4 128 160 131.6 160 136v16C160 156.4 156.4 160 152 160h-80C67.63 160 64 156.4 64 152V136zM304 384c8.875 0 16 7.125 16 16S312.9 416 304 416h-47.25c-16.38 0-31.25-9.125-38.63-23.88c-2.875-5.875-8-6.5-10.12-6.5s-7.25 .625-10 6.125l-7.75 15.38C187.6 412.6 181.1 416 176 416H174.9c-6.5-.5-12-4.75-14-11L144 354.6L133.4 386.5C127.5 404.1 111 416 92.38 416H80C71.13 416 64 408.9 64 400S71.13 384 80 384h12.38c4.875 0 9.125-3.125 10.62-7.625l18.25-54.63C124.5 311.9 133.6 305.3 144 305.3s19.5 6.625 22.75 16.5l13.88 41.63c19.75-16.25 54.13-9.75 66 14.12c2 4 6 6.5 10.12 6.5H304z\"],\n    \"file-csv\": [384, 512, [], \"f6dd\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM128 280C128 284.4 124.4 288 120 288H112C103.1 288 96 295.1 96 304v32C96 344.9 103.1 352 112 352h8C124.4 352 128 355.6 128 360v16C128 380.4 124.4 384 120 384H112C85.5 384 64 362.5 64 336v-32C64 277.5 85.5 256 112 256h8C124.4 256 128 259.6 128 264V280zM172.3 384H160c-4.375 0-8-3.625-8-8v-16C152 355.6 155.6 352 160 352h12.25c6 0 10.38-3.5 10.38-6.625c0-1.25-.75-2.625-2.125-3.875l-21.88-18.75C150.3 315.5 145.4 305.3 145.4 294.6C145.4 273.4 164.4 256 187.8 256H200c4.375 0 8 3.625 8 8v16C208 284.4 204.4 288 200 288H187.8c-6 0-10.38 3.5-10.38 6.625c0 1.25 .75 2.625 2.125 3.875l21.88 18.75c8.375 7.25 13.25 17.5 13.25 28.12C214.6 366.6 195.6 384 172.3 384zM288 284.8V264C288 259.6 291.6 256 296 256h16C316.4 256 320 259.6 320 264v20.75c0 35.5-12.88 69-36.25 94.13C280.8 382.1 276.5 384 272 384s-8.75-1.875-11.75-5.125C236.9 353.8 224 320.3 224 284.8V264C224 259.6 227.6 256 232 256h16C252.4 256 256 259.6 256 264v20.75c0 20.38 5.75 40.25 16 56.88C282.3 325 288 305.1 288 284.8z\"],\n    \"file-excel\": [384, 512, [], \"f1c3\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM272.1 264.4L224 344l48.99 79.61C279.6 434.3 271.9 448 259.4 448h-26.43c-5.557 0-10.71-2.883-13.63-7.617L192 396l-27.31 44.38C161.8 445.1 156.6 448 151.1 448H124.6c-12.52 0-20.19-13.73-13.63-24.39L160 344L111 264.4C104.4 253.7 112.1 240 124.6 240h26.43c5.557 0 10.71 2.883 13.63 7.613L192 292l27.31-44.39C222.2 242.9 227.4 240 232.9 240h26.43C271.9 240 279.6 253.7 272.1 264.4zM256 0v128h128L256 0z\"],\n    \"file-export\": [576, 512, [\"arrow-right-from-file\"], \"f56e\", \"M192 312C192 298.8 202.8 288 216 288H384V160H256c-17.67 0-32-14.33-32-32L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48v-128H216C202.8 336 192 325.3 192 312zM256 0v128h128L256 0zM568.1 295l-80-80c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94L494.1 288H384v48h110.1l-39.03 39.03C450.3 379.7 448 385.8 448 392s2.344 12.28 7.031 16.97c9.375 9.375 24.56 9.375 33.94 0l80-80C578.3 319.6 578.3 304.4 568.1 295z\"],\n    \"file-image\": [384, 512, [128443], \"f1c5\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM96 224c17.67 0 32 14.33 32 32S113.7 288 96 288S64 273.7 64 256S78.33 224 96 224zM318.1 439.5C315.3 444.8 309.9 448 304 448h-224c-5.9 0-11.32-3.248-14.11-8.451c-2.783-5.201-2.479-11.52 .7949-16.42l53.33-80C122.1 338.7 127.1 336 133.3 336s10.35 2.674 13.31 7.125L160 363.2l45.35-68.03C208.3 290.7 213.3 288 218.7 288s10.35 2.674 13.31 7.125l85.33 128C320.6 428 320.9 434.3 318.1 439.5zM256 0v128h128L256 0z\"],\n    \"file-import\": [512, 512, [\"arrow-right-to-file\"], \"f56f\", \"M384 0v128h128L384 0zM352 128L352 0H176C149.5 0 128 21.49 128 48V288h174.1l-39.03-39.03c-9.375-9.375-9.375-24.56 0-33.94s24.56-9.375 33.94 0l80 80c9.375 9.375 9.375 24.56 0 33.94l-80 80c-9.375 9.375-24.56 9.375-33.94 0C258.3 404.3 256 398.2 256 392s2.344-12.28 7.031-16.97L302.1 336H128v128C128 490.5 149.5 512 176 512h288c26.51 0 48-21.49 48-48V160h-127.1C366.3 160 352 145.7 352 128zM24 288C10.75 288 0 298.7 0 312c0 13.25 10.75 24 24 24H128V288H24z\"],\n    \"file-invoice\": [384, 512, [], \"f570\", \"M256 0v128h128L256 0zM288 256H96v64h192V256zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM64 72C64 67.63 67.63 64 72 64h80C156.4 64 160 67.63 160 72v16C160 92.38 156.4 96 152 96h-80C67.63 96 64 92.38 64 88V72zM64 136C64 131.6 67.63 128 72 128h80C156.4 128 160 131.6 160 136v16C160 156.4 156.4 160 152 160h-80C67.63 160 64 156.4 64 152V136zM320 440c0 4.375-3.625 8-8 8h-80C227.6 448 224 444.4 224 440v-16c0-4.375 3.625-8 8-8h80c4.375 0 8 3.625 8 8V440zM320 240v96c0 8.875-7.125 16-16 16h-224C71.13 352 64 344.9 64 336v-96C64 231.1 71.13 224 80 224h224C312.9 224 320 231.1 320 240z\"],\n    \"file-invoice-dollar\": [384, 512, [], \"f571\", \"M384 128h-128V0L384 128zM256 160H384v304c0 26.51-21.49 48-48 48h-288C21.49 512 0 490.5 0 464v-416C0 21.49 21.49 0 48 0H224l.0039 128C224 145.7 238.3 160 256 160zM64 88C64 92.38 67.63 96 72 96h80C156.4 96 160 92.38 160 88v-16C160 67.63 156.4 64 152 64h-80C67.63 64 64 67.63 64 72V88zM72 160h80C156.4 160 160 156.4 160 152v-16C160 131.6 156.4 128 152 128h-80C67.63 128 64 131.6 64 136v16C64 156.4 67.63 160 72 160zM197.5 316.8L191.1 315.2C168.3 308.2 168.8 304.1 169.6 300.5c1.375-7.812 16.59-9.719 30.27-7.625c5.594 .8438 11.73 2.812 17.59 4.844c10.39 3.594 21.83-1.938 25.45-12.34c3.625-10.44-1.891-21.84-12.33-25.47c-7.219-2.484-13.11-4.078-18.56-5.273V248c0-11.03-8.953-20-20-20s-20 8.969-20 20v5.992C149.6 258.8 133.8 272.8 130.2 293.7c-7.406 42.84 33.19 54.75 50.52 59.84l5.812 1.688c29.28 8.375 28.8 11.19 27.92 16.28c-1.375 7.812-16.59 9.75-30.31 7.625c-6.938-1.031-15.81-4.219-23.66-7.031l-4.469-1.625c-10.41-3.594-21.83 1.812-25.52 12.22c-3.672 10.41 1.781 21.84 12.2 25.53l4.266 1.5c7.758 2.789 16.38 5.59 25.06 7.512V424c0 11.03 8.953 20 20 20s20-8.969 20-20v-6.254c22.36-4.793 38.21-18.53 41.83-39.43C261.3 335 219.8 323.1 197.5 316.8z\"],\n    \"file-lines\": [384, 512, [128462, 61686, 128441, \"file-alt\", \"file-text\"], \"f15c\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM272 416h-160C103.2 416 96 408.8 96 400C96 391.2 103.2 384 112 384h160c8.836 0 16 7.162 16 16C288 408.8 280.8 416 272 416zM272 352h-160C103.2 352 96 344.8 96 336C96 327.2 103.2 320 112 320h160c8.836 0 16 7.162 16 16C288 344.8 280.8 352 272 352zM288 272C288 280.8 280.8 288 272 288h-160C103.2 288 96 280.8 96 272C96 263.2 103.2 256 112 256h160C280.8 256 288 263.2 288 272z\"],\n    \"file-medical\": [384, 512, [], \"f477\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM288 301.7v36.57C288 345.9 281.9 352 274.3 352L224 351.1v50.29C224 409.9 217.9 416 210.3 416H173.7C166.1 416 160 409.9 160 402.3V351.1L109.7 352C102.1 352 96 345.9 96 338.3V301.7C96 294.1 102.1 288 109.7 288H160V237.7C160 230.1 166.1 224 173.7 224h36.57C217.9 224 224 230.1 224 237.7V288h50.29C281.9 288 288 294.1 288 301.7z\"],\n    \"file-pdf\": [384, 512, [], \"f1c1\", \"M184 208c0-4.406-3.594-8-8-8S168 203.6 168 208c0 2.062 .2969 23.31 9.141 50.25C179.1 249.6 184 226.2 184 208zM256 0v128h128L256 0zM80 422.4c0 9.656 10.47 11.97 14.38 6.375C99.27 421.9 108.8 408 120.1 388.6c-14.22 7.969-27.25 17.31-38.02 28.31C80.75 418.3 80 420.3 80 422.4zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM292 312c24.26 0 44 19.74 44 44c0 24.67-18.94 44-43.13 44c-5.994 0-11.81-.9531-17.22-2.805c-20.06-6.758-38.38-15.96-54.55-27.39c-23.88 5.109-45.46 11.52-64.31 19.1c-14.43 26.31-27.63 46.15-36.37 58.41C112.1 457.8 100.8 464 87.94 464C65.92 464 48 446.1 48 424.1c0-11.92 3.74-21.82 11.18-29.51c16.18-16.52 37.37-30.99 63.02-43.05c11.75-22.83 21.94-46.04 30.33-69.14C136.2 242.4 136 208.4 136 208c0-22.05 17.95-40 40-40c22.06 0 40 17.95 40 40c0 24.1-7.227 55.75-8.938 62.63c-1.006 3.273-2.035 6.516-3.082 9.723c7.83 14.46 17.7 27.21 29.44 38.05C263.1 313.4 284.3 312.1 287.6 312H292zM156.5 354.6c17.98-6.5 36.13-11.44 52.92-15.19c-12.42-12.06-22.17-25.12-29.8-38.16C172.3 320.6 164.4 338.5 156.5 354.6zM292.9 368C299 368 304 363 304 356.9C304 349.4 298.6 344 292 344H288c-.3438 .0313-16.83 .9687-40.95 4.75c11.27 7 24.12 13.19 38.84 18.12C288 367.6 290.5 368 292.9 368z\"],\n    \"file-powerpoint\": [384, 512, [], \"f1c4\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM279.6 308.1C284.2 353.5 248.5 392 204 392H160v40C160 440.8 152.8 448 144 448H128c-8.836 0-16-7.164-16-16V256c0-8.836 7.164-16 16-16h71.51C239.3 240 275.6 268.5 279.6 308.1zM160 344h44c15.44 0 28-12.56 28-28S219.4 288 204 288H160V344z\"],\n    \"file-prescription\": [384, 512, [], \"f572\", \"M176 240H128v32h48C184.9 272 192 264.9 192 256S184.9 240 176 240zM256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM292.5 315.5l11.38 11.25c6.25 6.25 6.25 16.38 0 22.62l-29.88 30L304 409.4c6.25 6.25 6.25 16.38 0 22.62l-11.25 11.38c-6.25 6.25-16.5 6.25-22.75 0L240 413.3l-30 30c-6.249 6.25-16.48 6.266-22.73 .0156L176 432c-6.25-6.25-6.25-16.38 0-22.62l29.1-30.12L146.8 320H128l.0078 48.01c0 8.875-7.125 16-16 16L96 384c-8.875 0-16-7.125-16-16v-160C80 199.1 87.13 192 96 192h80c35.38 0 64 28.62 64 64c0 24.25-13.62 45-33.5 55.88L240 345.4l29.88-29.88C276.1 309.3 286.3 309.3 292.5 315.5z\"],\n    \"file-signature\": [576, 512, [], \"f573\", \"M292.7 342.3C289.7 345.3 288 349.4 288 353.7V416h62.34c4.264 0 8.35-1.703 11.35-4.727l156.9-158l-67.88-67.88L292.7 342.3zM568.5 167.4L536.6 135.5c-9.875-10-26-10-36 0l-27.25 27.25l67.88 67.88l27.25-27.25C578.5 193.4 578.5 177.3 568.5 167.4zM256 0v128h128L256 0zM256 448c-16.07-.2852-30.62-9.359-37.88-23.88c-2.875-5.875-8-6.5-10.12-6.5s-7.25 .625-10 6.125l-7.749 15.38C187.6 444.6 181.1 448 176 448H174.9c-6.5-.5-12-4.75-14-11L144 386.6L133.4 418.5C127.5 436.1 111 448 92.45 448H80C71.13 448 64 440.9 64 432S71.13 416 80 416h12.4c4.875 0 9.102-3.125 10.6-7.625l18.25-54.63C124.5 343.9 133.6 337.3 144 337.3s19.5 6.625 22.75 16.5l13.88 41.63c19.75-16.25 54.13-9.75 66 14.12C248.5 413.2 252.2 415.6 256 415.9V347c0-8.523 3.402-16.7 9.451-22.71L384 206.5V160H256c-17.67 0-32-14.33-32-32L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V448H256z\"],\n    \"file-video\": [384, 512, [], \"f1c8\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM224 384c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32V288c0-17.67 14.33-32 32-32h96c17.67 0 32 14.33 32 32V384zM320 284.9v102.3c0 12.57-13.82 20.23-24.48 13.57L256 376v-80l39.52-24.7C306.2 264.6 320 272.3 320 284.9z\"],\n    \"file-waveform\": [448, 512, [\"file-medical-alt\"], \"f478\", \"M320 0v128h128L320 0zM288 128L288 0H112C85.49 0 64 21.49 64 48V224H16C7.164 224 0 231.2 0 240v32C0 280.8 7.164 288 16 288h128c6.062 0 11.59 3.438 14.31 8.844L176 332.2l49.69-99.38c5.438-10.81 23.19-10.81 28.62 0L281.9 288H352c8.844 0 16 7.156 16 16S360.8 320 352 320h-80c-6.062 0-11.59-3.438-14.31-8.844L240 275.8l-49.69 99.38C187.6 380.6 182.1 384 176 384s-11.59-3.438-14.31-8.844L134.1 320H64v144C64 490.5 85.49 512 112 512h288c26.51 0 48-21.49 48-48V160h-127.1C302.3 160 288 145.7 288 128z\"],\n    \"file-word\": [384, 512, [], \"f1c2\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM281.5 240h23.37c7.717 0 13.43 7.18 11.69 14.7l-42.46 184C272.9 444.1 268 448 262.5 448h-29.26c-5.426 0-10.18-3.641-11.59-8.883L192 329.1l-29.61 109.1C160.1 444.4 156.2 448 150.8 448H121.5c-5.588 0-10.44-3.859-11.69-9.305l-42.46-184C65.66 247.2 71.37 240 79.08 240h23.37c5.588 0 10.44 3.859 11.69 9.301L137.8 352L165.6 248.9C167 243.6 171.8 240 177.2 240h29.61c5.426 0 10.18 3.641 11.59 8.883L246.2 352l23.7-102.7C271.1 243.9 275.1 240 281.5 240zM256 0v128h128L256 0z\"],\n    \"file-zipper\": [384, 512, [\"file-archive\"], \"f1c6\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM96 32h64v32H96V32zM96 96h64v32H96V96zM96 160h64v32H96V160zM128.3 415.1c-40.56 0-70.76-36.45-62.83-75.45L96 224h64l30.94 116.9C198.7 379.7 168.5 415.1 128.3 415.1zM144 336h-32C103.2 336 96 343.2 96 352s7.164 16 16 16h32C152.8 368 160 360.8 160 352S152.8 336 144 336z\"],\n    \"fill\": [512, 512, [], \"f575\", \"M168 90.74L221.1 37.66C249.2 9.539 294.8 9.539 322.9 37.66L474.3 189.1C502.5 217.2 502.5 262.8 474.3 290.9L283.9 481.4C246.4 518.9 185.6 518.9 148.1 481.4L30.63 363.9C-6.863 326.4-6.863 265.6 30.63 228.1L122.7 135.1L41.37 54.63C28.88 42.13 28.88 21.87 41.37 9.372C53.87-3.124 74.13-3.124 86.63 9.372L168 90.74zM75.88 273.4C71.69 277.6 68.9 282.6 67.52 287.1H386.7L429.1 245.7C432.2 242.5 432.2 237.5 429.1 234.3L277.7 82.91C274.5 79.79 269.5 79.79 266.3 82.91L213.3 136L262.6 185.4C275.1 197.9 275.1 218.1 262.6 230.6C250.1 243.1 229.9 243.1 217.4 230.6L168 181.3L75.88 273.4z\"],\n    \"fill-drip\": [576, 512, [], \"f576\", \"M41.37 9.372C53.87-3.124 74.13-3.124 86.63 9.372L168 90.74L221.1 37.66C249.2 9.539 294.8 9.539 322.9 37.66L474.3 189.1C502.5 217.2 502.5 262.8 474.3 290.9L283.9 481.4C246.4 518.9 185.6 518.9 148.1 481.4L30.63 363.9C-6.863 326.4-6.863 265.6 30.63 228.1L122.7 135.1L41.37 54.63C28.88 42.13 28.88 21.87 41.37 9.372V9.372zM217.4 230.6L168 181.3L75.88 273.4C71.69 277.6 68.9 282.6 67.52 288H386.7L429.1 245.7C432.2 242.5 432.2 237.5 429.1 234.3L277.7 82.91C274.5 79.79 269.5 79.79 266.3 82.91L213.3 136L262.6 185.4C275.1 197.9 275.1 218.1 262.6 230.6C250.1 243.1 229.9 243.1 217.4 230.6L217.4 230.6zM448 448C448 422.8 480.6 368.4 499.2 339.3C505.3 329.9 518.7 329.9 524.8 339.3C543.4 368.4 576 422.8 576 448C576 483.3 547.3 512 512 512C476.7 512 448 483.3 448 448H448z\"],\n    \"film\": [512, 512, [127902], \"f008\", \"M463.1 32h-416C21.49 32-.0001 53.49-.0001 80v352c0 26.51 21.49 48 47.1 48h416c26.51 0 48-21.49 48-48v-352C511.1 53.49 490.5 32 463.1 32zM111.1 408c0 4.418-3.582 8-8 8H55.1c-4.418 0-8-3.582-8-8v-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8L111.1 408zM111.1 280c0 4.418-3.582 8-8 8H55.1c-4.418 0-8-3.582-8-8v-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8V280zM111.1 152c0 4.418-3.582 8-8 8H55.1c-4.418 0-8-3.582-8-8v-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8L111.1 152zM351.1 400c0 8.836-7.164 16-16 16H175.1c-8.836 0-16-7.164-16-16v-96c0-8.838 7.164-16 16-16h160c8.836 0 16 7.162 16 16V400zM351.1 208c0 8.836-7.164 16-16 16H175.1c-8.836 0-16-7.164-16-16v-96c0-8.838 7.164-16 16-16h160c8.836 0 16 7.162 16 16V208zM463.1 408c0 4.418-3.582 8-8 8h-47.1c-4.418 0-7.1-3.582-7.1-8l0-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8V408zM463.1 280c0 4.418-3.582 8-8 8h-47.1c-4.418 0-8-3.582-8-8v-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8V280zM463.1 152c0 4.418-3.582 8-8 8h-47.1c-4.418 0-8-3.582-8-8l0-48c0-4.418 3.582-8 7.1-8h47.1c4.418 0 8 3.582 8 8V152z\"],\n    \"filter\": [512, 512, [], \"f0b0\", \"M3.853 54.87C10.47 40.9 24.54 32 40 32H472C487.5 32 501.5 40.9 508.1 54.87C514.8 68.84 512.7 85.37 502.1 97.33L320 320.9V448C320 460.1 313.2 471.2 302.3 476.6C291.5 482 278.5 480.9 268.8 473.6L204.8 425.6C196.7 419.6 192 410.1 192 400V320.9L9.042 97.33C-.745 85.37-2.765 68.84 3.854 54.87L3.853 54.87z\"],\n    \"filter-circle-dollar\": [576, 512, [\"funnel-dollar\"], \"f662\", \"M3.853 22.87C10.47 8.904 24.54 0 40 0H472C487.5 0 501.5 8.904 508.1 22.87C514.8 36.84 512.7 53.37 502.1 65.33L396.4 195.6C316.2 212.1 255.1 283 255.1 368C255.1 395.4 262.3 421.4 273.5 444.5C271.8 443.7 270.3 442.7 268.8 441.6L204.8 393.6C196.7 387.6 192 378.1 192 368V288.9L9.042 65.33C-.745 53.37-2.765 36.84 3.854 22.87H3.853zM576 368C576 447.5 511.5 512 432 512C352.5 512 287.1 447.5 287.1 368C287.1 288.5 352.5 224 432 224C511.5 224 576 288.5 576 368zM413 331.1C418.1 329.3 425.6 327.9 431.8 328C439.1 328.1 448.9 329.8 458.1 332.1C466.7 334.2 475.4 328.1 477.5 320.4C479.7 311.8 474.4 303.2 465.9 301C460.3 299.6 454.3 298.3 448 297.4V288C448 279.2 440.8 272 432 272C423.2 272 416 279.2 416 288V297.5C409.9 298.7 403.7 300.7 397.1 303.8C386.1 310.1 374.9 322.2 376.1 341C377.1 357 387.8 366.4 397.7 371.7C406.6 376.4 417.5 379.5 426.3 381.1L428.1 382.5C438.3 385.4 445.1 387.7 451.2 390.8C455.8 393.5 455.1 395.1 455.1 396.5C456.1 398.9 455.5 400.2 454.1 401C454.3 401.1 453.2 403.2 450.1 404.4C446.3 406.9 439.2 408.2 432.5 407.1C422.1 407.7 414 404.8 402.6 401.2C400.7 400.6 398.8 400 396.8 399.4C388.3 396.8 379.3 401.5 376.7 409.9C374.1 418.3 378.8 427.3 387.2 429.9C388.9 430.4 390.5 430.1 392.3 431.5C399.3 433.8 407.4 436.4 416 438.1V449.5C416 458.4 423.2 465.5 432 465.5C440.8 465.5 448 458.4 448 449.5V438.7C454.2 437.6 460.5 435.6 466.3 432.5C478.3 425.9 488.5 413.8 487.1 395.5C487.5 379.4 477.7 369.3 467.5 363.3C458.1 357.7 446.2 354.4 436.9 351.7L436.8 351.7C426.3 348.7 418.5 346.5 412.9 343.5C408.1 340.9 408.1 339.5 408.1 339.1L408.1 338.1C407.9 337 408.4 336.1 408.8 335.4C409.4 334.5 410.6 333.3 413 331.1L413 331.1z\"],\n    \"filter-circle-xmark\": [576, 512, [], \"e17b\", \"M3.853 22.87C10.47 8.904 24.54 0 40 0H472C487.5 0 501.5 8.904 508.1 22.87C514.8 36.84 512.7 53.37 502.1 65.33L396.4 195.6C316.2 212.1 255.1 283 255.1 368C255.1 395.4 262.3 421.4 273.5 444.5C271.8 443.7 270.3 442.7 268.8 441.6L204.8 393.6C196.7 387.6 192 378.1 192 368V288.9L9.042 65.33C-.745 53.37-2.765 36.84 3.854 22.87H3.853zM287.1 368C287.1 288.5 352.5 224 432 224C511.5 224 576 288.5 576 368C576 447.5 511.5 512 432 512C352.5 512 287.1 447.5 287.1 368zM491.3 331.3C497.6 325.1 497.6 314.9 491.3 308.7C485.1 302.4 474.9 302.4 468.7 308.7L432 345.4L395.3 308.7C389.1 302.4 378.9 302.4 372.7 308.7C366.4 314.9 366.4 325.1 372.7 331.3L409.4 368L372.7 404.7C366.4 410.9 366.4 421.1 372.7 427.3C378.9 433.6 389.1 433.6 395.3 427.3L432 390.6L468.7 427.3C474.9 433.6 485.1 433.6 491.3 427.3C497.6 421.1 497.6 410.9 491.3 404.7L454.6 368L491.3 331.3z\"],\n    \"fingerprint\": [512, 512, [], \"f577\", \"M256.1 246c-13.25 0-23.1 10.75-23.1 23.1c1.125 72.25-8.124 141.9-27.75 211.5C201.7 491.3 206.6 512 227.5 512c10.5 0 20.12-6.875 23.12-17.5c13.5-47.87 30.1-125.4 29.5-224.5C280.1 256.8 269.4 246 256.1 246zM255.2 164.3C193.1 164.1 151.2 211.3 152.1 265.4c.75 47.87-3.75 95.87-13.37 142.5c-2.75 12.1 5.624 25.62 18.62 28.37c12.1 2.625 25.62-5.625 28.37-18.62c10.37-50.12 15.12-101.6 14.37-152.1C199.7 238.6 219.1 212.1 254.5 212.3c31.37 .5 57.24 25.37 57.62 55.5c.8749 47.1-2.75 96.25-10.62 143.5c-2.125 12.1 6.749 25.37 19.87 27.62c19.87 3.25 26.75-15.12 27.5-19.87c8.249-49.1 12.12-101.1 11.25-151.1C359.2 211.1 312.2 165.1 255.2 164.3zM144.6 144.5C134.2 136.1 119.2 137.6 110.7 147.9C85.25 179.4 71.38 219.3 72 259.9c.6249 37.62-2.375 75.37-8.999 112.1c-2.375 12.1 6.249 25.5 19.25 27.87c20.12 3.5 27.12-14.87 27.1-19.37c7.124-39.87 10.5-80.62 9.749-121.4C119.6 229.3 129.2 201.3 147.1 178.3C156.4 167.9 154.9 152.9 144.6 144.5zM253.1 82.14C238.6 81.77 223.1 83.52 208.2 87.14c-12.87 2.1-20.87 15.1-17.87 28.87c3.125 12.87 15.1 20.75 28.1 17.75C230.4 131.3 241.7 130 253.4 130.1c75.37 1.125 137.6 61.5 138.9 134.6c.5 37.87-1.375 75.1-5.624 113.6c-1.5 13.12 7.999 24.1 21.12 26.5c16.75 1.1 25.5-11.87 26.5-21.12c4.625-39.75 6.624-79.75 5.999-119.7C438.6 165.3 355.1 83.64 253.1 82.14zM506.1 203.6c-2.875-12.1-15.51-21.25-28.63-18.38c-12.1 2.875-21.12 15.75-18.25 28.62c4.75 21.5 4.875 37.5 4.75 61.62c-.1249 13.25 10.5 24.12 23.75 24.25c13.12 0 24.12-10.62 24.25-23.87C512.1 253.8 512.3 231.8 506.1 203.6zM465.1 112.9c-48.75-69.37-128.4-111.7-213.3-112.9c-69.74-.875-134.2 24.84-182.2 72.96c-46.37 46.37-71.34 108-70.34 173.6l-.125 21.5C-.3651 281.4 10.01 292.4 23.26 292.8C23.51 292.9 23.76 292.9 24.01 292.9c12.1 0 23.62-10.37 23.1-23.37l.125-23.62C47.38 193.4 67.25 144 104.4 106.9c38.87-38.75 91.37-59.62 147.7-58.87c69.37 .1 134.7 35.62 174.6 92.37c7.624 10.87 22.5 13.5 33.37 5.875C470.1 138.6 473.6 123.8 465.1 112.9z\"],\n    \"fire\": [448, 512, [128293], \"f06d\", \"M323.5 51.25C302.8 70.5 284 90.75 267.4 111.1C240.1 73.62 206.2 35.5 168 0C69.75 91.12 0 210 0 281.6C0 408.9 100.2 512 224 512s224-103.1 224-230.4C448 228.4 396 118.5 323.5 51.25zM304.1 391.9C282.4 407 255.8 416 226.9 416c-72.13 0-130.9-47.73-130.9-125.2c0-38.63 24.24-72.64 72.74-130.8c7 8 98.88 125.4 98.88 125.4l58.63-66.88c4.125 6.75 7.867 13.52 11.24 19.9C364.9 290.6 353.4 357.4 304.1 391.9z\"],\n    \"fire-extinguisher\": [512, 512, [129519], \"f134\", \"M64 480c0 17.67 14.33 32 31.1 32H256c17.67 0 31.1-14.33 31.1-32l-.0001-32H64L64 480zM503.4 5.56c-5.453-4.531-12.61-6.406-19.67-5.188l-175.1 32c-11.41 2.094-19.7 12.03-19.7 23.63L224 56L224 32c0-17.67-14.33-32-31.1-32H160C142.3 0 128 14.33 128 32l.0002 26.81C69.59 69.32 20.5 110.6 1.235 168.4C-2.952 181 3.845 194.6 16.41 198.8C18.94 199.6 21.48 200 24 200c10.05 0 19.42-6.344 22.77-16.41C59.45 145.5 90.47 117.8 128 108L128 139.2C90.27 157.2 64 195.4 64 240L64 416h223.1l.0001-176c0-44.6-26.27-82.79-63.1-100.8L224 104l63.1-.002c0 11.59 8.297 21.53 19.7 23.62l175.1 31.1c1.438 .25 2.875 .375 4.297 .375c5.578 0 11.03-1.938 15.37-5.562c5.469-4.562 8.625-11.31 8.625-18.44V23.1C511.1 16.87 508.8 10.12 503.4 5.56zM176 96C167.2 96 160 88.84 160 80S167.2 64 176 64s15.1 7.164 15.1 16S184.8 96 176 96z\"],\n    \"fire-flame-curved\": [384, 512, [\"fire-alt\"], \"f7e4\", \"M384 319.1C384 425.9 297.9 512 192 512s-192-86.13-192-192c0-58.67 27.82-106.8 54.57-134.1C69.54 169.3 96 179.8 96 201.5v85.5c0 35.17 27.97 64.5 63.16 64.94C194.9 352.5 224 323.6 224 288c0-88-175.1-96.12-52.15-277.2c13.5-19.72 44.15-10.77 44.15 13.03C215.1 127 384 149.7 384 319.1z\"],\n    \"fire-flame-simple\": [384, 512, [\"burn\"], \"f46a\", \"M203.1 4.365c-6.177-5.82-16.06-5.819-22.23-.0007C74.52 104.5 0 234.1 0 312C0 437.9 79 512 192 512s192-74.05 192-200C384 233.9 309 104.2 203.1 4.365zM192 432c-56.5 0-96-37.76-96-91.74c0-12.47 4.207-55.32 83.87-143c6.314-6.953 17.95-6.953 24.26 0C283.8 284.9 288 327.8 288 340.3C288 394.2 248.5 432 192 432z\"],\n    \"fish\": [576, 512, [128031], \"f578\", \"M180.5 141.5C219.7 108.5 272.6 80 336 80C399.4 80 452.3 108.5 491.5 141.5C530.5 174.5 558.3 213.1 572.4 241.3C577.2 250.5 577.2 261.5 572.4 270.7C558.3 298 530.5 337.5 491.5 370.5C452.3 403.5 399.4 432 336 432C272.6 432 219.7 403.5 180.5 370.5C164.3 356.7 150 341.9 137.8 327.3L48.12 379.6C35.61 386.9 19.76 384.9 9.474 374.7C-.8133 364.5-2.97 348.7 4.216 336.1L50 256L4.216 175.9C-2.97 163.3-.8133 147.5 9.474 137.3C19.76 127.1 35.61 125.1 48.12 132.4L137.8 184.7C150 170.1 164.3 155.3 180.5 141.5L180.5 141.5zM416 224C398.3 224 384 238.3 384 256C384 273.7 398.3 288 416 288C433.7 288 448 273.7 448 256C448 238.3 433.7 224 416 224z\"],\n    \"flag\": [512, 512, [61725, 127988], \"f024\", \"M64 496C64 504.8 56.75 512 48 512h-32C7.25 512 0 504.8 0 496V32c0-17.75 14.25-32 32-32s32 14.25 32 32V496zM476.3 0c-6.365 0-13.01 1.35-19.34 4.233c-45.69 20.86-79.56 27.94-107.8 27.94c-59.96 0-94.81-31.86-163.9-31.87C160.9 .3055 131.6 4.867 96 15.75v350.5c32-9.984 59.87-14.1 84.85-14.1c73.63 0 124.9 31.78 198.6 31.78c31.91 0 68.02-5.971 111.1-23.09C504.1 355.9 512 344.4 512 332.1V30.73C512 11.1 495.3 0 476.3 0z\"],\n    \"flag-checkered\": [576, 512, [127937], \"f11e\", \"M509.5 .0234c-6.145 0-12.53 1.344-18.64 4.227c-44.11 20.86-76.81 27.94-104.1 27.94c-57.89 0-91.53-31.86-158.2-31.87C195 .3203 153.3 8.324 96 32.38V32c0-17.75-14.25-32-32-32S32 14.25 32 32L31.96 496c0 8.75 7.25 16 16 16H80C88.75 512 96 504.8 96 496V384c51.74-23.86 92.71-31.82 128.3-31.82c71.09 0 120.6 31.78 191.7 31.78c30.81 0 65.67-5.969 108.1-23.09C536.3 355.9 544 344.4 544 332.1V30.74C544 12.01 527.8 .0234 509.5 .0234zM480 141.8c-31.99 14.04-57.81 20.59-80 22.49v80.21c25.44-1.477 51.59-6.953 80-17.34V308.9c-22.83 7.441-43.93 11.08-64.03 11.08c-5.447 0-10.71-.4258-15.97-.8906V244.5c-4.436 .2578-8.893 .6523-13.29 .6523c-25.82 0-47.35-4.547-66.71-10.08v66.91c-23.81-6.055-50.17-11.41-80-12.98V213.1C236.2 213.7 232.5 213.3 228.5 213.3C208.8 213.3 185.1 217.7 160 225.1v69.1C139.2 299.4 117.9 305.8 96 314.4V250.7l24.77-10.39C134.8 234.5 147.6 229.9 160 225.1V143.4C140.9 148.5 120.1 155.2 96 165.3V101.8l24.77-10.39C134.8 85.52 147.6 80.97 160 77.02v66.41c26.39-6.953 49.09-10.17 68.48-10.16c4.072 0 7.676 .4453 11.52 .668V65.03C258.6 66.6 274.4 71.55 293.2 77.83C301.7 80.63 310.7 83.45 320 86.12v66.07c20.79 6.84 41.45 12.96 66.71 12.96c4.207 0 8.781-.4766 13.29-.8594V95.54c25.44-1.477 51.59-6.953 80-17.34V141.8zM240 133.9v80.04c18.61 1.57 34.37 6.523 53.23 12.8C301.7 229.6 310.7 232.4 320 235.1V152.2C296.1 144.3 271.6 135.8 240 133.9z\"],\n    \"flag-usa\": [576, 512, [], \"f74d\", \"M544 61.63V30.74c0-25-28.81-37.99-53.17-26.49C306.3 91.5 321.5-62.25 96 32.38V32c0-17.75-14.25-32-32-32S32 14.25 32 32L31.96 496c0 8.75 7.25 16 15.1 16H80C88.75 512 96 504.8 96 496V384c200-92.25 238.8 53.25 428.1-23.12C536.3 355.9 544 344.4 544 332.1V296.1c-46.98 17.25-86.42 24.12-120.8 24.12c-40.25-.125-74.17-8.5-107.7-16.62C254 288.5 195.3 274.8 96 314.8v-34.5c102-37.63 166.5-22.75 228.4-7.625C385.1 287.8 444.7 301.4 544 261.5V200c-46.98 17.25-86.42 24.12-120.8 24.12c-40.25 0-74.17-8.375-107.7-16.5C254 192.5 195.3 178.8 96 218.8v-34.5c102-37.5 166.5-22.62 228.4-7.5C385.1 191.8 444.7 205.4 544 165.6V96.75c-57.75 23.5-100.4 31.38-135.8 31.38c-62.96 0-118.9-27.09-120.2-27.38V67.5C331.9 78.94 390.1 128.3 544 61.63zM160 136c-8.75 0-16-7.125-16-16s7.25-16 16-16s16 7.125 16 16S168.8 136 160 136zM160 72c-8.75 0-16-7-16-16c0-8.75 7.25-16 16-16s16 7.125 16 16S168.8 72 160 72zM224 128C215.3 128 208 120.9 208 112S215.3 96 224 96s16 7 16 16C240 120.8 232.8 128 224 128zM224 64.25c-8.75 0-16-7-16-16c0-8.75 7.25-16 16-16s16 7.125 16 16S232.8 64.25 224 64.25z\"],\n    \"flask\": [448, 512, [], \"f0c3\", \"M437.2 403.5L319.1 215L319.1 64h7.1c13.25 0 23.1-10.75 23.1-24l-.0002-16c0-13.25-10.75-24-23.1-24H120C106.8 0 96.01 10.75 96.01 24l-.0002 16c0 13.25 10.75 24 23.1 24h7.1L128 215l-117.2 188.5C-18.48 450.6 15.27 512 70.89 512h306.2C432.7 512 466.5 450.5 437.2 403.5zM137.1 320l48.15-77.63C189.8 237.3 191.9 230.8 191.9 224l.0651-160h63.99l-.06 160c0 6.875 2.25 13.25 5.875 18.38L309.9 320H137.1z\"],\n    \"floppy-disk\": [448, 512, [128426, 128190, \"save\"], \"f0c7\", \"M433.1 129.1l-83.9-83.9C342.3 38.32 327.1 32 316.1 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V163.9C448 152.9 441.7 137.7 433.1 129.1zM224 416c-35.34 0-64-28.66-64-64s28.66-64 64-64s64 28.66 64 64S259.3 416 224 416zM320 208C320 216.8 312.8 224 304 224h-224C71.16 224 64 216.8 64 208v-96C64 103.2 71.16 96 80 96h224C312.8 96 320 103.2 320 112V208z\"],\n    \"florin-sign\": [384, 512, [], \"e184\", \"M352 32C369.7 32 384 46.33 384 64C384 81.67 369.7 96 352 96H314.7C301.7 96 290.1 103.8 285.1 115.7L240 224H320C337.7 224 352 238.3 352 256C352 273.7 337.7 288 320 288H213.3L157.9 420.9C143 456.7 108.1 480 69.33 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H69.33C82.25 416 93.9 408.2 98.87 396.3L144 288H64C46.33 288 32 273.7 32 256C32 238.3 46.33 224 64 224H170.7L226.1 91.08C240.1 55.3 275.9 32 314.7 32H352z\"],\n    \"folder\": [512, 512, [128447, 61716, 128193], \"f07b\", \"M464 96h-192l-64-64h-160C21.5 32 0 53.5 0 80V160h512V144C512 117.5 490.5 96 464 96zM0 432C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48V192H0V432z\"],\n    \"folder-minus\": [512, 512, [], \"f65d\", \"M464 96h-192l-64-64h-160C21.5 32 0 53.5 0 80v352C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-288C512 117.5 490.5 96 464 96zM336 311.1H175.1C162.7 311.1 152 301.3 152 288c0-13.26 10.74-23.1 23.1-23.1h160C349.3 264 360 274.7 360 288S349.3 311.1 336 311.1z\"],\n    \"folder-open\": [576, 512, [128449, 61717, 128194], \"f07c\", \"M147.8 192H480V144C480 117.5 458.5 96 432 96h-160l-64-64h-160C21.49 32 0 53.49 0 80v328.4l90.54-181.1C101.4 205.6 123.4 192 147.8 192zM543.1 224H147.8C135.7 224 124.6 230.8 119.2 241.7L0 480h447.1c12.12 0 23.2-6.852 28.62-17.69l96-192C583.2 249 567.7 224 543.1 224z\"],\n    \"folder-plus\": [512, 512, [], \"f65e\", \"M464 96h-192l-64-64h-160C21.5 32 0 53.5 0 80v352C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-288C512 117.5 490.5 96 464 96zM336 311.1h-56v56C279.1 381.3 269.3 392 256 392c-13.27 0-23.1-10.74-23.1-23.1V311.1H175.1C162.7 311.1 152 301.3 152 288c0-13.26 10.74-23.1 23.1-23.1h56V207.1C232 194.7 242.7 184 256 184s23.1 10.74 23.1 23.1V264h56C349.3 264 360 274.7 360 288S349.3 311.1 336 311.1z\"],\n    \"folder-tree\": [576, 512, [], \"f802\", \"M544 32h-112l-32-32H320c-17.62 0-32 14.38-32 32v160c0 17.62 14.38 32 32 32h224c17.62 0 32-14.38 32-32V64C576 46.38 561.6 32 544 32zM544 320h-112l-32-32H320c-17.62 0-32 14.38-32 32v160c0 17.62 14.38 32 32 32h224c17.62 0 32-14.38 32-32v-128C576 334.4 561.6 320 544 320zM64 16C64 7.125 56.88 0 48 0h-32C7.125 0 0 7.125 0 16V416c0 17.62 14.38 32 32 32h224v-64H64V160h192V96H64V16z\"],\n    \"font\": [448, 512, [], \"f031\", \"M416 416h-25.81L253.1 52.76c-4.688-12.47-16.57-20.76-29.91-20.76s-25.34 8.289-30.02 20.76L57.81 416H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h96c17.67 0 32-14.31 32-32s-14.33-32-32-32H126.2l17.1-48h159.6l17.1 48H320c-17.67 0-32 14.31-32 32s14.33 32 32 32h96c17.67 0 32-14.31 32-32S433.7 416 416 416zM168.2 304L224 155.1l55.82 148.9H168.2z\"],\n    \"font-awesome\": [448, 512, [62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M448 48V384c-63.09 22.54-82.34 32-119.5 32c-62.82 0-86.6-32-149.3-32C158.6 384 142.6 387.6 128 392.2v-64C142.6 323.6 158.6 320 179.2 320c62.73 0 86.51 32 149.3 32C348.9 352 364.1 349 384 342.7v-208C364.1 141 348.9 144 328.5 144c-62.82 0-86.6-32-149.3-32C128.4 112 104.3 132.6 64 140.7v307.3C64 465.7 49.67 480 32 480S0 465.7 0 448V63.1C0 46.33 14.33 32 31.1 32S64 46.33 64 63.1V76.66C104.3 68.63 128.4 48 179.2 48c62.73 0 86.51 32 149.3 32C365.7 80 384.9 70.54 448 48z\"],\n    \"football\": [512, 512, [127944, \"football-ball\"], \"f44e\", \"M16.17 337.5c0 44.98 7.565 83.54 13.98 107.9C35.22 464.3 50.46 496 174.9 496c9.566 0 19.59-.4707 29.84-1.271L17.33 307.3C16.53 317.6 16.17 327.7 16.17 337.5zM495.8 174.5c0-44.98-7.565-83.53-13.98-107.9c-4.688-17.54-18.34-31.23-36.04-35.95C435.5 27.91 392.9 16 337 16c-9.564 0-19.59 .4707-29.84 1.271l187.5 187.5C495.5 194.4 495.8 184.3 495.8 174.5zM26.77 248.8l236.3 236.3c142-36.1 203.9-150.4 222.2-221.1L248.9 26.87C106.9 62.96 45.07 177.2 26.77 248.8zM256 335.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L164.7 283.3C161.6 280.2 160 276.1 160 271.1c0-8.529 6.865-16 16-16c4.095 0 8.189 1.562 11.31 4.688l64.01 64C254.4 327.8 256 331.9 256 335.1zM304 287.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L212.7 235.3C209.6 232.2 208 228.1 208 223.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01C302.5 279.8 304 283.9 304 287.1zM256 175.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01c3.125 3.125 4.688 7.219 4.688 11.31c0 9.133-7.468 16-16 16c-4.094 0-8.189-1.562-11.31-4.688l-64.01-64.01C257.6 184.2 256 180.1 256 175.1z\"],\n    \"forward\": [512, 512, [9193], \"f04e\", \"M52.51 440.6l171.5-142.9V214.3L52.51 71.41C31.88 54.28 0 68.66 0 96.03v319.9C0 443.3 31.88 457.7 52.51 440.6zM308.5 440.6l192-159.1c15.25-12.87 15.25-36.37 0-49.24l-192-159.1c-20.63-17.12-52.51-2.749-52.51 24.62v319.9C256 443.3 287.9 457.7 308.5 440.6z\"],\n    \"forward-fast\": [512, 512, [9197, \"fast-forward\"], \"f050\", \"M512 96.03v319.9c0 17.67-14.33 31.1-31.1 31.1C462.3 447.1 448 433.6 448 415.1V284.1l-171.5 156.5C255.9 457.7 224 443.3 224 415.1V284.1l-171.5 156.5C31.88 457.7 0 443.3 0 415.1V96.03c0-27.37 31.88-41.74 52.5-24.62L224 226.8V96.03c0-27.37 31.88-41.74 52.5-24.62L448 226.8V96.03c0-17.67 14.33-31.1 31.1-31.1C497.7 64.03 512 78.36 512 96.03z\"],\n    \"forward-step\": [320, 512, [\"step-forward\"], \"f051\", \"M287.1 447.1c17.67 0 31.1-14.33 31.1-32V96.03c0-17.67-14.33-32-32-32c-17.67 0-31.1 14.33-31.1 31.1v319.9C255.1 433.6 270.3 447.1 287.1 447.1zM52.51 440.6l192-159.1c7.625-6.436 11.43-15.53 11.43-24.62c0-9.094-3.809-18.18-11.43-24.62l-192-159.1C31.88 54.28 0 68.66 0 96.03v319.9C0 443.3 31.88 457.7 52.51 440.6z\"],\n    \"franc-sign\": [320, 512, [], \"e18f\", \"M288 32C305.7 32 320 46.33 320 64C320 81.67 305.7 96 288 96H112V192H256C273.7 192 288 206.3 288 224C288 241.7 273.7 256 256 256H112V320H192C209.7 320 224 334.3 224 352C224 369.7 209.7 384 192 384H112V448C112 465.7 97.67 480 80 480C62.33 480 48 465.7 48 448V384H32C14.33 384 0 369.7 0 352C0 334.3 14.33 320 32 320H48V64C48 46.33 62.33 32 80 32H288z\"],\n    \"frog\": [576, 512, [], \"f52e\", \"M528 416h-32.07l-90.32-96.34l140.6-79.03c18.38-10.25 29.75-29.62 29.75-50.62c0-21.5-11.75-41-30.5-51.25c-40.5-22.25-99.07-41.43-99.07-41.43C439.6 60.19 407.3 32 368 32s-71.77 28.25-78.52 65.5C126.7 113-.4999 250.1 .0001 417C.1251 451.9 29.13 480 64 480h304c8.875 0 16-7.125 16-16c0-26.51-21.49-48-47.1-48H284.3l23.93-32.38c24.25-36.13 10.38-88.25-33.63-106.5C250.8 267.1 223 272.4 202.4 288L169.6 312.5c-7.125 5.375-17.12 4-22.38-3.125c-5.375-7.125-4-17.12 3.125-22.38l34.75-26.12c36.87-27.62 88.37-27.62 125.1 0c10.88 8.125 45.88 39 40.88 93.13L469.6 480h90.38c8.875 0 16-7.125 16-16C576 437.5 554.5 416 528 416zM344 112c0-13.25 10.75-24 24-24s24 10.75 24 24s-10.75 24-24 24S344 125.3 344 112z\"],\n    \"futbol\": [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M177.1 228.6L207.9 320h96.5l29.62-91.38L256 172.1L177.1 228.6zM255.1 0C114.6 0 .0001 114.6 .0001 256S114.6 512 256 512s255.1-114.6 255.1-255.1S397.4 0 255.1 0zM416.6 360.9l-85.4-1.297l-25.15 81.59C290.1 445.5 273.4 448 256 448s-34.09-2.523-50.09-6.859L180.8 359.6l-85.4 1.297c-18.12-27.66-29.15-60.27-30.88-95.31L134.3 216.4L106.6 135.6c21.16-26.21 49.09-46.61 81.06-58.84L256 128l68.29-51.22c31.98 12.23 59.9 32.64 81.06 58.84L377.7 216.4l69.78 49.1C445.8 300.6 434.8 333.2 416.6 360.9z\"],\n    \"g\": [448, 512, [103], \"47\", \"M448 256c0 143.4-118.6 222.3-225 222.3c-132.3 0-222.1-106.2-222.1-222.4c0-124.4 100.9-223.9 223.1-223.9c84.84 0 167.8 55.28 167.8 88.2c0 18.28-14.95 32-32 32c-31.04 0-46.79-56.16-135.8-56.16c-87.66 0-159.1 70.66-159.1 159.8c0 34.81 27.19 158.8 159.1 158.8c79.45 0 144.6-55.1 158.1-126.7h-134.1c-17.67 0-32-14.33-32-32s14.33-31.1 32-31.1H416C433.7 224 448 238.3 448 256z\"],\n    \"gamepad\": [640, 512, [], \"f11b\", \"M448 64H192C85.96 64 0 149.1 0 256s85.96 192 192 192h256c106 0 192-85.96 192-192S554 64 448 64zM247.1 280h-32v32c0 13.2-10.78 24-23.98 24c-13.2 0-24.02-10.8-24.02-24v-32L136 279.1C122.8 279.1 111.1 269.2 111.1 256c0-13.2 10.85-24.01 24.05-24.01L167.1 232v-32c0-13.2 10.82-24 24.02-24c13.2 0 23.98 10.8 23.98 24v32h32c13.2 0 24.02 10.8 24.02 24C271.1 269.2 261.2 280 247.1 280zM431.1 344c-22.12 0-39.1-17.87-39.1-39.1s17.87-40 39.1-40s39.1 17.88 39.1 40S454.1 344 431.1 344zM495.1 248c-22.12 0-39.1-17.87-39.1-39.1s17.87-40 39.1-40c22.12 0 39.1 17.88 39.1 40S518.1 248 495.1 248z\"],\n    \"gas-pump\": [512, 512, [9981], \"f52f\", \"M32 64C32 28.65 60.65 0 96 0H256C291.3 0 320 28.65 320 64V256H328C376.6 256 416 295.4 416 344V376C416 389.3 426.7 400 440 400C453.3 400 464 389.3 464 376V221.1C436.4 214.9 416 189.8 416 160V96L384 64C375.2 55.16 375.2 40.84 384 32C392.8 23.16 407.2 23.16 416 32L493.3 109.3C505.3 121.3 512 137.5 512 154.5V376C512 415.8 479.8 448 440 448C400.2 448 368 415.8 368 376V344C368 321.9 350.1 303.1 328 303.1H320V448C337.7 448 352 462.3 352 480C352 497.7 337.7 512 320 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V64zM96 176C96 184.8 103.2 192 112 192H240C248.8 192 256 184.8 256 176V80C256 71.16 248.8 64 240 64H112C103.2 64 96 71.16 96 80V176z\"],\n    \"gauge\": [512, 512, [\"dashboard\", \"gauge-med\", \"tachometer-alt-average\"], \"f624\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM280 292.7V88C280 74.75 269.3 64 256 64C242.7 64 232 74.75 232 88V292.7C208.5 302.1 192 325.1 192 352C192 387.3 220.7 416 256 416C291.3 416 320 387.3 320 352C320 325.1 303.5 302.1 280 292.7zM144 176C161.7 176 176 161.7 176 144C176 126.3 161.7 112 144 112C126.3 112 112 126.3 112 144C112 161.7 126.3 176 144 176zM96 224C78.33 224 64 238.3 64 256C64 273.7 78.33 288 96 288C113.7 288 128 273.7 128 256C128 238.3 113.7 224 96 224zM416 288C433.7 288 448 273.7 448 256C448 238.3 433.7 224 416 224C398.3 224 384 238.3 384 256C384 273.7 398.3 288 416 288zM368 112C350.3 112 336 126.3 336 144C336 161.7 350.3 176 368 176C385.7 176 400 161.7 400 144C400 126.3 385.7 112 368 112z\"],\n    \"gauge-high\": [512, 512, [62461, \"tachometer-alt\", \"tachometer-alt-fast\"], \"f625\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 64C238.3 64 224 78.33 224 96C224 113.7 238.3 128 256 128C273.7 128 288 113.7 288 96C288 78.33 273.7 64 256 64zM256 416C291.3 416 320 387.3 320 352C320 334.6 313.1 318.9 301.9 307.4L365.1 161.7C371.3 149.5 365.8 135.4 353.7 130C341.5 124.7 327.4 130.2 322 142.3L257.9 288C257.3 288 256.6 287.1 256 287.1C220.7 287.1 192 316.7 192 352C192 387.3 220.7 416 256 416V416zM144 112C126.3 112 112 126.3 112 144C112 161.7 126.3 176 144 176C161.7 176 176 161.7 176 144C176 126.3 161.7 112 144 112zM96 288C113.7 288 128 273.7 128 256C128 238.3 113.7 224 96 224C78.33 224 64 238.3 64 256C64 273.7 78.33 288 96 288zM416 224C398.3 224 384 238.3 384 256C384 273.7 398.3 288 416 288C433.7 288 448 273.7 448 256C448 238.3 433.7 224 416 224z\"],\n    \"gauge-simple\": [512, 512, [\"gauge-simple-med\", \"tachometer-average\"], \"f629\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM280 292.7V88C280 74.75 269.3 64 256 64C242.7 64 232 74.75 232 88V292.7C208.5 302.1 192 325.1 192 352C192 387.3 220.7 416 256 416C291.3 416 320 387.3 320 352C320 325.1 303.5 302.1 280 292.7z\"],\n    \"gauge-simple-high\": [512, 512, [61668, \"tachometer\", \"tachometer-fast\"], \"f62a\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM304.7 310.4L381.3 163.1C387.4 151.3 382.8 136.8 371.1 130.7C359.3 124.6 344.8 129.2 338.7 140.9L262.1 288.3C260.1 288.1 258.1 287.1 255.1 287.1C220.7 287.1 191.1 316.7 191.1 352C191.1 387.3 220.7 416 255.1 416C291.3 416 320 387.3 320 352C320 336.1 314.2 321.6 304.7 310.4L304.7 310.4z\"],\n    \"gavel\": [512, 512, [\"legal\"], \"f0e3\", \"M512 216.3c0-6.125-2.344-12.25-7.031-16.93L482.3 176.8c-4.688-4.686-10.84-7.028-16.1-7.028s-12.31 2.343-16.1 7.028l-5.625 5.625L329.6 69.28l5.625-5.625c4.687-4.688 7.03-10.84 7.03-16.1s-2.343-12.31-7.03-16.1l-22.62-22.62C307.9 2.344 301.8 0 295.7 0s-12.15 2.344-16.84 7.031L154.2 131.5C149.6 136.2 147.2 142.3 147.2 148.5s2.344 12.25 7.031 16.94l22.62 22.62c4.688 4.688 10.84 7.031 16.1 7.031c6.156 0 12.31-2.344 16.1-7.031l5.625-5.625l113.1 113.1l-5.625 5.621c-4.688 4.688-7.031 10.84-7.031 16.1s2.344 12.31 7.031 16.1l22.62 22.62c4.688 4.688 10.81 7.031 16.94 7.031s12.25-2.344 16.94-7.031l124.5-124.6C509.7 228.5 512 222.5 512 216.3zM227.8 238.1L169.4 297.4C163.1 291.1 154.9 288 146.7 288S130.4 291.1 124.1 297.4l-114.7 114.7c-6.25 6.248-9.375 14.43-9.375 22.62s3.125 16.37 9.375 22.62l45.25 45.25C60.87 508.9 69.06 512 77.25 512s16.37-3.125 22.62-9.375l114.7-114.7c6.25-6.25 9.376-14.44 9.376-22.62c0-8.185-3.125-16.37-9.374-22.62l58.43-58.43L227.8 238.1z\"],\n    \"gear\": [512, 512, [9881, \"cog\"], \"f013\", \"M495.9 166.6C499.2 175.2 496.4 184.9 489.6 191.2L446.3 230.6C447.4 238.9 448 247.4 448 256C448 264.6 447.4 273.1 446.3 281.4L489.6 320.8C496.4 327.1 499.2 336.8 495.9 345.4C491.5 357.3 486.2 368.8 480.2 379.7L475.5 387.8C468.9 398.8 461.5 409.2 453.4 419.1C447.4 426.2 437.7 428.7 428.9 425.9L373.2 408.1C359.8 418.4 344.1 427 329.2 433.6L316.7 490.7C314.7 499.7 307.7 506.1 298.5 508.5C284.7 510.8 270.5 512 255.1 512C241.5 512 227.3 510.8 213.5 508.5C204.3 506.1 197.3 499.7 195.3 490.7L182.8 433.6C167 427 152.2 418.4 138.8 408.1L83.14 425.9C74.3 428.7 64.55 426.2 58.63 419.1C50.52 409.2 43.12 398.8 36.52 387.8L31.84 379.7C25.77 368.8 20.49 357.3 16.06 345.4C12.82 336.8 15.55 327.1 22.41 320.8L65.67 281.4C64.57 273.1 64 264.6 64 256C64 247.4 64.57 238.9 65.67 230.6L22.41 191.2C15.55 184.9 12.82 175.3 16.06 166.6C20.49 154.7 25.78 143.2 31.84 132.3L36.51 124.2C43.12 113.2 50.52 102.8 58.63 92.95C64.55 85.8 74.3 83.32 83.14 86.14L138.8 103.9C152.2 93.56 167 84.96 182.8 78.43L195.3 21.33C197.3 12.25 204.3 5.04 213.5 3.51C227.3 1.201 241.5 0 256 0C270.5 0 284.7 1.201 298.5 3.51C307.7 5.04 314.7 12.25 316.7 21.33L329.2 78.43C344.1 84.96 359.8 93.56 373.2 103.9L428.9 86.14C437.7 83.32 447.4 85.8 453.4 92.95C461.5 102.8 468.9 113.2 475.5 124.2L480.2 132.3C486.2 143.2 491.5 154.7 495.9 166.6V166.6zM256 336C300.2 336 336 300.2 336 255.1C336 211.8 300.2 175.1 256 175.1C211.8 175.1 176 211.8 176 255.1C176 300.2 211.8 336 256 336z\"],\n    \"gears\": [640, 512, [\"cogs\"], \"f085\", \"M286.3 155.1C287.4 161.9 288 168.9 288 175.1C288 183.1 287.4 190.1 286.3 196.9L308.5 216.7C315.5 223 318.4 232.1 314.7 241.7C312.4 246.1 309.9 252.2 307.1 257.2L304 262.6C300.1 267.6 297.7 272.4 294.2 277.1C288.5 284.7 278.5 287.2 269.5 284.2L241.2 274.9C230.5 283.8 218.3 290.9 205 295.9L198.1 324.9C197 334.2 189.8 341.6 180.4 342.8C173.7 343.6 166.9 344 160 344C153.1 344 146.3 343.6 139.6 342.8C130.2 341.6 122.1 334.2 121 324.9L114.1 295.9C101.7 290.9 89.5 283.8 78.75 274.9L50.53 284.2C41.54 287.2 31.52 284.7 25.82 277.1C22.28 272.4 18.98 267.5 15.94 262.5L12.92 257.2C10.13 252.2 7.592 247 5.324 241.7C1.62 232.1 4.458 223 11.52 216.7L33.7 196.9C32.58 190.1 31.1 183.1 31.1 175.1C31.1 168.9 32.58 161.9 33.7 155.1L11.52 135.3C4.458 128.1 1.62 119 5.324 110.3C7.592 104.1 10.13 99.79 12.91 94.76L15.95 89.51C18.98 84.46 22.28 79.58 25.82 74.89C31.52 67.34 41.54 64.83 50.53 67.79L78.75 77.09C89.5 68.25 101.7 61.13 114.1 56.15L121 27.08C122.1 17.8 130.2 10.37 139.6 9.231C146.3 8.418 153.1 8 160 8C166.9 8 173.7 8.418 180.4 9.23C189.8 10.37 197 17.8 198.1 27.08L205 56.15C218.3 61.13 230.5 68.25 241.2 77.09L269.5 67.79C278.5 64.83 288.5 67.34 294.2 74.89C297.7 79.56 300.1 84.42 304 89.44L307.1 94.83C309.9 99.84 312.4 105 314.7 110.3C318.4 119 315.5 128.1 308.5 135.3L286.3 155.1zM160 127.1C133.5 127.1 112 149.5 112 175.1C112 202.5 133.5 223.1 160 223.1C186.5 223.1 208 202.5 208 175.1C208 149.5 186.5 127.1 160 127.1zM484.9 478.3C478.1 479.4 471.1 480 464 480C456.9 480 449.9 479.4 443.1 478.3L423.3 500.5C416.1 507.5 407 510.4 398.3 506.7C393 504.4 387.8 501.9 382.8 499.1L377.4 496C372.4 492.1 367.6 489.7 362.9 486.2C355.3 480.5 352.8 470.5 355.8 461.5L365.1 433.2C356.2 422.5 349.1 410.3 344.1 397L315.1 390.1C305.8 389 298.4 381.8 297.2 372.4C296.4 365.7 296 358.9 296 352C296 345.1 296.4 338.3 297.2 331.6C298.4 322.2 305.8 314.1 315.1 313L344.1 306.1C349.1 293.7 356.2 281.5 365.1 270.8L355.8 242.5C352.8 233.5 355.3 223.5 362.9 217.8C367.6 214.3 372.5 210.1 377.5 207.9L382.8 204.9C387.8 202.1 392.1 199.6 398.3 197.3C407 193.6 416.1 196.5 423.3 203.5L443.1 225.7C449.9 224.6 456.9 224 464 224C471.1 224 478.1 224.6 484.9 225.7L504.7 203.5C511 196.5 520.1 193.6 529.7 197.3C535 199.6 540.2 202.1 545.2 204.9L550.5 207.9C555.5 210.1 560.4 214.3 565.1 217.8C572.7 223.5 575.2 233.5 572.2 242.5L562.9 270.8C571.8 281.5 578.9 293.7 583.9 306.1L612.9 313C622.2 314.1 629.6 322.2 630.8 331.6C631.6 338.3 632 345.1 632 352C632 358.9 631.6 365.7 630.8 372.4C629.6 381.8 622.2 389 612.9 390.1L583.9 397C578.9 410.3 571.8 422.5 562.9 433.2L572.2 461.5C575.2 470.5 572.7 480.5 565.1 486.2C560.4 489.7 555.6 492.1 550.6 496L545.2 499.1C540.2 501.9 534.1 504.4 529.7 506.7C520.1 510.4 511 507.5 504.7 500.5L484.9 478.3zM512 352C512 325.5 490.5 304 464 304C437.5 304 416 325.5 416 352C416 378.5 437.5 400 464 400C490.5 400 512 378.5 512 352z\"],\n    \"gem\": [512, 512, [128142], \"f3a5\", \"M378.7 32H133.3L256 182.7L378.7 32zM512 192l-107.4-141.3L289.6 192H512zM107.4 50.67L0 192h222.4L107.4 50.67zM244.3 474.9C247.3 478.2 251.6 480 256 480s8.653-1.828 11.67-5.062L510.6 224H1.365L244.3 474.9z\"],\n    \"genderless\": [384, 512, [], \"f22d\", \"M192 80C94.83 80 16 158.8 16 256c0 97.17 78.83 176 176 176s176-78.83 176-176C368 158.8 289.2 80 192 80zM192 352c-52.95 0-96-43.05-96-96c0-52.95 43.05-96 96-96s96 43.05 96 96C288 308.9 244.1 352 192 352z\"],\n    \"ghost\": [384, 512, [128123], \"f6e2\", \"M186.1 .1032c-105.1 3.126-186.1 94.75-186.1 199.9v264c0 14.25 17.3 21.38 27.3 11.25l24.95-18.5c6.625-5.001 16-4.001 21.5 2.25l43 48.31c6.25 6.251 16.37 6.251 22.62 0l40.62-45.81c6.375-7.251 17.62-7.251 24 0l40.63 45.81c6.25 6.251 16.38 6.251 22.62 0l43-48.31c5.5-6.251 14.88-7.251 21.5-2.25l24.95 18.5c10 10.13 27.3 3.002 27.3-11.25V192C384 83.98 294.9-3.147 186.1 .1032zM128 224c-17.62 0-31.1-14.38-31.1-32.01s14.38-32.01 31.1-32.01s32 14.38 32 32.01S145.6 224 128 224zM256 224c-17.62 0-32-14.38-32-32.01s14.38-32.01 32-32.01c17.62 0 32 14.38 32 32.01S273.6 224 256 224z\"],\n    \"gift\": [512, 512, [127873], \"f06b\", \"M152 0H154.2C186.1 0 215.7 16.91 231.9 44.45L256 85.46L280.1 44.45C296.3 16.91 325.9 0 357.8 0H360C408.6 0 448 39.4 448 88C448 102.4 444.5 115.1 438.4 128H480C497.7 128 512 142.3 512 160V224C512 241.7 497.7 256 480 256H32C14.33 256 0 241.7 0 224V160C0 142.3 14.33 128 32 128H73.6C67.46 115.1 64 102.4 64 88C64 39.4 103.4 0 152 0zM190.5 68.78C182.9 55.91 169.1 48 154.2 48H152C129.9 48 112 65.91 112 88C112 110.1 129.9 128 152 128H225.3L190.5 68.78zM360 48H357.8C342.9 48 329.1 55.91 321.5 68.78L286.7 128H360C382.1 128 400 110.1 400 88C400 65.91 382.1 48 360 48V48zM32 288H224V512H80C53.49 512 32 490.5 32 464V288zM288 512V288H480V464C480 490.5 458.5 512 432 512H288z\"],\n    \"gifts\": [640, 512, [], \"f79c\", \"M192.5 55.09L217.9 36.59C228.6 28.79 243.6 31.16 251.4 41.88C259.2 52.6 256.8 67.61 246.1 75.41L217.8 95.1H240C256.9 95.1 271.7 104.7 280.3 117.9C257.3 135.7 241.9 162.1 240.2 193.1C212.5 201 192 226.1 192 256V480C192 491.7 195.1 502.6 200.6 512H48C21.49 512 0 490.5 0 464V144C0 117.5 21.49 96 48 96H70.2L41.88 75.41C31.16 67.61 28.79 52.6 36.59 41.88C44.39 31.16 59.4 28.79 70.12 36.59L97.55 56.54L89.23 31.59C85.04 19.01 91.84 5.423 104.4 1.232C116.1-2.96 130.6 3.836 134.8 16.41L144.7 46.17L155.4 15.99C159.8 3.493 173.5-3.048 186 1.377C198.5 5.802 205 19.52 200.6 32.01L192.5 55.09zM344.2 127.1C366.6 127.1 387.8 138.4 401.5 156.2L432 195.8L462.5 156.2C476.2 138.4 497.4 127.1 519.8 127.1C559.5 127.1 592 160.1 592 199.1C592 208.4 590.6 216.5 587.9 223.1H592C618.5 223.1 640 245.5 640 271.1V352H448V255.1H416V352H224V271.1C224 245.5 245.5 223.1 272 223.1H276.1C273.4 216.5 272 208.4 272 199.1C272 160.1 304.5 127.1 344.2 127.1H344.2zM363.5 185.5C358.9 179.5 351.7 175.1 344.2 175.1C330.8 175.1 320 186.9 320 199.1C320 213.3 330.7 223.1 344 223.1H393.1L363.5 185.5zM519.8 175.1C512.3 175.1 505.1 179.5 500.5 185.5L470.9 223.1H520C533.3 223.1 544 213.3 544 199.1C544 186.9 533.2 175.1 519.8 175.1H519.8zM224 464V384H416V512H272C245.5 512 224 490.5 224 464zM448 512V384H640V464C640 490.5 618.5 512 592 512H448z\"],\n    \"glasses\": [576, 512, [], \"f530\", \"M574.1 280.4l-45.38-181.8c-5.875-23.63-21.62-44-43-55.75c-21.5-11.75-46.1-14.13-70.25-6.375l-15.25 5.125c-8.375 2.75-12.87 11.88-10 20.25l5 15.13c2.75 8.375 11.88 12.88 20.25 10.13l13.12-4.375c10.88-3.625 23-3.625 33.25 1.75c10.25 5.375 17.5 14.5 20.38 25.75l38.38 153.9c-22.12-6.875-49.75-12.5-81.13-12.5c-34.88 0-73.1 7-114.9 26.75H251.4C210.5 258.6 171.4 251.6 136.5 251.6c-31.38 0-59 5.625-81.12 12.5l38.38-153.9c2.875-11.25 10.12-20.38 20.5-25.75C124.4 79.12 136.5 79.12 147.4 82.74l13.12 4.375c8.375 2.75 17.5-1.75 20.25-10.13l5-15.13C188.6 53.49 184.1 44.37 175.6 41.62l-15.25-5.125c-23.13-7.75-48.75-5.375-70.13 6.375c-21.37 11.75-37.12 32.13-43 55.75L1.875 280.4C.6251 285.4 .0001 290.6 .0001 295.9v70.25C.0001 428.1 51.63 480 115.3 480h37.13c60.25 0 110.4-46 114.9-105.4l2.875-38.63h35.75l2.875 38.63C313.3 433.1 363.4 480 423.6 480h37.13c63.62 0 115.2-51 115.2-113.9V295.9C576 290.6 575.4 285.5 574.1 280.4zM203.4 369.7c-2 26-24.38 46.25-51 46.25H115.2C87 415.1 64 393.6 64 366.1v-37.5c18.12-6.5 43.38-13 72.62-13c23.88 0 47.25 4.375 69.88 13L203.4 369.7zM512 366.1c0 27.5-23 49.88-51.25 49.88h-37.13c-26.62 0-49-20.25-51-46.25l-3.125-41.13c22.62-8.625 46.13-13 70-13c29 0 54.38 6.5 72.5 13V366.1z\"],\n    \"globe\": [512, 512, [127760], \"f0ac\", \"M352 256C352 278.2 350.8 299.6 348.7 320H163.3C161.2 299.6 159.1 278.2 159.1 256C159.1 233.8 161.2 212.4 163.3 192H348.7C350.8 212.4 352 233.8 352 256zM503.9 192C509.2 212.5 512 233.9 512 256C512 278.1 509.2 299.5 503.9 320H380.8C382.9 299.4 384 277.1 384 256C384 234 382.9 212.6 380.8 192H503.9zM493.4 160H376.7C366.7 96.14 346.9 42.62 321.4 8.442C399.8 29.09 463.4 85.94 493.4 160zM344.3 160H167.7C173.8 123.6 183.2 91.38 194.7 65.35C205.2 41.74 216.9 24.61 228.2 13.81C239.4 3.178 248.7 0 256 0C263.3 0 272.6 3.178 283.8 13.81C295.1 24.61 306.8 41.74 317.3 65.35C328.8 91.38 338.2 123.6 344.3 160H344.3zM18.61 160C48.59 85.94 112.2 29.09 190.6 8.442C165.1 42.62 145.3 96.14 135.3 160H18.61zM131.2 192C129.1 212.6 127.1 234 127.1 256C127.1 277.1 129.1 299.4 131.2 320H8.065C2.8 299.5 0 278.1 0 256C0 233.9 2.8 212.5 8.065 192H131.2zM194.7 446.6C183.2 420.6 173.8 388.4 167.7 352H344.3C338.2 388.4 328.8 420.6 317.3 446.6C306.8 470.3 295.1 487.4 283.8 498.2C272.6 508.8 263.3 512 255.1 512C248.7 512 239.4 508.8 228.2 498.2C216.9 487.4 205.2 470.3 194.7 446.6H194.7zM190.6 503.6C112.2 482.9 48.59 426.1 18.61 352H135.3C145.3 415.9 165.1 469.4 190.6 503.6V503.6zM321.4 503.6C346.9 469.4 366.7 415.9 376.7 352H493.4C463.4 426.1 399.8 482.9 321.4 503.6V503.6z\"],\n    \"golf-ball-tee\": [384, 512, [\"golf-ball\"], \"f450\", \"M96 399.1c0 17.67 14.33 31.1 32 31.1s32 14.33 32 31.1v48h64v-48c0-17.67 14.33-31.1 32-31.1s32-14.33 32-31.1v-16H96V399.1zM192 .0001c-106 0-192 86.68-192 193.6c0 65.78 32.82 123.5 82.52 158.4h218.1C351.2 317.1 384 259.4 384 193.6C384 86.68 298 .0001 192 .0001zM179 205.1C183 206.9 187.4 208 192 208c17.53 0 31.74-14.33 31.74-31.1c0-4.688-1.111-9.062-2.904-13.07c11.03 5.016 18.77 16.08 18.77 29.07c0 17.67-14.21 31.1-31.74 31.1C194.1 224 184 216.2 179 205.1zM223.7 303.1c-12.88 0-23.86-7.812-28.83-18.93c3.977 1.809 8.316 2.93 12.96 2.93c17.53 0 31.74-14.33 31.74-31.1c0-4.688-1.109-9.062-2.904-13.07c11.03 5.016 18.77 16.08 18.77 29.07C255.5 289.7 241.3 303.1 223.7 303.1zM287.2 240c-12.88 0-23.86-7.812-28.83-18.93c3.977 1.809 8.316 2.93 12.96 2.93c17.53 0 31.73-14.33 31.73-31.1c0-4.688-1.109-9.062-2.902-13.07C311.2 183.9 318.9 195 318.9 208C318.9 225.7 304.7 240 287.2 240z\"],\n    \"gopuram\": [512, 512, [], \"f664\", \"M120 0C133.3 0 144 10.75 144 24V32H184V24C184 10.75 194.7 0 208 0C221.3 0 232 10.75 232 24V32H280V24C280 10.75 290.7 0 304 0C317.3 0 328 10.75 328 24V32H368V24C368 10.75 378.7 0 392 0C405.3 0 416 10.75 416 24V128C433.7 128 448 142.3 448 160V224C465.7 224 480 238.3 480 256V352C497.7 352 512 366.3 512 384V480C512 497.7 497.7 512 480 512H416V352H384V224H352V128H320V224H352V352H384V512H304V464C304 437.5 282.5 416 256 416C229.5 416 208 437.5 208 464V512H128V352H160V224H192V128H160V224H128V352H96V512H32C14.33 512 0 497.7 0 480V384C0 366.3 14.33 352 32 352V256C32 238.3 46.33 224 64 224V160C64 142.3 78.33 128 96 128V24C96 10.75 106.7 0 120 0zM256 272C238.3 272 224 286.3 224 304V352H288V304C288 286.3 273.7 272 256 272zM224 224H288V192C288 174.3 273.7 160 256 160C238.3 160 224 174.3 224 192V224z\"],\n    \"graduation-cap\": [640, 512, [127891, \"mortar-board\"], \"f19d\", \"M623.1 136.9l-282.7-101.2c-13.73-4.91-28.7-4.91-42.43 0L16.05 136.9C6.438 140.4 0 149.6 0 160s6.438 19.65 16.05 23.09L76.07 204.6c-11.89 15.8-20.26 34.16-24.55 53.95C40.05 263.4 32 274.8 32 288c0 9.953 4.814 18.49 11.94 24.36l-24.83 149C17.48 471.1 25 480 34.89 480H93.11c9.887 0 17.41-8.879 15.78-18.63l-24.83-149C91.19 306.5 96 297.1 96 288c0-10.29-5.174-19.03-12.72-24.89c4.252-17.76 12.88-33.82 24.94-47.03l190.6 68.23c13.73 4.91 28.7 4.91 42.43 0l282.7-101.2C633.6 179.6 640 170.4 640 160S633.6 140.4 623.1 136.9zM351.1 314.4C341.7 318.1 330.9 320 320 320c-10.92 0-21.69-1.867-32-5.555L142.8 262.5L128 405.3C128 446.6 213.1 480 320 480c105.1 0 192-33.4 192-74.67l-14.78-142.9L351.1 314.4z\"],\n    \"greater-than\": [384, 512, [62769], \"3e\", \"M32.03 448c-11.75 0-23.05-6.469-28.66-17.69c-7.906-15.81-1.5-35.03 14.31-42.94l262.8-131.4L17.69 124.6C1.875 116.7-4.531 97.51 3.375 81.7c7.891-15.81 27.06-22.19 42.94-14.31l320 160C377.2 232.8 384 243.9 384 256c0 12.12-6.844 23.19-17.69 28.63l-320 160C41.72 446.9 36.83 448 32.03 448z\"],\n    \"greater-than-equal\": [448, 512, [], \"f532\", \"M34.28 331.9c5.016 12.53 17.03 20.12 29.73 20.12c3.953 0 7.969-.7187 11.88-2.281l320-127.1C408 216.9 416 205.1 416 192s-7.969-24.85-20.11-29.72l-320-128c-16.47-6.594-35.05 1.406-41.61 17.84C27.72 68.55 35.7 87.17 52.11 93.73l245.7 98.28L52.11 290.3C35.7 296.9 27.72 315.5 34.28 331.9zM416 416H32c-17.67 0-32 14.31-32 31.99s14.33 32.01 32 32.01h384c17.67 0 32-14.32 32-32.01S433.7 416 416 416z\"],\n    \"grip\": [448, 512, [\"grip-horizontal\"], \"f58d\", \"M128 184C128 206.1 110.1 224 88 224H40C17.91 224 0 206.1 0 184V136C0 113.9 17.91 96 40 96H88C110.1 96 128 113.9 128 136V184zM128 376C128 398.1 110.1 416 88 416H40C17.91 416 0 398.1 0 376V328C0 305.9 17.91 288 40 288H88C110.1 288 128 305.9 128 328V376zM160 136C160 113.9 177.9 96 200 96H248C270.1 96 288 113.9 288 136V184C288 206.1 270.1 224 248 224H200C177.9 224 160 206.1 160 184V136zM288 376C288 398.1 270.1 416 248 416H200C177.9 416 160 398.1 160 376V328C160 305.9 177.9 288 200 288H248C270.1 288 288 305.9 288 328V376zM320 136C320 113.9 337.9 96 360 96H408C430.1 96 448 113.9 448 136V184C448 206.1 430.1 224 408 224H360C337.9 224 320 206.1 320 184V136zM448 376C448 398.1 430.1 416 408 416H360C337.9 416 320 398.1 320 376V328C320 305.9 337.9 288 360 288H408C430.1 288 448 305.9 448 328V376z\"],\n    \"grip-lines\": [448, 512, [], \"f7a4\", \"M416 288C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288H416zM416 160C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H32C14.33 224 0 209.7 0 192C0 174.3 14.33 160 32 160H416z\"],\n    \"grip-lines-vertical\": [192, 512, [], \"f7a5\", \"M64 448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448V64C0 46.33 14.33 32 32 32C49.67 32 64 46.33 64 64V448zM192 448C192 465.7 177.7 480 160 480C142.3 480 128 465.7 128 448V64C128 46.33 142.3 32 160 32C177.7 32 192 46.33 192 64V448z\"],\n    \"grip-vertical\": [320, 512, [], \"f58e\", \"M88 352C110.1 352 128 369.9 128 392V440C128 462.1 110.1 480 88 480H40C17.91 480 0 462.1 0 440V392C0 369.9 17.91 352 40 352H88zM280 352C302.1 352 320 369.9 320 392V440C320 462.1 302.1 480 280 480H232C209.9 480 192 462.1 192 440V392C192 369.9 209.9 352 232 352H280zM40 320C17.91 320 0 302.1 0 280V232C0 209.9 17.91 192 40 192H88C110.1 192 128 209.9 128 232V280C128 302.1 110.1 320 88 320H40zM280 192C302.1 192 320 209.9 320 232V280C320 302.1 302.1 320 280 320H232C209.9 320 192 302.1 192 280V232C192 209.9 209.9 192 232 192H280zM40 160C17.91 160 0 142.1 0 120V72C0 49.91 17.91 32 40 32H88C110.1 32 128 49.91 128 72V120C128 142.1 110.1 160 88 160H40zM280 32C302.1 32 320 49.91 320 72V120C320 142.1 302.1 160 280 160H232C209.9 160 192 142.1 192 120V72C192 49.91 209.9 32 232 32H280z\"],\n    \"guarani-sign\": [384, 512, [], \"e19a\", \"M224 32V66.66C263.5 73.3 299 92.03 326.4 118.9C339 131.3 339.2 151.5 326.9 164.1C314.5 176.8 294.2 176.1 281.6 164.6C265.8 149.1 246.1 137.7 224 132V224H352C369.7 224 384 238.3 384 256C384 351.1 314.8 430.1 224 445.3V480C224 497.7 209.7 512 192 512C174.3 512 160 497.7 160 480V445.3C69.19 430.1 0 351.1 0 256C0 160.9 69.19 81.89 160 66.65V32C160 14.33 174.3 0 192 0C209.7 0 224 14.33 224 32H224zM160 132C104.8 146.2 64 196.4 64 256C64 315.6 104.8 365.8 160 379.1V132zM224 379.1C268.1 368.4 304.4 332.1 315.1 288H224V379.1z\"],\n    \"guitar\": [512, 512, [], \"f7a6\", \"M502.7 39.02L473 9.37c-12.5-12.5-32.74-12.49-45.24 .0106l-46.24 46.37c-3.875 3.875-6.848 8.506-8.598 13.76l-12.19 36.51L284.5 182.3C272.4 173.5 259 166.5 244.4 163.1C211 155.4 177.4 162.3 154.5 185.1C145.3 194.5 138.3 206 134.3 218.6C128.3 237.1 111.1 251.3 92.14 253C68.52 255.4 46.39 264.5 29.52 281.5c-45.62 45.5-37.38 127.5 18.12 183c55.37 55.38 137.4 63.51 182.9 18c16.1-16.88 26.25-38.85 28.5-62.72c1.75-18.75 15.84-36.16 34.47-42.16c12.5-3.875 24.03-10.87 33.4-20.25c22.87-22.88 29.75-56.38 21.1-89.76c-3.375-14.63-10.39-27.99-19.14-40.11l76.25-76.26l36.53-12.17c5.125-1.75 9.894-4.715 13.77-8.59l46.36-46.29C515.2 71.72 515.2 51.52 502.7 39.02zM208 352c-26.5 0-48-21.5-48-48c0-26.5 21.5-48 48-48s47.1 21.5 47.1 48C256 330.5 234.5 352 208 352z\"],\n    \"gun\": [576, 512, [], \"e19b\", \"M544 64h-16V56C528 42.74 517.3 32 504 32S480 42.74 480 56V64H43.17C19.33 64 0 83.33 0 107.2v89.66C0 220.7 19.33 240 43.17 240c21.26 0 36.61 20.35 30.77 40.79l-40.69 158.4C27.41 459.6 42.76 480 64.02 480h103.8c14.29 0 26.84-9.469 30.77-23.21L226.4 352h94.58c24.16 0 45.5-15.41 53.13-38.28L398.6 240h36.1c8.486 0 16.62-3.369 22.63-9.373L480 208h64c17.67 0 32-14.33 32-32V96C576 78.33 561.7 64 544 64zM328.5 298.6C327.4 301.8 324.4 304 320.9 304H239.1L256 240h92.02L328.5 298.6zM480 160H64V128h416V160z\"],\n    \"h\": [384, 512, [104], \"48\", \"M384 64.01v384c0 17.67-14.33 32-32 32s-32-14.33-32-32v-192H64v192c0 17.67-14.33 32-32 32s-32-14.33-32-32v-384C0 46.34 14.33 32.01 32 32.01S64 46.34 64 64.01v128h256v-128c0-17.67 14.33-32 32-32S384 46.34 384 64.01z\"],\n    \"hammer\": [576, 512, [128296], \"f6e3\", \"M568.1 196.3l-22.62-22.62c-4.533-4.533-10.56-7.029-16.97-7.029s-12.44 2.496-16.97 7.029l-5.654 5.656l-20.12-20.12c4.596-23.46-2.652-47.9-19.47-64.73l-45.25-45.25C390.2 17.47 347.1 0 303.1 0C258.2 0 216 17.47 184.3 49.21L176.5 57.05L272.5 105.1v13.81c0 18.95 7.688 37.5 21.09 50.91l49.16 49.14c13.44 13.45 31.39 20.86 50.54 20.86c4.758 0 9.512-.4648 14.18-1.387l20.12 20.12l-5.654 5.654c-9.357 9.357-9.357 24.58-.002 33.94l22.62 22.62c4.535 4.533 10.56 7.031 16.97 7.031s12.44-2.498 16.97-7.031l90.53-90.5C578.3 220.8 578.3 205.6 568.1 196.3zM270.9 192.4c-3.846-3.846-7.197-8.113-10.37-12.49l-239.5 209.2c-28.12 28.12-28.16 73.72-.0371 101.8C35.12 505 53.56 512 71.1 512s36.84-7.031 50.91-21.09l209.1-239.4c-4.141-3.061-8.184-6.289-11.89-9.996L270.9 192.4z\"],\n    \"hamsa\": [512, 512, [], \"f665\", \"M509.4 307.2C504.3 295.5 492.8 288 480 288h-64l.0001-208c0-21.1-18-40-40-40c-22 0-40 18-40 40l-.0001 134C336 219.5 331.5 224 326 224h-20c-5.5 0-10-4.5-10-9.1V40c0-21.1-17.1-40-39.1-40S215.1 18 215.1 40v174C215.1 219.5 211.5 224 205.1 224H185.1C180.5 224 175.1 219.5 175.1 214L175.1 80c0-21.1-18-40-40-40S95.1 58 95.1 80L95.1 288H31.99C19.24 288 7.743 295.5 2.618 307.2C-2.382 318.9-.1322 332.5 8.618 341.9l102.6 110C146.1 490.1 199.8 512 256 512s108.1-21.88 144.8-60.13l102.6-110C512.1 332.5 514.4 318.9 509.4 307.2zM256 416c-53 0-96.01-64-96.01-64s43-64 96.01-64s96.01 64 96.01 64S309 416 256 416zM256 320c-17.63 0-32 14.38-32 32s14.38 32 32 32s32-14.38 32-32S273.6 320 256 320z\"],\n    \"hand\": [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M480 128v208c0 97.05-78.95 176-176 176h-37.72c-53.42 0-103.7-20.8-141.4-58.58l-113.1-113.1C3.906 332.5 0 322.2 0 312C0 290.7 17.15 272 40 272c10.23 0 20.47 3.906 28.28 11.72L128 343.4V64c0-17.67 14.33-32 32-32s32 14.33 32 32l.0729 176C192.1 248.8 199.2 256 208 256s16.07-7.164 16.07-16L224 32c0-17.67 14.33-32 32-32s32 14.33 32 32l.0484 208c0 8.836 7.111 16 15.95 16S320 248.8 320 240L320 64c0-17.67 14.33-32 32-32s32 14.33 32 32l.0729 176c0 8.836 7.091 16 15.93 16S416 248.8 416 240V128c0-17.67 14.33-32 32-32S480 110.3 480 128z\"],\n    \"hand-back-fist\": [448, 512, [\"hand-rock\"], \"f255\", \"M448 144v120.4C448 314.2 422.6 358.1 384 384v128H128v-128l-53.19-38.67C48 325.8 32 294.3 32 261.2V192c0-14.58 6.625-28.38 17.1-37.48L80 130.5V176C80 184.8 87.16 192 96 192s16-7.164 16-16v-128C112 21.48 133.5 0 160 0c25.38 0 45.96 19.77 47.67 44.73C216.2 36.9 227.5 32 240 32C266.5 32 288 53.48 288 80v5.531C296.6 72.57 311.3 64 328 64c23.47 0 42.94 16.87 47.11 39.14C382.4 98.7 390.9 96 400 96C426.5 96 448 117.5 448 144z\"],\n    \"hand-dots\": [512, 512, [\"allergies\"], \"f461\", \"M448 96c-17.67 0-32 14.33-32 32v112C416 248.8 408.8 256 400 256s-15.93-7.164-15.93-16L384 64c0-17.67-14.33-32-32-32s-32 14.33-32 32l.0498 176c0 8.836-7.219 16-16.06 16s-15.95-7.164-15.95-16L288 32c0-17.67-14.33-32-32-32S224 14.33 224 32l.0729 208C224.1 248.8 216.8 256 208 256S192.1 248.8 192.1 240L192 64c0-17.67-14.33-32-32-32S128 46.33 128 64v279.4L68.28 283.7C60.47 275.9 50.23 272 40 272C18.68 272 0 289.2 0 312c0 10.23 3.906 20.47 11.72 28.28l113.1 113.1C162.6 491.2 212.9 512 266.3 512H304c97.05 0 176-78.95 176-176V128C480 110.3 465.7 96 448 96zM192 416c-8.836 0-16-7.164-16-16C176 391.2 183.2 384 192 384s16 7.162 16 16C208 408.8 200.8 416 192 416zM256 448c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C272 440.8 264.8 448 256 448zM256 352c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C272 344.8 264.8 352 256 352zM320 384c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C336 376.8 328.8 384 320 384zM352 448c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C368 440.8 360.8 448 352 448zM384 352c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C400 344.8 392.8 352 384 352z\"],\n    \"hand-fist\": [448, 512, [9994, \"fist-raised\"], \"f6de\", \"M224 180.4V32c0-17.67-14.31-32-32-32S160 14.33 160 32v144h40C208.5 176 216.5 177.7 224 180.4zM128 176V64c0-17.67-14.31-32-32-32S64 46.33 64 64v112.8C66.66 176.5 69.26 176 72 176H128zM288 192c17.69 0 32-14.33 32-32V64c0-17.67-14.31-32-32-32s-32 14.33-32 32v96C256 177.7 270.3 192 288 192zM384 96c-17.69 0-32 14.33-32 32v64c0 17.67 14.31 32 32 32s32-14.34 32-32.02V128C416 110.3 401.7 96 384 96zM350.9 246.2c-12.43-7.648-21.94-19.31-26.88-33.25C313.7 219.9 301.3 223.9 288 223.9c-7.641 0-14.87-1.502-21.66-3.957C269.1 228.6 272 238.1 272 248c0 39.77-32.25 72-72 72H128c-8.836 0-16-7.164-16-16C112 295.2 119.2 288 128 288h72c22.09 0 40-17.91 40-40S222.1 208 200 208h-128C49.91 208 32 225.9 32 248v63.41c0 33.13 16 64.56 42.81 84.13L128 434.2V512h224v-85.09c38.3-24.09 64-66.42 64-114.9V247.1C406.6 252.6 395.7 256 384 256C371.7 256 360.5 252.2 350.9 246.2z\"],\n    \"hand-holding\": [576, 512, [], \"f4bd\", \"M559.7 392.2l-135.1 99.51C406.9 504.8 385 512 362.1 512H15.1c-8.749 0-15.1-7.246-15.1-15.99l0-95.99c0-8.748 7.25-16.02 15.1-16.02l55.37 .0238l46.5-37.74c20.1-16.1 47.12-26.25 74.12-26.25h159.1c19.5 0 34.87 17.37 31.62 37.37c-2.625 15.75-17.37 26.62-33.37 26.62H271.1c-8.749 0-15.1 7.249-15.1 15.1s7.25 15.1 15.1 15.1h120.6l119.7-88.17c17.8-13.19 42.81-9.342 55.93 8.467C581.3 354.1 577.5 379.1 559.7 392.2z\"],\n    \"hand-holding-dollar\": [576, 512, [\"hand-holding-usd\"], \"f4c0\", \"M568.2 336.3c-13.12-17.81-38.14-21.66-55.93-8.469l-119.7 88.17h-120.6c-8.748 0-15.1-7.25-15.1-15.99c0-8.75 7.25-16 15.1-16h78.25c15.1 0 30.75-10.88 33.37-26.62c3.25-20-12.12-37.38-31.62-37.38H191.1c-26.1 0-53.12 9.25-74.12 26.25l-46.5 37.74L15.1 383.1C7.251 383.1 0 391.3 0 400v95.98C0 504.8 7.251 512 15.1 512h346.1c22.03 0 43.92-7.188 61.7-20.27l135.1-99.52C577.5 379.1 581.3 354.1 568.2 336.3zM279.3 175C271.7 173.9 261.7 170.3 252.9 167.1L248 165.4C235.5 160.1 221.8 167.5 217.4 179.1s2.121 26.2 14.59 30.64l4.655 1.656c8.486 3.061 17.88 6.095 27.39 8.312V232c0 13.25 10.73 24 23.98 24s24-10.75 24-24V221.6c25.27-5.723 42.88-21.85 46.1-45.72c8.688-50.05-38.89-63.66-64.42-70.95L288.4 103.1C262.1 95.64 263.6 92.42 264.3 88.31c1.156-6.766 15.3-10.06 32.21-7.391c4.938 .7813 11.37 2.547 19.65 5.422c12.53 4.281 26.21-2.312 30.52-14.84s-2.309-26.19-14.84-30.53c-7.602-2.627-13.92-4.358-19.82-5.721V24c0-13.25-10.75-24-24-24s-23.98 10.75-23.98 24v10.52C238.8 40.23 221.1 56.25 216.1 80.13C208.4 129.6 256.7 143.8 274.9 149.2l6.498 1.875c31.66 9.062 31.15 11.89 30.34 16.64C310.6 174.5 296.5 177.8 279.3 175z\"],\n    \"hand-holding-droplet\": [576, 512, [\"hand-holding-water\"], \"f4c1\", \"M287.1 256c53 0 95.1-42.13 95.1-93.1c0-40-57.12-120.8-83.25-155.6c-6.375-8.5-19.12-8.5-25.5 0C249.1 41.25 191.1 122 191.1 162C191.1 213.9 234.1 256 287.1 256zM568.2 336.3c-13.12-17.81-38.14-21.66-55.93-8.469l-119.7 88.17h-120.6c-8.748 0-15.1-7.25-15.1-15.99c0-8.75 7.25-16 15.1-16h78.25c15.1 0 30.75-10.88 33.37-26.62c3.25-20-12.12-37.38-31.62-37.38H191.1c-26.1 0-53.12 9.25-74.12 26.25l-46.5 37.74L15.1 383.1c-8.748 0-15.1 7.274-15.1 16.02L.0001 496C.0001 504.8 7.251 512 15.1 512h346.1c22.03 0 43.92-7.188 61.7-20.27l135.1-99.52C577.5 379.1 581.3 354.1 568.2 336.3z\"],\n    \"hand-holding-heart\": [576, 512, [], \"f4be\", \"M275.2 250.5c7 7.375 18.5 7.375 25.5 0l108.1-114.2c31.5-33.12 29.72-88.1-5.65-118.7c-30.88-26.75-76.75-21.9-104.9 7.724L287.1 36.91L276.8 25.28C248.7-4.345 202.7-9.194 171.1 17.56C136.7 48.18 134.7 103.2 166.4 136.3L275.2 250.5zM568.2 336.3c-13.12-17.81-38.14-21.66-55.93-8.469l-119.7 88.17h-120.6c-8.748 0-15.1-7.25-15.1-15.1c0-8.746 7.25-15.1 15.1-15.1h78.25c15.1 0 30.75-10.87 33.37-26.62c3.25-19.1-12.12-37.37-31.62-37.37H191.1c-26.1 0-53.12 9.25-74.12 26.25l-46.5 37.74l-55.37-.0253c-8.748 0-15.1 7.275-15.1 16.02L.0001 496C.0001 504.8 7.251 512 15.1 512h346.1c22.03 0 43.92-7.187 61.7-20.28l135.1-99.51C577.5 379.1 581.3 354.1 568.2 336.3z\"],\n    \"hand-holding-medical\": [576, 512, [], \"e05c\", \"M568.2 336.3c-13.12-17.81-38.14-21.66-55.93-8.469l-119.7 88.17h-120.6c-8.748 0-15.1-7.25-15.1-15.99c0-8.75 7.25-16 15.1-16h78.25c15.1 0 30.75-10.88 33.37-26.62c3.25-20-12.12-37.38-31.62-37.38H191.1c-26.1 0-53.12 9.25-74.12 26.25l-46.5 37.74L15.1 383.1C7.251 383.1 0 391.3 0 400v95.98C0 504.8 7.251 512 15.1 512h346.1c22.03 0 43.92-7.188 61.7-20.27l135.1-99.52C577.5 379.1 581.3 354.1 568.2 336.3zM160 176h64v64C224 248.8 231.2 256 240 256h64C312.8 256 320 248.8 320 240v-64h64c8.836 0 16-7.164 16-16V96c0-8.838-7.164-16-16-16h-64v-64C320 7.162 312.8 0 304 0h-64C231.2 0 224 7.162 224 16v64H160C151.2 80 144 87.16 144 96v64C144 168.8 151.2 176 160 176z\"],\n    \"hand-lizard\": [512, 512, [], \"f258\", \"M512 329.1V432c0 8.836-7.164 16-16 16H368c-8.836 0-16-7.164-16-16V416l-85.33-64H95.1c-16.47 0-31.44-13.44-31.96-29.9C62.87 285.8 91.96 256 127.1 256h104.9c13.77 0 26-8.811 30.36-21.88l10.67-32C280.9 181.4 265.4 160 243.6 160H63.1C27.95 160-1.129 130.2 .0352 93.9C.5625 77.44 15.53 64 31.1 64h271.2c26.26 0 50.84 12.88 65.79 34.47l128.8 185.1C507 297.8 512 313.7 512 329.1z\"],\n    \"hand-middle-finger\": [448, 512, [128405], \"f806\", \"M448 288v96c0 70.69-57.31 128-128 128H184c-50.35 0-97.76-23.7-127.1-63.98l-14.43-19.23C35.37 420.5 32 410.4 32 400v-48.02c0-14.58 6.629-28.37 18.02-37.48L80 290.5V336C80 344.8 87.16 352 96 352s16-7.164 16-16v-96C112 213.5 133.5 192 160 192s48 21.48 48 48V40C208 17.91 225.9 0 248 0S288 17.91 288 40v189.5C296.6 216.6 311.3 208 328 208c23.48 0 42.94 16.87 47.11 39.14C382.4 242.7 390.8 240 400 240C426.5 240 448 261.5 448 288z\"],\n    \"hand-peace\": [512, 512, [9996], \"f25b\", \"M256 287.4V32c0-17.67-14.31-32-32-32S192 14.33 192 32v216.3C218.7 248.4 243.7 263.1 256 287.4zM170.8 251.2c2.514-.7734 5.043-1.027 7.57-1.516L93.41 51.39C88.21 39.25 76.34 31.97 63.97 31.97c-20.97 0-31.97 18.01-31.97 32.04c0 4.207 .8349 8.483 2.599 12.6l81.97 191.3L170.8 251.2zM416 224c-17.69 0-32 14.33-32 32v64c0 17.67 14.31 32 32 32s32-14.33 32-32V256C448 238.3 433.7 224 416 224zM320 352c17.69 0 32-14.33 32-32V224c0-17.67-14.31-32-32-32s-32 14.33-32 32v96C288 337.7 302.3 352 320 352zM368 361.9C356.3 375.3 339.2 384 320 384c-27.41 0-50.62-17.32-59.73-41.55c-7.059 21.41-23.9 39.23-47.08 46.36l-47.96 14.76c-1.562 .4807-3.147 .7105-4.707 .7105c-6.282 0-12.18-3.723-14.74-9.785c-.8595-2.038-1.264-4.145-1.264-6.213c0-6.79 4.361-13.16 11.3-15.3l46.45-14.29c17.2-5.293 29.76-20.98 29.76-38.63c0-34.19-32.54-40.07-40.02-40.07c-3.89 0-7.848 .5712-11.76 1.772l-104 32c-18.23 5.606-28.25 22.21-28.25 38.22c0 4.266 .6825 8.544 2.058 12.67L68.19 419C86.71 474.5 138.7 512 197.2 512H272c82.54 0 151.8-57.21 170.7-134C434.6 381.8 425.6 384 416 384C396.8 384 379.7 375.3 368 361.9z\"],\n    \"hand-point-down\": [448, 512, [], \"f0a7\", \"M256 256v64c0 17.67 14.31 32 32 32s32-14.33 32-32V256c0-17.67-14.31-32-32-32S256 238.3 256 256zM200 272H160V352c0 17.67 14.31 32 32 32s32-14.33 32-32V267.6C216.5 270.3 208.5 272 200 272zM72 272C69.26 272 66.66 271.5 64 271.2V480c0 17.67 14.31 32 32 32s32-14.33 32-32V272H72zM416 288V224c0-17.67-14.31-32-32-32s-32 14.33-32 32v64c0 17.67 14.31 32 32 32S416 305.7 416 288zM384 160c11.72 0 22.55 3.381 32 8.879V136C416 60.89 355.1 0 280 0L191.3 0C162.5 0 134.5 9.107 111.2 26.02L74.81 52.47C48 72.03 32 103.5 32 136.6V200C32 222.1 49.91 240 72 240h128c22.09 0 39.1-17.91 39.1-39.1c0-28.73-26.72-40-42.28-40l-69.72 0C119.2 160 112 152.8 112 144S119.2 128 127.1 128H200c37.87 0 68.59 29.35 71.45 66.51C276.8 193.1 282.2 192 288 192c13.28 0 25.6 4.047 35.83 10.97C332.6 178 356.1 160 384 160z\"],\n    \"hand-point-left\": [512, 512, [], \"f0a5\", \"M256 288H192c-17.67 0-32 14.31-32 32s14.33 32 32 32h64c17.67 0 32-14.31 32-32S273.7 288 256 288zM240 232V192H160C142.3 192 128 206.3 128 224s14.33 32 32 32h84.41C241.7 248.5 240 240.5 240 232zM240 104C240 101.3 240.5 98.66 240.8 96H32C14.33 96 0 110.3 0 128s14.33 32 32 32h208V104zM224 448h64c17.67 0 32-14.31 32-32s-14.33-32-32-32H224c-17.67 0-32 14.31-32 32S206.3 448 224 448zM352 416c0 11.72-3.381 22.55-8.879 32H376C451.1 448 512 387.1 512 312V223.3c0-28.76-9.107-56.79-26.02-80.06l-26.45-36.41C439.1 80 408.5 64 375.4 64H312c-22.09 0-40 17.91-40 40v128c0 22.09 17.91 39.1 39.1 39.1c28.73 0 40-26.72 40-42.28L352 159.1C352 151.2 359.2 144 368 144S384 151.2 384 159.1V232c0 37.87-29.35 68.59-66.51 71.45C318.9 308.8 320 314.2 320 320c0 13.28-4.047 25.6-10.97 35.83C333.1 364.6 352 388.1 352 416z\"],\n    \"hand-point-right\": [512, 512, [], \"f0a4\", \"M224 320c0 17.69 14.33 32 32 32h64c17.67 0 32-14.31 32-32s-14.33-32-32-32h-64C238.3 288 224 302.3 224 320zM267.6 256H352c17.67 0 32-14.31 32-32s-14.33-32-32-32h-80v40C272 240.5 270.3 248.5 267.6 256zM272 160H480c17.67 0 32-14.31 32-32s-14.33-32-32-32h-208.8C271.5 98.66 272 101.3 272 104V160zM320 416c0-17.69-14.33-32-32-32H224c-17.67 0-32 14.31-32 32s14.33 32 32 32h64C305.7 448 320 433.7 320 416zM202.1 355.8C196 345.6 192 333.3 192 320c0-5.766 1.08-11.24 2.51-16.55C157.4 300.6 128 269.9 128 232V159.1C128 151.2 135.2 144 143.1 144S160 151.2 159.1 159.1l0 69.72C159.1 245.2 171.3 271.1 200 271.1C222.1 271.1 240 254.1 240 232v-128C240 81.91 222.1 64 200 64H136.6C103.5 64 72.03 80 52.47 106.8L26.02 143.2C9.107 166.5 0 194.5 0 223.3V312C0 387.1 60.89 448 136 448h32.88C163.4 438.6 160 427.7 160 416C160 388.1 178 364.6 202.1 355.8z\"],\n    \"hand-point-up\": [448, 512, [9757], \"f0a6\", \"M288 288c17.69 0 32-14.33 32-32V192c0-17.67-14.31-32-32-32s-32 14.33-32 32v64C256 273.7 270.3 288 288 288zM224 244.4V160c0-17.67-14.31-32-32-32S160 142.3 160 160v80h40C208.5 240 216.5 241.7 224 244.4zM128 240V32c0-17.67-14.31-32-32-32S64 14.33 64 32v208.8C66.66 240.5 69.26 240 72 240H128zM384 192c-17.69 0-32 14.33-32 32v64c0 17.67 14.31 32 32 32s32-14.33 32-32V224C416 206.3 401.7 192 384 192zM323.8 309C313.6 315.1 301.3 320 288 320c-5.766 0-11.24-1.08-16.55-2.51C268.6 354.6 237.9 384 200 384H127.1C119.2 384 112 376.8 112 368S119.2 352 127.1 352l69.72 .0001c15.52 0 42.28-11.29 42.28-40C239.1 289.9 222.1 272 200 272h-128C49.91 272 32 289.9 32 312v63.41c0 33.13 16 64.56 42.81 84.13l36.41 26.45C134.5 502.9 162.5 512 191.3 512H280c75.11 0 136-60.89 136-136v-32.88C406.6 348.6 395.7 352 384 352C356.1 352 332.6 333.1 323.8 309z\"],\n    \"hand-pointer\": [448, 512, [], \"f25a\", \"M400 224c-9.148 0-17.62 2.697-24.89 7.143C370.9 208.9 351.5 192 328 192c-17.38 0-32.46 9.33-40.89 23.17C282.1 192.9 263.5 176 240 176c-12.35 0-23.49 4.797-32 12.46V40c0-22.09-17.9-40-39.1-40C145.9 0 128 17.91 128 40v322.7L72 288C64.15 277.5 52.13 272 39.97 272c-21.22 0-39.97 17.06-39.97 40.02c0 8.356 2.608 16.78 8.005 23.98l91.22 121.6C124.8 491.7 165.5 512 208 512h96C383.4 512 448 447.4 448 368v-96C448 245.5 426.5 224 400 224zM240 400c0 8.844-7.156 16-16 16s-16-7.156-16-16v-96C208 295.2 215.2 288 224 288s16 7.156 16 16V400zM304 400c0 8.844-7.156 16-16 16s-16-7.156-16-16v-96C272 295.2 279.2 288 288 288s16 7.156 16 16V400zM368 400c0 8.844-7.156 16-16 16s-16-7.156-16-16v-96C336 295.2 343.2 288 352 288s16 7.156 16 16V400z\"],\n    \"hand-scissors\": [512, 512, [], \"f257\", \"M512 192v111.1C512 383.4 447.4 448 368 448H288c-26.52 0-48-21.48-48-47.99c0-9.152 2.697-17.61 7.139-24.89C224.9 370.1 208 351.5 208 328c0-16.72 8.561-31.4 21.52-39.1H40c-22.09 0-40-17.9-40-39.99s17.91-39.1 40-39.1h229.5L60 142.2C42.93 136.8 31.99 121.1 31.99 104c0-3.973 .5967-8.014 1.851-12.01c5.35-17.07 21.08-28.04 38.06-28.04c4 0 8.071 .6085 12.09 1.889l279.2 87.22C364.8 153.6 366.4 153.8 368 153.8c6.812 0 13.12-4.375 15.27-11.23c.4978-1.588 .7346-3.195 .7346-4.777c0-6.807-4.388-13.12-11.23-15.25l-72.54-22.67l14.29-17.85C323.6 70.67 337.4 64.04 352 64.04h48c10.39 0 20.48 3.359 28.8 9.592l38.41 28.79c25.2 18.91 40.53 47.97 43.55 79.04C511.5 184.9 512 188.4 512 192z\"],\n    \"hand-sparkles\": [640, 512, [], \"e05d\", \"M448 432c0-14.25 8.547-28.14 21.28-34.55l39.56-16.56l15.64-37.52c4.461-9.037 11.45-15.37 19.43-19.23L544 128c0-17.67-14.33-32-32-32s-32 14.33-32 32l-.0156 112c0 8.836-7.148 16-15.98 16s-16.07-7.164-16.07-16L448 64c0-17.67-14.33-32-32-32s-32 14.33-32 32l-.0635 176c0 8.836-7.106 16-15.94 16S351.9 248.8 351.9 240L352 32c0-17.67-14.33-32-32-32S288 14.33 288 32L287.9 240C287.9 248.8 280.8 256 272 256S255.9 248.8 255.9 240L256 64c0-17.67-14.33-32-32-32S192 46.33 192 64v279.4L132.3 283.7C124.5 275.9 114.2 272 104 272C82.68 272 64 289.2 64 312c0 10.23 3.906 20.47 11.72 28.28l113.1 113.1C226.6 491.2 276.9 512 330.3 512H368c42.72 0 81.91-15.32 112.4-40.73l-9.049-3.773C456.6 460.1 448 446.3 448 432zM349.8 371.6L320 383.1l-12.42 29.78C306.1 415 305.4 416 304 416s-2.969-.9941-3.578-2.219L288 383.1l-29.79-12.42C256.1 370.1 256 369.4 256 367.1c0-1.365 .9922-2.967 2.209-3.577L288 352l12.42-29.79C301 320.1 302.6 320 304 320s2.967 .9902 3.578 2.217L320 352l29.79 12.42C351 365 352 366.6 352 367.1C352 369.4 351 370.1 349.8 371.6zM80 224c2.277 0 4.943-1.656 5.959-3.699l20.7-49.63l49.65-20.71c2.027-1.014 3.682-3.696 3.686-5.958C159.1 141.7 158.3 139.1 156.3 138L106.7 117.4L85.96 67.7C84.94 65.65 82.28 64 80 64C77.72 64 75.05 65.65 74.04 67.7L53.34 117.3L3.695 138C1.668 139.1 .0117 141.7 .0078 143.1c.0039 2.262 1.662 4.953 3.688 5.967l49.57 20.67l20.77 49.67C75.05 222.3 77.72 224 80 224zM639.1 432c-.0039-2.275-1.657-4.952-3.687-5.968l-49.57-20.67l-20.77-49.67C564.9 353.7 562.3 352 560 352c-2.281 0-4.959 1.652-5.975 3.695l-20.7 49.63l-49.64 20.71c-2.027 1.016-3.682 3.683-3.686 5.958c.0039 2.262 1.661 4.954 3.686 5.968l49.57 20.67l20.77 49.67C555.1 510.3 557.7 512 560 512c2.277 0 4.933-1.656 5.949-3.699l20.7-49.63l49.65-20.71C638.3 436.9 639.1 434.3 639.1 432z\"],\n    \"hand-spock\": [576, 512, [128406], \"f259\", \"M543.6 128.6c0-8.999-6.115-32.58-31.68-32.58c-14.1 0-27.02 9.324-30.92 23.56l-34.36 125.1c-1.682 6.16-7.275 10.43-13.66 10.43c-7.981 0-14.16-6.518-14.16-14.13c0-.9844 .1034-1.987 .3197-2.996l35.71-166.6c.5233-2.442 .7779-4.911 .7779-7.362c0-13.89-9.695-32.86-31.7-32.86c-14.79 0-28.12 10.26-31.34 25.29l-37.77 176.2c-2.807 13.1-14.38 22.46-27.77 22.46c-13.04 0-24.4-8.871-27.56-21.52l-52.11-208.5C243.6 11.2 230.5-.0013 215.6-.0013c-26.71 0-31.78 25.71-31.78 31.98c0 2.569 .3112 5.18 .9617 7.786l50.55 202.2c.2326 .9301 .3431 1.856 .3431 2.764c0 6.051-4.911 11.27-11.3 11.27c-4.896 0-9.234-3.154-10.74-7.812L166.9 103.9C162.4 89.1 149.5 80.02 135.5 80.02c-15.68 0-31.63 12.83-31.63 31.97c0 3.273 .5059 6.602 1.57 9.884l69.93 215.7c.2903 .8949 .4239 1.766 .4239 2.598c0 4.521-3.94 7.915-8.119 7.915c-1.928 0-3.906-.7219-5.573-2.388L101.7 285.3c-8.336-8.336-19.63-12.87-30.81-12.87c-23.56 0-39.07 19.69-39.07 39.55c0 10.23 3.906 20.47 11.72 28.28l122.5 122.5C197.6 494.3 240.3 512 284.9 512h50.98c23.5 0 108.4-14.57 132.5-103l73.96-271.2C543.2 134.8 543.6 131.7 543.6 128.6z\"],\n    \"hands\": [512, 512, [\"sign-language\", \"signing\"], \"f2a7\", \"M330.8 242.3L223.1 209.1C210.3 205.2 197 212.3 193.1 224.9C189.2 237.6 196.3 251 208.9 254.9L256 272H56.9c-11.61 0-22.25 7.844-24.44 19.24C29.51 306.6 41.19 320 56 320h128C188.4 320 192 323.6 192 328S188.4 336 184 336H24.9c-11.61 0-22.25 7.844-24.44 19.24C-2.49 370.6 9.193 384 24 384h160C188.4 384 192 387.6 192 392S188.4 400 184 400H56.9c-11.61 0-22.25 7.844-24.44 19.24C29.51 434.6 41.19 448 56 448h128C188.4 448 192 451.6 192 456S188.4 464 184 464H88.9c-11.61 0-22.25 7.844-24.44 19.24C61.51 498.6 73.19 512 88 512h208c66.28 0 120-53.73 120-120v-32.03C416 306.6 381.1 259.4 330.8 242.3zM197.1 179.5c5.986-2.148 12.32-3.482 18.98-3.482c5.508 0 10.99 .8105 16.5 2.471l16.11 4.975L227.7 117.2C224.2 106.2 213.6 98.39 202 99.74c-15.51 1.807-24.79 16.99-20.33 31.11L197.1 179.5zM487.1 144.5c-13.27 .0977-23.95 10.91-23.86 24.16l-2.082 50.04l-59.98-189.8c-3.496-11.07-14.18-18.86-25.71-17.51c-15.51 1.807-24.79 16.99-20.33 31.11l38.56 122.1c1.332 4.213-1.004 8.707-5.219 10.04c-4.213 1.332-8.707-1.004-10.04-5.217l-47.93-151.7c-3.496-11.07-14.18-18.86-25.71-17.51c-15.51 1.807-24.79 16.99-20.33 31.11l43.37 137.8c1.33 4.213-1.006 8.707-5.219 10.04c-4.213 1.332-8.707-1.004-10.04-5.217l-33.46-106.4C275.6 56.39 264.9 48.6 253.4 49.94c-15.51 1.807-24.79 16.99-20.33 31.11l34.15 108.1l73.7 22.76C404.1 233.3 448 292.8 448 359.9v27.91c38.27-21.17 63.28-61.24 64-106.7V168.4C511.8 155.1 500.3 144.5 487.1 144.5z\"],\n    \"hands-asl-interpreting\": [640, 512, [\"american-sign-language-interpreting\", \"asl-interpreting\", \"hands-american-sign-language-interpreting\"], \"f2a3\", \"M200 240c16.94 0 32.09 10.72 37.73 26.67c5.891 16.66 24.17 25.39 40.84 19.5c16.66-5.891 25.39-24.17 19.5-40.84C287.2 214.7 262.8 191.6 233.1 181.5l79.68-22.76c16.98-4.859 26.83-22.56 21.97-39.56C329.9 102.2 312.2 92.35 295.2 97.24L196 125.6l80.82-69.28c13.42-11.5 14.97-31.7 3.469-45.12C268.8-2.24 248.6-3.803 235.2 7.713l-100.4 86.09l22.33-48.39c7.391-16.05 .3906-35.06-15.66-42.47C125.4-4.412 106.4 2.525 98.94 18.6L14.92 206.6C5.082 228.6 0 252.5 0 276.6C0 335.9 48.1 384 107.4 384l99.9-.0064c31.87-2.289 61.15-19.35 79.13-46.18c9.828-14.69 5.891-34.56-8.781-44.41C263 283.6 243.1 287.5 233.3 302.2C225.8 313.3 213.4 320 200 320c-22.06 0-40-17.94-40-40C160 257.9 177.9 240 200 240zM532.6 128l-99.9 .004c-31.87 2.289-61.15 19.35-79.13 46.18c-9.828 14.69-5.891 34.56 8.781 44.41c14.66 9.812 34.55 5.906 44.41-8.781C414.2 198.7 426.6 191.1 440 191.1c22.06 0 40 17.94 40 40c0 22.06-17.94 39.1-40 39.1c-16.94 0-32.09-10.72-37.73-26.67c-5.891-16.66-24.17-25.39-40.84-19.5c-16.66 5.891-25.39 24.17-19.5 40.84c10.84 30.64 35.23 53.77 64.96 63.8l-79.68 22.76c-16.98 4.859-26.83 22.56-21.97 39.56c4.844 16.98 22.56 26.86 39.56 21.97l99.2-28.34l-80.82 69.28c-13.42 11.5-14.97 31.7-3.469 45.12c11.52 13.42 31.73 14.98 45.13 3.469l100.4-86.09l-22.33 48.39c-7.391 16.05-.3906 35.06 15.66 42.47c16.02 7.359 35.05 .4219 42.47-15.65l84.02-188C634.9 283.4 640 259.5 640 235.4C640 176.1 591.9 128 532.6 128z\"],\n    \"hands-bubbles\": [576, 512, [\"hands-wash\"], \"e05e\", \"M416 64c17.67 0 32-14.33 32-31.1c0-17.67-14.33-32-32-32c-17.67 0-32 14.33-32 32C384 49.67 398.3 64 416 64zM519.1 336H360c-4.418 0-8-3.582-8-8s3.582-8 8-8h128c14.81 0 26.49-13.42 23.54-28.76c-2.191-11.4-12.84-19.24-24.44-19.24H288l47.09-17.06c12.66-3.906 19.75-17.34 15.84-30.03c-3.938-12.62-17.28-19.69-30.03-15.84L213.2 242.3C162 259.4 128 306.6 128 359.1v25.65c36.47 7.434 64 39.75 64 78.38c0 10.71-2.193 20.91-6.031 30.25C204.1 505.3 225.2 512 248 512h208c14.81 0 26.49-13.42 23.54-28.76c-2.191-11.4-12.84-19.24-24.44-19.24H360c-4.418 0-8-3.582-8-8s3.582-8 8-8h128c14.81 0 26.49-13.42 23.54-28.76c-2.191-11.4-12.84-19.24-24.44-19.24H360c-4.418 0-8-3.582-8-8s3.582-8 8-8h160c14.81 0 26.49-13.42 23.54-28.76C541.3 343.8 530.7 336 519.1 336zM311.5 178.4c5.508-1.66 10.99-2.471 16.5-2.471c6.662 0 12.1 1.334 18.98 3.482l15.36-48.61c4.461-14.12-4.82-29.3-20.33-31.11c-11.53-1.344-22.21 6.443-25.71 17.51l-20.9 66.17L311.5 178.4zM496 224c26.51 0 48-21.49 48-47.1s-21.49-48-48-48S448 149.5 448 176S469.5 224 496 224zM93.65 386.3C94.45 386.1 95.19 385.8 96 385.6v-25.69c0-67.17 43.03-126.7 107.1-148l73.7-22.76l34.15-108.1c4.459-14.12-4.82-29.3-20.33-31.11C279.1 48.6 268.4 56.39 264.9 67.46L231.4 173.9c-1.332 4.213-5.826 6.549-10.04 5.217C217.2 177.8 214.8 173.3 216.2 169.1l43.37-137.8c4.461-14.12-4.82-29.3-20.33-31.11c-11.53-1.344-22.21 6.445-25.71 17.51L165.6 169.4C164.2 173.6 159.7 175.9 155.5 174.6C151.3 173.3 148.1 168.8 150.3 164.6l38.56-122.1c4.459-14.12-4.82-29.3-20.33-31.11C157 10.04 146.3 17.83 142.8 28.9L82.84 218.7L80.76 168.7C80.85 155.5 70.17 144.6 56.9 144.5C43.67 144.5 32.18 155.1 32 168.4v112.7C32.71 325.6 56.76 364.8 93.65 386.3zM112 416c-26.51 0-48 21.49-48 47.1s21.49 48 48 48S160 490.5 160 464S138.5 416 112 416z\"],\n    \"hands-clapping\": [512, 512, [], \"e1a8\", \"M320 96c8.844 0 16-7.156 16-16v-64C336 7.156 328.8 0 320 0s-16 7.156-16 16v64C304 88.84 311.2 96 320 96zM383.4 96c5.125 0 10.16-2.453 13.25-7.016l32.56-48c1.854-2.746 2.744-5.865 2.744-8.951c0-8.947-7.273-16.04-15.97-16.04c-5.125 0-10.17 2.465-13.27 7.02l-32.56 48C368.3 73.76 367.4 76.88 367.4 79.97C367.4 88.88 374.7 96 383.4 96zM384 357.5l0-163.9c0-6.016-4.672-33.69-32-33.69c-17.69 0-32.07 14.33-32.07 31.1L320 268.1L169.2 117.3C164.5 112.6 158.3 110.3 152.2 110.3c-13.71 0-24 11.21-24 24c0 6.141 2.344 12.28 7.031 16.97l89.3 89.3C227.4 243.4 228.9 247.2 228.9 251c0 3.8-1.45 7.6-4.349 10.5c-2.899 2.899-6.7 4.349-10.5 4.349c-3.8 0-7.6-1.45-10.5-4.349l-107.6-107.6C91.22 149.2 85.08 146.9 78.94 146.9c-13.71 0-24 11.21-24 24c0 6.141 2.344 12.28 7.031 16.97l107.6 107.6C172.5 298.4 173.9 302.2 173.9 305.1c0 3.8-1.45 7.6-4.349 10.5c-2.899 2.9-6.7 4.349-10.5 4.349c-3.8 0-7.6-1.45-10.5-4.349L59.28 227.2C54.59 222.5 48.45 220.1 42.31 220.1c-13.71 0-24 11.21-24 24c0 6.141 2.344 12.28 7.031 16.97l89.3 89.3c2.9 2.899 4.349 6.7 4.349 10.5c0 3.8-1.45 7.6-4.349 10.5c-2.899 2.899-6.7 4.349-10.5 4.349c-3.8 0-7.6-1.45-10.5-4.349L40.97 318.7C36.28 314 30.14 311.7 24 311.7c-13.71 0-23.99 11.26-23.99 24.05c0 6.141 2.332 12.23 7.02 16.92C112.6 458.2 151.3 512 232.3 512C318.1 512 384 440.9 384 357.5zM243.3 88.98C246.4 93.55 251.4 96 256.6 96c8.762 0 15.99-7.117 15.99-16.03c0-3.088-.8906-6.205-2.744-8.951l-32.56-48C234.2 18.46 229.1 15.98 223.1 15.98c-8.664 0-15.98 7.074-15.98 16.05c0 3.086 .8906 6.205 2.744 8.951L243.3 88.98zM480 160c-17.69 0-32 14.33-32 32v76.14l-32-32v121.4c0 94.01-63.31 141.5-78.32 152.2C345.1 510.9 352.6 512 360.3 512C446.1 512 512 440.9 512 357.5l-.0625-165.6C511.9 174.3 497.7 160 480 160z\"],\n    \"hands-holding\": [640, 512, [], \"f4c2\", \"M216.1 236C205.1 222.3 185.8 219.1 172 231c-13.81 11.06-16.05 31.19-5 45l18.86 30.56C194.8 317.7 193.9 333.7 183.8 343.8c-11.79 11.79-31.2 10.71-41.61-2.305L80 256.8V104C80 81.91 62.09 64 40 64S0 81.91 0 104v204.7c0 14.54 4.949 28.65 14.03 40l120.1 151.3C141.1 507.6 150.3 512 159.1 512H256c17.67 0 32.03-14.35 32.03-32.02L288 358.4c0-21.79-7.414-42.93-21.02-59.94L216.1 236zM600 64c-22.09 0-40 17.91-40 40v152.8l-62.2 84.73c-10.41 13.02-29.83 14.09-41.61 2.305c-10.08-10.07-10.97-26.11-2.068-37.24l18.86-30.56c11.05-13.81 8.812-33.94-5-45c-13.77-11.03-33.94-8.75-44.97 5l-49.99 62.5C359.4 315.5 352 336.6 352 358.4l-.0313 121.5C351.1 497.7 366.3 512 384 512h96.02c9.713 0 18.9-4.414 24.96-12l120.1-151.3C635.1 337.4 640 323.3 640 308.7V104C640 81.91 622.1 64 600 64z\"],\n    \"hands-praying\": [640, 512, [\"praying-hands\"], \"f684\", \"M272 191.9c-17.62 0-32 14.35-32 31.97V303.9c0 8.875-7.125 16-16 16s-16-7.125-16-16V227.4c0-17.37 4.75-34.5 13.75-49.37L299.5 48.41c9-15.12 4.125-34.76-11-43.88C273.1-4.225 255.8 .1289 246.1 13.63C245.1 13.88 245.5 13.88 245.4 14.13L128.1 190C117.5 205.9 112 224.3 112 243.3v80.24l-90.13 29.1C8.75 357.9 0 370.1 0 383.9v95.99c0 10.88 8.5 31.1 32 31.1c2.75 0 5.375-.25 8-1l179.3-46.62C269.1 450 304 403.8 304 351.9V223.9C304 206.3 289.6 191.9 272 191.9zM618.1 353.6L528 323.6V243.4c0-19-5.5-37.37-16.12-53.25l-117.3-175.9c-.125-.25-.6251-.2487-.75-.4987c-9.625-13.5-27.88-17.85-42.38-9.229c-15.12 9.125-20 28.76-11 44.01l77.75 129.5C427.3 193 432 210 432 227.5v76.49c0 8.875-7.125 16-16 16s-16-7.125-16-16V223.1c0-17.62-14.38-31.97-32-31.97s-32 14.38-32 31.1v127.1c0 51.87 34.88 98.12 84.75 112.4L600 511C602.6 511.6 605.4 512 608 512c23.5 0 32-21.25 32-31.1v-95.99C640 370.3 631.3 358 618.1 353.6z\"],\n    \"handshake\": [640, 512, [], \"f2b5\", \"M0 383.9l64 .0404c17.75 0 32-14.29 32-32.03V128.3L0 128.3V383.9zM48 320.1c8.75 0 16 7.118 16 15.99c0 8.742-7.25 15.99-16 15.99S32 344.8 32 336.1C32 327.2 39.25 320.1 48 320.1zM348.8 64c-7.941 0-15.66 2.969-21.52 8.328L228.9 162.3C228.8 162.5 228.8 162.7 228.6 162.7C212 178.3 212.3 203.2 226.5 218.7c12.75 13.1 39.38 17.62 56.13 2.75C282.8 221.3 282.9 221.3 283 221.2l79.88-73.1c6.5-5.871 16.75-5.496 22.62 1c6 6.496 5.5 16.62-1 22.62l-26.12 23.87L504 313.7c2.875 2.496 5.5 4.996 7.875 7.742V127.1c-40.98-40.96-96.48-63.88-154.4-63.88L348.8 64zM334.6 217.4l-30 27.49c-29.75 27.11-75.25 24.49-101.8-4.371C176 211.2 178.1 165.7 207.3 138.9L289.1 64H282.5C224.7 64 169.1 87.08 128.2 127.9L128 351.8l18.25 .0369l90.5 81.82c27.5 22.37 67.75 18.12 90-9.246l18.12 15.24c15.88 12.1 39.38 10.5 52.38-5.371l31.38-38.6l5.374 4.498c13.75 11 33.88 9.002 45-4.748l9.538-11.78c11.12-13.75 9.036-33.78-4.694-44.93L334.6 217.4zM544 128.4v223.6c0 17.62 14.25 32.05 31.1 32.05L640 384V128.1L544 128.4zM592 352c-8.75 0-16-7.246-16-15.99c0-8.875 7.25-15.99 16-15.99S608 327.2 608 336.1C608 344.8 600.8 352 592 352z\"],\n    \"handshake-angle\": [640, 512, [\"hands-helping\"], \"f4c4\", \"M488 191.1h-152l.0001 51.86c.0001 37.66-27.08 72-64.55 75.77c-43.09 4.333-79.45-29.42-79.45-71.63V126.4l-24.51 14.73C123.2 167.8 96.04 215.7 96.04 267.5L16.04 313.8c-15.25 8.751-20.63 28.38-11.75 43.63l80 138.6c8.875 15.25 28.5 20.5 43.75 11.75l103.4-59.75h136.6c35.25 0 64-28.75 64-64c26.51 0 48-21.49 48-48V288h8c13.25 0 24-10.75 24-24l.0001-48C512 202.7 501.3 191.1 488 191.1zM635.7 154.5l-79.95-138.6c-8.875-15.25-28.5-20.5-43.75-11.75l-103.4 59.75h-62.57c-37.85 0-74.93 10.61-107.1 30.63C229.7 100.4 224 110.6 224 121.6l-.0004 126.4c0 22.13 17.88 40 40 40c22.13 0 40-17.88 40-40V159.1h184c30.93 0 56 25.07 56 56v28.5l80-46.25C639.3 189.4 644.5 169.8 635.7 154.5z\"],\n    \"handshake-simple-slash\": [640, 512, [\"handshake-alt-slash\"], \"e05f\", \"M358.6 195.6l145.6 118.1c12.12 9.992 19.5 23.49 22.12 37.98h81.62c17.6 0 31.1-14.39 31.1-31.99V159.1c0-17.67-14.33-31.99-31.1-31.99h-95.1c-40.98-40.96-96.56-63.98-154.5-63.98h-8.613c-7.1 0-15.63 3.002-21.63 8.373l-93.44 85.57L208.3 137.9L289.1 64.01L282.5 64c-43.48 0-85.19 13.66-120.8 37.44l-122.9-96.33C34.41 1.672 29.19 0 24.03 0c-7.125 0-14.19 3.156-18.91 9.187c-8.187 10.44-6.375 25.53 4.062 33.7L601.2 506.9c10.5 8.203 25.56 6.328 33.69-4.078c8.187-10.44 6.375-25.53-4.062-33.7l-135.5-106.2c-.1719-9.086-3.789-18.03-11.39-24.2l-149.2-121.2l-11.47 10.51L297.6 207.1l65.51-59.85c6.5-5.871 16.62-5.496 22.62 .1c5.1 6.496 5.5 16.62-.1 22.62L358.6 195.6zM32 127.1c-17.6 0-31.1 14.4-31.1 31.99v159.8c0 17.59 14.4 32.06 31.1 32.06l114.2-.0712l90.5 81.85c27.5 22.37 67.75 18.12 89.1-9.25l18.12 15.25c15.87 12.1 39.37 10.5 52.37-5.371l13.02-16.03L39.93 127.1L32 127.1z\"],\n    \"handshake-slash\": [640, 512, [], \"e060\", \"M543.1 128.2l.0002 223.8c0 17.62 14.25 31.99 31.1 31.99h64V128.1L543.1 128.2zM591.1 352c-8.75 0-16-7.251-16-15.99c0-8.875 7.25-15.1 16-15.1c8.75 0 15.1 7.122 15.1 15.1C607.1 344.8 600.7 352 591.1 352zM.0005 128.2v255.7l63.1 .0446c17.75 0 32-14.28 32-32.03L96 171.9l-55.77-43.71H.0005zM64 336c0 8.742-7.25 15.99-15.1 15.99s-15.1-7.251-15.1-15.99c0-8.875 7.25-15.1 15.1-15.1S64 327.2 64 336zM128 351.8h18.25l90.5 81.85c27.5 22.37 67.75 18.12 89.1-9.25l18.12 15.25c15.87 12.1 39.37 10.5 52.37-5.371l13.02-16.03L128 196.1V351.8zM495.2 362.8c-.1875-9.101-3.824-18.05-11.44-24.24l-149.2-121.1l-11.47 10.51L297.5 207.9l65.33-59.79c6.5-5.871 16.75-5.496 22.62 1c5.1 6.496 5.5 16.62-1 22.62l-26.12 23.87l145.6 118.1c2.875 2.496 5.5 4.996 7.875 7.742V127.1c-40.98-40.96-96.52-63.98-154.5-63.98h-8.613c-7.941 0-15.64 2.97-21.5 8.329L233.7 157.9L208.3 137.9l80.85-73.92L282.5 64c-43.47 0-85.16 13.68-120.8 37.45L38.81 5.109C34.41 1.672 29.19 0 24.03 0C16.91 0 9.846 3.156 5.127 9.187C-3.06 19.62-1.248 34.72 9.19 42.89l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078c8.187-10.44 6.375-25.53-4.062-33.7L495.2 362.8z\"],\n    \"hanukiah\": [640, 512, [128334], \"f6e6\", \"M231.1 159.9C227.6 159.9 224 163.6 224 168V288h32V168C256 163.6 252.4 160 248 160L231.1 159.9zM167.1 159.9C163.6 159.9 160 163.6 160 168V288h32V168C192 163.6 188.4 160 184 160L167.1 159.9zM392 160C387.6 160 384 163.6 384 168V288h32V168c0-4.375-3.625-8.061-8-8.061L392 160zM456 160C451.6 160 448 163.6 448 168V288h32V168c0-4.375-3.625-8.061-8-8.061L456 160zM544 168c0-4.375-3.625-8.061-8-8.061L520 160C515.6 160 512 163.6 512 168V288h32V168zM103.1 159.9C99.62 159.9 96 163.6 96 168V288h32V168C128 163.6 124.4 160 120 160L103.1 159.9zM624 160h-31.98c-8.837 0-16.03 7.182-16.03 16.02L576 288c0 17.6-14.4 32-32 32h-192V128c0-8.837-7.151-16.01-15.99-16.01H303.1C295.2 111.1 288 119.2 288 128v192H96c-17.6 0-32-14.4-32-32l.0065-112C64.01 167.2 56.85 160 48.02 160H16C7.163 160 0 167.2 0 176V288c0 53.02 42.98 96 96 96h192v64H175.1C149.5 448 128 469.5 128 495.1C128 504.8 135.2 512 143.1 512h352C504.9 512 512 504.9 512 496C512 469.5 490.5 448 464 448H352v-64h192c53.02 0 96-42.98 96-96V176C640 167.2 632.8 160 624 160zM607.1 127.9C621.2 127.9 632 116 632 101.4C632 86.62 608 48 608 48s-24 38.62-24 53.38C584 116 594.7 127.9 607.1 127.9zM31.1 127.9C45.25 127.9 56 116 56 101.4C56 86.62 32 48 32 48S8 86.62 8 101.4C8 116 18.75 127.9 31.1 127.9zM319.1 79.94c13.25 0 24-11.94 24-26.57C344 38.62 320 0 320 0S296 38.62 296 53.38C296 67.1 306.7 79.94 319.1 79.94zM112 128c13.25 0 24-12 24-26.62C136 86.62 112 48 112 48S88 86.62 88 101.4C88 115.1 98.75 128 112 128zM176 128c13.25 0 24-12 24-26.62C200 86.62 176 48 176 48S152 86.62 152 101.4C152 115.1 162.8 128 176 128zM240 128c13.25 0 24-12 24-26.62C264 86.62 240 48 240 48S216 86.62 216 101.4C216 115.1 226.8 128 240 128zM400 128c13.25 0 24-12 24-26.62C424 86.62 400 48 400 48s-24 38.62-24 53.38C376 115.1 386.8 128 400 128zM464 128c13.25 0 24-12 24-26.62C488 86.62 464 48 464 48s-24 38.62-24 53.38C440 115.1 450.8 128 464 128zM528 128c13.25 0 24-12 24-26.62C552 86.62 528 48 528 48s-24 38.62-24 53.38C504 115.1 514.8 128 528 128z\"],\n    \"hard-drive\": [512, 512, [128436, \"hdd\"], \"f0a0\", \"M464 288h-416C21.5 288 0 309.5 0 336v96C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-96C512 309.5 490.5 288 464 288zM320 416c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 416 320 416zM416 416c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S433.6 416 416 416zM464 32h-416C21.5 32 0 53.5 0 80v192.4C13.41 262.3 29.92 256 48 256h416c18.08 0 34.59 6.254 48 16.41V80C512 53.5 490.5 32 464 32z\"],\n    \"hashtag\": [448, 512, [62098], \"23\", \"M416 127.1h-58.23l9.789-58.74c2.906-17.44-8.875-33.92-26.3-36.83c-17.53-2.875-33.92 8.891-36.83 26.3L292.9 127.1H197.8l9.789-58.74c2.906-17.44-8.875-33.92-26.3-36.83c-17.53-2.875-33.92 8.891-36.83 26.3L132.9 127.1H64c-17.67 0-32 14.33-32 32C32 177.7 46.33 191.1 64 191.1h58.23l-21.33 128H32c-17.67 0-32 14.33-32 32c0 17.67 14.33 31.1 32 31.1h58.23l-9.789 58.74c-2.906 17.44 8.875 33.92 26.3 36.83C108.5 479.9 110.3 480 112 480c15.36 0 28.92-11.09 31.53-26.73l11.54-69.27h95.12l-9.789 58.74c-2.906 17.44 8.875 33.92 26.3 36.83C268.5 479.9 270.3 480 272 480c15.36 0 28.92-11.09 31.53-26.73l11.54-69.27H384c17.67 0 32-14.33 32-31.1c0-17.67-14.33-32-32-32h-58.23l21.33-128H416c17.67 0 32-14.32 32-31.1C448 142.3 433.7 127.1 416 127.1zM260.9 319.1H165.8L187.1 191.1h95.12L260.9 319.1z\"],\n    \"hat-cowboy\": [640, 512, [], \"f8c0\", \"M489.1 264.9C480.5 207.5 450.5 32 392.3 32c-14 0-26.58 5.875-37.08 14c-20.75 15.87-49.62 15.87-70.5 0C274.2 38 261.7 32 247.7 32c-58.25 0-88.27 175.5-97.77 232.9C188.7 277.5 243.7 288 319.1 288S451.2 277.5 489.1 264.9zM632.9 227.7c-6.125-4.125-14.2-3.51-19.7 1.49c-1 .875-101.3 90.77-293.1 90.77c-190.9 0-292.2-89.99-293.2-90.86c-5.5-4.875-13.71-5.508-19.71-1.383c-6.125 4.125-8.587 11.89-6.087 18.77C1.749 248.5 78.37 448 319.1 448s318.2-199.5 318.1-201.5C641.5 239.6 639 231.9 632.9 227.7z\"],\n    \"hat-cowboy-side\": [640, 512, [], \"f8c1\", \"M260.8 260C232.1 237.1 198.8 225 164.4 225c-77.38 0-142.9 62.75-163 156c-3.5 16.62-.375 33.88 8.625 47.38c8.75 13.12 21.88 20.62 35.88 20.62H592c-103.2 0-155-37.13-233.2-104.5L260.8 260zM495.5 241.8l-27.13-156.5c-2.875-17.25-12.75-32.5-27.12-42.25c-14.37-9.75-32.24-13.3-49.24-9.675L200.9 74.02C173.7 79.77 153.5 102.3 150.5 129.8L143.6 195c6.875-.875 13.62-2 20.75-2c41.87 0 82 14.5 117.4 42.88l98 84.37c71 61.25 115.1 96.75 212.2 96.75c26.5 0 48-21.5 48-48C640 343.6 610.4 249.6 495.5 241.8z\"],\n    \"hat-wizard\": [512, 512, [], \"f6e8\", \"M200 376l-49.23-16.41c-7.289-2.434-7.289-12.75 0-15.18L200 328l16.41-49.23c2.434-7.289 12.75-7.289 15.18 0L248 328l49.23 16.41c7.289 2.434 7.289 12.75 0 15.18L248 376L240 416H448l-86.38-201.6C355.4 200 354.8 183.8 359.8 168.9L416 0L228.4 107.3C204.8 120.8 185.1 141.4 175 166.4L64 416h144L200 376zM231.2 172.4L256 160l12.42-24.84c1.477-2.949 5.68-2.949 7.156 0L288 160l24.84 12.42c2.949 1.477 2.949 5.68 0 7.156L288 192l-12.42 24.84c-1.477 2.949-5.68 2.949-7.156 0L256 192L231.2 179.6C228.2 178.1 228.2 173.9 231.2 172.4zM496 448h-480C7.164 448 0 455.2 0 464C0 490.5 21.49 512 48 512h416c26.51 0 48-21.49 48-48C512 455.2 504.8 448 496 448z\"],\n    \"head-side-cough\": [640, 512, [], \"e061\", \"M608 359.1c-13.25 0-24 10.75-24 24s10.75 24 24 24s24-10.75 24-24S621.3 359.1 608 359.1zM477.2 275c-21-47.13-48.49-151.8-73.11-186.8C365.6 33.63 302.5 0 234.1 0L192 0C86 0 0 86 0 192c0 56.75 24.75 107.6 64 142.9L64 512h223.1v-32h64.01c35.38 0 64-28.62 64-63.1L320 416c-17.67 0-32-14.33-32-32s14.33-32 32-32h95.98l-.003-32h31.99C471.1 320 486.6 296.1 477.2 275zM336 224c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S353.6 224 336 224zM480 359.1c-13.25 0-23.1 10.75-23.1 24s10.75 24 23.1 24s24-10.75 24-24S493.3 359.1 480 359.1zM608 311.1c13.25 0 24-10.75 24-24s-10.75-24-24-24s-24 10.75-24 24S594.8 311.1 608 311.1zM544 311.1c-13.25 0-23.1 10.75-23.1 24s10.75 24 23.1 24s24-10.75 24-24S557.3 311.1 544 311.1zM544 407.1c-13.25 0-23.1 10.75-23.1 24s10.75 24 23.1 24s24-10.75 24-24S557.3 407.1 544 407.1zM608 455.1c-13.25 0-24 10.75-24 24s10.75 24 24 24s24-10.75 24-24S621.3 455.1 608 455.1z\"],\n    \"head-side-cough-slash\": [640, 512, [], \"e062\", \"M607.1 311.1c13.25 0 24-10.75 24-23.1s-10.75-23.1-24-23.1s-23.1 10.75-23.1 23.1S594.7 311.1 607.1 311.1zM607.1 407.1c13.25 0 24-10.78 24-24.03c0-13.25-10.75-23.1-24-23.1s-24 10.78-24 24.03C583.1 397.2 594.7 407.1 607.1 407.1zM630.8 469.1l-190.2-149.1h7.4c23.12 0 38.62-23.87 29.25-44.1c-20.1-47.12-48.49-151.7-73.11-186.7C365.6 33.63 302.5 0 234.1 0H192C149.9 0 111.5 14.26 79.88 37.29L38.81 5.109C34.41 1.672 29.19 0 24.03 0C16.91 0 9.845 3.156 5.126 9.187c-8.187 10.44-6.375 25.53 4.062 33.7l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1zM320 415.1c-17.67 0-31.1-14.33-31.1-31.1S302.3 351.1 320 351.1l5.758-.0009L18.16 110.9C6.631 135.6 .0006 162.1 .0006 191.1c0 56.75 24.75 107.6 64 142.9L64 511.1h223.1l0-31.1l64.01 .001c33.25 0 60.2-25.38 63.37-57.78l-7.932-6.217H320zM543.1 359.1c13.25 0 24-10.78 24-24.03s-10.75-23.1-24-23.1c-13.25 0-24 10.78-24 24.03C519.1 349.2 530.7 359.1 543.1 359.1z\"],\n    \"head-side-mask\": [512, 512, [], \"e063\", \"M.1465 184.4C-2.166 244.2 23.01 298 63.99 334.9L63.99 512h160L224 316.5L3.674 156.2C1.871 165.4 .5195 174.8 .1465 184.4zM336 368H496L512 320h-255.1l.0178 192h145.9c27.55 0 52-17.63 60.71-43.76L464 464h-127.1c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16h138.7l10.67-32h-149.3c-8.836 0-16-7.164-16-16C320 375.2 327.2 368 336 368zM509.2 275c-20.1-47.13-48.49-151.8-73.11-186.8C397.6 33.63 334.5 0 266.1 0H200C117.1 0 42.48 50.57 13.25 123.7L239.2 288h272.6C511.8 283.7 511.1 279.3 509.2 275zM352 224c-17.62 0-32-14.38-32-32s14.38-32 32-32c17.62 0 31.1 14.38 31.1 32S369.6 224 352 224z\"],\n    \"head-side-virus\": [512, 512, [], \"e064\", \"M208 175.1c-8.836 0-16 7.162-16 16c0 8.836 7.163 15.1 15.1 15.1s16-7.164 16-16C224 183.2 216.8 175.1 208 175.1zM272 239.1c-8.836 0-15.1 7.163-15.1 16c0 8.836 7.165 16 16 16s16-7.164 16-16C288 247.2 280.8 239.1 272 239.1zM509.2 275c-20.94-47.13-48.46-151.7-73.1-186.8C397.7 33.59 334.6 0 266.1 0H192C85.95 0 0 85.95 0 192c0 56.8 24.8 107.7 64 142.8L64 512h256l-.0044-64h63.99c35.34 0 63.1-28.65 63.1-63.1V320h31.98C503.1 320 518.6 296.2 509.2 275zM368 240h-12.12c-28.51 0-42.79 34.47-22.63 54.63l8.576 8.576c6.25 6.25 6.25 16.38 0 22.62c-3.125 3.125-7.219 4.688-11.31 4.688s-8.188-1.562-11.31-4.688l-8.576-8.576c-20.16-20.16-54.63-5.881-54.63 22.63V352c0 8.844-7.156 16-16 16s-16-7.156-16-16v-12.12c0-28.51-34.47-42.79-54.63-22.63l-8.576 8.576c-3.125 3.125-7.219 4.688-11.31 4.688c-4.096 0-8.188-1.562-11.31-4.688c-6.25-6.25-6.25-16.38 0-22.62l8.577-8.576C166.9 274.5 152.6 240 124.1 240H112c-8.844 0-16-7.156-16-16s7.157-16 16-16L124.1 208c28.51 0 42.79-34.47 22.63-54.63L138.2 144.8c-6.25-6.25-6.25-16.38 0-22.62s16.38-6.25 22.63 0L169.4 130.7c20.16 20.16 54.63 5.881 54.63-22.63V96c0-8.844 7.156-16 16-16S256 87.16 256 96v12.12c0 28.51 34.47 42.79 54.63 22.63l8.576-8.576c6.25-6.25 16.38-6.25 22.63 0s6.25 16.38 0 22.62L333.3 153.4C313.1 173.5 327.4 208 355.9 208l12.12-.0004c8.844 0 15.1 7.157 15.1 16S376.8 240 368 240z\"],\n    \"heading\": [448, 512, [\"header\"], \"f1dc\", \"M448 448c0 17.69-14.33 32-32 32h-96c-17.67 0-32-14.31-32-32s14.33-32 32-32h16v-144h-224v144H128c17.67 0 32 14.31 32 32s-14.33 32-32 32H32c-17.67 0-32-14.31-32-32s14.33-32 32-32h16v-320H32c-17.67 0-32-14.31-32-32s14.33-32 32-32h96c17.67 0 32 14.31 32 32s-14.33 32-32 32H112v112h224v-112H320c-17.67 0-32-14.31-32-32s14.33-32 32-32h96c17.67 0 32 14.31 32 32s-14.33 32-32 32h-16v320H416C433.7 416 448 430.3 448 448z\"],\n    \"headphones\": [512, 512, [127911], \"f025\", \"M512 287.9l-.0042 112C511.1 444.1 476.1 480 432 480c-26.47 0-48-21.56-48-48.06V304.1C384 277.6 405.5 256 432 256c10.83 0 20.91 2.723 30.3 6.678C449.7 159.1 362.1 80.13 256 80.13S62.29 159.1 49.7 262.7C59.09 258.7 69.17 256 80 256C106.5 256 128 277.6 128 304.1v127.9C128 458.4 106.5 480 80 480c-44.11 0-79.1-35.88-79.1-80.06L0 288c0-141.2 114.8-256 256-256c140.9 0 255.6 114.5 255.1 255.3C511.1 287.5 511.1 287.7 512 287.9z\"],\n    \"headphones-simple\": [512, 512, [\"headphones-alt\"], \"f58f\", \"M256 32C112.9 32 4.563 151.1 0 288v104C0 405.3 10.75 416 23.1 416S48 405.3 48 392V288c0-114.7 93.34-207.8 208-207.8C370.7 80.2 464 173.3 464 288v104C464 405.3 474.7 416 488 416S512 405.3 512 392V287.1C507.4 151.1 399.1 32 256 32zM160 288L144 288c-35.34 0-64 28.7-64 64.13v63.75C80 451.3 108.7 480 144 480L160 480c17.66 0 32-14.34 32-32.05v-127.9C192 302.3 177.7 288 160 288zM368 288L352 288c-17.66 0-32 14.32-32 32.04v127.9c0 17.7 14.34 32.05 32 32.05L368 480c35.34 0 64-28.7 64-64.13v-63.75C432 316.7 403.3 288 368 288z\"],\n    \"headset\": [512, 512, [], \"f590\", \"M191.1 224c0-17.72-14.34-32.04-32-32.04L144 192c-35.34 0-64 28.66-64 64.08v47.79C80 339.3 108.7 368 144 368H160c17.66 0 32-14.36 32-32.06L191.1 224zM256 0C112.9 0 4.583 119.1 .0208 256L0 296C0 309.3 10.75 320 23.1 320S48 309.3 48 296V256c0-114.7 93.34-207.8 208-207.8C370.7 48.2 464 141.3 464 256v144c0 22.09-17.91 40-40 40h-110.7C305 425.7 289.7 416 272 416H241.8c-23.21 0-44.5 15.69-48.87 38.49C187 485.2 210.4 512 239.1 512H272c17.72 0 33.03-9.711 41.34-24H424c48.6 0 88-39.4 88-88V256C507.4 119.1 399.1 0 256 0zM368 368c35.34 0 64-28.7 64-64.13V256.1C432 220.7 403.3 192 368 192l-16 0c-17.66 0-32 14.34-32 32.04L320 335.9C320 353.7 334.3 368 352 368H368z\"],\n    \"heart\": [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 10084, 61578, 9829], \"f004\", \"M0 190.9V185.1C0 115.2 50.52 55.58 119.4 44.1C164.1 36.51 211.4 51.37 244 84.02L256 96L267.1 84.02C300.6 51.37 347 36.51 392.6 44.1C461.5 55.58 512 115.2 512 185.1V190.9C512 232.4 494.8 272.1 464.4 300.4L283.7 469.1C276.2 476.1 266.3 480 256 480C245.7 480 235.8 476.1 228.3 469.1L47.59 300.4C17.23 272.1 .0003 232.4 .0003 190.9L0 190.9z\"],\n    \"heart-crack\": [512, 512, [128148, \"heart-broken\"], \"f7a9\", \"M119.4 44.1C142.7 40.22 166.2 42.2 187.1 49.43L237.8 126.9L162.3 202.3C160.8 203.9 159.1 205.1 160 208.2C160 210.3 160.1 212.4 162.6 213.9L274.6 317.9C277.5 320.6 281.1 320.7 285.1 318.2C288.2 315.6 288.9 311.2 286.8 307.8L226.4 209.7L317.1 134.1C319.7 131.1 320.7 128.5 319.5 125.3L296.8 61.74C325.4 45.03 359.2 38.53 392.6 44.1C461.5 55.58 512 115.2 512 185.1V190.9C512 232.4 494.8 272.1 464.4 300.4L283.7 469.1C276.2 476.1 266.3 480 256 480C245.7 480 235.8 476.1 228.3 469.1L47.59 300.4C17.23 272.1 0 232.4 0 190.9V185.1C0 115.2 50.52 55.58 119.4 44.09V44.1z\"],\n    \"heart-pulse\": [576, 512, [\"heartbeat\"], \"f21e\", \"M352.4 243.8l-49.83 99.5c-6.009 12-23.41 11.62-28.92-.625L216.7 216.3l-30.05 71.75L88.55 288l176.4 182.2c12.66 13.07 33.36 13.07 46.03 0l176.4-182.2l-112.1 .0052L352.4 243.8zM495.2 62.86c-54.36-46.98-137.5-38.5-187.5 13.06L288 96.25L268.3 75.92C218.3 24.36 135.2 15.88 80.81 62.86C23.37 112.5 16.84 197.6 60.18 256h105l35.93-86.25c5.508-12.88 23.66-13.12 29.54-.375l58.21 129.4l49.07-98c5.884-11.75 22.78-11.75 28.67 0l27.67 55.25h121.5C559.2 197.6 552.6 112.5 495.2 62.86z\"],\n    \"helicopter\": [640, 512, [128641], \"f533\", \"M127.1 32C127.1 14.33 142.3 0 159.1 0H544C561.7 0 576 14.33 576 32C576 49.67 561.7 64 544 64H384V128H416C504.4 128 576 199.6 576 288V352C576 369.7 561.7 384 544 384H303.1C293.9 384 284.4 379.3 278.4 371.2L191.1 256L47.19 198.1C37.65 194.3 30.52 186.1 28.03 176.1L4.97 83.88C2.445 73.78 10.08 64 20.49 64H47.1C58.07 64 67.56 68.74 73.6 76.8L111.1 128H319.1V64H159.1C142.3 64 127.1 49.67 127.1 32V32zM384 320H512V288C512 234.1 469 192 416 192H384V320zM630.6 470.6L626.7 474.5C602.7 498.5 570.2 512 536.2 512H255.1C238.3 512 223.1 497.7 223.1 480C223.1 462.3 238.3 448 255.1 448H536.2C553.2 448 569.5 441.3 581.5 429.3L585.4 425.4C597.9 412.9 618.1 412.9 630.6 425.4C643.1 437.9 643.1 458.1 630.6 470.6L630.6 470.6z\"],\n    \"helmet-safety\": [576, 512, [\"hard-hat\", \"hat-hard\"], \"f807\", \"M544 280.9c0-89.17-61.83-165.4-139.6-197.4L352 174.2V49.78C352 39.91 344.1 32 334.2 32H241.8C231.9 32 224 39.91 224 49.78v124.4L171.6 83.53C93.83 115.5 32 191.7 32 280.9L31.99 352h512L544 280.9zM574.7 393.7C572.2 387.8 566.4 384 560 384h-544c-6.375 0-12.16 3.812-14.69 9.656c-2.531 5.875-1.344 12.69 3.062 17.34C7.031 413.8 72.02 480 287.1 480s280.1-66.19 283.6-69C576 406.3 577.2 399.5 574.7 393.7z\"],\n    \"highlighter\": [576, 512, [], \"f591\", \"M143.1 320V248.3C143.1 233 151.2 218.7 163.5 209.6L436.6 8.398C444 2.943 452.1 0 462.2 0C473.6 0 484.5 4.539 492.6 12.62L547.4 67.38C555.5 75.46 559.1 86.42 559.1 97.84C559.1 107 557.1 115.1 551.6 123.4L350.4 396.5C341.3 408.8 326.1 416 311.7 416H239.1L214.6 441.4C202.1 453.9 181.9 453.9 169.4 441.4L118.6 390.6C106.1 378.1 106.1 357.9 118.6 345.4L143.1 320zM489.4 99.92L460.1 70.59L245 229L330.1 314.1L489.4 99.92zM23.03 466.3L86.06 403.3L156.7 473.9L125.7 504.1C121.2 509.5 115.1 512 108.7 512H40C26.75 512 16 501.3 16 488V483.3C16 476.1 18.53 470.8 23.03 466.3V466.3z\"],\n    \"hippo\": [640, 512, [129435], \"f6ed\", \"M584.2 96.36c-28.88-1.701-54.71 17.02-79.74 26.49C490 88.22 455.9 64 416 64c-11.25 0-22 2.252-32 5.877V56C384 42.75 373.2 32 360 32h-16C330.8 32 320 42.75 320 56v49C285.1 79.62 241.2 64 192 64C85.1 64 0 135.6 0 224v232C0 469.3 10.75 480 24 480h48C85.25 480 96 469.3 96 456v-62.87C128.4 407.5 166.8 416 208 416s79.63-8.492 112-22.87V456c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24V288h128v32c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V288c17.62 0 32-14.38 32-32l-.0001-96.07C639.1 127.8 616.4 98.25 584.2 96.36zM447.1 176c-8.875 0-16-7.125-16-16S439.1 144 448 144s16 7.125 16 16S456.9 176 447.1 176z\"],\n    \"hockey-puck\": [512, 512, [], \"f453\", \"M0 160c0-53 114.6-96 256-96s256 43 256 96s-114.6 96-256 96S0 213 0 160zM255.1 303.1C156.4 303.1 56.73 283.4 0 242.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2C455.3 283.4 355.6 303.1 255.1 303.1z\"],\n    \"holly-berry\": [512, 512, [], \"f7aa\", \"M287.1 143.1c0 26.5 21.5 47.1 47.1 47.1c26.5 0 48-21.5 48-47.1s-21.5-47.1-48-47.1C309.5 95.99 287.1 117.5 287.1 143.1zM176 191.1c26.5 0 47.1-21.5 47.1-47.1S202.5 95.96 176 95.96c-26.5 0-47.1 21.5-47.1 47.1S149.5 191.1 176 191.1zM303.1 47.1C303.1 21.5 282.5 0 255.1 0c-26.5 0-47.1 21.5-47.1 47.1S229.5 95.99 255.1 95.99C282.5 95.99 303.1 74.5 303.1 47.1zM243.7 242.6C245.3 229.7 231.9 220.1 219.5 225.5C179.7 242.8 137.8 251.4 96.72 250.8C86.13 250.6 78.49 260.7 81.78 270.4C86.77 285.7 90.33 301.4 92.44 317.7c2.133 16.15-9.387 31.26-26.12 34.23c-16.87 2.965-33.7 4.348-50.48 4.152c-10.6-.0586-18.37 10.05-15.08 19.74c12.4 35.79 16.57 74.93 12.12 114.7c-1.723 14.96 13.71 25.67 28.02 19.8c38.47-15.95 78.77-23.81 118.2-23.34c10.58 .1953 18.36-9.91 15.07-19.6c-5.141-15.15-8.68-31.06-10.79-47.34c-2.133-16.16 9.371-31.13 26.24-34.09c16.73-2.973 33.57-4.496 50.36-4.301c10.73 .0781 18.51-10.03 15.22-19.72C242.5 324.7 238.5 283.9 243.7 242.6zM496.2 356.1c-16.78 .1953-33.61-1.188-50.48-4.152c-16.73-2.973-28.25-18.08-26.12-34.23c2.115-16.28 5.67-32.05 10.66-47.32c3.289-9.691-4.35-19.81-14.93-19.62c-41.11 .6484-83.01-7.965-122.7-25.23c-6.85-2.969-13.71-1.18-18.47 2.953c1.508 5.836 2.102 11.93 1.332 18.05c-4.539 36.23-1.049 72.56 10.12 105.1c3.395 9.988 3.029 20.73-.4766 30.52c12.44 .5 24.89 1.602 37.28 3.801c16.87 2.957 28.37 17.93 26.24 34.09c-2.115 16.27-5.654 32.19-10.79 47.34c-3.289 9.691 4.486 19.8 15.07 19.6c39.47-.4766 79.77 7.383 118.2 23.34c14.31 5.867 29.74-4.844 28.02-19.8c-4.451-39.81-.2832-78.95 12.12-114.7C514.5 366.1 506.8 356 496.2 356.1z\"],\n    \"horse\": [576, 512, [128014], \"f6f0\", \"M575.9 76.61c0-8.125-3.05-15.84-8.55-21.84c-3.875-4-8.595-9.125-13.72-14.5c11.12-6.75 19.47-17.51 22.22-30.63c.9999-5-2.849-9.641-7.974-9.641L447.9 0c-70.62 0-127.9 57.25-127.9 128L159.1 128c-28.87 0-54.38 12.1-72 33.12L87.1 160C39.5 160 .0001 199.5 .0001 248L0 304c0 8.875 7.125 15.1 15.1 15.1L31.1 320c8.874 0 15.1-7.125 15.1-16l.0005-56c0-13.25 6.884-24.4 16.76-31.65c-.125 2.5-.758 5.024-.758 7.649c0 27.62 11.87 52.37 30.5 69.87l-25.65 68.61c-4.586 12.28-5.312 25.68-2.128 38.4l21.73 86.89C92.02 502 104.8 512 119.5 512h32.98c20.81 0 36.08-19.55 31.05-39.74L162.2 386.9l23.78-63.61l133.1 22.34L319.1 480c0 17.67 14.33 32 31.1 32h31.1c17.67 0 31.1-14.33 31.1-32l.0166-161.8C435.7 297.1 447.1 270.5 447.1 240c0-.25-.1025-.3828-.1025-.6328V136.9L463.9 144l18.95 37.72c7.481 14.86 25.08 21.55 40.52 15.34l32.54-13.05c12.13-4.878 20.11-16.67 20.09-29.74L575.9 76.61zM511.9 96c-8.75 0-15.1-7.125-15.1-16S503.1 64 511.9 64c8.874 0 15.1 7.125 15.1 16S520.8 96 511.9 96z\"],\n    \"horse-head\": [512, 512, [], \"f7ab\", \"M509.8 332.5l-69.89-164.3c-14.88-41.25-50.38-70.98-93.01-79.24c18-10.63 46.35-35.9 34.23-82.29c-1.375-5.001-7.112-7.972-11.99-6.097l-202.3 75.66C35.89 123.4 0 238.9 0 398.8v81.24C0 497.7 14.25 512 32 512h236.2c23.75 0 39.3-25.03 28.55-46.28l-40.78-81.71V383.3c-45.63-3.5-84.66-30.7-104.3-69.58c-1.625-3.125-.9342-6.951 1.566-9.327l12.11-12.11c3.875-3.875 10.64-2.692 12.89 2.434c14.88 33.63 48.17 57.38 87.42 57.38c17.13 0 33.05-5.091 46.8-13.22l46 63.9c6 8.501 15.75 13.34 26 13.34h50.28c8.501 0 16.61-3.388 22.61-9.389l45.34-39.84C511.6 357.7 514.4 344.2 509.8 332.5zM328.1 223.1c-13.25 0-23.96-10.75-23.96-24c0-13.25 10.75-23.92 24-23.92s23.94 10.73 23.94 23.98C352 213.3 341.3 223.1 328.1 223.1z\"],\n    \"hospital\": [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M192 48C192 21.49 213.5 0 240 0H400C426.5 0 448 21.49 448 48V512H368V432C368 405.5 346.5 384 320 384C293.5 384 272 405.5 272 432V512H192V48zM312 64C303.2 64 296 71.16 296 80V104H272C263.2 104 256 111.2 256 120V136C256 144.8 263.2 152 272 152H296V176C296 184.8 303.2 192 312 192H328C336.8 192 344 184.8 344 176V152H368C376.8 152 384 144.8 384 136V120C384 111.2 376.8 104 368 104H344V80C344 71.16 336.8 64 328 64H312zM160 96V512H48C21.49 512 0 490.5 0 464V320H80C88.84 320 96 312.8 96 304C96 295.2 88.84 288 80 288H0V224H80C88.84 224 96 216.8 96 208C96 199.2 88.84 192 80 192H0V144C0 117.5 21.49 96 48 96H160zM592 96C618.5 96 640 117.5 640 144V192H560C551.2 192 544 199.2 544 208C544 216.8 551.2 224 560 224H640V288H560C551.2 288 544 295.2 544 304C544 312.8 551.2 320 560 320H640V464C640 490.5 618.5 512 592 512H480V96H592z\"],\n    \"hospital-user\": [576, 512, [], \"f80d\", \"M272 0C298.5 0 320 21.49 320 48V367.8C281.8 389.2 256 430 256 476.9C256 489.8 259.6 501.8 265.9 512H48C21.49 512 0 490.5 0 464V384H144C152.8 384 160 376.8 160 368C160 359.2 152.8 352 144 352H0V288H144C152.8 288 160 280.8 160 272C160 263.2 152.8 256 144 256H0V48C0 21.49 21.49 0 48 0H272zM152 64C143.2 64 136 71.16 136 80V104H112C103.2 104 96 111.2 96 120V136C96 144.8 103.2 152 112 152H136V176C136 184.8 143.2 192 152 192H168C176.8 192 184 184.8 184 176V152H208C216.8 152 224 144.8 224 136V120C224 111.2 216.8 104 208 104H184V80C184 71.16 176.8 64 168 64H152zM512 272C512 316.2 476.2 352 432 352C387.8 352 352 316.2 352 272C352 227.8 387.8 192 432 192C476.2 192 512 227.8 512 272zM288 477.1C288 425.7 329.7 384 381.1 384H482.9C534.3 384 576 425.7 576 477.1C576 496.4 560.4 512 541.1 512H322.9C303.6 512 288 496.4 288 477.1V477.1z\"],\n    \"hot-tub-person\": [512, 512, [\"hot-tub\"], \"f593\", \"M414.3 177.6C415.3 185.9 421.1 192 429.1 192h16.13c9.5 0 17-8.625 16-18.38C457.8 134.5 439.6 99.12 412 76.5c-17.38-14.12-28.88-36.75-32-62.12C379 6.125 372.3 0 364.3 0h-16.12c-9.5 0-17.12 8.625-16 18.38c4.375 39.12 22.38 74.5 50.13 97.13C399.6 129.6 411 152.2 414.3 177.6zM306.3 177.6C307.3 185.9 313.1 192 321.1 192h16.13c9.5 0 17-8.625 16-18.38C349.8 134.5 331.6 99.12 304 76.5c-17.38-14.12-28.88-36.75-32-62.12C271 6.125 264.3 0 256.3 0h-16.17C230.6 0 223 8.625 224.1 18.38C228.5 57.5 246.5 92.88 274.3 115.5C291.6 129.6 303 152.2 306.3 177.6zM480 256h-224L145.1 172.8C133.1 164.5 120.5 160 106.6 160H64C28.62 160 0 188.6 0 224v224c0 35.38 28.62 64 64 64h384c35.38 0 64-28.62 64-64V288C512 270.4 497.6 256 480 256zM128 440C128 444.4 124.4 448 120 448h-16C99.62 448 96 444.4 96 440v-112C96 323.6 99.62 320 104 320h16C124.4 320 128 323.6 128 328V440zM224 440C224 444.4 220.4 448 216 448h-16C195.6 448 192 444.4 192 440v-112C192 323.6 195.6 320 200 320h16C220.4 320 224 323.6 224 328V440zM320 440c0 4.375-3.625 8-8 8h-16C291.6 448 288 444.4 288 440v-112c0-4.375 3.625-8 8-8h16c4.375 0 8 3.625 8 8V440zM416 440c0 4.375-3.625 8-8 8h-16C387.6 448 384 444.4 384 440v-112c0-4.375 3.625-8 8-8h16c4.375 0 8 3.625 8 8V440zM64 128c35.38 0 64-28.62 64-64S99.38 0 64 0S0 28.62 0 64S28.62 128 64 128z\"],\n    \"hotdog\": [512, 512, [127789], \"f80f\", \"M488.6 23.44c-31.06-31.19-81.76-31.16-112.8 .0313L24.46 374.8c-20.83 19.96-29.19 49.66-21.83 77.6c7.36 27.94 29.07 49.65 57.02 57.01c27.94 7.36 57.64-1 77.6-21.83l351.3-351.3C519.7 105.2 519.8 54.5 488.6 23.44zM438.8 118.4c-19.59 19.59-37.39 22.52-51.74 25.01c-12.97 2.246-22.33 3.867-34.68 16.22c-12.35 12.35-13.97 21.71-16.22 34.69c-2.495 14.35-5.491 32.19-25.08 51.78c-19.59 19.59-37.43 22.58-51.78 25.08C246.3 273.4 236.9 275.1 224.6 287.4c-12.35 12.35-13.97 21.71-16.22 34.68C205.9 336.4 202.9 354.3 183.3 373.9c-19.59 19.59-37.43 22.58-51.78 25.08C118.5 401.2 109.2 402.8 96.83 415.2c-6.238 6.238-16.34 6.238-22.58 0c-6.238-6.238-6.238-16.35 0-22.58c19.59-19.59 37.43-22.58 51.78-25.07c12.97-2.245 22.33-3.869 34.68-16.22c12.35-12.35 13.97-21.71 16.22-34.69c2.495-14.35 5.492-32.19 25.08-51.78s37.43-22.58 51.78-25.08c12.97-2.246 22.33-3.869 34.68-16.22s13.97-21.71 16.22-34.68c2.495-14.35 5.492-32.19 25.08-51.78c19.59-19.59 37.43-22.58 51.78-25.07c12.97-2.246 22.28-3.815 34.63-16.17c6.238-6.238 16.36-6.238 22.59 0C444.1 102.1 444.1 112.2 438.8 118.4zM32.44 321.5l290-290l-11.48-11.6c-24.95-24.95-63.75-26.57-86.58-3.743L17.1 223.4C-5.73 246.3-4.108 285.1 20.84 310L32.44 321.5zM480.6 189.5l-290 290l11.48 11.6c24.95 24.95 63.75 26.57 86.58 3.743l207.3-207.3c22.83-22.83 21.21-61.63-3.743-86.58L480.6 189.5z\"],\n    \"hotel\": [512, 512, [127976], \"f594\", \"M480 0C497.7 0 512 14.33 512 32C512 49.67 497.7 64 480 64V448C497.7 448 512 462.3 512 480C512 497.7 497.7 512 480 512H304V448H208V512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H480zM112 96C103.2 96 96 103.2 96 112V144C96 152.8 103.2 160 112 160H144C152.8 160 160 152.8 160 144V112C160 103.2 152.8 96 144 96H112zM224 144C224 152.8 231.2 160 240 160H272C280.8 160 288 152.8 288 144V112C288 103.2 280.8 96 272 96H240C231.2 96 224 103.2 224 112V144zM368 96C359.2 96 352 103.2 352 112V144C352 152.8 359.2 160 368 160H400C408.8 160 416 152.8 416 144V112C416 103.2 408.8 96 400 96H368zM96 240C96 248.8 103.2 256 112 256H144C152.8 256 160 248.8 160 240V208C160 199.2 152.8 192 144 192H112C103.2 192 96 199.2 96 208V240zM240 192C231.2 192 224 199.2 224 208V240C224 248.8 231.2 256 240 256H272C280.8 256 288 248.8 288 240V208C288 199.2 280.8 192 272 192H240zM352 240C352 248.8 359.2 256 368 256H400C408.8 256 416 248.8 416 240V208C416 199.2 408.8 192 400 192H368C359.2 192 352 199.2 352 208V240zM256 288C211.2 288 173.5 318.7 162.1 360.2C159.7 373.1 170.7 384 184 384H328C341.3 384 352.3 373.1 349 360.2C338.5 318.7 300.8 288 256 288z\"],\n    \"hourglass\": [384, 512, [62032, 9203, \"hourglass-2\", \"hourglass-half\"], \"f254\", \"M352 0C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H352zM111.1 128H272C282.4 112.4 288 93.98 288 74.98V64H96V74.98C96 93.98 101.6 112.4 111.1 128zM111.1 384H272C268.5 378.7 264.5 373.7 259.9 369.1L192 301.3L124.1 369.1C119.5 373.7 115.5 378.7 111.1 384V384z\"],\n    \"hourglass-empty\": [384, 512, [], \"f252\", \"M0 32C0 14.33 14.33 0 32 0H352C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32zM96 64V74.98C96 100.4 106.1 124.9 124.1 142.9L192 210.7L259.9 142.9C277.9 124.9 288 100.4 288 74.98V64H96zM96 448H288V437C288 411.6 277.9 387.1 259.9 369.1L192 301.3L124.1 369.1C106.1 387.1 96 411.6 96 437V448z\"],\n    \"hourglass-end\": [384, 512, [8987, \"hourglass-3\"], \"f253\", \"M352 0C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H352zM124.1 142.9L192 210.7L259.9 142.9C277.9 124.9 288 100.4 288 74.98V64H96V74.98C96 100.4 106.1 124.9 124.1 142.9z\"],\n    \"hourglass-start\": [384, 512, [\"hourglass-1\"], \"f251\", \"M352 0C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H352zM259.9 369.1L192 301.3L124.1 369.1C106.1 387.1 96 411.6 96 437V448H288V437C288 411.6 277.9 387.1 259.9 369.1V369.1z\"],\n    \"house\": [576, 512, [63498, 63500, 127968, \"home\", \"home-alt\", \"home-lg-alt\"], \"f015\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.5 450.5 512.3 453.1 512 455.8V472C512 494.1 494.1 512 472 512H456C454.9 512 453.8 511.1 452.7 511.9C451.3 511.1 449.9 512 448.5 512H392C369.9 512 352 494.1 352 472V384C352 366.3 337.7 352 320 352H256C238.3 352 224 366.3 224 384V472C224 494.1 206.1 512 184 512H128.1C126.6 512 125.1 511.9 123.6 511.8C122.4 511.9 121.2 512 120 512H104C81.91 512 64 494.1 64 472V360C64 359.1 64.03 358.1 64.09 357.2V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5L575.8 255.5z\"],\n    \"house-chimney\": [576, 512, [63499, \"home-lg\"], \"e3af\", \"M511.8 287.6L512.5 447.7C512.5 450.5 512.3 453.1 512 455.8V472C512 494.1 494.1 512 472 512H456C454.9 512 453.8 511.1 452.7 511.9C451.3 511.1 449.9 512 448.5 512H392C369.9 512 352 494.1 352 472V384C352 366.3 337.7 352 320 352H256C238.3 352 224 366.3 224 384V472C224 494.1 206.1 512 184 512H128.1C126.6 512 125.1 511.9 123.6 511.8C122.4 511.9 121.2 512 120 512H104C81.91 512 64 494.1 64 472V360C64 359.1 64.03 358.1 64.09 357.2V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6L511.8 287.6z\"],\n    \"house-chimney-crack\": [576, 512, [\"house-damage\"], \"f6f1\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.6 483.2 483.9 512 448.5 512H326.4L288 448L368.8 380.7C376.6 374.1 376.5 362.1 368.5 355.8L250.6 263.2C235.1 251.7 216.8 270.1 227.8 285.2L288 368L202.5 439.2C196.5 444.3 194.1 452.1 199.1 459.8L230.4 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5L575.8 255.5z\"],\n    \"house-chimney-medical\": [576, 512, [\"clinic-medical\"], \"f7f2\", \"M511.8 287.6L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6L511.8 287.6zM400 248C400 239.2 392.8 232 384 232H328V176C328 167.2 320.8 160 312 160H264C255.2 160 248 167.2 248 176V232H192C183.2 232 176 239.2 176 248V296C176 304.8 183.2 312 192 312H248V368C248 376.8 255.2 384 264 384H312C320.8 384 328 376.8 328 368V312H384C392.8 312 400 304.8 400 296V248z\"],\n    \"house-chimney-user\": [576, 512, [], \"e065\", \"M511.8 287.6L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6L511.8 287.6zM288 288C323.3 288 352 259.3 352 224C352 188.7 323.3 160 288 160C252.7 160 224 188.7 224 224C224 259.3 252.7 288 288 288zM192 416H384C392.8 416 400 408.8 400 400C400 355.8 364.2 320 320 320H256C211.8 320 176 355.8 176 400C176 408.8 183.2 416 192 416z\"],\n    \"house-chimney-window\": [576, 512, [], \"e00d\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5L575.8 255.5zM248 192C234.7 192 224 202.7 224 216V296C224 309.3 234.7 320 248 320H328C341.3 320 352 309.3 352 296V216C352 202.7 341.3 192 328 192H248z\"],\n    \"house-crack\": [576, 512, [], \"e3b1\", \"M511.8 287.6L512.5 447.7C512.6 483.2 483.9 512 448.5 512H326.4L288 448L368.8 380.7C376.6 374.1 376.5 362.1 368.5 355.8L250.6 263.2C235.1 251.7 216.8 270.1 227.8 285.2L288 368L202.5 439.2C196.5 444.3 194.1 452.1 199.1 459.8L230.4 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8z\"],\n    \"house-laptop\": [640, 512, [\"laptop-house\"], \"e066\", \"M218.3 8.486C230.6-2.829 249.4-2.829 261.7 8.486L469.7 200.5C476.4 206.7 480 215.2 480 224H336C316.9 224 299.7 232.4 288 245.7V208C288 199.2 280.8 192 272 192H208C199.2 192 192 199.2 192 208V272C192 280.8 199.2 288 208 288H271.1V416H112C85.49 416 64 394.5 64 368V256H32C18.83 256 6.996 247.9 2.198 235.7C-2.6 223.4 .6145 209.4 10.3 200.5L218.3 8.486zM336 256H560C577.7 256 592 270.3 592 288V448H624C632.8 448 640 455.2 640 464C640 490.5 618.5 512 592 512H303.1C277.5 512 255.1 490.5 255.1 464C255.1 455.2 263.2 448 271.1 448H303.1V288C303.1 270.3 318.3 256 336 256zM352 304V448H544V304H352z\"],\n    \"house-medical\": [576, 512, [], \"e3b2\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5H575.8zM328 232V176C328 167.2 320.8 160 312 160H264C255.2 160 248 167.2 248 176V232H192C183.2 232 176 239.2 176 248V296C176 304.8 183.2 312 192 312H248V368C248 376.8 255.2 384 264 384H312C320.8 384 328 376.8 328 368V312H384C392.8 312 400 304.8 400 296V248C400 239.2 392.8 232 384 232H328z\"],\n    \"house-user\": [576, 512, [\"home-user\"], \"e1b0\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5H575.8zM288 160C252.7 160 224 188.7 224 224C224 259.3 252.7 288 288 288C323.3 288 352 259.3 352 224C352 188.7 323.3 160 288 160zM256 320C211.8 320 176 355.8 176 400C176 408.8 183.2 416 192 416H384C392.8 416 400 408.8 400 400C400 355.8 364.2 320 320 320H256z\"],\n    \"hryvnia-sign\": [384, 512, [8372, \"hryvnia\"], \"f6f2\", \"M115.1 120.1C102.2 132 82.05 129.8 71.01 115.1C59.97 102.2 62.21 82.05 76.01 71.01L81.94 66.27C109.7 44.08 144.1 32 179.6 32H223C285.4 32 336 82.59 336 144.1C336 155.6 334.5 166.1 331.7 176H352C369.7 176 384 190.3 384 208C384 225.7 369.7 240 352 240H284.2C282.5 241.1 280.8 242.1 279.1 243.1L228.5 272H352C369.7 272 384 286.3 384 304C384 321.7 369.7 336 352 336H123.1C116 344.6 112 355.5 112 367C112 394.1 133.9 416 160.1 416H204.4C225.3 416 245.7 408.9 262.1 395.8L268 391C281.8 379.1 301.9 382.2 312.1 396C324 409.8 321.8 429.9 307.1 440.1L302.1 445.7C274.3 467.9 239.9 480 204.4 480H160.1C98.59 480 48 429.4 48 367C48 356.4 49.49 345.9 52.33 336H32C14.33 336 0 321.7 0 304C0 286.3 14.33 272 32 272H99.82C101.5 270.9 103.2 269.9 104.9 268.9L155.5 240H32C14.33 240 0 225.7 0 208C0 190.3 14.33 176 32 176H260.9C267.1 167.4 272 156.5 272 144.1C272 117.9 250.1 96 223 96H179.6C158.7 96 138.3 103.1 121.9 116.2L115.1 120.1z\"],\n    \"i\": [320, 512, [105], \"49\", \"M320 448c0 17.67-14.31 32-32 32H32c-17.69 0-32-14.33-32-32s14.31-32 32-32h96v-320H32c-17.69 0-32-14.33-32-32s14.31-32 32-32h256c17.69 0 32 14.33 32 32s-14.31 32-32 32h-96v320h96C305.7 416 320 430.3 320 448z\"],\n    \"i-cursor\": [256, 512, [], \"f246\", \"M256 480c0 17.69-14.33 31.1-32 31.1c-38.41 0-72.52-17.35-96-44.23c-23.48 26.88-57.59 44.23-96 44.23c-17.67 0-32-14.31-32-31.1s14.33-32 32-32c35.3 0 64-28.72 64-64V288H64C46.33 288 32 273.7 32 256s14.33-32 32-32h32V128c0-35.28-28.7-64-64-64C14.33 64 0 49.69 0 32s14.33-32 32-32c38.41 0 72.52 17.35 96 44.23c23.48-26.88 57.59-44.23 96-44.23c17.67 0 32 14.31 32 32s-14.33 32-32 32c-35.3 0-64 28.72-64 64v96h32c17.67 0 32 14.31 32 32s-14.33 32-32 32h-32v96c0 35.28 28.7 64 64 64C241.7 448 256 462.3 256 480z\"],\n    \"ice-cream\": [448, 512, [127848], \"f810\", \"M96.06 288.3H351.9L252.6 493.8C250.1 499.2 246 503.8 240.1 507.1C235.9 510.3 230 512 224 512C217.1 512 212.1 510.3 207 507.1C201.1 503.8 197.9 499.2 195.4 493.8L96.06 288.3zM386.3 164C392.1 166.4 397.4 169.9 401.9 174.4C406.3 178.8 409.9 184.1 412.3 189.9C414.7 195.7 415.1 201.1 416 208.3C416 214.5 414.8 220.8 412.4 226.6C409.1 232.4 406.5 237.7 402 242.2C397.6 246.6 392.3 250.2 386.5 252.6C380.7 255 374.4 256.3 368.1 256.3H79.88C67.16 256.3 54.96 251.2 45.98 242.2C37 233.2 31.97 220.1 32 208.3C32.03 195.5 37.1 183.4 46.12 174.4C55.14 165.4 67.35 160.4 80.07 160.4H81.06C80.4 154.9 80.06 149.4 80.04 143.8C80.04 105.7 95.2 69.11 122.2 42.13C149.2 15.15 185.8 0 223.1 0C262.1 0 298.7 15.15 325.7 42.13C352.7 69.11 367.9 105.7 367.9 143.8C367.9 149.4 367.6 154.9 366.9 160.4H367.9C374.2 160.4 380.5 161.6 386.3 164z\"],\n    \"icicles\": [512, 512, [], \"f7ad\", \"M511.4 37.87l-87.54 467.6c-1.625 8.623-14.04 8.634-15.67 .0104L341.4 141.7L295.7 314.2c-2.375 7.624-12.98 7.624-15.36 0L246.3 180.9l-46.49 196.9c-1.875 8.373-13.64 8.373-15.51 0L139.1 190.5L103.6 314.5c-2.375 7.124-12.64 7.198-15.14 .0744L1.357 41.24C-4.768 20.75 10.61 0 31.98 0h448C500 0 515.2 18.25 511.4 37.87z\"],\n    \"icons\": [512, 512, [\"heart-music-camera-bolt\"], \"f86d\", \"M500.3 7.251C507.7 13.33 512 22.41 512 31.1V175.1C512 202.5 483.3 223.1 447.1 223.1C412.7 223.1 383.1 202.5 383.1 175.1C383.1 149.5 412.7 127.1 447.1 127.1V71.03L351.1 90.23V207.1C351.1 234.5 323.3 255.1 287.1 255.1C252.7 255.1 223.1 234.5 223.1 207.1C223.1 181.5 252.7 159.1 287.1 159.1V63.1C287.1 48.74 298.8 35.61 313.7 32.62L473.7 .6198C483.1-1.261 492.9 1.173 500.3 7.251H500.3zM74.66 303.1L86.5 286.2C92.43 277.3 102.4 271.1 113.1 271.1H174.9C185.6 271.1 195.6 277.3 201.5 286.2L213.3 303.1H239.1C266.5 303.1 287.1 325.5 287.1 351.1V463.1C287.1 490.5 266.5 511.1 239.1 511.1H47.1C21.49 511.1-.0019 490.5-.0019 463.1V351.1C-.0019 325.5 21.49 303.1 47.1 303.1H74.66zM143.1 359.1C117.5 359.1 95.1 381.5 95.1 407.1C95.1 434.5 117.5 455.1 143.1 455.1C170.5 455.1 191.1 434.5 191.1 407.1C191.1 381.5 170.5 359.1 143.1 359.1zM440.3 367.1H496C502.7 367.1 508.6 372.1 510.1 378.4C513.3 384.6 511.6 391.7 506.5 396L378.5 508C372.9 512.1 364.6 513.3 358.6 508.9C352.6 504.6 350.3 496.6 353.3 489.7L391.7 399.1H336C329.3 399.1 323.4 395.9 321 389.6C318.7 383.4 320.4 376.3 325.5 371.1L453.5 259.1C459.1 255 467.4 254.7 473.4 259.1C479.4 263.4 481.6 271.4 478.7 278.3L440.3 367.1zM116.7 219.1L19.85 119.2C-8.112 90.26-6.614 42.31 24.85 15.34C51.82-8.137 93.26-3.642 118.2 21.83L128.2 32.32L137.7 21.83C162.7-3.642 203.6-8.137 231.6 15.34C262.6 42.31 264.1 90.26 236.1 119.2L139.7 219.1C133.2 225.6 122.7 225.6 116.7 219.1H116.7z\"],\n    \"id-badge\": [384, 512, [], \"f2c1\", \"M336 0h-288C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48v-416C384 21.49 362.5 0 336 0zM192 160c35.35 0 64 28.65 64 64s-28.65 64-64 64S128 259.3 128 224S156.7 160 192 160zM288 416H96c-8.836 0-16-7.164-16-16C80 355.8 115.8 320 160 320h64c44.18 0 80 35.82 80 80C304 408.8 296.8 416 288 416zM240 96h-96C135.2 96 128 88.84 128 80S135.2 64 144 64h96C248.8 64 256 71.16 256 80S248.8 96 240 96z\"],\n    \"id-card\": [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M528 32h-480C21.49 32 0 53.49 0 80V96h576V80C576 53.49 554.5 32 528 32zM0 432C0 458.5 21.49 480 48 480h480c26.51 0 48-21.49 48-48V128H0V432zM368 192h128C504.8 192 512 199.2 512 208S504.8 224 496 224h-128C359.2 224 352 216.8 352 208S359.2 192 368 192zM368 256h128C504.8 256 512 263.2 512 272S504.8 288 496 288h-128C359.2 288 352 280.8 352 272S359.2 256 368 256zM368 320h128c8.836 0 16 7.164 16 16S504.8 352 496 352h-128c-8.836 0-16-7.164-16-16S359.2 320 368 320zM176 192c35.35 0 64 28.66 64 64s-28.65 64-64 64s-64-28.66-64-64S140.7 192 176 192zM112 352h128c26.51 0 48 21.49 48 48c0 8.836-7.164 16-16 16h-192C71.16 416 64 408.8 64 400C64 373.5 85.49 352 112 352z\"],\n    \"id-card-clip\": [576, 512, [\"id-card-alt\"], \"f47f\", \"M256 128h64c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256C238.3 0 224 14.33 224 32v64C224 113.7 238.3 128 256 128zM528 64H384v48C384 138.5 362.5 160 336 160h-96C213.5 160 192 138.5 192 112V64H48C21.49 64 0 85.49 0 112v352C0 490.5 21.49 512 48 512h480c26.51 0 48-21.49 48-48v-352C576 85.49 554.5 64 528 64zM288 224c35.35 0 64 28.66 64 64s-28.65 64-64 64s-64-28.66-64-64S252.7 224 288 224zM384 448H192c-8.836 0-16-7.164-16-16C176 405.5 197.5 384 224 384h128c26.51 0 48 21.49 48 48C400 440.8 392.8 448 384 448z\"],\n    \"igloo\": [576, 512, [], \"f7ae\", \"M320 160H48.5C100.2 82.82 188.1 32 288 32C298.8 32 309.5 32.6 320 33.76V160zM352 39.14C424.9 55.67 487.2 99.82 527.5 160H352V39.14zM96 192V320H0C0 274 10.77 230.6 29.94 192H96zM192 320H128V192H448V320H384V352H576V432C576 458.5 554.5 480 528 480H352V352C352 316.7 323.3 288 288 288C252.7 288 224 316.7 224 352V480H48C21.49 480 0 458.5 0 432V352H192V320zM480 192H546.1C565.2 230.6 576 274 576 320H480V192z\"],\n    \"image\": [512, 512, [], \"f03e\", \"M447.1 32h-384C28.64 32-.0091 60.65-.0091 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96C511.1 60.65 483.3 32 447.1 32zM111.1 96c26.51 0 48 21.49 48 48S138.5 192 111.1 192s-48-21.49-48-48S85.48 96 111.1 96zM446.1 407.6C443.3 412.8 437.9 416 432 416H82.01c-6.021 0-11.53-3.379-14.26-8.75c-2.73-5.367-2.215-11.81 1.334-16.68l70-96C142.1 290.4 146.9 288 152 288s9.916 2.441 12.93 6.574l32.46 44.51l93.3-139.1C293.7 194.7 298.7 192 304 192s10.35 2.672 13.31 7.125l128 192C448.6 396 448.9 402.3 446.1 407.6z\"],\n    \"image-portrait\": [384, 512, [\"portrait\"], \"f3e0\", \"M336 0h-288c-26.51 0-48 21.49-48 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48v-416C384 21.49 362.5 0 336 0zM192 128c35.35 0 64 28.65 64 64s-28.65 64-64 64S128 227.3 128 192S156.7 128 192 128zM288 384H96c-8.836 0-16-7.164-16-16C80 323.8 115.8 288 160 288h64c44.18 0 80 35.82 80 80C304 376.8 296.8 384 288 384z\"],\n    \"images\": [576, 512, [], \"f302\", \"M528 32H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48H528c26.51 0 48-21.49 48-48v-256C576 53.49 554.5 32 528 32zM223.1 96c17.68 0 32 14.33 32 32S241.7 160 223.1 160c-17.67 0-32-14.33-32-32S206.3 96 223.1 96zM494.1 311.6C491.3 316.8 485.9 320 480 320H192c-6.023 0-11.53-3.379-14.26-8.75c-2.73-5.367-2.215-11.81 1.332-16.68l70-96C252.1 194.4 256.9 192 262 192c5.111 0 9.916 2.441 12.93 6.574l22.35 30.66l62.74-94.11C362.1 130.7 367.1 128 373.3 128c5.348 0 10.34 2.672 13.31 7.125l106.7 160C496.6 300 496.9 306.3 494.1 311.6zM456 432H120c-39.7 0-72-32.3-72-72v-240C48 106.8 37.25 96 24 96S0 106.8 0 120v240C0 426.2 53.83 480 120 480h336c13.25 0 24-10.75 24-24S469.3 432 456 432z\"],\n    \"inbox\": [512, 512, [], \"f01c\", \"M447 56.25C443.5 42 430.7 31.1 416 31.1H96c-14.69 0-27.47 10-31.03 24.25L3.715 304.9C1.247 314.9 0 325.2 0 335.5v96.47c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48v-96.47c0-10.32-1.247-20.6-3.715-30.61L447 56.25zM352 352H160L128 288H72.97L121 96h270l48.03 192H384L352 352z\"],\n    \"indent\": [448, 512, [], \"f03c\", \"M0 64C0 46.33 14.33 32 32 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64zM192 192C192 174.3 206.3 160 224 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H224C206.3 224 192 209.7 192 192zM416 288C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352H224C206.3 352 192 337.7 192 320C192 302.3 206.3 288 224 288H416zM0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480H32C14.33 480 0 465.7 0 448zM25.82 347.9C15.31 356.1 0 348.6 0 335.3V176.7C0 163.4 15.31 155.9 25.82 164.1L127.8 243.4C135.1 249.8 135.1 262.2 127.8 268.6L25.82 347.9z\"],\n    \"indian-rupee-sign\": [320, 512, [\"indian-rupee\", \"inr\"], \"e1bc\", \"M.0022 64C.0022 46.33 14.33 32 32 32H288C305.7 32 320 46.33 320 64C320 81.67 305.7 96 288 96H231.8C241.4 110.4 248.5 126.6 252.4 144H288C305.7 144 320 158.3 320 176C320 193.7 305.7 208 288 208H252.4C239.2 266.3 190.5 311.2 130.3 318.9L274.6 421.1C288.1 432.2 292.3 452.2 282 466.6C271.8 480.1 251.8 484.3 237.4 474L13.4 314C2.083 305.1-2.716 291.5 1.529 278.2C5.774 264.1 18.09 256 32 256H112C144.8 256 173 236.3 185.3 208H32C14.33 208 .0022 193.7 .0022 176C.0022 158.3 14.33 144 32 144H185.3C173 115.7 144.8 96 112 96H32C14.33 96 .0022 81.67 .0022 64V64z\"],\n    \"industry\": [576, 512, [], \"f275\", \"M128 32C145.7 32 160 46.33 160 64V215.4L316.6 131C332.6 122.4 352 134 352 152.2V215.4L508.6 131C524.6 122.4 544 134 544 152.2V432C544 458.5 522.5 480 496 480H80C53.49 480 32 458.5 32 432V64C32 46.33 46.33 32 64 32H128z\"],\n    \"infinity\": [640, 512, [9854, 8734], \"f534\", \"M494.9 96.01c-38.78 0-75.22 15.09-102.6 42.5L320 210.8L247.8 138.5c-27.41-27.41-63.84-42.5-102.6-42.5C65.11 96.01 0 161.1 0 241.1v29.75c0 80.03 65.11 145.1 145.1 145.1c38.78 0 75.22-15.09 102.6-42.5L320 301.3l72.23 72.25c27.41 27.41 63.84 42.5 102.6 42.5C574.9 416 640 350.9 640 270.9v-29.75C640 161.1 574.9 96.01 494.9 96.01zM202.5 328.3c-15.31 15.31-35.69 23.75-57.38 23.75C100.4 352 64 315.6 64 270.9v-29.75c0-44.72 36.41-81.13 81.14-81.13c21.69 0 42.06 8.438 57.38 23.75l72.23 72.25L202.5 328.3zM576 270.9c0 44.72-36.41 81.13-81.14 81.13c-21.69 0-42.06-8.438-57.38-23.75l-72.23-72.25l72.23-72.25c15.31-15.31 35.69-23.75 57.38-23.75C539.6 160 576 196.4 576 241.1V270.9z\"],\n    \"info\": [192, 512, [], \"f129\", \"M160 448h-32V224c0-17.69-14.33-32-32-32L32 192c-17.67 0-32 14.31-32 32s14.33 31.1 32 31.1h32v192H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h128c17.67 0 32-14.31 32-32S177.7 448 160 448zM96 128c26.51 0 48-21.49 48-48S122.5 32.01 96 32.01s-48 21.49-48 48S69.49 128 96 128z\"],\n    \"italic\": [384, 512, [], \"f033\", \"M384 64.01c0 17.69-14.31 32-32 32h-58.67l-133.3 320H224c17.69 0 32 14.31 32 32s-14.31 32-32 32H32c-17.69 0-32-14.31-32-32s14.31-32 32-32h58.67l133.3-320H160c-17.69 0-32-14.31-32-32s14.31-32 32-32h192C369.7 32.01 384 46.33 384 64.01z\"],\n    \"j\": [320, 512, [106], \"4a\", \"M320 64.01v259.4c0 86.36-71.78 156.6-160 156.6s-160-70.26-160-156.6V288c0-17.67 14.31-32 32-32s32 14.33 32 32v35.38c0 51.08 43.06 92.63 96 92.63s96-41.55 96-92.63V64.01c0-17.67 14.31-32 32-32S320 46.34 320 64.01z\"],\n    \"jedi\": [576, 512, [], \"f669\", \"M554.9 293.1l-58.88 58.88h40C493.2 446.1 398.2 511.1 287.1 512c-110.3-.0078-205.2-65.88-247.1-160h40L21.13 293.1C17.75 275.1 16 258.6 16 241.2c0-5.75 .75-11.5 1-17.25h47L22.75 182.7C37.38 117.1 75.86 59.37 130.6 20.5c2.75-2 6.021-3.005 9.272-3.005c5.5 0 10.5 2.75 13.5 7.25c3.125 4.375 3.625 10.13 1.625 15.13C148.5 56.12 145.1 73.62 145.1 91.12c0 45.13 21.13 86.63 57.75 113.8C206.9 207.7 209.4 212.4 209.5 217.2c.25 5-1.751 9.752-5.501 13c-32.75 29.38-47.5 74-38.5 117.1c9.751 48.38 48.88 87.13 97.26 96.5l2.5-65.37l-27.13 18.5c-3.125 2-7.251 1.75-10-.75c-2.75-2.625-3.25-6.75-1.375-10l20.13-33.75l-42.13-8.627c-3.625-.875-6.375-4.125-6.375-7.875s2.75-7 6.375-7.875l42.13-8.75L226.8 285.6C224.9 282.5 225.4 278.4 228.1 275.7c2.75-2.5 6.876-2.875 10-.75l30.38 20.63l11.49-287.8C280.3 3.461 283.7 .0156 287.1 0c4.237 .0156 7.759 3.461 8.009 7.828l11.49 287.8l30.38-20.63c3.125-2.125 7.251-1.75 10 .75c2.75 2.625 3.25 6.75 1.375 9.875l-20.13 33.75l42.13 8.75c3.625 .875 6.375 4.125 6.375 7.875s-2.75 7-6.375 7.875l-42.13 8.627l20.13 33.75c1.875 3.25 1.375 7.375-1.375 10c-2.75 2.5-6.876 2.75-10 .75l-27.13-18.5l2.5 65.37c48.38-9.375 87.51-48.13 97.26-96.5c9.001-43.13-5.75-87.75-38.5-117.1c-3.75-3.25-5.751-8.002-5.501-13c.125-4.875 2.626-9.5 6.626-12.38c36.63-27.13 57.75-68.63 57.75-113.8c0-17.5-3.375-35-9.875-51.25c-2-5-1.5-10.75 1.625-15.13c3-4.5 8.001-7.25 13.5-7.25c3.25 0 6.474 .9546 9.224 2.955c54.75 38.88 93.28 96.67 107.9 162.3l-41.25 41.25h47c.2501 5.75 .9965 11.5 .9965 17.25C559.1 258.6 558.3 275.1 554.9 293.1z\"],\n    \"jet-fighter\": [640, 512, [\"fighter-jet\"], \"f0fb\", \"M160 24C160 10.75 170.7 0 184 0H296C309.3 0 320 10.75 320 24C320 37.25 309.3 48 296 48H280L384 192H500.4C508.1 192 515.7 193.4 522.9 196.1L625 234.4C634 237.8 640 246.4 640 256C640 265.6 634 274.2 625 277.6L522.9 315.9C515.7 318.6 508.1 320 500.4 320H384L280 464H296C309.3 464 320 474.7 320 488C320 501.3 309.3 512 296 512H184C170.7 512 160 501.3 160 488C160 474.7 170.7 464 184 464H192V320H160L105.4 374.6C99.37 380.6 91.23 384 82.75 384H64C46.33 384 32 369.7 32 352V288C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224V160C32 142.3 46.33 128 64 128H82.75C91.23 128 99.37 131.4 105.4 137.4L160 192H192V48H184C170.7 48 160 37.25 160 24V24zM80 240C71.16 240 64 247.2 64 256C64 264.8 71.16 272 80 272H144C152.8 272 160 264.8 160 256C160 247.2 152.8 240 144 240H80z\"],\n    \"joint\": [640, 512, [], \"f595\", \"M444.4 181.1C466.8 196.8 480 222.2 480 249.8V280C480 284.4 483.6 288 488 288h48C540.4 288 544 284.4 544 280V249.8c0-43.25-21-83.5-56.38-108.1C463.9 125 448 99.38 448 70.25V8C448 3.625 444.4 0 440 0h-48C387.6 0 384 3.625 384 8v66.38C384 118.1 408.5 156 444.4 181.1zM195 359C125.1 370.1 59.75 394.8 0 432C83.62 484.2 180.2 512 279 512h88.5l-112.7-131.5C240 363.2 217.4 355.4 195 359zM553.3 87.12C547.6 83.25 544 77.12 544 70.25V8C544 3.625 540.4 0 536 0h-48C483.6 0 480 3.625 480 8v62.25c0 22.13 10.12 43.5 28.62 55.5C550.8 153 576 199.5 576 249.8V280C576 284.4 579.6 288 584 288h48C636.4 288 640 284.4 640 280V249.8C640 184.2 607.6 123.5 553.3 87.12zM360.9 352c-34.38 .125-86.75 .25-88.25 .25l117.9 137.4C402.6 503.9 420.4 512 439.1 512h88.38l-117.9-137.6C397.4 360.1 379.6 352 360.9 352zM616 352H432l117.1 137.6C562.1 503.9 579.9 512 598.6 512H616c13.25 0 24-10.75 24-24v-112C640 362.8 629.3 352 616 352z\"],\n    \"k\": [320, 512, [107], \"4b\", \"M314.3 429.8c10.06 14.53 6.438 34.47-8.094 44.53c-5.562 3.844-11.91 5.688-18.19 5.688c-10.16 0-20.12-4.812-26.34-13.78L128.1 273.3L64 338.9v109.1c0 17.67-14.31 32-32 32s-32-14.33-32-32v-384C0 46.34 14.31 32.01 32 32.01S64 46.34 64 64.01v183.3l201.1-205.7c12.31-12.61 32.63-12.86 45.25-.5c12.62 12.34 12.88 32.61 .5 45.25l-137.2 140.3L314.3 429.8z\"],\n    \"kaaba\": [576, 512, [128331], \"f66b\", \"M0 239.4V197.4L278.1 115.3C284.9 113.6 291.1 113.6 297 115.3L576 197.4V239.4L537.1 228.6C528.6 226.2 519.7 231.2 517.4 239.7C515 248.2 520 257.1 528.5 259.4L576 272.6V409.5C576 431.1 560.4 451.5 538.4 456.4L298.4 509.7C291.6 511.2 284.4 511.2 277.6 509.7L37.59 456.4C15.63 451.5 0 431.1 0 409.5V272.6L47.48 259.4C55.1 257.1 60.98 248.2 58.62 239.7C56.25 231.2 47.43 226.2 38.92 228.6L0 239.4zM292.3 160.6C289.5 159.8 286.5 159.8 283.7 160.6L240.5 172.6C232 174.9 227 183.8 229.4 192.3C231.7 200.8 240.6 205.8 249.1 203.4L288 192.6L326.9 203.4C335.4 205.8 344.3 200.8 346.6 192.3C348.1 183.8 343.1 174.9 335.5 172.6L292.3 160.6zM191.5 219.4C199.1 217.1 204.1 208.2 202.6 199.7C200.3 191.2 191.4 186.2 182.9 188.6L96.52 212.6C88 214.9 83.02 223.8 85.38 232.3C87.75 240.8 96.57 245.8 105.1 243.4L191.5 219.4zM393.1 188.6C384.6 186.2 375.7 191.2 373.4 199.7C371 208.2 376 217.1 384.5 219.4L470.9 243.4C479.4 245.8 488.3 240.8 490.6 232.3C492.1 223.8 487.1 214.9 479.5 212.6L393.1 188.6zM269.9 84.63L0 164V130.6C0 109.9 13.22 91.59 32.82 85.06L272.8 5.061C282.7 1.777 293.3 1.777 303.2 5.061L543.2 85.06C562.8 91.59 576 109.9 576 130.6V164L306.1 84.63C294.3 81.17 281.7 81.17 269.9 84.63V84.63z\"],\n    \"key\": [512, 512, [128273], \"f084\", \"M282.3 343.7L248.1 376.1C244.5 381.5 238.4 384 232 384H192V424C192 437.3 181.3 448 168 448H128V488C128 501.3 117.3 512 104 512H24C10.75 512 0 501.3 0 488V408C0 401.6 2.529 395.5 7.029 391L168.3 229.7C162.9 212.8 160 194.7 160 176C160 78.8 238.8 0 336 0C433.2 0 512 78.8 512 176C512 273.2 433.2 352 336 352C317.3 352 299.2 349.1 282.3 343.7zM376 176C398.1 176 416 158.1 416 136C416 113.9 398.1 96 376 96C353.9 96 336 113.9 336 136C336 158.1 353.9 176 376 176z\"],\n    \"keyboard\": [576, 512, [9000], \"f11c\", \"M512 448H64c-35.35 0-64-28.65-64-64V128c0-35.35 28.65-64 64-64h448c35.35 0 64 28.65 64 64v256C576 419.3 547.3 448 512 448zM128 180v-40C128 133.4 122.6 128 116 128h-40C69.38 128 64 133.4 64 140v40C64 186.6 69.38 192 76 192h40C122.6 192 128 186.6 128 180zM224 180v-40C224 133.4 218.6 128 212 128h-40C165.4 128 160 133.4 160 140v40C160 186.6 165.4 192 172 192h40C218.6 192 224 186.6 224 180zM320 180v-40C320 133.4 314.6 128 308 128h-40C261.4 128 256 133.4 256 140v40C256 186.6 261.4 192 268 192h40C314.6 192 320 186.6 320 180zM416 180v-40C416 133.4 410.6 128 404 128h-40C357.4 128 352 133.4 352 140v40C352 186.6 357.4 192 364 192h40C410.6 192 416 186.6 416 180zM512 180v-40C512 133.4 506.6 128 500 128h-40C453.4 128 448 133.4 448 140v40C448 186.6 453.4 192 460 192h40C506.6 192 512 186.6 512 180zM128 276v-40C128 229.4 122.6 224 116 224h-40C69.38 224 64 229.4 64 236v40C64 282.6 69.38 288 76 288h40C122.6 288 128 282.6 128 276zM224 276v-40C224 229.4 218.6 224 212 224h-40C165.4 224 160 229.4 160 236v40C160 282.6 165.4 288 172 288h40C218.6 288 224 282.6 224 276zM320 276v-40C320 229.4 314.6 224 308 224h-40C261.4 224 256 229.4 256 236v40C256 282.6 261.4 288 268 288h40C314.6 288 320 282.6 320 276zM416 276v-40C416 229.4 410.6 224 404 224h-40C357.4 224 352 229.4 352 236v40C352 282.6 357.4 288 364 288h40C410.6 288 416 282.6 416 276zM512 276v-40C512 229.4 506.6 224 500 224h-40C453.4 224 448 229.4 448 236v40C448 282.6 453.4 288 460 288h40C506.6 288 512 282.6 512 276zM128 372v-40C128 325.4 122.6 320 116 320h-40C69.38 320 64 325.4 64 332v40C64 378.6 69.38 384 76 384h40C122.6 384 128 378.6 128 372zM416 372v-40C416 325.4 410.6 320 404 320h-232C165.4 320 160 325.4 160 332v40C160 378.6 165.4 384 172 384h232C410.6 384 416 378.6 416 372zM512 372v-40C512 325.4 506.6 320 500 320h-40C453.4 320 448 325.4 448 332v40C448 378.6 453.4 384 460 384h40C506.6 384 512 378.6 512 372z\"],\n    \"khanda\": [576, 512, [9772], \"f66d\", \"M447.7 65.1c-6.25-3.5-14.29-2.351-19.29 3.024c-5.125 5.375-5.833 13.37-1.958 19.5c16.5 26.25 25.23 56.34 25.23 87.46c-.25 53.25-26.74 102.6-71.24 132.4l-76.62 53.35v-20.12l44.01-36.12c3.875-4.125 4.983-10.13 2.858-15.26L342.8 273c33.88-19.25 56.94-55.25 56.94-97c0-40.75-22.06-76.12-54.56-95.75l5.151-11.39c2.375-5.5 .9825-11.87-3.518-15.1L287.9 .0074l-59.05 52.77C224.4 57.02 222.1 63.37 225.2 68.87l5.203 11.32C197.1 99.81 175.9 135.2 175.9 175.1c0 41.75 23.08 77.75 56.95 97L224.1 290.2C222.9 295.4 223.9 301.2 227.9 305.5l43.1 36.11v19.91L195.2 308.1c-44.25-29.5-70.72-78.9-70.97-132.1c0-31.12 8.73-61.2 25.23-87.45C153.3 82.4 151.8 74.75 146.8 69.5C141.8 64.12 133.2 63.25 126.8 66.75C48.34 109.6 9.713 205.2 45.34 296c7 18 17.88 34.38 30.5 49l55.92 65.38c4.875 5.75 13.09 7.232 19.71 3.732l79.25-42.25l29.26 20.37l-47.09 32.75c-1.625-.375-3.125-1-4.1-1c-13.25 0-23.97 10.75-23.97 24s10.72 23.1 23.97 23.1c12.13 0 21.74-9.126 23.36-20.75l40.6-28.25v29.91c-9.375 5.625-15.97 15.37-15.97 27.12c0 17.62 14.37 31.1 31.1 31.1c17.63 0 31.1-14.37 31.1-31.1c0-11.75-6.656-21.52-16.03-27.14v-30.12l40.87 28.48c1.625 11.63 11.23 20.75 23.35 20.75c13.25 0 23.98-10.74 23.98-23.99s-10.73-24-23.98-24c-1.875 0-3.375 .625-5 1l-47.09-32.75l29.25-20.37l79.26 42.25c6.625 3.5 14.84 2.018 19.71-3.732l52.51-61.27c18.88-22 33.1-47.49 41.25-75.61C559.6 189.9 521.5 106.2 447.7 65.1zM351.8 176c0 22.25-11.45 41.91-28.82 53.41l-5.613-12.43c-8.75-24.5-8.811-51.11-.061-75.61l7.748-17.12C341.2 135.9 351.8 154.6 351.8 176zM223.8 176c0-21.38 10.67-40.16 26.67-51.79l7.848 17.17c8.75 24.63 8.747 51.11-.0032 75.61L252.7 229.4C235.4 217.9 223.8 198.2 223.8 176z\"],\n    \"kip-sign\": [384, 512, [], \"e1c4\", \"M182.5 224H352C369.7 224 384 238.3 384 256C384 273.7 369.7 288 352 288H182.5L340.8 423.7C354.2 435.2 355.8 455.4 344.3 468.8C332.8 482.2 312.6 483.8 299.2 472.3L128 325.6V448C128 465.7 113.7 480 96 480C78.33 480 64 465.7 64 448V288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H64V64C64 46.33 78.33 32 96 32C113.7 32 128 46.33 128 64V186.4L299.2 39.7C312.6 28.2 332.8 29.76 344.3 43.18C355.8 56.59 354.2 76.8 340.8 88.3L182.5 224z\"],\n    \"kit-medical\": [576, 512, [\"first-aid\"], \"f479\", \"M64 32h32v448H64c-35.35 0-64-28.66-64-64V96C0 60.66 28.65 32 64 32zM128 32h320v448H128V32zM176 282c0 8.835 7.164 16 16 16h53.1V352c0 8.836 7.165 16 16 16h52c8.836 0 16-7.164 16-16V298H384c8.836 0 16-7.165 16-16v-52c0-8.837-7.164-16-16-16h-54V160c0-8.836-7.164-16-16-16h-52c-8.835 0-16 7.164-16 16v54H192c-8.836 0-16 7.163-16 16V282zM512 32h-32v448h32c35.35 0 64-28.66 64-64V96C576 60.66 547.3 32 512 32z\"],\n    \"kiwi-bird\": [576, 512, [], \"f535\", \"M256 405.1V456C256 469.3 245.3 480 232 480C218.7 480 208 469.3 208 456V415.3C202.7 415.8 197.4 416 192 416C175.4 416 159.3 413.9 144 409.1V456C144 469.3 133.3 480 120 480C106.7 480 96 469.3 96 456V390.3C38.61 357.1 0 295.1 0 224C0 117.1 85.96 32 192 32C228.3 32 262.3 42.08 291.2 59.6C322.4 78.44 355.9 96 392.3 96H448C518.7 96 576 153.3 576 224V464C576 470.1 571.5 477.2 564.8 479.3C558.2 481.4 550.9 478.9 546.9 473.2L461.6 351.3C457.1 351.8 452.6 352 448 352H392.3C355.9 352 322.4 369.6 291.2 388.4C280.2 395.1 268.4 400.7 256 405.1zM448 248C461.3 248 472 237.3 472 224C472 210.7 461.3 200 448 200C434.7 200 424 210.7 424 224C424 237.3 434.7 248 448 248z\"],\n    \"l\": [320, 512, [108], \"4c\", \"M320 448c0 17.67-14.31 32-32 32H64c-17.69 0-32-14.33-32-32v-384C32 46.34 46.31 32.01 64 32.01S96 46.34 96 64.01v352h192C305.7 416 320 430.3 320 448z\"],\n    \"landmark\": [512, 512, [127963], \"f66f\", \"M240.1 4.216C249.1-1.405 262-1.405 271.9 4.216L443.6 102.4L447.1 104V104.9L495.9 132.2C508.5 139.4 514.6 154.2 510.9 168.2C507.2 182.2 494.5 192 479.1 192H31.1C17.49 192 4.795 182.2 1.071 168.2C-2.653 154.2 3.524 139.4 16.12 132.2L63.1 104.9V104L68.37 102.4L240.1 4.216zM64 224H128V416H168V224H232V416H280V224H344V416H384V224H448V420.3C448.6 420.6 449.2 420.1 449.8 421.4L497.8 453.4C509.5 461.2 514.7 475.8 510.6 489.3C506.5 502.8 494.1 512 480 512H32C17.9 512 5.46 502.8 1.373 489.3C-2.713 475.8 2.517 461.2 14.25 453.4L62.25 421.4C62.82 420.1 63.41 420.6 64 420.3V224z\"],\n    \"language\": [640, 512, [], \"f1ab\", \"M448 164C459 164 468 172.1 468 184V188H528C539 188 548 196.1 548 208C548 219 539 228 528 228H526L524.4 232.5C515.5 256.1 501.9 279.1 484.7 297.9C485.6 298.4 486.5 298.1 487.4 299.5L506.3 310.8C515.8 316.5 518.8 328.8 513.1 338.3C507.5 347.8 495.2 350.8 485.7 345.1L466.8 333.8C462.4 331.1 457.1 328.3 453.7 325.3C443.2 332.8 431.8 339.3 419.8 344.7L416.1 346.3C406 350.8 394.2 346.2 389.7 336.1C385.2 326 389.8 314.2 399.9 309.7L403.5 308.1C409.9 305.2 416.1 301.1 422 298.3L409.9 286.1C402 278.3 402 265.7 409.9 257.9C417.7 250 430.3 250 438.1 257.9L452.7 272.4L453.3 272.1C465.7 259.9 475.8 244.7 483.1 227.1H376C364.1 227.1 356 219 356 207.1C356 196.1 364.1 187.1 376 187.1H428V183.1C428 172.1 436.1 163.1 448 163.1L448 164zM160 233.2L179 276H140.1L160 233.2zM0 128C0 92.65 28.65 64 64 64H576C611.3 64 640 92.65 640 128V384C640 419.3 611.3 448 576 448H64C28.65 448 0 419.3 0 384V128zM320 384H576V128H320V384zM178.3 175.9C175.1 168.7 167.9 164 160 164C152.1 164 144.9 168.7 141.7 175.9L77.72 319.9C73.24 329.1 77.78 341.8 87.88 346.3C97.97 350.8 109.8 346.2 114.3 336.1L123.2 315.1H196.8L205.7 336.1C210.2 346.2 222 350.8 232.1 346.3C242.2 341.8 246.8 329.1 242.3 319.9L178.3 175.9z\"],\n    \"laptop\": [640, 512, [128187], \"f109\", \"M128 96h384v256h64v-272c0-26.38-21.62-48-48-48h-416c-26.38 0-48 21.62-48 48V352h64V96zM624 383.1h-608c-8.75 0-16 7.25-16 16v16c0 35.25 28.75 64 64 64h512c35.25 0 64-28.75 64-64v-16C640 391.2 632.8 383.1 624 383.1z\"],\n    \"laptop-code\": [640, 512, [], \"f5fc\", \"M128 96h384v256h64V80C576 53.63 554.4 32 528 32h-416C85.63 32 64 53.63 64 80V352h64V96zM624 384h-608C7.25 384 0 391.3 0 400V416c0 35.25 28.75 64 64 64h512c35.25 0 64-28.75 64-64v-16C640 391.3 632.8 384 624 384zM365.9 286.2C369.8 290.1 374.9 292 380 292s10.23-1.938 14.14-5.844l48-48c7.812-7.813 7.812-20.5 0-28.31l-48-48c-7.812-7.813-20.47-7.813-28.28 0c-7.812 7.813-7.812 20.5 0 28.31l33.86 33.84l-33.86 33.84C358 265.7 358 278.4 365.9 286.2zM274.1 161.9c-7.812-7.813-20.47-7.813-28.28 0l-48 48c-7.812 7.813-7.812 20.5 0 28.31l48 48C249.8 290.1 254.9 292 260 292s10.23-1.938 14.14-5.844c7.812-7.813 7.812-20.5 0-28.31L240.3 224l33.86-33.84C281.1 182.4 281.1 169.7 274.1 161.9z\"],\n    \"laptop-medical\": [640, 512, [], \"f812\", \"M624 384h-608C7.25 384 0 391.3 0 400V416c0 35.25 28.75 64 64 64h512c35.25 0 64-28.75 64-64v-16C640 391.3 632.8 384 624 384zM128 96h384v256h64V80C576 53.63 554.4 32 528 32h-416C85.63 32 64 53.63 64 80V352h64V96zM304 336h32c8.801 0 16-7.201 16-16V272h48C408.8 272 416 264.8 416 256V224c0-8.801-7.199-16-16-16H352V160c0-8.801-7.199-16-16-16h-32C295.2 144 288 151.2 288 160v48H240C231.2 208 224 215.2 224 224v32c0 8.799 7.199 16 16 16H288V320C288 328.8 295.2 336 304 336z\"],\n    \"lari-sign\": [384, 512, [], \"e1c8\", \"M144 32C161.7 32 176 46.33 176 64V96.66C181.3 96.22 186.6 96 192 96C197.4 96 202.7 96.22 208 96.66V64C208 46.33 222.3 32 240 32C257.7 32 272 46.33 272 64V113.4C326.9 138.6 367.8 188.9 380.2 249.6C383.7 266.1 372.5 283.8 355.2 287.4C337.8 290.9 320.1 279.7 317.4 262.4C311.4 232.5 294.9 206.4 272 188.1V256C272 273.7 257.7 288 240 288C222.3 288 208 273.7 208 256V160.1C202.8 160.3 197.4 160 192 160C186.6 160 181.2 160.3 176 160.1V256C176 273.7 161.7 288 144 288C126.3 288 112 273.7 112 256V188.1C82.74 211.5 64 247.6 64 288C64 358.7 121.3 416 192 416H352C369.7 416 384 430.3 384 448C384 465.7 369.7 480 352 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H48.89C18.49 382 0 337.2 0 288C0 210.5 45.9 143.7 112 113.4V64C112 46.33 126.3 32 144 32V32z\"],\n    \"layer-group\": [512, 512, [], \"f5fd\", \"M232.5 5.171C247.4-1.718 264.6-1.718 279.5 5.171L498.1 106.2C506.6 110.1 512 118.6 512 127.1C512 137.3 506.6 145.8 498.1 149.8L279.5 250.8C264.6 257.7 247.4 257.7 232.5 250.8L13.93 149.8C5.438 145.8 0 137.3 0 127.1C0 118.6 5.437 110.1 13.93 106.2L232.5 5.171zM498.1 234.2C506.6 238.1 512 246.6 512 255.1C512 265.3 506.6 273.8 498.1 277.8L279.5 378.8C264.6 385.7 247.4 385.7 232.5 378.8L13.93 277.8C5.438 273.8 0 265.3 0 255.1C0 246.6 5.437 238.1 13.93 234.2L67.13 209.6L219.1 279.8C242.5 290.7 269.5 290.7 292.9 279.8L444.9 209.6L498.1 234.2zM292.9 407.8L444.9 337.6L498.1 362.2C506.6 366.1 512 374.6 512 383.1C512 393.3 506.6 401.8 498.1 405.8L279.5 506.8C264.6 513.7 247.4 513.7 232.5 506.8L13.93 405.8C5.438 401.8 0 393.3 0 383.1C0 374.6 5.437 366.1 13.93 362.2L67.13 337.6L219.1 407.8C242.5 418.7 269.5 418.7 292.9 407.8V407.8z\"],\n    \"leaf\": [512, 512, [], \"f06c\", \"M512 165.4c0 127.9-70.05 235.3-175.3 270.1c-20.04 7.938-41.83 12.46-64.69 12.46c-64.9 0-125.2-36.51-155.7-94.47c-54.13 49.93-68.71 107-68.96 108.1C44.72 472.6 34.87 480 24.02 480c-1.844 0-3.727-.2187-5.602-.6562c-12.89-3.098-20.84-16.08-17.75-28.96c9.598-39.5 90.47-226.4 335.3-226.4C344.8 224 352 216.8 352 208S344.8 192 336 192C228.6 192 151 226.6 96.29 267.6c.1934-10.82 1.242-21.84 3.535-33.05c13.47-65.81 66.04-119 131.4-134.2c28.33-6.562 55.68-6.013 80.93-.0054c56 13.32 118.2-7.412 149.3-61.24c5.664-9.828 20.02-9.516 24.66 .8282C502.7 76.76 512 121.9 512 165.4z\"],\n    \"left-long\": [512, 512, [\"long-arrow-alt-left\"], \"f30a\", \"M512 256C512 273.7 497.7 288 480 288H160.1l0 72c0 9.547-5.66 18.19-14.42 22c-8.754 3.812-18.95 2.077-25.94-4.407l-112.1-104c-10.24-9.5-10.24-25.69 0-35.19l112.1-104c6.992-6.484 17.18-8.218 25.94-4.406C154.4 133.8 160.1 142.5 160.1 151.1L160.1 224H480C497.7 224 512 238.3 512 256z\"],\n    \"left-right\": [512, 512, [8596, \"arrows-alt-h\"], \"f337\", \"M503.1 273.6l-112 104c-6.984 6.484-17.17 8.219-25.92 4.406s-14.41-12.45-14.41-22v-56l-192 .001V360c0 9.547-5.656 18.19-14.41 22c-8.75 3.812-18.94 2.078-25.92-4.406l-112-104c-9.781-9.094-9.781-26.09 0-35.19l112-104c6.984-6.484 17.17-8.219 25.92-4.406C154 133.8 159.7 142.5 159.7 152v55.1l192-.001v-56c0-9.547 5.656-18.19 14.41-22s18.94-2.078 25.92 4.406l112 104C513.8 247.5 513.8 264.5 503.1 273.6z\"],\n    \"lemon\": [448, 512, [127819], \"f094\", \"M427.9 52.1c-20.13-20.23-47.58-25.27-65.63-14.77c-51.63 30.08-158.6-46.49-281 75.91c-122.4 122.4-45.83 229.4-75.91 281c-10.5 18.05-5.471 45.5 14.77 65.63c20.13 20.24 47.58 25.27 65.63 14.77c51.63-30.08 158.6 46.49 281-75.91c122.4-122.4 45.83-229.4 75.91-281C453.2 99.69 448.1 72.23 427.9 52.1zM211.9 127.5C167.6 138.7 106.7 199.6 95.53 243.9C93.69 251.2 87.19 255.1 79.1 255.1c-1.281 0-2.594-.1562-3.906-.4687C67.53 253.4 62.34 244.7 64.47 236.1c14.16-56.28 83.31-125.4 139.6-139.6c8.656-2.031 17.25 3.062 19.44 11.62C225.7 116.7 220.5 125.3 211.9 127.5z\"],\n    \"less-than\": [384, 512, [62774], \"3c\", \"M351.1 448c-4.797 0-9.688-1.094-14.28-3.375l-320-160C6.844 279.2 0 268.1 0 256c0-12.13 6.844-23.18 17.69-28.62l320-160c15.88-7.875 35.05-1.5 42.94 14.31c7.906 15.81 1.5 35.03-14.31 42.94L103.5 256l262.8 131.4c15.81 7.906 22.22 27.12 14.31 42.94C375 441.5 363.7 448 351.1 448z\"],\n    \"less-than-equal\": [448, 512, [], \"f537\", \"M52.11 221.7l320 128C376 351.3 380 352 383.1 352c12.7 0 24.72-7.594 29.73-20.12c6.562-16.41-1.422-35.03-17.83-41.59L150.2 192l245.7-98.28c16.41-6.562 24.39-25.19 17.83-41.59S388.6 27.68 372.1 34.21l-320 128.1C39.97 167.2 32 178.9 32 192S39.97 216.8 52.11 221.7zM416 416H32c-17.67 0-32 14.31-32 31.1S14.33 480 32 480h384c17.67 0 32-14.31 32-32S433.7 416 416 416z\"],\n    \"life-ring\": [512, 512, [], \"f1cd\", \"M470.6 425.4C483.1 437.9 483.1 458.1 470.6 470.6C458.1 483.1 437.9 483.1 425.4 470.6L412.1 458.2C369.6 491.9 315.2 512 255.1 512C196.8 512 142.4 491.9 99.02 458.2L86.63 470.6C74.13 483.1 53.87 483.1 41.37 470.6C28.88 458.1 28.88 437.9 41.37 425.4L53.76 412.1C20.07 369.6 0 315.2 0 255.1C0 196.8 20.07 142.4 53.76 99.02L41.37 86.63C28.88 74.13 28.88 53.87 41.37 41.37C53.87 28.88 74.13 28.88 86.63 41.37L99.02 53.76C142.4 20.07 196.8 0 255.1 0C315.2 0 369.6 20.07 412.1 53.76L425.4 41.37C437.9 28.88 458.1 28.88 470.6 41.37C483.1 53.87 483.1 74.13 470.6 86.63L458.2 99.02C491.9 142.4 512 196.8 512 255.1C512 315.2 491.9 369.6 458.2 412.1L470.6 425.4zM309.3 354.5C293.4 363.1 275.3 368 255.1 368C236.7 368 218.6 363.1 202.7 354.5L144.8 412.5C176.1 434.9 214.5 448 255.1 448C297.5 448 335.9 434.9 367.2 412.5L309.3 354.5zM448 255.1C448 214.5 434.9 176.1 412.5 144.8L354.5 202.7C363.1 218.6 368 236.7 368 256C368 275.3 363.1 293.4 354.5 309.3L412.5 367.2C434.9 335.9 448 297.5 448 256V255.1zM255.1 63.1C214.5 63.1 176.1 77.14 144.8 99.5L202.7 157.5C218.6 148.9 236.7 143.1 255.1 143.1C275.3 143.1 293.4 148.9 309.3 157.5L367.2 99.5C335.9 77.14 297.5 63.1 256 63.1H255.1zM157.5 309.3C148.9 293.4 143.1 275.3 143.1 255.1C143.1 236.7 148.9 218.6 157.5 202.7L99.5 144.8C77.14 176.1 63.1 214.5 63.1 255.1C63.1 297.5 77.14 335.9 99.5 367.2L157.5 309.3zM255.1 207.1C229.5 207.1 207.1 229.5 207.1 255.1C207.1 282.5 229.5 303.1 255.1 303.1C282.5 303.1 304 282.5 304 255.1C304 229.5 282.5 207.1 255.1 207.1z\"],\n    \"lightbulb\": [384, 512, [128161], \"f0eb\", \"M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z\"],\n    \"link\": [640, 512, [128279, \"chain\"], \"f0c1\", \"M172.5 131.1C228.1 75.51 320.5 75.51 376.1 131.1C426.1 181.1 433.5 260.8 392.4 318.3L391.3 319.9C381 334.2 361 337.6 346.7 327.3C332.3 317 328.9 297 339.2 282.7L340.3 281.1C363.2 249 359.6 205.1 331.7 177.2C300.3 145.8 249.2 145.8 217.7 177.2L105.5 289.5C73.99 320.1 73.99 372 105.5 403.5C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4C265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2C188.1 505.3 110.2 498.7 60.21 448.8C3.741 392.3 3.741 300.7 60.21 244.3L172.5 131.1zM467.5 380C411 436.5 319.5 436.5 263 380C213 330 206.5 251.2 247.6 193.7L248.7 192.1C258.1 177.8 278.1 174.4 293.3 184.7C307.7 194.1 311.1 214.1 300.8 229.3L299.7 230.9C276.8 262.1 280.4 306.9 308.3 334.8C339.7 366.2 390.8 366.2 422.3 334.8L534.5 222.5C566 191 566 139.1 534.5 108.5C506.7 80.63 462.7 76.99 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58C374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.731 529.8 13.25 579.8 63.24C636.3 119.7 636.3 211.3 579.8 267.7L467.5 380z\"],\n    \"link-slash\": [640, 512, [\"chain-broken\", \"chain-slash\", \"unlink\"], \"f127\", \"M185.7 120.3C242.5 75.82 324.7 79.73 376.1 131.1C420.1 175.1 430.9 239.6 406.7 293.5L438.6 318.4L534.5 222.5C566 191 566 139.1 534.5 108.5C506.7 80.63 462.7 76.1 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58C374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.732 529.8 13.25 579.8 63.24C636.3 119.7 636.3 211.3 579.8 267.7L489.3 358.2L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L185.7 120.3zM238.1 161.1L353.4 251.7C359.3 225.5 351.7 197.2 331.7 177.2C306.6 152.1 269.1 147 238.1 161.1V161.1zM263 380C233.1 350.1 218.7 309.8 220.9 270L406.6 416.4C357.4 431 301.9 418.9 263 380V380zM116.6 187.9L167.2 227.8L105.5 289.5C73.99 320.1 73.99 372 105.5 403.5C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4C265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2C188.1 505.3 110.2 498.7 60.21 448.8C3.741 392.3 3.741 300.7 60.21 244.3L116.6 187.9z\"],\n    \"lira-sign\": [320, 512, [8356], \"f195\", \"M111.1 191.1H224C241.7 191.1 256 206.3 256 223.1C256 241.7 241.7 255.1 224 255.1H111.1V287.1H224C241.7 287.1 256 302.3 256 319.1C256 337.7 241.7 352 224 352H110.8C108.1 374.2 100.8 395.6 89.2 414.9L88.52 416H288C305.7 416 320 430.3 320 448C320 465.7 305.7 480 288 480H32C20.47 480 9.834 473.8 4.154 463.8C-1.527 453.7-1.371 441.4 4.56 431.5L34.32 381.9C39.89 372.6 43.83 362.5 46.01 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288H48V256H32C14.33 256 0 241.7 0 224C0 206.3 14.33 192 32 192H48V160.4C48 89.47 105.5 32 176.4 32C190.2 32 203.9 34.22 216.1 38.59L298.1 65.64C314.9 71.23 323.9 89.35 318.4 106.1C312.8 122.9 294.6 131.9 277.9 126.4L196.7 99.3C190.2 97.12 183.3 96 176.4 96C140.8 96 112 124.8 112 160.4L111.1 191.1z\"],\n    \"list\": [512, 512, [\"list-squares\"], \"f03a\", \"M88 48C101.3 48 112 58.75 112 72V120C112 133.3 101.3 144 88 144H40C26.75 144 16 133.3 16 120V72C16 58.75 26.75 48 40 48H88zM480 64C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H192C174.3 128 160 113.7 160 96C160 78.33 174.3 64 192 64H480zM480 224C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H192C174.3 288 160 273.7 160 256C160 238.3 174.3 224 192 224H480zM480 384C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H192C174.3 448 160 433.7 160 416C160 398.3 174.3 384 192 384H480zM16 232C16 218.7 26.75 208 40 208H88C101.3 208 112 218.7 112 232V280C112 293.3 101.3 304 88 304H40C26.75 304 16 293.3 16 280V232zM88 368C101.3 368 112 378.7 112 392V440C112 453.3 101.3 464 88 464H40C26.75 464 16 453.3 16 440V392C16 378.7 26.75 368 40 368H88z\"],\n    \"list-check\": [512, 512, [\"tasks\"], \"f0ae\", \"M152.1 38.16C161.9 47.03 162.7 62.2 153.8 72.06L81.84 152.1C77.43 156.9 71.21 159.8 64.63 159.1C58.05 160.2 51.69 157.6 47.03 152.1L7.029 112.1C-2.343 103.6-2.343 88.4 7.029 79.03C16.4 69.66 31.6 69.66 40.97 79.03L63.08 101.1L118.2 39.94C127 30.09 142.2 29.29 152.1 38.16V38.16zM152.1 198.2C161.9 207 162.7 222.2 153.8 232.1L81.84 312.1C77.43 316.9 71.21 319.8 64.63 319.1C58.05 320.2 51.69 317.6 47.03 312.1L7.029 272.1C-2.343 263.6-2.343 248.4 7.029 239C16.4 229.7 31.6 229.7 40.97 239L63.08 261.1L118.2 199.9C127 190.1 142.2 189.3 152.1 198.2V198.2zM224 96C224 78.33 238.3 64 256 64H480C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H256C238.3 128 224 113.7 224 96V96zM224 256C224 238.3 238.3 224 256 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H256C238.3 288 224 273.7 224 256zM160 416C160 398.3 174.3 384 192 384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H192C174.3 448 160 433.7 160 416zM0 416C0 389.5 21.49 368 48 368C74.51 368 96 389.5 96 416C96 442.5 74.51 464 48 464C21.49 464 0 442.5 0 416z\"],\n    \"list-ol\": [576, 512, [\"list-1-2\", \"list-numeric\"], \"f0cb\", \"M55.1 56.04C55.1 42.78 66.74 32.04 79.1 32.04H111.1C125.3 32.04 135.1 42.78 135.1 56.04V176H151.1C165.3 176 175.1 186.8 175.1 200C175.1 213.3 165.3 224 151.1 224H71.1C58.74 224 47.1 213.3 47.1 200C47.1 186.8 58.74 176 71.1 176H87.1V80.04H79.1C66.74 80.04 55.1 69.29 55.1 56.04V56.04zM118.7 341.2C112.1 333.8 100.4 334.3 94.65 342.4L83.53 357.9C75.83 368.7 60.84 371.2 50.05 363.5C39.26 355.8 36.77 340.8 44.47 330.1L55.59 314.5C79.33 281.2 127.9 278.8 154.8 309.6C176.1 333.1 175.6 370.5 153.7 394.3L118.8 432H152C165.3 432 176 442.7 176 456C176 469.3 165.3 480 152 480H64C54.47 480 45.84 474.4 42.02 465.6C38.19 456.9 39.9 446.7 46.36 439.7L118.4 361.7C123.7 355.9 123.8 347.1 118.7 341.2L118.7 341.2zM512 64C529.7 64 544 78.33 544 96C544 113.7 529.7 128 512 128H256C238.3 128 224 113.7 224 96C224 78.33 238.3 64 256 64H512zM512 224C529.7 224 544 238.3 544 256C544 273.7 529.7 288 512 288H256C238.3 288 224 273.7 224 256C224 238.3 238.3 224 256 224H512zM512 384C529.7 384 544 398.3 544 416C544 433.7 529.7 448 512 448H256C238.3 448 224 433.7 224 416C224 398.3 238.3 384 256 384H512z\"],\n    \"list-ul\": [512, 512, [\"list-dots\"], \"f0ca\", \"M16 96C16 69.49 37.49 48 64 48C90.51 48 112 69.49 112 96C112 122.5 90.51 144 64 144C37.49 144 16 122.5 16 96zM480 64C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H192C174.3 128 160 113.7 160 96C160 78.33 174.3 64 192 64H480zM480 224C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H192C174.3 288 160 273.7 160 256C160 238.3 174.3 224 192 224H480zM480 384C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H192C174.3 448 160 433.7 160 416C160 398.3 174.3 384 192 384H480zM16 416C16 389.5 37.49 368 64 368C90.51 368 112 389.5 112 416C112 442.5 90.51 464 64 464C37.49 464 16 442.5 16 416zM112 256C112 282.5 90.51 304 64 304C37.49 304 16 282.5 16 256C16 229.5 37.49 208 64 208C90.51 208 112 229.5 112 256z\"],\n    \"litecoin-sign\": [384, 512, [], \"e1d3\", \"M128 195.3L247.2 161.2C264.2 156.4 281.9 166.2 286.8 183.2C291.6 200.2 281.8 217.9 264.8 222.8L128 261.9V416H352C369.7 416 384 430.3 384 448C384 465.7 369.7 480 352 480H96C78.33 480 64 465.7 64 448V280.1L40.79 286.8C23.8 291.6 6.087 281.8 1.232 264.8C-3.623 247.8 6.216 230.1 23.21 225.2L64 213.6V64C64 46.33 78.33 32 96 32C113.7 32 128 46.33 128 64V195.3z\"],\n    \"location-arrow\": [448, 512, [], \"f124\", \"M285.6 444.1C279.8 458.3 264.8 466.3 249.8 463.4C234.8 460.4 223.1 447.3 223.1 432V256H47.1C32.71 256 19.55 245.2 16.6 230.2C13.65 215.2 21.73 200.2 35.88 194.4L387.9 50.38C399.8 45.5 413.5 48.26 422.6 57.37C431.7 66.49 434.5 80.19 429.6 92.12L285.6 444.1z\"],\n    \"location-crosshairs\": [512, 512, [\"location\"], \"f601\", \"M176 256C176 211.8 211.8 176 256 176C300.2 176 336 211.8 336 256C336 300.2 300.2 336 256 336C211.8 336 176 300.2 176 256zM256 0C273.7 0 288 14.33 288 32V66.65C368.4 80.14 431.9 143.6 445.3 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H445.3C431.9 368.4 368.4 431.9 288 445.3V480C288 497.7 273.7 512 256 512C238.3 512 224 497.7 224 480V445.3C143.6 431.9 80.14 368.4 66.65 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H66.65C80.14 143.6 143.6 80.14 224 66.65V32C224 14.33 238.3 0 256 0zM128 256C128 326.7 185.3 384 256 384C326.7 384 384 326.7 384 256C384 185.3 326.7 128 256 128C185.3 128 128 185.3 128 256z\"],\n    \"location-dot\": [384, 512, [\"map-marker-alt\"], \"f3c5\", \"M168.3 499.2C116.1 435 0 279.4 0 192C0 85.96 85.96 0 192 0C298 0 384 85.96 384 192C384 279.4 267 435 215.7 499.2C203.4 514.5 180.6 514.5 168.3 499.2H168.3zM192 256C227.3 256 256 227.3 256 192C256 156.7 227.3 128 192 128C156.7 128 128 156.7 128 192C128 227.3 156.7 256 192 256z\"],\n    \"location-pin\": [384, 512, [\"map-marker\"], \"f041\", \"M384 192C384 279.4 267 435 215.7 499.2C203.4 514.5 180.6 514.5 168.3 499.2C116.1 435 0 279.4 0 192C0 85.96 85.96 0 192 0C298 0 384 85.96 384 192H384z\"],\n    \"lock\": [448, 512, [128274], \"f023\", \"M80 192V144C80 64.47 144.5 0 224 0C303.5 0 368 64.47 368 144V192H384C419.3 192 448 220.7 448 256V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V256C0 220.7 28.65 192 64 192H80zM144 192H304V144C304 99.82 268.2 64 224 64C179.8 64 144 99.82 144 144V192z\"],\n    \"lock-open\": [576, 512, [], \"f3c1\", \"M352 192H384C419.3 192 448 220.7 448 256V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V256C0 220.7 28.65 192 64 192H288V144C288 64.47 352.5 0 432 0C511.5 0 576 64.47 576 144V192C576 209.7 561.7 224 544 224C526.3 224 512 209.7 512 192V144C512 99.82 476.2 64 432 64C387.8 64 352 99.82 352 144V192z\"],\n    \"lungs\": [640, 512, [129729], \"f604\", \"M640 419.8c0 61.25-62.5 105.5-125.3 88.63l-59.53-15.88c-42.12-11.38-71.25-47.5-71.25-88.63L384 316.4l85.88 57.25c3.625 2.375 8.625 1.375 11-2.25l8.875-13.37c2.5-3.625 1.5-8.625-2.125-11L320 235.3l-167.6 111.8c-1.75 1.125-3 3-3.375 5c-.375 2.125 0 4.25 1.25 6l8.875 13.37c1.125 1.75 3 3 5 3.375c2.125 .375 4.25 0 6-1.125L256 316.4l.0313 87.5c0 41.13-29.12 77.25-71.25 88.63l-59.53 15.88C62.5 525.3 0 481 0 419.8c0-10 1.25-19.88 3.875-29.63C25.5 308.9 59.91 231 105.9 159.1c22.12-34.63 36.12-63.13 80.12-63.13C224.7 96 256 125.4 256 161.8v60.1l32.88-21.97C293.4 196.9 296 192 296 186.6V16C296 7.125 303.1 0 312 0h16c8.875 0 16 7.125 16 16v170.6c0 5.375 2.625 10.25 7.125 13.25L384 221.8v-60.1c0-36.38 31.34-65.75 69.97-65.75c43.1 0 58 28.5 80.13 63.13c46 71.88 80.41 149.8 102 231C638.8 399.9 640 409.8 640 419.8z\"],\n    \"lungs-virus\": [640, 512, [], \"e067\", \"M195.5 444.5c-18.71-18.72-18.71-49.16 .0033-67.87l8.576-8.576H192c-26.47 0-48-21.53-48-48c0-26.47 21.53-48 48-48l12.12-.0055L195.5 263.4c-18.71-18.72-18.71-49.16 0-67.88C204.6 186.5 216.7 181.5 229.5 181.5c9.576 0 18.72 2.799 26.52 7.986l.04-27.75c0-36.38-31.42-65.72-70.05-65.72c-44 0-57.97 28.5-80.09 63.13c-46 71.88-80.39 149.8-102 231C1.257 399.9 0 409.8 0 419.8c0 61.25 62.5 105.5 125.3 88.62l59.5-15.9c21.74-5.867 39.91-18.39 52.51-34.73c-2.553 .4141-5.137 .7591-7.774 .7591C216.7 458.5 204.6 453.5 195.5 444.5zM343.1 150.7L344 16C344 7.125 336.9 0 328 0h-16c-8.875 0-16 7.125-16 16L295.1 150.7c7.088-4.133 15.22-6.675 23.1-6.675S336.9 146.5 343.1 150.7zM421.8 421.8c6.25-6.25 6.25-16.37 0-22.62l-8.576-8.576c-20.16-20.16-5.881-54.63 22.63-54.63H448c8.844 0 16-7.156 16-16c0-8.844-7.156-16-16-16h-12.12c-28.51 0-42.79-34.47-22.63-54.63l8.576-8.577c6.25-6.25 6.25-16.37 0-22.62s-16.38-6.25-22.62 0l-8.576 8.577C370.5 246.9 336 232.6 336 204.1v-12.12c0-8.844-7.156-15.1-16-15.1s-16 7.156-16 15.1v12.12c0 28.51-34.47 42.79-54.63 22.63L240.8 218.2c-6.25-6.25-16.38-6.25-22.62 0s-6.25 16.37 0 22.62l8.576 8.577c20.16 20.16 5.881 54.63-22.63 54.63H192c-8.844 0-16 7.156-16 16c0 8.844 7.156 16 16 16h12.12c28.51 0 42.79 34.47 22.63 54.63l-8.576 8.576c-6.25 6.25-6.25 16.37 0 22.62c3.125 3.125 7.219 4.688 11.31 4.688s8.188-1.562 11.31-4.688l8.576-8.575C269.5 393.1 304 407.4 304 435.9v12.12c0 8.844 7.156 16 16 16s16-7.156 16-16v-12.12c0-28.51 34.47-42.79 54.63-22.63l8.576 8.575c3.125 3.125 7.219 4.688 11.31 4.688S418.7 424.9 421.8 421.8zM288 303.1c-8.836 0-16-7.162-16-15.1S279.2 271.1 288 271.1S304 279.2 304 287.1S296.8 303.1 288 303.1zM352 367.1c-8.836 0-16-7.166-16-16s7.164-15.1 16-15.1s16 7.166 16 16S360.8 367.1 352 367.1zM636.1 390.1c-21.62-81.25-56.02-159.1-102-231c-22.12-34.63-36.09-63.13-80.09-63.13c-38.62 0-70.01 29.35-70.01 65.73v27.74c7.795-5.188 16.94-7.986 26.52-7.986c12.82 0 24.88 4.999 33.95 14.07c18.71 18.72 18.71 49.16 0 67.88l-8.576 8.571L448 272c26.47 0 48 21.54 48 48c0 26.47-21.53 48-48 48h-12.12l8.576 8.576c18.71 18.72 18.71 49.16-.0072 67.87c-9.066 9.066-21.12 14.06-33.94 14.06c-2.637 0-5.211-.3438-7.764-.7578c12.6 16.34 30.77 28.86 52.51 34.73l59.5 15.9C577.5 525.3 640 481 640 419.8C640 409.8 638.7 399.9 636.1 390.1z\"],\n    \"m\": [448, 512, [109], \"4d\", \"M448 64.01v384c0 17.67-14.31 32-32 32s-32-14.33-32-32V169.7l-133.4 200.1c-11.88 17.81-41.38 17.81-53.25 0L64 169.7v278.3c0 17.67-14.31 32-32 32s-32-14.33-32-32v-384c0-14.09 9.219-26.55 22.72-30.63c13.47-4.156 28.09 1.141 35.91 12.88L224 294.3l165.4-248.1c7.812-11.73 22.47-17.03 35.91-12.88C438.8 37.47 448 49.92 448 64.01z\"],\n    \"magnet\": [448, 512, [129522], \"f076\", \"M128 160V256C128 309 170.1 352 224 352C277 352 320 309 320 256V160H448V256C448 379.7 347.7 480 224 480C100.3 480 0 379.7 0 256V160H128zM0 64C0 46.33 14.33 32 32 32H96C113.7 32 128 46.33 128 64V128H0V64zM320 64C320 46.33 334.3 32 352 32H416C433.7 32 448 46.33 448 64V128H320V64z\"],\n    \"magnifying-glass\": [512, 512, [128269, \"search\"], \"f002\", \"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7C401.8 87.79 326.8 13.32 235.2 1.723C99.01-15.51-15.51 99.01 1.724 235.2c11.6 91.64 86.08 166.7 177.6 178.9c53.8 7.189 104.3-6.236 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 0C515.9 484.7 515.9 459.3 500.3 443.7zM79.1 208c0-70.58 57.42-128 128-128s128 57.42 128 128c0 70.58-57.42 128-128 128S79.1 278.6 79.1 208z\"],\n    \"magnifying-glass-dollar\": [512, 512, [\"search-dollar\"], \"f688\", \"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7c-12.23-91.55-87.28-166-178.9-177.6c-136.2-17.24-250.7 97.28-233.4 233.4c11.6 91.64 86.07 166.7 177.6 178.9c53.81 7.191 104.3-6.235 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 .0004C515.9 484.7 515.9 459.3 500.3 443.7zM273.7 253.8C269.8 276.4 252.6 291.3 228 296.1V304c0 11.03-8.953 20-20 20S188 315 188 304V295.2C178.2 293.2 168.4 289.9 159.6 286.8L154.8 285.1C144.4 281.4 138.9 269.9 142.6 259.5C146.2 249.1 157.6 243.7 168.1 247.3l5.062 1.812c8.562 3.094 18.25 6.562 25.91 7.719c16.23 2.5 33.47-.0313 35.17-9.812c1.219-7.094 .4062-10.62-31.8-19.84L196.2 225.4C177.8 219.1 134.5 207.3 142.3 162.2C146.2 139.6 163.5 124.8 188 120V112c0-11.03 8.953-20 20-20S228 100.1 228 112v8.695c6.252 1.273 13.06 3.07 21.47 5.992c10.42 3.625 15.95 15.03 12.33 25.47C258.2 162.6 246.8 168.1 236.3 164.5C228.2 161.7 221.8 159.9 216.8 159.2c-16.11-2.594-33.38 .0313-35.08 9.812c-1 5.812-1.719 10 25.7 18.03l6 1.719C238.9 196 281.5 208.2 273.7 253.8z\"],\n    \"magnifying-glass-location\": [512, 512, [\"search-location\"], \"f689\", \"M236 176c0 15.46-12.54 28-28 28S180 191.5 180 176S192.5 148 208 148S236 160.5 236 176zM500.3 500.3c-15.62 15.62-40.95 15.62-56.57 0l-119.7-119.7c-40.41 27.22-90.9 40.65-144.7 33.46c-91.55-12.23-166-87.28-177.6-178.9c-17.24-136.2 97.29-250.7 233.4-233.4c91.64 11.6 166.7 86.07 178.9 177.6c7.19 53.8-6.236 104.3-33.46 144.7l119.7 119.7C515.9 459.3 515.9 484.7 500.3 500.3zM294.1 182.2C294.1 134.5 255.6 96 207.1 96C160.4 96 121.9 134.5 121.9 182.2c0 38.35 56.29 108.5 77.87 134C201.8 318.5 204.7 320 207.1 320c3.207 0 6.26-1.459 8.303-3.791C237.8 290.7 294.1 220.5 294.1 182.2z\"],\n    \"magnifying-glass-minus\": [512, 512, [\"search-minus\"], \"f010\", \"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7c-12.23-91.55-87.28-166-178.9-177.6c-136.2-17.24-250.7 97.28-233.4 233.4c11.6 91.64 86.07 166.7 177.6 178.9c53.81 7.191 104.3-6.235 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 .0003C515.9 484.7 515.9 459.3 500.3 443.7zM288 232H127.1C114.7 232 104 221.3 104 208s10.74-24 23.1-24h160C301.3 184 312 194.7 312 208S301.3 232 288 232z\"],\n    \"magnifying-glass-plus\": [512, 512, [\"search-plus\"], \"f00e\", \"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7c-12.23-91.55-87.28-166-178.9-177.6c-136.2-17.24-250.7 97.28-233.4 233.4c11.6 91.64 86.07 166.7 177.6 178.9c53.81 7.191 104.3-6.235 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 .0003C515.9 484.7 515.9 459.3 500.3 443.7zM288 232H231.1V288c0 13.26-10.74 24-23.1 24C194.7 312 184 301.3 184 288V232H127.1C114.7 232 104 221.3 104 208s10.74-24 23.1-24H184V128c0-13.26 10.74-24 23.1-24S231.1 114.7 231.1 128v56h56C301.3 184 312 194.7 312 208S301.3 232 288 232z\"],\n    \"manat-sign\": [384, 512, [], \"e1d5\", \"M224 64V98.65C314.8 113.9 384 192.9 384 288V448C384 465.7 369.7 480 352 480C334.3 480 320 465.7 320 448V288C320 228.4 279.2 178.2 224 164V448C224 465.7 209.7 480 192 480C174.3 480 160 465.7 160 448V164C104.8 178.2 64 228.4 64 288V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448V288C0 192.9 69.19 113.9 160 98.65V64C160 46.33 174.3 32 192 32C209.7 32 224 46.33 224 64z\"],\n    \"map\": [576, 512, [62072, 128506], \"f279\", \"M384 476.1L192 421.2V35.93L384 90.79V476.1zM416 88.37L543.1 37.53C558.9 31.23 576 42.84 576 59.82V394.6C576 404.4 570 413.2 560.9 416.9L416 474.8V88.37zM15.09 95.13L160 37.17V423.6L32.91 474.5C17.15 480.8 0 469.2 0 452.2V117.4C0 107.6 5.975 98.78 15.09 95.13V95.13z\"],\n    \"map-location\": [576, 512, [\"map-marked\"], \"f59f\", \"M273.2 311.1C241.1 271.9 167.1 174.6 167.1 120C167.1 53.73 221.7 0 287.1 0C354.3 0 408 53.73 408 120C408 174.6 334.9 271.9 302.8 311.1C295.1 321.6 280.9 321.6 273.2 311.1V311.1zM416 503V200.4C419.5 193.5 422.7 186.7 425.6 179.8C426.1 178.6 426.6 177.4 427.1 176.1L543.1 129.7C558.9 123.4 576 135 576 152V422.8C576 432.6 570 441.4 560.9 445.1L416 503zM15.09 187.3L137.6 138.3C140 152.5 144.9 166.6 150.4 179.8C153.3 186.7 156.5 193.5 160 200.4V451.8L32.91 502.7C17.15 508.1 0 497.4 0 480.4V209.6C0 199.8 5.975 190.1 15.09 187.3H15.09zM384 504.3L191.1 449.4V255C212.5 286.3 234.3 314.6 248.2 331.1C268.7 357.6 307.3 357.6 327.8 331.1C341.7 314.6 363.5 286.3 384 255L384 504.3z\"],\n    \"map-location-dot\": [576, 512, [\"map-marked-alt\"], \"f5a0\", \"M408 120C408 174.6 334.9 271.9 302.8 311.1C295.1 321.6 280.9 321.6 273.2 311.1C241.1 271.9 168 174.6 168 120C168 53.73 221.7 0 288 0C354.3 0 408 53.73 408 120zM288 152C310.1 152 328 134.1 328 112C328 89.91 310.1 72 288 72C265.9 72 248 89.91 248 112C248 134.1 265.9 152 288 152zM425.6 179.8C426.1 178.6 426.6 177.4 427.1 176.1L543.1 129.7C558.9 123.4 576 135 576 152V422.8C576 432.6 570 441.4 560.9 445.1L416 503V200.4C419.5 193.5 422.7 186.7 425.6 179.8zM150.4 179.8C153.3 186.7 156.5 193.5 160 200.4V451.8L32.91 502.7C17.15 508.1 0 497.4 0 480.4V209.6C0 199.8 5.975 190.1 15.09 187.3L137.6 138.3C140 152.5 144.9 166.6 150.4 179.8H150.4zM327.8 331.1C341.7 314.6 363.5 286.3 384 255V504.3L192 449.4V255C212.5 286.3 234.3 314.6 248.2 331.1C268.7 357.6 307.3 357.6 327.8 331.1L327.8 331.1z\"],\n    \"map-pin\": [320, 512, [128205], \"f276\", \"M320 144C320 223.5 255.5 288 176 288C96.47 288 32 223.5 32 144C32 64.47 96.47 0 176 0C255.5 0 320 64.47 320 144zM192 64C192 55.16 184.8 48 176 48C122.1 48 80 90.98 80 144C80 152.8 87.16 160 96 160C104.8 160 112 152.8 112 144C112 108.7 140.7 80 176 80C184.8 80 192 72.84 192 64zM144 480V317.1C154.4 319 165.1 319.1 176 319.1C186.9 319.1 197.6 319 208 317.1V480C208 497.7 193.7 512 176 512C158.3 512 144 497.7 144 480z\"],\n    \"marker\": [512, 512, [], \"f5a1\", \"M480.1 160.1L316.3 325.7L186.3 195.7L302.1 80L288.1 66.91C279.6 57.54 264.4 57.54 255 66.91L168.1 152.1C159.6 162.3 144.4 162.3 135 152.1C125.7 143.6 125.7 128.4 135 119L221.1 32.97C249.2 4.853 294.8 4.853 322.9 32.97L336 46.06L351 31.03C386.9-4.849 445.1-4.849 480.1 31.03C516.9 66.91 516.9 125.1 480.1 160.1V160.1zM229.5 412.5C181.5 460.5 120.3 493.2 53.7 506.5L28.71 511.5C20.84 513.1 12.7 510.6 7.03 504.1C1.356 499.3-1.107 491.2 .4662 483.3L5.465 458.3C18.78 391.7 51.52 330.5 99.54 282.5L163.7 218.3L293.7 348.3L229.5 412.5z\"],\n    \"mars\": [448, 512, [9794], \"f222\", \"M431.1 31.1l-112.6 0c-21.42 0-32.15 25.85-17 40.97l29.61 29.56l-56.65 56.55c-30.03-20.66-65.04-31-100-31c-47.99-.002-95.96 19.44-131.1 58.39c-60.86 67.51-58.65 175 4.748 240.1C83.66 462.2 129.6 480 175.5 480c45.12 0 90.34-17.18 124.8-51.55c61.11-60.99 67.77-155.6 20.42-224.1l56.65-56.55l29.61 29.56C411.9 182.2 417.9 184.4 423.8 184.4C436.1 184.4 448 174.8 448 160.4V47.1C448 39.16 440.8 31.1 431.1 31.1zM243.5 371.9c-18.75 18.71-43.38 28.07-68 28.07c-24.63 0-49.25-9.355-68.01-28.07c-37.5-37.43-37.5-98.33 0-135.8c18.75-18.71 43.38-28.07 68.01-28.07c24.63 0 49.25 9.357 68 28.07C281 273.5 281 334.5 243.5 371.9z\"],\n    \"mars-and-venus\": [512, 512, [9893], \"f224\", \"M480 .0002l-112.4 .0001c-21.38 0-32.09 25.85-16.97 40.97l29.56 29.56l-27.11 27.11C326.1 76.85 292.7 64 256 64c-88.37 0-160 71.63-160 160c0 77.4 54.97 141.9 128 156.8v19.22H192c-8.836 0-16 7.162-16 16v31.1c0 8.836 7.164 16 16 16l32 .0001v32c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-32l32-.0001c8.838 0 16-7.164 16-16v-31.1c0-8.838-7.162-16-16-16h-32v-19.22c73.03-14.83 128-79.37 128-156.8c0-28.38-8.018-54.65-20.98-77.77l30.45-30.45l29.56 29.56C470.1 160.5 496 149.8 496 128.4V16C496 7.164 488.8 .0002 480 .0002zM256 304c-44.11 0-80-35.89-80-80c0-44.11 35.89-80 80-80c44.11 0 80 35.89 80 80C336 268.1 300.1 304 256 304z\"],\n    \"mars-double\": [640, 512, [9891], \"f227\", \"M320.7 204.3l56.65-56.55l29.61 29.56C422.1 192.5 448 181.7 448 160.4V47.1c0-8.838-7.176-15.1-16.03-15.1H319.4c-21.42 0-32.15 25.85-17 40.97l29.61 29.56L275.4 159.1c-71.21-48.99-170.4-39.96-231.1 27.39c-60.86 67.51-58.65 175 4.748 240.1c68.7 70.57 181.8 71.19 251.3 1.847C361.4 367.5 368 272.9 320.7 204.3zM243.5 371.9c-37.5 37.43-98.51 37.43-136 0s-37.5-98.33 0-135.8c37.5-37.43 98.51-37.43 136 0C281 273.5 281 334.5 243.5 371.9zM623.1 32h-112.6c-21.42 0-32.15 25.85-17 40.97l29.61 29.56L480 146.5v13.91C480 191.3 454.8 216.4 423.8 216.4C421.2 216.4 418.6 216 416 215.6v5.862c6.922 4.049 13.58 8.691 19.51 14.61c37.5 37.43 37.5 98.33 0 135.8c-18.75 18.71-43.38 28.07-68 28.07c-2.277 0-4.523-.4883-6.795-.6484c-9.641 18.69-22.1 36.24-37.64 51.77c-6.059 6.059-12.49 11.53-19.13 16.73C324.4 475.7 345.9 480 367.5 480c45.12 0 90.34-17.18 124.8-51.55c61.11-60.99 67.77-155.6 20.42-224.1l56.65-56.55l29.61 29.56c4.898 4.889 10.92 7.075 16.83 7.075C628.1 184.4 640 174.8 640 160.4V48C640 39.16 632.8 32 623.1 32z\"],\n    \"mars-stroke\": [512, 512, [9894], \"f229\", \"M496 .0002l-112.4 .0001c-21.38 0-32.09 25.85-16.97 40.97l29.56 29.56l-24.33 24.34l-33.94-33.94c-6.248-6.25-16.38-6.248-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l33.94 33.94l-18.96 18.96C239.1 111.8 144.5 118.6 83.55 179.5c-68.73 68.73-68.73 180.2 0 248.9c68.73 68.73 180.2 68.73 248.9 0c60.99-60.99 67.73-155.6 20.47-224.1l18.96-18.96l33.94 33.94c6.248 6.248 16.38 6.25 22.63 0l22.63-22.63c6.248-6.248 6.248-16.38 0-22.63l-33.94-33.94l24.34-24.33l29.56 29.56C486.1 160.5 512 149.8 512 128.4v-112.4C512 7.162 504.8 .0002 496 .0002zM275.9 371.9c-37.43 37.43-98.33 37.43-135.8 0c-37.43-37.43-37.43-98.33 0-135.8c37.43-37.43 98.33-37.43 135.8 0C313.3 273.5 313.3 334.5 275.9 371.9z\"],\n    \"mars-stroke-right\": [640, 512, [9897, \"mars-stroke-h\"], \"f22b\", \"M619.3 244.7l-82.34-77.61c-15.12-15.12-40.97-4.41-40.97 16.97V223.1L463.1 224V176c.002-8.838-7.162-16-15.1-16h-32c-8.84 0-16 7.16-16 16V224h-19.05c-15.07-81.9-86.7-144-172.1-144C110.8 80 32 158.8 32 256c0 97.2 78.8 176 176 176c86.26 0 157.9-62.1 172.1-144h19.05V336c0 8.836 7.162 16 16 16h32c8.836 0 15.1-7.164 15.1-16V287.1L496 288v39.95c0 21.38 25.85 32.09 40.97 16.97l82.34-77.61C625.6 261.1 625.6 250.9 619.3 244.7zM208 352c-52.94 0-96-43.07-96-96c-.002-52.94 43.06-96 96-96c52.93 0 95.1 43.06 95.1 96C304 308.9 260.9 352 208 352z\"],\n    \"mars-stroke-up\": [384, 512, [9896, \"mars-stroke-v\"], \"f22a\", \"M224 163V144h24c4.418 0 8-3.578 8-7.1V120c0-4.418-3.582-7.1-8-7.1H224V96h24.63c16.41 0 24.62-19.84 13.02-31.44l-60.97-60.97c-4.795-4.793-12.57-4.793-17.36 0L122.3 64.56c-11.6 11.6-3.383 31.44 13.02 31.44H160v15.1H136c-4.418 0-8 3.582-8 7.1v15.1c0 4.422 3.582 7.1 8 7.1H160v19.05c-84.9 15.62-148.5 92.01-143.7 182.5c4.783 90.69 82.34 165.1 173.2 166.5C287.8 513.4 368 434.1 368 336C368 249.7 305.9 178.1 224 163zM192 431.1c-52.94 0-96-43.06-96-95.1s43.06-95.1 96-95.1c52.93 0 96 43.06 96 95.1S244.9 431.1 192 431.1z\"],\n    \"martini-glass\": [512, 512, [127864, \"glass-martini-alt\"], \"f57b\", \"M502 57.63C523.3 36.38 508.3 0 478.3 0H33.72C3.711 0-11.29 36.38 9.962 57.63l214 214V448H175.1c-26.51 0-47.1 21.49-47.1 48c0 8.836 7.164 16 16 16h224c8.836 0 16-7.164 16-16c0-26.51-21.49-48-48-48h-47.1V271.6L502 57.63zM405.1 64l-64.01 64H170.9L106.9 64H405.1z\"],\n    \"martini-glass-citrus\": [576, 512, [\"cocktail\"], \"f561\", \"M288 464H240v-125.3l168.8-168.7C424.3 154.5 413.3 128 391.4 128H24.63C2.751 128-8.249 154.5 7.251 170l168.7 168.7V464H128c-17.67 0-32 14.33-32 32c0 8.836 7.164 16 15.1 16h191.1c8.836 0 15.1-7.164 15.1-16C320 478.3 305.7 464 288 464zM432 0c-62.63 0-115.4 40.25-135.1 96h52.5c16.62-28.5 47.25-48 82.62-48c52.88 0 95.1 43 95.1 96s-43.12 96-95.1 96c-14 0-27.25-3.25-39.37-8.625l-35.25 35.25c21.88 13.25 47.25 21.38 74.62 21.38c79.5 0 143.1-64.5 143.1-144S511.5 0 432 0z\"],\n    \"martini-glass-empty\": [512, 512, [\"glass-martini\"], \"f000\", \"M502 57.63C523.3 36.38 508.3 0 478.3 0H33.72C3.711 0-11.29 36.38 9.962 57.63l214 214V448H176c-26.51 0-48 21.49-48 48c0 8.836 7.164 16 16 16h224c8.836 0 16-7.164 16-16c0-26.51-21.49-48-47.1-48h-47.1V271.6L502 57.63zM256 213.1L106.9 64h298.3L256 213.1z\"],\n    \"mask\": [576, 512, [], \"f6fa\", \"M288 64C39.52 64 0 182.1 0 273.5C0 379.5 78.8 448 176 448c27.33 0 51.21-6.516 66.11-36.79l19.93-40.5C268.3 358.6 278.1 352.4 288 352.1c9.9 .3711 19.7 6.501 25.97 18.63l19.93 40.5C348.8 441.5 372.7 448 400 448c97.2 0 176-68.51 176-174.5C576 182.1 536.5 64 288 64zM160 320c-35.35 0-64-28.65-64-64s28.65-64 64-64c35.35 0 64 28.65 64 64S195.3 320 160 320zM416 320c-35.35 0-64-28.65-64-64s28.65-64 64-64c35.35 0 64 28.65 64 64S451.3 320 416 320z\"],\n    \"mask-face\": [640, 512, [], \"e1d7\", \"M396.4 87.12L433.5 111.9C449.3 122.4 467.8 128 486.8 128H584C614.9 128 640 153.1 640 184V269C640 324.1 602.5 372.1 549.1 385.5L441.1 412.5C406.2 434.1 364.6 448 320 448C275.4 448 233.8 434.1 198.9 412.5L90.9 385.5C37.48 372.1 0 324.1 0 269V184C0 153.1 25.07 128 56 128H153.2C172.2 128 190.7 122.4 206.5 111.9L243.6 87.12C266.2 72.05 292.8 64 320 64C347.2 64 373.8 72.05 396.4 87.12zM132.3 346.3C109.4 311.2 96 269.1 96 224V176H56C51.58 176 48 179.6 48 184V269C48 302.1 70.49 330.9 102.5 338.9L132.3 346.3zM592 269V184C592 179.6 588.4 176 584 176H544V224C544 269.1 530.6 311.2 507.7 346.3L537.5 338.9C569.5 330.9 592 302.1 592 269H592zM208 224H432C440.8 224 448 216.8 448 208C448 199.2 440.8 192 432 192H208C199.2 192 192 199.2 192 208C192 216.8 199.2 224 208 224zM208 256C199.2 256 192 263.2 192 272C192 280.8 199.2 288 208 288H432C440.8 288 448 280.8 448 272C448 263.2 440.8 256 432 256H208zM240 352H400C408.8 352 416 344.8 416 336C416 327.2 408.8 320 400 320H240C231.2 320 224 327.2 224 336C224 344.8 231.2 352 240 352z\"],\n    \"masks-theater\": [640, 512, [127917, \"theater-masks\"], \"f630\", \"M206.9 245.1C171 255.6 146.8 286.4 149.3 319.3C160.7 306.5 178.1 295.5 199.3 288.4L206.9 245.1zM95.78 294.9L64.11 115.5C63.74 113.9 64.37 112.9 64.37 112.9c57.75-32.13 123.1-48.99 189-48.99c1.625 0 3.113 .0745 4.738 .0745c13.1-13.5 31.75-22.75 51.62-26c18.87-3 38.12-4.5 57.25-5.25c-9.999-14-24.47-24.27-41.84-27.02c-23.87-3.875-47.9-5.732-71.77-5.732c-76.74 0-152.4 19.45-220.1 57.07C9.021 70.57-3.853 98.5 1.021 126.6L32.77 306c14.25 80.5 136.3 142 204.5 142c3.625 0 6.777-.2979 10.03-.6729c-13.5-17.13-28.1-40.5-39.5-67.63C160.1 366.8 101.7 328 95.78 294.9zM193.4 157.6C192.6 153.4 191.1 149.7 189.3 146.2c-8.249 8.875-20.62 15.75-35.25 18.37c-14.62 2.5-28.75 .376-39.5-5.249c-.5 4-.6249 7.998 .125 12.12c3.75 21.75 24.5 36.24 46.25 32.37C182.6 200.1 197.3 179.3 193.4 157.6zM606.8 121c-88.87-49.38-191.4-67.38-291.9-51.38C287.5 73.1 265.8 95.85 260.8 123.1L229 303.5c-15.37 87.13 95.33 196.3 158.3 207.3c62.1 11.13 204.5-53.68 219.9-140.8l31.75-179.5C643.9 162.3 631 134.4 606.8 121zM333.5 217.8c3.875-21.75 24.62-36.25 46.37-32.37c21.75 3.75 36.25 24.49 32.5 46.12c-.7499 4.125-2.25 7.873-4.125 11.5c-8.249-9-20.62-15.75-35.25-18.37c-14.75-2.625-28.75-.3759-39.5 5.124C332.1 225.9 332.9 221.9 333.5 217.8zM403.1 416.5c-55.62-9.875-93.49-59.23-88.99-112.1c20.62 25.63 56.25 46.24 99.49 53.87c43.25 7.625 83.74 .3781 111.9-16.62C512.2 392.7 459.7 426.3 403.1 416.5zM534.4 265.2c-8.249-8.875-20.75-15.75-35.37-18.37c-14.62-2.5-28.62-.3759-39.5 5.249c-.5-4-.625-7.998 .125-12.12c3.875-21.75 24.62-36.25 46.37-32.37c21.75 3.875 36.25 24.49 32.37 46.24C537.6 257.9 536.1 261.7 534.4 265.2z\"],\n    \"maximize\": [448, 512, [\"expand-arrows-alt\"], \"f31e\", \"M447.1 319.1v135.1c0 13.26-10.75 23.1-23.1 23.1h-135.1c-12.94 0-24.61-7.781-29.56-19.75c-4.906-11.1-2.203-25.72 6.937-34.87l30.06-30.06L224 323.9l-71.43 71.44l30.06 30.06c9.156 9.156 11.91 22.91 6.937 34.87C184.6 472.2 172.9 479.1 160 479.1H24c-13.25 0-23.1-10.74-23.1-23.1v-135.1c0-12.94 7.781-24.61 19.75-29.56C23.72 288.8 27.88 288 32 288c8.312 0 16.5 3.242 22.63 9.367l30.06 30.06l71.44-71.44L84.69 184.6L54.63 214.6c-9.156 9.156-22.91 11.91-34.87 6.937C7.798 216.6 .0013 204.9 .0013 191.1v-135.1c0-13.26 10.75-23.1 23.1-23.1h135.1c12.94 0 24.61 7.781 29.56 19.75C191.2 55.72 191.1 59.87 191.1 63.1c0 8.312-3.237 16.5-9.362 22.63L152.6 116.7l71.44 71.44l71.43-71.44l-30.06-30.06c-9.156-9.156-11.91-22.91-6.937-34.87c4.937-11.95 16.62-19.75 29.56-19.75h135.1c13.26 0 23.1 10.75 23.1 23.1v135.1c0 12.94-7.781 24.61-19.75 29.56c-11.1 4.906-25.72 2.203-34.87-6.937l-30.06-30.06l-71.43 71.43l71.44 71.44l30.06-30.06c9.156-9.156 22.91-11.91 34.87-6.937C440.2 295.4 447.1 307.1 447.1 319.1z\"],\n    \"medal\": [512, 512, [127941], \"f5a2\", \"M223.7 130.8L149.1 7.77C147.1 2.949 141.9 0 136.3 0H16.03c-12.95 0-20.53 14.58-13.1 25.18l111.3 158.9C143.9 156.4 181.7 137.3 223.7 130.8zM256 160c-97.25 0-176 78.75-176 176S158.8 512 256 512s176-78.75 176-176S353.3 160 256 160zM348.5 317.3l-37.88 37l8.875 52.25c1.625 9.25-8.25 16.5-16.63 12l-46.88-24.62L209.1 418.5c-8.375 4.5-18.25-2.75-16.63-12l8.875-52.25l-37.88-37C156.6 310.6 160.5 299 169.9 297.6l52.38-7.625L245.7 242.5c2-4.25 6.125-6.375 10.25-6.375S264.2 238.3 266.2 242.5l23.5 47.5l52.38 7.625C351.6 299 355.4 310.6 348.5 317.3zM495.1 0H375.7c-5.621 0-10.83 2.949-13.72 7.77l-73.76 122.1c42 6.5 79.88 25.62 109.5 53.38l111.3-158.9C516.5 14.58 508.9 0 495.1 0z\"],\n    \"memory\": [576, 512, [], \"f538\", \"M0 448h80v-32c0-8.838 7.164-16 16-16c8.838 0 16 7.162 16 16v32h96v-32c0-8.838 7.164-16 16-16c8.838 0 16 7.162 16 16v32h96v-32c0-8.838 7.164-16 16-16c8.838 0 16 7.162 16 16v32h96v-32c0-8.838 7.164-16 16-16c8.838 0 16 7.162 16 16v32H576v-96H0V448zM576 146.9V112C576 85.49 554.5 64 528 64h-480C21.49 64 0 85.49 0 112v34.94C18.6 153.5 32 171.1 32 192S18.6 230.5 0 237.1V320h576V237.1C557.4 230.5 544 212.9 544 192S557.4 153.5 576 146.9zM192 240C192 248.8 184.8 256 176 256h-32C135.2 256 128 248.8 128 240v-96C128 135.2 135.2 128 144 128h32C184.8 128 192 135.2 192 144V240zM320 240C320 248.8 312.8 256 304 256h-32C263.2 256 256 248.8 256 240v-96C256 135.2 263.2 128 272 128h32C312.8 128 320 135.2 320 144V240zM448 240C448 248.8 440.8 256 432 256h-32C391.2 256 384 248.8 384 240v-96C384 135.2 391.2 128 400 128h32C440.8 128 448 135.2 448 144V240z\"],\n    \"menorah\": [640, 512, [], \"f676\", \"M544 144C544 135.1 536.9 128 528 128h-32C487.1 128 480 135.1 480 144V288h64V144zM416 95.1c17.62 0 32-14.38 32-32s-32-63.1-32-63.1s-32 46.37-32 63.1S398.4 95.1 416 95.1zM448 144C448 135.1 440.9 128 432 128h-32C391.1 128 384 135.1 384 144V288h64V144zM608 95.1c17.62 0 32-14.38 32-32s-32-63.1-32-63.1s-32 46.37-32 63.1S590.4 95.1 608 95.1zM320 95.1c17.62 0 32-14.38 32-32s-32-63.1-32-63.1S288 46.37 288 63.1S302.4 95.1 320 95.1zM512 95.1c17.62 0 32-14.38 32-32s-32-63.1-32-63.1s-32 46.37-32 63.1S494.4 95.1 512 95.1zM624 128h-32C583.2 128 576 135.2 576 144V288c0 17.6-14.4 32-32 32h-192V144C352 135.2 344.8 128 336 128h-32C295.2 128 288 135.2 288 144V320H96c-17.6 0-32-14.4-32-32V144C64 135.2 56.84 128 48 128h-32C7.164 128 0 135.2 0 144V288c0 53.02 42.98 96 96 96h192v64H176C149.5 448 128 469.5 128 496C128 504.8 135.2 512 144 512h352c8.836 0 16-7.164 16-16c0-26.51-21.49-48-48-48H352v-64h192c53.02 0 96-42.98 96-96V144C640 135.2 632.8 128 624 128zM160 144C160 135.1 152.9 128 144 128h-32C103.1 128 96 135.1 96 144V288h64V144zM224 95.1c17.62 0 32-14.38 32-32S224 0 224 0S192 46.37 192 63.1S206.4 95.1 224 95.1zM32 95.1c17.62 0 32-14.38 32-32S32 0 32 0S0 46.37 0 63.1S14.38 95.1 32 95.1zM128 95.1c17.62 0 32-14.38 32-32S128 0 128 0S96 46.37 96 63.1S110.4 95.1 128 95.1zM256 144C256 135.1 248.9 128 240 128h-32C199.1 128 192 135.1 192 144V288h64V144z\"],\n    \"mercury\": [384, 512, [9791], \"f223\", \"M368 223.1c0-55.32-25.57-104.6-65.49-136.9c20.49-17.32 37.2-39.11 48.1-64.21c4.656-10.72-2.9-22.89-14.45-22.89h-54.31c-5.256 0-9.93 2.828-12.96 7.188C251.8 31.77 223.8 47.1 192 47.1c-31.85 0-59.78-16.23-76.88-40.81C112.1 2.828 107.4 0 102.2 0H47.84c-11.55 0-19.11 12.17-14.45 22.89C44.29 47.1 60.1 69.79 81.49 87.11C41.57 119.4 16 168.7 16 223.1c0 86.26 62.1 157.9 144 172.1V416H128c-8.836 0-16 7.164-16 16v32C112 472.8 119.2 480 128 480h32v16C160 504.8 167.2 512 176 512h32c8.838 0 16-7.164 16-16V480h32c8.838 0 16-7.164 16-16v-32c0-8.836-7.162-16-16-16h-32v-19.05C305.9 381.9 368 310.3 368 223.1zM192 320c-52.93 0-96-43.07-96-96c0-52.94 43.07-95.1 96-95.1c52.94 0 96 43.06 96 95.1C288 276.9 244.9 320 192 320z\"],\n    \"message\": [512, 512, [\"comment-alt\"], \"f27a\", \"M511.1 63.1v287.1c0 35.25-28.75 63.1-64 63.1h-144l-124.9 93.68c-7.875 5.75-19.12 .0497-19.12-9.7v-83.98h-96c-35.25 0-64-28.75-64-63.1V63.1c0-35.25 28.75-63.1 64-63.1h384C483.2 0 511.1 28.75 511.1 63.1z\"],\n    \"meteor\": [512, 512, [9732], \"f753\", \"M511.4 20.72c-11.63 38.75-34.38 111.8-61.38 187.8c7 2.125 13.38 4 18.63 5.625c4.625 1.375 8.375 4.751 10.13 9.127c1.875 4.5 1.625 9.501-.625 13.75c-22.13 42.25-82.63 152.8-142.5 214.4c-1 1.125-2.001 2.5-3.001 3.5c-76 76.13-199.4 76.13-275.5 .125c-76.13-76.13-76.13-199.5 0-275.7c1-1 2.375-2 3.5-3C122.1 116.5 232.5 55.97 274.1 33.84c4.25-2.25 9.25-2.5 13.63-.625c4.5 1.875 7.875 5.626 9.25 10.13c1.625 5.125 3.5 11.63 5.625 18.63c75.88-27 148.9-49.75 187.6-61.25c5.75-1.75 11.88-.2503 16.13 4C511.5 8.844 512.1 15.09 511.4 20.72zM319.1 319.1c0-70.63-57.38-128-128-128c-70.75 0-128 57.38-128 128c0 70.76 57.25 128 128 128C262.6 448 319.1 390.8 319.1 319.1zM191.1 287.1c0 17.63-14.37 32-32 32c-17.75 0-32-14.38-32-32s14.25-32 32-32c8.5 0 16.63 3.375 22.63 9.375S191.1 279.5 191.1 287.1zM223.9 367.1c0 8.876-7.224 16-15.97 16c-8.875 0-16-7.127-16-16c0-8.876 7.1-16 15.98-16C216.7 351.1 223.9 359.1 223.9 367.1z\"],\n    \"microchip\": [512, 512, [], \"f2db\", \"M160 352h192V160H160V352zM448 176h48C504.8 176 512 168.8 512 160s-7.162-16-16-16H448V128c0-35.35-28.65-64-64-64h-16V16C368 7.164 360.8 0 352 0c-8.836 0-16 7.164-16 16V64h-64V16C272 7.164 264.8 0 256 0C247.2 0 240 7.164 240 16V64h-64V16C176 7.164 168.8 0 160 0C151.2 0 144 7.164 144 16V64H128C92.65 64 64 92.65 64 128v16H16C7.164 144 0 151.2 0 160s7.164 16 16 16H64v64H16C7.164 240 0 247.2 0 256s7.164 16 16 16H64v64H16C7.164 336 0 343.2 0 352s7.164 16 16 16H64V384c0 35.35 28.65 64 64 64h16v48C144 504.8 151.2 512 160 512c8.838 0 16-7.164 16-16V448h64v48c0 8.836 7.164 16 16 16c8.838 0 16-7.164 16-16V448h64v48c0 8.836 7.164 16 16 16c8.838 0 16-7.164 16-16V448H384c35.35 0 64-28.65 64-64v-16h48c8.838 0 16-7.164 16-16s-7.162-16-16-16H448v-64h48C504.8 272 512 264.8 512 256s-7.162-16-16-16H448V176zM384 368c0 8.836-7.162 16-16 16h-224C135.2 384 128 376.8 128 368v-224C128 135.2 135.2 128 144 128h224C376.8 128 384 135.2 384 144V368z\"],\n    \"microphone\": [384, 512, [], \"f130\", \"M192 352c53.03 0 96-42.97 96-96v-160c0-53.03-42.97-96-96-96s-96 42.97-96 96v160C96 309 138.1 352 192 352zM344 192C330.7 192 320 202.7 320 215.1V256c0 73.33-61.97 132.4-136.3 127.7c-66.08-4.169-119.7-66.59-119.7-132.8L64 215.1C64 202.7 53.25 192 40 192S16 202.7 16 215.1v32.15c0 89.66 63.97 169.6 152 181.7V464H128c-18.19 0-32.84 15.18-31.96 33.57C96.43 505.8 103.8 512 112 512h160c8.222 0 15.57-6.216 15.96-14.43C288.8 479.2 274.2 464 256 464h-40v-33.77C301.7 418.5 368 344.9 368 256V215.1C368 202.7 357.3 192 344 192z\"],\n    \"microphone-lines\": [384, 512, [127897, \"microphone-alt\"], \"f3c9\", \"M192 352c53.03 0 96-42.97 96-96h-80C199.2 256 192 248.8 192 240S199.2 224 208 224H288V192h-80C199.2 192 192 184.8 192 176S199.2 160 208 160H288V127.1h-80c-8.836 0-16-7.164-16-16s7.164-16 16-16L288 96c0-53.03-42.97-96-96-96s-96 42.97-96 96v160C96 309 138.1 352 192 352zM344 192C330.7 192 320 202.7 320 215.1V256c0 73.33-61.97 132.4-136.3 127.7c-66.08-4.169-119.7-66.59-119.7-132.8L64 215.1C64 202.7 53.25 192 40 192S16 202.7 16 215.1v32.15c0 89.66 63.97 169.6 152 181.7V464H128c-18.19 0-32.84 15.18-31.96 33.57C96.43 505.8 103.8 512 112 512h160c8.222 0 15.57-6.216 15.96-14.43C288.8 479.2 274.2 464 256 464h-40v-33.77C301.7 418.5 368 344.9 368 256V215.1C368 202.7 357.3 192 344 192z\"],\n    \"microphone-lines-slash\": [640, 512, [\"microphone-alt-slash\"], \"f539\", \"M383.1 464l-39.1-.0001v-33.77c20.6-2.824 39.99-9.402 57.69-18.72l-43.26-33.91c-14.66 4.65-30.28 7.179-46.68 6.144C245.7 379.6 191.1 317.1 191.1 250.9v-3.777L143.1 209.5l.0001 38.61c0 89.65 63.97 169.6 151.1 181.7v34.15l-40 .0001c-17.67 0-31.1 14.33-31.1 31.1C223.1 504.8 231.2 512 239.1 512h159.1c8.838 0 15.1-7.164 15.1-15.1C415.1 478.3 401.7 464 383.1 464zM630.8 469.1l-159.3-124.9c15.37-25.94 24.53-55.91 24.53-88.21V216c0-13.25-10.75-24-23.1-24c-13.25 0-24 10.75-24 24l-.0001 39.1c0 21.12-5.557 40.77-14.77 58.24l-25.73-20.16c5.234-11.68 8.493-24.42 8.493-38.08l-57.07 .0006l-34.45-27c2.914-3.055 6.969-4.999 11.52-4.999h79.1V192L335.1 192c-8.836 0-15.1-7.164-15.1-15.1s7.164-16 15.1-16l79.1 .0013V128l-79.1-.0015c-8.836 0-15.1-7.164-15.1-15.1s7.164-15.1 15.1-15.1l80-.0003c0-54-44.56-97.57-98.93-95.95C264.5 1.614 223.1 47.45 223.1 100l.0006 50.23L38.81 5.111C34.41 1.673 29.19 0 24.03 0C16.91 0 9.84 3.158 5.121 9.189C-3.067 19.63-1.249 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.57 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"microphone-slash\": [640, 512, [], \"f131\", \"M383.1 464l-39.1-.0001v-33.77c20.6-2.824 39.98-9.402 57.69-18.72l-43.26-33.91c-14.66 4.65-30.28 7.179-46.68 6.144C245.7 379.6 191.1 317.1 191.1 250.9V247.2L143.1 209.5l.0001 38.61c0 89.65 63.97 169.6 151.1 181.7v34.15l-40 .0001c-17.67 0-31.1 14.33-31.1 31.1C223.1 504.8 231.2 512 239.1 512h159.1c8.838 0 15.1-7.164 15.1-15.1C415.1 478.3 401.7 464 383.1 464zM630.8 469.1l-159.3-124.9c15.37-25.94 24.53-55.91 24.53-88.21V216c0-13.25-10.75-24-23.1-24c-13.25 0-24 10.75-24 24l-.0001 39.1c0 21.12-5.559 40.77-14.77 58.24l-25.72-20.16c5.234-11.68 8.493-24.42 8.493-38.08l-.001-155.1c0-52.57-40.52-98.41-93.07-99.97c-54.37-1.617-98.93 41.95-98.93 95.95l0 54.25L38.81 5.111C34.41 1.673 29.19 0 24.03 0C16.91 0 9.839 3.158 5.12 9.189c-8.187 10.44-6.37 25.53 4.068 33.7l591.1 463.1c10.5 8.203 25.57 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"microscope\": [512, 512, [128300], \"f610\", \"M160 320h12v16c0 8.875 7.125 16 16 16h40c8.875 0 16-7.125 16-16V320H256c17.62 0 32-14.38 32-32V64c0-17.62-14.38-32-32-32V16C256 7.125 248.9 0 240 0h-64C167.1 0 160 7.125 160 16V32C142.4 32 128 46.38 128 64v224C128 305.6 142.4 320 160 320zM464 448h-1.25C493.2 414 512 369.2 512 320c0-105.9-86.13-192-192-192v64c70.63 0 128 57.38 128 128s-57.38 128-128 128H48C21.5 448 0 469.5 0 496C0 504.9 7.125 512 16 512h480c8.875 0 16-7.125 16-16C512 469.5 490.5 448 464 448zM104 416h208c4.375 0 8-3.625 8-8v-16c0-4.375-3.625-8-8-8h-208C99.63 384 96 387.6 96 392v16C96 412.4 99.63 416 104 416z\"],\n    \"mill-sign\": [384, 512, [], \"e1ed\", \"M282.9 96.53C339.7 102 384 149.8 384 208V416C384 433.7 369.7 448 352 448C334.3 448 320 433.7 320 416V208C320 181.5 298.5 160 272 160C267.7 160 263.6 160.6 259.7 161.6L224 261.5V416C224 433.7 209.7 448 192 448C179.6 448 168.9 440.1 163.6 430.7L142.1 490.8C136.2 507.4 117.9 516.1 101.2 510.1C84.59 504.2 75.92 485.9 81.86 469.2L160 250.5V208C160 181.5 138.5 160 112 160C85.49 160 64 181.5 64 208V416C64 433.7 49.67 448 32 448C14.33 448 0 433.7 0 416V128C0 110.3 14.33 96 32 96C42.87 96 52.48 101.4 58.26 109.7C74.21 100.1 92.53 96 112 96C143.3 96 171.7 108.9 192 129.6C196.9 124.6 202.2 120.1 207.1 116.1L241.9 21.24C247.8 4.595 266.1-4.079 282.8 1.865C299.4 7.809 308.1 26.12 302.1 42.76L282.9 96.53z\"],\n    \"minimize\": [512, 512, [\"compress-arrows-alt\"], \"f78c\", \"M200 287.1H64c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.937 34.87l30.06 30.06l-62.06 62.07c-12.49 12.5-12.5 32.75-.0012 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.26 .0012l62.06-62.07l30.06 30.06c6.125 6.125 14.31 9.375 22.62 9.375c4.125 0 8.281-.7969 12.25-2.437c11.97-4.953 19.75-16.62 19.75-29.56V311.1C224 298.7 213.3 287.1 200 287.1zM312 224h135.1c12.94 0 24.62-7.797 29.56-19.75c4.969-11.97 2.219-25.72-6.937-34.87l-30.06-30.06l62.06-62.07c12.5-12.5 12.5-32.76 .0003-45.26l-22.62-22.62c-12.5-12.5-32.76-12.5-45.26-.0003l-62.06 62.07l-30.06-30.06c-9.156-9.141-22.87-11.84-34.87-6.937C295.8 39.39 288 51.06 288 64v135.1C288 213.3 298.7 224 312 224zM204.3 34.44C192.3 29.47 178.5 32.22 169.4 41.38L139.3 71.44L77.25 9.374C64.75-3.123 44.49-3.123 31.1 9.374l-22.63 22.63c-12.49 12.49-12.49 32.75 .0018 45.25l62.07 62.06L41.38 169.4C35.25 175.5 32 183.7 32 192c0 4.125 .7969 8.281 2.438 12.25C39.39 216.2 51.07 224 64 224h135.1c13.25 0 23.1-10.75 23.1-23.1V64C224 51.06 216.2 39.38 204.3 34.44zM440.6 372.7l30.06-30.06c9.141-9.156 11.84-22.88 6.938-34.87C472.6 295.8 460.9 287.1 448 287.1h-135.1c-13.25 0-23.1 10.75-23.1 23.1v135.1c0 12.94 7.797 24.62 19.75 29.56c11.97 4.969 25.72 2.219 34.87-6.937l30.06-30.06l62.06 62.06c12.5 12.5 32.76 12.5 45.26 .0002l22.62-22.62c12.5-12.5 12.5-32.76 .0002-45.26L440.6 372.7z\"],\n    \"minus\": [448, 512, [8722, 10134, 8211, \"subtract\"], \"f068\", \"M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z\"],\n    \"mitten\": [448, 512, [], \"f7b5\", \"M351.1 416H63.99c-17.6 0-31.1 14.4-31.1 31.1l.0026 31.1C31.1 497.6 46.4 512 63.1 512h288c17.6 0 32-14.4 32-31.1l-.0049-31.1C383.1 430.4 369.6 416 351.1 416zM425 206.9c-27.25-22.62-67.5-19-90.13 8.25l-20.88 25L284.4 111.8c-18-77.5-95.38-125.1-172.8-108C34.26 21.63-14.25 98.88 3.754 176.4L64 384h288l81.14-86.1C455.8 269.8 452.1 229.5 425 206.9z\"],\n    \"mobile\": [384, 512, [128241, \"mobile-android\", \"mobile-phone\"], \"f3ce\", \"M320 0H64C37.5 0 16 21.5 16 48v416C16 490.5 37.5 512 64 512h256c26.5 0 48-21.5 48-48v-416C368 21.5 346.5 0 320 0zM240 447.1C240 456.8 232.8 464 224 464H159.1C151.2 464 144 456.8 144 448S151.2 432 160 432h64C232.8 432 240 439.2 240 447.1z\"],\n    \"mobile-button\": [384, 512, [], \"f10b\", \"M320 0H64C37.49 0 16 21.49 16 48v416C16 490.5 37.49 512 64 512h256c26.51 0 48-21.49 48-48v-416C368 21.49 346.5 0 320 0zM192 464c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S209.8 464 192 464z\"],\n    \"mobile-screen-button\": [384, 512, [\"mobile-alt\"], \"f3cd\", \"M304 0h-224c-35.35 0-64 28.65-64 64v384c0 35.35 28.65 64 64 64h224c35.35 0 64-28.65 64-64V64C368 28.65 339.3 0 304 0zM192 480c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S209.8 480 192 480zM304 64v320h-224V64H304z\"],\n    \"money-bill\": [576, 512, [], \"f0d6\", \"M512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128C0 92.65 28.65 64 64 64H512zM128 384C128 348.7 99.35 320 64 320V384H128zM64 192C99.35 192 128 163.3 128 128H64V192zM512 384V320C476.7 320 448 348.7 448 384H512zM512 128H448C448 163.3 476.7 192 512 192V128zM288 352C341 352 384 309 384 256C384 202.1 341 160 288 160C234.1 160 192 202.1 192 256C192 309 234.1 352 288 352z\"],\n    \"money-bill-1\": [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M252 208C252 196.1 260.1 188 272 188H288C299 188 308 196.1 308 208V276H312C323 276 332 284.1 332 296C332 307 323 316 312 316H264C252.1 316 244 307 244 296C244 284.1 252.1 276 264 276H268V227.6C258.9 225.7 252 217.7 252 208zM512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128C0 92.65 28.65 64 64 64H512zM128 384C128 348.7 99.35 320 64 320V384H128zM64 192C99.35 192 128 163.3 128 128H64V192zM512 384V320C476.7 320 448 348.7 448 384H512zM512 128H448C448 163.3 476.7 192 512 192V128zM288 144C226.1 144 176 194.1 176 256C176 317.9 226.1 368 288 368C349.9 368 400 317.9 400 256C400 194.1 349.9 144 288 144z\"],\n    \"money-bill-1-wave\": [576, 512, [\"money-bill-wave-alt\"], \"f53b\", \"M251.1 207.1C251.1 196.1 260.1 187.1 271.1 187.1H287.1C299 187.1 308 196.1 308 207.1V275.1H312C323 275.1 332 284.1 332 295.1C332 307 323 315.1 312 315.1H263.1C252.1 315.1 243.1 307 243.1 295.1C243.1 284.1 252.1 275.1 263.1 275.1H267.1V227.6C258.9 225.7 251.1 217.7 251.1 207.1zM48.66 79.13C128.4 100.9 208.2 80.59 288 60.25C375 38.08 462 15.9 549 48.38C565.9 54.69 576 71.62 576 89.66V399.5C576 423.4 550.4 439.2 527.3 432.9C447.6 411.1 367.8 431.4 288 451.7C200.1 473.9 113.1 496.1 26.97 463.6C10.06 457.3 0 440.4 0 422.3V112.5C0 88.59 25.61 72.83 48.66 79.13L48.66 79.13zM127.1 416C127.1 380.7 99.35 352 63.1 352V416H127.1zM63.1 223.1C99.35 223.1 127.1 195.3 127.1 159.1H63.1V223.1zM512 352V287.1C476.7 287.1 448 316.7 448 352H512zM512 95.1H448C448 131.3 476.7 159.1 512 159.1V95.1zM287.1 143.1C234.1 143.1 191.1 194.1 191.1 255.1C191.1 317.9 234.1 368 287.1 368C341 368 384 317.9 384 255.1C384 194.1 341 143.1 287.1 143.1z\"],\n    \"money-bill-wave\": [576, 512, [], \"f53a\", \"M48.66 79.13C128.4 100.9 208.2 80.59 288 60.25C375 38.08 462 15.9 549 48.38C565.9 54.69 576 71.62 576 89.66V399.5C576 423.4 550.4 439.2 527.3 432.9C447.6 411.1 367.8 431.4 288 451.7C200.1 473.9 113.1 496.1 26.97 463.6C10.06 457.3 0 440.4 0 422.3V112.5C0 88.59 25.61 72.83 48.66 79.13L48.66 79.13zM287.1 352C332.2 352 368 309 368 255.1C368 202.1 332.2 159.1 287.1 159.1C243.8 159.1 207.1 202.1 207.1 255.1C207.1 309 243.8 352 287.1 352zM63.1 416H127.1C127.1 380.7 99.35 352 63.1 352V416zM63.1 143.1V207.1C99.35 207.1 127.1 179.3 127.1 143.1H63.1zM512 303.1C476.7 303.1 448 332.7 448 368H512V303.1zM448 95.1C448 131.3 476.7 159.1 512 159.1V95.1H448z\"],\n    \"money-check\": [576, 512, [], \"f53c\", \"M512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128C0 92.65 28.65 64 64 64H512zM112 224C103.2 224 96 231.2 96 240C96 248.8 103.2 256 112 256H272C280.8 256 288 248.8 288 240C288 231.2 280.8 224 272 224H112zM112 352H464C472.8 352 480 344.8 480 336C480 327.2 472.8 320 464 320H112C103.2 320 96 327.2 96 336C96 344.8 103.2 352 112 352zM376 160C362.7 160 352 170.7 352 184V232C352 245.3 362.7 256 376 256H456C469.3 256 480 245.3 480 232V184C480 170.7 469.3 160 456 160H376z\"],\n    \"money-check-dollar\": [576, 512, [\"money-check-alt\"], \"f53d\", \"M512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128C0 92.65 28.65 64 64 64H512zM272 192C263.2 192 256 199.2 256 208C256 216.8 263.2 224 272 224H496C504.8 224 512 216.8 512 208C512 199.2 504.8 192 496 192H272zM272 320H496C504.8 320 512 312.8 512 304C512 295.2 504.8 288 496 288H272C263.2 288 256 295.2 256 304C256 312.8 263.2 320 272 320zM164.1 160C164.1 148.9 155.1 139.9 143.1 139.9C132.9 139.9 123.9 148.9 123.9 160V166C118.3 167.2 112.1 168.9 108 171.1C93.06 177.9 80.07 190.5 76.91 208.8C75.14 219 76.08 228.9 80.32 237.8C84.47 246.6 91 252.8 97.63 257.3C109.2 265.2 124.5 269.8 136.2 273.3L138.4 273.9C152.4 278.2 161.8 281.3 167.7 285.6C170.2 287.4 171.1 288.8 171.4 289.7C171.8 290.5 172.4 292.3 171.7 296.3C171.1 299.8 169.2 302.8 163.7 305.1C157.6 307.7 147.7 309 134.9 307C128.9 306 118.2 302.4 108.7 299.2C106.5 298.4 104.3 297.7 102.3 297C91.84 293.5 80.51 299.2 77.02 309.7C73.53 320.2 79.2 331.5 89.68 334.1C90.89 335.4 92.39 335.9 94.11 336.5C101.1 339.2 114.4 343.4 123.9 345.6V352C123.9 363.1 132.9 372.1 143.1 372.1C155.1 372.1 164.1 363.1 164.1 352V346.5C169.4 345.5 174.6 343.1 179.4 341.9C195.2 335.2 207.8 322.2 211.1 303.2C212.9 292.8 212.1 282.8 208.1 273.7C204.2 264.7 197.9 258.1 191.2 253.3C179.1 244.4 162.9 239.6 150.8 235.9L149.1 235.7C135.8 231.4 126.2 228.4 120.1 224.2C117.5 222.4 116.7 221.2 116.5 220.7C116.3 220.3 115.7 219.1 116.3 215.7C116.7 213.7 118.2 210.4 124.5 207.6C130.1 204.7 140.9 203.1 153.1 204.1C157.5 205.7 171 208.3 174.9 209.3C185.5 212.2 196.5 205.8 199.3 195.1C202.2 184.5 195.8 173.5 185.1 170.7C180.7 169.5 170.7 167.5 164.1 166.3L164.1 160z\"],\n    \"monument\": [384, 512, [], \"f5a6\", \"M180.7 4.686C186.9-1.562 197.1-1.562 203.3 4.686L283.3 84.69C285.8 87.2 287.4 90.48 287.9 94.02L328.1 416H55.88L96.12 94.02C96.57 90.48 98.17 87.2 100.7 84.69L180.7 4.686zM152 272C138.7 272 128 282.7 128 296C128 309.3 138.7 320 152 320H232C245.3 320 256 309.3 256 296C256 282.7 245.3 272 232 272H152zM352 448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448H352z\"],\n    \"moon\": [512, 512, [127769, 9214], \"f186\", \"M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z\"],\n    \"mortar-pestle\": [512, 512, [], \"f5a7\", \"M501.5 60.87c17.25-17.12 12.5-46.25-9.25-57.13c-12.12-6-26.5-4.75-37.38 3.375L251.1 159.1h151.4L501.5 60.87zM496 191.1h-480c-8.875 0-16 7.125-16 16v32c0 8.875 7.125 16 16 16L31.1 256c0 81 50.25 150.1 121.1 178.4c-12.75 16.88-21.75 36.75-25 58.63C126.8 502.9 134.2 512 144.2 512h223.5c10 0 17.51-9.125 16.13-19c-3.25-21.88-12.25-41.75-25-58.63C429.8 406.1 479.1 337 479.1 256L496 255.1c8.875 0 16-7.125 16-16v-32C512 199.1 504.9 191.1 496 191.1z\"],\n    \"mosque\": [640, 512, [128332], \"f678\", \"M400 0C405 0 409.8 2.371 412.8 6.4C447.5 52.7 490.9 81.34 546.3 117.9C551.5 121.4 556.9 124.9 562.3 128.5C591.3 147.7 608 180.2 608 214.6C608 243.1 596.7 269 578.2 288H221.8C203.3 269 192 243.1 192 214.6C192 180.2 208.7 147.7 237.7 128.5C243.1 124.9 248.5 121.4 253.7 117.9C309.1 81.34 352.5 52.7 387.2 6.4C390.2 2.371 394.1 0 400 0V0zM288 440C288 426.7 277.3 416 264 416C250.7 416 240 426.7 240 440V512H192C174.3 512 160 497.7 160 480V352C160 334.3 174.3 320 192 320H608C625.7 320 640 334.3 640 352V480C640 497.7 625.7 512 608 512H560V440C560 426.7 549.3 416 536 416C522.7 416 512 426.7 512 440V512H448V453.1C448 434.1 439.6 416.1 424.1 404.8L400 384L375 404.8C360.4 416.1 352 434.1 352 453.1V512H288V440zM70.4 5.2C76.09 .9334 83.91 .9334 89.6 5.2L105.6 17.2C139.8 42.88 160 83.19 160 126V128H0V126C0 83.19 20.15 42.88 54.4 17.2L70.4 5.2zM0 160H160V296.6C140.9 307.6 128 328.3 128 352V480C128 489.6 130.1 498.6 133.8 506.8C127.3 510.1 119.9 512 112 512H48C21.49 512 0 490.5 0 464V160z\"],\n    \"motorcycle\": [640, 512, [127949], \"f21c\", \"M342.5 32C357.2 32 370.7 40.05 377.6 52.98L391.7 78.93L439.1 39.42C444.9 34.62 452.1 32 459.6 32H480C497.7 32 512 46.33 512 64V96C512 113.7 497.7 128 480 128H418.2L473.3 229.1C485.5 226.1 498.5 224 512 224C582.7 224 640 281.3 640 352C640 422.7 582.7 480 512 480C441.3 480 384 422.7 384 352C384 311.1 402.4 276.3 431.1 252.8L415.7 224.2C376.1 253.4 352 299.8 352 352C352 362.1 353.1 373.7 355.2 384H284.8C286.9 373.7 287.1 362.1 287.1 352C287.1 263.6 216.4 192 127.1 192H31.1V160C31.1 142.3 46.33 128 63.1 128H165.5C182.5 128 198.7 134.7 210.7 146.7L255.1 192L354.1 110.3L337.7 80H279.1C266.7 80 255.1 69.25 255.1 56C255.1 42.75 266.7 32 279.1 32L342.5 32zM448 352C448 387.3 476.7 416 512 416C547.3 416 576 387.3 576 352C576 316.7 547.3 288 512 288C509.6 288 507.2 288.1 504.9 288.4L533.1 340.6C539.4 352.2 535.1 366.8 523.4 373.1C511.8 379.4 497.2 375.1 490.9 363.4L462.7 311.2C453.5 322.3 448 336.5 448 352V352zM253.8 376C242.5 435.2 190.5 480 128 480C57.31 480 0 422.7 0 352C0 281.3 57.31 224 128 224C190.5 224 242.5 268.8 253.8 328H187.3C177.9 304.5 154.9 288 128 288C92.65 288 64 316.7 64 352C64 387.3 92.65 416 128 416C154.9 416 177.9 399.5 187.3 376H253.8zM96 352C96 334.3 110.3 320 128 320C145.7 320 160 334.3 160 352C160 369.7 145.7 384 128 384C110.3 384 96 369.7 96 352z\"],\n    \"mountain\": [512, 512, [127956], \"f6fc\", \"M503.2 393.8L280.1 44.25c-10.42-16.33-37.73-16.33-48.15 0L8.807 393.8c-11.11 17.41-11.75 39.42-1.666 57.45C17.07 468.1 35.92 480 56.31 480h399.4c20.39 0 39.24-11.03 49.18-28.77C514.9 433.2 514.3 411.2 503.2 393.8zM256 111.8L327.8 224H256L208 288L177.2 235.3L256 111.8z\"],\n    \"mug-hot\": [512, 512, [9749], \"f7b6\", \"M400 192H32C14.25 192 0 206.3 0 224v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.75 0 112-50.25 112-112S461.8 192 400 192zM400 352H384V256h16C426.5 256 448 277.5 448 304S426.5 352 400 352zM107.9 100.7C120.3 107.1 128 121.4 128 136c0 13.25 10.75 23.89 24 23.89S176 148.1 176 135.7c0-31.34-16.83-60.64-43.91-76.45C119.7 52.03 112 38.63 112 24.28c0-13.25-10.75-24.14-24-24.14S64 11.03 64 24.28C64 55.63 80.83 84.92 107.9 100.7zM219.9 100.7C232.3 107.1 240 121.4 240 136c0 13.25 10.75 23.86 24 23.86S288 148.1 288 135.7c0-31.34-16.83-60.64-43.91-76.45C231.7 52.03 224 38.63 224 24.28c0-13.25-10.75-24.18-24-24.18S176 11.03 176 24.28C176 55.63 192.8 84.92 219.9 100.7z\"],\n    \"mug-saucer\": [640, 512, [\"coffee\"], \"f0f4\", \"M512 32H120c-13.25 0-24 10.75-24 24L96.01 288c0 53 43 96 96 96h192C437 384 480 341 480 288h32c70.63 0 128-57.38 128-128S582.6 32 512 32zM512 224h-32V96h32c35.25 0 64 28.75 64 64S547.3 224 512 224zM560 416h-544C7.164 416 0 423.2 0 432C0 458.5 21.49 480 48 480h480c26.51 0 48-21.49 48-48C576 423.2 568.8 416 560 416z\"],\n    \"music\": [512, 512, [127925], \"f001\", \"M511.1 367.1c0 44.18-42.98 80-95.1 80s-95.1-35.82-95.1-79.1c0-44.18 42.98-79.1 95.1-79.1c11.28 0 21.95 1.92 32.01 4.898V148.1L192 224l-.0023 208.1C191.1 476.2 149 512 95.1 512S0 476.2 0 432c0-44.18 42.98-79.1 95.1-79.1c11.28 0 21.95 1.92 32 4.898V126.5c0-12.97 10.06-26.63 22.41-30.52l319.1-94.49C472.1 .6615 477.3 0 480 0c17.66 0 31.97 14.34 32 31.99L511.1 367.1z\"],\n    \"n\": [384, 512, [110], \"4e\", \"M384 64.01v384c0 13.47-8.438 25.5-21.09 30.09C359.3 479.4 355.7 480 352 480c-9.312 0-18.38-4.078-24.59-11.52L64 152.4v295.6c0 17.67-14.31 32-32 32s-32-14.33-32-32v-384c0-13.47 8.438-25.5 21.09-30.09c12.62-4.516 26.84-.75 35.5 9.609L320 359.6v-295.6c0-17.67 14.31-32 32-32S384 46.34 384 64.01z\"],\n    \"naira-sign\": [448, 512, [], \"e1f6\", \"M262.5 256H320V64C320 46.33 334.3 32 352 32C369.7 32 384 46.33 384 64V256H416C433.7 256 448 270.3 448 288C448 305.7 433.7 320 416 320H384V448C384 462.1 374.8 474.5 361.3 478.6C347.8 482.7 333.2 477.5 325.4 465.8L228.2 320H128V448C128 465.7 113.7 480 96 480C78.33 480 64 465.7 64 448V320H32C14.33 320 0 305.7 0 288C0 270.3 14.33 256 32 256H64V64C64 49.9 73.23 37.46 86.73 33.37C100.2 29.29 114.8 34.52 122.6 46.25L262.5 256zM305.1 320L320 342.3V320H305.1zM185.5 256L128 169.7V256H185.5z\"],\n    \"network-wired\": [640, 512, [], \"f6ff\", \"M400 0C426.5 0 448 21.49 448 48V144C448 170.5 426.5 192 400 192H352V224H608C625.7 224 640 238.3 640 256C640 273.7 625.7 288 608 288H512V320H560C586.5 320 608 341.5 608 368V464C608 490.5 586.5 512 560 512H400C373.5 512 352 490.5 352 464V368C352 341.5 373.5 320 400 320H448V288H192V320H240C266.5 320 288 341.5 288 368V464C288 490.5 266.5 512 240 512H80C53.49 512 32 490.5 32 464V368C32 341.5 53.49 320 80 320H128V288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H288V192H240C213.5 192 192 170.5 192 144V48C192 21.49 213.5 0 240 0H400zM256 64V128H384V64H256zM224 448V384H96V448H224zM416 384V448H544V384H416z\"],\n    \"neuter\": [384, 512, [9906], \"f22c\", \"M368 176c0-97.2-78.8-176-176-176c-97.2 0-176 78.8-176 176c0 86.26 62.1 157.9 144 172.1V496C160 504.8 167.2 512 176 512h32c8.838 0 16-7.164 16-16v-147C305.9 333.9 368 262.3 368 176zM192 272c-52.93 0-96-43.07-96-96c0-52.94 43.07-95.1 96-95.1c52.94 0 96 43.06 96 95.1C288 228.9 244.9 272 192 272z\"],\n    \"newspaper\": [512, 512, [128240], \"f1ea\", \"M480 32H128C110.3 32 96 46.33 96 64v336C96 408.8 88.84 416 80 416S64 408.8 64 400V96H32C14.33 96 0 110.3 0 128v288c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V64C512 46.33 497.7 32 480 32zM272 416h-96C167.2 416 160 408.8 160 400C160 391.2 167.2 384 176 384h96c8.836 0 16 7.162 16 16C288 408.8 280.8 416 272 416zM272 320h-96C167.2 320 160 312.8 160 304C160 295.2 167.2 288 176 288h96C280.8 288 288 295.2 288 304C288 312.8 280.8 320 272 320zM432 416h-96c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16h96c8.836 0 16 7.162 16 16C448 408.8 440.8 416 432 416zM432 320h-96C327.2 320 320 312.8 320 304C320 295.2 327.2 288 336 288h96C440.8 288 448 295.2 448 304C448 312.8 440.8 320 432 320zM448 208C448 216.8 440.8 224 432 224h-256C167.2 224 160 216.8 160 208v-96C160 103.2 167.2 96 176 96h256C440.8 96 448 103.2 448 112V208z\"],\n    \"not-equal\": [448, 512, [], \"f53e\", \"M432 336c0 17.69-14.31 32.01-32 32.01H187.8l-65.15 97.74C116.5 474.1 106.3 480 95.97 480c-6.094 0-12.25-1.75-17.72-5.375c-14.72-9.812-18.69-29.66-8.875-44.38l41.49-62.23H48c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h105.5l63.1-96H48c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h212.2l65.18-97.77c9.781-14.69 29.62-18.66 44.37-8.875c14.72 9.812 18.69 29.66 8.875 44.38l-41.51 62.27H400c17.69 0 32 14.31 32 31.99s-14.31 32.01-32 32.01h-105.6l-63.1 96H400C417.7 304 432 318.3 432 336z\"],\n    \"note-sticky\": [448, 512, [62026, \"sticky-note\"], \"f249\", \"M400 32h-352C21.49 32 0 53.49 0 80v352C0 458.5 21.49 480 48 480h245.5c16.97 0 33.25-6.744 45.26-18.75l90.51-90.51C441.3 358.7 448 342.5 448 325.5V80C448 53.49 426.5 32 400 32zM64 96h320l-.001 224H320c-17.67 0-32 14.33-32 32v64H64V96z\"],\n    \"notes-medical\": [512, 512, [], \"f481\", \"M480 144V384l-96 96H144C117.5 480 96 458.5 96 432v-288C96 117.5 117.5 96 144 96h288C458.5 96 480 117.5 480 144zM384 264C384 259.6 380.4 256 376 256H320V200C320 195.6 316.4 192 312 192h-48C259.6 192 256 195.6 256 200V256H200C195.6 256 192 259.6 192 264v48C192 316.4 195.6 320 200 320H256v56c0 4.375 3.625 8 8 8h48c4.375 0 8-3.625 8-8V320h56C380.4 320 384 316.4 384 312V264zM0 360v-240C0 53.83 53.83 0 120 0h240C373.3 0 384 10.75 384 24S373.3 48 360 48h-240C80.3 48 48 80.3 48 120v240C48 373.3 37.25 384 24 384S0 373.3 0 360z\"],\n    \"o\": [448, 512, [111], \"4f\", \"M224 32.01c-123.5 0-224 100.5-224 224s100.5 224 224 224s224-100.5 224-224S347.5 32.01 224 32.01zM224 416c-88.22 0-160-71.78-160-160s71.78-159.1 160-159.1s160 71.78 160 159.1S312.2 416 224 416z\"],\n    \"object-group\": [576, 512, [], \"f247\", \"M128 160C128 142.3 142.3 128 160 128H288C305.7 128 320 142.3 320 160V256C320 273.7 305.7 288 288 288H160C142.3 288 128 273.7 128 256V160zM288 320C323.3 320 352 291.3 352 256V224H416C433.7 224 448 238.3 448 256V352C448 369.7 433.7 384 416 384H288C270.3 384 256 369.7 256 352V320H288zM32 119.4C12.87 108.4 0 87.69 0 64C0 28.65 28.65 0 64 0C87.69 0 108.4 12.87 119.4 32H456.6C467.6 12.87 488.3 0 512 0C547.3 0 576 28.65 576 64C576 87.69 563.1 108.4 544 119.4V392.6C563.1 403.6 576 424.3 576 448C576 483.3 547.3 512 512 512C488.3 512 467.6 499.1 456.6 480H119.4C108.4 499.1 87.69 512 64 512C28.65 512 0 483.3 0 448C0 424.3 12.87 403.6 32 392.6V119.4zM119.4 96C113.8 105.7 105.7 113.8 96 119.4V392.6C105.7 398.2 113.8 406.3 119.4 416H456.6C462.2 406.3 470.3 398.2 480 392.6V119.4C470.3 113.8 462.2 105.7 456.6 96H119.4z\"],\n    \"object-ungroup\": [640, 512, [], \"f248\", \"M32 119.4C12.87 108.4 0 87.69 0 64C0 28.65 28.65 0 64 0C87.69 0 108.4 12.87 119.4 32H328.6C339.6 12.87 360.3 0 384 0C419.3 0 448 28.65 448 64C448 87.69 435.1 108.4 416 119.4V232.6C435.1 243.6 448 264.3 448 288C448 323.3 419.3 352 384 352C360.3 352 339.6 339.1 328.6 320H119.4C108.4 339.1 87.69 352 64 352C28.65 352 0 323.3 0 288C0 264.3 12.87 243.6 32 232.6V119.4zM96 119.4V232.6C105.7 238.2 113.8 246.3 119.4 256H328.6C334.2 246.3 342.3 238.2 352 232.6V119.4C342.3 113.8 334.2 105.7 328.6 96H119.4C113.8 105.7 105.7 113.8 96 119.4V119.4zM311.4 480C300.4 499.1 279.7 512 256 512C220.7 512 192 483.3 192 448C192 424.3 204.9 403.6 224 392.6V352H288V392.6C297.7 398.2 305.8 406.3 311.4 416H520.6C526.2 406.3 534.3 398.2 544 392.6V279.4C534.3 273.8 526.2 265.7 520.6 255.1H474.5C469.1 240.6 459.9 227.1 448 216.4V191.1H520.6C531.6 172.9 552.3 159.1 576 159.1C611.3 159.1 640 188.7 640 223.1C640 247.7 627.1 268.4 608 279.4V392.6C627.1 403.6 640 424.3 640 448C640 483.3 611.3 512 576 512C552.3 512 531.6 499.1 520.6 480H311.4z\"],\n    \"oil-can\": [640, 512, [], \"f613\", \"M288 128V160H368.9C378.8 160 388.6 162.3 397.5 166.8L448 192L615 156.2C633.1 152.3 645.7 173.8 633.5 187.7L451.1 394.3C438.1 408.1 421.5 416 403.1 416H144C117.5 416 96 394.5 96 368V346.7L28.51 316.7C11.17 308.1 0 291.8 0 272.8V208C0 181.5 21.49 160 48 160H224V128H192C174.3 128 160 113.7 160 96C160 78.33 174.3 64 192 64H320C337.7 64 352 78.33 352 96C352 113.7 337.7 128 320 128L288 128zM96 208H48V272.8L96 294.1V208z\"],\n    \"om\": [512, 512, [128329], \"f679\", \"M360.6 61C362.5 62.88 365.2 64 368 64s5.375-1.125 7.375-3l21.5-21.62C398.9 37.38 400 34.75 400 32s-1.125-5.375-3.125-7.375L375.4 3c-4.125-4-10.75-4-14.75 0L339 24.62C337 26.62 336 29.25 336 32s1 5.375 3 7.375L360.6 61zM412.1 191.1c-26.75 0-51.75 10.38-70.63 29.25l-24.25 24.25c-6.75 6.75-15.75 10.5-25.37 10.5H245c10.5-22.12 14.12-48.12 7.75-75.25C242.6 138.2 206.4 104.6 163.2 97.62c-36.25-6-71 5-96 28.75c-7.375 7-7 18.87 1.125 24.87L94.5 170.9c5.75 4.375 13.62 4.375 19.12-.125C122.1 163.8 132.8 159.1 144 159.1c26.38 0 48 21.5 48 48S170.4 255.9 143.1 255.9L112 255.1c-11.88 0-19.75 12.63-14.38 23.25L113.8 311.5C116.2 316.5 121.4 319.5 126.9 320H160c35.25 0 64 28.75 64 64s-28.75 64-64 64c-96.12 0-122.4-53.1-145.2-92C10.25 348.4 0 352.4 0 361.2C-.125 416 41.12 512 160 512c70.5 0 127.1-57.44 127.1-128.1c0-23.38-6.874-45.06-17.87-63.94h21.75c26.62 0 51.75-10.38 70.63-29.25l24.25-24.25c6.75-6.75 15.75-10.5 25.37-10.5C431.9 255.1 448 272.1 448 291.9V392c0 13.25-18.75 24-32 24c-39.38 0-66.75-24.25-81.88-42.88C329.4 367.2 320 370.6 320 378.1V416c0 0 0 64 96 64c48.5 0 96-39.5 96-88V291.9C512 236.8 467.3 191.1 412.1 191.1zM454.3 67.25c-85.5 65.13-169 2.751-172.5 .125c-6-4.625-14.5-4.375-20.13 .5C255.9 72.75 254.3 81 257.9 87.63C259.5 90.63 298.2 160 376.8 160c79.88 0 98.75-31.38 101.8-37.63C479.5 120.2 480 117.9 480 115.5V80C480 66.75 464.9 59.25 454.3 67.25z\"],\n    \"otter\": [640, 512, [129446], \"f700\", \"M224 160c8.836 0 16-7.164 16-16C240 135.2 232.8 128 224 128S208 135.2 208 144C208 152.8 215.2 160 224 160zM96 128C87.16 128 80 135.2 80 144C80 152.8 87.16 160 96 160s16-7.164 16-16C112 135.2 104.8 128 96 128zM474.4 64.12C466.8 63.07 460 69.07 460 76.73c0 5.959 4.188 10.1 9.991 12.36C514.2 99.46 544 160 544 192v112c0 8.844-7.156 16-16 16S512 312.8 512 304V212c0-14.87-15.65-24.54-28.94-17.89c-28.96 14.48-47.83 42.99-50.51 74.88C403.7 285.6 384 316.3 384 352v32H224c17.67 0 32-14.33 32-32c0-17.67-14.33-32-32-32H132.4c-14.46 0-27.37-9.598-31.08-23.57C97.86 283.5 96 269.1 96 256V254.4C101.1 255.3 106.3 256 111.7 256c10.78 0 21.45-2.189 31.36-6.436L160 242.3l16.98 7.271C186.9 253.8 197.6 256 208.3 256c7.176 0 14.11-.9277 20.83-2.426C241.7 292 277.4 320 320 320l36.56-.0366C363.1 294.7 377.1 272.7 396.2 256H320c0-25.73 17.56-31.61 32.31-32C369.8 223.8 384 209.6 384 192c0-17.67-14.31-32-32-32c-15.09 0-32.99 4.086-49.28 13.06C303.3 168.9 304 164.7 304 160.3v-16c0-1.684-.4238-3.248-.4961-4.912C313.2 133.9 320 123.9 320 112C320 103.2 312.8 96 304 96H292.7C274.6 58.26 236.3 32 191.7 32H128.3C83.68 32 45.44 58.26 27.33 96H16C7.164 96 0 103.2 0 112c0 11.93 6.816 21.93 16.5 27.43C16.42 141.1 16 142.7 16 144.3v16c0 19.56 5.926 37.71 16 52.86V256c0 123.7 100.3 224 224 224h160c123.9-1.166 224-101.1 224-226.2C639.9 156.9 567.8 76.96 474.4 64.12zM64 160.3v-16C64 108.9 92.86 80 128.3 80h63.32C227.1 80 256 108.9 256 144.3v16C256 186.6 234.6 208 208.3 208c-4.309 0-8.502-.8608-12.46-2.558L162.1 191.4c2.586-.3066 5.207-.543 7.598-1.631l8.314-3.777C186.9 182.3 192 174.9 192 166.7V160c0-6.723-5.996-12.17-13.39-12.17H141.4C133.1 147.8 128 153.3 128 160v6.701c0 8.15 5.068 15.6 13.09 19.25l8.314 3.777c2.391 1.088 5.012 1.324 7.598 1.631l-32.88 14.08C120.2 207.1 115.1 208 111.7 208C85.38 208 64 186.6 64 160.3z\"],\n    \"outdent\": [512, 512, [\"dedent\"], \"f03b\", \"M32 64C32 46.33 46.33 32 64 32H448C465.7 32 480 46.33 480 64C480 81.67 465.7 96 448 96H64C46.33 96 32 81.67 32 64V64zM224 192C224 174.3 238.3 160 256 160H448C465.7 160 480 174.3 480 192C480 209.7 465.7 224 448 224H256C238.3 224 224 209.7 224 192zM448 288C465.7 288 480 302.3 480 320C480 337.7 465.7 352 448 352H256C238.3 352 224 337.7 224 320C224 302.3 238.3 288 256 288H448zM32 448C32 430.3 46.33 416 64 416H448C465.7 416 480 430.3 480 448C480 465.7 465.7 480 448 480H64C46.33 480 32 465.7 32 448V448zM32.24 268.6C24 262.2 24 249.8 32.24 243.4L134.2 164.1C144.7 155.9 160 163.4 160 176.7V335.3C160 348.6 144.7 356.1 134.2 347.9L32.24 268.6z\"],\n    \"p\": [320, 512, [112], \"50\", \"M160 32.01H32c-17.69 0-32 14.33-32 32v384c0 17.67 14.31 32 32 32s32-14.33 32-32v-96h96c88.22 0 160-71.78 160-159.1S248.2 32.01 160 32.01zM160 288H64V96.01h96c52.94 0 96 43.06 96 96S212.9 288 160 288z\"],\n    \"pager\": [512, 512, [128223], \"f815\", \"M448 64H64C28.63 64 0 92.63 0 128v256c0 35.38 28.62 64 64 64h384c35.38 0 64-28.62 64-64V128C512 92.63 483.4 64 448 64zM160 368H80C71.13 368 64 360.9 64 352v-16C64 327.1 71.13 320 80 320H160V368zM288 352c0 8.875-7.125 16-16 16H192V320h80c8.875 0 16 7.125 16 16V352zM448 224c0 17.62-14.38 32-32 32H96C78.38 256 64 241.6 64 224V160c0-17.62 14.38-32 32-32h320c17.62 0 32 14.38 32 32V224z\"],\n    \"paint-roller\": [512, 512, [], \"f5aa\", \"M0 64C0 28.65 28.65 0 64 0H352C387.3 0 416 28.65 416 64V128C416 163.3 387.3 192 352 192H64C28.65 192 0 163.3 0 128V64zM160 352C160 334.3 174.3 320 192 320V304C192 259.8 227.8 224 272 224H416C433.7 224 448 209.7 448 192V69.46C485.3 82.64 512 118.2 512 160V192C512 245 469 288 416 288H272C263.2 288 256 295.2 256 304V320C273.7 320 288 334.3 288 352V480C288 497.7 273.7 512 256 512H192C174.3 512 160 497.7 160 480V352z\"],\n    \"paintbrush\": [576, 512, [128396, \"paint-brush\"], \"f1fc\", \"M224 263.3C224.2 233.3 238.4 205.2 262.4 187.2L499.1 9.605C517.7-4.353 543.6-2.965 560.7 12.9C577.7 28.76 580.8 54.54 568.2 74.07L406.5 324.1C391.3 347.7 366.6 363.2 339.3 367.1L224 263.3zM320 400C320 461.9 269.9 512 208 512H64C46.33 512 32 497.7 32 480C32 462.3 46.33 448 64 448H68.81C86.44 448 98.4 429.1 96.59 411.6C96.2 407.8 96 403.9 96 400C96 339.6 143.9 290.3 203.7 288.1L319.8 392.5C319.9 394.1 320 397.5 320 400V400z\"],\n    \"palette\": [512, 512, [127912], \"f53f\", \"M512 255.1C512 256.9 511.1 257.8 511.1 258.7C511.6 295.2 478.4 319.1 441.9 319.1H344C317.5 319.1 296 341.5 296 368C296 371.4 296.4 374.7 297 377.9C299.2 388.1 303.5 397.1 307.9 407.8C313.9 421.6 320 435.3 320 449.8C320 481.7 298.4 510.5 266.6 511.8C263.1 511.9 259.5 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256V255.1zM96 255.1C78.33 255.1 64 270.3 64 287.1C64 305.7 78.33 319.1 96 319.1C113.7 319.1 128 305.7 128 287.1C128 270.3 113.7 255.1 96 255.1zM128 191.1C145.7 191.1 160 177.7 160 159.1C160 142.3 145.7 127.1 128 127.1C110.3 127.1 96 142.3 96 159.1C96 177.7 110.3 191.1 128 191.1zM256 63.1C238.3 63.1 224 78.33 224 95.1C224 113.7 238.3 127.1 256 127.1C273.7 127.1 288 113.7 288 95.1C288 78.33 273.7 63.1 256 63.1zM384 191.1C401.7 191.1 416 177.7 416 159.1C416 142.3 401.7 127.1 384 127.1C366.3 127.1 352 142.3 352 159.1C352 177.7 366.3 191.1 384 191.1z\"],\n    \"pallet\": [640, 512, [], \"f482\", \"M624 384c8.75 0 16-7.25 16-16v-32c0-8.75-7.25-16-16-16h-608C7.25 320 0 327.3 0 336v32C0 376.8 7.25 384 16 384H64v64H16C7.25 448 0 455.3 0 464v32C0 504.8 7.25 512 16 512h608c8.75 0 16-7.25 16-16v-32c0-8.75-7.25-16-16-16H576v-64H624zM288 448H128v-64h160V448zM512 448h-160v-64h160V448z\"],\n    \"panorama\": [640, 512, [], \"e209\", \"M578.2 66.06C409.8 116.6 230.2 116.6 61.8 66.06C31 56.82 0 79.88 0 112v319.9c0 32.15 30.1 55.21 61.79 45.97c168.4-50.53 347.1-50.53 516.4-.002C608.1 487.2 640 464.1 640 431.1V112C640 79.88 609 56.82 578.2 66.06zM128 224C110.3 224 96 209.7 96 192s14.33-32 32-32c17.68 0 32 14.33 32 32S145.7 224 128 224zM474.3 388.6C423.4 380.3 371.8 376 320 376c-50.45 0-100.7 4.043-150.3 11.93c-14.14 2.246-24.11-13.19-15.78-24.84l49.18-68.56C206.1 290.4 210.9 288 216 288s9.916 2.441 12.93 6.574l32.46 44.51l93.3-139.1C357.7 194.7 362.7 192 368 192s10.35 2.672 13.31 7.125l109.1 165.1C498.1 375.9 488.1 390.8 474.3 388.6z\"],\n    \"paper-plane\": [512, 512, [61913], \"f1d8\", \"M511.6 36.86l-64 415.1c-1.5 9.734-7.375 18.22-15.97 23.05c-4.844 2.719-10.27 4.097-15.68 4.097c-4.188 0-8.319-.8154-12.29-2.472l-122.6-51.1l-50.86 76.29C226.3 508.5 219.8 512 212.8 512C201.3 512 192 502.7 192 491.2v-96.18c0-7.115 2.372-14.03 6.742-19.64L416 96l-293.7 264.3L19.69 317.5C8.438 312.8 .8125 302.2 .0625 289.1s5.469-23.72 16.06-29.77l448-255.1c10.69-6.109 23.88-5.547 34 1.406S513.5 24.72 511.6 36.86z\"],\n    \"paperclip\": [448, 512, [128206], \"f0c6\", \"M364.2 83.8C339.8 59.39 300.2 59.39 275.8 83.8L91.8 267.8C49.71 309.9 49.71 378.1 91.8 420.2C133.9 462.3 202.1 462.3 244.2 420.2L396.2 268.2C407.1 257.3 424.9 257.3 435.8 268.2C446.7 279.1 446.7 296.9 435.8 307.8L283.8 459.8C219.8 523.8 116.2 523.8 52.2 459.8C-11.75 395.8-11.75 292.2 52.2 228.2L236.2 44.2C282.5-2.08 357.5-2.08 403.8 44.2C450.1 90.48 450.1 165.5 403.8 211.8L227.8 387.8C199.2 416.4 152.8 416.4 124.2 387.8C95.59 359.2 95.59 312.8 124.2 284.2L268.2 140.2C279.1 129.3 296.9 129.3 307.8 140.2C318.7 151.1 318.7 168.9 307.8 179.8L163.8 323.8C157.1 330.5 157.1 341.5 163.8 348.2C170.5 354.9 181.5 354.9 188.2 348.2L364.2 172.2C388.6 147.8 388.6 108.2 364.2 83.8V83.8z\"],\n    \"parachute-box\": [512, 512, [], \"f4cd\", \"M272 192V320H304C311 320 317.7 321.5 323.7 324.2L443.8 192H415.5C415.8 186.7 416 181.4 416 176C416 112.1 393.8 54.84 358.9 16.69C450 49.27 493.4 122.6 507.8 173.6C510.5 183.1 502.1 192 493.1 192H487.1L346.8 346.3C350.1 352.8 352 360.2 352 368V464C352 490.5 330.5 512 304 512H207.1C181.5 512 159.1 490.5 159.1 464V368C159.1 360.2 161.9 352.8 165.2 346.3L24.92 192H18.89C9 192 1.483 183.1 4.181 173.6C18.64 122.6 61.97 49.27 153.1 16.69C118.2 54.84 96 112.1 96 176C96 181.4 96.16 186.7 96.47 192H68.17L188.3 324.2C194.3 321.5 200.1 320 207.1 320H239.1V192H128.5C128.2 186.7 127.1 181.4 127.1 176C127.1 125 143.9 80.01 168.2 48.43C192.5 16.89 223.8 0 255.1 0C288.2 0 319.5 16.89 343.8 48.43C368.1 80.01 384 125 384 176C384 181.4 383.8 186.7 383.5 192H272z\"],\n    \"paragraph\": [448, 512, [182], \"f1dd\", \"M448 63.1C448 81.67 433.7 96 416 96H384v352c0 17.67-14.33 32-31.1 32S320 465.7 320 448V96h-32v352c0 17.67-14.33 32-31.1 32S224 465.7 224 448v-96H198.9c-83.57 0-158.2-61.11-166.1-144.3C23.66 112.3 98.44 32 191.1 32h224C433.7 32 448 46.33 448 63.1z\"],\n    \"passport\": [448, 512, [], \"f5ab\", \"M129.6 208c5.25 31.25 25.62 57.13 53.25 70.38C175.3 259.4 170.3 235 168.8 208H129.6zM129.6 176h39.13c1.5-27 6.5-51.38 14.12-70.38C155.3 118.9 134.9 144.8 129.6 176zM224 286.8C231.8 279.3 244.8 252.3 247.4 208H200.5C203.3 252.3 216.3 279.3 224 286.8zM265.1 105.6C272.8 124.6 277.8 149 279.3 176h39.13C313.1 144.8 292.8 118.9 265.1 105.6zM384 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h320c35.2 0 64-28.8 64-64V64C448 28.8 419.2 0 384 0zM336 416h-224C103.3 416 96 408.8 96 400S103.3 384 112 384h224c8.75 0 16 7.25 16 16S344.8 416 336 416zM224 320c-70.75 0-128-57.25-128-128s57.25-128 128-128s128 57.25 128 128S294.8 320 224 320zM265.1 278.4c27.62-13.25 48-39.13 53.25-70.38h-39.13C277.8 235 272.8 259.4 265.1 278.4zM200.6 176h46.88C244.7 131.8 231.8 104.8 224 97.25C216.3 104.8 203.2 131.8 200.6 176z\"],\n    \"paste\": [512, 512, [\"file-clipboard\"], \"f0ea\", \"M320 96V80C320 53.49 298.5 32 272 32H215.4C204.3 12.89 183.6 0 160 0S115.7 12.89 104.6 32H48C21.49 32 0 53.49 0 80v320C0 426.5 21.49 448 48 448l144 .0013L192 176C192 131.8 227.8 96 272 96H320zM160 88C146.8 88 136 77.25 136 64S146.8 40 160 40S184 50.75 184 64S173.3 88 160 88zM416 128v96h96L416 128zM384 224L384 128h-112C245.5 128 224 149.5 224 176v288c0 26.51 21.49 48 48 48h192c26.51 0 48-21.49 48-48V256h-95.99C398.4 256 384 241.6 384 224z\"],\n    \"pause\": [320, 512, [9208], \"f04c\", \"M272 63.1l-32 0c-26.51 0-48 21.49-48 47.1v288c0 26.51 21.49 48 48 48L272 448c26.51 0 48-21.49 48-48v-288C320 85.49 298.5 63.1 272 63.1zM80 63.1l-32 0c-26.51 0-48 21.49-48 48v288C0 426.5 21.49 448 48 448l32 0c26.51 0 48-21.49 48-48v-288C128 85.49 106.5 63.1 80 63.1z\"],\n    \"paw\": [512, 512, [], \"f1b0\", \"M256 224c-79.37 0-191.1 122.7-191.1 200.2C64.02 459.1 90.76 480 135.8 480C184.6 480 216.9 454.9 256 454.9C295.5 454.9 327.9 480 376.2 480c44.1 0 71.74-20.88 71.74-55.75C447.1 346.8 335.4 224 256 224zM108.8 211.4c-10.37-34.62-42.5-57.12-71.62-50.12S-7.104 202 3.27 236.6C13.64 271.3 45.77 293.8 74.89 286.8S119.1 246 108.8 211.4zM193.5 190.6c30.87-8.125 46.37-49.1 34.5-93.37s-46.5-71.1-77.49-63.87c-30.87 8.125-46.37 49.1-34.5 93.37C127.9 170.1 162.5 198.8 193.5 190.6zM474.9 161.3c-29.12-6.1-61.25 15.5-71.62 50.12c-10.37 34.63 4.75 68.37 33.87 75.37c29.12 6.1 61.12-15.5 71.62-50.12C519.1 202 503.1 168.3 474.9 161.3zM318.5 190.6c30.1 8.125 65.62-20.5 77.49-63.87c11.87-43.37-3.625-85.25-34.5-93.37c-30.1-8.125-65.62 20.5-77.49 63.87C272.1 140.6 287.6 182.5 318.5 190.6z\"],\n    \"peace\": [512, 512, [9774], \"f67c\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM224 445.1c-36.36-6.141-69.2-22.48-95.59-46.04L224 322.6V445.1zM288 322.6l95.59 76.47C357.2 422.6 324.4 438.1 288 445.1V322.6zM64 256c0-94.95 69.34-173.8 160-189.1v173.7l-135.7 108.6C72.86 321.6 64 289.8 64 256zM423.7 349.2L288 240.6V66.89C378.7 82.2 448 161.1 448 256C448 289.8 439.1 321.6 423.7 349.2z\"],\n    \"pen\": [512, 512, [128394], \"f304\", \"M362.7 19.32C387.7-5.678 428.3-5.678 453.3 19.32L492.7 58.75C517.7 83.74 517.7 124.3 492.7 149.3L444.3 197.7L314.3 67.72L362.7 19.32zM421.7 220.3L188.5 453.4C178.1 463.8 165.2 471.5 151.1 475.6L30.77 511C22.35 513.5 13.24 511.2 7.03 504.1C.8198 498.8-1.502 489.7 .976 481.2L36.37 360.9C40.53 346.8 48.16 333.9 58.57 323.5L291.7 90.34L421.7 220.3z\"],\n    \"pen-clip\": [512, 512, [\"pen-alt\"], \"f305\", \"M492.7 58.75C517.7 83.74 517.7 124.3 492.7 149.3L440.6 201.4L310.6 71.43L362.7 19.32C387.7-5.678 428.3-5.678 453.3 19.32L492.7 58.75zM240.1 114.9C231.6 105.5 216.4 105.5 207 114.9L104.1 216.1C95.6 226.3 80.4 226.3 71.03 216.1C61.66 207.6 61.66 192.4 71.03 183L173.1 80.97C201.2 52.85 246.8 52.85 274.9 80.97L417.9 224L229.5 412.5C181.5 460.5 120.3 493.2 53.7 506.5L28.71 511.5C20.84 513.1 12.7 510.6 7.03 504.1C1.356 499.3-1.107 491.2 .4662 483.3L5.465 458.3C18.78 391.7 51.52 330.5 99.54 282.5L254.1 128L240.1 114.9z\"],\n    \"pen-fancy\": [512, 512, [128395, 10002], \"f5ac\", \"M373.5 27.11C388.5 9.885 410.2 0 433 0C476.6 0 512 35.36 512 78.98C512 101.8 502.1 123.5 484.9 138.5L277.7 319L192.1 234.3L373.5 27.11zM255.1 341.7L235.9 425.1C231.9 442.2 218.9 455.8 202 460.5L24.35 510.3L119.7 414.9C122.4 415.6 125.1 416 128 416C145.7 416 160 401.7 160 384C160 366.3 145.7 352 128 352C110.3 352 96 366.3 96 384C96 386.9 96.38 389.6 97.08 392.3L1.724 487.6L51.47 309.1C56.21 293.1 69.8 280.1 86.9 276.1L170.3 256.9L255.1 341.7z\"],\n    \"pen-nib\": [512, 512, [10001], \"f5ad\", \"M368.4 18.34C390.3-3.526 425.7-3.526 447.6 18.34L493.7 64.4C515.5 86.27 515.5 121.7 493.7 143.6L437.9 199.3L312.7 74.06L368.4 18.34zM417.4 224L371.4 377.3C365.4 397.2 350.2 413 330.5 419.6L66.17 508.2C54.83 512 42.32 509.2 33.74 500.9L187.3 347.3C193.6 350.3 200.6 352 207.1 352C234.5 352 255.1 330.5 255.1 304C255.1 277.5 234.5 256 207.1 256C181.5 256 159.1 277.5 159.1 304C159.1 311.4 161.7 318.4 164.7 324.7L11.11 478.3C2.809 469.7-.04 457.2 3.765 445.8L92.39 181.5C98.1 161.8 114.8 146.6 134.7 140.6L287.1 94.6L417.4 224z\"],\n    \"pen-ruler\": [512, 512, [\"pencil-ruler\"], \"f5ae\", \"M492.7 42.75C517.7 67.74 517.7 108.3 492.7 133.3L436.3 189.7L322.3 75.72L378.7 19.32C403.7-5.678 444.3-5.678 469.3 19.32L492.7 42.75zM44.89 353.2L299.7 98.34L413.7 212.3L158.8 467.1C152.1 473.8 143.8 478.7 134.6 481.4L30.59 511.1C22.21 513.5 13.19 511.1 7.03 504.1C.8669 498.8-1.47 489.8 .9242 481.4L30.65 377.4C33.26 368.2 38.16 359.9 44.89 353.2zM249.4 103.4L103.4 249.4L16 161.9C-2.745 143.2-2.745 112.8 16 94.06L94.06 16C112.8-2.745 143.2-2.745 161.9 16L181.7 35.76C181.4 36.05 181 36.36 180.7 36.69L116.7 100.7C110.4 106.9 110.4 117.1 116.7 123.3C122.9 129.6 133.1 129.6 139.3 123.3L203.3 59.31C203.6 58.99 203.1 58.65 204.2 58.3L249.4 103.4zM453.7 307.8C453.4 308 453 308.4 452.7 308.7L388.7 372.7C382.4 378.9 382.4 389.1 388.7 395.3C394.9 401.6 405.1 401.6 411.3 395.3L475.3 331.3C475.6 330.1 475.1 330.6 476.2 330.3L496 350.1C514.7 368.8 514.7 399.2 496 417.9L417.9 496C399.2 514.7 368.8 514.7 350.1 496L262.6 408.6L408.6 262.6L453.7 307.8z\"],\n    \"pen-to-square\": [512, 512, [\"edit\"], \"f044\", \"M490.3 40.4C512.2 62.27 512.2 97.73 490.3 119.6L460.3 149.7L362.3 51.72L392.4 21.66C414.3-.2135 449.7-.2135 471.6 21.66L490.3 40.4zM172.4 241.7L339.7 74.34L437.7 172.3L270.3 339.6C264.2 345.8 256.7 350.4 248.4 353.2L159.6 382.8C150.1 385.6 141.5 383.4 135 376.1C128.6 370.5 126.4 361 129.2 352.4L158.8 263.6C161.6 255.3 166.2 247.8 172.4 241.7V241.7zM192 63.1C209.7 63.1 224 78.33 224 95.1C224 113.7 209.7 127.1 192 127.1H96C78.33 127.1 64 142.3 64 159.1V416C64 433.7 78.33 448 96 448H352C369.7 448 384 433.7 384 416V319.1C384 302.3 398.3 287.1 416 287.1C433.7 287.1 448 302.3 448 319.1V416C448 469 405 512 352 512H96C42.98 512 0 469 0 416V159.1C0 106.1 42.98 63.1 96 63.1H192z\"],\n    \"pencil\": [512, 512, [61504, 9999, \"pencil-alt\"], \"f303\", \"M421.7 220.3L188.5 453.4L154.6 419.5L158.1 416H112C103.2 416 96 408.8 96 400V353.9L92.51 357.4C87.78 362.2 84.31 368 82.42 374.4L59.44 452.6L137.6 429.6C143.1 427.7 149.8 424.2 154.6 419.5L188.5 453.4C178.1 463.8 165.2 471.5 151.1 475.6L30.77 511C22.35 513.5 13.24 511.2 7.03 504.1C.8198 498.8-1.502 489.7 .976 481.2L36.37 360.9C40.53 346.8 48.16 333.9 58.57 323.5L291.7 90.34L421.7 220.3zM492.7 58.75C517.7 83.74 517.7 124.3 492.7 149.3L444.3 197.7L314.3 67.72L362.7 19.32C387.7-5.678 428.3-5.678 453.3 19.32L492.7 58.75z\"],\n    \"people-arrows-left-right\": [576, 512, [\"people-arrows\"], \"e068\", \"M96 304.1c0-12.16 4.971-23.83 13.64-32.01l72.13-68.08c1.65-1.555 3.773-2.311 5.611-3.578C177.1 176.8 155 160 128 160H64C28.65 160 0 188.7 0 224v96c0 17.67 14.33 32 31.1 32L32 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96.39l-50.36-47.53C100.1 327.9 96 316.2 96 304.1zM480 128c35.38 0 64-28.62 64-64s-28.62-64-64-64s-64 28.62-64 64S444.6 128 480 128zM96 128c35.38 0 64-28.62 64-64S131.4 0 96 0S32 28.62 32 64S60.63 128 96 128zM444.4 295.3L372.3 227.3c-3.49-3.293-8.607-4.193-13.01-2.299C354.9 226.9 352 231.2 352 236V272H224V236c0-4.795-2.857-9.133-7.262-11.03C212.3 223.1 207.2 223.1 203.7 227.3L131.6 295.3c-4.805 4.535-4.805 12.94 0 17.47l72.12 68.07c3.49 3.291 8.607 4.191 13.01 2.297C221.1 381.3 224 376.9 224 372.1V336h128v36.14c0 4.795 2.857 9.135 7.262 11.04c4.406 1.893 9.523 .9922 13.01-2.299l72.12-68.07C449.2 308.3 449.2 299.9 444.4 295.3zM512 160h-64c-26.1 0-49.98 16.77-59.38 40.42c1.842 1.271 3.969 2.027 5.623 3.588l72.12 68.06C475 280.2 480 291.9 480 304.1c.002 12.16-4.969 23.83-13.64 32.01L416 383.6V480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-128c17.67 0 32-14.33 32-32V224C576 188.7 547.3 160 512 160z\"],\n    \"people-carry-box\": [640, 512, [\"people-carry\"], \"f4ce\", \"M128 95.1c26.5 0 47.1-21.5 47.1-47.1S154.5 0 128 0S80.01 21.5 80.01 47.1S101.5 95.1 128 95.1zM511.1 95.1c26.5 0 47.1-21.5 47.1-47.1S538.5 0 511.1 0c-26.5 0-48 21.5-48 47.1S485.5 95.1 511.1 95.1zM603.5 258.3l-18.5-80.13c-4.625-20-18.62-36.88-37.5-44.88c-18.5-8-38.1-6.75-56.12 3.25c-22.62 13.38-39.62 34.5-48.12 59.38l-11.25 33.88l-15.1 10.25L415.1 144c0-8.75-7.25-16-16-16H240c-8.75 0-16 7.25-16 16L224 239.1l-16.12-10.25l-11.25-33.88c-8.375-25-25.38-46-48.12-59.38c-17.25-10-37.63-11.25-56.12-3.25c-18.88 8-32.88 24.88-37.5 44.88l-18.37 80.13c-4.625 20 .7506 41.25 14.37 56.75l67.25 75.88l10.12 92.63C130 499.8 143.8 512 160 512c1.25 0 2.25-.125 3.5-.25c17.62-1.875 30.25-17.62 28.25-35.25l-10-92.75c-1.5-13-7-25.12-15.62-35l-43.37-49l17.62-70.38l6.876 20.38c4 12.5 11.87 23.5 24.5 32.63l51 32.5c4.623 2.875 12.12 4.625 17.25 5h159.1c5.125-.375 12.62-2.125 17.25-5l51-32.5c12.62-9.125 20.5-20 24.5-32.63l6.875-20.38l17.63 70.38l-43.37 49c-8.625 9.875-14.12 22-15.62 35l-10 92.75c-2 17.62 10.75 33.38 28.25 35.25C477.7 511.9 478.7 512 479.1 512c16.12 0 29.1-12.12 31.75-28.5l10.12-92.63L589.1 315C602.7 299.5 608.1 278.3 603.5 258.3zM46.26 358.1l-44 110c-6.5 16.38 1.5 35 17.88 41.63c16.75 6.5 35.12-1.75 41.62-17.88l27.62-69.13l-2-18.25L46.26 358.1zM637.7 468.1l-43.1-110l-41.13 46.38l-2 18.25l27.62 69.13C583.2 504.4 595.2 512 607.1 512c3.998 0 7.998-.75 11.87-2.25C636.2 503.1 644.2 484.5 637.7 468.1z\"],\n    \"pepper-hot\": [512, 512, [127798], \"f816\", \"M465 134.2c21.46-38.38 19.87-87.17-5.65-123.1c-7.541-10.83-22.31-13.53-33.2-5.938c-10.77 7.578-13.44 22.55-5.896 33.41c14.41 20.76 15.13 47.69 4.098 69.77C407.1 100.1 388 95.1 368 95.1c-36.23 0-68.93 13.83-94.24 35.92L352 165.5V256h90.56l33.53 78.23C498.2 308.9 512 276.2 512 239.1C512 198 493.7 160.6 465 134.2zM320 288V186.6l-52.95-22.69C216.2 241.3 188.5 400 56 400C25.13 400 0 425.1 0 456S25.13 512 56 512c180.3 0 320.1-88.27 389.3-168.5L421.5 288H320z\"],\n    \"percent\": [384, 512, [62785, 62101, \"percentage\"], \"25\", \"M374.6 73.39c-12.5-12.5-32.75-12.5-45.25 0l-320 320c-12.5 12.5-12.5 32.75 0 45.25C15.63 444.9 23.81 448 32 448s16.38-3.125 22.62-9.375l320-320C387.1 106.1 387.1 85.89 374.6 73.39zM64 192c35.3 0 64-28.72 64-64S99.3 64.01 64 64.01S0 92.73 0 128S28.7 192 64 192zM320 320c-35.3 0-64 28.72-64 64s28.7 64 64 64s64-28.72 64-64S355.3 320 320 320z\"],\n    \"person\": [320, 512, [129485, \"male\"], \"f183\", \"M315.1 271l-70.56-112.1C232.8 139.3 212.5 128 190.3 128H129.7c-22.22 0-42.53 11.25-54.28 30.09L4.873 271c-9.375 14.98-4.812 34.72 10.16 44.09c15 9.375 34.75 4.812 44.09-10.19l28.88-46.18L87.1 480c0 17.67 14.33 32 32 32c17.67 0 31.1-14.33 31.1-32l0-144h16V480c0 17.67 14.33 32 32 32c17.67 0 32-14.33 32-32V258.8l28.88 46.2C266.9 314.7 277.4 320 288 320c5.781 0 11.66-1.562 16.94-4.859C319.9 305.8 324.5 286 315.1 271zM160 96c26.5 0 48-21.5 48-48S186.5 0 160 0C133.5 0 112 21.5 112 48S133.5 96 160 96z\"],\n    \"person-biking\": [640, 512, [128692, \"biking\"], \"f84a\", \"M352 48C352 21.49 373.5 0 400 0C426.5 0 448 21.49 448 48C448 74.51 426.5 96 400 96C373.5 96 352 74.51 352 48zM480 159.1C497.7 159.1 512 174.3 512 191.1C512 209.7 497.7 223.1 480 223.1H416C408.7 223.1 401.7 221.5 396 216.1L355.3 184.4L295 232.9L337.8 261.4C346.7 267.3 352 277.3 352 288V416C352 433.7 337.7 448 320 448C302.3 448 288 433.7 288 416V305.1L227.5 266.8C194.7 245.1 192.5 198.9 223.2 175.2L306.3 110.9C323.8 97.45 348.1 97.58 365.4 111.2L427.2 159.1H480zM256 384C256 454.7 198.7 512 128 512C57.31 512 0 454.7 0 384C0 313.3 57.31 256 128 256C198.7 256 256 313.3 256 384zM128 312C88.24 312 56 344.2 56 384C56 423.8 88.24 456 128 456C167.8 456 200 423.8 200 384C200 344.2 167.8 312 128 312zM640 384C640 454.7 582.7 512 512 512C441.3 512 384 454.7 384 384C384 313.3 441.3 256 512 256C582.7 256 640 313.3 640 384zM512 312C472.2 312 440 344.2 440 384C440 423.8 472.2 456 512 456C551.8 456 584 423.8 584 384C584 344.2 551.8 312 512 312z\"],\n    \"person-booth\": [576, 512, [], \"f756\", \"M192 496C192 504.8 199.3 512 208 512h32C248.8 512 256 504.8 256 496V320H192V496zM544 0h-32v496c0 8.75 7.25 16 16 16h32c8.75 0 16-7.25 16-16V32C576 14.25 561.8 0 544 0zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32S16 53.5 16 80S37.5 128 64 128zM224 224H173.1L127.9 178.8C115.8 166.6 99.75 160 82.75 160H64C46.88 160 30.75 166.8 18.75 178.8c-12 12.12-18.72 28.22-18.72 45.35L0 480c0 17.75 14.25 32 31.88 32s32-14.25 32-32L64 379.3c.875 .5 1.625 1.375 2.5 1.75L95.63 424V480c0 17.75 14.25 32 32 32c17.62 0 32-14.25 32-32v-56.5c0-9.875-2.375-19.75-6.75-28.62l-41.13-61.25V253l20.88 20.88C141.8 283 153.8 288 166.5 288H224c17.75 0 32-14.25 32-32S241.8 224 224 224zM192 32v160h64V0H224C206.3 0 192 14.25 192 32zM288 32l31.5 223.1l-30.88 154.6C284.3 431.3 301.6 448 320 448c15.25 0 27.99-9.125 32.24-30.38C353.3 434.5 366.9 448 384 448c17.75 0 32-14.25 32-32c0 17.75 14.25 32 32 32s32-14.25 32-32V0h-192V32z\"],\n    \"person-dots-from-line\": [576, 512, [\"diagnoses\"], \"f470\", \"M463.1 256c8.75 0 15.1-7.25 15.1-16S472.7 224 463.1 224c-8.75 0-15.1 7.25-15.1 16S455.2 256 463.1 256zM287.1 176c48.5 0 87.1-39.5 87.1-88S336.5 0 287.1 0S200 39.5 200 88S239.5 176 287.1 176zM80 256c8.75 0 15.1-7.25 15.1-16S88.75 224 80 224S64 231.3 64 240S71.25 256 80 256zM75.91 375.1c.6289-.459 41.62-29.26 100.1-50.05L176 432h223.1l-.0004-106.8c58.32 20.8 99.51 49.49 100.1 49.91C508.6 381.1 518.3 384 527.9 384c14.98 0 29.73-7 39.11-20.09c15.41-21.59 10.41-51.56-11.16-66.97c-1.955-1.391-21.1-14.83-51.83-30.85C495.5 279.2 480.7 288 463.1 288c-26.25 0-47.1-21.75-47.1-48c0-3.549 .4648-6.992 1.217-10.33C378.6 217.2 334.4 208 288 208c-59.37 0-114.1 15.01-160.1 32.67C127.6 266.6 106 288 80 288C69.02 288 58.94 284 50.8 277.7c-18.11 10.45-29.25 18.22-30.7 19.26c-21.56 15.41-26.56 45.38-11.16 66.97C24.33 385.5 54.3 390.4 75.91 375.1zM335.1 344c13.25 0 23.1 10.75 23.1 24s-10.75 24-23.1 24c-13.25 0-23.1-10.75-23.1-24S322.7 344 335.1 344zM240 248c13.25 0 23.1 10.75 23.1 24S253.3 296 240 296c-13.25 0-23.1-10.75-23.1-24S226.8 248 240 248zM559.1 464H16c-8.75 0-15.1 7.25-15.1 16l-.0016 16c0 8.75 7.25 16 15.1 16h543.1c8.75 0 15.1-7.25 15.1-16L575.1 480C575.1 471.3 568.7 464 559.1 464z\"],\n    \"person-dress\": [320, 512, [\"female\"], \"f182\", \"M160 96c26.5 0 48-21.5 48-48s-21.5-48-47.1-48c-26.5 0-48 21.5-48 48S133.5 96 160 96zM315.1 271l-61.19-97.95C236.3 144.9 205.8 128 172.5 128H147.5C114.2 128 83.75 144.9 66.06 173.1L4.873 271C-4.502 286 .0607 305.8 15.03 315.1c15.03 9.375 34.75 4.812 44.09-10.19l32.62-52.19L47.1 384h40v96c0 17.67 14.33 32 32 32c17.67 0 31.1-14.33 31.1-32v-96h16v96c0 17.67 14.33 32 32 32c17.67 0 32-14.33 32-32v-96h40l-43.76-131.3l32.63 52.22C266.9 314.7 277.4 320 288 320c5.781 0 11.66-1.562 16.94-4.859C319.9 305.8 324.5 286 315.1 271z\"],\n    \"person-hiking\": [384, 512, [\"hiking\"], \"f6ec\", \"M240 96c26.5 0 48-21.5 48-48S266.5 0 240 0C213.5 0 192 21.5 192 48S213.5 96 240 96zM80.01 287.1c7.31 0 13.97-4.762 15.87-11.86L137 117c.3468-1.291 .5125-2.588 .5125-3.866c0-7.011-4.986-13.44-12.39-15.13C118.4 96.38 111.7 95.6 105.1 95.6c-36.65 0-70 23.84-79.32 59.53L.5119 253.3C.1636 254.6-.0025 255.9-.0025 257.2c0 7.003 4.961 13.42 12.36 15.11L76.01 287.5C77.35 287.8 78.69 287.1 80.01 287.1zM368 160h-15.1c-8.875 0-15.1 7.125-15.1 16V192h-34.75l-46.75-46.75C243.4 134.1 228.6 128 212.9 128C185.9 128 162.5 146.3 155.9 172.5L129 280.3C128.4 282.8 128 285.5 128 288.1c0 8.325 3.265 16.44 9.354 22.53l86.62 86.63V480c0 17.62 14.37 32 31.1 32s32-14.38 32-32v-82.75c0-17.12-6.625-33.13-18.75-45.25l-46.87-46.88c.25-.5 .5-.875 .625-1.375l19.1-79.5l22.37 22.38C271.4 252.6 279.5 256 288 256h47.1v240c0 8.875 7.125 16 15.1 16h15.1C376.9 512 384 504.9 384 496v-320C384 167.1 376.9 160 368 160zM81.01 472.3c-.672 2.63-.993 5.267-.993 7.86c0 14.29 9.749 27.29 24.24 30.89C106.9 511.8 109.5 512 112 512c14.37 0 27.37-9.75 30.1-24.25l25.25-101l-52.75-52.75L81.01 472.3z\"],\n    \"person-praying\": [384, 512, [128720, \"pray\"], \"f683\", \"M255.1 128c35.38 0 63.1-28.62 63.1-64s-28.62-64-63.1-64S191.1 28.62 191.1 64S220.6 128 255.1 128zM225.4 297.8c14 16.75 39 19.12 56.01 5.25l88.01-72c17-14 19.5-39.25 5.625-56.38c-14-17.12-39.25-19.5-56.38-5.625L261.3 216l-39-46.25c-15.38-18.38-39.13-27.88-64.01-25.38c-24.13 2.5-45.25 16.25-56.38 37l-49.38 92C29.13 317 43.88 369.8 86.76 397.1L131.5 432H40C17.88 432 0 449.9 0 472S17.88 512 40 512h208c34.13 0 53.76-42.75 28.25-68.25L166.4 333.9L201.3 269L225.4 297.8z\"],\n    \"person-running\": [448, 512, [127939, \"running\"], \"f70c\", \"M400 224h-44l-26.12-53.25c-12.5-25.5-35.38-44.25-61.75-51L197 98.63C189.5 96.84 181.1 95.97 174.5 95.97c-20.88 0-41.33 6.81-58.26 19.78L76.5 146.3C68.31 152.5 64.01 162 64.01 171.6c0 17.11 13.67 32.02 32.02 32.02c6.808 0 13.67-2.158 19.47-6.616l39.63-30.38c5.92-4.488 13.01-6.787 19.53-6.787c2.017 0 3.981 .2196 5.841 .6623l14.62 4.25l-37.5 87.5C154.1 260.3 152.5 268.8 152.5 277.2c0 22.09 11.49 43.52 31.51 55.29l85 50.13l-27.5 87.75c-.9875 3.174-1.458 6.388-1.458 9.55c0 13.65 8.757 26.31 22.46 30.58C265.6 511.5 268.9 512 272 512c13.62 0 26.25-8.75 30.5-22.5l31.75-101c1.211-4.278 1.796-8.625 1.796-12.93c0-16.57-8.661-32.51-23.55-41.44l-61.13-36.12l31.25-78.38l20.25 41.5C310.9 277.4 327.9 288 345.1 288H400c17.62 0 32-14.38 32-32C432 238.3 417.6 224 400 224zM288 96c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48S261.5 96 288 96zM129.8 317.5L114.9 352H48c-17.62 0-32 14.38-32 32s14.38 32 32 32h77.5c19.25 0 36.5-11.5 44-29.12l8.875-20.5l-10.75-6.25C150.4 349.9 137.6 334.8 129.8 317.5z\"],\n    \"person-skating\": [448, 512, [\"skating\"], \"f7c5\", \"M399.1 0c-26.5 0-48.01 21.5-48.01 48S373.5 96 399.1 96C426.5 96 448 74.5 448 48S426.5 0 399.1 0zM399.1 448c-8.751 0-16 7.25-16 16S376.7 480 367.1 480h-96.01c-8.751 0-16 7.25-16 16s7.251 16 16 16h96.01c26.5 0 48.01-21.5 48.01-48C415.1 455.2 408.7 448 399.1 448zM129.1 451.9c-11.34 0-11.19 9.36-22.65 9.36c-4.074 0-8.163-1.516-11.21-4.625l-67.98-67.89c-3.063-3.125-7.165-4.688-11.27-4.688c-4.102 0-8.204 1.562-11.27 4.688C1.562 391.8-.0001 395.9-.0001 400s1.562 8.203 4.688 11.27l67.88 67.98c9.376 9.375 21.59 14 33.96 14c13.23 0 38.57-8.992 38.57-25.36C145.1 456.7 135.2 451.9 129.1 451.9zM173.8 276.8L80.2 370.5c-6.251 6.25-9.376 14.44-9.376 22.62c0 24.75 22.57 32 31.88 32c8.251 0 16.5-3.125 22.63-9.375l91.89-92l-30.13-30.12C182.1 288.6 177.7 282.9 173.8 276.8zM127.1 160h105.5L213.3 177.3c-21.18 18.04-22.31 41.73-22.31 48.65c0 16.93 6.8 33.22 18.68 45.1l78.26 78.25V432c0 17.75 14.25 32 32 32s32-14.25 32-32v-89.38c0-12.62-5.126-25-14.13-33.88l-61.01-61c.5001-.5 1.25-.625 1.75-1.125l82.26-82.38c7.703-7.702 11.76-17.87 11.76-28.25c0-22.04-17.86-39.97-40.01-39.97L127.1 96C110.2 96 95.96 110.2 95.96 128S110.2 160 127.1 160z\"],\n    \"person-skiing\": [512, 512, [9975, \"skiing\"], \"f7c9\", \"M432.1 96.02c26.51 0 47.99-21.5 47.99-48.01S458.6 0 432.1 0s-47.98 21.5-47.98 48.01S405.6 96.02 432.1 96.02zM511.1 469.1c0-13.98-11.33-23.95-23.89-23.95c-18.89 0-19.23 19.11-46.15 19.11c-5.476 0-10.87-1.081-15.87-3.389l-135.8-70.26l49.15-73.82c5.446-8.116 8.09-17.39 8.09-26.63c0-12.4-4.776-24.73-14.09-33.9l-40.38-40.49l-106.1-53.1C185.6 165.8 185.4 169 185.4 172.2c0 16.65 6.337 32.78 18.42 44.86l75.03 75.21l-45.88 68.76L34.97 258.8C31.44 257 27.64 256.1 23.93 256.1C9.675 256.1 0 267.8 0 280.1c0 8.673 4.735 17.04 12.96 21.24l392 202.6c11.88 5.501 24.45 8.119 37.08 8.119C480.1 512 511.1 486.7 511.1 469.1zM119.1 91.65L108.5 114.2C114.2 117 120.2 118.4 126.2 118.4c9.153 0 18.1-3.2 25.06-9.102l47.26 23.51c-.125 0-.125 .125-.2501 .25l114.5 56.76l32.51-13l6.376 19.13c4.001 12.13 12.63 22.01 24 27.76l58.14 28.1c4.609 2.287 9.455 3.355 14.26 3.355c18.8 0 31.98-15.43 31.98-31.93c0-11.74-6.461-23.1-17.74-28.7l-52.03-26.1l-17.12-51.15C386.6 98.69 364.2 73.99 333.1 73.99c-7.658 0-15.82 1.504-24.43 4.934L227.4 111.3L164.9 80.33c.009-.3461 .0134-.692 .0134-1.038c0-14.13-7.468-27.7-20.89-34.53L132.9 66.45L98.17 59.43C97.83 59.36 97.53 59.35 97.19 59.35c-2.666 0-5.276 2.177-5.276 5.273c0 1.473 .648 2.936 1.81 3.961L119.1 91.65z\"],\n    \"person-skiing-nordic\": [576, 512, [\"skiing-nordic\"], \"f7ca\", \"M336 96C362.5 96 384 74.5 384 48S362.5 0 336 0S288 21.5 288 48S309.5 96 336 96zM552 416c-13.25 0-24 10.75-24 24s-10.75 24-24 24h-69.5L460 285.6c11.75-4.75 20.04-16.31 20.04-29.69c0-17.75-14.38-31.95-32.01-31.95l-43.9-.0393l-26.11-53.22c-12.5-25.5-35.5-44.12-61.75-50.87l-71.22-21.15c-7.475-1.819-15.08-2.693-22.59-2.693c-20.86 0-41.25 6.854-58.16 19.72L124.6 146.2C116.3 152.5 111.1 161.1 111.1 171.6c0 14.71 8.712 21.23 9.031 21.6L66.88 464H24C10.75 464 0 474.8 0 488S10.75 512 24 512h480c39.75 0 72-32.25 72-72C576 426.8 565.3 416 552 416zM291.6 463.9H194.7l43.1-90.97l-21.99-12.1c-12.13-7.25-21.99-16.89-29.49-27.77l-62.48 131.7L99.5 464l52.25-261.4c4.125-1 8.112-2.846 11.74-5.596l39.81-30.45c5.821-4.485 12.86-6.771 19.38-6.771c2.021 0 4.015 .212 5.878 .6556l14.73 4.383L205.8 252.2C202.3 260.3 200.7 268.9 200.7 277.3c0 22.06 11.42 43.37 31.41 55.22l84.97 50.15L291.6 463.9zM402.1 464l-43.58-.125l23.6-75.48c1.221-4.314 1.805-8.69 1.805-13.03c0-16.53-8.558-32.43-23.41-41.34l-61.21-36.1l31.32-78.23l20.26 41.36c8 16.25 24.86 26.89 43.11 26.89L427.3 288L402.1 464z\"],\n    \"person-snowboarding\": [512, 512, [127938, \"snowboarding\"], \"f7ce\", \"M460.7 249.6c5.877 4.25 12.47 6.393 19.22 6.393c10.76 0 32.05-8.404 32.05-31.97c0-9.74-4.422-19.36-12.8-25.65l-111.5-83.48c-13.75-10.25-29.04-18.42-45.42-23.79l-63.66-21.23l-26.12-52.12c-5.589-11.17-16.9-17.64-28.63-17.64c-17.8 0-31.99 14.47-31.99 32.01c0 4.803 1.086 9.674 3.374 14.25l29.12 58.12c5.75 11.38 15.55 19.85 27.67 23.98l16.45 5.522L227.3 154.6C205.5 165.5 191.9 187.4 191.9 211.8L191.9 264.9L117.8 289.6C104.4 294.1 95.95 306.5 95.95 319.9c0 12.05 6.004 19.05 10.33 23.09l-38.68-14.14C41.23 319.4 49.11 295 23.97 295c-18.67 0-23.97 17.16-23.97 24.09c0 8.553 13.68 41.32 51.13 54.88l364.1 132.8C425.7 510.2 435.7 512 445.7 512c12.5 0 24.97-2.732 36.47-8.232c8.723-3.997 13.85-12.71 13.85-21.77c0-18.67-17.15-23.96-24.06-23.96c-3.375 0-6.73 .7505-9.998 2.248c-5.111 2.486-10.64 3.702-16.21 3.702c-4.511 0-9.049-.7978-13.41-2.364l-90.68-33.12c8.625-4.125 15.53-11.76 17.78-21.89l21.88-101.1c.7086-3.335 1.05-6.668 1.05-10c0-14.91-6.906-29.31-19.17-38.4l-52.01-39l66.01-30.5L460.7 249.6zM316.3 301.3l-19.66 92c-.4205 1.997-.5923 3.976-.5923 5.911c0 4.968 1.264 9.691 3.333 14.01l-169.5-61.49c2.625-.25 5.492-.4448 8.117-1.32l85-28.38c19.63-6.5 32.77-24.73 32.77-45.48l0-20.53L316.3 301.3zM431.9 95.99c26.5 0 48-21.5 48-47.1S458.4 0 431.9 0s-48 21.5-48 47.1S405.4 95.99 431.9 95.99z\"],\n    \"person-swimming\": [576, 512, [127946, \"swimmer\"], \"f5c4\", \"M192.4 320c63.38 0 54.09-39.67 95.33-40.02c42.54 .3672 31.81 40.02 95.91 40.02c39.27 0 55.72-18.41 62.21-24.83l-140.4-116.1c3.292-1.689 31.66-18.2 75.25-18.2c12.57 0 25.18 1.397 37.53 4.21l38.59 8.844c2.412 .5592 4.824 .8272 7.2 .8272c15.91 0 31.96-12.81 31.96-32.04c0-14.58-10.03-27.77-24.84-31.16l-38.59-8.844c-17.06-3.904-34.46-5.837-51.81-5.837c-120.1 0-177.4 85.87-178.1 88.02L179.1 213.3C158.1 241.3 147.4 273.8 145 307.7C157.5 315.4 174.3 320 192.4 320zM576 397c0-15.14-10.82-28.59-26.25-31.42c-48.52-8.888-45.5-29.48-69.6-29.48c-25.02 0-31.19 31.79-96.18 31.79c-48.59 0-72.72-22.06-73.38-22.62c-6.141-6.157-14.26-9.188-22.42-9.188c-24.75 0-31.59 31.81-96.2 31.81c-48.59 0-72.69-22.03-73.41-22.59c-6.125-6.157-14.3-9.245-22.46-9.245c-8.072 0-16.12 3.026-22.38 8.901c-29.01 26.25-73.75 12.54-73.75 52.08c0 16.08 12.77 32.07 31.71 32.07c9.77 0 39.65-7.34 64.26-21.84C115.5 418.8 147.4 431.1 192 431.1s76.5-13.12 96-24.66c19.53 11.53 51.47 24.59 96 24.59c44.59 0 76.56-13.09 96.06-24.62c24.71 14.57 54.74 21.83 64.24 21.83C563.2 429.1 576 413.3 576 397zM95.1 224c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64s-64 28.65-64 64C31.1 195.3 60.65 224 95.1 224z\"],\n    \"person-walking\": [320, 512, [128694, \"walking\"], \"f554\", \"M207.9 95.99c26.5 0 47.1-21.49 47.1-47.99S234.4 0 207.9 0S159.1 21.49 159.1 47.99S181.4 95.99 207.9 95.99zM73.61 385.7c-3.25 8.125-7.998 15.5-14.25 21.49l-49.99 50.12c-6.249 6.246-9.373 14.46-9.373 22.68C-.0003 505.1 22.93 512 31.99 512c8.186 0 16.37-3.125 22.62-9.375l59.36-59.48c6.125-6 10.87-13.37 14.25-21.49l13.5-33.74c-55.36-60.23-38.74-41.74-47.49-53.74L73.61 385.7zM320 273.9c0-11.77-6.392-23.15-17.57-28.74l-23.24-11.88L269.4 203.9c-5.552-16.8-33.04-75.89-102.9-75.89c-35.58 0-55.44 10.22-92.58 25.26C52.36 161.9 34.74 178.4 24.24 199.4L17.62 213C15.33 217.6 14.24 222.5 14.24 227.3c0 17.25 13.78 31.97 31.63 31.97c11.6 0 22.78-6.455 28.37-17.63l6.748-13.62c3.5-7 9.248-12.5 16.5-15.38L124.2 201.8L109.1 262.5C107.8 267.6 107.2 272.9 107.2 278c0 15.79 5.886 31.29 16.8 43.24l59.86 65.51c7.25 7.875 12.37 17.38 14.87 27.62l18.37 73.39c3.609 14.45 16.69 24.2 31.04 24.2c19.31 0 32.01-16.13 32.01-32.05c0-2.531-.3053-5.097-.9435-7.652l-22.25-89.01c-2.625-10.38-7.748-20.01-14.87-27.76l-45.49-49.76l17.12-68.63l5.498 16.5c5.375 16.13 16.75 29.38 31.74 37.01l23.24 11.75c4.543 2.29 9.371 3.375 14.13 3.375C304.8 305.8 320 292.5 320 273.9z\"],\n    \"person-walking-with-cane\": [448, 512, [\"blind\"], \"f29d\", \"M445.2 486.1l-117.3-172.6c-3.002 4.529-6.646 8.652-11.12 12c-4.414 3.318-9.299 5.689-14.43 7.307l116.4 171.3c3.094 4.547 8.127 7.008 13.22 7.008c3.125 0 6.247-.8984 8.997-2.773C448.3 504.2 450.2 494.3 445.2 486.1zM143.1 95.1c26.51 0 48.01-21.49 48.01-47.1S170.5 0 144 0S96 21.49 96 48S117.5 95.1 143.1 95.1zM96.01 348.1l-31.03 124.2c-4.312 17.16 6.125 34.53 23.28 38.81C90.86 511.7 93.48 512 96.04 512c14.34 0 27.38-9.703 31-24.23l22.04-88.18L96.01 346.5V348.1zM313.6 268.8l-76.78-102.4C218.8 142.3 190.1 128 160 128L135.6 127.1c-36.59 0-69.5 20.33-85.87 53.06L3.387 273.7C-4.518 289.5 1.887 308.7 17.7 316.6c4.594 2.297 9.469 3.375 14.28 3.375c11.75 0 23.03-6.469 28.66-17.69l35.38-70.76v56.45c0 8.484 3.375 16.62 9.375 22.63l86.63 86.63v82.75c0 17.67 14.31 32 32 32c17.69 0 32-14.33 32-32v-82.75c0-17.09-6.656-33.16-18.75-45.25L192 306.8V213.3l70.38 93.88c10.59 14.11 30.62 16.98 44.78 6.406C321.3 303 324.2 282.9 313.6 268.8z\"],\n    \"peseta-sign\": [384, 512, [], \"e221\", \"M192 32C269.4 32 333.1 86.97 348.8 160H352C369.7 160 384 174.3 384 192C384 209.7 369.7 224 352 224H348.8C333.1 297 269.4 352 192 352H96V448C96 465.7 81.67 480 64 480C46.33 480 32 465.7 32 448V224C14.33 224 0 209.7 0 192C0 174.3 14.33 160 32 160V64C32 46.33 46.33 32 64 32H192zM282.5 160C269.4 122.7 233.8 96 192 96H96V160H282.5zM96 224V288H192C233.8 288 269.4 261.3 282.5 224H96z\"],\n    \"peso-sign\": [384, 512, [], \"e222\", \"M176 32C244.4 32 303.7 71.01 332.8 128H352C369.7 128 384 142.3 384 160C384 177.7 369.7 192 352 192H351.3C351.8 197.3 352 202.6 352 208C352 213.4 351.8 218.7 351.3 224H352C369.7 224 384 238.3 384 256C384 273.7 369.7 288 352 288H332.8C303.7 344.1 244.4 384 176 384H96V448C96 465.7 81.67 480 64 480C46.33 480 32 465.7 32 448V288C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224V192C14.33 192 0 177.7 0 160C0 142.3 14.33 128 32 128V64C32 46.33 46.33 32 64 32H176zM254.4 128C234.2 108.2 206.5 96 176 96H96V128H254.4zM96 192V224H286.9C287.6 218.8 288 213.4 288 208C288 202.6 287.6 197.2 286.9 192H96zM254.4 288H96V320H176C206.5 320 234.2 307.8 254.4 288z\"],\n    \"phone\": [512, 512, [128379, 128222], \"f095\", \"M511.2 387l-23.25 100.8c-3.266 14.25-15.79 24.22-30.46 24.22C205.2 512 0 306.8 0 54.5c0-14.66 9.969-27.2 24.22-30.45l100.8-23.25C139.7-2.602 154.7 5.018 160.8 18.92l46.52 108.5c5.438 12.78 1.77 27.67-8.98 36.45L144.5 207.1c33.98 69.22 90.26 125.5 159.5 159.5l44.08-53.8c8.688-10.78 23.69-14.51 36.47-8.975l108.5 46.51C506.1 357.2 514.6 372.4 511.2 387z\"],\n    \"phone-flip\": [512, 512, [128381, \"phone-alt\"], \"f879\", \"M18.92 351.2l108.5-46.52c12.78-5.531 27.77-1.801 36.45 8.98l44.09 53.82c69.25-34 125.5-90.31 159.5-159.5l-53.81-44.04c-10.75-8.781-14.41-23.69-8.974-36.47l46.51-108.5c6.094-13.91 21.1-21.52 35.79-18.11l100.8 23.25c14.25 3.25 24.22 15.8 24.22 30.46c0 252.3-205.2 457.5-457.5 457.5c-14.67 0-27.18-9.968-30.45-24.22l-23.25-100.8C-2.571 372.4 5.018 357.2 18.92 351.2z\"],\n    \"phone-slash\": [640, 512, [], \"f3dd\", \"M271.1 367.5L227.9 313.7c-8.688-10.78-23.69-14.51-36.47-8.974l-108.5 46.51c-13.91 6-21.49 21.19-18.11 35.79l23.25 100.8C91.32 502 103.8 512 118.5 512c107.4 0 206.1-37.46 284.2-99.65l-88.75-69.56C300.6 351.9 286.6 360.3 271.1 367.5zM630.8 469.1l-159.6-125.1c65.03-78.97 104.7-179.5 104.7-289.5c0-14.66-9.969-27.2-24.22-30.45L451 .8125c-14.69-3.406-29.73 4.213-35.82 18.12l-46.52 108.5c-5.438 12.78-1.771 27.67 8.979 36.45l53.82 44.08C419.2 232.1 403.9 256.2 386.2 277.4L38.81 5.111C34.41 1.673 29.19 0 24.03 0C16.91 0 9.84 3.158 5.121 9.189c-8.188 10.44-6.37 25.53 4.068 33.7l591.1 463.1c10.5 8.203 25.57 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"phone-volume\": [512, 512, [\"volume-control-phone\"], \"f2a0\", \"M284.6 181.9c-10.28-8.344-25.41-6.875-33.75 3.406C242.4 195.6 243.9 210.7 254.2 219.1c11.31 9.25 17.81 22.69 17.81 36.87c0 14.19-6.5 27.62-17.81 36.87c-10.28 8.406-11.78 23.53-3.375 33.78c4.719 5.812 11.62 8.812 18.56 8.812c5.344 0 10.75-1.781 15.19-5.406c22.53-18.44 35.44-45.4 35.44-74.05S307.1 200.4 284.6 181.9zM345.1 107.1c-10.22-8.344-25.34-6.907-33.78 3.343c-8.406 10.25-6.906 25.37 3.344 33.78c33.88 27.78 53.31 68.18 53.31 110.9s-19.44 83.09-53.31 110.9c-10.25 8.406-11.75 23.53-3.344 33.78c4.75 5.781 11.62 8.781 18.56 8.781c5.375 0 10.75-1.781 15.22-5.438C390.2 367.1 416 313.1 416 255.1S390.2 144.9 345.1 107.1zM406.4 33.15c-10.22-8.344-25.34-6.875-33.78 3.344c-8.406 10.25-6.906 25.37 3.344 33.78C431.9 116.1 464 183.8 464 255.1s-32.09 139.9-88.06 185.7c-10.25 8.406-11.75 23.53-3.344 33.78c4.75 5.781 11.62 8.781 18.56 8.781c5.375 0 10.75-1.781 15.22-5.438C473.5 423.8 512 342.6 512 255.1S473.5 88.15 406.4 33.15zM151.3 174.6C161.1 175.6 172.1 169.5 176 159.6l33.75-84.38C214 64.35 209.1 51.1 200.2 45.86l-67.47-42.17C123.2-2.289 110.9-.8945 102.9 7.08C-34.32 144.3-34.31 367.7 102.9 504.9c7.982 7.984 20.22 9.379 29.75 3.402l67.48-42.19c9.775-6.104 13.9-18.47 9.598-29.3L176 352.5c-3.945-9.963-14.14-16.11-24.73-14.97l-53.24 5.314C78.89 286.7 78.89 225.4 98.06 169.3L151.3 174.6z\"],\n    \"photo-film\": [640, 512, [\"photo-video\"], \"f87c\", \"M352 432c0 8.836-7.164 16-16 16H176c-8.838 0-16-7.164-16-16L160 128H48C21.49 128 .0003 149.5 .0003 176v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48L512 384h-160L352 432zM104 439c0 4.969-4.031 9-9 9h-30c-4.969 0-9-4.031-9-9v-30c0-4.969 4.031-9 9-9h30c4.969 0 9 4.031 9 9V439zM104 335c0 4.969-4.031 9-9 9h-30c-4.969 0-9-4.031-9-9v-30c0-4.969 4.031-9 9-9h30c4.969 0 9 4.031 9 9V335zM104 231c0 4.969-4.031 9-9 9h-30c-4.969 0-9-4.031-9-9v-30C56 196 60.03 192 65 192h30c4.969 0 9 4.031 9 9V231zM408 409c0-4.969 4.031-9 9-9h30c4.969 0 9 4.031 9 9v30c0 4.969-4.031 9-9 9h-30c-4.969 0-9-4.031-9-9V409zM591.1 0H239.1C213.5 0 191.1 21.49 191.1 48v256c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-256C640 21.49 618.5 0 591.1 0zM303.1 64c17.68 0 32 14.33 32 32s-14.32 32-32 32C286.3 128 271.1 113.7 271.1 96S286.3 64 303.1 64zM574.1 279.6C571.3 284.8 565.9 288 560 288H271.1C265.1 288 260.5 284.6 257.7 279.3C255 273.9 255.5 267.4 259.1 262.6l70-96C332.1 162.4 336.9 160 341.1 160c5.11 0 9.914 2.441 12.93 6.574l22.35 30.66l62.74-94.11C442.1 98.67 447.1 96 453.3 96c5.348 0 10.34 2.672 13.31 7.125l106.7 160C576.6 268 576.9 274.3 574.1 279.6z\"],\n    \"piggy-bank\": [576, 512, [], \"f4d3\", \"M400 96L399.1 96.66C394.7 96.22 389.4 96 384 96H256C239.5 96 223.5 98.08 208.2 102C208.1 100 208 98.02 208 96C208 42.98 250.1 0 304 0C357 0 400 42.98 400 96zM384 128C387.5 128 390.1 128.1 394.4 128.3C398.7 128.6 402.9 129 407 129.6C424.6 109.1 450.8 96 480 96H512L493.2 171.1C509.1 185.9 521.9 203.9 530.7 224H544C561.7 224 576 238.3 576 256V352C576 369.7 561.7 384 544 384H512C502.9 396.1 492.1 406.9 480 416V480C480 497.7 465.7 512 448 512H416C398.3 512 384 497.7 384 480V448H256V480C256 497.7 241.7 512 224 512H192C174.3 512 160 497.7 160 480V416C125.1 389.8 101.3 349.8 96.79 304H68C30.44 304 0 273.6 0 236C0 198.4 30.44 168 68 168H72C85.25 168 96 178.7 96 192C96 205.3 85.25 216 72 216H68C56.95 216 48 224.1 48 236C48 247 56.95 256 68 256H99.2C111.3 196.2 156.9 148.5 215.5 133.2C228.4 129.8 241.1 128 256 128H384zM424 240C410.7 240 400 250.7 400 264C400 277.3 410.7 288 424 288C437.3 288 448 277.3 448 264C448 250.7 437.3 240 424 240z\"],\n    \"pills\": [576, 512, [], \"f484\", \"M112 32C50.12 32 0 82.12 0 143.1v223.1c0 61.88 50.12 111.1 112 111.1s112-50.12 112-111.1V143.1C224 82.12 173.9 32 112 32zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48V256zM299.8 226.2c-3.5-3.5-9.5-3-12.38 .875c-45.25 62.5-40.38 150.1 15.88 206.4c56.38 56.25 144 61.25 206.5 15.88c4-2.875 4.249-8.75 .75-12.25L299.8 226.2zM529.5 207.2c-56.25-56.25-143.9-61.13-206.4-15.87c-4 2.875-4.375 8.875-.875 12.38l210.9 210.7c3.5 3.5 9.375 3.125 12.25-.75C590.8 351.1 585.9 263.6 529.5 207.2z\"],\n    \"pizza-slice\": [512, 512, [], \"f818\", \"M100.4 112.3L.5101 491.7c-1.375 5.625 .1622 11.6 4.287 15.6c4.127 4.125 10.13 5.744 15.63 4.119l379.1-105.1C395.3 231.4 276.5 114.1 100.4 112.3zM127.1 416c-17.62 0-32-14.38-32-31.1c0-17.62 14.39-32 32.01-32c17.63 0 32 14.38 32 31.1C160 401.6 145.6 416 127.1 416zM175.1 271.1c-17.63 0-32-14.38-32-32c0-17.62 14.38-31.1 32-31.1c17.62 0 32 14.38 32 31.1C208 257.6 193.6 271.1 175.1 271.1zM272 367.1c-17.62 0-32-14.38-32-31.1c0-17.62 14.38-32 32-32c17.63 0 32 14.38 32 32C304 353.6 289.6 367.1 272 367.1zM158.9 .1406c-16.13-1.5-31.25 8.501-35.38 24.12L108.7 80.52c187.6 5.5 314.5 130.6 322.5 316.1l56.88-15.75c15.75-4.375 25.5-19.62 23.63-35.87C490.9 165.1 340.8 17.39 158.9 .1406z\"],\n    \"place-of-worship\": [640, 512, [], \"f67f\", \"M233.4 86.63L308.7 11.32C314.9 5.067 325.1 5.067 331.3 11.32L406.6 86.63C412.6 92.63 416 100.8 416 109.3V217.6L456.7 242C471.2 250.7 480 266.3 480 283.2V512H384V416C384 380.7 355.3 352 319.1 352C284.7 352 255.1 380.7 255.1 416V512H159.1V283.2C159.1 266.3 168.8 250.7 183.3 242L223.1 217.6V109.3C223.1 100.8 227.4 92.63 233.4 86.63H233.4zM24.87 330.3L128 273.6V512H48C21.49 512 0 490.5 0 464V372.4C0 354.9 9.53 338.8 24.87 330.3V330.3zM592 512H512V273.6L615.1 330.3C630.5 338.8 640 354.9 640 372.4V464C640 490.5 618.5 512 592 512V512z\"],\n    \"plane\": [576, 512, [], \"f072\", \"M482.3 192C516.5 192 576 221 576 256C576 292 516.5 320 482.3 320H365.7L265.2 495.9C259.5 505.8 248.9 512 237.4 512H181.2C170.6 512 162.9 501.8 165.8 491.6L214.9 320H112L68.8 377.6C65.78 381.6 61.04 384 56 384H14.03C6.284 384 0 377.7 0 369.1C0 368.7 .1818 367.4 .5398 366.1L32 256L.5398 145.9C.1818 144.6 0 143.3 0 142C0 134.3 6.284 128 14.03 128H56C61.04 128 65.78 130.4 68.8 134.4L112 192H214.9L165.8 20.4C162.9 10.17 170.6 0 181.2 0H237.4C248.9 0 259.5 6.153 265.2 16.12L365.7 192H482.3z\"],\n    \"plane-arrival\": [640, 512, [128748], \"f5af\", \"M.2528 166.9L.0426 67.99C.0208 57.74 9.508 50.11 19.51 52.34L55.07 60.24C65.63 62.58 74.29 70.11 78.09 80.24L95.1 127.1L223.3 165.6L181.8 20.4C178.9 10.18 186.6 .001 197.2 .001H237.3C248.8 .001 259.5 6.236 265.2 16.31L374.2 210.2L481.5 241.8C497.4 246.5 512.2 254.3 525.2 264.7L559.6 292.2C583.7 311.4 577.7 349.5 548.9 360.5C507.7 376.1 462.7 378.5 420.1 367.4L121.7 289.8C110.6 286.9 100.5 281.1 92.4 272.9L9.536 189.4C3.606 183.4 .2707 175.3 .2528 166.9V166.9zM608 448C625.7 448 640 462.3 640 480C640 497.7 625.7 512 608 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448H608zM192 368C192 385.7 177.7 400 160 400C142.3 400 128 385.7 128 368C128 350.3 142.3 336 160 336C177.7 336 192 350.3 192 368zM224 384C224 366.3 238.3 352 256 352C273.7 352 288 366.3 288 384C288 401.7 273.7 416 256 416C238.3 416 224 401.7 224 384z\"],\n    \"plane-departure\": [640, 512, [128747], \"f5b0\", \"M484.6 62C502.6 52.8 522.6 48 542.8 48H600.2C627.2 48 645.9 74.95 636.4 100.2C618.2 148.9 582.1 188.9 535.6 212.2L262.8 348.6C258.3 350.8 253.4 352 248.4 352H110.7C101.4 352 92.5 347.9 86.42 340.8L13.34 255.6C6.562 247.7 9.019 235.5 18.33 230.8L50.49 214.8C59.05 210.5 69.06 210.2 77.8 214.1L135.1 239.1L234.6 189.7L87.64 95.2C77.21 88.49 78.05 72.98 89.14 67.43L135 44.48C150.1 36.52 169.5 35.55 186.1 41.8L381 114.9L484.6 62zM0 480C0 462.3 14.33 448 32 448H608C625.7 448 640 462.3 640 480C640 497.7 625.7 512 608 512H32C14.33 512 0 497.7 0 480z\"],\n    \"plane-slash\": [640, 512, [], \"e069\", \"M238.1 161.3L197.8 20.4C194.9 10.17 202.6-.0001 213.2-.0001H269.4C280.9-.0001 291.5 6.153 297.2 16.12L397.7 192H514.3C548.5 192 608 221 608 256C608 292 548.5 320 514.3 320H440.6L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.237 28.37-3.065 38.81 5.112L238.1 161.3zM41.54 128.7L362.5 381.6L297.2 495.9C291.5 505.8 280.9 512 269.4 512H213.2C202.6 512 194.9 501.8 197.8 491.6L246.9 319.1H144L100.8 377.6C97.78 381.6 93.04 384 88 384H46.03C38.28 384 32 377.7 32 369.1C32 368.7 32.18 367.4 32.54 366.1L64 255.1L32.54 145.9C32.18 144.6 32 143.3 32 142C32 135.9 35.1 130.6 41.54 128.7V128.7z\"],\n    \"play\": [384, 512, [9654], \"f04b\", \"M361 215C375.3 223.8 384 239.3 384 256C384 272.7 375.3 288.2 361 296.1L73.03 472.1C58.21 482 39.66 482.4 24.52 473.9C9.377 465.4 0 449.4 0 432V80C0 62.64 9.377 46.63 24.52 38.13C39.66 29.64 58.21 29.99 73.03 39.04L361 215z\"],\n    \"plug\": [384, 512, [128268], \"f1e6\", \"M320 32c0-17.62-14.38-32-32-32s-32 14.38-32 32v96h64V32zM368 159.1h-352c-8.875 0-16 7.125-16 16v32c0 8.875 7.125 16 16 16H32V256c0 76 53.5 141.6 128 156.8V512h64v-99.25C298.5 397.6 352 332 352 256V223.1h16c8.875 0 16-7.125 16-16v-32C384 167.1 376.9 159.1 368 159.1zM128 32c0-17.62-14.38-32-32-32S64 14.38 64 32v96h64V32z\"],\n    \"plus\": [448, 512, [10133, 61543, \"add\"], \"2b\", \"M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z\"],\n    \"plus-minus\": [384, 512, [], \"e43c\", \"M352 448H32c-17.69 0-32 14.31-32 32s14.31 31.1 32 31.1h320c17.69 0 32-14.31 32-31.1S369.7 448 352 448zM48 208H160v111.1c0 17.69 14.31 31.1 32 31.1s32-14.31 32-31.1V208h112c17.69 0 32-14.32 32-32.01s-14.31-31.99-32-31.99H224v-112c0-17.69-14.31-32.01-32-32.01S160 14.33 160 32.01v112H48c-17.69 0-32 14.31-32 31.99S30.31 208 48 208z\"],\n    \"podcast\": [448, 512, [], \"f2ce\", \"M224 0C100.3 0 0 100.3 0 224c0 92.22 55.77 171.4 135.4 205.7c-3.48-20.75-6.17-41.59-6.998-58.15C80.08 340.1 48 285.8 48 224c0-97.05 78.95-176 176-176s176 78.95 176 176c0 61.79-32.08 116.1-80.39 147.6c-.834 16.5-3.541 37.37-7.035 58.17C392.2 395.4 448 316.2 448 224C448 100.3 347.7 0 224 0zM224 312c-32.88 0-64 8.625-64 43.75c0 33.13 12.88 104.3 20.62 132.8C185.8 507.6 205.1 512 224 512s38.25-4.375 43.38-23.38C275.1 459.9 288 388.8 288 355.8C288 320.6 256.9 312 224 312zM224 280c30.95 0 56-25.05 56-56S254.1 168 224 168S168 193 168 224S193 280 224 280zM368 224c0-79.53-64.47-144-144-144S80 144.5 80 224c0 44.83 20.92 84.38 53.04 110.8c4.857-12.65 14.13-25.88 32.05-35.04C165.1 299.7 165.4 299.7 165.6 299.7C142.9 282.1 128 254.9 128 224c0-53.02 42.98-96 96-96s96 42.98 96 96c0 30.92-14.87 58.13-37.57 75.68c.1309 .0254 .5078 .0488 .4746 .0742c17.93 9.16 27.19 22.38 32.05 35.04C347.1 308.4 368 268.8 368 224z\"],\n    \"poo\": [512, 512, [128169], \"f2fe\", \"M451.4 369.1C468.8 356 480 335.4 480 312c0-39.75-32.25-72-72-72h-14.12C407.3 228.2 416 211.2 416 191.1c0-35.25-28.75-63.1-64-63.1h-5.875C349.8 117.9 352 107.2 352 95.1c0-53-43-96-96-96c-5.25 0-10.25 .75-15.12 1.5C250.3 14.62 256 30.62 256 47.1c0 44.25-35.75 80-80 80H160c-35.25 0-64 28.75-64 63.1c0 19.25 8.75 36.25 22.12 48H104C64.25 239.1 32 272.3 32 312c0 23.38 11.25 44 28.62 57.13C26.25 374.6 0 404.1 0 440C0 479.8 32.25 512 72 512h368c39.75 0 72-32.25 72-72C512 404.1 485.8 374.6 451.4 369.1zM192 256c17.75 0 32 14.25 32 32s-14.25 32-32 32S160 305.8 160 288S174.3 256 192 256zM351.5 395C340.1 422.9 292.1 448 256 448c-36.99 0-84.98-25.12-95.48-53C158.5 389.8 162.5 384 168.3 384h175.5C349.5 384 353.5 389.8 351.5 395zM320 320c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S337.8 320 320 320z\"],\n    \"poo-storm\": [448, 512, [\"poo-bolt\"], \"f75a\", \"M304 368H248.3l38.45-89.7c2.938-6.859 .7187-14.84-5.312-19.23c-6.096-4.422-14.35-4.031-19.94 .8906l-128 111.1c-5.033 4.391-6.783 11.44-4.439 17.67c2.346 6.25 8.314 10.38 14.97 10.38H199.7l-38.45 89.7c-2.938 6.859-.7187 14.84 5.312 19.23C169.4 510.1 172.7 512 175.1 512c3.781 0 7.531-1.328 10.53-3.953l128-111.1c5.033-4.391 6.783-11.44 4.439-17.67C316.6 372.1 310.7 368 304 368zM373.3 226.6C379.9 216.6 384 204.9 384 192c0-35.38-28.62-64-64-64h-5.875C317.8 118 320 107.3 320 96c0-53-43-96-96-96C218.9 0 213.9 .75 208.9 1.5C218.3 14.62 224 30.62 224 48C224 92.13 188.1 128 144 128H128C92.63 128 64 156.6 64 192c0 12.88 4.117 24.58 10.72 34.55C31.98 236.3 0 274.3 0 320c0 53.02 42.98 96 96 96h12.79c-4.033-4.414-7.543-9.318-9.711-15.1c-7.01-18.64-1.645-39.96 13.32-53.02l127.9-111.9C249.1 228.2 260.3 223.1 271.1 224c10.19 0 19.95 3.174 28.26 9.203c18.23 13.27 24.76 36.1 15.89 57.71l-19.33 45.1h7.195c19.89 0 37.95 12.51 44.92 31.11C355.3 384 351 402.8 339.1 416H352c53.02 0 96-42.98 96-96C448 274.3 416 236.3 373.3 226.6z\"],\n    \"poop\": [512, 512, [], \"f619\", \"M512 440.1C512 479.9 479.7 512 439.1 512H71.92C32.17 512 0 479.8 0 440c0-35.88 26.19-65.35 60.56-70.85C43.31 356 32 335.4 32 312C32 272.2 64.25 240 104 240h13.99C104.5 228.2 96 211.2 96 192c0-35.38 28.56-64 63.94-64h16C220.1 128 256 92.12 256 48c0-17.38-5.784-33.35-15.16-46.47C245.8 .7754 250.9 0 256 0c53 0 96 43 96 96c0 11.25-2.288 22-5.913 32h5.879C387.3 128 416 156.6 416 192c0 19.25-8.59 36.25-22.09 48H408C447.8 240 480 272.2 480 312c0 23.38-11.38 44.01-28.63 57.14C485.7 374.6 512 404.3 512 440.1z\"],\n    \"power-off\": [512, 512, [9211], \"f011\", \"M288 256C288 273.7 273.7 288 256 288C238.3 288 224 273.7 224 256V32C224 14.33 238.3 0 256 0C273.7 0 288 14.33 288 32V256zM80 256C80 353.2 158.8 432 256 432C353.2 432 432 353.2 432 256C432 201.6 407.3 152.9 368.5 120.6C354.9 109.3 353 89.13 364.3 75.54C375.6 61.95 395.8 60.1 409.4 71.4C462.2 115.4 496 181.8 496 255.1C496 388.5 388.5 496 256 496C123.5 496 16 388.5 16 255.1C16 181.8 49.75 115.4 102.6 71.4C116.2 60.1 136.4 61.95 147.7 75.54C158.1 89.13 157.1 109.3 143.5 120.6C104.7 152.9 80 201.6 80 256z\"],\n    \"prescription\": [448, 512, [], \"f5b1\", \"M440.1 448.4l-96.28-96.21l95.87-95.95c9.373-9.381 9.373-24.59 0-33.97l-22.62-22.64c-9.373-9.381-24.57-9.381-33.94 0L288.1 295.6L220.5 228c46.86-22.92 76.74-75.46 64.95-133.1C273.9 38.74 221.8 0 164.6 0H31.1C14.33 0 0 14.34 0 32.03v264.1c0 13.26 10.75 24.01 23.1 24.01l31.1 .085c13.25 0 23.1-10.75 23.1-24.02V240.2H119.4l112.1 112L135.4 448.4c-9.373 9.381-9.373 24.59 0 33.97l22.62 22.64c9.373 9.38 24.57 9.38 33.94 0l96.13-96.21l96.28 96.21c9.373 9.381 24.57 9.381 33.94 0l22.62-22.64C450.3 472.9 450.3 457.7 440.1 448.4zM79.1 80.06h87.1c22.06 0 39.1 17.95 39.1 40.03s-17.94 40.03-39.1 40.03H79.1V80.06z\"],\n    \"prescription-bottle\": [384, 512, [], \"f485\", \"M32 192h112C152.8 192 160 199.2 160 208C160 216.8 152.8 224 144 224H32v64h112C152.8 288 160 295.2 160 304C160 312.8 152.8 320 144 320H32v64h112C152.8 384 160 391.2 160 400C160 408.8 152.8 416 144 416H32v32c0 35.2 28.8 64 64 64h192c35.2 0 64-28.8 64-64V128H32V192zM360 0H24C10.75 0 0 10.75 0 24v48C0 85.25 10.75 96 24 96h336C373.3 96 384 85.25 384 72v-48C384 10.75 373.3 0 360 0z\"],\n    \"prescription-bottle-medical\": [384, 512, [\"prescription-bottle-alt\"], \"f486\", \"M32 448c0 35.2 28.8 64 64 64h192c35.2 0 64-28.8 64-64V128H32V448zM96 304C96 295.2 103.2 288 112 288H160V240C160 231.2 167.2 224 176 224h32C216.8 224 224 231.2 224 240V288h48C280.8 288 288 295.2 288 304v32c0 8.799-7.199 16-16 16H224v48c0 8.799-7.199 16-16 16h-32C167.2 416 160 408.8 160 400V352H112C103.2 352 96 344.8 96 336V304zM360 0H24C10.75 0 0 10.75 0 24v48C0 85.25 10.75 96 24 96h336C373.3 96 384 85.25 384 72v-48C384 10.75 373.3 0 360 0z\"],\n    \"print\": [512, 512, [128424, 128438, 9113], \"f02f\", \"M448 192H64C28.65 192 0 220.7 0 256v96c0 17.67 14.33 32 32 32h32v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h32c17.67 0 32-14.33 32-32V256C512 220.7 483.3 192 448 192zM384 448H128v-96h256V448zM432 296c-13.25 0-24-10.75-24-24c0-13.27 10.75-24 24-24s24 10.73 24 24C456 285.3 445.3 296 432 296zM128 64h229.5L384 90.51V160h64V77.25c0-8.484-3.375-16.62-9.375-22.62l-45.25-45.25C387.4 3.375 379.2 0 370.8 0H96C78.34 0 64 14.33 64 32v128h64V64z\"],\n    \"pump-medical\": [384, 512, [], \"e06a\", \"M379.3 94.06l-43.32-43.32C323.1 38.74 307.7 32 290.8 32h-66.75c0-17.67-14.33-32-32-32H127.1c-17.67 0-32 14.33-32 32L96 128h128l-.0002-32h66.75l43.31 43.31c6.248 6.248 16.38 6.248 22.63 0l22.62-22.62C385.6 110.4 385.6 100.3 379.3 94.06zM235.6 160H84.37C51.27 160 23.63 185.2 20.63 218.2l-20.36 224C-3.139 479.7 26.37 512 64.01 512h191.1c37.63 0 67.14-32.31 63.74-69.79l-20.36-224C296.4 185.2 268.7 160 235.6 160zM239.1 333.3c0 7.363-5.971 13.33-13.33 13.33h-40v40c0 7.363-5.969 13.33-13.33 13.33h-26.67c-7.363 0-13.33-5.971-13.33-13.33v-40H93.33c-7.363 0-13.33-5.971-13.33-13.33V306.7c0-7.365 5.971-13.33 13.33-13.33h40v-40C133.3 245.1 139.3 240 146.7 240h26.67c7.363 0 13.33 5.969 13.33 13.33v40h40c7.363 0 13.33 5.969 13.33 13.33V333.3z\"],\n    \"pump-soap\": [384, 512, [], \"e06b\", \"M235.6 160H84.37C51.27 160 23.63 185.2 20.63 218.2l-20.36 224C-3.139 479.7 26.37 512 64.01 512h191.1c37.63 0 67.14-32.31 63.74-69.79l-20.36-224C296.4 185.2 268.7 160 235.6 160zM159.1 416C124.7 416 96 389.7 96 357.3c0-25 38.08-75.47 55.5-97.27c4.25-5.312 12.75-5.312 17 0C185.9 281.8 224 332.3 224 357.3C224 389.7 195.3 416 159.1 416zM379.3 94.06l-43.32-43.32C323.1 38.74 307.7 32 290.8 32h-66.75c0-17.67-14.33-32-32-32H127.1c-17.67 0-32 14.33-32 32L96 128h128l-.0002-32h66.75l43.31 43.31c6.248 6.248 16.38 6.248 22.63 0l22.62-22.62C385.6 110.4 385.6 100.3 379.3 94.06z\"],\n    \"puzzle-piece\": [512, 512, [129513], \"f12e\", \"M512 288c0 35.35-21.49 64-48 64c-32.43 0-31.72-32-55.64-32C394.9 320 384 330.9 384 344.4V480c0 17.67-14.33 32-32 32h-71.64C266.9 512 256 501.1 256 487.6C256 463.1 288 464.4 288 432c0-26.51-28.65-48-64-48s-64 21.49-64 48c0 32.43 32 31.72 32 55.64C192 501.1 181.1 512 167.6 512H32c-17.67 0-32-14.33-32-32v-135.6C0 330.9 10.91 320 24.36 320C48.05 320 47.6 352 80 352C106.5 352 128 323.3 128 288S106.5 223.1 80 223.1c-32.43 0-31.72 32-55.64 32C10.91 255.1 0 245.1 0 231.6v-71.64c0-17.67 14.33-31.1 32-31.1h135.6C181.1 127.1 192 117.1 192 103.6c0-23.69-32-23.24-32-55.64c0-26.51 28.65-47.1 64-47.1s64 21.49 64 47.1c0 32.43-32 31.72-32 55.64c0 13.45 10.91 24.36 24.36 24.36H352c17.67 0 32 14.33 32 31.1v71.64c0 13.45 10.91 24.36 24.36 24.36c23.69 0 23.24-32 55.64-32C490.5 223.1 512 252.7 512 288z\"],\n    \"q\": [448, 512, [113], \"51\", \"M393.1 402.5c34.12-39.32 54.93-90.48 54.93-146.5c0-123.5-100.5-224-223.1-224S.0001 132.5 .0001 256s100.5 224 223.1 224c44.45 0 85.81-13.16 120.7-35.58l46.73 56.08c6.328 7.594 15.42 11.52 24.59 11.52c21.35 0 31.98-18.26 31.98-32.01c0-7.223-2.433-14.49-7.419-20.47L393.1 402.5zM224 416c-88.22 0-160-71.78-160-160s71.78-159.1 160-159.1s160 71.78 160 159.1c0 36.21-12.55 69.28-32.92 96.12L280.6 267.5c-6.338-7.597-15.44-11.53-24.61-11.53c-21.27 0-31.96 18.22-31.96 32.02c0 7.223 2.433 14.49 7.419 20.47l71.53 85.83C279.6 407.7 252.8 416 224 416z\"],\n    \"qrcode\": [448, 512, [], \"f029\", \"M144 32C170.5 32 192 53.49 192 80V176C192 202.5 170.5 224 144 224H48C21.49 224 0 202.5 0 176V80C0 53.49 21.49 32 48 32H144zM128 96H64V160H128V96zM144 288C170.5 288 192 309.5 192 336V432C192 458.5 170.5 480 144 480H48C21.49 480 0 458.5 0 432V336C0 309.5 21.49 288 48 288H144zM128 352H64V416H128V352zM256 80C256 53.49 277.5 32 304 32H400C426.5 32 448 53.49 448 80V176C448 202.5 426.5 224 400 224H304C277.5 224 256 202.5 256 176V80zM320 160H384V96H320V160zM352 448H384V480H352V448zM448 480H416V448H448V480zM416 288H448V416H352V384H320V480H256V288H352V320H416V288z\"],\n    \"question\": [320, 512, [10067, 10068, 61736], \"3f\", \"M204.3 32.01H96c-52.94 0-96 43.06-96 96c0 17.67 14.31 31.1 32 31.1s32-14.32 32-31.1c0-17.64 14.34-32 32-32h108.3C232.8 96.01 256 119.2 256 147.8c0 19.72-10.97 37.47-30.5 47.33L127.8 252.4C117.1 258.2 112 268.7 112 280v40c0 17.67 14.31 31.99 32 31.99s32-14.32 32-31.99V298.3L256 251.3c39.47-19.75 64-59.42 64-103.5C320 83.95 268.1 32.01 204.3 32.01zM144 400c-22.09 0-40 17.91-40 40s17.91 39.1 40 39.1s40-17.9 40-39.1S166.1 400 144 400z\"],\n    \"quote-left\": [448, 512, [8220, \"quote-left-alt\"], \"f10d\", \"M96 224C84.72 224 74.05 226.3 64 229.9V224c0-35.3 28.7-64 64-64c17.67 0 32-14.33 32-32S145.7 96 128 96C57.42 96 0 153.4 0 224v96c0 53.02 42.98 96 96 96s96-42.98 96-96S149 224 96 224zM352 224c-11.28 0-21.95 2.305-32 5.879V224c0-35.3 28.7-64 64-64c17.67 0 32-14.33 32-32s-14.33-32-32-32c-70.58 0-128 57.42-128 128v96c0 53.02 42.98 96 96 96s96-42.98 96-96S405 224 352 224z\"],\n    \"quote-right\": [448, 512, [8221, \"quote-right-alt\"], \"f10e\", \"M96 96C42.98 96 0 138.1 0 192s42.98 96 96 96c11.28 0 21.95-2.305 32-5.879V288c0 35.3-28.7 64-64 64c-17.67 0-32 14.33-32 32s14.33 32 32 32c70.58 0 128-57.42 128-128V192C192 138.1 149 96 96 96zM448 192c0-53.02-42.98-96-96-96s-96 42.98-96 96s42.98 96 96 96c11.28 0 21.95-2.305 32-5.879V288c0 35.3-28.7 64-64 64c-17.67 0-32 14.33-32 32s14.33 32 32 32c70.58 0 128-57.42 128-128V192z\"],\n    \"r\": [320, 512, [114], \"52\", \"M228.7 309.7C282 288.6 320 236.8 320 176c0-79.41-64.59-144-144-144H32c-17.67 0-32 14.33-32 32v384c0 17.67 14.33 32 32 32s32-14.33 32-32v-128h93.43l104.5 146.6c6.25 8.75 16.09 13.42 26.09 13.42c6.422 0 12.91-1.922 18.55-5.938c14.39-10.27 17.73-30.25 7.484-44.64L228.7 309.7zM64 96.01h112c44.11 0 80 35.89 80 80s-35.89 79.1-80 79.1H64V96.01z\"],\n    \"radiation\": [512, 512, [], \"f7b9\", \"M256 303.1c26.5 0 48-21.5 48-48S282.5 207.1 256 207.1S208 229.5 208 255.1S229.5 303.1 256 303.1zM213.6 188L142.7 74.71C132.5 58.41 109.9 54.31 95.25 66.75c-44.94 38.1-76.19 91.82-85.17 152.8C7.266 238.7 22.67 255.8 42.01 255.8h133.8C175.8 227.2 191 202.3 213.6 188zM416.8 66.75c-14.67-12.44-37.21-8.338-47.41 7.965L298.4 188c22.6 14.3 37.8 39.2 37.8 67.8h133.8c19.34 0 34.74-17.13 31.93-36.26C492.9 158.6 461.7 104.8 416.8 66.75zM298.4 323.5C286.1 331.2 271.6 335.9 256 335.9s-30.1-4.701-42.4-12.4L142.7 436.9c-10.14 16.21-4.16 38.2 13.32 45.95C186.6 496.4 220.4 504 256 504s69.42-7.611 100-21.18c17.48-7.752 23.46-29.74 13.32-45.95L298.4 323.5z\"],\n    \"rainbow\": [640, 512, [127752], \"f75b\", \"M312.3 32.09C137.6 36.22 0 183.3 0 358V464C0 472.8 7.164 480 16 480h32C56.84 480 64 472.8 64 464v-106.9c0-143.2 117.2-263.5 260.4-261.1C463.5 98.4 576 212.3 576 352v112c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V352C640 172.1 492.3 27.84 312.3 32.09zM313.5 224.2C244.8 227.6 192 286.9 192 355.7V464C192 472.8 199.2 480 208 480h32C248.8 480 256 472.8 256 464v-109.7c0-34.06 25.65-63.85 59.64-66.11C352.9 285.7 384 315.3 384 352v112c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V352C448 279.3 387 220.5 313.5 224.2zM313.2 128.1C191.4 131.7 96 234.9 96 356.8V464C96 472.8 103.2 480 112 480h32C152.8 480 160 472.8 160 464v-108.1c0-86.64 67.24-160.5 153.8-163.8C404.8 188.7 480 261.7 480 352v112c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V352C544 226.2 439.8 124.3 313.2 128.1z\"],\n    \"receipt\": [384, 512, [129534], \"f543\", \"M13.97 2.196C22.49-1.72 32.5-.3214 39.62 5.778L80 40.39L120.4 5.778C129.4-1.926 142.6-1.926 151.6 5.778L192 40.39L232.4 5.778C241.4-1.926 254.6-1.926 263.6 5.778L304 40.39L344.4 5.778C351.5-.3214 361.5-1.72 370 2.196C378.5 6.113 384 14.63 384 24V488C384 497.4 378.5 505.9 370 509.8C361.5 513.7 351.5 512.3 344.4 506.2L304 471.6L263.6 506.2C254.6 513.9 241.4 513.9 232.4 506.2L192 471.6L151.6 506.2C142.6 513.9 129.4 513.9 120.4 506.2L80 471.6L39.62 506.2C32.5 512.3 22.49 513.7 13.97 509.8C5.456 505.9 0 497.4 0 488V24C0 14.63 5.456 6.112 13.97 2.196V2.196zM96 144C87.16 144 80 151.2 80 160C80 168.8 87.16 176 96 176H288C296.8 176 304 168.8 304 160C304 151.2 296.8 144 288 144H96zM96 368H288C296.8 368 304 360.8 304 352C304 343.2 296.8 336 288 336H96C87.16 336 80 343.2 80 352C80 360.8 87.16 368 96 368zM96 240C87.16 240 80 247.2 80 256C80 264.8 87.16 272 96 272H288C296.8 272 304 264.8 304 256C304 247.2 296.8 240 288 240H96z\"],\n    \"record-vinyl\": [512, 512, [], \"f8d9\", \"M256 160C202.9 160 160 202.9 160 256s42.92 96 96 96c53.08 0 96-42.92 96-96S309.1 160 256 160zM256 288C238.3 288 224 273.7 224 256s14.33-32 32-32c17.67 0 32 14.33 32 32S273.7 288 256 288zM256 0c-141.4 0-256 114.6-256 256s114.6 256 256 256c141.4 0 256-114.6 256-256S397.4 0 256 0zM256 384c-70.75 0-128-57.25-128-128s57.25-128 128-128s128 57.25 128 128S326.8 384 256 384z\"],\n    \"rectangle-ad\": [576, 512, [\"ad\"], \"f641\", \"M208 237.7L229.2 280H186.8L208 237.7zM416 280C416 293.3 405.3 304 392 304C378.7 304 368 293.3 368 280C368 266.7 378.7 256 392 256C405.3 256 416 266.7 416 280zM512 32C547.3 32 576 60.65 576 96V416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H512zM229.5 173.3C225.4 165.1 217.1 160 208 160C198.9 160 190.6 165.1 186.5 173.3L114.5 317.3C108.6 329.1 113.4 343.5 125.3 349.5C137.1 355.4 151.5 350.6 157.5 338.7L162.8 328H253.2L258.5 338.7C264.5 350.6 278.9 355.4 290.7 349.5C302.6 343.5 307.4 329.1 301.5 317.3L229.5 173.3zM416 212.1C408.5 209.4 400.4 208 392 208C352.2 208 320 240.2 320 280C320 319.8 352.2 352 392 352C403.1 352 413.6 349.5 423 344.1C427.4 349.3 433.4 352 440 352C453.3 352 464 341.3 464 328V184C464 170.7 453.3 160 440 160C426.7 160 416 170.7 416 184V212.1z\"],\n    \"rectangle-list\": [576, 512, [\"list-alt\"], \"f022\", \"M0 96C0 60.65 28.65 32 64 32H512C547.3 32 576 60.65 576 96V416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V96zM160 256C160 238.3 145.7 224 128 224C110.3 224 96 238.3 96 256C96 273.7 110.3 288 128 288C145.7 288 160 273.7 160 256zM160 160C160 142.3 145.7 128 128 128C110.3 128 96 142.3 96 160C96 177.7 110.3 192 128 192C145.7 192 160 177.7 160 160zM160 352C160 334.3 145.7 320 128 320C110.3 320 96 334.3 96 352C96 369.7 110.3 384 128 384C145.7 384 160 369.7 160 352zM224 136C210.7 136 200 146.7 200 160C200 173.3 210.7 184 224 184H448C461.3 184 472 173.3 472 160C472 146.7 461.3 136 448 136H224zM224 232C210.7 232 200 242.7 200 256C200 269.3 210.7 280 224 280H448C461.3 280 472 269.3 472 256C472 242.7 461.3 232 448 232H224zM224 328C210.7 328 200 338.7 200 352C200 365.3 210.7 376 224 376H448C461.3 376 472 365.3 472 352C472 338.7 461.3 328 448 328H224z\"],\n    \"rectangle-xmark\": [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM175 208.1L222.1 255.1L175 303C165.7 312.4 165.7 327.6 175 336.1C184.4 346.3 199.6 346.3 208.1 336.1L255.1 289.9L303 336.1C312.4 346.3 327.6 346.3 336.1 336.1C346.3 327.6 346.3 312.4 336.1 303L289.9 255.1L336.1 208.1C346.3 199.6 346.3 184.4 336.1 175C327.6 165.7 312.4 165.7 303 175L255.1 222.1L208.1 175C199.6 165.7 184.4 165.7 175 175C165.7 184.4 165.7 199.6 175 208.1V208.1z\"],\n    \"recycle\": [512, 512, [9850, 9851, 9842], \"f1b8\", \"M180.2 243.1C185 263.9 162.2 280.2 144.1 268.8L119.8 253.6l-50.9 81.43c-13.33 21.32 2.004 48.98 27.15 48.98h32.02c17.64 0 31.98 14.32 31.98 31.96c0 17.64-14.34 32.05-31.98 32.05H96.15c-75.36 0-121.3-82.84-81.47-146.8L65.51 219.8L41.15 204.5C23.04 193.1 27.66 165.5 48.48 160.7l91.43-21.15C148.5 137.7 157.2 142.9 159.2 151.6L180.2 243.1zM283.1 78.96l41.25 66.14l-24.25 15.08c-18.16 11.31-13.57 38.94 7.278 43.77l91.4 21.15c8.622 1.995 17.23-3.387 19.21-12.01l21.04-91.43c4.789-20.81-17.95-37.05-36.07-25.76l-24.36 15.2L337.4 45.14c-37.58-60.14-125.2-60.18-162.8-.0617L167.2 56.9C157.9 71.75 162.5 91.58 177.3 100.9c14.92 9.359 34.77 4.886 44.11-10.04l7.442-11.89C241.6 58.58 270.9 59.33 283.1 78.96zM497.3 301.3l-16.99-27.26c-9.336-14.98-29.06-19.56-44.04-10.21c-14.94 9.318-19.52 29.15-10.18 44.08l16.99 27.15c13.35 21.32-1.984 49-27.14 49h-95.99l.0234-28.74c0-21.38-25.85-32.09-40.97-16.97l-66.41 66.43c-6.222 6.223-6.222 16.41 .0044 22.63l66.42 66.34c15.12 15.1 40.95 4.386 40.95-16.98l-.0234-28.68h95.86C491.2 448.1 537.2 365.2 497.3 301.3z\"],\n    \"registered\": [512, 512, [174], \"f25d\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM349.8 349.8c5.594 12.03 .4375 26.31-11.56 31.94c-3.312 1.531-6.75 2.25-10.19 2.25c-9 0-17.66-5.125-21.75-13.81l-38.46-82.19H208v72c0 13.25-10.75 24-24 24s-24-10.75-24-24V152c0-13.25 10.75-24 24-24l88 .0044c44.13 0 80 35.88 80 80c0 28.32-14.87 53.09-37.12 67.31L349.8 349.8zM272 176h-64v64h64c17.66 0 32-14.34 32-32S289.7 176 272 176z\"],\n    \"repeat\": [512, 512, [128257], \"f363\", \"M480 256c-17.67 0-32 14.31-32 32c0 52.94-43.06 96-96 96H192L192 344c0-9.469-5.578-18.06-14.23-21.94C169.1 318.3 159 319.8 151.9 326.2l-80 72C66.89 402.7 64 409.2 64 416s2.891 13.28 7.938 17.84l80 72C156.4 509.9 162.2 512 168 512c3.312 0 6.615-.6875 9.756-2.062C186.4 506.1 192 497.5 192 488L192 448h160c88.22 0 160-71.78 160-160C512 270.3 497.7 256 480 256zM160 128h159.1L320 168c0 9.469 5.578 18.06 14.23 21.94C337.4 191.3 340.7 192 343.1 192c5.812 0 11.57-2.125 16.07-6.156l80-72C445.1 109.3 448 102.8 448 95.1s-2.891-13.28-7.938-17.84l-80-72c-7.047-6.312-17.19-7.875-25.83-4.094C325.6 5.938 319.1 14.53 319.1 24L320 64H160C71.78 64 0 135.8 0 224c0 17.69 14.33 32 32 32s32-14.31 32-32C64 171.1 107.1 128 160 128z\"],\n    \"reply\": [512, 512, [61714, \"mail-reply\"], \"f3e5\", \"M8.31 189.9l176-151.1c15.41-13.3 39.69-2.509 39.69 18.16v80.05C384.6 137.9 512 170.1 512 322.3c0 61.44-39.59 122.3-83.34 154.1c-13.66 9.938-33.09-2.531-28.06-18.62c45.34-145-21.5-183.5-176.6-185.8v87.92c0 20.7-24.31 31.45-39.69 18.16l-176-151.1C-2.753 216.6-2.784 199.4 8.31 189.9z\"],\n    \"reply-all\": [576, 512, [\"mail-reply-all\"], \"f122\", \"M136.3 226.2l176 151.1c15.38 13.3 39.69 2.545 39.69-18.16V275.1c108.5 12.58 151.1 58.79 112.6 181.9c-5.031 16.09 14.41 28.56 28.06 18.62c43.75-31.81 83.34-92.69 83.34-154.1c0-131.3-94.86-173.2-224-183.5V56.02c0-20.67-24.28-31.46-39.69-18.16L136.3 189.9C125.2 199.4 125.2 216.6 136.3 226.2zM8.31 226.2l176 151.1c15.38 13.3 39.69 2.545 39.69-18.16v-15.83L66.33 208l157.7-136.2V56.02c0-20.67-24.28-31.46-39.69-18.16l-176 151.1C-2.77 199.4-2.77 216.6 8.31 226.2z\"],\n    \"republican\": [640, 512, [], \"f75e\", \"M544 191.1c0-88.37-71.62-159.1-159.1-159.1L159.1 32C71.62 32 0 103.6 0 191.1l.025 63.98h543.1V191.1zM176.3 170.4l-19.75 19.37l4.75 27.25c.7498 4.875-4.375 8.625-8.75 6.25l-24.5-12.87L103.5 223.2C99.27 225.6 94.02 221.9 94.77 216.1l4.75-27.25l-19.75-19.37C76.15 166.9 78.15 160.9 83.02 160.2L110.4 156.2l12.25-24.87c2.125-4.5 8.625-4.375 10.62 0L145.5 156.2L172.9 160.2C177.9 160.9 179.8 166.9 176.3 170.4zM320.3 170.4l-19.75 19.37l4.75 27.25c.7498 4.875-4.375 8.625-8.75 6.25L272 210.4l-24.5 12.87C243.3 225.6 238 221.9 238.8 216.1L243.5 189.7l-19.75-19.37c-3.625-3.5-1.625-9.498 3.25-10.12L254.4 156.2l12.25-24.87c2.125-4.5 8.625-4.375 10.62 0L289.5 156.2l27.37 4C321.9 160.9 323.8 166.9 320.3 170.4zM464.3 170.4l-19.75 19.37l4.75 27.25c.7498 4.875-4.375 8.625-8.75 6.25l-24.5-12.87l-24.5 12.87c-4.25 2.375-9.5-1.375-8.75-6.25l4.75-27.25l-19.75-19.37c-3.625-3.5-1.625-9.498 3.25-10.12l27.37-4l12.25-24.87c2.125-4.5 8.625-4.375 10.62 0l12.25 24.87l27.37 4C465.9 160.9 467.8 166.9 464.3 170.4zM624 319.1L592 319.1c-8.799 0-15.1 7.199-15.1 15.1v63.99c0 8.748-7.25 15.1-15.1 15.1c-8.75 0-15.1-7.25-15.1-15.1l-.0313-111.1L.025 287.1v159.1c0 17.6 14.4 31.1 31.1 31.1L95.98 479.1c17.6 0 32.04-14.4 32.04-32v-63.98l191.1-.0169v63.99c0 17.6 14.36 32 31.96 32l64.04 .013c17.6 0 31.1-14.4 31.1-31.1l-.0417-96.01l32.04 .0006v43.25c0 41.79 29.91 80.03 71.48 84.35C599.3 484.5 640 446.9 640 399.1v-63.98C640 327.2 632.8 319.1 624 319.1z\"],\n    \"restroom\": [640, 512, [], \"f7bd\", \"M319.1 0C306.8 0 296 10.8 296 24v464c0 13.2 10.8 24 23.1 24s24-10.8 24-24V24C344 10.8 333.2 0 319.1 0zM213.7 171.8C204.9 145.6 180.5 128 152.9 128H103.1C75.47 128 51.06 145.6 42.37 171.8L1.653 293.9c-5.594 16.77 3.469 34.89 20.22 40.48c12.68 4.211 25.93 .1426 34.13-9.18V480c0 17.67 14.33 32 32 32s31.1-14.33 31.1-32l-.0003-144h16l.0003 144c0 17.67 14.33 32 32 32s31.1-14.33 31.1-32l-.0003-155.2c6.041 6.971 14.7 11.25 24 11.25c3.344 0 6.75-.5313 10.13-1.656c16.75-5.594 25.81-23.72 20.22-40.48L213.7 171.8zM128 96c26.5 0 47.1-21.5 47.1-48S154.5 0 128 0S80 21.5 80 48S101.5 96 128 96zM511.1 96c26.5 0 48-21.5 48-48S538.5 0 511.1 0s-47.1 21.5-47.1 48S485.5 96 511.1 96zM638.3 293.9l-40.69-122.1C588.9 145.6 564.5 128 536.9 128h-49.88c-27.59 0-52 17.59-60.69 43.75l-40.72 122.1c-5.594 16.77 3.469 34.89 20.22 40.48c3.422 1.137 6.856 1.273 10.25 1.264L399.1 384h40v96c0 17.67 14.32 32 31.1 32s32-14.33 32-32v-96h16v96c0 17.67 14.32 32 31.1 32s32-14.33 32-32v-96h39.1l-15.99-47.98c3.342 0 6.747-.5313 10.12-1.656C634.9 328.8 643.9 310.6 638.3 293.9z\"],\n    \"retweet\": [640, 512, [], \"f079\", \"M614.2 334.8C610.5 325.8 601.7 319.1 592 319.1H544V176C544 131.9 508.1 96 464 96h-128c-17.67 0-32 14.31-32 32s14.33 32 32 32h128C472.8 160 480 167.2 480 176v143.1h-48c-9.703 0-18.45 5.844-22.17 14.82s-1.656 19.29 5.203 26.16l80 80.02C499.7 445.7 505.9 448 512 448s12.28-2.344 16.97-7.031l80-80.02C615.8 354.1 617.9 343.8 614.2 334.8zM304 352h-128C167.2 352 160 344.8 160 336V192h48c9.703 0 18.45-5.844 22.17-14.82s1.656-19.29-5.203-26.16l-80-80.02C140.3 66.34 134.1 64 128 64S115.7 66.34 111 71.03l-80 80.02C24.17 157.9 22.11 168.2 25.83 177.2S38.3 192 48 192H96V336C96 380.1 131.9 416 176 416h128c17.67 0 32-14.31 32-32S321.7 352 304 352z\"],\n    \"ribbon\": [448, 512, [127895], \"f4d6\", \"M6.05 444.3c-9.626 10.87-7.501 27.62 4.5 35.75l68.76 27.87c9.876 6.75 23.38 4.1 31.38-3.75l91.76-101.9L123.2 314.3L6.05 444.3zM441.8 444.3c0 0-292-324.5-295.4-329.1c15.38-8.5 40.25-17.1 77.51-17.1s62.13 9.5 77.51 17.1c-3.25 5.5-56.01 64.5-56.01 64.5l79.13 87.75l34.13-37.1c28.75-31.87 33.38-78.62 11.5-115.5L326.5 39.52c-4.25-7.25-9.876-13.25-16.75-17.1c-40.75-27.62-127.5-29.75-171.5 0C131.3 26.27 125.7 32.27 121.4 39.52L77.81 112.8C76.31 115.3 40.68 174.9 89.31 228.8l248.1 275.2c8.001 8.875 21.38 10.5 31.25 3.75l68.88-27.87C449.5 471.9 451.6 455.1 441.8 444.3z\"],\n    \"right-from-bracket\": [512, 512, [\"sign-out-alt\"], \"f2f5\", \"M96 480h64C177.7 480 192 465.7 192 448S177.7 416 160 416H96c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h64C177.7 96 192 81.67 192 64S177.7 32 160 32H96C42.98 32 0 74.98 0 128v256C0 437 42.98 480 96 480zM504.8 238.5l-144.1-136c-6.975-6.578-17.2-8.375-26-4.594c-8.803 3.797-14.51 12.47-14.51 22.05l-.0918 72l-128-.001c-17.69 0-32.02 14.33-32.02 32v64c0 17.67 14.34 32 32.02 32l128 .001l.0918 71.1c0 9.578 5.707 18.25 14.51 22.05c8.803 3.781 19.03 1.984 26-4.594l144.1-136C514.4 264.4 514.4 247.6 504.8 238.5z\"],\n    \"right-left\": [512, 512, [\"exchange-alt\"], \"f362\", \"M32 160h319.9l.0791 72c0 9.547 5.652 18.19 14.41 22c8.754 3.812 18.93 2.078 25.93-4.406l112-104c10.24-9.5 10.24-25.69 0-35.19l-112-104c-6.992-6.484-17.17-8.217-25.93-4.408c-8.758 3.816-14.41 12.46-14.41 22L351.9 96H32C14.31 96 0 110.3 0 127.1S14.31 160 32 160zM480 352H160.1L160 279.1c0-9.547-5.652-18.19-14.41-22C136.9 254.2 126.7 255.9 119.7 262.4l-112 104c-10.24 9.5-10.24 25.69 0 35.19l112 104c6.992 6.484 17.17 8.219 25.93 4.406C154.4 506.2 160 497.5 160 488L160.1 416H480c17.69 0 32-14.31 32-32S497.7 352 480 352z\"],\n    \"right-long\": [512, 512, [\"long-arrow-alt-right\"], \"f30b\", \"M504.3 273.6l-112.1 104c-6.992 6.484-17.18 8.218-25.94 4.406c-8.758-3.812-14.42-12.45-14.42-21.1L351.9 288H32C14.33 288 .0002 273.7 .0002 255.1S14.33 224 32 224h319.9l0-72c0-9.547 5.66-18.19 14.42-22c8.754-3.809 18.95-2.075 25.94 4.41l112.1 104C514.6 247.9 514.6 264.1 504.3 273.6z\"],\n    \"right-to-bracket\": [512, 512, [\"sign-in-alt\"], \"f2f6\", \"M344.7 238.5l-144.1-136C193.7 95.97 183.4 94.17 174.6 97.95C165.8 101.8 160.1 110.4 160.1 120V192H32.02C14.33 192 0 206.3 0 224v64c0 17.68 14.33 32 32.02 32h128.1v72c0 9.578 5.707 18.25 14.51 22.05c8.803 3.781 19.03 1.984 26-4.594l144.1-136C354.3 264.4 354.3 247.6 344.7 238.5zM416 32h-64c-17.67 0-32 14.33-32 32s14.33 32 32 32h64c17.67 0 32 14.33 32 32v256c0 17.67-14.33 32-32 32h-64c-17.67 0-32 14.33-32 32s14.33 32 32 32h64c53.02 0 96-42.98 96-96V128C512 74.98 469 32 416 32z\"],\n    \"ring\": [512, 512, [], \"f70b\", \"M256 64C109.1 64 0 125.9 0 208v98.13C0 384.5 114.6 448 256 448s256-63.5 256-141.9V208C512 125.9 401.1 64 256 64zM256 288C203.1 288 155.1 279.1 120.4 264.6C155 249.9 201.6 240 256 240s101 9.875 135.6 24.62C356.9 279.1 308.9 288 256 288zM437.1 234.4C392.1 208.3 328.3 192 256 192S119.9 208.3 74.88 234.4C68 226.1 64 217.3 64 208C64 163.9 149.1 128 256 128c105.1 0 192 35.88 192 80C448 217.3 444 226.1 437.1 234.4z\"],\n    \"road\": [576, 512, [128739], \"f018\", \"M256 96C256 113.7 270.3 128 288 128C305.7 128 320 113.7 320 96V32H394.8C421.9 32 446 49.08 455.1 74.63L572.9 407.2C574.9 413 576 419.2 576 425.4C576 455.5 551.5 480 521.4 480H320V416C320 398.3 305.7 384 288 384C270.3 384 256 398.3 256 416V480H54.61C24.45 480 0 455.5 0 425.4C0 419.2 1.06 413 3.133 407.2L120.9 74.63C129.1 49.08 154.1 32 181.2 32H255.1L256 96zM320 224C320 206.3 305.7 192 288 192C270.3 192 256 206.3 256 224V288C256 305.7 270.3 320 288 320C305.7 320 320 305.7 320 288V224z\"],\n    \"robot\": [640, 512, [129302], \"f544\", \"M9.375 233.4C3.375 239.4 0 247.5 0 256v128c0 8.5 3.375 16.62 9.375 22.62S23.5 416 32 416h32V224H32C23.5 224 15.38 227.4 9.375 233.4zM464 96H352V32c0-17.62-14.38-32-32-32S288 14.38 288 32v64H176C131.8 96 96 131.8 96 176V448c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V176C544 131.8 508.3 96 464 96zM256 416H192v-32h64V416zM224 296C201.9 296 184 278.1 184 256S201.9 216 224 216S264 233.9 264 256S246.1 296 224 296zM352 416H288v-32h64V416zM448 416h-64v-32h64V416zM416 296c-22.12 0-40-17.88-40-40S393.9 216 416 216S456 233.9 456 256S438.1 296 416 296zM630.6 233.4C624.6 227.4 616.5 224 608 224h-32v192h32c8.5 0 16.62-3.375 22.62-9.375S640 392.5 640 384V256C640 247.5 636.6 239.4 630.6 233.4z\"],\n    \"rocket\": [512, 512, [], \"f135\", \"M156.6 384.9L125.7 353.1C117.2 345.5 114.2 333.1 117.1 321.8C120.1 312.9 124.1 301.3 129.8 288H24C15.38 288 7.414 283.4 3.146 275.9C-1.123 268.4-1.042 259.2 3.357 251.8L55.83 163.3C68.79 141.4 92.33 127.1 117.8 127.1H200C202.4 124 204.8 120.3 207.2 116.7C289.1-4.07 411.1-8.142 483.9 5.275C495.6 7.414 504.6 16.43 506.7 28.06C520.1 100.9 516.1 222.9 395.3 304.8C391.8 307.2 387.1 309.6 384 311.1V394.2C384 419.7 370.6 443.2 348.7 456.2L260.2 508.6C252.8 513 243.6 513.1 236.1 508.9C228.6 504.6 224 496.6 224 488V380.8C209.9 385.6 197.6 389.7 188.3 392.7C177.1 396.3 164.9 393.2 156.6 384.9V384.9zM384 167.1C406.1 167.1 424 150.1 424 127.1C424 105.9 406.1 87.1 384 87.1C361.9 87.1 344 105.9 344 127.1C344 150.1 361.9 167.1 384 167.1z\"],\n    \"rotate\": [512, 512, [128260, \"sync-alt\"], \"f2f1\", \"M449.9 39.96l-48.5 48.53C362.5 53.19 311.4 32 256 32C161.5 32 78.59 92.34 49.58 182.2c-5.438 16.81 3.797 34.88 20.61 40.28c16.97 5.5 34.86-3.812 40.3-20.59C130.9 138.5 189.4 96 256 96c37.96 0 73 14.18 100.2 37.8L311.1 178C295.1 194.8 306.8 223.4 330.4 224h146.9C487.7 223.7 496 215.3 496 204.9V59.04C496 34.99 466.9 22.95 449.9 39.96zM441.8 289.6c-16.94-5.438-34.88 3.812-40.3 20.59C381.1 373.5 322.6 416 256 416c-37.96 0-73-14.18-100.2-37.8L200 334C216.9 317.2 205.2 288.6 181.6 288H34.66C24.32 288.3 16 296.7 16 307.1v145.9c0 24.04 29.07 36.08 46.07 19.07l48.5-48.53C149.5 458.8 200.6 480 255.1 480c94.45 0 177.4-60.34 206.4-150.2C467.9 313 458.6 294.1 441.8 289.6z\"],\n    \"rotate-left\": [512, 512, [\"rotate-back\", \"rotate-backward\", \"undo-alt\"], \"f2ea\", \"M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z\"],\n    \"rotate-right\": [512, 512, [\"redo-alt\", \"rotate-forward\"], \"f2f9\", \"M468.9 32.11c13.87 0 27.18 10.77 27.18 27.04v145.9c0 10.59-8.584 19.17-19.17 19.17h-145.7c-16.28 0-27.06-13.32-27.06-27.2c0-6.634 2.461-13.4 7.96-18.9l45.12-45.14c-28.22-23.14-63.85-36.64-101.3-36.64c-88.09 0-159.8 71.69-159.8 159.8S167.8 415.9 255.9 415.9c73.14 0 89.44-38.31 115.1-38.31c18.48 0 31.97 15.04 31.97 31.96c0 35.04-81.59 70.41-147 70.41c-123.4 0-223.9-100.5-223.9-223.9S132.6 32.44 256 32.44c54.6 0 106.2 20.39 146.4 55.26l47.6-47.63C455.5 34.57 462.3 32.11 468.9 32.11z\"],\n    \"route\": [512, 512, [], \"f4d7\", \"M320 256C302.3 256 288 270.3 288 288C288 305.7 302.3 320 320 320H416C469 320 512 362.1 512 416C512 469 469 512 416 512H139.6C148.3 502.1 158.9 489.4 169.6 475.2C175.9 466.8 182.4 457.6 188.6 448H416C433.7 448 448 433.7 448 416C448 398.3 433.7 384 416 384H320C266.1 384 223.1 341 223.1 288C223.1 234.1 266.1 192 320 192H362.1C340.2 161.5 320 125.4 320 96C320 42.98 362.1 0 416 0C469 0 512 42.98 512 96C512 160 416 256 416 256H320zM416 128C433.7 128 448 113.7 448 96C448 78.33 433.7 64 416 64C398.3 64 384 78.33 384 96C384 113.7 398.3 128 416 128zM118.3 487.8C118.1 488 117.9 488.2 117.7 488.4C113.4 493.4 109.5 497.7 106.3 501.2C105.9 501.6 105.5 502 105.2 502.4C99.5 508.5 96 512 96 512C96 512 0 416 0 352C0 298.1 42.98 255.1 96 255.1C149 255.1 192 298.1 192 352C192 381.4 171.8 417.5 149.9 448C138.1 463.2 127.7 476.9 118.3 487.8L118.3 487.8zM95.1 384C113.7 384 127.1 369.7 127.1 352C127.1 334.3 113.7 320 95.1 320C78.33 320 63.1 334.3 63.1 352C63.1 369.7 78.33 384 95.1 384z\"],\n    \"rss\": [448, 512, [\"feed\"], \"f09e\", \"M25.57 176.1C12.41 175.4 .9117 185.2 .0523 198.4s9.173 24.65 22.39 25.5c120.1 7.875 225.7 112.7 233.6 233.6C256.9 470.3 267.4 480 279.1 480c.5313 0 1.062-.0313 1.594-.0625c13.22-.8438 23.25-12.28 22.39-25.5C294.6 310.3 169.7 185.4 25.57 176.1zM32 32C14.33 32 0 46.31 0 64s14.33 32 32 32c194.1 0 352 157.9 352 352c0 17.69 14.33 32 32 32s32-14.31 32-32C448 218.6 261.4 32 32 32zM63.1 351.9C28.63 351.9 0 380.6 0 416s28.63 64 63.1 64s64.08-28.62 64.08-64S99.37 351.9 63.1 351.9z\"],\n    \"ruble-sign\": [384, 512, [8381, \"rouble\", \"rub\", \"ruble\"], \"f158\", \"M240 32C319.5 32 384 96.47 384 176C384 255.5 319.5 320 240 320H128V352H288C305.7 352 320 366.3 320 384C320 401.7 305.7 416 288 416H128V448C128 465.7 113.7 480 96 480C78.33 480 64 465.7 64 448V416H32C14.33 416 0 401.7 0 384C0 366.3 14.33 352 32 352H64V320H32C14.33 320 0 305.7 0 288C0 270.3 14.33 256 32 256H64V64C64 46.33 78.33 32 96 32H240zM320 176C320 131.8 284.2 96 240 96H128V256H240C284.2 256 320 220.2 320 176z\"],\n    \"ruler\": [512, 512, [128207], \"f545\", \"M177.9 494.1C159.2 512.8 128.8 512.8 110.1 494.1L17.94 401.9C-.8054 383.2-.8054 352.8 17.94 334.1L68.69 283.3L116.7 331.3C122.9 337.6 133.1 337.6 139.3 331.3C145.6 325.1 145.6 314.9 139.3 308.7L91.31 260.7L132.7 219.3L180.7 267.3C186.9 273.6 197.1 273.6 203.3 267.3C209.6 261.1 209.6 250.9 203.3 244.7L155.3 196.7L196.7 155.3L244.7 203.3C250.9 209.6 261.1 209.6 267.3 203.3C273.6 197.1 273.6 186.9 267.3 180.7L219.3 132.7L260.7 91.31L308.7 139.3C314.9 145.6 325.1 145.6 331.3 139.3C337.6 133.1 337.6 122.9 331.3 116.7L283.3 68.69L334.1 17.94C352.8-.8055 383.2-.8055 401.9 17.94L494.1 110.1C512.8 128.8 512.8 159.2 494.1 177.9L177.9 494.1z\"],\n    \"ruler-combined\": [512, 512, [], \"f546\", \"M0 464V48C0 21.49 21.49 0 48 0H144C170.5 0 192 21.49 192 48V96H112C103.2 96 96 103.2 96 112C96 120.8 103.2 128 112 128H192V192H112C103.2 192 96 199.2 96 208C96 216.8 103.2 224 112 224H192V288H112C103.2 288 96 295.2 96 304C96 312.8 103.2 320 112 320H192V400C192 408.8 199.2 416 208 416C216.8 416 224 408.8 224 400V320H288V400C288 408.8 295.2 416 304 416C312.8 416 320 408.8 320 400V320H384V400C384 408.8 391.2 416 400 416C408.8 416 416 408.8 416 400V320H464C490.5 320 512 341.5 512 368V464C512 490.5 490.5 512 464 512H48C23.15 512 2.706 493.1 .2477 468.9C.0838 467.3 0 465.7 0 464z\"],\n    \"ruler-horizontal\": [640, 512, [], \"f547\", \"M0 176C0 149.5 21.49 128 48 128H112V208C112 216.8 119.2 224 128 224C136.8 224 144 216.8 144 208V128H208V208C208 216.8 215.2 224 224 224C232.8 224 240 216.8 240 208V128H304V208C304 216.8 311.2 224 320 224C328.8 224 336 216.8 336 208V128H400V208C400 216.8 407.2 224 416 224C424.8 224 432 216.8 432 208V128H496V208C496 216.8 503.2 224 512 224C520.8 224 528 216.8 528 208V128H592C618.5 128 640 149.5 640 176V336C640 362.5 618.5 384 592 384H48C21.49 384 0 362.5 0 336V176z\"],\n    \"ruler-vertical\": [256, 512, [], \"f548\", \"M0 48C0 21.49 21.49 0 48 0H208C234.5 0 256 21.49 256 48V96H176C167.2 96 160 103.2 160 112C160 120.8 167.2 128 176 128H256V192H176C167.2 192 160 199.2 160 208C160 216.8 167.2 224 176 224H256V288H176C167.2 288 160 295.2 160 304C160 312.8 167.2 320 176 320H256V384H176C167.2 384 160 391.2 160 400C160 408.8 167.2 416 176 416H256V464C256 490.5 234.5 512 208 512H48C21.49 512 0 490.5 0 464V48z\"],\n    \"rupee-sign\": [448, 512, [8360, \"rupee\"], \"f156\", \"M.0003 64C.0003 46.33 14.33 32 32 32H112C191.5 32 256 96.47 256 176C256 234.8 220.8 285.3 170.3 307.7L221.7 436.1C228.3 452.5 220.3 471.1 203.9 477.7C187.5 484.3 168.9 476.3 162.3 459.9L106.3 320H64V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448L.0003 64zM64 256H112C156.2 256 192 220.2 192 176C192 131.8 156.2 96 112 96H64V256zM320.8 282.2C321.3 283.3 322.2 284.8 325 287.1C332.2 292.8 343.7 297.1 362.9 303.8L364.2 304.3C380.3 309.1 402.9 317.9 419.1 332.4C429.5 340.5 437.9 351 443 364.7C448.1 378.4 449.1 393.2 446.8 408.7C442.7 436.8 426.4 457.1 403.1 469.6C381 480.7 354.9 482.1 329.9 477.6L329.7 477.5C320.4 475.8 309.2 471.8 300.5 468.6C294.4 466.3 287.9 463.7 282.7 461.6C280.2 460.6 278.1 459.8 276.4 459.1C259.9 452.7 251.8 434.2 258.2 417.7C264.6 401.2 283.1 393.1 299.6 399.5C302.2 400.5 304.8 401.5 307.5 402.6C312.3 404.5 317.4 406.5 322.9 408.6C331.7 411.9 338.2 413.1 341.6 414.6C357.2 417.5 368.3 415.5 374.5 412.4C379.4 409.9 382.5 406.3 383.5 399.3C384.5 392.4 383.7 388.8 383.1 387.1C382.4 385.4 381.3 383.5 378.6 381.2C371.7 375.4 360.4 370.8 341.6 364.2L338.6 363.1C323.1 357.7 301.6 350.2 285.3 337.2C275.8 329.7 266.1 319.7 261.5 306.3C256.1 292.8 254.9 278.2 257.2 263.1C265.6 205.1 324.2 185.1 374.1 194.2C380.1 195.5 401.4 200 409.5 202.6C426.4 207.8 435.8 225.7 430.6 242.6C425.3 259.5 407.4 268.9 390.5 263.7C385.8 262.2 368.2 258.2 362.6 257.2C347.1 254.5 336.8 256.8 329.1 260.4C323.7 263.7 321.1 267.1 320.5 272.4C319.6 278.4 320.4 281.2 320.8 282.2H320.8z\"],\n    \"rupiah-sign\": [512, 512, [], \"e23d\", \"M.0003 64C.0003 46.33 14.33 32 32 32H112C191.5 32 256 96.47 256 176C256 234.8 220.8 285.3 170.3 307.7L221.7 436.1C228.3 452.5 220.3 471.1 203.9 477.7C187.5 484.3 168.9 476.3 162.3 459.9L106.3 320H64V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448L.0003 64zM64 256H112C156.2 256 192 220.2 192 176C192 131.8 156.2 96 112 96H64V256zM400 160C461.9 160 512 210.1 512 272C512 333.9 461.9 384 400 384H352V480C352 497.7 337.7 512 320 512C302.3 512 288 497.7 288 480V192C288 174.3 302.3 160 320 160H400zM448 272C448 245.5 426.5 224 400 224H352V320H400C426.5 320 448 298.5 448 272z\"],\n    \"s\": [384, 512, [115], \"53\", \"M349.9 379.1c-6.281 36.63-25.89 65.02-56.69 82.11c-24.91 13.83-54.08 18.98-83.73 18.98c-61.86 0-125.8-22.42-157.5-35.38c-16.38-6.672-24.22-25.34-17.55-41.7c6.641-16.36 25.27-24.28 41.7-17.55c77.56 31.64 150.6 39.39 186.1 19.69c13.83-7.672 21.67-19.42 24.69-36.98c7.25-42.31-18.2-56.75-103.7-81.38C112.6 266.6 15.98 238.7 34.11 133.2c5.484-32 23.64-59.36 51.14-77.02c45.59-29.33 115-31.87 206.4-7.688c17.09 4.531 27.27 22.05 22.75 39.13s-22.06 27.23-39.13 22.75C184 86.17 140.4 96.81 119.8 110c-12.55 8.062-20.17 19.5-22.66 34c-7.266 42.31 18.19 56.75 103.7 81.38C271.4 245.7 368 273.5 349.9 379.1z\"],\n    \"sailboat\": [576, 512, [], \"e445\", \"M256 16C256 9.018 260.5 2.841 267.2 .7414C273.9-1.358 281.1 1.105 285.1 6.826L509.1 326.8C512.5 331.7 512.9 338.1 510.2 343.4C507.4 348.7 501.1 352 496 352H272C263.2 352 256 344.8 256 336V16zM212.1 96.54C219.1 98.4 224 104.7 224 112V336C224 344.8 216.8 352 208 352H80C74.3 352 69.02 348.1 66.16 344C63.3 339.1 63.28 333 66.11 328.1L194.1 104.1C197.7 97.76 205.1 94.68 212.1 96.54V96.54zM5.718 404.3C2.848 394.1 10.52 384 21.12 384H554.9C565.5 384 573.2 394.1 570.3 404.3L566.3 418.7C550.7 473.9 500.4 512 443 512H132.1C75.62 512 25.27 473.9 9.747 418.7L5.718 404.3z\"],\n    \"satellite\": [512, 512, [128752], \"f7bf\", \"M502.8 264.1l-80.37-80.37l47.87-47.88c13-13.12 13-34.37 0-47.5l-47.5-47.5c-13.12-13.12-34.38-13.12-47.5 0l-47.88 47.88L247.1 9.25C241 3.375 232.9 0 224.5 0c-8.5 0-16.62 3.375-22.5 9.25l-96.75 96.75c-12.38 12.5-12.38 32.62 0 45.12L185.5 231.5L175.8 241.4c-54-24.5-116.3-22.5-168.5 5.375c-8.498 4.625-9.623 16.38-2.873 23.25l107.6 107.5l-17.88 17.75c-2.625-.75-5-1.625-7.75-1.625c-17.75 0-32 14.38-32 32c0 17.75 14.25 32 32 32c17.62 0 32-14.25 32-32c0-2.75-.875-5.125-1.625-7.75l17.75-17.88l107.6 107.6c6.75 6.75 18.62 5.625 23.12-2.875c27.88-52.25 29.88-114.5 5.375-168.5l10-9.873l80.25 80.36c12.5 12.38 32.62 12.38 44.1 0l96.75-96.75C508.6 304.1 512 295.1 512 287.5C512 279.1 508.6 270.1 502.8 264.1zM219.5 197.4L150.6 128.5l73.87-73.75l68.86 68.88L219.5 197.4zM383.5 361.4L314.6 292.5l73.75-73.88l68.88 68.87L383.5 361.4z\"],\n    \"satellite-dish\": [512, 512, [128225], \"f7c0\", \"M216 104C202.8 104 192 114.8 192 128s10.75 24 24 24c79.41 0 144 64.59 144 144C360 309.3 370.8 320 384 320s24-10.75 24-24C408 190.1 321.9 104 216 104zM224 0C206.3 0 192 14.31 192 32s14.33 32 32 32c123.5 0 224 100.5 224 224c0 17.69 14.33 32 32 32s32-14.31 32-32C512 129.2 382.8 0 224 0zM188.9 346l27.37-27.37c2.625 .625 5.059 1.506 7.809 1.506c17.75 0 31.99-14.26 31.99-32c0-17.62-14.24-32.01-31.99-32.01c-17.62 0-31.99 14.38-31.99 32.01c0 2.875 .8099 5.25 1.56 7.875L166.2 323.4L49.37 206.5c-7.25-7.25-20.12-6-24.1 3c-41.75 77.88-29.88 176.7 35.75 242.4c65.62 65.62 164.6 77.5 242.4 35.75c9.125-5 10.38-17.75 3-25L188.9 346z\"],\n    \"scale-balanced\": [640, 512, [9878, \"balance-scale\"], \"f24e\", \"M554.9 154.5c-17.62-35.25-68.12-35.38-85.87 0c-87 174.3-84.1 165.9-84.1 181.5c0 44.13 57.25 80 128 80s127.1-35.88 127.1-80C639.1 319.9 641.4 327.3 554.9 154.5zM439.1 320l71.96-144l72.17 144H439.1zM256 336c0-16.12 1.375-8.75-85.12-181.5c-17.62-35.25-68.12-35.38-85.87 0c-87 174.3-84.1 165.9-84.1 181.5c0 44.13 57.25 80 127.1 80S256 380.1 256 336zM127.9 176L200.1 320H55.96L127.9 176zM495.1 448h-143.1V153.3C375.5 143 393.1 121.8 398.4 96h113.6c17.67 0 31.1-14.33 31.1-32s-14.33-32-31.1-32h-128.4c-14.62-19.38-37.5-32-63.62-32S270.1 12.62 256.4 32H128C110.3 32 96 46.33 96 64S110.3 96 127.1 96h113.6c5.25 25.75 22.87 47 46.37 57.25V448H144c-26.51 0-48.01 21.49-48.01 48c0 8.836 7.165 16 16 16h416c8.836 0 16-7.164 16-16C544 469.5 522.5 448 495.1 448z\"],\n    \"scale-unbalanced\": [640, 512, [\"balance-scale-left\"], \"f515\", \"M85 250.5c-87 174.2-84.1 165.9-84.1 181.5C.0035 476.1 57.25 512 128 512s128-35.88 128-79.1c0-16.12 1.375-8.752-85.12-181.5C153.3 215.3 102.8 215.1 85 250.5zM55.96 416l71.98-143.1l72.15 143.1H55.96zM554.9 122.5c-17.62-35.25-68.08-35.37-85.83 0c-87 174.2-85.04 165.9-85.04 181.5c0 44.12 57.25 79.1 128 79.1s127.1-35.87 127.1-79.1C639.1 287.9 641.4 295.3 554.9 122.5zM439.1 288l72.04-143.1l72.08 143.1H439.1zM495.1 448h-143.1V153.3c20.83-9.117 36.72-26.93 43.78-48.77l126.3-42.11c16.77-5.594 25.83-23.72 20.23-40.48c-5.578-16.73-23.62-25.86-40.48-20.23l-113.3 37.76c-13.94-23.49-39.29-39.41-68.58-39.41c-44.18 0-79.1 35.82-79.1 80c0 2.961 .5587 5.771 .8712 8.648L117.9 129.7C101.1 135.3 92.05 153.4 97.64 170.1c4.469 13.41 16.95 21.88 30.36 21.88c3.344 0 6.768-.5186 10.13-1.644L273.8 145.1C278.2 148.3 282.1 151.1 288 153.3V496C288 504.8 295.2 512 304 512h223.1c8.838 0 16-7.164 16-15.1C543.1 469.5 522.5 448 495.1 448z\"],\n    \"scale-unbalanced-flip\": [640, 512, [\"balance-scale-right\"], \"f516\", \"M554.9 250.5c-17.62-35.37-68.12-35.25-85.87 0c-86.38 172.7-85.04 165.4-85.04 181.5C383.1 476.1 441.3 512 512 512s127.1-35.88 127.1-79.1C639.1 416.4 642 424.7 554.9 250.5zM439.9 416l72.15-143.1l71.98 143.1H439.9zM512 192c13.41 0 25.89-8.471 30.36-21.88c5.594-16.76-3.469-34.89-20.23-40.48l-122.1-40.1c.3125-2.877 .8712-5.687 .8712-8.648c0-44.18-35.81-80-79.1-80c-29.29 0-54.65 15.92-68.58 39.41l-113.3-37.76C121.3-3.963 103.2 5.162 97.64 21.9C92.05 38.66 101.1 56.78 117.9 62.38l126.3 42.11c7.061 21.84 22.95 39.65 43.78 48.77v294.7H144c-26.51 0-47.1 21.49-47.1 47.1C96 504.8 103.2 512 112 512h223.1c8.836 0 15.1-7.164 15.1-15.1V153.3c5.043-2.207 9.756-4.965 14.19-8.115l135.7 45.23C505.2 191.5 508.7 192 512 192zM256 304c0-15.62 1.1-7.252-85.12-181.5c-17.62-35.37-68.08-35.25-85.83 0c-86.38 172.7-85.04 165.4-85.04 181.5c0 44.12 57.25 79.1 127.1 79.1S256 348.1 256 304zM128 144l72.04 143.1H55.92L128 144z\"],\n    \"school\": [640, 512, [127979], \"f549\", \"M320 128C328.8 128 336 135.2 336 144V160H352C360.8 160 368 167.2 368 176C368 184.8 360.8 192 352 192H320C311.2 192 304 184.8 304 176V144C304 135.2 311.2 128 320 128zM476.8 98.06L602.4 125.1C624.4 130.9 640 150.3 640 172.8V464C640 490.5 618.5 512 592 512H48C21.49 512 0 490.5 0 464V172.8C0 150.3 15.63 130.9 37.59 125.1L163.2 98.06L302.2 5.374C312.1-1.791 327-1.791 337.8 5.374L476.8 98.06zM256 512H384V416C384 380.7 355.3 352 320 352C284.7 352 256 380.7 256 416V512zM96 192C87.16 192 80 199.2 80 208V272C80 280.8 87.16 288 96 288H128C136.8 288 144 280.8 144 272V208C144 199.2 136.8 192 128 192H96zM496 272C496 280.8 503.2 288 512 288H544C552.8 288 560 280.8 560 272V208C560 199.2 552.8 192 544 192H512C503.2 192 496 199.2 496 208V272zM96 320C87.16 320 80 327.2 80 336V400C80 408.8 87.16 416 96 416H128C136.8 416 144 408.8 144 400V336C144 327.2 136.8 320 128 320H96zM496 400C496 408.8 503.2 416 512 416H544C552.8 416 560 408.8 560 400V336C560 327.2 552.8 320 544 320H512C503.2 320 496 327.2 496 336V400zM320 88C271.4 88 232 127.4 232 176C232 224.6 271.4 264 320 264C368.6 264 408 224.6 408 176C408 127.4 368.6 88 320 88z\"],\n    \"scissors\": [512, 512, [9986, 9988, 9984, \"cut\"], \"f0c4\", \"M396.8 51.2C425.1 22.92 470.9 22.92 499.2 51.2C506.3 58.27 506.3 69.73 499.2 76.8L216.5 359.5C221.3 372.1 224 385.7 224 400C224 461.9 173.9 512 112 512C50.14 512 0 461.9 0 400C0 338.1 50.14 287.1 112 287.1C126.3 287.1 139.9 290.7 152.5 295.5L191.1 255.1L152.5 216.5C139.9 221.3 126.3 224 112 224C50.14 224 0 173.9 0 112C0 50.14 50.14 0 112 0C173.9 0 224 50.14 224 112C224 126.3 221.3 139.9 216.5 152.5L255.1 191.1L396.8 51.2zM160 111.1C160 85.49 138.5 63.1 112 63.1C85.49 63.1 64 85.49 64 111.1C64 138.5 85.49 159.1 112 159.1C138.5 159.1 160 138.5 160 111.1zM112 448C138.5 448 160 426.5 160 400C160 373.5 138.5 352 112 352C85.49 352 64 373.5 64 400C64 426.5 85.49 448 112 448zM278.6 342.6L342.6 278.6L499.2 435.2C506.3 442.3 506.3 453.7 499.2 460.8C470.9 489.1 425.1 489.1 396.8 460.8L278.6 342.6z\"],\n    \"screwdriver\": [512, 512, [129691], \"f54a\", \"M128 278.6l-117.1 116.9c-14.5 14.62-14.5 38.29 0 52.79l52.75 52.75c14.5 14.5 38.17 14.5 52.79 0L233.4 384c29.12-29.12 29.12-76.25 0-105.4S157.1 249.5 128 278.6zM447.1 0l-128 96L320 158L237 241.1C243.8 245.4 250.3 250.1 256 256c5.875 5.75 10.62 12.25 14.88 19L353.1 192h61.99l95.1-128L447.1 0z\"],\n    \"screwdriver-wrench\": [512, 512, [\"tools\"], \"f7d9\", \"M331.8 224.1c28.29 0 54.88 10.99 74.86 30.97l19.59 19.59c40.01-17.74 71.25-53.3 81.62-96.65c5.725-23.92 5.34-47.08 .2148-68.4c-2.613-10.88-16.43-14.51-24.34-6.604l-68.9 68.9h-75.6V97.2l68.9-68.9c7.912-7.912 4.275-21.73-6.604-24.34c-21.32-5.125-44.48-5.51-68.4 .2148c-55.3 13.23-98.39 60.22-107.2 116.4C224.5 128.9 224.2 137 224.3 145l82.78 82.86C315.2 225.1 323.5 224.1 331.8 224.1zM384 278.6c-23.16-23.16-57.57-27.57-85.39-13.9L191.1 158L191.1 95.99l-127.1-95.99L0 63.1l96 127.1l62.04 .0077l106.7 106.6c-13.67 27.82-9.251 62.23 13.91 85.39l117 117.1c14.62 14.5 38.21 14.5 52.71-.0016l52.75-52.75c14.5-14.5 14.5-38.08-.0016-52.71L384 278.6zM227.9 307L168.7 247.9l-148.9 148.9c-26.37 26.37-26.37 69.08 0 95.45C32.96 505.4 50.21 512 67.5 512s34.54-6.592 47.72-19.78l119.1-119.1C225.5 352.3 222.6 329.4 227.9 307zM64 472c-13.25 0-24-10.75-24-24c0-13.26 10.75-24 24-24S88 434.7 88 448C88 461.3 77.25 472 64 472z\"],\n    \"scroll\": [576, 512, [128220], \"f70e\", \"M48 32C21.5 32 0 53.5 0 80v64C0 152.9 7.125 160 16 160H96V80C96 53.5 74.5 32 48 32zM256 380.6V320h224V128c0-53-43-96-96-96H111.6C121.8 45.38 128 61.88 128 80V384c0 38.88 34.62 69.63 74.75 63.13C234.3 442 256 412.5 256 380.6zM288 352v32c0 52.88-43 96-96 96h272c61.88 0 112-50.13 112-112c0-8.875-7.125-16-16-16H288z\"],\n    \"scroll-torah\": [640, 512, [\"torah\"], \"f6a0\", \"M320 366.5l17.75-29.62l-35.5 .0011L320 366.5zM382.5 311.5l36.75-.0011l-18.38-30.75L382.5 311.5zM48 0C21.5 0 0 14.38 0 32v448c0 17.62 21.5 32 48 32S96 497.6 96 480V32C96 14.38 74.5 0 48 0zM419.2 200.5L382.4 200.5l18.5 30.79L419.2 200.5zM220.8 311.5l36.87-.0012l-18.5-30.87L220.8 311.5zM287.1 311.5L352.9 311.5l33.25-55.5l-33.25-55.5L287.1 200.5L253.9 256L287.1 311.5zM592 0C565.5 0 544 14.38 544 32v448c0 17.62 21.5 32 48 32s48-14.38 48-32V32C640 14.38 618.5 0 592 0zM128 480h384V32H128V480zM194.8 185.9c3.75-6.625 10.87-10.75 18.5-10.75L272.7 175.1l29.12-48.67C305.6 119.1 312.6 116.1 319.1 116.1c7.375-.125 14.25 3.916 17.1 10.17l29.25 48.87l59.5-.0019c7.625 0 14.62 4.124 18.38 10.75s3.626 14.75-.2493 21.25l-29.25 48.87l29.38 48.1c4 6.5 4.001 14.62 .2506 21.12c-3.75 6.625-10.87 10.75-18.5 10.75l-59.5 .0019l-29.12 48.67c-3.75 6.5-10.62 10.33-18.12 10.46c-7.375 0-14.25-3.874-18-10.25l-29.25-48.87l-59.5 .0019c-7.625 0-14.62-4.124-18.37-10.75S191.3 311.4 195.1 304.9l29.25-48.87L195 207C191.1 200.5 191 192.4 194.8 185.9zM319.1 145.5L302.2 175.1l35.37-.0011L319.1 145.5zM257.5 200.5L220.8 200.5l18.38 30.83L257.5 200.5z\"],\n    \"sd-card\": [384, 512, [], \"f7c2\", \"M320 0H128L0 128v320c0 35.25 28.75 64 64 64h256c35.25 0 64-28.75 64-64V64C384 28.75 355.3 0 320 0zM160 160H112V64H160V160zM240 160H192V64h48V160zM320 160h-48V64H320V160z\"],\n    \"section\": [256, 512, [], \"e447\", \"M224.5 337.4c15.66-14.28 26.09-33.12 29.8-55.82c14.46-88.44-64.67-112.4-117-128.2L124.7 149.5C65.67 131.2 61.11 119.4 64.83 96.79c1.531-9.344 5.715-16.19 13.21-21.56c14.74-10.56 39.94-13.87 69.23-9.029c10.74 1.75 24.36 5.686 41.66 12.03c16.58 6 34.98-2.438 41.04-19.06c6.059-16.59-2.467-34.97-19.05-41.06c-21.39-7.842-38.35-12.62-53.28-15.06c-46.47-7.781-88.1-.5313-116.9 20.19C19.46 38.52 5.965 60.39 1.686 86.48C-5.182 128.6 9.839 156 31.47 174.7C15.87 188.1 5.406 207.8 1.686 230.5C-12.59 317.9 67.36 342.7 105.7 354.6l12.99 3.967c64.71 19.56 76.92 29.09 72.42 56.59c-1.279 7.688-4.84 18.75-21.23 26.16c-15.27 6.906-37.01 8.406-61.4 4.469c-16.74-2.656-37.32-10.5-55.49-17.41l-9.773-3.719c-16.52-6.156-34.95 2.25-41.16 18.75c-6.184 16.56 2.186 34.1 18.74 41.19l9.463 3.594c21.05 8 44.94 17.12 68.02 20.75c12.21 2.031 24.14 3.032 35.54 3.032c23.17 0 44.28-4.157 62.4-12.34c31.95-14.44 52.53-40.75 58.02-74.12C261.1 383.6 246.8 356.3 224.5 337.4zM64.83 240.8c3.303-20.28 21.22-28.1 38.09-31.04c.9258 .2891 15.81 4.852 15.81 4.852c64.71 19.56 76.92 29.09 72.39 56.62c-3.291 20.2-21.12 28.07-37.93 31.04c-5.488-1.746-28.49-8.754-28.49-8.754C65.67 275.2 61.11 263.4 64.83 240.8z\"],\n    \"seedling\": [512, 512, [127793, \"sprout\"], \"f4d8\", \"M64 95.1H0c0 123.8 100.3 224 224 224v128C224 465.6 238.4 480 255.1 480S288 465.6 288 448V320C288 196.3 187.7 95.1 64 95.1zM448 32c-84.25 0-157.4 46.5-195.8 115.3c27.75 30.12 48.25 66.88 59 107.5C424 243.1 512 147.9 512 32H448z\"],\n    \"server\": [512, 512, [], \"f233\", \"M480 288H32c-17.62 0-32 14.38-32 32v128c0 17.62 14.38 32 32 32h448c17.62 0 32-14.38 32-32v-128C512 302.4 497.6 288 480 288zM352 408c-13.25 0-24-10.75-24-24s10.75-24 24-24s24 10.75 24 24S365.3 408 352 408zM416 408c-13.25 0-24-10.75-24-24s10.75-24 24-24s24 10.75 24 24S429.3 408 416 408zM480 32H32C14.38 32 0 46.38 0 64v128c0 17.62 14.38 32 32 32h448c17.62 0 32-14.38 32-32V64C512 46.38 497.6 32 480 32zM352 152c-13.25 0-24-10.75-24-24S338.8 104 352 104S376 114.8 376 128S365.3 152 352 152zM416 152c-13.25 0-24-10.75-24-24S402.8 104 416 104S440 114.8 440 128S429.3 152 416 152z\"],\n    \"shapes\": [512, 512, [\"triangle-circle-square\"], \"f61f\", \"M411.4 175.5C417.4 185.4 417.5 197.7 411.8 207.8C406.2 217.8 395.5 223.1 384 223.1H192C180.5 223.1 169.8 217.8 164.2 207.8C158.5 197.7 158.6 185.4 164.6 175.5L260.6 15.54C266.3 5.897 276.8 0 288 0C299.2 0 309.7 5.898 315.4 15.54L411.4 175.5zM288 312C288 289.9 305.9 272 328 272H472C494.1 272 512 289.9 512 312V456C512 478.1 494.1 496 472 496H328C305.9 496 288 478.1 288 456V312zM0 384C0 313.3 57.31 256 128 256C198.7 256 256 313.3 256 384C256 454.7 198.7 512 128 512C57.31 512 0 454.7 0 384z\"],\n    \"share\": [512, 512, [\"arrow-turn-right\", \"mail-forward\"], \"f064\", \"M503.7 226.2l-176 151.1c-15.38 13.3-39.69 2.545-39.69-18.16V272.1C132.9 274.3 66.06 312.8 111.4 457.8c5.031 16.09-14.41 28.56-28.06 18.62C39.59 444.6 0 383.8 0 322.3c0-152.2 127.4-184.4 288-186.3V56.02c0-20.67 24.28-31.46 39.69-18.16l176 151.1C514.8 199.4 514.8 216.6 503.7 226.2z\"],\n    \"share-from-square\": [576, 512, [61509, \"share-square\"], \"f14d\", \"M568.9 143.5l-150.9-138.2C404.8-6.773 384 3.039 384 21.84V96C241.2 97.63 128 126.1 128 260.6c0 54.3 35.2 108.1 74.08 136.2c12.14 8.781 29.42-2.238 24.94-16.46C186.7 252.2 256 224 384 223.1v74.2c0 18.82 20.84 28.59 34.02 16.51l150.9-138.2C578.4 167.8 578.4 152.2 568.9 143.5zM416 384c-17.67 0-32 14.33-32 32v31.1l-320-.0013V128h32c17.67 0 32-14.32 32-32S113.7 64 96 64H64C28.65 64 0 92.65 0 128v319.1c0 35.34 28.65 64 64 64l320-.0013c35.35 0 64-28.66 64-64V416C448 398.3 433.7 384 416 384z\"],\n    \"share-nodes\": [448, 512, [\"share-alt\"], \"f1e0\", \"M448 127.1C448 181 405 223.1 352 223.1C326.1 223.1 302.6 213.8 285.4 197.1L191.3 244.1C191.8 248 191.1 251.1 191.1 256C191.1 260 191.8 263.1 191.3 267.9L285.4 314.9C302.6 298.2 326.1 288 352 288C405 288 448 330.1 448 384C448 437 405 480 352 480C298.1 480 256 437 256 384C256 379.1 256.2 376 256.7 372.1L162.6 325.1C145.4 341.8 121.9 352 96 352C42.98 352 0 309 0 256C0 202.1 42.98 160 96 160C121.9 160 145.4 170.2 162.6 186.9L256.7 139.9C256.2 135.1 256 132 256 128C256 74.98 298.1 32 352 32C405 32 448 74.98 448 128L448 127.1zM95.1 287.1C113.7 287.1 127.1 273.7 127.1 255.1C127.1 238.3 113.7 223.1 95.1 223.1C78.33 223.1 63.1 238.3 63.1 255.1C63.1 273.7 78.33 287.1 95.1 287.1zM352 95.1C334.3 95.1 320 110.3 320 127.1C320 145.7 334.3 159.1 352 159.1C369.7 159.1 384 145.7 384 127.1C384 110.3 369.7 95.1 352 95.1zM352 416C369.7 416 384 401.7 384 384C384 366.3 369.7 352 352 352C334.3 352 320 366.3 320 384C320 401.7 334.3 416 352 416z\"],\n    \"shekel-sign\": [448, 512, [8362, \"ils\", \"shekel\", \"sheqel\", \"sheqel-sign\"], \"f20b\", \"M192 32C262.7 32 320 89.31 320 160V320C320 337.7 305.7 352 288 352C270.3 352 256 337.7 256 320V160C256 124.7 227.3 96 192 96H64V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448V64C0 46.33 14.33 32 32 32H192zM160 480C142.3 480 128 465.7 128 448V192C128 174.3 142.3 160 160 160C177.7 160 192 174.3 192 192V416H320C355.3 416 384 387.3 384 352V64C384 46.33 398.3 32 416 32C433.7 32 448 46.33 448 64V352C448 422.7 390.7 480 320 480H160z\"],\n    \"shield\": [512, 512, [128737], \"f132\", \"M466.5 83.71l-192-80C269.6 1.67 261.3 0 256 0C250.7 0 242.5 1.67 237.6 3.702l-192 80C27.7 91.1 16 108.6 16 127.1c0 257.2 189.2 384 239.1 384c51.1 0 240-128.2 240-384C496 108.6 484.3 91.1 466.5 83.71zM256 446.5l.0234-381.1c.0059-.0234 0 0 0 0l175.9 73.17C427.8 319.7 319 417.1 256 446.5z\"],\n    \"shield-blank\": [512, 512, [\"shield-alt\"], \"f3ed\", \"M496 127.1C496 381.3 309.1 512 255.1 512C204.9 512 16 385.3 16 127.1c0-19.41 11.7-36.89 29.61-44.28l191.1-80.01c4.906-2.031 13.13-3.701 18.44-3.701c5.281 0 13.58 1.67 18.46 3.701l192 80.01C484.3 91.1 496 108.6 496 127.1z\"],\n    \"shield-virus\": [512, 512, [], \"e06c\", \"M288 255.1c-8.836 0-16 7.162-16 16c0 8.836 7.164 15.1 16 15.1s16-7.163 16-15.1C304 263.2 296.8 255.1 288 255.1zM224 191.1c-8.836 0-16 7.162-16 16c0 8.836 7.164 16 15.1 16s16-7.164 16-16C240 199.2 232.8 191.1 224 191.1zM466.5 83.68l-192-80.01C269.6 1.641 261.3 0 256.1 0C250.7 0 242.5 1.641 237.6 3.672l-192 80.01C27.69 91.07 16 108.6 16 127.1C16 385.2 205.2 512 255.9 512c52.02 0 240.1-128.2 240.1-384C496 108.6 484.3 91.07 466.5 83.68zM384 255.1h-12.12c-19.29 0-32.06 15.78-32.06 32.23c0 7.862 2.918 15.88 9.436 22.4l8.576 8.576c3.125 3.125 4.688 7.218 4.688 11.31c0 8.527-6.865 15.1-16 15.1c-4.094 0-8.188-1.562-11.31-4.688l-8.576-8.576c-6.519-6.519-14.53-9.436-22.4-9.436c-16.45 0-32.23 12.77-32.23 32.06v12.12c0 8.844-7.156 16-16 16s-16-7.156-16-16v-12.12c0-19.29-15.78-32.06-32.23-32.06c-7.862 0-15.87 2.917-22.39 9.436l-8.576 8.576c-3.125 3.125-7.219 4.688-11.31 4.688c-9.139 0-16-7.473-16-15.1c0-4.094 1.562-8.187 4.688-11.31l8.576-8.576c6.519-6.519 9.436-14.53 9.436-22.4c0-16.45-12.77-32.23-32.06-32.23H128c-8.844 0-16-7.156-16-16s7.156-16 16-16h12.12c19.29 0 32.06-15.78 32.06-32.23c0-7.862-2.918-15.88-9.436-22.4L154.2 160.8C151 157.7 149.5 153.6 149.5 149.5c0-8.527 6.865-15.1 16-15.1c4.094 0 8.188 1.562 11.31 4.688L185.4 146.7C191.9 153.3 199.9 156.2 207.8 156.2c16.45 0 32.23-12.77 32.23-32.07V111.1c0-8.844 7.156-16 16-16s16 7.156 16 16v12.12c0 19.29 15.78 32.07 32.23 32.07c7.862 0 15.88-2.917 22.4-9.436l8.576-8.577c3.125-3.125 7.219-4.688 11.31-4.688c9.139 0 16 7.473 16 15.1c0 4.094-1.562 8.187-4.688 11.31l-8.576 8.577c-6.519 6.519-9.436 14.53-9.436 22.4c0 16.45 12.77 32.23 32.06 32.23h12.12c8.844 0 16 7.156 16 16S392.8 255.1 384 255.1z\"],\n    \"ship\": [576, 512, [128674], \"f21a\", \"M192 32C192 14.33 206.3 0 224 0H352C369.7 0 384 14.33 384 32V64H432C458.5 64 480 85.49 480 112V240L524.4 254.8C547.6 262.5 553.9 292.3 535.9 308.7L434.9 401.4C418.7 410.7 400.2 416.5 384 416.5C364.4 416.5 343.2 408.8 324.8 396.1C302.8 380.6 273.3 380.6 251.2 396.1C234 407.9 213.2 416.5 192 416.5C175.8 416.5 157.3 410.7 141.1 401.3L40.09 308.7C22.1 292.3 28.45 262.5 51.59 254.8L96 239.1V111.1C96 85.49 117.5 63.1 144 63.1H192V32zM160 218.7L267.8 182.7C280.9 178.4 295.1 178.4 308.2 182.7L416 218.7V128H160V218.7zM384 448C410.9 448 439.4 437.2 461.4 421.9L461.5 421.9C473.4 413.4 489.5 414.1 500.7 423.6C515 435.5 533.2 444.6 551.3 448.8C568.5 452.8 579.2 470.1 575.2 487.3C571.2 504.5 553.1 515.2 536.7 511.2C512.2 505.4 491.9 494.6 478.5 486.2C449.5 501.7 417 512 384 512C352.1 512 323.4 502.1 303.6 493.1C297.7 490.5 292.5 487.8 288 485.4C283.5 487.8 278.3 490.5 272.4 493.1C252.6 502.1 223.9 512 192 512C158.1 512 126.5 501.7 97.5 486.2C84.12 494.6 63.79 505.4 39.27 511.2C22.06 515.2 4.853 504.5 .8422 487.3C-3.169 470.1 7.532 452.8 24.74 448.8C42.84 444.6 60.96 435.5 75.31 423.6C86.46 414.1 102.6 413.4 114.5 421.9L114.6 421.9C136.7 437.2 165.1 448 192 448C219.5 448 247 437.4 269.5 421.9C280.6 414 295.4 414 306.5 421.9C328.1 437.4 356.5 448 384 448H384z\"],\n    \"shirt\": [640, 512, [128085, \"t-shirt\", \"tshirt\"], \"f553\", \"M640 162.8c0 6.917-2.293 13.88-7.012 19.7l-49.96 61.63c-6.32 7.796-15.62 11.85-25.01 11.85c-7.01 0-14.07-2.262-19.97-6.919L480 203.3V464c0 26.51-21.49 48-48 48H208C181.5 512 160 490.5 160 464V203.3L101.1 249.1C96.05 253.7 88.99 255.1 81.98 255.1c-9.388 0-18.69-4.057-25.01-11.85L7.012 182.5C2.292 176.7-.0003 169.7-.0003 162.8c0-9.262 4.111-18.44 12.01-24.68l135-106.6C159.8 21.49 175.7 16 191.1 16H225.6C233.3 61.36 272.5 96 320 96s86.73-34.64 94.39-80h33.6c16.35 0 32.22 5.49 44.99 15.57l135 106.6C635.9 144.4 640 153.6 640 162.8z\"],\n    \"shoe-prints\": [640, 512, [], \"f54b\", \"M192 159.1L224 159.1V32L192 32c-35.38 0-64 28.62-64 63.1S156.6 159.1 192 159.1zM0 415.1c0 35.37 28.62 64.01 64 64.01l32-.0103v-127.1l-32-.0005C28.62 351.1 0 380.6 0 415.1zM337.5 287.1c-35 0-76.25 13.12-104.8 31.1C208 336.4 188.3 351.1 128 351.1v128l57.5 15.98c26.25 7.25 53 13.13 80.38 15.01c32.63 2.375 65.63 .743 97.5-6.132C472.9 481.2 512 429.2 512 383.1C512 319.1 427.9 287.1 337.5 287.1zM491.4 7.252c-31.88-6.875-64.88-8.625-97.5-6.25C366.5 2.877 339.8 8.752 313.5 16L256 32V159.1c60.25 0 80 15.62 104.8 31.1c28.5 18.87 69.75 31.1 104.8 31.1C555.9 223.1 640 191.1 640 127.1C640 82.75 600.9 30.75 491.4 7.252z\"],\n    \"shop\": [640, 512, [\"store-alt\"], \"f54f\", \"M0 155.2C0 147.9 2.153 140.8 6.188 134.7L81.75 21.37C90.65 8.021 105.6 0 121.7 0H518.3C534.4 0 549.3 8.021 558.2 21.37L633.8 134.7C637.8 140.8 640 147.9 640 155.2C640 175.5 623.5 192 603.2 192H36.84C16.5 192 .0003 175.5 .0003 155.2H0zM64 224H128V384H320V224H384V464C384 490.5 362.5 512 336 512H112C85.49 512 64 490.5 64 464V224zM512 224H576V480C576 497.7 561.7 512 544 512C526.3 512 512 497.7 512 480V224z\"],\n    \"shop-slash\": [640, 512, [\"store-alt-slash\"], \"e070\", \"M74.13 32.8L81.75 21.38C90.65 8.022 105.6 .001 121.7 .001H518.3C534.4 .001 549.3 8.022 558.2 21.38L633.8 134.7C637.8 140.8 640 147.9 640 155.2C640 175.5 623.5 192 603.2 192H277.3L320 225.5V224H384V275.7L512 375.1V224H576V426.2L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L74.13 32.8zM0 155.2C0 147.9 2.153 140.8 6.188 134.7L20.98 112.5L121.8 192H36.84C16.5 192 .0003 175.5 .0003 155.2H0zM320 384V348.1L384 398.5V464C384 490.5 362.5 512 336 512H112C85.49 512 64 490.5 64 464V224H128V384H320z\"],\n    \"shower\": [512, 512, [128703], \"f2cc\", \"M288 384c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C320 398.3 305.7 384 288 384zM416 256c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C448 270.3 433.7 256 416 256zM480 192c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C512 206.3 497.7 192 480 192zM288 320c0-17.67-14.33-32-32-32s-32 14.33-32 32c0 17.67 14.33 32 32 32S288 337.7 288 320zM320 224c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C352 238.3 337.7 224 320 224zM384 224c17.67 0 32-14.33 32-32c0-17.67-14.33-32-32-32s-32 14.33-32 32C352 209.7 366.3 224 384 224zM352 320c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C384 334.3 369.7 320 352 320zM347.3 91.31l-11.31-11.31c-6.248-6.248-16.38-6.248-22.63 0l-6.631 6.631c-35.15-26.29-81.81-29.16-119.6-8.779L170.5 61.25C132.2 22.95 63.65 18.33 21.98 71.16C7.027 90.11 0 114.3 0 138.4V464C0 472.8 7.164 480 16 480h32C56.84 480 64 472.8 64 464V131.9c0-19.78 16.09-35.87 35.88-35.87c9.438 0 18.69 3.828 25.38 10.5l16.61 16.61C121.5 160.9 124.3 207.6 150.6 242.7L144 249.4c-6.248 6.248-6.248 16.38 0 22.63l11.31 11.31c6.248 6.25 16.38 6.25 22.63 0l169.4-169.4C353.6 107.7 353.6 97.56 347.3 91.31z\"],\n    \"shrimp\": [512, 512, [129424], \"e448\", \"M288 320V128H64C46.34 128 32 113.6 32 96s14.34-32 32-32h368c8.844 0 16-7.156 16-16s-7.156-16-16-16H64C28.72 32 0 60.7 0 96s28.72 64 64 64h2.879c15.26 90.77 94.01 160 189.1 160H288zM192 216c-13.25 0-24-10.75-24-24c0-13.26 10.75-24 24-24s24 10.74 24 24C216 205.3 205.3 216 192 216zM225.6 399.4c-4.75 12.36 1.406 26.25 13.78 31.02l5.688 2.188C233.3 434.1 224 443.8 224 456c0 13.25 10.75 24 24 24h72v-70.03l-63.38-24.38C244.3 380.9 230.4 386.1 225.6 399.4zM511.2 286.7c-.5488-5.754-2.201-11.1-3.314-16.65l-124.6 90.62c.3711 2.404 .7383 4.814 .7383 7.322c0 1.836-.3379 3.576-.5391 5.357l90.15 40.06C500.8 379.2 515.8 334.8 511.2 286.7zM352 413.1v66.08c37.23-3.363 71.04-18.3 97.94-41.21l-80.34-35.71C364.7 407.1 358.6 410.7 352 413.1zM497.9 237.7C470.1 172.4 402.8 128 328.4 128h-8.436v192h16c12.28 0 23.36 4.748 31.85 12.33L497.9 237.7z\"],\n    \"shuffle\": [512, 512, [128256, \"random\"], \"f074\", \"M424.1 287c-15.13-15.12-40.1-4.426-40.1 16.97V352H336L153.6 108.8C147.6 100.8 138.1 96 128 96H32C14.31 96 0 110.3 0 128s14.31 32 32 32h80l182.4 243.2C300.4 411.3 309.9 416 320 416h63.97v47.94c0 21.39 25.86 32.12 40.99 17l79.1-79.98c9.387-9.387 9.387-24.59 0-33.97L424.1 287zM336 160h47.97v48.03c0 21.39 25.87 32.09 40.1 16.97l79.1-79.98c9.387-9.391 9.385-24.59-.0013-33.97l-79.1-79.98c-15.13-15.12-40.99-4.391-40.99 17V96H320c-10.06 0-19.56 4.75-25.59 12.81L254 162.7L293.1 216L336 160zM112 352H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h96c10.06 0 19.56-4.75 25.59-12.81l40.4-53.87L154 296L112 352z\"],\n    \"shuttle-space\": [640, 512, [\"space-shuttle\"], \"f197\", \"M129.1 480H128V384H352L245.2 448.1C210.4 468.1 170.6 480 129.1 480zM352 128H128V32H129.1C170.6 32 210.4 43.03 245.2 63.92L352 128zM104 128C130.2 128 153.4 140.6 168 160H456C525.3 160 591 182.7 635.2 241.6C641.6 250.1 641.6 261.9 635.2 270.4C591 329.3 525.3 352 456 352H168C153.4 371.4 130.2 384 104 384H96V480H80C53.49 480 32 458.5 32 432V384H40C17.91 384 0 366.1 0 344V168C0 145.9 17.89 128 39.96 128H32V80C32 53.49 53.49 32 80 32H96V128H104zM476.4 208C473.1 208 472 209.1 472 212.4V299.6C472 302 473.1 304 476.4 304C496.1 304 512 288.1 512 268.4V243.6C512 223.9 496.1 208 476.4 208z\"],\n    \"sign-hanging\": [512, 512, [\"sign\"], \"f4d9\", \"M96 0C113.7 0 128 14.33 128 32V64H480C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H128V480C128 497.7 113.7 512 96 512C78.33 512 64 497.7 64 480V128H32C14.33 128 0 113.7 0 96C0 78.33 14.33 64 32 64H64V32C64 14.33 78.33 0 96 0zM448 160C465.7 160 480 174.3 480 192V352C480 369.7 465.7 384 448 384H192C174.3 384 160 369.7 160 352V192C160 174.3 174.3 160 192 160H448z\"],\n    \"signal\": [576, 512, [128246, \"signal-5\", \"signal-perfect\"], \"f012\", \"M544 0c-17.67 0-32 14.33-32 31.1V480C512 497.7 526.3 512 544 512s32-14.33 32-31.1V31.1C576 14.33 561.7 0 544 0zM160 288C142.3 288 128 302.3 128 319.1v160C128 497.7 142.3 512 160 512s32-14.33 32-31.1V319.1C192 302.3 177.7 288 160 288zM32 384C14.33 384 0 398.3 0 415.1v64C0 497.7 14.33 512 31.1 512S64 497.7 64 480V415.1C64 398.3 49.67 384 32 384zM416 96c-17.67 0-32 14.33-32 31.1V480C384 497.7 398.3 512 416 512s32-14.33 32-31.1V127.1C448 110.3 433.7 96 416 96zM288 192C270.3 192 256 206.3 256 223.1v256C256 497.7 270.3 512 288 512s32-14.33 32-31.1V223.1C320 206.3 305.7 192 288 192z\"],\n    \"signature\": [640, 512, [], \"f5b7\", \"M192 160C192 177.7 177.7 192 160 192C142.3 192 128 177.7 128 160V128C128 74.98 170.1 32 224 32C277 32 320 74.98 320 128V135.8C320 156.6 318.8 177.4 316.4 198.1L438.8 161.3C450.2 157.9 462.6 161.1 470.1 169.7C479.3 178.3 482.1 190.8 478.4 202.1L460.4 255.1H544C561.7 255.1 576 270.3 576 287.1C576 305.7 561.7 319.1 544 319.1H416C405.7 319.1 396.1 315.1 390 306.7C384 298.4 382.4 287.6 385.6 277.9L398.1 240.4L303.7 268.7C291.9 321.5 272.2 372.2 245.3 419.2L231.4 443.5C218.5 466.1 194.5 480 168.5 480C128.5 480 95.1 447.5 95.1 407.5V335.6C95.1 293.2 123.8 255.8 164.4 243.7L248.8 218.3C253.6 191.1 255.1 163.5 255.1 135.8V128C255.1 110.3 241.7 96 223.1 96C206.3 96 191.1 110.3 191.1 128L192 160zM160 335.6V407.5C160 412.2 163.8 416 168.5 416C171.5 416 174.4 414.4 175.9 411.7L189.8 387.4C207.3 356.6 221.4 324.1 231.8 290.3L182.8 304.1C169.3 309 160 321.5 160 335.6V335.6zM24 368H64V407.5C64 410.4 64.11 413.2 64.34 416H24C10.75 416 0 405.3 0 392C0 378.7 10.75 368 24 368zM616 416H283.5C291.7 400.3 299.2 384.3 305.9 368H616C629.3 368 640 378.7 640 392C640 405.3 629.3 416 616 416z\"],\n    \"signs-post\": [512, 512, [\"map-signs\"], \"f277\", \"M223.1 32C223.1 14.33 238.3 0 255.1 0C273.7 0 288 14.33 288 32H441.4C445.6 32 449.7 33.69 452.7 36.69L500.7 84.69C506.9 90.93 506.9 101.1 500.7 107.3L452.7 155.3C449.7 158.3 445.6 160 441.4 160H63.1C46.33 160 31.1 145.7 31.1 128V64C31.1 46.33 46.33 32 63.1 32L223.1 32zM480 320C480 337.7 465.7 352 448 352H70.63C66.38 352 62.31 350.3 59.31 347.3L11.31 299.3C5.065 293.1 5.065 282.9 11.31 276.7L59.31 228.7C62.31 225.7 66.38 223.1 70.63 223.1H223.1V191.1H288V223.1H448C465.7 223.1 480 238.3 480 255.1V320zM255.1 512C238.3 512 223.1 497.7 223.1 480V384H288V480C288 497.7 273.7 512 255.1 512z\"],\n    \"sim-card\": [384, 512, [], \"f7c4\", \"M0 64v384c0 35.25 28.75 64 64 64h256c35.25 0 64-28.75 64-64V128l-128-128H64C28.75 0 0 28.75 0 64zM224 256H160V192h64V256zM320 256h-64V192h32c17.75 0 32 14.25 32 32V256zM256 384h64v32c0 17.75-14.25 32-32 32h-32V384zM160 384h64v64H160V384zM64 384h64v64H96c-17.75 0-32-14.25-32-32V384zM64 288h256v64H64V288zM64 224c0-17.75 14.25-32 32-32h32v64H64V224z\"],\n    \"sink\": [512, 512, [], \"e06d\", \"M496 288h-96V256l64 .0002c8.838 0 16-7.164 16-15.1v-15.1c0-8.838-7.162-16-16-16L384 208c-17.67 0-32 14.33-32 32v47.1l-64 .0005v-192c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-16c0-59.2-53.85-106-115.1-94.14C255.3 10.71 224 53.36 224 99.79v188.2L160 288V240c0-17.67-14.33-32-32-32L48 208c-8.836 0-16 7.162-16 16v15.1C32 248.8 39.16 256 48 256l64-.0002V288h-96c-8.836 0-16 7.164-16 16v32c0 8.836 7.164 16 16 16h480c8.836 0 16-7.164 16-16V304C512 295.2 504.8 288 496 288zM32 416c0 53.02 42.98 96 96 96h256c53.02 0 96-42.98 96-96v-32H32V416z\"],\n    \"sitemap\": [576, 512, [], \"f0e8\", \"M208 80C208 53.49 229.5 32 256 32H320C346.5 32 368 53.49 368 80V144C368 170.5 346.5 192 320 192H312V232H464C494.9 232 520 257.1 520 288V320H528C554.5 320 576 341.5 576 368V432C576 458.5 554.5 480 528 480H464C437.5 480 416 458.5 416 432V368C416 341.5 437.5 320 464 320H472V288C472 283.6 468.4 280 464 280H312V320H320C346.5 320 368 341.5 368 368V432C368 458.5 346.5 480 320 480H256C229.5 480 208 458.5 208 432V368C208 341.5 229.5 320 256 320H264V280H112C107.6 280 104 283.6 104 288V320H112C138.5 320 160 341.5 160 368V432C160 458.5 138.5 480 112 480H48C21.49 480 0 458.5 0 432V368C0 341.5 21.49 320 48 320H56V288C56 257.1 81.07 232 112 232H264V192H256C229.5 192 208 170.5 208 144V80z\"],\n    \"skull\": [512, 512, [128128], \"f54c\", \"M416 400V464C416 490.5 394.5 512 368 512H320V464C320 455.2 312.8 448 304 448C295.2 448 288 455.2 288 464V512H224V464C224 455.2 216.8 448 208 448C199.2 448 192 455.2 192 464V512H144C117.5 512 96 490.5 96 464V400C96 399.6 96 399.3 96.01 398.9C37.48 357.8 0 294.7 0 224C0 100.3 114.6 0 256 0C397.4 0 512 100.3 512 224C512 294.7 474.5 357.8 415.1 398.9C415.1 399.3 416 399.6 416 400V400zM160 192C124.7 192 96 220.7 96 256C96 291.3 124.7 320 160 320C195.3 320 224 291.3 224 256C224 220.7 195.3 192 160 192zM352 320C387.3 320 416 291.3 416 256C416 220.7 387.3 192 352 192C316.7 192 288 220.7 288 256C288 291.3 316.7 320 352 320z\"],\n    \"skull-crossbones\": [448, 512, [128369, 9760], \"f714\", \"M368 128C368 172.4 342.6 211.5 304 234.4V256C304 273.7 289.7 288 272 288H176C158.3 288 144 273.7 144 256V234.4C105.4 211.5 80 172.4 80 128C80 57.31 144.5 0 224 0C303.5 0 368 57.31 368 128V128zM168 176C185.7 176 200 161.7 200 144C200 126.3 185.7 112 168 112C150.3 112 136 126.3 136 144C136 161.7 150.3 176 168 176zM280 112C262.3 112 248 126.3 248 144C248 161.7 262.3 176 280 176C297.7 176 312 161.7 312 144C312 126.3 297.7 112 280 112zM3.379 273.7C11.28 257.9 30.5 251.5 46.31 259.4L224 348.2L401.7 259.4C417.5 251.5 436.7 257.9 444.6 273.7C452.5 289.5 446.1 308.7 430.3 316.6L295.6 384L430.3 451.4C446.1 459.3 452.5 478.5 444.6 494.3C436.7 510.1 417.5 516.5 401.7 508.6L224 419.8L46.31 508.6C30.5 516.5 11.28 510.1 3.379 494.3C-4.525 478.5 1.882 459.3 17.69 451.4L152.4 384L17.69 316.6C1.882 308.7-4.525 289.5 3.379 273.7V273.7z\"],\n    \"slash\": [640, 512, [], \"f715\", \"M5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196V9.196z\"],\n    \"sleigh\": [640, 512, [], \"f7cc\", \"M63.1 32C66.31 32 68.56 32.24 70.74 32.71C124.1 37.61 174.2 67.59 203.4 114.3L207.7 121.1C247.7 185.1 317.8 224 393.3 224C423.5 224 448 199.5 448 169.3V128C448 110.3 462.3 96 480 96H544C561.7 96 576 110.3 576 128C576 145.7 561.7 160 544 160V256C544 309 501 352 448 352V384H384V352H192V384H128V352C74.98 352 32 309 32 256V96C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H63.1zM640 392C640 440.6 600.6 480 552 480H63.1C46.33 480 31.1 465.7 31.1 448C31.1 430.3 46.33 416 63.1 416H552C565.3 416 576 405.3 576 392V384C576 366.3 590.3 352 608 352C625.7 352 640 366.3 640 384V392z\"],\n    \"sliders\": [512, 512, [\"sliders-h\"], \"f1de\", \"M0 416C0 398.3 14.33 384 32 384H86.66C99 355.7 127.2 336 160 336C192.8 336 220.1 355.7 233.3 384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H233.3C220.1 476.3 192.8 496 160 496C127.2 496 99 476.3 86.66 448H32C14.33 448 0 433.7 0 416V416zM192 416C192 398.3 177.7 384 160 384C142.3 384 128 398.3 128 416C128 433.7 142.3 448 160 448C177.7 448 192 433.7 192 416zM352 176C384.8 176 412.1 195.7 425.3 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H425.3C412.1 316.3 384.8 336 352 336C319.2 336 291 316.3 278.7 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H278.7C291 195.7 319.2 176 352 176zM384 256C384 238.3 369.7 224 352 224C334.3 224 320 238.3 320 256C320 273.7 334.3 288 352 288C369.7 288 384 273.7 384 256zM480 64C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H265.3C252.1 156.3 224.8 176 192 176C159.2 176 131 156.3 118.7 128H32C14.33 128 0 113.7 0 96C0 78.33 14.33 64 32 64H118.7C131 35.75 159.2 16 192 16C224.8 16 252.1 35.75 265.3 64H480zM160 96C160 113.7 174.3 128 192 128C209.7 128 224 113.7 224 96C224 78.33 209.7 64 192 64C174.3 64 160 78.33 160 96z\"],\n    \"smog\": [640, 512, [], \"f75f\", \"M144 288h156.1C322.6 307.8 351.8 320 384 320s61.25-12.25 83.88-32H528C589.9 288 640 237.9 640 176s-50.13-112-112-112c-18 0-34.75 4.625-49.75 12.12C453.1 30.1 406.8 0 352 0c-41 0-77.75 17.25-104 44.75C221.8 17.25 185 0 144 0c-79.5 0-144 64.5-144 144S64.5 288 144 288zM136 464H23.1C10.8 464 0 474.8 0 487.1S10.8 512 23.1 512H136C149.2 512 160 501.2 160 488S149.2 464 136 464zM616 368h-528C74.8 368 64 378.8 64 391.1S74.8 416 87.1 416h528c13.2 0 24-10.8 24-23.1S629.2 368 616 368zM552 464H231.1C218.8 464 208 474.8 208 487.1S218.8 512 231.1 512H552c13.2 0 24-10.8 24-23.1S565.2 464 552 464z\"],\n    \"smoking\": [640, 512, [128684], \"f48d\", \"M432 352h-384C21.5 352 0 373.5 0 400v64C0 490.5 21.5 512 48 512h384c8.75 0 16-7.25 16-16v-128C448 359.3 440.8 352 432 352zM400 464H224v-64h176V464zM536 352h-48C483.6 352 480 355.6 480 360v144c0 4.375 3.625 8 8 8h48c4.375 0 8-3.625 8-8v-144C544 355.6 540.4 352 536 352zM632 352h-48C579.6 352 576 355.6 576 360v144c0 4.375 3.625 8 8 8h48c4.375 0 8-3.625 8-8v-144C640 355.6 636.4 352 632 352zM553.3 87.13C547.6 83.25 544 77.12 544 70.25V8C544 3.625 540.4 0 536 0h-48C483.6 0 480 3.625 480 8v62.25c0 22 10.25 43.5 28.62 55.5C550.8 153 576 199.5 576 249.8V280C576 284.4 579.6 288 584 288h48C636.4 288 640 284.4 640 280V249.8C640 184.3 607.6 123.5 553.3 87.13zM487.8 141.6C463.8 125 448 99.25 448 70.25V8C448 3.625 444.4 0 440 0h-48C387.6 0 384 3.625 384 8v66.38C384 118.1 408.6 156 444.3 181.1C466.8 196.8 480 222.3 480 249.8V280C480 284.4 483.6 288 488 288h48C540.4 288 544 284.4 544 280V249.8C544 206.4 523 166.3 487.8 141.6z\"],\n    \"snowflake\": [512, 512, [10054, 10052], \"f2dc\", \"M475.6 384.1C469.7 394.3 458.9 400 447.9 400c-5.488 0-11.04-1.406-16.13-4.375l-25.09-14.64l5.379 20.29c3.393 12.81-4.256 25.97-17.08 29.34c-2.064 .5625-4.129 .8125-6.164 .8125c-10.63 0-20.36-7.094-23.21-17.84l-17.74-66.92L288 311.7l.0002 70.5l48.38 48.88c9.338 9.438 9.244 24.62-.1875 33.94C331.5 469.7 325.4 472 319.3 472c-6.193 0-12.39-2.375-17.08-7.125l-14.22-14.37L288 480c0 17.69-14.34 32-32.03 32s-32.03-14.31-32.03-32l-.0002-29.5l-14.22 14.37c-9.322 9.438-24.53 9.5-33.97 .1875c-9.432-9.312-9.525-24.5-.1875-33.94l48.38-48.88L223.1 311.7l-59.87 34.93l-17.74 66.92c-2.848 10.75-12.58 17.84-23.21 17.84c-2.035 0-4.1-.25-6.164-.8125c-12.82-3.375-20.47-16.53-17.08-29.34l5.379-20.29l-25.09 14.64C75.11 398.6 69.56 400 64.07 400c-11.01 0-21.74-5.688-27.69-15.88c-8.932-15.25-3.785-34.84 11.5-43.75l25.96-15.15l-20.33-5.508C40.7 316.3 33.15 303.1 36.62 290.3S53.23 270 66.09 273.4L132 291.3L192.5 256L132 220.7L66.09 238.6c-2.111 .5625-4.225 .8438-6.305 .8438c-10.57 0-20.27-7.031-23.16-17.72C33.15 208.9 40.7 195.8 53.51 192.3l20.33-5.508L47.88 171.6c-15.28-8.906-20.43-28.5-11.5-43.75c8.885-15.28 28.5-20.44 43.81-11.5l25.09 14.64L99.9 110.7C96.51 97.91 104.2 84.75 116.1 81.38C129.9 77.91 142.1 85.63 146.4 98.41l17.74 66.92L223.1 200.3l-.0002-70.5L175.6 80.88C166.3 71.44 166.3 56.25 175.8 46.94C185.2 37.59 200.4 37.72 209.8 47.13l14.22 14.37L223.1 32c0-17.69 14.34-32 32.03-32s32.03 14.31 32.03 32l.0002 29.5l14.22-14.37c9.307-9.406 24.51-9.531 33.97-.1875c9.432 9.312 9.525 24.5 .1875 33.94l-48.38 48.88L288 200.3l59.87-34.93l17.74-66.92c3.395-12.78 16.56-20.5 29.38-17.03c12.82 3.375 20.47 16.53 17.08 29.34l-5.379 20.29l25.09-14.64c15.28-8.906 34.91-3.75 43.81 11.5c8.932 15.25 3.785 34.84-11.5 43.75l-25.96 15.15l20.33 5.508c12.81 3.469 20.37 16.66 16.89 29.44c-2.895 10.69-12.59 17.72-23.16 17.72c-2.08 0-4.193-.2813-6.305-.8438L379.1 220.7L319.5 256l60.46 35.28l65.95-17.87C458.8 270 471.9 277.5 475.4 290.3c3.473 12.78-4.082 25.97-16.89 29.44l-20.33 5.508l25.96 15.15C479.4 349.3 484.5 368.9 475.6 384.1z\"],\n    \"snowman\": [512, 512, [9924, 9731], \"f7d0\", \"M510.9 152.3l-5.875-14.5c-3.25-8-12.62-11.88-20.75-8.625l-28.25 11.5v-29C455.1 103 448.7 96 439.1 96h-16c-8.75 0-16 7-16 15.62V158.5c0 .5 .25 1 .25 1.5l-48.98 20.6c-5.291-12.57-12.98-23.81-22.24-33.55c9.35-14.81 14.98-32.23 14.98-51.04C351.1 42.98 309 0 255.1 0S160 42.98 160 95.1c0 18.81 5.626 36.23 14.98 51.04C165.7 156.8 158.1 168.1 152.8 180.7L103.8 160c0-.5 .25-1 .25-1.5V111.6C104 103 96.76 96 88.01 96h-16c-8.75 0-16 7-16 15.62v29l-28.25-11.5c-8.125-3.25-17.5 .625-20.75 8.625l-5.875 14.5C-2.119 160.4 1.881 169.5 10.01 172.6L144.4 228.4C144.9 240.8 147.3 252.7 151.5 263.7c-33.78 29.34-55.53 72.04-55.53 120.3c0 52.59 25.71 98.84 64.88 128h190.2c39.17-29.17 64.88-75.42 64.88-128c0-48.25-21.76-90.95-55.53-120.3c4.195-11.03 6.599-22.89 7.091-35.27l134.4-55.8C510.1 169.5 514.1 160.4 510.9 152.3zM224 95.1c-8.75 0-15.1-7.25-15.1-15.1s7.25-15.1 15.1-15.1s15.1 7.25 15.1 15.1S232.8 95.1 224 95.1zM256 367.1c-8.75 0-15.1-7.25-15.1-15.1S247.3 335.1 256 335.1s15.1 7.25 15.1 15.1S264.8 367.1 256 367.1zM256 303.1c-8.75 0-15.1-7.25-15.1-15.1S247.3 271.1 256 271.1s15.1 7.25 15.1 15.1S264.8 303.1 256 303.1zM256 239.1c-8.75 0-15.1-7.25-15.1-15.1S247.3 207.1 256 207.1s15.1 7.25 15.1 15.1S264.8 239.1 256 239.1zM256 152c0 0-15.1-23.25-15.1-32S247.3 104 256 104s15.1 7.25 15.1 16S256 152 256 152zM287.1 95.1c-8.75 0-15.1-7.25-15.1-15.1s7.25-15.1 15.1-15.1s15.1 7.25 15.1 15.1S296.7 95.1 287.1 95.1z\"],\n    \"snowplow\": [640, 512, [], \"f7d2\", \"M144 400C144 413.3 133.3 424 120 424C106.7 424 96 413.3 96 400C96 386.7 106.7 376 120 376C133.3 376 144 386.7 144 400zM336 400C336 386.7 346.7 376 360 376C373.3 376 384 386.7 384 400C384 413.3 373.3 424 360 424C346.7 424 336 413.3 336 400zM304 400C304 413.3 293.3 424 280 424C266.7 424 256 413.3 256 400C256 386.7 266.7 376 280 376C293.3 376 304 386.7 304 400zM176 400C176 386.7 186.7 376 200 376C213.3 376 224 386.7 224 400C224 413.3 213.3 424 200 424C186.7 424 176 413.3 176 400zM447.4 249.6C447.8 251.9 448.1 254.3 448 256.7V288H512V235.2C512 220.7 516.9 206.6 526 195.2L583 124C594.1 110.2 614.2 107.1 627.1 119C641.8 130.1 644 150.2 632.1 163.1L576 235.2V402.7L630.6 457.4C643.1 469.9 643.1 490.1 630.6 502.6C618.1 515.1 597.9 515.1 585.4 502.6L530.7 448C518.7 435.1 512 419.7 512 402.7V352H469.2C476.1 366.5 480 382.8 480 400C480 461.9 429.9 512 368 512H112C50.14 512 0 461.9 0 400C0 355.3 26.16 316.8 64 298.8V192C64 174.3 78.33 160 96 160H128V48C128 21.49 149.5 0 176 0H298.9C324.5 0 347.6 15.26 357.7 38.79L445.1 242.7C446.1 244.9 446.9 247.2 447.4 249.6H447.4zM298.9 64H192V160L256 224H367.5L298.9 64zM368 352H112C85.49 352 64 373.5 64 400C64 426.5 85.49 448 112 448H368C394.5 448 416 426.5 416 400C416 373.5 394.5 352 368 352z\"],\n    \"soap\": [512, 512, [129532], \"e06e\", \"M320 256c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64s-64 28.65-64 64C256 227.3 284.7 256 320 256zM160 288c-35.35 0-64 28.65-64 64c0 35.35 28.65 64 64 64h192c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64H160zM384 64c17.67 0 32-14.33 32-32c0-17.67-14.33-32-32-32s-32 14.33-32 32C352 49.67 366.3 64 384 64zM208 96C234.5 96 256 74.51 256 48S234.5 0 208 0S160 21.49 160 48S181.5 96 208 96zM416 192c0 27.82-12.02 52.68-30.94 70.21C421.7 275.7 448 310.7 448 352c0 53.02-42.98 96-96 96H160c-53.02 0-96-42.98-96-96s42.98-96 96-96h88.91C233.6 238.1 224 216.7 224 192H96C42.98 192 0 234.1 0 288v128c0 53.02 42.98 96 96 96h320c53.02 0 96-42.98 96-96V288C512 234.1 469 192 416 192z\"],\n    \"socks\": [576, 512, [129510], \"f696\", \"M319.1 32c0-11 3.125-21.25 8-30.38C325.4 .8721 322.9 0 319.1 0H192C174.4 0 159.1 14.38 159.1 32l.0042 32h160L319.1 32zM246.6 310.1l73.36-55l.0026-159.1h-160l-.0042 175.1l-86.64 64.61c-39.38 29.5-53.86 84.4-29.24 127c18.25 31.62 51.1 48.36 83.97 48.36c20 0 40.26-6.225 57.51-19.22l21.87-16.38C177.6 421 193.9 350.6 246.6 310.1zM351.1 271.1l-86.13 64.61c-39.37 29.5-53.86 84.4-29.23 127C254.9 495.3 287.2 512 320.1 512c20 0 40.25-6.25 57.5-19.25l115.2-86.38C525 382.3 544 344.2 544 303.1v-207.1h-192L351.1 271.1zM512 0h-128c-17.62 0-32 14.38-32 32l-.0003 32H544V32C544 14.38 529.6 0 512 0z\"],\n    \"solar-panel\": [640, 512, [], \"f5ba\", \"M575.4 25.72C572.4 10.78 559.2 0 543.1 0H96c-15.25 0-28.39 10.78-31.38 25.72l-63.1 320c-1.891 9.406 .5469 19.16 6.625 26.56S22.41 384 32 384h255.1v64.25H239.8c-26.26 0-47.75 21.49-47.75 47.75c0 8.844 7.168 16.01 16.01 16l223.1-.1667c8.828-.0098 15.99-7.17 15.99-16C447.1 469.5 426.6 448 400.2 448h-48.28v-64h256c9.594 0 18.67-4.312 24.75-11.72s8.516-17.16 6.625-26.56L575.4 25.72zM517.8 64l19.2 96h-97.98L429.2 64H517.8zM380.1 64l9.617 96H250l9.873-96H380.1zM210.8 64L201 160H103.1l19.18-96H210.8zM71.16 320l22.28-112h102.7L184.6 320H71.16zM233.8 320l11.37-112h149.7L406.2 320H233.8zM455.4 320l-11.5-112h102.7l22.28 112H455.4z\"],\n    \"sort\": [320, 512, [\"unsorted\"], \"f0dc\", \"M27.66 224h264.7c24.6 0 36.89-29.78 19.54-47.12l-132.3-136.8c-5.406-5.406-12.47-8.107-19.53-8.107c-7.055 0-14.09 2.701-19.45 8.107L8.119 176.9C-9.229 194.2 3.055 224 27.66 224zM292.3 288H27.66c-24.6 0-36.89 29.77-19.54 47.12l132.5 136.8C145.9 477.3 152.1 480 160 480c7.053 0 14.12-2.703 19.53-8.109l132.3-136.8C329.2 317.8 316.9 288 292.3 288z\"],\n    \"sort-down\": [320, 512, [\"sort-desc\"], \"f0dd\", \"M311.9 335.1l-132.4 136.8C174.1 477.3 167.1 480 160 480c-7.055 0-14.12-2.702-19.47-8.109l-132.4-136.8C-9.229 317.8 3.055 288 27.66 288h264.7C316.9 288 329.2 317.8 311.9 335.1z\"],\n    \"sort-up\": [320, 512, [\"sort-asc\"], \"f0de\", \"M27.66 224h264.7c24.6 0 36.89-29.78 19.54-47.12l-132.3-136.8c-5.406-5.406-12.47-8.107-19.53-8.107c-7.055 0-14.09 2.701-19.45 8.107L8.119 176.9C-9.229 194.2 3.055 224 27.66 224z\"],\n    \"spa\": [576, 512, [], \"f5bb\", \"M568.3 192c-29 .125-135 6.124-213.9 82.1C321.2 304.7 301 338.3 288 369.9c-13-31.63-33.25-65.25-66.38-94.87C142.8 198.2 36.75 192.2 7.75 192C3.375 192 0 195.4 0 199.9c.25 27.88 7.125 126.2 88.75 199.3C172.8 481 256 479.1 288 479.1s115.2 1.025 199.3-80.85C568.9 326 575.8 227.7 576 199.9C576 195.4 572.6 192 568.3 192zM288 302.6c12.75-18.87 27.62-35.75 44.13-50.5c19-18.62 39.5-33.37 60.25-45.25c-16.5-70.5-51.75-133-96.75-172.3c-4.125-3.5-11-3.5-15.12 0c-45 39.25-80.25 101.6-96.75 172.1c20.37 11.75 40.5 26.12 59.25 44.37C260 266.4 275.1 283.7 288 302.6z\"],\n    \"spaghetti-monster-flying\": [640, 512, [\"pastafarianism\"], \"f67b\", \"M624.5 347.7c-32.63-12.5-57.38 4.241-75.38 16.49c-17 11.5-23.25 14.37-31.38 11.37c-8.125-3.125-10.88-9.358-15.88-29.36c-3.375-13.12-7.5-29.47-18-42.72c2.25-3 4.5-5.875 6.375-8.625C500.5 304.5 513.8 312 532 312c33.1 0 50.87-25.75 61.1-42.88C604.6 253 609 248 616 248C629.3 248 640 237.3 640 224s-10.75-24-24-24c-34 0-50.88 25.75-62 42.88C543.4 259 539 264 532 264c-17.25 0-37.5-61.38-97.25-101.9L452 127.6C485.4 125.5 512 97.97 512 63.97C512 28.6 483.4 0 448 0s-64 28.6-64 63.97c0 13 4 25.15 10.62 35.28L376.5 135.5C359.5 130.9 340.9 128 320 128S280.5 130.9 263.5 135.5L245.4 99.25C252 89.13 256 76.97 256 63.97C256 28.6 227.4 0 192 0S128 28.6 128 63.97C128 97.97 154.5 125.5 188 127.6l17.25 34.5C145.6 202.5 125.1 264 108 264c-7 0-11.31-5-21.94-21.12C74.94 225.8 57.1 200 24 200C10.75 200 0 210.8 0 224s10.75 24 24 24c7 0 11.37 5 21.1 21.12C57.12 286.3 73.1 312 108 312c18.25 0 31.5-7.5 41.75-17.12C151.6 297.6 153.9 300.5 156.1 303.5c-10.5 13.25-14.62 29.59-18 42.72c-5 20-7.75 26.23-15.88 29.36c-8.125 3-14.37 .1314-31.37-11.37c-18.12-12.25-42.75-28.87-75.38-16.49c-12.38 4.75-18.62 18.61-13.88 30.98c4.625 12.38 18.62 18.62 30.88 13.87C40.75 389.6 46.88 392.4 64 403.9c13.5 9.125 30.75 20.86 52.38 20.86c7.125 0 14.88-1.248 23-4.373c32.63-12.5 40-41.34 45.25-62.46c2.25-8.75 4-14.49 6-18.86c16.62 13.62 37 25.86 61.63 34.23C242.3 410.3 220.1 464 192 464c-13.25 0-24 10.74-24 23.99S178.8 512 192 512c66.75 0 97-88.55 107.4-129.1C306.1 383.6 312.9 384 320 384s13.88-.4706 20.62-1.096C351 423.4 381.3 512 448 512c13.25 0 24-10.74 24-23.99S461.3 464 448 464c-28 0-50.25-53.74-60.25-90.74c24.75-8.375 45-20.56 61.63-34.19c2 4.375 3.75 10.11 6 18.86c5.375 21.12 12.62 49.96 45.25 62.46c8.25 3.125 15.88 4.373 23 4.373c21.62 0 38.83-11.74 52.46-20.86c17-11.5 23.29-14.37 31.42-11.37c12.38 4.75 26.25-1.492 30.88-13.87C643.1 366.3 637 352.5 624.5 347.7zM192 79.97c-8.875 0-16-7.125-16-16S183.1 47.98 192 47.98s16 7.118 16 15.99S200.9 79.97 192 79.97zM448 47.98c8.875 0 16 7.118 16 15.99s-7.125 16-16 16s-16-7.125-16-16S439.1 47.98 448 47.98z\"],\n    \"spell-check\": [576, 512, [], \"f891\", \"M566.6 265.4c-12.5-12.5-32.75-12.5-45.25 0L352 434.8l-73.38-73.38c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l96 96c6.25 6.25 14.44 9.368 22.62 9.368s16.38-3.118 22.63-9.368l192-192C579.1 298.1 579.1 277.9 566.6 265.4zM221.5 211.7l-80-192C136.6 7.796 124.9 .0147 112 .0147S87.44 7.796 82.47 19.7l-80 192C-4.328 228 3.375 246.8 19.69 253.5c16.36 6.812 35.06-.9375 41.84-17.22l5.131-12.31h90.68l5.131 12.31c5.109 12.28 17.02 19.69 29.55 19.69c4.094 0 8.266-.7812 12.3-2.469C220.6 246.8 228.3 228 221.5 211.7zM93.33 160L112 115.2l18.67 44.81H93.33zM288 256h80c44.11 0 80-35.87 80-79.1c0-23.15-10.03-43.85-25.79-58.47C428.3 106.3 432 93.65 432 80.01c0-44.13-35.89-80-79.1-80L288 .0147c-17.67 0-32 14.31-32 31.1v192C256 241.7 270.3 256 288 256zM320 64.01h32c8.828 0 16 7.188 16 16s-7.172 16-16 16h-32V64.01zM320 160h48c8.828 0 16 7.188 16 16s-7.172 16-16 16H320V160z\"],\n    \"spider\": [576, 512, [128375], \"f717\", \"M563.3 401.6c2.608 8.443-2.149 17.4-10.62 19.1l-15.35 4.709c-8.48 2.6-17.47-2.139-20.08-10.59L493.2 338l-79.79-31.8l53.47 62.15c5.08 5.904 6.972 13.89 5.08 21.44l-28.23 110.1c-2.151 8.57-10.87 13.78-19.47 11.64l-15.58-3.873c-8.609-2.141-13.84-10.83-11.69-19.4l25.2-98.02l-38.51-44.77c.1529 2.205 .6627 4.307 .6627 6.549c0 53.02-43.15 96-96.37 96S191.6 405 191.6 352c0-2.242 .5117-4.34 .6627-6.543l-38.51 44.76l25.2 98.02c2.151 8.574-3.084 17.26-11.69 19.4l-15.58 3.873c-8.603 2.141-17.32-3.072-19.47-11.64l-28.23-110.1c-1.894-7.543 0-15.53 5.08-21.44l53.47-62.15l-79.79 31.8l-24.01 77.74c-2.608 8.447-11.6 13.19-20.08 10.59l-15.35-4.709c-8.478-2.6-13.23-11.55-10.63-19.1l27.4-88.69c2.143-6.939 7.323-12.54 14.09-15.24L158.9 256l-104.7-41.73C47.43 211.6 42.26 205.1 40.11 199.1L12.72 110.4c-2.608-8.443 2.149-17.4 10.62-19.1l15.35-4.709c8.48-2.6 17.47 2.139 20.08 10.59l24.01 77.74l79.79 31.8L109.1 143.6C104 137.7 102.1 129.7 104 122.2l28.23-110.1c2.151-8.57 10.87-13.78 19.47-11.64l15.58 3.873C175.9 6.494 181.1 15.18 178.1 23.76L153.8 121.8L207.7 184.4l.1542-24.44C206.1 123.4 228.9 91.77 261.4 80.43c5.141-1.793 10.5 2.215 10.5 7.641V112h32.12V88.09c0-5.443 5.394-9.443 10.55-7.641C345.9 91.39 368.3 121 368.3 155.9c0 1.393-.1786 2.689-.2492 4.064L368.3 184.4l53.91-62.66l-25.2-98.02c-2.151-8.574 3.084-17.26 11.69-19.4l15.58-3.873c8.603-2.141 17.32 3.072 19.47 11.64l28.23 110.1c1.894 7.543 0 15.53-5.08 21.44l-53.47 62.15l79.79-31.8l24.01-77.74c2.608-8.447 11.6-13.19 20.08-10.59l15.35 4.709c8.478 2.6 13.23 11.55 10.63 19.1l-27.4 88.69c-2.143 6.939-7.323 12.54-14.09 15.24L417.1 256l104.7 41.73c6.754 2.691 11.92 8.283 14.07 15.21L563.3 401.6z\"],\n    \"spinner\": [512, 512, [], \"f110\", \"M304 48C304 74.51 282.5 96 256 96C229.5 96 208 74.51 208 48C208 21.49 229.5 0 256 0C282.5 0 304 21.49 304 48zM304 464C304 490.5 282.5 512 256 512C229.5 512 208 490.5 208 464C208 437.5 229.5 416 256 416C282.5 416 304 437.5 304 464zM0 256C0 229.5 21.49 208 48 208C74.51 208 96 229.5 96 256C96 282.5 74.51 304 48 304C21.49 304 0 282.5 0 256zM512 256C512 282.5 490.5 304 464 304C437.5 304 416 282.5 416 256C416 229.5 437.5 208 464 208C490.5 208 512 229.5 512 256zM74.98 437C56.23 418.3 56.23 387.9 74.98 369.1C93.73 350.4 124.1 350.4 142.9 369.1C161.6 387.9 161.6 418.3 142.9 437C124.1 455.8 93.73 455.8 74.98 437V437zM142.9 142.9C124.1 161.6 93.73 161.6 74.98 142.9C56.24 124.1 56.24 93.73 74.98 74.98C93.73 56.23 124.1 56.23 142.9 74.98C161.6 93.73 161.6 124.1 142.9 142.9zM369.1 369.1C387.9 350.4 418.3 350.4 437 369.1C455.8 387.9 455.8 418.3 437 437C418.3 455.8 387.9 455.8 369.1 437C350.4 418.3 350.4 387.9 369.1 369.1V369.1z\"],\n    \"splotch\": [512, 512, [], \"f5bc\", \"M349.3 47.38L367.9 116.1C374.6 142.1 393.2 162.3 417.6 171.2L475.8 192.4C497.5 200.3 512 221 512 244.2C512 261.8 503.6 278.4 489.4 288.8L406.9 348.1C393.3 358.9 385.7 374.1 386.7 391.8L389.8 442.4C392.1 480.1 362.2 511.9 324.4 511.9C308.8 511.9 293.8 506.4 281.1 496.4L236.1 458.2C221.1 444.7 200.9 437.3 180 437.3H171.6C165.1 437.3 160.4 437.8 154.8 438.9L87.81 451.9C63.82 456.6 39.53 445.5 27.41 424.3C17.39 406.7 17.39 385.2 27.41 367.7L55.11 319.2C60.99 308.9 64.09 297.3 64.09 285.4C64.09 272.3 60.33 259.6 53.27 248.6L8.796 179.4C-6.738 155.2-1.267 123.2 21.41 105.6C32.12 97.25 45.52 93.13 59.07 94.01L130.8 98.66C159.8 100.5 187.1 87.91 205.9 64.93L237.3 24.66C249.4 9.133 267.9 .0566 287.6 .0566C316.5 .0566 341.8 19.47 349.3 47.38V47.38z\"],\n    \"spoon\": [512, 512, [61873, 129348, \"utensil-spoon\"], \"f2e5\", \"M449.5 242.2C436.4 257.8 419.8 270 400.1 277.8C382.2 285.6 361.7 288.8 341.4 287C326.2 284.5 311.8 278.4 299.5 269.1L68.29 500.3C60.79 507.8 50.61 512 40 512C29.39 512 19.22 507.8 11.71 500.3C4.211 492.8-.0039 482.6-.0039 472C-.0039 461.4 4.211 451.2 11.71 443.7L243 212.5C233.7 200.2 227.6 185.8 225.1 170.6C223.3 150.3 226.5 129.9 234.3 111C242.1 92.22 254.3 75.56 269.9 62.47C337.8-5.437 433.1-20.28 482.7 29.35C532.3 78.95 517.4 174.2 449.5 242.2z\"],\n    \"spray-can\": [512, 512, [], \"f5bd\", \"M192 0C209.7 0 224 14.33 224 32V128H96V32C96 14.33 110.3 0 128 0H192zM0 256C0 202.1 42.98 160 96 160H224C277 160 320 202.1 320 256V464C320 490.5 298.5 512 272 512H48C21.49 512 0 490.5 0 464V256zM160 256C115.8 256 80 291.8 80 336C80 380.2 115.8 416 160 416C204.2 416 240 380.2 240 336C240 291.8 204.2 256 160 256zM320 64C320 81.67 305.7 96 288 96C270.3 96 256 81.67 256 64C256 46.33 270.3 32 288 32C305.7 32 320 46.33 320 64zM352 64C352 46.33 366.3 32 384 32C401.7 32 416 46.33 416 64C416 81.67 401.7 96 384 96C366.3 96 352 81.67 352 64zM512 64C512 81.67 497.7 96 480 96C462.3 96 448 81.67 448 64C448 46.33 462.3 32 480 32C497.7 32 512 46.33 512 64zM448 160C448 142.3 462.3 128 480 128C497.7 128 512 142.3 512 160C512 177.7 497.7 192 480 192C462.3 192 448 177.7 448 160zM512 256C512 273.7 497.7 288 480 288C462.3 288 448 273.7 448 256C448 238.3 462.3 224 480 224C497.7 224 512 238.3 512 256zM352 160C352 142.3 366.3 128 384 128C401.7 128 416 142.3 416 160C416 177.7 401.7 192 384 192C366.3 192 352 177.7 352 160z\"],\n    \"spray-can-sparkles\": [512, 512, [\"air-freshener\"], \"f5d0\", \"M96 32C96 14.33 110.3 0 128 0H192C209.7 0 224 14.33 224 32V128H96V32zM224 160C277 160 320 202.1 320 256V464C320 490.5 298.5 512 272 512H48C21.49 512 0 490.5 0 464V256C0 202.1 42.98 160 96 160H224zM160 416C204.2 416 240 380.2 240 336C240 291.8 204.2 256 160 256C115.8 256 80 291.8 80 336C80 380.2 115.8 416 160 416zM384 48C384 49.36 383 50.97 381.8 51.58L352 64L339.6 93.78C338.1 95 337.4 96 336 96C334.6 96 333 95 332.4 93.78L320 64L290.2 51.58C288.1 50.97 288 49.36 288 48C288 46.62 288.1 45.03 290.2 44.42L320 32L332.4 2.219C333 1 334.6 0 336 0C337.4 0 338.1 1 339.6 2.219L352 32L381.8 44.42C383 45.03 384 46.62 384 48zM460.4 93.78L448 64L418.2 51.58C416.1 50.97 416 49.36 416 48C416 46.62 416.1 45.03 418.2 44.42L448 32L460.4 2.219C461 1 462.6 0 464 0C465.4 0 466.1 1 467.6 2.219L480 32L509.8 44.42C511 45.03 512 46.62 512 48C512 49.36 511 50.97 509.8 51.58L480 64L467.6 93.78C466.1 95 465.4 96 464 96C462.6 96 461 95 460.4 93.78zM467.6 194.2L480 224L509.8 236.4C511 237 512 238.6 512 240C512 241.4 511 242.1 509.8 243.6L480 256L467.6 285.8C466.1 287 465.4 288 464 288C462.6 288 461 287 460.4 285.8L448 256L418.2 243.6C416.1 242.1 416 241.4 416 240C416 238.6 416.1 237 418.2 236.4L448 224L460.4 194.2C461 193 462.6 192 464 192C465.4 192 466.1 193 467.6 194.2zM448 144C448 145.4 447 146.1 445.8 147.6L416 160L403.6 189.8C402.1 191 401.4 192 400 192C398.6 192 397 191 396.4 189.8L384 160L354.2 147.6C352.1 146.1 352 145.4 352 144C352 142.6 352.1 141 354.2 140.4L384 128L396.4 98.22C397 97 398.6 96 400 96C401.4 96 402.1 97 403.6 98.22L416 128L445.8 140.4C447 141 448 142.6 448 144z\"],\n    \"square\": [448, 512, [9723, 9724, 61590, 9632], \"f0c8\", \"M0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96z\"],\n    \"square-arrow-up-right\": [448, 512, [\"external-link-square\"], \"f14c\", \"M384 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM344 312c0 17.69-14.31 32-32 32s-32-14.31-32-32V245.3l-121.4 121.4C152.4 372.9 144.2 376 136 376s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L234.8 200H168c-17.69 0-32-14.31-32-32s14.31-32 32-32h144c17.69 0 32 14.31 32 32V312z\"],\n    \"square-caret-down\": [448, 512, [\"caret-square-down\"], \"f150\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM345.6 232.3l-104 112C237 349.2 230.7 352 224 352s-13.03-2.781-17.59-7.656l-104-112c-6.5-7-8.219-17.19-4.407-25.94C101.8 197.7 110.5 192 120 192h208c9.531 0 18.19 5.656 21.1 14.41C353.8 215.2 352.1 225.3 345.6 232.3z\"],\n    \"square-caret-left\": [448, 512, [\"caret-square-left\"], \"f191\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM288 360c0 9.531-5.656 18.19-14.41 22C270.5 383.3 267.3 384 264 384c-5.938 0-11.81-2.219-16.34-6.406l-112-104C130.8 269 128 262.7 128 256s2.781-13.03 7.656-17.59l112-104c7.031-6.469 17.22-8.156 25.94-4.406C282.3 133.8 288 142.5 288 152V360z\"],\n    \"square-caret-right\": [448, 512, [\"caret-square-right\"], \"f152\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM312.3 273.6l-112 104C195.8 381.8 189.9 384 184 384c-3.25 0-6.5-.6562-9.594-2C165.7 378.2 160 369.5 160 360v-208c0-9.531 5.656-18.19 14.41-22c8.75-3.75 18.94-2.062 25.94 4.406l112 104C317.2 242.1 320 249.3 320 256S317.2 269 312.3 273.6z\"],\n    \"square-caret-up\": [448, 512, [\"caret-square-up\"], \"f151\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM349.1 305.6C346.2 314.3 337.5 320 328 320h-208c-9.531 0-18.19-5.656-22-14.41C94.19 296.8 95.91 286.7 102.4 279.7l104-112c9.125-9.75 26.06-9.75 35.19 0l104 112C352.1 286.7 353.8 296.8 349.1 305.6z\"],\n    \"square-check\": [448, 512, [9989, 61510, 9745, \"check-square\"], \"f14a\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM339.8 211.8C350.7 200.9 350.7 183.1 339.8 172.2C328.9 161.3 311.1 161.3 300.2 172.2L192 280.4L147.8 236.2C136.9 225.3 119.1 225.3 108.2 236.2C97.27 247.1 97.27 264.9 108.2 275.8L172.2 339.8C183.1 350.7 200.9 350.7 211.8 339.8L339.8 211.8z\"],\n    \"square-envelope\": [448, 512, [\"envelope-square\"], \"f199\", \"M384 32H64C28.63 32 0 60.63 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.63 419.4 32 384 32zM384 336c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32V225.9l138.5 69.27C209.3 298.5 216.6 300.2 224 300.2s14.75-1.688 21.47-5.047L384 225.9V336zM384 190.1l-152.8 76.42c-4.5 2.25-9.812 2.25-14.31 0L64 190.1V176c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32V190.1z\"],\n    \"square-full\": [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11036, 11035], \"f45c\", \"M0 0H512V512H0V0z\"],\n    \"square-h\": [448, 512, [\"h-square\"], \"f0fd\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96C448 60.65 419.3 32 384 32zM336 360c0 13.25-10.75 24-24 24S288 373.3 288 360v-80H160v80C160 373.3 149.3 384 136 384S112 373.3 112 360v-208C112 138.8 122.8 128 136 128S160 138.8 160 152v80h128v-80C288 138.8 298.8 128 312 128s24 10.75 24 24V360z\"],\n    \"square-minus\": [448, 512, [61767, \"minus-square\"], \"f146\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM136 232C122.7 232 112 242.7 112 256C112 269.3 122.7 280 136 280H312C325.3 280 336 269.3 336 256C336 242.7 325.3 232 312 232H136z\"],\n    \"square-parking\": [448, 512, [127359, \"parking\"], \"f540\", \"M192 256V192H240C257.7 192 272 206.3 272 224C272 241.7 257.7 256 240 256H192zM384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM336 224C336 170.1 293 128 240 128H168C145.9 128 128 145.9 128 168V352C128 369.7 142.3 384 160 384C177.7 384 192 369.7 192 352V320H240C293 320 336 277 336 224z\"],\n    \"square-pen\": [448, 512, [\"pen-square\", \"pencil-square\"], \"f14b\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM325.8 139.7C310.1 124.1 284.8 124.1 269.2 139.7L247.8 161.1L318.7 232.1L340.1 210.7C355.8 195 355.8 169.7 340.1 154.1L325.8 139.7zM111.5 303.8L96.48 363.1C95.11 369.4 96.71 375.2 100.7 379.2C104.7 383.1 110.4 384.7 115.9 383.4L176 368.3C181.6 366.9 186.8 364 190.9 359.9L296.1 254.7L225.1 183.8L119.9 288.1C115.8 293.1 112.9 298.2 111.5 303.8z\"],\n    \"square-phone\": [448, 512, [\"phone-square\"], \"f098\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96C448 60.65 419.3 32 384 32zM351.6 321.5l-11.62 50.39c-1.633 7.125-7.9 12.11-15.24 12.11c-126.1 0-228.7-102.6-228.7-228.8c0-7.328 4.984-13.59 12.11-15.22l50.38-11.63c7.344-1.703 14.88 2.109 17.93 9.062l23.27 54.28c2.719 6.391 .8828 13.83-4.492 18.22L168.3 232c16.99 34.61 45.14 62.75 79.77 79.75l22.02-26.91c4.344-5.391 11.85-7.25 18.24-4.484l54.24 23.25C349.5 306.6 353.3 314.2 351.6 321.5z\"],\n    \"square-phone-flip\": [448, 512, [\"phone-square-alt\"], \"f87b\", \"M0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64H64C28.65 32 0 60.65 0 96zM105.5 303.6l54.24-23.25c6.391-2.766 13.9-.9062 18.24 4.484l22.02 26.91c34.63-17 62.77-45.14 79.77-79.75l-26.91-22.05c-5.375-4.391-7.211-11.83-4.492-18.22l23.27-54.28c3.047-6.953 10.59-10.77 17.93-9.062l50.38 11.63c7.125 1.625 12.11 7.891 12.11 15.22c0 126.1-102.6 228.8-228.7 228.8c-7.336 0-13.6-4.984-15.24-12.11l-11.62-50.39C94.71 314.2 98.5 306.6 105.5 303.6z\"],\n    \"square-plus\": [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM224 368C237.3 368 248 357.3 248 344V280H312C325.3 280 336 269.3 336 256C336 242.7 325.3 232 312 232H248V168C248 154.7 237.3 144 224 144C210.7 144 200 154.7 200 168V232H136C122.7 232 112 242.7 112 256C112 269.3 122.7 280 136 280H200V344C200 357.3 210.7 368 224 368z\"],\n    \"square-poll-horizontal\": [448, 512, [\"poll-h\"], \"f682\", \"M448 416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416zM256 160C256 142.3 241.7 128 224 128H128C110.3 128 96 142.3 96 160C96 177.7 110.3 192 128 192H224C241.7 192 256 177.7 256 160zM128 224C110.3 224 96 238.3 96 256C96 273.7 110.3 288 128 288H320C337.7 288 352 273.7 352 256C352 238.3 337.7 224 320 224H128zM192 352C192 334.3 177.7 320 160 320H128C110.3 320 96 334.3 96 352C96 369.7 110.3 384 128 384H160C177.7 384 192 369.7 192 352z\"],\n    \"square-poll-vertical\": [448, 512, [\"poll\"], \"f681\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM128 224C110.3 224 96 238.3 96 256V352C96 369.7 110.3 384 128 384C145.7 384 160 369.7 160 352V256C160 238.3 145.7 224 128 224zM192 352C192 369.7 206.3 384 224 384C241.7 384 256 369.7 256 352V160C256 142.3 241.7 128 224 128C206.3 128 192 142.3 192 160V352zM320 288C302.3 288 288 302.3 288 320V352C288 369.7 302.3 384 320 384C337.7 384 352 369.7 352 352V320C352 302.3 337.7 288 320 288z\"],\n    \"square-root-variable\": [576, 512, [\"square-root-alt\"], \"f698\", \"M576 32.01c0-17.69-14.33-31.1-32-31.1l-224-.0049c-14.69 0-27.48 10-31.05 24.25L197.9 388.3L124.6 241.7C119.2 230.9 108.1 224 96 224L32 224c-17.67 0-32 14.31-32 31.1s14.33 32 32 32h44.22l103.2 206.3c5.469 10.91 16.6 17.68 28.61 17.68c1.172 0 2.323-.0576 3.495-.1826c13.31-1.469 24.31-11.06 27.56-24.06l105.9-423.8H544C561.7 64.01 576 49.7 576 32.01zM566.6 233.4c-12.5-12.5-32.75-12.5-45.25 0L480 274.8l-41.38-41.37c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l41.38 41.38l-41.38 41.38c-12.5 12.5-12.5 32.75 0 45.25C399.6 412.9 407.8 416 416 416s16.38-3.125 22.62-9.375L480 365.3l41.38 41.38C527.6 412.9 535.8 416 544 416s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25l-41.38-41.38L566.6 278.6C579.1 266.1 579.1 245.9 566.6 233.4z\"],\n    \"square-rss\": [448, 512, [\"rss-square\"], \"f143\", \"M384 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM150.6 374.6C144.4 380.9 136.2 384 128 384s-16.38-3.121-22.63-9.371c-12.5-12.5-12.5-32.76 0-45.26C111.6 323.1 119.8 320 128 320s16.38 3.121 22.63 9.371C163.1 341.9 163.1 362.1 150.6 374.6zM249.6 383.9C249 383.1 248.5 384 247.1 384c-12.53 0-23.09-9.75-23.92-22.44C220.5 306.9 173.1 259.5 118.4 255.9c-13.22-.8438-23.25-12.28-22.39-25.5c.8594-13.25 12.41-22.81 25.52-22.38c77.86 5.062 145.3 72.5 150.4 150.4C272.8 371.7 262.8 383.1 249.6 383.9zM345 383.1C344.7 384 344.3 384 343.1 384c-12.8 0-23.42-10.09-23.97-23C315.6 254.6 225.4 164.4 119 159.1C105.8 159.4 95.47 148.3 96.02 135C96.58 121.8 107.9 111.2 121 112c130.7 5.469 241.5 116.3 246.1 246.1C368.5 372.3 358.3 383.4 345 383.1z\"],\n    \"square-share-nodes\": [448, 512, [\"share-alt-square\"], \"f1e1\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM320 96C284.7 96 256 124.7 256 160C256 162.5 256.1 164.9 256.4 167.3L174.5 212C162.8 199.7 146.3 192 128 192C92.65 192 64 220.7 64 256C64 291.3 92.65 320 128 320C146.3 320 162.8 312.3 174.5 299.1L256.4 344.7C256.1 347.1 256 349.5 256 352C256 387.3 284.7 416 320 416C355.3 416 384 387.3 384 352C384 316.7 355.3 288 320 288C304.6 288 290.5 293.4 279.4 302.5L194.1 256L279.4 209.5C290.5 218.6 304.6 224 320 224C355.3 224 384 195.3 384 160C384 124.7 355.3 96 320 96V96z\"],\n    \"square-up-right\": [448, 512, [8599, \"external-link-square-alt\"], \"f360\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM330.5 323.9c0 6.473-3.889 12.3-9.877 14.78c-5.979 2.484-12.86 1.105-17.44-3.469l-45.25-45.25l-67.92 67.92c-12.5 12.5-32.72 12.46-45.21-.0411l-22.63-22.63C109.7 322.7 109.6 302.5 122.1 289.1l67.92-67.92L144.8 176.8C140.2 172.2 138.8 165.3 141.3 159.4c2.477-5.984 8.309-9.875 14.78-9.875h158.4c8.835 0 15.1 7.163 15.1 15.1V323.9z\"],\n    \"square-xmark\": [448, 512, [10062, \"times-square\", \"xmark-square\"], \"f2d3\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM143 208.1L190.1 255.1L143 303C133.7 312.4 133.7 327.6 143 336.1C152.4 346.3 167.6 346.3 176.1 336.1L223.1 289.9L271 336.1C280.4 346.3 295.6 346.3 304.1 336.1C314.3 327.6 314.3 312.4 304.1 303L257.9 255.1L304.1 208.1C314.3 199.6 314.3 184.4 304.1 175C295.6 165.7 280.4 165.7 271 175L223.1 222.1L176.1 175C167.6 165.7 152.4 165.7 143 175C133.7 184.4 133.7 199.6 143 208.1V208.1z\"],\n    \"stairs\": [576, 512, [], \"e289\", \"M576 64c0 17.67-14.31 32-32 32h-96v96c0 17.67-14.31 32-32 32h-96v96c0 17.67-14.31 32-32 32H192v96c0 17.67-14.31 32-32 32H32c-17.69 0-32-14.33-32-32s14.31-32 32-32h96v-96c0-17.67 14.31-32 32-32h96V192c0-17.67 14.31-32 32-32h96V64c0-17.67 14.31-32 32-32h128C561.7 32 576 46.33 576 64z\"],\n    \"stamp\": [512, 512, [], \"f5bf\", \"M366.2 256H400C461.9 256 512 306.1 512 368C512 388.9 498.6 406.7 480 413.3V464C480 490.5 458.5 512 432 512H80C53.49 512 32 490.5 32 464V413.3C13.36 406.7 0 388.9 0 368C0 306.1 50.14 256 112 256H145.8C175.7 256 200 231.7 200 201.8C200 184.3 190.8 168.5 180.1 154.8C167.5 138.5 160 118.1 160 96C160 42.98 202.1 0 256 0C309 0 352 42.98 352 96C352 118.1 344.5 138.5 331.9 154.8C321.2 168.5 312 184.3 312 201.8C312 231.7 336.3 256 366.2 256zM416 416H96V448H416V416z\"],\n    \"star\": [576, 512, [61446, 11088], \"f005\", \"M381.2 150.3L524.9 171.5C536.8 173.2 546.8 181.6 550.6 193.1C554.4 204.7 551.3 217.3 542.7 225.9L438.5 328.1L463.1 474.7C465.1 486.7 460.2 498.9 450.2 506C440.3 513.1 427.2 514 416.5 508.3L288.1 439.8L159.8 508.3C149 514 135.9 513.1 126 506C116.1 498.9 111.1 486.7 113.2 474.7L137.8 328.1L33.58 225.9C24.97 217.3 21.91 204.7 25.69 193.1C29.46 181.6 39.43 173.2 51.42 171.5L195 150.3L259.4 17.97C264.7 6.954 275.9-.0391 288.1-.0391C300.4-.0391 311.6 6.954 316.9 17.97L381.2 150.3z\"],\n    \"star-and-crescent\": [512, 512, [9770], \"f699\", \"M340.5 466.4c-1.5 0-6.875 .5-9.25 .5c-116.3 0-210.8-94.63-210.8-210.9s94.5-210.9 210.8-210.9c2.375 0 7.75 .5 9.25 .5c7.125 0 13.25-5 14.75-12c1.375-7.25-2.625-14.5-9.5-17.12c-29.13-11-59.38-16.5-89.75-16.5c-141.1 0-256 114.9-256 256s114.9 256 256 256c30.25 0 60.25-5.5 89.38-16.38c5.875-2 10.25-7.625 10.25-14.25C355.6 473.4 349.3 466.4 340.5 466.4zM503.5 213.9l-76.38-11.12L392.9 133.5C391.1 129.9 387.5 128 384 128c-3.5 0-7.125 1.875-9 5.5l-34.13 69.25l-76.38 11.12c-8.125 1.125-11.38 11.25-5.5 17l55.25 53.88l-13 76c-1.125 6.5 3.1 11.75 9.75 11.75c1.5 0 3.125-.375 4.625-1.25l68.38-35.88l68.25 35.88c1.625 .875 3.125 1.25 4.75 1.25c5.75 0 10.88-5.25 9.75-11.75l-13-76l55.25-53.88C514.9 225.1 511.6 214.1 503.5 213.9z\"],\n    \"star-half\": [576, 512, [61731], \"f089\", \"M288 439.8L159.8 508.3C149 514 135.9 513.1 126 506C116.1 498.9 111.1 486.7 113.2 474.7L137.8 328.1L33.58 225.9C24.97 217.3 21.91 204.7 25.69 193.1C29.46 181.6 39.43 173.2 51.42 171.5L195 150.3L259.4 17.97C264.7 6.995 275.8 .0131 287.1-.0391L288 439.8zM433.2 512C432.1 512.1 431 512.1 429.9 512H433.2z\"],\n    \"star-half-stroke\": [576, 512, [\"star-half-alt\"], \"f5c0\", \"M463.1 474.7C465.1 486.7 460.2 498.9 450.2 506C440.3 513.1 427.2 514 416.5 508.3L288.1 439.8L159.8 508.3C149 514 135.9 513.1 126 506C116.1 498.9 111.1 486.7 113.2 474.7L137.8 328.1L33.58 225.9C24.97 217.3 21.91 204.7 25.69 193.1C29.46 181.6 39.43 173.2 51.42 171.5L195 150.3L259.4 17.97C264.7 6.954 275.9-.0391 288.1-.0391C300.4-.0391 311.6 6.954 316.9 17.97L381.2 150.3L524.9 171.5C536.8 173.2 546.8 181.6 550.6 193.1C554.4 204.7 551.3 217.3 542.7 225.9L438.5 328.1L463.1 474.7zM288 376.4L288.1 376.3L399.7 435.9L378.4 309.6L469.2 219.8L343.8 201.4L288.1 86.85L288 87.14V376.4z\"],\n    \"star-of-david\": [512, 512, [10017], \"f69a\", \"M490.7 345.4L435.6 256l55.1-89.38c14.87-24.25-3.62-54.61-33.12-54.61l-110.6-.005l-57.87-93.1C281.7 6.003 268.9 0 256 0C243.1 0 230.3 6.003 222.9 18L165 112H54.39c-29.62 0-47.99 30.37-33.12 54.62L76.37 256l-55.1 89.38C6.4 369.6 24.77 399.1 54.39 399.1h110.6l57.87 93.1C230.3 505.1 243.1 512 256 512c12.88 0 25.74-6.002 33.12-18l57.83-93.1h110.7C487.2 399.1 505.6 369.6 490.7 345.4zM256 73.77l23.59 38.23H232.5L256 73.77zM89.48 343.1l20.59-33.35l20.45 33.35H89.48zM110 201.3L89.48 168h41.04L110 201.3zM256 438.2l-23.59-38.25h47.08L256 438.2zM313.9 343.1H198L143.8 256l54.22-87.1h116L368.3 256L313.9 343.1zM381.3 343.1l20.67-33.29l20.52 33.29H381.3zM401.1 201.3l-20.51-33.29h41.04L401.1 201.3z\"],\n    \"star-of-life\": [512, 512, [], \"f621\", \"M489.1 363.3l-24.03 41.59c-6.635 11.48-21.33 15.41-32.82 8.78l-129.1-74.56V488c0 13.25-10.75 24-24.02 24H231.1c-13.27 0-24.02-10.75-24.02-24v-148.9L78.87 413.7c-11.49 6.629-26.19 2.698-32.82-8.78l-24.03-41.59c-6.635-11.48-2.718-26.14 8.774-32.77L159.9 256L30.8 181.5C19.3 174.8 15.39 160.2 22.02 148.7l24.03-41.59c6.635-11.48 21.33-15.41 32.82-8.781l129.1 74.56L207.1 24c0-13.25 10.75-24 24.02-24h48.04c13.27 0 24.02 10.75 24.02 24l.0005 148.9l129.1-74.56c11.49-6.629 26.19-2.698 32.82 8.78l24.02 41.59c6.637 11.48 2.718 26.14-8.774 32.77L352.1 256l129.1 74.53C492.7 337.2 496.6 351.8 489.1 363.3z\"],\n    \"sterling-sign\": [320, 512, [163, \"gbp\", \"pound-sign\"], \"f154\", \"M112 223.1H224C241.7 223.1 256 238.3 256 255.1C256 273.7 241.7 287.1 224 287.1H112V332.5C112 361.5 104.1 389.1 89.2 414.9L88.52 416H288C305.7 416 320 430.3 320 448C320 465.7 305.7 480 288 480H32C20.47 480 9.834 473.8 4.154 463.8C-1.527 453.7-1.371 441.4 4.56 431.5L34.32 381.9C43.27 367 48 349.9 48 332.5V288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H48V160.4C48 89.47 105.5 32 176.4 32C190.2 32 203.9 34.22 216.1 38.59L298.1 65.64C314.9 71.23 323.9 89.35 318.4 106.1C312.8 122.9 294.6 131.9 277.9 126.4L196.7 99.3C190.2 97.12 183.3 96 176.4 96C140.8 96 112 124.8 112 160.4V223.1z\"],\n    \"stethoscope\": [576, 512, [129658], \"f0f1\", \"M480 112c-44.18 0-80 35.82-80 80c0 32.84 19.81 60.98 48.11 73.31v78.7c0 57.25-50.25 104-112 104c-60 0-109.3-44.1-111.9-99.23C296.1 333.8 352 269.3 352 191.1V36.59c0-11.38-8.15-21.38-19.28-23.5L269.8 .4775c-13-2.625-25.54 5.766-28.16 18.77L238.4 34.99c-2.625 13 5.812 25.59 18.81 28.22l30.69 6.059L287.9 190.7c0 52.88-42.13 96.63-95.13 97.13c-53.38 .5-96.81-42.56-96.81-95.93L95.89 69.37l30.72-6.112c13-2.5 21.41-15.15 18.78-28.15L142.3 19.37c-2.5-13-15.15-21.41-28.15-18.78L51.28 12.99C40.15 15.24 32 25.09 32 36.59v155.4c0 77.25 55.11 142 128.1 156.8C162.7 439.3 240.6 512 336 512c97 0 176-75.37 176-168V265.3c28.23-12.36 48-40.46 48-73.25C560 147.8 524.2 112 480 112zM480 216c-13.25 0-24-10.75-24-24S466.7 168 480 168S504 178.7 504 192S493.3 216 480 216z\"],\n    \"stop\": [384, 512, [9209], \"f04d\", \"M384 128v255.1c0 35.35-28.65 64-64 64H64c-35.35 0-64-28.65-64-64V128c0-35.35 28.65-64 64-64H320C355.3 64 384 92.65 384 128z\"],\n    \"stopwatch\": [448, 512, [9201], \"f2f2\", \"M272 0C289.7 0 304 14.33 304 32C304 49.67 289.7 64 272 64H256V98.45C293.5 104.2 327.7 120 355.7 143L377.4 121.4C389.9 108.9 410.1 108.9 422.6 121.4C435.1 133.9 435.1 154.1 422.6 166.6L398.5 190.8C419.7 223.3 432 262.2 432 304C432 418.9 338.9 512 224 512C109.1 512 16 418.9 16 304C16 200 92.32 113.8 192 98.45V64H176C158.3 64 144 49.67 144 32C144 14.33 158.3 0 176 0L272 0zM248 192C248 178.7 237.3 168 224 168C210.7 168 200 178.7 200 192V320C200 333.3 210.7 344 224 344C237.3 344 248 333.3 248 320V192z\"],\n    \"stopwatch-20\": [448, 512, [], \"e06f\", \"M276 256C276 249.4 281.4 244 288 244C294.6 244 300 249.4 300 256V352C300 358.6 294.6 364 288 364C281.4 364 276 358.6 276 352V256zM272 0C289.7 0 304 14.33 304 32C304 49.67 289.7 64 272 64H256V98.45C293.5 104.2 327.7 120 355.7 143L377.4 121.4C389.9 108.9 410.1 108.9 422.6 121.4C435.1 133.9 435.1 154.1 422.6 166.6L398.5 190.8C419.7 223.3 432 262.2 432 304C432 418.9 338.9 512 224 512C109.1 512 16 418.9 16 304C16 200 92.32 113.8 192 98.45V64H176C158.3 64 144 49.67 144 32C144 14.33 158.3 0 176 0L272 0zM288 204C259.3 204 236 227.3 236 256V352C236 380.7 259.3 404 288 404C316.7 404 340 380.7 340 352V256C340 227.3 316.7 204 288 204zM172 256.5V258.8C172 262.4 170.7 265.9 168.3 268.6L129.2 312.5C115.5 327.9 108 347.8 108 368.3V384C108 395 116.1 404 128 404H192C203 404 212 395 212 384C212 372.1 203 364 192 364H148.2C149.1 354.8 152.9 346.1 159.1 339.1L198.2 295.2C207.1 285.1 211.1 272.2 211.1 258.8V256.5C211.1 227.5 188.5 204 159.5 204C136.8 204 116.8 218.5 109.6 239.9L109 241.7C105.5 252.2 111.2 263.5 121.7 266.1C132.2 270.5 143.5 264.8 146.1 254.3L147.6 252.6C149.3 247.5 154.1 244 159.5 244C166.4 244 171.1 249.6 171.1 256.5L172 256.5z\"],\n    \"store\": [576, 512, [], \"f54e\", \"M495.5 223.2C491.6 223.7 487.6 224 483.4 224C457.4 224 434.2 212.6 418.3 195C402.4 212.6 379.2 224 353.1 224C327 224 303.8 212.6 287.9 195C272 212.6 248.9 224 222.7 224C196.7 224 173.5 212.6 157.6 195C141.7 212.6 118.5 224 92.36 224C88.3 224 84.21 223.7 80.24 223.2C24.92 215.8-1.255 150.6 28.33 103.8L85.66 13.13C90.76 4.979 99.87 0 109.6 0H466.4C476.1 0 485.2 4.978 490.3 13.13L547.6 103.8C577.3 150.7 551 215.8 495.5 223.2H495.5zM499.7 254.9C503.1 254.4 508 253.6 512 252.6V448C512 483.3 483.3 512 448 512H128C92.66 512 64 483.3 64 448V252.6C67.87 253.6 71.86 254.4 75.97 254.9L76.09 254.9C81.35 255.6 86.83 256 92.36 256C104.8 256 116.8 254.1 128 250.6V384H448V250.7C459.2 254.1 471.1 256 483.4 256C489 256 494.4 255.6 499.7 254.9L499.7 254.9z\"],\n    \"store-slash\": [640, 512, [], \"e071\", \"M94.92 49.09L117.7 13.13C122.8 4.98 131.9 .0007 141.6 .0007H498.4C508.1 .0007 517.2 4.979 522.3 13.13L579.6 103.8C609.3 150.7 583 215.8 527.5 223.2C523.6 223.7 519.6 224 515.4 224C489.4 224 466.2 212.6 450.3 195C434.4 212.6 411.2 224 385.1 224C359 224 335.8 212.6 319.9 195C314.4 201.1 308.1 206.4 301.2 210.7L480 350.9V250.7C491.2 254.1 503.1 256 515.4 256C521 256 526.4 255.6 531.7 254.9L531.7 254.9C535.1 254.4 540 253.6 544 252.6V401.1L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L94.92 49.09zM112.2 223.2C68.36 217.3 42.82 175.1 48.9 134.5L155.3 218.4C145.7 222 135.3 224 124.4 224C120.3 224 116.2 223.7 112.2 223.2V223.2zM160 384H365.5L514.9 501.7C504.8 508.2 492.9 512 480 512H160C124.7 512 96 483.3 96 448V252.6C99.87 253.6 103.9 254.4 107.1 254.9L108.1 254.9C113.3 255.6 118.8 256 124.4 256C136.8 256 148.8 254.1 160 250.6V384z\"],\n    \"street-view\": [512, 512, [], \"f21d\", \"M320 64C320 99.35 291.3 128 256 128C220.7 128 192 99.35 192 64C192 28.65 220.7 0 256 0C291.3 0 320 28.65 320 64zM288 160C323.3 160 352 188.7 352 224V272C352 289.7 337.7 304 320 304H318.2L307.2 403.5C305.4 419.7 291.7 432 275.4 432H236.6C220.3 432 206.6 419.7 204.8 403.5L193.8 304H192C174.3 304 160 289.7 160 272V224C160 188.7 188.7 160 224 160H288zM63.27 414.7C60.09 416.3 57.47 417.8 55.33 419.2C51.7 421.6 51.72 426.4 55.34 428.8C64.15 434.6 78.48 440.6 98.33 446.1C137.7 456.1 193.5 464 256 464C318.5 464 374.3 456.1 413.7 446.1C433.5 440.6 447.9 434.6 456.7 428.8C460.3 426.4 460.3 421.6 456.7 419.2C454.5 417.8 451.9 416.3 448.7 414.7C433.4 406.1 409.9 399.8 379.7 394.2C366.6 391.8 358 379.3 360.4 366.3C362.8 353.3 375.3 344.6 388.3 347C420.8 352.9 449.2 361.2 470.3 371.8C480.8 377.1 490.6 383.5 498 391.4C505.6 399.5 512 410.5 512 424C512 445.4 496.5 460.1 482.9 469C468.2 478.6 448.6 486.3 426.4 492.4C381.8 504.7 321.6 512 256 512C190.4 512 130.2 504.7 85.57 492.4C63.44 486.3 43.79 478.6 29.12 469C15.46 460.1 0 445.4 0 424C0 410.5 6.376 399.5 13.96 391.4C21.44 383.5 31.24 377.1 41.72 371.8C62.75 361.2 91.24 352.9 123.7 347C136.7 344.6 149.2 353.3 151.6 366.3C153.1 379.3 145.4 391.8 132.3 394.2C102.1 399.8 78.57 406.1 63.27 414.7H63.27z\"],\n    \"strikethrough\": [512, 512, [], \"f0cc\", \"M332.2 319.9c17.22 12.17 22.33 26.51 18.61 48.21c-3.031 17.59-10.88 29.34-24.72 36.99c-35.44 19.75-108.5 11.96-186-19.68c-16.34-6.686-35.03 1.156-41.72 17.53s1.188 35.05 17.53 41.71c31.75 12.93 95.69 35.37 157.6 35.37c29.62 0 58.81-5.156 83.72-18.96c30.81-17.09 50.44-45.46 56.72-82.11c3.998-23.27 2.168-42.58-3.488-59.05H332.2zM488 239.9l-176.5-.0309c-15.85-5.613-31.83-10.34-46.7-14.62c-85.47-24.62-110.9-39.05-103.7-81.33c2.5-14.53 10.16-25.96 22.72-34.03c20.47-13.15 64.06-23.84 155.4 .3438c17.09 4.531 34.59-5.654 39.13-22.74c4.531-17.09-5.656-34.59-22.75-39.12c-91.31-24.18-160.7-21.62-206.3 7.654C121.8 73.72 103.6 101.1 98.09 133.1C89.26 184.5 107.9 217.3 137.2 239.9L24 239.9c-13.25 0-24 10.75-24 23.1c0 13.25 10.75 23.1 24 23.1h464c13.25 0 24-10.75 24-23.1C512 250.7 501.3 239.9 488 239.9z\"],\n    \"stroopwafel\": [512, 512, [], \"f551\", \"M188.1 210.8l-45.25 45.25l45.25 45.25l45.25-45.25L188.1 210.8zM301.2 188.1l-45.25-45.25L210.7 188.1l45.25 45.25L301.2 188.1zM210.7 323.9l45.25 45.25l45.25-45.25L255.1 278.6L210.7 323.9zM256 16c-132.5 0-240 107.5-240 240s107.5 240 240 240s240-107.5 240-240S388.5 16 256 16zM442.6 295.6l-11.25 11.25c-3.125 3.125-8.25 3.125-11.38 0L391.8 278.6l-45.25 45.25l34 33.88l16.88-16.88c3.125-3.125 8.251-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-16.88 16.88l16.88 17c3.125 3.125 3.125 8.25 0 11.38l-11.25 11.25c-3.125 3.125-8.251 3.125-11.38 0l-16.88-17l-17 17c-3.125 3.125-8.25 3.125-11.38 0l-11.25-11.25c-3.125-3.125-3.125-8.25 0-11.38l17-17l-34-33.88l-45.25 45.25l28.25 28.25c3.125 3.125 3.125 8.25 0 11.38l-11.25 11.25c-3.125 3.125-8.25 3.125-11.38 0l-28.25-28.25L227.7 442.6c-3.125 3.125-8.25 3.125-11.38 0l-11.25-11.25c-3.125-3.125-3.125-8.25 0-11.38l28.25-28.25l-45.25-45.25l-33.88 34l16.88 16.88c3.125 3.125 3.125 8.25 0 11.38l-11.25 11.25c-3.125 3.125-8.25 3.125-11.38 0L131.6 403.1l-16.1 16.88c-3.125 3.125-8.25 3.125-11.38 0l-11.25-11.25c-3.125-3.125-3.125-8.25 0-11.38l17-16.88l-17-17c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l16.1 17l33.88-34L120.2 278.6l-28.25 28.25c-3.125 3.125-8.25 3.125-11.38 0L69.37 295.6c-3.125-3.125-3.125-8.25 0-11.38l28.25-28.25l-28.25-28.25c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l28.25 28.25l45.25-45.25l-34-34l-16.88 17c-3.125 3.125-8.25 3.125-11.38 0l-11.25-11.25c-3.125-3.125-3.125-8.25 0-11.38l16.88-17l-16.88-16.88c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l16.88 17l17-17c3.125-3.125 8.25-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-17 16.88l34 34l45.25-45.25L205.1 92c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l28.25 28.25l28.25-28.25c3.125-3.125 8.25-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-28.25 28.25l45.25 45.25l34-34l-17-16.88c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l17 16.88l16.88-16.88c3.125-3.125 8.251-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-17 16.88l17 17c3.125 3.125 3.125 8.25 0 11.38l-11.25 11.25c-3.125 3.125-8.251 3.125-11.38 0l-16.88-17l-34 34l45.25 45.25l28.25-28.25c3.125-3.125 8.25-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-28.25 28.25l28.25 28.25C445.7 287.4 445.7 292.5 442.6 295.6zM278.6 256l45.25 45.25l45.25-45.25l-45.25-45.25L278.6 256z\"],\n    \"subscript\": [512, 512, [], \"f12c\", \"M480 448v-128c0-11.09-5.75-21.38-15.17-27.22c-9.422-5.875-21.25-6.344-31.14-1.406l-32 16c-15.81 7.906-22.22 27.12-14.31 42.94c5.609 11.22 16.89 17.69 28.62 17.69v80c-17.67 0-32 14.31-32 32s14.33 32 32 32h64c17.67 0 32-14.31 32-32S497.7 448 480 448zM320 128c17.67 0 32-14.31 32-32s-14.33-32-32-32l-32-.0024c-10.44 0-20.23 5.101-26.22 13.66L176 200.2L90.22 77.67C84.23 69.11 74.44 64.01 64 64.01L32 64.01c-17.67 0-32 14.32-32 32s14.33 32 32 32h15.34L136.9 256l-89.6 128H32c-17.67 0-32 14.31-32 32s14.33 31.1 32 31.1l32-.0024c10.44 0 20.23-5.086 26.22-13.65L176 311.8l85.78 122.5C267.8 442.9 277.6 448 288 448l32 .0024c17.67 0 32-14.31 32-31.1s-14.33-32-32-32h-15.34l-89.6-128l89.6-127.1H320z\"],\n    \"suitcase\": [512, 512, [129523], \"f0f2\", \"M0 144v288C0 457.6 22.41 480 48 480H96V96H48C22.41 96 0 118.4 0 144zM336 0h-160C150.4 0 128 22.41 128 48V480h256V48C384 22.41 361.6 0 336 0zM336 96h-160V48h160V96zM464 96H416v384h48c25.59 0 48-22.41 48-48v-288C512 118.4 489.6 96 464 96z\"],\n    \"suitcase-medical\": [512, 512, [\"medkit\"], \"f0fa\", \"M0 144v288C0 457.6 22.41 480 48 480H64V96H48C22.41 96 0 118.4 0 144zM464 96H448v384h16c25.59 0 48-22.41 48-48v-288C512 118.4 489.6 96 464 96zM384 48C384 22.41 361.6 0 336 0h-160C150.4 0 128 22.41 128 48V96H96v384h320V96h-32V48zM176 48h160V96h-160V48zM352 312C352 316.4 348.4 320 344 320H288v56c0 4.375-3.625 8-8 8h-48C227.6 384 224 380.4 224 376V320H168C163.6 320 160 316.4 160 312v-48C160 259.6 163.6 256 168 256H224V200C224 195.6 227.6 192 232 192h48C284.4 192 288 195.6 288 200V256h56C348.4 256 352 259.6 352 264V312z\"],\n    \"suitcase-rolling\": [448, 512, [], \"f5c1\", \"M368 128h-47.95l.0123-80c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48L128 128H80C53.5 128 32 149.5 32 176v256C32 458.5 53.5 480 80 480h16.05L96 496C96 504.9 103.1 512 112 512h32C152.9 512 160 504.9 160 496L160.1 480h128L288 496c0 8.875 7.125 16 16 16h32c8.875 0 16-7.125 16-16l.0492-16H368c26.5 0 48-21.5 48-48v-256C416 149.5 394.5 128 368 128zM176.1 48h96V128h-96V48zM336 384h-224C103.2 384 96 376.8 96 368C96 359.2 103.2 352 112 352h224c8.801 0 16 7.199 16 16C352 376.8 344.8 384 336 384zM336 256h-224C103.2 256 96 248.8 96 240C96 231.2 103.2 224 112 224h224C344.8 224 352 231.2 352 240C352 248.8 344.8 256 336 256z\"],\n    \"sun\": [512, 512, [9728], \"f185\", \"M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z\"],\n    \"superscript\": [512, 512, [], \"f12b\", \"M480 160v-128c0-11.09-5.75-21.37-15.17-27.22C455.4-1.048 443.6-1.548 433.7 3.39l-32 16c-15.81 7.906-22.22 27.12-14.31 42.94C392.1 73.55 404.3 80.01 416 80.01v80c-17.67 0-32 14.31-32 32s14.33 32 32 32h64c17.67 0 32-14.31 32-32S497.7 160 480 160zM320 128c17.67 0 32-14.31 32-32s-14.33-32-32-32l-32-.0024c-10.44 0-20.23 5.101-26.22 13.66L176 200.2L90.22 77.67C84.23 69.11 74.44 64.01 64 64.01L32 64.01c-17.67 0-32 14.32-32 32s14.33 32 32 32h15.34L136.9 256l-89.6 128H32c-17.67 0-32 14.31-32 32s14.33 31.1 32 31.1l32-.0024c10.44 0 20.23-5.086 26.22-13.65L176 311.8l85.78 122.5C267.8 442.9 277.6 448 288 448l32 .0024c17.67 0 32-14.31 32-31.1s-14.33-32-32-32h-15.34l-89.6-128l89.6-127.1H320z\"],\n    \"swatchbook\": [512, 512, [], \"f5c3\", \"M0 32C0 14.33 14.33 0 32 0H160C177.7 0 192 14.33 192 32V416C192 469 149 512 96 512C42.98 512 0 469 0 416V32zM128 64H64V128H128V64zM64 256H128V192H64V256zM96 440C109.3 440 120 429.3 120 416C120 402.7 109.3 392 96 392C82.75 392 72 402.7 72 416C72 429.3 82.75 440 96 440zM224 416V154L299.4 78.63C311.9 66.13 332.2 66.13 344.7 78.63L435.2 169.1C447.7 181.6 447.7 201.9 435.2 214.4L223.6 425.9C223.9 422.7 224 419.3 224 416V416zM374.8 320H480C497.7 320 512 334.3 512 352V480C512 497.7 497.7 512 480 512H182.8L374.8 320z\"],\n    \"synagogue\": [640, 512, [128333], \"f69b\", \"M309.8 3.708C315.7-1.236 324.3-1.236 330.2 3.708L451.2 104.5C469.5 119.7 480 142.2 480 165.1V512H384V384C384 348.7 355.3 320 320 320C284.7 320 256 348.7 256 384V512H160V165.1C160 142.2 170.5 119.7 188.8 104.5L309.8 3.708zM326.1 124.3C323.9 118.9 316.1 118.9 313 124.3L297.2 152.4L264.9 152.1C258.7 152.1 254.8 158.8 257.9 164.2L274.3 191.1L257.9 219.8C254.8 225.2 258.7 231.9 264.9 231.9L297.2 231.6L313 259.7C316.1 265.1 323.9 265.1 326.1 259.7L342.8 231.6L375.1 231.9C381.3 231.9 385.2 225.2 382.1 219.8L365.7 191.1L382.1 164.2C385.2 158.8 381.3 152.1 375.1 152.1L342.8 152.4L326.1 124.3zM512 244.5L540.1 213.3C543.1 209.9 547.5 208 552 208C556.5 208 560.9 209.9 563.9 213.3L627.7 284.2C635.6 292.1 640 304.4 640 316.3V448C640 483.3 611.3 512 576 512H512V244.5zM128 244.5V512H64C28.65 512 0 483.3 0 448V316.3C0 304.4 4.389 292.1 12.32 284.2L76.11 213.3C79.14 209.9 83.46 208 88 208C92.54 208 96.86 209.9 99.89 213.3L128 244.5z\"],\n    \"syringe\": [512, 512, [128137], \"f48e\", \"M504.1 71.03l-64-64c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94L422.1 56L384 94.06l-55.03-55.03c-9.375-9.375-24.56-9.375-33.94 0c-8.467 8.467-8.873 21.47-2.047 30.86l149.1 149.1C446.3 222.1 451.1 224 456 224c6.141 0 12.28-2.344 16.97-7.031c9.375-9.375 9.375-24.56 0-33.94L417.9 128L456 89.94l15.03 15.03C475.7 109.7 481.9 112 488 112s12.28-2.344 16.97-7.031C514.3 95.59 514.3 80.41 504.1 71.03zM208.8 154.1l58.56 58.56c6.25 6.25 6.25 16.38 0 22.62C264.2 238.4 260.1 240 256 240S247.8 238.4 244.7 235.3L186.1 176.8L144.8 218.1l58.56 58.56c6.25 6.25 6.25 16.38 0 22.62C200.2 302.4 196.1 304 192 304S183.8 302.4 180.7 299.3L122.1 240.8L82.75 280.1C70.74 292.1 64 308.4 64 325.4v88.68l-56.97 56.97c-9.375 9.375-9.375 24.56 0 33.94C11.72 509.7 17.86 512 24 512s12.28-2.344 16.97-7.031L97.94 448h88.69c16.97 0 33.25-6.744 45.26-18.75l187.6-187.6l-149.1-149.1L208.8 154.1z\"],\n    \"t\": [384, 512, [116], \"54\", \"M384 64.01c0 17.67-14.33 32-32 32h-128v352c0 17.67-14.33 31.99-32 31.99s-32-14.32-32-31.99v-352H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h320C369.7 32.01 384 46.34 384 64.01z\"],\n    \"table\": [512, 512, [], \"f0ce\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM224 256V160H64V256H224zM64 320V416H224V320H64zM288 416H448V320H288V416zM448 256V160H288V256H448z\"],\n    \"table-cells\": [512, 512, [\"th\"], \"f00a\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM152 96H64V160H152V96zM208 160H296V96H208V160zM448 96H360V160H448V96zM64 288H152V224H64V288zM296 224H208V288H296V224zM360 288H448V224H360V288zM152 352H64V416H152V352zM208 416H296V352H208V416zM448 352H360V416H448V352z\"],\n    \"table-cells-large\": [512, 512, [\"th-large\"], \"f009\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM448 96H288V224H448V96zM448 288H288V416H448V288zM224 224V96H64V224H224zM64 416H224V288H64V416z\"],\n    \"table-columns\": [512, 512, [\"columns\"], \"f0db\", \"M0 96C0 60.65 28.65 32 64 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96zM64 416H224V160H64V416zM448 160H288V416H448V160z\"],\n    \"table-list\": [512, 512, [\"th-list\"], \"f00b\", \"M0 96C0 60.65 28.65 32 64 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96zM64 160H128V96H64V160zM448 96H192V160H448V96zM64 288H128V224H64V288zM448 224H192V288H448V224zM64 416H128V352H64V416zM448 352H192V416H448V352z\"],\n    \"table-tennis-paddle-ball\": [512, 512, [127955, \"ping-pong-paddle-ball\", \"table-tennis\"], \"f45d\", \"M416 287.1c27.99 0 53.68 9.254 74.76 24.51c14.03-29.82 21.06-62.13 21.06-94.43c0-103.1-79.37-218.1-216.5-218.1c-59.94 0-120.4 23.71-165.5 68.95l-54.66 54.8C73.61 125.3 72.58 126.1 71.14 128.5l230.7 230.7C322.8 317.2 365.8 287.1 416 287.1zM290.3 392.1l-238.6-238.6C38.74 176.2 32.3 199.4 32.3 221.9c0 30.53 11.71 59.94 34.29 82.58l36.6 36.7l-92.38 81.32c-7.177 6.255-10.81 15.02-10.81 23.81c0 8.027 3.032 16.07 9.164 22.24l34.05 34.2c6.145 6.16 14.16 9.205 22.15 9.205c8.749 0 17.47-3.649 23.7-10.86l81.03-92.85l35.95 36.04c23.62 23.68 54.41 35.23 85.37 35.23c4.532 0 9.205-.2677 13.72-.7597c-10.56-18.61-17.12-39.89-17.12-62.81C288 408.1 288.1 400.5 290.3 392.1zM415.1 320c-52.99 0-95.99 42.1-95.99 95.1c0 52.1 42.99 95.99 95.99 95.99c52.1 0 95.99-42.1 95.99-95.99C511.1 363 468.1 320 415.1 320z\"],\n    \"tablet\": [448, 512, [\"tablet-android\"], \"f3fb\", \"M384 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V64C448 28.65 419.3 0 384 0zM288 447.1C288 456.8 280.8 464 272 464H175.1C167.2 464 160 456.8 160 448S167.2 432 175.1 432h96C280.8 432 288 439.2 288 447.1z\"],\n    \"tablet-button\": [448, 512, [], \"f10a\", \"M384 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V64C448 28.65 419.3 0 384 0zM224 464c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S241.8 464 224 464z\"],\n    \"tablet-screen-button\": [448, 512, [\"tablet-alt\"], \"f3fa\", \"M384 .0001H64c-35.35 0-64 28.65-64 64v384c0 35.35 28.65 63.1 64 63.1h320c35.35 0 64-28.65 64-63.1v-384C448 28.65 419.3 .0001 384 .0001zM224 480c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S241.8 480 224 480zM384 384H64v-320h320V384z\"],\n    \"tablets\": [640, 512, [], \"f490\", \"M159.1 191.1c-81.1 0-147.5 58.51-159.9 134.8C-.7578 331.5 3.367 336 8.365 336h303.3c4.998 0 8.996-4.5 8.248-9.25C307.4 250.5 241.1 191.1 159.1 191.1zM311.5 368H8.365c-4.998 0-9.123 4.5-8.248 9.25C12.49 453.5 78.88 512 159.1 512s147.4-58.5 159.8-134.8C320.7 372.5 316.5 368 311.5 368zM362.9 65.74c-3.502-3.502-9.504-3.252-12.25 .75c-45.52 62.76-40.52 150.4 15.88 206.9c56.52 56.51 144.2 61.39 206.1 15.88c4.002-2.875 4.252-8.877 .75-12.25L362.9 65.74zM593.4 46.61c-56.52-56.51-144.2-61.39-206.1-16c-4.002 2.877-4.252 8.877-.75 12.25l211.3 211.4c3.5 3.502 9.504 3.252 12.25-.75C654.8 190.8 649.9 103.1 593.4 46.61z\"],\n    \"tachograph-digital\": [640, 512, [\"digital-tachograph\"], \"f566\", \"M576 64H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64V128C640 92.8 611.2 64 576 64zM64 296C64 291.6 67.63 288 72 288h16C92.38 288 96 291.6 96 296v16C96 316.4 92.38 320 88 320h-16C67.63 320 64 316.4 64 312V296zM336 384h-256C71.2 384 64 376.8 64 368C64 359.2 71.2 352 79.1 352h256c8.801 0 16 7.199 16 16C352 376.8 344.8 384 336 384zM128 312v-16C128 291.6 131.6 288 136 288h16C156.4 288 160 291.6 160 296v16C160 316.4 156.4 320 152 320h-16C131.6 320 128 316.4 128 312zM192 312v-16C192 291.6 195.6 288 200 288h16C220.4 288 224 291.6 224 296v16C224 316.4 220.4 320 216 320h-16C195.6 320 192 316.4 192 312zM256 312v-16C256 291.6 259.6 288 264 288h16C284.4 288 288 291.6 288 296v16C288 316.4 284.4 320 280 320h-16C259.6 320 256 316.4 256 312zM352 312C352 316.4 348.4 320 344 320h-16C323.6 320 320 316.4 320 312v-16C320 291.6 323.6 288 328 288h16C348.4 288 352 291.6 352 296V312zM352 237.7C352 247.9 344.4 256 334.9 256H81.07C71.6 256 64 247.9 64 237.7V146.3C64 136.1 71.6 128 81.07 128h253.9C344.4 128 352 136.1 352 146.3V237.7zM560 384h-160c-8.801 0-16-7.201-16-16c0-8.801 7.199-16 16-16h160c8.801 0 16 7.199 16 16C576 376.8 568.8 384 560 384z\"],\n    \"tag\": [448, 512, [127991], \"f02b\", \"M48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L418.7 226.7C443.7 251.7 443.7 292.3 418.7 317.3L285.3 450.7C260.3 475.7 219.7 475.7 194.7 450.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5V80C0 53.49 21.49 32 48 32L48 32zM112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176z\"],\n    \"tags\": [512, 512, [], \"f02c\", \"M472.8 168.4C525.1 221.4 525.1 306.6 472.8 359.6L360.8 472.9C351.5 482.3 336.3 482.4 326.9 473.1C317.4 463.8 317.4 448.6 326.7 439.1L438.6 325.9C472.5 291.6 472.5 236.4 438.6 202.1L310.9 72.87C301.5 63.44 301.6 48.25 311.1 38.93C320.5 29.61 335.7 29.7 344.1 39.13L472.8 168.4zM.0003 229.5V80C.0003 53.49 21.49 32 48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L410.7 218.7C435.7 243.7 435.7 284.3 410.7 309.3L277.3 442.7C252.3 467.7 211.7 467.7 186.7 442.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5L.0003 229.5zM112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112z\"],\n    \"tape\": [576, 512, [], \"f4db\", \"M288 256C288 291.3 259.3 320 224 320C188.7 320 160 291.3 160 256C160 220.7 188.7 192 224 192C259.3 192 288 220.7 288 256zM544 416C561.7 416 576 430.3 576 448C576 465.7 561.7 480 544 480H224C100.3 480 0 379.7 0 256C0 132.3 100.3 32 224 32C347.7 32 448 132.3 448 256C448 318.7 422.3 375.3 380.8 416H544zM224 352C277 352 320 309 320 256C320 202.1 277 160 224 160C170.1 160 128 202.1 128 256C128 309 170.1 352 224 352z\"],\n    \"taxi\": [576, 512, [128662, \"cab\"], \"f1ba\", \"M352 0C369.7 0 384 14.33 384 32V64L384 64.15C422.6 66.31 456.3 91.49 469.2 128.3L504.4 228.8C527.6 238.4 544 261.3 544 288V480C544 497.7 529.7 512 512 512H480C462.3 512 448 497.7 448 480V432H128V480C128 497.7 113.7 512 96 512H64C46.33 512 32 497.7 32 480V288C32 261.3 48.36 238.4 71.61 228.8L106.8 128.3C119.7 91.49 153.4 66.31 192 64.15L192 64V32C192 14.33 206.3 0 224 0L352 0zM197.4 128C183.8 128 171.7 136.6 167.2 149.4L141.1 224H434.9L408.8 149.4C404.3 136.6 392.2 128 378.6 128H197.4zM128 352C145.7 352 160 337.7 160 320C160 302.3 145.7 288 128 288C110.3 288 96 302.3 96 320C96 337.7 110.3 352 128 352zM448 288C430.3 288 416 302.3 416 320C416 337.7 430.3 352 448 352C465.7 352 480 337.7 480 320C480 302.3 465.7 288 448 288z\"],\n    \"teeth\": [576, 512, [], \"f62e\", \"M480 32H96C42.98 32 0 74.98 0 128v256c0 53.02 42.98 96 96 96h384c53.02 0 96-42.98 96-96V128C576 74.98 533 32 480 32zM144 336C144 362.5 122.5 384 96 384s-48-21.5-48-48v-32C48 295.1 55.13 288 64 288h64c8.875 0 16 7.125 16 16V336zM144 240C144 248.9 136.9 256 128 256H64C55.13 256 48 248.9 48 240v-32C48 181.5 69.5 160 96 160s48 21.5 48 48V240zM272 336C272 362.5 250.5 384 224 384s-48-21.5-48-48v-32C176 295.1 183.1 288 192 288h64c8.875 0 16 7.125 16 16V336zM272 242.3C272 249.9 265.9 256 258.3 256H189.7C182.1 256 176 249.9 176 242.3V176C176 149.5 197.5 128 224 128s48 21.54 48 48V242.3zM400 336c0 26.5-21.5 48-48 48s-48-21.5-48-48v-32C304 295.1 311.1 288 320 288h64c8.875 0 16 7.125 16 16V336zM400 242.3C400 249.9 393.9 256 386.3 256h-68.57C310.1 256 304 249.9 304 242.3V176C304 149.5 325.5 128 352 128s48 21.54 48 48V242.3zM528 336c0 26.5-21.5 48-48 48s-48-21.5-48-48v-32C432 295.1 439.1 288 448 288h64c8.875 0 16 7.125 16 16V336zM528 240C528 248.9 520.9 256 512 256h-64c-8.875 0-16-7.125-16-16v-32C432 181.5 453.5 160 480 160s48 21.5 48 48V240z\"],\n    \"teeth-open\": [576, 512, [], \"f62f\", \"M512 288H64c-35.35 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h384c53.02 0 96-42.98 96-96v-32C576 316.7 547.3 288 512 288zM144 368C144 394.5 122.5 416 96 416s-48-21.5-48-48v-32C48 327.1 55.13 320 64 320h64c8.875 0 16 7.125 16 16V368zM272 368C272 394.5 250.5 416 224 416s-48-21.5-48-48v-32C176 327.1 183.1 320 192 320h64c8.875 0 16 7.125 16 16V368zM400 368c0 26.5-21.5 48-48 48s-48-21.5-48-48v-32c0-8.875 7.125-16 16-16h64c8.875 0 16 7.125 16 16V368zM528 368c0 26.5-21.5 48-48 48s-48-21.5-48-48v-32c0-8.875 7.125-16 16-16h64c8.875 0 16 7.125 16 16V368zM480 32H96C42.98 32 0 74.98 0 128v64c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V128C576 74.98 533 32 480 32zM144 208C144 216.9 136.9 224 128 224H64C55.13 224 48 216.9 48 208v-32C48 149.5 69.5 128 96 128s48 21.5 48 48V208zM272 210.3C272 217.9 265.9 224 258.3 224H189.7C182.1 224 176 217.9 176 210.3V144C176 117.5 197.5 96 224 96s48 21.54 48 48V210.3zM400 210.3C400 217.9 393.9 224 386.3 224h-68.57C310.1 224 304 217.9 304 210.3V144C304 117.5 325.5 96 352 96s48 21.54 48 48V210.3zM528 208C528 216.9 520.9 224 512 224h-64c-8.875 0-16-7.125-16-16v-32C432 149.5 453.5 128 480 128s48 21.5 48 48V208z\"],\n    \"temperature-empty\": [320, 512, [\"temperature-0\", \"thermometer-0\", \"thermometer-empty\"], \"f2cb\", \"M272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448zM160 320c-26.51 0-48 21.49-48 48s21.49 48 48 48s48-21.49 48-48S186.5 320 160 320z\"],\n    \"temperature-full\": [320, 512, [\"temperature-4\", \"thermometer-4\", \"thermometer-full\"], \"f2c7\", \"M176 322.9V112c0-8.75-7.25-16-16-16s-16 7.25-16 16v210.9c-18.62 6.625-32 24.25-32 45.13c0 26.5 21.5 48 48 48s48-21.5 48-48C208 347.1 194.6 329.5 176 322.9zM272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448z\"],\n    \"temperature-half\": [320, 512, [127777, \"temperature-2\", \"thermometer-2\", \"thermometer-half\"], \"f2c9\", \"M176 322.9l.0002-114.9c0-8.75-7.25-16-16-16s-15.1 7.25-15.1 16L144 322.9c-18.62 6.625-32 24.25-32 45.13c0 26.5 21.5 48 48 48s48-21.5 48-48C208 347.1 194.6 329.5 176 322.9zM272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448z\"],\n    \"temperature-high\": [512, 512, [], \"f769\", \"M160 322.9V112C160 103.3 152.8 96 144 96S128 103.3 128 112v210.9C109.4 329.5 96 347.1 96 368C96 394.5 117.5 416 144 416S192 394.5 192 368C192 347.1 178.6 329.5 160 322.9zM416 0c-52.88 0-96 43.13-96 96s43.13 96 96 96s96-43.13 96-96S468.9 0 416 0zM416 128c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S433.8 128 416 128zM256 112c0-61.88-50.13-112-112-112s-112 50.13-112 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.1-12.25-64.88-32-89.5V112zM144 448c-44.13 0-80-35.88-80-80c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48S192 85.5 192 112V304.3c19.75 14.75 32 38.25 32 63.75C224 412.1 188.1 448 144 448z\"],\n    \"temperature-low\": [512, 512, [], \"f76b\", \"M160 322.9V304C160 295.3 152.8 288 144 288S128 295.3 128 304v18.88C109.4 329.5 96 347.1 96 368C96 394.5 117.5 416 144 416S192 394.5 192 368C192 347.1 178.6 329.5 160 322.9zM256 112c0-61.88-50.13-112-112-112s-112 50.13-112 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.1-12.25-64.88-32-89.5V112zM144 448c-44.13 0-80-35.88-80-80c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.1c19.75 14.75 32 38.38 32 63.88C224 412.1 188.1 448 144 448zM416 0c-52.88 0-96 43.13-96 96s43.13 96 96 96s96-43.13 96-96S468.9 0 416 0zM416 128c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S433.8 128 416 128z\"],\n    \"temperature-quarter\": [320, 512, [\"temperature-1\", \"thermometer-1\", \"thermometer-quarter\"], \"f2ca\", \"M176 322.9l.0002-50.88c0-8.75-7.25-16-16-16s-15.1 7.25-15.1 16L144 322.9c-18.62 6.625-32 24.25-32 45.13c0 26.5 21.5 48 48 48s48-21.5 48-48C208 347.1 194.6 329.5 176 322.9zM272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448z\"],\n    \"temperature-three-quarters\": [320, 512, [\"temperature-3\", \"thermometer-3\", \"thermometer-three-quarters\"], \"f2c8\", \"M176 322.9V160c0-8.75-7.25-16-16-16s-16 7.25-16 16v162.9c-18.62 6.625-32 24.25-32 45.13c0 26.5 21.5 48 48 48s48-21.5 48-48C208 347.1 194.6 329.5 176 322.9zM272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448z\"],\n    \"tenge-sign\": [384, 512, [8376, \"tenge\"], \"f7d7\", \"M0 64C0 46.33 14.33 32 32 32H352C369.7 32 384 46.33 384 64C384 81.67 369.7 96 352 96H32C14.33 96 0 81.67 0 64zM0 192C0 174.3 14.33 160 32 160H352C369.7 160 384 174.3 384 192C384 209.7 369.7 224 352 224H224V448C224 465.7 209.7 480 192 480C174.3 480 160 465.7 160 448V224H32C14.33 224 0 209.7 0 192z\"],\n    \"terminal\": [576, 512, [], \"f120\", \"M9.372 86.63C-3.124 74.13-3.124 53.87 9.372 41.37C21.87 28.88 42.13 28.88 54.63 41.37L246.6 233.4C259.1 245.9 259.1 266.1 246.6 278.6L54.63 470.6C42.13 483.1 21.87 483.1 9.372 470.6C-3.124 458.1-3.124 437.9 9.372 425.4L178.7 256L9.372 86.63zM544 416C561.7 416 576 430.3 576 448C576 465.7 561.7 480 544 480H256C238.3 480 224 465.7 224 448C224 430.3 238.3 416 256 416H544z\"],\n    \"text-height\": [576, 512, [], \"f034\", \"M288 32.01H32c-17.67 0-32 14.31-32 32v64c0 17.69 14.33 32 32 32s32-14.31 32-32v-32h64v320H96c-17.67 0-32 14.31-32 32s14.33 32 32 32h128c17.67 0 32-14.31 32-32s-14.33-32-32-32H192v-320h64v32c0 17.69 14.33 32 32 32s32-14.31 32-32v-64C320 46.33 305.7 32.01 288 32.01zM521.4 361.4L512 370.8V141.3l9.375 9.375C527.6 156.9 535.8 160 544 160s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25l-64-64c-12.5-12.5-32.75-12.5-45.25 0l-64 64c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0L448 141.3v229.5l-9.375-9.375c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l64 64C463.6 476.9 471.8 480 480 480s16.38-3.118 22.62-9.368l64-64c12.5-12.5 12.5-32.75 0-45.25S533.9 348.9 521.4 361.4z\"],\n    \"text-slash\": [640, 512, [\"remove-format\"], \"f87d\", \"M352 416H306.7l18.96-64.1L271.4 308.5L239.1 416H192c-17.67 0-32 14.31-32 32s14.33 31.99 31.1 31.99h160C369.7 480 384 465.7 384 448S369.7 416 352 416zM630.8 469.1l-276.4-216.7l45.63-156.5H512v32c0 17.69 14.33 32 32 32s32-14.31 32-32v-64c0-17.69-14.33-32-32-32H192c-17.67 0-32 14.31-32 32v36.11L38.81 5.13c-10.47-8.219-25.53-6.37-33.7 4.068s-6.349 25.54 4.073 33.69l591.1 463.1c4.406 3.469 9.61 5.127 14.8 5.127c7.125 0 14.17-3.164 18.9-9.195C643.1 492.4 641.2 477.3 630.8 469.1zM300.1 209.9l-82.08-64.33C221.5 140.5 224 134.7 224 128v-32h109.3L300.1 209.9z\"],\n    \"text-width\": [448, 512, [], \"f035\", \"M416 32.01H32c-17.67 0-32 14.31-32 32v63.1c0 17.69 14.33 32 32 32s32-14.31 32-32v-32h128v128H176c-17.67 0-32 14.31-32 31.1s14.33 32 32 32h96c17.67 0 32-14.31 32-32s-14.33-31.1-32-31.1H256v-128h128v32c0 17.69 14.33 32 32 32s32-14.32 32-32V64.01C448 46.33 433.7 32.01 416 32.01zM374.6 297.4c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l9.375 9.375h-229.5L118.6 342.6c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0l-64 64c-12.5 12.5-12.5 32.75 0 45.25l64 64C79.63 476.9 87.81 480 96 480s16.38-3.118 22.62-9.368c12.5-12.5 12.5-32.75 0-45.25l-9.375-9.375h229.5l-9.375 9.375c-12.5 12.5-12.5 32.75 0 45.25C335.6 476.9 343.8 480 352 480s16.38-3.118 22.62-9.368l64-64c12.5-12.5 12.5-32.75 0-45.25L374.6 297.4z\"],\n    \"thermometer\": [512, 512, [], \"f491\", \"M483.1 162.6L229.8 415.9l-99.87-.0001l-88.99 89.02c-9.249 9.377-24.5 9.377-33.87 0c-9.374-9.252-9.374-24.51 0-33.88l88.99-89.02l.0003-100.9l49.05-49.39l51.6 51.59c3.125 3.126 7.218 4.688 11.31 4.688s8.187-1.563 11.31-4.688c6.249-6.252 6.249-16.38 0-22.63L167.6 209.1l41.24-41.52l51.81 51.81c3.125 3.126 7.218 4.688 11.31 4.688s8.187-1.563 11.31-4.688c6.249-6.252 6.249-16.38 0-22.63L231.4 144.8l41.24-41.52l52.02 52.02c3.125 3.126 7.218 4.688 11.31 4.688s8.187-1.563 11.31-4.688c6.249-6.252 6.249-16.38 0-22.63l-52.09-52.09l49.68-50.02c36.37-36.51 94.37-40.88 131.9-10.25C526.2 61.11 518.9 127.8 483.1 162.6z\"],\n    \"thumbs-down\": [512, 512, [61576, 128078], \"f165\", \"M96 32.04H32c-17.67 0-32 14.32-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64c17.67 0 32-14.33 32-31.1V64.03C128 46.36 113.7 32.04 96 32.04zM467.3 240.2C475.1 231.7 480 220.4 480 207.9c0-23.47-16.87-42.92-39.14-47.09C445.3 153.6 448 145.1 448 135.1c0-21.32-14-39.18-33.25-45.43C415.5 87.12 416 83.61 416 79.98C416 53.47 394.5 32 368 32h-58.69c-34.61 0-68.28 11.22-95.97 31.98L179.2 89.57C167.1 98.63 160 112.9 160 127.1l.1074 160c0 0-.0234-.0234 0 0c.0703 13.99 6.123 27.94 17.91 37.36l16.3 13.03C276.2 403.9 239.4 480 302.5 480c30.96 0 49.47-24.52 49.47-48.11c0-15.15-11.76-58.12-34.52-96.02H464c26.52 0 48-21.47 48-47.98C512 262.5 492.2 241.9 467.3 240.2z\"],\n    \"thumbs-up\": [512, 512, [61575, 128077], \"f164\", \"M128 447.1V223.1c0-17.67-14.33-31.1-32-31.1H32c-17.67 0-32 14.33-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64C113.7 479.1 128 465.6 128 447.1zM512 224.1c0-26.5-21.48-47.98-48-47.98h-146.5c22.77-37.91 34.52-80.88 34.52-96.02C352 56.52 333.5 32 302.5 32c-63.13 0-26.36 76.15-108.2 141.6L178 186.6C166.2 196.1 160.2 210 160.1 224c-.0234 .0234 0 0 0 0L160 384c0 15.1 7.113 29.33 19.2 38.39l34.14 25.59C241 468.8 274.7 480 309.3 480H368c26.52 0 48-21.47 48-47.98c0-3.635-.4805-7.143-1.246-10.55C434 415.2 448 397.4 448 376c0-9.148-2.697-17.61-7.139-24.88C463.1 347 480 327.5 480 304.1c0-12.5-4.893-23.78-12.72-32.32C492.2 270.1 512 249.5 512 224.1z\"],\n    \"thumbtack\": [384, 512, [128392, 128204, \"thumb-tack\"], \"f08d\", \"M32 32C32 14.33 46.33 0 64 0H320C337.7 0 352 14.33 352 32C352 49.67 337.7 64 320 64H290.5L301.9 212.2C338.6 232.1 367.5 265.4 381.4 306.9L382.4 309.9C385.6 319.6 383.1 330.4 377.1 338.7C371.9 347.1 362.3 352 352 352H32C21.71 352 12.05 347.1 6.04 338.7C.0259 330.4-1.611 319.6 1.642 309.9L2.644 306.9C16.47 265.4 45.42 232.1 82.14 212.2L93.54 64H64C46.33 64 32 49.67 32 32zM224 384V480C224 497.7 209.7 512 192 512C174.3 512 160 497.7 160 480V384H224z\"],\n    \"ticket\": [576, 512, [127903], \"f145\", \"M128 160H448V352H128V160zM512 64C547.3 64 576 92.65 576 128V208C549.5 208 528 229.5 528 256C528 282.5 549.5 304 576 304V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V304C26.51 304 48 282.5 48 256C48 229.5 26.51 208 0 208V128C0 92.65 28.65 64 64 64H512zM96 352C96 369.7 110.3 384 128 384H448C465.7 384 480 369.7 480 352V160C480 142.3 465.7 128 448 128H128C110.3 128 96 142.3 96 160V352z\"],\n    \"ticket-simple\": [576, 512, [\"ticket-alt\"], \"f3ff\", \"M0 128C0 92.65 28.65 64 64 64H512C547.3 64 576 92.65 576 128V208C549.5 208 528 229.5 528 256C528 282.5 549.5 304 576 304V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V304C26.51 304 48 282.5 48 256C48 229.5 26.51 208 0 208V128z\"],\n    \"timeline\": [640, 512, [], \"e29c\", \"M160 224H480V169.3C451.7 156.1 432 128.8 432 96C432 51.82 467.8 16 512 16C556.2 16 592 51.82 592 96C592 128.8 572.3 156.1 544 169.3V224H608C625.7 224 640 238.3 640 256C640 273.7 625.7 288 608 288H352V342.7C380.3 355 400 383.2 400 416C400 460.2 364.2 496 320 496C275.8 496 240 460.2 240 416C240 383.2 259.7 355 288 342.7V288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H96V169.3C67.75 156.1 48 128.8 48 96C48 51.82 83.82 16 128 16C172.2 16 208 51.82 208 96C208 128.8 188.3 156.1 160 169.3V224zM128 120C141.3 120 152 109.3 152 96C152 82.75 141.3 72 128 72C114.7 72 104 82.75 104 96C104 109.3 114.7 120 128 120zM512 72C498.7 72 488 82.75 488 96C488 109.3 498.7 120 512 120C525.3 120 536 109.3 536 96C536 82.75 525.3 72 512 72zM320 440C333.3 440 344 429.3 344 416C344 402.7 333.3 392 320 392C306.7 392 296 402.7 296 416C296 429.3 306.7 440 320 440z\"],\n    \"toggle-off\": [576, 512, [], \"f204\", \"M192 352C138.1 352 96 309 96 256C96 202.1 138.1 160 192 160C245 160 288 202.1 288 256C288 309 245 352 192 352zM384 448H192C85.96 448 0 362 0 256C0 149.1 85.96 64 192 64H384C490 64 576 149.1 576 256C576 362 490 448 384 448zM384 128H192C121.3 128 64 185.3 64 256C64 326.7 121.3 384 192 384H384C454.7 384 512 326.7 512 256C512 185.3 454.7 128 384 128z\"],\n    \"toggle-on\": [576, 512, [], \"f205\", \"M384 64C490 64 576 149.1 576 256C576 362 490 448 384 448H192C85.96 448 0 362 0 256C0 149.1 85.96 64 192 64H384zM384 352C437 352 480 309 480 256C480 202.1 437 160 384 160C330.1 160 288 202.1 288 256C288 309 330.1 352 384 352z\"],\n    \"toilet\": [448, 512, [128701], \"f7d8\", \"M432 48C440.8 48 448 40.75 448 32V16C448 7.25 440.8 0 432 0h-416C7.25 0 0 7.25 0 16V32c0 8.75 7.25 16 16 16H32v158.7C11.82 221.2 0 237.1 0 256c0 60.98 33.28 115.2 84.1 150.4l-19.59 64.36C59.16 491.3 74.53 512 96.03 512h255.9c21.5 0 36.88-20.75 30.62-41.25L363 406.4C414.7 371.2 448 316.1 448 256c0-18.04-11.82-34.85-32-49.26V48H432zM96 72C96 67.63 99.63 64 104 64h48C156.4 64 160 67.63 160 72v16C160 92.38 156.4 96 152 96h-48C99.63 96 96 92.38 96 88V72zM224 288C135.6 288 64 273.7 64 256c0-17.67 71.63-32 160-32s160 14.33 160 32C384 273.7 312.4 288 224 288z\"],\n    \"toilet-paper\": [576, 512, [129531], \"f71e\", \"M127.1 0C74.98 0 31.98 86 31.98 192v172.1c0 41.12-9.751 62.75-31.13 126.9C-2.65 501.2 5.101 512 15.98 512h280.9c13.88 0 26-8.75 30.38-21.88c12.88-38.5 24.75-72.37 24.75-126L351.1 192c0-83.62 23.62-153.5 60.5-192H127.1zM95.99 224C87.11 224 79.99 216.9 79.99 208S87.11 192 95.99 192s16 7.125 16 16S104.9 224 95.99 224zM159.1 224c-8.875 0-16-7.125-16-16S151.1 192 159.1 192s16 7.125 16 16S168.9 224 159.1 224zM223.1 224C215.1 224 207.1 216.9 207.1 208S215.1 192 223.1 192c8.875 0 16 7.125 16 16S232.9 224 223.1 224zM287.1 224C279.1 224 271.1 216.9 271.1 208S279.1 192 287.1 192c8.875 0 16 7.125 16 16S296.9 224 287.1 224zM479.1 0c-53 0-96 86.06-96 192.1C383.1 298.1 426.1 384 479.1 384S576 298 576 192C576 86 532.1 0 479.1 0zM479.1 256c-17.63 0-32-28.62-32-64s14.38-64 32-64c17.63 0 32 28.62 32 64S497.6 256 479.1 256z\"],\n    \"toilet-paper-slash\": [640, 512, [], \"e072\", \"M63.98 191.1v172.1c0 41.12-9.75 62.75-31.13 126.9c-3.5 10.25 4.25 20.1 15.13 20.1l280.9-.0059c13.87 0 25.1-8.75 30.37-21.87c10.08-30.15 19.46-57.6 23.1-93.78L66.51 148.8C64.9 162.7 63.98 177.1 63.98 191.1zM630.8 469.1l-109.8-86.02c48.75-9.144 86.94-91.2 86.94-191.1C607.1 86 564.1 0 511.1 0s-96 86-96 191.1c0 49.25 9.362 94.03 24.62 128l-56.62-44.38l.0049-83.65c0-83.62 23.62-153.5 60.5-191.1H159.1C135.2 0 112.7 18.93 95.72 49.72L38.81 5.109C34.41 1.672 29.19 0 24.03 0c-7.125 0-14.19 3.156-18.91 9.187C-3.061 19.62-1.249 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1zM479.1 191.1c0-35.37 14.37-64 32-64c17.62 0 32 28.63 32 64S529.6 255.1 511.1 255.1C494.4 255.1 479.1 227.4 479.1 191.1z\"],\n    \"toolbox\": [512, 512, [129520], \"f552\", \"M502.6 182.6l-45.25-45.25C451.4 131.4 443.3 128 434.8 128H384V80C384 53.5 362.5 32 336 32h-160C149.5 32 128 53.5 128 80V128H77.25c-8.5 0-16.62 3.375-22.62 9.375L9.375 182.6C3.375 188.6 0 196.8 0 205.3V304h128v-32C128 263.1 135.1 256 144 256h32C184.9 256 192 263.1 192 272v32h128v-32C320 263.1 327.1 256 336 256h32C376.9 256 384 263.1 384 272v32h128V205.3C512 196.8 508.6 188.6 502.6 182.6zM336 128h-160V80h160V128zM384 368c0 8.875-7.125 16-16 16h-32c-8.875 0-16-7.125-16-16v-32H192v32C192 376.9 184.9 384 176 384h-32C135.1 384 128 376.9 128 368v-32H0V448c0 17.62 14.38 32 32 32h448c17.62 0 32-14.38 32-32v-112h-128V368z\"],\n    \"tooth\": [448, 512, [129463], \"f5c9\", \"M394.1 212.8c-20.04 27.67-28.07 60.15-31.18 93.95c-3.748 41.34-8.785 82.46-17.89 122.8l-6.75 29.64c-2.68 12.14-13.29 20.78-25.39 20.78c-12 0-22.39-8.311-25.29-20.23l-29.57-121.2C254.1 322.6 240.1 311.4 224 311.4c-16.18 0-30.21 11.26-34.07 27.23l-29.57 121.2c-2.893 11.92-13.39 20.23-25.29 20.23c-12.21 0-22.71-8.639-25.5-20.78l-6.643-29.64c-9.105-40.36-14.14-81.48-17.1-122.8C81.93 272.1 73.9 240.5 53.86 212.8c-18.75-25.92-27.11-60.15-18.43-96.57c9.428-39.59 40.39-71.75 78.85-82.03c20.14-5.25 39.54-.4375 57.32 9.077l86.14 56.54c6.643 4.375 15.11 1.86 18.96-4.264c4.07-6.454 2.25-15.09-4.18-19.36l-24.21-15.86c3-1.531 6.215-2.735 9-4.813c22.39-16.84 48.75-28.65 76.39-21.33c38.46 10.28 69.43 42.43 78.85 82.03C421.2 152.7 412.9 187 394.1 212.8z\"],\n    \"torii-gate\": [512, 512, [9961], \"f6a1\", \"M0 80V0L71.37 23.79C87.68 29.23 104.8 32 121.1 32H390C407.2 32 424.3 29.23 440.6 23.79L512 0V80C512 106.5 490.5 128 464 128H448V192H384V128H288V192H224V128H128V192H64V128H48C21.49 128 0 106.5 0 80zM32 288C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H448V480C448 497.7 433.7 512 416 512C398.3 512 384 497.7 384 480V288H128V480C128 497.7 113.7 512 96 512C78.33 512 64 497.7 64 480V288H32z\"],\n    \"tower-broadcast\": [576, 512, [\"broadcast-tower\"], \"f519\", \"M160.9 59.01C149.3 52.6 134.7 56.76 128.3 68.39C117.6 87.6 112 109.4 112 131.4c0 19.03 4.031 37.44 11.98 54.62c4.047 8.777 12.73 13.93 21.8 13.93c3.375 0 6.797-.7187 10.05-2.219C167.9 192.2 173.1 177.1 167.5 165.9C162.5 155.1 160 143.5 160 131.4c0-13.93 3.547-27.69 10.25-39.81C176.7 80.04 172.5 65.42 160.9 59.01zM62.61 2.363C46.17-4.32 27.58 3.676 20.95 20.02C7.047 54.36 0 90.69 0 127.1C0 165.3 7.047 201.7 20.95 236C25.98 248.5 37.97 256 50.63 256C54.61 256 58.69 255.3 62.61 253.7C79 247 86.91 228.4 80.27 212C69.47 185.3 64 157.1 64 128c0-29.06 5.469-57.3 16.27-83.99C86.91 27.64 79 8.988 62.61 2.363zM555 20.02c-6.609-16.41-25.23-24.31-41.66-17.66c-16.39 6.625-24.3 25.28-17.66 41.65C506.5 70.7 512 98.95 512 128c0 29.06-5.469 57.31-16.27 83.1C489.1 228.4 497 247 513.4 253.7C517.3 255.3 521.4 256 525.4 256c12.66 0 24.64-7.562 29.67-20C568.1 201.7 576 165.3 576 127.1C576 90.69 568.1 54.36 555 20.02zM420.2 58.23c-12.03 5.562-17.28 19.81-11.72 31.84C413.5 100.9 416 112.5 416 124.6c0 13.94-3.547 27.69-10.25 39.81c-6.422 11.59-2.219 26.22 9.375 32.62c3.688 2.031 7.672 3 11.61 3c8.438 0 16.64-4.47 21.02-12.37C458.4 168.4 464 146.6 464 124.6c0-19.03-4.031-37.43-11.98-54.62C446.5 57.89 432.1 52.7 420.2 58.23zM301.8 65.45C260.5 56.78 224 88.13 224 128c0 23.63 12.95 44.04 32 55.12v296.9c0 17.67 14.33 32 32 32s32-14.33 32-32V183.1c23.25-13.54 37.42-40.96 30.03-71.18C344.4 88.91 325 70.31 301.8 65.45z\"],\n    \"tractor\": [640, 512, [128668], \"f722\", \"M96 64C96 28.65 124.7 0 160 0H266.3C292.5 0 316 15.93 325.8 40.23L373.7 160H480V126.2C480 101.4 485.8 76.88 496.9 54.66L499.4 49.69C507.3 33.88 526.5 27.47 542.3 35.38C558.1 43.28 564.5 62.5 556.6 78.31L554.1 83.28C547.5 96.61 544 111.3 544 126.2V160H600C622.1 160 640 177.9 640 200V245.4C640 261.9 631.5 277.3 617.4 286.1L574.1 313.2C559.9 307.3 544.3 304 528 304C488.7 304 453.9 322.9 431.1 352H352C352 369.7 337.7 384 320 384H311.8C310.1 388.8 308.2 393.5 305.1 398.1L311.8 403.9C324.3 416.4 324.3 436.6 311.8 449.1L289.1 471.8C276.6 484.3 256.4 484.3 243.9 471.8L238.1 465.1C233.5 468.2 228.8 470.1 224 471.8V480C224 497.7 209.7 512 192 512H160C142.3 512 128 497.7 128 480V471.8C123.2 470.1 118.5 468.2 113.9 465.1L108.1 471.8C95.62 484.3 75.36 484.3 62.86 471.8L40.24 449.1C27.74 436.6 27.74 416.4 40.24 403.9L46.03 398.1C43.85 393.5 41.9 388.8 40.19 384H32C14.33 384 0 369.7 0 352V320C0 302.3 14.33 288 32 288H40.19C41.9 283.2 43.85 278.5 46.03 273.9L40.24 268.1C27.74 255.6 27.74 235.4 40.24 222.9L62.86 200.2C71.82 191.3 84.78 188.7 96 192.6L96 64zM160 64V160H304.7L266.3 64H160zM176 256C131.8 256 96 291.8 96 336C96 380.2 131.8 416 176 416C220.2 416 256 380.2 256 336C256 291.8 220.2 256 176 256zM440 424C440 394.2 454.8 367.9 477.4 352C491.7 341.9 509.2 336 528 336C530.7 336 533.3 336.1 535.9 336.3C580.8 340.3 616 378.1 616 424C616 472.6 576.6 512 528 512C479.4 512 440 472.6 440 424zM528 448C541.3 448 552 437.3 552 424C552 410.7 541.3 400 528 400C514.7 400 504 410.7 504 424C504 437.3 514.7 448 528 448z\"],\n    \"trademark\": [640, 512, [8482], \"f25c\", \"M618.1 97.67c-13.02-4.375-27.45 .1562-35.72 11.16L464 266.7l-118.4-157.8c-8.266-11.03-22.64-15.56-35.72-11.16C296.8 102 288 114.2 288 128v256c0 17.69 14.33 32 32 32s32-14.31 32-32v-160l86.41 115.2c12.06 16.12 39.13 16.12 51.19 0L576 224v160c0 17.69 14.33 32 32 32s32-14.31 32-32v-256C640 114.2 631.2 102 618.1 97.67zM224 96.01H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h64v223.1c0 17.69 14.33 31.99 32 31.99s32-14.3 32-31.99V160h64c17.67 0 32-14.31 32-32S241.7 96.01 224 96.01z\"],\n    \"traffic-light\": [320, 512, [128678], \"f637\", \"M256 0C291.3 0 320 28.65 320 64V352C320 440.4 248.4 512 160 512C71.63 512 0 440.4 0 352V64C0 28.65 28.65 0 64 0H256zM160 320C133.5 320 112 341.5 112 368C112 394.5 133.5 416 160 416C186.5 416 208 394.5 208 368C208 341.5 186.5 320 160 320zM160 288C186.5 288 208 266.5 208 240C208 213.5 186.5 192 160 192C133.5 192 112 213.5 112 240C112 266.5 133.5 288 160 288zM160 64C133.5 64 112 85.49 112 112C112 138.5 133.5 160 160 160C186.5 160 208 138.5 208 112C208 85.49 186.5 64 160 64z\"],\n    \"trailer\": [640, 512, [], \"e041\", \"M496 32C522.5 32 544 53.49 544 80V320H608C625.7 320 640 334.3 640 352C640 369.7 625.7 384 608 384H286.9C279.1 329.7 232.4 288 176 288C119.6 288 72.9 329.7 65.13 384H48C21.49 384 0 362.5 0 336V80C0 53.49 21.49 32 48 32H496zM64 112V264.2C73.83 256.1 84.55 249 96 243.2V112C96 103.2 88.84 96 80 96C71.16 96 64 103.2 64 112V112zM176 224C181.4 224 186.7 224.2 192 224.7V112C192 103.2 184.8 96 176 96C167.2 96 160 103.2 160 112V224.7C165.3 224.2 170.6 224 176 224zM256 243.2C267.4 249 278.2 256.1 288 264.2V112C288 103.2 280.8 96 272 96C263.2 96 256 103.2 256 112V243.2zM352 112V304C352 312.8 359.2 320 368 320C376.8 320 384 312.8 384 304V112C384 103.2 376.8 96 368 96C359.2 96 352 103.2 352 112zM480 112C480 103.2 472.8 96 464 96C455.2 96 448 103.2 448 112V304C448 312.8 455.2 320 464 320C472.8 320 480 312.8 480 304V112zM96 400C96 355.8 131.8 320 176 320C220.2 320 256 355.8 256 400C256 444.2 220.2 480 176 480C131.8 480 96 444.2 96 400zM176 432C193.7 432 208 417.7 208 400C208 382.3 193.7 368 176 368C158.3 368 144 382.3 144 400C144 417.7 158.3 432 176 432z\"],\n    \"train\": [448, 512, [128646], \"f238\", \"M352 0C405 0 448 42.98 448 96V352C448 399.1 412.8 439.7 366.9 446.9L412.9 492.9C419.9 499.9 414.9 512 404.1 512H365.3C356.8 512 348.6 508.6 342.6 502.6L288 448H160L105.4 502.6C99.37 508.6 91.23 512 82.75 512H43.04C33.06 512 28.06 499.9 35.12 492.9L81.14 446.9C35.18 439.7 0 399.1 0 352V96C0 42.98 42.98 0 96 0H352zM64 192C64 209.7 78.33 224 96 224H352C369.7 224 384 209.7 384 192V96C384 78.33 369.7 64 352 64H96C78.33 64 64 78.33 64 96V192zM224 384C250.5 384 272 362.5 272 336C272 309.5 250.5 288 224 288C197.5 288 176 309.5 176 336C176 362.5 197.5 384 224 384z\"],\n    \"train-subway\": [448, 512, [\"subway\"], \"f239\", \"M352 0C405 0 448 42.98 448 96V352C448 399.1 412.8 439.7 366.9 446.9L412.9 492.9C419.9 499.9 414.9 512 404.1 512H365.3C356.8 512 348.6 508.6 342.6 502.6L288 448H160L105.4 502.6C99.37 508.6 91.23 512 82.75 512H43.04C33.06 512 28.06 499.9 35.12 492.9L81.14 446.9C35.18 439.7 0 399.1 0 352V96C0 42.98 42.98 0 96 0H352zM64 224C64 241.7 78.33 256 96 256H176C193.7 256 208 241.7 208 224V128C208 110.3 193.7 96 176 96H96C78.33 96 64 110.3 64 128V224zM272 96C254.3 96 240 110.3 240 128V224C240 241.7 254.3 256 272 256H352C369.7 256 384 241.7 384 224V128C384 110.3 369.7 96 352 96H272zM96 320C78.33 320 64 334.3 64 352C64 369.7 78.33 384 96 384C113.7 384 128 369.7 128 352C128 334.3 113.7 320 96 320zM352 384C369.7 384 384 369.7 384 352C384 334.3 369.7 320 352 320C334.3 320 320 334.3 320 352C320 369.7 334.3 384 352 384z\"],\n    \"train-tram\": [448, 512, [128650, \"tram\"], \"f7da\", \"M86.76 48C74.61 48 63.12 53.52 55.53 63.01L42.74 78.99C34.46 89.34 19.36 91.02 9.007 82.74C-1.343 74.46-3.021 59.36 5.259 49.01L18.04 33.03C34.74 12.15 60.03 0 86.76 0H361.2C387.1 0 413.3 12.15 429.1 33.03L442.7 49.01C451 59.36 449.3 74.46 438.1 82.74C428.6 91.02 413.5 89.34 405.3 78.99L392.5 63.01C384.9 53.52 373.4 48 361.2 48H248V96H288C341 96 384 138.1 384 192V352C384 382.6 369.7 409.8 347.4 427.4L412.9 492.9C419.9 499.9 414.9 512 404.1 512H365.3C356.8 512 348.6 508.6 342.6 502.6L288 448H160L105.4 502.6C99.37 508.6 91.23 512 82.74 512H43.04C33.06 512 28.06 499.9 35.12 492.9L100.6 427.4C78.3 409.8 64 382.6 64 352V192C64 138.1 106.1 96 160 96H200V48H86.76zM160 160C142.3 160 128 174.3 128 192V224C128 241.7 142.3 256 160 256H288C305.7 256 320 241.7 320 224V192C320 174.3 305.7 160 288 160H160zM160 320C142.3 320 128 334.3 128 352C128 369.7 142.3 384 160 384C177.7 384 192 369.7 192 352C192 334.3 177.7 320 160 320zM288 384C305.7 384 320 369.7 320 352C320 334.3 305.7 320 288 320C270.3 320 256 334.3 256 352C256 369.7 270.3 384 288 384z\"],\n    \"transgender\": [512, 512, [9895, \"transgender-alt\"], \"f225\", \"M498.6 .0003h-94.37c-17.96 0-26.95 21.71-14.25 34.41L411.1 55.61l-67.01 67.01C318.8 105.9 288.6 96 256 96S193.2 105.9 167.9 122.6L151.6 106.3l6.061-6.062c6.25-6.248 6.25-16.38 0-22.63L146.3 66.34c-6.25-6.248-16.38-6.248-22.63 0L117.7 72.41L100.9 55.61L122.1 34.41c12.7-12.7 3.703-34.41-14.25-34.41H13.44C6.016 .0003 0 6.016 0 13.44v94.37c0 17.96 21.71 26.95 34.41 14.25l21.2-21.2l16.8 16.8L66.35 123.7c-6.25 6.248-6.25 16.38 0 22.63l11.31 11.31c6.25 6.248 16.38 6.248 22.63 0l6.061-6.061L122.6 167.9C105.9 193.2 96 223.4 96 256c0 77.4 54.97 141.9 128 156.8v19.23l-16-.0014c-8.836 0-16 7.165-16 16v15.1c0 8.836 7.164 16 16 16L224 480v16c0 8.836 7.164 16 16 16h32c8.836 0 16-7.164 16-16v-16l16-.0001c8.836 0 16-7.164 16-16v-15.1c0-8.836-7.164-16-16-16L288 432v-19.23c73.03-14.83 128-79.37 128-156.8c0-32.6-9.867-62.85-26.61-88.14l67.01-67.01l21.2 21.2C490.3 134.8 512 125.8 512 107.8V13.44C512 6.016 505.1 .0003 498.6 .0003zM256 336c-44.11 0-80-35.89-80-80c0-44.11 35.89-80 80-80c44.11 0 80 35.89 80 80C336 300.1 300.1 336 256 336z\"],\n    \"trash\": [448, 512, [], \"f1f8\", \"M135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69zM394.8 466.1C393.2 492.3 372.3 512 346.9 512H101.1C75.75 512 54.77 492.3 53.19 466.1L31.1 128H416L394.8 466.1z\"],\n    \"trash-arrow-up\": [448, 512, [\"trash-restore\"], \"f829\", \"M284.2 0C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2zM31.1 128H416L394.8 466.1C393.2 492.3 372.3 512 346.9 512H101.1C75.75 512 54.77 492.3 53.19 466.1L31.1 128zM207 199L127 279C117.7 288.4 117.7 303.6 127 312.1C136.4 322.3 151.6 322.3 160.1 312.1L199.1 273.9V408C199.1 421.3 210.7 432 223.1 432C237.3 432 248 421.3 248 408V273.9L287 312.1C296.4 322.3 311.6 322.3 320.1 312.1C330.3 303.6 330.3 288.4 320.1 279L240.1 199C236.5 194.5 230.4 191.1 223.1 191.1C217.6 191.1 211.5 194.5 207 199V199z\"],\n    \"trash-can\": [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69zM31.1 128H416V448C416 483.3 387.3 512 352 512H95.1C60.65 512 31.1 483.3 31.1 448V128zM111.1 208V432C111.1 440.8 119.2 448 127.1 448C136.8 448 143.1 440.8 143.1 432V208C143.1 199.2 136.8 192 127.1 192C119.2 192 111.1 199.2 111.1 208zM207.1 208V432C207.1 440.8 215.2 448 223.1 448C232.8 448 240 440.8 240 432V208C240 199.2 232.8 192 223.1 192C215.2 192 207.1 199.2 207.1 208zM304 208V432C304 440.8 311.2 448 320 448C328.8 448 336 440.8 336 432V208C336 199.2 328.8 192 320 192C311.2 192 304 199.2 304 208z\"],\n    \"trash-can-arrow-up\": [448, 512, [\"trash-restore-alt\"], \"f82a\", \"M284.2 0C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2zM31.1 128H416V448C416 483.3 387.3 512 352 512H95.1C60.65 512 31.1 483.3 31.1 448V128zM207 199L127 279C117.7 288.4 117.7 303.6 127 312.1C136.4 322.3 151.6 322.3 160.1 312.1L199.1 273.9V408C199.1 421.3 210.7 432 223.1 432C237.3 432 248 421.3 248 408V273.9L287 312.1C296.4 322.3 311.6 322.3 320.1 312.1C330.3 303.6 330.3 288.4 320.1 279L240.1 199C236.5 194.5 230.4 191.1 223.1 191.1C217.6 191.1 211.5 194.5 207 199V199z\"],\n    \"tree\": [448, 512, [127794], \"f1bb\", \"M413.8 447.1L256 448l0 31.99C256 497.7 241.8 512 224.1 512c-17.67 0-32.1-14.32-32.1-31.99l0-31.99l-158.9-.0099c-28.5 0-43.69-34.49-24.69-56.4l68.98-79.59H62.22c-25.41 0-39.15-29.8-22.67-49.13l60.41-70.85H89.21c-21.28 0-32.87-22.5-19.28-37.31l134.8-146.5c10.4-11.3 28.22-11.3 38.62-.0033l134.9 146.5c13.62 14.81 2.001 37.31-19.28 37.31h-10.77l60.35 70.86c16.46 19.34 2.716 49.12-22.68 49.12h-15.2l68.98 79.59C458.7 413.7 443.1 447.1 413.8 447.1z\"],\n    \"triangle-exclamation\": [512, 512, [9888, \"exclamation-triangle\", \"warning\"], \"f071\", \"M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z\"],\n    \"trophy\": [576, 512, [127942], \"f091\", \"M572.1 82.38C569.5 71.59 559.8 64 548.7 64h-100.8c.2422-12.45 .1078-23.7-.1559-33.02C447.3 13.63 433.2 0 415.8 0H160.2C142.8 0 128.7 13.63 128.2 30.98C127.1 40.3 127.8 51.55 128.1 64H27.26C16.16 64 6.537 71.59 3.912 82.38C3.1 85.78-15.71 167.2 37.07 245.9c37.44 55.82 100.6 95.03 187.5 117.4c18.7 4.805 31.41 22.06 31.41 41.37C256 428.5 236.5 448 212.6 448H208c-26.51 0-47.99 21.49-47.99 48c0 8.836 7.163 16 15.1 16h223.1c8.836 0 15.1-7.164 15.1-16c0-26.51-21.48-48-47.99-48h-4.644c-23.86 0-43.36-19.5-43.36-43.35c0-19.31 12.71-36.57 31.41-41.37c86.96-22.34 150.1-61.55 187.5-117.4C591.7 167.2 572.9 85.78 572.1 82.38zM77.41 219.8C49.47 178.6 47.01 135.7 48.38 112h80.39c5.359 59.62 20.35 131.1 57.67 189.1C137.4 281.6 100.9 254.4 77.41 219.8zM498.6 219.8c-23.44 34.6-59.94 61.75-109 81.22C426.9 243.1 441.9 171.6 447.2 112h80.39C528.1 135.7 526.5 178.7 498.6 219.8z\"],\n    \"truck\": [640, 512, [128666, 9951], \"f0d1\", \"M368 0C394.5 0 416 21.49 416 48V96H466.7C483.7 96 499.1 102.7 512 114.7L589.3 192C601.3 204 608 220.3 608 237.3V352C625.7 352 640 366.3 640 384C640 401.7 625.7 416 608 416H576C576 469 533 512 480 512C426.1 512 384 469 384 416H256C256 469 213 512 160 512C106.1 512 64 469 64 416H48C21.49 416 0 394.5 0 368V48C0 21.49 21.49 0 48 0H368zM416 160V256H544V237.3L466.7 160H416zM160 368C133.5 368 112 389.5 112 416C112 442.5 133.5 464 160 464C186.5 464 208 442.5 208 416C208 389.5 186.5 368 160 368zM480 464C506.5 464 528 442.5 528 416C528 389.5 506.5 368 480 368C453.5 368 432 389.5 432 416C432 442.5 453.5 464 480 464z\"],\n    \"truck-fast\": [640, 512, [\"shipping-fast\"], \"f48b\", \"M64 48C64 21.49 85.49 0 112 0H368C394.5 0 416 21.49 416 48V256H608V352C625.7 352 640 366.3 640 384C640 401.7 625.7 416 608 416H576C576 469 533 512 480 512C426.1 512 384 469 384 416H256C256 469 213 512 160 512C106.1 512 64 469 64 416V288H208C216.8 288 224 280.8 224 272C224 263.2 216.8 256 208 256H16C7.164 256 0 248.8 0 240C0 231.2 7.164 224 16 224H240C248.8 224 256 216.8 256 208C256 199.2 248.8 192 240 192H48C39.16 192 32 184.8 32 176C32 167.2 39.16 160 48 160H272C280.8 160 288 152.8 288 144C288 135.2 280.8 128 272 128H16C7.164 128 0 120.8 0 112C0 103.2 7.164 96 16 96H64V48zM160 464C186.5 464 208 442.5 208 416C208 389.5 186.5 368 160 368C133.5 368 112 389.5 112 416C112 442.5 133.5 464 160 464zM480 368C453.5 368 432 389.5 432 416C432 442.5 453.5 464 480 464C506.5 464 528 442.5 528 416C528 389.5 506.5 368 480 368zM466.7 160H400V96H466.7C483.7 96 499.1 102.7 512 114.7L589.3 192C601.3 204 608 220.3 608 237.3V288H544V237.3L466.7 160z\"],\n    \"truck-medical\": [640, 512, [128657, \"ambulance\"], \"f0f9\", \"M368 0C394.5 0 416 21.49 416 48V96H466.7C483.7 96 499.1 102.7 512 114.7L589.3 192C601.3 204 608 220.3 608 237.3V352C625.7 352 640 366.3 640 384C640 401.7 625.7 416 608 416H576C576 469 533 512 480 512C426.1 512 384 469 384 416H256C256 469 213 512 160 512C106.1 512 64 469 64 416H48C21.49 416 0 394.5 0 368V48C0 21.49 21.49 0 48 0H368zM416 160V256H544V237.3L466.7 160H416zM160 368C133.5 368 112 389.5 112 416C112 442.5 133.5 464 160 464C186.5 464 208 442.5 208 416C208 389.5 186.5 368 160 368zM480 464C506.5 464 528 442.5 528 416C528 389.5 506.5 368 480 368C453.5 368 432 389.5 432 416C432 442.5 453.5 464 480 464zM112 176C112 184.8 119.2 192 128 192H176V240C176 248.8 183.2 256 192 256H224C232.8 256 240 248.8 240 240V192H288C296.8 192 304 184.8 304 176V144C304 135.2 296.8 128 288 128H240V80C240 71.16 232.8 64 224 64H192C183.2 64 176 71.16 176 80V128H128C119.2 128 112 135.2 112 144V176z\"],\n    \"truck-monster\": [640, 512, [], \"f63b\", \"M419.2 25.6L496 128H576C593.7 128 608 142.3 608 160V224C625.7 224 640 238.3 640 256C640 273.7 625.7 287.1 608 288C578.8 249.1 532.3 224 480 224C427.7 224 381.2 249.1 351.1 288H288C258.8 249.1 212.3 224 160 224C107.7 224 61.18 249.1 31.99 288C14.32 287.1 0 273.7 0 256C0 238.3 14.33 224 32 224V160C32 142.3 46.33 128 64 128H224V48C224 21.49 245.5 0 272 0H368C388.1 0 407.1 9.484 419.2 25.6H419.2zM288 128H416L368 64H288V128zM168 256C180.1 256 190.1 264.9 191.8 276.6C199.4 278.8 206.7 281.9 213.5 285.6C222.9 278.5 236.3 279.3 244.9 287.8L256.2 299.1C264.7 307.7 265.5 321.1 258.4 330.5C262.1 337.3 265.2 344.6 267.4 352.2C279.1 353.9 288 363.9 288 376V392C288 404.1 279.1 414.1 267.4 415.8C265.2 423.4 262.1 430.7 258.4 437.5C265.5 446.9 264.7 460.3 256.2 468.9L244.9 480.2C236.3 488.7 222.9 489.5 213.5 482.4C206.7 486.1 199.4 489.2 191.8 491.4C190.1 503.1 180.1 512 167.1 512H151.1C139.9 512 129.9 503.1 128.2 491.4C120.6 489.2 113.3 486.1 106.5 482.4C97.09 489.5 83.7 488.7 75.15 480.2L63.83 468.9C55.28 460.3 54.53 446.9 61.58 437.5C57.85 430.7 54.81 423.4 52.57 415.8C40.94 414.1 31.1 404.1 31.1 392V376C31.1 363.9 40.94 353.9 52.57 352.2C54.81 344.6 57.85 337.3 61.58 330.5C54.53 321.1 55.28 307.7 63.83 299.1L75.15 287.8C83.7 279.3 97.09 278.5 106.5 285.6C113.3 281.9 120.6 278.8 128.2 276.6C129.9 264.9 139.9 255.1 151.1 255.1L168 256zM160 432C186.5 432 208 410.5 208 384C208 357.5 186.5 336 160 336C133.5 336 112 357.5 112 384C112 410.5 133.5 432 160 432zM448.2 276.6C449.9 264.9 459.9 256 472 256H488C500.1 256 510.1 264.9 511.8 276.6C519.4 278.8 526.7 281.9 533.5 285.6C542.9 278.5 556.3 279.3 564.9 287.8L576.2 299.1C584.7 307.7 585.5 321.1 578.4 330.5C582.1 337.3 585.2 344.6 587.4 352.2C599.1 353.9 608 363.9 608 376V392C608 404.1 599.1 414.1 587.4 415.8C585.2 423.4 582.1 430.7 578.4 437.5C585.5 446.9 584.7 460.3 576.2 468.9L564.9 480.2C556.3 488.7 542.9 489.5 533.5 482.4C526.7 486.1 519.4 489.2 511.8 491.4C510.1 503.1 500.1 512 488 512H472C459.9 512 449.9 503.1 448.2 491.4C440.6 489.2 433.3 486.1 426.5 482.4C417.1 489.5 403.7 488.7 395.1 480.2L383.8 468.9C375.3 460.3 374.5 446.9 381.6 437.5C377.9 430.7 374.8 423.4 372.6 415.8C360.9 414.1 352 404.1 352 392V376C352 363.9 360.9 353.9 372.6 352.2C374.8 344.6 377.9 337.3 381.6 330.5C374.5 321.1 375.3 307.7 383.8 299.1L395.1 287.8C403.7 279.3 417.1 278.5 426.5 285.6C433.3 281.9 440.6 278.8 448.2 276.6L448.2 276.6zM480 336C453.5 336 432 357.5 432 384C432 410.5 453.5 432 480 432C506.5 432 528 410.5 528 384C528 357.5 506.5 336 480 336z\"],\n    \"truck-moving\": [640, 512, [], \"f4df\", \"M416 32C451.3 32 480 60.65 480 96V144H528.8C545.6 144 561.5 151.5 572.2 164.5L630.1 236.4C636.8 243.5 640 252.5 640 261.7V352C640 369.7 625.7 384 608 384H606.4C607.4 389.2 608 394.5 608 400C608 444.2 572.2 480 528 480C483.8 480 448 444.2 448 400C448 394.5 448.6 389.2 449.6 384H286.4C287.4 389.2 288 394.5 288 400C288 444.2 252.2 480 208 480C181.8 480 158.6 467.4 144 448C129.4 467.4 106.2 480 80 480C35.82 480 0 444.2 0 400V96C0 60.65 28.65 32 64 32H416zM535 194.9C533.5 193.1 531.2 192 528.8 192H480V256H584.1L535 194.9zM528 432C545.7 432 560 417.7 560 400C560 382.3 545.7 368 528 368C510.3 368 496 382.3 496 400C496 417.7 510.3 432 528 432zM208 368C190.3 368 176 382.3 176 400C176 417.7 190.3 432 208 432C225.7 432 240 417.7 240 400C240 382.3 225.7 368 208 368zM80 432C97.67 432 112 417.7 112 400C112 382.3 97.67 368 80 368C62.33 368 48 382.3 48 400C48 417.7 62.33 432 80 432z\"],\n    \"truck-pickup\": [640, 512, [128763], \"f63c\", \"M272 32H368.6C388.1 32 406.5 40.84 418.6 56.02L527.4 192H576C593.7 192 608 206.3 608 224V288C625.7 288 640 302.3 640 320C640 337.7 625.7 352 608 352H574.9C575.6 357.2 576 362.6 576 368C576 429.9 525.9 480 464 480C402.1 480 352 429.9 352 368C352 362.6 352.4 357.2 353.1 352H286.9C287.6 357.2 288 362.6 288 368C288 429.9 237.9 480 176 480C114.1 480 64 429.9 64 368C64 362.6 64.39 357.2 65.13 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288V224C32 206.3 46.33 192 64 192H224V80C224 53.49 245.5 32 272 32H272zM368.6 96H288V192H445.4L368.6 96zM176 416C202.5 416 224 394.5 224 368C224 341.5 202.5 320 176 320C149.5 320 128 341.5 128 368C128 394.5 149.5 416 176 416zM464 416C490.5 416 512 394.5 512 368C512 341.5 490.5 320 464 320C437.5 320 416 341.5 416 368C416 394.5 437.5 416 464 416z\"],\n    \"truck-ramp-box\": [640, 512, [\"truck-loading\"], \"f4de\", \"M640 .0003V400C640 461.9 589.9 512 528 512C467 512 417.5 463.3 416 402.7L48.41 502.9C31.36 507.5 13.77 497.5 9.126 480.4C4.48 463.4 14.54 445.8 31.59 441.1L352 353.8V64C352 28.65 380.7 0 416 0L640 .0003zM528 352C501.5 352 480 373.5 480 400C480 426.5 501.5 448 528 448C554.5 448 576 426.5 576 400C576 373.5 554.5 352 528 352zM23.11 207.7C18.54 190.6 28.67 173.1 45.74 168.5L92.1 156.1L112.8 233.4C115.1 241.9 123.9 246.1 132.4 244.7L163.3 236.4C171.8 234.1 176.9 225.3 174.6 216.8L153.9 139.5L200.3 127.1C217.4 122.5 234.9 132.7 239.5 149.7L280.9 304.3C285.5 321.4 275.3 338.9 258.3 343.5L103.7 384.9C86.64 389.5 69.1 379.3 64.52 362.3L23.11 207.7z\"],\n    \"tty\": [512, 512, [\"teletype\"], \"f1e4\", \"M271.1 364v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40c0-6.625-5.375-12-12-12h-40C277.3 352 271.1 357.4 271.1 364zM367.1 364v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40c0-6.625-5.375-12-12-12h-40C373.3 352 367.1 357.4 367.1 364zM275.1 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.376 12 12 12h39.1c6.625 0 12-5.375 12-12v-40C287.1 261.4 282.6 256 275.1 256zM83.96 448h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40C95.96 453.4 90.59 448 83.96 448zM175.1 364v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40c0-6.625-5.375-12-12-12h-40C181.3 352 175.1 357.4 175.1 364zM371.1 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.372 12 11.1 12h39.1c6.625 0 12-5.375 12-12v-40C383.1 261.4 378.6 256 371.1 256zM467.1 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.369 12 11.99 12h39.1c6.625 0 12.01-5.375 12.01-12v-40C479.1 261.4 474.6 256 467.1 256zM371.1 448h-232c-6.625 0-12 5.375-12 12v40c0 6.625 5.375 12 12 12h232c6.625 0 12-5.375 12-12v-40C383.1 453.4 378.6 448 371.1 448zM179.1 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.38 12 12 12h39.1c6.625 0 11.1-5.375 11.1-12v-40C191.1 261.4 186.6 256 179.1 256zM467.1 448h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40C479.1 453.4 474.6 448 467.1 448zM79.96 364v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40c0-6.625-5.375-12-12-12h-40C85.34 352 79.96 357.4 79.96 364zM83.96 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.383 12 12.01 12H83.97c6.625 0 11.99-5.375 11.99-12v-40C95.96 261.4 90.59 256 83.96 256zM504.9 102.9C367.7-34.31 144.3-34.32 7.083 102.9c-7.975 7.973-9.375 20.22-3.391 29.74l42.17 67.47c6.141 9.844 18.47 13.88 29.35 9.632l84.36-33.74C169.5 172.1 175.6 161.1 174.5 151.3l-5.303-53.27c56.15-19.17 117.4-19.17 173.6 .0059L337.5 151.3c-1.139 10.59 4.997 20.78 14.96 24.73l84.35 33.73c10.83 4.303 23.22 .1608 29.33-9.615l42.18-67.48C514.3 123.2 512.9 110.9 504.9 102.9z\"],\n    \"turkish-lira-sign\": [384, 512, [\"try\", \"turkish-lira\"], \"e2bb\", \"M96 32C113.7 32 128 46.33 128 64V99.29L247.2 65.23C264.2 60.38 281.9 70.22 286.8 87.21C291.6 104.2 281.8 121.9 264.8 126.8L128 165.9V195.3L247.2 161.2C264.2 156.4 281.9 166.2 286.8 183.2C291.6 200.2 281.8 217.9 264.8 222.8L128 261.9V416H191.8C260 416 316.2 362.5 319.6 294.4L320 286.4C320.9 268.8 335.9 255.2 353.6 256C371.2 256.9 384.8 271.9 383.1 289.6L383.6 297.6C378.5 399.8 294.1 480 191.8 480H96C78.33 480 64 465.7 64 448V280.1L40.79 286.8C23.8 291.6 6.087 281.8 1.232 264.8C-3.623 247.8 6.217 230.1 23.21 225.2L64 213.6V184.1L40.79 190.8C23.8 195.6 6.087 185.8 1.232 168.8C-3.623 151.8 6.216 134.1 23.21 129.2L64 117.6V64C64 46.33 78.33 32 96 32L96 32z\"],\n    \"turn-down\": [384, 512, [10549, \"level-down-alt\"], \"f3be\", \"M313.6 392.3l-104 112c-9.5 10.23-25.69 10.23-35.19 0l-104-112c-6.484-6.984-8.219-17.17-4.406-25.92S78.45 352 88 352H160V80C160 71.19 152.8 64 144 64H32C14.33 64 0 49.69 0 32s14.33-32 32-32h112C188.1 0 224 35.88 224 80V352h72c9.547 0 18.19 5.656 22 14.41S320.1 385.3 313.6 392.3z\"],\n    \"turn-up\": [384, 512, [10548, \"level-up-alt\"], \"f3bf\", \"M318 145.6c-3.812 8.75-12.45 14.41-22 14.41L224 160v272c0 44.13-35.89 80-80 80H32c-17.67 0-32-14.31-32-32s14.33-32 32-32h112C152.8 448 160 440.8 160 432V160L88 159.1c-9.547 0-18.19-5.656-22-14.41S63.92 126.7 70.41 119.7l104-112c9.498-10.23 25.69-10.23 35.19 0l104 112C320.1 126.7 321.8 136.8 318 145.6z\"],\n    \"tv\": [640, 512, [63717, \"television\", \"tv-alt\"], \"f26c\", \"M512 448H127.1C110.3 448 96 462.3 96 479.1S110.3 512 127.1 512h384C529.7 512 544 497.7 544 480S529.7 448 512 448zM592 0h-544C21.5 0 0 21.5 0 48v320C0 394.5 21.5 416 48 416h544c26.5 0 48-21.5 48-48v-320C640 21.5 618.5 0 592 0zM576 352H64v-288h512V352z\"],\n    \"u\": [384, 512, [117], \"55\", \"M384 64.01v225.7c0 104.1-86.13 190.3-192 190.3s-192-85.38-192-190.3V64.01C0 46.34 14.33 32.01 32 32.01S64 46.34 64 64.01v225.7c0 69.67 57.42 126.3 128 126.3s128-56.67 128-126.3V64.01c0-17.67 14.33-32 32-32S384 46.34 384 64.01z\"],\n    \"umbrella\": [576, 512, [], \"f0e9\", \"M255.1 301.7v130.3c0 8.814-7.188 16-16 16c-7.814 0-13.19-5.314-15.1-10.69c-5.906-16.72-24.1-25.41-40.81-19.5c-16.69 5.875-25.41 24.19-19.5 40.79C175.8 490.6 206.2 512 239.1 512C284.1 512 320 476.1 320 431.1v-130.3c-9.094-7.908-19.81-13.61-32-13.61C275.7 288.1 265.6 292.9 255.1 301.7zM575.7 280.9C547.1 144.5 437.3 62.61 320 49.91V32.01c0-17.69-14.31-32.01-32-32.01S255.1 14.31 255.1 32.01v17.91C138.3 62.61 29.48 144.5 .2949 280.9C-1.926 290.1 8.795 302.1 18.98 292.2c52-55.01 107.7-52.39 158.6 37.01c5.312 9.502 14.91 8.625 19.72 0C217.5 293.9 242.2 256 287.1 256c58.5 0 88.19 68.82 90.69 73.2c4.812 8.625 14.41 9.502 19.72 0c51-89.52 107.1-91.39 158.6-37.01C567.3 302.2 577.9 290.1 575.7 280.9z\"],\n    \"umbrella-beach\": [640, 512, [127958], \"f5ca\", \"M115.4 136.8l102.1 37.35c35.13-81.62 86.25-144.4 139-173.7c-95.88-4.875-188.8 36.96-248.5 111.7C101.2 120.6 105.2 133.2 115.4 136.8zM247.6 185l238.5 86.87c35.75-121.4 18.62-231.6-42.63-253.9c-7.375-2.625-15.12-4.062-23.12-4.062C362.4 13.88 292.1 83.13 247.6 185zM521.5 60.51c6.25 16.25 10.75 34.62 13.13 55.25c5.75 49.87-1.376 108.1-18.88 166.9l102.6 37.37c10.13 3.75 21.25-3.375 21.5-14.12C642.3 210.1 598 118.4 521.5 60.51zM528 448h-207l65-178.5l-60.13-21.87l-72.88 200.4H48C21.49 448 0 469.5 0 496C0 504.8 7.163 512 16 512h544c8.837 0 16-7.163 16-15.1C576 469.5 554.5 448 528 448z\"],\n    \"underline\": [448, 512, [], \"f0cd\", \"M416 448H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h384c17.69 0 32-14.31 32-32S433.7 448 416 448zM48 64.01H64v160c0 88.22 71.78 159.1 160 159.1s160-71.78 160-159.1v-160h16c17.69 0 32-14.32 32-32s-14.31-31.1-32-31.1l-96-.0049c-17.69 0-32 14.32-32 32s14.31 32 32 32H320v160c0 52.94-43.06 95.1-96 95.1S128 276.1 128 224v-160h16c17.69 0 32-14.31 32-32s-14.31-32-32-32l-96 .0049c-17.69 0-32 14.31-32 31.1S30.31 64.01 48 64.01z\"],\n    \"universal-access\": [512, 512, [], \"f29a\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM256 80c22.09 0 40 17.91 40 40S278.1 160 256 160S216 142.1 216 120S233.9 80 256 80zM374.6 215.1L315.3 232C311.6 233.1 307.8 233.6 304 234.4v62.32l30.64 87.34c4.391 12.5-2.188 26.19-14.69 30.59C317.3 415.6 314.6 416 312 416c-9.906 0-19.19-6.188-22.64-16.06l-25.85-70.65c-2.562-7.002-12.46-7.002-15.03 0l-25.85 70.65C219.2 409.8 209.9 416 200 416c-2.641 0-5.312-.4375-7.953-1.344c-12.5-4.406-19.08-18.09-14.69-30.59L208 296.7V234.4C204.2 233.6 200.4 233.1 196.7 232L137.4 215.1C124.7 211.4 117.3 198.2 120.9 185.4S137.9 165.2 150.6 168.9l59.25 16.94c30.17 8.623 62.15 8.623 92.31 0l59.25-16.94c12.7-3.781 26.02 3.719 29.67 16.47C394.7 198.2 387.3 211.4 374.6 215.1z\"],\n    \"unlock\": [448, 512, [128275], \"f09c\", \"M144 192H384C419.3 192 448 220.7 448 256V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V256C0 220.7 28.65 192 64 192H80V144C80 64.47 144.5 0 224 0C281.5 0 331 33.69 354.1 82.27C361.7 98.23 354.9 117.3 338.1 124.9C322.1 132.5 303.9 125.7 296.3 109.7C283.4 82.63 255.9 64 224 64C179.8 64 144 99.82 144 144L144 192z\"],\n    \"unlock-keyhole\": [448, 512, [\"unlock-alt\"], \"f13e\", \"M224 64C179.8 64 144 99.82 144 144V192H384C419.3 192 448 220.7 448 256V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V256C0 220.7 28.65 192 64 192H80V144C80 64.47 144.5 0 224 0C281.5 0 331 33.69 354.1 82.27C361.7 98.23 354.9 117.3 338.1 124.9C322.1 132.5 303.9 125.7 296.3 109.7C283.4 82.63 255.9 64 224 64H224zM256 384C273.7 384 288 369.7 288 352C288 334.3 273.7 320 256 320H192C174.3 320 160 334.3 160 352C160 369.7 174.3 384 192 384H256z\"],\n    \"up-down\": [256, 512, [11021, 8597, \"arrows-alt-v\"], \"f338\", \"M249.6 392.3l-104 112c-9.094 9.781-26.09 9.781-35.19 0l-103.1-112c-6.484-6.984-8.219-17.17-4.406-25.92S14.45 352 24 352H80V160H24C14.45 160 5.812 154.3 1.999 145.6C-1.813 136.8-.0781 126.7 6.406 119.7l104-112c9.094-9.781 26.09-9.781 35.19 0l104 112c6.484 6.984 8.219 17.17 4.406 25.92C250.2 154.3 241.5 160 232 160H176v192h56c9.547 0 18.19 5.656 22 14.41S256.1 385.3 249.6 392.3z\"],\n    \"up-down-left-right\": [512, 512, [\"arrows-alt\"], \"f0b2\", \"M512 256c0 6.797-2.891 13.28-7.938 17.84l-80 72C419.6 349.9 413.8 352 408 352c-3.312 0-6.625-.6875-9.766-2.078C389.6 346.1 384 337.5 384 328V288h-96v96l40-.0013c9.484 0 18.06 5.578 21.92 14.23s2.25 18.78-4.078 25.83l-72 80C269.3 509.1 262.8 512 255.1 512s-13.28-2.89-17.84-7.937l-71.1-80c-6.328-7.047-7.938-17.17-4.078-25.83s12.44-14.23 21.92-14.23l39.1 .0013V288H128v40c0 9.484-5.578 18.06-14.23 21.92C110.6 351.3 107.3 352 104 352c-5.812 0-11.56-2.109-16.06-6.156l-80-72C2.891 269.3 0 262.8 0 256s2.891-13.28 7.938-17.84l80-72C95 159.8 105.1 158.3 113.8 162.1C122.4 165.9 128 174.5 128 184V224h95.1V128l-39.1-.0013c-9.484 0-18.06-5.578-21.92-14.23S159.8 94.99 166.2 87.94l71.1-80c9.125-10.09 26.56-10.09 35.69 0l72 80c6.328 7.047 7.938 17.17 4.078 25.83s-12.44 14.23-21.92 14.23l-40 .0013V224H384V184c0-9.484 5.578-18.06 14.23-21.92c8.656-3.812 18.77-2.266 25.83 4.078l80 72C509.1 242.7 512 249.2 512 256z\"],\n    \"up-long\": [320, 512, [\"long-arrow-alt-up\"], \"f30c\", \"M285.1 145.7c-3.81 8.758-12.45 14.42-21.1 14.42L192 160.1V480c0 17.69-14.33 32-32 32s-32-14.31-32-32V160.1L55.1 160.1c-9.547 0-18.19-5.658-22-14.42c-3.811-8.758-2.076-18.95 4.408-25.94l104-112.1c9.498-10.24 25.69-10.24 35.19 0l104 112.1C288.1 126.7 289.8 136.9 285.1 145.7z\"],\n    \"up-right-and-down-left-from-center\": [512, 512, [\"expand-alt\"], \"f424\", \"M208 281.4c-12.5-12.5-32.76-12.5-45.26-.002l-78.06 78.07l-30.06-30.06c-6.125-6.125-14.31-9.367-22.63-9.367c-4.125 0-8.279 .7891-12.25 2.43c-11.97 4.953-19.75 16.62-19.75 29.56v135.1C.0013 501.3 10.75 512 24 512h136c12.94 0 24.63-7.797 29.56-19.75c4.969-11.97 2.219-25.72-6.938-34.87l-30.06-30.06l78.06-78.07c12.5-12.49 12.5-32.75 .002-45.25L208 281.4zM487.1 0h-136c-12.94 0-24.63 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.87l30.06 30.06l-78.06 78.07c-12.5 12.5-12.5 32.76 0 45.26l22.62 22.62c12.5 12.5 32.76 12.5 45.26 0l78.06-78.07l30.06 30.06c9.156 9.141 22.87 11.84 34.87 6.937C504.2 184.6 512 172.9 512 159.1V23.1C512 10.74 501.3 0 487.1 0z\"],\n    \"up-right-from-square\": [512, 512, [\"external-link-alt\"], \"f35d\", \"M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z\"],\n    \"upload\": [512, 512, [], \"f093\", \"M105.4 182.6c12.5 12.49 32.76 12.5 45.25 .001L224 109.3V352c0 17.67 14.33 32 32 32c17.67 0 32-14.33 32-32V109.3l73.38 73.38c12.49 12.49 32.75 12.49 45.25-.001c12.49-12.49 12.49-32.75 0-45.25l-128-128C272.4 3.125 264.2 0 256 0S239.6 3.125 233.4 9.375L105.4 137.4C92.88 149.9 92.88 170.1 105.4 182.6zM480 352h-160c0 35.35-28.65 64-64 64s-64-28.65-64-64H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96C512 366.3 497.7 352 480 352zM432 456c-13.2 0-24-10.8-24-24c0-13.2 10.8-24 24-24s24 10.8 24 24C456 445.2 445.2 456 432 456z\"],\n    \"user\": [448, 512, [62144, 128100], \"f007\", \"M224 256c70.7 0 128-57.31 128-128s-57.3-128-128-128C153.3 0 96 57.31 96 128S153.3 256 224 256zM274.7 304H173.3C77.61 304 0 381.6 0 477.3c0 19.14 15.52 34.67 34.66 34.67h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304z\"],\n    \"user-astronaut\": [448, 512, [], \"f4fb\", \"M176 448C167.3 448 160 455.3 160 464V512h32v-48C192 455.3 184.8 448 176 448zM272 448c-8.75 0-16 7.25-16 16s7.25 16 16 16s16-7.25 16-16S280.8 448 272 448zM164 172l8.205 24.62c1.215 3.645 6.375 3.645 7.59 0L188 172l24.62-8.203c3.646-1.219 3.646-6.375 0-7.594L188 148L179.8 123.4c-1.215-3.648-6.375-3.648-7.59 0L164 148L139.4 156.2c-3.646 1.219-3.646 6.375 0 7.594L164 172zM336.1 315.4C304 338.6 265.1 352 224 352s-80.03-13.43-112.1-36.59C46.55 340.2 0 403.3 0 477.3C0 496.5 15.52 512 34.66 512H128v-64c0-17.75 14.25-32 32-32h128c17.75 0 32 14.25 32 32v64h93.34C432.5 512 448 496.5 448 477.3C448 403.3 401.5 340.2 336.1 315.4zM64 224h13.5C102.3 280.5 158.4 320 224 320s121.8-39.5 146.5-96H384c8.75 0 16-7.25 16-16v-96C400 103.3 392.8 96 384 96h-13.5C345.8 39.5 289.6 0 224 0S102.3 39.5 77.5 96H64C55.25 96 48 103.3 48 112v96C48 216.8 55.25 224 64 224zM104 136C104 113.9 125.5 96 152 96h144c26.5 0 48 17.88 48 40V160c0 53-43 96-96 96h-48c-53 0-96-43-96-96V136z\"],\n    \"user-check\": [640, 512, [], \"f4fc\", \"M274.7 304H173.3C77.61 304 0 381.6 0 477.3C0 496.5 15.52 512 34.66 512H413.3C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM632.3 134.4c-9.703-9-24.91-8.453-33.92 1.266l-87.05 93.75l-38.39-38.39c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94l56 56C499.5 285.5 505.6 288 512 288h.4375c6.531-.125 12.72-2.891 17.16-7.672l104-112C642.6 158.6 642 143.4 632.3 134.4z\"],\n    \"user-clock\": [640, 512, [], \"f4fd\", \"M496 224c-79.63 0-144 64.38-144 144s64.38 144 144 144s144-64.38 144-144S575.6 224 496 224zM544 384h-54.25C484.4 384 480 379.6 480 374.3V304c0-8.836 7.164-16 16-16c8.838 0 16 7.164 16 16v48h32c8.838 0 16 7.164 16 15.1S552.8 384 544 384zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM320 368c0-19.3 3.221-37.82 8.961-55.2C311.9 307.2 293.6 304 274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512H395C349.7 480.2 320 427.6 320 368z\"],\n    \"user-doctor\": [448, 512, [\"user-md\"], \"f0f0\", \"M352 128C352 198.7 294.7 256 223.1 256C153.3 256 95.1 198.7 95.1 128C95.1 57.31 153.3 0 223.1 0C294.7 0 352 57.31 352 128zM287.1 362C260.4 369.1 239.1 394.2 239.1 424V448C239.1 452.2 241.7 456.3 244.7 459.3L260.7 475.3C266.9 481.6 277.1 481.6 283.3 475.3C289.6 469.1 289.6 458.9 283.3 452.7L271.1 441.4V424C271.1 406.3 286.3 392 303.1 392C321.7 392 336 406.3 336 424V441.4L324.7 452.7C318.4 458.9 318.4 469.1 324.7 475.3C330.9 481.6 341.1 481.6 347.3 475.3L363.3 459.3C366.3 456.3 368 452.2 368 448V424C368 394.2 347.6 369.1 320 362V308.8C393.5 326.7 448 392.1 448 472V480C448 497.7 433.7 512 416 512H32C14.33 512 0 497.7 0 480V472C0 393 54.53 326.7 128 308.8V370.3C104.9 377.2 88 398.6 88 424C88 454.9 113.1 480 144 480C174.9 480 200 454.9 200 424C200 398.6 183.1 377.2 160 370.3V304.2C162.7 304.1 165.3 304 168 304H280C282.7 304 285.3 304.1 288 304.2L287.1 362zM167.1 424C167.1 437.3 157.3 448 143.1 448C130.7 448 119.1 437.3 119.1 424C119.1 410.7 130.7 400 143.1 400C157.3 400 167.1 410.7 167.1 424z\"],\n    \"user-gear\": [640, 512, [\"user-cog\"], \"f4fe\", \"M425.1 482.6c-2.303-1.25-4.572-2.559-6.809-3.93l-7.818 4.493c-6.002 3.504-12.83 5.352-19.75 5.352c-10.71 0-21.13-4.492-28.97-12.75c-18.41-20.09-32.29-44.15-40.22-69.9c-5.352-18.06 2.343-36.87 17.83-45.24l8.018-4.669c-.0664-2.621-.0664-5.242 0-7.859l-7.655-4.461c-12.3-6.953-19.4-19.66-19.64-33.38C305.6 306.3 290.4 304 274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512H413.3c5.727 0 10.9-1.727 15.66-4.188c-2.271-4.984-3.86-10.3-3.86-16.06V482.6zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM610.5 373.3c2.625-14 2.625-28.5 0-42.5l25.75-15c3-1.625 4.375-5.125 3.375-8.5c-6.75-21.5-18.25-41.13-33.25-57.38c-2.25-2.5-6-3.125-9-1.375l-25.75 14.88c-10.88-9.25-23.38-16.5-36.88-21.25V212.3c0-3.375-2.5-6.375-5.75-7c-22.25-5-45-4.875-66.25 0c-3.25 .625-5.625 3.625-5.625 7v29.88c-13.5 4.75-26 12-36.88 21.25L394.4 248.5c-2.875-1.75-6.625-1.125-9 1.375c-15 16.25-26.5 35.88-33.13 57.38c-1 3.375 .3751 6.875 3.25 8.5l25.75 15c-2.5 14-2.5 28.5 0 42.5l-25.75 15c-3 1.625-4.25 5.125-3.25 8.5c6.625 21.5 18.13 41 33.13 57.38c2.375 2.5 6 3.125 9 1.375l25.88-14.88c10.88 9.25 23.38 16.5 36.88 21.25v29.88c0 3.375 2.375 6.375 5.625 7c22.38 5 45 4.875 66.25 0c3.25-.625 5.75-3.625 5.75-7v-29.88c13.5-4.75 26-12 36.88-21.25l25.75 14.88c2.875 1.75 6.75 1.125 9-1.375c15-16.25 26.5-35.88 33.25-57.38c1-3.375-.3751-6.875-3.375-8.5L610.5 373.3zM496 400.5c-26.75 0-48.5-21.75-48.5-48.5s21.75-48.5 48.5-48.5c26.75 0 48.5 21.75 48.5 48.5S522.8 400.5 496 400.5z\"],\n    \"user-graduate\": [512, 512, [], \"f501\", \"M45.63 79.75L52 81.25v58.5C45 143.9 40 151.3 40 160c0 8.375 4.625 15.38 11.12 19.75L35.5 242C33.75 248.9 37.63 256 43.13 256h41.75c5.5 0 9.375-7.125 7.625-13.1L76.88 179.8C83.38 175.4 88 168.4 88 160c0-8.75-5-16.12-12-20.25V87.13L128 99.63l.001 60.37c0 70.75 57.25 128 128 128s127.1-57.25 127.1-128L384 99.62l82.25-19.87c18.25-4.375 18.25-27 0-31.5l-190.4-46c-13-3-26.62-3-39.63 0l-190.6 46C27.5 52.63 27.5 75.38 45.63 79.75zM359.2 312.8l-103.2 103.2l-103.2-103.2c-69.93 22.3-120.8 87.2-120.8 164.5C32 496.5 47.53 512 66.67 512h378.7C464.5 512 480 496.5 480 477.3C480 400 429.1 335.1 359.2 312.8z\"],\n    \"user-group\": [640, 512, [128101, \"user-friends\"], \"f500\", \"M224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM274.7 304H173.3c-95.73 0-173.3 77.6-173.3 173.3C0 496.5 15.52 512 34.66 512H413.3C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM479.1 320h-73.85C451.2 357.7 480 414.1 480 477.3C480 490.1 476.2 501.9 470 512h138C625.7 512 640 497.6 640 479.1C640 391.6 568.4 320 479.1 320zM432 256C493.9 256 544 205.9 544 144S493.9 32 432 32c-25.11 0-48.04 8.555-66.72 22.51C376.8 76.63 384 101.4 384 128c0 35.52-11.93 68.14-31.59 94.71C372.7 243.2 400.8 256 432 256z\"],\n    \"user-injured\": [448, 512, [], \"f728\", \"M277.4 11.98C261.1 4.469 243.1 0 224 0C170.3 0 124.5 33.13 105.5 80h81.07L277.4 11.98zM342.5 80c-7.895-19.47-20.66-36.19-36.48-49.51L240 80H342.5zM224 256c70.7 0 128-57.31 128-128c0-5.48-.9453-10.7-1.613-16H97.61C96.95 117.3 96 122.5 96 128C96 198.7 153.3 256 224 256zM272 416h-45.14l58.64 93.83C305.4 503.1 320 485.8 320 464C320 437.5 298.5 416 272 416zM274.7 304H173.3c-5.393 0-10.71 .3242-15.98 .8047L206.9 384H272c44.13 0 80 35.88 80 80c0 18.08-6.252 34.59-16.4 48h77.73C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM0 477.3C0 496.5 15.52 512 34.66 512H64v-169.1C24.97 374.7 0 423.1 0 477.3zM96 322.4V512h153.1L123.7 311.3C114.1 314.2 104.8 317.9 96 322.4z\"],\n    \"user-large\": [512, 512, [\"user-alt\"], \"f406\", \"M256 288c79.53 0 144-64.47 144-144s-64.47-144-144-144c-79.52 0-144 64.47-144 144S176.5 288 256 288zM351.1 320H160c-88.36 0-160 71.63-160 160c0 17.67 14.33 32 31.1 32H480c17.67 0 31.1-14.33 31.1-32C512 391.6 440.4 320 351.1 320z\"],\n    \"user-large-slash\": [640, 512, [\"user-alt-slash\"], \"f4fa\", \"M284.9 320l-60.9-.0002c-88.36 0-160 71.63-160 159.1C63.1 497.7 78.33 512 95.1 512l448-.0039c.0137 0-.0137 0 0 0l-14.13-.0013L284.9 320zM630.8 469.1l-249.5-195.5c48.74-22.1 82.65-72.1 82.65-129.6c0-79.53-64.47-143.1-143.1-143.1c-69.64 0-127.3 49.57-140.6 115.3L38.81 5.109C34.41 1.672 29.19 0 24.03 0C16.91 0 9.845 3.156 5.127 9.187c-8.187 10.44-6.375 25.53 4.062 33.7L601.2 506.9c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"user-lock\": [640, 512, [], \"f502\", \"M592 288H576V212.7c0-41.84-30.03-80.04-71.66-84.27C456.5 123.6 416 161.1 416 208V288h-16C373.6 288 352 309.6 352 336v128c0 26.4 21.6 48 48 48h192c26.4 0 48-21.6 48-48v-128C640 309.6 618.4 288 592 288zM496 432c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S513.6 432 496 432zM528 288h-64V208c0-17.62 14.38-32 32-32s32 14.38 32 32V288zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM320 336c0-8.672 1.738-16.87 4.303-24.7C308.6 306.6 291.9 304 274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512h301.7C326.3 498.6 320 482.1 320 464V336z\"],\n    \"user-minus\": [640, 512, [], \"f503\", \"M274.7 304H173.3C77.61 304 0 381.6 0 477.3C0 496.5 15.52 512 34.66 512h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM616 200h-144C458.8 200 448 210.8 448 224s10.75 24 24 24h144C629.3 248 640 237.3 640 224S629.3 200 616 200z\"],\n    \"user-ninja\": [512, 512, [129399], \"f504\", \"M64 192c27.25 0 51.75-11.5 69.25-29.75c15 54 64 93.75 122.8 93.75c70.75 0 127.1-57.25 127.1-128s-57.25-128-127.1-128c-50.38 0-93.63 29.38-114.5 71.75C124.1 47.75 96 32 64 32c0 33.37 17.12 62.75 43.13 80C81.13 129.3 64 158.6 64 192zM208 96h95.1C321.7 96 336 110.3 336 128h-160C176 110.3 190.3 96 208 96zM337.8 306.9L256 416L174.2 306.9C93.36 321.6 32 392.2 32 477.3c0 19.14 15.52 34.67 34.66 34.67H445.3c19.14 0 34.66-15.52 34.66-34.67C480 392.2 418.6 321.6 337.8 306.9z\"],\n    \"user-nurse\": [448, 512, [], \"f82f\", \"M224 304c70.75 0 128-57.25 128-128V65.88c0-13.38-8.25-25.38-20.75-30L246.5 4.125C239.3 1.375 231.6 0 224 0S208.8 1.375 201.5 4.125L116.8 35.88C104.3 40.5 96 52.5 96 65.88V176C96 246.8 153.3 304 224 304zM184 71.63c0-2.75 2.25-5 5-5h21.62V45c0-2.75 2.25-5 5-5h16.75c2.75 0 5 2.25 5 5v21.62H259c2.75 0 5 2.25 5 5v16.75c0 2.75-2.25 5-5 5h-21.62V115c0 2.75-2.25 5-5 5H215.6c-2.75 0-5-2.25-5-5V93.38H189c-2.75 0-5-2.25-5-5V71.63zM144 160h160v16C304 220.1 268.1 256 224 256S144 220.1 144 176V160zM327.2 312.8L224 416L120.8 312.8c-69.93 22.3-120.8 87.25-120.8 164.6C.0006 496.5 15.52 512 34.66 512H413.3c19.14 0 34.66-15.46 34.66-34.61C447.1 400.1 397.1 335.1 327.2 312.8z\"],\n    \"user-pen\": [640, 512, [\"user-edit\"], \"f4ff\", \"M223.1 256c70.7 0 128-57.31 128-128s-57.3-128-128-128C153.3 0 96 57.31 96 128S153.3 256 223.1 256zM274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512h286.4c-1.246-5.531-1.43-11.31-.2832-17.04l14.28-71.41c1.943-9.723 6.676-18.56 13.68-25.56l45.72-45.72C363.3 322.4 321.2 304 274.7 304zM371.4 420.6c-2.514 2.512-4.227 5.715-4.924 9.203l-14.28 71.41c-1.258 6.289 4.293 11.84 10.59 10.59l71.42-14.29c3.482-.6992 6.682-2.406 9.195-4.922l125.3-125.3l-72.01-72.01L371.4 420.6zM629.5 255.7l-21.1-21.11c-14.06-14.06-36.85-14.06-50.91 0l-38.13 38.14l72.01 72.01l38.13-38.13C643.5 292.5 643.5 269.7 629.5 255.7z\"],\n    \"user-plus\": [640, 512, [], \"f234\", \"M224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM274.7 304H173.3C77.61 304 0 381.6 0 477.3C0 496.5 15.52 512 34.66 512h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM616 200h-48v-48C568 138.8 557.3 128 544 128s-24 10.75-24 24v48h-48C458.8 200 448 210.8 448 224s10.75 24 24 24h48v48C520 309.3 530.8 320 544 320s24-10.75 24-24v-48h48C629.3 248 640 237.3 640 224S629.3 200 616 200z\"],\n    \"user-secret\": [448, 512, [128373], \"f21b\", \"M377.7 338.8l37.15-92.87C419 235.4 411.3 224 399.1 224h-57.48C348.5 209.2 352 193 352 176c0-4.117-.8359-8.057-1.217-12.08C390.7 155.1 416 142.3 416 128c0-16.08-31.75-30.28-80.31-38.99C323.8 45.15 304.9 0 277.4 0c-10.38 0-19.62 4.5-27.38 10.5c-15.25 11.88-36.75 11.88-52 0C190.3 4.5 181.1 0 170.7 0C143.2 0 124.4 45.16 112.5 88.98C63.83 97.68 32 111.9 32 128c0 14.34 25.31 27.13 65.22 35.92C96.84 167.9 96 171.9 96 176C96 193 99.47 209.2 105.5 224H48.02C36.7 224 28.96 235.4 33.16 245.9l37.15 92.87C27.87 370.4 0 420.4 0 477.3C0 496.5 15.52 512 34.66 512H413.3C432.5 512 448 496.5 448 477.3C448 420.4 420.1 370.4 377.7 338.8zM176 479.1L128 288l64 32l16 32L176 479.1zM271.1 479.1L240 352l16-32l64-32L271.1 479.1zM320 186C320 207 302.8 224 281.6 224h-12.33c-16.46 0-30.29-10.39-35.63-24.99C232.1 194.9 228.4 192 224 192S215.9 194.9 214.4 199C209 213.6 195.2 224 178.8 224h-12.33C145.2 224 128 207 128 186V169.5C156.3 173.6 188.1 176 224 176s67.74-2.383 96-6.473V186z\"],\n    \"user-shield\": [640, 512, [], \"f505\", \"M622.3 271.1l-115.1-45.01c-4.125-1.629-12.62-3.754-22.25 0L369.8 271.1C359 275.2 352 285.1 352 295.1c0 111.6 68.75 188.8 132.9 213.9c9.625 3.75 18 1.625 22.25 0C558.4 489.9 640 420.5 640 295.1C640 285.1 633 275.2 622.3 271.1zM496 462.4V273.2l95.5 37.38C585.9 397.8 530.6 446 496 462.4zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM320.6 310.3C305.9 306.3 290.6 304 274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512H413.3c3.143 0 5.967-1.004 8.861-1.789C369.7 469.8 324.1 400.3 320.6 310.3z\"],\n    \"user-slash\": [640, 512, [], \"f506\", \"M95.1 477.3c0 19.14 15.52 34.67 34.66 34.67h378.7c5.625 0 10.73-1.65 15.42-4.029L264.9 304.3C171.3 306.7 95.1 383.1 95.1 477.3zM630.8 469.1l-277.1-217.9c54.69-14.56 95.18-63.95 95.18-123.2C447.1 57.31 390.7 0 319.1 0C250.2 0 193.7 55.93 192.3 125.4l-153.4-120.3C34.41 1.672 29.19 0 24.03 0C16.91 0 9.845 3.156 5.127 9.187c-8.187 10.44-6.375 25.53 4.062 33.7L601.2 506.9c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"user-tag\": [640, 512, [], \"f507\", \"M351.8 367.3v-44.1C328.5 310.7 302.4 304 274.7 304H173.3c-95.73 0-173.3 77.65-173.3 173.4C.0005 496.5 15.52 512 34.66 512h378.7c11.86 0 21.82-6.337 28.07-15.43l-61.65-61.57C361.7 416.9 351.8 392.9 351.8 367.3zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM630.6 364.8L540.3 274.8C528.3 262.8 512 256 495 256h-79.23c-17.75 0-31.99 14.25-31.99 32l.0147 79.2c0 17 6.647 33.15 18.65 45.15l90.31 90.27c12.5 12.5 32.74 12.5 45.24 0l92.49-92.5C643.1 397.6 643.1 377.3 630.6 364.8zM447.8 343.9c-13.25 0-24-10.62-24-24c0-13.25 10.75-24 24-24c13.38 0 24 10.75 24 24S461.1 343.9 447.8 343.9z\"],\n    \"user-tie\": [448, 512, [], \"f508\", \"M352 128C352 198.7 294.7 256 224 256C153.3 256 96 198.7 96 128C96 57.31 153.3 0 224 0C294.7 0 352 57.31 352 128zM209.1 359.2L176 304H272L238.9 359.2L272.2 483.1L311.7 321.9C388.9 333.9 448 400.7 448 481.3C448 498.2 434.2 512 417.3 512H30.72C13.75 512 0 498.2 0 481.3C0 400.7 59.09 333.9 136.3 321.9L175.8 483.1L209.1 359.2z\"],\n    \"user-xmark\": [640, 512, [\"user-times\"], \"f235\", \"M274.7 304H173.3C77.61 304 0 381.6 0 477.3C0 496.5 15.52 512 34.66 512h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM577.9 223.1l47.03-47.03c9.375-9.375 9.375-24.56 0-33.94s-24.56-9.375-33.94 0L544 190.1l-47.03-47.03c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94l47.03 47.03l-47.03 47.03c-9.375 9.375-9.375 24.56 0 33.94c9.373 9.373 24.56 9.381 33.94 0L544 257.9l47.03 47.03c9.373 9.373 24.56 9.381 33.94 0c9.375-9.375 9.375-24.56 0-33.94L577.9 223.1z\"],\n    \"users\": [640, 512, [], \"f0c0\", \"M319.9 320c57.41 0 103.1-46.56 103.1-104c0-57.44-46.54-104-103.1-104c-57.41 0-103.1 46.56-103.1 104C215.9 273.4 262.5 320 319.9 320zM369.9 352H270.1C191.6 352 128 411.7 128 485.3C128 500.1 140.7 512 156.4 512h327.2C499.3 512 512 500.1 512 485.3C512 411.7 448.4 352 369.9 352zM512 160c44.18 0 80-35.82 80-80S556.2 0 512 0c-44.18 0-80 35.82-80 80S467.8 160 512 160zM183.9 216c0-5.449 .9824-10.63 1.609-15.91C174.6 194.1 162.6 192 149.9 192H88.08C39.44 192 0 233.8 0 285.3C0 295.6 7.887 304 17.62 304h199.5C196.7 280.2 183.9 249.7 183.9 216zM128 160c44.18 0 80-35.82 80-80S172.2 0 128 0C83.82 0 48 35.82 48 80S83.82 160 128 160zM551.9 192h-61.84c-12.8 0-24.88 3.037-35.86 8.24C454.8 205.5 455.8 210.6 455.8 216c0 33.71-12.78 64.21-33.16 88h199.7C632.1 304 640 295.6 640 285.3C640 233.8 600.6 192 551.9 192z\"],\n    \"users-gear\": [640, 512, [\"users-cog\"], \"f509\", \"M512 160c44.18 0 80-35.82 80-80S556.2 0 512 0c-44.18 0-80 35.82-80 80S467.8 160 512 160zM128 160c44.18 0 80-35.82 80-80S172.2 0 128 0C83.82 0 48 35.82 48 80S83.82 160 128 160zM319.9 320c57.41 0 103.1-46.56 103.1-104c0-57.44-46.54-104-103.1-104c-57.41 0-103.1 46.56-103.1 104C215.9 273.4 262.5 320 319.9 320zM368 400c0-16.69 3.398-32.46 8.619-47.36C374.3 352.5 372.2 352 369.9 352H270.1C191.6 352 128 411.7 128 485.3C128 500.1 140.7 512 156.4 512h266.1C389.5 485.6 368 445.5 368 400zM183.9 216c0-5.449 .9824-10.63 1.609-15.91C174.6 194.1 162.6 192 149.9 192H88.08C39.44 192 0 233.8 0 285.3C0 295.6 7.887 304 17.62 304h199.5C196.7 280.2 183.9 249.7 183.9 216zM551.9 192h-61.84c-12.8 0-24.88 3.037-35.86 8.24C454.8 205.5 455.8 210.6 455.8 216c0 21.47-5.625 41.38-14.65 59.34C462.2 263.4 486.1 256 512 256c42.48 0 80.27 18.74 106.6 48h3.756C632.1 304 640 295.6 640 285.3C640 233.8 600.6 192 551.9 192zM618.1 366.7c-5.025-16.01-13.59-30.62-24.75-42.71c-1.674-1.861-4.467-2.326-6.699-1.023l-19.17 11.07c-8.096-6.887-17.4-12.28-27.45-15.82V295.1c0-2.514-1.861-4.746-4.281-5.213c-16.56-3.723-33.5-3.629-49.32 0C484.9 291.2 483.1 293.5 483.1 295.1v22.24c-10.05 3.537-19.36 8.932-27.45 15.82l-19.26-11.07c-2.139-1.303-4.932-.8379-6.697 1.023c-11.17 12.1-19.73 26.71-24.66 42.71c-.7441 2.512 .2793 5.117 2.42 6.326l19.17 11.17c-1.859 10.42-1.859 21.21 0 31.64l-19.17 11.17c-2.234 1.209-3.164 3.816-2.42 6.328c4.932 16.01 13.49 30.52 24.66 42.71c1.766 1.863 4.467 2.328 6.697 1.025l19.26-11.07c8.094 6.887 17.4 12.28 27.45 15.82v22.24c0 2.514 1.77 4.746 4.188 5.211c16.66 3.723 33.5 3.629 49.32 0c2.42-.4648 4.281-2.697 4.281-5.211v-22.24c10.05-3.535 19.36-8.932 27.45-15.82l19.17 11.07c2.141 1.303 5.025 .8379 6.699-1.025c11.17-12.1 19.73-26.7 24.75-42.71c.7441-2.512-.2773-5.119-2.512-6.328l-19.17-11.17c1.953-10.42 1.953-21.22 0-31.64l19.17-11.17C618.7 371.8 619.7 369.2 618.1 366.7zM512 432c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32s32 14.33 32 32C544 417.7 529.7 432 512 432z\"],\n    \"users-slash\": [640, 512, [], \"e073\", \"M512 160c44.18 0 80-35.82 80-80S556.2 0 512 0c-44.18 0-80 35.82-80 80S467.8 160 512 160zM490.1 192c-12.8 0-24.88 3.037-35.86 8.24C454.8 205.5 455.8 210.6 455.8 216c0 33.71-12.78 64.21-33.16 88h199.7C632.1 304 640 295.6 640 285.3C640 233.8 600.6 192 551.9 192H490.1zM396.6 285.5C413.4 267.2 423.8 242.9 423.8 216c0-57.44-46.54-104-103.1-104c-35.93 0-67.07 18.53-85.59 46.3L193.1 126.1C202.4 113.1 208 97.24 208 80C208 35.82 172.2 0 128 0C103.8 0 82.52 10.97 67.96 27.95L38.81 5.109C34.41 1.672 29.19 0 24.03 0C16.91 0 9.846 3.156 5.127 9.188C-3.061 19.62-1.248 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078c8.188-10.44 6.375-25.53-4.062-33.7L396.6 285.5zM270.1 352C191.6 352 128 411.7 128 485.3C128 500.1 140.7 512 156.4 512h327.2c11.62 0 21.54-6.583 25.95-15.96L325.7 352H270.1zM186.1 243.2L121.6 192H88.08C39.44 192 0 233.8 0 285.3C0 295.6 7.887 304 17.62 304h199.5C202.4 286.8 191.8 266.1 186.1 243.2z\"],\n    \"utensils\": [448, 512, [61685, 127860, \"cutlery\"], \"f2e7\", \"M221.6 148.7C224.7 161.3 224.8 174.5 222.1 187.2C219.3 199.1 213.6 211.9 205.6 222.1C191.1 238.6 173 249.1 151.1 254.1V472C151.1 482.6 147.8 492.8 140.3 500.3C132.8 507.8 122.6 512 111.1 512C101.4 512 91.22 507.8 83.71 500.3C76.21 492.8 71.1 482.6 71.1 472V254.1C50.96 250.1 31.96 238.9 18.3 222.4C10.19 212.2 4.529 200.3 1.755 187.5C-1.019 174.7-.8315 161.5 2.303 148.8L32.51 12.45C33.36 8.598 35.61 5.197 38.82 2.9C42.02 .602 45.97-.4297 49.89 .0026C53.82 .4302 57.46 2.303 60.1 5.259C62.74 8.214 64.18 12.04 64.16 16V160H81.53L98.62 11.91C99.02 8.635 100.6 5.621 103.1 3.434C105.5 1.248 108.7 .0401 111.1 .0401C115.3 .0401 118.5 1.248 120.9 3.434C123.4 5.621 124.1 8.635 125.4 11.91L142.5 160H159.1V16C159.1 12.07 161.4 8.268 163.1 5.317C166.6 2.366 170.2 .474 174.1 .0026C178-.4262 181.1 .619 185.2 2.936C188.4 5.253 190.6 8.677 191.5 12.55L221.6 148.7zM448 472C448 482.6 443.8 492.8 436.3 500.3C428.8 507.8 418.6 512 408 512C397.4 512 387.2 507.8 379.7 500.3C372.2 492.8 368 482.6 368 472V352H351.2C342.8 352 334.4 350.3 326.6 347.1C318.9 343.8 311.8 339.1 305.8 333.1C299.9 327.1 295.2 320 291.1 312.2C288.8 304.4 287.2 296 287.2 287.6L287.1 173.8C288 136.9 299.1 100.8 319.8 70.28C340.5 39.71 369.8 16.05 404.1 2.339C408.1 .401 414.2-.3202 419.4 .2391C424.6 .7982 429.6 2.62 433.9 5.546C438.2 8.472 441.8 12.41 444.2 17.03C446.7 21.64 447.1 26.78 448 32V472z\"],\n    \"v\": [384, 512, [118], \"56\", \"M381.5 76.33l-160 384C216.6 472.2 204.9 480 192 480s-24.56-7.757-29.53-19.68l-160-384c-6.797-16.31 .9062-35.05 17.22-41.84c16.38-6.859 35.08 .9219 41.84 17.22L192 364.8l130.5-313.1c6.766-16.3 25.47-24.09 41.84-17.22C380.6 41.28 388.3 60.01 381.5 76.33z\"],\n    \"van-shuttle\": [640, 512, [128656, \"shuttle-van\"], \"f5b6\", \"M592 384H576C576 437 533 480 480 480C426.1 480 384 437 384 384H256C256 437 213 480 160 480C106.1 480 64 437 64 384H48C21.49 384 0 362.5 0 336V104C0 64.24 32.24 32 72 32H465.1C483.1 32 501.9 40.34 514.1 54.78L624.1 186.5C634.7 197.1 640 212.6 640 227.7V336C640 362.5 618.5 384 592 384zM64 192H160V96H72C67.58 96 64 99.58 64 104V192zM545.1 192L465.1 96H384V192H545.1zM320 192V96H224V192H320zM480 336C453.5 336 432 357.5 432 384C432 410.5 453.5 432 480 432C506.5 432 528 410.5 528 384C528 357.5 506.5 336 480 336zM160 432C186.5 432 208 410.5 208 384C208 357.5 186.5 336 160 336C133.5 336 112 357.5 112 384C112 410.5 133.5 432 160 432z\"],\n    \"vault\": [576, 512, [], \"e2c5\", \"M144 240C144 195.8 179.8 160 224 160C268.2 160 304 195.8 304 240C304 284.2 268.2 320 224 320C179.8 320 144 284.2 144 240zM512 0C547.3 0 576 28.65 576 64V416C576 451.3 547.3 480 512 480H496L480 512H416L400 480H176L160 512H96L80 480H64C28.65 480 0 451.3 0 416V64C0 28.65 28.65 0 64 0H512zM224 400C312.4 400 384 328.4 384 240C384 151.6 312.4 80 224 80C135.6 80 64 151.6 64 240C64 328.4 135.6 400 224 400zM480 221.3C498.6 214.7 512 196.9 512 176C512 149.5 490.5 128 464 128C437.5 128 416 149.5 416 176C416 196.9 429.4 214.7 448 221.3V336C448 344.8 455.2 352 464 352C472.8 352 480 344.8 480 336V221.3z\"],\n    \"vector-square\": [448, 512, [], \"f5cb\", \"M416 32C433.7 32 448 46.33 448 64V128C448 145.7 433.7 160 416 160V352C433.7 352 448 366.3 448 384V448C448 465.7 433.7 480 416 480H352C334.3 480 320 465.7 320 448H128C128 465.7 113.7 480 96 480H32C14.33 480 0 465.7 0 448V384C0 366.3 14.33 352 32 352V160C14.33 160 0 145.7 0 128V64C0 46.33 14.33 32 32 32H96C113.7 32 128 46.33 128 64H320C320 46.33 334.3 32 352 32H416zM368 80V112H400V80H368zM96 160V352C113.7 352 128 366.3 128 384H320C320 366.3 334.3 352 352 352V160C334.3 160 320 145.7 320 128H128C128 145.7 113.7 160 96 160zM48 400V432H80V400H48zM400 432V400H368V432H400zM80 112V80H48V112H80z\"],\n    \"venus\": [384, 512, [9792], \"f221\", \"M368 176c0-97.2-78.8-176-176-176c-97.2 0-176 78.8-176 176c0 86.26 62.1 157.9 144 172.1v35.05H112c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16H160v48c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-48h48c8.838 0 16-7.164 16-16v-32c0-8.838-7.162-16-16-16H224v-35.05C305.9 333.9 368 262.3 368 176zM192 272c-52.93 0-96-43.07-96-96c0-52.94 43.07-96 96-96c52.94 0 96 43.06 96 96C288 228.9 244.9 272 192 272z\"],\n    \"venus-double\": [640, 512, [9890], \"f226\", \"M368 176c0-97.2-78.8-176-176-176c-97.2 0-176 78.8-176 176c0 86.26 62.1 157.9 144 172.1v35.05H112c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16H160v48c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-48h48c8.838 0 16-7.164 16-16v-32c0-8.838-7.162-16-16-16H224v-35.05C305.9 333.9 368 262.3 368 176zM192 272c-52.93 0-96-43.07-96-96c0-52.94 43.07-96 96-96c52.94 0 96 43.06 96 96C288 228.9 244.9 272 192 272zM624 176C624 78.8 545.2 0 448 0c-39.02 0-74.95 12.85-104.1 34.34c18.38 19.7 32.94 42.91 42.62 68.58C403.2 88.83 424.5 80 448 80c52.94 0 96 43.06 96 96c0 52.93-43.06 96-96 96c-23.57 0-44.91-8.869-61.63-23.02c-9.572 25.45-23.95 48.54-42.23 68.23C365.1 332.7 389.3 344 416 348.1V384h-48c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16H416v48c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V448h48c8.838 0 16-7.164 16-16v-32c0-8.838-7.162-16-16-16H480v-35.05C561.9 333.9 624 262.3 624 176z\"],\n    \"venus-mars\": [640, 512, [9892], \"f228\", \"M256 384H208v-35.05C289.9 333.9 352 262.3 352 176c0-97.2-78.8-176-176-176c-97.2 0-176 78.8-176 176c0 86.26 62.1 157.9 144 172.1v35.05H96c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16h48v48c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-48H256c8.838 0 16-7.164 16-16v-32C272 391.2 264.8 384 256 384zM176 272c-52.93 0-96-43.07-96-96c0-52.94 43.07-96 96-96c52.94 0 96 43.06 96 96C272 228.9 228.9 272 176 272zM624 0h-112.4c-21.38 0-32.09 25.85-16.97 40.97l29.56 29.56l-24.55 24.55c-29.97-20.66-64.81-31.05-99.74-31.05c-15.18 0-30.42 2.225-45.19 6.132c13.55 22.8 22.82 48.36 26.82 75.67c6.088-1.184 12.27-1.785 18.45-1.785c24.58 0 49.17 9.357 67.88 28.07c37.43 37.43 37.43 98.33 0 135.8c-18.71 18.71-43.3 28.07-67.88 28.07c-23.55 0-46.96-8.832-65.35-26.01c-15.92 18.84-34.93 35.1-56.75 47.35c11.45 5.898 20.17 16.3 23.97 28.82C331.5 406 365.7 416 400 416c45.04 0 90.08-17.18 124.5-51.55c60.99-60.99 67.73-155.6 20.47-224.1l24.55-24.55l29.56 29.56c4.889 4.889 10.9 7.078 16.8 7.078C628.2 152.4 640 142.8 640 128.4V16C640 7.164 632.8 0 624 0z\"],\n    \"vest\": [448, 512, [], \"e085\", \"M437.3 239.9L384 160V32c0-17.67-14.33-32-32-32h-32c-4.75 0-9.375 1.406-13.31 4.031l-25 16.66c-35.03 23.38-80.28 23.38-115.4 0l-25-16.66C137.4 1.406 132.8 0 128 0H96C78.33 0 64 14.33 64 32v128L10.75 239.9C3.74 250.4 0 262.7 0 275.4V480c0 17.67 14.33 32 32 32h160V288c0-3.439 .5547-6.855 1.643-10.12l13.49-40.48L150.2 66.56C173.2 79.43 198.5 86.25 224 86.25s50.79-6.824 73.81-19.69L224 288v224h192c17.67 0 32-14.33 32-32V275.4C448 262.7 444.3 250.4 437.3 239.9zM131.3 371.3l-48 48C80.19 422.4 76.09 424 72 424s-8.188-1.562-11.31-4.688c-6.25-6.25-6.25-16.38 0-22.62l48-48c6.25-6.25 16.38-6.25 22.62 0S137.6 365.1 131.3 371.3zM387.3 419.3C384.2 422.4 380.1 424 376 424s-8.188-1.562-11.31-4.688l-48-48c-6.25-6.25-6.25-16.38 0-22.62s16.38-6.25 22.62 0l48 48C393.6 402.9 393.6 413.1 387.3 419.3z\"],\n    \"vest-patches\": [448, 512, [], \"e086\", \"M437.3 239.9L384 160V32c0-17.67-14.33-32-32-32h-32c-4.75 0-9.375 1.406-13.31 4.031l-25 16.66c-35.03 23.38-80.28 23.38-115.4 0l-25-16.66C137.4 1.406 132.8 0 128 0H96C78.33 0 64 14.33 64 32v128L10.75 239.9C3.74 250.4 0 262.7 0 275.4V480c0 17.67 14.33 32 32 32h160V288c0-3.439 .5547-6.855 1.643-10.12l13.49-40.48L150.2 66.56C173.2 79.43 198.5 86.25 224 86.25s50.79-6.824 73.81-19.69L224 288v224h192c17.67 0 32-14.33 32-32V275.4C448 262.7 444.3 250.4 437.3 239.9zM63.5 272.5c-4.656-4.688-4.656-12.31 0-17c4.688-4.688 12.31-4.688 17 0L96 271l15.5-15.5c4.688-4.688 12.31-4.688 17 0c4.656 4.688 4.656 12.31 0 17L113 288l15.5 15.5c4.656 4.688 4.656 12.31 0 17C126.2 322.8 123.1 324 120 324s-6.156-1.156-8.5-3.5L96 305l-15.5 15.5C78.16 322.8 75.06 324 72 324s-6.156-1.156-8.5-3.5c-4.656-4.688-4.656-12.31 0-17L79 288L63.5 272.5zM96 456c-22.09 0-40-17.91-40-40S73.91 376 96 376S136 393.9 136 416S118.1 456 96 456zM359.2 335.8L310.7 336C306.1 336 303.1 333 304 329.3l.2158-48.53c.1445-14.4 12.53-25.98 27.21-24.67c12.79 1.162 22.13 12.62 22.06 25.42l-.0557 5.076l5.069-.0566c12.83-.0352 24.24 9.275 25.4 22.08C385.2 323.3 373.7 335.7 359.2 335.8z\"],\n    \"vial\": [512, 512, [129514], \"f492\", \"M502.6 169.4l-160-160C336.4 3.125 328.2 0 320 0s-16.38 3.125-22.62 9.375c-12.5 12.5-12.5 32.75 0 45.25l6.975 6.977l-271.4 271c-38.75 38.75-45.13 102-9.375 143.5C44.08 500 72.76 512 101.5 512h.4473c26.38 0 52.75-9.1 72.88-30.12l275.2-274.6l7.365 7.367C463.6 220.9 471.8 224 480 224s16.38-3.125 22.62-9.375C515.1 202.1 515.1 181.9 502.6 169.4zM310.6 256H200.2l149.3-149.1l55.18 55.12L310.6 256z\"],\n    \"vials\": [512, 512, [], \"f493\", \"M200 32h-176C10.75 32 0 42.74 0 56C0 69.25 10.75 80 24 80H32v320C32 444.1 67.88 480 112 480S192 444.1 192 400v-320h8C213.3 80 224 69.25 224 56C224 42.74 213.3 32 200 32zM144 256h-64V80h64V256zM488 32h-176C298.7 32 288 42.74 288 56c0 13.25 10.75 24 24 24H320v320c0 44.13 35.88 80 80 80s80-35.88 80-80v-320h8C501.3 80 512 69.25 512 56C512 42.74 501.3 32 488 32zM432 256h-64V80h64V256z\"],\n    \"video\": [576, 512, [\"video-camera\"], \"f03d\", \"M384 112v288c0 26.51-21.49 48-48 48h-288c-26.51 0-48-21.49-48-48v-288c0-26.51 21.49-48 48-48h288C362.5 64 384 85.49 384 112zM576 127.5v256.9c0 25.5-29.17 40.39-50.39 25.79L416 334.7V177.3l109.6-75.56C546.9 87.13 576 102.1 576 127.5z\"],\n    \"video-slash\": [640, 512, [], \"f4e2\", \"M32 399.1c0 26.51 21.49 47.1 47.1 47.1h287.1c19.57 0 36.34-11.75 43.81-28.56L32 121.8L32 399.1zM630.8 469.1l-89.21-69.92l15.99 11.02c21.22 14.59 50.41-.2971 50.41-25.8V127.5c0-25.41-29.07-40.37-50.39-25.76l-109.6 75.56l.0001 148.5l-32-25.08l.0001-188.7c0-26.51-21.49-47.1-47.1-47.1H113.9L38.81 5.111C34.41 1.673 29.19 0 24.03 0C16.91 0 9.84 3.158 5.121 9.189C-3.066 19.63-1.249 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.57 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"vihara\": [640, 512, [], \"f6a7\", \"M280.1 22.03L305.8 4.661C307.1 3.715 308.4 2.908 309.9 2.246C313.1 .7309 316.6-.0029 319.1 0C323.4-.0029 326.9 .7309 330.1 2.246C331.6 2.909 332.9 3.716 334.2 4.661L359 22.03C392.1 45.8 430.8 63.52 470.8 74.42L493.8 80.71C495.6 81.17 497.4 81.83 499 82.68C502.2 84.33 504.1 86.66 507.1 89.43C510.8 94.38 512.7 100.7 511.8 107.2C511.4 109.1 510.6 112.6 509.3 115C507.7 118.2 505.3 120.1 502.6 123.1C498.3 126.3 492.1 128.1 487.5 128H480V184.1L491.7 193.3C512.8 210 536.6 222.9 562.2 231.4L591.1 241.1C592.7 241.6 594.2 242.2 595.7 243C598.8 244.8 601.4 247.2 603.5 249.1C605.5 252.8 606.9 256 607.6 259.6C608.1 262.2 608.2 265 607.7 267.8C607.2 270.6 606.3 273.3 604.1 275.7C603.2 278.8 600.8 281.5 598 283.5C595.2 285.5 591.1 286.9 588.4 287.6C586.8 287.9 585.1 288 583.4 288H544V353.9C564.5 376.7 591.4 393 621.4 400.6C632 403 640 412.6 640 424C640 437.3 629.3 448 616 448H576V480C576 497.7 561.7 512 544 512C526.3 512 512 497.7 512 480V448H352V480C352 497.7 337.7 512 320 512C302.3 512 288 497.7 288 480V448H128V480C128 497.7 113.7 512 96 512C78.33 512 64 497.7 64 480V448H24C10.75 448 0 437.3 0 424C0 412.6 7.962 403 18.63 400.6C48.61 393 75.51 376.7 96 353.9V288H56.55C54.87 288 53.2 287.9 51.57 287.6C48.03 286.9 44.77 285.5 41.96 283.5C39.16 281.5 36.77 278.8 35.03 275.7C33.69 273.3 32.76 270.6 32.31 267.8C31.85 265 31.9 262.2 32.41 259.6C33.07 256 34.51 252.8 36.53 249.1C38.55 247.2 41.19 244.8 44.34 243C45.78 242.2 47.32 241.6 48.94 241.1L77.81 231.4C103.4 222.9 127.2 210 148.3 193.3L160 184.1V128H152.5C147 128.1 141.7 126.3 137.4 123.1C134.7 120.1 132.3 118.2 130.7 115C129.4 112.6 128.6 109.1 128.2 107.2C127.3 100.7 129.2 94.38 132.9 89.43C135 86.66 137.8 84.33 140.1 82.68C142.6 81.83 144.4 81.17 146.2 80.71L169.2 74.42C209.2 63.52 247 45.8 280.1 22.03H280.1zM223.1 128V192H416V128H223.1zM159.1 352H480V288H159.1V352z\"],\n    \"virus\": [576, 512, [], \"e074\", \"M515.6 227.6h-21.55c-50.68 0-76.06-61.28-40.23-97.12l15.25-15.25c11.11-11.11 11.11-29.11 .001-40.22c-11.11-11.11-29.11-11.11-40.22 .001l-15.24 15.24c-35.84 35.84-97.12 10.46-97.12-40.23V28.44c0-15.72-12.72-28.44-28.45-28.44S259.6 12.72 259.6 28.44v21.55c0 50.68-61.28 76.06-97.12 40.23L147.2 74.97C136.1 63.86 118.1 63.86 106.1 74.97c-11.11 11.11-11.11 29.11 .001 40.22l15.25 15.25C158.1 166.3 132.7 227.6 81.99 227.6H60.45C44.72 227.6 32 240.3 32 256s12.72 28.44 28.45 28.44h21.55c50.68 0 76.06 61.28 40.23 97.12l-15.25 15.25c-11.11 11.11-11.11 29.11-.001 40.22c5.555 5.555 12.83 8.333 20.11 8.333c7.277 0 14.55-2.779 20.11-8.334l15.24-15.25c35.84-35.84 97.12-10.46 97.12 40.23v21.55c0 15.72 12.72 28.45 28.45 28.45s28.45-12.72 28.45-28.45v-21.55c0-50.68 61.28-76.06 97.12-40.23l15.24 15.25c5.557 5.555 12.83 8.334 20.11 8.334c7.279 0 14.56-2.778 20.11-8.333c11.11-11.11 11.11-29.11-.001-40.22l-15.25-15.25c-35.84-35.84-10.46-97.12 40.23-97.12h21.55C531.3 284.4 544 271.7 544 256S531.3 227.6 515.6 227.6zM256 272c-26.51 0-48-21.49-48-48s21.49-48 48-48s48 21.49 48 48S282.5 272 256 272zM336 328c-13.25 0-24-10.75-24-24c0-13.26 10.75-23.1 24-23.1s24 10.74 24 24C360 317.3 349.3 328 336 328z\"],\n    \"virus-covid\": [512, 512, [], \"e4a8\", \"M192 24C192 10.75 202.7 0 216 0H296C309.3 0 320 10.75 320 24C320 37.25 309.3 48 296 48H280V81.62C310.7 85.8 338.8 97.88 362.3 115.7L386.1 91.95L374.8 80.64C365.4 71.26 365.4 56.07 374.8 46.7C384.2 37.32 399.4 37.32 408.7 46.7L465.3 103.3C474.7 112.6 474.7 127.8 465.3 137.2C455.9 146.6 440.7 146.6 431.4 137.2L420 125.9L396.3 149.7C414.1 173.2 426.2 201.3 430.4 232H464V216C464 202.7 474.7 192 488 192C501.3 192 512 202.7 512 216V296C512 309.3 501.3 320 488 320C474.7 320 464 309.3 464 296V280H430.4C426.2 310.7 414.1 338.8 396.3 362.3L420 386.1L431.4 374.8C440.7 365.4 455.9 365.4 465.3 374.8C474.7 384.2 474.7 399.4 465.3 408.7L408.7 465.3C399.4 474.7 384.2 474.7 374.8 465.3C365.4 455.9 365.4 440.7 374.8 431.4L386.1 420L362.3 396.3C338.8 414.1 310.7 426.2 280 430.4V464H296C309.3 464 320 474.7 320 488C320 501.3 309.3 512 296 512H216C202.7 512 192 501.3 192 488C192 474.7 202.7 464 216 464H232V430.4C201.3 426.2 173.2 414.1 149.7 396.3L125.9 420.1L137.2 431.4C146.6 440.7 146.6 455.9 137.2 465.3C127.8 474.7 112.6 474.7 103.3 465.3L46.7 408.7C37.32 399.4 37.32 384.2 46.7 374.8C56.07 365.4 71.27 365.4 80.64 374.8L91.95 386.1L115.7 362.3C97.88 338.8 85.8 310.7 81.62 280H48V296C48 309.3 37.25 320 24 320C10.75 320 0 309.3 0 296V216C0 202.7 10.75 192 24 192C37.25 192 48 202.7 48 216V232H81.62C85.8 201.3 97.88 173.2 115.7 149.7L91.95 125.9L80.64 137.2C71.26 146.6 56.07 146.6 46.7 137.2C37.32 127.8 37.32 112.6 46.7 103.3L103.3 46.7C112.6 37.33 127.8 37.33 137.2 46.7C146.6 56.07 146.6 71.27 137.2 80.64L125.9 91.95L149.7 115.7C173.2 97.88 201.3 85.8 232 81.62V48H216C202.7 48 192 37.26 192 24V24zM192 176C165.5 176 144 197.5 144 224C144 250.5 165.5 272 192 272C218.5 272 240 250.5 240 224C240 197.5 218.5 176 192 176zM304 328C317.3 328 328 317.3 328 304C328 290.7 317.3 280 304 280C290.7 280 280 290.7 280 304C280 317.3 290.7 328 304 328z\"],\n    \"virus-covid-slash\": [640, 512, [], \"e4a9\", \"M134.1 79.83L167.3 46.7C176.6 37.33 191.8 37.33 201.2 46.7C210.6 56.07 210.6 71.27 201.2 80.64L189.9 91.95L213.7 115.7C237.2 97.88 265.3 85.8 295.1 81.62V48H279.1C266.7 48 255.1 37.26 255.1 24C255.1 10.75 266.7 .0003 279.1 .0003H360C373.3 .0003 384 10.75 384 24C384 37.26 373.3 48 360 48H344V81.62C374.7 85.8 402.8 97.88 426.3 115.7L450.1 91.95L438.8 80.64C429.4 71.26 429.4 56.07 438.8 46.7C448.2 37.32 463.4 37.32 472.7 46.7L529.3 103.3C538.7 112.6 538.7 127.8 529.3 137.2C519.9 146.6 504.7 146.6 495.4 137.2L484 125.9L460.3 149.7C478.1 173.2 490.2 201.3 494.4 232H528V216C528 202.7 538.7 192 552 192C565.3 192 576 202.7 576 216V296C576 309.3 565.3 320 552 320C538.7 320 528 309.3 528 296V280H494.4C491.2 303.3 483.4 325.2 472.1 344.7L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L134.1 79.83zM149.2 213.5L401.3 412.2C383.7 421.3 364.4 427.6 344 430.4V464H360C373.3 464 384 474.7 384 488C384 501.3 373.3 512 360 512H279.1C266.7 512 255.1 501.3 255.1 488C255.1 474.7 266.7 464 279.1 464H295.1V430.4C265.3 426.2 237.2 414.1 213.7 396.3L189.9 420.1L201.2 431.4C210.6 440.7 210.6 455.9 201.2 465.3C191.8 474.7 176.6 474.7 167.3 465.3L110.7 408.7C101.3 399.4 101.3 384.2 110.7 374.8C120.1 365.4 135.3 365.4 144.6 374.8L155.1 386.1L179.7 362.3C161.9 338.8 149.8 310.7 145.6 280H111.1V296C111.1 309.3 101.3 320 87.1 320C74.74 320 63.1 309.3 63.1 296V216C63.1 202.7 74.74 192 87.1 192C101.3 192 111.1 202.7 111.1 216V232H145.6C146.5 225.7 147.7 219.6 149.2 213.5L149.2 213.5z\"],\n    \"virus-slash\": [640, 512, [], \"e075\", \"M113.1 227.6H92.44c-15.72 0-28.45 12.72-28.45 28.45s12.72 28.44 28.45 28.44h21.55c50.68 0 76.06 61.28 40.23 97.11l-15.25 15.25c-11.11 11.11-11.11 29.11-.0006 40.22c5.555 5.555 12.83 8.332 20.11 8.332c7.277 0 14.55-2.779 20.11-8.334l15.24-15.25c35.84-35.84 97.12-10.45 97.12 40.23v21.55c0 15.72 12.72 28.45 28.45 28.45c15.72 0 28.45-12.72 28.45-28.45v-21.55c0-30.08 21.69-50.85 46.74-55.6L150 214.3C140.5 222.2 128.5 227.6 113.1 227.6zM630.8 469.1l-161.2-126.4c-.5176-29.6 21.73-58.3 56.41-58.3h21.55c15.72 0 28.45-12.72 28.45-28.44s-12.72-28.45-28.45-28.45h-21.55c-50.68 0-76.06-61.28-40.23-97.11l15.25-15.25c11.11-11.11 11.11-29.11 .0011-40.22c-11.11-11.11-29.11-11.11-40.22 .0007l-15.24 15.24c-35.84 35.84-97.12 10.46-97.12-40.23V28.44C348.4 12.72 335.7 0 319.1 0C304.3 0 291.6 12.72 291.6 28.44v21.55c0 50.68-61.28 76.06-97.12 40.23L179.2 74.97c-11.11-11.11-29.11-11.11-40.22 0C137.3 76.63 136.2 78.61 135 80.53L38.81 5.112C34.41 1.675 29.19 0 24.03 0C16.91 0 9.845 3.159 5.126 9.19C-3.061 19.63-1.248 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1zM334.1 236.6L264.6 182.1c6.904-3.885 14.86-6.109 23.36-6.109c26.51 0 47.1 21.49 47.1 47.1C335.1 228.4 335.2 232.5 334.1 236.6z\"],\n    \"viruses\": [640, 512, [], \"e076\", \"M346.5 213.3h16.16C374.5 213.3 384 203.8 384 192c0-11.79-9.541-21.33-21.33-21.33h-16.16c-38.01 0-57.05-45.96-30.17-72.84l11.44-11.44c8.332-8.332 8.331-21.83-.0012-30.17c-8.334-8.334-21.83-8.332-30.17 .002L286.2 67.66C259.3 94.54 213.3 75.51 213.3 37.49V21.33C213.3 9.542 203.8 0 192 0S170.7 9.542 170.7 21.33v16.16c0 38.01-45.96 57.05-72.84 30.17L86.4 56.23c-8.334-8.334-21.83-8.336-30.17-.002c-8.332 8.334-8.333 21.84-.0012 30.17L67.66 97.83c26.88 26.88 7.842 72.84-30.17 72.84H21.33C9.541 170.7 0 180.2 0 192c0 11.79 9.541 21.33 21.33 21.33h16.16c38.01 0 57.05 45.96 30.17 72.84L56.23 297.6c-8.332 8.334-8.328 21.84 .0043 30.17c4.168 4.168 9.621 6.248 15.08 6.248s10.92-2.082 15.08-6.25L97.83 316.3c26.88-26.88 72.84-7.842 72.84 30.17v16.16C170.7 374.5 180.2 384 192 384s21.33-9.543 21.33-21.33v-16.16c0-38.01 45.96-57.05 72.84-30.17l11.43 11.43c4.168 4.168 9.625 6.25 15.08 6.25s10.91-2.08 15.08-6.248c8.332-8.332 8.333-21.83 .0012-30.17L316.3 286.2C289.5 259.3 308.5 213.3 346.5 213.3zM160 192C142.3 192 128 177.7 128 160c0-17.67 14.33-32 32-32s32 14.33 32 32C192 177.7 177.7 192 160 192zM240 224C231.2 224 224 216.8 224 208C224 199.2 231.2 192 240 192S256 199.2 256 208C256 216.8 248.8 224 240 224zM624 352h-12.12c-28.51 0-42.79-34.47-22.63-54.63l8.576-8.576c6.25-6.25 6.25-16.37 0-22.62s-16.38-6.253-22.62-.0031l-8.576 8.576C546.5 294.9 512 280.6 512 252.1V240C512 231.2 504.8 224 496 224S480 231.2 480 240v12.12c0 28.51-34.47 42.79-54.63 22.63l-8.576-8.576c-6.25-6.25-16.37-6.253-22.62-.0031s-6.253 16.38-.0031 22.63l8.576 8.576C422.9 317.5 408.6 352 380.1 352H368c-8.844 0-16 7.156-16 16s7.156 16 16 16h12.12c28.51 0 42.79 34.47 22.63 54.63l-8.576 8.576c-6.25 6.25-6.253 16.37-.0031 22.62c3.125 3.125 7.222 4.691 11.32 4.691s8.188-1.562 11.31-4.688l8.576-8.576C445.5 441.1 480 455.4 480 483.9V496c0 8.844 7.156 16 16 16s16-7.156 16-16v-12.12c0-28.51 34.47-42.79 54.63-22.63l8.576 8.576c3.125 3.125 7.219 4.688 11.31 4.688s8.184-1.559 11.31-4.684c6.25-6.25 6.253-16.38 .0031-22.63l-8.576-8.576C569.1 418.5 583.4 384 611.9 384H624c8.844 0 16-7.156 16-16S632.8 352 624 352zM480 384c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32s32 14.33 32 32C512 369.7 497.7 384 480 384z\"],\n    \"voicemail\": [640, 512, [], \"f897\", \"M495.1 96c-53.13 0-102 29.25-127 76.13c-25 46.88-22.25 103.8 7.25 147.9H263.7c36.63-54.88 31.25-127.8-13-176.8c-44.38-48.87-116.4-61.37-174.6-30.25s-87.88 97.88-71.75 162c16 64 73.63 108.1 139.6 108.1h352C575.5 384 640 319.5 640 240S575.5 96 495.1 96zM63.99 240c0-44.12 35.88-80 80-80s80 35.88 80 80s-35.88 79.1-80 79.1S63.99 284.1 63.99 240zM495.1 320c-44.13 0-80-35.88-80-79.1s35.88-80 80-80s80 35.88 80 80S540.1 320 495.1 320z\"],\n    \"volleyball\": [512, 512, [127952, \"volleyball-ball\"], \"f45f\", \"M200.3 106C185.4 80.24 165.2 53.9 137.4 29.26C55.75 72.05 0 157.4 0 256c0 21.33 2.898 41.94 7.814 61.75C53.59 182.1 155.1 124.9 200.3 106zM381.7 281.1c1.24-9.223 2.414-22.08 2.414-37.65c0-59.1-16.93-157.2-111.5-242.6C267.1 .4896 261.6 0 256 0C225.5 0 196.5 5.591 169.4 15.36c93.83 90.15 102.6 198.5 102.8 231.7C287.8 255.9 327.3 275.1 381.7 281.1zM240.1 246.5C239.1 228.5 236.9 184.7 214.9 134.6C173.6 151.6 60.4 211.7 26.67 369.2c15.66 31.64 37.52 59.66 64.22 82.23C122 325.1 211.5 263.3 240.1 246.5zM326.5 10.07c74.79 84.9 89.5 175.9 89.5 234c0 15.45-1.042 28.56-2.27 38.61l.5501 .0005c29.54 0 62.2-4.325 97.16-15.99C511.6 263.1 512 259.6 512 256C512 139.1 433.6 40.72 326.5 10.07zM255.7 274.5c-15.43 9.086-51.89 33.63-84.32 77.86c26.34 20.33 93.51 63.27 189.5 63.27c32.83 0 69.02-5.021 108.1-17.69c19.08-28.59 32.41-61.34 38.71-96.47C474.5 311.1 443 315 414.4 315C334.6 315 276.5 286.3 255.7 274.5zM153.1 379.3c-14.91 25.71-27.62 56.33-35.03 92.72C158.6 497.2 205.5 512 256 512c69 0 131.5-27.43 177.5-71.82c-25.42 5.105-49.71 7.668-72.38 7.668C258.6 447.8 185.5 402.1 153.1 379.3z\"],\n    \"volume-high\": [640, 512, [128266, \"volume-up\"], \"f028\", \"M412.6 182c-10.28-8.334-25.41-6.867-33.75 3.402c-8.406 10.24-6.906 25.35 3.375 33.74C393.5 228.4 400 241.8 400 255.1c0 14.17-6.5 27.59-17.81 36.83c-10.28 8.396-11.78 23.5-3.375 33.74c4.719 5.806 11.62 8.802 18.56 8.802c5.344 0 10.75-1.779 15.19-5.399C435.1 311.5 448 284.6 448 255.1S435.1 200.4 412.6 182zM473.1 108.2c-10.22-8.334-25.34-6.898-33.78 3.34c-8.406 10.24-6.906 25.35 3.344 33.74C476.6 172.1 496 213.3 496 255.1s-19.44 82.1-53.31 110.7c-10.25 8.396-11.75 23.5-3.344 33.74c4.75 5.775 11.62 8.771 18.56 8.771c5.375 0 10.75-1.779 15.22-5.431C518.2 366.9 544 313 544 255.1S518.2 145 473.1 108.2zM534.4 33.4c-10.22-8.334-25.34-6.867-33.78 3.34c-8.406 10.24-6.906 25.35 3.344 33.74C559.9 116.3 592 183.9 592 255.1s-32.09 139.7-88.06 185.5c-10.25 8.396-11.75 23.5-3.344 33.74C505.3 481 512.2 484 519.2 484c5.375 0 10.75-1.779 15.22-5.431C601.5 423.6 640 342.5 640 255.1S601.5 88.34 534.4 33.4zM301.2 34.98c-11.5-5.181-25.01-3.076-34.43 5.29L131.8 160.1H48c-26.51 0-48 21.48-48 47.96v95.92c0 26.48 21.49 47.96 48 47.96h83.84l134.9 119.8C272.7 477 280.3 479.8 288 479.8c4.438 0 8.959-.9314 13.16-2.835C312.7 471.8 320 460.4 320 447.9V64.12C320 51.55 312.7 40.13 301.2 34.98z\"],\n    \"volume-low\": [448, 512, [128264, \"volume-down\"], \"f027\", \"M412.6 181.9c-10.28-8.344-25.41-6.875-33.75 3.406c-8.406 10.25-6.906 25.37 3.375 33.78C393.5 228.4 400 241.8 400 256c0 14.19-6.5 27.62-17.81 36.87c-10.28 8.406-11.78 23.53-3.375 33.78c4.719 5.812 11.62 8.812 18.56 8.812c5.344 0 10.75-1.781 15.19-5.406C435.1 311.6 448 284.7 448 256S435.1 200.4 412.6 181.9zM301.2 34.84c-11.5-5.187-25.01-3.116-34.43 5.259L131.8 160H48c-26.51 0-48 21.49-48 47.1v95.1c0 26.51 21.49 47.1 48 47.1h83.84l134.9 119.9C272.7 477.2 280.3 480 288 480c4.438 0 8.959-.9313 13.16-2.837C312.7 472 320 460.6 320 448V64C320 51.41 312.7 39.1 301.2 34.84z\"],\n    \"volume-off\": [320, 512, [], \"f026\", \"M320 64v383.1c0 12.59-7.337 24.01-18.84 29.16C296.1 479.1 292.4 480 288 480c-7.688 0-15.28-2.781-21.27-8.094l-134.9-119.9H48c-26.51 0-48-21.49-48-47.1V208c0-26.51 21.49-47.1 48-47.1h83.84l134.9-119.9c9.422-8.375 22.93-10.45 34.43-5.259C312.7 39.1 320 51.41 320 64z\"],\n    \"volume-xmark\": [576, 512, [\"volume-mute\", \"volume-times\"], \"f6a9\", \"M301.2 34.85c-11.5-5.188-25.02-3.122-34.44 5.253L131.8 160H48c-26.51 0-48 21.49-48 47.1v95.1c0 26.51 21.49 47.1 48 47.1h83.84l134.9 119.9c5.984 5.312 13.58 8.094 21.26 8.094c4.438 0 8.972-.9375 13.17-2.844c11.5-5.156 18.82-16.56 18.82-29.16V64C319.1 51.41 312.7 40 301.2 34.85zM513.9 255.1l47.03-47.03c9.375-9.375 9.375-24.56 0-33.94s-24.56-9.375-33.94 0L480 222.1L432.1 175c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94l47.03 47.03l-47.03 47.03c-9.375 9.375-9.375 24.56 0 33.94c9.373 9.373 24.56 9.381 33.94 0L480 289.9l47.03 47.03c9.373 9.373 24.56 9.381 33.94 0c9.375-9.375 9.375-24.56 0-33.94L513.9 255.1z\"],\n    \"vr-cardboard\": [640, 512, [], \"f729\", \"M576 64H64c-35.2 0-64 28.8-64 64v256c0 35.2 28.8 64 64 64l128.3 .0001c25.18 0 48.03-14.77 58.37-37.73l27.76-61.65c7.875-17.5 24-28.63 41.63-28.63s33.75 11.13 41.63 28.63l27.75 61.63c10.35 22.98 33.2 37.75 58.4 37.75L576 448c35.2 0 64-28.8 64-64v-256C640 92.8 611.2 64 576 64zM160 304c-35.38 0-64-28.63-64-64s28.62-63.1 64-63.1s64 28.62 64 63.1S195.4 304 160 304zM480 304c-35.38 0-64-28.63-64-64s28.62-63.1 64-63.1s64 28.62 64 63.1S515.4 304 480 304z\"],\n    \"w\": [576, 512, [119], \"57\", \"M573.1 75.25l-144 384c-4.703 12.53-16.67 20.77-29.95 20.77c-.4062 0-.8125 0-1.219-.0156c-13.77-.5156-25.66-9.797-29.52-23.03L288 178.3l-81.28 278.7c-3.859 13.23-15.75 22.52-29.52 23.03c-13.75 .4687-26.33-7.844-31.17-20.75l-144-384c-6.203-16.55 2.188-34.98 18.73-41.2C37.31 27.92 55.75 36.23 61.97 52.78l110.2 293.1l85.08-291.7C261.3 41.41 273.8 32.01 288 32.01s26.73 9.396 30.72 23.05l85.08 291.7l110.2-293.1c6.219-16.55 24.67-24.86 41.2-18.73C571.8 40.26 580.2 58.7 573.1 75.25z\"],\n    \"wallet\": [512, 512, [], \"f555\", \"M448 32C465.7 32 480 46.33 480 64C480 81.67 465.7 96 448 96H80C71.16 96 64 103.2 64 112C64 120.8 71.16 128 80 128H448C483.3 128 512 156.7 512 192V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM416 336C433.7 336 448 321.7 448 304C448 286.3 433.7 272 416 272C398.3 272 384 286.3 384 304C384 321.7 398.3 336 416 336z\"],\n    \"wand-magic\": [512, 512, [\"magic\"], \"f0d0\", \"M14.06 463.3C-4.686 444.6-4.686 414.2 14.06 395.4L395.4 14.06C414.2-4.686 444.6-4.686 463.3 14.06L497.9 48.64C516.6 67.38 516.6 97.78 497.9 116.5L116.5 497.9C97.78 516.6 67.38 516.6 48.64 497.9L14.06 463.3zM347.6 187.6L452.6 82.58L429.4 59.31L324.3 164.3L347.6 187.6z\"],\n    \"wand-magic-sparkles\": [576, 512, [\"magic-wand-sparkles\"], \"e2ca\", \"M248.8 4.994C249.9 1.99 252.8 .0001 256 .0001C259.2 .0001 262.1 1.99 263.2 4.994L277.3 42.67L315 56.79C318 57.92 320 60.79 320 64C320 67.21 318 70.08 315 71.21L277.3 85.33L263.2 123C262.1 126 259.2 128 256 128C252.8 128 249.9 126 248.8 123L234.7 85.33L196.1 71.21C193.1 70.08 192 67.21 192 64C192 60.79 193.1 57.92 196.1 56.79L234.7 42.67L248.8 4.994zM427.4 14.06C446.2-4.686 476.6-4.686 495.3 14.06L529.9 48.64C548.6 67.38 548.6 97.78 529.9 116.5L148.5 497.9C129.8 516.6 99.38 516.6 80.64 497.9L46.06 463.3C27.31 444.6 27.31 414.2 46.06 395.4L427.4 14.06zM461.4 59.31L356.3 164.3L379.6 187.6L484.6 82.58L461.4 59.31zM7.491 117.2L64 96L85.19 39.49C86.88 34.98 91.19 32 96 32C100.8 32 105.1 34.98 106.8 39.49L128 96L184.5 117.2C189 118.9 192 123.2 192 128C192 132.8 189 137.1 184.5 138.8L128 160L106.8 216.5C105.1 221 100.8 224 96 224C91.19 224 86.88 221 85.19 216.5L64 160L7.491 138.8C2.985 137.1 0 132.8 0 128C0 123.2 2.985 118.9 7.491 117.2zM359.5 373.2L416 352L437.2 295.5C438.9 290.1 443.2 288 448 288C452.8 288 457.1 290.1 458.8 295.5L480 352L536.5 373.2C541 374.9 544 379.2 544 384C544 388.8 541 393.1 536.5 394.8L480 416L458.8 472.5C457.1 477 452.8 480 448 480C443.2 480 438.9 477 437.2 472.5L416 416L359.5 394.8C354.1 393.1 352 388.8 352 384C352 379.2 354.1 374.9 359.5 373.2z\"],\n    \"wand-sparkles\": [512, 512, [], \"f72b\", \"M3.682 149.1L53.32 170.7L74.02 220.3c1.016 2.043 3.698 3.696 5.977 3.696c.0078 0-.0078 0 0 0c2.271-.0156 4.934-1.661 5.946-3.696l20.72-49.63l49.62-20.71c2.023-1.008 3.68-3.681 3.691-5.947C159.1 141.7 158.3 139 156.3 138L106.9 117.4L106.5 117L85.94 67.7C84.93 65.66 82.27 64.02 80 64c-.0078 0 .0078 0 0 0c-2.279 0-4.966 1.649-5.981 3.692L53.32 117.3L3.682 138C1.652 139.1 0 141.7 0 144C0 146.3 1.652 148.9 3.682 149.1zM511.1 368c-.0039-2.273-1.658-4.95-3.687-5.966l-49.57-20.67l-20.77-49.67C436.9 289.7 434.3 288 432 288c-2.281 0-4.948 1.652-5.964 3.695l-20.7 49.63l-49.64 20.71c-2.027 1.016-3.684 3.683-3.687 5.956c.0039 2.262 1.662 4.954 3.687 5.966l49.57 20.67l20.77 49.67C427.1 446.3 429.7 448 432 448c2.277 0 4.944-1.656 5.96-3.699l20.69-49.63l49.65-20.71C510.3 372.9 511.1 370.3 511.1 368zM207.1 64l12.42 29.78C221 95.01 222.6 96 223.1 96s2.965-.9922 3.575-2.219L239.1 64l29.78-12.42c1.219-.6094 2.215-2.219 2.215-3.578c0-1.367-.996-2.969-2.215-3.578L239.1 32L227.6 2.219C226.1 .9922 225.4 0 223.1 0S221 .9922 220.4 2.219L207.1 32L178.2 44.42C176.1 45.03 176 46.63 176 48c0 1.359 .9928 2.969 2.21 3.578L207.1 64zM399.1 191.1c8.875 0 15.1-7.127 15.1-16v-28l91.87-101.7c5.75-6.371 5.5-15.1-.4999-22.12L487.8 4.774c-6.125-6.125-15.75-6.375-22.12-.625L186.6 255.1H144c-8.875 0-15.1 7.125-15.1 15.1v36.88l-117.5 106c-13.5 12.25-14.14 33.34-1.145 46.34l41.4 41.41c12.1 12.1 34.13 12.36 46.37-1.133l279.2-309.5H399.1z\"],\n    \"warehouse\": [640, 512, [], \"f494\", \"M0 488V171.3C0 145.2 15.93 121.6 40.23 111.9L308.1 4.753C315.7 1.702 324.3 1.702 331.9 4.753L599.8 111.9C624.1 121.6 640 145.2 640 171.3V488C640 501.3 629.3 512 616 512H568C554.7 512 544 501.3 544 488V223.1C544 206.3 529.7 191.1 512 191.1H128C110.3 191.1 96 206.3 96 223.1V488C96 501.3 85.25 512 72 512H24C10.75 512 0 501.3 0 488zM152 512C138.7 512 128 501.3 128 488V432H512V488C512 501.3 501.3 512 488 512H152zM128 336H512V400H128V336zM128 224H512V304H128V224z\"],\n    \"water\": [576, 512, [], \"f773\", \"M549.8 237.5c-31.23-5.719-46.84-20.06-47.13-20.31C490.4 205 470.3 205.1 457.7 216.8c-1 .9375-25.14 23-73.73 23s-72.73-22.06-73.38-22.62C298.4 204.9 278.3 205.1 265.7 216.8c-1 .9375-25.14 23-73.73 23S119.3 217.8 118.6 217.2C106.4 204.9 86.35 205 73.74 216.9C73.09 217.4 57.48 231.8 26.24 237.5c-17.38 3.188-28.89 19.84-25.72 37.22c3.188 17.38 19.78 29.09 37.25 25.72C63.1 295.8 82.49 287.1 95.96 279.2c19.5 11.53 51.47 24.68 96.04 24.68c44.55 0 76.49-13.12 96-24.65c19.52 11.53 51.45 24.59 96 24.59c44.58 0 76.55-13.09 96.05-24.62c13.47 7.938 32.86 16.62 58.19 21.25c17.56 3.375 34.06-8.344 37.25-25.72C578.7 257.4 567.2 240.7 549.8 237.5zM549.8 381.7c-31.23-5.719-46.84-20.06-47.13-20.31c-12.22-12.19-32.31-12.12-44.91-.375C456.7 361.9 432.6 384 384 384s-72.73-22.06-73.38-22.62c-12.22-12.25-32.3-12.12-44.89-.375C264.7 361.9 240.6 384 192 384s-72.73-22.06-73.38-22.62c-12.22-12.25-32.28-12.16-44.89-.3438c-.6562 .5938-16.27 14.94-47.5 20.66c-17.38 3.188-28.89 19.84-25.72 37.22C3.713 436.3 20.31 448 37.78 444.6C63.1 440 82.49 431.3 95.96 423.4c19.5 11.53 51.51 24.62 96.08 24.62c44.55 0 76.45-13.06 95.96-24.59C307.5 434.9 339.5 448 384.1 448c44.58 0 76.5-13.09 95.1-24.62c13.47 7.938 32.86 16.62 58.19 21.25C555.8 448 572.3 436.3 575.5 418.9C578.7 401.5 567.2 384.9 549.8 381.7zM37.78 156.4c25.33-4.625 44.72-13.31 58.19-21.25c19.5 11.53 51.47 24.68 96.04 24.68c44.55 0 76.49-13.12 96-24.65c19.52 11.53 51.45 24.59 96 24.59c44.58 0 76.55-13.09 96.05-24.62c13.47 7.938 32.86 16.62 58.19 21.25c17.56 3.375 34.06-8.344 37.25-25.72c3.172-17.38-8.344-34.03-25.72-37.22c-31.23-5.719-46.84-20.06-47.13-20.31c-12.22-12.19-32.31-12.12-44.91-.375c-1 .9375-25.14 23-73.73 23s-72.73-22.06-73.38-22.62c-12.22-12.25-32.3-12.12-44.89-.375c-1 .9375-25.14 23-73.73 23S119.3 73.76 118.6 73.2C106.4 60.95 86.35 61.04 73.74 72.85C73.09 73.45 57.48 87.79 26.24 93.51c-17.38 3.188-28.89 19.84-25.72 37.22C3.713 148.1 20.31 159.8 37.78 156.4z\"],\n    \"water-ladder\": [576, 512, [\"ladder-water\", \"swimming-pool\"], \"f5c5\", \"M320 128c0 .375-.1992 .6855-.2129 1.057C319.8 129.9 320 130.7 320 131.6V128zM192 383.1V288h192v95.99c39.6-.1448 53.95-17.98 64-26.83V128c0-17.62 14.38-32 32-32s32 14.38 32 32c0 17.67 14.33 32 32 32s32-14.33 32-32c0-53-42.1-95.1-95.1-95.1C420.1 32 384 81.94 384 131.6V224H192V128c0-17.62 14.38-32 32-32s32 14.38 32 32c0 17.67 14.33 32 32 32c17.3 0 31.2-13.79 31.79-30.94c-1.227-49.01-37.99-97.06-95.79-97.06C170.1 32 128 74.1 128 128v229.2C138.5 366.4 151.4 383.8 192 383.1zM576 445c0-15.14-10.82-28.59-26.25-31.42c-48.52-8.888-45.5-29.48-69.6-29.48c-25.02 0-31.19 31.79-96.18 31.79c-48.59 0-72.72-22.06-73.38-22.62c-6.141-6.157-14.26-9.188-22.42-9.188c-24.75 0-31.59 31.81-96.2 31.81c-48.59 0-72.69-22.03-73.41-22.59c-6.125-6.157-14.24-9.196-22.4-9.196c-8.072 0-16.18 2.976-22.45 8.852c-29.01 26.25-73.75 12.54-73.75 52.08c0 16.08 12.77 32.07 31.71 32.07c9.77 0 39.65-7.34 64.26-21.84c19.5 11.53 51.51 24.69 96.08 24.69s76.46-13.12 95.96-24.66c19.53 11.53 51.52 24.62 96.06 24.62c44.59 0 76.51-13.12 96.01-24.66c24.71 14.57 54.74 21.83 64.24 21.83C563.2 477.1 576 461.3 576 445z\"],\n    \"wave-square\": [640, 512, [], \"f83e\", \"M476 480h-152c-19.88 0-36-16.12-36-36v-348H192v156c0 19.88-16.12 36-36 36H31.1C14.33 288 0 273.7 0 256s14.33-31.1 31.1-31.1H128v-156c0-19.88 16.12-36 36-36h152c19.88 0 36 16.12 36 36v348h96v-156c0-19.88 16.12-36 36-36h124C625.7 224 640 238.3 640 256s-14.33 32-31.1 32H512v156C512 463.9 495.9 480 476 480z\"],\n    \"weight-hanging\": [512, 512, [], \"f5cd\", \"M510.3 445.9L437.3 153.8C433.5 138.5 420.8 128 406.4 128H346.1c3.625-9.1 5.875-20.75 5.875-32c0-53-42.1-96-96-96S159.1 43 159.1 96c0 11.25 2.25 22 5.875 32H105.6c-14.38 0-27.13 10.5-30.88 25.75l-73.01 292.1C-6.641 479.1 16.36 512 47.99 512h416C495.6 512 518.6 479.1 510.3 445.9zM256 128C238.4 128 223.1 113.6 223.1 96S238.4 64 256 64c17.63 0 32 14.38 32 32S273.6 128 256 128z\"],\n    \"weight-scale\": [512, 512, [\"weight\"], \"f496\", \"M310.3 97.25c-8-3.5-17.5 .25-21 8.5L255.8 184C233.8 184.3 216 202 216 224c0 22.12 17.88 40 40 40S296 246.1 296 224c0-10.5-4.25-20-11-27.12l33.75-78.63C322.3 110.1 318.4 100.8 310.3 97.25zM448 64h-56.23C359.5 24.91 310.7 0 256 0S152.5 24.91 120.2 64H64C28.75 64 0 92.75 0 128v320c0 35.25 28.75 64 64 64h384c35.25 0 64-28.75 64-64V128C512 92.75 483.3 64 448 64zM256 304c-70.58 0-128-57.42-128-128s57.42-128 128-128c70.58 0 128 57.42 128 128S326.6 304 256 304z\"],\n    \"wheelchair\": [512, 512, [], \"f193\", \"M510.3 421.9c-5.594-16.75-23.53-25.84-40.47-20.22l-19.38 6.438l-41.7-99.97C403.9 295.1 392.2 288 379.1 288h-97.78l-10.4-48h65.11c17.69 0 32-14.31 32-32s-14.31-32-32-32h-78.98L255.6 169.2C251.8 142.1 227.2 124.8 201.2 128.5C174.1 132.2 156.7 156.5 160.5 182.8l23.68 140.4C185.8 339.6 199.6 352 216 352h141.4l44.86 107.9C407.3 472.3 419.3 480 432 480c3.344 0 6.781-.5313 10.12-1.656l48-16C506.9 456.8 515.9 438.7 510.3 421.9zM160 464c-61.76 0-112-50.24-112-112c0-54.25 38.78-99.55 90.06-109.8L130.1 195C56.06 209 0 273.9 0 352c0 88.37 71.63 160 160 160c77.4 0 141.9-54.97 156.8-128h-49.1C252.9 430.1 210.6 464 160 464zM192 96c26.51 0 48-21.49 48-48S218.5 0 192 0S144 21.49 144 48S165.5 96 192 96z\"],\n    \"whiskey-glass\": [512, 512, [129347, \"glass-whiskey\"], \"f7a0\", \"M479.1 32H32.04C12.55 32-2.324 49.25 .3008 68.51L56.29 425.1C60.79 456.6 87.78 480 119.8 480h272.9c31.74 0 58.86-23.38 63.36-54.89l55.61-356.6C514.3 49.25 499.5 32 479.1 32zM422.7 224H89.49L69.39 96h373.2L422.7 224z\"],\n    \"wifi\": [640, 512, [\"wifi-3\", \"wifi-strong\"], \"f1eb\", \"M319.1 351.1c-35.35 0-64 28.66-64 64.01s28.66 64.01 64 64.01c35.34 0 64-28.66 64-64.01S355.3 351.1 319.1 351.1zM320 191.1c-70.25 0-137.9 25.6-190.5 72.03C116.3 275.7 115 295.9 126.7 309.2C138.5 322.4 158.7 323.7 171.9 312C212.8 275.9 265.4 256 320 256s107.3 19.88 148.1 56C474.2 317.4 481.8 320 489.3 320c8.844 0 17.66-3.656 24-10.81C525 295.9 523.8 275.7 510.5 264C457.9 217.6 390.3 191.1 320 191.1zM630.2 156.7C546.3 76.28 436.2 32 320 32S93.69 76.28 9.844 156.7c-12.75 12.25-13.16 32.5-.9375 45.25c12.22 12.78 32.47 13.12 45.25 .9375C125.1 133.1 220.4 96 320 96s193.1 37.97 265.8 106.9C592.1 208.8 600 211.8 608 211.8c8.406 0 16.81-3.281 23.09-9.844C643.3 189.2 642.9 168.1 630.2 156.7z\"],\n    \"wind\": [512, 512, [], \"f72e\", \"M32 192h320c52.94 0 96-43.06 96-96s-43.06-96-96-96h-32c-17.69 0-32 14.31-32 32s14.31 32 32 32h32c17.66 0 32 14.34 32 32s-14.34 32-32 32H32C14.31 128 0 142.3 0 160S14.31 192 32 192zM160 320H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h128c17.66 0 32 14.34 32 32s-14.34 32-32 32H128c-17.69 0-32 14.31-32 32s14.31 32 32 32h32c52.94 0 96-43.06 96-96S212.9 320 160 320zM416 224H32C14.31 224 0 238.3 0 256s14.31 32 32 32h384c17.66 0 32 14.34 32 32s-14.34 32-32 32h-32c-17.69 0-32 14.31-32 32s14.31 32 32 32h32c52.94 0 96-43.06 96-96S468.9 224 416 224z\"],\n    \"window-maximize\": [512, 512, [128470], \"f2d0\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM96 96C78.33 96 64 110.3 64 128C64 145.7 78.33 160 96 160H416C433.7 160 448 145.7 448 128C448 110.3 433.7 96 416 96H96z\"],\n    \"window-minimize\": [512, 512, [128469], \"f2d1\", \"M0 448C0 430.3 14.33 416 32 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H32C14.33 480 0 465.7 0 448z\"],\n    \"window-restore\": [512, 512, [], \"f2d2\", \"M432 64H208C199.2 64 192 71.16 192 80V96H128V80C128 35.82 163.8 0 208 0H432C476.2 0 512 35.82 512 80V304C512 348.2 476.2 384 432 384H416V320H432C440.8 320 448 312.8 448 304V80C448 71.16 440.8 64 432 64zM0 192C0 156.7 28.65 128 64 128H320C355.3 128 384 156.7 384 192V448C384 483.3 355.3 512 320 512H64C28.65 512 0 483.3 0 448V192zM96 256H288C305.7 256 320 241.7 320 224C320 206.3 305.7 192 288 192H96C78.33 192 64 206.3 64 224C64 241.7 78.33 256 96 256z\"],\n    \"wine-bottle\": [512, 512, [], \"f72f\", \"M507.3 72.57l-67.88-67.88c-6.252-6.25-16.38-6.25-22.63 0l-22.63 22.62c-6.25 6.254-6.251 16.38-.0006 22.63l-76.63 76.63c-46.63-19.75-102.4-10.75-140.4 27.25l-158.4 158.4c-25 25-25 65.51 0 90.51l90.51 90.52c25 25 65.51 25 90.51 0l158.4-158.4c38-38 47-93.76 27.25-140.4l76.63-76.63c6.25 6.25 16.5 6.25 22.75 0l22.63-22.63C513.5 88.95 513.5 78.82 507.3 72.57zM179.3 423.2l-90.51-90.51l122-122l90.51 90.52L179.3 423.2z\"],\n    \"wine-glass\": [320, 512, [127863], \"f4e3\", \"M232 464h-40.01v-117.3c68.51-15.88 118-79.86 111.4-154.1L287.5 14.5C286.8 6.25 279.9 0 271.8 0H48.23C40.1 0 33.22 6.25 32.47 14.5L16.6 192.6c-6.626 74.25 42.88 138.2 111.4 154.2V464H87.98c-22.13 0-40.01 17.88-40.01 40c0 4.375 3.626 8 8.002 8h208c4.376 0 8.002-3.625 8.002-8C272 481.9 254.1 464 232 464zM77.72 48h164.6L249.4 128H70.58L77.72 48z\"],\n    \"wine-glass-empty\": [320, 512, [\"wine-glass-alt\"], \"f5ce\", \"M232 464h-40.01v-117.3c68.52-15.88 118-79.86 111.4-154.1L287.5 14.5C286.8 6.25 279.9 0 271.8 0H48.23C40.1 0 33.22 6.25 32.47 14.5L16.6 192.6c-6.625 74.25 42.88 138.2 111.4 154.2V464H87.98c-22.13 0-40.01 17.88-40.01 40c0 4.375 3.625 8 8.002 8h208c4.377 0 8.002-3.625 8.002-8C272 481.9 254.1 464 232 464zM180.4 300.2c-13.64 3.16-27.84 3.148-41.48-.0371C91.88 289.2 60.09 245.2 64.38 197.1L77.7 48h164.6L255.6 197.2c4.279 48.01-27.5 91.93-74.46 102.8L180.4 300.2z\"],\n    \"won-sign\": [512, 512, [8361, \"krw\", \"won\"], \"f159\", \"M119.1 224H183L224.1 56.24C228.5 41.99 241.3 32 256 32C270.7 32 283.5 41.99 287 56.24L328.1 224H392.9L449.6 53.88C455.2 37.12 473.4 28.05 490.1 33.64C506.9 39.23 515.9 57.35 510.4 74.12L460.4 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H439.1L382.4 458.1C377.9 471.6 364.1 480.5 350.8 479.1C336.6 479.4 324.4 469.6 320.1 455.8L279 288H232.1L191 455.8C187.6 469.6 175.4 479.4 161.2 479.1C147 480.5 134.1 471.6 129.6 458.1L72.94 288H32C14.33 288 .001 273.7 .001 256C.001 238.3 14.33 224 32 224H51.6L1.643 74.12C-3.946 57.35 5.115 39.23 21.88 33.64C38.65 28.05 56.77 37.12 62.36 53.88L119.1 224zM140.4 288L155.6 333.6L167 288H140.4zM248.1 224H263L256 195.9L248.1 224zM344.1 288L356.4 333.6L371.6 288H344.1z\"],\n    \"wrench\": [512, 512, [128295], \"f0ad\", \"M507.6 122.8c-2.904-12.09-18.25-16.13-27.04-7.338l-76.55 76.56l-83.1-.0002l0-83.1l76.55-76.56c8.791-8.789 4.75-24.14-7.336-27.04c-23.69-5.693-49.34-6.111-75.92 .2484c-61.45 14.7-109.4 66.9-119.2 129.3C189.8 160.8 192.3 186.7 200.1 210.1l-178.1 178.1c-28.12 28.12-28.12 73.69 0 101.8C35.16 504.1 53.56 512 71.1 512s36.84-7.031 50.91-21.09l178.1-178.1c23.46 7.736 49.31 10.24 76.17 6.004c62.41-9.84 114.6-57.8 129.3-119.2C513.7 172.1 513.3 146.5 507.6 122.8zM80 456c-13.25 0-24-10.75-24-24c0-13.26 10.75-24 24-24s24 10.74 24 24C104 445.3 93.25 456 80 456z\"],\n    \"x\": [384, 512, [120], \"58\", \"M376.6 427.5c11.31 13.58 9.484 33.75-4.094 45.06c-5.984 4.984-13.25 7.422-20.47 7.422c-9.172 0-18.27-3.922-24.59-11.52L192 305.1l-135.4 162.5c-6.328 7.594-15.42 11.52-24.59 11.52c-7.219 0-14.48-2.438-20.47-7.422c-13.58-11.31-15.41-31.48-4.094-45.06l142.9-171.5L7.422 84.5C-3.891 70.92-2.063 50.75 11.52 39.44c13.56-11.34 33.73-9.516 45.06 4.094L192 206l135.4-162.5c11.3-13.58 31.48-15.42 45.06-4.094c13.58 11.31 15.41 31.48 4.094 45.06l-142.9 171.5L376.6 427.5z\"],\n    \"x-ray\": [512, 512, [], \"f497\", \"M208 352C199.2 352 192 359.2 192 368C192 376.8 199.2 384 208 384S224 376.8 224 368C224 359.2 216.8 352 208 352zM304 384c8.836 0 16-7.164 16-16c0-8.838-7.164-16-16-16S288 359.2 288 368C288 376.8 295.2 384 304 384zM496 96C504.8 96 512 88.84 512 80v-32C512 39.16 504.8 32 496 32h-480C7.164 32 0 39.16 0 48v32C0 88.84 7.164 96 16 96H32v320H16C7.164 416 0 423.2 0 432v32C0 472.8 7.164 480 16 480h480c8.836 0 16-7.164 16-16v-32c0-8.836-7.164-16-16-16H480V96H496zM416 216C416 220.4 412.4 224 408 224H272v32h104C380.4 256 384 259.6 384 264v16C384 284.4 380.4 288 376 288H272v32h69.33c25.56 0 40.8 28.48 26.62 49.75l-21.33 32C340.7 410.7 330.7 416 319.1 416H192c-10.7 0-20.69-5.347-26.62-14.25l-21.33-32C129.9 348.5 145.1 320 170.7 320H240V288H136C131.6 288 128 284.4 128 280v-16C128 259.6 131.6 256 136 256H240V224H104C99.6 224 96 220.4 96 216v-16C96 195.6 99.6 192 104 192H240V160H136C131.6 160 128 156.4 128 152v-16C128 131.6 131.6 128 136 128H240V104C240 99.6 243.6 96 248 96h16c4.4 0 8 3.6 8 8V128h104C380.4 128 384 131.6 384 136v16C384 156.4 380.4 160 376 160H272v32h136C412.4 192 416 195.6 416 200V216z\"],\n    \"xmark\": [320, 512, [128473, 10005, 10006, 10060, 215, \"close\", \"multiply\", \"remove\", \"times\"], \"f00d\", \"M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z\"],\n    \"y\": [384, 512, [121], \"59\", \"M378 82.61L224 298.3v149.8c0 17.67-14.31 31.1-32 31.1S160 465.7 160 448V298.3L5.969 82.61C-4.313 68.23-.9688 48.25 13.41 37.97c14.34-10.27 34.38-6.922 44.63 7.453L192 232.1l133.1-187.5c10.28-14.37 30.28-17.7 44.63-7.453C384.1 48.25 388.3 68.23 378 82.61z\"],\n    \"yen-sign\": [320, 512, [165, \"cny\", \"jpy\", \"rmb\", \"yen\"], \"f157\", \"M159.1 198.3L261.4 46.25C271.2 31.54 291 27.57 305.8 37.37C320.5 47.18 324.4 67.04 314.6 81.75L219.8 223.1H272C289.7 223.1 304 238.3 304 255.1C304 273.7 289.7 287.1 272 287.1H192V319.1H272C289.7 319.1 304 334.3 304 352C304 369.7 289.7 384 272 384H192V448C192 465.7 177.7 480 159.1 480C142.3 480 127.1 465.7 127.1 448V384H47.1C30.33 384 15.1 369.7 15.1 352C15.1 334.3 30.33 319.1 47.1 319.1H127.1V287.1H47.1C30.33 287.1 15.1 273.7 15.1 255.1C15.1 238.3 30.33 223.1 47.1 223.1H100.2L5.374 81.75C-4.429 67.04-.456 47.18 14.25 37.37C28.95 27.57 48.82 31.54 58.62 46.25L159.1 198.3z\"],\n    \"yin-yang\": [512, 512, [9775], \"f6ad\", \"M256 128C238.3 128 224 142.4 224 160S238.3 192 256 192s31.97-14.38 31.97-32S273.7 128 256 128zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 384c-17.68 0-31.97-14.38-31.97-32S238.3 320 256 320s31.97 14.38 31.97 32S273.7 384 256 384zM256 256c-53.04 0-96.03 43-96.03 96S202.1 448 256 448c-106.1 0-192.1-86-192.1-192S149.9 64 256 64c53.04 0 96.03 43 96.03 96S309 256 256 256z\"],\n    \"z\": [384, 512, [122], \"5a\", \"M384 448c0 17.67-14.31 32-32 32H32c-12.41 0-23.72-7.188-28.97-18.42c-5.281-11.25-3.562-24.53 4.375-34.06l276.3-331.5H32c-17.69 0-32-14.33-32-32s14.31-32 32-32h320c12.41 0 23.72 7.188 28.97 18.42c5.281 11.25 3.562 24.53-4.375 34.06L100.3 416H352C369.7 416 384 430.3 384 448z\"]\n  };\n\n  bunker(function () {\n    defineIcons('fas', icons);\n    defineIcons('fa-solid', icons);\n  });\n\n}());\n(function () {\n  'use strict';\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n\n  function _wrapRegExp() {\n    _wrapRegExp = function (re, groups) {\n      return new BabelRegExp(re, void 0, groups);\n    };\n\n    var _super = RegExp.prototype,\n        _groups = new WeakMap();\n\n    function BabelRegExp(re, flags, groups) {\n      var _this = new RegExp(re, flags);\n\n      return _groups.set(_this, groups || _groups.get(re)), _setPrototypeOf(_this, BabelRegExp.prototype);\n    }\n\n    function buildGroups(result, re) {\n      var g = _groups.get(re);\n\n      return Object.keys(g).reduce(function (groups, name) {\n        return groups[name] = result[g[name]], groups;\n      }, Object.create(null));\n    }\n\n    return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (str) {\n      var result = _super.exec.call(this, str);\n\n      return result && (result.groups = buildGroups(result, this)), result;\n    }, BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\n      if (\"string\" == typeof substitution) {\n        var groups = _groups.get(this);\n\n        return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\n          return \"$\" + groups[name];\n        }));\n      }\n\n      if (\"function\" == typeof substitution) {\n        var _this = this;\n\n        return _super[Symbol.replace].call(this, str, function () {\n          var args = arguments;\n          return \"object\" != typeof args[args.length - 1] && (args = [].slice.call(args)).push(buildGroups(args, _this)), substitution.apply(this, args);\n        });\n      }\n\n      return _super[Symbol.replace].call(this, str, substitution);\n    }, _wrapRegExp.apply(this, arguments);\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    Object.defineProperty(Constructor, \"prototype\", {\n      writable: false\n    });\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    Object.defineProperty(subClass, \"prototype\", {\n      writable: false\n    });\n    if (superClass) _setPrototypeOf(subClass, superClass);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _iterableToArrayLimit(arr, i) {\n    var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n    if (_i == null) return;\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n\n    var _s, _e;\n\n    try {\n      for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  function _nonIterableRest() {\n    throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var noop = function noop() {};\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n  var _MUTATION_OBSERVER = null;\n  var _PERFORMANCE = {\n    mark: noop,\n    measure: noop\n  };\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n    if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n    if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var MUTATION_OBSERVER = _MUTATION_OBSERVER;\n  var PERFORMANCE = _PERFORMANCE;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var UNITS_IN_GRID = 16;\n  var DEFAULT_FAMILY_PREFIX = 'fa';\n  var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\n  var DATA_FA_I2SVG = 'data-fa-i2svg';\n  var DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\n  var DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\n  var DATA_PREFIX = 'data-prefix';\n  var DATA_ICON = 'data-icon';\n  var HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\n  var MUTATION_APPROACH_ASYNC = 'async';\n  var TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\n  var PRODUCTION = function () {\n    try {\n      return \"production\" === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var PREFIX_TO_STYLE = {\n    'fas': 'solid',\n    'fa-solid': 'solid',\n    'far': 'regular',\n    'fa-regular': 'regular',\n    'fal': 'light',\n    'fa-light': 'light',\n    'fat': 'thin',\n    'fa-thin': 'thin',\n    'fad': 'duotone',\n    'fa-duotone': 'duotone',\n    'fab': 'brands',\n    'fa-brands': 'brands',\n    'fak': 'kit',\n    'fa-kit': 'kit',\n    'fa': 'solid'\n  };\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var PREFIX_TO_LONG_STYLE = {\n    'fab': 'fa-brands',\n    'fad': 'fa-duotone',\n    'fak': 'fa-kit',\n    'fal': 'fa-light',\n    'far': 'fa-regular',\n    'fas': 'fa-solid',\n    'fat': 'fa-thin'\n  };\n  var LONG_STYLE_TO_PREFIX = {\n    'fa-brands': 'fab',\n    'fa-duotone': 'fad',\n    'fa-kit': 'fak',\n    'fa-light': 'fal',\n    'fa-regular': 'far',\n    'fa-solid': 'fas',\n    'fa-thin': 'fat'\n  };\n  var ICON_SELECTION_SYNTAX_PATTERN = /fa[srltdbk\\-\\ ]/; // eslint-disable-line no-useless-escape\n\n  var LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\n  var FONT_FAMILY_PATTERN = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Kit)?.*/i; // TODO: do we need to handle font-weight for kit SVG pseudo-elements?\n\n  var FONT_WEIGHT_TO_PREFIX = {\n    '900': 'fas',\n    '400': 'far',\n    'normal': 'far',\n    '300': 'fal',\n    '100': 'fat'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  var initial = WINDOW.FontAwesomeConfig || {};\n\n  function getAttrConfig(attr) {\n    var element = DOCUMENT.querySelector('script[' + attr + ']');\n\n    if (element) {\n      return element.getAttribute(attr);\n    }\n  }\n\n  function coerce(val) {\n    // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n    // We'll assume that this is an indication that it should be toggled to true\n    // For example <script data-search-pseudo-elements src=\"...\"></script>\n    if (val === '') return true;\n    if (val === 'false') return false;\n    if (val === 'true') return true;\n    return val;\n  }\n\n  if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n    var attrs = [['data-family-prefix', 'familyPrefix'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n    attrs.forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          attr = _ref2[0],\n          key = _ref2[1];\n\n      var val = coerce(getAttrConfig(attr));\n\n      if (val !== undefined && val !== null) {\n        initial[key] = val;\n      }\n    });\n  }\n\n  var _default = {\n    familyPrefix: DEFAULT_FAMILY_PREFIX,\n    styleDefault: 'solid',\n    replacementClass: DEFAULT_REPLACEMENT_CLASS,\n    autoReplaceSvg: true,\n    autoAddCss: true,\n    autoA11y: true,\n    searchPseudoElements: false,\n    observeMutations: true,\n    mutateApproach: 'async',\n    keepOriginalSource: true,\n    measurePerformance: false,\n    showMissingIcons: true\n  };\n\n  var _config = _objectSpread2(_objectSpread2({}, _default), initial);\n\n  if (!_config.autoReplaceSvg) _config.observeMutations = false;\n  var config = {};\n  Object.keys(_config).forEach(function (key) {\n    Object.defineProperty(config, key, {\n      enumerable: true,\n      set: function set(val) {\n        _config[key] = val;\n\n        _onChangeCb.forEach(function (cb) {\n          return cb(config);\n        });\n      },\n      get: function get() {\n        return _config[key];\n      }\n    });\n  });\n  WINDOW.FontAwesomeConfig = config;\n  var _onChangeCb = [];\n  function onChange(cb) {\n    _onChangeCb.push(cb);\n\n    return function () {\n      _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n    };\n  }\n\n  var d = UNITS_IN_GRID;\n  var meaninglessTransform = {\n    size: 16,\n    x: 0,\n    y: 0,\n    rotate: 0,\n    flipX: false,\n    flipY: false\n  };\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n  function insertCss(css) {\n    if (!css || !IS_DOM) {\n      return;\n    }\n\n    var style = DOCUMENT.createElement('style');\n    style.setAttribute('type', 'text/css');\n    style.innerHTML = css;\n    var headChildren = DOCUMENT.head.childNodes;\n    var beforeChild = null;\n\n    for (var i = headChildren.length - 1; i > -1; i--) {\n      var child = headChildren[i];\n      var tagName = (child.tagName || '').toUpperCase();\n\n      if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n        beforeChild = child;\n      }\n    }\n\n    DOCUMENT.head.insertBefore(style, beforeChild);\n    return css;\n  }\n  var idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n  function nextUniqueId() {\n    var size = 12;\n    var id = '';\n\n    while (size-- > 0) {\n      id += idPool[Math.random() * 62 | 0];\n    }\n\n    return id;\n  }\n  function toArray(obj) {\n    var array = [];\n\n    for (var i = (obj || []).length >>> 0; i--;) {\n      array[i] = obj[i];\n    }\n\n    return array;\n  }\n  function classArray(node) {\n    if (node.classList) {\n      return toArray(node.classList);\n    } else {\n      return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n        return i;\n      });\n    }\n  }\n  function htmlEscape(str) {\n    return \"\".concat(str).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n  }\n  function joinAttributes(attributes) {\n    return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n      return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n    }, '').trim();\n  }\n  function joinStyles(styles) {\n    return Object.keys(styles || {}).reduce(function (acc, styleName) {\n      return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n    }, '');\n  }\n  function transformIsMeaningful(transform) {\n    return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n  }\n  function transformForSvg(_ref) {\n    var transform = _ref.transform,\n        containerWidth = _ref.containerWidth,\n        iconWidth = _ref.iconWidth;\n    var outer = {\n      transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n    };\n    var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n    var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n    var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n    var inner = {\n      transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n    };\n    var path = {\n      transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n    };\n    return {\n      outer: outer,\n      inner: inner,\n      path: path\n    };\n  }\n  function transformForCss(_ref2) {\n    var transform = _ref2.transform,\n        _ref2$width = _ref2.width,\n        width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n        _ref2$height = _ref2.height,\n        height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n        _ref2$startCentered = _ref2.startCentered,\n        startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n    var val = '';\n\n    if (startCentered && IS_IE) {\n      val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n    } else if (startCentered) {\n      val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n    } else {\n      val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n    }\n\n    val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n    val += \"rotate(\".concat(transform.rotate, \"deg) \");\n    return val;\n  }\n\n  var baseStyles = \":host,:root{--fa-font-solid:normal 900 1em/1 \\\"Font Awesome 6 Solid\\\";--fa-font-regular:normal 400 1em/1 \\\"Font Awesome 6 Regular\\\";--fa-font-light:normal 300 1em/1 \\\"Font Awesome 6 Light\\\";--fa-font-thin:normal 100 1em/1 \\\"Font Awesome 6 Thin\\\";--fa-font-duotone:normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";--fa-font-brands:normal 400 1em/1 \\\"Font Awesome 6 Brands\\\"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.0714285705em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width,2em) * -1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fa-sr-only-focusable:not(:focus),.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)}\";\n\n  function css() {\n    var dfp = DEFAULT_FAMILY_PREFIX;\n    var drc = DEFAULT_REPLACEMENT_CLASS;\n    var fp = config.familyPrefix;\n    var rc = config.replacementClass;\n    var s = baseStyles;\n\n    if (fp !== dfp || rc !== drc) {\n      var dPatt = new RegExp(\"\\\\.\".concat(dfp, \"\\\\-\"), 'g');\n      var customPropPatt = new RegExp(\"\\\\--\".concat(dfp, \"\\\\-\"), 'g');\n      var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n      s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n    }\n\n    return s;\n  }\n\n  var _cssInserted = false;\n\n  function ensureCss() {\n    if (config.autoAddCss && !_cssInserted) {\n      insertCss(css());\n      _cssInserted = true;\n    }\n  }\n\n  var InjectCSS = {\n    mixout: function mixout() {\n      return {\n        dom: {\n          css: css,\n          insertCss: ensureCss\n        }\n      };\n    },\n    hooks: function hooks() {\n      return {\n        beforeDOMElementCreation: function beforeDOMElementCreation() {\n          ensureCss();\n        },\n        beforeI2svg: function beforeI2svg() {\n          ensureCss();\n        }\n      };\n    }\n  };\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  var functions = [];\n\n  var listener = function listener() {\n    DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n    loaded = 1;\n    functions.map(function (fn) {\n      return fn();\n    });\n  };\n\n  var loaded = false;\n\n  if (IS_DOM) {\n    loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n    if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n  }\n\n  function domready (fn) {\n    if (!IS_DOM) return;\n    loaded ? setTimeout(fn, 0) : functions.push(fn);\n  }\n\n  function toHtml(abstractNodes) {\n    var tag = abstractNodes.tag,\n        _abstractNodes$attrib = abstractNodes.attributes,\n        attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n        _abstractNodes$childr = abstractNodes.children,\n        children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n    if (typeof abstractNodes === 'string') {\n      return htmlEscape(abstractNodes);\n    } else {\n      return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"</\").concat(tag, \">\");\n    }\n  }\n\n  function iconFromMapping(mapping, prefix, iconName) {\n    if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n      return {\n        prefix: prefix,\n        iconName: iconName,\n        icon: mapping[prefix][iconName]\n      };\n    }\n  }\n\n  /**\n   * Internal helper to bind a function known to have 4 arguments\n   * to a given context.\n   */\n\n  var bindInternal4 = function bindInternal4(func, thisContext) {\n    return function (a, b, c, d) {\n      return func.call(thisContext, a, b, c, d);\n    };\n  };\n\n  /**\n   * # Reduce\n   *\n   * A fast object `.reduce()` implementation.\n   *\n   * @param  {Object}   subject      The object to reduce over.\n   * @param  {Function} fn           The reducer function.\n   * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].\n   * @param  {Object}   thisContext  The context for the reducer.\n   * @return {mixed}                 The final result.\n   */\n\n\n  var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n    var keys = Object.keys(subject),\n        length = keys.length,\n        iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n        i,\n        key,\n        result;\n\n    if (initialValue === undefined) {\n      i = 1;\n      result = subject[keys[0]];\n    } else {\n      i = 0;\n      result = initialValue;\n    }\n\n    for (; i < length; i++) {\n      key = keys[i];\n      result = iterator(result, subject[key], key, subject);\n    }\n\n    return result;\n  };\n\n  /**\n   * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n   *\n   * Copyright Mathias Bynens <https://mathiasbynens.be/>\n\n   * Permission is hereby granted, free of charge, to any person obtaining\n   * a copy of this software and associated documentation files (the\n   * \"Software\"), to deal in the Software without restriction, including\n   * without limitation the rights to use, copy, modify, merge, publish,\n   * distribute, sublicense, and/or sell copies of the Software, and to\n   * permit persons to whom the Software is furnished to do so, subject to\n   * the following conditions:\n\n   * The above copyright notice and this permission notice shall be\n   * included in all copies or substantial portions of the Software.\n\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n   */\n  function ucs2decode(string) {\n    var output = [];\n    var counter = 0;\n    var length = string.length;\n\n    while (counter < length) {\n      var value = string.charCodeAt(counter++);\n\n      if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n        var extra = string.charCodeAt(counter++);\n\n        if ((extra & 0xFC00) == 0xDC00) {\n          // eslint-disable-line eqeqeq\n          output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n        } else {\n          output.push(value);\n          counter--;\n        }\n      } else {\n        output.push(value);\n      }\n    }\n\n    return output;\n  }\n\n  function toHex(unicode) {\n    var decoded = ucs2decode(unicode);\n    return decoded.length === 1 ? decoded[0].toString(16) : null;\n  }\n  function codePointAt(string, index) {\n    var size = string.length;\n    var first = string.charCodeAt(index);\n    var second;\n\n    if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n      second = string.charCodeAt(index + 1);\n\n      if (second >= 0xDC00 && second <= 0xDFFF) {\n        return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      }\n    }\n\n    return first;\n  }\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce(function (acc, iconName) {\n      var icon = icons[iconName];\n      var expanded = !!icon.icon;\n\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n\n      return acc;\n    }, {});\n  }\n\n  function defineIcons(prefix, icons) {\n    var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _params$skipHooks = params.skipHooks,\n        skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n    var normalized = normalizeIcons(icons);\n\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n\n\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"((?:(?!\")[\\s\\S])+)\".*path d=\"((?:(?!\")[\\s\\S])+)\"/, {\n    d1: 1,\n    d2: 2\n  }), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\".*path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n    cls1: 1,\n    d1: 2,\n    cls2: 3,\n    d2: 4\n  }), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n    cls1: 1,\n    d1: 2\n  })];\n\n  var styles = namespace.styles,\n      shims = namespace.shims;\n  var LONG_STYLE = Object.values(PREFIX_TO_LONG_STYLE);\n  var _defaultUsablePrefix = null;\n  var _byUnicode = {};\n  var _byLigature = {};\n  var _byOldName = {};\n  var _byOldUnicode = {};\n  var _byAlias = {};\n  var PREFIXES = Object.keys(PREFIX_TO_STYLE);\n\n  function isReserved(name) {\n    return ~RESERVED_CLASSES.indexOf(name);\n  }\n\n  function getIconName(familyPrefix, cls) {\n    var parts = cls.split('-');\n    var prefix = parts[0];\n    var iconName = parts.slice(1).join('-');\n\n    if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\n      return iconName;\n    } else {\n      return null;\n    }\n  }\n  var build = function build() {\n    var lookup = function lookup(reducer) {\n      return reduce(styles, function (o, style, prefix) {\n        o[prefix] = reduce(style, reducer, {});\n        return o;\n      }, {});\n    };\n\n    _byUnicode = lookup(function (acc, icon, iconName) {\n      if (icon[3]) {\n        acc[icon[3]] = iconName;\n      }\n\n      if (icon[2]) {\n        var aliases = icon[2].filter(function (a) {\n          return typeof a === 'number';\n        });\n        aliases.forEach(function (alias) {\n          acc[alias.toString(16)] = iconName;\n        });\n      }\n\n      return acc;\n    });\n    _byLigature = lookup(function (acc, icon, iconName) {\n      acc[iconName] = iconName;\n\n      if (icon[2]) {\n        var aliases = icon[2].filter(function (a) {\n          return typeof a === 'string';\n        });\n        aliases.forEach(function (alias) {\n          acc[alias] = iconName;\n        });\n      }\n\n      return acc;\n    });\n    _byAlias = lookup(function (acc, icon, iconName) {\n      var aliases = icon[2];\n      acc[iconName] = iconName;\n      aliases.forEach(function (alias) {\n        acc[alias] = iconName;\n      });\n      return acc;\n    }); // If we have a Kit, we can't determine if regular is available since we\n    // could be auto-fetching it. We'll have to assume that it is available.\n\n    var hasRegular = 'far' in styles || config.autoFetchSvg;\n    var shimLookups = reduce(shims, function (acc, shim) {\n      var maybeNameMaybeUnicode = shim[0];\n      var prefix = shim[1];\n      var iconName = shim[2];\n\n      if (prefix === 'far' && !hasRegular) {\n        prefix = 'fas';\n      }\n\n      if (typeof maybeNameMaybeUnicode === 'string') {\n        acc.names[maybeNameMaybeUnicode] = {\n          prefix: prefix,\n          iconName: iconName\n        };\n      }\n\n      if (typeof maybeNameMaybeUnicode === 'number') {\n        acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n          prefix: prefix,\n          iconName: iconName\n        };\n      }\n\n      return acc;\n    }, {\n      names: {},\n      unicodes: {}\n    });\n    _byOldName = shimLookups.names;\n    _byOldUnicode = shimLookups.unicodes;\n    _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault);\n  };\n  onChange(function (c) {\n    _defaultUsablePrefix = getCanonicalPrefix(c.styleDefault);\n  });\n  build();\n  function byUnicode(prefix, unicode) {\n    return (_byUnicode[prefix] || {})[unicode];\n  }\n  function byLigature(prefix, ligature) {\n    return (_byLigature[prefix] || {})[ligature];\n  }\n  function byAlias(prefix, alias) {\n    return (_byAlias[prefix] || {})[alias];\n  }\n  function byOldName(name) {\n    return _byOldName[name] || {\n      prefix: null,\n      iconName: null\n    };\n  }\n  function byOldUnicode(unicode) {\n    var oldUnicode = _byOldUnicode[unicode];\n    var newUnicode = byUnicode('fas', unicode);\n    return oldUnicode || (newUnicode ? {\n      prefix: 'fas',\n      iconName: newUnicode\n    } : null) || {\n      prefix: null,\n      iconName: null\n    };\n  }\n  function getDefaultUsablePrefix() {\n    return _defaultUsablePrefix;\n  }\n  var emptyCanonicalIcon = function emptyCanonicalIcon() {\n    return {\n      prefix: null,\n      iconName: null,\n      rest: []\n    };\n  };\n  function getCanonicalPrefix(styleOrPrefix) {\n    var style = PREFIX_TO_STYLE[styleOrPrefix];\n    var prefix = STYLE_TO_PREFIX[styleOrPrefix] || STYLE_TO_PREFIX[style];\n    var defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n    return prefix || defined || null;\n  }\n  function getCanonicalIcon(values) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _params$skipLookups = params.skipLookups,\n        skipLookups = _params$skipLookups === void 0 ? false : _params$skipLookups;\n    var givenPrefix = null;\n    var canonical = values.reduce(function (acc, cls) {\n      var iconName = getIconName(config.familyPrefix, cls);\n\n      if (styles[cls]) {\n        cls = LONG_STYLE.includes(cls) ? LONG_STYLE_TO_PREFIX[cls] : cls;\n        givenPrefix = cls;\n        acc.prefix = cls;\n      } else if (PREFIXES.indexOf(cls) > -1) {\n        givenPrefix = cls;\n        acc.prefix = getCanonicalPrefix(cls);\n      } else if (iconName) {\n        acc.iconName = iconName;\n      } else if (cls !== config.replacementClass) {\n        acc.rest.push(cls);\n      }\n\n      if (!skipLookups && acc.prefix && acc.iconName) {\n        var shim = givenPrefix === 'fa' ? byOldName(acc.iconName) : {};\n        var aliasIconName = byAlias(acc.prefix, acc.iconName);\n\n        if (shim.prefix) {\n          givenPrefix = null;\n        }\n\n        acc.iconName = shim.iconName || aliasIconName || acc.iconName;\n        acc.prefix = shim.prefix || acc.prefix;\n\n        if (acc.prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n          // Allow a fallback from the regular style to solid if regular is not available\n          // but only if we aren't auto-fetching SVGs\n          acc.prefix = 'fas';\n        }\n      }\n\n      return acc;\n    }, emptyCanonicalIcon());\n\n    if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n      // The fa prefix is not canonical. So if it has made it through until this point\n      // we will shift it to the correct prefix.\n      canonical.prefix = getDefaultUsablePrefix() || 'fas';\n    }\n\n    return canonical;\n  }\n\n  var Library = /*#__PURE__*/function () {\n    function Library() {\n      _classCallCheck(this, Library);\n\n      this.definitions = {};\n    }\n\n    _createClass(Library, [{\n      key: \"add\",\n      value: function add() {\n        var _this = this;\n\n        for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n          definitions[_key] = arguments[_key];\n        }\n\n        var additions = definitions.reduce(this._pullDefinitions, {});\n        Object.keys(additions).forEach(function (key) {\n          _this.definitions[key] = _objectSpread2(_objectSpread2({}, _this.definitions[key] || {}), additions[key]);\n          defineIcons(key, additions[key]);\n          var longPrefix = PREFIX_TO_LONG_STYLE[key];\n          if (longPrefix) defineIcons(longPrefix, additions[key]);\n          build();\n        });\n      }\n    }, {\n      key: \"reset\",\n      value: function reset() {\n        this.definitions = {};\n      }\n    }, {\n      key: \"_pullDefinitions\",\n      value: function _pullDefinitions(additions, definition) {\n        var normalized = definition.prefix && definition.iconName && definition.icon ? {\n          0: definition\n        } : definition;\n        Object.keys(normalized).map(function (key) {\n          var _normalized$key = normalized[key],\n              prefix = _normalized$key.prefix,\n              iconName = _normalized$key.iconName,\n              icon = _normalized$key.icon;\n          var aliases = icon[2];\n          if (!additions[prefix]) additions[prefix] = {};\n\n          if (aliases.length > 0) {\n            aliases.forEach(function (alias) {\n              if (typeof alias === 'string') {\n                additions[prefix][alias] = icon;\n              }\n            });\n          }\n\n          additions[prefix][iconName] = icon;\n        });\n        return additions;\n      }\n    }]);\n\n    return Library;\n  }();\n\n  var _plugins = [];\n  var _hooks = {};\n  var providers = {};\n  var defaultProviderKeys = Object.keys(providers);\n  function registerPlugins(nextPlugins, _ref) {\n    var obj = _ref.mixoutsTo;\n    _plugins = nextPlugins;\n    _hooks = {};\n    Object.keys(providers).forEach(function (k) {\n      if (defaultProviderKeys.indexOf(k) === -1) {\n        delete providers[k];\n      }\n    });\n\n    _plugins.forEach(function (plugin) {\n      var mixout = plugin.mixout ? plugin.mixout() : {};\n      Object.keys(mixout).forEach(function (tk) {\n        if (typeof mixout[tk] === 'function') {\n          obj[tk] = mixout[tk];\n        }\n\n        if (_typeof(mixout[tk]) === 'object') {\n          Object.keys(mixout[tk]).forEach(function (sk) {\n            if (!obj[tk]) {\n              obj[tk] = {};\n            }\n\n            obj[tk][sk] = mixout[tk][sk];\n          });\n        }\n      });\n\n      if (plugin.hooks) {\n        var hooks = plugin.hooks();\n        Object.keys(hooks).forEach(function (hook) {\n          if (!_hooks[hook]) {\n            _hooks[hook] = [];\n          }\n\n          _hooks[hook].push(hooks[hook]);\n        });\n      }\n\n      if (plugin.provides) {\n        plugin.provides(providers);\n      }\n    });\n\n    return obj;\n  }\n  function chainHooks(hook, accumulator) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    var hookFns = _hooks[hook] || [];\n    hookFns.forEach(function (hookFn) {\n      accumulator = hookFn.apply(null, [accumulator].concat(args)); // eslint-disable-line no-useless-call\n    });\n    return accumulator;\n  }\n  function callHooks(hook) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    var hookFns = _hooks[hook] || [];\n    hookFns.forEach(function (hookFn) {\n      hookFn.apply(null, args);\n    });\n    return undefined;\n  }\n  function callProvided() {\n    var hook = arguments[0];\n    var args = Array.prototype.slice.call(arguments, 1);\n    return providers[hook] ? providers[hook].apply(null, args) : undefined;\n  }\n\n  function findIconDefinition(iconLookup) {\n    if (iconLookup.prefix === 'fa') {\n      iconLookup.prefix = 'fas';\n    }\n\n    var iconName = iconLookup.iconName;\n    var prefix = iconLookup.prefix || getDefaultUsablePrefix();\n    if (!iconName) return;\n    iconName = byAlias(prefix, iconName) || iconName;\n    return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n  }\n  var library = new Library();\n  var noAuto = function noAuto() {\n    config.autoReplaceSvg = false;\n    config.observeMutations = false;\n    callHooks('noAuto');\n  };\n  var dom = {\n    i2svg: function i2svg() {\n      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      if (IS_DOM) {\n        callHooks('beforeI2svg', params);\n        callProvided('pseudoElements2svg', params);\n        return callProvided('i2svg', params);\n      } else {\n        return Promise.reject('Operation requires a DOM of some kind.');\n      }\n    },\n    watch: function watch() {\n      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var autoReplaceSvgRoot = params.autoReplaceSvgRoot;\n\n      if (config.autoReplaceSvg === false) {\n        config.autoReplaceSvg = true;\n      }\n\n      config.observeMutations = true;\n      domready(function () {\n        autoReplace({\n          autoReplaceSvgRoot: autoReplaceSvgRoot\n        });\n        callHooks('watch', params);\n      });\n    }\n  };\n  var parse = {\n    icon: function icon(_icon) {\n      if (_icon === null) {\n        return null;\n      }\n\n      if (_typeof(_icon) === 'object' && _icon.prefix && _icon.iconName) {\n        return {\n          prefix: _icon.prefix,\n          iconName: byAlias(_icon.prefix, _icon.iconName) || _icon.iconName\n        };\n      }\n\n      if (Array.isArray(_icon) && _icon.length === 2) {\n        var iconName = _icon[1].indexOf('fa-') === 0 ? _icon[1].slice(3) : _icon[1];\n        var prefix = getCanonicalPrefix(_icon[0]);\n        return {\n          prefix: prefix,\n          iconName: byAlias(prefix, iconName) || iconName\n        };\n      }\n\n      if (typeof _icon === 'string' && (_icon.indexOf(\"\".concat(config.familyPrefix, \"-\")) > -1 || _icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n        var canonicalIcon = getCanonicalIcon(_icon.split(' '), {\n          skipLookups: true\n        });\n        return {\n          prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n          iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n        };\n      }\n\n      if (typeof _icon === 'string') {\n        var _prefix = getDefaultUsablePrefix();\n\n        return {\n          prefix: _prefix,\n          iconName: byAlias(_prefix, _icon) || _icon\n        };\n      }\n    }\n  };\n  var api = {\n    noAuto: noAuto,\n    config: config,\n    dom: dom,\n    parse: parse,\n    library: library,\n    findIconDefinition: findIconDefinition,\n    toHtml: toHtml\n  };\n\n  var autoReplace = function autoReplace() {\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n        autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n    if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n      node: autoReplaceSvgRoot\n    });\n  };\n\n  function bootstrap(plugins) {\n    if (IS_BROWSER) {\n      if (!WINDOW.FontAwesome) {\n        WINDOW.FontAwesome = api;\n      }\n\n      domready(function () {\n        autoReplace();\n        callHooks('bootstrap');\n      });\n    }\n\n    namespace.hooks = _objectSpread2(_objectSpread2({}, namespace.hooks), {}, {\n      addPack: function addPack(prefix, icons) {\n        namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), icons);\n        build();\n        autoReplace();\n      },\n      addPacks: function addPacks(packs) {\n        packs.forEach(function (_ref) {\n          var _ref2 = _slicedToArray(_ref, 2),\n              prefix = _ref2[0],\n              icons = _ref2[1];\n\n          namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), icons);\n        });\n        build();\n        autoReplace();\n      },\n      addShims: function addShims(shims) {\n        var _namespace$shims;\n\n        (_namespace$shims = namespace.shims).push.apply(_namespace$shims, _toConsumableArray(shims));\n\n        build();\n        autoReplace();\n      }\n    });\n  }\n\n  function domVariants(val, abstractCreator) {\n    Object.defineProperty(val, 'abstract', {\n      get: abstractCreator\n    });\n    Object.defineProperty(val, 'html', {\n      get: function get() {\n        return val.abstract.map(function (a) {\n          return toHtml(a);\n        });\n      }\n    });\n    Object.defineProperty(val, 'node', {\n      get: function get() {\n        if (!IS_DOM) return;\n        var container = DOCUMENT.createElement('div');\n        container.innerHTML = val.html;\n        return container.children;\n      }\n    });\n    return val;\n  }\n\n  function asIcon (_ref) {\n    var children = _ref.children,\n        main = _ref.main,\n        mask = _ref.mask,\n        attributes = _ref.attributes,\n        styles = _ref.styles,\n        transform = _ref.transform;\n\n    if (transformIsMeaningful(transform) && main.found && !mask.found) {\n      var width = main.width,\n          height = main.height;\n      var offset = {\n        x: width / height / 2,\n        y: 0.5\n      };\n      attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n        'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n      }));\n    }\n\n    return [{\n      tag: 'svg',\n      attributes: attributes,\n      children: children\n    }];\n  }\n\n  function asSymbol (_ref) {\n    var prefix = _ref.prefix,\n        iconName = _ref.iconName,\n        children = _ref.children,\n        attributes = _ref.attributes,\n        symbol = _ref.symbol;\n    var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.familyPrefix, \"-\").concat(iconName) : symbol;\n    return [{\n      tag: 'svg',\n      attributes: {\n        style: 'display: none;'\n      },\n      children: [{\n        tag: 'symbol',\n        attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n          id: id\n        }),\n        children: children\n      }]\n    }];\n  }\n\n  function makeInlineSvgAbstract(params) {\n    var _params$icons = params.icons,\n        main = _params$icons.main,\n        mask = _params$icons.mask,\n        prefix = params.prefix,\n        iconName = params.iconName,\n        transform = params.transform,\n        symbol = params.symbol,\n        title = params.title,\n        maskId = params.maskId,\n        titleId = params.titleId,\n        extra = params.extra,\n        _params$watchable = params.watchable,\n        watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n    var _ref = mask.found ? mask : main,\n        width = _ref.width,\n        height = _ref.height;\n\n    var isUploadedIcon = prefix === 'fak';\n    var attrClass = [config.replacementClass, iconName ? \"\".concat(config.familyPrefix, \"-\").concat(iconName) : ''].filter(function (c) {\n      return extra.classes.indexOf(c) === -1;\n    }).filter(function (c) {\n      return c !== '' || !!c;\n    }).concat(extra.classes).join(' ');\n    var content = {\n      children: [],\n      attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n        'data-prefix': prefix,\n        'data-icon': iconName,\n        'class': attrClass,\n        'role': extra.attributes.role || 'img',\n        'xmlns': 'http://www.w3.org/2000/svg',\n        'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n      })\n    };\n    var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n      width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n    } : {};\n\n    if (watchable) {\n      content.attributes[DATA_FA_I2SVG] = '';\n    }\n\n    if (title) {\n      content.children.push({\n        tag: 'title',\n        attributes: {\n          id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n        },\n        children: [title]\n      });\n      delete content.attributes.title;\n    }\n\n    var args = _objectSpread2(_objectSpread2({}, content), {}, {\n      prefix: prefix,\n      iconName: iconName,\n      main: main,\n      mask: mask,\n      maskId: maskId,\n      transform: transform,\n      symbol: symbol,\n      styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n    });\n\n    var _ref2 = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n      children: [],\n      attributes: {}\n    } : callProvided('generateAbstractIcon', args) || {\n      children: [],\n      attributes: {}\n    },\n        children = _ref2.children,\n        attributes = _ref2.attributes;\n\n    args.children = children;\n    args.attributes = attributes;\n\n    if (symbol) {\n      return asSymbol(args);\n    } else {\n      return asIcon(args);\n    }\n  }\n  function makeLayersTextAbstract(params) {\n    var content = params.content,\n        width = params.width,\n        height = params.height,\n        transform = params.transform,\n        title = params.title,\n        extra = params.extra,\n        _params$watchable2 = params.watchable,\n        watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n    var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n      'title': title\n    } : {}), {}, {\n      'class': extra.classes.join(' ')\n    });\n\n    if (watchable) {\n      attributes[DATA_FA_I2SVG] = '';\n    }\n\n    var styles = _objectSpread2({}, extra.styles);\n\n    if (transformIsMeaningful(transform)) {\n      styles['transform'] = transformForCss({\n        transform: transform,\n        startCentered: true,\n        width: width,\n        height: height\n      });\n      styles['-webkit-transform'] = styles['transform'];\n    }\n\n    var styleString = joinStyles(styles);\n\n    if (styleString.length > 0) {\n      attributes['style'] = styleString;\n    }\n\n    var val = [];\n    val.push({\n      tag: 'span',\n      attributes: attributes,\n      children: [content]\n    });\n\n    if (title) {\n      val.push({\n        tag: 'span',\n        attributes: {\n          class: 'sr-only'\n        },\n        children: [title]\n      });\n    }\n\n    return val;\n  }\n  function makeLayersCounterAbstract(params) {\n    var content = params.content,\n        title = params.title,\n        extra = params.extra;\n\n    var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n      'title': title\n    } : {}), {}, {\n      'class': extra.classes.join(' ')\n    });\n\n    var styleString = joinStyles(extra.styles);\n\n    if (styleString.length > 0) {\n      attributes['style'] = styleString;\n    }\n\n    var val = [];\n    val.push({\n      tag: 'span',\n      attributes: attributes,\n      children: [content]\n    });\n\n    if (title) {\n      val.push({\n        tag: 'span',\n        attributes: {\n          class: 'sr-only'\n        },\n        children: [title]\n      });\n    }\n\n    return val;\n  }\n\n  var styles$1 = namespace.styles;\n  function asFoundIcon(icon) {\n    var width = icon[0];\n    var height = icon[1];\n\n    var _icon$slice = icon.slice(4),\n        _icon$slice2 = _slicedToArray(_icon$slice, 1),\n        vectorData = _icon$slice2[0];\n\n    var element = null;\n\n    if (Array.isArray(vectorData)) {\n      element = {\n        tag: 'g',\n        attributes: {\n          class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n        },\n        children: [{\n          tag: 'path',\n          attributes: {\n            class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n            fill: 'currentColor',\n            d: vectorData[0]\n          }\n        }, {\n          tag: 'path',\n          attributes: {\n            class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n            fill: 'currentColor',\n            d: vectorData[1]\n          }\n        }]\n      };\n    } else {\n      element = {\n        tag: 'path',\n        attributes: {\n          fill: 'currentColor',\n          d: vectorData\n        }\n      };\n    }\n\n    return {\n      found: true,\n      width: width,\n      height: height,\n      icon: element\n    };\n  }\n  var missingIconResolutionMixin = {\n    found: false,\n    width: 512,\n    height: 512\n  };\n\n  function maybeNotifyMissing(iconName, prefix) {\n    if (!PRODUCTION && !config.showMissingIcons && iconName) {\n      console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n    }\n  }\n\n  function findIcon(iconName, prefix) {\n    var givenPrefix = prefix;\n\n    if (prefix === 'fa' && config.styleDefault !== null) {\n      prefix = getDefaultUsablePrefix();\n    }\n\n    return new Promise(function (resolve, reject) {\n      var val = {\n        found: false,\n        width: 512,\n        height: 512,\n        icon: callProvided('missingIconAbstract') || {}\n      };\n\n      if (givenPrefix === 'fa') {\n        var shim = byOldName(iconName) || {};\n        iconName = shim.iconName || iconName;\n        prefix = shim.prefix || prefix;\n      }\n\n      if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n        var icon = styles$1[prefix][iconName];\n        return resolve(asFoundIcon(icon));\n      }\n\n      maybeNotifyMissing(iconName, prefix);\n      resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n        icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n      }));\n    });\n  }\n\n  var noop$1 = function noop() {};\n\n  var p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n    mark: noop$1,\n    measure: noop$1\n  };\n  var preamble = \"FA \\\"6.0.0\\\"\";\n\n  var begin = function begin(name) {\n    p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n    return function () {\n      return end(name);\n    };\n  };\n\n  var end = function end(name) {\n    p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n    p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n  };\n\n  var perf = {\n    begin: begin,\n    end: end\n  };\n\n  var noop$2 = function noop() {};\n\n  function isWatched(node) {\n    var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n    return typeof i2svg === 'string';\n  }\n\n  function hasPrefixAndIcon(node) {\n    var prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n    var icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n    return prefix && icon;\n  }\n\n  function hasBeenReplaced(node) {\n    return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n  }\n\n  function getMutator() {\n    if (config.autoReplaceSvg === true) {\n      return mutators.replace;\n    }\n\n    var mutator = mutators[config.autoReplaceSvg];\n    return mutator || mutators.replace;\n  }\n\n  function createElementNS(tag) {\n    return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n  }\n\n  function createElement(tag) {\n    return DOCUMENT.createElement(tag);\n  }\n\n  function convertSVG(abstractObj) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _params$ceFn = params.ceFn,\n        ceFn = _params$ceFn === void 0 ? abstractObj.tag === 'svg' ? createElementNS : createElement : _params$ceFn;\n\n    if (typeof abstractObj === 'string') {\n      return DOCUMENT.createTextNode(abstractObj);\n    }\n\n    var tag = ceFn(abstractObj.tag);\n    Object.keys(abstractObj.attributes || []).forEach(function (key) {\n      tag.setAttribute(key, abstractObj.attributes[key]);\n    });\n    var children = abstractObj.children || [];\n    children.forEach(function (child) {\n      tag.appendChild(convertSVG(child, {\n        ceFn: ceFn\n      }));\n    });\n    return tag;\n  }\n\n  function nodeAsComment(node) {\n    var comment = \" \".concat(node.outerHTML, \" \");\n    /* BEGIN.ATTRIBUTION */\n\n    comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n    /* END.ATTRIBUTION */\n\n    return comment;\n  }\n\n  var mutators = {\n    replace: function replace(mutation) {\n      var node = mutation[0];\n\n      if (node.parentNode) {\n        mutation[1].forEach(function (abstract) {\n          node.parentNode.insertBefore(convertSVG(abstract), node);\n        });\n\n        if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n          var comment = DOCUMENT.createComment(nodeAsComment(node));\n          node.parentNode.replaceChild(comment, node);\n        } else {\n          node.remove();\n        }\n      }\n    },\n    nest: function nest(mutation) {\n      var node = mutation[0];\n      var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n      // Short-circuit to the standard replacement\n\n      if (~classArray(node).indexOf(config.replacementClass)) {\n        return mutators.replace(mutation);\n      }\n\n      var forSvg = new RegExp(\"\".concat(config.familyPrefix, \"-.*\"));\n      delete abstract[0].attributes.id;\n\n      if (abstract[0].attributes.class) {\n        var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n          if (cls === config.replacementClass || cls.match(forSvg)) {\n            acc.toSvg.push(cls);\n          } else {\n            acc.toNode.push(cls);\n          }\n\n          return acc;\n        }, {\n          toNode: [],\n          toSvg: []\n        });\n        abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n\n        if (splitClasses.toNode.length === 0) {\n          node.removeAttribute('class');\n        } else {\n          node.setAttribute('class', splitClasses.toNode.join(' '));\n        }\n      }\n\n      var newInnerHTML = abstract.map(function (a) {\n        return toHtml(a);\n      }).join('\\n');\n      node.setAttribute(DATA_FA_I2SVG, '');\n      node.innerHTML = newInnerHTML;\n    }\n  };\n\n  function performOperationSync(op) {\n    op();\n  }\n\n  function perform(mutations, callback) {\n    var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n    if (mutations.length === 0) {\n      callbackFunction();\n    } else {\n      var frame = performOperationSync;\n\n      if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n        frame = WINDOW.requestAnimationFrame || performOperationSync;\n      }\n\n      frame(function () {\n        var mutator = getMutator();\n        var mark = perf.begin('mutate');\n        mutations.map(mutator);\n        mark();\n        callbackFunction();\n      });\n    }\n  }\n  var disabled = false;\n  function disableObservation() {\n    disabled = true;\n  }\n  function enableObservation() {\n    disabled = false;\n  }\n  var mo = null;\n  function observe(options) {\n    if (!MUTATION_OBSERVER) {\n      return;\n    }\n\n    if (!config.observeMutations) {\n      return;\n    }\n\n    var _options$treeCallback = options.treeCallback,\n        treeCallback = _options$treeCallback === void 0 ? noop$2 : _options$treeCallback,\n        _options$nodeCallback = options.nodeCallback,\n        nodeCallback = _options$nodeCallback === void 0 ? noop$2 : _options$nodeCallback,\n        _options$pseudoElemen = options.pseudoElementsCallback,\n        pseudoElementsCallback = _options$pseudoElemen === void 0 ? noop$2 : _options$pseudoElemen,\n        _options$observeMutat = options.observeMutationsRoot,\n        observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n    mo = new MUTATION_OBSERVER(function (objects) {\n      if (disabled) return;\n      var defaultPrefix = getDefaultUsablePrefix();\n      toArray(objects).forEach(function (mutationRecord) {\n        if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n          if (config.searchPseudoElements) {\n            pseudoElementsCallback(mutationRecord.target);\n          }\n\n          treeCallback(mutationRecord.target);\n        }\n\n        if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n          pseudoElementsCallback(mutationRecord.target.parentNode);\n        }\n\n        if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n          if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n            var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n                prefix = _getCanonicalIcon.prefix,\n                iconName = _getCanonicalIcon.iconName;\n\n            mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n            if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n          } else if (hasBeenReplaced(mutationRecord.target)) {\n            nodeCallback(mutationRecord.target);\n          }\n        }\n      });\n    });\n    if (!IS_DOM) return;\n    mo.observe(observeMutationsRoot, {\n      childList: true,\n      attributes: true,\n      characterData: true,\n      subtree: true\n    });\n  }\n  function disconnect() {\n    if (!mo) return;\n    mo.disconnect();\n  }\n\n  function styleParser (node) {\n    var style = node.getAttribute('style');\n    var val = [];\n\n    if (style) {\n      val = style.split(';').reduce(function (acc, style) {\n        var styles = style.split(':');\n        var prop = styles[0];\n        var value = styles.slice(1);\n\n        if (prop && value.length > 0) {\n          acc[prop] = value.join(':').trim();\n        }\n\n        return acc;\n      }, {});\n    }\n\n    return val;\n  }\n\n  function classParser (node) {\n    var existingPrefix = node.getAttribute('data-prefix');\n    var existingIconName = node.getAttribute('data-icon');\n    var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n    var val = getCanonicalIcon(classArray(node));\n\n    if (!val.prefix) {\n      val.prefix = getDefaultUsablePrefix();\n    }\n\n    if (existingPrefix && existingIconName) {\n      val.prefix = existingPrefix;\n      val.iconName = existingIconName;\n    }\n\n    if (val.iconName && val.prefix) {\n      return val;\n    }\n\n    if (val.prefix && innerText.length > 0) {\n      val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n    }\n\n    return val;\n  }\n\n  function attributesParser (node) {\n    var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n      if (acc.name !== 'class' && acc.name !== 'style') {\n        acc[attr.name] = attr.value;\n      }\n\n      return acc;\n    }, {});\n    var title = node.getAttribute('title');\n    var titleId = node.getAttribute('data-fa-title-id');\n\n    if (config.autoA11y) {\n      if (title) {\n        extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n      } else {\n        extraAttributes['aria-hidden'] = 'true';\n        extraAttributes['focusable'] = 'false';\n      }\n    }\n\n    return extraAttributes;\n  }\n\n  function blankMeta() {\n    return {\n      iconName: null,\n      title: null,\n      titleId: null,\n      prefix: null,\n      transform: meaninglessTransform,\n      symbol: false,\n      mask: {\n        iconName: null,\n        prefix: null,\n        rest: []\n      },\n      maskId: null,\n      extra: {\n        classes: [],\n        styles: {},\n        attributes: {}\n      }\n    };\n  }\n  function parseMeta(node) {\n    var parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      styleParser: true\n    };\n\n    var _classParser = classParser(node),\n        iconName = _classParser.iconName,\n        prefix = _classParser.prefix,\n        extraClasses = _classParser.rest;\n\n    var extraAttributes = attributesParser(node);\n    var pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n    var extraStyles = parser.styleParser ? styleParser(node) : [];\n    return _objectSpread2({\n      iconName: iconName,\n      title: node.getAttribute('title'),\n      titleId: node.getAttribute('data-fa-title-id'),\n      prefix: prefix,\n      transform: meaninglessTransform,\n      mask: {\n        iconName: null,\n        prefix: null,\n        rest: []\n      },\n      maskId: null,\n      symbol: false,\n      extra: {\n        classes: extraClasses,\n        styles: extraStyles,\n        attributes: extraAttributes\n      }\n    }, pluginMeta);\n  }\n\n  var styles$2 = namespace.styles;\n\n  function generateMutation(node) {\n    var nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n      styleParser: false\n    }) : parseMeta(node);\n\n    if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n      return callProvided('generateLayersText', node, nodeMeta);\n    } else {\n      return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n    }\n  }\n\n  function onTree(root) {\n    var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    if (!IS_DOM) return Promise.resolve();\n    var htmlClassList = DOCUMENT.documentElement.classList;\n\n    var hclAdd = function hclAdd(suffix) {\n      return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n    };\n\n    var hclRemove = function hclRemove(suffix) {\n      return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n    };\n\n    var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$2);\n    var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n      return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n    })).join(', ');\n\n    if (prefixesDomQuery.length === 0) {\n      return Promise.resolve();\n    }\n\n    var candidates = [];\n\n    try {\n      candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n    } catch (e) {// noop\n    }\n\n    if (candidates.length > 0) {\n      hclAdd('pending');\n      hclRemove('complete');\n    } else {\n      return Promise.resolve();\n    }\n\n    var mark = perf.begin('onTree');\n    var mutations = candidates.reduce(function (acc, node) {\n      try {\n        var mutation = generateMutation(node);\n\n        if (mutation) {\n          acc.push(mutation);\n        }\n      } catch (e) {\n        if (!PRODUCTION) {\n          if (e.name === 'MissingIcon') {\n            console.error(e);\n          }\n        }\n      }\n\n      return acc;\n    }, []);\n    return new Promise(function (resolve, reject) {\n      Promise.all(mutations).then(function (resolvedMutations) {\n        perform(resolvedMutations, function () {\n          hclAdd('active');\n          hclAdd('complete');\n          hclRemove('pending');\n          if (typeof callback === 'function') callback();\n          mark();\n          resolve();\n        });\n      }).catch(function (e) {\n        mark();\n        reject(e);\n      });\n    });\n  }\n\n  function onNode(node) {\n    var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    generateMutation(node).then(function (mutation) {\n      if (mutation) {\n        perform([mutation], callback);\n      }\n    });\n  }\n\n  function resolveIcons(next) {\n    return function (maybeIconDefinition) {\n      var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n      var mask = params.mask;\n\n      if (mask) {\n        mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n      }\n\n      return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n        mask: mask\n      }));\n    };\n  }\n\n  var render = function render(iconDefinition) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _params$transform = params.transform,\n        transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n        _params$symbol = params.symbol,\n        symbol = _params$symbol === void 0 ? false : _params$symbol,\n        _params$mask = params.mask,\n        mask = _params$mask === void 0 ? null : _params$mask,\n        _params$maskId = params.maskId,\n        maskId = _params$maskId === void 0 ? null : _params$maskId,\n        _params$title = params.title,\n        title = _params$title === void 0 ? null : _params$title,\n        _params$titleId = params.titleId,\n        titleId = _params$titleId === void 0 ? null : _params$titleId,\n        _params$classes = params.classes,\n        classes = _params$classes === void 0 ? [] : _params$classes,\n        _params$attributes = params.attributes,\n        attributes = _params$attributes === void 0 ? {} : _params$attributes,\n        _params$styles = params.styles,\n        styles = _params$styles === void 0 ? {} : _params$styles;\n    if (!iconDefinition) return;\n    var prefix = iconDefinition.prefix,\n        iconName = iconDefinition.iconName,\n        icon = iconDefinition.icon;\n    return domVariants(_objectSpread2({\n      type: 'icon'\n    }, iconDefinition), function () {\n      callHooks('beforeDOMElementCreation', {\n        iconDefinition: iconDefinition,\n        params: params\n      });\n\n      if (config.autoA11y) {\n        if (title) {\n          attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n        } else {\n          attributes['aria-hidden'] = 'true';\n          attributes['focusable'] = 'false';\n        }\n      }\n\n      return makeInlineSvgAbstract({\n        icons: {\n          main: asFoundIcon(icon),\n          mask: mask ? asFoundIcon(mask.icon) : {\n            found: false,\n            width: null,\n            height: null,\n            icon: {}\n          }\n        },\n        prefix: prefix,\n        iconName: iconName,\n        transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n        symbol: symbol,\n        title: title,\n        maskId: maskId,\n        titleId: titleId,\n        extra: {\n          attributes: attributes,\n          styles: styles,\n          classes: classes\n        }\n      });\n    });\n  };\n  var ReplaceElements = {\n    mixout: function mixout() {\n      return {\n        icon: resolveIcons(render)\n      };\n    },\n    hooks: function hooks() {\n      return {\n        mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n          accumulator.treeCallback = onTree;\n          accumulator.nodeCallback = onNode;\n          return accumulator;\n        }\n      };\n    },\n    provides: function provides(providers$$1) {\n      providers$$1.i2svg = function (params) {\n        var _params$node = params.node,\n            node = _params$node === void 0 ? DOCUMENT : _params$node,\n            _params$callback = params.callback,\n            callback = _params$callback === void 0 ? function () {} : _params$callback;\n        return onTree(node, callback);\n      };\n\n      providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n        var iconName = nodeMeta.iconName,\n            title = nodeMeta.title,\n            titleId = nodeMeta.titleId,\n            prefix = nodeMeta.prefix,\n            transform = nodeMeta.transform,\n            symbol = nodeMeta.symbol,\n            mask = nodeMeta.mask,\n            maskId = nodeMeta.maskId,\n            extra = nodeMeta.extra;\n        return new Promise(function (resolve, reject) {\n          Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n            found: false,\n            width: 512,\n            height: 512,\n            icon: {}\n          })]).then(function (_ref) {\n            var _ref2 = _slicedToArray(_ref, 2),\n                main = _ref2[0],\n                mask = _ref2[1];\n\n            resolve([node, makeInlineSvgAbstract({\n              icons: {\n                main: main,\n                mask: mask\n              },\n              prefix: prefix,\n              iconName: iconName,\n              transform: transform,\n              symbol: symbol,\n              maskId: maskId,\n              title: title,\n              titleId: titleId,\n              extra: extra,\n              watchable: true\n            })]);\n          }).catch(reject);\n        });\n      };\n\n      providers$$1.generateAbstractIcon = function (_ref3) {\n        var children = _ref3.children,\n            attributes = _ref3.attributes,\n            main = _ref3.main,\n            transform = _ref3.transform,\n            styles = _ref3.styles;\n        var styleString = joinStyles(styles);\n\n        if (styleString.length > 0) {\n          attributes['style'] = styleString;\n        }\n\n        var nextChild;\n\n        if (transformIsMeaningful(transform)) {\n          nextChild = callProvided('generateAbstractTransformGrouping', {\n            main: main,\n            transform: transform,\n            containerWidth: main.width,\n            iconWidth: main.width\n          });\n        }\n\n        children.push(nextChild || main.icon);\n        return {\n          children: children,\n          attributes: attributes\n        };\n      };\n    }\n  };\n\n  var Layers = {\n    mixout: function mixout() {\n      return {\n        layer: function layer(assembler) {\n          var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          var _params$classes = params.classes,\n              classes = _params$classes === void 0 ? [] : _params$classes;\n          return domVariants({\n            type: 'layer'\n          }, function () {\n            callHooks('beforeDOMElementCreation', {\n              assembler: assembler,\n              params: params\n            });\n            var children = [];\n            assembler(function (args) {\n              Array.isArray(args) ? args.map(function (a) {\n                children = children.concat(a.abstract);\n              }) : children = children.concat(args.abstract);\n            });\n            return [{\n              tag: 'span',\n              attributes: {\n                class: [\"\".concat(config.familyPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n              },\n              children: children\n            }];\n          });\n        }\n      };\n    }\n  };\n\n  var LayersCounter = {\n    mixout: function mixout() {\n      return {\n        counter: function counter(content) {\n          var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          var _params$title = params.title,\n              title = _params$title === void 0 ? null : _params$title,\n              _params$classes = params.classes,\n              classes = _params$classes === void 0 ? [] : _params$classes,\n              _params$attributes = params.attributes,\n              attributes = _params$attributes === void 0 ? {} : _params$attributes,\n              _params$styles = params.styles,\n              styles = _params$styles === void 0 ? {} : _params$styles;\n          return domVariants({\n            type: 'counter',\n            content: content\n          }, function () {\n            callHooks('beforeDOMElementCreation', {\n              content: content,\n              params: params\n            });\n            return makeLayersCounterAbstract({\n              content: content.toString(),\n              title: title,\n              extra: {\n                attributes: attributes,\n                styles: styles,\n                classes: [\"\".concat(config.familyPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n              }\n            });\n          });\n        }\n      };\n    }\n  };\n\n  var LayersText = {\n    mixout: function mixout() {\n      return {\n        text: function text(content) {\n          var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          var _params$transform = params.transform,\n              transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n              _params$title = params.title,\n              title = _params$title === void 0 ? null : _params$title,\n              _params$classes = params.classes,\n              classes = _params$classes === void 0 ? [] : _params$classes,\n              _params$attributes = params.attributes,\n              attributes = _params$attributes === void 0 ? {} : _params$attributes,\n              _params$styles = params.styles,\n              styles = _params$styles === void 0 ? {} : _params$styles;\n          return domVariants({\n            type: 'text',\n            content: content\n          }, function () {\n            callHooks('beforeDOMElementCreation', {\n              content: content,\n              params: params\n            });\n            return makeLayersTextAbstract({\n              content: content,\n              transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n              title: title,\n              extra: {\n                attributes: attributes,\n                styles: styles,\n                classes: [\"\".concat(config.familyPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n              }\n            });\n          });\n        }\n      };\n    },\n    provides: function provides(providers$$1) {\n      providers$$1.generateLayersText = function (node, nodeMeta) {\n        var title = nodeMeta.title,\n            transform = nodeMeta.transform,\n            extra = nodeMeta.extra;\n        var width = null;\n        var height = null;\n\n        if (IS_IE) {\n          var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n          var boundingClientRect = node.getBoundingClientRect();\n          width = boundingClientRect.width / computedFontSize;\n          height = boundingClientRect.height / computedFontSize;\n        }\n\n        if (config.autoA11y && !title) {\n          extra.attributes['aria-hidden'] = 'true';\n        }\n\n        return Promise.resolve([node, makeLayersTextAbstract({\n          content: node.innerHTML,\n          width: width,\n          height: height,\n          transform: transform,\n          title: title,\n          extra: extra,\n          watchable: true\n        })]);\n      };\n    }\n  };\n\n  var CLEAN_CONTENT_PATTERN = new RegExp(\"\\\"\", 'ug');\n  var SECONDARY_UNICODE_RANGE = [1105920, 1112319];\n  function hexValueFromContent(content) {\n    var cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n    var codePoint = codePointAt(cleaned, 0);\n    var isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n    var isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n    return {\n      value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n      isSecondary: isPrependTen || isDoubled\n    };\n  }\n\n  function replaceForPosition(node, position) {\n    var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n    return new Promise(function (resolve, reject) {\n      if (node.getAttribute(pendingAttribute) !== null) {\n        // This node is already being processed\n        return resolve();\n      }\n\n      var children = toArray(node.children);\n      var alreadyProcessedPseudoElement = children.filter(function (c) {\n        return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n      })[0];\n      var styles = WINDOW.getComputedStyle(node, position);\n      var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n      var fontWeight = styles.getPropertyValue('font-weight');\n      var content = styles.getPropertyValue('content');\n\n      if (alreadyProcessedPseudoElement && !fontFamily) {\n        // If we've already processed it but the current computed style does not result in a font-family,\n        // that probably means that a class name that was previously present to make the icon has been\n        // removed. So we now should delete the icon.\n        node.removeChild(alreadyProcessedPseudoElement);\n        return resolve();\n      } else if (fontFamily && content !== 'none' && content !== '') {\n        var _content = styles.getPropertyValue('content');\n\n        var prefix = ~['Solid', 'Regular', 'Light', 'Thin', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\n\n        var _hexValueFromContent = hexValueFromContent(_content),\n            hexValue = _hexValueFromContent.value,\n            isSecondary = _hexValueFromContent.isSecondary;\n\n        var isV4 = fontFamily[0].startsWith('FontAwesome');\n        var iconName = byUnicode(prefix, hexValue);\n        var iconIdentifier = iconName;\n\n        if (isV4) {\n          var iconName4 = byOldUnicode(hexValue);\n\n          if (iconName4.iconName && iconName4.prefix) {\n            iconName = iconName4.iconName;\n            prefix = iconName4.prefix;\n          }\n        } // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n        // already done so with the same prefix and iconName\n\n\n        if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n          node.setAttribute(pendingAttribute, iconIdentifier);\n\n          if (alreadyProcessedPseudoElement) {\n            // Delete the old one, since we're replacing it with a new one\n            node.removeChild(alreadyProcessedPseudoElement);\n          }\n\n          var meta = blankMeta();\n          var extra = meta.extra;\n          extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n          findIcon(iconName, prefix).then(function (main) {\n            var abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n              icons: {\n                main: main,\n                mask: emptyCanonicalIcon()\n              },\n              prefix: prefix,\n              iconName: iconIdentifier,\n              extra: extra,\n              watchable: true\n            }));\n            var element = DOCUMENT.createElement('svg');\n\n            if (position === '::before') {\n              node.insertBefore(element, node.firstChild);\n            } else {\n              node.appendChild(element);\n            }\n\n            element.outerHTML = abstract.map(function (a) {\n              return toHtml(a);\n            }).join('\\n');\n            node.removeAttribute(pendingAttribute);\n            resolve();\n          }).catch(reject);\n        } else {\n          resolve();\n        }\n      } else {\n        resolve();\n      }\n    });\n  }\n\n  function replace(node) {\n    return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n  }\n\n  function processable(node) {\n    return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n  }\n\n  function searchPseudoElements(root) {\n    if (!IS_DOM) return;\n    return new Promise(function (resolve, reject) {\n      var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n      var end = perf.begin('searchPseudoElements');\n      disableObservation();\n      Promise.all(operations).then(function () {\n        end();\n        enableObservation();\n        resolve();\n      }).catch(function () {\n        end();\n        enableObservation();\n        reject();\n      });\n    });\n  }\n\n  var PseudoElements = {\n    hooks: function hooks() {\n      return {\n        mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n          accumulator.pseudoElementsCallback = searchPseudoElements;\n          return accumulator;\n        }\n      };\n    },\n    provides: function provides(providers$$1) {\n      providers$$1.pseudoElements2svg = function (params) {\n        var _params$node = params.node,\n            node = _params$node === void 0 ? DOCUMENT : _params$node;\n\n        if (config.searchPseudoElements) {\n          searchPseudoElements(node);\n        }\n      };\n    }\n  };\n\n  var _unwatched = false;\n  var MutationObserver$1 = {\n    mixout: function mixout() {\n      return {\n        dom: {\n          unwatch: function unwatch() {\n            disableObservation();\n            _unwatched = true;\n          }\n        }\n      };\n    },\n    hooks: function hooks() {\n      return {\n        bootstrap: function bootstrap() {\n          observe(chainHooks('mutationObserverCallbacks', {}));\n        },\n        noAuto: function noAuto() {\n          disconnect();\n        },\n        watch: function watch(params) {\n          var observeMutationsRoot = params.observeMutationsRoot;\n\n          if (_unwatched) {\n            enableObservation();\n          } else {\n            observe(chainHooks('mutationObserverCallbacks', {\n              observeMutationsRoot: observeMutationsRoot\n            }));\n          }\n        }\n      };\n    }\n  };\n\n  var parseTransformString = function parseTransformString(transformString) {\n    var transform = {\n      size: 16,\n      x: 0,\n      y: 0,\n      flipX: false,\n      flipY: false,\n      rotate: 0\n    };\n    return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n      var parts = n.toLowerCase().split('-');\n      var first = parts[0];\n      var rest = parts.slice(1).join('-');\n\n      if (first && rest === 'h') {\n        acc.flipX = true;\n        return acc;\n      }\n\n      if (first && rest === 'v') {\n        acc.flipY = true;\n        return acc;\n      }\n\n      rest = parseFloat(rest);\n\n      if (isNaN(rest)) {\n        return acc;\n      }\n\n      switch (first) {\n        case 'grow':\n          acc.size = acc.size + rest;\n          break;\n\n        case 'shrink':\n          acc.size = acc.size - rest;\n          break;\n\n        case 'left':\n          acc.x = acc.x - rest;\n          break;\n\n        case 'right':\n          acc.x = acc.x + rest;\n          break;\n\n        case 'up':\n          acc.y = acc.y - rest;\n          break;\n\n        case 'down':\n          acc.y = acc.y + rest;\n          break;\n\n        case 'rotate':\n          acc.rotate = acc.rotate + rest;\n          break;\n      }\n\n      return acc;\n    }, transform);\n  };\n  var PowerTransforms = {\n    mixout: function mixout() {\n      return {\n        parse: {\n          transform: function transform(transformString) {\n            return parseTransformString(transformString);\n          }\n        }\n      };\n    },\n    hooks: function hooks() {\n      return {\n        parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n          var transformString = node.getAttribute('data-fa-transform');\n\n          if (transformString) {\n            accumulator.transform = parseTransformString(transformString);\n          }\n\n          return accumulator;\n        }\n      };\n    },\n    provides: function provides(providers) {\n      providers.generateAbstractTransformGrouping = function (_ref) {\n        var main = _ref.main,\n            transform = _ref.transform,\n            containerWidth = _ref.containerWidth,\n            iconWidth = _ref.iconWidth;\n        var outer = {\n          transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n        };\n        var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n        var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n        var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n        var inner = {\n          transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n        };\n        var path = {\n          transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n        };\n        var operations = {\n          outer: outer,\n          inner: inner,\n          path: path\n        };\n        return {\n          tag: 'g',\n          attributes: _objectSpread2({}, operations.outer),\n          children: [{\n            tag: 'g',\n            attributes: _objectSpread2({}, operations.inner),\n            children: [{\n              tag: main.icon.tag,\n              children: main.icon.children,\n              attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n            }]\n          }]\n        };\n      };\n    }\n  };\n\n  var ALL_SPACE = {\n    x: 0,\n    y: 0,\n    width: '100%',\n    height: '100%'\n  };\n\n  function fillBlack(abstract) {\n    var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    if (abstract.attributes && (abstract.attributes.fill || force)) {\n      abstract.attributes.fill = 'black';\n    }\n\n    return abstract;\n  }\n\n  function deGroup(abstract) {\n    if (abstract.tag === 'g') {\n      return abstract.children;\n    } else {\n      return [abstract];\n    }\n  }\n\n  var Masks = {\n    hooks: function hooks() {\n      return {\n        parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n          var maskData = node.getAttribute('data-fa-mask');\n          var mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(function (i) {\n            return i.trim();\n          }));\n\n          if (!mask.prefix) {\n            mask.prefix = getDefaultUsablePrefix();\n          }\n\n          accumulator.mask = mask;\n          accumulator.maskId = node.getAttribute('data-fa-mask-id');\n          return accumulator;\n        }\n      };\n    },\n    provides: function provides(providers) {\n      providers.generateAbstractMask = function (_ref) {\n        var children = _ref.children,\n            attributes = _ref.attributes,\n            main = _ref.main,\n            mask = _ref.mask,\n            explicitMaskId = _ref.maskId,\n            transform = _ref.transform;\n        var mainWidth = main.width,\n            mainPath = main.icon;\n        var maskWidth = mask.width,\n            maskPath = mask.icon;\n        var trans = transformForSvg({\n          transform: transform,\n          containerWidth: maskWidth,\n          iconWidth: mainWidth\n        });\n        var maskRect = {\n          tag: 'rect',\n          attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n            fill: 'white'\n          })\n        };\n        var maskInnerGroupChildrenMixin = mainPath.children ? {\n          children: mainPath.children.map(fillBlack)\n        } : {};\n        var maskInnerGroup = {\n          tag: 'g',\n          attributes: _objectSpread2({}, trans.inner),\n          children: [fillBlack(_objectSpread2({\n            tag: mainPath.tag,\n            attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n          }, maskInnerGroupChildrenMixin))]\n        };\n        var maskOuterGroup = {\n          tag: 'g',\n          attributes: _objectSpread2({}, trans.outer),\n          children: [maskInnerGroup]\n        };\n        var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n        var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n        var maskTag = {\n          tag: 'mask',\n          attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n            id: maskId,\n            maskUnits: 'userSpaceOnUse',\n            maskContentUnits: 'userSpaceOnUse'\n          }),\n          children: [maskRect, maskOuterGroup]\n        };\n        var defs = {\n          tag: 'defs',\n          children: [{\n            tag: 'clipPath',\n            attributes: {\n              id: clipId\n            },\n            children: deGroup(maskPath)\n          }, maskTag]\n        };\n        children.push(defs, {\n          tag: 'rect',\n          attributes: _objectSpread2({\n            fill: 'currentColor',\n            'clip-path': \"url(#\".concat(clipId, \")\"),\n            mask: \"url(#\".concat(maskId, \")\")\n          }, ALL_SPACE)\n        });\n        return {\n          children: children,\n          attributes: attributes\n        };\n      };\n    }\n  };\n\n  var MissingIconIndicator = {\n    provides: function provides(providers) {\n      var reduceMotion = false;\n\n      if (WINDOW.matchMedia) {\n        reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      }\n\n      providers.missingIconAbstract = function () {\n        var gChildren = [];\n        var FILL = {\n          fill: 'currentColor'\n        };\n        var ANIMATION_BASE = {\n          attributeType: 'XML',\n          repeatCount: 'indefinite',\n          dur: '2s'\n        }; // Ring\n\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n          })\n        });\n\n        var OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n          attributeName: 'opacity'\n        });\n\n        var dot = {\n          tag: 'circle',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            cx: '256',\n            cy: '364',\n            r: '28'\n          }),\n          children: []\n        };\n\n        if (!reduceMotion) {\n          dot.children.push({\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n              attributeName: 'r',\n              values: '28;14;28;28;14;28;'\n            })\n          }, {\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '1;0;1;1;0;1;'\n            })\n          });\n        }\n\n        gChildren.push(dot);\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            opacity: '1',\n            d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n          }),\n          children: reduceMotion ? [] : [{\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '1;0;0;0;0;1;'\n            })\n          }]\n        });\n\n        if (!reduceMotion) {\n          // Exclamation\n          gChildren.push({\n            tag: 'path',\n            attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n              opacity: '0',\n              d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n            }),\n            children: [{\n              tag: 'animate',\n              attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n                values: '0;0;1;1;0;0;'\n              })\n            }]\n          });\n        }\n\n        return {\n          tag: 'g',\n          attributes: {\n            'class': 'missing'\n          },\n          children: gChildren\n        };\n      };\n    }\n  };\n\n  var SvgSymbols = {\n    hooks: function hooks() {\n      return {\n        parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n          var symbolData = node.getAttribute('data-fa-symbol');\n          var symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n          accumulator['symbol'] = symbol;\n          return accumulator;\n        }\n      };\n    }\n  };\n\n  var plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\n  registerPlugins(plugins, {\n    mixoutsTo: api\n  });\n  bunker(bootstrap);\n\n}());\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/js/brands.js",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n(function () {\n  'use strict';\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var PRODUCTION = function () {\n    try {\n      return \"production\" === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce(function (acc, iconName) {\n      var icon = icons[iconName];\n      var expanded = !!icon.icon;\n\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n\n      return acc;\n    }, {});\n  }\n\n  function defineIcons(prefix, icons) {\n    var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _params$skipHooks = params.skipHooks,\n        skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n    var normalized = normalizeIcons(icons);\n\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n\n\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"42-group\": [640, 512, [\"innosoft\"], \"e080\", \"M320 96V416C341 416 361.8 411.9 381.2 403.8C400.6 395.8 418.3 383.1 433.1 369.1C447.1 354.3 459.8 336.6 467.8 317.2C475.9 297.8 480 277 480 256C480 234.1 475.9 214.2 467.8 194.8C459.8 175.4 447.1 157.7 433.1 142.9C418.3 128 400.6 116.2 381.2 108.2C361.8 100.1 341 96 320 96zM0 256L160 416L320 256L160 96L0 256zM480 256C480 277 484.1 297.8 492.2 317.2C500.2 336.6 512 354.3 526.9 369.1C541.7 383.1 559.4 395.8 578.8 403.8C598.2 411.9 618.1 416 640 416V96C597.6 96 556.9 112.9 526.9 142.9C496.9 172.9 480 213.6 480 256z\"],\n    \"500px\": [448, 512, [], \"f26e\", \"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3 .3-16 16.5-21.2 23.9l-.5 .6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6 .2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"],\n    \"accessible-icon\": [448, 512, [62107], \"f368\", \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"],\n    \"accusoft\": [640, 512, [], \"f369\", \"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7 .8 0 114.5-36.6 114.5-36.6 .5-.6-.1-.1 .6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8 .5-116.5 .6-19.2 .1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1 .2-9.6 .8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6 .2 2.5 2 2.6 4.6 3.5 2.7 .8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"],\n    \"adn\": [496, 512, [], \"f170\", \"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"],\n    \"adversal\": [512, 512, [], \"f36a\", \"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4 .4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7 .4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6 .4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1 .2-.1 .3-.1 .5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2 .4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"],\n    \"affiliatetheme\": [512, 512, [], \"f36b\", \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9 .1-8.5-.3-16.8-1-25z\"],\n    \"airbnb\": [448, 512, [], \"f834\", \"M224 373.1c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.6-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.1 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.1 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.7-231.2 115.9-241.6 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.5 114.8 239.1 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.1C280.3 35.93 273.1 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.2 22 349.8-3.22 419.1 48.74 480 111.6 480c21.71 0 60.61-6.06 112.4-62.4 58.68 63.78 101.3 62.4 112.4 62.4 62.89 .05 114.8-60.86 89.61-130.2 .02-3.89-16.82-38.9-16.82-39.58z\"],\n    \"algolia\": [448, 512, [], \"f36c\", \"M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8 .9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1 .7 1.3 .2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7 .5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z\"],\n    \"alipay\": [448, 512, [], \"f642\", \"M377.7 32H70.26C31.41 32 0 63.41 0 102.3v307.5C0 448.6 31.41 480 70.26 480h307.5c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.6-60.34-171.6-88.44-32.07 43.97-84.14 81-148.6 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.1 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.4V92.34h50.92v50.42h109.4v19.01H248.6v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100 36.04 148.6 52.74V102.3C447.8 63.57 416.4 32 377.7 32zM47.28 322.1c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.9-72.9-44.63-18.68-84.48-31.41-109.4-31.41-67.45 0-79.35 33.06-78.36 50.58z\"],\n    \"amazon\": [448, 512, [], \"f270\", \"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"],\n    \"amazon-pay\": [640, 512, [], \"f42c\", \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.9 595.9 0 0 0 127.4 46.3 616.6 616.6 0 0 0 63.2 11.8 603.3 603.3 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.7 603.7 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1 -9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.3 473.3 0 0 1 -75.1 17.6 431 431 0 0 1 -53.2 4.8 21.3 21.3 0 0 0 -2.5 .3H308a21.3 21.3 0 0 0 -2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1 -50.4-5.3A448.4 448.4 0 0 1 164 420a443.3 443.3 0 0 1 -145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3 .6a80.92 80.92 0 0 0 -38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1 -.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1 .1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1 .9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1 .5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1 -1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9 .4a148 148 0 0 0 -28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7 .1 3.3-.1 6.6 0 9.9 .1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4 .3 8.3 .2 16.6 .3 24.9a7.84 7.84 0 0 1 -.2 1.4c-.5-.1-.9 0-1.3-.1a180.6 180.6 0 0 0 -32-4.9c-11.3-.6-22.5 .1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4 .1 10.9 .1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0 -.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9 .1-7.9 .1-11.9 .1zm35 127.7a3.33 3.33 0 0 1 -1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7 .6-11.4 .4-16.8-1.8a20.08 20.08 0 0 1 -12.4-13.3 32.9 32.9 0 0 1 -.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4 .7 16.6 2.3 25 3.4 1.6 .2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0 -21-3.9 147.3 147.3 0 0 0 -39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0 -3.7 3.5 5.11 5.11 0 0 0 -.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4 .4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0 -1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.9 145.9 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6 .8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6 .2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1 -15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.2 108.2 0 0 0 16.9 2c17.1 .4 30.7-6.5 39.5-21.4a131.6 131.6 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0 -7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"],\n    \"amilia\": [448, 512, [], \"f36d\", \"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5 .3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\"],\n    \"android\": [576, 512, [], \"f17b\", \"M420.5 301.9a24 24 0 1 1 24-24 24 24 0 0 1 -24 24m-265.1 0a24 24 0 1 1 24-24 24 24 0 0 1 -24 24m273.7-144.5 47.94-83a10 10 0 1 0 -17.27-10h0l-48.54 84.07a301.3 301.3 0 0 0 -246.6 0L116.2 64.45a10 10 0 1 0 -17.27 10h0l47.94 83C64.53 202.2 8.24 285.5 0 384H576c-8.24-98.45-64.54-181.8-146.9-226.6\"],\n    \"angellist\": [448, 512, [], \"f209\", \"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7 .1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3 .3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7 .1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"],\n    \"angrycreative\": [640, 512, [], \"f36e\", \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8 .3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1 .6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"],\n    \"angular\": [448, 512, [], \"f420\", \"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\"],\n    \"app-store\": [512, 512, [], \"f36f\", \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"],\n    \"app-store-ios\": [448, 512, [], \"f370\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"],\n    \"apper\": [640, 512, [], \"f371\", \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8 .3-3.3 .3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"],\n    \"apple\": [384, 512, [], \"f179\", \"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"],\n    \"apple-pay\": [640, 512, [], \"f415\", \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9 .3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5 .1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8 .4 9.3 .7 11.6 .7z\"],\n    \"artstation\": [512, 512, [], \"f77a\", \"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\"],\n    \"asymmetrik\": [576, 512, [], \"f372\", \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1 .8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"],\n    \"atlassian\": [512, 512, [], \"f77b\", \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8 .1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6 .1z\"],\n    \"audible\": [640, 512, [], \"f373\", \"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"],\n    \"autoprefixer\": [640, 512, [], \"f41c\", \"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"],\n    \"avianex\": [512, 512, [], \"f374\", \"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"],\n    \"aviato\": [640, 512, [], \"f421\", \"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2 .3-2 .5-4.2 .6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1 .3-.1 .7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3 .3 4.4 .6 6.5 .3 2.6 .8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9 .9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1 .2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9 .9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"],\n    \"aws\": [640, 512, [], \"f375\", \"M180.4 203c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1 -4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1 -5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.61 78.61 0 0 1 -62.61 29.45c-16.28 .89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1 .02 21.6 .37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4 .01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.86 76.86 0 0 1 55.69 17.28 70.29 70.29 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.9 23.05c-7.86 .72-11.52-4.86-12.68-10.37l-49.8-164.6c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.8 33.16-140.8c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.6L420.1 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.7 110.7l-32.78 136.1c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.5 5.63c-5.88 .01-33.92-.3-57.36-12.29a12.8 12.8 0 0 1 -7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89 .91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.9c-70.03 51.72-171.7 79.25-258.5 79.25A469.1 469.1 0 0 1 2.83 327.5c-6.53-5.89-.77-13.96 7.17-9.47a637.4 637.4 0 0 0 316.9 84.12 630.2 630.2 0 0 0 241.6-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79 .77-7.94-5.12-1.79-9.47 40.07-28.17 105.9-20.1 113.4-10.63 7.55 9.47-2.05 75.41-39.56 106.9-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"],\n    \"bandcamp\": [512, 512, [], \"f2d5\", \"M256 8C119 8 8 119 8 256S119 504 256 504 504 393 504 256 393 8 256 8zm48.2 326.1h-181L207.9 178h181z\"],\n    \"battle-net\": [512, 512, [], \"f835\", \"M448.6 225.6c26.87 .18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.1-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.2 7.14 238.7 1.07 228.2 .22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.6-9.22 5.22 53 29.75 101.8 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61 .15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.8 4.6 143.3-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.2c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.7c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.4c-10.29-5.34-21.16-10.34-32.38-15.05a722.5 722.5 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.2 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.8 718.8 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.3 98-132.8 115.9-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.1 12.3 .91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.2 695.2 0 0 0 44.67 152.8c.93-.38 1.84 .88 18.67-8.25-26.33-74.47-33.76-138.2-34-173.4 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.3 30.71q-10.69 15.66-23.33 32.47C365.6 152 339.1 145.8 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.6 717.6 0 0 0 -115.3-31.71 646.6 646.6 0 0 0 -39.39-6.05c-.07 .45-1.81 1.85-2.16 20.33C300 190.3 358.8 215.7 389.4 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.6 306.6 111zm-130.6 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.1 74.8\"],\n    \"behance\": [576, 512, [], \"f1b4\", \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2 .6-8.7 .6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"],\n    \"behance-square\": [448, 512, [], \"f1b5\", \"M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6 .1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3 .3-4.8 .3-7.2z\"],\n    \"bilibili\": [512, 512, [], \"e3d9\", \"M488.6 104.1C505.3 122.2 513 143.8 511.9 169.8V372.2C511.5 398.6 502.7 420.3 485.4 437.3C468.2 454.3 446.3 463.2 419.9 464H92.02C65.57 463.2 43.81 454.2 26.74 436.8C9.682 419.4 .7667 396.5 0 368.2V169.8C.7667 143.8 9.682 122.2 26.74 104.1C43.81 87.75 65.57 78.77 92.02 78H121.4L96.05 52.19C90.3 46.46 87.42 39.19 87.42 30.4C87.42 21.6 90.3 14.34 96.05 8.603C101.8 2.868 109.1 0 117.9 0C126.7 0 134 2.868 139.8 8.603L213.1 78H301.1L375.6 8.603C381.7 2.868 389.2 0 398 0C406.8 0 414.1 2.868 419.9 8.603C425.6 14.34 428.5 21.6 428.5 30.4C428.5 39.19 425.6 46.46 419.9 52.19L394.6 78L423.9 78C450.3 78.77 471.9 87.75 488.6 104.1H488.6zM449.8 173.8C449.4 164.2 446.1 156.4 439.1 150.3C433.9 144.2 425.1 140.9 416.4 140.5H96.05C86.46 140.9 78.6 144.2 72.47 150.3C66.33 156.4 63.07 164.2 62.69 173.8V368.2C62.69 377.4 65.95 385.2 72.47 391.7C78.99 398.2 86.85 401.5 96.05 401.5H416.4C425.6 401.5 433.4 398.2 439.7 391.7C446 385.2 449.4 377.4 449.8 368.2L449.8 173.8zM185.5 216.5C191.8 222.8 195.2 230.6 195.6 239.7V273C195.2 282.2 191.9 289.9 185.8 296.2C179.6 302.5 171.8 305.7 162.2 305.7C152.6 305.7 144.7 302.5 138.6 296.2C132.5 289.9 129.2 282.2 128.8 273V239.7C129.2 230.6 132.6 222.8 138.9 216.5C145.2 210.2 152.1 206.9 162.2 206.5C171.4 206.9 179.2 210.2 185.5 216.5H185.5zM377 216.5C383.3 222.8 386.7 230.6 387.1 239.7V273C386.7 282.2 383.4 289.9 377.3 296.2C371.2 302.5 363.3 305.7 353.7 305.7C344.1 305.7 336.3 302.5 330.1 296.2C323.1 289.9 320.7 282.2 320.4 273V239.7C320.7 230.6 324.1 222.8 330.4 216.5C336.7 210.2 344.5 206.9 353.7 206.5C362.9 206.9 370.7 210.2 377 216.5H377z\"],\n    \"bimobject\": [448, 512, [], \"f378\", \"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"],\n    \"bitbucket\": [512, 512, [61810], \"f171\", \"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0 -13.2-18.3 24.58 24.58 0 0 0 -2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\"],\n    \"bitcoin\": [512, 512, [], \"f379\", \"M504 256c0 136.1-111 248-248 248S8 392.1 8 256 119 8 256 8s248 111 248 248zm-141.7-35.33c4.937-32.1-20.19-50.74-54.55-62.57l11.15-44.7-27.21-6.781-10.85 43.52c-7.154-1.783-14.5-3.464-21.8-5.13l10.93-43.81-27.2-6.781-11.15 44.69c-5.922-1.349-11.73-2.682-17.38-4.084l.031-.14-37.53-9.37-7.239 29.06s20.19 4.627 19.76 4.913c11.02 2.751 13.01 10.04 12.68 15.82l-12.7 50.92c.76 .194 1.744 .473 2.829 .907-.907-.225-1.876-.473-2.876-.713l-17.8 71.34c-1.349 3.348-4.767 8.37-12.47 6.464 .271 .395-19.78-4.937-19.78-4.937l-13.51 31.15 35.41 8.827c6.588 1.651 13.05 3.379 19.4 5.006l-11.26 45.21 27.18 6.781 11.15-44.73a1038 1038 0 0 0 21.69 5.627l-11.11 44.52 27.21 6.781 11.26-45.13c46.4 8.781 81.3 5.239 95.99-36.73 11.84-33.79-.589-53.28-25-65.99 17.78-4.098 31.17-15.79 34.75-39.95zm-62.18 87.18c-8.41 33.79-65.31 15.52-83.75 10.94l14.94-59.9c18.45 4.603 77.6 13.72 68.81 48.96zm8.417-87.67c-7.673 30.74-55.03 15.12-70.39 11.29l13.55-54.33c15.36 3.828 64.84 10.97 56.85 43.03z\"],\n    \"bity\": [496, 512, [], \"f37a\", \"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3 .8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"],\n    \"black-tie\": [448, 512, [], \"f27e\", \"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"],\n    \"blackberry\": [512, 512, [], \"f37b\", \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1 .1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 .1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1 .1-16.3-11.6-39.7-53.7-39.7z\"],\n    \"blogger\": [448, 512, [], \"f37c\", \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1 .1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4 .1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8 .2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9 .7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6 .2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5 .4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7 .5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"],\n    \"blogger-b\": [448, 512, [], \"f37d\", \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8 .6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7 .7 165.8 .2 246.8c-.6 101.5 .1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4 .1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5 .2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5 .9c-68.1 .8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"],\n    \"bluetooth\": [448, 512, [], \"f293\", \"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"],\n    \"bluetooth-b\": [320, 512, [], \"f294\", \"M196.5 260l92.63-103.3L143.1 0v206.3l-86.11-86.11-31.41 31.41 108.1 108.4L25.61 368.4l31.41 31.41 86.11-86.11L145.8 512l148.6-148.6-97.91-103.3zm40.86-102.1l-49.98 49.98-.338-100.3 50.31 50.32zM187.4 313l49.98 49.98-50.31 50.32 .338-100.3z\"],\n    \"bootstrap\": [576, 512, [], \"f836\", \"M333.5 201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4 238.2 333.5 225 333.5 201.4zM517 188.6c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1 0-55.8 28.1-54.7 58.5c1 29.3-.3 67.2-9.8 98.1c-9.6 31-25.7 50.6-52.2 53.1v28.5c26.4 2.5 42.6 22.1 52.2 53.1c9.5 30.9 10.9 68.8 9.8 98.1c-1.1 30.5 22.7 58.5 54.7 58.5h328.7c32.1 0 55.8-28.1 54.7-58.5c-1-29.3 .3-67.2 9.8-98.1c9.6-31 25.7-50.6 52.1-53.1v-28.5C542.7 239.2 526.5 219.6 517 188.6zM300.2 375.1h-97.9V136.8h97.4c43.3 0 71.7 23.4 71.7 59.4c0 25.3-19.1 47.9-43.5 51.8v1.3c33.2 3.6 55.5 26.6 55.5 58.3C383.4 349.7 352.1 375.1 300.2 375.1zM290.2 266.4h-50.1v78.4h52.3c34.2 0 52.3-13.7 52.3-39.5C344.7 279.6 326.1 266.4 290.2 266.4z\"],\n    \"bots\": [640, 512, [], \"e340\", \"M86.34 197.8a51.77 51.77 0 0 0 -41.57 20.06V156a8.19 8.19 0 0 0 -8.19-8.19H8.19A8.19 8.19 0 0 0 0 156V333.6a8.189 8.189 0 0 0 8.19 8.189H36.58a8.189 8.189 0 0 0 8.19-8.189v-8.088c11.63 13.37 25.87 19.77 41.57 19.77 34.6 0 61.92-26.16 61.92-73.84C148.3 225.5 121.2 197.8 86.34 197.8zM71.52 305.7c-9.593 0-21.22-4.942-26.75-12.5V250.2c5.528-7.558 17.15-12.79 26.75-12.79 17.73 0 31.11 13.08 31.11 34.01C102.6 292.6 89.25 305.7 71.52 305.7zm156.4-59.03a17.4 17.4 0 1 0 17.4 17.4A17.4 17.4 0 0 0 227.9 246.7zM273.1 156.7V112a13.31 13.31 0 1 0 -10.24 0V156.7a107.5 107.5 0 1 0 10.24 0zm85.99 107.4c0 30.53-40.79 55.28-91.11 55.28s-91.11-24.75-91.11-55.28 40.79-55.28 91.11-55.28S359.9 233.5 359.9 264.1zm-50.16 17.4a17.4 17.4 0 1 0 -17.4-17.4h0A17.4 17.4 0 0 0 309.8 281.5zM580.7 250.5c-14.83-2.617-22.39-3.78-22.39-9.885 0-5.523 7.268-9.884 17.74-9.884a65.56 65.56 0 0 1 34.48 10.1 8.171 8.171 0 0 0 11.29-2.468c.07-.11 .138-.221 .2-.333l8.611-14.89a8.2 8.2 0 0 0 -2.867-11.12 99.86 99.86 0 0 0 -52.01-14.14c-38.96 0-60.18 21.51-60.18 46.22 0 36.34 33.72 41.86 57.56 45.64 13.37 2.326 24.13 4.361 24.13 11.05 0 6.4-5.523 10.76-18.9 10.76-13.55 0-30.99-6.222-42.62-13.58a8.206 8.206 0 0 0 -11.34 2.491c-.035 .054-.069 .108-.1 .164l-10.2 16.89a8.222 8.222 0 0 0 2.491 11.07c15.22 10.3 37.66 16.69 59.44 16.69 40.41 0 63.96-19.77 63.96-46.51C640 260.6 604.5 254.8 580.7 250.5zm-95.93 60.79a8.211 8.211 0 0 0 -9.521-5.938 23.17 23.17 0 0 1 -4.155 .387c-7.849 0-12.5-6.106-12.5-14.24V240.3h20.35a8.143 8.143 0 0 0 8.141-8.143V209.5a8.143 8.143 0 0 0 -8.141-8.143H458.6V171.1a8.143 8.143 0 0 0 -8.143-8.143H422.3a8.143 8.143 0 0 0 -8.143 8.143h0v30.23H399a8.143 8.143 0 0 0 -8.143 8.143h0v22.67A8.143 8.143 0 0 0 399 240.3h15.11v63.67c0 27.04 15.41 41.28 43.9 41.28 12.18 0 21.38-2.2 27.6-5.446a8.161 8.161 0 0 0 4.145-9.278z\"],\n    \"btc\": [384, 512, [], \"f15a\", \"M310.2 242.6c27.73-14.18 45.38-39.39 41.28-81.3-5.358-57.35-52.46-76.57-114.8-81.93V0h-48.53v77.2c-12.6 0-25.52 .315-38.44 .63V0h-48.53v79.41c-17.84 .539-38.62 .276-97.37 0v51.68c38.31-.678 58.42-3.14 63.02 21.43v217.4c-2.925 19.49-18.52 16.68-53.26 16.07L3.765 443.7c88.48 0 97.37 .315 97.37 .315V512h48.53v-67.06c13.23 .315 26.15 .315 38.44 .315V512h48.53v-68c81.3-4.412 135.6-24.89 142.9-101.5 5.671-61.45-23.32-88.86-69.33-99.89zM150.6 134.6c27.42 0 113.1-8.507 113.1 48.53 0 54.51-85.71 48.21-113.1 48.21v-96.74zm0 251.8V279.8c32.77 0 133.1-9.138 133.1 53.26-.001 60.19-100.4 53.25-133.1 53.25z\"],\n    \"buffer\": [448, 512, [], \"f837\", \"M427.8 380.7l-196.5 97.82a18.6 18.6 0 0 1 -14.67 0L20.16 380.7c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.8 67a18.51 18.51 0 0 0 14.67 0l134.8-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.5l-47.06-23.43a18.62 18.62 0 0 0 -14.68 0l-134.8 67.08a18.68 18.68 0 0 1 -14.67 0L81.91 220.7a18.65 18.65 0 0 0 -14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.5 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.4l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.5-90.29c4-1.86 4-4.89 0-6.74L231.3 33.4a19.88 19.88 0 0 0 -14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\"],\n    \"buromobelexperte\": [448, 512, [], \"f37f\", \"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"],\n    \"buy-n-large\": [576, 512, [], \"f8a6\", \"M288 32C133.3 32 7.79 132.3 7.79 256S133.3 480 288 480s280.2-100.3 280.2-224S442.7 32 288 32zm-85.39 357.2L64.1 390.5l77.25-290.7h133.4c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1 -1.5 6.85 77.39 77.39 0 0 0 -17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.7 61.52zM358 207.1h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.9 182.1H306.8L322.6 328a78.8 78.8 0 0 0 11.47 .83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.4h103.9zM211.7 269.4H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.7h21.37c18 0 35.38-14.64 39.21-30.14C265.2 168.7 251.1 170 233 170z\"],\n    \"buysellads\": [448, 512, [], \"f20d\", \"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"],\n    \"canadian-maple-leaf\": [512, 512, [], \"f785\", \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"],\n    \"cc-amazon-pay\": [576, 512, [], \"f42d\", \"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3 .4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5 .9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5 .9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8 .1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7 .9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4 .2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9 .9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3 .1 4.6 1.6 6.7 6.2 7.5 4.7 .8 9.4 1.6 14.2 1.7 14.3 .3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5 .6-1.5 1.1-3 1.3-4.6 .4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5 .4-.3 .8-.6 1.4-1 .5 3.2 .9 6.2 1.5 9.2 .5 2.6 2.1 4.3 4.5 4.4 4.6 .1 9.1 .1 13.7 0 2.3-.1 3.8-1.6 4-3.9 .1-.8 .1-1.6 .1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8 .1-1.6 .3-2.5 .3-8.2 .4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5 .1 2.8-.1 5.6 0 8.3 .1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4 .8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7 .3 6.9 .2 13.9 .3 20.8 0 .4-.1 .7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9 .1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7 .1 2.5 .2 2.5 1.7 4.1 4.1 4.2 5.9 .1 11.8 .1 17.7 0 2.5 0 4-1.7 4.1-4.1 .1-.8 .1-1.7 .1-2.5v-60.7c.9 .7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2 .2-2.4 .3-3.6 .5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6 .7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4 .7 0 1.4 .2 2.1 .3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2 .8-2.4 1.8-3.1 3-.6 .9-.7 2.3-.5 3.4 .3 1.3 1.7 1.6 3 1.5 .6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1 .3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7 .3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3 .8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6 .7-3 1.2-6.1 1.7-9.1 .2-4.7 .2-9.6 .2-14.5z\"],\n    \"cc-amex\": [576, 512, [], \"f1f3\", \"M325.1 167.8c0-16.4-14.1-18.4-27.4-18.4l-39.1-.3v69.3H275v-25.1h18c18.4 0 14.5 10.3 14.8 25.1h16.6v-13.5c0-9.2-1.5-15.1-11-18.4 7.4-3 11.8-10.7 11.7-18.7zm-29.4 11.3H275v-15.3h21c5.1 0 10.7 1 10.7 7.4 0 6.6-5.3 7.9-11 7.9zM279 268.6h-52.7l-21 22.8-20.5-22.8h-66.5l-.1 69.3h65.4l21.3-23 20.4 23h32.2l.1-23.3c18.9 0 49.3 4.6 49.3-23.3 0-17.3-12.3-22.7-27.9-22.7zm-103.8 54.7h-40.6v-13.8h36.3v-14.1h-36.3v-12.5h41.7l17.9 20.2zm65.8 8.2l-25.3-28.1L241 276zm37.8-31h-21.2v-17.6h21.5c5.6 0 10.2 2.3 10.2 8.4 0 6.4-4.6 9.2-10.5 9.2zm-31.6-136.7v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5zM576 255.4h-.2zm-194.6 31.9c0-16.4-14.1-18.7-27.1-18.7h-39.4l-.1 69.3h16.6l.1-25.3h17.6c11 0 14.8 2 14.8 13.8l-.1 11.5h16.6l.1-13.8c0-8.9-1.8-15.1-11-18.4 7.7-3.1 11.8-10.8 11.9-18.4zm-29.2 11.2h-20.7v-15.6h21c5.1 0 10.7 1 10.7 7.4 0 6.9-5.4 8.2-11 8.2zm-172.8-80v-69.3h-27.6l-19.7 47-21.7-47H83.3v65.7l-28.1-65.7H30.7L1 218.5h17.9l6.4-15.3h34.5l6.4 15.3H100v-54.2l24 54.2h14.6l24-54.2v54.2zM31.2 188.8l11.2-27.6 11.5 27.6zm477.4 158.9v-4.5c-10.8 5.6-3.9 4.5-156.7 4.5 0-25.2 .1-23.9 0-25.2-1.7-.1-3.2-.1-9.4-.1 0 17.9-.1 6.8-.1 25.3h-39.6c0-12.1 .1-15.3 .1-29.2-10 6-22.8 6.4-34.3 6.2 0 14.7-.1 8.3-.1 23h-48.9c-5.1-5.7-2.7-3.1-15.4-17.4-3.2 3.5-12.8 13.9-16.1 17.4h-82v-92.3h83.1c5 5.6 2.8 3.1 15.5 17.2 3.2-3.5 12.2-13.4 15.7-17.2h58c9.8 0 18 1.9 24.3 5.6v-5.6c54.3 0 64.3-1.4 75.7 5.1v-5.1h78.2v5.2c11.4-6.9 19.6-5.2 64.9-5.2v5c10.3-5.9 16.6-5.2 54.3-5V80c0-26.5-21.5-48-48-48h-480c-26.5 0-48 21.5-48 48v109.8c9.4-21.9 19.7-46 23.1-53.9h39.7c4.3 10.1 1.6 3.7 9 21.1v-21.1h46c2.9 6.2 11.1 24 13.9 30 5.8-13.6 10.1-23.9 12.6-30h103c0-.1 11.5 0 11.6 0 43.7 .2 53.6-.8 64.4 5.3v-5.3H363v9.3c7.6-6.1 17.9-9.3 30.7-9.3h27.6c0 .5 1.9 .3 2.3 .3H456c4.2 9.8 2.6 6 8.8 20.6v-20.6h43.3c4.9 8-1-1.8 11.2 18.4v-18.4h39.9v92h-41.6c-5.4-9-1.4-2.2-13.2-21.9v21.9h-52.8c-6.4-14.8-.1-.3-6.6-15.3h-19c-4.2 10-2.2 5.2-6.4 15.3h-26.8c-12.3 0-22.3-3-29.7-8.9v8.9h-66.5c-.3-13.9-.1-24.8-.1-24.8-1.8-.3-3.4-.2-9.8-.2v25.1H151.2v-11.4c-2.5 5.6-2.7 5.9-5.1 11.4h-29.5c-4-8.9-2.9-6.4-5.1-11.4v11.4H58.6c-4.2-10.1-2.2-5.3-6.4-15.3H33c-4.2 10-2.2 5.2-6.4 15.3H0V432c0 26.5 21.5 48 48 48h480.1c26.5 0 48-21.5 48-48v-90.4c-12.7 8.3-32.7 6.1-67.5 6.1zm36.3-64.5H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-57 39.8h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-42.2-40.1v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5zm-56.3-108.1c-.3 .2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9 .2 .1 1.1 .5 3.4 .5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm20.4-10.5h-.1zm-16.2-15.2c-23.5 0-34 12-34 35.3 0 22.2 10.2 34 33 34h19.2l6.4-15.3h34.3l6.6 15.3h33.7v-51.9l31.2 51.9h23.6v-69h-16.9v48.1l-29.1-48.1h-25.3v65.4l-27.9-65.4h-24.8l-23.5 54.5h-7.4c-13.3 0-16.1-8.1-16.1-19.9 0-23.8 15.7-20 33.1-19.7v-15.2zm42.1 12.1l11.2 27.6h-22.8zm-101.1-12v69.3h16.9v-69.3z\"],\n    \"cc-apple-pay\": [576, 512, [], \"f416\", \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3 .9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4 .7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4 .3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5 .2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2 .4 6.5 .5 8.1 .5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"],\n    \"cc-diners-club\": [576, 512, [], \"f24c\", \"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8 .3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"],\n    \"cc-discover\": [576, 512, [], \"f1f2\", \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9 .1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"],\n    \"cc-jcb\": [576, 512, [], \"f24b\", \"M431.5 244.3V212c41.2 0 38.5 .2 38.5 .2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2 .4-3.3 .3-38.5 .3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3 .1 42.3-12.9 42.3-33.2z\"],\n    \"cc-mastercard\": [576, 512, [], \"f1f1\", \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8 .3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3 .3 .5 .3 1.1 0 .3-.3 .5-.3 1.1-.3 .3-.3 .5-.5 .8-.3 .3-.5 .5-1.1 .5-.3 .3-.5 .3-1.1 .3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8 .3-1.1 0-.5 .3-.8 .5-1.1 .3-.3 .5-.3 .8-.5 .5-.3 .8-.3 1.1-.3 .5 0 .8 0 1.1 .3 .5 .3 .8 .3 1.1 .5s.2 .6 .5 1.1zm-2.2 1.4c.5 0 .5-.3 .8-.3 .3-.3 .3-.5 .3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7 .8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8 .3-1.4 .3-.5 .3-.8 .5-1.1 .8-.5 .3-.8 .8-.8 1.1-.3 .5-.3 1.1-.3 1.6 0 .3 0 .8 .3 1.4 0 .3 .3 .8 .8 1.1 .3 .3 .5 .5 1.1 .8 .5 .3 1.1 .3 1.4 .3 .5 0 1.1 0 1.6-.3 .3-.3 .8-.5 1.1-.8 .3-.3 .5-.8 .8-1.1 .3-.6 .3-1.1 .3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4 .1 138.5-61.9 138.5-138.4z\"],\n    \"cc-paypal\": [576, 512, [], \"f1f4\", \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5 .5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3 .5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5 .1-9.8-6.9-15.5-16.2-15.5z\"],\n    \"cc-stripe\": [576, 512, [], \"f1f5\", \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"],\n    \"cc-visa\": [576, 512, [], \"f1f0\", \"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2 .3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4 .2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2 .2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2 .1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"],\n    \"centercode\": [512, 512, [], \"f380\", \"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"],\n    \"centos\": [448, 512, [], \"f789\", \"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\"],\n    \"chrome\": [496, 512, [], \"f268\", \"M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z\"],\n    \"chromecast\": [512, 512, [], \"f838\", \"M447.8 64H64c-23.6 0-42.7 19.1-42.7 42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6 0 42.7-19.1 42.7-42.7V106.7C490.7 83.1 471.4 64 447.8 64zM21.3 383.6L21.3 383.6l0 63.9h63.9C85.2 412.2 56.6 383.6 21.3 383.6L21.3 383.6zM21.3 298.6V341c58.9 0 106.6 48.1 106.6 107h42.7C170.7 365.6 103.7 298.7 21.3 298.6zM213.4 448h42.7c-.5-129.5-105.3-234.3-234.8-234.6l0 42.4C127.3 255.6 213.3 342 213.4 448z\"],\n    \"cloudflare\": [640, 512, [], \"e07d\", \"M407.9 319.9l-230.8-2.928a4.58 4.58 0 0 1 -3.632-1.926 4.648 4.648 0 0 1 -.494-4.147 6.143 6.143 0 0 1 5.361-4.076L411.3 303.9c27.63-1.26 57.55-23.57 68.02-50.78l13.29-34.54a7.944 7.944 0 0 0 .524-2.936 7.735 7.735 0 0 0 -.164-1.631A151.9 151.9 0 0 0 201.3 198.4 68.12 68.12 0 0 0 94.2 269.6C41.92 271.1 0 313.7 0 366.1a96.05 96.05 0 0 0 1.029 13.96 4.508 4.508 0 0 0 4.445 3.871l426.1 .051c.043 0 .08-.019 .122-.02a5.606 5.606 0 0 0 5.271-4l3.273-11.27c3.9-13.4 2.448-25.8-4.1-34.9C430.1 325.4 420.1 320.5 407.9 319.9zM513.9 221.1c-2.141 0-4.271 .062-6.391 .164a3.771 3.771 0 0 0 -3.324 2.653l-9.077 31.19c-3.9 13.4-2.449 25.79 4.1 34.89 6.02 8.4 16.05 13.32 28.24 13.9l49.2 2.939a4.491 4.491 0 0 1 3.51 1.894 4.64 4.64 0 0 1 .514 4.169 6.153 6.153 0 0 1 -5.351 4.075l-51.13 2.939c-27.75 1.27-57.67 23.57-68.14 50.78l-3.695 9.606a2.716 2.716 0 0 0 2.427 3.68c.046 0 .088 .017 .136 .017h175.9a4.69 4.69 0 0 0 4.539-3.37 124.8 124.8 0 0 0 4.682-34C640 277.3 583.5 221.1 513.9 221.1z\"],\n    \"cloudscale\": [448, 512, [], \"f383\", \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6 .4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"],\n    \"cloudsmith\": [332, 512, [], \"f384\", \"M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z\"],\n    \"cloudversify\": [616, 512, [], \"f385\", \"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"],\n    \"cmplid\": [640, 512, [], \"e360\", \"M226.1 388.2a3.816 3.816 0 0 0 -2.294-3.5 3.946 3.946 0 0 0 -1.629-.385L72.6 384.3a19.24 19.24 0 0 1 -17.92-26.02L81.58 255.7a35.72 35.72 0 0 1 32.37-26H262.5a7.07 7.07 0 0 0 6.392-5.194l10.77-41.13a3.849 3.849 0 0 0 -2.237-4.937 3.755 3.755 0 0 0 -1.377-.261c-.063 0-.126 0-.189 .005H127.4a106.8 106.8 0 0 0 -96.99 77.1L3.483 358.8A57.47 57.47 0 0 0 57.31 436q1.43 0 2.86-.072H208.7a7.131 7.131 0 0 0 6.391-5.193L225.8 389.6A3.82 3.82 0 0 0 226.1 388.2zM306.7 81.2a3.861 3.861 0 0 0 .251-1.367A3.813 3.813 0 0 0 303.1 76c-.064 0-.128 0-.192 0h-41A7.034 7.034 0 0 0 255.5 81.2l-21.35 80.92h51.13zM180.4 368.2H231.5L263.5 245.7H212.3zM511.9 79.72a3.809 3.809 0 0 0 -3.8-3.661c-.058 0-.137 0-.23 .007h-41a7.1 7.1 0 0 0 -6.584 5.129L368.9 430.6a3.54 3.54 0 0 0 -.262 1.335 3.873 3.873 0 0 0 3.864 3.863c.056 0 .112 0 .169 0h41a7.068 7.068 0 0 0 6.392-5.193L511.5 81.2A3.624 3.624 0 0 0 511.9 79.72zM324.6 384.5h-41a7.2 7.2 0 0 0 -6.392 5.194L266.5 430.8a3.662 3.662 0 0 0 -.268 1.374A3.783 3.783 0 0 0 270 436c.06 0 .166 0 .3-.012h40.9a7.036 7.036 0 0 0 6.391-5.193l10.77-41.13a3.75 3.75 0 0 0 -3.445-5.208c-.108 0-.217 0-.326 .014zm311.3-308.4h-41a7.066 7.066 0 0 0 -6.392 5.129l-91.46 349.4a4.073 4.073 0 0 0 -.229 1.347 3.872 3.872 0 0 0 3.863 3.851c.056 0 .112 0 .169 0h40.97a7.1 7.1 0 0 0 6.392-5.193L639.7 81.2a3.624 3.624 0 0 0 .32-1.475 3.841 3.841 0 0 0 -3.821-3.564c-.068 0-.137 0-.206 .006zM371.6 225.2l10.8-41.1a4.369 4.369 0 0 0 .227-1.388 3.869 3.869 0 0 0 -3.861-3.842c-.057 0-.113 0-.169 0h-41.1a7.292 7.292 0 0 0 -6.391 5.226l-10.83 41.1a4.417 4.417 0 0 0 -.26 1.493c0 .069 0 .138 0 .206a3.776 3.776 0 0 0 3.757 3.507c.076 0 .18 0 .3-.012h41.13A7.034 7.034 0 0 0 371.6 225.2z\"],\n    \"codepen\": [512, 512, [], \"f1cb\", \"M502.3 159.7l-234-156c-7.987-4.915-16.51-4.96-24.57 0l-234 156C3.714 163.7 0 170.8 0 177.1v155.1c0 7.143 3.714 14.29 9.715 18.29l234 156c7.987 4.915 16.51 4.96 24.57 0l234-156c6-3.999 9.715-11.14 9.715-18.29V177.1c-.001-7.142-3.715-14.29-9.716-18.28zM278 63.13l172.3 114.9-76.86 51.43L278 165.7V63.13zm-44 0v102.6l-95.43 63.72-76.86-51.43L234 63.13zM44 219.1l55.14 36.86L44 292.8v-73.71zm190 229.7L61.71 333.1l76.86-51.43L234 346.3v102.6zm22-140.9l-77.71-52 77.71-52 77.71 52-77.71 52zm22 140.9V346.3l95.43-63.72 76.86 51.43L278 448.8zm190-156l-55.14-36.86L468 219.1v73.71z\"],\n    \"codiepie\": [472, 512, [], \"f284\", \"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"],\n    \"confluence\": [512, 512, [], \"f78d\", \"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1 .1-.2 .1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8 .4 21.7-7.7 .1-.1 .1-.3 .2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2 .3-.4 .6-.6 1-67.3 112.6-81.1 95.6-280.6 .9-8.1-3.9-17.8-.4-21.7 7.7-.1 .1-.1 .3-.2 .4L22.2 141.3c-3.6 8.1 .1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"],\n    \"connectdevelop\": [576, 512, [], \"f20e\", \"M550.5 241l-50.09-86.79c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.73-14.73-15l-55.45-95.89c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.27-15.27-15.27-4.821 0-8.839 2.143-11.79 5.625H299.5C296.8 18.14 292.8 16 288 16s-8.839 2.143-11.52 5.625H170.4C167.5 18.14 163.4 16 158.6 16c-8.303 0-15.27 6.696-15.27 15.27 0 1.607 .536 3.482 1.072 4.821l-55.98 97.23c-5.356 2.41-9.107 7.5-9.107 13.66 0 .535 .268 1.071 .268 1.607l-53.3 92.14c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.39 12.05 15l55.18 95.36c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.39 12.05 14.73l51.7 89.73c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.27 15.27 15.27 4.821 0 8.839-2.143 11.52-5.357h106.9C279.2 493.9 283.4 496 288 496s8.839-2.143 11.52-5.357h107.1c2.678 2.946 6.696 4.821 10.98 4.821 8.571 0 15.27-6.964 15.27-15.27 0-1.607-.267-2.946-.803-4.285l51.7-90.27c6.964-1.339 12.05-7.5 12.05-14.73 0-1.607-.268-3.214-.804-4.821l54.91-95.36c6.964-1.339 12.32-7.5 12.32-15-.002-7.232-5.092-13.39-11.79-14.73zM153.5 450.7l-43.66-75.8h43.66v75.8zm0-83.84h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.1-47.41v50.62zm0-62.41l-50.36 53.3c-1.339-.536-2.679-1.34-4.018-1.607L43.45 259.8c.535-1.339 .535-2.679 .535-4.018s0-2.41-.268-3.482l51.97-90c2.679-.268 5.357-1.072 7.768-2.679l50.09 51.97v92.95zm0-102.3l-45.8-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.93-15.8v72.05zm0-80.63l-43.66 15.8 43.66-75.54v59.73zm326.5 39.11l.804 1.339L445.5 329.1l-63.75-67.23 98.04-101.5 .268 .268zM291.8 355.1l11.52 11.79H280.5l11.25-11.79zm-.268-11.25l-83.3-85.45 79.55-84.38 83.04 87.59-79.29 82.23zm5.357 5.893l79.29-82.23 67.5 71.25-5.892 28.13H313.7l-16.88-17.14zM410.4 44.39c1.071 .536 2.142 1.072 3.482 1.34l57.86 100.7v.536c0 2.946 .803 5.624 2.143 7.767L376.4 256l-83.04-87.59L410.4 44.39zm-9.107-2.143L287.7 162.5l-57.05-60.27 166.3-60h4.287zm-123.5 0c2.678 2.678 6.16 4.285 10.18 4.285s7.5-1.607 10.18-4.285h75L224.8 95.82 173.9 42.25h103.9zm-116.2 5.625l1.071-2.142a33.83 33.83 0 0 0 2.679-.804l51.16 53.84-54.91 19.82V47.88zm0 79.29l60.8-21.96 59.73 63.21-79.55 84.11-40.98-42.05v-83.3zm0 92.68L198 257.6l-36.43 38.3v-76.07zm0 87.86l42.05-44.46 82.77 85.98-17.14 17.68H161.6v-59.2zm6.964 162.1c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.73h99.91l-91.61 94.82h-1.339zm129.9 0c-2.679-2.41-6.428-4.285-10.45-4.285s-7.767 1.875-10.45 4.285h-96.43l91.61-94.82h38.3l91.61 94.82H298.4zm120-11.79l-4.286 7.5c-1.339 .268-2.41 .803-3.482 1.339l-89.2-91.88h114.4l-17.41 83.04zm12.86-22.23l12.86-60.8h21.96l-34.82 60.8zm34.82-68.84h-20.36l4.553-21.16 17.14 18.21c-.535 .803-1.071 1.874-1.339 2.946zm66.16-107.4l-55.45 96.7c-1.339 .535-2.679 1.071-4.018 1.874l-20.63-21.96 34.55-163.9 45.8 79.29c-.267 1.339-.803 2.678-.803 4.285 0 1.339 .268 2.411 .536 3.75z\"],\n    \"contao\": [512, 512, [], \"f26d\", \"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"],\n    \"cotton-bureau\": [512, 512, [], \"f89e\", \"M474.3 330.4c-23.66 91.85-94.23 144.6-201.9 148.4V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.2 0C110.5 157.7 74 194.6 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.4-5-211.1-85.07-211.1-223 0-141.8 81.35-223.2 223.2-223.2 114.8 0 189.8 53.2 214.7 148.8H500C473.9 71.51 388.2 8 259.8 8 105 8 12 101.2 12 255.8 12 411.1 105.2 504.3 259.8 504c128.3 0 213.9-63.81 239.7-173.6zM357 182.3c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.8zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.4c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.5 71.65 120.8-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.3c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0 -33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z\"],\n    \"cpanel\": [640, 512, [], \"f388\", \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5 .2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\"],\n    \"creative-commons\": [496, 512, [], \"f25e\", \"M245.8 214.9l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.1 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.6 8.05C104.7 8.05 0 123.1 0 256c0 138.5 113.6 248 247.6 248 129.9 0 248.4-100.9 248.4-248 0-137.9-106.6-248-248.4-248zm.87 450.8c-112.5 0-203.7-93.04-203.7-202.8 0-105.4 85.43-203.3 203.7-203.3 112.5 0 202.8 89.46 202.8 203.3-.01 121.7-99.68 202.8-202.8 202.8z\"],\n    \"creative-commons-by\": [496, 512, [], \"f4e7\", \"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3z\"],\n    \"creative-commons-nc\": [496, 512, [], \"f4e8\", \"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"],\n    \"creative-commons-nc-eu\": [496, 512, [], \"f4e9\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4 .9 .4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"],\n    \"creative-commons-nc-jp\": [496, 512, [], \"f4ea\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"],\n    \"creative-commons-nd\": [496, 512, [], \"f4eb\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"],\n    \"creative-commons-pd\": [496, 512, [], \"f4ec\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"],\n    \"creative-commons-pd-alt\": [496, 512, [], \"f4ed\", \"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6 .9 41.6z\"],\n    \"creative-commons-remix\": [496, 512, [], \"f4ee\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4 .4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"],\n    \"creative-commons-sa\": [496, 512, [], \"f4ef\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"],\n    \"creative-commons-sampling\": [496, 512, [], \"f4f0\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9 .6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9 .5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6 .5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6 .6 0 10.6 .7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"],\n    \"creative-commons-sampling-plus\": [496, 512, [], \"f4f1\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1 .4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2 .2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1 .1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4 .3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"],\n    \"creative-commons-share\": [496, 512, [], \"f4f2\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"],\n    \"creative-commons-zero\": [496, 512, [], \"f4f3\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8 .1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4 .5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"],\n    \"critical-role\": [448, 512, [], \"f6c9\", \"M225.8 0c.26 .15 216.6 124.5 217.1 124.7 3 1.18 3.7 3.46 3.7 6.56q-.11 125.2 0 250.4a5.88 5.88 0 0 1 -3.38 5.78c-21.37 12-207.9 118.3-218.9 124.6h-3C142 466.3 3.08 386.6 2.93 386.5a3.29 3.29 0 0 1 -1.88-3.24c0-.87 0-225.9-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.1 213.2 6 224.1 0zM215.4 20.42l-.22-.16Q118.1 75.55 21 130.9c0 .12 .08 .23 .13 .35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.4c.88-1.41 64.07-110.9 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4 .09 1.48 .22 .78 1.42-41.19 71.33-36.4 63-67.48 116.9-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82 .29 26.21 .15 25.27 1 32.66 .52 4.37 2.16 4.2 9.69 4.81 3.14 .26 3.88 4.08 .52 4.92-1.57 .39-31.6 .51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16 .81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4 .88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06 .89 .13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5 .2 1.48 1.33 0 .11 .88 26.69 .87 26.8-.05 1.52 .67 1.62 1.89 1.62h186.7Q386.5 304.6 346 234.3c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.1V138c-1.72 .5-103.3 38.72-105.8 39.68-1.08 .42-1.55 .2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13 .65-1.39 .1 0 95.53-35.85 103-38.77-65.42-37.57-130.6-75-196-112.6l86.82 150.4-.28 .33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.7-82-142.2-9.1 14.67-83.56 146.2-85.37 146.3-2.93 .17-5.88 .08-9.25 .08q43.25-74.74 86.18-149zm51.93 129.9a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53 .2 2.6 1.92 0 .11 .07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.1 0 .89 .52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75 .13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.3 .05-1.08-.62-1.16-1.35-1.15-32.35 .52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95 .23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85 .68-27.49 .58-22.59 1-29.55a2.69 2.69 0 0 0 -1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0 -2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9 .43 1.12 1.24 1.11 .1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76 .31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1 -1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1 -2.66-1.79c2.38-3.75 5.89 .92 5.86-6.14-.08-25.75 .21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05 .72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73 .95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42 .26 4.73 .45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49 .53 1 3.38 0 .05-.16 0-.24 0-3.61 .26-3.94 1-4 4.62-.27 43.93 .07 40.23 .41 42.82 .11 .84 .27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37 .08-20.74 0-31.11 .07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37 .88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57 .83 3.55zm275-10.15c-1.21 7.13 .17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1 -3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0 -2-1.44 138 138 0 0 0 -14.58 .07 2.23 2.23 0 0 0 -1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72 .66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61 .13 4-1.11 4.13-4.29 .09-1.87 .08 1.17 .07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06 .21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0 -2.66 2.83c-.07 1.63-.19 38.89 .29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25 .43 14.92 .44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.7 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11 .38 37.19-.65 1.68-.19 2.38 .24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31 .34 15.69-1.52 .47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58 .32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64 .48 14.4 0 16.43-5.71 .84-2.37 3.5-1.77 3.18 .58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.5c2.46 .61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1 .57 11.89-6 12.75-1.6 .21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.1c3.28 0 3.66 3 .16 3.43-2.61 .32-5-.42-5 5.46 0 2-.19 29.05 .4 41.45 .11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76 .84 2.76 1.08 .35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94 .4 5.13-2.8 1-15.87 .57-44.65 .34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22 .34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61 .1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09 .41-3.15 1.29 0 20.19-.41 21.17 .21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.3a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.6 197.4-112.5-.14-.43 11.26-.18-181.5-.27-1.22 0-1.57 .37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1 -1.36 7.71c-.55 1.83 .38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1 -2-10.79c.16-2.46 .8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.3 102.6 196 112.8zm-90.9-188.8c0 2.4 .36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51 .05 8.04 .01 11.61 .02 41.65zm105.8-15.05c0 2.13 1.07 38.68 1.09 39.13 .34 9.94-25.58 5.77-25.23-2.59 .08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1 -.36 .12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88 .07-14.91zm-80.15 103.8c0 1.8 .41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81 .05 4.5-.03 13.68 .02 18.59zm212.3 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\"],\n    \"css3\": [512, 512, [], \"f13c\", \"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"],\n    \"css3-alt\": [384, 512, [], \"f38b\", \"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3 .1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2 .1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"],\n    \"cuttlefish\": [440, 512, [], \"f38c\", \"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"],\n    \"d-and-d\": [576, 512, [], \"f38d\", \"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2 .3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1 .7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5 .6-11.4 12.5-14.1 27.4-10.9 43.6 .2 1.3 .4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6 .1 .5 .1 1.1 .1 1.6 0 .3-.1 .5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5 .9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2 .2-1.9 .3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3 .3 .3 .7 .6 1 .9 .3-.6 .5-1.2 .9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8 .7-3.5 .9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3 .4-.4 .9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6 .2-.1 .3-.2 .4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8 .9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9 .8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7 .3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3 .2-.2 .4-.3 .6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8 .6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1 .1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8 .4 4.7 .8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1 .7-52.3 .3 2.2 .4 4.3 .9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8 .1-50.9-10.6 .7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6 .2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3 .8-2.4 2.3-4.6 4-6.6 .6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2 .5-1 1.1-2 1.9-3.3 .5 4.2 .6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1 .6 .5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7 .4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6 .5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2 .4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3 .3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5 .8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8 .8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3 .6-4.5 .8-9.2 .1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6 .1-23.3 1.3-.9 .1-1.7 .3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"],\n    \"d-and-d-beyond\": [640, 512, [], \"f6ca\", \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9 .2-5.8 1.6-7.5 .6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9 .6-.3 1.3 0 .6 1.9-.2 .6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3 .1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9 .9 7.5 .2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1 .6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6 .7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4 .2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5 .5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4 .8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6 .5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9 .5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8 .5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6 .3 3 .6 4.3 1.1-2.1 .8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2 .8 .2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8 .6-2.6-.2s.3-4.3 .3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3 .6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7 .2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7 .6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8 .8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5 .3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9 .3 5.6 1.1V196c-1.1 .5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1 .2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5 .2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1 .2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3 .3-99.3zm-.3 77.5c-37.4 0-36.9-55.3 .2-55.3 36.8 .1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8 .2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1 .1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5 .8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6 .3-39.9-4 .1 .8 .5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8 .2-39.9-4 .1 .7 .5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6 .3-4 1.1-6.1 2.9 .1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"],\n    \"dailymotion\": [448, 512, [], \"e052\", \"M298.9 267a48.4 48.4 0 0 0 -24.36-6.21q-19.83 0-33.44 13.27t-13.61 33.42q0 21.16 13.28 34.6t33.43 13.44q20.5 0 34.11-13.78T322 307.5A47.13 47.13 0 0 0 315.9 284 44.13 44.13 0 0 0 298.9 267zM0 32V480H448V32zM374.7 405.3h-53.1V381.4h-.67q-15.79 26.2-55.78 26.2-27.56 0-48.89-13.1a88.29 88.29 0 0 1 -32.94-35.77q-11.6-22.68-11.59-50.89 0-27.56 11.76-50.22a89.9 89.9 0 0 1 32.93-35.78q21.18-13.09 47.72-13.1a80.87 80.87 0 0 1 29.74 5.21q13.28 5.21 25 17V153l55.79-12.09z\"],\n    \"dashcube\": [448, 512, [], \"f210\", \"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"],\n    \"deezer\": [576, 512, [], \"e077\", \"M451.5 244.7H576V172H451.5zm0-173.9v72.67H576V70.82zm0 275.1H576V273.2H451.5zM0 447.1H124.5V374.4H0zm150.5 0H275V374.4H150.5zm150.5 0H425.5V374.4H301zm150.5 0H576V374.4H451.5zM301 345.9H425.5V273.2H301zm-150.5 0H275V273.2H150.5zm0-101.2H275V172H150.5z\"],\n    \"delicious\": [448, 512, [], \"f1a5\", \"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1 .5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\"],\n    \"deploydog\": [512, 512, [], \"f38e\", \"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"],\n    \"deskpro\": [480, 512, [], \"f38f\", \"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7 .3 15 .1h82c.2 0 .3 .1 .5 .1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"],\n    \"dev\": [448, 512, [], \"f6cc\", \"M120.1 208.3c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.5h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.4 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.2c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.1h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.7-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16 .29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.6 115.3c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.7 29.57-113.7h32.58l-38.46 144.8z\"],\n    \"deviantart\": [320, 512, [], \"f1bd\", \"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"],\n    \"dhl\": [640, 512, [], \"f790\", \"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4 .7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\"],\n    \"diaspora\": [512, 512, [], \"f791\", \"M251.6 354.5c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.3s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1 .6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3 .4-2 1-148.6 1.7-149.6 .8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3 .8 .9 31.9 102.2 31.5 102.6-.9 .9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\"],\n    \"digg\": [512, 512, [], \"f1a6\", \"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"],\n    \"digital-ocean\": [512, 512, [], \"f391\", \"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\"],\n    \"discord\": [640, 512, [], \"f392\", \"M524.5 69.84a1.5 1.5 0 0 0 -.764-.7A485.1 485.1 0 0 0 404.1 32.03a1.816 1.816 0 0 0 -1.923 .91 337.5 337.5 0 0 0 -14.9 30.6 447.8 447.8 0 0 0 -134.4 0 309.5 309.5 0 0 0 -15.14-30.6 1.89 1.89 0 0 0 -1.924-.91A483.7 483.7 0 0 0 116.1 69.14a1.712 1.712 0 0 0 -.788 .676C39.07 183.7 18.19 294.7 28.43 404.4a2.016 2.016 0 0 0 .765 1.375A487.7 487.7 0 0 0 176 479.9a1.9 1.9 0 0 0 2.063-.676A348.2 348.2 0 0 0 208.1 430.4a1.86 1.86 0 0 0 -1.019-2.588 321.2 321.2 0 0 1 -45.87-21.85 1.885 1.885 0 0 1 -.185-3.126c3.082-2.309 6.166-4.711 9.109-7.137a1.819 1.819 0 0 1 1.9-.256c96.23 43.92 200.4 43.92 295.5 0a1.812 1.812 0 0 1 1.924 .233c2.944 2.426 6.027 4.851 9.132 7.16a1.884 1.884 0 0 1 -.162 3.126 301.4 301.4 0 0 1 -45.89 21.83 1.875 1.875 0 0 0 -1 2.611 391.1 391.1 0 0 0 30.01 48.81 1.864 1.864 0 0 0 2.063 .7A486 486 0 0 0 610.7 405.7a1.882 1.882 0 0 0 .765-1.352C623.7 277.6 590.9 167.5 524.5 69.84zM222.5 337.6c-28.97 0-52.84-26.59-52.84-59.24S193.1 219.1 222.5 219.1c29.67 0 53.31 26.82 52.84 59.24C275.3 310.1 251.9 337.6 222.5 337.6zm195.4 0c-28.97 0-52.84-26.59-52.84-59.24S388.4 219.1 417.9 219.1c29.67 0 53.31 26.82 52.84 59.24C470.7 310.1 447.5 337.6 417.9 337.6z\"],\n    \"discourse\": [448, 512, [], \"f393\", \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"],\n    \"dochub\": [416, 512, [], \"f394\", \"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1 .8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"],\n    \"docker\": [640, 512, [], \"f395\", \"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4 .4 67.6 .1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"],\n    \"draft2digital\": [480, 512, [], \"f396\", \"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\"],\n    \"dribbble\": [512, 512, [], \"f17d\", \"M256 8C119.3 8 8 119.3 8 256s111.3 248 248 248 248-111.3 248-248S392.7 8 256 8zm163.1 114.4c29.5 36.05 47.37 81.96 47.83 131.1-6.984-1.477-77.02-15.68-147.5-6.818-5.752-14.04-11.18-26.39-18.62-41.61 78.32-31.98 113.8-77.48 118.3-83.52zM396.4 97.87c-3.81 5.427-35.7 48.29-111 76.52-34.71-63.78-73.18-116.2-79.04-124 67.18-16.19 137.1 1.27 190.1 47.49zm-230.5-33.25c5.585 7.659 43.44 60.12 78.54 122.5-99.09 26.31-186.4 25.93-195.8 25.81C62.38 147.2 106.7 92.57 165.9 64.62zM44.17 256.3c0-2.166 .043-4.322 .108-6.473 9.268 .19 111.9 1.513 217.7-30.15 6.064 11.87 11.86 23.92 17.17 35.95-76.6 21.58-146.2 83.53-180.5 142.3C64.79 360.4 44.17 310.7 44.17 256.3zm81.81 167.1c22.13-45.23 82.18-103.6 167.6-132.8 29.74 77.28 42.04 142.1 45.19 160.6-68.11 29.01-150 21.05-212.8-27.88zm248.4 8.489c-2.171-12.89-13.45-74.9-41.15-151 66.38-10.63 124.7 6.768 131.9 9.055-9.442 58.94-43.27 109.8-90.79 141.1z\"],\n    \"dribbble-square\": [448, 512, [], \"f397\", \"M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z\"],\n    \"dropbox\": [528, 512, [], \"f16b\", \"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"],\n    \"drupal\": [448, 512, [], \"f1a9\", \"M303.1 108.1C268.2 72.46 234.2 38.35 224 0c-9.957 38.35-44.25 72.46-80.02 108.1C90.47 161.7 29.72 222.4 29.72 313.4c-2.337 107.3 82.75 196.2 190.1 198.5S415.9 429.2 418.3 321.9q.091-4.231 0-8.464C418.3 222.4 357.5 161.7 303.1 108.1zm-174.3 223a130.3 130.3 0 0 0 -15.21 24.15 4.978 4.978 0 0 1 -3.319 2.766h-1.659c-4.333 0-9.219-8.481-9.219-8.481h0c-1.29-2.028-2.489-4.149-3.687-6.361l-.83-1.752c-11.25-25.72-1.475-62.32-1.475-62.32h0a160.6 160.6 0 0 1 23.23-49.87A290.8 290.8 0 0 1 138.5 201.6l9.219 9.219 43.51 44.43a4.979 4.979 0 0 1 0 6.638L145.8 312.3h0zm96.61 127.3a67.2 67.2 0 0 1 -49.78-111.9c14.2-16.87 31.53-33.46 50.33-55.31 22.31 23.78 36.88 40.1 51.16 57.99a28.41 28.41 0 0 1 2.95 4.425 65.9 65.9 0 0 1 11.98 37.98 66.65 66.65 0 0 1 -66.47 66.84zM352.4 351.6h0a7.743 7.743 0 0 1 -6.176 5.347H344.9a11.25 11.25 0 0 1 -6.269-5.07h0a348.2 348.2 0 0 0 -39.46-48.95L281.4 284.5 222.3 223.2a497.9 497.9 0 0 1 -35.4-36.32 12.03 12.03 0 0 0 -.922-1.382 35.4 35.4 0 0 1 -4.7-9.219V174.5a31.35 31.35 0 0 1 9.218-27.66c11.43-11.43 22.95-22.95 33.83-34.94 11.98 13.27 24.8 26 37.43 38.63h0a530.1 530.1 0 0 1 69.6 79.1 147.5 147.5 0 0 1 27.01 83.8A134.1 134.1 0 0 1 352.4 351.6z\"],\n    \"dyalog\": [416, 512, [], \"f399\", \"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"],\n    \"earlybirds\": [480, 512, [], \"f39a\", \"M313.2 47.5c1.2-13 21.3-14 36.6-8.7 .9 .3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2 .3 .9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2 .8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7 .9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2 .8-10.5-25.4 21.5-42.6 66.8-73.4 .7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1 .3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1 .6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7 .6 11.6 .8 12.7 2.6 .3 .5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"],\n    \"ebay\": [640, 512, [], \"f4f4\", \"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7 .4-42.4 .9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6 .3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\"],\n    \"edge\": [512, 512, [], \"f282\", \"M481.9 134.5C440.9 54.18 352.3 8 255.9 8 137.1 8 37.51 91.68 13.47 203.7c26-46.49 86.22-79.14 149.5-79.14 79.27 0 121.1 48.93 122.3 50.18 22 23.8 33 50.39 33 83.1 0 10.4-5.31 25.82-15.11 38.57-1.57 2-6.39 4.84-6.39 11 0 5.06 3.29 9.92 9.14 14 27.86 19.37 80.37 16.81 80.51 16.81A115.4 115.4 0 0 0 444.9 322a118.9 118.9 0 0 0 58.95-102.4C504.4 176.1 488.4 147.3 481.9 134.5zM212.8 475.7a154.9 154.9 0 0 1 -46.64-45c-32.94-47.42-34.24-95.6-20.1-136A155.5 155.5 0 0 1 203 215.8c59-45.2 94.84-5.65 99.06-1a80 80 0 0 0 -4.89-10.14c-9.24-15.93-24-36.41-56.56-53.51-33.72-17.69-70.59-18.59-77.64-18.59-38.71 0-77.9 13-107.5 35.69C35.68 183.3 12.77 208.7 8.6 243c-1.08 12.31-2.75 62.8 23 118.3a248 248 0 0 0 248.3 141.6C241.8 496.3 214.1 476.2 212.8 475.7zm250.7-98.33a7.76 7.76 0 0 0 -7.92-.23 181.7 181.7 0 0 1 -20.41 9.12 197.5 197.5 0 0 1 -69.55 12.52c-91.67 0-171.5-63.06-171.5-144A61.12 61.12 0 0 1 200.6 228 168.7 168.7 0 0 0 161.9 278c-14.92 29.37-33 88.13 13.33 151.7 6.51 8.91 23 30 56 47.67 23.57 12.65 49 19.61 71.7 19.61 35.14 0 115.4-33.44 163-108.9A7.75 7.75 0 0 0 463.5 377.3z\"],\n    \"edge-legacy\": [512, 512, [], \"e078\", \"M25.71 228.2l.35-.48c0 .16 0 .32-.07 .48zm460.6 15.51c0-44-7.76-84.46-28.81-122.4C416.5 47.88 343.9 8 258.9 8 119 7.72 40.62 113.2 26.06 227.7c42.42-61.31 117.1-121.4 220.4-125 0 0 109.7 0 99.42 105H170c6.37-37.39 18.55-59 34.34-78.93-75.05 34.9-121.8 96.1-120.8 188.3 .83 71.45 50.13 144.8 120.8 172 83.35 31.84 192.8 7.2 240.1-21.33V363.3C363.6 419.8 173.6 424.2 172.2 295.7H486.3V243.7z\"],\n    \"elementor\": [448, 512, [], \"f430\", \"M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z\"],\n    \"ello\": [496, 512, [], \"f5f1\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S384.1 8 248 8zm143.8 285.2C375.3 358.5 315.8 404.8 248 404.8s-127.3-46.29-143.8-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.6 90.11s102.5-37.2 116.6-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\"],\n    \"ember\": [640, 512, [], \"f423\", \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6 .5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7 .8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5 .3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7 .3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"],\n    \"empire\": [496, 512, [], \"f1d1\", \"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5 .8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"],\n    \"envira\": [448, 512, [], \"f299\", \"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"],\n    \"erlang\": [640, 512, [], \"f39d\", \"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9 .1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7 .5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\"],\n    \"ethereum\": [320, 512, [], \"f42e\", \"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"],\n    \"etsy\": [384, 512, [], \"f2d7\", \"M384 348c-1.75 10.75-13.75 110-15.5 132-117.9-4.299-219.9-4.743-368.5 0v-25.5c45.46-8.948 60.63-8.019 61-35.25 1.793-72.32 3.524-244.1 0-322-1.029-28.46-12.13-26.76-61-36v-25.5c73.89 2.358 255.9 8.551 362.1-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.9 115.7 313.2 68 277.3 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.25h25.75c-4.407 101.4-3.91 61.83-1.75 160.3H257c-9.155-40.09-9.065-61.04-39.5-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.64 0 66.56-24.1 98.75-99.75H384z\"],\n    \"evernote\": [384, 512, [], \"f839\", \"M120.8 132.2c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56 .22-.74 0-.37-.37L123.8 46.45c.38-.37 .6-.22 .38 .37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.5v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.9-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.8 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.1 8.91 238.5 7.8 238.5C362.1 485.5 267.1 480 267.1 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.8c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\"],\n    \"expeditedssl\": [496, 512, [], \"f23e\", \"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"],\n    \"facebook\": [512, 512, [62000], \"f09a\", \"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.8 90.69 226.4 209.3 245V327.7h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.3 482.4 504 379.8 504 256z\"],\n    \"facebook-f\": [320, 512, [], \"f39e\", \"M279.1 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.4 0 225.4 0c-73.22 0-121.1 44.38-121.1 124.7v70.62H22.89V288h81.39v224h100.2V288z\"],\n    \"facebook-messenger\": [512, 512, [], \"f39f\", \"M256.5 8C116.5 8 8 110.3 8 248.6c0 72.3 29.71 134.8 78.07 177.9 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.3c52.91-23.3 53.59-25.14 62.56-22.7C337.9 521.8 504 423.7 504 248.6 504 110.3 396.6 8 256.5 8zm149.2 185.1l-73 115.6a37.37 37.37 0 0 1 -53.91 9.93l-58.08-43.47a15 15 0 0 0 -18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.6a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z\"],\n    \"facebook-square\": [448, 512, [], \"f082\", \"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.3V327.7h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0 -48-48z\"],\n    \"fantasy-flight-games\": [512, 512, [], \"f6dc\", \"M256 32.86L32.86 256 256 479.1 479.1 256 256 32.86zM88.34 255.8c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.8-18.69 24.63 18.4 62.06 58.9 62.15 59 .68 .74 1.07 2.86 .58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43 .12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99zm234.8 101.6c-35.49 35.43-78.09 38.14-106.1 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64 .14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29 .26-.26 .65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\"],\n    \"fedex\": [640, 512, [], \"f797\", \"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\"],\n    \"fedora\": [448, 512, [], \"f798\", \"M.0413 255.8C.1219 132.2 100.3 32 224 32C347.7 32 448 132.3 448 256C448 379.7 347.8 479.9 224.1 480H50.93C22.84 480 .0832 457.3 .0416 429.2H0V255.8H.0413zM342.6 192.7C342.6 153 307 124.2 269.4 124.2C234.5 124.2 203.6 150.5 199.3 184.1C199.1 187.9 198.9 189.1 198.9 192.6C198.8 213.7 198.9 235.4 198.1 257C199 283.1 199.1 309.1 198.1 333.6C198.1 360.7 178.7 379.1 153.4 379.1C128.1 379.1 107.6 358.9 107.6 333.6C108.1 305.9 130.2 288.3 156.1 287.5H156.3L182.6 287.3V250L156.3 250.2C109.2 249.8 71.72 286.7 70.36 333.6C70.36 379.2 107.9 416.5 153.4 416.5C196.4 416.5 232.1 382.9 236 340.9L236.2 287.4L268.8 287.1C294.1 287.3 293.8 249.3 268.6 249.8L236.2 250.1C236.2 243.7 236.3 237.3 236.3 230.9C236.4 218.2 236.4 205.5 236.2 192.7C236.3 176.2 252 161.5 269.4 161.5C286.9 161.5 305.3 170.2 305.3 192.7C305.3 195.9 305.2 197.8 305 199C303.1 209.5 310.2 219.4 320.7 220.9C331.3 222.4 340.9 214.8 341.9 204.3C342.5 200.1 342.6 196.4 342.6 192.7H342.6z\"],\n    \"figma\": [384, 512, [], \"f799\", \"M14 95.79C14 42.89 56.89 0 109.8 0H274.2C327.1 0 369.1 42.89 369.1 95.79C369.1 129.3 352.8 158.8 326.7 175.9C352.8 193 369.1 222.5 369.1 256C369.1 308.9 327.1 351.8 274.2 351.8H272.1C247.3 351.8 224.7 342.4 207.7 326.9V415.2C207.7 468.8 163.7 512 110.3 512C57.54 512 14 469.2 14 416.2C14 382.7 31.19 353.2 57.24 336.1C31.19 318.1 14 289.5 14 256C14 222.5 31.2 193 57.24 175.9C31.2 158.8 14 129.3 14 95.79zM176.3 191.6H109.8C74.22 191.6 45.38 220.4 45.38 256C45.38 291.4 73.99 320.2 109.4 320.4C109.5 320.4 109.7 320.4 109.8 320.4H176.3V191.6zM207.7 256C207.7 291.6 236.5 320.4 272.1 320.4H274.2C309.7 320.4 338.6 291.6 338.6 256C338.6 220.4 309.7 191.6 274.2 191.6H272.1C236.5 191.6 207.7 220.4 207.7 256zM109.8 351.8C109.7 351.8 109.5 351.8 109.4 351.8C73.99 352 45.38 380.8 45.38 416.2C45.38 451.7 74.6 480.6 110.3 480.6C146.6 480.6 176.3 451.2 176.3 415.2V351.8H109.8zM109.8 31.38C74.22 31.38 45.38 60.22 45.38 95.79C45.38 131.4 74.22 160.2 109.8 160.2H176.3V31.38H109.8zM207.7 160.2H274.2C309.7 160.2 338.6 131.4 338.6 95.79C338.6 60.22 309.7 31.38 274.2 31.38H207.7V160.2z\"],\n    \"firefox\": [512, 512, [], \"f269\", \"M503.5 241.5c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.9 245.9 0 0 0 -7.32-41.15c0-.12 0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27 8.27 0 0 0 -.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48 0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07 18.07 0 0 0 -1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63 15.63 0 0 0 -1.2-1.8L463.2 119a15.63 15.63 0 0 0 -1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.8 248.8 0 0 0 -23.51-26.64A186.8 186.8 0 0 0 412 62.46c-4-3.48-8.16-6.72-12.48-9.84a162.5 162.5 0 0 0 -24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254 254 0 0 0 -55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.4 236.4 0 0 0 -38-4H255.1a234.6 234.6 0 0 0 -45.48 5c-33.59 7.08-63.23 21.24-82.91 39-1.08 1-1.92 1.68-2.4 2.16l-.48 .48H124l-.12 .12 .12-.12a.12 .12 0 0 0 .12-.12l-.12 .12a.42 .42 0 0 1 .24-.12c14.64-8.76 34.92-16 49.44-19.56l5.88-1.44c.36-.12 .84-.12 1.2-.24 1.68-.36 3.36-.72 5.16-1.08 .24 0 .6-.12 .84-.12C250.9 20.94 319.3 40.14 367 85.61a171.5 171.5 0 0 1 26.88 32.76c30.36 49.2 27.48 111.1 3.84 147.6-34.44 53-111.3 71.27-159 24.84a84.19 84.19 0 0 1 -25.56-59 74.05 74.05 0 0 1 6.24-31c1.68-3.84 13.08-25.67 18.24-24.59-13.08-2.76-37.55 2.64-54.71 28.19-15.36 22.92-14.52 58.2-5 83.28a132.9 132.9 0 0 1 -12.12-39.24c-12.24-82.55 43.31-153 94.31-170.5-27.48-24-96.47-22.31-147.7 15.36-29.88 22-51.23 53.16-62.51 90.36 1.68-20.88 9.6-52.08 25.8-83.88-17.16 8.88-39 37-49.8 62.88-15.6 37.43-21 82.19-16.08 124.8 .36 3.24 .72 6.36 1.08 9.6 19.92 117.1 122 206.4 244.8 206.4C392.8 503.4 504 392.2 504 255 503.9 250.5 503.8 245.9 503.5 241.5z\"],\n    \"firefox-browser\": [512, 512, [], \"e007\", \"M130.2 127.5C130.4 127.6 130.3 127.6 130.2 127.5V127.5zM481.6 172.9C471 147.4 449.6 119.9 432.7 111.2C446.4 138.1 454.4 165 457.4 185.2C457.4 185.3 457.4 185.4 457.5 185.6C429.9 116.8 383.1 89.11 344.9 28.75C329.9 5.058 333.1 3.518 331.8 4.088L331.7 4.158C284.1 30.11 256.4 82.53 249.1 126.9C232.5 127.8 216.2 131.9 201.2 139C199.8 139.6 198.7 140.7 198.1 142C197.4 143.4 197.2 144.9 197.5 146.3C197.7 147.2 198.1 147.1 198.6 148.6C199.1 149.3 199.8 149.9 200.5 150.3C201.3 150.7 202.1 150.1 202.1 151.1C203.8 151.1 204.7 151 205.5 150.8L206 150.6C221.5 143.3 238.4 139.4 255.5 139.2C318.4 138.7 352.7 183.3 363.2 201.5C350.2 192.4 326.8 183.3 304.3 187.2C392.1 231.1 368.5 381.8 246.1 376.4C187.5 373.8 149.9 325.5 146.4 285.6C146.4 285.6 157.7 243.7 227 243.7C234.5 243.7 255.1 222.8 256.4 216.7C256.3 214.7 213.8 197.8 197.3 181.5C188.4 172.8 184.2 168.6 180.5 165.5C178.5 163.8 176.4 162.2 174.2 160.7C168.6 141.2 168.4 120.6 173.5 101.1C148.4 112.5 128.1 130.5 114.8 146.4H114.7C105 134.2 105.7 93.78 106.3 85.35C106.1 84.82 99.02 89.02 98.1 89.66C89.53 95.71 81.55 102.6 74.26 110.1C57.97 126.7 30.13 160.2 18.76 211.3C14.22 231.7 12 255.7 12 263.6C12 398.3 121.2 507.5 255.9 507.5C376.6 507.5 478.9 420.3 496.4 304.9C507.9 228.2 481.6 173.8 481.6 172.9z\"],\n    \"first-order\": [448, 512, [], \"f2b0\", \"M12.9 229.2c.1-.1 .2-.3 .3-.4 0 .1 0 .3-.1 .4h-.2zM224 96.6c-7.1 0-14.6 .6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"],\n    \"first-order-alt\": [496, 512, [], \"f50a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S384.1 8 248 8zm0 488.2C115.3 496.2 7.79 388.7 7.79 256S115.3 15.79 248 15.79 488.2 123.3 488.2 256 380.7 496.2 248 496.2zm0-459.9C126.7 36.29 28.29 134.7 28.29 256S126.7 475.7 248 475.7 467.7 377.3 467.7 256 369.3 36.29 248 36.29zm0 431.2c-116.8 0-211.5-94.69-211.5-211.5S131.2 44.49 248 44.49 459.5 139.2 459.5 256 364.8 467.5 248 467.5zm186.2-162.1a191.6 191.6 0 0 1 -20.13 48.69l-74.13-35.88 61.48 54.82a193.5 193.5 0 0 1 -37.2 37.29l-54.8-61.57 35.88 74.27a190.9 190.9 0 0 1 -48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.4 191.4 0 0 1 -48.65-20.2l35.93-74.34-54.87 61.64a193.9 193.9 0 0 1 -37.22-37.28l61.59-54.9-74.26 35.93a191.6 191.6 0 0 1 -20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.7 191.7 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.9 193.9 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.5 191.5 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71 .62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.1 193.1 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.5 191.5 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"],\n    \"firstdraft\": [384, 512, [], \"f3a1\", \"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"],\n    \"flickr\": [448, 512, [], \"f16e\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"],\n    \"flipboard\": [448, 512, [], \"f44d\", \"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"],\n    \"fly\": [384, 512, [], \"f417\", \"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9 .3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3 .1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"],\n    \"font-awesome\": [448, 512, [62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M448 48V384C385 407 366 416 329 416C266 416 242 384 179 384C159 384 143 388 128 392V328C143 324 159 320 179 320C242 320 266 352 329 352C349 352 364 349 384 343V135C364 141 349 144 329 144C266 144 242 112 179 112C128 112 104 133 64 141V448C64 466 50 480 32 480S0 466 0 448V64C0 46 14 32 32 32S64 46 64 64V77C104 69 128 48 179 48C242 48 266 80 329 80C366 80 385 71 448 48z\"],\n    \"fonticons\": [448, 512, [], \"f280\", \"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\"],\n    \"fonticons-fi\": [384, 512, [], \"f3a2\", \"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"],\n    \"fort-awesome\": [512, 512, [], \"f286\", \"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"],\n    \"fort-awesome-alt\": [512, 512, [], \"f3a3\", \"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1 .7 .1 1.3 .1 2 .1 1.3 .1 2.7 .2 4 0 .8 .1 1.5 .1 2.3 0 1.3 .1 2.5 .2 3.7 .1 .8 .1 1.6 .2 2.4 .1 1.1 .2 2.3 .3 3.5 0 .8 .1 1.6 .2 2.4 .1 1.2 .3 2.4 .4 3.6 .1 .8 .2 1.5 .3 2.3 .1 1.3 .3 2.6 .5 3.9 .1 .6 .2 1.3 .3 1.9l.9 5.7c.1 .6 .2 1.1 .3 1.7 .3 1.3 .5 2.7 .8 4 .2 .8 .3 1.6 .5 2.4 .2 1 .5 2.1 .7 3.2 .2 .9 .4 1.7 .6 2.6 .2 1 .4 2 .7 3 .2 .9 .5 1.8 .7 2.7 .3 1 .5 1.9 .8 2.9 .3 .9 .5 1.8 .8 2.7 .2 .9 .5 1.9 .8 2.8s.5 1.8 .8 2.7c.3 1 .6 1.9 .9 2.8 .6 1.6 1.1 3.3 1.7 4.9 .4 1 .7 1.9 1 2.8 .3 1 .7 2 1.1 3 .3 .8 .6 1.5 .9 2.3l1.2 3c.3 .7 .6 1.5 .9 2.2 .4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3 .7 .6 1.3 .9 2 .5 1 1 2.1 1.5 3.1 .2 .6 .5 1.1 .8 1.7 .6 1.1 1.1 2.2 1.7 3.3 .1 .2 .2 .3 .3 .5 2.2 4.1 4.4 8.2 6.8 12.2 .2 .4 .5 .8 .7 1.2 .7 1.1 1.3 2.2 2 3.3 .3 .5 .6 .9 .9 1.4 .6 1.1 1.3 2.1 2 3.2 .3 .5 .6 .9 .9 1.4 .7 1.1 1.4 2.1 2.1 3.2 .2 .4 .5 .8 .8 1.2 .7 1.1 1.5 2.2 2.3 3.3 .2 .2 .3 .5 .5 .7 37.5 51.7 94.4 88.5 160 99.4 .9 .1 1.7 .3 2.6 .4 1 .2 2.1 .4 3.1 .5s1.9 .3 2.8 .4c1 .2 2 .3 3 .4 .9 .1 1.9 .2 2.9 .3s1.9 .2 2.9 .3 2.1 .2 3.1 .3c.9 .1 1.8 .1 2.7 .2 1.1 .1 2.3 .1 3.4 .2 .8 0 1.7 .1 2.5 .1 1.3 0 2.6 .1 3.9 .1 .7 .1 1.4 .1 2.1 .1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1 .8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2 .9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5 .9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4 .2-.2 .3-.5 .5-.7 .8-1.1 1.5-2.2 2.3-3.3 .2-.4 .5-.8 .8-1.2 .7-1.1 1.4-2.1 2.1-3.2 .3-.5 .6-.9 .9-1.4 .6-1.1 1.3-2.1 2-3.2 .3-.5 .6-.9 .9-1.4 .7-1.1 1.3-2.2 2-3.3 .2-.4 .5-.8 .7-1.2 2.4-4 4.6-8.1 6.8-12.2 .1-.2 .2-.3 .3-.5 .6-1.1 1.1-2.2 1.7-3.3 .2-.6 .5-1.1 .8-1.7 .5-1 1-2.1 1.5-3.1 .3-.7 .6-1.3 .9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7 .6-1.5 .9-2.2l1.2-3c.3-.8 .6-1.5 .9-2.3 .4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9 .3-1 .6-1.9 .9-2.8s.5-1.8 .8-2.7c.2-.9 .5-1.9 .8-2.8s.6-1.8 .8-2.7c.3-1 .5-1.9 .8-2.9 .2-.9 .5-1.8 .7-2.7 .2-1 .5-2 .7-3 .2-.9 .4-1.7 .6-2.6 .2-1 .5-2.1 .7-3.2 .2-.8 .3-1.6 .5-2.4 .3-1.3 .6-2.7 .8-4 .1-.6 .2-1.1 .3-1.7l.9-5.7c.1-.6 .2-1.3 .3-1.9 .1-1.3 .3-2.6 .5-3.9 .1-.8 .2-1.5 .3-2.3 .1-1.2 .3-2.4 .4-3.6 0-.8 .1-1.6 .2-2.4 .1-1.1 .2-2.3 .3-3.5 .1-.8 .1-1.6 .2-2.4 .1 1.7 .1 .5 .2-.7 0-.8 .1-1.5 .1-2.3 .1-1.3 .2-2.7 .2-4 .1-.7 .1-1.3 .1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\"],\n    \"forumbee\": [448, 512, [], \"f211\", \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"],\n    \"foursquare\": [368, 512, [], \"f180\", \"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9 .9-1.8 .6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"],\n    \"free-code-camp\": [576, 512, [], \"f2c5\", \"M97.22 96.21c10.36-10.65 16-17.12 16-21.9 0-2.76-1.92-5.51-3.83-7.42A14.81 14.81 0 0 0 101 64.05c-8.48 0-20.92 8.79-35.84 25.69C23.68 137 2.51 182.8 3.37 250.3s17.47 117 54.06 161.9C76.22 435.9 90.62 448 100.9 448a13.55 13.55 0 0 0 8.37-3.84c1.91-2.76 3.81-5.63 3.81-8.38 0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25 188.8 54 137.8 97.22 96.21zM239.5 420.1c.58 .37 .91 .55 .91 .55zm93.79 .55 .17-.13C333.2 420.6 333.2 420.7 333.3 420.6zm3.13-158.2c-16.24-4.15 50.41-82.89-68.05-177.2 0 0 15.54 49.38-62.83 159.6-74.27 104.3 23.46 168.7 34 175.2-6.73-4.35-47.4-35.7 9.55-128.6 11-18.3 25.53-34.87 43.5-72.16 0 0 15.91 22.45 7.6 71.13C287.7 364 354 342.9 355 343.9c22.75 26.78-17.72 73.51-21.58 76.55 5.49-3.65 117.7-78 33-188.1C360.4 238.4 352.6 266.6 336.4 262.4zM510.9 89.69C496 72.79 483.5 64 475 64a14.81 14.81 0 0 0 -8.39 2.84c-1.91 1.91-3.83 4.66-3.83 7.42 0 4.78 5.6 11.26 16 21.9 43.23 41.61 65 92.59 64.82 154.1-.16 68-23 122.6-67.48 165-9.34 8.35-13.18 14.92-13.2 20.55 0 2.75 1.9 5.62 3.81 8.38A13.61 13.61 0 0 0 475.1 448c10.28 0 24.68-12.13 43.47-35.79 36.59-44.85 53.14-94.38 54.06-161.9S552.3 137 510.9 89.69z\"],\n    \"freebsd\": [448, 512, [], \"f3a4\", \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4 .9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"],\n    \"fulcrum\": [320, 512, [], \"f50b\", \"M95.75 164.1l-35.38 43.55L25 164.1l35.38-43.55zM144.2 0l-20.54 198.2L72.72 256l51 57.82L144.2 512V300.9L103.2 256l41.08-44.89zm79.67 164.1l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.8 247 256l-51-57.82L175.4 0z\"],\n    \"galactic-republic\": [496, 512, [], \"f50c\", \"M248 504C111.3 504 0 392.8 0 256S111.3 8 248 8s248 111.3 248 248-111.3 248-248 248zm0-479.5C120.4 24.53 16.53 128.4 16.53 256S120.4 487.5 248 487.5 479.5 383.6 479.5 256 375.6 24.53 248 24.53zm27.62 21.81v24.62a185.9 185.9 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.1-41.8zm-55.37 .07c-37.64 4.94-72.16 19.8-100.9 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.87 77.87 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.2 30.72l-17.36 17.36a186.3 186.3 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101zm-335.5 .13c-22.06 28.72-36.91 63.26-41.85 100.9h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.7c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.1h-24.62zM136.7 406.4l-17.36 17.36c28.73 22.09 63.3 36.98 100.1 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.5 .05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.1-41.85l-17.31-17.39h-.08z\"],\n    \"galactic-senate\": [512, 512, [], \"f50d\", \"M249.9 33.48v26.07C236.3 80.17 226 168.1 225.4 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32 .75-10.53 2.19-15.65 .65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.8-10.91-194.7-24.49-215.4V33.48h-12.28zm-26.34 147.8c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68 .18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51 .73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47 .96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.5 147.5 0 0 0 -27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.8-1.45-156.4 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.3 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87 .01 .01-.01 .04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19 .02 16.37-1.07 24.04-3.21 .01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43 .39 95.49 20.26 108 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.4-29.17-156.4-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.8 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19 .07-21.6 .36-30.5 1.66 .43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28 .94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76 .42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09 .02-.17 .04-.27 .05-.05 .01-.11 .04-.16 .05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"],\n    \"get-pocket\": [448, 512, [], \"f265\", \"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"],\n    \"gg\": [512, 512, [], \"f260\", \"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"],\n    \"gg-circle\": [512, 512, [], \"f261\", \"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"],\n    \"git\": [512, 512, [], \"f1d3\", \"M216.3 158.4H137C97 147.9 6.51 150.6 6.51 233.2c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.6 0 393.4 0 411.6c0 32.11 28.05 50.82 101.6 50.82 70.75 0 111.8-26.42 111.8-73.18 0-58.66-45.16-56.5-151.6-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.9 32.1-104.9 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.6c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.5v-32.1c26.75-3.66 27.24-2 27.24-11V203.6c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.7c0 6.51 .4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.3c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.5c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.8c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\"],\n    \"git-alt\": [448, 512, [], \"f841\", \"M439.5 236.1L244 40.45a28.87 28.87 0 0 0 -40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.2 199v121.8c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1 -48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.6 101 8.45 235.1a28.86 28.86 0 0 0 0 40.81l195.6 195.6a28.86 28.86 0 0 0 40.8 0l194.7-194.7a28.86 28.86 0 0 0 0-40.81z\"],\n    \"git-square\": [448, 512, [], \"f1d2\", \"M100.6 334.2c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52 .01-5.09 3.29-9.4 6.6-13.46zm27.95-116.6c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47 .75-44.47zM448 80v352a48 48 0 0 1 -48 48H48a48 48 0 0 1 -48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.6 127 243.9 127c-14.48 0-22.88 7.84-22.88 22.31zM199.2 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.2 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.4 81.53 385 127.5 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.8l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.5h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z\"],\n    \"github\": [496, 512, [], \"f09b\", \"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"],\n    \"github-alt\": [480, 512, [], \"f113\", \"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"],\n    \"github-square\": [448, 512, [], \"f092\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4 .2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9 .2 36.5 .2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9 .4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7 .6 3.9 1.9 .3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2 .2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7 .9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2 .4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8 .9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1 .9-1.1 2.8-.9 4.3 .6 1.3 1.3 1.8 3.3 .9 4.1zm-9.1-9.1c-.9 .6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9 .9-2.4 .4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5 .9-.9 2.4-.4 3.5 .6 1.1 1.3 1.3 2.8 .4 3.5zm-6.7-7.4c-.4 .9-1.7 1.1-2.8 .4-1.3-.6-1.9-1.7-1.5-2.6 .4-.6 1.5-.9 2.8-.4 1.3 .7 1.9 1.8 1.5 2.6z\"],\n    \"gitkraken\": [592, 512, [], \"f3a6\", \"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8 .4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"],\n    \"gitlab\": [512, 512, [], \"f296\", \"M510.5 284.5l-27.26-83.96c.012 .038 .016 .077 .028 .115-.013-.044-.021-.088-.033-.132v-.01L429.1 33.87a21.33 21.33 0 0 0 -20.44-14.6A21.04 21.04 0 0 0 388.5 34L337.1 192.2H175L123.5 33.99A21.03 21.03 0 0 0 103.3 19.27h-.113A21.47 21.47 0 0 0 82.86 34L28.89 200.5l-.008 .021v0c-.013 .042-.019 .084-.033 .127 .012-.038 .017-.077 .029-.115L1.514 284.5a30.6 30.6 0 0 0 11.12 34.28L248.9 490.4c.035 .026 .074 .041 .109 .067 .1 .072 .2 .146 .3 .214-.1-.065-.187-.136-.282-.2l0 0c.015 .012 .033 .02 .05 .031s.027 .015 .041 .024l.006 0a11.99 11.99 0 0 0 1.137 .7c.054 .03 .1 .068 .157 .1l0 0c.033 .016 .064 .038 .1 .054s.053 .02 .077 .032 .038 .015 .056 .023c.044 .021 .092 .034 .136 .057 .205 .1 .421 .178 .633 .264 .2 .082 .389 .177 .592 .248l.025 .011c.034 .012 .064 .028 .1 .04s.083 .032 .125 .046l.05 .012c.053 .016 .11 .024 .163 .039 .019 .006 .042 .009 .063 .015 .284 .086 .579 .148 .872 .213 .115 .026 .225 .062 .341 .083 .017 0 .032 .009 .05 .012 .038 .008 .073 .021 .112 .027 .062 .011 .122 .031 .186 .04 .049 .007 .1 0 .151 .012h.033a11.92 11.92 0 0 0 1.7 .136h.019a11.97 11.97 0 0 0 1.7-.136h.033c.05-.008 .1 0 .153-.012s.124-.029 .187-.04c.038-.006 .073-.019 .11-.027 .017 0 .032-.009 .049-.012 .118-.023 .231-.059 .349-.084 .288-.064 .578-.126 .861-.21 .019-.006 .039-.008 .059-.014 .055-.017 .113-.024 .169-.041 .016-.006 .035-.007 .051-.012 .044-.013 .086-.032 .129-.047s.063-.028 .1-.041l.026-.01c.214-.076 .417-.175 .627-.261s.394-.154 .584-.245c.047-.023 .1-.036 .142-.059 .018-.009 .04-.015 .058-.024s.053-.02 .078-.033 .068-.04 .1-.056l0 0c.056-.028 .106-.069 .161-.1a12.34 12.34 0 0 0 1.132-.695c.029-.02 .062-.035 .092-.056 .008-.006 .017-.009 .024-.015 .035-.026 .076-.043 .11-.068l236.3-171.7A30.6 30.6 0 0 0 510.5 284.5zM408.8 49.48l46.34 142.7H362.5zm-305.6 0 46.43 142.7H56.95zM26.82 299.3a6.526 6.526 0 0 1 -2.361-7.308l20.34-62.42L193.8 420.6zm38.24-82.97h92.41L223.4 419.2zm183.4 273.8c-.047-.038-.092-.079-.138-.118-.009-.008-.018-.018-.028-.026-.091-.075-.18-.152-.268-.231-.172-.15-.341-.3-.5-.462 .014 .012 .029 .022 .043 .035l.055 .046a12.19 12.19 0 0 0 1.091 .929l.012 .011c.018 .013 .033 .03 .051 .045C248.7 490.3 248.6 490.2 248.5 490.1zm7.514-48.48L217.2 322.2 182.8 216.3H329.3zm7.935 48.11c-.091 .079-.178 .157-.27 .233l-.032 .028c-.047 .038-.091 .079-.136 .117-.1 .08-.209 .152-.313 .229 .018-.013 .033-.032 .053-.044l.009-.009a11.69 11.69 0 0 0 1.086-.926c.014-.013 .03-.024 .044-.036s.038-.03 .054-.047C264.3 489.4 264.1 489.6 263.9 489.7zm90.7-273.5h92.4l-18.91 24.23-139.5 178.7zm130.6 82.97L318.2 420.6 467.3 229.5l20.26 62.39A6.528 6.528 0 0 1 485.2 299.2z\"],\n    \"gitter\": [384, 512, [], \"f426\", \"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"],\n    \"glide\": [448, 512, [], \"f2a5\", \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8 .1 4.1-1.7 4.1-3.5z\"],\n    \"glide-g\": [448, 512, [], \"f2a6\", \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9 .1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"],\n    \"gofore\": [400, 512, [], \"f3a7\", \"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"],\n    \"golang\": [640, 512, [], \"e40f\", \"M400.1 194.8C389.2 197.6 380.2 199.1 371 202.4C363.7 204.3 356.3 206.3 347.8 208.5L347.2 208.6C343 209.8 342.6 209.9 338.7 205.4C334 200.1 330.6 196.7 324.1 193.5C304.4 183.9 285.4 186.7 267.7 198.2C246.5 211.9 235.6 232.2 235.9 257.4C236.2 282.4 253.3 302.9 277.1 306.3C299.1 309.1 316.9 301.7 330.9 285.8C333 283.2 334.9 280.5 337 277.5V277.5L337 277.5C337.8 276.5 338.5 275.4 339.3 274.2H279.2C272.7 274.2 271.1 270.2 273.3 264.9C277.3 255.2 284.8 239 289.2 230.9C290.1 229.1 292.3 225.1 296.1 225.1H397.2C401.7 211.7 409 198.2 418.8 185.4C441.5 155.5 468.1 139.9 506 133.4C537.8 127.8 567.7 130.9 594.9 149.3C619.5 166.1 634.7 188.9 638.8 218.8C644.1 260.9 631.9 295.1 602.1 324.4C582.4 345.3 557.2 358.4 528.2 364.3C522.6 365.3 517.1 365.8 511.7 366.3C508.8 366.5 506 366.8 503.2 367.1C474.9 366.5 449 358.4 427.2 339.7C411.9 326.4 401.3 310.1 396.1 291.2C392.4 298.5 388.1 305.6 382.1 312.3C360.5 341.9 331.2 360.3 294.2 365.2C263.6 369.3 235.3 363.4 210.3 344.7C187.3 327.2 174.2 304.2 170.8 275.5C166.7 241.5 176.7 210.1 197.2 184.2C219.4 155.2 248.7 136.8 284.5 130.3C313.8 124.1 341.8 128.4 367.1 145.6C383.6 156.5 395.4 171.4 403.2 189.5C405.1 192.3 403.8 193.9 400.1 194.8zM48.3 200.4C47.05 200.4 46.74 199.8 47.36 198.8L53.91 190.4C54.53 189.5 56.09 188.9 57.34 188.9H168.6C169.8 188.9 170.1 189.8 169.5 190.7L164.2 198.8C163.6 199.8 162 200.7 161.1 200.7L48.3 200.4zM1.246 229.1C0 229.1-.3116 228.4 .3116 227.5L6.855 219.1C7.479 218.2 9.037 217.5 10.28 217.5H152.4C153.6 217.5 154.2 218.5 153.9 219.4L151.4 226.9C151.1 228.1 149.9 228.8 148.6 228.8L1.246 229.1zM75.72 255.9C75.1 256.8 75.41 257.7 76.65 257.7L144.6 258C145.5 258 146.8 257.1 146.8 255.9L147.4 248.4C147.4 247.1 146.8 246.2 145.5 246.2H83.2C81.95 246.2 80.71 247.1 80.08 248.1L75.72 255.9zM577.2 237.9C577 235.3 576.9 233.1 576.5 230.9C570.9 200.1 542.5 182.6 512.9 189.5C483.9 196 465.2 214.4 458.4 243.7C452.8 268 464.6 292.6 487 302.6C504.2 310.1 521.3 309.2 537.8 300.7C562.4 287.1 575.8 268 577.4 241.2C577.3 240 577.3 238.9 577.2 237.9z\"],\n    \"goodreads\": [448, 512, [], \"f3a8\", \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8 .3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9 .4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2 .5-1 1.1-1.9 1.7-2.9 .2 .1 .4 .1 .6 .2 .3 3.8 .2 30.7 .1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"],\n    \"goodreads-g\": [384, 512, [], \"f3a9\", \"M42.6 403.3h2.8c12.7 0 25.5 0 38.2 .1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5 .1-5.8 .3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3 .6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3 .5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3 .1 332.2 .1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"],\n    \"google\": [488, 512, [], \"f1a0\", \"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"],\n    \"google-drive\": [512, 512, [], \"f3aa\", \"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"],\n    \"google-pay\": [640, 512, [], \"e079\", \"M105.7 215v41.25h57.1a49.66 49.66 0 0 1 -21.14 32.6c-9.54 6.55-21.72 10.28-36 10.28-27.6 0-50.93-18.91-59.3-44.22a65.61 65.61 0 0 1 0-41l0 0c8.37-25.46 31.7-44.37 59.3-44.37a56.43 56.43 0 0 1 40.51 16.08L176.5 155a101.2 101.2 0 0 0 -70.75-27.84 105.6 105.6 0 0 0 -94.38 59.11 107.6 107.6 0 0 0 0 96.18v.15a105.4 105.4 0 0 0 94.38 59c28.47 0 52.55-9.53 70-25.91 20-18.61 31.41-46.15 31.41-78.91A133.8 133.8 0 0 0 205.4 215zm389.4-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46 0-39.34 8.34-50.5 24.86l20.85 13.26q11.45-17 31.26-17a34.05 34.05 0 0 1 22.75 8.79A28.14 28.14 0 0 1 487.8 248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44 0-29.65 3.88-39.49 11.77s-14.82 18.31-14.82 31.56a39.74 39.74 0 0 0 13.94 31.27c9.25 8.34 21 12.51 34.79 12.51 16.29 0 29.21-7.3 39-21.89h1v17.72h22.61V250C510.3 233.4 505.3 220.3 495.1 211zM475.9 300.3a37.32 37.32 0 0 1 -26.57 11.16A28.61 28.61 0 0 1 431 305.2a19.41 19.41 0 0 1 -7.77-15.63c0-7 3.22-12.81 9.54-17.42s14.53-7 24.07-7C470 265 480.3 268 487.6 273.9 487.6 284.1 483.7 292.9 475.9 300.3zm-93.65-142A55.71 55.71 0 0 0 341.7 142H279.1V328.7H302.7V253.1h39c16 0 29.5-5.36 40.51-15.93 .88-.89 1.76-1.79 2.65-2.68A54.45 54.45 0 0 0 382.3 158.3zm-16.58 62.23a30.65 30.65 0 0 1 -23.34 9.68H302.7V165h39.63a32 32 0 0 1 22.6 9.23A33.18 33.18 0 0 1 365.7 220.5zM614.3 201 577.8 292.7h-.45L539.9 201H514.2L566 320.5l-29.35 64.32H561L640 201z\"],\n    \"google-play\": [512, 512, [], \"f3ab\", \"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"],\n    \"google-plus\": [512, 512, [], \"f2b3\", \"M256 8C119.1 8 8 119.1 8 256S119.1 504 256 504 504 392.9 504 256 392.9 8 256 8zM185.3 380a124 124 0 0 1 0-248c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1S142.3 334 185.3 334c32.6 0 64.9-19.1 70.1-53.3H185.3V238.1H302.2a109.2 109.2 0 0 1 1.9 20.7c0 70.8-47.5 121.2-118.8 121.2zM415.5 273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5z\"],\n    \"google-plus-g\": [640, 512, [], \"f0d5\", \"M386.1 228.5c1.834 9.692 3.143 19.38 3.143 31.96C389.2 370.2 315.6 448 204.8 448c-106.1 0-192-85.92-192-192s85.92-192 192-192c51.86 0 95.08 18.86 128.6 50.29l-52.13 50.03c-14.15-13.62-39.03-29.6-76.49-29.6-65.48 0-118.9 54.22-118.9 121.3 0 67.06 53.44 121.3 118.9 121.3 75.96 0 104.5-54.74 108.1-82.77H204.8v-66.01h181.3zm185.4 6.437V179.2h-56v55.73h-55.73v56h55.73v55.73h56v-55.73H627.2v-56h-55.73z\"],\n    \"google-plus-square\": [448, 512, [], \"f0d4\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z\"],\n    \"google-wallet\": [448, 512, [], \"f1ee\", \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"],\n    \"gratipay\": [496, 512, [], \"f184\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"],\n    \"grav\": [512, 512, [], \"f2d6\", \"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8 .8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1 .3-6.4 0-13-9.4-24.9 3.9-12.5 .3-22.4 .3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8 .1-.2 .3-.4 .4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7 .3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"],\n    \"gripfire\": [384, 512, [], \"f3ac\", \"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4 .4 3.3 .6 6.7 .6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"],\n    \"grunt\": [384, 512, [], \"f3ad\", \"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1 .7-7.5 2.2-12.8 4-16.6 .4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8 .6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6 .6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1 .4-4.7 .8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5 .9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3 .2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7 .3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7 .5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2 .8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6 .7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4 .1-6.6 .5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4 .3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6 .9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7 .2 .2 .4 .3 .4 .3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1 .4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5 .6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9 .7 .6 1.5 1.2 2.2 1.8l.5 .4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6 .9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3 .3-11.7 .7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2 .9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6 .9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2 .9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"],\n    \"guilded\": [448, 512, [], \"e07e\", \"M443.4 64H4.571c0 103.3 22.19 180.1 43.42 222.4C112 414.1 224 448 225.3 448a312.8 312.8 0 0 0 140.6-103.5c25.91-33.92 53.1-87.19 65.92-145.8H171.8c4.14 36.43 22.18 67.95 45.1 86.94h88.59c-17.01 28.21-48.19 54.4-80.46 69.48-31.23-13.26-69.09-46.54-96.55-98.36-26.73-53.83-27.09-105.9-27.09-105.9H437.6A625.9 625.9 0 0 0 443.4 64z\"],\n    \"gulp\": [256, 512, [], \"f3ae\", \"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7 .9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3 .2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5 .9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9 .1-1.8 .3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6 .8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5 .6 .2 1.1 .4 1.6 .7 2.6 1.8 1.6 4.5 .3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3 .5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4 .5 3.2 1.5 1.7 2.2 1.3 4.5 .4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9 .9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2 .4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3 .5-.4 .9-.6 .6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3 .8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7 .2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3 .9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3 .2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8 .1 26.3 .4l12.6-48.7L228.1 .6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1 .1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2 .8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2 .1-.3l.2-.7c-1.8 .6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7 .1 13.9-1.6 13.9-3.7z\"],\n    \"hacker-news\": [448, 512, [], \"f1d4\", \"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1 .2-.3 .3-.4 0 .1 0 .3-.1 .4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"],\n    \"hacker-news-square\": [448, 512, [], \"f3af\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1 .2-.3 .3-.4 0 .1 0 .3-.1 .4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"],\n    \"hackerrank\": [512, 512, [], \"f5f7\", \"M477.5 128C463 103.1 285.1 0 256.2 0S49.25 102.8 34.84 128s-14.49 230.8 0 256 192.4 128 221.3 128S463 409.1 477.5 384s14.51-231 .01-256zM316.1 414.2c-4 0-40.91-35.77-38-38.69 .87-.87 6.26-1.48 17.55-1.83 0-26.23 .59-68.59 .94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88 .23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11 .92-33.44 3-84-.15-212.7v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87 .87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.4h80.26c0-4.55 .39-34.74-1.2-83.64-.1-3.39 .95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.6 336 341.3 336 373.7c8.87 .35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\"],\n    \"hashnode\": [512, 512, [], \"e499\", \"M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z\"],\n    \"hips\": [640, 512, [], \"f452\", \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7 .9-2.7 2.7v279.2c0 1.9 .9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5 .4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4 .2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3 .7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8 .6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7 .1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2 .1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"],\n    \"hire-a-helper\": [512, 512, [], \"f3b0\", \"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4 .1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"],\n    \"hive\": [512, 512, [], \"e07f\", \"M260.4 254.9 131.5 33.1a2.208 2.208 0 0 0 -3.829 .009L.3 254.9A2.234 2.234 0 0 0 .3 257.1L129.1 478.9a2.208 2.208 0 0 0 3.83-.009L260.4 257.1A2.239 2.239 0 0 0 260.4 254.9zm39.08-25.71a2.19 2.19 0 0 0 1.9 1.111h66.51a2.226 2.226 0 0 0 1.9-3.341L259.1 33.11a2.187 2.187 0 0 0 -1.9-1.111H190.7a2.226 2.226 0 0 0 -1.9 3.341zM511.7 254.9 384.9 33.11A2.2 2.2 0 0 0 382.1 32h-66.6a2.226 2.226 0 0 0 -1.906 3.34L440.7 256 314.5 476.7a2.226 2.226 0 0 0 1.906 3.34h66.6a2.2 2.2 0 0 0 1.906-1.112L511.7 257.1A2.243 2.243 0 0 0 511.7 254.9zM366 284.9H299.5a2.187 2.187 0 0 0 -1.9 1.111l-108.8 190.6a2.226 2.226 0 0 0 1.9 3.341h66.51a2.187 2.187 0 0 0 1.9-1.111l108.8-190.6A2.226 2.226 0 0 0 366 284.9z\"],\n    \"hooli\": [640, 512, [], \"f427\", \"M144.5 352l38.3 .8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4 .8c36.5 12.5 69.9 14.2 94.7 7.2-19.9 .2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3 .1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\"],\n    \"hornbill\": [512, 512, [], \"f592\", \"M76.38 370.3a37.8 37.8 0 1 1 -32.07-32.42c-78.28-111.3 52-190.5 52-190.5-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49 .93 64.06 39.81 72.87a140.4 140.4 0 0 0 131.7 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.9-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0 -31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.4 140.4 0 0 1 207 132.7c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.6-54.06zm304.2 134.2a37.94 37.94 0 1 0 -53.84-28.7C403 126.1 344.9 99 251.3 100.3l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.4 140.4 0 0 1 130.5 88.76c39.1 9 105.1 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.4-81.16 49-194.6a37.45 37.45 0 0 0 19.31-3.5zM374.1 436.2c21.43-32.46 46.42-89.69 45.14-179.7l-19.52 .14c.08 2.06 .3 4.07 .3 6.15a140.3 140.3 0 0 1 -91.39 131.4c-8.85 38.95-31.44 106.7-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.3 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\"],\n    \"hotjar\": [448, 512, [], \"f3b1\", \"M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z\"],\n    \"houzz\": [448, 512, [], \"f27c\", \"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\"],\n    \"html5\": [384, 512, [], \"f13b\", \"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"],\n    \"hubspot\": [512, 512, [], \"f3b2\", \"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"],\n    \"ideal\": [576, 512, [], \"e013\", \"M125.6 165.5a49.07 49.07 0 1 0 49.06 49.06A49.08 49.08 0 0 0 125.6 165.5zM86.15 425.8h78.94V285.3H86.15zm151.5-211.6c0-20-10-22.53-18.74-22.53H204.8V237.5h14.05C228.6 237.5 237.6 234.7 237.6 214.2zm201.7 46V168.9h22.75V237.5h33.69C486.5 113.1 388.6 86.19 299.7 86.19H204.8V169h14c25.6 0 41.5 17.35 41.5 45.26 0 28.81-15.52 46-41.5 46h-14V425.9h94.83c144.6 0 194.9-67.16 196.7-165.6zm-109.8 0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51zm74.66 0-5.16-17.67H369.3l-5.18 17.67H340.5L368 168.9h32.35l27.53 91.34zM299.6 32H32V480H299.6c161.9 0 251-79.73 251-224.5C550.6 172 518 32 299.6 32zm0 426.9H53.07V53.07H299.6c142.1 0 229.9 64.61 229.9 202.4C529.5 389.6 448.5 458.9 299.6 458.9zm83.86-264.9L376 219.9H392.4l-7.52-25.81z\"],\n    \"imdb\": [448, 512, [], \"f2d8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.3 229.2H21c.1-.1 .2-.3 .3-.4zM97 319.8H64V192h33zm113.2 0h-28.7v-86.4l-11.6 86.4h-20.6l-12.2-84.5v84.5h-29V192h42.8c3.3 19.8 6 39.9 8.7 59.9l7.6-59.9h43zm11.4 0V192h24.6c17.6 0 44.7-1.6 49 20.9 1.7 7.6 1.4 16.3 1.4 24.4 0 88.5 11.1 82.6-75 82.5zm160.9-29.2c0 15.7-2.4 30.9-22.2 30.9-9 0-15.2-3-20.9-9.8l-1.9 8.1h-29.8V192h31.7v41.7c6-6.5 12-9.2 20.9-9.2 21.4 0 22.2 12.8 22.2 30.1zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2 .3 10.3-8.7 10.3-18.4zm85.5 26.1c0-5.4 1.1-12.7-6.2-12.7-6 0-4.9 8.9-4.9 12.7 0 .6-1.1 39.6 1.1 44.7 .8 1.6 2.2 2.4 3.8 2.4 7.8 0 6.2-9 6.2-14.4z\"],\n    \"instagram\": [448, 512, [], \"f16d\", \"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"],\n    \"instagram-square\": [448, 512, [], \"e055\", \"M224 202.7A53.34 53.34 0 1 0 277.4 256 53.38 53.38 0 0 0 224 202.7zm124.7-41a54 54 0 0 0 -30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31 6.43a54 54 0 0 0 -30.41 30.41c-8.28 21-6.43 71.05-6.43 94.33S91 329.3 99.32 350.3a54 54 0 0 0 30.41 30.41c21 8.29 71 6.43 94.31 6.43s73.24 1.93 94.3-6.43a54 54 0 0 0 30.41-30.41c8.35-21 6.43-71.05 6.43-94.33S357.1 182.7 348.8 161.7zM224 338a82 82 0 1 1 82-82A81.9 81.9 0 0 1 224 338zm85.38-148.3a19.14 19.14 0 1 1 19.13-19.14A19.1 19.1 0 0 1 309.4 189.7zM400 32H48A48 48 0 0 0 0 80V432a48 48 0 0 0 48 48H400a48 48 0 0 0 48-48V80A48 48 0 0 0 400 32zM382.9 322c-1.29 25.63-7.14 48.34-25.85 67s-41.4 24.63-67 25.85c-26.41 1.49-105.6 1.49-132 0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.6 0-132 1.29-25.63 7.07-48.34 25.85-67s41.47-24.56 67-25.78c26.41-1.49 105.6-1.49 132 0 25.63 1.29 48.33 7.15 67 25.85s24.63 41.42 25.85 67.05C384.4 216.4 384.4 295.6 382.9 322z\"],\n    \"instalod\": [512, 512, [], \"e081\", \"M153.4 480H387.1L502.6 275.8 204.2 333.2zM504.7 240.1 387.1 32H155.7L360.2 267.9zM124.4 48.81 7.274 256 123.2 461.2 225.6 165.6z\"],\n    \"intercom\": [448, 512, [], \"f7af\", \"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\"],\n    \"internet-explorer\": [512, 512, [], \"f26b\", \"M483 159.7c10.85-24.58 21.42-60.44 21.42-87.87 0-72.72-79.64-98.37-209.7-38.58-107.6-7.181-211.2 73.67-237.1 186.5 30.85-34.86 78.27-82.3 121.1-101.2C125.4 166.9 79.13 228 43.99 291.7 23.25 329.7 0 390.9 0 436.7c0 98.57 92.85 86.5 180.3 42.01 31.42 15.43 66.56 15.57 101.7 15.57 97.12 0 184.2-54.29 216.8-146H377.9c-52.51 88.59-196.8 52.1-196.8-47.44H509.9c6.407-43.58-1.655-95.71-26.85-141.2zM64.56 346.9c17.71 51.15 53.7 95.87 100.3 123.3-88.74 48.94-173.3 29.1-100.3-123.3zm115.1-108.9c2-55.15 50.28-94.87 103.1-94.87 53.42 0 101.1 39.72 103.1 94.87H180.5zm184.5-187.6c21.42-10.29 48.56-22 72.56-22 31.42 0 54.27 21.72 54.27 53.72 0 20-7.427 49.01-14.57 67.87-26.28-42.29-65.99-81.58-112.3-99.59z\"],\n    \"invision\": [448, 512, [], \"f7b0\", \"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9 .7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3 .1-14.3 .9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"],\n    \"ioxhost\": [640, 512, [], \"f208\", \"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"],\n    \"itch-io\": [512, 512, [], \"f83a\", \"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.7v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.6 32.4 325.8 32 256 32S91.14 33.1 71.92 34.77zm132.3 134.4c-22 38.4-77.9 38.71-99.85 .25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.1 17.73 269.1 80 18.67 302.1 18.12 379.8 0 31.65-32.27 21.32-232 17.75-269.1-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1 -51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.9 436.9 0 0 1 88.18 0C318.2 223 332.9 223 349.3 223c52.33 0 65.22 77.53 83.87 144.4 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.9 8.79-155.6 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.4 83.88-144.4zM256 270.8s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34 .16 23.33 .16 11.65 .54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\"],\n    \"itunes\": [448, 512, [], \"f3b4\", \"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1 .5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7 .9-127 2.6-133.7 .4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6 .4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"],\n    \"itunes-note\": [384, 512, [], \"f3b5\", \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2 .8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6 .2 344.5 1.1 326-1.8 338.5z\"],\n    \"java\": [384, 512, [], \"f4e4\", \"M277.7 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.8 0 242.8 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1 -2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0 -8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6 .7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.8 509.4 401 461.3 348 437.4zM124.4 396c-78.7 22 47.9 67.4 148.1 24.5a185.9 185.9 0 0 1 -28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.6 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1 -21.1-12.8z\"],\n    \"jedi-order\": [448, 512, [], \"f50e\", \"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"],\n    \"jenkins\": [512, 512, [], \"f3b6\", \"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8 .2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2 .7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8 .7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4 .7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4 .7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7 .3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2 .5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8 .7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1 .6-16.5zm-17.2-20c-16.8 .8-26-1.2-38.3-10.8 .2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3 .8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5 .7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2 .5-.4 .8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5 .4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9 .8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8 .6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1 .8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7 .5 0 1 0 1.4 .1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9 .9-36.6-17.1 11.9 .7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"],\n    \"jira\": [496, 512, [], \"f7b1\", \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\"],\n    \"joget\": [496, 512, [], \"f3b7\", \"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\"],\n    \"joomla\": [448, 512, [], \"f1aa\", \"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1 .6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6 .6 120.7 .6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"],\n    \"js\": [448, 512, [], \"f3b8\", \"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"],\n    \"js-square\": [448, 512, [], \"f3b9\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"],\n    \"jsfiddle\": [576, 512, [], \"f1cc\", \"M510.6 237.5c-4.727-2.621-5.664-5.748-6.381-10.78-2.352-16.49-3.539-33.62-9.097-49.1-35.9-99.96-153.1-143.4-246.8-91.65-27.37 15.25-48.97 36.37-65.49 63.9-3.184-1.508-5.458-2.71-7.824-3.686-30.1-12.42-59.05-10.12-85.33 9.167-25.53 18.74-36.42 44.55-32.68 76.41 .355 3.025-1.967 7.621-4.514 9.545-39.71 29.99-56.03 78.07-41.9 124.6 13.83 45.57 57.51 79.8 105.6 81.43 30.29 1.031 60.64 .546 90.96 .539 84.04-.021 168.1 .531 252.1-.48 52.66-.634 96.11-36.87 108.2-87.29 11.54-48.07-11.14-97.3-56.83-122.6zm21.11 156.9c-18.23 22.43-42.34 35.25-71.28 35.65-56.87 .781-113.8 .23-170.7 .23 0 .7-163 .159-163.7 .154-43.86-.332-76.74-19.77-95.18-59.99-18.9-41.24-4.004-90.85 34.19-116.1 9.182-6.073 12.51-11.57 10.1-23.14-5.49-26.36 4.453-47.96 26.42-62.98 22.99-15.72 47.42-16.15 72.03-3.083 10.27 5.45 14.61 11.56 22.2-2.527 14.22-26.4 34.56-46.73 60.67-61.29 97.46-54.37 228.4 7.568 230.2 132.7 .122 8.15 2.412 12.43 9.848 15.89 57.56 26.83 74.46 96.12 35.14 144.5zm-87.79-80.5c-5.848 31.16-34.62 55.1-66.67 55.1-16.95-.001-32.06-6.545-44.08-17.7-27.7-25.71-71.14-74.98-95.94-93.39-20.06-14.89-41.99-12.33-60.27 3.782-49.1 44.07 15.86 121.8 67.06 77.19 4.548-3.96 7.84-9.543 12.74-12.84 8.184-5.509 20.77-.884 13.17 10.62-17.36 26.28-49.33 38.2-78.86 29.3-28.9-8.704-48.84-35.97-48.63-70.18 1.225-22.49 12.36-43.06 35.41-55.97 22.58-12.64 46.37-13.15 66.99 2.474C295.7 280.7 320.5 323.1 352.2 343.5c24.56 15.1 54.25 7.363 68.82-17.51 28.83-49.21-34.59-105-78.87-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.98 6.811-17.33-4.113-12.81-10.35 20.7-28.55 50.46-40.44 83.27-28.21 31.43 11.71 49.11 44.37 42.76 78.19z\"],\n    \"kaggle\": [320, 512, [], \"f5fa\", \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\"],\n    \"keybase\": [448, 512, [], \"f4f5\", \"M286.2 419a18 18 0 1 0 18 18 18 18 0 0 0 -18-18zm111.9-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0 -47.88-104.1c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.7 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0 -8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93 .54a214 214 0 0 0 -46.29 35.54C14 304.7 14 374 14 429.8v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.3 178.3 0 0 1 -15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.4-61.76 236.3-38.59 34.2 10.05 67.45 .69 84.74-23.84 .72-1 1.2-2.16 1.85-3.22a156.1 156.1 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.3c0-38.58-13-77.46-35.91-110.9zM142.4 128.6l-15.7-.93-1.39 21.79 13.13 .78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1 -11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.4 144.4 0 0 0 -7 19.17zm148.4 172.2a10.51 10.51 0 0 1 -14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1 -11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1 -10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.2s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1 -1.74 13.44zM187.4 419a18 18 0 1 0 18 18 18 18 0 0 0 -18-18z\"],\n    \"keycdn\": [512, 512, [], \"f3ba\", \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5 .7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4 .3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3 .3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2 .7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3 .1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9 .4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1 .8-57.3 24.8-58.2 58.3zM256 160\"],\n    \"kickstarter\": [448, 512, [], \"f3bb\", \"M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z\"],\n    \"kickstarter-k\": [384, 512, [], \"f3bc\", \"M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z\"],\n    \"korvue\": [446, 512, [], \"f42f\", \"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"],\n    \"laravel\": [512, 512, [], \"f3bd\", \"M504.4 115.8a5.72 5.72 0 0 0 -.28-.68 8.52 8.52 0 0 0 -.53-1.25 6 6 0 0 0 -.54-.71 9.36 9.36 0 0 0 -.72-.94c-.23-.22-.52-.4-.77-.6a8.84 8.84 0 0 0 -.9-.68L404.4 55.55a8 8 0 0 0 -8 0L300.1 111h0a8.07 8.07 0 0 0 -.88 .69 7.68 7.68 0 0 0 -.78 .6 8.23 8.23 0 0 0 -.72 .93c-.17 .24-.39 .45-.54 .71a9.7 9.7 0 0 0 -.52 1.25c-.08 .23-.21 .44-.28 .68a8.08 8.08 0 0 0 -.28 2.08V223.2l-80.22 46.19V63.44a7.8 7.8 0 0 0 -.28-2.09c-.06-.24-.2-.45-.28-.68a8.35 8.35 0 0 0 -.52-1.24c-.14-.26-.37-.47-.54-.72a9.36 9.36 0 0 0 -.72-.94 9.46 9.46 0 0 0 -.78-.6 9.8 9.8 0 0 0 -.88-.68h0L115.6 1.07a8 8 0 0 0 -8 0L11.34 56.49h0a6.52 6.52 0 0 0 -.88 .69 7.81 7.81 0 0 0 -.79 .6 8.15 8.15 0 0 0 -.71 .93c-.18 .25-.4 .46-.55 .72a7.88 7.88 0 0 0 -.51 1.24 6.46 6.46 0 0 0 -.29 .67 8.18 8.18 0 0 0 -.28 2.1v329.7a8 8 0 0 0 4 6.95l192.5 110.8a8.83 8.83 0 0 0 1.33 .54c.21 .08 .41 .2 .63 .26a7.92 7.92 0 0 0 4.1 0c.2-.05 .37-.16 .55-.22a8.6 8.6 0 0 0 1.4-.58L404.4 400.1a8 8 0 0 0 4-6.95V287.9l92.24-53.11a8 8 0 0 0 4-7V117.9A8.63 8.63 0 0 0 504.4 115.8zM111.6 17.28h0l80.19 46.15-80.2 46.18L31.41 63.44zm88.25 60V278.6l-46.53 26.79-33.69 19.4V123.5l46.53-26.79zm0 412.8L23.37 388.5V77.32L57.06 96.7l46.52 26.8V338.7a6.94 6.94 0 0 0 .12 .9 8 8 0 0 0 .16 1.18h0a5.92 5.92 0 0 0 .38 .9 6.38 6.38 0 0 0 .42 1v0a8.54 8.54 0 0 0 .6 .78 7.62 7.62 0 0 0 .66 .84l0 0c.23 .22 .52 .38 .77 .58a8.93 8.93 0 0 0 .86 .66l0 0 0 0 92.19 52.18zm8-106.2-80.06-45.32 84.09-48.41 92.26-53.11 80.13 46.13-58.8 33.56zm184.5 4.57L215.9 490.1V397.8L346.6 323.2l45.77-26.15zm0-119.1L358.7 250l-46.53-26.79V131.8l33.69 19.4L392.4 178zm8-105.3-80.2-46.17 80.2-46.16 80.18 46.15zm8 105.3V178L455 151.2l33.68-19.4v91.39h0z\"],\n    \"lastfm\": [512, 512, [], \"f202\", \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"],\n    \"lastfm-square\": [448, 512, [], \"f203\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5 .1 36.7-30.7 50.6-76.1 50.6z\"],\n    \"leanpub\": [576, 512, [], \"f212\", \"M386.5 111.5l15.1 248.1-10.98-.275c-36.23-.824-71.64 8.783-102.7 27.1-31.02-19.21-66.42-27.1-102.7-27.1-45.56 0-82.07 10.7-123.5 27.72L93.12 129.6c28.55-11.8 61.48-18.11 92.23-18.11 41.17 0 73.84 13.18 102.7 42.54 27.72-28.27 59.01-41.72 98.54-42.54zM569.1 448c-25.53 0-47.49-5.215-70.54-15.65-34.31-15.65-69.99-24.98-107.9-24.98-38.98 0-74.93 12.9-102.7 40.62-27.72-27.72-63.68-40.62-102.7-40.62-37.88 0-73.56 9.333-107.9 24.98C55.24 442.2 32.73 448 8.303 448H6.93L49.47 98.86C88.73 76.63 136.5 64 181.8 64 218.8 64 256.1 71.68 288 93.1 319 71.68 357.2 64 394.2 64c45.29 0 93.05 12.63 132.3 34.86L569.1 448zm-43.37-44.74l-34.04-280.2c-30.74-13.1-67.25-21.41-101-21.41-38.43 0-74.39 12.08-102.7 38.7-28.27-26.63-64.23-38.7-102.7-38.7-33.76 0-70.27 7.411-101 21.41L50.3 403.3c47.21-19.49 82.89-33.49 135-33.49 37.6 0 70.82 9.606 102.7 29.64 31.84-20.04 65.05-29.64 102.7-29.64 52.15 0 87.83 13.1 135 33.49z\"],\n    \"less\": [640, 512, [], \"f41d\", \"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5 .5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1 .8-4.6 .8-6.2 .8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4 .6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"],\n    \"line\": [448, 512, [], \"f3c0\", \"M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1 .5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9 .3 1.6 .9 2.2 .6 .5 1.3 .9 2.2 .9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8 .1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z\"],\n    \"linkedin\": [448, 512, [], \"f08c\", \"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"],\n    \"linkedin-in\": [448, 512, [], \"f0e1\", \"M100.3 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.6 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.3 61.9 111.3 142.3V448z\"],\n    \"linode\": [448, 512, [], \"f2b8\", \"M366 186.9l-59.5 36.87-.838 36.87-29.33-19.27-39.38 24.3c2.238 55.21 2.483 59.27 2.51 59.5l-97.2 65.36L127.2 285.7l108.1-62.01L195.1 197.8l-75.42 38.55L98.72 93.01 227.8 43.57 136.4 0 10.74 39.38 38.39 174.3l41.9 32.68L48.44 222.1 69.39 323.5 98.72 351.1 77.77 363.7l16.76 78.77L160.7 512c-10.8-74.84-11.66-78.64-11.73-78.77l77.93-55.3c16.76-12.57 15.08-10.89 15.08-10.89l.838 24.3 33.52 28.49-.838-77.09 46.93-33.52 26.82-18.43-2.514 36.03 25.14 17.6 6.7-74.58 58.66-43.58z\"],\n    \"linux\": [448, 512, [], \"f17c\", \"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5 .2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4 .2-.8 .7-.6 1.1 .3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6 .2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5 .1-1.3 .6-3.4 1.5-3.2 2.9 .1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7 .1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9 .6 7.9 1.2 11.8 1.2 8.1 2.5 15.7 .8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1 .6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3 .4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4 .7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6 .6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7 .8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4 .6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1 .8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7 .4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6 .8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1 .3-.2 .7-.3 1-.5 .8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"],\n    \"lyft\": [512, 512, [], \"f3c3\", \"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"],\n    \"magento\": [448, 512, [], \"f3c4\", \"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6 .1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"],\n    \"mailchimp\": [448, 512, [], \"f59e\", \"M330.6 243.5a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43 .45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0 -30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06 .85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1 .9 .34 1.17 .81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92 .34 4.31 .52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81 .28-15.96zm-218.8 78.9c-1.32 .31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27 .57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0 -.2-2.33c.03 .89 .68-1.3-3.35-.39zm299.7-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.4-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.8 25.78 273.9l14.76 12.51a72.49 72.49 0 0 0 -4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.1 267.9 133.3 322.3 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.6C69.14 252.5 55.78 261.1 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.2C112.4 90.56 186.2 39.68 220.4 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.2 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.8 102.8 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.9 106.9 0 0 1 362.5 421a132.4 132.4 0 0 1 -20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1 -3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0 -1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48 .5 15.89 1.59 22.88 1.88 11.69 .5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49 .29 6.72 1.1 23 1.38 27.63 .63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.5 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.4-21.35 .69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.5 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73 .73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75 .75 0 0 0 1.16 .79c11.49-7.83 31.48-16.22 49-17.3a.77 .77 0 0 1 .52 1.38 41.86 41.86 0 0 0 -7.71 7.74 .75 .75 0 0 0 .59 1.19c12.31 .09 29.66 4.4 41 10.74 .76 .43 .22 1.91-.64 1.72-69.55-15.94-123.1 18.53-134.5 26.83a.76 .76 0 0 1 -1-1.12z\"],\n    \"mandalorian\": [448, 512, [], \"f50f\", \"M232.3 511.9c-1-3.26-1.69-15.83-1.39-24.58 .55-15.89 1-24.72 1.4-28.76 .64-6.2 2.87-20.72 3.28-21.38 .6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0 -.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.5 109.5 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39 .37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34 .21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1 -1.55 4.26c-1 1-1.14 .91-2.05-.53a14.87 14.87 0 0 1 -1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36 .66 .51 1.35 .34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64 .73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95 .7-3 2.26-18.29 3.33-32.62 .36-4.78 .81-10.5 1-12.71 .83-9.37 1.66-20.35 2.61-34.78 .56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81 .75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0 -2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79 .1 18.55a101.2 101.2 0 0 0 -1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18 .8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.9 132.9 0 0 0 -2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.2 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0 -2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0 -1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0 -2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22 .29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15 .88 .22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51 .68 3 .57 7.05-1.67l4.35-2.4L268.3 5c10.44-.4 10.81-.47 15.26-2.68L288.2 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1 -1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1 -4.09 3.71 13.62 13.62 0 0 0 -4.38 4.78 5.89 5.89 0 0 1 -2.49 2.91 6.88 6.88 0 0 0 -2.45 1.71 67.62 67.62 0 0 1 -7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0 -2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56 .71 8.84a33.45 33.45 0 0 0 -1.06 8.91c0 4.88 .22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09 .11 8.42c.06 4.63 .47 9.53 .92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12 .83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69 .52 12.69-11 22.84l-4 3.49 .07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27 .63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36 .47 2.26 .78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43 .17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1 -1.73-10.79 100.5 100.5 0 0 0 -1.73-10.79 37.53 37.53 0 0 1 -1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62 .62 0 0 1 -1-.14zm-87.18-266.6c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.3 86.25 255 78.55 268c-31 52-6 101.6 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.7zm210.8 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.6 92.46 149.4 4.3 70.64-78.7 91.18-105.3 61.71z\"],\n    \"markdown\": [640, 512, [], \"f60f\", \"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\"],\n    \"mastodon\": [448, 512, [], \"f4f6\", \"M433 179.1c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.6-28.4-290.5 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.6 289.1 40.51 10.7 75.32 13 103.3 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.5 102.5 0 0 1 -.9-13.9c85.63 20.9 158.6 9.1 178.8 6.7 56.12-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.8-6.1 23.71 27.3 18.4 53 18.4 175z\"],\n    \"maxcdn\": [512, 512, [], \"f136\", \"M461.1 442.7h-97.4L415.6 200c2.3-10.2 .9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"],\n    \"mdb\": [576, 512, [], \"f8ca\", \"M17.37 160.4L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.6H146.7L106 277.7 63.67 160.4zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.5V204.8s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.3-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.6H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.5l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z\"],\n    \"medapps\": [320, 512, [], \"f3c6\", \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7 .2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"],\n    \"medium\": [640, 512, [62407, \"medium-m\"], \"f23a\", \"M180.5 74.26C80.81 74.26 0 155.6 0 256S80.82 437.7 180.5 437.7 361 356.4 361 256 280.2 74.26 180.5 74.26zm288.3 10.65c-49.85 0-90.25 76.62-90.25 171.1s40.41 171.1 90.25 171.1 90.25-76.62 90.25-171.1H559C559 161.5 518.6 84.91 468.8 84.91zm139.5 17.82c-17.53 0-31.74 68.63-31.74 153.3s14.2 153.3 31.74 153.3S640 340.6 640 256C640 171.4 625.8 102.7 608.3 102.7z\"],\n    \"medrt\": [544, 512, [], \"f3c8\", \"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"],\n    \"meetup\": [512, 512, [], \"f2e0\", \"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1 .9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9 .6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3 .9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"],\n    \"megaport\": [496, 512, [], \"f5a3\", \"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\"],\n    \"mendeley\": [640, 512, [], \"f7b3\", \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4 .7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1 .1-.2 .2-.3 .4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"],\n    \"microblog\": [448, 512, [], \"e01a\", \"M399.4 362.2c29.49-34.69 47.1-78.34 47.1-125.8C446.5 123.5 346.9 32 224 32S1.54 123.5 1.54 236.4 101.1 440.9 224 440.9a239.3 239.3 0 0 0 79.44-13.44 7.18 7.18 0 0 1 8.12 2.56c18.58 25.09 47.61 42.74 79.89 49.92a4.42 4.42 0 0 0 5.22-3.43 4.37 4.37 0 0 0 -.85-3.62 87 87 0 0 1 3.69-110.7zM329.5 212.4l-57.3 43.49L293 324.8a6.5 6.5 0 0 1 -9.94 7.22L224 290.9 164.9 332a6.51 6.51 0 0 1 -9.95-7.22l20.79-68.86-57.3-43.49a6.5 6.5 0 0 1 3.8-11.68l71.88-1.51 23.66-67.92a6.5 6.5 0 0 1 12.28 0l23.66 67.92 71.88 1.51a6.5 6.5 0 0 1 3.88 11.68z\"],\n    \"microsoft\": [448, 512, [], \"f3ca\", \"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"],\n    \"mix\": [448, 512, [], \"f3cb\", \"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"],\n    \"mixcloud\": [640, 512, [], \"f289\", \"M424.4 219.7C416.1 134.7 344.1 68 256.9 68c-72.27 0-136.2 46.52-159.2 114.1-54.54 8.029-96.63 54.82-96.63 111.6 0 62.3 50.67 112.1 113.2 112.1h289.6c52.33 0 94.97-42.36 94.97-94.69 0-45.13-32.12-83.06-74.48-92.2zm-20.49 144.5H114.3c-39.04 0-70.88-31.56-70.88-70.6s31.84-70.6 70.88-70.6c18.83 0 36.55 7.475 49.84 20.77 19.96 19.96 50.13-10.23 30.18-30.18-14.68-14.4-32.67-24.36-52.05-29.35 19.93-44.3 64.79-73.93 114.6-73.93 69.5 0 125.1 56.48 125.1 125.7 0 13.57-2.215 26.86-6.369 39.59-8.943 27.52 32.13 38.94 40.15 13.29 2.769-8.306 4.984-16.89 6.369-25.47 19.38 7.476 33.5 26.3 33.5 48.45 0 28.8-23.53 52.33-52.61 52.33zm235.1-52.33c0 44.02-12.74 86.39-37.1 122.7-4.153 6.092-10.8 9.414-17.72 9.414-16.32 0-27.13-18.83-17.44-32.95 19.38-29.35 29.9-63.68 29.9-99.12s-10.52-69.77-29.9-98.85c-15.65-22.83 19.36-47.24 35.16-23.53 24.37 35.99 37.1 78.36 37.1 122.4zm-70.88 0c0 31.57-9.137 62.02-26.86 88.32-4.153 6.091-10.8 9.136-17.72 9.136-17.2 0-27.02-18.98-17.44-32.95 13.01-19.1 19.66-41.26 19.66-64.51 0-22.98-6.645-45.41-19.66-64.51-15.76-22.99 19.01-47.1 35.16-23.53 17.72 26.03 26.86 56.48 26.86 88.05z\"],\n    \"mixer\": [512, 512, [], \"e056\", \"M114.6 76.07a45.71 45.71 0 0 0 -67.51-6.41c-17.58 16.18-19 43.52-4.75 62.77l91.78 123L41.76 379.6c-14.23 19.25-13.11 46.59 4.74 62.77A45.71 45.71 0 0 0 114 435.9L242.9 262.7a12.14 12.14 0 0 0 0-14.23zM470.2 379.6 377.9 255.4l91.78-123c14.22-19.25 12.83-46.59-4.75-62.77a45.71 45.71 0 0 0 -67.51 6.41l-128 172.1a12.14 12.14 0 0 0 0 14.23L398 435.9a45.71 45.71 0 0 0 67.51 6.41C483.4 426.2 484.5 398.8 470.2 379.6z\"],\n    \"mizuni\": [496, 512, [], \"f3cc\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"],\n    \"modx\": [448, 512, [], \"f285\", \"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"],\n    \"monero\": [496, 512, [], \"f3d0\", \"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"],\n    \"napster\": [496, 512, [], \"f3d2\", \"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9 .1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1 .1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7 .2-158.2V93.2c-17.3 .5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5 .1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"],\n    \"neos\": [512, 512, [], \"f612\", \"M415.4 512h-95.11L212.1 357.5v91.1L125.7 512H28V29.82L68.47 0h108.1l123.7 176.1V63.45L386.7 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.6h84.79l52.35-38.17h-78.27L69 13zm82.54 466.6l80-58.78v-101l-79.76-114.4v220.9L49 501.9h72.34zM80.63 10.77l310.6 442.6h82.37V10.77h-79.75v317.6L170.9 10.77zM311 191.6l72 102.8V15.93l-72 53v122.7z\"],\n    \"nimblr\": [384, 512, [], \"f5a8\", \"M246.6 299.3c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.3c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.8 159C157 159 89.45 178.8 59.25 227L14 0v335.5C14 433.1 93.61 512 191.8 512s177.8-78.95 177.8-176.5S290.1 159 191.8 159zm0 308.1c-73.27 0-132.5-58.9-132.5-131.6s59.24-131.6 132.5-131.6 132.5 58.86 132.5 131.5S265 467.1 191.8 467.1z\"],\n    \"node\": [640, 512, [], \"f419\", \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4 .1l14.8 8.8c.5 .3 1.3 .3 1.8 0L375 408c.5-.3 .9-.9 .9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6 .3-.9 1-.9 1.6v66.7c0 .6 .4 1.2 .9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9 .7-1.7 1.7-1.7h7.3c.9 0 1.7 .7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6 .2 .8 .8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5 .3-.4 .5-.8 .4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7 .7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7 .1 1.8 1.2 2.1 2.8 .1 1 .3 2.7 .6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3 .4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3 .7 2.5 1.8 3.2 1.1 .7 2.5 .7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6 .3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1 .7 2.6 .7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6 .3-.9 .9-.9 1.6v24.3c0 .7 .4 1.3 .9 1.6l21 12.1c.6 .3 1.3 .3 1.8 0l21-12.1c.6-.3 .9-.9 .9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3 .7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1 .7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4 .3-.7 .7-.7 1.2v13.6c0 .5 .3 1 .7 1.2l11.8 6.8c.4 .3 1 .3 1.4 0L584 235c.4-.3 .7-.7 .7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7 .1-.5 .2-1.1 .2-1.7zm-74.3-124.9l-.8 .5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"],\n    \"node-js\": [448, 512, [], \"f3d3\", \"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6 .4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2 .7 376.3 .7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8 .5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"],\n    \"npm\": [576, 512, [], \"f3d4\", \"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"],\n    \"ns8\": [640, 512, [], \"f3d5\", \"M104.3 269.2h26.07V242.1H104.3zm52.47-26.18-.055-26.18v-.941a39.33 39.33 0 0 0 -78.64 .941v.166h26.4v-.166a12.98 12.98 0 0 1 25.96 0v26.18zm52.36 25.85a91.1 91.1 0 0 1 -91.1 91.1h-.609a91.1 91.1 0 0 1 -91.1-91.1H0v.166A117.3 117.3 0 0 0 117.4 386.3h.775A117.3 117.3 0 0 0 235.5 268.8V242.8H209.1zm-157.2 0a65.36 65.36 0 0 0 130.7 0H156.3a39.02 39.02 0 0 1 -78.04 0V242.9H51.97v-26.62A65.42 65.42 0 0 1 182.8 217.5v25.29h26.34V217.5a91.76 91.76 0 0 0 -183.5 0v25.4H51.91zm418.4-71.17c13.67 0 24.57 6.642 30.05 18.26l.719 1.549 23.25-11.51-.609-1.439c-8.025-19.26-28.5-31.27-53.41-31.27-23.13 0-43.61 11.4-50.97 28.45-.123 26.88-.158 23.9 0 24.85 4.7 11.01 14.56 19.37 28.67 24.24a102 102 0 0 0 19.81 3.984c5.479 .72 10.63 1.384 15.83 3.1 6.364 2.1 10.46 5.257 12.84 9.851v9.851c-3.708 7.527-13.78 12.34-25.79 12.34-14.33 0-25.96-6.918-31.93-19.04l-.72-1.494L415 280.9l.553 1.439c7.915 19.43 29.61 32.04 55.29 32.04 23.63 0 44.61-11.4 52.3-28.45l.166-25.9-.166-.664c-4.87-11.01-15.22-19.65-28.94-24.24-7.693-2.712-14.34-3.6-20.7-4.427a83.78 83.78 0 0 1 -14.83-2.878c-6.31-1.937-10.4-5.092-12.62-9.63v-8.412C449.5 202.4 458.1 197.7 470.3 197.7zM287.6 311.3h26.07v-68.4H287.6zm352.3-53.3c-2.933-6.254-8.3-12.01-15.44-16.71A37.99 37.99 0 0 0 637.4 226l.166-25.35-.166-.664C630 184 610.7 173.3 589.3 173.3S548.5 184 541.1 199.1l-.166 25.35 .166 .664a39.64 39.64 0 0 0 13.01 15.33c-7.2 4.7-12.51 10.46-15.44 16.71l-.166 28.89 .166 .72c7.582 15.99 27.89 26.73 50.58 26.73s43.06-10.74 50.58-26.73l.166-28.89zm-73.22-50.81c3.6-6.31 12.56-10.52 22.58-10.52s19.04 4.206 22.64 10.52v13.73c-3.542 6.2-12.56 10.35-22.64 10.35s-19.09-4.15-22.58-10.35zm47.32 72.17c-3.764 6.641-13.34 10.9-24.68 10.9-11.13 0-20.98-4.372-24.68-10.9V263.3c3.708-6.309 13.5-10.52 24.68-10.52 11.35 0 20.92 4.15 24.68 10.52zM376.4 265.1l-59.83-89.71h-29v40.62h26.51v.387l62.54 94.08H402.3V176.2H376.4z\"],\n    \"nutritionix\": [400, 512, [], \"f3d6\", \"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"],\n    \"octopus-deploy\": [512, 512, [], \"e082\", \"M455.6 349.2c-45.89-39.09-36.67-77.88-16.09-128.1C475.2 134 415.1 34.14 329.9 8.3 237-19.6 134.3 24.34 99.68 117.1a180.9 180.9 0 0 0 -10.99 73.54c1.733 29.54 14.72 52.97 24.09 80.3 17.2 50.16-28.1 92.74-66.66 117.6-46.81 30.2-36.32 39.86-8.428 41.86 23.38 1.68 44.48-4.548 65.26-15.05 9.2-4.647 40.69-18.93 45.13-28.59C135.9 413.4 111.1 459.5 126.6 488.9c19.1 36.23 67.11-31.77 76.71-45.81 8.591-12.57 42.96-81.28 63.63-46.93 18.86 31.36 8.6 76.39 35.74 104.6 32.85 34.2 51.15-18.31 51.41-44.22 .163-16.41-6.1-95.85 29.9-59.94C405.4 418 436.9 467.8 472.6 463.6c38.74-4.516-22.12-67.97-28.26-78.69 5.393 4.279 53.67 34.13 53.82 9.52C498.2 375.7 468 359.8 455.6 349.2z\"],\n    \"odnoklassniki\": [320, 512, [], \"f263\", \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"],\n    \"odnoklassniki-square\": [448, 512, [], \"f264\", \"M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z\"],\n    \"old-republic\": [496, 512, [], \"f510\", \"M235.8 10.23c7.5-.31 15-.28 22.5-.09 3.61 .14 7.2 .4 10.79 .73 4.92 .27 9.79 1.03 14.67 1.62 2.93 .43 5.83 .98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83 .57 3.14 1.04 6.3 1.4 9.47 .55 3.83 .94 7.69 1.18 11.56 .83 8.34 .84 16.73 .77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.5 246.5 0 0 1 -56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66 .91-9.34 1.73-14.03 2.48-5.25 .66-10.5 1.44-15.79 1.74-6.69 .66-13.41 .84-20.12 .81-6.82 .03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49 .14-3.51 .34-7.01 .7-10.51 .31-3.17 .46-6.37 .92-9.52 .41-2.81 .65-5.65 1.16-8.44 .7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23 .1-18.43 .99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.7-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8 .11 7.14 .38 14.28 1.22 21.37 .62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91 .29 5.81 .61 8.72 .9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.3 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75 .13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1 .9 3.02 .66 6.2 .69 9.31 .02 4.1-.04 8.2 .03 12.3 .14 3.54-.02 7.09 .11 10.63 .08 2.38 .02 4.76 .05 7.14 .16 5.77 .06 11.53 .15 17.3 .11 2.91 .02 5.82 .13 8.74 .03 1.63 .13 3.28-.03 4.91-.91 .12-1.82 .18-2.73 .16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73 .84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.4-20.12c2.74 .74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57 .41 4.54 .44 9.09 .45 13.64 .07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51 .69-7.08 1.08-10.66 1.21-1.85 .06-3.72 .16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73 .14-7.45 .1-11.17 .19-7.02 .02-14.05 .21-21.07 .03-2.38-.03-4.76 .03-7.14 .17-5.07-.04-10.14 .14-15.21 .1-2.99-.24-6.04 .51-8.96 .66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46 .86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61 .93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07 .32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.3-.01 221 0 1.35-.08 2.7 .04 4.04 .13 1.48 .82 2.83 1.47 4.15 .86 1.66 1.78 3.34 3.18 4.62 .85 .77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57 .96-1.51 1.68-3.16 2.28-4.85 .76-2.13 .44-4.42 .54-6.63 .14-4.03-.02-8.06 .14-12.09 .03-5.89 .03-11.77 .06-17.66 .14-3.62 .03-7.24 .11-10.86 .15-4.03-.02-8.06 .14-12.09 .03-5.99 .03-11.98 .07-17.97 .14-3.62 .02-7.24 .11-10.86 .14-3.93-.02-7.86 .14-11.78 .03-5.99 .03-11.98 .06-17.97 .16-3.94-.01-7.88 .19-11.82 .29 1.44 .13 2.92 .22 4.38 .19 3.61 .42 7.23 .76 10.84 .32 3.44 .44 6.89 .86 10.32 .37 3.1 .51 6.22 .95 9.31 .57 4.09 .87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21 .27 .25 .55 .51 .88 .71 .6 .25 1.31-.07 1.7-.57 .71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31 .7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11 .75 19.56 1.85 3.69 .58 7.4 1.17 11.13 1.41 3.74 .1 7.48 .05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46 .37 2.96 .46 4.45 .6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66 .24-9.32 .36-13.98 .36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11 .73 6.32 .47 9.47 .81 2.77 .28 5.56 .2 8.34 .3 5.05 .06 10.11 .04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83 .61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52 .67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13 .56-3.98 .83-7.99 1.31-11.97 .87-10.64 1.9-21.27 2.24-31.94 .08-1.86 .24-3.71 .25-5.57 .01-4.35 .25-8.69 .22-13.03-.01-2.38-.01-4.76 0-7.13 .05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64 .07-2.99 .7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06 .71-.12 1.07-.19 .19 1.79 .09 3.58 .1 5.37v38.13c-.01 1.74 .13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32 .09-4.98-.03-.03-.39-.26-.91 .16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54 .04-.56 .02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2 .06 15.3-.12 3.36-.13 6.73 .08 10.09-.07 .12-.39 .26-.77 .37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36 .05 .72 .12 1.08 .2 .98 3.85 1.73 7.76 2.71 11.61 .36 1.42 .56 2.88 1.03 4.27 2.53 .18 5.07-.01 7.61 .05 5.16 .12 10.33 .12 15.49 .07 .76-.01 1.52 .03 2.28 .08-.04 .36-.07 .72-.1 1.08-1.82 .83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57 .17-1.12 .42-1.67 .64-.15 .55-.18 1.12-.12 1.69 .87 .48 1.82 .81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6 .38 .13 .78 .27 1.13 .49 .4 .27 .23 .79 .15 1.18-1.66 .13-3.31 .03-4.97 .04-5.17 .01-10.33-.01-15.5 .01-1.61 .03-3.22-.02-4.82 .21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36 .01-.71 .02-1.06 .06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58 .11-5.37zM65.05 168.3c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83 .96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67 .99 2.9 1.59 5.91 2.17 8.92 .15 .75 .22 1.52 .16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11 .78-8.29 .99-12.46 1.08-10.25 .24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43 .11-6.18 .25-12.37 1.07-18.5 .4-2.86 .67-5.74 1.15-8.6 .98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.7-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05 .02 1.76 .07 3.52 .11 5.29 .13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51 .25-2.99 .53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05 .63-2.87 1.04-5.78 1.52-8.68 .87-6.09 1.59-12.22 1.68-18.38 .12-6.65 .14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"],\n    \"opencart\": [640, 512, [], \"f23d\", \"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"],\n    \"openid\": [448, 512, [], \"f19b\", \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"],\n    \"opera\": [496, 512, [], \"f26a\", \"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1 .3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"],\n    \"optin-monster\": [576, 512, [], \"f23c\", \"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7 .3-6.5 .3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8 .9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8 .5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4 .5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3 .5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1 .2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3 .3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1 .5-8.1 .8-11.6 .8-1.9-21.9-6.8-44-14.3-64.6 3.7 .3 8.1 .3 11.8 .3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1 .8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3 .3 26.6 .3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6 .8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3 .3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2 .8 2.2 .8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8 .3 1.9 .5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3 .9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5 .9-8.4-20.2-23.5-29.1-25.1z\"],\n    \"orcid\": [512, 512, [], \"f8d2\", \"M294.8 188.2h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.8h-29.84v-207.5h29.84zm-14.92-231.1a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1 -19.57 19.57zM300 369h-81V161.3h80.6c76.73 0 110.4 54.83 110.4 103.8C410 318.4 368.4 369 300 369z\"],\n    \"osi\": [512, 512, [], \"f41a\", \"M8 266.4C10.3 130.6 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0 -64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6 .6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4 .8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3 .6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"],\n    \"padlet\": [640, 512, [], \"e4a0\", \"M297.9 0L298 .001C305.6 .1078 312.4 4.72 315.5 11.78L447.5 320.3L447.8 320.2L448 320.6L445.2 330.6L402.3 488.6C398.6 504.8 382.6 514.9 366.5 511.2L298.1 495.6L229.6 511.2C213.5 514.9 197.5 504.8 193.8 488.6L150.9 330.6L148.2 320.6L148.3 320.2L280.4 11.78C283.4 4.797 290.3 .1837 297.9 .0006L297.9 0zM160.1 322.1L291.1 361.2L298 483.7L305.9 362.2L436.5 322.9L436.7 322.8L305.7 347.9L297.1 27.72L291.9 347.9L160.1 322.1zM426 222.6L520.4 181.6H594.2L437.2 429.2L468.8 320.2L426 222.6zM597.5 181.4L638.9 257.6C642.9 265.1 635 273.5 627.3 269.8L579.7 247.1L597.5 181.4zM127.3 318.5L158.7 430L1.61 154.5C-4.292 144.1 7.128 132.5 17.55 138.3L169.4 222.5L127.3 318.5z\"],\n    \"page4\": [496, 512, [], \"f3d7\", \"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"],\n    \"pagelines\": [384, 512, [], \"f18c\", \"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4 .5 1.6 .5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"],\n    \"palfed\": [576, 512, [], \"f3d8\", \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8 .7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4 .9 74.4 2.7 100v.2c.2 3.4 .6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4 .2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9 .2 2.5 .4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"],\n    \"patreon\": [512, 512, [], \"f3d9\", \"M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z\"],\n    \"paypal\": [384, 512, [], \"f1ed\", \"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4 .7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9 .7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"],\n    \"perbyte\": [448, 512, [], \"e083\", \"M305.3 284.6H246.6V383.3h58.71q24.42 0 38.19-13.77t13.77-36.11q0-21.83-14.03-35.33T305.3 284.6zM149.4 128.7H90.72v98.72h58.71q24.42 0 38.19-13.77t13.77-36.11q0-21.83-14.03-35.34T149.4 128.7zM366.6 32H81.35A81.44 81.44 0 0 0 0 113.4V398.6A81.44 81.44 0 0 0 81.35 480H366.6A81.44 81.44 0 0 0 448 398.6V113.4A81.44 81.44 0 0 0 366.6 32zm63.63 366.6a63.71 63.71 0 0 1 -63.63 63.63H81.35a63.71 63.71 0 0 1 -63.63-63.63V113.4A63.71 63.71 0 0 1 81.35 49.72H366.6a63.71 63.71 0 0 1 63.63 63.63zM305.3 128.7H246.6v98.72h58.71q24.42 0 38.19-13.77t13.77-36.11q0-21.83-14.03-35.34T305.3 128.7z\"],\n    \"periscope\": [448, 512, [], \"f3da\", \"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3 .1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"],\n    \"phabricator\": [496, 512, [], \"f3db\", \"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4 .5 .2 28.9 .2 28.9l-9.1 9.1s-29.2-.9-29.7 .4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5 .5 29.5 .5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4 .6 20.7-23.5 20.7-23.5l13.1 .2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2 .9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3 .8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1 .1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"],\n    \"phoenix-framework\": [640, 512, [], \"f3dc\", \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4 .1-.8 .2-1.1 .3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8 .6-1.5 1.2-2.2 1.8 .1 .2 .1 .3 .2 .5 .8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7 .3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1 .2-.3 .3-.4 .5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6 .1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2 .1-.2 2.1 .6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4 .2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7 .3 .2 .4 .5 .7 .9-.5 0-.7 .1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1 .2-.1 .4-.2 .6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2 .1-.3 .1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7 .4-.1 .9 0 1.5 .3-.6 .4-1.2 .9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4 .6-.8 .9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5 .1-.1 .2 0 .4 .4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7 .5-.2 .8-.4 1.1-.4 13.1 .1 26.1 .7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"],\n    \"phoenix-squadron\": [512, 512, [], \"f511\", \"M96 63.38C142.5 27.25 201.6 7.31 260.5 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.2 27 191 48.84 162.2 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3 .3a203 203 0 0 1 -35.82 15.37c-20 6.17-42.16 8.46-62.1 .78 12.79 1.73 26.06 .31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.6 526.6 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0 -51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28 .75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.6 183.6 0 0 0 -14.21-104.6c20.78 32 32.34 69.58 35.71 107.5 .49 12.73 .49 25.51 0 38.23A243.2 243.2 0 0 1 482 371.3c-26.12 47.34-68 85.63-117.2 108-78.29 36.23-174.7 31.32-248-14.68A248.3 248.3 0 0 1 25.36 366 238.3 238.3 0 0 1 0 273.1v-31.34C3.93 172 40.87 105.8 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\"],\n    \"php\": [640, 512, [], \"f457\", \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"],\n    \"pied-piper\": [480, 512, [], \"f2ae\", \"M455.9 23.2C429.2 30 387.8 51.69 341.4 90.66A206 206 0 0 0 240 64C125.1 64 32 157.1 32 272s93.13 208 208 208 208-93.13 208-208a207.3 207.3 0 0 0 -58.75-144.8 155.4 155.4 0 0 0 -17 27.4A176.2 176.2 0 0 1 417.1 272c0 97.66-79.44 177.1-177.1 177.1a175.8 175.8 0 0 1 -87.63-23.4c82.94-107.3 150.8-37.77 184.3-226.6 5.79-32.62 28-94.26 126.2-160.2C471 33.45 465.4 20.8 455.9 23.2zM125 406.4A176.7 176.7 0 0 1 62.9 272C62.9 174.3 142.4 94.9 240 94.9a174 174 0 0 1 76.63 17.75C250.6 174.8 189.8 265.5 125 406.4z\"],\n    \"pied-piper-alt\": [576, 512, [], \"f1a8\", \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3 .9 .6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9 .6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"],\n    \"pied-piper-hat\": [640, 512, [], \"f4e5\", \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9 .6 2.8 .8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1 .6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"],\n    \"pied-piper-pp\": [448, 512, [], \"f1a7\", \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4 .2-9.6 .7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"],\n    \"pied-piper-square\": [448, 512, [], \"e01e\", \"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"],\n    \"pinterest\": [496, 512, [], \"f0d2\", \"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3 .8-3.4 5-20.3 6.9-28.1 .6-2.5 .3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"],\n    \"pinterest-p\": [384, 512, [], \"f231\", \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"],\n    \"pinterest-square\": [448, 512, [], \"f0d3\", \"M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3 .8-3.4 5-20.1 6.8-27.8 .6-2.5 .3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2 .8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z\"],\n    \"pix\": [512, 512, [], \"e43a\", \"M242.4 292.5C247.8 287.1 257.1 287.1 262.5 292.5L339.5 369.5C353.7 383.7 372.6 391.5 392.6 391.5H407.7L310.6 488.6C280.3 518.1 231.1 518.1 200.8 488.6L103.3 391.2H112.6C132.6 391.2 151.5 383.4 165.7 369.2L242.4 292.5zM262.5 218.9C256.1 224.4 247.9 224.5 242.4 218.9L165.7 142.2C151.5 127.1 132.6 120.2 112.6 120.2H103.3L200.7 22.76C231.1-7.586 280.3-7.586 310.6 22.76L407.8 119.9H392.6C372.6 119.9 353.7 127.7 339.5 141.9L262.5 218.9zM112.6 142.7C126.4 142.7 139.1 148.3 149.7 158.1L226.4 234.8C233.6 241.1 243 245.6 252.5 245.6C261.9 245.6 271.3 241.1 278.5 234.8L355.5 157.8C365.3 148.1 378.8 142.5 392.6 142.5H430.3L488.6 200.8C518.9 231.1 518.9 280.3 488.6 310.6L430.3 368.9H392.6C378.8 368.9 365.3 363.3 355.5 353.5L278.5 276.5C264.6 262.6 240.3 262.6 226.4 276.6L149.7 353.2C139.1 363 126.4 368.6 112.6 368.6H80.78L22.76 310.6C-7.586 280.3-7.586 231.1 22.76 200.8L80.78 142.7H112.6z\"],\n    \"playstation\": [576, 512, [], \"f3df\", \"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9 .6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"],\n    \"product-hunt\": [512, 512, [], \"f288\", \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"],\n    \"pushed\": [432, 512, [], \"f3e1\", \"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"],\n    \"python\": [448, 512, [], \"f3e2\", \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4 .1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8 .1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3 .1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"],\n    \"qq\": [448, 512, [], \"f1d6\", \"M433.8 420.4c-11.53 1.393-44.86-52.74-44.86-52.74 0 31.34-16.14 72.25-51.05 101.8 16.84 5.192 54.84 19.17 45.8 34.42-7.316 12.34-125.5 7.881-159.6 4.037-34.12 3.844-152.3 8.306-159.6-4.037-9.045-15.25 28.92-29.21 45.78-34.42-34.92-29.54-51.06-70.44-51.06-101.8 0 0-33.33 54.13-44.86 52.74-5.37-.65-12.42-29.64 9.347-99.7 10.26-33.02 21.1-60.48 40.14-105.8C60.68 98.06 108.1 .006 224 0c113.7 .006 163.2 96.13 160.3 214.1 18.12 45.22 29.91 72.85 40.14 105.8 21.77 70.06 14.72 99.05 9.346 99.7z\"],\n    \"quinscape\": [512, 512, [], \"f459\", \"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.4 237.4 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4 .1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0 -99.2-99.2z\"],\n    \"quora\": [448, 512, [], \"f2c4\", \"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7 .1 41.8-5.4 75.6-16.7 100.5z\"],\n    \"r-project\": [581, 512, [], \"f4f7\", \"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"],\n    \"raspberry-pi\": [407, 512, [], \"f7bb\", \"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2 .7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6 .8C271.6 .6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9 .1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6 .1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7 .8 14.1 .6 23.9 .8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8 .4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2 .1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7 .9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6 .9 2.7 3.6 4.4 6.7 5.8-15.4 .9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8 .7 8.3 .1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6 .4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3 .4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6 .2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9 .5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6 .2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"],\n    \"ravelry\": [512, 512, [], \"f2d9\", \"M498.3 234.2c-1.208-10.34-1.7-20.83-3.746-31a310.3 310.3 0 0 0 -9.622-36.6 184.1 184.1 0 0 0 -30.87-57.5 251.2 251.2 0 0 0 -18.82-21.69 237.4 237.4 0 0 0 -47.11-36.12A240.8 240.8 0 0 0 331.4 26.65c-11.02-3.1-22.27-5.431-33.51-7.615-6.78-1.314-13.75-1.667-20.63-2.482-.316-.036-.6-.358-.9-.553q-16.14 .009-32.29 .006c-2.41 .389-4.808 .925-7.236 1.15a179.3 179.3 0 0 0 -34.26 7.1 221.5 221.5 0 0 0 -39.77 16.35 281.4 281.4 0 0 0 -38.08 24.16c-6.167 4.61-12.27 9.36-17.97 14.52C96.54 88.49 86.34 97.72 76.79 107.6a243.9 243.9 0 0 0 -33.65 43.95 206.5 206.5 0 0 0 -20.49 44.6 198.2 198.2 0 0 0 -7.691 34.76A201.1 201.1 0 0 0 13.4 266.4a299.7 299.7 0 0 0 4.425 40.24 226.9 226.9 0 0 0 16.73 53.3 210.5 210.5 0 0 0 24 39.53 213.6 213.6 0 0 0 26.36 28.42A251.3 251.3 0 0 0 126.7 458.5a287.8 287.8 0 0 0 55.9 25.28 269.5 269.5 0 0 0 40.64 9.835c6.071 1.01 12.27 1.253 18.41 1.873a4.149 4.149 0 0 1 1.19 .56h32.29c2.507-.389 5-.937 7.527-1.143 16.34-1.332 32.11-5.335 47.49-10.72A219.1 219.1 0 0 0 379.1 460.3c9.749-6.447 19.4-13.08 28.74-20.1 5.785-4.348 10.99-9.5 16.3-14.46 3.964-3.7 7.764-7.578 11.51-11.5a232.2 232.2 0 0 0 31.43-41.64c9.542-16.05 17.35-32.9 22.3-50.93 2.859-10.41 4.947-21.05 7.017-31.65 1.032-5.279 1.251-10.72 1.87-16.09 .036-.317 .358-.6 .552-.9V236A9.757 9.757 0 0 1 498.3 234.2zm-161.1-1.15s-16.57-2.98-28.47-2.98c-27.2 0-33.57 14.9-33.57 37.04V360.8H201.6V170.1H275.1v31.93c8.924-26.82 26.77-36.19 62.04-36.19z\"],\n    \"react\": [512, 512, [], \"f41b\", \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1 .9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2 .6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6 .4 19.5 .6 29.5 .6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8 .9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\"],\n    \"reacteurope\": [576, 512, [], \"f75d\", \"M250.6 211.7l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2 .1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2 .1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0 -4.2-3.4h-6.9a3.68 3.68 0 0 0 -4 3.4l-11 59.2c-.5 2.7 .9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 .04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0 -2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0 -2-1.9h-22.2a1.62 1.62 0 0 0 -2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0 -2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0 -2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0 -2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.4 364.4 0 0 0 -35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.8 587.8 0 0 0 -84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2 .1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0 -93.9 .9 547.8 547.8 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.3 598.3 0 0 0 -50.7 64.2 569.7 569.7 0 0 0 -84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.4 695.4 0 0 0 93.9-.9 547.8 547.8 0 0 1 -42.2 52.4q5.1 5.25 10.2 10.2a588.5 588.5 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1 -10.7-5.7l-.1 .1a19.61 19.61 0 0 1 -5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1 -72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1 -6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.9 711.9 0 0 1 -112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1 -3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.8 548.8 0 0 1 -72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4 .2-8.4-1a17.58 17.58 0 0 1 -6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.6c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.7 711.7 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1 .1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.7 359.7 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0 -1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0 -1.9-1.9H309a1.81 1.81 0 0 0 -2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0 -2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0 -2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0 -2-1.9h-22.2a1.81 1.81 0 0 0 -2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0 -2-2.06zm-7.4-99.4L286 192l-7.1 .1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\"],\n    \"readme\": [576, 512, [], \"f4d5\", \"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"],\n    \"rebel\": [512, 512, [], \"f1d0\", \"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1 .8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7 .8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4 .6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5 .8-2.8 .8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"],\n    \"red-river\": [448, 512, [], \"f3e3\", \"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"],\n    \"reddit\": [512, 512, [], \"f1a1\", \"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z\"],\n    \"reddit-alien\": [512, 512, [], \"f281\", \"M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2 .1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z\"],\n    \"reddit-square\": [448, 512, [], \"f1a2\", \"M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z\"],\n    \"redhat\": [512, 512, [], \"f7bc\", \"M341.5 285.6c33.65 0 82.34-6.94 82.34-47 .22-6.74 .86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.1 228.5 106.1M429 254.8c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.7 .08-235.9-73.65-235.9-122.3a49.55 49.55 0 0 1 4.06-19.72C58.56 200.9 0 208.9 0 260.6c0 84.67 200.6 189 359.5 189 121.8 0 152.5-55.08 152.5-98.58 0-34.21-29.59-73.05-82.93-96.24\"],\n    \"renren\": [512, 512, [], \"f18b\", \"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"],\n    \"replyd\": [448, 512, [], \"f3e6\", \"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9 .5-4.4 .7-8.6 .7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"],\n    \"researchgate\": [448, 512, [], \"f4f8\", \"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1 .6-33.6 .8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"],\n    \"resolving\": [496, 512, [], \"f3e7\", \"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"],\n    \"rev\": [448, 512, [], \"f5b2\", \"M289.7 274.9a65.57 65.57 0 1 1 -65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.6-5.05h-.13a204.7 204.7 0 0 0 -74.32-153l-45.38 26.2a157.1 157.1 0 0 1 71.81 131.8C381.2 361.5 310.7 432 224.1 432S67 361.5 67 274.9c0-81.88 63-149.3 143-156.4v39.12l108.8-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.6 0 111.6 89.12 202.3 200.1 205v.11h210.2V269.8z\"],\n    \"rocketchat\": [576, 512, [], \"f3e8\", \"M284 224.8a34.11 34.11 0 1 0 34.32 34.11A34.22 34.22 0 0 0 284 224.8zm-110.4 0a34.11 34.11 0 1 0 34.32 34.11A34.22 34.22 0 0 0 173.6 224.8zm220.9 0a34.11 34.11 0 1 0 34.32 34.11A34.22 34.22 0 0 0 394.5 224.8zm153.8-55.32c-15.53-24.17-37.31-45.57-64.68-63.62-52.89-34.82-122.4-54-195.7-54a405.1 405.1 0 0 0 -72.03 6.357 238.5 238.5 0 0 0 -49.51-36.59C99.68-11.7 40.86 .711 11.14 11.42A14.29 14.29 0 0 0 5.58 34.78C26.54 56.46 61.22 99.3 52.7 138.3c-33.14 33.9-51.11 74.78-51.11 117.3 0 43.37 17.97 84.25 51.11 118.1 8.526 38.96-26.15 81.82-47.12 103.5a14.28 14.28 0 0 0 5.555 23.34c29.72 10.71 88.55 23.15 155.3-10.2a238.7 238.7 0 0 0 49.51-36.59A405.1 405.1 0 0 0 288 460.1c73.31 0 142.8-19.16 195.7-53.97 27.37-18.05 49.15-39.43 64.68-63.62 17.31-26.92 26.07-55.92 26.07-86.13C574.4 225.4 565.6 196.4 548.3 169.5zM284.1 409.9a345.6 345.6 0 0 1 -89.45-11.5l-20.13 19.39a184.4 184.4 0 0 1 -37.14 27.58 145.8 145.8 0 0 1 -52.52 14.87c.983-1.771 1.881-3.563 2.842-5.356q30.26-55.68 16.33-100.1c-32.99-25.96-52.78-59.2-52.78-95.4 0-83.1 104.3-150.5 232.8-150.5s232.9 67.37 232.9 150.5C517.9 342.5 413.6 409.9 284.1 409.9z\"],\n    \"rockrms\": [496, 512, [], \"f3e9\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2 .2-74.2 .2l101.5 118.9z\"],\n    \"rust\": [512, 512, [], \"e07a\", \"M508.5 249.8 486.7 236.2c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35 7.35 0 0 0 -2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35 7.35 0 0 0 -4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35 7.35 0 0 0 -6.95-10.39l-25.82 .91q-1.79-2.22-3.61-4.4L439 81.84A7.36 7.36 0 0 0 430.2 73L405 78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35 7.35 0 0 0 -10.39-7L367.7 53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4 25.08a7.35 7.35 0 0 0 -11.54-4.79L326 35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35 7.35 0 0 0 -12.25-2.44l-17.5 18.72c-1.95-.21-3.91-.38-5.88-.55L262.3 3.48a7.35 7.35 0 0 0 -12.5 0L236.2 25.3c-2 .17-3.93 .34-5.88 .55L212.9 7.13a7.35 7.35 0 0 0 -12.25 2.44l-9 24c-1.89 .55-3.79 1.08-5.66 1.68l-20.82-15a7.35 7.35 0 0 0 -11.54 4.79l-4.15 25.41c-1.73 .9-3.45 1.79-5.16 2.73L120.9 42.55a7.35 7.35 0 0 0 -10.39 7l.92 25.81c-1.49 1.19-3 2.39-4.42 3.61L81.84 73A7.36 7.36 0 0 0 73 81.84L78.93 107c-1.23 1.45-2.43 2.93-3.62 4.41l-25.81-.91a7.42 7.42 0 0 0 -6.37 3.26 7.35 7.35 0 0 0 -.57 7.13l10.66 23.41c-.94 1.7-1.83 3.43-2.73 5.16L25.08 153.6a7.35 7.35 0 0 0 -4.79 11.54l15 20.82c-.59 1.87-1.13 3.77-1.68 5.66l-24 9a7.35 7.35 0 0 0 -2.44 12.25l18.72 17.5c-.21 1.95-.38 3.91-.55 5.88L3.48 249.8a7.35 7.35 0 0 0 0 12.5L25.3 275.8c.17 2 .34 3.92 .55 5.87L7.13 299.1a7.35 7.35 0 0 0 2.44 12.25l24 9c.55 1.89 1.08 3.78 1.68 5.65l-15 20.83a7.35 7.35 0 0 0 4.79 11.54l25.42 4.15c.9 1.72 1.79 3.45 2.73 5.14L42.56 391.1a7.35 7.35 0 0 0 .57 7.13 7.13 7.13 0 0 0 6.37 3.26l25.83-.91q1.77 2.22 3.6 4.4L73 430.2A7.36 7.36 0 0 0 81.84 439L107 433.1q2.18 1.83 4.41 3.61l-.92 25.82a7.35 7.35 0 0 0 10.39 6.95l23.43-10.68c1.69 .94 3.42 1.83 5.14 2.73l4.15 25.42a7.34 7.34 0 0 0 11.54 4.78l20.83-15c1.86 .6 3.76 1.13 5.65 1.68l9 24a7.36 7.36 0 0 0 12.25 2.44l17.5-18.72c1.95 .21 3.92 .38 5.88 .55l13.51 21.82a7.35 7.35 0 0 0 12.5 0l13.51-21.82c2-.17 3.93-.34 5.88-.56l17.5 18.73a7.36 7.36 0 0 0 12.25-2.44l9-24c1.89-.55 3.78-1.08 5.65-1.68l20.82 15a7.34 7.34 0 0 0 11.54-4.78l4.15-25.42c1.72-.9 3.45-1.79 5.15-2.73l23.42 10.68a7.35 7.35 0 0 0 10.39-6.95l-.91-25.82q2.22-1.79 4.4-3.61L430.2 439a7.36 7.36 0 0 0 8.84-8.84L433.1 405q1.83-2.17 3.61-4.4l25.82 .91a7.23 7.23 0 0 0 6.37-3.26 7.35 7.35 0 0 0 .58-7.13L458.8 367.7c.94-1.7 1.83-3.43 2.73-5.15l25.42-4.15a7.35 7.35 0 0 0 4.79-11.54l-15-20.83c.59-1.87 1.13-3.76 1.67-5.65l24-9a7.35 7.35 0 0 0 2.44-12.25l-18.72-17.5c.21-1.95 .38-3.91 .55-5.87l21.82-13.51a7.35 7.35 0 0 0 0-12.5zm-151 129.1A13.91 13.91 0 0 0 341 389.5l-7.64 35.67A187.5 187.5 0 0 1 177 424.4l-7.64-35.66a13.87 13.87 0 0 0 -16.46-10.68l-31.51 6.76a187.4 187.4 0 0 1 -16.26-19.21H258.3c1.72 0 2.89-.29 2.89-1.91V309.5c0-1.57-1.17-1.91-2.89-1.91H213.5l.05-34.35H262c4.41 0 23.66 1.28 29.79 25.87 1.91 7.55 6.17 32.14 9.06 40 2.89 8.82 14.6 26.46 27.1 26.46H407a187.3 187.3 0 0 1 -17.34 20.09zm25.77 34.49A15.24 15.24 0 1 1 368 398.1h.44A15.23 15.23 0 0 1 383.2 413.3zm-225.6-.68a15.24 15.24 0 1 1 -15.25-15.25h.45A15.25 15.25 0 0 1 157.6 412.6zM69.57 234.1l32.83-14.6a13.88 13.88 0 0 0 7.06-18.33L102.7 186h26.56V305.7H75.65A187.6 187.6 0 0 1 69.57 234.1zM58.31 198.1a15.24 15.24 0 0 1 15.23-15.25H74a15.24 15.24 0 1 1 -15.67 15.24zm155.2 24.49 .05-35.32h63.26c3.28 0 23.07 3.77 23.07 18.62 0 12.29-15.19 16.7-27.68 16.7zM399 306.7c-9.8 1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4 18.86-11.95 38.46-29.64 38.46-53.26 0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.3A187.5 187.5 0 0 1 221.2 70.06l23.47 24.6a13.82 13.82 0 0 0 19.6 .44l26.26-25a187.5 187.5 0 0 1 128.4 91.43l-18 40.57A14 14 0 0 0 408 220.4l34.59 15.33a187.1 187.1 0 0 1 .4 32.54H423.7c-1.91 0-2.69 1.27-2.69 3.13v8.82C421 301 409.3 305.6 399 306.7zM240 60.21A15.24 15.24 0 0 1 255.2 45h.45A15.24 15.24 0 1 1 240 60.21zM436.8 214a15.24 15.24 0 1 1 0-30.48h.44a15.24 15.24 0 0 1 -.44 30.48z\"],\n    \"safari\": [512, 512, [], \"f267\", \"M274.7 274.7l-37.38-37.38L166 346zM256 8C119 8 8 119 8 256S119 504 256 504 504 393 504 256 393 8 256 8zM411.9 182.8l14.78-6.13A8 8 0 0 1 437.1 181h0a8 8 0 0 1 -4.33 10.46L418 197.6a8 8 0 0 1 -10.45-4.33h0A8 8 0 0 1 411.9 182.8zM314.4 94l6.12-14.78A8 8 0 0 1 331 74.92h0a8 8 0 0 1 4.33 10.45l-6.13 14.78a8 8 0 0 1 -10.45 4.33h0A8 8 0 0 1 314.4 94zM256 60h0a8 8 0 0 1 8 8V84a8 8 0 0 1 -8 8h0a8 8 0 0 1 -8-8V68A8 8 0 0 1 256 60zM181 74.92a8 8 0 0 1 10.46 4.33L197.6 94a8 8 0 1 1 -14.78 6.12l-6.13-14.78A8 8 0 0 1 181 74.92zm-63.58 42.49h0a8 8 0 0 1 11.31 0L140 128.7A8 8 0 0 1 140 140h0a8 8 0 0 1 -11.31 0l-11.31-11.31A8 8 0 0 1 117.4 117.4zM60 256h0a8 8 0 0 1 8-8H84a8 8 0 0 1 8 8h0a8 8 0 0 1 -8 8H68A8 8 0 0 1 60 256zm40.15 73.21-14.78 6.13A8 8 0 0 1 74.92 331h0a8 8 0 0 1 4.33-10.46L94 314.4a8 8 0 0 1 10.45 4.33h0A8 8 0 0 1 100.2 329.2zm4.33-136h0A8 8 0 0 1 94 197.6l-14.78-6.12A8 8 0 0 1 74.92 181h0a8 8 0 0 1 10.45-4.33l14.78 6.13A8 8 0 0 1 104.5 193.2zM197.6 418l-6.12 14.78a8 8 0 0 1 -14.79-6.12l6.13-14.78A8 8 0 1 1 197.6 418zM264 444a8 8 0 0 1 -8 8h0a8 8 0 0 1 -8-8V428a8 8 0 0 1 8-8h0a8 8 0 0 1 8 8zm67-6.92h0a8 8 0 0 1 -10.46-4.33L314.4 418a8 8 0 0 1 4.33-10.45h0a8 8 0 0 1 10.45 4.33l6.13 14.78A8 8 0 0 1 331 437.1zm63.58-42.49h0a8 8 0 0 1 -11.31 0L372 383.3A8 8 0 0 1 372 372h0a8 8 0 0 1 11.31 0l11.31 11.31A8 8 0 0 1 394.6 394.6zM286.3 286.3 110.3 401.7 225.8 225.8 401.7 110.3zM437.1 331h0a8 8 0 0 1 -10.45 4.33l-14.78-6.13a8 8 0 0 1 -4.33-10.45h0A8 8 0 0 1 418 314.4l14.78 6.12A8 8 0 0 1 437.1 331zM444 264H428a8 8 0 0 1 -8-8h0a8 8 0 0 1 8-8h16a8 8 0 0 1 8 8h0A8 8 0 0 1 444 264z\"],\n    \"salesforce\": [640, 512, [], \"f83b\", \"M248.9 245.6h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.7-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.2 23.76a8.63 8.63 0 0 0 -3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93 .95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.4-165.4 136.4-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.9 92.18-213.8-5.17C8.91 428.8-50.19 266.5 53.36 205.6 18.61 126.2 76 32 167.7 32a124.2 124.2 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.7 640 232zm-519.5 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17 .71 1.64-.47 .24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0 -.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1 -19-6.35c-.47-.23-1.42-.71-1.65 .71l-2.4 7.47c-.47 .94 .23 1.18 .23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0 -.24 1.41l2.59 7.06a1 1 0 0 0 1.18 .7c.65 0 6.8-4 16.93-4 4 0 7.06 .71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0 -7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61 .32-21.64-22.78-21.64zM199 200.2a1.11 1.11 0 0 0 -1.18-1.18H188a1.11 1.11 0 0 0 -1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16 .23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12 .15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76 .47-.24 .71-.71 .24-1.88l-2.35-6.83a1.26 1.26 0 0 0 -1.41-.7c-2.59 .94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18 .71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0 -.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1 -19-6.35 1 1 0 0 0 -1.65 .71l-2.35 7.52c-.47 .94 .23 1.18 .23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.1 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14 .94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17 .47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0 -1.17 1.18l-1.42 7.76c0 .7 .24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41 .71-.24 .71-2.59 6.82-2.83 7.53s0 1.41 .47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52 .09 .3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0 -1.18-1.17h-9.4a1.11 1.11 0 0 0 -1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91 .05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0 -.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94 .47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53 .23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59 .74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0 -1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76 .47-.24 .71-.71 .24-1.88l-2.36-6.83a1.26 1.26 0 0 0 -1.41-.7c-2.59 .94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01 .94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\"],\n    \"sass\": [640, 512, [], \"f41e\", \"M301.8 378.9c-.3 .6-.6 1.08 0 0zm249.1-87a131.2 131.2 0 0 0 -58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.8 122.8 0 0 0 -5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4 .8-.7 1.3-.9 1.7 .3-.5 .5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4 .3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.9-65.2-99.07-116.5 1-18.7 7.5-67.8 127.1-127.4 98-48.8 176.4-35.4 189.8-5.6 19.4 42.5-41.89 121.6-143.7 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.2-11.8 61.78-23.8 109.9-90.1 95.77-145.6C386.5 18.32 293-.18 204.6 31.22c-52.69 18.7-109.7 48.1-150.7 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.1 125.7-1.6 .9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.6-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4 .7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.2 201.2 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31 .31 0 0 0 .1 .2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.7 450.1 270 450.1 270a201.2 201.2 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.2 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.4 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9 .8-.5 1.2-.7 1.2-.7 .9-.6 1.9-1.1 2.9-1.7 8.29 30.4 .3 57.2-19.1 78.3zm134.4-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5 .1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\"],\n    \"schlix\": [448, 512, [], \"f3ea\", \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2 .4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"],\n    \"scribd\": [384, 512, [], \"f28a\", \"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9 .6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9 .2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"],\n    \"searchengin\": [460, 512, [], \"f3eb\", \"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"],\n    \"sellcast\": [448, 512, [], \"f2da\", \"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8 .1 .1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8 .1 .1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"],\n    \"sellsy\": [640, 512, [], \"f213\", \"M539.7 237.3c3.064-12.26 4.29-24.82 4.29-37.38C544 107.4 468.6 32 376.1 32c-77.22 0-144.6 53.01-163 127.8-15.32-13.18-34.93-20.53-55.16-20.53-46.27 0-83.96 37.69-83.96 83.96 0 7.354 .92 15.02 3.065 22.37-42.9 20.23-70.79 63.74-70.79 111.2C6.216 424.8 61.68 480 129.4 480h381.2c67.72 0 123.2-55.16 123.2-123.2 .001-56.38-38.92-106-94.07-119.5zM199.9 401.6c0 8.274-7.048 15.32-15.32 15.32H153.6c-8.274 0-15.32-7.048-15.32-15.32V290.6c0-8.273 7.048-15.32 15.32-15.32h30.95c8.274 0 15.32 7.048 15.32 15.32v110.9zm89.48 0c0 8.274-7.048 15.32-15.32 15.32h-30.95c-8.274 0-15.32-7.048-15.32-15.32V270.1c0-8.274 7.048-15.32 15.32-15.32h30.95c8.274 0 15.32 7.048 15.32 15.32v131.5zm89.48 0c0 8.274-7.047 15.32-15.32 15.32h-30.95c-8.274 0-15.32-7.048-15.32-15.32V238.8c0-8.274 7.048-15.32 15.32-15.32h30.95c8.274 0 15.32 7.048 15.32 15.32v162.7zm87.03 0c0 8.274-7.048 15.32-15.32 15.32h-28.5c-8.274 0-15.32-7.048-15.32-15.32V176.9c0-8.579 7.047-15.63 15.32-15.63h28.5c8.274 0 15.32 7.048 15.32 15.63v224.6z\"],\n    \"servicestack\": [496, 512, [], \"f3ec\", \"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"],\n    \"shirtsinbulk\": [448, 512, [], \"f214\", \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\"],\n    \"shopify\": [448, 512, [], \"e057\", \"M388.3 104.1a4.66 4.66 0 0 0 -4.4-4c-2 0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.8 472S388.7 106.5 388.3 104.1zM288.6 70.47a116.7 116.7 0 0 0 -7.21-17.61C271 32.85 255.4 22 237 22a15 15 0 0 0 -4 .4c-.4-.8-1.2-1.2-1.6-2C223.4 11.63 213 7.63 200.6 8c-24 .8-48 18-67.25 48.83-13.61 21.62-24 48.84-26.82 70.06-27.62 8.4-46.83 14.41-47.23 14.81-14 4.4-14.41 4.8-16 18-1.2 10-38 291.8-38 291.8L307.9 504V65.67a41.66 41.66 0 0 0 -4.4 .4S297.9 67.67 288.6 70.47zM233.4 87.69c-16 4.8-33.63 10.4-50.84 15.61 4.8-18.82 14.41-37.63 25.62-50 4.4-4.4 10.41-9.61 17.21-12.81C232.2 54.86 233.8 74.48 233.4 87.69zM200.6 24.44A27.49 27.49 0 0 1 215 28c-6.4 3.2-12.81 8.41-18.81 14.41-15.21 16.42-26.82 42-31.62 66.45-14.42 4.41-28.83 8.81-42 12.81C131.3 83.28 163.8 25.24 200.6 24.44zM154.1 244.6c1.6 25.61 69.25 31.22 73.25 91.66 2.8 47.64-25.22 80.06-65.65 82.47-48.83 3.2-75.65-25.62-75.65-25.62l10.4-44s26.82 20.42 48.44 18.82c14-.8 19.22-12.41 18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44 27.22-93.27 94.47-97.68 26-1.6 39.23 4.81 39.23 4.81L221.4 225.4s-17.21-8-37.63-6.4C154.1 221 153.8 239.8 154.1 244.6zM249.4 82.88c0-12-1.6-29.22-7.21-43.63 18.42 3.6 27.22 24 31.23 36.43Q262.6 78.68 249.4 82.88z\"],\n    \"shopware\": [512, 512, [], \"f5b5\", \"M403.5 455.4A246.2 246.2 0 0 1 256 504C118.8 504 8 393 8 256 8 118.8 119 8 256 8a247.4 247.4 0 0 1 165.7 63.5 3.57 3.57 0 0 1 -2.86 6.18A418.6 418.6 0 0 0 362.1 74c-129.4 0-222.4 53.47-222.4 155.4 0 109 92.13 145.9 176.8 178.7 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.1a3.64 3.64 0 0 0 -1.27-2.44c-51.76-43-93.62-60.48-144.5-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.3 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.1z\"],\n    \"simplybuilt\": [512, 512, [], \"f215\", \"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"],\n    \"sistrix\": [448, 512, [], \"f3ee\", \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"],\n    \"sith\": [448, 512, [], \"f512\", \"M0 32l69.71 118.8-58.86-11.52 69.84 91.03a146.7 146.7 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.8-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.8 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.8 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21 .78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.2 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.2 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.9s89.65 34.18 123.8 0c34.18-34.18 34.19-89.68 0-123.9-17.09-17.09-39.5-25.61-61.92-25.61z\"],\n    \"sitrox\": [448, 512, [], \"e44a\", \"M212.4 .0085V0H448V128H64C64 57.6 141.8 .4753 212.4 .0085zM237.3 192V192C307.1 192.5 384 249.6 384 320H210.8V319.1C140.9 319.6 64 262.4 64 192H237.3zM235.6 511.1C306.3 511.5 384 454.4 384 384H0V512H235.6V511.1z\"],\n    \"sketch\": [512, 512, [], \"f7c6\", \"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\"],\n    \"skyatlas\": [640, 512, [], \"f216\", \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4 .1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"],\n    \"skype\": [448, 512, [], \"f17e\", \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"],\n    \"slack\": [448, 512, [62447, \"slack-hash\"], \"f198\", \"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.8c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.1c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.1 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.1 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.9c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.8c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\"],\n    \"slideshare\": [512, 512, [], \"f1e7\", \"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7 .1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7 .3-56.6 .3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7 .3 92.8 .3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\"],\n    \"snapchat\": [512, 512, [62124, \"snapchat-ghost\"], \"f2ab\", \"M496.9 366.6c-3.373-9.176-9.8-14.09-17.11-18.15-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.61-27.34-52.96-45.42a102.9 102.9 0 0 1 -9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.22 10.22 0 0 1 2.914-3.038c3.918-2.591 7.96-5.22 10.7-6.993 4.885-3.162 8.754-5.667 11.25-7.44 9.362-6.547 15.91-13.5 20-21.28a42.37 42.37 0 0 0 2.1-35.19c-6.2-16.32-21.61-26.45-40.29-26.45a55.54 55.54 0 0 0 -11.72 1.24c-1.029 .224-2.059 .459-3.063 .72 .174-11.16-.074-22.94-1.066-34.53-3.522-40.76-17.79-62.12-32.67-79.16A130.2 130.2 0 0 0 332.1 36.44C309.5 23.55 283.9 17 256 17S202.6 23.55 180 36.44a129.7 129.7 0 0 0 -33.28 26.78c-14.88 17.04-29.15 38.44-32.67 79.16-.992 11.59-1.24 23.43-1.079 34.53-1-.26-2.021-.5-3.051-.719a55.46 55.46 0 0 0 -11.72-1.24c-18.69 0-34.13 10.13-40.3 26.45a42.42 42.42 0 0 0 2.046 35.23c4.105 7.774 10.65 14.73 20.01 21.28 2.48 1.736 6.361 4.24 11.25 7.44 2.641 1.711 6.5 4.216 10.28 6.72a11.05 11.05 0 0 1 3.3 3.311c.794 1.624 .818 3.373-.36 6.6a102 102 0 0 1 -8.94 15.78c-12.08 17.67-29.36 32.65-51.43 44.64C32.35 348.6 20.2 352.8 15.07 366.7c-3.868 10.53-1.339 22.51 8.494 32.6a49.14 49.14 0 0 0 12.4 9.387 134.3 134.3 0 0 0 30.34 12.14 20.02 20.02 0 0 1 6.126 2.741c3.583 3.137 3.075 7.861 7.849 14.78a34.47 34.47 0 0 0 8.977 9.127c10.02 6.919 21.28 7.353 33.21 7.811 10.78 .41 22.99 .881 36.94 5.481 5.778 1.91 11.78 5.605 18.74 9.92C194.8 480.1 217.7 495 255.1 495s61.29-14.12 78.12-24.43c6.907-4.24 12.87-7.9 18.49-9.758 13.95-4.613 26.16-5.072 36.94-5.481 11.93-.459 23.19-.893 33.21-7.812a34.58 34.58 0 0 0 10.22-11.16c3.434-5.84 3.348-9.919 6.572-12.77a18.97 18.97 0 0 1 5.753-2.629A134.9 134.9 0 0 0 476 408.7a48.34 48.34 0 0 0 13.02-10.19l.124-.149C498.4 388.5 500.7 376.9 496.9 366.6zm-34.01 18.28c-20.75 11.46-34.53 10.23-45.26 17.14-9.114 5.865-3.72 18.51-10.34 23.08-8.134 5.617-32.18-.4-63.24 9.858-25.62 8.469-41.96 32.82-88.04 32.82s-62.04-24.3-88.08-32.88c-31-10.26-55.09-4.241-63.24-9.858-6.609-4.563-1.24-17.21-10.34-23.08-10.74-6.907-24.53-5.679-45.26-17.08-13.21-7.291-5.716-11.8-1.314-13.94 75.14-36.38 87.13-92.55 87.67-96.72 .645-5.046 1.364-9.014-4.191-14.15-5.369-4.96-29.19-19.7-35.8-24.32-10.94-7.638-15.75-15.26-12.2-24.64 2.48-6.485 8.531-8.928 14.88-8.928a27.64 27.64 0 0 1 5.965 .67c12 2.6 23.66 8.617 30.39 10.24a10.75 10.75 0 0 0 2.48 .335c3.6 0 4.86-1.811 4.612-5.927-.768-13.13-2.628-38.72-.558-62.64 2.84-32.91 13.44-49.22 26.04-63.64 6.051-6.932 34.48-36.98 88.86-36.98s82.88 29.92 88.93 36.83c12.61 14.42 23.23 30.73 26.04 63.64 2.071 23.92 .285 49.53-.558 62.64-.285 4.327 1.017 5.927 4.613 5.927a10.65 10.65 0 0 0 2.48-.335c6.745-1.624 18.4-7.638 30.4-10.24a27.64 27.64 0 0 1 5.964-.67c6.386 0 12.4 2.48 14.88 8.928 3.546 9.374-1.24 17-12.19 24.64-6.609 4.612-30.43 19.34-35.8 24.32-5.568 5.134-4.836 9.1-4.191 14.15 .533 4.228 12.51 60.4 87.67 96.72C468.6 373 476.1 377.5 462.9 384.9z\"],\n    \"snapchat-square\": [448, 512, [], \"f2ad\", \"M384 32H64A64 64 0 0 0 0 96V416a64 64 0 0 0 64 64H384a64 64 0 0 0 64-64V96A64 64 0 0 0 384 32zm-3.907 319.3-.083 .1a32.36 32.36 0 0 1 -8.717 6.823 90.26 90.26 0 0 1 -20.59 8.2 12.69 12.69 0 0 0 -3.852 1.76c-2.158 1.909-2.1 4.64-4.4 8.55a23.14 23.14 0 0 1 -6.84 7.471c-6.707 4.632-14.24 4.923-22.23 5.23-7.214 .274-15.39 .581-24.73 3.669-3.761 1.245-7.753 3.694-12.38 6.533-11.27 6.9-26.68 16.35-52.3 16.35s-40.92-9.4-52.11-16.28c-4.657-2.888-8.675-5.362-12.54-6.64-9.339-3.08-17.52-3.4-24.73-3.67-7.986-.307-15.52-.6-22.23-5.229a23.08 23.08 0 0 1 -6.01-6.11c-3.2-4.632-2.855-7.8-5.254-9.895a13.43 13.43 0 0 0 -4.1-1.834 89.99 89.99 0 0 1 -20.31-8.127 32.9 32.9 0 0 1 -8.3-6.284c-6.583-6.757-8.276-14.78-5.686-21.82 3.436-9.338 11.57-12.11 19.4-16.26 14.78-8.027 26.35-18.06 34.43-29.88a68.24 68.24 0 0 0 5.985-10.57c.789-2.158 .772-3.329 .241-4.416a7.386 7.386 0 0 0 -2.208-2.217c-2.532-1.676-5.113-3.353-6.882-4.5-3.27-2.141-5.868-3.818-7.529-4.98-6.267-4.383-10.65-9.04-13.4-14.24a28.4 28.4 0 0 1 -1.369-23.58c4.134-10.92 14.47-17.71 26.98-17.71a37.14 37.14 0 0 1 7.845 .83c.689 .15 1.37 .307 2.042 .482-.108-7.43 .058-15.36 .722-23.12 2.358-27.26 11.91-41.59 21.87-52.99a86.84 86.84 0 0 1 22.28-17.93C188.3 100.4 205.3 96 224 96s35.83 4.383 50.94 13.02a87.17 87.17 0 0 1 22.24 17.9c9.961 11.41 19.52 25.71 21.87 52.99a231.2 231.2 0 0 1 .713 23.12c.673-.174 1.362-.332 2.051-.481a37.13 37.13 0 0 1 7.844-.83c12.5 0 22.82 6.782 26.97 17.71a28.37 28.37 0 0 1 -1.4 23.56c-2.74 5.2-7.123 9.861-13.39 14.24-1.668 1.187-4.258 2.864-7.529 4.981-1.835 1.187-4.541 2.947-7.164 4.682a6.856 6.856 0 0 0 -1.951 2.034c-.506 1.046-.539 2.191 .166 4.208a69.01 69.01 0 0 0 6.085 10.79c8.268 12.1 20.19 22.31 35.45 30.41 1.486 .772 2.98 1.5 4.441 2.258 .722 .332 1.569 .763 2.491 1.3 4.9 2.723 9.2 6.01 11.45 12.15C387.8 336.9 386.3 344.7 380.1 351.3zm-16.72-18.46c-50.31-24.31-58.33-61.92-58.69-64.75-.431-3.379-.921-6.035 2.806-9.472 3.594-3.328 19.54-13.19 23.97-16.28 7.33-5.114 10.53-10.22 8.16-16.5-1.66-4.316-5.686-5.976-9.961-5.976a18.5 18.5 0 0 0 -3.993 .448c-8.035 1.743-15.84 5.769-20.35 6.857a7.1 7.1 0 0 1 -1.66 .224c-2.408 0-3.279-1.071-3.088-3.968 .564-8.783 1.759-25.92 .373-41.94-1.884-22.03-8.99-32.95-17.43-42.6-4.051-4.624-23.14-24.65-59.54-24.65S168.5 134.4 164.5 139c-8.434 9.654-15.53 20.57-17.43 42.6-1.386 16.01-.141 33.15 .373 41.94 .166 2.756-.68 3.968-3.088 3.968a7.1 7.1 0 0 1 -1.66-.224c-4.507-1.087-12.31-5.113-20.35-6.856a18.49 18.49 0 0 0 -3.993-.449c-4.25 0-8.3 1.636-9.961 5.977-2.374 6.276 .847 11.38 8.168 16.49 4.425 3.088 20.37 12.96 23.97 16.28 3.719 3.437 3.237 6.093 2.805 9.471-.356 2.79-8.384 40.39-58.69 64.75-2.946 1.428-7.96 4.45 .88 9.331 13.88 7.628 23.11 6.807 30.3 11.43 6.093 3.927 2.5 12.39 6.923 15.45 5.454 3.76 21.58-.266 42.33 6.6 17.43 5.744 28.12 22.01 58.96 22.01s41.79-16.3 58.94-21.97c20.8-6.865 36.89-2.839 42.34-6.6 4.433-3.055 .822-11.52 6.923-15.45 7.181-4.624 16.41-3.8 30.3-11.47C371.4 337.4 366.3 334.3 363.4 332.8z\"],\n    \"soundcloud\": [640, 512, [], \"f1be\", \"M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2 .8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1 .6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7 .6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3 .1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z\"],\n    \"sourcetree\": [448, 512, [], \"f7d3\", \"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.9 202.9 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.2 203.2 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"],\n    \"speakap\": [448, 512, [], \"f3f3\", \"M64 391.8C-15.41 303.6-8 167.4 80.64 87.64s224.8-73 304.2 15.24 72 224.4-16.64 304.1c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.9 35-346.2-67.5zm213.3-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33 .29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23 .18 96.42 .33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75 .41-23.25 31-25.37 37.53-25.26 .43 0 26.62 .26 39.62 17.37z\"],\n    \"speaker-deck\": [512, 512, [], \"f83c\", \"M213.9 296H100a100 100 0 0 1 0-200h132.8a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.8a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.9c26.48 0 26.46-40 0-40zM298 416a120.2 120.2 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0 -19.66-20H296.4a60.77 60.77 0 0 0 0-80h136.9c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\"],\n    \"spotify\": [496, 512, [], \"f1bc\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"],\n    \"square-font-awesome\": [448, 512, [], \"f425\", \"M384.5 32.5h-320c-35.3 0-64 28.7-64 64v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64v-320C448.5 61.2 419.8 32.5 384.5 32.5zM336.5 312.5c-31.6 11.2-41.2 16-59.8 16c-31.4 0-43.2-16-74.6-16c-10.2 0-18.2 1.6-25.6 4v-32c7.4-2.2 15.4-4 25.6-4c31.2 0 43.2 16 74.6 16c10.2 0 17.8-1.4 27.8-4.6v-96c-10 3.2-17.6 4.6-27.8 4.6c-31.4 0-43.2-16-74.6-16c-25.4 0-37.4 10.4-57.6 14.4v153.6c0 8.8-7.2 16-16 16c-8.8 0-16-7.2-16-16v-192c0-8.8 7.2-16 16-16c8.8 0 16 7.2 16 16v6.4c20.2-4 32.2-14.4 57.6-14.4c31.2 0 43.2 16 74.6 16c18.6 0 28.2-4.8 59.8-16V312.5z\"],\n    \"square-font-awesome-stroke\": [448, 512, [\"font-awesome-alt\"], \"f35c\", \"M201.6 152c-25.4 0-37.4 10.4-57.6 14.4V160c0-8.8-7.2-16-16-16s-16 7.2-16 16v192c0 .8 .1 1.6 .2 2.4c.1 .4 .1 .8 .2 1.2c1.6 7.1 8 12.4 15.6 12.4s14-5.3 15.6-12.4c.1-.4 .2-.8 .2-1.2c.1-.8 .2-1.6 .2-2.4V198.4c4-.8 7.7-1.8 11.2-3c14.3-4.7 26-11.4 46.4-11.4c31.4 0 43.2 16 74.6 16c8.9 0 15.9-1.1 24.2-3.5c1.2-.3 2.4-.7 3.6-1.1v96c-10 3.2-17.6 4.6-27.8 4.6c-31.4 0-43.4-16-74.6-16c-10.2 0-18.2 1.8-25.6 4v32c7.4-2.4 15.4-4 25.6-4c31.4 0 43.2 16 74.6 16c18.6 0 28.2-4.8 59.8-16V152c-31.6 11.2-41.2 16-59.8 16C244.8 168 232.8 152 201.6 152zM384 32H64C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96C448 60.7 419.3 32 384 32zM416 416c0 17.6-14.4 32-32 32H64c-17.6 0-32-14.4-32-32V96c0-17.6 14.4-32 32-32h320c17.6 0 32 14.4 32 32V416z\"],\n    \"squarespace\": [512, 512, [], \"f5be\", \"M186.1 343.3c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.2 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.1 445.1c19.27 19.29 50.53 19.31 69.82 .04l.04-.04 119.3-119.2c38.59-38.59 38.59-101.1 0-139.7-38.59-38.59-101.2-38.59-139.7 0l-157.2 157.2zm244.5-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.2c-19.27 19.29-50.53 19.31-69.82 .05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01 .01c-9.65 9.64-9.66 25.28-.02 34.93l.02 .02c38.58 38.57 101.1 38.57 139.7 0l157.2-157.2c9.65-9.65 9.65-25.29 .01-34.93zm-261.1 87.33l157.2-157.2c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.7 290.9c-19.28 19.29-50.56 19.3-69.85 .01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02 .02L28.93 186.1c-38.58 38.59-38.58 101.1 0 139.7 38.6 38.59 101.1 38.59 139.7 .01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.2-157.2c19.28-19.29 50.55-19.3 69.84-.02l.02 .02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.1-38.59-139.7 0L81.33 238.5c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"],\n    \"stack-exchange\": [448, 512, [], \"f18d\", \"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"],\n    \"stack-overflow\": [384, 512, [], \"f16c\", \"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"],\n    \"stackpath\": [448, 512, [], \"f842\", \"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.8c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18 .56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.4-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.2h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.9 325L347 186.8h-31.09L268 325zm106.5-138.2h-31.09L325.5 325h29.94z\"],\n    \"staylinked\": [440, 512, [], \"f3f5\", \"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7 .7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3 .4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7 .9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1 .1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9 .5l160.4 159c3.7 3.5 10 3.7 14.1 .5l45.8-35.8c4.1-3.2 4.4-8.7 .7-12.2z\"],\n    \"steam\": [496, 512, [], \"f1b6\", \"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3 .1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"],\n    \"steam-square\": [448, 512, [], \"f1b7\", \"M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4 .5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z\"],\n    \"steam-symbol\": [448, 512, [], \"f3f6\", \"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5 .2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9 .1 76.2-33.9 76.2-76.2z\"],\n    \"sticker-mule\": [576, 512, [], \"f3f7\", \"M561.7 199.6c-1.3 .3 .3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3 .5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8 .4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5 .5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5 .5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4 .5 1 1 2 1.5 3.5 .5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5 .5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5 .3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6 .5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3 .8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"],\n    \"strava\": [384, 512, [], \"f428\", \"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\"],\n    \"stripe\": [640, 512, [], \"f429\", \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3 .6-11.6 .6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4 .1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6 .1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4 .1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\"],\n    \"stripe-s\": [384, 512, [], \"f42a\", \"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.1 396.1 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"],\n    \"studiovinari\": [512, 512, [], \"f3f8\", \"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3 .7 20.3 .7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"],\n    \"stumbleupon\": [512, 512, [], \"f1a4\", \"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"],\n    \"stumbleupon-circle\": [496, 512, [], \"f1a3\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"],\n    \"superpowers\": [448, 512, [], \"f2dd\", \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"],\n    \"supple\": [640, 512, [], \"f3f9\", \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7 .4 15.5 .6 23.4 .6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6 .2 23.3 .5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"],\n    \"suse\": [640, 512, [], \"f7d6\", \"M471.1 102.7s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.12 307 7 335.1a111 111 0 0 0 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2 .3 27.8 24.3 42.6 41.5 42.6a49 49 0 0 0 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9 .5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5 .4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3 .5-76.2-25.4-81.6-28.2-.3-.4 .1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7 .8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3 .1-.1-.9-.3-.9 .7zm60.4 72.8a37.54 37.54 0 0 1 38.9-36.3c33.4 1.2 48.8 42.3 24.4 65.2-24.2 22.7-64.4 4.6-63.3-28.9zm38.6-25.3a26.27 26.27 0 1 0 25.4 27.2 26.19 26.19 0 0 0 -25.4-27.2zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.64 0 15.64z\"],\n    \"swift\": [448, 512, [], \"f8e1\", \"M448 156.1c0-4.51-.08-9-.2-13.52a196.3 196.3 0 0 0 -2.58-29.42 99.62 99.62 0 0 0 -9.22-28A94.08 94.08 0 0 0 394.8 44a99.17 99.17 0 0 0 -28-9.22 195 195 0 0 0 -29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.1c-4.51 0-9 .08-13.52 .2-2.45 .07-4.91 .15-7.37 .27a171.7 171.7 0 0 0 -22.06 2.32 103.1 103.1 0 0 0 -21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0 -18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0 -9.22 28 196.3 196.3 0 0 0 -2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.8c0 4.51 .08 9 .21 13.51a196.1 196.1 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5 .12 9 .17 13.52 .2H323.9c4.51 0 9-.08 13.52-.2a196.6 196.6 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.8a99.3 99.3 0 0 0 9.22-28 194.8 194.8 0 0 0 2.59-29.42c.12-4.5 .17-9 .2-13.51V172.1c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42 .25c-39.5 21-92.53 22.54-145.9-.38A234.6 234.6 0 0 1 45 290.1a230.6 230.6 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.1-147.2a197.1 197.1 0 0 1 -18.78-25.9c43.7 40 112.7 90.22 137.5 104.1-52.57-55.49-98.89-123.9-96.72-121.7 82.79 83.42 159.2 130.6 159.2 130.6 2.88 1.58 5 2.85 6.73 4a127.4 127.4 0 0 0 4.16-12.47c13.22-48.33-1.66-103.6-35.31-149.2C329.6 141.8 375 229.3 356.4 303.4c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z\"],\n    \"symfony\": [512, 512, [], \"f83d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.7 143.5c-11.47 .41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.8 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.7-29 34.46-58.4 39.82-71.58 40.26-24.65 .85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71 .11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.3 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.2 140.1 251.9 197 262 205.3c37.17-109 100.5-105.5 102.4-105.5 25.16-.81 44.19 10.59 44.83 28.65 .25 7.69-4.17 22.59-19.52 23.13z\"],\n    \"teamspeak\": [512, 512, [], \"f4f9\", \"M244.2 346.8c2.4-12.3-12-30-32.4-48.7-20.9-19.2-48.2-39.1-63.4-46.6-21.7-12-41.7-1.8-46.3 22.7-5 26.2 0 51.4 14.5 73.9 10.2 15.5 25.4 22.7 43.4 24 11.6 .6 52.5 2.2 61.7-1 11.9-4.3 20.1-11.8 22.5-24.3zm205 20.8a5.22 5.22 0 0 0 -8.3 2.4c-8 25.4-44.7 112.5-172.1 121.5-149.7 10.5 80.3 43.6 145.4-6.4 22.7-17.4 47.6-35 46.6-85.4-.4-10.1-4.9-26.69-11.6-32.1zm62-122.4c-.3-18.9-8.6-33.4-26-42.2-2.9-1.3-5-2.7-5.9-6.4A222.6 222.6 0 0 0 438.9 103c-1.1-1.5-3.5-3.2-2.2-5 8.5-11.5-.3-18-7-24.4Q321.4-31.11 177.4 13.09c-40.1 12.3-73.9 35.6-102 67.4-4 4.3-6.7 9.1-3 14.5 3 4 1.3 6.2-1 9.3C51.6 132 38.2 162.6 32.1 196c-.7 4.3-2.9 6-6.4 7.8-14.2 7-22.5 18.5-24.9 34L0 264.3v20.9c0 30.8 21 50.4 51.8 49 7.7-.3 11.7-4.3 12-11.5 2-77.5-2.4-95.4 3.7-125.8C92.1 72.39 234.3 5 345.3 65.39 411.4 102 445.7 159 447.6 234.8c.8 28.2 0 56.5 0 84.6 0 7 2.2 12.5 9.4 14.2 24.1 5 49.2-12 53.2-36.7 2.9-17.1 1-34.5 1-51.7zm-159.6 131.5c36.5 2.8 59.3-28.5 58.4-60.5-2.1-45.2-66.2-16.5-87.8-8-73.2 28.1-45 54.9-22.2 60.8z\"],\n    \"telegram\": [496, 512, [62462, \"telegram-plane\"], \"f2c6\", \"M248 8C111 8 0 119 0 256S111 504 248 504 496 392.1 496 256 384.1 8 248 8zM362.1 176.7c-3.732 39.22-19.88 134.4-28.1 178.3-3.476 18.58-10.32 24.82-16.95 25.42-14.4 1.326-25.34-9.517-39.29-18.66-21.83-14.31-34.16-23.22-55.35-37.18-24.49-16.14-8.612-25 5.342-39.5 3.652-3.793 67.11-61.51 68.33-66.75 .153-.655 .3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283 .746-104.6 69.14-14.85 10.19-26.89 9.934c-8.855-.191-25.89-5.006-38.55-9.123-15.53-5.048-27.88-7.717-26.8-16.29q.84-6.7 18.45-13.7 108.4-47.25 144.6-62.3c68.87-28.65 83.18-33.62 92.51-33.79 2.052-.034 6.639 .474 9.61 2.885a10.45 10.45 0 0 1 3.53 6.716A43.76 43.76 0 0 1 362.1 176.7z\"],\n    \"tencent-weibo\": [384, 512, [], \"f1d5\", \"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1 .1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"],\n    \"the-red-yeti\": [512, 512, [], \"f69d\", \"M488.2 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0 -25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5 .5a239.4 239.4 0 0 0 -68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0 -.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.3 194.3 0 0 0 -46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.2 200.2 0 0 0 -27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7 .7 3.4 1.2 5.2 0 25.5 .4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.8 181.8 0 0 0 495 255a44.74 44.74 0 0 0 -6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.4 242.4 0 0 1 -27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1 -1.7-15.2c5.4 .5 8.8 3.4 9.3 10.1 .5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8 .9-.7 14.8h-2.5a62.32 62.32 0 0 0 -8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5 .5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.7 234.7 0 0 0 -6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1 .5c-11.8 13.5-27.8 21.9-48.5 24.8a201.3 201.3 0 0 1 -23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0 -14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7 .5 1.2c2 .2 3.9 .5 6.2 .7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4 .5 13 1 19.4 1.2 6.4 0 8.4 .5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.1 141.1 0 0 1 -3 28.3 209.9 209.9 0 0 1 -16 46l2.5 .5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2 .2-.2 .2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.3-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3 .5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.6 262.6 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2 .7 89.5zm115.3-214.4l-2.5 .5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.8 214.8 0 0 1 -93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2 .4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7 .5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.2 254.2 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0 -14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2 .5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5 .5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6 .3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5 .5 .5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0 -.5-1.7 14.21 14.21 0 0 0 -13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0 -2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1 -11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9 .5 .5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1 .5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2 .5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1 .5c-5.9 1.2-12.3 4.2-19.4 8.4z\"],\n    \"themeco\": [448, 512, [], \"f5c6\", \"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.8c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.8 503.7c-9.93 5.66-26 5.57-35.85-.21L17.86 395.1C8 389.3 0 375.4 0 364V146.7c0-11.44 8-25.36 17.91-31.08zm-77.4 199.8c-15.94 0-31.89 .14-47.83 .14v101.4H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.1 100.3l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.6h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.6-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\"],\n    \"themeisle\": [512, 512, [], \"f2b2\", \"M208 88.29c0-10 6.286-21.71 17.72-21.71 11.14 0 17.71 11.71 17.71 21.71 0 10.28-6.572 21.71-17.71 21.71C214.3 110 208 98.57 208 88.29zm304 160c0 36-11.43 102.3-36.29 129.7-22.86 24.86-87.43 61.14-120.9 70.57l-1.143 .286v32.57c0 16.29-12.57 30.57-29.14 30.57-10 0-19.43-5.714-24.57-14.29-5.427 8.572-14.86 14.29-24.86 14.29-10 0-19.43-5.714-24.86-14.29-5.142 8.572-14.57 14.29-24.57 14.29-10.29 0-19.43-5.714-24.86-14.29-5.143 8.572-14.57 14.29-24.57 14.29-18.86 0-29.43-15.71-29.43-32.86-16.29 12.28-35.72 19.43-56.57 19.43-22 0-43.43-8.285-60.29-22.86 10.28-.286 20.57-2.286 30.28-5.714-20.86-5.714-39.43-18.86-52-36.29 21.37 4.645 46.21 1.673 67.14-11.14-22-22-56.57-58.86-68.57-87.43C1.143 321.7 0 303.7 0 289.4c0-49.71 20.29-160 86.29-160 10.57 0 18.86 4.858 23.14 14.86a158.8 158.8 0 0 1 12-15.43c2-2.572 5.714-5.429 7.143-8.286 7.999-12.57 11.71-21.14 21.71-34C182.6 45.43 232 17.14 285.1 17.14c6 0 12 .285 17.71 1.143C313.7 6.571 328.9 0 344.6 0c14.57 0 29.71 6 40 16.29 .857 .858 1.428 2.286 1.428 3.428 0 3.714-10.28 13.43-12.86 16.29 4.286 1.429 15.71 6.858 15.71 12 0 2.857-2.857 5.143-4.571 7.143 31.43 27.71 49.43 67.14 56.29 108 4.286-5.143 10.28-8.572 17.14-8.572 10.57 0 20.86 7.144 28.57 14C507.1 187.1 512 221.7 512 248.3zM188 89.43c0 18.29 12.57 37.14 32.29 37.14 19.71 0 32.28-18.86 32.28-37.14 0-18-12.57-36.86-32.28-36.86-19.72 0-32.29 18.86-32.29 36.86zM237.7 194c0-19.71 3.714-39.14 8.571-58.29-52.04 79.53-13.53 184.6 68.86 184.6 21.43 0 42.57-7.714 60-20 2-7.429 3.714-14.86 3.714-22.57 0-14.29-6.286-21.43-20.57-21.43-4.571 0-9.143 .857-13.43 1.714-63.34 12.67-107.1 3.669-107.1-63.1zm-41.14 254.9c0-11.14-8.858-20.86-20.29-20.86-11.43 0-20 9.715-20 20.86v32.57c0 11.14 8.571 21.14 20 21.14 11.43 0 20.29-9.715 20.29-21.14v-32.57zm49.14 0c0-11.14-8.572-20.86-20-20.86-11.43 0-20.29 9.715-20.29 20.86v32.57c0 11.14 8.857 21.14 20.29 21.14 11.43 0 20-10 20-21.14v-32.57zm49.71 0c0-11.14-8.857-20.86-20.28-20.86-11.43 0-20.29 9.715-20.29 20.86v32.57c0 11.14 8.857 21.14 20.29 21.14 11.43 0 20.28-9.715 20.28-21.14v-32.57zm49.72 0c0-11.14-8.857-20.86-20.29-20.86-11.43 0-20.29 9.715-20.29 20.86v32.57c0 11.14 8.858 21.14 20.29 21.14 11.43 0 20.29-10 20.29-21.14v-32.57zM421.7 286c-30.86 59.14-90.29 102.6-158.6 102.6-96.57 0-160.6-84.57-160.6-176.6 0-16.86 2-33.43 6-49.71-20 33.72-29.71 72.57-29.71 111.4 0 60.29 24.86 121.7 71.43 160.9 5.143-9.714 14.86-16.29 26-16.29 10 0 19.43 5.714 24.57 14.29 5.429-8.571 14.57-14.29 24.86-14.29 10 0 19.43 5.714 24.57 14.29 5.429-8.571 14.86-14.29 24.86-14.29 10 0 19.43 5.714 24.86 14.29 5.143-8.571 14.57-14.29 24.57-14.29 10.86 0 20.86 6.572 25.71 16 43.43-36.29 68.57-92 71.43-148.3zm10.57-99.71c0-53.71-34.57-105.7-92.57-105.7-30.28 0-58.57 15.14-78.86 36.86C240.9 183.8 233.4 254 302.3 254c28.81 0 97.36-28.54 84.29 36.86 28.86-26 45.71-65.71 45.71-104.6z\"],\n    \"think-peaks\": [576, 512, [], \"f731\", \"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5 .1-235.8-404.6z\"],\n    \"tiktok\": [448, 512, [], \"e07b\", \"M448 209.9a210.1 210.1 0 0 1 -122.8-39.25V349.4A162.6 162.6 0 1 1 185 188.3V278.2a74.62 74.62 0 1 0 52.23 71.18V0l88 0a121.2 121.2 0 0 0 1.86 22.17h0A122.2 122.2 0 0 0 381 102.4a121.4 121.4 0 0 0 67 20.14z\"],\n    \"trade-federation\": [496, 512, [], \"f513\", \"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5 .1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\"],\n    \"trello\": [448, 512, [], \"f181\", \"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8 .1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\"],\n    \"tumblr\": [320, 512, [], \"f173\", \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1 .8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5 .9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"],\n    \"tumblr-square\": [448, 512, [], \"f174\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2 .5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2 .5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z\"],\n    \"twitch\": [512, 512, [], \"f1e8\", \"M391.2 103.5H352.5v109.7h38.63zM285 103H246.4V212.8H285zM120.8 0 24.31 91.42V420.6H140.1V512l96.53-91.42h77.25L487.7 256V0zM449.1 237.8l-77.22 73.12H294.6l-67.6 64v-64H140.1V36.58H449.1z\"],\n    \"twitter\": [512, 512, [], \"f099\", \"M459.4 151.7c.325 4.548 .325 9.097 .325 13.65 0 138.7-105.6 298.6-298.6 298.6-59.45 0-114.7-17.22-161.1-47.11 8.447 .974 16.57 1.299 25.34 1.299 49.06 0 94.21-16.57 130.3-44.83-46.13-.975-84.79-31.19-98.11-72.77 6.498 .974 12.99 1.624 19.82 1.624 9.421 0 18.84-1.3 27.61-3.573-48.08-9.747-84.14-51.98-84.14-102.1v-1.299c13.97 7.797 30.21 12.67 47.43 13.32-28.26-18.84-46.78-51.01-46.78-87.39 0-19.49 5.197-37.36 14.29-52.95 51.65 63.67 129.3 105.3 216.4 109.8-1.624-7.797-2.599-15.92-2.599-24.04 0-57.83 46.78-104.9 104.9-104.9 30.21 0 57.5 12.67 76.67 33.14 23.72-4.548 46.46-13.32 66.6-25.34-7.798 24.37-24.37 44.83-46.13 57.83 21.12-2.273 41.58-8.122 60.43-16.24-14.29 20.79-32.16 39.31-52.63 54.25z\"],\n    \"twitter-square\": [448, 512, [], \"f081\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8 .2 5.7 .2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3 .6 10.4 .8 15.8 .8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.45 65.45 0 0 1 -29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z\"],\n    \"typo3\": [448, 512, [], \"f42b\", \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"],\n    \"uber\": [448, 512, [], \"f402\", \"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"],\n    \"ubuntu\": [496, 512, [], \"f7df\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm52.7 93c8.8-15.2 28.3-20.5 43.5-11.7 15.3 8.8 20.5 28.3 11.7 43.6-8.8 15.2-28.3 20.5-43.5 11.7-15.3-8.9-20.5-28.4-11.7-43.6zM87.4 287.9c-17.6 0-31.9-14.3-31.9-31.9 0-17.6 14.3-31.9 31.9-31.9 17.6 0 31.9 14.3 31.9 31.9 0 17.6-14.3 31.9-31.9 31.9zm28.1 3.1c22.3-17.9 22.4-51.9 0-69.9 8.6-32.8 29.1-60.7 56.5-79.1l23.7 39.6c-51.5 36.3-51.5 112.5 0 148.8L172 370c-27.4-18.3-47.8-46.3-56.5-79zm228.7 131.7c-15.3 8.8-34.7 3.6-43.5-11.7-8.8-15.3-3.6-34.8 11.7-43.6 15.2-8.8 34.7-3.6 43.5 11.7 8.8 15.3 3.6 34.8-11.7 43.6zm.3-69.5c-26.7-10.3-56.1 6.6-60.5 35-5.2 1.4-48.9 14.3-96.7-9.4l22.5-40.3c57 26.5 123.4-11.7 128.9-74.4l46.1 .7c-2.3 34.5-17.3 65.5-40.3 88.4zm-5.9-105.3c-5.4-62-71.3-101.2-128.9-74.4l-22.5-40.3c47.9-23.7 91.5-10.8 96.7-9.4 4.4 28.3 33.8 45.3 60.5 35 23.1 22.9 38 53.9 40.2 88.5l-46 .6z\"],\n    \"uikit\": [448, 512, [], \"f403\", \"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"],\n    \"umbraco\": [510, 512, [], \"f8e8\", \"M255.4 8C118.4 7.83 7.14 118.7 7 255.7c-.07 137 111 248.2 248 248.3 136.9 0 247.8-110.7 248-247.7S392.3 8.17 255.4 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78 .22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.8 224.8 0 0 1 0-30.71 418.4 418.4 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.6 380.6 0 0 0 -2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.6 242.6 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0 -2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05 .81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.7 415.7 0 0 1 3.61 43.88 228.1 228.1 0 0 1 -.04 30.73z\"],\n    \"uncharted\": [448, 512, [], \"e084\", \"M171.7 232.8A5.381 5.381 0 0 0 176.7 229.5 48.08 48.08 0 0 1 191.6 204.2c1.243-.828 1.657-2.484 1.657-4.141a4.22 4.22 0 0 0 -2.071-3.312L74.43 128.5 148.1 85a9.941 9.941 0 0 0 4.968-8.281 9.108 9.108 0 0 0 -4.968-8.281L126.6 55.6a9.748 9.748 0 0 0 -9.523 0l-100.2 57.97a9.943 9.943 0 0 0 -4.969 8.281V236.1a9.109 9.109 0 0 0 4.969 8.281L39.24 258.1a8.829 8.829 0 0 0 4.968 1.242 9.4 9.4 0 0 0 6.625-2.484 10.8 10.8 0 0 0 2.9-7.039V164.5L169.7 232.4A4.5 4.5 0 0 0 171.7 232.8zM323.3 377.7a12.48 12.48 0 0 0 -4.969 1.242l-74.53 43.06V287.9c0-2.9-2.9-5.8-6.211-4.555a53.04 53.04 0 0 1 -28.98 .414 4.86 4.86 0 0 0 -6.21 4.555V421.6l-74.53-43.06a8.83 8.83 0 0 0 -4.969-1.242 9.631 9.631 0 0 0 -9.523 9.523v26.08a9.107 9.107 0 0 0 4.969 8.281l100.2 57.55A8.829 8.829 0 0 0 223.5 480a11.03 11.03 0 0 0 4.969-1.242l100.2-57.55a9.941 9.941 0 0 0 4.968-8.281V386.8C332.8 382.3 328.2 377.7 323.3 377.7zM286 78a23 23 0 1 0 -23-23A23 23 0 0 0 286 78zm63.63-10.09a23 23 0 1 0 23 23A23 23 0 0 0 349.6 67.91zM412.8 151.6a23 23 0 1 0 -23-23A23 23 0 0 0 412.8 151.6zm-63.18-9.2a23 23 0 1 0 23 23A23 23 0 0 0 349.6 142.4zm-63.63 83.24a23 23 0 1 0 -23-23A23 23 0 0 0 286 225.6zm-62.07 36.36a23 23 0 1 0 -23-23A23 23 0 0 0 223.9 262zm188.9-82.36a23 23 0 1 0 23 23A23 23 0 0 0 412.8 179.6zm0 72.27a23 23 0 1 0 23 23A23 23 0 0 0 412.8 251.9z\"],\n    \"uniregistry\": [384, 512, [], \"f404\", \"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5 .2-4.9 .2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\"],\n    \"unity\": [448, 512, [], \"e049\", \"M243.6 91.6L323.7 138.4C326.6 140 326.7 144.6 323.7 146.2L228.5 201.9C225.6 203.6 222.2 203.4 219.5 201.9L124.4 146.2C121.4 144.6 121.4 139.1 124.4 138.4L204.4 91.6V0L0 119.4V358.3L78.38 312.5V218.9C78.33 215.6 82.21 213.2 85.09 214.1L180.3 270.6C183.2 272.3 184.8 275.3 184.8 278.5V389.7C184.8 393 180.1 395.4 178.1 393.6L97.97 346.8L19.58 392.6L224 512L428.4 392.6L350 346.8L269.9 393.6C267.1 395.3 263.1 393.1 263.2 389.7V278.5C263.2 275.1 265.1 272.2 267.7 270.6L362.9 214.1C365.7 213.2 369.7 215.5 369.6 218.9V312.5L448 358.3V119.4L243.6 0V91.6z\"],\n    \"unsplash\": [448, 512, [], \"e07c\", \"M448 230.2V480H0V230.2H141.1V355.1H306.9V230.2zM306.9 32H141.1V156.9H306.9z\"],\n    \"untappd\": [640, 512, [], \"f405\", \"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1 .6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4 .9-2.5 4.4-2.3 7.4 .1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4 .9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3 .5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5 .1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6 .3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6 .5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"],\n    \"ups\": [384, 512, [], \"f7e0\", \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4 .6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2 .6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"],\n    \"usb\": [640, 512, [], \"f287\", \"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4 .8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9 .3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"],\n    \"usps\": [576, 512, [], \"f7e1\", \"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8 .1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\"],\n    \"ussunnah\": [512, 512, [], \"f407\", \"M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2 .8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7 .2-9.4 .5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5 .2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4 15 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6 .5 9.3 .5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 .8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3 .2 .6 .5 1.4 .6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2 .3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8 .5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6 .9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z\"],\n    \"vaadin\": [448, 512, [], \"f408\", \"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"],\n    \"viacoin\": [384, 512, [], \"f237\", \"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"],\n    \"viadeo\": [448, 512, [], \"f2a9\", \"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"],\n    \"viadeo-square\": [448, 512, [], \"f2aa\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4 .2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z\"],\n    \"viber\": [512, 512, [], \"f409\", \"M444 49.9C431.3 38.2 379.9 .9 265.3 .4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9 .4-85.7 .4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9 .4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9 .6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4 .7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5 .9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9 .1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7 .5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1 .8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"],\n    \"vimeo\": [448, 512, [], \"f40a\", \"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3 .9 49 22.5 47.1 64.7z\"],\n    \"vimeo-square\": [448, 512, [], \"f194\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z\"],\n    \"vimeo-v\": [448, 512, [], \"f27d\", \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"],\n    \"vine\": [384, 512, [], \"f1ca\", \"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"],\n    \"vk\": [448, 512, [], \"f189\", \"M31.49 63.49C0 94.98 0 145.7 0 247V264.1C0 366.3 0 417 31.49 448.5C62.98 480 113.7 480 215 480H232.1C334.3 480 385 480 416.5 448.5C448 417 448 366.3 448 264.1V247C448 145.7 448 94.98 416.5 63.49C385 32 334.3 32 232.1 32H215C113.7 32 62.98 32 31.49 63.49zM75.6 168.3H126.7C128.4 253.8 166.1 289.1 196 297.4V168.3H244.2V242C273.7 238.8 304.6 205.2 315.1 168.3H363.3C359.3 187.4 351.5 205.6 340.2 221.6C328.9 237.6 314.5 251.1 297.7 261.2C316.4 270.5 332.9 283.6 346.1 299.8C359.4 315.9 369 334.6 374.5 354.7H321.4C316.6 337.3 306.6 321.6 292.9 309.8C279.1 297.9 262.2 290.4 244.2 288.1V354.7H238.4C136.3 354.7 78.03 284.7 75.6 168.3z\"],\n    \"vnv\": [640, 512, [], \"f40b\", \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"],\n    \"vuejs\": [448, 512, [], \"f41f\", \"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"],\n    \"watchman-monitoring\": [512, 512, [], \"e087\", \"M256 16C123.5 16 16 123.5 16 256S123.5 496 256 496 496 388.5 496 256 388.5 16 256 16zM121.7 429.1C70.06 388.1 36.74 326.3 36.74 256a218.5 218.5 0 0 1 9.587-64.12l102.9-17.9-.121 10.97-13.94 2.013s-.144 12.5-.144 19.55a12.78 12.78 0 0 0 4.887 10.35l9.468 7.4zm105.7-283.3 8.48-7.618s6.934-5.38-.143-9.344c-7.188-4.024-39.53-34.5-39.53-34.5-5.348-5.477-8.257-7.347-15.46 0 0 0-32.34 30.47-39.53 34.5-7.078 3.964-.144 9.344-.144 9.344l8.481 7.618-.048 4.369L75.98 131c39.64-56.94 105.5-94.3 180-94.3A218.8 218.8 0 0 1 420.9 111.8l-193.5 37.7zm34.06 329.3-33.9-250.9 9.467-7.4a12.78 12.78 0 0 0 4.888-10.35c0-7.044-.144-19.55-.144-19.55l-13.94-2.013-.116-10.47 241.7 31.39A218.9 218.9 0 0 1 475.3 256C475.3 375.1 379.8 472.2 261.4 475.1z\"],\n    \"waze\": [512, 512, [], \"f83f\", \"M502.2 201.7C516.7 287.5 471.2 369.6 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1 -51.57-49c-6.44 .19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.9c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.3C94.8 95.2 193.1 32 288.1 32c102.5 0 197.1 70.67 214.1 169.7zM373.5 388.3c42-19.18 81.33-56.71 96.29-102.1 40.48-123.1-64.15-228-181.7-228-83.45 0-170.3 55.42-186.1 136-9.53 48.91 5 131.4-68.75 131.4C58.21 358.6 91.6 378.1 127 389.5c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9 .82a51.69 51.69 0 0 1 78.78-16.42zM205.1 187.1c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.6 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.6 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06 .28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\"],\n    \"weebly\": [512, 512, [], \"f5cc\", \"M425.1 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143c0 28.96 4.18 33.27 77.17 233.5 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.6 77.5-205.6 77.5-227.2 .63-48.32-36.01-83.47-86.92-83.47zm26.34 114.8l-65.57 176.4c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.4h-.95L216.1 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.6c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.8h.95l44.66-136.8c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.8h.95l44.03-139.8c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"],\n    \"weibo\": [512, 512, [], \"f18a\", \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8 .3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4 .6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"],\n    \"weixin\": [576, 512, [], \"f1d7\", \"M385.2 167.6c6.4 0 12.6 .3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2 .1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3 .1 10-9.9 19.6-24.4 19.6z\"],\n    \"whatsapp\": [448, 512, [], \"f232\", \"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7 .9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"],\n    \"whatsapp-square\": [448, 512, [], \"f40c\", \"M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4 .9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6 .1 2.4 .1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3 .3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9 .9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z\"],\n    \"whmcs\": [448, 512, [], \"f40d\", \"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6 .3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1 .5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2 .2 6.9 .1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"],\n    \"wikipedia-w\": [640, 512, [], \"f266\", \"M640 51.2l-.3 12.2c-28.1 .8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3 .3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4 .2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5 .3v13.1c-19.4 .6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4 .3-3.6 0-10.3 .3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5 .8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1 .2 .5z\"],\n    \"windows\": [448, 512, [], \"f17a\", \"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"],\n    \"wirsindhandwerk\": [512, 512, [\"wsh\"], \"e2d0\", \"M50.77 479.8h83.36V367.8l-83.36 47.01zm329 0h82.35V414.9l-82.35-47.01zm.0057-448V251.6L256.2 179.2 134.5 251.6V31.81H50.77V392.6L256.2 270.3 462.2 392.6V31.81z\"],\n    \"wix\": [640, 512, [], \"f5cf\", \"M393.4 131.7c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.7-28.48-108.6c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.9 55.28 167.2C49.73 140.5 23.86 128.1 0 131.1l65.57 247.9s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.4 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.9c-24.42-3.07-49.82 8.93-55.3 35.27zm115.8 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.1s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.4l-.02 .01v-8.98zm163.4 84.08L640 132.8s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47 .73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.7-82.97 123.4s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.5z\"],\n    \"wizards-of-the-coast\": [640, 512, [], \"f730\", \"M219.2 345.7c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92 .26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.8 75.94c-.34 1.7-.55 1.67 .79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.3-78.03-54.73-6.02-124.4 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79 .26c63.89-58.4 131.2-77.25 184.4-73.85 58.4 3.67 100 34.04 100 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.3 240.4c.79 7.07 4.19 10.21 9.17 10.47 5.5 .26 9.43-2.62 10.47-6.55 .79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.8 89.32 13.1 226.8 .79 241.2c-1.05 .52-1.31 .79 .79 1.31 60.49 16.5 155.8 81.18 196.1 202.2l1.05 .26c55.25-69.92 140.9-128.1 236.1-128.1 80.92 0 130.1 42.16 130.1 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2 .79 .79 .79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26 .52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78 .79 3.4 2.09 9.69 2.36 14.93 0 1.05 .79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.7 176 489.4 89.32 342.3 89.32zm-99.24 289.6c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5 .28 .39 12.13 16.57-4.71 31.16zm2.09-136.4l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.6l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52 .26c1.31 1.83 2.09 2.88 3.4 4.71l-.26 .52c-1.05-.26-2.36-.79-5.24 .26-2.09 .79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83 .52 1.83 1.83 5.5l-.26 .26c-3.06 .61-4.65 .34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26 .26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76 .26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52 .26 3.14 4.98-.26 .52c-3.53-1.76-7.35 .76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26 .52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4 .79-8.9 2.62-12.83 3.93l-.26 .26c.79 2.62 3.14 9.95 4.19 13.88 .79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88 .26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26 .26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26 .26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45 .54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26 .26c-4.71 .52-14.14 2.36-22.52 4.19l-.26-.26 .79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26 .26c.52 2.36 .79 3.14 1.57 5.5l-.26 .26c-1.14-1.14-3.34-3.2-16.24-.79l-.26 .26c.26 1.57 1.05 6.55 1.57 9.95l.26 .26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26 .26c.26 2.09 1.57 9.43 2.09 12.57l.26 .26c1.15 .38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25 .02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24 .79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69 .26 2.36 .52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26 .26c-.52 1.83-1.83 6.02-1.83 6.28l-.52 .52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26 .52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69 .79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.4c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24 .59-7.27 .26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09 .79 5.5 2.09 7.59 2.88 .48 .48 .18-1.87-1.05 25.14-.24 1.81 .02 2.6 .8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27 .09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26 .26-5.76-4.45 .26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26 .26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59 .75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38 .79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.5-191.9-129.6-53.42-1.05-94.27 15.45-132.8 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05 .26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.6 101.1 231.9 93.23 231.5c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4 .52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.1-35.88 67.04 1.05 167.3 40.85 199.8 139.8 .78 2.1-.01 2.63-.79 .27zM203.5 152.4s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.8 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.4 67.07c-58.4 0-106.1 12.05-114.1 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57 .26c6.55-1.83 48.97-13.88 110.2-13.88 180.2 0 301.7 116.8 301.7 223.4v9.95c0 1.31 .79 2.62 1.05 .52 .52-2.09 .79-8.64 .79-19.64 .26-83.79-96.63-227.6-321.6-227.6zm211.1 169.7c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81 .52 13.35 6.02 14.66 3.67 1.05 8.9 .52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.6c1.83 .52 3.14 1.05 5.76 1.83 0-1.83 .52-8.38 .79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\"],\n    \"wodu\": [640, 512, [], \"e088\", \"M178.4 339.7H141.1L112.2 223.5h-.478L83.23 339.7H45.2L0 168.9H37.55L64.57 285.2h.478L94.71 168.9h35.16l29.18 117.7h.479L187.5 168.9h36.83zM271.4 212.7c38.98 0 64.1 25.83 64.1 65.29 0 39.22-25.11 65.05-64.1 65.05-38.74 0-63.85-25.83-63.85-65.05C207.5 238.5 232.7 212.7 271.4 212.7zm0 104.8c23.2 0 30.13-19.85 30.13-39.46 0-19.85-6.934-39.7-30.13-39.7-27.7 0-29.89 19.85-29.89 39.7C241.5 297.6 248.4 317.5 271.4 317.5zM435.1 323.9h-.478c-7.893 13.39-21.76 19.13-37.55 19.13-37.31 0-55.49-32.04-55.49-66.25 0-33.24 18.42-64.1 54.77-64.1 14.59 0 28.94 6.218 36.83 18.42h.24V168.9h33.96v170.8H435.1zM405.4 238.3c-22.24 0-29.89 19.13-29.89 39.46 0 19.37 8.848 39.7 29.89 39.7 22.48 0 29.18-19.61 29.18-39.94C434.6 257.4 427.4 238.3 405.4 238.3zM592.1 339.7H560.7V322.5h-.718c-8.609 13.87-23.44 20.57-37.79 20.57-36.11 0-45.2-20.33-45.2-50.94V216.1h33.96V285.9c0 20.33 5.979 30.37 21.76 30.37 18.42 0 26.31-10.28 26.31-35.39V216.1H592.1zM602.5 302.9H640v36.83H602.5z\"],\n    \"wolf-pack-battalion\": [512, 512, [], \"f514\", \"M267.7 471.5l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.1-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.2 456.4 239.7l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.2l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.8l-58 38.71-3.52 93.25L369.8 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.6 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.6-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.3 59.82-3.52-93.25-58.06-38.71C185 65.1 135.8 22.87 95.3 0c-17.54 61.12-4.4 118.8 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.4 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.2 81.37 149.1 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.1 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1 -18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.7 376.5L181.5 366c-7.47-4.36-13.76-8.42-19.35-12.32 .6 7.26 .27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94 .9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\"],\n    \"wordpress\": [512, 512, [], \"f19a\", \"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"],\n    \"wordpress-simple\": [512, 512, [], \"f411\", \"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"],\n    \"wpbeginner\": [512, 512, [], \"f297\", \"M462.8 322.4C519 386.7 466.1 480 370.9 480c-39.6 0-78.82-17.69-100.1-50.04-6.887 .356-22.7 .356-29.59 0C219.8 462.4 180.6 480 141.1 480c-95.49 0-148.3-92.1-91.86-157.6C-29.92 190.5 80.48 32 256 32c175.6 0 285.9 158.6 206.8 290.4zm-339.6-82.97h41.53v-58.08h-41.53v58.08zm217.2 86.07v-23.84c-60.51 20.92-132.4 9.198-187.6-33.97l.246 24.9c51.1 46.37 131.7 57.88 187.3 32.91zm-150.8-86.07h166.1v-58.08H189.6v58.08z\"],\n    \"wpexplorer\": [512, 512, [], \"f2de\", \"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"],\n    \"wpforms\": [448, 512, [], \"f298\", \"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2 .1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"],\n    \"wpressr\": [496, 512, [], \"f3e4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S384.1 8 248 8zm171.3 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03 .06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.8 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24 .1 28.48 .02 42.72 .05 6.24 .01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6 .23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21 .08 30.43 .02 45.64 .04 5.56 .01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33 .04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43 .05 52.86 0 79.29 .05 12.44 .02 13.93-13.65 3.9-13.64-25.26 .03-50.52 .02-75.78 .02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09 .06 25.98 .02 130.8 .03 6.08-.01 8.03 2.79 5.62 8.27z\"],\n    \"xbox\": [512, 512, [], \"f412\", \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7 .1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"],\n    \"xing\": [384, 512, [], \"f168\", \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8 .3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1 .2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"],\n    \"xing-square\": [448, 512, [], \"f169\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6 .2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1 .1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z\"],\n    \"y-combinator\": [448, 512, [], \"f23b\", \"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"],\n    \"yahoo\": [512, 512, [], \"f19e\", \"M223.7 141.1 167 284.2 111 141.1H14.93L120.8 390.2 82.19 480h94.17L317.3 141.1zm105.4 135.8a58.22 58.22 0 1 0 58.22 58.22A58.22 58.22 0 0 0 329.1 276.9zM394.6 32l-93 223.5H406.4L499.1 32z\"],\n    \"yammer\": [512, 512, [], \"f840\", \"M500.7 159.5a12.78 12.78 0 0 0 -6.4-8.282 13.95 13.95 0 0 0 -10.08-1.125L457.8 156.7l-.043-.2-22.3 5.785-1.243 .333-.608-2.17A369 369 0 0 0 347.5 4.289a14.1 14.1 0 0 0 -19.78-.463l-102.9 102.7H24.95A24.9 24.9 0 0 0 0 131.4V380.4a24.96 24.96 0 0 0 24.92 24.9H224.1L328.1 508a13.67 13.67 0 0 0 19.33 0c.126-.126 .249-.255 .37-.385a368 368 0 0 0 69.58-107.4 403.5 403.5 0 0 0 17.3-50.8v-.028l20.41 5.336 .029-.073L483.3 362a20.25 20.25 0 0 0 2.619 .5 13.36 13.36 0 0 0 4.139-.072 13.5 13.5 0 0 0 10.52-9.924 415.9 415.9 0 0 0 .058-193zM337.1 24.65l.013 .014h-.013zm-110.2 165.2L174.3 281.1a11.34 11.34 0 0 0 -1.489 5.655v46.19a22.04 22.04 0 0 1 -22.04 22h-3.4A22.07 22.07 0 0 1 125.3 332.1V287.3a11.53 11.53 0 0 0 -1.388-5.51l-51.6-92.2a21.99 21.99 0 0 1 19.26-32.73h3.268a22.06 22.06 0 0 1 19.61 11.92l36.36 70.28 37.51-70.51a22.07 22.07 0 0 1 38.56-.695 21.7 21.7 0 0 1 0 21.97zM337.1 24.67a348.1 348.1 0 0 1 75.8 141.3l.564 1.952-114.1 29.6V131.4a25.01 25.01 0 0 0 -24.95-24.9H255.1zm60.5 367.3v-.043l-.014 .014a347.2 347.2 0 0 1 -60.18 95.23l-82.2-81.89h19.18a24.98 24.98 0 0 0 24.95-24.9v-66.2l114.6 29.86A385.2 385.2 0 0 1 397.6 391.1zm84-52.45 .015 .014-50.62-13.13L299.4 292.1V219.6l119.7-30.99 4.468-1.157 39.54-10.25 18.51-4.816A393 393 0 0 1 481.6 339.5z\"],\n    \"yandex\": [256, 512, [], \"f413\", \"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"],\n    \"yandex-international\": [320, 512, [], \"f414\", \"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"],\n    \"yarn\": [496, 512, [], \"f7e3\", \"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4 .1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3 .8-10.8-5.7 .8-19.2 .8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3 .8 1.4 13.7 .8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2 .9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4 .2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"],\n    \"yelp\": [384, 512, [], \"f1e9\", \"M42.9 240.3l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.5a22.79 22.79 0 0 1 -28.21-19.6 197.2 197.2 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.3a199.4 199.4 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.9 490l3.9-110.8c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.3-109.9l58.81 94a22.93 22.93 0 0 0 34 5.5 198.4 198.4 0 0 0 52.71-67.61A23 23 0 0 0 364.2 370l-105.4-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.3-132.2a197.4 197.4 0 0 0 -50.41-69.31 22.85 22.85 0 0 0 -34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.6a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0 -9.9 32l104.1 180.4c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0 -24.5-22.8 320.4 320.4 0 0 0 -112.3 30.1z\"],\n    \"yoast\": [448, 512, [], \"f2b1\", \"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1 .6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"],\n    \"youtube\": [576, 512, [61802], \"f167\", \"M549.7 124.1c-6.281-23.65-24.79-42.28-48.28-48.6C458.8 64 288 64 288 64S117.2 64 74.63 75.49c-23.5 6.322-42 24.95-48.28 48.6-11.41 42.87-11.41 132.3-11.41 132.3s0 89.44 11.41 132.3c6.281 23.65 24.79 41.5 48.28 47.82C117.2 448 288 448 288 448s170.8 0 213.4-11.49c23.5-6.321 42-24.17 48.28-47.82 11.41-42.87 11.41-132.3 11.41-132.3s0-89.44-11.41-132.3zm-317.5 213.5V175.2l142.7 81.21-142.7 81.2z\"],\n    \"youtube-square\": [448, 512, [61798], \"f431\", \"M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z\"],\n    \"zhihu\": [640, 512, [], \"f63f\", \"M170.5 148.1v217.5l23.43 .01 7.71 26.37 42.01-26.37h49.53V148.1H170.5zm97.75 193.9h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.8h72.82v170.3zm-118.5-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.1 0 396.3c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.1c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.1-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.4c-19.78 0-130.9 .93-131.1 .93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.2 16.49-232.4 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15 .89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.4s2.82 22.31 25.51 22.85h107.9v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08 .11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.4c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\"]\n  };\n\n  bunker(function () {\n    defineIcons('fab', icons);\n    defineIcons('fa-brands', icons);\n  });\n\n}());\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/js/conflict-detection.js",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (factory());\n}(this, (function () { 'use strict';\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  var functions = [];\n\n  var listener = function listener() {\n    DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n    loaded = 1;\n    functions.map(function (fn) {\n      return fn();\n    });\n  };\n\n  var loaded = false;\n\n  if (IS_DOM) {\n    loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n    if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n  }\n\n  function domready (fn) {\n    if (!IS_DOM) return;\n    loaded ? setTimeout(fn, 0) : functions.push(fn);\n  }\n\n  function report (_ref) {\n    var nodesTested = _ref.nodesTested,\n        nodesFound = _ref.nodesFound;\n    var timedOutTests = {};\n\n    for (var key in nodesFound) {\n      if (!(nodesTested.conflict[key] || nodesTested.noConflict[key])) {\n        timedOutTests[key] = nodesFound[key];\n      }\n    }\n\n    var conflictsCount = Object.keys(nodesTested.conflict).length;\n\n    if (conflictsCount > 0) {\n      console.info(\"%cConflict\".concat(conflictsCount > 1 ? 's' : '', \" found:\"), 'color: darkred; font-size: large');\n      var data = {};\n\n      for (var _key in nodesTested.conflict) {\n        var item = nodesTested.conflict[_key];\n        data[_key] = {\n          'tagName': item.tagName,\n          'src/href': item.src || item.href || 'n/a',\n          'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)'\n        };\n      }\n\n      console.table(data);\n    }\n\n    var noConflictsCount = Object.keys(nodesTested.noConflict).length;\n\n    if (noConflictsCount > 0) {\n      console.info(\"%cNo conflict\".concat(noConflictsCount > 1 ? 's' : '', \" found with \").concat(noConflictsCount === 1 ? 'this' : 'these', \":\"), 'color: green; font-size: large');\n      var _data = {};\n\n      for (var _key2 in nodesTested.noConflict) {\n        var _item = nodesTested.noConflict[_key2];\n        _data[_key2] = {\n          'tagName': _item.tagName,\n          'src/href': _item.src || _item.href || 'n/a',\n          'innerText excerpt': _item.innerText && _item.innerText !== '' ? _item.innerText.slice(0, 200) + '...' : '(empty)'\n        };\n      }\n\n      console.table(_data);\n    }\n\n    var timeOutCount = Object.keys(timedOutTests).length;\n\n    if (timeOutCount > 0) {\n      console.info(\"%cLeftovers--we timed out before collecting test results for \".concat(timeOutCount === 1 ? 'this' : 'these', \":\"), 'color: blue; font-size: large');\n      var _data2 = {};\n\n      for (var _key3 in timedOutTests) {\n        var _item2 = timedOutTests[_key3];\n        _data2[_key3] = {\n          'tagName': _item2.tagName,\n          'src/href': _item2.src || _item2.href || 'n/a',\n          'innerText excerpt': _item2.innerText && _item2.innerText !== '' ? _item2.innerText.slice(0, 200) + '...' : '(empty)'\n        };\n      }\n\n      console.table(_data2);\n    }\n  }\n\n  var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n  function createCommonjsModule(fn, module) {\n  \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n  }\n\n  var md5 = createCommonjsModule(function (module) {\n\n    (function ($) {\n      /**\n       * Add integers, wrapping at 2^32.\n       * This uses 16-bit operations internally to work around bugs in interpreters.\n       *\n       * @param {number} x First integer\n       * @param {number} y Second integer\n       * @returns {number} Sum\n       */\n\n      function safeAdd(x, y) {\n        var lsw = (x & 0xffff) + (y & 0xffff);\n        var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n        return msw << 16 | lsw & 0xffff;\n      }\n      /**\n       * Bitwise rotate a 32-bit number to the left.\n       *\n       * @param {number} num 32-bit number\n       * @param {number} cnt Rotation count\n       * @returns {number} Rotated number\n       */\n\n\n      function bitRotateLeft(num, cnt) {\n        return num << cnt | num >>> 32 - cnt;\n      }\n      /**\n       * Basic operation the algorithm uses.\n       *\n       * @param {number} q q\n       * @param {number} a a\n       * @param {number} b b\n       * @param {number} x x\n       * @param {number} s s\n       * @param {number} t t\n       * @returns {number} Result\n       */\n\n\n      function md5cmn(q, a, b, x, s, t) {\n        return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n      }\n      /**\n       * Basic operation the algorithm uses.\n       *\n       * @param {number} a a\n       * @param {number} b b\n       * @param {number} c c\n       * @param {number} d d\n       * @param {number} x x\n       * @param {number} s s\n       * @param {number} t t\n       * @returns {number} Result\n       */\n\n\n      function md5ff(a, b, c, d, x, s, t) {\n        return md5cmn(b & c | ~b & d, a, b, x, s, t);\n      }\n      /**\n       * Basic operation the algorithm uses.\n       *\n       * @param {number} a a\n       * @param {number} b b\n       * @param {number} c c\n       * @param {number} d d\n       * @param {number} x x\n       * @param {number} s s\n       * @param {number} t t\n       * @returns {number} Result\n       */\n\n\n      function md5gg(a, b, c, d, x, s, t) {\n        return md5cmn(b & d | c & ~d, a, b, x, s, t);\n      }\n      /**\n       * Basic operation the algorithm uses.\n       *\n       * @param {number} a a\n       * @param {number} b b\n       * @param {number} c c\n       * @param {number} d d\n       * @param {number} x x\n       * @param {number} s s\n       * @param {number} t t\n       * @returns {number} Result\n       */\n\n\n      function md5hh(a, b, c, d, x, s, t) {\n        return md5cmn(b ^ c ^ d, a, b, x, s, t);\n      }\n      /**\n       * Basic operation the algorithm uses.\n       *\n       * @param {number} a a\n       * @param {number} b b\n       * @param {number} c c\n       * @param {number} d d\n       * @param {number} x x\n       * @param {number} s s\n       * @param {number} t t\n       * @returns {number} Result\n       */\n\n\n      function md5ii(a, b, c, d, x, s, t) {\n        return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n      }\n      /**\n       * Calculate the MD5 of an array of little-endian words, and a bit length.\n       *\n       * @param {Array} x Array of little-endian words\n       * @param {number} len Bit length\n       * @returns {Array<number>} MD5 Array\n       */\n\n\n      function binlMD5(x, len) {\n        /* append padding */\n        x[len >> 5] |= 0x80 << len % 32;\n        x[(len + 64 >>> 9 << 4) + 14] = len;\n        var i;\n        var olda;\n        var oldb;\n        var oldc;\n        var oldd;\n        var a = 1732584193;\n        var b = -271733879;\n        var c = -1732584194;\n        var d = 271733878;\n\n        for (i = 0; i < x.length; i += 16) {\n          olda = a;\n          oldb = b;\n          oldc = c;\n          oldd = d;\n          a = md5ff(a, b, c, d, x[i], 7, -680876936);\n          d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n          c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n          b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n          a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n          d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n          c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n          b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n          a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n          d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n          c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n          b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n          a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n          d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n          c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n          b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n          a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n          d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n          c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n          b = md5gg(b, c, d, a, x[i], 20, -373897302);\n          a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n          d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n          c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n          b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n          a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n          d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n          c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n          b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n          a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n          d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n          c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n          b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n          a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n          d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n          c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n          b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n          a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n          d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n          c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n          b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n          a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n          d = md5hh(d, a, b, c, x[i], 11, -358537222);\n          c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n          b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n          a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n          d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n          c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n          b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n          a = md5ii(a, b, c, d, x[i], 6, -198630844);\n          d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n          c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n          b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n          a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n          d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n          c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n          b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n          a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n          d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n          c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n          b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n          a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n          d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n          c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n          b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n          a = safeAdd(a, olda);\n          b = safeAdd(b, oldb);\n          c = safeAdd(c, oldc);\n          d = safeAdd(d, oldd);\n        }\n\n        return [a, b, c, d];\n      }\n      /**\n       * Convert an array of little-endian words to a string\n       *\n       * @param {Array<number>} input MD5 Array\n       * @returns {string} MD5 string\n       */\n\n\n      function binl2rstr(input) {\n        var i;\n        var output = '';\n        var length32 = input.length * 32;\n\n        for (i = 0; i < length32; i += 8) {\n          output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);\n        }\n\n        return output;\n      }\n      /**\n       * Convert a raw string to an array of little-endian words\n       * Characters >255 have their high-byte silently ignored.\n       *\n       * @param {string} input Raw input string\n       * @returns {Array<number>} Array of little-endian words\n       */\n\n\n      function rstr2binl(input) {\n        var i;\n        var output = [];\n        output[(input.length >> 2) - 1] = undefined;\n\n        for (i = 0; i < output.length; i += 1) {\n          output[i] = 0;\n        }\n\n        var length8 = input.length * 8;\n\n        for (i = 0; i < length8; i += 8) {\n          output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;\n        }\n\n        return output;\n      }\n      /**\n       * Calculate the MD5 of a raw string\n       *\n       * @param {string} s Input string\n       * @returns {string} Raw MD5 string\n       */\n\n\n      function rstrMD5(s) {\n        return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n      }\n      /**\n       * Calculates the HMAC-MD5 of a key and some data (raw strings)\n       *\n       * @param {string} key HMAC key\n       * @param {string} data Raw input string\n       * @returns {string} Raw MD5 string\n       */\n\n\n      function rstrHMACMD5(key, data) {\n        var i;\n        var bkey = rstr2binl(key);\n        var ipad = [];\n        var opad = [];\n        var hash;\n        ipad[15] = opad[15] = undefined;\n\n        if (bkey.length > 16) {\n          bkey = binlMD5(bkey, key.length * 8);\n        }\n\n        for (i = 0; i < 16; i += 1) {\n          ipad[i] = bkey[i] ^ 0x36363636;\n          opad[i] = bkey[i] ^ 0x5c5c5c5c;\n        }\n\n        hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n        return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n      }\n      /**\n       * Convert a raw string to a hex string\n       *\n       * @param {string} input Raw input string\n       * @returns {string} Hex encoded string\n       */\n\n\n      function rstr2hex(input) {\n        var hexTab = '0123456789abcdef';\n        var output = '';\n        var x;\n        var i;\n\n        for (i = 0; i < input.length; i += 1) {\n          x = input.charCodeAt(i);\n          output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);\n        }\n\n        return output;\n      }\n      /**\n       * Encode a string as UTF-8\n       *\n       * @param {string} input Input string\n       * @returns {string} UTF8 string\n       */\n\n\n      function str2rstrUTF8(input) {\n        return unescape(encodeURIComponent(input));\n      }\n      /**\n       * Encodes input string as raw MD5 string\n       *\n       * @param {string} s Input string\n       * @returns {string} Raw MD5 string\n       */\n\n\n      function rawMD5(s) {\n        return rstrMD5(str2rstrUTF8(s));\n      }\n      /**\n       * Encodes input string as Hex encoded string\n       *\n       * @param {string} s Input string\n       * @returns {string} Hex encoded string\n       */\n\n\n      function hexMD5(s) {\n        return rstr2hex(rawMD5(s));\n      }\n      /**\n       * Calculates the raw HMAC-MD5 for the given key and data\n       *\n       * @param {string} k HMAC key\n       * @param {string} d Input string\n       * @returns {string} Raw MD5 string\n       */\n\n\n      function rawHMACMD5(k, d) {\n        return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n      }\n      /**\n       * Calculates the Hex encoded HMAC-MD5 for the given key and data\n       *\n       * @param {string} k HMAC key\n       * @param {string} d Input string\n       * @returns {string} Raw MD5 string\n       */\n\n\n      function hexHMACMD5(k, d) {\n        return rstr2hex(rawHMACMD5(k, d));\n      }\n      /**\n       * Calculates MD5 value for a given string.\n       * If a key is provided, calculates the HMAC-MD5 value.\n       * Returns a Hex encoded string unless the raw argument is given.\n       *\n       * @param {string} string Input string\n       * @param {string} [key] HMAC key\n       * @param {boolean} [raw] Raw output switch\n       * @returns {string} MD5 output\n       */\n\n\n      function md5(string, key, raw) {\n        if (!key) {\n          if (!raw) {\n            return hexMD5(string);\n          }\n\n          return rawMD5(string);\n        }\n\n        if (!raw) {\n          return hexHMACMD5(key, string);\n        }\n\n        return rawHMACMD5(key, string);\n      }\n\n      if (module.exports) {\n        module.exports = md5;\n      } else {\n        $.md5 = md5;\n      }\n    })(commonjsGlobal);\n  });\n\n  function md5ForNode(node) {\n    if (null === node || 'object' !== _typeof(node)) return undefined;\n\n    if (node.src) {\n      return md5(node.src);\n    } else if (node.href) {\n      return md5(node.href);\n    } else if (node.innerText && '' !== node.innerText) {\n      // eslint-disable-line yoda\n      return md5(node.innerText);\n    } else {\n      return undefined;\n    }\n  }\n\n  var diagScriptId = 'fa-kits-diag';\n  var nodeUnderTestId = 'fa-kits-node-under-test';\n  var md5Attr = 'data-md5';\n  var detectionIgnoreAttr = 'data-fa-detection-ignore';\n  var timeoutAttr = 'data-fa-detection-timeout';\n  var resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait';\n\n  var silenceErrors = function silenceErrors(e) {\n    e.preventDefault();\n    e.stopPropagation();\n  };\n\n  function pollUntil(_ref) {\n    var _ref$fn = _ref.fn,\n        fn = _ref$fn === void 0 ? function () {\n      return true;\n    } : _ref$fn,\n        _ref$initialDuration = _ref.initialDuration,\n        initialDuration = _ref$initialDuration === void 0 ? 1 : _ref$initialDuration,\n        _ref$maxDuration = _ref.maxDuration,\n        maxDuration = _ref$maxDuration === void 0 ? WINDOW.FontAwesomeDetection.timeout : _ref$maxDuration,\n        _ref$showProgress = _ref.showProgress,\n        showProgress = _ref$showProgress === void 0 ? false : _ref$showProgress,\n        progressIndicator = _ref.progressIndicator;\n    return new Promise(function (resolve, reject) {\n      // eslint-disable-line compat/compat\n      function poll(duration, cumulativeDuration) {\n        setTimeout(function () {\n          var result = fn();\n\n          if (showProgress) {\n            console.info(progressIndicator);\n          }\n\n          if (!!result) {\n            // eslint-disable-line no-extra-boolean-cast\n            resolve(result);\n          } else {\n            var nextDuration = 250;\n            var nextCumulativeDuration = nextDuration + cumulativeDuration;\n\n            if (nextCumulativeDuration <= maxDuration) {\n              poll(nextDuration, nextCumulativeDuration);\n            } else {\n              reject('timeout'); // eslint-disable-line prefer-promise-reject-errors\n            }\n          }\n        }, duration);\n      }\n\n      poll(initialDuration, 0);\n    });\n  }\n\n  function detectWebfontConflicts() {\n    var linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(function (t) {\n      return !t.hasAttribute(detectionIgnoreAttr);\n    });\n    var styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(function (t) {\n      if (t.hasAttribute(detectionIgnoreAttr)) {\n        return false;\n      } // If the browser has loaded the FA5 CSS, let's not test that <style> element.\n      // Its enough that we'll be testing for traces of the corresponding JS being loaded, and testing\n      // this <style> would only produce a false negative anyway.\n\n\n      if (WINDOW.FontAwesomeConfig && t.innerText.match(new RegExp(\"svg:not\\\\(:root\\\\)\\\\.\".concat(WINDOW.FontAwesomeConfig.replacementClass)))) {\n        return false;\n      }\n\n      return true;\n    });\n\n    function runDiag(scriptOrLinkTag, md5) {\n      var diagFrame = DOCUMENT.createElement('iframe'); // Using \"visibility: hidden; position: absolute\" instead of \"display: none;\" because\n      // Firefox will not return the expected results for getComputedStyle if our iframe has display: none.\n\n      diagFrame.setAttribute('style', 'visibility: hidden; position: absolute; height: 0; width: 0;');\n      var testIconId = 'fa-test-icon-' + md5;\n      var iTag = DOCUMENT.createElement('i');\n      iTag.setAttribute('class', 'fa fa-coffee');\n      iTag.setAttribute('id', testIconId);\n      var diagScript = DOCUMENT.createElement('script');\n      diagScript.setAttribute('id', diagScriptId); // WARNING: this function will be toString()'d and assigned to innerText of the diag script\n      // element that we'll be putting into a diagnostic iframe.\n      // That means that this code won't compile until after the outer script has run and injected\n      // this code into the iframe. There are some compile time errors that might occur there.\n      // For example, using single line (double-slash) comments like this one inside that function\n      // will probably cause it to choke. Chrome will show an error like this:\n      // Uncaught SyntaxError: Unexpected end of input\n\n      var diagScriptFun = function diagScriptFun(nodeUnderTestId, testIconId, md5, parentOrigin) {\n        parent.FontAwesomeDetection.__pollUntil({\n          fn: function fn() {\n            var iEl = document.getElementById(testIconId);\n            var computedStyle = window.getComputedStyle(iEl);\n            var fontFamily = computedStyle.getPropertyValue('font-family');\n\n            if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome [56]/)) {\n              return true;\n            } else {\n              return false;\n            }\n          }\n        }).then(function () {\n          var node = document.getElementById(nodeUnderTestId);\n          parent.postMessage({\n            type: 'fontawesome-conflict',\n            technology: 'webfont',\n            href: node.href,\n            innerText: node.innerText,\n            tagName: node.tagName,\n            md5: md5\n          }, parentOrigin);\n        }).catch(function (e) {\n          var node = document.getElementById(nodeUnderTestId);\n\n          if (e === 'timeout') {\n            parent.postMessage({\n              type: 'no-conflict',\n              technology: 'webfont',\n              href: node.src,\n              innerText: node.innerText,\n              tagName: node.tagName,\n              md5: md5\n            }, parentOrigin);\n          } else {\n            console.error(e);\n          }\n        });\n      };\n\n      var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;\n      diagScript.innerText = \"(\".concat(diagScriptFun.toString(), \")('\").concat(nodeUnderTestId, \"', '\").concat(testIconId || 'foo', \"', '\").concat(md5, \"', '\").concat(parentOrigin, \"');\");\n\n      diagFrame.onload = function () {\n        diagFrame.contentWindow.addEventListener('error', silenceErrors, true);\n        diagFrame.contentDocument.head.appendChild(diagScript);\n        diagFrame.contentDocument.head.appendChild(scriptOrLinkTag);\n        diagFrame.contentDocument.body.appendChild(iTag);\n      };\n\n      domready(function () {\n        return DOCUMENT.body.appendChild(diagFrame);\n      });\n    }\n\n    var cssByMD5 = {};\n\n    for (var i = 0; i < linkTags.length; i++) {\n      var linkUnderTest = DOCUMENT.createElement('link');\n      linkUnderTest.setAttribute('id', nodeUnderTestId);\n      linkUnderTest.setAttribute('href', linkTags[i].href);\n      linkUnderTest.setAttribute('rel', linkTags[i].rel);\n      var md5ForLink = md5ForNode(linkTags[i]);\n      linkUnderTest.setAttribute(md5Attr, md5ForLink);\n      cssByMD5[md5ForLink] = linkTags[i];\n      runDiag(linkUnderTest, md5ForLink);\n    }\n\n    for (var _i = 0; _i < styleTags.length; _i++) {\n      var styleUnderTest = DOCUMENT.createElement('style');\n      styleUnderTest.setAttribute('id', nodeUnderTestId);\n      var md5ForStyle = md5ForNode(styleTags[_i]);\n      styleUnderTest.setAttribute(md5Attr, md5ForStyle);\n      styleUnderTest.innerText = styleTags[_i].innerText;\n      cssByMD5[md5ForStyle] = styleTags[_i];\n      runDiag(styleUnderTest, md5ForStyle);\n    }\n\n    return cssByMD5;\n  }\n\n  function detectSvgConflicts(currentScript) {\n    var scripts = Array.from(DOCUMENT.scripts).filter(function (t) {\n      return !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript;\n    });\n    var scriptsByMD5 = {};\n\n    var _loop = function _loop(scriptIdx) {\n      var diagFrame = DOCUMENT.createElement('iframe');\n      diagFrame.setAttribute('style', 'display:none;');\n      var scriptUnderTest = DOCUMENT.createElement('script');\n      scriptUnderTest.setAttribute('id', nodeUnderTestId);\n      var md5ForScript = md5ForNode(scripts[scriptIdx]);\n      scriptUnderTest.setAttribute(md5Attr, md5ForScript);\n      scriptsByMD5[md5ForScript] = scripts[scriptIdx];\n\n      if (scripts[scriptIdx].src !== '') {\n        scriptUnderTest.src = scripts[scriptIdx].src;\n      }\n\n      if (scripts[scriptIdx].innerText !== '') {\n        scriptUnderTest.innerText = scripts[scriptIdx].innerText;\n      }\n\n      scriptUnderTest.async = true;\n      var diagScript = DOCUMENT.createElement('script');\n      diagScript.setAttribute('id', diagScriptId);\n      var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;\n\n      var diagScriptFun = function diagScriptFun(nodeUnderTestId, md5, parentOrigin) {\n        parent.FontAwesomeDetection.__pollUntil({\n          fn: function fn() {\n            return !!window.FontAwesomeConfig || !!window.FontAwesomeKitConfig;\n          }\n        }).then(function () {\n          var scriptNode = document.getElementById(nodeUnderTestId);\n          parent.postMessage({\n            type: 'fontawesome-conflict',\n            technology: 'js',\n            src: scriptNode.src,\n            innerText: scriptNode.innerText,\n            tagName: scriptNode.tagName,\n            md5: md5\n          }, parentOrigin);\n        }).catch(function (e) {\n          var scriptNode = document.getElementById(nodeUnderTestId);\n\n          if (e === 'timeout') {\n            parent.postMessage({\n              type: 'no-conflict',\n              src: scriptNode.src,\n              innerText: scriptNode.innerText,\n              tagName: scriptNode.tagName,\n              md5: md5\n            }, parentOrigin);\n          } else {\n            console.error(e);\n          }\n        });\n      };\n\n      diagScript.innerText = \"(\".concat(diagScriptFun.toString(), \")('\").concat(nodeUnderTestId, \"', '\").concat(md5ForScript, \"', '\").concat(parentOrigin, \"');\");\n\n      diagFrame.onload = function () {\n        diagFrame.contentWindow.addEventListener('error', silenceErrors, true);\n        diagFrame.contentDocument.head.appendChild(diagScript);\n        diagFrame.contentDocument.head.appendChild(scriptUnderTest);\n      };\n\n      domready(function () {\n        return DOCUMENT.body.appendChild(diagFrame);\n      });\n    };\n\n    for (var scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {\n      _loop(scriptIdx);\n    }\n\n    return scriptsByMD5;\n  }\n\n  function setDoneResults(_ref2) {\n    var nodesTested = _ref2.nodesTested,\n        nodesFound = _ref2.nodesFound;\n    WINDOW.FontAwesomeDetection = WINDOW.FontAwesomeDetection || {};\n    WINDOW.FontAwesomeDetection.nodesTested = nodesTested;\n    WINDOW.FontAwesomeDetection.nodesFound = nodesFound;\n    WINDOW.FontAwesomeDetection.detectionDone = true;\n  }\n\n  function conflictDetection() {\n    var report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n    var nodesTested = {\n      conflict: {},\n      noConflict: {}\n    };\n\n    WINDOW.onmessage = function (e) {\n      if (WINDOW.location.origin === 'file://' || e.origin === WINDOW.location.origin) {\n        if (e && e.data) {\n          if (e.data.type === 'fontawesome-conflict') {\n            nodesTested.conflict[e.data.md5] = e.data;\n          } else if (e.data.type === 'no-conflict') {\n            nodesTested.noConflict[e.data.md5] = e.data;\n          }\n        }\n      }\n    };\n\n    var scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript);\n    var cssToTest = detectWebfontConflicts();\n\n    var nodesFound = _objectSpread2(_objectSpread2({}, scriptsToTest), cssToTest);\n\n    var testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under\n    // child iframes call postMessage with their results, and when the parent window\n    // receives and handles those events with window.onmessage.\n    // Making it configurable allows us to test the scenario where this timeout is exceeded.\n    // Naming it something very different from \"timeout\" is to help avoid the potential ambiguity between\n    // these two timeout-related settings.\n\n    var masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait;\n    console.group('Font Awesome Detector');\n\n    if (testCount === 0) {\n      console.info('%cAll Good!', 'color: green; font-size: large');\n      console.info('We didn\\'t find anything that needs testing for conflicts. Ergo, no conflicts.');\n    } else {\n      console.info(\"Testing \".concat(testCount, \" possible conflicts.\"));\n      console.info(\"We'll wait about \".concat(Math.round(WINDOW.FontAwesomeDetection.timeout / 10) / 100, \" seconds while testing these and\\n\") + \"then up to another \".concat(Math.round(WINDOW.FontAwesomeDetection.resultsCollectionMaxWait / 10) / 100, \" to allow the browser time\\n\") + \"to accumulate the results. But we'll probably be outta here way before then.\\n\\n\");\n      console.info(\"You can adjust those durations by assigning values to these attributes on the <script> element that loads this detection:\");\n      console.info(\"\\t%c\".concat(timeoutAttr, \"%c: milliseconds to wait for each test before deciding whether it's a conflict.\"), 'font-weight: bold;', 'font-size: normal;');\n      console.info(\"\\t%c\".concat(resultsCollectionMaxWaitAttr, \"%c: milliseconds to wait for the browser to accumulate test results before giving up.\"), 'font-weight: bold;', 'font-size: normal;');\n      pollUntil({\n        // Give this overall timer a little extra cushion\n        maxDuration: masterTimeout,\n        showProgress: true,\n        progressIndicator: 'waiting...',\n        fn: function fn() {\n          return Object.keys(nodesTested.conflict).length + Object.keys(nodesTested.noConflict).length >= testCount;\n        }\n      }).then(function () {\n        console.info('DONE!');\n        setDoneResults({\n          nodesTested: nodesTested,\n          nodesFound: nodesFound\n        });\n        report$$1({\n          nodesTested: nodesTested,\n          nodesFound: nodesFound\n        });\n        console.groupEnd();\n      }).catch(function (e) {\n        if (e === 'timeout') {\n          console.info('TIME OUT! We waited until we got tired. Here\\'s what we found:');\n          setDoneResults({\n            nodesTested: nodesTested,\n            nodesFound: nodesFound\n          });\n          report$$1({\n            nodesTested: nodesTested,\n            nodesFound: nodesFound\n          });\n        } else {\n          console.info('Whoops! We hit an error:', e);\n          console.info('Here\\'s what we\\'d found up until that error:');\n          setDoneResults({\n            nodesTested: nodesTested,\n            nodesFound: nodesFound\n          });\n          report$$1({\n            nodesTested: nodesTested,\n            nodesFound: nodesFound\n          });\n        }\n\n        console.groupEnd();\n      });\n    }\n  } // Allow clients to access, and in some cases, override some properties\n\n  var initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden\n\n  var _default = {\n    report: report,\n    timeout: +(DOCUMENT.currentScript.getAttribute(timeoutAttr) || \"2000\"),\n    resultsCollectionMaxWait: +(DOCUMENT.currentScript.getAttribute(resultsCollectionMaxWaitAttr) || \"5000\")\n  };\n\n  var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, _default), initialConfig), {}, {\n    // These cannot be overridden\n    __pollUntil: pollUntil,\n    md5ForNode: md5ForNode,\n    detectionDone: false,\n    nodesTested: null,\n    nodesFound: null\n  });\n\n  WINDOW.FontAwesomeDetection = _config;\n\n  var PRODUCTION = function () {\n    try {\n      return process.env.NODE_ENV === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  bunker(function () {\n    if (IS_BROWSER && IS_DOM) {\n      conflictDetection(window.FontAwesomeDetection.report);\n    }\n  });\n\n})));\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/js/fontawesome.js",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n(function () {\n  'use strict';\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n\n  function _wrapRegExp() {\n    _wrapRegExp = function (re, groups) {\n      return new BabelRegExp(re, void 0, groups);\n    };\n\n    var _super = RegExp.prototype,\n        _groups = new WeakMap();\n\n    function BabelRegExp(re, flags, groups) {\n      var _this = new RegExp(re, flags);\n\n      return _groups.set(_this, groups || _groups.get(re)), _setPrototypeOf(_this, BabelRegExp.prototype);\n    }\n\n    function buildGroups(result, re) {\n      var g = _groups.get(re);\n\n      return Object.keys(g).reduce(function (groups, name) {\n        return groups[name] = result[g[name]], groups;\n      }, Object.create(null));\n    }\n\n    return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (str) {\n      var result = _super.exec.call(this, str);\n\n      return result && (result.groups = buildGroups(result, this)), result;\n    }, BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\n      if (\"string\" == typeof substitution) {\n        var groups = _groups.get(this);\n\n        return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\n          return \"$\" + groups[name];\n        }));\n      }\n\n      if (\"function\" == typeof substitution) {\n        var _this = this;\n\n        return _super[Symbol.replace].call(this, str, function () {\n          var args = arguments;\n          return \"object\" != typeof args[args.length - 1] && (args = [].slice.call(args)).push(buildGroups(args, _this)), substitution.apply(this, args);\n        });\n      }\n\n      return _super[Symbol.replace].call(this, str, substitution);\n    }, _wrapRegExp.apply(this, arguments);\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    Object.defineProperty(Constructor, \"prototype\", {\n      writable: false\n    });\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    Object.defineProperty(subClass, \"prototype\", {\n      writable: false\n    });\n    if (superClass) _setPrototypeOf(subClass, superClass);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _iterableToArrayLimit(arr, i) {\n    var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n    if (_i == null) return;\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n\n    var _s, _e;\n\n    try {\n      for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  function _nonIterableRest() {\n    throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var noop = function noop() {};\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n  var _MUTATION_OBSERVER = null;\n  var _PERFORMANCE = {\n    mark: noop,\n    measure: noop\n  };\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n    if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n    if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var MUTATION_OBSERVER = _MUTATION_OBSERVER;\n  var PERFORMANCE = _PERFORMANCE;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var UNITS_IN_GRID = 16;\n  var DEFAULT_FAMILY_PREFIX = 'fa';\n  var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\n  var DATA_FA_I2SVG = 'data-fa-i2svg';\n  var DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\n  var DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\n  var DATA_PREFIX = 'data-prefix';\n  var DATA_ICON = 'data-icon';\n  var HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\n  var MUTATION_APPROACH_ASYNC = 'async';\n  var TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\n  var PRODUCTION = function () {\n    try {\n      return \"production\" === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var PREFIX_TO_STYLE = {\n    'fas': 'solid',\n    'fa-solid': 'solid',\n    'far': 'regular',\n    'fa-regular': 'regular',\n    'fal': 'light',\n    'fa-light': 'light',\n    'fat': 'thin',\n    'fa-thin': 'thin',\n    'fad': 'duotone',\n    'fa-duotone': 'duotone',\n    'fab': 'brands',\n    'fa-brands': 'brands',\n    'fak': 'kit',\n    'fa-kit': 'kit',\n    'fa': 'solid'\n  };\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var PREFIX_TO_LONG_STYLE = {\n    'fab': 'fa-brands',\n    'fad': 'fa-duotone',\n    'fak': 'fa-kit',\n    'fal': 'fa-light',\n    'far': 'fa-regular',\n    'fas': 'fa-solid',\n    'fat': 'fa-thin'\n  };\n  var LONG_STYLE_TO_PREFIX = {\n    'fa-brands': 'fab',\n    'fa-duotone': 'fad',\n    'fa-kit': 'fak',\n    'fa-light': 'fal',\n    'fa-regular': 'far',\n    'fa-solid': 'fas',\n    'fa-thin': 'fat'\n  };\n  var ICON_SELECTION_SYNTAX_PATTERN = /fa[srltdbk\\-\\ ]/; // eslint-disable-line no-useless-escape\n\n  var LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\n  var FONT_FAMILY_PATTERN = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Kit)?.*/i; // TODO: do we need to handle font-weight for kit SVG pseudo-elements?\n\n  var FONT_WEIGHT_TO_PREFIX = {\n    '900': 'fas',\n    '400': 'far',\n    'normal': 'far',\n    '300': 'fal',\n    '100': 'fat'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  var initial = WINDOW.FontAwesomeConfig || {};\n\n  function getAttrConfig(attr) {\n    var element = DOCUMENT.querySelector('script[' + attr + ']');\n\n    if (element) {\n      return element.getAttribute(attr);\n    }\n  }\n\n  function coerce(val) {\n    // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n    // We'll assume that this is an indication that it should be toggled to true\n    // For example <script data-search-pseudo-elements src=\"...\"></script>\n    if (val === '') return true;\n    if (val === 'false') return false;\n    if (val === 'true') return true;\n    return val;\n  }\n\n  if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n    var attrs = [['data-family-prefix', 'familyPrefix'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n    attrs.forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          attr = _ref2[0],\n          key = _ref2[1];\n\n      var val = coerce(getAttrConfig(attr));\n\n      if (val !== undefined && val !== null) {\n        initial[key] = val;\n      }\n    });\n  }\n\n  var _default = {\n    familyPrefix: DEFAULT_FAMILY_PREFIX,\n    styleDefault: 'solid',\n    replacementClass: DEFAULT_REPLACEMENT_CLASS,\n    autoReplaceSvg: true,\n    autoAddCss: true,\n    autoA11y: true,\n    searchPseudoElements: false,\n    observeMutations: true,\n    mutateApproach: 'async',\n    keepOriginalSource: true,\n    measurePerformance: false,\n    showMissingIcons: true\n  };\n\n  var _config = _objectSpread2(_objectSpread2({}, _default), initial);\n\n  if (!_config.autoReplaceSvg) _config.observeMutations = false;\n  var config = {};\n  Object.keys(_config).forEach(function (key) {\n    Object.defineProperty(config, key, {\n      enumerable: true,\n      set: function set(val) {\n        _config[key] = val;\n\n        _onChangeCb.forEach(function (cb) {\n          return cb(config);\n        });\n      },\n      get: function get() {\n        return _config[key];\n      }\n    });\n  });\n  WINDOW.FontAwesomeConfig = config;\n  var _onChangeCb = [];\n  function onChange(cb) {\n    _onChangeCb.push(cb);\n\n    return function () {\n      _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n    };\n  }\n\n  var d = UNITS_IN_GRID;\n  var meaninglessTransform = {\n    size: 16,\n    x: 0,\n    y: 0,\n    rotate: 0,\n    flipX: false,\n    flipY: false\n  };\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n  function insertCss(css) {\n    if (!css || !IS_DOM) {\n      return;\n    }\n\n    var style = DOCUMENT.createElement('style');\n    style.setAttribute('type', 'text/css');\n    style.innerHTML = css;\n    var headChildren = DOCUMENT.head.childNodes;\n    var beforeChild = null;\n\n    for (var i = headChildren.length - 1; i > -1; i--) {\n      var child = headChildren[i];\n      var tagName = (child.tagName || '').toUpperCase();\n\n      if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n        beforeChild = child;\n      }\n    }\n\n    DOCUMENT.head.insertBefore(style, beforeChild);\n    return css;\n  }\n  var idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n  function nextUniqueId() {\n    var size = 12;\n    var id = '';\n\n    while (size-- > 0) {\n      id += idPool[Math.random() * 62 | 0];\n    }\n\n    return id;\n  }\n  function toArray(obj) {\n    var array = [];\n\n    for (var i = (obj || []).length >>> 0; i--;) {\n      array[i] = obj[i];\n    }\n\n    return array;\n  }\n  function classArray(node) {\n    if (node.classList) {\n      return toArray(node.classList);\n    } else {\n      return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n        return i;\n      });\n    }\n  }\n  function htmlEscape(str) {\n    return \"\".concat(str).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n  }\n  function joinAttributes(attributes) {\n    return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n      return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n    }, '').trim();\n  }\n  function joinStyles(styles) {\n    return Object.keys(styles || {}).reduce(function (acc, styleName) {\n      return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n    }, '');\n  }\n  function transformIsMeaningful(transform) {\n    return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n  }\n  function transformForSvg(_ref) {\n    var transform = _ref.transform,\n        containerWidth = _ref.containerWidth,\n        iconWidth = _ref.iconWidth;\n    var outer = {\n      transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n    };\n    var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n    var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n    var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n    var inner = {\n      transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n    };\n    var path = {\n      transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n    };\n    return {\n      outer: outer,\n      inner: inner,\n      path: path\n    };\n  }\n  function transformForCss(_ref2) {\n    var transform = _ref2.transform,\n        _ref2$width = _ref2.width,\n        width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n        _ref2$height = _ref2.height,\n        height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n        _ref2$startCentered = _ref2.startCentered,\n        startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n    var val = '';\n\n    if (startCentered && IS_IE) {\n      val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n    } else if (startCentered) {\n      val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n    } else {\n      val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n    }\n\n    val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n    val += \"rotate(\".concat(transform.rotate, \"deg) \");\n    return val;\n  }\n\n  var baseStyles = \":host,:root{--fa-font-solid:normal 900 1em/1 \\\"Font Awesome 6 Solid\\\";--fa-font-regular:normal 400 1em/1 \\\"Font Awesome 6 Regular\\\";--fa-font-light:normal 300 1em/1 \\\"Font Awesome 6 Light\\\";--fa-font-thin:normal 100 1em/1 \\\"Font Awesome 6 Thin\\\";--fa-font-duotone:normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";--fa-font-brands:normal 400 1em/1 \\\"Font Awesome 6 Brands\\\"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.0714285705em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width,2em) * -1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fa-sr-only-focusable:not(:focus),.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)}\";\n\n  function css() {\n    var dfp = DEFAULT_FAMILY_PREFIX;\n    var drc = DEFAULT_REPLACEMENT_CLASS;\n    var fp = config.familyPrefix;\n    var rc = config.replacementClass;\n    var s = baseStyles;\n\n    if (fp !== dfp || rc !== drc) {\n      var dPatt = new RegExp(\"\\\\.\".concat(dfp, \"\\\\-\"), 'g');\n      var customPropPatt = new RegExp(\"\\\\--\".concat(dfp, \"\\\\-\"), 'g');\n      var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n      s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n    }\n\n    return s;\n  }\n\n  var _cssInserted = false;\n\n  function ensureCss() {\n    if (config.autoAddCss && !_cssInserted) {\n      insertCss(css());\n      _cssInserted = true;\n    }\n  }\n\n  var InjectCSS = {\n    mixout: function mixout() {\n      return {\n        dom: {\n          css: css,\n          insertCss: ensureCss\n        }\n      };\n    },\n    hooks: function hooks() {\n      return {\n        beforeDOMElementCreation: function beforeDOMElementCreation() {\n          ensureCss();\n        },\n        beforeI2svg: function beforeI2svg() {\n          ensureCss();\n        }\n      };\n    }\n  };\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  var functions = [];\n\n  var listener = function listener() {\n    DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n    loaded = 1;\n    functions.map(function (fn) {\n      return fn();\n    });\n  };\n\n  var loaded = false;\n\n  if (IS_DOM) {\n    loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n    if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n  }\n\n  function domready (fn) {\n    if (!IS_DOM) return;\n    loaded ? setTimeout(fn, 0) : functions.push(fn);\n  }\n\n  function toHtml(abstractNodes) {\n    var tag = abstractNodes.tag,\n        _abstractNodes$attrib = abstractNodes.attributes,\n        attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n        _abstractNodes$childr = abstractNodes.children,\n        children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n    if (typeof abstractNodes === 'string') {\n      return htmlEscape(abstractNodes);\n    } else {\n      return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"</\").concat(tag, \">\");\n    }\n  }\n\n  function iconFromMapping(mapping, prefix, iconName) {\n    if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n      return {\n        prefix: prefix,\n        iconName: iconName,\n        icon: mapping[prefix][iconName]\n      };\n    }\n  }\n\n  /**\n   * Internal helper to bind a function known to have 4 arguments\n   * to a given context.\n   */\n\n  var bindInternal4 = function bindInternal4(func, thisContext) {\n    return function (a, b, c, d) {\n      return func.call(thisContext, a, b, c, d);\n    };\n  };\n\n  /**\n   * # Reduce\n   *\n   * A fast object `.reduce()` implementation.\n   *\n   * @param  {Object}   subject      The object to reduce over.\n   * @param  {Function} fn           The reducer function.\n   * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].\n   * @param  {Object}   thisContext  The context for the reducer.\n   * @return {mixed}                 The final result.\n   */\n\n\n  var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n    var keys = Object.keys(subject),\n        length = keys.length,\n        iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n        i,\n        key,\n        result;\n\n    if (initialValue === undefined) {\n      i = 1;\n      result = subject[keys[0]];\n    } else {\n      i = 0;\n      result = initialValue;\n    }\n\n    for (; i < length; i++) {\n      key = keys[i];\n      result = iterator(result, subject[key], key, subject);\n    }\n\n    return result;\n  };\n\n  /**\n   * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n   *\n   * Copyright Mathias Bynens <https://mathiasbynens.be/>\n\n   * Permission is hereby granted, free of charge, to any person obtaining\n   * a copy of this software and associated documentation files (the\n   * \"Software\"), to deal in the Software without restriction, including\n   * without limitation the rights to use, copy, modify, merge, publish,\n   * distribute, sublicense, and/or sell copies of the Software, and to\n   * permit persons to whom the Software is furnished to do so, subject to\n   * the following conditions:\n\n   * The above copyright notice and this permission notice shall be\n   * included in all copies or substantial portions of the Software.\n\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n   */\n  function ucs2decode(string) {\n    var output = [];\n    var counter = 0;\n    var length = string.length;\n\n    while (counter < length) {\n      var value = string.charCodeAt(counter++);\n\n      if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n        var extra = string.charCodeAt(counter++);\n\n        if ((extra & 0xFC00) == 0xDC00) {\n          // eslint-disable-line eqeqeq\n          output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n        } else {\n          output.push(value);\n          counter--;\n        }\n      } else {\n        output.push(value);\n      }\n    }\n\n    return output;\n  }\n\n  function toHex(unicode) {\n    var decoded = ucs2decode(unicode);\n    return decoded.length === 1 ? decoded[0].toString(16) : null;\n  }\n  function codePointAt(string, index) {\n    var size = string.length;\n    var first = string.charCodeAt(index);\n    var second;\n\n    if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n      second = string.charCodeAt(index + 1);\n\n      if (second >= 0xDC00 && second <= 0xDFFF) {\n        return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n      }\n    }\n\n    return first;\n  }\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce(function (acc, iconName) {\n      var icon = icons[iconName];\n      var expanded = !!icon.icon;\n\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n\n      return acc;\n    }, {});\n  }\n\n  function defineIcons(prefix, icons) {\n    var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _params$skipHooks = params.skipHooks,\n        skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n    var normalized = normalizeIcons(icons);\n\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n\n\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"((?:(?!\")[\\s\\S])+)\".*path d=\"((?:(?!\")[\\s\\S])+)\"/, {\n    d1: 1,\n    d2: 2\n  }), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\".*path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n    cls1: 1,\n    d1: 2,\n    cls2: 3,\n    d2: 4\n  }), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n    cls1: 1,\n    d1: 2\n  })];\n\n  var styles = namespace.styles,\n      shims = namespace.shims;\n  var LONG_STYLE = Object.values(PREFIX_TO_LONG_STYLE);\n  var _defaultUsablePrefix = null;\n  var _byUnicode = {};\n  var _byLigature = {};\n  var _byOldName = {};\n  var _byOldUnicode = {};\n  var _byAlias = {};\n  var PREFIXES = Object.keys(PREFIX_TO_STYLE);\n\n  function isReserved(name) {\n    return ~RESERVED_CLASSES.indexOf(name);\n  }\n\n  function getIconName(familyPrefix, cls) {\n    var parts = cls.split('-');\n    var prefix = parts[0];\n    var iconName = parts.slice(1).join('-');\n\n    if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\n      return iconName;\n    } else {\n      return null;\n    }\n  }\n  var build = function build() {\n    var lookup = function lookup(reducer) {\n      return reduce(styles, function (o, style, prefix) {\n        o[prefix] = reduce(style, reducer, {});\n        return o;\n      }, {});\n    };\n\n    _byUnicode = lookup(function (acc, icon, iconName) {\n      if (icon[3]) {\n        acc[icon[3]] = iconName;\n      }\n\n      if (icon[2]) {\n        var aliases = icon[2].filter(function (a) {\n          return typeof a === 'number';\n        });\n        aliases.forEach(function (alias) {\n          acc[alias.toString(16)] = iconName;\n        });\n      }\n\n      return acc;\n    });\n    _byLigature = lookup(function (acc, icon, iconName) {\n      acc[iconName] = iconName;\n\n      if (icon[2]) {\n        var aliases = icon[2].filter(function (a) {\n          return typeof a === 'string';\n        });\n        aliases.forEach(function (alias) {\n          acc[alias] = iconName;\n        });\n      }\n\n      return acc;\n    });\n    _byAlias = lookup(function (acc, icon, iconName) {\n      var aliases = icon[2];\n      acc[iconName] = iconName;\n      aliases.forEach(function (alias) {\n        acc[alias] = iconName;\n      });\n      return acc;\n    }); // If we have a Kit, we can't determine if regular is available since we\n    // could be auto-fetching it. We'll have to assume that it is available.\n\n    var hasRegular = 'far' in styles || config.autoFetchSvg;\n    var shimLookups = reduce(shims, function (acc, shim) {\n      var maybeNameMaybeUnicode = shim[0];\n      var prefix = shim[1];\n      var iconName = shim[2];\n\n      if (prefix === 'far' && !hasRegular) {\n        prefix = 'fas';\n      }\n\n      if (typeof maybeNameMaybeUnicode === 'string') {\n        acc.names[maybeNameMaybeUnicode] = {\n          prefix: prefix,\n          iconName: iconName\n        };\n      }\n\n      if (typeof maybeNameMaybeUnicode === 'number') {\n        acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n          prefix: prefix,\n          iconName: iconName\n        };\n      }\n\n      return acc;\n    }, {\n      names: {},\n      unicodes: {}\n    });\n    _byOldName = shimLookups.names;\n    _byOldUnicode = shimLookups.unicodes;\n    _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault);\n  };\n  onChange(function (c) {\n    _defaultUsablePrefix = getCanonicalPrefix(c.styleDefault);\n  });\n  build();\n  function byUnicode(prefix, unicode) {\n    return (_byUnicode[prefix] || {})[unicode];\n  }\n  function byLigature(prefix, ligature) {\n    return (_byLigature[prefix] || {})[ligature];\n  }\n  function byAlias(prefix, alias) {\n    return (_byAlias[prefix] || {})[alias];\n  }\n  function byOldName(name) {\n    return _byOldName[name] || {\n      prefix: null,\n      iconName: null\n    };\n  }\n  function byOldUnicode(unicode) {\n    var oldUnicode = _byOldUnicode[unicode];\n    var newUnicode = byUnicode('fas', unicode);\n    return oldUnicode || (newUnicode ? {\n      prefix: 'fas',\n      iconName: newUnicode\n    } : null) || {\n      prefix: null,\n      iconName: null\n    };\n  }\n  function getDefaultUsablePrefix() {\n    return _defaultUsablePrefix;\n  }\n  var emptyCanonicalIcon = function emptyCanonicalIcon() {\n    return {\n      prefix: null,\n      iconName: null,\n      rest: []\n    };\n  };\n  function getCanonicalPrefix(styleOrPrefix) {\n    var style = PREFIX_TO_STYLE[styleOrPrefix];\n    var prefix = STYLE_TO_PREFIX[styleOrPrefix] || STYLE_TO_PREFIX[style];\n    var defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n    return prefix || defined || null;\n  }\n  function getCanonicalIcon(values) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _params$skipLookups = params.skipLookups,\n        skipLookups = _params$skipLookups === void 0 ? false : _params$skipLookups;\n    var givenPrefix = null;\n    var canonical = values.reduce(function (acc, cls) {\n      var iconName = getIconName(config.familyPrefix, cls);\n\n      if (styles[cls]) {\n        cls = LONG_STYLE.includes(cls) ? LONG_STYLE_TO_PREFIX[cls] : cls;\n        givenPrefix = cls;\n        acc.prefix = cls;\n      } else if (PREFIXES.indexOf(cls) > -1) {\n        givenPrefix = cls;\n        acc.prefix = getCanonicalPrefix(cls);\n      } else if (iconName) {\n        acc.iconName = iconName;\n      } else if (cls !== config.replacementClass) {\n        acc.rest.push(cls);\n      }\n\n      if (!skipLookups && acc.prefix && acc.iconName) {\n        var shim = givenPrefix === 'fa' ? byOldName(acc.iconName) : {};\n        var aliasIconName = byAlias(acc.prefix, acc.iconName);\n\n        if (shim.prefix) {\n          givenPrefix = null;\n        }\n\n        acc.iconName = shim.iconName || aliasIconName || acc.iconName;\n        acc.prefix = shim.prefix || acc.prefix;\n\n        if (acc.prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n          // Allow a fallback from the regular style to solid if regular is not available\n          // but only if we aren't auto-fetching SVGs\n          acc.prefix = 'fas';\n        }\n      }\n\n      return acc;\n    }, emptyCanonicalIcon());\n\n    if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n      // The fa prefix is not canonical. So if it has made it through until this point\n      // we will shift it to the correct prefix.\n      canonical.prefix = getDefaultUsablePrefix() || 'fas';\n    }\n\n    return canonical;\n  }\n\n  var Library = /*#__PURE__*/function () {\n    function Library() {\n      _classCallCheck(this, Library);\n\n      this.definitions = {};\n    }\n\n    _createClass(Library, [{\n      key: \"add\",\n      value: function add() {\n        var _this = this;\n\n        for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n          definitions[_key] = arguments[_key];\n        }\n\n        var additions = definitions.reduce(this._pullDefinitions, {});\n        Object.keys(additions).forEach(function (key) {\n          _this.definitions[key] = _objectSpread2(_objectSpread2({}, _this.definitions[key] || {}), additions[key]);\n          defineIcons(key, additions[key]);\n          var longPrefix = PREFIX_TO_LONG_STYLE[key];\n          if (longPrefix) defineIcons(longPrefix, additions[key]);\n          build();\n        });\n      }\n    }, {\n      key: \"reset\",\n      value: function reset() {\n        this.definitions = {};\n      }\n    }, {\n      key: \"_pullDefinitions\",\n      value: function _pullDefinitions(additions, definition) {\n        var normalized = definition.prefix && definition.iconName && definition.icon ? {\n          0: definition\n        } : definition;\n        Object.keys(normalized).map(function (key) {\n          var _normalized$key = normalized[key],\n              prefix = _normalized$key.prefix,\n              iconName = _normalized$key.iconName,\n              icon = _normalized$key.icon;\n          var aliases = icon[2];\n          if (!additions[prefix]) additions[prefix] = {};\n\n          if (aliases.length > 0) {\n            aliases.forEach(function (alias) {\n              if (typeof alias === 'string') {\n                additions[prefix][alias] = icon;\n              }\n            });\n          }\n\n          additions[prefix][iconName] = icon;\n        });\n        return additions;\n      }\n    }]);\n\n    return Library;\n  }();\n\n  var _plugins = [];\n  var _hooks = {};\n  var providers = {};\n  var defaultProviderKeys = Object.keys(providers);\n  function registerPlugins(nextPlugins, _ref) {\n    var obj = _ref.mixoutsTo;\n    _plugins = nextPlugins;\n    _hooks = {};\n    Object.keys(providers).forEach(function (k) {\n      if (defaultProviderKeys.indexOf(k) === -1) {\n        delete providers[k];\n      }\n    });\n\n    _plugins.forEach(function (plugin) {\n      var mixout = plugin.mixout ? plugin.mixout() : {};\n      Object.keys(mixout).forEach(function (tk) {\n        if (typeof mixout[tk] === 'function') {\n          obj[tk] = mixout[tk];\n        }\n\n        if (_typeof(mixout[tk]) === 'object') {\n          Object.keys(mixout[tk]).forEach(function (sk) {\n            if (!obj[tk]) {\n              obj[tk] = {};\n            }\n\n            obj[tk][sk] = mixout[tk][sk];\n          });\n        }\n      });\n\n      if (plugin.hooks) {\n        var hooks = plugin.hooks();\n        Object.keys(hooks).forEach(function (hook) {\n          if (!_hooks[hook]) {\n            _hooks[hook] = [];\n          }\n\n          _hooks[hook].push(hooks[hook]);\n        });\n      }\n\n      if (plugin.provides) {\n        plugin.provides(providers);\n      }\n    });\n\n    return obj;\n  }\n  function chainHooks(hook, accumulator) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    var hookFns = _hooks[hook] || [];\n    hookFns.forEach(function (hookFn) {\n      accumulator = hookFn.apply(null, [accumulator].concat(args)); // eslint-disable-line no-useless-call\n    });\n    return accumulator;\n  }\n  function callHooks(hook) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    var hookFns = _hooks[hook] || [];\n    hookFns.forEach(function (hookFn) {\n      hookFn.apply(null, args);\n    });\n    return undefined;\n  }\n  function callProvided() {\n    var hook = arguments[0];\n    var args = Array.prototype.slice.call(arguments, 1);\n    return providers[hook] ? providers[hook].apply(null, args) : undefined;\n  }\n\n  function findIconDefinition(iconLookup) {\n    if (iconLookup.prefix === 'fa') {\n      iconLookup.prefix = 'fas';\n    }\n\n    var iconName = iconLookup.iconName;\n    var prefix = iconLookup.prefix || getDefaultUsablePrefix();\n    if (!iconName) return;\n    iconName = byAlias(prefix, iconName) || iconName;\n    return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n  }\n  var library = new Library();\n  var noAuto = function noAuto() {\n    config.autoReplaceSvg = false;\n    config.observeMutations = false;\n    callHooks('noAuto');\n  };\n  var dom = {\n    i2svg: function i2svg() {\n      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      if (IS_DOM) {\n        callHooks('beforeI2svg', params);\n        callProvided('pseudoElements2svg', params);\n        return callProvided('i2svg', params);\n      } else {\n        return Promise.reject('Operation requires a DOM of some kind.');\n      }\n    },\n    watch: function watch() {\n      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var autoReplaceSvgRoot = params.autoReplaceSvgRoot;\n\n      if (config.autoReplaceSvg === false) {\n        config.autoReplaceSvg = true;\n      }\n\n      config.observeMutations = true;\n      domready(function () {\n        autoReplace({\n          autoReplaceSvgRoot: autoReplaceSvgRoot\n        });\n        callHooks('watch', params);\n      });\n    }\n  };\n  var parse = {\n    icon: function icon(_icon) {\n      if (_icon === null) {\n        return null;\n      }\n\n      if (_typeof(_icon) === 'object' && _icon.prefix && _icon.iconName) {\n        return {\n          prefix: _icon.prefix,\n          iconName: byAlias(_icon.prefix, _icon.iconName) || _icon.iconName\n        };\n      }\n\n      if (Array.isArray(_icon) && _icon.length === 2) {\n        var iconName = _icon[1].indexOf('fa-') === 0 ? _icon[1].slice(3) : _icon[1];\n        var prefix = getCanonicalPrefix(_icon[0]);\n        return {\n          prefix: prefix,\n          iconName: byAlias(prefix, iconName) || iconName\n        };\n      }\n\n      if (typeof _icon === 'string' && (_icon.indexOf(\"\".concat(config.familyPrefix, \"-\")) > -1 || _icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n        var canonicalIcon = getCanonicalIcon(_icon.split(' '), {\n          skipLookups: true\n        });\n        return {\n          prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n          iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n        };\n      }\n\n      if (typeof _icon === 'string') {\n        var _prefix = getDefaultUsablePrefix();\n\n        return {\n          prefix: _prefix,\n          iconName: byAlias(_prefix, _icon) || _icon\n        };\n      }\n    }\n  };\n  var api = {\n    noAuto: noAuto,\n    config: config,\n    dom: dom,\n    parse: parse,\n    library: library,\n    findIconDefinition: findIconDefinition,\n    toHtml: toHtml\n  };\n\n  var autoReplace = function autoReplace() {\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n        autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n    if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n      node: autoReplaceSvgRoot\n    });\n  };\n\n  function bootstrap(plugins) {\n    if (IS_BROWSER) {\n      if (!WINDOW.FontAwesome) {\n        WINDOW.FontAwesome = api;\n      }\n\n      domready(function () {\n        autoReplace();\n        callHooks('bootstrap');\n      });\n    }\n\n    namespace.hooks = _objectSpread2(_objectSpread2({}, namespace.hooks), {}, {\n      addPack: function addPack(prefix, icons) {\n        namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), icons);\n        build();\n        autoReplace();\n      },\n      addPacks: function addPacks(packs) {\n        packs.forEach(function (_ref) {\n          var _ref2 = _slicedToArray(_ref, 2),\n              prefix = _ref2[0],\n              icons = _ref2[1];\n\n          namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), icons);\n        });\n        build();\n        autoReplace();\n      },\n      addShims: function addShims(shims) {\n        var _namespace$shims;\n\n        (_namespace$shims = namespace.shims).push.apply(_namespace$shims, _toConsumableArray(shims));\n\n        build();\n        autoReplace();\n      }\n    });\n  }\n\n  function domVariants(val, abstractCreator) {\n    Object.defineProperty(val, 'abstract', {\n      get: abstractCreator\n    });\n    Object.defineProperty(val, 'html', {\n      get: function get() {\n        return val.abstract.map(function (a) {\n          return toHtml(a);\n        });\n      }\n    });\n    Object.defineProperty(val, 'node', {\n      get: function get() {\n        if (!IS_DOM) return;\n        var container = DOCUMENT.createElement('div');\n        container.innerHTML = val.html;\n        return container.children;\n      }\n    });\n    return val;\n  }\n\n  function asIcon (_ref) {\n    var children = _ref.children,\n        main = _ref.main,\n        mask = _ref.mask,\n        attributes = _ref.attributes,\n        styles = _ref.styles,\n        transform = _ref.transform;\n\n    if (transformIsMeaningful(transform) && main.found && !mask.found) {\n      var width = main.width,\n          height = main.height;\n      var offset = {\n        x: width / height / 2,\n        y: 0.5\n      };\n      attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n        'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n      }));\n    }\n\n    return [{\n      tag: 'svg',\n      attributes: attributes,\n      children: children\n    }];\n  }\n\n  function asSymbol (_ref) {\n    var prefix = _ref.prefix,\n        iconName = _ref.iconName,\n        children = _ref.children,\n        attributes = _ref.attributes,\n        symbol = _ref.symbol;\n    var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.familyPrefix, \"-\").concat(iconName) : symbol;\n    return [{\n      tag: 'svg',\n      attributes: {\n        style: 'display: none;'\n      },\n      children: [{\n        tag: 'symbol',\n        attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n          id: id\n        }),\n        children: children\n      }]\n    }];\n  }\n\n  function makeInlineSvgAbstract(params) {\n    var _params$icons = params.icons,\n        main = _params$icons.main,\n        mask = _params$icons.mask,\n        prefix = params.prefix,\n        iconName = params.iconName,\n        transform = params.transform,\n        symbol = params.symbol,\n        title = params.title,\n        maskId = params.maskId,\n        titleId = params.titleId,\n        extra = params.extra,\n        _params$watchable = params.watchable,\n        watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n    var _ref = mask.found ? mask : main,\n        width = _ref.width,\n        height = _ref.height;\n\n    var isUploadedIcon = prefix === 'fak';\n    var attrClass = [config.replacementClass, iconName ? \"\".concat(config.familyPrefix, \"-\").concat(iconName) : ''].filter(function (c) {\n      return extra.classes.indexOf(c) === -1;\n    }).filter(function (c) {\n      return c !== '' || !!c;\n    }).concat(extra.classes).join(' ');\n    var content = {\n      children: [],\n      attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n        'data-prefix': prefix,\n        'data-icon': iconName,\n        'class': attrClass,\n        'role': extra.attributes.role || 'img',\n        'xmlns': 'http://www.w3.org/2000/svg',\n        'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n      })\n    };\n    var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n      width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n    } : {};\n\n    if (watchable) {\n      content.attributes[DATA_FA_I2SVG] = '';\n    }\n\n    if (title) {\n      content.children.push({\n        tag: 'title',\n        attributes: {\n          id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n        },\n        children: [title]\n      });\n      delete content.attributes.title;\n    }\n\n    var args = _objectSpread2(_objectSpread2({}, content), {}, {\n      prefix: prefix,\n      iconName: iconName,\n      main: main,\n      mask: mask,\n      maskId: maskId,\n      transform: transform,\n      symbol: symbol,\n      styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n    });\n\n    var _ref2 = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n      children: [],\n      attributes: {}\n    } : callProvided('generateAbstractIcon', args) || {\n      children: [],\n      attributes: {}\n    },\n        children = _ref2.children,\n        attributes = _ref2.attributes;\n\n    args.children = children;\n    args.attributes = attributes;\n\n    if (symbol) {\n      return asSymbol(args);\n    } else {\n      return asIcon(args);\n    }\n  }\n  function makeLayersTextAbstract(params) {\n    var content = params.content,\n        width = params.width,\n        height = params.height,\n        transform = params.transform,\n        title = params.title,\n        extra = params.extra,\n        _params$watchable2 = params.watchable,\n        watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n    var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n      'title': title\n    } : {}), {}, {\n      'class': extra.classes.join(' ')\n    });\n\n    if (watchable) {\n      attributes[DATA_FA_I2SVG] = '';\n    }\n\n    var styles = _objectSpread2({}, extra.styles);\n\n    if (transformIsMeaningful(transform)) {\n      styles['transform'] = transformForCss({\n        transform: transform,\n        startCentered: true,\n        width: width,\n        height: height\n      });\n      styles['-webkit-transform'] = styles['transform'];\n    }\n\n    var styleString = joinStyles(styles);\n\n    if (styleString.length > 0) {\n      attributes['style'] = styleString;\n    }\n\n    var val = [];\n    val.push({\n      tag: 'span',\n      attributes: attributes,\n      children: [content]\n    });\n\n    if (title) {\n      val.push({\n        tag: 'span',\n        attributes: {\n          class: 'sr-only'\n        },\n        children: [title]\n      });\n    }\n\n    return val;\n  }\n  function makeLayersCounterAbstract(params) {\n    var content = params.content,\n        title = params.title,\n        extra = params.extra;\n\n    var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n      'title': title\n    } : {}), {}, {\n      'class': extra.classes.join(' ')\n    });\n\n    var styleString = joinStyles(extra.styles);\n\n    if (styleString.length > 0) {\n      attributes['style'] = styleString;\n    }\n\n    var val = [];\n    val.push({\n      tag: 'span',\n      attributes: attributes,\n      children: [content]\n    });\n\n    if (title) {\n      val.push({\n        tag: 'span',\n        attributes: {\n          class: 'sr-only'\n        },\n        children: [title]\n      });\n    }\n\n    return val;\n  }\n\n  var styles$1 = namespace.styles;\n  function asFoundIcon(icon) {\n    var width = icon[0];\n    var height = icon[1];\n\n    var _icon$slice = icon.slice(4),\n        _icon$slice2 = _slicedToArray(_icon$slice, 1),\n        vectorData = _icon$slice2[0];\n\n    var element = null;\n\n    if (Array.isArray(vectorData)) {\n      element = {\n        tag: 'g',\n        attributes: {\n          class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n        },\n        children: [{\n          tag: 'path',\n          attributes: {\n            class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n            fill: 'currentColor',\n            d: vectorData[0]\n          }\n        }, {\n          tag: 'path',\n          attributes: {\n            class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n            fill: 'currentColor',\n            d: vectorData[1]\n          }\n        }]\n      };\n    } else {\n      element = {\n        tag: 'path',\n        attributes: {\n          fill: 'currentColor',\n          d: vectorData\n        }\n      };\n    }\n\n    return {\n      found: true,\n      width: width,\n      height: height,\n      icon: element\n    };\n  }\n  var missingIconResolutionMixin = {\n    found: false,\n    width: 512,\n    height: 512\n  };\n\n  function maybeNotifyMissing(iconName, prefix) {\n    if (!PRODUCTION && !config.showMissingIcons && iconName) {\n      console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n    }\n  }\n\n  function findIcon(iconName, prefix) {\n    var givenPrefix = prefix;\n\n    if (prefix === 'fa' && config.styleDefault !== null) {\n      prefix = getDefaultUsablePrefix();\n    }\n\n    return new Promise(function (resolve, reject) {\n      var val = {\n        found: false,\n        width: 512,\n        height: 512,\n        icon: callProvided('missingIconAbstract') || {}\n      };\n\n      if (givenPrefix === 'fa') {\n        var shim = byOldName(iconName) || {};\n        iconName = shim.iconName || iconName;\n        prefix = shim.prefix || prefix;\n      }\n\n      if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n        var icon = styles$1[prefix][iconName];\n        return resolve(asFoundIcon(icon));\n      }\n\n      maybeNotifyMissing(iconName, prefix);\n      resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n        icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n      }));\n    });\n  }\n\n  var noop$1 = function noop() {};\n\n  var p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n    mark: noop$1,\n    measure: noop$1\n  };\n  var preamble = \"FA \\\"6.0.0\\\"\";\n\n  var begin = function begin(name) {\n    p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n    return function () {\n      return end(name);\n    };\n  };\n\n  var end = function end(name) {\n    p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n    p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n  };\n\n  var perf = {\n    begin: begin,\n    end: end\n  };\n\n  var noop$2 = function noop() {};\n\n  function isWatched(node) {\n    var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n    return typeof i2svg === 'string';\n  }\n\n  function hasPrefixAndIcon(node) {\n    var prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n    var icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n    return prefix && icon;\n  }\n\n  function hasBeenReplaced(node) {\n    return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n  }\n\n  function getMutator() {\n    if (config.autoReplaceSvg === true) {\n      return mutators.replace;\n    }\n\n    var mutator = mutators[config.autoReplaceSvg];\n    return mutator || mutators.replace;\n  }\n\n  function createElementNS(tag) {\n    return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n  }\n\n  function createElement(tag) {\n    return DOCUMENT.createElement(tag);\n  }\n\n  function convertSVG(abstractObj) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _params$ceFn = params.ceFn,\n        ceFn = _params$ceFn === void 0 ? abstractObj.tag === 'svg' ? createElementNS : createElement : _params$ceFn;\n\n    if (typeof abstractObj === 'string') {\n      return DOCUMENT.createTextNode(abstractObj);\n    }\n\n    var tag = ceFn(abstractObj.tag);\n    Object.keys(abstractObj.attributes || []).forEach(function (key) {\n      tag.setAttribute(key, abstractObj.attributes[key]);\n    });\n    var children = abstractObj.children || [];\n    children.forEach(function (child) {\n      tag.appendChild(convertSVG(child, {\n        ceFn: ceFn\n      }));\n    });\n    return tag;\n  }\n\n  function nodeAsComment(node) {\n    var comment = \" \".concat(node.outerHTML, \" \");\n    /* BEGIN.ATTRIBUTION */\n\n    comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n    /* END.ATTRIBUTION */\n\n    return comment;\n  }\n\n  var mutators = {\n    replace: function replace(mutation) {\n      var node = mutation[0];\n\n      if (node.parentNode) {\n        mutation[1].forEach(function (abstract) {\n          node.parentNode.insertBefore(convertSVG(abstract), node);\n        });\n\n        if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n          var comment = DOCUMENT.createComment(nodeAsComment(node));\n          node.parentNode.replaceChild(comment, node);\n        } else {\n          node.remove();\n        }\n      }\n    },\n    nest: function nest(mutation) {\n      var node = mutation[0];\n      var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n      // Short-circuit to the standard replacement\n\n      if (~classArray(node).indexOf(config.replacementClass)) {\n        return mutators.replace(mutation);\n      }\n\n      var forSvg = new RegExp(\"\".concat(config.familyPrefix, \"-.*\"));\n      delete abstract[0].attributes.id;\n\n      if (abstract[0].attributes.class) {\n        var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n          if (cls === config.replacementClass || cls.match(forSvg)) {\n            acc.toSvg.push(cls);\n          } else {\n            acc.toNode.push(cls);\n          }\n\n          return acc;\n        }, {\n          toNode: [],\n          toSvg: []\n        });\n        abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n\n        if (splitClasses.toNode.length === 0) {\n          node.removeAttribute('class');\n        } else {\n          node.setAttribute('class', splitClasses.toNode.join(' '));\n        }\n      }\n\n      var newInnerHTML = abstract.map(function (a) {\n        return toHtml(a);\n      }).join('\\n');\n      node.setAttribute(DATA_FA_I2SVG, '');\n      node.innerHTML = newInnerHTML;\n    }\n  };\n\n  function performOperationSync(op) {\n    op();\n  }\n\n  function perform(mutations, callback) {\n    var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n    if (mutations.length === 0) {\n      callbackFunction();\n    } else {\n      var frame = performOperationSync;\n\n      if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n        frame = WINDOW.requestAnimationFrame || performOperationSync;\n      }\n\n      frame(function () {\n        var mutator = getMutator();\n        var mark = perf.begin('mutate');\n        mutations.map(mutator);\n        mark();\n        callbackFunction();\n      });\n    }\n  }\n  var disabled = false;\n  function disableObservation() {\n    disabled = true;\n  }\n  function enableObservation() {\n    disabled = false;\n  }\n  var mo = null;\n  function observe(options) {\n    if (!MUTATION_OBSERVER) {\n      return;\n    }\n\n    if (!config.observeMutations) {\n      return;\n    }\n\n    var _options$treeCallback = options.treeCallback,\n        treeCallback = _options$treeCallback === void 0 ? noop$2 : _options$treeCallback,\n        _options$nodeCallback = options.nodeCallback,\n        nodeCallback = _options$nodeCallback === void 0 ? noop$2 : _options$nodeCallback,\n        _options$pseudoElemen = options.pseudoElementsCallback,\n        pseudoElementsCallback = _options$pseudoElemen === void 0 ? noop$2 : _options$pseudoElemen,\n        _options$observeMutat = options.observeMutationsRoot,\n        observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n    mo = new MUTATION_OBSERVER(function (objects) {\n      if (disabled) return;\n      var defaultPrefix = getDefaultUsablePrefix();\n      toArray(objects).forEach(function (mutationRecord) {\n        if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n          if (config.searchPseudoElements) {\n            pseudoElementsCallback(mutationRecord.target);\n          }\n\n          treeCallback(mutationRecord.target);\n        }\n\n        if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n          pseudoElementsCallback(mutationRecord.target.parentNode);\n        }\n\n        if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n          if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n            var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n                prefix = _getCanonicalIcon.prefix,\n                iconName = _getCanonicalIcon.iconName;\n\n            mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n            if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n          } else if (hasBeenReplaced(mutationRecord.target)) {\n            nodeCallback(mutationRecord.target);\n          }\n        }\n      });\n    });\n    if (!IS_DOM) return;\n    mo.observe(observeMutationsRoot, {\n      childList: true,\n      attributes: true,\n      characterData: true,\n      subtree: true\n    });\n  }\n  function disconnect() {\n    if (!mo) return;\n    mo.disconnect();\n  }\n\n  function styleParser (node) {\n    var style = node.getAttribute('style');\n    var val = [];\n\n    if (style) {\n      val = style.split(';').reduce(function (acc, style) {\n        var styles = style.split(':');\n        var prop = styles[0];\n        var value = styles.slice(1);\n\n        if (prop && value.length > 0) {\n          acc[prop] = value.join(':').trim();\n        }\n\n        return acc;\n      }, {});\n    }\n\n    return val;\n  }\n\n  function classParser (node) {\n    var existingPrefix = node.getAttribute('data-prefix');\n    var existingIconName = node.getAttribute('data-icon');\n    var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n    var val = getCanonicalIcon(classArray(node));\n\n    if (!val.prefix) {\n      val.prefix = getDefaultUsablePrefix();\n    }\n\n    if (existingPrefix && existingIconName) {\n      val.prefix = existingPrefix;\n      val.iconName = existingIconName;\n    }\n\n    if (val.iconName && val.prefix) {\n      return val;\n    }\n\n    if (val.prefix && innerText.length > 0) {\n      val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n    }\n\n    return val;\n  }\n\n  function attributesParser (node) {\n    var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n      if (acc.name !== 'class' && acc.name !== 'style') {\n        acc[attr.name] = attr.value;\n      }\n\n      return acc;\n    }, {});\n    var title = node.getAttribute('title');\n    var titleId = node.getAttribute('data-fa-title-id');\n\n    if (config.autoA11y) {\n      if (title) {\n        extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n      } else {\n        extraAttributes['aria-hidden'] = 'true';\n        extraAttributes['focusable'] = 'false';\n      }\n    }\n\n    return extraAttributes;\n  }\n\n  function blankMeta() {\n    return {\n      iconName: null,\n      title: null,\n      titleId: null,\n      prefix: null,\n      transform: meaninglessTransform,\n      symbol: false,\n      mask: {\n        iconName: null,\n        prefix: null,\n        rest: []\n      },\n      maskId: null,\n      extra: {\n        classes: [],\n        styles: {},\n        attributes: {}\n      }\n    };\n  }\n  function parseMeta(node) {\n    var parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      styleParser: true\n    };\n\n    var _classParser = classParser(node),\n        iconName = _classParser.iconName,\n        prefix = _classParser.prefix,\n        extraClasses = _classParser.rest;\n\n    var extraAttributes = attributesParser(node);\n    var pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n    var extraStyles = parser.styleParser ? styleParser(node) : [];\n    return _objectSpread2({\n      iconName: iconName,\n      title: node.getAttribute('title'),\n      titleId: node.getAttribute('data-fa-title-id'),\n      prefix: prefix,\n      transform: meaninglessTransform,\n      mask: {\n        iconName: null,\n        prefix: null,\n        rest: []\n      },\n      maskId: null,\n      symbol: false,\n      extra: {\n        classes: extraClasses,\n        styles: extraStyles,\n        attributes: extraAttributes\n      }\n    }, pluginMeta);\n  }\n\n  var styles$2 = namespace.styles;\n\n  function generateMutation(node) {\n    var nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n      styleParser: false\n    }) : parseMeta(node);\n\n    if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n      return callProvided('generateLayersText', node, nodeMeta);\n    } else {\n      return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n    }\n  }\n\n  function onTree(root) {\n    var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    if (!IS_DOM) return Promise.resolve();\n    var htmlClassList = DOCUMENT.documentElement.classList;\n\n    var hclAdd = function hclAdd(suffix) {\n      return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n    };\n\n    var hclRemove = function hclRemove(suffix) {\n      return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n    };\n\n    var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$2);\n    var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n      return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n    })).join(', ');\n\n    if (prefixesDomQuery.length === 0) {\n      return Promise.resolve();\n    }\n\n    var candidates = [];\n\n    try {\n      candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n    } catch (e) {// noop\n    }\n\n    if (candidates.length > 0) {\n      hclAdd('pending');\n      hclRemove('complete');\n    } else {\n      return Promise.resolve();\n    }\n\n    var mark = perf.begin('onTree');\n    var mutations = candidates.reduce(function (acc, node) {\n      try {\n        var mutation = generateMutation(node);\n\n        if (mutation) {\n          acc.push(mutation);\n        }\n      } catch (e) {\n        if (!PRODUCTION) {\n          if (e.name === 'MissingIcon') {\n            console.error(e);\n          }\n        }\n      }\n\n      return acc;\n    }, []);\n    return new Promise(function (resolve, reject) {\n      Promise.all(mutations).then(function (resolvedMutations) {\n        perform(resolvedMutations, function () {\n          hclAdd('active');\n          hclAdd('complete');\n          hclRemove('pending');\n          if (typeof callback === 'function') callback();\n          mark();\n          resolve();\n        });\n      }).catch(function (e) {\n        mark();\n        reject(e);\n      });\n    });\n  }\n\n  function onNode(node) {\n    var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    generateMutation(node).then(function (mutation) {\n      if (mutation) {\n        perform([mutation], callback);\n      }\n    });\n  }\n\n  function resolveIcons(next) {\n    return function (maybeIconDefinition) {\n      var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n      var mask = params.mask;\n\n      if (mask) {\n        mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n      }\n\n      return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n        mask: mask\n      }));\n    };\n  }\n\n  var render = function render(iconDefinition) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _params$transform = params.transform,\n        transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n        _params$symbol = params.symbol,\n        symbol = _params$symbol === void 0 ? false : _params$symbol,\n        _params$mask = params.mask,\n        mask = _params$mask === void 0 ? null : _params$mask,\n        _params$maskId = params.maskId,\n        maskId = _params$maskId === void 0 ? null : _params$maskId,\n        _params$title = params.title,\n        title = _params$title === void 0 ? null : _params$title,\n        _params$titleId = params.titleId,\n        titleId = _params$titleId === void 0 ? null : _params$titleId,\n        _params$classes = params.classes,\n        classes = _params$classes === void 0 ? [] : _params$classes,\n        _params$attributes = params.attributes,\n        attributes = _params$attributes === void 0 ? {} : _params$attributes,\n        _params$styles = params.styles,\n        styles = _params$styles === void 0 ? {} : _params$styles;\n    if (!iconDefinition) return;\n    var prefix = iconDefinition.prefix,\n        iconName = iconDefinition.iconName,\n        icon = iconDefinition.icon;\n    return domVariants(_objectSpread2({\n      type: 'icon'\n    }, iconDefinition), function () {\n      callHooks('beforeDOMElementCreation', {\n        iconDefinition: iconDefinition,\n        params: params\n      });\n\n      if (config.autoA11y) {\n        if (title) {\n          attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n        } else {\n          attributes['aria-hidden'] = 'true';\n          attributes['focusable'] = 'false';\n        }\n      }\n\n      return makeInlineSvgAbstract({\n        icons: {\n          main: asFoundIcon(icon),\n          mask: mask ? asFoundIcon(mask.icon) : {\n            found: false,\n            width: null,\n            height: null,\n            icon: {}\n          }\n        },\n        prefix: prefix,\n        iconName: iconName,\n        transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n        symbol: symbol,\n        title: title,\n        maskId: maskId,\n        titleId: titleId,\n        extra: {\n          attributes: attributes,\n          styles: styles,\n          classes: classes\n        }\n      });\n    });\n  };\n  var ReplaceElements = {\n    mixout: function mixout() {\n      return {\n        icon: resolveIcons(render)\n      };\n    },\n    hooks: function hooks() {\n      return {\n        mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n          accumulator.treeCallback = onTree;\n          accumulator.nodeCallback = onNode;\n          return accumulator;\n        }\n      };\n    },\n    provides: function provides(providers$$1) {\n      providers$$1.i2svg = function (params) {\n        var _params$node = params.node,\n            node = _params$node === void 0 ? DOCUMENT : _params$node,\n            _params$callback = params.callback,\n            callback = _params$callback === void 0 ? function () {} : _params$callback;\n        return onTree(node, callback);\n      };\n\n      providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n        var iconName = nodeMeta.iconName,\n            title = nodeMeta.title,\n            titleId = nodeMeta.titleId,\n            prefix = nodeMeta.prefix,\n            transform = nodeMeta.transform,\n            symbol = nodeMeta.symbol,\n            mask = nodeMeta.mask,\n            maskId = nodeMeta.maskId,\n            extra = nodeMeta.extra;\n        return new Promise(function (resolve, reject) {\n          Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n            found: false,\n            width: 512,\n            height: 512,\n            icon: {}\n          })]).then(function (_ref) {\n            var _ref2 = _slicedToArray(_ref, 2),\n                main = _ref2[0],\n                mask = _ref2[1];\n\n            resolve([node, makeInlineSvgAbstract({\n              icons: {\n                main: main,\n                mask: mask\n              },\n              prefix: prefix,\n              iconName: iconName,\n              transform: transform,\n              symbol: symbol,\n              maskId: maskId,\n              title: title,\n              titleId: titleId,\n              extra: extra,\n              watchable: true\n            })]);\n          }).catch(reject);\n        });\n      };\n\n      providers$$1.generateAbstractIcon = function (_ref3) {\n        var children = _ref3.children,\n            attributes = _ref3.attributes,\n            main = _ref3.main,\n            transform = _ref3.transform,\n            styles = _ref3.styles;\n        var styleString = joinStyles(styles);\n\n        if (styleString.length > 0) {\n          attributes['style'] = styleString;\n        }\n\n        var nextChild;\n\n        if (transformIsMeaningful(transform)) {\n          nextChild = callProvided('generateAbstractTransformGrouping', {\n            main: main,\n            transform: transform,\n            containerWidth: main.width,\n            iconWidth: main.width\n          });\n        }\n\n        children.push(nextChild || main.icon);\n        return {\n          children: children,\n          attributes: attributes\n        };\n      };\n    }\n  };\n\n  var Layers = {\n    mixout: function mixout() {\n      return {\n        layer: function layer(assembler) {\n          var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          var _params$classes = params.classes,\n              classes = _params$classes === void 0 ? [] : _params$classes;\n          return domVariants({\n            type: 'layer'\n          }, function () {\n            callHooks('beforeDOMElementCreation', {\n              assembler: assembler,\n              params: params\n            });\n            var children = [];\n            assembler(function (args) {\n              Array.isArray(args) ? args.map(function (a) {\n                children = children.concat(a.abstract);\n              }) : children = children.concat(args.abstract);\n            });\n            return [{\n              tag: 'span',\n              attributes: {\n                class: [\"\".concat(config.familyPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n              },\n              children: children\n            }];\n          });\n        }\n      };\n    }\n  };\n\n  var LayersCounter = {\n    mixout: function mixout() {\n      return {\n        counter: function counter(content) {\n          var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          var _params$title = params.title,\n              title = _params$title === void 0 ? null : _params$title,\n              _params$classes = params.classes,\n              classes = _params$classes === void 0 ? [] : _params$classes,\n              _params$attributes = params.attributes,\n              attributes = _params$attributes === void 0 ? {} : _params$attributes,\n              _params$styles = params.styles,\n              styles = _params$styles === void 0 ? {} : _params$styles;\n          return domVariants({\n            type: 'counter',\n            content: content\n          }, function () {\n            callHooks('beforeDOMElementCreation', {\n              content: content,\n              params: params\n            });\n            return makeLayersCounterAbstract({\n              content: content.toString(),\n              title: title,\n              extra: {\n                attributes: attributes,\n                styles: styles,\n                classes: [\"\".concat(config.familyPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n              }\n            });\n          });\n        }\n      };\n    }\n  };\n\n  var LayersText = {\n    mixout: function mixout() {\n      return {\n        text: function text(content) {\n          var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n          var _params$transform = params.transform,\n              transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n              _params$title = params.title,\n              title = _params$title === void 0 ? null : _params$title,\n              _params$classes = params.classes,\n              classes = _params$classes === void 0 ? [] : _params$classes,\n              _params$attributes = params.attributes,\n              attributes = _params$attributes === void 0 ? {} : _params$attributes,\n              _params$styles = params.styles,\n              styles = _params$styles === void 0 ? {} : _params$styles;\n          return domVariants({\n            type: 'text',\n            content: content\n          }, function () {\n            callHooks('beforeDOMElementCreation', {\n              content: content,\n              params: params\n            });\n            return makeLayersTextAbstract({\n              content: content,\n              transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n              title: title,\n              extra: {\n                attributes: attributes,\n                styles: styles,\n                classes: [\"\".concat(config.familyPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n              }\n            });\n          });\n        }\n      };\n    },\n    provides: function provides(providers$$1) {\n      providers$$1.generateLayersText = function (node, nodeMeta) {\n        var title = nodeMeta.title,\n            transform = nodeMeta.transform,\n            extra = nodeMeta.extra;\n        var width = null;\n        var height = null;\n\n        if (IS_IE) {\n          var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n          var boundingClientRect = node.getBoundingClientRect();\n          width = boundingClientRect.width / computedFontSize;\n          height = boundingClientRect.height / computedFontSize;\n        }\n\n        if (config.autoA11y && !title) {\n          extra.attributes['aria-hidden'] = 'true';\n        }\n\n        return Promise.resolve([node, makeLayersTextAbstract({\n          content: node.innerHTML,\n          width: width,\n          height: height,\n          transform: transform,\n          title: title,\n          extra: extra,\n          watchable: true\n        })]);\n      };\n    }\n  };\n\n  var CLEAN_CONTENT_PATTERN = new RegExp(\"\\\"\", 'ug');\n  var SECONDARY_UNICODE_RANGE = [1105920, 1112319];\n  function hexValueFromContent(content) {\n    var cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n    var codePoint = codePointAt(cleaned, 0);\n    var isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n    var isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n    return {\n      value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n      isSecondary: isPrependTen || isDoubled\n    };\n  }\n\n  function replaceForPosition(node, position) {\n    var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n    return new Promise(function (resolve, reject) {\n      if (node.getAttribute(pendingAttribute) !== null) {\n        // This node is already being processed\n        return resolve();\n      }\n\n      var children = toArray(node.children);\n      var alreadyProcessedPseudoElement = children.filter(function (c) {\n        return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n      })[0];\n      var styles = WINDOW.getComputedStyle(node, position);\n      var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n      var fontWeight = styles.getPropertyValue('font-weight');\n      var content = styles.getPropertyValue('content');\n\n      if (alreadyProcessedPseudoElement && !fontFamily) {\n        // If we've already processed it but the current computed style does not result in a font-family,\n        // that probably means that a class name that was previously present to make the icon has been\n        // removed. So we now should delete the icon.\n        node.removeChild(alreadyProcessedPseudoElement);\n        return resolve();\n      } else if (fontFamily && content !== 'none' && content !== '') {\n        var _content = styles.getPropertyValue('content');\n\n        var prefix = ~['Solid', 'Regular', 'Light', 'Thin', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\n\n        var _hexValueFromContent = hexValueFromContent(_content),\n            hexValue = _hexValueFromContent.value,\n            isSecondary = _hexValueFromContent.isSecondary;\n\n        var isV4 = fontFamily[0].startsWith('FontAwesome');\n        var iconName = byUnicode(prefix, hexValue);\n        var iconIdentifier = iconName;\n\n        if (isV4) {\n          var iconName4 = byOldUnicode(hexValue);\n\n          if (iconName4.iconName && iconName4.prefix) {\n            iconName = iconName4.iconName;\n            prefix = iconName4.prefix;\n          }\n        } // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n        // already done so with the same prefix and iconName\n\n\n        if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n          node.setAttribute(pendingAttribute, iconIdentifier);\n\n          if (alreadyProcessedPseudoElement) {\n            // Delete the old one, since we're replacing it with a new one\n            node.removeChild(alreadyProcessedPseudoElement);\n          }\n\n          var meta = blankMeta();\n          var extra = meta.extra;\n          extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n          findIcon(iconName, prefix).then(function (main) {\n            var abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n              icons: {\n                main: main,\n                mask: emptyCanonicalIcon()\n              },\n              prefix: prefix,\n              iconName: iconIdentifier,\n              extra: extra,\n              watchable: true\n            }));\n            var element = DOCUMENT.createElement('svg');\n\n            if (position === '::before') {\n              node.insertBefore(element, node.firstChild);\n            } else {\n              node.appendChild(element);\n            }\n\n            element.outerHTML = abstract.map(function (a) {\n              return toHtml(a);\n            }).join('\\n');\n            node.removeAttribute(pendingAttribute);\n            resolve();\n          }).catch(reject);\n        } else {\n          resolve();\n        }\n      } else {\n        resolve();\n      }\n    });\n  }\n\n  function replace(node) {\n    return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n  }\n\n  function processable(node) {\n    return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n  }\n\n  function searchPseudoElements(root) {\n    if (!IS_DOM) return;\n    return new Promise(function (resolve, reject) {\n      var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n      var end = perf.begin('searchPseudoElements');\n      disableObservation();\n      Promise.all(operations).then(function () {\n        end();\n        enableObservation();\n        resolve();\n      }).catch(function () {\n        end();\n        enableObservation();\n        reject();\n      });\n    });\n  }\n\n  var PseudoElements = {\n    hooks: function hooks() {\n      return {\n        mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n          accumulator.pseudoElementsCallback = searchPseudoElements;\n          return accumulator;\n        }\n      };\n    },\n    provides: function provides(providers$$1) {\n      providers$$1.pseudoElements2svg = function (params) {\n        var _params$node = params.node,\n            node = _params$node === void 0 ? DOCUMENT : _params$node;\n\n        if (config.searchPseudoElements) {\n          searchPseudoElements(node);\n        }\n      };\n    }\n  };\n\n  var _unwatched = false;\n  var MutationObserver$1 = {\n    mixout: function mixout() {\n      return {\n        dom: {\n          unwatch: function unwatch() {\n            disableObservation();\n            _unwatched = true;\n          }\n        }\n      };\n    },\n    hooks: function hooks() {\n      return {\n        bootstrap: function bootstrap() {\n          observe(chainHooks('mutationObserverCallbacks', {}));\n        },\n        noAuto: function noAuto() {\n          disconnect();\n        },\n        watch: function watch(params) {\n          var observeMutationsRoot = params.observeMutationsRoot;\n\n          if (_unwatched) {\n            enableObservation();\n          } else {\n            observe(chainHooks('mutationObserverCallbacks', {\n              observeMutationsRoot: observeMutationsRoot\n            }));\n          }\n        }\n      };\n    }\n  };\n\n  var parseTransformString = function parseTransformString(transformString) {\n    var transform = {\n      size: 16,\n      x: 0,\n      y: 0,\n      flipX: false,\n      flipY: false,\n      rotate: 0\n    };\n    return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n      var parts = n.toLowerCase().split('-');\n      var first = parts[0];\n      var rest = parts.slice(1).join('-');\n\n      if (first && rest === 'h') {\n        acc.flipX = true;\n        return acc;\n      }\n\n      if (first && rest === 'v') {\n        acc.flipY = true;\n        return acc;\n      }\n\n      rest = parseFloat(rest);\n\n      if (isNaN(rest)) {\n        return acc;\n      }\n\n      switch (first) {\n        case 'grow':\n          acc.size = acc.size + rest;\n          break;\n\n        case 'shrink':\n          acc.size = acc.size - rest;\n          break;\n\n        case 'left':\n          acc.x = acc.x - rest;\n          break;\n\n        case 'right':\n          acc.x = acc.x + rest;\n          break;\n\n        case 'up':\n          acc.y = acc.y - rest;\n          break;\n\n        case 'down':\n          acc.y = acc.y + rest;\n          break;\n\n        case 'rotate':\n          acc.rotate = acc.rotate + rest;\n          break;\n      }\n\n      return acc;\n    }, transform);\n  };\n  var PowerTransforms = {\n    mixout: function mixout() {\n      return {\n        parse: {\n          transform: function transform(transformString) {\n            return parseTransformString(transformString);\n          }\n        }\n      };\n    },\n    hooks: function hooks() {\n      return {\n        parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n          var transformString = node.getAttribute('data-fa-transform');\n\n          if (transformString) {\n            accumulator.transform = parseTransformString(transformString);\n          }\n\n          return accumulator;\n        }\n      };\n    },\n    provides: function provides(providers) {\n      providers.generateAbstractTransformGrouping = function (_ref) {\n        var main = _ref.main,\n            transform = _ref.transform,\n            containerWidth = _ref.containerWidth,\n            iconWidth = _ref.iconWidth;\n        var outer = {\n          transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n        };\n        var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n        var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n        var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n        var inner = {\n          transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n        };\n        var path = {\n          transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n        };\n        var operations = {\n          outer: outer,\n          inner: inner,\n          path: path\n        };\n        return {\n          tag: 'g',\n          attributes: _objectSpread2({}, operations.outer),\n          children: [{\n            tag: 'g',\n            attributes: _objectSpread2({}, operations.inner),\n            children: [{\n              tag: main.icon.tag,\n              children: main.icon.children,\n              attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n            }]\n          }]\n        };\n      };\n    }\n  };\n\n  var ALL_SPACE = {\n    x: 0,\n    y: 0,\n    width: '100%',\n    height: '100%'\n  };\n\n  function fillBlack(abstract) {\n    var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    if (abstract.attributes && (abstract.attributes.fill || force)) {\n      abstract.attributes.fill = 'black';\n    }\n\n    return abstract;\n  }\n\n  function deGroup(abstract) {\n    if (abstract.tag === 'g') {\n      return abstract.children;\n    } else {\n      return [abstract];\n    }\n  }\n\n  var Masks = {\n    hooks: function hooks() {\n      return {\n        parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n          var maskData = node.getAttribute('data-fa-mask');\n          var mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(function (i) {\n            return i.trim();\n          }));\n\n          if (!mask.prefix) {\n            mask.prefix = getDefaultUsablePrefix();\n          }\n\n          accumulator.mask = mask;\n          accumulator.maskId = node.getAttribute('data-fa-mask-id');\n          return accumulator;\n        }\n      };\n    },\n    provides: function provides(providers) {\n      providers.generateAbstractMask = function (_ref) {\n        var children = _ref.children,\n            attributes = _ref.attributes,\n            main = _ref.main,\n            mask = _ref.mask,\n            explicitMaskId = _ref.maskId,\n            transform = _ref.transform;\n        var mainWidth = main.width,\n            mainPath = main.icon;\n        var maskWidth = mask.width,\n            maskPath = mask.icon;\n        var trans = transformForSvg({\n          transform: transform,\n          containerWidth: maskWidth,\n          iconWidth: mainWidth\n        });\n        var maskRect = {\n          tag: 'rect',\n          attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n            fill: 'white'\n          })\n        };\n        var maskInnerGroupChildrenMixin = mainPath.children ? {\n          children: mainPath.children.map(fillBlack)\n        } : {};\n        var maskInnerGroup = {\n          tag: 'g',\n          attributes: _objectSpread2({}, trans.inner),\n          children: [fillBlack(_objectSpread2({\n            tag: mainPath.tag,\n            attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n          }, maskInnerGroupChildrenMixin))]\n        };\n        var maskOuterGroup = {\n          tag: 'g',\n          attributes: _objectSpread2({}, trans.outer),\n          children: [maskInnerGroup]\n        };\n        var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n        var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n        var maskTag = {\n          tag: 'mask',\n          attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n            id: maskId,\n            maskUnits: 'userSpaceOnUse',\n            maskContentUnits: 'userSpaceOnUse'\n          }),\n          children: [maskRect, maskOuterGroup]\n        };\n        var defs = {\n          tag: 'defs',\n          children: [{\n            tag: 'clipPath',\n            attributes: {\n              id: clipId\n            },\n            children: deGroup(maskPath)\n          }, maskTag]\n        };\n        children.push(defs, {\n          tag: 'rect',\n          attributes: _objectSpread2({\n            fill: 'currentColor',\n            'clip-path': \"url(#\".concat(clipId, \")\"),\n            mask: \"url(#\".concat(maskId, \")\")\n          }, ALL_SPACE)\n        });\n        return {\n          children: children,\n          attributes: attributes\n        };\n      };\n    }\n  };\n\n  var MissingIconIndicator = {\n    provides: function provides(providers) {\n      var reduceMotion = false;\n\n      if (WINDOW.matchMedia) {\n        reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      }\n\n      providers.missingIconAbstract = function () {\n        var gChildren = [];\n        var FILL = {\n          fill: 'currentColor'\n        };\n        var ANIMATION_BASE = {\n          attributeType: 'XML',\n          repeatCount: 'indefinite',\n          dur: '2s'\n        }; // Ring\n\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n          })\n        });\n\n        var OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n          attributeName: 'opacity'\n        });\n\n        var dot = {\n          tag: 'circle',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            cx: '256',\n            cy: '364',\n            r: '28'\n          }),\n          children: []\n        };\n\n        if (!reduceMotion) {\n          dot.children.push({\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n              attributeName: 'r',\n              values: '28;14;28;28;14;28;'\n            })\n          }, {\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '1;0;1;1;0;1;'\n            })\n          });\n        }\n\n        gChildren.push(dot);\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            opacity: '1',\n            d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n          }),\n          children: reduceMotion ? [] : [{\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '1;0;0;0;0;1;'\n            })\n          }]\n        });\n\n        if (!reduceMotion) {\n          // Exclamation\n          gChildren.push({\n            tag: 'path',\n            attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n              opacity: '0',\n              d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n            }),\n            children: [{\n              tag: 'animate',\n              attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n                values: '0;0;1;1;0;0;'\n              })\n            }]\n          });\n        }\n\n        return {\n          tag: 'g',\n          attributes: {\n            'class': 'missing'\n          },\n          children: gChildren\n        };\n      };\n    }\n  };\n\n  var SvgSymbols = {\n    hooks: function hooks() {\n      return {\n        parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n          var symbolData = node.getAttribute('data-fa-symbol');\n          var symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n          accumulator['symbol'] = symbol;\n          return accumulator;\n        }\n      };\n    }\n  };\n\n  var plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\n  registerPlugins(plugins, {\n    mixoutsTo: api\n  });\n  bunker(bootstrap);\n\n}());\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/js/regular.js",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n(function () {\n  'use strict';\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var PRODUCTION = function () {\n    try {\n      return \"production\" === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce(function (acc, iconName) {\n      var icon = icons[iconName];\n      var expanded = !!icon.icon;\n\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n\n      return acc;\n    }, {});\n  }\n\n  function defineIcons(prefix, icons) {\n    var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _params$skipHooks = params.skipHooks,\n        skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n    var normalized = normalizeIcons(icons);\n\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n\n\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"address-book\": [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M272 288h-64C163.8 288 128 323.8 128 368C128 376.8 135.2 384 144 384h192c8.836 0 16-7.164 16-16C352 323.8 316.2 288 272 288zM240 256c35.35 0 64-28.65 64-64s-28.65-64-64-64c-35.34 0-64 28.65-64 64S204.7 256 240 256zM496 320H480v96h16c8.836 0 16-7.164 16-16v-64C512 327.2 504.8 320 496 320zM496 64H480v96h16C504.8 160 512 152.8 512 144v-64C512 71.16 504.8 64 496 64zM496 192H480v96h16C504.8 288 512 280.8 512 272v-64C512 199.2 504.8 192 496 192zM384 0H96C60.65 0 32 28.65 32 64v384c0 35.35 28.65 64 64 64h288c35.35 0 64-28.65 64-64V64C448 28.65 419.3 0 384 0zM400 448c0 8.836-7.164 16-16 16H96c-8.836 0-16-7.164-16-16V64c0-8.838 7.164-16 16-16h288c8.836 0 16 7.162 16 16V448z\"],\n    \"address-card\": [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M208 256c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64s-64 28.65-64 64C144 227.3 172.7 256 208 256zM464 232h-96c-13.25 0-24 10.75-24 24s10.75 24 24 24h96c13.25 0 24-10.75 24-24S477.3 232 464 232zM240 288h-64C131.8 288 96 323.8 96 368C96 376.8 103.2 384 112 384h192c8.836 0 16-7.164 16-16C320 323.8 284.2 288 240 288zM464 152h-96c-13.25 0-24 10.75-24 24s10.75 24 24 24h96c13.25 0 24-10.75 24-24S477.3 152 464 152zM512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM528 416c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16V96c0-8.822 7.178-16 16-16h448c8.822 0 16 7.178 16 16V416z\"],\n    \"bell\": [448, 512, [61602, 128276], \"f0f3\", \"M256 32V49.88C328.5 61.39 384 124.2 384 200V233.4C384 278.8 399.5 322.9 427.8 358.4L442.7 377C448.5 384.2 449.6 394.1 445.6 402.4C441.6 410.7 433.2 416 424 416H24C14.77 416 6.365 410.7 2.369 402.4C-1.628 394.1-.504 384.2 5.26 377L20.17 358.4C48.54 322.9 64 278.8 64 233.4V200C64 124.2 119.5 61.39 192 49.88V32C192 14.33 206.3 0 224 0C241.7 0 256 14.33 256 32V32zM216 96C158.6 96 112 142.6 112 200V233.4C112 281.3 98.12 328 72.31 368H375.7C349.9 328 336 281.3 336 233.4V200C336 142.6 289.4 96 232 96H216zM288 448C288 464.1 281.3 481.3 269.3 493.3C257.3 505.3 240.1 512 224 512C207 512 190.7 505.3 178.7 493.3C166.7 481.3 160 464.1 160 448H288z\"],\n    \"bell-slash\": [640, 512, [61943, 128277], \"f1f6\", \"M183.6 118.6C206.5 82.58 244.1 56.84 288 49.88V32C288 14.33 302.3 .0003 320 .0003C337.7 .0003 352 14.33 352 32V49.88C424.5 61.39 480 124.2 480 200V233.4C480 278.8 495.5 322.9 523.8 358.4L538.7 377C543.1 383.5 545.4 392.2 542.6 400L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L183.6 118.6zM221.7 148.4L450.7 327.1C438.4 298.2 432 266.1 432 233.4V200C432 142.6 385.4 96 328 96H312C273.3 96 239.6 117.1 221.7 148.4V148.4zM160 233.4V222.1L206.7 258.9C202.7 297.7 189.5 335.2 168.3 368H345.2L406.2 416H120C110.8 416 102.4 410.7 98.37 402.4C94.37 394.1 95.5 384.2 101.3 377L116.2 358.4C144.5 322.9 160 278.8 160 233.4V233.4zM384 448C384 464.1 377.3 481.3 365.3 493.3C353.3 505.3 336.1 512 320 512C303 512 286.7 505.3 274.7 493.3C262.7 481.3 256 464.1 256 448H384z\"],\n    \"bookmark\": [384, 512, [61591, 128278], \"f02e\", \"M336 0h-288C21.49 0 0 21.49 0 48v431.9c0 24.7 26.79 40.08 48.12 27.64L192 423.6l143.9 83.93C357.2 519.1 384 504.6 384 479.9V48C384 21.49 362.5 0 336 0zM336 452L192 368l-144 84V54C48 50.63 50.63 48 53.1 48h276C333.4 48 336 50.63 336 54V452z\"],\n    \"building\": [384, 512, [61687, 127970], \"f1ad\", \"M88 104C88 95.16 95.16 88 104 88H152C160.8 88 168 95.16 168 104V152C168 160.8 160.8 168 152 168H104C95.16 168 88 160.8 88 152V104zM280 88C288.8 88 296 95.16 296 104V152C296 160.8 288.8 168 280 168H232C223.2 168 216 160.8 216 152V104C216 95.16 223.2 88 232 88H280zM88 232C88 223.2 95.16 216 104 216H152C160.8 216 168 223.2 168 232V280C168 288.8 160.8 296 152 296H104C95.16 296 88 288.8 88 280V232zM280 216C288.8 216 296 223.2 296 232V280C296 288.8 288.8 296 280 296H232C223.2 296 216 288.8 216 280V232C216 223.2 223.2 216 232 216H280zM0 64C0 28.65 28.65 0 64 0H320C355.3 0 384 28.65 384 64V448C384 483.3 355.3 512 320 512H64C28.65 512 0 483.3 0 448V64zM48 64V448C48 456.8 55.16 464 64 464H144V400C144 373.5 165.5 352 192 352C218.5 352 240 373.5 240 400V464H320C328.8 464 336 456.8 336 448V64C336 55.16 328.8 48 320 48H64C55.16 48 48 55.16 48 64z\"],\n    \"calendar\": [448, 512, [128198, 128197], \"f133\", \"M152 64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0C141.3 0 152 10.75 152 24V64zM48 448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192H48V448z\"],\n    \"calendar-check\": [448, 512, [], \"f274\", \"M216.1 408.1C207.6 418.3 192.4 418.3 183 408.1L119 344.1C109.7 335.6 109.7 320.4 119 311C128.4 301.7 143.6 301.7 152.1 311L200 358.1L295 263C304.4 253.7 319.6 253.7 328.1 263C338.3 272.4 338.3 287.6 328.1 296.1L216.1 408.1zM128 0C141.3 0 152 10.75 152 24V64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0zM400 192H48V448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192z\"],\n    \"calendar-days\": [448, 512, [\"calendar-alt\"], \"f073\", \"M152 64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0C141.3 0 152 10.75 152 24V64zM48 248H128V192H48V248zM48 296V360H128V296H48zM176 296V360H272V296H176zM320 296V360H400V296H320zM400 192H320V248H400V192zM400 408H320V464H384C392.8 464 400 456.8 400 448V408zM272 408H176V464H272V408zM128 408H48V448C48 456.8 55.16 464 64 464H128V408zM272 192H176V248H272V192z\"],\n    \"calendar-minus\": [448, 512, [], \"f272\", \"M152 352C138.7 352 128 341.3 128 328C128 314.7 138.7 304 152 304H296C309.3 304 320 314.7 320 328C320 341.3 309.3 352 296 352H152zM128 0C141.3 0 152 10.75 152 24V64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0zM400 192H48V448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192z\"],\n    \"calendar-plus\": [448, 512, [], \"f271\", \"M224 232C237.3 232 248 242.7 248 256V304H296C309.3 304 320 314.7 320 328C320 341.3 309.3 352 296 352H248V400C248 413.3 237.3 424 224 424C210.7 424 200 413.3 200 400V352H152C138.7 352 128 341.3 128 328C128 314.7 138.7 304 152 304H200V256C200 242.7 210.7 232 224 232zM152 64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0C141.3 0 152 10.75 152 24V64zM48 448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192H48V448z\"],\n    \"calendar-xmark\": [448, 512, [\"calendar-times\"], \"f273\", \"M257.9 328L304.1 375C314.3 384.4 314.3 399.6 304.1 408.1C295.6 418.3 280.4 418.3 271 408.1L224 361.9L176.1 408.1C167.6 418.3 152.4 418.3 143 408.1C133.7 399.6 133.7 384.4 143 375L190.1 328L143 280.1C133.7 271.6 133.7 256.4 143 247C152.4 237.7 167.6 237.7 176.1 247L224 294.1L271 247C280.4 237.7 295.6 237.7 304.1 247C314.3 256.4 314.3 271.6 304.1 280.1L257.9 328zM128 0C141.3 0 152 10.75 152 24V64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0zM400 192H48V448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192z\"],\n    \"chart-bar\": [512, 512, [\"bar-chart\"], \"f080\", \"M24 32C37.25 32 48 42.75 48 56V408C48 421.3 58.75 432 72 432H488C501.3 432 512 442.7 512 456C512 469.3 501.3 480 488 480H72C32.24 480 0 447.8 0 408V56C0 42.75 10.75 32 24 32zM128 136C128 122.7 138.7 112 152 112H360C373.3 112 384 122.7 384 136C384 149.3 373.3 160 360 160H152C138.7 160 128 149.3 128 136zM296 208C309.3 208 320 218.7 320 232C320 245.3 309.3 256 296 256H152C138.7 256 128 245.3 128 232C128 218.7 138.7 208 152 208H296zM424 304C437.3 304 448 314.7 448 328C448 341.3 437.3 352 424 352H152C138.7 352 128 341.3 128 328C128 314.7 138.7 304 152 304H424z\"],\n    \"chess-bishop\": [320, 512, [9821], \"f43a\", \"M296 464H23.1C10.75 464 0 474.7 0 487.1S10.75 512 23.1 512h272C309.3 512 320 501.3 320 488S309.3 464 296 464zM0 304c0 51.63 30.12 85.25 64 96v32h48v-67.13l-33.5-10.63C63.75 349.5 48 333.9 48 304c0-84.1 93.2-206.5 112.6-206.5c19.63 0 60.01 67.18 70.28 85.8l-66.13 66.13c-3.125 3.125-4.688 7.219-4.688 11.31S161.6 268.9 164.8 272L176 283.2c3.125 3.125 7.219 4.688 11.31 4.688s8.188-1.562 11.31-4.688L253 229C264.4 256.8 272 283.5 272 304c0 29.88-15.75 45.5-30.5 50.25L208 364.9V432H256v-32c33.88-10.75 64-44.38 64-96c0-73.38-67.75-197.2-120.6-241.5C213.4 59.12 224 47 224 32c0-17.62-14.38-32-32-32H128C110.4 0 96 14.38 96 32c0 15 10.62 27.12 24.62 30.5C67.75 106.8 0 230.6 0 304z\"],\n    \"chess-king\": [448, 512, [9818], \"f43f\", \"M391.9 464H55.95c-13.25 0-23.1 10.75-23.1 23.1S42.7 512 55.95 512h335.1c13.25 0 23.1-10.75 23.1-23.1S405.2 464 391.9 464zM448 216c0-11.82-3.783-23.51-11.08-33.17c-10.3-14.39-27-22.88-44.73-22.88L247.9 160V104h31.1c13.2 0 24.06-10.8 24.06-24S293.1 56 279.9 56h-31.1V23.1C247.9 10.8 237.2 0 223.1 0S199.9 10.8 199.9 23.1V56H167.9c-13.2 0-23.97 10.8-23.97 24S154.7 104 167.9 104h31.1V160H55.95C24.72 160 0 185.3 0 215.9C0 221.6 .8893 227.4 2.704 233L68.45 432h50.5L48.33 218.4C48.09 217.6 47.98 216.9 47.98 216.1C47.98 212.3 50.93 208 55.95 208h335.9c6.076 0 8.115 5.494 8.115 8.113c0 .6341-.078 1.269-.2405 1.887L328.8 432h50.62l65.1-199.2C447.2 227.3 448 221.7 448 216z\"],\n    \"chess-knight\": [384, 512, [9822], \"f441\", \"M44 320.6l14.5 6.5c-17.01 20.24-26.44 45.91-26.44 72.35C32.06 399.7 32.12 432 32.12 432h48v-32c0-24.75 14-47.5 36.13-58.63l38.13-23.37c13.25-6.625 21.75-20.25 21.75-35.13v-58.75l-15.37 9C155.6 235.8 151.9 240.4 150.5 245.9L143 271c-2.25 7.625-8 13.88-15.38 16.75L117.1 292C114 293.3 110.7 293.9 107.4 293.9c-3.626 0-7.263-.7514-10.66-2.254L63.5 276.9C54.12 272.6 48 263.2 48 252.9V140.5c0-5.125 2.125-10.12 5.75-13.88l7.375-7.375L49.5 96C48.5 94.12 48 92 48 89.88C48 84.38 52.38 80 57.88 80h105c86.75 0 156.1 70.38 156.1 157.1V432h48.06l-.0625-194.9C367.9 124 276 32 162.9 32H57.88C25.88 32 0 57.88 0 89.88c0 8.5 1.75 16.88 5.125 24.62C1.75 122.8 0 131.6 0 140.5v112.4C0 282.2 17.25 308.8 44 320.6zM80.12 164c0 11 8.875 20 20 20c11 0 20-9 20-20s-9-20-20-20C89 144 80.12 153 80.12 164zM360 464H23.1C10.75 464 0 474.7 0 487.1S10.75 512 23.1 512H360C373.3 512 384 501.3 384 488S373.3 464 360 464z\"],\n    \"chess-pawn\": [320, 512, [9823], \"f443\", \"M296 463.1H23.1c-13.25 0-23.1 10.75-23.1 24s10.75 24 23.1 24h272c13.25 0 23.1-10.75 23.1-23.1S309.3 463.1 296 463.1zM55.1 287.1L80 287.1v29.5c0 40.25-3.5 81.25-23.38 114.5h53.5C125.1 394.1 128 354.6 128 317.5v-29.5h64v29.5c0 37.13 2.875 77.5 17.88 114.5h53.5C243.5 398.7 240 357.7 240 317.5V287.1l24-.0001C277.3 287.1 288 277.3 288 263.1c0-13.25-10.75-24-23.1-24H241c23.75-21.88 38.1-53.12 38.1-87.1c0-9.393-1.106-19.05-3.451-28.86C272.3 105.4 244.9 32 159.1 32C93.75 32 40 85.75 40 151.1c0 34.88 15.12 66.12 39 88H55.1C42.75 239.1 32 250.7 32 263.1C32 277.3 42.75 287.1 55.1 287.1zM160 79.1c39.75 0 72 32.25 72 72S199.8 223.1 160 223.1S88 191.7 88 151.1S120.2 79.1 160 79.1z\"],\n    \"chess-queen\": [512, 512, [9819], \"f445\", \"M256 112c30.88 0 56-25.12 56-56S286.9 0 256 0S199.1 25.12 199.1 56S225.1 112 256 112zM511.1 197.4c0-5.178-2.509-10.2-7.096-13.26L476.4 168.2c-2.5-1.75-5.497-2.62-8.497-2.62c-5.501 .125-10.63 2.87-13.75 7.245c-9.001 12-23.16 19.13-38.16 19.13c-3.125 0-6.089-.2528-9.089-.8778c-23.13-4.25-38.88-26.25-38.88-49.75C367.1 134 361.1 128 354.6 128h-38.75c-6.001 0-11.63 4-12.88 9.875C298.2 160.1 278.7 176 255.1 176c-22.75 0-42.25-15.88-47-38.12C207.7 132 202.2 128 196.1 128h-38.75C149.1 128 143.1 134 143.1 141.4c0 18.49-13.66 50.62-47.95 50.62c-15.13 0-29.3-7.118-38.3-19.24C54.6 168.4 49.66 165.7 44.15 165.6c-3 0-5.931 .8951-8.432 2.645l-28.63 16C2.509 187.2 0 192.3 0 197.4c0 2.438 .5583 4.901 1.72 7.185L109.9 432h53.13L69.85 236.4C78.35 238.8 87.11 240 95.98 240c2.432 0 56.83 1.503 84.76-52.5C198.1 210.5 226.6 224 255.9 224c29.38 0 57.01-13.38 75.26-36.25C336.1 197.6 360.6 240 416 240c8.751 0 17.5-1.125 26-3.5L349 432h53.13l108.1-227.4C511.4 202.3 511.1 199.8 511.1 197.4zM424 464H87.98c-13.26 0-24 10.75-24 23.1S74.72 512 87.98 512h336c13.26 0 24-10.75 24-23.1S437.3 464 424 464z\"],\n    \"chess-rook\": [384, 512, [9820], \"f447\", \"M360 464H23.1C10.75 464 0 474.7 0 487.1S10.75 512 23.1 512H360C373.3 512 384 501.3 384 488S373.3 464 360 464zM345.1 32h-308C17 32 0 49 0 70v139.4C0 218.8 4 227.5 11 233.6L48 265.8c0 8.885 .0504 17.64 .0504 26.46c0 39.32-1.001 79.96-11.93 139.8h49C94.95 374.3 96.11 333.3 96.11 285.5C96.11 270.7 96 255.1 96 238.2L48 196.5V80h64V128H160V80h64V128h48V80h64v116.5L288 238.2c0 16.77-.1124 32.25-.1124 47.1c0 47.79 1.164 89.15 10.99 146.7h49c-10.92-59.83-11.93-100.6-11.93-139.9C335.9 283.3 336 274.6 336 265.8l37-32.13C380 227.5 384 218.8 384 209.4V70C384 49 367 32 345.1 32zM192 224C174.4 224 160 238.4 160 256v64h64V256C224 238.4 209.6 224 192 224z\"],\n    \"circle\": [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9898, 9899, 11044, 61708, 61915, 9679], \"f111\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"circle-check\": [512, 512, [61533, \"check-circle\"], \"f058\", \"M243.8 339.8C232.9 350.7 215.1 350.7 204.2 339.8L140.2 275.8C129.3 264.9 129.3 247.1 140.2 236.2C151.1 225.3 168.9 225.3 179.8 236.2L224 280.4L332.2 172.2C343.1 161.3 360.9 161.3 371.8 172.2C382.7 183.1 382.7 200.9 371.8 211.8L243.8 339.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"circle-dot\": [512, 512, [128280, \"dot-circle\"], \"f192\", \"M160 256C160 202.1 202.1 160 256 160C309 160 352 202.1 352 256C352 309 309 352 256 352C202.1 352 160 309 160 256zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"circle-down\": [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M344 240h-56L287.1 152c0-13.25-10.75-24-24-24h-16C234.7 128 223.1 138.8 223.1 152L224 240h-56c-9.531 0-18.16 5.656-22 14.38C142.2 263.1 143.9 273.3 150.4 280.3l88.75 96C243.7 381.2 250.1 384 256.8 384c7.781-.3125 13.25-2.875 17.75-7.844l87.25-96c6.406-7.031 8.031-17.19 4.188-25.88S353.5 240 344 240zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-left\": [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M360 224L272 224v-56c0-9.531-5.656-18.16-14.38-22C248.9 142.2 238.7 143.9 231.7 150.4l-96 88.75C130.8 243.7 128 250.1 128 256.8c.3125 7.781 2.875 13.25 7.844 17.75l96 87.25c7.031 6.406 17.19 8.031 25.88 4.188s14.28-12.44 14.28-21.94l-.002-56L360 288C373.3 288 384 277.3 384 264v-16C384 234.8 373.3 224 360 224zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-pause\": [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M200 160C186.8 160 176 170.8 176 184v144C176 341.3 186.8 352 200 352S224 341.3 224 328v-144C224 170.8 213.3 160 200 160zM312 160C298.8 160 288 170.8 288 184v144c0 13.25 10.75 24 24 24s24-10.75 24-24v-144C336 170.8 325.3 160 312 160zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-play\": [512, 512, [61469, \"play-circle\"], \"f144\", \"M188.3 147.1C195.8 142.8 205.1 142.1 212.5 147.5L356.5 235.5C363.6 239.9 368 247.6 368 256C368 264.4 363.6 272.1 356.5 276.5L212.5 364.5C205.1 369 195.8 369.2 188.3 364.9C180.7 360.7 176 352.7 176 344V167.1C176 159.3 180.7 151.3 188.3 147.1V147.1zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"circle-question\": [512, 512, [62108, \"question-circle\"], \"f059\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464zM256 336c-18 0-32 14-32 32s13.1 32 32 32c17.1 0 32-14 32-32S273.1 336 256 336zM289.1 128h-51.1C199 128 168 159 168 198c0 13 11 24 24 24s24-11 24-24C216 186 225.1 176 237.1 176h51.1C301.1 176 312 186 312 198c0 8-4 14.1-11 18.1L244 251C236 256 232 264 232 272V288c0 13 11 24 24 24S280 301 280 288V286l45.1-28c21-13 34-36 34-60C360 159 329 128 289.1 128z\"],\n    \"circle-right\": [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M280.2 150.2C273.1 143.8 262.1 142.2 254.3 146.1S239.1 158.5 239.1 167.1l.002 56L152 224C138.8 224 128 234.8 128 248v16C128 277.3 138.8 288 152 288L240 287.1v56c0 9.531 5.656 18.16 14.38 22c8.75 3.812 18.91 2.094 25.91-4.375l96-88.75C381.2 268.3 384 261.9 384 255.2c-.3125-7.781-2.875-13.25-7.844-17.75L280.2 150.2zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-stop\": [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M328 160h-144C170.8 160 160 170.8 160 184v144C160 341.2 170.8 352 184 352h144c13.2 0 24-10.8 24-24v-144C352 170.8 341.2 160 328 160zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-up\": [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M272.9 135.7C268.3 130.8 261.9 128 255.2 128C247.5 128.3 241.1 130.9 237.5 135.8l-87.25 96C143.8 238.9 142.2 249 146.1 257.7C149.9 266.4 158.5 272 167.1 272h56L224 360c0 13.25 10.75 24 24 24h16c13.25 0 23.1-10.75 23.1-24L287.1 272h56c9.531 0 18.16-5.656 22-14.38c3.811-8.75 2.092-18.91-4.377-25.91L272.9 135.7zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\"],\n    \"circle-user\": [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M256 112c-48.6 0-88 39.4-88 88C168 248.6 207.4 288 256 288s88-39.4 88-88C344 151.4 304.6 112 256 112zM256 240c-22.06 0-40-17.95-40-40C216 177.9 233.9 160 256 160s40 17.94 40 40C296 222.1 278.1 240 256 240zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-46.73 0-89.76-15.68-124.5-41.79C148.8 389 182.4 368 220.2 368h71.69c37.75 0 71.31 21.01 88.68 54.21C345.8 448.3 302.7 464 256 464zM416.2 388.5C389.2 346.3 343.2 320 291.8 320H220.2c-51.36 0-97.35 26.25-124.4 68.48C65.96 352.5 48 306.3 48 256c0-114.7 93.31-208 208-208s208 93.31 208 208C464 306.3 446 352.5 416.2 388.5z\"],\n    \"circle-xmark\": [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M175 175C184.4 165.7 199.6 165.7 208.1 175L255.1 222.1L303 175C312.4 165.7 327.6 165.7 336.1 175C346.3 184.4 346.3 199.6 336.1 208.1L289.9 255.1L336.1 303C346.3 312.4 346.3 327.6 336.1 336.1C327.6 346.3 312.4 346.3 303 336.1L255.1 289.9L208.1 336.1C199.6 346.3 184.4 346.3 175 336.1C165.7 327.6 165.7 312.4 175 303L222.1 255.1L175 208.1C165.7 199.6 165.7 184.4 175 175V175zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"clipboard\": [384, 512, [128203], \"f328\", \"M320 64h-49.61C262.1 27.48 230.7 0 192 0S121 27.48 113.6 64H64C28.65 64 0 92.66 0 128v320c0 35.34 28.65 64 64 64h256c35.35 0 64-28.66 64-64V128C384 92.66 355.3 64 320 64zM192 48c13.23 0 24 10.77 24 24S205.2 96 192 96S168 85.23 168 72S178.8 48 192 48zM336 448c0 8.82-7.178 16-16 16H64c-8.822 0-16-7.18-16-16V128c0-8.82 7.178-16 16-16h18.26C80.93 117.1 80 122.4 80 128v16C80 152.8 87.16 160 96 160h192c8.836 0 16-7.164 16-16V128c0-5.559-.9316-10.86-2.264-16H320c8.822 0 16 7.18 16 16V448z\"],\n    \"clock\": [512, 512, [128339, \"clock-four\"], \"f017\", \"M232 120C232 106.7 242.7 96 256 96C269.3 96 280 106.7 280 120V243.2L365.3 300C376.3 307.4 379.3 322.3 371.1 333.3C364.6 344.3 349.7 347.3 338.7 339.1L242.7 275.1C236 271.5 232 264 232 255.1L232 120zM256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0zM48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256z\"],\n    \"clone\": [512, 512, [], \"f24d\", \"M64 464H288C296.8 464 304 456.8 304 448V384H352V448C352 483.3 323.3 512 288 512H64C28.65 512 0 483.3 0 448V224C0 188.7 28.65 160 64 160H128V208H64C55.16 208 48 215.2 48 224V448C48 456.8 55.16 464 64 464zM160 64C160 28.65 188.7 0 224 0H448C483.3 0 512 28.65 512 64V288C512 323.3 483.3 352 448 352H224C188.7 352 160 323.3 160 288V64zM224 304H448C456.8 304 464 296.8 464 288V64C464 55.16 456.8 48 448 48H224C215.2 48 208 55.16 208 64V288C208 296.8 215.2 304 224 304z\"],\n    \"closed-captioning\": [576, 512, [], \"f20a\", \"M512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM528 416c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16V96c0-8.822 7.178-16 16-16h448c8.822 0 16 7.178 16 16V416zM236.5 222.1c9.375 9.375 24.56 9.375 33.94 0c9.375-9.375 9.375-24.56 0-33.94c-37.44-37.44-98.31-37.44-135.7 0C116.5 206.2 106.5 230.4 106.5 256s9.1 49.75 28.12 67.88c18.72 18.72 43.28 28.08 67.87 28.08s49.16-9.359 67.87-28.08c9.375-9.375 9.375-24.56 0-33.94c-9.375-9.375-24.56-9.375-33.94 0c-18.69 18.72-49.19 18.72-67.87 0C159.5 280.9 154.5 268.8 154.5 256s5-24.88 14.06-33.94C187.3 203.3 217.8 203.3 236.5 222.1zM428.5 222.1c9.375 9.375 24.56 9.375 33.94 0c9.375-9.375 9.375-24.56 0-33.94c-37.44-37.44-98.31-37.44-135.7 0C308.5 206.2 298.5 230.4 298.5 256s9.1 49.75 28.12 67.88c18.72 18.72 43.28 28.08 67.87 28.08s49.16-9.359 67.87-28.08c9.375-9.375 9.375-24.56 0-33.94c-9.375-9.375-24.56-9.375-33.94 0c-18.69 18.72-49.19 18.72-67.87 0C351.5 280.9 346.5 268.8 346.5 256s5-24.88 14.06-33.94C379.3 203.3 409.8 203.3 428.5 222.1z\"],\n    \"comment\": [512, 512, [61669, 128489], \"f075\", \"M256 32C114.6 32 .0272 125.1 .0272 240c0 47.63 19.91 91.25 52.91 126.2c-14.88 39.5-45.87 72.88-46.37 73.25c-6.625 7-8.375 17.25-4.625 26C5.818 474.2 14.38 480 24 480c61.5 0 109.1-25.75 139.1-46.25C191.1 442.8 223.3 448 256 448c141.4 0 255.1-93.13 255.1-208S397.4 32 256 32zM256.1 400c-26.75 0-53.12-4.125-78.38-12.12l-22.75-7.125l-19.5 13.75c-14.25 10.12-33.88 21.38-57.5 29c7.375-12.12 14.37-25.75 19.88-40.25l10.62-28l-20.62-21.87C69.82 314.1 48.07 282.2 48.07 240c0-88.25 93.25-160 208-160s208 71.75 208 160S370.8 400 256.1 400z\"],\n    \"comment-dots\": [512, 512, [62075, 128172, \"commenting\"], \"f4ad\", \"M144 208C126.3 208 112 222.2 112 239.1C112 257.7 126.3 272 144 272s31.1-14.25 31.1-32S161.8 208 144 208zM256 207.1c-17.75 0-31.1 14.25-31.1 32s14.25 31.1 31.1 31.1s31.1-14.25 31.1-31.1S273.8 207.1 256 207.1zM368 208c-17.75 0-31.1 14.25-31.1 32s14.25 32 31.1 32c17.75 0 31.99-14.25 31.99-32C400 222.2 385.8 208 368 208zM256 31.1c-141.4 0-255.1 93.12-255.1 208c0 47.62 19.91 91.25 52.91 126.3c-14.87 39.5-45.87 72.88-46.37 73.25c-6.624 7-8.373 17.25-4.624 26C5.818 474.2 14.38 480 24 480c61.49 0 109.1-25.75 139.1-46.25c28.87 9 60.16 14.25 92.9 14.25c141.4 0 255.1-93.13 255.1-207.1S397.4 31.1 256 31.1zM256 400c-26.75 0-53.12-4.125-78.36-12.12l-22.75-7.125L135.4 394.5c-14.25 10.12-33.87 21.38-57.49 29c7.374-12.12 14.37-25.75 19.87-40.25l10.62-28l-20.62-21.87C69.81 314.1 48.06 282.2 48.06 240c0-88.25 93.24-160 207.1-160s207.1 71.75 207.1 160S370.8 400 256 400z\"],\n    \"comments\": [640, 512, [61670, 128490], \"f086\", \"M208 0C322.9 0 416 78.8 416 176C416 273.2 322.9 352 208 352C189.3 352 171.2 349.7 153.9 345.8C123.3 364.8 79.13 384 24.95 384C14.97 384 5.93 378.1 2.018 368.9C-1.896 359.7-.0074 349.1 6.739 341.9C7.26 341.5 29.38 317.4 45.73 285.9C17.18 255.8 0 217.6 0 176C0 78.8 93.13 0 208 0zM164.6 298.1C179.2 302.3 193.8 304 208 304C296.2 304 368 246.6 368 176C368 105.4 296.2 48 208 48C119.8 48 48 105.4 48 176C48 211.2 65.71 237.2 80.57 252.9L104.1 277.8L88.31 308.1C84.74 314.1 80.73 321.9 76.55 328.5C94.26 323.4 111.7 315.5 128.7 304.1L145.4 294.6L164.6 298.1zM441.6 128.2C552 132.4 640 209.5 640 304C640 345.6 622.8 383.8 594.3 413.9C610.6 445.4 632.7 469.5 633.3 469.9C640 477.1 641.9 487.7 637.1 496.9C634.1 506.1 625 512 615 512C560.9 512 516.7 492.8 486.1 473.8C468.8 477.7 450.7 480 432 480C350 480 279.1 439.8 245.2 381.5C262.5 379.2 279.1 375.3 294.9 369.9C322.9 407.1 373.9 432 432 432C446.2 432 460.8 430.3 475.4 426.1L494.6 422.6L511.3 432.1C528.3 443.5 545.7 451.4 563.5 456.5C559.3 449.9 555.3 442.1 551.7 436.1L535.9 405.8L559.4 380.9C574.3 365.3 592 339.2 592 304C592 237.7 528.7 183.1 447.1 176.6L448 176C448 159.5 445.8 143.5 441.6 128.2H441.6z\"],\n    \"compass\": [512, 512, [129517], \"f14e\", \"M306.7 325.1L162.4 380.6C142.1 388.1 123.9 369 131.4 349.6L186.9 205.3C190.1 196.8 196.8 190.1 205.3 186.9L349.6 131.4C369 123.9 388.1 142.1 380.6 162.4L325.1 306.7C321.9 315.2 315.2 321.9 306.7 325.1V325.1zM255.1 224C238.3 224 223.1 238.3 223.1 256C223.1 273.7 238.3 288 255.1 288C273.7 288 288 273.7 288 256C288 238.3 273.7 224 255.1 224V224zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"copy\": [512, 512, [], \"f0c5\", \"M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z\"],\n    \"copyright\": [512, 512, [169], \"f1f9\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464zM255.1 176C255.1 176 255.1 176 255.1 176c21.06 0 40.92 8.312 55.83 23.38c9.375 9.344 24.53 9.5 33.97 .1562c9.406-9.344 9.469-24.53 .1562-33.97c-24-24.22-55.95-37.56-89.95-37.56c0 0 .0313 0 0 0c-33.97 0-65.95 13.34-89.95 37.56c-49.44 49.88-49.44 131 0 180.9c24 24.22 55.98 37.56 89.95 37.56c.0313 0 0 0 0 0c34 0 65.95-13.34 89.95-37.56c9.312-9.438 9.25-24.62-.1562-33.97c-9.438-9.312-24.59-9.219-33.97 .1562c-14.91 15.06-34.77 23.38-55.83 23.38c0 0 .0313 0 0 0c-21.09 0-40.95-8.312-55.89-23.38c-30.94-31.22-30.94-82.03 0-113.3C214.2 184.3 234 176 255.1 176z\"],\n    \"credit-card\": [576, 512, [62083, 128179, \"credit-card-alt\"], \"f09d\", \"M168 336C181.3 336 192 346.7 192 360C192 373.3 181.3 384 168 384H120C106.7 384 96 373.3 96 360C96 346.7 106.7 336 120 336H168zM360 336C373.3 336 384 346.7 384 360C384 373.3 373.3 384 360 384H248C234.7 384 224 373.3 224 360C224 346.7 234.7 336 248 336H360zM512 32C547.3 32 576 60.65 576 96V416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H512zM512 80H64C55.16 80 48 87.16 48 96V128H528V96C528 87.16 520.8 80 512 80zM528 224H48V416C48 424.8 55.16 432 64 432H512C520.8 432 528 424.8 528 416V224z\"],\n    \"envelope\": [512, 512, [128386, 61443, 9993], \"f0e0\", \"M448 64H64C28.65 64 0 92.65 0 128v256c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V128C512 92.65 483.3 64 448 64zM64 112h384c8.822 0 16 7.178 16 16v22.16l-166.8 138.1c-23.19 19.28-59.34 19.27-82.47 .0156L48 150.2V128C48 119.2 55.18 112 64 112zM448 400H64c-8.822 0-16-7.178-16-16V212.7l136.1 113.4C204.3 342.8 229.8 352 256 352s51.75-9.188 71.97-25.98L464 212.7V384C464 392.8 456.8 400 448 400z\"],\n    \"envelope-open\": [512, 512, [62135], \"f2b6\", \"M493.6 163c-24.88-19.62-45.5-35.37-164.3-121.6C312.7 29.21 279.7 0 256.4 0H255.6C232.3 0 199.3 29.21 182.6 41.38C63.88 127.6 43.25 143.4 18.38 163C6.75 172 0 186 0 200.8v247.2C0 483.3 28.65 512 64 512h384c35.35 0 64-28.67 64-64.01V200.8C512 186 505.3 172 493.6 163zM464 448c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16V276.7l136.1 113.4C204.3 406.8 229.8 416 256 416s51.75-9.211 71.97-26.01L464 276.7V448zM464 214.2l-166.8 138.1c-23.19 19.28-59.34 19.27-82.47 .0156L48 214.2l.1055-13.48c23.24-18.33 42.25-32.97 162.9-120.6c3.082-2.254 6.674-5.027 10.63-8.094C229.4 65.99 246.7 52.59 256 48.62c9.312 3.973 26.62 17.37 34.41 23.41c3.959 3.066 7.553 5.84 10.76 8.186C421.6 167.7 440.7 182.4 464 200.8V214.2z\"],\n    \"eye\": [576, 512, [128065], \"f06e\", \"M160 256C160 185.3 217.3 128 288 128C358.7 128 416 185.3 416 256C416 326.7 358.7 384 288 384C217.3 384 160 326.7 160 256zM288 336C332.2 336 368 300.2 368 256C368 211.8 332.2 176 288 176C287.3 176 286.7 176 285.1 176C287.3 181.1 288 186.5 288 192C288 227.3 259.3 256 224 256C218.5 256 213.1 255.3 208 253.1C208 254.7 208 255.3 208 255.1C208 300.2 243.8 336 288 336L288 336zM95.42 112.6C142.5 68.84 207.2 32 288 32C368.8 32 433.5 68.84 480.6 112.6C527.4 156 558.7 207.1 573.5 243.7C576.8 251.6 576.8 260.4 573.5 268.3C558.7 304 527.4 355.1 480.6 399.4C433.5 443.2 368.8 480 288 480C207.2 480 142.5 443.2 95.42 399.4C48.62 355.1 17.34 304 2.461 268.3C-.8205 260.4-.8205 251.6 2.461 243.7C17.34 207.1 48.62 156 95.42 112.6V112.6zM288 80C222.8 80 169.2 109.6 128.1 147.7C89.6 183.5 63.02 225.1 49.44 256C63.02 286 89.6 328.5 128.1 364.3C169.2 402.4 222.8 432 288 432C353.2 432 406.8 402.4 447.9 364.3C486.4 328.5 512.1 286 526.6 256C512.1 225.1 486.4 183.5 447.9 147.7C406.8 109.6 353.2 80 288 80V80z\"],\n    \"eye-slash\": [640, 512, [], \"f070\", \"M150.7 92.77C195 58.27 251.8 32 320 32C400.8 32 465.5 68.84 512.6 112.6C559.4 156 590.7 207.1 605.5 243.7C608.8 251.6 608.8 260.4 605.5 268.3C592.1 300.6 565.2 346.1 525.6 386.7L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L150.7 92.77zM189.8 123.5L235.8 159.5C258.3 139.9 287.8 128 320 128C390.7 128 448 185.3 448 256C448 277.2 442.9 297.1 433.8 314.7L487.6 356.9C521.1 322.8 545.9 283.1 558.6 256C544.1 225.1 518.4 183.5 479.9 147.7C438.8 109.6 385.2 79.1 320 79.1C269.5 79.1 225.1 97.73 189.8 123.5L189.8 123.5zM394.9 284.2C398.2 275.4 400 265.9 400 255.1C400 211.8 364.2 175.1 320 175.1C319.3 175.1 318.7 176 317.1 176C319.3 181.1 320 186.5 320 191.1C320 202.2 317.6 211.8 313.4 220.3L394.9 284.2zM404.3 414.5L446.2 447.5C409.9 467.1 367.8 480 320 480C239.2 480 174.5 443.2 127.4 399.4C80.62 355.1 49.34 304 34.46 268.3C31.18 260.4 31.18 251.6 34.46 243.7C44 220.8 60.29 191.2 83.09 161.5L120.8 191.2C102.1 214.5 89.76 237.6 81.45 255.1C95.02 286 121.6 328.5 160.1 364.3C201.2 402.4 254.8 432 320 432C350.7 432 378.8 425.4 404.3 414.5H404.3zM192 255.1C192 253.1 192.1 250.3 192.3 247.5L248.4 291.7C258.9 312.8 278.5 328.6 302 333.1L358.2 378.2C346.1 381.1 333.3 384 319.1 384C249.3 384 191.1 326.7 191.1 255.1H192z\"],\n    \"face-angry\": [512, 512, [128544, \"angry\"], \"f556\", \"M328.4 393.5C318.7 402.6 303.5 402.1 294.5 392.4C287.1 384.5 274.4 376 256 376C237.6 376 224.9 384.5 217.5 392.4C208.5 402.1 193.3 402.6 183.6 393.5C173.9 384.5 173.4 369.3 182.5 359.6C196.7 344.3 221.4 328 256 328C290.6 328 315.3 344.3 329.5 359.6C338.6 369.3 338.1 384.5 328.4 393.5zM144.4 240C144.4 231.2 147.9 223.2 153.7 217.4L122.9 207.2C114.6 204.4 110 195.3 112.8 186.9C115.6 178.6 124.7 174 133.1 176.8L229.1 208.8C237.4 211.6 241.1 220.7 239.2 229.1C236.4 237.4 227.3 241.1 218.9 239.2L208.1 235.6C208.3 237 208.4 238.5 208.4 240C208.4 257.7 194 272 176.4 272C158.7 272 144.4 257.7 144.4 240V240zM368.4 240C368.4 257.7 354 272 336.4 272C318.7 272 304.4 257.7 304.4 240C304.4 238.4 304.5 236.8 304.7 235.3L293.1 239.2C284.7 241.1 275.6 237.4 272.8 229.1C270 220.7 274.6 211.6 282.9 208.8L378.9 176.8C387.3 174 396.4 178.6 399.2 186.9C401.1 195.3 397.4 204.4 389.1 207.2L358.9 217.2C364.7 223 368.4 231.1 368.4 240H368.4zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-dizzy\": [512, 512, [\"dizzy\"], \"f567\", \"M192 352C192 316.7 220.7 288 256 288C291.3 288 320 316.7 320 352C320 387.3 291.3 416 256 416C220.7 416 192 387.3 192 352zM103 135C112.4 125.7 127.6 125.7 136.1 135L160 158.1L183 135C192.4 125.7 207.6 125.7 216.1 135C226.3 144.4 226.3 159.6 216.1 168.1L193.9 192L216.1 215C226.3 224.4 226.3 239.6 216.1 248.1C207.6 258.3 192.4 258.3 183 248.1L160 225.9L136.1 248.1C127.6 258.3 112.4 258.3 103 248.1C93.66 239.6 93.66 224.4 103 215L126.1 192L103 168.1C93.66 159.6 93.66 144.4 103 135V135zM295 135C304.4 125.7 319.6 125.7 328.1 135L352 158.1L375 135C384.4 125.7 399.6 125.7 408.1 135C418.3 144.4 418.3 159.6 408.1 168.1L385.9 192L408.1 215C418.3 224.4 418.3 239.6 408.1 248.1C399.6 258.3 384.4 258.3 375 248.1L352 225.9L328.1 248.1C319.6 258.3 304.4 258.3 295 248.1C285.7 239.6 285.7 224.4 295 215L318.1 192L295 168.1C285.7 159.6 285.7 144.4 295 135V135zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-flushed\": [512, 512, [128563, \"flushed\"], \"f579\", \"M320 336C333.3 336 344 346.7 344 360C344 373.3 333.3 384 320 384H192C178.7 384 168 373.3 168 360C168 346.7 178.7 336 192 336H320zM136.4 224C136.4 210.7 147.1 200 160.4 200C173.6 200 184.4 210.7 184.4 224C184.4 237.3 173.6 248 160.4 248C147.1 248 136.4 237.3 136.4 224zM80 224C80 179.8 115.8 144 160 144C204.2 144 240 179.8 240 224C240 268.2 204.2 304 160 304C115.8 304 80 268.2 80 224zM160 272C186.5 272 208 250.5 208 224C208 197.5 186.5 176 160 176C133.5 176 112 197.5 112 224C112 250.5 133.5 272 160 272zM376.4 224C376.4 237.3 365.6 248 352.4 248C339.1 248 328.4 237.3 328.4 224C328.4 210.7 339.1 200 352.4 200C365.6 200 376.4 210.7 376.4 224zM432 224C432 268.2 396.2 304 352 304C307.8 304 272 268.2 272 224C272 179.8 307.8 144 352 144C396.2 144 432 179.8 432 224zM352 176C325.5 176 304 197.5 304 224C304 250.5 325.5 272 352 272C378.5 272 400 250.5 400 224C400 197.5 378.5 176 352 176zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-frown\": [512, 512, [9785, \"frown\"], \"f119\", \"M143.9 398.6C131.4 394.1 124.9 380.3 129.4 367.9C146.9 319.4 198.9 288 256 288C313.1 288 365.1 319.4 382.6 367.9C387.1 380.3 380.6 394.1 368.1 398.6C355.7 403.1 341.9 396.6 337.4 384.1C328.2 358.5 297.2 336 256 336C214.8 336 183.8 358.5 174.6 384.1C170.1 396.6 156.3 403.1 143.9 398.6V398.6zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-frown-open\": [512, 512, [128550, \"frown-open\"], \"f57a\", \"M179.3 369.3C166.1 374.5 153.1 365.1 158.4 352.9C175.1 314.7 214.3 287.8 259.9 287.8C305.6 287.8 344.8 314.7 361.4 352.1C366.7 365.2 352.9 374.5 340.6 369.3C316.2 359 288.8 353.2 259.9 353.2C231 353.2 203.7 358.1 179.3 369.3L179.3 369.3zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grimace\": [512, 512, [128556, \"grimace\"], \"f57f\", \"M344 288C374.9 288 400 313.1 400 344C400 374.9 374.9 400 344 400H168C137.1 400 112 374.9 112 344C112 313.1 137.1 288 168 288H344zM168 320C154.7 320 144 330.7 144 344C144 357.3 154.7 368 168 368H176V320H168zM208 368H240V320H208V368zM304 320H272V368H304V320zM336 368H344C357.3 368 368 357.3 368 344C368 330.7 357.3 320 344 320H336V368zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin\": [512, 512, [128512, \"grin\"], \"f580\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-beam\": [512, 512, [128516, \"grin-beam\"], \"f582\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM217.6 228.8L217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 120 227.4 120 224C120 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 176 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 232 206.1 232 224C232 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8V228.8zM377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8L377.6 228.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-beam-sweat\": [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M464 128C437.5 128 416 107 416 81.01C416 76.01 417.8 69.74 420.6 62.87C420.9 62.17 421.2 61.46 421.6 60.74C430.5 40.51 448.1 15.86 457.6 3.281C460.8-1.094 467.2-1.094 470.4 3.281C483.4 20.65 512 61.02 512 81.01C512 102.7 497.1 120.8 476.8 126.3C472.7 127.4 468.4 128 464 128L464 128zM391.1 50.53C387.8 58.57 384 69.57 384 81.01C384 84.1 384.3 88.91 384.9 92.72C349.4 64.71 304.7 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 219.7 454.7 185.5 438.3 155.8C446.4 158.5 455.1 160 464 160C473.6 160 482.8 158.3 491.4 155.2C504.7 186.2 512 220.2 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 .0002 256 .0002C307.4 .0002 355.3 15.15 395.4 41.23C393.9 44.32 392.4 47.43 391.1 50.53V50.53zM255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.9 255.9 318.9C289 318.9 320.6 315.1 349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1zM217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 119.1 227.4 119.1 224C119.1 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 175.1 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 231.1 206.1 231.1 224C231.1 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8L217.6 228.8zM377.6 228.8L377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8V228.8z\"],\n    \"face-grin-hearts\": [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM238.9 177.1L221.4 243C219.1 251.6 210.4 256.6 201.8 254.3L136.7 236.9C118.9 232.1 108.4 213.8 113.1 196.1C117.9 178.3 136.2 167.7 153.1 172.5L170.1 176.8L174.4 160.7C179.2 142.9 197.5 132.4 215.3 137.1C233.1 141.9 243.6 160.2 238.9 177.1H238.9zM341.9 176.8L358 172.5C375.8 167.7 394.1 178.3 398.9 196.1C403.6 213.8 393.1 232.1 375.3 236.9L310.2 254.3C301.6 256.6 292.9 251.6 290.6 243L273.1 177.1C268.4 160.2 278.9 141.9 296.7 137.1C314.5 132.4 332.8 142.9 337.6 160.7L341.9 176.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-squint\": [512, 512, [128518, \"grin-squint\"], \"f585\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM223.4 194.6C234.1 200.3 234.1 215.7 223.4 221.4L133.5 269.3C125.6 273.6 116 267.8 116 258.9C116 256.1 116.1 253.4 118.8 251.2L154.8 208L118.8 164.8C116.1 162.6 116 159.9 116 157.1C116 148.2 125.6 142.4 133.5 146.7L223.4 194.6zM393.2 164.8L357.2 208L393.2 251.2C395 253.4 396 256.1 396 258.9C396 267.8 386.4 273.6 378.5 269.3L288.6 221.4C277.9 215.7 277.9 200.3 288.6 194.6L378.5 146.7C386.4 142.4 396 148.2 396 157.1C396 159.9 395 162.6 393.2 164.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-squint-tears\": [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.18C446-5.046 477.5-4.646 497.1 14.92C516.6 34.49 517 65.95 497.8 85.18C483 99.97 432.2 108.8 409.6 111.9C403.1 112.8 399.2 108 400.1 102.4C403.3 79.94 412 28.97 426.8 14.18H426.8zM74.98 74.98C158.2-8.253 284.5-22.19 382.2 33.17C380.6 37.96 379.3 42.81 378.1 47.52C375 59.67 372.6 72.08 370.8 82.52C290.1 28.93 180.1 37.74 108.9 108.9C37.75 180.1 28.94 290 82.49 370.8C72.01 372.6 59.6 374.1 47.46 378.1C42.76 379.3 37.93 380.6 33.15 382.1C-22.19 284.5-8.245 158.2 74.98 74.98V74.98zM478.8 129.9C534.2 227.5 520.2 353.8 437 437C353.8 520.3 227.5 534.2 129.8 478.8C131.3 474 132.7 469.2 133.9 464.5C136.1 452.3 139.4 439.9 141.2 429.5C221.9 483.1 331.9 474.3 403.1 403.1C474.3 331.9 483.1 221.1 429.5 141.2C439.1 139.4 452.4 137 464.5 133.9C469.2 132.7 474.1 131.4 478.8 129.9L478.8 129.9zM359.2 226.9C369.3 210.6 393 210 397 228.8C406.6 273.1 393.4 322.3 357.8 357.9C322.2 393.5 273 406.7 228.6 397.1C209.9 393.1 210.5 369.4 226.8 359.3C252 343.6 276.1 323.9 300.4 300.5C323.8 277.1 343.5 252.1 359.2 226.9L359.2 226.9zM189.5 235.7C201.1 232.1 211.1 242.1 208.5 254.6L178.8 352.1C176.2 360.7 165.4 363.4 159 357C157.1 355 155.8 352.5 155.6 349.7L150.5 293.6L94.43 288.5C91.66 288.3 89.07 287.1 87.1 285.1C80.76 278.7 83.46 267.9 92.05 265.3L189.5 235.7zM288.5 94.43L293.6 150.5L349.7 155.6C352.5 155.8 355 157.1 357 159C363.4 165.4 360.7 176.2 352.1 178.8L254.6 208.5C242.1 211.1 232.1 201.1 235.7 189.5L265.3 92.05C267.9 83.46 278.7 80.76 285.1 87.1C287.1 89.07 288.3 91.66 288.5 94.43V94.43zM14.18 426.8C28.97 412 79.85 403.2 102.4 400.1C108 399.2 112.8 403.1 111.9 409.6C108.7 432.1 99.97 483 85.18 497.8C65.95 517 34.5 516.6 14.93 497.1C-4.645 477.5-5.046 446 14.18 426.8H14.18z\"],\n    \"face-grin-stars\": [512, 512, [129321, \"grin-stars\"], \"f587\", \"M199.8 167.3L237.9 172.3C240.1 172.7 243.5 174.8 244.5 177.8C245.4 180.7 244.6 183.9 242.4 186L214.5 212.5L221.5 250.3C222 253.4 220.8 256.4 218.3 258.2C215.8 260.1 212.5 260.3 209.8 258.8L175.1 240.5L142.2 258.8C139.5 260.3 136.2 260.1 133.7 258.2C131.2 256.4 129.1 253.4 130.5 250.3L137.5 212.5L109.6 186C107.4 183.9 106.6 180.7 107.5 177.8C108.5 174.8 111 172.7 114.1 172.3L152.2 167.3L168.8 132.6C170.1 129.8 172.9 128 175.1 128C179.1 128 181.9 129.8 183.2 132.6L199.8 167.3zM359.8 167.3L397.9 172.3C400.1 172.7 403.5 174.8 404.5 177.8C405.4 180.7 404.6 183.9 402.4 186L374.5 212.5L381.5 250.3C382 253.4 380.8 256.4 378.3 258.2C375.8 260.1 372.5 260.3 369.8 258.8L336 240.5L302.2 258.8C299.5 260.3 296.2 260.1 293.7 258.2C291.2 256.4 289.1 253.4 290.5 250.3L297.5 212.5L269.6 186C267.4 183.9 266.6 180.7 267.5 177.8C268.5 174.8 271 172.7 274.1 172.3L312.2 167.3L328.8 132.6C330.1 129.8 332.9 128 336 128C339.1 128 341.9 129.8 343.2 132.6L359.8 167.3zM349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-grin-tears\": [640, 512, [128514, \"grin-tears\"], \"f588\", \"M519.4 334.4C522.7 342.5 527.8 352.1 535.9 361.1C539.9 365 544.1 368.4 548.6 371.4C506.4 454.8 419.9 512 319.1 512C220.1 512 133.6 454.8 91.4 371.4C95.87 368.4 100.1 365 104.1 361.1C112.2 352.1 117.3 342.5 120.6 334.4C121.8 331.5 122.9 328.6 123.9 325.5C152.5 406.2 229.5 464 319.1 464C410.5 464 487.5 406.2 516.1 325.5C517.1 328.6 518.2 331.5 519.4 334.4V334.4zM319.1 47.1C218.6 47.1 134.2 120.5 115.7 216.5C109.1 213.4 101.4 212.2 93.4 213.3C86.59 214.3 77.18 215.7 66.84 217.7C85.31 94.5 191.6 0 319.1 0C448.4 0 554.7 94.5 573.2 217.7C562.8 215.7 553.4 214.3 546.6 213.3C538.6 212.2 530.9 213.4 524.2 216.5C505.8 120.5 421.4 48 319.1 48V47.1zM78.5 341.1C59.98 356.7 32.01 355.5 14.27 337.7C-4.442 319-4.825 288.9 13.55 270.6C22.19 261.9 43.69 255.4 64.05 250.1C77.02 248.2 89.53 246.2 97.94 245C103.3 244.2 107.8 248.7 106.1 254.1C103.9 275.6 95.58 324.3 81.43 338.4C80.49 339.4 79.51 340.3 78.5 341.1V341.1zM561.5 341.1C560.7 340.5 559.1 339.8 559.2 339.1C559 338.9 558.8 338.7 558.6 338.4C544.4 324.3 536.1 275.6 533 254.1C532.2 248.7 536.7 244.2 542.1 245C543.1 245.2 544.2 245.3 545.4 245.5C553.6 246.7 564.6 248.5 575.1 250.1C596.3 255.4 617.8 261.9 626.4 270.6C644.8 288.9 644.4 319 625.7 337.7C607.1 355.5 580 356.7 561.5 341.1L561.5 341.1zM319.9 399.1C269.6 399.1 225.5 374.6 200.9 336.5C190.5 320.4 207.7 303.1 226.3 308.4C255.3 315.1 286.8 318.8 319.9 318.8C353 318.8 384.6 315.1 413.5 308.4C432.2 303.1 449.4 320.4 438.1 336.5C414.4 374.6 370.3 399.1 319.9 399.1zM281.6 228.8L281.4 228.5C281.2 228.3 281 228 280.7 227.6C280 226.8 279.1 225.7 277.9 224.3C275.4 221.4 271.9 217.7 267.7 213.1C258.9 206.2 248.8 200 239.1 200C231.2 200 221.1 206.2 212.3 213.1C208.1 217.7 204.6 221.4 202.1 224.3C200.9 225.7 199.1 226.8 199.3 227.6C198.1 228 198.8 228.3 198.6 228.5L198.4 228.8L198.4 228.8C196.3 231.6 192.7 232.7 189.5 231.6C186.2 230.5 183.1 227.4 183.1 224C183.1 206.1 190.7 188.4 200.6 175.2C210.4 162.2 224.5 152 239.1 152C255.5 152 269.6 162.2 279.4 175.2C289.3 188.4 295.1 206.1 295.1 224C295.1 227.4 293.8 230.5 290.5 231.6C287.3 232.7 283.7 231.6 281.6 228.8L281.6 228.8zM441.6 228.8L441.6 228.8L441.4 228.5C441.2 228.3 441 228 440.7 227.6C440 226.8 439.1 225.7 437.9 224.3C435.4 221.4 431.9 217.7 427.7 213.1C418.9 206.2 408.8 200 400 200C391.2 200 381.1 206.2 372.3 213.1C368.1 217.7 364.6 221.4 362.1 224.3C360.9 225.7 359.1 226.8 359.3 227.6C358.1 228 358.8 228.3 358.6 228.5L358.4 228.8L358.4 228.8C356.3 231.6 352.7 232.7 349.5 231.6C346.2 230.5 344 227.4 344 223.1C344 206.1 350.7 188.4 360.6 175.2C370.4 162.2 384.5 151.1 400 151.1C415.5 151.1 429.6 162.2 439.4 175.2C449.3 188.4 456 206.1 456 223.1C456 227.4 453.8 230.5 450.5 231.6C447.3 232.7 443.7 231.6 441.6 228.8V228.8z\"],\n    \"face-grin-tongue\": [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208zM368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 337.7 95.13 408.4 163.7 442.4C161.3 434 160 425.2 160 416V363.6C151.1 355.6 143.3 346.5 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C368.6 346.4 360.8 355.5 352 363.5V416C352 425.2 350.7 434 348.3 442.4C416.9 408.4 464 337.7 464 256C464 141.1 370.9 48 255.1 48H256zM320 416V378.6C320 363.9 308.1 352 293.4 352H291.4C280.1 352 270.3 359.9 267.8 370.9C264.1 383.5 247 383.5 244.2 370.9C241.7 359.9 231.9 352 220.6 352H218.6C203.9 352 192 363.9 192 378.6V416C192 451.3 220.7 480 256 480C291.3 480 320 451.3 320 416z\"],\n    \"face-grin-tongue-squint\": [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M116 157.1C116 148.2 125.6 142.4 133.5 146.7L223.4 194.6C234.1 200.3 234.1 215.7 223.4 221.4L133.5 269.3C125.6 273.6 116 267.8 116 258.9C116 256.1 116.1 253.4 118.8 251.2L154.8 208L118.8 164.8C116.1 162.6 116 159.9 116 157.1V157.1zM378.5 146.7C386.4 142.4 396 148.2 396 157.1C396 159.9 395 162.6 393.2 164.8L357.2 208L393.2 251.2C395 253.4 396 256.1 396 258.9C396 267.8 386.4 273.6 378.5 269.3L288.6 221.4C277.9 215.7 277.9 200.3 288.6 194.6L378.5 146.7zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 337.7 95.13 408.4 163.7 442.4C161.3 434 160 425.2 160 416V392.7C135.1 375.1 116.9 351.3 105.2 323.5C100.2 311.7 112.2 301 124.5 304.8C164.1 316.9 208.9 323.8 256.3 323.8C303.7 323.8 348.4 316.9 388.1 304.8C400.4 301 412.4 311.7 407.4 323.5C395.6 351.5 376.3 375.5 352 393.1V416C352 425.2 350.7 434 348.3 442.4C416.9 408.4 464 337.7 464 255.1C464 141.1 370.9 47.1 256 47.1L256 48zM320 416V378.6C320 363.9 308.1 352 293.4 352H291.4C280.1 352 270.3 359.9 267.8 370.9C264.1 383.5 247 383.5 244.2 370.9C241.7 359.9 231.9 352 220.6 352H218.6C203.9 352 192 363.9 192 378.6V416C192 451.3 220.7 480 256 480C291.3 480 320 451.3 320 416z\"],\n    \"face-grin-tongue-wink\": [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M159.6 220C148.1 220 139.7 223.8 134.2 229.7C126.7 237.7 114 238.1 105.9 230.6C97.89 223 97.48 210.4 105 202.3C119.6 186.8 140.3 180 159.6 180C178.1 180 199.7 186.8 214.2 202.3C221.8 210.4 221.4 223 213.3 230.6C205.2 238.1 192.6 237.7 185 229.7C179.6 223.8 170.3 220 159.6 220zM312.4 208C312.4 194.7 323.1 184 336.4 184C349.6 184 360.4 194.7 360.4 208C360.4 221.3 349.6 232 336.4 232C323.1 232 312.4 221.3 312.4 208zM256 208C256 163.8 291.8 128 336 128C380.2 128 416 163.8 416 208C416 252.2 380.2 288 336 288C291.8 288 256 252.2 256 208zM336 256C362.5 256 384 234.5 384 208C384 181.5 362.5 160 336 160C309.5 160 288 181.5 288 208C288 234.5 309.5 256 336 256zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM348.3 442.4C416.9 408.4 464 337.7 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 337.7 95.13 408.4 163.7 442.4C161.3 434 160 425.2 160 416V363.6C151.1 355.6 143.3 346.5 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C368.6 346.4 360.8 355.5 352 363.5V416C352 425.2 350.7 434 348.3 442.4H348.3zM320 416V378.6C320 363.9 308.1 352 293.4 352H291.4C280.1 352 270.3 359.9 267.8 370.9C264.1 383.5 247 383.5 244.2 370.9C241.7 359.9 231.9 352 220.6 352H218.6C203.9 352 192 363.9 192 378.6V416C192 451.3 220.7 480 256 480C291.3 480 320 451.3 320 416z\"],\n    \"face-grin-wide\": [512, 512, [128515, \"grin-alt\"], \"f581\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM224 192C224 227.3 209.7 256 192 256C174.3 256 160 227.3 160 192C160 156.7 174.3 128 192 128C209.7 128 224 156.7 224 192zM288 192C288 156.7 302.3 128 320 128C337.7 128 352 156.7 352 192C352 227.3 337.7 256 320 256C302.3 256 288 227.3 288 192zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-grin-wink\": [512, 512, [\"grin-wink\"], \"f58c\", \"M349.5 308.4C368.2 303.1 385.4 320.4 374.1 336.5C350.4 374.6 306.3 399.1 255.9 399.1C205.6 399.1 161.5 374.6 136.9 336.5C126.5 320.4 143.7 303.1 162.3 308.4C191.3 315.1 222.8 318.8 255.9 318.8C289 318.8 320.6 315.1 349.5 308.4zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM281.9 230.6C273.9 223 273.5 210.4 281 202.3C295.6 186.8 316.3 180 335.6 180C354.1 180 375.7 186.8 390.2 202.3C397.8 210.4 397.4 223 389.3 230.6C381.2 238.1 368.6 237.7 361 229.7C355.6 223.8 346.3 220 335.6 220C324.1 220 315.7 223.8 310.2 229.7C302.7 237.7 290 238.1 281.9 230.6zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-kiss\": [512, 512, [128535, \"kiss\"], \"f596\", \"M304.7 281.7C308.9 286.8 312 293.1 312 300C312 306.9 308.9 313.2 304.7 318.3C300.4 323.5 294.5 328 287.9 331.7C285.2 333.3 282.3 334.7 279.2 336C282.3 337.3 285.2 338.7 287.9 340.3C294.5 343.1 300.4 348.5 304.7 353.7C308.9 358.8 312 365.1 312 372C312 378.9 308.9 385.2 304.7 390.3C300.4 395.5 294.5 400 287.9 403.7C274.7 411.1 257.4 416 240 416C236.4 416 233.2 413.5 232.3 410C231.3 406.5 232.9 402.8 236.1 401L236.1 401L236.3 400.9C236.5 400.8 236.8 400.6 237.2 400.3C238 399.9 239.2 399.1 240.6 398.2C243.4 396.4 247.2 393.7 250.8 390.6C254.6 387.5 258 384 260.5 380.6C262.1 377 264 374.2 264 372C264 369.8 262.1 366.1 260.5 363.4C258 359.1 254.6 356.5 250.8 353.4C247.2 350.3 243.4 347.6 240.6 345.8C239.2 344.9 238 344.1 237.2 343.7L236.5 343.2L236.3 343.1L236.1 342.1L236.1 342.1C233.6 341.6 232 338.9 232 336C232 333.1 233.6 330.4 236.1 329L236.1 329L236.3 328.9C236.5 328.8 236.8 328.6 237.2 328.3C238 327.9 239.2 327.1 240.6 326.2C243.4 324.4 247.2 321.7 250.8 318.6C254.6 315.5 258 312.1 260.5 308.6C262.1 305 264 302.2 264 300C264 297.8 262.1 294.1 260.5 291.4C258 287.1 254.6 284.5 250.8 281.4C247.2 278.3 243.4 275.6 240.6 273.8C239.2 272.9 238 272.1 237.2 271.7C236.8 271.4 236.5 271.2 236.3 271.1L236.1 270.1L236.1 270.1C232.9 269.2 231.3 265.5 232.3 261.1C233.2 258.5 236.4 256 240 256C257.4 256 274.7 260.9 287.9 268.3C294.5 271.1 300.4 276.5 304.7 281.7V281.7zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-kiss-beam\": [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M304.7 297.7C308.9 302.8 312 309.1 312 316C312 322.9 308.9 329.2 304.7 334.3C300.4 339.5 294.5 344 287.9 347.7C285.2 349.3 282.3 350.7 279.2 352C282.3 353.3 285.2 354.7 287.9 356.3C294.5 359.1 300.4 364.5 304.7 369.7C308.9 374.8 312 381.1 312 388C312 394.9 308.9 401.2 304.7 406.3C300.4 411.5 294.5 416 287.9 419.7C274.7 427.1 257.4 432 240 432C236.4 432 233.2 429.5 232.3 426C231.3 422.5 232.9 418.8 236.1 417L236.1 417L236.3 416.9C236.5 416.8 236.8 416.6 237.2 416.3C238 415.9 239.2 415.1 240.6 414.2C243.4 412.4 247.2 409.7 250.8 406.6C254.6 403.5 258 400 260.5 396.6C262.1 393 264 390.2 264 388C264 385.8 262.1 382.1 260.5 379.4C258 375.1 254.6 372.5 250.8 369.4C247.2 366.3 243.4 363.6 240.6 361.8C239.2 360.9 238 360.1 237.2 359.7C236.8 359.4 236.5 359.2 236.3 359.1L236.1 358.1L236.1 358.1C233.6 357.6 232 354.9 232 352C232 349.1 233.6 346.4 236.1 345L236.1 345L236.3 344.9C236.5 344.8 236.8 344.6 237.2 344.3C238 343.9 239.2 343.1 240.6 342.2C243.4 340.4 247.2 337.7 250.8 334.6C254.6 331.5 258 328.1 260.5 324.6C262.1 321 264 318.2 264 316C264 313.8 262.1 310.1 260.5 307.4C258 303.1 254.6 300.5 250.8 297.4C247.2 294.3 243.4 291.6 240.6 289.8C239.2 288.9 238 288.1 237.2 287.7C236.8 287.4 236.5 287.2 236.3 287.1L236.1 286.1L236.1 286.1C232.9 285.2 231.3 281.5 232.3 277.1C233.2 274.5 236.4 272 240 272C257.4 272 274.7 276.9 287.9 284.3C294.5 287.1 300.4 292.5 304.7 297.7L304.7 297.7zM217.6 228.8L217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 120 227.4 120 224C120 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 176 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 232 206.1 232 224C232 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8V228.8zM377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8L377.6 228.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-kiss-wink-heart\": [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M345.3 472.1C347.3 479.7 350.9 486.4 355.7 491.8C325.1 504.8 291.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 285.3 507.1 313.4 498 339.7C486.9 334.1 474.5 333.1 461.8 334.6C459.7 329.4 457 324.6 453.9 320.1C460.5 299.9 464 278.4 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C285.4 464 313.5 457.9 338.9 446.8L345.3 472.1zM288.7 334.3C284.4 339.5 278.5 344 271.9 347.7C269.2 349.3 266.3 350.7 263.2 352C266.3 353.3 269.2 354.7 271.9 356.3C278.5 359.1 284.4 364.5 288.7 369.7C292.9 374.8 296 381.1 296 388C296 394.9 292.9 401.2 288.7 406.3C284.4 411.5 278.5 416 271.9 419.7C258.7 427.1 241.4 432 224 432C220.4 432 217.2 429.5 216.3 426C215.3 422.5 216.9 418.8 220.1 417L220.1 417L220.3 416.9C220.5 416.8 220.8 416.6 221.2 416.3C222 415.9 223.2 415.1 224.6 414.2C227.4 412.4 231.2 409.7 234.8 406.6C238.6 403.5 242 400 244.5 396.6C246.1 393 248 390.2 248 388C248 385.8 246.1 382.1 244.5 379.4C242 375.1 238.6 372.5 234.8 369.4C231.2 366.3 227.4 363.6 224.6 361.8C223.2 360.9 222 360.1 221.2 359.7C220.8 359.4 220.5 359.2 220.3 359.1L220.1 358.1L220.1 358.1C217.6 357.6 216 354.9 216 352C216 349.1 217.6 346.4 220.1 345L220.1 345L220.3 344.9C220.5 344.8 220.8 344.6 221.2 344.3C222 343.9 223.2 343.1 224.6 342.2C227.4 340.4 231.2 337.7 234.8 334.6C238.6 331.5 242 328.1 244.5 324.6C246.1 321 248 318.2 248 316C248 313.8 246.1 310.1 244.5 307.4C242 303.1 238.6 300.5 234.8 297.4C231.2 294.3 227.4 291.6 224.6 289.8C223.2 288.9 222 288.1 221.2 287.7C220.8 287.4 220.5 287.2 220.3 287.1L220.1 286.1L220.1 286.1C216.9 285.2 215.3 281.5 216.3 277.1C217.2 274.5 220.4 272 224 272C241.4 272 258.7 276.9 271.9 284.3C278.5 287.1 284.4 292.5 288.7 297.7C292.9 302.8 296 309.1 296 316C296 322.9 292.9 329.2 288.7 334.3V334.3zM144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208zM335.6 220C324.1 220 315.7 223.8 310.2 229.7C302.7 237.7 290 238.1 281.9 230.6C273.9 223 273.5 210.4 281 202.3C295.6 186.8 316.3 180 335.6 180C354.1 180 375.7 186.8 390.2 202.3C397.8 210.4 397.4 223 389.3 230.6C381.2 238.1 368.6 237.7 361 229.7C355.6 223.8 346.3 220 335.6 220zM439.4 373.3L459.5 367.6C481.7 361.4 504.6 375.2 510.6 398.4C516.5 421.7 503.3 445.6 481.1 451.8L396.1 475.6C387.5 478 378.6 472.9 376.3 464.2L353.4 374.9C347.5 351.6 360.7 327.7 382.9 321.5C405.2 315.3 428 329.1 433.1 352.3L439.4 373.3z\"],\n    \"face-laugh\": [512, 512, [\"laugh\"], \"f599\", \"M130.7 313.9C126.5 300.4 137.8 288 151.1 288H364.5C378.7 288 389.9 300.4 385.8 313.9C368.1 368.4 318.2 408 258.2 408C198.2 408 147.5 368.4 130.7 313.9V313.9zM208.4 192C208.4 209.7 194 224 176.4 224C158.7 224 144.4 209.7 144.4 192C144.4 174.3 158.7 160 176.4 160C194 160 208.4 174.3 208.4 192zM304.4 192C304.4 174.3 318.7 160 336.4 160C354 160 368.4 174.3 368.4 192C368.4 209.7 354 224 336.4 224C318.7 224 304.4 209.7 304.4 192zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-laugh-beam\": [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M130.7 313.9C126.5 300.4 137.8 288 151.1 288H364.5C378.7 288 389.9 300.4 385.8 313.9C368.1 368.4 318.2 408 258.2 408C198.2 408 147.5 368.4 130.7 313.9V313.9zM217.6 228.8L217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 120 227.4 120 224C120 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 176 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 232 206.1 232 224C232 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8V228.8zM377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8L377.6 228.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-laugh-squint\": [512, 512, [\"laugh-squint\"], \"f59b\", \"M130.7 313.9C126.5 300.4 137.8 288 151.1 288H364.5C378.7 288 389.9 300.4 385.8 313.9C368.1 368.4 318.2 408 258.2 408C198.2 408 147.5 368.4 130.7 313.9V313.9zM223.4 178.6C234.1 184.3 234.1 199.7 223.4 205.4L133.5 253.3C125.6 257.6 116 251.8 116 242.9C116 240.1 116.1 237.4 118.8 235.2L154.8 192L118.8 148.8C116.1 146.6 116 143.9 116 141.1C116 132.2 125.6 126.4 133.5 130.7L223.4 178.6zM393.2 148.8L357.2 192L393.2 235.2C395 237.4 396 240.1 396 242.9C396 251.8 386.4 257.6 378.5 253.3L288.6 205.4C277.9 199.7 277.9 184.3 288.6 178.6L378.5 130.7C386.4 126.4 396 132.2 396 141.1C396 143.9 395 146.6 393.2 148.8V148.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-laugh-wink\": [512, 512, [\"laugh-wink\"], \"f59c\", \"M130.7 313.9C126.5 300.4 137.8 288 151.1 288H364.5C378.7 288 389.9 300.4 385.8 313.9C368.1 368.4 318.2 408 258.2 408C198.2 408 147.5 368.4 130.7 313.9V313.9zM208.4 192C208.4 209.7 194 224 176.4 224C158.7 224 144.4 209.7 144.4 192C144.4 174.3 158.7 160 176.4 160C194 160 208.4 174.3 208.4 192zM281.9 214.6C273.9 207 273.5 194.4 281 186.3C295.6 170.8 316.3 164 335.6 164C354.1 164 375.7 170.8 390.2 186.3C397.8 194.4 397.4 207 389.3 214.6C381.2 222.1 368.6 221.7 361 213.7C355.6 207.8 346.3 204 335.6 204C324.1 204 315.7 207.8 310.2 213.7C302.7 221.7 290 222.1 281.9 214.6zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-meh\": [512, 512, [128528, \"meh\"], \"f11a\", \"M144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208zM368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208zM328 328C341.3 328 352 338.7 352 352C352 365.3 341.3 376 328 376H184C170.7 376 160 365.3 160 352C160 338.7 170.7 328 184 328H328zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-meh-blank\": [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-rolling-eyes\": [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M168 376C168 362.7 178.7 352 192 352H320C333.3 352 344 362.7 344 376C344 389.3 333.3 400 320 400H192C178.7 400 168 389.3 168 376zM80 224C80 179.8 115.8 144 160 144C204.2 144 240 179.8 240 224C240 268.2 204.2 304 160 304C115.8 304 80 268.2 80 224zM160 272C186.5 272 208 250.5 208 224C208 209.7 201.7 196.8 191.8 188C191.9 189.3 192 190.6 192 192C192 209.7 177.7 224 160 224C142.3 224 128 209.7 128 192C128 190.6 128.1 189.3 128.2 188C118.3 196.8 112 209.7 112 224C112 250.5 133.5 272 160 272V272zM272 224C272 179.8 307.8 144 352 144C396.2 144 432 179.8 432 224C432 268.2 396.2 304 352 304C307.8 304 272 268.2 272 224zM352 272C378.5 272 400 250.5 400 224C400 209.7 393.7 196.8 383.8 188C383.9 189.3 384 190.6 384 192C384 209.7 369.7 224 352 224C334.3 224 320 209.7 320 192C320 190.6 320.1 189.3 320.2 188C310.3 196.8 304 209.7 304 224C304 250.5 325.5 272 352 272zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464z\"],\n    \"face-sad-cry\": [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M159.6 220C148.1 220 139.7 223.8 134.2 229.7C126.7 237.7 114 238.1 105.1 230.6C97.89 223 97.48 210.4 105 202.3C119.6 186.8 140.3 180 159.6 180C178.1 180 199.7 186.8 214.2 202.3C221.8 210.4 221.4 223 213.3 230.6C205.2 238.1 192.6 237.7 185 229.7C179.6 223.8 170.3 220 159.6 220zM297.9 230.6C289.9 223 289.5 210.4 297 202.3C311.6 186.8 332.3 180 351.6 180C370.1 180 391.7 186.8 406.2 202.3C413.8 210.4 413.4 223 405.3 230.6C397.2 238.1 384.6 237.7 377 229.7C371.6 223.8 362.3 220 351.6 220C340.1 220 331.7 223.8 326.2 229.7C318.7 237.7 306 238.1 297.9 230.6zM208 320C208 293.5 229.5 272 256 272C282.5 272 304 293.5 304 320V352C304 378.5 282.5 400 256 400C229.5 400 208 378.5 208 352V320zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM400 406.1C439.4 368.2 464 314.1 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 314.1 72.55 368.2 112 406.1V288C112 274.7 122.7 264 136 264C149.3 264 160 274.7 160 288V440.6C188.7 455.5 221.4 464 256 464C290.6 464 323.3 455.5 352 440.6V288C352 274.7 362.7 264 376 264C389.3 264 400 274.7 400 288V406.1z\"],\n    \"face-sad-tear\": [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M169.6 291.3C172.8 286.9 179.2 286.9 182.4 291.3C195.6 308.6 223.1 349 223.1 369C223.1 395 202.5 416 175.1 416C149.5 416 127.1 395 127.1 369C127.1 349 156.6 308.6 169.6 291.3H169.6zM368 346.8C377.9 355.6 378.7 370.8 369.9 380.7C361 390.6 345.9 391.4 335.1 382.6C314.7 363.5 286.7 352 256 352C242.7 352 232 341.3 232 328C232 314.7 242.7 304 256 304C299 304 338.3 320.2 368 346.8L368 346.8zM335.6 176C353.3 176 367.6 190.3 367.6 208C367.6 225.7 353.3 240 335.6 240C317.1 240 303.6 225.7 303.6 208C303.6 190.3 317.1 176 335.6 176zM175.6 240C157.1 240 143.6 225.7 143.6 208C143.6 190.3 157.1 176 175.6 176C193.3 176 207.6 190.3 207.6 208C207.6 225.7 193.3 240 175.6 240zM256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0zM175.9 448C200.5 458.3 227.6 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256C48 308.7 67.59 356.8 99.88 393.4C110.4 425.4 140.9 447.9 175.9 448V448z\"],\n    \"face-smile\": [512, 512, [128578, \"smile\"], \"f118\", \"M256 352C293.2 352 319.2 334.5 334.4 318.1C343.3 308.4 358.5 307.7 368.3 316.7C378 325.7 378.6 340.9 369.6 350.6C347.7 374.5 309.7 400 256 400C202.3 400 164.3 374.5 142.4 350.6C133.4 340.9 133.1 325.7 143.7 316.7C153.5 307.7 168.7 308.4 177.6 318.1C192.8 334.5 218.8 352 256 352zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-smile-beam\": [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M256 352C293.2 352 319.2 334.5 334.4 318.1C343.3 308.4 358.5 307.7 368.3 316.7C378 325.7 378.6 340.9 369.6 350.6C347.7 374.5 309.7 400 256 400C202.3 400 164.3 374.5 142.4 350.6C133.4 340.9 133.1 325.7 143.7 316.7C153.5 307.7 168.7 308.4 177.6 318.1C192.8 334.5 218.8 352 256 352zM217.6 228.8L217.6 228.8L217.4 228.5C217.2 228.3 217 228 216.7 227.6C216 226.8 215.1 225.7 213.9 224.3C211.4 221.4 207.9 217.7 203.7 213.1C194.9 206.2 184.8 200 176 200C167.2 200 157.1 206.2 148.3 213.1C144.1 217.7 140.6 221.4 138.1 224.3C136.9 225.7 135.1 226.8 135.3 227.6C134.1 228 134.8 228.3 134.6 228.5L134.4 228.8L134.4 228.8C132.3 231.6 128.7 232.7 125.5 231.6C122.2 230.5 120 227.4 120 224C120 206.1 126.7 188.4 136.6 175.2C146.4 162.2 160.5 152 176 152C191.5 152 205.6 162.2 215.4 175.2C225.3 188.4 232 206.1 232 224C232 227.4 229.8 230.5 226.5 231.6C223.3 232.7 219.7 231.6 217.6 228.8V228.8zM377.6 228.8L377.4 228.5C377.2 228.3 377 228 376.7 227.6C376 226.8 375.1 225.7 373.9 224.3C371.4 221.4 367.9 217.7 363.7 213.1C354.9 206.2 344.8 200 336 200C327.2 200 317.1 206.2 308.3 213.1C304.1 217.7 300.6 221.4 298.1 224.3C296.9 225.7 295.1 226.8 295.3 227.6C294.1 228 294.8 228.3 294.6 228.5L294.4 228.8L294.4 228.8C292.3 231.6 288.7 232.7 285.5 231.6C282.2 230.5 280 227.4 280 224C280 206.1 286.7 188.4 296.6 175.2C306.4 162.2 320.5 152 336 152C351.5 152 365.6 162.2 375.4 175.2C385.3 188.4 392 206.1 392 224C392 227.4 389.8 230.5 386.5 231.6C383.3 232.7 379.7 231.6 377.6 228.8L377.6 228.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-smile-wink\": [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M256 352C293.2 352 319.2 334.5 334.4 318.1C343.3 308.4 358.5 307.7 368.3 316.7C378 325.7 378.6 340.9 369.6 350.6C347.7 374.5 309.7 400 256 400C202.3 400 164.3 374.5 142.4 350.6C133.4 340.9 133.1 325.7 143.7 316.7C153.5 307.7 168.7 308.4 177.6 318.1C192.8 334.5 218.8 352 256 352zM208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208zM281.9 230.6C273.9 223 273.5 210.4 281 202.3C295.6 186.8 316.3 180 335.6 180C354.1 180 375.7 186.8 390.2 202.3C397.8 210.4 397.4 223 389.3 230.6C381.2 238.1 368.6 237.7 361 229.7C355.6 223.8 346.3 220 335.6 220C324.1 220 315.7 223.8 310.2 229.7C302.7 237.7 290 238.1 281.9 230.6zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-surprise\": [512, 512, [128558, \"surprise\"], \"f5c2\", \"M144.4 208C144.4 190.3 158.7 176 176.4 176C194 176 208.4 190.3 208.4 208C208.4 225.7 194 240 176.4 240C158.7 240 144.4 225.7 144.4 208zM368.4 208C368.4 225.7 354 240 336.4 240C318.7 240 304.4 225.7 304.4 208C304.4 190.3 318.7 176 336.4 176C354 176 368.4 190.3 368.4 208zM192 352C192 316.7 220.7 288 256 288C291.3 288 320 316.7 320 352C320 387.3 291.3 416 256 416C220.7 416 192 387.3 192 352zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"face-tired\": [512, 512, [128555, \"tired\"], \"f5c8\", \"M176.5 320.3C196.1 302.1 223.8 288 256 288C288.2 288 315.9 302.1 335.5 320.3C354.5 338.1 368 362 368 384C368 389.4 365.3 394.4 360.8 397.4C356.2 400.3 350.5 400.8 345.6 398.7L328.4 391.1C305.6 381.2 280.9 376 256 376C231.1 376 206.4 381.2 183.6 391.1L166.4 398.7C161.5 400.8 155.8 400.3 151.2 397.4C146.7 394.4 144 389.4 144 384C144 362 157.5 338.1 176.5 320.3zM223.4 194.6C234.1 200.3 234.1 215.7 223.4 221.4L133.5 269.3C125.6 273.6 116 267.8 116 258.9C116 256.1 116.1 253.4 118.8 251.2L154.8 208L118.8 164.8C116.1 162.6 116 159.9 116 157.1C116 148.2 125.6 142.4 133.5 146.7L223.4 194.6zM393.2 164.8L357.2 208L393.2 251.2C395 253.4 396 256.1 396 258.9C396 267.8 386.4 273.6 378.5 269.3L288.6 221.4C277.9 215.7 277.9 200.3 288.6 194.6L378.5 146.7C386.4 142.4 396 148.2 396 157.1C396 159.9 395 162.6 393.2 164.8zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 48C141.1 48 48 141.1 48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48z\"],\n    \"file\": [384, 512, [128459, 61462, 128196], \"f15b\", \"M365.3 93.38l-74.63-74.64C278.6 6.743 262.3 0 245.4 0L64-.0001c-35.35 0-64 28.65-64 64l.0065 384c0 35.35 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM320 464H64.02c-8.836 0-15.1-7.163-16-15.1L48 64.13c-.0004-8.837 7.163-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1v288C336 456.8 328.8 464 320 464z\"],\n    \"file-audio\": [384, 512, [], \"f1c7\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0L64-.0001c-35.35 0-64 28.65-64 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM171.5 259.5L136 296H92C85.38 296 80 301.4 80 308v56C80 370.7 85.38 376 92 376H136l35.5 36.5C179.1 420 192 414.8 192 404v-136C192 257.3 179.1 251.9 171.5 259.5zM235.1 260.7c-6.25 6.25-6.25 16.38 0 22.62C235.3 283.5 256 305.1 256 336c0 30.94-20.77 52.53-20.91 52.69c-6.25 6.25-6.25 16.38 0 22.62C238.2 414.4 242.3 416 246.4 416s8.188-1.562 11.31-4.688C258.1 410.1 288 380.5 288 336s-29.05-74.06-30.28-75.31C251.5 254.4 241.3 254.4 235.1 260.7z\"],\n    \"file-code\": [384, 512, [], \"f1c9\", \"M162.1 257.8c-7.812-7.812-20.47-7.812-28.28 0l-48 48c-7.812 7.812-7.812 20.5 0 28.31l48 48C137.8 386.1 142.9 388 148 388s10.23-1.938 14.14-5.844c7.812-7.812 7.812-20.5 0-28.31L128.3 320l33.86-33.84C169.1 278.3 169.1 265.7 162.1 257.8zM365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM221.9 257.8c-7.812 7.812-7.812 20.5 0 28.31L255.7 320l-33.86 33.84c-7.812 7.812-7.812 20.5 0 28.31C225.8 386.1 230.9 388 236 388s10.23-1.938 14.14-5.844l48-48c7.812-7.812 7.812-20.5 0-28.31l-48-48C242.3 250 229.7 250 221.9 257.8z\"],\n    \"file-excel\": [384, 512, [], \"f1c3\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM229.1 233.3L192 280.9L154.9 233.3C146.8 222.8 131.8 220.9 121.3 229.1C110.8 237.2 108.9 252.3 117.1 262.8L161.6 320l-44.53 57.25c-8.156 10.47-6.25 25.56 4.188 33.69C125.7 414.3 130.8 416 135.1 416c7.156 0 14.25-3.188 18.97-9.25L192 359.1l37.06 47.65C233.8 412.8 240.9 416 248 416c5.125 0 10.31-1.656 14.72-5.062c10.44-8.125 12.34-23.22 4.188-33.69L222.4 320l44.53-57.25c8.156-10.47 6.25-25.56-4.188-33.69C252.2 220.9 237.2 222.8 229.1 233.3z\"],\n    \"file-image\": [384, 512, [128443], \"f1c5\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM215.3 292c-4.68 0-9.051 2.34-11.65 6.234L164 357.8l-11.68-17.53C149.7 336.3 145.3 334 140.7 334c-4.682 0-9.053 2.34-11.65 6.234l-46.67 70c-2.865 4.297-3.131 9.82-.6953 14.37C84.09 429.2 88.84 432 93.1 432h196c5.163 0 9.907-2.844 12.34-7.395c2.436-4.551 2.17-10.07-.6953-14.37l-74.67-112C224.4 294.3 220 292 215.3 292zM128 288c17.67 0 32-14.33 32-32S145.7 224 128 224S96 238.3 96 256S110.3 288 128 288z\"],\n    \"file-lines\": [384, 512, [128462, 61686, 128441, \"file-alt\", \"file-text\"], \"f15c\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0L64-.0001c-35.35 0-64 28.65-64 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM96 280C96 293.3 106.8 304 120 304h144C277.3 304 288 293.3 288 280S277.3 256 264 256h-144C106.8 256 96 266.8 96 280zM264 352h-144C106.8 352 96 362.8 96 376s10.75 24 24 24h144c13.25 0 24-10.75 24-24S277.3 352 264 352z\"],\n    \"file-pdf\": [384, 512, [], \"f1c1\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM202 286.1c.877-2.688 1.74-5.398 2.582-8.145c1.434-5.762 7.488-31.54 7.488-52.47C212.1 207 197.1 192 178.6 192C160.1 192 145.1 207 145.1 225.5c0 .2969 .1641 28.81 13.85 62.3c-7.035 19.36-15.57 38.8-25.41 57.93c-21.49 10.11-39.24 22.23-52.8 36.07c-6.234 6.438-9.367 14.74-9.367 24.72c0 18.45 15.01 33.46 33.46 33.46c10.8 0 20.98-5.227 27.22-13.98c7.322-10.28 18.38-26.9 30.47-48.95c15.8-6.352 33.88-11.72 53.88-16c13.55 9.578 28.9 17.29 45.71 22.95c4.527 1.551 9.402 2.348 14.43 2.348c20.26 0 36.13-16.19 36.13-36.86c0-20.33-16.54-36.87-36.87-36.87h-3.705c-2.727 .125-20.51 1.141-45.37 5.367C216.9 308.9 208.6 298.3 202 286.1zM110.2 410.4c-3.273 4.688-12.03 2.777-12.03-5.312c0-1.754 .6289-3.43 1.729-4.555c9.02-9.219 19.94-17.05 31.85-23.72C122.3 393.1 114.3 404.7 110.2 410.4zM178.6 218.8c3.693 0 6.703 3.008 6.703 6.703c0 15.21-4.109 34.84-5.746 42.1C172.1 245 171.9 227.2 171.9 225.5C171.9 221.8 174.9 218.8 178.6 218.8zM162.3 348.3c6.611-13.48 13.22-28.46 19.38-44.7c6.389 10.92 14.56 21.86 24.96 31.97C192.6 338.8 177.4 342.9 162.3 348.3zM272.4 339.5h3.352c5.539 0 10.05 4.5 10.05 10.79c0 5.129-4.176 9.32-9.32 9.32c-2.029 0-4.059-.3164-5.852-.9414c-12.33-4.137-23.11-9.32-32.54-15.19C258.3 340.3 272.1 339.5 272.4 339.5z\"],\n    \"file-powerpoint\": [384, 512, [], \"f1c4\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM200 224H128C119.2 224 112 231.2 112 240v168c0 13.25 10.75 24 24 24S160 421.3 160 408v-32h44c44.21 0 79.73-37.95 75.69-82.98C276.1 253.2 240 224 200 224zM204 328H160V272h44c15.44 0 28 12.56 28 28S219.4 328 204 328z\"],\n    \"file-video\": [384, 512, [], \"f1c8\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM240 288c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-16.52l43.84 30.2C292.3 403.5 304 397.6 304 387.4V284.6c0-10.16-11.64-16.16-20.16-10.32L240 304.5V288z\"],\n    \"file-word\": [384, 512, [], \"f1c2\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160L224 128c0 17.67 14.33 32 32 32h79.1V448zM214.6 248C211.3 238.4 202.2 232 192 232s-19.25 6.406-22.62 16L144.7 318.1l-25.89-77.66C114.6 227.8 101 221.2 88.41 225.2C75.83 229.4 69.05 243 73.23 255.6l48 144C124.5 409.3 133.5 415.9 143.8 416c10.17 0 19.45-6.406 22.83-16L192 328.1L217.4 400C220.8 409.6 229.8 416 240 416c10.27-.0938 19.53-6.688 22.77-16.41l48-144c4.188-12.59-2.594-26.16-15.17-30.38c-12.61-4.125-26.2 2.594-30.36 15.19l-25.89 77.66L214.6 248z\"],\n    \"file-zipper\": [384, 512, [\"file-archive\"], \"f1c6\", \"M365.3 93.38l-74.63-74.64C278.6 6.742 262.3 0 245.4 0L64-.0001c-35.35 0-64 28.65-64 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6C384 121.7 377.3 105.4 365.3 93.38zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h48V64h64V48.13h48.01L224 128c0 17.67 14.33 32 32 32h79.1V448zM176 96h-64v32h64V96zM176 160h-64v32h64V160zM176 224h-64l-30.56 116.5C73.51 379.5 103.7 416 144.3 416c40.26 0 70.45-36.3 62.68-75.15L176 224zM160 368H128c-8.836 0-16-7.164-16-16s7.164-16 16-16h32c8.836 0 16 7.164 16 16S168.8 368 160 368z\"],\n    \"flag\": [512, 512, [61725, 127988], \"f024\", \"M476.3 0c-6.365 0-13.01 1.35-19.34 4.233c-45.69 20.86-79.56 27.94-107.8 27.94c-59.96 0-94.81-31.86-163.9-31.87c-34.63 0-77.87 8.003-137.2 32.05V24C48 10.75 37.25 0 24 0S0 10.75 0 24v464C0 501.3 10.75 512 24 512s24-10.75 24-24v-104c53.59-23.86 96.02-31.81 132.8-31.81c73.63 0 124.9 31.78 198.6 31.78c31.91 0 68.02-5.971 111.1-23.09C504.1 355.9 512 344.4 512 332.1V30.73C512 11.1 495.3 0 476.3 0zM464 319.8c-30.31 10.82-58.08 16.1-84.6 16.1c-30.8 0-58.31-7-87.44-14.41c-32.01-8.141-68.29-17.37-111.1-17.37c-42.35 0-85.99 9.09-132.8 27.73V84.14l18.03-7.301c47.39-19.2 86.38-28.54 119.2-28.54c28.24 .0039 49.12 6.711 73.31 14.48c25.38 8.148 54.13 17.39 90.58 17.39c35.43 0 72.24-8.496 114.9-26.61V319.8z\"],\n    \"floppy-disk\": [448, 512, [128426, 128190, \"save\"], \"f0c7\", \"M224 256c-35.2 0-64 28.8-64 64c0 35.2 28.8 64 64 64c35.2 0 64-28.8 64-64C288 284.8 259.2 256 224 256zM433.1 129.1l-83.9-83.9C341.1 37.06 328.8 32 316.1 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V163.9C448 151.2 442.9 138.9 433.1 129.1zM128 80h144V160H128V80zM400 416c0 8.836-7.164 16-16 16H64c-8.836 0-16-7.164-16-16V96c0-8.838 7.164-16 16-16h16v104c0 13.25 10.75 24 24 24h192C309.3 208 320 197.3 320 184V83.88l78.25 78.25C399.4 163.2 400 164.8 400 166.3V416z\"],\n    \"folder\": [512, 512, [128447, 61716, 128193], \"f07b\", \"M448 96h-172.1L226.7 50.75C214.7 38.74 198.5 32 181.5 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h384c35.35 0 64-28.66 64-64V160C512 124.7 483.3 96 448 96zM64 80h117.5c4.273 0 8.293 1.664 11.31 4.688L256 144h192c8.822 0 16 7.176 16 16v32h-416V96C48 87.18 55.18 80 64 80zM448 432H64c-8.822 0-16-7.176-16-16V240h416V416C464 424.8 456.8 432 448 432z\"],\n    \"folder-open\": [576, 512, [128449, 61717, 128194], \"f07c\", \"M572.6 270.3l-96 192C471.2 473.2 460.1 480 447.1 480H64c-35.35 0-64-28.66-64-64V96c0-35.34 28.65-64 64-64h117.5c16.97 0 33.25 6.742 45.26 18.75L275.9 96H416c35.35 0 64 28.66 64 64v32h-48V160c0-8.824-7.178-16-16-16H256L192.8 84.69C189.8 81.66 185.8 80 181.5 80H64C55.18 80 48 87.18 48 96v288l71.16-142.3C124.6 230.8 135.7 224 147.8 224h396.2C567.7 224 583.2 249 572.6 270.3z\"],\n    \"font-awesome\": [448, 512, [62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M448 48V384c-63.09 22.54-82.34 32-119.5 32c-62.82 0-86.6-32-149.3-32c-21.69 0-38.48 3.791-53.74 8.766C110.1 397.5 96 386.1 96 371.7v-.7461c0-9.275 5.734-17.6 14.42-20.86C129.1 342.8 150.2 336 179.2 336c62.73 0 86.51 32 149.3 32c25.5 0 42.85-4.604 71.47-14.7v-240C379.2 120.6 357.7 128 328.5 128c-.0039 0 .0039 0 0 0c-62.81 0-86.61-32-149.3-32C122.1 96 98.8 122.1 48 126.1V456C48 469.3 37.25 480 24 480S0 469.3 0 456V56C0 42.74 10.75 32 24 32S48 42.74 48 56v22.99C98.8 74.14 122.1 48 179.2 48c62.77 0 86.45 32 149.3 32C366.1 80 386.8 69.85 448 48z\"],\n    \"futbol\": [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M177.1 228.6L207.9 320h96.5l29.62-91.38L256 172.1L177.1 228.6zM255.1 0C114.6 0 .0001 114.6 .0001 256S114.6 512 256 512s255.1-114.6 255.1-255.1S397.4 0 255.1 0zM435.2 361.1l-103.9-1.578l-30.67 99.52C286.2 462.2 271.3 464 256 464s-30.19-1.773-44.56-4.93L180.8 359.6L76.83 361.1c-14.93-25.35-24.79-54.01-27.8-84.72L134.3 216.4L100.7 118.1c19.85-22.34 44.32-40.45 72.04-52.62L256 128l83.29-62.47c27.72 12.17 52.19 30.27 72.04 52.62L377.7 216.4l85.23 59.97C459.1 307.1 450.1 335.8 435.2 361.1z\"],\n    \"gem\": [512, 512, [128142], \"f3a5\", \"M507.9 196.4l-104-153.8C399.4 35.95 391.1 32 384 32H127.1C120 32 112.6 35.95 108.1 42.56l-103.1 153.8c-6.312 9.297-5.281 21.72 2.406 29.89l231.1 246.2C243.1 477.3 249.4 480 256 480s12.94-2.734 17.47-7.547l232-246.2C513.2 218.1 514.2 205.7 507.9 196.4zM382.5 96.59L446.1 192h-140.1L382.5 96.59zM256 178.9L177.6 80h156.7L256 178.9zM129.5 96.59L205.1 192H65.04L129.5 96.59zM256 421L85.42 240h341.2L256 421z\"],\n    \"hand\": [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M408 80c-3.994 0-7.91 .3262-11.73 .9551c-9.586-28.51-36.57-49.11-68.27-49.11c-6.457 0-12.72 .8555-18.68 2.457C296.6 13.73 273.9 0 248 0C222.1 0 199.3 13.79 186.6 34.44C180.7 32.85 174.5 32 168.1 32C128.4 32 96.01 64.3 96.01 104v121.6C90.77 224.6 85.41 224 80.01 224c-.0026 0 .0026 0 0 0C36.43 224 0 259.2 0 304.1c0 20.29 7.558 39.52 21.46 54.45l81.25 87.24C141.9 487.9 197.4 512 254.9 512h33.08C393.9 512 480 425.9 480 320V152C480 112.3 447.7 80 408 80zM432 320c0 79.41-64.59 144-143.1 144H254.9c-44.41 0-86.83-18.46-117.1-50.96l-79.76-85.63c-6.202-6.659-9.406-15.4-9.406-23.1c0-22.16 18.53-31.4 31.35-31.4c8.56 0 17.1 3.416 23.42 10.18l26.72 28.69C131.8 312.7 133.9 313.4 135.9 313.4c4.106 0 8.064-3.172 8.064-8.016V104c0-13.25 10.75-24 23.1-24c13.25 0 23.1 10.75 23.1 24v152C192 264.8 199.2 272 208 272s15.1-7.163 15.1-15.1L224 72c0-13.25 10.75-24 23.1-24c13.25 0 23.1 10.75 23.1 24v184C272 264.8 279.2 272 288 272s15.99-7.164 15.99-15.1l.0077-152.2c0-13.25 10.75-24 23.1-24c13.25 0 23.1 10.75 23.1 24v152.2C352 264.8 359.2 272 368 272s15.1-7.163 15.1-15.1V152c0-13.25 10.75-24 23.1-24c13.25 0 23.1 10.75 23.1 24V320z\"],\n    \"hand-back-fist\": [448, 512, [\"hand-rock\"], \"f255\", \"M377.1 68.05C364.4 50.65 343.7 40 321.2 40h-13.53c-3.518 0-7.039 .2754-10.53 .8184C284.8 31.33 269.6 26 253.5 26H240c-3.977 0-7.904 .3691-11.75 1.084C216.7 10.71 197.6 0 176 0H160C124.7 0 96 28.65 96 64v49.71L63.04 143.3C43.3 160 32 184.6 32 210.9v78.97c0 32.1 17.11 61.65 44.65 77.12L112 386.9v101.1C112 501.3 122.7 512 135.1 512S160 501.3 160 488v-129.9c-1.316-.6543-2.775-.9199-4.062-1.639l-55.78-31.34C87.72 318.2 80 304.6 80 289.9V210.9c0-12.31 5.281-23.77 14.5-31.39L112 163.8V208C112 216.8 119.2 224 128 224s16-7.156 16-16V64c0-8.828 7.188-16 16-16h16C184.8 48 192 55.17 192 64v16c0 9.578 7.942 16.04 16.15 16.04c6.432 0 12.31-4.018 14.73-10.17C223.3 84.84 228.3 74 240 74h13.53c20.97 0 17.92 19.58 34.27 19.58c8.177 0 9.9-5.584 19.88-5.584h13.53c25.54 0 18.27 28.23 38.66 28.23c.1562 0 .3125-.002 .4668-.0078L375.4 116C388.1 116 400 127.7 400 142V272c0 36.15-19.54 67.32-48 83.69v132.3C352 501.3 362.7 512 375.1 512S400 501.3 400 488v-108.1C430.1 352.8 448 313.6 448 272V142C448 102.1 416.8 69.44 377.1 68.05z\"],\n    \"hand-lizard\": [512, 512, [], \"f258\", \"M512 331.8V424c0 13.25-10.75 24-24 24c-13.25 0-24-10.75-24-24v-92.17c0-10.09-3.031-19.8-8.766-28.08l-118.6-170.5C327.4 119.1 312.2 112 295.1 112H53.32c-2.5 0-5.25 2.453-5.313 4.172c-.2969 9.5 3.156 18.47 9.75 25.28C64.36 148.3 73.2 152 82.67 152h161.8c17.09 0 33.4 8.281 43.4 22.14c9.984 13.88 12.73 31.83 7.328 48.05l-9.781 29.34C278.2 273.3 257.8 288 234.9 288H138.7C129.2 288 120.4 291.8 113.8 298.5c-6.594 6.812-10.05 15.78-9.75 25.28C104.1 325.5 106.8 328 109.3 328h156.6c5.188 0 10.14 1.688 14.3 4.797l78.22 58.67c6.031 4.531 9.594 11.66 9.594 19.2L367.1 424c0 13.25-10.75 24-24 24s-24-10.75-24-24v-1.328L257.8 376H109.3c-28.48 0-52.39-22.72-53.28-50.64c-.7187-22.61 7.531-43.98 23.23-60.2C94.1 248.9 116.1 240 138.7 240h96.19c2.297 0 4.328-1.469 5.063-3.656l9.781-29.33c.7031-2.141-.0156-3.797-.7344-4.797C248.2 201.2 246.9 200 244.6 200H82.67c-22.58 0-43.67-8.938-59.39-25.16C7.575 158.6-.6755 137.3 .0433 114.6C.9339 86.72 24.84 64 53.32 64h242.7c31.94 0 61.86 15.67 80.05 41.92l118.6 170.5C506 292.8 512 311.9 512 331.8z\"],\n    \"hand-peace\": [512, 512, [9996], \"f25b\", \"M412 160c-8.326 0-16.3 1.51-23.68 4.27C375.1 151.8 358.9 144 340 144c-11.64 0-22.44 3.223-32.03 8.418l11.12-68.95c.6228-3.874 .9243-7.725 .9243-11.53c0-36.08-28.91-71.95-72.09-71.95c-34.68 0-65.31 25.16-71.03 60.54L173.4 82.22L168.9 72.77c-12.4-25.75-38.07-40.78-64.89-40.78c-40.8 0-72.01 33.28-72.01 72.07c0 10.48 2.296 21.11 7.144 31.18L89.05 238.9C64.64 250.4 48 275.7 48 303.1v80c0 22.06 10.4 43.32 27.83 56.86l45.95 35.74c29.35 22.83 65.98 35.41 103.2 35.41l78.81 .0352C400.9 512 480 432.1 480 335.8v-107.5C480 189.6 447.9 160 412 160zM320 212.3C320 201.1 328.1 192 340 192c11.02 0 20 9.078 20 20.25v55.5C360 278.9 351 288 340 288C328.1 288 320 278.9 320 267.8V212.3zM247.9 47.98c12.05 0 24.13 9.511 24.13 23.98c0 1.277-.1022 2.57-.3134 3.871L248.4 220.5C240.7 217.6 232.4 215.1 223.9 215.1c0 0 .002 0 0 0c-4.475 0-8.967 .4199-13.38 1.254l-10.55 1.627l24.32-150.7C226.2 56.42 236.4 47.98 247.9 47.98zM79.1 104c0-13.27 10.79-24.04 24.02-24.04c8.937 0 17.5 5.023 21.61 13.61l61.29 127.3L137.3 228.5L82.38 114.4C80.76 111.1 79.1 107.5 79.1 104zM303.8 464l-78.81-.0352c-26.56 0-52.72-8.984-73.69-25.3l-45.97-35.75C99.47 398.4 96 391.3 96 383.1v-80c0-11.23 7.969-21.11 17.59-23.22l105.3-16.23C220.6 264.2 222.3 263.1 223.9 263.1c11.91 0 24.09 9.521 24.09 24.06c0 11.04-7.513 20.95-17.17 23.09L172.8 319c-12.03 1.633-20.78 11.92-20.78 23.75c0 20.21 18.82 24.08 23.7 24.08c2.645 0 64.61-8.619 65.54-8.826c23.55-5.227 41.51-22.23 49.73-43.64C303.3 327.5 320.6 336 340 336c8.326 0 16.31-1.51 23.69-4.27C376 344.2 393.1 352 412 352c.1992 0 10.08-.4453 18.65-2.92C423.9 413.5 369.9 464 303.8 464zM432 283.8C432 294.9 423 304 412 304c-11.02 0-20-9.078-20-20.25v-55.5C392 217.1 400.1 208 412 208c11.02 0 20 9.078 20 20.25V283.8z\"],\n    \"hand-point-down\": [448, 512, [], \"f0a7\", \"M448 248V144C448 64.6 385.1 0 307.7 0H199.8C176.4 0 153.1 6.104 132.5 17.65L76.63 49C49.1 64.47 32 94.02 32 126.1V176c0 27.23 12.51 51.53 32 67.69V440C64 479.7 96.3 512 136 512s72-32.3 72-72v-56.44C210.6 383.9 213.3 384 216 384c25.95 0 48.73-13.79 61.4-34.43C283.3 351.2 289.6 352 296 352c25.95 0 48.73-13.79 61.4-34.43C363.3 319.2 369.6 320 376 320C415.7 320 448 287.7 448 248zM272 232c0-13.23 10.78-24 24-24S320 218.9 320 232.1V280c0 13.23-10.78 24-24 24S272 293.2 272 280V232zM192 264h12c12.39 0 23.93-3.264 34.27-8.545C239.3 258.1 240 260.1 240 264v48c0 13.23-10.78 24-24 24S192 325.2 192 312V264zM112 264c0-.2813 .1504-.5137 .1602-.793C114.8 263.4 117.3 264 120 264H160v176c0 13.23-10.78 24-24 24S112 453.2 112 440V264zM397.9 123.8C390.9 121.6 383.7 120 376 120c-29.04 0-53.96 17.37-65.34 42.18C305.8 161.2 301 160 296 160c-7.139 0-13.96 1.273-20.46 3.355C265.2 133.6 237.2 112 204 112H152C138.8 112 128 122.8 128 136S138.8 160 152 160h52c15.44 0 28 12.56 28 28S219.4 216 204 216H120C97.94 216 80 198.1 80 176V126.1c0-14.77 7.719-28.28 20.16-35.27l55.78-31.34C169.4 51.98 184.6 48 199.8 48h107.9C351.9 48 388.9 80.56 397.9 123.8zM400 248c0 13.23-10.78 24-24 24S352 261.2 352 248V192c0-13.23 10.78-24 24-24S400 178.8 400 192V248z\"],\n    \"hand-point-left\": [512, 512, [], \"f0a5\", \"M264 480h104c79.4 0 144-62.95 144-140.3V231.8c0-23.44-6.104-46.73-17.65-67.35L462.1 108.6C447.5 81.1 417.1 64 385.9 64H336c-27.23 0-51.53 12.51-67.69 32H72C32.3 96 0 128.3 0 168S32.3 240 72 240h56.44C128.1 242.6 128 245.3 128 248c0 25.95 13.79 48.73 34.43 61.4C160.8 315.3 160 321.6 160 328c0 25.95 13.79 48.73 34.43 61.4C192.8 395.3 192 401.6 192 408C192 447.7 224.3 480 264 480zM280 304c13.23 0 24 10.78 24 24S293.1 352 279.9 352H232c-13.23 0-24-10.78-24-24S218.8 304 232 304H280zM248 224v12c0 12.39 3.264 23.93 8.545 34.27C253.9 271.3 251 272 248 272h-48C186.8 272 176 261.2 176 248S186.8 224 200 224H248zM248 144c.2813 0 .5137 .1504 .793 .1602C248.6 146.8 248 149.3 248 152V192h-176C58.77 192 48 181.2 48 168S58.77 144 72 144H248zM388.2 429.9C390.4 422.9 392 415.7 392 408c0-29.04-17.37-53.96-42.18-65.34C350.8 337.8 352 333 352 328c0-7.139-1.273-13.96-3.355-20.46C378.4 297.2 400 269.2 400 236V184C400 170.8 389.3 160 376 160S352 170.8 352 184v52c0 15.44-12.56 28-28 28S296 251.4 296 236V152c0-22.06 17.94-40 40-40h49.88c14.77 0 28.28 7.719 35.27 20.16l31.34 55.78C460 201.4 464 216.6 464 231.8v107.9C464 383.9 431.4 420.9 388.2 429.9zM264 432c-13.23 0-24-10.78-24-24S250.8 384 264 384H320c13.23 0 24 10.78 24 24S333.2 432 320 432H264z\"],\n    \"hand-point-right\": [512, 512, [], \"f0a4\", \"M320 408c0-6.428-.8457-12.66-2.434-18.6C338.2 376.7 352 353.9 352 328c0-6.428-.8457-12.66-2.434-18.6C370.2 296.7 384 273.9 384 248c0-2.705-.1484-5.373-.4414-8H440C479.7 240 512 207.7 512 168S479.7 96 440 96H243.7C227.5 76.51 203.2 64 176 64H126.1C94.02 64 64.47 81.1 49 108.6L17.65 164.5C6.104 185.1 0 208.4 0 231.8v107.9C0 417.1 64.6 480 144 480h104C287.7 480 320 447.7 320 408zM280 304c13.23 0 24 10.78 24 24S293.2 352 280 352H232.1C218.9 352 208 341.2 208 328S218.8 304 232 304H280zM312 224c13.23 0 24 10.78 24 24S325.2 272 312 272h-48c-3.029 0-5.875-.7012-8.545-1.73C260.7 259.9 264 248.4 264 236V224H312zM440 144c13.23 0 24 10.78 24 24S453.2 192 440 192h-176V152c0-2.686-.5566-5.217-.793-7.84C263.5 144.2 263.7 144 264 144H440zM48 339.7V231.8c0-15.25 3.984-30.41 11.52-43.88l31.34-55.78C97.84 119.7 111.4 112 126.1 112H176c22.06 0 40 17.94 40 40v84c0 15.44-12.56 28-28 28S160 251.4 160 236V184C160 170.8 149.3 160 136 160S112 170.8 112 184v52c0 33.23 21.58 61.25 51.36 71.54C161.3 314 160 320.9 160 328c0 5.041 1.166 9.836 2.178 14.66C137.4 354 120 378.1 120 408c0 7.684 1.557 14.94 3.836 21.87C80.56 420.9 48 383.9 48 339.7zM192 432c-13.23 0-24-10.78-24-24S178.8 384 192 384h56c13.23 0 24 10.78 24 24s-10.77 24-24 24H192z\"],\n    \"hand-point-up\": [448, 512, [9757], \"f0a6\", \"M376 192c-6.428 0-12.66 .8457-18.6 2.434C344.7 173.8 321.9 160 296 160c-6.428 0-12.66 .8457-18.6 2.434C264.7 141.8 241.9 128 216 128C213.3 128 210.6 128.1 208 128.4V72C208 32.3 175.7 0 136 0S64 32.3 64 72v196.3C44.51 284.5 32 308.8 32 336v49.88c0 32.1 17.1 61.65 44.63 77.12l55.83 31.35C153.1 505.9 176.4 512 199.8 512h107.9C385.1 512 448 447.4 448 368V264C448 224.3 415.7 192 376 192zM272 232c0-13.23 10.78-24 24-24S320 218.8 320 232v47.91C320 293.1 309.2 304 296 304S272 293.2 272 280V232zM192 200C192 186.8 202.8 176 216 176s24 10.77 24 24v48c0 3.029-.7012 5.875-1.73 8.545C227.9 251.3 216.4 248 204 248H192V200zM112 72c0-13.23 10.78-24 24-24S160 58.77 160 72v176H120c-2.686 0-5.217 .5566-7.84 .793C112.2 248.5 112 248.3 112 248V72zM307.7 464H199.8c-15.25 0-30.41-3.984-43.88-11.52l-55.78-31.34C87.72 414.2 80 400.6 80 385.9V336c0-22.06 17.94-40 40-40h84c15.44 0 28 12.56 28 28S219.4 352 204 352H152C138.8 352 128 362.8 128 376s10.75 24 24 24h52c33.23 0 61.25-21.58 71.54-51.36C282 350.7 288.9 352 296 352c5.041 0 9.836-1.166 14.66-2.178C322 374.6 346.1 392 376 392c7.684 0 14.94-1.557 21.87-3.836C388.9 431.4 351.9 464 307.7 464zM400 320c0 13.23-10.78 24-24 24S352 333.2 352 320V264c0-13.23 10.78-24 24-24s24 10.77 24 24V320z\"],\n    \"hand-pointer\": [448, 512, [], \"f25a\", \"M208 288C199.2 288 192 295.2 192 304v96C192 408.8 199.2 416 208 416s16-7.164 16-16v-96C224 295.2 216.8 288 208 288zM272 288C263.2 288 256 295.2 256 304v96c0 8.836 7.162 16 15.1 16S288 408.8 288 400l-.0013-96C287.1 295.2 280.8 288 272 288zM376.9 201.2c-13.74-17.12-34.8-27.45-56.92-27.45h-13.72c-3.713 0-7.412 .291-11.07 .8652C282.7 165.1 267.4 160 251.4 160h-11.44V72c0-39.7-32.31-72-72.01-72c-39.7 0-71.98 32.3-71.98 72v168.5C84.85 235.1 75.19 235.4 69.83 235.4c-44.35 0-69.83 37.23-69.83 69.85c0 14.99 4.821 29.51 13.99 41.69l78.14 104.2C120.7 489.3 166.2 512 213.7 512h109.7c6.309 0 12.83-.957 18.14-2.645c28.59-5.447 53.87-19.41 73.17-40.44C436.1 446.3 448 416.2 448 384.2V274.3C448 234.6 416.3 202.3 376.9 201.2zM400 384.2c0 19.62-7.219 38.06-20.44 52.06c-12.53 13.66-29.03 22.67-49.69 26.56C327.4 463.6 325.3 464 323.4 464H213.7c-32.56 0-63.65-15.55-83.18-41.59L52.36 318.2C49.52 314.4 48.02 309.8 48.02 305.2c0-16.32 14.5-21.75 21.72-21.75c4.454 0 12.01 1.55 17.34 8.703l28.12 37.5c3.093 4.105 7.865 6.419 12.8 6.419c11.94 0 16.01-10.7 16.01-16.01V72c0-13.23 10.78-24 23.1-24c13.22 0 24 10.77 24 24v130.7c0 6.938 5.451 16.01 16.03 16.01C219.5 218.7 220.1 208 237.7 208h13.72c21.5 0 18.56 19.21 34.7 19.21c8.063 0 9.805-5.487 20.15-5.487h13.72c26.96 0 17.37 27.43 40.77 27.43l14.07-.0037c13.88 0 25.16 11.28 25.16 25.14V384.2zM336 288C327.2 288 320 295.2 320 304v96c0 8.836 7.164 16 16 16s16-7.164 16-16v-96C352 295.2 344.8 288 336 288z\"],\n    \"hand-scissors\": [512, 512, [], \"f257\", \"M270.1 480h97.92C447.4 480 512 417.1 512 339.7V231.8c0-23.45-6.106-46.73-17.66-67.33l-31.35-55.85C447.5 81.1 417.1 64 385.9 64h-46.97c-26.63 0-51.56 11.63-68.4 31.93l-15.46 18.71L127.3 68.44C119 65.46 110.5 64.05 102.1 64.05c-30.02 0-58.37 18.06-69.41 47.09C15.06 156.8 46.19 194 76.75 204.9l2.146 .7637L68.79 206.4C30.21 209 0 241.2 0 279.3c0 39.7 33.27 72.09 73.92 72.09c1.745 0 3.501-.0605 5.268-.1833l88.79-6.135v8.141c0 22.11 10.55 43.11 28.05 56.74C197.4 448.8 230.2 480 270.1 480zM269.1 432c-14.34 0-26-11.03-26-24.62c0 0 .0403-14.31 .0403-14.71c0-6.894-4.102-14.2-10.67-16.39c-10.39-3.5-17.38-12.78-17.38-23.06v-13.53c0-16.98 13.7-16.4 13.7-29.89c0-9.083-7.392-15.96-15.96-15.96c-.3646 0-.7311 .0125-1.099 .0377c0 0-138.1 9.505-138.7 9.505c-14.32 0-25.93-11.04-25.93-24.49c0-13.28 10.7-23.74 24.1-24.64l163.2-11.28c2.674-.1882 14.92-2.907 14.92-16.18c0-6.675-4.284-12.58-10.65-14.85L92.84 159.7C85.39 156.1 75.97 149.4 75.97 136.7c0-11.14 9.249-24.66 25.97-24.66c3.043 0 6.141 .5115 9.166 1.59l234.1 85.03c1.801 .6581 3.644 .9701 5.456 .9701c8.96 0 16-7.376 16-15.1c0-6.514-4.068-12.69-10.59-15.04l-64.81-23.47l15.34-18.56C315.2 117.3 326.6 112 338.9 112h46.97c14.77 0 28.28 7.719 35.27 20.16L452.5 188c7.531 13.41 11.52 28.56 11.52 43.81v107.9c0 50.91-43.06 92.31-96 92.31H269.1z\"],\n    \"hand-spock\": [576, 512, [128406], \"f259\", \"M234.9 48.02c10.43 0 20.72 5.834 24.13 19.17l47.33 184.1c2.142 8.456 9.174 12.62 16.21 12.62c7.326 0 14.66-4.505 16.51-13.37l31.72-155.1c2.921-14.09 13.76-20.57 24.67-20.57c13.01 0 26.14 9.19 26.14 25.62c0 2.19-.2333 4.508-.7313 6.951l-28.48 139.2c-.2389 1.156-.3514 2.265-.3514 3.323c0 8.644 7.504 13.9 14.86 13.9c5.869 0 11.65-3.341 13.46-10.98l24.73-104.2c.2347-.9802 4.12-19.76 24.28-19.76c13.21 0 26.64 9.4 26.64 24.79c0 2.168-.2665 4.455-.8378 6.852l-48.06 204.7c-13.59 57.85-65.15 98.74-124.5 98.74l-48.79-.0234c-40.7-.0196-79.86-15.58-109.5-43.51l-75.93-71.55c-5.938-5.584-8.419-11.1-8.419-18.2c0-13.88 12.45-26.69 26.38-26.69c5.756 0 11.76 2.182 17.26 7.376l51.08 48.14c1.682 1.569 3.599 2.249 5.448 2.249c4.192 0 8.04-3.49 8.04-8.001c0-23.76-3.372-47.39-10.12-70.28L142 161.1C141.2 159.1 140.8 156.3 140.8 153.7c0-15.23 13.48-24.82 26.75-24.82c10.11 0 20.1 5.559 23.94 18.42l31.22 105.8c2.231 7.546 8.029 10.8 13.9 10.8c7.752 0 15.64-5.659 15.64-14.57c0-1.339-.1783-2.752-.562-4.23L209.3 80.06C208.7 77.45 208.3 74.97 208.3 72.62C208.3 57.33 221.7 48.02 234.9 48.02zM234.9 0C201.5 0 160.4 25.24 160.4 72.72c0 2.807 .1579 5.632 .4761 8.463C129.9 83.9 92.84 108.9 92.84 153.8c0 7.175 1.038 14.47 3.148 21.68l24.33 81.94C115.8 256.5 111.1 256 106.4 256C65.74 256 32 290.6 32 330.8c0 19.59 8.162 38.58 23.6 53.1l75.89 71.51c38.68 36.45 89.23 56.53 142.3 56.56L322.6 512c82.1 0 152.5-55.83 171.3-135.8l48.06-204.7C543.3 165.7 544 159.7 544 153.9c0-54.55-49.55-72.95-74.59-72.95c-.7689 0-1.534 .0117-2.297 .0352c-10.49-39.43-46.46-54.11-71.62-54.11c-34.1 0-64.45 24.19-71.63 58.83L319.2 108.5l-13.7-53.29C297.1 22.22 268.7 0 234.9 0z\"],\n    \"handshake\": [640, 512, [], \"f2b5\", \"M506.1 127.1c-17.97-20.17-61.46-61.65-122.7-71.1c-22.5-3.354-45.39 3.606-63.41 18.21C302 60.47 279.1 53.42 256.5 56.86C176.8 69.17 126.7 136.2 124.6 139.1c-7.844 10.69-5.531 25.72 5.125 33.57c4.281 3.157 9.281 4.657 14.19 4.657c7.406 0 14.69-3.375 19.38-9.782c.4062-.5626 40.19-53.91 100.5-63.23c7.457-.9611 14.98 .67 21.56 4.483L227.2 168.2C214.8 180.5 207.1 196.1 207.1 214.5c0 17.5 6.812 33.94 19.16 46.29C239.5 273.2 255.9 279.1 273.4 279.1s33.94-6.813 46.31-19.19l11.35-11.35l124.2 100.9c2.312 1.875 2.656 5.251 .5 7.97l-27.69 35.75c-1.844 2.25-5.25 2.594-7.156 1.063l-22.22-18.69l-26.19 27.75c-2.344 2.875-5.344 3.563-6.906 3.719c-1.656 .1562-4.562 .125-6.812-1.719l-32.41-27.66L310.7 392.3l-2.812 2.938c-5.844 7.157-14.09 11.66-23.28 12.6c-9.469 .8126-18.25-1.75-24.5-6.782L170.3 319.8H96V128.3L0 128.3v255.6l64 .0404c11.74 0 21.57-6.706 27.14-16.14h60.64l77.06 69.66C243.7 449.6 261.9 456 280.8 456c2.875 0 5.781-.125 8.656-.4376c13.62-1.406 26.41-6.063 37.47-13.5l.9062 .8126c12.03 9.876 27.28 14.41 42.69 12.78c13.19-1.375 25.28-7.032 33.91-15.35c21.09 8.188 46.09 2.344 61.25-16.47l27.69-35.75c18.47-22.82 14.97-56.48-7.844-75.01l-120.3-97.76l8.381-8.382c9.375-9.376 9.375-24.57 0-33.94c-9.375-9.376-24.56-9.376-33.94 0L285.8 226.8C279.2 233.5 267.7 233.5 261.1 226.8c-3.312-3.282-5.125-7.657-5.125-12.31c0-4.688 1.812-9.064 5.281-12.53l85.91-87.64c7.812-7.845 18.53-11.75 28.94-10.03c59.75 9.22 100.2 62.73 100.6 63.29c3.088 4.155 7.264 6.946 11.84 8.376H544v175.1c0 17.67 14.33 32.05 31.1 32.05L640 384V128.1L506.1 127.1zM48 352c-8.75 0-16-7.245-16-15.99c0-8.876 7.25-15.99 16-15.99S64 327.2 64 336.1C64 344.8 56.75 352 48 352zM592 352c-8.75 0-16-7.245-16-15.99c0-8.876 7.25-15.99 16-15.99s16 7.117 16 15.99C608 344.8 600.8 352 592 352z\"],\n    \"hard-drive\": [512, 512, [128436, \"hdd\"], \"f0a0\", \"M304 344c-13.25 0-24 10.74-24 24c0 13.25 10.75 24 24 24c13.26 0 24-10.75 24-24C328 354.7 317.3 344 304 344zM448 32h-384c-35.35 0-64 28.65-64 64v320c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V96C512 60.65 483.3 32 448 32zM464 416c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16v-96c0-8.822 7.178-16 16-16h384C456.8 304 464 311.2 464 320V416zM464 258.3C458.9 256.9 453.6 256 448 256H64C58.44 256 53.14 256.9 48 258.3V96c0-8.822 7.178-16 16-16h384c8.822 0 16 7.178 16 16V258.3zM400 344c-13.25 0-24 10.74-24 24c0 13.25 10.75 24 24 24c13.26 0 24-10.75 24-24C424 354.7 413.3 344 400 344z\"],\n    \"heart\": [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 10084, 61578, 9829], \"f004\", \"M244 84L255.1 96L267.1 84.02C300.6 51.37 347 36.51 392.6 44.1C461.5 55.58 512 115.2 512 185.1V190.9C512 232.4 494.8 272.1 464.4 300.4L283.7 469.1C276.2 476.1 266.3 480 256 480C245.7 480 235.8 476.1 228.3 469.1L47.59 300.4C17.23 272.1 0 232.4 0 190.9V185.1C0 115.2 50.52 55.58 119.4 44.1C164.1 36.51 211.4 51.37 244 84C243.1 84 244 84.01 244 84L244 84zM255.1 163.9L210.1 117.1C188.4 96.28 157.6 86.4 127.3 91.44C81.55 99.07 48 138.7 48 185.1V190.9C48 219.1 59.71 246.1 80.34 265.3L256 429.3L431.7 265.3C452.3 246.1 464 219.1 464 190.9V185.1C464 138.7 430.4 99.07 384.7 91.44C354.4 86.4 323.6 96.28 301.9 117.1L255.1 163.9z\"],\n    \"hospital\": [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M296 96C296 87.16 303.2 80 312 80H328C336.8 80 344 87.16 344 96V120H368C376.8 120 384 127.2 384 136V152C384 160.8 376.8 168 368 168H344V192C344 200.8 336.8 208 328 208H312C303.2 208 296 200.8 296 192V168H272C263.2 168 256 160.8 256 152V136C256 127.2 263.2 120 272 120H296V96zM408 0C447.8 0 480 32.24 480 72V80H568C607.8 80 640 112.2 640 152V440C640 479.8 607.8 512 568 512H71.98C32.19 512 0 479.8 0 440V152C0 112.2 32.24 80 72 80H160V72C160 32.24 192.2 0 232 0L408 0zM480 128V464H568C581.3 464 592 453.3 592 440V336H536C522.7 336 512 325.3 512 312C512 298.7 522.7 288 536 288H592V240H536C522.7 240 512 229.3 512 216C512 202.7 522.7 192 536 192H592V152C592 138.7 581.3 128 568 128H480zM48 152V192H104C117.3 192 128 202.7 128 216C128 229.3 117.3 240 104 240H48V288H104C117.3 288 128 298.7 128 312C128 325.3 117.3 336 104 336H48V440C48 453.3 58.74 464 71.98 464H160V128H72C58.75 128 48 138.7 48 152V152zM208 464H272V400C272 373.5 293.5 352 320 352C346.5 352 368 373.5 368 400V464H432V72C432 58.75 421.3 48 408 48H232C218.7 48 208 58.75 208 72V464z\"],\n    \"hourglass\": [384, 512, [62032, 9203, \"hourglass-2\", \"hourglass-half\"], \"f254\", \"M0 24C0 10.75 10.75 0 24 0H360C373.3 0 384 10.75 384 24C384 37.25 373.3 48 360 48H352V66.98C352 107.3 335.1 145.1 307.5 174.5L225.9 256L307.5 337.5C335.1 366 352 404.7 352 445V464H360C373.3 464 384 474.7 384 488C384 501.3 373.3 512 360 512H24C10.75 512 0 501.3 0 488C0 474.7 10.75 464 24 464H32V445C32 404.7 48.01 366 76.52 337.5L158.1 256L76.52 174.5C48.01 145.1 32 107.3 32 66.98V48H24C10.75 48 0 37.25 0 24V24zM99.78 384H284.2C281 379.6 277.4 375.4 273.5 371.5L192 289.9L110.5 371.5C106.6 375.4 102.1 379.6 99.78 384H99.78zM284.2 128C296.1 110.4 304 89.03 304 66.98V48H80V66.98C80 89.03 87 110.4 99.78 128H284.2z\"],\n    \"id-badge\": [384, 512, [], \"f2c1\", \"M320 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h256c35.35 0 64-28.65 64-64V64C384 28.65 355.3 0 320 0zM336 448c0 8.836-7.164 16-16 16H64c-8.836 0-16-7.164-16-16V64c0-8.838 7.164-16 16-16h64V64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V48h64c8.836 0 16 7.162 16 16V448zM192 288c35.35 0 64-28.65 64-64s-28.65-64-64-64C156.7 160 128 188.7 128 224S156.7 288 192 288zM224 320H160c-44.18 0-80 35.82-80 80C80 408.8 87.16 416 96 416h192c8.836 0 16-7.164 16-16C304 355.8 268.2 320 224 320z\"],\n    \"id-card\": [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M368 344h96c13.25 0 24-10.75 24-24s-10.75-24-24-24h-96c-13.25 0-24 10.75-24 24S354.8 344 368 344zM208 320c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64s-64 28.65-64 64C144 291.3 172.7 320 208 320zM512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM528 416c0 8.822-7.178 16-16 16h-192c0-44.18-35.82-80-80-80h-64C131.8 352 96 387.8 96 432H64c-8.822 0-16-7.178-16-16V160h480V416zM368 264h96c13.25 0 24-10.75 24-24s-10.75-24-24-24h-96c-13.25 0-24 10.75-24 24S354.8 264 368 264z\"],\n    \"image\": [512, 512, [], \"f03e\", \"M152 120c-26.51 0-48 21.49-48 48s21.49 48 48 48s48-21.49 48-48S178.5 120 152 120zM447.1 32h-384C28.65 32-.0091 60.65-.0091 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96C511.1 60.65 483.3 32 447.1 32zM463.1 409.3l-136.8-185.9C323.8 218.8 318.1 216 312 216c-6.113 0-11.82 2.768-15.21 7.379l-106.6 144.1l-37.09-46.1c-3.441-4.279-8.934-6.809-14.77-6.809c-5.842 0-11.33 2.529-14.78 6.809l-75.52 93.81c0-.0293 0 .0293 0 0L47.99 96c0-8.822 7.178-16 16-16h384c8.822 0 16 7.178 16 16V409.3z\"],\n    \"images\": [576, 512, [], \"f302\", \"M512 32H160c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64H512c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM528 320c0 8.822-7.178 16-16 16h-16l-109.3-160.9C383.7 170.7 378.7 168 373.3 168c-5.352 0-10.35 2.672-13.31 7.125l-62.74 94.11L274.9 238.6C271.9 234.4 267.1 232 262 232c-5.109 0-9.914 2.441-12.93 6.574L176 336H160c-8.822 0-16-7.178-16-16V96c0-8.822 7.178-16 16-16H512c8.822 0 16 7.178 16 16V320zM224 112c-17.67 0-32 14.33-32 32s14.33 32 32 32c17.68 0 32-14.33 32-32S241.7 112 224 112zM456 480H120C53.83 480 0 426.2 0 360v-240C0 106.8 10.75 96 24 96S48 106.8 48 120v240c0 39.7 32.3 72 72 72h336c13.25 0 24 10.75 24 24S469.3 480 456 480z\"],\n    \"keyboard\": [576, 512, [9000], \"f11c\", \"M512 64H64C28.65 64 0 92.65 0 128v256c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V128C576 92.65 547.3 64 512 64zM528 384c0 8.822-7.178 16-16 16H64c-8.822 0-16-7.178-16-16V128c0-8.822 7.178-16 16-16h448c8.822 0 16 7.178 16 16V384zM140 152h-24c-6.656 0-12 5.344-12 12v24c0 6.656 5.344 12 12 12h24c6.656 0 12-5.344 12-12v-24C152 157.3 146.7 152 140 152zM196 200h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C184 194.7 189.3 200 196 200zM276 200h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C264 194.7 269.3 200 276 200zM356 200h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C344 194.7 349.3 200 356 200zM460 152h-24c-6.656 0-12 5.344-12 12v24c0 6.656 5.344 12 12 12h24c6.656 0 12-5.344 12-12v-24C472 157.3 466.7 152 460 152zM140 232h-24c-6.656 0-12 5.344-12 12v24c0 6.656 5.344 12 12 12h24c6.656 0 12-5.344 12-12v-24C152 237.3 146.7 232 140 232zM196 280h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C184 274.7 189.3 280 196 280zM276 280h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C264 274.7 269.3 280 276 280zM356 280h24c6.656 0 12-5.344 12-12v-24c0-6.656-5.344-12-12-12h-24c-6.656 0-12 5.344-12 12v24C344 274.7 349.3 280 356 280zM460 232h-24c-6.656 0-12 5.344-12 12v24c0 6.656 5.344 12 12 12h24c6.656 0 12-5.344 12-12v-24C472 237.3 466.7 232 460 232zM400 320h-224C167.1 320 160 327.1 160 336V352c0 8.875 7.125 16 16 16h224c8.875 0 16-7.125 16-16v-16C416 327.1 408.9 320 400 320z\"],\n    \"lemon\": [448, 512, [127819], \"f094\", \"M439.9 144.6c15.34-26.38 8.372-62.41-16.96-87.62c-25.21-25.32-61.22-32.26-87.61-16.95c-9.044 5.218-27.15 3.702-48.08 1.968c-50.78-4.327-127.4-10.73-207.6 69.56C-.6501 191.9 5.801 268.5 10.07 319.3c1.749 20.96 3.28 39.07-1.984 48.08c-15.35 26.4-8.357 62.45 16.92 87.57c16.26 16.37 37.05 25.09 56.83 25.09c10.89 0 21.46-2.64 30.83-8.092c9.013-5.249 27.12-3.718 48.08-1.968c50.69 4.233 127.4 10.7 207.6-69.56c80.27-80.28 73.82-156.9 69.56-207.7C436.2 171.8 434.7 153.7 439.9 144.6zM398.4 120.5c-12.87 22.09-10.67 48.41-8.326 76.25c4.155 49.3 8.841 105.2-55.67 169.7c-64.53 64.49-120.5 59.78-169.7 55.68c-27.85-2.328-54.12-4.53-76.26 8.311c-6.139 3.64-19.17 1.031-29.58-9.451c-10.39-10.33-12.95-23.35-9.372-29.49c12.87-22.09 10.67-48.41 8.326-76.25C53.72 265.1 49.04 210.1 113.5 145.5c48.27-48.27 91.71-57.8 131.2-57.8c13.28 0 26.12 1.078 38.52 2.125c27.9 2.359 54.17 4.561 76.26-8.311c6.123-3.577 19.18-1.031 29.49 9.357C399.4 101.2 402 114.4 398.4 120.5zM239.5 124.1c2.156 8.561-3.062 17.25-11.62 19.43C183.6 154.7 122.7 215.6 111.6 259.9C109.7 267.1 103.2 271.1 96.05 271.1c-1.281 0-2.593-.1562-3.905-.4687C83.58 269.3 78.4 260.6 80.52 252.1C94.67 195.8 163.8 126.7 220.1 112.5C228.8 110.4 237.3 115.5 239.5 124.1z\"],\n    \"life-ring\": [512, 512, [], \"f1cd\", \"M464.1 431C474.3 440.4 474.3 455.6 464.1 464.1C455.6 474.3 440.4 474.3 431 464.1L419.3 453.2C374.9 489.9 318.1 512 256 512C193.9 512 137.1 489.9 92.74 453.2L80.97 464.1C71.6 474.3 56.4 474.3 47.03 464.1C37.66 455.6 37.66 440.4 47.03 431L58.8 419.3C22.08 374.9 0 318.1 0 256C0 193.9 22.08 137.1 58.8 92.74L47.03 80.97C37.66 71.6 37.66 56.4 47.03 47.03C56.4 37.66 71.6 37.66 80.97 47.03L92.74 58.8C137.1 22.08 193.9 0 256 0C318.1 0 374.9 22.08 419.3 58.8L431 47.03C440.4 37.66 455.6 37.66 464.1 47.03C474.3 56.4 474.3 71.6 464.1 80.97L453.2 92.74C489.9 137.1 512 193.9 512 256C512 318.1 489.9 374.9 453.2 419.3L464.1 431zM304.8 338.7C290.5 347.2 273.8 352 256 352C238.2 352 221.5 347.2 207.2 338.7L126.9 419.1C162.3 447.2 207.2 464 256 464C304.8 464 349.7 447.2 385.1 419.1L304.8 338.7zM464 256C464 207.2 447.2 162.3 419.1 126.9L338.7 207.2C347.2 221.5 352 238.2 352 256C352 273.8 347.2 290.5 338.7 304.8L419.1 385.1C447.2 349.7 464 304.8 464 256V256zM256 48C207.2 48 162.3 64.8 126.9 92.93L207.2 173.3C221.5 164.8 238.2 160 256 160C273.8 160 290.5 164.8 304.8 173.3L385.1 92.93C349.7 64.8 304.8 48 256 48V48zM173.3 304.8C164.8 290.5 160 273.8 160 256C160 238.2 164.8 221.5 173.3 207.2L92.93 126.9C64.8 162.3 48 207.2 48 256C48 304.8 64.8 349.7 92.93 385.1L173.3 304.8zM256 208C229.5 208 208 229.5 208 256C208 282.5 229.5 304 256 304C282.5 304 304 282.5 304 256C304 229.5 282.5 208 256 208z\"],\n    \"lightbulb\": [384, 512, [128161], \"f0eb\", \"M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z\"],\n    \"map\": [576, 512, [62072, 128506], \"f279\", \"M565.6 36.24C572.1 40.72 576 48.11 576 56V392C576 401.1 569.8 410.9 560.5 414.4L392.5 478.4C387.4 480.4 381.7 480.5 376.4 478.8L192.5 417.5L32.54 478.4C25.17 481.2 16.88 480.2 10.38 475.8C3.882 471.3 0 463.9 0 456V120C0 110 6.15 101.1 15.46 97.57L183.5 33.57C188.6 31.6 194.3 31.48 199.6 33.23L383.5 94.52L543.5 33.57C550.8 30.76 559.1 31.76 565.6 36.24H565.6zM48 421.2L168 375.5V90.83L48 136.5V421.2zM360 137.3L216 89.3V374.7L360 422.7V137.3zM408 421.2L528 375.5V90.83L408 136.5V421.2z\"],\n    \"message\": [512, 512, [\"comment-alt\"], \"f27a\", \"M447.1 0h-384c-35.25 0-64 28.75-64 63.1v287.1c0 35.25 28.75 63.1 64 63.1h96v83.98c0 9.836 11.02 15.55 19.12 9.7l124.9-93.68h144c35.25 0 64-28.75 64-63.1V63.1C511.1 28.75 483.2 0 447.1 0zM464 352c0 8.75-7.25 16-16 16h-160l-80 60v-60H64c-8.75 0-16-7.25-16-16V64c0-8.75 7.25-16 16-16h384c8.75 0 16 7.25 16 16V352z\"],\n    \"money-bill-1\": [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M400 256C400 317.9 349.9 368 288 368C226.1 368 176 317.9 176 256C176 194.1 226.1 144 288 144C349.9 144 400 194.1 400 256zM272 224V288H264C255.2 288 248 295.2 248 304C248 312.8 255.2 320 264 320H312C320.8 320 328 312.8 328 304C328 295.2 320.8 288 312 288H304V208C304 199.2 296.8 192 288 192H272C263.2 192 256 199.2 256 208C256 216.8 263.2 224 272 224zM0 128C0 92.65 28.65 64 64 64H512C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128zM48 176V336C83.35 336 112 364.7 112 400H464C464 364.7 492.7 336 528 336V176C492.7 176 464 147.3 464 112H112C112 147.3 83.35 176 48 176z\"],\n    \"moon\": [512, 512, [127769, 9214], \"f186\", \"M421.6 379.9c-.6641 0-1.35 .0625-2.049 .1953c-11.24 2.143-22.37 3.17-33.32 3.17c-94.81 0-174.1-77.14-174.1-175.5c0-63.19 33.79-121.3 88.73-152.6c8.467-4.812 6.339-17.66-3.279-19.44c-11.2-2.078-29.53-3.746-40.9-3.746C132.3 31.1 32 132.2 32 256c0 123.6 100.1 224 223.8 224c69.04 0 132.1-31.45 173.8-82.93C435.3 389.1 429.1 379.9 421.6 379.9zM255.8 432C158.9 432 80 353 80 256c0-76.32 48.77-141.4 116.7-165.8C175.2 125 163.2 165.6 163.2 207.8c0 99.44 65.13 183.9 154.9 212.8C298.5 428.1 277.4 432 255.8 432z\"],\n    \"newspaper\": [512, 512, [128240], \"f1ea\", \"M456 32h-304C121.1 32 96 57.13 96 88v320c0 13.22-10.77 24-24 24S48 421.2 48 408V112c0-13.25-10.75-24-24-24S0 98.75 0 112v296C0 447.7 32.3 480 72 480h352c48.53 0 88-39.47 88-88v-304C512 57.13 486.9 32 456 32zM464 392c0 22.06-17.94 40-40 40H139.9C142.5 424.5 144 416.4 144 408v-320c0-4.406 3.594-8 8-8h304c4.406 0 8 3.594 8 8V392zM264 272h-64C186.8 272 176 282.8 176 296S186.8 320 200 320h64C277.3 320 288 309.3 288 296S277.3 272 264 272zM408 272h-64C330.8 272 320 282.8 320 296S330.8 320 344 320h64c13.25 0 24-10.75 24-24S421.3 272 408 272zM264 352h-64c-13.25 0-24 10.75-24 24s10.75 24 24 24h64c13.25 0 24-10.75 24-24S277.3 352 264 352zM408 352h-64C330.8 352 320 362.8 320 376s10.75 24 24 24h64c13.25 0 24-10.75 24-24S421.3 352 408 352zM400 112h-192c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64C432 126.3 417.7 112 400 112z\"],\n    \"note-sticky\": [448, 512, [62026, \"sticky-note\"], \"f249\", \"M384 32H64.01C28.66 32 .0085 60.65 .0065 96L0 415.1C-.002 451.3 28.65 480 64 480h232.1c25.46 0 49.88-10.12 67.89-28.12l55.88-55.89C437.9 377.1 448 353.6 448 328.1V96C448 60.8 419.2 32 384 32zM52.69 427.3C50.94 425.6 48 421.8 48 416l.0195-319.1C48.02 87.18 55.2 80 64.02 80H384c8.674 0 16 7.328 16 16v192h-88C281.1 288 256 313.1 256 344v88H64C58.23 432 54.44 429.1 52.69 427.3zM330.1 417.9C322.9 425.1 313.8 429.6 304 431.2V344c0-4.406 3.594-8 8-8h87.23c-1.617 9.812-6.115 18.88-13.29 26.05L330.1 417.9z\"],\n    \"object-group\": [576, 512, [], \"f247\", \"M128 160C128 142.3 142.3 128 160 128H288C305.7 128 320 142.3 320 160V256C320 273.7 305.7 288 288 288H160C142.3 288 128 273.7 128 256V160zM288 320C323.3 320 352 291.3 352 256V224H416C433.7 224 448 238.3 448 256V352C448 369.7 433.7 384 416 384H288C270.3 384 256 369.7 256 352V320H288zM48 115.8C38.18 106.1 32 94.22 32 80C32 53.49 53.49 32 80 32C94.22 32 106.1 38.18 115.8 48H460.2C469 38.18 481.8 32 496 32C522.5 32 544 53.49 544 80C544 94.22 537.8 106.1 528 115.8V396.2C537.8 405 544 417.8 544 432C544 458.5 522.5 480 496 480C481.8 480 469 473.8 460.2 464H115.8C106.1 473.8 94.22 480 80 480C53.49 480 32 458.5 32 432C32 417.8 38.18 405 48 396.2V115.8zM96 125.3V386.7C109.6 391.6 120.4 402.4 125.3 416H450.7C455.6 402.4 466.4 391.6 480 386.7V125.3C466.4 120.4 455.6 109.6 450.7 96H125.3C120.4 109.6 109.6 120.4 96 125.3z\"],\n    \"object-ungroup\": [640, 512, [], \"f248\", \"M64 0C90.86 0 113.9 16.55 123.3 40H324.7C334.1 16.55 357.1 0 384 0C419.3 0 448 28.65 448 64C448 90.86 431.5 113.9 408 123.3V228.7C431.5 238.1 448 261.1 448 288C448 323.3 419.3 352 384 352C357.1 352 334.1 335.5 324.7 312H123.3C113.9 335.5 90.86 352 64 352C28.65 352 0 323.3 0 288C0 261.1 16.55 238.1 40 228.7V123.3C16.55 113.9 0 90.86 0 64C0 28.65 28.65 0 64 0V0zM64 80C72.84 80 80 72.84 80 64C80 56.1 74.28 49.54 66.75 48.24C65.86 48.08 64.94 48 64 48C55.16 48 48 55.16 48 64C48 64.07 48 64.14 48 64.21C48.01 65.07 48.09 65.92 48.24 66.75C49.54 74.28 56.1 80 64 80zM384 48C383.1 48 382.1 48.08 381.2 48.24C373.7 49.54 368 56.1 368 64C368 72.84 375.2 80 384 80C391.9 80 398.5 74.28 399.8 66.75C399.9 65.86 400 64.94 400 64C400 55.16 392.8 48 384 48V48zM324.7 88H123.3C116.9 104 104 116.9 88 123.3V228.7C104 235.1 116.9 247.1 123.3 264H324.7C331.1 247.1 343.1 235.1 360 228.7V123.3C343.1 116.9 331.1 104 324.7 88zM400 288C400 287.1 399.9 286.1 399.8 285.2C398.5 277.7 391.9 272 384 272C375.2 272 368 279.2 368 288C368 295.9 373.7 302.5 381.2 303.8C382.1 303.9 383.1 304 384 304C392.8 304 400 296.8 400 288zM64 272C56.1 272 49.54 277.7 48.24 285.2C48.08 286.1 48 287.1 48 288C48 296.8 55.16 304 64 304L64.22 303.1C65.08 303.1 65.93 303.9 66.75 303.8C74.28 302.5 80 295.9 80 288C80 279.2 72.84 272 64 272zM471.3 248C465.8 235.9 457.8 225.2 448 216.4V200H516.7C526.1 176.5 549.1 160 576 160C611.3 160 640 188.7 640 224C640 250.9 623.5 273.9 600 283.3V388.7C623.5 398.1 640 421.1 640 448C640 483.3 611.3 512 576 512C549.1 512 526.1 495.5 516.7 472H315.3C305.9 495.5 282.9 512 256 512C220.7 512 192 483.3 192 448C192 421.1 208.5 398.1 232 388.7V352H280V388.7C296 395.1 308.9 407.1 315.3 424H516.7C523.1 407.1 535.1 395.1 552 388.7V283.3C535.1 276.9 523.1 264 516.7 248H471.3zM592 224C592 215.2 584.8 208 576 208C575.1 208 574.1 208.1 573.2 208.2C565.7 209.5 560 216.1 560 224C560 232.8 567.2 240 576 240C583.9 240 590.5 234.3 591.8 226.8C591.9 225.9 592 224.9 592 224zM240 448C240 456.8 247.2 464 256 464C256.9 464 257.9 463.9 258.8 463.8C266.3 462.5 272 455.9 272 448C272 439.2 264.8 432 256 432C248.1 432 241.5 437.7 240.2 445.2C240.1 446.1 240 447.1 240 448zM573.2 463.8C574.1 463.9 575.1 464 576 464C584.8 464 592 456.8 592 448C592 447.1 591.9 446.2 591.8 445.3L591.8 445.2C590.5 437.7 583.9 432 576 432C567.2 432 560 439.2 560 448C560 455.9 565.7 462.5 573.2 463.8V463.8z\"],\n    \"paper-plane\": [512, 512, [61913], \"f1d8\", \"M501.6 4.186c-7.594-5.156-17.41-5.594-25.44-1.063L12.12 267.1C4.184 271.7-.5037 280.3 .0431 289.4c.5469 9.125 6.234 17.16 14.66 20.69l153.3 64.38v113.5c0 8.781 4.797 16.84 12.5 21.06C184.1 511 188 512 191.1 512c4.516 0 9.038-1.281 12.99-3.812l111.2-71.46l98.56 41.4c2.984 1.25 6.141 1.875 9.297 1.875c4.078 0 8.141-1.031 11.78-3.094c6.453-3.625 10.88-10.06 11.95-17.38l64-432C513.1 18.44 509.1 9.373 501.6 4.186zM369.3 119.2l-187.1 208.9L78.23 284.7L369.3 119.2zM215.1 444v-49.36l46.45 19.51L215.1 444zM404.8 421.9l-176.6-74.19l224.6-249.5L404.8 421.9z\"],\n    \"paste\": [512, 512, [\"file-clipboard\"], \"f0ea\", \"M502.6 198.6l-61.25-61.25C435.4 131.4 427.3 128 418.8 128H256C220.7 128 191.1 156.7 192 192l.0065 255.1C192 483.3 220.7 512 256 512h192c35.2 0 64-28.8 64-64l.0098-226.7C512 212.8 508.6 204.6 502.6 198.6zM464 448c0 8.836-7.164 16-16 16h-192c-8.838 0-16-7.164-16-16L240 192.1c0-8.836 7.164-16 16-16h128L384 224c0 17.67 14.33 32 32 32h48.01V448zM317.7 96C310.6 68.45 285.8 48 256 48H215.2C211.3 20.93 188.1 0 160 0C131.9 0 108.7 20.93 104.8 48H64c-35.35 0-64 28.65-64 64V384c0 35.34 28.65 64 64 64h96v-48H64c-8.836 0-16-7.164-16-16V112C48 103.2 55.18 96 64 96h16v16c0 17.67 14.33 32 32 32h61.35C190 115.4 220.6 96 256 96H317.7zM160 72c-8.822 0-16-7.176-16-16s7.178-16 16-16s16 7.176 16 16S168.8 72 160 72z\"],\n    \"pen-to-square\": [512, 512, [\"edit\"], \"f044\", \"M373.1 24.97C401.2-3.147 446.8-3.147 474.9 24.97L487 37.09C515.1 65.21 515.1 110.8 487 138.9L289.8 336.2C281.1 344.8 270.4 351.1 258.6 354.5L158.6 383.1C150.2 385.5 141.2 383.1 135 376.1C128.9 370.8 126.5 361.8 128.9 353.4L157.5 253.4C160.9 241.6 167.2 230.9 175.8 222.2L373.1 24.97zM440.1 58.91C431.6 49.54 416.4 49.54 407 58.91L377.9 88L424 134.1L453.1 104.1C462.5 95.6 462.5 80.4 453.1 71.03L440.1 58.91zM203.7 266.6L186.9 325.1L245.4 308.3C249.4 307.2 252.9 305.1 255.8 302.2L390.1 168L344 121.9L209.8 256.2C206.9 259.1 204.8 262.6 203.7 266.6zM200 64C213.3 64 224 74.75 224 88C224 101.3 213.3 112 200 112H88C65.91 112 48 129.9 48 152V424C48 446.1 65.91 464 88 464H360C382.1 464 400 446.1 400 424V312C400 298.7 410.7 288 424 288C437.3 288 448 298.7 448 312V424C448 472.6 408.6 512 360 512H88C39.4 512 0 472.6 0 424V152C0 103.4 39.4 64 88 64H200z\"],\n    \"rectangle-list\": [576, 512, [\"list-alt\"], \"f022\", \"M128 192C110.3 192 96 177.7 96 160C96 142.3 110.3 128 128 128C145.7 128 160 142.3 160 160C160 177.7 145.7 192 128 192zM200 160C200 146.7 210.7 136 224 136H448C461.3 136 472 146.7 472 160C472 173.3 461.3 184 448 184H224C210.7 184 200 173.3 200 160zM200 256C200 242.7 210.7 232 224 232H448C461.3 232 472 242.7 472 256C472 269.3 461.3 280 448 280H224C210.7 280 200 269.3 200 256zM200 352C200 338.7 210.7 328 224 328H448C461.3 328 472 338.7 472 352C472 365.3 461.3 376 448 376H224C210.7 376 200 365.3 200 352zM128 224C145.7 224 160 238.3 160 256C160 273.7 145.7 288 128 288C110.3 288 96 273.7 96 256C96 238.3 110.3 224 128 224zM128 384C110.3 384 96 369.7 96 352C96 334.3 110.3 320 128 320C145.7 320 160 334.3 160 352C160 369.7 145.7 384 128 384zM0 96C0 60.65 28.65 32 64 32H512C547.3 32 576 60.65 576 96V416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H512C520.8 432 528 424.8 528 416V96C528 87.16 520.8 80 512 80H64C55.16 80 48 87.16 48 96z\"],\n    \"rectangle-xmark\": [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M175 175C184.4 165.7 199.6 165.7 208.1 175L255.1 222.1L303 175C312.4 165.7 327.6 165.7 336.1 175C346.3 184.4 346.3 199.6 336.1 208.1L289.9 255.1L336.1 303C346.3 312.4 346.3 327.6 336.1 336.1C327.6 346.3 312.4 346.3 303 336.1L255.1 289.9L208.1 336.1C199.6 346.3 184.4 346.3 175 336.1C165.7 327.6 165.7 312.4 175 303L222.1 255.1L175 208.1C165.7 199.6 165.7 184.4 175 175V175zM0 96C0 60.65 28.65 32 64 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H448C456.8 432 464 424.8 464 416V96C464 87.16 456.8 80 448 80H64C55.16 80 48 87.16 48 96z\"],\n    \"registered\": [512, 512, [174], \"f25d\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464zM352 208c0-44.13-35.88-80-80-80L184 128c-13.25 0-24 10.75-24 24v208c0 13.25 10.75 24 24 24s24-10.75 24-24v-72h59.79l38.46 82.19C310.3 378.9 319 384 328 384c3.438 0 6.875-.7187 10.19-2.25c12-5.625 17.16-19.91 11.56-31.94l-34.87-74.5C337.1 261.1 352 236.3 352 208zM272 240h-64v-64h64c17.66 0 32 14.34 32 32S289.7 240 272 240z\"],\n    \"share-from-square\": [576, 512, [61509, \"share-square\"], \"f14d\", \"M568.5 142.6l-144-135.1c-9.625-9.156-24.81-8.656-33.91 .9687c-9.125 9.625-8.688 24.81 .9687 33.91l100.1 94.56h-163.4C287.5 134.2 249.7 151 221 179.4C192 208.2 176 246.7 176 288v87.1c0 13.25 10.75 23.1 24 23.1S224 389.3 224 376V288c0-28.37 10.94-54.84 30.78-74.5C274.3 194.2 298.9 183 328 184h163.6l-100.1 94.56c-9.656 9.094-10.09 24.28-.9687 33.91c4.719 4.1 11.06 7.531 17.44 7.531c5.906 0 11.84-2.156 16.47-6.562l144-135.1C573.3 172.9 576 166.6 576 160S573.3 147.1 568.5 142.6zM360 384c-13.25 0-24 10.75-24 23.1v47.1c0 4.406-3.594 7.1-8 7.1h-272c-4.406 0-8-3.594-8-7.1V184c0-4.406 3.594-7.1 8-7.1H112c13.25 0 24-10.75 24-23.1s-10.75-23.1-24-23.1H56c-30.88 0-56 25.12-56 55.1v271.1C0 486.9 25.13 512 56 512h272c30.88 0 56-25.12 56-55.1v-47.1C384 394.8 373.3 384 360 384z\"],\n    \"snowflake\": [512, 512, [10054, 10052], \"f2dc\", \"M484.4 294.4c1.715 6.402 .6758 12.89-2.395 18.21s-8.172 9.463-14.57 11.18l-31.46 8.43l32.96 19.03C480.4 357.8 484.4 372.5 477.8 384s-21.38 15.41-32.86 8.783l-32.96-19.03l8.43 31.46c3.432 12.81-4.162 25.96-16.97 29.39s-25.96-4.162-29.39-16.97l-20.85-77.82L280 297.6v84.49l56.97 56.97c9.375 9.375 9.375 24.56 0 33.94C332.3 477.7 326.1 480 320 480s-12.28-2.344-16.97-7.031L280 449.9V488c0 13.25-10.75 24-24 24s-24-10.75-24-24v-38.06l-23.03 23.03c-9.375 9.375-24.56 9.375-33.94 0s-9.375-24.56 0-33.94L232 382.1V297.6l-73.17 42.25l-20.85 77.82c-3.432 12.81-16.58 20.4-29.39 16.97s-20.4-16.58-16.97-29.39l8.43-31.46l-32.96 19.03C55.61 399.4 40.85 395.5 34.22 384s-2.615-26.16 8.859-32.79l32.96-19.03l-31.46-8.43c-12.81-3.432-20.4-16.58-16.97-29.39s16.58-20.4 29.39-16.97l77.82 20.85L208 255.1L134.8 213.8L57.01 234.6C44.2 238 31.05 230.4 27.62 217.6s4.162-25.96 16.97-29.39l31.46-8.432L43.08 160.8C31.61 154.2 27.6 139.5 34.22 128s21.38-15.41 32.86-8.785l32.96 19.03L91.62 106.8C88.18 93.98 95.78 80.83 108.6 77.39s25.96 4.162 29.39 16.97l20.85 77.82L232 214.4V129.9L175 72.97c-9.375-9.375-9.375-24.56 0-33.94s24.56-9.375 33.94 0L232 62.06V24C232 10.75 242.8 0 256 0s24 10.75 24 24v38.06l23.03-23.03c9.375-9.375 24.56-9.375 33.94 0s9.375 24.56 0 33.94L280 129.9v84.49l73.17-42.25l20.85-77.82c3.432-12.81 16.58-20.4 29.39-16.97c6.402 1.715 11.5 5.861 14.57 11.18s4.109 11.81 2.395 18.21l-8.43 31.46l32.96-19.03C456.4 112.6 471.2 116.5 477.8 128s2.615 26.16-8.859 32.78l-32.96 19.03l31.46 8.432c12.81 3.432 20.4 16.58 16.97 29.39s-16.58 20.4-29.39 16.97l-77.82-20.85L304 255.1l73.17 42.25l77.82-20.85C467.8 273.1 480.1 281.6 484.4 294.4z\"],\n    \"square\": [448, 512, [9723, 9724, 61590, 9632], \"f0c8\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM384 80H64C55.16 80 48 87.16 48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80z\"],\n    \"square-caret-down\": [448, 512, [\"caret-square-down\"], \"f150\", \"M320 192H128C118.5 192 109.8 197.7 105.1 206.4C102.2 215.1 103.9 225.3 110.4 232.3l96 104C210.9 341.2 217.3 344 224 344s13.09-2.812 17.62-7.719l96-104c6.469-7 8.188-17.19 4.375-25.91C338.2 197.7 329.5 192 320 192zM384 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM400 416c0 8.82-7.178 16-16 16H64c-8.822 0-16-7.18-16-16V96c0-8.82 7.178-16 16-16h320c8.822 0 16 7.18 16 16V416z\"],\n    \"square-caret-left\": [448, 512, [\"caret-square-left\"], \"f191\", \"M384 32H64C28.66 32 0 60.66 0 96v320c0 35.34 28.66 64 64 64h320c35.34 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM400 416c0 8.82-7.18 16-16 16H64c-8.82 0-16-7.18-16-16V96c0-8.82 7.18-16 16-16h320c8.82 0 16 7.18 16 16V416zM273.6 138c-8.719-3.812-18.91-2.094-25.91 4.375l-104 96C138.8 242.9 136 249.3 136 256s2.812 13.09 7.719 17.62l104 96c7 6.469 17.19 8.188 25.91 4.375C282.3 370.2 288 361.5 288 352V160C288 150.5 282.3 141.8 273.6 138z\"],\n    \"square-caret-right\": [448, 512, [\"caret-square-right\"], \"f152\", \"M200.3 142.4C193.3 135.9 183.1 134.2 174.4 138C165.7 141.8 160 150.5 160 159.1v192C160 361.5 165.7 370.2 174.4 374c8.719 3.812 18.91 2.094 25.91-4.375l104-96C309.2 269.1 312 262.7 312 256s-2.812-13.09-7.719-17.62L200.3 142.4zM384 32H64C28.66 32 0 60.66 0 96v320c0 35.34 28.66 64 64 64h320c35.34 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM400 416c0 8.82-7.18 16-16 16H64c-8.82 0-16-7.18-16-16V96c0-8.82 7.18-16 16-16h320c8.82 0 16 7.18 16 16V416z\"],\n    \"square-caret-up\": [448, 512, [\"caret-square-up\"], \"f151\", \"M241.6 175.7C237.1 170.8 230.7 168 224 168S210.9 170.8 206.4 175.7l-96 104c-6.469 7-8.188 17.19-4.375 25.91C109.8 314.3 118.5 320 127.1 320h192c9.531 0 18.16-5.656 22-14.38c3.813-8.719 2.094-18.91-4.375-25.91L241.6 175.7zM384 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM400 416c0 8.82-7.178 16-16 16H64c-8.822 0-16-7.18-16-16V96c0-8.82 7.178-16 16-16h320c8.822 0 16 7.18 16 16V416z\"],\n    \"square-check\": [448, 512, [9989, 61510, 9745, \"check-square\"], \"f14a\", \"M211.8 339.8C200.9 350.7 183.1 350.7 172.2 339.8L108.2 275.8C97.27 264.9 97.27 247.1 108.2 236.2C119.1 225.3 136.9 225.3 147.8 236.2L192 280.4L300.2 172.2C311.1 161.3 328.9 161.3 339.8 172.2C350.7 183.1 350.7 200.9 339.8 211.8L211.8 339.8zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z\"],\n    \"square-full\": [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11036, 11035], \"f45c\", \"M512 0V512H0V0H512zM464 48H48V464H464V48z\"],\n    \"square-minus\": [448, 512, [61767, \"minus-square\"], \"f146\", \"M312 232C325.3 232 336 242.7 336 256C336 269.3 325.3 280 312 280H136C122.7 280 112 269.3 112 256C112 242.7 122.7 232 136 232H312zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z\"],\n    \"square-plus\": [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M200 344V280H136C122.7 280 112 269.3 112 256C112 242.7 122.7 232 136 232H200V168C200 154.7 210.7 144 224 144C237.3 144 248 154.7 248 168V232H312C325.3 232 336 242.7 336 256C336 269.3 325.3 280 312 280H248V344C248 357.3 237.3 368 224 368C210.7 368 200 357.3 200 344zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z\"],\n    \"star\": [576, 512, [61446, 11088], \"f005\", \"M287.9 0C297.1 0 305.5 5.25 309.5 13.52L378.1 154.8L531.4 177.5C540.4 178.8 547.8 185.1 550.7 193.7C553.5 202.4 551.2 211.9 544.8 218.2L433.6 328.4L459.9 483.9C461.4 492.9 457.7 502.1 450.2 507.4C442.8 512.7 432.1 513.4 424.9 509.1L287.9 435.9L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.9 115.1 483.9L142.2 328.4L31.11 218.2C24.65 211.9 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C270.4 5.249 278.7 0 287.9 0L287.9 0zM287.9 78.95L235.4 187.2C231.9 194.3 225.1 199.3 217.3 200.5L98.98 217.9L184.9 303C190.4 308.5 192.9 316.4 191.6 324.1L171.4 443.7L276.6 387.5C283.7 383.7 292.2 383.7 299.2 387.5L404.4 443.7L384.2 324.1C382.9 316.4 385.5 308.5 391 303L476.9 217.9L358.6 200.5C350.7 199.3 343.9 194.3 340.5 187.2L287.9 78.95z\"],\n    \"star-half\": [576, 512, [61731], \"f089\", \"M293.3 .6123C304.2 3.118 311.9 12.82 311.9 24V408.7C311.9 417.5 307.1 425.7 299.2 429.8L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.1 115.1 483.9L142.2 328.4L31.11 218.3C24.65 211.9 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C271.2 3.46 282.4-1.893 293.3 .6127L293.3 .6123zM263.9 128.4L235.4 187.2C231.9 194.3 225.1 199.3 217.3 200.5L98.98 217.9L184.9 303C190.4 308.5 192.9 316.4 191.6 324.1L171.4 443.7L263.9 394.3L263.9 128.4z\"],\n    \"star-half-stroke\": [576, 512, [\"star-half-alt\"], \"f5c0\", \"M378.1 154.8L531.4 177.5C540.4 178.8 547.8 185.1 550.7 193.7C553.5 202.4 551.2 211.9 544.8 218.2L433.6 328.4L459.9 483.9C461.4 492.9 457.7 502.1 450.2 507.4C442.8 512.7 432.1 513.4 424.9 509.1L287.9 435.9L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.9 115.1 483.9L142.2 328.4L31.11 218.2C24.65 211.9 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C270.4 5.249 278.7 0 287.9 0C297.1 0 305.5 5.25 309.5 13.52L378.1 154.8zM287.1 384.7C291.9 384.7 295.7 385.6 299.2 387.5L404.4 443.7L384.2 324.1C382.9 316.4 385.5 308.5 391 303L476.9 217.9L358.6 200.5C350.7 199.3 343.9 194.3 340.5 187.2L287.1 79.09L287.1 384.7z\"],\n    \"sun\": [512, 512, [9728], \"f185\", \"M505.2 324.8l-47.73-68.78l47.75-68.81c7.359-10.62 8.797-24.12 3.844-36.06c-4.969-11.94-15.52-20.44-28.22-22.72l-82.39-14.88l-14.89-82.41c-2.281-12.72-10.76-23.25-22.69-28.22c-11.97-4.936-25.42-3.498-36.12 3.844L256 54.49L187.2 6.709C176.5-.6016 163.1-2.039 151.1 2.896c-11.92 4.971-20.4 15.5-22.7 28.19l-14.89 82.44L31.15 128.4C18.42 130.7 7.854 139.2 2.9 151.2C-2.051 163.1-.5996 176.6 6.775 187.2l47.73 68.78l-47.75 68.81c-7.359 10.62-8.795 24.12-3.844 36.06c4.969 11.94 15.52 20.44 28.22 22.72l82.39 14.88l14.89 82.41c2.297 12.72 10.78 23.25 22.7 28.22c11.95 4.906 25.44 3.531 36.09-3.844L256 457.5l68.83 47.78C331.3 509.7 338.8 512 346.3 512c4.906 0 9.859-.9687 14.56-2.906c11.92-4.969 20.4-15.5 22.7-28.19l14.89-82.44l82.37-14.88c12.73-2.281 23.3-10.78 28.25-22.75C514.1 348.9 512.6 335.4 505.2 324.8zM456.8 339.2l-99.61 18l-18 99.63L256 399.1L172.8 456.8l-18-99.63l-99.61-18L112.9 255.1L55.23 172.8l99.61-18l18-99.63L256 112.9l83.15-57.75l18.02 99.66l99.61 18L399.1 255.1L456.8 339.2zM256 143.1c-61.85 0-111.1 50.14-111.1 111.1c0 61.85 50.15 111.1 111.1 111.1s111.1-50.14 111.1-111.1C367.1 194.1 317.8 143.1 256 143.1zM256 319.1c-35.28 0-63.99-28.71-63.99-63.99S220.7 192 256 192s63.99 28.71 63.99 63.1S291.3 319.1 256 319.1z\"],\n    \"thumbs-down\": [512, 512, [61576, 128078], \"f165\", \"M128 288V64.03c0-17.67-14.33-31.1-32-31.1H32c-17.67 0-32 14.33-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64C113.7 320 128 305.7 128 288zM481.5 229.1c1.234-5.092 1.875-10.32 1.875-15.64c0-22.7-11.44-43.13-29.28-55.28c.4219-3.015 .6406-6.076 .6406-9.122c0-22.32-11.06-42.6-28.83-54.83c-2.438-34.71-31.47-62.2-66.8-62.2h-52.53c-35.94 0-71.55 11.87-100.3 33.41L169.6 92.93c-6.285 4.71-9.596 11.85-9.596 19.13c0 12.76 10.29 24.04 24.03 24.04c5.013 0 10.07-1.565 14.38-4.811l36.66-27.51c20.48-15.34 45.88-23.81 71.5-23.81h52.53c10.45 0 18.97 8.497 18.97 18.95c0 3.5-1.11 4.94-1.11 9.456c0 26.97 29.77 17.91 29.77 40.64c0 9.254-6.392 10.96-6.392 22.25c0 13.97 10.85 21.95 19.58 23.59c8.953 1.671 15.45 9.481 15.45 18.56c0 13.04-11.39 13.37-11.39 28.91c0 12.54 9.702 23.08 22.36 23.94C456.2 266.1 464 275.2 464 284.1c0 10.43-8.516 18.93-18.97 18.93H307.4c-12.44 0-24 10.02-24 23.1c0 4.038 1.02 8.078 3.066 11.72C304.4 371.7 312 403.8 312 411.2c0 8.044-5.984 20.79-22.06 20.79c-12.53 0-14.27-.9059-24.94-28.07c-24.75-62.91-61.74-99.9-80.98-99.9c-13.8 0-24.02 11.27-24.02 23.99c0 7.041 3.083 14.02 9.016 18.76C238.1 402 211.4 480 289.9 480C333.8 480 360 445 360 411.2c0-12.7-5.328-35.21-14.83-59.33h99.86C481.1 351.9 512 321.9 512 284.1C512 261.8 499.9 241 481.5 229.1z\"],\n    \"thumbs-up\": [512, 512, [61575, 128077], \"f164\", \"M96 191.1H32c-17.67 0-32 14.33-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64c17.67 0 32-14.33 32-31.1V223.1C128 206.3 113.7 191.1 96 191.1zM512 227c0-36.89-30.05-66.92-66.97-66.92h-99.86C354.7 135.1 360 113.5 360 100.8c0-33.8-26.2-68.78-70.06-68.78c-46.61 0-59.36 32.44-69.61 58.5c-31.66 80.5-60.33 66.39-60.33 93.47c0 12.84 10.36 23.99 24.02 23.99c5.256 0 10.55-1.721 14.97-5.26c76.76-61.37 57.97-122.7 90.95-122.7c16.08 0 22.06 12.75 22.06 20.79c0 7.404-7.594 39.55-25.55 71.59c-2.046 3.646-3.066 7.686-3.066 11.72c0 13.92 11.43 23.1 24 23.1h137.6C455.5 208.1 464 216.6 464 227c0 9.809-7.766 18.03-17.67 18.71c-12.66 .8593-22.36 11.4-22.36 23.94c0 15.47 11.39 15.95 11.39 28.91c0 25.37-35.03 12.34-35.03 42.15c0 11.22 6.392 13.03 6.392 22.25c0 22.66-29.77 13.76-29.77 40.64c0 4.515 1.11 5.961 1.11 9.456c0 10.45-8.516 18.95-18.97 18.95h-52.53c-25.62 0-51.02-8.466-71.5-23.81l-36.66-27.51c-4.315-3.245-9.37-4.811-14.38-4.811c-13.85 0-24.03 11.38-24.03 24.04c0 7.287 3.312 14.42 9.596 19.13l36.67 27.52C235 468.1 270.6 480 306.6 480h52.53c35.33 0 64.36-27.49 66.8-62.2c17.77-12.23 28.83-32.51 28.83-54.83c0-3.046-.2187-6.107-.6406-9.122c17.84-12.15 29.28-32.58 29.28-55.28c0-5.311-.6406-10.54-1.875-15.64C499.9 270.1 512 250.2 512 227z\"],\n    \"trash-can\": [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M160 400C160 408.8 152.8 416 144 416C135.2 416 128 408.8 128 400V192C128 183.2 135.2 176 144 176C152.8 176 160 183.2 160 192V400zM240 400C240 408.8 232.8 416 224 416C215.2 416 208 408.8 208 400V192C208 183.2 215.2 176 224 176C232.8 176 240 183.2 240 192V400zM320 400C320 408.8 312.8 416 304 416C295.2 416 288 408.8 288 400V192C288 183.2 295.2 176 304 176C312.8 176 320 183.2 320 192V400zM317.5 24.94L354.2 80H424C437.3 80 448 90.75 448 104C448 117.3 437.3 128 424 128H416V432C416 476.2 380.2 512 336 512H112C67.82 512 32 476.2 32 432V128H24C10.75 128 0 117.3 0 104C0 90.75 10.75 80 24 80H93.82L130.5 24.94C140.9 9.357 158.4 0 177.1 0H270.9C289.6 0 307.1 9.358 317.5 24.94H317.5zM151.5 80H296.5L277.5 51.56C276 49.34 273.5 48 270.9 48H177.1C174.5 48 171.1 49.34 170.5 51.56L151.5 80zM80 432C80 449.7 94.33 464 112 464H336C353.7 464 368 449.7 368 432V128H80V432z\"],\n    \"user\": [448, 512, [62144, 128100], \"f007\", \"M272 304h-96C78.8 304 0 382.8 0 480c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32C448 382.8 369.2 304 272 304zM48.99 464C56.89 400.9 110.8 352 176 352h96c65.16 0 119.1 48.95 127 112H48.99zM224 256c70.69 0 128-57.31 128-128c0-70.69-57.31-128-128-128S96 57.31 96 128C96 198.7 153.3 256 224 256zM224 48c44.11 0 80 35.89 80 80c0 44.11-35.89 80-80 80S144 172.1 144 128C144 83.89 179.9 48 224 48z\"],\n    \"window-maximize\": [512, 512, [128470], \"f2d0\", \"M7.724 65.49C13.36 55.11 21.79 46.47 32 40.56C39.63 36.15 48.25 33.26 57.46 32.33C59.61 32.11 61.79 32 64 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 93.79 .112 91.61 .3306 89.46C1.204 80.85 3.784 72.75 7.724 65.49V65.49zM48 416C48 424.8 55.16 432 64 432H448C456.8 432 464 424.8 464 416V224H48V416z\"],\n    \"window-minimize\": [512, 512, [128469], \"f2d1\", \"M0 456C0 442.7 10.75 432 24 432H488C501.3 432 512 442.7 512 456C512 469.3 501.3 480 488 480H24C10.75 480 0 469.3 0 456z\"],\n    \"window-restore\": [512, 512, [], \"f2d2\", \"M432 48H208C190.3 48 176 62.33 176 80V96H128V80C128 35.82 163.8 0 208 0H432C476.2 0 512 35.82 512 80V304C512 348.2 476.2 384 432 384H416V336H432C449.7 336 464 321.7 464 304V80C464 62.33 449.7 48 432 48zM320 128C355.3 128 384 156.7 384 192V448C384 483.3 355.3 512 320 512H64C28.65 512 0 483.3 0 448V192C0 156.7 28.65 128 64 128H320zM64 464H320C328.8 464 336 456.8 336 448V256H48V448C48 456.8 55.16 464 64 464z\"]\n  };\n\n  bunker(function () {\n    defineIcons('far', icons);\n    defineIcons('fa-regular', icons);\n  });\n\n}());\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/js/solid.js",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n(function () {\n  'use strict';\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var PRODUCTION = function () {\n    try {\n      return \"production\" === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  function normalizeIcons(icons) {\n    return Object.keys(icons).reduce(function (acc, iconName) {\n      var icon = icons[iconName];\n      var expanded = !!icon.icon;\n\n      if (expanded) {\n        acc[icon.iconName] = icon.icon;\n      } else {\n        acc[iconName] = icon;\n      }\n\n      return acc;\n    }, {});\n  }\n\n  function defineIcons(prefix, icons) {\n    var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _params$skipHooks = params.skipHooks,\n        skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n    var normalized = normalizeIcons(icons);\n\n    if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n      namespace.hooks.addPack(prefix, normalizeIcons(icons));\n    } else {\n      namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n    }\n    /**\n     * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n     * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n     * for `fas` so we'll ease the upgrade process for our users by automatically defining\n     * this as well.\n     */\n\n\n    if (prefix === 'fas') {\n      defineIcons('fa', icons);\n    }\n  }\n\n  var icons = {\n    \"0\": [320, 512, [], \"30\", \"M160 32.01c-88.37 0-160 71.63-160 160v127.1c0 88.37 71.63 160 160 160s160-71.63 160-160V192C320 103.6 248.4 32.01 160 32.01zM256 320c0 52.93-43.06 96-96 96c-52.93 0-96-43.07-96-96V192c0-52.94 43.07-96 96-96c52.94 0 96 43.06 96 96V320z\"],\n    \"1\": [256, 512, [], \"31\", \"M256 448c0 17.67-14.33 32-32 32H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h64V123.8L49.75 154.6C35.02 164.5 15.19 160.4 5.375 145.8C-4.422 131.1-.4531 111.2 14.25 101.4l96-64c9.828-6.547 22.45-7.187 32.84-1.594C153.5 41.37 160 52.22 160 64.01v352h64C241.7 416 256 430.3 256 448z\"],\n    \"2\": [320, 512, [], \"32\", \"M320 448c0 17.67-14.33 32-32 32H32c-13.08 0-24.83-7.953-29.7-20.09c-4.859-12.12-1.859-26 7.594-35.03l193.6-185.1c31.36-30.17 33.95-80 5.812-113.4c-14.91-17.69-35.86-28.12-58.97-29.38C127.4 95.83 105.3 103.9 88.53 119.9L53.52 151.7c-13.08 11.91-33.33 10.89-45.2-2.172C-3.563 136.5-2.594 116.2 10.48 104.3l34.45-31.3c28.67-27.34 68.39-42.11 108.9-39.88c40.33 2.188 78.39 21.16 104.4 52.03c49.8 59.05 45.2 147.3-10.45 200.8l-136 130H288C305.7 416 320 430.3 320 448z\"],\n    \"3\": [320, 512, [], \"33\", \"M320 344c0 74.98-61.02 136-136 136H103.6c-46.34 0-87.31-29.53-101.1-73.48c-5.594-16.77 3.484-34.88 20.25-40.47c16.75-5.609 34.89 3.484 40.47 20.25c5.922 17.77 22.48 29.7 41.23 29.7H184c39.7 0 72-32.3 72-72s-32.3-72-72-72H80c-13.2 0-25.05-8.094-29.83-20.41C45.39 239.3 48.66 225.3 58.38 216.4l131.4-120.4H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h240c13.2 0 25.05 8.094 29.83 20.41c4.781 12.3 1.516 26.27-8.203 35.19l-131.4 120.4H184C258.1 208 320 269 320 344z\"],\n    \"4\": [384, 512, [], \"34\", \"M384 334.2c0 17.67-14.33 32-32 32h-32v81.78c0 17.67-14.33 32-32 32s-32-14.33-32-32v-81.78H32c-10.97 0-21.17-5.625-27.05-14.89c-5.859-9.266-6.562-20.89-1.875-30.81l128-270.2C138.6 34.33 157.8 27.56 173.7 35.09c15.97 7.562 22.78 26.66 15.22 42.63L82.56 302.2H256V160c0-17.67 14.33-32 32-32s32 14.33 32 32v142.2h32C369.7 302.2 384 316.6 384 334.2z\"],\n    \"5\": [320, 512, [], \"35\", \"M320 344.6c0 74.66-60.73 135.4-135.4 135.4H104.7c-46.81 0-88.22-29.83-103-74.23c-5.594-16.77 3.469-34.89 20.23-40.48c16.83-5.625 34.91 3.469 40.48 20.23c6.078 18.23 23.08 30.48 42.3 30.48h79.95c39.36 0 71.39-32.03 71.39-71.39s-32.03-71.38-71.39-71.38H32c-9.484 0-18.47-4.203-24.56-11.48C1.359 254.5-1.172 244.9 .5156 235.6l32-177.2C35.27 43.09 48.52 32.01 64 32.01l192 .0049c17.67 0 32 14.33 32 32s-14.33 32-32 32H90.73L70.3 209.2h114.3C259.3 209.2 320 269.1 320 344.6z\"],\n    \"6\": [320, 512, [], \"36\", \"M167.7 160.8l64.65-76.06c11.47-13.45 9.812-33.66-3.656-45.09C222.7 34.51 215.3 32.01 208 32.01c-9.062 0-18.06 3.833-24.38 11.29C38.07 214.5 0 245.5 0 320c0 88.22 71.78 160 160 160s160-71.78 160-160C320 234.4 252.3 164.9 167.7 160.8zM160 416c-52.94 0-96-43.06-96-96s43.06-95.1 96-95.1s96 43.06 96 95.1S212.9 416 160 416z\"],\n    \"7\": [320, 512, [], \"37\", \"M315.6 80.14l-224 384c-5.953 10.19-16.66 15.88-27.67 15.88c-5.469 0-11.02-1.406-16.09-4.359c-15.27-8.906-20.42-28.5-11.52-43.77l195.9-335.9H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h256c11.45 0 22.05 6.125 27.75 16.06S321.4 70.23 315.6 80.14z\"],\n    \"8\": [320, 512, [], \"38\", \"M267.5 249.2C290 226.1 304 194.7 304 160c0-70.58-57.42-128-128-128h-32c-70.58 0-128 57.42-128 128c0 34.7 13.99 66.12 36.48 89.19C20.83 272.5 0 309.8 0 352c0 70.58 57.42 128 128 128h64c70.58 0 128-57.42 128-128C320 309.8 299.2 272.5 267.5 249.2zM144 96.01h32c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32c-35.3 0-64-28.7-64-64S108.7 96.01 144 96.01zM192 416H128c-35.3 0-64-28.7-64-64s28.7-64 64-64h64c35.3 0 64 28.7 64 64S227.3 416 192 416z\"],\n    \"9\": [320, 512, [], \"39\", \"M160 32.01c-88.22 0-160 71.78-160 160c0 85.57 67.71 155.1 152.3 159.2l-64.65 76.06c-11.47 13.45-9.812 33.66 3.656 45.09c6 5.125 13.38 7.62 20.72 7.62c9.062 0 18.06-3.823 24.38-11.28C281.9 297.5 320 266.6 320 192C320 103.8 248.2 32.01 160 32.01zM160 288c-52.94 0-96-43.06-96-95.1s43.06-96 96-96s96 43.06 96 96S212.9 288 160 288z\"],\n    \"a\": [384, 512, [97], \"41\", \"M381.5 435.7l-160-384C216.6 39.78 204.9 32.01 192 32.01S167.4 39.78 162.5 51.7l-160 384c-6.797 16.31 .9062 35.05 17.22 41.84c16.38 6.828 35.08-.9219 41.84-17.22l31.8-76.31h197.3l31.8 76.31c5.109 12.28 17.02 19.7 29.55 19.7c4.094 0 8.266-.7969 12.3-2.484C380.6 470.7 388.3 452 381.5 435.7zM119.1 320L192 147.2l72 172.8H119.1z\"],\n    \"address-book\": [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M384 0H96C60.65 0 32 28.65 32 64v384c0 35.35 28.65 64 64 64h288c35.35 0 64-28.65 64-64V64C448 28.65 419.3 0 384 0zM240 128c35.35 0 64 28.65 64 64s-28.65 64-64 64c-35.34 0-64-28.65-64-64S204.7 128 240 128zM336 384h-192C135.2 384 128 376.8 128 368C128 323.8 163.8 288 208 288h64c44.18 0 80 35.82 80 80C352 376.8 344.8 384 336 384zM496 64H480v96h16C504.8 160 512 152.8 512 144v-64C512 71.16 504.8 64 496 64zM496 192H480v96h16C504.8 288 512 280.8 512 272v-64C512 199.2 504.8 192 496 192zM496 320H480v96h16c8.836 0 16-7.164 16-16v-64C512 327.2 504.8 320 496 320z\"],\n    \"address-card\": [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM176 128c35.35 0 64 28.65 64 64s-28.65 64-64 64s-64-28.65-64-64S140.7 128 176 128zM272 384h-192C71.16 384 64 376.8 64 368C64 323.8 99.82 288 144 288h64c44.18 0 80 35.82 80 80C288 376.8 280.8 384 272 384zM496 320h-128C359.2 320 352 312.8 352 304S359.2 288 368 288h128C504.8 288 512 295.2 512 304S504.8 320 496 320zM496 256h-128C359.2 256 352 248.8 352 240S359.2 224 368 224h128C504.8 224 512 231.2 512 240S504.8 256 496 256zM496 192h-128C359.2 192 352 184.8 352 176S359.2 160 368 160h128C504.8 160 512 167.2 512 176S504.8 192 496 192z\"],\n    \"align-center\": [448, 512, [], \"f037\", \"M320 96H128C110.3 96 96 81.67 96 64C96 46.33 110.3 32 128 32H320C337.7 32 352 46.33 352 64C352 81.67 337.7 96 320 96zM416 224H32C14.33 224 0 209.7 0 192C0 174.3 14.33 160 32 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224zM0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480H32C14.33 480 0 465.7 0 448zM320 352H128C110.3 352 96 337.7 96 320C96 302.3 110.3 288 128 288H320C337.7 288 352 302.3 352 320C352 337.7 337.7 352 320 352z\"],\n    \"align-justify\": [448, 512, [], \"f039\", \"M416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96zM416 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288H416C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352zM0 192C0 174.3 14.33 160 32 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H32C14.33 224 0 209.7 0 192zM416 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480z\"],\n    \"align-left\": [448, 512, [], \"f036\", \"M256 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H256C273.7 32 288 46.33 288 64C288 81.67 273.7 96 256 96zM256 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288H256C273.7 288 288 302.3 288 320C288 337.7 273.7 352 256 352zM0 192C0 174.3 14.33 160 32 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H32C14.33 224 0 209.7 0 192zM416 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480z\"],\n    \"align-right\": [448, 512, [], \"f038\", \"M416 96H192C174.3 96 160 81.67 160 64C160 46.33 174.3 32 192 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96zM416 352H192C174.3 352 160 337.7 160 320C160 302.3 174.3 288 192 288H416C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352zM0 192C0 174.3 14.33 160 32 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H32C14.33 224 0 209.7 0 192zM416 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480z\"],\n    \"anchor\": [576, 512, [9875], \"f13d\", \"M352 176C369.7 176 384 190.3 384 208C384 225.7 369.7 240 352 240H320V448H368C421 448 464 405 464 352V345.9L456.1 352.1C447.6 362.3 432.4 362.3 423 352.1C413.7 343.6 413.7 328.4 423 319L479 263C488.4 253.7 503.6 253.7 512.1 263L568.1 319C578.3 328.4 578.3 343.6 568.1 352.1C559.6 362.3 544.4 362.3 535 352.1L528 345.9V352C528 440.4 456.4 512 368 512H208C119.6 512 48 440.4 48 352V345.9L40.97 352.1C31.6 362.3 16.4 362.3 7.029 352.1C-2.343 343.6-2.343 328.4 7.029 319L63.03 263C72.4 253.7 87.6 253.7 96.97 263L152.1 319C162.3 328.4 162.3 343.6 152.1 352.1C143.6 362.3 128.4 362.3 119 352.1L112 345.9V352C112 405 154.1 448 208 448H256V240H224C206.3 240 192 225.7 192 208C192 190.3 206.3 176 224 176H234.9C209 158.8 192 129.4 192 96C192 42.98 234.1 0 288 0C341 0 384 42.98 384 96C384 129.4 366.1 158.8 341.1 176H352zM288 128C305.7 128 320 113.7 320 96C320 78.33 305.7 64 288 64C270.3 64 256 78.33 256 96C256 113.7 270.3 128 288 128z\"],\n    \"angle-down\": [384, 512, [8964], \"f107\", \"M192 384c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L192 306.8l137.4-137.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-160 160C208.4 380.9 200.2 384 192 384z\"],\n    \"angle-left\": [256, 512, [8249], \"f104\", \"M192 448c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l137.4 137.4c12.5 12.5 12.5 32.75 0 45.25C208.4 444.9 200.2 448 192 448z\"],\n    \"angle-right\": [256, 512, [8250], \"f105\", \"M64 448c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L178.8 256L41.38 118.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160c12.5 12.5 12.5 32.75 0 45.25l-160 160C80.38 444.9 72.19 448 64 448z\"],\n    \"angle-up\": [384, 512, [8963], \"f106\", \"M352 352c-8.188 0-16.38-3.125-22.62-9.375L192 205.3l-137.4 137.4c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0l160 160c12.5 12.5 12.5 32.75 0 45.25C368.4 348.9 360.2 352 352 352z\"],\n    \"angles-down\": [384, 512, [\"angle-double-down\"], \"f103\", \"M169.4 278.6C175.6 284.9 183.8 288 192 288s16.38-3.125 22.62-9.375l160-160c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0L192 210.8L54.63 73.38c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25L169.4 278.6zM329.4 265.4L192 402.8L54.63 265.4c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l160 160C175.6 476.9 183.8 480 192 480s16.38-3.125 22.62-9.375l160-160c12.5-12.5 12.5-32.75 0-45.25S341.9 252.9 329.4 265.4z\"],\n    \"angles-left\": [448, 512, [171, \"angle-double-left\"], \"f100\", \"M77.25 256l137.4-137.4c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0l-160 160c-12.5 12.5-12.5 32.75 0 45.25l160 160C175.6 444.9 183.8 448 192 448s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25L77.25 256zM269.3 256l137.4-137.4c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0l-160 160c-12.5 12.5-12.5 32.75 0 45.25l160 160C367.6 444.9 375.8 448 384 448s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25L269.3 256z\"],\n    \"angles-right\": [448, 512, [187, \"angle-double-right\"], \"f101\", \"M246.6 233.4l-160-160c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25L178.8 256l-137.4 137.4c-12.5 12.5-12.5 32.75 0 45.25C47.63 444.9 55.81 448 64 448s16.38-3.125 22.62-9.375l160-160C259.1 266.1 259.1 245.9 246.6 233.4zM438.6 233.4l-160-160c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25L370.8 256l-137.4 137.4c-12.5 12.5-12.5 32.75 0 45.25C239.6 444.9 247.8 448 256 448s16.38-3.125 22.62-9.375l160-160C451.1 266.1 451.1 245.9 438.6 233.4z\"],\n    \"angles-up\": [384, 512, [\"angle-double-up\"], \"f102\", \"M54.63 246.6L192 109.3l137.4 137.4C335.6 252.9 343.8 256 352 256s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25l-160-160c-12.5-12.5-32.75-12.5-45.25 0l-160 160c-12.5 12.5-12.5 32.75 0 45.25S42.13 259.1 54.63 246.6zM214.6 233.4c-12.5-12.5-32.75-12.5-45.25 0l-160 160c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0L192 301.3l137.4 137.4C335.6 444.9 343.8 448 352 448s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25L214.6 233.4z\"],\n    \"ankh\": [320, 512, [9765], \"f644\", \"M296 256h-44.63C272.5 222 288 181.6 288 144C288 55.62 230.8 0 160 0S32 55.62 32 144C32 181.6 47.5 222 68.63 256H24C10.75 256 0 266.8 0 280v32c0 13.25 10.75 24 24 24h96v152C120 501.2 130.8 512 144 512h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32C320 266.8 309.2 256 296 256zM160 80c29.62 0 48 24.5 48 64c0 34.62-27.12 78.12-48 100.9C139.1 222.1 112 178.6 112 144C112 104.5 130.4 80 160 80z\"],\n    \"apple-whole\": [448, 512, [127823, 127822, \"apple-alt\"], \"f5d1\", \"M336 128c-32 0-80.02 16.03-112 32.03c-32.01-16-79.1-32.02-111.1-32.03C32 128 .4134 210.5 .0033 288c-.5313 99.97 63.99 224 159.1 224c32 0 48-16 64-16c16 0 32 16 64 16c96 0 160.4-122.8 159.1-224C447.7 211.6 416 128 336 128zM320 32V0h-32C243.8 0 208 35.82 208 80v32h32C284.2 112 320 76.18 320 32z\"],\n    \"archway\": [512, 512, [], \"f557\", \"M480 32C497.7 32 512 46.33 512 64C512 81.67 497.7 96 480 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H480zM32 128H480V416C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H352V352C352 298.1 309 256 256 256C202.1 256 160 298.1 160 352V480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416V128z\"],\n    \"arrow-down\": [384, 512, [8595], \"f063\", \"M374.6 310.6l-160 160C208.4 476.9 200.2 480 192 480s-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 370.8V64c0-17.69 14.33-31.1 31.1-31.1S224 46.31 224 64v306.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0S387.1 298.1 374.6 310.6z\"],\n    \"arrow-down-1-9\": [512, 512, [\"sort-numeric-asc\", \"sort-numeric-down\"], \"f162\", \"M320 192c0 17.69 14.31 31.1 32 31.1L416 224c17.69 0 32-14.31 32-32s-14.31-32-32-32V63.98c0-11.19-5.844-21.53-15.38-27.34c-9.531-5.781-21.41-6.188-31.34-1.062l-32 16.59c-15.69 8.125-21.81 27.44-13.69 43.13C329.3 106.3 340.4 112.6 352 112.6V160C334.3 160 320 174.3 320 192zM392 255.6c-48.6 0-88 39.4-88 88c0 36.44 22.15 67.7 53.71 81.07l-7.682 8.004c-10.72 11.16-10.34 28.88 .8125 39.56C356.3 477.4 363.3 480 370.2 480c7.344 0 14.72-2.875 20.19-8.625c69.61-72.53 89.6-85.39 89.6-127.8C480 294.1 440.6 255.6 392 255.6zM392 367.6c-13.23 0-24-10.77-24-24s10.77-24 24-24s24 10.77 24 24S405.2 367.6 392 367.6zM216 320.3c-8.672 0-17.3 3.5-23.61 10.38L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-11.95-13.01-32.2-13.91-45.22-1.969c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C231.5 323.1 223.7 320.3 216 320.3z\"],\n    \"arrow-down-9-1\": [512, 512, [\"sort-numeric-desc\", \"sort-numeric-down-alt\"], \"f886\", \"M216 320.3c-8.672 0-17.3 3.5-23.61 10.38L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-11.95-13.01-32.2-13.91-45.22-1.969c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C231.5 323.1 223.7 320.3 216 320.3zM357.7 201.1l-7.682 8.004c-10.72 11.16-10.34 28.88 .8125 39.56c5.406 5.219 12.41 7.812 19.38 7.812c7.344 0 14.72-2.875 20.19-8.625c69.61-72.53 89.6-85.39 89.6-127.8c0-48.6-39.4-88-88-88s-88 39.4-88 88C303.1 156.4 326.1 187.7 357.7 201.1zM392 96c13.23 0 24 10.77 24 24S405.2 144 392 144S368 133.2 368 120S378.8 96 392 96zM416 416.4v-96.02c0-11.19-5.844-21.53-15.38-27.34c-9.531-5.781-21.41-6.188-31.34-1.062l-32 16.59c-15.69 8.125-21.81 27.44-13.69 43.13C329.3 362.8 340.4 369 352 369v47.41c-17.69 0-32 14.31-32 32s14.31 32 32 32h64c17.69 0 32-14.31 32-32S433.7 416.4 416 416.4z\"],\n    \"arrow-down-a-z\": [512, 512, [\"sort-alpha-asc\", \"sort-alpha-down\"], \"f15d\", \"M239.6 373.1c11.94-13.05 11.06-33.31-1.969-45.27c-13.55-12.42-33.76-10.52-45.22 1.973L160 366.1V64.03c0-17.7-14.33-32.03-32-32.03S96 46.33 96 64.03v302l-32.4-35.39C51.64 317.7 31.39 316.7 18.38 328.7c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0L239.6 373.1zM448 416h-50.75l73.38-73.38c9.156-9.156 11.89-22.91 6.938-34.88S460.9 288 447.1 288H319.1C302.3 288 288 302.3 288 320s14.33 32 32 32h50.75l-73.38 73.38c-9.156 9.156-11.89 22.91-6.938 34.88S307.1 480 319.1 480h127.1C465.7 480 480 465.7 480 448S465.7 416 448 416zM492.6 209.3l-79.99-160.1c-10.84-21.81-46.4-21.81-57.24 0L275.4 209.3c-7.906 15.91-1.5 35.24 14.31 43.19c15.87 7.922 35.04 1.477 42.93-14.4l7.154-14.39h88.43l7.154 14.39c6.174 12.43 23.97 23.87 42.93 14.4C494.1 244.6 500.5 225.2 492.6 209.3zM367.8 167.4L384 134.7l16.22 32.63H367.8z\"],\n    \"arrow-down-long\": [320, 512, [\"long-arrow-down\"], \"f175\", \"M9.375 329.4c12.51-12.51 32.76-12.49 45.25 0L128 402.8V32c0-17.69 14.31-32 32-32s32 14.31 32 32v370.8l73.38-73.38c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-128 128c-12.5 12.5-32.75 12.5-45.25 0l-128-128C-3.125 362.1-3.125 341.9 9.375 329.4z\"],\n    \"arrow-down-short-wide\": [576, 512, [\"sort-amount-desc\", \"sort-amount-down-alt\"], \"f884\", \"M320 224H416c17.67 0 32-14.33 32-32s-14.33-32-32-32h-95.1c-17.67 0-32 14.33-32 32S302.3 224 320 224zM320 352H480c17.67 0 32-14.33 32-32s-14.33-32-32-32h-159.1c-17.67 0-32 14.33-32 32S302.3 352 320 352zM320 96h32c17.67 0 31.1-14.33 31.1-32s-14.33-32-31.1-32h-32c-17.67 0-32 14.33-32 32S302.3 96 320 96zM544 416h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 416 544 416zM192.4 330.7L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-6.312-6.883-14.94-10.38-23.61-10.38c-7.719 0-15.47 2.781-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C224.6 316.8 204.4 317.7 192.4 330.7z\"],\n    \"arrow-down-wide-short\": [576, 512, [\"sort-amount-asc\", \"sort-amount-down\"], \"f160\", \"M416 288h-95.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H416c17.67 0 32-14.33 32-32S433.7 288 416 288zM544 32h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 32 544 32zM352 416h-32c-17.67 0-32 14.33-32 32s14.33 32 32 32h32c17.67 0 31.1-14.33 31.1-32S369.7 416 352 416zM480 160h-159.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H480c17.67 0 32-14.33 32-32S497.7 160 480 160zM192.4 330.7L160 366.1V64.03C160 46.33 145.7 32 128 32S96 46.33 96 64.03v302L63.6 330.7c-6.312-6.883-14.94-10.38-23.61-10.38c-7.719 0-15.47 2.781-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27l87.1 96.09c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27C224.6 316.8 204.4 317.7 192.4 330.7z\"],\n    \"arrow-down-z-a\": [512, 512, [\"sort-alpha-desc\", \"sort-alpha-down-alt\"], \"f881\", \"M104.4 470.1c12.12 13.26 35.06 13.26 47.19 0l87.1-96.09c11.94-13.05 11.06-33.31-1.969-45.27c-13.02-11.95-33.27-11.04-45.22 1.973L160 366.1V64.03c0-17.7-14.33-32.03-32-32.03S96 46.33 96 64.03v302l-32.4-35.39c-6.312-6.883-14.94-10.39-23.61-10.39c-7.719 0-15.47 2.785-21.61 8.414c-13.03 11.95-13.9 32.22-1.969 45.27L104.4 470.1zM320 96h50.75l-73.38 73.38c-9.156 9.156-11.89 22.91-6.938 34.88s16.63 19.74 29.56 19.74h127.1C465.7 223.1 480 209.7 480 192s-14.33-32-32-32h-50.75l73.38-73.38c9.156-9.156 11.89-22.91 6.938-34.88S460.9 32 447.1 32h-127.1C302.3 32 288 46.31 288 64S302.3 96 320 96zM492.6 433.3l-79.99-160.1c-10.84-21.81-46.4-21.81-57.24 0l-79.99 160.1c-7.906 15.91-1.5 35.24 14.31 43.19c15.87 7.922 35.04 1.477 42.93-14.4l7.154-14.39h88.43l7.154 14.39c6.174 12.43 23.97 23.87 42.93 14.4C494.1 468.6 500.5 449.2 492.6 433.3zM367.8 391.4L384 358.7l16.22 32.63H367.8z\"],\n    \"arrow-left\": [448, 512, [8592], \"f060\", \"M447.1 256C447.1 273.7 433.7 288 416 288H109.3l105.4 105.4c12.5 12.5 12.5 32.75 0 45.25C208.4 444.9 200.2 448 192 448s-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L109.3 224H416C433.7 224 447.1 238.3 447.1 256z\"],\n    \"arrow-left-long\": [512, 512, [\"long-arrow-left\"], \"f177\", \"M9.375 233.4l128-128c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L109.3 224H480c17.69 0 32 14.31 32 32s-14.31 32-32 32H109.3l73.38 73.38c12.5 12.5 12.5 32.75 0 45.25c-12.49 12.49-32.74 12.51-45.25 0l-128-128C-3.125 266.1-3.125 245.9 9.375 233.4z\"],\n    \"arrow-pointer\": [320, 512, [\"mouse-pointer\"], \"f245\", \"M318.4 304.5c-3.531 9.344-12.47 15.52-22.45 15.52h-105l45.15 94.82c9.496 19.94 1.031 43.8-18.91 53.31c-19.95 9.504-43.82 1.035-53.32-18.91L117.3 351.3l-75 88.25c-4.641 5.469-11.37 8.453-18.28 8.453c-2.781 0-5.578-.4844-8.281-1.469C6.281 443.1 0 434.1 0 423.1V56.02c0-9.438 5.531-18.03 14.12-21.91C22.75 30.26 32.83 31.77 39.87 37.99l271.1 240C319.4 284.6 321.1 295.1 318.4 304.5z\"],\n    \"arrow-right\": [448, 512, [8594], \"f061\", \"M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z\"],\n    \"arrow-right-arrow-left\": [512, 512, [8644, \"exchange\"], \"f0ec\", \"M32 176h370.8l-57.38 57.38c-12.5 12.5-12.5 32.75 0 45.25C351.6 284.9 359.8 288 368 288s16.38-3.125 22.62-9.375l112-112c12.5-12.5 12.5-32.75 0-45.25l-112-112c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25L402.8 112H32c-17.69 0-32 14.31-32 32S14.31 176 32 176zM480 336H109.3l57.38-57.38c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0l-112 112c-12.5 12.5-12.5 32.75 0 45.25l112 112C127.6 508.9 135.8 512 144 512s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25L109.3 400H480c17.69 0 32-14.31 32-32S497.7 336 480 336z\"],\n    \"arrow-right-from-bracket\": [512, 512, [\"sign-out\"], \"f08b\", \"M160 416H96c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h64c17.67 0 32-14.33 32-32S177.7 32 160 32H96C42.98 32 0 74.98 0 128v256c0 53.02 42.98 96 96 96h64c17.67 0 32-14.33 32-32S177.7 416 160 416zM502.6 233.4l-128-128c-12.51-12.51-32.76-12.49-45.25 0c-12.5 12.5-12.5 32.75 0 45.25L402.8 224H192C174.3 224 160 238.3 160 256s14.31 32 32 32h210.8l-73.38 73.38c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0l128-128C515.1 266.1 515.1 245.9 502.6 233.4z\"],\n    \"arrow-right-long\": [512, 512, [\"long-arrow-right\"], \"f178\", \"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"],\n    \"arrow-right-to-bracket\": [512, 512, [\"sign-in\"], \"f090\", \"M416 32h-64c-17.67 0-32 14.33-32 32s14.33 32 32 32h64c17.67 0 32 14.33 32 32v256c0 17.67-14.33 32-32 32h-64c-17.67 0-32 14.33-32 32s14.33 32 32 32h64c53.02 0 96-42.98 96-96V128C512 74.98 469 32 416 32zM342.6 233.4l-128-128c-12.51-12.51-32.76-12.49-45.25 0c-12.5 12.5-12.5 32.75 0 45.25L242.8 224H32C14.31 224 0 238.3 0 256s14.31 32 32 32h210.8l-73.38 73.38c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0l128-128C355.1 266.1 355.1 245.9 342.6 233.4z\"],\n    \"arrow-rotate-left\": [512, 512, [8634, \"arrow-left-rotate\", \"arrow-rotate-back\", \"arrow-rotate-backward\", \"undo\"], \"f0e2\", \"M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.86 0-95.19-15.58-134.2-44.86c-14.14-10.59-17-30.66-6.391-44.81c10.61-14.09 30.69-16.97 44.8-6.375c27.84 20.91 61 31.94 95.89 31.94C344.3 415.8 416 344.1 416 256s-71.67-159.8-159.8-159.8C205.9 96.22 158.6 120.3 128.6 160H192c17.67 0 32 14.31 32 32S209.7 224 192 224H48c-17.67 0-32-14.31-32-32V48c0-17.69 14.33-32 32-32s32 14.31 32 32v70.23C122.1 64.58 186.1 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z\"],\n    \"arrow-rotate-right\": [512, 512, [8635, \"arrow-right-rotate\", \"arrow-rotate-forward\", \"redo\"], \"f01e\", \"M496 48V192c0 17.69-14.31 32-32 32H320c-17.69 0-32-14.31-32-32s14.31-32 32-32h63.39c-29.97-39.7-77.25-63.78-127.6-63.78C167.7 96.22 96 167.9 96 256s71.69 159.8 159.8 159.8c34.88 0 68.03-11.03 95.88-31.94c14.22-10.53 34.22-7.75 44.81 6.375c10.59 14.16 7.75 34.22-6.375 44.81c-39.03 29.28-85.36 44.86-134.2 44.86C132.5 479.9 32 379.4 32 256s100.5-223.9 223.9-223.9c69.15 0 134 32.47 176.1 86.12V48c0-17.69 14.31-32 32-32S496 30.31 496 48z\"],\n    \"arrow-trend-down\": [576, 512, [], \"e097\", \"M466.7 352L320 205.3L214.6 310.6C202.1 323.1 181.9 323.1 169.4 310.6L9.372 150.6C-3.124 138.1-3.124 117.9 9.372 105.4C21.87 92.88 42.13 92.88 54.63 105.4L191.1 242.7L297.4 137.4C309.9 124.9 330.1 124.9 342.6 137.4L512 306.7V223.1C512 206.3 526.3 191.1 544 191.1C561.7 191.1 576 206.3 576 223.1V384C576 401.7 561.7 416 544 416H384C366.3 416 352 401.7 352 384C352 366.3 366.3 352 384 352L466.7 352z\"],\n    \"arrow-trend-up\": [576, 512, [], \"e098\", \"M384 160C366.3 160 352 145.7 352 128C352 110.3 366.3 96 384 96H544C561.7 96 576 110.3 576 128V288C576 305.7 561.7 320 544 320C526.3 320 512 305.7 512 288V205.3L342.6 374.6C330.1 387.1 309.9 387.1 297.4 374.6L191.1 269.3L54.63 406.6C42.13 419.1 21.87 419.1 9.372 406.6C-3.124 394.1-3.124 373.9 9.372 361.4L169.4 201.4C181.9 188.9 202.1 188.9 214.6 201.4L320 306.7L466.7 159.1L384 160z\"],\n    \"arrow-turn-down\": [384, 512, [\"level-down\"], \"f149\", \"M342.6 374.6l-128 128C208.4 508.9 200.2 512 191.1 512s-16.38-3.125-22.63-9.375l-127.1-128c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 402.8V80C160 71.19 152.8 64 144 64H32C14.33 64 0 49.69 0 32s14.33-32 32-32h112C188.1 0 224 35.88 224 80v322.8l73.37-73.38c12.5-12.5 32.75-12.5 45.25 0S355.1 362.1 342.6 374.6z\"],\n    \"arrow-turn-up\": [384, 512, [\"level-up\"], \"f148\", \"M342.6 182.6C336.4 188.9 328.2 192 319.1 192s-16.38-3.125-22.62-9.375L224 109.3V432c0 44.13-35.89 80-80 80H32c-17.67 0-32-14.31-32-32s14.33-32 32-32h112C152.8 448 160 440.8 160 432V109.3L86.62 182.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l127.1-128c12.5-12.5 32.75-12.5 45.25 0l128 128C355.1 149.9 355.1 170.1 342.6 182.6z\"],\n    \"arrow-up\": [384, 512, [8593], \"f062\", \"M374.6 246.6C368.4 252.9 360.2 256 352 256s-16.38-3.125-22.62-9.375L224 141.3V448c0 17.69-14.33 31.1-31.1 31.1S160 465.7 160 448V141.3L54.63 246.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l160-160c12.5-12.5 32.75-12.5 45.25 0l160 160C387.1 213.9 387.1 234.1 374.6 246.6z\"],\n    \"arrow-up-1-9\": [512, 512, [\"sort-numeric-up\"], \"f163\", \"M320 192c0 17.69 14.31 31.1 32 31.1L416 224c17.69 0 32-14.31 32-32s-14.31-32-32-32V63.98c0-11.19-5.844-21.53-15.38-27.34c-9.531-5.781-21.41-6.188-31.34-1.062l-32 16.59c-15.69 8.125-21.81 27.44-13.69 43.13C329.3 106.3 340.4 112.6 352 112.6V160C334.3 160 320 174.3 320 192zM392 255.6c-48.6 0-88 39.4-88 88c0 36.44 22.15 67.7 53.71 81.07l-7.682 8.004c-10.72 11.16-10.34 28.88 .8125 39.56C356.3 477.4 363.3 480 370.2 480c7.344 0 14.72-2.875 20.19-8.625c69.61-72.53 89.6-85.39 89.6-127.8C480 294.1 440.6 255.6 392 255.6zM392 367.6c-13.23 0-24-10.77-24-24s10.77-24 24-24s24 10.77 24 24S405.2 367.6 392 367.6zM39.99 191.7c8.672 0 17.3-3.5 23.61-10.38L96 145.9v302c0 17.7 14.33 32.03 31.1 32.03s32-14.33 32-32.03V145.9L192.4 181.3C204.4 194.3 224.6 195.2 237.6 183.3c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.94c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.475 151.1 5.35 171.3 18.38 183.3C24.52 188.9 32.27 191.7 39.99 191.7z\"],\n    \"arrow-up-9-1\": [512, 512, [\"sort-numeric-up-alt\"], \"f887\", \"M237.6 183.3c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.94c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.475 151.1 5.35 171.3 18.38 183.3c13.02 11.95 33.27 11.04 45.22-1.969L96 145.9v302c0 17.7 14.33 32.03 31.1 32.03s32-14.33 32-32.03V145.9L192.4 181.3c6.312 6.883 14.94 10.38 23.61 10.38C223.7 191.7 231.5 188.9 237.6 183.3zM357.7 201.1l-7.682 8.004c-10.72 11.16-10.34 28.88 .8125 39.56c5.406 5.219 12.41 7.812 19.38 7.812c7.344 0 14.72-2.875 20.19-8.625c69.61-72.53 89.6-85.39 89.6-127.8c0-48.6-39.4-88-88-88s-88 39.4-88 88C303.1 156.4 326.1 187.7 357.7 201.1zM392 96c13.23 0 24 10.77 24 24S405.2 144 392 144S368 133.2 368 120S378.8 96 392 96zM416 416.4v-96.02c0-11.19-5.844-21.53-15.38-27.34c-9.531-5.781-21.41-6.188-31.34-1.062l-32 16.59c-15.69 8.125-21.81 27.44-13.69 43.13C329.3 362.8 340.4 369 352 369v47.41c-17.69 0-32 14.31-32 32s14.31 32 32 32h64c17.69 0 32-14.31 32-32S433.7 416.4 416 416.4z\"],\n    \"arrow-up-a-z\": [512, 512, [\"sort-alpha-up\"], \"f15e\", \"M151.6 41.95c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.473 151.1 5.348 171.4 18.38 183.3c13.02 11.95 33.27 11.04 45.22-1.973L96 145.9v302C96 465.7 110.3 480 128 480S160 465.7 160 447.1V145.9L192.4 181.3c11.46 12.49 31.67 14.39 45.22 1.973c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.95zM448 416h-50.75l73.38-73.38c9.156-9.156 11.89-22.91 6.938-34.88s-16.63-19.86-29.56-19.86H319.1C302.3 287.9 288 302.3 288 320s14.33 32 32 32h50.75l-73.38 73.38c-9.156 9.156-11.89 22.91-6.938 34.88S307.1 480 319.1 480h127.1C465.7 480 480 465.7 480 448S465.7 416 448 416zM492.6 209.3l-79.99-160.1c-10.84-21.81-46.4-21.81-57.24 0L275.4 209.3c-7.906 15.91-1.5 35.24 14.31 43.19c15.87 7.922 35.04 1.477 42.93-14.4l7.154-14.39h88.43l7.154 14.39c6.174 12.43 23.97 23.87 42.93 14.4C494.1 244.6 500.5 225.2 492.6 209.3zM367.8 167.4L384 134.7l16.22 32.63H367.8z\"],\n    \"arrow-up-from-bracket\": [448, 512, [], \"e09a\", \"M384 352v64c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32v-64c0-17.67-14.33-32-32-32s-32 14.33-32 32v64c0 53.02 42.98 96 96 96h256c53.02 0 96-42.98 96-96v-64c0-17.67-14.33-32-32-32S384 334.3 384 352zM201.4 9.375l-128 128c-12.51 12.51-12.49 32.76 0 45.25c12.5 12.5 32.75 12.5 45.25 0L192 109.3V320c0 17.69 14.31 32 32 32s32-14.31 32-32V109.3l73.38 73.38c12.5 12.5 32.75 12.5 45.25 0s12.5-32.75 0-45.25l-128-128C234.1-3.125 213.9-3.125 201.4 9.375z\"],\n    \"arrow-up-long\": [320, 512, [\"long-arrow-up\"], \"f176\", \"M310.6 182.6c-12.51 12.51-32.76 12.49-45.25 0L192 109.3V480c0 17.69-14.31 32-32 32s-32-14.31-32-32V109.3L54.63 182.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l128-128c12.5-12.5 32.75-12.5 45.25 0l128 128C323.1 149.9 323.1 170.1 310.6 182.6z\"],\n    \"arrow-up-right-from-square\": [512, 512, [\"external-link\"], \"f08e\", \"M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM502.6 9.367C496.8 3.578 488.8 0 480 0h-160c-17.67 0-31.1 14.32-31.1 31.1c0 17.67 14.32 31.1 31.99 31.1h82.75L178.7 290.7c-12.5 12.5-12.5 32.76 0 45.26C191.2 348.5 211.5 348.5 224 336l224-226.8V192c0 17.67 14.33 31.1 31.1 31.1S512 209.7 512 192V31.1C512 23.16 508.4 15.16 502.6 9.367z\"],\n    \"arrow-up-short-wide\": [576, 512, [\"sort-amount-up-alt\"], \"f885\", \"M544 416h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 416 544 416zM320 96h32c17.67 0 31.1-14.33 31.1-32s-14.33-32-31.1-32h-32c-17.67 0-32 14.33-32 32S302.3 96 320 96zM320 224H416c17.67 0 32-14.33 32-32s-14.33-32-32-32h-95.1c-17.67 0-32 14.33-32 32S302.3 224 320 224zM320 352H480c17.67 0 32-14.33 32-32s-14.33-32-32-32h-159.1c-17.67 0-32 14.33-32 32S302.3 352 320 352zM151.6 41.95c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.475 151.1 5.35 171.4 18.38 183.3c6.141 5.629 13.89 8.414 21.61 8.414c8.672 0 17.3-3.504 23.61-10.39L96 145.9v302C96 465.7 110.3 480 128 480s32-14.33 32-32.03V145.9L192.4 181.3C204.4 194.3 224.6 195.3 237.6 183.3c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.95z\"],\n    \"arrow-up-wide-short\": [576, 512, [\"sort-amount-up\"], \"f161\", \"M416 288h-95.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H416c17.67 0 32-14.33 32-32S433.7 288 416 288zM352 416h-32c-17.67 0-32 14.33-32 32s14.33 32 32 32h32c17.67 0 31.1-14.33 31.1-32S369.7 416 352 416zM480 160h-159.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H480c17.67 0 32-14.33 32-32S497.7 160 480 160zM544 32h-223.1c-17.67 0-32 14.33-32 32s14.33 32 32 32H544c17.67 0 32-14.33 32-32S561.7 32 544 32zM151.6 41.95c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.475 151.1 5.35 171.4 18.38 183.3c6.141 5.629 13.89 8.414 21.61 8.414c8.672 0 17.3-3.504 23.61-10.39L96 145.9v302C96 465.7 110.3 480 128 480s32-14.33 32-32.03V145.9L192.4 181.3C204.4 194.3 224.6 195.3 237.6 183.3c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.95z\"],\n    \"arrow-up-z-a\": [512, 512, [\"sort-alpha-up-alt\"], \"f882\", \"M151.6 41.95c-12.12-13.26-35.06-13.26-47.19 0l-87.1 96.09C4.473 151.1 5.348 171.4 18.38 183.3c13.02 11.95 33.27 11.04 45.22-1.973L96 145.9v302C96 465.7 110.3 480 128 480S160 465.7 160 447.1V145.9L192.4 181.3c6.312 6.883 14.94 10.39 23.61 10.39c7.719 0 15.47-2.785 21.61-8.414c13.03-11.95 13.9-32.22 1.969-45.27L151.6 41.95zM320 96h50.75l-73.38 73.38c-9.156 9.156-11.89 22.91-6.938 34.88s16.63 19.74 29.56 19.74h127.1C465.7 223.1 480 209.7 480 192s-14.33-32-32-32h-50.75l73.38-73.38c9.156-9.156 11.89-22.91 6.938-34.88S460.9 32 447.1 32h-127.1C302.3 32 288 46.31 288 64S302.3 96 320 96zM492.6 433.3l-79.99-160.1c-10.84-21.81-46.4-21.81-57.24 0l-79.99 160.1c-7.906 15.91-1.5 35.24 14.31 43.19c15.87 7.922 35.04 1.477 42.93-14.4l7.154-14.39h88.43l7.154 14.39c6.174 12.43 23.97 23.87 42.93 14.4C494.1 468.6 500.5 449.2 492.6 433.3zM367.8 391.4L384 358.7l16.22 32.63H367.8z\"],\n    \"arrows-left-right\": [512, 512, [\"arrows-h\"], \"f07e\", \"M502.6 278.6l-96 96C400.4 380.9 392.2 384 384 384s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L402.8 288h-293.5l41.38 41.38c12.5 12.5 12.5 32.75 0 45.25C144.4 380.9 136.2 384 128 384s-16.38-3.125-22.62-9.375l-96-96c-12.5-12.5-12.5-32.75 0-45.25l96-96c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L109.3 224h293.5l-41.38-41.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l96 96C515.1 245.9 515.1 266.1 502.6 278.6z\"],\n    \"arrows-rotate\": [512, 512, [128472, \"refresh\", \"sync\"], \"f021\", \"M464 16c-17.67 0-32 14.31-32 32v74.09C392.1 66.52 327.4 32 256 32C161.5 32 78.59 92.34 49.58 182.2c-5.438 16.81 3.797 34.88 20.61 40.28c16.89 5.5 34.88-3.812 40.3-20.59C130.9 138.5 189.4 96 256 96c50.5 0 96.26 24.55 124.4 64H336c-17.67 0-32 14.31-32 32s14.33 32 32 32h128c17.67 0 32-14.31 32-32V48C496 30.31 481.7 16 464 16zM441.8 289.6c-16.92-5.438-34.88 3.812-40.3 20.59C381.1 373.5 322.6 416 256 416c-50.5 0-96.25-24.55-124.4-64H176c17.67 0 32-14.31 32-32s-14.33-32-32-32h-128c-17.67 0-32 14.31-32 32v144c0 17.69 14.33 32 32 32s32-14.31 32-32v-74.09C119.9 445.5 184.6 480 255.1 480c94.45 0 177.4-60.34 206.4-150.2C467.9 313 458.6 294.1 441.8 289.6z\"],\n    \"arrows-up-down\": [256, 512, [\"arrows-v\"], \"f07d\", \"M246.6 361.4C252.9 367.6 256 375.8 256 384s-3.125 16.38-9.375 22.62l-96 96c-12.5 12.5-32.75 12.5-45.25 0l-96-96c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L96 402.8v-293.5L54.63 150.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l96-96c12.5-12.5 32.75-12.5 45.25 0l96 96C252.9 111.6 256 119.8 256 128s-3.125 16.38-9.375 22.62c-12.5 12.5-32.75 12.5-45.25 0L160 109.3v293.5l41.38-41.38C213.9 348.9 234.1 348.9 246.6 361.4z\"],\n    \"arrows-up-down-left-right\": [512, 512, [\"arrows\"], \"f047\", \"M512 255.1c0 8.188-3.125 16.41-9.375 22.66l-72 72C424.4 356.9 416.2 360 408 360c-18.28 0-32-14.95-32-32c0-8.188 3.125-16.38 9.375-22.62L402.8 288H288v114.8l17.38-17.38C311.6 379.1 319.8 376 328 376c18.28 0 32 14.95 32 32c0 8.188-3.125 16.38-9.375 22.62l-72 72C272.4 508.9 264.2 512 256 512s-16.38-3.125-22.62-9.375l-72-72C155.1 424.4 152 416.2 152 408c0-17.05 13.73-32 32-32c8.188 0 16.38 3.125 22.62 9.375L224 402.8V288H109.3l17.38 17.38C132.9 311.6 136 319.8 136 328c0 17.05-13.73 32-32 32c-8.188 0-16.38-3.125-22.62-9.375l-72-72C3.125 272.4 0 264.2 0 255.1s3.125-16.34 9.375-22.59l72-72C87.63 155.1 95.81 152 104 152c18.28 0 32 14.95 32 32c0 8.188-3.125 16.38-9.375 22.62L109.3 224H224V109.3L206.6 126.6C200.4 132.9 192.2 136 184 136c-18.28 0-32-14.95-32-32c0-8.188 3.125-16.38 9.375-22.62l72-72C239.6 3.125 247.8 0 256 0s16.38 3.125 22.62 9.375l72 72C356.9 87.63 360 95.81 360 104c0 17.05-13.73 32-32 32c-8.188 0-16.38-3.125-22.62-9.375L288 109.3V224h114.8l-17.38-17.38C379.1 200.4 376 192.2 376 184c0-17.05 13.73-32 32-32c8.188 0 16.38 3.125 22.62 9.375l72 72C508.9 239.6 512 247.8 512 255.1z\"],\n    \"asterisk\": [448, 512, [10033, 61545], \"2a\", \"M417.1 368c-5.937 10.27-16.69 16-27.75 16c-5.422 0-10.92-1.375-15.97-4.281L256 311.4V448c0 17.67-14.33 32-31.1 32S192 465.7 192 448V311.4l-118.3 68.29C68.67 382.6 63.17 384 57.75 384c-11.06 0-21.81-5.734-27.75-16c-8.828-15.31-3.594-34.88 11.72-43.72L159.1 256L41.72 187.7C26.41 178.9 21.17 159.3 29.1 144C36.63 132.5 49.26 126.7 61.65 128.2C65.78 128.7 69.88 130.1 73.72 132.3L192 200.6V64c0-17.67 14.33-32 32-32S256 46.33 256 64v136.6l118.3-68.29c3.838-2.213 7.939-3.539 12.07-4.051C398.7 126.7 411.4 132.5 417.1 144c8.828 15.31 3.594 34.88-11.72 43.72L288 256l118.3 68.28C421.6 333.1 426.8 352.7 417.1 368z\"],\n    \"at\": [512, 512, [129664, 61946], \"40\", \"M207.8 20.73c-93.45 18.32-168.7 93.66-187 187.1c-27.64 140.9 68.65 266.2 199.1 285.1c19.01 2.888 36.17-12.26 36.17-31.49l.0001-.6631c0-15.74-11.44-28.88-26.84-31.24c-84.35-12.98-149.2-86.13-149.2-174.2c0-102.9 88.61-185.5 193.4-175.4c91.54 8.869 158.6 91.25 158.6 183.2l0 16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-40.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98 .0036c-7.299 0-13.2 4.992-15.12 11.68c-24.85-12.15-54.24-16.38-86.06-5.106c-38.75 13.73-68.12 48.91-73.72 89.64c-9.483 69.01 43.81 128 110.9 128c26.44 0 50.43-9.544 69.59-24.88c24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.3C495.1 107.1 361.2-9.332 207.8 20.73zM239.1 304.3c-26.47 0-48-21.56-48-48.05s21.53-48.05 48-48.05s48 21.56 48 48.05S266.5 304.3 239.1 304.3z\"],\n    \"atom\": [512, 512, [9883], \"f5d2\", \"M256 224C238.4 224 223.1 238.4 223.1 256S238.4 288 256 288c17.63 0 32-14.38 32-32S273.6 224 256 224zM470.2 128c-10.88-19.5-40.51-50.75-116.3-41.88C332.4 34.88 299.6 0 256 0S179.6 34.88 158.1 86.12C82.34 77.38 52.71 108.5 41.83 128c-16.38 29.38-14.91 73.12 25.23 128c-40.13 54.88-41.61 98.63-25.23 128c29.13 52.38 101.6 43.63 116.3 41.88C179.6 477.1 212.4 512 256 512s76.39-34.88 97.9-86.13C368.5 427.6 441 436.4 470.2 384c16.38-29.38 14.91-73.13-25.23-128C485.1 201.1 486.5 157.4 470.2 128zM95.34 352c-4.001-7.25-.1251-24.75 15-48.25c6.876 6.5 14.13 12.87 21.88 19.12c1.625 13.75 4.001 27.13 6.751 40.13C114.3 363.9 99.09 358.6 95.34 352zM132.2 189.1C124.5 195.4 117.2 201.8 110.3 208.2C95.22 184.8 91.34 167.2 95.34 160c3.376-6.125 16.38-11.5 37.88-11.5c1.75 0 3.876 .375 5.751 .375C136.1 162.2 133.8 175.6 132.2 189.1zM256 64c9.502 0 22.25 13.5 33.88 37.25C278.6 105 267.4 109.3 256 114.1C244.6 109.3 233.4 105 222.1 101.2C233.7 77.5 246.5 64 256 64zM256 448c-9.502 0-22.25-13.5-33.88-37.25C233.4 407 244.6 402.7 256 397.9c11.38 4.875 22.63 9.135 33.88 12.89C278.3 434.5 265.5 448 256 448zM256 336c-44.13 0-80.02-35.88-80.02-80S211.9 176 256 176s80.02 35.88 80.02 80S300.1 336 256 336zM416.7 352c-3.626 6.625-19 11.88-43.63 11c2.751-12.1 5.126-26.38 6.751-40.13c7.752-6.25 15-12.63 21.88-19.12C416.8 327.2 420.7 344.8 416.7 352zM401.7 208.2c-6.876-6.5-14.13-12.87-21.88-19.12c-1.625-13.5-3.876-26.88-6.751-40.25c1.875 0 4.001-.375 5.751-.375c21.5 0 34.51 5.375 37.88 11.5C420.7 167.2 416.8 184.8 401.7 208.2z\"],\n    \"audio-description\": [576, 512, [], \"f29e\", \"M170.8 280H213.2L192 237.7L170.8 280zM512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM274.7 349.5C271.3 351.2 267.6 352 264 352c-8.812 0-17.28-4.859-21.5-13.27L233.2 320H150.8l-9.367 18.73c-5.906 11.86-20.31 16.7-32.19 10.73c-11.88-5.938-16.69-20.34-10.75-32.2l72-144c8.125-16.25 34.81-16.25 42.94 0l72 144C291.4 329.1 286.6 343.5 274.7 349.5zM384 352h-56c-13.25 0-24-10.75-24-24v-144C304 170.8 314.8 160 328 160H384c52.94 0 96 43.06 96 96S436.9 352 384 352zM384 208h-32v96h32c26.47 0 48-21.53 48-48S410.5 208 384 208z\"],\n    \"austral-sign\": [448, 512, [], \"e0a9\", \"M325.3 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H352L365.3 320H416C433.7 320 448 334.3 448 352C448 369.7 433.7 384 416 384H392L413.5 435.7C420.3 452 412.6 470.7 396.3 477.5C379.1 484.3 361.3 476.6 354.5 460.3L322.7 384H125.3L93.54 460.3C86.74 476.6 68.01 484.3 51.69 477.5C35.38 470.7 27.66 452 34.46 435.7L56 384H32C14.33 384 0 369.7 0 352C0 334.3 14.33 320 32 320H82.67L96 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H122.7L194.5 51.69C199.4 39.77 211.1 32 224 32C236.9 32 248.6 39.77 253.5 51.69L325.3 224zM256 224L223.1 147.2L191.1 224H256zM165.3 288L151.1 320H296L282.7 288H165.3z\"],\n    \"award\": [384, 512, [], \"f559\", \"M288 358.3c13.98-8.088 17.53-30.04 28.88-41.39c11.35-11.35 33.3-14.88 41.39-28.87c7.98-13.79 .1658-34.54 4.373-50.29C366.7 222.5 383.1 208.5 383.1 192c0-16.5-17.27-30.52-21.34-45.73c-4.207-15.75 3.612-36.5-4.365-50.29c-8.086-13.98-30.03-17.52-41.38-28.87c-11.35-11.35-14.89-33.3-28.87-41.39c-13.79-7.979-34.54-.1637-50.29-4.375C222.5 17.27 208.5 0 192 0C175.5 0 161.5 17.27 146.3 21.34C130.5 25.54 109.8 17.73 95.98 25.7C82 33.79 78.46 55.74 67.11 67.08C55.77 78.43 33.81 81.97 25.72 95.95C17.74 109.7 25.56 130.5 21.35 146.2C17.27 161.5 .0008 175.5 .0008 192c0 16.5 17.27 30.52 21.34 45.73c4.207 15.75-3.615 36.5 4.361 50.29C33.8 302 55.74 305.5 67.08 316.9c11.35 11.35 14.89 33.3 28.88 41.4c13.79 7.979 34.53 .1582 50.28 4.369C161.5 366.7 175.5 384 192 384c16.5 0 30.52-17.27 45.74-21.34C253.5 358.5 274.2 366.3 288 358.3zM112 192c0-44.27 35.81-80 80-80s80 35.73 80 80c0 44.17-35.81 80-80 80S112 236.2 112 192zM1.719 433.2c-3.25 8.188-1.781 17.48 3.875 24.25c5.656 6.75 14.53 9.898 23.12 8.148l45.19-9.035l21.43 42.27C99.46 507 107.6 512 116.7 512c.3438 0 .6641-.0117 1.008-.0273c9.5-.375 17.65-6.082 21.24-14.88l33.58-82.08c-53.71-4.639-102-28.12-138.2-63.95L1.719 433.2zM349.6 351.1c-36.15 35.83-84.45 59.31-138.2 63.95l33.58 82.08c3.594 8.797 11.74 14.5 21.24 14.88C266.6 511.1 266.1 512 267.3 512c9.094 0 17.23-4.973 21.35-13.14l21.43-42.28l45.19 9.035c8.594 1.75 17.47-1.398 23.12-8.148c5.656-6.766 7.125-16.06 3.875-24.25L349.6 351.1z\"],\n    \"b\": [320, 512, [98], \"42\", \"M257.1 242.4C276.1 220.1 288 191.6 288 160c0-70.58-57.42-128-128-128H32c-17.67 0-32 14.33-32 32v384c0 17.67 14.33 32 32 32l160-.0049c70.58 0 128-57.42 128-128C320 305.3 294.6 264.8 257.1 242.4zM64 96.01h96c35.3 0 64 28.7 64 64s-28.7 64-64 64H64V96.01zM192 416H64v-128h128c35.3 0 64 28.7 64 64S227.3 416 192 416z\"],\n    \"baby\": [448, 512, [], \"f77c\", \"M156.8 411.8l31.22-31.22l-60.04-53.09l-52.29 52.28C61.63 393.8 60.07 416.1 72 432l48 64C127.9 506.5 139.9 512 152 512c8.345 0 16.78-2.609 23.97-8c17.69-13.25 21.25-38.33 8-56L156.8 411.8zM224 159.1c44.25 0 79.99-35.75 79.99-79.1S268.3 0 224 0S144 35.75 144 79.1S179.8 159.1 224 159.1zM408.7 145c-12.75-18.12-37.63-22.38-55.76-9.75l-40.63 28.5c-52.63 37-124.1 37-176.8 0l-40.63-28.5C76.84 122.6 51.97 127 39.22 145C26.59 163.1 30.97 188 48.97 200.8l40.63 28.5C101.7 237.7 114.7 244.3 128 250.2L128 288h192l.0002-37.71c13.25-5.867 26.22-12.48 38.34-21.04l40.63-28.5C417.1 188 421.4 163.1 408.7 145zM320 327.4l-60.04 53.09l31.22 31.22L264 448c-13.25 17.67-9.689 42.75 8 56C279.2 509.4 287.6 512 295.1 512c12.16 0 24.19-5.516 32.03-16l48-64c11.94-15.92 10.38-38.2-3.719-52.28L320 327.4z\"],\n    \"baby-carriage\": [512, 512, [\"carriage-baby\"], \"f77d\", \"M255.1 192H.1398C2.741 117.9 41.34 52.95 98.98 14.1C112.2 5.175 129.8 9.784 138.9 22.92L255.1 192zM384 160C384 124.7 412.7 96 448 96H480C497.7 96 512 110.3 512 128C512 145.7 497.7 160 480 160H448V224C448 249.2 442.2 274.2 430.9 297.5C419.7 320.8 403.2 341.9 382.4 359.8C361.6 377.6 336.9 391.7 309.7 401.4C282.5 411 253.4 416 223.1 416C194.6 416 165.5 411 138.3 401.4C111.1 391.7 86.41 377.6 65.61 359.8C44.81 341.9 28.31 320.8 17.05 297.5C5.794 274.2 0 249.2 0 224H384L384 160zM31.1 464C31.1 437.5 53.49 416 79.1 416C106.5 416 127.1 437.5 127.1 464C127.1 490.5 106.5 512 79.1 512C53.49 512 31.1 490.5 31.1 464zM416 464C416 490.5 394.5 512 368 512C341.5 512 320 490.5 320 464C320 437.5 341.5 416 368 416C394.5 416 416 437.5 416 464z\"],\n    \"backward\": [512, 512, [9194], \"f04a\", \"M459.5 71.41l-171.5 142.9v83.45l171.5 142.9C480.1 457.7 512 443.3 512 415.1V96.03C512 68.66 480.1 54.28 459.5 71.41zM203.5 71.41L11.44 231.4c-15.25 12.87-15.25 36.37 0 49.24l192 159.1c20.63 17.12 52.51 2.749 52.51-24.62v-319.9C255.1 68.66 224.1 54.28 203.5 71.41z\"],\n    \"backward-fast\": [512, 512, [9198, \"fast-backward\"], \"f049\", \"M0 415.1V96.03c0-17.67 14.33-31.1 31.1-31.1C49.67 64.03 64 78.36 64 96.03v131.8l171.5-156.5C256.1 54.28 288 68.66 288 96.03v131.9l171.5-156.5C480.1 54.28 512 68.66 512 96.03v319.9c0 27.37-31.88 41.74-52.5 24.62L288 285.2v130.7c0 27.37-31.88 41.74-52.5 24.62L64 285.2v130.7c0 17.67-14.33 31.1-31.1 31.1C14.33 447.1 0 433.6 0 415.1z\"],\n    \"backward-step\": [320, 512, [\"step-backward\"], \"f048\", \"M31.1 64.03c-17.67 0-31.1 14.33-31.1 32v319.9c0 17.67 14.33 32 32 32C49.67 447.1 64 433.6 64 415.1V96.03C64 78.36 49.67 64.03 31.1 64.03zM267.5 71.41l-192 159.1C67.82 237.8 64 246.9 64 256c0 9.094 3.82 18.18 11.44 24.62l192 159.1c20.63 17.12 52.51 2.75 52.51-24.62v-319.9C319.1 68.66 288.1 54.28 267.5 71.41z\"],\n    \"bacon\": [576, 512, [129363], \"f7e5\", \"M29.34 432.5l-18.06-20.15c-9.406-10.47-13.25-25.3-10.31-39.65c2.813-13.71 11.23-24.74 23.09-30.23l68.88-31.94c47.95-22.25 87.64-60.2 114.8-109.8l20.66-37.76c28.77-52.59 70.98-92.93 122.1-116.6l92.75-42.99c14.84-6.812 32.41-3.078 43.69 9.518l34.08 38.01l-104.8 48.56c-55.72 25.83-101.7 69.73-133 127L261.3 266.5c-28.03 51.22-69 90.42-118.5 113.4L29.34 432.5zM564.7 99.68l-21.4-23.87l-113.6 52.68c-49.47 22.94-90.44 62.11-118.5 113.3L289.3 281.9c-31.33 57.27-77.34 101.2-133.1 127l-104.5 48.43l37.43 41.74C96.64 507.5 106.1 512 117.5 512c5.188 0 10.41-1.11 15.33-3.375l92.75-42.99c51.13-23.69 93.34-64.03 122.1-116.6l20.66-37.76c27.11-49.56 66.8-87.5 114.8-109.8l68.88-31.94c11.86-5.486 20.28-16.52 23.09-30.23C577.1 124.1 574.1 110.1 564.7 99.68z\"],\n    \"bacteria\": [640, 512, [], \"e059\", \"M627.3 227.3c9.439-2.781 14.81-12.65 12-22.04c-3.039-10.21-13.57-14.52-22.14-11.95l-11.27 3.33c-8.086-15.15-20.68-27.55-36.4-35.43l2.888-11.06c1.867-7.158-1.9-22.19-17.26-22.19c-7.92 0-15.14 5.288-17.23 13.28l-2.865 10.97c-7.701-.2793-26.9-.6485-48.75 13.63L477.6 157.1c-3.777-3.873-15.44-9.779-25.19-.3691c-7.062 6.822-7.225 18.04-.3711 25.07l9.14 9.373c-11.96 18.85-10.27 28.38-15.88 46.61c-8.023-3.758-11.44-5.943-16.66-5.943c-6.689 0-13.09 3.763-16.13 10.19c-4.188 8.856-.3599 19.42 8.546 23.58l8.797 4.115c-14.91 22.05-34.42 33.57-34.83 33.83l-3.922-8.855C387.2 285.8 376.7 281.7 367.7 285.6c-9 3.959-13.08 14.42-9.115 23.39l4.041 9.127c-16.38 4.559-27.93 4.345-46.15 16.94l-9.996-9.012c-6.969-6.303-18.28-6.33-25.15 1.235c-6.609 7.26-6.053 18.47 1.24 25.04l9.713 8.756c-8.49 14.18-12.74 30.77-11.64 48.17l-11.86 3.512c-9.428 2.793-14.8 12.66-11.99 22.05c2.781 9.385 12.69 14.71 22.15 11.94l11.34-3.359c8.287 15.49 20.99 27.86 36.38 35.57l-2.839 10.85c-2.482 9.477 3.224 19.16 12.75 21.62c9.566 2.482 19.25-3.221 21.72-12.69l2.82-10.78c5.508 .1875 11.11-.1523 16.75-1.102c11.37-1.893 22.23-5.074 33.1-8.24l3.379 9.455c3.305 9.225 13.5 14.11 22.75 10.76c9.266-3.279 14.1-13.41 10.81-22.65l-3.498-9.792c15.41-6.654 30.08-14.46 43.95-23.57l6.321 8.429c5.891 7.84 17.05 9.443 24.93 3.602c7.885-5.863 9.498-16.97 3.617-24.82l-6.457-8.611c12.66-10.78 24.33-22.54 34.96-35.33l8.816 6.413c7.932 5.795 19.07 4.074 24.89-3.855c5.809-7.908 4.072-18.1-3.874-24.77l-8.885-6.465c8.893-13.88 16.54-28.52 22.99-43.91l10.47 3.59c9.334 3.186 19.43-1.719 22.64-10.99c3.211-9.258-1.739-19.35-11.04-22.53l-10.33-3.541c5.744-20.5 9.424-31.81 8.338-49.26L627.3 227.3zM416 416c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32c17.67 0 32 14.33 32 32C448 401.7 433.7 416 416 416zM272.3 226.4c9-3.959 13.08-14.42 9.115-23.39L277.4 193.9c16.38-4.561 27.93-4.345 46.15-16.94l9.996 9.012c6.969 6.301 18.28 6.326 25.15-1.236c6.609-7.26 6.053-18.47-1.24-25.04l-9.713-8.756c8.49-14.18 12.74-30.77 11.64-48.18l11.86-3.511c9.428-2.793 14.8-12.66 11.99-22.05c-2.781-9.385-12.69-14.71-22.15-11.94l-11.34 3.357C341.5 53.13 328.8 40.76 313.4 33.05l2.838-10.85C318.7 12.73 313 3.04 303.5 .5811c-9.566-2.482-19.25 3.222-21.72 12.69l-2.82 10.78C273.4 23.86 267.8 24.2 262.2 25.15C250.8 27.04 239.1 30.22 229.1 33.39L225.7 23.93C222.4 14.71 212.2 9.827 202.1 13.17C193.7 16.45 188.9 26.59 192.2 35.82l3.498 9.793C180.2 52.27 165.6 60.07 151.7 69.19L145.4 60.76C139.5 52.92 128.3 51.32 120.5 57.16C112.6 63.02 110.1 74.13 116.8 81.98l6.457 8.611C110.6 101.4 98.96 113.1 88.34 125.9L79.52 119.5c-7.932-5.795-19.08-4.074-24.89 3.855c-5.809 7.908-4.07 19 3.875 24.77l8.885 6.465C58.5 168.5 50.86 183.1 44.41 198.5L33.93 194.9c-9.334-3.186-19.44 1.721-22.64 10.99C8.086 215.2 13.04 225.3 22.34 228.4l10.33 3.541C26.93 252.5 23.25 263.8 24.33 281.2L12.75 284.7C3.309 287.4-2.061 297.3 .7441 306.7c3.041 10.21 13.57 14.52 22.14 11.95l11.27-3.33c8.086 15.15 20.68 27.55 36.39 35.43l-2.887 11.06c-1.865 7.156 1.902 22.19 17.26 22.19c7.92 0 15.14-5.287 17.23-13.28l2.863-10.97c7.701 .2773 26.9 .6465 48.76-13.63l8.59 8.809c3.777 3.873 15.44 9.779 25.19 .3691c7.062-6.822 7.225-18.04 .3711-25.07l-9.14-9.373c11.96-18.85 10.27-28.38 15.88-46.61c8.025 3.756 11.44 5.943 16.66 5.943c6.689 0 13.09-3.762 16.13-10.19C231.6 261.1 227.8 250.6 218.9 246.4L210.1 242.3C225 220.2 244.5 208.7 244.9 208.5l3.922 8.856C252.8 226.2 263.3 230.3 272.3 226.4zM128 256C110.3 256 96 241.7 96 223.1c0-17.67 14.33-32 32-32c17.67 0 32 14.33 32 32C160 241.7 145.7 256 128 256zM208 160c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C224 152.8 216.8 160 208 160z\"],\n    \"bacterium\": [576, 512, [], \"e05a\", \"M543 102.9c-3.711-12.51-16.92-19.61-29.53-15.92l-15.12 4.48c-11.05-20.65-27.98-37.14-48.5-47.43l3.783-14.46c3.309-12.64-4.299-25.55-16.99-28.83c-12.76-3.309-25.67 4.295-28.96 16.92l-3.76 14.37c-9.947-.3398-26.22 .1016-66.67 11.88l-4.301-12.03c-4.406-12.3-17.1-18.81-30.34-14.34c-12.35 4.371-18.8 17.88-14.41 30.2l4.303 12.04c-20.6 8.889-40.16 19.64-58.69 31.83L225.9 81.01C217.1 70.56 203.1 68.42 192.6 76.21C182.1 84.03 179.9 98.83 187.8 109.3l7.975 10.63C178.8 134.3 163.3 150.3 149.1 167.4L138 159.3C127.5 151.6 112.6 153.9 104.8 164.5c-7.748 10.54-5.428 25.33 5.164 33.03l11.09 8.066C109.2 224.1 98.79 243.7 90.18 264.3l-12.93-4.431c-12.45-4.248-25.92 2.293-30.18 14.65C42.78 286.9 49.38 300.3 61.78 304.6l13.05 4.474c-11.86 42.33-11.02 55.76-10.39 65.93l-15.45 4.566c-12.59 3.709-19.74 16.87-16 29.38c4.053 13.61 18.1 19.36 29.52 15.93l15.02-4.441c10.78 20.21 27.57 36.73 48.53 47.24l-3.852 14.75C119.7 491.1 124.8 512 145.2 512c10.56 0 20.19-7.049 22.98-17.7l3.816-14.63c10.2 .377 35.85 .873 65.01-18.17l11.45 11.74c5.037 5.164 20.59 13.04 33.58 .4922c9.416-9.096 9.633-24.06 .4941-33.43l-12.19-12.5c7.805-12.29 13.56-26.13 16.11-41.4c1.186-7.107 3.082-13.95 5.158-20.7c10.66 4.988 15.16 7.881 22.12 7.881c8.922 0 17.46-5.018 21.51-13.59c5.582-11.8 .4785-25.89-11.4-31.45l-11.73-5.486c20.09-29.62 45.89-44.76 46.44-45.11l5.23 11.81c5.273 11.86 19.19 17.36 31.33 12.1c11.1-5.279 17.44-19.22 12.15-31.18L401.9 258.5c5.438-1.512 10.86-3.078 16.52-4.021c16.8-2.797 31.88-9.459 45.02-18.54l13.33 12.02c9.289 8.395 24.37 8.439 33.54-1.648c8.814-9.68 8.072-24.62-1.654-33.38l-12.95-11.68c11.32-18.9 16.99-41.02 15.52-64.23l15.81-4.681C539.6 128.6 546.7 115.4 543 102.9zM192 368c-26.51 0-48.01-21.49-48.01-48s21.5-48 48.01-48S240.1 293.5 240.1 320S218.6 368 192 368zM272 232c-13.25 0-23.92-10.75-23.92-24c0-13.26 10.67-23.1 23.92-23.1c13.26 0 23.1 10.74 23.1 23.1C295.1 221.3 285.3 232 272 232z\"],\n    \"bag-shopping\": [448, 512, [\"shopping-bag\"], \"f290\", \"M112 112C112 50.14 162.1 0 224 0C285.9 0 336 50.14 336 112V160H400C426.5 160 448 181.5 448 208V416C448 469 405 512 352 512H96C42.98 512 0 469 0 416V208C0 181.5 21.49 160 48 160H112V112zM160 160H288V112C288 76.65 259.3 48 224 48C188.7 48 160 76.65 160 112V160zM136 256C149.3 256 160 245.3 160 232C160 218.7 149.3 208 136 208C122.7 208 112 218.7 112 232C112 245.3 122.7 256 136 256zM312 208C298.7 208 288 218.7 288 232C288 245.3 298.7 256 312 256C325.3 256 336 245.3 336 232C336 218.7 325.3 208 312 208z\"],\n    \"bahai\": [512, 512, [], \"f666\", \"M496.3 202.5l-110-15.38l41.88-104.4c6.625-16.63-11.63-32.25-26.63-22.63L307.5 120l-34.13-107.1C270.6 4.25 263.4 0 255.1 0C248.6 0 241.4 4.25 238.6 12.88L204.5 120L110.5 60.12c-15-9.5-33.22 5.1-26.6 22.63l41.85 104.4L15.71 202.5C-1.789 205-5.915 228.8 9.71 237.2l98.14 52.63l-74.51 83.5c-10.88 12.25-1.78 31 13.35 31c1.25 0 2.657-.25 4.032-.5l108.6-23.63l-4.126 112.5C154.7 504.4 164.1 512 173.6 512c5.125 0 10.38-2.25 14.25-7.25l68.13-88.88l68.23 88.88C327.1 509.8 333.2 512 338.4 512c9.5 0 18.88-7.625 18.38-19.25l-4.032-112.5l108.5 23.63c17.38 3.75 29.25-17.25 17.38-30.5l-74.51-83.5l98.14-52.72C517.9 228.8 513.8 205 496.3 202.5zM338.5 311.6L286.6 300.4l2 53.75l-32.63-42.5l-32.63 42.5l2-53.75L173.5 311.6l35.63-39.87L162.1 246.6L214.7 239.2L194.7 189.4l45 28.63L255.1 166.8l16.25 51.25l45-28.63L297.2 239.2l52.63 7.375l-47 25.13L338.5 311.6z\"],\n    \"baht-sign\": [320, 512, [], \"e0ac\", \"M176 32V64C237.9 64 288 114.1 288 176C288 200.2 280.3 222.6 267.3 240.9C298.9 260.7 320 295.9 320 336C320 397.9 269.9 448 208 448H176V480C176 497.7 161.7 512 144 512C126.3 512 112 497.7 112 480V448H41.74C18.69 448 0 429.3 0 406.3V101.6C0 80.82 16.82 64 37.57 64H112V32C112 14.33 126.3 0 144 0C161.7 0 176 14.33 176 32V32zM112 128H64V224H112V128zM224 176C224 149.5 202.5 128 176 128V224C202.5 224 224 202.5 224 176zM112 288H64V384H112V288zM208 384C234.5 384 256 362.5 256 336C256 309.5 234.5 288 208 288H176V384H208z\"],\n    \"ban\": [512, 512, [128683, \"cancel\"], \"f05e\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM99.5 144.8C77.15 176.1 64 214.5 64 256C64 362 149.1 448 256 448C297.5 448 335.9 434.9 367.2 412.5L99.5 144.8zM448 256C448 149.1 362 64 256 64C214.5 64 176.1 77.15 144.8 99.5L412.5 367.2C434.9 335.9 448 297.5 448 256V256z\"],\n    \"ban-smoking\": [512, 512, [128685, \"smoking-ban\"], \"f54d\", \"M96 304C96 312.8 103.3 320 112 320h117.5l-96-96H112C103.3 224 96 231.3 96 240V304zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 448c-105.9 0-192-86.13-192-192c0-41.38 13.25-79.75 35.75-111.1l267.4 267.4C335.8 434.8 297.4 448 256 448zM301.2 256H384v32h-50.81L301.2 256zM412.3 367.1L365.2 320H400c8.75 0 16-7.25 16-16v-64C416 231.3 408.8 224 400 224h-130.8L144.9 99.75C176.3 77.25 214.6 64 256 64C361.9 64 448 150.1 448 256C448 297.4 434.8 335.8 412.3 367.1zM320.6 128C305 128 292 116.8 289.3 102.1C288.5 98.5 285.3 96 281.5 96h-16.25c-5 0-8.625 4.5-8 9.375C261.9 136.3 288.5 160 320.6 160C336.3 160 349.3 171.3 352 185.9C352.8 189.5 356 192 359.8 192h16.17c5 0 8.708-4.5 7.958-9.375C379.3 151.7 352.8 128 320.6 128z\"],\n    \"bandage\": [640, 512, [129657, \"band-aid\"], \"f462\", \"M480 96H576C611.3 96 640 124.7 640 160V352C640 387.3 611.3 416 576 416H480V96zM448 416H192V96H448V416zM272 184C258.7 184 248 194.7 248 208C248 221.3 258.7 232 272 232C285.3 232 296 221.3 296 208C296 194.7 285.3 184 272 184zM368 232C381.3 232 392 221.3 392 208C392 194.7 381.3 184 368 184C354.7 184 344 194.7 344 208C344 221.3 354.7 232 368 232zM272 280C258.7 280 248 290.7 248 304C248 317.3 258.7 328 272 328C285.3 328 296 317.3 296 304C296 290.7 285.3 280 272 280zM368 328C381.3 328 392 317.3 392 304C392 290.7 381.3 280 368 280C354.7 280 344 290.7 344 304C344 317.3 354.7 328 368 328zM64 96H160V416H64C28.65 416 0 387.3 0 352V160C0 124.7 28.65 96 64 96z\"],\n    \"barcode\": [512, 512, [], \"f02a\", \"M40 32C53.25 32 64 42.75 64 56V456C64 469.3 53.25 480 40 480H24C10.75 480 0 469.3 0 456V56C0 42.75 10.75 32 24 32H40zM128 48V464C128 472.8 120.8 480 112 480C103.2 480 96 472.8 96 464V48C96 39.16 103.2 32 112 32C120.8 32 128 39.16 128 48zM200 32C213.3 32 224 42.75 224 56V456C224 469.3 213.3 480 200 480H184C170.7 480 160 469.3 160 456V56C160 42.75 170.7 32 184 32H200zM296 32C309.3 32 320 42.75 320 56V456C320 469.3 309.3 480 296 480H280C266.7 480 256 469.3 256 456V56C256 42.75 266.7 32 280 32H296zM448 56C448 42.75 458.7 32 472 32H488C501.3 32 512 42.75 512 56V456C512 469.3 501.3 480 488 480H472C458.7 480 448 469.3 448 456V56zM384 48C384 39.16 391.2 32 400 32C408.8 32 416 39.16 416 48V464C416 472.8 408.8 480 400 480C391.2 480 384 472.8 384 464V48z\"],\n    \"bars\": [448, 512, [\"navicon\"], \"f0c9\", \"M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM0 256C0 238.3 14.33 224 32 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H32C14.33 288 0 273.7 0 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z\"],\n    \"bars-progress\": [512, 512, [\"tasks-alt\"], \"f828\", \"M464 64C490.5 64 512 85.49 512 112V176C512 202.5 490.5 224 464 224H48C21.49 224 0 202.5 0 176V112C0 85.49 21.49 64 48 64H464zM448 128H320V160H448V128zM464 288C490.5 288 512 309.5 512 336V400C512 426.5 490.5 448 464 448H48C21.49 448 0 426.5 0 400V336C0 309.5 21.49 288 48 288H464zM192 352V384H448V352H192z\"],\n    \"bars-staggered\": [512, 512, [\"reorder\", \"stream\"], \"f550\", \"M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM64 256C64 238.3 78.33 224 96 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H96C78.33 288 64 273.7 64 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z\"],\n    \"baseball\": [512, 512, [129358, 9918, \"baseball-ball\"], \"f433\", \"M429.6 272.9c0-16.26 16.36-16.81 29.99-16.81l2.931 .0029c16.64 0 33.14 2.056 49.2 5.834C511.7 259.9 512 258 512 256c0-141.4-114.6-256-256-256C253.9 0 251.1 .2578 249.9 .3047c3.658 15.51 6.111 31.34 6.111 47.54c0 6-.2813 12.03-.7813 18C254.6 74.19 247.6 80.5 239.3 80.5c-6.091 0-16.03-4.68-16.03-15.97c0-1.733 .7149-7.153 .7149-16.69c0-15.26-2.389-30.18-6.225-44.69C106.9 19.79 19.5 107.3 3.08 218.3c14.44 3.819 29.38 5.79 44.45 5.79c10.07 0 15.59-.811 17.42-.811c6.229 0 16.49 4.657 16.49 15.99c0 16.11-16.13 16.77-29.73 16.77L48.16 256c-16.33 0-32.25-2.445-47.85-6.109C.2578 251.1 0 253.9 0 256c0 141.4 114.6 256 256 256c2.066 0 4.062-.2578 6.117-.3086C258.5 496.2 256 480.4 256 464.2c0-5.688 .25-11.38 .7187-17.03c.6964-8.538 8.287-14.61 16.49-14.61c7.1 0 15.44 6.938 15.44 15.92c0 2.358-.6524 5.88-.6524 15.72c0 15.25 2.383 30.16 6.209 44.66c110.8-16.63 198.2-104.1 214.7-215c-14.55-3.851-29.59-5.871-44.74-5.871c-10.47 0-16.24 .895-18.13 .895C443.3 288.9 429.6 286.5 429.6 272.9zM238.2 128.9c0 27.78-78.3 108.1-108.6 108.1c-8.612 0-16.01-6.963-16.01-15.98c0-6.002 3.394-11.75 9.163-14.49c80.3-38.08 76.21-94.5 99.39-94.5C234.7 112.8 238.2 124.2 238.2 128.9zM397.5 290.6c0 5.965-3.364 11.68-9.131 14.43c-78.82 37.57-75.92 95-98.94 95c-12.58 0-16.01-11.54-16.01-16.03c0-28 78.29-109.4 108.1-109.4C390.8 274.6 397.5 282.3 397.5 290.6z\"],\n    \"baseball-bat-ball\": [640, 512, [], \"f432\", \"M57.89 397.2c-6.262-8.616-16.02-13.19-25.92-13.19c-23.33 0-31.98 20.68-31.98 32.03c0 6.522 1.987 13.1 6.115 18.78l46.52 64C58.89 507.4 68.64 512 78.55 512c23.29 0 31.97-20.66 31.97-32.03c0-6.522-1.988-13.1-6.115-18.78L57.89 397.2zM496.1 352c-44.13 0-79.72 35.75-79.72 80s35.59 80 79.72 80s79.91-35.75 79.91-80S540.2 352 496.1 352zM640 99.38c0-13.61-4.133-27.34-12.72-39.2l-23.63-32.5c-13.44-18.5-33.77-27.68-54.12-27.68c-13.89 0-27.79 4.281-39.51 12.8L307.8 159.7C262.2 192.8 220.4 230.9 183.4 273.4c-24.22 27.88-59.18 63.99-103.5 99.63l56.34 77.52c53.79-35.39 99.15-55.3 127.1-67.27c51.88-22 101.3-49.87 146.9-82.1l202.3-146.7C630.5 140.4 640 120 640 99.38z\"],\n    \"basket-shopping\": [576, 512, [\"shopping-basket\"], \"f291\", \"M171.7 191.1H404.3L322.7 35.07C316.6 23.31 321.2 8.821 332.9 2.706C344.7-3.409 359.2 1.167 365.3 12.93L458.4 191.1H544C561.7 191.1 576 206.3 576 223.1C576 241.7 561.7 255.1 544 255.1L492.1 463.5C484.1 492 459.4 512 430 512H145.1C116.6 512 91 492 83.88 463.5L32 255.1C14.33 255.1 0 241.7 0 223.1C0 206.3 14.33 191.1 32 191.1H117.6L210.7 12.93C216.8 1.167 231.3-3.409 243.1 2.706C254.8 8.821 259.4 23.31 253.3 35.07L171.7 191.1zM191.1 303.1C191.1 295.1 184.8 287.1 175.1 287.1C167.2 287.1 159.1 295.1 159.1 303.1V399.1C159.1 408.8 167.2 415.1 175.1 415.1C184.8 415.1 191.1 408.8 191.1 399.1V303.1zM271.1 303.1V399.1C271.1 408.8 279.2 415.1 287.1 415.1C296.8 415.1 304 408.8 304 399.1V303.1C304 295.1 296.8 287.1 287.1 287.1C279.2 287.1 271.1 295.1 271.1 303.1zM416 303.1C416 295.1 408.8 287.1 400 287.1C391.2 287.1 384 295.1 384 303.1V399.1C384 408.8 391.2 415.1 400 415.1C408.8 415.1 416 408.8 416 399.1V303.1z\"],\n    \"basketball\": [512, 512, [127936, \"basketball-ball\"], \"f434\", \"M148.7 171.3L64.21 86.83c-28.39 32.16-48.9 71.38-58.3 114.8C19.41 205.4 33.34 208 48 208C86.34 208 121.1 193.9 148.7 171.3zM194.5 171.9L256 233.4l169.2-169.2C380 24.37 320.9 0 256 0C248.6 0 241.2 .4922 233.1 1.113C237.8 16.15 240 31.8 240 48C240 95.19 222.8 138.4 194.5 171.9zM208 48c0-14.66-2.623-28.59-6.334-42.09C158.2 15.31 118.1 35.82 86.83 64.21l84.48 84.48C193.9 121.1 208 86.34 208 48zM171.9 194.5C138.4 222.8 95.19 240 48 240c-16.2 0-31.85-2.236-46.89-6.031C.4922 241.2 0 248.6 0 256c0 64.93 24.37 124 64.21 169.2L233.4 256L171.9 194.5zM317.5 340.1L256 278.6l-169.2 169.2C131.1 487.6 191.1 512 256 512c7.438 0 14.75-.4922 22.03-1.113C274.2 495.8 272 480.2 272 464C272 416.8 289.2 373.6 317.5 340.1zM363.3 340.7l84.48 84.48c28.39-32.16 48.9-71.38 58.3-114.8C492.6 306.6 478.7 304 464 304C425.7 304 390.9 318.1 363.3 340.7zM447.8 86.83L278.6 256l61.52 61.52C373.6 289.2 416.8 272 464 272c16.2 0 31.85 2.236 46.89 6.031C511.5 270.8 512 263.4 512 256C512 191.1 487.6 131.1 447.8 86.83zM304 464c0 14.66 2.623 28.59 6.334 42.09c43.46-9.4 82.67-29.91 114.8-58.3l-84.48-84.48C318.1 390.9 304 425.7 304 464z\"],\n    \"bath\": [512, 512, [128705, \"bathtub\"], \"f2cd\", \"M32 384c0 28.32 12.49 53.52 32 71.09V496C64 504.8 71.16 512 80 512h32C120.8 512 128 504.8 128 496v-15.1h256V496c0 8.836 7.164 16 16 16h32c8.836 0 16-7.164 16-16v-40.9c19.51-17.57 32-42.77 32-71.09V352H32V384zM496 256H96V77.25C95.97 66.45 111 60.23 118.6 67.88L132.4 81.66C123.6 108.6 129.4 134.5 144.2 153.2C137.9 159.5 137.8 169.8 144 176l11.31 11.31c6.248 6.248 16.38 6.248 22.63 0l105.4-105.4c6.248-6.248 6.248-16.38 0-22.63l-11.31-11.31c-6.248-6.248-16.38-6.248-22.63 0C230.7 33.26 204.7 27.55 177.7 36.41L163.9 22.64C149.5 8.25 129.6 0 109.3 0C66.66 0 32 34.66 32 77.25v178.8L16 256C7.164 256 0 263.2 0 272v32C0 312.8 7.164 320 16 320h480c8.836 0 16-7.164 16-16v-32C512 263.2 504.8 256 496 256z\"],\n    \"battery-empty\": [576, 512, [\"battery-0\"], \"f244\", \"M464 96C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176C0 131.8 35.82 96 80 96H464zM64 336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80C71.16 160 64 167.2 64 176V336z\"],\n    \"battery-full\": [576, 512, [128267, \"battery\", \"battery-5\"], \"f240\", \"M448 320H96V192H448V320zM0 176C0 131.8 35.82 96 80 96H464C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176zM80 160C71.16 160 64 167.2 64 176V336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80z\"],\n    \"battery-half\": [576, 512, [\"battery-3\"], \"f242\", \"M288 320H96V192H288V320zM0 176C0 131.8 35.82 96 80 96H464C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176zM80 160C71.16 160 64 167.2 64 176V336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80z\"],\n    \"battery-quarter\": [576, 512, [\"battery-2\"], \"f243\", \"M192 320H96V192H192V320zM0 176C0 131.8 35.82 96 80 96H464C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176zM80 160C71.16 160 64 167.2 64 176V336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80z\"],\n    \"battery-three-quarters\": [576, 512, [\"battery-4\"], \"f241\", \"M352 320H96V192H352V320zM0 176C0 131.8 35.82 96 80 96H464C508.2 96 544 131.8 544 176V192C561.7 192 576 206.3 576 224V288C576 305.7 561.7 320 544 320V336C544 380.2 508.2 416 464 416H80C35.82 416 0 380.2 0 336V176zM80 160C71.16 160 64 167.2 64 176V336C64 344.8 71.16 352 80 352H464C472.8 352 480 344.8 480 336V176C480 167.2 472.8 160 464 160H80z\"],\n    \"bed\": [640, 512, [128716], \"f236\", \"M176 288C220.1 288 256 252.1 256 208S220.1 128 176 128S96 163.9 96 208S131.9 288 176 288zM544 128H304C295.2 128 288 135.2 288 144V320H64V48C64 39.16 56.84 32 48 32h-32C7.163 32 0 39.16 0 48v416C0 472.8 7.163 480 16 480h32C56.84 480 64 472.8 64 464V416h512v48c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V224C640 170.1 597 128 544 128z\"],\n    \"bed-pulse\": [640, 512, [\"procedures\"], \"f487\", \"M96 318.3v1.689h1.689C97.12 319.4 96.56 318.9 96 318.3zM176 320c44.13 0 80-35.88 80-79.1s-35.88-79.1-80-79.1S96 195.9 96 240S131.9 320 176 320zM256 318.3C255.4 318.9 254.9 319.4 254.3 320H256V318.3zM544 160h-82.1L450.7 183.9C441.5 203.2 421.8 215.8 400 216c-21.23 0-40.97-12.31-50.3-31.35l-12.08-24.64H304c-8.836 0-16 7.161-16 15.1v175.1L64 352V80.01c0-8.834-7.164-15.1-16-15.1h-32c-8.836 0-16 7.163-16 15.1V496C0 504.8 7.164 512 16 512h32C56.84 512 64 504.8 64 496v-47.1h512V496c0 8.836 7.164 16 16 16h32c8.836 0 16-7.164 16-16V256C640 202.1 597 160 544 160zM624 48.01h-115.2l-24.88-37.31c-2.324-3.48-5.539-6.131-9.158-7.977c-1.172-.6016-2.486-.5508-3.738-.9512C468.8 1.035 466.5 0 464.1 0c-.625 0-1.25 .0254-1.875 .0781c-8.625 .6406-16.25 5.876-19.94 13.7l-42.72 90.81l-21.12-43.12c-4.027-8.223-12.39-13.44-21.54-13.44L208 48.02C199.2 48.01 192 55.18 192 64.02v15.99c0 8.836 7.163 15.1 15.1 16l133.1 .0091l36.46 74.55C382.5 178.8 390.8 184 400 184c9.219-.0781 17.78-5.438 21.72-13.78l45.91-97.52l8.406 12.62C480.5 91.1 487.1 96.01 496 96.01h128c8.836 0 16-7.164 16-16V64.01C640 55.18 632.8 48.01 624 48.01z\"],\n    \"beer-mug-empty\": [512, 512, [\"beer\"], \"f0fc\", \"M432 96H384V64c0-17.67-14.33-32-32-32H64C46.33 32 32 46.33 32 64v352c0 35.35 28.65 64 64 64h224c35.35 0 64-28.65 64-64v-32.08l80.66-35.94C493.5 335.1 512 306.5 512 275V176C512 131.8 476.2 96 432 96zM160 368C160 376.9 152.9 384 144 384S128 376.9 128 368v-224C128 135.1 135.1 128 144 128S160 135.1 160 144V368zM224 368C224 376.9 216.9 384 208 384S192 376.9 192 368v-224C192 135.1 199.1 128 208 128S224 135.1 224 144V368zM288 368c0 8.875-7.125 16-16 16S256 376.9 256 368v-224C256 135.1 263.1 128 272 128S288 135.1 288 144V368zM448 275c0 6.25-3.75 12-9.5 14.62L384 313.9V160h48C440.9 160 448 167.1 448 176V275z\"],\n    \"bell\": [448, 512, [61602, 128276], \"f0f3\", \"M256 32V51.2C329 66.03 384 130.6 384 208V226.8C384 273.9 401.3 319.2 432.5 354.4L439.9 362.7C448.3 372.2 450.4 385.6 445.2 397.1C440 408.6 428.6 416 416 416H32C19.4 416 7.971 408.6 2.809 397.1C-2.353 385.6-.2883 372.2 8.084 362.7L15.5 354.4C46.74 319.2 64 273.9 64 226.8V208C64 130.6 118.1 66.03 192 51.2V32C192 14.33 206.3 0 224 0C241.7 0 256 14.33 256 32H256zM224 512C207 512 190.7 505.3 178.7 493.3C166.7 481.3 160 464.1 160 448H288C288 464.1 281.3 481.3 269.3 493.3C257.3 505.3 240.1 512 224 512z\"],\n    \"bell-concierge\": [512, 512, [128718, \"concierge-bell\"], \"f562\", \"M280 145.3V112h16C309.3 112 320 101.3 320 88S309.3 64 296 64H215.1C202.7 64 192 74.75 192 87.1S202.7 112 215.1 112H232v33.32C119.6 157.3 32 252.4 32 368h448C480 252.4 392.4 157.3 280 145.3zM488 400h-464C10.75 400 0 410.7 0 423.1C0 437.3 10.75 448 23.1 448h464c13.25 0 24-10.75 24-23.1C512 410.7 501.3 400 488 400z\"],\n    \"bell-slash\": [640, 512, [61943, 128277], \"f1f6\", \"M186 120.5C209 85.38 245.4 59.84 288 51.2V32C288 14.33 302.3 .0003 320 .0003C337.7 .0003 352 14.33 352 32V51.2C425 66.03 480 130.6 480 208V226.8C480 273.9 497.3 319.2 528.5 354.4L535.9 362.7C544.3 372.2 546.4 385.6 541.2 397.1C540.1 397.5 540.8 397.1 540.6 398.4L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L186 120.5zM160 226.8V222.1L406.2 416H128C115.4 416 103.1 408.6 98.81 397.1C93.65 385.6 95.71 372.2 104.1 362.7L111.5 354.4C142.7 319.2 160 273.9 160 226.8V226.8zM320 512C303 512 286.7 505.3 274.7 493.3C262.7 481.3 256 464.1 256 448H384C384 464.1 377.3 481.3 365.3 493.3C353.3 505.3 336.1 512 320 512z\"],\n    \"bezier-curve\": [640, 512, [], \"f55b\", \"M352 32C378.5 32 400 53.49 400 80V84H518.4C528.8 62.69 550.7 48 576 48C611.3 48 640 76.65 640 112C640 147.3 611.3 176 576 176C550.7 176 528.8 161.3 518.4 140H451.5C510.4 179.6 550.4 244.1 555.5 320H560C586.5 320 608 341.5 608 368V432C608 458.5 586.5 480 560 480H496C469.5 480 448 458.5 448 432V368C448 341.5 469.5 320 496 320H499.3C493.4 253 450.8 196.6 391.8 170.9C383.1 183.6 368.6 192 352 192H288C271.4 192 256.9 183.6 248.2 170.9C189.2 196.6 146.6 253 140.7 320H144C170.5 320 192 341.5 192 368V432C192 458.5 170.5 480 144 480H80C53.49 480 32 458.5 32 432V368C32 341.5 53.49 320 80 320H84.53C89.56 244.1 129.6 179.6 188.5 140H121.6C111.2 161.3 89.3 176 64 176C28.65 176 0 147.3 0 112C0 76.65 28.65 48 64 48C89.3 48 111.2 62.69 121.6 84H240V80C240 53.49 261.5 32 288 32H352zM296 136H344V88H296V136zM88 376V424H136V376H88zM552 424V376H504V424H552z\"],\n    \"bicycle\": [640, 512, [128690], \"f206\", \"M347.2 32C358.1 32 369.8 38.44 375.4 48.78L473.3 229.1C485.5 226.1 498.5 224 512 224C582.7 224 640 281.3 640 352C640 422.7 582.7 480 512 480C441.3 480 384 422.7 384 352C384 311.1 402.4 276.3 431.1 252.8L409.4 212.7L324.7 356.2C320.3 363.5 312.5 368 304 368H255C247.1 431.1 193.3 480 128 480C57.31 480 0 422.7 0 352C0 281.3 57.31 224 128 224C138.7 224 149.2 225.3 159.2 227.8L185.8 174.7L163.7 144H120C106.7 144 96 133.3 96 120C96 106.7 106.7 96 120 96H176C183.7 96 190.1 99.71 195.5 105.1L222.9 144H372.3L337.7 80H311.1C298.7 80 287.1 69.25 287.1 56C287.1 42.75 298.7 32 311.1 32H347.2zM440 352C440 391.8 472.2 424 512 424C551.8 424 584 391.8 584 352C584 312.2 551.8 280 512 280C508.2 280 504.5 280.3 500.8 280.9L533.1 340.6C539.4 352.2 535.1 366.8 523.4 373.1C511.8 379.4 497.2 375.1 490.9 363.4L458.6 303.7C447 316.5 440 333.4 440 352V352zM108.8 328.6L133.1 280.2C131.4 280.1 129.7 280 127.1 280C88.24 280 55.1 312.2 55.1 352C55.1 391.8 88.24 424 127.1 424C162.3 424 190.9 400.1 198.2 368H133.2C112.1 368 99.81 346.7 108.8 328.6H108.8zM290.3 320L290.4 319.9L217.5 218.7L166.8 320H290.3zM257.4 192L317 274.8L365.9 192H257.4z\"],\n    \"binoculars\": [512, 512, [], \"f1e5\", \"M416 48C416 39.13 408.9 32 400 32h-64C327.1 32 320 39.13 320 48V96h96.04L416 48zM63.88 160.1C61.34 253.9 3.5 274.3 0 404V448c0 17.6 14.4 32 32 32h128c17.6 0 32-14.4 32-32V128H95.88C78.26 128 64.35 142.5 63.88 160.1zM448.1 160.1C447.6 142.5 433.7 128 416.1 128H320v320c0 17.6 14.4 32 32 32h128c17.6 0 32-14.4 32-32v-44C508.5 274.3 450.7 253.9 448.1 160.1zM224 288h64V128H224V288zM176 32h-64C103.1 32 96 39.13 96 48L95.96 96H192V48C192 39.13 184.9 32 176 32z\"],\n    \"biohazard\": [576, 512, [9763], \"f780\", \"M575.5 283.5c-13.13-39.11-39.5-71.98-74.13-92.35c-17.5-10.37-36.25-16.62-55.25-19.87c6-17.75 10-36.49 10-56.24c0-40.99-14.5-80.73-41-112.2c-2.5-3-6.625-3.623-10-1.75c-3.25 1.875-4.75 5.998-3.625 9.748c4.5 13.75 6.625 26.24 6.625 38.49c0 67.73-53.76 122.8-120 122.8s-120-55.11-120-122.8c0-12.12 2.25-24.74 6.625-38.49c1.125-3.75-.375-7.873-3.625-9.748c-3.375-1.873-7.502-1.25-10 1.75C134.7 34.3 120.1 74.04 120.1 115c0 19.75 3.875 38.49 10 56.24C111.2 174.5 92.32 180.8 74.82 191.1c-34.63 20.49-61.01 53.24-74.38 92.35c-1.25 3.75 .25 7.748 3.5 9.748c3.375 2 7.5 1.375 10-1.5c9.377-10.87 19-19.12 29.25-25.12c57.25-33.87 130.8-13.75 163.9 44.99c33.13 58.61 13.38 133.1-43.88 167.8c-10.25 6.123-22 10.37-35.88 13.37c-3.627 .875-6.377 4.25-6.377 8.123c.125 4 2.75 7.248 6.502 7.998c39.75 7.748 80.63 .7495 115.3-19.74c18-10.5 32.88-24.49 45.25-39.99c12.38 15.5 27.38 29.49 45.38 39.99c34.5 20.49 75.51 27.49 115.1 19.74c3.875-.75 6.375-3.998 6.5-7.998c0-3.873-2.625-7.248-6.375-8.123c-13.88-2.873-25.63-7.248-35.75-13.37c-57.38-33.87-77.01-109.2-44-167.8c33.13-58.73 106.6-78.85 164-44.99c10.12 6.123 19.75 14.25 29.13 25.12c2.5 2.875 6.752 3.5 10 1.5C575.4 291.2 576.9 287.2 575.5 283.5zM287.1 320.1c-26.5 0-48-21.49-48-47.99c0-26.49 21.5-47.99 48-47.99c26.5 0 48.01 21.49 48.01 47.99C335.1 298.6 314.5 320.1 287.1 320.1zM385 377.6c1.152 22.77 10.74 44.63 27.22 60.92c47.45-35.44 79.13-90.58 83.1-153.4c-22.58-6.173-45.69-2.743-65.57 8.76C424.7 326.9 408.5 355.1 385 377.6zM253.3 132.6c26.22-6.551 45.37-6.024 69.52 .0254c21.93-9.777 39.07-28.55 47.48-51.75C345 69.98 317.3 63.94 288.1 63.94c-29.18 0-56.96 5.986-82.16 16.84C214.3 103.1 231.4 122.8 253.3 132.6zM163.8 438.5c16.46-16.26 26.03-38.19 27.14-61.01c-23.49-21.59-39.59-50.67-44.71-83.6C126.9 282.7 103.8 278.8 80.67 285.1C84.64 347.9 116.3 403.1 163.8 438.5z\"],\n    \"bitcoin-sign\": [320, 512, [], \"e0b4\", \"M48 32C48 14.33 62.33 0 80 0C97.67 0 112 14.33 112 32V64H144V32C144 14.33 158.3 0 176 0C193.7 0 208 14.33 208 32V64C208 65.54 207.9 67.06 207.7 68.54C254.1 82.21 288 125.1 288 176C288 200.2 280.3 222.6 267.3 240.9C298.9 260.7 320 295.9 320 336C320 397.9 269.9 448 208 448V480C208 497.7 193.7 512 176 512C158.3 512 144 497.7 144 480V448H112V480C112 497.7 97.67 512 80 512C62.33 512 48 497.7 48 480V448H41.74C18.69 448 0 429.3 0 406.3V101.6C0 80.82 16.82 64 37.57 64H48V32zM176 224C202.5 224 224 202.5 224 176C224 149.5 202.5 128 176 128H64V224H176zM64 288V384H208C234.5 384 256 362.5 256 336C256 309.5 234.5 288 208 288H64z\"],\n    \"blender\": [512, 512, [], \"f517\", \"M336 64h158.5L512 0H48C21.49 0 0 21.49 0 48v160C0 234.5 21.49 256 48 256h103.3L160 352h256l17.49-64H336C327.2 288 320 280.8 320 272S327.2 256 336 256h106.1l17.49-64H336C327.2 192 320 184.8 320 176S327.2 160 336 160h132.4l17.49-64H336C327.2 96 320 88.8 320 80S327.2 64 336 64zM64 192V64h69.88L145.5 192H64zM416 384H160c-35.38 0-64 28.62-64 64l-.0001 32c0 17.62 14.38 32 32 32h320c17.62 0 32-14.38 32-32l.0003-32C480 412.6 451.4 384 416 384zM288 480c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S305.6 480 288 480z\"],\n    \"blender-phone\": [576, 512, [], \"f6b6\", \"M158.7 334.1L132.1 271.7C130.2 264.1 123.2 260.7 115.7 261.5l-45 4.374c-17.25-46.87-17.63-99.74 0-147.6l45 4.374C123.2 123.4 130.2 119.1 132.1 112.4l25.75-63.25C161.9 41.76 158.1 33.26 152.1 29.01L112.9 4.887C98.49-3.863 80.12-.4886 68.99 12.01C-23.64 115.6-23.01 271.5 70.99 374.5c9.875 10.75 29.13 12.5 41.75 4.75l39.38-24.12C158.1 350.9 161.7 342.4 158.7 334.1zM479.1 384H224c-35.38 0-63.1 28.62-63.1 63.1l-.0052 32c0 17.62 14.37 31.1 31.1 31.1L511.1 512c17.63 0 32-14.38 32-31.1l.0019-31.1C543.1 412.6 515.4 384 479.1 384zM352 480c-17.63 0-31.1-14.38-31.1-31.1c0-17.62 14.37-31.1 31.1-31.1s31.1 14.38 31.1 31.1C384 465.6 369.6 480 352 480zM399.1 64h158.5L576 .008L191.1 .006l-.0023 351.1h288l17.49-64h-97.49c-8.801 0-16-7.199-16-15.1c0-8.799 7.199-15.1 16-15.1h106.1l17.49-63.1h-123.6c-8.801 0-16-7.199-16-15.1c0-8.799 7.199-15.1 16-15.1h132.4l17.49-63.1h-149.9c-8.801 0-16-7.199-16-15.1C383.1 71.2 391.2 64 399.1 64z\"],\n    \"blog\": [512, 512, [], \"f781\", \"M217.6 96.1c-12.95-.625-24.66 9.156-25.52 22.37C191.2 131.7 201.2 143.1 214.4 143.1c79.53 5.188 148.4 74.09 153.6 153.6c.8281 12.69 11.39 22.43 23.94 22.43c.5156 0 1.047-.0313 1.578-.0625c13.22-.8438 23.25-12.28 22.39-25.5C409.3 191.8 320.3 102.8 217.6 96.1zM224 0C206.3 0 192 14.31 192 32s14.33 32 32 32c123.5 0 224 100.5 224 224c0 17.69 14.33 32 32 32s32-14.31 32-32C512 129.2 382.8 0 224 0zM172.3 226.8C157.7 223.9 144 235.8 144 250.6v50.37c0 10.25 7.127 18.37 16.75 21.1c18.13 6.75 31.26 24.38 31.26 44.1c0 26.5-21.5 47.1-48.01 47.1c-26.5 0-48.01-21.5-48.01-47.1V120c0-13.25-10.75-23.1-24.01-23.1l-48.01 .0076C10.75 96.02 0 106.8 0 120v247.1c0 89.5 82.14 160.2 175 140.7c54.38-11.5 98.27-55.5 109.8-109.7C302.2 316.1 247.8 241.8 172.3 226.8z\"],\n    \"bold\": [384, 512, [], \"f032\", \"M321.1 242.4C340.1 220.1 352 191.6 352 160c0-70.59-57.42-128-128-128L32 32.01c-17.67 0-32 14.31-32 32s14.33 32 32 32h16v320H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h224c70.58 0 128-57.41 128-128C384 305.3 358.6 264.8 321.1 242.4zM112 96.01H224c35.3 0 64 28.72 64 64s-28.7 64-64 64H112V96.01zM256 416H112v-128H256c35.3 0 64 28.71 64 63.1S291.3 416 256 416z\"],\n    \"bolt\": [384, 512, [9889, \"zap\"], \"f0e7\", \"M240.5 224H352C365.3 224 377.3 232.3 381.1 244.7C386.6 257.2 383.1 271.3 373.1 280.1L117.1 504.1C105.8 513.9 89.27 514.7 77.19 505.9C65.1 497.1 60.7 481.1 66.59 467.4L143.5 288H31.1C18.67 288 6.733 279.7 2.044 267.3C-2.645 254.8 .8944 240.7 10.93 231.9L266.9 7.918C278.2-1.92 294.7-2.669 306.8 6.114C318.9 14.9 323.3 30.87 317.4 44.61L240.5 224z\"],\n    \"bolt-lightning\": [384, 512, [], \"e0b7\", \"M381.2 172.8C377.1 164.9 368.9 160 360 160h-156.6l50.84-127.1c2.969-7.375 2.062-15.78-2.406-22.38S239.1 0 232 0h-176C43.97 0 33.81 8.906 32.22 20.84l-32 240C-.7179 267.7 1.376 274.6 5.938 279.8C10.5 285 17.09 288 24 288h146.3l-41.78 194.1c-2.406 11.22 3.469 22.56 14 27.09C145.6 511.4 148.8 512 152 512c7.719 0 15.22-3.75 19.81-10.44l208-304C384.8 190.2 385.4 180.7 381.2 172.8z\"],\n    \"bomb\": [512, 512, [128163], \"f1e2\", \"M440.8 4.994C441.9 1.99 444.8 0 448 0C451.2 0 454.1 1.99 455.2 4.994L469.3 42.67L507 56.79C510 57.92 512 60.79 512 64C512 67.21 510 70.08 507 71.21L469.3 85.33L455.2 123C454.1 126 451.2 128 448 128C444.8 128 441.9 126 440.8 123L426.7 85.33L388.1 71.21C385.1 70.08 384 67.21 384 64C384 60.79 385.1 57.92 388.1 56.79L426.7 42.67L440.8 4.994zM289.4 97.37C301.9 84.88 322.1 84.88 334.6 97.37L363.3 126.1L380.7 108.7C386.9 102.4 397.1 102.4 403.3 108.7C409.6 114.9 409.6 125.1 403.3 131.3L385.9 148.7L414.6 177.4C427.1 189.9 427.1 210.1 414.6 222.6L403.8 233.5C411.7 255.5 416 279.3 416 304C416 418.9 322.9 512 208 512C93.12 512 0 418.9 0 304C0 189.1 93.12 96 208 96C232.7 96 256.5 100.3 278.5 108.3L289.4 97.37zM95.1 296C95.1 238.6 142.6 192 199.1 192H207.1C216.8 192 223.1 184.8 223.1 176C223.1 167.2 216.8 160 207.1 160H199.1C124.9 160 63.1 220.9 63.1 296V304C63.1 312.8 71.16 320 79.1 320C88.84 320 95.1 312.8 95.1 304V296z\"],\n    \"bone\": [576, 512, [129460], \"f5d7\", \"M534.9 267.5C560.1 280 576 305.8 576 334v4.387c0 35.55-23.49 68.35-58.24 75.88c-38.18 8.264-74.96-13.73-86.76-49.14c-.0352-.1035-.0684-.207-.1035-.3125C425.3 347.7 409.6 336 391.6 336H184.4c-17.89 0-33.63 11.57-39.23 28.56L145 365.1c-11.8 35.41-48.58 57.4-86.76 49.14C23.49 406.7 0 373.9 0 338.4v-4.387C0 305.8 15.88 280 41.13 267.5c9.375-4.75 9.375-18.25 0-23C15.88 232 0 206.3 0 178V173.6c0-35.55 23.49-68.35 58.24-75.88c38.18-8.264 74.99 13.82 86.79 49.23C150.7 164.1 166.4 176 184.4 176h207.2c17.89 0 33.63-11.57 39.23-28.56L431 146.9c11.8-35.41 48.58-57.4 86.76-49.14C552.5 105.3 576 138.1 576 173.6v4.387C576 206.3 560.1 232 534.9 244.5C525.5 249.3 525.5 262.8 534.9 267.5z\"],\n    \"bong\": [512, 512, [], \"f55c\", \"M334.5 512c23.12 0 44.38-12.62 56-32.63C406.8 451.2 416 418.8 416 384c0-36.13-10.11-69.75-27.49-98.63l43.5-43.37l9.376 9.375c6.25 6.25 16.38 6.25 22.63 0L475.3 240c6.25-6.25 6.25-16.38 0-22.62l-52.63-52.75c-6.25-6.25-16.38-6.25-22.63 0L388.6 176c-6.25 6.25-6.25 16.38 0 22.62L398 208l-39.38 39.38c-11.5-11.38-24.51-21.25-38.63-29.5l.0067-154.1h16c8.75 0 16-7.25 16-16L352 16.01C352 7.14 344.9 0 336 0L111.1 .1667c-8.75 0-15.99 7.11-15.99 15.99L96 48c0 8.875 7.126 16 16 16h16L128 217.9C70.63 251.1 32 313 32 384c0 34.75 9.252 67.25 25.5 95.38C69.13 499.4 90.38 512 113.5 512H334.5zM152 259.4l23.97-13.87V64.03L272 63.75l.0168 181.8l23.97 13.87C320.7 273.8 340 295.1 352.5 320H95.51C108 295.1 127.3 273.8 152 259.4z\"],\n    \"book\": [448, 512, [128212], \"f02d\", \"M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM143.1 128h192C344.8 128 352 135.2 352 144C352 152.8 344.8 160 336 160H143.1C135.2 160 128 152.8 128 144C128 135.2 135.2 128 143.1 128zM143.1 192h192C344.8 192 352 199.2 352 208C352 216.8 344.8 224 336 224H143.1C135.2 224 128 216.8 128 208C128 199.2 135.2 192 143.1 192zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448z\"],\n    \"book-atlas\": [448, 512, [\"atlas\"], \"f558\", \"M240 97.25C232.3 104.8 219.3 131.8 216.6 176h46.88C260.8 131.8 247.8 104.8 240 97.25zM334.4 176c-5.25-31.25-25.62-57.13-53.25-70.38C288.8 124.6 293.8 149 295.3 176H334.4zM334.4 208h-39.13c-1.5 27-6.5 51.38-14.12 70.38C308.8 265.1 329.1 239.3 334.4 208zM263.4 208H216.5C219.3 252.3 232.3 279.3 240 286.8C247.8 279.3 260.8 252.3 263.4 208zM198.9 105.6C171.3 118.9 150.9 144.8 145.6 176h39.13C186.3 149 191.3 124.6 198.9 105.6zM448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-32c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM240 64c70.75 0 128 57.25 128 128s-57.25 128-128 128s-128-57.25-128-128S169.3 64 240 64zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448zM198.9 278.4C191.3 259.4 186.3 235 184.8 208H145.6C150.9 239.3 171.3 265.1 198.9 278.4z\"],\n    \"book-bible\": [448, 512, [\"bible\"], \"f647\", \"M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM144 144c0-8.875 7.125-15.1 16-15.1L208 128V80c0-8.875 7.125-15.1 16-15.1l32 .0009c8.875 0 16 7.12 16 15.1V128L320 128c8.875 0 16 7.121 16 15.1v32c0 8.875-7.125 16-16 16L272 192v112c0 8.875-7.125 16-16 16l-32-.0002c-8.875 0-16-7.127-16-16V192L160 192c-8.875 0-16-7.127-16-16V144zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448z\"],\n    \"book-journal-whills\": [448, 512, [\"journal-whills\"], \"f66a\", \"M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM133.1 160.4l21.25 21.25c3.125 3.125 8.125 3.125 11.25 0s3.125-8.125 0-11.25l-26.38-26.5c10-20.75 26.25-38 46.38-49.25c-17 27.12-11 62.75 14 82.63C185.5 192 180.5 213.1 186.5 232.5c5.875 19.38 22 34.13 41.88 38.25l1.375-32.75L219.4 245.1C218.8 245.5 217.9 245.8 217.1 245.8c-1 0-2-.375-2.75-1c-.75-.875-1.25-1.875-1.25-3c0-.625 .25-1.375 .5-2L222.3 225.5l-18-3.75c-1.75-.375-3.125-2.125-3.125-4s1.375-3.5 3.125-3.875l18-3.75L213.6 195.9C212.8 194.3 213 192.1 214.4 190.9s3.5-1.5 5-.375l12 8.125L236 87.88C236.1 85.63 237.9 84 240 84s3.875 1.625 4 3.875l4.75 112.3l14.12-9.625c.625-.5 1.5-.625 2.25-.75c1.5 0 2.75 .75 3.5 2s.625 2.875-.125 4.125L260 210.1l17.1 3.75c1.75 .375 3.125 2 3.125 3.875s-1.375 3.625-3.125 4L260 225.4l8.5 14.38c.75 1.25 .875 2.75 .125 4s-2 2-3.5 2c-.75 0-1.625-.25-2.25-.625L250.3 236.5l1.375 34.25c19.88-4.125 36-18.88 41.88-38.25c6-19.38 1-40.63-13.12-55.25c25-19.88 31-55.5 14-82.63c20.25 11.25 36.38 28.5 46.38 49.25l-26.38 26.5c-3.125 3.125-3.125 8.125 0 11.25s8.125 3.125 11.25 0l21.25-21.25C349.9 170.5 352 181 352 192c0 .5-.125 1-.125 1.5l-37.13 32.5C313.1 227.6 312.1 229.8 312 232c.125 1.875 .7496 3.75 1.1 5.25C315.6 238.9 317.8 239.9 320 240c1.1 0 3.875-.7499 5.25-1.1l23.62-20.63C337.3 267 293.1 304 240 304S142.8 267 131.1 217.4l23.62 20.63C156.3 239.3 158.1 239.9 160 240c3.375 0 6.25-2.125 7.5-5.125c1.125-3.125 .25-6.75-2.25-8.875L128.1 193.5C128.1 193 128 192.5 128 192C128 181 130.1 170.5 133.1 160.4zM384 448H96c-17.67 0-32-14.33-32-32s14.33-32 32-32h288V448z\"],\n    \"book-medical\": [448, 512, [], \"f7e6\", \"M448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM128 166c0-8.838 7.164-16 16-16h53.1V96c0-8.838 7.164-16 16-16h52c8.836 0 16 7.162 16 16v54H336c8.836 0 16 7.162 16 16v52c0 8.836-7.164 16-16 16h-54V288c0 8.836-7.164 16-16 16h-52c-8.836 0-16-7.164-16-16V234H144c-8.836 0-16-7.164-16-16V166zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448z\"],\n    \"book-open\": [576, 512, [128366, 128214], \"f518\", \"M144.3 32.04C106.9 31.29 63.7 41.44 18.6 61.29c-11.42 5.026-18.6 16.67-18.6 29.15l0 357.6c0 11.55 11.99 19.55 22.45 14.65c126.3-59.14 219.8 11 223.8 14.01C249.1 478.9 252.5 480 256 480c12.4 0 16-11.38 16-15.98V80.04c0-5.203-2.531-10.08-6.781-13.08C263.3 65.58 216.7 33.35 144.3 32.04zM557.4 61.29c-45.11-19.79-88.48-29.61-125.7-29.26c-72.44 1.312-118.1 33.55-120.9 34.92C306.5 69.96 304 74.83 304 80.04v383.1C304 468.4 307.5 480 320 480c3.484 0 6.938-1.125 9.781-3.328c3.925-3.018 97.44-73.16 223.8-14c10.46 4.896 22.45-3.105 22.45-14.65l.0001-357.6C575.1 77.97 568.8 66.31 557.4 61.29z\"],\n    \"book-open-reader\": [512, 512, [\"book-reader\"], \"f5da\", \"M0 219.2v212.5c0 14.25 11.62 26.25 26.5 27C75.32 461.2 180.2 471.3 240 511.9V245.2C181.4 205.5 79.99 194.8 29.84 192C13.59 191.1 0 203.6 0 219.2zM482.2 192c-50.09 2.848-151.3 13.47-209.1 53.09C272.1 245.2 272 245.3 272 245.5v266.5c60.04-40.39 164.7-50.76 213.5-53.28C500.4 457.9 512 445.9 512 431.7V219.2C512 203.6 498.4 191.1 482.2 192zM352 96c0-53-43-96-96-96S160 43 160 96s43 96 96 96S352 149 352 96z\"],\n    \"book-quran\": [448, 512, [\"quran\"], \"f687\", \"M352 0H48C21.49 0 0 21.49 0 48v288c0 14.16 6.246 26.76 16 35.54v81.36C6.607 458.5 0 468.3 0 479.1C0 497.7 14.33 512 31.1 512h320c53.02 0 96-42.98 96-96V96C448 42.98 405 0 352 0zM324.8 170.4c3.006 .4297 4.295 4.154 2.004 6.301L306.2 196.9l4.869 28.5c.4297 2.434-1.576 4.439-3.725 4.439c-.5723 0-1.145-.1445-1.719-.4297L280 215.9l-25.63 13.46c-.5723 .2852-1.145 .4297-1.719 .4297c-2.146 0-4.152-2.006-3.723-4.439l4.869-28.5l-20.62-20.19c-2.291-2.146-1.002-5.871 2.006-6.301l28.64-4.152l12.89-25.92C277.3 138.9 278.7 138.2 280 138.2s2.721 .7168 3.295 2.148l12.89 25.92L324.8 170.4zM216 72c23.66 0 46.61 6.953 66.36 20.09c3.219 2.141 4.438 6.281 2.906 9.844c-1.547 3.547-5.453 5.562-9.172 4.594C268.8 104.8 262.2 104 256 104C207.5 104 168 143.5 168 192S207.5 280 256 280c6.234 0 12.81-.8281 20.09-2.531c3.719-.9687 7.625 1.047 9.172 4.594c1.531 3.562 .3125 7.703-2.906 9.844C262.6 305 239.7 312 216 312C149.8 312 96 258.2 96 192S149.8 72 216 72zM352 448H64v-64h288c17.67 0 32 14.33 32 32C384 433.7 369.7 448 352 448z\"],\n    \"book-skull\": [448, 512, [\"book-dead\"], \"f6b7\", \"M272 144C280.8 144 288 136.8 288 128s-7.25-16-16-16S256 119.3 256 128S263.3 144 272 144zM448 336v-288C448 21.49 426.5 0 400 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h320c17.67 0 32-14.33 32-31.1c0-11.72-6.607-21.52-16-27.1v-81.36C441.8 362.8 448 350.2 448 336zM240 64C284.3 64 320 92.75 320 128c0 20.88-12.75 39.25-32 50.88V192c0 8.75-7.25 16-16 16h-64C199.3 208 192 200.8 192 192V178.9C172.8 167.3 160 148.9 160 128C160 92.75 195.8 64 240 64zM121.7 238.7c-8.125-3.484-11.91-12.89-8.438-21.02c3.469-8.094 12.94-11.86 21-8.422L240 254.5l105.7-45.21c8.031-3.438 17.53 .3281 21 8.422c3.469 8.125-.3125 17.53-8.438 21.02l-77.58 33.18l77.58 33.18c8.125 3.484 11.91 12.89 8.438 21.02C364.1 332.2 358.2 335.8 352 335.8c-2.094 0-4.25-.4062-6.281-1.281L240 289.3l-105.7 45.21C132.3 335.4 130.1 335.8 128 335.8c-6.219 0-12.12-3.641-14.72-9.703C109.8 317.1 113.6 308.6 121.7 305.1l77.58-33.18L121.7 238.7zM384 448H96c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32h288V448zM208 144C216.8 144 224 136.8 224 128S216.8 112 208 112S192 119.3 192 128S199.3 144 208 144z\"],\n    \"bookmark\": [384, 512, [61591, 128278], \"f02e\", \"M384 48V512l-192-112L0 512V48C0 21.5 21.5 0 48 0h288C362.5 0 384 21.5 384 48z\"],\n    \"border-all\": [448, 512, [], \"f84c\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM384 96H256V224H384V96zM384 288H256V416H384V288zM192 224V96H64V224H192zM64 416H192V288H64V416z\"],\n    \"border-none\": [448, 512, [], \"f850\", \"M64 448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416C49.67 416 64 430.3 64 448zM128 480C110.3 480 96 465.7 96 448C96 430.3 110.3 416 128 416C145.7 416 160 430.3 160 448C160 465.7 145.7 480 128 480zM128 96C110.3 96 96 81.67 96 64C96 46.33 110.3 32 128 32C145.7 32 160 46.33 160 64C160 81.67 145.7 96 128 96zM160 256C160 273.7 145.7 288 128 288C110.3 288 96 273.7 96 256C96 238.3 110.3 224 128 224C145.7 224 160 238.3 160 256zM320 480C302.3 480 288 465.7 288 448C288 430.3 302.3 416 320 416C337.7 416 352 430.3 352 448C352 465.7 337.7 480 320 480zM352 64C352 81.67 337.7 96 320 96C302.3 96 288 81.67 288 64C288 46.33 302.3 32 320 32C337.7 32 352 46.33 352 64zM320 288C302.3 288 288 273.7 288 256C288 238.3 302.3 224 320 224C337.7 224 352 238.3 352 256C352 273.7 337.7 288 320 288zM256 448C256 465.7 241.7 480 224 480C206.3 480 192 465.7 192 448C192 430.3 206.3 416 224 416C241.7 416 256 430.3 256 448zM224 96C206.3 96 192 81.67 192 64C192 46.33 206.3 32 224 32C241.7 32 256 46.33 256 64C256 81.67 241.7 96 224 96zM256 256C256 273.7 241.7 288 224 288C206.3 288 192 273.7 192 256C192 238.3 206.3 224 224 224C241.7 224 256 238.3 256 256zM416 480C398.3 480 384 465.7 384 448C384 430.3 398.3 416 416 416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480zM416 96C398.3 96 384 81.67 384 64C384 46.33 398.3 32 416 32C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96zM64 64C64 81.67 49.67 96 32 96C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32C49.67 32 64 46.33 64 64zM416 288C398.3 288 384 273.7 384 256C384 238.3 398.3 224 416 224C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288zM64 256C64 273.7 49.67 288 32 288C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224C49.67 224 64 238.3 64 256zM224 384C206.3 384 192 369.7 192 352C192 334.3 206.3 320 224 320C241.7 320 256 334.3 256 352C256 369.7 241.7 384 224 384zM448 352C448 369.7 433.7 384 416 384C398.3 384 384 369.7 384 352C384 334.3 398.3 320 416 320C433.7 320 448 334.3 448 352zM32 384C14.33 384 0 369.7 0 352C0 334.3 14.33 320 32 320C49.67 320 64 334.3 64 352C64 369.7 49.67 384 32 384zM448 160C448 177.7 433.7 192 416 192C398.3 192 384 177.7 384 160C384 142.3 398.3 128 416 128C433.7 128 448 142.3 448 160zM32 192C14.33 192 0 177.7 0 160C0 142.3 14.33 128 32 128C49.67 128 64 142.3 64 160C64 177.7 49.67 192 32 192zM256 160C256 177.7 241.7 192 224 192C206.3 192 192 177.7 192 160C192 142.3 206.3 128 224 128C241.7 128 256 142.3 256 160z\"],\n    \"border-top-left\": [448, 512, [\"border-style\"], \"f853\", \"M0 112C0 67.82 35.82 32 80 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H80C71.16 96 64 103.2 64 112V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448V112zM128 480C110.3 480 96 465.7 96 448C96 430.3 110.3 416 128 416C145.7 416 160 430.3 160 448C160 465.7 145.7 480 128 480zM320 480C302.3 480 288 465.7 288 448C288 430.3 302.3 416 320 416C337.7 416 352 430.3 352 448C352 465.7 337.7 480 320 480zM256 448C256 465.7 241.7 480 224 480C206.3 480 192 465.7 192 448C192 430.3 206.3 416 224 416C241.7 416 256 430.3 256 448zM416 480C398.3 480 384 465.7 384 448C384 430.3 398.3 416 416 416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480zM416 288C398.3 288 384 273.7 384 256C384 238.3 398.3 224 416 224C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288zM448 352C448 369.7 433.7 384 416 384C398.3 384 384 369.7 384 352C384 334.3 398.3 320 416 320C433.7 320 448 334.3 448 352zM416 192C398.3 192 384 177.7 384 160C384 142.3 398.3 128 416 128C433.7 128 448 142.3 448 160C448 177.7 433.7 192 416 192z\"],\n    \"bowling-ball\": [512, 512, [], \"f436\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM144 208c-17.7 0-32-14.25-32-32s14.3-32 32-32s32 14.25 32 32S161.7 208 144 208zM240 80c17.66 0 31.95 14.25 31.95 32s-14.29 32-31.95 32s-32.05-14.25-32.05-32S222.4 80 240 80zM240 240c-17.7 0-32-14.25-32-32s14.3-32 32-32s32 14.25 32 32S257.7 240 240 240z\"],\n    \"box\": [448, 512, [128230], \"f466\", \"M50.73 58.53C58.86 42.27 75.48 32 93.67 32H208V160H0L50.73 58.53zM240 160V32H354.3C372.5 32 389.1 42.27 397.3 58.53L448 160H240zM448 416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V192H448V416z\"],\n    \"box-archive\": [512, 512, [\"archive\"], \"f187\", \"M32 432C32 458.5 53.49 480 80 480h352c26.51 0 48-21.49 48-48V160H32V432zM160 236C160 229.4 165.4 224 172 224h168C346.6 224 352 229.4 352 236v8C352 250.6 346.6 256 340 256h-168C165.4 256 160 250.6 160 244V236zM480 32H32C14.31 32 0 46.31 0 64v48C0 120.8 7.188 128 16 128h480C504.8 128 512 120.8 512 112V64C512 46.31 497.7 32 480 32z\"],\n    \"box-open\": [640, 512, [], \"f49e\", \"M75.23 33.4L320 63.1L564.8 33.4C571.5 32.56 578 36.06 581.1 42.12L622.8 125.5C631.7 143.4 622.2 165.1 602.9 170.6L439.6 217.3C425.7 221.2 410.8 215.4 403.4 202.1L320 63.1L236.6 202.1C229.2 215.4 214.3 221.2 200.4 217.3L37.07 170.6C17.81 165.1 8.283 143.4 17.24 125.5L58.94 42.12C61.97 36.06 68.5 32.56 75.23 33.4H75.23zM321.1 128L375.9 219.4C390.8 244.2 420.5 255.1 448.4 248L576 211.6V378.5C576 400.5 561 419.7 539.6 425.1L335.5 476.1C325.3 478.7 314.7 478.7 304.5 476.1L100.4 425.1C78.99 419.7 64 400.5 64 378.5V211.6L191.6 248C219.5 255.1 249.2 244.2 264.1 219.4L318.9 128H321.1z\"],\n    \"box-tissue\": [512, 512, [], \"e05b\", \"M384 288l64-192h-109.4C308.4 96 281.6 76.66 272 48C262.4 19.33 235.6 0 205.4 0H64l64 288H384zM0 480c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-64H0V480zM480 224h-40.94l-21.33 64H432C440.8 288 448 295.2 448 304S440.8 320 432 320h-352C71.16 320 64 312.8 64 304S71.16 288 80 288h15.22l-14.22-64H32C14.33 224 0 238.3 0 256v128h512V256C512 238.3 497.7 224 480 224z\"],\n    \"boxes-stacked\": [576, 512, [62625, \"boxes\", \"boxes-alt\"], \"f468\", \"M160 48C160 21.49 181.5 0 208 0H256V80C256 88.84 263.2 96 272 96H304C312.8 96 320 88.84 320 80V0H368C394.5 0 416 21.49 416 48V176C416 202.5 394.5 224 368 224H208C181.5 224 160 202.5 160 176V48zM96 288V368C96 376.8 103.2 384 112 384H144C152.8 384 160 376.8 160 368V288H208C234.5 288 256 309.5 256 336V464C256 490.5 234.5 512 208 512H48C21.49 512 0 490.5 0 464V336C0 309.5 21.49 288 48 288H96zM416 288V368C416 376.8 423.2 384 432 384H464C472.8 384 480 376.8 480 368V288H528C554.5 288 576 309.5 576 336V464C576 490.5 554.5 512 528 512H368C341.5 512 320 490.5 320 464V336C320 309.5 341.5 288 368 288H416z\"],\n    \"braille\": [640, 512, [], \"f2a1\", \"M128 96C128 131.3 99.35 160 64 160C28.65 160 0 131.3 0 96C0 60.65 28.65 32 64 32C99.35 32 128 60.65 128 96zM160 256C160 220.7 188.7 192 224 192C259.3 192 288 220.7 288 256C288 291.3 259.3 320 224 320C188.7 320 160 291.3 160 256zM224 272C232.8 272 240 264.8 240 256C240 247.2 232.8 240 224 240C215.2 240 208 247.2 208 256C208 264.8 215.2 272 224 272zM128 416C128 451.3 99.35 480 64 480C28.65 480 0 451.3 0 416C0 380.7 28.65 352 64 352C99.35 352 128 380.7 128 416zM64 400C55.16 400 48 407.2 48 416C48 424.8 55.16 432 64 432C72.84 432 80 424.8 80 416C80 407.2 72.84 400 64 400zM288 416C288 451.3 259.3 480 224 480C188.7 480 160 451.3 160 416C160 380.7 188.7 352 224 352C259.3 352 288 380.7 288 416zM224 400C215.2 400 208 407.2 208 416C208 424.8 215.2 432 224 432C232.8 432 240 424.8 240 416C240 407.2 232.8 400 224 400zM0 256C0 220.7 28.65 192 64 192C99.35 192 128 220.7 128 256C128 291.3 99.35 320 64 320C28.65 320 0 291.3 0 256zM160 96C160 60.65 188.7 32 224 32C259.3 32 288 60.65 288 96C288 131.3 259.3 160 224 160C188.7 160 160 131.3 160 96zM480 96C480 131.3 451.3 160 416 160C380.7 160 352 131.3 352 96C352 60.65 380.7 32 416 32C451.3 32 480 60.65 480 96zM640 96C640 131.3 611.3 160 576 160C540.7 160 512 131.3 512 96C512 60.65 540.7 32 576 32C611.3 32 640 60.65 640 96zM576 80C567.2 80 560 87.16 560 96C560 104.8 567.2 112 576 112C584.8 112 592 104.8 592 96C592 87.16 584.8 80 576 80zM512 256C512 220.7 540.7 192 576 192C611.3 192 640 220.7 640 256C640 291.3 611.3 320 576 320C540.7 320 512 291.3 512 256zM576 272C584.8 272 592 264.8 592 256C592 247.2 584.8 240 576 240C567.2 240 560 247.2 560 256C560 264.8 567.2 272 576 272zM640 416C640 451.3 611.3 480 576 480C540.7 480 512 451.3 512 416C512 380.7 540.7 352 576 352C611.3 352 640 380.7 640 416zM576 400C567.2 400 560 407.2 560 416C560 424.8 567.2 432 576 432C584.8 432 592 424.8 592 416C592 407.2 584.8 400 576 400zM352 256C352 220.7 380.7 192 416 192C451.3 192 480 220.7 480 256C480 291.3 451.3 320 416 320C380.7 320 352 291.3 352 256zM416 272C424.8 272 432 264.8 432 256C432 247.2 424.8 240 416 240C407.2 240 400 247.2 400 256C400 264.8 407.2 272 416 272zM480 416C480 451.3 451.3 480 416 480C380.7 480 352 451.3 352 416C352 380.7 380.7 352 416 352C451.3 352 480 380.7 480 416zM416 400C407.2 400 400 407.2 400 416C400 424.8 407.2 432 416 432C424.8 432 432 424.8 432 416C432 407.2 424.8 400 416 400z\"],\n    \"brain\": [512, 512, [129504], \"f5dc\", \"M184 0C214.9 0 240 25.07 240 56V456C240 486.9 214.9 512 184 512C155.1 512 131.3 490.1 128.3 461.9C123.1 463.3 117.6 464 112 464C76.65 464 48 435.3 48 400C48 392.6 49.27 385.4 51.59 378.8C21.43 367.4 0 338.2 0 304C0 272.1 18.71 244.5 45.77 231.7C37.15 220.8 32 206.1 32 192C32 161.3 53.59 135.7 82.41 129.4C80.84 123.9 80 118 80 112C80 82.06 100.6 56.92 128.3 49.93C131.3 21.86 155.1 0 184 0zM383.7 49.93C411.4 56.92 432 82.06 432 112C432 118 431.2 123.9 429.6 129.4C458.4 135.7 480 161.3 480 192C480 206.1 474.9 220.8 466.2 231.7C493.3 244.5 512 272.1 512 304C512 338.2 490.6 367.4 460.4 378.8C462.7 385.4 464 392.6 464 400C464 435.3 435.3 464 400 464C394.4 464 388.9 463.3 383.7 461.9C380.7 490.1 356.9 512 328 512C297.1 512 272 486.9 272 456V56C272 25.07 297.1 0 328 0C356.9 0 380.7 21.86 383.7 49.93z\"],\n    \"brazilian-real-sign\": [512, 512, [], \"e46c\", \"M400 .0003C417.7 .0003 432 14.33 432 32V50.22C444.5 52.52 456.7 56.57 468.2 62.3L478.3 67.38C494.1 75.28 500.5 94.5 492.6 110.3C484.7 126.1 465.5 132.5 449.7 124.6L439.5 119.5C429.6 114.6 418.7 112 407.6 112H405.9C376.1 112 352 136.1 352 165.9C352 187.9 365.4 207.7 385.9 215.9L437.9 236.7C482.7 254.6 512 297.9 512 346.1V349.5C512 400.7 478.4 444.1 432 458.7V480C432 497.7 417.7 512 400 512C382.3 512 368 497.7 368 480V460.6C352.1 457.1 338.6 450.9 325.7 442.3L302.2 426.6C287.5 416.8 283.6 396.1 293.4 382.2C303.2 367.5 323 363.6 337.8 373.4L361.2 389C371.9 396.2 384.6 400 397.5 400C425.4 400 448 377.4 448 349.5V346.1C448 324.1 434.6 304.3 414.1 296.1L362.1 275.3C317.3 257.4 288 214.1 288 165.9C288 114 321.5 69.99 368 54.21V32C368 14.33 382.3 0 400 0L400 .0003zM.0003 64C.0003 46.33 14.33 32 32 32H112C191.5 32 256 96.47 256 176C256 234.8 220.8 285.3 170.3 307.7L221.7 436.1C228.3 452.5 220.3 471.1 203.9 477.7C187.5 484.3 168.9 476.3 162.3 459.9L106.3 320H64V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448L.0003 64zM64 256H112C156.2 256 192 220.2 192 176C192 131.8 156.2 96 112 96H64V256z\"],\n    \"bread-slice\": [512, 512, [], \"f7ec\", \"M512 176.1C512 203 490.4 224 455.1 224H448v224c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32V224H56.89C21.56 224 0 203 0 176.1C0 112 96 32 256 32S512 112 512 176.1z\"],\n    \"briefcase\": [512, 512, [128188], \"f0b1\", \"M320 336c0 8.844-7.156 16-16 16h-96C199.2 352 192 344.8 192 336V288H0v144C0 457.6 22.41 480 48 480h416c25.59 0 48-22.41 48-48V288h-192V336zM464 96H384V48C384 22.41 361.6 0 336 0h-160C150.4 0 128 22.41 128 48V96H48C22.41 96 0 118.4 0 144V256h512V144C512 118.4 489.6 96 464 96zM336 96h-160V48h160V96z\"],\n    \"briefcase-medical\": [512, 512, [], \"f469\", \"M464 96H384V48C384 21.5 362.5 0 336 0h-160C149.5 0 128 21.5 128 48V96H48C21.5 96 0 117.5 0 144v288C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-288C512 117.5 490.5 96 464 96zM176 48h160V96h-160V48zM368 314c0 8.836-7.164 16-16 16h-54V384c0 8.836-7.164 16-15.1 16h-52c-8.835 0-16-7.164-16-16v-53.1H160c-8.836 0-16-7.164-16-16v-52c0-8.838 7.164-16 16-16h53.1V192c0-8.838 7.165-16 16-16h52c8.836 0 15.1 7.162 15.1 16v54H352c8.836 0 16 7.162 16 16V314z\"],\n    \"broom\": [640, 512, [129529], \"f51a\", \"M93.13 257.7C71.25 275.1 53 313.5 38.63 355.1L99 333.1c5.75-2.125 10.62 4.749 6.625 9.499L11 454.7C3.75 486.1 0 510.2 0 510.2s206.6 13.62 266.6-34.12c60-47.87 76.63-150.1 76.63-150.1L256.5 216.7C256.5 216.7 153.1 209.1 93.13 257.7zM633.2 12.34c-10.84-13.91-30.91-16.45-44.91-5.624l-225.7 175.6l-34.99-44.06C322.5 131.9 312.5 133.1 309 140.5L283.8 194.1l86.75 109.2l58.75-12.5c8-1.625 11.38-11.12 6.375-17.5l-33.19-41.79l225.2-175.2C641.6 46.38 644.1 26.27 633.2 12.34z\"],\n    \"broom-ball\": [640, 512, [\"quidditch\", \"quidditch-broom-ball\"], \"f458\", \"M495.1 351.1c-44.18 0-79.1 35.72-79.1 79.91c0 44.18 35.82 80.09 79.1 80.09s79.1-35.91 79.1-80.09C575.1 387.7 540.2 351.1 495.1 351.1zM242.7 216.4c-30.16 0-102.9 4.15-149.4 41.34c-22 17.5-40.25 55.75-54.63 97.5l60.38-22.12c.7363-.2715 1.46-.3967 2.151-.3967c3.33 0 5.935 2.885 5.935 6.039c0 1.301-.4426 2.647-1.462 3.856L11 454.7C3.75 487.1 0 510.2 0 510.2S27.07 512 64.45 512c65.94 0 163.1-5.499 202.2-35.89c60-47.75 76.63-150.1 76.63-150.1l-86.75-109.2C256.5 216.7 251.4 216.4 242.7 216.4zM607.1 .0074c-6.863 0-13.78 2.192-19.62 6.719L362.7 182.3l-29.88-37.67c-3.248-4.094-7.892-6.058-12.5-6.058c-5.891 0-11.73 3.204-14.54 9.26L283.8 195.1l86.75 109.1l50.88-10.72c7.883-1.66 12.72-8.546 12.72-15.71c0-3.412-1.096-6.886-3.478-9.89l-28.16-35.5l225.2-175.2c8.102-6.312 12.35-15.75 12.35-25.29C640 14.94 626.3 .0074 607.1 .0074z\"],\n    \"brush\": [384, 512, [], \"f55d\", \"M224 0H336C362.5 0 384 21.49 384 48V256H0V48C0 21.49 21.49 0 48 0H64L96 64L128 0H160L192 64L224 0zM384 288V320C384 355.3 355.3 384 320 384H256V448C256 483.3 227.3 512 192 512C156.7 512 128 483.3 128 448V384H64C28.65 384 0 355.3 0 320V288H384zM192 464C200.8 464 208 456.8 208 448C208 439.2 200.8 432 192 432C183.2 432 176 439.2 176 448C176 456.8 183.2 464 192 464z\"],\n    \"bug\": [512, 512, [], \"f188\", \"M352 96V99.56C352 115.3 339.3 128 323.6 128H188.4C172.7 128 159.1 115.3 159.1 99.56V96C159.1 42.98 202.1 0 255.1 0C309 0 352 42.98 352 96zM41.37 105.4C53.87 92.88 74.13 92.88 86.63 105.4L150.6 169.4C151.3 170 151.9 170.7 152.5 171.4C166.8 164.1 182.9 160 199.1 160H312C329.1 160 345.2 164.1 359.5 171.4C360.1 170.7 360.7 170 361.4 169.4L425.4 105.4C437.9 92.88 458.1 92.88 470.6 105.4C483.1 117.9 483.1 138.1 470.6 150.6L406.6 214.6C405.1 215.3 405.3 215.9 404.6 216.5C410.7 228.5 414.6 241.9 415.7 256H480C497.7 256 512 270.3 512 288C512 305.7 497.7 320 480 320H416C416 344.6 410.5 367.8 400.6 388.6C402.7 389.9 404.8 391.5 406.6 393.4L470.6 457.4C483.1 469.9 483.1 490.1 470.6 502.6C458.1 515.1 437.9 515.1 425.4 502.6L362.3 439.6C337.8 461.4 306.5 475.8 272 479.2V240C272 231.2 264.8 224 255.1 224C247.2 224 239.1 231.2 239.1 240V479.2C205.5 475.8 174.2 461.4 149.7 439.6L86.63 502.6C74.13 515.1 53.87 515.1 41.37 502.6C28.88 490.1 28.88 469.9 41.37 457.4L105.4 393.4C107.2 391.5 109.3 389.9 111.4 388.6C101.5 367.8 96 344.6 96 320H32C14.33 320 0 305.7 0 288C0 270.3 14.33 256 32 256H96.3C97.38 241.9 101.3 228.5 107.4 216.5C106.7 215.9 106 215.3 105.4 214.6L41.37 150.6C28.88 138.1 28.88 117.9 41.37 105.4H41.37z\"],\n    \"bug-slash\": [640, 512, [], \"e490\", \"M239.1 162.8C247.7 160.1 255.7 160 264 160H376C393.1 160 409.2 164.1 423.5 171.4C424.1 170.7 424.7 170 425.4 169.4L489.4 105.4C501.9 92.88 522.1 92.88 534.6 105.4C547.1 117.9 547.1 138.1 534.6 150.6L470.6 214.6C469.1 215.3 469.3 215.9 468.6 216.5C474.7 228.5 478.6 241.9 479.7 256H544C561.7 256 576 270.3 576 288C576 305.7 561.7 320 544 320H480C480 329.9 479.1 339.5 477.4 348.9L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L239.1 162.8zM416 96V99.56C416 115.3 403.3 128 387.6 128H252.4C236.7 128 224 115.3 224 99.56V96C224 42.98 266.1 .001 320 .001C373 .001 416 42.98 416 96V96zM160.3 256C161.1 245.1 163.3 236.3 166.7 227.3L304 335.5V479.2C269.5 475.8 238.2 461.4 213.7 439.6L150.6 502.6C138.1 515.1 117.9 515.1 105.4 502.6C92.88 490.1 92.88 469.9 105.4 457.4L169.4 393.4C171.2 391.5 173.3 389.9 175.4 388.6C165.5 367.8 160 344.6 160 320H96C78.33 320 64 305.7 64 288C64 270.3 78.33 256 96 256H160.3zM336 479.2V360.7L430.8 435.4C405.7 459.6 372.7 475.6 336 479.2V479.2z\"],\n    \"building\": [384, 512, [61687, 127970], \"f1ad\", \"M336 0C362.5 0 384 21.49 384 48V464C384 490.5 362.5 512 336 512H240V432C240 405.5 218.5 384 192 384C165.5 384 144 405.5 144 432V512H48C21.49 512 0 490.5 0 464V48C0 21.49 21.49 0 48 0H336zM64 272C64 280.8 71.16 288 80 288H112C120.8 288 128 280.8 128 272V240C128 231.2 120.8 224 112 224H80C71.16 224 64 231.2 64 240V272zM176 224C167.2 224 160 231.2 160 240V272C160 280.8 167.2 288 176 288H208C216.8 288 224 280.8 224 272V240C224 231.2 216.8 224 208 224H176zM256 272C256 280.8 263.2 288 272 288H304C312.8 288 320 280.8 320 272V240C320 231.2 312.8 224 304 224H272C263.2 224 256 231.2 256 240V272zM80 96C71.16 96 64 103.2 64 112V144C64 152.8 71.16 160 80 160H112C120.8 160 128 152.8 128 144V112C128 103.2 120.8 96 112 96H80zM160 144C160 152.8 167.2 160 176 160H208C216.8 160 224 152.8 224 144V112C224 103.2 216.8 96 208 96H176C167.2 96 160 103.2 160 112V144zM272 96C263.2 96 256 103.2 256 112V144C256 152.8 263.2 160 272 160H304C312.8 160 320 152.8 320 144V112C320 103.2 312.8 96 304 96H272z\"],\n    \"building-columns\": [512, 512, [\"bank\", \"institution\", \"museum\", \"university\"], \"f19c\", \"M243.4 2.587C251.4-.8625 260.6-.8625 268.6 2.587L492.6 98.59C506.6 104.6 514.4 119.6 511.3 134.4C508.3 149.3 495.2 159.1 479.1 160V168C479.1 181.3 469.3 192 455.1 192H55.1C42.74 192 31.1 181.3 31.1 168V160C16.81 159.1 3.708 149.3 .6528 134.4C-2.402 119.6 5.429 104.6 19.39 98.59L243.4 2.587zM256 128C273.7 128 288 113.7 288 96C288 78.33 273.7 64 256 64C238.3 64 224 78.33 224 96C224 113.7 238.3 128 256 128zM127.1 416H167.1V224H231.1V416H280V224H344V416H384V224H448V420.3C448.6 420.6 449.2 420.1 449.8 421.4L497.8 453.4C509.5 461.2 514.7 475.8 510.6 489.3C506.5 502.8 494.1 512 480 512H31.1C17.9 512 5.458 502.8 1.372 489.3C-2.715 475.8 2.515 461.2 14.25 453.4L62.25 421.4C62.82 420.1 63.41 420.6 63.1 420.3V224H127.1V416z\"],\n    \"bullhorn\": [512, 512, [128363, 128226], \"f0a1\", \"M480 179.6C498.6 188.4 512 212.1 512 240C512 267.9 498.6 291.6 480 300.4V448C480 460.9 472.2 472.6 460.2 477.6C448.3 482.5 434.5 479.8 425.4 470.6L381.7 426.1C333.7 378.1 268.6 352 200.7 352H192V480C192 497.7 177.7 512 160 512H96C78.33 512 64 497.7 64 480V352C28.65 352 0 323.3 0 288V192C0 156.7 28.65 128 64 128H200.7C268.6 128 333.7 101 381.7 53.02L425.4 9.373C434.5 .2215 448.3-2.516 460.2 2.437C472.2 7.39 480 19.06 480 32V179.6zM200.7 192H192V288H200.7C280.5 288 357.2 317.8 416 371.3V108.7C357.2 162.2 280.5 192 200.7 192V192z\"],\n    \"bullseye\": [512, 512, [], \"f140\", \"M288 256C288 273.7 273.7 288 256 288C238.3 288 224 273.7 224 256C224 238.3 238.3 224 256 224C273.7 224 288 238.3 288 256zM112 256C112 176.5 176.5 112 256 112C335.5 112 400 176.5 400 256C400 335.5 335.5 400 256 400C176.5 400 112 335.5 112 256zM256 336C300.2 336 336 300.2 336 256C336 211.8 300.2 176 256 176C211.8 176 176 211.8 176 256C176 300.2 211.8 336 256 336zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 64C149.1 64 64 149.1 64 256C64 362 149.1 448 256 448C362 448 448 362 448 256C448 149.1 362 64 256 64z\"],\n    \"burger\": [512, 512, [\"hamburger\"], \"f805\", \"M481.9 270.1C490.9 279.1 496 291.3 496 304C496 316.7 490.9 328.9 481.9 337.9C472.9 346.9 460.7 352 448 352H64C51.27 352 39.06 346.9 30.06 337.9C21.06 328.9 16 316.7 16 304C16 291.3 21.06 279.1 30.06 270.1C39.06 261.1 51.27 256 64 256H448C460.7 256 472.9 261.1 481.9 270.1zM475.3 388.7C478.3 391.7 480 395.8 480 400V416C480 432.1 473.3 449.3 461.3 461.3C449.3 473.3 432.1 480 416 480H96C79.03 480 62.75 473.3 50.75 461.3C38.74 449.3 32 432.1 32 416V400C32 395.8 33.69 391.7 36.69 388.7C39.69 385.7 43.76 384 48 384H464C468.2 384 472.3 385.7 475.3 388.7zM50.39 220.8C45.93 218.6 42.03 215.5 38.97 211.6C35.91 207.7 33.79 203.2 32.75 198.4C31.71 193.5 31.8 188.5 32.99 183.7C54.98 97.02 146.5 32 256 32C365.5 32 457 97.02 479 183.7C480.2 188.5 480.3 193.5 479.2 198.4C478.2 203.2 476.1 207.7 473 211.6C469.1 215.5 466.1 218.6 461.6 220.8C457.2 222.9 452.3 224 447.3 224H64.67C59.73 224 54.84 222.9 50.39 220.8zM372.7 116.7C369.7 119.7 368 123.8 368 128C368 131.2 368.9 134.3 370.7 136.9C372.5 139.5 374.1 141.6 377.9 142.8C380.8 143.1 384 144.3 387.1 143.7C390.2 143.1 393.1 141.6 395.3 139.3C397.6 137.1 399.1 134.2 399.7 131.1C400.3 128 399.1 124.8 398.8 121.9C397.6 118.1 395.5 116.5 392.9 114.7C390.3 112.9 387.2 111.1 384 111.1C379.8 111.1 375.7 113.7 372.7 116.7V116.7zM244.7 84.69C241.7 87.69 240 91.76 240 96C240 99.16 240.9 102.3 242.7 104.9C244.5 107.5 246.1 109.6 249.9 110.8C252.8 111.1 256 112.3 259.1 111.7C262.2 111.1 265.1 109.6 267.3 107.3C269.6 105.1 271.1 102.2 271.7 99.12C272.3 96.02 271.1 92.8 270.8 89.88C269.6 86.95 267.5 84.45 264.9 82.7C262.3 80.94 259.2 79.1 256 79.1C251.8 79.1 247.7 81.69 244.7 84.69V84.69zM116.7 116.7C113.7 119.7 112 123.8 112 128C112 131.2 112.9 134.3 114.7 136.9C116.5 139.5 118.1 141.6 121.9 142.8C124.8 143.1 128 144.3 131.1 143.7C134.2 143.1 137.1 141.6 139.3 139.3C141.6 137.1 143.1 134.2 143.7 131.1C144.3 128 143.1 124.8 142.8 121.9C141.6 118.1 139.5 116.5 136.9 114.7C134.3 112.9 131.2 111.1 128 111.1C123.8 111.1 119.7 113.7 116.7 116.7L116.7 116.7z\"],\n    \"bus\": [576, 512, [128653], \"f207\", \"M288 0C422.4 0 512 35.2 512 80V128C529.7 128 544 142.3 544 160V224C544 241.7 529.7 256 512 256L512 416C512 433.7 497.7 448 480 448V480C480 497.7 465.7 512 448 512H416C398.3 512 384 497.7 384 480V448H192V480C192 497.7 177.7 512 160 512H128C110.3 512 96 497.7 96 480V448C78.33 448 64 433.7 64 416L64 256C46.33 256 32 241.7 32 224V160C32 142.3 46.33 128 64 128V80C64 35.2 153.6 0 288 0zM128 256C128 273.7 142.3 288 160 288H272V128H160C142.3 128 128 142.3 128 160V256zM304 288H416C433.7 288 448 273.7 448 256V160C448 142.3 433.7 128 416 128H304V288zM144 400C161.7 400 176 385.7 176 368C176 350.3 161.7 336 144 336C126.3 336 112 350.3 112 368C112 385.7 126.3 400 144 400zM432 400C449.7 400 464 385.7 464 368C464 350.3 449.7 336 432 336C414.3 336 400 350.3 400 368C400 385.7 414.3 400 432 400zM368 64H208C199.2 64 192 71.16 192 80C192 88.84 199.2 96 208 96H368C376.8 96 384 88.84 384 80C384 71.16 376.8 64 368 64z\"],\n    \"bus-simple\": [448, 512, [\"bus-alt\"], \"f55e\", \"M224 0C348.8 0 448 35.2 448 80V416C448 433.7 433.7 448 416 448V480C416 497.7 401.7 512 384 512H352C334.3 512 320 497.7 320 480V448H128V480C128 497.7 113.7 512 96 512H64C46.33 512 32 497.7 32 480V448C14.33 448 0 433.7 0 416V80C0 35.2 99.19 0 224 0zM64 256C64 273.7 78.33 288 96 288H352C369.7 288 384 273.7 384 256V128C384 110.3 369.7 96 352 96H96C78.33 96 64 110.3 64 128V256zM80 400C97.67 400 112 385.7 112 368C112 350.3 97.67 336 80 336C62.33 336 48 350.3 48 368C48 385.7 62.33 400 80 400zM368 400C385.7 400 400 385.7 400 368C400 350.3 385.7 336 368 336C350.3 336 336 350.3 336 368C336 385.7 350.3 400 368 400z\"],\n    \"business-time\": [640, 512, [\"briefcase-clock\"], \"f64a\", \"M496 224C416.4 224 352 288.4 352 368s64.38 144 144 144s144-64.38 144-144S575.6 224 496 224zM544 384h-54.25C484.4 384 480 379.6 480 374.3V304C480 295.2 487.2 288 496 288C504.8 288 512 295.2 512 304V352h32c8.838 0 16 7.162 16 16C560 376.8 552.8 384 544 384zM320.1 352H208C199.2 352 192 344.8 192 336V288H0v144C0 457.6 22.41 480 48 480h312.2C335.1 449.6 320 410.5 320 368C320 362.6 320.5 357.3 320.1 352zM496 192c5.402 0 10.72 .3301 16 .8066V144C512 118.4 489.6 96 464 96H384V48C384 22.41 361.6 0 336 0h-160C150.4 0 128 22.41 128 48V96H48C22.41 96 0 118.4 0 144V256h360.2C392.5 216.9 441.3 192 496 192zM336 96h-160V48h160V96z\"],\n    \"c\": [384, 512, [99], \"43\", \"M352 359.8c22.46 0 31.1 19.53 31.1 31.99c0 23.14-66.96 88.23-164.5 88.23c-137.1 0-219.4-117.8-219.4-224c0-103.8 79.87-223.1 219.4-223.1c99.47 0 164.5 66.12 164.5 88.23c0 12.27-9.527 32.01-32.01 32.01c-31.32 0-45.8-56.25-132.5-56.25c-97.99 0-155.4 84.59-155.4 159.1c0 74.03 56.42 160 155.4 160C306.5 416 320.5 359.8 352 359.8z\"],\n    \"cake-candles\": [448, 512, [127874, \"birthday-cake\", \"cake\"], \"f1fd\", \"M352 111.1c22.09 0 40-17.88 40-39.97S352 0 352 0s-40 49.91-40 72S329.9 111.1 352 111.1zM224 111.1c22.09 0 40-17.88 40-39.97S224 0 224 0S184 49.91 184 72S201.9 111.1 224 111.1zM383.1 223.1L384 160c0-8.836-7.164-16-16-16h-32C327.2 144 320 151.2 320 160v64h-64V160c0-8.836-7.164-16-16-16h-32C199.2 144 192 151.2 192 160v64H128V160c0-8.836-7.164-16-16-16h-32C71.16 144 64 151.2 64 160v63.97c-35.35 0-64 28.65-64 63.1v68.7c9.814 6.102 21.39 11.33 32 11.33c20.64 0 45.05-19.73 52.7-27.33c6.25-6.219 16.34-6.219 22.59 0C114.1 348.3 139.4 367.1 160 367.1s45.05-19.73 52.7-27.33c6.25-6.219 16.34-6.219 22.59 0C242.1 348.3 267.4 367.1 288 367.1s45.05-19.73 52.7-27.33c6.25-6.219 16.34-6.219 22.59 0C370.1 348.3 395.4 367.1 416 367.1c10.61 0 22.19-5.227 32-11.33V287.1C448 252.6 419.3 223.1 383.1 223.1zM352 373.3c-13.75 10.95-38.03 26.66-64 26.66s-50.25-15.7-64-26.66c-13.75 10.95-38.03 26.66-64 26.66s-50.25-15.7-64-26.66c-13.75 10.95-38.03 26.66-64 26.66c-11.27 0-22.09-3.121-32-7.377v87.38C0 497.7 14.33 512 32 512h384c17.67 0 32-14.33 32-32v-87.38c-9.91 4.256-20.73 7.377-32 7.377C390 399.1 365.8 384.3 352 373.3zM96 111.1c22.09 0 40-17.88 40-39.97S96 0 96 0S56 49.91 56 72S73.91 111.1 96 111.1z\"],\n    \"calculator\": [384, 512, [128425], \"f1ec\", \"M336 0h-288C22.38 0 0 22.38 0 48v416C0 489.6 22.38 512 48 512h288c25.62 0 48-22.38 48-48v-416C384 22.38 361.6 0 336 0zM64 208C64 199.2 71.2 192 80 192h32C120.8 192 128 199.2 128 208v32C128 248.8 120.8 256 112 256h-32C71.2 256 64 248.8 64 240V208zM64 304C64 295.2 71.2 288 80 288h32C120.8 288 128 295.2 128 304v32C128 344.8 120.8 352 112 352h-32C71.2 352 64 344.8 64 336V304zM224 432c0 8.801-7.199 16-16 16h-128C71.2 448 64 440.8 64 432v-32C64 391.2 71.2 384 80 384h128c8.801 0 16 7.199 16 16V432zM224 336c0 8.801-7.199 16-16 16h-32C167.2 352 160 344.8 160 336v-32C160 295.2 167.2 288 176 288h32C216.8 288 224 295.2 224 304V336zM224 240C224 248.8 216.8 256 208 256h-32C167.2 256 160 248.8 160 240v-32C160 199.2 167.2 192 176 192h32C216.8 192 224 199.2 224 208V240zM320 432c0 8.801-7.199 16-16 16h-32c-8.799 0-16-7.199-16-16v-32c0-8.801 7.201-16 16-16h32c8.801 0 16 7.199 16 16V432zM320 336c0 8.801-7.199 16-16 16h-32c-8.799 0-16-7.199-16-16v-32C256 295.2 263.2 288 272 288h32C312.8 288 320 295.2 320 304V336zM320 240C320 248.8 312.8 256 304 256h-32C263.2 256 256 248.8 256 240v-32C256 199.2 263.2 192 272 192h32C312.8 192 320 199.2 320 208V240zM320 144C320 152.8 312.8 160 304 160h-224C71.2 160 64 152.8 64 144v-64C64 71.2 71.2 64 80 64h224C312.8 64 320 71.2 320 80V144z\"],\n    \"calendar\": [448, 512, [128198, 128197], \"f133\", \"M96 32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32zM448 464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192H448V464z\"],\n    \"calendar-check\": [448, 512, [], \"f274\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM328.1 304.1C338.3 295.6 338.3 280.4 328.1 271C319.6 261.7 304.4 261.7 295 271L200 366.1L152.1 319C143.6 309.7 128.4 309.7 119 319C109.7 328.4 109.7 343.6 119 352.1L183 416.1C192.4 426.3 207.6 426.3 216.1 416.1L328.1 304.1z\"],\n    \"calendar-day\": [448, 512, [], \"f783\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM80 256C71.16 256 64 263.2 64 272V368C64 376.8 71.16 384 80 384H176C184.8 384 192 376.8 192 368V272C192 263.2 184.8 256 176 256H80z\"],\n    \"calendar-days\": [448, 512, [\"calendar-alt\"], \"f073\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM64 304C64 312.8 71.16 320 80 320H112C120.8 320 128 312.8 128 304V272C128 263.2 120.8 256 112 256H80C71.16 256 64 263.2 64 272V304zM192 304C192 312.8 199.2 320 208 320H240C248.8 320 256 312.8 256 304V272C256 263.2 248.8 256 240 256H208C199.2 256 192 263.2 192 272V304zM336 256C327.2 256 320 263.2 320 272V304C320 312.8 327.2 320 336 320H368C376.8 320 384 312.8 384 304V272C384 263.2 376.8 256 368 256H336zM64 432C64 440.8 71.16 448 80 448H112C120.8 448 128 440.8 128 432V400C128 391.2 120.8 384 112 384H80C71.16 384 64 391.2 64 400V432zM208 384C199.2 384 192 391.2 192 400V432C192 440.8 199.2 448 208 448H240C248.8 448 256 440.8 256 432V400C256 391.2 248.8 384 240 384H208zM320 432C320 440.8 327.2 448 336 448H368C376.8 448 384 440.8 384 432V400C384 391.2 376.8 384 368 384H336C327.2 384 320 391.2 320 400V432z\"],\n    \"calendar-minus\": [448, 512, [], \"f272\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM312 376C325.3 376 336 365.3 336 352C336 338.7 325.3 328 312 328H136C122.7 328 112 338.7 112 352C112 365.3 122.7 376 136 376H312z\"],\n    \"calendar-plus\": [448, 512, [], \"f271\", \"M96 32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32zM448 464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192H448V464zM200 272V328H144C130.7 328 120 338.7 120 352C120 365.3 130.7 376 144 376H200V432C200 445.3 210.7 456 224 456C237.3 456 248 445.3 248 432V376H304C317.3 376 328 365.3 328 352C328 338.7 317.3 328 304 328H248V272C248 258.7 237.3 248 224 248C210.7 248 200 258.7 200 272z\"],\n    \"calendar-week\": [448, 512, [], \"f784\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM80 256C71.16 256 64 263.2 64 272V336C64 344.8 71.16 352 80 352H368C376.8 352 384 344.8 384 336V272C384 263.2 376.8 256 368 256H80z\"],\n    \"calendar-xmark\": [448, 512, [\"calendar-times\"], \"f273\", \"M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM304.1 304.1C314.3 295.6 314.3 280.4 304.1 271C295.6 261.7 280.4 261.7 271 271L224 318.1L176.1 271C167.6 261.7 152.4 261.7 143 271C133.7 280.4 133.7 295.6 143 304.1L190.1 352L143 399C133.7 408.4 133.7 423.6 143 432.1C152.4 442.3 167.6 442.3 176.1 432.1L224 385.9L271 432.1C280.4 442.3 295.6 442.3 304.1 432.1C314.3 423.6 314.3 408.4 304.1 399L257.9 352L304.1 304.1z\"],\n    \"camera\": [512, 512, [62258, \"camera-alt\"], \"f030\", \"M194.6 32H317.4C338.1 32 356.4 45.22 362.9 64.82L373.3 96H448C483.3 96 512 124.7 512 160V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V160C0 124.7 28.65 96 64 96H138.7L149.1 64.82C155.6 45.22 173.9 32 194.6 32H194.6zM256 384C309 384 352 341 352 288C352 234.1 309 192 256 192C202.1 192 160 234.1 160 288C160 341 202.1 384 256 384z\"],\n    \"camera-retro\": [512, 512, [128247], \"f083\", \"M64 64V48C64 39.16 71.16 32 80 32H144C152.8 32 160 39.16 160 48V64H192L242.5 38.76C251.4 34.31 261.2 32 271.1 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V128C0 92.65 28.65 64 64 64zM220.6 121.2C211.7 125.7 201.9 128 192 128H64V192H178.8C200.8 176.9 227.3 168 256 168C284.7 168 311.2 176.9 333.2 192H448V96H271.1L220.6 121.2zM256 216C207.4 216 168 255.4 168 304C168 352.6 207.4 392 256 392C304.6 392 344 352.6 344 304C344 255.4 304.6 216 256 216z\"],\n    \"camera-rotate\": [512, 512, [], \"e0d8\", \"M464 96h-88l-12.38-32.88C356.6 44.38 338.8 32 318.8 32h-125.5c-20 0-38 12.38-45 31.12L136 96H48C21.5 96 0 117.5 0 144v288C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-288C512 117.5 490.5 96 464 96zM356.9 366.8C332.4 398.1 295.7 416 256 416c-31.78 0-61.37-11.94-84.58-32.61l-19.28 19.29C143.2 411.6 128 405.3 128 392.7V316.3c0-5.453 4.359-9.838 9.775-9.99h76.98c12.35 .3027 18.47 15.27 9.654 24.09l-19.27 19.28C219.3 361.4 237.1 368 256 368c24.8 0 47.78-11.22 63.08-30.78c8.172-10.44 23.25-12.28 33.69-4.125S365.1 356.3 356.9 366.8zM384 259.7c0 5.453-4.359 9.838-9.775 9.99h-76.98c-12.35-.3027-18.47-15.27-9.654-24.09l19.27-19.28C292.7 214.6 274.9 208 256 208c-24.8 0-47.78 11.22-63.08 30.78C184.8 249.2 169.7 251.1 159.2 242.9C148.8 234.8 146.9 219.7 155.1 209.2C179.6 177.9 216.3 160 256 160c31.78 0 61.37 11.94 84.58 32.61l19.28-19.29C368.8 164.4 384 170.7 384 183.3V259.7z\"],\n    \"campground\": [576, 512, [9978], \"f6bb\", \"M328.1 112L563.7 405.4C571.7 415.4 576 427.7 576 440.4V464C576 490.5 554.5 512 528 512H48C21.49 512 0 490.5 0 464V440.4C0 427.7 4.328 415.4 12.27 405.4L247 112L199 51.99C187.1 38.19 190.2 18.05 204 7.013C217.8-4.027 237.9-1.789 248.1 12.01L288 60.78L327 12.01C338.1-1.789 358.2-4.027 371.1 7.013C385.8 18.05 388 38.19 376.1 51.99L328.1 112zM407.5 448L288 291.7L168.5 448H407.5z\"],\n    \"candy-cane\": [512, 512, [], \"f786\", \"M497.5 91.1C469.6 33.13 411.8 0 352.4 0c-27.88 0-56.14 7.25-81.77 22.62L243.1 38.1C227.9 48.12 223 67.75 232.1 82.87l32.76 54.87c8.522 14.2 27.59 20.6 43.88 11.06l27.51-16.37c5.125-3.125 10.95-4.439 16.58-4.439c10.88 0 21.35 5.625 27.35 15.62c9 15.12 3.917 34.59-11.08 43.71L15.6 397.6c-15.25 9.125-20.13 28.62-11 43.87l32.76 54.87c8.522 14.2 27.59 20.66 43.88 11.12l347.4-206.5C500.2 258.1 533.2 167.5 497.5 91.1zM319.7 104.1L317.2 106.5l-20.5-61.5c9.75-4.75 19.88-8.125 30.38-10.25l20.63 61.87C337.8 97.37 328.2 99.87 319.7 104.1zM145.8 431.7l-60.5-38.5l30.88-18.25l60.5 38.5L145.8 431.7zM253.3 367.9l-60.5-38.5l30.88-18.25l60.5 38.5L253.3 367.9zM364.2 301.1L303.7 263.5l30.88-18.25l60.5 38.5L364.2 301.1zM384.7 104.7l46-45.1c8.375 6.5 16 13.1 22.5 22.5l-45.63 45.81C401.9 117.8 393.9 110.1 384.7 104.7zM466.7 212.5l-59.5-19.75c3.25-5.375 5.875-10.1 7.5-17.12c1-4.5 1.625-9.125 1.75-13.62l60.38 20.12C474.7 192.5 471.4 202.7 466.7 212.5z\"],\n    \"cannabis\": [576, 512, [], \"f55f\", \"M544 374.4c0 6-3.25 11.38-8.5 14.12c-2.5 1.375-60.75 31.75-133.5 31.75c-6.124 0-12-.125-17.5-.25c11.38 22.25 16.5 38.25 16.75 39.13c1.875 5.75 .375 12-3.875 16.12c-4.125 4.25-10.38 5.75-16.12 4c-1.631-.4648-32.94-10.66-69.25-34.06v42.81C312 501.3 301.3 512 288 512s-24-10.75-24-23.1v-42.81c-36.31 23.4-67.62 33.59-69.25 34.06c-5.75 1.75-12 .25-16.12-4c-4.25-4.25-5.75-10.38-3.875-16.12C175 458.3 180.1 442.1 191.5 420c-5.501 .125-11.37 .25-17.5 .25c-72.75 0-130.1-30.38-133.5-31.75C35.25 385.8 32 380.4 32 374.4c0-5.875 3.25-11.38 8.5-14.12c1.625-.875 32.38-16.88 76.75-25.75c-64.25-75.13-84-161.8-84.88-165.8C31.25 163.5 32.75 157.9 36.63 154C39.75 151 43.75 149.4 48 149.4c1.125 0 2.25 .125 3.375 .375C55.38 150.6 137.1 169.3 212 229.5V225.1c0-118.9 60-213.8 62.5-217.8C277.5 2.75 282.5 0 288 0s10.5 2.75 13.5 7.375C304 11.38 364 106.3 364 225.1V229.5c73.1-60.25 156.6-79 160.5-79.75C525.8 149.5 526.9 149.4 528 149.4c4.25 0 8.25 1.625 11.38 4.625c3.75 3.875 5.375 9.5 4.25 14.75c-.875 4-20.62 90.63-84.88 165.8c44.38 8.875 75.13 24.88 76.75 25.75C540.8 363 544 368.5 544 374.4z\"],\n    \"capsules\": [576, 512, [], \"f46b\", \"M555.3 300.1L424.3 112.8C401.9 81 366.4 64 330.4 64c-22.63 0-45.5 6.75-65.5 20.75C245.2 98.5 231.2 117.5 223.4 138.5C220.5 79.25 171.1 32 111.1 32c-61.88 0-111.1 50.08-111.1 111.1L-.0028 368c0 61.88 50.12 112 112 112s112-50.13 112-112L223.1 218.9C227.2 227.5 231.2 236 236.7 243.9l131.3 187.4C390.3 463 425.8 480 461.8 480c22.75 0 45.5-6.75 65.5-20.75C579 423.1 591.5 351.8 555.3 300.1zM159.1 256H63.99V144c0-26.5 21.5-48 48-48s48 21.5 48 48V256zM354.8 300.9l-65.5-93.63c-7.75-11-10.75-24.5-8.375-37.63c2.375-13.25 9.75-24.87 20.75-32.5C310.1 131.1 320.1 128 330.4 128c16.5 0 31.88 8 41.38 21.5l65.5 93.75L354.8 300.9z\"],\n    \"car\": [512, 512, [128664, \"automobile\"], \"f1b9\", \"M39.61 196.8L74.8 96.29C88.27 57.78 124.6 32 165.4 32H346.6C387.4 32 423.7 57.78 437.2 96.29L472.4 196.8C495.6 206.4 512 229.3 512 256V448C512 465.7 497.7 480 480 480H448C430.3 480 416 465.7 416 448V400H96V448C96 465.7 81.67 480 64 480H32C14.33 480 0 465.7 0 448V256C0 229.3 16.36 206.4 39.61 196.8V196.8zM109.1 192H402.9L376.8 117.4C372.3 104.6 360.2 96 346.6 96H165.4C151.8 96 139.7 104.6 135.2 117.4L109.1 192zM96 256C78.33 256 64 270.3 64 288C64 305.7 78.33 320 96 320C113.7 320 128 305.7 128 288C128 270.3 113.7 256 96 256zM416 320C433.7 320 448 305.7 448 288C448 270.3 433.7 256 416 256C398.3 256 384 270.3 384 288C384 305.7 398.3 320 416 320z\"],\n    \"car-battery\": [512, 512, [\"battery-car\"], \"f5df\", \"M80 96C80 78.33 94.33 64 112 64H176C193.7 64 208 78.33 208 96H304C304 78.33 318.3 64 336 64H400C417.7 64 432 78.33 432 96H448C483.3 96 512 124.7 512 160V384C512 419.3 483.3 448 448 448H64C28.65 448 0 419.3 0 384V160C0 124.7 28.65 96 64 96H80zM384 192C384 183.2 376.8 176 368 176C359.2 176 352 183.2 352 192V224H320C311.2 224 304 231.2 304 240C304 248.8 311.2 256 320 256H352V288C352 296.8 359.2 304 368 304C376.8 304 384 296.8 384 288V256H416C424.8 256 432 248.8 432 240C432 231.2 424.8 224 416 224H384V192zM96 256H192C200.8 256 208 248.8 208 240C208 231.2 200.8 224 192 224H96C87.16 224 80 231.2 80 240C80 248.8 87.16 256 96 256z\"],\n    \"car-crash\": [640, 512, [], \"f5e1\", \"M176 8C182.6 8 188.4 11.1 190.9 18.09L220.3 92.05L296.4 68.93C302.7 67.03 309.5 69.14 313.6 74.27C314.1 74.85 314.5 75.45 314.9 76.08C297.8 84.32 282.7 96.93 271.4 113.3L230.4 172.5C203.1 181.4 180.6 203.5 172.6 233.4L152.7 307.4L117.4 339.9C112.6 344.4 105.5 345.4 99.64 342.6C93.73 339.7 90.16 333.6 90.62 327L96.21 247.6L17.56 235.4C11.08 234.4 5.871 229.6 4.413 223.2C2.954 216.8 5.54 210.1 10.94 206.4L76.5 161.3L37.01 92.18C33.76 86.49 34.31 79.39 38.4 74.27C42.48 69.14 49.28 67.03 55.55 68.93L131.7 92.05L161.1 18.09C163.6 11.1 169.4 8 176 8L176 8zM384.2 99.67L519.8 135.1C552.5 144.7 576.1 173.1 578.8 206.8L585.7 290.7C602.9 304.2 611.3 327 605.3 349.4L570.1 480.8C565.5 497.8 547.1 507.1 530.9 503.4L515.5 499.3C498.4 494.7 488.3 477.1 492.8 460.1L501.1 429.1L253.8 362.9L245.6 393.8C240.1 410.9 223.4 421 206.4 416.4L190.9 412.3C173.8 407.7 163.7 390.2 168.3 373.1L203.5 241.7C209.5 219.3 228.2 203.8 249.8 200.7L297.7 131.5C316.9 103.6 351.6 90.92 384.2 99.67L384.2 99.67zM367.7 161.5C361.1 159.7 354.2 162.3 350.4 167.8L318.1 214.5L519.6 268.5L515 211.1C514.5 205.2 509.8 199.6 503.2 197.8L367.7 161.5zM268.3 308.8C281.1 312.2 294.3 304.6 297.7 291.8C301.2 279 293.6 265.9 280.8 262.4C267.1 259 254.8 266.6 251.4 279.4C247.9 292.2 255.5 305.4 268.3 308.8zM528 328.7C515.2 325.3 502.1 332.9 498.6 345.7C495.2 358.5 502.8 371.6 515.6 375.1C528.4 378.5 541.6 370.9 545 358.1C548.4 345.3 540.8 332.1 528 328.7z\"],\n    \"car-rear\": [512, 512, [\"car-alt\"], \"f5de\", \"M165.4 32H346.6C387.4 32 423.7 57.78 437.2 96.29L472.4 196.8C495.6 206.4 512 229.3 512 256V336C512 359.7 499.1 380.4 480 391.4V448C480 465.7 465.7 480 448 480H416C398.3 480 384 465.7 384 448V400H128V448C128 465.7 113.7 480 96 480H64C46.33 480 32 465.7 32 448V391.4C12.87 380.4 0 359.7 0 336V256C0 229.3 16.36 206.4 39.61 196.8L74.8 96.29C88.27 57.78 124.6 32 165.4 32V32zM165.4 96C151.8 96 139.7 104.6 135.2 117.4L109.1 192H402.9L376.8 117.4C372.3 104.6 360.2 96 346.6 96H165.4zM208 272C199.2 272 192 279.2 192 288V320C192 328.8 199.2 336 208 336H304C312.8 336 320 328.8 320 320V288C320 279.2 312.8 272 304 272H208zM72 304H104C117.3 304 128 293.3 128 280C128 266.7 117.3 256 104 256H72C58.75 256 48 266.7 48 280C48 293.3 58.75 304 72 304zM408 256C394.7 256 384 266.7 384 280C384 293.3 394.7 304 408 304H440C453.3 304 464 293.3 464 280C464 266.7 453.3 256 440 256H408z\"],\n    \"car-side\": [640, 512, [128663], \"f5e4\", \"M640 320V368C640 385.7 625.7 400 608 400H574.7C567.1 445.4 527.6 480 480 480C432.4 480 392.9 445.4 385.3 400H254.7C247.1 445.4 207.6 480 160 480C112.4 480 72.94 445.4 65.33 400H32C14.33 400 0 385.7 0 368V256C0 228.9 16.81 205.8 40.56 196.4L82.2 92.35C96.78 55.9 132.1 32 171.3 32H353.2C382.4 32 409.1 45.26 428.2 68.03L528.2 193C591.2 200.1 640 254.8 640 319.1V320zM171.3 96C158.2 96 146.5 103.1 141.6 116.1L111.3 192H224V96H171.3zM272 192H445.4L378.2 108C372.2 100.4 362.1 96 353.2 96H272V192zM525.3 400C527 394.1 528 389.6 528 384C528 357.5 506.5 336 480 336C453.5 336 432 357.5 432 384C432 389.6 432.1 394.1 434.7 400C441.3 418.6 459.1 432 480 432C500.9 432 518.7 418.6 525.3 400zM205.3 400C207 394.1 208 389.6 208 384C208 357.5 186.5 336 160 336C133.5 336 112 357.5 112 384C112 389.6 112.1 394.1 114.7 400C121.3 418.6 139.1 432 160 432C180.9 432 198.7 418.6 205.3 400z\"],\n    \"caravan\": [640, 512, [], \"f8ff\", \"M0 112C0 67.82 35.82 32 80 32H416C504.4 32 576 103.6 576 192V352H608C625.7 352 640 366.3 640 384C640 401.7 625.7 416 608 416H288C288 469 245 512 192 512C138.1 512 96 469 96 416H80C35.82 416 0 380.2 0 336V112zM320 352H448V256H416C407.2 256 400 248.8 400 240C400 231.2 407.2 224 416 224H448V160C448 142.3 433.7 128 416 128H352C334.3 128 320 142.3 320 160V352zM96 128C78.33 128 64 142.3 64 160V224C64 241.7 78.33 256 96 256H224C241.7 256 256 241.7 256 224V160C256 142.3 241.7 128 224 128H96zM192 464C218.5 464 240 442.5 240 416C240 389.5 218.5 368 192 368C165.5 368 144 389.5 144 416C144 442.5 165.5 464 192 464z\"],\n    \"caret-down\": [320, 512, [], \"f0d7\", \"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"],\n    \"caret-left\": [256, 512, [], \"f0d9\", \"M137.4 406.6l-128-127.1C3.125 272.4 0 264.2 0 255.1s3.125-16.38 9.375-22.63l128-127.1c9.156-9.156 22.91-11.9 34.88-6.943S192 115.1 192 128v255.1c0 12.94-7.781 24.62-19.75 29.58S146.5 415.8 137.4 406.6z\"],\n    \"caret-right\": [256, 512, [], \"f0da\", \"M118.6 105.4l128 127.1C252.9 239.6 256 247.8 256 255.1s-3.125 16.38-9.375 22.63l-128 127.1c-9.156 9.156-22.91 11.9-34.88 6.943S64 396.9 64 383.1V128c0-12.94 7.781-24.62 19.75-29.58S109.5 96.23 118.6 105.4z\"],\n    \"caret-up\": [320, 512, [], \"f0d8\", \"M9.39 265.4l127.1-128C143.6 131.1 151.8 128 160 128s16.38 3.125 22.63 9.375l127.1 128c9.156 9.156 11.9 22.91 6.943 34.88S300.9 320 287.1 320H32.01c-12.94 0-24.62-7.781-29.58-19.75S.2333 274.5 9.39 265.4z\"],\n    \"carrot\": [512, 512, [129365], \"f787\", \"M298.2 156.6C245.5 130.9 183.7 146.1 147.1 189.4l55.27 55.31c6.25 6.25 6.25 16.33 0 22.58c-3.127 3-7.266 4.605-11.39 4.605s-8.068-1.605-11.19-4.605L130.3 217l-128.1 262.8c-2.875 6-3 13.25 0 19.63c5.5 11.12 19 15.75 30 10.38l133.6-65.25L116.7 395.3c-6.377-6.125-6.377-16.38 0-22.5c6.25-6.25 16.37-6.25 22.5 0l56.98 56.98l102-49.89c24-11.63 44.5-31.26 57.13-57.13C385.5 261.1 359.9 186.8 298.2 156.6zM390.2 121.8C409.7 81 399.7 32.88 359.1 0c-50.25 41.75-52.51 107.5-7.875 151.9l8 8C404.5 204.5 470.4 202.3 512 152C479.1 112.3 430.1 102.3 390.2 121.8z\"],\n    \"cart-arrow-down\": [576, 512, [], \"f218\", \"M0 24C0 10.75 10.75 0 24 0H96C107.5 0 117.4 8.19 119.6 19.51L121.1 32H312V134.1L288.1 111C279.6 101.7 264.4 101.7 255 111C245.7 120.4 245.7 135.6 255 144.1L319 208.1C328.4 218.3 343.6 218.3 352.1 208.1L416.1 144.1C426.3 135.6 426.3 120.4 416.1 111C407.6 101.7 392.4 101.7 383 111L360 134.1V32H541.8C562.1 32 578.3 52.25 572.6 72.66L518.6 264.7C514.7 278.5 502.1 288 487.8 288H170.7L179.9 336H488C501.3 336 512 346.7 512 360C512 373.3 501.3 384 488 384H159.1C148.5 384 138.6 375.8 136.4 364.5L76.14 48H24C10.75 48 0 37.25 0 24V24zM224 464C224 490.5 202.5 512 176 512C149.5 512 128 490.5 128 464C128 437.5 149.5 416 176 416C202.5 416 224 437.5 224 464zM416 464C416 437.5 437.5 416 464 416C490.5 416 512 437.5 512 464C512 490.5 490.5 512 464 512C437.5 512 416 490.5 416 464z\"],\n    \"cart-flatbed\": [640, 512, [\"dolly-flatbed\"], \"f474\", \"M240 320h320c26.4 0 48-21.6 48-48v-192C608 53.6 586.4 32 560 32H448v128l-48-32L352 160V32H240C213.6 32 192 53.6 192 80v192C192 298.4 213.6 320 240 320zM608 384H128V64c0-35.2-28.8-64-64-64H31.1C14.4 0 0 14.4 0 32S14.4 64 31.1 64H48C56.84 64 64 71.16 64 80v335.1c0 17.6 14.4 32 32 32l66.92-.0009C161.1 453 160 458.4 160 464C160 490.5 181.5 512 208 512S256 490.5 256 464c0-5.641-1.13-10.97-2.917-16h197.9c-1.787 5.027-2.928 10.36-2.928 16C448 490.5 469.5 512 496 512c26.51 0 48.01-21.49 48.01-47.1c0-5.641-1.12-10.97-2.907-16l66.88 .0009C625.6 448 640 433.6 640 415.1C640 398.4 625.6 384 608 384z\"],\n    \"cart-flatbed-suitcase\": [640, 512, [\"luggage-cart\"], \"f59d\", \"M541.2 448C542.1 453 544.1 458.4 544.1 464C544.1 490.5 522.6 512 496 512C469.5 512 448.1 490.5 448.1 464C448.1 458.4 449.2 453 450.1 448H253.1C254.9 453 256 458.4 256 464C256 490.5 234.5 512 208 512C181.5 512 160 490.5 160 464C160 458.4 161.1 453 162.9 448L96 448C78.4 448 64 433.6 64 416V80C64 71.16 56.84 64 48 64H32C14.4 64 0 49.6 0 32C0 14.4 14.4 0 32 0H64C99.2 0 128 28.8 128 64V384H608C625.6 384 640 398.4 640 416C640 433.6 625.6 448 608 448L541.2 448zM432 0C458.5 0 480 21.5 480 48V320H288V48C288 21.5 309.5 0 336 0H432zM336 96H432V48H336V96zM256 320H224C206.4 320 192 305.6 192 288V128C192 110.4 206.4 96 224 96H256V320zM576 128V288C576 305.6 561.6 320 544 320H512V96H544C561.6 96 576 110.4 576 128z\"],\n    \"cart-plus\": [576, 512, [], \"f217\", \"M96 0C107.5 0 117.4 8.19 119.6 19.51L121.1 32H541.8C562.1 32 578.3 52.25 572.6 72.66L518.6 264.7C514.7 278.5 502.1 288 487.8 288H170.7L179.9 336H488C501.3 336 512 346.7 512 360C512 373.3 501.3 384 488 384H159.1C148.5 384 138.6 375.8 136.4 364.5L76.14 48H24C10.75 48 0 37.25 0 24C0 10.75 10.75 0 24 0H96zM272 180H316V224C316 235 324.1 244 336 244C347 244 356 235 356 224V180H400C411 180 420 171 420 160C420 148.1 411 140 400 140H356V96C356 84.95 347 76 336 76C324.1 76 316 84.95 316 96V140H272C260.1 140 252 148.1 252 160C252 171 260.1 180 272 180zM128 464C128 437.5 149.5 416 176 416C202.5 416 224 437.5 224 464C224 490.5 202.5 512 176 512C149.5 512 128 490.5 128 464zM512 464C512 490.5 490.5 512 464 512C437.5 512 416 490.5 416 464C416 437.5 437.5 416 464 416C490.5 416 512 437.5 512 464z\"],\n    \"cart-shopping\": [576, 512, [128722, \"shopping-cart\"], \"f07a\", \"M96 0C107.5 0 117.4 8.19 119.6 19.51L121.1 32H541.8C562.1 32 578.3 52.25 572.6 72.66L518.6 264.7C514.7 278.5 502.1 288 487.8 288H170.7L179.9 336H488C501.3 336 512 346.7 512 360C512 373.3 501.3 384 488 384H159.1C148.5 384 138.6 375.8 136.4 364.5L76.14 48H24C10.75 48 0 37.25 0 24C0 10.75 10.75 0 24 0H96zM128 464C128 437.5 149.5 416 176 416C202.5 416 224 437.5 224 464C224 490.5 202.5 512 176 512C149.5 512 128 490.5 128 464zM512 464C512 490.5 490.5 512 464 512C437.5 512 416 490.5 416 464C416 437.5 437.5 416 464 416C490.5 416 512 437.5 512 464z\"],\n    \"cash-register\": [512, 512, [], \"f788\", \"M288 0C305.7 0 320 14.33 320 32V96C320 113.7 305.7 128 288 128H208V160H424.1C456.6 160 483.5 183.1 488.2 214.4L510.9 364.1C511.6 368.8 512 373.6 512 378.4V448C512 483.3 483.3 512 448 512H64C28.65 512 0 483.3 0 448V378.4C0 373.6 .3622 368.8 1.083 364.1L23.76 214.4C28.5 183.1 55.39 160 87.03 160H143.1V128H63.1C46.33 128 31.1 113.7 31.1 96V32C31.1 14.33 46.33 0 63.1 0L288 0zM96 48C87.16 48 80 55.16 80 64C80 72.84 87.16 80 96 80H256C264.8 80 272 72.84 272 64C272 55.16 264.8 48 256 48H96zM80 448H432C440.8 448 448 440.8 448 432C448 423.2 440.8 416 432 416H80C71.16 416 64 423.2 64 432C64 440.8 71.16 448 80 448zM112 216C98.75 216 88 226.7 88 240C88 253.3 98.75 264 112 264C125.3 264 136 253.3 136 240C136 226.7 125.3 216 112 216zM208 264C221.3 264 232 253.3 232 240C232 226.7 221.3 216 208 216C194.7 216 184 226.7 184 240C184 253.3 194.7 264 208 264zM160 296C146.7 296 136 306.7 136 320C136 333.3 146.7 344 160 344C173.3 344 184 333.3 184 320C184 306.7 173.3 296 160 296zM304 264C317.3 264 328 253.3 328 240C328 226.7 317.3 216 304 216C290.7 216 280 226.7 280 240C280 253.3 290.7 264 304 264zM256 296C242.7 296 232 306.7 232 320C232 333.3 242.7 344 256 344C269.3 344 280 333.3 280 320C280 306.7 269.3 296 256 296zM400 264C413.3 264 424 253.3 424 240C424 226.7 413.3 216 400 216C386.7 216 376 226.7 376 240C376 253.3 386.7 264 400 264zM352 296C338.7 296 328 306.7 328 320C328 333.3 338.7 344 352 344C365.3 344 376 333.3 376 320C376 306.7 365.3 296 352 296z\"],\n    \"cat\": [576, 512, [128008], \"f6be\", \"M322.6 192C302.4 192 215.8 194 160 278V192c0-53-43-96-96-96C46.38 96 32 110.4 32 128s14.38 32 32 32s32 14.38 32 32v256c0 35.25 28.75 64 64 64h176c8.875 0 16-7.125 16-15.1V480c0-17.62-14.38-32-32-32h-32l128-96v144c0 8.875 7.125 16 16 16h32c8.875 0 16-7.125 16-16V289.9c-10.25 2.625-20.88 4.5-32 4.5C386.2 294.4 334.5 250.4 322.6 192zM480 96h-64l-64-64v134.4c0 53 43 95.1 96 95.1s96-42.1 96-95.1V32L480 96zM408 176c-8.875 0-16-7.125-16-16s7.125-16 16-16s16 7.125 16 16S416.9 176 408 176zM488 176c-8.875 0-16-7.125-16-16s7.125-16 16-16s16 7.125 16 16S496.9 176 488 176z\"],\n    \"cedi-sign\": [320, 512, [], \"e0df\", \"M224 66.66C254.9 71.84 283.2 84.39 307.2 102.4C321.4 113 324.2 133.1 313.6 147.2C302.1 161.4 282.9 164.2 268.8 153.6C255.6 143.7 240.4 136.3 224 132V379.1C240.4 375.7 255.6 368.3 268.8 358.4C282.9 347.8 302.1 350.6 313.6 364.8C324.2 378.9 321.4 398.1 307.2 409.6C283.2 427.6 254.9 440.2 224 445.3V480C224 497.7 209.7 512 192 512C174.3 512 160 497.7 160 480V445.3C69.19 430.1 0 351.1 0 256C0 160.9 69.19 81.89 160 66.65V32C160 14.33 174.3 0 192 0C209.7 0 224 14.33 224 32V66.66zM160 132C104.8 146.2 64 196.4 64 255.1C64 315.6 104.8 365.8 160 379.1V132z\"],\n    \"cent-sign\": [320, 512, [], \"e3f5\", \"M192 0C209.7 0 224 14.33 224 32V66.66C254.9 71.84 283.2 84.39 307.2 102.4C321.4 113 324.2 133.1 313.6 147.2C302.1 161.4 282.9 164.2 268.8 153.6C247.4 137.5 220.9 128 192 128C121.3 128 64 185.3 64 256C64 326.7 121.3 384 192 384C220.9 384 247.4 374.5 268.8 358.4C282.9 347.8 302.1 350.6 313.6 364.8C324.2 378.9 321.4 398.1 307.2 409.6C283.2 427.6 254.9 440.2 224 445.3V480C224 497.7 209.7 512 192 512C174.3 512 160 497.7 160 480V445.3C69.19 430.1 0 351.1 0 256C0 160.9 69.19 81.89 160 66.66V32C160 14.33 174.3 .0006 192 .0006V0z\"],\n    \"certificate\": [512, 512, [], \"f0a3\", \"M256 53.46L300.1 7.261C307 1.034 315.1-1.431 324.4 .8185C332.8 3.068 339.3 9.679 341.4 18.1L357.3 80.6L419.3 63.07C427.7 60.71 436.7 63.05 442.8 69.19C448.1 75.34 451.3 84.33 448.9 92.69L431.4 154.7L493.9 170.6C502.3 172.7 508.9 179.2 511.2 187.6C513.4 196 510.1 204.1 504.7 211L458.5 256L504.7 300.1C510.1 307 513.4 315.1 511.2 324.4C508.9 332.8 502.3 339.3 493.9 341.4L431.4 357.3L448.9 419.3C451.3 427.7 448.1 436.7 442.8 442.8C436.7 448.1 427.7 451.3 419.3 448.9L357.3 431.4L341.4 493.9C339.3 502.3 332.8 508.9 324.4 511.2C315.1 513.4 307 510.1 300.1 504.7L256 458.5L211 504.7C204.1 510.1 196 513.4 187.6 511.2C179.2 508.9 172.7 502.3 170.6 493.9L154.7 431.4L92.69 448.9C84.33 451.3 75.34 448.1 69.19 442.8C63.05 436.7 60.71 427.7 63.07 419.3L80.6 357.3L18.1 341.4C9.679 339.3 3.068 332.8 .8186 324.4C-1.431 315.1 1.034 307 7.261 300.1L53.46 256L7.261 211C1.034 204.1-1.431 196 .8186 187.6C3.068 179.2 9.679 172.7 18.1 170.6L80.6 154.7L63.07 92.69C60.71 84.33 63.05 75.34 69.19 69.19C75.34 63.05 84.33 60.71 92.69 63.07L154.7 80.6L170.6 18.1C172.7 9.679 179.2 3.068 187.6 .8185C196-1.431 204.1 1.034 211 7.261L256 53.46z\"],\n    \"chair\": [448, 512, [129681], \"f6c0\", \"M445.1 338.6l-14.77-32C425.1 295.3 413.7 288 401.2 288H46.76C34.28 288 22.94 295.3 17.7 306.6l-14.77 32c-4.563 9.906-3.766 21.47 2.109 30.66S21.09 384 31.1 384l.001 112c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V384h256v112c0 8.836 7.164 16 16 16h31.1c8.838 0 16-7.164 16-16L416 384c10.91 0 21.08-5.562 26.95-14.75S449.6 348.5 445.1 338.6zM111.1 128c0-29.48 16.2-54.1 40-68.87L151.1 256h48l.0092-208h48L247.1 256h48l.0093-196.9C319.8 73 335.1 98.52 335.1 128l-.0094 128h48.03l-.0123-128c0-70.69-57.31-128-128-128H191.1C121.3 0 63.98 57.31 63.98 128l.0158 128h47.97L111.1 128z\"],\n    \"chalkboard\": [576, 512, [\"blackboard\"], \"f51b\", \"M96 96h384v288h64V72C544 50 525.1 32 504 32H72C49.1 32 32 50 32 72V384h64V96zM560 416H416v-48c0-8.838-7.164-16-16-16h-160C231.2 352 224 359.2 224 368V416H16C7.164 416 0 423.2 0 432v32C0 472.8 7.164 480 16 480h544c8.836 0 16-7.164 16-16v-32C576 423.2 568.8 416 560 416z\"],\n    \"chalkboard-user\": [640, 512, [\"chalkboard-teacher\"], \"f51c\", \"M592 0h-384C181.5 0 160 22.25 160 49.63V96c23.42 0 45.1 6.781 63.1 17.81V64h352v288h-64V304c0-8.838-7.164-16-16-16h-96c-8.836 0-16 7.162-16 16V352H287.3c22.07 16.48 39.54 38.5 50.76 64h253.9C618.5 416 640 393.8 640 366.4V49.63C640 22.25 618.5 0 592 0zM160 320c53.02 0 96-42.98 96-96c0-53.02-42.98-96-96-96C106.1 128 64 170.1 64 224C64 277 106.1 320 160 320zM192 352H128c-70.69 0-128 57.31-128 128c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32C320 409.3 262.7 352 192 352z\"],\n    \"champagne-glasses\": [640, 512, [129346, \"glass-cheers\"], \"f79f\", \"M639.4 433.6c-8.374-20.37-31.75-30.12-52.12-21.62l-22.12 9.249l-38.75-101.1c47.87-34.1 64.87-100.2 34.5-152.7l-86.62-150.5c-7.999-13.87-24.1-19.75-39.1-13.62l-114.2 47.37L205.8 2.415C190.8-3.71 173.8 2.165 165.8 16.04L79.15 166.5C48.9 219 65.78 284.3 113.6 319.2l-38.75 101.9L52.78 411.9c-20.37-8.499-43.62 1.25-52.12 21.62c-1.75 4.124 .125 8.749 4.25 10.5l162.4 67.37c3.1 1.75 8.624-.125 10.37-4.249c8.374-20.37-1.25-43.87-21.62-52.37l-22.12-9.124l39.37-103.6c4.5 .4999 8.874 1.25 13.12 1.25c51.75 0 99.37-32.1 113.4-85.24l20.25-75.36l20.25 75.36c13.1 52.24 61.62 85.24 113.4 85.24c4.25 0 8.624-.7499 13.12-1.25l39.25 103.6l-22.12 9.124c-20.37 8.499-30.12 31.1-21.62 52.37c1.75 4.124 6.5 5.999 10.5 4.249l162.4-67.37C639.1 442.2 641.1 437.7 639.4 433.6zM275.9 162.1L163.8 115.6l36.5-63.37L294.8 91.4L275.9 162.1zM364.1 162.1l-18.87-70.74l94.49-39.12l36.5 63.37L364.1 162.1z\"],\n    \"charging-station\": [576, 512, [], \"f5e7\", \"M256 0C291.3 0 320 28.65 320 64V256H336C384.6 256 424 295.4 424 344V376C424 389.3 434.7 400 448 400C461.3 400 472 389.3 472 376V252.3C439.5 242.1 416 211.8 416 176V144C416 135.2 423.2 128 432 128H448V80C448 71.16 455.2 64 464 64C472.8 64 480 71.16 480 80V128H512V80C512 71.16 519.2 64 528 64C536.8 64 544 71.16 544 80V128H560C568.8 128 576 135.2 576 144V176C576 211.8 552.5 242.1 520 252.3V376C520 415.8 487.8 448 448 448C408.2 448 376 415.8 376 376V344C376 321.9 358.1 304 336 304H320V448C337.7 448 352 462.3 352 480C352 497.7 337.7 512 320 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V64C32 28.65 60.65 0 96 0H256zM197.6 83.85L85.59 179.9C80.5 184.2 78.67 191.3 80.99 197.6C83.32 203.8 89.3 208 95.1 208H153.8L128.8 282.9C126.5 289.8 129.1 297.3 135.1 301.3C141 305.3 148.1 304.8 154.4 300.1L266.4 204.1C271.5 199.8 273.3 192.7 271 186.4C268.7 180.2 262.7 176 256 176H198.2L223.2 101.1C225.5 94.24 222.9 86.74 216.9 82.72C210.1 78.71 203 79.17 197.6 83.85V83.85z\"],\n    \"chart-area\": [512, 512, [\"area-chart\"], \"f1fe\", \"M64 400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32C49.67 32 64 46.33 64 64V400zM128 320V236C128 228.3 130.8 220.8 135.9 214.1L215.3 124.2C228.3 109.4 251.4 109.7 263.1 124.8L303.2 171.8C312.2 182.7 328.6 183.4 338.6 173.4L359.6 152.4C372.7 139.3 394.4 140.1 406.5 154.2L472.3 231C477.3 236.8 480 244.2 480 251.8V320C480 337.7 465.7 352 448 352H159.1C142.3 352 127.1 337.7 127.1 320L128 320z\"],\n    \"chart-bar\": [512, 512, [\"bar-chart\"], \"f080\", \"M32 32C49.67 32 64 46.33 64 64V400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32zM128 128C128 110.3 142.3 96 160 96H352C369.7 96 384 110.3 384 128C384 145.7 369.7 160 352 160H160C142.3 160 128 145.7 128 128zM288 192C305.7 192 320 206.3 320 224C320 241.7 305.7 256 288 256H160C142.3 256 128 241.7 128 224C128 206.3 142.3 192 160 192H288zM416 288C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352H160C142.3 352 128 337.7 128 320C128 302.3 142.3 288 160 288H416z\"],\n    \"chart-column\": [512, 512, [], \"e0e3\", \"M32 32C49.67 32 64 46.33 64 64V400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32zM160 224C177.7 224 192 238.3 192 256V320C192 337.7 177.7 352 160 352C142.3 352 128 337.7 128 320V256C128 238.3 142.3 224 160 224zM288 320C288 337.7 273.7 352 256 352C238.3 352 224 337.7 224 320V160C224 142.3 238.3 128 256 128C273.7 128 288 142.3 288 160V320zM352 192C369.7 192 384 206.3 384 224V320C384 337.7 369.7 352 352 352C334.3 352 320 337.7 320 320V224C320 206.3 334.3 192 352 192zM480 320C480 337.7 465.7 352 448 352C430.3 352 416 337.7 416 320V96C416 78.33 430.3 64 448 64C465.7 64 480 78.33 480 96V320z\"],\n    \"chart-gantt\": [512, 512, [], \"e0e4\", \"M32 32C49.67 32 64 46.33 64 64V400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32zM128 128C128 110.3 142.3 96 160 96H256C273.7 96 288 110.3 288 128C288 145.7 273.7 160 256 160H160C142.3 160 128 145.7 128 128zM352 192C369.7 192 384 206.3 384 224C384 241.7 369.7 256 352 256H224C206.3 256 192 241.7 192 224C192 206.3 206.3 192 224 192H352zM448 288C465.7 288 480 302.3 480 320C480 337.7 465.7 352 448 352H384C366.3 352 352 337.7 352 320C352 302.3 366.3 288 384 288H448z\"],\n    \"chart-line\": [512, 512, [\"line-chart\"], \"f201\", \"M64 400C64 408.8 71.16 416 80 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H80C35.82 480 0 444.2 0 400V64C0 46.33 14.33 32 32 32C49.67 32 64 46.33 64 64V400zM342.6 278.6C330.1 291.1 309.9 291.1 297.4 278.6L240 221.3L150.6 310.6C138.1 323.1 117.9 323.1 105.4 310.6C92.88 298.1 92.88 277.9 105.4 265.4L217.4 153.4C229.9 140.9 250.1 140.9 262.6 153.4L320 210.7L425.4 105.4C437.9 92.88 458.1 92.88 470.6 105.4C483.1 117.9 483.1 138.1 470.6 150.6L342.6 278.6z\"],\n    \"chart-pie\": [576, 512, [\"pie-chart\"], \"f200\", \"M304 16.58C304 7.555 310.1 0 320 0C443.7 0 544 100.3 544 224C544 233 536.4 240 527.4 240H304V16.58zM32 272C32 150.7 122.1 50.34 238.1 34.25C248.2 32.99 256 40.36 256 49.61V288L412.5 444.5C419.2 451.2 418.7 462.2 411 467.7C371.8 495.6 323.8 512 272 512C139.5 512 32 404.6 32 272zM558.4 288C567.6 288 575 295.8 573.8 305C566.1 360.9 539.1 410.6 499.9 447.3C493.9 452.1 484.5 452.5 478.7 446.7L320 288H558.4z\"],\n    \"check\": [448, 512, [10004, 10003], \"f00c\", \"M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z\"],\n    \"check-double\": [448, 512, [], \"f560\", \"M182.6 246.6C170.1 259.1 149.9 259.1 137.4 246.6L57.37 166.6C44.88 154.1 44.88 133.9 57.37 121.4C69.87 108.9 90.13 108.9 102.6 121.4L159.1 178.7L297.4 41.37C309.9 28.88 330.1 28.88 342.6 41.37C355.1 53.87 355.1 74.13 342.6 86.63L182.6 246.6zM182.6 470.6C170.1 483.1 149.9 483.1 137.4 470.6L9.372 342.6C-3.124 330.1-3.124 309.9 9.372 297.4C21.87 284.9 42.13 284.9 54.63 297.4L159.1 402.7L393.4 169.4C405.9 156.9 426.1 156.9 438.6 169.4C451.1 181.9 451.1 202.1 438.6 214.6L182.6 470.6z\"],\n    \"check-to-slot\": [576, 512, [\"vote-yea\"], \"f772\", \"M480 80C480 53.49 458.5 32 432 32h-288C117.5 32 96 53.49 96 80V384h384V80zM378.9 166.8l-88 112c-4.031 5.156-10 8.438-16.53 9.062C273.6 287.1 272.7 287.1 271.1 287.1c-5.719 0-11.21-2.019-15.58-5.769l-56-48C190.3 225.6 189.2 210.4 197.8 200.4c8.656-10.06 23.81-11.19 33.84-2.594l36.97 31.69l72.53-92.28c8.188-10.41 23.31-12.22 33.69-4.062C385.3 141.3 387.1 156.4 378.9 166.8zM528 288H512v112c0 8.836-7.164 16-16 16h-416C71.16 416 64 408.8 64 400V288H48C21.49 288 0 309.5 0 336v96C0 458.5 21.49 480 48 480h480c26.51 0 48-21.49 48-48v-96C576 309.5 554.5 288 528 288z\"],\n    \"cheese\": [512, 512, [], \"f7ef\", \"M0 288v159.1C0 465.6 14.38 480 32 480h448c17.62 0 32-14.38 32-31.1V288H0zM299.9 32.01c-7.75-.25-15.25 2.25-21.12 6.1L0 255.1l512-.0118C512 136.1 417.1 38.26 299.9 32.01z\"],\n    \"chess\": [512, 512, [], \"f439\", \"M74.01 208h-10c-8.875 0-16 7.125-16 16v16c0 8.875 7.122 16 15.1 16h16c-.25 43.13-5.5 86.13-16 128h128c-10.5-41.88-15.75-84.88-16-128h15.1c8.875 0 16-7.125 16-16L208 224c0-8.875-7.122-16-15.1-16h-10l33.88-90.38C216.6 115.8 216.9 113.1 216.9 112.1C216.9 103.1 209.5 96 200.9 96H144V64h16c8.844 0 16-7.156 16-16S168.9 32 160 32h-16l.0033-16c0-8.844-7.16-16-16-16s-16 7.156-16 16V32H96.01c-8.844 0-16 7.156-16 16S87.16 64 96.01 64h16v32H55.13C46.63 96 39.07 102.8 39.07 111.9c0 1.93 .3516 3.865 1.061 5.711L74.01 208zM339.9 301.8L336.6 384h126.8l-3.25-82.25l24.5-20.75C491.9 274.9 496 266 496 256.5V198C496 194.6 493.4 192 489.1 192h-26.37c-3.375 0-6 2.625-6 6V224h-24.75V198C432.9 194.6 430.3 192 426.9 192h-53.75c-3.375 0-6 2.625-6 6V224h-24.75V198C342.4 194.6 339.8 192 336.4 192h-26.38C306.6 192 304 194.6 304 198v58.62c0 9.375 4.125 18.25 11.38 24.38L339.9 301.8zM384 304C384 295.1 391.1 288 400 288S416 295.1 416 304v32h-32V304zM247.1 459.6L224 448v-16C224 423.1 216.9 416 208 416h-160C39.13 416 32 423.1 32 432V448l-23.12 11.62C3.375 462.3 0 467.9 0 473.9V496C0 504.9 7.125 512 16 512h224c8.875 0 16-7.125 16-16v-22.12C256 467.9 252.6 462.3 247.1 459.6zM503.1 459.6L480 448v-16c0-8.875-7.125-16-16-16h-128c-8.875 0-16 7.125-16 16V448l-23.12 11.62C291.4 462.3 288 467.9 288 473.9V496c0 8.875 7.125 16 16 16h192c8.875 0 16-7.125 16-16v-22.12C512 467.9 508.6 462.3 503.1 459.6z\"],\n    \"chess-bishop\": [320, 512, [9821], \"f43a\", \"M272 448h-224C21.49 448 0 469.5 0 496C0 504.8 7.164 512 16 512h288c8.836 0 16-7.164 16-16C320 469.5 298.5 448 272 448zM8 287.9c0 51.63 22.12 73.88 56 84.63V416h192v-43.5c33.88-10.75 56-33 56-84.63c0-30.62-10.75-67.13-26.75-102.5L185 285.6c-1.565 1.565-3.608 2.349-5.651 2.349c-2.036 0-4.071-.7787-5.63-2.339l-11.35-11.27c-1.56-1.56-2.339-3.616-2.339-5.672c0-2.063 .7839-4.128 2.349-5.693l107.9-107.9C249.5 117.3 223.8 83 199.4 62.5C213.4 59.13 224 47 224 32c0-17.62-14.38-32-32-32H128C110.4 0 96 14.38 96 32c0 15 10.62 27.12 24.62 30.5C67.75 106.8 8 214.5 8 287.9z\"],\n    \"chess-board\": [448, 512, [], \"f43c\", \"M192 224H128v64h64V224zM384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96C448 60.65 419.3 32 384 32zM384 160h-64v64h64v64h-64v64h64v64h-64v-64h-64v64H192v-64H128v64H64v-64h64V288H64V224h64V160H64V96h64v64h64V96h64v64h64V96h64V160zM192 288v64h64V288H192zM256 224V160H192v64H256zM256 288h64V224h-64V288z\"],\n    \"chess-king\": [448, 512, [9818], \"f43f\", \"M367.1 448H79.97c-26.51 0-48.01 21.49-48.01 47.1C31.96 504.8 39.13 512 47.96 512h352c8.838 0 16-7.163 16-16C416 469.5 394.5 448 367.1 448zM416.1 160h-160V112h16.01c17.6 0 31.98-14.4 31.98-32C303.1 62.4 289.6 48 272 48h-16.01V32C256 14.4 241.6 0 223.1 0C206.4 0 191.1 14.4 191.1 32.01V48H175.1c-17.6 0-32.01 14.4-32.01 32C143.1 97.6 158.4 112 175.1 112h16.01V160h-160C17.34 160 0 171.5 0 192C0 195.2 .4735 198.4 1.437 201.5L74.46 416h299.1l73.02-214.5C447.5 198.4 448 195.2 448 192C448 171.6 430.1 160 416.1 160z\"],\n    \"chess-knight\": [384, 512, [9822], \"f441\", \"M19 272.5l40.62 18C63.78 292.3 68.25 293.3 72.72 293.3c4 0 8.001-.7543 11.78-2.289l12.75-5.125c9.125-3.625 16-11.12 18.75-20.5L125.2 234.8C127 227.9 131.5 222.2 137.9 219.1L160 208v50.38C160 276.5 149.6 293.1 133.4 301.2L76.25 329.9C49.12 343.5 32 371.1 32 401.5V416h319.9l-.0417-192c0-105.1-85.83-192-191.8-192H12C5.375 32 0 37.38 0 44c0 2.625 .625 5.25 1.75 7.625L16 80L7 89C2.5 93.5 0 99.62 0 106V243.2C0 255.9 7.5 267.4 19 272.5zM52 128C63 128 72 137 72 148S63 168 52 168S32 159 32 148S41 128 52 128zM336 448H47.1C21.49 448 0 469.5 0 495.1C0 504.8 7.163 512 16 512h352c8.837 0 16-7.163 16-16C384 469.5 362.5 448 336 448z\"],\n    \"chess-pawn\": [320, 512, [9823], \"f443\", \"M105.1 224H80C71.12 224 64 231.1 64 240v32c0 8.875 7.125 15.1 16 15.1L96 288v5.5C96 337.5 91.88 380.1 72 416h176C228.1 380.1 224 337.5 224 293.5V288l16-.0001c8.875 0 16-7.125 16-15.1v-32C256 231.1 248.9 224 240 224h-25.12C244.3 205.6 264 173.2 264 136C264 78.5 217.5 32 159.1 32S56 78.5 56 136C56 173.2 75.74 205.6 105.1 224zM272 448H47.1C21.49 448 0 469.5 0 495.1C0 504.8 7.163 512 16 512h288c8.837 0 16-7.163 16-16C320 469.5 298.5 448 272 448z\"],\n    \"chess-queen\": [512, 512, [9819], \"f445\", \"M256 112c30.88 0 56-25.12 56-56S286.9 0 256 0S199.1 25.12 199.1 56S225.1 112 256 112zM399.1 448H111.1c-26.51 0-48 21.49-48 47.1C63.98 504.8 71.15 512 79.98 512h352c8.837 0 16-7.163 16-16C447.1 469.5 426.5 448 399.1 448zM511.1 197.4c0-5.178-2.509-10.2-7.096-13.26L476.4 168.2c-2.684-1.789-5.602-2.62-8.497-2.62c-17.22 0-17.39 26.37-51.92 26.37c-29.35 0-47.97-25.38-47.97-50.63C367.1 134 361.1 128 354.6 128h-38.75c-6 0-11.63 4-12.88 9.875C298.2 160.1 278.7 176 255.1 176c-22.75 0-42.25-15.88-47-38.12C207.7 132 202.2 128 196.1 128h-38.75C149.1 128 143.1 134 143.1 141.4c0 18.45-13.73 50.62-47.95 50.62c-34.58 0-34.87-26.39-51.87-26.39c-2.909 0-5.805 .8334-8.432 2.645l-28.63 16C2.509 187.2 0 192.3 0 197.4C0 199.9 .5585 202.3 1.72 204.6L104.2 416h303.5l102.5-211.4C511.4 202.3 511.1 199.8 511.1 197.4z\"],\n    \"chess-rook\": [384, 512, [9820], \"f447\", \"M368 32h-56c-8.875 0-16 7.125-16 16V96h-48V48c0-8.875-7.125-16-16-16h-80c-8.875 0-16 7.125-16 16V96H88.12V48c0-8.875-7.25-16-16-16H16C7.125 32 0 39.12 0 48V224l64 32c0 48.38-1.5 95-13.25 160h282.5C321.5 351 320 303.8 320 256l64-32V48C384 39.12 376.9 32 368 32zM224 320H160V256c0-17.62 14.38-32 32-32s32 14.38 32 32V320zM336 448H47.1C21.49 448 0 469.5 0 495.1C0 504.8 7.163 512 16 512h352c8.837 0 16-7.163 16-16C384 469.5 362.5 448 336 448z\"],\n    \"chevron-down\": [448, 512, [], \"f078\", \"M224 416c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 338.8l169.4-169.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-192 192C240.4 412.9 232.2 416 224 416z\"],\n    \"chevron-left\": [320, 512, [9001], \"f053\", \"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\"],\n    \"chevron-right\": [320, 512, [9002], \"f054\", \"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\"],\n    \"chevron-up\": [448, 512, [], \"f077\", \"M416 352c-8.188 0-16.38-3.125-22.62-9.375L224 173.3l-169.4 169.4c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25C432.4 348.9 424.2 352 416 352z\"],\n    \"child\": [448, 512, [], \"f1ae\", \"M224 144c39.75 0 72-32.25 72-72S263.8-.0004 224-.0004S151.1 32.25 151.1 72S184.3 144 224 144zM415.1 110.8c-13.89-17.14-39.06-19.8-56.25-5.906L307.6 146.4c-47.16 38.19-120.1 38.19-167.3 0L89.17 104.9C72.02 91 46.8 93.67 32.92 110.8C19.02 128 21.66 153.2 38.83 167.1l51.19 41.47c11.73 9.496 24.63 17.16 37.98 23.92L127.1 480c0 17.62 14.38 32 32 32h15.1c17.62 0 32-14.38 32-32v-112h32V480c0 17.62 14.38 32 32 32h15.1c17.62 0 32-14.38 32-32l-.0001-247.5c13.35-6.756 26.25-14.42 37.97-23.91l51.2-41.47C426.3 153.2 428.1 128 415.1 110.8z\"],\n    \"church\": [640, 512, [9962], \"f51d\", \"M344 48H376C389.3 48 400 58.75 400 72C400 85.25 389.3 96 376 96H344V142.4L456.7 210C471.2 218.7 480 234.3 480 251.2V512H384V416C384 380.7 355.3 352 320 352C284.7 352 256 380.7 256 416V512H160V251.2C160 234.3 168.8 218.7 183.3 210L296 142.4V96H264C250.7 96 240 85.25 240 72C240 58.75 250.7 48 264 48H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V48zM24.87 330.3L128 273.6V512H48C21.49 512 0 490.5 0 464V372.4C0 354.9 9.53 338.8 24.87 330.3V330.3zM592 512H512V273.6L615.1 330.3C630.5 338.8 640 354.9 640 372.4V464C640 490.5 618.5 512 592 512V512z\"],\n    \"circle\": [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9898, 9899, 11044, 61708, 61915, 9679], \"f111\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256z\"],\n    \"circle-arrow-down\": [512, 512, [\"arrow-circle-down\"], \"f0ab\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM382.6 302.6l-103.1 103.1C270.7 414.6 260.9 416 256 416c-4.881 0-14.65-1.391-22.65-9.398L129.4 302.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 306.8V128c0-17.69 14.33-32 32-32s32 14.31 32 32v178.8l49.38-49.38c12.5-12.5 32.75-12.5 45.25 0S395.1 290.1 382.6 302.6z\"],\n    \"circle-arrow-left\": [512, 512, [\"arrow-circle-left\"], \"f0a8\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM384 288H205.3l49.38 49.38c12.5 12.5 12.5 32.75 0 45.25s-32.75 12.5-45.25 0L105.4 278.6C97.4 270.7 96 260.9 96 256c0-4.883 1.391-14.66 9.398-22.65l103.1-103.1c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L205.3 224H384c17.69 0 32 14.33 32 32S401.7 288 384 288z\"],\n    \"circle-arrow-right\": [512, 512, [\"arrow-circle-right\"], \"f0a9\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM406.6 278.6l-103.1 103.1c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25L306.8 288H128C110.3 288 96 273.7 96 256s14.31-32 32-32h178.8l-49.38-49.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l103.1 103.1C414.6 241.3 416 251.1 416 256C416 260.9 414.6 270.7 406.6 278.6z\"],\n    \"circle-arrow-up\": [512, 512, [\"arrow-circle-up\"], \"f0aa\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM382.6 254.6c-12.5 12.5-32.75 12.5-45.25 0L288 205.3V384c0 17.69-14.33 32-32 32s-32-14.31-32-32V205.3L174.6 254.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l103.1-103.1C241.3 97.4 251.1 96 256 96c4.881 0 14.65 1.391 22.65 9.398l103.1 103.1C395.1 221.9 395.1 242.1 382.6 254.6z\"],\n    \"circle-check\": [512, 512, [61533, \"check-circle\"], \"f058\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM371.8 211.8C382.7 200.9 382.7 183.1 371.8 172.2C360.9 161.3 343.1 161.3 332.2 172.2L224 280.4L179.8 236.2C168.9 225.3 151.1 225.3 140.2 236.2C129.3 247.1 129.3 264.9 140.2 275.8L204.2 339.8C215.1 350.7 232.9 350.7 243.8 339.8L371.8 211.8z\"],\n    \"circle-chevron-down\": [512, 512, [\"chevron-circle-down\"], \"f13a\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM390.6 246.6l-112 112C272.4 364.9 264.2 368 256 368s-16.38-3.125-22.62-9.375l-112-112c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L256 290.8l89.38-89.38c12.5-12.5 32.75-12.5 45.25 0S403.1 234.1 390.6 246.6z\"],\n    \"circle-chevron-left\": [512, 512, [\"chevron-circle-left\"], \"f137\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM310.6 345.4c12.5 12.5 12.5 32.75 0 45.25s-32.75 12.5-45.25 0l-112-112C147.1 272.4 144 264.2 144 256s3.125-16.38 9.375-22.62l112-112c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L221.3 256L310.6 345.4z\"],\n    \"circle-chevron-right\": [512, 512, [\"chevron-circle-right\"], \"f138\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM358.6 278.6l-112 112c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25L290.8 256L201.4 166.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l112 112C364.9 239.6 368 247.8 368 256S364.9 272.4 358.6 278.6z\"],\n    \"circle-chevron-up\": [512, 512, [\"chevron-circle-up\"], \"f139\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM390.6 310.6c-12.5 12.5-32.75 12.5-45.25 0L256 221.3L166.6 310.6c-12.5 12.5-32.75 12.5-45.25 0s-12.5-32.75 0-45.25l112-112C239.6 147.1 247.8 144 256 144s16.38 3.125 22.62 9.375l112 112C403.1 277.9 403.1 298.1 390.6 310.6z\"],\n    \"circle-dollar-to-slot\": [512, 512, [\"donate\"], \"f4b9\", \"M326.7 403.7C304.7 411.6 280.8 416 256 416C231.2 416 207.3 411.6 185.3 403.7C184.1 403.6 184.7 403.5 184.5 403.4C154.4 392.4 127.6 374.6 105.9 352C70.04 314.6 48 263.9 48 208C48 93.12 141.1 0 256 0C370.9 0 464 93.12 464 208C464 263.9 441.1 314.6 406.1 352C405.1 353 404.1 354.1 403.1 355.1C381.7 376.4 355.7 393.2 326.7 403.7L326.7 403.7zM235.9 111.1V118C230.3 119.2 224.1 120.9 220 123.1C205.1 129.9 192.1 142.5 188.9 160.8C187.1 171 188.1 180.9 192.3 189.8C196.5 198.6 203 204.8 209.6 209.3C221.2 217.2 236.5 221.8 248.2 225.3L250.4 225.9C264.4 230.2 273.8 233.3 279.7 237.6C282.2 239.4 283.1 240.8 283.4 241.7C283.8 242.5 284.4 244.3 283.7 248.3C283.1 251.8 281.2 254.8 275.7 257.1C269.6 259.7 259.7 261 246.9 259C240.9 258 230.2 254.4 220.7 251.2C218.5 250.4 216.3 249.7 214.3 249C203.8 245.5 192.5 251.2 189 261.7C185.5 272.2 191.2 283.5 201.7 286.1C202.9 287.4 204.4 287.9 206.1 288.5C213.1 291.2 226.4 295.4 235.9 297.6V304C235.9 315.1 244.9 324.1 255.1 324.1C267.1 324.1 276.1 315.1 276.1 304V298.5C281.4 297.5 286.6 295.1 291.4 293.9C307.2 287.2 319.8 274.2 323.1 255.2C324.9 244.8 324.1 234.8 320.1 225.7C316.2 216.7 309.9 210.1 303.2 205.3C291.1 196.4 274.9 191.6 262.8 187.9L261.1 187.7C247.8 183.4 238.2 180.4 232.1 176.2C229.5 174.4 228.7 173.2 228.5 172.7C228.3 172.3 227.7 171.1 228.3 167.7C228.7 165.7 230.2 162.4 236.5 159.6C242.1 156.7 252.9 155.1 265.1 156.1C269.5 157.7 283 160.3 286.9 161.3C297.5 164.2 308.5 157.8 311.3 147.1C314.2 136.5 307.8 125.5 297.1 122.7C292.7 121.5 282.7 119.5 276.1 118.3V112C276.1 100.9 267.1 91.9 256 91.9C244.9 91.9 235.9 100.9 235.9 112V111.1zM48 352H63.98C83.43 377.9 108 399.7 136.2 416H64V448H448V416H375.8C403.1 399.7 428.6 377.9 448 352H464C490.5 352 512 373.5 512 400V464C512 490.5 490.5 512 464 512H48C21.49 512 0 490.5 0 464V400C0 373.5 21.49 352 48 352H48z\"],\n    \"circle-dot\": [512, 512, [128280, \"dot-circle\"], \"f192\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 352C309 352 352 309 352 256C352 202.1 309 160 256 160C202.1 160 160 202.1 160 256C160 309 202.1 352 256 352z\"],\n    \"circle-down\": [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M256 512c141.4 0 256-114.6 256-256s-114.6-256-256-256C114.6 0 0 114.6 0 256S114.6 512 256 512zM129.2 265.9C131.7 259.9 137.5 256 144 256h64V160c0-17.67 14.33-32 32-32h32c17.67 0 32 14.33 32 32v96h64c6.469 0 12.31 3.891 14.78 9.875c2.484 5.984 1.109 12.86-3.469 17.44l-112 112c-6.248 6.248-16.38 6.248-22.62 0l-112-112C128.1 278.7 126.7 271.9 129.2 265.9z\"],\n    \"circle-exclamation\": [512, 512, [\"exclamation-circle\"], \"f06a\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM232 152C232 138.8 242.8 128 256 128s24 10.75 24 24v128c0 13.25-10.75 24-24 24S232 293.3 232 280V152zM256 400c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 385.9 273.4 400 256 400z\"],\n    \"circle-h\": [512, 512, [9405, \"hospital-symbol\"], \"f47e\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM368 360c0 13.25-10.75 24-24 24S320 373.3 320 360v-80H192v80C192 373.3 181.3 384 168 384S144 373.3 144 360v-208C144 138.8 154.8 128 168 128S192 138.8 192 152v80h128v-80C320 138.8 330.8 128 344 128s24 10.75 24 24V360z\"],\n    \"circle-half-stroke\": [512, 512, [9680, \"adjust\"], \"f042\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 64V448C362 448 448 362 448 256C448 149.1 362 64 256 64z\"],\n    \"circle-info\": [512, 512, [\"info-circle\"], \"f05a\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z\"],\n    \"circle-left\": [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M0 256c0 141.4 114.6 256 256 256s256-114.6 256-256c0-141.4-114.6-256-256-256S0 114.6 0 256zM246.1 129.2C252.1 131.7 256 137.5 256 144v64h96c17.67 0 32 14.33 32 32v32c0 17.67-14.33 32-32 32h-96v64c0 6.469-3.891 12.31-9.875 14.78c-5.984 2.484-12.86 1.109-17.44-3.469l-112-112c-6.248-6.248-6.248-16.38 0-22.62l112-112C233.3 128.1 240.1 126.7 246.1 129.2z\"],\n    \"circle-minus\": [512, 512, [\"minus-circle\"], \"f056\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM168 232C154.7 232 144 242.7 144 256C144 269.3 154.7 280 168 280H344C357.3 280 368 269.3 368 256C368 242.7 357.3 232 344 232H168z\"],\n    \"circle-notch\": [512, 512, [], \"f1ce\", \"M222.7 32.15C227.7 49.08 218.1 66.9 201.1 71.94C121.8 95.55 64 169.1 64 255.1C64 362 149.1 447.1 256 447.1C362 447.1 448 362 448 255.1C448 169.1 390.2 95.55 310.9 71.94C293.9 66.9 284.3 49.08 289.3 32.15C294.4 15.21 312.2 5.562 329.1 10.6C434.9 42.07 512 139.1 512 255.1C512 397.4 397.4 511.1 256 511.1C114.6 511.1 0 397.4 0 255.1C0 139.1 77.15 42.07 182.9 10.6C199.8 5.562 217.6 15.21 222.7 32.15V32.15z\"],\n    \"circle-pause\": [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM224 191.1v128C224 337.7 209.7 352 192 352S160 337.7 160 320V191.1C160 174.3 174.3 160 191.1 160S224 174.3 224 191.1zM352 191.1v128C352 337.7 337.7 352 320 352S288 337.7 288 320V191.1C288 174.3 302.3 160 319.1 160S352 174.3 352 191.1z\"],\n    \"circle-play\": [512, 512, [61469, \"play-circle\"], \"f144\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM176 168V344C176 352.7 180.7 360.7 188.3 364.9C195.8 369.2 205.1 369 212.5 364.5L356.5 276.5C363.6 272.1 368 264.4 368 256C368 247.6 363.6 239.9 356.5 235.5L212.5 147.5C205.1 142.1 195.8 142.8 188.3 147.1C180.7 151.3 176 159.3 176 168V168z\"],\n    \"circle-plus\": [512, 512, [\"plus-circle\"], \"f055\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 368C269.3 368 280 357.3 280 344V280H344C357.3 280 368 269.3 368 256C368 242.7 357.3 232 344 232H280V168C280 154.7 269.3 144 256 144C242.7 144 232 154.7 232 168V232H168C154.7 232 144 242.7 144 256C144 269.3 154.7 280 168 280H232V344C232 357.3 242.7 368 256 368z\"],\n    \"circle-question\": [512, 512, [62108, \"question-circle\"], \"f059\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 400c-18 0-32-14-32-32s13.1-32 32-32c17.1 0 32 14 32 32S273.1 400 256 400zM325.1 258L280 286V288c0 13-11 24-24 24S232 301 232 288V272c0-8 4-16 12-21l57-34C308 213 312 206 312 198C312 186 301.1 176 289.1 176h-51.1C225.1 176 216 186 216 198c0 13-11 24-24 24s-24-11-24-24C168 159 199 128 237.1 128h51.1C329 128 360 159 360 198C360 222 347 245 325.1 258z\"],\n    \"circle-radiation\": [512, 512, [9762, \"radiation-alt\"], \"f7ba\", \"M226.4 208.6L184.8 141.9C179.6 133.7 168.3 132 160.7 138.2C130.8 162.3 110.1 197.4 105.1 237.4C103.9 247.2 111.2 256 121 256H200C200 236 210.6 218.6 226.4 208.6zM256 288c17.67 0 32-14.33 32-32s-14.33-32-32-32C238.3 224 224 238.3 224 256S238.3 288 256 288zM285.6 303.3C276.1 308.7 266.9 312 256 312c-10.89 0-20.98-3.252-29.58-8.65l-41.74 66.8c-5.211 8.338-1.613 19.07 7.27 23.29C211.4 402.7 233.1 408 256 408c22.97 0 44.64-5.334 64.12-14.59c8.883-4.219 12.48-14.95 7.262-23.29L285.6 303.3zM351.4 138.2c-7.604-6.145-18.86-4.518-24.04 3.77l-41.71 66.67C301.4 218.6 312 236 312 256h78.96c9.844 0 17.11-8.791 15.91-18.56C401.9 197.5 381.3 162.4 351.4 138.2zM256 16C123.4 16 16 123.4 16 256s107.4 240 240 240c132.6 0 240-107.4 240-240S388.6 16 256 16zM256 432c-97.05 0-176-78.99-176-176S158.1 80 256 80s176 78.95 176 176S353 432 256 432z\"],\n    \"circle-right\": [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M512 256c0-141.4-114.6-256-256-256S0 114.6 0 256c0 141.4 114.6 256 256 256S512 397.4 512 256zM265.9 382.8C259.9 380.3 256 374.5 256 368v-64H160c-17.67 0-32-14.33-32-32v-32c0-17.67 14.33-32 32-32h96v-64c0-6.469 3.891-12.31 9.875-14.78c5.984-2.484 12.86-1.109 17.44 3.469l112 112c6.248 6.248 6.248 16.38 0 22.62l-112 112C278.7 383.9 271.9 385.3 265.9 382.8z\"],\n    \"circle-stop\": [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM352 328c0 13.2-10.8 24-24 24h-144C170.8 352 160 341.2 160 328v-144C160 170.8 170.8 160 184 160h144C341.2 160 352 170.8 352 184V328z\"],\n    \"circle-up\": [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256c141.4 0 256-114.6 256-256S397.4 0 256 0zM382.8 246.1C380.3 252.1 374.5 256 368 256h-64v96c0 17.67-14.33 32-32 32h-32c-17.67 0-32-14.33-32-32V256h-64C137.5 256 131.7 252.1 129.2 246.1C126.7 240.1 128.1 233.3 132.7 228.7l112-112c6.248-6.248 16.38-6.248 22.62 0l112 112C383.9 233.3 385.3 240.1 382.8 246.1z\"],\n    \"circle-user\": [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c39.77 0 72 32.24 72 72S295.8 272 256 272c-39.76 0-72-32.24-72-72S216.2 128 256 128zM256 448c-52.93 0-100.9-21.53-135.7-56.29C136.5 349.9 176.5 320 224 320h64c47.54 0 87.54 29.88 103.7 71.71C356.9 426.5 308.9 448 256 448z\"],\n    \"circle-xmark\": [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM175 208.1L222.1 255.1L175 303C165.7 312.4 165.7 327.6 175 336.1C184.4 346.3 199.6 346.3 208.1 336.1L255.1 289.9L303 336.1C312.4 346.3 327.6 346.3 336.1 336.1C346.3 327.6 346.3 312.4 336.1 303L289.9 255.1L336.1 208.1C346.3 199.6 346.3 184.4 336.1 175C327.6 165.7 312.4 165.7 303 175L255.1 222.1L208.1 175C199.6 165.7 184.4 165.7 175 175C165.7 184.4 165.7 199.6 175 208.1V208.1z\"],\n    \"city\": [640, 512, [127961], \"f64f\", \"M480 192H592C618.5 192 640 213.5 640 240V464C640 490.5 618.5 512 592 512H48C21.49 512 0 490.5 0 464V144C0 117.5 21.49 96 48 96H64V24C64 10.75 74.75 0 88 0C101.3 0 112 10.75 112 24V96H176V24C176 10.75 186.7 0 200 0C213.3 0 224 10.75 224 24V96H288V48C288 21.49 309.5 0 336 0H432C458.5 0 480 21.49 480 48V192zM576 368C576 359.2 568.8 352 560 352H528C519.2 352 512 359.2 512 368V400C512 408.8 519.2 416 528 416H560C568.8 416 576 408.8 576 400V368zM240 416C248.8 416 256 408.8 256 400V368C256 359.2 248.8 352 240 352H208C199.2 352 192 359.2 192 368V400C192 408.8 199.2 416 208 416H240zM128 368C128 359.2 120.8 352 112 352H80C71.16 352 64 359.2 64 368V400C64 408.8 71.16 416 80 416H112C120.8 416 128 408.8 128 400V368zM528 256C519.2 256 512 263.2 512 272V304C512 312.8 519.2 320 528 320H560C568.8 320 576 312.8 576 304V272C576 263.2 568.8 256 560 256H528zM256 176C256 167.2 248.8 160 240 160H208C199.2 160 192 167.2 192 176V208C192 216.8 199.2 224 208 224H240C248.8 224 256 216.8 256 208V176zM80 160C71.16 160 64 167.2 64 176V208C64 216.8 71.16 224 80 224H112C120.8 224 128 216.8 128 208V176C128 167.2 120.8 160 112 160H80zM256 272C256 263.2 248.8 256 240 256H208C199.2 256 192 263.2 192 272V304C192 312.8 199.2 320 208 320H240C248.8 320 256 312.8 256 304V272zM112 320C120.8 320 128 312.8 128 304V272C128 263.2 120.8 256 112 256H80C71.16 256 64 263.2 64 272V304C64 312.8 71.16 320 80 320H112zM416 272C416 263.2 408.8 256 400 256H368C359.2 256 352 263.2 352 272V304C352 312.8 359.2 320 368 320H400C408.8 320 416 312.8 416 304V272zM368 64C359.2 64 352 71.16 352 80V112C352 120.8 359.2 128 368 128H400C408.8 128 416 120.8 416 112V80C416 71.16 408.8 64 400 64H368zM416 176C416 167.2 408.8 160 400 160H368C359.2 160 352 167.2 352 176V208C352 216.8 359.2 224 368 224H400C408.8 224 416 216.8 416 208V176z\"],\n    \"clapperboard\": [512, 512, [], \"e131\", \"M326.1 160l127.4-127.4C451.7 32.39 449.9 32 448 32h-86.06l-128 128H326.1zM166.1 160l128-128H201.9l-128 128H166.1zM497.7 56.19L393.9 160H512V96C512 80.87 506.5 67.15 497.7 56.19zM134.1 32H64C28.65 32 0 60.65 0 96v64h6.062L134.1 32zM0 416c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V192H0V416z\"],\n    \"clipboard\": [384, 512, [128203], \"f328\", \"M336 64h-53.88C268.9 26.8 233.7 0 192 0S115.1 26.8 101.9 64H48C21.5 64 0 85.48 0 112v352C0 490.5 21.5 512 48 512h288c26.5 0 48-21.48 48-48v-352C384 85.48 362.5 64 336 64zM192 64c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S160 113.7 160 96C160 78.33 174.3 64 192 64zM272 224h-160C103.2 224 96 216.8 96 208C96 199.2 103.2 192 112 192h160C280.8 192 288 199.2 288 208S280.8 224 272 224z\"],\n    \"clipboard-check\": [384, 512, [], \"f46c\", \"M336 64h-53.88C268.9 26.8 233.7 0 192 0S115.1 26.8 101.9 64H48C21.5 64 0 85.48 0 112v352C0 490.5 21.5 512 48 512h288c26.5 0 48-21.48 48-48v-352C384 85.48 362.5 64 336 64zM192 64c17.67 0 32 14.33 32 32s-14.33 32-32 32S160 113.7 160 96S174.3 64 192 64zM282.9 262.8l-88 112c-4.047 5.156-10.02 8.438-16.53 9.062C177.6 383.1 176.8 384 176 384c-5.703 0-11.25-2.031-15.62-5.781l-56-48c-10.06-8.625-11.22-23.78-2.594-33.84c8.609-10.06 23.77-11.22 33.84-2.594l36.98 31.69l72.52-92.28c8.188-10.44 23.3-12.22 33.7-4.062C289.3 237.3 291.1 252.4 282.9 262.8z\"],\n    \"clipboard-list\": [384, 512, [], \"f46d\", \"M336 64h-53.88C268.9 26.8 233.7 0 192 0S115.1 26.8 101.9 64H48C21.5 64 0 85.48 0 112v352C0 490.5 21.5 512 48 512h288c26.5 0 48-21.48 48-48v-352C384 85.48 362.5 64 336 64zM96 392c-13.25 0-24-10.75-24-24S82.75 344 96 344s24 10.75 24 24S109.3 392 96 392zM96 296c-13.25 0-24-10.75-24-24S82.75 248 96 248S120 258.8 120 272S109.3 296 96 296zM192 64c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S160 113.7 160 96C160 78.33 174.3 64 192 64zM304 384h-128C167.2 384 160 376.8 160 368C160 359.2 167.2 352 176 352h128c8.801 0 16 7.199 16 16C320 376.8 312.8 384 304 384zM304 288h-128C167.2 288 160 280.8 160 272C160 263.2 167.2 256 176 256h128C312.8 256 320 263.2 320 272C320 280.8 312.8 288 304 288z\"],\n    \"clock\": [512, 512, [128339, \"clock-four\"], \"f017\", \"M256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512zM232 256C232 264 236 271.5 242.7 275.1L338.7 339.1C349.7 347.3 364.6 344.3 371.1 333.3C379.3 322.3 376.3 307.4 365.3 300L280 243.2V120C280 106.7 269.3 96 255.1 96C242.7 96 231.1 106.7 231.1 120L232 256z\"],\n    \"clock-rotate-left\": [512, 512, [\"history\"], \"f1da\", \"M256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C201.7 512 151.2 495 109.7 466.1C95.2 455.1 91.64 436 101.8 421.5C111.9 407 131.8 403.5 146.3 413.6C177.4 435.3 215.2 448 256 448C362 448 448 362 448 256C448 149.1 362 64 256 64C202.1 64 155 85.46 120.2 120.2L151 151C166.1 166.1 155.4 192 134.1 192H24C10.75 192 0 181.3 0 168V57.94C0 36.56 25.85 25.85 40.97 40.97L74.98 74.98C121.3 28.69 185.3 0 255.1 0L256 0zM256 128C269.3 128 280 138.7 280 152V246.1L344.1 311C354.3 320.4 354.3 335.6 344.1 344.1C335.6 354.3 320.4 354.3 311 344.1L239 272.1C234.5 268.5 232 262.4 232 256V152C232 138.7 242.7 128 256 128V128z\"],\n    \"clone\": [512, 512, [], \"f24d\", \"M0 224C0 188.7 28.65 160 64 160H128V288C128 341 170.1 384 224 384H352V448C352 483.3 323.3 512 288 512H64C28.65 512 0 483.3 0 448V224zM224 352C188.7 352 160 323.3 160 288V64C160 28.65 188.7 0 224 0H448C483.3 0 512 28.65 512 64V288C512 323.3 483.3 352 448 352H224z\"],\n    \"closed-captioning\": [576, 512, [], \"f20a\", \"M512 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V96C576 60.65 547.3 32 512 32zM168.6 289.9c18.69 18.72 49.19 18.72 67.87 0c9.375-9.375 24.56-9.375 33.94 0s9.375 24.56 0 33.94c-18.72 18.72-43.28 28.08-67.87 28.08s-49.16-9.359-67.87-28.08C116.5 305.8 106.5 281.6 106.5 256s9.1-49.75 28.12-67.88c37.44-37.44 98.31-37.44 135.7 0c9.375 9.375 9.375 24.56 0 33.94s-24.56 9.375-33.94 0c-18.69-18.72-49.19-18.72-67.87 0C159.5 231.1 154.5 243.2 154.5 256S159.5 280.9 168.6 289.9zM360.6 289.9c18.69 18.72 49.19 18.72 67.87 0c9.375-9.375 24.56-9.375 33.94 0s9.375 24.56 0 33.94c-18.72 18.72-43.28 28.08-67.87 28.08s-49.16-9.359-67.87-28.08C308.5 305.8 298.5 281.6 298.5 256s9.1-49.75 28.12-67.88c37.44-37.44 98.31-37.44 135.7 0c9.375 9.375 9.375 24.56 0 33.94s-24.56 9.375-33.94 0c-18.69-18.72-49.19-18.72-67.87 0C351.5 231.1 346.5 243.2 346.5 256S351.5 280.9 360.6 289.9z\"],\n    \"cloud\": [640, 512, [9729], \"f0c2\", \"M96.2 200.1C96.07 197.4 96 194.7 96 192C96 103.6 167.6 32 256 32C315.3 32 367 64.25 394.7 112.2C409.9 101.1 428.3 96 448 96C501 96 544 138.1 544 192C544 204.2 541.7 215.8 537.6 226.6C596 238.4 640 290.1 640 352C640 422.7 582.7 480 512 480H144C64.47 480 0 415.5 0 336C0 273.2 40.17 219.8 96.2 200.1z\"],\n    \"cloud-arrow-down\": [640, 512, [62337, \"cloud-download\", \"cloud-download-alt\"], \"f0ed\", \"M144 480C64.47 480 0 415.5 0 336C0 273.2 40.17 219.8 96.2 200.1C96.07 197.4 96 194.7 96 192C96 103.6 167.6 32 256 32C315.3 32 367 64.25 394.7 112.2C409.9 101.1 428.3 96 448 96C501 96 544 138.1 544 192C544 204.2 541.7 215.8 537.6 226.6C596 238.4 640 290.1 640 352C640 422.7 582.7 480 512 480H144zM303 392.1C312.4 402.3 327.6 402.3 336.1 392.1L416.1 312.1C426.3 303.6 426.3 288.4 416.1 279C407.6 269.7 392.4 269.7 383 279L344 318.1V184C344 170.7 333.3 160 320 160C306.7 160 296 170.7 296 184V318.1L256.1 279C247.6 269.7 232.4 269.7 223 279C213.7 288.4 213.7 303.6 223 312.1L303 392.1z\"],\n    \"cloud-arrow-up\": [640, 512, [62338, \"cloud-upload\", \"cloud-upload-alt\"], \"f0ee\", \"M144 480C64.47 480 0 415.5 0 336C0 273.2 40.17 219.8 96.2 200.1C96.07 197.4 96 194.7 96 192C96 103.6 167.6 32 256 32C315.3 32 367 64.25 394.7 112.2C409.9 101.1 428.3 96 448 96C501 96 544 138.1 544 192C544 204.2 541.7 215.8 537.6 226.6C596 238.4 640 290.1 640 352C640 422.7 582.7 480 512 480H144zM223 263C213.7 272.4 213.7 287.6 223 296.1C232.4 306.3 247.6 306.3 256.1 296.1L296 257.9V392C296 405.3 306.7 416 320 416C333.3 416 344 405.3 344 392V257.9L383 296.1C392.4 306.3 407.6 306.3 416.1 296.1C426.3 287.6 426.3 272.4 416.1 263L336.1 183C327.6 173.7 312.4 173.7 303 183L223 263z\"],\n    \"cloud-meatball\": [576, 512, [], \"f73b\", \"M80 352C53.5 352 32 373.5 32 400S53.5 448 80 448S128 426.5 128 400S106.5 352 80 352zM496 352c-26.5 0-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48S522.5 352 496 352zM377 363.1c4.625-14.5 1.625-30.88-9.75-42.37c-11.5-11.5-27.87-14.38-42.37-9.875c-7-13.5-20.63-23-36.88-23s-29.88 9.5-36.88 23C236.6 306.2 220.2 309.2 208.8 320.8c-11.5 11.5-14.38 27.87-9.875 42.37c-13.5 7-23 20.63-23 36.88s9.5 29.88 23 36.88c-4.625 14.5-1.625 30.88 9.875 42.37c8.25 8.125 19 12.25 29.75 12.25c4.25 0 8.5-1.125 12.62-2.5C258.1 502.5 271.8 512 288 512s29.88-9.5 36.88-23c4.125 1.25 8.375 2.5 12.62 2.5c10.75 0 21.5-4.125 29.75-12.25c11.5-11.5 14.38-27.87 9.75-42.37C390.5 429.9 400 416.2 400 400S390.5 370.1 377 363.1zM544 224c0-53-43-96-96-96c-.625 0-1.125 .25-1.625 .25C447.5 123 448 117.6 448 112C448 67.75 412.2 32 368 32c-24.62 0-46.25 11.25-61 28.75C288.4 24.75 251.2 0 208 0C146.1 0 96 50.12 96 112c0 7.25 .75 14.25 2.125 21.25C59.75 145.8 32 181.5 32 224c0 53 43 96 96 96h43.38C175 312 179.8 304.6 186.2 298.2C199.8 284.8 217.8 277.1 237 276.9C250.5 263.8 268.8 256 288 256s37.5 7.75 51 20.88c19.25 .25 37.25 7.875 50.75 21.37C396.2 304.6 401.1 312 404.6 320H448C501 320 544 277 544 224z\"],\n    \"cloud-moon\": [576, 512, [], \"f6c3\", \"M342.7 352.7c5.75-9.625 9.25-20.75 9.25-32.75c0-35.25-28.75-64-63.1-64c-17.25 0-32.75 6.875-44.25 17.87C227.4 244.2 196.2 223.1 159.1 223.1c-53 0-96 43.06-96 96.06c0 2 .5029 3.687 .6279 5.687c-37.5 13-64.62 48.38-64.62 90.25C-.0048 468.1 42.99 512 95.99 512h239.1c44.25 0 79.1-35.75 79.1-80C415.1 390.1 383.7 356.2 342.7 352.7zM565.2 298.4c-93 17.75-178.5-53.62-178.5-147.6c0-54.25 28.1-104 76.12-130.9c7.375-4.125 5.375-15.12-2.75-16.63C448.4 1.125 436.7 0 424.1 0c-105.9 0-191.9 85.88-191.9 192c0 8.5 .625 16.75 1.75 25c5.875 4.25 11.62 8.875 16.75 14.25C262.1 226.5 275.2 224 287.1 224c52.88 0 95.1 43.13 95.1 96c0 3.625-.25 7.25-.625 10.75c23.62 10.75 42.37 29.5 53.5 52.5c54.38-3.375 103.7-29.25 137.1-70.37C579.2 306.4 573.5 296.8 565.2 298.4z\"],\n    \"cloud-moon-rain\": [576, 512, [], \"f73c\", \"M350.5 225.5c-6.876-37.25-39.25-65.5-78.51-65.5c-12.25 0-23.88 2.1-34.25 7.1C220.3 143.9 192.1 128 160 128c-53.01 0-96.01 42.1-96.01 95.1c0 .5 .25 1.125 .25 1.625C27.63 232.9 0 265.3 0 304c0 44.25 35.75 79.1 80.01 79.1h256c44.25 0 80.01-35.75 80.01-79.1C416 264.8 387.8 232.3 350.5 225.5zM567.9 223.8C497.6 237.1 432.9 183.5 432.9 113c0-40.63 21.88-78 57.5-98.13c5.501-3.125 4.077-11.37-2.173-12.5C479.6 .7538 470.8 0 461.8 0c-77.88 0-141.1 61.25-144.4 137.9c26.75 11.88 48.26 33.88 58.88 61.75c37.13 14.25 64.01 47.38 70.26 86.75c5.126 .5 10.05 1.522 15.3 1.522c44.63 0 85.46-20.15 112.5-53.27C578.6 229.8 574.2 222.6 567.9 223.8zM340.1 426.7l-32 48c-7.345 11.03-4.376 25.94 6.657 33.28C318.8 510.7 323.4 512 327.1 512c7.751 0 15.38-3.75 20-10.69l32-48c7.345-11.03 4.376-25.94-6.657-33.28C362.3 412.7 347.4 415.7 340.1 426.7zM244 426.7l-32 48c-7.345 11.03-4.376 25.94 6.657 33.28C222.8 510.7 227.4 512 231.1 512c7.751 0 15.38-3.75 20-10.69l32-48c7.345-11.03 4.376-25.94-6.657-33.28C266.3 412.7 251.4 415.7 244 426.7zM148 426.7l-32 48c-7.345 11.03-4.376 25.94 6.657 33.28C126.8 510.7 131.4 512 135.1 512c7.751 0 15.38-3.75 20-10.69l32-48c7.345-11.03 4.376-25.94-6.657-33.28C170.3 412.7 155.4 415.7 148 426.7zM52.03 426.7l-32 48c-7.345 11.03-4.376 25.94 6.657 33.28C30.78 510.7 35.41 512 39.97 512c7.751 0 15.38-3.75 20-10.69l32-48c7.345-11.03 4.376-25.94-6.657-33.28C74.25 412.7 59.41 415.7 52.03 426.7z\"],\n    \"cloud-rain\": [512, 512, [127783, 9926], \"f73d\", \"M416 128c-.625 0-1.125 .25-1.625 .25C415.5 123 416 117.6 416 112C416 67.75 380.3 32 336 32c-24.62 0-46.25 11.25-61 28.75C256.4 24.75 219.3 0 176 0C114.1 0 64 50.13 64 112c0 7.25 .75 14.25 2.125 21.25C27.75 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96S469 128 416 128zM368 464c0 26.51 21.49 48 48 48s48-21.49 48-48s-48.01-95.1-48.01-95.1S368 437.5 368 464zM48 464C48 490.5 69.49 512 96 512s48-21.49 48-48s-48.01-95.1-48.01-95.1S48 437.5 48 464zM208 464c0 26.51 21.49 48 48 48s48-21.49 48-48s-48.01-95.1-48.01-95.1S208 437.5 208 464z\"],\n    \"cloud-showers-heavy\": [512, 512, [], \"f740\", \"M416 128c-.625 0-1.125 .25-1.625 .25C415.5 123 416 117.6 416 112c0-44.25-35.75-80-79.1-80c-24.62 0-46.25 11.25-60.1 28.75C256.4 24.75 219.3 0 176 0C114.3 0 64 50.13 64 112c0 7.25 .7512 14.25 2.126 21.25C27.76 145.8 .0054 181.5 .0054 224c0 53 42.1 96 95.1 96h319.1C469 320 512 277 512 224S469 128 416 128zM198.8 353.9c-12.17-5.219-26.3 .4062-31.52 12.59l-47.1 112c-5.219 12.19 .4219 26.31 12.61 31.53C134.1 511.4 138.2 512 141.3 512c9.312 0 18.17-5.438 22.08-14.53l47.1-112C216.6 373.3 210.1 359.2 198.8 353.9zM81.46 353.9c-12.19-5.219-26.3 .4062-31.52 12.59l-47.1 112C-3.276 490.7 2.365 504.8 14.55 510.1C17.63 511.4 20.83 512 23.99 512c9.312 0 18.17-5.438 22.08-14.53l47.1-112C99.29 373.3 93.64 359.2 81.46 353.9zM316.1 353.9c-12.19-5.219-26.3 .4062-31.52 12.59l-47.1 112c-5.219 12.19 .4219 26.31 12.61 31.53C252.3 511.4 255.5 512 258.7 512c9.312 0 18.17-5.438 22.08-14.53l47.1-112C333.1 373.3 328.3 359.2 316.1 353.9zM433.5 353.9c-12.17-5.219-26.28 .4062-31.52 12.59l-47.1 112c-5.219 12.19 .4219 26.31 12.61 31.53C369.6 511.4 372.8 512 375.1 512c9.312 0 18.17-5.438 22.08-14.53l47.1-112C451.3 373.3 445.6 359.2 433.5 353.9z\"],\n    \"cloud-sun\": [640, 512, [9925], \"f6c4\", \"M96 208c0-61.86 50.14-111.1 111.1-111.1c52.65 0 96.5 36.45 108.5 85.42C334.7 173.1 354.7 168 375.1 168c4.607 0 9.152 .3809 13.68 .8203l24.13-34.76c5.145-7.414 .8965-17.67-7.984-19.27L317.2 98.78L301.2 10.21C299.6 1.325 289.4-2.919 281.9 2.226L208 53.54L134.1 2.225C126.6-2.92 116.4 1.326 114.8 10.21L98.78 98.78L10.21 114.8C1.326 116.4-2.922 126.7 2.223 134.1l51.3 73.94L2.224 281.9c-5.145 7.414-.8975 17.67 7.983 19.27L98.78 317.2l16.01 88.58c1.604 8.881 11.86 13.13 19.27 7.982l10.71-7.432c2.725-35.15 19.85-66.51 45.83-88.1C137.1 309.8 96 263.9 96 208zM128 208c0 44.18 35.82 80 80 80c9.729 0 18.93-1.996 27.56-5.176c7.002-33.65 25.53-62.85 51.57-83.44C282.8 159.3 249.2 128 208 128C163.8 128 128 163.8 128 208zM575.2 325.6c.125-2 .7453-3.744 .7453-5.619c0-35.38-28.75-64-63.1-64c-12.62 0-24.25 3.749-34.13 9.999c-17.62-38.88-56.5-65.1-101.9-65.1c-61.75 0-112 50.12-112 111.1c0 3 .7522 5.743 .8772 8.618c-49.63 3.75-88.88 44.74-88.88 95.37C175.1 469 218.1 512 271.1 512h272c53 0 96-42.99 96-95.99C639.1 373.9 612.7 338.6 575.2 325.6z\"],\n    \"cloud-sun-rain\": [640, 512, [127782], \"f743\", \"M255.7 139.1C244.8 125.5 227.6 116 208 116c-33.14 0-60 26.86-60 59.1c0 25.56 16.06 47.24 38.58 55.88C197.2 219.3 210.5 208.9 225.9 201.1C229.1 178.5 240.6 157.3 255.7 139.1zM120 175.1c0-48.6 39.4-87.1 88-87.1c27.8 0 52.29 13.14 68.42 33.27c21.24-15.67 47.22-25.3 75.58-25.3c.0098 0-.0098 0 0 0L300.4 83.58L286.9 8.637C285.9 3.346 281.3 .0003 276.5 .0003c-2.027 0-4.096 .5928-5.955 1.881l-62.57 43.42L145.4 1.882C143.6 .5925 141.5-.0003 139.5-.0003c-4.818 0-9.399 3.346-10.35 8.636l-13.54 74.95L40.64 97.13c-5.289 .9556-8.637 5.538-8.637 10.36c0 2.026 .5921 4.094 1.881 5.951l43.41 62.57L33.88 238.6C32.59 240.4 32 242.5 32 244.5c0 4.817 3.347 9.398 8.636 10.35l74.95 13.54l13.54 74.95c.9555 5.289 5.537 8.636 10.35 8.636c2.027 0 4.096-.5927 5.954-1.882l19.47-13.51c-3.16-10.34-4.934-21.28-4.934-32.64c0-17.17 4.031-33.57 11.14-48.32C141 241.7 120 211.4 120 175.1zM542.5 225.5c-6.875-37.25-39.25-65.5-78.51-65.5c-12.25 0-23.88 3-34.25 8c-17.5-24.13-45.63-40-77.76-40c-53 0-96.01 43-96.01 96c0 .5 .25 1.125 .25 1.625C219.6 232.1 191.1 265.2 191.1 303.1c0 44.25 35.75 80 80.01 80h256C572.2 383.1 608 348.2 608 303.1C608 264.7 579.7 232.2 542.5 225.5zM552 415.1c-7.753 0-15.35 3.752-19.97 10.69l-32 48c-2.731 4.093-4.037 8.719-4.037 13.29C496 501.4 506.9 512 520 512c7.75 0 15.36-3.75 19.98-10.69l32-48c2.731-4.093 4.037-8.719 4.037-13.29C576 426.6 565.1 415.1 552 415.1zM456 415.1c-7.751 0-15.34 3.752-19.98 10.69l-32 48c-2.731 4.093-4.037 8.719-4.037 13.29C400 501.4 410.9 512 423.1 512c7.75 0 15.36-3.75 19.98-10.69l32-48c2.731-4.093 4.037-8.719 4.037-13.29C480 426.6 469.1 415.1 456 415.1zM360 415.1c-7.753 0-15.34 3.752-19.97 10.69l-32 48c-2.731 4.093-4.037 8.719-4.037 13.29C304 501.4 314.9 512 327.1 512c7.75 0 15.36-3.75 19.99-10.69l32-48c2.731-4.093 4.037-8.719 4.037-13.29C384 426.6 373.1 415.1 360 415.1zM264 415.1c-7.756 0-15.35 3.752-19.97 10.69l-32 48c-2.731 4.093-4.037 8.719-4.037 13.29C208 501.4 218.9 512 231.1 512c7.75 0 15.36-3.75 19.98-10.69l32-48c2.731-4.093 4.037-8.719 4.037-13.29C288 426.6 277.1 415.1 264 415.1z\"],\n    \"clover\": [512, 512, [], \"e139\", \"M512 302.3c0 35.29-28.99 63.91-64.28 63.91c-38.82 0-88.7-22.75-122.4-40.92c18.17 33.7 40.92 83.57 40.92 122.4c0 35.29-28.61 63.91-63.91 63.91c-18.1 0-34.45-7.52-46.09-19.63C244.6 504.3 228 512 209.7 512c-35.29 0-63.91-28.99-63.91-64.28c0-38.82 22.75-88.7 40.92-122.4c-33.7 18.17-83.57 40.92-122.4 40.92c-35.29 0-63.91-28.61-63.91-63.91c0-18.1 7.52-34.45 19.63-46.09C7.676 244.6 0 228 0 209.7c0-35.29 28.99-63.91 64.28-63.91c38.82 0 88.7 22.75 122.4 40.92C168.5 152.1 145.8 103.1 145.8 64.28c0-35.29 28.61-63.91 63.91-63.91c18.1 0 34.45 7.52 46.09 19.63C267.4 7.676 283.1 0 302.3 0c35.29 0 63.91 28.99 63.91 64.28c0 38.82-22.75 88.7-40.92 122.4c33.7-18.17 83.57-40.92 122.4-40.92c35.29 0 63.91 28.61 63.91 63.91c0 18.1-7.52 34.45-19.63 46.09C504.3 267.4 512 283.1 512 302.3z\"],\n    \"code\": [640, 512, [], \"f121\", \"M414.8 40.79L286.8 488.8C281.9 505.8 264.2 515.6 247.2 510.8C230.2 505.9 220.4 488.2 225.2 471.2L353.2 23.21C358.1 6.216 375.8-3.624 392.8 1.232C409.8 6.087 419.6 23.8 414.8 40.79H414.8zM518.6 121.4L630.6 233.4C643.1 245.9 643.1 266.1 630.6 278.6L518.6 390.6C506.1 403.1 485.9 403.1 473.4 390.6C460.9 378.1 460.9 357.9 473.4 345.4L562.7 256L473.4 166.6C460.9 154.1 460.9 133.9 473.4 121.4C485.9 108.9 506.1 108.9 518.6 121.4V121.4zM166.6 166.6L77.25 256L166.6 345.4C179.1 357.9 179.1 378.1 166.6 390.6C154.1 403.1 133.9 403.1 121.4 390.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4L121.4 121.4C133.9 108.9 154.1 108.9 166.6 121.4C179.1 133.9 179.1 154.1 166.6 166.6V166.6z\"],\n    \"code-branch\": [448, 512, [], \"f126\", \"M160 80C160 112.8 140.3 140.1 112 153.3V241.1C130.8 230.2 152.7 224 176 224H272C307.3 224 336 195.3 336 160V153.3C307.7 140.1 288 112.8 288 80C288 35.82 323.8 0 368 0C412.2 0 448 35.82 448 80C448 112.8 428.3 140.1 400 153.3V160C400 230.7 342.7 288 272 288H176C140.7 288 112 316.7 112 352V358.7C140.3 371 160 399.2 160 432C160 476.2 124.2 512 80 512C35.82 512 0 476.2 0 432C0 399.2 19.75 371 48 358.7V153.3C19.75 140.1 0 112.8 0 80C0 35.82 35.82 0 80 0C124.2 0 160 35.82 160 80V80zM80 104C93.25 104 104 93.25 104 80C104 66.75 93.25 56 80 56C66.75 56 56 66.75 56 80C56 93.25 66.75 104 80 104zM368 56C354.7 56 344 66.75 344 80C344 93.25 354.7 104 368 104C381.3 104 392 93.25 392 80C392 66.75 381.3 56 368 56zM80 456C93.25 456 104 445.3 104 432C104 418.7 93.25 408 80 408C66.75 408 56 418.7 56 432C56 445.3 66.75 456 80 456z\"],\n    \"code-commit\": [640, 512, [], \"f386\", \"M476.8 288C461.1 361 397.4 416 320 416C242.6 416 178 361 163.2 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H163.2C178 150.1 242.6 96 320 96C397.4 96 461.1 150.1 476.8 224H608C625.7 224 640 238.3 640 256C640 273.7 625.7 288 608 288H476.8zM320 336C364.2 336 400 300.2 400 256C400 211.8 364.2 176 320 176C275.8 176 240 211.8 240 256C240 300.2 275.8 336 320 336z\"],\n    \"code-compare\": [512, 512, [], \"e13a\", \"M320 488C320 497.5 314.4 506.1 305.8 509.9C297.1 513.8 286.1 512.2 279.9 505.8L199.9 433.8C194.9 429.3 192 422.8 192 416C192 409.2 194.9 402.7 199.9 398.2L279.9 326.2C286.1 319.8 297.1 318.2 305.8 322.1C314.4 325.9 320 334.5 320 344V384H336C371.3 384 400 355.3 400 320V153.3C371.7 140.1 352 112.8 352 80C352 35.82 387.8 0 432 0C476.2 0 512 35.82 512 80C512 112.8 492.3 140.1 464 153.3V320C464 390.7 406.7 448 336 448H320V488zM456 79.1C456 66.74 445.3 55.1 432 55.1C418.7 55.1 408 66.74 408 79.1C408 93.25 418.7 103.1 432 103.1C445.3 103.1 456 93.25 456 79.1zM192 24C192 14.52 197.6 5.932 206.2 2.076C214.9-1.78 225-.1789 232.1 6.161L312.1 78.16C317.1 82.71 320 89.2 320 96C320 102.8 317.1 109.3 312.1 113.8L232.1 185.8C225 192.2 214.9 193.8 206.2 189.9C197.6 186.1 192 177.5 192 168V128H176C140.7 128 112 156.7 112 192V358.7C140.3 371 160 399.2 160 432C160 476.2 124.2 512 80 512C35.82 512 0 476.2 0 432C0 399.2 19.75 371 48 358.7V192C48 121.3 105.3 64 176 64H192V24zM56 432C56 445.3 66.75 456 80 456C93.25 456 104 445.3 104 432C104 418.7 93.25 408 80 408C66.75 408 56 418.7 56 432z\"],\n    \"code-fork\": [448, 512, [], \"e13b\", \"M160 80C160 112.8 140.3 140.1 112 153.3V192C112 209.7 126.3 224 144 224H304C321.7 224 336 209.7 336 192V153.3C307.7 140.1 288 112.8 288 80C288 35.82 323.8 0 368 0C412.2 0 448 35.82 448 80C448 112.8 428.3 140.1 400 153.3V192C400 245 357 288 304 288H256V358.7C284.3 371 304 399.2 304 432C304 476.2 268.2 512 224 512C179.8 512 144 476.2 144 432C144 399.2 163.7 371 192 358.7V288H144C90.98 288 48 245 48 192V153.3C19.75 140.1 0 112.8 0 80C0 35.82 35.82 0 80 0C124.2 0 160 35.82 160 80V80zM80 104C93.25 104 104 93.25 104 80C104 66.75 93.25 56 80 56C66.75 56 56 66.75 56 80C56 93.25 66.75 104 80 104zM368 104C381.3 104 392 93.25 392 80C392 66.75 381.3 56 368 56C354.7 56 344 66.75 344 80C344 93.25 354.7 104 368 104zM224 408C210.7 408 200 418.7 200 432C200 445.3 210.7 456 224 456C237.3 456 248 445.3 248 432C248 418.7 237.3 408 224 408z\"],\n    \"code-merge\": [448, 512, [], \"f387\", \"M208 239.1H294.7C307 211.7 335.2 191.1 368 191.1C412.2 191.1 448 227.8 448 271.1C448 316.2 412.2 352 368 352C335.2 352 307 332.3 294.7 303.1H208C171.1 303.1 138.7 292.1 112 272V358.7C140.3 371 160 399.2 160 432C160 476.2 124.2 512 80 512C35.82 512 0 476.2 0 432C0 399.2 19.75 371 48 358.7V153.3C19.75 140.1 0 112.8 0 80C0 35.82 35.82 0 80 0C124.2 0 160 35.82 160 80C160 112.6 140.5 140.7 112.4 153.2C117 201.9 158.1 240 208 240V239.1zM80 103.1C93.25 103.1 104 93.25 104 79.1C104 66.74 93.25 55.1 80 55.1C66.75 55.1 56 66.74 56 79.1C56 93.25 66.75 103.1 80 103.1zM80 456C93.25 456 104 445.3 104 432C104 418.7 93.25 408 80 408C66.75 408 56 418.7 56 432C56 445.3 66.75 456 80 456zM368 247.1C354.7 247.1 344 258.7 344 271.1C344 285.3 354.7 295.1 368 295.1C381.3 295.1 392 285.3 392 271.1C392 258.7 381.3 247.1 368 247.1z\"],\n    \"code-pull-request\": [512, 512, [], \"e13c\", \"M305.8 2.076C314.4 5.932 320 14.52 320 24V64H336C406.7 64 464 121.3 464 192V358.7C492.3 371 512 399.2 512 432C512 476.2 476.2 512 432 512C387.8 512 352 476.2 352 432C352 399.2 371.7 371 400 358.7V192C400 156.7 371.3 128 336 128H320V168C320 177.5 314.4 186.1 305.8 189.9C297.1 193.8 286.1 192.2 279.9 185.8L199.9 113.8C194.9 109.3 192 102.8 192 96C192 89.2 194.9 82.71 199.9 78.16L279.9 6.161C286.1-.1791 297.1-1.779 305.8 2.077V2.076zM432 456C445.3 456 456 445.3 456 432C456 418.7 445.3 408 432 408C418.7 408 408 418.7 408 432C408 445.3 418.7 456 432 456zM112 358.7C140.3 371 160 399.2 160 432C160 476.2 124.2 512 80 512C35.82 512 0 476.2 0 432C0 399.2 19.75 371 48 358.7V153.3C19.75 140.1 0 112.8 0 80C0 35.82 35.82 .0004 80 .0004C124.2 .0004 160 35.82 160 80C160 112.8 140.3 140.1 112 153.3V358.7zM80 56C66.75 56 56 66.75 56 80C56 93.25 66.75 104 80 104C93.25 104 104 93.25 104 80C104 66.75 93.25 56 80 56zM80 408C66.75 408 56 418.7 56 432C56 445.3 66.75 456 80 456C93.25 456 104 445.3 104 432C104 418.7 93.25 408 80 408z\"],\n    \"coins\": [512, 512, [], \"f51e\", \"M512 80C512 98.01 497.7 114.6 473.6 128C444.5 144.1 401.2 155.5 351.3 158.9C347.7 157.2 343.9 155.5 340.1 153.9C300.6 137.4 248.2 128 192 128C183.7 128 175.6 128.2 167.5 128.6L166.4 128C142.3 114.6 128 98.01 128 80C128 35.82 213.1 0 320 0C426 0 512 35.82 512 80V80zM160.7 161.1C170.9 160.4 181.3 160 192 160C254.2 160 309.4 172.3 344.5 191.4C369.3 204.9 384 221.7 384 240C384 243.1 383.3 247.9 381.9 251.7C377.3 264.9 364.1 277 346.9 287.3C346.9 287.3 346.9 287.3 346.9 287.3C346.8 287.3 346.6 287.4 346.5 287.5L346.5 287.5C346.2 287.7 345.9 287.8 345.6 288C310.6 307.4 254.8 320 192 320C132.4 320 79.06 308.7 43.84 290.9C41.97 289.9 40.15 288.1 38.39 288C14.28 274.6 0 258 0 240C0 205.2 53.43 175.5 128 164.6C138.5 163 149.4 161.8 160.7 161.1L160.7 161.1zM391.9 186.6C420.2 182.2 446.1 175.2 468.1 166.1C484.4 159.3 499.5 150.9 512 140.6V176C512 195.3 495.5 213.1 468.2 226.9C453.5 234.3 435.8 240.5 415.8 245.3C415.9 243.6 416 241.8 416 240C416 218.1 405.4 200.1 391.9 186.6V186.6zM384 336C384 354 369.7 370.6 345.6 384C343.8 384.1 342 385.9 340.2 386.9C304.9 404.7 251.6 416 192 416C129.2 416 73.42 403.4 38.39 384C14.28 370.6 .0003 354 .0003 336V300.6C12.45 310.9 27.62 319.3 43.93 326.1C83.44 342.6 135.8 352 192 352C248.2 352 300.6 342.6 340.1 326.1C347.9 322.9 355.4 319.2 362.5 315.2C368.6 311.8 374.3 308 379.7 304C381.2 302.9 382.6 301.7 384 300.6L384 336zM416 278.1C434.1 273.1 452.5 268.6 468.1 262.1C484.4 255.3 499.5 246.9 512 236.6V272C512 282.5 507 293 497.1 302.9C480.8 319.2 452.1 332.6 415.8 341.3C415.9 339.6 416 337.8 416 336V278.1zM192 448C248.2 448 300.6 438.6 340.1 422.1C356.4 415.3 371.5 406.9 384 396.6V432C384 476.2 298 512 192 512C85.96 512 .0003 476.2 .0003 432V396.6C12.45 406.9 27.62 415.3 43.93 422.1C83.44 438.6 135.8 448 192 448z\"],\n    \"colon-sign\": [320, 512, [], \"e140\", \"M216.6 65.56C226.4 66.81 235.9 68.8 245.2 71.46L256.1 24.24C261.2 7.093 278.6-3.331 295.8 .9552C312.9 5.242 323.3 22.62 319 39.76L303.1 100C305.1 100.8 306.2 101.6 307.2 102.4C321.4 113 324.2 133.1 313.6 147.2C307.5 155.3 298.4 159.7 288.1 159.1L234.8 376.7C247.1 372.3 258.5 366.1 268.8 358.4C282.9 347.8 302.1 350.6 313.6 364.8C324.2 378.9 321.4 398.1 307.2 409.6C281.5 428.9 250.8 441.9 217.4 446.3L207 487.8C202.8 504.9 185.4 515.3 168.2 511C151.1 506.8 140.7 489.4 144.1 472.2L152.1 443.8C142.4 441.8 133.1 439.1 124.1 435.6L111 487.8C106.8 504.9 89.38 515.3 72.24 511C55.09 506.8 44.67 489.4 48.96 472.2L66.65 401.4C25.84 366.2 0 314.1 0 256C0 164.4 64.09 87.85 149.9 68.64L160.1 24.24C165.2 7.093 182.6-3.331 199.8 .9552C216.9 5.242 227.3 22.62 223 39.76L216.6 65.56zM131.2 143.3C91.17 164.1 64 207.3 64 256C64 282.2 71.85 306.5 85.32 326.8L131.2 143.3zM167.6 381.7L229.6 133.6C220.4 130.8 210.8 128.1 200.9 128.3L139.8 372.9C148.6 376.8 157.9 379.8 167.6 381.7V381.7z\"],\n    \"comment\": [512, 512, [61669, 128489], \"f075\", \"M256 32C114.6 32 .0272 125.1 .0272 240c0 49.63 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734C1.979 478.2 4.75 480 8 480c66.25 0 115.1-31.76 140.6-51.39C181.2 440.9 217.6 448 256 448c141.4 0 255.1-93.13 255.1-208S397.4 32 256 32z\"],\n    \"comment-dollar\": [512, 512, [], \"f651\", \"M256 31.1c-141.4 0-255.1 93.09-255.1 208c0 49.59 21.37 94.1 56.97 130.7c-12.5 50.39-54.31 95.3-54.81 95.8C0 468.8-.5938 472.2 .6875 475.2C1.1 478.2 4.813 479.1 8 479.1c66.31 0 116-31.8 140.6-51.41c32.72 12.31 69.02 19.41 107.4 19.41c141.4 0 255.1-93.09 255.1-207.1S397.4 31.1 256 31.1zM317.8 282.3c-3.623 20.91-19.47 34.64-41.83 39.43V332c0 11.03-8.946 20-19.99 20S236 343 236 332v-10.77c-8.682-1.922-17.3-4.723-25.06-7.512l-4.266-1.5C196.3 308.5 190.8 297.1 194.5 286.7c3.688-10.41 15.11-15.81 25.52-12.22l4.469 1.625c7.844 2.812 16.72 6 23.66 7.031c13.72 2.125 28.94 .1875 30.31-7.625c.875-5.094 1.359-7.906-27.92-16.28L244.7 257.5c-17.33-5.094-57.92-17-50.52-59.84C197.8 176.8 213.6 162.8 236 157.1V148c0-11.03 8.961-20 20.01-20s19.99 8.969 19.99 20v10.63c5.453 1.195 11.34 2.789 18.56 5.273c10.44 3.625 15.95 15.03 12.33 25.47c-3.625 10.41-15.06 15.94-25.45 12.34c-5.859-2.031-12-4-17.59-4.844C250.2 194.8 234.1 196.7 233.6 204.5C232.8 208.1 232.3 212.2 255.1 219.2l5.547 1.594C283.8 227.1 325.3 239 317.8 282.3z\"],\n    \"comment-dots\": [512, 512, [62075, 128172, \"commenting\"], \"f4ad\", \"M256 31.1c-141.4 0-255.1 93.12-255.1 208c0 49.62 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734c1.249 3 4.021 4.766 7.271 4.766c66.25 0 115.1-31.76 140.6-51.39c32.63 12.25 69.02 19.39 107.4 19.39c141.4 0 255.1-93.13 255.1-207.1S397.4 31.1 256 31.1zM127.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S145.7 271.1 127.1 271.1zM256 271.1c-17.75 0-31.1-14.25-31.1-31.1s14.25-32 31.1-32s31.1 14.25 31.1 32S273.8 271.1 256 271.1zM383.1 271.1c-17.75 0-32-14.25-32-31.1s14.25-32 32-32s32 14.25 32 32S401.7 271.1 383.1 271.1z\"],\n    \"comment-medical\": [512, 512, [], \"f7f5\", \"M256 31.1c-141.4 0-255.1 93.09-255.1 208c0 49.59 21.38 94.1 56.97 130.7c-12.5 50.39-54.31 95.3-54.81 95.8C0 468.8-.5938 472.2 .6875 475.2c1.312 3 4.125 4.797 7.312 4.797c66.31 0 116-31.8 140.6-51.41c32.72 12.31 69.01 19.41 107.4 19.41C397.4 447.1 512 354.9 512 239.1S397.4 31.1 256 31.1zM368 266c0 8.836-7.164 16-16 16h-54V336c0 8.836-7.164 16-16 16h-52c-8.836 0-16-7.164-16-16V282H160c-8.836 0-16-7.164-16-16V214c0-8.838 7.164-16 16-16h53.1V144c0-8.838 7.164-16 16-16h52c8.836 0 16 7.162 16 16v54H352c8.836 0 16 7.162 16 16V266z\"],\n    \"comment-slash\": [640, 512, [], \"f4b3\", \"M64.03 239.1c0 49.59 21.38 94.1 56.97 130.7c-12.5 50.39-54.31 95.3-54.81 95.8c-2.187 2.297-2.781 5.703-1.5 8.703c1.312 3 4.125 4.797 7.312 4.797c66.31 0 116-31.8 140.6-51.41c32.72 12.31 69.02 19.41 107.4 19.41c37.39 0 72.78-6.663 104.8-18.36L82.93 161.7C70.81 185.9 64.03 212.3 64.03 239.1zM630.8 469.1l-118.1-92.59C551.1 340 576 292.4 576 240c0-114.9-114.6-207.1-255.1-207.1c-67.74 0-129.1 21.55-174.9 56.47L38.81 5.117C28.21-3.154 13.16-1.096 5.115 9.19C-3.072 19.63-1.249 34.72 9.188 42.89l591.1 463.1c10.5 8.203 25.57 6.333 33.7-4.073C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"comment-sms\": [512, 512, [\"sms\"], \"f7cd\", \"M256 32C114.6 32 .0137 125.1 .0137 240c0 49.59 21.39 95 56.99 130.7c-12.5 50.39-54.31 95.3-54.81 95.8C0 468.8-.5938 472.2 .6875 475.2C1.1 478.2 4.813 480 8 480c66.31 0 116-31.8 140.6-51.41C181.3 440.9 217.6 448 256 448C397.4 448 512 354.9 512 240S397.4 32 256 32zM167.3 271.9C163.9 291.1 146.3 304 121.1 304c-4.031 0-8.25-.3125-12.59-1C101.1 301.8 92.81 298.8 85.5 296.1c-8.312-3-14.06-12.66-11.09-20.97S85 261.1 93.38 264.9c6.979 2.498 14.53 5.449 20.88 6.438C125.7 273.1 135 271 135.8 266.4c1.053-5.912-10.84-8.396-24.56-12.34c-12.12-3.531-44.28-12.97-38.63-46c4.062-23.38 27.31-35.91 58-31.09c5.906 .9062 12.44 2.844 18.59 4.969c8.344 2.875 12.78 12 9.906 20.34C156.3 210.7 147.2 215.1 138.8 212.2c-4.344-1.5-8.938-2.938-13.09-3.594c-11.22-1.656-20.72 .4062-21.5 4.906C103.2 219.2 113.6 221.5 124.4 224.6C141.4 229.5 173.1 238.5 167.3 271.9zM320 288c0 8.844-7.156 16-16 16S288 296.8 288 288V240l-19.19 25.59c-6.062 8.062-19.55 8.062-25.62 0L224 240V288c0 8.844-7.156 16-16 16S192 296.8 192 288V192c0-6.875 4.406-12.1 10.94-15.18c6.5-2.094 13.71 .0586 17.87 5.59L256 229.3l35.19-46.93c4.156-5.531 11.4-7.652 17.87-5.59C315.6 179 320 185.1 320 192V288zM439.3 271.9C435.9 291.1 418.3 304 393.1 304c-4.031 0-8.25-.3125-12.59-1c-8.25-1.25-16.56-4.25-23.88-6.906c-8.312-3-14.06-12.66-11.09-20.97s10.59-13.16 18.97-10.19c6.979 2.498 14.53 5.449 20.88 6.438c11.44 1.719 20.78-.375 21.56-4.938c1.053-5.912-10.84-8.396-24.56-12.34c-12.12-3.531-44.28-12.97-38.63-46c4.031-23.38 27.25-35.91 58-31.09c5.906 .9062 12.44 2.844 18.59 4.969c8.344 2.875 12.78 12 9.906 20.34c-2.875 8.344-11.94 12.81-20.34 9.906c-4.344-1.5-8.938-2.938-13.09-3.594c-11.19-1.656-20.72 .4062-21.5 4.906C375.2 219.2 385.6 221.5 396.4 224.6C413.4 229.5 445.1 238.5 439.3 271.9z\"],\n    \"comments\": [640, 512, [61670, 128490], \"f086\", \"M416 176C416 78.8 322.9 0 208 0S0 78.8 0 176c0 39.57 15.62 75.96 41.67 105.4c-16.39 32.76-39.23 57.32-39.59 57.68c-2.1 2.205-2.67 5.475-1.441 8.354C1.9 350.3 4.602 352 7.66 352c38.35 0 70.76-11.12 95.74-24.04C134.2 343.1 169.8 352 208 352C322.9 352 416 273.2 416 176zM599.6 443.7C624.8 413.9 640 376.6 640 336C640 238.8 554 160 448 160c-.3145 0-.6191 .041-.9336 .043C447.5 165.3 448 170.6 448 176c0 98.62-79.68 181.2-186.1 202.5C282.7 455.1 357.1 512 448 512c33.69 0 65.32-8.008 92.85-21.98C565.2 502 596.1 512 632.3 512c3.059 0 5.76-1.725 7.02-4.605c1.229-2.879 .6582-6.148-1.441-8.354C637.6 498.7 615.9 475.3 599.6 443.7z\"],\n    \"comments-dollar\": [640, 512, [], \"f653\", \"M416 176C416 78.8 322.9 0 208 0S0 78.8 0 176c0 39.57 15.62 75.96 41.67 105.4c-16.39 32.76-39.23 57.32-39.59 57.68c-2.1 2.205-2.67 5.475-1.441 8.354C1.9 350.3 4.602 352 7.66 352c38.35 0 70.76-11.12 95.74-24.04C134.2 343.1 169.8 352 208 352C322.9 352 416 273.2 416 176zM269.8 218.3C266.2 239.2 250.4 252.1 228 257.7V268c0 11.03-8.953 20-20 20s-20-8.969-20-20V257.2c-8.682-1.922-17.3-4.723-25.06-7.512l-4.266-1.5C148.3 244.5 142.8 233.1 146.5 222.7c3.688-10.41 15.11-15.81 25.52-12.22l4.469 1.625c7.844 2.812 16.72 6 23.66 7.031C213.8 221.3 229 219.3 230.4 211.5C231.3 206.4 231.8 203.6 202.5 195.2L196.7 193.5c-17.33-5.094-57.92-17-50.52-59.84C149.8 112.8 165.6 98.76 188 93.99V84c0-11.03 8.953-20 20-20s20 8.969 20 20v10.63c5.453 1.195 11.34 2.789 18.56 5.273C257 103.5 262.5 114.9 258.9 125.4C255.3 135.8 243.8 141.3 233.4 137.7c-5.859-2.031-12-4-17.59-4.844C202.2 130.8 186.1 132.7 185.6 140.5C184.8 144.1 184.3 148.2 207.1 155.2L213.5 156.8C235.8 163.1 277.3 175 269.8 218.3zM599.6 443.7C624.8 413.9 640 376.6 640 336C640 238.8 554 160 448 160c-.3145 0-.6191 .041-.9336 .043C447.5 165.3 448 170.6 448 176c0 98.62-79.68 181.2-186.1 202.5C282.7 455.1 357.1 512 448 512c33.69 0 65.32-8.008 92.85-21.98C565.2 502 596.1 512 632.3 512c3.059 0 5.76-1.725 7.02-4.605c1.229-2.879 .6582-6.148-1.441-8.354C637.6 498.7 615.9 475.3 599.6 443.7z\"],\n    \"compact-disc\": [512, 512, [128192, 128440, 128191], \"f51f\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM80.72 256H79.63c-9.078 0-16.4-8.011-15.56-17.34C72.36 146 146.5 72.06 239.3 64.06C248.3 63.28 256 70.75 256 80.09c0 8.35-6.215 15.28-14.27 15.99C164.7 102.9 103.1 164.3 96.15 241.4C95.4 249.6 88.77 256 80.72 256zM256 351.1c-53.02 0-96-43-96-95.1s42.98-96 96-96s96 43 96 96S309 351.1 256 351.1zM256 224C238.3 224 224 238.2 224 256s14.3 32 32 32c17.7 0 32-14.25 32-32S273.7 224 256 224z\"],\n    \"compass\": [512, 512, [129517], \"f14e\", \"M288 256C288 273.7 273.7 288 256 288C238.3 288 224 273.7 224 256C224 238.3 238.3 224 256 224C273.7 224 288 238.3 288 256zM0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM325.1 306.7L380.6 162.4C388.1 142.1 369 123.9 349.6 131.4L205.3 186.9C196.8 190.1 190.1 196.8 186.9 205.3L131.4 349.6C123.9 369 142.1 388.1 162.4 380.6L306.7 325.1C315.2 321.9 321.9 315.2 325.1 306.7V306.7z\"],\n    \"compass-drafting\": [512, 512, [\"drafting-compass\"], \"f568\", \"M352 96C352 110.3 348.9 123.9 343.2 136.2L396 227.4C372.3 252.7 341.9 271.5 307.6 281L256 192H255.1L187.9 309.5C209.4 316.3 232.3 320 256 320C326.7 320 389.8 287.3 430.9 235.1C441.9 222.2 462.1 219.1 475.9 231C489.7 242.1 491.9 262.2 480.8 276C428.1 341.8 346.1 384 256 384C220.6 384 186.6 377.6 155.3 365.9L98.65 463.7C93.95 471.8 86.97 478.4 78.58 482.6L23.16 510.3C18.2 512.8 12.31 512.5 7.588 509.6C2.871 506.7 0 501.5 0 496V440.6C0 432.2 2.228 423.9 6.46 416.5L66.49 312.9C53.66 301.6 41.84 289.3 31.18 276C20.13 262.2 22.34 242.1 36.13 231C49.92 219.1 70.06 222.2 81.12 235.1C86.79 243.1 92.87 249.8 99.34 256.1L168.8 136.2C163.1 123.9 160 110.3 160 96C160 42.98 202.1 0 256 0C309 0 352 42.98 352 96L352 96zM256 128C273.7 128 288 113.7 288 96C288 78.33 273.7 64 256 64C238.3 64 224 78.33 224 96C224 113.7 238.3 128 256 128zM372.1 393.9C405.5 381.1 435.5 363.2 461.8 341L505.5 416.5C509.8 423.9 512 432.2 512 440.6V496C512 501.5 509.1 506.7 504.4 509.6C499.7 512.5 493.8 512.8 488.8 510.3L433.4 482.6C425 478.4 418.1 471.8 413.3 463.7L372.1 393.9z\"],\n    \"compress\": [448, 512, [], \"f066\", \"M128 320H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h64v64c0 17.69 14.31 32 32 32s32-14.31 32-32v-96C160 334.3 145.7 320 128 320zM416 320h-96c-17.69 0-32 14.31-32 32v96c0 17.69 14.31 32 32 32s32-14.31 32-32v-64h64c17.69 0 32-14.31 32-32S433.7 320 416 320zM320 192h96c17.69 0 32-14.31 32-32s-14.31-32-32-32h-64V64c0-17.69-14.31-32-32-32s-32 14.31-32 32v96C288 177.7 302.3 192 320 192zM128 32C110.3 32 96 46.31 96 64v64H32C14.31 128 0 142.3 0 160s14.31 32 32 32h96c17.69 0 32-14.31 32-32V64C160 46.31 145.7 32 128 32z\"],\n    \"computer-mouse\": [384, 512, [128433, \"mouse\"], \"f8cc\", \"M0 352c0 88.38 71.63 160 160 160h64c88.38 0 160-71.63 160-160V224H0V352zM176 0H160C71.63 0 0 71.62 0 160v32h176V0zM224 0h-16v192H384V160C384 71.62 312.4 0 224 0z\"],\n    \"cookie\": [512, 512, [127850], \"f563\", \"M494.5 254.8l-11.37-71.48c-4.102-25.9-16.29-49.8-34.8-68.32l-51.33-51.33c-18.52-18.52-42.3-30.7-68.2-34.8L256.9 17.53C231.2 13.42 204.7 17.64 181.5 29.48L116.7 62.53C93.23 74.36 74.36 93.35 62.41 116.7L29.51 181.2c-11.84 23.44-16.08 50.04-11.98 75.94l11.37 71.48c4.101 25.9 16.29 49.77 34.8 68.41l51.33 51.33c18.52 18.4 42.3 30.61 68.2 34.72l71.84 11.37c25.78 4.102 52.27-.1173 75.47-11.95l64.8-33.05c23.32-11.84 42.3-30.82 54.26-54.14l32.81-64.57C494.4 307.3 498.6 280.8 494.5 254.8zM176 367.1c-17.62 0-31.1-14.37-31.1-31.1c0-17.62 14.37-31.1 31.1-31.1s31.1 14.37 31.1 31.1C208 353.6 193.6 367.1 176 367.1zM208 208c-17.62 0-31.1-14.37-31.1-31.1s14.38-31.1 31.1-31.1c17.62 0 31.1 14.37 31.1 31.1S225.6 208 208 208zM368 335.1c-17.62 0-31.1-14.37-31.1-31.1c0-17.62 14.37-31.1 31.1-31.1s31.1 14.37 31.1 31.1C400 321.6 385.6 335.1 368 335.1z\"],\n    \"cookie-bite\": [512, 512, [], \"f564\", \"M494.6 255.9c-65.63-.8203-118.6-54.14-118.6-119.9c-65.74 0-119.1-52.97-119.8-118.6c-25.66-3.867-51.8 .2346-74.77 12.07L116.7 62.41C93.35 74.36 74.36 93.35 62.41 116.7L29.6 181.2c-11.95 23.44-16.17 49.92-12.07 75.94l11.37 71.48c4.102 25.9 16.29 49.8 34.81 68.32l51.36 51.39C133.6 466.9 157.3 479 183.2 483.1l71.84 11.37c25.9 4.101 52.27-.1172 75.59-11.95l64.81-33.05c23.32-11.84 42.31-30.82 54.14-54.14l32.93-64.57C494.3 307.7 498.5 281.4 494.6 255.9zM176 367.1c-17.62 0-32-14.37-32-31.1s14.38-31.1 32-31.1s32 14.37 32 31.1S193.6 367.1 176 367.1zM208 208c-17.62 0-32-14.37-32-31.1s14.38-31.1 32-31.1s32 14.37 32 31.1S225.6 208 208 208zM368 335.1c-17.62 0-32-14.37-32-31.1s14.38-31.1 32-31.1s32 14.37 32 31.1S385.6 335.1 368 335.1z\"],\n    \"copy\": [512, 512, [], \"f0c5\", \"M384 96L384 0h-112c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48H464c26.51 0 48-21.49 48-48V128h-95.1C398.4 128 384 113.6 384 96zM416 0v96h96L416 0zM192 352V128h-144c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h192c26.51 0 48-21.49 48-48L288 416h-32C220.7 416 192 387.3 192 352z\"],\n    \"copyright\": [512, 512, [169], \"f1f9\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM199.2 312.6c14.94 15.06 34.8 23.38 55.89 23.38c.0313 0 0 0 0 0c21.06 0 40.92-8.312 55.83-23.38c9.375-9.375 24.53-9.469 33.97-.1562c9.406 9.344 9.469 24.53 .1562 33.97c-24 24.22-55.95 37.56-89.95 37.56c0 0 .0313 0 0 0c-33.97 0-65.95-13.34-89.95-37.56c-49.44-49.88-49.44-131 0-180.9c24-24.22 55.98-37.56 89.95-37.56c.0313 0 0 0 0 0c34 0 65.95 13.34 89.95 37.56c9.312 9.438 9.25 24.62-.1562 33.97c-9.438 9.344-24.59 9.188-33.97-.1562c-14.91-15.06-34.77-23.38-55.83-23.38c0 0 .0313 0 0 0c-21.09 0-40.95 8.312-55.89 23.38C168.3 230.6 168.3 281.4 199.2 312.6z\"],\n    \"couch\": [640, 512, [], \"f4b8\", \"M592 224C565.5 224 544 245.5 544 272V352H96V272C96 245.5 74.51 224 48 224S0 245.5 0 272v192C0 472.8 7.164 480 16 480h64c8.836 0 15.1-7.164 15.1-16L96 448h448v16c0 8.836 7.164 16 16 16h64c8.836 0 16-7.164 16-16v-192C640 245.5 618.5 224 592 224zM128 272V320h384V272c0-38.63 27.53-70.95 64-78.38V160c0-70.69-57.31-128-128-128H191.1c-70.69 0-128 57.31-128 128L64 193.6C100.5 201.1 128 233.4 128 272z\"],\n    \"credit-card\": [576, 512, [62083, 128179, \"credit-card-alt\"], \"f09d\", \"M512 32C547.3 32 576 60.65 576 96V128H0V96C0 60.65 28.65 32 64 32H512zM576 416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V224H576V416zM112 352C103.2 352 96 359.2 96 368C96 376.8 103.2 384 112 384H176C184.8 384 192 376.8 192 368C192 359.2 184.8 352 176 352H112zM240 384H368C376.8 384 384 376.8 384 368C384 359.2 376.8 352 368 352H240C231.2 352 224 359.2 224 368C224 376.8 231.2 384 240 384z\"],\n    \"crop\": [512, 512, [], \"f125\", \"M448 384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H448V480C448 497.7 433.7 512 416 512C398.3 512 384 497.7 384 480V173.3L173.3 384H352V448H128C92.65 448 64 419.3 64 384V128H32C14.33 128 0 113.7 0 96C0 78.33 14.33 64 32 64H64V32C64 14.33 78.33 0 96 0C113.7 0 128 14.33 128 32V338.7L338.7 128H160V64H402.7L457.4 9.372C469.9-3.124 490.1-3.124 502.6 9.372C515.1 21.87 515.1 42.13 502.6 54.63L448 109.3V384z\"],\n    \"crop-simple\": [512, 512, [\"crop-alt\"], \"f565\", \"M128 384H352V448H128C92.65 448 64 419.3 64 384V128H32C14.33 128 0 113.7 0 96C0 78.33 14.33 64 32 64H64V32C64 14.33 78.33 0 96 0C113.7 0 128 14.33 128 32V384zM384 128H160V64H384C419.3 64 448 92.65 448 128V384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H448V480C448 497.7 433.7 512 416 512C398.3 512 384 497.7 384 480V128z\"],\n    \"cross\": [384, 512, [128327, 10013], \"f654\", \"M383.1 160v64c0 17.62-14.37 32-31.1 32h-96v224c0 17.62-14.38 32-31.1 32H160c-17.62 0-32-14.38-32-32V256h-96C14.37 256-.0008 241.6-.0008 224V160c0-17.62 14.38-32 32-32h96V32c0-17.62 14.38-32 32-32h64c17.62 0 31.1 14.38 31.1 32v96h96C369.6 128 383.1 142.4 383.1 160z\"],\n    \"crosshairs\": [512, 512, [], \"f05b\", \"M224 256C224 238.3 238.3 224 256 224C273.7 224 288 238.3 288 256C288 273.7 273.7 288 256 288C238.3 288 224 273.7 224 256zM256 0C273.7 0 288 14.33 288 32V42.35C381.7 56.27 455.7 130.3 469.6 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H469.6C455.7 381.7 381.7 455.7 288 469.6V480C288 497.7 273.7 512 256 512C238.3 512 224 497.7 224 480V469.6C130.3 455.7 56.27 381.7 42.35 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H42.35C56.27 130.3 130.3 56.27 224 42.35V32C224 14.33 238.3 0 256 0V0zM224 404.6V384C224 366.3 238.3 352 256 352C273.7 352 288 366.3 288 384V404.6C346.3 392.1 392.1 346.3 404.6 288H384C366.3 288 352 273.7 352 256C352 238.3 366.3 224 384 224H404.6C392.1 165.7 346.3 119.9 288 107.4V128C288 145.7 273.7 160 256 160C238.3 160 224 145.7 224 128V107.4C165.7 119.9 119.9 165.7 107.4 224H128C145.7 224 160 238.3 160 256C160 273.7 145.7 288 128 288H107.4C119.9 346.3 165.7 392.1 224 404.6z\"],\n    \"crow\": [640, 512, [], \"f520\", \"M523.9 31.1H574C603.4 31.1 628.1 51.99 636.1 80.48L640 95.1L544 119.1V191.1C544 279.1 484.9 354.1 404.2 376.8L446.2 478.9C451.2 491.1 445.4 505.1 433.1 510.2C420.9 515.2 406.9 509.4 401.8 497.1L355.2 383.1C354.1 383.1 353.1 384 352 384H311.1L350.2 478.9C355.2 491.1 349.4 505.1 337.1 510.2C324.9 515.2 310.9 509.4 305.8 497.1L259.2 384H126.1L51.51 441.4C37.5 452.1 17.41 449.5 6.638 435.5C-4.138 421.5-1.517 401.4 12.49 390.6L368 117.2V88C368 39.4 407.4 0 456 0C483.3 0 507.7 12.46 523.9 32V31.1zM456 111.1C469.3 111.1 480 101.3 480 87.1C480 74.74 469.3 63.1 456 63.1C442.7 63.1 432 74.74 432 87.1C432 101.3 442.7 111.1 456 111.1z\"],\n    \"crown\": [576, 512, [128081], \"f521\", \"M576 136c0 22.09-17.91 40-40 40c-.248 0-.4551-.1266-.7031-.1305l-50.52 277.9C482 468.9 468.8 480 453.3 480H122.7c-15.46 0-28.72-11.06-31.48-26.27L40.71 175.9C40.46 175.9 40.25 176 39.1 176c-22.09 0-40-17.91-40-40S17.91 96 39.1 96s40 17.91 40 40c0 8.998-3.521 16.89-8.537 23.57l89.63 71.7c15.91 12.73 39.5 7.544 48.61-10.68l57.6-115.2C255.1 98.34 247.1 86.34 247.1 72C247.1 49.91 265.9 32 288 32s39.1 17.91 39.1 40c0 14.34-7.963 26.34-19.3 33.4l57.6 115.2c9.111 18.22 32.71 23.4 48.61 10.68l89.63-71.7C499.5 152.9 496 144.1 496 136C496 113.9 513.9 96 536 96S576 113.9 576 136z\"],\n    \"crutch\": [512, 512, [], \"f7f7\", \"M502.6 168.1l-159.6-159.5c-12.54-12.54-32.85-12.6-45.46-.1256c-12.68 12.54-12.73 33.1-.1256 45.71l159.6 159.5c12.6 12.59 33.03 12.57 45.59-.0628C515.1 201.9 515.1 181.5 502.6 168.1zM334.4 245.4l-67.88-67.87l55.13-55.12l-45.25-45.25L166.7 186.8C154.1 199.6 145.2 215.6 141.1 233.2L113.3 353.4l-108.6 108.6c-6.25 6.25-6.25 16.37 0 22.62l22.63 22.62c6.25 6.25 16.38 6.25 22.63 0l108.6-108.6l120.3-27.75c17.5-4.125 33.63-13 46.38-25.62l109.6-109.7l-45.25-45.25L334.4 245.4zM279.9 300.1C275.7 304.2 270.3 307.2 264.4 308.6l-79.25 18.25l18.25-79.25c1.375-5.875 4.375-11.25 8.5-15.5l9.375-9.25l67.88 67.87L279.9 300.1z\"],\n    \"cruzeiro-sign\": [384, 512, [], \"e152\", \"M159.1 402.7V256C159.1 238.3 174.3 224 191.1 224C199.7 224 206.8 226.7 212.3 231.3C223 226.6 234.8 224 247.3 224C264.5 224 281.3 229.1 295.7 238.7L305.8 245.4C320.5 255.2 324.4 275 314.6 289.8C304.8 304.5 284.1 308.4 270.2 298.6L260.2 291.9C256.3 289.4 251.9 288 247.3 288C234.4 288 224 298.4 224 311.3V416C264.1 416 302.3 400.6 330.7 375.3C343.8 363.5 364.1 364.6 375.8 377.8C387.6 390.9 386.5 411.2 373.3 422.1C333.7 458.4 281.4 480 224 480C100.3 480 0 379.7 0 256C0 132.3 100.3 32 224 32C281.4 32 333.7 53.59 373.3 89.04C386.5 100.8 387.6 121.1 375.8 134.2C364.1 147.4 343.8 148.5 330.7 136.7C302.3 111.4 264.1 96 224 96C135.6 96 63.1 167.6 63.1 256C63.1 321.6 103.5 377.1 159.1 402.7V402.7z\"],\n    \"cube\": [512, 512, [], \"f1b2\", \"M234.5 5.709C248.4 .7377 263.6 .7377 277.5 5.709L469.5 74.28C494.1 83.38 512 107.5 512 134.6V377.4C512 404.5 494.1 428.6 469.5 437.7L277.5 506.3C263.6 511.3 248.4 511.3 234.5 506.3L42.47 437.7C17 428.6 0 404.5 0 377.4V134.6C0 107.5 17 83.38 42.47 74.28L234.5 5.709zM256 65.98L82.34 128L256 190L429.7 128L256 65.98zM288 434.6L448 377.4V189.4L288 246.6V434.6z\"],\n    \"cubes\": [576, 512, [], \"f1b3\", \"M172.1 40.16L268.1 3.76C280.9-1.089 295.1-1.089 307.9 3.76L403.9 40.16C425.6 48.41 440 69.25 440 92.52V204.7C441.3 205.1 442.6 205.5 443.9 205.1L539.9 242.4C561.6 250.6 576 271.5 576 294.7V413.9C576 436.1 562.9 456.2 542.5 465.1L446.5 507.3C432.2 513.7 415.8 513.7 401.5 507.3L288 457.5L174.5 507.3C160.2 513.7 143.8 513.7 129.5 507.3L33.46 465.1C13.13 456.2 0 436.1 0 413.9V294.7C0 271.5 14.39 250.6 36.15 242.4L132.1 205.1C133.4 205.5 134.7 205.1 136 204.7V92.52C136 69.25 150.4 48.41 172.1 40.16V40.16zM290.8 48.64C289 47.95 286.1 47.95 285.2 48.64L206.8 78.35L287.1 109.5L369.2 78.35L290.8 48.64zM392 210.6V121L309.6 152.6V241.8L392 210.6zM154.8 250.9C153 250.2 150.1 250.2 149.2 250.9L70.81 280.6L152 311.7L233.2 280.6L154.8 250.9zM173.6 455.3L256 419.1V323.2L173.6 354.8V455.3zM342.8 280.6L424 311.7L505.2 280.6L426.8 250.9C425 250.2 422.1 250.2 421.2 250.9L342.8 280.6zM528 413.9V323.2L445.6 354.8V455.3L523.2 421.2C526.1 419.9 528 417.1 528 413.9V413.9z\"],\n    \"d\": [384, 512, [100], \"44\", \"M160 32.01L32 32.01c-17.67 0-32 14.33-32 32v384c0 17.67 14.33 32 32 32l128-.0073c123.5 0 224-100.5 224-224S283.5 32.01 160 32.01zM160 416H64v-320h96c88.22 0 160 71.78 160 159.1S248.2 416 160 416z\"],\n    \"database\": [448, 512, [], \"f1c0\", \"M448 80V128C448 172.2 347.7 208 224 208C100.3 208 0 172.2 0 128V80C0 35.82 100.3 0 224 0C347.7 0 448 35.82 448 80zM393.2 214.7C413.1 207.3 433.1 197.8 448 186.1V288C448 332.2 347.7 368 224 368C100.3 368 0 332.2 0 288V186.1C14.93 197.8 34.02 207.3 54.85 214.7C99.66 230.7 159.5 240 224 240C288.5 240 348.3 230.7 393.2 214.7V214.7zM54.85 374.7C99.66 390.7 159.5 400 224 400C288.5 400 348.3 390.7 393.2 374.7C413.1 367.3 433.1 357.8 448 346.1V432C448 476.2 347.7 512 224 512C100.3 512 0 476.2 0 432V346.1C14.93 357.8 34.02 367.3 54.85 374.7z\"],\n    \"delete-left\": [576, 512, [9003, \"backspace\"], \"f55a\", \"M576 384C576 419.3 547.3 448 512 448H205.3C188.3 448 172 441.3 160 429.3L9.372 278.6C3.371 272.6 0 264.5 0 256C0 247.5 3.372 239.4 9.372 233.4L160 82.75C172 70.74 188.3 64 205.3 64H512C547.3 64 576 92.65 576 128V384zM271 208.1L318.1 256L271 303C261.7 312.4 261.7 327.6 271 336.1C280.4 346.3 295.6 346.3 304.1 336.1L352 289.9L399 336.1C408.4 346.3 423.6 346.3 432.1 336.1C442.3 327.6 442.3 312.4 432.1 303L385.9 256L432.1 208.1C442.3 199.6 442.3 184.4 432.1 175C423.6 165.7 408.4 165.7 399 175L352 222.1L304.1 175C295.6 165.7 280.4 165.7 271 175C261.7 184.4 261.7 199.6 271 208.1V208.1z\"],\n    \"democrat\": [640, 512, [], \"f747\", \"M191.1 479.1C191.1 497.6 206.4 512 223.1 512h32c17.6 0 32-14.4 32-32v-64h160v64c0 17.6 14.41 32 32.01 32L511.1 512c17.6 0 32-14.4 32-32l.0102-128H192L191.1 479.1zM637.2 256.9l-19.5-29.38c-28.25-42.25-75.38-67.5-126.1-67.5H255.1L174.7 78.75c20.13-20 22.63-51 7.5-73.88C178.9-.2552 171.5-1.005 167.1 3.37L125.2 45.25L82.36 2.37C78.74-1.255 72.74-.6302 69.99 3.62c-12.25 18.63-10.25 44 6.125 60.38c3.25 3.25 7.25 5.25 11.25 7.5c-2.125 1.75-4.625 3.125-6.375 5.375l-74.63 99.38C-.8895 185.9-2.014 198.9 3.361 209.7l14.38 28.5c5.375 10.88 16.5 17.75 28.5 17.75H77.24c8.5 0 16.63-3.375 22.63-9.375l38.13-34.63l54.04 108h351.1l-.0102-77.75c16.25 12.13 18.25 17.5 40.13 50.25c4.875 7.375 14.75 9.25 22.13 4.375l26.63-17.63C640.2 274.2 642.2 264.2 637.2 256.9zM296.2 243.2L279.7 259.4l3.875 22.75c.625 4.125-3.625 7.125-7.25 5.25L255.1 276.7L235.6 287.4C231.1 289.2 227.7 286.2 228.4 282.1l3.875-22.75L215.7 243.2c-3-2.875-1.25-7.875 2.875-8.5l22.75-3.25l10.25-20.75c1.75-3.625 7.125-3.625 9 0l10.13 20.75l22.88 3.25C297.6 235.4 299.2 240.4 296.2 243.2zM408.2 243.2l-16.5 16.13l3.875 22.75c.625 4.125-3.625 7.125-7.25 5.25L367.1 276.7l-20.38 10.63c-3.625 1.875-7.875-1.125-7.25-5.25l3.875-22.75l-16.5-16.13c-3-2.875-1.25-7.875 2.875-8.5l22.75-3.25l10.25-20.75c1.75-3.625 7.125-3.625 9 0l10.13 20.75l22.88 3.25C409.6 235.4 411.2 240.4 408.2 243.2zM520.2 243.2l-16.5 16.13l3.875 22.75c.625 4.125-3.625 7.125-7.25 5.25l-20.38-10.63l-20.38 10.63c-3.625 1.875-7.875-1.125-7.25-5.25l3.875-22.75l-16.5-16.13c-3-2.875-1.25-7.875 2.875-8.5l22.75-3.25l10.25-20.75c1.75-3.625 7.125-3.625 9 0l10.13 20.75l22.88 3.25C521.6 235.4 523.2 240.4 520.2 243.2z\"],\n    \"desktop\": [576, 512, [61704, 128421, \"desktop-alt\"], \"f390\", \"M528 0h-480C21.5 0 0 21.5 0 48v320C0 394.5 21.5 416 48 416h192L224 464H152C138.8 464 128 474.8 128 488S138.8 512 152 512h272c13.25 0 24-10.75 24-24s-10.75-24-24-24H352L336 416h192c26.5 0 48-21.5 48-48v-320C576 21.5 554.5 0 528 0zM512 288H64V64h448V288z\"],\n    \"dharmachakra\": [512, 512, [9784], \"f655\", \"M495 225l-17.24 1.124c-5.25-39.5-20.76-75.63-43.89-105.9l12.1-11.37c6.875-6.125 7.25-16.75 .75-23.38L426.5 64.38c-6.625-6.5-17.25-6.125-23.38 .75l-11.37 12.1c-30.25-23.12-66.38-38.64-105.9-43.89L287 17C287.5 7.75 280.2 0 271 0h-30c-9.25 0-16.5 7.75-16 17l1.124 17.24c-39.5 5.25-75.63 20.76-105.9 43.89L108.9 65.13C102.8 58.25 92.13 57.88 85.63 64.38L64.38 85.5C57.88 92.12 58.25 102.8 65.13 108.9l12.1 11.37C54.1 150.5 39.49 186.6 34.24 226.1L17 225C7.75 224.5 0 231.8 0 241v30c0 9.25 7.75 16.5 17 16l17.24-1.124c5.25 39.5 20.76 75.63 43.89 105.9l-12.1 11.37c-6.875 6.125-7.25 16.75-.75 23.25l21.25 21.25c6.5 6.5 17.13 6.125 23.25-.75l11.37-12.1c30.25 23.12 66.38 38.64 105.9 43.89L225 495C224.5 504.2 231.8 512 241 512h30c9.25 0 16.5-7.75 16-17l-1.124-17.24c39.5-5.25 75.63-20.76 105.9-43.89l11.37 12.1c6.125 6.875 16.75 7.25 23.38 .75l21.12-21.25c6.5-6.5 6.125-17.13-.75-23.25l-12.1-11.37c23.12-30.25 38.64-66.38 43.89-105.9L495 287C504.3 287.5 512 280.2 512 271v-30C512 231.8 504.3 224.5 495 225zM281.9 98.68c24.75 4 47.61 13.59 67.24 27.71L306.5 174.6c-8.75-5.375-18.38-9.507-28.62-11.88L281.9 98.68zM230.1 98.68l3.996 64.06C223.9 165.1 214.3 169.2 205.5 174.6L162.9 126.4C182.5 112.3 205.4 102.7 230.1 98.68zM126.4 163l48.35 42.48c-5.5 8.75-9.606 18.4-11.98 28.65L98.68 230.1C102.7 205.4 112.2 182.5 126.4 163zM98.68 281.9l64.06-3.996C165.1 288.1 169.3 297.8 174.6 306.5l-48.23 42.61C112.3 329.5 102.7 306.6 98.68 281.9zM230.1 413.3c-24.75-4-47.61-13.59-67.24-27.71l42.58-48.33c8.75 5.5 18.4 9.606 28.65 11.98L230.1 413.3zM256 288C238.4 288 224 273.6 224 256s14.38-32 32-32s32 14.38 32 32S273.6 288 256 288zM281.9 413.3l-3.996-64.06c10.25-2.375 19.9-6.48 28.65-11.98l42.48 48.35C329.5 399.8 306.6 409.3 281.9 413.3zM385.6 349l-48.25-42.5c5.375-8.75 9.507-18.38 11.88-28.62l64.06 3.996C409.3 306.6 399.8 329.5 385.6 349zM349.3 234.1c-2.375-10.25-6.48-19.9-11.98-28.65L385.6 163c14.13 19.5 23.69 42.38 27.69 67.13L349.3 234.1z\"],\n    \"diagram-next\": [512, 512, [], \"e476\", \"M512 160C512 195.3 483.3 224 448 224H280V288H326.1C347.4 288 358.1 313.9 343 328.1L272.1 399C263.6 408.4 248.4 408.4 239 399L168.1 328.1C153.9 313.9 164.6 288 185.9 288H232V224H64C28.65 224 0 195.3 0 160V96C0 60.65 28.65 32 64 32H448C483.3 32 512 60.65 512 96V160zM312.6 416H448V352H376.6L384.1 343.6C401 327.6 404.6 306.4 399 288H448C483.3 288 512 316.7 512 352V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V352C0 316.7 28.65 288 64 288H112.1C107.4 306.4 110.1 327.6 127 343.6L135.4 352H64V416H199.4L216.4 432.1C238.3 454.8 273.7 454.8 295.6 432.1L312.6 416z\"],\n    \"diagram-predecessor\": [512, 512, [], \"e477\", \"M64 480C28.65 480 0 451.3 0 416V352C0 316.7 28.65 288 64 288H448C483.3 288 512 316.7 512 352V416C512 451.3 483.3 480 448 480H64zM448 416V352H64V416H448zM288 160C288 195.3 259.3 224 224 224H64C28.65 224 0 195.3 0 160V96C0 60.65 28.65 32 64 32H368C412.2 32 448 67.82 448 112V128H486.1C507.4 128 518.1 153.9 503 168.1L432.1 239C423.6 248.4 408.4 248.4 399 239L328.1 168.1C313.9 153.9 324.6 128 345.9 128H384V112C384 103.2 376.8 96 368 96H288V160z\"],\n    \"diagram-project\": [576, 512, [\"project-diagram\"], \"f542\", \"M0 80C0 53.49 21.49 32 48 32H144C170.5 32 192 53.49 192 80V96H384V80C384 53.49 405.5 32 432 32H528C554.5 32 576 53.49 576 80V176C576 202.5 554.5 224 528 224H432C405.5 224 384 202.5 384 176V160H192V176C192 177.7 191.9 179.4 191.7 180.1L272 288H368C394.5 288 416 309.5 416 336V432C416 458.5 394.5 480 368 480H272C245.5 480 224 458.5 224 432V336C224 334.3 224.1 332.6 224.3 331L144 224H48C21.49 224 0 202.5 0 176V80z\"],\n    \"diagram-successor\": [512, 512, [], \"e47a\", \"M512 416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V352C0 316.7 28.65 288 64 288H448C483.3 288 512 316.7 512 352V416zM224 224H64C28.65 224 0 195.3 0 160V96C0 60.65 28.65 32 64 32H368C412.2 32 448 67.82 448 112V128H486.1C507.4 128 518.1 153.9 503 168.1L432.1 239C423.6 248.4 408.4 248.4 399 239L328.1 168.1C313.9 153.9 324.6 128 345.9 128H384V112C384 103.2 376.8 96 368 96H288V160C288 195.3 259.3 224 224 224V224zM64 160H224V96H64V160z\"],\n    \"diamond\": [512, 512, [9830], \"f219\", \"M500.3 227.7C515.9 243.3 515.9 268.7 500.3 284.3L284.3 500.3C268.7 515.9 243.3 515.9 227.7 500.3L11.72 284.3C-3.905 268.7-3.905 243.3 11.72 227.7L227.7 11.72C243.3-3.905 268.7-3.905 284.3 11.72L500.3 227.7z\"],\n    \"diamond-turn-right\": [512, 512, [\"directions\"], \"f5eb\", \"M497.1 222.1l-208.1-208.1c-9.364-9.364-21.62-14.04-33.89-14.03C243.7 .0092 231.5 4.686 222.1 14.03L14.03 222.1C4.676 231.5 .0002 243.7 .0004 255.1c.0002 12.26 4.676 24.52 14.03 33.87l208.1 208.1C231.5 507.3 243.7 511.1 256 511.1c12.26 0 24.52-4.677 33.87-14.03l208.1-208.1c9.352-9.353 14.03-21.61 14.03-33.87C511.1 243.7 507.3 231.5 497.1 222.1zM410.5 252l-96 84c-10.79 9.545-26.53 .9824-26.53-12.03V272H223.1l-.0001 48C223.1 337.6 209.6 352 191.1 352S159.1 337.6 159.1 320V240c0-17.6 14.4-32 32-32h95.1V156c0-13.85 16.39-20.99 26.53-12.03l96 84C414 231 415.1 235.4 415.1 240S414 249 410.5 252z\"],\n    \"dice\": [640, 512, [127922], \"f522\", \"M447.1 224c0-12.56-4.781-25.13-14.35-34.76l-174.9-174.9C249.1 4.786 236.5 0 223.1 0C211.4 0 198.9 4.786 189.2 14.35L14.35 189.2C4.783 198.9-.0011 211.4-.0011 223.1c0 12.56 4.785 25.17 14.35 34.8l174.9 174.9c9.625 9.562 22.19 14.35 34.75 14.35s25.13-4.783 34.75-14.35l174.9-174.9C443.2 249.1 447.1 236.6 447.1 224zM96 248c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1S120 210.8 120 224S109.3 248 96 248zM224 376c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1s23.1 10.75 23.1 23.1S237.3 376 224 376zM224 248c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1S248 210.8 248 224S237.3 248 224 248zM224 120c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1s23.1 10.75 23.1 23.1S237.3 120 224 120zM352 248c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1s23.1 10.75 23.1 23.1S365.3 248 352 248zM591.1 192l-118.7 0c4.418 10.27 6.604 21.25 6.604 32.23c0 20.7-7.865 41.38-23.63 57.14l-136.2 136.2v46.37C320 490.5 341.5 512 368 512h223.1c26.5 0 47.1-21.5 47.1-47.1V240C639.1 213.5 618.5 192 591.1 192zM479.1 376c-13.25 0-23.1-10.75-23.1-23.1s10.75-23.1 23.1-23.1s23.1 10.75 23.1 23.1S493.2 376 479.1 376z\"],\n    \"dice-d20\": [512, 512, [], \"f6cf\", \"M20.04 317.3C18 317.3 16 315.8 16 313.3V150.5c0-2.351 1.91-4.012 4.001-4.012c.6882 0 1.396 .18 2.062 .5748l76.62 45.1l-75.28 122.3C22.59 316.8 21.31 317.3 20.04 317.3zM231.4 405.2l-208.2-22.06c-4.27-.4821-7.123-4.117-7.123-7.995c0-1.401 .3725-2.834 1.185-4.161L122.7 215.1L231.4 405.2zM31.1 420.1c0-2.039 1.508-4.068 3.93-4.068c.1654 0 .3351 .0095 .5089 .0291l203.6 22.31v65.66C239.1 508.6 236.2 512 232 512c-1.113 0-2.255-.2387-3.363-.7565L34.25 423.6C32.69 422.8 31.1 421.4 31.1 420.1zM33.94 117.1c-1.289-.7641-1.938-2.088-1.938-3.417c0-1.281 .6019-2.567 1.813-3.364l150.8-98.59C185.1 10.98 187.3 10.64 188.6 10.64c4.32 0 8.003 3.721 8.003 8.022c0 1.379-.3788 2.818-1.237 4.214L115.5 165.8L33.94 117.1zM146.8 175.1l95.59-168.4C245.5 2.53 250.7 0 255.1 0s10.5 2.53 13.62 7.624l95.59 168.4H146.8zM356.4 207.1l-100.4 175.7L155.6 207.1H356.4zM476.1 415.1c2.422 0 3.93 2.029 3.93 4.068c0 1.378-.6893 2.761-2.252 3.524l-194.4 87.66c-1.103 .5092-2.241 .7443-3.35 .7443c-4.2 0-7.994-3.371-7.994-7.994v-65.69l203.6-22.28C475.7 416 475.9 415.1 476.1 415.1zM494.8 370.9C495.6 372.3 496 373.7 496 375.1c0 3.872-2.841 7.499-7.128 7.98l-208.2 22.06l108.6-190.1L494.8 370.9zM316.6 22.87c-.8581-1.395-1.237-2.834-1.237-4.214c0-4.301 3.683-8.022 8.003-8.022c1.308 0 2.675 .3411 4.015 1.11l150.8 98.59c1.211 .7973 1.813 2.076 1.813 3.353c0 1.325-.6488 2.649-1.938 3.429L396.5 165.8L316.6 22.87zM491.1 146.5c2.091 0 4.001 1.661 4.001 4.012v162.8c0 2.483-2.016 4.006-4.053 4.006c-1.27 0-2.549-.5919-3.353-1.912l-75.28-122.3l76.62-45.1C490.6 146.7 491.3 146.5 491.1 146.5z\"],\n    \"dice-d6\": [448, 512, [], \"f6d1\", \"M7.994 153.5c1.326 0 2.687 .3508 3.975 1.119L208 271.5v223.8c0 9.741-7.656 16.71-16.01 16.71c-2.688 0-5.449-.7212-8.05-2.303l-152.2-92.47C12.13 405.3 0 383.3 0 359.5v-197.7C0 156.1 3.817 153.5 7.994 153.5zM426.2 117.2c0 2.825-1.352 5.647-4.051 7.248L224 242.6L25.88 124.4C23.19 122.8 21.85 119.1 21.85 117.2c0-2.8 1.32-5.603 3.965-7.221l165.1-100.9C201.7 3.023 212.9 0 224 0s22.27 3.023 32.22 9.07l165.1 100.9C424.8 111.6 426.2 114.4 426.2 117.2zM440 153.5C444.2 153.5 448 156.1 448 161.8v197.7c0 23.75-12.12 45.75-31.78 57.69l-152.2 92.5C261.5 511.3 258.7 512 256 512C247.7 512 240 505 240 495.3V271.5l196-116.9C437.3 153.8 438.7 153.5 440 153.5z\"],\n    \"dice-five\": [448, 512, [9860], \"f523\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S145.6 384 128 384zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM224 288C206.4 288 192 273.6 192 256s14.38-32 32-32s32 14.38 32 32S241.6 288 224 288zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384zM320 192c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 192 320 192z\"],\n    \"dice-four\": [448, 512, [9859], \"f524\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S145.6 384 128 384zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384zM320 192c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 192 320 192z\"],\n    \"dice-one\": [448, 512, [9856], \"f525\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM224 288C206.4 288 192 273.6 192 256s14.38-32 32-32s32 14.38 32 32S241.6 288 224 288z\"],\n    \"dice-six\": [448, 512, [9861], \"f526\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S145.6 384 128 384zM128 288C110.4 288 96 273.6 96 256s14.38-32 32-32s32 14.38 32 32S145.6 288 128 288zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384zM320 288c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 288 320 288zM320 192c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 192 320 192z\"],\n    \"dice-three\": [448, 512, [9858], \"f527\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM224 288C206.4 288 192 273.6 192 256s14.38-32 32-32s32 14.38 32 32S241.6 288 224 288zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384z\"],\n    \"dice-two\": [448, 512, [9857], \"f528\", \"M384 32H64C28.62 32 0 60.62 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.62 419.4 32 384 32zM128 192C110.4 192 96 177.6 96 160s14.38-32 32-32s32 14.38 32 32S145.6 192 128 192zM320 384c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 384 320 384z\"],\n    \"disease\": [512, 512, [], \"f7fa\", \"M472.2 195.9l-66.1-22.1c-19.25-6.624-33.5-20.87-38.13-38.24l-16-60.49c-11.62-43.74-76.63-57.11-110-22.62L194.1 99.3c-13.25 13.75-33.5 20.87-54.25 19.25L68.86 112.9c-52-3.999-86.88 44.99-59 82.86l38.63 52.49c11 14.1 12.75 33.74 4.625 50.12l-28.5 56.99c-20.62 41.24 22.88 84.86 73.5 73.86l69.1-15.25c20.12-4.499 41.38 .0001 57 11.62l54.38 40.87c39.38 29.62 101 7.623 104.5-37.24l4.625-61.86c1.375-17.75 12.88-33.87 30.62-42.99l61.1-31.62C526.1 269.8 520.9 212.5 472.2 195.9zM159.1 256c-17.62 0-31.1-14.37-31.1-31.1s14.37-31.1 31.1-31.1s31.1 14.37 31.1 31.1S177.6 256 159.1 256zM287.1 351.1c-17.62 0-31.1-14.37-31.1-31.1c0-17.62 14.37-31.1 31.1-31.1s31.1 14.37 31.1 31.1C319.1 337.6 305.6 351.1 287.1 351.1zM303.1 224c-8.875 0-15.1-7.125-15.1-15.1c0-8.873 7.125-15.1 15.1-15.1s15.1 7.125 15.1 15.1C319.1 216.9 312.9 224 303.1 224z\"],\n    \"divide\": [448, 512, [10135, 247], \"f529\", \"M400 224h-352c-17.69 0-32 14.31-32 31.1s14.31 32 32 32h352c17.69 0 32-14.31 32-32S417.7 224 400 224zM224 144c26.47 0 48-21.53 48-48s-21.53-48-48-48s-48 21.53-48 48S197.5 144 224 144zM224 368c-26.47 0-48 21.53-48 48s21.53 48 48 48s48-21.53 48-48S250.5 368 224 368z\"],\n    \"dna\": [448, 512, [129516], \"f471\", \"M.1193 494.1c-1.125 9.5 6.312 17.87 15.94 17.87l32.06 .0635c8.125 0 15.21-5.833 16.21-13.83c.7501-4.875 1.869-11.17 3.494-18.17h312c1.625 6.875 2.904 13.31 3.529 18.18c1.125 7.1 7.84 13.94 15.97 13.82l32.46-.0625c9.625 0 17.12-8.374 15.99-17.87c-4.625-37.87-25.75-128.1-119.1-207.7c-17.5 12.37-36.98 24.37-58.48 35.49c6.25 4.625 11.56 9.405 17.06 14.15H159.7c21.25-18.12 47.03-35.63 78.65-51.38c172.1-85.5 203.7-218.8 209.5-266.7c1.125-9.5-6.297-17.88-15.92-17.88L399.6 .001c-8.125 0-14.84 5.832-15.96 13.83c-.7501 4.875-1.869 11.17-3.369 18.17H67.74C66.24 25 65.08 18.81 64.33 13.81C63.21 5.813 56.48-.124 48.36 .001L16.1 .1338c-9.625 0-17.09 8.354-15.96 17.85c5.125 42.87 31.29 153.8 159.9 238.1C31.55 340.3 5.245 451.2 .1193 494.1zM223.9 219.7C198.8 205.9 177.6 191.3 159.7 176h128.5C270.4 191.3 249 206.1 223.9 219.7zM355.1 96c-5.875 10.37-12.88 21.12-21 31.1H113.1c-8.25-10.87-15.3-21.63-21.05-32L355.1 96zM93 415.1c5.875-10.37 12.74-21.13 20.87-32h219.4c8.375 10.87 15.48 21.63 21.23 32H93z\"],\n    \"dog\": [576, 512, [128021], \"f6d3\", \"M332.7 19.85C334.6 8.395 344.5 0 356.1 0C363.6 0 370.6 3.52 375.1 9.502L392 32H444.1C456.8 32 469.1 37.06 478.1 46.06L496 64H552C565.3 64 576 74.75 576 88V112C576 156.2 540.2 192 496 192H426.7L421.6 222.5L309.6 158.5L332.7 19.85zM448 64C439.2 64 432 71.16 432 80C432 88.84 439.2 96 448 96C456.8 96 464 88.84 464 80C464 71.16 456.8 64 448 64zM416 256.1V480C416 497.7 401.7 512 384 512H352C334.3 512 320 497.7 320 480V364.8C295.1 377.1 268.8 384 240 384C211.2 384 184 377.1 160 364.8V480C160 497.7 145.7 512 128 512H96C78.33 512 64 497.7 64 480V249.8C35.23 238.9 12.64 214.5 4.836 183.3L.9558 167.8C-3.331 150.6 7.094 133.2 24.24 128.1C41.38 124.7 58.76 135.1 63.05 152.2L66.93 167.8C70.49 182 83.29 191.1 97.97 191.1H303.8L416 256.1z\"],\n    \"dollar-sign\": [320, 512, [128178, 61781, \"dollar\", \"usd\"], \"24\", \"M160 0C177.7 0 192 14.33 192 32V67.68C193.6 67.89 195.1 68.12 196.7 68.35C207.3 69.93 238.9 75.02 251.9 78.31C268.1 82.65 279.4 100.1 275 117.2C270.7 134.3 253.3 144.7 236.1 140.4C226.8 137.1 198.5 133.3 187.3 131.7C155.2 126.9 127.7 129.3 108.8 136.5C90.52 143.5 82.93 153.4 80.92 164.5C78.98 175.2 80.45 181.3 82.21 185.1C84.1 189.1 87.79 193.6 95.14 198.5C111.4 209.2 136.2 216.4 168.4 225.1L171.2 225.9C199.6 233.6 234.4 243.1 260.2 260.2C274.3 269.6 287.6 282.3 295.8 299.9C304.1 317.7 305.9 337.7 302.1 358.1C295.1 397 268.1 422.4 236.4 435.6C222.8 441.2 207.8 444.8 192 446.6V480C192 497.7 177.7 512 160 512C142.3 512 128 497.7 128 480V445.1C127.6 445.1 127.1 444.1 126.7 444.9L126.5 444.9C102.2 441.1 62.07 430.6 35 418.6C18.85 411.4 11.58 392.5 18.76 376.3C25.94 360.2 44.85 352.9 60.1 360.1C81.9 369.4 116.3 378.5 136.2 381.6C168.2 386.4 194.5 383.6 212.3 376.4C229.2 369.5 236.9 359.5 239.1 347.5C241 336.8 239.6 330.7 237.8 326.9C235.9 322.9 232.2 318.4 224.9 313.5C208.6 302.8 183.8 295.6 151.6 286.9L148.8 286.1C120.4 278.4 85.58 268.9 59.76 251.8C45.65 242.4 32.43 229.7 24.22 212.1C15.89 194.3 14.08 174.3 17.95 153C25.03 114.1 53.05 89.29 85.96 76.73C98.98 71.76 113.1 68.49 128 66.73V32C128 14.33 142.3 0 160 0V0z\"],\n    \"dolly\": [576, 512, [\"dolly-box\"], \"f472\", \"M294.2 277.8c17.1 5 34.62 13.38 49.5 24.62l161.5-53.75c8.375-2.875 12.88-11.88 10-20.25L454.8 47.25c-2.748-8.502-11.88-13-20.12-10.12l-61.13 20.37l33.12 99.38l-60.75 20.13l-33.12-99.38L251.2 98.13c-8.373 2.75-12.87 11.88-9.998 20.12L294.2 277.8zM574.4 309.9c-5.594-16.75-23.67-25.91-40.48-20.23l-202.5 67.51c-17.22-22.01-43.57-36.41-73.54-36.97L165.7 43.75C156.9 17.58 132.5 0 104.9 0H32C14.33 0 0 14.33 0 32s14.33 32 32 32h72.94l92.22 276.7C174.7 358.2 160 385.3 160 416c0 53.02 42.98 96 96 96c52.4 0 94.84-42.03 95.82-94.2l202.3-67.44C570.9 344.8 579.1 326.6 574.4 309.9zM256 448c-17.67 0-32-14.33-32-32c0-17.67 14.33-31.1 32-31.1S288 398.3 288 416C288 433.7 273.7 448 256 448z\"],\n    \"dong-sign\": [384, 512, [], \"e169\", \"M320 64C337.7 64 352 78.33 352 96C352 113.7 337.7 128 320 128V384C320 401.7 305.7 416 288 416C275 416 263.9 408.3 258.8 397.2C239.4 409.1 216.5 416 192 416C121.3 416 64 358.7 64 288C64 217.3 121.3 160 192 160C215.3 160 237.2 166.2 256 177.1V128H224C206.3 128 192 113.7 192 96C192 78.33 206.3 64 224 64H256C256 46.33 270.3 32 288 32C305.7 32 320 46.33 320 64V64zM256 288C256 252.7 227.3 224 192 224C156.7 224 128 252.7 128 288C128 323.3 156.7 352 192 352C227.3 352 256 323.3 256 288zM352 448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448H352z\"],\n    \"door-closed\": [576, 512, [128682], \"f52a\", \"M560 448H480V50.75C480 22.75 458.5 0 432 0h-288C117.5 0 96 22.75 96 50.75V448H16C7.125 448 0 455.1 0 464v32C0 504.9 7.125 512 16 512h544c8.875 0 16-7.125 16-16v-32C576 455.1 568.9 448 560 448zM384 288c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S401.6 288 384 288z\"],\n    \"door-open\": [576, 512, [], \"f52b\", \"M560 448H512V113.5c0-27.25-21.5-49.5-48-49.5L352 64.01V128h96V512h112c8.875 0 16-7.125 16-15.1v-31.1C576 455.1 568.9 448 560 448zM280.3 1.007l-192 49.75C73.1 54.51 64 67.76 64 82.88V448H16c-8.875 0-16 7.125-16 15.1v31.1C0 504.9 7.125 512 16 512H320V33.13C320 11.63 300.5-4.243 280.3 1.007zM232 288c-13.25 0-24-14.37-24-31.1c0-17.62 10.75-31.1 24-31.1S256 238.4 256 256C256 273.6 245.3 288 232 288z\"],\n    \"dove\": [512, 512, [128330], \"f4ba\", \"M288 167.2V139.1c-28.25-36.38-47.13-79.29-54.13-125.2C231.7 .4054 214.8-5.02 206.1 5.481C184.1 30.36 168.4 59.7 157.2 92.07C191.4 130.3 237.2 156.7 288 167.2zM400 63.97c-44.25 0-79.1 35.82-79.1 80.08l.0014 59.44c-104.4-6.251-193-70.46-233-161.7C81.48 29.25 63.76 28.58 58.01 40.83C41.38 75.96 32.01 115.2 32.01 156.6c0 70.76 34.11 136.9 85.11 185.9c13.12 12.75 26.13 23.27 38.88 32.77L12.12 411.2c-10.75 2.75-15.5 15.09-9.5 24.47c17.38 26.88 60.42 72.54 153.2 76.29c8 .25 15.99-2.633 22.12-7.883l65.23-56.12l76.84 .0561c88.38 0 160-71.49 160-159.9l.0013-160.2l31.1-63.99L400 63.97zM400 160.1c-8.75 0-16.01-7.259-16.01-16.01c0-8.876 7.261-16.05 16.01-16.05s15.99 7.136 15.99 16.01C416 152.8 408.8 160.1 400 160.1z\"],\n    \"down-left-and-up-right-to-center\": [512, 512, [\"compress-alt\"], \"f422\", \"M215.1 272h-136c-12.94 0-24.63 7.797-29.56 19.75C45.47 303.7 48.22 317.5 57.37 326.6l30.06 30.06l-78.06 78.07c-12.5 12.5-12.5 32.75-.0012 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.26 .0013l78.06-78.07l30.06 30.06c6.125 6.125 14.31 9.367 22.63 9.367c4.125 0 8.279-.7891 12.25-2.43c11.97-4.953 19.75-16.62 19.75-29.56V296C239.1 282.7 229.3 272 215.1 272zM296 240h136c12.94 0 24.63-7.797 29.56-19.75c4.969-11.97 2.219-25.72-6.938-34.87l-30.06-30.06l78.06-78.07c12.5-12.5 12.5-32.76 .0002-45.26l-22.62-22.62c-12.5-12.5-32.76-12.5-45.26-.0003l-78.06 78.07l-30.06-30.06c-9.156-9.141-22.87-11.84-34.87-6.937c-11.97 4.953-19.75 16.62-19.75 29.56v135.1C272 229.3 282.7 240 296 240z\"],\n    \"down-long\": [320, 512, [\"long-arrow-alt-down\"], \"f309\", \"M281.6 392.3l-104 112.1c-9.498 10.24-25.69 10.24-35.19 0l-104-112.1c-6.484-6.992-8.219-17.18-4.404-25.94c3.811-8.758 12.45-14.42 21.1-14.42H128V32c0-17.69 14.33-32 32-32S192 14.31 192 32v319.9h72c9.547 0 18.19 5.66 22 14.42C289.8 375.1 288.1 385.3 281.6 392.3z\"],\n    \"download\": [512, 512, [], \"f019\", \"M480 352h-133.5l-45.25 45.25C289.2 409.3 273.1 416 256 416s-33.16-6.656-45.25-18.75L165.5 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96C512 366.3 497.7 352 480 352zM432 456c-13.2 0-24-10.8-24-24c0-13.2 10.8-24 24-24s24 10.8 24 24C456 445.2 445.2 456 432 456zM233.4 374.6C239.6 380.9 247.8 384 256 384s16.38-3.125 22.62-9.375l128-128c12.49-12.5 12.49-32.75 0-45.25c-12.5-12.5-32.76-12.5-45.25 0L288 274.8V32c0-17.67-14.33-32-32-32C238.3 0 224 14.33 224 32v242.8L150.6 201.4c-12.49-12.5-32.75-12.5-45.25 0c-12.49 12.5-12.49 32.75 0 45.25L233.4 374.6z\"],\n    \"dragon\": [640, 512, [128009], \"f6d5\", \"M18.43 255.8L192 224L100.8 292.6C90.67 302.8 97.8 320 112 320h222.7c-9.499-26.5-14.75-54.5-14.75-83.38V194.2L200.3 106.8C176.5 90.88 145 92.75 123.3 111.2l-117.5 116.4C-6.562 238 2.436 258 18.43 255.8zM575.2 289.9l-100.7-50.25c-16.25-8.125-26.5-24.75-26.5-43V160h63.99l28.12 22.62C546.1 188.6 554.2 192 562.7 192h30.1c11.1 0 23.12-6.875 28.5-17.75l14.37-28.62c5.374-10.87 4.25-23.75-2.999-33.5l-74.49-99.37C552.1 4.75 543.5 0 533.5 0H296C288.9 0 285.4 8.625 290.4 13.62L351.1 64L292.4 88.75c-5.874 3-5.874 11.37 0 14.37L351.1 128l-.0011 108.6c0 72 35.99 139.4 95.99 179.4c-195.6 6.75-344.4 41-434.1 60.88c-8.124 1.75-13.87 9-13.87 17.38C.0463 504 8.045 512 17.79 512h499.1c63.24 0 119.6-47.5 122.1-110.8C642.3 354 617.1 310.9 575.2 289.9zM489.1 66.25l45.74 11.38c-2.75 11-12.5 18.88-24.12 18.25C497.7 95.25 484.8 83.38 489.1 66.25z\"],\n    \"draw-polygon\": [448, 512, [], \"f5ee\", \"M384.3 352C419.5 352.2 448 380.7 448 416C448 451.3 419.3 480 384 480C360.3 480 339.6 467.1 328.6 448H119.4C108.4 467.1 87.69 480 64 480C28.65 480 0 451.3 0 416C0 392.3 12.87 371.6 32 360.6V151.4C12.87 140.4 0 119.7 0 96C0 60.65 28.65 32 64 32C87.69 32 108.4 44.87 119.4 64H328.6C339.6 44.87 360.3 32 384 32C419.3 32 448 60.65 448 96C448 131.3 419.5 159.8 384.3 159.1L345.5 227.9C349.7 236.4 352 245.9 352 256C352 266.1 349.7 275.6 345.5 284.1L384.3 352zM96 360.6C105.7 366.2 113.8 374.3 119.4 384H328.6C328.6 383.9 328.7 383.8 328.7 383.7L292.2 319.9C290.8 319.1 289.4 320 288 320C252.7 320 224 291.3 224 256C224 220.7 252.7 192 288 192C289.4 192 290.8 192 292.2 192.1L328.7 128.3L328.6 128H119.4C113.8 137.7 105.7 145.8 96 151.4L96 360.6z\"],\n    \"droplet\": [384, 512, [128167, \"tint\"], \"f043\", \"M16 319.1C16 245.9 118.3 89.43 166.9 19.3C179.2 1.585 204.8 1.585 217.1 19.3C265.7 89.43 368 245.9 368 319.1C368 417.2 289.2 496 192 496C94.8 496 16 417.2 16 319.1zM112 319.1C112 311.2 104.8 303.1 96 303.1C87.16 303.1 80 311.2 80 319.1C80 381.9 130.1 432 192 432C200.8 432 208 424.8 208 416C208 407.2 200.8 400 192 400C147.8 400 112 364.2 112 319.1z\"],\n    \"droplet-slash\": [640, 512, [\"tint-slash\"], \"f5c7\", \"M215.3 143.4C243.5 95.07 274.2 49.29 294.9 19.3C307.2 1.585 332.8 1.585 345.1 19.3C393.7 89.43 496 245.9 496 319.1C496 333.7 494.4 347.1 491.5 359.9L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L215.3 143.4zM143.1 319.1C143.1 296.5 154.3 264.6 169.1 229.9L443.5 445.4C411.7 476.7 368.1 496 319.1 496C222.8 496 143.1 417.2 143.1 319.1V319.1zM239.1 319.1C239.1 311.2 232.8 303.1 223.1 303.1C215.2 303.1 207.1 311.2 207.1 319.1C207.1 381.9 258.1 432 319.1 432C328.8 432 336 424.8 336 416C336 407.2 328.8 400 319.1 400C275.8 400 239.1 364.2 239.1 319.1V319.1z\"],\n    \"drum\": [512, 512, [129345], \"f569\", \"M431.1 122l70.02-45.91c11.09-7.273 14.19-22.14 6.906-33.25c-7.219-11.07-22.09-14.23-33.22-6.924l-106.4 69.73c-49.81-8.787-97.18-9.669-112.4-9.669c-.002 0 .002 0 0 0C219.5 96 0 100.6 0 208.3v160.1c0 30.27 27.5 57.68 71.1 77.85v-101.9c0-13.27 10.75-24.03 24-24.03s23.1 10.76 23.1 24.03v118.9C153 472.4 191.1 478.3 231.1 480v-103.6c0-13.27 10.75-24.03 24-24.03c.002 0-.002 0 0 0c13.25 0 24 10.76 24 24.03V480c40.93-1.668 78.95-7.615 111.1-16.72v-118.9c0-13.27 10.75-24.03 24-24.03s24 10.76 24 24.03v101.9c44.49-20.17 71.1-47.58 71.1-77.85V208.3C511.1 164.9 476.1 138.4 431.1 122zM255.1 272.5C255.1 272.5 255.1 272.5 255.1 272.5c-114.9 0-207.1-28.97-207.1-64.39s93.12-63.1 207.1-63.1c.002 0-.002 0 0 0c17.5 0 34.47 .7139 50.71 1.966L242.8 187.1c-11.09 7.273-14.19 22.14-6.906 33.25C240.5 228.3 248.2 232.1 256 232.1c4.5 0 9.062-1.265 13.12-3.923l109.3-71.67c51.77 11.65 85.5 30.38 85.5 51.67C463.1 243.6 370.9 272.5 255.1 272.5z\"],\n    \"drum-steelpan\": [576, 512, [], \"f56a\", \"M288 32C129 32 0 89.25 0 160v192c0 70.75 129 128 288 128s288-57.25 288-128V160C576 89.25 447 32 288 32zM205 190.4c-4.5 16.62-14.5 30.5-28.25 40.5C100.2 217.5 48 190.8 48 160c0-30.12 50.12-56.38 124-69.1l25.62 44.25C207.5 151.4 210.1 171.2 205 190.4zM288 240c-21.12 0-41.38-.1-60.88-2.75C235.1 211.1 259.2 192 288 192s52.88 19.12 60.88 45.25C329.4 239 309.1 240 288 240zM352 96c0 35.25-28.75 64-64 64S224 131.2 224 96V83C244.4 81.12 265.8 80 288 80s43.63 1.125 64 3V96zM398.9 230.9c-13.75-9.875-23.88-23.88-28.38-40.5c-5.125-19.13-2.5-39 7.375-56l25.62-44.5C477.8 103.5 528 129.8 528 160C528 190.9 475.6 217.5 398.9 230.9z\"],\n    \"drumstick-bite\": [512, 512, [], \"f6d7\", \"M512 168.9c0 1.766-.0229 3.398-.0768 5.164c-16.91-9.132-35.51-13.76-53.96-13.76c-82.65 0-105.5 74.17-105.5 105.4c0 27.04 9.923 54.43 29.63 76.25c-19.52 6.629-39.99 9.997-60.62 9.997l-87.18 .0038l-40.59 40.49c-6.104 6.103-8.921 14.01-8.921 22.17c0 13.98 7.244 17.1 7.244 37.03C192.1 485.4 164.6 512 131.7 512c-15.63 0-31.11-6.055-42.72-17.8c-11.55-11.46-16.82-26.31-16.82-41.26c0-4.948 .575-9.903 1.695-14.75c-4.842 1.11-9.793 1.681-14.72 1.681c-42.15 0-59.13-36.64-59.13-59.5c0-33.43 27.15-60.34 60.39-60.34c18.97 0 22.97 7.219 36.96 7.219c8.159 0 16.04-2.811 22.14-8.914l40.57-40.47L160.1 191.1c0-63.1 27.79-107 63.17-142.4c33.13-33.06 76.39-49.59 119.7-49.59s86.79 16.53 119.9 49.59C495.9 82.5 512 125.7 512 168.9z\"],\n    \"dumbbell\": [640, 512, [], \"f44b\", \"M104 96h-48C42.75 96 32 106.8 32 120V224C14.33 224 0 238.3 0 256c0 17.67 14.33 32 31.1 32L32 392C32 405.3 42.75 416 56 416h48C117.3 416 128 405.3 128 392v-272C128 106.8 117.3 96 104 96zM456 32h-48C394.8 32 384 42.75 384 56V224H256V56C256 42.75 245.3 32 232 32h-48C170.8 32 160 42.75 160 56v400C160 469.3 170.8 480 184 480h48C245.3 480 256 469.3 256 456V288h128v168c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24V56C480 42.75 469.3 32 456 32zM608 224V120C608 106.8 597.3 96 584 96h-48C522.8 96 512 106.8 512 120v272c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24V288c17.67 0 32-14.33 32-32C640 238.3 625.7 224 608 224z\"],\n    \"dumpster\": [576, 512, [], \"f793\", \"M560 160c10.38 0 17.1-9.75 15.5-19.88l-24-95.1C549.8 37 543.3 32 536 32h-98.88l25.62 128H560zM272 32H171.5L145.9 160H272V32zM404.5 32H304v128h126.1L404.5 32zM16 160h97.25l25.63-128H40C32.75 32 26.25 37 24.5 44.12l-24 95.1C-2.001 150.2 5.625 160 16 160zM560 224h-20L544 192H32l4 32H16C7.25 224 0 231.2 0 240v32C0 280.8 7.25 288 16 288h28L64 448v16C64 472.8 71.25 480 80 480h32C120.8 480 128 472.8 128 464V448h320v16c0 8.75 7.25 16 16 16h32c8.75 0 16-7.25 16-16V448l20-160H560C568.8 288 576 280.8 576 272v-32C576 231.2 568.8 224 560 224z\"],\n    \"dumpster-fire\": [640, 512, [], \"f794\", \"M418.8 104.2L404.6 32H304.1L304 159.1h60.77C381.1 140.7 399.1 121.8 418.8 104.2zM272.1 32.12H171.5L145.9 160.1h126.1L272.1 32.12zM461.3 104.2c18.25 16.25 35.51 33.62 51.14 51.49c5.751-5.623 11.38-11.12 17.38-16.37l21.26-18.98l21.25 18.98c1.125 .9997 2.125 2.124 3.126 3.124c-.125-.7498 .2501-1.5 0-2.249l-24-95.97c-1.625-7.123-8.127-12.12-15.38-12.12H437.2l12.25 61.5L461.3 104.2zM16 160.1l97.26-.0223l25.64-127.9h-98.89c-7.251 0-13.75 4.999-15.5 12.12L.5001 140.2C-2.001 150.3 5.626 160.1 16 160.1zM340.6 192.1L32.01 192.1l4.001 31.99L16 224.1C7.252 224.1 0 231.3 0 240.1V272c0 8.748 7.251 15.1 16 15.1l28.01 .0177l20 159.1L64.01 464C64.01 472.8 71.26 480 80.01 480h32.01c8.752 0 16-7.248 16-15.1v-15.1l208.8-.002c-30.13-33.74-48.73-77.85-48.73-126.3C288.1 285.8 307.9 238.8 340.6 192.1zM551.2 163.3c-14.88 13.25-28.38 27.12-40.26 41.12c-19.5-25.74-43.63-51.99-71.01-76.36c-70.14 62.73-120 144.2-120 193.6C319.1 409.1 391.6 480 479.1 480s160-70.87 160-158.3C640.1 285 602.1 209.4 551.2 163.3zM532.6 392.6c-14.75 10.62-32.88 16.1-52.51 16.1c-49.01 0-88.89-33.49-88.89-87.98c0-27.12 16.5-50.99 49.38-91.85c4.751 5.498 67.14 87.98 67.14 87.98l39.76-46.99c2.876 4.874 5.375 9.497 7.75 13.1C573.9 321.5 565.1 368.4 532.6 392.6z\"],\n    \"dungeon\": [512, 512, [], \"f6d9\", \"M336.6 156.5C327.3 148.1 322.6 136.5 327.1 125.3L357.6 49.18C362.7 36.27 377.8 30.36 389.7 37.63C410.9 50.63 430 66.62 446.5 85.02C455.7 95.21 452.9 110.9 441.5 118.5L373.9 163.5C363.6 170.4 349.8 168.1 340.5 159.9C339.2 158.7 337.9 157.6 336.6 156.5H336.6zM297.7 112.6C293.2 123.1 280.9 129.8 268.7 128.6C264.6 128.2 260.3 128 256 128C251.7 128 247.4 128.2 243.3 128.6C231.1 129.8 218.8 123.1 214.3 112.6L183.1 36.82C178.8 24.02 185.5 9.433 198.1 6.374C217.3 2.203 236.4 0 256 0C275.6 0 294.7 2.203 313 6.374C326.5 9.433 333.2 24.02 328 36.82L297.7 112.6zM122.3 37.63C134.2 30.36 149.3 36.27 154.4 49.18L184.9 125.3C189.4 136.5 184.7 148.1 175.4 156.5C174.1 157.6 172.8 158.7 171.5 159.9C162.2 168.1 148.4 170.4 138.1 163.5L70.52 118.5C59.13 110.9 56.32 95.21 65.46 85.02C81.99 66.62 101.1 50.63 122.3 37.63H122.3zM379.5 222.1C376.3 210.7 379.7 198.1 389.5 191.6L458.1 145.8C469.7 138.1 485.6 141.9 491.2 154.7C501.6 178.8 508.4 204.8 510.9 232C512.1 245.2 501.3 255.1 488 255.1H408C394.7 255.1 384.2 245.2 381.8 232.1C381.1 228.7 380.4 225.4 379.5 222.1V222.1zM122.5 191.6C132.3 198.1 135.7 210.7 132.5 222.1C131.6 225.4 130.9 228.7 130.2 232.1C127.8 245.2 117.3 256 104 256H24C10.75 256-.1184 245.2 1.107 232C3.636 204.8 10.43 178.8 20.82 154.7C26.36 141.9 42.26 138.1 53.91 145.8L122.5 191.6zM104 288C117.3 288 128 298.7 128 312V360C128 373.3 117.3 384 104 384H24C10.75 384 0 373.3 0 360V312C0 298.7 10.75 288 24 288H104zM488 288C501.3 288 512 298.7 512 312V360C512 373.3 501.3 384 488 384H408C394.7 384 384 373.3 384 360V312C384 298.7 394.7 288 408 288H488zM104 416C117.3 416 128 426.7 128 440V488C128 501.3 117.3 512 104 512H24C10.75 512 0 501.3 0 488V440C0 426.7 10.75 416 24 416H104zM488 416C501.3 416 512 426.7 512 440V488C512 501.3 501.3 512 488 512H408C394.7 512 384 501.3 384 488V440C384 426.7 394.7 416 408 416H488zM272 464C272 472.8 264.8 480 256 480C247.2 480 240 472.8 240 464V192C240 183.2 247.2 176 256 176C264.8 176 272 183.2 272 192V464zM208 464C208 472.8 200.8 480 192 480C183.2 480 176 472.8 176 464V224C176 215.2 183.2 208 192 208C200.8 208 208 215.2 208 224V464zM336 464C336 472.8 328.8 480 320 480C311.2 480 304 472.8 304 464V224C304 215.2 311.2 208 320 208C328.8 208 336 215.2 336 224V464z\"],\n    \"e\": [320, 512, [101], \"45\", \"M320 448c0 17.67-14.33 32-32 32H32c-17.67 0-32-14.33-32-32v-384C0 46.34 14.33 32.01 32 32.01h256c17.67 0 32 14.33 32 32s-14.33 32-32 32H64v128h160c17.67 0 32 14.32 32 31.99s-14.33 32.01-32 32.01H64v128h224C305.7 416 320 430.3 320 448z\"],\n    \"ear-deaf\": [512, 512, [\"deaf\", \"deafness\", \"hard-of-hearing\"], \"f2a4\", \"M192 319.1C185.8 313.7 177.6 310.6 169.4 310.6S153 313.7 146.8 319.1l-137.4 137.4C3.124 463.6 0 471.8 0 480c0 18.3 14.96 31.1 31.1 31.1c8.188 0 16.38-3.124 22.62-9.371l137.4-137.4c6.247-6.247 9.371-14.44 9.371-22.62S198.3 326.2 192 319.1zM200 240c0-22.06 17.94-40 40-40s40 17.94 40 40c0 13.25 10.75 24 24 24s24-10.75 24-24c0-48.53-39.47-88-88-88S152 191.5 152 240c0 13.25 10.75 24 24 24S200 253.3 200 240zM511.1 31.1c0-8.188-3.124-16.38-9.371-22.62s-14.44-9.372-22.63-9.372s-16.38 3.124-22.62 9.372L416 50.75c-6.248 6.248-9.372 14.44-9.372 22.63c0 8.188 3.123 16.38 9.37 22.62c6.247 6.248 14.44 9.372 22.63 9.372s16.38-3.124 22.63-9.372l41.38-41.38C508.9 48.37 511.1 40.18 511.1 31.1zM415.1 241.6c0-57.78-42.91-177.6-175.1-177.6c-153.6 0-175.2 150.8-175.2 160.4c0 17.32 14.99 31.58 32.75 31.58c16.61 0 29.25-13.07 31.24-29.55c6.711-55.39 54.02-98.45 111.2-98.45c80.45 0 111.2 75.56 111.2 119.6c0 57.94-38.22 98.14-46.37 106.3L288 370.7v13.25c0 31.4-22.71 57.58-52.58 62.98C220.4 449.7 208 463.3 208 478.6c0 17.95 14.72 32.09 32.03 32.09c4.805 0 100.5-14.34 111.2-112.7C412.6 335.8 415.1 263.4 415.1 241.6z\"],\n    \"ear-listen\": [512, 512, [\"assistive-listening-systems\"], \"f2a2\", \"M160.1 320c-17.64 0-32.02 14.37-32.02 31.1s14.38 31.1 32.02 31.1s32.02-14.37 32.02-31.1S177.8 320 160.1 320zM86.66 361.4c-12.51-12.49-32.77-12.49-45.27 0c-12.51 12.5-12.51 32.78 0 45.27l63.96 63.99c12.51 12.49 32.77 12.49 45.27 .002c12.51-12.5 12.51-32.78 0-45.27L86.66 361.4zM32.02 448C14.38 448 0 462.4 0 480S14.38 512 32.02 512c17.64 0 32.02-14.37 32.02-31.1S49.66 448 32.02 448zM287.7 70.31c-110.9-29.38-211.7 47.53-222.8 150.9C62.1 239.9 78.73 255.1 97.57 255.1c16.61 0 29.25-13.07 31.24-29.55c6.934-57.22 57.21-101.3 116.9-98.3c71.71 3.594 117.1 76.82 102.5 146.9c-6.551 29.65-21.4 56.87-43.38 78.87L288 370.7v13.25c0 31.4-22.71 57.58-52.58 62.98C220.4 449.7 208 463.3 208 478.6c0 19.78 17.88 34.94 37.38 31.64c55.92-9.443 99.63-55.28 105.9-112.2c40.11-40.68 62.89-93.95 64.65-150.9C418.4 166.4 365.8 91 287.7 70.31zM240 200c22.06 0 40 17.94 40 40c0 13.25 10.75 24 24 24s24-10.75 24-24c0-48.53-39.47-88-88-88S152 191.5 152 240c0 13.25 10.75 24 24 24S200 253.3 200 240C200 217.9 217.9 200 240 200zM397.8 3.125c-15.91-7.594-35.05-.8438-42.66 15.09c-7.594 15.97-.8281 35.06 15.12 42.66C417.5 83.41 448 134.9 448 192c0 17.69 14.33 32 32 32S512 209.7 512 192C512 110.3 467.2 36.19 397.8 3.125z\"],\n    \"earth-africa\": [512, 512, [127757, \"globe-africa\"], \"f57c\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM177.8 63.19L187.8 80.62C190.5 85.46 192 90.93 192 96.5V137.9C192 141.8 193.6 145.6 196.3 148.3C202.6 154.6 212.8 153.1 218.3 147.1L231.9 130.1C236.6 124.2 244.8 122.4 251.6 125.8L266.8 133.4C270.2 135.1 273.1 136 277.8 136C284.3 136 290.6 133.4 295.2 128.8L299.1 124.9C302 121.1 306.5 121.2 310.1 123.1L339.4 137.7C347.1 141.6 352 149.5 352 158.1C352 168.6 344.9 177.8 334.7 180.3L299.3 189.2C291.9 191 284.2 190.7 276.1 188.3L244.1 177.7C241.7 176.6 238.2 176 234.8 176C227.8 176 220.1 178.3 215.4 182.5L176 212C165.9 219.6 160 231.4 160 244V272C160 298.5 181.5 320 208 320H240C248.8 320 256 327.2 256 336V384C256 401.7 270.3 416 288 416C298.1 416 307.6 411.3 313.6 403.2L339.2 369.1C347.5 357.1 352 344.5 352 330.7V318.6C352 314.7 354.6 311.3 358.4 310.4L363.7 309.1C375.6 306.1 384 295.4 384 283.1C384 275.1 381.2 269.2 376.2 264.2L342.7 230.7C338.1 226.1 338.1 221 342.7 217.3C348.4 211.6 356.8 209.6 364.5 212.2L378.6 216.9C390.9 220.1 404.3 215.4 410.1 203.8C413.6 196.8 421.3 193.1 428.1 194.6L456.4 200.1C431.1 112.4 351.5 48 256 48C228.3 48 201.1 53.4 177.8 63.19L177.8 63.19z\"],\n    \"earth-americas\": [512, 512, [127758, \"earth\", \"earth-america\", \"globe-americas\"], \"f57d\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM57.71 192.1L67.07 209.4C75.36 223.9 88.99 234.6 105.1 239.2L162.1 255.7C180.2 260.6 192 276.3 192 294.2V334.1C192 345.1 198.2 355.1 208 359.1C217.8 364.9 224 374.9 224 385.9V424.9C224 440.5 238.9 451.7 253.9 447.4C270.1 442.8 282.5 429.1 286.6 413.7L289.4 402.5C293.6 385.6 304.6 371.1 319.7 362.4L327.8 357.8C342.8 349.3 352 333.4 352 316.1V307.9C352 295.1 346.9 282.9 337.9 273.9L334.1 270.1C325.1 261.1 312.8 255.1 300.1 255.1H256.1C245.9 255.1 234.9 253.1 225.2 247.6L190.7 227.8C186.4 225.4 183.1 221.4 181.6 216.7C178.4 207.1 182.7 196.7 191.7 192.1L197.7 189.2C204.3 185.9 211.9 185.3 218.1 187.7L242.2 195.4C250.3 198.1 259.3 195 264.1 187.9C268.8 180.8 268.3 171.5 262.9 165L249.3 148.8C239.3 136.8 239.4 119.3 249.6 107.5L265.3 89.12C274.1 78.85 275.5 64.16 268.8 52.42L266.4 48.26C262.1 48.09 259.5 48 256 48C163.1 48 84.4 108.9 57.71 192.1L57.71 192.1zM437.6 154.5L412 164.8C396.3 171.1 388.2 188.5 393.5 204.6L410.4 255.3C413.9 265.7 422.4 273.6 433 276.3L462.2 283.5C463.4 274.5 464 265.3 464 256C464 219.2 454.4 184.6 437.6 154.5H437.6z\"],\n    \"earth-asia\": [512, 512, [127759, \"globe-asia\"], \"f57e\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM51.68 295.1L83.41 301.5C91.27 303.1 99.41 300.6 105.1 294.9L120.5 279.5C132 267.1 151.6 271.1 158.9 285.8L168.2 304.3C172.1 313.9 182.8 319.1 193.5 319.1C208.7 319.1 219.6 305.4 215.2 290.8L209.3 270.9C204.6 255.5 216.2 240 232.3 240H234.6C247.1 240 260.5 233.3 267.9 222.2L278.6 206.1C284.2 197.7 283.9 186.6 277.8 178.4L261.7 156.9C251.4 143.2 258.4 123.4 275.1 119.2L292.1 114.1C299.6 113.1 305.7 107.8 308.6 100.6L324.9 59.69C303.4 52.12 280.2 48 255.1 48C141.1 48 47.1 141.1 47.1 256C47.1 269.4 49.26 282.5 51.68 295.1L51.68 295.1zM450.4 300.4L434.6 304.9C427.9 306.7 420.8 304 417.1 298.2L415.1 295.1C409.1 285.7 398.7 279.1 387.5 279.1C376.4 279.1 365.1 285.7 359.9 295.1L353.8 304.6C352.4 306.8 350.5 308.7 348.2 309.1L311.1 330.1C293.9 340.2 286.5 362.5 294.1 381.4L300.5 393.8C309.1 413 331.2 422.3 350.1 414.9L353.5 413.1C363.6 410.2 374.8 411.8 383.5 418.1L385 419.2C422.2 389.7 449.1 347.8 459.4 299.7C456.4 299.4 453.4 299.6 450.4 300.4H450.4zM156.1 367.5L188.1 375.5C196.7 377.7 205.4 372.5 207.5 363.9C209.7 355.3 204.5 346.6 195.9 344.5L163.9 336.5C155.3 334.3 146.6 339.5 144.5 348.1C142.3 356.7 147.5 365.4 156.1 367.5V367.5zM236.5 328.1C234.3 336.7 239.5 345.4 248.1 347.5C256.7 349.7 265.4 344.5 267.5 335.9L275.5 303.9C277.7 295.3 272.5 286.6 263.9 284.5C255.3 282.3 246.6 287.5 244.5 296.1L236.5 328.1zM321.7 120.8L305.7 152.8C301.7 160.7 304.9 170.4 312.8 174.3C320.7 178.3 330.4 175.1 334.3 167.2L350.3 135.2C354.3 127.3 351.1 117.6 343.2 113.7C335.3 109.7 325.6 112.9 321.7 120.8V120.8z\"],\n    \"earth-europe\": [512, 512, [\"globe-europe\"], \"f7a2\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM266.3 48.25L232.5 73.6C227.2 77.63 224 83.95 224 90.67V99.72C224 106.5 229.5 112 236.3 112C238.7 112 241.1 111.3 243.1 109.9L284.9 82.06C286.9 80.72 289.3 80 291.7 80H292.7C298.9 80 304 85.07 304 91.31C304 94.31 302.8 97.19 300.7 99.31L280.8 119.2C275 124.1 267.9 129.4 260.2 131.9L233.6 140.8C227.9 142.7 224 148.1 224 154.2C224 157.9 222.5 161.5 219.9 164.1L201.9 182.1C195.6 188.4 192 197.1 192 206.1V210.3C192 226.7 205.6 240 221.9 240C232.9 240 243.1 233.8 248 224L252 215.9C254.5 211.1 259.4 208 264.8 208C269.4 208 273.6 210.1 276.3 213.7L292.6 235.5C294.7 238.3 298.1 240 301.7 240C310.1 240 315.6 231.1 311.8 223.6L310.7 221.3C307.1 214.3 310.7 205.8 318.1 203.3L339.3 196.2C346.9 193.7 352 186.6 352 178.6C352 168.3 360.3 160 370.6 160H400C408.8 160 416 167.2 416 176C416 184.8 408.8 192 400 192H379.3C372.1 192 365.1 194.9 360 200L355.3 204.7C353.2 206.8 352 209.7 352 212.7C352 218.9 357.1 224 363.3 224H374.6C380.6 224 386.4 226.4 390.6 230.6L397.2 237.2C398.1 238.1 400 241.4 400 244C400 246.6 398.1 249 397.2 250.8L389.7 258.3C386 261.1 384 266.9 384 272C384 277.1 386 282 389.7 285.7L408 304C418.2 314.2 432.1 320 446.6 320H453.1C460.5 299.8 464 278.3 464 256C464 144.6 376.4 53.64 266.3 48.25V48.25zM438.4 356.1C434.7 353.5 430.2 352 425.4 352C419.4 352 413.6 349.6 409.4 345.4L395.1 331.1C388.3 324.3 377.9 320 367.1 320C357.4 320 347.9 316.5 340.5 310.2L313.1 287.4C302.4 277.5 287.6 271.1 272.3 271.1H251.4C238.7 271.1 226.4 275.7 215.9 282.7L188.5 301C170.7 312.9 160 332.9 160 354.3V357.5C160 374.5 166.7 390.7 178.7 402.7L194.7 418.7C203.2 427.2 214.7 432 226.7 432H248C261.3 432 272 442.7 272 456C272 458.5 272.4 461 273.1 463.3C344.5 457.5 405.6 415.7 438.4 356.1L438.4 356.1zM164.7 100.7L132.7 132.7C126.4 138.9 126.4 149.1 132.7 155.3C138.9 161.6 149.1 161.6 155.3 155.3L187.3 123.3C193.6 117.1 193.6 106.9 187.3 100.7C181.1 94.44 170.9 94.44 164.7 100.7V100.7z\"],\n    \"earth-oceania\": [512, 512, [\"globe-oceania\"], \"e47b\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM215.5 360.6L240.9 377C247.1 381.6 256.2 384 264.6 384C278 384 290.7 377.8 298.1 367.2L311 351.8C316.8 344.4 320 335.2 320 325.8C320 316.4 316.8 307.2 311 299.8L293.1 276.9C288.3 270.7 284.4 263.1 281.6 256.7L271.5 230.8C269.9 226.7 265.9 224 261.5 224C258 224 254.8 225.6 252.8 228.4L242.4 242.6C237.7 248.1 229.7 252.1 221.9 250.5C218.7 249.8 215.8 247.1 213.8 245.4L209.3 239.3C202.1 229.7 190.7 224 178.7 224C166.7 224 155.3 229.7 148.1 239.3L142.8 246.3C141.3 248.4 139.2 250 136.9 251.1L101.6 267.9C81.08 277.7 72.8 302.6 83.37 322.7L86.65 328.9C95.67 346.1 115.7 354.3 134.1 348.4L149.5 343.6C156 341.5 163.1 341.6 169.6 343.8L208.6 357.3C211 358.1 213.4 359.2 215.5 360.6H215.5zM273.8 142.5C264.3 132.1 250.8 128.9 237.6 131.5L199.1 139.2C183.8 142.3 181.5 163.2 195.7 169.5L238.5 188.6C243.7 190.8 249.2 192 254.8 192H284.7C298.9 192 306.1 174.8 296 164.7L273.8 142.5zM264 448H280C288.8 448 296 440.8 296 432C296 423.2 288.8 416 280 416H264C255.2 416 248 423.2 248 432C248 440.8 255.2 448 264 448zM431.2 298.9C428.4 290.6 419.3 286 410.9 288.8C402.6 291.6 398 300.7 400.8 309.1L408.8 333.1C411.6 341.4 420.7 345.1 429.1 343.2C437.4 340.4 441.1 331.3 439.2 322.9L431.2 298.9zM411.3 379.3C417.6 373.1 417.6 362.9 411.3 356.7C405.1 350.4 394.9 350.4 388.7 356.7L356.7 388.7C350.4 394.9 350.4 405.1 356.7 411.3C362.9 417.6 373.1 417.6 379.3 411.3L411.3 379.3z\"],\n    \"egg\": [384, 512, [129370], \"f7fb\", \"M192 16c-106 0-192 182-192 288c0 106 85.1 192 192 192c105.1 0 192-85.1 192-192C384 198 297.1 16 192 16zM160.1 138C128.6 177.1 96 249.8 96 304C96 312.8 88.84 320 80 320S64 312.8 64 304c0-63.56 36.7-143.3 71.22-186c5.562-6.906 15.64-7.969 22.5-2.406C164.6 121.1 165.7 131.2 160.1 138z\"],\n    \"eject\": [448, 512, [9167], \"f052\", \"M48.01 319.1h351.1c41.62 0 63.49-49.63 35.37-80.38l-175.1-192.1c-19-20.62-51.75-20.62-70.75 0L12.64 239.6C-15.48 270.2 6.393 319.1 48.01 319.1zM399.1 384H48.01c-26.39 0-47.99 21.59-47.99 47.98C.0117 458.4 21.61 480 48.01 480h351.1c26.39 0 47.99-21.6 47.99-47.99C447.1 405.6 426.4 384 399.1 384z\"],\n    \"elevator\": [512, 512, [], \"e16d\", \"M79 96h130c5.967 0 11.37-3.402 13.75-8.662c2.385-5.262 1.299-11.39-2.754-15.59l-65-67.34c-5.684-5.881-16.31-5.881-21.99 0l-65 67.34C63.95 75.95 62.87 82.08 65.25 87.34C67.63 92.6 73.03 96 79 96zM357 91.59c5.686 5.881 16.31 5.881 21.99 0l65-67.34c4.053-4.199 5.137-10.32 2.754-15.59C444.4 3.402 438.1 0 433 0h-130c-5.967 0-11.37 3.402-13.75 8.662c-2.385 5.262-1.301 11.39 2.752 15.59L357 91.59zM448 128H64c-35.35 0-64 28.65-64 63.1v255.1C0 483.3 28.65 512 64 512h384c35.35 0 64-28.65 64-63.1V192C512 156.7 483.3 128 448 128zM352 224C378.5 224.1 400 245.5 400 272c0 26.46-21.47 47.9-48 48C325.5 319.9 304 298.5 304 272C304 245.5 325.5 224.1 352 224zM160 224C186.5 224.1 208 245.5 208 272c0 26.46-21.47 47.9-48 48C133.5 319.9 112 298.5 112 272C112 245.5 133.5 224.1 160 224zM240 448h-160v-48C80 373.5 101.5 352 128 352h64c26.51 0 48 21.49 48 48V448zM432 448h-160v-48c0-26.51 21.49-48 48-48h64c26.51 0 48 21.49 48 48V448z\"],\n    \"ellipsis\": [448, 512, [\"ellipsis-h\"], \"f141\", \"M120 256C120 286.9 94.93 312 64 312C33.07 312 8 286.9 8 256C8 225.1 33.07 200 64 200C94.93 200 120 225.1 120 256zM280 256C280 286.9 254.9 312 224 312C193.1 312 168 286.9 168 256C168 225.1 193.1 200 224 200C254.9 200 280 225.1 280 256zM328 256C328 225.1 353.1 200 384 200C414.9 200 440 225.1 440 256C440 286.9 414.9 312 384 312C353.1 312 328 286.9 328 256z\"],\n    \"ellipsis-vertical\": [128, 512, [\"ellipsis-v\"], \"f142\", \"M64 360C94.93 360 120 385.1 120 416C120 446.9 94.93 472 64 472C33.07 472 8 446.9 8 416C8 385.1 33.07 360 64 360zM64 200C94.93 200 120 225.1 120 256C120 286.9 94.93 312 64 312C33.07 312 8 286.9 8 256C8 225.1 33.07 200 64 200zM64 152C33.07 152 8 126.9 8 96C8 65.07 33.07 40 64 40C94.93 40 120 65.07 120 96C120 126.9 94.93 152 64 152z\"],\n    \"envelope\": [512, 512, [128386, 61443, 9993], \"f0e0\", \"M256 352c-16.53 0-33.06-5.422-47.16-16.41L0 173.2V400C0 426.5 21.49 448 48 448h416c26.51 0 48-21.49 48-48V173.2l-208.8 162.5C289.1 346.6 272.5 352 256 352zM16.29 145.3l212.2 165.1c16.19 12.6 38.87 12.6 55.06 0l212.2-165.1C505.1 137.3 512 125 512 112C512 85.49 490.5 64 464 64h-416C21.49 64 0 85.49 0 112C0 125 6.01 137.3 16.29 145.3z\"],\n    \"envelope-open\": [512, 512, [62135], \"f2b6\", \"M493.6 163c-24.88-19.62-45.5-35.37-164.3-121.6C312.7 29.21 279.7 0 256.4 0H255.6C232.3 0 199.3 29.21 182.6 41.38c-118.8 86.25-139.4 101.1-164.3 121.6C6.75 172 0 186 0 200.8v263.2C0 490.5 21.49 512 48 512h416c26.51 0 48-21.49 48-47.1V200.8C512 186 505.3 172 493.6 163zM303.2 367.5C289.1 378.5 272.5 384 256 384s-33.06-5.484-47.16-16.47L64 254.9V208.5c21.16-16.59 46.48-35.66 156.4-115.5c3.18-2.328 6.891-5.187 10.98-8.353C236.9 80.44 247.8 71.97 256 66.84c8.207 5.131 19.14 13.6 24.61 17.84c4.09 3.166 7.801 6.027 11.15 8.478C400.9 172.5 426.6 191.7 448 208.5v46.32L303.2 367.5z\"],\n    \"envelope-open-text\": [512, 512, [], \"f658\", \"M256 417.1c-16.38 0-32.88-4.1-46.88-15.12L0 250.9v213.1C0 490.5 21.5 512 48 512h416c26.5 0 48-21.5 48-47.1V250.9l-209.1 151.1C288.9 412 272.4 417.1 256 417.1zM493.6 163C484.8 156 476.4 149.5 464 140.1v-44.12c0-26.5-21.5-48-48-48l-77.5 .0016c-3.125-2.25-5.875-4.25-9.125-6.5C312.6 29.13 279.3-.3732 256 .0018C232.8-.3732 199.4 29.13 182.6 41.5c-3.25 2.25-6 4.25-9.125 6.5L96 48c-26.5 0-48 21.5-48 48v44.12C35.63 149.5 27.25 156 18.38 163C6.75 172 0 186 0 200.8v10.62l96 69.37V96h320v184.7l96-69.37V200.8C512 186 505.3 172 493.6 163zM176 255.1h160c8.836 0 16-7.164 16-15.1c0-8.838-7.164-16-16-16h-160c-8.836 0-16 7.162-16 16C160 248.8 167.2 255.1 176 255.1zM176 191.1h160c8.836 0 16-7.164 16-16c0-8.838-7.164-15.1-16-15.1h-160c-8.836 0-16 7.162-16 15.1C160 184.8 167.2 191.1 176 191.1z\"],\n    \"envelopes-bulk\": [640, 512, [\"mail-bulk\"], \"f674\", \"M191.9 448.6c-9.766 0-19.48-2.969-27.78-8.891L32 340.2V480c0 17.62 14.38 32 32 32h256c17.62 0 32-14.38 32-32v-139.8L220.2 439.5C211.7 445.6 201.8 448.6 191.9 448.6zM192 192c0-35.25 28.75-64 64-64h224V32c0-17.62-14.38-32-32-32H128C110.4 0 96 14.38 96 32v192h96V192zM320 256H64C46.38 256 32 270.4 32 288v12.18l151 113.8c5.25 3.719 12.7 3.734 18.27-.25L352 300.2V288C352 270.4 337.6 256 320 256zM576 160H256C238.4 160 224 174.4 224 192v32h96c33.25 0 60.63 25.38 63.75 57.88L384 416h192c17.62 0 32-14.38 32-32V192C608 174.4 593.6 160 576 160zM544 288h-64V224h64V288z\"],\n    \"equals\": [448, 512, [62764], \"3d\", \"M48 192h352c17.69 0 32-14.32 32-32s-14.31-31.1-32-31.1h-352c-17.69 0-32 14.31-32 31.1S30.31 192 48 192zM400 320h-352c-17.69 0-32 14.31-32 31.1s14.31 32 32 32h352c17.69 0 32-14.32 32-32S417.7 320 400 320z\"],\n    \"eraser\": [512, 512, [], \"f12d\", \"M480 416C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H150.6C133.7 480 117.4 473.3 105.4 461.3L25.37 381.3C.3786 356.3 .3786 315.7 25.37 290.7L258.7 57.37C283.7 32.38 324.3 32.38 349.3 57.37L486.6 194.7C511.6 219.7 511.6 260.3 486.6 285.3L355.9 416H480zM265.4 416L332.7 348.7L195.3 211.3L70.63 336L150.6 416L265.4 416z\"],\n    \"ethernet\": [512, 512, [], \"f796\", \"M512 208v224c0 8.75-7.25 16-16 16H416v-128h-32v128h-64v-128h-32v128H224v-128H192v128H128v-128H96v128H16C7.25 448 0 440.8 0 432v-224C0 199.2 7.25 192 16 192H64V144C64 135.2 71.25 128 80 128H128V80C128 71.25 135.2 64 144 64h224C376.8 64 384 71.25 384 80V128h48C440.8 128 448 135.2 448 144V192h48C504.8 192 512 199.2 512 208z\"],\n    \"euro-sign\": [384, 512, [8364, \"eur\", \"euro\"], \"f153\", \"M64 240C46.33 240 32 225.7 32 208C32 190.3 46.33 176 64 176H92.29C121.9 92.11 201.1 32 296 32H320C337.7 32 352 46.33 352 64C352 81.67 337.7 96 320 96H296C238.1 96 187.8 128.4 162.1 176H288C305.7 176 320 190.3 320 208C320 225.7 305.7 240 288 240H144.2C144.1 242.6 144 245.3 144 248V264C144 266.7 144.1 269.4 144.2 272H288C305.7 272 320 286.3 320 304C320 321.7 305.7 336 288 336H162.1C187.8 383.6 238.1 416 296 416H320C337.7 416 352 430.3 352 448C352 465.7 337.7 480 320 480H296C201.1 480 121.9 419.9 92.29 336H64C46.33 336 32 321.7 32 304C32 286.3 46.33 272 64 272H80.15C80.05 269.3 80 266.7 80 264V248C80 245.3 80.05 242.7 80.15 240H64z\"],\n    \"exclamation\": [128, 512, [10069, 10071, 61738], \"21\", \"M64 352c17.69 0 32-14.32 32-31.1V64.01c0-17.67-14.31-32.01-32-32.01S32 46.34 32 64.01v255.1C32 337.7 46.31 352 64 352zM64 400c-22.09 0-40 17.91-40 40s17.91 39.1 40 39.1s40-17.9 40-39.1S86.09 400 64 400z\"],\n    \"expand\": [448, 512, [], \"f065\", \"M128 32H32C14.31 32 0 46.31 0 64v96c0 17.69 14.31 32 32 32s32-14.31 32-32V96h64c17.69 0 32-14.31 32-32S145.7 32 128 32zM416 32h-96c-17.69 0-32 14.31-32 32s14.31 32 32 32h64v64c0 17.69 14.31 32 32 32s32-14.31 32-32V64C448 46.31 433.7 32 416 32zM128 416H64v-64c0-17.69-14.31-32-32-32s-32 14.31-32 32v96c0 17.69 14.31 32 32 32h96c17.69 0 32-14.31 32-32S145.7 416 128 416zM416 320c-17.69 0-32 14.31-32 32v64h-64c-17.69 0-32 14.31-32 32s14.31 32 32 32h96c17.69 0 32-14.31 32-32v-96C448 334.3 433.7 320 416 320z\"],\n    \"eye\": [576, 512, [128065], \"f06e\", \"M279.6 160.4C282.4 160.1 285.2 160 288 160C341 160 384 202.1 384 256C384 309 341 352 288 352C234.1 352 192 309 192 256C192 253.2 192.1 250.4 192.4 247.6C201.7 252.1 212.5 256 224 256C259.3 256 288 227.3 288 192C288 180.5 284.1 169.7 279.6 160.4zM480.6 112.6C527.4 156 558.7 207.1 573.5 243.7C576.8 251.6 576.8 260.4 573.5 268.3C558.7 304 527.4 355.1 480.6 399.4C433.5 443.2 368.8 480 288 480C207.2 480 142.5 443.2 95.42 399.4C48.62 355.1 17.34 304 2.461 268.3C-.8205 260.4-.8205 251.6 2.461 243.7C17.34 207.1 48.62 156 95.42 112.6C142.5 68.84 207.2 32 288 32C368.8 32 433.5 68.84 480.6 112.6V112.6zM288 112C208.5 112 144 176.5 144 256C144 335.5 208.5 400 288 400C367.5 400 432 335.5 432 256C432 176.5 367.5 112 288 112z\"],\n    \"eye-dropper\": [512, 512, [\"eye-dropper-empty\", \"eyedropper\"], \"f1fb\", \"M482.8 29.23C521.7 68.21 521.7 131.4 482.8 170.4L381.2 271.9L390.6 281.4C403.1 293.9 403.1 314.1 390.6 326.6C378.1 339.1 357.9 339.1 345.4 326.6L185.4 166.6C172.9 154.1 172.9 133.9 185.4 121.4C197.9 108.9 218.1 108.9 230.6 121.4L240.1 130.8L341.6 29.23C380.6-9.744 443.8-9.744 482.8 29.23L482.8 29.23zM55.43 323.3L176.1 202.6L221.4 247.9L100.7 368.6C97.69 371.6 96 375.6 96 379.9V416H132.1C136.4 416 140.4 414.3 143.4 411.3L264.1 290.6L309.4 335.9L188.7 456.6C173.7 471.6 153.3 480 132.1 480H89.69L49.75 506.6C37.06 515.1 20.16 513.4 9.373 502.6C-1.413 491.8-3.086 474.9 5.375 462.2L32 422.3V379.9C32 358.7 40.43 338.3 55.43 323.3L55.43 323.3z\"],\n    \"eye-low-vision\": [640, 512, [\"low-vision\"], \"f2a8\", \"M150.7 92.77C195 58.27 251.8 32 320 32C400.8 32 465.5 68.84 512.6 112.6C559.4 156 590.7 207.1 605.5 243.7C608.8 251.6 608.8 260.4 605.5 268.3C592.1 300.6 565.2 346.1 525.6 386.7L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L150.7 92.77zM223.1 149.5L313.4 220.3C317.6 211.8 320 202.2 320 191.1C320 180.5 316.1 169.7 311.6 160.4C314.4 160.1 317.2 159.1 320 159.1C373 159.1 416 202.1 416 255.1C416 269.7 413.1 282.7 407.1 294.5L446.6 324.7C457.7 304.3 464 280.9 464 255.1C464 176.5 399.5 111.1 320 111.1C282.7 111.1 248.6 126.2 223.1 149.5zM393.6 469.4L54.65 203.7C62.6 190.1 72.08 175.8 83.09 161.5L446.2 447.5C429.8 456.4 412.3 463.8 393.6 469.4V469.4zM34.46 268.3C31.74 261.8 31.27 254.5 33.08 247.8L329.2 479.8C326.1 479.9 323.1 480 320 480C239.2 480 174.5 443.2 127.4 399.4C80.62 355.1 49.34 304 34.46 268.3H34.46z\"],\n    \"eye-slash\": [640, 512, [], \"f070\", \"M150.7 92.77C195 58.27 251.8 32 320 32C400.8 32 465.5 68.84 512.6 112.6C559.4 156 590.7 207.1 605.5 243.7C608.8 251.6 608.8 260.4 605.5 268.3C592.1 300.6 565.2 346.1 525.6 386.7L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L150.7 92.77zM223.1 149.5L313.4 220.3C317.6 211.8 320 202.2 320 191.1C320 180.5 316.1 169.7 311.6 160.4C314.4 160.1 317.2 159.1 320 159.1C373 159.1 416 202.1 416 255.1C416 269.7 413.1 282.7 407.1 294.5L446.6 324.7C457.7 304.3 464 280.9 464 255.1C464 176.5 399.5 111.1 320 111.1C282.7 111.1 248.6 126.2 223.1 149.5zM320 480C239.2 480 174.5 443.2 127.4 399.4C80.62 355.1 49.34 304 34.46 268.3C31.18 260.4 31.18 251.6 34.46 243.7C44 220.8 60.29 191.2 83.09 161.5L177.4 235.8C176.5 242.4 176 249.1 176 255.1C176 335.5 240.5 400 320 400C338.7 400 356.6 396.4 373 389.9L446.2 447.5C409.9 467.1 367.8 480 320 480H320z\"],\n    \"f\": [320, 512, [102], \"46\", \"M320 64.01c0 17.67-14.33 32-32 32H64v128h160c17.67 0 32 14.32 32 31.1s-14.33 32-32 32H64v160c0 17.67-14.33 32-32 32s-32-14.33-32-32v-384C0 46.34 14.33 32.01 32 32.01h256C305.7 32.01 320 46.34 320 64.01z\"],\n    \"face-angry\": [512, 512, [128544, \"angry\"], \"f556\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM339.9 373.3C323.8 355.4 295.7 336 256 336C216.3 336 188.2 355.4 172.1 373.3C166.2 379.9 166.7 389.1 173.3 395.9C179.9 401.8 189.1 401.3 195.9 394.7C207.6 381.7 227.5 368 255.1 368C284.5 368 304.4 381.7 316.1 394.7C322 401.3 332.1 401.8 338.7 395.9C345.3 389.1 345.8 379.9 339.9 373.3H339.9zM176.4 272C194 272 208.4 257.7 208.4 240C208.4 238.5 208.3 237 208.1 235.6L218.9 239.2C227.3 241.1 236.4 237.4 239.2 229.1C241.1 220.7 237.4 211.6 229.1 208.8L133.1 176.8C124.7 174 115.6 178.6 112.8 186.9C110 195.3 114.6 204.4 122.9 207.2L153.7 217.4C147.9 223.2 144.4 231.2 144.4 240C144.4 257.7 158.7 272 176.4 272zM358.9 217.2L389.1 207.2C397.4 204.4 401.1 195.3 399.2 186.9C396.4 178.6 387.3 174 378.9 176.8L282.9 208.8C274.6 211.6 270 220.7 272.8 229.1C275.6 237.4 284.7 241.1 293.1 239.2L304.7 235.3C304.5 236.8 304.4 238.4 304.4 240C304.4 257.7 318.7 272 336.4 272C354 272 368.4 257.7 368.4 240C368.4 231.1 364.7 223 358.9 217.2H358.9z\"],\n    \"face-dizzy\": [512, 512, [\"dizzy\"], \"f567\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 416C291.3 416 320 387.3 320 352C320 316.7 291.3 288 256 288C220.7 288 192 316.7 192 352C192 387.3 220.7 416 256 416zM100.7 155.3L137.4 192L100.7 228.7C94.44 234.9 94.44 245.1 100.7 251.3C106.9 257.6 117.1 257.6 123.3 251.3L160 214.6L196.7 251.3C202.9 257.6 213.1 257.6 219.3 251.3C225.6 245.1 225.6 234.9 219.3 228.7L182.6 192L219.3 155.3C225.6 149.1 225.6 138.9 219.3 132.7C213.1 126.4 202.9 126.4 196.7 132.7L160 169.4L123.3 132.7C117.1 126.4 106.9 126.4 100.7 132.7C94.44 138.9 94.44 149.1 100.7 155.3zM292.7 155.3L329.4 192L292.7 228.7C286.4 234.9 286.4 245.1 292.7 251.3C298.9 257.6 309.1 257.6 315.3 251.3L352 214.6L388.7 251.3C394.9 257.6 405.1 257.6 411.3 251.3C417.6 245.1 417.6 234.9 411.3 228.7L374.6 192L411.3 155.3C417.6 149.1 417.6 138.9 411.3 132.7C405.1 126.4 394.9 126.4 388.7 132.7L352 169.4L315.3 132.7C309.1 126.4 298.9 126.4 292.7 132.7C286.4 138.9 286.4 149.1 292.7 155.3z\"],\n    \"face-flushed\": [512, 512, [128563, \"flushed\"], \"f579\", \"M184 224C184 237.3 173.3 248 160 248C146.7 248 136 237.3 136 224C136 210.7 146.7 200 160 200C173.3 200 184 210.7 184 224zM376 224C376 237.3 365.3 248 352 248C338.7 248 328 237.3 328 224C328 210.7 338.7 200 352 200C365.3 200 376 210.7 376 224zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM192 400H320C328.8 400 336 392.8 336 384C336 375.2 328.8 368 320 368H192C183.2 368 176 375.2 176 384C176 392.8 183.2 400 192 400zM160 296C199.8 296 232 263.8 232 224C232 184.2 199.8 152 160 152C120.2 152 88 184.2 88 224C88 263.8 120.2 296 160 296zM352 152C312.2 152 280 184.2 280 224C280 263.8 312.2 296 352 296C391.8 296 424 263.8 424 224C424 184.2 391.8 152 352 152z\"],\n    \"face-frown\": [512, 512, [9785, \"frown\"], \"f119\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM159.3 388.7C171.5 349.4 209.9 320 256 320C302.1 320 340.5 349.4 352.7 388.7C355.3 397.2 364.3 401.9 372.7 399.3C381.2 396.7 385.9 387.7 383.3 379.3C366.8 326.1 315.8 287.1 256 287.1C196.3 287.1 145.2 326.1 128.7 379.3C126.1 387.7 130.8 396.7 139.3 399.3C147.7 401.9 156.7 397.2 159.3 388.7H159.3zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-frown-open\": [512, 512, [128550, \"frown-open\"], \"f57a\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176zM259.9 369.4C288.8 369.4 316.2 375.2 340.6 385.5C352.9 390.7 366.7 381.3 361.4 369.1C344.8 330.9 305.6 303.1 259.9 303.1C214.3 303.1 175.1 330.8 158.4 369.1C153.1 381.3 166.1 390.6 179.3 385.4C203.7 375.1 231 369.4 259.9 369.4L259.9 369.4z\"],\n    \"face-grimace\": [512, 512, [128556, \"grimace\"], \"f57f\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM399.3 360H344V400H352C375.8 400 395.5 382.7 399.3 360zM352 304H344V344H399.3C395.5 321.3 375.8 304 352 304zM328 344V304H264V344H328zM328 400V360H264V400H328zM184 304V344H248V304H184zM184 360V400H248V360H184zM168 344V304H160C136.2 304 116.5 321.3 112.7 344H168zM168 400V360H112.7C116.5 382.7 136.2 400 160 400H168zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-grin\": [512, 512, [128512, \"grin\"], \"f580\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-grin-beam\": [512, 512, [128516, \"grin-beam\"], \"f582\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM226.5 231.6C229.8 230.5 232 227.4 232 224C232 206.1 225.3 188.4 215.4 175.2C205.6 162.2 191.5 152 176 152C160.5 152 146.4 162.2 136.6 175.2C126.7 188.4 120 206.1 120 224C120 227.4 122.2 230.5 125.5 231.6C128.7 232.7 132.3 231.6 134.4 228.8L134.4 228.8L134.6 228.5C134.8 228.3 134.1 228 135.3 227.6C135.1 226.8 136.9 225.7 138.1 224.3C140.6 221.4 144.1 217.7 148.3 213.1C157.1 206.2 167.2 200 176 200C184.8 200 194.9 206.2 203.7 213.1C207.9 217.7 211.4 221.4 213.9 224.3C215.1 225.7 216 226.8 216.7 227.6C217 228 217.2 228.3 217.4 228.5L217.6 228.8L217.6 228.8C219.7 231.6 223.3 232.7 226.5 231.6V231.6zM377.6 228.8C379.7 231.6 383.3 232.7 386.5 231.6C389.8 230.5 392 227.4 392 224C392 206.1 385.3 188.4 375.4 175.2C365.6 162.2 351.5 152 336 152C320.5 152 306.4 162.2 296.6 175.2C286.7 188.4 280 206.1 280 224C280 227.4 282.2 230.5 285.5 231.6C288.7 232.7 292.3 231.6 294.4 228.8L294.4 228.8L294.6 228.5C294.8 228.3 294.1 228 295.3 227.6C295.1 226.8 296.9 225.7 298.1 224.3C300.6 221.4 304.1 217.7 308.3 213.1C317.1 206.2 327.2 200 336 200C344.8 200 354.9 206.2 363.7 213.1C367.9 217.7 371.4 221.4 373.9 224.3C375.1 225.7 376 226.8 376.7 227.6C377 228 377.2 228.3 377.4 228.5L377.6 228.8L377.6 228.8z\"],\n    \"face-grin-beam-sweat\": [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M464 128C437.5 128 416 107 416 81.01C416 76.01 417.8 69.74 420.6 62.87C420.9 62.17 421.2 61.46 421.6 60.74C430.5 40.51 448.1 15.86 457.6 3.282C460.8-1.093 467.2-1.094 470.4 3.281C483.4 20.65 512 61.02 512 81.01C512 102.7 497.1 120.8 476.8 126.3C472.7 127.4 468.4 128 464 128L464 128zM256 .0003C307.4 .0003 355.3 15.15 395.4 41.23C393.9 44.32 392.4 47.43 391.1 50.53C387.8 58.57 384 69.57 384 81.01C384 125.4 420.6 160 464 160C473.6 160 482.8 158.3 491.4 155.2C504.7 186.1 512 220.2 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0V.0003zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM226.5 231.6C229.8 230.5 232 227.4 232 224C232 206.1 225.3 188.4 215.4 175.2C205.6 162.2 191.5 152 176 152C160.5 152 146.4 162.2 136.6 175.2C126.7 188.4 120 206.1 120 224C120 227.4 122.2 230.5 125.5 231.6C128.7 232.7 132.3 231.6 134.4 228.8L134.4 228.8L134.6 228.5C134.8 228.3 134.1 228 135.3 227.6C135.1 226.8 136.9 225.7 138.1 224.3C140.6 221.4 144.1 217.7 148.3 213.1C157.1 206.2 167.2 200 176 200C184.8 200 194.9 206.2 203.7 213.1C207.9 217.7 211.4 221.4 213.9 224.3C215.1 225.7 216 226.8 216.7 227.6C217 228 217.2 228.3 217.4 228.5L217.6 228.8L217.6 228.8C219.7 231.6 223.3 232.7 226.5 231.6V231.6zM377.6 228.8C379.7 231.6 383.3 232.7 386.5 231.6C389.8 230.5 392 227.4 392 224C392 206.1 385.3 188.4 375.4 175.2C365.6 162.2 351.5 152 336 152C320.5 152 306.4 162.2 296.6 175.2C286.7 188.4 280 206.1 280 224C280 227.4 282.2 230.5 285.5 231.6C288.7 232.7 292.3 231.6 294.4 228.8L294.4 228.8L294.6 228.5C294.8 228.3 294.1 228 295.3 227.6C295.1 226.8 296.9 225.7 298.1 224.3C300.6 221.4 304.1 217.7 308.3 213.1C317.1 206.2 327.2 200 336 200C344.8 200 354.9 206.2 363.7 213.1C367.9 217.7 371.4 221.4 373.9 224.3C375.1 225.7 376 226.8 376.7 227.6C377 228 377.2 228.3 377.4 228.5L377.6 228.8L377.6 228.8z\"],\n    \"face-grin-hearts\": [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM199.3 129.1C181.5 124.4 163.2 134.9 158.4 152.7L154.1 168.8L137.1 164.5C120.2 159.7 101.9 170.3 97.14 188.1C92.38 205.8 102.9 224.1 120.7 228.9L185.8 246.3C194.4 248.6 203.1 243.6 205.4 235L222.9 169.1C227.6 152.2 217.1 133.9 199.3 129.1H199.3zM353.6 152.7C348.8 134.9 330.5 124.4 312.7 129.1C294.9 133.9 284.4 152.2 289.1 169.1L306.6 235C308.9 243.6 317.6 248.6 326.2 246.3L391.3 228.9C409.1 224.1 419.6 205.8 414.9 188.1C410.1 170.3 391.8 159.7 374 164.5L357.9 168.8L353.6 152.7z\"],\n    \"face-grin-squint\": [512, 512, [128518, \"grin-squint\"], \"f585\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM133.5 146.7C125.6 142.4 116 148.2 116 157.1C116 159.9 116.1 162.6 118.8 164.8L154.8 208L118.8 251.2C116.1 253.4 116 256.1 116 258.9C116 267.8 125.6 273.6 133.5 269.3L223.4 221.4C234.1 215.7 234.1 200.3 223.4 194.6L133.5 146.7zM396 157.1C396 148.2 386.4 142.4 378.5 146.7L288.6 194.6C277.9 200.3 277.9 215.7 288.6 221.4L378.5 269.3C386.4 273.6 396 267.8 396 258.9C396 256.1 395 253.4 393.2 251.2L357.2 208L393.2 164.8C395 162.6 396 159.9 396 157.1V157.1z\"],\n    \"face-grin-squint-tears\": [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.18C446-5.046 477.5-4.645 497.1 14.92C516.6 34.49 517 65.95 497.8 85.18C490.1 92.02 476.4 97.59 460.5 101.9C444.1 106.3 426.4 109.4 414.1 111.2C412.5 111.5 410.1 111.7 409.6 111.9C403.1 112.8 399.2 108 400.1 102.4C401.7 91.19 404.7 72.82 409.1 55.42C409.4 54.12 409.8 52.84 410.1 51.56C414.4 35.62 419.1 21.02 426.8 14.18L426.8 14.18zM382.2 33.17C380.6 37.96 379.3 42.81 378.1 47.52C373.3 66.46 370.1 86.05 368.4 97.79C364.5 124.6 387.4 147.5 414.1 143.6C426 141.9 445.6 138.8 464.5 133.9C469.2 132.7 474.1 131.4 478.8 129.9C534.2 227.5 520.2 353.8 437 437C353.8 520.3 227.5 534.2 129.8 478.8C131.3 474 132.7 469.2 133.9 464.5C138.7 445.5 141.9 425.1 143.6 414.2C147.5 387.4 124.6 364.5 97.89 368.4C85.97 370.1 66.39 373.2 47.46 378.1C42.76 379.3 37.93 380.6 33.15 382.1C-22.19 284.5-8.245 158.2 74.98 74.98C158.2-8.253 284.5-22.19 382.2 33.17V33.17zM416.4 202.3C411.6 190.4 395.6 191.4 389.6 202.7C370.1 239.4 343.3 275.9 309.8 309.4C276.3 342.9 239.8 369.7 203.1 389.2C191.8 395.2 190.8 411.2 202.7 416C262.1 440.2 332.6 428.3 380.7 380.3C428.7 332.2 440.6 261.7 416.4 202.3H416.4zM94.43 288.5L150.5 293.6L155.6 349.7C155.8 352.5 157.1 355 159 357C165.4 363.4 176.2 360.7 178.8 352.1L208.5 254.6C211.1 242.1 201.1 232.1 189.5 235.7L92.05 265.3C83.46 267.9 80.76 278.7 87.1 285.1C89.07 287.1 91.66 288.3 94.43 288.5V288.5zM235.7 189.5C232.1 201.1 242.1 211.1 254.6 208.5L352.1 178.8C360.7 176.2 363.4 165.4 357 159C355 157.1 352.5 155.8 349.7 155.6L293.6 150.5L288.5 94.43C288.3 91.66 287.1 89.07 285.1 87.1C278.7 80.76 267.9 83.46 265.3 92.05L235.7 189.5zM51.53 410.1C70.01 405.1 90.3 401.8 102.4 400.1C108 399.2 112.8 403.1 111.9 409.6C110.2 421.7 106.9 441.9 101.9 460.4C97.57 476.4 92.02 490.1 85.18 497.8C65.95 517 34.49 516.6 14.92 497.1C-4.645 477.5-5.046 446 14.18 426.8C21.02 419.1 35.6 414.4 51.53 410.1V410.1z\"],\n    \"face-grin-stars\": [512, 512, [129321, \"grin-stars\"], \"f587\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5H407.4zM152.8 124.6L136.2 159.3L98.09 164.3C95.03 164.7 92.48 166.8 91.52 169.8C90.57 172.7 91.39 175.9 93.62 178L121.5 204.5L114.5 242.3C113.1 245.4 115.2 248.4 117.7 250.2C120.2 252.1 123.5 252.3 126.2 250.8L159.1 232.5L193.8 250.8C196.5 252.3 199.8 252.1 202.3 250.2C204.8 248.4 206 245.4 205.5 242.3L198.5 204.5L226.4 178C228.6 175.9 229.4 172.7 228.5 169.8C227.5 166.8 224.1 164.7 221.9 164.3L183.8 159.3L167.2 124.6C165.9 121.8 163.1 120 159.1 120C156.9 120 154.1 121.8 152.8 124.6V124.6zM344.8 124.6L328.2 159.3L290.1 164.3C287 164.7 284.5 166.8 283.5 169.8C282.6 172.7 283.4 175.9 285.6 178L313.5 204.5L306.5 242.3C305.1 245.4 307.2 248.4 309.7 250.2C312.2 252.1 315.5 252.3 318.2 250.8L352 232.5L385.8 250.8C388.5 252.3 391.8 252.1 394.3 250.2C396.8 248.4 398 245.4 397.5 242.3L390.5 204.5L418.4 178C420.6 175.9 421.4 172.7 420.5 169.8C419.5 166.8 416.1 164.7 413.9 164.3L375.8 159.3L359.2 124.6C357.9 121.8 355.1 120 352 120C348.9 120 346.1 121.8 344.8 124.6H344.8z\"],\n    \"face-grin-tears\": [640, 512, [128514, \"grin-tears\"], \"f588\", \"M548.6 371.4C506.4 454.8 419.9 512 319.1 512C220.1 512 133.6 454.8 91.4 371.4C95.87 368.4 100.1 365 104.1 361.1C112.2 352.1 117.3 342.5 120.6 334.4C124.2 325.7 127.1 316 129.4 306.9C134 288.7 137 269.1 138.6 258.7C142.6 232.2 119.9 209.5 93.4 213.3C86.59 214.3 77.18 215.7 66.84 217.7C85.31 94.5 191.6 0 319.1 0C448.4 0 554.7 94.5 573.2 217.7C562.8 215.7 553.4 214.3 546.6 213.3C520.1 209.5 497.4 232.2 501.4 258.7C502.1 269.1 505.1 288.7 510.6 306.9C512.9 316 515.8 325.7 519.4 334.4C522.7 342.5 527.8 352.1 535.9 361.1C539.9 365 544.1 368.4 548.6 371.4V371.4zM471.4 331.5C476.4 319.7 464.4 309 452.1 312.8C412.4 324.9 367.7 331.8 320.3 331.8C272.9 331.8 228.1 324.9 188.5 312.8C176.2 309 164.2 319.7 169.2 331.5C194.1 390.6 252.4 432 320.3 432C388.2 432 446.4 390.6 471.4 331.5H471.4zM281.6 228.8C283.7 231.6 287.3 232.7 290.5 231.6C293.8 230.5 295.1 227.4 295.1 224C295.1 206.1 289.3 188.4 279.4 175.2C269.6 162.2 255.5 152 239.1 152C224.5 152 210.4 162.2 200.6 175.2C190.7 188.4 183.1 206.1 183.1 224C183.1 227.4 186.2 230.5 189.5 231.6C192.7 232.7 196.3 231.6 198.4 228.8L198.4 228.8L198.6 228.5C198.8 228.3 198.1 228 199.3 227.6C199.1 226.8 200.9 225.7 202.1 224.3C204.6 221.4 208.1 217.7 212.3 213.1C221.1 206.2 231.2 200 239.1 200C248.8 200 258.9 206.2 267.7 213.1C271.9 217.7 275.4 221.4 277.9 224.3C279.1 225.7 280 226.8 280.7 227.6C281 228 281.2 228.3 281.4 228.5L281.6 228.8L281.6 228.8zM450.5 231.6C453.8 230.5 456 227.4 456 224C456 206.1 449.3 188.4 439.4 175.2C429.6 162.2 415.5 152 400 152C384.5 152 370.4 162.2 360.6 175.2C350.7 188.4 344 206.1 344 224C344 227.4 346.2 230.5 349.5 231.6C352.7 232.7 356.3 231.6 358.4 228.8L358.4 228.8L358.6 228.5C358.8 228.3 358.1 228 359.3 227.6C359.1 226.8 360.9 225.7 362.1 224.3C364.6 221.4 368.1 217.7 372.3 213.1C381.1 206.2 391.2 200 400 200C408.8 200 418.9 206.2 427.7 213.1C431.9 217.7 435.4 221.4 437.9 224.3C439.1 225.7 440 226.8 440.7 227.6C441 228 441.2 228.3 441.4 228.5L441.6 228.8L441.6 228.8C443.7 231.6 447.3 232.7 450.5 231.6V231.6zM106.1 254.1C103.9 275.6 95.58 324.3 81.43 338.4C80.49 339.4 79.51 340.3 78.5 341.1C59.98 356.7 32.01 355.5 14.27 337.7C-4.442 319-4.825 288.9 13.55 270.6C22.19 261.9 43.69 255.4 64.05 250.1C77.02 248.2 89.53 246.2 97.94 245C103.3 244.2 107.8 248.7 106.1 254.1V254.1zM561.5 341.1C560.7 340.5 559.1 339.8 559.2 339.1C559 338.9 558.8 338.7 558.6 338.4C544.4 324.3 536.1 275.6 533 254.1C532.2 248.7 536.7 244.2 542.1 245C543.1 245.2 544.2 245.3 545.4 245.5C553.6 246.7 564.6 248.5 575.1 250.1C596.3 255.4 617.8 261.9 626.4 270.6C644.8 288.9 644.4 319 625.7 337.7C607.1 355.5 580 356.7 561.5 341.1L561.5 341.1z\"],\n    \"face-grin-tongue\": [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M256 0C397.4 0 512 114.6 512 256C512 368.9 438.9 464.7 337.5 498.8C346.7 484 352 466.6 352 448V401.1C376.3 383.5 395.6 359.5 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C116.9 359.3 135.1 383.1 160 400.7V448C160 466.6 165.3 484 174.5 498.8C73.07 464.7 0 368.9 0 256C0 114.6 114.6 .0003 256 .0003L256 0zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176zM256 512C220.7 512 192 483.3 192 448V402.6C192 387.9 203.9 376 218.6 376H220.6C231.9 376 241.7 383.9 244.2 394.9C247 407.5 264.1 407.5 267.8 394.9C270.3 383.9 280.1 376 291.4 376H293.4C308.1 376 320 387.9 320 402.6V448C320 483.3 291.3 512 256 512V512z\"],\n    \"face-grin-tongue-squint\": [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M256 0C397.4 0 512 114.6 512 256C512 368.9 438.9 464.7 337.5 498.8C346.7 484 352 466.6 352 448V401.1C376.3 383.5 395.6 359.5 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C116.9 359.3 135.1 383.1 160 400.7V448C160 466.6 165.3 484 174.5 498.8C73.07 464.7 0 368.9 0 256C0 114.6 114.6 .0003 256 .0003L256 0zM118.8 148.8L154.8 192L118.8 235.2C116.1 237.4 116 240.1 116 242.9C116 251.8 125.6 257.6 133.5 253.3L223.4 205.4C234.1 199.7 234.1 184.3 223.4 178.6L133.5 130.7C125.6 126.4 116 132.2 116 141.1C116 143.9 116.1 146.6 118.8 148.8V148.8zM288.6 178.6C277.9 184.3 277.9 199.7 288.6 205.4L378.5 253.3C386.4 257.6 396 251.8 396 242.9C396 240.1 395 237.4 393.2 235.2L357.2 192L393.2 148.8C395 146.6 396 143.9 396 141.1C396 132.2 386.4 126.4 378.5 130.7L288.6 178.6zM256 512C220.7 512 192 483.3 192 448V402.6C192 387.9 203.9 376 218.6 376H220.6C231.9 376 241.7 383.9 244.2 394.9C247 407.5 264.1 407.5 267.8 394.9C270.3 383.9 280.1 376 291.4 376H293.4C308.1 376 320 387.9 320 402.6V448C320 483.3 291.3 512 256 512V512z\"],\n    \"face-grin-tongue-wink\": [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M312 208C312 194.7 322.7 184 336 184C349.3 184 360 194.7 360 208C360 221.3 349.3 232 336 232C322.7 232 312 221.3 312 208zM174.5 498.8C73.07 464.7 0 368.9 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 368.9 438.9 464.7 337.5 498.8C346.7 484 352 466.6 352 448V401.1C376.3 383.5 395.6 359.5 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C116.9 359.3 135.1 383.1 159.1 400.7V448C159.1 466.6 165.3 484 174.5 498.8L174.5 498.8zM217.6 236.8C224.7 231.5 226.1 221.5 220.8 214.4C190.4 173.9 129.6 173.9 99.2 214.4C93.9 221.5 95.33 231.5 102.4 236.8C109.5 242.1 119.5 240.7 124.8 233.6C142.4 210.1 177.6 210.1 195.2 233.6C200.5 240.7 210.5 242.1 217.6 236.8zM336 272C371.3 272 400 243.3 400 208C400 172.7 371.3 144 336 144C300.7 144 272 172.7 272 208C272 243.3 300.7 272 336 272zM320 402.6V448C320 483.3 291.3 512 256 512C220.7 512 192 483.3 192 448V402.6C192 387.9 203.9 376 218.6 376H220.6C231.9 376 241.7 383.9 244.2 394.9C247 407.5 264.1 407.5 267.8 394.9C270.3 383.9 280.1 376 291.4 376H293.4C308.1 376 320 387.9 320 402.6V402.6z\"],\n    \"face-grin-wide\": [512, 512, [128515, \"grin-alt\"], \"f581\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM176 128C158.3 128 144 156.7 144 192C144 227.3 158.3 256 176 256C193.7 256 208 227.3 208 192C208 156.7 193.7 128 176 128zM336 256C353.7 256 368 227.3 368 192C368 156.7 353.7 128 336 128C318.3 128 304 156.7 304 192C304 227.3 318.3 256 336 256z\"],\n    \"face-grin-wink\": [512, 512, [\"grin-wink\"], \"f58c\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256.3 331.8C208.9 331.8 164.1 324.9 124.5 312.8C112.2 309 100.2 319.7 105.2 331.5C130.1 390.6 188.4 432 256.3 432C324.2 432 382.4 390.6 407.4 331.5C412.4 319.7 400.4 309 388.1 312.8C348.4 324.9 303.7 331.8 256.3 331.8H256.3zM393.6 236.8C400.7 231.5 402.1 221.5 396.8 214.4C366.4 173.9 305.6 173.9 275.2 214.4C269.9 221.5 271.3 231.5 278.4 236.8C285.5 242.1 295.5 240.7 300.8 233.6C318.4 210.1 353.6 210.1 371.2 233.6C376.5 240.7 386.5 242.1 393.6 236.8zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240z\"],\n    \"face-kiss\": [512, 512, [128535, \"kiss\"], \"f596\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM287.9 300.3C274.7 292.9 257.4 288 240 288C236.4 288 233.2 290.5 232.3 293.1C231.3 297.5 232.9 301.2 236.1 302.1L236.1 302.1L236.3 303.1L236.8 303.4L237.2 303.7C238 304.1 239.2 304.9 240.6 305.8C243.4 307.6 247.2 310.3 250.8 313.4C254.6 316.5 258 319.1 260.5 323.4C262.1 326.1 264 329.8 264 332C264 334.2 262.1 337 260.5 340.6C258 344 254.6 347.5 250.8 350.6C247.2 353.7 243.4 356.4 240.6 358.2C239.2 359.1 238 359.9 237.2 360.3L236.6 360.7L236.3 360.9L236.1 361L236.1 361C233.6 362.4 232 365.1 232 368C232 370.9 233.6 373.6 236.1 374.1L236.1 374.1L236.3 375.1C236.5 375.2 236.8 375.4 237.2 375.7C238 376.1 239.2 376.9 240.6 377.8C243.4 379.6 247.2 382.3 250.8 385.4C254.6 388.5 258 391.9 260.5 395.4C262.1 398.1 264 401.8 264 403.1C264 406.2 262.1 409 260.5 412.6C258 416 254.6 419.5 250.8 422.6C247.2 425.7 243.4 428.4 240.6 430.2C239.2 431.1 238 431.9 237.2 432.3C236.8 432.6 236.5 432.8 236.3 432.9L236.1 432.1L236.1 433C232.9 434.8 231.3 438.5 232.3 442C233.2 445.5 236.4 447.1 240 447.1C257.4 447.1 274.7 443.1 287.9 435.7C294.5 432 300.4 427.5 304.7 422.3C308.9 417.2 312 410.9 312 403.1C312 397.1 308.9 390.8 304.7 385.7C300.4 380.5 294.5 375.1 287.9 372.3C285.2 370.7 282.3 369.3 279.2 367.1C282.3 366.7 285.2 365.3 287.9 363.7C294.5 360 300.4 355.5 304.7 350.3C308.9 345.2 312 338.9 312 331.1C312 325.1 308.9 318.8 304.7 313.7C300.4 308.5 294.5 303.1 287.9 300.3L287.9 300.3zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-kiss-beam\": [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM287.9 300.3C274.7 292.9 257.4 288 240 288C236.4 288 233.2 290.5 232.3 293.1C231.3 297.5 232.9 301.2 236.1 302.1L236.1 302.1L236.3 303.1L236.8 303.4L237.2 303.7C238 304.1 239.2 304.9 240.6 305.8C243.4 307.6 247.2 310.3 250.8 313.4C254.6 316.5 258 319.1 260.5 323.4C262.1 326.1 264 329.8 264 332C264 334.2 262.1 337 260.5 340.6C258 344 254.6 347.5 250.8 350.6C247.2 353.7 243.4 356.4 240.6 358.2C239.2 359.1 238 359.9 237.2 360.3L236.6 360.7L236.3 360.9L236.1 361L236.1 361C233.6 362.4 232 365.1 232 368C232 370.9 233.6 373.6 236.1 374.1L236.1 374.1L236.3 375.1C236.5 375.2 236.8 375.4 237.2 375.7C238 376.1 239.2 376.9 240.6 377.8C243.4 379.6 247.2 382.3 250.8 385.4C254.6 388.5 258 391.9 260.5 395.4C262.1 398.1 264 401.8 264 403.1C264 406.2 262.1 409 260.5 412.6C258 416 254.6 419.5 250.8 422.6C247.2 425.7 243.4 428.4 240.6 430.2C239.2 431.1 238 431.9 237.2 432.3C236.8 432.6 236.5 432.8 236.3 432.9L236.1 432.1L236.1 433C232.9 434.8 231.3 438.5 232.3 442C233.2 445.5 236.4 447.1 240 447.1C257.4 447.1 274.7 443.1 287.9 435.7C294.5 432 300.4 427.5 304.7 422.3C308.9 417.2 312 410.9 312 403.1C312 397.1 308.9 390.8 304.7 385.7C300.4 380.5 294.5 375.1 287.9 372.3C285.2 370.7 282.3 369.3 279.2 367.1C282.3 366.7 285.2 365.3 287.9 363.7C294.5 360 300.4 355.5 304.7 350.3C308.9 345.2 312 338.9 312 331.1C312 325.1 308.9 318.8 304.7 313.7C300.4 308.5 294.5 303.1 287.9 300.3L287.9 300.3zM226.5 231.6C229.8 230.5 232 227.4 232 224C232 206.1 225.3 188.4 215.4 175.2C205.6 162.2 191.5 152 176 152C160.5 152 146.4 162.2 136.6 175.2C126.7 188.4 120 206.1 120 224C120 227.4 122.2 230.5 125.5 231.6C128.7 232.7 132.3 231.6 134.4 228.8L134.4 228.8L134.6 228.5C134.8 228.3 134.1 228 135.3 227.6C135.1 226.8 136.9 225.7 138.1 224.3C140.6 221.4 144.1 217.7 148.3 213.1C157.1 206.2 167.2 200 176 200C184.8 200 194.9 206.2 203.7 213.1C207.9 217.7 211.4 221.4 213.9 224.3C215.1 225.7 216 226.8 216.7 227.6C217 228 217.2 228.3 217.4 228.5L217.6 228.8L217.6 228.8C219.7 231.6 223.3 232.7 226.5 231.6V231.6zM377.6 228.8C379.7 231.6 383.3 232.7 386.5 231.6C389.8 230.5 392 227.4 392 224C392 206.1 385.3 188.4 375.4 175.2C365.6 162.2 351.5 152 336 152C320.5 152 306.4 162.2 296.6 175.2C286.7 188.4 280 206.1 280 224C280 227.4 282.2 230.5 285.5 231.6C288.7 232.7 292.3 231.6 294.4 228.8L294.4 228.8L294.6 228.5C294.8 228.3 294.1 228 295.3 227.6C295.1 226.8 296.9 225.7 298.1 224.3C300.6 221.4 304.1 217.7 308.3 213.1C317.1 206.2 327.2 200 336 200C344.8 200 354.9 206.2 363.7 213.1C367.9 217.7 371.4 221.4 373.9 224.3C375.1 225.7 376 226.8 376.7 227.6C377 228 377.2 228.3 377.4 228.5L377.6 228.8L377.6 228.8z\"],\n    \"face-kiss-wink-heart\": [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M461.8 334.6C448.1 300.8 411.5 280.3 374.3 290.7C334.2 301.9 312.4 343.8 322.4 382.8L345.3 472.1C347.3 479.7 350.9 486.4 355.7 491.8C325.1 504.8 291.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 285.3 507.1 313.4 498 339.7C486.9 334.1 474.5 333.1 461.8 334.6L461.8 334.6zM296 332C296 325.1 292.9 318.8 288.7 313.7C284.4 308.5 278.5 303.1 271.9 300.3C258.7 292.9 241.4 288 224 288C220.4 288 217.2 290.5 216.3 293.1C215.3 297.5 216.9 301.2 220.1 302.1L220.1 302.1L220.3 303.1C220.5 303.2 220.8 303.4 221.2 303.7C222 304.1 223.2 304.9 224.6 305.8C227.4 307.6 231.2 310.3 234.8 313.4C238.6 316.5 242 319.1 244.5 323.4C246.1 326.1 248 329.8 248 332C248 334.2 246.1 337 244.5 340.6C242 344 238.6 347.5 234.8 350.6C231.2 353.7 227.4 356.4 224.6 358.2C223.2 359.1 222 359.9 221.2 360.3C220.8 360.6 220.5 360.8 220.3 360.9L220.1 361L220.1 361C217.6 362.4 216 365.1 216 368C216 370.9 217.6 373.6 220.1 374.1L220.1 374.1L220.3 375.1L220.6 375.3L221.2 375.7C222 376.1 223.2 376.9 224.6 377.8C227.4 379.6 231.2 382.3 234.8 385.4C238.6 388.5 242 391.9 244.5 395.4C246.1 398.1 248 401.8 248 404C248 406.2 246.1 409 244.5 412.6C242 416 238.6 419.5 234.8 422.6C231.2 425.7 227.4 428.4 224.6 430.2C223.2 431.1 222 431.9 221.2 432.3C220.8 432.6 220.5 432.8 220.3 432.9L220.1 433L220.1 433C216.9 434.8 215.3 438.5 216.3 442C217.2 445.5 220.4 447.1 224 447.1C241.4 447.1 258.7 443.1 271.9 435.7C278.5 432 284.4 427.5 288.7 422.3C292.9 417.2 296 410.9 296 403.1C296 397.1 292.9 390.8 288.7 385.7C284.4 380.5 278.5 375.1 271.9 372.3C269.2 370.7 266.3 369.3 263.2 367.1C266.3 366.7 269.2 365.3 271.9 363.7C278.5 360 284.4 355.5 288.7 350.3C292.9 345.2 296 338.9 296 331.1V332zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM393.6 236.8C400.7 231.5 402.1 221.5 396.8 214.4C366.4 173.9 305.6 173.9 275.2 214.4C269.9 221.5 271.3 231.5 278.4 236.8C285.5 242.1 295.5 240.7 300.8 233.6C318.4 210.1 353.6 210.1 371.2 233.6C376.5 240.7 386.5 242.1 393.6 236.8zM439.4 373.3L459.5 367.6C481.7 361.4 504.6 375.2 510.6 398.4C516.5 421.7 503.3 445.6 481.1 451.8L396.1 475.6C387.5 478 378.6 472.9 376.3 464.2L353.4 374.9C347.5 351.6 360.7 327.7 382.9 321.5C405.2 315.3 428 329.1 433.1 352.3L439.4 373.3z\"],\n    \"face-laugh\": [512, 512, [\"laugh\"], \"f599\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM176.4 160C158.7 160 144.4 174.3 144.4 192C144.4 209.7 158.7 224 176.4 224C194 224 208.4 209.7 208.4 192C208.4 174.3 194 160 176.4 160zM336.4 224C354 224 368.4 209.7 368.4 192C368.4 174.3 354 160 336.4 160C318.7 160 304.4 174.3 304.4 192C304.4 209.7 318.7 224 336.4 224z\"],\n    \"face-laugh-beam\": [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM226.5 215.6C229.8 214.5 232 211.4 232 208C232 190.1 225.3 172.4 215.4 159.2C205.6 146.2 191.5 136 176 136C160.5 136 146.4 146.2 136.6 159.2C126.7 172.4 120 190.1 120 208C120 211.4 122.2 214.5 125.5 215.6C128.7 216.7 132.3 215.6 134.4 212.8L134.4 212.8L134.6 212.5C134.8 212.3 134.1 212 135.3 211.6C135.1 210.8 136.9 209.7 138.1 208.3C140.6 205.4 144.1 201.7 148.3 197.1C157.1 190.2 167.2 184 176 184C184.8 184 194.9 190.2 203.7 197.1C207.9 201.7 211.4 205.4 213.9 208.3C215.1 209.7 216 210.8 216.7 211.6C217 212 217.2 212.3 217.4 212.5L217.6 212.8L217.6 212.8C219.7 215.6 223.3 216.7 226.5 215.6V215.6zM377.6 212.8C379.7 215.6 383.3 216.7 386.5 215.6C389.8 214.5 392 211.4 392 208C392 190.1 385.3 172.4 375.4 159.2C365.6 146.2 351.5 136 336 136C320.5 136 306.4 146.2 296.6 159.2C286.7 172.4 280 190.1 280 208C280 211.4 282.2 214.5 285.5 215.6C288.7 216.7 292.3 215.6 294.4 212.8L294.4 212.8L294.6 212.5C294.8 212.3 294.1 212 295.3 211.6C295.1 210.8 296.9 209.7 298.1 208.3C300.6 205.4 304.1 201.7 308.3 197.1C317.1 190.2 327.2 184 336 184C344.8 184 354.9 190.2 363.7 197.1C367.9 201.7 371.4 205.4 373.9 208.3C375.1 209.7 376 210.8 376.7 211.6C377 212 377.2 212.3 377.4 212.5L377.6 212.8L377.6 212.8z\"],\n    \"face-laugh-squint\": [512, 512, [\"laugh-squint\"], \"f59b\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM133.5 114.7C125.6 110.4 116 116.2 116 125.1C116 127.9 116.1 130.6 118.8 132.8L154.8 176L118.8 219.2C116.1 221.4 116 224.1 116 226.9C116 235.8 125.6 241.6 133.5 237.3L223.4 189.4C234.1 183.7 234.1 168.3 223.4 162.6L133.5 114.7zM396 125.1C396 116.2 386.4 110.4 378.5 114.7L288.6 162.6C277.9 168.3 277.9 183.7 288.6 189.4L378.5 237.3C386.4 241.6 396 235.8 396 226.9C396 224.1 395 221.4 393.2 219.2L357.2 176L393.2 132.8C395 130.6 396 127.9 396 125.1V125.1z\"],\n    \"face-laugh-wink\": [512, 512, [\"laugh-wink\"], \"f59c\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM176.4 160C158.7 160 144.4 174.3 144.4 192C144.4 209.7 158.7 224 176.4 224C194 224 208.4 209.7 208.4 192C208.4 174.3 194 160 176.4 160zM300.8 217.6C318.4 194.1 353.6 194.1 371.2 217.6C376.5 224.7 386.5 226.1 393.6 220.8C400.7 215.5 402.1 205.5 396.8 198.4C366.4 157.9 305.6 157.9 275.2 198.4C269.9 205.5 271.3 215.5 278.4 220.8C285.5 226.1 295.5 224.7 300.8 217.6z\"],\n    \"face-meh\": [512, 512, [128528, \"meh\"], \"f11a\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176zM160 336C151.2 336 144 343.2 144 352C144 360.8 151.2 368 160 368H352C360.8 368 368 360.8 368 352C368 343.2 360.8 336 352 336H160z\"],\n    \"face-meh-blank\": [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-rolling-eyes\": [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM192 368C183.2 368 176 375.2 176 384C176 392.8 183.2 400 192 400H320C328.8 400 336 392.8 336 384C336 375.2 328.8 368 320 368H192zM186.2 165.6C189.8 170.8 192 177.1 192 184C192 201.7 177.7 216 160 216C142.3 216 128 201.7 128 184C128 177.1 130.2 170.8 133.8 165.6C111.5 175.6 96 197.1 96 224C96 259.3 124.7 288 160 288C195.3 288 224 259.3 224 224C224 197.1 208.5 175.6 186.2 165.6zM352 288C387.3 288 416 259.3 416 224C416 197.1 400.5 175.6 378.2 165.6C381.8 170.8 384 177.1 384 184C384 201.7 369.7 216 352 216C334.3 216 320 201.7 320 184C320 177.1 322.2 170.8 325.8 165.6C303.5 175.6 288 197.1 288 224C288 259.3 316.7 288 352 288z\"],\n    \"face-sad-cry\": [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M352 493.4C322.4 505.4 289.9 512 256 512C222.1 512 189.6 505.4 160 493.4V288C160 279.2 152.8 272 144 272C135.2 272 128 279.2 128 288V477.8C51.48 433.5 0 350.8 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 350.8 460.5 433.5 384 477.8V288C384 279.2 376.8 272 368 272C359.2 272 352 279.2 352 288V493.4zM217.6 236.8C224.7 231.5 226.1 221.5 220.8 214.4C190.4 173.9 129.6 173.9 99.2 214.4C93.9 221.5 95.33 231.5 102.4 236.8C109.5 242.1 119.5 240.7 124.8 233.6C142.4 210.1 177.6 210.1 195.2 233.6C200.5 240.7 210.5 242.1 217.6 236.8zM316.8 233.6C334.4 210.1 369.6 210.1 387.2 233.6C392.5 240.7 402.5 242.1 409.6 236.8C416.7 231.5 418.1 221.5 412.8 214.4C382.4 173.9 321.6 173.9 291.2 214.4C285.9 221.5 287.3 231.5 294.4 236.8C301.5 242.1 311.5 240.7 316.8 233.6zM208 368C208 394.5 229.5 416 256 416C282.5 416 304 394.5 304 368V336C304 309.5 282.5 288 256 288C229.5 288 208 309.5 208 336V368z\"],\n    \"face-sad-tear\": [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0zM256 352C290.9 352 323.2 367.8 348.3 394.9C354.3 401.4 364.4 401.7 370.9 395.7C377.4 389.7 377.7 379.6 371.7 373.1C341.6 340.5 301 320 256 320C247.2 320 240 327.2 240 336C240 344.8 247.2 352 256 352H256zM208 369C208 349 179.6 308.6 166.4 291.3C163.2 286.9 156.8 286.9 153.6 291.3C140.6 308.6 112 349 112 369C112 395 133.5 416 160 416C186.5 416 208 395 208 369H208zM303.6 208C303.6 225.7 317.1 240 335.6 240C353.3 240 367.6 225.7 367.6 208C367.6 190.3 353.3 176 335.6 176C317.1 176 303.6 190.3 303.6 208zM207.6 208C207.6 190.3 193.3 176 175.6 176C157.1 176 143.6 190.3 143.6 208C143.6 225.7 157.1 240 175.6 240C193.3 240 207.6 225.7 207.6 208z\"],\n    \"face-smile\": [512, 512, [128578, \"smile\"], \"f118\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM164.1 325.5C158.3 318.8 148.2 318.1 141.5 323.9C134.8 329.7 134.1 339.8 139.9 346.5C162.1 372.1 200.9 400 255.1 400C311.1 400 349.8 372.1 372.1 346.5C377.9 339.8 377.2 329.7 370.5 323.9C363.8 318.1 353.7 318.8 347.9 325.5C329.9 346.2 299.4 368 255.1 368C212.6 368 182 346.2 164.1 325.5H164.1zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240z\"],\n    \"face-smile-beam\": [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM164.1 325.5C158.3 318.8 148.2 318.1 141.5 323.9C134.8 329.7 134.1 339.8 139.9 346.5C162.1 372.1 200.9 400 255.1 400C311.1 400 349.8 372.1 372.1 346.5C377.9 339.8 377.2 329.7 370.5 323.9C363.8 318.1 353.7 318.8 347.9 325.5C329.9 346.2 299.4 368 255.1 368C212.6 368 182 346.2 164.1 325.5H164.1zM226.5 231.6C229.8 230.5 232 227.4 232 224C232 206.1 225.3 188.4 215.4 175.2C205.6 162.2 191.5 152 176 152C160.5 152 146.4 162.2 136.6 175.2C126.7 188.4 120 206.1 120 224C120 227.4 122.2 230.5 125.5 231.6C128.7 232.7 132.3 231.6 134.4 228.8L134.4 228.8L134.6 228.5C134.8 228.3 134.1 228 135.3 227.6C135.1 226.8 136.9 225.7 138.1 224.3C140.6 221.4 144.1 217.7 148.3 213.1C157.1 206.2 167.2 200 176 200C184.8 200 194.9 206.2 203.7 213.1C207.9 217.7 211.4 221.4 213.9 224.3C215.1 225.7 216 226.8 216.7 227.6C217 228 217.2 228.3 217.4 228.5L217.6 228.8L217.6 228.8C219.7 231.6 223.3 232.7 226.5 231.6V231.6zM377.6 228.8C379.7 231.6 383.3 232.7 386.5 231.6C389.8 230.5 392 227.4 392 224C392 206.1 385.3 188.4 375.4 175.2C365.6 162.2 351.5 152 336 152C320.5 152 306.4 162.2 296.6 175.2C286.7 188.4 280 206.1 280 224C280 227.4 282.2 230.5 285.5 231.6C288.7 232.7 292.3 231.6 294.4 228.8L294.4 228.8L294.6 228.5C294.8 228.3 294.1 228 295.3 227.6C295.1 226.8 296.9 225.7 298.1 224.3C300.6 221.4 304.1 217.7 308.3 213.1C317.1 206.2 327.2 200 336 200C344.8 200 354.9 206.2 363.7 213.1C367.9 217.7 371.4 221.4 373.9 224.3C375.1 225.7 376 226.8 376.7 227.6C377 228 377.2 228.3 377.4 228.5L377.6 228.8L377.6 228.8z\"],\n    \"face-smile-wink\": [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM164.1 325.5C158.3 318.8 148.2 318.1 141.5 323.9C134.8 329.7 134.1 339.8 139.9 346.5C162.1 372.1 200.9 400 255.1 400C311.1 400 349.8 372.1 372.1 346.5C377.9 339.8 377.2 329.7 370.5 323.9C363.8 318.1 353.7 318.8 347.9 325.5C329.9 346.2 299.4 368 255.1 368C212.6 368 182 346.2 164.1 325.5H164.1zM176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176zM300.8 233.6C318.4 210.1 353.6 210.1 371.2 233.6C376.5 240.7 386.5 242.1 393.6 236.8C400.7 231.5 402.1 221.5 396.8 214.4C366.4 173.9 305.6 173.9 275.2 214.4C269.9 221.5 271.3 231.5 278.4 236.8C285.5 242.1 295.5 240.7 300.8 233.6z\"],\n    \"face-surprise\": [512, 512, [128558, \"surprise\"], \"f5c2\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM176.4 240C194 240 208.4 225.7 208.4 208C208.4 190.3 194 176 176.4 176C158.7 176 144.4 190.3 144.4 208C144.4 225.7 158.7 240 176.4 240zM336.4 176C318.7 176 304.4 190.3 304.4 208C304.4 225.7 318.7 240 336.4 240C354 240 368.4 225.7 368.4 208C368.4 190.3 354 176 336.4 176zM256 416C291.3 416 320 387.3 320 352C320 316.7 291.3 288 256 288C220.7 288 192 316.7 192 352C192 387.3 220.7 416 256 416z\"],\n    \"face-tired\": [512, 512, [128555, \"tired\"], \"f5c8\", \"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM138.3 364.1C132.2 375.8 128 388.4 128 400C128 405.2 130.6 410.2 134.9 413.2C139.2 416.1 144.7 416.8 149.6 414.1L170.2 407.3C197.1 397.2 225.6 392 254.4 392H257.6C286.4 392 314.9 397.2 341.8 407.3L362.4 414.1C367.3 416.8 372.8 416.1 377.1 413.2C381.4 410.2 384 405.2 384 400C384 388.4 379.8 375.8 373.7 364.1C367.4 352.1 358.4 339.8 347.3 328.7C325.3 306.7 293.4 287.1 256 287.1C218.6 287.1 186.7 306.7 164.7 328.7C153.6 339.8 144.6 352.1 138.3 364.1H138.3zM133.5 146.7C125.6 142.4 116 148.2 116 157.1C116 159.9 116.1 162.6 118.8 164.8L154.8 208L118.8 251.2C116.1 253.4 116 256.1 116 258.9C116 267.8 125.6 273.6 133.5 269.3L223.4 221.4C234.1 215.7 234.1 200.3 223.4 194.6L133.5 146.7zM396 157.1C396 148.2 386.4 142.4 378.5 146.7L288.6 194.6C277.9 200.3 277.9 215.7 288.6 221.4L378.5 269.3C386.4 273.6 396 267.8 396 258.9C396 256.1 395 253.4 393.2 251.2L357.2 208L393.2 164.8C395 162.6 396 159.9 396 157.1V157.1z\"],\n    \"fan\": [512, 512, [], \"f863\", \"M352.6 127.1c-28.12 0-54.13 4.5-77.13 12.88l12.38-123.1c1.125-10.5-8.125-18.88-18.5-17.63C189.6 10.12 127.1 77.62 127.1 159.4c0 28.12 4.5 54.13 12.88 77.13L17.75 224.1c-10.5-1.125-18.88 8.125-17.63 18.5c9.1 79.75 77.5 141.4 159.3 141.4c28.12 0 54.13-4.5 77.13-12.88l-12.38 123.1c-1.125 10.38 8.125 18.88 18.5 17.63c79.75-10 141.4-77.5 141.4-159.3c0-28.12-4.5-54.13-12.88-77.13l123.1 12.38c10.5 1.125 18.88-8.125 17.63-18.5C501.9 189.6 434.4 127.1 352.6 127.1zM255.1 287.1c-17.62 0-31.1-14.38-31.1-32s14.37-32 31.1-32s31.1 14.38 31.1 32S273.6 287.1 255.1 287.1z\"],\n    \"faucet\": [512, 512, [], \"e005\", \"M352 256h-38.54C297.7 242.5 277.9 232.9 256 228V180.5L224 177L192 180.5V228C170.1 233 150.3 242.6 134.5 256H16C7.125 256 0 263.1 0 272v96C0 376.9 7.125 384 16 384h92.78C129.4 421.8 173 448 224 448s94.59-26.25 115.2-64H352c17.62 0 32 14.29 32 31.91S398.4 448 416 448h64c17.62 0 32-14.31 32-31.94C512 327.7 440.4 256 352 256zM81.63 159.9L224 144.9l142.4 15C375.9 160.9 384 153.1 384 143.1V112.9c0-10-8.125-17.74-17.62-16.74L256 107.8V80C256 71.12 248.9 64 240 64h-32C199.1 64 192 71.12 192 80v27.75L81.63 96.14C72.13 95.14 64 102.9 64 112.9v30.24C64 153.1 72.13 160.9 81.63 159.9z\"],\n    \"fax\": [512, 512, [128439, 128224], \"f1ac\", \"M192 64h197.5L416 90.51V160h64V77.25c0-8.484-3.375-16.62-9.375-22.62l-45.25-45.25C419.4 3.375 411.2 0 402.8 0H160C142.3 0 128 14.33 128 32v128h64V64zM64 128H32C14.38 128 0 142.4 0 160v320c0 17.62 14.38 32 32 32h32c17.62 0 32-14.38 32-32V160C96 142.4 81.63 128 64 128zM480 192H128v288c0 17.6 14.4 32 32 32h320c17.6 0 32-14.4 32-32V224C512 206.4 497.6 192 480 192zM288 432c0 8.875-7.125 16-16 16h-32C231.1 448 224 440.9 224 432v-32C224 391.1 231.1 384 240 384h32c8.875 0 16 7.125 16 16V432zM288 304c0 8.875-7.125 16-16 16h-32C231.1 320 224 312.9 224 304v-32C224 263.1 231.1 256 240 256h32C280.9 256 288 263.1 288 272V304zM416 432c0 8.875-7.125 16-16 16h-32c-8.875 0-16-7.125-16-16v-32c0-8.875 7.125-16 16-16h32c8.875 0 16 7.125 16 16V432zM416 304c0 8.875-7.125 16-16 16h-32C359.1 320 352 312.9 352 304v-32C352 263.1 359.1 256 368 256h32C408.9 256 416 263.1 416 272V304z\"],\n    \"feather\": [512, 512, [129718], \"f52d\", \"M483.4 244.2L351.9 287.1h97.74c-9.874 10.62 3.75-3.125-46.24 46.87l-147.6 49.12h98.24c-74.99 73.12-194.6 70.62-246.8 54.1l-66.14 65.99c-9.374 9.374-24.6 9.374-33.98 0s-9.374-24.6 0-33.98l259.5-259.2c6.249-6.25 6.249-16.37 0-22.62c-6.249-6.249-16.37-6.249-22.62 0l-178.4 178.2C58.78 306.1 68.61 216.7 129.1 156.3l85.74-85.68c90.62-90.62 189.8-88.27 252.3-25.78C517.8 95.34 528.9 169.7 483.4 244.2z\"],\n    \"feather-pointed\": [512, 512, [\"feather-alt\"], \"f56b\", \"M467.1 241.1L351.1 288h94.34c-7.711 14.85-16.29 29.28-25.87 43.01l-132.5 52.99h85.65c-59.34 52.71-144.1 80.34-264.5 52.82l-68.13 68.13c-9.38 9.38-24.56 9.374-33.94 0c-9.375-9.375-9.375-24.56 0-33.94l253.4-253.4c4.846-6.275 4.643-15.19-1.113-20.95c-6.25-6.25-16.38-6.25-22.62 0l-168.6 168.6C24.56 58 366.9 8.118 478.9 .0846c18.87-1.354 34.41 14.19 33.05 33.05C508.7 78.53 498.5 161.8 467.1 241.1z\"],\n    \"file\": [384, 512, [128459, 61462, 128196], \"f15b\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128z\"],\n    \"file-arrow-down\": [384, 512, [\"file-download\"], \"f56d\", \"M384 128h-128V0L384 128zM256 160H384v304c0 26.51-21.49 48-48 48h-288C21.49 512 0 490.5 0 464v-416C0 21.49 21.49 0 48 0H224l.0039 128C224 145.7 238.3 160 256 160zM255 295L216 334.1V232c0-13.25-10.75-24-24-24S168 218.8 168 232v102.1L128.1 295C124.3 290.3 118.2 288 112 288S99.72 290.3 95.03 295c-9.375 9.375-9.375 24.56 0 33.94l80 80c9.375 9.375 24.56 9.375 33.94 0l80-80c9.375-9.375 9.375-24.56 0-33.94S264.4 285.7 255 295z\"],\n    \"file-arrow-up\": [384, 512, [\"file-upload\"], \"f574\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM288.1 344.1C284.3 349.7 278.2 352 272 352s-12.28-2.344-16.97-7.031L216 305.9V408c0 13.25-10.75 24-24 24s-24-10.75-24-24V305.9l-39.03 39.03c-9.375 9.375-24.56 9.375-33.94 0s-9.375-24.56 0-33.94l80-80c9.375-9.375 24.56-9.375 33.94 0l80 80C298.3 320.4 298.3 335.6 288.1 344.1z\"],\n    \"file-audio\": [384, 512, [], \"f1c7\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM176 404c0 10.75-12.88 15.98-20.5 8.484L120 376H76C69.38 376 64 370.6 64 364v-56C64 301.4 69.38 296 76 296H120l35.5-36.5C163.1 251.9 176 257.3 176 268V404zM224 387.8c-4.391 0-8.75-1.835-11.91-5.367c-5.906-6.594-5.359-16.69 1.219-22.59C220.2 353.7 224 345.2 224 336s-3.797-17.69-10.69-23.88c-6.578-5.906-7.125-16-1.219-22.59c5.922-6.594 16.05-7.094 22.59-1.219C248.2 300.5 256 317.8 256 336s-7.766 35.53-21.31 47.69C231.6 386.4 227.8 387.8 224 387.8zM320 336c0 41.81-20.5 81.11-54.84 105.1c-2.781 1.938-5.988 2.875-9.145 2.875c-5.047 0-10.03-2.375-13.14-6.844c-5.047-7.25-3.281-17.22 3.969-22.28C272.6 396.9 288 367.4 288 336s-15.38-60.84-41.14-78.8c-7.25-5.062-9.027-15.03-3.98-22.28c5.047-7.281 14.99-9.062 22.27-3.969C299.5 254.9 320 294.2 320 336zM256 0v128h128L256 0z\"],\n    \"file-code\": [384, 512, [], \"f1c9\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM154.1 353.8c7.812 7.812 7.812 20.5 0 28.31C150.2 386.1 145.1 388 140 388s-10.23-1.938-14.14-5.844l-48-48c-7.812-7.812-7.812-20.5 0-28.31l48-48c7.812-7.812 20.47-7.812 28.28 0s7.812 20.5 0 28.31L120.3 320L154.1 353.8zM306.1 305.8c7.812 7.812 7.812 20.5 0 28.31l-48 48C254.2 386.1 249.1 388 244 388s-10.23-1.938-14.14-5.844c-7.812-7.812-7.812-20.5 0-28.31L263.7 320l-33.86-33.84c-7.812-7.812-7.812-20.5 0-28.31s20.47-7.812 28.28 0L306.1 305.8zM256 0v128h128L256 0z\"],\n    \"file-contract\": [384, 512, [], \"f56c\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM64 72C64 67.63 67.63 64 72 64h80C156.4 64 160 67.63 160 72v16C160 92.38 156.4 96 152 96h-80C67.63 96 64 92.38 64 88V72zM64 136C64 131.6 67.63 128 72 128h80C156.4 128 160 131.6 160 136v16C160 156.4 156.4 160 152 160h-80C67.63 160 64 156.4 64 152V136zM304 384c8.875 0 16 7.125 16 16S312.9 416 304 416h-47.25c-16.38 0-31.25-9.125-38.63-23.88c-2.875-5.875-8-6.5-10.12-6.5s-7.25 .625-10 6.125l-7.75 15.38C187.6 412.6 181.1 416 176 416H174.9c-6.5-.5-12-4.75-14-11L144 354.6L133.4 386.5C127.5 404.1 111 416 92.38 416H80C71.13 416 64 408.9 64 400S71.13 384 80 384h12.38c4.875 0 9.125-3.125 10.62-7.625l18.25-54.63C124.5 311.9 133.6 305.3 144 305.3s19.5 6.625 22.75 16.5l13.88 41.63c19.75-16.25 54.13-9.75 66 14.12c2 4 6 6.5 10.12 6.5H304z\"],\n    \"file-csv\": [384, 512, [], \"f6dd\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM128 280C128 284.4 124.4 288 120 288H112C103.1 288 96 295.1 96 304v32C96 344.9 103.1 352 112 352h8C124.4 352 128 355.6 128 360v16C128 380.4 124.4 384 120 384H112C85.5 384 64 362.5 64 336v-32C64 277.5 85.5 256 112 256h8C124.4 256 128 259.6 128 264V280zM172.3 384H160c-4.375 0-8-3.625-8-8v-16C152 355.6 155.6 352 160 352h12.25c6 0 10.38-3.5 10.38-6.625c0-1.25-.75-2.625-2.125-3.875l-21.88-18.75C150.3 315.5 145.4 305.3 145.4 294.6C145.4 273.4 164.4 256 187.8 256H200c4.375 0 8 3.625 8 8v16C208 284.4 204.4 288 200 288H187.8c-6 0-10.38 3.5-10.38 6.625c0 1.25 .75 2.625 2.125 3.875l21.88 18.75c8.375 7.25 13.25 17.5 13.25 28.12C214.6 366.6 195.6 384 172.3 384zM288 284.8V264C288 259.6 291.6 256 296 256h16C316.4 256 320 259.6 320 264v20.75c0 35.5-12.88 69-36.25 94.13C280.8 382.1 276.5 384 272 384s-8.75-1.875-11.75-5.125C236.9 353.8 224 320.3 224 284.8V264C224 259.6 227.6 256 232 256h16C252.4 256 256 259.6 256 264v20.75c0 20.38 5.75 40.25 16 56.88C282.3 325 288 305.1 288 284.8z\"],\n    \"file-excel\": [384, 512, [], \"f1c3\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM272.1 264.4L224 344l48.99 79.61C279.6 434.3 271.9 448 259.4 448h-26.43c-5.557 0-10.71-2.883-13.63-7.617L192 396l-27.31 44.38C161.8 445.1 156.6 448 151.1 448H124.6c-12.52 0-20.19-13.73-13.63-24.39L160 344L111 264.4C104.4 253.7 112.1 240 124.6 240h26.43c5.557 0 10.71 2.883 13.63 7.613L192 292l27.31-44.39C222.2 242.9 227.4 240 232.9 240h26.43C271.9 240 279.6 253.7 272.1 264.4zM256 0v128h128L256 0z\"],\n    \"file-export\": [576, 512, [\"arrow-right-from-file\"], \"f56e\", \"M192 312C192 298.8 202.8 288 216 288H384V160H256c-17.67 0-32-14.33-32-32L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48v-128H216C202.8 336 192 325.3 192 312zM256 0v128h128L256 0zM568.1 295l-80-80c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94L494.1 288H384v48h110.1l-39.03 39.03C450.3 379.7 448 385.8 448 392s2.344 12.28 7.031 16.97c9.375 9.375 24.56 9.375 33.94 0l80-80C578.3 319.6 578.3 304.4 568.1 295z\"],\n    \"file-image\": [384, 512, [128443], \"f1c5\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM96 224c17.67 0 32 14.33 32 32S113.7 288 96 288S64 273.7 64 256S78.33 224 96 224zM318.1 439.5C315.3 444.8 309.9 448 304 448h-224c-5.9 0-11.32-3.248-14.11-8.451c-2.783-5.201-2.479-11.52 .7949-16.42l53.33-80C122.1 338.7 127.1 336 133.3 336s10.35 2.674 13.31 7.125L160 363.2l45.35-68.03C208.3 290.7 213.3 288 218.7 288s10.35 2.674 13.31 7.125l85.33 128C320.6 428 320.9 434.3 318.1 439.5zM256 0v128h128L256 0z\"],\n    \"file-import\": [512, 512, [\"arrow-right-to-file\"], \"f56f\", \"M384 0v128h128L384 0zM352 128L352 0H176C149.5 0 128 21.49 128 48V288h174.1l-39.03-39.03c-9.375-9.375-9.375-24.56 0-33.94s24.56-9.375 33.94 0l80 80c9.375 9.375 9.375 24.56 0 33.94l-80 80c-9.375 9.375-24.56 9.375-33.94 0C258.3 404.3 256 398.2 256 392s2.344-12.28 7.031-16.97L302.1 336H128v128C128 490.5 149.5 512 176 512h288c26.51 0 48-21.49 48-48V160h-127.1C366.3 160 352 145.7 352 128zM24 288C10.75 288 0 298.7 0 312c0 13.25 10.75 24 24 24H128V288H24z\"],\n    \"file-invoice\": [384, 512, [], \"f570\", \"M256 0v128h128L256 0zM288 256H96v64h192V256zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM64 72C64 67.63 67.63 64 72 64h80C156.4 64 160 67.63 160 72v16C160 92.38 156.4 96 152 96h-80C67.63 96 64 92.38 64 88V72zM64 136C64 131.6 67.63 128 72 128h80C156.4 128 160 131.6 160 136v16C160 156.4 156.4 160 152 160h-80C67.63 160 64 156.4 64 152V136zM320 440c0 4.375-3.625 8-8 8h-80C227.6 448 224 444.4 224 440v-16c0-4.375 3.625-8 8-8h80c4.375 0 8 3.625 8 8V440zM320 240v96c0 8.875-7.125 16-16 16h-224C71.13 352 64 344.9 64 336v-96C64 231.1 71.13 224 80 224h224C312.9 224 320 231.1 320 240z\"],\n    \"file-invoice-dollar\": [384, 512, [], \"f571\", \"M384 128h-128V0L384 128zM256 160H384v304c0 26.51-21.49 48-48 48h-288C21.49 512 0 490.5 0 464v-416C0 21.49 21.49 0 48 0H224l.0039 128C224 145.7 238.3 160 256 160zM64 88C64 92.38 67.63 96 72 96h80C156.4 96 160 92.38 160 88v-16C160 67.63 156.4 64 152 64h-80C67.63 64 64 67.63 64 72V88zM72 160h80C156.4 160 160 156.4 160 152v-16C160 131.6 156.4 128 152 128h-80C67.63 128 64 131.6 64 136v16C64 156.4 67.63 160 72 160zM197.5 316.8L191.1 315.2C168.3 308.2 168.8 304.1 169.6 300.5c1.375-7.812 16.59-9.719 30.27-7.625c5.594 .8438 11.73 2.812 17.59 4.844c10.39 3.594 21.83-1.938 25.45-12.34c3.625-10.44-1.891-21.84-12.33-25.47c-7.219-2.484-13.11-4.078-18.56-5.273V248c0-11.03-8.953-20-20-20s-20 8.969-20 20v5.992C149.6 258.8 133.8 272.8 130.2 293.7c-7.406 42.84 33.19 54.75 50.52 59.84l5.812 1.688c29.28 8.375 28.8 11.19 27.92 16.28c-1.375 7.812-16.59 9.75-30.31 7.625c-6.938-1.031-15.81-4.219-23.66-7.031l-4.469-1.625c-10.41-3.594-21.83 1.812-25.52 12.22c-3.672 10.41 1.781 21.84 12.2 25.53l4.266 1.5c7.758 2.789 16.38 5.59 25.06 7.512V424c0 11.03 8.953 20 20 20s20-8.969 20-20v-6.254c22.36-4.793 38.21-18.53 41.83-39.43C261.3 335 219.8 323.1 197.5 316.8z\"],\n    \"file-lines\": [384, 512, [128462, 61686, 128441, \"file-alt\", \"file-text\"], \"f15c\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM272 416h-160C103.2 416 96 408.8 96 400C96 391.2 103.2 384 112 384h160c8.836 0 16 7.162 16 16C288 408.8 280.8 416 272 416zM272 352h-160C103.2 352 96 344.8 96 336C96 327.2 103.2 320 112 320h160c8.836 0 16 7.162 16 16C288 344.8 280.8 352 272 352zM288 272C288 280.8 280.8 288 272 288h-160C103.2 288 96 280.8 96 272C96 263.2 103.2 256 112 256h160C280.8 256 288 263.2 288 272z\"],\n    \"file-medical\": [384, 512, [], \"f477\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM288 301.7v36.57C288 345.9 281.9 352 274.3 352L224 351.1v50.29C224 409.9 217.9 416 210.3 416H173.7C166.1 416 160 409.9 160 402.3V351.1L109.7 352C102.1 352 96 345.9 96 338.3V301.7C96 294.1 102.1 288 109.7 288H160V237.7C160 230.1 166.1 224 173.7 224h36.57C217.9 224 224 230.1 224 237.7V288h50.29C281.9 288 288 294.1 288 301.7z\"],\n    \"file-pdf\": [384, 512, [], \"f1c1\", \"M184 208c0-4.406-3.594-8-8-8S168 203.6 168 208c0 2.062 .2969 23.31 9.141 50.25C179.1 249.6 184 226.2 184 208zM256 0v128h128L256 0zM80 422.4c0 9.656 10.47 11.97 14.38 6.375C99.27 421.9 108.8 408 120.1 388.6c-14.22 7.969-27.25 17.31-38.02 28.31C80.75 418.3 80 420.3 80 422.4zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM292 312c24.26 0 44 19.74 44 44c0 24.67-18.94 44-43.13 44c-5.994 0-11.81-.9531-17.22-2.805c-20.06-6.758-38.38-15.96-54.55-27.39c-23.88 5.109-45.46 11.52-64.31 19.1c-14.43 26.31-27.63 46.15-36.37 58.41C112.1 457.8 100.8 464 87.94 464C65.92 464 48 446.1 48 424.1c0-11.92 3.74-21.82 11.18-29.51c16.18-16.52 37.37-30.99 63.02-43.05c11.75-22.83 21.94-46.04 30.33-69.14C136.2 242.4 136 208.4 136 208c0-22.05 17.95-40 40-40c22.06 0 40 17.95 40 40c0 24.1-7.227 55.75-8.938 62.63c-1.006 3.273-2.035 6.516-3.082 9.723c7.83 14.46 17.7 27.21 29.44 38.05C263.1 313.4 284.3 312.1 287.6 312H292zM156.5 354.6c17.98-6.5 36.13-11.44 52.92-15.19c-12.42-12.06-22.17-25.12-29.8-38.16C172.3 320.6 164.4 338.5 156.5 354.6zM292.9 368C299 368 304 363 304 356.9C304 349.4 298.6 344 292 344H288c-.3438 .0313-16.83 .9687-40.95 4.75c11.27 7 24.12 13.19 38.84 18.12C288 367.6 290.5 368 292.9 368z\"],\n    \"file-powerpoint\": [384, 512, [], \"f1c4\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM279.6 308.1C284.2 353.5 248.5 392 204 392H160v40C160 440.8 152.8 448 144 448H128c-8.836 0-16-7.164-16-16V256c0-8.836 7.164-16 16-16h71.51C239.3 240 275.6 268.5 279.6 308.1zM160 344h44c15.44 0 28-12.56 28-28S219.4 288 204 288H160V344z\"],\n    \"file-prescription\": [384, 512, [], \"f572\", \"M176 240H128v32h48C184.9 272 192 264.9 192 256S184.9 240 176 240zM256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM292.5 315.5l11.38 11.25c6.25 6.25 6.25 16.38 0 22.62l-29.88 30L304 409.4c6.25 6.25 6.25 16.38 0 22.62l-11.25 11.38c-6.25 6.25-16.5 6.25-22.75 0L240 413.3l-30 30c-6.249 6.25-16.48 6.266-22.73 .0156L176 432c-6.25-6.25-6.25-16.38 0-22.62l29.1-30.12L146.8 320H128l.0078 48.01c0 8.875-7.125 16-16 16L96 384c-8.875 0-16-7.125-16-16v-160C80 199.1 87.13 192 96 192h80c35.38 0 64 28.62 64 64c0 24.25-13.62 45-33.5 55.88L240 345.4l29.88-29.88C276.1 309.3 286.3 309.3 292.5 315.5z\"],\n    \"file-signature\": [576, 512, [], \"f573\", \"M292.7 342.3C289.7 345.3 288 349.4 288 353.7V416h62.34c4.264 0 8.35-1.703 11.35-4.727l156.9-158l-67.88-67.88L292.7 342.3zM568.5 167.4L536.6 135.5c-9.875-10-26-10-36 0l-27.25 27.25l67.88 67.88l27.25-27.25C578.5 193.4 578.5 177.3 568.5 167.4zM256 0v128h128L256 0zM256 448c-16.07-.2852-30.62-9.359-37.88-23.88c-2.875-5.875-8-6.5-10.12-6.5s-7.25 .625-10 6.125l-7.749 15.38C187.6 444.6 181.1 448 176 448H174.9c-6.5-.5-12-4.75-14-11L144 386.6L133.4 418.5C127.5 436.1 111 448 92.45 448H80C71.13 448 64 440.9 64 432S71.13 416 80 416h12.4c4.875 0 9.102-3.125 10.6-7.625l18.25-54.63C124.5 343.9 133.6 337.3 144 337.3s19.5 6.625 22.75 16.5l13.88 41.63c19.75-16.25 54.13-9.75 66 14.12C248.5 413.2 252.2 415.6 256 415.9V347c0-8.523 3.402-16.7 9.451-22.71L384 206.5V160H256c-17.67 0-32-14.33-32-32L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V448H256z\"],\n    \"file-video\": [384, 512, [], \"f1c8\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM224 384c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32V288c0-17.67 14.33-32 32-32h96c17.67 0 32 14.33 32 32V384zM320 284.9v102.3c0 12.57-13.82 20.23-24.48 13.57L256 376v-80l39.52-24.7C306.2 264.6 320 272.3 320 284.9z\"],\n    \"file-waveform\": [448, 512, [\"file-medical-alt\"], \"f478\", \"M320 0v128h128L320 0zM288 128L288 0H112C85.49 0 64 21.49 64 48V224H16C7.164 224 0 231.2 0 240v32C0 280.8 7.164 288 16 288h128c6.062 0 11.59 3.438 14.31 8.844L176 332.2l49.69-99.38c5.438-10.81 23.19-10.81 28.62 0L281.9 288H352c8.844 0 16 7.156 16 16S360.8 320 352 320h-80c-6.062 0-11.59-3.438-14.31-8.844L240 275.8l-49.69 99.38C187.6 380.6 182.1 384 176 384s-11.59-3.438-14.31-8.844L134.1 320H64v144C64 490.5 85.49 512 112 512h288c26.51 0 48-21.49 48-48V160h-127.1C302.3 160 288 145.7 288 128z\"],\n    \"file-word\": [384, 512, [], \"f1c2\", \"M224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM281.5 240h23.37c7.717 0 13.43 7.18 11.69 14.7l-42.46 184C272.9 444.1 268 448 262.5 448h-29.26c-5.426 0-10.18-3.641-11.59-8.883L192 329.1l-29.61 109.1C160.1 444.4 156.2 448 150.8 448H121.5c-5.588 0-10.44-3.859-11.69-9.305l-42.46-184C65.66 247.2 71.37 240 79.08 240h23.37c5.588 0 10.44 3.859 11.69 9.301L137.8 352L165.6 248.9C167 243.6 171.8 240 177.2 240h29.61c5.426 0 10.18 3.641 11.59 8.883L246.2 352l23.7-102.7C271.1 243.9 275.1 240 281.5 240zM256 0v128h128L256 0z\"],\n    \"file-zipper\": [384, 512, [\"file-archive\"], \"f1c6\", \"M256 0v128h128L256 0zM224 128L224 0H48C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48V160h-127.1C238.3 160 224 145.7 224 128zM96 32h64v32H96V32zM96 96h64v32H96V96zM96 160h64v32H96V160zM128.3 415.1c-40.56 0-70.76-36.45-62.83-75.45L96 224h64l30.94 116.9C198.7 379.7 168.5 415.1 128.3 415.1zM144 336h-32C103.2 336 96 343.2 96 352s7.164 16 16 16h32C152.8 368 160 360.8 160 352S152.8 336 144 336z\"],\n    \"fill\": [512, 512, [], \"f575\", \"M168 90.74L221.1 37.66C249.2 9.539 294.8 9.539 322.9 37.66L474.3 189.1C502.5 217.2 502.5 262.8 474.3 290.9L283.9 481.4C246.4 518.9 185.6 518.9 148.1 481.4L30.63 363.9C-6.863 326.4-6.863 265.6 30.63 228.1L122.7 135.1L41.37 54.63C28.88 42.13 28.88 21.87 41.37 9.372C53.87-3.124 74.13-3.124 86.63 9.372L168 90.74zM75.88 273.4C71.69 277.6 68.9 282.6 67.52 287.1H386.7L429.1 245.7C432.2 242.5 432.2 237.5 429.1 234.3L277.7 82.91C274.5 79.79 269.5 79.79 266.3 82.91L213.3 136L262.6 185.4C275.1 197.9 275.1 218.1 262.6 230.6C250.1 243.1 229.9 243.1 217.4 230.6L168 181.3L75.88 273.4z\"],\n    \"fill-drip\": [576, 512, [], \"f576\", \"M41.37 9.372C53.87-3.124 74.13-3.124 86.63 9.372L168 90.74L221.1 37.66C249.2 9.539 294.8 9.539 322.9 37.66L474.3 189.1C502.5 217.2 502.5 262.8 474.3 290.9L283.9 481.4C246.4 518.9 185.6 518.9 148.1 481.4L30.63 363.9C-6.863 326.4-6.863 265.6 30.63 228.1L122.7 135.1L41.37 54.63C28.88 42.13 28.88 21.87 41.37 9.372V9.372zM217.4 230.6L168 181.3L75.88 273.4C71.69 277.6 68.9 282.6 67.52 288H386.7L429.1 245.7C432.2 242.5 432.2 237.5 429.1 234.3L277.7 82.91C274.5 79.79 269.5 79.79 266.3 82.91L213.3 136L262.6 185.4C275.1 197.9 275.1 218.1 262.6 230.6C250.1 243.1 229.9 243.1 217.4 230.6L217.4 230.6zM448 448C448 422.8 480.6 368.4 499.2 339.3C505.3 329.9 518.7 329.9 524.8 339.3C543.4 368.4 576 422.8 576 448C576 483.3 547.3 512 512 512C476.7 512 448 483.3 448 448H448z\"],\n    \"film\": [512, 512, [127902], \"f008\", \"M463.1 32h-416C21.49 32-.0001 53.49-.0001 80v352c0 26.51 21.49 48 47.1 48h416c26.51 0 48-21.49 48-48v-352C511.1 53.49 490.5 32 463.1 32zM111.1 408c0 4.418-3.582 8-8 8H55.1c-4.418 0-8-3.582-8-8v-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8L111.1 408zM111.1 280c0 4.418-3.582 8-8 8H55.1c-4.418 0-8-3.582-8-8v-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8V280zM111.1 152c0 4.418-3.582 8-8 8H55.1c-4.418 0-8-3.582-8-8v-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8L111.1 152zM351.1 400c0 8.836-7.164 16-16 16H175.1c-8.836 0-16-7.164-16-16v-96c0-8.838 7.164-16 16-16h160c8.836 0 16 7.162 16 16V400zM351.1 208c0 8.836-7.164 16-16 16H175.1c-8.836 0-16-7.164-16-16v-96c0-8.838 7.164-16 16-16h160c8.836 0 16 7.162 16 16V208zM463.1 408c0 4.418-3.582 8-8 8h-47.1c-4.418 0-7.1-3.582-7.1-8l0-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8V408zM463.1 280c0 4.418-3.582 8-8 8h-47.1c-4.418 0-8-3.582-8-8v-48c0-4.418 3.582-8 8-8h47.1c4.418 0 8 3.582 8 8V280zM463.1 152c0 4.418-3.582 8-8 8h-47.1c-4.418 0-8-3.582-8-8l0-48c0-4.418 3.582-8 7.1-8h47.1c4.418 0 8 3.582 8 8V152z\"],\n    \"filter\": [512, 512, [], \"f0b0\", \"M3.853 54.87C10.47 40.9 24.54 32 40 32H472C487.5 32 501.5 40.9 508.1 54.87C514.8 68.84 512.7 85.37 502.1 97.33L320 320.9V448C320 460.1 313.2 471.2 302.3 476.6C291.5 482 278.5 480.9 268.8 473.6L204.8 425.6C196.7 419.6 192 410.1 192 400V320.9L9.042 97.33C-.745 85.37-2.765 68.84 3.854 54.87L3.853 54.87z\"],\n    \"filter-circle-dollar\": [576, 512, [\"funnel-dollar\"], \"f662\", \"M3.853 22.87C10.47 8.904 24.54 0 40 0H472C487.5 0 501.5 8.904 508.1 22.87C514.8 36.84 512.7 53.37 502.1 65.33L396.4 195.6C316.2 212.1 255.1 283 255.1 368C255.1 395.4 262.3 421.4 273.5 444.5C271.8 443.7 270.3 442.7 268.8 441.6L204.8 393.6C196.7 387.6 192 378.1 192 368V288.9L9.042 65.33C-.745 53.37-2.765 36.84 3.854 22.87H3.853zM576 368C576 447.5 511.5 512 432 512C352.5 512 287.1 447.5 287.1 368C287.1 288.5 352.5 224 432 224C511.5 224 576 288.5 576 368zM413 331.1C418.1 329.3 425.6 327.9 431.8 328C439.1 328.1 448.9 329.8 458.1 332.1C466.7 334.2 475.4 328.1 477.5 320.4C479.7 311.8 474.4 303.2 465.9 301C460.3 299.6 454.3 298.3 448 297.4V288C448 279.2 440.8 272 432 272C423.2 272 416 279.2 416 288V297.5C409.9 298.7 403.7 300.7 397.1 303.8C386.1 310.1 374.9 322.2 376.1 341C377.1 357 387.8 366.4 397.7 371.7C406.6 376.4 417.5 379.5 426.3 381.1L428.1 382.5C438.3 385.4 445.1 387.7 451.2 390.8C455.8 393.5 455.1 395.1 455.1 396.5C456.1 398.9 455.5 400.2 454.1 401C454.3 401.1 453.2 403.2 450.1 404.4C446.3 406.9 439.2 408.2 432.5 407.1C422.1 407.7 414 404.8 402.6 401.2C400.7 400.6 398.8 400 396.8 399.4C388.3 396.8 379.3 401.5 376.7 409.9C374.1 418.3 378.8 427.3 387.2 429.9C388.9 430.4 390.5 430.1 392.3 431.5C399.3 433.8 407.4 436.4 416 438.1V449.5C416 458.4 423.2 465.5 432 465.5C440.8 465.5 448 458.4 448 449.5V438.7C454.2 437.6 460.5 435.6 466.3 432.5C478.3 425.9 488.5 413.8 487.1 395.5C487.5 379.4 477.7 369.3 467.5 363.3C458.1 357.7 446.2 354.4 436.9 351.7L436.8 351.7C426.3 348.7 418.5 346.5 412.9 343.5C408.1 340.9 408.1 339.5 408.1 339.1L408.1 338.1C407.9 337 408.4 336.1 408.8 335.4C409.4 334.5 410.6 333.3 413 331.1L413 331.1z\"],\n    \"filter-circle-xmark\": [576, 512, [], \"e17b\", \"M3.853 22.87C10.47 8.904 24.54 0 40 0H472C487.5 0 501.5 8.904 508.1 22.87C514.8 36.84 512.7 53.37 502.1 65.33L396.4 195.6C316.2 212.1 255.1 283 255.1 368C255.1 395.4 262.3 421.4 273.5 444.5C271.8 443.7 270.3 442.7 268.8 441.6L204.8 393.6C196.7 387.6 192 378.1 192 368V288.9L9.042 65.33C-.745 53.37-2.765 36.84 3.854 22.87H3.853zM287.1 368C287.1 288.5 352.5 224 432 224C511.5 224 576 288.5 576 368C576 447.5 511.5 512 432 512C352.5 512 287.1 447.5 287.1 368zM491.3 331.3C497.6 325.1 497.6 314.9 491.3 308.7C485.1 302.4 474.9 302.4 468.7 308.7L432 345.4L395.3 308.7C389.1 302.4 378.9 302.4 372.7 308.7C366.4 314.9 366.4 325.1 372.7 331.3L409.4 368L372.7 404.7C366.4 410.9 366.4 421.1 372.7 427.3C378.9 433.6 389.1 433.6 395.3 427.3L432 390.6L468.7 427.3C474.9 433.6 485.1 433.6 491.3 427.3C497.6 421.1 497.6 410.9 491.3 404.7L454.6 368L491.3 331.3z\"],\n    \"fingerprint\": [512, 512, [], \"f577\", \"M256.1 246c-13.25 0-23.1 10.75-23.1 23.1c1.125 72.25-8.124 141.9-27.75 211.5C201.7 491.3 206.6 512 227.5 512c10.5 0 20.12-6.875 23.12-17.5c13.5-47.87 30.1-125.4 29.5-224.5C280.1 256.8 269.4 246 256.1 246zM255.2 164.3C193.1 164.1 151.2 211.3 152.1 265.4c.75 47.87-3.75 95.87-13.37 142.5c-2.75 12.1 5.624 25.62 18.62 28.37c12.1 2.625 25.62-5.625 28.37-18.62c10.37-50.12 15.12-101.6 14.37-152.1C199.7 238.6 219.1 212.1 254.5 212.3c31.37 .5 57.24 25.37 57.62 55.5c.8749 47.1-2.75 96.25-10.62 143.5c-2.125 12.1 6.749 25.37 19.87 27.62c19.87 3.25 26.75-15.12 27.5-19.87c8.249-49.1 12.12-101.1 11.25-151.1C359.2 211.1 312.2 165.1 255.2 164.3zM144.6 144.5C134.2 136.1 119.2 137.6 110.7 147.9C85.25 179.4 71.38 219.3 72 259.9c.6249 37.62-2.375 75.37-8.999 112.1c-2.375 12.1 6.249 25.5 19.25 27.87c20.12 3.5 27.12-14.87 27.1-19.37c7.124-39.87 10.5-80.62 9.749-121.4C119.6 229.3 129.2 201.3 147.1 178.3C156.4 167.9 154.9 152.9 144.6 144.5zM253.1 82.14C238.6 81.77 223.1 83.52 208.2 87.14c-12.87 2.1-20.87 15.1-17.87 28.87c3.125 12.87 15.1 20.75 28.1 17.75C230.4 131.3 241.7 130 253.4 130.1c75.37 1.125 137.6 61.5 138.9 134.6c.5 37.87-1.375 75.1-5.624 113.6c-1.5 13.12 7.999 24.1 21.12 26.5c16.75 1.1 25.5-11.87 26.5-21.12c4.625-39.75 6.624-79.75 5.999-119.7C438.6 165.3 355.1 83.64 253.1 82.14zM506.1 203.6c-2.875-12.1-15.51-21.25-28.63-18.38c-12.1 2.875-21.12 15.75-18.25 28.62c4.75 21.5 4.875 37.5 4.75 61.62c-.1249 13.25 10.5 24.12 23.75 24.25c13.12 0 24.12-10.62 24.25-23.87C512.1 253.8 512.3 231.8 506.1 203.6zM465.1 112.9c-48.75-69.37-128.4-111.7-213.3-112.9c-69.74-.875-134.2 24.84-182.2 72.96c-46.37 46.37-71.34 108-70.34 173.6l-.125 21.5C-.3651 281.4 10.01 292.4 23.26 292.8C23.51 292.9 23.76 292.9 24.01 292.9c12.1 0 23.62-10.37 23.1-23.37l.125-23.62C47.38 193.4 67.25 144 104.4 106.9c38.87-38.75 91.37-59.62 147.7-58.87c69.37 .1 134.7 35.62 174.6 92.37c7.624 10.87 22.5 13.5 33.37 5.875C470.1 138.6 473.6 123.8 465.1 112.9z\"],\n    \"fire\": [448, 512, [128293], \"f06d\", \"M323.5 51.25C302.8 70.5 284 90.75 267.4 111.1C240.1 73.62 206.2 35.5 168 0C69.75 91.12 0 210 0 281.6C0 408.9 100.2 512 224 512s224-103.1 224-230.4C448 228.4 396 118.5 323.5 51.25zM304.1 391.9C282.4 407 255.8 416 226.9 416c-72.13 0-130.9-47.73-130.9-125.2c0-38.63 24.24-72.64 72.74-130.8c7 8 98.88 125.4 98.88 125.4l58.63-66.88c4.125 6.75 7.867 13.52 11.24 19.9C364.9 290.6 353.4 357.4 304.1 391.9z\"],\n    \"fire-extinguisher\": [512, 512, [129519], \"f134\", \"M64 480c0 17.67 14.33 32 31.1 32H256c17.67 0 31.1-14.33 31.1-32l-.0001-32H64L64 480zM503.4 5.56c-5.453-4.531-12.61-6.406-19.67-5.188l-175.1 32c-11.41 2.094-19.7 12.03-19.7 23.63L224 56L224 32c0-17.67-14.33-32-31.1-32H160C142.3 0 128 14.33 128 32l.0002 26.81C69.59 69.32 20.5 110.6 1.235 168.4C-2.952 181 3.845 194.6 16.41 198.8C18.94 199.6 21.48 200 24 200c10.05 0 19.42-6.344 22.77-16.41C59.45 145.5 90.47 117.8 128 108L128 139.2C90.27 157.2 64 195.4 64 240L64 416h223.1l.0001-176c0-44.6-26.27-82.79-63.1-100.8L224 104l63.1-.002c0 11.59 8.297 21.53 19.7 23.62l175.1 31.1c1.438 .25 2.875 .375 4.297 .375c5.578 0 11.03-1.938 15.37-5.562c5.469-4.562 8.625-11.31 8.625-18.44V23.1C511.1 16.87 508.8 10.12 503.4 5.56zM176 96C167.2 96 160 88.84 160 80S167.2 64 176 64s15.1 7.164 15.1 16S184.8 96 176 96z\"],\n    \"fire-flame-curved\": [384, 512, [\"fire-alt\"], \"f7e4\", \"M384 319.1C384 425.9 297.9 512 192 512s-192-86.13-192-192c0-58.67 27.82-106.8 54.57-134.1C69.54 169.3 96 179.8 96 201.5v85.5c0 35.17 27.97 64.5 63.16 64.94C194.9 352.5 224 323.6 224 288c0-88-175.1-96.12-52.15-277.2c13.5-19.72 44.15-10.77 44.15 13.03C215.1 127 384 149.7 384 319.1z\"],\n    \"fire-flame-simple\": [384, 512, [\"burn\"], \"f46a\", \"M203.1 4.365c-6.177-5.82-16.06-5.819-22.23-.0007C74.52 104.5 0 234.1 0 312C0 437.9 79 512 192 512s192-74.05 192-200C384 233.9 309 104.2 203.1 4.365zM192 432c-56.5 0-96-37.76-96-91.74c0-12.47 4.207-55.32 83.87-143c6.314-6.953 17.95-6.953 24.26 0C283.8 284.9 288 327.8 288 340.3C288 394.2 248.5 432 192 432z\"],\n    \"fish\": [576, 512, [128031], \"f578\", \"M180.5 141.5C219.7 108.5 272.6 80 336 80C399.4 80 452.3 108.5 491.5 141.5C530.5 174.5 558.3 213.1 572.4 241.3C577.2 250.5 577.2 261.5 572.4 270.7C558.3 298 530.5 337.5 491.5 370.5C452.3 403.5 399.4 432 336 432C272.6 432 219.7 403.5 180.5 370.5C164.3 356.7 150 341.9 137.8 327.3L48.12 379.6C35.61 386.9 19.76 384.9 9.474 374.7C-.8133 364.5-2.97 348.7 4.216 336.1L50 256L4.216 175.9C-2.97 163.3-.8133 147.5 9.474 137.3C19.76 127.1 35.61 125.1 48.12 132.4L137.8 184.7C150 170.1 164.3 155.3 180.5 141.5L180.5 141.5zM416 224C398.3 224 384 238.3 384 256C384 273.7 398.3 288 416 288C433.7 288 448 273.7 448 256C448 238.3 433.7 224 416 224z\"],\n    \"flag\": [512, 512, [61725, 127988], \"f024\", \"M64 496C64 504.8 56.75 512 48 512h-32C7.25 512 0 504.8 0 496V32c0-17.75 14.25-32 32-32s32 14.25 32 32V496zM476.3 0c-6.365 0-13.01 1.35-19.34 4.233c-45.69 20.86-79.56 27.94-107.8 27.94c-59.96 0-94.81-31.86-163.9-31.87C160.9 .3055 131.6 4.867 96 15.75v350.5c32-9.984 59.87-14.1 84.85-14.1c73.63 0 124.9 31.78 198.6 31.78c31.91 0 68.02-5.971 111.1-23.09C504.1 355.9 512 344.4 512 332.1V30.73C512 11.1 495.3 0 476.3 0z\"],\n    \"flag-checkered\": [576, 512, [127937], \"f11e\", \"M509.5 .0234c-6.145 0-12.53 1.344-18.64 4.227c-44.11 20.86-76.81 27.94-104.1 27.94c-57.89 0-91.53-31.86-158.2-31.87C195 .3203 153.3 8.324 96 32.38V32c0-17.75-14.25-32-32-32S32 14.25 32 32L31.96 496c0 8.75 7.25 16 16 16H80C88.75 512 96 504.8 96 496V384c51.74-23.86 92.71-31.82 128.3-31.82c71.09 0 120.6 31.78 191.7 31.78c30.81 0 65.67-5.969 108.1-23.09C536.3 355.9 544 344.4 544 332.1V30.74C544 12.01 527.8 .0234 509.5 .0234zM480 141.8c-31.99 14.04-57.81 20.59-80 22.49v80.21c25.44-1.477 51.59-6.953 80-17.34V308.9c-22.83 7.441-43.93 11.08-64.03 11.08c-5.447 0-10.71-.4258-15.97-.8906V244.5c-4.436 .2578-8.893 .6523-13.29 .6523c-25.82 0-47.35-4.547-66.71-10.08v66.91c-23.81-6.055-50.17-11.41-80-12.98V213.1C236.2 213.7 232.5 213.3 228.5 213.3C208.8 213.3 185.1 217.7 160 225.1v69.1C139.2 299.4 117.9 305.8 96 314.4V250.7l24.77-10.39C134.8 234.5 147.6 229.9 160 225.1V143.4C140.9 148.5 120.1 155.2 96 165.3V101.8l24.77-10.39C134.8 85.52 147.6 80.97 160 77.02v66.41c26.39-6.953 49.09-10.17 68.48-10.16c4.072 0 7.676 .4453 11.52 .668V65.03C258.6 66.6 274.4 71.55 293.2 77.83C301.7 80.63 310.7 83.45 320 86.12v66.07c20.79 6.84 41.45 12.96 66.71 12.96c4.207 0 8.781-.4766 13.29-.8594V95.54c25.44-1.477 51.59-6.953 80-17.34V141.8zM240 133.9v80.04c18.61 1.57 34.37 6.523 53.23 12.8C301.7 229.6 310.7 232.4 320 235.1V152.2C296.1 144.3 271.6 135.8 240 133.9z\"],\n    \"flag-usa\": [576, 512, [], \"f74d\", \"M544 61.63V30.74c0-25-28.81-37.99-53.17-26.49C306.3 91.5 321.5-62.25 96 32.38V32c0-17.75-14.25-32-32-32S32 14.25 32 32L31.96 496c0 8.75 7.25 16 15.1 16H80C88.75 512 96 504.8 96 496V384c200-92.25 238.8 53.25 428.1-23.12C536.3 355.9 544 344.4 544 332.1V296.1c-46.98 17.25-86.42 24.12-120.8 24.12c-40.25-.125-74.17-8.5-107.7-16.62C254 288.5 195.3 274.8 96 314.8v-34.5c102-37.63 166.5-22.75 228.4-7.625C385.1 287.8 444.7 301.4 544 261.5V200c-46.98 17.25-86.42 24.12-120.8 24.12c-40.25 0-74.17-8.375-107.7-16.5C254 192.5 195.3 178.8 96 218.8v-34.5c102-37.5 166.5-22.62 228.4-7.5C385.1 191.8 444.7 205.4 544 165.6V96.75c-57.75 23.5-100.4 31.38-135.8 31.38c-62.96 0-118.9-27.09-120.2-27.38V67.5C331.9 78.94 390.1 128.3 544 61.63zM160 136c-8.75 0-16-7.125-16-16s7.25-16 16-16s16 7.125 16 16S168.8 136 160 136zM160 72c-8.75 0-16-7-16-16c0-8.75 7.25-16 16-16s16 7.125 16 16S168.8 72 160 72zM224 128C215.3 128 208 120.9 208 112S215.3 96 224 96s16 7 16 16C240 120.8 232.8 128 224 128zM224 64.25c-8.75 0-16-7-16-16c0-8.75 7.25-16 16-16s16 7.125 16 16S232.8 64.25 224 64.25z\"],\n    \"flask\": [448, 512, [], \"f0c3\", \"M437.2 403.5L319.1 215L319.1 64h7.1c13.25 0 23.1-10.75 23.1-24l-.0002-16c0-13.25-10.75-24-23.1-24H120C106.8 0 96.01 10.75 96.01 24l-.0002 16c0 13.25 10.75 24 23.1 24h7.1L128 215l-117.2 188.5C-18.48 450.6 15.27 512 70.89 512h306.2C432.7 512 466.5 450.5 437.2 403.5zM137.1 320l48.15-77.63C189.8 237.3 191.9 230.8 191.9 224l.0651-160h63.99l-.06 160c0 6.875 2.25 13.25 5.875 18.38L309.9 320H137.1z\"],\n    \"floppy-disk\": [448, 512, [128426, 128190, \"save\"], \"f0c7\", \"M433.1 129.1l-83.9-83.9C342.3 38.32 327.1 32 316.1 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V163.9C448 152.9 441.7 137.7 433.1 129.1zM224 416c-35.34 0-64-28.66-64-64s28.66-64 64-64s64 28.66 64 64S259.3 416 224 416zM320 208C320 216.8 312.8 224 304 224h-224C71.16 224 64 216.8 64 208v-96C64 103.2 71.16 96 80 96h224C312.8 96 320 103.2 320 112V208z\"],\n    \"florin-sign\": [384, 512, [], \"e184\", \"M352 32C369.7 32 384 46.33 384 64C384 81.67 369.7 96 352 96H314.7C301.7 96 290.1 103.8 285.1 115.7L240 224H320C337.7 224 352 238.3 352 256C352 273.7 337.7 288 320 288H213.3L157.9 420.9C143 456.7 108.1 480 69.33 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H69.33C82.25 416 93.9 408.2 98.87 396.3L144 288H64C46.33 288 32 273.7 32 256C32 238.3 46.33 224 64 224H170.7L226.1 91.08C240.1 55.3 275.9 32 314.7 32H352z\"],\n    \"folder\": [512, 512, [128447, 61716, 128193], \"f07b\", \"M464 96h-192l-64-64h-160C21.5 32 0 53.5 0 80V160h512V144C512 117.5 490.5 96 464 96zM0 432C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48V192H0V432z\"],\n    \"folder-minus\": [512, 512, [], \"f65d\", \"M464 96h-192l-64-64h-160C21.5 32 0 53.5 0 80v352C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-288C512 117.5 490.5 96 464 96zM336 311.1H175.1C162.7 311.1 152 301.3 152 288c0-13.26 10.74-23.1 23.1-23.1h160C349.3 264 360 274.7 360 288S349.3 311.1 336 311.1z\"],\n    \"folder-open\": [576, 512, [128449, 61717, 128194], \"f07c\", \"M147.8 192H480V144C480 117.5 458.5 96 432 96h-160l-64-64h-160C21.49 32 0 53.49 0 80v328.4l90.54-181.1C101.4 205.6 123.4 192 147.8 192zM543.1 224H147.8C135.7 224 124.6 230.8 119.2 241.7L0 480h447.1c12.12 0 23.2-6.852 28.62-17.69l96-192C583.2 249 567.7 224 543.1 224z\"],\n    \"folder-plus\": [512, 512, [], \"f65e\", \"M464 96h-192l-64-64h-160C21.5 32 0 53.5 0 80v352C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-288C512 117.5 490.5 96 464 96zM336 311.1h-56v56C279.1 381.3 269.3 392 256 392c-13.27 0-23.1-10.74-23.1-23.1V311.1H175.1C162.7 311.1 152 301.3 152 288c0-13.26 10.74-23.1 23.1-23.1h56V207.1C232 194.7 242.7 184 256 184s23.1 10.74 23.1 23.1V264h56C349.3 264 360 274.7 360 288S349.3 311.1 336 311.1z\"],\n    \"folder-tree\": [576, 512, [], \"f802\", \"M544 32h-112l-32-32H320c-17.62 0-32 14.38-32 32v160c0 17.62 14.38 32 32 32h224c17.62 0 32-14.38 32-32V64C576 46.38 561.6 32 544 32zM544 320h-112l-32-32H320c-17.62 0-32 14.38-32 32v160c0 17.62 14.38 32 32 32h224c17.62 0 32-14.38 32-32v-128C576 334.4 561.6 320 544 320zM64 16C64 7.125 56.88 0 48 0h-32C7.125 0 0 7.125 0 16V416c0 17.62 14.38 32 32 32h224v-64H64V160h192V96H64V16z\"],\n    \"font\": [448, 512, [], \"f031\", \"M416 416h-25.81L253.1 52.76c-4.688-12.47-16.57-20.76-29.91-20.76s-25.34 8.289-30.02 20.76L57.81 416H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h96c17.67 0 32-14.31 32-32s-14.33-32-32-32H126.2l17.1-48h159.6l17.1 48H320c-17.67 0-32 14.31-32 32s14.33 32 32 32h96c17.67 0 32-14.31 32-32S433.7 416 416 416zM168.2 304L224 155.1l55.82 148.9H168.2z\"],\n    \"font-awesome\": [448, 512, [62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M448 48V384c-63.09 22.54-82.34 32-119.5 32c-62.82 0-86.6-32-149.3-32C158.6 384 142.6 387.6 128 392.2v-64C142.6 323.6 158.6 320 179.2 320c62.73 0 86.51 32 149.3 32C348.9 352 364.1 349 384 342.7v-208C364.1 141 348.9 144 328.5 144c-62.82 0-86.6-32-149.3-32C128.4 112 104.3 132.6 64 140.7v307.3C64 465.7 49.67 480 32 480S0 465.7 0 448V63.1C0 46.33 14.33 32 31.1 32S64 46.33 64 63.1V76.66C104.3 68.63 128.4 48 179.2 48c62.73 0 86.51 32 149.3 32C365.7 80 384.9 70.54 448 48z\"],\n    \"football\": [512, 512, [127944, \"football-ball\"], \"f44e\", \"M16.17 337.5c0 44.98 7.565 83.54 13.98 107.9C35.22 464.3 50.46 496 174.9 496c9.566 0 19.59-.4707 29.84-1.271L17.33 307.3C16.53 317.6 16.17 327.7 16.17 337.5zM495.8 174.5c0-44.98-7.565-83.53-13.98-107.9c-4.688-17.54-18.34-31.23-36.04-35.95C435.5 27.91 392.9 16 337 16c-9.564 0-19.59 .4707-29.84 1.271l187.5 187.5C495.5 194.4 495.8 184.3 495.8 174.5zM26.77 248.8l236.3 236.3c142-36.1 203.9-150.4 222.2-221.1L248.9 26.87C106.9 62.96 45.07 177.2 26.77 248.8zM256 335.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L164.7 283.3C161.6 280.2 160 276.1 160 271.1c0-8.529 6.865-16 16-16c4.095 0 8.189 1.562 11.31 4.688l64.01 64C254.4 327.8 256 331.9 256 335.1zM304 287.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L212.7 235.3C209.6 232.2 208 228.1 208 223.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01C302.5 279.8 304 283.9 304 287.1zM256 175.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01c3.125 3.125 4.688 7.219 4.688 11.31c0 9.133-7.468 16-16 16c-4.094 0-8.189-1.562-11.31-4.688l-64.01-64.01C257.6 184.2 256 180.1 256 175.1z\"],\n    \"forward\": [512, 512, [9193], \"f04e\", \"M52.51 440.6l171.5-142.9V214.3L52.51 71.41C31.88 54.28 0 68.66 0 96.03v319.9C0 443.3 31.88 457.7 52.51 440.6zM308.5 440.6l192-159.1c15.25-12.87 15.25-36.37 0-49.24l-192-159.1c-20.63-17.12-52.51-2.749-52.51 24.62v319.9C256 443.3 287.9 457.7 308.5 440.6z\"],\n    \"forward-fast\": [512, 512, [9197, \"fast-forward\"], \"f050\", \"M512 96.03v319.9c0 17.67-14.33 31.1-31.1 31.1C462.3 447.1 448 433.6 448 415.1V284.1l-171.5 156.5C255.9 457.7 224 443.3 224 415.1V284.1l-171.5 156.5C31.88 457.7 0 443.3 0 415.1V96.03c0-27.37 31.88-41.74 52.5-24.62L224 226.8V96.03c0-27.37 31.88-41.74 52.5-24.62L448 226.8V96.03c0-17.67 14.33-31.1 31.1-31.1C497.7 64.03 512 78.36 512 96.03z\"],\n    \"forward-step\": [320, 512, [\"step-forward\"], \"f051\", \"M287.1 447.1c17.67 0 31.1-14.33 31.1-32V96.03c0-17.67-14.33-32-32-32c-17.67 0-31.1 14.33-31.1 31.1v319.9C255.1 433.6 270.3 447.1 287.1 447.1zM52.51 440.6l192-159.1c7.625-6.436 11.43-15.53 11.43-24.62c0-9.094-3.809-18.18-11.43-24.62l-192-159.1C31.88 54.28 0 68.66 0 96.03v319.9C0 443.3 31.88 457.7 52.51 440.6z\"],\n    \"franc-sign\": [320, 512, [], \"e18f\", \"M288 32C305.7 32 320 46.33 320 64C320 81.67 305.7 96 288 96H112V192H256C273.7 192 288 206.3 288 224C288 241.7 273.7 256 256 256H112V320H192C209.7 320 224 334.3 224 352C224 369.7 209.7 384 192 384H112V448C112 465.7 97.67 480 80 480C62.33 480 48 465.7 48 448V384H32C14.33 384 0 369.7 0 352C0 334.3 14.33 320 32 320H48V64C48 46.33 62.33 32 80 32H288z\"],\n    \"frog\": [576, 512, [], \"f52e\", \"M528 416h-32.07l-90.32-96.34l140.6-79.03c18.38-10.25 29.75-29.62 29.75-50.62c0-21.5-11.75-41-30.5-51.25c-40.5-22.25-99.07-41.43-99.07-41.43C439.6 60.19 407.3 32 368 32s-71.77 28.25-78.52 65.5C126.7 113-.4999 250.1 .0001 417C.1251 451.9 29.13 480 64 480h304c8.875 0 16-7.125 16-16c0-26.51-21.49-48-47.1-48H284.3l23.93-32.38c24.25-36.13 10.38-88.25-33.63-106.5C250.8 267.1 223 272.4 202.4 288L169.6 312.5c-7.125 5.375-17.12 4-22.38-3.125c-5.375-7.125-4-17.12 3.125-22.38l34.75-26.12c36.87-27.62 88.37-27.62 125.1 0c10.88 8.125 45.88 39 40.88 93.13L469.6 480h90.38c8.875 0 16-7.125 16-16C576 437.5 554.5 416 528 416zM344 112c0-13.25 10.75-24 24-24s24 10.75 24 24s-10.75 24-24 24S344 125.3 344 112z\"],\n    \"futbol\": [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M177.1 228.6L207.9 320h96.5l29.62-91.38L256 172.1L177.1 228.6zM255.1 0C114.6 0 .0001 114.6 .0001 256S114.6 512 256 512s255.1-114.6 255.1-255.1S397.4 0 255.1 0zM416.6 360.9l-85.4-1.297l-25.15 81.59C290.1 445.5 273.4 448 256 448s-34.09-2.523-50.09-6.859L180.8 359.6l-85.4 1.297c-18.12-27.66-29.15-60.27-30.88-95.31L134.3 216.4L106.6 135.6c21.16-26.21 49.09-46.61 81.06-58.84L256 128l68.29-51.22c31.98 12.23 59.9 32.64 81.06 58.84L377.7 216.4l69.78 49.1C445.8 300.6 434.8 333.2 416.6 360.9z\"],\n    \"g\": [448, 512, [103], \"47\", \"M448 256c0 143.4-118.6 222.3-225 222.3c-132.3 0-222.1-106.2-222.1-222.4c0-124.4 100.9-223.9 223.1-223.9c84.84 0 167.8 55.28 167.8 88.2c0 18.28-14.95 32-32 32c-31.04 0-46.79-56.16-135.8-56.16c-87.66 0-159.1 70.66-159.1 159.8c0 34.81 27.19 158.8 159.1 158.8c79.45 0 144.6-55.1 158.1-126.7h-134.1c-17.67 0-32-14.33-32-32s14.33-31.1 32-31.1H416C433.7 224 448 238.3 448 256z\"],\n    \"gamepad\": [640, 512, [], \"f11b\", \"M448 64H192C85.96 64 0 149.1 0 256s85.96 192 192 192h256c106 0 192-85.96 192-192S554 64 448 64zM247.1 280h-32v32c0 13.2-10.78 24-23.98 24c-13.2 0-24.02-10.8-24.02-24v-32L136 279.1C122.8 279.1 111.1 269.2 111.1 256c0-13.2 10.85-24.01 24.05-24.01L167.1 232v-32c0-13.2 10.82-24 24.02-24c13.2 0 23.98 10.8 23.98 24v32h32c13.2 0 24.02 10.8 24.02 24C271.1 269.2 261.2 280 247.1 280zM431.1 344c-22.12 0-39.1-17.87-39.1-39.1s17.87-40 39.1-40s39.1 17.88 39.1 40S454.1 344 431.1 344zM495.1 248c-22.12 0-39.1-17.87-39.1-39.1s17.87-40 39.1-40c22.12 0 39.1 17.88 39.1 40S518.1 248 495.1 248z\"],\n    \"gas-pump\": [512, 512, [9981], \"f52f\", \"M32 64C32 28.65 60.65 0 96 0H256C291.3 0 320 28.65 320 64V256H328C376.6 256 416 295.4 416 344V376C416 389.3 426.7 400 440 400C453.3 400 464 389.3 464 376V221.1C436.4 214.9 416 189.8 416 160V96L384 64C375.2 55.16 375.2 40.84 384 32C392.8 23.16 407.2 23.16 416 32L493.3 109.3C505.3 121.3 512 137.5 512 154.5V376C512 415.8 479.8 448 440 448C400.2 448 368 415.8 368 376V344C368 321.9 350.1 303.1 328 303.1H320V448C337.7 448 352 462.3 352 480C352 497.7 337.7 512 320 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V64zM96 176C96 184.8 103.2 192 112 192H240C248.8 192 256 184.8 256 176V80C256 71.16 248.8 64 240 64H112C103.2 64 96 71.16 96 80V176z\"],\n    \"gauge\": [512, 512, [\"dashboard\", \"gauge-med\", \"tachometer-alt-average\"], \"f624\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM280 292.7V88C280 74.75 269.3 64 256 64C242.7 64 232 74.75 232 88V292.7C208.5 302.1 192 325.1 192 352C192 387.3 220.7 416 256 416C291.3 416 320 387.3 320 352C320 325.1 303.5 302.1 280 292.7zM144 176C161.7 176 176 161.7 176 144C176 126.3 161.7 112 144 112C126.3 112 112 126.3 112 144C112 161.7 126.3 176 144 176zM96 224C78.33 224 64 238.3 64 256C64 273.7 78.33 288 96 288C113.7 288 128 273.7 128 256C128 238.3 113.7 224 96 224zM416 288C433.7 288 448 273.7 448 256C448 238.3 433.7 224 416 224C398.3 224 384 238.3 384 256C384 273.7 398.3 288 416 288zM368 112C350.3 112 336 126.3 336 144C336 161.7 350.3 176 368 176C385.7 176 400 161.7 400 144C400 126.3 385.7 112 368 112z\"],\n    \"gauge-high\": [512, 512, [62461, \"tachometer-alt\", \"tachometer-alt-fast\"], \"f625\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 64C238.3 64 224 78.33 224 96C224 113.7 238.3 128 256 128C273.7 128 288 113.7 288 96C288 78.33 273.7 64 256 64zM256 416C291.3 416 320 387.3 320 352C320 334.6 313.1 318.9 301.9 307.4L365.1 161.7C371.3 149.5 365.8 135.4 353.7 130C341.5 124.7 327.4 130.2 322 142.3L257.9 288C257.3 288 256.6 287.1 256 287.1C220.7 287.1 192 316.7 192 352C192 387.3 220.7 416 256 416V416zM144 112C126.3 112 112 126.3 112 144C112 161.7 126.3 176 144 176C161.7 176 176 161.7 176 144C176 126.3 161.7 112 144 112zM96 288C113.7 288 128 273.7 128 256C128 238.3 113.7 224 96 224C78.33 224 64 238.3 64 256C64 273.7 78.33 288 96 288zM416 224C398.3 224 384 238.3 384 256C384 273.7 398.3 288 416 288C433.7 288 448 273.7 448 256C448 238.3 433.7 224 416 224z\"],\n    \"gauge-simple\": [512, 512, [\"gauge-simple-med\", \"tachometer-average\"], \"f629\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM280 292.7V88C280 74.75 269.3 64 256 64C242.7 64 232 74.75 232 88V292.7C208.5 302.1 192 325.1 192 352C192 387.3 220.7 416 256 416C291.3 416 320 387.3 320 352C320 325.1 303.5 302.1 280 292.7z\"],\n    \"gauge-simple-high\": [512, 512, [61668, \"tachometer\", \"tachometer-fast\"], \"f62a\", \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM304.7 310.4L381.3 163.1C387.4 151.3 382.8 136.8 371.1 130.7C359.3 124.6 344.8 129.2 338.7 140.9L262.1 288.3C260.1 288.1 258.1 287.1 255.1 287.1C220.7 287.1 191.1 316.7 191.1 352C191.1 387.3 220.7 416 255.1 416C291.3 416 320 387.3 320 352C320 336.1 314.2 321.6 304.7 310.4L304.7 310.4z\"],\n    \"gavel\": [512, 512, [\"legal\"], \"f0e3\", \"M512 216.3c0-6.125-2.344-12.25-7.031-16.93L482.3 176.8c-4.688-4.686-10.84-7.028-16.1-7.028s-12.31 2.343-16.1 7.028l-5.625 5.625L329.6 69.28l5.625-5.625c4.687-4.688 7.03-10.84 7.03-16.1s-2.343-12.31-7.03-16.1l-22.62-22.62C307.9 2.344 301.8 0 295.7 0s-12.15 2.344-16.84 7.031L154.2 131.5C149.6 136.2 147.2 142.3 147.2 148.5s2.344 12.25 7.031 16.94l22.62 22.62c4.688 4.688 10.84 7.031 16.1 7.031c6.156 0 12.31-2.344 16.1-7.031l5.625-5.625l113.1 113.1l-5.625 5.621c-4.688 4.688-7.031 10.84-7.031 16.1s2.344 12.31 7.031 16.1l22.62 22.62c4.688 4.688 10.81 7.031 16.94 7.031s12.25-2.344 16.94-7.031l124.5-124.6C509.7 228.5 512 222.5 512 216.3zM227.8 238.1L169.4 297.4C163.1 291.1 154.9 288 146.7 288S130.4 291.1 124.1 297.4l-114.7 114.7c-6.25 6.248-9.375 14.43-9.375 22.62s3.125 16.37 9.375 22.62l45.25 45.25C60.87 508.9 69.06 512 77.25 512s16.37-3.125 22.62-9.375l114.7-114.7c6.25-6.25 9.376-14.44 9.376-22.62c0-8.185-3.125-16.37-9.374-22.62l58.43-58.43L227.8 238.1z\"],\n    \"gear\": [512, 512, [9881, \"cog\"], \"f013\", \"M495.9 166.6C499.2 175.2 496.4 184.9 489.6 191.2L446.3 230.6C447.4 238.9 448 247.4 448 256C448 264.6 447.4 273.1 446.3 281.4L489.6 320.8C496.4 327.1 499.2 336.8 495.9 345.4C491.5 357.3 486.2 368.8 480.2 379.7L475.5 387.8C468.9 398.8 461.5 409.2 453.4 419.1C447.4 426.2 437.7 428.7 428.9 425.9L373.2 408.1C359.8 418.4 344.1 427 329.2 433.6L316.7 490.7C314.7 499.7 307.7 506.1 298.5 508.5C284.7 510.8 270.5 512 255.1 512C241.5 512 227.3 510.8 213.5 508.5C204.3 506.1 197.3 499.7 195.3 490.7L182.8 433.6C167 427 152.2 418.4 138.8 408.1L83.14 425.9C74.3 428.7 64.55 426.2 58.63 419.1C50.52 409.2 43.12 398.8 36.52 387.8L31.84 379.7C25.77 368.8 20.49 357.3 16.06 345.4C12.82 336.8 15.55 327.1 22.41 320.8L65.67 281.4C64.57 273.1 64 264.6 64 256C64 247.4 64.57 238.9 65.67 230.6L22.41 191.2C15.55 184.9 12.82 175.3 16.06 166.6C20.49 154.7 25.78 143.2 31.84 132.3L36.51 124.2C43.12 113.2 50.52 102.8 58.63 92.95C64.55 85.8 74.3 83.32 83.14 86.14L138.8 103.9C152.2 93.56 167 84.96 182.8 78.43L195.3 21.33C197.3 12.25 204.3 5.04 213.5 3.51C227.3 1.201 241.5 0 256 0C270.5 0 284.7 1.201 298.5 3.51C307.7 5.04 314.7 12.25 316.7 21.33L329.2 78.43C344.1 84.96 359.8 93.56 373.2 103.9L428.9 86.14C437.7 83.32 447.4 85.8 453.4 92.95C461.5 102.8 468.9 113.2 475.5 124.2L480.2 132.3C486.2 143.2 491.5 154.7 495.9 166.6V166.6zM256 336C300.2 336 336 300.2 336 255.1C336 211.8 300.2 175.1 256 175.1C211.8 175.1 176 211.8 176 255.1C176 300.2 211.8 336 256 336z\"],\n    \"gears\": [640, 512, [\"cogs\"], \"f085\", \"M286.3 155.1C287.4 161.9 288 168.9 288 175.1C288 183.1 287.4 190.1 286.3 196.9L308.5 216.7C315.5 223 318.4 232.1 314.7 241.7C312.4 246.1 309.9 252.2 307.1 257.2L304 262.6C300.1 267.6 297.7 272.4 294.2 277.1C288.5 284.7 278.5 287.2 269.5 284.2L241.2 274.9C230.5 283.8 218.3 290.9 205 295.9L198.1 324.9C197 334.2 189.8 341.6 180.4 342.8C173.7 343.6 166.9 344 160 344C153.1 344 146.3 343.6 139.6 342.8C130.2 341.6 122.1 334.2 121 324.9L114.1 295.9C101.7 290.9 89.5 283.8 78.75 274.9L50.53 284.2C41.54 287.2 31.52 284.7 25.82 277.1C22.28 272.4 18.98 267.5 15.94 262.5L12.92 257.2C10.13 252.2 7.592 247 5.324 241.7C1.62 232.1 4.458 223 11.52 216.7L33.7 196.9C32.58 190.1 31.1 183.1 31.1 175.1C31.1 168.9 32.58 161.9 33.7 155.1L11.52 135.3C4.458 128.1 1.62 119 5.324 110.3C7.592 104.1 10.13 99.79 12.91 94.76L15.95 89.51C18.98 84.46 22.28 79.58 25.82 74.89C31.52 67.34 41.54 64.83 50.53 67.79L78.75 77.09C89.5 68.25 101.7 61.13 114.1 56.15L121 27.08C122.1 17.8 130.2 10.37 139.6 9.231C146.3 8.418 153.1 8 160 8C166.9 8 173.7 8.418 180.4 9.23C189.8 10.37 197 17.8 198.1 27.08L205 56.15C218.3 61.13 230.5 68.25 241.2 77.09L269.5 67.79C278.5 64.83 288.5 67.34 294.2 74.89C297.7 79.56 300.1 84.42 304 89.44L307.1 94.83C309.9 99.84 312.4 105 314.7 110.3C318.4 119 315.5 128.1 308.5 135.3L286.3 155.1zM160 127.1C133.5 127.1 112 149.5 112 175.1C112 202.5 133.5 223.1 160 223.1C186.5 223.1 208 202.5 208 175.1C208 149.5 186.5 127.1 160 127.1zM484.9 478.3C478.1 479.4 471.1 480 464 480C456.9 480 449.9 479.4 443.1 478.3L423.3 500.5C416.1 507.5 407 510.4 398.3 506.7C393 504.4 387.8 501.9 382.8 499.1L377.4 496C372.4 492.1 367.6 489.7 362.9 486.2C355.3 480.5 352.8 470.5 355.8 461.5L365.1 433.2C356.2 422.5 349.1 410.3 344.1 397L315.1 390.1C305.8 389 298.4 381.8 297.2 372.4C296.4 365.7 296 358.9 296 352C296 345.1 296.4 338.3 297.2 331.6C298.4 322.2 305.8 314.1 315.1 313L344.1 306.1C349.1 293.7 356.2 281.5 365.1 270.8L355.8 242.5C352.8 233.5 355.3 223.5 362.9 217.8C367.6 214.3 372.5 210.1 377.5 207.9L382.8 204.9C387.8 202.1 392.1 199.6 398.3 197.3C407 193.6 416.1 196.5 423.3 203.5L443.1 225.7C449.9 224.6 456.9 224 464 224C471.1 224 478.1 224.6 484.9 225.7L504.7 203.5C511 196.5 520.1 193.6 529.7 197.3C535 199.6 540.2 202.1 545.2 204.9L550.5 207.9C555.5 210.1 560.4 214.3 565.1 217.8C572.7 223.5 575.2 233.5 572.2 242.5L562.9 270.8C571.8 281.5 578.9 293.7 583.9 306.1L612.9 313C622.2 314.1 629.6 322.2 630.8 331.6C631.6 338.3 632 345.1 632 352C632 358.9 631.6 365.7 630.8 372.4C629.6 381.8 622.2 389 612.9 390.1L583.9 397C578.9 410.3 571.8 422.5 562.9 433.2L572.2 461.5C575.2 470.5 572.7 480.5 565.1 486.2C560.4 489.7 555.6 492.1 550.6 496L545.2 499.1C540.2 501.9 534.1 504.4 529.7 506.7C520.1 510.4 511 507.5 504.7 500.5L484.9 478.3zM512 352C512 325.5 490.5 304 464 304C437.5 304 416 325.5 416 352C416 378.5 437.5 400 464 400C490.5 400 512 378.5 512 352z\"],\n    \"gem\": [512, 512, [128142], \"f3a5\", \"M378.7 32H133.3L256 182.7L378.7 32zM512 192l-107.4-141.3L289.6 192H512zM107.4 50.67L0 192h222.4L107.4 50.67zM244.3 474.9C247.3 478.2 251.6 480 256 480s8.653-1.828 11.67-5.062L510.6 224H1.365L244.3 474.9z\"],\n    \"genderless\": [384, 512, [], \"f22d\", \"M192 80C94.83 80 16 158.8 16 256c0 97.17 78.83 176 176 176s176-78.83 176-176C368 158.8 289.2 80 192 80zM192 352c-52.95 0-96-43.05-96-96c0-52.95 43.05-96 96-96s96 43.05 96 96C288 308.9 244.1 352 192 352z\"],\n    \"ghost\": [384, 512, [128123], \"f6e2\", \"M186.1 .1032c-105.1 3.126-186.1 94.75-186.1 199.9v264c0 14.25 17.3 21.38 27.3 11.25l24.95-18.5c6.625-5.001 16-4.001 21.5 2.25l43 48.31c6.25 6.251 16.37 6.251 22.62 0l40.62-45.81c6.375-7.251 17.62-7.251 24 0l40.63 45.81c6.25 6.251 16.38 6.251 22.62 0l43-48.31c5.5-6.251 14.88-7.251 21.5-2.25l24.95 18.5c10 10.13 27.3 3.002 27.3-11.25V192C384 83.98 294.9-3.147 186.1 .1032zM128 224c-17.62 0-31.1-14.38-31.1-32.01s14.38-32.01 31.1-32.01s32 14.38 32 32.01S145.6 224 128 224zM256 224c-17.62 0-32-14.38-32-32.01s14.38-32.01 32-32.01c17.62 0 32 14.38 32 32.01S273.6 224 256 224z\"],\n    \"gift\": [512, 512, [127873], \"f06b\", \"M152 0H154.2C186.1 0 215.7 16.91 231.9 44.45L256 85.46L280.1 44.45C296.3 16.91 325.9 0 357.8 0H360C408.6 0 448 39.4 448 88C448 102.4 444.5 115.1 438.4 128H480C497.7 128 512 142.3 512 160V224C512 241.7 497.7 256 480 256H32C14.33 256 0 241.7 0 224V160C0 142.3 14.33 128 32 128H73.6C67.46 115.1 64 102.4 64 88C64 39.4 103.4 0 152 0zM190.5 68.78C182.9 55.91 169.1 48 154.2 48H152C129.9 48 112 65.91 112 88C112 110.1 129.9 128 152 128H225.3L190.5 68.78zM360 48H357.8C342.9 48 329.1 55.91 321.5 68.78L286.7 128H360C382.1 128 400 110.1 400 88C400 65.91 382.1 48 360 48V48zM32 288H224V512H80C53.49 512 32 490.5 32 464V288zM288 512V288H480V464C480 490.5 458.5 512 432 512H288z\"],\n    \"gifts\": [640, 512, [], \"f79c\", \"M192.5 55.09L217.9 36.59C228.6 28.79 243.6 31.16 251.4 41.88C259.2 52.6 256.8 67.61 246.1 75.41L217.8 95.1H240C256.9 95.1 271.7 104.7 280.3 117.9C257.3 135.7 241.9 162.1 240.2 193.1C212.5 201 192 226.1 192 256V480C192 491.7 195.1 502.6 200.6 512H48C21.49 512 0 490.5 0 464V144C0 117.5 21.49 96 48 96H70.2L41.88 75.41C31.16 67.61 28.79 52.6 36.59 41.88C44.39 31.16 59.4 28.79 70.12 36.59L97.55 56.54L89.23 31.59C85.04 19.01 91.84 5.423 104.4 1.232C116.1-2.96 130.6 3.836 134.8 16.41L144.7 46.17L155.4 15.99C159.8 3.493 173.5-3.048 186 1.377C198.5 5.802 205 19.52 200.6 32.01L192.5 55.09zM344.2 127.1C366.6 127.1 387.8 138.4 401.5 156.2L432 195.8L462.5 156.2C476.2 138.4 497.4 127.1 519.8 127.1C559.5 127.1 592 160.1 592 199.1C592 208.4 590.6 216.5 587.9 223.1H592C618.5 223.1 640 245.5 640 271.1V352H448V255.1H416V352H224V271.1C224 245.5 245.5 223.1 272 223.1H276.1C273.4 216.5 272 208.4 272 199.1C272 160.1 304.5 127.1 344.2 127.1H344.2zM363.5 185.5C358.9 179.5 351.7 175.1 344.2 175.1C330.8 175.1 320 186.9 320 199.1C320 213.3 330.7 223.1 344 223.1H393.1L363.5 185.5zM519.8 175.1C512.3 175.1 505.1 179.5 500.5 185.5L470.9 223.1H520C533.3 223.1 544 213.3 544 199.1C544 186.9 533.2 175.1 519.8 175.1H519.8zM224 464V384H416V512H272C245.5 512 224 490.5 224 464zM448 512V384H640V464C640 490.5 618.5 512 592 512H448z\"],\n    \"glasses\": [576, 512, [], \"f530\", \"M574.1 280.4l-45.38-181.8c-5.875-23.63-21.62-44-43-55.75c-21.5-11.75-46.1-14.13-70.25-6.375l-15.25 5.125c-8.375 2.75-12.87 11.88-10 20.25l5 15.13c2.75 8.375 11.88 12.88 20.25 10.13l13.12-4.375c10.88-3.625 23-3.625 33.25 1.75c10.25 5.375 17.5 14.5 20.38 25.75l38.38 153.9c-22.12-6.875-49.75-12.5-81.13-12.5c-34.88 0-73.1 7-114.9 26.75H251.4C210.5 258.6 171.4 251.6 136.5 251.6c-31.38 0-59 5.625-81.12 12.5l38.38-153.9c2.875-11.25 10.12-20.38 20.5-25.75C124.4 79.12 136.5 79.12 147.4 82.74l13.12 4.375c8.375 2.75 17.5-1.75 20.25-10.13l5-15.13C188.6 53.49 184.1 44.37 175.6 41.62l-15.25-5.125c-23.13-7.75-48.75-5.375-70.13 6.375c-21.37 11.75-37.12 32.13-43 55.75L1.875 280.4C.6251 285.4 .0001 290.6 .0001 295.9v70.25C.0001 428.1 51.63 480 115.3 480h37.13c60.25 0 110.4-46 114.9-105.4l2.875-38.63h35.75l2.875 38.63C313.3 433.1 363.4 480 423.6 480h37.13c63.62 0 115.2-51 115.2-113.9V295.9C576 290.6 575.4 285.5 574.1 280.4zM203.4 369.7c-2 26-24.38 46.25-51 46.25H115.2C87 415.1 64 393.6 64 366.1v-37.5c18.12-6.5 43.38-13 72.62-13c23.88 0 47.25 4.375 69.88 13L203.4 369.7zM512 366.1c0 27.5-23 49.88-51.25 49.88h-37.13c-26.62 0-49-20.25-51-46.25l-3.125-41.13c22.62-8.625 46.13-13 70-13c29 0 54.38 6.5 72.5 13V366.1z\"],\n    \"globe\": [512, 512, [127760], \"f0ac\", \"M352 256C352 278.2 350.8 299.6 348.7 320H163.3C161.2 299.6 159.1 278.2 159.1 256C159.1 233.8 161.2 212.4 163.3 192H348.7C350.8 212.4 352 233.8 352 256zM503.9 192C509.2 212.5 512 233.9 512 256C512 278.1 509.2 299.5 503.9 320H380.8C382.9 299.4 384 277.1 384 256C384 234 382.9 212.6 380.8 192H503.9zM493.4 160H376.7C366.7 96.14 346.9 42.62 321.4 8.442C399.8 29.09 463.4 85.94 493.4 160zM344.3 160H167.7C173.8 123.6 183.2 91.38 194.7 65.35C205.2 41.74 216.9 24.61 228.2 13.81C239.4 3.178 248.7 0 256 0C263.3 0 272.6 3.178 283.8 13.81C295.1 24.61 306.8 41.74 317.3 65.35C328.8 91.38 338.2 123.6 344.3 160H344.3zM18.61 160C48.59 85.94 112.2 29.09 190.6 8.442C165.1 42.62 145.3 96.14 135.3 160H18.61zM131.2 192C129.1 212.6 127.1 234 127.1 256C127.1 277.1 129.1 299.4 131.2 320H8.065C2.8 299.5 0 278.1 0 256C0 233.9 2.8 212.5 8.065 192H131.2zM194.7 446.6C183.2 420.6 173.8 388.4 167.7 352H344.3C338.2 388.4 328.8 420.6 317.3 446.6C306.8 470.3 295.1 487.4 283.8 498.2C272.6 508.8 263.3 512 255.1 512C248.7 512 239.4 508.8 228.2 498.2C216.9 487.4 205.2 470.3 194.7 446.6H194.7zM190.6 503.6C112.2 482.9 48.59 426.1 18.61 352H135.3C145.3 415.9 165.1 469.4 190.6 503.6V503.6zM321.4 503.6C346.9 469.4 366.7 415.9 376.7 352H493.4C463.4 426.1 399.8 482.9 321.4 503.6V503.6z\"],\n    \"golf-ball-tee\": [384, 512, [\"golf-ball\"], \"f450\", \"M96 399.1c0 17.67 14.33 31.1 32 31.1s32 14.33 32 31.1v48h64v-48c0-17.67 14.33-31.1 32-31.1s32-14.33 32-31.1v-16H96V399.1zM192 .0001c-106 0-192 86.68-192 193.6c0 65.78 32.82 123.5 82.52 158.4h218.1C351.2 317.1 384 259.4 384 193.6C384 86.68 298 .0001 192 .0001zM179 205.1C183 206.9 187.4 208 192 208c17.53 0 31.74-14.33 31.74-31.1c0-4.688-1.111-9.062-2.904-13.07c11.03 5.016 18.77 16.08 18.77 29.07c0 17.67-14.21 31.1-31.74 31.1C194.1 224 184 216.2 179 205.1zM223.7 303.1c-12.88 0-23.86-7.812-28.83-18.93c3.977 1.809 8.316 2.93 12.96 2.93c17.53 0 31.74-14.33 31.74-31.1c0-4.688-1.109-9.062-2.904-13.07c11.03 5.016 18.77 16.08 18.77 29.07C255.5 289.7 241.3 303.1 223.7 303.1zM287.2 240c-12.88 0-23.86-7.812-28.83-18.93c3.977 1.809 8.316 2.93 12.96 2.93c17.53 0 31.73-14.33 31.73-31.1c0-4.688-1.109-9.062-2.902-13.07C311.2 183.9 318.9 195 318.9 208C318.9 225.7 304.7 240 287.2 240z\"],\n    \"gopuram\": [512, 512, [], \"f664\", \"M120 0C133.3 0 144 10.75 144 24V32H184V24C184 10.75 194.7 0 208 0C221.3 0 232 10.75 232 24V32H280V24C280 10.75 290.7 0 304 0C317.3 0 328 10.75 328 24V32H368V24C368 10.75 378.7 0 392 0C405.3 0 416 10.75 416 24V128C433.7 128 448 142.3 448 160V224C465.7 224 480 238.3 480 256V352C497.7 352 512 366.3 512 384V480C512 497.7 497.7 512 480 512H416V352H384V224H352V128H320V224H352V352H384V512H304V464C304 437.5 282.5 416 256 416C229.5 416 208 437.5 208 464V512H128V352H160V224H192V128H160V224H128V352H96V512H32C14.33 512 0 497.7 0 480V384C0 366.3 14.33 352 32 352V256C32 238.3 46.33 224 64 224V160C64 142.3 78.33 128 96 128V24C96 10.75 106.7 0 120 0zM256 272C238.3 272 224 286.3 224 304V352H288V304C288 286.3 273.7 272 256 272zM224 224H288V192C288 174.3 273.7 160 256 160C238.3 160 224 174.3 224 192V224z\"],\n    \"graduation-cap\": [640, 512, [127891, \"mortar-board\"], \"f19d\", \"M623.1 136.9l-282.7-101.2c-13.73-4.91-28.7-4.91-42.43 0L16.05 136.9C6.438 140.4 0 149.6 0 160s6.438 19.65 16.05 23.09L76.07 204.6c-11.89 15.8-20.26 34.16-24.55 53.95C40.05 263.4 32 274.8 32 288c0 9.953 4.814 18.49 11.94 24.36l-24.83 149C17.48 471.1 25 480 34.89 480H93.11c9.887 0 17.41-8.879 15.78-18.63l-24.83-149C91.19 306.5 96 297.1 96 288c0-10.29-5.174-19.03-12.72-24.89c4.252-17.76 12.88-33.82 24.94-47.03l190.6 68.23c13.73 4.91 28.7 4.91 42.43 0l282.7-101.2C633.6 179.6 640 170.4 640 160S633.6 140.4 623.1 136.9zM351.1 314.4C341.7 318.1 330.9 320 320 320c-10.92 0-21.69-1.867-32-5.555L142.8 262.5L128 405.3C128 446.6 213.1 480 320 480c105.1 0 192-33.4 192-74.67l-14.78-142.9L351.1 314.4z\"],\n    \"greater-than\": [384, 512, [62769], \"3e\", \"M32.03 448c-11.75 0-23.05-6.469-28.66-17.69c-7.906-15.81-1.5-35.03 14.31-42.94l262.8-131.4L17.69 124.6C1.875 116.7-4.531 97.51 3.375 81.7c7.891-15.81 27.06-22.19 42.94-14.31l320 160C377.2 232.8 384 243.9 384 256c0 12.12-6.844 23.19-17.69 28.63l-320 160C41.72 446.9 36.83 448 32.03 448z\"],\n    \"greater-than-equal\": [448, 512, [], \"f532\", \"M34.28 331.9c5.016 12.53 17.03 20.12 29.73 20.12c3.953 0 7.969-.7187 11.88-2.281l320-127.1C408 216.9 416 205.1 416 192s-7.969-24.85-20.11-29.72l-320-128c-16.47-6.594-35.05 1.406-41.61 17.84C27.72 68.55 35.7 87.17 52.11 93.73l245.7 98.28L52.11 290.3C35.7 296.9 27.72 315.5 34.28 331.9zM416 416H32c-17.67 0-32 14.31-32 31.99s14.33 32.01 32 32.01h384c17.67 0 32-14.32 32-32.01S433.7 416 416 416z\"],\n    \"grip\": [448, 512, [\"grip-horizontal\"], \"f58d\", \"M128 184C128 206.1 110.1 224 88 224H40C17.91 224 0 206.1 0 184V136C0 113.9 17.91 96 40 96H88C110.1 96 128 113.9 128 136V184zM128 376C128 398.1 110.1 416 88 416H40C17.91 416 0 398.1 0 376V328C0 305.9 17.91 288 40 288H88C110.1 288 128 305.9 128 328V376zM160 136C160 113.9 177.9 96 200 96H248C270.1 96 288 113.9 288 136V184C288 206.1 270.1 224 248 224H200C177.9 224 160 206.1 160 184V136zM288 376C288 398.1 270.1 416 248 416H200C177.9 416 160 398.1 160 376V328C160 305.9 177.9 288 200 288H248C270.1 288 288 305.9 288 328V376zM320 136C320 113.9 337.9 96 360 96H408C430.1 96 448 113.9 448 136V184C448 206.1 430.1 224 408 224H360C337.9 224 320 206.1 320 184V136zM448 376C448 398.1 430.1 416 408 416H360C337.9 416 320 398.1 320 376V328C320 305.9 337.9 288 360 288H408C430.1 288 448 305.9 448 328V376z\"],\n    \"grip-lines\": [448, 512, [], \"f7a4\", \"M416 288C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288H416zM416 160C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H32C14.33 224 0 209.7 0 192C0 174.3 14.33 160 32 160H416z\"],\n    \"grip-lines-vertical\": [192, 512, [], \"f7a5\", \"M64 448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448V64C0 46.33 14.33 32 32 32C49.67 32 64 46.33 64 64V448zM192 448C192 465.7 177.7 480 160 480C142.3 480 128 465.7 128 448V64C128 46.33 142.3 32 160 32C177.7 32 192 46.33 192 64V448z\"],\n    \"grip-vertical\": [320, 512, [], \"f58e\", \"M88 352C110.1 352 128 369.9 128 392V440C128 462.1 110.1 480 88 480H40C17.91 480 0 462.1 0 440V392C0 369.9 17.91 352 40 352H88zM280 352C302.1 352 320 369.9 320 392V440C320 462.1 302.1 480 280 480H232C209.9 480 192 462.1 192 440V392C192 369.9 209.9 352 232 352H280zM40 320C17.91 320 0 302.1 0 280V232C0 209.9 17.91 192 40 192H88C110.1 192 128 209.9 128 232V280C128 302.1 110.1 320 88 320H40zM280 192C302.1 192 320 209.9 320 232V280C320 302.1 302.1 320 280 320H232C209.9 320 192 302.1 192 280V232C192 209.9 209.9 192 232 192H280zM40 160C17.91 160 0 142.1 0 120V72C0 49.91 17.91 32 40 32H88C110.1 32 128 49.91 128 72V120C128 142.1 110.1 160 88 160H40zM280 32C302.1 32 320 49.91 320 72V120C320 142.1 302.1 160 280 160H232C209.9 160 192 142.1 192 120V72C192 49.91 209.9 32 232 32H280z\"],\n    \"guarani-sign\": [384, 512, [], \"e19a\", \"M224 32V66.66C263.5 73.3 299 92.03 326.4 118.9C339 131.3 339.2 151.5 326.9 164.1C314.5 176.8 294.2 176.1 281.6 164.6C265.8 149.1 246.1 137.7 224 132V224H352C369.7 224 384 238.3 384 256C384 351.1 314.8 430.1 224 445.3V480C224 497.7 209.7 512 192 512C174.3 512 160 497.7 160 480V445.3C69.19 430.1 0 351.1 0 256C0 160.9 69.19 81.89 160 66.65V32C160 14.33 174.3 0 192 0C209.7 0 224 14.33 224 32H224zM160 132C104.8 146.2 64 196.4 64 256C64 315.6 104.8 365.8 160 379.1V132zM224 379.1C268.1 368.4 304.4 332.1 315.1 288H224V379.1z\"],\n    \"guitar\": [512, 512, [], \"f7a6\", \"M502.7 39.02L473 9.37c-12.5-12.5-32.74-12.49-45.24 .0106l-46.24 46.37c-3.875 3.875-6.848 8.506-8.598 13.76l-12.19 36.51L284.5 182.3C272.4 173.5 259 166.5 244.4 163.1C211 155.4 177.4 162.3 154.5 185.1C145.3 194.5 138.3 206 134.3 218.6C128.3 237.1 111.1 251.3 92.14 253C68.52 255.4 46.39 264.5 29.52 281.5c-45.62 45.5-37.38 127.5 18.12 183c55.37 55.38 137.4 63.51 182.9 18c16.1-16.88 26.25-38.85 28.5-62.72c1.75-18.75 15.84-36.16 34.47-42.16c12.5-3.875 24.03-10.87 33.4-20.25c22.87-22.88 29.75-56.38 21.1-89.76c-3.375-14.63-10.39-27.99-19.14-40.11l76.25-76.26l36.53-12.17c5.125-1.75 9.894-4.715 13.77-8.59l46.36-46.29C515.2 71.72 515.2 51.52 502.7 39.02zM208 352c-26.5 0-48-21.5-48-48c0-26.5 21.5-48 48-48s47.1 21.5 47.1 48C256 330.5 234.5 352 208 352z\"],\n    \"gun\": [576, 512, [], \"e19b\", \"M544 64h-16V56C528 42.74 517.3 32 504 32S480 42.74 480 56V64H43.17C19.33 64 0 83.33 0 107.2v89.66C0 220.7 19.33 240 43.17 240c21.26 0 36.61 20.35 30.77 40.79l-40.69 158.4C27.41 459.6 42.76 480 64.02 480h103.8c14.29 0 26.84-9.469 30.77-23.21L226.4 352h94.58c24.16 0 45.5-15.41 53.13-38.28L398.6 240h36.1c8.486 0 16.62-3.369 22.63-9.373L480 208h64c17.67 0 32-14.33 32-32V96C576 78.33 561.7 64 544 64zM328.5 298.6C327.4 301.8 324.4 304 320.9 304H239.1L256 240h92.02L328.5 298.6zM480 160H64V128h416V160z\"],\n    \"h\": [384, 512, [104], \"48\", \"M384 64.01v384c0 17.67-14.33 32-32 32s-32-14.33-32-32v-192H64v192c0 17.67-14.33 32-32 32s-32-14.33-32-32v-384C0 46.34 14.33 32.01 32 32.01S64 46.34 64 64.01v128h256v-128c0-17.67 14.33-32 32-32S384 46.34 384 64.01z\"],\n    \"hammer\": [576, 512, [128296], \"f6e3\", \"M568.1 196.3l-22.62-22.62c-4.533-4.533-10.56-7.029-16.97-7.029s-12.44 2.496-16.97 7.029l-5.654 5.656l-20.12-20.12c4.596-23.46-2.652-47.9-19.47-64.73l-45.25-45.25C390.2 17.47 347.1 0 303.1 0C258.2 0 216 17.47 184.3 49.21L176.5 57.05L272.5 105.1v13.81c0 18.95 7.688 37.5 21.09 50.91l49.16 49.14c13.44 13.45 31.39 20.86 50.54 20.86c4.758 0 9.512-.4648 14.18-1.387l20.12 20.12l-5.654 5.654c-9.357 9.357-9.357 24.58-.002 33.94l22.62 22.62c4.535 4.533 10.56 7.031 16.97 7.031s12.44-2.498 16.97-7.031l90.53-90.5C578.3 220.8 578.3 205.6 568.1 196.3zM270.9 192.4c-3.846-3.846-7.197-8.113-10.37-12.49l-239.5 209.2c-28.12 28.12-28.16 73.72-.0371 101.8C35.12 505 53.56 512 71.1 512s36.84-7.031 50.91-21.09l209.1-239.4c-4.141-3.061-8.184-6.289-11.89-9.996L270.9 192.4z\"],\n    \"hamsa\": [512, 512, [], \"f665\", \"M509.4 307.2C504.3 295.5 492.8 288 480 288h-64l.0001-208c0-21.1-18-40-40-40c-22 0-40 18-40 40l-.0001 134C336 219.5 331.5 224 326 224h-20c-5.5 0-10-4.5-10-9.1V40c0-21.1-17.1-40-39.1-40S215.1 18 215.1 40v174C215.1 219.5 211.5 224 205.1 224H185.1C180.5 224 175.1 219.5 175.1 214L175.1 80c0-21.1-18-40-40-40S95.1 58 95.1 80L95.1 288H31.99C19.24 288 7.743 295.5 2.618 307.2C-2.382 318.9-.1322 332.5 8.618 341.9l102.6 110C146.1 490.1 199.8 512 256 512s108.1-21.88 144.8-60.13l102.6-110C512.1 332.5 514.4 318.9 509.4 307.2zM256 416c-53 0-96.01-64-96.01-64s43-64 96.01-64s96.01 64 96.01 64S309 416 256 416zM256 320c-17.63 0-32 14.38-32 32s14.38 32 32 32s32-14.38 32-32S273.6 320 256 320z\"],\n    \"hand\": [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M480 128v208c0 97.05-78.95 176-176 176h-37.72c-53.42 0-103.7-20.8-141.4-58.58l-113.1-113.1C3.906 332.5 0 322.2 0 312C0 290.7 17.15 272 40 272c10.23 0 20.47 3.906 28.28 11.72L128 343.4V64c0-17.67 14.33-32 32-32s32 14.33 32 32l.0729 176C192.1 248.8 199.2 256 208 256s16.07-7.164 16.07-16L224 32c0-17.67 14.33-32 32-32s32 14.33 32 32l.0484 208c0 8.836 7.111 16 15.95 16S320 248.8 320 240L320 64c0-17.67 14.33-32 32-32s32 14.33 32 32l.0729 176c0 8.836 7.091 16 15.93 16S416 248.8 416 240V128c0-17.67 14.33-32 32-32S480 110.3 480 128z\"],\n    \"hand-back-fist\": [448, 512, [\"hand-rock\"], \"f255\", \"M448 144v120.4C448 314.2 422.6 358.1 384 384v128H128v-128l-53.19-38.67C48 325.8 32 294.3 32 261.2V192c0-14.58 6.625-28.38 17.1-37.48L80 130.5V176C80 184.8 87.16 192 96 192s16-7.164 16-16v-128C112 21.48 133.5 0 160 0c25.38 0 45.96 19.77 47.67 44.73C216.2 36.9 227.5 32 240 32C266.5 32 288 53.48 288 80v5.531C296.6 72.57 311.3 64 328 64c23.47 0 42.94 16.87 47.11 39.14C382.4 98.7 390.9 96 400 96C426.5 96 448 117.5 448 144z\"],\n    \"hand-dots\": [512, 512, [\"allergies\"], \"f461\", \"M448 96c-17.67 0-32 14.33-32 32v112C416 248.8 408.8 256 400 256s-15.93-7.164-15.93-16L384 64c0-17.67-14.33-32-32-32s-32 14.33-32 32l.0498 176c0 8.836-7.219 16-16.06 16s-15.95-7.164-15.95-16L288 32c0-17.67-14.33-32-32-32S224 14.33 224 32l.0729 208C224.1 248.8 216.8 256 208 256S192.1 248.8 192.1 240L192 64c0-17.67-14.33-32-32-32S128 46.33 128 64v279.4L68.28 283.7C60.47 275.9 50.23 272 40 272C18.68 272 0 289.2 0 312c0 10.23 3.906 20.47 11.72 28.28l113.1 113.1C162.6 491.2 212.9 512 266.3 512H304c97.05 0 176-78.95 176-176V128C480 110.3 465.7 96 448 96zM192 416c-8.836 0-16-7.164-16-16C176 391.2 183.2 384 192 384s16 7.162 16 16C208 408.8 200.8 416 192 416zM256 448c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C272 440.8 264.8 448 256 448zM256 352c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C272 344.8 264.8 352 256 352zM320 384c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C336 376.8 328.8 384 320 384zM352 448c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C368 440.8 360.8 448 352 448zM384 352c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16s16 7.162 16 16C400 344.8 392.8 352 384 352z\"],\n    \"hand-fist\": [448, 512, [9994, \"fist-raised\"], \"f6de\", \"M224 180.4V32c0-17.67-14.31-32-32-32S160 14.33 160 32v144h40C208.5 176 216.5 177.7 224 180.4zM128 176V64c0-17.67-14.31-32-32-32S64 46.33 64 64v112.8C66.66 176.5 69.26 176 72 176H128zM288 192c17.69 0 32-14.33 32-32V64c0-17.67-14.31-32-32-32s-32 14.33-32 32v96C256 177.7 270.3 192 288 192zM384 96c-17.69 0-32 14.33-32 32v64c0 17.67 14.31 32 32 32s32-14.34 32-32.02V128C416 110.3 401.7 96 384 96zM350.9 246.2c-12.43-7.648-21.94-19.31-26.88-33.25C313.7 219.9 301.3 223.9 288 223.9c-7.641 0-14.87-1.502-21.66-3.957C269.1 228.6 272 238.1 272 248c0 39.77-32.25 72-72 72H128c-8.836 0-16-7.164-16-16C112 295.2 119.2 288 128 288h72c22.09 0 40-17.91 40-40S222.1 208 200 208h-128C49.91 208 32 225.9 32 248v63.41c0 33.13 16 64.56 42.81 84.13L128 434.2V512h224v-85.09c38.3-24.09 64-66.42 64-114.9V247.1C406.6 252.6 395.7 256 384 256C371.7 256 360.5 252.2 350.9 246.2z\"],\n    \"hand-holding\": [576, 512, [], \"f4bd\", \"M559.7 392.2l-135.1 99.51C406.9 504.8 385 512 362.1 512H15.1c-8.749 0-15.1-7.246-15.1-15.99l0-95.99c0-8.748 7.25-16.02 15.1-16.02l55.37 .0238l46.5-37.74c20.1-16.1 47.12-26.25 74.12-26.25h159.1c19.5 0 34.87 17.37 31.62 37.37c-2.625 15.75-17.37 26.62-33.37 26.62H271.1c-8.749 0-15.1 7.249-15.1 15.1s7.25 15.1 15.1 15.1h120.6l119.7-88.17c17.8-13.19 42.81-9.342 55.93 8.467C581.3 354.1 577.5 379.1 559.7 392.2z\"],\n    \"hand-holding-dollar\": [576, 512, [\"hand-holding-usd\"], \"f4c0\", \"M568.2 336.3c-13.12-17.81-38.14-21.66-55.93-8.469l-119.7 88.17h-120.6c-8.748 0-15.1-7.25-15.1-15.99c0-8.75 7.25-16 15.1-16h78.25c15.1 0 30.75-10.88 33.37-26.62c3.25-20-12.12-37.38-31.62-37.38H191.1c-26.1 0-53.12 9.25-74.12 26.25l-46.5 37.74L15.1 383.1C7.251 383.1 0 391.3 0 400v95.98C0 504.8 7.251 512 15.1 512h346.1c22.03 0 43.92-7.188 61.7-20.27l135.1-99.52C577.5 379.1 581.3 354.1 568.2 336.3zM279.3 175C271.7 173.9 261.7 170.3 252.9 167.1L248 165.4C235.5 160.1 221.8 167.5 217.4 179.1s2.121 26.2 14.59 30.64l4.655 1.656c8.486 3.061 17.88 6.095 27.39 8.312V232c0 13.25 10.73 24 23.98 24s24-10.75 24-24V221.6c25.27-5.723 42.88-21.85 46.1-45.72c8.688-50.05-38.89-63.66-64.42-70.95L288.4 103.1C262.1 95.64 263.6 92.42 264.3 88.31c1.156-6.766 15.3-10.06 32.21-7.391c4.938 .7813 11.37 2.547 19.65 5.422c12.53 4.281 26.21-2.312 30.52-14.84s-2.309-26.19-14.84-30.53c-7.602-2.627-13.92-4.358-19.82-5.721V24c0-13.25-10.75-24-24-24s-23.98 10.75-23.98 24v10.52C238.8 40.23 221.1 56.25 216.1 80.13C208.4 129.6 256.7 143.8 274.9 149.2l6.498 1.875c31.66 9.062 31.15 11.89 30.34 16.64C310.6 174.5 296.5 177.8 279.3 175z\"],\n    \"hand-holding-droplet\": [576, 512, [\"hand-holding-water\"], \"f4c1\", \"M287.1 256c53 0 95.1-42.13 95.1-93.1c0-40-57.12-120.8-83.25-155.6c-6.375-8.5-19.12-8.5-25.5 0C249.1 41.25 191.1 122 191.1 162C191.1 213.9 234.1 256 287.1 256zM568.2 336.3c-13.12-17.81-38.14-21.66-55.93-8.469l-119.7 88.17h-120.6c-8.748 0-15.1-7.25-15.1-15.99c0-8.75 7.25-16 15.1-16h78.25c15.1 0 30.75-10.88 33.37-26.62c3.25-20-12.12-37.38-31.62-37.38H191.1c-26.1 0-53.12 9.25-74.12 26.25l-46.5 37.74L15.1 383.1c-8.748 0-15.1 7.274-15.1 16.02L.0001 496C.0001 504.8 7.251 512 15.1 512h346.1c22.03 0 43.92-7.188 61.7-20.27l135.1-99.52C577.5 379.1 581.3 354.1 568.2 336.3z\"],\n    \"hand-holding-heart\": [576, 512, [], \"f4be\", \"M275.2 250.5c7 7.375 18.5 7.375 25.5 0l108.1-114.2c31.5-33.12 29.72-88.1-5.65-118.7c-30.88-26.75-76.75-21.9-104.9 7.724L287.1 36.91L276.8 25.28C248.7-4.345 202.7-9.194 171.1 17.56C136.7 48.18 134.7 103.2 166.4 136.3L275.2 250.5zM568.2 336.3c-13.12-17.81-38.14-21.66-55.93-8.469l-119.7 88.17h-120.6c-8.748 0-15.1-7.25-15.1-15.1c0-8.746 7.25-15.1 15.1-15.1h78.25c15.1 0 30.75-10.87 33.37-26.62c3.25-19.1-12.12-37.37-31.62-37.37H191.1c-26.1 0-53.12 9.25-74.12 26.25l-46.5 37.74l-55.37-.0253c-8.748 0-15.1 7.275-15.1 16.02L.0001 496C.0001 504.8 7.251 512 15.1 512h346.1c22.03 0 43.92-7.187 61.7-20.28l135.1-99.51C577.5 379.1 581.3 354.1 568.2 336.3z\"],\n    \"hand-holding-medical\": [576, 512, [], \"e05c\", \"M568.2 336.3c-13.12-17.81-38.14-21.66-55.93-8.469l-119.7 88.17h-120.6c-8.748 0-15.1-7.25-15.1-15.99c0-8.75 7.25-16 15.1-16h78.25c15.1 0 30.75-10.88 33.37-26.62c3.25-20-12.12-37.38-31.62-37.38H191.1c-26.1 0-53.12 9.25-74.12 26.25l-46.5 37.74L15.1 383.1C7.251 383.1 0 391.3 0 400v95.98C0 504.8 7.251 512 15.1 512h346.1c22.03 0 43.92-7.188 61.7-20.27l135.1-99.52C577.5 379.1 581.3 354.1 568.2 336.3zM160 176h64v64C224 248.8 231.2 256 240 256h64C312.8 256 320 248.8 320 240v-64h64c8.836 0 16-7.164 16-16V96c0-8.838-7.164-16-16-16h-64v-64C320 7.162 312.8 0 304 0h-64C231.2 0 224 7.162 224 16v64H160C151.2 80 144 87.16 144 96v64C144 168.8 151.2 176 160 176z\"],\n    \"hand-lizard\": [512, 512, [], \"f258\", \"M512 329.1V432c0 8.836-7.164 16-16 16H368c-8.836 0-16-7.164-16-16V416l-85.33-64H95.1c-16.47 0-31.44-13.44-31.96-29.9C62.87 285.8 91.96 256 127.1 256h104.9c13.77 0 26-8.811 30.36-21.88l10.67-32C280.9 181.4 265.4 160 243.6 160H63.1C27.95 160-1.129 130.2 .0352 93.9C.5625 77.44 15.53 64 31.1 64h271.2c26.26 0 50.84 12.88 65.79 34.47l128.8 185.1C507 297.8 512 313.7 512 329.1z\"],\n    \"hand-middle-finger\": [448, 512, [128405], \"f806\", \"M448 288v96c0 70.69-57.31 128-128 128H184c-50.35 0-97.76-23.7-127.1-63.98l-14.43-19.23C35.37 420.5 32 410.4 32 400v-48.02c0-14.58 6.629-28.37 18.02-37.48L80 290.5V336C80 344.8 87.16 352 96 352s16-7.164 16-16v-96C112 213.5 133.5 192 160 192s48 21.48 48 48V40C208 17.91 225.9 0 248 0S288 17.91 288 40v189.5C296.6 216.6 311.3 208 328 208c23.48 0 42.94 16.87 47.11 39.14C382.4 242.7 390.8 240 400 240C426.5 240 448 261.5 448 288z\"],\n    \"hand-peace\": [512, 512, [9996], \"f25b\", \"M256 287.4V32c0-17.67-14.31-32-32-32S192 14.33 192 32v216.3C218.7 248.4 243.7 263.1 256 287.4zM170.8 251.2c2.514-.7734 5.043-1.027 7.57-1.516L93.41 51.39C88.21 39.25 76.34 31.97 63.97 31.97c-20.97 0-31.97 18.01-31.97 32.04c0 4.207 .8349 8.483 2.599 12.6l81.97 191.3L170.8 251.2zM416 224c-17.69 0-32 14.33-32 32v64c0 17.67 14.31 32 32 32s32-14.33 32-32V256C448 238.3 433.7 224 416 224zM320 352c17.69 0 32-14.33 32-32V224c0-17.67-14.31-32-32-32s-32 14.33-32 32v96C288 337.7 302.3 352 320 352zM368 361.9C356.3 375.3 339.2 384 320 384c-27.41 0-50.62-17.32-59.73-41.55c-7.059 21.41-23.9 39.23-47.08 46.36l-47.96 14.76c-1.562 .4807-3.147 .7105-4.707 .7105c-6.282 0-12.18-3.723-14.74-9.785c-.8595-2.038-1.264-4.145-1.264-6.213c0-6.79 4.361-13.16 11.3-15.3l46.45-14.29c17.2-5.293 29.76-20.98 29.76-38.63c0-34.19-32.54-40.07-40.02-40.07c-3.89 0-7.848 .5712-11.76 1.772l-104 32c-18.23 5.606-28.25 22.21-28.25 38.22c0 4.266 .6825 8.544 2.058 12.67L68.19 419C86.71 474.5 138.7 512 197.2 512H272c82.54 0 151.8-57.21 170.7-134C434.6 381.8 425.6 384 416 384C396.8 384 379.7 375.3 368 361.9z\"],\n    \"hand-point-down\": [448, 512, [], \"f0a7\", \"M256 256v64c0 17.67 14.31 32 32 32s32-14.33 32-32V256c0-17.67-14.31-32-32-32S256 238.3 256 256zM200 272H160V352c0 17.67 14.31 32 32 32s32-14.33 32-32V267.6C216.5 270.3 208.5 272 200 272zM72 272C69.26 272 66.66 271.5 64 271.2V480c0 17.67 14.31 32 32 32s32-14.33 32-32V272H72zM416 288V224c0-17.67-14.31-32-32-32s-32 14.33-32 32v64c0 17.67 14.31 32 32 32S416 305.7 416 288zM384 160c11.72 0 22.55 3.381 32 8.879V136C416 60.89 355.1 0 280 0L191.3 0C162.5 0 134.5 9.107 111.2 26.02L74.81 52.47C48 72.03 32 103.5 32 136.6V200C32 222.1 49.91 240 72 240h128c22.09 0 39.1-17.91 39.1-39.1c0-28.73-26.72-40-42.28-40l-69.72 0C119.2 160 112 152.8 112 144S119.2 128 127.1 128H200c37.87 0 68.59 29.35 71.45 66.51C276.8 193.1 282.2 192 288 192c13.28 0 25.6 4.047 35.83 10.97C332.6 178 356.1 160 384 160z\"],\n    \"hand-point-left\": [512, 512, [], \"f0a5\", \"M256 288H192c-17.67 0-32 14.31-32 32s14.33 32 32 32h64c17.67 0 32-14.31 32-32S273.7 288 256 288zM240 232V192H160C142.3 192 128 206.3 128 224s14.33 32 32 32h84.41C241.7 248.5 240 240.5 240 232zM240 104C240 101.3 240.5 98.66 240.8 96H32C14.33 96 0 110.3 0 128s14.33 32 32 32h208V104zM224 448h64c17.67 0 32-14.31 32-32s-14.33-32-32-32H224c-17.67 0-32 14.31-32 32S206.3 448 224 448zM352 416c0 11.72-3.381 22.55-8.879 32H376C451.1 448 512 387.1 512 312V223.3c0-28.76-9.107-56.79-26.02-80.06l-26.45-36.41C439.1 80 408.5 64 375.4 64H312c-22.09 0-40 17.91-40 40v128c0 22.09 17.91 39.1 39.1 39.1c28.73 0 40-26.72 40-42.28L352 159.1C352 151.2 359.2 144 368 144S384 151.2 384 159.1V232c0 37.87-29.35 68.59-66.51 71.45C318.9 308.8 320 314.2 320 320c0 13.28-4.047 25.6-10.97 35.83C333.1 364.6 352 388.1 352 416z\"],\n    \"hand-point-right\": [512, 512, [], \"f0a4\", \"M224 320c0 17.69 14.33 32 32 32h64c17.67 0 32-14.31 32-32s-14.33-32-32-32h-64C238.3 288 224 302.3 224 320zM267.6 256H352c17.67 0 32-14.31 32-32s-14.33-32-32-32h-80v40C272 240.5 270.3 248.5 267.6 256zM272 160H480c17.67 0 32-14.31 32-32s-14.33-32-32-32h-208.8C271.5 98.66 272 101.3 272 104V160zM320 416c0-17.69-14.33-32-32-32H224c-17.67 0-32 14.31-32 32s14.33 32 32 32h64C305.7 448 320 433.7 320 416zM202.1 355.8C196 345.6 192 333.3 192 320c0-5.766 1.08-11.24 2.51-16.55C157.4 300.6 128 269.9 128 232V159.1C128 151.2 135.2 144 143.1 144S160 151.2 159.1 159.1l0 69.72C159.1 245.2 171.3 271.1 200 271.1C222.1 271.1 240 254.1 240 232v-128C240 81.91 222.1 64 200 64H136.6C103.5 64 72.03 80 52.47 106.8L26.02 143.2C9.107 166.5 0 194.5 0 223.3V312C0 387.1 60.89 448 136 448h32.88C163.4 438.6 160 427.7 160 416C160 388.1 178 364.6 202.1 355.8z\"],\n    \"hand-point-up\": [448, 512, [9757], \"f0a6\", \"M288 288c17.69 0 32-14.33 32-32V192c0-17.67-14.31-32-32-32s-32 14.33-32 32v64C256 273.7 270.3 288 288 288zM224 244.4V160c0-17.67-14.31-32-32-32S160 142.3 160 160v80h40C208.5 240 216.5 241.7 224 244.4zM128 240V32c0-17.67-14.31-32-32-32S64 14.33 64 32v208.8C66.66 240.5 69.26 240 72 240H128zM384 192c-17.69 0-32 14.33-32 32v64c0 17.67 14.31 32 32 32s32-14.33 32-32V224C416 206.3 401.7 192 384 192zM323.8 309C313.6 315.1 301.3 320 288 320c-5.766 0-11.24-1.08-16.55-2.51C268.6 354.6 237.9 384 200 384H127.1C119.2 384 112 376.8 112 368S119.2 352 127.1 352l69.72 .0001c15.52 0 42.28-11.29 42.28-40C239.1 289.9 222.1 272 200 272h-128C49.91 272 32 289.9 32 312v63.41c0 33.13 16 64.56 42.81 84.13l36.41 26.45C134.5 502.9 162.5 512 191.3 512H280c75.11 0 136-60.89 136-136v-32.88C406.6 348.6 395.7 352 384 352C356.1 352 332.6 333.1 323.8 309z\"],\n    \"hand-pointer\": [448, 512, [], \"f25a\", \"M400 224c-9.148 0-17.62 2.697-24.89 7.143C370.9 208.9 351.5 192 328 192c-17.38 0-32.46 9.33-40.89 23.17C282.1 192.9 263.5 176 240 176c-12.35 0-23.49 4.797-32 12.46V40c0-22.09-17.9-40-39.1-40C145.9 0 128 17.91 128 40v322.7L72 288C64.15 277.5 52.13 272 39.97 272c-21.22 0-39.97 17.06-39.97 40.02c0 8.356 2.608 16.78 8.005 23.98l91.22 121.6C124.8 491.7 165.5 512 208 512h96C383.4 512 448 447.4 448 368v-96C448 245.5 426.5 224 400 224zM240 400c0 8.844-7.156 16-16 16s-16-7.156-16-16v-96C208 295.2 215.2 288 224 288s16 7.156 16 16V400zM304 400c0 8.844-7.156 16-16 16s-16-7.156-16-16v-96C272 295.2 279.2 288 288 288s16 7.156 16 16V400zM368 400c0 8.844-7.156 16-16 16s-16-7.156-16-16v-96C336 295.2 343.2 288 352 288s16 7.156 16 16V400z\"],\n    \"hand-scissors\": [512, 512, [], \"f257\", \"M512 192v111.1C512 383.4 447.4 448 368 448H288c-26.52 0-48-21.48-48-47.99c0-9.152 2.697-17.61 7.139-24.89C224.9 370.1 208 351.5 208 328c0-16.72 8.561-31.4 21.52-39.1H40c-22.09 0-40-17.9-40-39.99s17.91-39.1 40-39.1h229.5L60 142.2C42.93 136.8 31.99 121.1 31.99 104c0-3.973 .5967-8.014 1.851-12.01c5.35-17.07 21.08-28.04 38.06-28.04c4 0 8.071 .6085 12.09 1.889l279.2 87.22C364.8 153.6 366.4 153.8 368 153.8c6.812 0 13.12-4.375 15.27-11.23c.4978-1.588 .7346-3.195 .7346-4.777c0-6.807-4.388-13.12-11.23-15.25l-72.54-22.67l14.29-17.85C323.6 70.67 337.4 64.04 352 64.04h48c10.39 0 20.48 3.359 28.8 9.592l38.41 28.79c25.2 18.91 40.53 47.97 43.55 79.04C511.5 184.9 512 188.4 512 192z\"],\n    \"hand-sparkles\": [640, 512, [], \"e05d\", \"M448 432c0-14.25 8.547-28.14 21.28-34.55l39.56-16.56l15.64-37.52c4.461-9.037 11.45-15.37 19.43-19.23L544 128c0-17.67-14.33-32-32-32s-32 14.33-32 32l-.0156 112c0 8.836-7.148 16-15.98 16s-16.07-7.164-16.07-16L448 64c0-17.67-14.33-32-32-32s-32 14.33-32 32l-.0635 176c0 8.836-7.106 16-15.94 16S351.9 248.8 351.9 240L352 32c0-17.67-14.33-32-32-32S288 14.33 288 32L287.9 240C287.9 248.8 280.8 256 272 256S255.9 248.8 255.9 240L256 64c0-17.67-14.33-32-32-32S192 46.33 192 64v279.4L132.3 283.7C124.5 275.9 114.2 272 104 272C82.68 272 64 289.2 64 312c0 10.23 3.906 20.47 11.72 28.28l113.1 113.1C226.6 491.2 276.9 512 330.3 512H368c42.72 0 81.91-15.32 112.4-40.73l-9.049-3.773C456.6 460.1 448 446.3 448 432zM349.8 371.6L320 383.1l-12.42 29.78C306.1 415 305.4 416 304 416s-2.969-.9941-3.578-2.219L288 383.1l-29.79-12.42C256.1 370.1 256 369.4 256 367.1c0-1.365 .9922-2.967 2.209-3.577L288 352l12.42-29.79C301 320.1 302.6 320 304 320s2.967 .9902 3.578 2.217L320 352l29.79 12.42C351 365 352 366.6 352 367.1C352 369.4 351 370.1 349.8 371.6zM80 224c2.277 0 4.943-1.656 5.959-3.699l20.7-49.63l49.65-20.71c2.027-1.014 3.682-3.696 3.686-5.958C159.1 141.7 158.3 139.1 156.3 138L106.7 117.4L85.96 67.7C84.94 65.65 82.28 64 80 64C77.72 64 75.05 65.65 74.04 67.7L53.34 117.3L3.695 138C1.668 139.1 .0117 141.7 .0078 143.1c.0039 2.262 1.662 4.953 3.688 5.967l49.57 20.67l20.77 49.67C75.05 222.3 77.72 224 80 224zM639.1 432c-.0039-2.275-1.657-4.952-3.687-5.968l-49.57-20.67l-20.77-49.67C564.9 353.7 562.3 352 560 352c-2.281 0-4.959 1.652-5.975 3.695l-20.7 49.63l-49.64 20.71c-2.027 1.016-3.682 3.683-3.686 5.958c.0039 2.262 1.661 4.954 3.686 5.968l49.57 20.67l20.77 49.67C555.1 510.3 557.7 512 560 512c2.277 0 4.933-1.656 5.949-3.699l20.7-49.63l49.65-20.71C638.3 436.9 639.1 434.3 639.1 432z\"],\n    \"hand-spock\": [576, 512, [128406], \"f259\", \"M543.6 128.6c0-8.999-6.115-32.58-31.68-32.58c-14.1 0-27.02 9.324-30.92 23.56l-34.36 125.1c-1.682 6.16-7.275 10.43-13.66 10.43c-7.981 0-14.16-6.518-14.16-14.13c0-.9844 .1034-1.987 .3197-2.996l35.71-166.6c.5233-2.442 .7779-4.911 .7779-7.362c0-13.89-9.695-32.86-31.7-32.86c-14.79 0-28.12 10.26-31.34 25.29l-37.77 176.2c-2.807 13.1-14.38 22.46-27.77 22.46c-13.04 0-24.4-8.871-27.56-21.52l-52.11-208.5C243.6 11.2 230.5-.0013 215.6-.0013c-26.71 0-31.78 25.71-31.78 31.98c0 2.569 .3112 5.18 .9617 7.786l50.55 202.2c.2326 .9301 .3431 1.856 .3431 2.764c0 6.051-4.911 11.27-11.3 11.27c-4.896 0-9.234-3.154-10.74-7.812L166.9 103.9C162.4 89.1 149.5 80.02 135.5 80.02c-15.68 0-31.63 12.83-31.63 31.97c0 3.273 .5059 6.602 1.57 9.884l69.93 215.7c.2903 .8949 .4239 1.766 .4239 2.598c0 4.521-3.94 7.915-8.119 7.915c-1.928 0-3.906-.7219-5.573-2.388L101.7 285.3c-8.336-8.336-19.63-12.87-30.81-12.87c-23.56 0-39.07 19.69-39.07 39.55c0 10.23 3.906 20.47 11.72 28.28l122.5 122.5C197.6 494.3 240.3 512 284.9 512h50.98c23.5 0 108.4-14.57 132.5-103l73.96-271.2C543.2 134.8 543.6 131.7 543.6 128.6z\"],\n    \"hands\": [512, 512, [\"sign-language\", \"signing\"], \"f2a7\", \"M330.8 242.3L223.1 209.1C210.3 205.2 197 212.3 193.1 224.9C189.2 237.6 196.3 251 208.9 254.9L256 272H56.9c-11.61 0-22.25 7.844-24.44 19.24C29.51 306.6 41.19 320 56 320h128C188.4 320 192 323.6 192 328S188.4 336 184 336H24.9c-11.61 0-22.25 7.844-24.44 19.24C-2.49 370.6 9.193 384 24 384h160C188.4 384 192 387.6 192 392S188.4 400 184 400H56.9c-11.61 0-22.25 7.844-24.44 19.24C29.51 434.6 41.19 448 56 448h128C188.4 448 192 451.6 192 456S188.4 464 184 464H88.9c-11.61 0-22.25 7.844-24.44 19.24C61.51 498.6 73.19 512 88 512h208c66.28 0 120-53.73 120-120v-32.03C416 306.6 381.1 259.4 330.8 242.3zM197.1 179.5c5.986-2.148 12.32-3.482 18.98-3.482c5.508 0 10.99 .8105 16.5 2.471l16.11 4.975L227.7 117.2C224.2 106.2 213.6 98.39 202 99.74c-15.51 1.807-24.79 16.99-20.33 31.11L197.1 179.5zM487.1 144.5c-13.27 .0977-23.95 10.91-23.86 24.16l-2.082 50.04l-59.98-189.8c-3.496-11.07-14.18-18.86-25.71-17.51c-15.51 1.807-24.79 16.99-20.33 31.11l38.56 122.1c1.332 4.213-1.004 8.707-5.219 10.04c-4.213 1.332-8.707-1.004-10.04-5.217l-47.93-151.7c-3.496-11.07-14.18-18.86-25.71-17.51c-15.51 1.807-24.79 16.99-20.33 31.11l43.37 137.8c1.33 4.213-1.006 8.707-5.219 10.04c-4.213 1.332-8.707-1.004-10.04-5.217l-33.46-106.4C275.6 56.39 264.9 48.6 253.4 49.94c-15.51 1.807-24.79 16.99-20.33 31.11l34.15 108.1l73.7 22.76C404.1 233.3 448 292.8 448 359.9v27.91c38.27-21.17 63.28-61.24 64-106.7V168.4C511.8 155.1 500.3 144.5 487.1 144.5z\"],\n    \"hands-asl-interpreting\": [640, 512, [\"american-sign-language-interpreting\", \"asl-interpreting\", \"hands-american-sign-language-interpreting\"], \"f2a3\", \"M200 240c16.94 0 32.09 10.72 37.73 26.67c5.891 16.66 24.17 25.39 40.84 19.5c16.66-5.891 25.39-24.17 19.5-40.84C287.2 214.7 262.8 191.6 233.1 181.5l79.68-22.76c16.98-4.859 26.83-22.56 21.97-39.56C329.9 102.2 312.2 92.35 295.2 97.24L196 125.6l80.82-69.28c13.42-11.5 14.97-31.7 3.469-45.12C268.8-2.24 248.6-3.803 235.2 7.713l-100.4 86.09l22.33-48.39c7.391-16.05 .3906-35.06-15.66-42.47C125.4-4.412 106.4 2.525 98.94 18.6L14.92 206.6C5.082 228.6 0 252.5 0 276.6C0 335.9 48.1 384 107.4 384l99.9-.0064c31.87-2.289 61.15-19.35 79.13-46.18c9.828-14.69 5.891-34.56-8.781-44.41C263 283.6 243.1 287.5 233.3 302.2C225.8 313.3 213.4 320 200 320c-22.06 0-40-17.94-40-40C160 257.9 177.9 240 200 240zM532.6 128l-99.9 .004c-31.87 2.289-61.15 19.35-79.13 46.18c-9.828 14.69-5.891 34.56 8.781 44.41c14.66 9.812 34.55 5.906 44.41-8.781C414.2 198.7 426.6 191.1 440 191.1c22.06 0 40 17.94 40 40c0 22.06-17.94 39.1-40 39.1c-16.94 0-32.09-10.72-37.73-26.67c-5.891-16.66-24.17-25.39-40.84-19.5c-16.66 5.891-25.39 24.17-19.5 40.84c10.84 30.64 35.23 53.77 64.96 63.8l-79.68 22.76c-16.98 4.859-26.83 22.56-21.97 39.56c4.844 16.98 22.56 26.86 39.56 21.97l99.2-28.34l-80.82 69.28c-13.42 11.5-14.97 31.7-3.469 45.12c11.52 13.42 31.73 14.98 45.13 3.469l100.4-86.09l-22.33 48.39c-7.391 16.05-.3906 35.06 15.66 42.47c16.02 7.359 35.05 .4219 42.47-15.65l84.02-188C634.9 283.4 640 259.5 640 235.4C640 176.1 591.9 128 532.6 128z\"],\n    \"hands-bubbles\": [576, 512, [\"hands-wash\"], \"e05e\", \"M416 64c17.67 0 32-14.33 32-31.1c0-17.67-14.33-32-32-32c-17.67 0-32 14.33-32 32C384 49.67 398.3 64 416 64zM519.1 336H360c-4.418 0-8-3.582-8-8s3.582-8 8-8h128c14.81 0 26.49-13.42 23.54-28.76c-2.191-11.4-12.84-19.24-24.44-19.24H288l47.09-17.06c12.66-3.906 19.75-17.34 15.84-30.03c-3.938-12.62-17.28-19.69-30.03-15.84L213.2 242.3C162 259.4 128 306.6 128 359.1v25.65c36.47 7.434 64 39.75 64 78.38c0 10.71-2.193 20.91-6.031 30.25C204.1 505.3 225.2 512 248 512h208c14.81 0 26.49-13.42 23.54-28.76c-2.191-11.4-12.84-19.24-24.44-19.24H360c-4.418 0-8-3.582-8-8s3.582-8 8-8h128c14.81 0 26.49-13.42 23.54-28.76c-2.191-11.4-12.84-19.24-24.44-19.24H360c-4.418 0-8-3.582-8-8s3.582-8 8-8h160c14.81 0 26.49-13.42 23.54-28.76C541.3 343.8 530.7 336 519.1 336zM311.5 178.4c5.508-1.66 10.99-2.471 16.5-2.471c6.662 0 12.1 1.334 18.98 3.482l15.36-48.61c4.461-14.12-4.82-29.3-20.33-31.11c-11.53-1.344-22.21 6.443-25.71 17.51l-20.9 66.17L311.5 178.4zM496 224c26.51 0 48-21.49 48-47.1s-21.49-48-48-48S448 149.5 448 176S469.5 224 496 224zM93.65 386.3C94.45 386.1 95.19 385.8 96 385.6v-25.69c0-67.17 43.03-126.7 107.1-148l73.7-22.76l34.15-108.1c4.459-14.12-4.82-29.3-20.33-31.11C279.1 48.6 268.4 56.39 264.9 67.46L231.4 173.9c-1.332 4.213-5.826 6.549-10.04 5.217C217.2 177.8 214.8 173.3 216.2 169.1l43.37-137.8c4.461-14.12-4.82-29.3-20.33-31.11c-11.53-1.344-22.21 6.445-25.71 17.51L165.6 169.4C164.2 173.6 159.7 175.9 155.5 174.6C151.3 173.3 148.1 168.8 150.3 164.6l38.56-122.1c4.459-14.12-4.82-29.3-20.33-31.11C157 10.04 146.3 17.83 142.8 28.9L82.84 218.7L80.76 168.7C80.85 155.5 70.17 144.6 56.9 144.5C43.67 144.5 32.18 155.1 32 168.4v112.7C32.71 325.6 56.76 364.8 93.65 386.3zM112 416c-26.51 0-48 21.49-48 47.1s21.49 48 48 48S160 490.5 160 464S138.5 416 112 416z\"],\n    \"hands-clapping\": [512, 512, [], \"e1a8\", \"M320 96c8.844 0 16-7.156 16-16v-64C336 7.156 328.8 0 320 0s-16 7.156-16 16v64C304 88.84 311.2 96 320 96zM383.4 96c5.125 0 10.16-2.453 13.25-7.016l32.56-48c1.854-2.746 2.744-5.865 2.744-8.951c0-8.947-7.273-16.04-15.97-16.04c-5.125 0-10.17 2.465-13.27 7.02l-32.56 48C368.3 73.76 367.4 76.88 367.4 79.97C367.4 88.88 374.7 96 383.4 96zM384 357.5l0-163.9c0-6.016-4.672-33.69-32-33.69c-17.69 0-32.07 14.33-32.07 31.1L320 268.1L169.2 117.3C164.5 112.6 158.3 110.3 152.2 110.3c-13.71 0-24 11.21-24 24c0 6.141 2.344 12.28 7.031 16.97l89.3 89.3C227.4 243.4 228.9 247.2 228.9 251c0 3.8-1.45 7.6-4.349 10.5c-2.899 2.899-6.7 4.349-10.5 4.349c-3.8 0-7.6-1.45-10.5-4.349l-107.6-107.6C91.22 149.2 85.08 146.9 78.94 146.9c-13.71 0-24 11.21-24 24c0 6.141 2.344 12.28 7.031 16.97l107.6 107.6C172.5 298.4 173.9 302.2 173.9 305.1c0 3.8-1.45 7.6-4.349 10.5c-2.899 2.9-6.7 4.349-10.5 4.349c-3.8 0-7.6-1.45-10.5-4.349L59.28 227.2C54.59 222.5 48.45 220.1 42.31 220.1c-13.71 0-24 11.21-24 24c0 6.141 2.344 12.28 7.031 16.97l89.3 89.3c2.9 2.899 4.349 6.7 4.349 10.5c0 3.8-1.45 7.6-4.349 10.5c-2.899 2.899-6.7 4.349-10.5 4.349c-3.8 0-7.6-1.45-10.5-4.349L40.97 318.7C36.28 314 30.14 311.7 24 311.7c-13.71 0-23.99 11.26-23.99 24.05c0 6.141 2.332 12.23 7.02 16.92C112.6 458.2 151.3 512 232.3 512C318.1 512 384 440.9 384 357.5zM243.3 88.98C246.4 93.55 251.4 96 256.6 96c8.762 0 15.99-7.117 15.99-16.03c0-3.088-.8906-6.205-2.744-8.951l-32.56-48C234.2 18.46 229.1 15.98 223.1 15.98c-8.664 0-15.98 7.074-15.98 16.05c0 3.086 .8906 6.205 2.744 8.951L243.3 88.98zM480 160c-17.69 0-32 14.33-32 32v76.14l-32-32v121.4c0 94.01-63.31 141.5-78.32 152.2C345.1 510.9 352.6 512 360.3 512C446.1 512 512 440.9 512 357.5l-.0625-165.6C511.9 174.3 497.7 160 480 160z\"],\n    \"hands-holding\": [640, 512, [], \"f4c2\", \"M216.1 236C205.1 222.3 185.8 219.1 172 231c-13.81 11.06-16.05 31.19-5 45l18.86 30.56C194.8 317.7 193.9 333.7 183.8 343.8c-11.79 11.79-31.2 10.71-41.61-2.305L80 256.8V104C80 81.91 62.09 64 40 64S0 81.91 0 104v204.7c0 14.54 4.949 28.65 14.03 40l120.1 151.3C141.1 507.6 150.3 512 159.1 512H256c17.67 0 32.03-14.35 32.03-32.02L288 358.4c0-21.79-7.414-42.93-21.02-59.94L216.1 236zM600 64c-22.09 0-40 17.91-40 40v152.8l-62.2 84.73c-10.41 13.02-29.83 14.09-41.61 2.305c-10.08-10.07-10.97-26.11-2.068-37.24l18.86-30.56c11.05-13.81 8.812-33.94-5-45c-13.77-11.03-33.94-8.75-44.97 5l-49.99 62.5C359.4 315.5 352 336.6 352 358.4l-.0313 121.5C351.1 497.7 366.3 512 384 512h96.02c9.713 0 18.9-4.414 24.96-12l120.1-151.3C635.1 337.4 640 323.3 640 308.7V104C640 81.91 622.1 64 600 64z\"],\n    \"hands-praying\": [640, 512, [\"praying-hands\"], \"f684\", \"M272 191.9c-17.62 0-32 14.35-32 31.97V303.9c0 8.875-7.125 16-16 16s-16-7.125-16-16V227.4c0-17.37 4.75-34.5 13.75-49.37L299.5 48.41c9-15.12 4.125-34.76-11-43.88C273.1-4.225 255.8 .1289 246.1 13.63C245.1 13.88 245.5 13.88 245.4 14.13L128.1 190C117.5 205.9 112 224.3 112 243.3v80.24l-90.13 29.1C8.75 357.9 0 370.1 0 383.9v95.99c0 10.88 8.5 31.1 32 31.1c2.75 0 5.375-.25 8-1l179.3-46.62C269.1 450 304 403.8 304 351.9V223.9C304 206.3 289.6 191.9 272 191.9zM618.1 353.6L528 323.6V243.4c0-19-5.5-37.37-16.12-53.25l-117.3-175.9c-.125-.25-.6251-.2487-.75-.4987c-9.625-13.5-27.88-17.85-42.38-9.229c-15.12 9.125-20 28.76-11 44.01l77.75 129.5C427.3 193 432 210 432 227.5v76.49c0 8.875-7.125 16-16 16s-16-7.125-16-16V223.1c0-17.62-14.38-31.97-32-31.97s-32 14.38-32 31.1v127.1c0 51.87 34.88 98.12 84.75 112.4L600 511C602.6 511.6 605.4 512 608 512c23.5 0 32-21.25 32-31.1v-95.99C640 370.3 631.3 358 618.1 353.6z\"],\n    \"handshake\": [640, 512, [], \"f2b5\", \"M0 383.9l64 .0404c17.75 0 32-14.29 32-32.03V128.3L0 128.3V383.9zM48 320.1c8.75 0 16 7.118 16 15.99c0 8.742-7.25 15.99-16 15.99S32 344.8 32 336.1C32 327.2 39.25 320.1 48 320.1zM348.8 64c-7.941 0-15.66 2.969-21.52 8.328L228.9 162.3C228.8 162.5 228.8 162.7 228.6 162.7C212 178.3 212.3 203.2 226.5 218.7c12.75 13.1 39.38 17.62 56.13 2.75C282.8 221.3 282.9 221.3 283 221.2l79.88-73.1c6.5-5.871 16.75-5.496 22.62 1c6 6.496 5.5 16.62-1 22.62l-26.12 23.87L504 313.7c2.875 2.496 5.5 4.996 7.875 7.742V127.1c-40.98-40.96-96.48-63.88-154.4-63.88L348.8 64zM334.6 217.4l-30 27.49c-29.75 27.11-75.25 24.49-101.8-4.371C176 211.2 178.1 165.7 207.3 138.9L289.1 64H282.5C224.7 64 169.1 87.08 128.2 127.9L128 351.8l18.25 .0369l90.5 81.82c27.5 22.37 67.75 18.12 90-9.246l18.12 15.24c15.88 12.1 39.38 10.5 52.38-5.371l31.38-38.6l5.374 4.498c13.75 11 33.88 9.002 45-4.748l9.538-11.78c11.12-13.75 9.036-33.78-4.694-44.93L334.6 217.4zM544 128.4v223.6c0 17.62 14.25 32.05 31.1 32.05L640 384V128.1L544 128.4zM592 352c-8.75 0-16-7.246-16-15.99c0-8.875 7.25-15.99 16-15.99S608 327.2 608 336.1C608 344.8 600.8 352 592 352z\"],\n    \"handshake-angle\": [640, 512, [\"hands-helping\"], \"f4c4\", \"M488 191.1h-152l.0001 51.86c.0001 37.66-27.08 72-64.55 75.77c-43.09 4.333-79.45-29.42-79.45-71.63V126.4l-24.51 14.73C123.2 167.8 96.04 215.7 96.04 267.5L16.04 313.8c-15.25 8.751-20.63 28.38-11.75 43.63l80 138.6c8.875 15.25 28.5 20.5 43.75 11.75l103.4-59.75h136.6c35.25 0 64-28.75 64-64c26.51 0 48-21.49 48-48V288h8c13.25 0 24-10.75 24-24l.0001-48C512 202.7 501.3 191.1 488 191.1zM635.7 154.5l-79.95-138.6c-8.875-15.25-28.5-20.5-43.75-11.75l-103.4 59.75h-62.57c-37.85 0-74.93 10.61-107.1 30.63C229.7 100.4 224 110.6 224 121.6l-.0004 126.4c0 22.13 17.88 40 40 40c22.13 0 40-17.88 40-40V159.1h184c30.93 0 56 25.07 56 56v28.5l80-46.25C639.3 189.4 644.5 169.8 635.7 154.5z\"],\n    \"handshake-simple-slash\": [640, 512, [\"handshake-alt-slash\"], \"e05f\", \"M358.6 195.6l145.6 118.1c12.12 9.992 19.5 23.49 22.12 37.98h81.62c17.6 0 31.1-14.39 31.1-31.99V159.1c0-17.67-14.33-31.99-31.1-31.99h-95.1c-40.98-40.96-96.56-63.98-154.5-63.98h-8.613c-7.1 0-15.63 3.002-21.63 8.373l-93.44 85.57L208.3 137.9L289.1 64.01L282.5 64c-43.48 0-85.19 13.66-120.8 37.44l-122.9-96.33C34.41 1.672 29.19 0 24.03 0c-7.125 0-14.19 3.156-18.91 9.187c-8.187 10.44-6.375 25.53 4.062 33.7L601.2 506.9c10.5 8.203 25.56 6.328 33.69-4.078c8.187-10.44 6.375-25.53-4.062-33.7l-135.5-106.2c-.1719-9.086-3.789-18.03-11.39-24.2l-149.2-121.2l-11.47 10.51L297.6 207.1l65.51-59.85c6.5-5.871 16.62-5.496 22.62 .1c5.1 6.496 5.5 16.62-.1 22.62L358.6 195.6zM32 127.1c-17.6 0-31.1 14.4-31.1 31.99v159.8c0 17.59 14.4 32.06 31.1 32.06l114.2-.0712l90.5 81.85c27.5 22.37 67.75 18.12 89.1-9.25l18.12 15.25c15.87 12.1 39.37 10.5 52.37-5.371l13.02-16.03L39.93 127.1L32 127.1z\"],\n    \"handshake-slash\": [640, 512, [], \"e060\", \"M543.1 128.2l.0002 223.8c0 17.62 14.25 31.99 31.1 31.99h64V128.1L543.1 128.2zM591.1 352c-8.75 0-16-7.251-16-15.99c0-8.875 7.25-15.1 16-15.1c8.75 0 15.1 7.122 15.1 15.1C607.1 344.8 600.7 352 591.1 352zM.0005 128.2v255.7l63.1 .0446c17.75 0 32-14.28 32-32.03L96 171.9l-55.77-43.71H.0005zM64 336c0 8.742-7.25 15.99-15.1 15.99s-15.1-7.251-15.1-15.99c0-8.875 7.25-15.1 15.1-15.1S64 327.2 64 336zM128 351.8h18.25l90.5 81.85c27.5 22.37 67.75 18.12 89.1-9.25l18.12 15.25c15.87 12.1 39.37 10.5 52.37-5.371l13.02-16.03L128 196.1V351.8zM495.2 362.8c-.1875-9.101-3.824-18.05-11.44-24.24l-149.2-121.1l-11.47 10.51L297.5 207.9l65.33-59.79c6.5-5.871 16.75-5.496 22.62 1c5.1 6.496 5.5 16.62-1 22.62l-26.12 23.87l145.6 118.1c2.875 2.496 5.5 4.996 7.875 7.742V127.1c-40.98-40.96-96.52-63.98-154.5-63.98h-8.613c-7.941 0-15.64 2.97-21.5 8.329L233.7 157.9L208.3 137.9l80.85-73.92L282.5 64c-43.47 0-85.16 13.68-120.8 37.45L38.81 5.109C34.41 1.672 29.19 0 24.03 0C16.91 0 9.846 3.156 5.127 9.187C-3.06 19.62-1.248 34.72 9.19 42.89l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078c8.187-10.44 6.375-25.53-4.062-33.7L495.2 362.8z\"],\n    \"hanukiah\": [640, 512, [128334], \"f6e6\", \"M231.1 159.9C227.6 159.9 224 163.6 224 168V288h32V168C256 163.6 252.4 160 248 160L231.1 159.9zM167.1 159.9C163.6 159.9 160 163.6 160 168V288h32V168C192 163.6 188.4 160 184 160L167.1 159.9zM392 160C387.6 160 384 163.6 384 168V288h32V168c0-4.375-3.625-8.061-8-8.061L392 160zM456 160C451.6 160 448 163.6 448 168V288h32V168c0-4.375-3.625-8.061-8-8.061L456 160zM544 168c0-4.375-3.625-8.061-8-8.061L520 160C515.6 160 512 163.6 512 168V288h32V168zM103.1 159.9C99.62 159.9 96 163.6 96 168V288h32V168C128 163.6 124.4 160 120 160L103.1 159.9zM624 160h-31.98c-8.837 0-16.03 7.182-16.03 16.02L576 288c0 17.6-14.4 32-32 32h-192V128c0-8.837-7.151-16.01-15.99-16.01H303.1C295.2 111.1 288 119.2 288 128v192H96c-17.6 0-32-14.4-32-32l.0065-112C64.01 167.2 56.85 160 48.02 160H16C7.163 160 0 167.2 0 176V288c0 53.02 42.98 96 96 96h192v64H175.1C149.5 448 128 469.5 128 495.1C128 504.8 135.2 512 143.1 512h352C504.9 512 512 504.9 512 496C512 469.5 490.5 448 464 448H352v-64h192c53.02 0 96-42.98 96-96V176C640 167.2 632.8 160 624 160zM607.1 127.9C621.2 127.9 632 116 632 101.4C632 86.62 608 48 608 48s-24 38.62-24 53.38C584 116 594.7 127.9 607.1 127.9zM31.1 127.9C45.25 127.9 56 116 56 101.4C56 86.62 32 48 32 48S8 86.62 8 101.4C8 116 18.75 127.9 31.1 127.9zM319.1 79.94c13.25 0 24-11.94 24-26.57C344 38.62 320 0 320 0S296 38.62 296 53.38C296 67.1 306.7 79.94 319.1 79.94zM112 128c13.25 0 24-12 24-26.62C136 86.62 112 48 112 48S88 86.62 88 101.4C88 115.1 98.75 128 112 128zM176 128c13.25 0 24-12 24-26.62C200 86.62 176 48 176 48S152 86.62 152 101.4C152 115.1 162.8 128 176 128zM240 128c13.25 0 24-12 24-26.62C264 86.62 240 48 240 48S216 86.62 216 101.4C216 115.1 226.8 128 240 128zM400 128c13.25 0 24-12 24-26.62C424 86.62 400 48 400 48s-24 38.62-24 53.38C376 115.1 386.8 128 400 128zM464 128c13.25 0 24-12 24-26.62C488 86.62 464 48 464 48s-24 38.62-24 53.38C440 115.1 450.8 128 464 128zM528 128c13.25 0 24-12 24-26.62C552 86.62 528 48 528 48s-24 38.62-24 53.38C504 115.1 514.8 128 528 128z\"],\n    \"hard-drive\": [512, 512, [128436, \"hdd\"], \"f0a0\", \"M464 288h-416C21.5 288 0 309.5 0 336v96C0 458.5 21.5 480 48 480h416c26.5 0 48-21.5 48-48v-96C512 309.5 490.5 288 464 288zM320 416c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S337.6 416 320 416zM416 416c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S433.6 416 416 416zM464 32h-416C21.5 32 0 53.5 0 80v192.4C13.41 262.3 29.92 256 48 256h416c18.08 0 34.59 6.254 48 16.41V80C512 53.5 490.5 32 464 32z\"],\n    \"hashtag\": [448, 512, [62098], \"23\", \"M416 127.1h-58.23l9.789-58.74c2.906-17.44-8.875-33.92-26.3-36.83c-17.53-2.875-33.92 8.891-36.83 26.3L292.9 127.1H197.8l9.789-58.74c2.906-17.44-8.875-33.92-26.3-36.83c-17.53-2.875-33.92 8.891-36.83 26.3L132.9 127.1H64c-17.67 0-32 14.33-32 32C32 177.7 46.33 191.1 64 191.1h58.23l-21.33 128H32c-17.67 0-32 14.33-32 32c0 17.67 14.33 31.1 32 31.1h58.23l-9.789 58.74c-2.906 17.44 8.875 33.92 26.3 36.83C108.5 479.9 110.3 480 112 480c15.36 0 28.92-11.09 31.53-26.73l11.54-69.27h95.12l-9.789 58.74c-2.906 17.44 8.875 33.92 26.3 36.83C268.5 479.9 270.3 480 272 480c15.36 0 28.92-11.09 31.53-26.73l11.54-69.27H384c17.67 0 32-14.33 32-31.1c0-17.67-14.33-32-32-32h-58.23l21.33-128H416c17.67 0 32-14.32 32-31.1C448 142.3 433.7 127.1 416 127.1zM260.9 319.1H165.8L187.1 191.1h95.12L260.9 319.1z\"],\n    \"hat-cowboy\": [640, 512, [], \"f8c0\", \"M489.1 264.9C480.5 207.5 450.5 32 392.3 32c-14 0-26.58 5.875-37.08 14c-20.75 15.87-49.62 15.87-70.5 0C274.2 38 261.7 32 247.7 32c-58.25 0-88.27 175.5-97.77 232.9C188.7 277.5 243.7 288 319.1 288S451.2 277.5 489.1 264.9zM632.9 227.7c-6.125-4.125-14.2-3.51-19.7 1.49c-1 .875-101.3 90.77-293.1 90.77c-190.9 0-292.2-89.99-293.2-90.86c-5.5-4.875-13.71-5.508-19.71-1.383c-6.125 4.125-8.587 11.89-6.087 18.77C1.749 248.5 78.37 448 319.1 448s318.2-199.5 318.1-201.5C641.5 239.6 639 231.9 632.9 227.7z\"],\n    \"hat-cowboy-side\": [640, 512, [], \"f8c1\", \"M260.8 260C232.1 237.1 198.8 225 164.4 225c-77.38 0-142.9 62.75-163 156c-3.5 16.62-.375 33.88 8.625 47.38c8.75 13.12 21.88 20.62 35.88 20.62H592c-103.2 0-155-37.13-233.2-104.5L260.8 260zM495.5 241.8l-27.13-156.5c-2.875-17.25-12.75-32.5-27.12-42.25c-14.37-9.75-32.24-13.3-49.24-9.675L200.9 74.02C173.7 79.77 153.5 102.3 150.5 129.8L143.6 195c6.875-.875 13.62-2 20.75-2c41.87 0 82 14.5 117.4 42.88l98 84.37c71 61.25 115.1 96.75 212.2 96.75c26.5 0 48-21.5 48-48C640 343.6 610.4 249.6 495.5 241.8z\"],\n    \"hat-wizard\": [512, 512, [], \"f6e8\", \"M200 376l-49.23-16.41c-7.289-2.434-7.289-12.75 0-15.18L200 328l16.41-49.23c2.434-7.289 12.75-7.289 15.18 0L248 328l49.23 16.41c7.289 2.434 7.289 12.75 0 15.18L248 376L240 416H448l-86.38-201.6C355.4 200 354.8 183.8 359.8 168.9L416 0L228.4 107.3C204.8 120.8 185.1 141.4 175 166.4L64 416h144L200 376zM231.2 172.4L256 160l12.42-24.84c1.477-2.949 5.68-2.949 7.156 0L288 160l24.84 12.42c2.949 1.477 2.949 5.68 0 7.156L288 192l-12.42 24.84c-1.477 2.949-5.68 2.949-7.156 0L256 192L231.2 179.6C228.2 178.1 228.2 173.9 231.2 172.4zM496 448h-480C7.164 448 0 455.2 0 464C0 490.5 21.49 512 48 512h416c26.51 0 48-21.49 48-48C512 455.2 504.8 448 496 448z\"],\n    \"head-side-cough\": [640, 512, [], \"e061\", \"M608 359.1c-13.25 0-24 10.75-24 24s10.75 24 24 24s24-10.75 24-24S621.3 359.1 608 359.1zM477.2 275c-21-47.13-48.49-151.8-73.11-186.8C365.6 33.63 302.5 0 234.1 0L192 0C86 0 0 86 0 192c0 56.75 24.75 107.6 64 142.9L64 512h223.1v-32h64.01c35.38 0 64-28.62 64-63.1L320 416c-17.67 0-32-14.33-32-32s14.33-32 32-32h95.98l-.003-32h31.99C471.1 320 486.6 296.1 477.2 275zM336 224c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S353.6 224 336 224zM480 359.1c-13.25 0-23.1 10.75-23.1 24s10.75 24 23.1 24s24-10.75 24-24S493.3 359.1 480 359.1zM608 311.1c13.25 0 24-10.75 24-24s-10.75-24-24-24s-24 10.75-24 24S594.8 311.1 608 311.1zM544 311.1c-13.25 0-23.1 10.75-23.1 24s10.75 24 23.1 24s24-10.75 24-24S557.3 311.1 544 311.1zM544 407.1c-13.25 0-23.1 10.75-23.1 24s10.75 24 23.1 24s24-10.75 24-24S557.3 407.1 544 407.1zM608 455.1c-13.25 0-24 10.75-24 24s10.75 24 24 24s24-10.75 24-24S621.3 455.1 608 455.1z\"],\n    \"head-side-cough-slash\": [640, 512, [], \"e062\", \"M607.1 311.1c13.25 0 24-10.75 24-23.1s-10.75-23.1-24-23.1s-23.1 10.75-23.1 23.1S594.7 311.1 607.1 311.1zM607.1 407.1c13.25 0 24-10.78 24-24.03c0-13.25-10.75-23.1-24-23.1s-24 10.78-24 24.03C583.1 397.2 594.7 407.1 607.1 407.1zM630.8 469.1l-190.2-149.1h7.4c23.12 0 38.62-23.87 29.25-44.1c-20.1-47.12-48.49-151.7-73.11-186.7C365.6 33.63 302.5 0 234.1 0H192C149.9 0 111.5 14.26 79.88 37.29L38.81 5.109C34.41 1.672 29.19 0 24.03 0C16.91 0 9.845 3.156 5.126 9.187c-8.187 10.44-6.375 25.53 4.062 33.7l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1zM320 415.1c-17.67 0-31.1-14.33-31.1-31.1S302.3 351.1 320 351.1l5.758-.0009L18.16 110.9C6.631 135.6 .0006 162.1 .0006 191.1c0 56.75 24.75 107.6 64 142.9L64 511.1h223.1l0-31.1l64.01 .001c33.25 0 60.2-25.38 63.37-57.78l-7.932-6.217H320zM543.1 359.1c13.25 0 24-10.78 24-24.03s-10.75-23.1-24-23.1c-13.25 0-24 10.78-24 24.03C519.1 349.2 530.7 359.1 543.1 359.1z\"],\n    \"head-side-mask\": [512, 512, [], \"e063\", \"M.1465 184.4C-2.166 244.2 23.01 298 63.99 334.9L63.99 512h160L224 316.5L3.674 156.2C1.871 165.4 .5195 174.8 .1465 184.4zM336 368H496L512 320h-255.1l.0178 192h145.9c27.55 0 52-17.63 60.71-43.76L464 464h-127.1c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16h138.7l10.67-32h-149.3c-8.836 0-16-7.164-16-16C320 375.2 327.2 368 336 368zM509.2 275c-20.1-47.13-48.49-151.8-73.11-186.8C397.6 33.63 334.5 0 266.1 0H200C117.1 0 42.48 50.57 13.25 123.7L239.2 288h272.6C511.8 283.7 511.1 279.3 509.2 275zM352 224c-17.62 0-32-14.38-32-32s14.38-32 32-32c17.62 0 31.1 14.38 31.1 32S369.6 224 352 224z\"],\n    \"head-side-virus\": [512, 512, [], \"e064\", \"M208 175.1c-8.836 0-16 7.162-16 16c0 8.836 7.163 15.1 15.1 15.1s16-7.164 16-16C224 183.2 216.8 175.1 208 175.1zM272 239.1c-8.836 0-15.1 7.163-15.1 16c0 8.836 7.165 16 16 16s16-7.164 16-16C288 247.2 280.8 239.1 272 239.1zM509.2 275c-20.94-47.13-48.46-151.7-73.1-186.8C397.7 33.59 334.6 0 266.1 0H192C85.95 0 0 85.95 0 192c0 56.8 24.8 107.7 64 142.8L64 512h256l-.0044-64h63.99c35.34 0 63.1-28.65 63.1-63.1V320h31.98C503.1 320 518.6 296.2 509.2 275zM368 240h-12.12c-28.51 0-42.79 34.47-22.63 54.63l8.576 8.576c6.25 6.25 6.25 16.38 0 22.62c-3.125 3.125-7.219 4.688-11.31 4.688s-8.188-1.562-11.31-4.688l-8.576-8.576c-20.16-20.16-54.63-5.881-54.63 22.63V352c0 8.844-7.156 16-16 16s-16-7.156-16-16v-12.12c0-28.51-34.47-42.79-54.63-22.63l-8.576 8.576c-3.125 3.125-7.219 4.688-11.31 4.688c-4.096 0-8.188-1.562-11.31-4.688c-6.25-6.25-6.25-16.38 0-22.62l8.577-8.576C166.9 274.5 152.6 240 124.1 240H112c-8.844 0-16-7.156-16-16s7.157-16 16-16L124.1 208c28.51 0 42.79-34.47 22.63-54.63L138.2 144.8c-6.25-6.25-6.25-16.38 0-22.62s16.38-6.25 22.63 0L169.4 130.7c20.16 20.16 54.63 5.881 54.63-22.63V96c0-8.844 7.156-16 16-16S256 87.16 256 96v12.12c0 28.51 34.47 42.79 54.63 22.63l8.576-8.576c6.25-6.25 16.38-6.25 22.63 0s6.25 16.38 0 22.62L333.3 153.4C313.1 173.5 327.4 208 355.9 208l12.12-.0004c8.844 0 15.1 7.157 15.1 16S376.8 240 368 240z\"],\n    \"heading\": [448, 512, [\"header\"], \"f1dc\", \"M448 448c0 17.69-14.33 32-32 32h-96c-17.67 0-32-14.31-32-32s14.33-32 32-32h16v-144h-224v144H128c17.67 0 32 14.31 32 32s-14.33 32-32 32H32c-17.67 0-32-14.31-32-32s14.33-32 32-32h16v-320H32c-17.67 0-32-14.31-32-32s14.33-32 32-32h96c17.67 0 32 14.31 32 32s-14.33 32-32 32H112v112h224v-112H320c-17.67 0-32-14.31-32-32s14.33-32 32-32h96c17.67 0 32 14.31 32 32s-14.33 32-32 32h-16v320H416C433.7 416 448 430.3 448 448z\"],\n    \"headphones\": [512, 512, [127911], \"f025\", \"M512 287.9l-.0042 112C511.1 444.1 476.1 480 432 480c-26.47 0-48-21.56-48-48.06V304.1C384 277.6 405.5 256 432 256c10.83 0 20.91 2.723 30.3 6.678C449.7 159.1 362.1 80.13 256 80.13S62.29 159.1 49.7 262.7C59.09 258.7 69.17 256 80 256C106.5 256 128 277.6 128 304.1v127.9C128 458.4 106.5 480 80 480c-44.11 0-79.1-35.88-79.1-80.06L0 288c0-141.2 114.8-256 256-256c140.9 0 255.6 114.5 255.1 255.3C511.1 287.5 511.1 287.7 512 287.9z\"],\n    \"headphones-simple\": [512, 512, [\"headphones-alt\"], \"f58f\", \"M256 32C112.9 32 4.563 151.1 0 288v104C0 405.3 10.75 416 23.1 416S48 405.3 48 392V288c0-114.7 93.34-207.8 208-207.8C370.7 80.2 464 173.3 464 288v104C464 405.3 474.7 416 488 416S512 405.3 512 392V287.1C507.4 151.1 399.1 32 256 32zM160 288L144 288c-35.34 0-64 28.7-64 64.13v63.75C80 451.3 108.7 480 144 480L160 480c17.66 0 32-14.34 32-32.05v-127.9C192 302.3 177.7 288 160 288zM368 288L352 288c-17.66 0-32 14.32-32 32.04v127.9c0 17.7 14.34 32.05 32 32.05L368 480c35.34 0 64-28.7 64-64.13v-63.75C432 316.7 403.3 288 368 288z\"],\n    \"headset\": [512, 512, [], \"f590\", \"M191.1 224c0-17.72-14.34-32.04-32-32.04L144 192c-35.34 0-64 28.66-64 64.08v47.79C80 339.3 108.7 368 144 368H160c17.66 0 32-14.36 32-32.06L191.1 224zM256 0C112.9 0 4.583 119.1 .0208 256L0 296C0 309.3 10.75 320 23.1 320S48 309.3 48 296V256c0-114.7 93.34-207.8 208-207.8C370.7 48.2 464 141.3 464 256v144c0 22.09-17.91 40-40 40h-110.7C305 425.7 289.7 416 272 416H241.8c-23.21 0-44.5 15.69-48.87 38.49C187 485.2 210.4 512 239.1 512H272c17.72 0 33.03-9.711 41.34-24H424c48.6 0 88-39.4 88-88V256C507.4 119.1 399.1 0 256 0zM368 368c35.34 0 64-28.7 64-64.13V256.1C432 220.7 403.3 192 368 192l-16 0c-17.66 0-32 14.34-32 32.04L320 335.9C320 353.7 334.3 368 352 368H368z\"],\n    \"heart\": [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 10084, 61578, 9829], \"f004\", \"M0 190.9V185.1C0 115.2 50.52 55.58 119.4 44.1C164.1 36.51 211.4 51.37 244 84.02L256 96L267.1 84.02C300.6 51.37 347 36.51 392.6 44.1C461.5 55.58 512 115.2 512 185.1V190.9C512 232.4 494.8 272.1 464.4 300.4L283.7 469.1C276.2 476.1 266.3 480 256 480C245.7 480 235.8 476.1 228.3 469.1L47.59 300.4C17.23 272.1 .0003 232.4 .0003 190.9L0 190.9z\"],\n    \"heart-crack\": [512, 512, [128148, \"heart-broken\"], \"f7a9\", \"M119.4 44.1C142.7 40.22 166.2 42.2 187.1 49.43L237.8 126.9L162.3 202.3C160.8 203.9 159.1 205.1 160 208.2C160 210.3 160.1 212.4 162.6 213.9L274.6 317.9C277.5 320.6 281.1 320.7 285.1 318.2C288.2 315.6 288.9 311.2 286.8 307.8L226.4 209.7L317.1 134.1C319.7 131.1 320.7 128.5 319.5 125.3L296.8 61.74C325.4 45.03 359.2 38.53 392.6 44.1C461.5 55.58 512 115.2 512 185.1V190.9C512 232.4 494.8 272.1 464.4 300.4L283.7 469.1C276.2 476.1 266.3 480 256 480C245.7 480 235.8 476.1 228.3 469.1L47.59 300.4C17.23 272.1 0 232.4 0 190.9V185.1C0 115.2 50.52 55.58 119.4 44.09V44.1z\"],\n    \"heart-pulse\": [576, 512, [\"heartbeat\"], \"f21e\", \"M352.4 243.8l-49.83 99.5c-6.009 12-23.41 11.62-28.92-.625L216.7 216.3l-30.05 71.75L88.55 288l176.4 182.2c12.66 13.07 33.36 13.07 46.03 0l176.4-182.2l-112.1 .0052L352.4 243.8zM495.2 62.86c-54.36-46.98-137.5-38.5-187.5 13.06L288 96.25L268.3 75.92C218.3 24.36 135.2 15.88 80.81 62.86C23.37 112.5 16.84 197.6 60.18 256h105l35.93-86.25c5.508-12.88 23.66-13.12 29.54-.375l58.21 129.4l49.07-98c5.884-11.75 22.78-11.75 28.67 0l27.67 55.25h121.5C559.2 197.6 552.6 112.5 495.2 62.86z\"],\n    \"helicopter\": [640, 512, [128641], \"f533\", \"M127.1 32C127.1 14.33 142.3 0 159.1 0H544C561.7 0 576 14.33 576 32C576 49.67 561.7 64 544 64H384V128H416C504.4 128 576 199.6 576 288V352C576 369.7 561.7 384 544 384H303.1C293.9 384 284.4 379.3 278.4 371.2L191.1 256L47.19 198.1C37.65 194.3 30.52 186.1 28.03 176.1L4.97 83.88C2.445 73.78 10.08 64 20.49 64H47.1C58.07 64 67.56 68.74 73.6 76.8L111.1 128H319.1V64H159.1C142.3 64 127.1 49.67 127.1 32V32zM384 320H512V288C512 234.1 469 192 416 192H384V320zM630.6 470.6L626.7 474.5C602.7 498.5 570.2 512 536.2 512H255.1C238.3 512 223.1 497.7 223.1 480C223.1 462.3 238.3 448 255.1 448H536.2C553.2 448 569.5 441.3 581.5 429.3L585.4 425.4C597.9 412.9 618.1 412.9 630.6 425.4C643.1 437.9 643.1 458.1 630.6 470.6L630.6 470.6z\"],\n    \"helmet-safety\": [576, 512, [\"hard-hat\", \"hat-hard\"], \"f807\", \"M544 280.9c0-89.17-61.83-165.4-139.6-197.4L352 174.2V49.78C352 39.91 344.1 32 334.2 32H241.8C231.9 32 224 39.91 224 49.78v124.4L171.6 83.53C93.83 115.5 32 191.7 32 280.9L31.99 352h512L544 280.9zM574.7 393.7C572.2 387.8 566.4 384 560 384h-544c-6.375 0-12.16 3.812-14.69 9.656c-2.531 5.875-1.344 12.69 3.062 17.34C7.031 413.8 72.02 480 287.1 480s280.1-66.19 283.6-69C576 406.3 577.2 399.5 574.7 393.7z\"],\n    \"highlighter\": [576, 512, [], \"f591\", \"M143.1 320V248.3C143.1 233 151.2 218.7 163.5 209.6L436.6 8.398C444 2.943 452.1 0 462.2 0C473.6 0 484.5 4.539 492.6 12.62L547.4 67.38C555.5 75.46 559.1 86.42 559.1 97.84C559.1 107 557.1 115.1 551.6 123.4L350.4 396.5C341.3 408.8 326.1 416 311.7 416H239.1L214.6 441.4C202.1 453.9 181.9 453.9 169.4 441.4L118.6 390.6C106.1 378.1 106.1 357.9 118.6 345.4L143.1 320zM489.4 99.92L460.1 70.59L245 229L330.1 314.1L489.4 99.92zM23.03 466.3L86.06 403.3L156.7 473.9L125.7 504.1C121.2 509.5 115.1 512 108.7 512H40C26.75 512 16 501.3 16 488V483.3C16 476.1 18.53 470.8 23.03 466.3V466.3z\"],\n    \"hippo\": [640, 512, [129435], \"f6ed\", \"M584.2 96.36c-28.88-1.701-54.71 17.02-79.74 26.49C490 88.22 455.9 64 416 64c-11.25 0-22 2.252-32 5.877V56C384 42.75 373.2 32 360 32h-16C330.8 32 320 42.75 320 56v49C285.1 79.62 241.2 64 192 64C85.1 64 0 135.6 0 224v232C0 469.3 10.75 480 24 480h48C85.25 480 96 469.3 96 456v-62.87C128.4 407.5 166.8 416 208 416s79.63-8.492 112-22.87V456c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24V288h128v32c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V288c17.62 0 32-14.38 32-32l-.0001-96.07C639.1 127.8 616.4 98.25 584.2 96.36zM447.1 176c-8.875 0-16-7.125-16-16S439.1 144 448 144s16 7.125 16 16S456.9 176 447.1 176z\"],\n    \"hockey-puck\": [512, 512, [], \"f453\", \"M0 160c0-53 114.6-96 256-96s256 43 256 96s-114.6 96-256 96S0 213 0 160zM255.1 303.1C156.4 303.1 56.73 283.4 0 242.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2C455.3 283.4 355.6 303.1 255.1 303.1z\"],\n    \"holly-berry\": [512, 512, [], \"f7aa\", \"M287.1 143.1c0 26.5 21.5 47.1 47.1 47.1c26.5 0 48-21.5 48-47.1s-21.5-47.1-48-47.1C309.5 95.99 287.1 117.5 287.1 143.1zM176 191.1c26.5 0 47.1-21.5 47.1-47.1S202.5 95.96 176 95.96c-26.5 0-47.1 21.5-47.1 47.1S149.5 191.1 176 191.1zM303.1 47.1C303.1 21.5 282.5 0 255.1 0c-26.5 0-47.1 21.5-47.1 47.1S229.5 95.99 255.1 95.99C282.5 95.99 303.1 74.5 303.1 47.1zM243.7 242.6C245.3 229.7 231.9 220.1 219.5 225.5C179.7 242.8 137.8 251.4 96.72 250.8C86.13 250.6 78.49 260.7 81.78 270.4C86.77 285.7 90.33 301.4 92.44 317.7c2.133 16.15-9.387 31.26-26.12 34.23c-16.87 2.965-33.7 4.348-50.48 4.152c-10.6-.0586-18.37 10.05-15.08 19.74c12.4 35.79 16.57 74.93 12.12 114.7c-1.723 14.96 13.71 25.67 28.02 19.8c38.47-15.95 78.77-23.81 118.2-23.34c10.58 .1953 18.36-9.91 15.07-19.6c-5.141-15.15-8.68-31.06-10.79-47.34c-2.133-16.16 9.371-31.13 26.24-34.09c16.73-2.973 33.57-4.496 50.36-4.301c10.73 .0781 18.51-10.03 15.22-19.72C242.5 324.7 238.5 283.9 243.7 242.6zM496.2 356.1c-16.78 .1953-33.61-1.188-50.48-4.152c-16.73-2.973-28.25-18.08-26.12-34.23c2.115-16.28 5.67-32.05 10.66-47.32c3.289-9.691-4.35-19.81-14.93-19.62c-41.11 .6484-83.01-7.965-122.7-25.23c-6.85-2.969-13.71-1.18-18.47 2.953c1.508 5.836 2.102 11.93 1.332 18.05c-4.539 36.23-1.049 72.56 10.12 105.1c3.395 9.988 3.029 20.73-.4766 30.52c12.44 .5 24.89 1.602 37.28 3.801c16.87 2.957 28.37 17.93 26.24 34.09c-2.115 16.27-5.654 32.19-10.79 47.34c-3.289 9.691 4.486 19.8 15.07 19.6c39.47-.4766 79.77 7.383 118.2 23.34c14.31 5.867 29.74-4.844 28.02-19.8c-4.451-39.81-.2832-78.95 12.12-114.7C514.5 366.1 506.8 356 496.2 356.1z\"],\n    \"horse\": [576, 512, [128014], \"f6f0\", \"M575.9 76.61c0-8.125-3.05-15.84-8.55-21.84c-3.875-4-8.595-9.125-13.72-14.5c11.12-6.75 19.47-17.51 22.22-30.63c.9999-5-2.849-9.641-7.974-9.641L447.9 0c-70.62 0-127.9 57.25-127.9 128L159.1 128c-28.87 0-54.38 12.1-72 33.12L87.1 160C39.5 160 .0001 199.5 .0001 248L0 304c0 8.875 7.125 15.1 15.1 15.1L31.1 320c8.874 0 15.1-7.125 15.1-16l.0005-56c0-13.25 6.884-24.4 16.76-31.65c-.125 2.5-.758 5.024-.758 7.649c0 27.62 11.87 52.37 30.5 69.87l-25.65 68.61c-4.586 12.28-5.312 25.68-2.128 38.4l21.73 86.89C92.02 502 104.8 512 119.5 512h32.98c20.81 0 36.08-19.55 31.05-39.74L162.2 386.9l23.78-63.61l133.1 22.34L319.1 480c0 17.67 14.33 32 31.1 32h31.1c17.67 0 31.1-14.33 31.1-32l.0166-161.8C435.7 297.1 447.1 270.5 447.1 240c0-.25-.1025-.3828-.1025-.6328V136.9L463.9 144l18.95 37.72c7.481 14.86 25.08 21.55 40.52 15.34l32.54-13.05c12.13-4.878 20.11-16.67 20.09-29.74L575.9 76.61zM511.9 96c-8.75 0-15.1-7.125-15.1-16S503.1 64 511.9 64c8.874 0 15.1 7.125 15.1 16S520.8 96 511.9 96z\"],\n    \"horse-head\": [512, 512, [], \"f7ab\", \"M509.8 332.5l-69.89-164.3c-14.88-41.25-50.38-70.98-93.01-79.24c18-10.63 46.35-35.9 34.23-82.29c-1.375-5.001-7.112-7.972-11.99-6.097l-202.3 75.66C35.89 123.4 0 238.9 0 398.8v81.24C0 497.7 14.25 512 32 512h236.2c23.75 0 39.3-25.03 28.55-46.28l-40.78-81.71V383.3c-45.63-3.5-84.66-30.7-104.3-69.58c-1.625-3.125-.9342-6.951 1.566-9.327l12.11-12.11c3.875-3.875 10.64-2.692 12.89 2.434c14.88 33.63 48.17 57.38 87.42 57.38c17.13 0 33.05-5.091 46.8-13.22l46 63.9c6 8.501 15.75 13.34 26 13.34h50.28c8.501 0 16.61-3.388 22.61-9.389l45.34-39.84C511.6 357.7 514.4 344.2 509.8 332.5zM328.1 223.1c-13.25 0-23.96-10.75-23.96-24c0-13.25 10.75-23.92 24-23.92s23.94 10.73 23.94 23.98C352 213.3 341.3 223.1 328.1 223.1z\"],\n    \"hospital\": [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M192 48C192 21.49 213.5 0 240 0H400C426.5 0 448 21.49 448 48V512H368V432C368 405.5 346.5 384 320 384C293.5 384 272 405.5 272 432V512H192V48zM312 64C303.2 64 296 71.16 296 80V104H272C263.2 104 256 111.2 256 120V136C256 144.8 263.2 152 272 152H296V176C296 184.8 303.2 192 312 192H328C336.8 192 344 184.8 344 176V152H368C376.8 152 384 144.8 384 136V120C384 111.2 376.8 104 368 104H344V80C344 71.16 336.8 64 328 64H312zM160 96V512H48C21.49 512 0 490.5 0 464V320H80C88.84 320 96 312.8 96 304C96 295.2 88.84 288 80 288H0V224H80C88.84 224 96 216.8 96 208C96 199.2 88.84 192 80 192H0V144C0 117.5 21.49 96 48 96H160zM592 96C618.5 96 640 117.5 640 144V192H560C551.2 192 544 199.2 544 208C544 216.8 551.2 224 560 224H640V288H560C551.2 288 544 295.2 544 304C544 312.8 551.2 320 560 320H640V464C640 490.5 618.5 512 592 512H480V96H592z\"],\n    \"hospital-user\": [576, 512, [], \"f80d\", \"M272 0C298.5 0 320 21.49 320 48V367.8C281.8 389.2 256 430 256 476.9C256 489.8 259.6 501.8 265.9 512H48C21.49 512 0 490.5 0 464V384H144C152.8 384 160 376.8 160 368C160 359.2 152.8 352 144 352H0V288H144C152.8 288 160 280.8 160 272C160 263.2 152.8 256 144 256H0V48C0 21.49 21.49 0 48 0H272zM152 64C143.2 64 136 71.16 136 80V104H112C103.2 104 96 111.2 96 120V136C96 144.8 103.2 152 112 152H136V176C136 184.8 143.2 192 152 192H168C176.8 192 184 184.8 184 176V152H208C216.8 152 224 144.8 224 136V120C224 111.2 216.8 104 208 104H184V80C184 71.16 176.8 64 168 64H152zM512 272C512 316.2 476.2 352 432 352C387.8 352 352 316.2 352 272C352 227.8 387.8 192 432 192C476.2 192 512 227.8 512 272zM288 477.1C288 425.7 329.7 384 381.1 384H482.9C534.3 384 576 425.7 576 477.1C576 496.4 560.4 512 541.1 512H322.9C303.6 512 288 496.4 288 477.1V477.1z\"],\n    \"hot-tub-person\": [512, 512, [\"hot-tub\"], \"f593\", \"M414.3 177.6C415.3 185.9 421.1 192 429.1 192h16.13c9.5 0 17-8.625 16-18.38C457.8 134.5 439.6 99.12 412 76.5c-17.38-14.12-28.88-36.75-32-62.12C379 6.125 372.3 0 364.3 0h-16.12c-9.5 0-17.12 8.625-16 18.38c4.375 39.12 22.38 74.5 50.13 97.13C399.6 129.6 411 152.2 414.3 177.6zM306.3 177.6C307.3 185.9 313.1 192 321.1 192h16.13c9.5 0 17-8.625 16-18.38C349.8 134.5 331.6 99.12 304 76.5c-17.38-14.12-28.88-36.75-32-62.12C271 6.125 264.3 0 256.3 0h-16.17C230.6 0 223 8.625 224.1 18.38C228.5 57.5 246.5 92.88 274.3 115.5C291.6 129.6 303 152.2 306.3 177.6zM480 256h-224L145.1 172.8C133.1 164.5 120.5 160 106.6 160H64C28.62 160 0 188.6 0 224v224c0 35.38 28.62 64 64 64h384c35.38 0 64-28.62 64-64V288C512 270.4 497.6 256 480 256zM128 440C128 444.4 124.4 448 120 448h-16C99.62 448 96 444.4 96 440v-112C96 323.6 99.62 320 104 320h16C124.4 320 128 323.6 128 328V440zM224 440C224 444.4 220.4 448 216 448h-16C195.6 448 192 444.4 192 440v-112C192 323.6 195.6 320 200 320h16C220.4 320 224 323.6 224 328V440zM320 440c0 4.375-3.625 8-8 8h-16C291.6 448 288 444.4 288 440v-112c0-4.375 3.625-8 8-8h16c4.375 0 8 3.625 8 8V440zM416 440c0 4.375-3.625 8-8 8h-16C387.6 448 384 444.4 384 440v-112c0-4.375 3.625-8 8-8h16c4.375 0 8 3.625 8 8V440zM64 128c35.38 0 64-28.62 64-64S99.38 0 64 0S0 28.62 0 64S28.62 128 64 128z\"],\n    \"hotdog\": [512, 512, [127789], \"f80f\", \"M488.6 23.44c-31.06-31.19-81.76-31.16-112.8 .0313L24.46 374.8c-20.83 19.96-29.19 49.66-21.83 77.6c7.36 27.94 29.07 49.65 57.02 57.01c27.94 7.36 57.64-1 77.6-21.83l351.3-351.3C519.7 105.2 519.8 54.5 488.6 23.44zM438.8 118.4c-19.59 19.59-37.39 22.52-51.74 25.01c-12.97 2.246-22.33 3.867-34.68 16.22c-12.35 12.35-13.97 21.71-16.22 34.69c-2.495 14.35-5.491 32.19-25.08 51.78c-19.59 19.59-37.43 22.58-51.78 25.08C246.3 273.4 236.9 275.1 224.6 287.4c-12.35 12.35-13.97 21.71-16.22 34.68C205.9 336.4 202.9 354.3 183.3 373.9c-19.59 19.59-37.43 22.58-51.78 25.08C118.5 401.2 109.2 402.8 96.83 415.2c-6.238 6.238-16.34 6.238-22.58 0c-6.238-6.238-6.238-16.35 0-22.58c19.59-19.59 37.43-22.58 51.78-25.07c12.97-2.245 22.33-3.869 34.68-16.22c12.35-12.35 13.97-21.71 16.22-34.69c2.495-14.35 5.492-32.19 25.08-51.78s37.43-22.58 51.78-25.08c12.97-2.246 22.33-3.869 34.68-16.22s13.97-21.71 16.22-34.68c2.495-14.35 5.492-32.19 25.08-51.78c19.59-19.59 37.43-22.58 51.78-25.07c12.97-2.246 22.28-3.815 34.63-16.17c6.238-6.238 16.36-6.238 22.59 0C444.1 102.1 444.1 112.2 438.8 118.4zM32.44 321.5l290-290l-11.48-11.6c-24.95-24.95-63.75-26.57-86.58-3.743L17.1 223.4C-5.73 246.3-4.108 285.1 20.84 310L32.44 321.5zM480.6 189.5l-290 290l11.48 11.6c24.95 24.95 63.75 26.57 86.58 3.743l207.3-207.3c22.83-22.83 21.21-61.63-3.743-86.58L480.6 189.5z\"],\n    \"hotel\": [512, 512, [127976], \"f594\", \"M480 0C497.7 0 512 14.33 512 32C512 49.67 497.7 64 480 64V448C497.7 448 512 462.3 512 480C512 497.7 497.7 512 480 512H304V448H208V512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H480zM112 96C103.2 96 96 103.2 96 112V144C96 152.8 103.2 160 112 160H144C152.8 160 160 152.8 160 144V112C160 103.2 152.8 96 144 96H112zM224 144C224 152.8 231.2 160 240 160H272C280.8 160 288 152.8 288 144V112C288 103.2 280.8 96 272 96H240C231.2 96 224 103.2 224 112V144zM368 96C359.2 96 352 103.2 352 112V144C352 152.8 359.2 160 368 160H400C408.8 160 416 152.8 416 144V112C416 103.2 408.8 96 400 96H368zM96 240C96 248.8 103.2 256 112 256H144C152.8 256 160 248.8 160 240V208C160 199.2 152.8 192 144 192H112C103.2 192 96 199.2 96 208V240zM240 192C231.2 192 224 199.2 224 208V240C224 248.8 231.2 256 240 256H272C280.8 256 288 248.8 288 240V208C288 199.2 280.8 192 272 192H240zM352 240C352 248.8 359.2 256 368 256H400C408.8 256 416 248.8 416 240V208C416 199.2 408.8 192 400 192H368C359.2 192 352 199.2 352 208V240zM256 288C211.2 288 173.5 318.7 162.1 360.2C159.7 373.1 170.7 384 184 384H328C341.3 384 352.3 373.1 349 360.2C338.5 318.7 300.8 288 256 288z\"],\n    \"hourglass\": [384, 512, [62032, 9203, \"hourglass-2\", \"hourglass-half\"], \"f254\", \"M352 0C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H352zM111.1 128H272C282.4 112.4 288 93.98 288 74.98V64H96V74.98C96 93.98 101.6 112.4 111.1 128zM111.1 384H272C268.5 378.7 264.5 373.7 259.9 369.1L192 301.3L124.1 369.1C119.5 373.7 115.5 378.7 111.1 384V384z\"],\n    \"hourglass-empty\": [384, 512, [], \"f252\", \"M0 32C0 14.33 14.33 0 32 0H352C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32zM96 64V74.98C96 100.4 106.1 124.9 124.1 142.9L192 210.7L259.9 142.9C277.9 124.9 288 100.4 288 74.98V64H96zM96 448H288V437C288 411.6 277.9 387.1 259.9 369.1L192 301.3L124.1 369.1C106.1 387.1 96 411.6 96 437V448z\"],\n    \"hourglass-end\": [384, 512, [8987, \"hourglass-3\"], \"f253\", \"M352 0C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H352zM124.1 142.9L192 210.7L259.9 142.9C277.9 124.9 288 100.4 288 74.98V64H96V74.98C96 100.4 106.1 124.9 124.1 142.9z\"],\n    \"hourglass-start\": [384, 512, [\"hourglass-1\"], \"f251\", \"M352 0C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H352zM259.9 369.1L192 301.3L124.1 369.1C106.1 387.1 96 411.6 96 437V448H288V437C288 411.6 277.9 387.1 259.9 369.1V369.1z\"],\n    \"house\": [576, 512, [63498, 63500, 127968, \"home\", \"home-alt\", \"home-lg-alt\"], \"f015\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.5 450.5 512.3 453.1 512 455.8V472C512 494.1 494.1 512 472 512H456C454.9 512 453.8 511.1 452.7 511.9C451.3 511.1 449.9 512 448.5 512H392C369.9 512 352 494.1 352 472V384C352 366.3 337.7 352 320 352H256C238.3 352 224 366.3 224 384V472C224 494.1 206.1 512 184 512H128.1C126.6 512 125.1 511.9 123.6 511.8C122.4 511.9 121.2 512 120 512H104C81.91 512 64 494.1 64 472V360C64 359.1 64.03 358.1 64.09 357.2V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5L575.8 255.5z\"],\n    \"house-chimney\": [576, 512, [63499, \"home-lg\"], \"e3af\", \"M511.8 287.6L512.5 447.7C512.5 450.5 512.3 453.1 512 455.8V472C512 494.1 494.1 512 472 512H456C454.9 512 453.8 511.1 452.7 511.9C451.3 511.1 449.9 512 448.5 512H392C369.9 512 352 494.1 352 472V384C352 366.3 337.7 352 320 352H256C238.3 352 224 366.3 224 384V472C224 494.1 206.1 512 184 512H128.1C126.6 512 125.1 511.9 123.6 511.8C122.4 511.9 121.2 512 120 512H104C81.91 512 64 494.1 64 472V360C64 359.1 64.03 358.1 64.09 357.2V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6L511.8 287.6z\"],\n    \"house-chimney-crack\": [576, 512, [\"house-damage\"], \"f6f1\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.6 483.2 483.9 512 448.5 512H326.4L288 448L368.8 380.7C376.6 374.1 376.5 362.1 368.5 355.8L250.6 263.2C235.1 251.7 216.8 270.1 227.8 285.2L288 368L202.5 439.2C196.5 444.3 194.1 452.1 199.1 459.8L230.4 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5L575.8 255.5z\"],\n    \"house-chimney-medical\": [576, 512, [\"clinic-medical\"], \"f7f2\", \"M511.8 287.6L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6L511.8 287.6zM400 248C400 239.2 392.8 232 384 232H328V176C328 167.2 320.8 160 312 160H264C255.2 160 248 167.2 248 176V232H192C183.2 232 176 239.2 176 248V296C176 304.8 183.2 312 192 312H248V368C248 376.8 255.2 384 264 384H312C320.8 384 328 376.8 328 368V312H384C392.8 312 400 304.8 400 296V248z\"],\n    \"house-chimney-user\": [576, 512, [], \"e065\", \"M511.8 287.6L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6L511.8 287.6zM288 288C323.3 288 352 259.3 352 224C352 188.7 323.3 160 288 160C252.7 160 224 188.7 224 224C224 259.3 252.7 288 288 288zM192 416H384C392.8 416 400 408.8 400 400C400 355.8 364.2 320 320 320H256C211.8 320 176 355.8 176 400C176 408.8 183.2 416 192 416z\"],\n    \"house-chimney-window\": [576, 512, [], \"e00d\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L416 100.7V64C416 46.33 430.3 32 448 32H480C497.7 32 512 46.33 512 64V185L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5L575.8 255.5zM248 192C234.7 192 224 202.7 224 216V296C224 309.3 234.7 320 248 320H328C341.3 320 352 309.3 352 296V216C352 202.7 341.3 192 328 192H248z\"],\n    \"house-crack\": [576, 512, [], \"e3b1\", \"M511.8 287.6L512.5 447.7C512.6 483.2 483.9 512 448.5 512H326.4L288 448L368.8 380.7C376.6 374.1 376.5 362.1 368.5 355.8L250.6 263.2C235.1 251.7 216.8 270.1 227.8 285.2L288 368L202.5 439.2C196.5 444.3 194.1 452.1 199.1 459.8L230.4 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8z\"],\n    \"house-laptop\": [640, 512, [\"laptop-house\"], \"e066\", \"M218.3 8.486C230.6-2.829 249.4-2.829 261.7 8.486L469.7 200.5C476.4 206.7 480 215.2 480 224H336C316.9 224 299.7 232.4 288 245.7V208C288 199.2 280.8 192 272 192H208C199.2 192 192 199.2 192 208V272C192 280.8 199.2 288 208 288H271.1V416H112C85.49 416 64 394.5 64 368V256H32C18.83 256 6.996 247.9 2.198 235.7C-2.6 223.4 .6145 209.4 10.3 200.5L218.3 8.486zM336 256H560C577.7 256 592 270.3 592 288V448H624C632.8 448 640 455.2 640 464C640 490.5 618.5 512 592 512H303.1C277.5 512 255.1 490.5 255.1 464C255.1 455.2 263.2 448 271.1 448H303.1V288C303.1 270.3 318.3 256 336 256zM352 304V448H544V304H352z\"],\n    \"house-medical\": [576, 512, [], \"e3b2\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5H575.8zM328 232V176C328 167.2 320.8 160 312 160H264C255.2 160 248 167.2 248 176V232H192C183.2 232 176 239.2 176 248V296C176 304.8 183.2 312 192 312H248V368C248 376.8 255.2 384 264 384H312C320.8 384 328 376.8 328 368V312H384C392.8 312 400 304.8 400 296V248C400 239.2 392.8 232 384 232H328z\"],\n    \"house-user\": [576, 512, [\"home-user\"], \"e1b0\", \"M575.8 255.5C575.8 273.5 560.8 287.6 543.8 287.6H511.8L512.5 447.7C512.6 483.2 483.9 512 448.5 512H128.1C92.75 512 64.09 483.3 64.09 448V287.6H32.05C14.02 287.6 0 273.5 0 255.5C0 246.5 3.004 238.5 10.01 231.5L266.4 8.016C273.4 1.002 281.4 0 288.4 0C295.4 0 303.4 2.004 309.5 7.014L564.8 231.5C572.8 238.5 576.9 246.5 575.8 255.5H575.8zM288 160C252.7 160 224 188.7 224 224C224 259.3 252.7 288 288 288C323.3 288 352 259.3 352 224C352 188.7 323.3 160 288 160zM256 320C211.8 320 176 355.8 176 400C176 408.8 183.2 416 192 416H384C392.8 416 400 408.8 400 400C400 355.8 364.2 320 320 320H256z\"],\n    \"hryvnia-sign\": [384, 512, [8372, \"hryvnia\"], \"f6f2\", \"M115.1 120.1C102.2 132 82.05 129.8 71.01 115.1C59.97 102.2 62.21 82.05 76.01 71.01L81.94 66.27C109.7 44.08 144.1 32 179.6 32H223C285.4 32 336 82.59 336 144.1C336 155.6 334.5 166.1 331.7 176H352C369.7 176 384 190.3 384 208C384 225.7 369.7 240 352 240H284.2C282.5 241.1 280.8 242.1 279.1 243.1L228.5 272H352C369.7 272 384 286.3 384 304C384 321.7 369.7 336 352 336H123.1C116 344.6 112 355.5 112 367C112 394.1 133.9 416 160.1 416H204.4C225.3 416 245.7 408.9 262.1 395.8L268 391C281.8 379.1 301.9 382.2 312.1 396C324 409.8 321.8 429.9 307.1 440.1L302.1 445.7C274.3 467.9 239.9 480 204.4 480H160.1C98.59 480 48 429.4 48 367C48 356.4 49.49 345.9 52.33 336H32C14.33 336 0 321.7 0 304C0 286.3 14.33 272 32 272H99.82C101.5 270.9 103.2 269.9 104.9 268.9L155.5 240H32C14.33 240 0 225.7 0 208C0 190.3 14.33 176 32 176H260.9C267.1 167.4 272 156.5 272 144.1C272 117.9 250.1 96 223 96H179.6C158.7 96 138.3 103.1 121.9 116.2L115.1 120.1z\"],\n    \"i\": [320, 512, [105], \"49\", \"M320 448c0 17.67-14.31 32-32 32H32c-17.69 0-32-14.33-32-32s14.31-32 32-32h96v-320H32c-17.69 0-32-14.33-32-32s14.31-32 32-32h256c17.69 0 32 14.33 32 32s-14.31 32-32 32h-96v320h96C305.7 416 320 430.3 320 448z\"],\n    \"i-cursor\": [256, 512, [], \"f246\", \"M256 480c0 17.69-14.33 31.1-32 31.1c-38.41 0-72.52-17.35-96-44.23c-23.48 26.88-57.59 44.23-96 44.23c-17.67 0-32-14.31-32-31.1s14.33-32 32-32c35.3 0 64-28.72 64-64V288H64C46.33 288 32 273.7 32 256s14.33-32 32-32h32V128c0-35.28-28.7-64-64-64C14.33 64 0 49.69 0 32s14.33-32 32-32c38.41 0 72.52 17.35 96 44.23c23.48-26.88 57.59-44.23 96-44.23c17.67 0 32 14.31 32 32s-14.33 32-32 32c-35.3 0-64 28.72-64 64v96h32c17.67 0 32 14.31 32 32s-14.33 32-32 32h-32v96c0 35.28 28.7 64 64 64C241.7 448 256 462.3 256 480z\"],\n    \"ice-cream\": [448, 512, [127848], \"f810\", \"M96.06 288.3H351.9L252.6 493.8C250.1 499.2 246 503.8 240.1 507.1C235.9 510.3 230 512 224 512C217.1 512 212.1 510.3 207 507.1C201.1 503.8 197.9 499.2 195.4 493.8L96.06 288.3zM386.3 164C392.1 166.4 397.4 169.9 401.9 174.4C406.3 178.8 409.9 184.1 412.3 189.9C414.7 195.7 415.1 201.1 416 208.3C416 214.5 414.8 220.8 412.4 226.6C409.1 232.4 406.5 237.7 402 242.2C397.6 246.6 392.3 250.2 386.5 252.6C380.7 255 374.4 256.3 368.1 256.3H79.88C67.16 256.3 54.96 251.2 45.98 242.2C37 233.2 31.97 220.1 32 208.3C32.03 195.5 37.1 183.4 46.12 174.4C55.14 165.4 67.35 160.4 80.07 160.4H81.06C80.4 154.9 80.06 149.4 80.04 143.8C80.04 105.7 95.2 69.11 122.2 42.13C149.2 15.15 185.8 0 223.1 0C262.1 0 298.7 15.15 325.7 42.13C352.7 69.11 367.9 105.7 367.9 143.8C367.9 149.4 367.6 154.9 366.9 160.4H367.9C374.2 160.4 380.5 161.6 386.3 164z\"],\n    \"icicles\": [512, 512, [], \"f7ad\", \"M511.4 37.87l-87.54 467.6c-1.625 8.623-14.04 8.634-15.67 .0104L341.4 141.7L295.7 314.2c-2.375 7.624-12.98 7.624-15.36 0L246.3 180.9l-46.49 196.9c-1.875 8.373-13.64 8.373-15.51 0L139.1 190.5L103.6 314.5c-2.375 7.124-12.64 7.198-15.14 .0744L1.357 41.24C-4.768 20.75 10.61 0 31.98 0h448C500 0 515.2 18.25 511.4 37.87z\"],\n    \"icons\": [512, 512, [\"heart-music-camera-bolt\"], \"f86d\", \"M500.3 7.251C507.7 13.33 512 22.41 512 31.1V175.1C512 202.5 483.3 223.1 447.1 223.1C412.7 223.1 383.1 202.5 383.1 175.1C383.1 149.5 412.7 127.1 447.1 127.1V71.03L351.1 90.23V207.1C351.1 234.5 323.3 255.1 287.1 255.1C252.7 255.1 223.1 234.5 223.1 207.1C223.1 181.5 252.7 159.1 287.1 159.1V63.1C287.1 48.74 298.8 35.61 313.7 32.62L473.7 .6198C483.1-1.261 492.9 1.173 500.3 7.251H500.3zM74.66 303.1L86.5 286.2C92.43 277.3 102.4 271.1 113.1 271.1H174.9C185.6 271.1 195.6 277.3 201.5 286.2L213.3 303.1H239.1C266.5 303.1 287.1 325.5 287.1 351.1V463.1C287.1 490.5 266.5 511.1 239.1 511.1H47.1C21.49 511.1-.0019 490.5-.0019 463.1V351.1C-.0019 325.5 21.49 303.1 47.1 303.1H74.66zM143.1 359.1C117.5 359.1 95.1 381.5 95.1 407.1C95.1 434.5 117.5 455.1 143.1 455.1C170.5 455.1 191.1 434.5 191.1 407.1C191.1 381.5 170.5 359.1 143.1 359.1zM440.3 367.1H496C502.7 367.1 508.6 372.1 510.1 378.4C513.3 384.6 511.6 391.7 506.5 396L378.5 508C372.9 512.1 364.6 513.3 358.6 508.9C352.6 504.6 350.3 496.6 353.3 489.7L391.7 399.1H336C329.3 399.1 323.4 395.9 321 389.6C318.7 383.4 320.4 376.3 325.5 371.1L453.5 259.1C459.1 255 467.4 254.7 473.4 259.1C479.4 263.4 481.6 271.4 478.7 278.3L440.3 367.1zM116.7 219.1L19.85 119.2C-8.112 90.26-6.614 42.31 24.85 15.34C51.82-8.137 93.26-3.642 118.2 21.83L128.2 32.32L137.7 21.83C162.7-3.642 203.6-8.137 231.6 15.34C262.6 42.31 264.1 90.26 236.1 119.2L139.7 219.1C133.2 225.6 122.7 225.6 116.7 219.1H116.7z\"],\n    \"id-badge\": [384, 512, [], \"f2c1\", \"M336 0h-288C21.49 0 0 21.49 0 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48v-416C384 21.49 362.5 0 336 0zM192 160c35.35 0 64 28.65 64 64s-28.65 64-64 64S128 259.3 128 224S156.7 160 192 160zM288 416H96c-8.836 0-16-7.164-16-16C80 355.8 115.8 320 160 320h64c44.18 0 80 35.82 80 80C304 408.8 296.8 416 288 416zM240 96h-96C135.2 96 128 88.84 128 80S135.2 64 144 64h96C248.8 64 256 71.16 256 80S248.8 96 240 96z\"],\n    \"id-card\": [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M528 32h-480C21.49 32 0 53.49 0 80V96h576V80C576 53.49 554.5 32 528 32zM0 432C0 458.5 21.49 480 48 480h480c26.51 0 48-21.49 48-48V128H0V432zM368 192h128C504.8 192 512 199.2 512 208S504.8 224 496 224h-128C359.2 224 352 216.8 352 208S359.2 192 368 192zM368 256h128C504.8 256 512 263.2 512 272S504.8 288 496 288h-128C359.2 288 352 280.8 352 272S359.2 256 368 256zM368 320h128c8.836 0 16 7.164 16 16S504.8 352 496 352h-128c-8.836 0-16-7.164-16-16S359.2 320 368 320zM176 192c35.35 0 64 28.66 64 64s-28.65 64-64 64s-64-28.66-64-64S140.7 192 176 192zM112 352h128c26.51 0 48 21.49 48 48c0 8.836-7.164 16-16 16h-192C71.16 416 64 408.8 64 400C64 373.5 85.49 352 112 352z\"],\n    \"id-card-clip\": [576, 512, [\"id-card-alt\"], \"f47f\", \"M256 128h64c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256C238.3 0 224 14.33 224 32v64C224 113.7 238.3 128 256 128zM528 64H384v48C384 138.5 362.5 160 336 160h-96C213.5 160 192 138.5 192 112V64H48C21.49 64 0 85.49 0 112v352C0 490.5 21.49 512 48 512h480c26.51 0 48-21.49 48-48v-352C576 85.49 554.5 64 528 64zM288 224c35.35 0 64 28.66 64 64s-28.65 64-64 64s-64-28.66-64-64S252.7 224 288 224zM384 448H192c-8.836 0-16-7.164-16-16C176 405.5 197.5 384 224 384h128c26.51 0 48 21.49 48 48C400 440.8 392.8 448 384 448z\"],\n    \"igloo\": [576, 512, [], \"f7ae\", \"M320 160H48.5C100.2 82.82 188.1 32 288 32C298.8 32 309.5 32.6 320 33.76V160zM352 39.14C424.9 55.67 487.2 99.82 527.5 160H352V39.14zM96 192V320H0C0 274 10.77 230.6 29.94 192H96zM192 320H128V192H448V320H384V352H576V432C576 458.5 554.5 480 528 480H352V352C352 316.7 323.3 288 288 288C252.7 288 224 316.7 224 352V480H48C21.49 480 0 458.5 0 432V352H192V320zM480 192H546.1C565.2 230.6 576 274 576 320H480V192z\"],\n    \"image\": [512, 512, [], \"f03e\", \"M447.1 32h-384C28.64 32-.0091 60.65-.0091 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96C511.1 60.65 483.3 32 447.1 32zM111.1 96c26.51 0 48 21.49 48 48S138.5 192 111.1 192s-48-21.49-48-48S85.48 96 111.1 96zM446.1 407.6C443.3 412.8 437.9 416 432 416H82.01c-6.021 0-11.53-3.379-14.26-8.75c-2.73-5.367-2.215-11.81 1.334-16.68l70-96C142.1 290.4 146.9 288 152 288s9.916 2.441 12.93 6.574l32.46 44.51l93.3-139.1C293.7 194.7 298.7 192 304 192s10.35 2.672 13.31 7.125l128 192C448.6 396 448.9 402.3 446.1 407.6z\"],\n    \"image-portrait\": [384, 512, [\"portrait\"], \"f3e0\", \"M336 0h-288c-26.51 0-48 21.49-48 48v416C0 490.5 21.49 512 48 512h288c26.51 0 48-21.49 48-48v-416C384 21.49 362.5 0 336 0zM192 128c35.35 0 64 28.65 64 64s-28.65 64-64 64S128 227.3 128 192S156.7 128 192 128zM288 384H96c-8.836 0-16-7.164-16-16C80 323.8 115.8 288 160 288h64c44.18 0 80 35.82 80 80C304 376.8 296.8 384 288 384z\"],\n    \"images\": [576, 512, [], \"f302\", \"M528 32H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48H528c26.51 0 48-21.49 48-48v-256C576 53.49 554.5 32 528 32zM223.1 96c17.68 0 32 14.33 32 32S241.7 160 223.1 160c-17.67 0-32-14.33-32-32S206.3 96 223.1 96zM494.1 311.6C491.3 316.8 485.9 320 480 320H192c-6.023 0-11.53-3.379-14.26-8.75c-2.73-5.367-2.215-11.81 1.332-16.68l70-96C252.1 194.4 256.9 192 262 192c5.111 0 9.916 2.441 12.93 6.574l22.35 30.66l62.74-94.11C362.1 130.7 367.1 128 373.3 128c5.348 0 10.34 2.672 13.31 7.125l106.7 160C496.6 300 496.9 306.3 494.1 311.6zM456 432H120c-39.7 0-72-32.3-72-72v-240C48 106.8 37.25 96 24 96S0 106.8 0 120v240C0 426.2 53.83 480 120 480h336c13.25 0 24-10.75 24-24S469.3 432 456 432z\"],\n    \"inbox\": [512, 512, [], \"f01c\", \"M447 56.25C443.5 42 430.7 31.1 416 31.1H96c-14.69 0-27.47 10-31.03 24.25L3.715 304.9C1.247 314.9 0 325.2 0 335.5v96.47c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48v-96.47c0-10.32-1.247-20.6-3.715-30.61L447 56.25zM352 352H160L128 288H72.97L121 96h270l48.03 192H384L352 352z\"],\n    \"indent\": [448, 512, [], \"f03c\", \"M0 64C0 46.33 14.33 32 32 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64zM192 192C192 174.3 206.3 160 224 160H416C433.7 160 448 174.3 448 192C448 209.7 433.7 224 416 224H224C206.3 224 192 209.7 192 192zM416 288C433.7 288 448 302.3 448 320C448 337.7 433.7 352 416 352H224C206.3 352 192 337.7 192 320C192 302.3 206.3 288 224 288H416zM0 448C0 430.3 14.33 416 32 416H416C433.7 416 448 430.3 448 448C448 465.7 433.7 480 416 480H32C14.33 480 0 465.7 0 448zM25.82 347.9C15.31 356.1 0 348.6 0 335.3V176.7C0 163.4 15.31 155.9 25.82 164.1L127.8 243.4C135.1 249.8 135.1 262.2 127.8 268.6L25.82 347.9z\"],\n    \"indian-rupee-sign\": [320, 512, [\"indian-rupee\", \"inr\"], \"e1bc\", \"M.0022 64C.0022 46.33 14.33 32 32 32H288C305.7 32 320 46.33 320 64C320 81.67 305.7 96 288 96H231.8C241.4 110.4 248.5 126.6 252.4 144H288C305.7 144 320 158.3 320 176C320 193.7 305.7 208 288 208H252.4C239.2 266.3 190.5 311.2 130.3 318.9L274.6 421.1C288.1 432.2 292.3 452.2 282 466.6C271.8 480.1 251.8 484.3 237.4 474L13.4 314C2.083 305.1-2.716 291.5 1.529 278.2C5.774 264.1 18.09 256 32 256H112C144.8 256 173 236.3 185.3 208H32C14.33 208 .0022 193.7 .0022 176C.0022 158.3 14.33 144 32 144H185.3C173 115.7 144.8 96 112 96H32C14.33 96 .0022 81.67 .0022 64V64z\"],\n    \"industry\": [576, 512, [], \"f275\", \"M128 32C145.7 32 160 46.33 160 64V215.4L316.6 131C332.6 122.4 352 134 352 152.2V215.4L508.6 131C524.6 122.4 544 134 544 152.2V432C544 458.5 522.5 480 496 480H80C53.49 480 32 458.5 32 432V64C32 46.33 46.33 32 64 32H128z\"],\n    \"infinity\": [640, 512, [9854, 8734], \"f534\", \"M494.9 96.01c-38.78 0-75.22 15.09-102.6 42.5L320 210.8L247.8 138.5c-27.41-27.41-63.84-42.5-102.6-42.5C65.11 96.01 0 161.1 0 241.1v29.75c0 80.03 65.11 145.1 145.1 145.1c38.78 0 75.22-15.09 102.6-42.5L320 301.3l72.23 72.25c27.41 27.41 63.84 42.5 102.6 42.5C574.9 416 640 350.9 640 270.9v-29.75C640 161.1 574.9 96.01 494.9 96.01zM202.5 328.3c-15.31 15.31-35.69 23.75-57.38 23.75C100.4 352 64 315.6 64 270.9v-29.75c0-44.72 36.41-81.13 81.14-81.13c21.69 0 42.06 8.438 57.38 23.75l72.23 72.25L202.5 328.3zM576 270.9c0 44.72-36.41 81.13-81.14 81.13c-21.69 0-42.06-8.438-57.38-23.75l-72.23-72.25l72.23-72.25c15.31-15.31 35.69-23.75 57.38-23.75C539.6 160 576 196.4 576 241.1V270.9z\"],\n    \"info\": [192, 512, [], \"f129\", \"M160 448h-32V224c0-17.69-14.33-32-32-32L32 192c-17.67 0-32 14.31-32 32s14.33 31.1 32 31.1h32v192H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h128c17.67 0 32-14.31 32-32S177.7 448 160 448zM96 128c26.51 0 48-21.49 48-48S122.5 32.01 96 32.01s-48 21.49-48 48S69.49 128 96 128z\"],\n    \"italic\": [384, 512, [], \"f033\", \"M384 64.01c0 17.69-14.31 32-32 32h-58.67l-133.3 320H224c17.69 0 32 14.31 32 32s-14.31 32-32 32H32c-17.69 0-32-14.31-32-32s14.31-32 32-32h58.67l133.3-320H160c-17.69 0-32-14.31-32-32s14.31-32 32-32h192C369.7 32.01 384 46.33 384 64.01z\"],\n    \"j\": [320, 512, [106], \"4a\", \"M320 64.01v259.4c0 86.36-71.78 156.6-160 156.6s-160-70.26-160-156.6V288c0-17.67 14.31-32 32-32s32 14.33 32 32v35.38c0 51.08 43.06 92.63 96 92.63s96-41.55 96-92.63V64.01c0-17.67 14.31-32 32-32S320 46.34 320 64.01z\"],\n    \"jedi\": [576, 512, [], \"f669\", \"M554.9 293.1l-58.88 58.88h40C493.2 446.1 398.2 511.1 287.1 512c-110.3-.0078-205.2-65.88-247.1-160h40L21.13 293.1C17.75 275.1 16 258.6 16 241.2c0-5.75 .75-11.5 1-17.25h47L22.75 182.7C37.38 117.1 75.86 59.37 130.6 20.5c2.75-2 6.021-3.005 9.272-3.005c5.5 0 10.5 2.75 13.5 7.25c3.125 4.375 3.625 10.13 1.625 15.13C148.5 56.12 145.1 73.62 145.1 91.12c0 45.13 21.13 86.63 57.75 113.8C206.9 207.7 209.4 212.4 209.5 217.2c.25 5-1.751 9.752-5.501 13c-32.75 29.38-47.5 74-38.5 117.1c9.751 48.38 48.88 87.13 97.26 96.5l2.5-65.37l-27.13 18.5c-3.125 2-7.251 1.75-10-.75c-2.75-2.625-3.25-6.75-1.375-10l20.13-33.75l-42.13-8.627c-3.625-.875-6.375-4.125-6.375-7.875s2.75-7 6.375-7.875l42.13-8.75L226.8 285.6C224.9 282.5 225.4 278.4 228.1 275.7c2.75-2.5 6.876-2.875 10-.75l30.38 20.63l11.49-287.8C280.3 3.461 283.7 .0156 287.1 0c4.237 .0156 7.759 3.461 8.009 7.828l11.49 287.8l30.38-20.63c3.125-2.125 7.251-1.75 10 .75c2.75 2.625 3.25 6.75 1.375 9.875l-20.13 33.75l42.13 8.75c3.625 .875 6.375 4.125 6.375 7.875s-2.75 7-6.375 7.875l-42.13 8.627l20.13 33.75c1.875 3.25 1.375 7.375-1.375 10c-2.75 2.5-6.876 2.75-10 .75l-27.13-18.5l2.5 65.37c48.38-9.375 87.51-48.13 97.26-96.5c9.001-43.13-5.75-87.75-38.5-117.1c-3.75-3.25-5.751-8.002-5.501-13c.125-4.875 2.626-9.5 6.626-12.38c36.63-27.13 57.75-68.63 57.75-113.8c0-17.5-3.375-35-9.875-51.25c-2-5-1.5-10.75 1.625-15.13c3-4.5 8.001-7.25 13.5-7.25c3.25 0 6.474 .9546 9.224 2.955c54.75 38.88 93.28 96.67 107.9 162.3l-41.25 41.25h47c.2501 5.75 .9965 11.5 .9965 17.25C559.1 258.6 558.3 275.1 554.9 293.1z\"],\n    \"jet-fighter\": [640, 512, [\"fighter-jet\"], \"f0fb\", \"M160 24C160 10.75 170.7 0 184 0H296C309.3 0 320 10.75 320 24C320 37.25 309.3 48 296 48H280L384 192H500.4C508.1 192 515.7 193.4 522.9 196.1L625 234.4C634 237.8 640 246.4 640 256C640 265.6 634 274.2 625 277.6L522.9 315.9C515.7 318.6 508.1 320 500.4 320H384L280 464H296C309.3 464 320 474.7 320 488C320 501.3 309.3 512 296 512H184C170.7 512 160 501.3 160 488C160 474.7 170.7 464 184 464H192V320H160L105.4 374.6C99.37 380.6 91.23 384 82.75 384H64C46.33 384 32 369.7 32 352V288C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224V160C32 142.3 46.33 128 64 128H82.75C91.23 128 99.37 131.4 105.4 137.4L160 192H192V48H184C170.7 48 160 37.25 160 24V24zM80 240C71.16 240 64 247.2 64 256C64 264.8 71.16 272 80 272H144C152.8 272 160 264.8 160 256C160 247.2 152.8 240 144 240H80z\"],\n    \"joint\": [640, 512, [], \"f595\", \"M444.4 181.1C466.8 196.8 480 222.2 480 249.8V280C480 284.4 483.6 288 488 288h48C540.4 288 544 284.4 544 280V249.8c0-43.25-21-83.5-56.38-108.1C463.9 125 448 99.38 448 70.25V8C448 3.625 444.4 0 440 0h-48C387.6 0 384 3.625 384 8v66.38C384 118.1 408.5 156 444.4 181.1zM195 359C125.1 370.1 59.75 394.8 0 432C83.62 484.2 180.2 512 279 512h88.5l-112.7-131.5C240 363.2 217.4 355.4 195 359zM553.3 87.12C547.6 83.25 544 77.12 544 70.25V8C544 3.625 540.4 0 536 0h-48C483.6 0 480 3.625 480 8v62.25c0 22.13 10.12 43.5 28.62 55.5C550.8 153 576 199.5 576 249.8V280C576 284.4 579.6 288 584 288h48C636.4 288 640 284.4 640 280V249.8C640 184.2 607.6 123.5 553.3 87.12zM360.9 352c-34.38 .125-86.75 .25-88.25 .25l117.9 137.4C402.6 503.9 420.4 512 439.1 512h88.38l-117.9-137.6C397.4 360.1 379.6 352 360.9 352zM616 352H432l117.1 137.6C562.1 503.9 579.9 512 598.6 512H616c13.25 0 24-10.75 24-24v-112C640 362.8 629.3 352 616 352z\"],\n    \"k\": [320, 512, [107], \"4b\", \"M314.3 429.8c10.06 14.53 6.438 34.47-8.094 44.53c-5.562 3.844-11.91 5.688-18.19 5.688c-10.16 0-20.12-4.812-26.34-13.78L128.1 273.3L64 338.9v109.1c0 17.67-14.31 32-32 32s-32-14.33-32-32v-384C0 46.34 14.31 32.01 32 32.01S64 46.34 64 64.01v183.3l201.1-205.7c12.31-12.61 32.63-12.86 45.25-.5c12.62 12.34 12.88 32.61 .5 45.25l-137.2 140.3L314.3 429.8z\"],\n    \"kaaba\": [576, 512, [128331], \"f66b\", \"M0 239.4V197.4L278.1 115.3C284.9 113.6 291.1 113.6 297 115.3L576 197.4V239.4L537.1 228.6C528.6 226.2 519.7 231.2 517.4 239.7C515 248.2 520 257.1 528.5 259.4L576 272.6V409.5C576 431.1 560.4 451.5 538.4 456.4L298.4 509.7C291.6 511.2 284.4 511.2 277.6 509.7L37.59 456.4C15.63 451.5 0 431.1 0 409.5V272.6L47.48 259.4C55.1 257.1 60.98 248.2 58.62 239.7C56.25 231.2 47.43 226.2 38.92 228.6L0 239.4zM292.3 160.6C289.5 159.8 286.5 159.8 283.7 160.6L240.5 172.6C232 174.9 227 183.8 229.4 192.3C231.7 200.8 240.6 205.8 249.1 203.4L288 192.6L326.9 203.4C335.4 205.8 344.3 200.8 346.6 192.3C348.1 183.8 343.1 174.9 335.5 172.6L292.3 160.6zM191.5 219.4C199.1 217.1 204.1 208.2 202.6 199.7C200.3 191.2 191.4 186.2 182.9 188.6L96.52 212.6C88 214.9 83.02 223.8 85.38 232.3C87.75 240.8 96.57 245.8 105.1 243.4L191.5 219.4zM393.1 188.6C384.6 186.2 375.7 191.2 373.4 199.7C371 208.2 376 217.1 384.5 219.4L470.9 243.4C479.4 245.8 488.3 240.8 490.6 232.3C492.1 223.8 487.1 214.9 479.5 212.6L393.1 188.6zM269.9 84.63L0 164V130.6C0 109.9 13.22 91.59 32.82 85.06L272.8 5.061C282.7 1.777 293.3 1.777 303.2 5.061L543.2 85.06C562.8 91.59 576 109.9 576 130.6V164L306.1 84.63C294.3 81.17 281.7 81.17 269.9 84.63V84.63z\"],\n    \"key\": [512, 512, [128273], \"f084\", \"M282.3 343.7L248.1 376.1C244.5 381.5 238.4 384 232 384H192V424C192 437.3 181.3 448 168 448H128V488C128 501.3 117.3 512 104 512H24C10.75 512 0 501.3 0 488V408C0 401.6 2.529 395.5 7.029 391L168.3 229.7C162.9 212.8 160 194.7 160 176C160 78.8 238.8 0 336 0C433.2 0 512 78.8 512 176C512 273.2 433.2 352 336 352C317.3 352 299.2 349.1 282.3 343.7zM376 176C398.1 176 416 158.1 416 136C416 113.9 398.1 96 376 96C353.9 96 336 113.9 336 136C336 158.1 353.9 176 376 176z\"],\n    \"keyboard\": [576, 512, [9000], \"f11c\", \"M512 448H64c-35.35 0-64-28.65-64-64V128c0-35.35 28.65-64 64-64h448c35.35 0 64 28.65 64 64v256C576 419.3 547.3 448 512 448zM128 180v-40C128 133.4 122.6 128 116 128h-40C69.38 128 64 133.4 64 140v40C64 186.6 69.38 192 76 192h40C122.6 192 128 186.6 128 180zM224 180v-40C224 133.4 218.6 128 212 128h-40C165.4 128 160 133.4 160 140v40C160 186.6 165.4 192 172 192h40C218.6 192 224 186.6 224 180zM320 180v-40C320 133.4 314.6 128 308 128h-40C261.4 128 256 133.4 256 140v40C256 186.6 261.4 192 268 192h40C314.6 192 320 186.6 320 180zM416 180v-40C416 133.4 410.6 128 404 128h-40C357.4 128 352 133.4 352 140v40C352 186.6 357.4 192 364 192h40C410.6 192 416 186.6 416 180zM512 180v-40C512 133.4 506.6 128 500 128h-40C453.4 128 448 133.4 448 140v40C448 186.6 453.4 192 460 192h40C506.6 192 512 186.6 512 180zM128 276v-40C128 229.4 122.6 224 116 224h-40C69.38 224 64 229.4 64 236v40C64 282.6 69.38 288 76 288h40C122.6 288 128 282.6 128 276zM224 276v-40C224 229.4 218.6 224 212 224h-40C165.4 224 160 229.4 160 236v40C160 282.6 165.4 288 172 288h40C218.6 288 224 282.6 224 276zM320 276v-40C320 229.4 314.6 224 308 224h-40C261.4 224 256 229.4 256 236v40C256 282.6 261.4 288 268 288h40C314.6 288 320 282.6 320 276zM416 276v-40C416 229.4 410.6 224 404 224h-40C357.4 224 352 229.4 352 236v40C352 282.6 357.4 288 364 288h40C410.6 288 416 282.6 416 276zM512 276v-40C512 229.4 506.6 224 500 224h-40C453.4 224 448 229.4 448 236v40C448 282.6 453.4 288 460 288h40C506.6 288 512 282.6 512 276zM128 372v-40C128 325.4 122.6 320 116 320h-40C69.38 320 64 325.4 64 332v40C64 378.6 69.38 384 76 384h40C122.6 384 128 378.6 128 372zM416 372v-40C416 325.4 410.6 320 404 320h-232C165.4 320 160 325.4 160 332v40C160 378.6 165.4 384 172 384h232C410.6 384 416 378.6 416 372zM512 372v-40C512 325.4 506.6 320 500 320h-40C453.4 320 448 325.4 448 332v40C448 378.6 453.4 384 460 384h40C506.6 384 512 378.6 512 372z\"],\n    \"khanda\": [576, 512, [9772], \"f66d\", \"M447.7 65.1c-6.25-3.5-14.29-2.351-19.29 3.024c-5.125 5.375-5.833 13.37-1.958 19.5c16.5 26.25 25.23 56.34 25.23 87.46c-.25 53.25-26.74 102.6-71.24 132.4l-76.62 53.35v-20.12l44.01-36.12c3.875-4.125 4.983-10.13 2.858-15.26L342.8 273c33.88-19.25 56.94-55.25 56.94-97c0-40.75-22.06-76.12-54.56-95.75l5.151-11.39c2.375-5.5 .9825-11.87-3.518-15.1L287.9 .0074l-59.05 52.77C224.4 57.02 222.1 63.37 225.2 68.87l5.203 11.32C197.1 99.81 175.9 135.2 175.9 175.1c0 41.75 23.08 77.75 56.95 97L224.1 290.2C222.9 295.4 223.9 301.2 227.9 305.5l43.1 36.11v19.91L195.2 308.1c-44.25-29.5-70.72-78.9-70.97-132.1c0-31.12 8.73-61.2 25.23-87.45C153.3 82.4 151.8 74.75 146.8 69.5C141.8 64.12 133.2 63.25 126.8 66.75C48.34 109.6 9.713 205.2 45.34 296c7 18 17.88 34.38 30.5 49l55.92 65.38c4.875 5.75 13.09 7.232 19.71 3.732l79.25-42.25l29.26 20.37l-47.09 32.75c-1.625-.375-3.125-1-4.1-1c-13.25 0-23.97 10.75-23.97 24s10.72 23.1 23.97 23.1c12.13 0 21.74-9.126 23.36-20.75l40.6-28.25v29.91c-9.375 5.625-15.97 15.37-15.97 27.12c0 17.62 14.37 31.1 31.1 31.1c17.63 0 31.1-14.37 31.1-31.1c0-11.75-6.656-21.52-16.03-27.14v-30.12l40.87 28.48c1.625 11.63 11.23 20.75 23.35 20.75c13.25 0 23.98-10.74 23.98-23.99s-10.73-24-23.98-24c-1.875 0-3.375 .625-5 1l-47.09-32.75l29.25-20.37l79.26 42.25c6.625 3.5 14.84 2.018 19.71-3.732l52.51-61.27c18.88-22 33.1-47.49 41.25-75.61C559.6 189.9 521.5 106.2 447.7 65.1zM351.8 176c0 22.25-11.45 41.91-28.82 53.41l-5.613-12.43c-8.75-24.5-8.811-51.11-.061-75.61l7.748-17.12C341.2 135.9 351.8 154.6 351.8 176zM223.8 176c0-21.38 10.67-40.16 26.67-51.79l7.848 17.17c8.75 24.63 8.747 51.11-.0032 75.61L252.7 229.4C235.4 217.9 223.8 198.2 223.8 176z\"],\n    \"kip-sign\": [384, 512, [], \"e1c4\", \"M182.5 224H352C369.7 224 384 238.3 384 256C384 273.7 369.7 288 352 288H182.5L340.8 423.7C354.2 435.2 355.8 455.4 344.3 468.8C332.8 482.2 312.6 483.8 299.2 472.3L128 325.6V448C128 465.7 113.7 480 96 480C78.33 480 64 465.7 64 448V288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H64V64C64 46.33 78.33 32 96 32C113.7 32 128 46.33 128 64V186.4L299.2 39.7C312.6 28.2 332.8 29.76 344.3 43.18C355.8 56.59 354.2 76.8 340.8 88.3L182.5 224z\"],\n    \"kit-medical\": [576, 512, [\"first-aid\"], \"f479\", \"M64 32h32v448H64c-35.35 0-64-28.66-64-64V96C0 60.66 28.65 32 64 32zM128 32h320v448H128V32zM176 282c0 8.835 7.164 16 16 16h53.1V352c0 8.836 7.165 16 16 16h52c8.836 0 16-7.164 16-16V298H384c8.836 0 16-7.165 16-16v-52c0-8.837-7.164-16-16-16h-54V160c0-8.836-7.164-16-16-16h-52c-8.835 0-16 7.164-16 16v54H192c-8.836 0-16 7.163-16 16V282zM512 32h-32v448h32c35.35 0 64-28.66 64-64V96C576 60.66 547.3 32 512 32z\"],\n    \"kiwi-bird\": [576, 512, [], \"f535\", \"M256 405.1V456C256 469.3 245.3 480 232 480C218.7 480 208 469.3 208 456V415.3C202.7 415.8 197.4 416 192 416C175.4 416 159.3 413.9 144 409.1V456C144 469.3 133.3 480 120 480C106.7 480 96 469.3 96 456V390.3C38.61 357.1 0 295.1 0 224C0 117.1 85.96 32 192 32C228.3 32 262.3 42.08 291.2 59.6C322.4 78.44 355.9 96 392.3 96H448C518.7 96 576 153.3 576 224V464C576 470.1 571.5 477.2 564.8 479.3C558.2 481.4 550.9 478.9 546.9 473.2L461.6 351.3C457.1 351.8 452.6 352 448 352H392.3C355.9 352 322.4 369.6 291.2 388.4C280.2 395.1 268.4 400.7 256 405.1zM448 248C461.3 248 472 237.3 472 224C472 210.7 461.3 200 448 200C434.7 200 424 210.7 424 224C424 237.3 434.7 248 448 248z\"],\n    \"l\": [320, 512, [108], \"4c\", \"M320 448c0 17.67-14.31 32-32 32H64c-17.69 0-32-14.33-32-32v-384C32 46.34 46.31 32.01 64 32.01S96 46.34 96 64.01v352h192C305.7 416 320 430.3 320 448z\"],\n    \"landmark\": [512, 512, [127963], \"f66f\", \"M240.1 4.216C249.1-1.405 262-1.405 271.9 4.216L443.6 102.4L447.1 104V104.9L495.9 132.2C508.5 139.4 514.6 154.2 510.9 168.2C507.2 182.2 494.5 192 479.1 192H31.1C17.49 192 4.795 182.2 1.071 168.2C-2.653 154.2 3.524 139.4 16.12 132.2L63.1 104.9V104L68.37 102.4L240.1 4.216zM64 224H128V416H168V224H232V416H280V224H344V416H384V224H448V420.3C448.6 420.6 449.2 420.1 449.8 421.4L497.8 453.4C509.5 461.2 514.7 475.8 510.6 489.3C506.5 502.8 494.1 512 480 512H32C17.9 512 5.46 502.8 1.373 489.3C-2.713 475.8 2.517 461.2 14.25 453.4L62.25 421.4C62.82 420.1 63.41 420.6 64 420.3V224z\"],\n    \"language\": [640, 512, [], \"f1ab\", \"M448 164C459 164 468 172.1 468 184V188H528C539 188 548 196.1 548 208C548 219 539 228 528 228H526L524.4 232.5C515.5 256.1 501.9 279.1 484.7 297.9C485.6 298.4 486.5 298.1 487.4 299.5L506.3 310.8C515.8 316.5 518.8 328.8 513.1 338.3C507.5 347.8 495.2 350.8 485.7 345.1L466.8 333.8C462.4 331.1 457.1 328.3 453.7 325.3C443.2 332.8 431.8 339.3 419.8 344.7L416.1 346.3C406 350.8 394.2 346.2 389.7 336.1C385.2 326 389.8 314.2 399.9 309.7L403.5 308.1C409.9 305.2 416.1 301.1 422 298.3L409.9 286.1C402 278.3 402 265.7 409.9 257.9C417.7 250 430.3 250 438.1 257.9L452.7 272.4L453.3 272.1C465.7 259.9 475.8 244.7 483.1 227.1H376C364.1 227.1 356 219 356 207.1C356 196.1 364.1 187.1 376 187.1H428V183.1C428 172.1 436.1 163.1 448 163.1L448 164zM160 233.2L179 276H140.1L160 233.2zM0 128C0 92.65 28.65 64 64 64H576C611.3 64 640 92.65 640 128V384C640 419.3 611.3 448 576 448H64C28.65 448 0 419.3 0 384V128zM320 384H576V128H320V384zM178.3 175.9C175.1 168.7 167.9 164 160 164C152.1 164 144.9 168.7 141.7 175.9L77.72 319.9C73.24 329.1 77.78 341.8 87.88 346.3C97.97 350.8 109.8 346.2 114.3 336.1L123.2 315.1H196.8L205.7 336.1C210.2 346.2 222 350.8 232.1 346.3C242.2 341.8 246.8 329.1 242.3 319.9L178.3 175.9z\"],\n    \"laptop\": [640, 512, [128187], \"f109\", \"M128 96h384v256h64v-272c0-26.38-21.62-48-48-48h-416c-26.38 0-48 21.62-48 48V352h64V96zM624 383.1h-608c-8.75 0-16 7.25-16 16v16c0 35.25 28.75 64 64 64h512c35.25 0 64-28.75 64-64v-16C640 391.2 632.8 383.1 624 383.1z\"],\n    \"laptop-code\": [640, 512, [], \"f5fc\", \"M128 96h384v256h64V80C576 53.63 554.4 32 528 32h-416C85.63 32 64 53.63 64 80V352h64V96zM624 384h-608C7.25 384 0 391.3 0 400V416c0 35.25 28.75 64 64 64h512c35.25 0 64-28.75 64-64v-16C640 391.3 632.8 384 624 384zM365.9 286.2C369.8 290.1 374.9 292 380 292s10.23-1.938 14.14-5.844l48-48c7.812-7.813 7.812-20.5 0-28.31l-48-48c-7.812-7.813-20.47-7.813-28.28 0c-7.812 7.813-7.812 20.5 0 28.31l33.86 33.84l-33.86 33.84C358 265.7 358 278.4 365.9 286.2zM274.1 161.9c-7.812-7.813-20.47-7.813-28.28 0l-48 48c-7.812 7.813-7.812 20.5 0 28.31l48 48C249.8 290.1 254.9 292 260 292s10.23-1.938 14.14-5.844c7.812-7.813 7.812-20.5 0-28.31L240.3 224l33.86-33.84C281.1 182.4 281.1 169.7 274.1 161.9z\"],\n    \"laptop-medical\": [640, 512, [], \"f812\", \"M624 384h-608C7.25 384 0 391.3 0 400V416c0 35.25 28.75 64 64 64h512c35.25 0 64-28.75 64-64v-16C640 391.3 632.8 384 624 384zM128 96h384v256h64V80C576 53.63 554.4 32 528 32h-416C85.63 32 64 53.63 64 80V352h64V96zM304 336h32c8.801 0 16-7.201 16-16V272h48C408.8 272 416 264.8 416 256V224c0-8.801-7.199-16-16-16H352V160c0-8.801-7.199-16-16-16h-32C295.2 144 288 151.2 288 160v48H240C231.2 208 224 215.2 224 224v32c0 8.799 7.199 16 16 16H288V320C288 328.8 295.2 336 304 336z\"],\n    \"lari-sign\": [384, 512, [], \"e1c8\", \"M144 32C161.7 32 176 46.33 176 64V96.66C181.3 96.22 186.6 96 192 96C197.4 96 202.7 96.22 208 96.66V64C208 46.33 222.3 32 240 32C257.7 32 272 46.33 272 64V113.4C326.9 138.6 367.8 188.9 380.2 249.6C383.7 266.1 372.5 283.8 355.2 287.4C337.8 290.9 320.1 279.7 317.4 262.4C311.4 232.5 294.9 206.4 272 188.1V256C272 273.7 257.7 288 240 288C222.3 288 208 273.7 208 256V160.1C202.8 160.3 197.4 160 192 160C186.6 160 181.2 160.3 176 160.1V256C176 273.7 161.7 288 144 288C126.3 288 112 273.7 112 256V188.1C82.74 211.5 64 247.6 64 288C64 358.7 121.3 416 192 416H352C369.7 416 384 430.3 384 448C384 465.7 369.7 480 352 480H32C14.33 480 0 465.7 0 448C0 430.3 14.33 416 32 416H48.89C18.49 382 0 337.2 0 288C0 210.5 45.9 143.7 112 113.4V64C112 46.33 126.3 32 144 32V32z\"],\n    \"layer-group\": [512, 512, [], \"f5fd\", \"M232.5 5.171C247.4-1.718 264.6-1.718 279.5 5.171L498.1 106.2C506.6 110.1 512 118.6 512 127.1C512 137.3 506.6 145.8 498.1 149.8L279.5 250.8C264.6 257.7 247.4 257.7 232.5 250.8L13.93 149.8C5.438 145.8 0 137.3 0 127.1C0 118.6 5.437 110.1 13.93 106.2L232.5 5.171zM498.1 234.2C506.6 238.1 512 246.6 512 255.1C512 265.3 506.6 273.8 498.1 277.8L279.5 378.8C264.6 385.7 247.4 385.7 232.5 378.8L13.93 277.8C5.438 273.8 0 265.3 0 255.1C0 246.6 5.437 238.1 13.93 234.2L67.13 209.6L219.1 279.8C242.5 290.7 269.5 290.7 292.9 279.8L444.9 209.6L498.1 234.2zM292.9 407.8L444.9 337.6L498.1 362.2C506.6 366.1 512 374.6 512 383.1C512 393.3 506.6 401.8 498.1 405.8L279.5 506.8C264.6 513.7 247.4 513.7 232.5 506.8L13.93 405.8C5.438 401.8 0 393.3 0 383.1C0 374.6 5.437 366.1 13.93 362.2L67.13 337.6L219.1 407.8C242.5 418.7 269.5 418.7 292.9 407.8V407.8z\"],\n    \"leaf\": [512, 512, [], \"f06c\", \"M512 165.4c0 127.9-70.05 235.3-175.3 270.1c-20.04 7.938-41.83 12.46-64.69 12.46c-64.9 0-125.2-36.51-155.7-94.47c-54.13 49.93-68.71 107-68.96 108.1C44.72 472.6 34.87 480 24.02 480c-1.844 0-3.727-.2187-5.602-.6562c-12.89-3.098-20.84-16.08-17.75-28.96c9.598-39.5 90.47-226.4 335.3-226.4C344.8 224 352 216.8 352 208S344.8 192 336 192C228.6 192 151 226.6 96.29 267.6c.1934-10.82 1.242-21.84 3.535-33.05c13.47-65.81 66.04-119 131.4-134.2c28.33-6.562 55.68-6.013 80.93-.0054c56 13.32 118.2-7.412 149.3-61.24c5.664-9.828 20.02-9.516 24.66 .8282C502.7 76.76 512 121.9 512 165.4z\"],\n    \"left-long\": [512, 512, [\"long-arrow-alt-left\"], \"f30a\", \"M512 256C512 273.7 497.7 288 480 288H160.1l0 72c0 9.547-5.66 18.19-14.42 22c-8.754 3.812-18.95 2.077-25.94-4.407l-112.1-104c-10.24-9.5-10.24-25.69 0-35.19l112.1-104c6.992-6.484 17.18-8.218 25.94-4.406C154.4 133.8 160.1 142.5 160.1 151.1L160.1 224H480C497.7 224 512 238.3 512 256z\"],\n    \"left-right\": [512, 512, [8596, \"arrows-alt-h\"], \"f337\", \"M503.1 273.6l-112 104c-6.984 6.484-17.17 8.219-25.92 4.406s-14.41-12.45-14.41-22v-56l-192 .001V360c0 9.547-5.656 18.19-14.41 22c-8.75 3.812-18.94 2.078-25.92-4.406l-112-104c-9.781-9.094-9.781-26.09 0-35.19l112-104c6.984-6.484 17.17-8.219 25.92-4.406C154 133.8 159.7 142.5 159.7 152v55.1l192-.001v-56c0-9.547 5.656-18.19 14.41-22s18.94-2.078 25.92 4.406l112 104C513.8 247.5 513.8 264.5 503.1 273.6z\"],\n    \"lemon\": [448, 512, [127819], \"f094\", \"M427.9 52.1c-20.13-20.23-47.58-25.27-65.63-14.77c-51.63 30.08-158.6-46.49-281 75.91c-122.4 122.4-45.83 229.4-75.91 281c-10.5 18.05-5.471 45.5 14.77 65.63c20.13 20.24 47.58 25.27 65.63 14.77c51.63-30.08 158.6 46.49 281-75.91c122.4-122.4 45.83-229.4 75.91-281C453.2 99.69 448.1 72.23 427.9 52.1zM211.9 127.5C167.6 138.7 106.7 199.6 95.53 243.9C93.69 251.2 87.19 255.1 79.1 255.1c-1.281 0-2.594-.1562-3.906-.4687C67.53 253.4 62.34 244.7 64.47 236.1c14.16-56.28 83.31-125.4 139.6-139.6c8.656-2.031 17.25 3.062 19.44 11.62C225.7 116.7 220.5 125.3 211.9 127.5z\"],\n    \"less-than\": [384, 512, [62774], \"3c\", \"M351.1 448c-4.797 0-9.688-1.094-14.28-3.375l-320-160C6.844 279.2 0 268.1 0 256c0-12.13 6.844-23.18 17.69-28.62l320-160c15.88-7.875 35.05-1.5 42.94 14.31c7.906 15.81 1.5 35.03-14.31 42.94L103.5 256l262.8 131.4c15.81 7.906 22.22 27.12 14.31 42.94C375 441.5 363.7 448 351.1 448z\"],\n    \"less-than-equal\": [448, 512, [], \"f537\", \"M52.11 221.7l320 128C376 351.3 380 352 383.1 352c12.7 0 24.72-7.594 29.73-20.12c6.562-16.41-1.422-35.03-17.83-41.59L150.2 192l245.7-98.28c16.41-6.562 24.39-25.19 17.83-41.59S388.6 27.68 372.1 34.21l-320 128.1C39.97 167.2 32 178.9 32 192S39.97 216.8 52.11 221.7zM416 416H32c-17.67 0-32 14.31-32 31.1S14.33 480 32 480h384c17.67 0 32-14.31 32-32S433.7 416 416 416z\"],\n    \"life-ring\": [512, 512, [], \"f1cd\", \"M470.6 425.4C483.1 437.9 483.1 458.1 470.6 470.6C458.1 483.1 437.9 483.1 425.4 470.6L412.1 458.2C369.6 491.9 315.2 512 255.1 512C196.8 512 142.4 491.9 99.02 458.2L86.63 470.6C74.13 483.1 53.87 483.1 41.37 470.6C28.88 458.1 28.88 437.9 41.37 425.4L53.76 412.1C20.07 369.6 0 315.2 0 255.1C0 196.8 20.07 142.4 53.76 99.02L41.37 86.63C28.88 74.13 28.88 53.87 41.37 41.37C53.87 28.88 74.13 28.88 86.63 41.37L99.02 53.76C142.4 20.07 196.8 0 255.1 0C315.2 0 369.6 20.07 412.1 53.76L425.4 41.37C437.9 28.88 458.1 28.88 470.6 41.37C483.1 53.87 483.1 74.13 470.6 86.63L458.2 99.02C491.9 142.4 512 196.8 512 255.1C512 315.2 491.9 369.6 458.2 412.1L470.6 425.4zM309.3 354.5C293.4 363.1 275.3 368 255.1 368C236.7 368 218.6 363.1 202.7 354.5L144.8 412.5C176.1 434.9 214.5 448 255.1 448C297.5 448 335.9 434.9 367.2 412.5L309.3 354.5zM448 255.1C448 214.5 434.9 176.1 412.5 144.8L354.5 202.7C363.1 218.6 368 236.7 368 256C368 275.3 363.1 293.4 354.5 309.3L412.5 367.2C434.9 335.9 448 297.5 448 256V255.1zM255.1 63.1C214.5 63.1 176.1 77.14 144.8 99.5L202.7 157.5C218.6 148.9 236.7 143.1 255.1 143.1C275.3 143.1 293.4 148.9 309.3 157.5L367.2 99.5C335.9 77.14 297.5 63.1 256 63.1H255.1zM157.5 309.3C148.9 293.4 143.1 275.3 143.1 255.1C143.1 236.7 148.9 218.6 157.5 202.7L99.5 144.8C77.14 176.1 63.1 214.5 63.1 255.1C63.1 297.5 77.14 335.9 99.5 367.2L157.5 309.3zM255.1 207.1C229.5 207.1 207.1 229.5 207.1 255.1C207.1 282.5 229.5 303.1 255.1 303.1C282.5 303.1 304 282.5 304 255.1C304 229.5 282.5 207.1 255.1 207.1z\"],\n    \"lightbulb\": [384, 512, [128161], \"f0eb\", \"M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z\"],\n    \"link\": [640, 512, [128279, \"chain\"], \"f0c1\", \"M172.5 131.1C228.1 75.51 320.5 75.51 376.1 131.1C426.1 181.1 433.5 260.8 392.4 318.3L391.3 319.9C381 334.2 361 337.6 346.7 327.3C332.3 317 328.9 297 339.2 282.7L340.3 281.1C363.2 249 359.6 205.1 331.7 177.2C300.3 145.8 249.2 145.8 217.7 177.2L105.5 289.5C73.99 320.1 73.99 372 105.5 403.5C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4C265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2C188.1 505.3 110.2 498.7 60.21 448.8C3.741 392.3 3.741 300.7 60.21 244.3L172.5 131.1zM467.5 380C411 436.5 319.5 436.5 263 380C213 330 206.5 251.2 247.6 193.7L248.7 192.1C258.1 177.8 278.1 174.4 293.3 184.7C307.7 194.1 311.1 214.1 300.8 229.3L299.7 230.9C276.8 262.1 280.4 306.9 308.3 334.8C339.7 366.2 390.8 366.2 422.3 334.8L534.5 222.5C566 191 566 139.1 534.5 108.5C506.7 80.63 462.7 76.99 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58C374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.731 529.8 13.25 579.8 63.24C636.3 119.7 636.3 211.3 579.8 267.7L467.5 380z\"],\n    \"link-slash\": [640, 512, [\"chain-broken\", \"chain-slash\", \"unlink\"], \"f127\", \"M185.7 120.3C242.5 75.82 324.7 79.73 376.1 131.1C420.1 175.1 430.9 239.6 406.7 293.5L438.6 318.4L534.5 222.5C566 191 566 139.1 534.5 108.5C506.7 80.63 462.7 76.1 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58C374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.732 529.8 13.25 579.8 63.24C636.3 119.7 636.3 211.3 579.8 267.7L489.3 358.2L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L185.7 120.3zM238.1 161.1L353.4 251.7C359.3 225.5 351.7 197.2 331.7 177.2C306.6 152.1 269.1 147 238.1 161.1V161.1zM263 380C233.1 350.1 218.7 309.8 220.9 270L406.6 416.4C357.4 431 301.9 418.9 263 380V380zM116.6 187.9L167.2 227.8L105.5 289.5C73.99 320.1 73.99 372 105.5 403.5C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4C265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2C188.1 505.3 110.2 498.7 60.21 448.8C3.741 392.3 3.741 300.7 60.21 244.3L116.6 187.9z\"],\n    \"lira-sign\": [320, 512, [8356], \"f195\", \"M111.1 191.1H224C241.7 191.1 256 206.3 256 223.1C256 241.7 241.7 255.1 224 255.1H111.1V287.1H224C241.7 287.1 256 302.3 256 319.1C256 337.7 241.7 352 224 352H110.8C108.1 374.2 100.8 395.6 89.2 414.9L88.52 416H288C305.7 416 320 430.3 320 448C320 465.7 305.7 480 288 480H32C20.47 480 9.834 473.8 4.154 463.8C-1.527 453.7-1.371 441.4 4.56 431.5L34.32 381.9C39.89 372.6 43.83 362.5 46.01 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288H48V256H32C14.33 256 0 241.7 0 224C0 206.3 14.33 192 32 192H48V160.4C48 89.47 105.5 32 176.4 32C190.2 32 203.9 34.22 216.1 38.59L298.1 65.64C314.9 71.23 323.9 89.35 318.4 106.1C312.8 122.9 294.6 131.9 277.9 126.4L196.7 99.3C190.2 97.12 183.3 96 176.4 96C140.8 96 112 124.8 112 160.4L111.1 191.1z\"],\n    \"list\": [512, 512, [\"list-squares\"], \"f03a\", \"M88 48C101.3 48 112 58.75 112 72V120C112 133.3 101.3 144 88 144H40C26.75 144 16 133.3 16 120V72C16 58.75 26.75 48 40 48H88zM480 64C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H192C174.3 128 160 113.7 160 96C160 78.33 174.3 64 192 64H480zM480 224C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H192C174.3 288 160 273.7 160 256C160 238.3 174.3 224 192 224H480zM480 384C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H192C174.3 448 160 433.7 160 416C160 398.3 174.3 384 192 384H480zM16 232C16 218.7 26.75 208 40 208H88C101.3 208 112 218.7 112 232V280C112 293.3 101.3 304 88 304H40C26.75 304 16 293.3 16 280V232zM88 368C101.3 368 112 378.7 112 392V440C112 453.3 101.3 464 88 464H40C26.75 464 16 453.3 16 440V392C16 378.7 26.75 368 40 368H88z\"],\n    \"list-check\": [512, 512, [\"tasks\"], \"f0ae\", \"M152.1 38.16C161.9 47.03 162.7 62.2 153.8 72.06L81.84 152.1C77.43 156.9 71.21 159.8 64.63 159.1C58.05 160.2 51.69 157.6 47.03 152.1L7.029 112.1C-2.343 103.6-2.343 88.4 7.029 79.03C16.4 69.66 31.6 69.66 40.97 79.03L63.08 101.1L118.2 39.94C127 30.09 142.2 29.29 152.1 38.16V38.16zM152.1 198.2C161.9 207 162.7 222.2 153.8 232.1L81.84 312.1C77.43 316.9 71.21 319.8 64.63 319.1C58.05 320.2 51.69 317.6 47.03 312.1L7.029 272.1C-2.343 263.6-2.343 248.4 7.029 239C16.4 229.7 31.6 229.7 40.97 239L63.08 261.1L118.2 199.9C127 190.1 142.2 189.3 152.1 198.2V198.2zM224 96C224 78.33 238.3 64 256 64H480C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H256C238.3 128 224 113.7 224 96V96zM224 256C224 238.3 238.3 224 256 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H256C238.3 288 224 273.7 224 256zM160 416C160 398.3 174.3 384 192 384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H192C174.3 448 160 433.7 160 416zM0 416C0 389.5 21.49 368 48 368C74.51 368 96 389.5 96 416C96 442.5 74.51 464 48 464C21.49 464 0 442.5 0 416z\"],\n    \"list-ol\": [576, 512, [\"list-1-2\", \"list-numeric\"], \"f0cb\", \"M55.1 56.04C55.1 42.78 66.74 32.04 79.1 32.04H111.1C125.3 32.04 135.1 42.78 135.1 56.04V176H151.1C165.3 176 175.1 186.8 175.1 200C175.1 213.3 165.3 224 151.1 224H71.1C58.74 224 47.1 213.3 47.1 200C47.1 186.8 58.74 176 71.1 176H87.1V80.04H79.1C66.74 80.04 55.1 69.29 55.1 56.04V56.04zM118.7 341.2C112.1 333.8 100.4 334.3 94.65 342.4L83.53 357.9C75.83 368.7 60.84 371.2 50.05 363.5C39.26 355.8 36.77 340.8 44.47 330.1L55.59 314.5C79.33 281.2 127.9 278.8 154.8 309.6C176.1 333.1 175.6 370.5 153.7 394.3L118.8 432H152C165.3 432 176 442.7 176 456C176 469.3 165.3 480 152 480H64C54.47 480 45.84 474.4 42.02 465.6C38.19 456.9 39.9 446.7 46.36 439.7L118.4 361.7C123.7 355.9 123.8 347.1 118.7 341.2L118.7 341.2zM512 64C529.7 64 544 78.33 544 96C544 113.7 529.7 128 512 128H256C238.3 128 224 113.7 224 96C224 78.33 238.3 64 256 64H512zM512 224C529.7 224 544 238.3 544 256C544 273.7 529.7 288 512 288H256C238.3 288 224 273.7 224 256C224 238.3 238.3 224 256 224H512zM512 384C529.7 384 544 398.3 544 416C544 433.7 529.7 448 512 448H256C238.3 448 224 433.7 224 416C224 398.3 238.3 384 256 384H512z\"],\n    \"list-ul\": [512, 512, [\"list-dots\"], \"f0ca\", \"M16 96C16 69.49 37.49 48 64 48C90.51 48 112 69.49 112 96C112 122.5 90.51 144 64 144C37.49 144 16 122.5 16 96zM480 64C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H192C174.3 128 160 113.7 160 96C160 78.33 174.3 64 192 64H480zM480 224C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H192C174.3 288 160 273.7 160 256C160 238.3 174.3 224 192 224H480zM480 384C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H192C174.3 448 160 433.7 160 416C160 398.3 174.3 384 192 384H480zM16 416C16 389.5 37.49 368 64 368C90.51 368 112 389.5 112 416C112 442.5 90.51 464 64 464C37.49 464 16 442.5 16 416zM112 256C112 282.5 90.51 304 64 304C37.49 304 16 282.5 16 256C16 229.5 37.49 208 64 208C90.51 208 112 229.5 112 256z\"],\n    \"litecoin-sign\": [384, 512, [], \"e1d3\", \"M128 195.3L247.2 161.2C264.2 156.4 281.9 166.2 286.8 183.2C291.6 200.2 281.8 217.9 264.8 222.8L128 261.9V416H352C369.7 416 384 430.3 384 448C384 465.7 369.7 480 352 480H96C78.33 480 64 465.7 64 448V280.1L40.79 286.8C23.8 291.6 6.087 281.8 1.232 264.8C-3.623 247.8 6.216 230.1 23.21 225.2L64 213.6V64C64 46.33 78.33 32 96 32C113.7 32 128 46.33 128 64V195.3z\"],\n    \"location-arrow\": [448, 512, [], \"f124\", \"M285.6 444.1C279.8 458.3 264.8 466.3 249.8 463.4C234.8 460.4 223.1 447.3 223.1 432V256H47.1C32.71 256 19.55 245.2 16.6 230.2C13.65 215.2 21.73 200.2 35.88 194.4L387.9 50.38C399.8 45.5 413.5 48.26 422.6 57.37C431.7 66.49 434.5 80.19 429.6 92.12L285.6 444.1z\"],\n    \"location-crosshairs\": [512, 512, [\"location\"], \"f601\", \"M176 256C176 211.8 211.8 176 256 176C300.2 176 336 211.8 336 256C336 300.2 300.2 336 256 336C211.8 336 176 300.2 176 256zM256 0C273.7 0 288 14.33 288 32V66.65C368.4 80.14 431.9 143.6 445.3 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H445.3C431.9 368.4 368.4 431.9 288 445.3V480C288 497.7 273.7 512 256 512C238.3 512 224 497.7 224 480V445.3C143.6 431.9 80.14 368.4 66.65 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H66.65C80.14 143.6 143.6 80.14 224 66.65V32C224 14.33 238.3 0 256 0zM128 256C128 326.7 185.3 384 256 384C326.7 384 384 326.7 384 256C384 185.3 326.7 128 256 128C185.3 128 128 185.3 128 256z\"],\n    \"location-dot\": [384, 512, [\"map-marker-alt\"], \"f3c5\", \"M168.3 499.2C116.1 435 0 279.4 0 192C0 85.96 85.96 0 192 0C298 0 384 85.96 384 192C384 279.4 267 435 215.7 499.2C203.4 514.5 180.6 514.5 168.3 499.2H168.3zM192 256C227.3 256 256 227.3 256 192C256 156.7 227.3 128 192 128C156.7 128 128 156.7 128 192C128 227.3 156.7 256 192 256z\"],\n    \"location-pin\": [384, 512, [\"map-marker\"], \"f041\", \"M384 192C384 279.4 267 435 215.7 499.2C203.4 514.5 180.6 514.5 168.3 499.2C116.1 435 0 279.4 0 192C0 85.96 85.96 0 192 0C298 0 384 85.96 384 192H384z\"],\n    \"lock\": [448, 512, [128274], \"f023\", \"M80 192V144C80 64.47 144.5 0 224 0C303.5 0 368 64.47 368 144V192H384C419.3 192 448 220.7 448 256V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V256C0 220.7 28.65 192 64 192H80zM144 192H304V144C304 99.82 268.2 64 224 64C179.8 64 144 99.82 144 144V192z\"],\n    \"lock-open\": [576, 512, [], \"f3c1\", \"M352 192H384C419.3 192 448 220.7 448 256V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V256C0 220.7 28.65 192 64 192H288V144C288 64.47 352.5 0 432 0C511.5 0 576 64.47 576 144V192C576 209.7 561.7 224 544 224C526.3 224 512 209.7 512 192V144C512 99.82 476.2 64 432 64C387.8 64 352 99.82 352 144V192z\"],\n    \"lungs\": [640, 512, [129729], \"f604\", \"M640 419.8c0 61.25-62.5 105.5-125.3 88.63l-59.53-15.88c-42.12-11.38-71.25-47.5-71.25-88.63L384 316.4l85.88 57.25c3.625 2.375 8.625 1.375 11-2.25l8.875-13.37c2.5-3.625 1.5-8.625-2.125-11L320 235.3l-167.6 111.8c-1.75 1.125-3 3-3.375 5c-.375 2.125 0 4.25 1.25 6l8.875 13.37c1.125 1.75 3 3 5 3.375c2.125 .375 4.25 0 6-1.125L256 316.4l.0313 87.5c0 41.13-29.12 77.25-71.25 88.63l-59.53 15.88C62.5 525.3 0 481 0 419.8c0-10 1.25-19.88 3.875-29.63C25.5 308.9 59.91 231 105.9 159.1c22.12-34.63 36.12-63.13 80.12-63.13C224.7 96 256 125.4 256 161.8v60.1l32.88-21.97C293.4 196.9 296 192 296 186.6V16C296 7.125 303.1 0 312 0h16c8.875 0 16 7.125 16 16v170.6c0 5.375 2.625 10.25 7.125 13.25L384 221.8v-60.1c0-36.38 31.34-65.75 69.97-65.75c43.1 0 58 28.5 80.13 63.13c46 71.88 80.41 149.8 102 231C638.8 399.9 640 409.8 640 419.8z\"],\n    \"lungs-virus\": [640, 512, [], \"e067\", \"M195.5 444.5c-18.71-18.72-18.71-49.16 .0033-67.87l8.576-8.576H192c-26.47 0-48-21.53-48-48c0-26.47 21.53-48 48-48l12.12-.0055L195.5 263.4c-18.71-18.72-18.71-49.16 0-67.88C204.6 186.5 216.7 181.5 229.5 181.5c9.576 0 18.72 2.799 26.52 7.986l.04-27.75c0-36.38-31.42-65.72-70.05-65.72c-44 0-57.97 28.5-80.09 63.13c-46 71.88-80.39 149.8-102 231C1.257 399.9 0 409.8 0 419.8c0 61.25 62.5 105.5 125.3 88.62l59.5-15.9c21.74-5.867 39.91-18.39 52.51-34.73c-2.553 .4141-5.137 .7591-7.774 .7591C216.7 458.5 204.6 453.5 195.5 444.5zM343.1 150.7L344 16C344 7.125 336.9 0 328 0h-16c-8.875 0-16 7.125-16 16L295.1 150.7c7.088-4.133 15.22-6.675 23.1-6.675S336.9 146.5 343.1 150.7zM421.8 421.8c6.25-6.25 6.25-16.37 0-22.62l-8.576-8.576c-20.16-20.16-5.881-54.63 22.63-54.63H448c8.844 0 16-7.156 16-16c0-8.844-7.156-16-16-16h-12.12c-28.51 0-42.79-34.47-22.63-54.63l8.576-8.577c6.25-6.25 6.25-16.37 0-22.62s-16.38-6.25-22.62 0l-8.576 8.577C370.5 246.9 336 232.6 336 204.1v-12.12c0-8.844-7.156-15.1-16-15.1s-16 7.156-16 15.1v12.12c0 28.51-34.47 42.79-54.63 22.63L240.8 218.2c-6.25-6.25-16.38-6.25-22.62 0s-6.25 16.37 0 22.62l8.576 8.577c20.16 20.16 5.881 54.63-22.63 54.63H192c-8.844 0-16 7.156-16 16c0 8.844 7.156 16 16 16h12.12c28.51 0 42.79 34.47 22.63 54.63l-8.576 8.576c-6.25 6.25-6.25 16.37 0 22.62c3.125 3.125 7.219 4.688 11.31 4.688s8.188-1.562 11.31-4.688l8.576-8.575C269.5 393.1 304 407.4 304 435.9v12.12c0 8.844 7.156 16 16 16s16-7.156 16-16v-12.12c0-28.51 34.47-42.79 54.63-22.63l8.576 8.575c3.125 3.125 7.219 4.688 11.31 4.688S418.7 424.9 421.8 421.8zM288 303.1c-8.836 0-16-7.162-16-15.1S279.2 271.1 288 271.1S304 279.2 304 287.1S296.8 303.1 288 303.1zM352 367.1c-8.836 0-16-7.166-16-16s7.164-15.1 16-15.1s16 7.166 16 16S360.8 367.1 352 367.1zM636.1 390.1c-21.62-81.25-56.02-159.1-102-231c-22.12-34.63-36.09-63.13-80.09-63.13c-38.62 0-70.01 29.35-70.01 65.73v27.74c7.795-5.188 16.94-7.986 26.52-7.986c12.82 0 24.88 4.999 33.95 14.07c18.71 18.72 18.71 49.16 0 67.88l-8.576 8.571L448 272c26.47 0 48 21.54 48 48c0 26.47-21.53 48-48 48h-12.12l8.576 8.576c18.71 18.72 18.71 49.16-.0072 67.87c-9.066 9.066-21.12 14.06-33.94 14.06c-2.637 0-5.211-.3438-7.764-.7578c12.6 16.34 30.77 28.86 52.51 34.73l59.5 15.9C577.5 525.3 640 481 640 419.8C640 409.8 638.7 399.9 636.1 390.1z\"],\n    \"m\": [448, 512, [109], \"4d\", \"M448 64.01v384c0 17.67-14.31 32-32 32s-32-14.33-32-32V169.7l-133.4 200.1c-11.88 17.81-41.38 17.81-53.25 0L64 169.7v278.3c0 17.67-14.31 32-32 32s-32-14.33-32-32v-384c0-14.09 9.219-26.55 22.72-30.63c13.47-4.156 28.09 1.141 35.91 12.88L224 294.3l165.4-248.1c7.812-11.73 22.47-17.03 35.91-12.88C438.8 37.47 448 49.92 448 64.01z\"],\n    \"magnet\": [448, 512, [129522], \"f076\", \"M128 160V256C128 309 170.1 352 224 352C277 352 320 309 320 256V160H448V256C448 379.7 347.7 480 224 480C100.3 480 0 379.7 0 256V160H128zM0 64C0 46.33 14.33 32 32 32H96C113.7 32 128 46.33 128 64V128H0V64zM320 64C320 46.33 334.3 32 352 32H416C433.7 32 448 46.33 448 64V128H320V64z\"],\n    \"magnifying-glass\": [512, 512, [128269, \"search\"], \"f002\", \"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7C401.8 87.79 326.8 13.32 235.2 1.723C99.01-15.51-15.51 99.01 1.724 235.2c11.6 91.64 86.08 166.7 177.6 178.9c53.8 7.189 104.3-6.236 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 0C515.9 484.7 515.9 459.3 500.3 443.7zM79.1 208c0-70.58 57.42-128 128-128s128 57.42 128 128c0 70.58-57.42 128-128 128S79.1 278.6 79.1 208z\"],\n    \"magnifying-glass-dollar\": [512, 512, [\"search-dollar\"], \"f688\", \"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7c-12.23-91.55-87.28-166-178.9-177.6c-136.2-17.24-250.7 97.28-233.4 233.4c11.6 91.64 86.07 166.7 177.6 178.9c53.81 7.191 104.3-6.235 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 .0004C515.9 484.7 515.9 459.3 500.3 443.7zM273.7 253.8C269.8 276.4 252.6 291.3 228 296.1V304c0 11.03-8.953 20-20 20S188 315 188 304V295.2C178.2 293.2 168.4 289.9 159.6 286.8L154.8 285.1C144.4 281.4 138.9 269.9 142.6 259.5C146.2 249.1 157.6 243.7 168.1 247.3l5.062 1.812c8.562 3.094 18.25 6.562 25.91 7.719c16.23 2.5 33.47-.0313 35.17-9.812c1.219-7.094 .4062-10.62-31.8-19.84L196.2 225.4C177.8 219.1 134.5 207.3 142.3 162.2C146.2 139.6 163.5 124.8 188 120V112c0-11.03 8.953-20 20-20S228 100.1 228 112v8.695c6.252 1.273 13.06 3.07 21.47 5.992c10.42 3.625 15.95 15.03 12.33 25.47C258.2 162.6 246.8 168.1 236.3 164.5C228.2 161.7 221.8 159.9 216.8 159.2c-16.11-2.594-33.38 .0313-35.08 9.812c-1 5.812-1.719 10 25.7 18.03l6 1.719C238.9 196 281.5 208.2 273.7 253.8z\"],\n    \"magnifying-glass-location\": [512, 512, [\"search-location\"], \"f689\", \"M236 176c0 15.46-12.54 28-28 28S180 191.5 180 176S192.5 148 208 148S236 160.5 236 176zM500.3 500.3c-15.62 15.62-40.95 15.62-56.57 0l-119.7-119.7c-40.41 27.22-90.9 40.65-144.7 33.46c-91.55-12.23-166-87.28-177.6-178.9c-17.24-136.2 97.29-250.7 233.4-233.4c91.64 11.6 166.7 86.07 178.9 177.6c7.19 53.8-6.236 104.3-33.46 144.7l119.7 119.7C515.9 459.3 515.9 484.7 500.3 500.3zM294.1 182.2C294.1 134.5 255.6 96 207.1 96C160.4 96 121.9 134.5 121.9 182.2c0 38.35 56.29 108.5 77.87 134C201.8 318.5 204.7 320 207.1 320c3.207 0 6.26-1.459 8.303-3.791C237.8 290.7 294.1 220.5 294.1 182.2z\"],\n    \"magnifying-glass-minus\": [512, 512, [\"search-minus\"], \"f010\", \"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7c-12.23-91.55-87.28-166-178.9-177.6c-136.2-17.24-250.7 97.28-233.4 233.4c11.6 91.64 86.07 166.7 177.6 178.9c53.81 7.191 104.3-6.235 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 .0003C515.9 484.7 515.9 459.3 500.3 443.7zM288 232H127.1C114.7 232 104 221.3 104 208s10.74-24 23.1-24h160C301.3 184 312 194.7 312 208S301.3 232 288 232z\"],\n    \"magnifying-glass-plus\": [512, 512, [\"search-plus\"], \"f00e\", \"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7c-12.23-91.55-87.28-166-178.9-177.6c-136.2-17.24-250.7 97.28-233.4 233.4c11.6 91.64 86.07 166.7 177.6 178.9c53.81 7.191 104.3-6.235 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 .0003C515.9 484.7 515.9 459.3 500.3 443.7zM288 232H231.1V288c0 13.26-10.74 24-23.1 24C194.7 312 184 301.3 184 288V232H127.1C114.7 232 104 221.3 104 208s10.74-24 23.1-24H184V128c0-13.26 10.74-24 23.1-24S231.1 114.7 231.1 128v56h56C301.3 184 312 194.7 312 208S301.3 232 288 232z\"],\n    \"manat-sign\": [384, 512, [], \"e1d5\", \"M224 64V98.65C314.8 113.9 384 192.9 384 288V448C384 465.7 369.7 480 352 480C334.3 480 320 465.7 320 448V288C320 228.4 279.2 178.2 224 164V448C224 465.7 209.7 480 192 480C174.3 480 160 465.7 160 448V164C104.8 178.2 64 228.4 64 288V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448V288C0 192.9 69.19 113.9 160 98.65V64C160 46.33 174.3 32 192 32C209.7 32 224 46.33 224 64z\"],\n    \"map\": [576, 512, [62072, 128506], \"f279\", \"M384 476.1L192 421.2V35.93L384 90.79V476.1zM416 88.37L543.1 37.53C558.9 31.23 576 42.84 576 59.82V394.6C576 404.4 570 413.2 560.9 416.9L416 474.8V88.37zM15.09 95.13L160 37.17V423.6L32.91 474.5C17.15 480.8 0 469.2 0 452.2V117.4C0 107.6 5.975 98.78 15.09 95.13V95.13z\"],\n    \"map-location\": [576, 512, [\"map-marked\"], \"f59f\", \"M273.2 311.1C241.1 271.9 167.1 174.6 167.1 120C167.1 53.73 221.7 0 287.1 0C354.3 0 408 53.73 408 120C408 174.6 334.9 271.9 302.8 311.1C295.1 321.6 280.9 321.6 273.2 311.1V311.1zM416 503V200.4C419.5 193.5 422.7 186.7 425.6 179.8C426.1 178.6 426.6 177.4 427.1 176.1L543.1 129.7C558.9 123.4 576 135 576 152V422.8C576 432.6 570 441.4 560.9 445.1L416 503zM15.09 187.3L137.6 138.3C140 152.5 144.9 166.6 150.4 179.8C153.3 186.7 156.5 193.5 160 200.4V451.8L32.91 502.7C17.15 508.1 0 497.4 0 480.4V209.6C0 199.8 5.975 190.1 15.09 187.3H15.09zM384 504.3L191.1 449.4V255C212.5 286.3 234.3 314.6 248.2 331.1C268.7 357.6 307.3 357.6 327.8 331.1C341.7 314.6 363.5 286.3 384 255L384 504.3z\"],\n    \"map-location-dot\": [576, 512, [\"map-marked-alt\"], \"f5a0\", \"M408 120C408 174.6 334.9 271.9 302.8 311.1C295.1 321.6 280.9 321.6 273.2 311.1C241.1 271.9 168 174.6 168 120C168 53.73 221.7 0 288 0C354.3 0 408 53.73 408 120zM288 152C310.1 152 328 134.1 328 112C328 89.91 310.1 72 288 72C265.9 72 248 89.91 248 112C248 134.1 265.9 152 288 152zM425.6 179.8C426.1 178.6 426.6 177.4 427.1 176.1L543.1 129.7C558.9 123.4 576 135 576 152V422.8C576 432.6 570 441.4 560.9 445.1L416 503V200.4C419.5 193.5 422.7 186.7 425.6 179.8zM150.4 179.8C153.3 186.7 156.5 193.5 160 200.4V451.8L32.91 502.7C17.15 508.1 0 497.4 0 480.4V209.6C0 199.8 5.975 190.1 15.09 187.3L137.6 138.3C140 152.5 144.9 166.6 150.4 179.8H150.4zM327.8 331.1C341.7 314.6 363.5 286.3 384 255V504.3L192 449.4V255C212.5 286.3 234.3 314.6 248.2 331.1C268.7 357.6 307.3 357.6 327.8 331.1L327.8 331.1z\"],\n    \"map-pin\": [320, 512, [128205], \"f276\", \"M320 144C320 223.5 255.5 288 176 288C96.47 288 32 223.5 32 144C32 64.47 96.47 0 176 0C255.5 0 320 64.47 320 144zM192 64C192 55.16 184.8 48 176 48C122.1 48 80 90.98 80 144C80 152.8 87.16 160 96 160C104.8 160 112 152.8 112 144C112 108.7 140.7 80 176 80C184.8 80 192 72.84 192 64zM144 480V317.1C154.4 319 165.1 319.1 176 319.1C186.9 319.1 197.6 319 208 317.1V480C208 497.7 193.7 512 176 512C158.3 512 144 497.7 144 480z\"],\n    \"marker\": [512, 512, [], \"f5a1\", \"M480.1 160.1L316.3 325.7L186.3 195.7L302.1 80L288.1 66.91C279.6 57.54 264.4 57.54 255 66.91L168.1 152.1C159.6 162.3 144.4 162.3 135 152.1C125.7 143.6 125.7 128.4 135 119L221.1 32.97C249.2 4.853 294.8 4.853 322.9 32.97L336 46.06L351 31.03C386.9-4.849 445.1-4.849 480.1 31.03C516.9 66.91 516.9 125.1 480.1 160.1V160.1zM229.5 412.5C181.5 460.5 120.3 493.2 53.7 506.5L28.71 511.5C20.84 513.1 12.7 510.6 7.03 504.1C1.356 499.3-1.107 491.2 .4662 483.3L5.465 458.3C18.78 391.7 51.52 330.5 99.54 282.5L163.7 218.3L293.7 348.3L229.5 412.5z\"],\n    \"mars\": [448, 512, [9794], \"f222\", \"M431.1 31.1l-112.6 0c-21.42 0-32.15 25.85-17 40.97l29.61 29.56l-56.65 56.55c-30.03-20.66-65.04-31-100-31c-47.99-.002-95.96 19.44-131.1 58.39c-60.86 67.51-58.65 175 4.748 240.1C83.66 462.2 129.6 480 175.5 480c45.12 0 90.34-17.18 124.8-51.55c61.11-60.99 67.77-155.6 20.42-224.1l56.65-56.55l29.61 29.56C411.9 182.2 417.9 184.4 423.8 184.4C436.1 184.4 448 174.8 448 160.4V47.1C448 39.16 440.8 31.1 431.1 31.1zM243.5 371.9c-18.75 18.71-43.38 28.07-68 28.07c-24.63 0-49.25-9.355-68.01-28.07c-37.5-37.43-37.5-98.33 0-135.8c18.75-18.71 43.38-28.07 68.01-28.07c24.63 0 49.25 9.357 68 28.07C281 273.5 281 334.5 243.5 371.9z\"],\n    \"mars-and-venus\": [512, 512, [9893], \"f224\", \"M480 .0002l-112.4 .0001c-21.38 0-32.09 25.85-16.97 40.97l29.56 29.56l-27.11 27.11C326.1 76.85 292.7 64 256 64c-88.37 0-160 71.63-160 160c0 77.4 54.97 141.9 128 156.8v19.22H192c-8.836 0-16 7.162-16 16v31.1c0 8.836 7.164 16 16 16l32 .0001v32c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-32l32-.0001c8.838 0 16-7.164 16-16v-31.1c0-8.838-7.162-16-16-16h-32v-19.22c73.03-14.83 128-79.37 128-156.8c0-28.38-8.018-54.65-20.98-77.77l30.45-30.45l29.56 29.56C470.1 160.5 496 149.8 496 128.4V16C496 7.164 488.8 .0002 480 .0002zM256 304c-44.11 0-80-35.89-80-80c0-44.11 35.89-80 80-80c44.11 0 80 35.89 80 80C336 268.1 300.1 304 256 304z\"],\n    \"mars-double\": [640, 512, [9891], \"f227\", \"M320.7 204.3l56.65-56.55l29.61 29.56C422.1 192.5 448 181.7 448 160.4V47.1c0-8.838-7.176-15.1-16.03-15.1H319.4c-21.42 0-32.15 25.85-17 40.97l29.61 29.56L275.4 159.1c-71.21-48.99-170.4-39.96-231.1 27.39c-60.86 67.51-58.65 175 4.748 240.1c68.7 70.57 181.8 71.19 251.3 1.847C361.4 367.5 368 272.9 320.7 204.3zM243.5 371.9c-37.5 37.43-98.51 37.43-136 0s-37.5-98.33 0-135.8c37.5-37.43 98.51-37.43 136 0C281 273.5 281 334.5 243.5 371.9zM623.1 32h-112.6c-21.42 0-32.15 25.85-17 40.97l29.61 29.56L480 146.5v13.91C480 191.3 454.8 216.4 423.8 216.4C421.2 216.4 418.6 216 416 215.6v5.862c6.922 4.049 13.58 8.691 19.51 14.61c37.5 37.43 37.5 98.33 0 135.8c-18.75 18.71-43.38 28.07-68 28.07c-2.277 0-4.523-.4883-6.795-.6484c-9.641 18.69-22.1 36.24-37.64 51.77c-6.059 6.059-12.49 11.53-19.13 16.73C324.4 475.7 345.9 480 367.5 480c45.12 0 90.34-17.18 124.8-51.55c61.11-60.99 67.77-155.6 20.42-224.1l56.65-56.55l29.61 29.56c4.898 4.889 10.92 7.075 16.83 7.075C628.1 184.4 640 174.8 640 160.4V48C640 39.16 632.8 32 623.1 32z\"],\n    \"mars-stroke\": [512, 512, [9894], \"f229\", \"M496 .0002l-112.4 .0001c-21.38 0-32.09 25.85-16.97 40.97l29.56 29.56l-24.33 24.34l-33.94-33.94c-6.248-6.25-16.38-6.248-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l33.94 33.94l-18.96 18.96C239.1 111.8 144.5 118.6 83.55 179.5c-68.73 68.73-68.73 180.2 0 248.9c68.73 68.73 180.2 68.73 248.9 0c60.99-60.99 67.73-155.6 20.47-224.1l18.96-18.96l33.94 33.94c6.248 6.248 16.38 6.25 22.63 0l22.63-22.63c6.248-6.248 6.248-16.38 0-22.63l-33.94-33.94l24.34-24.33l29.56 29.56C486.1 160.5 512 149.8 512 128.4v-112.4C512 7.162 504.8 .0002 496 .0002zM275.9 371.9c-37.43 37.43-98.33 37.43-135.8 0c-37.43-37.43-37.43-98.33 0-135.8c37.43-37.43 98.33-37.43 135.8 0C313.3 273.5 313.3 334.5 275.9 371.9z\"],\n    \"mars-stroke-right\": [640, 512, [9897, \"mars-stroke-h\"], \"f22b\", \"M619.3 244.7l-82.34-77.61c-15.12-15.12-40.97-4.41-40.97 16.97V223.1L463.1 224V176c.002-8.838-7.162-16-15.1-16h-32c-8.84 0-16 7.16-16 16V224h-19.05c-15.07-81.9-86.7-144-172.1-144C110.8 80 32 158.8 32 256c0 97.2 78.8 176 176 176c86.26 0 157.9-62.1 172.1-144h19.05V336c0 8.836 7.162 16 16 16h32c8.836 0 15.1-7.164 15.1-16V287.1L496 288v39.95c0 21.38 25.85 32.09 40.97 16.97l82.34-77.61C625.6 261.1 625.6 250.9 619.3 244.7zM208 352c-52.94 0-96-43.07-96-96c-.002-52.94 43.06-96 96-96c52.93 0 95.1 43.06 95.1 96C304 308.9 260.9 352 208 352z\"],\n    \"mars-stroke-up\": [384, 512, [9896, \"mars-stroke-v\"], \"f22a\", \"M224 163V144h24c4.418 0 8-3.578 8-7.1V120c0-4.418-3.582-7.1-8-7.1H224V96h24.63c16.41 0 24.62-19.84 13.02-31.44l-60.97-60.97c-4.795-4.793-12.57-4.793-17.36 0L122.3 64.56c-11.6 11.6-3.383 31.44 13.02 31.44H160v15.1H136c-4.418 0-8 3.582-8 7.1v15.1c0 4.422 3.582 7.1 8 7.1H160v19.05c-84.9 15.62-148.5 92.01-143.7 182.5c4.783 90.69 82.34 165.1 173.2 166.5C287.8 513.4 368 434.1 368 336C368 249.7 305.9 178.1 224 163zM192 431.1c-52.94 0-96-43.06-96-95.1s43.06-95.1 96-95.1c52.93 0 96 43.06 96 95.1S244.9 431.1 192 431.1z\"],\n    \"martini-glass\": [512, 512, [127864, \"glass-martini-alt\"], \"f57b\", \"M502 57.63C523.3 36.38 508.3 0 478.3 0H33.72C3.711 0-11.29 36.38 9.962 57.63l214 214V448H175.1c-26.51 0-47.1 21.49-47.1 48c0 8.836 7.164 16 16 16h224c8.836 0 16-7.164 16-16c0-26.51-21.49-48-48-48h-47.1V271.6L502 57.63zM405.1 64l-64.01 64H170.9L106.9 64H405.1z\"],\n    \"martini-glass-citrus\": [576, 512, [\"cocktail\"], \"f561\", \"M288 464H240v-125.3l168.8-168.7C424.3 154.5 413.3 128 391.4 128H24.63C2.751 128-8.249 154.5 7.251 170l168.7 168.7V464H128c-17.67 0-32 14.33-32 32c0 8.836 7.164 16 15.1 16h191.1c8.836 0 15.1-7.164 15.1-16C320 478.3 305.7 464 288 464zM432 0c-62.63 0-115.4 40.25-135.1 96h52.5c16.62-28.5 47.25-48 82.62-48c52.88 0 95.1 43 95.1 96s-43.12 96-95.1 96c-14 0-27.25-3.25-39.37-8.625l-35.25 35.25c21.88 13.25 47.25 21.38 74.62 21.38c79.5 0 143.1-64.5 143.1-144S511.5 0 432 0z\"],\n    \"martini-glass-empty\": [512, 512, [\"glass-martini\"], \"f000\", \"M502 57.63C523.3 36.38 508.3 0 478.3 0H33.72C3.711 0-11.29 36.38 9.962 57.63l214 214V448H176c-26.51 0-48 21.49-48 48c0 8.836 7.164 16 16 16h224c8.836 0 16-7.164 16-16c0-26.51-21.49-48-47.1-48h-47.1V271.6L502 57.63zM256 213.1L106.9 64h298.3L256 213.1z\"],\n    \"mask\": [576, 512, [], \"f6fa\", \"M288 64C39.52 64 0 182.1 0 273.5C0 379.5 78.8 448 176 448c27.33 0 51.21-6.516 66.11-36.79l19.93-40.5C268.3 358.6 278.1 352.4 288 352.1c9.9 .3711 19.7 6.501 25.97 18.63l19.93 40.5C348.8 441.5 372.7 448 400 448c97.2 0 176-68.51 176-174.5C576 182.1 536.5 64 288 64zM160 320c-35.35 0-64-28.65-64-64s28.65-64 64-64c35.35 0 64 28.65 64 64S195.3 320 160 320zM416 320c-35.35 0-64-28.65-64-64s28.65-64 64-64c35.35 0 64 28.65 64 64S451.3 320 416 320z\"],\n    \"mask-face\": [640, 512, [], \"e1d7\", \"M396.4 87.12L433.5 111.9C449.3 122.4 467.8 128 486.8 128H584C614.9 128 640 153.1 640 184V269C640 324.1 602.5 372.1 549.1 385.5L441.1 412.5C406.2 434.1 364.6 448 320 448C275.4 448 233.8 434.1 198.9 412.5L90.9 385.5C37.48 372.1 0 324.1 0 269V184C0 153.1 25.07 128 56 128H153.2C172.2 128 190.7 122.4 206.5 111.9L243.6 87.12C266.2 72.05 292.8 64 320 64C347.2 64 373.8 72.05 396.4 87.12zM132.3 346.3C109.4 311.2 96 269.1 96 224V176H56C51.58 176 48 179.6 48 184V269C48 302.1 70.49 330.9 102.5 338.9L132.3 346.3zM592 269V184C592 179.6 588.4 176 584 176H544V224C544 269.1 530.6 311.2 507.7 346.3L537.5 338.9C569.5 330.9 592 302.1 592 269H592zM208 224H432C440.8 224 448 216.8 448 208C448 199.2 440.8 192 432 192H208C199.2 192 192 199.2 192 208C192 216.8 199.2 224 208 224zM208 256C199.2 256 192 263.2 192 272C192 280.8 199.2 288 208 288H432C440.8 288 448 280.8 448 272C448 263.2 440.8 256 432 256H208zM240 352H400C408.8 352 416 344.8 416 336C416 327.2 408.8 320 400 320H240C231.2 320 224 327.2 224 336C224 344.8 231.2 352 240 352z\"],\n    \"masks-theater\": [640, 512, [127917, \"theater-masks\"], \"f630\", \"M206.9 245.1C171 255.6 146.8 286.4 149.3 319.3C160.7 306.5 178.1 295.5 199.3 288.4L206.9 245.1zM95.78 294.9L64.11 115.5C63.74 113.9 64.37 112.9 64.37 112.9c57.75-32.13 123.1-48.99 189-48.99c1.625 0 3.113 .0745 4.738 .0745c13.1-13.5 31.75-22.75 51.62-26c18.87-3 38.12-4.5 57.25-5.25c-9.999-14-24.47-24.27-41.84-27.02c-23.87-3.875-47.9-5.732-71.77-5.732c-76.74 0-152.4 19.45-220.1 57.07C9.021 70.57-3.853 98.5 1.021 126.6L32.77 306c14.25 80.5 136.3 142 204.5 142c3.625 0 6.777-.2979 10.03-.6729c-13.5-17.13-28.1-40.5-39.5-67.63C160.1 366.8 101.7 328 95.78 294.9zM193.4 157.6C192.6 153.4 191.1 149.7 189.3 146.2c-8.249 8.875-20.62 15.75-35.25 18.37c-14.62 2.5-28.75 .376-39.5-5.249c-.5 4-.6249 7.998 .125 12.12c3.75 21.75 24.5 36.24 46.25 32.37C182.6 200.1 197.3 179.3 193.4 157.6zM606.8 121c-88.87-49.38-191.4-67.38-291.9-51.38C287.5 73.1 265.8 95.85 260.8 123.1L229 303.5c-15.37 87.13 95.33 196.3 158.3 207.3c62.1 11.13 204.5-53.68 219.9-140.8l31.75-179.5C643.9 162.3 631 134.4 606.8 121zM333.5 217.8c3.875-21.75 24.62-36.25 46.37-32.37c21.75 3.75 36.25 24.49 32.5 46.12c-.7499 4.125-2.25 7.873-4.125 11.5c-8.249-9-20.62-15.75-35.25-18.37c-14.75-2.625-28.75-.3759-39.5 5.124C332.1 225.9 332.9 221.9 333.5 217.8zM403.1 416.5c-55.62-9.875-93.49-59.23-88.99-112.1c20.62 25.63 56.25 46.24 99.49 53.87c43.25 7.625 83.74 .3781 111.9-16.62C512.2 392.7 459.7 426.3 403.1 416.5zM534.4 265.2c-8.249-8.875-20.75-15.75-35.37-18.37c-14.62-2.5-28.62-.3759-39.5 5.249c-.5-4-.625-7.998 .125-12.12c3.875-21.75 24.62-36.25 46.37-32.37c21.75 3.875 36.25 24.49 32.37 46.24C537.6 257.9 536.1 261.7 534.4 265.2z\"],\n    \"maximize\": [448, 512, [\"expand-arrows-alt\"], \"f31e\", \"M447.1 319.1v135.1c0 13.26-10.75 23.1-23.1 23.1h-135.1c-12.94 0-24.61-7.781-29.56-19.75c-4.906-11.1-2.203-25.72 6.937-34.87l30.06-30.06L224 323.9l-71.43 71.44l30.06 30.06c9.156 9.156 11.91 22.91 6.937 34.87C184.6 472.2 172.9 479.1 160 479.1H24c-13.25 0-23.1-10.74-23.1-23.1v-135.1c0-12.94 7.781-24.61 19.75-29.56C23.72 288.8 27.88 288 32 288c8.312 0 16.5 3.242 22.63 9.367l30.06 30.06l71.44-71.44L84.69 184.6L54.63 214.6c-9.156 9.156-22.91 11.91-34.87 6.937C7.798 216.6 .0013 204.9 .0013 191.1v-135.1c0-13.26 10.75-23.1 23.1-23.1h135.1c12.94 0 24.61 7.781 29.56 19.75C191.2 55.72 191.1 59.87 191.1 63.1c0 8.312-3.237 16.5-9.362 22.63L152.6 116.7l71.44 71.44l71.43-71.44l-30.06-30.06c-9.156-9.156-11.91-22.91-6.937-34.87c4.937-11.95 16.62-19.75 29.56-19.75h135.1c13.26 0 23.1 10.75 23.1 23.1v135.1c0 12.94-7.781 24.61-19.75 29.56c-11.1 4.906-25.72 2.203-34.87-6.937l-30.06-30.06l-71.43 71.43l71.44 71.44l30.06-30.06c9.156-9.156 22.91-11.91 34.87-6.937C440.2 295.4 447.1 307.1 447.1 319.1z\"],\n    \"medal\": [512, 512, [127941], \"f5a2\", \"M223.7 130.8L149.1 7.77C147.1 2.949 141.9 0 136.3 0H16.03c-12.95 0-20.53 14.58-13.1 25.18l111.3 158.9C143.9 156.4 181.7 137.3 223.7 130.8zM256 160c-97.25 0-176 78.75-176 176S158.8 512 256 512s176-78.75 176-176S353.3 160 256 160zM348.5 317.3l-37.88 37l8.875 52.25c1.625 9.25-8.25 16.5-16.63 12l-46.88-24.62L209.1 418.5c-8.375 4.5-18.25-2.75-16.63-12l8.875-52.25l-37.88-37C156.6 310.6 160.5 299 169.9 297.6l52.38-7.625L245.7 242.5c2-4.25 6.125-6.375 10.25-6.375S264.2 238.3 266.2 242.5l23.5 47.5l52.38 7.625C351.6 299 355.4 310.6 348.5 317.3zM495.1 0H375.7c-5.621 0-10.83 2.949-13.72 7.77l-73.76 122.1c42 6.5 79.88 25.62 109.5 53.38l111.3-158.9C516.5 14.58 508.9 0 495.1 0z\"],\n    \"memory\": [576, 512, [], \"f538\", \"M0 448h80v-32c0-8.838 7.164-16 16-16c8.838 0 16 7.162 16 16v32h96v-32c0-8.838 7.164-16 16-16c8.838 0 16 7.162 16 16v32h96v-32c0-8.838 7.164-16 16-16c8.838 0 16 7.162 16 16v32h96v-32c0-8.838 7.164-16 16-16c8.838 0 16 7.162 16 16v32H576v-96H0V448zM576 146.9V112C576 85.49 554.5 64 528 64h-480C21.49 64 0 85.49 0 112v34.94C18.6 153.5 32 171.1 32 192S18.6 230.5 0 237.1V320h576V237.1C557.4 230.5 544 212.9 544 192S557.4 153.5 576 146.9zM192 240C192 248.8 184.8 256 176 256h-32C135.2 256 128 248.8 128 240v-96C128 135.2 135.2 128 144 128h32C184.8 128 192 135.2 192 144V240zM320 240C320 248.8 312.8 256 304 256h-32C263.2 256 256 248.8 256 240v-96C256 135.2 263.2 128 272 128h32C312.8 128 320 135.2 320 144V240zM448 240C448 248.8 440.8 256 432 256h-32C391.2 256 384 248.8 384 240v-96C384 135.2 391.2 128 400 128h32C440.8 128 448 135.2 448 144V240z\"],\n    \"menorah\": [640, 512, [], \"f676\", \"M544 144C544 135.1 536.9 128 528 128h-32C487.1 128 480 135.1 480 144V288h64V144zM416 95.1c17.62 0 32-14.38 32-32s-32-63.1-32-63.1s-32 46.37-32 63.1S398.4 95.1 416 95.1zM448 144C448 135.1 440.9 128 432 128h-32C391.1 128 384 135.1 384 144V288h64V144zM608 95.1c17.62 0 32-14.38 32-32s-32-63.1-32-63.1s-32 46.37-32 63.1S590.4 95.1 608 95.1zM320 95.1c17.62 0 32-14.38 32-32s-32-63.1-32-63.1S288 46.37 288 63.1S302.4 95.1 320 95.1zM512 95.1c17.62 0 32-14.38 32-32s-32-63.1-32-63.1s-32 46.37-32 63.1S494.4 95.1 512 95.1zM624 128h-32C583.2 128 576 135.2 576 144V288c0 17.6-14.4 32-32 32h-192V144C352 135.2 344.8 128 336 128h-32C295.2 128 288 135.2 288 144V320H96c-17.6 0-32-14.4-32-32V144C64 135.2 56.84 128 48 128h-32C7.164 128 0 135.2 0 144V288c0 53.02 42.98 96 96 96h192v64H176C149.5 448 128 469.5 128 496C128 504.8 135.2 512 144 512h352c8.836 0 16-7.164 16-16c0-26.51-21.49-48-48-48H352v-64h192c53.02 0 96-42.98 96-96V144C640 135.2 632.8 128 624 128zM160 144C160 135.1 152.9 128 144 128h-32C103.1 128 96 135.1 96 144V288h64V144zM224 95.1c17.62 0 32-14.38 32-32S224 0 224 0S192 46.37 192 63.1S206.4 95.1 224 95.1zM32 95.1c17.62 0 32-14.38 32-32S32 0 32 0S0 46.37 0 63.1S14.38 95.1 32 95.1zM128 95.1c17.62 0 32-14.38 32-32S128 0 128 0S96 46.37 96 63.1S110.4 95.1 128 95.1zM256 144C256 135.1 248.9 128 240 128h-32C199.1 128 192 135.1 192 144V288h64V144z\"],\n    \"mercury\": [384, 512, [9791], \"f223\", \"M368 223.1c0-55.32-25.57-104.6-65.49-136.9c20.49-17.32 37.2-39.11 48.1-64.21c4.656-10.72-2.9-22.89-14.45-22.89h-54.31c-5.256 0-9.93 2.828-12.96 7.188C251.8 31.77 223.8 47.1 192 47.1c-31.85 0-59.78-16.23-76.88-40.81C112.1 2.828 107.4 0 102.2 0H47.84c-11.55 0-19.11 12.17-14.45 22.89C44.29 47.1 60.1 69.79 81.49 87.11C41.57 119.4 16 168.7 16 223.1c0 86.26 62.1 157.9 144 172.1V416H128c-8.836 0-16 7.164-16 16v32C112 472.8 119.2 480 128 480h32v16C160 504.8 167.2 512 176 512h32c8.838 0 16-7.164 16-16V480h32c8.838 0 16-7.164 16-16v-32c0-8.836-7.162-16-16-16h-32v-19.05C305.9 381.9 368 310.3 368 223.1zM192 320c-52.93 0-96-43.07-96-96c0-52.94 43.07-95.1 96-95.1c52.94 0 96 43.06 96 95.1C288 276.9 244.9 320 192 320z\"],\n    \"message\": [512, 512, [\"comment-alt\"], \"f27a\", \"M511.1 63.1v287.1c0 35.25-28.75 63.1-64 63.1h-144l-124.9 93.68c-7.875 5.75-19.12 .0497-19.12-9.7v-83.98h-96c-35.25 0-64-28.75-64-63.1V63.1c0-35.25 28.75-63.1 64-63.1h384C483.2 0 511.1 28.75 511.1 63.1z\"],\n    \"meteor\": [512, 512, [9732], \"f753\", \"M511.4 20.72c-11.63 38.75-34.38 111.8-61.38 187.8c7 2.125 13.38 4 18.63 5.625c4.625 1.375 8.375 4.751 10.13 9.127c1.875 4.5 1.625 9.501-.625 13.75c-22.13 42.25-82.63 152.8-142.5 214.4c-1 1.125-2.001 2.5-3.001 3.5c-76 76.13-199.4 76.13-275.5 .125c-76.13-76.13-76.13-199.5 0-275.7c1-1 2.375-2 3.5-3C122.1 116.5 232.5 55.97 274.1 33.84c4.25-2.25 9.25-2.5 13.63-.625c4.5 1.875 7.875 5.626 9.25 10.13c1.625 5.125 3.5 11.63 5.625 18.63c75.88-27 148.9-49.75 187.6-61.25c5.75-1.75 11.88-.2503 16.13 4C511.5 8.844 512.1 15.09 511.4 20.72zM319.1 319.1c0-70.63-57.38-128-128-128c-70.75 0-128 57.38-128 128c0 70.76 57.25 128 128 128C262.6 448 319.1 390.8 319.1 319.1zM191.1 287.1c0 17.63-14.37 32-32 32c-17.75 0-32-14.38-32-32s14.25-32 32-32c8.5 0 16.63 3.375 22.63 9.375S191.1 279.5 191.1 287.1zM223.9 367.1c0 8.876-7.224 16-15.97 16c-8.875 0-16-7.127-16-16c0-8.876 7.1-16 15.98-16C216.7 351.1 223.9 359.1 223.9 367.1z\"],\n    \"microchip\": [512, 512, [], \"f2db\", \"M160 352h192V160H160V352zM448 176h48C504.8 176 512 168.8 512 160s-7.162-16-16-16H448V128c0-35.35-28.65-64-64-64h-16V16C368 7.164 360.8 0 352 0c-8.836 0-16 7.164-16 16V64h-64V16C272 7.164 264.8 0 256 0C247.2 0 240 7.164 240 16V64h-64V16C176 7.164 168.8 0 160 0C151.2 0 144 7.164 144 16V64H128C92.65 64 64 92.65 64 128v16H16C7.164 144 0 151.2 0 160s7.164 16 16 16H64v64H16C7.164 240 0 247.2 0 256s7.164 16 16 16H64v64H16C7.164 336 0 343.2 0 352s7.164 16 16 16H64V384c0 35.35 28.65 64 64 64h16v48C144 504.8 151.2 512 160 512c8.838 0 16-7.164 16-16V448h64v48c0 8.836 7.164 16 16 16c8.838 0 16-7.164 16-16V448h64v48c0 8.836 7.164 16 16 16c8.838 0 16-7.164 16-16V448H384c35.35 0 64-28.65 64-64v-16h48c8.838 0 16-7.164 16-16s-7.162-16-16-16H448v-64h48C504.8 272 512 264.8 512 256s-7.162-16-16-16H448V176zM384 368c0 8.836-7.162 16-16 16h-224C135.2 384 128 376.8 128 368v-224C128 135.2 135.2 128 144 128h224C376.8 128 384 135.2 384 144V368z\"],\n    \"microphone\": [384, 512, [], \"f130\", \"M192 352c53.03 0 96-42.97 96-96v-160c0-53.03-42.97-96-96-96s-96 42.97-96 96v160C96 309 138.1 352 192 352zM344 192C330.7 192 320 202.7 320 215.1V256c0 73.33-61.97 132.4-136.3 127.7c-66.08-4.169-119.7-66.59-119.7-132.8L64 215.1C64 202.7 53.25 192 40 192S16 202.7 16 215.1v32.15c0 89.66 63.97 169.6 152 181.7V464H128c-18.19 0-32.84 15.18-31.96 33.57C96.43 505.8 103.8 512 112 512h160c8.222 0 15.57-6.216 15.96-14.43C288.8 479.2 274.2 464 256 464h-40v-33.77C301.7 418.5 368 344.9 368 256V215.1C368 202.7 357.3 192 344 192z\"],\n    \"microphone-lines\": [384, 512, [127897, \"microphone-alt\"], \"f3c9\", \"M192 352c53.03 0 96-42.97 96-96h-80C199.2 256 192 248.8 192 240S199.2 224 208 224H288V192h-80C199.2 192 192 184.8 192 176S199.2 160 208 160H288V127.1h-80c-8.836 0-16-7.164-16-16s7.164-16 16-16L288 96c0-53.03-42.97-96-96-96s-96 42.97-96 96v160C96 309 138.1 352 192 352zM344 192C330.7 192 320 202.7 320 215.1V256c0 73.33-61.97 132.4-136.3 127.7c-66.08-4.169-119.7-66.59-119.7-132.8L64 215.1C64 202.7 53.25 192 40 192S16 202.7 16 215.1v32.15c0 89.66 63.97 169.6 152 181.7V464H128c-18.19 0-32.84 15.18-31.96 33.57C96.43 505.8 103.8 512 112 512h160c8.222 0 15.57-6.216 15.96-14.43C288.8 479.2 274.2 464 256 464h-40v-33.77C301.7 418.5 368 344.9 368 256V215.1C368 202.7 357.3 192 344 192z\"],\n    \"microphone-lines-slash\": [640, 512, [\"microphone-alt-slash\"], \"f539\", \"M383.1 464l-39.1-.0001v-33.77c20.6-2.824 39.99-9.402 57.69-18.72l-43.26-33.91c-14.66 4.65-30.28 7.179-46.68 6.144C245.7 379.6 191.1 317.1 191.1 250.9v-3.777L143.1 209.5l.0001 38.61c0 89.65 63.97 169.6 151.1 181.7v34.15l-40 .0001c-17.67 0-31.1 14.33-31.1 31.1C223.1 504.8 231.2 512 239.1 512h159.1c8.838 0 15.1-7.164 15.1-15.1C415.1 478.3 401.7 464 383.1 464zM630.8 469.1l-159.3-124.9c15.37-25.94 24.53-55.91 24.53-88.21V216c0-13.25-10.75-24-23.1-24c-13.25 0-24 10.75-24 24l-.0001 39.1c0 21.12-5.557 40.77-14.77 58.24l-25.73-20.16c5.234-11.68 8.493-24.42 8.493-38.08l-57.07 .0006l-34.45-27c2.914-3.055 6.969-4.999 11.52-4.999h79.1V192L335.1 192c-8.836 0-15.1-7.164-15.1-15.1s7.164-16 15.1-16l79.1 .0013V128l-79.1-.0015c-8.836 0-15.1-7.164-15.1-15.1s7.164-15.1 15.1-15.1l80-.0003c0-54-44.56-97.57-98.93-95.95C264.5 1.614 223.1 47.45 223.1 100l.0006 50.23L38.81 5.111C34.41 1.673 29.19 0 24.03 0C16.91 0 9.84 3.158 5.121 9.189C-3.067 19.63-1.249 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.57 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"microphone-slash\": [640, 512, [], \"f131\", \"M383.1 464l-39.1-.0001v-33.77c20.6-2.824 39.98-9.402 57.69-18.72l-43.26-33.91c-14.66 4.65-30.28 7.179-46.68 6.144C245.7 379.6 191.1 317.1 191.1 250.9V247.2L143.1 209.5l.0001 38.61c0 89.65 63.97 169.6 151.1 181.7v34.15l-40 .0001c-17.67 0-31.1 14.33-31.1 31.1C223.1 504.8 231.2 512 239.1 512h159.1c8.838 0 15.1-7.164 15.1-15.1C415.1 478.3 401.7 464 383.1 464zM630.8 469.1l-159.3-124.9c15.37-25.94 24.53-55.91 24.53-88.21V216c0-13.25-10.75-24-23.1-24c-13.25 0-24 10.75-24 24l-.0001 39.1c0 21.12-5.559 40.77-14.77 58.24l-25.72-20.16c5.234-11.68 8.493-24.42 8.493-38.08l-.001-155.1c0-52.57-40.52-98.41-93.07-99.97c-54.37-1.617-98.93 41.95-98.93 95.95l0 54.25L38.81 5.111C34.41 1.673 29.19 0 24.03 0C16.91 0 9.839 3.158 5.12 9.189c-8.187 10.44-6.37 25.53 4.068 33.7l591.1 463.1c10.5 8.203 25.57 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"microscope\": [512, 512, [128300], \"f610\", \"M160 320h12v16c0 8.875 7.125 16 16 16h40c8.875 0 16-7.125 16-16V320H256c17.62 0 32-14.38 32-32V64c0-17.62-14.38-32-32-32V16C256 7.125 248.9 0 240 0h-64C167.1 0 160 7.125 160 16V32C142.4 32 128 46.38 128 64v224C128 305.6 142.4 320 160 320zM464 448h-1.25C493.2 414 512 369.2 512 320c0-105.9-86.13-192-192-192v64c70.63 0 128 57.38 128 128s-57.38 128-128 128H48C21.5 448 0 469.5 0 496C0 504.9 7.125 512 16 512h480c8.875 0 16-7.125 16-16C512 469.5 490.5 448 464 448zM104 416h208c4.375 0 8-3.625 8-8v-16c0-4.375-3.625-8-8-8h-208C99.63 384 96 387.6 96 392v16C96 412.4 99.63 416 104 416z\"],\n    \"mill-sign\": [384, 512, [], \"e1ed\", \"M282.9 96.53C339.7 102 384 149.8 384 208V416C384 433.7 369.7 448 352 448C334.3 448 320 433.7 320 416V208C320 181.5 298.5 160 272 160C267.7 160 263.6 160.6 259.7 161.6L224 261.5V416C224 433.7 209.7 448 192 448C179.6 448 168.9 440.1 163.6 430.7L142.1 490.8C136.2 507.4 117.9 516.1 101.2 510.1C84.59 504.2 75.92 485.9 81.86 469.2L160 250.5V208C160 181.5 138.5 160 112 160C85.49 160 64 181.5 64 208V416C64 433.7 49.67 448 32 448C14.33 448 0 433.7 0 416V128C0 110.3 14.33 96 32 96C42.87 96 52.48 101.4 58.26 109.7C74.21 100.1 92.53 96 112 96C143.3 96 171.7 108.9 192 129.6C196.9 124.6 202.2 120.1 207.1 116.1L241.9 21.24C247.8 4.595 266.1-4.079 282.8 1.865C299.4 7.809 308.1 26.12 302.1 42.76L282.9 96.53z\"],\n    \"minimize\": [512, 512, [\"compress-arrows-alt\"], \"f78c\", \"M200 287.1H64c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.937 34.87l30.06 30.06l-62.06 62.07c-12.49 12.5-12.5 32.75-.0012 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.26 .0012l62.06-62.07l30.06 30.06c6.125 6.125 14.31 9.375 22.62 9.375c4.125 0 8.281-.7969 12.25-2.437c11.97-4.953 19.75-16.62 19.75-29.56V311.1C224 298.7 213.3 287.1 200 287.1zM312 224h135.1c12.94 0 24.62-7.797 29.56-19.75c4.969-11.97 2.219-25.72-6.937-34.87l-30.06-30.06l62.06-62.07c12.5-12.5 12.5-32.76 .0003-45.26l-22.62-22.62c-12.5-12.5-32.76-12.5-45.26-.0003l-62.06 62.07l-30.06-30.06c-9.156-9.141-22.87-11.84-34.87-6.937C295.8 39.39 288 51.06 288 64v135.1C288 213.3 298.7 224 312 224zM204.3 34.44C192.3 29.47 178.5 32.22 169.4 41.38L139.3 71.44L77.25 9.374C64.75-3.123 44.49-3.123 31.1 9.374l-22.63 22.63c-12.49 12.49-12.49 32.75 .0018 45.25l62.07 62.06L41.38 169.4C35.25 175.5 32 183.7 32 192c0 4.125 .7969 8.281 2.438 12.25C39.39 216.2 51.07 224 64 224h135.1c13.25 0 23.1-10.75 23.1-23.1V64C224 51.06 216.2 39.38 204.3 34.44zM440.6 372.7l30.06-30.06c9.141-9.156 11.84-22.88 6.938-34.87C472.6 295.8 460.9 287.1 448 287.1h-135.1c-13.25 0-23.1 10.75-23.1 23.1v135.1c0 12.94 7.797 24.62 19.75 29.56c11.97 4.969 25.72 2.219 34.87-6.937l30.06-30.06l62.06 62.06c12.5 12.5 32.76 12.5 45.26 .0002l22.62-22.62c12.5-12.5 12.5-32.76 .0002-45.26L440.6 372.7z\"],\n    \"minus\": [448, 512, [8722, 10134, 8211, \"subtract\"], \"f068\", \"M400 288h-352c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h352c17.69 0 32 14.3 32 31.99S417.7 288 400 288z\"],\n    \"mitten\": [448, 512, [], \"f7b5\", \"M351.1 416H63.99c-17.6 0-31.1 14.4-31.1 31.1l.0026 31.1C31.1 497.6 46.4 512 63.1 512h288c17.6 0 32-14.4 32-31.1l-.0049-31.1C383.1 430.4 369.6 416 351.1 416zM425 206.9c-27.25-22.62-67.5-19-90.13 8.25l-20.88 25L284.4 111.8c-18-77.5-95.38-125.1-172.8-108C34.26 21.63-14.25 98.88 3.754 176.4L64 384h288l81.14-86.1C455.8 269.8 452.1 229.5 425 206.9z\"],\n    \"mobile\": [384, 512, [128241, \"mobile-android\", \"mobile-phone\"], \"f3ce\", \"M320 0H64C37.5 0 16 21.5 16 48v416C16 490.5 37.5 512 64 512h256c26.5 0 48-21.5 48-48v-416C368 21.5 346.5 0 320 0zM240 447.1C240 456.8 232.8 464 224 464H159.1C151.2 464 144 456.8 144 448S151.2 432 160 432h64C232.8 432 240 439.2 240 447.1z\"],\n    \"mobile-button\": [384, 512, [], \"f10b\", \"M320 0H64C37.49 0 16 21.49 16 48v416C16 490.5 37.49 512 64 512h256c26.51 0 48-21.49 48-48v-416C368 21.49 346.5 0 320 0zM192 464c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S209.8 464 192 464z\"],\n    \"mobile-screen-button\": [384, 512, [\"mobile-alt\"], \"f3cd\", \"M304 0h-224c-35.35 0-64 28.65-64 64v384c0 35.35 28.65 64 64 64h224c35.35 0 64-28.65 64-64V64C368 28.65 339.3 0 304 0zM192 480c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S209.8 480 192 480zM304 64v320h-224V64H304z\"],\n    \"money-bill\": [576, 512, [], \"f0d6\", \"M512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128C0 92.65 28.65 64 64 64H512zM128 384C128 348.7 99.35 320 64 320V384H128zM64 192C99.35 192 128 163.3 128 128H64V192zM512 384V320C476.7 320 448 348.7 448 384H512zM512 128H448C448 163.3 476.7 192 512 192V128zM288 352C341 352 384 309 384 256C384 202.1 341 160 288 160C234.1 160 192 202.1 192 256C192 309 234.1 352 288 352z\"],\n    \"money-bill-1\": [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M252 208C252 196.1 260.1 188 272 188H288C299 188 308 196.1 308 208V276H312C323 276 332 284.1 332 296C332 307 323 316 312 316H264C252.1 316 244 307 244 296C244 284.1 252.1 276 264 276H268V227.6C258.9 225.7 252 217.7 252 208zM512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128C0 92.65 28.65 64 64 64H512zM128 384C128 348.7 99.35 320 64 320V384H128zM64 192C99.35 192 128 163.3 128 128H64V192zM512 384V320C476.7 320 448 348.7 448 384H512zM512 128H448C448 163.3 476.7 192 512 192V128zM288 144C226.1 144 176 194.1 176 256C176 317.9 226.1 368 288 368C349.9 368 400 317.9 400 256C400 194.1 349.9 144 288 144z\"],\n    \"money-bill-1-wave\": [576, 512, [\"money-bill-wave-alt\"], \"f53b\", \"M251.1 207.1C251.1 196.1 260.1 187.1 271.1 187.1H287.1C299 187.1 308 196.1 308 207.1V275.1H312C323 275.1 332 284.1 332 295.1C332 307 323 315.1 312 315.1H263.1C252.1 315.1 243.1 307 243.1 295.1C243.1 284.1 252.1 275.1 263.1 275.1H267.1V227.6C258.9 225.7 251.1 217.7 251.1 207.1zM48.66 79.13C128.4 100.9 208.2 80.59 288 60.25C375 38.08 462 15.9 549 48.38C565.9 54.69 576 71.62 576 89.66V399.5C576 423.4 550.4 439.2 527.3 432.9C447.6 411.1 367.8 431.4 288 451.7C200.1 473.9 113.1 496.1 26.97 463.6C10.06 457.3 0 440.4 0 422.3V112.5C0 88.59 25.61 72.83 48.66 79.13L48.66 79.13zM127.1 416C127.1 380.7 99.35 352 63.1 352V416H127.1zM63.1 223.1C99.35 223.1 127.1 195.3 127.1 159.1H63.1V223.1zM512 352V287.1C476.7 287.1 448 316.7 448 352H512zM512 95.1H448C448 131.3 476.7 159.1 512 159.1V95.1zM287.1 143.1C234.1 143.1 191.1 194.1 191.1 255.1C191.1 317.9 234.1 368 287.1 368C341 368 384 317.9 384 255.1C384 194.1 341 143.1 287.1 143.1z\"],\n    \"money-bill-wave\": [576, 512, [], \"f53a\", \"M48.66 79.13C128.4 100.9 208.2 80.59 288 60.25C375 38.08 462 15.9 549 48.38C565.9 54.69 576 71.62 576 89.66V399.5C576 423.4 550.4 439.2 527.3 432.9C447.6 411.1 367.8 431.4 288 451.7C200.1 473.9 113.1 496.1 26.97 463.6C10.06 457.3 0 440.4 0 422.3V112.5C0 88.59 25.61 72.83 48.66 79.13L48.66 79.13zM287.1 352C332.2 352 368 309 368 255.1C368 202.1 332.2 159.1 287.1 159.1C243.8 159.1 207.1 202.1 207.1 255.1C207.1 309 243.8 352 287.1 352zM63.1 416H127.1C127.1 380.7 99.35 352 63.1 352V416zM63.1 143.1V207.1C99.35 207.1 127.1 179.3 127.1 143.1H63.1zM512 303.1C476.7 303.1 448 332.7 448 368H512V303.1zM448 95.1C448 131.3 476.7 159.1 512 159.1V95.1H448z\"],\n    \"money-check\": [576, 512, [], \"f53c\", \"M512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128C0 92.65 28.65 64 64 64H512zM112 224C103.2 224 96 231.2 96 240C96 248.8 103.2 256 112 256H272C280.8 256 288 248.8 288 240C288 231.2 280.8 224 272 224H112zM112 352H464C472.8 352 480 344.8 480 336C480 327.2 472.8 320 464 320H112C103.2 320 96 327.2 96 336C96 344.8 103.2 352 112 352zM376 160C362.7 160 352 170.7 352 184V232C352 245.3 362.7 256 376 256H456C469.3 256 480 245.3 480 232V184C480 170.7 469.3 160 456 160H376z\"],\n    \"money-check-dollar\": [576, 512, [\"money-check-alt\"], \"f53d\", \"M512 64C547.3 64 576 92.65 576 128V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V128C0 92.65 28.65 64 64 64H512zM272 192C263.2 192 256 199.2 256 208C256 216.8 263.2 224 272 224H496C504.8 224 512 216.8 512 208C512 199.2 504.8 192 496 192H272zM272 320H496C504.8 320 512 312.8 512 304C512 295.2 504.8 288 496 288H272C263.2 288 256 295.2 256 304C256 312.8 263.2 320 272 320zM164.1 160C164.1 148.9 155.1 139.9 143.1 139.9C132.9 139.9 123.9 148.9 123.9 160V166C118.3 167.2 112.1 168.9 108 171.1C93.06 177.9 80.07 190.5 76.91 208.8C75.14 219 76.08 228.9 80.32 237.8C84.47 246.6 91 252.8 97.63 257.3C109.2 265.2 124.5 269.8 136.2 273.3L138.4 273.9C152.4 278.2 161.8 281.3 167.7 285.6C170.2 287.4 171.1 288.8 171.4 289.7C171.8 290.5 172.4 292.3 171.7 296.3C171.1 299.8 169.2 302.8 163.7 305.1C157.6 307.7 147.7 309 134.9 307C128.9 306 118.2 302.4 108.7 299.2C106.5 298.4 104.3 297.7 102.3 297C91.84 293.5 80.51 299.2 77.02 309.7C73.53 320.2 79.2 331.5 89.68 334.1C90.89 335.4 92.39 335.9 94.11 336.5C101.1 339.2 114.4 343.4 123.9 345.6V352C123.9 363.1 132.9 372.1 143.1 372.1C155.1 372.1 164.1 363.1 164.1 352V346.5C169.4 345.5 174.6 343.1 179.4 341.9C195.2 335.2 207.8 322.2 211.1 303.2C212.9 292.8 212.1 282.8 208.1 273.7C204.2 264.7 197.9 258.1 191.2 253.3C179.1 244.4 162.9 239.6 150.8 235.9L149.1 235.7C135.8 231.4 126.2 228.4 120.1 224.2C117.5 222.4 116.7 221.2 116.5 220.7C116.3 220.3 115.7 219.1 116.3 215.7C116.7 213.7 118.2 210.4 124.5 207.6C130.1 204.7 140.9 203.1 153.1 204.1C157.5 205.7 171 208.3 174.9 209.3C185.5 212.2 196.5 205.8 199.3 195.1C202.2 184.5 195.8 173.5 185.1 170.7C180.7 169.5 170.7 167.5 164.1 166.3L164.1 160z\"],\n    \"monument\": [384, 512, [], \"f5a6\", \"M180.7 4.686C186.9-1.562 197.1-1.562 203.3 4.686L283.3 84.69C285.8 87.2 287.4 90.48 287.9 94.02L328.1 416H55.88L96.12 94.02C96.57 90.48 98.17 87.2 100.7 84.69L180.7 4.686zM152 272C138.7 272 128 282.7 128 296C128 309.3 138.7 320 152 320H232C245.3 320 256 309.3 256 296C256 282.7 245.3 272 232 272H152zM352 448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448H352z\"],\n    \"moon\": [512, 512, [127769, 9214], \"f186\", \"M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z\"],\n    \"mortar-pestle\": [512, 512, [], \"f5a7\", \"M501.5 60.87c17.25-17.12 12.5-46.25-9.25-57.13c-12.12-6-26.5-4.75-37.38 3.375L251.1 159.1h151.4L501.5 60.87zM496 191.1h-480c-8.875 0-16 7.125-16 16v32c0 8.875 7.125 16 16 16L31.1 256c0 81 50.25 150.1 121.1 178.4c-12.75 16.88-21.75 36.75-25 58.63C126.8 502.9 134.2 512 144.2 512h223.5c10 0 17.51-9.125 16.13-19c-3.25-21.88-12.25-41.75-25-58.63C429.8 406.1 479.1 337 479.1 256L496 255.1c8.875 0 16-7.125 16-16v-32C512 199.1 504.9 191.1 496 191.1z\"],\n    \"mosque\": [640, 512, [128332], \"f678\", \"M400 0C405 0 409.8 2.371 412.8 6.4C447.5 52.7 490.9 81.34 546.3 117.9C551.5 121.4 556.9 124.9 562.3 128.5C591.3 147.7 608 180.2 608 214.6C608 243.1 596.7 269 578.2 288H221.8C203.3 269 192 243.1 192 214.6C192 180.2 208.7 147.7 237.7 128.5C243.1 124.9 248.5 121.4 253.7 117.9C309.1 81.34 352.5 52.7 387.2 6.4C390.2 2.371 394.1 0 400 0V0zM288 440C288 426.7 277.3 416 264 416C250.7 416 240 426.7 240 440V512H192C174.3 512 160 497.7 160 480V352C160 334.3 174.3 320 192 320H608C625.7 320 640 334.3 640 352V480C640 497.7 625.7 512 608 512H560V440C560 426.7 549.3 416 536 416C522.7 416 512 426.7 512 440V512H448V453.1C448 434.1 439.6 416.1 424.1 404.8L400 384L375 404.8C360.4 416.1 352 434.1 352 453.1V512H288V440zM70.4 5.2C76.09 .9334 83.91 .9334 89.6 5.2L105.6 17.2C139.8 42.88 160 83.19 160 126V128H0V126C0 83.19 20.15 42.88 54.4 17.2L70.4 5.2zM0 160H160V296.6C140.9 307.6 128 328.3 128 352V480C128 489.6 130.1 498.6 133.8 506.8C127.3 510.1 119.9 512 112 512H48C21.49 512 0 490.5 0 464V160z\"],\n    \"motorcycle\": [640, 512, [127949], \"f21c\", \"M342.5 32C357.2 32 370.7 40.05 377.6 52.98L391.7 78.93L439.1 39.42C444.9 34.62 452.1 32 459.6 32H480C497.7 32 512 46.33 512 64V96C512 113.7 497.7 128 480 128H418.2L473.3 229.1C485.5 226.1 498.5 224 512 224C582.7 224 640 281.3 640 352C640 422.7 582.7 480 512 480C441.3 480 384 422.7 384 352C384 311.1 402.4 276.3 431.1 252.8L415.7 224.2C376.1 253.4 352 299.8 352 352C352 362.1 353.1 373.7 355.2 384H284.8C286.9 373.7 287.1 362.1 287.1 352C287.1 263.6 216.4 192 127.1 192H31.1V160C31.1 142.3 46.33 128 63.1 128H165.5C182.5 128 198.7 134.7 210.7 146.7L255.1 192L354.1 110.3L337.7 80H279.1C266.7 80 255.1 69.25 255.1 56C255.1 42.75 266.7 32 279.1 32L342.5 32zM448 352C448 387.3 476.7 416 512 416C547.3 416 576 387.3 576 352C576 316.7 547.3 288 512 288C509.6 288 507.2 288.1 504.9 288.4L533.1 340.6C539.4 352.2 535.1 366.8 523.4 373.1C511.8 379.4 497.2 375.1 490.9 363.4L462.7 311.2C453.5 322.3 448 336.5 448 352V352zM253.8 376C242.5 435.2 190.5 480 128 480C57.31 480 0 422.7 0 352C0 281.3 57.31 224 128 224C190.5 224 242.5 268.8 253.8 328H187.3C177.9 304.5 154.9 288 128 288C92.65 288 64 316.7 64 352C64 387.3 92.65 416 128 416C154.9 416 177.9 399.5 187.3 376H253.8zM96 352C96 334.3 110.3 320 128 320C145.7 320 160 334.3 160 352C160 369.7 145.7 384 128 384C110.3 384 96 369.7 96 352z\"],\n    \"mountain\": [512, 512, [127956], \"f6fc\", \"M503.2 393.8L280.1 44.25c-10.42-16.33-37.73-16.33-48.15 0L8.807 393.8c-11.11 17.41-11.75 39.42-1.666 57.45C17.07 468.1 35.92 480 56.31 480h399.4c20.39 0 39.24-11.03 49.18-28.77C514.9 433.2 514.3 411.2 503.2 393.8zM256 111.8L327.8 224H256L208 288L177.2 235.3L256 111.8z\"],\n    \"mug-hot\": [512, 512, [9749], \"f7b6\", \"M400 192H32C14.25 192 0 206.3 0 224v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.75 0 112-50.25 112-112S461.8 192 400 192zM400 352H384V256h16C426.5 256 448 277.5 448 304S426.5 352 400 352zM107.9 100.7C120.3 107.1 128 121.4 128 136c0 13.25 10.75 23.89 24 23.89S176 148.1 176 135.7c0-31.34-16.83-60.64-43.91-76.45C119.7 52.03 112 38.63 112 24.28c0-13.25-10.75-24.14-24-24.14S64 11.03 64 24.28C64 55.63 80.83 84.92 107.9 100.7zM219.9 100.7C232.3 107.1 240 121.4 240 136c0 13.25 10.75 23.86 24 23.86S288 148.1 288 135.7c0-31.34-16.83-60.64-43.91-76.45C231.7 52.03 224 38.63 224 24.28c0-13.25-10.75-24.18-24-24.18S176 11.03 176 24.28C176 55.63 192.8 84.92 219.9 100.7z\"],\n    \"mug-saucer\": [640, 512, [\"coffee\"], \"f0f4\", \"M512 32H120c-13.25 0-24 10.75-24 24L96.01 288c0 53 43 96 96 96h192C437 384 480 341 480 288h32c70.63 0 128-57.38 128-128S582.6 32 512 32zM512 224h-32V96h32c35.25 0 64 28.75 64 64S547.3 224 512 224zM560 416h-544C7.164 416 0 423.2 0 432C0 458.5 21.49 480 48 480h480c26.51 0 48-21.49 48-48C576 423.2 568.8 416 560 416z\"],\n    \"music\": [512, 512, [127925], \"f001\", \"M511.1 367.1c0 44.18-42.98 80-95.1 80s-95.1-35.82-95.1-79.1c0-44.18 42.98-79.1 95.1-79.1c11.28 0 21.95 1.92 32.01 4.898V148.1L192 224l-.0023 208.1C191.1 476.2 149 512 95.1 512S0 476.2 0 432c0-44.18 42.98-79.1 95.1-79.1c11.28 0 21.95 1.92 32 4.898V126.5c0-12.97 10.06-26.63 22.41-30.52l319.1-94.49C472.1 .6615 477.3 0 480 0c17.66 0 31.97 14.34 32 31.99L511.1 367.1z\"],\n    \"n\": [384, 512, [110], \"4e\", \"M384 64.01v384c0 13.47-8.438 25.5-21.09 30.09C359.3 479.4 355.7 480 352 480c-9.312 0-18.38-4.078-24.59-11.52L64 152.4v295.6c0 17.67-14.31 32-32 32s-32-14.33-32-32v-384c0-13.47 8.438-25.5 21.09-30.09c12.62-4.516 26.84-.75 35.5 9.609L320 359.6v-295.6c0-17.67 14.31-32 32-32S384 46.34 384 64.01z\"],\n    \"naira-sign\": [448, 512, [], \"e1f6\", \"M262.5 256H320V64C320 46.33 334.3 32 352 32C369.7 32 384 46.33 384 64V256H416C433.7 256 448 270.3 448 288C448 305.7 433.7 320 416 320H384V448C384 462.1 374.8 474.5 361.3 478.6C347.8 482.7 333.2 477.5 325.4 465.8L228.2 320H128V448C128 465.7 113.7 480 96 480C78.33 480 64 465.7 64 448V320H32C14.33 320 0 305.7 0 288C0 270.3 14.33 256 32 256H64V64C64 49.9 73.23 37.46 86.73 33.37C100.2 29.29 114.8 34.52 122.6 46.25L262.5 256zM305.1 320L320 342.3V320H305.1zM185.5 256L128 169.7V256H185.5z\"],\n    \"network-wired\": [640, 512, [], \"f6ff\", \"M400 0C426.5 0 448 21.49 448 48V144C448 170.5 426.5 192 400 192H352V224H608C625.7 224 640 238.3 640 256C640 273.7 625.7 288 608 288H512V320H560C586.5 320 608 341.5 608 368V464C608 490.5 586.5 512 560 512H400C373.5 512 352 490.5 352 464V368C352 341.5 373.5 320 400 320H448V288H192V320H240C266.5 320 288 341.5 288 368V464C288 490.5 266.5 512 240 512H80C53.49 512 32 490.5 32 464V368C32 341.5 53.49 320 80 320H128V288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H288V192H240C213.5 192 192 170.5 192 144V48C192 21.49 213.5 0 240 0H400zM256 64V128H384V64H256zM224 448V384H96V448H224zM416 384V448H544V384H416z\"],\n    \"neuter\": [384, 512, [9906], \"f22c\", \"M368 176c0-97.2-78.8-176-176-176c-97.2 0-176 78.8-176 176c0 86.26 62.1 157.9 144 172.1V496C160 504.8 167.2 512 176 512h32c8.838 0 16-7.164 16-16v-147C305.9 333.9 368 262.3 368 176zM192 272c-52.93 0-96-43.07-96-96c0-52.94 43.07-95.1 96-95.1c52.94 0 96 43.06 96 95.1C288 228.9 244.9 272 192 272z\"],\n    \"newspaper\": [512, 512, [128240], \"f1ea\", \"M480 32H128C110.3 32 96 46.33 96 64v336C96 408.8 88.84 416 80 416S64 408.8 64 400V96H32C14.33 96 0 110.3 0 128v288c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V64C512 46.33 497.7 32 480 32zM272 416h-96C167.2 416 160 408.8 160 400C160 391.2 167.2 384 176 384h96c8.836 0 16 7.162 16 16C288 408.8 280.8 416 272 416zM272 320h-96C167.2 320 160 312.8 160 304C160 295.2 167.2 288 176 288h96C280.8 288 288 295.2 288 304C288 312.8 280.8 320 272 320zM432 416h-96c-8.836 0-16-7.164-16-16c0-8.838 7.164-16 16-16h96c8.836 0 16 7.162 16 16C448 408.8 440.8 416 432 416zM432 320h-96C327.2 320 320 312.8 320 304C320 295.2 327.2 288 336 288h96C440.8 288 448 295.2 448 304C448 312.8 440.8 320 432 320zM448 208C448 216.8 440.8 224 432 224h-256C167.2 224 160 216.8 160 208v-96C160 103.2 167.2 96 176 96h256C440.8 96 448 103.2 448 112V208z\"],\n    \"not-equal\": [448, 512, [], \"f53e\", \"M432 336c0 17.69-14.31 32.01-32 32.01H187.8l-65.15 97.74C116.5 474.1 106.3 480 95.97 480c-6.094 0-12.25-1.75-17.72-5.375c-14.72-9.812-18.69-29.66-8.875-44.38l41.49-62.23H48c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h105.5l63.1-96H48c-17.69 0-32-14.32-32-32.01s14.31-31.99 32-31.99h212.2l65.18-97.77c9.781-14.69 29.62-18.66 44.37-8.875c14.72 9.812 18.69 29.66 8.875 44.38l-41.51 62.27H400c17.69 0 32 14.31 32 31.99s-14.31 32.01-32 32.01h-105.6l-63.1 96H400C417.7 304 432 318.3 432 336z\"],\n    \"note-sticky\": [448, 512, [62026, \"sticky-note\"], \"f249\", \"M400 32h-352C21.49 32 0 53.49 0 80v352C0 458.5 21.49 480 48 480h245.5c16.97 0 33.25-6.744 45.26-18.75l90.51-90.51C441.3 358.7 448 342.5 448 325.5V80C448 53.49 426.5 32 400 32zM64 96h320l-.001 224H320c-17.67 0-32 14.33-32 32v64H64V96z\"],\n    \"notes-medical\": [512, 512, [], \"f481\", \"M480 144V384l-96 96H144C117.5 480 96 458.5 96 432v-288C96 117.5 117.5 96 144 96h288C458.5 96 480 117.5 480 144zM384 264C384 259.6 380.4 256 376 256H320V200C320 195.6 316.4 192 312 192h-48C259.6 192 256 195.6 256 200V256H200C195.6 256 192 259.6 192 264v48C192 316.4 195.6 320 200 320H256v56c0 4.375 3.625 8 8 8h48c4.375 0 8-3.625 8-8V320h56C380.4 320 384 316.4 384 312V264zM0 360v-240C0 53.83 53.83 0 120 0h240C373.3 0 384 10.75 384 24S373.3 48 360 48h-240C80.3 48 48 80.3 48 120v240C48 373.3 37.25 384 24 384S0 373.3 0 360z\"],\n    \"o\": [448, 512, [111], \"4f\", \"M224 32.01c-123.5 0-224 100.5-224 224s100.5 224 224 224s224-100.5 224-224S347.5 32.01 224 32.01zM224 416c-88.22 0-160-71.78-160-160s71.78-159.1 160-159.1s160 71.78 160 159.1S312.2 416 224 416z\"],\n    \"object-group\": [576, 512, [], \"f247\", \"M128 160C128 142.3 142.3 128 160 128H288C305.7 128 320 142.3 320 160V256C320 273.7 305.7 288 288 288H160C142.3 288 128 273.7 128 256V160zM288 320C323.3 320 352 291.3 352 256V224H416C433.7 224 448 238.3 448 256V352C448 369.7 433.7 384 416 384H288C270.3 384 256 369.7 256 352V320H288zM32 119.4C12.87 108.4 0 87.69 0 64C0 28.65 28.65 0 64 0C87.69 0 108.4 12.87 119.4 32H456.6C467.6 12.87 488.3 0 512 0C547.3 0 576 28.65 576 64C576 87.69 563.1 108.4 544 119.4V392.6C563.1 403.6 576 424.3 576 448C576 483.3 547.3 512 512 512C488.3 512 467.6 499.1 456.6 480H119.4C108.4 499.1 87.69 512 64 512C28.65 512 0 483.3 0 448C0 424.3 12.87 403.6 32 392.6V119.4zM119.4 96C113.8 105.7 105.7 113.8 96 119.4V392.6C105.7 398.2 113.8 406.3 119.4 416H456.6C462.2 406.3 470.3 398.2 480 392.6V119.4C470.3 113.8 462.2 105.7 456.6 96H119.4z\"],\n    \"object-ungroup\": [640, 512, [], \"f248\", \"M32 119.4C12.87 108.4 0 87.69 0 64C0 28.65 28.65 0 64 0C87.69 0 108.4 12.87 119.4 32H328.6C339.6 12.87 360.3 0 384 0C419.3 0 448 28.65 448 64C448 87.69 435.1 108.4 416 119.4V232.6C435.1 243.6 448 264.3 448 288C448 323.3 419.3 352 384 352C360.3 352 339.6 339.1 328.6 320H119.4C108.4 339.1 87.69 352 64 352C28.65 352 0 323.3 0 288C0 264.3 12.87 243.6 32 232.6V119.4zM96 119.4V232.6C105.7 238.2 113.8 246.3 119.4 256H328.6C334.2 246.3 342.3 238.2 352 232.6V119.4C342.3 113.8 334.2 105.7 328.6 96H119.4C113.8 105.7 105.7 113.8 96 119.4V119.4zM311.4 480C300.4 499.1 279.7 512 256 512C220.7 512 192 483.3 192 448C192 424.3 204.9 403.6 224 392.6V352H288V392.6C297.7 398.2 305.8 406.3 311.4 416H520.6C526.2 406.3 534.3 398.2 544 392.6V279.4C534.3 273.8 526.2 265.7 520.6 255.1H474.5C469.1 240.6 459.9 227.1 448 216.4V191.1H520.6C531.6 172.9 552.3 159.1 576 159.1C611.3 159.1 640 188.7 640 223.1C640 247.7 627.1 268.4 608 279.4V392.6C627.1 403.6 640 424.3 640 448C640 483.3 611.3 512 576 512C552.3 512 531.6 499.1 520.6 480H311.4z\"],\n    \"oil-can\": [640, 512, [], \"f613\", \"M288 128V160H368.9C378.8 160 388.6 162.3 397.5 166.8L448 192L615 156.2C633.1 152.3 645.7 173.8 633.5 187.7L451.1 394.3C438.1 408.1 421.5 416 403.1 416H144C117.5 416 96 394.5 96 368V346.7L28.51 316.7C11.17 308.1 0 291.8 0 272.8V208C0 181.5 21.49 160 48 160H224V128H192C174.3 128 160 113.7 160 96C160 78.33 174.3 64 192 64H320C337.7 64 352 78.33 352 96C352 113.7 337.7 128 320 128L288 128zM96 208H48V272.8L96 294.1V208z\"],\n    \"om\": [512, 512, [128329], \"f679\", \"M360.6 61C362.5 62.88 365.2 64 368 64s5.375-1.125 7.375-3l21.5-21.62C398.9 37.38 400 34.75 400 32s-1.125-5.375-3.125-7.375L375.4 3c-4.125-4-10.75-4-14.75 0L339 24.62C337 26.62 336 29.25 336 32s1 5.375 3 7.375L360.6 61zM412.1 191.1c-26.75 0-51.75 10.38-70.63 29.25l-24.25 24.25c-6.75 6.75-15.75 10.5-25.37 10.5H245c10.5-22.12 14.12-48.12 7.75-75.25C242.6 138.2 206.4 104.6 163.2 97.62c-36.25-6-71 5-96 28.75c-7.375 7-7 18.87 1.125 24.87L94.5 170.9c5.75 4.375 13.62 4.375 19.12-.125C122.1 163.8 132.8 159.1 144 159.1c26.38 0 48 21.5 48 48S170.4 255.9 143.1 255.9L112 255.1c-11.88 0-19.75 12.63-14.38 23.25L113.8 311.5C116.2 316.5 121.4 319.5 126.9 320H160c35.25 0 64 28.75 64 64s-28.75 64-64 64c-96.12 0-122.4-53.1-145.2-92C10.25 348.4 0 352.4 0 361.2C-.125 416 41.12 512 160 512c70.5 0 127.1-57.44 127.1-128.1c0-23.38-6.874-45.06-17.87-63.94h21.75c26.62 0 51.75-10.38 70.63-29.25l24.25-24.25c6.75-6.75 15.75-10.5 25.37-10.5C431.9 255.1 448 272.1 448 291.9V392c0 13.25-18.75 24-32 24c-39.38 0-66.75-24.25-81.88-42.88C329.4 367.2 320 370.6 320 378.1V416c0 0 0 64 96 64c48.5 0 96-39.5 96-88V291.9C512 236.8 467.3 191.1 412.1 191.1zM454.3 67.25c-85.5 65.13-169 2.751-172.5 .125c-6-4.625-14.5-4.375-20.13 .5C255.9 72.75 254.3 81 257.9 87.63C259.5 90.63 298.2 160 376.8 160c79.88 0 98.75-31.38 101.8-37.63C479.5 120.2 480 117.9 480 115.5V80C480 66.75 464.9 59.25 454.3 67.25z\"],\n    \"otter\": [640, 512, [129446], \"f700\", \"M224 160c8.836 0 16-7.164 16-16C240 135.2 232.8 128 224 128S208 135.2 208 144C208 152.8 215.2 160 224 160zM96 128C87.16 128 80 135.2 80 144C80 152.8 87.16 160 96 160s16-7.164 16-16C112 135.2 104.8 128 96 128zM474.4 64.12C466.8 63.07 460 69.07 460 76.73c0 5.959 4.188 10.1 9.991 12.36C514.2 99.46 544 160 544 192v112c0 8.844-7.156 16-16 16S512 312.8 512 304V212c0-14.87-15.65-24.54-28.94-17.89c-28.96 14.48-47.83 42.99-50.51 74.88C403.7 285.6 384 316.3 384 352v32H224c17.67 0 32-14.33 32-32c0-17.67-14.33-32-32-32H132.4c-14.46 0-27.37-9.598-31.08-23.57C97.86 283.5 96 269.1 96 256V254.4C101.1 255.3 106.3 256 111.7 256c10.78 0 21.45-2.189 31.36-6.436L160 242.3l16.98 7.271C186.9 253.8 197.6 256 208.3 256c7.176 0 14.11-.9277 20.83-2.426C241.7 292 277.4 320 320 320l36.56-.0366C363.1 294.7 377.1 272.7 396.2 256H320c0-25.73 17.56-31.61 32.31-32C369.8 223.8 384 209.6 384 192c0-17.67-14.31-32-32-32c-15.09 0-32.99 4.086-49.28 13.06C303.3 168.9 304 164.7 304 160.3v-16c0-1.684-.4238-3.248-.4961-4.912C313.2 133.9 320 123.9 320 112C320 103.2 312.8 96 304 96H292.7C274.6 58.26 236.3 32 191.7 32H128.3C83.68 32 45.44 58.26 27.33 96H16C7.164 96 0 103.2 0 112c0 11.93 6.816 21.93 16.5 27.43C16.42 141.1 16 142.7 16 144.3v16c0 19.56 5.926 37.71 16 52.86V256c0 123.7 100.3 224 224 224h160c123.9-1.166 224-101.1 224-226.2C639.9 156.9 567.8 76.96 474.4 64.12zM64 160.3v-16C64 108.9 92.86 80 128.3 80h63.32C227.1 80 256 108.9 256 144.3v16C256 186.6 234.6 208 208.3 208c-4.309 0-8.502-.8608-12.46-2.558L162.1 191.4c2.586-.3066 5.207-.543 7.598-1.631l8.314-3.777C186.9 182.3 192 174.9 192 166.7V160c0-6.723-5.996-12.17-13.39-12.17H141.4C133.1 147.8 128 153.3 128 160v6.701c0 8.15 5.068 15.6 13.09 19.25l8.314 3.777c2.391 1.088 5.012 1.324 7.598 1.631l-32.88 14.08C120.2 207.1 115.1 208 111.7 208C85.38 208 64 186.6 64 160.3z\"],\n    \"outdent\": [512, 512, [\"dedent\"], \"f03b\", \"M32 64C32 46.33 46.33 32 64 32H448C465.7 32 480 46.33 480 64C480 81.67 465.7 96 448 96H64C46.33 96 32 81.67 32 64V64zM224 192C224 174.3 238.3 160 256 160H448C465.7 160 480 174.3 480 192C480 209.7 465.7 224 448 224H256C238.3 224 224 209.7 224 192zM448 288C465.7 288 480 302.3 480 320C480 337.7 465.7 352 448 352H256C238.3 352 224 337.7 224 320C224 302.3 238.3 288 256 288H448zM32 448C32 430.3 46.33 416 64 416H448C465.7 416 480 430.3 480 448C480 465.7 465.7 480 448 480H64C46.33 480 32 465.7 32 448V448zM32.24 268.6C24 262.2 24 249.8 32.24 243.4L134.2 164.1C144.7 155.9 160 163.4 160 176.7V335.3C160 348.6 144.7 356.1 134.2 347.9L32.24 268.6z\"],\n    \"p\": [320, 512, [112], \"50\", \"M160 32.01H32c-17.69 0-32 14.33-32 32v384c0 17.67 14.31 32 32 32s32-14.33 32-32v-96h96c88.22 0 160-71.78 160-159.1S248.2 32.01 160 32.01zM160 288H64V96.01h96c52.94 0 96 43.06 96 96S212.9 288 160 288z\"],\n    \"pager\": [512, 512, [128223], \"f815\", \"M448 64H64C28.63 64 0 92.63 0 128v256c0 35.38 28.62 64 64 64h384c35.38 0 64-28.62 64-64V128C512 92.63 483.4 64 448 64zM160 368H80C71.13 368 64 360.9 64 352v-16C64 327.1 71.13 320 80 320H160V368zM288 352c0 8.875-7.125 16-16 16H192V320h80c8.875 0 16 7.125 16 16V352zM448 224c0 17.62-14.38 32-32 32H96C78.38 256 64 241.6 64 224V160c0-17.62 14.38-32 32-32h320c17.62 0 32 14.38 32 32V224z\"],\n    \"paint-roller\": [512, 512, [], \"f5aa\", \"M0 64C0 28.65 28.65 0 64 0H352C387.3 0 416 28.65 416 64V128C416 163.3 387.3 192 352 192H64C28.65 192 0 163.3 0 128V64zM160 352C160 334.3 174.3 320 192 320V304C192 259.8 227.8 224 272 224H416C433.7 224 448 209.7 448 192V69.46C485.3 82.64 512 118.2 512 160V192C512 245 469 288 416 288H272C263.2 288 256 295.2 256 304V320C273.7 320 288 334.3 288 352V480C288 497.7 273.7 512 256 512H192C174.3 512 160 497.7 160 480V352z\"],\n    \"paintbrush\": [576, 512, [128396, \"paint-brush\"], \"f1fc\", \"M224 263.3C224.2 233.3 238.4 205.2 262.4 187.2L499.1 9.605C517.7-4.353 543.6-2.965 560.7 12.9C577.7 28.76 580.8 54.54 568.2 74.07L406.5 324.1C391.3 347.7 366.6 363.2 339.3 367.1L224 263.3zM320 400C320 461.9 269.9 512 208 512H64C46.33 512 32 497.7 32 480C32 462.3 46.33 448 64 448H68.81C86.44 448 98.4 429.1 96.59 411.6C96.2 407.8 96 403.9 96 400C96 339.6 143.9 290.3 203.7 288.1L319.8 392.5C319.9 394.1 320 397.5 320 400V400z\"],\n    \"palette\": [512, 512, [127912], \"f53f\", \"M512 255.1C512 256.9 511.1 257.8 511.1 258.7C511.6 295.2 478.4 319.1 441.9 319.1H344C317.5 319.1 296 341.5 296 368C296 371.4 296.4 374.7 297 377.9C299.2 388.1 303.5 397.1 307.9 407.8C313.9 421.6 320 435.3 320 449.8C320 481.7 298.4 510.5 266.6 511.8C263.1 511.9 259.5 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256V255.1zM96 255.1C78.33 255.1 64 270.3 64 287.1C64 305.7 78.33 319.1 96 319.1C113.7 319.1 128 305.7 128 287.1C128 270.3 113.7 255.1 96 255.1zM128 191.1C145.7 191.1 160 177.7 160 159.1C160 142.3 145.7 127.1 128 127.1C110.3 127.1 96 142.3 96 159.1C96 177.7 110.3 191.1 128 191.1zM256 63.1C238.3 63.1 224 78.33 224 95.1C224 113.7 238.3 127.1 256 127.1C273.7 127.1 288 113.7 288 95.1C288 78.33 273.7 63.1 256 63.1zM384 191.1C401.7 191.1 416 177.7 416 159.1C416 142.3 401.7 127.1 384 127.1C366.3 127.1 352 142.3 352 159.1C352 177.7 366.3 191.1 384 191.1z\"],\n    \"pallet\": [640, 512, [], \"f482\", \"M624 384c8.75 0 16-7.25 16-16v-32c0-8.75-7.25-16-16-16h-608C7.25 320 0 327.3 0 336v32C0 376.8 7.25 384 16 384H64v64H16C7.25 448 0 455.3 0 464v32C0 504.8 7.25 512 16 512h608c8.75 0 16-7.25 16-16v-32c0-8.75-7.25-16-16-16H576v-64H624zM288 448H128v-64h160V448zM512 448h-160v-64h160V448z\"],\n    \"panorama\": [640, 512, [], \"e209\", \"M578.2 66.06C409.8 116.6 230.2 116.6 61.8 66.06C31 56.82 0 79.88 0 112v319.9c0 32.15 30.1 55.21 61.79 45.97c168.4-50.53 347.1-50.53 516.4-.002C608.1 487.2 640 464.1 640 431.1V112C640 79.88 609 56.82 578.2 66.06zM128 224C110.3 224 96 209.7 96 192s14.33-32 32-32c17.68 0 32 14.33 32 32S145.7 224 128 224zM474.3 388.6C423.4 380.3 371.8 376 320 376c-50.45 0-100.7 4.043-150.3 11.93c-14.14 2.246-24.11-13.19-15.78-24.84l49.18-68.56C206.1 290.4 210.9 288 216 288s9.916 2.441 12.93 6.574l32.46 44.51l93.3-139.1C357.7 194.7 362.7 192 368 192s10.35 2.672 13.31 7.125l109.1 165.1C498.1 375.9 488.1 390.8 474.3 388.6z\"],\n    \"paper-plane\": [512, 512, [61913], \"f1d8\", \"M511.6 36.86l-64 415.1c-1.5 9.734-7.375 18.22-15.97 23.05c-4.844 2.719-10.27 4.097-15.68 4.097c-4.188 0-8.319-.8154-12.29-2.472l-122.6-51.1l-50.86 76.29C226.3 508.5 219.8 512 212.8 512C201.3 512 192 502.7 192 491.2v-96.18c0-7.115 2.372-14.03 6.742-19.64L416 96l-293.7 264.3L19.69 317.5C8.438 312.8 .8125 302.2 .0625 289.1s5.469-23.72 16.06-29.77l448-255.1c10.69-6.109 23.88-5.547 34 1.406S513.5 24.72 511.6 36.86z\"],\n    \"paperclip\": [448, 512, [128206], \"f0c6\", \"M364.2 83.8C339.8 59.39 300.2 59.39 275.8 83.8L91.8 267.8C49.71 309.9 49.71 378.1 91.8 420.2C133.9 462.3 202.1 462.3 244.2 420.2L396.2 268.2C407.1 257.3 424.9 257.3 435.8 268.2C446.7 279.1 446.7 296.9 435.8 307.8L283.8 459.8C219.8 523.8 116.2 523.8 52.2 459.8C-11.75 395.8-11.75 292.2 52.2 228.2L236.2 44.2C282.5-2.08 357.5-2.08 403.8 44.2C450.1 90.48 450.1 165.5 403.8 211.8L227.8 387.8C199.2 416.4 152.8 416.4 124.2 387.8C95.59 359.2 95.59 312.8 124.2 284.2L268.2 140.2C279.1 129.3 296.9 129.3 307.8 140.2C318.7 151.1 318.7 168.9 307.8 179.8L163.8 323.8C157.1 330.5 157.1 341.5 163.8 348.2C170.5 354.9 181.5 354.9 188.2 348.2L364.2 172.2C388.6 147.8 388.6 108.2 364.2 83.8V83.8z\"],\n    \"parachute-box\": [512, 512, [], \"f4cd\", \"M272 192V320H304C311 320 317.7 321.5 323.7 324.2L443.8 192H415.5C415.8 186.7 416 181.4 416 176C416 112.1 393.8 54.84 358.9 16.69C450 49.27 493.4 122.6 507.8 173.6C510.5 183.1 502.1 192 493.1 192H487.1L346.8 346.3C350.1 352.8 352 360.2 352 368V464C352 490.5 330.5 512 304 512H207.1C181.5 512 159.1 490.5 159.1 464V368C159.1 360.2 161.9 352.8 165.2 346.3L24.92 192H18.89C9 192 1.483 183.1 4.181 173.6C18.64 122.6 61.97 49.27 153.1 16.69C118.2 54.84 96 112.1 96 176C96 181.4 96.16 186.7 96.47 192H68.17L188.3 324.2C194.3 321.5 200.1 320 207.1 320H239.1V192H128.5C128.2 186.7 127.1 181.4 127.1 176C127.1 125 143.9 80.01 168.2 48.43C192.5 16.89 223.8 0 255.1 0C288.2 0 319.5 16.89 343.8 48.43C368.1 80.01 384 125 384 176C384 181.4 383.8 186.7 383.5 192H272z\"],\n    \"paragraph\": [448, 512, [182], \"f1dd\", \"M448 63.1C448 81.67 433.7 96 416 96H384v352c0 17.67-14.33 32-31.1 32S320 465.7 320 448V96h-32v352c0 17.67-14.33 32-31.1 32S224 465.7 224 448v-96H198.9c-83.57 0-158.2-61.11-166.1-144.3C23.66 112.3 98.44 32 191.1 32h224C433.7 32 448 46.33 448 63.1z\"],\n    \"passport\": [448, 512, [], \"f5ab\", \"M129.6 208c5.25 31.25 25.62 57.13 53.25 70.38C175.3 259.4 170.3 235 168.8 208H129.6zM129.6 176h39.13c1.5-27 6.5-51.38 14.12-70.38C155.3 118.9 134.9 144.8 129.6 176zM224 286.8C231.8 279.3 244.8 252.3 247.4 208H200.5C203.3 252.3 216.3 279.3 224 286.8zM265.1 105.6C272.8 124.6 277.8 149 279.3 176h39.13C313.1 144.8 292.8 118.9 265.1 105.6zM384 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h320c35.2 0 64-28.8 64-64V64C448 28.8 419.2 0 384 0zM336 416h-224C103.3 416 96 408.8 96 400S103.3 384 112 384h224c8.75 0 16 7.25 16 16S344.8 416 336 416zM224 320c-70.75 0-128-57.25-128-128s57.25-128 128-128s128 57.25 128 128S294.8 320 224 320zM265.1 278.4c27.62-13.25 48-39.13 53.25-70.38h-39.13C277.8 235 272.8 259.4 265.1 278.4zM200.6 176h46.88C244.7 131.8 231.8 104.8 224 97.25C216.3 104.8 203.2 131.8 200.6 176z\"],\n    \"paste\": [512, 512, [\"file-clipboard\"], \"f0ea\", \"M320 96V80C320 53.49 298.5 32 272 32H215.4C204.3 12.89 183.6 0 160 0S115.7 12.89 104.6 32H48C21.49 32 0 53.49 0 80v320C0 426.5 21.49 448 48 448l144 .0013L192 176C192 131.8 227.8 96 272 96H320zM160 88C146.8 88 136 77.25 136 64S146.8 40 160 40S184 50.75 184 64S173.3 88 160 88zM416 128v96h96L416 128zM384 224L384 128h-112C245.5 128 224 149.5 224 176v288c0 26.51 21.49 48 48 48h192c26.51 0 48-21.49 48-48V256h-95.99C398.4 256 384 241.6 384 224z\"],\n    \"pause\": [320, 512, [9208], \"f04c\", \"M272 63.1l-32 0c-26.51 0-48 21.49-48 47.1v288c0 26.51 21.49 48 48 48L272 448c26.51 0 48-21.49 48-48v-288C320 85.49 298.5 63.1 272 63.1zM80 63.1l-32 0c-26.51 0-48 21.49-48 48v288C0 426.5 21.49 448 48 448l32 0c26.51 0 48-21.49 48-48v-288C128 85.49 106.5 63.1 80 63.1z\"],\n    \"paw\": [512, 512, [], \"f1b0\", \"M256 224c-79.37 0-191.1 122.7-191.1 200.2C64.02 459.1 90.76 480 135.8 480C184.6 480 216.9 454.9 256 454.9C295.5 454.9 327.9 480 376.2 480c44.1 0 71.74-20.88 71.74-55.75C447.1 346.8 335.4 224 256 224zM108.8 211.4c-10.37-34.62-42.5-57.12-71.62-50.12S-7.104 202 3.27 236.6C13.64 271.3 45.77 293.8 74.89 286.8S119.1 246 108.8 211.4zM193.5 190.6c30.87-8.125 46.37-49.1 34.5-93.37s-46.5-71.1-77.49-63.87c-30.87 8.125-46.37 49.1-34.5 93.37C127.9 170.1 162.5 198.8 193.5 190.6zM474.9 161.3c-29.12-6.1-61.25 15.5-71.62 50.12c-10.37 34.63 4.75 68.37 33.87 75.37c29.12 6.1 61.12-15.5 71.62-50.12C519.1 202 503.1 168.3 474.9 161.3zM318.5 190.6c30.1 8.125 65.62-20.5 77.49-63.87c11.87-43.37-3.625-85.25-34.5-93.37c-30.1-8.125-65.62 20.5-77.49 63.87C272.1 140.6 287.6 182.5 318.5 190.6z\"],\n    \"peace\": [512, 512, [9774], \"f67c\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM224 445.1c-36.36-6.141-69.2-22.48-95.59-46.04L224 322.6V445.1zM288 322.6l95.59 76.47C357.2 422.6 324.4 438.1 288 445.1V322.6zM64 256c0-94.95 69.34-173.8 160-189.1v173.7l-135.7 108.6C72.86 321.6 64 289.8 64 256zM423.7 349.2L288 240.6V66.89C378.7 82.2 448 161.1 448 256C448 289.8 439.1 321.6 423.7 349.2z\"],\n    \"pen\": [512, 512, [128394], \"f304\", \"M362.7 19.32C387.7-5.678 428.3-5.678 453.3 19.32L492.7 58.75C517.7 83.74 517.7 124.3 492.7 149.3L444.3 197.7L314.3 67.72L362.7 19.32zM421.7 220.3L188.5 453.4C178.1 463.8 165.2 471.5 151.1 475.6L30.77 511C22.35 513.5 13.24 511.2 7.03 504.1C.8198 498.8-1.502 489.7 .976 481.2L36.37 360.9C40.53 346.8 48.16 333.9 58.57 323.5L291.7 90.34L421.7 220.3z\"],\n    \"pen-clip\": [512, 512, [\"pen-alt\"], \"f305\", \"M492.7 58.75C517.7 83.74 517.7 124.3 492.7 149.3L440.6 201.4L310.6 71.43L362.7 19.32C387.7-5.678 428.3-5.678 453.3 19.32L492.7 58.75zM240.1 114.9C231.6 105.5 216.4 105.5 207 114.9L104.1 216.1C95.6 226.3 80.4 226.3 71.03 216.1C61.66 207.6 61.66 192.4 71.03 183L173.1 80.97C201.2 52.85 246.8 52.85 274.9 80.97L417.9 224L229.5 412.5C181.5 460.5 120.3 493.2 53.7 506.5L28.71 511.5C20.84 513.1 12.7 510.6 7.03 504.1C1.356 499.3-1.107 491.2 .4662 483.3L5.465 458.3C18.78 391.7 51.52 330.5 99.54 282.5L254.1 128L240.1 114.9z\"],\n    \"pen-fancy\": [512, 512, [128395, 10002], \"f5ac\", \"M373.5 27.11C388.5 9.885 410.2 0 433 0C476.6 0 512 35.36 512 78.98C512 101.8 502.1 123.5 484.9 138.5L277.7 319L192.1 234.3L373.5 27.11zM255.1 341.7L235.9 425.1C231.9 442.2 218.9 455.8 202 460.5L24.35 510.3L119.7 414.9C122.4 415.6 125.1 416 128 416C145.7 416 160 401.7 160 384C160 366.3 145.7 352 128 352C110.3 352 96 366.3 96 384C96 386.9 96.38 389.6 97.08 392.3L1.724 487.6L51.47 309.1C56.21 293.1 69.8 280.1 86.9 276.1L170.3 256.9L255.1 341.7z\"],\n    \"pen-nib\": [512, 512, [10001], \"f5ad\", \"M368.4 18.34C390.3-3.526 425.7-3.526 447.6 18.34L493.7 64.4C515.5 86.27 515.5 121.7 493.7 143.6L437.9 199.3L312.7 74.06L368.4 18.34zM417.4 224L371.4 377.3C365.4 397.2 350.2 413 330.5 419.6L66.17 508.2C54.83 512 42.32 509.2 33.74 500.9L187.3 347.3C193.6 350.3 200.6 352 207.1 352C234.5 352 255.1 330.5 255.1 304C255.1 277.5 234.5 256 207.1 256C181.5 256 159.1 277.5 159.1 304C159.1 311.4 161.7 318.4 164.7 324.7L11.11 478.3C2.809 469.7-.04 457.2 3.765 445.8L92.39 181.5C98.1 161.8 114.8 146.6 134.7 140.6L287.1 94.6L417.4 224z\"],\n    \"pen-ruler\": [512, 512, [\"pencil-ruler\"], \"f5ae\", \"M492.7 42.75C517.7 67.74 517.7 108.3 492.7 133.3L436.3 189.7L322.3 75.72L378.7 19.32C403.7-5.678 444.3-5.678 469.3 19.32L492.7 42.75zM44.89 353.2L299.7 98.34L413.7 212.3L158.8 467.1C152.1 473.8 143.8 478.7 134.6 481.4L30.59 511.1C22.21 513.5 13.19 511.1 7.03 504.1C.8669 498.8-1.47 489.8 .9242 481.4L30.65 377.4C33.26 368.2 38.16 359.9 44.89 353.2zM249.4 103.4L103.4 249.4L16 161.9C-2.745 143.2-2.745 112.8 16 94.06L94.06 16C112.8-2.745 143.2-2.745 161.9 16L181.7 35.76C181.4 36.05 181 36.36 180.7 36.69L116.7 100.7C110.4 106.9 110.4 117.1 116.7 123.3C122.9 129.6 133.1 129.6 139.3 123.3L203.3 59.31C203.6 58.99 203.1 58.65 204.2 58.3L249.4 103.4zM453.7 307.8C453.4 308 453 308.4 452.7 308.7L388.7 372.7C382.4 378.9 382.4 389.1 388.7 395.3C394.9 401.6 405.1 401.6 411.3 395.3L475.3 331.3C475.6 330.1 475.1 330.6 476.2 330.3L496 350.1C514.7 368.8 514.7 399.2 496 417.9L417.9 496C399.2 514.7 368.8 514.7 350.1 496L262.6 408.6L408.6 262.6L453.7 307.8z\"],\n    \"pen-to-square\": [512, 512, [\"edit\"], \"f044\", \"M490.3 40.4C512.2 62.27 512.2 97.73 490.3 119.6L460.3 149.7L362.3 51.72L392.4 21.66C414.3-.2135 449.7-.2135 471.6 21.66L490.3 40.4zM172.4 241.7L339.7 74.34L437.7 172.3L270.3 339.6C264.2 345.8 256.7 350.4 248.4 353.2L159.6 382.8C150.1 385.6 141.5 383.4 135 376.1C128.6 370.5 126.4 361 129.2 352.4L158.8 263.6C161.6 255.3 166.2 247.8 172.4 241.7V241.7zM192 63.1C209.7 63.1 224 78.33 224 95.1C224 113.7 209.7 127.1 192 127.1H96C78.33 127.1 64 142.3 64 159.1V416C64 433.7 78.33 448 96 448H352C369.7 448 384 433.7 384 416V319.1C384 302.3 398.3 287.1 416 287.1C433.7 287.1 448 302.3 448 319.1V416C448 469 405 512 352 512H96C42.98 512 0 469 0 416V159.1C0 106.1 42.98 63.1 96 63.1H192z\"],\n    \"pencil\": [512, 512, [61504, 9999, \"pencil-alt\"], \"f303\", \"M421.7 220.3L188.5 453.4L154.6 419.5L158.1 416H112C103.2 416 96 408.8 96 400V353.9L92.51 357.4C87.78 362.2 84.31 368 82.42 374.4L59.44 452.6L137.6 429.6C143.1 427.7 149.8 424.2 154.6 419.5L188.5 453.4C178.1 463.8 165.2 471.5 151.1 475.6L30.77 511C22.35 513.5 13.24 511.2 7.03 504.1C.8198 498.8-1.502 489.7 .976 481.2L36.37 360.9C40.53 346.8 48.16 333.9 58.57 323.5L291.7 90.34L421.7 220.3zM492.7 58.75C517.7 83.74 517.7 124.3 492.7 149.3L444.3 197.7L314.3 67.72L362.7 19.32C387.7-5.678 428.3-5.678 453.3 19.32L492.7 58.75z\"],\n    \"people-arrows-left-right\": [576, 512, [\"people-arrows\"], \"e068\", \"M96 304.1c0-12.16 4.971-23.83 13.64-32.01l72.13-68.08c1.65-1.555 3.773-2.311 5.611-3.578C177.1 176.8 155 160 128 160H64C28.65 160 0 188.7 0 224v96c0 17.67 14.33 32 31.1 32L32 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96.39l-50.36-47.53C100.1 327.9 96 316.2 96 304.1zM480 128c35.38 0 64-28.62 64-64s-28.62-64-64-64s-64 28.62-64 64S444.6 128 480 128zM96 128c35.38 0 64-28.62 64-64S131.4 0 96 0S32 28.62 32 64S60.63 128 96 128zM444.4 295.3L372.3 227.3c-3.49-3.293-8.607-4.193-13.01-2.299C354.9 226.9 352 231.2 352 236V272H224V236c0-4.795-2.857-9.133-7.262-11.03C212.3 223.1 207.2 223.1 203.7 227.3L131.6 295.3c-4.805 4.535-4.805 12.94 0 17.47l72.12 68.07c3.49 3.291 8.607 4.191 13.01 2.297C221.1 381.3 224 376.9 224 372.1V336h128v36.14c0 4.795 2.857 9.135 7.262 11.04c4.406 1.893 9.523 .9922 13.01-2.299l72.12-68.07C449.2 308.3 449.2 299.9 444.4 295.3zM512 160h-64c-26.1 0-49.98 16.77-59.38 40.42c1.842 1.271 3.969 2.027 5.623 3.588l72.12 68.06C475 280.2 480 291.9 480 304.1c.002 12.16-4.969 23.83-13.64 32.01L416 383.6V480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-128c17.67 0 32-14.33 32-32V224C576 188.7 547.3 160 512 160z\"],\n    \"people-carry-box\": [640, 512, [\"people-carry\"], \"f4ce\", \"M128 95.1c26.5 0 47.1-21.5 47.1-47.1S154.5 0 128 0S80.01 21.5 80.01 47.1S101.5 95.1 128 95.1zM511.1 95.1c26.5 0 47.1-21.5 47.1-47.1S538.5 0 511.1 0c-26.5 0-48 21.5-48 47.1S485.5 95.1 511.1 95.1zM603.5 258.3l-18.5-80.13c-4.625-20-18.62-36.88-37.5-44.88c-18.5-8-38.1-6.75-56.12 3.25c-22.62 13.38-39.62 34.5-48.12 59.38l-11.25 33.88l-15.1 10.25L415.1 144c0-8.75-7.25-16-16-16H240c-8.75 0-16 7.25-16 16L224 239.1l-16.12-10.25l-11.25-33.88c-8.375-25-25.38-46-48.12-59.38c-17.25-10-37.63-11.25-56.12-3.25c-18.88 8-32.88 24.88-37.5 44.88l-18.37 80.13c-4.625 20 .7506 41.25 14.37 56.75l67.25 75.88l10.12 92.63C130 499.8 143.8 512 160 512c1.25 0 2.25-.125 3.5-.25c17.62-1.875 30.25-17.62 28.25-35.25l-10-92.75c-1.5-13-7-25.12-15.62-35l-43.37-49l17.62-70.38l6.876 20.38c4 12.5 11.87 23.5 24.5 32.63l51 32.5c4.623 2.875 12.12 4.625 17.25 5h159.1c5.125-.375 12.62-2.125 17.25-5l51-32.5c12.62-9.125 20.5-20 24.5-32.63l6.875-20.38l17.63 70.38l-43.37 49c-8.625 9.875-14.12 22-15.62 35l-10 92.75c-2 17.62 10.75 33.38 28.25 35.25C477.7 511.9 478.7 512 479.1 512c16.12 0 29.1-12.12 31.75-28.5l10.12-92.63L589.1 315C602.7 299.5 608.1 278.3 603.5 258.3zM46.26 358.1l-44 110c-6.5 16.38 1.5 35 17.88 41.63c16.75 6.5 35.12-1.75 41.62-17.88l27.62-69.13l-2-18.25L46.26 358.1zM637.7 468.1l-43.1-110l-41.13 46.38l-2 18.25l27.62 69.13C583.2 504.4 595.2 512 607.1 512c3.998 0 7.998-.75 11.87-2.25C636.2 503.1 644.2 484.5 637.7 468.1z\"],\n    \"pepper-hot\": [512, 512, [127798], \"f816\", \"M465 134.2c21.46-38.38 19.87-87.17-5.65-123.1c-7.541-10.83-22.31-13.53-33.2-5.938c-10.77 7.578-13.44 22.55-5.896 33.41c14.41 20.76 15.13 47.69 4.098 69.77C407.1 100.1 388 95.1 368 95.1c-36.23 0-68.93 13.83-94.24 35.92L352 165.5V256h90.56l33.53 78.23C498.2 308.9 512 276.2 512 239.1C512 198 493.7 160.6 465 134.2zM320 288V186.6l-52.95-22.69C216.2 241.3 188.5 400 56 400C25.13 400 0 425.1 0 456S25.13 512 56 512c180.3 0 320.1-88.27 389.3-168.5L421.5 288H320z\"],\n    \"percent\": [384, 512, [62785, 62101, \"percentage\"], \"25\", \"M374.6 73.39c-12.5-12.5-32.75-12.5-45.25 0l-320 320c-12.5 12.5-12.5 32.75 0 45.25C15.63 444.9 23.81 448 32 448s16.38-3.125 22.62-9.375l320-320C387.1 106.1 387.1 85.89 374.6 73.39zM64 192c35.3 0 64-28.72 64-64S99.3 64.01 64 64.01S0 92.73 0 128S28.7 192 64 192zM320 320c-35.3 0-64 28.72-64 64s28.7 64 64 64s64-28.72 64-64S355.3 320 320 320z\"],\n    \"person\": [320, 512, [129485, \"male\"], \"f183\", \"M315.1 271l-70.56-112.1C232.8 139.3 212.5 128 190.3 128H129.7c-22.22 0-42.53 11.25-54.28 30.09L4.873 271c-9.375 14.98-4.812 34.72 10.16 44.09c15 9.375 34.75 4.812 44.09-10.19l28.88-46.18L87.1 480c0 17.67 14.33 32 32 32c17.67 0 31.1-14.33 31.1-32l0-144h16V480c0 17.67 14.33 32 32 32c17.67 0 32-14.33 32-32V258.8l28.88 46.2C266.9 314.7 277.4 320 288 320c5.781 0 11.66-1.562 16.94-4.859C319.9 305.8 324.5 286 315.1 271zM160 96c26.5 0 48-21.5 48-48S186.5 0 160 0C133.5 0 112 21.5 112 48S133.5 96 160 96z\"],\n    \"person-biking\": [640, 512, [128692, \"biking\"], \"f84a\", \"M352 48C352 21.49 373.5 0 400 0C426.5 0 448 21.49 448 48C448 74.51 426.5 96 400 96C373.5 96 352 74.51 352 48zM480 159.1C497.7 159.1 512 174.3 512 191.1C512 209.7 497.7 223.1 480 223.1H416C408.7 223.1 401.7 221.5 396 216.1L355.3 184.4L295 232.9L337.8 261.4C346.7 267.3 352 277.3 352 288V416C352 433.7 337.7 448 320 448C302.3 448 288 433.7 288 416V305.1L227.5 266.8C194.7 245.1 192.5 198.9 223.2 175.2L306.3 110.9C323.8 97.45 348.1 97.58 365.4 111.2L427.2 159.1H480zM256 384C256 454.7 198.7 512 128 512C57.31 512 0 454.7 0 384C0 313.3 57.31 256 128 256C198.7 256 256 313.3 256 384zM128 312C88.24 312 56 344.2 56 384C56 423.8 88.24 456 128 456C167.8 456 200 423.8 200 384C200 344.2 167.8 312 128 312zM640 384C640 454.7 582.7 512 512 512C441.3 512 384 454.7 384 384C384 313.3 441.3 256 512 256C582.7 256 640 313.3 640 384zM512 312C472.2 312 440 344.2 440 384C440 423.8 472.2 456 512 456C551.8 456 584 423.8 584 384C584 344.2 551.8 312 512 312z\"],\n    \"person-booth\": [576, 512, [], \"f756\", \"M192 496C192 504.8 199.3 512 208 512h32C248.8 512 256 504.8 256 496V320H192V496zM544 0h-32v496c0 8.75 7.25 16 16 16h32c8.75 0 16-7.25 16-16V32C576 14.25 561.8 0 544 0zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32S16 53.5 16 80S37.5 128 64 128zM224 224H173.1L127.9 178.8C115.8 166.6 99.75 160 82.75 160H64C46.88 160 30.75 166.8 18.75 178.8c-12 12.12-18.72 28.22-18.72 45.35L0 480c0 17.75 14.25 32 31.88 32s32-14.25 32-32L64 379.3c.875 .5 1.625 1.375 2.5 1.75L95.63 424V480c0 17.75 14.25 32 32 32c17.62 0 32-14.25 32-32v-56.5c0-9.875-2.375-19.75-6.75-28.62l-41.13-61.25V253l20.88 20.88C141.8 283 153.8 288 166.5 288H224c17.75 0 32-14.25 32-32S241.8 224 224 224zM192 32v160h64V0H224C206.3 0 192 14.25 192 32zM288 32l31.5 223.1l-30.88 154.6C284.3 431.3 301.6 448 320 448c15.25 0 27.99-9.125 32.24-30.38C353.3 434.5 366.9 448 384 448c17.75 0 32-14.25 32-32c0 17.75 14.25 32 32 32s32-14.25 32-32V0h-192V32z\"],\n    \"person-dots-from-line\": [576, 512, [\"diagnoses\"], \"f470\", \"M463.1 256c8.75 0 15.1-7.25 15.1-16S472.7 224 463.1 224c-8.75 0-15.1 7.25-15.1 16S455.2 256 463.1 256zM287.1 176c48.5 0 87.1-39.5 87.1-88S336.5 0 287.1 0S200 39.5 200 88S239.5 176 287.1 176zM80 256c8.75 0 15.1-7.25 15.1-16S88.75 224 80 224S64 231.3 64 240S71.25 256 80 256zM75.91 375.1c.6289-.459 41.62-29.26 100.1-50.05L176 432h223.1l-.0004-106.8c58.32 20.8 99.51 49.49 100.1 49.91C508.6 381.1 518.3 384 527.9 384c14.98 0 29.73-7 39.11-20.09c15.41-21.59 10.41-51.56-11.16-66.97c-1.955-1.391-21.1-14.83-51.83-30.85C495.5 279.2 480.7 288 463.1 288c-26.25 0-47.1-21.75-47.1-48c0-3.549 .4648-6.992 1.217-10.33C378.6 217.2 334.4 208 288 208c-59.37 0-114.1 15.01-160.1 32.67C127.6 266.6 106 288 80 288C69.02 288 58.94 284 50.8 277.7c-18.11 10.45-29.25 18.22-30.7 19.26c-21.56 15.41-26.56 45.38-11.16 66.97C24.33 385.5 54.3 390.4 75.91 375.1zM335.1 344c13.25 0 23.1 10.75 23.1 24s-10.75 24-23.1 24c-13.25 0-23.1-10.75-23.1-24S322.7 344 335.1 344zM240 248c13.25 0 23.1 10.75 23.1 24S253.3 296 240 296c-13.25 0-23.1-10.75-23.1-24S226.8 248 240 248zM559.1 464H16c-8.75 0-15.1 7.25-15.1 16l-.0016 16c0 8.75 7.25 16 15.1 16h543.1c8.75 0 15.1-7.25 15.1-16L575.1 480C575.1 471.3 568.7 464 559.1 464z\"],\n    \"person-dress\": [320, 512, [\"female\"], \"f182\", \"M160 96c26.5 0 48-21.5 48-48s-21.5-48-47.1-48c-26.5 0-48 21.5-48 48S133.5 96 160 96zM315.1 271l-61.19-97.95C236.3 144.9 205.8 128 172.5 128H147.5C114.2 128 83.75 144.9 66.06 173.1L4.873 271C-4.502 286 .0607 305.8 15.03 315.1c15.03 9.375 34.75 4.812 44.09-10.19l32.62-52.19L47.1 384h40v96c0 17.67 14.33 32 32 32c17.67 0 31.1-14.33 31.1-32v-96h16v96c0 17.67 14.33 32 32 32c17.67 0 32-14.33 32-32v-96h40l-43.76-131.3l32.63 52.22C266.9 314.7 277.4 320 288 320c5.781 0 11.66-1.562 16.94-4.859C319.9 305.8 324.5 286 315.1 271z\"],\n    \"person-hiking\": [384, 512, [\"hiking\"], \"f6ec\", \"M240 96c26.5 0 48-21.5 48-48S266.5 0 240 0C213.5 0 192 21.5 192 48S213.5 96 240 96zM80.01 287.1c7.31 0 13.97-4.762 15.87-11.86L137 117c.3468-1.291 .5125-2.588 .5125-3.866c0-7.011-4.986-13.44-12.39-15.13C118.4 96.38 111.7 95.6 105.1 95.6c-36.65 0-70 23.84-79.32 59.53L.5119 253.3C.1636 254.6-.0025 255.9-.0025 257.2c0 7.003 4.961 13.42 12.36 15.11L76.01 287.5C77.35 287.8 78.69 287.1 80.01 287.1zM368 160h-15.1c-8.875 0-15.1 7.125-15.1 16V192h-34.75l-46.75-46.75C243.4 134.1 228.6 128 212.9 128C185.9 128 162.5 146.3 155.9 172.5L129 280.3C128.4 282.8 128 285.5 128 288.1c0 8.325 3.265 16.44 9.354 22.53l86.62 86.63V480c0 17.62 14.37 32 31.1 32s32-14.38 32-32v-82.75c0-17.12-6.625-33.13-18.75-45.25l-46.87-46.88c.25-.5 .5-.875 .625-1.375l19.1-79.5l22.37 22.38C271.4 252.6 279.5 256 288 256h47.1v240c0 8.875 7.125 16 15.1 16h15.1C376.9 512 384 504.9 384 496v-320C384 167.1 376.9 160 368 160zM81.01 472.3c-.672 2.63-.993 5.267-.993 7.86c0 14.29 9.749 27.29 24.24 30.89C106.9 511.8 109.5 512 112 512c14.37 0 27.37-9.75 30.1-24.25l25.25-101l-52.75-52.75L81.01 472.3z\"],\n    \"person-praying\": [384, 512, [128720, \"pray\"], \"f683\", \"M255.1 128c35.38 0 63.1-28.62 63.1-64s-28.62-64-63.1-64S191.1 28.62 191.1 64S220.6 128 255.1 128zM225.4 297.8c14 16.75 39 19.12 56.01 5.25l88.01-72c17-14 19.5-39.25 5.625-56.38c-14-17.12-39.25-19.5-56.38-5.625L261.3 216l-39-46.25c-15.38-18.38-39.13-27.88-64.01-25.38c-24.13 2.5-45.25 16.25-56.38 37l-49.38 92C29.13 317 43.88 369.8 86.76 397.1L131.5 432H40C17.88 432 0 449.9 0 472S17.88 512 40 512h208c34.13 0 53.76-42.75 28.25-68.25L166.4 333.9L201.3 269L225.4 297.8z\"],\n    \"person-running\": [448, 512, [127939, \"running\"], \"f70c\", \"M400 224h-44l-26.12-53.25c-12.5-25.5-35.38-44.25-61.75-51L197 98.63C189.5 96.84 181.1 95.97 174.5 95.97c-20.88 0-41.33 6.81-58.26 19.78L76.5 146.3C68.31 152.5 64.01 162 64.01 171.6c0 17.11 13.67 32.02 32.02 32.02c6.808 0 13.67-2.158 19.47-6.616l39.63-30.38c5.92-4.488 13.01-6.787 19.53-6.787c2.017 0 3.981 .2196 5.841 .6623l14.62 4.25l-37.5 87.5C154.1 260.3 152.5 268.8 152.5 277.2c0 22.09 11.49 43.52 31.51 55.29l85 50.13l-27.5 87.75c-.9875 3.174-1.458 6.388-1.458 9.55c0 13.65 8.757 26.31 22.46 30.58C265.6 511.5 268.9 512 272 512c13.62 0 26.25-8.75 30.5-22.5l31.75-101c1.211-4.278 1.796-8.625 1.796-12.93c0-16.57-8.661-32.51-23.55-41.44l-61.13-36.12l31.25-78.38l20.25 41.5C310.9 277.4 327.9 288 345.1 288H400c17.62 0 32-14.38 32-32C432 238.3 417.6 224 400 224zM288 96c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48S261.5 96 288 96zM129.8 317.5L114.9 352H48c-17.62 0-32 14.38-32 32s14.38 32 32 32h77.5c19.25 0 36.5-11.5 44-29.12l8.875-20.5l-10.75-6.25C150.4 349.9 137.6 334.8 129.8 317.5z\"],\n    \"person-skating\": [448, 512, [\"skating\"], \"f7c5\", \"M399.1 0c-26.5 0-48.01 21.5-48.01 48S373.5 96 399.1 96C426.5 96 448 74.5 448 48S426.5 0 399.1 0zM399.1 448c-8.751 0-16 7.25-16 16S376.7 480 367.1 480h-96.01c-8.751 0-16 7.25-16 16s7.251 16 16 16h96.01c26.5 0 48.01-21.5 48.01-48C415.1 455.2 408.7 448 399.1 448zM129.1 451.9c-11.34 0-11.19 9.36-22.65 9.36c-4.074 0-8.163-1.516-11.21-4.625l-67.98-67.89c-3.063-3.125-7.165-4.688-11.27-4.688c-4.102 0-8.204 1.562-11.27 4.688C1.562 391.8-.0001 395.9-.0001 400s1.562 8.203 4.688 11.27l67.88 67.98c9.376 9.375 21.59 14 33.96 14c13.23 0 38.57-8.992 38.57-25.36C145.1 456.7 135.2 451.9 129.1 451.9zM173.8 276.8L80.2 370.5c-6.251 6.25-9.376 14.44-9.376 22.62c0 24.75 22.57 32 31.88 32c8.251 0 16.5-3.125 22.63-9.375l91.89-92l-30.13-30.12C182.1 288.6 177.7 282.9 173.8 276.8zM127.1 160h105.5L213.3 177.3c-21.18 18.04-22.31 41.73-22.31 48.65c0 16.93 6.8 33.22 18.68 45.1l78.26 78.25V432c0 17.75 14.25 32 32 32s32-14.25 32-32v-89.38c0-12.62-5.126-25-14.13-33.88l-61.01-61c.5001-.5 1.25-.625 1.75-1.125l82.26-82.38c7.703-7.702 11.76-17.87 11.76-28.25c0-22.04-17.86-39.97-40.01-39.97L127.1 96C110.2 96 95.96 110.2 95.96 128S110.2 160 127.1 160z\"],\n    \"person-skiing\": [512, 512, [9975, \"skiing\"], \"f7c9\", \"M432.1 96.02c26.51 0 47.99-21.5 47.99-48.01S458.6 0 432.1 0s-47.98 21.5-47.98 48.01S405.6 96.02 432.1 96.02zM511.1 469.1c0-13.98-11.33-23.95-23.89-23.95c-18.89 0-19.23 19.11-46.15 19.11c-5.476 0-10.87-1.081-15.87-3.389l-135.8-70.26l49.15-73.82c5.446-8.116 8.09-17.39 8.09-26.63c0-12.4-4.776-24.73-14.09-33.9l-40.38-40.49l-106.1-53.1C185.6 165.8 185.4 169 185.4 172.2c0 16.65 6.337 32.78 18.42 44.86l75.03 75.21l-45.88 68.76L34.97 258.8C31.44 257 27.64 256.1 23.93 256.1C9.675 256.1 0 267.8 0 280.1c0 8.673 4.735 17.04 12.96 21.24l392 202.6c11.88 5.501 24.45 8.119 37.08 8.119C480.1 512 511.1 486.7 511.1 469.1zM119.1 91.65L108.5 114.2C114.2 117 120.2 118.4 126.2 118.4c9.153 0 18.1-3.2 25.06-9.102l47.26 23.51c-.125 0-.125 .125-.2501 .25l114.5 56.76l32.51-13l6.376 19.13c4.001 12.13 12.63 22.01 24 27.76l58.14 28.1c4.609 2.287 9.455 3.355 14.26 3.355c18.8 0 31.98-15.43 31.98-31.93c0-11.74-6.461-23.1-17.74-28.7l-52.03-26.1l-17.12-51.15C386.6 98.69 364.2 73.99 333.1 73.99c-7.658 0-15.82 1.504-24.43 4.934L227.4 111.3L164.9 80.33c.009-.3461 .0134-.692 .0134-1.038c0-14.13-7.468-27.7-20.89-34.53L132.9 66.45L98.17 59.43C97.83 59.36 97.53 59.35 97.19 59.35c-2.666 0-5.276 2.177-5.276 5.273c0 1.473 .648 2.936 1.81 3.961L119.1 91.65z\"],\n    \"person-skiing-nordic\": [576, 512, [\"skiing-nordic\"], \"f7ca\", \"M336 96C362.5 96 384 74.5 384 48S362.5 0 336 0S288 21.5 288 48S309.5 96 336 96zM552 416c-13.25 0-24 10.75-24 24s-10.75 24-24 24h-69.5L460 285.6c11.75-4.75 20.04-16.31 20.04-29.69c0-17.75-14.38-31.95-32.01-31.95l-43.9-.0393l-26.11-53.22c-12.5-25.5-35.5-44.12-61.75-50.87l-71.22-21.15c-7.475-1.819-15.08-2.693-22.59-2.693c-20.86 0-41.25 6.854-58.16 19.72L124.6 146.2C116.3 152.5 111.1 161.1 111.1 171.6c0 14.71 8.712 21.23 9.031 21.6L66.88 464H24C10.75 464 0 474.8 0 488S10.75 512 24 512h480c39.75 0 72-32.25 72-72C576 426.8 565.3 416 552 416zM291.6 463.9H194.7l43.1-90.97l-21.99-12.1c-12.13-7.25-21.99-16.89-29.49-27.77l-62.48 131.7L99.5 464l52.25-261.4c4.125-1 8.112-2.846 11.74-5.596l39.81-30.45c5.821-4.485 12.86-6.771 19.38-6.771c2.021 0 4.015 .212 5.878 .6556l14.73 4.383L205.8 252.2C202.3 260.3 200.7 268.9 200.7 277.3c0 22.06 11.42 43.37 31.41 55.22l84.97 50.15L291.6 463.9zM402.1 464l-43.58-.125l23.6-75.48c1.221-4.314 1.805-8.69 1.805-13.03c0-16.53-8.558-32.43-23.41-41.34l-61.21-36.1l31.32-78.23l20.26 41.36c8 16.25 24.86 26.89 43.11 26.89L427.3 288L402.1 464z\"],\n    \"person-snowboarding\": [512, 512, [127938, \"snowboarding\"], \"f7ce\", \"M460.7 249.6c5.877 4.25 12.47 6.393 19.22 6.393c10.76 0 32.05-8.404 32.05-31.97c0-9.74-4.422-19.36-12.8-25.65l-111.5-83.48c-13.75-10.25-29.04-18.42-45.42-23.79l-63.66-21.23l-26.12-52.12c-5.589-11.17-16.9-17.64-28.63-17.64c-17.8 0-31.99 14.47-31.99 32.01c0 4.803 1.086 9.674 3.374 14.25l29.12 58.12c5.75 11.38 15.55 19.85 27.67 23.98l16.45 5.522L227.3 154.6C205.5 165.5 191.9 187.4 191.9 211.8L191.9 264.9L117.8 289.6C104.4 294.1 95.95 306.5 95.95 319.9c0 12.05 6.004 19.05 10.33 23.09l-38.68-14.14C41.23 319.4 49.11 295 23.97 295c-18.67 0-23.97 17.16-23.97 24.09c0 8.553 13.68 41.32 51.13 54.88l364.1 132.8C425.7 510.2 435.7 512 445.7 512c12.5 0 24.97-2.732 36.47-8.232c8.723-3.997 13.85-12.71 13.85-21.77c0-18.67-17.15-23.96-24.06-23.96c-3.375 0-6.73 .7505-9.998 2.248c-5.111 2.486-10.64 3.702-16.21 3.702c-4.511 0-9.049-.7978-13.41-2.364l-90.68-33.12c8.625-4.125 15.53-11.76 17.78-21.89l21.88-101.1c.7086-3.335 1.05-6.668 1.05-10c0-14.91-6.906-29.31-19.17-38.4l-52.01-39l66.01-30.5L460.7 249.6zM316.3 301.3l-19.66 92c-.4205 1.997-.5923 3.976-.5923 5.911c0 4.968 1.264 9.691 3.333 14.01l-169.5-61.49c2.625-.25 5.492-.4448 8.117-1.32l85-28.38c19.63-6.5 32.77-24.73 32.77-45.48l0-20.53L316.3 301.3zM431.9 95.99c26.5 0 48-21.5 48-47.1S458.4 0 431.9 0s-48 21.5-48 47.1S405.4 95.99 431.9 95.99z\"],\n    \"person-swimming\": [576, 512, [127946, \"swimmer\"], \"f5c4\", \"M192.4 320c63.38 0 54.09-39.67 95.33-40.02c42.54 .3672 31.81 40.02 95.91 40.02c39.27 0 55.72-18.41 62.21-24.83l-140.4-116.1c3.292-1.689 31.66-18.2 75.25-18.2c12.57 0 25.18 1.397 37.53 4.21l38.59 8.844c2.412 .5592 4.824 .8272 7.2 .8272c15.91 0 31.96-12.81 31.96-32.04c0-14.58-10.03-27.77-24.84-31.16l-38.59-8.844c-17.06-3.904-34.46-5.837-51.81-5.837c-120.1 0-177.4 85.87-178.1 88.02L179.1 213.3C158.1 241.3 147.4 273.8 145 307.7C157.5 315.4 174.3 320 192.4 320zM576 397c0-15.14-10.82-28.59-26.25-31.42c-48.52-8.888-45.5-29.48-69.6-29.48c-25.02 0-31.19 31.79-96.18 31.79c-48.59 0-72.72-22.06-73.38-22.62c-6.141-6.157-14.26-9.188-22.42-9.188c-24.75 0-31.59 31.81-96.2 31.81c-48.59 0-72.69-22.03-73.41-22.59c-6.125-6.157-14.3-9.245-22.46-9.245c-8.072 0-16.12 3.026-22.38 8.901c-29.01 26.25-73.75 12.54-73.75 52.08c0 16.08 12.77 32.07 31.71 32.07c9.77 0 39.65-7.34 64.26-21.84C115.5 418.8 147.4 431.1 192 431.1s76.5-13.12 96-24.66c19.53 11.53 51.47 24.59 96 24.59c44.59 0 76.56-13.09 96.06-24.62c24.71 14.57 54.74 21.83 64.24 21.83C563.2 429.1 576 413.3 576 397zM95.1 224c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64s-64 28.65-64 64C31.1 195.3 60.65 224 95.1 224z\"],\n    \"person-walking\": [320, 512, [128694, \"walking\"], \"f554\", \"M207.9 95.99c26.5 0 47.1-21.49 47.1-47.99S234.4 0 207.9 0S159.1 21.49 159.1 47.99S181.4 95.99 207.9 95.99zM73.61 385.7c-3.25 8.125-7.998 15.5-14.25 21.49l-49.99 50.12c-6.249 6.246-9.373 14.46-9.373 22.68C-.0003 505.1 22.93 512 31.99 512c8.186 0 16.37-3.125 22.62-9.375l59.36-59.48c6.125-6 10.87-13.37 14.25-21.49l13.5-33.74c-55.36-60.23-38.74-41.74-47.49-53.74L73.61 385.7zM320 273.9c0-11.77-6.392-23.15-17.57-28.74l-23.24-11.88L269.4 203.9c-5.552-16.8-33.04-75.89-102.9-75.89c-35.58 0-55.44 10.22-92.58 25.26C52.36 161.9 34.74 178.4 24.24 199.4L17.62 213C15.33 217.6 14.24 222.5 14.24 227.3c0 17.25 13.78 31.97 31.63 31.97c11.6 0 22.78-6.455 28.37-17.63l6.748-13.62c3.5-7 9.248-12.5 16.5-15.38L124.2 201.8L109.1 262.5C107.8 267.6 107.2 272.9 107.2 278c0 15.79 5.886 31.29 16.8 43.24l59.86 65.51c7.25 7.875 12.37 17.38 14.87 27.62l18.37 73.39c3.609 14.45 16.69 24.2 31.04 24.2c19.31 0 32.01-16.13 32.01-32.05c0-2.531-.3053-5.097-.9435-7.652l-22.25-89.01c-2.625-10.38-7.748-20.01-14.87-27.76l-45.49-49.76l17.12-68.63l5.498 16.5c5.375 16.13 16.75 29.38 31.74 37.01l23.24 11.75c4.543 2.29 9.371 3.375 14.13 3.375C304.8 305.8 320 292.5 320 273.9z\"],\n    \"person-walking-with-cane\": [448, 512, [\"blind\"], \"f29d\", \"M445.2 486.1l-117.3-172.6c-3.002 4.529-6.646 8.652-11.12 12c-4.414 3.318-9.299 5.689-14.43 7.307l116.4 171.3c3.094 4.547 8.127 7.008 13.22 7.008c3.125 0 6.247-.8984 8.997-2.773C448.3 504.2 450.2 494.3 445.2 486.1zM143.1 95.1c26.51 0 48.01-21.49 48.01-47.1S170.5 0 144 0S96 21.49 96 48S117.5 95.1 143.1 95.1zM96.01 348.1l-31.03 124.2c-4.312 17.16 6.125 34.53 23.28 38.81C90.86 511.7 93.48 512 96.04 512c14.34 0 27.38-9.703 31-24.23l22.04-88.18L96.01 346.5V348.1zM313.6 268.8l-76.78-102.4C218.8 142.3 190.1 128 160 128L135.6 127.1c-36.59 0-69.5 20.33-85.87 53.06L3.387 273.7C-4.518 289.5 1.887 308.7 17.7 316.6c4.594 2.297 9.469 3.375 14.28 3.375c11.75 0 23.03-6.469 28.66-17.69l35.38-70.76v56.45c0 8.484 3.375 16.62 9.375 22.63l86.63 86.63v82.75c0 17.67 14.31 32 32 32c17.69 0 32-14.33 32-32v-82.75c0-17.09-6.656-33.16-18.75-45.25L192 306.8V213.3l70.38 93.88c10.59 14.11 30.62 16.98 44.78 6.406C321.3 303 324.2 282.9 313.6 268.8z\"],\n    \"peseta-sign\": [384, 512, [], \"e221\", \"M192 32C269.4 32 333.1 86.97 348.8 160H352C369.7 160 384 174.3 384 192C384 209.7 369.7 224 352 224H348.8C333.1 297 269.4 352 192 352H96V448C96 465.7 81.67 480 64 480C46.33 480 32 465.7 32 448V224C14.33 224 0 209.7 0 192C0 174.3 14.33 160 32 160V64C32 46.33 46.33 32 64 32H192zM282.5 160C269.4 122.7 233.8 96 192 96H96V160H282.5zM96 224V288H192C233.8 288 269.4 261.3 282.5 224H96z\"],\n    \"peso-sign\": [384, 512, [], \"e222\", \"M176 32C244.4 32 303.7 71.01 332.8 128H352C369.7 128 384 142.3 384 160C384 177.7 369.7 192 352 192H351.3C351.8 197.3 352 202.6 352 208C352 213.4 351.8 218.7 351.3 224H352C369.7 224 384 238.3 384 256C384 273.7 369.7 288 352 288H332.8C303.7 344.1 244.4 384 176 384H96V448C96 465.7 81.67 480 64 480C46.33 480 32 465.7 32 448V288C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224V192C14.33 192 0 177.7 0 160C0 142.3 14.33 128 32 128V64C32 46.33 46.33 32 64 32H176zM254.4 128C234.2 108.2 206.5 96 176 96H96V128H254.4zM96 192V224H286.9C287.6 218.8 288 213.4 288 208C288 202.6 287.6 197.2 286.9 192H96zM254.4 288H96V320H176C206.5 320 234.2 307.8 254.4 288z\"],\n    \"phone\": [512, 512, [128379, 128222], \"f095\", \"M511.2 387l-23.25 100.8c-3.266 14.25-15.79 24.22-30.46 24.22C205.2 512 0 306.8 0 54.5c0-14.66 9.969-27.2 24.22-30.45l100.8-23.25C139.7-2.602 154.7 5.018 160.8 18.92l46.52 108.5c5.438 12.78 1.77 27.67-8.98 36.45L144.5 207.1c33.98 69.22 90.26 125.5 159.5 159.5l44.08-53.8c8.688-10.78 23.69-14.51 36.47-8.975l108.5 46.51C506.1 357.2 514.6 372.4 511.2 387z\"],\n    \"phone-flip\": [512, 512, [128381, \"phone-alt\"], \"f879\", \"M18.92 351.2l108.5-46.52c12.78-5.531 27.77-1.801 36.45 8.98l44.09 53.82c69.25-34 125.5-90.31 159.5-159.5l-53.81-44.04c-10.75-8.781-14.41-23.69-8.974-36.47l46.51-108.5c6.094-13.91 21.1-21.52 35.79-18.11l100.8 23.25c14.25 3.25 24.22 15.8 24.22 30.46c0 252.3-205.2 457.5-457.5 457.5c-14.67 0-27.18-9.968-30.45-24.22l-23.25-100.8C-2.571 372.4 5.018 357.2 18.92 351.2z\"],\n    \"phone-slash\": [640, 512, [], \"f3dd\", \"M271.1 367.5L227.9 313.7c-8.688-10.78-23.69-14.51-36.47-8.974l-108.5 46.51c-13.91 6-21.49 21.19-18.11 35.79l23.25 100.8C91.32 502 103.8 512 118.5 512c107.4 0 206.1-37.46 284.2-99.65l-88.75-69.56C300.6 351.9 286.6 360.3 271.1 367.5zM630.8 469.1l-159.6-125.1c65.03-78.97 104.7-179.5 104.7-289.5c0-14.66-9.969-27.2-24.22-30.45L451 .8125c-14.69-3.406-29.73 4.213-35.82 18.12l-46.52 108.5c-5.438 12.78-1.771 27.67 8.979 36.45l53.82 44.08C419.2 232.1 403.9 256.2 386.2 277.4L38.81 5.111C34.41 1.673 29.19 0 24.03 0C16.91 0 9.84 3.158 5.121 9.189c-8.188 10.44-6.37 25.53 4.068 33.7l591.1 463.1c10.5 8.203 25.57 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"phone-volume\": [512, 512, [\"volume-control-phone\"], \"f2a0\", \"M284.6 181.9c-10.28-8.344-25.41-6.875-33.75 3.406C242.4 195.6 243.9 210.7 254.2 219.1c11.31 9.25 17.81 22.69 17.81 36.87c0 14.19-6.5 27.62-17.81 36.87c-10.28 8.406-11.78 23.53-3.375 33.78c4.719 5.812 11.62 8.812 18.56 8.812c5.344 0 10.75-1.781 15.19-5.406c22.53-18.44 35.44-45.4 35.44-74.05S307.1 200.4 284.6 181.9zM345.1 107.1c-10.22-8.344-25.34-6.907-33.78 3.343c-8.406 10.25-6.906 25.37 3.344 33.78c33.88 27.78 53.31 68.18 53.31 110.9s-19.44 83.09-53.31 110.9c-10.25 8.406-11.75 23.53-3.344 33.78c4.75 5.781 11.62 8.781 18.56 8.781c5.375 0 10.75-1.781 15.22-5.438C390.2 367.1 416 313.1 416 255.1S390.2 144.9 345.1 107.1zM406.4 33.15c-10.22-8.344-25.34-6.875-33.78 3.344c-8.406 10.25-6.906 25.37 3.344 33.78C431.9 116.1 464 183.8 464 255.1s-32.09 139.9-88.06 185.7c-10.25 8.406-11.75 23.53-3.344 33.78c4.75 5.781 11.62 8.781 18.56 8.781c5.375 0 10.75-1.781 15.22-5.438C473.5 423.8 512 342.6 512 255.1S473.5 88.15 406.4 33.15zM151.3 174.6C161.1 175.6 172.1 169.5 176 159.6l33.75-84.38C214 64.35 209.1 51.1 200.2 45.86l-67.47-42.17C123.2-2.289 110.9-.8945 102.9 7.08C-34.32 144.3-34.31 367.7 102.9 504.9c7.982 7.984 20.22 9.379 29.75 3.402l67.48-42.19c9.775-6.104 13.9-18.47 9.598-29.3L176 352.5c-3.945-9.963-14.14-16.11-24.73-14.97l-53.24 5.314C78.89 286.7 78.89 225.4 98.06 169.3L151.3 174.6z\"],\n    \"photo-film\": [640, 512, [\"photo-video\"], \"f87c\", \"M352 432c0 8.836-7.164 16-16 16H176c-8.838 0-16-7.164-16-16L160 128H48C21.49 128 .0003 149.5 .0003 176v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48L512 384h-160L352 432zM104 439c0 4.969-4.031 9-9 9h-30c-4.969 0-9-4.031-9-9v-30c0-4.969 4.031-9 9-9h30c4.969 0 9 4.031 9 9V439zM104 335c0 4.969-4.031 9-9 9h-30c-4.969 0-9-4.031-9-9v-30c0-4.969 4.031-9 9-9h30c4.969 0 9 4.031 9 9V335zM104 231c0 4.969-4.031 9-9 9h-30c-4.969 0-9-4.031-9-9v-30C56 196 60.03 192 65 192h30c4.969 0 9 4.031 9 9V231zM408 409c0-4.969 4.031-9 9-9h30c4.969 0 9 4.031 9 9v30c0 4.969-4.031 9-9 9h-30c-4.969 0-9-4.031-9-9V409zM591.1 0H239.1C213.5 0 191.1 21.49 191.1 48v256c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-256C640 21.49 618.5 0 591.1 0zM303.1 64c17.68 0 32 14.33 32 32s-14.32 32-32 32C286.3 128 271.1 113.7 271.1 96S286.3 64 303.1 64zM574.1 279.6C571.3 284.8 565.9 288 560 288H271.1C265.1 288 260.5 284.6 257.7 279.3C255 273.9 255.5 267.4 259.1 262.6l70-96C332.1 162.4 336.9 160 341.1 160c5.11 0 9.914 2.441 12.93 6.574l22.35 30.66l62.74-94.11C442.1 98.67 447.1 96 453.3 96c5.348 0 10.34 2.672 13.31 7.125l106.7 160C576.6 268 576.9 274.3 574.1 279.6z\"],\n    \"piggy-bank\": [576, 512, [], \"f4d3\", \"M400 96L399.1 96.66C394.7 96.22 389.4 96 384 96H256C239.5 96 223.5 98.08 208.2 102C208.1 100 208 98.02 208 96C208 42.98 250.1 0 304 0C357 0 400 42.98 400 96zM384 128C387.5 128 390.1 128.1 394.4 128.3C398.7 128.6 402.9 129 407 129.6C424.6 109.1 450.8 96 480 96H512L493.2 171.1C509.1 185.9 521.9 203.9 530.7 224H544C561.7 224 576 238.3 576 256V352C576 369.7 561.7 384 544 384H512C502.9 396.1 492.1 406.9 480 416V480C480 497.7 465.7 512 448 512H416C398.3 512 384 497.7 384 480V448H256V480C256 497.7 241.7 512 224 512H192C174.3 512 160 497.7 160 480V416C125.1 389.8 101.3 349.8 96.79 304H68C30.44 304 0 273.6 0 236C0 198.4 30.44 168 68 168H72C85.25 168 96 178.7 96 192C96 205.3 85.25 216 72 216H68C56.95 216 48 224.1 48 236C48 247 56.95 256 68 256H99.2C111.3 196.2 156.9 148.5 215.5 133.2C228.4 129.8 241.1 128 256 128H384zM424 240C410.7 240 400 250.7 400 264C400 277.3 410.7 288 424 288C437.3 288 448 277.3 448 264C448 250.7 437.3 240 424 240z\"],\n    \"pills\": [576, 512, [], \"f484\", \"M112 32C50.12 32 0 82.12 0 143.1v223.1c0 61.88 50.12 111.1 112 111.1s112-50.12 112-111.1V143.1C224 82.12 173.9 32 112 32zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48V256zM299.8 226.2c-3.5-3.5-9.5-3-12.38 .875c-45.25 62.5-40.38 150.1 15.88 206.4c56.38 56.25 144 61.25 206.5 15.88c4-2.875 4.249-8.75 .75-12.25L299.8 226.2zM529.5 207.2c-56.25-56.25-143.9-61.13-206.4-15.87c-4 2.875-4.375 8.875-.875 12.38l210.9 210.7c3.5 3.5 9.375 3.125 12.25-.75C590.8 351.1 585.9 263.6 529.5 207.2z\"],\n    \"pizza-slice\": [512, 512, [], \"f818\", \"M100.4 112.3L.5101 491.7c-1.375 5.625 .1622 11.6 4.287 15.6c4.127 4.125 10.13 5.744 15.63 4.119l379.1-105.1C395.3 231.4 276.5 114.1 100.4 112.3zM127.1 416c-17.62 0-32-14.38-32-31.1c0-17.62 14.39-32 32.01-32c17.63 0 32 14.38 32 31.1C160 401.6 145.6 416 127.1 416zM175.1 271.1c-17.63 0-32-14.38-32-32c0-17.62 14.38-31.1 32-31.1c17.62 0 32 14.38 32 31.1C208 257.6 193.6 271.1 175.1 271.1zM272 367.1c-17.62 0-32-14.38-32-31.1c0-17.62 14.38-32 32-32c17.63 0 32 14.38 32 32C304 353.6 289.6 367.1 272 367.1zM158.9 .1406c-16.13-1.5-31.25 8.501-35.38 24.12L108.7 80.52c187.6 5.5 314.5 130.6 322.5 316.1l56.88-15.75c15.75-4.375 25.5-19.62 23.63-35.87C490.9 165.1 340.8 17.39 158.9 .1406z\"],\n    \"place-of-worship\": [640, 512, [], \"f67f\", \"M233.4 86.63L308.7 11.32C314.9 5.067 325.1 5.067 331.3 11.32L406.6 86.63C412.6 92.63 416 100.8 416 109.3V217.6L456.7 242C471.2 250.7 480 266.3 480 283.2V512H384V416C384 380.7 355.3 352 319.1 352C284.7 352 255.1 380.7 255.1 416V512H159.1V283.2C159.1 266.3 168.8 250.7 183.3 242L223.1 217.6V109.3C223.1 100.8 227.4 92.63 233.4 86.63H233.4zM24.87 330.3L128 273.6V512H48C21.49 512 0 490.5 0 464V372.4C0 354.9 9.53 338.8 24.87 330.3V330.3zM592 512H512V273.6L615.1 330.3C630.5 338.8 640 354.9 640 372.4V464C640 490.5 618.5 512 592 512V512z\"],\n    \"plane\": [576, 512, [], \"f072\", \"M482.3 192C516.5 192 576 221 576 256C576 292 516.5 320 482.3 320H365.7L265.2 495.9C259.5 505.8 248.9 512 237.4 512H181.2C170.6 512 162.9 501.8 165.8 491.6L214.9 320H112L68.8 377.6C65.78 381.6 61.04 384 56 384H14.03C6.284 384 0 377.7 0 369.1C0 368.7 .1818 367.4 .5398 366.1L32 256L.5398 145.9C.1818 144.6 0 143.3 0 142C0 134.3 6.284 128 14.03 128H56C61.04 128 65.78 130.4 68.8 134.4L112 192H214.9L165.8 20.4C162.9 10.17 170.6 0 181.2 0H237.4C248.9 0 259.5 6.153 265.2 16.12L365.7 192H482.3z\"],\n    \"plane-arrival\": [640, 512, [128748], \"f5af\", \"M.2528 166.9L.0426 67.99C.0208 57.74 9.508 50.11 19.51 52.34L55.07 60.24C65.63 62.58 74.29 70.11 78.09 80.24L95.1 127.1L223.3 165.6L181.8 20.4C178.9 10.18 186.6 .001 197.2 .001H237.3C248.8 .001 259.5 6.236 265.2 16.31L374.2 210.2L481.5 241.8C497.4 246.5 512.2 254.3 525.2 264.7L559.6 292.2C583.7 311.4 577.7 349.5 548.9 360.5C507.7 376.1 462.7 378.5 420.1 367.4L121.7 289.8C110.6 286.9 100.5 281.1 92.4 272.9L9.536 189.4C3.606 183.4 .2707 175.3 .2528 166.9V166.9zM608 448C625.7 448 640 462.3 640 480C640 497.7 625.7 512 608 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448H608zM192 368C192 385.7 177.7 400 160 400C142.3 400 128 385.7 128 368C128 350.3 142.3 336 160 336C177.7 336 192 350.3 192 368zM224 384C224 366.3 238.3 352 256 352C273.7 352 288 366.3 288 384C288 401.7 273.7 416 256 416C238.3 416 224 401.7 224 384z\"],\n    \"plane-departure\": [640, 512, [128747], \"f5b0\", \"M484.6 62C502.6 52.8 522.6 48 542.8 48H600.2C627.2 48 645.9 74.95 636.4 100.2C618.2 148.9 582.1 188.9 535.6 212.2L262.8 348.6C258.3 350.8 253.4 352 248.4 352H110.7C101.4 352 92.5 347.9 86.42 340.8L13.34 255.6C6.562 247.7 9.019 235.5 18.33 230.8L50.49 214.8C59.05 210.5 69.06 210.2 77.8 214.1L135.1 239.1L234.6 189.7L87.64 95.2C77.21 88.49 78.05 72.98 89.14 67.43L135 44.48C150.1 36.52 169.5 35.55 186.1 41.8L381 114.9L484.6 62zM0 480C0 462.3 14.33 448 32 448H608C625.7 448 640 462.3 640 480C640 497.7 625.7 512 608 512H32C14.33 512 0 497.7 0 480z\"],\n    \"plane-slash\": [640, 512, [], \"e069\", \"M238.1 161.3L197.8 20.4C194.9 10.17 202.6-.0001 213.2-.0001H269.4C280.9-.0001 291.5 6.153 297.2 16.12L397.7 192H514.3C548.5 192 608 221 608 256C608 292 548.5 320 514.3 320H440.6L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.237 28.37-3.065 38.81 5.112L238.1 161.3zM41.54 128.7L362.5 381.6L297.2 495.9C291.5 505.8 280.9 512 269.4 512H213.2C202.6 512 194.9 501.8 197.8 491.6L246.9 319.1H144L100.8 377.6C97.78 381.6 93.04 384 88 384H46.03C38.28 384 32 377.7 32 369.1C32 368.7 32.18 367.4 32.54 366.1L64 255.1L32.54 145.9C32.18 144.6 32 143.3 32 142C32 135.9 35.1 130.6 41.54 128.7V128.7z\"],\n    \"play\": [384, 512, [9654], \"f04b\", \"M361 215C375.3 223.8 384 239.3 384 256C384 272.7 375.3 288.2 361 296.1L73.03 472.1C58.21 482 39.66 482.4 24.52 473.9C9.377 465.4 0 449.4 0 432V80C0 62.64 9.377 46.63 24.52 38.13C39.66 29.64 58.21 29.99 73.03 39.04L361 215z\"],\n    \"plug\": [384, 512, [128268], \"f1e6\", \"M320 32c0-17.62-14.38-32-32-32s-32 14.38-32 32v96h64V32zM368 159.1h-352c-8.875 0-16 7.125-16 16v32c0 8.875 7.125 16 16 16H32V256c0 76 53.5 141.6 128 156.8V512h64v-99.25C298.5 397.6 352 332 352 256V223.1h16c8.875 0 16-7.125 16-16v-32C384 167.1 376.9 159.1 368 159.1zM128 32c0-17.62-14.38-32-32-32S64 14.38 64 32v96h64V32z\"],\n    \"plus\": [448, 512, [10133, 61543, \"add\"], \"2b\", \"M432 256c0 17.69-14.33 32.01-32 32.01H256v144c0 17.69-14.33 31.99-32 31.99s-32-14.3-32-31.99v-144H48c-17.67 0-32-14.32-32-32.01s14.33-31.99 32-31.99H192v-144c0-17.69 14.33-32.01 32-32.01s32 14.32 32 32.01v144h144C417.7 224 432 238.3 432 256z\"],\n    \"plus-minus\": [384, 512, [], \"e43c\", \"M352 448H32c-17.69 0-32 14.31-32 32s14.31 31.1 32 31.1h320c17.69 0 32-14.31 32-31.1S369.7 448 352 448zM48 208H160v111.1c0 17.69 14.31 31.1 32 31.1s32-14.31 32-31.1V208h112c17.69 0 32-14.32 32-32.01s-14.31-31.99-32-31.99H224v-112c0-17.69-14.31-32.01-32-32.01S160 14.33 160 32.01v112H48c-17.69 0-32 14.31-32 31.99S30.31 208 48 208z\"],\n    \"podcast\": [448, 512, [], \"f2ce\", \"M224 0C100.3 0 0 100.3 0 224c0 92.22 55.77 171.4 135.4 205.7c-3.48-20.75-6.17-41.59-6.998-58.15C80.08 340.1 48 285.8 48 224c0-97.05 78.95-176 176-176s176 78.95 176 176c0 61.79-32.08 116.1-80.39 147.6c-.834 16.5-3.541 37.37-7.035 58.17C392.2 395.4 448 316.2 448 224C448 100.3 347.7 0 224 0zM224 312c-32.88 0-64 8.625-64 43.75c0 33.13 12.88 104.3 20.62 132.8C185.8 507.6 205.1 512 224 512s38.25-4.375 43.38-23.38C275.1 459.9 288 388.8 288 355.8C288 320.6 256.9 312 224 312zM224 280c30.95 0 56-25.05 56-56S254.1 168 224 168S168 193 168 224S193 280 224 280zM368 224c0-79.53-64.47-144-144-144S80 144.5 80 224c0 44.83 20.92 84.38 53.04 110.8c4.857-12.65 14.13-25.88 32.05-35.04C165.1 299.7 165.4 299.7 165.6 299.7C142.9 282.1 128 254.9 128 224c0-53.02 42.98-96 96-96s96 42.98 96 96c0 30.92-14.87 58.13-37.57 75.68c.1309 .0254 .5078 .0488 .4746 .0742c17.93 9.16 27.19 22.38 32.05 35.04C347.1 308.4 368 268.8 368 224z\"],\n    \"poo\": [512, 512, [128169], \"f2fe\", \"M451.4 369.1C468.8 356 480 335.4 480 312c0-39.75-32.25-72-72-72h-14.12C407.3 228.2 416 211.2 416 191.1c0-35.25-28.75-63.1-64-63.1h-5.875C349.8 117.9 352 107.2 352 95.1c0-53-43-96-96-96c-5.25 0-10.25 .75-15.12 1.5C250.3 14.62 256 30.62 256 47.1c0 44.25-35.75 80-80 80H160c-35.25 0-64 28.75-64 63.1c0 19.25 8.75 36.25 22.12 48H104C64.25 239.1 32 272.3 32 312c0 23.38 11.25 44 28.62 57.13C26.25 374.6 0 404.1 0 440C0 479.8 32.25 512 72 512h368c39.75 0 72-32.25 72-72C512 404.1 485.8 374.6 451.4 369.1zM192 256c17.75 0 32 14.25 32 32s-14.25 32-32 32S160 305.8 160 288S174.3 256 192 256zM351.5 395C340.1 422.9 292.1 448 256 448c-36.99 0-84.98-25.12-95.48-53C158.5 389.8 162.5 384 168.3 384h175.5C349.5 384 353.5 389.8 351.5 395zM320 320c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S337.8 320 320 320z\"],\n    \"poo-storm\": [448, 512, [\"poo-bolt\"], \"f75a\", \"M304 368H248.3l38.45-89.7c2.938-6.859 .7187-14.84-5.312-19.23c-6.096-4.422-14.35-4.031-19.94 .8906l-128 111.1c-5.033 4.391-6.783 11.44-4.439 17.67c2.346 6.25 8.314 10.38 14.97 10.38H199.7l-38.45 89.7c-2.938 6.859-.7187 14.84 5.312 19.23C169.4 510.1 172.7 512 175.1 512c3.781 0 7.531-1.328 10.53-3.953l128-111.1c5.033-4.391 6.783-11.44 4.439-17.67C316.6 372.1 310.7 368 304 368zM373.3 226.6C379.9 216.6 384 204.9 384 192c0-35.38-28.62-64-64-64h-5.875C317.8 118 320 107.3 320 96c0-53-43-96-96-96C218.9 0 213.9 .75 208.9 1.5C218.3 14.62 224 30.62 224 48C224 92.13 188.1 128 144 128H128C92.63 128 64 156.6 64 192c0 12.88 4.117 24.58 10.72 34.55C31.98 236.3 0 274.3 0 320c0 53.02 42.98 96 96 96h12.79c-4.033-4.414-7.543-9.318-9.711-15.1c-7.01-18.64-1.645-39.96 13.32-53.02l127.9-111.9C249.1 228.2 260.3 223.1 271.1 224c10.19 0 19.95 3.174 28.26 9.203c18.23 13.27 24.76 36.1 15.89 57.71l-19.33 45.1h7.195c19.89 0 37.95 12.51 44.92 31.11C355.3 384 351 402.8 339.1 416H352c53.02 0 96-42.98 96-96C448 274.3 416 236.3 373.3 226.6z\"],\n    \"poop\": [512, 512, [], \"f619\", \"M512 440.1C512 479.9 479.7 512 439.1 512H71.92C32.17 512 0 479.8 0 440c0-35.88 26.19-65.35 60.56-70.85C43.31 356 32 335.4 32 312C32 272.2 64.25 240 104 240h13.99C104.5 228.2 96 211.2 96 192c0-35.38 28.56-64 63.94-64h16C220.1 128 256 92.12 256 48c0-17.38-5.784-33.35-15.16-46.47C245.8 .7754 250.9 0 256 0c53 0 96 43 96 96c0 11.25-2.288 22-5.913 32h5.879C387.3 128 416 156.6 416 192c0 19.25-8.59 36.25-22.09 48H408C447.8 240 480 272.2 480 312c0 23.38-11.38 44.01-28.63 57.14C485.7 374.6 512 404.3 512 440.1z\"],\n    \"power-off\": [512, 512, [9211], \"f011\", \"M288 256C288 273.7 273.7 288 256 288C238.3 288 224 273.7 224 256V32C224 14.33 238.3 0 256 0C273.7 0 288 14.33 288 32V256zM80 256C80 353.2 158.8 432 256 432C353.2 432 432 353.2 432 256C432 201.6 407.3 152.9 368.5 120.6C354.9 109.3 353 89.13 364.3 75.54C375.6 61.95 395.8 60.1 409.4 71.4C462.2 115.4 496 181.8 496 255.1C496 388.5 388.5 496 256 496C123.5 496 16 388.5 16 255.1C16 181.8 49.75 115.4 102.6 71.4C116.2 60.1 136.4 61.95 147.7 75.54C158.1 89.13 157.1 109.3 143.5 120.6C104.7 152.9 80 201.6 80 256z\"],\n    \"prescription\": [448, 512, [], \"f5b1\", \"M440.1 448.4l-96.28-96.21l95.87-95.95c9.373-9.381 9.373-24.59 0-33.97l-22.62-22.64c-9.373-9.381-24.57-9.381-33.94 0L288.1 295.6L220.5 228c46.86-22.92 76.74-75.46 64.95-133.1C273.9 38.74 221.8 0 164.6 0H31.1C14.33 0 0 14.34 0 32.03v264.1c0 13.26 10.75 24.01 23.1 24.01l31.1 .085c13.25 0 23.1-10.75 23.1-24.02V240.2H119.4l112.1 112L135.4 448.4c-9.373 9.381-9.373 24.59 0 33.97l22.62 22.64c9.373 9.38 24.57 9.38 33.94 0l96.13-96.21l96.28 96.21c9.373 9.381 24.57 9.381 33.94 0l22.62-22.64C450.3 472.9 450.3 457.7 440.1 448.4zM79.1 80.06h87.1c22.06 0 39.1 17.95 39.1 40.03s-17.94 40.03-39.1 40.03H79.1V80.06z\"],\n    \"prescription-bottle\": [384, 512, [], \"f485\", \"M32 192h112C152.8 192 160 199.2 160 208C160 216.8 152.8 224 144 224H32v64h112C152.8 288 160 295.2 160 304C160 312.8 152.8 320 144 320H32v64h112C152.8 384 160 391.2 160 400C160 408.8 152.8 416 144 416H32v32c0 35.2 28.8 64 64 64h192c35.2 0 64-28.8 64-64V128H32V192zM360 0H24C10.75 0 0 10.75 0 24v48C0 85.25 10.75 96 24 96h336C373.3 96 384 85.25 384 72v-48C384 10.75 373.3 0 360 0z\"],\n    \"prescription-bottle-medical\": [384, 512, [\"prescription-bottle-alt\"], \"f486\", \"M32 448c0 35.2 28.8 64 64 64h192c35.2 0 64-28.8 64-64V128H32V448zM96 304C96 295.2 103.2 288 112 288H160V240C160 231.2 167.2 224 176 224h32C216.8 224 224 231.2 224 240V288h48C280.8 288 288 295.2 288 304v32c0 8.799-7.199 16-16 16H224v48c0 8.799-7.199 16-16 16h-32C167.2 416 160 408.8 160 400V352H112C103.2 352 96 344.8 96 336V304zM360 0H24C10.75 0 0 10.75 0 24v48C0 85.25 10.75 96 24 96h336C373.3 96 384 85.25 384 72v-48C384 10.75 373.3 0 360 0z\"],\n    \"print\": [512, 512, [128424, 128438, 9113], \"f02f\", \"M448 192H64C28.65 192 0 220.7 0 256v96c0 17.67 14.33 32 32 32h32v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h32c17.67 0 32-14.33 32-32V256C512 220.7 483.3 192 448 192zM384 448H128v-96h256V448zM432 296c-13.25 0-24-10.75-24-24c0-13.27 10.75-24 24-24s24 10.73 24 24C456 285.3 445.3 296 432 296zM128 64h229.5L384 90.51V160h64V77.25c0-8.484-3.375-16.62-9.375-22.62l-45.25-45.25C387.4 3.375 379.2 0 370.8 0H96C78.34 0 64 14.33 64 32v128h64V64z\"],\n    \"pump-medical\": [384, 512, [], \"e06a\", \"M379.3 94.06l-43.32-43.32C323.1 38.74 307.7 32 290.8 32h-66.75c0-17.67-14.33-32-32-32H127.1c-17.67 0-32 14.33-32 32L96 128h128l-.0002-32h66.75l43.31 43.31c6.248 6.248 16.38 6.248 22.63 0l22.62-22.62C385.6 110.4 385.6 100.3 379.3 94.06zM235.6 160H84.37C51.27 160 23.63 185.2 20.63 218.2l-20.36 224C-3.139 479.7 26.37 512 64.01 512h191.1c37.63 0 67.14-32.31 63.74-69.79l-20.36-224C296.4 185.2 268.7 160 235.6 160zM239.1 333.3c0 7.363-5.971 13.33-13.33 13.33h-40v40c0 7.363-5.969 13.33-13.33 13.33h-26.67c-7.363 0-13.33-5.971-13.33-13.33v-40H93.33c-7.363 0-13.33-5.971-13.33-13.33V306.7c0-7.365 5.971-13.33 13.33-13.33h40v-40C133.3 245.1 139.3 240 146.7 240h26.67c7.363 0 13.33 5.969 13.33 13.33v40h40c7.363 0 13.33 5.969 13.33 13.33V333.3z\"],\n    \"pump-soap\": [384, 512, [], \"e06b\", \"M235.6 160H84.37C51.27 160 23.63 185.2 20.63 218.2l-20.36 224C-3.139 479.7 26.37 512 64.01 512h191.1c37.63 0 67.14-32.31 63.74-69.79l-20.36-224C296.4 185.2 268.7 160 235.6 160zM159.1 416C124.7 416 96 389.7 96 357.3c0-25 38.08-75.47 55.5-97.27c4.25-5.312 12.75-5.312 17 0C185.9 281.8 224 332.3 224 357.3C224 389.7 195.3 416 159.1 416zM379.3 94.06l-43.32-43.32C323.1 38.74 307.7 32 290.8 32h-66.75c0-17.67-14.33-32-32-32H127.1c-17.67 0-32 14.33-32 32L96 128h128l-.0002-32h66.75l43.31 43.31c6.248 6.248 16.38 6.248 22.63 0l22.62-22.62C385.6 110.4 385.6 100.3 379.3 94.06z\"],\n    \"puzzle-piece\": [512, 512, [129513], \"f12e\", \"M512 288c0 35.35-21.49 64-48 64c-32.43 0-31.72-32-55.64-32C394.9 320 384 330.9 384 344.4V480c0 17.67-14.33 32-32 32h-71.64C266.9 512 256 501.1 256 487.6C256 463.1 288 464.4 288 432c0-26.51-28.65-48-64-48s-64 21.49-64 48c0 32.43 32 31.72 32 55.64C192 501.1 181.1 512 167.6 512H32c-17.67 0-32-14.33-32-32v-135.6C0 330.9 10.91 320 24.36 320C48.05 320 47.6 352 80 352C106.5 352 128 323.3 128 288S106.5 223.1 80 223.1c-32.43 0-31.72 32-55.64 32C10.91 255.1 0 245.1 0 231.6v-71.64c0-17.67 14.33-31.1 32-31.1h135.6C181.1 127.1 192 117.1 192 103.6c0-23.69-32-23.24-32-55.64c0-26.51 28.65-47.1 64-47.1s64 21.49 64 47.1c0 32.43-32 31.72-32 55.64c0 13.45 10.91 24.36 24.36 24.36H352c17.67 0 32 14.33 32 31.1v71.64c0 13.45 10.91 24.36 24.36 24.36c23.69 0 23.24-32 55.64-32C490.5 223.1 512 252.7 512 288z\"],\n    \"q\": [448, 512, [113], \"51\", \"M393.1 402.5c34.12-39.32 54.93-90.48 54.93-146.5c0-123.5-100.5-224-223.1-224S.0001 132.5 .0001 256s100.5 224 223.1 224c44.45 0 85.81-13.16 120.7-35.58l46.73 56.08c6.328 7.594 15.42 11.52 24.59 11.52c21.35 0 31.98-18.26 31.98-32.01c0-7.223-2.433-14.49-7.419-20.47L393.1 402.5zM224 416c-88.22 0-160-71.78-160-160s71.78-159.1 160-159.1s160 71.78 160 159.1c0 36.21-12.55 69.28-32.92 96.12L280.6 267.5c-6.338-7.597-15.44-11.53-24.61-11.53c-21.27 0-31.96 18.22-31.96 32.02c0 7.223 2.433 14.49 7.419 20.47l71.53 85.83C279.6 407.7 252.8 416 224 416z\"],\n    \"qrcode\": [448, 512, [], \"f029\", \"M144 32C170.5 32 192 53.49 192 80V176C192 202.5 170.5 224 144 224H48C21.49 224 0 202.5 0 176V80C0 53.49 21.49 32 48 32H144zM128 96H64V160H128V96zM144 288C170.5 288 192 309.5 192 336V432C192 458.5 170.5 480 144 480H48C21.49 480 0 458.5 0 432V336C0 309.5 21.49 288 48 288H144zM128 352H64V416H128V352zM256 80C256 53.49 277.5 32 304 32H400C426.5 32 448 53.49 448 80V176C448 202.5 426.5 224 400 224H304C277.5 224 256 202.5 256 176V80zM320 160H384V96H320V160zM352 448H384V480H352V448zM448 480H416V448H448V480zM416 288H448V416H352V384H320V480H256V288H352V320H416V288z\"],\n    \"question\": [320, 512, [10067, 10068, 61736], \"3f\", \"M204.3 32.01H96c-52.94 0-96 43.06-96 96c0 17.67 14.31 31.1 32 31.1s32-14.32 32-31.1c0-17.64 14.34-32 32-32h108.3C232.8 96.01 256 119.2 256 147.8c0 19.72-10.97 37.47-30.5 47.33L127.8 252.4C117.1 258.2 112 268.7 112 280v40c0 17.67 14.31 31.99 32 31.99s32-14.32 32-31.99V298.3L256 251.3c39.47-19.75 64-59.42 64-103.5C320 83.95 268.1 32.01 204.3 32.01zM144 400c-22.09 0-40 17.91-40 40s17.91 39.1 40 39.1s40-17.9 40-39.1S166.1 400 144 400z\"],\n    \"quote-left\": [448, 512, [8220, \"quote-left-alt\"], \"f10d\", \"M96 224C84.72 224 74.05 226.3 64 229.9V224c0-35.3 28.7-64 64-64c17.67 0 32-14.33 32-32S145.7 96 128 96C57.42 96 0 153.4 0 224v96c0 53.02 42.98 96 96 96s96-42.98 96-96S149 224 96 224zM352 224c-11.28 0-21.95 2.305-32 5.879V224c0-35.3 28.7-64 64-64c17.67 0 32-14.33 32-32s-14.33-32-32-32c-70.58 0-128 57.42-128 128v96c0 53.02 42.98 96 96 96s96-42.98 96-96S405 224 352 224z\"],\n    \"quote-right\": [448, 512, [8221, \"quote-right-alt\"], \"f10e\", \"M96 96C42.98 96 0 138.1 0 192s42.98 96 96 96c11.28 0 21.95-2.305 32-5.879V288c0 35.3-28.7 64-64 64c-17.67 0-32 14.33-32 32s14.33 32 32 32c70.58 0 128-57.42 128-128V192C192 138.1 149 96 96 96zM448 192c0-53.02-42.98-96-96-96s-96 42.98-96 96s42.98 96 96 96c11.28 0 21.95-2.305 32-5.879V288c0 35.3-28.7 64-64 64c-17.67 0-32 14.33-32 32s14.33 32 32 32c70.58 0 128-57.42 128-128V192z\"],\n    \"r\": [320, 512, [114], \"52\", \"M228.7 309.7C282 288.6 320 236.8 320 176c0-79.41-64.59-144-144-144H32c-17.67 0-32 14.33-32 32v384c0 17.67 14.33 32 32 32s32-14.33 32-32v-128h93.43l104.5 146.6c6.25 8.75 16.09 13.42 26.09 13.42c6.422 0 12.91-1.922 18.55-5.938c14.39-10.27 17.73-30.25 7.484-44.64L228.7 309.7zM64 96.01h112c44.11 0 80 35.89 80 80s-35.89 79.1-80 79.1H64V96.01z\"],\n    \"radiation\": [512, 512, [], \"f7b9\", \"M256 303.1c26.5 0 48-21.5 48-48S282.5 207.1 256 207.1S208 229.5 208 255.1S229.5 303.1 256 303.1zM213.6 188L142.7 74.71C132.5 58.41 109.9 54.31 95.25 66.75c-44.94 38.1-76.19 91.82-85.17 152.8C7.266 238.7 22.67 255.8 42.01 255.8h133.8C175.8 227.2 191 202.3 213.6 188zM416.8 66.75c-14.67-12.44-37.21-8.338-47.41 7.965L298.4 188c22.6 14.3 37.8 39.2 37.8 67.8h133.8c19.34 0 34.74-17.13 31.93-36.26C492.9 158.6 461.7 104.8 416.8 66.75zM298.4 323.5C286.1 331.2 271.6 335.9 256 335.9s-30.1-4.701-42.4-12.4L142.7 436.9c-10.14 16.21-4.16 38.2 13.32 45.95C186.6 496.4 220.4 504 256 504s69.42-7.611 100-21.18c17.48-7.752 23.46-29.74 13.32-45.95L298.4 323.5z\"],\n    \"rainbow\": [640, 512, [127752], \"f75b\", \"M312.3 32.09C137.6 36.22 0 183.3 0 358V464C0 472.8 7.164 480 16 480h32C56.84 480 64 472.8 64 464v-106.9c0-143.2 117.2-263.5 260.4-261.1C463.5 98.4 576 212.3 576 352v112c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V352C640 172.1 492.3 27.84 312.3 32.09zM313.5 224.2C244.8 227.6 192 286.9 192 355.7V464C192 472.8 199.2 480 208 480h32C248.8 480 256 472.8 256 464v-109.7c0-34.06 25.65-63.85 59.64-66.11C352.9 285.7 384 315.3 384 352v112c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V352C448 279.3 387 220.5 313.5 224.2zM313.2 128.1C191.4 131.7 96 234.9 96 356.8V464C96 472.8 103.2 480 112 480h32C152.8 480 160 472.8 160 464v-108.1c0-86.64 67.24-160.5 153.8-163.8C404.8 188.7 480 261.7 480 352v112c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V352C544 226.2 439.8 124.3 313.2 128.1z\"],\n    \"receipt\": [384, 512, [129534], \"f543\", \"M13.97 2.196C22.49-1.72 32.5-.3214 39.62 5.778L80 40.39L120.4 5.778C129.4-1.926 142.6-1.926 151.6 5.778L192 40.39L232.4 5.778C241.4-1.926 254.6-1.926 263.6 5.778L304 40.39L344.4 5.778C351.5-.3214 361.5-1.72 370 2.196C378.5 6.113 384 14.63 384 24V488C384 497.4 378.5 505.9 370 509.8C361.5 513.7 351.5 512.3 344.4 506.2L304 471.6L263.6 506.2C254.6 513.9 241.4 513.9 232.4 506.2L192 471.6L151.6 506.2C142.6 513.9 129.4 513.9 120.4 506.2L80 471.6L39.62 506.2C32.5 512.3 22.49 513.7 13.97 509.8C5.456 505.9 0 497.4 0 488V24C0 14.63 5.456 6.112 13.97 2.196V2.196zM96 144C87.16 144 80 151.2 80 160C80 168.8 87.16 176 96 176H288C296.8 176 304 168.8 304 160C304 151.2 296.8 144 288 144H96zM96 368H288C296.8 368 304 360.8 304 352C304 343.2 296.8 336 288 336H96C87.16 336 80 343.2 80 352C80 360.8 87.16 368 96 368zM96 240C87.16 240 80 247.2 80 256C80 264.8 87.16 272 96 272H288C296.8 272 304 264.8 304 256C304 247.2 296.8 240 288 240H96z\"],\n    \"record-vinyl\": [512, 512, [], \"f8d9\", \"M256 160C202.9 160 160 202.9 160 256s42.92 96 96 96c53.08 0 96-42.92 96-96S309.1 160 256 160zM256 288C238.3 288 224 273.7 224 256s14.33-32 32-32c17.67 0 32 14.33 32 32S273.7 288 256 288zM256 0c-141.4 0-256 114.6-256 256s114.6 256 256 256c141.4 0 256-114.6 256-256S397.4 0 256 0zM256 384c-70.75 0-128-57.25-128-128s57.25-128 128-128s128 57.25 128 128S326.8 384 256 384z\"],\n    \"rectangle-ad\": [576, 512, [\"ad\"], \"f641\", \"M208 237.7L229.2 280H186.8L208 237.7zM416 280C416 293.3 405.3 304 392 304C378.7 304 368 293.3 368 280C368 266.7 378.7 256 392 256C405.3 256 416 266.7 416 280zM512 32C547.3 32 576 60.65 576 96V416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H512zM229.5 173.3C225.4 165.1 217.1 160 208 160C198.9 160 190.6 165.1 186.5 173.3L114.5 317.3C108.6 329.1 113.4 343.5 125.3 349.5C137.1 355.4 151.5 350.6 157.5 338.7L162.8 328H253.2L258.5 338.7C264.5 350.6 278.9 355.4 290.7 349.5C302.6 343.5 307.4 329.1 301.5 317.3L229.5 173.3zM416 212.1C408.5 209.4 400.4 208 392 208C352.2 208 320 240.2 320 280C320 319.8 352.2 352 392 352C403.1 352 413.6 349.5 423 344.1C427.4 349.3 433.4 352 440 352C453.3 352 464 341.3 464 328V184C464 170.7 453.3 160 440 160C426.7 160 416 170.7 416 184V212.1z\"],\n    \"rectangle-list\": [576, 512, [\"list-alt\"], \"f022\", \"M0 96C0 60.65 28.65 32 64 32H512C547.3 32 576 60.65 576 96V416C576 451.3 547.3 480 512 480H64C28.65 480 0 451.3 0 416V96zM160 256C160 238.3 145.7 224 128 224C110.3 224 96 238.3 96 256C96 273.7 110.3 288 128 288C145.7 288 160 273.7 160 256zM160 160C160 142.3 145.7 128 128 128C110.3 128 96 142.3 96 160C96 177.7 110.3 192 128 192C145.7 192 160 177.7 160 160zM160 352C160 334.3 145.7 320 128 320C110.3 320 96 334.3 96 352C96 369.7 110.3 384 128 384C145.7 384 160 369.7 160 352zM224 136C210.7 136 200 146.7 200 160C200 173.3 210.7 184 224 184H448C461.3 184 472 173.3 472 160C472 146.7 461.3 136 448 136H224zM224 232C210.7 232 200 242.7 200 256C200 269.3 210.7 280 224 280H448C461.3 280 472 269.3 472 256C472 242.7 461.3 232 448 232H224zM224 328C210.7 328 200 338.7 200 352C200 365.3 210.7 376 224 376H448C461.3 376 472 365.3 472 352C472 338.7 461.3 328 448 328H224z\"],\n    \"rectangle-xmark\": [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM175 208.1L222.1 255.1L175 303C165.7 312.4 165.7 327.6 175 336.1C184.4 346.3 199.6 346.3 208.1 336.1L255.1 289.9L303 336.1C312.4 346.3 327.6 346.3 336.1 336.1C346.3 327.6 346.3 312.4 336.1 303L289.9 255.1L336.1 208.1C346.3 199.6 346.3 184.4 336.1 175C327.6 165.7 312.4 165.7 303 175L255.1 222.1L208.1 175C199.6 165.7 184.4 165.7 175 175C165.7 184.4 165.7 199.6 175 208.1V208.1z\"],\n    \"recycle\": [512, 512, [9850, 9851, 9842], \"f1b8\", \"M180.2 243.1C185 263.9 162.2 280.2 144.1 268.8L119.8 253.6l-50.9 81.43c-13.33 21.32 2.004 48.98 27.15 48.98h32.02c17.64 0 31.98 14.32 31.98 31.96c0 17.64-14.34 32.05-31.98 32.05H96.15c-75.36 0-121.3-82.84-81.47-146.8L65.51 219.8L41.15 204.5C23.04 193.1 27.66 165.5 48.48 160.7l91.43-21.15C148.5 137.7 157.2 142.9 159.2 151.6L180.2 243.1zM283.1 78.96l41.25 66.14l-24.25 15.08c-18.16 11.31-13.57 38.94 7.278 43.77l91.4 21.15c8.622 1.995 17.23-3.387 19.21-12.01l21.04-91.43c4.789-20.81-17.95-37.05-36.07-25.76l-24.36 15.2L337.4 45.14c-37.58-60.14-125.2-60.18-162.8-.0617L167.2 56.9C157.9 71.75 162.5 91.58 177.3 100.9c14.92 9.359 34.77 4.886 44.11-10.04l7.442-11.89C241.6 58.58 270.9 59.33 283.1 78.96zM497.3 301.3l-16.99-27.26c-9.336-14.98-29.06-19.56-44.04-10.21c-14.94 9.318-19.52 29.15-10.18 44.08l16.99 27.15c13.35 21.32-1.984 49-27.14 49h-95.99l.0234-28.74c0-21.38-25.85-32.09-40.97-16.97l-66.41 66.43c-6.222 6.223-6.222 16.41 .0044 22.63l66.42 66.34c15.12 15.1 40.95 4.386 40.95-16.98l-.0234-28.68h95.86C491.2 448.1 537.2 365.2 497.3 301.3z\"],\n    \"registered\": [512, 512, [174], \"f25d\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM349.8 349.8c5.594 12.03 .4375 26.31-11.56 31.94c-3.312 1.531-6.75 2.25-10.19 2.25c-9 0-17.66-5.125-21.75-13.81l-38.46-82.19H208v72c0 13.25-10.75 24-24 24s-24-10.75-24-24V152c0-13.25 10.75-24 24-24l88 .0044c44.13 0 80 35.88 80 80c0 28.32-14.87 53.09-37.12 67.31L349.8 349.8zM272 176h-64v64h64c17.66 0 32-14.34 32-32S289.7 176 272 176z\"],\n    \"repeat\": [512, 512, [128257], \"f363\", \"M480 256c-17.67 0-32 14.31-32 32c0 52.94-43.06 96-96 96H192L192 344c0-9.469-5.578-18.06-14.23-21.94C169.1 318.3 159 319.8 151.9 326.2l-80 72C66.89 402.7 64 409.2 64 416s2.891 13.28 7.938 17.84l80 72C156.4 509.9 162.2 512 168 512c3.312 0 6.615-.6875 9.756-2.062C186.4 506.1 192 497.5 192 488L192 448h160c88.22 0 160-71.78 160-160C512 270.3 497.7 256 480 256zM160 128h159.1L320 168c0 9.469 5.578 18.06 14.23 21.94C337.4 191.3 340.7 192 343.1 192c5.812 0 11.57-2.125 16.07-6.156l80-72C445.1 109.3 448 102.8 448 95.1s-2.891-13.28-7.938-17.84l-80-72c-7.047-6.312-17.19-7.875-25.83-4.094C325.6 5.938 319.1 14.53 319.1 24L320 64H160C71.78 64 0 135.8 0 224c0 17.69 14.33 32 32 32s32-14.31 32-32C64 171.1 107.1 128 160 128z\"],\n    \"reply\": [512, 512, [61714, \"mail-reply\"], \"f3e5\", \"M8.31 189.9l176-151.1c15.41-13.3 39.69-2.509 39.69 18.16v80.05C384.6 137.9 512 170.1 512 322.3c0 61.44-39.59 122.3-83.34 154.1c-13.66 9.938-33.09-2.531-28.06-18.62c45.34-145-21.5-183.5-176.6-185.8v87.92c0 20.7-24.31 31.45-39.69 18.16l-176-151.1C-2.753 216.6-2.784 199.4 8.31 189.9z\"],\n    \"reply-all\": [576, 512, [\"mail-reply-all\"], \"f122\", \"M136.3 226.2l176 151.1c15.38 13.3 39.69 2.545 39.69-18.16V275.1c108.5 12.58 151.1 58.79 112.6 181.9c-5.031 16.09 14.41 28.56 28.06 18.62c43.75-31.81 83.34-92.69 83.34-154.1c0-131.3-94.86-173.2-224-183.5V56.02c0-20.67-24.28-31.46-39.69-18.16L136.3 189.9C125.2 199.4 125.2 216.6 136.3 226.2zM8.31 226.2l176 151.1c15.38 13.3 39.69 2.545 39.69-18.16v-15.83L66.33 208l157.7-136.2V56.02c0-20.67-24.28-31.46-39.69-18.16l-176 151.1C-2.77 199.4-2.77 216.6 8.31 226.2z\"],\n    \"republican\": [640, 512, [], \"f75e\", \"M544 191.1c0-88.37-71.62-159.1-159.1-159.1L159.1 32C71.62 32 0 103.6 0 191.1l.025 63.98h543.1V191.1zM176.3 170.4l-19.75 19.37l4.75 27.25c.7498 4.875-4.375 8.625-8.75 6.25l-24.5-12.87L103.5 223.2C99.27 225.6 94.02 221.9 94.77 216.1l4.75-27.25l-19.75-19.37C76.15 166.9 78.15 160.9 83.02 160.2L110.4 156.2l12.25-24.87c2.125-4.5 8.625-4.375 10.62 0L145.5 156.2L172.9 160.2C177.9 160.9 179.8 166.9 176.3 170.4zM320.3 170.4l-19.75 19.37l4.75 27.25c.7498 4.875-4.375 8.625-8.75 6.25L272 210.4l-24.5 12.87C243.3 225.6 238 221.9 238.8 216.1L243.5 189.7l-19.75-19.37c-3.625-3.5-1.625-9.498 3.25-10.12L254.4 156.2l12.25-24.87c2.125-4.5 8.625-4.375 10.62 0L289.5 156.2l27.37 4C321.9 160.9 323.8 166.9 320.3 170.4zM464.3 170.4l-19.75 19.37l4.75 27.25c.7498 4.875-4.375 8.625-8.75 6.25l-24.5-12.87l-24.5 12.87c-4.25 2.375-9.5-1.375-8.75-6.25l4.75-27.25l-19.75-19.37c-3.625-3.5-1.625-9.498 3.25-10.12l27.37-4l12.25-24.87c2.125-4.5 8.625-4.375 10.62 0l12.25 24.87l27.37 4C465.9 160.9 467.8 166.9 464.3 170.4zM624 319.1L592 319.1c-8.799 0-15.1 7.199-15.1 15.1v63.99c0 8.748-7.25 15.1-15.1 15.1c-8.75 0-15.1-7.25-15.1-15.1l-.0313-111.1L.025 287.1v159.1c0 17.6 14.4 31.1 31.1 31.1L95.98 479.1c17.6 0 32.04-14.4 32.04-32v-63.98l191.1-.0169v63.99c0 17.6 14.36 32 31.96 32l64.04 .013c17.6 0 31.1-14.4 31.1-31.1l-.0417-96.01l32.04 .0006v43.25c0 41.79 29.91 80.03 71.48 84.35C599.3 484.5 640 446.9 640 399.1v-63.98C640 327.2 632.8 319.1 624 319.1z\"],\n    \"restroom\": [640, 512, [], \"f7bd\", \"M319.1 0C306.8 0 296 10.8 296 24v464c0 13.2 10.8 24 23.1 24s24-10.8 24-24V24C344 10.8 333.2 0 319.1 0zM213.7 171.8C204.9 145.6 180.5 128 152.9 128H103.1C75.47 128 51.06 145.6 42.37 171.8L1.653 293.9c-5.594 16.77 3.469 34.89 20.22 40.48c12.68 4.211 25.93 .1426 34.13-9.18V480c0 17.67 14.33 32 32 32s31.1-14.33 31.1-32l-.0003-144h16l.0003 144c0 17.67 14.33 32 32 32s31.1-14.33 31.1-32l-.0003-155.2c6.041 6.971 14.7 11.25 24 11.25c3.344 0 6.75-.5313 10.13-1.656c16.75-5.594 25.81-23.72 20.22-40.48L213.7 171.8zM128 96c26.5 0 47.1-21.5 47.1-48S154.5 0 128 0S80 21.5 80 48S101.5 96 128 96zM511.1 96c26.5 0 48-21.5 48-48S538.5 0 511.1 0s-47.1 21.5-47.1 48S485.5 96 511.1 96zM638.3 293.9l-40.69-122.1C588.9 145.6 564.5 128 536.9 128h-49.88c-27.59 0-52 17.59-60.69 43.75l-40.72 122.1c-5.594 16.77 3.469 34.89 20.22 40.48c3.422 1.137 6.856 1.273 10.25 1.264L399.1 384h40v96c0 17.67 14.32 32 31.1 32s32-14.33 32-32v-96h16v96c0 17.67 14.32 32 31.1 32s32-14.33 32-32v-96h39.1l-15.99-47.98c3.342 0 6.747-.5313 10.12-1.656C634.9 328.8 643.9 310.6 638.3 293.9z\"],\n    \"retweet\": [640, 512, [], \"f079\", \"M614.2 334.8C610.5 325.8 601.7 319.1 592 319.1H544V176C544 131.9 508.1 96 464 96h-128c-17.67 0-32 14.31-32 32s14.33 32 32 32h128C472.8 160 480 167.2 480 176v143.1h-48c-9.703 0-18.45 5.844-22.17 14.82s-1.656 19.29 5.203 26.16l80 80.02C499.7 445.7 505.9 448 512 448s12.28-2.344 16.97-7.031l80-80.02C615.8 354.1 617.9 343.8 614.2 334.8zM304 352h-128C167.2 352 160 344.8 160 336V192h48c9.703 0 18.45-5.844 22.17-14.82s1.656-19.29-5.203-26.16l-80-80.02C140.3 66.34 134.1 64 128 64S115.7 66.34 111 71.03l-80 80.02C24.17 157.9 22.11 168.2 25.83 177.2S38.3 192 48 192H96V336C96 380.1 131.9 416 176 416h128c17.67 0 32-14.31 32-32S321.7 352 304 352z\"],\n    \"ribbon\": [448, 512, [127895], \"f4d6\", \"M6.05 444.3c-9.626 10.87-7.501 27.62 4.5 35.75l68.76 27.87c9.876 6.75 23.38 4.1 31.38-3.75l91.76-101.9L123.2 314.3L6.05 444.3zM441.8 444.3c0 0-292-324.5-295.4-329.1c15.38-8.5 40.25-17.1 77.51-17.1s62.13 9.5 77.51 17.1c-3.25 5.5-56.01 64.5-56.01 64.5l79.13 87.75l34.13-37.1c28.75-31.87 33.38-78.62 11.5-115.5L326.5 39.52c-4.25-7.25-9.876-13.25-16.75-17.1c-40.75-27.62-127.5-29.75-171.5 0C131.3 26.27 125.7 32.27 121.4 39.52L77.81 112.8C76.31 115.3 40.68 174.9 89.31 228.8l248.1 275.2c8.001 8.875 21.38 10.5 31.25 3.75l68.88-27.87C449.5 471.9 451.6 455.1 441.8 444.3z\"],\n    \"right-from-bracket\": [512, 512, [\"sign-out-alt\"], \"f2f5\", \"M96 480h64C177.7 480 192 465.7 192 448S177.7 416 160 416H96c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h64C177.7 96 192 81.67 192 64S177.7 32 160 32H96C42.98 32 0 74.98 0 128v256C0 437 42.98 480 96 480zM504.8 238.5l-144.1-136c-6.975-6.578-17.2-8.375-26-4.594c-8.803 3.797-14.51 12.47-14.51 22.05l-.0918 72l-128-.001c-17.69 0-32.02 14.33-32.02 32v64c0 17.67 14.34 32 32.02 32l128 .001l.0918 71.1c0 9.578 5.707 18.25 14.51 22.05c8.803 3.781 19.03 1.984 26-4.594l144.1-136C514.4 264.4 514.4 247.6 504.8 238.5z\"],\n    \"right-left\": [512, 512, [\"exchange-alt\"], \"f362\", \"M32 160h319.9l.0791 72c0 9.547 5.652 18.19 14.41 22c8.754 3.812 18.93 2.078 25.93-4.406l112-104c10.24-9.5 10.24-25.69 0-35.19l-112-104c-6.992-6.484-17.17-8.217-25.93-4.408c-8.758 3.816-14.41 12.46-14.41 22L351.9 96H32C14.31 96 0 110.3 0 127.1S14.31 160 32 160zM480 352H160.1L160 279.1c0-9.547-5.652-18.19-14.41-22C136.9 254.2 126.7 255.9 119.7 262.4l-112 104c-10.24 9.5-10.24 25.69 0 35.19l112 104c6.992 6.484 17.17 8.219 25.93 4.406C154.4 506.2 160 497.5 160 488L160.1 416H480c17.69 0 32-14.31 32-32S497.7 352 480 352z\"],\n    \"right-long\": [512, 512, [\"long-arrow-alt-right\"], \"f30b\", \"M504.3 273.6l-112.1 104c-6.992 6.484-17.18 8.218-25.94 4.406c-8.758-3.812-14.42-12.45-14.42-21.1L351.9 288H32C14.33 288 .0002 273.7 .0002 255.1S14.33 224 32 224h319.9l0-72c0-9.547 5.66-18.19 14.42-22c8.754-3.809 18.95-2.075 25.94 4.41l112.1 104C514.6 247.9 514.6 264.1 504.3 273.6z\"],\n    \"right-to-bracket\": [512, 512, [\"sign-in-alt\"], \"f2f6\", \"M344.7 238.5l-144.1-136C193.7 95.97 183.4 94.17 174.6 97.95C165.8 101.8 160.1 110.4 160.1 120V192H32.02C14.33 192 0 206.3 0 224v64c0 17.68 14.33 32 32.02 32h128.1v72c0 9.578 5.707 18.25 14.51 22.05c8.803 3.781 19.03 1.984 26-4.594l144.1-136C354.3 264.4 354.3 247.6 344.7 238.5zM416 32h-64c-17.67 0-32 14.33-32 32s14.33 32 32 32h64c17.67 0 32 14.33 32 32v256c0 17.67-14.33 32-32 32h-64c-17.67 0-32 14.33-32 32s14.33 32 32 32h64c53.02 0 96-42.98 96-96V128C512 74.98 469 32 416 32z\"],\n    \"ring\": [512, 512, [], \"f70b\", \"M256 64C109.1 64 0 125.9 0 208v98.13C0 384.5 114.6 448 256 448s256-63.5 256-141.9V208C512 125.9 401.1 64 256 64zM256 288C203.1 288 155.1 279.1 120.4 264.6C155 249.9 201.6 240 256 240s101 9.875 135.6 24.62C356.9 279.1 308.9 288 256 288zM437.1 234.4C392.1 208.3 328.3 192 256 192S119.9 208.3 74.88 234.4C68 226.1 64 217.3 64 208C64 163.9 149.1 128 256 128c105.1 0 192 35.88 192 80C448 217.3 444 226.1 437.1 234.4z\"],\n    \"road\": [576, 512, [128739], \"f018\", \"M256 96C256 113.7 270.3 128 288 128C305.7 128 320 113.7 320 96V32H394.8C421.9 32 446 49.08 455.1 74.63L572.9 407.2C574.9 413 576 419.2 576 425.4C576 455.5 551.5 480 521.4 480H320V416C320 398.3 305.7 384 288 384C270.3 384 256 398.3 256 416V480H54.61C24.45 480 0 455.5 0 425.4C0 419.2 1.06 413 3.133 407.2L120.9 74.63C129.1 49.08 154.1 32 181.2 32H255.1L256 96zM320 224C320 206.3 305.7 192 288 192C270.3 192 256 206.3 256 224V288C256 305.7 270.3 320 288 320C305.7 320 320 305.7 320 288V224z\"],\n    \"robot\": [640, 512, [129302], \"f544\", \"M9.375 233.4C3.375 239.4 0 247.5 0 256v128c0 8.5 3.375 16.62 9.375 22.62S23.5 416 32 416h32V224H32C23.5 224 15.38 227.4 9.375 233.4zM464 96H352V32c0-17.62-14.38-32-32-32S288 14.38 288 32v64H176C131.8 96 96 131.8 96 176V448c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V176C544 131.8 508.3 96 464 96zM256 416H192v-32h64V416zM224 296C201.9 296 184 278.1 184 256S201.9 216 224 216S264 233.9 264 256S246.1 296 224 296zM352 416H288v-32h64V416zM448 416h-64v-32h64V416zM416 296c-22.12 0-40-17.88-40-40S393.9 216 416 216S456 233.9 456 256S438.1 296 416 296zM630.6 233.4C624.6 227.4 616.5 224 608 224h-32v192h32c8.5 0 16.62-3.375 22.62-9.375S640 392.5 640 384V256C640 247.5 636.6 239.4 630.6 233.4z\"],\n    \"rocket\": [512, 512, [], \"f135\", \"M156.6 384.9L125.7 353.1C117.2 345.5 114.2 333.1 117.1 321.8C120.1 312.9 124.1 301.3 129.8 288H24C15.38 288 7.414 283.4 3.146 275.9C-1.123 268.4-1.042 259.2 3.357 251.8L55.83 163.3C68.79 141.4 92.33 127.1 117.8 127.1H200C202.4 124 204.8 120.3 207.2 116.7C289.1-4.07 411.1-8.142 483.9 5.275C495.6 7.414 504.6 16.43 506.7 28.06C520.1 100.9 516.1 222.9 395.3 304.8C391.8 307.2 387.1 309.6 384 311.1V394.2C384 419.7 370.6 443.2 348.7 456.2L260.2 508.6C252.8 513 243.6 513.1 236.1 508.9C228.6 504.6 224 496.6 224 488V380.8C209.9 385.6 197.6 389.7 188.3 392.7C177.1 396.3 164.9 393.2 156.6 384.9V384.9zM384 167.1C406.1 167.1 424 150.1 424 127.1C424 105.9 406.1 87.1 384 87.1C361.9 87.1 344 105.9 344 127.1C344 150.1 361.9 167.1 384 167.1z\"],\n    \"rotate\": [512, 512, [128260, \"sync-alt\"], \"f2f1\", \"M449.9 39.96l-48.5 48.53C362.5 53.19 311.4 32 256 32C161.5 32 78.59 92.34 49.58 182.2c-5.438 16.81 3.797 34.88 20.61 40.28c16.97 5.5 34.86-3.812 40.3-20.59C130.9 138.5 189.4 96 256 96c37.96 0 73 14.18 100.2 37.8L311.1 178C295.1 194.8 306.8 223.4 330.4 224h146.9C487.7 223.7 496 215.3 496 204.9V59.04C496 34.99 466.9 22.95 449.9 39.96zM441.8 289.6c-16.94-5.438-34.88 3.812-40.3 20.59C381.1 373.5 322.6 416 256 416c-37.96 0-73-14.18-100.2-37.8L200 334C216.9 317.2 205.2 288.6 181.6 288H34.66C24.32 288.3 16 296.7 16 307.1v145.9c0 24.04 29.07 36.08 46.07 19.07l48.5-48.53C149.5 458.8 200.6 480 255.1 480c94.45 0 177.4-60.34 206.4-150.2C467.9 313 458.6 294.1 441.8 289.6z\"],\n    \"rotate-left\": [512, 512, [\"rotate-back\", \"rotate-backward\", \"undo-alt\"], \"f2ea\", \"M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z\"],\n    \"rotate-right\": [512, 512, [\"redo-alt\", \"rotate-forward\"], \"f2f9\", \"M468.9 32.11c13.87 0 27.18 10.77 27.18 27.04v145.9c0 10.59-8.584 19.17-19.17 19.17h-145.7c-16.28 0-27.06-13.32-27.06-27.2c0-6.634 2.461-13.4 7.96-18.9l45.12-45.14c-28.22-23.14-63.85-36.64-101.3-36.64c-88.09 0-159.8 71.69-159.8 159.8S167.8 415.9 255.9 415.9c73.14 0 89.44-38.31 115.1-38.31c18.48 0 31.97 15.04 31.97 31.96c0 35.04-81.59 70.41-147 70.41c-123.4 0-223.9-100.5-223.9-223.9S132.6 32.44 256 32.44c54.6 0 106.2 20.39 146.4 55.26l47.6-47.63C455.5 34.57 462.3 32.11 468.9 32.11z\"],\n    \"route\": [512, 512, [], \"f4d7\", \"M320 256C302.3 256 288 270.3 288 288C288 305.7 302.3 320 320 320H416C469 320 512 362.1 512 416C512 469 469 512 416 512H139.6C148.3 502.1 158.9 489.4 169.6 475.2C175.9 466.8 182.4 457.6 188.6 448H416C433.7 448 448 433.7 448 416C448 398.3 433.7 384 416 384H320C266.1 384 223.1 341 223.1 288C223.1 234.1 266.1 192 320 192H362.1C340.2 161.5 320 125.4 320 96C320 42.98 362.1 0 416 0C469 0 512 42.98 512 96C512 160 416 256 416 256H320zM416 128C433.7 128 448 113.7 448 96C448 78.33 433.7 64 416 64C398.3 64 384 78.33 384 96C384 113.7 398.3 128 416 128zM118.3 487.8C118.1 488 117.9 488.2 117.7 488.4C113.4 493.4 109.5 497.7 106.3 501.2C105.9 501.6 105.5 502 105.2 502.4C99.5 508.5 96 512 96 512C96 512 0 416 0 352C0 298.1 42.98 255.1 96 255.1C149 255.1 192 298.1 192 352C192 381.4 171.8 417.5 149.9 448C138.1 463.2 127.7 476.9 118.3 487.8L118.3 487.8zM95.1 384C113.7 384 127.1 369.7 127.1 352C127.1 334.3 113.7 320 95.1 320C78.33 320 63.1 334.3 63.1 352C63.1 369.7 78.33 384 95.1 384z\"],\n    \"rss\": [448, 512, [\"feed\"], \"f09e\", \"M25.57 176.1C12.41 175.4 .9117 185.2 .0523 198.4s9.173 24.65 22.39 25.5c120.1 7.875 225.7 112.7 233.6 233.6C256.9 470.3 267.4 480 279.1 480c.5313 0 1.062-.0313 1.594-.0625c13.22-.8438 23.25-12.28 22.39-25.5C294.6 310.3 169.7 185.4 25.57 176.1zM32 32C14.33 32 0 46.31 0 64s14.33 32 32 32c194.1 0 352 157.9 352 352c0 17.69 14.33 32 32 32s32-14.31 32-32C448 218.6 261.4 32 32 32zM63.1 351.9C28.63 351.9 0 380.6 0 416s28.63 64 63.1 64s64.08-28.62 64.08-64S99.37 351.9 63.1 351.9z\"],\n    \"ruble-sign\": [384, 512, [8381, \"rouble\", \"rub\", \"ruble\"], \"f158\", \"M240 32C319.5 32 384 96.47 384 176C384 255.5 319.5 320 240 320H128V352H288C305.7 352 320 366.3 320 384C320 401.7 305.7 416 288 416H128V448C128 465.7 113.7 480 96 480C78.33 480 64 465.7 64 448V416H32C14.33 416 0 401.7 0 384C0 366.3 14.33 352 32 352H64V320H32C14.33 320 0 305.7 0 288C0 270.3 14.33 256 32 256H64V64C64 46.33 78.33 32 96 32H240zM320 176C320 131.8 284.2 96 240 96H128V256H240C284.2 256 320 220.2 320 176z\"],\n    \"ruler\": [512, 512, [128207], \"f545\", \"M177.9 494.1C159.2 512.8 128.8 512.8 110.1 494.1L17.94 401.9C-.8054 383.2-.8054 352.8 17.94 334.1L68.69 283.3L116.7 331.3C122.9 337.6 133.1 337.6 139.3 331.3C145.6 325.1 145.6 314.9 139.3 308.7L91.31 260.7L132.7 219.3L180.7 267.3C186.9 273.6 197.1 273.6 203.3 267.3C209.6 261.1 209.6 250.9 203.3 244.7L155.3 196.7L196.7 155.3L244.7 203.3C250.9 209.6 261.1 209.6 267.3 203.3C273.6 197.1 273.6 186.9 267.3 180.7L219.3 132.7L260.7 91.31L308.7 139.3C314.9 145.6 325.1 145.6 331.3 139.3C337.6 133.1 337.6 122.9 331.3 116.7L283.3 68.69L334.1 17.94C352.8-.8055 383.2-.8055 401.9 17.94L494.1 110.1C512.8 128.8 512.8 159.2 494.1 177.9L177.9 494.1z\"],\n    \"ruler-combined\": [512, 512, [], \"f546\", \"M0 464V48C0 21.49 21.49 0 48 0H144C170.5 0 192 21.49 192 48V96H112C103.2 96 96 103.2 96 112C96 120.8 103.2 128 112 128H192V192H112C103.2 192 96 199.2 96 208C96 216.8 103.2 224 112 224H192V288H112C103.2 288 96 295.2 96 304C96 312.8 103.2 320 112 320H192V400C192 408.8 199.2 416 208 416C216.8 416 224 408.8 224 400V320H288V400C288 408.8 295.2 416 304 416C312.8 416 320 408.8 320 400V320H384V400C384 408.8 391.2 416 400 416C408.8 416 416 408.8 416 400V320H464C490.5 320 512 341.5 512 368V464C512 490.5 490.5 512 464 512H48C23.15 512 2.706 493.1 .2477 468.9C.0838 467.3 0 465.7 0 464z\"],\n    \"ruler-horizontal\": [640, 512, [], \"f547\", \"M0 176C0 149.5 21.49 128 48 128H112V208C112 216.8 119.2 224 128 224C136.8 224 144 216.8 144 208V128H208V208C208 216.8 215.2 224 224 224C232.8 224 240 216.8 240 208V128H304V208C304 216.8 311.2 224 320 224C328.8 224 336 216.8 336 208V128H400V208C400 216.8 407.2 224 416 224C424.8 224 432 216.8 432 208V128H496V208C496 216.8 503.2 224 512 224C520.8 224 528 216.8 528 208V128H592C618.5 128 640 149.5 640 176V336C640 362.5 618.5 384 592 384H48C21.49 384 0 362.5 0 336V176z\"],\n    \"ruler-vertical\": [256, 512, [], \"f548\", \"M0 48C0 21.49 21.49 0 48 0H208C234.5 0 256 21.49 256 48V96H176C167.2 96 160 103.2 160 112C160 120.8 167.2 128 176 128H256V192H176C167.2 192 160 199.2 160 208C160 216.8 167.2 224 176 224H256V288H176C167.2 288 160 295.2 160 304C160 312.8 167.2 320 176 320H256V384H176C167.2 384 160 391.2 160 400C160 408.8 167.2 416 176 416H256V464C256 490.5 234.5 512 208 512H48C21.49 512 0 490.5 0 464V48z\"],\n    \"rupee-sign\": [448, 512, [8360, \"rupee\"], \"f156\", \"M.0003 64C.0003 46.33 14.33 32 32 32H112C191.5 32 256 96.47 256 176C256 234.8 220.8 285.3 170.3 307.7L221.7 436.1C228.3 452.5 220.3 471.1 203.9 477.7C187.5 484.3 168.9 476.3 162.3 459.9L106.3 320H64V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448L.0003 64zM64 256H112C156.2 256 192 220.2 192 176C192 131.8 156.2 96 112 96H64V256zM320.8 282.2C321.3 283.3 322.2 284.8 325 287.1C332.2 292.8 343.7 297.1 362.9 303.8L364.2 304.3C380.3 309.1 402.9 317.9 419.1 332.4C429.5 340.5 437.9 351 443 364.7C448.1 378.4 449.1 393.2 446.8 408.7C442.7 436.8 426.4 457.1 403.1 469.6C381 480.7 354.9 482.1 329.9 477.6L329.7 477.5C320.4 475.8 309.2 471.8 300.5 468.6C294.4 466.3 287.9 463.7 282.7 461.6C280.2 460.6 278.1 459.8 276.4 459.1C259.9 452.7 251.8 434.2 258.2 417.7C264.6 401.2 283.1 393.1 299.6 399.5C302.2 400.5 304.8 401.5 307.5 402.6C312.3 404.5 317.4 406.5 322.9 408.6C331.7 411.9 338.2 413.1 341.6 414.6C357.2 417.5 368.3 415.5 374.5 412.4C379.4 409.9 382.5 406.3 383.5 399.3C384.5 392.4 383.7 388.8 383.1 387.1C382.4 385.4 381.3 383.5 378.6 381.2C371.7 375.4 360.4 370.8 341.6 364.2L338.6 363.1C323.1 357.7 301.6 350.2 285.3 337.2C275.8 329.7 266.1 319.7 261.5 306.3C256.1 292.8 254.9 278.2 257.2 263.1C265.6 205.1 324.2 185.1 374.1 194.2C380.1 195.5 401.4 200 409.5 202.6C426.4 207.8 435.8 225.7 430.6 242.6C425.3 259.5 407.4 268.9 390.5 263.7C385.8 262.2 368.2 258.2 362.6 257.2C347.1 254.5 336.8 256.8 329.1 260.4C323.7 263.7 321.1 267.1 320.5 272.4C319.6 278.4 320.4 281.2 320.8 282.2H320.8z\"],\n    \"rupiah-sign\": [512, 512, [], \"e23d\", \"M.0003 64C.0003 46.33 14.33 32 32 32H112C191.5 32 256 96.47 256 176C256 234.8 220.8 285.3 170.3 307.7L221.7 436.1C228.3 452.5 220.3 471.1 203.9 477.7C187.5 484.3 168.9 476.3 162.3 459.9L106.3 320H64V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448L.0003 64zM64 256H112C156.2 256 192 220.2 192 176C192 131.8 156.2 96 112 96H64V256zM400 160C461.9 160 512 210.1 512 272C512 333.9 461.9 384 400 384H352V480C352 497.7 337.7 512 320 512C302.3 512 288 497.7 288 480V192C288 174.3 302.3 160 320 160H400zM448 272C448 245.5 426.5 224 400 224H352V320H400C426.5 320 448 298.5 448 272z\"],\n    \"s\": [384, 512, [115], \"53\", \"M349.9 379.1c-6.281 36.63-25.89 65.02-56.69 82.11c-24.91 13.83-54.08 18.98-83.73 18.98c-61.86 0-125.8-22.42-157.5-35.38c-16.38-6.672-24.22-25.34-17.55-41.7c6.641-16.36 25.27-24.28 41.7-17.55c77.56 31.64 150.6 39.39 186.1 19.69c13.83-7.672 21.67-19.42 24.69-36.98c7.25-42.31-18.2-56.75-103.7-81.38C112.6 266.6 15.98 238.7 34.11 133.2c5.484-32 23.64-59.36 51.14-77.02c45.59-29.33 115-31.87 206.4-7.688c17.09 4.531 27.27 22.05 22.75 39.13s-22.06 27.23-39.13 22.75C184 86.17 140.4 96.81 119.8 110c-12.55 8.062-20.17 19.5-22.66 34c-7.266 42.31 18.19 56.75 103.7 81.38C271.4 245.7 368 273.5 349.9 379.1z\"],\n    \"sailboat\": [576, 512, [], \"e445\", \"M256 16C256 9.018 260.5 2.841 267.2 .7414C273.9-1.358 281.1 1.105 285.1 6.826L509.1 326.8C512.5 331.7 512.9 338.1 510.2 343.4C507.4 348.7 501.1 352 496 352H272C263.2 352 256 344.8 256 336V16zM212.1 96.54C219.1 98.4 224 104.7 224 112V336C224 344.8 216.8 352 208 352H80C74.3 352 69.02 348.1 66.16 344C63.3 339.1 63.28 333 66.11 328.1L194.1 104.1C197.7 97.76 205.1 94.68 212.1 96.54V96.54zM5.718 404.3C2.848 394.1 10.52 384 21.12 384H554.9C565.5 384 573.2 394.1 570.3 404.3L566.3 418.7C550.7 473.9 500.4 512 443 512H132.1C75.62 512 25.27 473.9 9.747 418.7L5.718 404.3z\"],\n    \"satellite\": [512, 512, [128752], \"f7bf\", \"M502.8 264.1l-80.37-80.37l47.87-47.88c13-13.12 13-34.37 0-47.5l-47.5-47.5c-13.12-13.12-34.38-13.12-47.5 0l-47.88 47.88L247.1 9.25C241 3.375 232.9 0 224.5 0c-8.5 0-16.62 3.375-22.5 9.25l-96.75 96.75c-12.38 12.5-12.38 32.62 0 45.12L185.5 231.5L175.8 241.4c-54-24.5-116.3-22.5-168.5 5.375c-8.498 4.625-9.623 16.38-2.873 23.25l107.6 107.5l-17.88 17.75c-2.625-.75-5-1.625-7.75-1.625c-17.75 0-32 14.38-32 32c0 17.75 14.25 32 32 32c17.62 0 32-14.25 32-32c0-2.75-.875-5.125-1.625-7.75l17.75-17.88l107.6 107.6c6.75 6.75 18.62 5.625 23.12-2.875c27.88-52.25 29.88-114.5 5.375-168.5l10-9.873l80.25 80.36c12.5 12.38 32.62 12.38 44.1 0l96.75-96.75C508.6 304.1 512 295.1 512 287.5C512 279.1 508.6 270.1 502.8 264.1zM219.5 197.4L150.6 128.5l73.87-73.75l68.86 68.88L219.5 197.4zM383.5 361.4L314.6 292.5l73.75-73.88l68.88 68.87L383.5 361.4z\"],\n    \"satellite-dish\": [512, 512, [128225], \"f7c0\", \"M216 104C202.8 104 192 114.8 192 128s10.75 24 24 24c79.41 0 144 64.59 144 144C360 309.3 370.8 320 384 320s24-10.75 24-24C408 190.1 321.9 104 216 104zM224 0C206.3 0 192 14.31 192 32s14.33 32 32 32c123.5 0 224 100.5 224 224c0 17.69 14.33 32 32 32s32-14.31 32-32C512 129.2 382.8 0 224 0zM188.9 346l27.37-27.37c2.625 .625 5.059 1.506 7.809 1.506c17.75 0 31.99-14.26 31.99-32c0-17.62-14.24-32.01-31.99-32.01c-17.62 0-31.99 14.38-31.99 32.01c0 2.875 .8099 5.25 1.56 7.875L166.2 323.4L49.37 206.5c-7.25-7.25-20.12-6-24.1 3c-41.75 77.88-29.88 176.7 35.75 242.4c65.62 65.62 164.6 77.5 242.4 35.75c9.125-5 10.38-17.75 3-25L188.9 346z\"],\n    \"scale-balanced\": [640, 512, [9878, \"balance-scale\"], \"f24e\", \"M554.9 154.5c-17.62-35.25-68.12-35.38-85.87 0c-87 174.3-84.1 165.9-84.1 181.5c0 44.13 57.25 80 128 80s127.1-35.88 127.1-80C639.1 319.9 641.4 327.3 554.9 154.5zM439.1 320l71.96-144l72.17 144H439.1zM256 336c0-16.12 1.375-8.75-85.12-181.5c-17.62-35.25-68.12-35.38-85.87 0c-87 174.3-84.1 165.9-84.1 181.5c0 44.13 57.25 80 127.1 80S256 380.1 256 336zM127.9 176L200.1 320H55.96L127.9 176zM495.1 448h-143.1V153.3C375.5 143 393.1 121.8 398.4 96h113.6c17.67 0 31.1-14.33 31.1-32s-14.33-32-31.1-32h-128.4c-14.62-19.38-37.5-32-63.62-32S270.1 12.62 256.4 32H128C110.3 32 96 46.33 96 64S110.3 96 127.1 96h113.6c5.25 25.75 22.87 47 46.37 57.25V448H144c-26.51 0-48.01 21.49-48.01 48c0 8.836 7.165 16 16 16h416c8.836 0 16-7.164 16-16C544 469.5 522.5 448 495.1 448z\"],\n    \"scale-unbalanced\": [640, 512, [\"balance-scale-left\"], \"f515\", \"M85 250.5c-87 174.2-84.1 165.9-84.1 181.5C.0035 476.1 57.25 512 128 512s128-35.88 128-79.1c0-16.12 1.375-8.752-85.12-181.5C153.3 215.3 102.8 215.1 85 250.5zM55.96 416l71.98-143.1l72.15 143.1H55.96zM554.9 122.5c-17.62-35.25-68.08-35.37-85.83 0c-87 174.2-85.04 165.9-85.04 181.5c0 44.12 57.25 79.1 128 79.1s127.1-35.87 127.1-79.1C639.1 287.9 641.4 295.3 554.9 122.5zM439.1 288l72.04-143.1l72.08 143.1H439.1zM495.1 448h-143.1V153.3c20.83-9.117 36.72-26.93 43.78-48.77l126.3-42.11c16.77-5.594 25.83-23.72 20.23-40.48c-5.578-16.73-23.62-25.86-40.48-20.23l-113.3 37.76c-13.94-23.49-39.29-39.41-68.58-39.41c-44.18 0-79.1 35.82-79.1 80c0 2.961 .5587 5.771 .8712 8.648L117.9 129.7C101.1 135.3 92.05 153.4 97.64 170.1c4.469 13.41 16.95 21.88 30.36 21.88c3.344 0 6.768-.5186 10.13-1.644L273.8 145.1C278.2 148.3 282.1 151.1 288 153.3V496C288 504.8 295.2 512 304 512h223.1c8.838 0 16-7.164 16-15.1C543.1 469.5 522.5 448 495.1 448z\"],\n    \"scale-unbalanced-flip\": [640, 512, [\"balance-scale-right\"], \"f516\", \"M554.9 250.5c-17.62-35.37-68.12-35.25-85.87 0c-86.38 172.7-85.04 165.4-85.04 181.5C383.1 476.1 441.3 512 512 512s127.1-35.88 127.1-79.1C639.1 416.4 642 424.7 554.9 250.5zM439.9 416l72.15-143.1l71.98 143.1H439.9zM512 192c13.41 0 25.89-8.471 30.36-21.88c5.594-16.76-3.469-34.89-20.23-40.48l-122.1-40.1c.3125-2.877 .8712-5.687 .8712-8.648c0-44.18-35.81-80-79.1-80c-29.29 0-54.65 15.92-68.58 39.41l-113.3-37.76C121.3-3.963 103.2 5.162 97.64 21.9C92.05 38.66 101.1 56.78 117.9 62.38l126.3 42.11c7.061 21.84 22.95 39.65 43.78 48.77v294.7H144c-26.51 0-47.1 21.49-47.1 47.1C96 504.8 103.2 512 112 512h223.1c8.836 0 15.1-7.164 15.1-15.1V153.3c5.043-2.207 9.756-4.965 14.19-8.115l135.7 45.23C505.2 191.5 508.7 192 512 192zM256 304c0-15.62 1.1-7.252-85.12-181.5c-17.62-35.37-68.08-35.25-85.83 0c-86.38 172.7-85.04 165.4-85.04 181.5c0 44.12 57.25 79.1 127.1 79.1S256 348.1 256 304zM128 144l72.04 143.1H55.92L128 144z\"],\n    \"school\": [640, 512, [127979], \"f549\", \"M320 128C328.8 128 336 135.2 336 144V160H352C360.8 160 368 167.2 368 176C368 184.8 360.8 192 352 192H320C311.2 192 304 184.8 304 176V144C304 135.2 311.2 128 320 128zM476.8 98.06L602.4 125.1C624.4 130.9 640 150.3 640 172.8V464C640 490.5 618.5 512 592 512H48C21.49 512 0 490.5 0 464V172.8C0 150.3 15.63 130.9 37.59 125.1L163.2 98.06L302.2 5.374C312.1-1.791 327-1.791 337.8 5.374L476.8 98.06zM256 512H384V416C384 380.7 355.3 352 320 352C284.7 352 256 380.7 256 416V512zM96 192C87.16 192 80 199.2 80 208V272C80 280.8 87.16 288 96 288H128C136.8 288 144 280.8 144 272V208C144 199.2 136.8 192 128 192H96zM496 272C496 280.8 503.2 288 512 288H544C552.8 288 560 280.8 560 272V208C560 199.2 552.8 192 544 192H512C503.2 192 496 199.2 496 208V272zM96 320C87.16 320 80 327.2 80 336V400C80 408.8 87.16 416 96 416H128C136.8 416 144 408.8 144 400V336C144 327.2 136.8 320 128 320H96zM496 400C496 408.8 503.2 416 512 416H544C552.8 416 560 408.8 560 400V336C560 327.2 552.8 320 544 320H512C503.2 320 496 327.2 496 336V400zM320 88C271.4 88 232 127.4 232 176C232 224.6 271.4 264 320 264C368.6 264 408 224.6 408 176C408 127.4 368.6 88 320 88z\"],\n    \"scissors\": [512, 512, [9986, 9988, 9984, \"cut\"], \"f0c4\", \"M396.8 51.2C425.1 22.92 470.9 22.92 499.2 51.2C506.3 58.27 506.3 69.73 499.2 76.8L216.5 359.5C221.3 372.1 224 385.7 224 400C224 461.9 173.9 512 112 512C50.14 512 0 461.9 0 400C0 338.1 50.14 287.1 112 287.1C126.3 287.1 139.9 290.7 152.5 295.5L191.1 255.1L152.5 216.5C139.9 221.3 126.3 224 112 224C50.14 224 0 173.9 0 112C0 50.14 50.14 0 112 0C173.9 0 224 50.14 224 112C224 126.3 221.3 139.9 216.5 152.5L255.1 191.1L396.8 51.2zM160 111.1C160 85.49 138.5 63.1 112 63.1C85.49 63.1 64 85.49 64 111.1C64 138.5 85.49 159.1 112 159.1C138.5 159.1 160 138.5 160 111.1zM112 448C138.5 448 160 426.5 160 400C160 373.5 138.5 352 112 352C85.49 352 64 373.5 64 400C64 426.5 85.49 448 112 448zM278.6 342.6L342.6 278.6L499.2 435.2C506.3 442.3 506.3 453.7 499.2 460.8C470.9 489.1 425.1 489.1 396.8 460.8L278.6 342.6z\"],\n    \"screwdriver\": [512, 512, [129691], \"f54a\", \"M128 278.6l-117.1 116.9c-14.5 14.62-14.5 38.29 0 52.79l52.75 52.75c14.5 14.5 38.17 14.5 52.79 0L233.4 384c29.12-29.12 29.12-76.25 0-105.4S157.1 249.5 128 278.6zM447.1 0l-128 96L320 158L237 241.1C243.8 245.4 250.3 250.1 256 256c5.875 5.75 10.62 12.25 14.88 19L353.1 192h61.99l95.1-128L447.1 0z\"],\n    \"screwdriver-wrench\": [512, 512, [\"tools\"], \"f7d9\", \"M331.8 224.1c28.29 0 54.88 10.99 74.86 30.97l19.59 19.59c40.01-17.74 71.25-53.3 81.62-96.65c5.725-23.92 5.34-47.08 .2148-68.4c-2.613-10.88-16.43-14.51-24.34-6.604l-68.9 68.9h-75.6V97.2l68.9-68.9c7.912-7.912 4.275-21.73-6.604-24.34c-21.32-5.125-44.48-5.51-68.4 .2148c-55.3 13.23-98.39 60.22-107.2 116.4C224.5 128.9 224.2 137 224.3 145l82.78 82.86C315.2 225.1 323.5 224.1 331.8 224.1zM384 278.6c-23.16-23.16-57.57-27.57-85.39-13.9L191.1 158L191.1 95.99l-127.1-95.99L0 63.1l96 127.1l62.04 .0077l106.7 106.6c-13.67 27.82-9.251 62.23 13.91 85.39l117 117.1c14.62 14.5 38.21 14.5 52.71-.0016l52.75-52.75c14.5-14.5 14.5-38.08-.0016-52.71L384 278.6zM227.9 307L168.7 247.9l-148.9 148.9c-26.37 26.37-26.37 69.08 0 95.45C32.96 505.4 50.21 512 67.5 512s34.54-6.592 47.72-19.78l119.1-119.1C225.5 352.3 222.6 329.4 227.9 307zM64 472c-13.25 0-24-10.75-24-24c0-13.26 10.75-24 24-24S88 434.7 88 448C88 461.3 77.25 472 64 472z\"],\n    \"scroll\": [576, 512, [128220], \"f70e\", \"M48 32C21.5 32 0 53.5 0 80v64C0 152.9 7.125 160 16 160H96V80C96 53.5 74.5 32 48 32zM256 380.6V320h224V128c0-53-43-96-96-96H111.6C121.8 45.38 128 61.88 128 80V384c0 38.88 34.62 69.63 74.75 63.13C234.3 442 256 412.5 256 380.6zM288 352v32c0 52.88-43 96-96 96h272c61.88 0 112-50.13 112-112c0-8.875-7.125-16-16-16H288z\"],\n    \"scroll-torah\": [640, 512, [\"torah\"], \"f6a0\", \"M320 366.5l17.75-29.62l-35.5 .0011L320 366.5zM382.5 311.5l36.75-.0011l-18.38-30.75L382.5 311.5zM48 0C21.5 0 0 14.38 0 32v448c0 17.62 21.5 32 48 32S96 497.6 96 480V32C96 14.38 74.5 0 48 0zM419.2 200.5L382.4 200.5l18.5 30.79L419.2 200.5zM220.8 311.5l36.87-.0012l-18.5-30.87L220.8 311.5zM287.1 311.5L352.9 311.5l33.25-55.5l-33.25-55.5L287.1 200.5L253.9 256L287.1 311.5zM592 0C565.5 0 544 14.38 544 32v448c0 17.62 21.5 32 48 32s48-14.38 48-32V32C640 14.38 618.5 0 592 0zM128 480h384V32H128V480zM194.8 185.9c3.75-6.625 10.87-10.75 18.5-10.75L272.7 175.1l29.12-48.67C305.6 119.1 312.6 116.1 319.1 116.1c7.375-.125 14.25 3.916 17.1 10.17l29.25 48.87l59.5-.0019c7.625 0 14.62 4.124 18.38 10.75s3.626 14.75-.2493 21.25l-29.25 48.87l29.38 48.1c4 6.5 4.001 14.62 .2506 21.12c-3.75 6.625-10.87 10.75-18.5 10.75l-59.5 .0019l-29.12 48.67c-3.75 6.5-10.62 10.33-18.12 10.46c-7.375 0-14.25-3.874-18-10.25l-29.25-48.87l-59.5 .0019c-7.625 0-14.62-4.124-18.37-10.75S191.3 311.4 195.1 304.9l29.25-48.87L195 207C191.1 200.5 191 192.4 194.8 185.9zM319.1 145.5L302.2 175.1l35.37-.0011L319.1 145.5zM257.5 200.5L220.8 200.5l18.38 30.83L257.5 200.5z\"],\n    \"sd-card\": [384, 512, [], \"f7c2\", \"M320 0H128L0 128v320c0 35.25 28.75 64 64 64h256c35.25 0 64-28.75 64-64V64C384 28.75 355.3 0 320 0zM160 160H112V64H160V160zM240 160H192V64h48V160zM320 160h-48V64H320V160z\"],\n    \"section\": [256, 512, [], \"e447\", \"M224.5 337.4c15.66-14.28 26.09-33.12 29.8-55.82c14.46-88.44-64.67-112.4-117-128.2L124.7 149.5C65.67 131.2 61.11 119.4 64.83 96.79c1.531-9.344 5.715-16.19 13.21-21.56c14.74-10.56 39.94-13.87 69.23-9.029c10.74 1.75 24.36 5.686 41.66 12.03c16.58 6 34.98-2.438 41.04-19.06c6.059-16.59-2.467-34.97-19.05-41.06c-21.39-7.842-38.35-12.62-53.28-15.06c-46.47-7.781-88.1-.5313-116.9 20.19C19.46 38.52 5.965 60.39 1.686 86.48C-5.182 128.6 9.839 156 31.47 174.7C15.87 188.1 5.406 207.8 1.686 230.5C-12.59 317.9 67.36 342.7 105.7 354.6l12.99 3.967c64.71 19.56 76.92 29.09 72.42 56.59c-1.279 7.688-4.84 18.75-21.23 26.16c-15.27 6.906-37.01 8.406-61.4 4.469c-16.74-2.656-37.32-10.5-55.49-17.41l-9.773-3.719c-16.52-6.156-34.95 2.25-41.16 18.75c-6.184 16.56 2.186 34.1 18.74 41.19l9.463 3.594c21.05 8 44.94 17.12 68.02 20.75c12.21 2.031 24.14 3.032 35.54 3.032c23.17 0 44.28-4.157 62.4-12.34c31.95-14.44 52.53-40.75 58.02-74.12C261.1 383.6 246.8 356.3 224.5 337.4zM64.83 240.8c3.303-20.28 21.22-28.1 38.09-31.04c.9258 .2891 15.81 4.852 15.81 4.852c64.71 19.56 76.92 29.09 72.39 56.62c-3.291 20.2-21.12 28.07-37.93 31.04c-5.488-1.746-28.49-8.754-28.49-8.754C65.67 275.2 61.11 263.4 64.83 240.8z\"],\n    \"seedling\": [512, 512, [127793, \"sprout\"], \"f4d8\", \"M64 95.1H0c0 123.8 100.3 224 224 224v128C224 465.6 238.4 480 255.1 480S288 465.6 288 448V320C288 196.3 187.7 95.1 64 95.1zM448 32c-84.25 0-157.4 46.5-195.8 115.3c27.75 30.12 48.25 66.88 59 107.5C424 243.1 512 147.9 512 32H448z\"],\n    \"server\": [512, 512, [], \"f233\", \"M480 288H32c-17.62 0-32 14.38-32 32v128c0 17.62 14.38 32 32 32h448c17.62 0 32-14.38 32-32v-128C512 302.4 497.6 288 480 288zM352 408c-13.25 0-24-10.75-24-24s10.75-24 24-24s24 10.75 24 24S365.3 408 352 408zM416 408c-13.25 0-24-10.75-24-24s10.75-24 24-24s24 10.75 24 24S429.3 408 416 408zM480 32H32C14.38 32 0 46.38 0 64v128c0 17.62 14.38 32 32 32h448c17.62 0 32-14.38 32-32V64C512 46.38 497.6 32 480 32zM352 152c-13.25 0-24-10.75-24-24S338.8 104 352 104S376 114.8 376 128S365.3 152 352 152zM416 152c-13.25 0-24-10.75-24-24S402.8 104 416 104S440 114.8 440 128S429.3 152 416 152z\"],\n    \"shapes\": [512, 512, [\"triangle-circle-square\"], \"f61f\", \"M411.4 175.5C417.4 185.4 417.5 197.7 411.8 207.8C406.2 217.8 395.5 223.1 384 223.1H192C180.5 223.1 169.8 217.8 164.2 207.8C158.5 197.7 158.6 185.4 164.6 175.5L260.6 15.54C266.3 5.897 276.8 0 288 0C299.2 0 309.7 5.898 315.4 15.54L411.4 175.5zM288 312C288 289.9 305.9 272 328 272H472C494.1 272 512 289.9 512 312V456C512 478.1 494.1 496 472 496H328C305.9 496 288 478.1 288 456V312zM0 384C0 313.3 57.31 256 128 256C198.7 256 256 313.3 256 384C256 454.7 198.7 512 128 512C57.31 512 0 454.7 0 384z\"],\n    \"share\": [512, 512, [\"arrow-turn-right\", \"mail-forward\"], \"f064\", \"M503.7 226.2l-176 151.1c-15.38 13.3-39.69 2.545-39.69-18.16V272.1C132.9 274.3 66.06 312.8 111.4 457.8c5.031 16.09-14.41 28.56-28.06 18.62C39.59 444.6 0 383.8 0 322.3c0-152.2 127.4-184.4 288-186.3V56.02c0-20.67 24.28-31.46 39.69-18.16l176 151.1C514.8 199.4 514.8 216.6 503.7 226.2z\"],\n    \"share-from-square\": [576, 512, [61509, \"share-square\"], \"f14d\", \"M568.9 143.5l-150.9-138.2C404.8-6.773 384 3.039 384 21.84V96C241.2 97.63 128 126.1 128 260.6c0 54.3 35.2 108.1 74.08 136.2c12.14 8.781 29.42-2.238 24.94-16.46C186.7 252.2 256 224 384 223.1v74.2c0 18.82 20.84 28.59 34.02 16.51l150.9-138.2C578.4 167.8 578.4 152.2 568.9 143.5zM416 384c-17.67 0-32 14.33-32 32v31.1l-320-.0013V128h32c17.67 0 32-14.32 32-32S113.7 64 96 64H64C28.65 64 0 92.65 0 128v319.1c0 35.34 28.65 64 64 64l320-.0013c35.35 0 64-28.66 64-64V416C448 398.3 433.7 384 416 384z\"],\n    \"share-nodes\": [448, 512, [\"share-alt\"], \"f1e0\", \"M448 127.1C448 181 405 223.1 352 223.1C326.1 223.1 302.6 213.8 285.4 197.1L191.3 244.1C191.8 248 191.1 251.1 191.1 256C191.1 260 191.8 263.1 191.3 267.9L285.4 314.9C302.6 298.2 326.1 288 352 288C405 288 448 330.1 448 384C448 437 405 480 352 480C298.1 480 256 437 256 384C256 379.1 256.2 376 256.7 372.1L162.6 325.1C145.4 341.8 121.9 352 96 352C42.98 352 0 309 0 256C0 202.1 42.98 160 96 160C121.9 160 145.4 170.2 162.6 186.9L256.7 139.9C256.2 135.1 256 132 256 128C256 74.98 298.1 32 352 32C405 32 448 74.98 448 128L448 127.1zM95.1 287.1C113.7 287.1 127.1 273.7 127.1 255.1C127.1 238.3 113.7 223.1 95.1 223.1C78.33 223.1 63.1 238.3 63.1 255.1C63.1 273.7 78.33 287.1 95.1 287.1zM352 95.1C334.3 95.1 320 110.3 320 127.1C320 145.7 334.3 159.1 352 159.1C369.7 159.1 384 145.7 384 127.1C384 110.3 369.7 95.1 352 95.1zM352 416C369.7 416 384 401.7 384 384C384 366.3 369.7 352 352 352C334.3 352 320 366.3 320 384C320 401.7 334.3 416 352 416z\"],\n    \"shekel-sign\": [448, 512, [8362, \"ils\", \"shekel\", \"sheqel\", \"sheqel-sign\"], \"f20b\", \"M192 32C262.7 32 320 89.31 320 160V320C320 337.7 305.7 352 288 352C270.3 352 256 337.7 256 320V160C256 124.7 227.3 96 192 96H64V448C64 465.7 49.67 480 32 480C14.33 480 0 465.7 0 448V64C0 46.33 14.33 32 32 32H192zM160 480C142.3 480 128 465.7 128 448V192C128 174.3 142.3 160 160 160C177.7 160 192 174.3 192 192V416H320C355.3 416 384 387.3 384 352V64C384 46.33 398.3 32 416 32C433.7 32 448 46.33 448 64V352C448 422.7 390.7 480 320 480H160z\"],\n    \"shield\": [512, 512, [128737], \"f132\", \"M466.5 83.71l-192-80C269.6 1.67 261.3 0 256 0C250.7 0 242.5 1.67 237.6 3.702l-192 80C27.7 91.1 16 108.6 16 127.1c0 257.2 189.2 384 239.1 384c51.1 0 240-128.2 240-384C496 108.6 484.3 91.1 466.5 83.71zM256 446.5l.0234-381.1c.0059-.0234 0 0 0 0l175.9 73.17C427.8 319.7 319 417.1 256 446.5z\"],\n    \"shield-blank\": [512, 512, [\"shield-alt\"], \"f3ed\", \"M496 127.1C496 381.3 309.1 512 255.1 512C204.9 512 16 385.3 16 127.1c0-19.41 11.7-36.89 29.61-44.28l191.1-80.01c4.906-2.031 13.13-3.701 18.44-3.701c5.281 0 13.58 1.67 18.46 3.701l192 80.01C484.3 91.1 496 108.6 496 127.1z\"],\n    \"shield-virus\": [512, 512, [], \"e06c\", \"M288 255.1c-8.836 0-16 7.162-16 16c0 8.836 7.164 15.1 16 15.1s16-7.163 16-15.1C304 263.2 296.8 255.1 288 255.1zM224 191.1c-8.836 0-16 7.162-16 16c0 8.836 7.164 16 15.1 16s16-7.164 16-16C240 199.2 232.8 191.1 224 191.1zM466.5 83.68l-192-80.01C269.6 1.641 261.3 0 256.1 0C250.7 0 242.5 1.641 237.6 3.672l-192 80.01C27.69 91.07 16 108.6 16 127.1C16 385.2 205.2 512 255.9 512c52.02 0 240.1-128.2 240.1-384C496 108.6 484.3 91.07 466.5 83.68zM384 255.1h-12.12c-19.29 0-32.06 15.78-32.06 32.23c0 7.862 2.918 15.88 9.436 22.4l8.576 8.576c3.125 3.125 4.688 7.218 4.688 11.31c0 8.527-6.865 15.1-16 15.1c-4.094 0-8.188-1.562-11.31-4.688l-8.576-8.576c-6.519-6.519-14.53-9.436-22.4-9.436c-16.45 0-32.23 12.77-32.23 32.06v12.12c0 8.844-7.156 16-16 16s-16-7.156-16-16v-12.12c0-19.29-15.78-32.06-32.23-32.06c-7.862 0-15.87 2.917-22.39 9.436l-8.576 8.576c-3.125 3.125-7.219 4.688-11.31 4.688c-9.139 0-16-7.473-16-15.1c0-4.094 1.562-8.187 4.688-11.31l8.576-8.576c6.519-6.519 9.436-14.53 9.436-22.4c0-16.45-12.77-32.23-32.06-32.23H128c-8.844 0-16-7.156-16-16s7.156-16 16-16h12.12c19.29 0 32.06-15.78 32.06-32.23c0-7.862-2.918-15.88-9.436-22.4L154.2 160.8C151 157.7 149.5 153.6 149.5 149.5c0-8.527 6.865-15.1 16-15.1c4.094 0 8.188 1.562 11.31 4.688L185.4 146.7C191.9 153.3 199.9 156.2 207.8 156.2c16.45 0 32.23-12.77 32.23-32.07V111.1c0-8.844 7.156-16 16-16s16 7.156 16 16v12.12c0 19.29 15.78 32.07 32.23 32.07c7.862 0 15.88-2.917 22.4-9.436l8.576-8.577c3.125-3.125 7.219-4.688 11.31-4.688c9.139 0 16 7.473 16 15.1c0 4.094-1.562 8.187-4.688 11.31l-8.576 8.577c-6.519 6.519-9.436 14.53-9.436 22.4c0 16.45 12.77 32.23 32.06 32.23h12.12c8.844 0 16 7.156 16 16S392.8 255.1 384 255.1z\"],\n    \"ship\": [576, 512, [128674], \"f21a\", \"M192 32C192 14.33 206.3 0 224 0H352C369.7 0 384 14.33 384 32V64H432C458.5 64 480 85.49 480 112V240L524.4 254.8C547.6 262.5 553.9 292.3 535.9 308.7L434.9 401.4C418.7 410.7 400.2 416.5 384 416.5C364.4 416.5 343.2 408.8 324.8 396.1C302.8 380.6 273.3 380.6 251.2 396.1C234 407.9 213.2 416.5 192 416.5C175.8 416.5 157.3 410.7 141.1 401.3L40.09 308.7C22.1 292.3 28.45 262.5 51.59 254.8L96 239.1V111.1C96 85.49 117.5 63.1 144 63.1H192V32zM160 218.7L267.8 182.7C280.9 178.4 295.1 178.4 308.2 182.7L416 218.7V128H160V218.7zM384 448C410.9 448 439.4 437.2 461.4 421.9L461.5 421.9C473.4 413.4 489.5 414.1 500.7 423.6C515 435.5 533.2 444.6 551.3 448.8C568.5 452.8 579.2 470.1 575.2 487.3C571.2 504.5 553.1 515.2 536.7 511.2C512.2 505.4 491.9 494.6 478.5 486.2C449.5 501.7 417 512 384 512C352.1 512 323.4 502.1 303.6 493.1C297.7 490.5 292.5 487.8 288 485.4C283.5 487.8 278.3 490.5 272.4 493.1C252.6 502.1 223.9 512 192 512C158.1 512 126.5 501.7 97.5 486.2C84.12 494.6 63.79 505.4 39.27 511.2C22.06 515.2 4.853 504.5 .8422 487.3C-3.169 470.1 7.532 452.8 24.74 448.8C42.84 444.6 60.96 435.5 75.31 423.6C86.46 414.1 102.6 413.4 114.5 421.9L114.6 421.9C136.7 437.2 165.1 448 192 448C219.5 448 247 437.4 269.5 421.9C280.6 414 295.4 414 306.5 421.9C328.1 437.4 356.5 448 384 448H384z\"],\n    \"shirt\": [640, 512, [128085, \"t-shirt\", \"tshirt\"], \"f553\", \"M640 162.8c0 6.917-2.293 13.88-7.012 19.7l-49.96 61.63c-6.32 7.796-15.62 11.85-25.01 11.85c-7.01 0-14.07-2.262-19.97-6.919L480 203.3V464c0 26.51-21.49 48-48 48H208C181.5 512 160 490.5 160 464V203.3L101.1 249.1C96.05 253.7 88.99 255.1 81.98 255.1c-9.388 0-18.69-4.057-25.01-11.85L7.012 182.5C2.292 176.7-.0003 169.7-.0003 162.8c0-9.262 4.111-18.44 12.01-24.68l135-106.6C159.8 21.49 175.7 16 191.1 16H225.6C233.3 61.36 272.5 96 320 96s86.73-34.64 94.39-80h33.6c16.35 0 32.22 5.49 44.99 15.57l135 106.6C635.9 144.4 640 153.6 640 162.8z\"],\n    \"shoe-prints\": [640, 512, [], \"f54b\", \"M192 159.1L224 159.1V32L192 32c-35.38 0-64 28.62-64 63.1S156.6 159.1 192 159.1zM0 415.1c0 35.37 28.62 64.01 64 64.01l32-.0103v-127.1l-32-.0005C28.62 351.1 0 380.6 0 415.1zM337.5 287.1c-35 0-76.25 13.12-104.8 31.1C208 336.4 188.3 351.1 128 351.1v128l57.5 15.98c26.25 7.25 53 13.13 80.38 15.01c32.63 2.375 65.63 .743 97.5-6.132C472.9 481.2 512 429.2 512 383.1C512 319.1 427.9 287.1 337.5 287.1zM491.4 7.252c-31.88-6.875-64.88-8.625-97.5-6.25C366.5 2.877 339.8 8.752 313.5 16L256 32V159.1c60.25 0 80 15.62 104.8 31.1c28.5 18.87 69.75 31.1 104.8 31.1C555.9 223.1 640 191.1 640 127.1C640 82.75 600.9 30.75 491.4 7.252z\"],\n    \"shop\": [640, 512, [\"store-alt\"], \"f54f\", \"M0 155.2C0 147.9 2.153 140.8 6.188 134.7L81.75 21.37C90.65 8.021 105.6 0 121.7 0H518.3C534.4 0 549.3 8.021 558.2 21.37L633.8 134.7C637.8 140.8 640 147.9 640 155.2C640 175.5 623.5 192 603.2 192H36.84C16.5 192 .0003 175.5 .0003 155.2H0zM64 224H128V384H320V224H384V464C384 490.5 362.5 512 336 512H112C85.49 512 64 490.5 64 464V224zM512 224H576V480C576 497.7 561.7 512 544 512C526.3 512 512 497.7 512 480V224z\"],\n    \"shop-slash\": [640, 512, [\"store-alt-slash\"], \"e070\", \"M74.13 32.8L81.75 21.38C90.65 8.022 105.6 .001 121.7 .001H518.3C534.4 .001 549.3 8.022 558.2 21.38L633.8 134.7C637.8 140.8 640 147.9 640 155.2C640 175.5 623.5 192 603.2 192H277.3L320 225.5V224H384V275.7L512 375.1V224H576V426.2L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L74.13 32.8zM0 155.2C0 147.9 2.153 140.8 6.188 134.7L20.98 112.5L121.8 192H36.84C16.5 192 .0003 175.5 .0003 155.2H0zM320 384V348.1L384 398.5V464C384 490.5 362.5 512 336 512H112C85.49 512 64 490.5 64 464V224H128V384H320z\"],\n    \"shower\": [512, 512, [128703], \"f2cc\", \"M288 384c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C320 398.3 305.7 384 288 384zM416 256c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C448 270.3 433.7 256 416 256zM480 192c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C512 206.3 497.7 192 480 192zM288 320c0-17.67-14.33-32-32-32s-32 14.33-32 32c0 17.67 14.33 32 32 32S288 337.7 288 320zM320 224c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C352 238.3 337.7 224 320 224zM384 224c17.67 0 32-14.33 32-32c0-17.67-14.33-32-32-32s-32 14.33-32 32C352 209.7 366.3 224 384 224zM352 320c-17.67 0-32 14.33-32 32c0 17.67 14.33 32 32 32s32-14.33 32-32C384 334.3 369.7 320 352 320zM347.3 91.31l-11.31-11.31c-6.248-6.248-16.38-6.248-22.63 0l-6.631 6.631c-35.15-26.29-81.81-29.16-119.6-8.779L170.5 61.25C132.2 22.95 63.65 18.33 21.98 71.16C7.027 90.11 0 114.3 0 138.4V464C0 472.8 7.164 480 16 480h32C56.84 480 64 472.8 64 464V131.9c0-19.78 16.09-35.87 35.88-35.87c9.438 0 18.69 3.828 25.38 10.5l16.61 16.61C121.5 160.9 124.3 207.6 150.6 242.7L144 249.4c-6.248 6.248-6.248 16.38 0 22.63l11.31 11.31c6.248 6.25 16.38 6.25 22.63 0l169.4-169.4C353.6 107.7 353.6 97.56 347.3 91.31z\"],\n    \"shrimp\": [512, 512, [129424], \"e448\", \"M288 320V128H64C46.34 128 32 113.6 32 96s14.34-32 32-32h368c8.844 0 16-7.156 16-16s-7.156-16-16-16H64C28.72 32 0 60.7 0 96s28.72 64 64 64h2.879c15.26 90.77 94.01 160 189.1 160H288zM192 216c-13.25 0-24-10.75-24-24c0-13.26 10.75-24 24-24s24 10.74 24 24C216 205.3 205.3 216 192 216zM225.6 399.4c-4.75 12.36 1.406 26.25 13.78 31.02l5.688 2.188C233.3 434.1 224 443.8 224 456c0 13.25 10.75 24 24 24h72v-70.03l-63.38-24.38C244.3 380.9 230.4 386.1 225.6 399.4zM511.2 286.7c-.5488-5.754-2.201-11.1-3.314-16.65l-124.6 90.62c.3711 2.404 .7383 4.814 .7383 7.322c0 1.836-.3379 3.576-.5391 5.357l90.15 40.06C500.8 379.2 515.8 334.8 511.2 286.7zM352 413.1v66.08c37.23-3.363 71.04-18.3 97.94-41.21l-80.34-35.71C364.7 407.1 358.6 410.7 352 413.1zM497.9 237.7C470.1 172.4 402.8 128 328.4 128h-8.436v192h16c12.28 0 23.36 4.748 31.85 12.33L497.9 237.7z\"],\n    \"shuffle\": [512, 512, [128256, \"random\"], \"f074\", \"M424.1 287c-15.13-15.12-40.1-4.426-40.1 16.97V352H336L153.6 108.8C147.6 100.8 138.1 96 128 96H32C14.31 96 0 110.3 0 128s14.31 32 32 32h80l182.4 243.2C300.4 411.3 309.9 416 320 416h63.97v47.94c0 21.39 25.86 32.12 40.99 17l79.1-79.98c9.387-9.387 9.387-24.59 0-33.97L424.1 287zM336 160h47.97v48.03c0 21.39 25.87 32.09 40.1 16.97l79.1-79.98c9.387-9.391 9.385-24.59-.0013-33.97l-79.1-79.98c-15.13-15.12-40.99-4.391-40.99 17V96H320c-10.06 0-19.56 4.75-25.59 12.81L254 162.7L293.1 216L336 160zM112 352H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h96c10.06 0 19.56-4.75 25.59-12.81l40.4-53.87L154 296L112 352z\"],\n    \"shuttle-space\": [640, 512, [\"space-shuttle\"], \"f197\", \"M129.1 480H128V384H352L245.2 448.1C210.4 468.1 170.6 480 129.1 480zM352 128H128V32H129.1C170.6 32 210.4 43.03 245.2 63.92L352 128zM104 128C130.2 128 153.4 140.6 168 160H456C525.3 160 591 182.7 635.2 241.6C641.6 250.1 641.6 261.9 635.2 270.4C591 329.3 525.3 352 456 352H168C153.4 371.4 130.2 384 104 384H96V480H80C53.49 480 32 458.5 32 432V384H40C17.91 384 0 366.1 0 344V168C0 145.9 17.89 128 39.96 128H32V80C32 53.49 53.49 32 80 32H96V128H104zM476.4 208C473.1 208 472 209.1 472 212.4V299.6C472 302 473.1 304 476.4 304C496.1 304 512 288.1 512 268.4V243.6C512 223.9 496.1 208 476.4 208z\"],\n    \"sign-hanging\": [512, 512, [\"sign\"], \"f4d9\", \"M96 0C113.7 0 128 14.33 128 32V64H480C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H128V480C128 497.7 113.7 512 96 512C78.33 512 64 497.7 64 480V128H32C14.33 128 0 113.7 0 96C0 78.33 14.33 64 32 64H64V32C64 14.33 78.33 0 96 0zM448 160C465.7 160 480 174.3 480 192V352C480 369.7 465.7 384 448 384H192C174.3 384 160 369.7 160 352V192C160 174.3 174.3 160 192 160H448z\"],\n    \"signal\": [576, 512, [128246, \"signal-5\", \"signal-perfect\"], \"f012\", \"M544 0c-17.67 0-32 14.33-32 31.1V480C512 497.7 526.3 512 544 512s32-14.33 32-31.1V31.1C576 14.33 561.7 0 544 0zM160 288C142.3 288 128 302.3 128 319.1v160C128 497.7 142.3 512 160 512s32-14.33 32-31.1V319.1C192 302.3 177.7 288 160 288zM32 384C14.33 384 0 398.3 0 415.1v64C0 497.7 14.33 512 31.1 512S64 497.7 64 480V415.1C64 398.3 49.67 384 32 384zM416 96c-17.67 0-32 14.33-32 31.1V480C384 497.7 398.3 512 416 512s32-14.33 32-31.1V127.1C448 110.3 433.7 96 416 96zM288 192C270.3 192 256 206.3 256 223.1v256C256 497.7 270.3 512 288 512s32-14.33 32-31.1V223.1C320 206.3 305.7 192 288 192z\"],\n    \"signature\": [640, 512, [], \"f5b7\", \"M192 160C192 177.7 177.7 192 160 192C142.3 192 128 177.7 128 160V128C128 74.98 170.1 32 224 32C277 32 320 74.98 320 128V135.8C320 156.6 318.8 177.4 316.4 198.1L438.8 161.3C450.2 157.9 462.6 161.1 470.1 169.7C479.3 178.3 482.1 190.8 478.4 202.1L460.4 255.1H544C561.7 255.1 576 270.3 576 287.1C576 305.7 561.7 319.1 544 319.1H416C405.7 319.1 396.1 315.1 390 306.7C384 298.4 382.4 287.6 385.6 277.9L398.1 240.4L303.7 268.7C291.9 321.5 272.2 372.2 245.3 419.2L231.4 443.5C218.5 466.1 194.5 480 168.5 480C128.5 480 95.1 447.5 95.1 407.5V335.6C95.1 293.2 123.8 255.8 164.4 243.7L248.8 218.3C253.6 191.1 255.1 163.5 255.1 135.8V128C255.1 110.3 241.7 96 223.1 96C206.3 96 191.1 110.3 191.1 128L192 160zM160 335.6V407.5C160 412.2 163.8 416 168.5 416C171.5 416 174.4 414.4 175.9 411.7L189.8 387.4C207.3 356.6 221.4 324.1 231.8 290.3L182.8 304.1C169.3 309 160 321.5 160 335.6V335.6zM24 368H64V407.5C64 410.4 64.11 413.2 64.34 416H24C10.75 416 0 405.3 0 392C0 378.7 10.75 368 24 368zM616 416H283.5C291.7 400.3 299.2 384.3 305.9 368H616C629.3 368 640 378.7 640 392C640 405.3 629.3 416 616 416z\"],\n    \"signs-post\": [512, 512, [\"map-signs\"], \"f277\", \"M223.1 32C223.1 14.33 238.3 0 255.1 0C273.7 0 288 14.33 288 32H441.4C445.6 32 449.7 33.69 452.7 36.69L500.7 84.69C506.9 90.93 506.9 101.1 500.7 107.3L452.7 155.3C449.7 158.3 445.6 160 441.4 160H63.1C46.33 160 31.1 145.7 31.1 128V64C31.1 46.33 46.33 32 63.1 32L223.1 32zM480 320C480 337.7 465.7 352 448 352H70.63C66.38 352 62.31 350.3 59.31 347.3L11.31 299.3C5.065 293.1 5.065 282.9 11.31 276.7L59.31 228.7C62.31 225.7 66.38 223.1 70.63 223.1H223.1V191.1H288V223.1H448C465.7 223.1 480 238.3 480 255.1V320zM255.1 512C238.3 512 223.1 497.7 223.1 480V384H288V480C288 497.7 273.7 512 255.1 512z\"],\n    \"sim-card\": [384, 512, [], \"f7c4\", \"M0 64v384c0 35.25 28.75 64 64 64h256c35.25 0 64-28.75 64-64V128l-128-128H64C28.75 0 0 28.75 0 64zM224 256H160V192h64V256zM320 256h-64V192h32c17.75 0 32 14.25 32 32V256zM256 384h64v32c0 17.75-14.25 32-32 32h-32V384zM160 384h64v64H160V384zM64 384h64v64H96c-17.75 0-32-14.25-32-32V384zM64 288h256v64H64V288zM64 224c0-17.75 14.25-32 32-32h32v64H64V224z\"],\n    \"sink\": [512, 512, [], \"e06d\", \"M496 288h-96V256l64 .0002c8.838 0 16-7.164 16-15.1v-15.1c0-8.838-7.162-16-16-16L384 208c-17.67 0-32 14.33-32 32v47.1l-64 .0005v-192c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-16c0-59.2-53.85-106-115.1-94.14C255.3 10.71 224 53.36 224 99.79v188.2L160 288V240c0-17.67-14.33-32-32-32L48 208c-8.836 0-16 7.162-16 16v15.1C32 248.8 39.16 256 48 256l64-.0002V288h-96c-8.836 0-16 7.164-16 16v32c0 8.836 7.164 16 16 16h480c8.836 0 16-7.164 16-16V304C512 295.2 504.8 288 496 288zM32 416c0 53.02 42.98 96 96 96h256c53.02 0 96-42.98 96-96v-32H32V416z\"],\n    \"sitemap\": [576, 512, [], \"f0e8\", \"M208 80C208 53.49 229.5 32 256 32H320C346.5 32 368 53.49 368 80V144C368 170.5 346.5 192 320 192H312V232H464C494.9 232 520 257.1 520 288V320H528C554.5 320 576 341.5 576 368V432C576 458.5 554.5 480 528 480H464C437.5 480 416 458.5 416 432V368C416 341.5 437.5 320 464 320H472V288C472 283.6 468.4 280 464 280H312V320H320C346.5 320 368 341.5 368 368V432C368 458.5 346.5 480 320 480H256C229.5 480 208 458.5 208 432V368C208 341.5 229.5 320 256 320H264V280H112C107.6 280 104 283.6 104 288V320H112C138.5 320 160 341.5 160 368V432C160 458.5 138.5 480 112 480H48C21.49 480 0 458.5 0 432V368C0 341.5 21.49 320 48 320H56V288C56 257.1 81.07 232 112 232H264V192H256C229.5 192 208 170.5 208 144V80z\"],\n    \"skull\": [512, 512, [128128], \"f54c\", \"M416 400V464C416 490.5 394.5 512 368 512H320V464C320 455.2 312.8 448 304 448C295.2 448 288 455.2 288 464V512H224V464C224 455.2 216.8 448 208 448C199.2 448 192 455.2 192 464V512H144C117.5 512 96 490.5 96 464V400C96 399.6 96 399.3 96.01 398.9C37.48 357.8 0 294.7 0 224C0 100.3 114.6 0 256 0C397.4 0 512 100.3 512 224C512 294.7 474.5 357.8 415.1 398.9C415.1 399.3 416 399.6 416 400V400zM160 192C124.7 192 96 220.7 96 256C96 291.3 124.7 320 160 320C195.3 320 224 291.3 224 256C224 220.7 195.3 192 160 192zM352 320C387.3 320 416 291.3 416 256C416 220.7 387.3 192 352 192C316.7 192 288 220.7 288 256C288 291.3 316.7 320 352 320z\"],\n    \"skull-crossbones\": [448, 512, [128369, 9760], \"f714\", \"M368 128C368 172.4 342.6 211.5 304 234.4V256C304 273.7 289.7 288 272 288H176C158.3 288 144 273.7 144 256V234.4C105.4 211.5 80 172.4 80 128C80 57.31 144.5 0 224 0C303.5 0 368 57.31 368 128V128zM168 176C185.7 176 200 161.7 200 144C200 126.3 185.7 112 168 112C150.3 112 136 126.3 136 144C136 161.7 150.3 176 168 176zM280 112C262.3 112 248 126.3 248 144C248 161.7 262.3 176 280 176C297.7 176 312 161.7 312 144C312 126.3 297.7 112 280 112zM3.379 273.7C11.28 257.9 30.5 251.5 46.31 259.4L224 348.2L401.7 259.4C417.5 251.5 436.7 257.9 444.6 273.7C452.5 289.5 446.1 308.7 430.3 316.6L295.6 384L430.3 451.4C446.1 459.3 452.5 478.5 444.6 494.3C436.7 510.1 417.5 516.5 401.7 508.6L224 419.8L46.31 508.6C30.5 516.5 11.28 510.1 3.379 494.3C-4.525 478.5 1.882 459.3 17.69 451.4L152.4 384L17.69 316.6C1.882 308.7-4.525 289.5 3.379 273.7V273.7z\"],\n    \"slash\": [640, 512, [], \"f715\", \"M5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196V9.196z\"],\n    \"sleigh\": [640, 512, [], \"f7cc\", \"M63.1 32C66.31 32 68.56 32.24 70.74 32.71C124.1 37.61 174.2 67.59 203.4 114.3L207.7 121.1C247.7 185.1 317.8 224 393.3 224C423.5 224 448 199.5 448 169.3V128C448 110.3 462.3 96 480 96H544C561.7 96 576 110.3 576 128C576 145.7 561.7 160 544 160V256C544 309 501 352 448 352V384H384V352H192V384H128V352C74.98 352 32 309 32 256V96C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H63.1zM640 392C640 440.6 600.6 480 552 480H63.1C46.33 480 31.1 465.7 31.1 448C31.1 430.3 46.33 416 63.1 416H552C565.3 416 576 405.3 576 392V384C576 366.3 590.3 352 608 352C625.7 352 640 366.3 640 384V392z\"],\n    \"sliders\": [512, 512, [\"sliders-h\"], \"f1de\", \"M0 416C0 398.3 14.33 384 32 384H86.66C99 355.7 127.2 336 160 336C192.8 336 220.1 355.7 233.3 384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H233.3C220.1 476.3 192.8 496 160 496C127.2 496 99 476.3 86.66 448H32C14.33 448 0 433.7 0 416V416zM192 416C192 398.3 177.7 384 160 384C142.3 384 128 398.3 128 416C128 433.7 142.3 448 160 448C177.7 448 192 433.7 192 416zM352 176C384.8 176 412.1 195.7 425.3 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H425.3C412.1 316.3 384.8 336 352 336C319.2 336 291 316.3 278.7 288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H278.7C291 195.7 319.2 176 352 176zM384 256C384 238.3 369.7 224 352 224C334.3 224 320 238.3 320 256C320 273.7 334.3 288 352 288C369.7 288 384 273.7 384 256zM480 64C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H265.3C252.1 156.3 224.8 176 192 176C159.2 176 131 156.3 118.7 128H32C14.33 128 0 113.7 0 96C0 78.33 14.33 64 32 64H118.7C131 35.75 159.2 16 192 16C224.8 16 252.1 35.75 265.3 64H480zM160 96C160 113.7 174.3 128 192 128C209.7 128 224 113.7 224 96C224 78.33 209.7 64 192 64C174.3 64 160 78.33 160 96z\"],\n    \"smog\": [640, 512, [], \"f75f\", \"M144 288h156.1C322.6 307.8 351.8 320 384 320s61.25-12.25 83.88-32H528C589.9 288 640 237.9 640 176s-50.13-112-112-112c-18 0-34.75 4.625-49.75 12.12C453.1 30.1 406.8 0 352 0c-41 0-77.75 17.25-104 44.75C221.8 17.25 185 0 144 0c-79.5 0-144 64.5-144 144S64.5 288 144 288zM136 464H23.1C10.8 464 0 474.8 0 487.1S10.8 512 23.1 512H136C149.2 512 160 501.2 160 488S149.2 464 136 464zM616 368h-528C74.8 368 64 378.8 64 391.1S74.8 416 87.1 416h528c13.2 0 24-10.8 24-23.1S629.2 368 616 368zM552 464H231.1C218.8 464 208 474.8 208 487.1S218.8 512 231.1 512H552c13.2 0 24-10.8 24-23.1S565.2 464 552 464z\"],\n    \"smoking\": [640, 512, [128684], \"f48d\", \"M432 352h-384C21.5 352 0 373.5 0 400v64C0 490.5 21.5 512 48 512h384c8.75 0 16-7.25 16-16v-128C448 359.3 440.8 352 432 352zM400 464H224v-64h176V464zM536 352h-48C483.6 352 480 355.6 480 360v144c0 4.375 3.625 8 8 8h48c4.375 0 8-3.625 8-8v-144C544 355.6 540.4 352 536 352zM632 352h-48C579.6 352 576 355.6 576 360v144c0 4.375 3.625 8 8 8h48c4.375 0 8-3.625 8-8v-144C640 355.6 636.4 352 632 352zM553.3 87.13C547.6 83.25 544 77.12 544 70.25V8C544 3.625 540.4 0 536 0h-48C483.6 0 480 3.625 480 8v62.25c0 22 10.25 43.5 28.62 55.5C550.8 153 576 199.5 576 249.8V280C576 284.4 579.6 288 584 288h48C636.4 288 640 284.4 640 280V249.8C640 184.3 607.6 123.5 553.3 87.13zM487.8 141.6C463.8 125 448 99.25 448 70.25V8C448 3.625 444.4 0 440 0h-48C387.6 0 384 3.625 384 8v66.38C384 118.1 408.6 156 444.3 181.1C466.8 196.8 480 222.3 480 249.8V280C480 284.4 483.6 288 488 288h48C540.4 288 544 284.4 544 280V249.8C544 206.4 523 166.3 487.8 141.6z\"],\n    \"snowflake\": [512, 512, [10054, 10052], \"f2dc\", \"M475.6 384.1C469.7 394.3 458.9 400 447.9 400c-5.488 0-11.04-1.406-16.13-4.375l-25.09-14.64l5.379 20.29c3.393 12.81-4.256 25.97-17.08 29.34c-2.064 .5625-4.129 .8125-6.164 .8125c-10.63 0-20.36-7.094-23.21-17.84l-17.74-66.92L288 311.7l.0002 70.5l48.38 48.88c9.338 9.438 9.244 24.62-.1875 33.94C331.5 469.7 325.4 472 319.3 472c-6.193 0-12.39-2.375-17.08-7.125l-14.22-14.37L288 480c0 17.69-14.34 32-32.03 32s-32.03-14.31-32.03-32l-.0002-29.5l-14.22 14.37c-9.322 9.438-24.53 9.5-33.97 .1875c-9.432-9.312-9.525-24.5-.1875-33.94l48.38-48.88L223.1 311.7l-59.87 34.93l-17.74 66.92c-2.848 10.75-12.58 17.84-23.21 17.84c-2.035 0-4.1-.25-6.164-.8125c-12.82-3.375-20.47-16.53-17.08-29.34l5.379-20.29l-25.09 14.64C75.11 398.6 69.56 400 64.07 400c-11.01 0-21.74-5.688-27.69-15.88c-8.932-15.25-3.785-34.84 11.5-43.75l25.96-15.15l-20.33-5.508C40.7 316.3 33.15 303.1 36.62 290.3S53.23 270 66.09 273.4L132 291.3L192.5 256L132 220.7L66.09 238.6c-2.111 .5625-4.225 .8438-6.305 .8438c-10.57 0-20.27-7.031-23.16-17.72C33.15 208.9 40.7 195.8 53.51 192.3l20.33-5.508L47.88 171.6c-15.28-8.906-20.43-28.5-11.5-43.75c8.885-15.28 28.5-20.44 43.81-11.5l25.09 14.64L99.9 110.7C96.51 97.91 104.2 84.75 116.1 81.38C129.9 77.91 142.1 85.63 146.4 98.41l17.74 66.92L223.1 200.3l-.0002-70.5L175.6 80.88C166.3 71.44 166.3 56.25 175.8 46.94C185.2 37.59 200.4 37.72 209.8 47.13l14.22 14.37L223.1 32c0-17.69 14.34-32 32.03-32s32.03 14.31 32.03 32l.0002 29.5l14.22-14.37c9.307-9.406 24.51-9.531 33.97-.1875c9.432 9.312 9.525 24.5 .1875 33.94l-48.38 48.88L288 200.3l59.87-34.93l17.74-66.92c3.395-12.78 16.56-20.5 29.38-17.03c12.82 3.375 20.47 16.53 17.08 29.34l-5.379 20.29l25.09-14.64c15.28-8.906 34.91-3.75 43.81 11.5c8.932 15.25 3.785 34.84-11.5 43.75l-25.96 15.15l20.33 5.508c12.81 3.469 20.37 16.66 16.89 29.44c-2.895 10.69-12.59 17.72-23.16 17.72c-2.08 0-4.193-.2813-6.305-.8438L379.1 220.7L319.5 256l60.46 35.28l65.95-17.87C458.8 270 471.9 277.5 475.4 290.3c3.473 12.78-4.082 25.97-16.89 29.44l-20.33 5.508l25.96 15.15C479.4 349.3 484.5 368.9 475.6 384.1z\"],\n    \"snowman\": [512, 512, [9924, 9731], \"f7d0\", \"M510.9 152.3l-5.875-14.5c-3.25-8-12.62-11.88-20.75-8.625l-28.25 11.5v-29C455.1 103 448.7 96 439.1 96h-16c-8.75 0-16 7-16 15.62V158.5c0 .5 .25 1 .25 1.5l-48.98 20.6c-5.291-12.57-12.98-23.81-22.24-33.55c9.35-14.81 14.98-32.23 14.98-51.04C351.1 42.98 309 0 255.1 0S160 42.98 160 95.1c0 18.81 5.626 36.23 14.98 51.04C165.7 156.8 158.1 168.1 152.8 180.7L103.8 160c0-.5 .25-1 .25-1.5V111.6C104 103 96.76 96 88.01 96h-16c-8.75 0-16 7-16 15.62v29l-28.25-11.5c-8.125-3.25-17.5 .625-20.75 8.625l-5.875 14.5C-2.119 160.4 1.881 169.5 10.01 172.6L144.4 228.4C144.9 240.8 147.3 252.7 151.5 263.7c-33.78 29.34-55.53 72.04-55.53 120.3c0 52.59 25.71 98.84 64.88 128h190.2c39.17-29.17 64.88-75.42 64.88-128c0-48.25-21.76-90.95-55.53-120.3c4.195-11.03 6.599-22.89 7.091-35.27l134.4-55.8C510.1 169.5 514.1 160.4 510.9 152.3zM224 95.1c-8.75 0-15.1-7.25-15.1-15.1s7.25-15.1 15.1-15.1s15.1 7.25 15.1 15.1S232.8 95.1 224 95.1zM256 367.1c-8.75 0-15.1-7.25-15.1-15.1S247.3 335.1 256 335.1s15.1 7.25 15.1 15.1S264.8 367.1 256 367.1zM256 303.1c-8.75 0-15.1-7.25-15.1-15.1S247.3 271.1 256 271.1s15.1 7.25 15.1 15.1S264.8 303.1 256 303.1zM256 239.1c-8.75 0-15.1-7.25-15.1-15.1S247.3 207.1 256 207.1s15.1 7.25 15.1 15.1S264.8 239.1 256 239.1zM256 152c0 0-15.1-23.25-15.1-32S247.3 104 256 104s15.1 7.25 15.1 16S256 152 256 152zM287.1 95.1c-8.75 0-15.1-7.25-15.1-15.1s7.25-15.1 15.1-15.1s15.1 7.25 15.1 15.1S296.7 95.1 287.1 95.1z\"],\n    \"snowplow\": [640, 512, [], \"f7d2\", \"M144 400C144 413.3 133.3 424 120 424C106.7 424 96 413.3 96 400C96 386.7 106.7 376 120 376C133.3 376 144 386.7 144 400zM336 400C336 386.7 346.7 376 360 376C373.3 376 384 386.7 384 400C384 413.3 373.3 424 360 424C346.7 424 336 413.3 336 400zM304 400C304 413.3 293.3 424 280 424C266.7 424 256 413.3 256 400C256 386.7 266.7 376 280 376C293.3 376 304 386.7 304 400zM176 400C176 386.7 186.7 376 200 376C213.3 376 224 386.7 224 400C224 413.3 213.3 424 200 424C186.7 424 176 413.3 176 400zM447.4 249.6C447.8 251.9 448.1 254.3 448 256.7V288H512V235.2C512 220.7 516.9 206.6 526 195.2L583 124C594.1 110.2 614.2 107.1 627.1 119C641.8 130.1 644 150.2 632.1 163.1L576 235.2V402.7L630.6 457.4C643.1 469.9 643.1 490.1 630.6 502.6C618.1 515.1 597.9 515.1 585.4 502.6L530.7 448C518.7 435.1 512 419.7 512 402.7V352H469.2C476.1 366.5 480 382.8 480 400C480 461.9 429.9 512 368 512H112C50.14 512 0 461.9 0 400C0 355.3 26.16 316.8 64 298.8V192C64 174.3 78.33 160 96 160H128V48C128 21.49 149.5 0 176 0H298.9C324.5 0 347.6 15.26 357.7 38.79L445.1 242.7C446.1 244.9 446.9 247.2 447.4 249.6H447.4zM298.9 64H192V160L256 224H367.5L298.9 64zM368 352H112C85.49 352 64 373.5 64 400C64 426.5 85.49 448 112 448H368C394.5 448 416 426.5 416 400C416 373.5 394.5 352 368 352z\"],\n    \"soap\": [512, 512, [129532], \"e06e\", \"M320 256c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64s-64 28.65-64 64C256 227.3 284.7 256 320 256zM160 288c-35.35 0-64 28.65-64 64c0 35.35 28.65 64 64 64h192c35.35 0 64-28.65 64-64c0-35.35-28.65-64-64-64H160zM384 64c17.67 0 32-14.33 32-32c0-17.67-14.33-32-32-32s-32 14.33-32 32C352 49.67 366.3 64 384 64zM208 96C234.5 96 256 74.51 256 48S234.5 0 208 0S160 21.49 160 48S181.5 96 208 96zM416 192c0 27.82-12.02 52.68-30.94 70.21C421.7 275.7 448 310.7 448 352c0 53.02-42.98 96-96 96H160c-53.02 0-96-42.98-96-96s42.98-96 96-96h88.91C233.6 238.1 224 216.7 224 192H96C42.98 192 0 234.1 0 288v128c0 53.02 42.98 96 96 96h320c53.02 0 96-42.98 96-96V288C512 234.1 469 192 416 192z\"],\n    \"socks\": [576, 512, [129510], \"f696\", \"M319.1 32c0-11 3.125-21.25 8-30.38C325.4 .8721 322.9 0 319.1 0H192C174.4 0 159.1 14.38 159.1 32l.0042 32h160L319.1 32zM246.6 310.1l73.36-55l.0026-159.1h-160l-.0042 175.1l-86.64 64.61c-39.38 29.5-53.86 84.4-29.24 127c18.25 31.62 51.1 48.36 83.97 48.36c20 0 40.26-6.225 57.51-19.22l21.87-16.38C177.6 421 193.9 350.6 246.6 310.1zM351.1 271.1l-86.13 64.61c-39.37 29.5-53.86 84.4-29.23 127C254.9 495.3 287.2 512 320.1 512c20 0 40.25-6.25 57.5-19.25l115.2-86.38C525 382.3 544 344.2 544 303.1v-207.1h-192L351.1 271.1zM512 0h-128c-17.62 0-32 14.38-32 32l-.0003 32H544V32C544 14.38 529.6 0 512 0z\"],\n    \"solar-panel\": [640, 512, [], \"f5ba\", \"M575.4 25.72C572.4 10.78 559.2 0 543.1 0H96c-15.25 0-28.39 10.78-31.38 25.72l-63.1 320c-1.891 9.406 .5469 19.16 6.625 26.56S22.41 384 32 384h255.1v64.25H239.8c-26.26 0-47.75 21.49-47.75 47.75c0 8.844 7.168 16.01 16.01 16l223.1-.1667c8.828-.0098 15.99-7.17 15.99-16C447.1 469.5 426.6 448 400.2 448h-48.28v-64h256c9.594 0 18.67-4.312 24.75-11.72s8.516-17.16 6.625-26.56L575.4 25.72zM517.8 64l19.2 96h-97.98L429.2 64H517.8zM380.1 64l9.617 96H250l9.873-96H380.1zM210.8 64L201 160H103.1l19.18-96H210.8zM71.16 320l22.28-112h102.7L184.6 320H71.16zM233.8 320l11.37-112h149.7L406.2 320H233.8zM455.4 320l-11.5-112h102.7l22.28 112H455.4z\"],\n    \"sort\": [320, 512, [\"unsorted\"], \"f0dc\", \"M27.66 224h264.7c24.6 0 36.89-29.78 19.54-47.12l-132.3-136.8c-5.406-5.406-12.47-8.107-19.53-8.107c-7.055 0-14.09 2.701-19.45 8.107L8.119 176.9C-9.229 194.2 3.055 224 27.66 224zM292.3 288H27.66c-24.6 0-36.89 29.77-19.54 47.12l132.5 136.8C145.9 477.3 152.1 480 160 480c7.053 0 14.12-2.703 19.53-8.109l132.3-136.8C329.2 317.8 316.9 288 292.3 288z\"],\n    \"sort-down\": [320, 512, [\"sort-desc\"], \"f0dd\", \"M311.9 335.1l-132.4 136.8C174.1 477.3 167.1 480 160 480c-7.055 0-14.12-2.702-19.47-8.109l-132.4-136.8C-9.229 317.8 3.055 288 27.66 288h264.7C316.9 288 329.2 317.8 311.9 335.1z\"],\n    \"sort-up\": [320, 512, [\"sort-asc\"], \"f0de\", \"M27.66 224h264.7c24.6 0 36.89-29.78 19.54-47.12l-132.3-136.8c-5.406-5.406-12.47-8.107-19.53-8.107c-7.055 0-14.09 2.701-19.45 8.107L8.119 176.9C-9.229 194.2 3.055 224 27.66 224z\"],\n    \"spa\": [576, 512, [], \"f5bb\", \"M568.3 192c-29 .125-135 6.124-213.9 82.1C321.2 304.7 301 338.3 288 369.9c-13-31.63-33.25-65.25-66.38-94.87C142.8 198.2 36.75 192.2 7.75 192C3.375 192 0 195.4 0 199.9c.25 27.88 7.125 126.2 88.75 199.3C172.8 481 256 479.1 288 479.1s115.2 1.025 199.3-80.85C568.9 326 575.8 227.7 576 199.9C576 195.4 572.6 192 568.3 192zM288 302.6c12.75-18.87 27.62-35.75 44.13-50.5c19-18.62 39.5-33.37 60.25-45.25c-16.5-70.5-51.75-133-96.75-172.3c-4.125-3.5-11-3.5-15.12 0c-45 39.25-80.25 101.6-96.75 172.1c20.37 11.75 40.5 26.12 59.25 44.37C260 266.4 275.1 283.7 288 302.6z\"],\n    \"spaghetti-monster-flying\": [640, 512, [\"pastafarianism\"], \"f67b\", \"M624.5 347.7c-32.63-12.5-57.38 4.241-75.38 16.49c-17 11.5-23.25 14.37-31.38 11.37c-8.125-3.125-10.88-9.358-15.88-29.36c-3.375-13.12-7.5-29.47-18-42.72c2.25-3 4.5-5.875 6.375-8.625C500.5 304.5 513.8 312 532 312c33.1 0 50.87-25.75 61.1-42.88C604.6 253 609 248 616 248C629.3 248 640 237.3 640 224s-10.75-24-24-24c-34 0-50.88 25.75-62 42.88C543.4 259 539 264 532 264c-17.25 0-37.5-61.38-97.25-101.9L452 127.6C485.4 125.5 512 97.97 512 63.97C512 28.6 483.4 0 448 0s-64 28.6-64 63.97c0 13 4 25.15 10.62 35.28L376.5 135.5C359.5 130.9 340.9 128 320 128S280.5 130.9 263.5 135.5L245.4 99.25C252 89.13 256 76.97 256 63.97C256 28.6 227.4 0 192 0S128 28.6 128 63.97C128 97.97 154.5 125.5 188 127.6l17.25 34.5C145.6 202.5 125.1 264 108 264c-7 0-11.31-5-21.94-21.12C74.94 225.8 57.1 200 24 200C10.75 200 0 210.8 0 224s10.75 24 24 24c7 0 11.37 5 21.1 21.12C57.12 286.3 73.1 312 108 312c18.25 0 31.5-7.5 41.75-17.12C151.6 297.6 153.9 300.5 156.1 303.5c-10.5 13.25-14.62 29.59-18 42.72c-5 20-7.75 26.23-15.88 29.36c-8.125 3-14.37 .1314-31.37-11.37c-18.12-12.25-42.75-28.87-75.38-16.49c-12.38 4.75-18.62 18.61-13.88 30.98c4.625 12.38 18.62 18.62 30.88 13.87C40.75 389.6 46.88 392.4 64 403.9c13.5 9.125 30.75 20.86 52.38 20.86c7.125 0 14.88-1.248 23-4.373c32.63-12.5 40-41.34 45.25-62.46c2.25-8.75 4-14.49 6-18.86c16.62 13.62 37 25.86 61.63 34.23C242.3 410.3 220.1 464 192 464c-13.25 0-24 10.74-24 23.99S178.8 512 192 512c66.75 0 97-88.55 107.4-129.1C306.1 383.6 312.9 384 320 384s13.88-.4706 20.62-1.096C351 423.4 381.3 512 448 512c13.25 0 24-10.74 24-23.99S461.3 464 448 464c-28 0-50.25-53.74-60.25-90.74c24.75-8.375 45-20.56 61.63-34.19c2 4.375 3.75 10.11 6 18.86c5.375 21.12 12.62 49.96 45.25 62.46c8.25 3.125 15.88 4.373 23 4.373c21.62 0 38.83-11.74 52.46-20.86c17-11.5 23.29-14.37 31.42-11.37c12.38 4.75 26.25-1.492 30.88-13.87C643.1 366.3 637 352.5 624.5 347.7zM192 79.97c-8.875 0-16-7.125-16-16S183.1 47.98 192 47.98s16 7.118 16 15.99S200.9 79.97 192 79.97zM448 47.98c8.875 0 16 7.118 16 15.99s-7.125 16-16 16s-16-7.125-16-16S439.1 47.98 448 47.98z\"],\n    \"spell-check\": [576, 512, [], \"f891\", \"M566.6 265.4c-12.5-12.5-32.75-12.5-45.25 0L352 434.8l-73.38-73.38c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l96 96c6.25 6.25 14.44 9.368 22.62 9.368s16.38-3.118 22.63-9.368l192-192C579.1 298.1 579.1 277.9 566.6 265.4zM221.5 211.7l-80-192C136.6 7.796 124.9 .0147 112 .0147S87.44 7.796 82.47 19.7l-80 192C-4.328 228 3.375 246.8 19.69 253.5c16.36 6.812 35.06-.9375 41.84-17.22l5.131-12.31h90.68l5.131 12.31c5.109 12.28 17.02 19.69 29.55 19.69c4.094 0 8.266-.7812 12.3-2.469C220.6 246.8 228.3 228 221.5 211.7zM93.33 160L112 115.2l18.67 44.81H93.33zM288 256h80c44.11 0 80-35.87 80-79.1c0-23.15-10.03-43.85-25.79-58.47C428.3 106.3 432 93.65 432 80.01c0-44.13-35.89-80-79.1-80L288 .0147c-17.67 0-32 14.31-32 31.1v192C256 241.7 270.3 256 288 256zM320 64.01h32c8.828 0 16 7.188 16 16s-7.172 16-16 16h-32V64.01zM320 160h48c8.828 0 16 7.188 16 16s-7.172 16-16 16H320V160z\"],\n    \"spider\": [576, 512, [128375], \"f717\", \"M563.3 401.6c2.608 8.443-2.149 17.4-10.62 19.1l-15.35 4.709c-8.48 2.6-17.47-2.139-20.08-10.59L493.2 338l-79.79-31.8l53.47 62.15c5.08 5.904 6.972 13.89 5.08 21.44l-28.23 110.1c-2.151 8.57-10.87 13.78-19.47 11.64l-15.58-3.873c-8.609-2.141-13.84-10.83-11.69-19.4l25.2-98.02l-38.51-44.77c.1529 2.205 .6627 4.307 .6627 6.549c0 53.02-43.15 96-96.37 96S191.6 405 191.6 352c0-2.242 .5117-4.34 .6627-6.543l-38.51 44.76l25.2 98.02c2.151 8.574-3.084 17.26-11.69 19.4l-15.58 3.873c-8.603 2.141-17.32-3.072-19.47-11.64l-28.23-110.1c-1.894-7.543 0-15.53 5.08-21.44l53.47-62.15l-79.79 31.8l-24.01 77.74c-2.608 8.447-11.6 13.19-20.08 10.59l-15.35-4.709c-8.478-2.6-13.23-11.55-10.63-19.1l27.4-88.69c2.143-6.939 7.323-12.54 14.09-15.24L158.9 256l-104.7-41.73C47.43 211.6 42.26 205.1 40.11 199.1L12.72 110.4c-2.608-8.443 2.149-17.4 10.62-19.1l15.35-4.709c8.48-2.6 17.47 2.139 20.08 10.59l24.01 77.74l79.79 31.8L109.1 143.6C104 137.7 102.1 129.7 104 122.2l28.23-110.1c2.151-8.57 10.87-13.78 19.47-11.64l15.58 3.873C175.9 6.494 181.1 15.18 178.1 23.76L153.8 121.8L207.7 184.4l.1542-24.44C206.1 123.4 228.9 91.77 261.4 80.43c5.141-1.793 10.5 2.215 10.5 7.641V112h32.12V88.09c0-5.443 5.394-9.443 10.55-7.641C345.9 91.39 368.3 121 368.3 155.9c0 1.393-.1786 2.689-.2492 4.064L368.3 184.4l53.91-62.66l-25.2-98.02c-2.151-8.574 3.084-17.26 11.69-19.4l15.58-3.873c8.603-2.141 17.32 3.072 19.47 11.64l28.23 110.1c1.894 7.543 0 15.53-5.08 21.44l-53.47 62.15l79.79-31.8l24.01-77.74c2.608-8.447 11.6-13.19 20.08-10.59l15.35 4.709c8.478 2.6 13.23 11.55 10.63 19.1l-27.4 88.69c-2.143 6.939-7.323 12.54-14.09 15.24L417.1 256l104.7 41.73c6.754 2.691 11.92 8.283 14.07 15.21L563.3 401.6z\"],\n    \"spinner\": [512, 512, [], \"f110\", \"M304 48C304 74.51 282.5 96 256 96C229.5 96 208 74.51 208 48C208 21.49 229.5 0 256 0C282.5 0 304 21.49 304 48zM304 464C304 490.5 282.5 512 256 512C229.5 512 208 490.5 208 464C208 437.5 229.5 416 256 416C282.5 416 304 437.5 304 464zM0 256C0 229.5 21.49 208 48 208C74.51 208 96 229.5 96 256C96 282.5 74.51 304 48 304C21.49 304 0 282.5 0 256zM512 256C512 282.5 490.5 304 464 304C437.5 304 416 282.5 416 256C416 229.5 437.5 208 464 208C490.5 208 512 229.5 512 256zM74.98 437C56.23 418.3 56.23 387.9 74.98 369.1C93.73 350.4 124.1 350.4 142.9 369.1C161.6 387.9 161.6 418.3 142.9 437C124.1 455.8 93.73 455.8 74.98 437V437zM142.9 142.9C124.1 161.6 93.73 161.6 74.98 142.9C56.24 124.1 56.24 93.73 74.98 74.98C93.73 56.23 124.1 56.23 142.9 74.98C161.6 93.73 161.6 124.1 142.9 142.9zM369.1 369.1C387.9 350.4 418.3 350.4 437 369.1C455.8 387.9 455.8 418.3 437 437C418.3 455.8 387.9 455.8 369.1 437C350.4 418.3 350.4 387.9 369.1 369.1V369.1z\"],\n    \"splotch\": [512, 512, [], \"f5bc\", \"M349.3 47.38L367.9 116.1C374.6 142.1 393.2 162.3 417.6 171.2L475.8 192.4C497.5 200.3 512 221 512 244.2C512 261.8 503.6 278.4 489.4 288.8L406.9 348.1C393.3 358.9 385.7 374.1 386.7 391.8L389.8 442.4C392.1 480.1 362.2 511.9 324.4 511.9C308.8 511.9 293.8 506.4 281.1 496.4L236.1 458.2C221.1 444.7 200.9 437.3 180 437.3H171.6C165.1 437.3 160.4 437.8 154.8 438.9L87.81 451.9C63.82 456.6 39.53 445.5 27.41 424.3C17.39 406.7 17.39 385.2 27.41 367.7L55.11 319.2C60.99 308.9 64.09 297.3 64.09 285.4C64.09 272.3 60.33 259.6 53.27 248.6L8.796 179.4C-6.738 155.2-1.267 123.2 21.41 105.6C32.12 97.25 45.52 93.13 59.07 94.01L130.8 98.66C159.8 100.5 187.1 87.91 205.9 64.93L237.3 24.66C249.4 9.133 267.9 .0566 287.6 .0566C316.5 .0566 341.8 19.47 349.3 47.38V47.38z\"],\n    \"spoon\": [512, 512, [61873, 129348, \"utensil-spoon\"], \"f2e5\", \"M449.5 242.2C436.4 257.8 419.8 270 400.1 277.8C382.2 285.6 361.7 288.8 341.4 287C326.2 284.5 311.8 278.4 299.5 269.1L68.29 500.3C60.79 507.8 50.61 512 40 512C29.39 512 19.22 507.8 11.71 500.3C4.211 492.8-.0039 482.6-.0039 472C-.0039 461.4 4.211 451.2 11.71 443.7L243 212.5C233.7 200.2 227.6 185.8 225.1 170.6C223.3 150.3 226.5 129.9 234.3 111C242.1 92.22 254.3 75.56 269.9 62.47C337.8-5.437 433.1-20.28 482.7 29.35C532.3 78.95 517.4 174.2 449.5 242.2z\"],\n    \"spray-can\": [512, 512, [], \"f5bd\", \"M192 0C209.7 0 224 14.33 224 32V128H96V32C96 14.33 110.3 0 128 0H192zM0 256C0 202.1 42.98 160 96 160H224C277 160 320 202.1 320 256V464C320 490.5 298.5 512 272 512H48C21.49 512 0 490.5 0 464V256zM160 256C115.8 256 80 291.8 80 336C80 380.2 115.8 416 160 416C204.2 416 240 380.2 240 336C240 291.8 204.2 256 160 256zM320 64C320 81.67 305.7 96 288 96C270.3 96 256 81.67 256 64C256 46.33 270.3 32 288 32C305.7 32 320 46.33 320 64zM352 64C352 46.33 366.3 32 384 32C401.7 32 416 46.33 416 64C416 81.67 401.7 96 384 96C366.3 96 352 81.67 352 64zM512 64C512 81.67 497.7 96 480 96C462.3 96 448 81.67 448 64C448 46.33 462.3 32 480 32C497.7 32 512 46.33 512 64zM448 160C448 142.3 462.3 128 480 128C497.7 128 512 142.3 512 160C512 177.7 497.7 192 480 192C462.3 192 448 177.7 448 160zM512 256C512 273.7 497.7 288 480 288C462.3 288 448 273.7 448 256C448 238.3 462.3 224 480 224C497.7 224 512 238.3 512 256zM352 160C352 142.3 366.3 128 384 128C401.7 128 416 142.3 416 160C416 177.7 401.7 192 384 192C366.3 192 352 177.7 352 160z\"],\n    \"spray-can-sparkles\": [512, 512, [\"air-freshener\"], \"f5d0\", \"M96 32C96 14.33 110.3 0 128 0H192C209.7 0 224 14.33 224 32V128H96V32zM224 160C277 160 320 202.1 320 256V464C320 490.5 298.5 512 272 512H48C21.49 512 0 490.5 0 464V256C0 202.1 42.98 160 96 160H224zM160 416C204.2 416 240 380.2 240 336C240 291.8 204.2 256 160 256C115.8 256 80 291.8 80 336C80 380.2 115.8 416 160 416zM384 48C384 49.36 383 50.97 381.8 51.58L352 64L339.6 93.78C338.1 95 337.4 96 336 96C334.6 96 333 95 332.4 93.78L320 64L290.2 51.58C288.1 50.97 288 49.36 288 48C288 46.62 288.1 45.03 290.2 44.42L320 32L332.4 2.219C333 1 334.6 0 336 0C337.4 0 338.1 1 339.6 2.219L352 32L381.8 44.42C383 45.03 384 46.62 384 48zM460.4 93.78L448 64L418.2 51.58C416.1 50.97 416 49.36 416 48C416 46.62 416.1 45.03 418.2 44.42L448 32L460.4 2.219C461 1 462.6 0 464 0C465.4 0 466.1 1 467.6 2.219L480 32L509.8 44.42C511 45.03 512 46.62 512 48C512 49.36 511 50.97 509.8 51.58L480 64L467.6 93.78C466.1 95 465.4 96 464 96C462.6 96 461 95 460.4 93.78zM467.6 194.2L480 224L509.8 236.4C511 237 512 238.6 512 240C512 241.4 511 242.1 509.8 243.6L480 256L467.6 285.8C466.1 287 465.4 288 464 288C462.6 288 461 287 460.4 285.8L448 256L418.2 243.6C416.1 242.1 416 241.4 416 240C416 238.6 416.1 237 418.2 236.4L448 224L460.4 194.2C461 193 462.6 192 464 192C465.4 192 466.1 193 467.6 194.2zM448 144C448 145.4 447 146.1 445.8 147.6L416 160L403.6 189.8C402.1 191 401.4 192 400 192C398.6 192 397 191 396.4 189.8L384 160L354.2 147.6C352.1 146.1 352 145.4 352 144C352 142.6 352.1 141 354.2 140.4L384 128L396.4 98.22C397 97 398.6 96 400 96C401.4 96 402.1 97 403.6 98.22L416 128L445.8 140.4C447 141 448 142.6 448 144z\"],\n    \"square\": [448, 512, [9723, 9724, 61590, 9632], \"f0c8\", \"M0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96z\"],\n    \"square-arrow-up-right\": [448, 512, [\"external-link-square\"], \"f14c\", \"M384 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM344 312c0 17.69-14.31 32-32 32s-32-14.31-32-32V245.3l-121.4 121.4C152.4 372.9 144.2 376 136 376s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L234.8 200H168c-17.69 0-32-14.31-32-32s14.31-32 32-32h144c17.69 0 32 14.31 32 32V312z\"],\n    \"square-caret-down\": [448, 512, [\"caret-square-down\"], \"f150\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM345.6 232.3l-104 112C237 349.2 230.7 352 224 352s-13.03-2.781-17.59-7.656l-104-112c-6.5-7-8.219-17.19-4.407-25.94C101.8 197.7 110.5 192 120 192h208c9.531 0 18.19 5.656 21.1 14.41C353.8 215.2 352.1 225.3 345.6 232.3z\"],\n    \"square-caret-left\": [448, 512, [\"caret-square-left\"], \"f191\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM288 360c0 9.531-5.656 18.19-14.41 22C270.5 383.3 267.3 384 264 384c-5.938 0-11.81-2.219-16.34-6.406l-112-104C130.8 269 128 262.7 128 256s2.781-13.03 7.656-17.59l112-104c7.031-6.469 17.22-8.156 25.94-4.406C282.3 133.8 288 142.5 288 152V360z\"],\n    \"square-caret-right\": [448, 512, [\"caret-square-right\"], \"f152\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM312.3 273.6l-112 104C195.8 381.8 189.9 384 184 384c-3.25 0-6.5-.6562-9.594-2C165.7 378.2 160 369.5 160 360v-208c0-9.531 5.656-18.19 14.41-22c8.75-3.75 18.94-2.062 25.94 4.406l112 104C317.2 242.1 320 249.3 320 256S317.2 269 312.3 273.6z\"],\n    \"square-caret-up\": [448, 512, [\"caret-square-up\"], \"f151\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM349.1 305.6C346.2 314.3 337.5 320 328 320h-208c-9.531 0-18.19-5.656-22-14.41C94.19 296.8 95.91 286.7 102.4 279.7l104-112c9.125-9.75 26.06-9.75 35.19 0l104 112C352.1 286.7 353.8 296.8 349.1 305.6z\"],\n    \"square-check\": [448, 512, [9989, 61510, 9745, \"check-square\"], \"f14a\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM339.8 211.8C350.7 200.9 350.7 183.1 339.8 172.2C328.9 161.3 311.1 161.3 300.2 172.2L192 280.4L147.8 236.2C136.9 225.3 119.1 225.3 108.2 236.2C97.27 247.1 97.27 264.9 108.2 275.8L172.2 339.8C183.1 350.7 200.9 350.7 211.8 339.8L339.8 211.8z\"],\n    \"square-envelope\": [448, 512, [\"envelope-square\"], \"f199\", \"M384 32H64C28.63 32 0 60.63 0 96v320c0 35.38 28.62 64 64 64h320c35.38 0 64-28.62 64-64V96C448 60.63 419.4 32 384 32zM384 336c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32V225.9l138.5 69.27C209.3 298.5 216.6 300.2 224 300.2s14.75-1.688 21.47-5.047L384 225.9V336zM384 190.1l-152.8 76.42c-4.5 2.25-9.812 2.25-14.31 0L64 190.1V176c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32V190.1z\"],\n    \"square-full\": [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11036, 11035], \"f45c\", \"M0 0H512V512H0V0z\"],\n    \"square-h\": [448, 512, [\"h-square\"], \"f0fd\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96C448 60.65 419.3 32 384 32zM336 360c0 13.25-10.75 24-24 24S288 373.3 288 360v-80H160v80C160 373.3 149.3 384 136 384S112 373.3 112 360v-208C112 138.8 122.8 128 136 128S160 138.8 160 152v80h128v-80C288 138.8 298.8 128 312 128s24 10.75 24 24V360z\"],\n    \"square-minus\": [448, 512, [61767, \"minus-square\"], \"f146\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM136 232C122.7 232 112 242.7 112 256C112 269.3 122.7 280 136 280H312C325.3 280 336 269.3 336 256C336 242.7 325.3 232 312 232H136z\"],\n    \"square-parking\": [448, 512, [127359, \"parking\"], \"f540\", \"M192 256V192H240C257.7 192 272 206.3 272 224C272 241.7 257.7 256 240 256H192zM384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM336 224C336 170.1 293 128 240 128H168C145.9 128 128 145.9 128 168V352C128 369.7 142.3 384 160 384C177.7 384 192 369.7 192 352V320H240C293 320 336 277 336 224z\"],\n    \"square-pen\": [448, 512, [\"pen-square\", \"pencil-square\"], \"f14b\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM325.8 139.7C310.1 124.1 284.8 124.1 269.2 139.7L247.8 161.1L318.7 232.1L340.1 210.7C355.8 195 355.8 169.7 340.1 154.1L325.8 139.7zM111.5 303.8L96.48 363.1C95.11 369.4 96.71 375.2 100.7 379.2C104.7 383.1 110.4 384.7 115.9 383.4L176 368.3C181.6 366.9 186.8 364 190.9 359.9L296.1 254.7L225.1 183.8L119.9 288.1C115.8 293.1 112.9 298.2 111.5 303.8z\"],\n    \"square-phone\": [448, 512, [\"phone-square\"], \"f098\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96C448 60.65 419.3 32 384 32zM351.6 321.5l-11.62 50.39c-1.633 7.125-7.9 12.11-15.24 12.11c-126.1 0-228.7-102.6-228.7-228.8c0-7.328 4.984-13.59 12.11-15.22l50.38-11.63c7.344-1.703 14.88 2.109 17.93 9.062l23.27 54.28c2.719 6.391 .8828 13.83-4.492 18.22L168.3 232c16.99 34.61 45.14 62.75 79.77 79.75l22.02-26.91c4.344-5.391 11.85-7.25 18.24-4.484l54.24 23.25C349.5 306.6 353.3 314.2 351.6 321.5z\"],\n    \"square-phone-flip\": [448, 512, [\"phone-square-alt\"], \"f87b\", \"M0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64H64C28.65 32 0 60.65 0 96zM105.5 303.6l54.24-23.25c6.391-2.766 13.9-.9062 18.24 4.484l22.02 26.91c34.63-17 62.77-45.14 79.77-79.75l-26.91-22.05c-5.375-4.391-7.211-11.83-4.492-18.22l23.27-54.28c3.047-6.953 10.59-10.77 17.93-9.062l50.38 11.63c7.125 1.625 12.11 7.891 12.11 15.22c0 126.1-102.6 228.8-228.7 228.8c-7.336 0-13.6-4.984-15.24-12.11l-11.62-50.39C94.71 314.2 98.5 306.6 105.5 303.6z\"],\n    \"square-plus\": [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM224 368C237.3 368 248 357.3 248 344V280H312C325.3 280 336 269.3 336 256C336 242.7 325.3 232 312 232H248V168C248 154.7 237.3 144 224 144C210.7 144 200 154.7 200 168V232H136C122.7 232 112 242.7 112 256C112 269.3 122.7 280 136 280H200V344C200 357.3 210.7 368 224 368z\"],\n    \"square-poll-horizontal\": [448, 512, [\"poll-h\"], \"f682\", \"M448 416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416zM256 160C256 142.3 241.7 128 224 128H128C110.3 128 96 142.3 96 160C96 177.7 110.3 192 128 192H224C241.7 192 256 177.7 256 160zM128 224C110.3 224 96 238.3 96 256C96 273.7 110.3 288 128 288H320C337.7 288 352 273.7 352 256C352 238.3 337.7 224 320 224H128zM192 352C192 334.3 177.7 320 160 320H128C110.3 320 96 334.3 96 352C96 369.7 110.3 384 128 384H160C177.7 384 192 369.7 192 352z\"],\n    \"square-poll-vertical\": [448, 512, [\"poll\"], \"f681\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM128 224C110.3 224 96 238.3 96 256V352C96 369.7 110.3 384 128 384C145.7 384 160 369.7 160 352V256C160 238.3 145.7 224 128 224zM192 352C192 369.7 206.3 384 224 384C241.7 384 256 369.7 256 352V160C256 142.3 241.7 128 224 128C206.3 128 192 142.3 192 160V352zM320 288C302.3 288 288 302.3 288 320V352C288 369.7 302.3 384 320 384C337.7 384 352 369.7 352 352V320C352 302.3 337.7 288 320 288z\"],\n    \"square-root-variable\": [576, 512, [\"square-root-alt\"], \"f698\", \"M576 32.01c0-17.69-14.33-31.1-32-31.1l-224-.0049c-14.69 0-27.48 10-31.05 24.25L197.9 388.3L124.6 241.7C119.2 230.9 108.1 224 96 224L32 224c-17.67 0-32 14.31-32 31.1s14.33 32 32 32h44.22l103.2 206.3c5.469 10.91 16.6 17.68 28.61 17.68c1.172 0 2.323-.0576 3.495-.1826c13.31-1.469 24.31-11.06 27.56-24.06l105.9-423.8H544C561.7 64.01 576 49.7 576 32.01zM566.6 233.4c-12.5-12.5-32.75-12.5-45.25 0L480 274.8l-41.38-41.37c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l41.38 41.38l-41.38 41.38c-12.5 12.5-12.5 32.75 0 45.25C399.6 412.9 407.8 416 416 416s16.38-3.125 22.62-9.375L480 365.3l41.38 41.38C527.6 412.9 535.8 416 544 416s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25l-41.38-41.38L566.6 278.6C579.1 266.1 579.1 245.9 566.6 233.4z\"],\n    \"square-rss\": [448, 512, [\"rss-square\"], \"f143\", \"M384 32H64C28.65 32 0 60.66 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.66 419.3 32 384 32zM150.6 374.6C144.4 380.9 136.2 384 128 384s-16.38-3.121-22.63-9.371c-12.5-12.5-12.5-32.76 0-45.26C111.6 323.1 119.8 320 128 320s16.38 3.121 22.63 9.371C163.1 341.9 163.1 362.1 150.6 374.6zM249.6 383.9C249 383.1 248.5 384 247.1 384c-12.53 0-23.09-9.75-23.92-22.44C220.5 306.9 173.1 259.5 118.4 255.9c-13.22-.8438-23.25-12.28-22.39-25.5c.8594-13.25 12.41-22.81 25.52-22.38c77.86 5.062 145.3 72.5 150.4 150.4C272.8 371.7 262.8 383.1 249.6 383.9zM345 383.1C344.7 384 344.3 384 343.1 384c-12.8 0-23.42-10.09-23.97-23C315.6 254.6 225.4 164.4 119 159.1C105.8 159.4 95.47 148.3 96.02 135C96.58 121.8 107.9 111.2 121 112c130.7 5.469 241.5 116.3 246.1 246.1C368.5 372.3 358.3 383.4 345 383.1z\"],\n    \"square-share-nodes\": [448, 512, [\"share-alt-square\"], \"f1e1\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM320 96C284.7 96 256 124.7 256 160C256 162.5 256.1 164.9 256.4 167.3L174.5 212C162.8 199.7 146.3 192 128 192C92.65 192 64 220.7 64 256C64 291.3 92.65 320 128 320C146.3 320 162.8 312.3 174.5 299.1L256.4 344.7C256.1 347.1 256 349.5 256 352C256 387.3 284.7 416 320 416C355.3 416 384 387.3 384 352C384 316.7 355.3 288 320 288C304.6 288 290.5 293.4 279.4 302.5L194.1 256L279.4 209.5C290.5 218.6 304.6 224 320 224C355.3 224 384 195.3 384 160C384 124.7 355.3 96 320 96V96z\"],\n    \"square-up-right\": [448, 512, [8599, \"external-link-square-alt\"], \"f360\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.34 28.65 64 64 64h320c35.35 0 64-28.66 64-64V96C448 60.65 419.3 32 384 32zM330.5 323.9c0 6.473-3.889 12.3-9.877 14.78c-5.979 2.484-12.86 1.105-17.44-3.469l-45.25-45.25l-67.92 67.92c-12.5 12.5-32.72 12.46-45.21-.0411l-22.63-22.63C109.7 322.7 109.6 302.5 122.1 289.1l67.92-67.92L144.8 176.8C140.2 172.2 138.8 165.3 141.3 159.4c2.477-5.984 8.309-9.875 14.78-9.875h158.4c8.835 0 15.1 7.163 15.1 15.1V323.9z\"],\n    \"square-xmark\": [448, 512, [10062, \"times-square\", \"xmark-square\"], \"f2d3\", \"M384 32C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H384zM143 208.1L190.1 255.1L143 303C133.7 312.4 133.7 327.6 143 336.1C152.4 346.3 167.6 346.3 176.1 336.1L223.1 289.9L271 336.1C280.4 346.3 295.6 346.3 304.1 336.1C314.3 327.6 314.3 312.4 304.1 303L257.9 255.1L304.1 208.1C314.3 199.6 314.3 184.4 304.1 175C295.6 165.7 280.4 165.7 271 175L223.1 222.1L176.1 175C167.6 165.7 152.4 165.7 143 175C133.7 184.4 133.7 199.6 143 208.1V208.1z\"],\n    \"stairs\": [576, 512, [], \"e289\", \"M576 64c0 17.67-14.31 32-32 32h-96v96c0 17.67-14.31 32-32 32h-96v96c0 17.67-14.31 32-32 32H192v96c0 17.67-14.31 32-32 32H32c-17.69 0-32-14.33-32-32s14.31-32 32-32h96v-96c0-17.67 14.31-32 32-32h96V192c0-17.67 14.31-32 32-32h96V64c0-17.67 14.31-32 32-32h128C561.7 32 576 46.33 576 64z\"],\n    \"stamp\": [512, 512, [], \"f5bf\", \"M366.2 256H400C461.9 256 512 306.1 512 368C512 388.9 498.6 406.7 480 413.3V464C480 490.5 458.5 512 432 512H80C53.49 512 32 490.5 32 464V413.3C13.36 406.7 0 388.9 0 368C0 306.1 50.14 256 112 256H145.8C175.7 256 200 231.7 200 201.8C200 184.3 190.8 168.5 180.1 154.8C167.5 138.5 160 118.1 160 96C160 42.98 202.1 0 256 0C309 0 352 42.98 352 96C352 118.1 344.5 138.5 331.9 154.8C321.2 168.5 312 184.3 312 201.8C312 231.7 336.3 256 366.2 256zM416 416H96V448H416V416z\"],\n    \"star\": [576, 512, [61446, 11088], \"f005\", \"M381.2 150.3L524.9 171.5C536.8 173.2 546.8 181.6 550.6 193.1C554.4 204.7 551.3 217.3 542.7 225.9L438.5 328.1L463.1 474.7C465.1 486.7 460.2 498.9 450.2 506C440.3 513.1 427.2 514 416.5 508.3L288.1 439.8L159.8 508.3C149 514 135.9 513.1 126 506C116.1 498.9 111.1 486.7 113.2 474.7L137.8 328.1L33.58 225.9C24.97 217.3 21.91 204.7 25.69 193.1C29.46 181.6 39.43 173.2 51.42 171.5L195 150.3L259.4 17.97C264.7 6.954 275.9-.0391 288.1-.0391C300.4-.0391 311.6 6.954 316.9 17.97L381.2 150.3z\"],\n    \"star-and-crescent\": [512, 512, [9770], \"f699\", \"M340.5 466.4c-1.5 0-6.875 .5-9.25 .5c-116.3 0-210.8-94.63-210.8-210.9s94.5-210.9 210.8-210.9c2.375 0 7.75 .5 9.25 .5c7.125 0 13.25-5 14.75-12c1.375-7.25-2.625-14.5-9.5-17.12c-29.13-11-59.38-16.5-89.75-16.5c-141.1 0-256 114.9-256 256s114.9 256 256 256c30.25 0 60.25-5.5 89.38-16.38c5.875-2 10.25-7.625 10.25-14.25C355.6 473.4 349.3 466.4 340.5 466.4zM503.5 213.9l-76.38-11.12L392.9 133.5C391.1 129.9 387.5 128 384 128c-3.5 0-7.125 1.875-9 5.5l-34.13 69.25l-76.38 11.12c-8.125 1.125-11.38 11.25-5.5 17l55.25 53.88l-13 76c-1.125 6.5 3.1 11.75 9.75 11.75c1.5 0 3.125-.375 4.625-1.25l68.38-35.88l68.25 35.88c1.625 .875 3.125 1.25 4.75 1.25c5.75 0 10.88-5.25 9.75-11.75l-13-76l55.25-53.88C514.9 225.1 511.6 214.1 503.5 213.9z\"],\n    \"star-half\": [576, 512, [61731], \"f089\", \"M288 439.8L159.8 508.3C149 514 135.9 513.1 126 506C116.1 498.9 111.1 486.7 113.2 474.7L137.8 328.1L33.58 225.9C24.97 217.3 21.91 204.7 25.69 193.1C29.46 181.6 39.43 173.2 51.42 171.5L195 150.3L259.4 17.97C264.7 6.995 275.8 .0131 287.1-.0391L288 439.8zM433.2 512C432.1 512.1 431 512.1 429.9 512H433.2z\"],\n    \"star-half-stroke\": [576, 512, [\"star-half-alt\"], \"f5c0\", \"M463.1 474.7C465.1 486.7 460.2 498.9 450.2 506C440.3 513.1 427.2 514 416.5 508.3L288.1 439.8L159.8 508.3C149 514 135.9 513.1 126 506C116.1 498.9 111.1 486.7 113.2 474.7L137.8 328.1L33.58 225.9C24.97 217.3 21.91 204.7 25.69 193.1C29.46 181.6 39.43 173.2 51.42 171.5L195 150.3L259.4 17.97C264.7 6.954 275.9-.0391 288.1-.0391C300.4-.0391 311.6 6.954 316.9 17.97L381.2 150.3L524.9 171.5C536.8 173.2 546.8 181.6 550.6 193.1C554.4 204.7 551.3 217.3 542.7 225.9L438.5 328.1L463.1 474.7zM288 376.4L288.1 376.3L399.7 435.9L378.4 309.6L469.2 219.8L343.8 201.4L288.1 86.85L288 87.14V376.4z\"],\n    \"star-of-david\": [512, 512, [10017], \"f69a\", \"M490.7 345.4L435.6 256l55.1-89.38c14.87-24.25-3.62-54.61-33.12-54.61l-110.6-.005l-57.87-93.1C281.7 6.003 268.9 0 256 0C243.1 0 230.3 6.003 222.9 18L165 112H54.39c-29.62 0-47.99 30.37-33.12 54.62L76.37 256l-55.1 89.38C6.4 369.6 24.77 399.1 54.39 399.1h110.6l57.87 93.1C230.3 505.1 243.1 512 256 512c12.88 0 25.74-6.002 33.12-18l57.83-93.1h110.7C487.2 399.1 505.6 369.6 490.7 345.4zM256 73.77l23.59 38.23H232.5L256 73.77zM89.48 343.1l20.59-33.35l20.45 33.35H89.48zM110 201.3L89.48 168h41.04L110 201.3zM256 438.2l-23.59-38.25h47.08L256 438.2zM313.9 343.1H198L143.8 256l54.22-87.1h116L368.3 256L313.9 343.1zM381.3 343.1l20.67-33.29l20.52 33.29H381.3zM401.1 201.3l-20.51-33.29h41.04L401.1 201.3z\"],\n    \"star-of-life\": [512, 512, [], \"f621\", \"M489.1 363.3l-24.03 41.59c-6.635 11.48-21.33 15.41-32.82 8.78l-129.1-74.56V488c0 13.25-10.75 24-24.02 24H231.1c-13.27 0-24.02-10.75-24.02-24v-148.9L78.87 413.7c-11.49 6.629-26.19 2.698-32.82-8.78l-24.03-41.59c-6.635-11.48-2.718-26.14 8.774-32.77L159.9 256L30.8 181.5C19.3 174.8 15.39 160.2 22.02 148.7l24.03-41.59c6.635-11.48 21.33-15.41 32.82-8.781l129.1 74.56L207.1 24c0-13.25 10.75-24 24.02-24h48.04c13.27 0 24.02 10.75 24.02 24l.0005 148.9l129.1-74.56c11.49-6.629 26.19-2.698 32.82 8.78l24.02 41.59c6.637 11.48 2.718 26.14-8.774 32.77L352.1 256l129.1 74.53C492.7 337.2 496.6 351.8 489.1 363.3z\"],\n    \"sterling-sign\": [320, 512, [163, \"gbp\", \"pound-sign\"], \"f154\", \"M112 223.1H224C241.7 223.1 256 238.3 256 255.1C256 273.7 241.7 287.1 224 287.1H112V332.5C112 361.5 104.1 389.1 89.2 414.9L88.52 416H288C305.7 416 320 430.3 320 448C320 465.7 305.7 480 288 480H32C20.47 480 9.834 473.8 4.154 463.8C-1.527 453.7-1.371 441.4 4.56 431.5L34.32 381.9C43.27 367 48 349.9 48 332.5V288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H48V160.4C48 89.47 105.5 32 176.4 32C190.2 32 203.9 34.22 216.1 38.59L298.1 65.64C314.9 71.23 323.9 89.35 318.4 106.1C312.8 122.9 294.6 131.9 277.9 126.4L196.7 99.3C190.2 97.12 183.3 96 176.4 96C140.8 96 112 124.8 112 160.4V223.1z\"],\n    \"stethoscope\": [576, 512, [129658], \"f0f1\", \"M480 112c-44.18 0-80 35.82-80 80c0 32.84 19.81 60.98 48.11 73.31v78.7c0 57.25-50.25 104-112 104c-60 0-109.3-44.1-111.9-99.23C296.1 333.8 352 269.3 352 191.1V36.59c0-11.38-8.15-21.38-19.28-23.5L269.8 .4775c-13-2.625-25.54 5.766-28.16 18.77L238.4 34.99c-2.625 13 5.812 25.59 18.81 28.22l30.69 6.059L287.9 190.7c0 52.88-42.13 96.63-95.13 97.13c-53.38 .5-96.81-42.56-96.81-95.93L95.89 69.37l30.72-6.112c13-2.5 21.41-15.15 18.78-28.15L142.3 19.37c-2.5-13-15.15-21.41-28.15-18.78L51.28 12.99C40.15 15.24 32 25.09 32 36.59v155.4c0 77.25 55.11 142 128.1 156.8C162.7 439.3 240.6 512 336 512c97 0 176-75.37 176-168V265.3c28.23-12.36 48-40.46 48-73.25C560 147.8 524.2 112 480 112zM480 216c-13.25 0-24-10.75-24-24S466.7 168 480 168S504 178.7 504 192S493.3 216 480 216z\"],\n    \"stop\": [384, 512, [9209], \"f04d\", \"M384 128v255.1c0 35.35-28.65 64-64 64H64c-35.35 0-64-28.65-64-64V128c0-35.35 28.65-64 64-64H320C355.3 64 384 92.65 384 128z\"],\n    \"stopwatch\": [448, 512, [9201], \"f2f2\", \"M272 0C289.7 0 304 14.33 304 32C304 49.67 289.7 64 272 64H256V98.45C293.5 104.2 327.7 120 355.7 143L377.4 121.4C389.9 108.9 410.1 108.9 422.6 121.4C435.1 133.9 435.1 154.1 422.6 166.6L398.5 190.8C419.7 223.3 432 262.2 432 304C432 418.9 338.9 512 224 512C109.1 512 16 418.9 16 304C16 200 92.32 113.8 192 98.45V64H176C158.3 64 144 49.67 144 32C144 14.33 158.3 0 176 0L272 0zM248 192C248 178.7 237.3 168 224 168C210.7 168 200 178.7 200 192V320C200 333.3 210.7 344 224 344C237.3 344 248 333.3 248 320V192z\"],\n    \"stopwatch-20\": [448, 512, [], \"e06f\", \"M276 256C276 249.4 281.4 244 288 244C294.6 244 300 249.4 300 256V352C300 358.6 294.6 364 288 364C281.4 364 276 358.6 276 352V256zM272 0C289.7 0 304 14.33 304 32C304 49.67 289.7 64 272 64H256V98.45C293.5 104.2 327.7 120 355.7 143L377.4 121.4C389.9 108.9 410.1 108.9 422.6 121.4C435.1 133.9 435.1 154.1 422.6 166.6L398.5 190.8C419.7 223.3 432 262.2 432 304C432 418.9 338.9 512 224 512C109.1 512 16 418.9 16 304C16 200 92.32 113.8 192 98.45V64H176C158.3 64 144 49.67 144 32C144 14.33 158.3 0 176 0L272 0zM288 204C259.3 204 236 227.3 236 256V352C236 380.7 259.3 404 288 404C316.7 404 340 380.7 340 352V256C340 227.3 316.7 204 288 204zM172 256.5V258.8C172 262.4 170.7 265.9 168.3 268.6L129.2 312.5C115.5 327.9 108 347.8 108 368.3V384C108 395 116.1 404 128 404H192C203 404 212 395 212 384C212 372.1 203 364 192 364H148.2C149.1 354.8 152.9 346.1 159.1 339.1L198.2 295.2C207.1 285.1 211.1 272.2 211.1 258.8V256.5C211.1 227.5 188.5 204 159.5 204C136.8 204 116.8 218.5 109.6 239.9L109 241.7C105.5 252.2 111.2 263.5 121.7 266.1C132.2 270.5 143.5 264.8 146.1 254.3L147.6 252.6C149.3 247.5 154.1 244 159.5 244C166.4 244 171.1 249.6 171.1 256.5L172 256.5z\"],\n    \"store\": [576, 512, [], \"f54e\", \"M495.5 223.2C491.6 223.7 487.6 224 483.4 224C457.4 224 434.2 212.6 418.3 195C402.4 212.6 379.2 224 353.1 224C327 224 303.8 212.6 287.9 195C272 212.6 248.9 224 222.7 224C196.7 224 173.5 212.6 157.6 195C141.7 212.6 118.5 224 92.36 224C88.3 224 84.21 223.7 80.24 223.2C24.92 215.8-1.255 150.6 28.33 103.8L85.66 13.13C90.76 4.979 99.87 0 109.6 0H466.4C476.1 0 485.2 4.978 490.3 13.13L547.6 103.8C577.3 150.7 551 215.8 495.5 223.2H495.5zM499.7 254.9C503.1 254.4 508 253.6 512 252.6V448C512 483.3 483.3 512 448 512H128C92.66 512 64 483.3 64 448V252.6C67.87 253.6 71.86 254.4 75.97 254.9L76.09 254.9C81.35 255.6 86.83 256 92.36 256C104.8 256 116.8 254.1 128 250.6V384H448V250.7C459.2 254.1 471.1 256 483.4 256C489 256 494.4 255.6 499.7 254.9L499.7 254.9z\"],\n    \"store-slash\": [640, 512, [], \"e071\", \"M94.92 49.09L117.7 13.13C122.8 4.98 131.9 .0007 141.6 .0007H498.4C508.1 .0007 517.2 4.979 522.3 13.13L579.6 103.8C609.3 150.7 583 215.8 527.5 223.2C523.6 223.7 519.6 224 515.4 224C489.4 224 466.2 212.6 450.3 195C434.4 212.6 411.2 224 385.1 224C359 224 335.8 212.6 319.9 195C314.4 201.1 308.1 206.4 301.2 210.7L480 350.9V250.7C491.2 254.1 503.1 256 515.4 256C521 256 526.4 255.6 531.7 254.9L531.7 254.9C535.1 254.4 540 253.6 544 252.6V401.1L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L94.92 49.09zM112.2 223.2C68.36 217.3 42.82 175.1 48.9 134.5L155.3 218.4C145.7 222 135.3 224 124.4 224C120.3 224 116.2 223.7 112.2 223.2V223.2zM160 384H365.5L514.9 501.7C504.8 508.2 492.9 512 480 512H160C124.7 512 96 483.3 96 448V252.6C99.87 253.6 103.9 254.4 107.1 254.9L108.1 254.9C113.3 255.6 118.8 256 124.4 256C136.8 256 148.8 254.1 160 250.6V384z\"],\n    \"street-view\": [512, 512, [], \"f21d\", \"M320 64C320 99.35 291.3 128 256 128C220.7 128 192 99.35 192 64C192 28.65 220.7 0 256 0C291.3 0 320 28.65 320 64zM288 160C323.3 160 352 188.7 352 224V272C352 289.7 337.7 304 320 304H318.2L307.2 403.5C305.4 419.7 291.7 432 275.4 432H236.6C220.3 432 206.6 419.7 204.8 403.5L193.8 304H192C174.3 304 160 289.7 160 272V224C160 188.7 188.7 160 224 160H288zM63.27 414.7C60.09 416.3 57.47 417.8 55.33 419.2C51.7 421.6 51.72 426.4 55.34 428.8C64.15 434.6 78.48 440.6 98.33 446.1C137.7 456.1 193.5 464 256 464C318.5 464 374.3 456.1 413.7 446.1C433.5 440.6 447.9 434.6 456.7 428.8C460.3 426.4 460.3 421.6 456.7 419.2C454.5 417.8 451.9 416.3 448.7 414.7C433.4 406.1 409.9 399.8 379.7 394.2C366.6 391.8 358 379.3 360.4 366.3C362.8 353.3 375.3 344.6 388.3 347C420.8 352.9 449.2 361.2 470.3 371.8C480.8 377.1 490.6 383.5 498 391.4C505.6 399.5 512 410.5 512 424C512 445.4 496.5 460.1 482.9 469C468.2 478.6 448.6 486.3 426.4 492.4C381.8 504.7 321.6 512 256 512C190.4 512 130.2 504.7 85.57 492.4C63.44 486.3 43.79 478.6 29.12 469C15.46 460.1 0 445.4 0 424C0 410.5 6.376 399.5 13.96 391.4C21.44 383.5 31.24 377.1 41.72 371.8C62.75 361.2 91.24 352.9 123.7 347C136.7 344.6 149.2 353.3 151.6 366.3C153.1 379.3 145.4 391.8 132.3 394.2C102.1 399.8 78.57 406.1 63.27 414.7H63.27z\"],\n    \"strikethrough\": [512, 512, [], \"f0cc\", \"M332.2 319.9c17.22 12.17 22.33 26.51 18.61 48.21c-3.031 17.59-10.88 29.34-24.72 36.99c-35.44 19.75-108.5 11.96-186-19.68c-16.34-6.686-35.03 1.156-41.72 17.53s1.188 35.05 17.53 41.71c31.75 12.93 95.69 35.37 157.6 35.37c29.62 0 58.81-5.156 83.72-18.96c30.81-17.09 50.44-45.46 56.72-82.11c3.998-23.27 2.168-42.58-3.488-59.05H332.2zM488 239.9l-176.5-.0309c-15.85-5.613-31.83-10.34-46.7-14.62c-85.47-24.62-110.9-39.05-103.7-81.33c2.5-14.53 10.16-25.96 22.72-34.03c20.47-13.15 64.06-23.84 155.4 .3438c17.09 4.531 34.59-5.654 39.13-22.74c4.531-17.09-5.656-34.59-22.75-39.12c-91.31-24.18-160.7-21.62-206.3 7.654C121.8 73.72 103.6 101.1 98.09 133.1C89.26 184.5 107.9 217.3 137.2 239.9L24 239.9c-13.25 0-24 10.75-24 23.1c0 13.25 10.75 23.1 24 23.1h464c13.25 0 24-10.75 24-23.1C512 250.7 501.3 239.9 488 239.9z\"],\n    \"stroopwafel\": [512, 512, [], \"f551\", \"M188.1 210.8l-45.25 45.25l45.25 45.25l45.25-45.25L188.1 210.8zM301.2 188.1l-45.25-45.25L210.7 188.1l45.25 45.25L301.2 188.1zM210.7 323.9l45.25 45.25l45.25-45.25L255.1 278.6L210.7 323.9zM256 16c-132.5 0-240 107.5-240 240s107.5 240 240 240s240-107.5 240-240S388.5 16 256 16zM442.6 295.6l-11.25 11.25c-3.125 3.125-8.25 3.125-11.38 0L391.8 278.6l-45.25 45.25l34 33.88l16.88-16.88c3.125-3.125 8.251-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-16.88 16.88l16.88 17c3.125 3.125 3.125 8.25 0 11.38l-11.25 11.25c-3.125 3.125-8.251 3.125-11.38 0l-16.88-17l-17 17c-3.125 3.125-8.25 3.125-11.38 0l-11.25-11.25c-3.125-3.125-3.125-8.25 0-11.38l17-17l-34-33.88l-45.25 45.25l28.25 28.25c3.125 3.125 3.125 8.25 0 11.38l-11.25 11.25c-3.125 3.125-8.25 3.125-11.38 0l-28.25-28.25L227.7 442.6c-3.125 3.125-8.25 3.125-11.38 0l-11.25-11.25c-3.125-3.125-3.125-8.25 0-11.38l28.25-28.25l-45.25-45.25l-33.88 34l16.88 16.88c3.125 3.125 3.125 8.25 0 11.38l-11.25 11.25c-3.125 3.125-8.25 3.125-11.38 0L131.6 403.1l-16.1 16.88c-3.125 3.125-8.25 3.125-11.38 0l-11.25-11.25c-3.125-3.125-3.125-8.25 0-11.38l17-16.88l-17-17c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l16.1 17l33.88-34L120.2 278.6l-28.25 28.25c-3.125 3.125-8.25 3.125-11.38 0L69.37 295.6c-3.125-3.125-3.125-8.25 0-11.38l28.25-28.25l-28.25-28.25c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l28.25 28.25l45.25-45.25l-34-34l-16.88 17c-3.125 3.125-8.25 3.125-11.38 0l-11.25-11.25c-3.125-3.125-3.125-8.25 0-11.38l16.88-17l-16.88-16.88c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l16.88 17l17-17c3.125-3.125 8.25-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-17 16.88l34 34l45.25-45.25L205.1 92c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l28.25 28.25l28.25-28.25c3.125-3.125 8.25-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-28.25 28.25l45.25 45.25l34-34l-17-16.88c-3.125-3.125-3.125-8.25 0-11.38l11.25-11.25c3.125-3.125 8.25-3.125 11.38 0l17 16.88l16.88-16.88c3.125-3.125 8.251-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-17 16.88l17 17c3.125 3.125 3.125 8.25 0 11.38l-11.25 11.25c-3.125 3.125-8.251 3.125-11.38 0l-16.88-17l-34 34l45.25 45.25l28.25-28.25c3.125-3.125 8.25-3.125 11.38 0l11.25 11.25c3.125 3.125 3.125 8.25 0 11.38l-28.25 28.25l28.25 28.25C445.7 287.4 445.7 292.5 442.6 295.6zM278.6 256l45.25 45.25l45.25-45.25l-45.25-45.25L278.6 256z\"],\n    \"subscript\": [512, 512, [], \"f12c\", \"M480 448v-128c0-11.09-5.75-21.38-15.17-27.22c-9.422-5.875-21.25-6.344-31.14-1.406l-32 16c-15.81 7.906-22.22 27.12-14.31 42.94c5.609 11.22 16.89 17.69 28.62 17.69v80c-17.67 0-32 14.31-32 32s14.33 32 32 32h64c17.67 0 32-14.31 32-32S497.7 448 480 448zM320 128c17.67 0 32-14.31 32-32s-14.33-32-32-32l-32-.0024c-10.44 0-20.23 5.101-26.22 13.66L176 200.2L90.22 77.67C84.23 69.11 74.44 64.01 64 64.01L32 64.01c-17.67 0-32 14.32-32 32s14.33 32 32 32h15.34L136.9 256l-89.6 128H32c-17.67 0-32 14.31-32 32s14.33 31.1 32 31.1l32-.0024c10.44 0 20.23-5.086 26.22-13.65L176 311.8l85.78 122.5C267.8 442.9 277.6 448 288 448l32 .0024c17.67 0 32-14.31 32-31.1s-14.33-32-32-32h-15.34l-89.6-128l89.6-127.1H320z\"],\n    \"suitcase\": [512, 512, [129523], \"f0f2\", \"M0 144v288C0 457.6 22.41 480 48 480H96V96H48C22.41 96 0 118.4 0 144zM336 0h-160C150.4 0 128 22.41 128 48V480h256V48C384 22.41 361.6 0 336 0zM336 96h-160V48h160V96zM464 96H416v384h48c25.59 0 48-22.41 48-48v-288C512 118.4 489.6 96 464 96z\"],\n    \"suitcase-medical\": [512, 512, [\"medkit\"], \"f0fa\", \"M0 144v288C0 457.6 22.41 480 48 480H64V96H48C22.41 96 0 118.4 0 144zM464 96H448v384h16c25.59 0 48-22.41 48-48v-288C512 118.4 489.6 96 464 96zM384 48C384 22.41 361.6 0 336 0h-160C150.4 0 128 22.41 128 48V96H96v384h320V96h-32V48zM176 48h160V96h-160V48zM352 312C352 316.4 348.4 320 344 320H288v56c0 4.375-3.625 8-8 8h-48C227.6 384 224 380.4 224 376V320H168C163.6 320 160 316.4 160 312v-48C160 259.6 163.6 256 168 256H224V200C224 195.6 227.6 192 232 192h48C284.4 192 288 195.6 288 200V256h56C348.4 256 352 259.6 352 264V312z\"],\n    \"suitcase-rolling\": [448, 512, [], \"f5c1\", \"M368 128h-47.95l.0123-80c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48L128 128H80C53.5 128 32 149.5 32 176v256C32 458.5 53.5 480 80 480h16.05L96 496C96 504.9 103.1 512 112 512h32C152.9 512 160 504.9 160 496L160.1 480h128L288 496c0 8.875 7.125 16 16 16h32c8.875 0 16-7.125 16-16l.0492-16H368c26.5 0 48-21.5 48-48v-256C416 149.5 394.5 128 368 128zM176.1 48h96V128h-96V48zM336 384h-224C103.2 384 96 376.8 96 368C96 359.2 103.2 352 112 352h224c8.801 0 16 7.199 16 16C352 376.8 344.8 384 336 384zM336 256h-224C103.2 256 96 248.8 96 240C96 231.2 103.2 224 112 224h224C344.8 224 352 231.2 352 240C352 248.8 344.8 256 336 256z\"],\n    \"sun\": [512, 512, [9728], \"f185\", \"M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z\"],\n    \"superscript\": [512, 512, [], \"f12b\", \"M480 160v-128c0-11.09-5.75-21.37-15.17-27.22C455.4-1.048 443.6-1.548 433.7 3.39l-32 16c-15.81 7.906-22.22 27.12-14.31 42.94C392.1 73.55 404.3 80.01 416 80.01v80c-17.67 0-32 14.31-32 32s14.33 32 32 32h64c17.67 0 32-14.31 32-32S497.7 160 480 160zM320 128c17.67 0 32-14.31 32-32s-14.33-32-32-32l-32-.0024c-10.44 0-20.23 5.101-26.22 13.66L176 200.2L90.22 77.67C84.23 69.11 74.44 64.01 64 64.01L32 64.01c-17.67 0-32 14.32-32 32s14.33 32 32 32h15.34L136.9 256l-89.6 128H32c-17.67 0-32 14.31-32 32s14.33 31.1 32 31.1l32-.0024c10.44 0 20.23-5.086 26.22-13.65L176 311.8l85.78 122.5C267.8 442.9 277.6 448 288 448l32 .0024c17.67 0 32-14.31 32-31.1s-14.33-32-32-32h-15.34l-89.6-128l89.6-127.1H320z\"],\n    \"swatchbook\": [512, 512, [], \"f5c3\", \"M0 32C0 14.33 14.33 0 32 0H160C177.7 0 192 14.33 192 32V416C192 469 149 512 96 512C42.98 512 0 469 0 416V32zM128 64H64V128H128V64zM64 256H128V192H64V256zM96 440C109.3 440 120 429.3 120 416C120 402.7 109.3 392 96 392C82.75 392 72 402.7 72 416C72 429.3 82.75 440 96 440zM224 416V154L299.4 78.63C311.9 66.13 332.2 66.13 344.7 78.63L435.2 169.1C447.7 181.6 447.7 201.9 435.2 214.4L223.6 425.9C223.9 422.7 224 419.3 224 416V416zM374.8 320H480C497.7 320 512 334.3 512 352V480C512 497.7 497.7 512 480 512H182.8L374.8 320z\"],\n    \"synagogue\": [640, 512, [128333], \"f69b\", \"M309.8 3.708C315.7-1.236 324.3-1.236 330.2 3.708L451.2 104.5C469.5 119.7 480 142.2 480 165.1V512H384V384C384 348.7 355.3 320 320 320C284.7 320 256 348.7 256 384V512H160V165.1C160 142.2 170.5 119.7 188.8 104.5L309.8 3.708zM326.1 124.3C323.9 118.9 316.1 118.9 313 124.3L297.2 152.4L264.9 152.1C258.7 152.1 254.8 158.8 257.9 164.2L274.3 191.1L257.9 219.8C254.8 225.2 258.7 231.9 264.9 231.9L297.2 231.6L313 259.7C316.1 265.1 323.9 265.1 326.1 259.7L342.8 231.6L375.1 231.9C381.3 231.9 385.2 225.2 382.1 219.8L365.7 191.1L382.1 164.2C385.2 158.8 381.3 152.1 375.1 152.1L342.8 152.4L326.1 124.3zM512 244.5L540.1 213.3C543.1 209.9 547.5 208 552 208C556.5 208 560.9 209.9 563.9 213.3L627.7 284.2C635.6 292.1 640 304.4 640 316.3V448C640 483.3 611.3 512 576 512H512V244.5zM128 244.5V512H64C28.65 512 0 483.3 0 448V316.3C0 304.4 4.389 292.1 12.32 284.2L76.11 213.3C79.14 209.9 83.46 208 88 208C92.54 208 96.86 209.9 99.89 213.3L128 244.5z\"],\n    \"syringe\": [512, 512, [128137], \"f48e\", \"M504.1 71.03l-64-64c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94L422.1 56L384 94.06l-55.03-55.03c-9.375-9.375-24.56-9.375-33.94 0c-8.467 8.467-8.873 21.47-2.047 30.86l149.1 149.1C446.3 222.1 451.1 224 456 224c6.141 0 12.28-2.344 16.97-7.031c9.375-9.375 9.375-24.56 0-33.94L417.9 128L456 89.94l15.03 15.03C475.7 109.7 481.9 112 488 112s12.28-2.344 16.97-7.031C514.3 95.59 514.3 80.41 504.1 71.03zM208.8 154.1l58.56 58.56c6.25 6.25 6.25 16.38 0 22.62C264.2 238.4 260.1 240 256 240S247.8 238.4 244.7 235.3L186.1 176.8L144.8 218.1l58.56 58.56c6.25 6.25 6.25 16.38 0 22.62C200.2 302.4 196.1 304 192 304S183.8 302.4 180.7 299.3L122.1 240.8L82.75 280.1C70.74 292.1 64 308.4 64 325.4v88.68l-56.97 56.97c-9.375 9.375-9.375 24.56 0 33.94C11.72 509.7 17.86 512 24 512s12.28-2.344 16.97-7.031L97.94 448h88.69c16.97 0 33.25-6.744 45.26-18.75l187.6-187.6l-149.1-149.1L208.8 154.1z\"],\n    \"t\": [384, 512, [116], \"54\", \"M384 64.01c0 17.67-14.33 32-32 32h-128v352c0 17.67-14.33 31.99-32 31.99s-32-14.32-32-31.99v-352H32c-17.67 0-32-14.33-32-32s14.33-32 32-32h320C369.7 32.01 384 46.34 384 64.01z\"],\n    \"table\": [512, 512, [], \"f0ce\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM224 256V160H64V256H224zM64 320V416H224V320H64zM288 416H448V320H288V416zM448 256V160H288V256H448z\"],\n    \"table-cells\": [512, 512, [\"th\"], \"f00a\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM152 96H64V160H152V96zM208 160H296V96H208V160zM448 96H360V160H448V96zM64 288H152V224H64V288zM296 224H208V288H296V224zM360 288H448V224H360V288zM152 352H64V416H152V352zM208 416H296V352H208V416zM448 352H360V416H448V352z\"],\n    \"table-cells-large\": [512, 512, [\"th-large\"], \"f009\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM448 96H288V224H448V96zM448 288H288V416H448V288zM224 224V96H64V224H224zM64 416H224V288H64V416z\"],\n    \"table-columns\": [512, 512, [\"columns\"], \"f0db\", \"M0 96C0 60.65 28.65 32 64 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96zM64 416H224V160H64V416zM448 160H288V416H448V160z\"],\n    \"table-list\": [512, 512, [\"th-list\"], \"f00b\", \"M0 96C0 60.65 28.65 32 64 32H448C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96zM64 160H128V96H64V160zM448 96H192V160H448V96zM64 288H128V224H64V288zM448 224H192V288H448V224zM64 416H128V352H64V416zM448 352H192V416H448V352z\"],\n    \"table-tennis-paddle-ball\": [512, 512, [127955, \"ping-pong-paddle-ball\", \"table-tennis\"], \"f45d\", \"M416 287.1c27.99 0 53.68 9.254 74.76 24.51c14.03-29.82 21.06-62.13 21.06-94.43c0-103.1-79.37-218.1-216.5-218.1c-59.94 0-120.4 23.71-165.5 68.95l-54.66 54.8C73.61 125.3 72.58 126.1 71.14 128.5l230.7 230.7C322.8 317.2 365.8 287.1 416 287.1zM290.3 392.1l-238.6-238.6C38.74 176.2 32.3 199.4 32.3 221.9c0 30.53 11.71 59.94 34.29 82.58l36.6 36.7l-92.38 81.32c-7.177 6.255-10.81 15.02-10.81 23.81c0 8.027 3.032 16.07 9.164 22.24l34.05 34.2c6.145 6.16 14.16 9.205 22.15 9.205c8.749 0 17.47-3.649 23.7-10.86l81.03-92.85l35.95 36.04c23.62 23.68 54.41 35.23 85.37 35.23c4.532 0 9.205-.2677 13.72-.7597c-10.56-18.61-17.12-39.89-17.12-62.81C288 408.1 288.1 400.5 290.3 392.1zM415.1 320c-52.99 0-95.99 42.1-95.99 95.1c0 52.1 42.99 95.99 95.99 95.99c52.1 0 95.99-42.1 95.99-95.99C511.1 363 468.1 320 415.1 320z\"],\n    \"tablet\": [448, 512, [\"tablet-android\"], \"f3fb\", \"M384 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V64C448 28.65 419.3 0 384 0zM288 447.1C288 456.8 280.8 464 272 464H175.1C167.2 464 160 456.8 160 448S167.2 432 175.1 432h96C280.8 432 288 439.2 288 447.1z\"],\n    \"tablet-button\": [448, 512, [], \"f10a\", \"M384 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V64C448 28.65 419.3 0 384 0zM224 464c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S241.8 464 224 464z\"],\n    \"tablet-screen-button\": [448, 512, [\"tablet-alt\"], \"f3fa\", \"M384 .0001H64c-35.35 0-64 28.65-64 64v384c0 35.35 28.65 63.1 64 63.1h320c35.35 0 64-28.65 64-63.1v-384C448 28.65 419.3 .0001 384 .0001zM224 480c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S241.8 480 224 480zM384 384H64v-320h320V384z\"],\n    \"tablets\": [640, 512, [], \"f490\", \"M159.1 191.1c-81.1 0-147.5 58.51-159.9 134.8C-.7578 331.5 3.367 336 8.365 336h303.3c4.998 0 8.996-4.5 8.248-9.25C307.4 250.5 241.1 191.1 159.1 191.1zM311.5 368H8.365c-4.998 0-9.123 4.5-8.248 9.25C12.49 453.5 78.88 512 159.1 512s147.4-58.5 159.8-134.8C320.7 372.5 316.5 368 311.5 368zM362.9 65.74c-3.502-3.502-9.504-3.252-12.25 .75c-45.52 62.76-40.52 150.4 15.88 206.9c56.52 56.51 144.2 61.39 206.1 15.88c4.002-2.875 4.252-8.877 .75-12.25L362.9 65.74zM593.4 46.61c-56.52-56.51-144.2-61.39-206.1-16c-4.002 2.877-4.252 8.877-.75 12.25l211.3 211.4c3.5 3.502 9.504 3.252 12.25-.75C654.8 190.8 649.9 103.1 593.4 46.61z\"],\n    \"tachograph-digital\": [640, 512, [\"digital-tachograph\"], \"f566\", \"M576 64H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64V128C640 92.8 611.2 64 576 64zM64 296C64 291.6 67.63 288 72 288h16C92.38 288 96 291.6 96 296v16C96 316.4 92.38 320 88 320h-16C67.63 320 64 316.4 64 312V296zM336 384h-256C71.2 384 64 376.8 64 368C64 359.2 71.2 352 79.1 352h256c8.801 0 16 7.199 16 16C352 376.8 344.8 384 336 384zM128 312v-16C128 291.6 131.6 288 136 288h16C156.4 288 160 291.6 160 296v16C160 316.4 156.4 320 152 320h-16C131.6 320 128 316.4 128 312zM192 312v-16C192 291.6 195.6 288 200 288h16C220.4 288 224 291.6 224 296v16C224 316.4 220.4 320 216 320h-16C195.6 320 192 316.4 192 312zM256 312v-16C256 291.6 259.6 288 264 288h16C284.4 288 288 291.6 288 296v16C288 316.4 284.4 320 280 320h-16C259.6 320 256 316.4 256 312zM352 312C352 316.4 348.4 320 344 320h-16C323.6 320 320 316.4 320 312v-16C320 291.6 323.6 288 328 288h16C348.4 288 352 291.6 352 296V312zM352 237.7C352 247.9 344.4 256 334.9 256H81.07C71.6 256 64 247.9 64 237.7V146.3C64 136.1 71.6 128 81.07 128h253.9C344.4 128 352 136.1 352 146.3V237.7zM560 384h-160c-8.801 0-16-7.201-16-16c0-8.801 7.199-16 16-16h160c8.801 0 16 7.199 16 16C576 376.8 568.8 384 560 384z\"],\n    \"tag\": [448, 512, [127991], \"f02b\", \"M48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L418.7 226.7C443.7 251.7 443.7 292.3 418.7 317.3L285.3 450.7C260.3 475.7 219.7 475.7 194.7 450.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5V80C0 53.49 21.49 32 48 32L48 32zM112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176z\"],\n    \"tags\": [512, 512, [], \"f02c\", \"M472.8 168.4C525.1 221.4 525.1 306.6 472.8 359.6L360.8 472.9C351.5 482.3 336.3 482.4 326.9 473.1C317.4 463.8 317.4 448.6 326.7 439.1L438.6 325.9C472.5 291.6 472.5 236.4 438.6 202.1L310.9 72.87C301.5 63.44 301.6 48.25 311.1 38.93C320.5 29.61 335.7 29.7 344.1 39.13L472.8 168.4zM.0003 229.5V80C.0003 53.49 21.49 32 48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L410.7 218.7C435.7 243.7 435.7 284.3 410.7 309.3L277.3 442.7C252.3 467.7 211.7 467.7 186.7 442.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5L.0003 229.5zM112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112z\"],\n    \"tape\": [576, 512, [], \"f4db\", \"M288 256C288 291.3 259.3 320 224 320C188.7 320 160 291.3 160 256C160 220.7 188.7 192 224 192C259.3 192 288 220.7 288 256zM544 416C561.7 416 576 430.3 576 448C576 465.7 561.7 480 544 480H224C100.3 480 0 379.7 0 256C0 132.3 100.3 32 224 32C347.7 32 448 132.3 448 256C448 318.7 422.3 375.3 380.8 416H544zM224 352C277 352 320 309 320 256C320 202.1 277 160 224 160C170.1 160 128 202.1 128 256C128 309 170.1 352 224 352z\"],\n    \"taxi\": [576, 512, [128662, \"cab\"], \"f1ba\", \"M352 0C369.7 0 384 14.33 384 32V64L384 64.15C422.6 66.31 456.3 91.49 469.2 128.3L504.4 228.8C527.6 238.4 544 261.3 544 288V480C544 497.7 529.7 512 512 512H480C462.3 512 448 497.7 448 480V432H128V480C128 497.7 113.7 512 96 512H64C46.33 512 32 497.7 32 480V288C32 261.3 48.36 238.4 71.61 228.8L106.8 128.3C119.7 91.49 153.4 66.31 192 64.15L192 64V32C192 14.33 206.3 0 224 0L352 0zM197.4 128C183.8 128 171.7 136.6 167.2 149.4L141.1 224H434.9L408.8 149.4C404.3 136.6 392.2 128 378.6 128H197.4zM128 352C145.7 352 160 337.7 160 320C160 302.3 145.7 288 128 288C110.3 288 96 302.3 96 320C96 337.7 110.3 352 128 352zM448 288C430.3 288 416 302.3 416 320C416 337.7 430.3 352 448 352C465.7 352 480 337.7 480 320C480 302.3 465.7 288 448 288z\"],\n    \"teeth\": [576, 512, [], \"f62e\", \"M480 32H96C42.98 32 0 74.98 0 128v256c0 53.02 42.98 96 96 96h384c53.02 0 96-42.98 96-96V128C576 74.98 533 32 480 32zM144 336C144 362.5 122.5 384 96 384s-48-21.5-48-48v-32C48 295.1 55.13 288 64 288h64c8.875 0 16 7.125 16 16V336zM144 240C144 248.9 136.9 256 128 256H64C55.13 256 48 248.9 48 240v-32C48 181.5 69.5 160 96 160s48 21.5 48 48V240zM272 336C272 362.5 250.5 384 224 384s-48-21.5-48-48v-32C176 295.1 183.1 288 192 288h64c8.875 0 16 7.125 16 16V336zM272 242.3C272 249.9 265.9 256 258.3 256H189.7C182.1 256 176 249.9 176 242.3V176C176 149.5 197.5 128 224 128s48 21.54 48 48V242.3zM400 336c0 26.5-21.5 48-48 48s-48-21.5-48-48v-32C304 295.1 311.1 288 320 288h64c8.875 0 16 7.125 16 16V336zM400 242.3C400 249.9 393.9 256 386.3 256h-68.57C310.1 256 304 249.9 304 242.3V176C304 149.5 325.5 128 352 128s48 21.54 48 48V242.3zM528 336c0 26.5-21.5 48-48 48s-48-21.5-48-48v-32C432 295.1 439.1 288 448 288h64c8.875 0 16 7.125 16 16V336zM528 240C528 248.9 520.9 256 512 256h-64c-8.875 0-16-7.125-16-16v-32C432 181.5 453.5 160 480 160s48 21.5 48 48V240z\"],\n    \"teeth-open\": [576, 512, [], \"f62f\", \"M512 288H64c-35.35 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h384c53.02 0 96-42.98 96-96v-32C576 316.7 547.3 288 512 288zM144 368C144 394.5 122.5 416 96 416s-48-21.5-48-48v-32C48 327.1 55.13 320 64 320h64c8.875 0 16 7.125 16 16V368zM272 368C272 394.5 250.5 416 224 416s-48-21.5-48-48v-32C176 327.1 183.1 320 192 320h64c8.875 0 16 7.125 16 16V368zM400 368c0 26.5-21.5 48-48 48s-48-21.5-48-48v-32c0-8.875 7.125-16 16-16h64c8.875 0 16 7.125 16 16V368zM528 368c0 26.5-21.5 48-48 48s-48-21.5-48-48v-32c0-8.875 7.125-16 16-16h64c8.875 0 16 7.125 16 16V368zM480 32H96C42.98 32 0 74.98 0 128v64c0 35.35 28.65 64 64 64h448c35.35 0 64-28.65 64-64V128C576 74.98 533 32 480 32zM144 208C144 216.9 136.9 224 128 224H64C55.13 224 48 216.9 48 208v-32C48 149.5 69.5 128 96 128s48 21.5 48 48V208zM272 210.3C272 217.9 265.9 224 258.3 224H189.7C182.1 224 176 217.9 176 210.3V144C176 117.5 197.5 96 224 96s48 21.54 48 48V210.3zM400 210.3C400 217.9 393.9 224 386.3 224h-68.57C310.1 224 304 217.9 304 210.3V144C304 117.5 325.5 96 352 96s48 21.54 48 48V210.3zM528 208C528 216.9 520.9 224 512 224h-64c-8.875 0-16-7.125-16-16v-32C432 149.5 453.5 128 480 128s48 21.5 48 48V208z\"],\n    \"temperature-empty\": [320, 512, [\"temperature-0\", \"thermometer-0\", \"thermometer-empty\"], \"f2cb\", \"M272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448zM160 320c-26.51 0-48 21.49-48 48s21.49 48 48 48s48-21.49 48-48S186.5 320 160 320z\"],\n    \"temperature-full\": [320, 512, [\"temperature-4\", \"thermometer-4\", \"thermometer-full\"], \"f2c7\", \"M176 322.9V112c0-8.75-7.25-16-16-16s-16 7.25-16 16v210.9c-18.62 6.625-32 24.25-32 45.13c0 26.5 21.5 48 48 48s48-21.5 48-48C208 347.1 194.6 329.5 176 322.9zM272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448z\"],\n    \"temperature-half\": [320, 512, [127777, \"temperature-2\", \"thermometer-2\", \"thermometer-half\"], \"f2c9\", \"M176 322.9l.0002-114.9c0-8.75-7.25-16-16-16s-15.1 7.25-15.1 16L144 322.9c-18.62 6.625-32 24.25-32 45.13c0 26.5 21.5 48 48 48s48-21.5 48-48C208 347.1 194.6 329.5 176 322.9zM272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448z\"],\n    \"temperature-high\": [512, 512, [], \"f769\", \"M160 322.9V112C160 103.3 152.8 96 144 96S128 103.3 128 112v210.9C109.4 329.5 96 347.1 96 368C96 394.5 117.5 416 144 416S192 394.5 192 368C192 347.1 178.6 329.5 160 322.9zM416 0c-52.88 0-96 43.13-96 96s43.13 96 96 96s96-43.13 96-96S468.9 0 416 0zM416 128c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S433.8 128 416 128zM256 112c0-61.88-50.13-112-112-112s-112 50.13-112 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.1-12.25-64.88-32-89.5V112zM144 448c-44.13 0-80-35.88-80-80c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48S192 85.5 192 112V304.3c19.75 14.75 32 38.25 32 63.75C224 412.1 188.1 448 144 448z\"],\n    \"temperature-low\": [512, 512, [], \"f76b\", \"M160 322.9V304C160 295.3 152.8 288 144 288S128 295.3 128 304v18.88C109.4 329.5 96 347.1 96 368C96 394.5 117.5 416 144 416S192 394.5 192 368C192 347.1 178.6 329.5 160 322.9zM256 112c0-61.88-50.13-112-112-112s-112 50.13-112 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.1-12.25-64.88-32-89.5V112zM144 448c-44.13 0-80-35.88-80-80c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.1c19.75 14.75 32 38.38 32 63.88C224 412.1 188.1 448 144 448zM416 0c-52.88 0-96 43.13-96 96s43.13 96 96 96s96-43.13 96-96S468.9 0 416 0zM416 128c-17.75 0-32-14.25-32-32s14.25-32 32-32s32 14.25 32 32S433.8 128 416 128z\"],\n    \"temperature-quarter\": [320, 512, [\"temperature-1\", \"thermometer-1\", \"thermometer-quarter\"], \"f2ca\", \"M176 322.9l.0002-50.88c0-8.75-7.25-16-16-16s-15.1 7.25-15.1 16L144 322.9c-18.62 6.625-32 24.25-32 45.13c0 26.5 21.5 48 48 48s48-21.5 48-48C208 347.1 194.6 329.5 176 322.9zM272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448z\"],\n    \"temperature-three-quarters\": [320, 512, [\"temperature-3\", \"thermometer-3\", \"thermometer-three-quarters\"], \"f2c8\", \"M176 322.9V160c0-8.75-7.25-16-16-16s-16 7.25-16 16v162.9c-18.62 6.625-32 24.25-32 45.13c0 26.5 21.5 48 48 48s48-21.5 48-48C208 347.1 194.6 329.5 176 322.9zM272 278.5V112c0-61.87-50.12-112-111.1-112S48 50.13 48 112v166.5c-19.75 24.75-32 55.5-32 89.5c0 79.5 64.5 143.1 144 143.1S304 447.5 304 368C304 334 291.8 303.1 272 278.5zM160 448c-44.13 0-80-35.87-80-79.1c0-25.5 12.25-48.88 32-63.75v-192.3c0-26.5 21.5-48 48-48s48 21.5 48 48v192.3c19.75 14.75 32 38.25 32 63.75C240 412.1 204.1 448 160 448z\"],\n    \"tenge-sign\": [384, 512, [8376, \"tenge\"], \"f7d7\", \"M0 64C0 46.33 14.33 32 32 32H352C369.7 32 384 46.33 384 64C384 81.67 369.7 96 352 96H32C14.33 96 0 81.67 0 64zM0 192C0 174.3 14.33 160 32 160H352C369.7 160 384 174.3 384 192C384 209.7 369.7 224 352 224H224V448C224 465.7 209.7 480 192 480C174.3 480 160 465.7 160 448V224H32C14.33 224 0 209.7 0 192z\"],\n    \"terminal\": [576, 512, [], \"f120\", \"M9.372 86.63C-3.124 74.13-3.124 53.87 9.372 41.37C21.87 28.88 42.13 28.88 54.63 41.37L246.6 233.4C259.1 245.9 259.1 266.1 246.6 278.6L54.63 470.6C42.13 483.1 21.87 483.1 9.372 470.6C-3.124 458.1-3.124 437.9 9.372 425.4L178.7 256L9.372 86.63zM544 416C561.7 416 576 430.3 576 448C576 465.7 561.7 480 544 480H256C238.3 480 224 465.7 224 448C224 430.3 238.3 416 256 416H544z\"],\n    \"text-height\": [576, 512, [], \"f034\", \"M288 32.01H32c-17.67 0-32 14.31-32 32v64c0 17.69 14.33 32 32 32s32-14.31 32-32v-32h64v320H96c-17.67 0-32 14.31-32 32s14.33 32 32 32h128c17.67 0 32-14.31 32-32s-14.33-32-32-32H192v-320h64v32c0 17.69 14.33 32 32 32s32-14.31 32-32v-64C320 46.33 305.7 32.01 288 32.01zM521.4 361.4L512 370.8V141.3l9.375 9.375C527.6 156.9 535.8 160 544 160s16.38-3.125 22.62-9.375c12.5-12.5 12.5-32.75 0-45.25l-64-64c-12.5-12.5-32.75-12.5-45.25 0l-64 64c-12.5 12.5-12.5 32.75 0 45.25s32.75 12.5 45.25 0L448 141.3v229.5l-9.375-9.375c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l64 64C463.6 476.9 471.8 480 480 480s16.38-3.118 22.62-9.368l64-64c12.5-12.5 12.5-32.75 0-45.25S533.9 348.9 521.4 361.4z\"],\n    \"text-slash\": [640, 512, [\"remove-format\"], \"f87d\", \"M352 416H306.7l18.96-64.1L271.4 308.5L239.1 416H192c-17.67 0-32 14.31-32 32s14.33 31.99 31.1 31.99h160C369.7 480 384 465.7 384 448S369.7 416 352 416zM630.8 469.1l-276.4-216.7l45.63-156.5H512v32c0 17.69 14.33 32 32 32s32-14.31 32-32v-64c0-17.69-14.33-32-32-32H192c-17.67 0-32 14.31-32 32v36.11L38.81 5.13c-10.47-8.219-25.53-6.37-33.7 4.068s-6.349 25.54 4.073 33.69l591.1 463.1c4.406 3.469 9.61 5.127 14.8 5.127c7.125 0 14.17-3.164 18.9-9.195C643.1 492.4 641.2 477.3 630.8 469.1zM300.1 209.9l-82.08-64.33C221.5 140.5 224 134.7 224 128v-32h109.3L300.1 209.9z\"],\n    \"text-width\": [448, 512, [], \"f035\", \"M416 32.01H32c-17.67 0-32 14.31-32 32v63.1c0 17.69 14.33 32 32 32s32-14.31 32-32v-32h128v128H176c-17.67 0-32 14.31-32 31.1s14.33 32 32 32h96c17.67 0 32-14.31 32-32s-14.33-31.1-32-31.1H256v-128h128v32c0 17.69 14.33 32 32 32s32-14.32 32-32V64.01C448 46.33 433.7 32.01 416 32.01zM374.6 297.4c-12.5-12.5-32.75-12.5-45.25 0s-12.5 32.75 0 45.25l9.375 9.375h-229.5L118.6 342.6c12.5-12.5 12.5-32.75 0-45.25s-32.75-12.5-45.25 0l-64 64c-12.5 12.5-12.5 32.75 0 45.25l64 64C79.63 476.9 87.81 480 96 480s16.38-3.118 22.62-9.368c12.5-12.5 12.5-32.75 0-45.25l-9.375-9.375h229.5l-9.375 9.375c-12.5 12.5-12.5 32.75 0 45.25C335.6 476.9 343.8 480 352 480s16.38-3.118 22.62-9.368l64-64c12.5-12.5 12.5-32.75 0-45.25L374.6 297.4z\"],\n    \"thermometer\": [512, 512, [], \"f491\", \"M483.1 162.6L229.8 415.9l-99.87-.0001l-88.99 89.02c-9.249 9.377-24.5 9.377-33.87 0c-9.374-9.252-9.374-24.51 0-33.88l88.99-89.02l.0003-100.9l49.05-49.39l51.6 51.59c3.125 3.126 7.218 4.688 11.31 4.688s8.187-1.563 11.31-4.688c6.249-6.252 6.249-16.38 0-22.63L167.6 209.1l41.24-41.52l51.81 51.81c3.125 3.126 7.218 4.688 11.31 4.688s8.187-1.563 11.31-4.688c6.249-6.252 6.249-16.38 0-22.63L231.4 144.8l41.24-41.52l52.02 52.02c3.125 3.126 7.218 4.688 11.31 4.688s8.187-1.563 11.31-4.688c6.249-6.252 6.249-16.38 0-22.63l-52.09-52.09l49.68-50.02c36.37-36.51 94.37-40.88 131.9-10.25C526.2 61.11 518.9 127.8 483.1 162.6z\"],\n    \"thumbs-down\": [512, 512, [61576, 128078], \"f165\", \"M96 32.04H32c-17.67 0-32 14.32-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64c17.67 0 32-14.33 32-31.1V64.03C128 46.36 113.7 32.04 96 32.04zM467.3 240.2C475.1 231.7 480 220.4 480 207.9c0-23.47-16.87-42.92-39.14-47.09C445.3 153.6 448 145.1 448 135.1c0-21.32-14-39.18-33.25-45.43C415.5 87.12 416 83.61 416 79.98C416 53.47 394.5 32 368 32h-58.69c-34.61 0-68.28 11.22-95.97 31.98L179.2 89.57C167.1 98.63 160 112.9 160 127.1l.1074 160c0 0-.0234-.0234 0 0c.0703 13.99 6.123 27.94 17.91 37.36l16.3 13.03C276.2 403.9 239.4 480 302.5 480c30.96 0 49.47-24.52 49.47-48.11c0-15.15-11.76-58.12-34.52-96.02H464c26.52 0 48-21.47 48-47.98C512 262.5 492.2 241.9 467.3 240.2z\"],\n    \"thumbs-up\": [512, 512, [61575, 128077], \"f164\", \"M128 447.1V223.1c0-17.67-14.33-31.1-32-31.1H32c-17.67 0-32 14.33-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64C113.7 479.1 128 465.6 128 447.1zM512 224.1c0-26.5-21.48-47.98-48-47.98h-146.5c22.77-37.91 34.52-80.88 34.52-96.02C352 56.52 333.5 32 302.5 32c-63.13 0-26.36 76.15-108.2 141.6L178 186.6C166.2 196.1 160.2 210 160.1 224c-.0234 .0234 0 0 0 0L160 384c0 15.1 7.113 29.33 19.2 38.39l34.14 25.59C241 468.8 274.7 480 309.3 480H368c26.52 0 48-21.47 48-47.98c0-3.635-.4805-7.143-1.246-10.55C434 415.2 448 397.4 448 376c0-9.148-2.697-17.61-7.139-24.88C463.1 347 480 327.5 480 304.1c0-12.5-4.893-23.78-12.72-32.32C492.2 270.1 512 249.5 512 224.1z\"],\n    \"thumbtack\": [384, 512, [128392, 128204, \"thumb-tack\"], \"f08d\", \"M32 32C32 14.33 46.33 0 64 0H320C337.7 0 352 14.33 352 32C352 49.67 337.7 64 320 64H290.5L301.9 212.2C338.6 232.1 367.5 265.4 381.4 306.9L382.4 309.9C385.6 319.6 383.1 330.4 377.1 338.7C371.9 347.1 362.3 352 352 352H32C21.71 352 12.05 347.1 6.04 338.7C.0259 330.4-1.611 319.6 1.642 309.9L2.644 306.9C16.47 265.4 45.42 232.1 82.14 212.2L93.54 64H64C46.33 64 32 49.67 32 32zM224 384V480C224 497.7 209.7 512 192 512C174.3 512 160 497.7 160 480V384H224z\"],\n    \"ticket\": [576, 512, [127903], \"f145\", \"M128 160H448V352H128V160zM512 64C547.3 64 576 92.65 576 128V208C549.5 208 528 229.5 528 256C528 282.5 549.5 304 576 304V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V304C26.51 304 48 282.5 48 256C48 229.5 26.51 208 0 208V128C0 92.65 28.65 64 64 64H512zM96 352C96 369.7 110.3 384 128 384H448C465.7 384 480 369.7 480 352V160C480 142.3 465.7 128 448 128H128C110.3 128 96 142.3 96 160V352z\"],\n    \"ticket-simple\": [576, 512, [\"ticket-alt\"], \"f3ff\", \"M0 128C0 92.65 28.65 64 64 64H512C547.3 64 576 92.65 576 128V208C549.5 208 528 229.5 528 256C528 282.5 549.5 304 576 304V384C576 419.3 547.3 448 512 448H64C28.65 448 0 419.3 0 384V304C26.51 304 48 282.5 48 256C48 229.5 26.51 208 0 208V128z\"],\n    \"timeline\": [640, 512, [], \"e29c\", \"M160 224H480V169.3C451.7 156.1 432 128.8 432 96C432 51.82 467.8 16 512 16C556.2 16 592 51.82 592 96C592 128.8 572.3 156.1 544 169.3V224H608C625.7 224 640 238.3 640 256C640 273.7 625.7 288 608 288H352V342.7C380.3 355 400 383.2 400 416C400 460.2 364.2 496 320 496C275.8 496 240 460.2 240 416C240 383.2 259.7 355 288 342.7V288H32C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H96V169.3C67.75 156.1 48 128.8 48 96C48 51.82 83.82 16 128 16C172.2 16 208 51.82 208 96C208 128.8 188.3 156.1 160 169.3V224zM128 120C141.3 120 152 109.3 152 96C152 82.75 141.3 72 128 72C114.7 72 104 82.75 104 96C104 109.3 114.7 120 128 120zM512 72C498.7 72 488 82.75 488 96C488 109.3 498.7 120 512 120C525.3 120 536 109.3 536 96C536 82.75 525.3 72 512 72zM320 440C333.3 440 344 429.3 344 416C344 402.7 333.3 392 320 392C306.7 392 296 402.7 296 416C296 429.3 306.7 440 320 440z\"],\n    \"toggle-off\": [576, 512, [], \"f204\", \"M192 352C138.1 352 96 309 96 256C96 202.1 138.1 160 192 160C245 160 288 202.1 288 256C288 309 245 352 192 352zM384 448H192C85.96 448 0 362 0 256C0 149.1 85.96 64 192 64H384C490 64 576 149.1 576 256C576 362 490 448 384 448zM384 128H192C121.3 128 64 185.3 64 256C64 326.7 121.3 384 192 384H384C454.7 384 512 326.7 512 256C512 185.3 454.7 128 384 128z\"],\n    \"toggle-on\": [576, 512, [], \"f205\", \"M384 64C490 64 576 149.1 576 256C576 362 490 448 384 448H192C85.96 448 0 362 0 256C0 149.1 85.96 64 192 64H384zM384 352C437 352 480 309 480 256C480 202.1 437 160 384 160C330.1 160 288 202.1 288 256C288 309 330.1 352 384 352z\"],\n    \"toilet\": [448, 512, [128701], \"f7d8\", \"M432 48C440.8 48 448 40.75 448 32V16C448 7.25 440.8 0 432 0h-416C7.25 0 0 7.25 0 16V32c0 8.75 7.25 16 16 16H32v158.7C11.82 221.2 0 237.1 0 256c0 60.98 33.28 115.2 84.1 150.4l-19.59 64.36C59.16 491.3 74.53 512 96.03 512h255.9c21.5 0 36.88-20.75 30.62-41.25L363 406.4C414.7 371.2 448 316.1 448 256c0-18.04-11.82-34.85-32-49.26V48H432zM96 72C96 67.63 99.63 64 104 64h48C156.4 64 160 67.63 160 72v16C160 92.38 156.4 96 152 96h-48C99.63 96 96 92.38 96 88V72zM224 288C135.6 288 64 273.7 64 256c0-17.67 71.63-32 160-32s160 14.33 160 32C384 273.7 312.4 288 224 288z\"],\n    \"toilet-paper\": [576, 512, [129531], \"f71e\", \"M127.1 0C74.98 0 31.98 86 31.98 192v172.1c0 41.12-9.751 62.75-31.13 126.9C-2.65 501.2 5.101 512 15.98 512h280.9c13.88 0 26-8.75 30.38-21.88c12.88-38.5 24.75-72.37 24.75-126L351.1 192c0-83.62 23.62-153.5 60.5-192H127.1zM95.99 224C87.11 224 79.99 216.9 79.99 208S87.11 192 95.99 192s16 7.125 16 16S104.9 224 95.99 224zM159.1 224c-8.875 0-16-7.125-16-16S151.1 192 159.1 192s16 7.125 16 16S168.9 224 159.1 224zM223.1 224C215.1 224 207.1 216.9 207.1 208S215.1 192 223.1 192c8.875 0 16 7.125 16 16S232.9 224 223.1 224zM287.1 224C279.1 224 271.1 216.9 271.1 208S279.1 192 287.1 192c8.875 0 16 7.125 16 16S296.9 224 287.1 224zM479.1 0c-53 0-96 86.06-96 192.1C383.1 298.1 426.1 384 479.1 384S576 298 576 192C576 86 532.1 0 479.1 0zM479.1 256c-17.63 0-32-28.62-32-64s14.38-64 32-64c17.63 0 32 28.62 32 64S497.6 256 479.1 256z\"],\n    \"toilet-paper-slash\": [640, 512, [], \"e072\", \"M63.98 191.1v172.1c0 41.12-9.75 62.75-31.13 126.9c-3.5 10.25 4.25 20.1 15.13 20.1l280.9-.0059c13.87 0 25.1-8.75 30.37-21.87c10.08-30.15 19.46-57.6 23.1-93.78L66.51 148.8C64.9 162.7 63.98 177.1 63.98 191.1zM630.8 469.1l-109.8-86.02c48.75-9.144 86.94-91.2 86.94-191.1C607.1 86 564.1 0 511.1 0s-96 86-96 191.1c0 49.25 9.362 94.03 24.62 128l-56.62-44.38l.0049-83.65c0-83.62 23.62-153.5 60.5-191.1H159.1C135.2 0 112.7 18.93 95.72 49.72L38.81 5.109C34.41 1.672 29.19 0 24.03 0c-7.125 0-14.19 3.156-18.91 9.187C-3.061 19.62-1.249 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1zM479.1 191.1c0-35.37 14.37-64 32-64c17.62 0 32 28.63 32 64S529.6 255.1 511.1 255.1C494.4 255.1 479.1 227.4 479.1 191.1z\"],\n    \"toolbox\": [512, 512, [129520], \"f552\", \"M502.6 182.6l-45.25-45.25C451.4 131.4 443.3 128 434.8 128H384V80C384 53.5 362.5 32 336 32h-160C149.5 32 128 53.5 128 80V128H77.25c-8.5 0-16.62 3.375-22.62 9.375L9.375 182.6C3.375 188.6 0 196.8 0 205.3V304h128v-32C128 263.1 135.1 256 144 256h32C184.9 256 192 263.1 192 272v32h128v-32C320 263.1 327.1 256 336 256h32C376.9 256 384 263.1 384 272v32h128V205.3C512 196.8 508.6 188.6 502.6 182.6zM336 128h-160V80h160V128zM384 368c0 8.875-7.125 16-16 16h-32c-8.875 0-16-7.125-16-16v-32H192v32C192 376.9 184.9 384 176 384h-32C135.1 384 128 376.9 128 368v-32H0V448c0 17.62 14.38 32 32 32h448c17.62 0 32-14.38 32-32v-112h-128V368z\"],\n    \"tooth\": [448, 512, [129463], \"f5c9\", \"M394.1 212.8c-20.04 27.67-28.07 60.15-31.18 93.95c-3.748 41.34-8.785 82.46-17.89 122.8l-6.75 29.64c-2.68 12.14-13.29 20.78-25.39 20.78c-12 0-22.39-8.311-25.29-20.23l-29.57-121.2C254.1 322.6 240.1 311.4 224 311.4c-16.18 0-30.21 11.26-34.07 27.23l-29.57 121.2c-2.893 11.92-13.39 20.23-25.29 20.23c-12.21 0-22.71-8.639-25.5-20.78l-6.643-29.64c-9.105-40.36-14.14-81.48-17.1-122.8C81.93 272.1 73.9 240.5 53.86 212.8c-18.75-25.92-27.11-60.15-18.43-96.57c9.428-39.59 40.39-71.75 78.85-82.03c20.14-5.25 39.54-.4375 57.32 9.077l86.14 56.54c6.643 4.375 15.11 1.86 18.96-4.264c4.07-6.454 2.25-15.09-4.18-19.36l-24.21-15.86c3-1.531 6.215-2.735 9-4.813c22.39-16.84 48.75-28.65 76.39-21.33c38.46 10.28 69.43 42.43 78.85 82.03C421.2 152.7 412.9 187 394.1 212.8z\"],\n    \"torii-gate\": [512, 512, [9961], \"f6a1\", \"M0 80V0L71.37 23.79C87.68 29.23 104.8 32 121.1 32H390C407.2 32 424.3 29.23 440.6 23.79L512 0V80C512 106.5 490.5 128 464 128H448V192H384V128H288V192H224V128H128V192H64V128H48C21.49 128 0 106.5 0 80zM32 288C14.33 288 0 273.7 0 256C0 238.3 14.33 224 32 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H448V480C448 497.7 433.7 512 416 512C398.3 512 384 497.7 384 480V288H128V480C128 497.7 113.7 512 96 512C78.33 512 64 497.7 64 480V288H32z\"],\n    \"tower-broadcast\": [576, 512, [\"broadcast-tower\"], \"f519\", \"M160.9 59.01C149.3 52.6 134.7 56.76 128.3 68.39C117.6 87.6 112 109.4 112 131.4c0 19.03 4.031 37.44 11.98 54.62c4.047 8.777 12.73 13.93 21.8 13.93c3.375 0 6.797-.7187 10.05-2.219C167.9 192.2 173.1 177.1 167.5 165.9C162.5 155.1 160 143.5 160 131.4c0-13.93 3.547-27.69 10.25-39.81C176.7 80.04 172.5 65.42 160.9 59.01zM62.61 2.363C46.17-4.32 27.58 3.676 20.95 20.02C7.047 54.36 0 90.69 0 127.1C0 165.3 7.047 201.7 20.95 236C25.98 248.5 37.97 256 50.63 256C54.61 256 58.69 255.3 62.61 253.7C79 247 86.91 228.4 80.27 212C69.47 185.3 64 157.1 64 128c0-29.06 5.469-57.3 16.27-83.99C86.91 27.64 79 8.988 62.61 2.363zM555 20.02c-6.609-16.41-25.23-24.31-41.66-17.66c-16.39 6.625-24.3 25.28-17.66 41.65C506.5 70.7 512 98.95 512 128c0 29.06-5.469 57.31-16.27 83.1C489.1 228.4 497 247 513.4 253.7C517.3 255.3 521.4 256 525.4 256c12.66 0 24.64-7.562 29.67-20C568.1 201.7 576 165.3 576 127.1C576 90.69 568.1 54.36 555 20.02zM420.2 58.23c-12.03 5.562-17.28 19.81-11.72 31.84C413.5 100.9 416 112.5 416 124.6c0 13.94-3.547 27.69-10.25 39.81c-6.422 11.59-2.219 26.22 9.375 32.62c3.688 2.031 7.672 3 11.61 3c8.438 0 16.64-4.47 21.02-12.37C458.4 168.4 464 146.6 464 124.6c0-19.03-4.031-37.43-11.98-54.62C446.5 57.89 432.1 52.7 420.2 58.23zM301.8 65.45C260.5 56.78 224 88.13 224 128c0 23.63 12.95 44.04 32 55.12v296.9c0 17.67 14.33 32 32 32s32-14.33 32-32V183.1c23.25-13.54 37.42-40.96 30.03-71.18C344.4 88.91 325 70.31 301.8 65.45z\"],\n    \"tractor\": [640, 512, [128668], \"f722\", \"M96 64C96 28.65 124.7 0 160 0H266.3C292.5 0 316 15.93 325.8 40.23L373.7 160H480V126.2C480 101.4 485.8 76.88 496.9 54.66L499.4 49.69C507.3 33.88 526.5 27.47 542.3 35.38C558.1 43.28 564.5 62.5 556.6 78.31L554.1 83.28C547.5 96.61 544 111.3 544 126.2V160H600C622.1 160 640 177.9 640 200V245.4C640 261.9 631.5 277.3 617.4 286.1L574.1 313.2C559.9 307.3 544.3 304 528 304C488.7 304 453.9 322.9 431.1 352H352C352 369.7 337.7 384 320 384H311.8C310.1 388.8 308.2 393.5 305.1 398.1L311.8 403.9C324.3 416.4 324.3 436.6 311.8 449.1L289.1 471.8C276.6 484.3 256.4 484.3 243.9 471.8L238.1 465.1C233.5 468.2 228.8 470.1 224 471.8V480C224 497.7 209.7 512 192 512H160C142.3 512 128 497.7 128 480V471.8C123.2 470.1 118.5 468.2 113.9 465.1L108.1 471.8C95.62 484.3 75.36 484.3 62.86 471.8L40.24 449.1C27.74 436.6 27.74 416.4 40.24 403.9L46.03 398.1C43.85 393.5 41.9 388.8 40.19 384H32C14.33 384 0 369.7 0 352V320C0 302.3 14.33 288 32 288H40.19C41.9 283.2 43.85 278.5 46.03 273.9L40.24 268.1C27.74 255.6 27.74 235.4 40.24 222.9L62.86 200.2C71.82 191.3 84.78 188.7 96 192.6L96 64zM160 64V160H304.7L266.3 64H160zM176 256C131.8 256 96 291.8 96 336C96 380.2 131.8 416 176 416C220.2 416 256 380.2 256 336C256 291.8 220.2 256 176 256zM440 424C440 394.2 454.8 367.9 477.4 352C491.7 341.9 509.2 336 528 336C530.7 336 533.3 336.1 535.9 336.3C580.8 340.3 616 378.1 616 424C616 472.6 576.6 512 528 512C479.4 512 440 472.6 440 424zM528 448C541.3 448 552 437.3 552 424C552 410.7 541.3 400 528 400C514.7 400 504 410.7 504 424C504 437.3 514.7 448 528 448z\"],\n    \"trademark\": [640, 512, [8482], \"f25c\", \"M618.1 97.67c-13.02-4.375-27.45 .1562-35.72 11.16L464 266.7l-118.4-157.8c-8.266-11.03-22.64-15.56-35.72-11.16C296.8 102 288 114.2 288 128v256c0 17.69 14.33 32 32 32s32-14.31 32-32v-160l86.41 115.2c12.06 16.12 39.13 16.12 51.19 0L576 224v160c0 17.69 14.33 32 32 32s32-14.31 32-32v-256C640 114.2 631.2 102 618.1 97.67zM224 96.01H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h64v223.1c0 17.69 14.33 31.99 32 31.99s32-14.3 32-31.99V160h64c17.67 0 32-14.31 32-32S241.7 96.01 224 96.01z\"],\n    \"traffic-light\": [320, 512, [128678], \"f637\", \"M256 0C291.3 0 320 28.65 320 64V352C320 440.4 248.4 512 160 512C71.63 512 0 440.4 0 352V64C0 28.65 28.65 0 64 0H256zM160 320C133.5 320 112 341.5 112 368C112 394.5 133.5 416 160 416C186.5 416 208 394.5 208 368C208 341.5 186.5 320 160 320zM160 288C186.5 288 208 266.5 208 240C208 213.5 186.5 192 160 192C133.5 192 112 213.5 112 240C112 266.5 133.5 288 160 288zM160 64C133.5 64 112 85.49 112 112C112 138.5 133.5 160 160 160C186.5 160 208 138.5 208 112C208 85.49 186.5 64 160 64z\"],\n    \"trailer\": [640, 512, [], \"e041\", \"M496 32C522.5 32 544 53.49 544 80V320H608C625.7 320 640 334.3 640 352C640 369.7 625.7 384 608 384H286.9C279.1 329.7 232.4 288 176 288C119.6 288 72.9 329.7 65.13 384H48C21.49 384 0 362.5 0 336V80C0 53.49 21.49 32 48 32H496zM64 112V264.2C73.83 256.1 84.55 249 96 243.2V112C96 103.2 88.84 96 80 96C71.16 96 64 103.2 64 112V112zM176 224C181.4 224 186.7 224.2 192 224.7V112C192 103.2 184.8 96 176 96C167.2 96 160 103.2 160 112V224.7C165.3 224.2 170.6 224 176 224zM256 243.2C267.4 249 278.2 256.1 288 264.2V112C288 103.2 280.8 96 272 96C263.2 96 256 103.2 256 112V243.2zM352 112V304C352 312.8 359.2 320 368 320C376.8 320 384 312.8 384 304V112C384 103.2 376.8 96 368 96C359.2 96 352 103.2 352 112zM480 112C480 103.2 472.8 96 464 96C455.2 96 448 103.2 448 112V304C448 312.8 455.2 320 464 320C472.8 320 480 312.8 480 304V112zM96 400C96 355.8 131.8 320 176 320C220.2 320 256 355.8 256 400C256 444.2 220.2 480 176 480C131.8 480 96 444.2 96 400zM176 432C193.7 432 208 417.7 208 400C208 382.3 193.7 368 176 368C158.3 368 144 382.3 144 400C144 417.7 158.3 432 176 432z\"],\n    \"train\": [448, 512, [128646], \"f238\", \"M352 0C405 0 448 42.98 448 96V352C448 399.1 412.8 439.7 366.9 446.9L412.9 492.9C419.9 499.9 414.9 512 404.1 512H365.3C356.8 512 348.6 508.6 342.6 502.6L288 448H160L105.4 502.6C99.37 508.6 91.23 512 82.75 512H43.04C33.06 512 28.06 499.9 35.12 492.9L81.14 446.9C35.18 439.7 0 399.1 0 352V96C0 42.98 42.98 0 96 0H352zM64 192C64 209.7 78.33 224 96 224H352C369.7 224 384 209.7 384 192V96C384 78.33 369.7 64 352 64H96C78.33 64 64 78.33 64 96V192zM224 384C250.5 384 272 362.5 272 336C272 309.5 250.5 288 224 288C197.5 288 176 309.5 176 336C176 362.5 197.5 384 224 384z\"],\n    \"train-subway\": [448, 512, [\"subway\"], \"f239\", \"M352 0C405 0 448 42.98 448 96V352C448 399.1 412.8 439.7 366.9 446.9L412.9 492.9C419.9 499.9 414.9 512 404.1 512H365.3C356.8 512 348.6 508.6 342.6 502.6L288 448H160L105.4 502.6C99.37 508.6 91.23 512 82.75 512H43.04C33.06 512 28.06 499.9 35.12 492.9L81.14 446.9C35.18 439.7 0 399.1 0 352V96C0 42.98 42.98 0 96 0H352zM64 224C64 241.7 78.33 256 96 256H176C193.7 256 208 241.7 208 224V128C208 110.3 193.7 96 176 96H96C78.33 96 64 110.3 64 128V224zM272 96C254.3 96 240 110.3 240 128V224C240 241.7 254.3 256 272 256H352C369.7 256 384 241.7 384 224V128C384 110.3 369.7 96 352 96H272zM96 320C78.33 320 64 334.3 64 352C64 369.7 78.33 384 96 384C113.7 384 128 369.7 128 352C128 334.3 113.7 320 96 320zM352 384C369.7 384 384 369.7 384 352C384 334.3 369.7 320 352 320C334.3 320 320 334.3 320 352C320 369.7 334.3 384 352 384z\"],\n    \"train-tram\": [448, 512, [128650, \"tram\"], \"f7da\", \"M86.76 48C74.61 48 63.12 53.52 55.53 63.01L42.74 78.99C34.46 89.34 19.36 91.02 9.007 82.74C-1.343 74.46-3.021 59.36 5.259 49.01L18.04 33.03C34.74 12.15 60.03 0 86.76 0H361.2C387.1 0 413.3 12.15 429.1 33.03L442.7 49.01C451 59.36 449.3 74.46 438.1 82.74C428.6 91.02 413.5 89.34 405.3 78.99L392.5 63.01C384.9 53.52 373.4 48 361.2 48H248V96H288C341 96 384 138.1 384 192V352C384 382.6 369.7 409.8 347.4 427.4L412.9 492.9C419.9 499.9 414.9 512 404.1 512H365.3C356.8 512 348.6 508.6 342.6 502.6L288 448H160L105.4 502.6C99.37 508.6 91.23 512 82.74 512H43.04C33.06 512 28.06 499.9 35.12 492.9L100.6 427.4C78.3 409.8 64 382.6 64 352V192C64 138.1 106.1 96 160 96H200V48H86.76zM160 160C142.3 160 128 174.3 128 192V224C128 241.7 142.3 256 160 256H288C305.7 256 320 241.7 320 224V192C320 174.3 305.7 160 288 160H160zM160 320C142.3 320 128 334.3 128 352C128 369.7 142.3 384 160 384C177.7 384 192 369.7 192 352C192 334.3 177.7 320 160 320zM288 384C305.7 384 320 369.7 320 352C320 334.3 305.7 320 288 320C270.3 320 256 334.3 256 352C256 369.7 270.3 384 288 384z\"],\n    \"transgender\": [512, 512, [9895, \"transgender-alt\"], \"f225\", \"M498.6 .0003h-94.37c-17.96 0-26.95 21.71-14.25 34.41L411.1 55.61l-67.01 67.01C318.8 105.9 288.6 96 256 96S193.2 105.9 167.9 122.6L151.6 106.3l6.061-6.062c6.25-6.248 6.25-16.38 0-22.63L146.3 66.34c-6.25-6.248-16.38-6.248-22.63 0L117.7 72.41L100.9 55.61L122.1 34.41c12.7-12.7 3.703-34.41-14.25-34.41H13.44C6.016 .0003 0 6.016 0 13.44v94.37c0 17.96 21.71 26.95 34.41 14.25l21.2-21.2l16.8 16.8L66.35 123.7c-6.25 6.248-6.25 16.38 0 22.63l11.31 11.31c6.25 6.248 16.38 6.248 22.63 0l6.061-6.061L122.6 167.9C105.9 193.2 96 223.4 96 256c0 77.4 54.97 141.9 128 156.8v19.23l-16-.0014c-8.836 0-16 7.165-16 16v15.1c0 8.836 7.164 16 16 16L224 480v16c0 8.836 7.164 16 16 16h32c8.836 0 16-7.164 16-16v-16l16-.0001c8.836 0 16-7.164 16-16v-15.1c0-8.836-7.164-16-16-16L288 432v-19.23c73.03-14.83 128-79.37 128-156.8c0-32.6-9.867-62.85-26.61-88.14l67.01-67.01l21.2 21.2C490.3 134.8 512 125.8 512 107.8V13.44C512 6.016 505.1 .0003 498.6 .0003zM256 336c-44.11 0-80-35.89-80-80c0-44.11 35.89-80 80-80c44.11 0 80 35.89 80 80C336 300.1 300.1 336 256 336z\"],\n    \"trash\": [448, 512, [], \"f1f8\", \"M135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69zM394.8 466.1C393.2 492.3 372.3 512 346.9 512H101.1C75.75 512 54.77 492.3 53.19 466.1L31.1 128H416L394.8 466.1z\"],\n    \"trash-arrow-up\": [448, 512, [\"trash-restore\"], \"f829\", \"M284.2 0C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2zM31.1 128H416L394.8 466.1C393.2 492.3 372.3 512 346.9 512H101.1C75.75 512 54.77 492.3 53.19 466.1L31.1 128zM207 199L127 279C117.7 288.4 117.7 303.6 127 312.1C136.4 322.3 151.6 322.3 160.1 312.1L199.1 273.9V408C199.1 421.3 210.7 432 223.1 432C237.3 432 248 421.3 248 408V273.9L287 312.1C296.4 322.3 311.6 322.3 320.1 312.1C330.3 303.6 330.3 288.4 320.1 279L240.1 199C236.5 194.5 230.4 191.1 223.1 191.1C217.6 191.1 211.5 194.5 207 199V199z\"],\n    \"trash-can\": [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69zM31.1 128H416V448C416 483.3 387.3 512 352 512H95.1C60.65 512 31.1 483.3 31.1 448V128zM111.1 208V432C111.1 440.8 119.2 448 127.1 448C136.8 448 143.1 440.8 143.1 432V208C143.1 199.2 136.8 192 127.1 192C119.2 192 111.1 199.2 111.1 208zM207.1 208V432C207.1 440.8 215.2 448 223.1 448C232.8 448 240 440.8 240 432V208C240 199.2 232.8 192 223.1 192C215.2 192 207.1 199.2 207.1 208zM304 208V432C304 440.8 311.2 448 320 448C328.8 448 336 440.8 336 432V208C336 199.2 328.8 192 320 192C311.2 192 304 199.2 304 208z\"],\n    \"trash-can-arrow-up\": [448, 512, [\"trash-restore-alt\"], \"f82a\", \"M284.2 0C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2zM31.1 128H416V448C416 483.3 387.3 512 352 512H95.1C60.65 512 31.1 483.3 31.1 448V128zM207 199L127 279C117.7 288.4 117.7 303.6 127 312.1C136.4 322.3 151.6 322.3 160.1 312.1L199.1 273.9V408C199.1 421.3 210.7 432 223.1 432C237.3 432 248 421.3 248 408V273.9L287 312.1C296.4 322.3 311.6 322.3 320.1 312.1C330.3 303.6 330.3 288.4 320.1 279L240.1 199C236.5 194.5 230.4 191.1 223.1 191.1C217.6 191.1 211.5 194.5 207 199V199z\"],\n    \"tree\": [448, 512, [127794], \"f1bb\", \"M413.8 447.1L256 448l0 31.99C256 497.7 241.8 512 224.1 512c-17.67 0-32.1-14.32-32.1-31.99l0-31.99l-158.9-.0099c-28.5 0-43.69-34.49-24.69-56.4l68.98-79.59H62.22c-25.41 0-39.15-29.8-22.67-49.13l60.41-70.85H89.21c-21.28 0-32.87-22.5-19.28-37.31l134.8-146.5c10.4-11.3 28.22-11.3 38.62-.0033l134.9 146.5c13.62 14.81 2.001 37.31-19.28 37.31h-10.77l60.35 70.86c16.46 19.34 2.716 49.12-22.68 49.12h-15.2l68.98 79.59C458.7 413.7 443.1 447.1 413.8 447.1z\"],\n    \"triangle-exclamation\": [512, 512, [9888, \"exclamation-triangle\", \"warning\"], \"f071\", \"M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z\"],\n    \"trophy\": [576, 512, [127942], \"f091\", \"M572.1 82.38C569.5 71.59 559.8 64 548.7 64h-100.8c.2422-12.45 .1078-23.7-.1559-33.02C447.3 13.63 433.2 0 415.8 0H160.2C142.8 0 128.7 13.63 128.2 30.98C127.1 40.3 127.8 51.55 128.1 64H27.26C16.16 64 6.537 71.59 3.912 82.38C3.1 85.78-15.71 167.2 37.07 245.9c37.44 55.82 100.6 95.03 187.5 117.4c18.7 4.805 31.41 22.06 31.41 41.37C256 428.5 236.5 448 212.6 448H208c-26.51 0-47.99 21.49-47.99 48c0 8.836 7.163 16 15.1 16h223.1c8.836 0 15.1-7.164 15.1-16c0-26.51-21.48-48-47.99-48h-4.644c-23.86 0-43.36-19.5-43.36-43.35c0-19.31 12.71-36.57 31.41-41.37c86.96-22.34 150.1-61.55 187.5-117.4C591.7 167.2 572.9 85.78 572.1 82.38zM77.41 219.8C49.47 178.6 47.01 135.7 48.38 112h80.39c5.359 59.62 20.35 131.1 57.67 189.1C137.4 281.6 100.9 254.4 77.41 219.8zM498.6 219.8c-23.44 34.6-59.94 61.75-109 81.22C426.9 243.1 441.9 171.6 447.2 112h80.39C528.1 135.7 526.5 178.7 498.6 219.8z\"],\n    \"truck\": [640, 512, [128666, 9951], \"f0d1\", \"M368 0C394.5 0 416 21.49 416 48V96H466.7C483.7 96 499.1 102.7 512 114.7L589.3 192C601.3 204 608 220.3 608 237.3V352C625.7 352 640 366.3 640 384C640 401.7 625.7 416 608 416H576C576 469 533 512 480 512C426.1 512 384 469 384 416H256C256 469 213 512 160 512C106.1 512 64 469 64 416H48C21.49 416 0 394.5 0 368V48C0 21.49 21.49 0 48 0H368zM416 160V256H544V237.3L466.7 160H416zM160 368C133.5 368 112 389.5 112 416C112 442.5 133.5 464 160 464C186.5 464 208 442.5 208 416C208 389.5 186.5 368 160 368zM480 464C506.5 464 528 442.5 528 416C528 389.5 506.5 368 480 368C453.5 368 432 389.5 432 416C432 442.5 453.5 464 480 464z\"],\n    \"truck-fast\": [640, 512, [\"shipping-fast\"], \"f48b\", \"M64 48C64 21.49 85.49 0 112 0H368C394.5 0 416 21.49 416 48V256H608V352C625.7 352 640 366.3 640 384C640 401.7 625.7 416 608 416H576C576 469 533 512 480 512C426.1 512 384 469 384 416H256C256 469 213 512 160 512C106.1 512 64 469 64 416V288H208C216.8 288 224 280.8 224 272C224 263.2 216.8 256 208 256H16C7.164 256 0 248.8 0 240C0 231.2 7.164 224 16 224H240C248.8 224 256 216.8 256 208C256 199.2 248.8 192 240 192H48C39.16 192 32 184.8 32 176C32 167.2 39.16 160 48 160H272C280.8 160 288 152.8 288 144C288 135.2 280.8 128 272 128H16C7.164 128 0 120.8 0 112C0 103.2 7.164 96 16 96H64V48zM160 464C186.5 464 208 442.5 208 416C208 389.5 186.5 368 160 368C133.5 368 112 389.5 112 416C112 442.5 133.5 464 160 464zM480 368C453.5 368 432 389.5 432 416C432 442.5 453.5 464 480 464C506.5 464 528 442.5 528 416C528 389.5 506.5 368 480 368zM466.7 160H400V96H466.7C483.7 96 499.1 102.7 512 114.7L589.3 192C601.3 204 608 220.3 608 237.3V288H544V237.3L466.7 160z\"],\n    \"truck-medical\": [640, 512, [128657, \"ambulance\"], \"f0f9\", \"M368 0C394.5 0 416 21.49 416 48V96H466.7C483.7 96 499.1 102.7 512 114.7L589.3 192C601.3 204 608 220.3 608 237.3V352C625.7 352 640 366.3 640 384C640 401.7 625.7 416 608 416H576C576 469 533 512 480 512C426.1 512 384 469 384 416H256C256 469 213 512 160 512C106.1 512 64 469 64 416H48C21.49 416 0 394.5 0 368V48C0 21.49 21.49 0 48 0H368zM416 160V256H544V237.3L466.7 160H416zM160 368C133.5 368 112 389.5 112 416C112 442.5 133.5 464 160 464C186.5 464 208 442.5 208 416C208 389.5 186.5 368 160 368zM480 464C506.5 464 528 442.5 528 416C528 389.5 506.5 368 480 368C453.5 368 432 389.5 432 416C432 442.5 453.5 464 480 464zM112 176C112 184.8 119.2 192 128 192H176V240C176 248.8 183.2 256 192 256H224C232.8 256 240 248.8 240 240V192H288C296.8 192 304 184.8 304 176V144C304 135.2 296.8 128 288 128H240V80C240 71.16 232.8 64 224 64H192C183.2 64 176 71.16 176 80V128H128C119.2 128 112 135.2 112 144V176z\"],\n    \"truck-monster\": [640, 512, [], \"f63b\", \"M419.2 25.6L496 128H576C593.7 128 608 142.3 608 160V224C625.7 224 640 238.3 640 256C640 273.7 625.7 287.1 608 288C578.8 249.1 532.3 224 480 224C427.7 224 381.2 249.1 351.1 288H288C258.8 249.1 212.3 224 160 224C107.7 224 61.18 249.1 31.99 288C14.32 287.1 0 273.7 0 256C0 238.3 14.33 224 32 224V160C32 142.3 46.33 128 64 128H224V48C224 21.49 245.5 0 272 0H368C388.1 0 407.1 9.484 419.2 25.6H419.2zM288 128H416L368 64H288V128zM168 256C180.1 256 190.1 264.9 191.8 276.6C199.4 278.8 206.7 281.9 213.5 285.6C222.9 278.5 236.3 279.3 244.9 287.8L256.2 299.1C264.7 307.7 265.5 321.1 258.4 330.5C262.1 337.3 265.2 344.6 267.4 352.2C279.1 353.9 288 363.9 288 376V392C288 404.1 279.1 414.1 267.4 415.8C265.2 423.4 262.1 430.7 258.4 437.5C265.5 446.9 264.7 460.3 256.2 468.9L244.9 480.2C236.3 488.7 222.9 489.5 213.5 482.4C206.7 486.1 199.4 489.2 191.8 491.4C190.1 503.1 180.1 512 167.1 512H151.1C139.9 512 129.9 503.1 128.2 491.4C120.6 489.2 113.3 486.1 106.5 482.4C97.09 489.5 83.7 488.7 75.15 480.2L63.83 468.9C55.28 460.3 54.53 446.9 61.58 437.5C57.85 430.7 54.81 423.4 52.57 415.8C40.94 414.1 31.1 404.1 31.1 392V376C31.1 363.9 40.94 353.9 52.57 352.2C54.81 344.6 57.85 337.3 61.58 330.5C54.53 321.1 55.28 307.7 63.83 299.1L75.15 287.8C83.7 279.3 97.09 278.5 106.5 285.6C113.3 281.9 120.6 278.8 128.2 276.6C129.9 264.9 139.9 255.1 151.1 255.1L168 256zM160 432C186.5 432 208 410.5 208 384C208 357.5 186.5 336 160 336C133.5 336 112 357.5 112 384C112 410.5 133.5 432 160 432zM448.2 276.6C449.9 264.9 459.9 256 472 256H488C500.1 256 510.1 264.9 511.8 276.6C519.4 278.8 526.7 281.9 533.5 285.6C542.9 278.5 556.3 279.3 564.9 287.8L576.2 299.1C584.7 307.7 585.5 321.1 578.4 330.5C582.1 337.3 585.2 344.6 587.4 352.2C599.1 353.9 608 363.9 608 376V392C608 404.1 599.1 414.1 587.4 415.8C585.2 423.4 582.1 430.7 578.4 437.5C585.5 446.9 584.7 460.3 576.2 468.9L564.9 480.2C556.3 488.7 542.9 489.5 533.5 482.4C526.7 486.1 519.4 489.2 511.8 491.4C510.1 503.1 500.1 512 488 512H472C459.9 512 449.9 503.1 448.2 491.4C440.6 489.2 433.3 486.1 426.5 482.4C417.1 489.5 403.7 488.7 395.1 480.2L383.8 468.9C375.3 460.3 374.5 446.9 381.6 437.5C377.9 430.7 374.8 423.4 372.6 415.8C360.9 414.1 352 404.1 352 392V376C352 363.9 360.9 353.9 372.6 352.2C374.8 344.6 377.9 337.3 381.6 330.5C374.5 321.1 375.3 307.7 383.8 299.1L395.1 287.8C403.7 279.3 417.1 278.5 426.5 285.6C433.3 281.9 440.6 278.8 448.2 276.6L448.2 276.6zM480 336C453.5 336 432 357.5 432 384C432 410.5 453.5 432 480 432C506.5 432 528 410.5 528 384C528 357.5 506.5 336 480 336z\"],\n    \"truck-moving\": [640, 512, [], \"f4df\", \"M416 32C451.3 32 480 60.65 480 96V144H528.8C545.6 144 561.5 151.5 572.2 164.5L630.1 236.4C636.8 243.5 640 252.5 640 261.7V352C640 369.7 625.7 384 608 384H606.4C607.4 389.2 608 394.5 608 400C608 444.2 572.2 480 528 480C483.8 480 448 444.2 448 400C448 394.5 448.6 389.2 449.6 384H286.4C287.4 389.2 288 394.5 288 400C288 444.2 252.2 480 208 480C181.8 480 158.6 467.4 144 448C129.4 467.4 106.2 480 80 480C35.82 480 0 444.2 0 400V96C0 60.65 28.65 32 64 32H416zM535 194.9C533.5 193.1 531.2 192 528.8 192H480V256H584.1L535 194.9zM528 432C545.7 432 560 417.7 560 400C560 382.3 545.7 368 528 368C510.3 368 496 382.3 496 400C496 417.7 510.3 432 528 432zM208 368C190.3 368 176 382.3 176 400C176 417.7 190.3 432 208 432C225.7 432 240 417.7 240 400C240 382.3 225.7 368 208 368zM80 432C97.67 432 112 417.7 112 400C112 382.3 97.67 368 80 368C62.33 368 48 382.3 48 400C48 417.7 62.33 432 80 432z\"],\n    \"truck-pickup\": [640, 512, [128763], \"f63c\", \"M272 32H368.6C388.1 32 406.5 40.84 418.6 56.02L527.4 192H576C593.7 192 608 206.3 608 224V288C625.7 288 640 302.3 640 320C640 337.7 625.7 352 608 352H574.9C575.6 357.2 576 362.6 576 368C576 429.9 525.9 480 464 480C402.1 480 352 429.9 352 368C352 362.6 352.4 357.2 353.1 352H286.9C287.6 357.2 288 362.6 288 368C288 429.9 237.9 480 176 480C114.1 480 64 429.9 64 368C64 362.6 64.39 357.2 65.13 352H32C14.33 352 0 337.7 0 320C0 302.3 14.33 288 32 288V224C32 206.3 46.33 192 64 192H224V80C224 53.49 245.5 32 272 32H272zM368.6 96H288V192H445.4L368.6 96zM176 416C202.5 416 224 394.5 224 368C224 341.5 202.5 320 176 320C149.5 320 128 341.5 128 368C128 394.5 149.5 416 176 416zM464 416C490.5 416 512 394.5 512 368C512 341.5 490.5 320 464 320C437.5 320 416 341.5 416 368C416 394.5 437.5 416 464 416z\"],\n    \"truck-ramp-box\": [640, 512, [\"truck-loading\"], \"f4de\", \"M640 .0003V400C640 461.9 589.9 512 528 512C467 512 417.5 463.3 416 402.7L48.41 502.9C31.36 507.5 13.77 497.5 9.126 480.4C4.48 463.4 14.54 445.8 31.59 441.1L352 353.8V64C352 28.65 380.7 0 416 0L640 .0003zM528 352C501.5 352 480 373.5 480 400C480 426.5 501.5 448 528 448C554.5 448 576 426.5 576 400C576 373.5 554.5 352 528 352zM23.11 207.7C18.54 190.6 28.67 173.1 45.74 168.5L92.1 156.1L112.8 233.4C115.1 241.9 123.9 246.1 132.4 244.7L163.3 236.4C171.8 234.1 176.9 225.3 174.6 216.8L153.9 139.5L200.3 127.1C217.4 122.5 234.9 132.7 239.5 149.7L280.9 304.3C285.5 321.4 275.3 338.9 258.3 343.5L103.7 384.9C86.64 389.5 69.1 379.3 64.52 362.3L23.11 207.7z\"],\n    \"tty\": [512, 512, [\"teletype\"], \"f1e4\", \"M271.1 364v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40c0-6.625-5.375-12-12-12h-40C277.3 352 271.1 357.4 271.1 364zM367.1 364v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40c0-6.625-5.375-12-12-12h-40C373.3 352 367.1 357.4 367.1 364zM275.1 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.376 12 12 12h39.1c6.625 0 12-5.375 12-12v-40C287.1 261.4 282.6 256 275.1 256zM83.96 448h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40C95.96 453.4 90.59 448 83.96 448zM175.1 364v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40c0-6.625-5.375-12-12-12h-40C181.3 352 175.1 357.4 175.1 364zM371.1 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.372 12 11.1 12h39.1c6.625 0 12-5.375 12-12v-40C383.1 261.4 378.6 256 371.1 256zM467.1 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.369 12 11.99 12h39.1c6.625 0 12.01-5.375 12.01-12v-40C479.1 261.4 474.6 256 467.1 256zM371.1 448h-232c-6.625 0-12 5.375-12 12v40c0 6.625 5.375 12 12 12h232c6.625 0 12-5.375 12-12v-40C383.1 453.4 378.6 448 371.1 448zM179.1 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.38 12 12 12h39.1c6.625 0 11.1-5.375 11.1-12v-40C191.1 261.4 186.6 256 179.1 256zM467.1 448h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40C479.1 453.4 474.6 448 467.1 448zM79.96 364v40c0 6.625 5.375 12 12 12h40c6.625 0 12-5.375 12-12v-40c0-6.625-5.375-12-12-12h-40C85.34 352 79.96 357.4 79.96 364zM83.96 256h-40c-6.625 0-12 5.375-12 12v40c0 6.625 5.383 12 12.01 12H83.97c6.625 0 11.99-5.375 11.99-12v-40C95.96 261.4 90.59 256 83.96 256zM504.9 102.9C367.7-34.31 144.3-34.32 7.083 102.9c-7.975 7.973-9.375 20.22-3.391 29.74l42.17 67.47c6.141 9.844 18.47 13.88 29.35 9.632l84.36-33.74C169.5 172.1 175.6 161.1 174.5 151.3l-5.303-53.27c56.15-19.17 117.4-19.17 173.6 .0059L337.5 151.3c-1.139 10.59 4.997 20.78 14.96 24.73l84.35 33.73c10.83 4.303 23.22 .1608 29.33-9.615l42.18-67.48C514.3 123.2 512.9 110.9 504.9 102.9z\"],\n    \"turkish-lira-sign\": [384, 512, [\"try\", \"turkish-lira\"], \"e2bb\", \"M96 32C113.7 32 128 46.33 128 64V99.29L247.2 65.23C264.2 60.38 281.9 70.22 286.8 87.21C291.6 104.2 281.8 121.9 264.8 126.8L128 165.9V195.3L247.2 161.2C264.2 156.4 281.9 166.2 286.8 183.2C291.6 200.2 281.8 217.9 264.8 222.8L128 261.9V416H191.8C260 416 316.2 362.5 319.6 294.4L320 286.4C320.9 268.8 335.9 255.2 353.6 256C371.2 256.9 384.8 271.9 383.1 289.6L383.6 297.6C378.5 399.8 294.1 480 191.8 480H96C78.33 480 64 465.7 64 448V280.1L40.79 286.8C23.8 291.6 6.087 281.8 1.232 264.8C-3.623 247.8 6.217 230.1 23.21 225.2L64 213.6V184.1L40.79 190.8C23.8 195.6 6.087 185.8 1.232 168.8C-3.623 151.8 6.216 134.1 23.21 129.2L64 117.6V64C64 46.33 78.33 32 96 32L96 32z\"],\n    \"turn-down\": [384, 512, [10549, \"level-down-alt\"], \"f3be\", \"M313.6 392.3l-104 112c-9.5 10.23-25.69 10.23-35.19 0l-104-112c-6.484-6.984-8.219-17.17-4.406-25.92S78.45 352 88 352H160V80C160 71.19 152.8 64 144 64H32C14.33 64 0 49.69 0 32s14.33-32 32-32h112C188.1 0 224 35.88 224 80V352h72c9.547 0 18.19 5.656 22 14.41S320.1 385.3 313.6 392.3z\"],\n    \"turn-up\": [384, 512, [10548, \"level-up-alt\"], \"f3bf\", \"M318 145.6c-3.812 8.75-12.45 14.41-22 14.41L224 160v272c0 44.13-35.89 80-80 80H32c-17.67 0-32-14.31-32-32s14.33-32 32-32h112C152.8 448 160 440.8 160 432V160L88 159.1c-9.547 0-18.19-5.656-22-14.41S63.92 126.7 70.41 119.7l104-112c9.498-10.23 25.69-10.23 35.19 0l104 112C320.1 126.7 321.8 136.8 318 145.6z\"],\n    \"tv\": [640, 512, [63717, \"television\", \"tv-alt\"], \"f26c\", \"M512 448H127.1C110.3 448 96 462.3 96 479.1S110.3 512 127.1 512h384C529.7 512 544 497.7 544 480S529.7 448 512 448zM592 0h-544C21.5 0 0 21.5 0 48v320C0 394.5 21.5 416 48 416h544c26.5 0 48-21.5 48-48v-320C640 21.5 618.5 0 592 0zM576 352H64v-288h512V352z\"],\n    \"u\": [384, 512, [117], \"55\", \"M384 64.01v225.7c0 104.1-86.13 190.3-192 190.3s-192-85.38-192-190.3V64.01C0 46.34 14.33 32.01 32 32.01S64 46.34 64 64.01v225.7c0 69.67 57.42 126.3 128 126.3s128-56.67 128-126.3V64.01c0-17.67 14.33-32 32-32S384 46.34 384 64.01z\"],\n    \"umbrella\": [576, 512, [], \"f0e9\", \"M255.1 301.7v130.3c0 8.814-7.188 16-16 16c-7.814 0-13.19-5.314-15.1-10.69c-5.906-16.72-24.1-25.41-40.81-19.5c-16.69 5.875-25.41 24.19-19.5 40.79C175.8 490.6 206.2 512 239.1 512C284.1 512 320 476.1 320 431.1v-130.3c-9.094-7.908-19.81-13.61-32-13.61C275.7 288.1 265.6 292.9 255.1 301.7zM575.7 280.9C547.1 144.5 437.3 62.61 320 49.91V32.01c0-17.69-14.31-32.01-32-32.01S255.1 14.31 255.1 32.01v17.91C138.3 62.61 29.48 144.5 .2949 280.9C-1.926 290.1 8.795 302.1 18.98 292.2c52-55.01 107.7-52.39 158.6 37.01c5.312 9.502 14.91 8.625 19.72 0C217.5 293.9 242.2 256 287.1 256c58.5 0 88.19 68.82 90.69 73.2c4.812 8.625 14.41 9.502 19.72 0c51-89.52 107.1-91.39 158.6-37.01C567.3 302.2 577.9 290.1 575.7 280.9z\"],\n    \"umbrella-beach\": [640, 512, [127958], \"f5ca\", \"M115.4 136.8l102.1 37.35c35.13-81.62 86.25-144.4 139-173.7c-95.88-4.875-188.8 36.96-248.5 111.7C101.2 120.6 105.2 133.2 115.4 136.8zM247.6 185l238.5 86.87c35.75-121.4 18.62-231.6-42.63-253.9c-7.375-2.625-15.12-4.062-23.12-4.062C362.4 13.88 292.1 83.13 247.6 185zM521.5 60.51c6.25 16.25 10.75 34.62 13.13 55.25c5.75 49.87-1.376 108.1-18.88 166.9l102.6 37.37c10.13 3.75 21.25-3.375 21.5-14.12C642.3 210.1 598 118.4 521.5 60.51zM528 448h-207l65-178.5l-60.13-21.87l-72.88 200.4H48C21.49 448 0 469.5 0 496C0 504.8 7.163 512 16 512h544c8.837 0 16-7.163 16-15.1C576 469.5 554.5 448 528 448z\"],\n    \"underline\": [448, 512, [], \"f0cd\", \"M416 448H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h384c17.69 0 32-14.31 32-32S433.7 448 416 448zM48 64.01H64v160c0 88.22 71.78 159.1 160 159.1s160-71.78 160-159.1v-160h16c17.69 0 32-14.32 32-32s-14.31-31.1-32-31.1l-96-.0049c-17.69 0-32 14.32-32 32s14.31 32 32 32H320v160c0 52.94-43.06 95.1-96 95.1S128 276.1 128 224v-160h16c17.69 0 32-14.31 32-32s-14.31-32-32-32l-96 .0049c-17.69 0-32 14.31-32 31.1S30.31 64.01 48 64.01z\"],\n    \"universal-access\": [512, 512, [], \"f29a\", \"M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM256 80c22.09 0 40 17.91 40 40S278.1 160 256 160S216 142.1 216 120S233.9 80 256 80zM374.6 215.1L315.3 232C311.6 233.1 307.8 233.6 304 234.4v62.32l30.64 87.34c4.391 12.5-2.188 26.19-14.69 30.59C317.3 415.6 314.6 416 312 416c-9.906 0-19.19-6.188-22.64-16.06l-25.85-70.65c-2.562-7.002-12.46-7.002-15.03 0l-25.85 70.65C219.2 409.8 209.9 416 200 416c-2.641 0-5.312-.4375-7.953-1.344c-12.5-4.406-19.08-18.09-14.69-30.59L208 296.7V234.4C204.2 233.6 200.4 233.1 196.7 232L137.4 215.1C124.7 211.4 117.3 198.2 120.9 185.4S137.9 165.2 150.6 168.9l59.25 16.94c30.17 8.623 62.15 8.623 92.31 0l59.25-16.94c12.7-3.781 26.02 3.719 29.67 16.47C394.7 198.2 387.3 211.4 374.6 215.1z\"],\n    \"unlock\": [448, 512, [128275], \"f09c\", \"M144 192H384C419.3 192 448 220.7 448 256V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V256C0 220.7 28.65 192 64 192H80V144C80 64.47 144.5 0 224 0C281.5 0 331 33.69 354.1 82.27C361.7 98.23 354.9 117.3 338.1 124.9C322.1 132.5 303.9 125.7 296.3 109.7C283.4 82.63 255.9 64 224 64C179.8 64 144 99.82 144 144L144 192z\"],\n    \"unlock-keyhole\": [448, 512, [\"unlock-alt\"], \"f13e\", \"M224 64C179.8 64 144 99.82 144 144V192H384C419.3 192 448 220.7 448 256V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V256C0 220.7 28.65 192 64 192H80V144C80 64.47 144.5 0 224 0C281.5 0 331 33.69 354.1 82.27C361.7 98.23 354.9 117.3 338.1 124.9C322.1 132.5 303.9 125.7 296.3 109.7C283.4 82.63 255.9 64 224 64H224zM256 384C273.7 384 288 369.7 288 352C288 334.3 273.7 320 256 320H192C174.3 320 160 334.3 160 352C160 369.7 174.3 384 192 384H256z\"],\n    \"up-down\": [256, 512, [11021, 8597, \"arrows-alt-v\"], \"f338\", \"M249.6 392.3l-104 112c-9.094 9.781-26.09 9.781-35.19 0l-103.1-112c-6.484-6.984-8.219-17.17-4.406-25.92S14.45 352 24 352H80V160H24C14.45 160 5.812 154.3 1.999 145.6C-1.813 136.8-.0781 126.7 6.406 119.7l104-112c9.094-9.781 26.09-9.781 35.19 0l104 112c6.484 6.984 8.219 17.17 4.406 25.92C250.2 154.3 241.5 160 232 160H176v192h56c9.547 0 18.19 5.656 22 14.41S256.1 385.3 249.6 392.3z\"],\n    \"up-down-left-right\": [512, 512, [\"arrows-alt\"], \"f0b2\", \"M512 256c0 6.797-2.891 13.28-7.938 17.84l-80 72C419.6 349.9 413.8 352 408 352c-3.312 0-6.625-.6875-9.766-2.078C389.6 346.1 384 337.5 384 328V288h-96v96l40-.0013c9.484 0 18.06 5.578 21.92 14.23s2.25 18.78-4.078 25.83l-72 80C269.3 509.1 262.8 512 255.1 512s-13.28-2.89-17.84-7.937l-71.1-80c-6.328-7.047-7.938-17.17-4.078-25.83s12.44-14.23 21.92-14.23l39.1 .0013V288H128v40c0 9.484-5.578 18.06-14.23 21.92C110.6 351.3 107.3 352 104 352c-5.812 0-11.56-2.109-16.06-6.156l-80-72C2.891 269.3 0 262.8 0 256s2.891-13.28 7.938-17.84l80-72C95 159.8 105.1 158.3 113.8 162.1C122.4 165.9 128 174.5 128 184V224h95.1V128l-39.1-.0013c-9.484 0-18.06-5.578-21.92-14.23S159.8 94.99 166.2 87.94l71.1-80c9.125-10.09 26.56-10.09 35.69 0l72 80c6.328 7.047 7.938 17.17 4.078 25.83s-12.44 14.23-21.92 14.23l-40 .0013V224H384V184c0-9.484 5.578-18.06 14.23-21.92c8.656-3.812 18.77-2.266 25.83 4.078l80 72C509.1 242.7 512 249.2 512 256z\"],\n    \"up-long\": [320, 512, [\"long-arrow-alt-up\"], \"f30c\", \"M285.1 145.7c-3.81 8.758-12.45 14.42-21.1 14.42L192 160.1V480c0 17.69-14.33 32-32 32s-32-14.31-32-32V160.1L55.1 160.1c-9.547 0-18.19-5.658-22-14.42c-3.811-8.758-2.076-18.95 4.408-25.94l104-112.1c9.498-10.24 25.69-10.24 35.19 0l104 112.1C288.1 126.7 289.8 136.9 285.1 145.7z\"],\n    \"up-right-and-down-left-from-center\": [512, 512, [\"expand-alt\"], \"f424\", \"M208 281.4c-12.5-12.5-32.76-12.5-45.26-.002l-78.06 78.07l-30.06-30.06c-6.125-6.125-14.31-9.367-22.63-9.367c-4.125 0-8.279 .7891-12.25 2.43c-11.97 4.953-19.75 16.62-19.75 29.56v135.1C.0013 501.3 10.75 512 24 512h136c12.94 0 24.63-7.797 29.56-19.75c4.969-11.97 2.219-25.72-6.938-34.87l-30.06-30.06l78.06-78.07c12.5-12.49 12.5-32.75 .002-45.25L208 281.4zM487.1 0h-136c-12.94 0-24.63 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.87l30.06 30.06l-78.06 78.07c-12.5 12.5-12.5 32.76 0 45.26l22.62 22.62c12.5 12.5 32.76 12.5 45.26 0l78.06-78.07l30.06 30.06c9.156 9.141 22.87 11.84 34.87 6.937C504.2 184.6 512 172.9 512 159.1V23.1C512 10.74 501.3 0 487.1 0z\"],\n    \"up-right-from-square\": [512, 512, [\"external-link-alt\"], \"f35d\", \"M384 320c-17.67 0-32 14.33-32 32v96H64V160h96c17.67 0 32-14.32 32-32s-14.33-32-32-32L64 96c-35.35 0-64 28.65-64 64V448c0 35.34 28.65 64 64 64h288c35.35 0 64-28.66 64-64v-96C416 334.3 401.7 320 384 320zM488 0H352c-12.94 0-24.62 7.797-29.56 19.75c-4.969 11.97-2.219 25.72 6.938 34.88L370.8 96L169.4 297.4c-12.5 12.5-12.5 32.75 0 45.25C175.6 348.9 183.8 352 192 352s16.38-3.125 22.62-9.375L416 141.3l41.38 41.38c9.156 9.141 22.88 11.84 34.88 6.938C504.2 184.6 512 172.9 512 160V24C512 10.74 501.3 0 488 0z\"],\n    \"upload\": [512, 512, [], \"f093\", \"M105.4 182.6c12.5 12.49 32.76 12.5 45.25 .001L224 109.3V352c0 17.67 14.33 32 32 32c17.67 0 32-14.33 32-32V109.3l73.38 73.38c12.49 12.49 32.75 12.49 45.25-.001c12.49-12.49 12.49-32.75 0-45.25l-128-128C272.4 3.125 264.2 0 256 0S239.6 3.125 233.4 9.375L105.4 137.4C92.88 149.9 92.88 170.1 105.4 182.6zM480 352h-160c0 35.35-28.65 64-64 64s-64-28.65-64-64H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96C512 366.3 497.7 352 480 352zM432 456c-13.2 0-24-10.8-24-24c0-13.2 10.8-24 24-24s24 10.8 24 24C456 445.2 445.2 456 432 456z\"],\n    \"user\": [448, 512, [62144, 128100], \"f007\", \"M224 256c70.7 0 128-57.31 128-128s-57.3-128-128-128C153.3 0 96 57.31 96 128S153.3 256 224 256zM274.7 304H173.3C77.61 304 0 381.6 0 477.3c0 19.14 15.52 34.67 34.66 34.67h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304z\"],\n    \"user-astronaut\": [448, 512, [], \"f4fb\", \"M176 448C167.3 448 160 455.3 160 464V512h32v-48C192 455.3 184.8 448 176 448zM272 448c-8.75 0-16 7.25-16 16s7.25 16 16 16s16-7.25 16-16S280.8 448 272 448zM164 172l8.205 24.62c1.215 3.645 6.375 3.645 7.59 0L188 172l24.62-8.203c3.646-1.219 3.646-6.375 0-7.594L188 148L179.8 123.4c-1.215-3.648-6.375-3.648-7.59 0L164 148L139.4 156.2c-3.646 1.219-3.646 6.375 0 7.594L164 172zM336.1 315.4C304 338.6 265.1 352 224 352s-80.03-13.43-112.1-36.59C46.55 340.2 0 403.3 0 477.3C0 496.5 15.52 512 34.66 512H128v-64c0-17.75 14.25-32 32-32h128c17.75 0 32 14.25 32 32v64h93.34C432.5 512 448 496.5 448 477.3C448 403.3 401.5 340.2 336.1 315.4zM64 224h13.5C102.3 280.5 158.4 320 224 320s121.8-39.5 146.5-96H384c8.75 0 16-7.25 16-16v-96C400 103.3 392.8 96 384 96h-13.5C345.8 39.5 289.6 0 224 0S102.3 39.5 77.5 96H64C55.25 96 48 103.3 48 112v96C48 216.8 55.25 224 64 224zM104 136C104 113.9 125.5 96 152 96h144c26.5 0 48 17.88 48 40V160c0 53-43 96-96 96h-48c-53 0-96-43-96-96V136z\"],\n    \"user-check\": [640, 512, [], \"f4fc\", \"M274.7 304H173.3C77.61 304 0 381.6 0 477.3C0 496.5 15.52 512 34.66 512H413.3C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM632.3 134.4c-9.703-9-24.91-8.453-33.92 1.266l-87.05 93.75l-38.39-38.39c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94l56 56C499.5 285.5 505.6 288 512 288h.4375c6.531-.125 12.72-2.891 17.16-7.672l104-112C642.6 158.6 642 143.4 632.3 134.4z\"],\n    \"user-clock\": [640, 512, [], \"f4fd\", \"M496 224c-79.63 0-144 64.38-144 144s64.38 144 144 144s144-64.38 144-144S575.6 224 496 224zM544 384h-54.25C484.4 384 480 379.6 480 374.3V304c0-8.836 7.164-16 16-16c8.838 0 16 7.164 16 16v48h32c8.838 0 16 7.164 16 15.1S552.8 384 544 384zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM320 368c0-19.3 3.221-37.82 8.961-55.2C311.9 307.2 293.6 304 274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512H395C349.7 480.2 320 427.6 320 368z\"],\n    \"user-doctor\": [448, 512, [\"user-md\"], \"f0f0\", \"M352 128C352 198.7 294.7 256 223.1 256C153.3 256 95.1 198.7 95.1 128C95.1 57.31 153.3 0 223.1 0C294.7 0 352 57.31 352 128zM287.1 362C260.4 369.1 239.1 394.2 239.1 424V448C239.1 452.2 241.7 456.3 244.7 459.3L260.7 475.3C266.9 481.6 277.1 481.6 283.3 475.3C289.6 469.1 289.6 458.9 283.3 452.7L271.1 441.4V424C271.1 406.3 286.3 392 303.1 392C321.7 392 336 406.3 336 424V441.4L324.7 452.7C318.4 458.9 318.4 469.1 324.7 475.3C330.9 481.6 341.1 481.6 347.3 475.3L363.3 459.3C366.3 456.3 368 452.2 368 448V424C368 394.2 347.6 369.1 320 362V308.8C393.5 326.7 448 392.1 448 472V480C448 497.7 433.7 512 416 512H32C14.33 512 0 497.7 0 480V472C0 393 54.53 326.7 128 308.8V370.3C104.9 377.2 88 398.6 88 424C88 454.9 113.1 480 144 480C174.9 480 200 454.9 200 424C200 398.6 183.1 377.2 160 370.3V304.2C162.7 304.1 165.3 304 168 304H280C282.7 304 285.3 304.1 288 304.2L287.1 362zM167.1 424C167.1 437.3 157.3 448 143.1 448C130.7 448 119.1 437.3 119.1 424C119.1 410.7 130.7 400 143.1 400C157.3 400 167.1 410.7 167.1 424z\"],\n    \"user-gear\": [640, 512, [\"user-cog\"], \"f4fe\", \"M425.1 482.6c-2.303-1.25-4.572-2.559-6.809-3.93l-7.818 4.493c-6.002 3.504-12.83 5.352-19.75 5.352c-10.71 0-21.13-4.492-28.97-12.75c-18.41-20.09-32.29-44.15-40.22-69.9c-5.352-18.06 2.343-36.87 17.83-45.24l8.018-4.669c-.0664-2.621-.0664-5.242 0-7.859l-7.655-4.461c-12.3-6.953-19.4-19.66-19.64-33.38C305.6 306.3 290.4 304 274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512H413.3c5.727 0 10.9-1.727 15.66-4.188c-2.271-4.984-3.86-10.3-3.86-16.06V482.6zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM610.5 373.3c2.625-14 2.625-28.5 0-42.5l25.75-15c3-1.625 4.375-5.125 3.375-8.5c-6.75-21.5-18.25-41.13-33.25-57.38c-2.25-2.5-6-3.125-9-1.375l-25.75 14.88c-10.88-9.25-23.38-16.5-36.88-21.25V212.3c0-3.375-2.5-6.375-5.75-7c-22.25-5-45-4.875-66.25 0c-3.25 .625-5.625 3.625-5.625 7v29.88c-13.5 4.75-26 12-36.88 21.25L394.4 248.5c-2.875-1.75-6.625-1.125-9 1.375c-15 16.25-26.5 35.88-33.13 57.38c-1 3.375 .3751 6.875 3.25 8.5l25.75 15c-2.5 14-2.5 28.5 0 42.5l-25.75 15c-3 1.625-4.25 5.125-3.25 8.5c6.625 21.5 18.13 41 33.13 57.38c2.375 2.5 6 3.125 9 1.375l25.88-14.88c10.88 9.25 23.38 16.5 36.88 21.25v29.88c0 3.375 2.375 6.375 5.625 7c22.38 5 45 4.875 66.25 0c3.25-.625 5.75-3.625 5.75-7v-29.88c13.5-4.75 26-12 36.88-21.25l25.75 14.88c2.875 1.75 6.75 1.125 9-1.375c15-16.25 26.5-35.88 33.25-57.38c1-3.375-.3751-6.875-3.375-8.5L610.5 373.3zM496 400.5c-26.75 0-48.5-21.75-48.5-48.5s21.75-48.5 48.5-48.5c26.75 0 48.5 21.75 48.5 48.5S522.8 400.5 496 400.5z\"],\n    \"user-graduate\": [512, 512, [], \"f501\", \"M45.63 79.75L52 81.25v58.5C45 143.9 40 151.3 40 160c0 8.375 4.625 15.38 11.12 19.75L35.5 242C33.75 248.9 37.63 256 43.13 256h41.75c5.5 0 9.375-7.125 7.625-13.1L76.88 179.8C83.38 175.4 88 168.4 88 160c0-8.75-5-16.12-12-20.25V87.13L128 99.63l.001 60.37c0 70.75 57.25 128 128 128s127.1-57.25 127.1-128L384 99.62l82.25-19.87c18.25-4.375 18.25-27 0-31.5l-190.4-46c-13-3-26.62-3-39.63 0l-190.6 46C27.5 52.63 27.5 75.38 45.63 79.75zM359.2 312.8l-103.2 103.2l-103.2-103.2c-69.93 22.3-120.8 87.2-120.8 164.5C32 496.5 47.53 512 66.67 512h378.7C464.5 512 480 496.5 480 477.3C480 400 429.1 335.1 359.2 312.8z\"],\n    \"user-group\": [640, 512, [128101, \"user-friends\"], \"f500\", \"M224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM274.7 304H173.3c-95.73 0-173.3 77.6-173.3 173.3C0 496.5 15.52 512 34.66 512H413.3C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM479.1 320h-73.85C451.2 357.7 480 414.1 480 477.3C480 490.1 476.2 501.9 470 512h138C625.7 512 640 497.6 640 479.1C640 391.6 568.4 320 479.1 320zM432 256C493.9 256 544 205.9 544 144S493.9 32 432 32c-25.11 0-48.04 8.555-66.72 22.51C376.8 76.63 384 101.4 384 128c0 35.52-11.93 68.14-31.59 94.71C372.7 243.2 400.8 256 432 256z\"],\n    \"user-injured\": [448, 512, [], \"f728\", \"M277.4 11.98C261.1 4.469 243.1 0 224 0C170.3 0 124.5 33.13 105.5 80h81.07L277.4 11.98zM342.5 80c-7.895-19.47-20.66-36.19-36.48-49.51L240 80H342.5zM224 256c70.7 0 128-57.31 128-128c0-5.48-.9453-10.7-1.613-16H97.61C96.95 117.3 96 122.5 96 128C96 198.7 153.3 256 224 256zM272 416h-45.14l58.64 93.83C305.4 503.1 320 485.8 320 464C320 437.5 298.5 416 272 416zM274.7 304H173.3c-5.393 0-10.71 .3242-15.98 .8047L206.9 384H272c44.13 0 80 35.88 80 80c0 18.08-6.252 34.59-16.4 48h77.73C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM0 477.3C0 496.5 15.52 512 34.66 512H64v-169.1C24.97 374.7 0 423.1 0 477.3zM96 322.4V512h153.1L123.7 311.3C114.1 314.2 104.8 317.9 96 322.4z\"],\n    \"user-large\": [512, 512, [\"user-alt\"], \"f406\", \"M256 288c79.53 0 144-64.47 144-144s-64.47-144-144-144c-79.52 0-144 64.47-144 144S176.5 288 256 288zM351.1 320H160c-88.36 0-160 71.63-160 160c0 17.67 14.33 32 31.1 32H480c17.67 0 31.1-14.33 31.1-32C512 391.6 440.4 320 351.1 320z\"],\n    \"user-large-slash\": [640, 512, [\"user-alt-slash\"], \"f4fa\", \"M284.9 320l-60.9-.0002c-88.36 0-160 71.63-160 159.1C63.1 497.7 78.33 512 95.1 512l448-.0039c.0137 0-.0137 0 0 0l-14.13-.0013L284.9 320zM630.8 469.1l-249.5-195.5c48.74-22.1 82.65-72.1 82.65-129.6c0-79.53-64.47-143.1-143.1-143.1c-69.64 0-127.3 49.57-140.6 115.3L38.81 5.109C34.41 1.672 29.19 0 24.03 0C16.91 0 9.845 3.156 5.127 9.187c-8.187 10.44-6.375 25.53 4.062 33.7L601.2 506.9c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"user-lock\": [640, 512, [], \"f502\", \"M592 288H576V212.7c0-41.84-30.03-80.04-71.66-84.27C456.5 123.6 416 161.1 416 208V288h-16C373.6 288 352 309.6 352 336v128c0 26.4 21.6 48 48 48h192c26.4 0 48-21.6 48-48v-128C640 309.6 618.4 288 592 288zM496 432c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S513.6 432 496 432zM528 288h-64V208c0-17.62 14.38-32 32-32s32 14.38 32 32V288zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM320 336c0-8.672 1.738-16.87 4.303-24.7C308.6 306.6 291.9 304 274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512h301.7C326.3 498.6 320 482.1 320 464V336z\"],\n    \"user-minus\": [640, 512, [], \"f503\", \"M274.7 304H173.3C77.61 304 0 381.6 0 477.3C0 496.5 15.52 512 34.66 512h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM616 200h-144C458.8 200 448 210.8 448 224s10.75 24 24 24h144C629.3 248 640 237.3 640 224S629.3 200 616 200z\"],\n    \"user-ninja\": [512, 512, [129399], \"f504\", \"M64 192c27.25 0 51.75-11.5 69.25-29.75c15 54 64 93.75 122.8 93.75c70.75 0 127.1-57.25 127.1-128s-57.25-128-127.1-128c-50.38 0-93.63 29.38-114.5 71.75C124.1 47.75 96 32 64 32c0 33.37 17.12 62.75 43.13 80C81.13 129.3 64 158.6 64 192zM208 96h95.1C321.7 96 336 110.3 336 128h-160C176 110.3 190.3 96 208 96zM337.8 306.9L256 416L174.2 306.9C93.36 321.6 32 392.2 32 477.3c0 19.14 15.52 34.67 34.66 34.67H445.3c19.14 0 34.66-15.52 34.66-34.67C480 392.2 418.6 321.6 337.8 306.9z\"],\n    \"user-nurse\": [448, 512, [], \"f82f\", \"M224 304c70.75 0 128-57.25 128-128V65.88c0-13.38-8.25-25.38-20.75-30L246.5 4.125C239.3 1.375 231.6 0 224 0S208.8 1.375 201.5 4.125L116.8 35.88C104.3 40.5 96 52.5 96 65.88V176C96 246.8 153.3 304 224 304zM184 71.63c0-2.75 2.25-5 5-5h21.62V45c0-2.75 2.25-5 5-5h16.75c2.75 0 5 2.25 5 5v21.62H259c2.75 0 5 2.25 5 5v16.75c0 2.75-2.25 5-5 5h-21.62V115c0 2.75-2.25 5-5 5H215.6c-2.75 0-5-2.25-5-5V93.38H189c-2.75 0-5-2.25-5-5V71.63zM144 160h160v16C304 220.1 268.1 256 224 256S144 220.1 144 176V160zM327.2 312.8L224 416L120.8 312.8c-69.93 22.3-120.8 87.25-120.8 164.6C.0006 496.5 15.52 512 34.66 512H413.3c19.14 0 34.66-15.46 34.66-34.61C447.1 400.1 397.1 335.1 327.2 312.8z\"],\n    \"user-pen\": [640, 512, [\"user-edit\"], \"f4ff\", \"M223.1 256c70.7 0 128-57.31 128-128s-57.3-128-128-128C153.3 0 96 57.31 96 128S153.3 256 223.1 256zM274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512h286.4c-1.246-5.531-1.43-11.31-.2832-17.04l14.28-71.41c1.943-9.723 6.676-18.56 13.68-25.56l45.72-45.72C363.3 322.4 321.2 304 274.7 304zM371.4 420.6c-2.514 2.512-4.227 5.715-4.924 9.203l-14.28 71.41c-1.258 6.289 4.293 11.84 10.59 10.59l71.42-14.29c3.482-.6992 6.682-2.406 9.195-4.922l125.3-125.3l-72.01-72.01L371.4 420.6zM629.5 255.7l-21.1-21.11c-14.06-14.06-36.85-14.06-50.91 0l-38.13 38.14l72.01 72.01l38.13-38.13C643.5 292.5 643.5 269.7 629.5 255.7z\"],\n    \"user-plus\": [640, 512, [], \"f234\", \"M224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM274.7 304H173.3C77.61 304 0 381.6 0 477.3C0 496.5 15.52 512 34.66 512h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM616 200h-48v-48C568 138.8 557.3 128 544 128s-24 10.75-24 24v48h-48C458.8 200 448 210.8 448 224s10.75 24 24 24h48v48C520 309.3 530.8 320 544 320s24-10.75 24-24v-48h48C629.3 248 640 237.3 640 224S629.3 200 616 200z\"],\n    \"user-secret\": [448, 512, [128373], \"f21b\", \"M377.7 338.8l37.15-92.87C419 235.4 411.3 224 399.1 224h-57.48C348.5 209.2 352 193 352 176c0-4.117-.8359-8.057-1.217-12.08C390.7 155.1 416 142.3 416 128c0-16.08-31.75-30.28-80.31-38.99C323.8 45.15 304.9 0 277.4 0c-10.38 0-19.62 4.5-27.38 10.5c-15.25 11.88-36.75 11.88-52 0C190.3 4.5 181.1 0 170.7 0C143.2 0 124.4 45.16 112.5 88.98C63.83 97.68 32 111.9 32 128c0 14.34 25.31 27.13 65.22 35.92C96.84 167.9 96 171.9 96 176C96 193 99.47 209.2 105.5 224H48.02C36.7 224 28.96 235.4 33.16 245.9l37.15 92.87C27.87 370.4 0 420.4 0 477.3C0 496.5 15.52 512 34.66 512H413.3C432.5 512 448 496.5 448 477.3C448 420.4 420.1 370.4 377.7 338.8zM176 479.1L128 288l64 32l16 32L176 479.1zM271.1 479.1L240 352l16-32l64-32L271.1 479.1zM320 186C320 207 302.8 224 281.6 224h-12.33c-16.46 0-30.29-10.39-35.63-24.99C232.1 194.9 228.4 192 224 192S215.9 194.9 214.4 199C209 213.6 195.2 224 178.8 224h-12.33C145.2 224 128 207 128 186V169.5C156.3 173.6 188.1 176 224 176s67.74-2.383 96-6.473V186z\"],\n    \"user-shield\": [640, 512, [], \"f505\", \"M622.3 271.1l-115.1-45.01c-4.125-1.629-12.62-3.754-22.25 0L369.8 271.1C359 275.2 352 285.1 352 295.1c0 111.6 68.75 188.8 132.9 213.9c9.625 3.75 18 1.625 22.25 0C558.4 489.9 640 420.5 640 295.1C640 285.1 633 275.2 622.3 271.1zM496 462.4V273.2l95.5 37.38C585.9 397.8 530.6 446 496 462.4zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM320.6 310.3C305.9 306.3 290.6 304 274.7 304H173.3C77.61 304 0 381.7 0 477.4C0 496.5 15.52 512 34.66 512H413.3c3.143 0 5.967-1.004 8.861-1.789C369.7 469.8 324.1 400.3 320.6 310.3z\"],\n    \"user-slash\": [640, 512, [], \"f506\", \"M95.1 477.3c0 19.14 15.52 34.67 34.66 34.67h378.7c5.625 0 10.73-1.65 15.42-4.029L264.9 304.3C171.3 306.7 95.1 383.1 95.1 477.3zM630.8 469.1l-277.1-217.9c54.69-14.56 95.18-63.95 95.18-123.2C447.1 57.31 390.7 0 319.1 0C250.2 0 193.7 55.93 192.3 125.4l-153.4-120.3C34.41 1.672 29.19 0 24.03 0C16.91 0 9.845 3.156 5.127 9.187c-8.187 10.44-6.375 25.53 4.062 33.7L601.2 506.9c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"user-tag\": [640, 512, [], \"f507\", \"M351.8 367.3v-44.1C328.5 310.7 302.4 304 274.7 304H173.3c-95.73 0-173.3 77.65-173.3 173.4C.0005 496.5 15.52 512 34.66 512h378.7c11.86 0 21.82-6.337 28.07-15.43l-61.65-61.57C361.7 416.9 351.8 392.9 351.8 367.3zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM630.6 364.8L540.3 274.8C528.3 262.8 512 256 495 256h-79.23c-17.75 0-31.99 14.25-31.99 32l.0147 79.2c0 17 6.647 33.15 18.65 45.15l90.31 90.27c12.5 12.5 32.74 12.5 45.24 0l92.49-92.5C643.1 397.6 643.1 377.3 630.6 364.8zM447.8 343.9c-13.25 0-24-10.62-24-24c0-13.25 10.75-24 24-24c13.38 0 24 10.75 24 24S461.1 343.9 447.8 343.9z\"],\n    \"user-tie\": [448, 512, [], \"f508\", \"M352 128C352 198.7 294.7 256 224 256C153.3 256 96 198.7 96 128C96 57.31 153.3 0 224 0C294.7 0 352 57.31 352 128zM209.1 359.2L176 304H272L238.9 359.2L272.2 483.1L311.7 321.9C388.9 333.9 448 400.7 448 481.3C448 498.2 434.2 512 417.3 512H30.72C13.75 512 0 498.2 0 481.3C0 400.7 59.09 333.9 136.3 321.9L175.8 483.1L209.1 359.2z\"],\n    \"user-xmark\": [640, 512, [\"user-times\"], \"f235\", \"M274.7 304H173.3C77.61 304 0 381.6 0 477.3C0 496.5 15.52 512 34.66 512h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304zM224 256c70.7 0 128-57.31 128-128S294.7 0 224 0C153.3 0 96 57.31 96 128S153.3 256 224 256zM577.9 223.1l47.03-47.03c9.375-9.375 9.375-24.56 0-33.94s-24.56-9.375-33.94 0L544 190.1l-47.03-47.03c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94l47.03 47.03l-47.03 47.03c-9.375 9.375-9.375 24.56 0 33.94c9.373 9.373 24.56 9.381 33.94 0L544 257.9l47.03 47.03c9.373 9.373 24.56 9.381 33.94 0c9.375-9.375 9.375-24.56 0-33.94L577.9 223.1z\"],\n    \"users\": [640, 512, [], \"f0c0\", \"M319.9 320c57.41 0 103.1-46.56 103.1-104c0-57.44-46.54-104-103.1-104c-57.41 0-103.1 46.56-103.1 104C215.9 273.4 262.5 320 319.9 320zM369.9 352H270.1C191.6 352 128 411.7 128 485.3C128 500.1 140.7 512 156.4 512h327.2C499.3 512 512 500.1 512 485.3C512 411.7 448.4 352 369.9 352zM512 160c44.18 0 80-35.82 80-80S556.2 0 512 0c-44.18 0-80 35.82-80 80S467.8 160 512 160zM183.9 216c0-5.449 .9824-10.63 1.609-15.91C174.6 194.1 162.6 192 149.9 192H88.08C39.44 192 0 233.8 0 285.3C0 295.6 7.887 304 17.62 304h199.5C196.7 280.2 183.9 249.7 183.9 216zM128 160c44.18 0 80-35.82 80-80S172.2 0 128 0C83.82 0 48 35.82 48 80S83.82 160 128 160zM551.9 192h-61.84c-12.8 0-24.88 3.037-35.86 8.24C454.8 205.5 455.8 210.6 455.8 216c0 33.71-12.78 64.21-33.16 88h199.7C632.1 304 640 295.6 640 285.3C640 233.8 600.6 192 551.9 192z\"],\n    \"users-gear\": [640, 512, [\"users-cog\"], \"f509\", \"M512 160c44.18 0 80-35.82 80-80S556.2 0 512 0c-44.18 0-80 35.82-80 80S467.8 160 512 160zM128 160c44.18 0 80-35.82 80-80S172.2 0 128 0C83.82 0 48 35.82 48 80S83.82 160 128 160zM319.9 320c57.41 0 103.1-46.56 103.1-104c0-57.44-46.54-104-103.1-104c-57.41 0-103.1 46.56-103.1 104C215.9 273.4 262.5 320 319.9 320zM368 400c0-16.69 3.398-32.46 8.619-47.36C374.3 352.5 372.2 352 369.9 352H270.1C191.6 352 128 411.7 128 485.3C128 500.1 140.7 512 156.4 512h266.1C389.5 485.6 368 445.5 368 400zM183.9 216c0-5.449 .9824-10.63 1.609-15.91C174.6 194.1 162.6 192 149.9 192H88.08C39.44 192 0 233.8 0 285.3C0 295.6 7.887 304 17.62 304h199.5C196.7 280.2 183.9 249.7 183.9 216zM551.9 192h-61.84c-12.8 0-24.88 3.037-35.86 8.24C454.8 205.5 455.8 210.6 455.8 216c0 21.47-5.625 41.38-14.65 59.34C462.2 263.4 486.1 256 512 256c42.48 0 80.27 18.74 106.6 48h3.756C632.1 304 640 295.6 640 285.3C640 233.8 600.6 192 551.9 192zM618.1 366.7c-5.025-16.01-13.59-30.62-24.75-42.71c-1.674-1.861-4.467-2.326-6.699-1.023l-19.17 11.07c-8.096-6.887-17.4-12.28-27.45-15.82V295.1c0-2.514-1.861-4.746-4.281-5.213c-16.56-3.723-33.5-3.629-49.32 0C484.9 291.2 483.1 293.5 483.1 295.1v22.24c-10.05 3.537-19.36 8.932-27.45 15.82l-19.26-11.07c-2.139-1.303-4.932-.8379-6.697 1.023c-11.17 12.1-19.73 26.71-24.66 42.71c-.7441 2.512 .2793 5.117 2.42 6.326l19.17 11.17c-1.859 10.42-1.859 21.21 0 31.64l-19.17 11.17c-2.234 1.209-3.164 3.816-2.42 6.328c4.932 16.01 13.49 30.52 24.66 42.71c1.766 1.863 4.467 2.328 6.697 1.025l19.26-11.07c8.094 6.887 17.4 12.28 27.45 15.82v22.24c0 2.514 1.77 4.746 4.188 5.211c16.66 3.723 33.5 3.629 49.32 0c2.42-.4648 4.281-2.697 4.281-5.211v-22.24c10.05-3.535 19.36-8.932 27.45-15.82l19.17 11.07c2.141 1.303 5.025 .8379 6.699-1.025c11.17-12.1 19.73-26.7 24.75-42.71c.7441-2.512-.2773-5.119-2.512-6.328l-19.17-11.17c1.953-10.42 1.953-21.22 0-31.64l19.17-11.17C618.7 371.8 619.7 369.2 618.1 366.7zM512 432c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32s32 14.33 32 32C544 417.7 529.7 432 512 432z\"],\n    \"users-slash\": [640, 512, [], \"e073\", \"M512 160c44.18 0 80-35.82 80-80S556.2 0 512 0c-44.18 0-80 35.82-80 80S467.8 160 512 160zM490.1 192c-12.8 0-24.88 3.037-35.86 8.24C454.8 205.5 455.8 210.6 455.8 216c0 33.71-12.78 64.21-33.16 88h199.7C632.1 304 640 295.6 640 285.3C640 233.8 600.6 192 551.9 192H490.1zM396.6 285.5C413.4 267.2 423.8 242.9 423.8 216c0-57.44-46.54-104-103.1-104c-35.93 0-67.07 18.53-85.59 46.3L193.1 126.1C202.4 113.1 208 97.24 208 80C208 35.82 172.2 0 128 0C103.8 0 82.52 10.97 67.96 27.95L38.81 5.109C34.41 1.672 29.19 0 24.03 0C16.91 0 9.846 3.156 5.127 9.188C-3.061 19.62-1.248 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078c8.188-10.44 6.375-25.53-4.062-33.7L396.6 285.5zM270.1 352C191.6 352 128 411.7 128 485.3C128 500.1 140.7 512 156.4 512h327.2c11.62 0 21.54-6.583 25.95-15.96L325.7 352H270.1zM186.1 243.2L121.6 192H88.08C39.44 192 0 233.8 0 285.3C0 295.6 7.887 304 17.62 304h199.5C202.4 286.8 191.8 266.1 186.1 243.2z\"],\n    \"utensils\": [448, 512, [61685, 127860, \"cutlery\"], \"f2e7\", \"M221.6 148.7C224.7 161.3 224.8 174.5 222.1 187.2C219.3 199.1 213.6 211.9 205.6 222.1C191.1 238.6 173 249.1 151.1 254.1V472C151.1 482.6 147.8 492.8 140.3 500.3C132.8 507.8 122.6 512 111.1 512C101.4 512 91.22 507.8 83.71 500.3C76.21 492.8 71.1 482.6 71.1 472V254.1C50.96 250.1 31.96 238.9 18.3 222.4C10.19 212.2 4.529 200.3 1.755 187.5C-1.019 174.7-.8315 161.5 2.303 148.8L32.51 12.45C33.36 8.598 35.61 5.197 38.82 2.9C42.02 .602 45.97-.4297 49.89 .0026C53.82 .4302 57.46 2.303 60.1 5.259C62.74 8.214 64.18 12.04 64.16 16V160H81.53L98.62 11.91C99.02 8.635 100.6 5.621 103.1 3.434C105.5 1.248 108.7 .0401 111.1 .0401C115.3 .0401 118.5 1.248 120.9 3.434C123.4 5.621 124.1 8.635 125.4 11.91L142.5 160H159.1V16C159.1 12.07 161.4 8.268 163.1 5.317C166.6 2.366 170.2 .474 174.1 .0026C178-.4262 181.1 .619 185.2 2.936C188.4 5.253 190.6 8.677 191.5 12.55L221.6 148.7zM448 472C448 482.6 443.8 492.8 436.3 500.3C428.8 507.8 418.6 512 408 512C397.4 512 387.2 507.8 379.7 500.3C372.2 492.8 368 482.6 368 472V352H351.2C342.8 352 334.4 350.3 326.6 347.1C318.9 343.8 311.8 339.1 305.8 333.1C299.9 327.1 295.2 320 291.1 312.2C288.8 304.4 287.2 296 287.2 287.6L287.1 173.8C288 136.9 299.1 100.8 319.8 70.28C340.5 39.71 369.8 16.05 404.1 2.339C408.1 .401 414.2-.3202 419.4 .2391C424.6 .7982 429.6 2.62 433.9 5.546C438.2 8.472 441.8 12.41 444.2 17.03C446.7 21.64 447.1 26.78 448 32V472z\"],\n    \"v\": [384, 512, [118], \"56\", \"M381.5 76.33l-160 384C216.6 472.2 204.9 480 192 480s-24.56-7.757-29.53-19.68l-160-384c-6.797-16.31 .9062-35.05 17.22-41.84c16.38-6.859 35.08 .9219 41.84 17.22L192 364.8l130.5-313.1c6.766-16.3 25.47-24.09 41.84-17.22C380.6 41.28 388.3 60.01 381.5 76.33z\"],\n    \"van-shuttle\": [640, 512, [128656, \"shuttle-van\"], \"f5b6\", \"M592 384H576C576 437 533 480 480 480C426.1 480 384 437 384 384H256C256 437 213 480 160 480C106.1 480 64 437 64 384H48C21.49 384 0 362.5 0 336V104C0 64.24 32.24 32 72 32H465.1C483.1 32 501.9 40.34 514.1 54.78L624.1 186.5C634.7 197.1 640 212.6 640 227.7V336C640 362.5 618.5 384 592 384zM64 192H160V96H72C67.58 96 64 99.58 64 104V192zM545.1 192L465.1 96H384V192H545.1zM320 192V96H224V192H320zM480 336C453.5 336 432 357.5 432 384C432 410.5 453.5 432 480 432C506.5 432 528 410.5 528 384C528 357.5 506.5 336 480 336zM160 432C186.5 432 208 410.5 208 384C208 357.5 186.5 336 160 336C133.5 336 112 357.5 112 384C112 410.5 133.5 432 160 432z\"],\n    \"vault\": [576, 512, [], \"e2c5\", \"M144 240C144 195.8 179.8 160 224 160C268.2 160 304 195.8 304 240C304 284.2 268.2 320 224 320C179.8 320 144 284.2 144 240zM512 0C547.3 0 576 28.65 576 64V416C576 451.3 547.3 480 512 480H496L480 512H416L400 480H176L160 512H96L80 480H64C28.65 480 0 451.3 0 416V64C0 28.65 28.65 0 64 0H512zM224 400C312.4 400 384 328.4 384 240C384 151.6 312.4 80 224 80C135.6 80 64 151.6 64 240C64 328.4 135.6 400 224 400zM480 221.3C498.6 214.7 512 196.9 512 176C512 149.5 490.5 128 464 128C437.5 128 416 149.5 416 176C416 196.9 429.4 214.7 448 221.3V336C448 344.8 455.2 352 464 352C472.8 352 480 344.8 480 336V221.3z\"],\n    \"vector-square\": [448, 512, [], \"f5cb\", \"M416 32C433.7 32 448 46.33 448 64V128C448 145.7 433.7 160 416 160V352C433.7 352 448 366.3 448 384V448C448 465.7 433.7 480 416 480H352C334.3 480 320 465.7 320 448H128C128 465.7 113.7 480 96 480H32C14.33 480 0 465.7 0 448V384C0 366.3 14.33 352 32 352V160C14.33 160 0 145.7 0 128V64C0 46.33 14.33 32 32 32H96C113.7 32 128 46.33 128 64H320C320 46.33 334.3 32 352 32H416zM368 80V112H400V80H368zM96 160V352C113.7 352 128 366.3 128 384H320C320 366.3 334.3 352 352 352V160C334.3 160 320 145.7 320 128H128C128 145.7 113.7 160 96 160zM48 400V432H80V400H48zM400 432V400H368V432H400zM80 112V80H48V112H80z\"],\n    \"venus\": [384, 512, [9792], \"f221\", \"M368 176c0-97.2-78.8-176-176-176c-97.2 0-176 78.8-176 176c0 86.26 62.1 157.9 144 172.1v35.05H112c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16H160v48c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-48h48c8.838 0 16-7.164 16-16v-32c0-8.838-7.162-16-16-16H224v-35.05C305.9 333.9 368 262.3 368 176zM192 272c-52.93 0-96-43.07-96-96c0-52.94 43.07-96 96-96c52.94 0 96 43.06 96 96C288 228.9 244.9 272 192 272z\"],\n    \"venus-double\": [640, 512, [9890], \"f226\", \"M368 176c0-97.2-78.8-176-176-176c-97.2 0-176 78.8-176 176c0 86.26 62.1 157.9 144 172.1v35.05H112c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16H160v48c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-48h48c8.838 0 16-7.164 16-16v-32c0-8.838-7.162-16-16-16H224v-35.05C305.9 333.9 368 262.3 368 176zM192 272c-52.93 0-96-43.07-96-96c0-52.94 43.07-96 96-96c52.94 0 96 43.06 96 96C288 228.9 244.9 272 192 272zM624 176C624 78.8 545.2 0 448 0c-39.02 0-74.95 12.85-104.1 34.34c18.38 19.7 32.94 42.91 42.62 68.58C403.2 88.83 424.5 80 448 80c52.94 0 96 43.06 96 96c0 52.93-43.06 96-96 96c-23.57 0-44.91-8.869-61.63-23.02c-9.572 25.45-23.95 48.54-42.23 68.23C365.1 332.7 389.3 344 416 348.1V384h-48c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16H416v48c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16V448h48c8.838 0 16-7.164 16-16v-32c0-8.838-7.162-16-16-16H480v-35.05C561.9 333.9 624 262.3 624 176z\"],\n    \"venus-mars\": [640, 512, [9892], \"f228\", \"M256 384H208v-35.05C289.9 333.9 352 262.3 352 176c0-97.2-78.8-176-176-176c-97.2 0-176 78.8-176 176c0 86.26 62.1 157.9 144 172.1v35.05H96c-8.836 0-16 7.162-16 16v32c0 8.836 7.164 16 16 16h48v48c0 8.836 7.164 16 16 16h32c8.838 0 16-7.164 16-16v-48H256c8.838 0 16-7.164 16-16v-32C272 391.2 264.8 384 256 384zM176 272c-52.93 0-96-43.07-96-96c0-52.94 43.07-96 96-96c52.94 0 96 43.06 96 96C272 228.9 228.9 272 176 272zM624 0h-112.4c-21.38 0-32.09 25.85-16.97 40.97l29.56 29.56l-24.55 24.55c-29.97-20.66-64.81-31.05-99.74-31.05c-15.18 0-30.42 2.225-45.19 6.132c13.55 22.8 22.82 48.36 26.82 75.67c6.088-1.184 12.27-1.785 18.45-1.785c24.58 0 49.17 9.357 67.88 28.07c37.43 37.43 37.43 98.33 0 135.8c-18.71 18.71-43.3 28.07-67.88 28.07c-23.55 0-46.96-8.832-65.35-26.01c-15.92 18.84-34.93 35.1-56.75 47.35c11.45 5.898 20.17 16.3 23.97 28.82C331.5 406 365.7 416 400 416c45.04 0 90.08-17.18 124.5-51.55c60.99-60.99 67.73-155.6 20.47-224.1l24.55-24.55l29.56 29.56c4.889 4.889 10.9 7.078 16.8 7.078C628.2 152.4 640 142.8 640 128.4V16C640 7.164 632.8 0 624 0z\"],\n    \"vest\": [448, 512, [], \"e085\", \"M437.3 239.9L384 160V32c0-17.67-14.33-32-32-32h-32c-4.75 0-9.375 1.406-13.31 4.031l-25 16.66c-35.03 23.38-80.28 23.38-115.4 0l-25-16.66C137.4 1.406 132.8 0 128 0H96C78.33 0 64 14.33 64 32v128L10.75 239.9C3.74 250.4 0 262.7 0 275.4V480c0 17.67 14.33 32 32 32h160V288c0-3.439 .5547-6.855 1.643-10.12l13.49-40.48L150.2 66.56C173.2 79.43 198.5 86.25 224 86.25s50.79-6.824 73.81-19.69L224 288v224h192c17.67 0 32-14.33 32-32V275.4C448 262.7 444.3 250.4 437.3 239.9zM131.3 371.3l-48 48C80.19 422.4 76.09 424 72 424s-8.188-1.562-11.31-4.688c-6.25-6.25-6.25-16.38 0-22.62l48-48c6.25-6.25 16.38-6.25 22.62 0S137.6 365.1 131.3 371.3zM387.3 419.3C384.2 422.4 380.1 424 376 424s-8.188-1.562-11.31-4.688l-48-48c-6.25-6.25-6.25-16.38 0-22.62s16.38-6.25 22.62 0l48 48C393.6 402.9 393.6 413.1 387.3 419.3z\"],\n    \"vest-patches\": [448, 512, [], \"e086\", \"M437.3 239.9L384 160V32c0-17.67-14.33-32-32-32h-32c-4.75 0-9.375 1.406-13.31 4.031l-25 16.66c-35.03 23.38-80.28 23.38-115.4 0l-25-16.66C137.4 1.406 132.8 0 128 0H96C78.33 0 64 14.33 64 32v128L10.75 239.9C3.74 250.4 0 262.7 0 275.4V480c0 17.67 14.33 32 32 32h160V288c0-3.439 .5547-6.855 1.643-10.12l13.49-40.48L150.2 66.56C173.2 79.43 198.5 86.25 224 86.25s50.79-6.824 73.81-19.69L224 288v224h192c17.67 0 32-14.33 32-32V275.4C448 262.7 444.3 250.4 437.3 239.9zM63.5 272.5c-4.656-4.688-4.656-12.31 0-17c4.688-4.688 12.31-4.688 17 0L96 271l15.5-15.5c4.688-4.688 12.31-4.688 17 0c4.656 4.688 4.656 12.31 0 17L113 288l15.5 15.5c4.656 4.688 4.656 12.31 0 17C126.2 322.8 123.1 324 120 324s-6.156-1.156-8.5-3.5L96 305l-15.5 15.5C78.16 322.8 75.06 324 72 324s-6.156-1.156-8.5-3.5c-4.656-4.688-4.656-12.31 0-17L79 288L63.5 272.5zM96 456c-22.09 0-40-17.91-40-40S73.91 376 96 376S136 393.9 136 416S118.1 456 96 456zM359.2 335.8L310.7 336C306.1 336 303.1 333 304 329.3l.2158-48.53c.1445-14.4 12.53-25.98 27.21-24.67c12.79 1.162 22.13 12.62 22.06 25.42l-.0557 5.076l5.069-.0566c12.83-.0352 24.24 9.275 25.4 22.08C385.2 323.3 373.7 335.7 359.2 335.8z\"],\n    \"vial\": [512, 512, [129514], \"f492\", \"M502.6 169.4l-160-160C336.4 3.125 328.2 0 320 0s-16.38 3.125-22.62 9.375c-12.5 12.5-12.5 32.75 0 45.25l6.975 6.977l-271.4 271c-38.75 38.75-45.13 102-9.375 143.5C44.08 500 72.76 512 101.5 512h.4473c26.38 0 52.75-9.1 72.88-30.12l275.2-274.6l7.365 7.367C463.6 220.9 471.8 224 480 224s16.38-3.125 22.62-9.375C515.1 202.1 515.1 181.9 502.6 169.4zM310.6 256H200.2l149.3-149.1l55.18 55.12L310.6 256z\"],\n    \"vials\": [512, 512, [], \"f493\", \"M200 32h-176C10.75 32 0 42.74 0 56C0 69.25 10.75 80 24 80H32v320C32 444.1 67.88 480 112 480S192 444.1 192 400v-320h8C213.3 80 224 69.25 224 56C224 42.74 213.3 32 200 32zM144 256h-64V80h64V256zM488 32h-176C298.7 32 288 42.74 288 56c0 13.25 10.75 24 24 24H320v320c0 44.13 35.88 80 80 80s80-35.88 80-80v-320h8C501.3 80 512 69.25 512 56C512 42.74 501.3 32 488 32zM432 256h-64V80h64V256z\"],\n    \"video\": [576, 512, [\"video-camera\"], \"f03d\", \"M384 112v288c0 26.51-21.49 48-48 48h-288c-26.51 0-48-21.49-48-48v-288c0-26.51 21.49-48 48-48h288C362.5 64 384 85.49 384 112zM576 127.5v256.9c0 25.5-29.17 40.39-50.39 25.79L416 334.7V177.3l109.6-75.56C546.9 87.13 576 102.1 576 127.5z\"],\n    \"video-slash\": [640, 512, [], \"f4e2\", \"M32 399.1c0 26.51 21.49 47.1 47.1 47.1h287.1c19.57 0 36.34-11.75 43.81-28.56L32 121.8L32 399.1zM630.8 469.1l-89.21-69.92l15.99 11.02c21.22 14.59 50.41-.2971 50.41-25.8V127.5c0-25.41-29.07-40.37-50.39-25.76l-109.6 75.56l.0001 148.5l-32-25.08l.0001-188.7c0-26.51-21.49-47.1-47.1-47.1H113.9L38.81 5.111C34.41 1.673 29.19 0 24.03 0C16.91 0 9.84 3.158 5.121 9.189C-3.066 19.63-1.249 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.57 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1z\"],\n    \"vihara\": [640, 512, [], \"f6a7\", \"M280.1 22.03L305.8 4.661C307.1 3.715 308.4 2.908 309.9 2.246C313.1 .7309 316.6-.0029 319.1 0C323.4-.0029 326.9 .7309 330.1 2.246C331.6 2.909 332.9 3.716 334.2 4.661L359 22.03C392.1 45.8 430.8 63.52 470.8 74.42L493.8 80.71C495.6 81.17 497.4 81.83 499 82.68C502.2 84.33 504.1 86.66 507.1 89.43C510.8 94.38 512.7 100.7 511.8 107.2C511.4 109.1 510.6 112.6 509.3 115C507.7 118.2 505.3 120.1 502.6 123.1C498.3 126.3 492.1 128.1 487.5 128H480V184.1L491.7 193.3C512.8 210 536.6 222.9 562.2 231.4L591.1 241.1C592.7 241.6 594.2 242.2 595.7 243C598.8 244.8 601.4 247.2 603.5 249.1C605.5 252.8 606.9 256 607.6 259.6C608.1 262.2 608.2 265 607.7 267.8C607.2 270.6 606.3 273.3 604.1 275.7C603.2 278.8 600.8 281.5 598 283.5C595.2 285.5 591.1 286.9 588.4 287.6C586.8 287.9 585.1 288 583.4 288H544V353.9C564.5 376.7 591.4 393 621.4 400.6C632 403 640 412.6 640 424C640 437.3 629.3 448 616 448H576V480C576 497.7 561.7 512 544 512C526.3 512 512 497.7 512 480V448H352V480C352 497.7 337.7 512 320 512C302.3 512 288 497.7 288 480V448H128V480C128 497.7 113.7 512 96 512C78.33 512 64 497.7 64 480V448H24C10.75 448 0 437.3 0 424C0 412.6 7.962 403 18.63 400.6C48.61 393 75.51 376.7 96 353.9V288H56.55C54.87 288 53.2 287.9 51.57 287.6C48.03 286.9 44.77 285.5 41.96 283.5C39.16 281.5 36.77 278.8 35.03 275.7C33.69 273.3 32.76 270.6 32.31 267.8C31.85 265 31.9 262.2 32.41 259.6C33.07 256 34.51 252.8 36.53 249.1C38.55 247.2 41.19 244.8 44.34 243C45.78 242.2 47.32 241.6 48.94 241.1L77.81 231.4C103.4 222.9 127.2 210 148.3 193.3L160 184.1V128H152.5C147 128.1 141.7 126.3 137.4 123.1C134.7 120.1 132.3 118.2 130.7 115C129.4 112.6 128.6 109.1 128.2 107.2C127.3 100.7 129.2 94.38 132.9 89.43C135 86.66 137.8 84.33 140.1 82.68C142.6 81.83 144.4 81.17 146.2 80.71L169.2 74.42C209.2 63.52 247 45.8 280.1 22.03H280.1zM223.1 128V192H416V128H223.1zM159.1 352H480V288H159.1V352z\"],\n    \"virus\": [576, 512, [], \"e074\", \"M515.6 227.6h-21.55c-50.68 0-76.06-61.28-40.23-97.12l15.25-15.25c11.11-11.11 11.11-29.11 .001-40.22c-11.11-11.11-29.11-11.11-40.22 .001l-15.24 15.24c-35.84 35.84-97.12 10.46-97.12-40.23V28.44c0-15.72-12.72-28.44-28.45-28.44S259.6 12.72 259.6 28.44v21.55c0 50.68-61.28 76.06-97.12 40.23L147.2 74.97C136.1 63.86 118.1 63.86 106.1 74.97c-11.11 11.11-11.11 29.11 .001 40.22l15.25 15.25C158.1 166.3 132.7 227.6 81.99 227.6H60.45C44.72 227.6 32 240.3 32 256s12.72 28.44 28.45 28.44h21.55c50.68 0 76.06 61.28 40.23 97.12l-15.25 15.25c-11.11 11.11-11.11 29.11-.001 40.22c5.555 5.555 12.83 8.333 20.11 8.333c7.277 0 14.55-2.779 20.11-8.334l15.24-15.25c35.84-35.84 97.12-10.46 97.12 40.23v21.55c0 15.72 12.72 28.45 28.45 28.45s28.45-12.72 28.45-28.45v-21.55c0-50.68 61.28-76.06 97.12-40.23l15.24 15.25c5.557 5.555 12.83 8.334 20.11 8.334c7.279 0 14.56-2.778 20.11-8.333c11.11-11.11 11.11-29.11-.001-40.22l-15.25-15.25c-35.84-35.84-10.46-97.12 40.23-97.12h21.55C531.3 284.4 544 271.7 544 256S531.3 227.6 515.6 227.6zM256 272c-26.51 0-48-21.49-48-48s21.49-48 48-48s48 21.49 48 48S282.5 272 256 272zM336 328c-13.25 0-24-10.75-24-24c0-13.26 10.75-23.1 24-23.1s24 10.74 24 24C360 317.3 349.3 328 336 328z\"],\n    \"virus-covid\": [512, 512, [], \"e4a8\", \"M192 24C192 10.75 202.7 0 216 0H296C309.3 0 320 10.75 320 24C320 37.25 309.3 48 296 48H280V81.62C310.7 85.8 338.8 97.88 362.3 115.7L386.1 91.95L374.8 80.64C365.4 71.26 365.4 56.07 374.8 46.7C384.2 37.32 399.4 37.32 408.7 46.7L465.3 103.3C474.7 112.6 474.7 127.8 465.3 137.2C455.9 146.6 440.7 146.6 431.4 137.2L420 125.9L396.3 149.7C414.1 173.2 426.2 201.3 430.4 232H464V216C464 202.7 474.7 192 488 192C501.3 192 512 202.7 512 216V296C512 309.3 501.3 320 488 320C474.7 320 464 309.3 464 296V280H430.4C426.2 310.7 414.1 338.8 396.3 362.3L420 386.1L431.4 374.8C440.7 365.4 455.9 365.4 465.3 374.8C474.7 384.2 474.7 399.4 465.3 408.7L408.7 465.3C399.4 474.7 384.2 474.7 374.8 465.3C365.4 455.9 365.4 440.7 374.8 431.4L386.1 420L362.3 396.3C338.8 414.1 310.7 426.2 280 430.4V464H296C309.3 464 320 474.7 320 488C320 501.3 309.3 512 296 512H216C202.7 512 192 501.3 192 488C192 474.7 202.7 464 216 464H232V430.4C201.3 426.2 173.2 414.1 149.7 396.3L125.9 420.1L137.2 431.4C146.6 440.7 146.6 455.9 137.2 465.3C127.8 474.7 112.6 474.7 103.3 465.3L46.7 408.7C37.32 399.4 37.32 384.2 46.7 374.8C56.07 365.4 71.27 365.4 80.64 374.8L91.95 386.1L115.7 362.3C97.88 338.8 85.8 310.7 81.62 280H48V296C48 309.3 37.25 320 24 320C10.75 320 0 309.3 0 296V216C0 202.7 10.75 192 24 192C37.25 192 48 202.7 48 216V232H81.62C85.8 201.3 97.88 173.2 115.7 149.7L91.95 125.9L80.64 137.2C71.26 146.6 56.07 146.6 46.7 137.2C37.32 127.8 37.32 112.6 46.7 103.3L103.3 46.7C112.6 37.33 127.8 37.33 137.2 46.7C146.6 56.07 146.6 71.27 137.2 80.64L125.9 91.95L149.7 115.7C173.2 97.88 201.3 85.8 232 81.62V48H216C202.7 48 192 37.26 192 24V24zM192 176C165.5 176 144 197.5 144 224C144 250.5 165.5 272 192 272C218.5 272 240 250.5 240 224C240 197.5 218.5 176 192 176zM304 328C317.3 328 328 317.3 328 304C328 290.7 317.3 280 304 280C290.7 280 280 290.7 280 304C280 317.3 290.7 328 304 328z\"],\n    \"virus-covid-slash\": [640, 512, [], \"e4a9\", \"M134.1 79.83L167.3 46.7C176.6 37.33 191.8 37.33 201.2 46.7C210.6 56.07 210.6 71.27 201.2 80.64L189.9 91.95L213.7 115.7C237.2 97.88 265.3 85.8 295.1 81.62V48H279.1C266.7 48 255.1 37.26 255.1 24C255.1 10.75 266.7 .0003 279.1 .0003H360C373.3 .0003 384 10.75 384 24C384 37.26 373.3 48 360 48H344V81.62C374.7 85.8 402.8 97.88 426.3 115.7L450.1 91.95L438.8 80.64C429.4 71.26 429.4 56.07 438.8 46.7C448.2 37.32 463.4 37.32 472.7 46.7L529.3 103.3C538.7 112.6 538.7 127.8 529.3 137.2C519.9 146.6 504.7 146.6 495.4 137.2L484 125.9L460.3 149.7C478.1 173.2 490.2 201.3 494.4 232H528V216C528 202.7 538.7 192 552 192C565.3 192 576 202.7 576 216V296C576 309.3 565.3 320 552 320C538.7 320 528 309.3 528 296V280H494.4C491.2 303.3 483.4 325.2 472.1 344.7L630.8 469.1C641.2 477.3 643.1 492.4 634.9 502.8C626.7 513.2 611.6 515.1 601.2 506.9L9.196 42.89C-1.236 34.71-3.065 19.63 5.112 9.196C13.29-1.236 28.37-3.065 38.81 5.112L134.1 79.83zM149.2 213.5L401.3 412.2C383.7 421.3 364.4 427.6 344 430.4V464H360C373.3 464 384 474.7 384 488C384 501.3 373.3 512 360 512H279.1C266.7 512 255.1 501.3 255.1 488C255.1 474.7 266.7 464 279.1 464H295.1V430.4C265.3 426.2 237.2 414.1 213.7 396.3L189.9 420.1L201.2 431.4C210.6 440.7 210.6 455.9 201.2 465.3C191.8 474.7 176.6 474.7 167.3 465.3L110.7 408.7C101.3 399.4 101.3 384.2 110.7 374.8C120.1 365.4 135.3 365.4 144.6 374.8L155.1 386.1L179.7 362.3C161.9 338.8 149.8 310.7 145.6 280H111.1V296C111.1 309.3 101.3 320 87.1 320C74.74 320 63.1 309.3 63.1 296V216C63.1 202.7 74.74 192 87.1 192C101.3 192 111.1 202.7 111.1 216V232H145.6C146.5 225.7 147.7 219.6 149.2 213.5L149.2 213.5z\"],\n    \"virus-slash\": [640, 512, [], \"e075\", \"M113.1 227.6H92.44c-15.72 0-28.45 12.72-28.45 28.45s12.72 28.44 28.45 28.44h21.55c50.68 0 76.06 61.28 40.23 97.11l-15.25 15.25c-11.11 11.11-11.11 29.11-.0006 40.22c5.555 5.555 12.83 8.332 20.11 8.332c7.277 0 14.55-2.779 20.11-8.334l15.24-15.25c35.84-35.84 97.12-10.45 97.12 40.23v21.55c0 15.72 12.72 28.45 28.45 28.45c15.72 0 28.45-12.72 28.45-28.45v-21.55c0-30.08 21.69-50.85 46.74-55.6L150 214.3C140.5 222.2 128.5 227.6 113.1 227.6zM630.8 469.1l-161.2-126.4c-.5176-29.6 21.73-58.3 56.41-58.3h21.55c15.72 0 28.45-12.72 28.45-28.44s-12.72-28.45-28.45-28.45h-21.55c-50.68 0-76.06-61.28-40.23-97.11l15.25-15.25c11.11-11.11 11.11-29.11 .0011-40.22c-11.11-11.11-29.11-11.11-40.22 .0007l-15.24 15.24c-35.84 35.84-97.12 10.46-97.12-40.23V28.44C348.4 12.72 335.7 0 319.1 0C304.3 0 291.6 12.72 291.6 28.44v21.55c0 50.68-61.28 76.06-97.12 40.23L179.2 74.97c-11.11-11.11-29.11-11.11-40.22 0C137.3 76.63 136.2 78.61 135 80.53L38.81 5.112C34.41 1.675 29.19 0 24.03 0C16.91 0 9.845 3.159 5.126 9.19C-3.061 19.63-1.248 34.72 9.189 42.89l591.1 463.1c10.5 8.203 25.56 6.328 33.69-4.078C643.1 492.4 641.2 477.3 630.8 469.1zM334.1 236.6L264.6 182.1c6.904-3.885 14.86-6.109 23.36-6.109c26.51 0 47.1 21.49 47.1 47.1C335.1 228.4 335.2 232.5 334.1 236.6z\"],\n    \"viruses\": [640, 512, [], \"e076\", \"M346.5 213.3h16.16C374.5 213.3 384 203.8 384 192c0-11.79-9.541-21.33-21.33-21.33h-16.16c-38.01 0-57.05-45.96-30.17-72.84l11.44-11.44c8.332-8.332 8.331-21.83-.0012-30.17c-8.334-8.334-21.83-8.332-30.17 .002L286.2 67.66C259.3 94.54 213.3 75.51 213.3 37.49V21.33C213.3 9.542 203.8 0 192 0S170.7 9.542 170.7 21.33v16.16c0 38.01-45.96 57.05-72.84 30.17L86.4 56.23c-8.334-8.334-21.83-8.336-30.17-.002c-8.332 8.334-8.333 21.84-.0012 30.17L67.66 97.83c26.88 26.88 7.842 72.84-30.17 72.84H21.33C9.541 170.7 0 180.2 0 192c0 11.79 9.541 21.33 21.33 21.33h16.16c38.01 0 57.05 45.96 30.17 72.84L56.23 297.6c-8.332 8.334-8.328 21.84 .0043 30.17c4.168 4.168 9.621 6.248 15.08 6.248s10.92-2.082 15.08-6.25L97.83 316.3c26.88-26.88 72.84-7.842 72.84 30.17v16.16C170.7 374.5 180.2 384 192 384s21.33-9.543 21.33-21.33v-16.16c0-38.01 45.96-57.05 72.84-30.17l11.43 11.43c4.168 4.168 9.625 6.25 15.08 6.25s10.91-2.08 15.08-6.248c8.332-8.332 8.333-21.83 .0012-30.17L316.3 286.2C289.5 259.3 308.5 213.3 346.5 213.3zM160 192C142.3 192 128 177.7 128 160c0-17.67 14.33-32 32-32s32 14.33 32 32C192 177.7 177.7 192 160 192zM240 224C231.2 224 224 216.8 224 208C224 199.2 231.2 192 240 192S256 199.2 256 208C256 216.8 248.8 224 240 224zM624 352h-12.12c-28.51 0-42.79-34.47-22.63-54.63l8.576-8.576c6.25-6.25 6.25-16.37 0-22.62s-16.38-6.253-22.62-.0031l-8.576 8.576C546.5 294.9 512 280.6 512 252.1V240C512 231.2 504.8 224 496 224S480 231.2 480 240v12.12c0 28.51-34.47 42.79-54.63 22.63l-8.576-8.576c-6.25-6.25-16.37-6.253-22.62-.0031s-6.253 16.38-.0031 22.63l8.576 8.576C422.9 317.5 408.6 352 380.1 352H368c-8.844 0-16 7.156-16 16s7.156 16 16 16h12.12c28.51 0 42.79 34.47 22.63 54.63l-8.576 8.576c-6.25 6.25-6.253 16.37-.0031 22.62c3.125 3.125 7.222 4.691 11.32 4.691s8.188-1.562 11.31-4.688l8.576-8.576C445.5 441.1 480 455.4 480 483.9V496c0 8.844 7.156 16 16 16s16-7.156 16-16v-12.12c0-28.51 34.47-42.79 54.63-22.63l8.576 8.576c3.125 3.125 7.219 4.688 11.31 4.688s8.184-1.559 11.31-4.684c6.25-6.25 6.253-16.38 .0031-22.63l-8.576-8.576C569.1 418.5 583.4 384 611.9 384H624c8.844 0 16-7.156 16-16S632.8 352 624 352zM480 384c-17.67 0-32-14.33-32-32c0-17.67 14.33-32 32-32s32 14.33 32 32C512 369.7 497.7 384 480 384z\"],\n    \"voicemail\": [640, 512, [], \"f897\", \"M495.1 96c-53.13 0-102 29.25-127 76.13c-25 46.88-22.25 103.8 7.25 147.9H263.7c36.63-54.88 31.25-127.8-13-176.8c-44.38-48.87-116.4-61.37-174.6-30.25s-87.88 97.88-71.75 162c16 64 73.63 108.1 139.6 108.1h352C575.5 384 640 319.5 640 240S575.5 96 495.1 96zM63.99 240c0-44.12 35.88-80 80-80s80 35.88 80 80s-35.88 79.1-80 79.1S63.99 284.1 63.99 240zM495.1 320c-44.13 0-80-35.88-80-79.1s35.88-80 80-80s80 35.88 80 80S540.1 320 495.1 320z\"],\n    \"volleyball\": [512, 512, [127952, \"volleyball-ball\"], \"f45f\", \"M200.3 106C185.4 80.24 165.2 53.9 137.4 29.26C55.75 72.05 0 157.4 0 256c0 21.33 2.898 41.94 7.814 61.75C53.59 182.1 155.1 124.9 200.3 106zM381.7 281.1c1.24-9.223 2.414-22.08 2.414-37.65c0-59.1-16.93-157.2-111.5-242.6C267.1 .4896 261.6 0 256 0C225.5 0 196.5 5.591 169.4 15.36c93.83 90.15 102.6 198.5 102.8 231.7C287.8 255.9 327.3 275.1 381.7 281.1zM240.1 246.5C239.1 228.5 236.9 184.7 214.9 134.6C173.6 151.6 60.4 211.7 26.67 369.2c15.66 31.64 37.52 59.66 64.22 82.23C122 325.1 211.5 263.3 240.1 246.5zM326.5 10.07c74.79 84.9 89.5 175.9 89.5 234c0 15.45-1.042 28.56-2.27 38.61l.5501 .0005c29.54 0 62.2-4.325 97.16-15.99C511.6 263.1 512 259.6 512 256C512 139.1 433.6 40.72 326.5 10.07zM255.7 274.5c-15.43 9.086-51.89 33.63-84.32 77.86c26.34 20.33 93.51 63.27 189.5 63.27c32.83 0 69.02-5.021 108.1-17.69c19.08-28.59 32.41-61.34 38.71-96.47C474.5 311.1 443 315 414.4 315C334.6 315 276.5 286.3 255.7 274.5zM153.1 379.3c-14.91 25.71-27.62 56.33-35.03 92.72C158.6 497.2 205.5 512 256 512c69 0 131.5-27.43 177.5-71.82c-25.42 5.105-49.71 7.668-72.38 7.668C258.6 447.8 185.5 402.1 153.1 379.3z\"],\n    \"volume-high\": [640, 512, [128266, \"volume-up\"], \"f028\", \"M412.6 182c-10.28-8.334-25.41-6.867-33.75 3.402c-8.406 10.24-6.906 25.35 3.375 33.74C393.5 228.4 400 241.8 400 255.1c0 14.17-6.5 27.59-17.81 36.83c-10.28 8.396-11.78 23.5-3.375 33.74c4.719 5.806 11.62 8.802 18.56 8.802c5.344 0 10.75-1.779 15.19-5.399C435.1 311.5 448 284.6 448 255.1S435.1 200.4 412.6 182zM473.1 108.2c-10.22-8.334-25.34-6.898-33.78 3.34c-8.406 10.24-6.906 25.35 3.344 33.74C476.6 172.1 496 213.3 496 255.1s-19.44 82.1-53.31 110.7c-10.25 8.396-11.75 23.5-3.344 33.74c4.75 5.775 11.62 8.771 18.56 8.771c5.375 0 10.75-1.779 15.22-5.431C518.2 366.9 544 313 544 255.1S518.2 145 473.1 108.2zM534.4 33.4c-10.22-8.334-25.34-6.867-33.78 3.34c-8.406 10.24-6.906 25.35 3.344 33.74C559.9 116.3 592 183.9 592 255.1s-32.09 139.7-88.06 185.5c-10.25 8.396-11.75 23.5-3.344 33.74C505.3 481 512.2 484 519.2 484c5.375 0 10.75-1.779 15.22-5.431C601.5 423.6 640 342.5 640 255.1S601.5 88.34 534.4 33.4zM301.2 34.98c-11.5-5.181-25.01-3.076-34.43 5.29L131.8 160.1H48c-26.51 0-48 21.48-48 47.96v95.92c0 26.48 21.49 47.96 48 47.96h83.84l134.9 119.8C272.7 477 280.3 479.8 288 479.8c4.438 0 8.959-.9314 13.16-2.835C312.7 471.8 320 460.4 320 447.9V64.12C320 51.55 312.7 40.13 301.2 34.98z\"],\n    \"volume-low\": [448, 512, [128264, \"volume-down\"], \"f027\", \"M412.6 181.9c-10.28-8.344-25.41-6.875-33.75 3.406c-8.406 10.25-6.906 25.37 3.375 33.78C393.5 228.4 400 241.8 400 256c0 14.19-6.5 27.62-17.81 36.87c-10.28 8.406-11.78 23.53-3.375 33.78c4.719 5.812 11.62 8.812 18.56 8.812c5.344 0 10.75-1.781 15.19-5.406C435.1 311.6 448 284.7 448 256S435.1 200.4 412.6 181.9zM301.2 34.84c-11.5-5.187-25.01-3.116-34.43 5.259L131.8 160H48c-26.51 0-48 21.49-48 47.1v95.1c0 26.51 21.49 47.1 48 47.1h83.84l134.9 119.9C272.7 477.2 280.3 480 288 480c4.438 0 8.959-.9313 13.16-2.837C312.7 472 320 460.6 320 448V64C320 51.41 312.7 39.1 301.2 34.84z\"],\n    \"volume-off\": [320, 512, [], \"f026\", \"M320 64v383.1c0 12.59-7.337 24.01-18.84 29.16C296.1 479.1 292.4 480 288 480c-7.688 0-15.28-2.781-21.27-8.094l-134.9-119.9H48c-26.51 0-48-21.49-48-47.1V208c0-26.51 21.49-47.1 48-47.1h83.84l134.9-119.9c9.422-8.375 22.93-10.45 34.43-5.259C312.7 39.1 320 51.41 320 64z\"],\n    \"volume-xmark\": [576, 512, [\"volume-mute\", \"volume-times\"], \"f6a9\", \"M301.2 34.85c-11.5-5.188-25.02-3.122-34.44 5.253L131.8 160H48c-26.51 0-48 21.49-48 47.1v95.1c0 26.51 21.49 47.1 48 47.1h83.84l134.9 119.9c5.984 5.312 13.58 8.094 21.26 8.094c4.438 0 8.972-.9375 13.17-2.844c11.5-5.156 18.82-16.56 18.82-29.16V64C319.1 51.41 312.7 40 301.2 34.85zM513.9 255.1l47.03-47.03c9.375-9.375 9.375-24.56 0-33.94s-24.56-9.375-33.94 0L480 222.1L432.1 175c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94l47.03 47.03l-47.03 47.03c-9.375 9.375-9.375 24.56 0 33.94c9.373 9.373 24.56 9.381 33.94 0L480 289.9l47.03 47.03c9.373 9.373 24.56 9.381 33.94 0c9.375-9.375 9.375-24.56 0-33.94L513.9 255.1z\"],\n    \"vr-cardboard\": [640, 512, [], \"f729\", \"M576 64H64c-35.2 0-64 28.8-64 64v256c0 35.2 28.8 64 64 64l128.3 .0001c25.18 0 48.03-14.77 58.37-37.73l27.76-61.65c7.875-17.5 24-28.63 41.63-28.63s33.75 11.13 41.63 28.63l27.75 61.63c10.35 22.98 33.2 37.75 58.4 37.75L576 448c35.2 0 64-28.8 64-64v-256C640 92.8 611.2 64 576 64zM160 304c-35.38 0-64-28.63-64-64s28.62-63.1 64-63.1s64 28.62 64 63.1S195.4 304 160 304zM480 304c-35.38 0-64-28.63-64-64s28.62-63.1 64-63.1s64 28.62 64 63.1S515.4 304 480 304z\"],\n    \"w\": [576, 512, [119], \"57\", \"M573.1 75.25l-144 384c-4.703 12.53-16.67 20.77-29.95 20.77c-.4062 0-.8125 0-1.219-.0156c-13.77-.5156-25.66-9.797-29.52-23.03L288 178.3l-81.28 278.7c-3.859 13.23-15.75 22.52-29.52 23.03c-13.75 .4687-26.33-7.844-31.17-20.75l-144-384c-6.203-16.55 2.188-34.98 18.73-41.2C37.31 27.92 55.75 36.23 61.97 52.78l110.2 293.1l85.08-291.7C261.3 41.41 273.8 32.01 288 32.01s26.73 9.396 30.72 23.05l85.08 291.7l110.2-293.1c6.219-16.55 24.67-24.86 41.2-18.73C571.8 40.26 580.2 58.7 573.1 75.25z\"],\n    \"wallet\": [512, 512, [], \"f555\", \"M448 32C465.7 32 480 46.33 480 64C480 81.67 465.7 96 448 96H80C71.16 96 64 103.2 64 112C64 120.8 71.16 128 80 128H448C483.3 128 512 156.7 512 192V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM416 336C433.7 336 448 321.7 448 304C448 286.3 433.7 272 416 272C398.3 272 384 286.3 384 304C384 321.7 398.3 336 416 336z\"],\n    \"wand-magic\": [512, 512, [\"magic\"], \"f0d0\", \"M14.06 463.3C-4.686 444.6-4.686 414.2 14.06 395.4L395.4 14.06C414.2-4.686 444.6-4.686 463.3 14.06L497.9 48.64C516.6 67.38 516.6 97.78 497.9 116.5L116.5 497.9C97.78 516.6 67.38 516.6 48.64 497.9L14.06 463.3zM347.6 187.6L452.6 82.58L429.4 59.31L324.3 164.3L347.6 187.6z\"],\n    \"wand-magic-sparkles\": [576, 512, [\"magic-wand-sparkles\"], \"e2ca\", \"M248.8 4.994C249.9 1.99 252.8 .0001 256 .0001C259.2 .0001 262.1 1.99 263.2 4.994L277.3 42.67L315 56.79C318 57.92 320 60.79 320 64C320 67.21 318 70.08 315 71.21L277.3 85.33L263.2 123C262.1 126 259.2 128 256 128C252.8 128 249.9 126 248.8 123L234.7 85.33L196.1 71.21C193.1 70.08 192 67.21 192 64C192 60.79 193.1 57.92 196.1 56.79L234.7 42.67L248.8 4.994zM427.4 14.06C446.2-4.686 476.6-4.686 495.3 14.06L529.9 48.64C548.6 67.38 548.6 97.78 529.9 116.5L148.5 497.9C129.8 516.6 99.38 516.6 80.64 497.9L46.06 463.3C27.31 444.6 27.31 414.2 46.06 395.4L427.4 14.06zM461.4 59.31L356.3 164.3L379.6 187.6L484.6 82.58L461.4 59.31zM7.491 117.2L64 96L85.19 39.49C86.88 34.98 91.19 32 96 32C100.8 32 105.1 34.98 106.8 39.49L128 96L184.5 117.2C189 118.9 192 123.2 192 128C192 132.8 189 137.1 184.5 138.8L128 160L106.8 216.5C105.1 221 100.8 224 96 224C91.19 224 86.88 221 85.19 216.5L64 160L7.491 138.8C2.985 137.1 0 132.8 0 128C0 123.2 2.985 118.9 7.491 117.2zM359.5 373.2L416 352L437.2 295.5C438.9 290.1 443.2 288 448 288C452.8 288 457.1 290.1 458.8 295.5L480 352L536.5 373.2C541 374.9 544 379.2 544 384C544 388.8 541 393.1 536.5 394.8L480 416L458.8 472.5C457.1 477 452.8 480 448 480C443.2 480 438.9 477 437.2 472.5L416 416L359.5 394.8C354.1 393.1 352 388.8 352 384C352 379.2 354.1 374.9 359.5 373.2z\"],\n    \"wand-sparkles\": [512, 512, [], \"f72b\", \"M3.682 149.1L53.32 170.7L74.02 220.3c1.016 2.043 3.698 3.696 5.977 3.696c.0078 0-.0078 0 0 0c2.271-.0156 4.934-1.661 5.946-3.696l20.72-49.63l49.62-20.71c2.023-1.008 3.68-3.681 3.691-5.947C159.1 141.7 158.3 139 156.3 138L106.9 117.4L106.5 117L85.94 67.7C84.93 65.66 82.27 64.02 80 64c-.0078 0 .0078 0 0 0c-2.279 0-4.966 1.649-5.981 3.692L53.32 117.3L3.682 138C1.652 139.1 0 141.7 0 144C0 146.3 1.652 148.9 3.682 149.1zM511.1 368c-.0039-2.273-1.658-4.95-3.687-5.966l-49.57-20.67l-20.77-49.67C436.9 289.7 434.3 288 432 288c-2.281 0-4.948 1.652-5.964 3.695l-20.7 49.63l-49.64 20.71c-2.027 1.016-3.684 3.683-3.687 5.956c.0039 2.262 1.662 4.954 3.687 5.966l49.57 20.67l20.77 49.67C427.1 446.3 429.7 448 432 448c2.277 0 4.944-1.656 5.96-3.699l20.69-49.63l49.65-20.71C510.3 372.9 511.1 370.3 511.1 368zM207.1 64l12.42 29.78C221 95.01 222.6 96 223.1 96s2.965-.9922 3.575-2.219L239.1 64l29.78-12.42c1.219-.6094 2.215-2.219 2.215-3.578c0-1.367-.996-2.969-2.215-3.578L239.1 32L227.6 2.219C226.1 .9922 225.4 0 223.1 0S221 .9922 220.4 2.219L207.1 32L178.2 44.42C176.1 45.03 176 46.63 176 48c0 1.359 .9928 2.969 2.21 3.578L207.1 64zM399.1 191.1c8.875 0 15.1-7.127 15.1-16v-28l91.87-101.7c5.75-6.371 5.5-15.1-.4999-22.12L487.8 4.774c-6.125-6.125-15.75-6.375-22.12-.625L186.6 255.1H144c-8.875 0-15.1 7.125-15.1 15.1v36.88l-117.5 106c-13.5 12.25-14.14 33.34-1.145 46.34l41.4 41.41c12.1 12.1 34.13 12.36 46.37-1.133l279.2-309.5H399.1z\"],\n    \"warehouse\": [640, 512, [], \"f494\", \"M0 488V171.3C0 145.2 15.93 121.6 40.23 111.9L308.1 4.753C315.7 1.702 324.3 1.702 331.9 4.753L599.8 111.9C624.1 121.6 640 145.2 640 171.3V488C640 501.3 629.3 512 616 512H568C554.7 512 544 501.3 544 488V223.1C544 206.3 529.7 191.1 512 191.1H128C110.3 191.1 96 206.3 96 223.1V488C96 501.3 85.25 512 72 512H24C10.75 512 0 501.3 0 488zM152 512C138.7 512 128 501.3 128 488V432H512V488C512 501.3 501.3 512 488 512H152zM128 336H512V400H128V336zM128 224H512V304H128V224z\"],\n    \"water\": [576, 512, [], \"f773\", \"M549.8 237.5c-31.23-5.719-46.84-20.06-47.13-20.31C490.4 205 470.3 205.1 457.7 216.8c-1 .9375-25.14 23-73.73 23s-72.73-22.06-73.38-22.62C298.4 204.9 278.3 205.1 265.7 216.8c-1 .9375-25.14 23-73.73 23S119.3 217.8 118.6 217.2C106.4 204.9 86.35 205 73.74 216.9C73.09 217.4 57.48 231.8 26.24 237.5c-17.38 3.188-28.89 19.84-25.72 37.22c3.188 17.38 19.78 29.09 37.25 25.72C63.1 295.8 82.49 287.1 95.96 279.2c19.5 11.53 51.47 24.68 96.04 24.68c44.55 0 76.49-13.12 96-24.65c19.52 11.53 51.45 24.59 96 24.59c44.58 0 76.55-13.09 96.05-24.62c13.47 7.938 32.86 16.62 58.19 21.25c17.56 3.375 34.06-8.344 37.25-25.72C578.7 257.4 567.2 240.7 549.8 237.5zM549.8 381.7c-31.23-5.719-46.84-20.06-47.13-20.31c-12.22-12.19-32.31-12.12-44.91-.375C456.7 361.9 432.6 384 384 384s-72.73-22.06-73.38-22.62c-12.22-12.25-32.3-12.12-44.89-.375C264.7 361.9 240.6 384 192 384s-72.73-22.06-73.38-22.62c-12.22-12.25-32.28-12.16-44.89-.3438c-.6562 .5938-16.27 14.94-47.5 20.66c-17.38 3.188-28.89 19.84-25.72 37.22C3.713 436.3 20.31 448 37.78 444.6C63.1 440 82.49 431.3 95.96 423.4c19.5 11.53 51.51 24.62 96.08 24.62c44.55 0 76.45-13.06 95.96-24.59C307.5 434.9 339.5 448 384.1 448c44.58 0 76.5-13.09 95.1-24.62c13.47 7.938 32.86 16.62 58.19 21.25C555.8 448 572.3 436.3 575.5 418.9C578.7 401.5 567.2 384.9 549.8 381.7zM37.78 156.4c25.33-4.625 44.72-13.31 58.19-21.25c19.5 11.53 51.47 24.68 96.04 24.68c44.55 0 76.49-13.12 96-24.65c19.52 11.53 51.45 24.59 96 24.59c44.58 0 76.55-13.09 96.05-24.62c13.47 7.938 32.86 16.62 58.19 21.25c17.56 3.375 34.06-8.344 37.25-25.72c3.172-17.38-8.344-34.03-25.72-37.22c-31.23-5.719-46.84-20.06-47.13-20.31c-12.22-12.19-32.31-12.12-44.91-.375c-1 .9375-25.14 23-73.73 23s-72.73-22.06-73.38-22.62c-12.22-12.25-32.3-12.12-44.89-.375c-1 .9375-25.14 23-73.73 23S119.3 73.76 118.6 73.2C106.4 60.95 86.35 61.04 73.74 72.85C73.09 73.45 57.48 87.79 26.24 93.51c-17.38 3.188-28.89 19.84-25.72 37.22C3.713 148.1 20.31 159.8 37.78 156.4z\"],\n    \"water-ladder\": [576, 512, [\"ladder-water\", \"swimming-pool\"], \"f5c5\", \"M320 128c0 .375-.1992 .6855-.2129 1.057C319.8 129.9 320 130.7 320 131.6V128zM192 383.1V288h192v95.99c39.6-.1448 53.95-17.98 64-26.83V128c0-17.62 14.38-32 32-32s32 14.38 32 32c0 17.67 14.33 32 32 32s32-14.33 32-32c0-53-42.1-95.1-95.1-95.1C420.1 32 384 81.94 384 131.6V224H192V128c0-17.62 14.38-32 32-32s32 14.38 32 32c0 17.67 14.33 32 32 32c17.3 0 31.2-13.79 31.79-30.94c-1.227-49.01-37.99-97.06-95.79-97.06C170.1 32 128 74.1 128 128v229.2C138.5 366.4 151.4 383.8 192 383.1zM576 445c0-15.14-10.82-28.59-26.25-31.42c-48.52-8.888-45.5-29.48-69.6-29.48c-25.02 0-31.19 31.79-96.18 31.79c-48.59 0-72.72-22.06-73.38-22.62c-6.141-6.157-14.26-9.188-22.42-9.188c-24.75 0-31.59 31.81-96.2 31.81c-48.59 0-72.69-22.03-73.41-22.59c-6.125-6.157-14.24-9.196-22.4-9.196c-8.072 0-16.18 2.976-22.45 8.852c-29.01 26.25-73.75 12.54-73.75 52.08c0 16.08 12.77 32.07 31.71 32.07c9.77 0 39.65-7.34 64.26-21.84c19.5 11.53 51.51 24.69 96.08 24.69s76.46-13.12 95.96-24.66c19.53 11.53 51.52 24.62 96.06 24.62c44.59 0 76.51-13.12 96.01-24.66c24.71 14.57 54.74 21.83 64.24 21.83C563.2 477.1 576 461.3 576 445z\"],\n    \"wave-square\": [640, 512, [], \"f83e\", \"M476 480h-152c-19.88 0-36-16.12-36-36v-348H192v156c0 19.88-16.12 36-36 36H31.1C14.33 288 0 273.7 0 256s14.33-31.1 31.1-31.1H128v-156c0-19.88 16.12-36 36-36h152c19.88 0 36 16.12 36 36v348h96v-156c0-19.88 16.12-36 36-36h124C625.7 224 640 238.3 640 256s-14.33 32-31.1 32H512v156C512 463.9 495.9 480 476 480z\"],\n    \"weight-hanging\": [512, 512, [], \"f5cd\", \"M510.3 445.9L437.3 153.8C433.5 138.5 420.8 128 406.4 128H346.1c3.625-9.1 5.875-20.75 5.875-32c0-53-42.1-96-96-96S159.1 43 159.1 96c0 11.25 2.25 22 5.875 32H105.6c-14.38 0-27.13 10.5-30.88 25.75l-73.01 292.1C-6.641 479.1 16.36 512 47.99 512h416C495.6 512 518.6 479.1 510.3 445.9zM256 128C238.4 128 223.1 113.6 223.1 96S238.4 64 256 64c17.63 0 32 14.38 32 32S273.6 128 256 128z\"],\n    \"weight-scale\": [512, 512, [\"weight\"], \"f496\", \"M310.3 97.25c-8-3.5-17.5 .25-21 8.5L255.8 184C233.8 184.3 216 202 216 224c0 22.12 17.88 40 40 40S296 246.1 296 224c0-10.5-4.25-20-11-27.12l33.75-78.63C322.3 110.1 318.4 100.8 310.3 97.25zM448 64h-56.23C359.5 24.91 310.7 0 256 0S152.5 24.91 120.2 64H64C28.75 64 0 92.75 0 128v320c0 35.25 28.75 64 64 64h384c35.25 0 64-28.75 64-64V128C512 92.75 483.3 64 448 64zM256 304c-70.58 0-128-57.42-128-128s57.42-128 128-128c70.58 0 128 57.42 128 128S326.6 304 256 304z\"],\n    \"wheelchair\": [512, 512, [], \"f193\", \"M510.3 421.9c-5.594-16.75-23.53-25.84-40.47-20.22l-19.38 6.438l-41.7-99.97C403.9 295.1 392.2 288 379.1 288h-97.78l-10.4-48h65.11c17.69 0 32-14.31 32-32s-14.31-32-32-32h-78.98L255.6 169.2C251.8 142.1 227.2 124.8 201.2 128.5C174.1 132.2 156.7 156.5 160.5 182.8l23.68 140.4C185.8 339.6 199.6 352 216 352h141.4l44.86 107.9C407.3 472.3 419.3 480 432 480c3.344 0 6.781-.5313 10.12-1.656l48-16C506.9 456.8 515.9 438.7 510.3 421.9zM160 464c-61.76 0-112-50.24-112-112c0-54.25 38.78-99.55 90.06-109.8L130.1 195C56.06 209 0 273.9 0 352c0 88.37 71.63 160 160 160c77.4 0 141.9-54.97 156.8-128h-49.1C252.9 430.1 210.6 464 160 464zM192 96c26.51 0 48-21.49 48-48S218.5 0 192 0S144 21.49 144 48S165.5 96 192 96z\"],\n    \"whiskey-glass\": [512, 512, [129347, \"glass-whiskey\"], \"f7a0\", \"M479.1 32H32.04C12.55 32-2.324 49.25 .3008 68.51L56.29 425.1C60.79 456.6 87.78 480 119.8 480h272.9c31.74 0 58.86-23.38 63.36-54.89l55.61-356.6C514.3 49.25 499.5 32 479.1 32zM422.7 224H89.49L69.39 96h373.2L422.7 224z\"],\n    \"wifi\": [640, 512, [\"wifi-3\", \"wifi-strong\"], \"f1eb\", \"M319.1 351.1c-35.35 0-64 28.66-64 64.01s28.66 64.01 64 64.01c35.34 0 64-28.66 64-64.01S355.3 351.1 319.1 351.1zM320 191.1c-70.25 0-137.9 25.6-190.5 72.03C116.3 275.7 115 295.9 126.7 309.2C138.5 322.4 158.7 323.7 171.9 312C212.8 275.9 265.4 256 320 256s107.3 19.88 148.1 56C474.2 317.4 481.8 320 489.3 320c8.844 0 17.66-3.656 24-10.81C525 295.9 523.8 275.7 510.5 264C457.9 217.6 390.3 191.1 320 191.1zM630.2 156.7C546.3 76.28 436.2 32 320 32S93.69 76.28 9.844 156.7c-12.75 12.25-13.16 32.5-.9375 45.25c12.22 12.78 32.47 13.12 45.25 .9375C125.1 133.1 220.4 96 320 96s193.1 37.97 265.8 106.9C592.1 208.8 600 211.8 608 211.8c8.406 0 16.81-3.281 23.09-9.844C643.3 189.2 642.9 168.1 630.2 156.7z\"],\n    \"wind\": [512, 512, [], \"f72e\", \"M32 192h320c52.94 0 96-43.06 96-96s-43.06-96-96-96h-32c-17.69 0-32 14.31-32 32s14.31 32 32 32h32c17.66 0 32 14.34 32 32s-14.34 32-32 32H32C14.31 128 0 142.3 0 160S14.31 192 32 192zM160 320H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h128c17.66 0 32 14.34 32 32s-14.34 32-32 32H128c-17.69 0-32 14.31-32 32s14.31 32 32 32h32c52.94 0 96-43.06 96-96S212.9 320 160 320zM416 224H32C14.31 224 0 238.3 0 256s14.31 32 32 32h384c17.66 0 32 14.34 32 32s-14.34 32-32 32h-32c-17.69 0-32 14.31-32 32s14.31 32 32 32h32c52.94 0 96-43.06 96-96S468.9 224 416 224z\"],\n    \"window-maximize\": [512, 512, [128470], \"f2d0\", \"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM96 96C78.33 96 64 110.3 64 128C64 145.7 78.33 160 96 160H416C433.7 160 448 145.7 448 128C448 110.3 433.7 96 416 96H96z\"],\n    \"window-minimize\": [512, 512, [128469], \"f2d1\", \"M0 448C0 430.3 14.33 416 32 416H480C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H32C14.33 480 0 465.7 0 448z\"],\n    \"window-restore\": [512, 512, [], \"f2d2\", \"M432 64H208C199.2 64 192 71.16 192 80V96H128V80C128 35.82 163.8 0 208 0H432C476.2 0 512 35.82 512 80V304C512 348.2 476.2 384 432 384H416V320H432C440.8 320 448 312.8 448 304V80C448 71.16 440.8 64 432 64zM0 192C0 156.7 28.65 128 64 128H320C355.3 128 384 156.7 384 192V448C384 483.3 355.3 512 320 512H64C28.65 512 0 483.3 0 448V192zM96 256H288C305.7 256 320 241.7 320 224C320 206.3 305.7 192 288 192H96C78.33 192 64 206.3 64 224C64 241.7 78.33 256 96 256z\"],\n    \"wine-bottle\": [512, 512, [], \"f72f\", \"M507.3 72.57l-67.88-67.88c-6.252-6.25-16.38-6.25-22.63 0l-22.63 22.62c-6.25 6.254-6.251 16.38-.0006 22.63l-76.63 76.63c-46.63-19.75-102.4-10.75-140.4 27.25l-158.4 158.4c-25 25-25 65.51 0 90.51l90.51 90.52c25 25 65.51 25 90.51 0l158.4-158.4c38-38 47-93.76 27.25-140.4l76.63-76.63c6.25 6.25 16.5 6.25 22.75 0l22.63-22.63C513.5 88.95 513.5 78.82 507.3 72.57zM179.3 423.2l-90.51-90.51l122-122l90.51 90.52L179.3 423.2z\"],\n    \"wine-glass\": [320, 512, [127863], \"f4e3\", \"M232 464h-40.01v-117.3c68.51-15.88 118-79.86 111.4-154.1L287.5 14.5C286.8 6.25 279.9 0 271.8 0H48.23C40.1 0 33.22 6.25 32.47 14.5L16.6 192.6c-6.626 74.25 42.88 138.2 111.4 154.2V464H87.98c-22.13 0-40.01 17.88-40.01 40c0 4.375 3.626 8 8.002 8h208c4.376 0 8.002-3.625 8.002-8C272 481.9 254.1 464 232 464zM77.72 48h164.6L249.4 128H70.58L77.72 48z\"],\n    \"wine-glass-empty\": [320, 512, [\"wine-glass-alt\"], \"f5ce\", \"M232 464h-40.01v-117.3c68.52-15.88 118-79.86 111.4-154.1L287.5 14.5C286.8 6.25 279.9 0 271.8 0H48.23C40.1 0 33.22 6.25 32.47 14.5L16.6 192.6c-6.625 74.25 42.88 138.2 111.4 154.2V464H87.98c-22.13 0-40.01 17.88-40.01 40c0 4.375 3.625 8 8.002 8h208c4.377 0 8.002-3.625 8.002-8C272 481.9 254.1 464 232 464zM180.4 300.2c-13.64 3.16-27.84 3.148-41.48-.0371C91.88 289.2 60.09 245.2 64.38 197.1L77.7 48h164.6L255.6 197.2c4.279 48.01-27.5 91.93-74.46 102.8L180.4 300.2z\"],\n    \"won-sign\": [512, 512, [8361, \"krw\", \"won\"], \"f159\", \"M119.1 224H183L224.1 56.24C228.5 41.99 241.3 32 256 32C270.7 32 283.5 41.99 287 56.24L328.1 224H392.9L449.6 53.88C455.2 37.12 473.4 28.05 490.1 33.64C506.9 39.23 515.9 57.35 510.4 74.12L460.4 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H439.1L382.4 458.1C377.9 471.6 364.1 480.5 350.8 479.1C336.6 479.4 324.4 469.6 320.1 455.8L279 288H232.1L191 455.8C187.6 469.6 175.4 479.4 161.2 479.1C147 480.5 134.1 471.6 129.6 458.1L72.94 288H32C14.33 288 .001 273.7 .001 256C.001 238.3 14.33 224 32 224H51.6L1.643 74.12C-3.946 57.35 5.115 39.23 21.88 33.64C38.65 28.05 56.77 37.12 62.36 53.88L119.1 224zM140.4 288L155.6 333.6L167 288H140.4zM248.1 224H263L256 195.9L248.1 224zM344.1 288L356.4 333.6L371.6 288H344.1z\"],\n    \"wrench\": [512, 512, [128295], \"f0ad\", \"M507.6 122.8c-2.904-12.09-18.25-16.13-27.04-7.338l-76.55 76.56l-83.1-.0002l0-83.1l76.55-76.56c8.791-8.789 4.75-24.14-7.336-27.04c-23.69-5.693-49.34-6.111-75.92 .2484c-61.45 14.7-109.4 66.9-119.2 129.3C189.8 160.8 192.3 186.7 200.1 210.1l-178.1 178.1c-28.12 28.12-28.12 73.69 0 101.8C35.16 504.1 53.56 512 71.1 512s36.84-7.031 50.91-21.09l178.1-178.1c23.46 7.736 49.31 10.24 76.17 6.004c62.41-9.84 114.6-57.8 129.3-119.2C513.7 172.1 513.3 146.5 507.6 122.8zM80 456c-13.25 0-24-10.75-24-24c0-13.26 10.75-24 24-24s24 10.74 24 24C104 445.3 93.25 456 80 456z\"],\n    \"x\": [384, 512, [120], \"58\", \"M376.6 427.5c11.31 13.58 9.484 33.75-4.094 45.06c-5.984 4.984-13.25 7.422-20.47 7.422c-9.172 0-18.27-3.922-24.59-11.52L192 305.1l-135.4 162.5c-6.328 7.594-15.42 11.52-24.59 11.52c-7.219 0-14.48-2.438-20.47-7.422c-13.58-11.31-15.41-31.48-4.094-45.06l142.9-171.5L7.422 84.5C-3.891 70.92-2.063 50.75 11.52 39.44c13.56-11.34 33.73-9.516 45.06 4.094L192 206l135.4-162.5c11.3-13.58 31.48-15.42 45.06-4.094c13.58 11.31 15.41 31.48 4.094 45.06l-142.9 171.5L376.6 427.5z\"],\n    \"x-ray\": [512, 512, [], \"f497\", \"M208 352C199.2 352 192 359.2 192 368C192 376.8 199.2 384 208 384S224 376.8 224 368C224 359.2 216.8 352 208 352zM304 384c8.836 0 16-7.164 16-16c0-8.838-7.164-16-16-16S288 359.2 288 368C288 376.8 295.2 384 304 384zM496 96C504.8 96 512 88.84 512 80v-32C512 39.16 504.8 32 496 32h-480C7.164 32 0 39.16 0 48v32C0 88.84 7.164 96 16 96H32v320H16C7.164 416 0 423.2 0 432v32C0 472.8 7.164 480 16 480h480c8.836 0 16-7.164 16-16v-32c0-8.836-7.164-16-16-16H480V96H496zM416 216C416 220.4 412.4 224 408 224H272v32h104C380.4 256 384 259.6 384 264v16C384 284.4 380.4 288 376 288H272v32h69.33c25.56 0 40.8 28.48 26.62 49.75l-21.33 32C340.7 410.7 330.7 416 319.1 416H192c-10.7 0-20.69-5.347-26.62-14.25l-21.33-32C129.9 348.5 145.1 320 170.7 320H240V288H136C131.6 288 128 284.4 128 280v-16C128 259.6 131.6 256 136 256H240V224H104C99.6 224 96 220.4 96 216v-16C96 195.6 99.6 192 104 192H240V160H136C131.6 160 128 156.4 128 152v-16C128 131.6 131.6 128 136 128H240V104C240 99.6 243.6 96 248 96h16c4.4 0 8 3.6 8 8V128h104C380.4 128 384 131.6 384 136v16C384 156.4 380.4 160 376 160H272v32h136C412.4 192 416 195.6 416 200V216z\"],\n    \"xmark\": [320, 512, [128473, 10005, 10006, 10060, 215, \"close\", \"multiply\", \"remove\", \"times\"], \"f00d\", \"M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z\"],\n    \"y\": [384, 512, [121], \"59\", \"M378 82.61L224 298.3v149.8c0 17.67-14.31 31.1-32 31.1S160 465.7 160 448V298.3L5.969 82.61C-4.313 68.23-.9688 48.25 13.41 37.97c14.34-10.27 34.38-6.922 44.63 7.453L192 232.1l133.1-187.5c10.28-14.37 30.28-17.7 44.63-7.453C384.1 48.25 388.3 68.23 378 82.61z\"],\n    \"yen-sign\": [320, 512, [165, \"cny\", \"jpy\", \"rmb\", \"yen\"], \"f157\", \"M159.1 198.3L261.4 46.25C271.2 31.54 291 27.57 305.8 37.37C320.5 47.18 324.4 67.04 314.6 81.75L219.8 223.1H272C289.7 223.1 304 238.3 304 255.1C304 273.7 289.7 287.1 272 287.1H192V319.1H272C289.7 319.1 304 334.3 304 352C304 369.7 289.7 384 272 384H192V448C192 465.7 177.7 480 159.1 480C142.3 480 127.1 465.7 127.1 448V384H47.1C30.33 384 15.1 369.7 15.1 352C15.1 334.3 30.33 319.1 47.1 319.1H127.1V287.1H47.1C30.33 287.1 15.1 273.7 15.1 255.1C15.1 238.3 30.33 223.1 47.1 223.1H100.2L5.374 81.75C-4.429 67.04-.456 47.18 14.25 37.37C28.95 27.57 48.82 31.54 58.62 46.25L159.1 198.3z\"],\n    \"yin-yang\": [512, 512, [9775], \"f6ad\", \"M256 128C238.3 128 224 142.4 224 160S238.3 192 256 192s31.97-14.38 31.97-32S273.7 128 256 128zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 384c-17.68 0-31.97-14.38-31.97-32S238.3 320 256 320s31.97 14.38 31.97 32S273.7 384 256 384zM256 256c-53.04 0-96.03 43-96.03 96S202.1 448 256 448c-106.1 0-192.1-86-192.1-192S149.9 64 256 64c53.04 0 96.03 43 96.03 96S309 256 256 256z\"],\n    \"z\": [384, 512, [122], \"5a\", \"M384 448c0 17.67-14.31 32-32 32H32c-12.41 0-23.72-7.188-28.97-18.42c-5.281-11.25-3.562-24.53 4.375-34.06l276.3-331.5H32c-17.69 0-32-14.33-32-32s14.31-32 32-32h320c12.41 0 23.72 7.188 28.97 18.42c5.281 11.25 3.562 24.53-4.375 34.06L100.3 416H352C369.7 416 384 430.3 384 448z\"]\n  };\n\n  bunker(function () {\n    defineIcons('fas', icons);\n    defineIcons('fa-solid', icons);\n  });\n\n}());\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/js/v4-shims.js",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global['fontawesome-free-shims'] = factory());\n}(this, (function () { 'use strict';\n\n  var _WINDOW = {};\n  var _DOCUMENT = {};\n\n  try {\n    if (typeof window !== 'undefined') _WINDOW = window;\n    if (typeof document !== 'undefined') _DOCUMENT = document;\n  } catch (e) {}\n\n  var _ref = _WINDOW.navigator || {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n  var WINDOW = _WINDOW;\n  var DOCUMENT = _DOCUMENT;\n  var IS_BROWSER = !!WINDOW.document;\n  var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n  var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n  var PRODUCTION = function () {\n    try {\n      return process.env.NODE_ENV === 'production';\n    } catch (e) {\n      return false;\n    }\n  }();\n  var STYLE_TO_PREFIX = {\n    'solid': 'fas',\n    'regular': 'far',\n    'light': 'fal',\n    'thin': 'fat',\n    'duotone': 'fad',\n    'brands': 'fab',\n    'kit': 'fak'\n  };\n  var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n  var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n  var DUOTONE_CLASSES = {\n    GROUP: 'duotone-group',\n    SWAP_OPACITY: 'swap-opacity',\n    PRIMARY: 'primary',\n    SECONDARY: 'secondary'\n  };\n  var RESERVED_CLASSES = [].concat(_toConsumableArray(Object.keys(STYLE_TO_PREFIX)), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n    return \"\".concat(n, \"x\");\n  })).concat(oneToTwenty.map(function (n) {\n    return \"w-\".concat(n);\n  }));\n\n  function bunker(fn) {\n    try {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      fn.apply(void 0, args);\n    } catch (e) {\n      if (!PRODUCTION) {\n        throw e;\n      }\n    }\n  }\n\n  var w = WINDOW || {};\n  if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n  if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n  if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n  if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n  var namespace = w[NAMESPACE_IDENTIFIER];\n\n  var shims = [[\"glass\", null, \"martini-glass-empty\"], [\"envelope-o\", \"far\", \"envelope\"], [\"star-o\", \"far\", \"star\"], [\"remove\", null, \"xmark\"], [\"close\", null, \"xmark\"], [\"gear\", null, \"gear\"], [\"trash-o\", \"far\", \"trash-can\"], [\"home\", null, \"house\"], [\"file-o\", \"far\", \"file\"], [\"clock-o\", \"far\", \"clock\"], [\"arrow-circle-o-down\", \"far\", \"circle-down\"], [\"arrow-circle-o-up\", \"far\", \"circle-up\"], [\"play-circle-o\", \"far\", \"circle-play\"], [\"repeat\", null, \"arrow-rotate-right\"], [\"rotate-right\", null, \"arrow-rotate-right\"], [\"refresh\", null, \"arrows-rotate\"], [\"list-alt\", \"far\", \"rectangle-list\"], [\"dedent\", null, \"outdent\"], [\"video-camera\", null, \"video\"], [\"picture-o\", \"far\", \"image\"], [\"photo\", \"far\", \"image\"], [\"image\", \"far\", \"image\"], [\"map-marker\", null, \"location-dot\"], [\"pencil-square-o\", \"far\", \"pen-to-square\"], [\"edit\", \"far\", \"pen-to-square\"], [\"share-square-o\", null, \"share-from-square\"], [\"check-square-o\", \"far\", \"square-check\"], [\"arrows\", null, \"up-down-left-right\"], [\"times-circle-o\", \"far\", \"circle-xmark\"], [\"check-circle-o\", \"far\", \"circle-check\"], [\"mail-forward\", null, \"share\"], [\"expand\", null, \"up-right-and-down-left-from-center\"], [\"compress\", null, \"down-left-and-up-right-to-center\"], [\"eye\", \"far\", null], [\"eye-slash\", \"far\", null], [\"warning\", null, \"triangle-exclamation\"], [\"calendar\", null, \"calendar-days\"], [\"arrows-v\", null, \"up-down\"], [\"arrows-h\", null, \"left-right\"], [\"bar-chart\", null, \"chart-column\"], [\"bar-chart-o\", null, \"chart-column\"], [\"twitter-square\", \"fab\", null], [\"facebook-square\", \"fab\", null], [\"gears\", null, \"gears\"], [\"thumbs-o-up\", \"far\", \"thumbs-up\"], [\"thumbs-o-down\", \"far\", \"thumbs-down\"], [\"heart-o\", \"far\", \"heart\"], [\"sign-out\", null, \"right-from-bracket\"], [\"linkedin-square\", \"fab\", \"linkedin\"], [\"thumb-tack\", null, \"thumbtack\"], [\"external-link\", null, \"up-right-from-square\"], [\"sign-in\", null, \"right-to-bracket\"], [\"github-square\", \"fab\", null], [\"lemon-o\", \"far\", \"lemon\"], [\"square-o\", \"far\", \"square\"], [\"bookmark-o\", \"far\", \"bookmark\"], [\"twitter\", \"fab\", null], [\"facebook\", \"fab\", \"facebook-f\"], [\"facebook-f\", \"fab\", \"facebook-f\"], [\"github\", \"fab\", null], [\"credit-card\", \"far\", null], [\"feed\", null, \"rss\"], [\"hdd-o\", \"far\", \"hard-drive\"], [\"hand-o-right\", \"far\", \"hand-point-right\"], [\"hand-o-left\", \"far\", \"hand-point-left\"], [\"hand-o-up\", \"far\", \"hand-point-up\"], [\"hand-o-down\", \"far\", \"hand-point-down\"], [\"globe\", null, \"earth-americas\"], [\"tasks\", null, \"bars-progress\"], [\"arrows-alt\", null, \"maximize\"], [\"group\", null, \"users\"], [\"chain\", null, \"link\"], [\"cut\", null, \"scissors\"], [\"files-o\", \"far\", \"copy\"], [\"floppy-o\", \"far\", \"floppy-disk\"], [\"save\", \"far\", \"floppy-disk\"], [\"navicon\", null, \"bars\"], [\"reorder\", null, \"bars\"], [\"magic\", null, \"wand-magic-sparkles\"], [\"pinterest\", \"fab\", null], [\"pinterest-square\", \"fab\", null], [\"google-plus-square\", \"fab\", null], [\"google-plus\", \"fab\", \"google-plus-g\"], [\"money\", null, \"money-bill-1\"], [\"unsorted\", null, \"sort\"], [\"sort-desc\", null, \"sort-down\"], [\"sort-asc\", null, \"sort-up\"], [\"linkedin\", \"fab\", \"linkedin-in\"], [\"rotate-left\", null, \"arrow-rotate-left\"], [\"legal\", null, \"gavel\"], [\"tachometer\", null, \"gauge-high\"], [\"dashboard\", null, \"gauge-high\"], [\"comment-o\", \"far\", \"comment\"], [\"comments-o\", \"far\", \"comments\"], [\"flash\", null, \"bolt\"], [\"clipboard\", null, \"paste\"], [\"lightbulb-o\", \"far\", \"lightbulb\"], [\"exchange\", null, \"right-left\"], [\"cloud-download\", null, \"cloud-arrow-down\"], [\"cloud-upload\", null, \"cloud-arrow-up\"], [\"bell-o\", \"far\", \"bell\"], [\"cutlery\", null, \"utensils\"], [\"file-text-o\", \"far\", \"file-lines\"], [\"building-o\", \"far\", \"building\"], [\"hospital-o\", \"far\", \"hospital\"], [\"tablet\", null, \"tablet-screen-button\"], [\"mobile\", null, \"mobile-screen-button\"], [\"mobile-phone\", null, \"mobile-screen-button\"], [\"circle-o\", \"far\", \"circle\"], [\"mail-reply\", null, \"reply\"], [\"github-alt\", \"fab\", null], [\"folder-o\", \"far\", \"folder\"], [\"folder-open-o\", \"far\", \"folder-open\"], [\"smile-o\", \"far\", \"face-smile\"], [\"frown-o\", \"far\", \"face-frown\"], [\"meh-o\", \"far\", \"face-meh\"], [\"keyboard-o\", \"far\", \"keyboard\"], [\"flag-o\", \"far\", \"flag\"], [\"mail-reply-all\", null, \"reply-all\"], [\"star-half-o\", \"far\", \"star-half-stroke\"], [\"star-half-empty\", \"far\", \"star-half-stroke\"], [\"star-half-full\", \"far\", \"star-half-stroke\"], [\"code-fork\", null, \"code-branch\"], [\"chain-broken\", null, \"link-slash\"], [\"unlink\", null, \"link-slash\"], [\"calendar-o\", \"far\", \"calendar\"], [\"maxcdn\", \"fab\", null], [\"html5\", \"fab\", null], [\"css3\", \"fab\", null], [\"unlock-alt\", null, \"unlock\"], [\"minus-square-o\", \"far\", \"square-minus\"], [\"level-up\", null, \"turn-up\"], [\"level-down\", null, \"turn-down\"], [\"pencil-square\", null, \"square-pen\"], [\"external-link-square\", null, \"square-up-right\"], [\"compass\", \"far\", null], [\"caret-square-o-down\", \"far\", \"square-caret-down\"], [\"toggle-down\", \"far\", \"square-caret-down\"], [\"caret-square-o-up\", \"far\", \"square-caret-up\"], [\"toggle-up\", \"far\", \"square-caret-up\"], [\"caret-square-o-right\", \"far\", \"square-caret-right\"], [\"toggle-right\", \"far\", \"square-caret-right\"], [\"eur\", null, \"euro-sign\"], [\"euro\", null, \"euro-sign\"], [\"gbp\", null, \"sterling-sign\"], [\"usd\", null, \"dollar-sign\"], [\"dollar\", null, \"dollar-sign\"], [\"inr\", null, \"indian-rupee-sign\"], [\"rupee\", null, \"indian-rupee-sign\"], [\"jpy\", null, \"yen-sign\"], [\"cny\", null, \"yen-sign\"], [\"rmb\", null, \"yen-sign\"], [\"yen\", null, \"yen-sign\"], [\"rub\", null, \"ruble-sign\"], [\"ruble\", null, \"ruble-sign\"], [\"rouble\", null, \"ruble-sign\"], [\"krw\", null, \"won-sign\"], [\"won\", null, \"won-sign\"], [\"btc\", \"fab\", null], [\"bitcoin\", \"fab\", \"btc\"], [\"file-text\", null, \"file-lines\"], [\"sort-alpha-asc\", null, \"arrow-down-a-z\"], [\"sort-alpha-desc\", null, \"arrow-down-z-a\"], [\"sort-amount-asc\", null, \"arrow-down-short-wide\"], [\"sort-amount-desc\", null, \"arrow-down-wide-short\"], [\"sort-numeric-asc\", null, \"arrow-down-1-9\"], [\"sort-numeric-desc\", null, \"arrow-down-9-1\"], [\"youtube-square\", \"fab\", null], [\"youtube\", \"fab\", null], [\"xing\", \"fab\", null], [\"xing-square\", \"fab\", null], [\"youtube-play\", \"fab\", \"youtube\"], [\"dropbox\", \"fab\", null], [\"stack-overflow\", \"fab\", null], [\"instagram\", \"fab\", null], [\"flickr\", \"fab\", null], [\"adn\", \"fab\", null], [\"bitbucket\", \"fab\", null], [\"bitbucket-square\", \"fab\", \"bitbucket\"], [\"tumblr\", \"fab\", null], [\"tumblr-square\", \"fab\", null], [\"long-arrow-down\", null, \"down-long\"], [\"long-arrow-up\", null, \"up-long\"], [\"long-arrow-left\", null, \"left-long\"], [\"long-arrow-right\", null, \"right-long\"], [\"apple\", \"fab\", null], [\"windows\", \"fab\", null], [\"android\", \"fab\", null], [\"linux\", \"fab\", null], [\"dribbble\", \"fab\", null], [\"skype\", \"fab\", null], [\"foursquare\", \"fab\", null], [\"trello\", \"fab\", null], [\"gratipay\", \"fab\", null], [\"gittip\", \"fab\", \"gratipay\"], [\"sun-o\", \"far\", \"sun\"], [\"moon-o\", \"far\", \"moon\"], [\"vk\", \"fab\", null], [\"weibo\", \"fab\", null], [\"renren\", \"fab\", null], [\"pagelines\", \"fab\", null], [\"stack-exchange\", \"fab\", null], [\"arrow-circle-o-right\", \"far\", \"circle-right\"], [\"arrow-circle-o-left\", \"far\", \"circle-left\"], [\"caret-square-o-left\", \"far\", \"square-caret-left\"], [\"toggle-left\", \"far\", \"square-caret-left\"], [\"dot-circle-o\", \"far\", \"circle-dot\"], [\"vimeo-square\", \"fab\", null], [\"try\", null, \"turkish-lira-sign\"], [\"turkish-lira\", null, \"turkish-lira-sign\"], [\"plus-square-o\", \"far\", \"square-plus\"], [\"slack\", \"fab\", null], [\"wordpress\", \"fab\", null], [\"openid\", \"fab\", null], [\"institution\", null, \"building-columns\"], [\"bank\", null, \"building-columns\"], [\"mortar-board\", null, \"graduation-cap\"], [\"yahoo\", \"fab\", null], [\"google\", \"fab\", null], [\"reddit\", \"fab\", null], [\"reddit-square\", \"fab\", null], [\"stumbleupon-circle\", \"fab\", null], [\"stumbleupon\", \"fab\", null], [\"delicious\", \"fab\", null], [\"digg\", \"fab\", null], [\"pied-piper-pp\", \"fab\", null], [\"pied-piper-alt\", \"fab\", null], [\"drupal\", \"fab\", null], [\"joomla\", \"fab\", null], [\"behance\", \"fab\", null], [\"behance-square\", \"fab\", null], [\"steam\", \"fab\", null], [\"steam-square\", \"fab\", null], [\"automobile\", null, \"car\"], [\"cab\", null, \"taxi\"], [\"spotify\", \"fab\", null], [\"deviantart\", \"fab\", null], [\"soundcloud\", \"fab\", null], [\"file-pdf-o\", \"far\", \"file-pdf\"], [\"file-word-o\", \"far\", \"file-word\"], [\"file-excel-o\", \"far\", \"file-excel\"], [\"file-powerpoint-o\", \"far\", \"file-powerpoint\"], [\"file-image-o\", \"far\", \"file-image\"], [\"file-photo-o\", \"far\", \"file-image\"], [\"file-picture-o\", \"far\", \"file-image\"], [\"file-archive-o\", \"far\", \"file-zipper\"], [\"file-zip-o\", \"far\", \"file-zipper\"], [\"file-audio-o\", \"far\", \"file-audio\"], [\"file-sound-o\", \"far\", \"file-audio\"], [\"file-video-o\", \"far\", \"file-video\"], [\"file-movie-o\", \"far\", \"file-video\"], [\"file-code-o\", \"far\", \"file-code\"], [\"vine\", \"fab\", null], [\"codepen\", \"fab\", null], [\"jsfiddle\", \"fab\", null], [\"life-bouy\", null, \"life-ring\"], [\"life-buoy\", null, \"life-ring\"], [\"life-saver\", null, \"life-ring\"], [\"support\", null, \"life-ring\"], [\"circle-o-notch\", null, \"circle-notch\"], [\"rebel\", \"fab\", null], [\"ra\", \"fab\", \"rebel\"], [\"resistance\", \"fab\", \"rebel\"], [\"empire\", \"fab\", null], [\"ge\", \"fab\", \"empire\"], [\"git-square\", \"fab\", null], [\"git\", \"fab\", null], [\"hacker-news\", \"fab\", null], [\"y-combinator-square\", \"fab\", \"hacker-news\"], [\"yc-square\", \"fab\", \"hacker-news\"], [\"tencent-weibo\", \"fab\", null], [\"qq\", \"fab\", null], [\"weixin\", \"fab\", null], [\"wechat\", \"fab\", \"weixin\"], [\"send\", null, \"paper-plane\"], [\"paper-plane-o\", \"far\", \"paper-plane\"], [\"send-o\", \"far\", \"paper-plane\"], [\"circle-thin\", \"far\", \"circle\"], [\"header\", null, \"heading\"], [\"futbol-o\", \"far\", \"futbol\"], [\"soccer-ball-o\", \"far\", \"futbol\"], [\"slideshare\", \"fab\", null], [\"twitch\", \"fab\", null], [\"yelp\", \"fab\", null], [\"newspaper-o\", \"far\", \"newspaper\"], [\"paypal\", \"fab\", null], [\"google-wallet\", \"fab\", null], [\"cc-visa\", \"fab\", null], [\"cc-mastercard\", \"fab\", null], [\"cc-discover\", \"fab\", null], [\"cc-amex\", \"fab\", null], [\"cc-paypal\", \"fab\", null], [\"cc-stripe\", \"fab\", null], [\"bell-slash-o\", \"far\", \"bell-slash\"], [\"trash\", null, \"trash-can\"], [\"copyright\", \"far\", null], [\"eyedropper\", null, \"eye-dropper\"], [\"area-chart\", null, \"chart-area\"], [\"pie-chart\", null, \"chart-pie\"], [\"line-chart\", null, \"chart-line\"], [\"lastfm\", \"fab\", null], [\"lastfm-square\", \"fab\", null], [\"ioxhost\", \"fab\", null], [\"angellist\", \"fab\", null], [\"cc\", \"far\", \"closed-captioning\"], [\"ils\", null, \"shekel-sign\"], [\"shekel\", null, \"shekel-sign\"], [\"sheqel\", null, \"shekel-sign\"], [\"buysellads\", \"fab\", null], [\"connectdevelop\", \"fab\", null], [\"dashcube\", \"fab\", null], [\"forumbee\", \"fab\", null], [\"leanpub\", \"fab\", null], [\"sellsy\", \"fab\", null], [\"shirtsinbulk\", \"fab\", null], [\"simplybuilt\", \"fab\", null], [\"skyatlas\", \"fab\", null], [\"diamond\", \"far\", \"gem\"], [\"transgender\", null, \"mars-and-venus\"], [\"intersex\", null, \"mars-and-venus\"], [\"transgender-alt\", null, \"transgender\"], [\"facebook-official\", \"fab\", \"facebook\"], [\"pinterest-p\", \"fab\", null], [\"whatsapp\", \"fab\", null], [\"hotel\", null, \"bed\"], [\"viacoin\", \"fab\", null], [\"medium\", \"fab\", null], [\"y-combinator\", \"fab\", null], [\"yc\", \"fab\", \"y-combinator\"], [\"optin-monster\", \"fab\", null], [\"opencart\", \"fab\", null], [\"expeditedssl\", \"fab\", null], [\"battery-4\", null, \"battery-full\"], [\"battery\", null, \"battery-full\"], [\"battery-3\", null, \"battery-three-quarters\"], [\"battery-2\", null, \"battery-half\"], [\"battery-1\", null, \"battery-quarter\"], [\"battery-0\", null, \"battery-empty\"], [\"object-group\", \"far\", null], [\"object-ungroup\", \"far\", null], [\"sticky-note-o\", \"far\", \"note-sticky\"], [\"cc-jcb\", \"fab\", null], [\"cc-diners-club\", \"fab\", null], [\"clone\", \"far\", null], [\"hourglass-o\", null, \"hourglass-empty\"], [\"hourglass-1\", null, \"hourglass-start\"], [\"hourglass-half\", null, \"hourglass\"], [\"hourglass-2\", null, \"hourglass\"], [\"hourglass-3\", null, \"hourglass-end\"], [\"hand-rock-o\", \"far\", \"hand-back-fist\"], [\"hand-grab-o\", \"far\", \"hand-back-fist\"], [\"hand-paper-o\", \"far\", \"hand\"], [\"hand-stop-o\", \"far\", \"hand\"], [\"hand-scissors-o\", \"far\", \"hand-scissors\"], [\"hand-lizard-o\", \"far\", \"hand-lizard\"], [\"hand-spock-o\", \"far\", \"hand-spock\"], [\"hand-pointer-o\", \"far\", \"hand-pointer\"], [\"hand-peace-o\", \"far\", \"hand-peace\"], [\"registered\", \"far\", null], [\"creative-commons\", \"fab\", null], [\"gg\", \"fab\", null], [\"gg-circle\", \"fab\", null], [\"odnoklassniki\", \"fab\", null], [\"odnoklassniki-square\", \"fab\", null], [\"get-pocket\", \"fab\", null], [\"wikipedia-w\", \"fab\", null], [\"safari\", \"fab\", null], [\"chrome\", \"fab\", null], [\"firefox\", \"fab\", null], [\"opera\", \"fab\", null], [\"internet-explorer\", \"fab\", null], [\"television\", null, \"tv\"], [\"contao\", \"fab\", null], [\"500px\", \"fab\", null], [\"amazon\", \"fab\", null], [\"calendar-plus-o\", \"far\", \"calendar-plus\"], [\"calendar-minus-o\", \"far\", \"calendar-minus\"], [\"calendar-times-o\", \"far\", \"calendar-xmark\"], [\"calendar-check-o\", \"far\", \"calendar-check\"], [\"map-o\", \"far\", \"map\"], [\"commenting\", null, \"comment-dots\"], [\"commenting-o\", \"far\", \"comment-dots\"], [\"houzz\", \"fab\", null], [\"vimeo\", \"fab\", \"vimeo-v\"], [\"black-tie\", \"fab\", null], [\"fonticons\", \"fab\", null], [\"reddit-alien\", \"fab\", null], [\"edge\", \"fab\", null], [\"credit-card-alt\", null, \"credit-card\"], [\"codiepie\", \"fab\", null], [\"modx\", \"fab\", null], [\"fort-awesome\", \"fab\", null], [\"usb\", \"fab\", null], [\"product-hunt\", \"fab\", null], [\"mixcloud\", \"fab\", null], [\"scribd\", \"fab\", null], [\"pause-circle-o\", \"far\", \"circle-pause\"], [\"stop-circle-o\", \"far\", \"circle-stop\"], [\"bluetooth\", \"fab\", null], [\"bluetooth-b\", \"fab\", null], [\"gitlab\", \"fab\", null], [\"wpbeginner\", \"fab\", null], [\"wpforms\", \"fab\", null], [\"envira\", \"fab\", null], [\"wheelchair-alt\", \"fab\", \"accessible-icon\"], [\"question-circle-o\", \"far\", \"circle-question\"], [\"volume-control-phone\", null, \"phone-volume\"], [\"asl-interpreting\", null, \"hands-asl-interpreting\"], [\"deafness\", null, \"ear-deaf\"], [\"hard-of-hearing\", null, \"ear-deaf\"], [\"glide\", \"fab\", null], [\"glide-g\", \"fab\", null], [\"signing\", null, \"hands\"], [\"viadeo\", \"fab\", null], [\"viadeo-square\", \"fab\", null], [\"snapchat\", \"fab\", null], [\"snapchat-ghost\", \"fab\", \"snapchat\"], [\"snapchat-square\", \"fab\", null], [\"pied-piper\", \"fab\", null], [\"first-order\", \"fab\", null], [\"yoast\", \"fab\", null], [\"themeisle\", \"fab\", null], [\"google-plus-official\", \"fab\", \"google-plus\"], [\"google-plus-circle\", \"fab\", \"google-plus\"], [\"font-awesome\", \"fab\", null], [\"fa\", \"fab\", \"font-awesome\"], [\"handshake-o\", \"far\", \"handshake\"], [\"envelope-open-o\", \"far\", \"envelope-open\"], [\"linode\", \"fab\", null], [\"address-book-o\", \"far\", \"address-book\"], [\"vcard\", null, \"address-card\"], [\"address-card-o\", \"far\", \"address-card\"], [\"vcard-o\", \"far\", \"address-card\"], [\"user-circle-o\", \"far\", \"circle-user\"], [\"user-o\", \"far\", \"user\"], [\"id-badge\", \"far\", null], [\"drivers-license\", null, \"id-card\"], [\"id-card-o\", \"far\", \"id-card\"], [\"drivers-license-o\", \"far\", \"id-card\"], [\"quora\", \"fab\", null], [\"free-code-camp\", \"fab\", null], [\"telegram\", \"fab\", null], [\"thermometer-4\", null, \"temperature-full\"], [\"thermometer\", null, \"temperature-full\"], [\"thermometer-3\", null, \"temperature-three-quarters\"], [\"thermometer-2\", null, \"temperature-half\"], [\"thermometer-1\", null, \"temperature-quarter\"], [\"thermometer-0\", null, \"temperature-empty\"], [\"bathtub\", null, \"bath\"], [\"s15\", null, \"bath\"], [\"window-maximize\", \"far\", null], [\"window-restore\", \"far\", null], [\"times-rectangle\", null, \"rectangle-xmark\"], [\"window-close-o\", \"far\", \"rectangle-xmark\"], [\"times-rectangle-o\", \"far\", \"rectangle-xmark\"], [\"bandcamp\", \"fab\", null], [\"grav\", \"fab\", null], [\"etsy\", \"fab\", null], [\"imdb\", \"fab\", null], [\"ravelry\", \"fab\", null], [\"eercast\", \"fab\", \"sellcast\"], [\"snowflake-o\", \"far\", \"snowflake\"], [\"superpowers\", \"fab\", null], [\"wpexplorer\", \"fab\", null], [\"meetup\", \"fab\", null], [61440, \"fas\", \"martini-glass-empty\"], [61443, \"far\", \"envelope\"], [61446, \"far\", \"star\"], [61460, \"far\", \"trash-can\"], [61462, \"far\", \"file\"], [61463, \"far\", \"clock\"], [61466, \"far\", \"circle-down\"], [61467, \"far\", \"circle-up\"], [61469, \"far\", \"circle-play\"], [61470, \"fas\", \"arrow-rotate-right\"], [61474, \"far\", \"rectangle-list\"], [61502, \"far\", \"image\"], [61505, \"fas\", \"location-dot\"], [61508, \"far\", \"pen-to-square\"], [61509, \"fas\", \"share-from-square\"], [61510, \"far\", \"square-check\"], [61511, \"fas\", \"up-down-left-right\"], [61532, \"far\", \"circle-xmark\"], [61533, \"far\", \"circle-check\"], [61541, \"fas\", \"up-right-and-down-left-from-center\"], [61542, \"fas\", \"down-left-and-up-right-to-center\"], [61550, \"far\", \"eye\"], [61552, \"far\", \"eye-slash\"], [61555, \"fas\", \"calendar-days\"], [61565, \"fas\", \"up-down\"], [61566, \"fas\", \"left-right\"], [61568, \"fas\", \"chart-column\"], [61569, \"fab\", \"twitter-square\"], [61570, \"fab\", \"facebook-square\"], [61575, \"far\", \"thumbs-up\"], [61576, \"far\", \"thumbs-down\"], [61578, \"far\", \"heart\"], [61579, \"fas\", \"right-from-bracket\"], [61580, \"fab\", \"linkedin\"], [61582, \"fas\", \"up-right-from-square\"], [61584, \"fas\", \"right-to-bracket\"], [61586, \"fab\", \"github-square\"], [61588, \"far\", \"lemon\"], [61590, \"far\", \"square\"], [61591, \"far\", \"bookmark\"], [61593, \"fab\", \"twitter\"], [61594, \"fab\", \"facebook-f\"], [61595, \"fab\", \"github\"], [61597, \"far\", \"credit-card\"], [61600, \"far\", \"hard-drive\"], [61604, \"far\", \"hand-point-right\"], [61605, \"far\", \"hand-point-left\"], [61606, \"far\", \"hand-point-up\"], [61607, \"far\", \"hand-point-down\"], [61612, \"fas\", \"earth-americas\"], [61614, \"fas\", \"bars-progress\"], [61618, \"fas\", \"maximize\"], [61632, \"fas\", \"users\"], [61637, \"far\", \"copy\"], [61639, \"far\", \"floppy-disk\"], [61641, \"fas\", \"bars\"], [61648, \"fas\", \"wand-magic-sparkles\"], [61650, \"fab\", \"pinterest\"], [61651, \"fab\", \"pinterest-square\"], [61652, \"fab\", \"google-plus-square\"], [61653, \"fab\", \"google-plus-g\"], [61654, \"fas\", \"money-bill-1\"], [61665, \"fab\", \"linkedin-in\"], [61666, \"fas\", \"arrow-rotate-left\"], [61668, \"fas\", \"gauge-high\"], [61669, \"far\", \"comment\"], [61670, \"far\", \"comments\"], [61671, \"fas\", \"bolt\"], [61674, \"fas\", \"paste\"], [61675, \"far\", \"lightbulb\"], [61676, \"fas\", \"right-left\"], [61602, \"far\", \"bell\"], [61685, \"fas\", \"utensils\"], [61686, \"far\", \"file-lines\"], [61687, \"far\", \"building\"], [61688, \"far\", \"hospital\"], [61706, \"fas\", \"tablet-screen-button\"], [61707, \"fas\", \"mobile-screen-button\"], [61708, \"far\", \"circle\"], [61714, \"fas\", \"reply\"], [61715, \"fab\", \"github-alt\"], [61716, \"far\", \"folder\"], [61717, \"far\", \"folder-open\"], [61720, \"far\", \"face-smile\"], [61721, \"far\", \"face-frown\"], [61722, \"far\", \"face-meh\"], [61724, \"far\", \"keyboard\"], [61725, \"far\", \"flag\"], [61731, \"far\", \"star-half-stroke\"], [61734, \"fas\", \"code-branch\"], [61747, \"far\", \"calendar\"], [61750, \"fab\", \"maxcdn\"], [61755, \"fab\", \"html5\"], [61756, \"fab\", \"css3\"], [61758, \"fas\", \"unlock\"], [61767, \"far\", \"square-minus\"], [61768, \"fas\", \"turn-up\"], [61769, \"fas\", \"turn-down\"], [61772, \"fas\", \"square-up-right\"], [61774, \"far\", \"compass\"], [61776, \"far\", \"square-caret-down\"], [61777, \"far\", \"square-caret-up\"], [61778, \"far\", \"square-caret-right\"], [61781, \"fas\", \"dollar-sign\"], [61782, \"fas\", \"indian-rupee-sign\"], [61786, \"fab\", \"btc\"], [61790, \"fas\", \"arrow-down-z-a\"], [61792, \"fas\", \"arrow-down-short-wide\"], [61793, \"fas\", \"arrow-down-wide-short\"], [61795, \"fas\", \"arrow-down-9-1\"], [61798, \"fab\", \"youtube-square\"], [61799, \"fab\", \"youtube\"], [61800, \"fab\", \"xing\"], [61801, \"fab\", \"xing-square\"], [61802, \"fab\", \"youtube\"], [61803, \"fab\", \"dropbox\"], [61804, \"fab\", \"stack-overflow\"], [61805, \"fab\", \"instagram\"], [61806, \"fab\", \"flickr\"], [61808, \"fab\", \"adn\"], [61809, \"fab\", \"bitbucket\"], [61810, \"fab\", \"bitbucket\"], [61811, \"fab\", \"tumblr\"], [61812, \"fab\", \"tumblr-square\"], [61813, \"fas\", \"down-long\"], [61814, \"fas\", \"up-long\"], [61815, \"fas\", \"left-long\"], [61816, \"fas\", \"right-long\"], [61817, \"fab\", \"apple\"], [61818, \"fab\", \"windows\"], [61819, \"fab\", \"android\"], [61820, \"fab\", \"linux\"], [61821, \"fab\", \"dribbble\"], [61822, \"fab\", \"skype\"], [61824, \"fab\", \"foursquare\"], [61825, \"fab\", \"trello\"], [61828, \"fab\", \"gratipay\"], [61829, \"far\", \"sun\"], [61830, \"far\", \"moon\"], [61833, \"fab\", \"vk\"], [61834, \"fab\", \"weibo\"], [61835, \"fab\", \"renren\"], [61836, \"fab\", \"pagelines\"], [61837, \"fab\", \"stack-exchange\"], [61838, \"far\", \"circle-right\"], [61840, \"far\", \"circle-left\"], [61841, \"far\", \"square-caret-left\"], [61842, \"far\", \"circle-dot\"], [61844, \"fab\", \"vimeo-square\"], [61845, \"fas\", \"turkish-lira-sign\"], [61846, \"far\", \"square-plus\"], [61848, \"fab\", \"slack\"], [61850, \"fab\", \"wordpress\"], [61851, \"fab\", \"openid\"], [61854, \"fab\", \"yahoo\"], [61856, \"fab\", \"google\"], [61857, \"fab\", \"reddit\"], [61858, \"fab\", \"reddit-square\"], [61859, \"fab\", \"stumbleupon-circle\"], [61860, \"fab\", \"stumbleupon\"], [61861, \"fab\", \"delicious\"], [61862, \"fab\", \"digg\"], [61863, \"fab\", \"pied-piper-pp\"], [61864, \"fab\", \"pied-piper-alt\"], [61865, \"fab\", \"drupal\"], [61866, \"fab\", \"joomla\"], [61876, \"fab\", \"behance\"], [61877, \"fab\", \"behance-square\"], [61878, \"fab\", \"steam\"], [61879, \"fab\", \"steam-square\"], [61884, \"fab\", \"spotify\"], [61885, \"fab\", \"deviantart\"], [61886, \"fab\", \"soundcloud\"], [61889, \"far\", \"file-pdf\"], [61890, \"far\", \"file-word\"], [61891, \"far\", \"file-excel\"], [61892, \"far\", \"file-powerpoint\"], [61893, \"far\", \"file-image\"], [61894, \"far\", \"file-zipper\"], [61895, \"far\", \"file-audio\"], [61896, \"far\", \"file-video\"], [61897, \"far\", \"file-code\"], [61898, \"fab\", \"vine\"], [61899, \"fab\", \"codepen\"], [61900, \"fab\", \"jsfiddle\"], [61901, \"fas\", \"life-ring\"], [61902, \"fas\", \"circle-notch\"], [61904, \"fab\", \"rebel\"], [61905, \"fab\", \"empire\"], [61906, \"fab\", \"git-square\"], [61907, \"fab\", \"git\"], [61908, \"fab\", \"hacker-news\"], [61909, \"fab\", \"tencent-weibo\"], [61910, \"fab\", \"qq\"], [61911, \"fab\", \"weixin\"], [61912, \"fas\", \"paper-plane\"], [61913, \"far\", \"paper-plane\"], [61915, \"far\", \"circle\"], [61923, \"far\", \"futbol\"], [61927, \"fab\", \"slideshare\"], [61928, \"fab\", \"twitch\"], [61929, \"fab\", \"yelp\"], [61930, \"far\", \"newspaper\"], [61933, \"fab\", \"paypal\"], [61934, \"fab\", \"google-wallet\"], [61936, \"fab\", \"cc-visa\"], [61937, \"fab\", \"cc-mastercard\"], [61938, \"fab\", \"cc-discover\"], [61939, \"fab\", \"cc-amex\"], [61940, \"fab\", \"cc-paypal\"], [61941, \"fab\", \"cc-stripe\"], [61943, \"far\", \"bell-slash\"], [61944, \"fas\", \"trash-can\"], [61945, \"far\", \"copyright\"], [61954, \"fab\", \"lastfm\"], [61955, \"fab\", \"lastfm-square\"], [61960, \"fab\", \"ioxhost\"], [61961, \"fab\", \"angellist\"], [61962, \"far\", \"closed-captioning\"], [61965, \"fab\", \"buysellads\"], [61966, \"fab\", \"connectdevelop\"], [61968, \"fab\", \"dashcube\"], [61969, \"fab\", \"forumbee\"], [61970, \"fab\", \"leanpub\"], [61971, \"fab\", \"sellsy\"], [61972, \"fab\", \"shirtsinbulk\"], [61973, \"fab\", \"simplybuilt\"], [61974, \"fab\", \"skyatlas\"], [61977, \"far\", \"gem\"], [61988, \"fas\", \"mars-and-venus\"], [62000, \"fab\", \"facebook\"], [62001, \"fab\", \"pinterest-p\"], [62002, \"fab\", \"whatsapp\"], [62006, \"fas\", \"bed\"], [62007, \"fab\", \"viacoin\"], [62010, \"fab\", \"medium\"], [62011, \"fab\", \"y-combinator\"], [62012, \"fab\", \"optin-monster\"], [62013, \"fab\", \"opencart\"], [62014, \"fab\", \"expeditedssl\"], [62016, \"fas\", \"battery-full\"], [62017, \"fas\", \"battery-three-quarters\"], [62018, \"fas\", \"battery-half\"], [62019, \"fas\", \"battery-quarter\"], [62023, \"far\", \"object-group\"], [62024, \"far\", \"object-ungroup\"], [62026, \"far\", \"note-sticky\"], [62027, \"fab\", \"cc-jcb\"], [62028, \"fab\", \"cc-diners-club\"], [62029, \"far\", \"clone\"], [62032, \"fas\", \"hourglass-empty\"], [62034, \"fas\", \"hourglass\"], [62037, \"far\", \"hand-back-fist\"], [62038, \"far\", \"hand\"], [62039, \"far\", \"hand-scissors\"], [62040, \"far\", \"hand-lizard\"], [62041, \"far\", \"hand-spock\"], [62042, \"far\", \"hand-pointer\"], [62043, \"far\", \"hand-peace\"], [62045, \"far\", \"registered\"], [62046, \"fab\", \"creative-commons\"], [62048, \"fab\", \"gg\"], [62049, \"fab\", \"gg-circle\"], [62051, \"fab\", \"odnoklassniki\"], [62052, \"fab\", \"odnoklassniki-square\"], [62053, \"fab\", \"get-pocket\"], [62054, \"fab\", \"wikipedia-w\"], [62055, \"fab\", \"safari\"], [62056, \"fab\", \"chrome\"], [62057, \"fab\", \"firefox\"], [62058, \"fab\", \"opera\"], [62059, \"fab\", \"internet-explorer\"], [62061, \"fab\", \"contao\"], [62062, \"fab\", \"500px\"], [62064, \"fab\", \"amazon\"], [62065, \"far\", \"calendar-plus\"], [62066, \"far\", \"calendar-minus\"], [62067, \"far\", \"calendar-xmark\"], [62068, \"far\", \"calendar-check\"], [62072, \"far\", \"map\"], [62074, \"fas\", \"comment-dots\"], [62075, \"far\", \"comment-dots\"], [62076, \"fab\", \"houzz\"], [62077, \"fab\", \"vimeo-v\"], [62078, \"fab\", \"black-tie\"], [62080, \"fab\", \"fonticons\"], [62081, \"fab\", \"reddit-alien\"], [62082, \"fab\", \"edge\"], [62083, \"fas\", \"credit-card\"], [62084, \"fab\", \"codiepie\"], [62085, \"fab\", \"modx\"], [62086, \"fab\", \"fort-awesome\"], [62087, \"fab\", \"usb\"], [62088, \"fab\", \"product-hunt\"], [62089, \"fab\", \"mixcloud\"], [62090, \"fab\", \"scribd\"], [62092, \"far\", \"circle-pause\"], [62094, \"far\", \"circle-stop\"], [62099, \"fab\", \"bluetooth\"], [62100, \"fab\", \"bluetooth-b\"], [62102, \"fab\", \"gitlab\"], [62103, \"fab\", \"wpbeginner\"], [62104, \"fab\", \"wpforms\"], [62105, \"fab\", \"envira\"], [62107, \"fab\", \"accessible-icon\"], [62108, \"far\", \"circle-question\"], [62117, \"fab\", \"glide\"], [62118, \"fab\", \"glide-g\"], [62121, \"fab\", \"viadeo\"], [62122, \"fab\", \"viadeo-square\"], [62123, \"fab\", \"snapchat\"], [62124, \"fab\", \"snapchat\"], [62125, \"fab\", \"snapchat-square\"], [62126, \"fab\", \"pied-piper\"], [62128, \"fab\", \"first-order\"], [62129, \"fab\", \"yoast\"], [62130, \"fab\", \"themeisle\"], [62131, \"fab\", \"google-plus\"], [62132, \"fab\", \"font-awesome\"], [62133, \"far\", \"handshake\"], [62135, \"far\", \"envelope-open\"], [62136, \"fab\", \"linode\"], [62138, \"far\", \"address-book\"], [62140, \"far\", \"address-card\"], [62142, \"far\", \"circle-user\"], [62144, \"far\", \"user\"], [62145, \"far\", \"id-badge\"], [62147, \"far\", \"id-card\"], [62148, \"fab\", \"quora\"], [62149, \"fab\", \"free-code-camp\"], [62150, \"fab\", \"telegram\"], [62151, \"fas\", \"temperature-full\"], [62157, \"fas\", \"bath\"], [62160, \"far\", \"window-maximize\"], [62162, \"far\", \"window-restore\"], [62163, \"fas\", \"rectangle-xmark\"], [62164, \"far\", \"rectangle-xmark\"], [62165, \"fab\", \"bandcamp\"], [62166, \"fab\", \"grav\"], [62167, \"fab\", \"etsy\"], [62168, \"fab\", \"imdb\"], [62169, \"fab\", \"ravelry\"], [62170, \"fab\", \"sellcast\"], [62172, \"far\", \"snowflake\"], [62173, \"fab\", \"superpowers\"], [62174, \"fab\", \"wpexplorer\"], [62176, \"fab\", \"meetup\"]];\n  bunker(function () {\n    if (typeof namespace.hooks.addShims === 'function') {\n      namespace.hooks.addShims(shims);\n    } else {\n      var _namespace$shims;\n\n      (_namespace$shims = namespace.shims).push.apply(_namespace$shims, shims);\n    }\n  });\n\n  return shims;\n\n})));\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_animated.less",
    "content": "// animating icons\n// --------------------------\n\n.@{fa-css-prefix}-beat {\n  animation-name: ~'@{fa-css-prefix}-beat';\n  animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0)';\n  animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';\n  animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';\n  animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';\n  animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';\n}\n\n.@{fa-css-prefix}-bounce {\n  animation-name: ~'@{fa-css-prefix}-beat';\n  animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0)';\n  animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';\n  animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';\n  animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';\n  animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1))';\n}\n\n.@{fa-css-prefix}-fade {\n  animation-name: ~'@{fa-css-prefix}-fade';\n  animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0)';\n  animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';\n  animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';\n  animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';\n  animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';\n}\n\n.@{fa-css-prefix}-beat-fade {\n  animation-name: ~'@{fa-css-prefix}-beat-fade';\n  animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0)';\n  animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';\n  animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';\n  animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';\n  animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';\n}\n\n.@{fa-css-prefix}-flip {\n  animation-name: ~'@{fa-css-prefix}-flip';\n  animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0)';\n  animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';\n  animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';\n  animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';\n  animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';\n}\n\n.@{fa-css-prefix}-shake {\n  animation-name: ~'@{fa-css-prefix}-shake';\n  animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0)';\n  animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';\n  animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';\n  animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';\n  animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';\n}\n\n.@{fa-css-prefix}-spin {\n  animation-name: ~'@{fa-css-prefix}-spin';\n  animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0)';\n  animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';\n  animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 2s)';\n  animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';\n  animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, linear)';\n}\n\n.@{fa-css-prefix}-spin-reverse {\n  --@{fa-css-prefix}-animation-direction: reverse;\n}\n\n// if agent or operating system prefers reduced motion, disable animations\n// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/\n// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion\n@media (prefers-reduced-motion: reduce) {\n  .@{fa-css-prefix}-beat,\n  .@{fa-css-prefix}-bounce,\n  .@{fa-css-prefix}-fade,\n  .@{fa-css-prefix}-beat-fade,\n  .@{fa-css-prefix}-flip,\n  .@{fa-css-prefix}-pulse,\n  .@{fa-css-prefix}-shake,\n  .@{fa-css-prefix}-spin,\n  .@{fa-css-prefix}-spin-pulse {\n    animation-delay: -1ms;\n    animation-duration: 1ms;\n    animation-iteration-count: 1;\n    transition-delay: 0s;\n    transition-duration: 0s;\n  }\n}\n\n@keyframes ~'@{fa-css-prefix}-beat' {\n  0%, 90% { transform: scale(1); }\n  45% { transform: ~'scale(var(--@{fa-css-prefix}-beat-scale, 1.25))'; }\n}\n\n@keyframes  ~'@{fa-css-prefix}-bounce' {\n  0%   { transform: scale(1,1) translateY(0); }\n  10%  { transform: ~'scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1),var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9))' translateY(0); }\n  30%  { transform: ~'scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1))' ~'translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em))'; }\n  50%  { transform: ~'scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05),var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95))' translateY(0); }\n  57%  { transform: ~'scale(1,1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em))'; }\n  64%  { transform: scale(1,1) translateY(0); }\n  100% { transform: scale(1,1) translateY(0); }\n}\n\n@keyframes ~'@{fa-css-prefix}-fade' {\n  50% { opacity: ~'var(--@{fa-css-prefix}-fade-opacity, 0.4)'; }\n}\n\n@keyframes ~'@{fa-css-prefix}-beat-fade' {\n  0%, 100% {\n    opacity: ~'var(--@{fa-css-prefix}-beat-fade-opacity, 0.4)';\n    transform: scale(1);\n  }\n  50% {\n    opacity: 1;\n    transform: ~'scale(var(--@{fa-css-prefix}-beat-fade-scale, 1.125))';\n  }\n}\n\n@keyframes ~'@{fa-css-prefix}-flip' {\n  50% {\n    transform: ~'rotate3d(var(--@{fa-css-prefix}-flip-x, 0), var(--@{fa-css-prefix}-flip-y, 1), var(--@{fa-css-prefix}-flip-z, 0), var(--@{fa-css-prefix}-flip-angle, -180deg))';\n  }\n}\n\n@keyframes ~'@{fa-css-prefix}-shake' {\n  0% { transform: rotate(-15deg); }\n  4% { transform: rotate(15deg); }\n  8%, 24% { transform: rotate(-18deg); }\n  12%, 28% { transform: rotate(18deg); }\n  16% { transform: rotate(-22deg); }\n  20% { transform: rotate(22deg); }\n  32% { transform: rotate(-12deg); }\n  36% { transform: rotate(12deg); }\n  40%, 100% { transform: rotate(0deg); }\n}\n\n@keyframes ~'@{fa-css-prefix}-spin' {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_bordered-pulled.less",
    "content": "// bordered + pulled icons\n// -------------------------\n\n.@{fa-css-prefix}-border {\n  border-color: ~'var(--@{fa-css-prefix}-border-color, @{fa-border-color})';\n  border-radius: ~'var(--@{fa-css-prefix}-border-radius, @{fa-border-radius})';\n  border-style: ~'var(--@{fa-css-prefix}-border-style, @{fa-border-style})';\n  border-width: ~'var(--@{fa-css-prefix}-border-width, @{fa-border-width})';\n  padding: ~'var(--@{fa-css-prefix}-border-padding, @{fa-border-padding})';\n}\n\n.@{fa-css-prefix}-pull-left { \n  float: left;\n  margin-right: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})'; \n}\n\n.@{fa-css-prefix}-pull-right { \n  float: right;\n  margin-left: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})'; \n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_core.less",
    "content": "// base icon class definition\n// -------------------------\n\n@{fa-css-prefix} {\n  font-family: ~'var(--@{fa-css-prefix}-style-family, @{fa-style-family})';\n  font-weight: ~'var(--@{fa-css-prefix}-style, @{fa-style})';\n}\n\n.@{fa-css-prefix},\n.fas,\n.fa-solid,\n.far,\n.fa-regular,\n.fal,\n.fa-light,\n.fat,\n.fa-thin,\n.fad,\n.fa-duotone,\n.fab,\n.fa-brands {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: ~'var(--@{fa-css-prefix}-display, @{fa-display})';\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_fixed-width.less",
    "content": "// fixed-width icons\n// -------------------------\n\n.@{fa-css-prefix}-fw {\n  text-align: center;\n  width: @fa-fw-width;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_icons.less",
    "content": "// specific icon class definition\n// -------------------------\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\neach(.fa-icons(), {\n  .@{fa-css-prefix}-@{key}::before { content: @value; }\n});\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_list.less",
    "content": "// icons in a list\n// -------------------------\n\n.@{fa-css-prefix}-ul {\n  list-style-type: none;\n  margin-left: ~'var(--@{fa-css-prefix}-li-margin, @{fa-li-margin})';\n  padding-left: 0;\n\n  > li { position: relative; }\n}\n\n.@{fa-css-prefix}-li {\n  left: calc(~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})' * -1);\n  position: absolute;\n  text-align: center;\n  width: ~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})';\n  line-height: inherit;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_mixins.less",
    "content": "// mixins\n// --------------------------\n\n// base rendering for an icon\n.fa-icon() {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  line-height: 1;\n}\n\n// sets relative font-sizing and alignment (in _sizing)\n.fa-size(@font-size) {\n  font-size: (@font-size / @fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base\n  line-height: (1 / @font-size) * 1em; // sets the line-height of the icon back to that of it's parent\n  vertical-align: ((6 / @font-size) - (3 / 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender\n}\n\n// only display content to screen readers\n// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n.fa-sr-only() {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n// use in conjunction with .sr-only to only display content when it's focused\n.fa-sr-only-focusable() {\n  &:not(:focus) {\n    .fa-sr-only();\n  }\n}\n\n// convenience mixins for declaring pseudo-elements by CSS variable,\n// including all style-specific font properties, and both the ::before\n// and ::after elements in the duotone case.\n.fa-icon-solid(@fa-var) {\n  .fa-icon;\n  .fa-solid;\n\n  &::before {\n    content: @fa-var;\n  }\n}\n\n.fa-icon-regular(@fa-var) {\n  .fa-icon;\n  .fa-regular;\n\n  &::before {\n    content: @fa-var;\n  }\n}\n\n.fa-icon-brands(@fa-var) {\n  .fa-icon;\n  .fa-brands;\n\n  &::before {\n    content: @fa-var;\n  }\n}\n\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_rotated-flipped.less",
    "content": "// rotating + flipping icons\n// -------------------------\n\n.@{fa-css-prefix}-rotate-90 {\n  transform: rotate(90deg);\n}\n\n.@{fa-css-prefix}-rotate-180 {\n  transform: rotate(180deg);\n}\n\n.@{fa-css-prefix}-rotate-270 {\n  transform: rotate(270deg);\n}\n\n.@{fa-css-prefix}-flip-horizontal {\n  transform: scale(-1, 1);\n}\n\n.@{fa-css-prefix}-flip-vertical {\n  transform: scale(1, -1);\n}\n\n.@{fa-css-prefix}-flip-both,\n.@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical { \n  transform: scale(-1, -1);\n}\n\n.@{fa-css-prefix}-rotate-by {\n  transform: rotate(~'var(--@{fa-css-prefix}-rotate-angle, none)');\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_screen-reader.less",
    "content": "// screen-reader utilities\n// -------------------------\n\n// only display content to screen readers\n.sr-only,\n.fa-sr-only {\n  .fa-sr-only();\n}\n\n// use in conjunction with .sr-only to only display content when it's focused\n.sr-only-focusable,\n.fa-sr-only-focusable {\n  .fa-sr-only-focusable();\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_shims.less",
    "content": ".@{fa-css-prefix}.@{fa-css-prefix}-glass:before { content: @fa-var-martini-glass-empty; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-envelope-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-star-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-star-o:before { content: @fa-var-star; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-remove:before { content: @fa-var-xmark; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-close:before { content: @fa-var-xmark; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-gear:before { content: @fa-var-gear; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-trash-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-can; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-home:before { content: @fa-var-house; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-o:before { content: @fa-var-file; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-clock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-circle-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-circle-up; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-play-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-circle-play; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-repeat:before { content: @fa-var-arrow-rotate-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-rotate-right:before { content: @fa-var-arrow-rotate-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-refresh:before { content: @fa-var-arrows-rotate; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-list-alt {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-list-alt:before { content: @fa-var-rectangle-list; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-dedent:before { content: @fa-var-outdent; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-video-camera:before { content: @fa-var-video; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-picture-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-picture-o:before { content: @fa-var-image; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-photo {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-photo:before { content: @fa-var-image; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-image {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-image:before { content: @fa-var-image; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-map-marker:before { content: @fa-var-location-dot; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pencil-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pen-to-square; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-edit {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-edit:before { content: @fa-var-pen-to-square; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-from-square; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-check-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-check-square-o:before { content: @fa-var-square-check; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-arrows:before { content: @fa-var-up-down-left-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-times-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-circle-xmark; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-check-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-circle-check; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-mail-forward:before { content: @fa-var-share; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-expand:before { content: @fa-var-up-right-and-down-left-from-center; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-compress:before { content: @fa-var-down-left-and-up-right-to-center; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-eye {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-eye-slash {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-warning:before { content: @fa-var-triangle-exclamation; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar-days; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-arrows-v:before { content: @fa-var-up-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-arrows-h:before { content: @fa-var-left-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bar-chart:before { content: @fa-var-chart-column; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bar-chart-o:before { content: @fa-var-chart-column; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-twitter-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-facebook-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-gears:before { content: @fa-var-gears; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thumbs-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-up; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thumbs-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-heart-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sign-out:before { content: @fa-var-right-from-bracket; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-linkedin-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumbtack; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-external-link:before { content: @fa-var-up-right-from-square; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sign-in:before { content: @fa-var-right-to-bracket; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-github-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-lemon-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-square-o:before { content: @fa-var-square; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bookmark-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-twitter {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-facebook {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook-f; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-facebook-f {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-facebook-f:before { content: @fa-var-facebook-f; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-github {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-credit-card {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-feed:before { content: @fa-var-rss; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hdd-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hard-drive; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-point-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-point-left; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-point-up; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-point-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-globe:before { content: @fa-var-earth-americas; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-tasks:before { content: @fa-var-bars-progress; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-maximize; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-group:before { content: @fa-var-users; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-chain:before { content: @fa-var-link; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cut:before { content: @fa-var-scissors; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-files-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-files-o:before { content: @fa-var-copy; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-floppy-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-disk; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-save {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-save:before { content: @fa-var-floppy-disk; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-navicon:before { content: @fa-var-bars; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-reorder:before { content: @fa-var-bars; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-magic:before { content: @fa-var-wand-magic-sparkles; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pinterest {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pinterest-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-google-plus {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus-g; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-money:before { content: @fa-var-money-bill-1; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-unsorted:before { content: @fa-var-sort; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-up; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-linkedin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin-in; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-rotate-left:before { content: @fa-var-arrow-rotate-left; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-legal:before { content: @fa-var-gavel; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-tachometer:before { content: @fa-var-gauge-high; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-dashboard:before { content: @fa-var-gauge-high; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-comment-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-comments-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-flash:before { content: @fa-var-bolt; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-clipboard:before { content: @fa-var-paste; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-lightbulb-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-exchange:before { content: @fa-var-right-left; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-arrow-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-arrow-up; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bell-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cutlery:before { content: @fa-var-utensils; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-text-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-lines; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-building-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-building-o:before { content: @fa-var-building; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hospital-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet-screen-button; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile-screen-button; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-mobile-phone:before { content: @fa-var-mobile-screen-button; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-mail-reply:before { content: @fa-var-reply; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-github-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-folder-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-folder-open-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-smile-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-smile-o:before { content: @fa-var-face-smile; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-frown-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-frown-o:before { content: @fa-var-face-frown; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-meh-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-meh-o:before { content: @fa-var-face-meh; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-keyboard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-flag-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-mail-reply-all:before { content: @fa-var-reply-all; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-star-half-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-stroke; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-star-half-empty {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-star-half-empty:before { content: @fa-var-star-half-stroke; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-star-half-full {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-star-half-full:before { content: @fa-var-star-half-stroke; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-branch; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-chain-broken:before { content: @fa-var-link-slash; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-unlink:before { content: @fa-var-link-slash; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-maxcdn {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-html5 {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-css3 {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-minus-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-square-minus; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-level-up:before { content: @fa-var-turn-up; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-level-down:before { content: @fa-var-turn-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pencil-square:before { content: @fa-var-square-pen; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-external-link-square:before { content: @fa-var-square-up-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-compass {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-square-caret-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-toggle-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-toggle-down:before { content: @fa-var-square-caret-down; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-square-caret-up; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-toggle-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-toggle-up:before { content: @fa-var-square-caret-up; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-square-caret-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-toggle-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-toggle-right:before { content: @fa-var-square-caret-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-eur:before { content: @fa-var-euro-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-euro:before { content: @fa-var-euro-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-gbp:before { content: @fa-var-sterling-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-usd:before { content: @fa-var-dollar-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-dollar:before { content: @fa-var-dollar-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-inr:before { content: @fa-var-indian-rupee-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-rupee:before { content: @fa-var-indian-rupee-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-jpy:before { content: @fa-var-yen-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cny:before { content: @fa-var-yen-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-rmb:before { content: @fa-var-yen-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-yen:before { content: @fa-var-yen-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-rub:before { content: @fa-var-ruble-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-ruble:before { content: @fa-var-ruble-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-rouble:before { content: @fa-var-ruble-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-krw:before { content: @fa-var-won-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-won:before { content: @fa-var-won-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-btc {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bitcoin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-bitcoin:before { content: @fa-var-btc; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-text:before { content: @fa-var-file-lines; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-arrow-down-a-z; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-arrow-down-z-a; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-arrow-down-short-wide; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-arrow-down-wide-short; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-arrow-down-1-9; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-arrow-down-9-1; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-youtube-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-youtube {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-xing {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-xing-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-youtube-play {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-dropbox {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-stack-overflow {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-instagram {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-flickr {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-adn {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bitbucket {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bitbucket-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-tumblr {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-tumblr-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-down-long; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-up-long; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-left-long; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-right-long; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-apple {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-windows {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-android {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-linux {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-dribbble {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-skype {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-foursquare {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-trello {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-gratipay {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-gittip {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-gittip:before { content: @fa-var-gratipay; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sun-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-moon-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-vk {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-weibo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-renren {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pagelines {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-stack-exchange {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-circle-right; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-circle-left; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-square-caret-left; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-toggle-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-toggle-left:before { content: @fa-var-square-caret-left; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-dot-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-circle-dot; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-vimeo-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-try:before { content: @fa-var-turkish-lira-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-turkish-lira:before { content: @fa-var-turkish-lira-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-plus-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-square-plus; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-slack {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-wordpress {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-openid {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-institution:before { content: @fa-var-building-columns; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bank:before { content: @fa-var-building-columns; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-mortar-board:before { content: @fa-var-graduation-cap; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-yahoo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-google {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-reddit {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-reddit-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-stumbleupon-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-stumbleupon {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-delicious {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-digg {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pied-piper-pp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pied-piper-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-drupal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-joomla {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-behance {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-behance-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-steam {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-steam-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-automobile:before { content: @fa-var-car; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cab:before { content: @fa-var-taxi; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-spotify {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-deviantart {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-soundcloud {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-pdf-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-word-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-excel-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-powerpoint-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-image-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-photo-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-photo-o:before { content: @fa-var-file-image; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-picture-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-picture-o:before { content: @fa-var-file-image; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-archive-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-zipper; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-zip-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-zip-o:before { content: @fa-var-file-zipper; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-audio-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-sound-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-sound-o:before { content: @fa-var-file-audio; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-video-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-movie-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-movie-o:before { content: @fa-var-file-video; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-file-code-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-vine {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-codepen {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-jsfiddle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-life-bouy:before { content: @fa-var-life-ring; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-life-buoy:before { content: @fa-var-life-ring; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-life-saver:before { content: @fa-var-life-ring; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-support:before { content: @fa-var-life-ring; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-notch; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-rebel {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-ra {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-ra:before { content: @fa-var-rebel; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-resistance {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-resistance:before { content: @fa-var-rebel; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-empire {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-ge {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-ge:before { content: @fa-var-empire; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-git-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-git {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hacker-news {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-y-combinator-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-y-combinator-square:before { content: @fa-var-hacker-news; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-yc-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-yc-square:before { content: @fa-var-hacker-news; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-tencent-weibo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-qq {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-weixin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-wechat {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-wechat:before { content: @fa-var-weixin; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-send:before { content: @fa-var-paper-plane; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-paper-plane-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-send-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-send-o:before { content: @fa-var-paper-plane; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-circle-thin {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-header:before { content: @fa-var-heading; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-futbol-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-soccer-ball-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-soccer-ball-o:before { content: @fa-var-futbol; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-slideshare {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-twitch {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-yelp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-newspaper-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-paypal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-google-wallet {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc-visa {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc-mastercard {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc-discover {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc-amex {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc-paypal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc-stripe {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bell-slash-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-trash:before { content: @fa-var-trash-can; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-copyright {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eye-dropper; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-area-chart:before { content: @fa-var-chart-area; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pie-chart:before { content: @fa-var-chart-pie; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-line-chart:before { content: @fa-var-chart-line; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-lastfm {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-lastfm-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-ioxhost {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-angellist {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-cc:before { content: @fa-var-closed-captioning; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-ils:before { content: @fa-var-shekel-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-shekel:before { content: @fa-var-shekel-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sheqel:before { content: @fa-var-shekel-sign; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-buysellads {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-connectdevelop {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-dashcube {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-forumbee {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-leanpub {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sellsy {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-shirtsinbulk {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-simplybuilt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-skyatlas {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-diamond {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-diamond:before { content: @fa-var-gem; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-transgender:before { content: @fa-var-mars-and-venus; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-intersex:before { content: @fa-var-mars-and-venus; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-facebook-official {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pinterest-p {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-whatsapp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hotel:before { content: @fa-var-bed; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-viacoin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-medium {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-y-combinator {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-yc {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-yc:before { content: @fa-var-y-combinator; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-optin-monster {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-opencart {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-expeditedssl {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-battery-4:before { content: @fa-var-battery-full; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-battery:before { content: @fa-var-battery-full; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-battery-3:before { content: @fa-var-battery-three-quarters; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-battery-2:before { content: @fa-var-battery-half; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-battery-1:before { content: @fa-var-battery-quarter; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-battery-0:before { content: @fa-var-battery-empty; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-object-group {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-object-ungroup {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-sticky-note-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-note-sticky; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc-jcb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-cc-diners-club {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-clone {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-empty; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-1:before { content: @fa-var-hourglass-start; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-2:before { content: @fa-var-hourglass; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-3:before { content: @fa-var-hourglass-end; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-rock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-back-fist; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-grab-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-grab-o:before { content: @fa-var-hand-back-fist; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-paper-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-stop-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-stop-o:before { content: @fa-var-hand; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-scissors-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-lizard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-spock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-pointer-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-peace-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-registered {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-creative-commons {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-gg {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-gg-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-odnoklassniki {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-odnoklassniki-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-get-pocket {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-wikipedia-w {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-safari {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-chrome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-firefox {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-opera {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-internet-explorer {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-television:before { content: @fa-var-tv; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-contao {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-500px {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-amazon {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-plus-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-minus-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-times-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-xmark; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-check-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-map-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-map-o:before { content: @fa-var-map; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-commenting:before { content: @fa-var-comment-dots; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-commenting-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-commenting-o:before { content: @fa-var-comment-dots; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-houzz {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-vimeo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo-v; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-black-tie {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-fonticons {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-reddit-alien {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-edge {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-codiepie {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-modx {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-fort-awesome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-usb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-product-hunt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-mixcloud {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-scribd {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pause-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-circle-pause; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-stop-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-circle-stop; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bluetooth {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bluetooth-b {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-gitlab {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-wpbeginner {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-wpforms {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-envira {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-wheelchair-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-accessible-icon; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-question-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-circle-question; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-phone-volume; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-asl-interpreting:before { content: @fa-var-hands-asl-interpreting; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-deafness:before { content: @fa-var-ear-deaf; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-hard-of-hearing:before { content: @fa-var-ear-deaf; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-glide {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-glide-g {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-signing:before { content: @fa-var-hands; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-viadeo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-viadeo-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-snapchat {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-snapchat-ghost {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-snapchat-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-pied-piper {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-first-order {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-yoast {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-themeisle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-official {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-circle:before { content: @fa-var-google-plus; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-font-awesome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-fa {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-fa:before { content: @fa-var-font-awesome; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-handshake-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-envelope-open-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-linode {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-address-book-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-vcard:before { content: @fa-var-address-card; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-address-card-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-vcard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-vcard-o:before { content: @fa-var-address-card; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-user-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-circle-user; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-user-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-user-o:before { content: @fa-var-user; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-id-badge {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-drivers-license:before { content: @fa-var-id-card; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-id-card-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-drivers-license-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-drivers-license-o:before { content: @fa-var-id-card; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-quora {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-free-code-camp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-telegram {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-4:before { content: @fa-var-temperature-full; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thermometer:before { content: @fa-var-temperature-full; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-3:before { content: @fa-var-temperature-three-quarters; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-2:before { content: @fa-var-temperature-half; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-1:before { content: @fa-var-temperature-quarter; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-0:before { content: @fa-var-temperature-empty; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bathtub:before { content: @fa-var-bath; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-s15:before { content: @fa-var-bath; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-window-maximize {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-window-restore {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-times-rectangle:before { content: @fa-var-rectangle-xmark; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-window-close-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-window-close-o:before { content: @fa-var-rectangle-xmark; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-times-rectangle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-times-rectangle-o:before { content: @fa-var-rectangle-xmark; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-bandcamp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-grav {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-etsy {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-imdb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-ravelry {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-eercast {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-eercast:before { content: @fa-var-sellcast; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-snowflake-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.@{fa-css-prefix}.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-superpowers {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-wpexplorer {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.@{fa-css-prefix}.@{fa-css-prefix}-meetup {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_sizing.less",
    "content": "// sizing icons\n// -------------------------\n\n// literal magnification scale\n.sizes-literal(@factor) when (@factor > 0) {\n  .sizes-literal((@factor - 1));\n\n  .@{fa-css-prefix}-@{factor}x {\n    font-size: (@factor * 1em);\n  }\n}\n.sizes-literal(10);\n\n// step-based scale (with alignment)\neach(.fa-sizes(), {\n  .@{fa-css-prefix}-@{key} {\n    .fa-size(@value);\n  }\n});\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_stacked.less",
    "content": "// stacking icons\n// -------------------------\n\n.@{fa-css-prefix}-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: @fa-stack-vertical-align;\n  width: @fa-stack-width;\n}\n\n.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%;\n  z-index: ~'var(--@{fa-css-prefix}-stack-z-index, @{fa-stack-z-index})';\n}\n\n.@{fa-css-prefix}-stack-1x { \n  line-height: inherit; \n}\n\n.@{fa-css-prefix}-stack-2x { \n  font-size: 2em; \n}\n\n.@{fa-css-prefix}-inverse { \n  color: ~'var(--@{fa-css-prefix}-inverse, @{fa-inverse})';\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/_variables.less",
    "content": "// variables\n// --------------------------\n\n@fa-css-prefix          : fa;\n@fa-style               : 900;\n@fa-style-family        : \"Font Awesome 6 Free\";\n\n@fa-display             : inline-block;\n\n@fa-fw-width            : (20em / 16);\n@fa-inverse             : #fff;\n\n@fa-border-color        : #eee;\n@fa-border-padding      : .2em .25em .15em;\n@fa-border-radius       : .1em;\n@fa-border-style        : solid;\n@fa-border-width        : .08em;\n\n@fa-size-scale-2xs      : 10;\n@fa-size-scale-xs       : 12;\n@fa-size-scale-sm       : 14;\n@fa-size-scale-base     : 16;\n@fa-size-scale-lg       : 20;\n@fa-size-scale-xl       : 24;\n@fa-size-scale-2xl      : 32;\n\n.fa-sizes() {\n  2xs                   : @fa-size-scale-2xs;\n  xs                    : @fa-size-scale-xs;\n  sm                    : @fa-size-scale-sm;\n  lg                    : @fa-size-scale-lg;\n  xl                    : @fa-size-scale-xl;\n  2xl                   : @fa-size-scale-2xl;\n}\n\n@fa-li-width            : 2em;\n@fa-li-margin           : (@fa-li-width * 5/4);\n\n@fa-pull-margin         : .3em;\n\n@fa-primary-opacity     : 1;\n@fa-secondary-opacity   : .4;\n\n@fa-stack-vertical-align: middle;\n@fa-stack-width         : (@fa-fw-width * 2);\n@fa-stack-z-index       : auto;\n\n@fa-font-display        : block;\n@fa-font-path           : \"../webfonts\";\n\n@fa-var-0: \"\\30\";\n@fa-var-1: \"\\31\";\n@fa-var-2: \"\\32\";\n@fa-var-3: \"\\33\";\n@fa-var-4: \"\\34\";\n@fa-var-5: \"\\35\";\n@fa-var-6: \"\\36\";\n@fa-var-7: \"\\37\";\n@fa-var-8: \"\\38\";\n@fa-var-9: \"\\39\";\n@fa-var-a: \"\\41\";\n@fa-var-address-book: \"\\f2b9\";\n@fa-var-contact-book: \"\\f2b9\";\n@fa-var-address-card: \"\\f2bb\";\n@fa-var-contact-card: \"\\f2bb\";\n@fa-var-vcard: \"\\f2bb\";\n@fa-var-align-center: \"\\f037\";\n@fa-var-align-justify: \"\\f039\";\n@fa-var-align-left: \"\\f036\";\n@fa-var-align-right: \"\\f038\";\n@fa-var-anchor: \"\\f13d\";\n@fa-var-angle-down: \"\\f107\";\n@fa-var-angle-left: \"\\f104\";\n@fa-var-angle-right: \"\\f105\";\n@fa-var-angle-up: \"\\f106\";\n@fa-var-angles-down: \"\\f103\";\n@fa-var-angle-double-down: \"\\f103\";\n@fa-var-angles-left: \"\\f100\";\n@fa-var-angle-double-left: \"\\f100\";\n@fa-var-angles-right: \"\\f101\";\n@fa-var-angle-double-right: \"\\f101\";\n@fa-var-angles-up: \"\\f102\";\n@fa-var-angle-double-up: \"\\f102\";\n@fa-var-ankh: \"\\f644\";\n@fa-var-apple-whole: \"\\f5d1\";\n@fa-var-apple-alt: \"\\f5d1\";\n@fa-var-archway: \"\\f557\";\n@fa-var-arrow-down: \"\\f063\";\n@fa-var-arrow-down-1-9: \"\\f162\";\n@fa-var-sort-numeric-asc: \"\\f162\";\n@fa-var-sort-numeric-down: \"\\f162\";\n@fa-var-arrow-down-9-1: \"\\f886\";\n@fa-var-sort-numeric-desc: \"\\f886\";\n@fa-var-sort-numeric-down-alt: \"\\f886\";\n@fa-var-arrow-down-a-z: \"\\f15d\";\n@fa-var-sort-alpha-asc: \"\\f15d\";\n@fa-var-sort-alpha-down: \"\\f15d\";\n@fa-var-arrow-down-long: \"\\f175\";\n@fa-var-long-arrow-down: \"\\f175\";\n@fa-var-arrow-down-short-wide: \"\\f884\";\n@fa-var-sort-amount-desc: \"\\f884\";\n@fa-var-sort-amount-down-alt: \"\\f884\";\n@fa-var-arrow-down-wide-short: \"\\f160\";\n@fa-var-sort-amount-asc: \"\\f160\";\n@fa-var-sort-amount-down: \"\\f160\";\n@fa-var-arrow-down-z-a: \"\\f881\";\n@fa-var-sort-alpha-desc: \"\\f881\";\n@fa-var-sort-alpha-down-alt: \"\\f881\";\n@fa-var-arrow-left: \"\\f060\";\n@fa-var-arrow-left-long: \"\\f177\";\n@fa-var-long-arrow-left: \"\\f177\";\n@fa-var-arrow-pointer: \"\\f245\";\n@fa-var-mouse-pointer: \"\\f245\";\n@fa-var-arrow-right: \"\\f061\";\n@fa-var-arrow-right-arrow-left: \"\\f0ec\";\n@fa-var-exchange: \"\\f0ec\";\n@fa-var-arrow-right-from-bracket: \"\\f08b\";\n@fa-var-sign-out: \"\\f08b\";\n@fa-var-arrow-right-long: \"\\f178\";\n@fa-var-long-arrow-right: \"\\f178\";\n@fa-var-arrow-right-to-bracket: \"\\f090\";\n@fa-var-sign-in: \"\\f090\";\n@fa-var-arrow-rotate-left: \"\\f0e2\";\n@fa-var-arrow-left-rotate: \"\\f0e2\";\n@fa-var-arrow-rotate-back: \"\\f0e2\";\n@fa-var-arrow-rotate-backward: \"\\f0e2\";\n@fa-var-undo: \"\\f0e2\";\n@fa-var-arrow-rotate-right: \"\\f01e\";\n@fa-var-arrow-right-rotate: \"\\f01e\";\n@fa-var-arrow-rotate-forward: \"\\f01e\";\n@fa-var-redo: \"\\f01e\";\n@fa-var-arrow-trend-down: \"\\e097\";\n@fa-var-arrow-trend-up: \"\\e098\";\n@fa-var-arrow-turn-down: \"\\f149\";\n@fa-var-level-down: \"\\f149\";\n@fa-var-arrow-turn-up: \"\\f148\";\n@fa-var-level-up: \"\\f148\";\n@fa-var-arrow-up: \"\\f062\";\n@fa-var-arrow-up-1-9: \"\\f163\";\n@fa-var-sort-numeric-up: \"\\f163\";\n@fa-var-arrow-up-9-1: \"\\f887\";\n@fa-var-sort-numeric-up-alt: \"\\f887\";\n@fa-var-arrow-up-a-z: \"\\f15e\";\n@fa-var-sort-alpha-up: \"\\f15e\";\n@fa-var-arrow-up-from-bracket: \"\\e09a\";\n@fa-var-arrow-up-long: \"\\f176\";\n@fa-var-long-arrow-up: \"\\f176\";\n@fa-var-arrow-up-right-from-square: \"\\f08e\";\n@fa-var-external-link: \"\\f08e\";\n@fa-var-arrow-up-short-wide: \"\\f885\";\n@fa-var-sort-amount-up-alt: \"\\f885\";\n@fa-var-arrow-up-wide-short: \"\\f161\";\n@fa-var-sort-amount-up: \"\\f161\";\n@fa-var-arrow-up-z-a: \"\\f882\";\n@fa-var-sort-alpha-up-alt: \"\\f882\";\n@fa-var-arrows-left-right: \"\\f07e\";\n@fa-var-arrows-h: \"\\f07e\";\n@fa-var-arrows-rotate: \"\\f021\";\n@fa-var-refresh: \"\\f021\";\n@fa-var-sync: \"\\f021\";\n@fa-var-arrows-up-down: \"\\f07d\";\n@fa-var-arrows-v: \"\\f07d\";\n@fa-var-arrows-up-down-left-right: \"\\f047\";\n@fa-var-arrows: \"\\f047\";\n@fa-var-asterisk: \"\\2a\";\n@fa-var-at: \"\\40\";\n@fa-var-atom: \"\\f5d2\";\n@fa-var-audio-description: \"\\f29e\";\n@fa-var-austral-sign: \"\\e0a9\";\n@fa-var-award: \"\\f559\";\n@fa-var-b: \"\\42\";\n@fa-var-baby: \"\\f77c\";\n@fa-var-baby-carriage: \"\\f77d\";\n@fa-var-carriage-baby: \"\\f77d\";\n@fa-var-backward: \"\\f04a\";\n@fa-var-backward-fast: \"\\f049\";\n@fa-var-fast-backward: \"\\f049\";\n@fa-var-backward-step: \"\\f048\";\n@fa-var-step-backward: \"\\f048\";\n@fa-var-bacon: \"\\f7e5\";\n@fa-var-bacteria: \"\\e059\";\n@fa-var-bacterium: \"\\e05a\";\n@fa-var-bag-shopping: \"\\f290\";\n@fa-var-shopping-bag: \"\\f290\";\n@fa-var-bahai: \"\\f666\";\n@fa-var-baht-sign: \"\\e0ac\";\n@fa-var-ban: \"\\f05e\";\n@fa-var-cancel: \"\\f05e\";\n@fa-var-ban-smoking: \"\\f54d\";\n@fa-var-smoking-ban: \"\\f54d\";\n@fa-var-bandage: \"\\f462\";\n@fa-var-band-aid: \"\\f462\";\n@fa-var-barcode: \"\\f02a\";\n@fa-var-bars: \"\\f0c9\";\n@fa-var-navicon: \"\\f0c9\";\n@fa-var-bars-progress: \"\\f828\";\n@fa-var-tasks-alt: \"\\f828\";\n@fa-var-bars-staggered: \"\\f550\";\n@fa-var-reorder: \"\\f550\";\n@fa-var-stream: \"\\f550\";\n@fa-var-baseball: \"\\f433\";\n@fa-var-baseball-ball: \"\\f433\";\n@fa-var-baseball-bat-ball: \"\\f432\";\n@fa-var-basket-shopping: \"\\f291\";\n@fa-var-shopping-basket: \"\\f291\";\n@fa-var-basketball: \"\\f434\";\n@fa-var-basketball-ball: \"\\f434\";\n@fa-var-bath: \"\\f2cd\";\n@fa-var-bathtub: \"\\f2cd\";\n@fa-var-battery-empty: \"\\f244\";\n@fa-var-battery-0: \"\\f244\";\n@fa-var-battery-full: \"\\f240\";\n@fa-var-battery: \"\\f240\";\n@fa-var-battery-5: \"\\f240\";\n@fa-var-battery-half: \"\\f242\";\n@fa-var-battery-3: \"\\f242\";\n@fa-var-battery-quarter: \"\\f243\";\n@fa-var-battery-2: \"\\f243\";\n@fa-var-battery-three-quarters: \"\\f241\";\n@fa-var-battery-4: \"\\f241\";\n@fa-var-bed: \"\\f236\";\n@fa-var-bed-pulse: \"\\f487\";\n@fa-var-procedures: \"\\f487\";\n@fa-var-beer-mug-empty: \"\\f0fc\";\n@fa-var-beer: \"\\f0fc\";\n@fa-var-bell: \"\\f0f3\";\n@fa-var-bell-concierge: \"\\f562\";\n@fa-var-concierge-bell: \"\\f562\";\n@fa-var-bell-slash: \"\\f1f6\";\n@fa-var-bezier-curve: \"\\f55b\";\n@fa-var-bicycle: \"\\f206\";\n@fa-var-binoculars: \"\\f1e5\";\n@fa-var-biohazard: \"\\f780\";\n@fa-var-bitcoin-sign: \"\\e0b4\";\n@fa-var-blender: \"\\f517\";\n@fa-var-blender-phone: \"\\f6b6\";\n@fa-var-blog: \"\\f781\";\n@fa-var-bold: \"\\f032\";\n@fa-var-bolt: \"\\f0e7\";\n@fa-var-zap: \"\\f0e7\";\n@fa-var-bolt-lightning: \"\\e0b7\";\n@fa-var-bomb: \"\\f1e2\";\n@fa-var-bone: \"\\f5d7\";\n@fa-var-bong: \"\\f55c\";\n@fa-var-book: \"\\f02d\";\n@fa-var-book-atlas: \"\\f558\";\n@fa-var-atlas: \"\\f558\";\n@fa-var-book-bible: \"\\f647\";\n@fa-var-bible: \"\\f647\";\n@fa-var-book-journal-whills: \"\\f66a\";\n@fa-var-journal-whills: \"\\f66a\";\n@fa-var-book-medical: \"\\f7e6\";\n@fa-var-book-open: \"\\f518\";\n@fa-var-book-open-reader: \"\\f5da\";\n@fa-var-book-reader: \"\\f5da\";\n@fa-var-book-quran: \"\\f687\";\n@fa-var-quran: \"\\f687\";\n@fa-var-book-skull: \"\\f6b7\";\n@fa-var-book-dead: \"\\f6b7\";\n@fa-var-bookmark: \"\\f02e\";\n@fa-var-border-all: \"\\f84c\";\n@fa-var-border-none: \"\\f850\";\n@fa-var-border-top-left: \"\\f853\";\n@fa-var-border-style: \"\\f853\";\n@fa-var-bowling-ball: \"\\f436\";\n@fa-var-box: \"\\f466\";\n@fa-var-box-archive: \"\\f187\";\n@fa-var-archive: \"\\f187\";\n@fa-var-box-open: \"\\f49e\";\n@fa-var-box-tissue: \"\\e05b\";\n@fa-var-boxes-stacked: \"\\f468\";\n@fa-var-boxes: \"\\f468\";\n@fa-var-boxes-alt: \"\\f468\";\n@fa-var-braille: \"\\f2a1\";\n@fa-var-brain: \"\\f5dc\";\n@fa-var-brazilian-real-sign: \"\\e46c\";\n@fa-var-bread-slice: \"\\f7ec\";\n@fa-var-briefcase: \"\\f0b1\";\n@fa-var-briefcase-medical: \"\\f469\";\n@fa-var-broom: \"\\f51a\";\n@fa-var-broom-ball: \"\\f458\";\n@fa-var-quidditch: \"\\f458\";\n@fa-var-quidditch-broom-ball: \"\\f458\";\n@fa-var-brush: \"\\f55d\";\n@fa-var-bug: \"\\f188\";\n@fa-var-bug-slash: \"\\e490\";\n@fa-var-building: \"\\f1ad\";\n@fa-var-building-columns: \"\\f19c\";\n@fa-var-bank: \"\\f19c\";\n@fa-var-institution: \"\\f19c\";\n@fa-var-museum: \"\\f19c\";\n@fa-var-university: \"\\f19c\";\n@fa-var-bullhorn: \"\\f0a1\";\n@fa-var-bullseye: \"\\f140\";\n@fa-var-burger: \"\\f805\";\n@fa-var-hamburger: \"\\f805\";\n@fa-var-bus: \"\\f207\";\n@fa-var-bus-simple: \"\\f55e\";\n@fa-var-bus-alt: \"\\f55e\";\n@fa-var-business-time: \"\\f64a\";\n@fa-var-briefcase-clock: \"\\f64a\";\n@fa-var-c: \"\\43\";\n@fa-var-cake-candles: \"\\f1fd\";\n@fa-var-birthday-cake: \"\\f1fd\";\n@fa-var-cake: \"\\f1fd\";\n@fa-var-calculator: \"\\f1ec\";\n@fa-var-calendar: \"\\f133\";\n@fa-var-calendar-check: \"\\f274\";\n@fa-var-calendar-day: \"\\f783\";\n@fa-var-calendar-days: \"\\f073\";\n@fa-var-calendar-alt: \"\\f073\";\n@fa-var-calendar-minus: \"\\f272\";\n@fa-var-calendar-plus: \"\\f271\";\n@fa-var-calendar-week: \"\\f784\";\n@fa-var-calendar-xmark: \"\\f273\";\n@fa-var-calendar-times: \"\\f273\";\n@fa-var-camera: \"\\f030\";\n@fa-var-camera-alt: \"\\f030\";\n@fa-var-camera-retro: \"\\f083\";\n@fa-var-camera-rotate: \"\\e0d8\";\n@fa-var-campground: \"\\f6bb\";\n@fa-var-candy-cane: \"\\f786\";\n@fa-var-cannabis: \"\\f55f\";\n@fa-var-capsules: \"\\f46b\";\n@fa-var-car: \"\\f1b9\";\n@fa-var-automobile: \"\\f1b9\";\n@fa-var-car-battery: \"\\f5df\";\n@fa-var-battery-car: \"\\f5df\";\n@fa-var-car-crash: \"\\f5e1\";\n@fa-var-car-rear: \"\\f5de\";\n@fa-var-car-alt: \"\\f5de\";\n@fa-var-car-side: \"\\f5e4\";\n@fa-var-caravan: \"\\f8ff\";\n@fa-var-caret-down: \"\\f0d7\";\n@fa-var-caret-left: \"\\f0d9\";\n@fa-var-caret-right: \"\\f0da\";\n@fa-var-caret-up: \"\\f0d8\";\n@fa-var-carrot: \"\\f787\";\n@fa-var-cart-arrow-down: \"\\f218\";\n@fa-var-cart-flatbed: \"\\f474\";\n@fa-var-dolly-flatbed: \"\\f474\";\n@fa-var-cart-flatbed-suitcase: \"\\f59d\";\n@fa-var-luggage-cart: \"\\f59d\";\n@fa-var-cart-plus: \"\\f217\";\n@fa-var-cart-shopping: \"\\f07a\";\n@fa-var-shopping-cart: \"\\f07a\";\n@fa-var-cash-register: \"\\f788\";\n@fa-var-cat: \"\\f6be\";\n@fa-var-cedi-sign: \"\\e0df\";\n@fa-var-cent-sign: \"\\e3f5\";\n@fa-var-certificate: \"\\f0a3\";\n@fa-var-chair: \"\\f6c0\";\n@fa-var-chalkboard: \"\\f51b\";\n@fa-var-blackboard: \"\\f51b\";\n@fa-var-chalkboard-user: \"\\f51c\";\n@fa-var-chalkboard-teacher: \"\\f51c\";\n@fa-var-champagne-glasses: \"\\f79f\";\n@fa-var-glass-cheers: \"\\f79f\";\n@fa-var-charging-station: \"\\f5e7\";\n@fa-var-chart-area: \"\\f1fe\";\n@fa-var-area-chart: \"\\f1fe\";\n@fa-var-chart-bar: \"\\f080\";\n@fa-var-bar-chart: \"\\f080\";\n@fa-var-chart-column: \"\\e0e3\";\n@fa-var-chart-gantt: \"\\e0e4\";\n@fa-var-chart-line: \"\\f201\";\n@fa-var-line-chart: \"\\f201\";\n@fa-var-chart-pie: \"\\f200\";\n@fa-var-pie-chart: \"\\f200\";\n@fa-var-check: \"\\f00c\";\n@fa-var-check-double: \"\\f560\";\n@fa-var-check-to-slot: \"\\f772\";\n@fa-var-vote-yea: \"\\f772\";\n@fa-var-cheese: \"\\f7ef\";\n@fa-var-chess: \"\\f439\";\n@fa-var-chess-bishop: \"\\f43a\";\n@fa-var-chess-board: \"\\f43c\";\n@fa-var-chess-king: \"\\f43f\";\n@fa-var-chess-knight: \"\\f441\";\n@fa-var-chess-pawn: \"\\f443\";\n@fa-var-chess-queen: \"\\f445\";\n@fa-var-chess-rook: \"\\f447\";\n@fa-var-chevron-down: \"\\f078\";\n@fa-var-chevron-left: \"\\f053\";\n@fa-var-chevron-right: \"\\f054\";\n@fa-var-chevron-up: \"\\f077\";\n@fa-var-child: \"\\f1ae\";\n@fa-var-church: \"\\f51d\";\n@fa-var-circle: \"\\f111\";\n@fa-var-circle-arrow-down: \"\\f0ab\";\n@fa-var-arrow-circle-down: \"\\f0ab\";\n@fa-var-circle-arrow-left: \"\\f0a8\";\n@fa-var-arrow-circle-left: \"\\f0a8\";\n@fa-var-circle-arrow-right: \"\\f0a9\";\n@fa-var-arrow-circle-right: \"\\f0a9\";\n@fa-var-circle-arrow-up: \"\\f0aa\";\n@fa-var-arrow-circle-up: \"\\f0aa\";\n@fa-var-circle-check: \"\\f058\";\n@fa-var-check-circle: \"\\f058\";\n@fa-var-circle-chevron-down: \"\\f13a\";\n@fa-var-chevron-circle-down: \"\\f13a\";\n@fa-var-circle-chevron-left: \"\\f137\";\n@fa-var-chevron-circle-left: \"\\f137\";\n@fa-var-circle-chevron-right: \"\\f138\";\n@fa-var-chevron-circle-right: \"\\f138\";\n@fa-var-circle-chevron-up: \"\\f139\";\n@fa-var-chevron-circle-up: \"\\f139\";\n@fa-var-circle-dollar-to-slot: \"\\f4b9\";\n@fa-var-donate: \"\\f4b9\";\n@fa-var-circle-dot: \"\\f192\";\n@fa-var-dot-circle: \"\\f192\";\n@fa-var-circle-down: \"\\f358\";\n@fa-var-arrow-alt-circle-down: \"\\f358\";\n@fa-var-circle-exclamation: \"\\f06a\";\n@fa-var-exclamation-circle: \"\\f06a\";\n@fa-var-circle-h: \"\\f47e\";\n@fa-var-hospital-symbol: \"\\f47e\";\n@fa-var-circle-half-stroke: \"\\f042\";\n@fa-var-adjust: \"\\f042\";\n@fa-var-circle-info: \"\\f05a\";\n@fa-var-info-circle: \"\\f05a\";\n@fa-var-circle-left: \"\\f359\";\n@fa-var-arrow-alt-circle-left: \"\\f359\";\n@fa-var-circle-minus: \"\\f056\";\n@fa-var-minus-circle: \"\\f056\";\n@fa-var-circle-notch: \"\\f1ce\";\n@fa-var-circle-pause: \"\\f28b\";\n@fa-var-pause-circle: \"\\f28b\";\n@fa-var-circle-play: \"\\f144\";\n@fa-var-play-circle: \"\\f144\";\n@fa-var-circle-plus: \"\\f055\";\n@fa-var-plus-circle: \"\\f055\";\n@fa-var-circle-question: \"\\f059\";\n@fa-var-question-circle: \"\\f059\";\n@fa-var-circle-radiation: \"\\f7ba\";\n@fa-var-radiation-alt: \"\\f7ba\";\n@fa-var-circle-right: \"\\f35a\";\n@fa-var-arrow-alt-circle-right: \"\\f35a\";\n@fa-var-circle-stop: \"\\f28d\";\n@fa-var-stop-circle: \"\\f28d\";\n@fa-var-circle-up: \"\\f35b\";\n@fa-var-arrow-alt-circle-up: \"\\f35b\";\n@fa-var-circle-user: \"\\f2bd\";\n@fa-var-user-circle: \"\\f2bd\";\n@fa-var-circle-xmark: \"\\f057\";\n@fa-var-times-circle: \"\\f057\";\n@fa-var-xmark-circle: \"\\f057\";\n@fa-var-city: \"\\f64f\";\n@fa-var-clapperboard: \"\\e131\";\n@fa-var-clipboard: \"\\f328\";\n@fa-var-clipboard-check: \"\\f46c\";\n@fa-var-clipboard-list: \"\\f46d\";\n@fa-var-clock: \"\\f017\";\n@fa-var-clock-four: \"\\f017\";\n@fa-var-clock-rotate-left: \"\\f1da\";\n@fa-var-history: \"\\f1da\";\n@fa-var-clone: \"\\f24d\";\n@fa-var-closed-captioning: \"\\f20a\";\n@fa-var-cloud: \"\\f0c2\";\n@fa-var-cloud-arrow-down: \"\\f0ed\";\n@fa-var-cloud-download: \"\\f0ed\";\n@fa-var-cloud-download-alt: \"\\f0ed\";\n@fa-var-cloud-arrow-up: \"\\f0ee\";\n@fa-var-cloud-upload: \"\\f0ee\";\n@fa-var-cloud-upload-alt: \"\\f0ee\";\n@fa-var-cloud-meatball: \"\\f73b\";\n@fa-var-cloud-moon: \"\\f6c3\";\n@fa-var-cloud-moon-rain: \"\\f73c\";\n@fa-var-cloud-rain: \"\\f73d\";\n@fa-var-cloud-showers-heavy: \"\\f740\";\n@fa-var-cloud-sun: \"\\f6c4\";\n@fa-var-cloud-sun-rain: \"\\f743\";\n@fa-var-clover: \"\\e139\";\n@fa-var-code: \"\\f121\";\n@fa-var-code-branch: \"\\f126\";\n@fa-var-code-commit: \"\\f386\";\n@fa-var-code-compare: \"\\e13a\";\n@fa-var-code-fork: \"\\e13b\";\n@fa-var-code-merge: \"\\f387\";\n@fa-var-code-pull-request: \"\\e13c\";\n@fa-var-coins: \"\\f51e\";\n@fa-var-colon-sign: \"\\e140\";\n@fa-var-comment: \"\\f075\";\n@fa-var-comment-dollar: \"\\f651\";\n@fa-var-comment-dots: \"\\f4ad\";\n@fa-var-commenting: \"\\f4ad\";\n@fa-var-comment-medical: \"\\f7f5\";\n@fa-var-comment-slash: \"\\f4b3\";\n@fa-var-comment-sms: \"\\f7cd\";\n@fa-var-sms: \"\\f7cd\";\n@fa-var-comments: \"\\f086\";\n@fa-var-comments-dollar: \"\\f653\";\n@fa-var-compact-disc: \"\\f51f\";\n@fa-var-compass: \"\\f14e\";\n@fa-var-compass-drafting: \"\\f568\";\n@fa-var-drafting-compass: \"\\f568\";\n@fa-var-compress: \"\\f066\";\n@fa-var-computer-mouse: \"\\f8cc\";\n@fa-var-mouse: \"\\f8cc\";\n@fa-var-cookie: \"\\f563\";\n@fa-var-cookie-bite: \"\\f564\";\n@fa-var-copy: \"\\f0c5\";\n@fa-var-copyright: \"\\f1f9\";\n@fa-var-couch: \"\\f4b8\";\n@fa-var-credit-card: \"\\f09d\";\n@fa-var-credit-card-alt: \"\\f09d\";\n@fa-var-crop: \"\\f125\";\n@fa-var-crop-simple: \"\\f565\";\n@fa-var-crop-alt: \"\\f565\";\n@fa-var-cross: \"\\f654\";\n@fa-var-crosshairs: \"\\f05b\";\n@fa-var-crow: \"\\f520\";\n@fa-var-crown: \"\\f521\";\n@fa-var-crutch: \"\\f7f7\";\n@fa-var-cruzeiro-sign: \"\\e152\";\n@fa-var-cube: \"\\f1b2\";\n@fa-var-cubes: \"\\f1b3\";\n@fa-var-d: \"\\44\";\n@fa-var-database: \"\\f1c0\";\n@fa-var-delete-left: \"\\f55a\";\n@fa-var-backspace: \"\\f55a\";\n@fa-var-democrat: \"\\f747\";\n@fa-var-desktop: \"\\f390\";\n@fa-var-desktop-alt: \"\\f390\";\n@fa-var-dharmachakra: \"\\f655\";\n@fa-var-diagram-next: \"\\e476\";\n@fa-var-diagram-predecessor: \"\\e477\";\n@fa-var-diagram-project: \"\\f542\";\n@fa-var-project-diagram: \"\\f542\";\n@fa-var-diagram-successor: \"\\e47a\";\n@fa-var-diamond: \"\\f219\";\n@fa-var-diamond-turn-right: \"\\f5eb\";\n@fa-var-directions: \"\\f5eb\";\n@fa-var-dice: \"\\f522\";\n@fa-var-dice-d20: \"\\f6cf\";\n@fa-var-dice-d6: \"\\f6d1\";\n@fa-var-dice-five: \"\\f523\";\n@fa-var-dice-four: \"\\f524\";\n@fa-var-dice-one: \"\\f525\";\n@fa-var-dice-six: \"\\f526\";\n@fa-var-dice-three: \"\\f527\";\n@fa-var-dice-two: \"\\f528\";\n@fa-var-disease: \"\\f7fa\";\n@fa-var-divide: \"\\f529\";\n@fa-var-dna: \"\\f471\";\n@fa-var-dog: \"\\f6d3\";\n@fa-var-dollar-sign: \"\\24\";\n@fa-var-dollar: \"\\24\";\n@fa-var-usd: \"\\24\";\n@fa-var-dolly: \"\\f472\";\n@fa-var-dolly-box: \"\\f472\";\n@fa-var-dong-sign: \"\\e169\";\n@fa-var-door-closed: \"\\f52a\";\n@fa-var-door-open: \"\\f52b\";\n@fa-var-dove: \"\\f4ba\";\n@fa-var-down-left-and-up-right-to-center: \"\\f422\";\n@fa-var-compress-alt: \"\\f422\";\n@fa-var-down-long: \"\\f309\";\n@fa-var-long-arrow-alt-down: \"\\f309\";\n@fa-var-download: \"\\f019\";\n@fa-var-dragon: \"\\f6d5\";\n@fa-var-draw-polygon: \"\\f5ee\";\n@fa-var-droplet: \"\\f043\";\n@fa-var-tint: \"\\f043\";\n@fa-var-droplet-slash: \"\\f5c7\";\n@fa-var-tint-slash: \"\\f5c7\";\n@fa-var-drum: \"\\f569\";\n@fa-var-drum-steelpan: \"\\f56a\";\n@fa-var-drumstick-bite: \"\\f6d7\";\n@fa-var-dumbbell: \"\\f44b\";\n@fa-var-dumpster: \"\\f793\";\n@fa-var-dumpster-fire: \"\\f794\";\n@fa-var-dungeon: \"\\f6d9\";\n@fa-var-e: \"\\45\";\n@fa-var-ear-deaf: \"\\f2a4\";\n@fa-var-deaf: \"\\f2a4\";\n@fa-var-deafness: \"\\f2a4\";\n@fa-var-hard-of-hearing: \"\\f2a4\";\n@fa-var-ear-listen: \"\\f2a2\";\n@fa-var-assistive-listening-systems: \"\\f2a2\";\n@fa-var-earth-africa: \"\\f57c\";\n@fa-var-globe-africa: \"\\f57c\";\n@fa-var-earth-americas: \"\\f57d\";\n@fa-var-earth: \"\\f57d\";\n@fa-var-earth-america: \"\\f57d\";\n@fa-var-globe-americas: \"\\f57d\";\n@fa-var-earth-asia: \"\\f57e\";\n@fa-var-globe-asia: \"\\f57e\";\n@fa-var-earth-europe: \"\\f7a2\";\n@fa-var-globe-europe: \"\\f7a2\";\n@fa-var-earth-oceania: \"\\e47b\";\n@fa-var-globe-oceania: \"\\e47b\";\n@fa-var-egg: \"\\f7fb\";\n@fa-var-eject: \"\\f052\";\n@fa-var-elevator: \"\\e16d\";\n@fa-var-ellipsis: \"\\f141\";\n@fa-var-ellipsis-h: \"\\f141\";\n@fa-var-ellipsis-vertical: \"\\f142\";\n@fa-var-ellipsis-v: \"\\f142\";\n@fa-var-envelope: \"\\f0e0\";\n@fa-var-envelope-open: \"\\f2b6\";\n@fa-var-envelope-open-text: \"\\f658\";\n@fa-var-envelopes-bulk: \"\\f674\";\n@fa-var-mail-bulk: \"\\f674\";\n@fa-var-equals: \"\\3d\";\n@fa-var-eraser: \"\\f12d\";\n@fa-var-ethernet: \"\\f796\";\n@fa-var-euro-sign: \"\\f153\";\n@fa-var-eur: \"\\f153\";\n@fa-var-euro: \"\\f153\";\n@fa-var-exclamation: \"\\21\";\n@fa-var-expand: \"\\f065\";\n@fa-var-eye: \"\\f06e\";\n@fa-var-eye-dropper: \"\\f1fb\";\n@fa-var-eye-dropper-empty: \"\\f1fb\";\n@fa-var-eyedropper: \"\\f1fb\";\n@fa-var-eye-low-vision: \"\\f2a8\";\n@fa-var-low-vision: \"\\f2a8\";\n@fa-var-eye-slash: \"\\f070\";\n@fa-var-f: \"\\46\";\n@fa-var-face-angry: \"\\f556\";\n@fa-var-angry: \"\\f556\";\n@fa-var-face-dizzy: \"\\f567\";\n@fa-var-dizzy: \"\\f567\";\n@fa-var-face-flushed: \"\\f579\";\n@fa-var-flushed: \"\\f579\";\n@fa-var-face-frown: \"\\f119\";\n@fa-var-frown: \"\\f119\";\n@fa-var-face-frown-open: \"\\f57a\";\n@fa-var-frown-open: \"\\f57a\";\n@fa-var-face-grimace: \"\\f57f\";\n@fa-var-grimace: \"\\f57f\";\n@fa-var-face-grin: \"\\f580\";\n@fa-var-grin: \"\\f580\";\n@fa-var-face-grin-beam: \"\\f582\";\n@fa-var-grin-beam: \"\\f582\";\n@fa-var-face-grin-beam-sweat: \"\\f583\";\n@fa-var-grin-beam-sweat: \"\\f583\";\n@fa-var-face-grin-hearts: \"\\f584\";\n@fa-var-grin-hearts: \"\\f584\";\n@fa-var-face-grin-squint: \"\\f585\";\n@fa-var-grin-squint: \"\\f585\";\n@fa-var-face-grin-squint-tears: \"\\f586\";\n@fa-var-grin-squint-tears: \"\\f586\";\n@fa-var-face-grin-stars: \"\\f587\";\n@fa-var-grin-stars: \"\\f587\";\n@fa-var-face-grin-tears: \"\\f588\";\n@fa-var-grin-tears: \"\\f588\";\n@fa-var-face-grin-tongue: \"\\f589\";\n@fa-var-grin-tongue: \"\\f589\";\n@fa-var-face-grin-tongue-squint: \"\\f58a\";\n@fa-var-grin-tongue-squint: \"\\f58a\";\n@fa-var-face-grin-tongue-wink: \"\\f58b\";\n@fa-var-grin-tongue-wink: \"\\f58b\";\n@fa-var-face-grin-wide: \"\\f581\";\n@fa-var-grin-alt: \"\\f581\";\n@fa-var-face-grin-wink: \"\\f58c\";\n@fa-var-grin-wink: \"\\f58c\";\n@fa-var-face-kiss: \"\\f596\";\n@fa-var-kiss: \"\\f596\";\n@fa-var-face-kiss-beam: \"\\f597\";\n@fa-var-kiss-beam: \"\\f597\";\n@fa-var-face-kiss-wink-heart: \"\\f598\";\n@fa-var-kiss-wink-heart: \"\\f598\";\n@fa-var-face-laugh: \"\\f599\";\n@fa-var-laugh: \"\\f599\";\n@fa-var-face-laugh-beam: \"\\f59a\";\n@fa-var-laugh-beam: \"\\f59a\";\n@fa-var-face-laugh-squint: \"\\f59b\";\n@fa-var-laugh-squint: \"\\f59b\";\n@fa-var-face-laugh-wink: \"\\f59c\";\n@fa-var-laugh-wink: \"\\f59c\";\n@fa-var-face-meh: \"\\f11a\";\n@fa-var-meh: \"\\f11a\";\n@fa-var-face-meh-blank: \"\\f5a4\";\n@fa-var-meh-blank: \"\\f5a4\";\n@fa-var-face-rolling-eyes: \"\\f5a5\";\n@fa-var-meh-rolling-eyes: \"\\f5a5\";\n@fa-var-face-sad-cry: \"\\f5b3\";\n@fa-var-sad-cry: \"\\f5b3\";\n@fa-var-face-sad-tear: \"\\f5b4\";\n@fa-var-sad-tear: \"\\f5b4\";\n@fa-var-face-smile: \"\\f118\";\n@fa-var-smile: \"\\f118\";\n@fa-var-face-smile-beam: \"\\f5b8\";\n@fa-var-smile-beam: \"\\f5b8\";\n@fa-var-face-smile-wink: \"\\f4da\";\n@fa-var-smile-wink: \"\\f4da\";\n@fa-var-face-surprise: \"\\f5c2\";\n@fa-var-surprise: \"\\f5c2\";\n@fa-var-face-tired: \"\\f5c8\";\n@fa-var-tired: \"\\f5c8\";\n@fa-var-fan: \"\\f863\";\n@fa-var-faucet: \"\\e005\";\n@fa-var-fax: \"\\f1ac\";\n@fa-var-feather: \"\\f52d\";\n@fa-var-feather-pointed: \"\\f56b\";\n@fa-var-feather-alt: \"\\f56b\";\n@fa-var-file: \"\\f15b\";\n@fa-var-file-arrow-down: \"\\f56d\";\n@fa-var-file-download: \"\\f56d\";\n@fa-var-file-arrow-up: \"\\f574\";\n@fa-var-file-upload: \"\\f574\";\n@fa-var-file-audio: \"\\f1c7\";\n@fa-var-file-code: \"\\f1c9\";\n@fa-var-file-contract: \"\\f56c\";\n@fa-var-file-csv: \"\\f6dd\";\n@fa-var-file-excel: \"\\f1c3\";\n@fa-var-file-export: \"\\f56e\";\n@fa-var-arrow-right-from-file: \"\\f56e\";\n@fa-var-file-image: \"\\f1c5\";\n@fa-var-file-import: \"\\f56f\";\n@fa-var-arrow-right-to-file: \"\\f56f\";\n@fa-var-file-invoice: \"\\f570\";\n@fa-var-file-invoice-dollar: \"\\f571\";\n@fa-var-file-lines: \"\\f15c\";\n@fa-var-file-alt: \"\\f15c\";\n@fa-var-file-text: \"\\f15c\";\n@fa-var-file-medical: \"\\f477\";\n@fa-var-file-pdf: \"\\f1c1\";\n@fa-var-file-powerpoint: \"\\f1c4\";\n@fa-var-file-prescription: \"\\f572\";\n@fa-var-file-signature: \"\\f573\";\n@fa-var-file-video: \"\\f1c8\";\n@fa-var-file-waveform: \"\\f478\";\n@fa-var-file-medical-alt: \"\\f478\";\n@fa-var-file-word: \"\\f1c2\";\n@fa-var-file-zipper: \"\\f1c6\";\n@fa-var-file-archive: \"\\f1c6\";\n@fa-var-fill: \"\\f575\";\n@fa-var-fill-drip: \"\\f576\";\n@fa-var-film: \"\\f008\";\n@fa-var-filter: \"\\f0b0\";\n@fa-var-filter-circle-dollar: \"\\f662\";\n@fa-var-funnel-dollar: \"\\f662\";\n@fa-var-filter-circle-xmark: \"\\e17b\";\n@fa-var-fingerprint: \"\\f577\";\n@fa-var-fire: \"\\f06d\";\n@fa-var-fire-extinguisher: \"\\f134\";\n@fa-var-fire-flame-curved: \"\\f7e4\";\n@fa-var-fire-alt: \"\\f7e4\";\n@fa-var-fire-flame-simple: \"\\f46a\";\n@fa-var-burn: \"\\f46a\";\n@fa-var-fish: \"\\f578\";\n@fa-var-flag: \"\\f024\";\n@fa-var-flag-checkered: \"\\f11e\";\n@fa-var-flag-usa: \"\\f74d\";\n@fa-var-flask: \"\\f0c3\";\n@fa-var-floppy-disk: \"\\f0c7\";\n@fa-var-save: \"\\f0c7\";\n@fa-var-florin-sign: \"\\e184\";\n@fa-var-folder: \"\\f07b\";\n@fa-var-folder-minus: \"\\f65d\";\n@fa-var-folder-open: \"\\f07c\";\n@fa-var-folder-plus: \"\\f65e\";\n@fa-var-folder-tree: \"\\f802\";\n@fa-var-font: \"\\f031\";\n@fa-var-football: \"\\f44e\";\n@fa-var-football-ball: \"\\f44e\";\n@fa-var-forward: \"\\f04e\";\n@fa-var-forward-fast: \"\\f050\";\n@fa-var-fast-forward: \"\\f050\";\n@fa-var-forward-step: \"\\f051\";\n@fa-var-step-forward: \"\\f051\";\n@fa-var-franc-sign: \"\\e18f\";\n@fa-var-frog: \"\\f52e\";\n@fa-var-futbol: \"\\f1e3\";\n@fa-var-futbol-ball: \"\\f1e3\";\n@fa-var-soccer-ball: \"\\f1e3\";\n@fa-var-g: \"\\47\";\n@fa-var-gamepad: \"\\f11b\";\n@fa-var-gas-pump: \"\\f52f\";\n@fa-var-gauge: \"\\f624\";\n@fa-var-dashboard: \"\\f624\";\n@fa-var-gauge-med: \"\\f624\";\n@fa-var-tachometer-alt-average: \"\\f624\";\n@fa-var-gauge-high: \"\\f625\";\n@fa-var-tachometer-alt: \"\\f625\";\n@fa-var-tachometer-alt-fast: \"\\f625\";\n@fa-var-gauge-simple: \"\\f629\";\n@fa-var-gauge-simple-med: \"\\f629\";\n@fa-var-tachometer-average: \"\\f629\";\n@fa-var-gauge-simple-high: \"\\f62a\";\n@fa-var-tachometer: \"\\f62a\";\n@fa-var-tachometer-fast: \"\\f62a\";\n@fa-var-gavel: \"\\f0e3\";\n@fa-var-legal: \"\\f0e3\";\n@fa-var-gear: \"\\f013\";\n@fa-var-cog: \"\\f013\";\n@fa-var-gears: \"\\f085\";\n@fa-var-cogs: \"\\f085\";\n@fa-var-gem: \"\\f3a5\";\n@fa-var-genderless: \"\\f22d\";\n@fa-var-ghost: \"\\f6e2\";\n@fa-var-gift: \"\\f06b\";\n@fa-var-gifts: \"\\f79c\";\n@fa-var-glasses: \"\\f530\";\n@fa-var-globe: \"\\f0ac\";\n@fa-var-golf-ball-tee: \"\\f450\";\n@fa-var-golf-ball: \"\\f450\";\n@fa-var-gopuram: \"\\f664\";\n@fa-var-graduation-cap: \"\\f19d\";\n@fa-var-mortar-board: \"\\f19d\";\n@fa-var-greater-than: \"\\3e\";\n@fa-var-greater-than-equal: \"\\f532\";\n@fa-var-grip: \"\\f58d\";\n@fa-var-grip-horizontal: \"\\f58d\";\n@fa-var-grip-lines: \"\\f7a4\";\n@fa-var-grip-lines-vertical: \"\\f7a5\";\n@fa-var-grip-vertical: \"\\f58e\";\n@fa-var-guarani-sign: \"\\e19a\";\n@fa-var-guitar: \"\\f7a6\";\n@fa-var-gun: \"\\e19b\";\n@fa-var-h: \"\\48\";\n@fa-var-hammer: \"\\f6e3\";\n@fa-var-hamsa: \"\\f665\";\n@fa-var-hand: \"\\f256\";\n@fa-var-hand-paper: \"\\f256\";\n@fa-var-hand-back-fist: \"\\f255\";\n@fa-var-hand-rock: \"\\f255\";\n@fa-var-hand-dots: \"\\f461\";\n@fa-var-allergies: \"\\f461\";\n@fa-var-hand-fist: \"\\f6de\";\n@fa-var-fist-raised: \"\\f6de\";\n@fa-var-hand-holding: \"\\f4bd\";\n@fa-var-hand-holding-dollar: \"\\f4c0\";\n@fa-var-hand-holding-usd: \"\\f4c0\";\n@fa-var-hand-holding-droplet: \"\\f4c1\";\n@fa-var-hand-holding-water: \"\\f4c1\";\n@fa-var-hand-holding-heart: \"\\f4be\";\n@fa-var-hand-holding-medical: \"\\e05c\";\n@fa-var-hand-lizard: \"\\f258\";\n@fa-var-hand-middle-finger: \"\\f806\";\n@fa-var-hand-peace: \"\\f25b\";\n@fa-var-hand-point-down: \"\\f0a7\";\n@fa-var-hand-point-left: \"\\f0a5\";\n@fa-var-hand-point-right: \"\\f0a4\";\n@fa-var-hand-point-up: \"\\f0a6\";\n@fa-var-hand-pointer: \"\\f25a\";\n@fa-var-hand-scissors: \"\\f257\";\n@fa-var-hand-sparkles: \"\\e05d\";\n@fa-var-hand-spock: \"\\f259\";\n@fa-var-hands: \"\\f2a7\";\n@fa-var-sign-language: \"\\f2a7\";\n@fa-var-signing: \"\\f2a7\";\n@fa-var-hands-asl-interpreting: \"\\f2a3\";\n@fa-var-american-sign-language-interpreting: \"\\f2a3\";\n@fa-var-asl-interpreting: \"\\f2a3\";\n@fa-var-hands-american-sign-language-interpreting: \"\\f2a3\";\n@fa-var-hands-bubbles: \"\\e05e\";\n@fa-var-hands-wash: \"\\e05e\";\n@fa-var-hands-clapping: \"\\e1a8\";\n@fa-var-hands-holding: \"\\f4c2\";\n@fa-var-hands-praying: \"\\f684\";\n@fa-var-praying-hands: \"\\f684\";\n@fa-var-handshake: \"\\f2b5\";\n@fa-var-handshake-angle: \"\\f4c4\";\n@fa-var-hands-helping: \"\\f4c4\";\n@fa-var-handshake-simple-slash: \"\\e05f\";\n@fa-var-handshake-alt-slash: \"\\e05f\";\n@fa-var-handshake-slash: \"\\e060\";\n@fa-var-hanukiah: \"\\f6e6\";\n@fa-var-hard-drive: \"\\f0a0\";\n@fa-var-hdd: \"\\f0a0\";\n@fa-var-hashtag: \"\\23\";\n@fa-var-hat-cowboy: \"\\f8c0\";\n@fa-var-hat-cowboy-side: \"\\f8c1\";\n@fa-var-hat-wizard: \"\\f6e8\";\n@fa-var-head-side-cough: \"\\e061\";\n@fa-var-head-side-cough-slash: \"\\e062\";\n@fa-var-head-side-mask: \"\\e063\";\n@fa-var-head-side-virus: \"\\e064\";\n@fa-var-heading: \"\\f1dc\";\n@fa-var-header: \"\\f1dc\";\n@fa-var-headphones: \"\\f025\";\n@fa-var-headphones-simple: \"\\f58f\";\n@fa-var-headphones-alt: \"\\f58f\";\n@fa-var-headset: \"\\f590\";\n@fa-var-heart: \"\\f004\";\n@fa-var-heart-crack: \"\\f7a9\";\n@fa-var-heart-broken: \"\\f7a9\";\n@fa-var-heart-pulse: \"\\f21e\";\n@fa-var-heartbeat: \"\\f21e\";\n@fa-var-helicopter: \"\\f533\";\n@fa-var-helmet-safety: \"\\f807\";\n@fa-var-hard-hat: \"\\f807\";\n@fa-var-hat-hard: \"\\f807\";\n@fa-var-highlighter: \"\\f591\";\n@fa-var-hippo: \"\\f6ed\";\n@fa-var-hockey-puck: \"\\f453\";\n@fa-var-holly-berry: \"\\f7aa\";\n@fa-var-horse: \"\\f6f0\";\n@fa-var-horse-head: \"\\f7ab\";\n@fa-var-hospital: \"\\f0f8\";\n@fa-var-hospital-alt: \"\\f0f8\";\n@fa-var-hospital-wide: \"\\f0f8\";\n@fa-var-hospital-user: \"\\f80d\";\n@fa-var-hot-tub-person: \"\\f593\";\n@fa-var-hot-tub: \"\\f593\";\n@fa-var-hotdog: \"\\f80f\";\n@fa-var-hotel: \"\\f594\";\n@fa-var-hourglass: \"\\f254\";\n@fa-var-hourglass-2: \"\\f254\";\n@fa-var-hourglass-half: \"\\f254\";\n@fa-var-hourglass-empty: \"\\f252\";\n@fa-var-hourglass-end: \"\\f253\";\n@fa-var-hourglass-3: \"\\f253\";\n@fa-var-hourglass-start: \"\\f251\";\n@fa-var-hourglass-1: \"\\f251\";\n@fa-var-house: \"\\f015\";\n@fa-var-home: \"\\f015\";\n@fa-var-home-alt: \"\\f015\";\n@fa-var-home-lg-alt: \"\\f015\";\n@fa-var-house-chimney: \"\\e3af\";\n@fa-var-home-lg: \"\\e3af\";\n@fa-var-house-chimney-crack: \"\\f6f1\";\n@fa-var-house-damage: \"\\f6f1\";\n@fa-var-house-chimney-medical: \"\\f7f2\";\n@fa-var-clinic-medical: \"\\f7f2\";\n@fa-var-house-chimney-user: \"\\e065\";\n@fa-var-house-chimney-window: \"\\e00d\";\n@fa-var-house-crack: \"\\e3b1\";\n@fa-var-house-laptop: \"\\e066\";\n@fa-var-laptop-house: \"\\e066\";\n@fa-var-house-medical: \"\\e3b2\";\n@fa-var-house-user: \"\\e1b0\";\n@fa-var-home-user: \"\\e1b0\";\n@fa-var-hryvnia-sign: \"\\f6f2\";\n@fa-var-hryvnia: \"\\f6f2\";\n@fa-var-i: \"\\49\";\n@fa-var-i-cursor: \"\\f246\";\n@fa-var-ice-cream: \"\\f810\";\n@fa-var-icicles: \"\\f7ad\";\n@fa-var-icons: \"\\f86d\";\n@fa-var-heart-music-camera-bolt: \"\\f86d\";\n@fa-var-id-badge: \"\\f2c1\";\n@fa-var-id-card: \"\\f2c2\";\n@fa-var-drivers-license: \"\\f2c2\";\n@fa-var-id-card-clip: \"\\f47f\";\n@fa-var-id-card-alt: \"\\f47f\";\n@fa-var-igloo: \"\\f7ae\";\n@fa-var-image: \"\\f03e\";\n@fa-var-image-portrait: \"\\f3e0\";\n@fa-var-portrait: \"\\f3e0\";\n@fa-var-images: \"\\f302\";\n@fa-var-inbox: \"\\f01c\";\n@fa-var-indent: \"\\f03c\";\n@fa-var-indian-rupee-sign: \"\\e1bc\";\n@fa-var-indian-rupee: \"\\e1bc\";\n@fa-var-inr: \"\\e1bc\";\n@fa-var-industry: \"\\f275\";\n@fa-var-infinity: \"\\f534\";\n@fa-var-info: \"\\f129\";\n@fa-var-italic: \"\\f033\";\n@fa-var-j: \"\\4a\";\n@fa-var-jedi: \"\\f669\";\n@fa-var-jet-fighter: \"\\f0fb\";\n@fa-var-fighter-jet: \"\\f0fb\";\n@fa-var-joint: \"\\f595\";\n@fa-var-k: \"\\4b\";\n@fa-var-kaaba: \"\\f66b\";\n@fa-var-key: \"\\f084\";\n@fa-var-keyboard: \"\\f11c\";\n@fa-var-khanda: \"\\f66d\";\n@fa-var-kip-sign: \"\\e1c4\";\n@fa-var-kit-medical: \"\\f479\";\n@fa-var-first-aid: \"\\f479\";\n@fa-var-kiwi-bird: \"\\f535\";\n@fa-var-l: \"\\4c\";\n@fa-var-landmark: \"\\f66f\";\n@fa-var-language: \"\\f1ab\";\n@fa-var-laptop: \"\\f109\";\n@fa-var-laptop-code: \"\\f5fc\";\n@fa-var-laptop-medical: \"\\f812\";\n@fa-var-lari-sign: \"\\e1c8\";\n@fa-var-layer-group: \"\\f5fd\";\n@fa-var-leaf: \"\\f06c\";\n@fa-var-left-long: \"\\f30a\";\n@fa-var-long-arrow-alt-left: \"\\f30a\";\n@fa-var-left-right: \"\\f337\";\n@fa-var-arrows-alt-h: \"\\f337\";\n@fa-var-lemon: \"\\f094\";\n@fa-var-less-than: \"\\3c\";\n@fa-var-less-than-equal: \"\\f537\";\n@fa-var-life-ring: \"\\f1cd\";\n@fa-var-lightbulb: \"\\f0eb\";\n@fa-var-link: \"\\f0c1\";\n@fa-var-chain: \"\\f0c1\";\n@fa-var-link-slash: \"\\f127\";\n@fa-var-chain-broken: \"\\f127\";\n@fa-var-chain-slash: \"\\f127\";\n@fa-var-unlink: \"\\f127\";\n@fa-var-lira-sign: \"\\f195\";\n@fa-var-list: \"\\f03a\";\n@fa-var-list-squares: \"\\f03a\";\n@fa-var-list-check: \"\\f0ae\";\n@fa-var-tasks: \"\\f0ae\";\n@fa-var-list-ol: \"\\f0cb\";\n@fa-var-list-1-2: \"\\f0cb\";\n@fa-var-list-numeric: \"\\f0cb\";\n@fa-var-list-ul: \"\\f0ca\";\n@fa-var-list-dots: \"\\f0ca\";\n@fa-var-litecoin-sign: \"\\e1d3\";\n@fa-var-location-arrow: \"\\f124\";\n@fa-var-location-crosshairs: \"\\f601\";\n@fa-var-location: \"\\f601\";\n@fa-var-location-dot: \"\\f3c5\";\n@fa-var-map-marker-alt: \"\\f3c5\";\n@fa-var-location-pin: \"\\f041\";\n@fa-var-map-marker: \"\\f041\";\n@fa-var-lock: \"\\f023\";\n@fa-var-lock-open: \"\\f3c1\";\n@fa-var-lungs: \"\\f604\";\n@fa-var-lungs-virus: \"\\e067\";\n@fa-var-m: \"\\4d\";\n@fa-var-magnet: \"\\f076\";\n@fa-var-magnifying-glass: \"\\f002\";\n@fa-var-search: \"\\f002\";\n@fa-var-magnifying-glass-dollar: \"\\f688\";\n@fa-var-search-dollar: \"\\f688\";\n@fa-var-magnifying-glass-location: \"\\f689\";\n@fa-var-search-location: \"\\f689\";\n@fa-var-magnifying-glass-minus: \"\\f010\";\n@fa-var-search-minus: \"\\f010\";\n@fa-var-magnifying-glass-plus: \"\\f00e\";\n@fa-var-search-plus: \"\\f00e\";\n@fa-var-manat-sign: \"\\e1d5\";\n@fa-var-map: \"\\f279\";\n@fa-var-map-location: \"\\f59f\";\n@fa-var-map-marked: \"\\f59f\";\n@fa-var-map-location-dot: \"\\f5a0\";\n@fa-var-map-marked-alt: \"\\f5a0\";\n@fa-var-map-pin: \"\\f276\";\n@fa-var-marker: \"\\f5a1\";\n@fa-var-mars: \"\\f222\";\n@fa-var-mars-and-venus: \"\\f224\";\n@fa-var-mars-double: \"\\f227\";\n@fa-var-mars-stroke: \"\\f229\";\n@fa-var-mars-stroke-right: \"\\f22b\";\n@fa-var-mars-stroke-h: \"\\f22b\";\n@fa-var-mars-stroke-up: \"\\f22a\";\n@fa-var-mars-stroke-v: \"\\f22a\";\n@fa-var-martini-glass: \"\\f57b\";\n@fa-var-glass-martini-alt: \"\\f57b\";\n@fa-var-martini-glass-citrus: \"\\f561\";\n@fa-var-cocktail: \"\\f561\";\n@fa-var-martini-glass-empty: \"\\f000\";\n@fa-var-glass-martini: \"\\f000\";\n@fa-var-mask: \"\\f6fa\";\n@fa-var-mask-face: \"\\e1d7\";\n@fa-var-masks-theater: \"\\f630\";\n@fa-var-theater-masks: \"\\f630\";\n@fa-var-maximize: \"\\f31e\";\n@fa-var-expand-arrows-alt: \"\\f31e\";\n@fa-var-medal: \"\\f5a2\";\n@fa-var-memory: \"\\f538\";\n@fa-var-menorah: \"\\f676\";\n@fa-var-mercury: \"\\f223\";\n@fa-var-message: \"\\f27a\";\n@fa-var-comment-alt: \"\\f27a\";\n@fa-var-meteor: \"\\f753\";\n@fa-var-microchip: \"\\f2db\";\n@fa-var-microphone: \"\\f130\";\n@fa-var-microphone-lines: \"\\f3c9\";\n@fa-var-microphone-alt: \"\\f3c9\";\n@fa-var-microphone-lines-slash: \"\\f539\";\n@fa-var-microphone-alt-slash: \"\\f539\";\n@fa-var-microphone-slash: \"\\f131\";\n@fa-var-microscope: \"\\f610\";\n@fa-var-mill-sign: \"\\e1ed\";\n@fa-var-minimize: \"\\f78c\";\n@fa-var-compress-arrows-alt: \"\\f78c\";\n@fa-var-minus: \"\\f068\";\n@fa-var-subtract: \"\\f068\";\n@fa-var-mitten: \"\\f7b5\";\n@fa-var-mobile: \"\\f3ce\";\n@fa-var-mobile-android: \"\\f3ce\";\n@fa-var-mobile-phone: \"\\f3ce\";\n@fa-var-mobile-button: \"\\f10b\";\n@fa-var-mobile-screen-button: \"\\f3cd\";\n@fa-var-mobile-alt: \"\\f3cd\";\n@fa-var-money-bill: \"\\f0d6\";\n@fa-var-money-bill-1: \"\\f3d1\";\n@fa-var-money-bill-alt: \"\\f3d1\";\n@fa-var-money-bill-1-wave: \"\\f53b\";\n@fa-var-money-bill-wave-alt: \"\\f53b\";\n@fa-var-money-bill-wave: \"\\f53a\";\n@fa-var-money-check: \"\\f53c\";\n@fa-var-money-check-dollar: \"\\f53d\";\n@fa-var-money-check-alt: \"\\f53d\";\n@fa-var-monument: \"\\f5a6\";\n@fa-var-moon: \"\\f186\";\n@fa-var-mortar-pestle: \"\\f5a7\";\n@fa-var-mosque: \"\\f678\";\n@fa-var-motorcycle: \"\\f21c\";\n@fa-var-mountain: \"\\f6fc\";\n@fa-var-mug-hot: \"\\f7b6\";\n@fa-var-mug-saucer: \"\\f0f4\";\n@fa-var-coffee: \"\\f0f4\";\n@fa-var-music: \"\\f001\";\n@fa-var-n: \"\\4e\";\n@fa-var-naira-sign: \"\\e1f6\";\n@fa-var-network-wired: \"\\f6ff\";\n@fa-var-neuter: \"\\f22c\";\n@fa-var-newspaper: \"\\f1ea\";\n@fa-var-not-equal: \"\\f53e\";\n@fa-var-note-sticky: \"\\f249\";\n@fa-var-sticky-note: \"\\f249\";\n@fa-var-notes-medical: \"\\f481\";\n@fa-var-o: \"\\4f\";\n@fa-var-object-group: \"\\f247\";\n@fa-var-object-ungroup: \"\\f248\";\n@fa-var-oil-can: \"\\f613\";\n@fa-var-om: \"\\f679\";\n@fa-var-otter: \"\\f700\";\n@fa-var-outdent: \"\\f03b\";\n@fa-var-dedent: \"\\f03b\";\n@fa-var-p: \"\\50\";\n@fa-var-pager: \"\\f815\";\n@fa-var-paint-roller: \"\\f5aa\";\n@fa-var-paintbrush: \"\\f1fc\";\n@fa-var-paint-brush: \"\\f1fc\";\n@fa-var-palette: \"\\f53f\";\n@fa-var-pallet: \"\\f482\";\n@fa-var-panorama: \"\\e209\";\n@fa-var-paper-plane: \"\\f1d8\";\n@fa-var-paperclip: \"\\f0c6\";\n@fa-var-parachute-box: \"\\f4cd\";\n@fa-var-paragraph: \"\\f1dd\";\n@fa-var-passport: \"\\f5ab\";\n@fa-var-paste: \"\\f0ea\";\n@fa-var-file-clipboard: \"\\f0ea\";\n@fa-var-pause: \"\\f04c\";\n@fa-var-paw: \"\\f1b0\";\n@fa-var-peace: \"\\f67c\";\n@fa-var-pen: \"\\f304\";\n@fa-var-pen-clip: \"\\f305\";\n@fa-var-pen-alt: \"\\f305\";\n@fa-var-pen-fancy: \"\\f5ac\";\n@fa-var-pen-nib: \"\\f5ad\";\n@fa-var-pen-ruler: \"\\f5ae\";\n@fa-var-pencil-ruler: \"\\f5ae\";\n@fa-var-pen-to-square: \"\\f044\";\n@fa-var-edit: \"\\f044\";\n@fa-var-pencil: \"\\f303\";\n@fa-var-pencil-alt: \"\\f303\";\n@fa-var-people-arrows-left-right: \"\\e068\";\n@fa-var-people-arrows: \"\\e068\";\n@fa-var-people-carry-box: \"\\f4ce\";\n@fa-var-people-carry: \"\\f4ce\";\n@fa-var-pepper-hot: \"\\f816\";\n@fa-var-percent: \"\\25\";\n@fa-var-percentage: \"\\25\";\n@fa-var-person: \"\\f183\";\n@fa-var-male: \"\\f183\";\n@fa-var-person-biking: \"\\f84a\";\n@fa-var-biking: \"\\f84a\";\n@fa-var-person-booth: \"\\f756\";\n@fa-var-person-dots-from-line: \"\\f470\";\n@fa-var-diagnoses: \"\\f470\";\n@fa-var-person-dress: \"\\f182\";\n@fa-var-female: \"\\f182\";\n@fa-var-person-hiking: \"\\f6ec\";\n@fa-var-hiking: \"\\f6ec\";\n@fa-var-person-praying: \"\\f683\";\n@fa-var-pray: \"\\f683\";\n@fa-var-person-running: \"\\f70c\";\n@fa-var-running: \"\\f70c\";\n@fa-var-person-skating: \"\\f7c5\";\n@fa-var-skating: \"\\f7c5\";\n@fa-var-person-skiing: \"\\f7c9\";\n@fa-var-skiing: \"\\f7c9\";\n@fa-var-person-skiing-nordic: \"\\f7ca\";\n@fa-var-skiing-nordic: \"\\f7ca\";\n@fa-var-person-snowboarding: \"\\f7ce\";\n@fa-var-snowboarding: \"\\f7ce\";\n@fa-var-person-swimming: \"\\f5c4\";\n@fa-var-swimmer: \"\\f5c4\";\n@fa-var-person-walking: \"\\f554\";\n@fa-var-walking: \"\\f554\";\n@fa-var-person-walking-with-cane: \"\\f29d\";\n@fa-var-blind: \"\\f29d\";\n@fa-var-peseta-sign: \"\\e221\";\n@fa-var-peso-sign: \"\\e222\";\n@fa-var-phone: \"\\f095\";\n@fa-var-phone-flip: \"\\f879\";\n@fa-var-phone-alt: \"\\f879\";\n@fa-var-phone-slash: \"\\f3dd\";\n@fa-var-phone-volume: \"\\f2a0\";\n@fa-var-volume-control-phone: \"\\f2a0\";\n@fa-var-photo-film: \"\\f87c\";\n@fa-var-photo-video: \"\\f87c\";\n@fa-var-piggy-bank: \"\\f4d3\";\n@fa-var-pills: \"\\f484\";\n@fa-var-pizza-slice: \"\\f818\";\n@fa-var-place-of-worship: \"\\f67f\";\n@fa-var-plane: \"\\f072\";\n@fa-var-plane-arrival: \"\\f5af\";\n@fa-var-plane-departure: \"\\f5b0\";\n@fa-var-plane-slash: \"\\e069\";\n@fa-var-play: \"\\f04b\";\n@fa-var-plug: \"\\f1e6\";\n@fa-var-plus: \"\\2b\";\n@fa-var-add: \"\\2b\";\n@fa-var-plus-minus: \"\\e43c\";\n@fa-var-podcast: \"\\f2ce\";\n@fa-var-poo: \"\\f2fe\";\n@fa-var-poo-storm: \"\\f75a\";\n@fa-var-poo-bolt: \"\\f75a\";\n@fa-var-poop: \"\\f619\";\n@fa-var-power-off: \"\\f011\";\n@fa-var-prescription: \"\\f5b1\";\n@fa-var-prescription-bottle: \"\\f485\";\n@fa-var-prescription-bottle-medical: \"\\f486\";\n@fa-var-prescription-bottle-alt: \"\\f486\";\n@fa-var-print: \"\\f02f\";\n@fa-var-pump-medical: \"\\e06a\";\n@fa-var-pump-soap: \"\\e06b\";\n@fa-var-puzzle-piece: \"\\f12e\";\n@fa-var-q: \"\\51\";\n@fa-var-qrcode: \"\\f029\";\n@fa-var-question: \"\\3f\";\n@fa-var-quote-left: \"\\f10d\";\n@fa-var-quote-left-alt: \"\\f10d\";\n@fa-var-quote-right: \"\\f10e\";\n@fa-var-quote-right-alt: \"\\f10e\";\n@fa-var-r: \"\\52\";\n@fa-var-radiation: \"\\f7b9\";\n@fa-var-rainbow: \"\\f75b\";\n@fa-var-receipt: \"\\f543\";\n@fa-var-record-vinyl: \"\\f8d9\";\n@fa-var-rectangle-ad: \"\\f641\";\n@fa-var-ad: \"\\f641\";\n@fa-var-rectangle-list: \"\\f022\";\n@fa-var-list-alt: \"\\f022\";\n@fa-var-rectangle-xmark: \"\\f410\";\n@fa-var-rectangle-times: \"\\f410\";\n@fa-var-times-rectangle: \"\\f410\";\n@fa-var-window-close: \"\\f410\";\n@fa-var-recycle: \"\\f1b8\";\n@fa-var-registered: \"\\f25d\";\n@fa-var-repeat: \"\\f363\";\n@fa-var-reply: \"\\f3e5\";\n@fa-var-mail-reply: \"\\f3e5\";\n@fa-var-reply-all: \"\\f122\";\n@fa-var-mail-reply-all: \"\\f122\";\n@fa-var-republican: \"\\f75e\";\n@fa-var-restroom: \"\\f7bd\";\n@fa-var-retweet: \"\\f079\";\n@fa-var-ribbon: \"\\f4d6\";\n@fa-var-right-from-bracket: \"\\f2f5\";\n@fa-var-sign-out-alt: \"\\f2f5\";\n@fa-var-right-left: \"\\f362\";\n@fa-var-exchange-alt: \"\\f362\";\n@fa-var-right-long: \"\\f30b\";\n@fa-var-long-arrow-alt-right: \"\\f30b\";\n@fa-var-right-to-bracket: \"\\f2f6\";\n@fa-var-sign-in-alt: \"\\f2f6\";\n@fa-var-ring: \"\\f70b\";\n@fa-var-road: \"\\f018\";\n@fa-var-robot: \"\\f544\";\n@fa-var-rocket: \"\\f135\";\n@fa-var-rotate: \"\\f2f1\";\n@fa-var-sync-alt: \"\\f2f1\";\n@fa-var-rotate-left: \"\\f2ea\";\n@fa-var-rotate-back: \"\\f2ea\";\n@fa-var-rotate-backward: \"\\f2ea\";\n@fa-var-undo-alt: \"\\f2ea\";\n@fa-var-rotate-right: \"\\f2f9\";\n@fa-var-redo-alt: \"\\f2f9\";\n@fa-var-rotate-forward: \"\\f2f9\";\n@fa-var-route: \"\\f4d7\";\n@fa-var-rss: \"\\f09e\";\n@fa-var-feed: \"\\f09e\";\n@fa-var-ruble-sign: \"\\f158\";\n@fa-var-rouble: \"\\f158\";\n@fa-var-rub: \"\\f158\";\n@fa-var-ruble: \"\\f158\";\n@fa-var-ruler: \"\\f545\";\n@fa-var-ruler-combined: \"\\f546\";\n@fa-var-ruler-horizontal: \"\\f547\";\n@fa-var-ruler-vertical: \"\\f548\";\n@fa-var-rupee-sign: \"\\f156\";\n@fa-var-rupee: \"\\f156\";\n@fa-var-rupiah-sign: \"\\e23d\";\n@fa-var-s: \"\\53\";\n@fa-var-sailboat: \"\\e445\";\n@fa-var-satellite: \"\\f7bf\";\n@fa-var-satellite-dish: \"\\f7c0\";\n@fa-var-scale-balanced: \"\\f24e\";\n@fa-var-balance-scale: \"\\f24e\";\n@fa-var-scale-unbalanced: \"\\f515\";\n@fa-var-balance-scale-left: \"\\f515\";\n@fa-var-scale-unbalanced-flip: \"\\f516\";\n@fa-var-balance-scale-right: \"\\f516\";\n@fa-var-school: \"\\f549\";\n@fa-var-scissors: \"\\f0c4\";\n@fa-var-cut: \"\\f0c4\";\n@fa-var-screwdriver: \"\\f54a\";\n@fa-var-screwdriver-wrench: \"\\f7d9\";\n@fa-var-tools: \"\\f7d9\";\n@fa-var-scroll: \"\\f70e\";\n@fa-var-scroll-torah: \"\\f6a0\";\n@fa-var-torah: \"\\f6a0\";\n@fa-var-sd-card: \"\\f7c2\";\n@fa-var-section: \"\\e447\";\n@fa-var-seedling: \"\\f4d8\";\n@fa-var-sprout: \"\\f4d8\";\n@fa-var-server: \"\\f233\";\n@fa-var-shapes: \"\\f61f\";\n@fa-var-triangle-circle-square: \"\\f61f\";\n@fa-var-share: \"\\f064\";\n@fa-var-arrow-turn-right: \"\\f064\";\n@fa-var-mail-forward: \"\\f064\";\n@fa-var-share-from-square: \"\\f14d\";\n@fa-var-share-square: \"\\f14d\";\n@fa-var-share-nodes: \"\\f1e0\";\n@fa-var-share-alt: \"\\f1e0\";\n@fa-var-shekel-sign: \"\\f20b\";\n@fa-var-ils: \"\\f20b\";\n@fa-var-shekel: \"\\f20b\";\n@fa-var-sheqel: \"\\f20b\";\n@fa-var-sheqel-sign: \"\\f20b\";\n@fa-var-shield: \"\\f132\";\n@fa-var-shield-blank: \"\\f3ed\";\n@fa-var-shield-alt: \"\\f3ed\";\n@fa-var-shield-virus: \"\\e06c\";\n@fa-var-ship: \"\\f21a\";\n@fa-var-shirt: \"\\f553\";\n@fa-var-t-shirt: \"\\f553\";\n@fa-var-tshirt: \"\\f553\";\n@fa-var-shoe-prints: \"\\f54b\";\n@fa-var-shop: \"\\f54f\";\n@fa-var-store-alt: \"\\f54f\";\n@fa-var-shop-slash: \"\\e070\";\n@fa-var-store-alt-slash: \"\\e070\";\n@fa-var-shower: \"\\f2cc\";\n@fa-var-shrimp: \"\\e448\";\n@fa-var-shuffle: \"\\f074\";\n@fa-var-random: \"\\f074\";\n@fa-var-shuttle-space: \"\\f197\";\n@fa-var-space-shuttle: \"\\f197\";\n@fa-var-sign-hanging: \"\\f4d9\";\n@fa-var-sign: \"\\f4d9\";\n@fa-var-signal: \"\\f012\";\n@fa-var-signal-5: \"\\f012\";\n@fa-var-signal-perfect: \"\\f012\";\n@fa-var-signature: \"\\f5b7\";\n@fa-var-signs-post: \"\\f277\";\n@fa-var-map-signs: \"\\f277\";\n@fa-var-sim-card: \"\\f7c4\";\n@fa-var-sink: \"\\e06d\";\n@fa-var-sitemap: \"\\f0e8\";\n@fa-var-skull: \"\\f54c\";\n@fa-var-skull-crossbones: \"\\f714\";\n@fa-var-slash: \"\\f715\";\n@fa-var-sleigh: \"\\f7cc\";\n@fa-var-sliders: \"\\f1de\";\n@fa-var-sliders-h: \"\\f1de\";\n@fa-var-smog: \"\\f75f\";\n@fa-var-smoking: \"\\f48d\";\n@fa-var-snowflake: \"\\f2dc\";\n@fa-var-snowman: \"\\f7d0\";\n@fa-var-snowplow: \"\\f7d2\";\n@fa-var-soap: \"\\e06e\";\n@fa-var-socks: \"\\f696\";\n@fa-var-solar-panel: \"\\f5ba\";\n@fa-var-sort: \"\\f0dc\";\n@fa-var-unsorted: \"\\f0dc\";\n@fa-var-sort-down: \"\\f0dd\";\n@fa-var-sort-desc: \"\\f0dd\";\n@fa-var-sort-up: \"\\f0de\";\n@fa-var-sort-asc: \"\\f0de\";\n@fa-var-spa: \"\\f5bb\";\n@fa-var-spaghetti-monster-flying: \"\\f67b\";\n@fa-var-pastafarianism: \"\\f67b\";\n@fa-var-spell-check: \"\\f891\";\n@fa-var-spider: \"\\f717\";\n@fa-var-spinner: \"\\f110\";\n@fa-var-splotch: \"\\f5bc\";\n@fa-var-spoon: \"\\f2e5\";\n@fa-var-utensil-spoon: \"\\f2e5\";\n@fa-var-spray-can: \"\\f5bd\";\n@fa-var-spray-can-sparkles: \"\\f5d0\";\n@fa-var-air-freshener: \"\\f5d0\";\n@fa-var-square: \"\\f0c8\";\n@fa-var-square-arrow-up-right: \"\\f14c\";\n@fa-var-external-link-square: \"\\f14c\";\n@fa-var-square-caret-down: \"\\f150\";\n@fa-var-caret-square-down: \"\\f150\";\n@fa-var-square-caret-left: \"\\f191\";\n@fa-var-caret-square-left: \"\\f191\";\n@fa-var-square-caret-right: \"\\f152\";\n@fa-var-caret-square-right: \"\\f152\";\n@fa-var-square-caret-up: \"\\f151\";\n@fa-var-caret-square-up: \"\\f151\";\n@fa-var-square-check: \"\\f14a\";\n@fa-var-check-square: \"\\f14a\";\n@fa-var-square-envelope: \"\\f199\";\n@fa-var-envelope-square: \"\\f199\";\n@fa-var-square-full: \"\\f45c\";\n@fa-var-square-h: \"\\f0fd\";\n@fa-var-h-square: \"\\f0fd\";\n@fa-var-square-minus: \"\\f146\";\n@fa-var-minus-square: \"\\f146\";\n@fa-var-square-parking: \"\\f540\";\n@fa-var-parking: \"\\f540\";\n@fa-var-square-pen: \"\\f14b\";\n@fa-var-pen-square: \"\\f14b\";\n@fa-var-pencil-square: \"\\f14b\";\n@fa-var-square-phone: \"\\f098\";\n@fa-var-phone-square: \"\\f098\";\n@fa-var-square-phone-flip: \"\\f87b\";\n@fa-var-phone-square-alt: \"\\f87b\";\n@fa-var-square-plus: \"\\f0fe\";\n@fa-var-plus-square: \"\\f0fe\";\n@fa-var-square-poll-horizontal: \"\\f682\";\n@fa-var-poll-h: \"\\f682\";\n@fa-var-square-poll-vertical: \"\\f681\";\n@fa-var-poll: \"\\f681\";\n@fa-var-square-root-variable: \"\\f698\";\n@fa-var-square-root-alt: \"\\f698\";\n@fa-var-square-rss: \"\\f143\";\n@fa-var-rss-square: \"\\f143\";\n@fa-var-square-share-nodes: \"\\f1e1\";\n@fa-var-share-alt-square: \"\\f1e1\";\n@fa-var-square-up-right: \"\\f360\";\n@fa-var-external-link-square-alt: \"\\f360\";\n@fa-var-square-xmark: \"\\f2d3\";\n@fa-var-times-square: \"\\f2d3\";\n@fa-var-xmark-square: \"\\f2d3\";\n@fa-var-stairs: \"\\e289\";\n@fa-var-stamp: \"\\f5bf\";\n@fa-var-star: \"\\f005\";\n@fa-var-star-and-crescent: \"\\f699\";\n@fa-var-star-half: \"\\f089\";\n@fa-var-star-half-stroke: \"\\f5c0\";\n@fa-var-star-half-alt: \"\\f5c0\";\n@fa-var-star-of-david: \"\\f69a\";\n@fa-var-star-of-life: \"\\f621\";\n@fa-var-sterling-sign: \"\\f154\";\n@fa-var-gbp: \"\\f154\";\n@fa-var-pound-sign: \"\\f154\";\n@fa-var-stethoscope: \"\\f0f1\";\n@fa-var-stop: \"\\f04d\";\n@fa-var-stopwatch: \"\\f2f2\";\n@fa-var-stopwatch-20: \"\\e06f\";\n@fa-var-store: \"\\f54e\";\n@fa-var-store-slash: \"\\e071\";\n@fa-var-street-view: \"\\f21d\";\n@fa-var-strikethrough: \"\\f0cc\";\n@fa-var-stroopwafel: \"\\f551\";\n@fa-var-subscript: \"\\f12c\";\n@fa-var-suitcase: \"\\f0f2\";\n@fa-var-suitcase-medical: \"\\f0fa\";\n@fa-var-medkit: \"\\f0fa\";\n@fa-var-suitcase-rolling: \"\\f5c1\";\n@fa-var-sun: \"\\f185\";\n@fa-var-superscript: \"\\f12b\";\n@fa-var-swatchbook: \"\\f5c3\";\n@fa-var-synagogue: \"\\f69b\";\n@fa-var-syringe: \"\\f48e\";\n@fa-var-t: \"\\54\";\n@fa-var-table: \"\\f0ce\";\n@fa-var-table-cells: \"\\f00a\";\n@fa-var-th: \"\\f00a\";\n@fa-var-table-cells-large: \"\\f009\";\n@fa-var-th-large: \"\\f009\";\n@fa-var-table-columns: \"\\f0db\";\n@fa-var-columns: \"\\f0db\";\n@fa-var-table-list: \"\\f00b\";\n@fa-var-th-list: \"\\f00b\";\n@fa-var-table-tennis-paddle-ball: \"\\f45d\";\n@fa-var-ping-pong-paddle-ball: \"\\f45d\";\n@fa-var-table-tennis: \"\\f45d\";\n@fa-var-tablet: \"\\f3fb\";\n@fa-var-tablet-android: \"\\f3fb\";\n@fa-var-tablet-button: \"\\f10a\";\n@fa-var-tablet-screen-button: \"\\f3fa\";\n@fa-var-tablet-alt: \"\\f3fa\";\n@fa-var-tablets: \"\\f490\";\n@fa-var-tachograph-digital: \"\\f566\";\n@fa-var-digital-tachograph: \"\\f566\";\n@fa-var-tag: \"\\f02b\";\n@fa-var-tags: \"\\f02c\";\n@fa-var-tape: \"\\f4db\";\n@fa-var-taxi: \"\\f1ba\";\n@fa-var-cab: \"\\f1ba\";\n@fa-var-teeth: \"\\f62e\";\n@fa-var-teeth-open: \"\\f62f\";\n@fa-var-temperature-empty: \"\\f2cb\";\n@fa-var-temperature-0: \"\\f2cb\";\n@fa-var-thermometer-0: \"\\f2cb\";\n@fa-var-thermometer-empty: \"\\f2cb\";\n@fa-var-temperature-full: \"\\f2c7\";\n@fa-var-temperature-4: \"\\f2c7\";\n@fa-var-thermometer-4: \"\\f2c7\";\n@fa-var-thermometer-full: \"\\f2c7\";\n@fa-var-temperature-half: \"\\f2c9\";\n@fa-var-temperature-2: \"\\f2c9\";\n@fa-var-thermometer-2: \"\\f2c9\";\n@fa-var-thermometer-half: \"\\f2c9\";\n@fa-var-temperature-high: \"\\f769\";\n@fa-var-temperature-low: \"\\f76b\";\n@fa-var-temperature-quarter: \"\\f2ca\";\n@fa-var-temperature-1: \"\\f2ca\";\n@fa-var-thermometer-1: \"\\f2ca\";\n@fa-var-thermometer-quarter: \"\\f2ca\";\n@fa-var-temperature-three-quarters: \"\\f2c8\";\n@fa-var-temperature-3: \"\\f2c8\";\n@fa-var-thermometer-3: \"\\f2c8\";\n@fa-var-thermometer-three-quarters: \"\\f2c8\";\n@fa-var-tenge-sign: \"\\f7d7\";\n@fa-var-tenge: \"\\f7d7\";\n@fa-var-terminal: \"\\f120\";\n@fa-var-text-height: \"\\f034\";\n@fa-var-text-slash: \"\\f87d\";\n@fa-var-remove-format: \"\\f87d\";\n@fa-var-text-width: \"\\f035\";\n@fa-var-thermometer: \"\\f491\";\n@fa-var-thumbs-down: \"\\f165\";\n@fa-var-thumbs-up: \"\\f164\";\n@fa-var-thumbtack: \"\\f08d\";\n@fa-var-thumb-tack: \"\\f08d\";\n@fa-var-ticket: \"\\f145\";\n@fa-var-ticket-simple: \"\\f3ff\";\n@fa-var-ticket-alt: \"\\f3ff\";\n@fa-var-timeline: \"\\e29c\";\n@fa-var-toggle-off: \"\\f204\";\n@fa-var-toggle-on: \"\\f205\";\n@fa-var-toilet: \"\\f7d8\";\n@fa-var-toilet-paper: \"\\f71e\";\n@fa-var-toilet-paper-slash: \"\\e072\";\n@fa-var-toolbox: \"\\f552\";\n@fa-var-tooth: \"\\f5c9\";\n@fa-var-torii-gate: \"\\f6a1\";\n@fa-var-tower-broadcast: \"\\f519\";\n@fa-var-broadcast-tower: \"\\f519\";\n@fa-var-tractor: \"\\f722\";\n@fa-var-trademark: \"\\f25c\";\n@fa-var-traffic-light: \"\\f637\";\n@fa-var-trailer: \"\\e041\";\n@fa-var-train: \"\\f238\";\n@fa-var-train-subway: \"\\f239\";\n@fa-var-subway: \"\\f239\";\n@fa-var-train-tram: \"\\f7da\";\n@fa-var-tram: \"\\f7da\";\n@fa-var-transgender: \"\\f225\";\n@fa-var-transgender-alt: \"\\f225\";\n@fa-var-trash: \"\\f1f8\";\n@fa-var-trash-arrow-up: \"\\f829\";\n@fa-var-trash-restore: \"\\f829\";\n@fa-var-trash-can: \"\\f2ed\";\n@fa-var-trash-alt: \"\\f2ed\";\n@fa-var-trash-can-arrow-up: \"\\f82a\";\n@fa-var-trash-restore-alt: \"\\f82a\";\n@fa-var-tree: \"\\f1bb\";\n@fa-var-triangle-exclamation: \"\\f071\";\n@fa-var-exclamation-triangle: \"\\f071\";\n@fa-var-warning: \"\\f071\";\n@fa-var-trophy: \"\\f091\";\n@fa-var-truck: \"\\f0d1\";\n@fa-var-truck-fast: \"\\f48b\";\n@fa-var-shipping-fast: \"\\f48b\";\n@fa-var-truck-medical: \"\\f0f9\";\n@fa-var-ambulance: \"\\f0f9\";\n@fa-var-truck-monster: \"\\f63b\";\n@fa-var-truck-moving: \"\\f4df\";\n@fa-var-truck-pickup: \"\\f63c\";\n@fa-var-truck-ramp-box: \"\\f4de\";\n@fa-var-truck-loading: \"\\f4de\";\n@fa-var-tty: \"\\f1e4\";\n@fa-var-teletype: \"\\f1e4\";\n@fa-var-turkish-lira-sign: \"\\e2bb\";\n@fa-var-try: \"\\e2bb\";\n@fa-var-turkish-lira: \"\\e2bb\";\n@fa-var-turn-down: \"\\f3be\";\n@fa-var-level-down-alt: \"\\f3be\";\n@fa-var-turn-up: \"\\f3bf\";\n@fa-var-level-up-alt: \"\\f3bf\";\n@fa-var-tv: \"\\f26c\";\n@fa-var-television: \"\\f26c\";\n@fa-var-tv-alt: \"\\f26c\";\n@fa-var-u: \"\\55\";\n@fa-var-umbrella: \"\\f0e9\";\n@fa-var-umbrella-beach: \"\\f5ca\";\n@fa-var-underline: \"\\f0cd\";\n@fa-var-universal-access: \"\\f29a\";\n@fa-var-unlock: \"\\f09c\";\n@fa-var-unlock-keyhole: \"\\f13e\";\n@fa-var-unlock-alt: \"\\f13e\";\n@fa-var-up-down: \"\\f338\";\n@fa-var-arrows-alt-v: \"\\f338\";\n@fa-var-up-down-left-right: \"\\f0b2\";\n@fa-var-arrows-alt: \"\\f0b2\";\n@fa-var-up-long: \"\\f30c\";\n@fa-var-long-arrow-alt-up: \"\\f30c\";\n@fa-var-up-right-and-down-left-from-center: \"\\f424\";\n@fa-var-expand-alt: \"\\f424\";\n@fa-var-up-right-from-square: \"\\f35d\";\n@fa-var-external-link-alt: \"\\f35d\";\n@fa-var-upload: \"\\f093\";\n@fa-var-user: \"\\f007\";\n@fa-var-user-astronaut: \"\\f4fb\";\n@fa-var-user-check: \"\\f4fc\";\n@fa-var-user-clock: \"\\f4fd\";\n@fa-var-user-doctor: \"\\f0f0\";\n@fa-var-user-md: \"\\f0f0\";\n@fa-var-user-gear: \"\\f4fe\";\n@fa-var-user-cog: \"\\f4fe\";\n@fa-var-user-graduate: \"\\f501\";\n@fa-var-user-group: \"\\f500\";\n@fa-var-user-friends: \"\\f500\";\n@fa-var-user-injured: \"\\f728\";\n@fa-var-user-large: \"\\f406\";\n@fa-var-user-alt: \"\\f406\";\n@fa-var-user-large-slash: \"\\f4fa\";\n@fa-var-user-alt-slash: \"\\f4fa\";\n@fa-var-user-lock: \"\\f502\";\n@fa-var-user-minus: \"\\f503\";\n@fa-var-user-ninja: \"\\f504\";\n@fa-var-user-nurse: \"\\f82f\";\n@fa-var-user-pen: \"\\f4ff\";\n@fa-var-user-edit: \"\\f4ff\";\n@fa-var-user-plus: \"\\f234\";\n@fa-var-user-secret: \"\\f21b\";\n@fa-var-user-shield: \"\\f505\";\n@fa-var-user-slash: \"\\f506\";\n@fa-var-user-tag: \"\\f507\";\n@fa-var-user-tie: \"\\f508\";\n@fa-var-user-xmark: \"\\f235\";\n@fa-var-user-times: \"\\f235\";\n@fa-var-users: \"\\f0c0\";\n@fa-var-users-gear: \"\\f509\";\n@fa-var-users-cog: \"\\f509\";\n@fa-var-users-slash: \"\\e073\";\n@fa-var-utensils: \"\\f2e7\";\n@fa-var-cutlery: \"\\f2e7\";\n@fa-var-v: \"\\56\";\n@fa-var-van-shuttle: \"\\f5b6\";\n@fa-var-shuttle-van: \"\\f5b6\";\n@fa-var-vault: \"\\e2c5\";\n@fa-var-vector-square: \"\\f5cb\";\n@fa-var-venus: \"\\f221\";\n@fa-var-venus-double: \"\\f226\";\n@fa-var-venus-mars: \"\\f228\";\n@fa-var-vest: \"\\e085\";\n@fa-var-vest-patches: \"\\e086\";\n@fa-var-vial: \"\\f492\";\n@fa-var-vials: \"\\f493\";\n@fa-var-video: \"\\f03d\";\n@fa-var-video-camera: \"\\f03d\";\n@fa-var-video-slash: \"\\f4e2\";\n@fa-var-vihara: \"\\f6a7\";\n@fa-var-virus: \"\\e074\";\n@fa-var-virus-covid: \"\\e4a8\";\n@fa-var-virus-covid-slash: \"\\e4a9\";\n@fa-var-virus-slash: \"\\e075\";\n@fa-var-viruses: \"\\e076\";\n@fa-var-voicemail: \"\\f897\";\n@fa-var-volleyball: \"\\f45f\";\n@fa-var-volleyball-ball: \"\\f45f\";\n@fa-var-volume-high: \"\\f028\";\n@fa-var-volume-up: \"\\f028\";\n@fa-var-volume-low: \"\\f027\";\n@fa-var-volume-down: \"\\f027\";\n@fa-var-volume-off: \"\\f026\";\n@fa-var-volume-xmark: \"\\f6a9\";\n@fa-var-volume-mute: \"\\f6a9\";\n@fa-var-volume-times: \"\\f6a9\";\n@fa-var-vr-cardboard: \"\\f729\";\n@fa-var-w: \"\\57\";\n@fa-var-wallet: \"\\f555\";\n@fa-var-wand-magic: \"\\f0d0\";\n@fa-var-magic: \"\\f0d0\";\n@fa-var-wand-magic-sparkles: \"\\e2ca\";\n@fa-var-magic-wand-sparkles: \"\\e2ca\";\n@fa-var-wand-sparkles: \"\\f72b\";\n@fa-var-warehouse: \"\\f494\";\n@fa-var-water: \"\\f773\";\n@fa-var-water-ladder: \"\\f5c5\";\n@fa-var-ladder-water: \"\\f5c5\";\n@fa-var-swimming-pool: \"\\f5c5\";\n@fa-var-wave-square: \"\\f83e\";\n@fa-var-weight-hanging: \"\\f5cd\";\n@fa-var-weight-scale: \"\\f496\";\n@fa-var-weight: \"\\f496\";\n@fa-var-wheelchair: \"\\f193\";\n@fa-var-whiskey-glass: \"\\f7a0\";\n@fa-var-glass-whiskey: \"\\f7a0\";\n@fa-var-wifi: \"\\f1eb\";\n@fa-var-wifi-3: \"\\f1eb\";\n@fa-var-wifi-strong: \"\\f1eb\";\n@fa-var-wind: \"\\f72e\";\n@fa-var-window-maximize: \"\\f2d0\";\n@fa-var-window-minimize: \"\\f2d1\";\n@fa-var-window-restore: \"\\f2d2\";\n@fa-var-wine-bottle: \"\\f72f\";\n@fa-var-wine-glass: \"\\f4e3\";\n@fa-var-wine-glass-empty: \"\\f5ce\";\n@fa-var-wine-glass-alt: \"\\f5ce\";\n@fa-var-won-sign: \"\\f159\";\n@fa-var-krw: \"\\f159\";\n@fa-var-won: \"\\f159\";\n@fa-var-wrench: \"\\f0ad\";\n@fa-var-x: \"\\58\";\n@fa-var-x-ray: \"\\f497\";\n@fa-var-xmark: \"\\f00d\";\n@fa-var-close: \"\\f00d\";\n@fa-var-multiply: \"\\f00d\";\n@fa-var-remove: \"\\f00d\";\n@fa-var-times: \"\\f00d\";\n@fa-var-y: \"\\59\";\n@fa-var-yen-sign: \"\\f157\";\n@fa-var-cny: \"\\f157\";\n@fa-var-jpy: \"\\f157\";\n@fa-var-rmb: \"\\f157\";\n@fa-var-yen: \"\\f157\";\n@fa-var-yin-yang: \"\\f6ad\";\n@fa-var-z: \"\\5a\";\n\n@fa-var-42-group: \"\\e080\";\n@fa-var-innosoft: \"\\e080\";\n@fa-var-500px: \"\\f26e\";\n@fa-var-accessible-icon: \"\\f368\";\n@fa-var-accusoft: \"\\f369\";\n@fa-var-adn: \"\\f170\";\n@fa-var-adversal: \"\\f36a\";\n@fa-var-affiliatetheme: \"\\f36b\";\n@fa-var-airbnb: \"\\f834\";\n@fa-var-algolia: \"\\f36c\";\n@fa-var-alipay: \"\\f642\";\n@fa-var-amazon: \"\\f270\";\n@fa-var-amazon-pay: \"\\f42c\";\n@fa-var-amilia: \"\\f36d\";\n@fa-var-android: \"\\f17b\";\n@fa-var-angellist: \"\\f209\";\n@fa-var-angrycreative: \"\\f36e\";\n@fa-var-angular: \"\\f420\";\n@fa-var-app-store: \"\\f36f\";\n@fa-var-app-store-ios: \"\\f370\";\n@fa-var-apper: \"\\f371\";\n@fa-var-apple: \"\\f179\";\n@fa-var-apple-pay: \"\\f415\";\n@fa-var-artstation: \"\\f77a\";\n@fa-var-asymmetrik: \"\\f372\";\n@fa-var-atlassian: \"\\f77b\";\n@fa-var-audible: \"\\f373\";\n@fa-var-autoprefixer: \"\\f41c\";\n@fa-var-avianex: \"\\f374\";\n@fa-var-aviato: \"\\f421\";\n@fa-var-aws: \"\\f375\";\n@fa-var-bandcamp: \"\\f2d5\";\n@fa-var-battle-net: \"\\f835\";\n@fa-var-behance: \"\\f1b4\";\n@fa-var-behance-square: \"\\f1b5\";\n@fa-var-bilibili: \"\\e3d9\";\n@fa-var-bimobject: \"\\f378\";\n@fa-var-bitbucket: \"\\f171\";\n@fa-var-bitcoin: \"\\f379\";\n@fa-var-bity: \"\\f37a\";\n@fa-var-black-tie: \"\\f27e\";\n@fa-var-blackberry: \"\\f37b\";\n@fa-var-blogger: \"\\f37c\";\n@fa-var-blogger-b: \"\\f37d\";\n@fa-var-bluetooth: \"\\f293\";\n@fa-var-bluetooth-b: \"\\f294\";\n@fa-var-bootstrap: \"\\f836\";\n@fa-var-bots: \"\\e340\";\n@fa-var-btc: \"\\f15a\";\n@fa-var-buffer: \"\\f837\";\n@fa-var-buromobelexperte: \"\\f37f\";\n@fa-var-buy-n-large: \"\\f8a6\";\n@fa-var-buysellads: \"\\f20d\";\n@fa-var-canadian-maple-leaf: \"\\f785\";\n@fa-var-cc-amazon-pay: \"\\f42d\";\n@fa-var-cc-amex: \"\\f1f3\";\n@fa-var-cc-apple-pay: \"\\f416\";\n@fa-var-cc-diners-club: \"\\f24c\";\n@fa-var-cc-discover: \"\\f1f2\";\n@fa-var-cc-jcb: \"\\f24b\";\n@fa-var-cc-mastercard: \"\\f1f1\";\n@fa-var-cc-paypal: \"\\f1f4\";\n@fa-var-cc-stripe: \"\\f1f5\";\n@fa-var-cc-visa: \"\\f1f0\";\n@fa-var-centercode: \"\\f380\";\n@fa-var-centos: \"\\f789\";\n@fa-var-chrome: \"\\f268\";\n@fa-var-chromecast: \"\\f838\";\n@fa-var-cloudflare: \"\\e07d\";\n@fa-var-cloudscale: \"\\f383\";\n@fa-var-cloudsmith: \"\\f384\";\n@fa-var-cloudversify: \"\\f385\";\n@fa-var-cmplid: \"\\e360\";\n@fa-var-codepen: \"\\f1cb\";\n@fa-var-codiepie: \"\\f284\";\n@fa-var-confluence: \"\\f78d\";\n@fa-var-connectdevelop: \"\\f20e\";\n@fa-var-contao: \"\\f26d\";\n@fa-var-cotton-bureau: \"\\f89e\";\n@fa-var-cpanel: \"\\f388\";\n@fa-var-creative-commons: \"\\f25e\";\n@fa-var-creative-commons-by: \"\\f4e7\";\n@fa-var-creative-commons-nc: \"\\f4e8\";\n@fa-var-creative-commons-nc-eu: \"\\f4e9\";\n@fa-var-creative-commons-nc-jp: \"\\f4ea\";\n@fa-var-creative-commons-nd: \"\\f4eb\";\n@fa-var-creative-commons-pd: \"\\f4ec\";\n@fa-var-creative-commons-pd-alt: \"\\f4ed\";\n@fa-var-creative-commons-remix: \"\\f4ee\";\n@fa-var-creative-commons-sa: \"\\f4ef\";\n@fa-var-creative-commons-sampling: \"\\f4f0\";\n@fa-var-creative-commons-sampling-plus: \"\\f4f1\";\n@fa-var-creative-commons-share: \"\\f4f2\";\n@fa-var-creative-commons-zero: \"\\f4f3\";\n@fa-var-critical-role: \"\\f6c9\";\n@fa-var-css3: \"\\f13c\";\n@fa-var-css3-alt: \"\\f38b\";\n@fa-var-cuttlefish: \"\\f38c\";\n@fa-var-d-and-d: \"\\f38d\";\n@fa-var-d-and-d-beyond: \"\\f6ca\";\n@fa-var-dailymotion: \"\\e052\";\n@fa-var-dashcube: \"\\f210\";\n@fa-var-deezer: \"\\e077\";\n@fa-var-delicious: \"\\f1a5\";\n@fa-var-deploydog: \"\\f38e\";\n@fa-var-deskpro: \"\\f38f\";\n@fa-var-dev: \"\\f6cc\";\n@fa-var-deviantart: \"\\f1bd\";\n@fa-var-dhl: \"\\f790\";\n@fa-var-diaspora: \"\\f791\";\n@fa-var-digg: \"\\f1a6\";\n@fa-var-digital-ocean: \"\\f391\";\n@fa-var-discord: \"\\f392\";\n@fa-var-discourse: \"\\f393\";\n@fa-var-dochub: \"\\f394\";\n@fa-var-docker: \"\\f395\";\n@fa-var-draft2digital: \"\\f396\";\n@fa-var-dribbble: \"\\f17d\";\n@fa-var-dribbble-square: \"\\f397\";\n@fa-var-dropbox: \"\\f16b\";\n@fa-var-drupal: \"\\f1a9\";\n@fa-var-dyalog: \"\\f399\";\n@fa-var-earlybirds: \"\\f39a\";\n@fa-var-ebay: \"\\f4f4\";\n@fa-var-edge: \"\\f282\";\n@fa-var-edge-legacy: \"\\e078\";\n@fa-var-elementor: \"\\f430\";\n@fa-var-ello: \"\\f5f1\";\n@fa-var-ember: \"\\f423\";\n@fa-var-empire: \"\\f1d1\";\n@fa-var-envira: \"\\f299\";\n@fa-var-erlang: \"\\f39d\";\n@fa-var-ethereum: \"\\f42e\";\n@fa-var-etsy: \"\\f2d7\";\n@fa-var-evernote: \"\\f839\";\n@fa-var-expeditedssl: \"\\f23e\";\n@fa-var-facebook: \"\\f09a\";\n@fa-var-facebook-f: \"\\f39e\";\n@fa-var-facebook-messenger: \"\\f39f\";\n@fa-var-facebook-square: \"\\f082\";\n@fa-var-fantasy-flight-games: \"\\f6dc\";\n@fa-var-fedex: \"\\f797\";\n@fa-var-fedora: \"\\f798\";\n@fa-var-figma: \"\\f799\";\n@fa-var-firefox: \"\\f269\";\n@fa-var-firefox-browser: \"\\e007\";\n@fa-var-first-order: \"\\f2b0\";\n@fa-var-first-order-alt: \"\\f50a\";\n@fa-var-firstdraft: \"\\f3a1\";\n@fa-var-flickr: \"\\f16e\";\n@fa-var-flipboard: \"\\f44d\";\n@fa-var-fly: \"\\f417\";\n@fa-var-font-awesome: \"\\f2b4\";\n@fa-var-font-awesome-flag: \"\\f2b4\";\n@fa-var-font-awesome-logo-full: \"\\f2b4\";\n@fa-var-fonticons: \"\\f280\";\n@fa-var-fonticons-fi: \"\\f3a2\";\n@fa-var-fort-awesome: \"\\f286\";\n@fa-var-fort-awesome-alt: \"\\f3a3\";\n@fa-var-forumbee: \"\\f211\";\n@fa-var-foursquare: \"\\f180\";\n@fa-var-free-code-camp: \"\\f2c5\";\n@fa-var-freebsd: \"\\f3a4\";\n@fa-var-fulcrum: \"\\f50b\";\n@fa-var-galactic-republic: \"\\f50c\";\n@fa-var-galactic-senate: \"\\f50d\";\n@fa-var-get-pocket: \"\\f265\";\n@fa-var-gg: \"\\f260\";\n@fa-var-gg-circle: \"\\f261\";\n@fa-var-git: \"\\f1d3\";\n@fa-var-git-alt: \"\\f841\";\n@fa-var-git-square: \"\\f1d2\";\n@fa-var-github: \"\\f09b\";\n@fa-var-github-alt: \"\\f113\";\n@fa-var-github-square: \"\\f092\";\n@fa-var-gitkraken: \"\\f3a6\";\n@fa-var-gitlab: \"\\f296\";\n@fa-var-gitter: \"\\f426\";\n@fa-var-glide: \"\\f2a5\";\n@fa-var-glide-g: \"\\f2a6\";\n@fa-var-gofore: \"\\f3a7\";\n@fa-var-golang: \"\\e40f\";\n@fa-var-goodreads: \"\\f3a8\";\n@fa-var-goodreads-g: \"\\f3a9\";\n@fa-var-google: \"\\f1a0\";\n@fa-var-google-drive: \"\\f3aa\";\n@fa-var-google-pay: \"\\e079\";\n@fa-var-google-play: \"\\f3ab\";\n@fa-var-google-plus: \"\\f2b3\";\n@fa-var-google-plus-g: \"\\f0d5\";\n@fa-var-google-plus-square: \"\\f0d4\";\n@fa-var-google-wallet: \"\\f1ee\";\n@fa-var-gratipay: \"\\f184\";\n@fa-var-grav: \"\\f2d6\";\n@fa-var-gripfire: \"\\f3ac\";\n@fa-var-grunt: \"\\f3ad\";\n@fa-var-guilded: \"\\e07e\";\n@fa-var-gulp: \"\\f3ae\";\n@fa-var-hacker-news: \"\\f1d4\";\n@fa-var-hacker-news-square: \"\\f3af\";\n@fa-var-hackerrank: \"\\f5f7\";\n@fa-var-hashnode: \"\\e499\";\n@fa-var-hips: \"\\f452\";\n@fa-var-hire-a-helper: \"\\f3b0\";\n@fa-var-hive: \"\\e07f\";\n@fa-var-hooli: \"\\f427\";\n@fa-var-hornbill: \"\\f592\";\n@fa-var-hotjar: \"\\f3b1\";\n@fa-var-houzz: \"\\f27c\";\n@fa-var-html5: \"\\f13b\";\n@fa-var-hubspot: \"\\f3b2\";\n@fa-var-ideal: \"\\e013\";\n@fa-var-imdb: \"\\f2d8\";\n@fa-var-instagram: \"\\f16d\";\n@fa-var-instagram-square: \"\\e055\";\n@fa-var-instalod: \"\\e081\";\n@fa-var-intercom: \"\\f7af\";\n@fa-var-internet-explorer: \"\\f26b\";\n@fa-var-invision: \"\\f7b0\";\n@fa-var-ioxhost: \"\\f208\";\n@fa-var-itch-io: \"\\f83a\";\n@fa-var-itunes: \"\\f3b4\";\n@fa-var-itunes-note: \"\\f3b5\";\n@fa-var-java: \"\\f4e4\";\n@fa-var-jedi-order: \"\\f50e\";\n@fa-var-jenkins: \"\\f3b6\";\n@fa-var-jira: \"\\f7b1\";\n@fa-var-joget: \"\\f3b7\";\n@fa-var-joomla: \"\\f1aa\";\n@fa-var-js: \"\\f3b8\";\n@fa-var-js-square: \"\\f3b9\";\n@fa-var-jsfiddle: \"\\f1cc\";\n@fa-var-kaggle: \"\\f5fa\";\n@fa-var-keybase: \"\\f4f5\";\n@fa-var-keycdn: \"\\f3ba\";\n@fa-var-kickstarter: \"\\f3bb\";\n@fa-var-kickstarter-k: \"\\f3bc\";\n@fa-var-korvue: \"\\f42f\";\n@fa-var-laravel: \"\\f3bd\";\n@fa-var-lastfm: \"\\f202\";\n@fa-var-lastfm-square: \"\\f203\";\n@fa-var-leanpub: \"\\f212\";\n@fa-var-less: \"\\f41d\";\n@fa-var-line: \"\\f3c0\";\n@fa-var-linkedin: \"\\f08c\";\n@fa-var-linkedin-in: \"\\f0e1\";\n@fa-var-linode: \"\\f2b8\";\n@fa-var-linux: \"\\f17c\";\n@fa-var-lyft: \"\\f3c3\";\n@fa-var-magento: \"\\f3c4\";\n@fa-var-mailchimp: \"\\f59e\";\n@fa-var-mandalorian: \"\\f50f\";\n@fa-var-markdown: \"\\f60f\";\n@fa-var-mastodon: \"\\f4f6\";\n@fa-var-maxcdn: \"\\f136\";\n@fa-var-mdb: \"\\f8ca\";\n@fa-var-medapps: \"\\f3c6\";\n@fa-var-medium: \"\\f23a\";\n@fa-var-medium-m: \"\\f23a\";\n@fa-var-medrt: \"\\f3c8\";\n@fa-var-meetup: \"\\f2e0\";\n@fa-var-megaport: \"\\f5a3\";\n@fa-var-mendeley: \"\\f7b3\";\n@fa-var-microblog: \"\\e01a\";\n@fa-var-microsoft: \"\\f3ca\";\n@fa-var-mix: \"\\f3cb\";\n@fa-var-mixcloud: \"\\f289\";\n@fa-var-mixer: \"\\e056\";\n@fa-var-mizuni: \"\\f3cc\";\n@fa-var-modx: \"\\f285\";\n@fa-var-monero: \"\\f3d0\";\n@fa-var-napster: \"\\f3d2\";\n@fa-var-neos: \"\\f612\";\n@fa-var-nimblr: \"\\f5a8\";\n@fa-var-node: \"\\f419\";\n@fa-var-node-js: \"\\f3d3\";\n@fa-var-npm: \"\\f3d4\";\n@fa-var-ns8: \"\\f3d5\";\n@fa-var-nutritionix: \"\\f3d6\";\n@fa-var-octopus-deploy: \"\\e082\";\n@fa-var-odnoklassniki: \"\\f263\";\n@fa-var-odnoklassniki-square: \"\\f264\";\n@fa-var-old-republic: \"\\f510\";\n@fa-var-opencart: \"\\f23d\";\n@fa-var-openid: \"\\f19b\";\n@fa-var-opera: \"\\f26a\";\n@fa-var-optin-monster: \"\\f23c\";\n@fa-var-orcid: \"\\f8d2\";\n@fa-var-osi: \"\\f41a\";\n@fa-var-padlet: \"\\e4a0\";\n@fa-var-page4: \"\\f3d7\";\n@fa-var-pagelines: \"\\f18c\";\n@fa-var-palfed: \"\\f3d8\";\n@fa-var-patreon: \"\\f3d9\";\n@fa-var-paypal: \"\\f1ed\";\n@fa-var-perbyte: \"\\e083\";\n@fa-var-periscope: \"\\f3da\";\n@fa-var-phabricator: \"\\f3db\";\n@fa-var-phoenix-framework: \"\\f3dc\";\n@fa-var-phoenix-squadron: \"\\f511\";\n@fa-var-php: \"\\f457\";\n@fa-var-pied-piper: \"\\f2ae\";\n@fa-var-pied-piper-alt: \"\\f1a8\";\n@fa-var-pied-piper-hat: \"\\f4e5\";\n@fa-var-pied-piper-pp: \"\\f1a7\";\n@fa-var-pied-piper-square: \"\\e01e\";\n@fa-var-pinterest: \"\\f0d2\";\n@fa-var-pinterest-p: \"\\f231\";\n@fa-var-pinterest-square: \"\\f0d3\";\n@fa-var-pix: \"\\e43a\";\n@fa-var-playstation: \"\\f3df\";\n@fa-var-product-hunt: \"\\f288\";\n@fa-var-pushed: \"\\f3e1\";\n@fa-var-python: \"\\f3e2\";\n@fa-var-qq: \"\\f1d6\";\n@fa-var-quinscape: \"\\f459\";\n@fa-var-quora: \"\\f2c4\";\n@fa-var-r-project: \"\\f4f7\";\n@fa-var-raspberry-pi: \"\\f7bb\";\n@fa-var-ravelry: \"\\f2d9\";\n@fa-var-react: \"\\f41b\";\n@fa-var-reacteurope: \"\\f75d\";\n@fa-var-readme: \"\\f4d5\";\n@fa-var-rebel: \"\\f1d0\";\n@fa-var-red-river: \"\\f3e3\";\n@fa-var-reddit: \"\\f1a1\";\n@fa-var-reddit-alien: \"\\f281\";\n@fa-var-reddit-square: \"\\f1a2\";\n@fa-var-redhat: \"\\f7bc\";\n@fa-var-renren: \"\\f18b\";\n@fa-var-replyd: \"\\f3e6\";\n@fa-var-researchgate: \"\\f4f8\";\n@fa-var-resolving: \"\\f3e7\";\n@fa-var-rev: \"\\f5b2\";\n@fa-var-rocketchat: \"\\f3e8\";\n@fa-var-rockrms: \"\\f3e9\";\n@fa-var-rust: \"\\e07a\";\n@fa-var-safari: \"\\f267\";\n@fa-var-salesforce: \"\\f83b\";\n@fa-var-sass: \"\\f41e\";\n@fa-var-schlix: \"\\f3ea\";\n@fa-var-scribd: \"\\f28a\";\n@fa-var-searchengin: \"\\f3eb\";\n@fa-var-sellcast: \"\\f2da\";\n@fa-var-sellsy: \"\\f213\";\n@fa-var-servicestack: \"\\f3ec\";\n@fa-var-shirtsinbulk: \"\\f214\";\n@fa-var-shopify: \"\\e057\";\n@fa-var-shopware: \"\\f5b5\";\n@fa-var-simplybuilt: \"\\f215\";\n@fa-var-sistrix: \"\\f3ee\";\n@fa-var-sith: \"\\f512\";\n@fa-var-sitrox: \"\\e44a\";\n@fa-var-sketch: \"\\f7c6\";\n@fa-var-skyatlas: \"\\f216\";\n@fa-var-skype: \"\\f17e\";\n@fa-var-slack: \"\\f198\";\n@fa-var-slack-hash: \"\\f198\";\n@fa-var-slideshare: \"\\f1e7\";\n@fa-var-snapchat: \"\\f2ab\";\n@fa-var-snapchat-ghost: \"\\f2ab\";\n@fa-var-snapchat-square: \"\\f2ad\";\n@fa-var-soundcloud: \"\\f1be\";\n@fa-var-sourcetree: \"\\f7d3\";\n@fa-var-speakap: \"\\f3f3\";\n@fa-var-speaker-deck: \"\\f83c\";\n@fa-var-spotify: \"\\f1bc\";\n@fa-var-square-font-awesome: \"\\f425\";\n@fa-var-square-font-awesome-stroke: \"\\f35c\";\n@fa-var-font-awesome-alt: \"\\f35c\";\n@fa-var-squarespace: \"\\f5be\";\n@fa-var-stack-exchange: \"\\f18d\";\n@fa-var-stack-overflow: \"\\f16c\";\n@fa-var-stackpath: \"\\f842\";\n@fa-var-staylinked: \"\\f3f5\";\n@fa-var-steam: \"\\f1b6\";\n@fa-var-steam-square: \"\\f1b7\";\n@fa-var-steam-symbol: \"\\f3f6\";\n@fa-var-sticker-mule: \"\\f3f7\";\n@fa-var-strava: \"\\f428\";\n@fa-var-stripe: \"\\f429\";\n@fa-var-stripe-s: \"\\f42a\";\n@fa-var-studiovinari: \"\\f3f8\";\n@fa-var-stumbleupon: \"\\f1a4\";\n@fa-var-stumbleupon-circle: \"\\f1a3\";\n@fa-var-superpowers: \"\\f2dd\";\n@fa-var-supple: \"\\f3f9\";\n@fa-var-suse: \"\\f7d6\";\n@fa-var-swift: \"\\f8e1\";\n@fa-var-symfony: \"\\f83d\";\n@fa-var-teamspeak: \"\\f4f9\";\n@fa-var-telegram: \"\\f2c6\";\n@fa-var-telegram-plane: \"\\f2c6\";\n@fa-var-tencent-weibo: \"\\f1d5\";\n@fa-var-the-red-yeti: \"\\f69d\";\n@fa-var-themeco: \"\\f5c6\";\n@fa-var-themeisle: \"\\f2b2\";\n@fa-var-think-peaks: \"\\f731\";\n@fa-var-tiktok: \"\\e07b\";\n@fa-var-trade-federation: \"\\f513\";\n@fa-var-trello: \"\\f181\";\n@fa-var-tumblr: \"\\f173\";\n@fa-var-tumblr-square: \"\\f174\";\n@fa-var-twitch: \"\\f1e8\";\n@fa-var-twitter: \"\\f099\";\n@fa-var-twitter-square: \"\\f081\";\n@fa-var-typo3: \"\\f42b\";\n@fa-var-uber: \"\\f402\";\n@fa-var-ubuntu: \"\\f7df\";\n@fa-var-uikit: \"\\f403\";\n@fa-var-umbraco: \"\\f8e8\";\n@fa-var-uncharted: \"\\e084\";\n@fa-var-uniregistry: \"\\f404\";\n@fa-var-unity: \"\\e049\";\n@fa-var-unsplash: \"\\e07c\";\n@fa-var-untappd: \"\\f405\";\n@fa-var-ups: \"\\f7e0\";\n@fa-var-usb: \"\\f287\";\n@fa-var-usps: \"\\f7e1\";\n@fa-var-ussunnah: \"\\f407\";\n@fa-var-vaadin: \"\\f408\";\n@fa-var-viacoin: \"\\f237\";\n@fa-var-viadeo: \"\\f2a9\";\n@fa-var-viadeo-square: \"\\f2aa\";\n@fa-var-viber: \"\\f409\";\n@fa-var-vimeo: \"\\f40a\";\n@fa-var-vimeo-square: \"\\f194\";\n@fa-var-vimeo-v: \"\\f27d\";\n@fa-var-vine: \"\\f1ca\";\n@fa-var-vk: \"\\f189\";\n@fa-var-vnv: \"\\f40b\";\n@fa-var-vuejs: \"\\f41f\";\n@fa-var-watchman-monitoring: \"\\e087\";\n@fa-var-waze: \"\\f83f\";\n@fa-var-weebly: \"\\f5cc\";\n@fa-var-weibo: \"\\f18a\";\n@fa-var-weixin: \"\\f1d7\";\n@fa-var-whatsapp: \"\\f232\";\n@fa-var-whatsapp-square: \"\\f40c\";\n@fa-var-whmcs: \"\\f40d\";\n@fa-var-wikipedia-w: \"\\f266\";\n@fa-var-windows: \"\\f17a\";\n@fa-var-wirsindhandwerk: \"\\e2d0\";\n@fa-var-wsh: \"\\e2d0\";\n@fa-var-wix: \"\\f5cf\";\n@fa-var-wizards-of-the-coast: \"\\f730\";\n@fa-var-wodu: \"\\e088\";\n@fa-var-wolf-pack-battalion: \"\\f514\";\n@fa-var-wordpress: \"\\f19a\";\n@fa-var-wordpress-simple: \"\\f411\";\n@fa-var-wpbeginner: \"\\f297\";\n@fa-var-wpexplorer: \"\\f2de\";\n@fa-var-wpforms: \"\\f298\";\n@fa-var-wpressr: \"\\f3e4\";\n@fa-var-xbox: \"\\f412\";\n@fa-var-xing: \"\\f168\";\n@fa-var-xing-square: \"\\f169\";\n@fa-var-y-combinator: \"\\f23b\";\n@fa-var-yahoo: \"\\f19e\";\n@fa-var-yammer: \"\\f840\";\n@fa-var-yandex: \"\\f413\";\n@fa-var-yandex-international: \"\\f414\";\n@fa-var-yarn: \"\\f7e3\";\n@fa-var-yelp: \"\\f1e9\";\n@fa-var-yoast: \"\\f2b1\";\n@fa-var-youtube: \"\\f167\";\n@fa-var-youtube-square: \"\\f431\";\n@fa-var-zhihu: \"\\f63f\";\n\n.fa-icons() {\n  0: @fa-var-0;\n  1: @fa-var-1;\n  2: @fa-var-2;\n  3: @fa-var-3;\n  4: @fa-var-4;\n  5: @fa-var-5;\n  6: @fa-var-6;\n  7: @fa-var-7;\n  8: @fa-var-8;\n  9: @fa-var-9;\n  a: @fa-var-a;\n  address-book: @fa-var-address-book;\n  contact-book: @fa-var-contact-book;\n  address-card: @fa-var-address-card;\n  contact-card: @fa-var-contact-card;\n  vcard: @fa-var-vcard;\n  align-center: @fa-var-align-center;\n  align-justify: @fa-var-align-justify;\n  align-left: @fa-var-align-left;\n  align-right: @fa-var-align-right;\n  anchor: @fa-var-anchor;\n  angle-down: @fa-var-angle-down;\n  angle-left: @fa-var-angle-left;\n  angle-right: @fa-var-angle-right;\n  angle-up: @fa-var-angle-up;\n  angles-down: @fa-var-angles-down;\n  angle-double-down: @fa-var-angle-double-down;\n  angles-left: @fa-var-angles-left;\n  angle-double-left: @fa-var-angle-double-left;\n  angles-right: @fa-var-angles-right;\n  angle-double-right: @fa-var-angle-double-right;\n  angles-up: @fa-var-angles-up;\n  angle-double-up: @fa-var-angle-double-up;\n  ankh: @fa-var-ankh;\n  apple-whole: @fa-var-apple-whole;\n  apple-alt: @fa-var-apple-alt;\n  archway: @fa-var-archway;\n  arrow-down: @fa-var-arrow-down;\n  arrow-down-1-9: @fa-var-arrow-down-1-9;\n  sort-numeric-asc: @fa-var-sort-numeric-asc;\n  sort-numeric-down: @fa-var-sort-numeric-down;\n  arrow-down-9-1: @fa-var-arrow-down-9-1;\n  sort-numeric-desc: @fa-var-sort-numeric-desc;\n  sort-numeric-down-alt: @fa-var-sort-numeric-down-alt;\n  arrow-down-a-z: @fa-var-arrow-down-a-z;\n  sort-alpha-asc: @fa-var-sort-alpha-asc;\n  sort-alpha-down: @fa-var-sort-alpha-down;\n  arrow-down-long: @fa-var-arrow-down-long;\n  long-arrow-down: @fa-var-long-arrow-down;\n  arrow-down-short-wide: @fa-var-arrow-down-short-wide;\n  sort-amount-desc: @fa-var-sort-amount-desc;\n  sort-amount-down-alt: @fa-var-sort-amount-down-alt;\n  arrow-down-wide-short: @fa-var-arrow-down-wide-short;\n  sort-amount-asc: @fa-var-sort-amount-asc;\n  sort-amount-down: @fa-var-sort-amount-down;\n  arrow-down-z-a: @fa-var-arrow-down-z-a;\n  sort-alpha-desc: @fa-var-sort-alpha-desc;\n  sort-alpha-down-alt: @fa-var-sort-alpha-down-alt;\n  arrow-left: @fa-var-arrow-left;\n  arrow-left-long: @fa-var-arrow-left-long;\n  long-arrow-left: @fa-var-long-arrow-left;\n  arrow-pointer: @fa-var-arrow-pointer;\n  mouse-pointer: @fa-var-mouse-pointer;\n  arrow-right: @fa-var-arrow-right;\n  arrow-right-arrow-left: @fa-var-arrow-right-arrow-left;\n  exchange: @fa-var-exchange;\n  arrow-right-from-bracket: @fa-var-arrow-right-from-bracket;\n  sign-out: @fa-var-sign-out;\n  arrow-right-long: @fa-var-arrow-right-long;\n  long-arrow-right: @fa-var-long-arrow-right;\n  arrow-right-to-bracket: @fa-var-arrow-right-to-bracket;\n  sign-in: @fa-var-sign-in;\n  arrow-rotate-left: @fa-var-arrow-rotate-left;\n  arrow-left-rotate: @fa-var-arrow-left-rotate;\n  arrow-rotate-back: @fa-var-arrow-rotate-back;\n  arrow-rotate-backward: @fa-var-arrow-rotate-backward;\n  undo: @fa-var-undo;\n  arrow-rotate-right: @fa-var-arrow-rotate-right;\n  arrow-right-rotate: @fa-var-arrow-right-rotate;\n  arrow-rotate-forward: @fa-var-arrow-rotate-forward;\n  redo: @fa-var-redo;\n  arrow-trend-down: @fa-var-arrow-trend-down;\n  arrow-trend-up: @fa-var-arrow-trend-up;\n  arrow-turn-down: @fa-var-arrow-turn-down;\n  level-down: @fa-var-level-down;\n  arrow-turn-up: @fa-var-arrow-turn-up;\n  level-up: @fa-var-level-up;\n  arrow-up: @fa-var-arrow-up;\n  arrow-up-1-9: @fa-var-arrow-up-1-9;\n  sort-numeric-up: @fa-var-sort-numeric-up;\n  arrow-up-9-1: @fa-var-arrow-up-9-1;\n  sort-numeric-up-alt: @fa-var-sort-numeric-up-alt;\n  arrow-up-a-z: @fa-var-arrow-up-a-z;\n  sort-alpha-up: @fa-var-sort-alpha-up;\n  arrow-up-from-bracket: @fa-var-arrow-up-from-bracket;\n  arrow-up-long: @fa-var-arrow-up-long;\n  long-arrow-up: @fa-var-long-arrow-up;\n  arrow-up-right-from-square: @fa-var-arrow-up-right-from-square;\n  external-link: @fa-var-external-link;\n  arrow-up-short-wide: @fa-var-arrow-up-short-wide;\n  sort-amount-up-alt: @fa-var-sort-amount-up-alt;\n  arrow-up-wide-short: @fa-var-arrow-up-wide-short;\n  sort-amount-up: @fa-var-sort-amount-up;\n  arrow-up-z-a: @fa-var-arrow-up-z-a;\n  sort-alpha-up-alt: @fa-var-sort-alpha-up-alt;\n  arrows-left-right: @fa-var-arrows-left-right;\n  arrows-h: @fa-var-arrows-h;\n  arrows-rotate: @fa-var-arrows-rotate;\n  refresh: @fa-var-refresh;\n  sync: @fa-var-sync;\n  arrows-up-down: @fa-var-arrows-up-down;\n  arrows-v: @fa-var-arrows-v;\n  arrows-up-down-left-right: @fa-var-arrows-up-down-left-right;\n  arrows: @fa-var-arrows;\n  asterisk: @fa-var-asterisk;\n  at: @fa-var-at;\n  atom: @fa-var-atom;\n  audio-description: @fa-var-audio-description;\n  austral-sign: @fa-var-austral-sign;\n  award: @fa-var-award;\n  b: @fa-var-b;\n  baby: @fa-var-baby;\n  baby-carriage: @fa-var-baby-carriage;\n  carriage-baby: @fa-var-carriage-baby;\n  backward: @fa-var-backward;\n  backward-fast: @fa-var-backward-fast;\n  fast-backward: @fa-var-fast-backward;\n  backward-step: @fa-var-backward-step;\n  step-backward: @fa-var-step-backward;\n  bacon: @fa-var-bacon;\n  bacteria: @fa-var-bacteria;\n  bacterium: @fa-var-bacterium;\n  bag-shopping: @fa-var-bag-shopping;\n  shopping-bag: @fa-var-shopping-bag;\n  bahai: @fa-var-bahai;\n  baht-sign: @fa-var-baht-sign;\n  ban: @fa-var-ban;\n  cancel: @fa-var-cancel;\n  ban-smoking: @fa-var-ban-smoking;\n  smoking-ban: @fa-var-smoking-ban;\n  bandage: @fa-var-bandage;\n  band-aid: @fa-var-band-aid;\n  barcode: @fa-var-barcode;\n  bars: @fa-var-bars;\n  navicon: @fa-var-navicon;\n  bars-progress: @fa-var-bars-progress;\n  tasks-alt: @fa-var-tasks-alt;\n  bars-staggered: @fa-var-bars-staggered;\n  reorder: @fa-var-reorder;\n  stream: @fa-var-stream;\n  baseball: @fa-var-baseball;\n  baseball-ball: @fa-var-baseball-ball;\n  baseball-bat-ball: @fa-var-baseball-bat-ball;\n  basket-shopping: @fa-var-basket-shopping;\n  shopping-basket: @fa-var-shopping-basket;\n  basketball: @fa-var-basketball;\n  basketball-ball: @fa-var-basketball-ball;\n  bath: @fa-var-bath;\n  bathtub: @fa-var-bathtub;\n  battery-empty: @fa-var-battery-empty;\n  battery-0: @fa-var-battery-0;\n  battery-full: @fa-var-battery-full;\n  battery: @fa-var-battery;\n  battery-5: @fa-var-battery-5;\n  battery-half: @fa-var-battery-half;\n  battery-3: @fa-var-battery-3;\n  battery-quarter: @fa-var-battery-quarter;\n  battery-2: @fa-var-battery-2;\n  battery-three-quarters: @fa-var-battery-three-quarters;\n  battery-4: @fa-var-battery-4;\n  bed: @fa-var-bed;\n  bed-pulse: @fa-var-bed-pulse;\n  procedures: @fa-var-procedures;\n  beer-mug-empty: @fa-var-beer-mug-empty;\n  beer: @fa-var-beer;\n  bell: @fa-var-bell;\n  bell-concierge: @fa-var-bell-concierge;\n  concierge-bell: @fa-var-concierge-bell;\n  bell-slash: @fa-var-bell-slash;\n  bezier-curve: @fa-var-bezier-curve;\n  bicycle: @fa-var-bicycle;\n  binoculars: @fa-var-binoculars;\n  biohazard: @fa-var-biohazard;\n  bitcoin-sign: @fa-var-bitcoin-sign;\n  blender: @fa-var-blender;\n  blender-phone: @fa-var-blender-phone;\n  blog: @fa-var-blog;\n  bold: @fa-var-bold;\n  bolt: @fa-var-bolt;\n  zap: @fa-var-zap;\n  bolt-lightning: @fa-var-bolt-lightning;\n  bomb: @fa-var-bomb;\n  bone: @fa-var-bone;\n  bong: @fa-var-bong;\n  book: @fa-var-book;\n  book-atlas: @fa-var-book-atlas;\n  atlas: @fa-var-atlas;\n  book-bible: @fa-var-book-bible;\n  bible: @fa-var-bible;\n  book-journal-whills: @fa-var-book-journal-whills;\n  journal-whills: @fa-var-journal-whills;\n  book-medical: @fa-var-book-medical;\n  book-open: @fa-var-book-open;\n  book-open-reader: @fa-var-book-open-reader;\n  book-reader: @fa-var-book-reader;\n  book-quran: @fa-var-book-quran;\n  quran: @fa-var-quran;\n  book-skull: @fa-var-book-skull;\n  book-dead: @fa-var-book-dead;\n  bookmark: @fa-var-bookmark;\n  border-all: @fa-var-border-all;\n  border-none: @fa-var-border-none;\n  border-top-left: @fa-var-border-top-left;\n  border-style: @fa-var-border-style;\n  bowling-ball: @fa-var-bowling-ball;\n  box: @fa-var-box;\n  box-archive: @fa-var-box-archive;\n  archive: @fa-var-archive;\n  box-open: @fa-var-box-open;\n  box-tissue: @fa-var-box-tissue;\n  boxes-stacked: @fa-var-boxes-stacked;\n  boxes: @fa-var-boxes;\n  boxes-alt: @fa-var-boxes-alt;\n  braille: @fa-var-braille;\n  brain: @fa-var-brain;\n  brazilian-real-sign: @fa-var-brazilian-real-sign;\n  bread-slice: @fa-var-bread-slice;\n  briefcase: @fa-var-briefcase;\n  briefcase-medical: @fa-var-briefcase-medical;\n  broom: @fa-var-broom;\n  broom-ball: @fa-var-broom-ball;\n  quidditch: @fa-var-quidditch;\n  quidditch-broom-ball: @fa-var-quidditch-broom-ball;\n  brush: @fa-var-brush;\n  bug: @fa-var-bug;\n  bug-slash: @fa-var-bug-slash;\n  building: @fa-var-building;\n  building-columns: @fa-var-building-columns;\n  bank: @fa-var-bank;\n  institution: @fa-var-institution;\n  museum: @fa-var-museum;\n  university: @fa-var-university;\n  bullhorn: @fa-var-bullhorn;\n  bullseye: @fa-var-bullseye;\n  burger: @fa-var-burger;\n  hamburger: @fa-var-hamburger;\n  bus: @fa-var-bus;\n  bus-simple: @fa-var-bus-simple;\n  bus-alt: @fa-var-bus-alt;\n  business-time: @fa-var-business-time;\n  briefcase-clock: @fa-var-briefcase-clock;\n  c: @fa-var-c;\n  cake-candles: @fa-var-cake-candles;\n  birthday-cake: @fa-var-birthday-cake;\n  cake: @fa-var-cake;\n  calculator: @fa-var-calculator;\n  calendar: @fa-var-calendar;\n  calendar-check: @fa-var-calendar-check;\n  calendar-day: @fa-var-calendar-day;\n  calendar-days: @fa-var-calendar-days;\n  calendar-alt: @fa-var-calendar-alt;\n  calendar-minus: @fa-var-calendar-minus;\n  calendar-plus: @fa-var-calendar-plus;\n  calendar-week: @fa-var-calendar-week;\n  calendar-xmark: @fa-var-calendar-xmark;\n  calendar-times: @fa-var-calendar-times;\n  camera: @fa-var-camera;\n  camera-alt: @fa-var-camera-alt;\n  camera-retro: @fa-var-camera-retro;\n  camera-rotate: @fa-var-camera-rotate;\n  campground: @fa-var-campground;\n  candy-cane: @fa-var-candy-cane;\n  cannabis: @fa-var-cannabis;\n  capsules: @fa-var-capsules;\n  car: @fa-var-car;\n  automobile: @fa-var-automobile;\n  car-battery: @fa-var-car-battery;\n  battery-car: @fa-var-battery-car;\n  car-crash: @fa-var-car-crash;\n  car-rear: @fa-var-car-rear;\n  car-alt: @fa-var-car-alt;\n  car-side: @fa-var-car-side;\n  caravan: @fa-var-caravan;\n  caret-down: @fa-var-caret-down;\n  caret-left: @fa-var-caret-left;\n  caret-right: @fa-var-caret-right;\n  caret-up: @fa-var-caret-up;\n  carrot: @fa-var-carrot;\n  cart-arrow-down: @fa-var-cart-arrow-down;\n  cart-flatbed: @fa-var-cart-flatbed;\n  dolly-flatbed: @fa-var-dolly-flatbed;\n  cart-flatbed-suitcase: @fa-var-cart-flatbed-suitcase;\n  luggage-cart: @fa-var-luggage-cart;\n  cart-plus: @fa-var-cart-plus;\n  cart-shopping: @fa-var-cart-shopping;\n  shopping-cart: @fa-var-shopping-cart;\n  cash-register: @fa-var-cash-register;\n  cat: @fa-var-cat;\n  cedi-sign: @fa-var-cedi-sign;\n  cent-sign: @fa-var-cent-sign;\n  certificate: @fa-var-certificate;\n  chair: @fa-var-chair;\n  chalkboard: @fa-var-chalkboard;\n  blackboard: @fa-var-blackboard;\n  chalkboard-user: @fa-var-chalkboard-user;\n  chalkboard-teacher: @fa-var-chalkboard-teacher;\n  champagne-glasses: @fa-var-champagne-glasses;\n  glass-cheers: @fa-var-glass-cheers;\n  charging-station: @fa-var-charging-station;\n  chart-area: @fa-var-chart-area;\n  area-chart: @fa-var-area-chart;\n  chart-bar: @fa-var-chart-bar;\n  bar-chart: @fa-var-bar-chart;\n  chart-column: @fa-var-chart-column;\n  chart-gantt: @fa-var-chart-gantt;\n  chart-line: @fa-var-chart-line;\n  line-chart: @fa-var-line-chart;\n  chart-pie: @fa-var-chart-pie;\n  pie-chart: @fa-var-pie-chart;\n  check: @fa-var-check;\n  check-double: @fa-var-check-double;\n  check-to-slot: @fa-var-check-to-slot;\n  vote-yea: @fa-var-vote-yea;\n  cheese: @fa-var-cheese;\n  chess: @fa-var-chess;\n  chess-bishop: @fa-var-chess-bishop;\n  chess-board: @fa-var-chess-board;\n  chess-king: @fa-var-chess-king;\n  chess-knight: @fa-var-chess-knight;\n  chess-pawn: @fa-var-chess-pawn;\n  chess-queen: @fa-var-chess-queen;\n  chess-rook: @fa-var-chess-rook;\n  chevron-down: @fa-var-chevron-down;\n  chevron-left: @fa-var-chevron-left;\n  chevron-right: @fa-var-chevron-right;\n  chevron-up: @fa-var-chevron-up;\n  child: @fa-var-child;\n  church: @fa-var-church;\n  circle: @fa-var-circle;\n  circle-arrow-down: @fa-var-circle-arrow-down;\n  arrow-circle-down: @fa-var-arrow-circle-down;\n  circle-arrow-left: @fa-var-circle-arrow-left;\n  arrow-circle-left: @fa-var-arrow-circle-left;\n  circle-arrow-right: @fa-var-circle-arrow-right;\n  arrow-circle-right: @fa-var-arrow-circle-right;\n  circle-arrow-up: @fa-var-circle-arrow-up;\n  arrow-circle-up: @fa-var-arrow-circle-up;\n  circle-check: @fa-var-circle-check;\n  check-circle: @fa-var-check-circle;\n  circle-chevron-down: @fa-var-circle-chevron-down;\n  chevron-circle-down: @fa-var-chevron-circle-down;\n  circle-chevron-left: @fa-var-circle-chevron-left;\n  chevron-circle-left: @fa-var-chevron-circle-left;\n  circle-chevron-right: @fa-var-circle-chevron-right;\n  chevron-circle-right: @fa-var-chevron-circle-right;\n  circle-chevron-up: @fa-var-circle-chevron-up;\n  chevron-circle-up: @fa-var-chevron-circle-up;\n  circle-dollar-to-slot: @fa-var-circle-dollar-to-slot;\n  donate: @fa-var-donate;\n  circle-dot: @fa-var-circle-dot;\n  dot-circle: @fa-var-dot-circle;\n  circle-down: @fa-var-circle-down;\n  arrow-alt-circle-down: @fa-var-arrow-alt-circle-down;\n  circle-exclamation: @fa-var-circle-exclamation;\n  exclamation-circle: @fa-var-exclamation-circle;\n  circle-h: @fa-var-circle-h;\n  hospital-symbol: @fa-var-hospital-symbol;\n  circle-half-stroke: @fa-var-circle-half-stroke;\n  adjust: @fa-var-adjust;\n  circle-info: @fa-var-circle-info;\n  info-circle: @fa-var-info-circle;\n  circle-left: @fa-var-circle-left;\n  arrow-alt-circle-left: @fa-var-arrow-alt-circle-left;\n  circle-minus: @fa-var-circle-minus;\n  minus-circle: @fa-var-minus-circle;\n  circle-notch: @fa-var-circle-notch;\n  circle-pause: @fa-var-circle-pause;\n  pause-circle: @fa-var-pause-circle;\n  circle-play: @fa-var-circle-play;\n  play-circle: @fa-var-play-circle;\n  circle-plus: @fa-var-circle-plus;\n  plus-circle: @fa-var-plus-circle;\n  circle-question: @fa-var-circle-question;\n  question-circle: @fa-var-question-circle;\n  circle-radiation: @fa-var-circle-radiation;\n  radiation-alt: @fa-var-radiation-alt;\n  circle-right: @fa-var-circle-right;\n  arrow-alt-circle-right: @fa-var-arrow-alt-circle-right;\n  circle-stop: @fa-var-circle-stop;\n  stop-circle: @fa-var-stop-circle;\n  circle-up: @fa-var-circle-up;\n  arrow-alt-circle-up: @fa-var-arrow-alt-circle-up;\n  circle-user: @fa-var-circle-user;\n  user-circle: @fa-var-user-circle;\n  circle-xmark: @fa-var-circle-xmark;\n  times-circle: @fa-var-times-circle;\n  xmark-circle: @fa-var-xmark-circle;\n  city: @fa-var-city;\n  clapperboard: @fa-var-clapperboard;\n  clipboard: @fa-var-clipboard;\n  clipboard-check: @fa-var-clipboard-check;\n  clipboard-list: @fa-var-clipboard-list;\n  clock: @fa-var-clock;\n  clock-four: @fa-var-clock-four;\n  clock-rotate-left: @fa-var-clock-rotate-left;\n  history: @fa-var-history;\n  clone: @fa-var-clone;\n  closed-captioning: @fa-var-closed-captioning;\n  cloud: @fa-var-cloud;\n  cloud-arrow-down: @fa-var-cloud-arrow-down;\n  cloud-download: @fa-var-cloud-download;\n  cloud-download-alt: @fa-var-cloud-download-alt;\n  cloud-arrow-up: @fa-var-cloud-arrow-up;\n  cloud-upload: @fa-var-cloud-upload;\n  cloud-upload-alt: @fa-var-cloud-upload-alt;\n  cloud-meatball: @fa-var-cloud-meatball;\n  cloud-moon: @fa-var-cloud-moon;\n  cloud-moon-rain: @fa-var-cloud-moon-rain;\n  cloud-rain: @fa-var-cloud-rain;\n  cloud-showers-heavy: @fa-var-cloud-showers-heavy;\n  cloud-sun: @fa-var-cloud-sun;\n  cloud-sun-rain: @fa-var-cloud-sun-rain;\n  clover: @fa-var-clover;\n  code: @fa-var-code;\n  code-branch: @fa-var-code-branch;\n  code-commit: @fa-var-code-commit;\n  code-compare: @fa-var-code-compare;\n  code-fork: @fa-var-code-fork;\n  code-merge: @fa-var-code-merge;\n  code-pull-request: @fa-var-code-pull-request;\n  coins: @fa-var-coins;\n  colon-sign: @fa-var-colon-sign;\n  comment: @fa-var-comment;\n  comment-dollar: @fa-var-comment-dollar;\n  comment-dots: @fa-var-comment-dots;\n  commenting: @fa-var-commenting;\n  comment-medical: @fa-var-comment-medical;\n  comment-slash: @fa-var-comment-slash;\n  comment-sms: @fa-var-comment-sms;\n  sms: @fa-var-sms;\n  comments: @fa-var-comments;\n  comments-dollar: @fa-var-comments-dollar;\n  compact-disc: @fa-var-compact-disc;\n  compass: @fa-var-compass;\n  compass-drafting: @fa-var-compass-drafting;\n  drafting-compass: @fa-var-drafting-compass;\n  compress: @fa-var-compress;\n  computer-mouse: @fa-var-computer-mouse;\n  mouse: @fa-var-mouse;\n  cookie: @fa-var-cookie;\n  cookie-bite: @fa-var-cookie-bite;\n  copy: @fa-var-copy;\n  copyright: @fa-var-copyright;\n  couch: @fa-var-couch;\n  credit-card: @fa-var-credit-card;\n  credit-card-alt: @fa-var-credit-card-alt;\n  crop: @fa-var-crop;\n  crop-simple: @fa-var-crop-simple;\n  crop-alt: @fa-var-crop-alt;\n  cross: @fa-var-cross;\n  crosshairs: @fa-var-crosshairs;\n  crow: @fa-var-crow;\n  crown: @fa-var-crown;\n  crutch: @fa-var-crutch;\n  cruzeiro-sign: @fa-var-cruzeiro-sign;\n  cube: @fa-var-cube;\n  cubes: @fa-var-cubes;\n  d: @fa-var-d;\n  database: @fa-var-database;\n  delete-left: @fa-var-delete-left;\n  backspace: @fa-var-backspace;\n  democrat: @fa-var-democrat;\n  desktop: @fa-var-desktop;\n  desktop-alt: @fa-var-desktop-alt;\n  dharmachakra: @fa-var-dharmachakra;\n  diagram-next: @fa-var-diagram-next;\n  diagram-predecessor: @fa-var-diagram-predecessor;\n  diagram-project: @fa-var-diagram-project;\n  project-diagram: @fa-var-project-diagram;\n  diagram-successor: @fa-var-diagram-successor;\n  diamond: @fa-var-diamond;\n  diamond-turn-right: @fa-var-diamond-turn-right;\n  directions: @fa-var-directions;\n  dice: @fa-var-dice;\n  dice-d20: @fa-var-dice-d20;\n  dice-d6: @fa-var-dice-d6;\n  dice-five: @fa-var-dice-five;\n  dice-four: @fa-var-dice-four;\n  dice-one: @fa-var-dice-one;\n  dice-six: @fa-var-dice-six;\n  dice-three: @fa-var-dice-three;\n  dice-two: @fa-var-dice-two;\n  disease: @fa-var-disease;\n  divide: @fa-var-divide;\n  dna: @fa-var-dna;\n  dog: @fa-var-dog;\n  dollar-sign: @fa-var-dollar-sign;\n  dollar: @fa-var-dollar;\n  usd: @fa-var-usd;\n  dolly: @fa-var-dolly;\n  dolly-box: @fa-var-dolly-box;\n  dong-sign: @fa-var-dong-sign;\n  door-closed: @fa-var-door-closed;\n  door-open: @fa-var-door-open;\n  dove: @fa-var-dove;\n  down-left-and-up-right-to-center: @fa-var-down-left-and-up-right-to-center;\n  compress-alt: @fa-var-compress-alt;\n  down-long: @fa-var-down-long;\n  long-arrow-alt-down: @fa-var-long-arrow-alt-down;\n  download: @fa-var-download;\n  dragon: @fa-var-dragon;\n  draw-polygon: @fa-var-draw-polygon;\n  droplet: @fa-var-droplet;\n  tint: @fa-var-tint;\n  droplet-slash: @fa-var-droplet-slash;\n  tint-slash: @fa-var-tint-slash;\n  drum: @fa-var-drum;\n  drum-steelpan: @fa-var-drum-steelpan;\n  drumstick-bite: @fa-var-drumstick-bite;\n  dumbbell: @fa-var-dumbbell;\n  dumpster: @fa-var-dumpster;\n  dumpster-fire: @fa-var-dumpster-fire;\n  dungeon: @fa-var-dungeon;\n  e: @fa-var-e;\n  ear-deaf: @fa-var-ear-deaf;\n  deaf: @fa-var-deaf;\n  deafness: @fa-var-deafness;\n  hard-of-hearing: @fa-var-hard-of-hearing;\n  ear-listen: @fa-var-ear-listen;\n  assistive-listening-systems: @fa-var-assistive-listening-systems;\n  earth-africa: @fa-var-earth-africa;\n  globe-africa: @fa-var-globe-africa;\n  earth-americas: @fa-var-earth-americas;\n  earth: @fa-var-earth;\n  earth-america: @fa-var-earth-america;\n  globe-americas: @fa-var-globe-americas;\n  earth-asia: @fa-var-earth-asia;\n  globe-asia: @fa-var-globe-asia;\n  earth-europe: @fa-var-earth-europe;\n  globe-europe: @fa-var-globe-europe;\n  earth-oceania: @fa-var-earth-oceania;\n  globe-oceania: @fa-var-globe-oceania;\n  egg: @fa-var-egg;\n  eject: @fa-var-eject;\n  elevator: @fa-var-elevator;\n  ellipsis: @fa-var-ellipsis;\n  ellipsis-h: @fa-var-ellipsis-h;\n  ellipsis-vertical: @fa-var-ellipsis-vertical;\n  ellipsis-v: @fa-var-ellipsis-v;\n  envelope: @fa-var-envelope;\n  envelope-open: @fa-var-envelope-open;\n  envelope-open-text: @fa-var-envelope-open-text;\n  envelopes-bulk: @fa-var-envelopes-bulk;\n  mail-bulk: @fa-var-mail-bulk;\n  equals: @fa-var-equals;\n  eraser: @fa-var-eraser;\n  ethernet: @fa-var-ethernet;\n  euro-sign: @fa-var-euro-sign;\n  eur: @fa-var-eur;\n  euro: @fa-var-euro;\n  exclamation: @fa-var-exclamation;\n  expand: @fa-var-expand;\n  eye: @fa-var-eye;\n  eye-dropper: @fa-var-eye-dropper;\n  eye-dropper-empty: @fa-var-eye-dropper-empty;\n  eyedropper: @fa-var-eyedropper;\n  eye-low-vision: @fa-var-eye-low-vision;\n  low-vision: @fa-var-low-vision;\n  eye-slash: @fa-var-eye-slash;\n  f: @fa-var-f;\n  face-angry: @fa-var-face-angry;\n  angry: @fa-var-angry;\n  face-dizzy: @fa-var-face-dizzy;\n  dizzy: @fa-var-dizzy;\n  face-flushed: @fa-var-face-flushed;\n  flushed: @fa-var-flushed;\n  face-frown: @fa-var-face-frown;\n  frown: @fa-var-frown;\n  face-frown-open: @fa-var-face-frown-open;\n  frown-open: @fa-var-frown-open;\n  face-grimace: @fa-var-face-grimace;\n  grimace: @fa-var-grimace;\n  face-grin: @fa-var-face-grin;\n  grin: @fa-var-grin;\n  face-grin-beam: @fa-var-face-grin-beam;\n  grin-beam: @fa-var-grin-beam;\n  face-grin-beam-sweat: @fa-var-face-grin-beam-sweat;\n  grin-beam-sweat: @fa-var-grin-beam-sweat;\n  face-grin-hearts: @fa-var-face-grin-hearts;\n  grin-hearts: @fa-var-grin-hearts;\n  face-grin-squint: @fa-var-face-grin-squint;\n  grin-squint: @fa-var-grin-squint;\n  face-grin-squint-tears: @fa-var-face-grin-squint-tears;\n  grin-squint-tears: @fa-var-grin-squint-tears;\n  face-grin-stars: @fa-var-face-grin-stars;\n  grin-stars: @fa-var-grin-stars;\n  face-grin-tears: @fa-var-face-grin-tears;\n  grin-tears: @fa-var-grin-tears;\n  face-grin-tongue: @fa-var-face-grin-tongue;\n  grin-tongue: @fa-var-grin-tongue;\n  face-grin-tongue-squint: @fa-var-face-grin-tongue-squint;\n  grin-tongue-squint: @fa-var-grin-tongue-squint;\n  face-grin-tongue-wink: @fa-var-face-grin-tongue-wink;\n  grin-tongue-wink: @fa-var-grin-tongue-wink;\n  face-grin-wide: @fa-var-face-grin-wide;\n  grin-alt: @fa-var-grin-alt;\n  face-grin-wink: @fa-var-face-grin-wink;\n  grin-wink: @fa-var-grin-wink;\n  face-kiss: @fa-var-face-kiss;\n  kiss: @fa-var-kiss;\n  face-kiss-beam: @fa-var-face-kiss-beam;\n  kiss-beam: @fa-var-kiss-beam;\n  face-kiss-wink-heart: @fa-var-face-kiss-wink-heart;\n  kiss-wink-heart: @fa-var-kiss-wink-heart;\n  face-laugh: @fa-var-face-laugh;\n  laugh: @fa-var-laugh;\n  face-laugh-beam: @fa-var-face-laugh-beam;\n  laugh-beam: @fa-var-laugh-beam;\n  face-laugh-squint: @fa-var-face-laugh-squint;\n  laugh-squint: @fa-var-laugh-squint;\n  face-laugh-wink: @fa-var-face-laugh-wink;\n  laugh-wink: @fa-var-laugh-wink;\n  face-meh: @fa-var-face-meh;\n  meh: @fa-var-meh;\n  face-meh-blank: @fa-var-face-meh-blank;\n  meh-blank: @fa-var-meh-blank;\n  face-rolling-eyes: @fa-var-face-rolling-eyes;\n  meh-rolling-eyes: @fa-var-meh-rolling-eyes;\n  face-sad-cry: @fa-var-face-sad-cry;\n  sad-cry: @fa-var-sad-cry;\n  face-sad-tear: @fa-var-face-sad-tear;\n  sad-tear: @fa-var-sad-tear;\n  face-smile: @fa-var-face-smile;\n  smile: @fa-var-smile;\n  face-smile-beam: @fa-var-face-smile-beam;\n  smile-beam: @fa-var-smile-beam;\n  face-smile-wink: @fa-var-face-smile-wink;\n  smile-wink: @fa-var-smile-wink;\n  face-surprise: @fa-var-face-surprise;\n  surprise: @fa-var-surprise;\n  face-tired: @fa-var-face-tired;\n  tired: @fa-var-tired;\n  fan: @fa-var-fan;\n  faucet: @fa-var-faucet;\n  fax: @fa-var-fax;\n  feather: @fa-var-feather;\n  feather-pointed: @fa-var-feather-pointed;\n  feather-alt: @fa-var-feather-alt;\n  file: @fa-var-file;\n  file-arrow-down: @fa-var-file-arrow-down;\n  file-download: @fa-var-file-download;\n  file-arrow-up: @fa-var-file-arrow-up;\n  file-upload: @fa-var-file-upload;\n  file-audio: @fa-var-file-audio;\n  file-code: @fa-var-file-code;\n  file-contract: @fa-var-file-contract;\n  file-csv: @fa-var-file-csv;\n  file-excel: @fa-var-file-excel;\n  file-export: @fa-var-file-export;\n  arrow-right-from-file: @fa-var-arrow-right-from-file;\n  file-image: @fa-var-file-image;\n  file-import: @fa-var-file-import;\n  arrow-right-to-file: @fa-var-arrow-right-to-file;\n  file-invoice: @fa-var-file-invoice;\n  file-invoice-dollar: @fa-var-file-invoice-dollar;\n  file-lines: @fa-var-file-lines;\n  file-alt: @fa-var-file-alt;\n  file-text: @fa-var-file-text;\n  file-medical: @fa-var-file-medical;\n  file-pdf: @fa-var-file-pdf;\n  file-powerpoint: @fa-var-file-powerpoint;\n  file-prescription: @fa-var-file-prescription;\n  file-signature: @fa-var-file-signature;\n  file-video: @fa-var-file-video;\n  file-waveform: @fa-var-file-waveform;\n  file-medical-alt: @fa-var-file-medical-alt;\n  file-word: @fa-var-file-word;\n  file-zipper: @fa-var-file-zipper;\n  file-archive: @fa-var-file-archive;\n  fill: @fa-var-fill;\n  fill-drip: @fa-var-fill-drip;\n  film: @fa-var-film;\n  filter: @fa-var-filter;\n  filter-circle-dollar: @fa-var-filter-circle-dollar;\n  funnel-dollar: @fa-var-funnel-dollar;\n  filter-circle-xmark: @fa-var-filter-circle-xmark;\n  fingerprint: @fa-var-fingerprint;\n  fire: @fa-var-fire;\n  fire-extinguisher: @fa-var-fire-extinguisher;\n  fire-flame-curved: @fa-var-fire-flame-curved;\n  fire-alt: @fa-var-fire-alt;\n  fire-flame-simple: @fa-var-fire-flame-simple;\n  burn: @fa-var-burn;\n  fish: @fa-var-fish;\n  flag: @fa-var-flag;\n  flag-checkered: @fa-var-flag-checkered;\n  flag-usa: @fa-var-flag-usa;\n  flask: @fa-var-flask;\n  floppy-disk: @fa-var-floppy-disk;\n  save: @fa-var-save;\n  florin-sign: @fa-var-florin-sign;\n  folder: @fa-var-folder;\n  folder-minus: @fa-var-folder-minus;\n  folder-open: @fa-var-folder-open;\n  folder-plus: @fa-var-folder-plus;\n  folder-tree: @fa-var-folder-tree;\n  font: @fa-var-font;\n  football: @fa-var-football;\n  football-ball: @fa-var-football-ball;\n  forward: @fa-var-forward;\n  forward-fast: @fa-var-forward-fast;\n  fast-forward: @fa-var-fast-forward;\n  forward-step: @fa-var-forward-step;\n  step-forward: @fa-var-step-forward;\n  franc-sign: @fa-var-franc-sign;\n  frog: @fa-var-frog;\n  futbol: @fa-var-futbol;\n  futbol-ball: @fa-var-futbol-ball;\n  soccer-ball: @fa-var-soccer-ball;\n  g: @fa-var-g;\n  gamepad: @fa-var-gamepad;\n  gas-pump: @fa-var-gas-pump;\n  gauge: @fa-var-gauge;\n  dashboard: @fa-var-dashboard;\n  gauge-med: @fa-var-gauge-med;\n  tachometer-alt-average: @fa-var-tachometer-alt-average;\n  gauge-high: @fa-var-gauge-high;\n  tachometer-alt: @fa-var-tachometer-alt;\n  tachometer-alt-fast: @fa-var-tachometer-alt-fast;\n  gauge-simple: @fa-var-gauge-simple;\n  gauge-simple-med: @fa-var-gauge-simple-med;\n  tachometer-average: @fa-var-tachometer-average;\n  gauge-simple-high: @fa-var-gauge-simple-high;\n  tachometer: @fa-var-tachometer;\n  tachometer-fast: @fa-var-tachometer-fast;\n  gavel: @fa-var-gavel;\n  legal: @fa-var-legal;\n  gear: @fa-var-gear;\n  cog: @fa-var-cog;\n  gears: @fa-var-gears;\n  cogs: @fa-var-cogs;\n  gem: @fa-var-gem;\n  genderless: @fa-var-genderless;\n  ghost: @fa-var-ghost;\n  gift: @fa-var-gift;\n  gifts: @fa-var-gifts;\n  glasses: @fa-var-glasses;\n  globe: @fa-var-globe;\n  golf-ball-tee: @fa-var-golf-ball-tee;\n  golf-ball: @fa-var-golf-ball;\n  gopuram: @fa-var-gopuram;\n  graduation-cap: @fa-var-graduation-cap;\n  mortar-board: @fa-var-mortar-board;\n  greater-than: @fa-var-greater-than;\n  greater-than-equal: @fa-var-greater-than-equal;\n  grip: @fa-var-grip;\n  grip-horizontal: @fa-var-grip-horizontal;\n  grip-lines: @fa-var-grip-lines;\n  grip-lines-vertical: @fa-var-grip-lines-vertical;\n  grip-vertical: @fa-var-grip-vertical;\n  guarani-sign: @fa-var-guarani-sign;\n  guitar: @fa-var-guitar;\n  gun: @fa-var-gun;\n  h: @fa-var-h;\n  hammer: @fa-var-hammer;\n  hamsa: @fa-var-hamsa;\n  hand: @fa-var-hand;\n  hand-paper: @fa-var-hand-paper;\n  hand-back-fist: @fa-var-hand-back-fist;\n  hand-rock: @fa-var-hand-rock;\n  hand-dots: @fa-var-hand-dots;\n  allergies: @fa-var-allergies;\n  hand-fist: @fa-var-hand-fist;\n  fist-raised: @fa-var-fist-raised;\n  hand-holding: @fa-var-hand-holding;\n  hand-holding-dollar: @fa-var-hand-holding-dollar;\n  hand-holding-usd: @fa-var-hand-holding-usd;\n  hand-holding-droplet: @fa-var-hand-holding-droplet;\n  hand-holding-water: @fa-var-hand-holding-water;\n  hand-holding-heart: @fa-var-hand-holding-heart;\n  hand-holding-medical: @fa-var-hand-holding-medical;\n  hand-lizard: @fa-var-hand-lizard;\n  hand-middle-finger: @fa-var-hand-middle-finger;\n  hand-peace: @fa-var-hand-peace;\n  hand-point-down: @fa-var-hand-point-down;\n  hand-point-left: @fa-var-hand-point-left;\n  hand-point-right: @fa-var-hand-point-right;\n  hand-point-up: @fa-var-hand-point-up;\n  hand-pointer: @fa-var-hand-pointer;\n  hand-scissors: @fa-var-hand-scissors;\n  hand-sparkles: @fa-var-hand-sparkles;\n  hand-spock: @fa-var-hand-spock;\n  hands: @fa-var-hands;\n  sign-language: @fa-var-sign-language;\n  signing: @fa-var-signing;\n  hands-asl-interpreting: @fa-var-hands-asl-interpreting;\n  american-sign-language-interpreting: @fa-var-american-sign-language-interpreting;\n  asl-interpreting: @fa-var-asl-interpreting;\n  hands-american-sign-language-interpreting: @fa-var-hands-american-sign-language-interpreting;\n  hands-bubbles: @fa-var-hands-bubbles;\n  hands-wash: @fa-var-hands-wash;\n  hands-clapping: @fa-var-hands-clapping;\n  hands-holding: @fa-var-hands-holding;\n  hands-praying: @fa-var-hands-praying;\n  praying-hands: @fa-var-praying-hands;\n  handshake: @fa-var-handshake;\n  handshake-angle: @fa-var-handshake-angle;\n  hands-helping: @fa-var-hands-helping;\n  handshake-simple-slash: @fa-var-handshake-simple-slash;\n  handshake-alt-slash: @fa-var-handshake-alt-slash;\n  handshake-slash: @fa-var-handshake-slash;\n  hanukiah: @fa-var-hanukiah;\n  hard-drive: @fa-var-hard-drive;\n  hdd: @fa-var-hdd;\n  hashtag: @fa-var-hashtag;\n  hat-cowboy: @fa-var-hat-cowboy;\n  hat-cowboy-side: @fa-var-hat-cowboy-side;\n  hat-wizard: @fa-var-hat-wizard;\n  head-side-cough: @fa-var-head-side-cough;\n  head-side-cough-slash: @fa-var-head-side-cough-slash;\n  head-side-mask: @fa-var-head-side-mask;\n  head-side-virus: @fa-var-head-side-virus;\n  heading: @fa-var-heading;\n  header: @fa-var-header;\n  headphones: @fa-var-headphones;\n  headphones-simple: @fa-var-headphones-simple;\n  headphones-alt: @fa-var-headphones-alt;\n  headset: @fa-var-headset;\n  heart: @fa-var-heart;\n  heart-crack: @fa-var-heart-crack;\n  heart-broken: @fa-var-heart-broken;\n  heart-pulse: @fa-var-heart-pulse;\n  heartbeat: @fa-var-heartbeat;\n  helicopter: @fa-var-helicopter;\n  helmet-safety: @fa-var-helmet-safety;\n  hard-hat: @fa-var-hard-hat;\n  hat-hard: @fa-var-hat-hard;\n  highlighter: @fa-var-highlighter;\n  hippo: @fa-var-hippo;\n  hockey-puck: @fa-var-hockey-puck;\n  holly-berry: @fa-var-holly-berry;\n  horse: @fa-var-horse;\n  horse-head: @fa-var-horse-head;\n  hospital: @fa-var-hospital;\n  hospital-alt: @fa-var-hospital-alt;\n  hospital-wide: @fa-var-hospital-wide;\n  hospital-user: @fa-var-hospital-user;\n  hot-tub-person: @fa-var-hot-tub-person;\n  hot-tub: @fa-var-hot-tub;\n  hotdog: @fa-var-hotdog;\n  hotel: @fa-var-hotel;\n  hourglass: @fa-var-hourglass;\n  hourglass-2: @fa-var-hourglass-2;\n  hourglass-half: @fa-var-hourglass-half;\n  hourglass-empty: @fa-var-hourglass-empty;\n  hourglass-end: @fa-var-hourglass-end;\n  hourglass-3: @fa-var-hourglass-3;\n  hourglass-start: @fa-var-hourglass-start;\n  hourglass-1: @fa-var-hourglass-1;\n  house: @fa-var-house;\n  home: @fa-var-home;\n  home-alt: @fa-var-home-alt;\n  home-lg-alt: @fa-var-home-lg-alt;\n  house-chimney: @fa-var-house-chimney;\n  home-lg: @fa-var-home-lg;\n  house-chimney-crack: @fa-var-house-chimney-crack;\n  house-damage: @fa-var-house-damage;\n  house-chimney-medical: @fa-var-house-chimney-medical;\n  clinic-medical: @fa-var-clinic-medical;\n  house-chimney-user: @fa-var-house-chimney-user;\n  house-chimney-window: @fa-var-house-chimney-window;\n  house-crack: @fa-var-house-crack;\n  house-laptop: @fa-var-house-laptop;\n  laptop-house: @fa-var-laptop-house;\n  house-medical: @fa-var-house-medical;\n  house-user: @fa-var-house-user;\n  home-user: @fa-var-home-user;\n  hryvnia-sign: @fa-var-hryvnia-sign;\n  hryvnia: @fa-var-hryvnia;\n  i: @fa-var-i;\n  i-cursor: @fa-var-i-cursor;\n  ice-cream: @fa-var-ice-cream;\n  icicles: @fa-var-icicles;\n  icons: @fa-var-icons;\n  heart-music-camera-bolt: @fa-var-heart-music-camera-bolt;\n  id-badge: @fa-var-id-badge;\n  id-card: @fa-var-id-card;\n  drivers-license: @fa-var-drivers-license;\n  id-card-clip: @fa-var-id-card-clip;\n  id-card-alt: @fa-var-id-card-alt;\n  igloo: @fa-var-igloo;\n  image: @fa-var-image;\n  image-portrait: @fa-var-image-portrait;\n  portrait: @fa-var-portrait;\n  images: @fa-var-images;\n  inbox: @fa-var-inbox;\n  indent: @fa-var-indent;\n  indian-rupee-sign: @fa-var-indian-rupee-sign;\n  indian-rupee: @fa-var-indian-rupee;\n  inr: @fa-var-inr;\n  industry: @fa-var-industry;\n  infinity: @fa-var-infinity;\n  info: @fa-var-info;\n  italic: @fa-var-italic;\n  j: @fa-var-j;\n  jedi: @fa-var-jedi;\n  jet-fighter: @fa-var-jet-fighter;\n  fighter-jet: @fa-var-fighter-jet;\n  joint: @fa-var-joint;\n  k: @fa-var-k;\n  kaaba: @fa-var-kaaba;\n  key: @fa-var-key;\n  keyboard: @fa-var-keyboard;\n  khanda: @fa-var-khanda;\n  kip-sign: @fa-var-kip-sign;\n  kit-medical: @fa-var-kit-medical;\n  first-aid: @fa-var-first-aid;\n  kiwi-bird: @fa-var-kiwi-bird;\n  l: @fa-var-l;\n  landmark: @fa-var-landmark;\n  language: @fa-var-language;\n  laptop: @fa-var-laptop;\n  laptop-code: @fa-var-laptop-code;\n  laptop-medical: @fa-var-laptop-medical;\n  lari-sign: @fa-var-lari-sign;\n  layer-group: @fa-var-layer-group;\n  leaf: @fa-var-leaf;\n  left-long: @fa-var-left-long;\n  long-arrow-alt-left: @fa-var-long-arrow-alt-left;\n  left-right: @fa-var-left-right;\n  arrows-alt-h: @fa-var-arrows-alt-h;\n  lemon: @fa-var-lemon;\n  less-than: @fa-var-less-than;\n  less-than-equal: @fa-var-less-than-equal;\n  life-ring: @fa-var-life-ring;\n  lightbulb: @fa-var-lightbulb;\n  link: @fa-var-link;\n  chain: @fa-var-chain;\n  link-slash: @fa-var-link-slash;\n  chain-broken: @fa-var-chain-broken;\n  chain-slash: @fa-var-chain-slash;\n  unlink: @fa-var-unlink;\n  lira-sign: @fa-var-lira-sign;\n  list: @fa-var-list;\n  list-squares: @fa-var-list-squares;\n  list-check: @fa-var-list-check;\n  tasks: @fa-var-tasks;\n  list-ol: @fa-var-list-ol;\n  list-1-2: @fa-var-list-1-2;\n  list-numeric: @fa-var-list-numeric;\n  list-ul: @fa-var-list-ul;\n  list-dots: @fa-var-list-dots;\n  litecoin-sign: @fa-var-litecoin-sign;\n  location-arrow: @fa-var-location-arrow;\n  location-crosshairs: @fa-var-location-crosshairs;\n  location: @fa-var-location;\n  location-dot: @fa-var-location-dot;\n  map-marker-alt: @fa-var-map-marker-alt;\n  location-pin: @fa-var-location-pin;\n  map-marker: @fa-var-map-marker;\n  lock: @fa-var-lock;\n  lock-open: @fa-var-lock-open;\n  lungs: @fa-var-lungs;\n  lungs-virus: @fa-var-lungs-virus;\n  m: @fa-var-m;\n  magnet: @fa-var-magnet;\n  magnifying-glass: @fa-var-magnifying-glass;\n  search: @fa-var-search;\n  magnifying-glass-dollar: @fa-var-magnifying-glass-dollar;\n  search-dollar: @fa-var-search-dollar;\n  magnifying-glass-location: @fa-var-magnifying-glass-location;\n  search-location: @fa-var-search-location;\n  magnifying-glass-minus: @fa-var-magnifying-glass-minus;\n  search-minus: @fa-var-search-minus;\n  magnifying-glass-plus: @fa-var-magnifying-glass-plus;\n  search-plus: @fa-var-search-plus;\n  manat-sign: @fa-var-manat-sign;\n  map: @fa-var-map;\n  map-location: @fa-var-map-location;\n  map-marked: @fa-var-map-marked;\n  map-location-dot: @fa-var-map-location-dot;\n  map-marked-alt: @fa-var-map-marked-alt;\n  map-pin: @fa-var-map-pin;\n  marker: @fa-var-marker;\n  mars: @fa-var-mars;\n  mars-and-venus: @fa-var-mars-and-venus;\n  mars-double: @fa-var-mars-double;\n  mars-stroke: @fa-var-mars-stroke;\n  mars-stroke-right: @fa-var-mars-stroke-right;\n  mars-stroke-h: @fa-var-mars-stroke-h;\n  mars-stroke-up: @fa-var-mars-stroke-up;\n  mars-stroke-v: @fa-var-mars-stroke-v;\n  martini-glass: @fa-var-martini-glass;\n  glass-martini-alt: @fa-var-glass-martini-alt;\n  martini-glass-citrus: @fa-var-martini-glass-citrus;\n  cocktail: @fa-var-cocktail;\n  martini-glass-empty: @fa-var-martini-glass-empty;\n  glass-martini: @fa-var-glass-martini;\n  mask: @fa-var-mask;\n  mask-face: @fa-var-mask-face;\n  masks-theater: @fa-var-masks-theater;\n  theater-masks: @fa-var-theater-masks;\n  maximize: @fa-var-maximize;\n  expand-arrows-alt: @fa-var-expand-arrows-alt;\n  medal: @fa-var-medal;\n  memory: @fa-var-memory;\n  menorah: @fa-var-menorah;\n  mercury: @fa-var-mercury;\n  message: @fa-var-message;\n  comment-alt: @fa-var-comment-alt;\n  meteor: @fa-var-meteor;\n  microchip: @fa-var-microchip;\n  microphone: @fa-var-microphone;\n  microphone-lines: @fa-var-microphone-lines;\n  microphone-alt: @fa-var-microphone-alt;\n  microphone-lines-slash: @fa-var-microphone-lines-slash;\n  microphone-alt-slash: @fa-var-microphone-alt-slash;\n  microphone-slash: @fa-var-microphone-slash;\n  microscope: @fa-var-microscope;\n  mill-sign: @fa-var-mill-sign;\n  minimize: @fa-var-minimize;\n  compress-arrows-alt: @fa-var-compress-arrows-alt;\n  minus: @fa-var-minus;\n  subtract: @fa-var-subtract;\n  mitten: @fa-var-mitten;\n  mobile: @fa-var-mobile;\n  mobile-android: @fa-var-mobile-android;\n  mobile-phone: @fa-var-mobile-phone;\n  mobile-button: @fa-var-mobile-button;\n  mobile-screen-button: @fa-var-mobile-screen-button;\n  mobile-alt: @fa-var-mobile-alt;\n  money-bill: @fa-var-money-bill;\n  money-bill-1: @fa-var-money-bill-1;\n  money-bill-alt: @fa-var-money-bill-alt;\n  money-bill-1-wave: @fa-var-money-bill-1-wave;\n  money-bill-wave-alt: @fa-var-money-bill-wave-alt;\n  money-bill-wave: @fa-var-money-bill-wave;\n  money-check: @fa-var-money-check;\n  money-check-dollar: @fa-var-money-check-dollar;\n  money-check-alt: @fa-var-money-check-alt;\n  monument: @fa-var-monument;\n  moon: @fa-var-moon;\n  mortar-pestle: @fa-var-mortar-pestle;\n  mosque: @fa-var-mosque;\n  motorcycle: @fa-var-motorcycle;\n  mountain: @fa-var-mountain;\n  mug-hot: @fa-var-mug-hot;\n  mug-saucer: @fa-var-mug-saucer;\n  coffee: @fa-var-coffee;\n  music: @fa-var-music;\n  n: @fa-var-n;\n  naira-sign: @fa-var-naira-sign;\n  network-wired: @fa-var-network-wired;\n  neuter: @fa-var-neuter;\n  newspaper: @fa-var-newspaper;\n  not-equal: @fa-var-not-equal;\n  note-sticky: @fa-var-note-sticky;\n  sticky-note: @fa-var-sticky-note;\n  notes-medical: @fa-var-notes-medical;\n  o: @fa-var-o;\n  object-group: @fa-var-object-group;\n  object-ungroup: @fa-var-object-ungroup;\n  oil-can: @fa-var-oil-can;\n  om: @fa-var-om;\n  otter: @fa-var-otter;\n  outdent: @fa-var-outdent;\n  dedent: @fa-var-dedent;\n  p: @fa-var-p;\n  pager: @fa-var-pager;\n  paint-roller: @fa-var-paint-roller;\n  paintbrush: @fa-var-paintbrush;\n  paint-brush: @fa-var-paint-brush;\n  palette: @fa-var-palette;\n  pallet: @fa-var-pallet;\n  panorama: @fa-var-panorama;\n  paper-plane: @fa-var-paper-plane;\n  paperclip: @fa-var-paperclip;\n  parachute-box: @fa-var-parachute-box;\n  paragraph: @fa-var-paragraph;\n  passport: @fa-var-passport;\n  paste: @fa-var-paste;\n  file-clipboard: @fa-var-file-clipboard;\n  pause: @fa-var-pause;\n  paw: @fa-var-paw;\n  peace: @fa-var-peace;\n  pen: @fa-var-pen;\n  pen-clip: @fa-var-pen-clip;\n  pen-alt: @fa-var-pen-alt;\n  pen-fancy: @fa-var-pen-fancy;\n  pen-nib: @fa-var-pen-nib;\n  pen-ruler: @fa-var-pen-ruler;\n  pencil-ruler: @fa-var-pencil-ruler;\n  pen-to-square: @fa-var-pen-to-square;\n  edit: @fa-var-edit;\n  pencil: @fa-var-pencil;\n  pencil-alt: @fa-var-pencil-alt;\n  people-arrows-left-right: @fa-var-people-arrows-left-right;\n  people-arrows: @fa-var-people-arrows;\n  people-carry-box: @fa-var-people-carry-box;\n  people-carry: @fa-var-people-carry;\n  pepper-hot: @fa-var-pepper-hot;\n  percent: @fa-var-percent;\n  percentage: @fa-var-percentage;\n  person: @fa-var-person;\n  male: @fa-var-male;\n  person-biking: @fa-var-person-biking;\n  biking: @fa-var-biking;\n  person-booth: @fa-var-person-booth;\n  person-dots-from-line: @fa-var-person-dots-from-line;\n  diagnoses: @fa-var-diagnoses;\n  person-dress: @fa-var-person-dress;\n  female: @fa-var-female;\n  person-hiking: @fa-var-person-hiking;\n  hiking: @fa-var-hiking;\n  person-praying: @fa-var-person-praying;\n  pray: @fa-var-pray;\n  person-running: @fa-var-person-running;\n  running: @fa-var-running;\n  person-skating: @fa-var-person-skating;\n  skating: @fa-var-skating;\n  person-skiing: @fa-var-person-skiing;\n  skiing: @fa-var-skiing;\n  person-skiing-nordic: @fa-var-person-skiing-nordic;\n  skiing-nordic: @fa-var-skiing-nordic;\n  person-snowboarding: @fa-var-person-snowboarding;\n  snowboarding: @fa-var-snowboarding;\n  person-swimming: @fa-var-person-swimming;\n  swimmer: @fa-var-swimmer;\n  person-walking: @fa-var-person-walking;\n  walking: @fa-var-walking;\n  person-walking-with-cane: @fa-var-person-walking-with-cane;\n  blind: @fa-var-blind;\n  peseta-sign: @fa-var-peseta-sign;\n  peso-sign: @fa-var-peso-sign;\n  phone: @fa-var-phone;\n  phone-flip: @fa-var-phone-flip;\n  phone-alt: @fa-var-phone-alt;\n  phone-slash: @fa-var-phone-slash;\n  phone-volume: @fa-var-phone-volume;\n  volume-control-phone: @fa-var-volume-control-phone;\n  photo-film: @fa-var-photo-film;\n  photo-video: @fa-var-photo-video;\n  piggy-bank: @fa-var-piggy-bank;\n  pills: @fa-var-pills;\n  pizza-slice: @fa-var-pizza-slice;\n  place-of-worship: @fa-var-place-of-worship;\n  plane: @fa-var-plane;\n  plane-arrival: @fa-var-plane-arrival;\n  plane-departure: @fa-var-plane-departure;\n  plane-slash: @fa-var-plane-slash;\n  play: @fa-var-play;\n  plug: @fa-var-plug;\n  plus: @fa-var-plus;\n  add: @fa-var-add;\n  plus-minus: @fa-var-plus-minus;\n  podcast: @fa-var-podcast;\n  poo: @fa-var-poo;\n  poo-storm: @fa-var-poo-storm;\n  poo-bolt: @fa-var-poo-bolt;\n  poop: @fa-var-poop;\n  power-off: @fa-var-power-off;\n  prescription: @fa-var-prescription;\n  prescription-bottle: @fa-var-prescription-bottle;\n  prescription-bottle-medical: @fa-var-prescription-bottle-medical;\n  prescription-bottle-alt: @fa-var-prescription-bottle-alt;\n  print: @fa-var-print;\n  pump-medical: @fa-var-pump-medical;\n  pump-soap: @fa-var-pump-soap;\n  puzzle-piece: @fa-var-puzzle-piece;\n  q: @fa-var-q;\n  qrcode: @fa-var-qrcode;\n  question: @fa-var-question;\n  quote-left: @fa-var-quote-left;\n  quote-left-alt: @fa-var-quote-left-alt;\n  quote-right: @fa-var-quote-right;\n  quote-right-alt: @fa-var-quote-right-alt;\n  r: @fa-var-r;\n  radiation: @fa-var-radiation;\n  rainbow: @fa-var-rainbow;\n  receipt: @fa-var-receipt;\n  record-vinyl: @fa-var-record-vinyl;\n  rectangle-ad: @fa-var-rectangle-ad;\n  ad: @fa-var-ad;\n  rectangle-list: @fa-var-rectangle-list;\n  list-alt: @fa-var-list-alt;\n  rectangle-xmark: @fa-var-rectangle-xmark;\n  rectangle-times: @fa-var-rectangle-times;\n  times-rectangle: @fa-var-times-rectangle;\n  window-close: @fa-var-window-close;\n  recycle: @fa-var-recycle;\n  registered: @fa-var-registered;\n  repeat: @fa-var-repeat;\n  reply: @fa-var-reply;\n  mail-reply: @fa-var-mail-reply;\n  reply-all: @fa-var-reply-all;\n  mail-reply-all: @fa-var-mail-reply-all;\n  republican: @fa-var-republican;\n  restroom: @fa-var-restroom;\n  retweet: @fa-var-retweet;\n  ribbon: @fa-var-ribbon;\n  right-from-bracket: @fa-var-right-from-bracket;\n  sign-out-alt: @fa-var-sign-out-alt;\n  right-left: @fa-var-right-left;\n  exchange-alt: @fa-var-exchange-alt;\n  right-long: @fa-var-right-long;\n  long-arrow-alt-right: @fa-var-long-arrow-alt-right;\n  right-to-bracket: @fa-var-right-to-bracket;\n  sign-in-alt: @fa-var-sign-in-alt;\n  ring: @fa-var-ring;\n  road: @fa-var-road;\n  robot: @fa-var-robot;\n  rocket: @fa-var-rocket;\n  rotate: @fa-var-rotate;\n  sync-alt: @fa-var-sync-alt;\n  rotate-left: @fa-var-rotate-left;\n  rotate-back: @fa-var-rotate-back;\n  rotate-backward: @fa-var-rotate-backward;\n  undo-alt: @fa-var-undo-alt;\n  rotate-right: @fa-var-rotate-right;\n  redo-alt: @fa-var-redo-alt;\n  rotate-forward: @fa-var-rotate-forward;\n  route: @fa-var-route;\n  rss: @fa-var-rss;\n  feed: @fa-var-feed;\n  ruble-sign: @fa-var-ruble-sign;\n  rouble: @fa-var-rouble;\n  rub: @fa-var-rub;\n  ruble: @fa-var-ruble;\n  ruler: @fa-var-ruler;\n  ruler-combined: @fa-var-ruler-combined;\n  ruler-horizontal: @fa-var-ruler-horizontal;\n  ruler-vertical: @fa-var-ruler-vertical;\n  rupee-sign: @fa-var-rupee-sign;\n  rupee: @fa-var-rupee;\n  rupiah-sign: @fa-var-rupiah-sign;\n  s: @fa-var-s;\n  sailboat: @fa-var-sailboat;\n  satellite: @fa-var-satellite;\n  satellite-dish: @fa-var-satellite-dish;\n  scale-balanced: @fa-var-scale-balanced;\n  balance-scale: @fa-var-balance-scale;\n  scale-unbalanced: @fa-var-scale-unbalanced;\n  balance-scale-left: @fa-var-balance-scale-left;\n  scale-unbalanced-flip: @fa-var-scale-unbalanced-flip;\n  balance-scale-right: @fa-var-balance-scale-right;\n  school: @fa-var-school;\n  scissors: @fa-var-scissors;\n  cut: @fa-var-cut;\n  screwdriver: @fa-var-screwdriver;\n  screwdriver-wrench: @fa-var-screwdriver-wrench;\n  tools: @fa-var-tools;\n  scroll: @fa-var-scroll;\n  scroll-torah: @fa-var-scroll-torah;\n  torah: @fa-var-torah;\n  sd-card: @fa-var-sd-card;\n  section: @fa-var-section;\n  seedling: @fa-var-seedling;\n  sprout: @fa-var-sprout;\n  server: @fa-var-server;\n  shapes: @fa-var-shapes;\n  triangle-circle-square: @fa-var-triangle-circle-square;\n  share: @fa-var-share;\n  arrow-turn-right: @fa-var-arrow-turn-right;\n  mail-forward: @fa-var-mail-forward;\n  share-from-square: @fa-var-share-from-square;\n  share-square: @fa-var-share-square;\n  share-nodes: @fa-var-share-nodes;\n  share-alt: @fa-var-share-alt;\n  shekel-sign: @fa-var-shekel-sign;\n  ils: @fa-var-ils;\n  shekel: @fa-var-shekel;\n  sheqel: @fa-var-sheqel;\n  sheqel-sign: @fa-var-sheqel-sign;\n  shield: @fa-var-shield;\n  shield-blank: @fa-var-shield-blank;\n  shield-alt: @fa-var-shield-alt;\n  shield-virus: @fa-var-shield-virus;\n  ship: @fa-var-ship;\n  shirt: @fa-var-shirt;\n  t-shirt: @fa-var-t-shirt;\n  tshirt: @fa-var-tshirt;\n  shoe-prints: @fa-var-shoe-prints;\n  shop: @fa-var-shop;\n  store-alt: @fa-var-store-alt;\n  shop-slash: @fa-var-shop-slash;\n  store-alt-slash: @fa-var-store-alt-slash;\n  shower: @fa-var-shower;\n  shrimp: @fa-var-shrimp;\n  shuffle: @fa-var-shuffle;\n  random: @fa-var-random;\n  shuttle-space: @fa-var-shuttle-space;\n  space-shuttle: @fa-var-space-shuttle;\n  sign-hanging: @fa-var-sign-hanging;\n  sign: @fa-var-sign;\n  signal: @fa-var-signal;\n  signal-5: @fa-var-signal-5;\n  signal-perfect: @fa-var-signal-perfect;\n  signature: @fa-var-signature;\n  signs-post: @fa-var-signs-post;\n  map-signs: @fa-var-map-signs;\n  sim-card: @fa-var-sim-card;\n  sink: @fa-var-sink;\n  sitemap: @fa-var-sitemap;\n  skull: @fa-var-skull;\n  skull-crossbones: @fa-var-skull-crossbones;\n  slash: @fa-var-slash;\n  sleigh: @fa-var-sleigh;\n  sliders: @fa-var-sliders;\n  sliders-h: @fa-var-sliders-h;\n  smog: @fa-var-smog;\n  smoking: @fa-var-smoking;\n  snowflake: @fa-var-snowflake;\n  snowman: @fa-var-snowman;\n  snowplow: @fa-var-snowplow;\n  soap: @fa-var-soap;\n  socks: @fa-var-socks;\n  solar-panel: @fa-var-solar-panel;\n  sort: @fa-var-sort;\n  unsorted: @fa-var-unsorted;\n  sort-down: @fa-var-sort-down;\n  sort-desc: @fa-var-sort-desc;\n  sort-up: @fa-var-sort-up;\n  sort-asc: @fa-var-sort-asc;\n  spa: @fa-var-spa;\n  spaghetti-monster-flying: @fa-var-spaghetti-monster-flying;\n  pastafarianism: @fa-var-pastafarianism;\n  spell-check: @fa-var-spell-check;\n  spider: @fa-var-spider;\n  spinner: @fa-var-spinner;\n  splotch: @fa-var-splotch;\n  spoon: @fa-var-spoon;\n  utensil-spoon: @fa-var-utensil-spoon;\n  spray-can: @fa-var-spray-can;\n  spray-can-sparkles: @fa-var-spray-can-sparkles;\n  air-freshener: @fa-var-air-freshener;\n  square: @fa-var-square;\n  square-arrow-up-right: @fa-var-square-arrow-up-right;\n  external-link-square: @fa-var-external-link-square;\n  square-caret-down: @fa-var-square-caret-down;\n  caret-square-down: @fa-var-caret-square-down;\n  square-caret-left: @fa-var-square-caret-left;\n  caret-square-left: @fa-var-caret-square-left;\n  square-caret-right: @fa-var-square-caret-right;\n  caret-square-right: @fa-var-caret-square-right;\n  square-caret-up: @fa-var-square-caret-up;\n  caret-square-up: @fa-var-caret-square-up;\n  square-check: @fa-var-square-check;\n  check-square: @fa-var-check-square;\n  square-envelope: @fa-var-square-envelope;\n  envelope-square: @fa-var-envelope-square;\n  square-full: @fa-var-square-full;\n  square-h: @fa-var-square-h;\n  h-square: @fa-var-h-square;\n  square-minus: @fa-var-square-minus;\n  minus-square: @fa-var-minus-square;\n  square-parking: @fa-var-square-parking;\n  parking: @fa-var-parking;\n  square-pen: @fa-var-square-pen;\n  pen-square: @fa-var-pen-square;\n  pencil-square: @fa-var-pencil-square;\n  square-phone: @fa-var-square-phone;\n  phone-square: @fa-var-phone-square;\n  square-phone-flip: @fa-var-square-phone-flip;\n  phone-square-alt: @fa-var-phone-square-alt;\n  square-plus: @fa-var-square-plus;\n  plus-square: @fa-var-plus-square;\n  square-poll-horizontal: @fa-var-square-poll-horizontal;\n  poll-h: @fa-var-poll-h;\n  square-poll-vertical: @fa-var-square-poll-vertical;\n  poll: @fa-var-poll;\n  square-root-variable: @fa-var-square-root-variable;\n  square-root-alt: @fa-var-square-root-alt;\n  square-rss: @fa-var-square-rss;\n  rss-square: @fa-var-rss-square;\n  square-share-nodes: @fa-var-square-share-nodes;\n  share-alt-square: @fa-var-share-alt-square;\n  square-up-right: @fa-var-square-up-right;\n  external-link-square-alt: @fa-var-external-link-square-alt;\n  square-xmark: @fa-var-square-xmark;\n  times-square: @fa-var-times-square;\n  xmark-square: @fa-var-xmark-square;\n  stairs: @fa-var-stairs;\n  stamp: @fa-var-stamp;\n  star: @fa-var-star;\n  star-and-crescent: @fa-var-star-and-crescent;\n  star-half: @fa-var-star-half;\n  star-half-stroke: @fa-var-star-half-stroke;\n  star-half-alt: @fa-var-star-half-alt;\n  star-of-david: @fa-var-star-of-david;\n  star-of-life: @fa-var-star-of-life;\n  sterling-sign: @fa-var-sterling-sign;\n  gbp: @fa-var-gbp;\n  pound-sign: @fa-var-pound-sign;\n  stethoscope: @fa-var-stethoscope;\n  stop: @fa-var-stop;\n  stopwatch: @fa-var-stopwatch;\n  stopwatch-20: @fa-var-stopwatch-20;\n  store: @fa-var-store;\n  store-slash: @fa-var-store-slash;\n  street-view: @fa-var-street-view;\n  strikethrough: @fa-var-strikethrough;\n  stroopwafel: @fa-var-stroopwafel;\n  subscript: @fa-var-subscript;\n  suitcase: @fa-var-suitcase;\n  suitcase-medical: @fa-var-suitcase-medical;\n  medkit: @fa-var-medkit;\n  suitcase-rolling: @fa-var-suitcase-rolling;\n  sun: @fa-var-sun;\n  superscript: @fa-var-superscript;\n  swatchbook: @fa-var-swatchbook;\n  synagogue: @fa-var-synagogue;\n  syringe: @fa-var-syringe;\n  t: @fa-var-t;\n  table: @fa-var-table;\n  table-cells: @fa-var-table-cells;\n  th: @fa-var-th;\n  table-cells-large: @fa-var-table-cells-large;\n  th-large: @fa-var-th-large;\n  table-columns: @fa-var-table-columns;\n  columns: @fa-var-columns;\n  table-list: @fa-var-table-list;\n  th-list: @fa-var-th-list;\n  table-tennis-paddle-ball: @fa-var-table-tennis-paddle-ball;\n  ping-pong-paddle-ball: @fa-var-ping-pong-paddle-ball;\n  table-tennis: @fa-var-table-tennis;\n  tablet: @fa-var-tablet;\n  tablet-android: @fa-var-tablet-android;\n  tablet-button: @fa-var-tablet-button;\n  tablet-screen-button: @fa-var-tablet-screen-button;\n  tablet-alt: @fa-var-tablet-alt;\n  tablets: @fa-var-tablets;\n  tachograph-digital: @fa-var-tachograph-digital;\n  digital-tachograph: @fa-var-digital-tachograph;\n  tag: @fa-var-tag;\n  tags: @fa-var-tags;\n  tape: @fa-var-tape;\n  taxi: @fa-var-taxi;\n  cab: @fa-var-cab;\n  teeth: @fa-var-teeth;\n  teeth-open: @fa-var-teeth-open;\n  temperature-empty: @fa-var-temperature-empty;\n  temperature-0: @fa-var-temperature-0;\n  thermometer-0: @fa-var-thermometer-0;\n  thermometer-empty: @fa-var-thermometer-empty;\n  temperature-full: @fa-var-temperature-full;\n  temperature-4: @fa-var-temperature-4;\n  thermometer-4: @fa-var-thermometer-4;\n  thermometer-full: @fa-var-thermometer-full;\n  temperature-half: @fa-var-temperature-half;\n  temperature-2: @fa-var-temperature-2;\n  thermometer-2: @fa-var-thermometer-2;\n  thermometer-half: @fa-var-thermometer-half;\n  temperature-high: @fa-var-temperature-high;\n  temperature-low: @fa-var-temperature-low;\n  temperature-quarter: @fa-var-temperature-quarter;\n  temperature-1: @fa-var-temperature-1;\n  thermometer-1: @fa-var-thermometer-1;\n  thermometer-quarter: @fa-var-thermometer-quarter;\n  temperature-three-quarters: @fa-var-temperature-three-quarters;\n  temperature-3: @fa-var-temperature-3;\n  thermometer-3: @fa-var-thermometer-3;\n  thermometer-three-quarters: @fa-var-thermometer-three-quarters;\n  tenge-sign: @fa-var-tenge-sign;\n  tenge: @fa-var-tenge;\n  terminal: @fa-var-terminal;\n  text-height: @fa-var-text-height;\n  text-slash: @fa-var-text-slash;\n  remove-format: @fa-var-remove-format;\n  text-width: @fa-var-text-width;\n  thermometer: @fa-var-thermometer;\n  thumbs-down: @fa-var-thumbs-down;\n  thumbs-up: @fa-var-thumbs-up;\n  thumbtack: @fa-var-thumbtack;\n  thumb-tack: @fa-var-thumb-tack;\n  ticket: @fa-var-ticket;\n  ticket-simple: @fa-var-ticket-simple;\n  ticket-alt: @fa-var-ticket-alt;\n  timeline: @fa-var-timeline;\n  toggle-off: @fa-var-toggle-off;\n  toggle-on: @fa-var-toggle-on;\n  toilet: @fa-var-toilet;\n  toilet-paper: @fa-var-toilet-paper;\n  toilet-paper-slash: @fa-var-toilet-paper-slash;\n  toolbox: @fa-var-toolbox;\n  tooth: @fa-var-tooth;\n  torii-gate: @fa-var-torii-gate;\n  tower-broadcast: @fa-var-tower-broadcast;\n  broadcast-tower: @fa-var-broadcast-tower;\n  tractor: @fa-var-tractor;\n  trademark: @fa-var-trademark;\n  traffic-light: @fa-var-traffic-light;\n  trailer: @fa-var-trailer;\n  train: @fa-var-train;\n  train-subway: @fa-var-train-subway;\n  subway: @fa-var-subway;\n  train-tram: @fa-var-train-tram;\n  tram: @fa-var-tram;\n  transgender: @fa-var-transgender;\n  transgender-alt: @fa-var-transgender-alt;\n  trash: @fa-var-trash;\n  trash-arrow-up: @fa-var-trash-arrow-up;\n  trash-restore: @fa-var-trash-restore;\n  trash-can: @fa-var-trash-can;\n  trash-alt: @fa-var-trash-alt;\n  trash-can-arrow-up: @fa-var-trash-can-arrow-up;\n  trash-restore-alt: @fa-var-trash-restore-alt;\n  tree: @fa-var-tree;\n  triangle-exclamation: @fa-var-triangle-exclamation;\n  exclamation-triangle: @fa-var-exclamation-triangle;\n  warning: @fa-var-warning;\n  trophy: @fa-var-trophy;\n  truck: @fa-var-truck;\n  truck-fast: @fa-var-truck-fast;\n  shipping-fast: @fa-var-shipping-fast;\n  truck-medical: @fa-var-truck-medical;\n  ambulance: @fa-var-ambulance;\n  truck-monster: @fa-var-truck-monster;\n  truck-moving: @fa-var-truck-moving;\n  truck-pickup: @fa-var-truck-pickup;\n  truck-ramp-box: @fa-var-truck-ramp-box;\n  truck-loading: @fa-var-truck-loading;\n  tty: @fa-var-tty;\n  teletype: @fa-var-teletype;\n  turkish-lira-sign: @fa-var-turkish-lira-sign;\n  try: @fa-var-try;\n  turkish-lira: @fa-var-turkish-lira;\n  turn-down: @fa-var-turn-down;\n  level-down-alt: @fa-var-level-down-alt;\n  turn-up: @fa-var-turn-up;\n  level-up-alt: @fa-var-level-up-alt;\n  tv: @fa-var-tv;\n  television: @fa-var-television;\n  tv-alt: @fa-var-tv-alt;\n  u: @fa-var-u;\n  umbrella: @fa-var-umbrella;\n  umbrella-beach: @fa-var-umbrella-beach;\n  underline: @fa-var-underline;\n  universal-access: @fa-var-universal-access;\n  unlock: @fa-var-unlock;\n  unlock-keyhole: @fa-var-unlock-keyhole;\n  unlock-alt: @fa-var-unlock-alt;\n  up-down: @fa-var-up-down;\n  arrows-alt-v: @fa-var-arrows-alt-v;\n  up-down-left-right: @fa-var-up-down-left-right;\n  arrows-alt: @fa-var-arrows-alt;\n  up-long: @fa-var-up-long;\n  long-arrow-alt-up: @fa-var-long-arrow-alt-up;\n  up-right-and-down-left-from-center: @fa-var-up-right-and-down-left-from-center;\n  expand-alt: @fa-var-expand-alt;\n  up-right-from-square: @fa-var-up-right-from-square;\n  external-link-alt: @fa-var-external-link-alt;\n  upload: @fa-var-upload;\n  user: @fa-var-user;\n  user-astronaut: @fa-var-user-astronaut;\n  user-check: @fa-var-user-check;\n  user-clock: @fa-var-user-clock;\n  user-doctor: @fa-var-user-doctor;\n  user-md: @fa-var-user-md;\n  user-gear: @fa-var-user-gear;\n  user-cog: @fa-var-user-cog;\n  user-graduate: @fa-var-user-graduate;\n  user-group: @fa-var-user-group;\n  user-friends: @fa-var-user-friends;\n  user-injured: @fa-var-user-injured;\n  user-large: @fa-var-user-large;\n  user-alt: @fa-var-user-alt;\n  user-large-slash: @fa-var-user-large-slash;\n  user-alt-slash: @fa-var-user-alt-slash;\n  user-lock: @fa-var-user-lock;\n  user-minus: @fa-var-user-minus;\n  user-ninja: @fa-var-user-ninja;\n  user-nurse: @fa-var-user-nurse;\n  user-pen: @fa-var-user-pen;\n  user-edit: @fa-var-user-edit;\n  user-plus: @fa-var-user-plus;\n  user-secret: @fa-var-user-secret;\n  user-shield: @fa-var-user-shield;\n  user-slash: @fa-var-user-slash;\n  user-tag: @fa-var-user-tag;\n  user-tie: @fa-var-user-tie;\n  user-xmark: @fa-var-user-xmark;\n  user-times: @fa-var-user-times;\n  users: @fa-var-users;\n  users-gear: @fa-var-users-gear;\n  users-cog: @fa-var-users-cog;\n  users-slash: @fa-var-users-slash;\n  utensils: @fa-var-utensils;\n  cutlery: @fa-var-cutlery;\n  v: @fa-var-v;\n  van-shuttle: @fa-var-van-shuttle;\n  shuttle-van: @fa-var-shuttle-van;\n  vault: @fa-var-vault;\n  vector-square: @fa-var-vector-square;\n  venus: @fa-var-venus;\n  venus-double: @fa-var-venus-double;\n  venus-mars: @fa-var-venus-mars;\n  vest: @fa-var-vest;\n  vest-patches: @fa-var-vest-patches;\n  vial: @fa-var-vial;\n  vials: @fa-var-vials;\n  video: @fa-var-video;\n  video-camera: @fa-var-video-camera;\n  video-slash: @fa-var-video-slash;\n  vihara: @fa-var-vihara;\n  virus: @fa-var-virus;\n  virus-covid: @fa-var-virus-covid;\n  virus-covid-slash: @fa-var-virus-covid-slash;\n  virus-slash: @fa-var-virus-slash;\n  viruses: @fa-var-viruses;\n  voicemail: @fa-var-voicemail;\n  volleyball: @fa-var-volleyball;\n  volleyball-ball: @fa-var-volleyball-ball;\n  volume-high: @fa-var-volume-high;\n  volume-up: @fa-var-volume-up;\n  volume-low: @fa-var-volume-low;\n  volume-down: @fa-var-volume-down;\n  volume-off: @fa-var-volume-off;\n  volume-xmark: @fa-var-volume-xmark;\n  volume-mute: @fa-var-volume-mute;\n  volume-times: @fa-var-volume-times;\n  vr-cardboard: @fa-var-vr-cardboard;\n  w: @fa-var-w;\n  wallet: @fa-var-wallet;\n  wand-magic: @fa-var-wand-magic;\n  magic: @fa-var-magic;\n  wand-magic-sparkles: @fa-var-wand-magic-sparkles;\n  magic-wand-sparkles: @fa-var-magic-wand-sparkles;\n  wand-sparkles: @fa-var-wand-sparkles;\n  warehouse: @fa-var-warehouse;\n  water: @fa-var-water;\n  water-ladder: @fa-var-water-ladder;\n  ladder-water: @fa-var-ladder-water;\n  swimming-pool: @fa-var-swimming-pool;\n  wave-square: @fa-var-wave-square;\n  weight-hanging: @fa-var-weight-hanging;\n  weight-scale: @fa-var-weight-scale;\n  weight: @fa-var-weight;\n  wheelchair: @fa-var-wheelchair;\n  whiskey-glass: @fa-var-whiskey-glass;\n  glass-whiskey: @fa-var-glass-whiskey;\n  wifi: @fa-var-wifi;\n  wifi-3: @fa-var-wifi-3;\n  wifi-strong: @fa-var-wifi-strong;\n  wind: @fa-var-wind;\n  window-maximize: @fa-var-window-maximize;\n  window-minimize: @fa-var-window-minimize;\n  window-restore: @fa-var-window-restore;\n  wine-bottle: @fa-var-wine-bottle;\n  wine-glass: @fa-var-wine-glass;\n  wine-glass-empty: @fa-var-wine-glass-empty;\n  wine-glass-alt: @fa-var-wine-glass-alt;\n  won-sign: @fa-var-won-sign;\n  krw: @fa-var-krw;\n  won: @fa-var-won;\n  wrench: @fa-var-wrench;\n  x: @fa-var-x;\n  x-ray: @fa-var-x-ray;\n  xmark: @fa-var-xmark;\n  close: @fa-var-close;\n  multiply: @fa-var-multiply;\n  remove: @fa-var-remove;\n  times: @fa-var-times;\n  y: @fa-var-y;\n  yen-sign: @fa-var-yen-sign;\n  cny: @fa-var-cny;\n  jpy: @fa-var-jpy;\n  rmb: @fa-var-rmb;\n  yen: @fa-var-yen;\n  yin-yang: @fa-var-yin-yang;\n  z: @fa-var-z;\n}\n\n.fa-brand-icons() {\n  42-group: @fa-var-42-group;\n  innosoft: @fa-var-innosoft;\n  500px: @fa-var-500px;\n  accessible-icon: @fa-var-accessible-icon;\n  accusoft: @fa-var-accusoft;\n  adn: @fa-var-adn;\n  adversal: @fa-var-adversal;\n  affiliatetheme: @fa-var-affiliatetheme;\n  airbnb: @fa-var-airbnb;\n  algolia: @fa-var-algolia;\n  alipay: @fa-var-alipay;\n  amazon: @fa-var-amazon;\n  amazon-pay: @fa-var-amazon-pay;\n  amilia: @fa-var-amilia;\n  android: @fa-var-android;\n  angellist: @fa-var-angellist;\n  angrycreative: @fa-var-angrycreative;\n  angular: @fa-var-angular;\n  app-store: @fa-var-app-store;\n  app-store-ios: @fa-var-app-store-ios;\n  apper: @fa-var-apper;\n  apple: @fa-var-apple;\n  apple-pay: @fa-var-apple-pay;\n  artstation: @fa-var-artstation;\n  asymmetrik: @fa-var-asymmetrik;\n  atlassian: @fa-var-atlassian;\n  audible: @fa-var-audible;\n  autoprefixer: @fa-var-autoprefixer;\n  avianex: @fa-var-avianex;\n  aviato: @fa-var-aviato;\n  aws: @fa-var-aws;\n  bandcamp: @fa-var-bandcamp;\n  battle-net: @fa-var-battle-net;\n  behance: @fa-var-behance;\n  behance-square: @fa-var-behance-square;\n  bilibili: @fa-var-bilibili;\n  bimobject: @fa-var-bimobject;\n  bitbucket: @fa-var-bitbucket;\n  bitcoin: @fa-var-bitcoin;\n  bity: @fa-var-bity;\n  black-tie: @fa-var-black-tie;\n  blackberry: @fa-var-blackberry;\n  blogger: @fa-var-blogger;\n  blogger-b: @fa-var-blogger-b;\n  bluetooth: @fa-var-bluetooth;\n  bluetooth-b: @fa-var-bluetooth-b;\n  bootstrap: @fa-var-bootstrap;\n  bots: @fa-var-bots;\n  btc: @fa-var-btc;\n  buffer: @fa-var-buffer;\n  buromobelexperte: @fa-var-buromobelexperte;\n  buy-n-large: @fa-var-buy-n-large;\n  buysellads: @fa-var-buysellads;\n  canadian-maple-leaf: @fa-var-canadian-maple-leaf;\n  cc-amazon-pay: @fa-var-cc-amazon-pay;\n  cc-amex: @fa-var-cc-amex;\n  cc-apple-pay: @fa-var-cc-apple-pay;\n  cc-diners-club: @fa-var-cc-diners-club;\n  cc-discover: @fa-var-cc-discover;\n  cc-jcb: @fa-var-cc-jcb;\n  cc-mastercard: @fa-var-cc-mastercard;\n  cc-paypal: @fa-var-cc-paypal;\n  cc-stripe: @fa-var-cc-stripe;\n  cc-visa: @fa-var-cc-visa;\n  centercode: @fa-var-centercode;\n  centos: @fa-var-centos;\n  chrome: @fa-var-chrome;\n  chromecast: @fa-var-chromecast;\n  cloudflare: @fa-var-cloudflare;\n  cloudscale: @fa-var-cloudscale;\n  cloudsmith: @fa-var-cloudsmith;\n  cloudversify: @fa-var-cloudversify;\n  cmplid: @fa-var-cmplid;\n  codepen: @fa-var-codepen;\n  codiepie: @fa-var-codiepie;\n  confluence: @fa-var-confluence;\n  connectdevelop: @fa-var-connectdevelop;\n  contao: @fa-var-contao;\n  cotton-bureau: @fa-var-cotton-bureau;\n  cpanel: @fa-var-cpanel;\n  creative-commons: @fa-var-creative-commons;\n  creative-commons-by: @fa-var-creative-commons-by;\n  creative-commons-nc: @fa-var-creative-commons-nc;\n  creative-commons-nc-eu: @fa-var-creative-commons-nc-eu;\n  creative-commons-nc-jp: @fa-var-creative-commons-nc-jp;\n  creative-commons-nd: @fa-var-creative-commons-nd;\n  creative-commons-pd: @fa-var-creative-commons-pd;\n  creative-commons-pd-alt: @fa-var-creative-commons-pd-alt;\n  creative-commons-remix: @fa-var-creative-commons-remix;\n  creative-commons-sa: @fa-var-creative-commons-sa;\n  creative-commons-sampling: @fa-var-creative-commons-sampling;\n  creative-commons-sampling-plus: @fa-var-creative-commons-sampling-plus;\n  creative-commons-share: @fa-var-creative-commons-share;\n  creative-commons-zero: @fa-var-creative-commons-zero;\n  critical-role: @fa-var-critical-role;\n  css3: @fa-var-css3;\n  css3-alt: @fa-var-css3-alt;\n  cuttlefish: @fa-var-cuttlefish;\n  d-and-d: @fa-var-d-and-d;\n  d-and-d-beyond: @fa-var-d-and-d-beyond;\n  dailymotion: @fa-var-dailymotion;\n  dashcube: @fa-var-dashcube;\n  deezer: @fa-var-deezer;\n  delicious: @fa-var-delicious;\n  deploydog: @fa-var-deploydog;\n  deskpro: @fa-var-deskpro;\n  dev: @fa-var-dev;\n  deviantart: @fa-var-deviantart;\n  dhl: @fa-var-dhl;\n  diaspora: @fa-var-diaspora;\n  digg: @fa-var-digg;\n  digital-ocean: @fa-var-digital-ocean;\n  discord: @fa-var-discord;\n  discourse: @fa-var-discourse;\n  dochub: @fa-var-dochub;\n  docker: @fa-var-docker;\n  draft2digital: @fa-var-draft2digital;\n  dribbble: @fa-var-dribbble;\n  dribbble-square: @fa-var-dribbble-square;\n  dropbox: @fa-var-dropbox;\n  drupal: @fa-var-drupal;\n  dyalog: @fa-var-dyalog;\n  earlybirds: @fa-var-earlybirds;\n  ebay: @fa-var-ebay;\n  edge: @fa-var-edge;\n  edge-legacy: @fa-var-edge-legacy;\n  elementor: @fa-var-elementor;\n  ello: @fa-var-ello;\n  ember: @fa-var-ember;\n  empire: @fa-var-empire;\n  envira: @fa-var-envira;\n  erlang: @fa-var-erlang;\n  ethereum: @fa-var-ethereum;\n  etsy: @fa-var-etsy;\n  evernote: @fa-var-evernote;\n  expeditedssl: @fa-var-expeditedssl;\n  facebook: @fa-var-facebook;\n  facebook-f: @fa-var-facebook-f;\n  facebook-messenger: @fa-var-facebook-messenger;\n  facebook-square: @fa-var-facebook-square;\n  fantasy-flight-games: @fa-var-fantasy-flight-games;\n  fedex: @fa-var-fedex;\n  fedora: @fa-var-fedora;\n  figma: @fa-var-figma;\n  firefox: @fa-var-firefox;\n  firefox-browser: @fa-var-firefox-browser;\n  first-order: @fa-var-first-order;\n  first-order-alt: @fa-var-first-order-alt;\n  firstdraft: @fa-var-firstdraft;\n  flickr: @fa-var-flickr;\n  flipboard: @fa-var-flipboard;\n  fly: @fa-var-fly;\n  font-awesome: @fa-var-font-awesome;\n  font-awesome-flag: @fa-var-font-awesome-flag;\n  font-awesome-logo-full: @fa-var-font-awesome-logo-full;\n  fonticons: @fa-var-fonticons;\n  fonticons-fi: @fa-var-fonticons-fi;\n  fort-awesome: @fa-var-fort-awesome;\n  fort-awesome-alt: @fa-var-fort-awesome-alt;\n  forumbee: @fa-var-forumbee;\n  foursquare: @fa-var-foursquare;\n  free-code-camp: @fa-var-free-code-camp;\n  freebsd: @fa-var-freebsd;\n  fulcrum: @fa-var-fulcrum;\n  galactic-republic: @fa-var-galactic-republic;\n  galactic-senate: @fa-var-galactic-senate;\n  get-pocket: @fa-var-get-pocket;\n  gg: @fa-var-gg;\n  gg-circle: @fa-var-gg-circle;\n  git: @fa-var-git;\n  git-alt: @fa-var-git-alt;\n  git-square: @fa-var-git-square;\n  github: @fa-var-github;\n  github-alt: @fa-var-github-alt;\n  github-square: @fa-var-github-square;\n  gitkraken: @fa-var-gitkraken;\n  gitlab: @fa-var-gitlab;\n  gitter: @fa-var-gitter;\n  glide: @fa-var-glide;\n  glide-g: @fa-var-glide-g;\n  gofore: @fa-var-gofore;\n  golang: @fa-var-golang;\n  goodreads: @fa-var-goodreads;\n  goodreads-g: @fa-var-goodreads-g;\n  google: @fa-var-google;\n  google-drive: @fa-var-google-drive;\n  google-pay: @fa-var-google-pay;\n  google-play: @fa-var-google-play;\n  google-plus: @fa-var-google-plus;\n  google-plus-g: @fa-var-google-plus-g;\n  google-plus-square: @fa-var-google-plus-square;\n  google-wallet: @fa-var-google-wallet;\n  gratipay: @fa-var-gratipay;\n  grav: @fa-var-grav;\n  gripfire: @fa-var-gripfire;\n  grunt: @fa-var-grunt;\n  guilded: @fa-var-guilded;\n  gulp: @fa-var-gulp;\n  hacker-news: @fa-var-hacker-news;\n  hacker-news-square: @fa-var-hacker-news-square;\n  hackerrank: @fa-var-hackerrank;\n  hashnode: @fa-var-hashnode;\n  hips: @fa-var-hips;\n  hire-a-helper: @fa-var-hire-a-helper;\n  hive: @fa-var-hive;\n  hooli: @fa-var-hooli;\n  hornbill: @fa-var-hornbill;\n  hotjar: @fa-var-hotjar;\n  houzz: @fa-var-houzz;\n  html5: @fa-var-html5;\n  hubspot: @fa-var-hubspot;\n  ideal: @fa-var-ideal;\n  imdb: @fa-var-imdb;\n  instagram: @fa-var-instagram;\n  instagram-square: @fa-var-instagram-square;\n  instalod: @fa-var-instalod;\n  intercom: @fa-var-intercom;\n  internet-explorer: @fa-var-internet-explorer;\n  invision: @fa-var-invision;\n  ioxhost: @fa-var-ioxhost;\n  itch-io: @fa-var-itch-io;\n  itunes: @fa-var-itunes;\n  itunes-note: @fa-var-itunes-note;\n  java: @fa-var-java;\n  jedi-order: @fa-var-jedi-order;\n  jenkins: @fa-var-jenkins;\n  jira: @fa-var-jira;\n  joget: @fa-var-joget;\n  joomla: @fa-var-joomla;\n  js: @fa-var-js;\n  js-square: @fa-var-js-square;\n  jsfiddle: @fa-var-jsfiddle;\n  kaggle: @fa-var-kaggle;\n  keybase: @fa-var-keybase;\n  keycdn: @fa-var-keycdn;\n  kickstarter: @fa-var-kickstarter;\n  kickstarter-k: @fa-var-kickstarter-k;\n  korvue: @fa-var-korvue;\n  laravel: @fa-var-laravel;\n  lastfm: @fa-var-lastfm;\n  lastfm-square: @fa-var-lastfm-square;\n  leanpub: @fa-var-leanpub;\n  less: @fa-var-less;\n  line: @fa-var-line;\n  linkedin: @fa-var-linkedin;\n  linkedin-in: @fa-var-linkedin-in;\n  linode: @fa-var-linode;\n  linux: @fa-var-linux;\n  lyft: @fa-var-lyft;\n  magento: @fa-var-magento;\n  mailchimp: @fa-var-mailchimp;\n  mandalorian: @fa-var-mandalorian;\n  markdown: @fa-var-markdown;\n  mastodon: @fa-var-mastodon;\n  maxcdn: @fa-var-maxcdn;\n  mdb: @fa-var-mdb;\n  medapps: @fa-var-medapps;\n  medium: @fa-var-medium;\n  medium-m: @fa-var-medium-m;\n  medrt: @fa-var-medrt;\n  meetup: @fa-var-meetup;\n  megaport: @fa-var-megaport;\n  mendeley: @fa-var-mendeley;\n  microblog: @fa-var-microblog;\n  microsoft: @fa-var-microsoft;\n  mix: @fa-var-mix;\n  mixcloud: @fa-var-mixcloud;\n  mixer: @fa-var-mixer;\n  mizuni: @fa-var-mizuni;\n  modx: @fa-var-modx;\n  monero: @fa-var-monero;\n  napster: @fa-var-napster;\n  neos: @fa-var-neos;\n  nimblr: @fa-var-nimblr;\n  node: @fa-var-node;\n  node-js: @fa-var-node-js;\n  npm: @fa-var-npm;\n  ns8: @fa-var-ns8;\n  nutritionix: @fa-var-nutritionix;\n  octopus-deploy: @fa-var-octopus-deploy;\n  odnoklassniki: @fa-var-odnoklassniki;\n  odnoklassniki-square: @fa-var-odnoklassniki-square;\n  old-republic: @fa-var-old-republic;\n  opencart: @fa-var-opencart;\n  openid: @fa-var-openid;\n  opera: @fa-var-opera;\n  optin-monster: @fa-var-optin-monster;\n  orcid: @fa-var-orcid;\n  osi: @fa-var-osi;\n  padlet: @fa-var-padlet;\n  page4: @fa-var-page4;\n  pagelines: @fa-var-pagelines;\n  palfed: @fa-var-palfed;\n  patreon: @fa-var-patreon;\n  paypal: @fa-var-paypal;\n  perbyte: @fa-var-perbyte;\n  periscope: @fa-var-periscope;\n  phabricator: @fa-var-phabricator;\n  phoenix-framework: @fa-var-phoenix-framework;\n  phoenix-squadron: @fa-var-phoenix-squadron;\n  php: @fa-var-php;\n  pied-piper: @fa-var-pied-piper;\n  pied-piper-alt: @fa-var-pied-piper-alt;\n  pied-piper-hat: @fa-var-pied-piper-hat;\n  pied-piper-pp: @fa-var-pied-piper-pp;\n  pied-piper-square: @fa-var-pied-piper-square;\n  pinterest: @fa-var-pinterest;\n  pinterest-p: @fa-var-pinterest-p;\n  pinterest-square: @fa-var-pinterest-square;\n  pix: @fa-var-pix;\n  playstation: @fa-var-playstation;\n  product-hunt: @fa-var-product-hunt;\n  pushed: @fa-var-pushed;\n  python: @fa-var-python;\n  qq: @fa-var-qq;\n  quinscape: @fa-var-quinscape;\n  quora: @fa-var-quora;\n  r-project: @fa-var-r-project;\n  raspberry-pi: @fa-var-raspberry-pi;\n  ravelry: @fa-var-ravelry;\n  react: @fa-var-react;\n  reacteurope: @fa-var-reacteurope;\n  readme: @fa-var-readme;\n  rebel: @fa-var-rebel;\n  red-river: @fa-var-red-river;\n  reddit: @fa-var-reddit;\n  reddit-alien: @fa-var-reddit-alien;\n  reddit-square: @fa-var-reddit-square;\n  redhat: @fa-var-redhat;\n  renren: @fa-var-renren;\n  replyd: @fa-var-replyd;\n  researchgate: @fa-var-researchgate;\n  resolving: @fa-var-resolving;\n  rev: @fa-var-rev;\n  rocketchat: @fa-var-rocketchat;\n  rockrms: @fa-var-rockrms;\n  rust: @fa-var-rust;\n  safari: @fa-var-safari;\n  salesforce: @fa-var-salesforce;\n  sass: @fa-var-sass;\n  schlix: @fa-var-schlix;\n  scribd: @fa-var-scribd;\n  searchengin: @fa-var-searchengin;\n  sellcast: @fa-var-sellcast;\n  sellsy: @fa-var-sellsy;\n  servicestack: @fa-var-servicestack;\n  shirtsinbulk: @fa-var-shirtsinbulk;\n  shopify: @fa-var-shopify;\n  shopware: @fa-var-shopware;\n  simplybuilt: @fa-var-simplybuilt;\n  sistrix: @fa-var-sistrix;\n  sith: @fa-var-sith;\n  sitrox: @fa-var-sitrox;\n  sketch: @fa-var-sketch;\n  skyatlas: @fa-var-skyatlas;\n  skype: @fa-var-skype;\n  slack: @fa-var-slack;\n  slack-hash: @fa-var-slack-hash;\n  slideshare: @fa-var-slideshare;\n  snapchat: @fa-var-snapchat;\n  snapchat-ghost: @fa-var-snapchat-ghost;\n  snapchat-square: @fa-var-snapchat-square;\n  soundcloud: @fa-var-soundcloud;\n  sourcetree: @fa-var-sourcetree;\n  speakap: @fa-var-speakap;\n  speaker-deck: @fa-var-speaker-deck;\n  spotify: @fa-var-spotify;\n  square-font-awesome: @fa-var-square-font-awesome;\n  square-font-awesome-stroke: @fa-var-square-font-awesome-stroke;\n  font-awesome-alt: @fa-var-font-awesome-alt;\n  squarespace: @fa-var-squarespace;\n  stack-exchange: @fa-var-stack-exchange;\n  stack-overflow: @fa-var-stack-overflow;\n  stackpath: @fa-var-stackpath;\n  staylinked: @fa-var-staylinked;\n  steam: @fa-var-steam;\n  steam-square: @fa-var-steam-square;\n  steam-symbol: @fa-var-steam-symbol;\n  sticker-mule: @fa-var-sticker-mule;\n  strava: @fa-var-strava;\n  stripe: @fa-var-stripe;\n  stripe-s: @fa-var-stripe-s;\n  studiovinari: @fa-var-studiovinari;\n  stumbleupon: @fa-var-stumbleupon;\n  stumbleupon-circle: @fa-var-stumbleupon-circle;\n  superpowers: @fa-var-superpowers;\n  supple: @fa-var-supple;\n  suse: @fa-var-suse;\n  swift: @fa-var-swift;\n  symfony: @fa-var-symfony;\n  teamspeak: @fa-var-teamspeak;\n  telegram: @fa-var-telegram;\n  telegram-plane: @fa-var-telegram-plane;\n  tencent-weibo: @fa-var-tencent-weibo;\n  the-red-yeti: @fa-var-the-red-yeti;\n  themeco: @fa-var-themeco;\n  themeisle: @fa-var-themeisle;\n  think-peaks: @fa-var-think-peaks;\n  tiktok: @fa-var-tiktok;\n  trade-federation: @fa-var-trade-federation;\n  trello: @fa-var-trello;\n  tumblr: @fa-var-tumblr;\n  tumblr-square: @fa-var-tumblr-square;\n  twitch: @fa-var-twitch;\n  twitter: @fa-var-twitter;\n  twitter-square: @fa-var-twitter-square;\n  typo3: @fa-var-typo3;\n  uber: @fa-var-uber;\n  ubuntu: @fa-var-ubuntu;\n  uikit: @fa-var-uikit;\n  umbraco: @fa-var-umbraco;\n  uncharted: @fa-var-uncharted;\n  uniregistry: @fa-var-uniregistry;\n  unity: @fa-var-unity;\n  unsplash: @fa-var-unsplash;\n  untappd: @fa-var-untappd;\n  ups: @fa-var-ups;\n  usb: @fa-var-usb;\n  usps: @fa-var-usps;\n  ussunnah: @fa-var-ussunnah;\n  vaadin: @fa-var-vaadin;\n  viacoin: @fa-var-viacoin;\n  viadeo: @fa-var-viadeo;\n  viadeo-square: @fa-var-viadeo-square;\n  viber: @fa-var-viber;\n  vimeo: @fa-var-vimeo;\n  vimeo-square: @fa-var-vimeo-square;\n  vimeo-v: @fa-var-vimeo-v;\n  vine: @fa-var-vine;\n  vk: @fa-var-vk;\n  vnv: @fa-var-vnv;\n  vuejs: @fa-var-vuejs;\n  watchman-monitoring: @fa-var-watchman-monitoring;\n  waze: @fa-var-waze;\n  weebly: @fa-var-weebly;\n  weibo: @fa-var-weibo;\n  weixin: @fa-var-weixin;\n  whatsapp: @fa-var-whatsapp;\n  whatsapp-square: @fa-var-whatsapp-square;\n  whmcs: @fa-var-whmcs;\n  wikipedia-w: @fa-var-wikipedia-w;\n  windows: @fa-var-windows;\n  wirsindhandwerk: @fa-var-wirsindhandwerk;\n  wsh: @fa-var-wsh;\n  wix: @fa-var-wix;\n  wizards-of-the-coast: @fa-var-wizards-of-the-coast;\n  wodu: @fa-var-wodu;\n  wolf-pack-battalion: @fa-var-wolf-pack-battalion;\n  wordpress: @fa-var-wordpress;\n  wordpress-simple: @fa-var-wordpress-simple;\n  wpbeginner: @fa-var-wpbeginner;\n  wpexplorer: @fa-var-wpexplorer;\n  wpforms: @fa-var-wpforms;\n  wpressr: @fa-var-wpressr;\n  xbox: @fa-var-xbox;\n  xing: @fa-var-xing;\n  xing-square: @fa-var-xing-square;\n  y-combinator: @fa-var-y-combinator;\n  yahoo: @fa-var-yahoo;\n  yammer: @fa-var-yammer;\n  yandex: @fa-var-yandex;\n  yandex-international: @fa-var-yandex-international;\n  yarn: @fa-var-yarn;\n  yelp: @fa-var-yelp;\n  yoast: @fa-var-yoast;\n  youtube: @fa-var-youtube;\n  youtube-square: @fa-var-youtube-square;\n  zhihu: @fa-var-zhihu;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/brands.less",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n@import \"_variables.less\";\n\n:root, :host {\n  --@{fa-css-prefix}-font-brands: normal 400 1em/1 \"Font Awesome 6 Brands\";\n}\n\n@font-face {\n  font-family: 'Font Awesome 6 Brands';\n  font-style: normal;\n  font-weight: 400;\n  font-display: @fa-font-display;\n  src: url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),\n    url('@{fa-font-path}/fa-brands-400.ttf') format('truetype');\n}\n\n.fab,\n.fa-brands {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\neach(.fa-brand-icons(), {\n  .@{fa-css-prefix}-@{key}:before { content: @value; }\n});\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/fontawesome.less",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n// Font Awesome core compile (Web Fonts-based)\n// -------------------------\n\n@import \"_variables.less\";\n@import \"_mixins.less\";\n@import \"_core.less\";\n@import \"_sizing.less\";\n@import \"_fixed-width.less\";\n@import \"_list.less\";\n@import \"_bordered-pulled.less\";\n@import \"_animated.less\";\n@import \"_rotated-flipped.less\";\n@import \"_stacked.less\";\n@import \"_icons.less\";\n@import \"_screen-reader.less\";\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/regular.less",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n@import \"_variables.less\";\n\n:root, :host {\n  --@{fa-css-prefix}-font-regular: normal 400 1em/1 \"@{fa-style-family}\";\n}\n\n@font-face {\n  font-family: 'Font Awesome 6 Free';\n  font-style: normal;\n  font-weight: 400;\n  font-display: @fa-font-display;\n  src: url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'),\n    url('@{fa-font-path}/fa-regular-400.ttf') format('truetype');\n}\n\n.far,\n.fa-regular {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/solid.less",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n@import \"_variables.less\";\n\n:root, :host {\n  --@{fa-css-prefix}-font-solid: normal 900 1em/1 \"@{fa-style-family}\";\n}\n\n@font-face {\n  font-family: 'Font Awesome 6 Free';\n  font-style: normal;\n  font-weight: 900;\n  font-display: @fa-font-display;\n  src: url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'),\n    url('@{fa-font-path}/fa-solid-900.ttf') format('truetype');\n}\n\n\n.fas,\n.fa-solid {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 900;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/less/v4-shims.less",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n// V4 shims compile (Web Fonts-based)\n// -------------------------\n\n@import '_variables.less';\n@import '_shims.less';\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_animated.scss",
    "content": "// animating icons\n// --------------------------\n\n.#{$fa-css-prefix}-beat {\n  animation-name: #{$fa-css-prefix}-beat;\n  animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0);\n  animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);\n  animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);\n  animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);\n  animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);\n}\n\n.#{$fa-css-prefix}-bounce {\n  animation-name: #{$fa-css-prefix}-bounce;\n  animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0);\n  animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);\n  animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);\n  animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);\n  animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1));\n}\n\n.#{$fa-css-prefix}-fade {\n  animation-name: #{$fa-css-prefix}-fade;\n  animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0);\n  animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);\n  animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);\n  animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);\n  animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));\n}\n\n.#{$fa-css-prefix}-beat-fade {\n  animation-name: #{$fa-css-prefix}-beat-fade;\n  animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0);\n  animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);\n  animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);\n  animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);\n  animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));\n}\n\n.#{$fa-css-prefix}-flip {\n  animation-name: #{$fa-css-prefix}-flip;\n  animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0);\n  animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);\n  animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);\n  animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);\n  animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);\n}\n\n.#{$fa-css-prefix}-shake {\n  animation-name: #{$fa-css-prefix}-shake;\n  animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0);\n  animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);\n  animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);\n  animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);\n  animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);\n}\n\n.#{$fa-css-prefix}-spin {\n  animation-name: #{$fa-css-prefix}-spin;\n  animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0);\n  animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);\n  animation-duration: var(--#{$fa-css-prefix}-animation-duration, 2s);\n  animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);\n  animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);\n}\n\n.#{$fa-css-prefix}-spin-reverse {\n  --#{$fa-css-prefix}-animation-direction: reverse;\n}\n\n.#{$fa-css-prefix}-pulse,\n.#{$fa-css-prefix}-spin-pulse {\n  animation-name: #{$fa-css-prefix}-spin;\n  animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);\n  animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);\n  animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);\n  animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, steps(8));\n}\n\n// if agent or operating system prefers reduced motion, disable animations\n// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/\n// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion\n@media (prefers-reduced-motion: reduce) {\n  .#{$fa-css-prefix}-beat,\n  .#{$fa-css-prefix}-bounce,\n  .#{$fa-css-prefix}-fade,\n  .#{$fa-css-prefix}-beat-fade,\n  .#{$fa-css-prefix}-flip,\n  .#{$fa-css-prefix}-pulse,\n  .#{$fa-css-prefix}-shake,\n  .#{$fa-css-prefix}-spin,\n  .#{$fa-css-prefix}-spin-pulse {\n    animation-delay: -1ms;\n    animation-duration: 1ms;\n    animation-iteration-count: 1;\n    transition-delay: 0s;\n    transition-duration: 0s;\n  }\n}\n\n@keyframes #{$fa-css-prefix}-beat {\n  0%, 90% { transform: scale(1); }\n  45% { transform: scale(var(--#{$fa-css-prefix}-beat-scale, 1.25)); }\n}\n\n@keyframes #{$fa-css-prefix}-bounce {\n  0%   { transform: scale(1,1) translateY(0); }\n  10%  { transform: scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1),var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9)) translateY(0); }\n  30%  { transform: scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1)) translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em)); }\n  50%  { transform: scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05),var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95)) translateY(0); }\n  57%  { transform: scale(1,1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em)); }\n  64%  { transform: scale(1,1) translateY(0); }\n  100% { transform: scale(1,1) translateY(0); }\n}\n\n@keyframes #{$fa-css-prefix}-fade {\n  50% { opacity: var(--#{$fa-css-prefix}-fade-opacity, 0.4); }\n}\n\n@keyframes #{$fa-css-prefix}-beat-fade {\n  0%, 100% {\n    opacity: var(--#{$fa-css-prefix}-beat-fade-opacity, 0.4);\n    transform: scale(1);\n  }\n  50% {\n    opacity: 1;\n    transform: scale(var(--#{$fa-css-prefix}-beat-fade-scale, 1.125));\n  }\n}\n\n@keyframes #{$fa-css-prefix}-flip {\n  50% {\n    transform: rotate3d(var(--#{$fa-css-prefix}-flip-x, 0), var(--#{$fa-css-prefix}-flip-y, 1), var(--#{$fa-css-prefix}-flip-z, 0), var(--#{$fa-css-prefix}-flip-angle, -180deg));\n  }\n}\n\n@keyframes #{$fa-css-prefix}-shake {\n  0% { transform: rotate(-15deg); }\n  4% { transform: rotate(15deg); }\n  8%, 24% { transform: rotate(-18deg); }\n  12%, 28% { transform: rotate(18deg); }\n  16% { transform: rotate(-22deg); }\n  20% { transform: rotate(22deg); }\n  32% { transform: rotate(-12deg); }\n  36% { transform: rotate(12deg); }\n  40%, 100% { transform: rotate(0deg); }\n}\n\n@keyframes #{$fa-css-prefix}-spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_bordered-pulled.scss",
    "content": "// bordered + pulled icons\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color});\n  border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius});\n  border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style});\n  border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width});\n  padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding});\n}\n\n.#{$fa-css-prefix}-pull-left { \n  float: left;\n  margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin}); \n}\n\n.#{$fa-css-prefix}-pull-right { \n  float: right;\n  margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin}); \n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_core.scss",
    "content": "// base icon class definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n  font-family: var(--#{$fa-css-prefix}-style-family, '#{$fa-style-family}');\n  font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style});\n}\n\n.#{$fa-css-prefix},\n.fas,\n.fa-solid,\n.far,\n.fa-regular,\n.fal,\n.fa-light,\n.fat,\n.fa-thin,\n.fad,\n.fa-duotone,\n.fab,\n.fa-brands {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: var(--#{$fa-css-prefix}-display, #{$fa-display});\n  font-style: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-rendering: auto;\n}\n\n%fa-icon {\n  @include fa-icon;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_fixed-width.scss",
    "content": "// fixed-width icons\n// -------------------------\n\n.#{$fa-css-prefix}-fw {\n  text-align: center;\n  width: $fa-fw-width;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_functions.scss",
    "content": "// functions\n// --------------------------\n\n// Originally obtained from the Bootstrap https://github.com/twbs/bootstrap\n//\n// Licensed under: The MIT License (MIT)\n//\n// Copyright (c) 2011-2021 Twitter, Inc.\n// Copyright (c) 2011-2021 The Bootstrap Authors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n@function fa-divide($dividend, $divisor, $precision: 10) {\n  $sign: if($dividend > 0 and $divisor > 0, 1, -1);\n  $dividend: abs($dividend);\n  $divisor: abs($divisor);\n  $quotient: 0;\n  $remainder: $dividend;\n  @if $dividend == 0 {\n    @return 0;\n  }\n  @if $divisor == 0 {\n    @error \"Cannot divide by 0\";\n  }\n  @if $divisor == 1 {\n    @return $dividend;\n  }\n  @while $remainder >= $divisor {\n    $quotient: $quotient + 1;\n    $remainder: $remainder - $divisor;\n  }\n  @if $remainder > 0 and $precision > 0 {\n    $remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * .1;\n  }\n  @return ($quotient + $remainder) * $sign;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_icons.scss",
    "content": "// specific icon class definition\n// -------------------------\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n\n@each $name, $icon in $fa-icons {\n  .#{$fa-css-prefix}-#{$name}::before { content: fa-content($icon); }\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_list.scss",
    "content": "// icons in a list\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  list-style-type: none;\n  margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin});\n  padding-left: 0;\n\n  > li { position: relative; }\n}\n\n.#{$fa-css-prefix}-li {\n  left: calc(var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}) * -1);\n  position: absolute;\n  text-align: center;\n  width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width});\n  line-height: inherit;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_mixins.scss",
    "content": "// mixins\n// --------------------------\n\n// base rendering for an icon\n@mixin fa-icon {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  line-height: 1;\n}\n\n// sets relative font-sizing and alignment (in _sizing)\n@mixin fa-size ($font-size) {\n  font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base\n  line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent\n  vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender\n}\n\n// only display content to screen readers\n// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n@mixin fa-sr-only() {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n// use in conjunction with .sr-only to only display content when it's focused\n@mixin fa-sr-only-focusable() {\n  &:not(:focus) {\n    @include fa-sr-only();\n  }\n}\n\n// convenience mixins for declaring pseudo-elements by CSS variable,\n// including all style-specific font properties, and both the ::before\n// and ::after elements in the duotone case.\n@mixin fa-icon-solid($fa-var) {\n  @extend %fa-icon;\n  @extend .fa-solid;\n\n  &::before {\n    content: unquote(\"\\\"#{ $fa-var }\\\"\");\n  }\n}\n\n@mixin fa-icon-regular($fa-var) {\n  @extend %fa-icon;\n  @extend .fa-regular;\n\n  &::before {\n    content: unquote(\"\\\"#{ $fa-var }\\\"\");\n  }\n}\n\n@mixin fa-icon-brands($fa-var) {\n  @extend %fa-icon;\n  @extend .fa-brands;\n\n  &::before {\n    content: unquote(\"\\\"#{ $fa-var }\\\"\");\n  }\n}\n\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_rotated-flipped.scss",
    "content": "// rotating + flipping icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90 {\n  transform: rotate(90deg);\n}\n\n.#{$fa-css-prefix}-rotate-180 {\n  transform: rotate(180deg);\n}\n\n.#{$fa-css-prefix}-rotate-270 {\n  transform: rotate(270deg);\n}\n\n.#{$fa-css-prefix}-flip-horizontal {\n  transform: scale(-1, 1);\n}\n\n.#{$fa-css-prefix}-flip-vertical {\n  transform: scale(1, -1);\n}\n\n.#{$fa-css-prefix}-flip-both,\n.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { \n  transform: scale(-1, -1);\n}\n\n.#{$fa-css-prefix}-rotate-by {\n  transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, none));\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_screen-reader.scss",
    "content": "// screen-reader utilities\n// -------------------------\n\n// only display content to screen readers\n.sr-only,\n.fa-sr-only {\n  @include fa-sr-only; \n}\n\n// use in conjunction with .sr-only to only display content when it's focused\n.sr-only-focusable,\n.fa-sr-only-focusable {\n  @include fa-sr-only-focusable; \n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_shims.scss",
    "content": ".#{$fa-css-prefix}.#{$fa-css-prefix}-glass:before { content: fa-content($fa-var-martini-glass-empty); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o:before { content: fa-content($fa-var-envelope); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o:before { content: fa-content($fa-var-star); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-remove:before { content: fa-content($fa-var-xmark); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-close:before { content: fa-content($fa-var-xmark); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gear:before { content: fa-content($fa-var-gear); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o:before { content: fa-content($fa-var-trash-can); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-home:before { content: fa-content($fa-var-house); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o:before { content: fa-content($fa-var-file); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o:before { content: fa-content($fa-var-clock); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down:before { content: fa-content($fa-var-circle-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up:before { content: fa-content($fa-var-circle-up); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o:before { content: fa-content($fa-var-circle-play); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-repeat:before { content: fa-content($fa-var-arrow-rotate-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-right:before { content: fa-content($fa-var-arrow-rotate-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-refresh:before { content: fa-content($fa-var-arrows-rotate); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt:before { content: fa-content($fa-var-rectangle-list); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-dedent:before { content: fa-content($fa-var-outdent); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-video-camera:before { content: fa-content($fa-var-video); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o:before { content: fa-content($fa-var-image); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-photo {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-photo:before { content: fa-content($fa-var-image); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-image {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-image:before { content: fa-content($fa-var-image); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-map-marker:before { content: fa-content($fa-var-location-dot); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o:before { content: fa-content($fa-var-pen-to-square); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-edit {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-edit:before { content: fa-content($fa-var-pen-to-square); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-share-square-o:before { content: fa-content($fa-var-share-from-square); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o:before { content: fa-content($fa-var-square-check); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows:before { content: fa-content($fa-var-up-down-left-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o:before { content: fa-content($fa-var-circle-xmark); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o:before { content: fa-content($fa-var-circle-check); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-forward:before { content: fa-content($fa-var-share); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-expand:before { content: fa-content($fa-var-up-right-and-down-left-from-center); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-compress:before { content: fa-content($fa-var-down-left-and-up-right-to-center); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-eye {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-eye-slash {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-warning:before { content: fa-content($fa-var-triangle-exclamation); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar:before { content: fa-content($fa-var-calendar-days); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-v:before { content: fa-content($fa-var-up-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-h:before { content: fa-content($fa-var-left-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart:before { content: fa-content($fa-var-chart-column); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart-o:before { content: fa-content($fa-var-chart-column); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gears:before { content: fa-content($fa-var-gears); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up:before { content: fa-content($fa-var-thumbs-up); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down:before { content: fa-content($fa-var-thumbs-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o:before { content: fa-content($fa-var-heart); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-out:before { content: fa-content($fa-var-right-from-bracket); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square:before { content: fa-content($fa-var-linkedin); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thumb-tack:before { content: fa-content($fa-var-thumbtack); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link:before { content: fa-content($fa-var-up-right-from-square); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-in:before { content: fa-content($fa-var-right-to-bracket); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-github-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o:before { content: fa-content($fa-var-lemon); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o:before { content: fa-content($fa-var-square); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o:before { content: fa-content($fa-var-bookmark); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook:before { content: fa-content($fa-var-facebook-f); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f:before { content: fa-content($fa-var-facebook-f); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-github {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-feed:before { content: fa-content($fa-var-rss); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o:before { content: fa-content($fa-var-hard-drive); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right:before { content: fa-content($fa-var-hand-point-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left:before { content: fa-content($fa-var-hand-point-left); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up:before { content: fa-content($fa-var-hand-point-up); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down:before { content: fa-content($fa-var-hand-point-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-globe:before { content: fa-content($fa-var-earth-americas); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-tasks:before { content: fa-content($fa-var-bars-progress); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-alt:before { content: fa-content($fa-var-maximize); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-group:before { content: fa-content($fa-var-users); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-chain:before { content: fa-content($fa-var-link); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cut:before { content: fa-content($fa-var-scissors); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o:before { content: fa-content($fa-var-copy); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o:before { content: fa-content($fa-var-floppy-disk); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-save {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-save:before { content: fa-content($fa-var-floppy-disk); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-navicon:before { content: fa-content($fa-var-bars); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-reorder:before { content: fa-content($fa-var-bars); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-magic:before { content: fa-content($fa-var-wand-magic-sparkles); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus:before { content: fa-content($fa-var-google-plus-g); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-money:before { content: fa-content($fa-var-money-bill-1); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-unsorted:before { content: fa-content($fa-var-sort); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-desc:before { content: fa-content($fa-var-sort-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-asc:before { content: fa-content($fa-var-sort-up); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin:before { content: fa-content($fa-var-linkedin-in); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-left:before { content: fa-content($fa-var-arrow-rotate-left); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-legal:before { content: fa-content($fa-var-gavel); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-tachometer:before { content: fa-content($fa-var-gauge-high); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-dashboard:before { content: fa-content($fa-var-gauge-high); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o:before { content: fa-content($fa-var-comment); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o:before { content: fa-content($fa-var-comments); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-flash:before { content: fa-content($fa-var-bolt); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-clipboard:before { content: fa-content($fa-var-paste); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o:before { content: fa-content($fa-var-lightbulb); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-exchange:before { content: fa-content($fa-var-right-left); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-download:before { content: fa-content($fa-var-cloud-arrow-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-upload:before { content: fa-content($fa-var-cloud-arrow-up); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o:before { content: fa-content($fa-var-bell); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cutlery:before { content: fa-content($fa-var-utensils); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o:before { content: fa-content($fa-var-file-lines); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o:before { content: fa-content($fa-var-building); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o:before { content: fa-content($fa-var-hospital); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-tablet:before { content: fa-content($fa-var-tablet-screen-button); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile:before { content: fa-content($fa-var-mobile-screen-button); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile-phone:before { content: fa-content($fa-var-mobile-screen-button); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o:before { content: fa-content($fa-var-circle); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply:before { content: fa-content($fa-var-reply); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-github-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o:before { content: fa-content($fa-var-folder); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o:before { content: fa-content($fa-var-folder-open); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o:before { content: fa-content($fa-var-face-smile); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o:before { content: fa-content($fa-var-face-frown); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o:before { content: fa-content($fa-var-face-meh); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o:before { content: fa-content($fa-var-keyboard); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o:before { content: fa-content($fa-var-flag); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply-all:before { content: fa-content($fa-var-reply-all); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o:before { content: fa-content($fa-var-star-half-stroke); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty:before { content: fa-content($fa-var-star-half-stroke); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full:before { content: fa-content($fa-var-star-half-stroke); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-code-fork:before { content: fa-content($fa-var-code-branch); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-chain-broken:before { content: fa-content($fa-var-link-slash); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-unlink:before { content: fa-content($fa-var-link-slash); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o:before { content: fa-content($fa-var-calendar); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-maxcdn {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-html5 {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-css3 {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-unlock-alt:before { content: fa-content($fa-var-unlock); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o:before { content: fa-content($fa-var-square-minus); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-level-up:before { content: fa-content($fa-var-turn-up); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-level-down:before { content: fa-content($fa-var-turn-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square:before { content: fa-content($fa-var-square-pen); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link-square:before { content: fa-content($fa-var-square-up-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-compass {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down:before { content: fa-content($fa-var-square-caret-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down:before { content: fa-content($fa-var-square-caret-down); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up:before { content: fa-content($fa-var-square-caret-up); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up:before { content: fa-content($fa-var-square-caret-up); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right:before { content: fa-content($fa-var-square-caret-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right:before { content: fa-content($fa-var-square-caret-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-eur:before { content: fa-content($fa-var-euro-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-euro:before { content: fa-content($fa-var-euro-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gbp:before { content: fa-content($fa-var-sterling-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-usd:before { content: fa-content($fa-var-dollar-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-dollar:before { content: fa-content($fa-var-dollar-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-inr:before { content: fa-content($fa-var-indian-rupee-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-rupee:before { content: fa-content($fa-var-indian-rupee-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-jpy:before { content: fa-content($fa-var-yen-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cny:before { content: fa-content($fa-var-yen-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-rmb:before { content: fa-content($fa-var-yen-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-yen:before { content: fa-content($fa-var-yen-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-rub:before { content: fa-content($fa-var-ruble-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-ruble:before { content: fa-content($fa-var-ruble-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-rouble:before { content: fa-content($fa-var-ruble-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-krw:before { content: fa-content($fa-var-won-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-won:before { content: fa-content($fa-var-won-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-btc {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin:before { content: fa-content($fa-var-btc); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text:before { content: fa-content($fa-var-file-lines); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-asc:before { content: fa-content($fa-var-arrow-down-a-z); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-desc:before { content: fa-content($fa-var-arrow-down-z-a); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-asc:before { content: fa-content($fa-var-arrow-down-short-wide); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-desc:before { content: fa-content($fa-var-arrow-down-wide-short); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-asc:before { content: fa-content($fa-var-arrow-down-1-9); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-desc:before { content: fa-content($fa-var-arrow-down-9-1); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-xing {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play:before { content: fa-content($fa-var-youtube); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-dropbox {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-overflow {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-instagram {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-flickr {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-adn {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square:before { content: fa-content($fa-var-bitbucket); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-down:before { content: fa-content($fa-var-down-long); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-up:before { content: fa-content($fa-var-up-long); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-left:before { content: fa-content($fa-var-left-long); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-right:before { content: fa-content($fa-var-right-long); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-apple {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-windows {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-android {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-linux {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-dribbble {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-skype {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-foursquare {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-trello {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gratipay {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip:before { content: fa-content($fa-var-gratipay); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o:before { content: fa-content($fa-var-sun); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o:before { content: fa-content($fa-var-moon); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-vk {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-weibo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-renren {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pagelines {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-exchange {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right:before { content: fa-content($fa-var-circle-right); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left:before { content: fa-content($fa-var-circle-left); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left:before { content: fa-content($fa-var-square-caret-left); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left:before { content: fa-content($fa-var-square-caret-left); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o:before { content: fa-content($fa-var-circle-dot); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-try:before { content: fa-content($fa-var-turkish-lira-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-turkish-lira:before { content: fa-content($fa-var-turkish-lira-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o:before { content: fa-content($fa-var-square-plus); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-slack {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wordpress {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-openid {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-institution:before { content: fa-content($fa-var-building-columns); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bank:before { content: fa-content($fa-var-building-columns); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-mortar-board:before { content: fa-content($fa-var-graduation-cap); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-yahoo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-delicious {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-digg {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-pp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-drupal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-joomla {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-behance {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-steam {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-automobile:before { content: fa-content($fa-var-car); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cab:before { content: fa-content($fa-var-taxi); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-spotify {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-deviantart {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-soundcloud {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o:before { content: fa-content($fa-var-file-pdf); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o:before { content: fa-content($fa-var-file-word); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o:before { content: fa-content($fa-var-file-excel); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o:before { content: fa-content($fa-var-file-powerpoint); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o:before { content: fa-content($fa-var-file-image); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o:before { content: fa-content($fa-var-file-image); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o:before { content: fa-content($fa-var-file-image); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o:before { content: fa-content($fa-var-file-zipper); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o:before { content: fa-content($fa-var-file-zipper); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o:before { content: fa-content($fa-var-file-audio); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o:before { content: fa-content($fa-var-file-audio); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o:before { content: fa-content($fa-var-file-video); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o:before { content: fa-content($fa-var-file-video); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o:before { content: fa-content($fa-var-file-code); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-vine {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-codepen {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-jsfiddle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-life-bouy:before { content: fa-content($fa-var-life-ring); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-life-buoy:before { content: fa-content($fa-var-life-ring); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-life-saver:before { content: fa-content($fa-var-life-ring); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-support:before { content: fa-content($fa-var-life-ring); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o-notch:before { content: fa-content($fa-var-circle-notch); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-rebel {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-ra {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-ra:before { content: fa-content($fa-var-rebel); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance:before { content: fa-content($fa-var-rebel); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-empire {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-ge {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-ge:before { content: fa-content($fa-var-empire); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-git-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-git {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hacker-news {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square:before { content: fa-content($fa-var-hacker-news); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square:before { content: fa-content($fa-var-hacker-news); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-tencent-weibo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-qq {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-weixin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat:before { content: fa-content($fa-var-weixin); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-send:before { content: fa-content($fa-var-paper-plane); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o:before { content: fa-content($fa-var-paper-plane); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o:before { content: fa-content($fa-var-paper-plane); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin:before { content: fa-content($fa-var-circle); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-header:before { content: fa-content($fa-var-heading); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o:before { content: fa-content($fa-var-futbol); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o:before { content: fa-content($fa-var-futbol); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-slideshare {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-twitch {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-yelp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o:before { content: fa-content($fa-var-newspaper); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-paypal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google-wallet {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-visa {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-mastercard {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-discover {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-amex {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-paypal {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-stripe {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o:before { content: fa-content($fa-var-bell-slash); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-trash:before { content: fa-content($fa-var-trash-can); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-copyright {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-eyedropper:before { content: fa-content($fa-var-eye-dropper); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-area-chart:before { content: fa-content($fa-var-chart-area); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pie-chart:before { content: fa-content($fa-var-chart-pie); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-line-chart:before { content: fa-content($fa-var-chart-line); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-ioxhost {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-angellist {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc:before { content: fa-content($fa-var-closed-captioning); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-ils:before { content: fa-content($fa-var-shekel-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-shekel:before { content: fa-content($fa-var-shekel-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sheqel:before { content: fa-content($fa-var-shekel-sign); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-buysellads {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-connectdevelop {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-dashcube {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-forumbee {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-leanpub {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sellsy {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-shirtsinbulk {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-simplybuilt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-skyatlas {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond:before { content: fa-content($fa-var-gem); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-transgender:before { content: fa-content($fa-var-mars-and-venus); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-intersex:before { content: fa-content($fa-var-mars-and-venus); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-transgender-alt:before { content: fa-content($fa-var-transgender); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official:before { content: fa-content($fa-var-facebook); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-p {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-whatsapp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hotel:before { content: fa-content($fa-var-bed); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-viacoin {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-medium {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-yc {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-yc:before { content: fa-content($fa-var-y-combinator); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-optin-monster {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-opencart {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-expeditedssl {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-4:before { content: fa-content($fa-var-battery-full); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-battery:before { content: fa-content($fa-var-battery-full); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-3:before { content: fa-content($fa-var-battery-three-quarters); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-2:before { content: fa-content($fa-var-battery-half); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-1:before { content: fa-content($fa-var-battery-quarter); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-0:before { content: fa-content($fa-var-battery-empty); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-object-group {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-object-ungroup {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o:before { content: fa-content($fa-var-note-sticky); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-jcb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-diners-club {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-clone {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-o:before { content: fa-content($fa-var-hourglass-empty); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-1:before { content: fa-content($fa-var-hourglass-start); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-half:before { content: fa-content($fa-var-hourglass); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-2:before { content: fa-content($fa-var-hourglass); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-3:before { content: fa-content($fa-var-hourglass-end); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o:before { content: fa-content($fa-var-hand-back-fist); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o:before { content: fa-content($fa-var-hand-back-fist); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o:before { content: fa-content($fa-var-hand); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o:before { content: fa-content($fa-var-hand); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o:before { content: fa-content($fa-var-hand-scissors); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o:before { content: fa-content($fa-var-hand-lizard); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o:before { content: fa-content($fa-var-hand-spock); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o:before { content: fa-content($fa-var-hand-pointer); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o:before { content: fa-content($fa-var-hand-peace); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-registered {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-creative-commons {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gg {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gg-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-get-pocket {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wikipedia-w {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-safari {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-chrome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-firefox {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-opera {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-internet-explorer {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-television:before { content: fa-content($fa-var-tv); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-contao {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-500px {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-amazon {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o:before { content: fa-content($fa-var-calendar-plus); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o:before { content: fa-content($fa-var-calendar-minus); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o:before { content: fa-content($fa-var-calendar-xmark); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o:before { content: fa-content($fa-var-calendar-check); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o:before { content: fa-content($fa-var-map); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting:before { content: fa-content($fa-var-comment-dots); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o:before { content: fa-content($fa-var-comment-dots); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-houzz {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo:before { content: fa-content($fa-var-vimeo-v); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-black-tie {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-fonticons {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-alien {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-edge {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card-alt:before { content: fa-content($fa-var-credit-card); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-codiepie {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-modx {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-fort-awesome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-usb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-product-hunt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-mixcloud {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-scribd {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o:before { content: fa-content($fa-var-circle-pause); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o:before { content: fa-content($fa-var-circle-stop); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth-b {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-gitlab {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wpbeginner {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wpforms {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-envira {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt:before { content: fa-content($fa-var-accessible-icon); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o:before { content: fa-content($fa-var-circle-question); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-volume-control-phone:before { content: fa-content($fa-var-phone-volume); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-asl-interpreting:before { content: fa-content($fa-var-hands-asl-interpreting); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-deafness:before { content: fa-content($fa-var-ear-deaf); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-hard-of-hearing:before { content: fa-content($fa-var-ear-deaf); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-glide {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-glide-g {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-signing:before { content: fa-content($fa-var-hands); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost:before { content: fa-content($fa-var-snapchat); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-first-order {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-yoast {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-themeisle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official:before { content: fa-content($fa-var-google-plus); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle:before { content: fa-content($fa-var-google-plus); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-font-awesome {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-fa {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-fa:before { content: fa-content($fa-var-font-awesome); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o:before { content: fa-content($fa-var-handshake); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o:before { content: fa-content($fa-var-envelope-open); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-linode {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o:before { content: fa-content($fa-var-address-book); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard:before { content: fa-content($fa-var-address-card); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o:before { content: fa-content($fa-var-address-card); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o:before { content: fa-content($fa-var-address-card); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o:before { content: fa-content($fa-var-circle-user); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o:before { content: fa-content($fa-var-user); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-id-badge {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license:before { content: fa-content($fa-var-id-card); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o:before { content: fa-content($fa-var-id-card); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o:before { content: fa-content($fa-var-id-card); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-quora {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-free-code-camp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-telegram {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-4:before { content: fa-content($fa-var-temperature-full); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer:before { content: fa-content($fa-var-temperature-full); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-3:before { content: fa-content($fa-var-temperature-three-quarters); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-2:before { content: fa-content($fa-var-temperature-half); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-1:before { content: fa-content($fa-var-temperature-quarter); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-0:before { content: fa-content($fa-var-temperature-empty); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bathtub:before { content: fa-content($fa-var-bath); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-s15:before { content: fa-content($fa-var-bath); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-window-maximize {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-window-restore {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle:before { content: fa-content($fa-var-rectangle-xmark); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o:before { content: fa-content($fa-var-rectangle-xmark); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o:before { content: fa-content($fa-var-rectangle-xmark); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-bandcamp {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-grav {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-etsy {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-imdb {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-ravelry {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast:before { content: fa-content($fa-var-sellcast); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o:before { content: fa-content($fa-var-snowflake); }\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-superpowers {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-wpexplorer {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n.#{$fa-css-prefix}.#{$fa-css-prefix}-meetup {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_sizing.scss",
    "content": "// sizing icons\n// -------------------------\n\n// literal magnification scale\n@for $i from 1 through 10 {\n  .#{$fa-css-prefix}-#{$i}x {\n    font-size: $i * 1em;\n  }\n}\n\n// step-based scale (with alignment)\n@each $size, $value in $fa-sizes {\n  .#{$fa-css-prefix}-#{$size} {\n     @include fa-size($value);\n  }\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_stacked.scss",
    "content": "// stacking icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: $fa-stack-vertical-align;\n  width: $fa-stack-width;\n}\n\n.#{$fa-css-prefix}-stack-1x,\n.#{$fa-css-prefix}-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%;\n  z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index});\n}\n\n.#{$fa-css-prefix}-stack-1x {\n  line-height: inherit;\n}\n\n.#{$fa-css-prefix}-stack-2x {\n  font-size: 2em;\n}\n\n.#{$fa-css-prefix}-inverse {\n  color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse});\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/_variables.scss",
    "content": "// variables\n// --------------------------\n\n$fa-css-prefix          : fa !default;\n$fa-style               : 900 !default;\n$fa-style-family        : \"Font Awesome 6 Free\" !default;\n\n$fa-display             : inline-block !default;\n\n$fa-fw-width            : fa-divide(20em, 16);\n$fa-inverse             : #fff !default;\n\n$fa-border-color        : #eee !default;\n$fa-border-padding      : .2em .25em .15em !default;\n$fa-border-radius       : .1em !default;\n$fa-border-style        : solid !default;\n$fa-border-width        : .08em !default;\n\n$fa-size-scale-2xs      : 10 !default;\n$fa-size-scale-xs       : 12 !default;\n$fa-size-scale-sm       : 14 !default;\n$fa-size-scale-base     : 16 !default;\n$fa-size-scale-lg       : 20 !default;\n$fa-size-scale-xl       : 24 !default;\n$fa-size-scale-2xl      : 32 !default;\n\n$fa-sizes: (\n  \"2xs\"                 : $fa-size-scale-2xs,\n  \"xs\"                  : $fa-size-scale-xs,\n  \"sm\"                  : $fa-size-scale-sm,\n  \"lg\"                  : $fa-size-scale-lg,\n  \"xl\"                  : $fa-size-scale-xl,\n  \"2xl\"                 : $fa-size-scale-2xl\n) !default;\n\n$fa-li-width            : 2em !default;\n$fa-li-margin           : $fa-li-width * fa-divide(5, 4) !default;\n\n$fa-pull-margin         : .3em !default;\n\n$fa-primary-opacity     : 1 !default;\n$fa-secondary-opacity   : .4 !default;\n\n$fa-stack-vertical-align: middle !default;\n$fa-stack-width         : ($fa-fw-width * 2) !default;\n$fa-stack-z-index       : auto !default;\n\n$fa-font-display        : block !default;\n$fa-font-path           : \"../webfonts\" !default;\n\n// convenience function used to set content property\n@function fa-content($fa-var) {\n  @return unquote(\"\\\"#{ $fa-var }\\\"\");\n}\n\n$fa-var-0: \\30;\n$fa-var-1: \\31;\n$fa-var-2: \\32;\n$fa-var-3: \\33;\n$fa-var-4: \\34;\n$fa-var-5: \\35;\n$fa-var-6: \\36;\n$fa-var-7: \\37;\n$fa-var-8: \\38;\n$fa-var-9: \\39;\n$fa-var-a: \\41;\n$fa-var-address-book: \\f2b9;\n$fa-var-contact-book: \\f2b9;\n$fa-var-address-card: \\f2bb;\n$fa-var-contact-card: \\f2bb;\n$fa-var-vcard: \\f2bb;\n$fa-var-align-center: \\f037;\n$fa-var-align-justify: \\f039;\n$fa-var-align-left: \\f036;\n$fa-var-align-right: \\f038;\n$fa-var-anchor: \\f13d;\n$fa-var-angle-down: \\f107;\n$fa-var-angle-left: \\f104;\n$fa-var-angle-right: \\f105;\n$fa-var-angle-up: \\f106;\n$fa-var-angles-down: \\f103;\n$fa-var-angle-double-down: \\f103;\n$fa-var-angles-left: \\f100;\n$fa-var-angle-double-left: \\f100;\n$fa-var-angles-right: \\f101;\n$fa-var-angle-double-right: \\f101;\n$fa-var-angles-up: \\f102;\n$fa-var-angle-double-up: \\f102;\n$fa-var-ankh: \\f644;\n$fa-var-apple-whole: \\f5d1;\n$fa-var-apple-alt: \\f5d1;\n$fa-var-archway: \\f557;\n$fa-var-arrow-down: \\f063;\n$fa-var-arrow-down-1-9: \\f162;\n$fa-var-sort-numeric-asc: \\f162;\n$fa-var-sort-numeric-down: \\f162;\n$fa-var-arrow-down-9-1: \\f886;\n$fa-var-sort-numeric-desc: \\f886;\n$fa-var-sort-numeric-down-alt: \\f886;\n$fa-var-arrow-down-a-z: \\f15d;\n$fa-var-sort-alpha-asc: \\f15d;\n$fa-var-sort-alpha-down: \\f15d;\n$fa-var-arrow-down-long: \\f175;\n$fa-var-long-arrow-down: \\f175;\n$fa-var-arrow-down-short-wide: \\f884;\n$fa-var-sort-amount-desc: \\f884;\n$fa-var-sort-amount-down-alt: \\f884;\n$fa-var-arrow-down-wide-short: \\f160;\n$fa-var-sort-amount-asc: \\f160;\n$fa-var-sort-amount-down: \\f160;\n$fa-var-arrow-down-z-a: \\f881;\n$fa-var-sort-alpha-desc: \\f881;\n$fa-var-sort-alpha-down-alt: \\f881;\n$fa-var-arrow-left: \\f060;\n$fa-var-arrow-left-long: \\f177;\n$fa-var-long-arrow-left: \\f177;\n$fa-var-arrow-pointer: \\f245;\n$fa-var-mouse-pointer: \\f245;\n$fa-var-arrow-right: \\f061;\n$fa-var-arrow-right-arrow-left: \\f0ec;\n$fa-var-exchange: \\f0ec;\n$fa-var-arrow-right-from-bracket: \\f08b;\n$fa-var-sign-out: \\f08b;\n$fa-var-arrow-right-long: \\f178;\n$fa-var-long-arrow-right: \\f178;\n$fa-var-arrow-right-to-bracket: \\f090;\n$fa-var-sign-in: \\f090;\n$fa-var-arrow-rotate-left: \\f0e2;\n$fa-var-arrow-left-rotate: \\f0e2;\n$fa-var-arrow-rotate-back: \\f0e2;\n$fa-var-arrow-rotate-backward: \\f0e2;\n$fa-var-undo: \\f0e2;\n$fa-var-arrow-rotate-right: \\f01e;\n$fa-var-arrow-right-rotate: \\f01e;\n$fa-var-arrow-rotate-forward: \\f01e;\n$fa-var-redo: \\f01e;\n$fa-var-arrow-trend-down: \\e097;\n$fa-var-arrow-trend-up: \\e098;\n$fa-var-arrow-turn-down: \\f149;\n$fa-var-level-down: \\f149;\n$fa-var-arrow-turn-up: \\f148;\n$fa-var-level-up: \\f148;\n$fa-var-arrow-up: \\f062;\n$fa-var-arrow-up-1-9: \\f163;\n$fa-var-sort-numeric-up: \\f163;\n$fa-var-arrow-up-9-1: \\f887;\n$fa-var-sort-numeric-up-alt: \\f887;\n$fa-var-arrow-up-a-z: \\f15e;\n$fa-var-sort-alpha-up: \\f15e;\n$fa-var-arrow-up-from-bracket: \\e09a;\n$fa-var-arrow-up-long: \\f176;\n$fa-var-long-arrow-up: \\f176;\n$fa-var-arrow-up-right-from-square: \\f08e;\n$fa-var-external-link: \\f08e;\n$fa-var-arrow-up-short-wide: \\f885;\n$fa-var-sort-amount-up-alt: \\f885;\n$fa-var-arrow-up-wide-short: \\f161;\n$fa-var-sort-amount-up: \\f161;\n$fa-var-arrow-up-z-a: \\f882;\n$fa-var-sort-alpha-up-alt: \\f882;\n$fa-var-arrows-left-right: \\f07e;\n$fa-var-arrows-h: \\f07e;\n$fa-var-arrows-rotate: \\f021;\n$fa-var-refresh: \\f021;\n$fa-var-sync: \\f021;\n$fa-var-arrows-up-down: \\f07d;\n$fa-var-arrows-v: \\f07d;\n$fa-var-arrows-up-down-left-right: \\f047;\n$fa-var-arrows: \\f047;\n$fa-var-asterisk: \\2a;\n$fa-var-at: \\40;\n$fa-var-atom: \\f5d2;\n$fa-var-audio-description: \\f29e;\n$fa-var-austral-sign: \\e0a9;\n$fa-var-award: \\f559;\n$fa-var-b: \\42;\n$fa-var-baby: \\f77c;\n$fa-var-baby-carriage: \\f77d;\n$fa-var-carriage-baby: \\f77d;\n$fa-var-backward: \\f04a;\n$fa-var-backward-fast: \\f049;\n$fa-var-fast-backward: \\f049;\n$fa-var-backward-step: \\f048;\n$fa-var-step-backward: \\f048;\n$fa-var-bacon: \\f7e5;\n$fa-var-bacteria: \\e059;\n$fa-var-bacterium: \\e05a;\n$fa-var-bag-shopping: \\f290;\n$fa-var-shopping-bag: \\f290;\n$fa-var-bahai: \\f666;\n$fa-var-baht-sign: \\e0ac;\n$fa-var-ban: \\f05e;\n$fa-var-cancel: \\f05e;\n$fa-var-ban-smoking: \\f54d;\n$fa-var-smoking-ban: \\f54d;\n$fa-var-bandage: \\f462;\n$fa-var-band-aid: \\f462;\n$fa-var-barcode: \\f02a;\n$fa-var-bars: \\f0c9;\n$fa-var-navicon: \\f0c9;\n$fa-var-bars-progress: \\f828;\n$fa-var-tasks-alt: \\f828;\n$fa-var-bars-staggered: \\f550;\n$fa-var-reorder: \\f550;\n$fa-var-stream: \\f550;\n$fa-var-baseball: \\f433;\n$fa-var-baseball-ball: \\f433;\n$fa-var-baseball-bat-ball: \\f432;\n$fa-var-basket-shopping: \\f291;\n$fa-var-shopping-basket: \\f291;\n$fa-var-basketball: \\f434;\n$fa-var-basketball-ball: \\f434;\n$fa-var-bath: \\f2cd;\n$fa-var-bathtub: \\f2cd;\n$fa-var-battery-empty: \\f244;\n$fa-var-battery-0: \\f244;\n$fa-var-battery-full: \\f240;\n$fa-var-battery: \\f240;\n$fa-var-battery-5: \\f240;\n$fa-var-battery-half: \\f242;\n$fa-var-battery-3: \\f242;\n$fa-var-battery-quarter: \\f243;\n$fa-var-battery-2: \\f243;\n$fa-var-battery-three-quarters: \\f241;\n$fa-var-battery-4: \\f241;\n$fa-var-bed: \\f236;\n$fa-var-bed-pulse: \\f487;\n$fa-var-procedures: \\f487;\n$fa-var-beer-mug-empty: \\f0fc;\n$fa-var-beer: \\f0fc;\n$fa-var-bell: \\f0f3;\n$fa-var-bell-concierge: \\f562;\n$fa-var-concierge-bell: \\f562;\n$fa-var-bell-slash: \\f1f6;\n$fa-var-bezier-curve: \\f55b;\n$fa-var-bicycle: \\f206;\n$fa-var-binoculars: \\f1e5;\n$fa-var-biohazard: \\f780;\n$fa-var-bitcoin-sign: \\e0b4;\n$fa-var-blender: \\f517;\n$fa-var-blender-phone: \\f6b6;\n$fa-var-blog: \\f781;\n$fa-var-bold: \\f032;\n$fa-var-bolt: \\f0e7;\n$fa-var-zap: \\f0e7;\n$fa-var-bolt-lightning: \\e0b7;\n$fa-var-bomb: \\f1e2;\n$fa-var-bone: \\f5d7;\n$fa-var-bong: \\f55c;\n$fa-var-book: \\f02d;\n$fa-var-book-atlas: \\f558;\n$fa-var-atlas: \\f558;\n$fa-var-book-bible: \\f647;\n$fa-var-bible: \\f647;\n$fa-var-book-journal-whills: \\f66a;\n$fa-var-journal-whills: \\f66a;\n$fa-var-book-medical: \\f7e6;\n$fa-var-book-open: \\f518;\n$fa-var-book-open-reader: \\f5da;\n$fa-var-book-reader: \\f5da;\n$fa-var-book-quran: \\f687;\n$fa-var-quran: \\f687;\n$fa-var-book-skull: \\f6b7;\n$fa-var-book-dead: \\f6b7;\n$fa-var-bookmark: \\f02e;\n$fa-var-border-all: \\f84c;\n$fa-var-border-none: \\f850;\n$fa-var-border-top-left: \\f853;\n$fa-var-border-style: \\f853;\n$fa-var-bowling-ball: \\f436;\n$fa-var-box: \\f466;\n$fa-var-box-archive: \\f187;\n$fa-var-archive: \\f187;\n$fa-var-box-open: \\f49e;\n$fa-var-box-tissue: \\e05b;\n$fa-var-boxes-stacked: \\f468;\n$fa-var-boxes: \\f468;\n$fa-var-boxes-alt: \\f468;\n$fa-var-braille: \\f2a1;\n$fa-var-brain: \\f5dc;\n$fa-var-brazilian-real-sign: \\e46c;\n$fa-var-bread-slice: \\f7ec;\n$fa-var-briefcase: \\f0b1;\n$fa-var-briefcase-medical: \\f469;\n$fa-var-broom: \\f51a;\n$fa-var-broom-ball: \\f458;\n$fa-var-quidditch: \\f458;\n$fa-var-quidditch-broom-ball: \\f458;\n$fa-var-brush: \\f55d;\n$fa-var-bug: \\f188;\n$fa-var-bug-slash: \\e490;\n$fa-var-building: \\f1ad;\n$fa-var-building-columns: \\f19c;\n$fa-var-bank: \\f19c;\n$fa-var-institution: \\f19c;\n$fa-var-museum: \\f19c;\n$fa-var-university: \\f19c;\n$fa-var-bullhorn: \\f0a1;\n$fa-var-bullseye: \\f140;\n$fa-var-burger: \\f805;\n$fa-var-hamburger: \\f805;\n$fa-var-bus: \\f207;\n$fa-var-bus-simple: \\f55e;\n$fa-var-bus-alt: \\f55e;\n$fa-var-business-time: \\f64a;\n$fa-var-briefcase-clock: \\f64a;\n$fa-var-c: \\43;\n$fa-var-cake-candles: \\f1fd;\n$fa-var-birthday-cake: \\f1fd;\n$fa-var-cake: \\f1fd;\n$fa-var-calculator: \\f1ec;\n$fa-var-calendar: \\f133;\n$fa-var-calendar-check: \\f274;\n$fa-var-calendar-day: \\f783;\n$fa-var-calendar-days: \\f073;\n$fa-var-calendar-alt: \\f073;\n$fa-var-calendar-minus: \\f272;\n$fa-var-calendar-plus: \\f271;\n$fa-var-calendar-week: \\f784;\n$fa-var-calendar-xmark: \\f273;\n$fa-var-calendar-times: \\f273;\n$fa-var-camera: \\f030;\n$fa-var-camera-alt: \\f030;\n$fa-var-camera-retro: \\f083;\n$fa-var-camera-rotate: \\e0d8;\n$fa-var-campground: \\f6bb;\n$fa-var-candy-cane: \\f786;\n$fa-var-cannabis: \\f55f;\n$fa-var-capsules: \\f46b;\n$fa-var-car: \\f1b9;\n$fa-var-automobile: \\f1b9;\n$fa-var-car-battery: \\f5df;\n$fa-var-battery-car: \\f5df;\n$fa-var-car-crash: \\f5e1;\n$fa-var-car-rear: \\f5de;\n$fa-var-car-alt: \\f5de;\n$fa-var-car-side: \\f5e4;\n$fa-var-caravan: \\f8ff;\n$fa-var-caret-down: \\f0d7;\n$fa-var-caret-left: \\f0d9;\n$fa-var-caret-right: \\f0da;\n$fa-var-caret-up: \\f0d8;\n$fa-var-carrot: \\f787;\n$fa-var-cart-arrow-down: \\f218;\n$fa-var-cart-flatbed: \\f474;\n$fa-var-dolly-flatbed: \\f474;\n$fa-var-cart-flatbed-suitcase: \\f59d;\n$fa-var-luggage-cart: \\f59d;\n$fa-var-cart-plus: \\f217;\n$fa-var-cart-shopping: \\f07a;\n$fa-var-shopping-cart: \\f07a;\n$fa-var-cash-register: \\f788;\n$fa-var-cat: \\f6be;\n$fa-var-cedi-sign: \\e0df;\n$fa-var-cent-sign: \\e3f5;\n$fa-var-certificate: \\f0a3;\n$fa-var-chair: \\f6c0;\n$fa-var-chalkboard: \\f51b;\n$fa-var-blackboard: \\f51b;\n$fa-var-chalkboard-user: \\f51c;\n$fa-var-chalkboard-teacher: \\f51c;\n$fa-var-champagne-glasses: \\f79f;\n$fa-var-glass-cheers: \\f79f;\n$fa-var-charging-station: \\f5e7;\n$fa-var-chart-area: \\f1fe;\n$fa-var-area-chart: \\f1fe;\n$fa-var-chart-bar: \\f080;\n$fa-var-bar-chart: \\f080;\n$fa-var-chart-column: \\e0e3;\n$fa-var-chart-gantt: \\e0e4;\n$fa-var-chart-line: \\f201;\n$fa-var-line-chart: \\f201;\n$fa-var-chart-pie: \\f200;\n$fa-var-pie-chart: \\f200;\n$fa-var-check: \\f00c;\n$fa-var-check-double: \\f560;\n$fa-var-check-to-slot: \\f772;\n$fa-var-vote-yea: \\f772;\n$fa-var-cheese: \\f7ef;\n$fa-var-chess: \\f439;\n$fa-var-chess-bishop: \\f43a;\n$fa-var-chess-board: \\f43c;\n$fa-var-chess-king: \\f43f;\n$fa-var-chess-knight: \\f441;\n$fa-var-chess-pawn: \\f443;\n$fa-var-chess-queen: \\f445;\n$fa-var-chess-rook: \\f447;\n$fa-var-chevron-down: \\f078;\n$fa-var-chevron-left: \\f053;\n$fa-var-chevron-right: \\f054;\n$fa-var-chevron-up: \\f077;\n$fa-var-child: \\f1ae;\n$fa-var-church: \\f51d;\n$fa-var-circle: \\f111;\n$fa-var-circle-arrow-down: \\f0ab;\n$fa-var-arrow-circle-down: \\f0ab;\n$fa-var-circle-arrow-left: \\f0a8;\n$fa-var-arrow-circle-left: \\f0a8;\n$fa-var-circle-arrow-right: \\f0a9;\n$fa-var-arrow-circle-right: \\f0a9;\n$fa-var-circle-arrow-up: \\f0aa;\n$fa-var-arrow-circle-up: \\f0aa;\n$fa-var-circle-check: \\f058;\n$fa-var-check-circle: \\f058;\n$fa-var-circle-chevron-down: \\f13a;\n$fa-var-chevron-circle-down: \\f13a;\n$fa-var-circle-chevron-left: \\f137;\n$fa-var-chevron-circle-left: \\f137;\n$fa-var-circle-chevron-right: \\f138;\n$fa-var-chevron-circle-right: \\f138;\n$fa-var-circle-chevron-up: \\f139;\n$fa-var-chevron-circle-up: \\f139;\n$fa-var-circle-dollar-to-slot: \\f4b9;\n$fa-var-donate: \\f4b9;\n$fa-var-circle-dot: \\f192;\n$fa-var-dot-circle: \\f192;\n$fa-var-circle-down: \\f358;\n$fa-var-arrow-alt-circle-down: \\f358;\n$fa-var-circle-exclamation: \\f06a;\n$fa-var-exclamation-circle: \\f06a;\n$fa-var-circle-h: \\f47e;\n$fa-var-hospital-symbol: \\f47e;\n$fa-var-circle-half-stroke: \\f042;\n$fa-var-adjust: \\f042;\n$fa-var-circle-info: \\f05a;\n$fa-var-info-circle: \\f05a;\n$fa-var-circle-left: \\f359;\n$fa-var-arrow-alt-circle-left: \\f359;\n$fa-var-circle-minus: \\f056;\n$fa-var-minus-circle: \\f056;\n$fa-var-circle-notch: \\f1ce;\n$fa-var-circle-pause: \\f28b;\n$fa-var-pause-circle: \\f28b;\n$fa-var-circle-play: \\f144;\n$fa-var-play-circle: \\f144;\n$fa-var-circle-plus: \\f055;\n$fa-var-plus-circle: \\f055;\n$fa-var-circle-question: \\f059;\n$fa-var-question-circle: \\f059;\n$fa-var-circle-radiation: \\f7ba;\n$fa-var-radiation-alt: \\f7ba;\n$fa-var-circle-right: \\f35a;\n$fa-var-arrow-alt-circle-right: \\f35a;\n$fa-var-circle-stop: \\f28d;\n$fa-var-stop-circle: \\f28d;\n$fa-var-circle-up: \\f35b;\n$fa-var-arrow-alt-circle-up: \\f35b;\n$fa-var-circle-user: \\f2bd;\n$fa-var-user-circle: \\f2bd;\n$fa-var-circle-xmark: \\f057;\n$fa-var-times-circle: \\f057;\n$fa-var-xmark-circle: \\f057;\n$fa-var-city: \\f64f;\n$fa-var-clapperboard: \\e131;\n$fa-var-clipboard: \\f328;\n$fa-var-clipboard-check: \\f46c;\n$fa-var-clipboard-list: \\f46d;\n$fa-var-clock: \\f017;\n$fa-var-clock-four: \\f017;\n$fa-var-clock-rotate-left: \\f1da;\n$fa-var-history: \\f1da;\n$fa-var-clone: \\f24d;\n$fa-var-closed-captioning: \\f20a;\n$fa-var-cloud: \\f0c2;\n$fa-var-cloud-arrow-down: \\f0ed;\n$fa-var-cloud-download: \\f0ed;\n$fa-var-cloud-download-alt: \\f0ed;\n$fa-var-cloud-arrow-up: \\f0ee;\n$fa-var-cloud-upload: \\f0ee;\n$fa-var-cloud-upload-alt: \\f0ee;\n$fa-var-cloud-meatball: \\f73b;\n$fa-var-cloud-moon: \\f6c3;\n$fa-var-cloud-moon-rain: \\f73c;\n$fa-var-cloud-rain: \\f73d;\n$fa-var-cloud-showers-heavy: \\f740;\n$fa-var-cloud-sun: \\f6c4;\n$fa-var-cloud-sun-rain: \\f743;\n$fa-var-clover: \\e139;\n$fa-var-code: \\f121;\n$fa-var-code-branch: \\f126;\n$fa-var-code-commit: \\f386;\n$fa-var-code-compare: \\e13a;\n$fa-var-code-fork: \\e13b;\n$fa-var-code-merge: \\f387;\n$fa-var-code-pull-request: \\e13c;\n$fa-var-coins: \\f51e;\n$fa-var-colon-sign: \\e140;\n$fa-var-comment: \\f075;\n$fa-var-comment-dollar: \\f651;\n$fa-var-comment-dots: \\f4ad;\n$fa-var-commenting: \\f4ad;\n$fa-var-comment-medical: \\f7f5;\n$fa-var-comment-slash: \\f4b3;\n$fa-var-comment-sms: \\f7cd;\n$fa-var-sms: \\f7cd;\n$fa-var-comments: \\f086;\n$fa-var-comments-dollar: \\f653;\n$fa-var-compact-disc: \\f51f;\n$fa-var-compass: \\f14e;\n$fa-var-compass-drafting: \\f568;\n$fa-var-drafting-compass: \\f568;\n$fa-var-compress: \\f066;\n$fa-var-computer-mouse: \\f8cc;\n$fa-var-mouse: \\f8cc;\n$fa-var-cookie: \\f563;\n$fa-var-cookie-bite: \\f564;\n$fa-var-copy: \\f0c5;\n$fa-var-copyright: \\f1f9;\n$fa-var-couch: \\f4b8;\n$fa-var-credit-card: \\f09d;\n$fa-var-credit-card-alt: \\f09d;\n$fa-var-crop: \\f125;\n$fa-var-crop-simple: \\f565;\n$fa-var-crop-alt: \\f565;\n$fa-var-cross: \\f654;\n$fa-var-crosshairs: \\f05b;\n$fa-var-crow: \\f520;\n$fa-var-crown: \\f521;\n$fa-var-crutch: \\f7f7;\n$fa-var-cruzeiro-sign: \\e152;\n$fa-var-cube: \\f1b2;\n$fa-var-cubes: \\f1b3;\n$fa-var-d: \\44;\n$fa-var-database: \\f1c0;\n$fa-var-delete-left: \\f55a;\n$fa-var-backspace: \\f55a;\n$fa-var-democrat: \\f747;\n$fa-var-desktop: \\f390;\n$fa-var-desktop-alt: \\f390;\n$fa-var-dharmachakra: \\f655;\n$fa-var-diagram-next: \\e476;\n$fa-var-diagram-predecessor: \\e477;\n$fa-var-diagram-project: \\f542;\n$fa-var-project-diagram: \\f542;\n$fa-var-diagram-successor: \\e47a;\n$fa-var-diamond: \\f219;\n$fa-var-diamond-turn-right: \\f5eb;\n$fa-var-directions: \\f5eb;\n$fa-var-dice: \\f522;\n$fa-var-dice-d20: \\f6cf;\n$fa-var-dice-d6: \\f6d1;\n$fa-var-dice-five: \\f523;\n$fa-var-dice-four: \\f524;\n$fa-var-dice-one: \\f525;\n$fa-var-dice-six: \\f526;\n$fa-var-dice-three: \\f527;\n$fa-var-dice-two: \\f528;\n$fa-var-disease: \\f7fa;\n$fa-var-divide: \\f529;\n$fa-var-dna: \\f471;\n$fa-var-dog: \\f6d3;\n$fa-var-dollar-sign: \\24;\n$fa-var-dollar: \\24;\n$fa-var-usd: \\24;\n$fa-var-dolly: \\f472;\n$fa-var-dolly-box: \\f472;\n$fa-var-dong-sign: \\e169;\n$fa-var-door-closed: \\f52a;\n$fa-var-door-open: \\f52b;\n$fa-var-dove: \\f4ba;\n$fa-var-down-left-and-up-right-to-center: \\f422;\n$fa-var-compress-alt: \\f422;\n$fa-var-down-long: \\f309;\n$fa-var-long-arrow-alt-down: \\f309;\n$fa-var-download: \\f019;\n$fa-var-dragon: \\f6d5;\n$fa-var-draw-polygon: \\f5ee;\n$fa-var-droplet: \\f043;\n$fa-var-tint: \\f043;\n$fa-var-droplet-slash: \\f5c7;\n$fa-var-tint-slash: \\f5c7;\n$fa-var-drum: \\f569;\n$fa-var-drum-steelpan: \\f56a;\n$fa-var-drumstick-bite: \\f6d7;\n$fa-var-dumbbell: \\f44b;\n$fa-var-dumpster: \\f793;\n$fa-var-dumpster-fire: \\f794;\n$fa-var-dungeon: \\f6d9;\n$fa-var-e: \\45;\n$fa-var-ear-deaf: \\f2a4;\n$fa-var-deaf: \\f2a4;\n$fa-var-deafness: \\f2a4;\n$fa-var-hard-of-hearing: \\f2a4;\n$fa-var-ear-listen: \\f2a2;\n$fa-var-assistive-listening-systems: \\f2a2;\n$fa-var-earth-africa: \\f57c;\n$fa-var-globe-africa: \\f57c;\n$fa-var-earth-americas: \\f57d;\n$fa-var-earth: \\f57d;\n$fa-var-earth-america: \\f57d;\n$fa-var-globe-americas: \\f57d;\n$fa-var-earth-asia: \\f57e;\n$fa-var-globe-asia: \\f57e;\n$fa-var-earth-europe: \\f7a2;\n$fa-var-globe-europe: \\f7a2;\n$fa-var-earth-oceania: \\e47b;\n$fa-var-globe-oceania: \\e47b;\n$fa-var-egg: \\f7fb;\n$fa-var-eject: \\f052;\n$fa-var-elevator: \\e16d;\n$fa-var-ellipsis: \\f141;\n$fa-var-ellipsis-h: \\f141;\n$fa-var-ellipsis-vertical: \\f142;\n$fa-var-ellipsis-v: \\f142;\n$fa-var-envelope: \\f0e0;\n$fa-var-envelope-open: \\f2b6;\n$fa-var-envelope-open-text: \\f658;\n$fa-var-envelopes-bulk: \\f674;\n$fa-var-mail-bulk: \\f674;\n$fa-var-equals: \\3d;\n$fa-var-eraser: \\f12d;\n$fa-var-ethernet: \\f796;\n$fa-var-euro-sign: \\f153;\n$fa-var-eur: \\f153;\n$fa-var-euro: \\f153;\n$fa-var-exclamation: \\21;\n$fa-var-expand: \\f065;\n$fa-var-eye: \\f06e;\n$fa-var-eye-dropper: \\f1fb;\n$fa-var-eye-dropper-empty: \\f1fb;\n$fa-var-eyedropper: \\f1fb;\n$fa-var-eye-low-vision: \\f2a8;\n$fa-var-low-vision: \\f2a8;\n$fa-var-eye-slash: \\f070;\n$fa-var-f: \\46;\n$fa-var-face-angry: \\f556;\n$fa-var-angry: \\f556;\n$fa-var-face-dizzy: \\f567;\n$fa-var-dizzy: \\f567;\n$fa-var-face-flushed: \\f579;\n$fa-var-flushed: \\f579;\n$fa-var-face-frown: \\f119;\n$fa-var-frown: \\f119;\n$fa-var-face-frown-open: \\f57a;\n$fa-var-frown-open: \\f57a;\n$fa-var-face-grimace: \\f57f;\n$fa-var-grimace: \\f57f;\n$fa-var-face-grin: \\f580;\n$fa-var-grin: \\f580;\n$fa-var-face-grin-beam: \\f582;\n$fa-var-grin-beam: \\f582;\n$fa-var-face-grin-beam-sweat: \\f583;\n$fa-var-grin-beam-sweat: \\f583;\n$fa-var-face-grin-hearts: \\f584;\n$fa-var-grin-hearts: \\f584;\n$fa-var-face-grin-squint: \\f585;\n$fa-var-grin-squint: \\f585;\n$fa-var-face-grin-squint-tears: \\f586;\n$fa-var-grin-squint-tears: \\f586;\n$fa-var-face-grin-stars: \\f587;\n$fa-var-grin-stars: \\f587;\n$fa-var-face-grin-tears: \\f588;\n$fa-var-grin-tears: \\f588;\n$fa-var-face-grin-tongue: \\f589;\n$fa-var-grin-tongue: \\f589;\n$fa-var-face-grin-tongue-squint: \\f58a;\n$fa-var-grin-tongue-squint: \\f58a;\n$fa-var-face-grin-tongue-wink: \\f58b;\n$fa-var-grin-tongue-wink: \\f58b;\n$fa-var-face-grin-wide: \\f581;\n$fa-var-grin-alt: \\f581;\n$fa-var-face-grin-wink: \\f58c;\n$fa-var-grin-wink: \\f58c;\n$fa-var-face-kiss: \\f596;\n$fa-var-kiss: \\f596;\n$fa-var-face-kiss-beam: \\f597;\n$fa-var-kiss-beam: \\f597;\n$fa-var-face-kiss-wink-heart: \\f598;\n$fa-var-kiss-wink-heart: \\f598;\n$fa-var-face-laugh: \\f599;\n$fa-var-laugh: \\f599;\n$fa-var-face-laugh-beam: \\f59a;\n$fa-var-laugh-beam: \\f59a;\n$fa-var-face-laugh-squint: \\f59b;\n$fa-var-laugh-squint: \\f59b;\n$fa-var-face-laugh-wink: \\f59c;\n$fa-var-laugh-wink: \\f59c;\n$fa-var-face-meh: \\f11a;\n$fa-var-meh: \\f11a;\n$fa-var-face-meh-blank: \\f5a4;\n$fa-var-meh-blank: \\f5a4;\n$fa-var-face-rolling-eyes: \\f5a5;\n$fa-var-meh-rolling-eyes: \\f5a5;\n$fa-var-face-sad-cry: \\f5b3;\n$fa-var-sad-cry: \\f5b3;\n$fa-var-face-sad-tear: \\f5b4;\n$fa-var-sad-tear: \\f5b4;\n$fa-var-face-smile: \\f118;\n$fa-var-smile: \\f118;\n$fa-var-face-smile-beam: \\f5b8;\n$fa-var-smile-beam: \\f5b8;\n$fa-var-face-smile-wink: \\f4da;\n$fa-var-smile-wink: \\f4da;\n$fa-var-face-surprise: \\f5c2;\n$fa-var-surprise: \\f5c2;\n$fa-var-face-tired: \\f5c8;\n$fa-var-tired: \\f5c8;\n$fa-var-fan: \\f863;\n$fa-var-faucet: \\e005;\n$fa-var-fax: \\f1ac;\n$fa-var-feather: \\f52d;\n$fa-var-feather-pointed: \\f56b;\n$fa-var-feather-alt: \\f56b;\n$fa-var-file: \\f15b;\n$fa-var-file-arrow-down: \\f56d;\n$fa-var-file-download: \\f56d;\n$fa-var-file-arrow-up: \\f574;\n$fa-var-file-upload: \\f574;\n$fa-var-file-audio: \\f1c7;\n$fa-var-file-code: \\f1c9;\n$fa-var-file-contract: \\f56c;\n$fa-var-file-csv: \\f6dd;\n$fa-var-file-excel: \\f1c3;\n$fa-var-file-export: \\f56e;\n$fa-var-arrow-right-from-file: \\f56e;\n$fa-var-file-image: \\f1c5;\n$fa-var-file-import: \\f56f;\n$fa-var-arrow-right-to-file: \\f56f;\n$fa-var-file-invoice: \\f570;\n$fa-var-file-invoice-dollar: \\f571;\n$fa-var-file-lines: \\f15c;\n$fa-var-file-alt: \\f15c;\n$fa-var-file-text: \\f15c;\n$fa-var-file-medical: \\f477;\n$fa-var-file-pdf: \\f1c1;\n$fa-var-file-powerpoint: \\f1c4;\n$fa-var-file-prescription: \\f572;\n$fa-var-file-signature: \\f573;\n$fa-var-file-video: \\f1c8;\n$fa-var-file-waveform: \\f478;\n$fa-var-file-medical-alt: \\f478;\n$fa-var-file-word: \\f1c2;\n$fa-var-file-zipper: \\f1c6;\n$fa-var-file-archive: \\f1c6;\n$fa-var-fill: \\f575;\n$fa-var-fill-drip: \\f576;\n$fa-var-film: \\f008;\n$fa-var-filter: \\f0b0;\n$fa-var-filter-circle-dollar: \\f662;\n$fa-var-funnel-dollar: \\f662;\n$fa-var-filter-circle-xmark: \\e17b;\n$fa-var-fingerprint: \\f577;\n$fa-var-fire: \\f06d;\n$fa-var-fire-extinguisher: \\f134;\n$fa-var-fire-flame-curved: \\f7e4;\n$fa-var-fire-alt: \\f7e4;\n$fa-var-fire-flame-simple: \\f46a;\n$fa-var-burn: \\f46a;\n$fa-var-fish: \\f578;\n$fa-var-flag: \\f024;\n$fa-var-flag-checkered: \\f11e;\n$fa-var-flag-usa: \\f74d;\n$fa-var-flask: \\f0c3;\n$fa-var-floppy-disk: \\f0c7;\n$fa-var-save: \\f0c7;\n$fa-var-florin-sign: \\e184;\n$fa-var-folder: \\f07b;\n$fa-var-folder-minus: \\f65d;\n$fa-var-folder-open: \\f07c;\n$fa-var-folder-plus: \\f65e;\n$fa-var-folder-tree: \\f802;\n$fa-var-font: \\f031;\n$fa-var-football: \\f44e;\n$fa-var-football-ball: \\f44e;\n$fa-var-forward: \\f04e;\n$fa-var-forward-fast: \\f050;\n$fa-var-fast-forward: \\f050;\n$fa-var-forward-step: \\f051;\n$fa-var-step-forward: \\f051;\n$fa-var-franc-sign: \\e18f;\n$fa-var-frog: \\f52e;\n$fa-var-futbol: \\f1e3;\n$fa-var-futbol-ball: \\f1e3;\n$fa-var-soccer-ball: \\f1e3;\n$fa-var-g: \\47;\n$fa-var-gamepad: \\f11b;\n$fa-var-gas-pump: \\f52f;\n$fa-var-gauge: \\f624;\n$fa-var-dashboard: \\f624;\n$fa-var-gauge-med: \\f624;\n$fa-var-tachometer-alt-average: \\f624;\n$fa-var-gauge-high: \\f625;\n$fa-var-tachometer-alt: \\f625;\n$fa-var-tachometer-alt-fast: \\f625;\n$fa-var-gauge-simple: \\f629;\n$fa-var-gauge-simple-med: \\f629;\n$fa-var-tachometer-average: \\f629;\n$fa-var-gauge-simple-high: \\f62a;\n$fa-var-tachometer: \\f62a;\n$fa-var-tachometer-fast: \\f62a;\n$fa-var-gavel: \\f0e3;\n$fa-var-legal: \\f0e3;\n$fa-var-gear: \\f013;\n$fa-var-cog: \\f013;\n$fa-var-gears: \\f085;\n$fa-var-cogs: \\f085;\n$fa-var-gem: \\f3a5;\n$fa-var-genderless: \\f22d;\n$fa-var-ghost: \\f6e2;\n$fa-var-gift: \\f06b;\n$fa-var-gifts: \\f79c;\n$fa-var-glasses: \\f530;\n$fa-var-globe: \\f0ac;\n$fa-var-golf-ball-tee: \\f450;\n$fa-var-golf-ball: \\f450;\n$fa-var-gopuram: \\f664;\n$fa-var-graduation-cap: \\f19d;\n$fa-var-mortar-board: \\f19d;\n$fa-var-greater-than: \\3e;\n$fa-var-greater-than-equal: \\f532;\n$fa-var-grip: \\f58d;\n$fa-var-grip-horizontal: \\f58d;\n$fa-var-grip-lines: \\f7a4;\n$fa-var-grip-lines-vertical: \\f7a5;\n$fa-var-grip-vertical: \\f58e;\n$fa-var-guarani-sign: \\e19a;\n$fa-var-guitar: \\f7a6;\n$fa-var-gun: \\e19b;\n$fa-var-h: \\48;\n$fa-var-hammer: \\f6e3;\n$fa-var-hamsa: \\f665;\n$fa-var-hand: \\f256;\n$fa-var-hand-paper: \\f256;\n$fa-var-hand-back-fist: \\f255;\n$fa-var-hand-rock: \\f255;\n$fa-var-hand-dots: \\f461;\n$fa-var-allergies: \\f461;\n$fa-var-hand-fist: \\f6de;\n$fa-var-fist-raised: \\f6de;\n$fa-var-hand-holding: \\f4bd;\n$fa-var-hand-holding-dollar: \\f4c0;\n$fa-var-hand-holding-usd: \\f4c0;\n$fa-var-hand-holding-droplet: \\f4c1;\n$fa-var-hand-holding-water: \\f4c1;\n$fa-var-hand-holding-heart: \\f4be;\n$fa-var-hand-holding-medical: \\e05c;\n$fa-var-hand-lizard: \\f258;\n$fa-var-hand-middle-finger: \\f806;\n$fa-var-hand-peace: \\f25b;\n$fa-var-hand-point-down: \\f0a7;\n$fa-var-hand-point-left: \\f0a5;\n$fa-var-hand-point-right: \\f0a4;\n$fa-var-hand-point-up: \\f0a6;\n$fa-var-hand-pointer: \\f25a;\n$fa-var-hand-scissors: \\f257;\n$fa-var-hand-sparkles: \\e05d;\n$fa-var-hand-spock: \\f259;\n$fa-var-hands: \\f2a7;\n$fa-var-sign-language: \\f2a7;\n$fa-var-signing: \\f2a7;\n$fa-var-hands-asl-interpreting: \\f2a3;\n$fa-var-american-sign-language-interpreting: \\f2a3;\n$fa-var-asl-interpreting: \\f2a3;\n$fa-var-hands-american-sign-language-interpreting: \\f2a3;\n$fa-var-hands-bubbles: \\e05e;\n$fa-var-hands-wash: \\e05e;\n$fa-var-hands-clapping: \\e1a8;\n$fa-var-hands-holding: \\f4c2;\n$fa-var-hands-praying: \\f684;\n$fa-var-praying-hands: \\f684;\n$fa-var-handshake: \\f2b5;\n$fa-var-handshake-angle: \\f4c4;\n$fa-var-hands-helping: \\f4c4;\n$fa-var-handshake-simple-slash: \\e05f;\n$fa-var-handshake-alt-slash: \\e05f;\n$fa-var-handshake-slash: \\e060;\n$fa-var-hanukiah: \\f6e6;\n$fa-var-hard-drive: \\f0a0;\n$fa-var-hdd: \\f0a0;\n$fa-var-hashtag: \\23;\n$fa-var-hat-cowboy: \\f8c0;\n$fa-var-hat-cowboy-side: \\f8c1;\n$fa-var-hat-wizard: \\f6e8;\n$fa-var-head-side-cough: \\e061;\n$fa-var-head-side-cough-slash: \\e062;\n$fa-var-head-side-mask: \\e063;\n$fa-var-head-side-virus: \\e064;\n$fa-var-heading: \\f1dc;\n$fa-var-header: \\f1dc;\n$fa-var-headphones: \\f025;\n$fa-var-headphones-simple: \\f58f;\n$fa-var-headphones-alt: \\f58f;\n$fa-var-headset: \\f590;\n$fa-var-heart: \\f004;\n$fa-var-heart-crack: \\f7a9;\n$fa-var-heart-broken: \\f7a9;\n$fa-var-heart-pulse: \\f21e;\n$fa-var-heartbeat: \\f21e;\n$fa-var-helicopter: \\f533;\n$fa-var-helmet-safety: \\f807;\n$fa-var-hard-hat: \\f807;\n$fa-var-hat-hard: \\f807;\n$fa-var-highlighter: \\f591;\n$fa-var-hippo: \\f6ed;\n$fa-var-hockey-puck: \\f453;\n$fa-var-holly-berry: \\f7aa;\n$fa-var-horse: \\f6f0;\n$fa-var-horse-head: \\f7ab;\n$fa-var-hospital: \\f0f8;\n$fa-var-hospital-alt: \\f0f8;\n$fa-var-hospital-wide: \\f0f8;\n$fa-var-hospital-user: \\f80d;\n$fa-var-hot-tub-person: \\f593;\n$fa-var-hot-tub: \\f593;\n$fa-var-hotdog: \\f80f;\n$fa-var-hotel: \\f594;\n$fa-var-hourglass: \\f254;\n$fa-var-hourglass-2: \\f254;\n$fa-var-hourglass-half: \\f254;\n$fa-var-hourglass-empty: \\f252;\n$fa-var-hourglass-end: \\f253;\n$fa-var-hourglass-3: \\f253;\n$fa-var-hourglass-start: \\f251;\n$fa-var-hourglass-1: \\f251;\n$fa-var-house: \\f015;\n$fa-var-home: \\f015;\n$fa-var-home-alt: \\f015;\n$fa-var-home-lg-alt: \\f015;\n$fa-var-house-chimney: \\e3af;\n$fa-var-home-lg: \\e3af;\n$fa-var-house-chimney-crack: \\f6f1;\n$fa-var-house-damage: \\f6f1;\n$fa-var-house-chimney-medical: \\f7f2;\n$fa-var-clinic-medical: \\f7f2;\n$fa-var-house-chimney-user: \\e065;\n$fa-var-house-chimney-window: \\e00d;\n$fa-var-house-crack: \\e3b1;\n$fa-var-house-laptop: \\e066;\n$fa-var-laptop-house: \\e066;\n$fa-var-house-medical: \\e3b2;\n$fa-var-house-user: \\e1b0;\n$fa-var-home-user: \\e1b0;\n$fa-var-hryvnia-sign: \\f6f2;\n$fa-var-hryvnia: \\f6f2;\n$fa-var-i: \\49;\n$fa-var-i-cursor: \\f246;\n$fa-var-ice-cream: \\f810;\n$fa-var-icicles: \\f7ad;\n$fa-var-icons: \\f86d;\n$fa-var-heart-music-camera-bolt: \\f86d;\n$fa-var-id-badge: \\f2c1;\n$fa-var-id-card: \\f2c2;\n$fa-var-drivers-license: \\f2c2;\n$fa-var-id-card-clip: \\f47f;\n$fa-var-id-card-alt: \\f47f;\n$fa-var-igloo: \\f7ae;\n$fa-var-image: \\f03e;\n$fa-var-image-portrait: \\f3e0;\n$fa-var-portrait: \\f3e0;\n$fa-var-images: \\f302;\n$fa-var-inbox: \\f01c;\n$fa-var-indent: \\f03c;\n$fa-var-indian-rupee-sign: \\e1bc;\n$fa-var-indian-rupee: \\e1bc;\n$fa-var-inr: \\e1bc;\n$fa-var-industry: \\f275;\n$fa-var-infinity: \\f534;\n$fa-var-info: \\f129;\n$fa-var-italic: \\f033;\n$fa-var-j: \\4a;\n$fa-var-jedi: \\f669;\n$fa-var-jet-fighter: \\f0fb;\n$fa-var-fighter-jet: \\f0fb;\n$fa-var-joint: \\f595;\n$fa-var-k: \\4b;\n$fa-var-kaaba: \\f66b;\n$fa-var-key: \\f084;\n$fa-var-keyboard: \\f11c;\n$fa-var-khanda: \\f66d;\n$fa-var-kip-sign: \\e1c4;\n$fa-var-kit-medical: \\f479;\n$fa-var-first-aid: \\f479;\n$fa-var-kiwi-bird: \\f535;\n$fa-var-l: \\4c;\n$fa-var-landmark: \\f66f;\n$fa-var-language: \\f1ab;\n$fa-var-laptop: \\f109;\n$fa-var-laptop-code: \\f5fc;\n$fa-var-laptop-medical: \\f812;\n$fa-var-lari-sign: \\e1c8;\n$fa-var-layer-group: \\f5fd;\n$fa-var-leaf: \\f06c;\n$fa-var-left-long: \\f30a;\n$fa-var-long-arrow-alt-left: \\f30a;\n$fa-var-left-right: \\f337;\n$fa-var-arrows-alt-h: \\f337;\n$fa-var-lemon: \\f094;\n$fa-var-less-than: \\3c;\n$fa-var-less-than-equal: \\f537;\n$fa-var-life-ring: \\f1cd;\n$fa-var-lightbulb: \\f0eb;\n$fa-var-link: \\f0c1;\n$fa-var-chain: \\f0c1;\n$fa-var-link-slash: \\f127;\n$fa-var-chain-broken: \\f127;\n$fa-var-chain-slash: \\f127;\n$fa-var-unlink: \\f127;\n$fa-var-lira-sign: \\f195;\n$fa-var-list: \\f03a;\n$fa-var-list-squares: \\f03a;\n$fa-var-list-check: \\f0ae;\n$fa-var-tasks: \\f0ae;\n$fa-var-list-ol: \\f0cb;\n$fa-var-list-1-2: \\f0cb;\n$fa-var-list-numeric: \\f0cb;\n$fa-var-list-ul: \\f0ca;\n$fa-var-list-dots: \\f0ca;\n$fa-var-litecoin-sign: \\e1d3;\n$fa-var-location-arrow: \\f124;\n$fa-var-location-crosshairs: \\f601;\n$fa-var-location: \\f601;\n$fa-var-location-dot: \\f3c5;\n$fa-var-map-marker-alt: \\f3c5;\n$fa-var-location-pin: \\f041;\n$fa-var-map-marker: \\f041;\n$fa-var-lock: \\f023;\n$fa-var-lock-open: \\f3c1;\n$fa-var-lungs: \\f604;\n$fa-var-lungs-virus: \\e067;\n$fa-var-m: \\4d;\n$fa-var-magnet: \\f076;\n$fa-var-magnifying-glass: \\f002;\n$fa-var-search: \\f002;\n$fa-var-magnifying-glass-dollar: \\f688;\n$fa-var-search-dollar: \\f688;\n$fa-var-magnifying-glass-location: \\f689;\n$fa-var-search-location: \\f689;\n$fa-var-magnifying-glass-minus: \\f010;\n$fa-var-search-minus: \\f010;\n$fa-var-magnifying-glass-plus: \\f00e;\n$fa-var-search-plus: \\f00e;\n$fa-var-manat-sign: \\e1d5;\n$fa-var-map: \\f279;\n$fa-var-map-location: \\f59f;\n$fa-var-map-marked: \\f59f;\n$fa-var-map-location-dot: \\f5a0;\n$fa-var-map-marked-alt: \\f5a0;\n$fa-var-map-pin: \\f276;\n$fa-var-marker: \\f5a1;\n$fa-var-mars: \\f222;\n$fa-var-mars-and-venus: \\f224;\n$fa-var-mars-double: \\f227;\n$fa-var-mars-stroke: \\f229;\n$fa-var-mars-stroke-right: \\f22b;\n$fa-var-mars-stroke-h: \\f22b;\n$fa-var-mars-stroke-up: \\f22a;\n$fa-var-mars-stroke-v: \\f22a;\n$fa-var-martini-glass: \\f57b;\n$fa-var-glass-martini-alt: \\f57b;\n$fa-var-martini-glass-citrus: \\f561;\n$fa-var-cocktail: \\f561;\n$fa-var-martini-glass-empty: \\f000;\n$fa-var-glass-martini: \\f000;\n$fa-var-mask: \\f6fa;\n$fa-var-mask-face: \\e1d7;\n$fa-var-masks-theater: \\f630;\n$fa-var-theater-masks: \\f630;\n$fa-var-maximize: \\f31e;\n$fa-var-expand-arrows-alt: \\f31e;\n$fa-var-medal: \\f5a2;\n$fa-var-memory: \\f538;\n$fa-var-menorah: \\f676;\n$fa-var-mercury: \\f223;\n$fa-var-message: \\f27a;\n$fa-var-comment-alt: \\f27a;\n$fa-var-meteor: \\f753;\n$fa-var-microchip: \\f2db;\n$fa-var-microphone: \\f130;\n$fa-var-microphone-lines: \\f3c9;\n$fa-var-microphone-alt: \\f3c9;\n$fa-var-microphone-lines-slash: \\f539;\n$fa-var-microphone-alt-slash: \\f539;\n$fa-var-microphone-slash: \\f131;\n$fa-var-microscope: \\f610;\n$fa-var-mill-sign: \\e1ed;\n$fa-var-minimize: \\f78c;\n$fa-var-compress-arrows-alt: \\f78c;\n$fa-var-minus: \\f068;\n$fa-var-subtract: \\f068;\n$fa-var-mitten: \\f7b5;\n$fa-var-mobile: \\f3ce;\n$fa-var-mobile-android: \\f3ce;\n$fa-var-mobile-phone: \\f3ce;\n$fa-var-mobile-button: \\f10b;\n$fa-var-mobile-screen-button: \\f3cd;\n$fa-var-mobile-alt: \\f3cd;\n$fa-var-money-bill: \\f0d6;\n$fa-var-money-bill-1: \\f3d1;\n$fa-var-money-bill-alt: \\f3d1;\n$fa-var-money-bill-1-wave: \\f53b;\n$fa-var-money-bill-wave-alt: \\f53b;\n$fa-var-money-bill-wave: \\f53a;\n$fa-var-money-check: \\f53c;\n$fa-var-money-check-dollar: \\f53d;\n$fa-var-money-check-alt: \\f53d;\n$fa-var-monument: \\f5a6;\n$fa-var-moon: \\f186;\n$fa-var-mortar-pestle: \\f5a7;\n$fa-var-mosque: \\f678;\n$fa-var-motorcycle: \\f21c;\n$fa-var-mountain: \\f6fc;\n$fa-var-mug-hot: \\f7b6;\n$fa-var-mug-saucer: \\f0f4;\n$fa-var-coffee: \\f0f4;\n$fa-var-music: \\f001;\n$fa-var-n: \\4e;\n$fa-var-naira-sign: \\e1f6;\n$fa-var-network-wired: \\f6ff;\n$fa-var-neuter: \\f22c;\n$fa-var-newspaper: \\f1ea;\n$fa-var-not-equal: \\f53e;\n$fa-var-note-sticky: \\f249;\n$fa-var-sticky-note: \\f249;\n$fa-var-notes-medical: \\f481;\n$fa-var-o: \\4f;\n$fa-var-object-group: \\f247;\n$fa-var-object-ungroup: \\f248;\n$fa-var-oil-can: \\f613;\n$fa-var-om: \\f679;\n$fa-var-otter: \\f700;\n$fa-var-outdent: \\f03b;\n$fa-var-dedent: \\f03b;\n$fa-var-p: \\50;\n$fa-var-pager: \\f815;\n$fa-var-paint-roller: \\f5aa;\n$fa-var-paintbrush: \\f1fc;\n$fa-var-paint-brush: \\f1fc;\n$fa-var-palette: \\f53f;\n$fa-var-pallet: \\f482;\n$fa-var-panorama: \\e209;\n$fa-var-paper-plane: \\f1d8;\n$fa-var-paperclip: \\f0c6;\n$fa-var-parachute-box: \\f4cd;\n$fa-var-paragraph: \\f1dd;\n$fa-var-passport: \\f5ab;\n$fa-var-paste: \\f0ea;\n$fa-var-file-clipboard: \\f0ea;\n$fa-var-pause: \\f04c;\n$fa-var-paw: \\f1b0;\n$fa-var-peace: \\f67c;\n$fa-var-pen: \\f304;\n$fa-var-pen-clip: \\f305;\n$fa-var-pen-alt: \\f305;\n$fa-var-pen-fancy: \\f5ac;\n$fa-var-pen-nib: \\f5ad;\n$fa-var-pen-ruler: \\f5ae;\n$fa-var-pencil-ruler: \\f5ae;\n$fa-var-pen-to-square: \\f044;\n$fa-var-edit: \\f044;\n$fa-var-pencil: \\f303;\n$fa-var-pencil-alt: \\f303;\n$fa-var-people-arrows-left-right: \\e068;\n$fa-var-people-arrows: \\e068;\n$fa-var-people-carry-box: \\f4ce;\n$fa-var-people-carry: \\f4ce;\n$fa-var-pepper-hot: \\f816;\n$fa-var-percent: \\25;\n$fa-var-percentage: \\25;\n$fa-var-person: \\f183;\n$fa-var-male: \\f183;\n$fa-var-person-biking: \\f84a;\n$fa-var-biking: \\f84a;\n$fa-var-person-booth: \\f756;\n$fa-var-person-dots-from-line: \\f470;\n$fa-var-diagnoses: \\f470;\n$fa-var-person-dress: \\f182;\n$fa-var-female: \\f182;\n$fa-var-person-hiking: \\f6ec;\n$fa-var-hiking: \\f6ec;\n$fa-var-person-praying: \\f683;\n$fa-var-pray: \\f683;\n$fa-var-person-running: \\f70c;\n$fa-var-running: \\f70c;\n$fa-var-person-skating: \\f7c5;\n$fa-var-skating: \\f7c5;\n$fa-var-person-skiing: \\f7c9;\n$fa-var-skiing: \\f7c9;\n$fa-var-person-skiing-nordic: \\f7ca;\n$fa-var-skiing-nordic: \\f7ca;\n$fa-var-person-snowboarding: \\f7ce;\n$fa-var-snowboarding: \\f7ce;\n$fa-var-person-swimming: \\f5c4;\n$fa-var-swimmer: \\f5c4;\n$fa-var-person-walking: \\f554;\n$fa-var-walking: \\f554;\n$fa-var-person-walking-with-cane: \\f29d;\n$fa-var-blind: \\f29d;\n$fa-var-peseta-sign: \\e221;\n$fa-var-peso-sign: \\e222;\n$fa-var-phone: \\f095;\n$fa-var-phone-flip: \\f879;\n$fa-var-phone-alt: \\f879;\n$fa-var-phone-slash: \\f3dd;\n$fa-var-phone-volume: \\f2a0;\n$fa-var-volume-control-phone: \\f2a0;\n$fa-var-photo-film: \\f87c;\n$fa-var-photo-video: \\f87c;\n$fa-var-piggy-bank: \\f4d3;\n$fa-var-pills: \\f484;\n$fa-var-pizza-slice: \\f818;\n$fa-var-place-of-worship: \\f67f;\n$fa-var-plane: \\f072;\n$fa-var-plane-arrival: \\f5af;\n$fa-var-plane-departure: \\f5b0;\n$fa-var-plane-slash: \\e069;\n$fa-var-play: \\f04b;\n$fa-var-plug: \\f1e6;\n$fa-var-plus: \\2b;\n$fa-var-add: \\2b;\n$fa-var-plus-minus: \\e43c;\n$fa-var-podcast: \\f2ce;\n$fa-var-poo: \\f2fe;\n$fa-var-poo-storm: \\f75a;\n$fa-var-poo-bolt: \\f75a;\n$fa-var-poop: \\f619;\n$fa-var-power-off: \\f011;\n$fa-var-prescription: \\f5b1;\n$fa-var-prescription-bottle: \\f485;\n$fa-var-prescription-bottle-medical: \\f486;\n$fa-var-prescription-bottle-alt: \\f486;\n$fa-var-print: \\f02f;\n$fa-var-pump-medical: \\e06a;\n$fa-var-pump-soap: \\e06b;\n$fa-var-puzzle-piece: \\f12e;\n$fa-var-q: \\51;\n$fa-var-qrcode: \\f029;\n$fa-var-question: \\3f;\n$fa-var-quote-left: \\f10d;\n$fa-var-quote-left-alt: \\f10d;\n$fa-var-quote-right: \\f10e;\n$fa-var-quote-right-alt: \\f10e;\n$fa-var-r: \\52;\n$fa-var-radiation: \\f7b9;\n$fa-var-rainbow: \\f75b;\n$fa-var-receipt: \\f543;\n$fa-var-record-vinyl: \\f8d9;\n$fa-var-rectangle-ad: \\f641;\n$fa-var-ad: \\f641;\n$fa-var-rectangle-list: \\f022;\n$fa-var-list-alt: \\f022;\n$fa-var-rectangle-xmark: \\f410;\n$fa-var-rectangle-times: \\f410;\n$fa-var-times-rectangle: \\f410;\n$fa-var-window-close: \\f410;\n$fa-var-recycle: \\f1b8;\n$fa-var-registered: \\f25d;\n$fa-var-repeat: \\f363;\n$fa-var-reply: \\f3e5;\n$fa-var-mail-reply: \\f3e5;\n$fa-var-reply-all: \\f122;\n$fa-var-mail-reply-all: \\f122;\n$fa-var-republican: \\f75e;\n$fa-var-restroom: \\f7bd;\n$fa-var-retweet: \\f079;\n$fa-var-ribbon: \\f4d6;\n$fa-var-right-from-bracket: \\f2f5;\n$fa-var-sign-out-alt: \\f2f5;\n$fa-var-right-left: \\f362;\n$fa-var-exchange-alt: \\f362;\n$fa-var-right-long: \\f30b;\n$fa-var-long-arrow-alt-right: \\f30b;\n$fa-var-right-to-bracket: \\f2f6;\n$fa-var-sign-in-alt: \\f2f6;\n$fa-var-ring: \\f70b;\n$fa-var-road: \\f018;\n$fa-var-robot: \\f544;\n$fa-var-rocket: \\f135;\n$fa-var-rotate: \\f2f1;\n$fa-var-sync-alt: \\f2f1;\n$fa-var-rotate-left: \\f2ea;\n$fa-var-rotate-back: \\f2ea;\n$fa-var-rotate-backward: \\f2ea;\n$fa-var-undo-alt: \\f2ea;\n$fa-var-rotate-right: \\f2f9;\n$fa-var-redo-alt: \\f2f9;\n$fa-var-rotate-forward: \\f2f9;\n$fa-var-route: \\f4d7;\n$fa-var-rss: \\f09e;\n$fa-var-feed: \\f09e;\n$fa-var-ruble-sign: \\f158;\n$fa-var-rouble: \\f158;\n$fa-var-rub: \\f158;\n$fa-var-ruble: \\f158;\n$fa-var-ruler: \\f545;\n$fa-var-ruler-combined: \\f546;\n$fa-var-ruler-horizontal: \\f547;\n$fa-var-ruler-vertical: \\f548;\n$fa-var-rupee-sign: \\f156;\n$fa-var-rupee: \\f156;\n$fa-var-rupiah-sign: \\e23d;\n$fa-var-s: \\53;\n$fa-var-sailboat: \\e445;\n$fa-var-satellite: \\f7bf;\n$fa-var-satellite-dish: \\f7c0;\n$fa-var-scale-balanced: \\f24e;\n$fa-var-balance-scale: \\f24e;\n$fa-var-scale-unbalanced: \\f515;\n$fa-var-balance-scale-left: \\f515;\n$fa-var-scale-unbalanced-flip: \\f516;\n$fa-var-balance-scale-right: \\f516;\n$fa-var-school: \\f549;\n$fa-var-scissors: \\f0c4;\n$fa-var-cut: \\f0c4;\n$fa-var-screwdriver: \\f54a;\n$fa-var-screwdriver-wrench: \\f7d9;\n$fa-var-tools: \\f7d9;\n$fa-var-scroll: \\f70e;\n$fa-var-scroll-torah: \\f6a0;\n$fa-var-torah: \\f6a0;\n$fa-var-sd-card: \\f7c2;\n$fa-var-section: \\e447;\n$fa-var-seedling: \\f4d8;\n$fa-var-sprout: \\f4d8;\n$fa-var-server: \\f233;\n$fa-var-shapes: \\f61f;\n$fa-var-triangle-circle-square: \\f61f;\n$fa-var-share: \\f064;\n$fa-var-arrow-turn-right: \\f064;\n$fa-var-mail-forward: \\f064;\n$fa-var-share-from-square: \\f14d;\n$fa-var-share-square: \\f14d;\n$fa-var-share-nodes: \\f1e0;\n$fa-var-share-alt: \\f1e0;\n$fa-var-shekel-sign: \\f20b;\n$fa-var-ils: \\f20b;\n$fa-var-shekel: \\f20b;\n$fa-var-sheqel: \\f20b;\n$fa-var-sheqel-sign: \\f20b;\n$fa-var-shield: \\f132;\n$fa-var-shield-blank: \\f3ed;\n$fa-var-shield-alt: \\f3ed;\n$fa-var-shield-virus: \\e06c;\n$fa-var-ship: \\f21a;\n$fa-var-shirt: \\f553;\n$fa-var-t-shirt: \\f553;\n$fa-var-tshirt: \\f553;\n$fa-var-shoe-prints: \\f54b;\n$fa-var-shop: \\f54f;\n$fa-var-store-alt: \\f54f;\n$fa-var-shop-slash: \\e070;\n$fa-var-store-alt-slash: \\e070;\n$fa-var-shower: \\f2cc;\n$fa-var-shrimp: \\e448;\n$fa-var-shuffle: \\f074;\n$fa-var-random: \\f074;\n$fa-var-shuttle-space: \\f197;\n$fa-var-space-shuttle: \\f197;\n$fa-var-sign-hanging: \\f4d9;\n$fa-var-sign: \\f4d9;\n$fa-var-signal: \\f012;\n$fa-var-signal-5: \\f012;\n$fa-var-signal-perfect: \\f012;\n$fa-var-signature: \\f5b7;\n$fa-var-signs-post: \\f277;\n$fa-var-map-signs: \\f277;\n$fa-var-sim-card: \\f7c4;\n$fa-var-sink: \\e06d;\n$fa-var-sitemap: \\f0e8;\n$fa-var-skull: \\f54c;\n$fa-var-skull-crossbones: \\f714;\n$fa-var-slash: \\f715;\n$fa-var-sleigh: \\f7cc;\n$fa-var-sliders: \\f1de;\n$fa-var-sliders-h: \\f1de;\n$fa-var-smog: \\f75f;\n$fa-var-smoking: \\f48d;\n$fa-var-snowflake: \\f2dc;\n$fa-var-snowman: \\f7d0;\n$fa-var-snowplow: \\f7d2;\n$fa-var-soap: \\e06e;\n$fa-var-socks: \\f696;\n$fa-var-solar-panel: \\f5ba;\n$fa-var-sort: \\f0dc;\n$fa-var-unsorted: \\f0dc;\n$fa-var-sort-down: \\f0dd;\n$fa-var-sort-desc: \\f0dd;\n$fa-var-sort-up: \\f0de;\n$fa-var-sort-asc: \\f0de;\n$fa-var-spa: \\f5bb;\n$fa-var-spaghetti-monster-flying: \\f67b;\n$fa-var-pastafarianism: \\f67b;\n$fa-var-spell-check: \\f891;\n$fa-var-spider: \\f717;\n$fa-var-spinner: \\f110;\n$fa-var-splotch: \\f5bc;\n$fa-var-spoon: \\f2e5;\n$fa-var-utensil-spoon: \\f2e5;\n$fa-var-spray-can: \\f5bd;\n$fa-var-spray-can-sparkles: \\f5d0;\n$fa-var-air-freshener: \\f5d0;\n$fa-var-square: \\f0c8;\n$fa-var-square-arrow-up-right: \\f14c;\n$fa-var-external-link-square: \\f14c;\n$fa-var-square-caret-down: \\f150;\n$fa-var-caret-square-down: \\f150;\n$fa-var-square-caret-left: \\f191;\n$fa-var-caret-square-left: \\f191;\n$fa-var-square-caret-right: \\f152;\n$fa-var-caret-square-right: \\f152;\n$fa-var-square-caret-up: \\f151;\n$fa-var-caret-square-up: \\f151;\n$fa-var-square-check: \\f14a;\n$fa-var-check-square: \\f14a;\n$fa-var-square-envelope: \\f199;\n$fa-var-envelope-square: \\f199;\n$fa-var-square-full: \\f45c;\n$fa-var-square-h: \\f0fd;\n$fa-var-h-square: \\f0fd;\n$fa-var-square-minus: \\f146;\n$fa-var-minus-square: \\f146;\n$fa-var-square-parking: \\f540;\n$fa-var-parking: \\f540;\n$fa-var-square-pen: \\f14b;\n$fa-var-pen-square: \\f14b;\n$fa-var-pencil-square: \\f14b;\n$fa-var-square-phone: \\f098;\n$fa-var-phone-square: \\f098;\n$fa-var-square-phone-flip: \\f87b;\n$fa-var-phone-square-alt: \\f87b;\n$fa-var-square-plus: \\f0fe;\n$fa-var-plus-square: \\f0fe;\n$fa-var-square-poll-horizontal: \\f682;\n$fa-var-poll-h: \\f682;\n$fa-var-square-poll-vertical: \\f681;\n$fa-var-poll: \\f681;\n$fa-var-square-root-variable: \\f698;\n$fa-var-square-root-alt: \\f698;\n$fa-var-square-rss: \\f143;\n$fa-var-rss-square: \\f143;\n$fa-var-square-share-nodes: \\f1e1;\n$fa-var-share-alt-square: \\f1e1;\n$fa-var-square-up-right: \\f360;\n$fa-var-external-link-square-alt: \\f360;\n$fa-var-square-xmark: \\f2d3;\n$fa-var-times-square: \\f2d3;\n$fa-var-xmark-square: \\f2d3;\n$fa-var-stairs: \\e289;\n$fa-var-stamp: \\f5bf;\n$fa-var-star: \\f005;\n$fa-var-star-and-crescent: \\f699;\n$fa-var-star-half: \\f089;\n$fa-var-star-half-stroke: \\f5c0;\n$fa-var-star-half-alt: \\f5c0;\n$fa-var-star-of-david: \\f69a;\n$fa-var-star-of-life: \\f621;\n$fa-var-sterling-sign: \\f154;\n$fa-var-gbp: \\f154;\n$fa-var-pound-sign: \\f154;\n$fa-var-stethoscope: \\f0f1;\n$fa-var-stop: \\f04d;\n$fa-var-stopwatch: \\f2f2;\n$fa-var-stopwatch-20: \\e06f;\n$fa-var-store: \\f54e;\n$fa-var-store-slash: \\e071;\n$fa-var-street-view: \\f21d;\n$fa-var-strikethrough: \\f0cc;\n$fa-var-stroopwafel: \\f551;\n$fa-var-subscript: \\f12c;\n$fa-var-suitcase: \\f0f2;\n$fa-var-suitcase-medical: \\f0fa;\n$fa-var-medkit: \\f0fa;\n$fa-var-suitcase-rolling: \\f5c1;\n$fa-var-sun: \\f185;\n$fa-var-superscript: \\f12b;\n$fa-var-swatchbook: \\f5c3;\n$fa-var-synagogue: \\f69b;\n$fa-var-syringe: \\f48e;\n$fa-var-t: \\54;\n$fa-var-table: \\f0ce;\n$fa-var-table-cells: \\f00a;\n$fa-var-th: \\f00a;\n$fa-var-table-cells-large: \\f009;\n$fa-var-th-large: \\f009;\n$fa-var-table-columns: \\f0db;\n$fa-var-columns: \\f0db;\n$fa-var-table-list: \\f00b;\n$fa-var-th-list: \\f00b;\n$fa-var-table-tennis-paddle-ball: \\f45d;\n$fa-var-ping-pong-paddle-ball: \\f45d;\n$fa-var-table-tennis: \\f45d;\n$fa-var-tablet: \\f3fb;\n$fa-var-tablet-android: \\f3fb;\n$fa-var-tablet-button: \\f10a;\n$fa-var-tablet-screen-button: \\f3fa;\n$fa-var-tablet-alt: \\f3fa;\n$fa-var-tablets: \\f490;\n$fa-var-tachograph-digital: \\f566;\n$fa-var-digital-tachograph: \\f566;\n$fa-var-tag: \\f02b;\n$fa-var-tags: \\f02c;\n$fa-var-tape: \\f4db;\n$fa-var-taxi: \\f1ba;\n$fa-var-cab: \\f1ba;\n$fa-var-teeth: \\f62e;\n$fa-var-teeth-open: \\f62f;\n$fa-var-temperature-empty: \\f2cb;\n$fa-var-temperature-0: \\f2cb;\n$fa-var-thermometer-0: \\f2cb;\n$fa-var-thermometer-empty: \\f2cb;\n$fa-var-temperature-full: \\f2c7;\n$fa-var-temperature-4: \\f2c7;\n$fa-var-thermometer-4: \\f2c7;\n$fa-var-thermometer-full: \\f2c7;\n$fa-var-temperature-half: \\f2c9;\n$fa-var-temperature-2: \\f2c9;\n$fa-var-thermometer-2: \\f2c9;\n$fa-var-thermometer-half: \\f2c9;\n$fa-var-temperature-high: \\f769;\n$fa-var-temperature-low: \\f76b;\n$fa-var-temperature-quarter: \\f2ca;\n$fa-var-temperature-1: \\f2ca;\n$fa-var-thermometer-1: \\f2ca;\n$fa-var-thermometer-quarter: \\f2ca;\n$fa-var-temperature-three-quarters: \\f2c8;\n$fa-var-temperature-3: \\f2c8;\n$fa-var-thermometer-3: \\f2c8;\n$fa-var-thermometer-three-quarters: \\f2c8;\n$fa-var-tenge-sign: \\f7d7;\n$fa-var-tenge: \\f7d7;\n$fa-var-terminal: \\f120;\n$fa-var-text-height: \\f034;\n$fa-var-text-slash: \\f87d;\n$fa-var-remove-format: \\f87d;\n$fa-var-text-width: \\f035;\n$fa-var-thermometer: \\f491;\n$fa-var-thumbs-down: \\f165;\n$fa-var-thumbs-up: \\f164;\n$fa-var-thumbtack: \\f08d;\n$fa-var-thumb-tack: \\f08d;\n$fa-var-ticket: \\f145;\n$fa-var-ticket-simple: \\f3ff;\n$fa-var-ticket-alt: \\f3ff;\n$fa-var-timeline: \\e29c;\n$fa-var-toggle-off: \\f204;\n$fa-var-toggle-on: \\f205;\n$fa-var-toilet: \\f7d8;\n$fa-var-toilet-paper: \\f71e;\n$fa-var-toilet-paper-slash: \\e072;\n$fa-var-toolbox: \\f552;\n$fa-var-tooth: \\f5c9;\n$fa-var-torii-gate: \\f6a1;\n$fa-var-tower-broadcast: \\f519;\n$fa-var-broadcast-tower: \\f519;\n$fa-var-tractor: \\f722;\n$fa-var-trademark: \\f25c;\n$fa-var-traffic-light: \\f637;\n$fa-var-trailer: \\e041;\n$fa-var-train: \\f238;\n$fa-var-train-subway: \\f239;\n$fa-var-subway: \\f239;\n$fa-var-train-tram: \\f7da;\n$fa-var-tram: \\f7da;\n$fa-var-transgender: \\f225;\n$fa-var-transgender-alt: \\f225;\n$fa-var-trash: \\f1f8;\n$fa-var-trash-arrow-up: \\f829;\n$fa-var-trash-restore: \\f829;\n$fa-var-trash-can: \\f2ed;\n$fa-var-trash-alt: \\f2ed;\n$fa-var-trash-can-arrow-up: \\f82a;\n$fa-var-trash-restore-alt: \\f82a;\n$fa-var-tree: \\f1bb;\n$fa-var-triangle-exclamation: \\f071;\n$fa-var-exclamation-triangle: \\f071;\n$fa-var-warning: \\f071;\n$fa-var-trophy: \\f091;\n$fa-var-truck: \\f0d1;\n$fa-var-truck-fast: \\f48b;\n$fa-var-shipping-fast: \\f48b;\n$fa-var-truck-medical: \\f0f9;\n$fa-var-ambulance: \\f0f9;\n$fa-var-truck-monster: \\f63b;\n$fa-var-truck-moving: \\f4df;\n$fa-var-truck-pickup: \\f63c;\n$fa-var-truck-ramp-box: \\f4de;\n$fa-var-truck-loading: \\f4de;\n$fa-var-tty: \\f1e4;\n$fa-var-teletype: \\f1e4;\n$fa-var-turkish-lira-sign: \\e2bb;\n$fa-var-try: \\e2bb;\n$fa-var-turkish-lira: \\e2bb;\n$fa-var-turn-down: \\f3be;\n$fa-var-level-down-alt: \\f3be;\n$fa-var-turn-up: \\f3bf;\n$fa-var-level-up-alt: \\f3bf;\n$fa-var-tv: \\f26c;\n$fa-var-television: \\f26c;\n$fa-var-tv-alt: \\f26c;\n$fa-var-u: \\55;\n$fa-var-umbrella: \\f0e9;\n$fa-var-umbrella-beach: \\f5ca;\n$fa-var-underline: \\f0cd;\n$fa-var-universal-access: \\f29a;\n$fa-var-unlock: \\f09c;\n$fa-var-unlock-keyhole: \\f13e;\n$fa-var-unlock-alt: \\f13e;\n$fa-var-up-down: \\f338;\n$fa-var-arrows-alt-v: \\f338;\n$fa-var-up-down-left-right: \\f0b2;\n$fa-var-arrows-alt: \\f0b2;\n$fa-var-up-long: \\f30c;\n$fa-var-long-arrow-alt-up: \\f30c;\n$fa-var-up-right-and-down-left-from-center: \\f424;\n$fa-var-expand-alt: \\f424;\n$fa-var-up-right-from-square: \\f35d;\n$fa-var-external-link-alt: \\f35d;\n$fa-var-upload: \\f093;\n$fa-var-user: \\f007;\n$fa-var-user-astronaut: \\f4fb;\n$fa-var-user-check: \\f4fc;\n$fa-var-user-clock: \\f4fd;\n$fa-var-user-doctor: \\f0f0;\n$fa-var-user-md: \\f0f0;\n$fa-var-user-gear: \\f4fe;\n$fa-var-user-cog: \\f4fe;\n$fa-var-user-graduate: \\f501;\n$fa-var-user-group: \\f500;\n$fa-var-user-friends: \\f500;\n$fa-var-user-injured: \\f728;\n$fa-var-user-large: \\f406;\n$fa-var-user-alt: \\f406;\n$fa-var-user-large-slash: \\f4fa;\n$fa-var-user-alt-slash: \\f4fa;\n$fa-var-user-lock: \\f502;\n$fa-var-user-minus: \\f503;\n$fa-var-user-ninja: \\f504;\n$fa-var-user-nurse: \\f82f;\n$fa-var-user-pen: \\f4ff;\n$fa-var-user-edit: \\f4ff;\n$fa-var-user-plus: \\f234;\n$fa-var-user-secret: \\f21b;\n$fa-var-user-shield: \\f505;\n$fa-var-user-slash: \\f506;\n$fa-var-user-tag: \\f507;\n$fa-var-user-tie: \\f508;\n$fa-var-user-xmark: \\f235;\n$fa-var-user-times: \\f235;\n$fa-var-users: \\f0c0;\n$fa-var-users-gear: \\f509;\n$fa-var-users-cog: \\f509;\n$fa-var-users-slash: \\e073;\n$fa-var-utensils: \\f2e7;\n$fa-var-cutlery: \\f2e7;\n$fa-var-v: \\56;\n$fa-var-van-shuttle: \\f5b6;\n$fa-var-shuttle-van: \\f5b6;\n$fa-var-vault: \\e2c5;\n$fa-var-vector-square: \\f5cb;\n$fa-var-venus: \\f221;\n$fa-var-venus-double: \\f226;\n$fa-var-venus-mars: \\f228;\n$fa-var-vest: \\e085;\n$fa-var-vest-patches: \\e086;\n$fa-var-vial: \\f492;\n$fa-var-vials: \\f493;\n$fa-var-video: \\f03d;\n$fa-var-video-camera: \\f03d;\n$fa-var-video-slash: \\f4e2;\n$fa-var-vihara: \\f6a7;\n$fa-var-virus: \\e074;\n$fa-var-virus-covid: \\e4a8;\n$fa-var-virus-covid-slash: \\e4a9;\n$fa-var-virus-slash: \\e075;\n$fa-var-viruses: \\e076;\n$fa-var-voicemail: \\f897;\n$fa-var-volleyball: \\f45f;\n$fa-var-volleyball-ball: \\f45f;\n$fa-var-volume-high: \\f028;\n$fa-var-volume-up: \\f028;\n$fa-var-volume-low: \\f027;\n$fa-var-volume-down: \\f027;\n$fa-var-volume-off: \\f026;\n$fa-var-volume-xmark: \\f6a9;\n$fa-var-volume-mute: \\f6a9;\n$fa-var-volume-times: \\f6a9;\n$fa-var-vr-cardboard: \\f729;\n$fa-var-w: \\57;\n$fa-var-wallet: \\f555;\n$fa-var-wand-magic: \\f0d0;\n$fa-var-magic: \\f0d0;\n$fa-var-wand-magic-sparkles: \\e2ca;\n$fa-var-magic-wand-sparkles: \\e2ca;\n$fa-var-wand-sparkles: \\f72b;\n$fa-var-warehouse: \\f494;\n$fa-var-water: \\f773;\n$fa-var-water-ladder: \\f5c5;\n$fa-var-ladder-water: \\f5c5;\n$fa-var-swimming-pool: \\f5c5;\n$fa-var-wave-square: \\f83e;\n$fa-var-weight-hanging: \\f5cd;\n$fa-var-weight-scale: \\f496;\n$fa-var-weight: \\f496;\n$fa-var-wheelchair: \\f193;\n$fa-var-whiskey-glass: \\f7a0;\n$fa-var-glass-whiskey: \\f7a0;\n$fa-var-wifi: \\f1eb;\n$fa-var-wifi-3: \\f1eb;\n$fa-var-wifi-strong: \\f1eb;\n$fa-var-wind: \\f72e;\n$fa-var-window-maximize: \\f2d0;\n$fa-var-window-minimize: \\f2d1;\n$fa-var-window-restore: \\f2d2;\n$fa-var-wine-bottle: \\f72f;\n$fa-var-wine-glass: \\f4e3;\n$fa-var-wine-glass-empty: \\f5ce;\n$fa-var-wine-glass-alt: \\f5ce;\n$fa-var-won-sign: \\f159;\n$fa-var-krw: \\f159;\n$fa-var-won: \\f159;\n$fa-var-wrench: \\f0ad;\n$fa-var-x: \\58;\n$fa-var-x-ray: \\f497;\n$fa-var-xmark: \\f00d;\n$fa-var-close: \\f00d;\n$fa-var-multiply: \\f00d;\n$fa-var-remove: \\f00d;\n$fa-var-times: \\f00d;\n$fa-var-y: \\59;\n$fa-var-yen-sign: \\f157;\n$fa-var-cny: \\f157;\n$fa-var-jpy: \\f157;\n$fa-var-rmb: \\f157;\n$fa-var-yen: \\f157;\n$fa-var-yin-yang: \\f6ad;\n$fa-var-z: \\5a;\n\n$fa-var-42-group: \\e080;\n$fa-var-innosoft: \\e080;\n$fa-var-500px: \\f26e;\n$fa-var-accessible-icon: \\f368;\n$fa-var-accusoft: \\f369;\n$fa-var-adn: \\f170;\n$fa-var-adversal: \\f36a;\n$fa-var-affiliatetheme: \\f36b;\n$fa-var-airbnb: \\f834;\n$fa-var-algolia: \\f36c;\n$fa-var-alipay: \\f642;\n$fa-var-amazon: \\f270;\n$fa-var-amazon-pay: \\f42c;\n$fa-var-amilia: \\f36d;\n$fa-var-android: \\f17b;\n$fa-var-angellist: \\f209;\n$fa-var-angrycreative: \\f36e;\n$fa-var-angular: \\f420;\n$fa-var-app-store: \\f36f;\n$fa-var-app-store-ios: \\f370;\n$fa-var-apper: \\f371;\n$fa-var-apple: \\f179;\n$fa-var-apple-pay: \\f415;\n$fa-var-artstation: \\f77a;\n$fa-var-asymmetrik: \\f372;\n$fa-var-atlassian: \\f77b;\n$fa-var-audible: \\f373;\n$fa-var-autoprefixer: \\f41c;\n$fa-var-avianex: \\f374;\n$fa-var-aviato: \\f421;\n$fa-var-aws: \\f375;\n$fa-var-bandcamp: \\f2d5;\n$fa-var-battle-net: \\f835;\n$fa-var-behance: \\f1b4;\n$fa-var-behance-square: \\f1b5;\n$fa-var-bilibili: \\e3d9;\n$fa-var-bimobject: \\f378;\n$fa-var-bitbucket: \\f171;\n$fa-var-bitcoin: \\f379;\n$fa-var-bity: \\f37a;\n$fa-var-black-tie: \\f27e;\n$fa-var-blackberry: \\f37b;\n$fa-var-blogger: \\f37c;\n$fa-var-blogger-b: \\f37d;\n$fa-var-bluetooth: \\f293;\n$fa-var-bluetooth-b: \\f294;\n$fa-var-bootstrap: \\f836;\n$fa-var-bots: \\e340;\n$fa-var-btc: \\f15a;\n$fa-var-buffer: \\f837;\n$fa-var-buromobelexperte: \\f37f;\n$fa-var-buy-n-large: \\f8a6;\n$fa-var-buysellads: \\f20d;\n$fa-var-canadian-maple-leaf: \\f785;\n$fa-var-cc-amazon-pay: \\f42d;\n$fa-var-cc-amex: \\f1f3;\n$fa-var-cc-apple-pay: \\f416;\n$fa-var-cc-diners-club: \\f24c;\n$fa-var-cc-discover: \\f1f2;\n$fa-var-cc-jcb: \\f24b;\n$fa-var-cc-mastercard: \\f1f1;\n$fa-var-cc-paypal: \\f1f4;\n$fa-var-cc-stripe: \\f1f5;\n$fa-var-cc-visa: \\f1f0;\n$fa-var-centercode: \\f380;\n$fa-var-centos: \\f789;\n$fa-var-chrome: \\f268;\n$fa-var-chromecast: \\f838;\n$fa-var-cloudflare: \\e07d;\n$fa-var-cloudscale: \\f383;\n$fa-var-cloudsmith: \\f384;\n$fa-var-cloudversify: \\f385;\n$fa-var-cmplid: \\e360;\n$fa-var-codepen: \\f1cb;\n$fa-var-codiepie: \\f284;\n$fa-var-confluence: \\f78d;\n$fa-var-connectdevelop: \\f20e;\n$fa-var-contao: \\f26d;\n$fa-var-cotton-bureau: \\f89e;\n$fa-var-cpanel: \\f388;\n$fa-var-creative-commons: \\f25e;\n$fa-var-creative-commons-by: \\f4e7;\n$fa-var-creative-commons-nc: \\f4e8;\n$fa-var-creative-commons-nc-eu: \\f4e9;\n$fa-var-creative-commons-nc-jp: \\f4ea;\n$fa-var-creative-commons-nd: \\f4eb;\n$fa-var-creative-commons-pd: \\f4ec;\n$fa-var-creative-commons-pd-alt: \\f4ed;\n$fa-var-creative-commons-remix: \\f4ee;\n$fa-var-creative-commons-sa: \\f4ef;\n$fa-var-creative-commons-sampling: \\f4f0;\n$fa-var-creative-commons-sampling-plus: \\f4f1;\n$fa-var-creative-commons-share: \\f4f2;\n$fa-var-creative-commons-zero: \\f4f3;\n$fa-var-critical-role: \\f6c9;\n$fa-var-css3: \\f13c;\n$fa-var-css3-alt: \\f38b;\n$fa-var-cuttlefish: \\f38c;\n$fa-var-d-and-d: \\f38d;\n$fa-var-d-and-d-beyond: \\f6ca;\n$fa-var-dailymotion: \\e052;\n$fa-var-dashcube: \\f210;\n$fa-var-deezer: \\e077;\n$fa-var-delicious: \\f1a5;\n$fa-var-deploydog: \\f38e;\n$fa-var-deskpro: \\f38f;\n$fa-var-dev: \\f6cc;\n$fa-var-deviantart: \\f1bd;\n$fa-var-dhl: \\f790;\n$fa-var-diaspora: \\f791;\n$fa-var-digg: \\f1a6;\n$fa-var-digital-ocean: \\f391;\n$fa-var-discord: \\f392;\n$fa-var-discourse: \\f393;\n$fa-var-dochub: \\f394;\n$fa-var-docker: \\f395;\n$fa-var-draft2digital: \\f396;\n$fa-var-dribbble: \\f17d;\n$fa-var-dribbble-square: \\f397;\n$fa-var-dropbox: \\f16b;\n$fa-var-drupal: \\f1a9;\n$fa-var-dyalog: \\f399;\n$fa-var-earlybirds: \\f39a;\n$fa-var-ebay: \\f4f4;\n$fa-var-edge: \\f282;\n$fa-var-edge-legacy: \\e078;\n$fa-var-elementor: \\f430;\n$fa-var-ello: \\f5f1;\n$fa-var-ember: \\f423;\n$fa-var-empire: \\f1d1;\n$fa-var-envira: \\f299;\n$fa-var-erlang: \\f39d;\n$fa-var-ethereum: \\f42e;\n$fa-var-etsy: \\f2d7;\n$fa-var-evernote: \\f839;\n$fa-var-expeditedssl: \\f23e;\n$fa-var-facebook: \\f09a;\n$fa-var-facebook-f: \\f39e;\n$fa-var-facebook-messenger: \\f39f;\n$fa-var-facebook-square: \\f082;\n$fa-var-fantasy-flight-games: \\f6dc;\n$fa-var-fedex: \\f797;\n$fa-var-fedora: \\f798;\n$fa-var-figma: \\f799;\n$fa-var-firefox: \\f269;\n$fa-var-firefox-browser: \\e007;\n$fa-var-first-order: \\f2b0;\n$fa-var-first-order-alt: \\f50a;\n$fa-var-firstdraft: \\f3a1;\n$fa-var-flickr: \\f16e;\n$fa-var-flipboard: \\f44d;\n$fa-var-fly: \\f417;\n$fa-var-font-awesome: \\f2b4;\n$fa-var-font-awesome-flag: \\f2b4;\n$fa-var-font-awesome-logo-full: \\f2b4;\n$fa-var-fonticons: \\f280;\n$fa-var-fonticons-fi: \\f3a2;\n$fa-var-fort-awesome: \\f286;\n$fa-var-fort-awesome-alt: \\f3a3;\n$fa-var-forumbee: \\f211;\n$fa-var-foursquare: \\f180;\n$fa-var-free-code-camp: \\f2c5;\n$fa-var-freebsd: \\f3a4;\n$fa-var-fulcrum: \\f50b;\n$fa-var-galactic-republic: \\f50c;\n$fa-var-galactic-senate: \\f50d;\n$fa-var-get-pocket: \\f265;\n$fa-var-gg: \\f260;\n$fa-var-gg-circle: \\f261;\n$fa-var-git: \\f1d3;\n$fa-var-git-alt: \\f841;\n$fa-var-git-square: \\f1d2;\n$fa-var-github: \\f09b;\n$fa-var-github-alt: \\f113;\n$fa-var-github-square: \\f092;\n$fa-var-gitkraken: \\f3a6;\n$fa-var-gitlab: \\f296;\n$fa-var-gitter: \\f426;\n$fa-var-glide: \\f2a5;\n$fa-var-glide-g: \\f2a6;\n$fa-var-gofore: \\f3a7;\n$fa-var-golang: \\e40f;\n$fa-var-goodreads: \\f3a8;\n$fa-var-goodreads-g: \\f3a9;\n$fa-var-google: \\f1a0;\n$fa-var-google-drive: \\f3aa;\n$fa-var-google-pay: \\e079;\n$fa-var-google-play: \\f3ab;\n$fa-var-google-plus: \\f2b3;\n$fa-var-google-plus-g: \\f0d5;\n$fa-var-google-plus-square: \\f0d4;\n$fa-var-google-wallet: \\f1ee;\n$fa-var-gratipay: \\f184;\n$fa-var-grav: \\f2d6;\n$fa-var-gripfire: \\f3ac;\n$fa-var-grunt: \\f3ad;\n$fa-var-guilded: \\e07e;\n$fa-var-gulp: \\f3ae;\n$fa-var-hacker-news: \\f1d4;\n$fa-var-hacker-news-square: \\f3af;\n$fa-var-hackerrank: \\f5f7;\n$fa-var-hashnode: \\e499;\n$fa-var-hips: \\f452;\n$fa-var-hire-a-helper: \\f3b0;\n$fa-var-hive: \\e07f;\n$fa-var-hooli: \\f427;\n$fa-var-hornbill: \\f592;\n$fa-var-hotjar: \\f3b1;\n$fa-var-houzz: \\f27c;\n$fa-var-html5: \\f13b;\n$fa-var-hubspot: \\f3b2;\n$fa-var-ideal: \\e013;\n$fa-var-imdb: \\f2d8;\n$fa-var-instagram: \\f16d;\n$fa-var-instagram-square: \\e055;\n$fa-var-instalod: \\e081;\n$fa-var-intercom: \\f7af;\n$fa-var-internet-explorer: \\f26b;\n$fa-var-invision: \\f7b0;\n$fa-var-ioxhost: \\f208;\n$fa-var-itch-io: \\f83a;\n$fa-var-itunes: \\f3b4;\n$fa-var-itunes-note: \\f3b5;\n$fa-var-java: \\f4e4;\n$fa-var-jedi-order: \\f50e;\n$fa-var-jenkins: \\f3b6;\n$fa-var-jira: \\f7b1;\n$fa-var-joget: \\f3b7;\n$fa-var-joomla: \\f1aa;\n$fa-var-js: \\f3b8;\n$fa-var-js-square: \\f3b9;\n$fa-var-jsfiddle: \\f1cc;\n$fa-var-kaggle: \\f5fa;\n$fa-var-keybase: \\f4f5;\n$fa-var-keycdn: \\f3ba;\n$fa-var-kickstarter: \\f3bb;\n$fa-var-kickstarter-k: \\f3bc;\n$fa-var-korvue: \\f42f;\n$fa-var-laravel: \\f3bd;\n$fa-var-lastfm: \\f202;\n$fa-var-lastfm-square: \\f203;\n$fa-var-leanpub: \\f212;\n$fa-var-less: \\f41d;\n$fa-var-line: \\f3c0;\n$fa-var-linkedin: \\f08c;\n$fa-var-linkedin-in: \\f0e1;\n$fa-var-linode: \\f2b8;\n$fa-var-linux: \\f17c;\n$fa-var-lyft: \\f3c3;\n$fa-var-magento: \\f3c4;\n$fa-var-mailchimp: \\f59e;\n$fa-var-mandalorian: \\f50f;\n$fa-var-markdown: \\f60f;\n$fa-var-mastodon: \\f4f6;\n$fa-var-maxcdn: \\f136;\n$fa-var-mdb: \\f8ca;\n$fa-var-medapps: \\f3c6;\n$fa-var-medium: \\f23a;\n$fa-var-medium-m: \\f23a;\n$fa-var-medrt: \\f3c8;\n$fa-var-meetup: \\f2e0;\n$fa-var-megaport: \\f5a3;\n$fa-var-mendeley: \\f7b3;\n$fa-var-microblog: \\e01a;\n$fa-var-microsoft: \\f3ca;\n$fa-var-mix: \\f3cb;\n$fa-var-mixcloud: \\f289;\n$fa-var-mixer: \\e056;\n$fa-var-mizuni: \\f3cc;\n$fa-var-modx: \\f285;\n$fa-var-monero: \\f3d0;\n$fa-var-napster: \\f3d2;\n$fa-var-neos: \\f612;\n$fa-var-nimblr: \\f5a8;\n$fa-var-node: \\f419;\n$fa-var-node-js: \\f3d3;\n$fa-var-npm: \\f3d4;\n$fa-var-ns8: \\f3d5;\n$fa-var-nutritionix: \\f3d6;\n$fa-var-octopus-deploy: \\e082;\n$fa-var-odnoklassniki: \\f263;\n$fa-var-odnoklassniki-square: \\f264;\n$fa-var-old-republic: \\f510;\n$fa-var-opencart: \\f23d;\n$fa-var-openid: \\f19b;\n$fa-var-opera: \\f26a;\n$fa-var-optin-monster: \\f23c;\n$fa-var-orcid: \\f8d2;\n$fa-var-osi: \\f41a;\n$fa-var-padlet: \\e4a0;\n$fa-var-page4: \\f3d7;\n$fa-var-pagelines: \\f18c;\n$fa-var-palfed: \\f3d8;\n$fa-var-patreon: \\f3d9;\n$fa-var-paypal: \\f1ed;\n$fa-var-perbyte: \\e083;\n$fa-var-periscope: \\f3da;\n$fa-var-phabricator: \\f3db;\n$fa-var-phoenix-framework: \\f3dc;\n$fa-var-phoenix-squadron: \\f511;\n$fa-var-php: \\f457;\n$fa-var-pied-piper: \\f2ae;\n$fa-var-pied-piper-alt: \\f1a8;\n$fa-var-pied-piper-hat: \\f4e5;\n$fa-var-pied-piper-pp: \\f1a7;\n$fa-var-pied-piper-square: \\e01e;\n$fa-var-pinterest: \\f0d2;\n$fa-var-pinterest-p: \\f231;\n$fa-var-pinterest-square: \\f0d3;\n$fa-var-pix: \\e43a;\n$fa-var-playstation: \\f3df;\n$fa-var-product-hunt: \\f288;\n$fa-var-pushed: \\f3e1;\n$fa-var-python: \\f3e2;\n$fa-var-qq: \\f1d6;\n$fa-var-quinscape: \\f459;\n$fa-var-quora: \\f2c4;\n$fa-var-r-project: \\f4f7;\n$fa-var-raspberry-pi: \\f7bb;\n$fa-var-ravelry: \\f2d9;\n$fa-var-react: \\f41b;\n$fa-var-reacteurope: \\f75d;\n$fa-var-readme: \\f4d5;\n$fa-var-rebel: \\f1d0;\n$fa-var-red-river: \\f3e3;\n$fa-var-reddit: \\f1a1;\n$fa-var-reddit-alien: \\f281;\n$fa-var-reddit-square: \\f1a2;\n$fa-var-redhat: \\f7bc;\n$fa-var-renren: \\f18b;\n$fa-var-replyd: \\f3e6;\n$fa-var-researchgate: \\f4f8;\n$fa-var-resolving: \\f3e7;\n$fa-var-rev: \\f5b2;\n$fa-var-rocketchat: \\f3e8;\n$fa-var-rockrms: \\f3e9;\n$fa-var-rust: \\e07a;\n$fa-var-safari: \\f267;\n$fa-var-salesforce: \\f83b;\n$fa-var-sass: \\f41e;\n$fa-var-schlix: \\f3ea;\n$fa-var-scribd: \\f28a;\n$fa-var-searchengin: \\f3eb;\n$fa-var-sellcast: \\f2da;\n$fa-var-sellsy: \\f213;\n$fa-var-servicestack: \\f3ec;\n$fa-var-shirtsinbulk: \\f214;\n$fa-var-shopify: \\e057;\n$fa-var-shopware: \\f5b5;\n$fa-var-simplybuilt: \\f215;\n$fa-var-sistrix: \\f3ee;\n$fa-var-sith: \\f512;\n$fa-var-sitrox: \\e44a;\n$fa-var-sketch: \\f7c6;\n$fa-var-skyatlas: \\f216;\n$fa-var-skype: \\f17e;\n$fa-var-slack: \\f198;\n$fa-var-slack-hash: \\f198;\n$fa-var-slideshare: \\f1e7;\n$fa-var-snapchat: \\f2ab;\n$fa-var-snapchat-ghost: \\f2ab;\n$fa-var-snapchat-square: \\f2ad;\n$fa-var-soundcloud: \\f1be;\n$fa-var-sourcetree: \\f7d3;\n$fa-var-speakap: \\f3f3;\n$fa-var-speaker-deck: \\f83c;\n$fa-var-spotify: \\f1bc;\n$fa-var-square-font-awesome: \\f425;\n$fa-var-square-font-awesome-stroke: \\f35c;\n$fa-var-font-awesome-alt: \\f35c;\n$fa-var-squarespace: \\f5be;\n$fa-var-stack-exchange: \\f18d;\n$fa-var-stack-overflow: \\f16c;\n$fa-var-stackpath: \\f842;\n$fa-var-staylinked: \\f3f5;\n$fa-var-steam: \\f1b6;\n$fa-var-steam-square: \\f1b7;\n$fa-var-steam-symbol: \\f3f6;\n$fa-var-sticker-mule: \\f3f7;\n$fa-var-strava: \\f428;\n$fa-var-stripe: \\f429;\n$fa-var-stripe-s: \\f42a;\n$fa-var-studiovinari: \\f3f8;\n$fa-var-stumbleupon: \\f1a4;\n$fa-var-stumbleupon-circle: \\f1a3;\n$fa-var-superpowers: \\f2dd;\n$fa-var-supple: \\f3f9;\n$fa-var-suse: \\f7d6;\n$fa-var-swift: \\f8e1;\n$fa-var-symfony: \\f83d;\n$fa-var-teamspeak: \\f4f9;\n$fa-var-telegram: \\f2c6;\n$fa-var-telegram-plane: \\f2c6;\n$fa-var-tencent-weibo: \\f1d5;\n$fa-var-the-red-yeti: \\f69d;\n$fa-var-themeco: \\f5c6;\n$fa-var-themeisle: \\f2b2;\n$fa-var-think-peaks: \\f731;\n$fa-var-tiktok: \\e07b;\n$fa-var-trade-federation: \\f513;\n$fa-var-trello: \\f181;\n$fa-var-tumblr: \\f173;\n$fa-var-tumblr-square: \\f174;\n$fa-var-twitch: \\f1e8;\n$fa-var-twitter: \\f099;\n$fa-var-twitter-square: \\f081;\n$fa-var-typo3: \\f42b;\n$fa-var-uber: \\f402;\n$fa-var-ubuntu: \\f7df;\n$fa-var-uikit: \\f403;\n$fa-var-umbraco: \\f8e8;\n$fa-var-uncharted: \\e084;\n$fa-var-uniregistry: \\f404;\n$fa-var-unity: \\e049;\n$fa-var-unsplash: \\e07c;\n$fa-var-untappd: \\f405;\n$fa-var-ups: \\f7e0;\n$fa-var-usb: \\f287;\n$fa-var-usps: \\f7e1;\n$fa-var-ussunnah: \\f407;\n$fa-var-vaadin: \\f408;\n$fa-var-viacoin: \\f237;\n$fa-var-viadeo: \\f2a9;\n$fa-var-viadeo-square: \\f2aa;\n$fa-var-viber: \\f409;\n$fa-var-vimeo: \\f40a;\n$fa-var-vimeo-square: \\f194;\n$fa-var-vimeo-v: \\f27d;\n$fa-var-vine: \\f1ca;\n$fa-var-vk: \\f189;\n$fa-var-vnv: \\f40b;\n$fa-var-vuejs: \\f41f;\n$fa-var-watchman-monitoring: \\e087;\n$fa-var-waze: \\f83f;\n$fa-var-weebly: \\f5cc;\n$fa-var-weibo: \\f18a;\n$fa-var-weixin: \\f1d7;\n$fa-var-whatsapp: \\f232;\n$fa-var-whatsapp-square: \\f40c;\n$fa-var-whmcs: \\f40d;\n$fa-var-wikipedia-w: \\f266;\n$fa-var-windows: \\f17a;\n$fa-var-wirsindhandwerk: \\e2d0;\n$fa-var-wsh: \\e2d0;\n$fa-var-wix: \\f5cf;\n$fa-var-wizards-of-the-coast: \\f730;\n$fa-var-wodu: \\e088;\n$fa-var-wolf-pack-battalion: \\f514;\n$fa-var-wordpress: \\f19a;\n$fa-var-wordpress-simple: \\f411;\n$fa-var-wpbeginner: \\f297;\n$fa-var-wpexplorer: \\f2de;\n$fa-var-wpforms: \\f298;\n$fa-var-wpressr: \\f3e4;\n$fa-var-xbox: \\f412;\n$fa-var-xing: \\f168;\n$fa-var-xing-square: \\f169;\n$fa-var-y-combinator: \\f23b;\n$fa-var-yahoo: \\f19e;\n$fa-var-yammer: \\f840;\n$fa-var-yandex: \\f413;\n$fa-var-yandex-international: \\f414;\n$fa-var-yarn: \\f7e3;\n$fa-var-yelp: \\f1e9;\n$fa-var-yoast: \\f2b1;\n$fa-var-youtube: \\f167;\n$fa-var-youtube-square: \\f431;\n$fa-var-zhihu: \\f63f;\n\n$fa-icons: (\n  \"0\": $fa-var-0,\n  \"1\": $fa-var-1,\n  \"2\": $fa-var-2,\n  \"3\": $fa-var-3,\n  \"4\": $fa-var-4,\n  \"5\": $fa-var-5,\n  \"6\": $fa-var-6,\n  \"7\": $fa-var-7,\n  \"8\": $fa-var-8,\n  \"9\": $fa-var-9,\n  \"a\": $fa-var-a,\n  \"address-book\": $fa-var-address-book,\n  \"contact-book\": $fa-var-contact-book,\n  \"address-card\": $fa-var-address-card,\n  \"contact-card\": $fa-var-contact-card,\n  \"vcard\": $fa-var-vcard,\n  \"align-center\": $fa-var-align-center,\n  \"align-justify\": $fa-var-align-justify,\n  \"align-left\": $fa-var-align-left,\n  \"align-right\": $fa-var-align-right,\n  \"anchor\": $fa-var-anchor,\n  \"angle-down\": $fa-var-angle-down,\n  \"angle-left\": $fa-var-angle-left,\n  \"angle-right\": $fa-var-angle-right,\n  \"angle-up\": $fa-var-angle-up,\n  \"angles-down\": $fa-var-angles-down,\n  \"angle-double-down\": $fa-var-angle-double-down,\n  \"angles-left\": $fa-var-angles-left,\n  \"angle-double-left\": $fa-var-angle-double-left,\n  \"angles-right\": $fa-var-angles-right,\n  \"angle-double-right\": $fa-var-angle-double-right,\n  \"angles-up\": $fa-var-angles-up,\n  \"angle-double-up\": $fa-var-angle-double-up,\n  \"ankh\": $fa-var-ankh,\n  \"apple-whole\": $fa-var-apple-whole,\n  \"apple-alt\": $fa-var-apple-alt,\n  \"archway\": $fa-var-archway,\n  \"arrow-down\": $fa-var-arrow-down,\n  \"arrow-down-1-9\": $fa-var-arrow-down-1-9,\n  \"sort-numeric-asc\": $fa-var-sort-numeric-asc,\n  \"sort-numeric-down\": $fa-var-sort-numeric-down,\n  \"arrow-down-9-1\": $fa-var-arrow-down-9-1,\n  \"sort-numeric-desc\": $fa-var-sort-numeric-desc,\n  \"sort-numeric-down-alt\": $fa-var-sort-numeric-down-alt,\n  \"arrow-down-a-z\": $fa-var-arrow-down-a-z,\n  \"sort-alpha-asc\": $fa-var-sort-alpha-asc,\n  \"sort-alpha-down\": $fa-var-sort-alpha-down,\n  \"arrow-down-long\": $fa-var-arrow-down-long,\n  \"long-arrow-down\": $fa-var-long-arrow-down,\n  \"arrow-down-short-wide\": $fa-var-arrow-down-short-wide,\n  \"sort-amount-desc\": $fa-var-sort-amount-desc,\n  \"sort-amount-down-alt\": $fa-var-sort-amount-down-alt,\n  \"arrow-down-wide-short\": $fa-var-arrow-down-wide-short,\n  \"sort-amount-asc\": $fa-var-sort-amount-asc,\n  \"sort-amount-down\": $fa-var-sort-amount-down,\n  \"arrow-down-z-a\": $fa-var-arrow-down-z-a,\n  \"sort-alpha-desc\": $fa-var-sort-alpha-desc,\n  \"sort-alpha-down-alt\": $fa-var-sort-alpha-down-alt,\n  \"arrow-left\": $fa-var-arrow-left,\n  \"arrow-left-long\": $fa-var-arrow-left-long,\n  \"long-arrow-left\": $fa-var-long-arrow-left,\n  \"arrow-pointer\": $fa-var-arrow-pointer,\n  \"mouse-pointer\": $fa-var-mouse-pointer,\n  \"arrow-right\": $fa-var-arrow-right,\n  \"arrow-right-arrow-left\": $fa-var-arrow-right-arrow-left,\n  \"exchange\": $fa-var-exchange,\n  \"arrow-right-from-bracket\": $fa-var-arrow-right-from-bracket,\n  \"sign-out\": $fa-var-sign-out,\n  \"arrow-right-long\": $fa-var-arrow-right-long,\n  \"long-arrow-right\": $fa-var-long-arrow-right,\n  \"arrow-right-to-bracket\": $fa-var-arrow-right-to-bracket,\n  \"sign-in\": $fa-var-sign-in,\n  \"arrow-rotate-left\": $fa-var-arrow-rotate-left,\n  \"arrow-left-rotate\": $fa-var-arrow-left-rotate,\n  \"arrow-rotate-back\": $fa-var-arrow-rotate-back,\n  \"arrow-rotate-backward\": $fa-var-arrow-rotate-backward,\n  \"undo\": $fa-var-undo,\n  \"arrow-rotate-right\": $fa-var-arrow-rotate-right,\n  \"arrow-right-rotate\": $fa-var-arrow-right-rotate,\n  \"arrow-rotate-forward\": $fa-var-arrow-rotate-forward,\n  \"redo\": $fa-var-redo,\n  \"arrow-trend-down\": $fa-var-arrow-trend-down,\n  \"arrow-trend-up\": $fa-var-arrow-trend-up,\n  \"arrow-turn-down\": $fa-var-arrow-turn-down,\n  \"level-down\": $fa-var-level-down,\n  \"arrow-turn-up\": $fa-var-arrow-turn-up,\n  \"level-up\": $fa-var-level-up,\n  \"arrow-up\": $fa-var-arrow-up,\n  \"arrow-up-1-9\": $fa-var-arrow-up-1-9,\n  \"sort-numeric-up\": $fa-var-sort-numeric-up,\n  \"arrow-up-9-1\": $fa-var-arrow-up-9-1,\n  \"sort-numeric-up-alt\": $fa-var-sort-numeric-up-alt,\n  \"arrow-up-a-z\": $fa-var-arrow-up-a-z,\n  \"sort-alpha-up\": $fa-var-sort-alpha-up,\n  \"arrow-up-from-bracket\": $fa-var-arrow-up-from-bracket,\n  \"arrow-up-long\": $fa-var-arrow-up-long,\n  \"long-arrow-up\": $fa-var-long-arrow-up,\n  \"arrow-up-right-from-square\": $fa-var-arrow-up-right-from-square,\n  \"external-link\": $fa-var-external-link,\n  \"arrow-up-short-wide\": $fa-var-arrow-up-short-wide,\n  \"sort-amount-up-alt\": $fa-var-sort-amount-up-alt,\n  \"arrow-up-wide-short\": $fa-var-arrow-up-wide-short,\n  \"sort-amount-up\": $fa-var-sort-amount-up,\n  \"arrow-up-z-a\": $fa-var-arrow-up-z-a,\n  \"sort-alpha-up-alt\": $fa-var-sort-alpha-up-alt,\n  \"arrows-left-right\": $fa-var-arrows-left-right,\n  \"arrows-h\": $fa-var-arrows-h,\n  \"arrows-rotate\": $fa-var-arrows-rotate,\n  \"refresh\": $fa-var-refresh,\n  \"sync\": $fa-var-sync,\n  \"arrows-up-down\": $fa-var-arrows-up-down,\n  \"arrows-v\": $fa-var-arrows-v,\n  \"arrows-up-down-left-right\": $fa-var-arrows-up-down-left-right,\n  \"arrows\": $fa-var-arrows,\n  \"asterisk\": $fa-var-asterisk,\n  \"at\": $fa-var-at,\n  \"atom\": $fa-var-atom,\n  \"audio-description\": $fa-var-audio-description,\n  \"austral-sign\": $fa-var-austral-sign,\n  \"award\": $fa-var-award,\n  \"b\": $fa-var-b,\n  \"baby\": $fa-var-baby,\n  \"baby-carriage\": $fa-var-baby-carriage,\n  \"carriage-baby\": $fa-var-carriage-baby,\n  \"backward\": $fa-var-backward,\n  \"backward-fast\": $fa-var-backward-fast,\n  \"fast-backward\": $fa-var-fast-backward,\n  \"backward-step\": $fa-var-backward-step,\n  \"step-backward\": $fa-var-step-backward,\n  \"bacon\": $fa-var-bacon,\n  \"bacteria\": $fa-var-bacteria,\n  \"bacterium\": $fa-var-bacterium,\n  \"bag-shopping\": $fa-var-bag-shopping,\n  \"shopping-bag\": $fa-var-shopping-bag,\n  \"bahai\": $fa-var-bahai,\n  \"baht-sign\": $fa-var-baht-sign,\n  \"ban\": $fa-var-ban,\n  \"cancel\": $fa-var-cancel,\n  \"ban-smoking\": $fa-var-ban-smoking,\n  \"smoking-ban\": $fa-var-smoking-ban,\n  \"bandage\": $fa-var-bandage,\n  \"band-aid\": $fa-var-band-aid,\n  \"barcode\": $fa-var-barcode,\n  \"bars\": $fa-var-bars,\n  \"navicon\": $fa-var-navicon,\n  \"bars-progress\": $fa-var-bars-progress,\n  \"tasks-alt\": $fa-var-tasks-alt,\n  \"bars-staggered\": $fa-var-bars-staggered,\n  \"reorder\": $fa-var-reorder,\n  \"stream\": $fa-var-stream,\n  \"baseball\": $fa-var-baseball,\n  \"baseball-ball\": $fa-var-baseball-ball,\n  \"baseball-bat-ball\": $fa-var-baseball-bat-ball,\n  \"basket-shopping\": $fa-var-basket-shopping,\n  \"shopping-basket\": $fa-var-shopping-basket,\n  \"basketball\": $fa-var-basketball,\n  \"basketball-ball\": $fa-var-basketball-ball,\n  \"bath\": $fa-var-bath,\n  \"bathtub\": $fa-var-bathtub,\n  \"battery-empty\": $fa-var-battery-empty,\n  \"battery-0\": $fa-var-battery-0,\n  \"battery-full\": $fa-var-battery-full,\n  \"battery\": $fa-var-battery,\n  \"battery-5\": $fa-var-battery-5,\n  \"battery-half\": $fa-var-battery-half,\n  \"battery-3\": $fa-var-battery-3,\n  \"battery-quarter\": $fa-var-battery-quarter,\n  \"battery-2\": $fa-var-battery-2,\n  \"battery-three-quarters\": $fa-var-battery-three-quarters,\n  \"battery-4\": $fa-var-battery-4,\n  \"bed\": $fa-var-bed,\n  \"bed-pulse\": $fa-var-bed-pulse,\n  \"procedures\": $fa-var-procedures,\n  \"beer-mug-empty\": $fa-var-beer-mug-empty,\n  \"beer\": $fa-var-beer,\n  \"bell\": $fa-var-bell,\n  \"bell-concierge\": $fa-var-bell-concierge,\n  \"concierge-bell\": $fa-var-concierge-bell,\n  \"bell-slash\": $fa-var-bell-slash,\n  \"bezier-curve\": $fa-var-bezier-curve,\n  \"bicycle\": $fa-var-bicycle,\n  \"binoculars\": $fa-var-binoculars,\n  \"biohazard\": $fa-var-biohazard,\n  \"bitcoin-sign\": $fa-var-bitcoin-sign,\n  \"blender\": $fa-var-blender,\n  \"blender-phone\": $fa-var-blender-phone,\n  \"blog\": $fa-var-blog,\n  \"bold\": $fa-var-bold,\n  \"bolt\": $fa-var-bolt,\n  \"zap\": $fa-var-zap,\n  \"bolt-lightning\": $fa-var-bolt-lightning,\n  \"bomb\": $fa-var-bomb,\n  \"bone\": $fa-var-bone,\n  \"bong\": $fa-var-bong,\n  \"book\": $fa-var-book,\n  \"book-atlas\": $fa-var-book-atlas,\n  \"atlas\": $fa-var-atlas,\n  \"book-bible\": $fa-var-book-bible,\n  \"bible\": $fa-var-bible,\n  \"book-journal-whills\": $fa-var-book-journal-whills,\n  \"journal-whills\": $fa-var-journal-whills,\n  \"book-medical\": $fa-var-book-medical,\n  \"book-open\": $fa-var-book-open,\n  \"book-open-reader\": $fa-var-book-open-reader,\n  \"book-reader\": $fa-var-book-reader,\n  \"book-quran\": $fa-var-book-quran,\n  \"quran\": $fa-var-quran,\n  \"book-skull\": $fa-var-book-skull,\n  \"book-dead\": $fa-var-book-dead,\n  \"bookmark\": $fa-var-bookmark,\n  \"border-all\": $fa-var-border-all,\n  \"border-none\": $fa-var-border-none,\n  \"border-top-left\": $fa-var-border-top-left,\n  \"border-style\": $fa-var-border-style,\n  \"bowling-ball\": $fa-var-bowling-ball,\n  \"box\": $fa-var-box,\n  \"box-archive\": $fa-var-box-archive,\n  \"archive\": $fa-var-archive,\n  \"box-open\": $fa-var-box-open,\n  \"box-tissue\": $fa-var-box-tissue,\n  \"boxes-stacked\": $fa-var-boxes-stacked,\n  \"boxes\": $fa-var-boxes,\n  \"boxes-alt\": $fa-var-boxes-alt,\n  \"braille\": $fa-var-braille,\n  \"brain\": $fa-var-brain,\n  \"brazilian-real-sign\": $fa-var-brazilian-real-sign,\n  \"bread-slice\": $fa-var-bread-slice,\n  \"briefcase\": $fa-var-briefcase,\n  \"briefcase-medical\": $fa-var-briefcase-medical,\n  \"broom\": $fa-var-broom,\n  \"broom-ball\": $fa-var-broom-ball,\n  \"quidditch\": $fa-var-quidditch,\n  \"quidditch-broom-ball\": $fa-var-quidditch-broom-ball,\n  \"brush\": $fa-var-brush,\n  \"bug\": $fa-var-bug,\n  \"bug-slash\": $fa-var-bug-slash,\n  \"building\": $fa-var-building,\n  \"building-columns\": $fa-var-building-columns,\n  \"bank\": $fa-var-bank,\n  \"institution\": $fa-var-institution,\n  \"museum\": $fa-var-museum,\n  \"university\": $fa-var-university,\n  \"bullhorn\": $fa-var-bullhorn,\n  \"bullseye\": $fa-var-bullseye,\n  \"burger\": $fa-var-burger,\n  \"hamburger\": $fa-var-hamburger,\n  \"bus\": $fa-var-bus,\n  \"bus-simple\": $fa-var-bus-simple,\n  \"bus-alt\": $fa-var-bus-alt,\n  \"business-time\": $fa-var-business-time,\n  \"briefcase-clock\": $fa-var-briefcase-clock,\n  \"c\": $fa-var-c,\n  \"cake-candles\": $fa-var-cake-candles,\n  \"birthday-cake\": $fa-var-birthday-cake,\n  \"cake\": $fa-var-cake,\n  \"calculator\": $fa-var-calculator,\n  \"calendar\": $fa-var-calendar,\n  \"calendar-check\": $fa-var-calendar-check,\n  \"calendar-day\": $fa-var-calendar-day,\n  \"calendar-days\": $fa-var-calendar-days,\n  \"calendar-alt\": $fa-var-calendar-alt,\n  \"calendar-minus\": $fa-var-calendar-minus,\n  \"calendar-plus\": $fa-var-calendar-plus,\n  \"calendar-week\": $fa-var-calendar-week,\n  \"calendar-xmark\": $fa-var-calendar-xmark,\n  \"calendar-times\": $fa-var-calendar-times,\n  \"camera\": $fa-var-camera,\n  \"camera-alt\": $fa-var-camera-alt,\n  \"camera-retro\": $fa-var-camera-retro,\n  \"camera-rotate\": $fa-var-camera-rotate,\n  \"campground\": $fa-var-campground,\n  \"candy-cane\": $fa-var-candy-cane,\n  \"cannabis\": $fa-var-cannabis,\n  \"capsules\": $fa-var-capsules,\n  \"car\": $fa-var-car,\n  \"automobile\": $fa-var-automobile,\n  \"car-battery\": $fa-var-car-battery,\n  \"battery-car\": $fa-var-battery-car,\n  \"car-crash\": $fa-var-car-crash,\n  \"car-rear\": $fa-var-car-rear,\n  \"car-alt\": $fa-var-car-alt,\n  \"car-side\": $fa-var-car-side,\n  \"caravan\": $fa-var-caravan,\n  \"caret-down\": $fa-var-caret-down,\n  \"caret-left\": $fa-var-caret-left,\n  \"caret-right\": $fa-var-caret-right,\n  \"caret-up\": $fa-var-caret-up,\n  \"carrot\": $fa-var-carrot,\n  \"cart-arrow-down\": $fa-var-cart-arrow-down,\n  \"cart-flatbed\": $fa-var-cart-flatbed,\n  \"dolly-flatbed\": $fa-var-dolly-flatbed,\n  \"cart-flatbed-suitcase\": $fa-var-cart-flatbed-suitcase,\n  \"luggage-cart\": $fa-var-luggage-cart,\n  \"cart-plus\": $fa-var-cart-plus,\n  \"cart-shopping\": $fa-var-cart-shopping,\n  \"shopping-cart\": $fa-var-shopping-cart,\n  \"cash-register\": $fa-var-cash-register,\n  \"cat\": $fa-var-cat,\n  \"cedi-sign\": $fa-var-cedi-sign,\n  \"cent-sign\": $fa-var-cent-sign,\n  \"certificate\": $fa-var-certificate,\n  \"chair\": $fa-var-chair,\n  \"chalkboard\": $fa-var-chalkboard,\n  \"blackboard\": $fa-var-blackboard,\n  \"chalkboard-user\": $fa-var-chalkboard-user,\n  \"chalkboard-teacher\": $fa-var-chalkboard-teacher,\n  \"champagne-glasses\": $fa-var-champagne-glasses,\n  \"glass-cheers\": $fa-var-glass-cheers,\n  \"charging-station\": $fa-var-charging-station,\n  \"chart-area\": $fa-var-chart-area,\n  \"area-chart\": $fa-var-area-chart,\n  \"chart-bar\": $fa-var-chart-bar,\n  \"bar-chart\": $fa-var-bar-chart,\n  \"chart-column\": $fa-var-chart-column,\n  \"chart-gantt\": $fa-var-chart-gantt,\n  \"chart-line\": $fa-var-chart-line,\n  \"line-chart\": $fa-var-line-chart,\n  \"chart-pie\": $fa-var-chart-pie,\n  \"pie-chart\": $fa-var-pie-chart,\n  \"check\": $fa-var-check,\n  \"check-double\": $fa-var-check-double,\n  \"check-to-slot\": $fa-var-check-to-slot,\n  \"vote-yea\": $fa-var-vote-yea,\n  \"cheese\": $fa-var-cheese,\n  \"chess\": $fa-var-chess,\n  \"chess-bishop\": $fa-var-chess-bishop,\n  \"chess-board\": $fa-var-chess-board,\n  \"chess-king\": $fa-var-chess-king,\n  \"chess-knight\": $fa-var-chess-knight,\n  \"chess-pawn\": $fa-var-chess-pawn,\n  \"chess-queen\": $fa-var-chess-queen,\n  \"chess-rook\": $fa-var-chess-rook,\n  \"chevron-down\": $fa-var-chevron-down,\n  \"chevron-left\": $fa-var-chevron-left,\n  \"chevron-right\": $fa-var-chevron-right,\n  \"chevron-up\": $fa-var-chevron-up,\n  \"child\": $fa-var-child,\n  \"church\": $fa-var-church,\n  \"circle\": $fa-var-circle,\n  \"circle-arrow-down\": $fa-var-circle-arrow-down,\n  \"arrow-circle-down\": $fa-var-arrow-circle-down,\n  \"circle-arrow-left\": $fa-var-circle-arrow-left,\n  \"arrow-circle-left\": $fa-var-arrow-circle-left,\n  \"circle-arrow-right\": $fa-var-circle-arrow-right,\n  \"arrow-circle-right\": $fa-var-arrow-circle-right,\n  \"circle-arrow-up\": $fa-var-circle-arrow-up,\n  \"arrow-circle-up\": $fa-var-arrow-circle-up,\n  \"circle-check\": $fa-var-circle-check,\n  \"check-circle\": $fa-var-check-circle,\n  \"circle-chevron-down\": $fa-var-circle-chevron-down,\n  \"chevron-circle-down\": $fa-var-chevron-circle-down,\n  \"circle-chevron-left\": $fa-var-circle-chevron-left,\n  \"chevron-circle-left\": $fa-var-chevron-circle-left,\n  \"circle-chevron-right\": $fa-var-circle-chevron-right,\n  \"chevron-circle-right\": $fa-var-chevron-circle-right,\n  \"circle-chevron-up\": $fa-var-circle-chevron-up,\n  \"chevron-circle-up\": $fa-var-chevron-circle-up,\n  \"circle-dollar-to-slot\": $fa-var-circle-dollar-to-slot,\n  \"donate\": $fa-var-donate,\n  \"circle-dot\": $fa-var-circle-dot,\n  \"dot-circle\": $fa-var-dot-circle,\n  \"circle-down\": $fa-var-circle-down,\n  \"arrow-alt-circle-down\": $fa-var-arrow-alt-circle-down,\n  \"circle-exclamation\": $fa-var-circle-exclamation,\n  \"exclamation-circle\": $fa-var-exclamation-circle,\n  \"circle-h\": $fa-var-circle-h,\n  \"hospital-symbol\": $fa-var-hospital-symbol,\n  \"circle-half-stroke\": $fa-var-circle-half-stroke,\n  \"adjust\": $fa-var-adjust,\n  \"circle-info\": $fa-var-circle-info,\n  \"info-circle\": $fa-var-info-circle,\n  \"circle-left\": $fa-var-circle-left,\n  \"arrow-alt-circle-left\": $fa-var-arrow-alt-circle-left,\n  \"circle-minus\": $fa-var-circle-minus,\n  \"minus-circle\": $fa-var-minus-circle,\n  \"circle-notch\": $fa-var-circle-notch,\n  \"circle-pause\": $fa-var-circle-pause,\n  \"pause-circle\": $fa-var-pause-circle,\n  \"circle-play\": $fa-var-circle-play,\n  \"play-circle\": $fa-var-play-circle,\n  \"circle-plus\": $fa-var-circle-plus,\n  \"plus-circle\": $fa-var-plus-circle,\n  \"circle-question\": $fa-var-circle-question,\n  \"question-circle\": $fa-var-question-circle,\n  \"circle-radiation\": $fa-var-circle-radiation,\n  \"radiation-alt\": $fa-var-radiation-alt,\n  \"circle-right\": $fa-var-circle-right,\n  \"arrow-alt-circle-right\": $fa-var-arrow-alt-circle-right,\n  \"circle-stop\": $fa-var-circle-stop,\n  \"stop-circle\": $fa-var-stop-circle,\n  \"circle-up\": $fa-var-circle-up,\n  \"arrow-alt-circle-up\": $fa-var-arrow-alt-circle-up,\n  \"circle-user\": $fa-var-circle-user,\n  \"user-circle\": $fa-var-user-circle,\n  \"circle-xmark\": $fa-var-circle-xmark,\n  \"times-circle\": $fa-var-times-circle,\n  \"xmark-circle\": $fa-var-xmark-circle,\n  \"city\": $fa-var-city,\n  \"clapperboard\": $fa-var-clapperboard,\n  \"clipboard\": $fa-var-clipboard,\n  \"clipboard-check\": $fa-var-clipboard-check,\n  \"clipboard-list\": $fa-var-clipboard-list,\n  \"clock\": $fa-var-clock,\n  \"clock-four\": $fa-var-clock-four,\n  \"clock-rotate-left\": $fa-var-clock-rotate-left,\n  \"history\": $fa-var-history,\n  \"clone\": $fa-var-clone,\n  \"closed-captioning\": $fa-var-closed-captioning,\n  \"cloud\": $fa-var-cloud,\n  \"cloud-arrow-down\": $fa-var-cloud-arrow-down,\n  \"cloud-download\": $fa-var-cloud-download,\n  \"cloud-download-alt\": $fa-var-cloud-download-alt,\n  \"cloud-arrow-up\": $fa-var-cloud-arrow-up,\n  \"cloud-upload\": $fa-var-cloud-upload,\n  \"cloud-upload-alt\": $fa-var-cloud-upload-alt,\n  \"cloud-meatball\": $fa-var-cloud-meatball,\n  \"cloud-moon\": $fa-var-cloud-moon,\n  \"cloud-moon-rain\": $fa-var-cloud-moon-rain,\n  \"cloud-rain\": $fa-var-cloud-rain,\n  \"cloud-showers-heavy\": $fa-var-cloud-showers-heavy,\n  \"cloud-sun\": $fa-var-cloud-sun,\n  \"cloud-sun-rain\": $fa-var-cloud-sun-rain,\n  \"clover\": $fa-var-clover,\n  \"code\": $fa-var-code,\n  \"code-branch\": $fa-var-code-branch,\n  \"code-commit\": $fa-var-code-commit,\n  \"code-compare\": $fa-var-code-compare,\n  \"code-fork\": $fa-var-code-fork,\n  \"code-merge\": $fa-var-code-merge,\n  \"code-pull-request\": $fa-var-code-pull-request,\n  \"coins\": $fa-var-coins,\n  \"colon-sign\": $fa-var-colon-sign,\n  \"comment\": $fa-var-comment,\n  \"comment-dollar\": $fa-var-comment-dollar,\n  \"comment-dots\": $fa-var-comment-dots,\n  \"commenting\": $fa-var-commenting,\n  \"comment-medical\": $fa-var-comment-medical,\n  \"comment-slash\": $fa-var-comment-slash,\n  \"comment-sms\": $fa-var-comment-sms,\n  \"sms\": $fa-var-sms,\n  \"comments\": $fa-var-comments,\n  \"comments-dollar\": $fa-var-comments-dollar,\n  \"compact-disc\": $fa-var-compact-disc,\n  \"compass\": $fa-var-compass,\n  \"compass-drafting\": $fa-var-compass-drafting,\n  \"drafting-compass\": $fa-var-drafting-compass,\n  \"compress\": $fa-var-compress,\n  \"computer-mouse\": $fa-var-computer-mouse,\n  \"mouse\": $fa-var-mouse,\n  \"cookie\": $fa-var-cookie,\n  \"cookie-bite\": $fa-var-cookie-bite,\n  \"copy\": $fa-var-copy,\n  \"copyright\": $fa-var-copyright,\n  \"couch\": $fa-var-couch,\n  \"credit-card\": $fa-var-credit-card,\n  \"credit-card-alt\": $fa-var-credit-card-alt,\n  \"crop\": $fa-var-crop,\n  \"crop-simple\": $fa-var-crop-simple,\n  \"crop-alt\": $fa-var-crop-alt,\n  \"cross\": $fa-var-cross,\n  \"crosshairs\": $fa-var-crosshairs,\n  \"crow\": $fa-var-crow,\n  \"crown\": $fa-var-crown,\n  \"crutch\": $fa-var-crutch,\n  \"cruzeiro-sign\": $fa-var-cruzeiro-sign,\n  \"cube\": $fa-var-cube,\n  \"cubes\": $fa-var-cubes,\n  \"d\": $fa-var-d,\n  \"database\": $fa-var-database,\n  \"delete-left\": $fa-var-delete-left,\n  \"backspace\": $fa-var-backspace,\n  \"democrat\": $fa-var-democrat,\n  \"desktop\": $fa-var-desktop,\n  \"desktop-alt\": $fa-var-desktop-alt,\n  \"dharmachakra\": $fa-var-dharmachakra,\n  \"diagram-next\": $fa-var-diagram-next,\n  \"diagram-predecessor\": $fa-var-diagram-predecessor,\n  \"diagram-project\": $fa-var-diagram-project,\n  \"project-diagram\": $fa-var-project-diagram,\n  \"diagram-successor\": $fa-var-diagram-successor,\n  \"diamond\": $fa-var-diamond,\n  \"diamond-turn-right\": $fa-var-diamond-turn-right,\n  \"directions\": $fa-var-directions,\n  \"dice\": $fa-var-dice,\n  \"dice-d20\": $fa-var-dice-d20,\n  \"dice-d6\": $fa-var-dice-d6,\n  \"dice-five\": $fa-var-dice-five,\n  \"dice-four\": $fa-var-dice-four,\n  \"dice-one\": $fa-var-dice-one,\n  \"dice-six\": $fa-var-dice-six,\n  \"dice-three\": $fa-var-dice-three,\n  \"dice-two\": $fa-var-dice-two,\n  \"disease\": $fa-var-disease,\n  \"divide\": $fa-var-divide,\n  \"dna\": $fa-var-dna,\n  \"dog\": $fa-var-dog,\n  \"dollar-sign\": $fa-var-dollar-sign,\n  \"dollar\": $fa-var-dollar,\n  \"usd\": $fa-var-usd,\n  \"dolly\": $fa-var-dolly,\n  \"dolly-box\": $fa-var-dolly-box,\n  \"dong-sign\": $fa-var-dong-sign,\n  \"door-closed\": $fa-var-door-closed,\n  \"door-open\": $fa-var-door-open,\n  \"dove\": $fa-var-dove,\n  \"down-left-and-up-right-to-center\": $fa-var-down-left-and-up-right-to-center,\n  \"compress-alt\": $fa-var-compress-alt,\n  \"down-long\": $fa-var-down-long,\n  \"long-arrow-alt-down\": $fa-var-long-arrow-alt-down,\n  \"download\": $fa-var-download,\n  \"dragon\": $fa-var-dragon,\n  \"draw-polygon\": $fa-var-draw-polygon,\n  \"droplet\": $fa-var-droplet,\n  \"tint\": $fa-var-tint,\n  \"droplet-slash\": $fa-var-droplet-slash,\n  \"tint-slash\": $fa-var-tint-slash,\n  \"drum\": $fa-var-drum,\n  \"drum-steelpan\": $fa-var-drum-steelpan,\n  \"drumstick-bite\": $fa-var-drumstick-bite,\n  \"dumbbell\": $fa-var-dumbbell,\n  \"dumpster\": $fa-var-dumpster,\n  \"dumpster-fire\": $fa-var-dumpster-fire,\n  \"dungeon\": $fa-var-dungeon,\n  \"e\": $fa-var-e,\n  \"ear-deaf\": $fa-var-ear-deaf,\n  \"deaf\": $fa-var-deaf,\n  \"deafness\": $fa-var-deafness,\n  \"hard-of-hearing\": $fa-var-hard-of-hearing,\n  \"ear-listen\": $fa-var-ear-listen,\n  \"assistive-listening-systems\": $fa-var-assistive-listening-systems,\n  \"earth-africa\": $fa-var-earth-africa,\n  \"globe-africa\": $fa-var-globe-africa,\n  \"earth-americas\": $fa-var-earth-americas,\n  \"earth\": $fa-var-earth,\n  \"earth-america\": $fa-var-earth-america,\n  \"globe-americas\": $fa-var-globe-americas,\n  \"earth-asia\": $fa-var-earth-asia,\n  \"globe-asia\": $fa-var-globe-asia,\n  \"earth-europe\": $fa-var-earth-europe,\n  \"globe-europe\": $fa-var-globe-europe,\n  \"earth-oceania\": $fa-var-earth-oceania,\n  \"globe-oceania\": $fa-var-globe-oceania,\n  \"egg\": $fa-var-egg,\n  \"eject\": $fa-var-eject,\n  \"elevator\": $fa-var-elevator,\n  \"ellipsis\": $fa-var-ellipsis,\n  \"ellipsis-h\": $fa-var-ellipsis-h,\n  \"ellipsis-vertical\": $fa-var-ellipsis-vertical,\n  \"ellipsis-v\": $fa-var-ellipsis-v,\n  \"envelope\": $fa-var-envelope,\n  \"envelope-open\": $fa-var-envelope-open,\n  \"envelope-open-text\": $fa-var-envelope-open-text,\n  \"envelopes-bulk\": $fa-var-envelopes-bulk,\n  \"mail-bulk\": $fa-var-mail-bulk,\n  \"equals\": $fa-var-equals,\n  \"eraser\": $fa-var-eraser,\n  \"ethernet\": $fa-var-ethernet,\n  \"euro-sign\": $fa-var-euro-sign,\n  \"eur\": $fa-var-eur,\n  \"euro\": $fa-var-euro,\n  \"exclamation\": $fa-var-exclamation,\n  \"expand\": $fa-var-expand,\n  \"eye\": $fa-var-eye,\n  \"eye-dropper\": $fa-var-eye-dropper,\n  \"eye-dropper-empty\": $fa-var-eye-dropper-empty,\n  \"eyedropper\": $fa-var-eyedropper,\n  \"eye-low-vision\": $fa-var-eye-low-vision,\n  \"low-vision\": $fa-var-low-vision,\n  \"eye-slash\": $fa-var-eye-slash,\n  \"f\": $fa-var-f,\n  \"face-angry\": $fa-var-face-angry,\n  \"angry\": $fa-var-angry,\n  \"face-dizzy\": $fa-var-face-dizzy,\n  \"dizzy\": $fa-var-dizzy,\n  \"face-flushed\": $fa-var-face-flushed,\n  \"flushed\": $fa-var-flushed,\n  \"face-frown\": $fa-var-face-frown,\n  \"frown\": $fa-var-frown,\n  \"face-frown-open\": $fa-var-face-frown-open,\n  \"frown-open\": $fa-var-frown-open,\n  \"face-grimace\": $fa-var-face-grimace,\n  \"grimace\": $fa-var-grimace,\n  \"face-grin\": $fa-var-face-grin,\n  \"grin\": $fa-var-grin,\n  \"face-grin-beam\": $fa-var-face-grin-beam,\n  \"grin-beam\": $fa-var-grin-beam,\n  \"face-grin-beam-sweat\": $fa-var-face-grin-beam-sweat,\n  \"grin-beam-sweat\": $fa-var-grin-beam-sweat,\n  \"face-grin-hearts\": $fa-var-face-grin-hearts,\n  \"grin-hearts\": $fa-var-grin-hearts,\n  \"face-grin-squint\": $fa-var-face-grin-squint,\n  \"grin-squint\": $fa-var-grin-squint,\n  \"face-grin-squint-tears\": $fa-var-face-grin-squint-tears,\n  \"grin-squint-tears\": $fa-var-grin-squint-tears,\n  \"face-grin-stars\": $fa-var-face-grin-stars,\n  \"grin-stars\": $fa-var-grin-stars,\n  \"face-grin-tears\": $fa-var-face-grin-tears,\n  \"grin-tears\": $fa-var-grin-tears,\n  \"face-grin-tongue\": $fa-var-face-grin-tongue,\n  \"grin-tongue\": $fa-var-grin-tongue,\n  \"face-grin-tongue-squint\": $fa-var-face-grin-tongue-squint,\n  \"grin-tongue-squint\": $fa-var-grin-tongue-squint,\n  \"face-grin-tongue-wink\": $fa-var-face-grin-tongue-wink,\n  \"grin-tongue-wink\": $fa-var-grin-tongue-wink,\n  \"face-grin-wide\": $fa-var-face-grin-wide,\n  \"grin-alt\": $fa-var-grin-alt,\n  \"face-grin-wink\": $fa-var-face-grin-wink,\n  \"grin-wink\": $fa-var-grin-wink,\n  \"face-kiss\": $fa-var-face-kiss,\n  \"kiss\": $fa-var-kiss,\n  \"face-kiss-beam\": $fa-var-face-kiss-beam,\n  \"kiss-beam\": $fa-var-kiss-beam,\n  \"face-kiss-wink-heart\": $fa-var-face-kiss-wink-heart,\n  \"kiss-wink-heart\": $fa-var-kiss-wink-heart,\n  \"face-laugh\": $fa-var-face-laugh,\n  \"laugh\": $fa-var-laugh,\n  \"face-laugh-beam\": $fa-var-face-laugh-beam,\n  \"laugh-beam\": $fa-var-laugh-beam,\n  \"face-laugh-squint\": $fa-var-face-laugh-squint,\n  \"laugh-squint\": $fa-var-laugh-squint,\n  \"face-laugh-wink\": $fa-var-face-laugh-wink,\n  \"laugh-wink\": $fa-var-laugh-wink,\n  \"face-meh\": $fa-var-face-meh,\n  \"meh\": $fa-var-meh,\n  \"face-meh-blank\": $fa-var-face-meh-blank,\n  \"meh-blank\": $fa-var-meh-blank,\n  \"face-rolling-eyes\": $fa-var-face-rolling-eyes,\n  \"meh-rolling-eyes\": $fa-var-meh-rolling-eyes,\n  \"face-sad-cry\": $fa-var-face-sad-cry,\n  \"sad-cry\": $fa-var-sad-cry,\n  \"face-sad-tear\": $fa-var-face-sad-tear,\n  \"sad-tear\": $fa-var-sad-tear,\n  \"face-smile\": $fa-var-face-smile,\n  \"smile\": $fa-var-smile,\n  \"face-smile-beam\": $fa-var-face-smile-beam,\n  \"smile-beam\": $fa-var-smile-beam,\n  \"face-smile-wink\": $fa-var-face-smile-wink,\n  \"smile-wink\": $fa-var-smile-wink,\n  \"face-surprise\": $fa-var-face-surprise,\n  \"surprise\": $fa-var-surprise,\n  \"face-tired\": $fa-var-face-tired,\n  \"tired\": $fa-var-tired,\n  \"fan\": $fa-var-fan,\n  \"faucet\": $fa-var-faucet,\n  \"fax\": $fa-var-fax,\n  \"feather\": $fa-var-feather,\n  \"feather-pointed\": $fa-var-feather-pointed,\n  \"feather-alt\": $fa-var-feather-alt,\n  \"file\": $fa-var-file,\n  \"file-arrow-down\": $fa-var-file-arrow-down,\n  \"file-download\": $fa-var-file-download,\n  \"file-arrow-up\": $fa-var-file-arrow-up,\n  \"file-upload\": $fa-var-file-upload,\n  \"file-audio\": $fa-var-file-audio,\n  \"file-code\": $fa-var-file-code,\n  \"file-contract\": $fa-var-file-contract,\n  \"file-csv\": $fa-var-file-csv,\n  \"file-excel\": $fa-var-file-excel,\n  \"file-export\": $fa-var-file-export,\n  \"arrow-right-from-file\": $fa-var-arrow-right-from-file,\n  \"file-image\": $fa-var-file-image,\n  \"file-import\": $fa-var-file-import,\n  \"arrow-right-to-file\": $fa-var-arrow-right-to-file,\n  \"file-invoice\": $fa-var-file-invoice,\n  \"file-invoice-dollar\": $fa-var-file-invoice-dollar,\n  \"file-lines\": $fa-var-file-lines,\n  \"file-alt\": $fa-var-file-alt,\n  \"file-text\": $fa-var-file-text,\n  \"file-medical\": $fa-var-file-medical,\n  \"file-pdf\": $fa-var-file-pdf,\n  \"file-powerpoint\": $fa-var-file-powerpoint,\n  \"file-prescription\": $fa-var-file-prescription,\n  \"file-signature\": $fa-var-file-signature,\n  \"file-video\": $fa-var-file-video,\n  \"file-waveform\": $fa-var-file-waveform,\n  \"file-medical-alt\": $fa-var-file-medical-alt,\n  \"file-word\": $fa-var-file-word,\n  \"file-zipper\": $fa-var-file-zipper,\n  \"file-archive\": $fa-var-file-archive,\n  \"fill\": $fa-var-fill,\n  \"fill-drip\": $fa-var-fill-drip,\n  \"film\": $fa-var-film,\n  \"filter\": $fa-var-filter,\n  \"filter-circle-dollar\": $fa-var-filter-circle-dollar,\n  \"funnel-dollar\": $fa-var-funnel-dollar,\n  \"filter-circle-xmark\": $fa-var-filter-circle-xmark,\n  \"fingerprint\": $fa-var-fingerprint,\n  \"fire\": $fa-var-fire,\n  \"fire-extinguisher\": $fa-var-fire-extinguisher,\n  \"fire-flame-curved\": $fa-var-fire-flame-curved,\n  \"fire-alt\": $fa-var-fire-alt,\n  \"fire-flame-simple\": $fa-var-fire-flame-simple,\n  \"burn\": $fa-var-burn,\n  \"fish\": $fa-var-fish,\n  \"flag\": $fa-var-flag,\n  \"flag-checkered\": $fa-var-flag-checkered,\n  \"flag-usa\": $fa-var-flag-usa,\n  \"flask\": $fa-var-flask,\n  \"floppy-disk\": $fa-var-floppy-disk,\n  \"save\": $fa-var-save,\n  \"florin-sign\": $fa-var-florin-sign,\n  \"folder\": $fa-var-folder,\n  \"folder-minus\": $fa-var-folder-minus,\n  \"folder-open\": $fa-var-folder-open,\n  \"folder-plus\": $fa-var-folder-plus,\n  \"folder-tree\": $fa-var-folder-tree,\n  \"font\": $fa-var-font,\n  \"football\": $fa-var-football,\n  \"football-ball\": $fa-var-football-ball,\n  \"forward\": $fa-var-forward,\n  \"forward-fast\": $fa-var-forward-fast,\n  \"fast-forward\": $fa-var-fast-forward,\n  \"forward-step\": $fa-var-forward-step,\n  \"step-forward\": $fa-var-step-forward,\n  \"franc-sign\": $fa-var-franc-sign,\n  \"frog\": $fa-var-frog,\n  \"futbol\": $fa-var-futbol,\n  \"futbol-ball\": $fa-var-futbol-ball,\n  \"soccer-ball\": $fa-var-soccer-ball,\n  \"g\": $fa-var-g,\n  \"gamepad\": $fa-var-gamepad,\n  \"gas-pump\": $fa-var-gas-pump,\n  \"gauge\": $fa-var-gauge,\n  \"dashboard\": $fa-var-dashboard,\n  \"gauge-med\": $fa-var-gauge-med,\n  \"tachometer-alt-average\": $fa-var-tachometer-alt-average,\n  \"gauge-high\": $fa-var-gauge-high,\n  \"tachometer-alt\": $fa-var-tachometer-alt,\n  \"tachometer-alt-fast\": $fa-var-tachometer-alt-fast,\n  \"gauge-simple\": $fa-var-gauge-simple,\n  \"gauge-simple-med\": $fa-var-gauge-simple-med,\n  \"tachometer-average\": $fa-var-tachometer-average,\n  \"gauge-simple-high\": $fa-var-gauge-simple-high,\n  \"tachometer\": $fa-var-tachometer,\n  \"tachometer-fast\": $fa-var-tachometer-fast,\n  \"gavel\": $fa-var-gavel,\n  \"legal\": $fa-var-legal,\n  \"gear\": $fa-var-gear,\n  \"cog\": $fa-var-cog,\n  \"gears\": $fa-var-gears,\n  \"cogs\": $fa-var-cogs,\n  \"gem\": $fa-var-gem,\n  \"genderless\": $fa-var-genderless,\n  \"ghost\": $fa-var-ghost,\n  \"gift\": $fa-var-gift,\n  \"gifts\": $fa-var-gifts,\n  \"glasses\": $fa-var-glasses,\n  \"globe\": $fa-var-globe,\n  \"golf-ball-tee\": $fa-var-golf-ball-tee,\n  \"golf-ball\": $fa-var-golf-ball,\n  \"gopuram\": $fa-var-gopuram,\n  \"graduation-cap\": $fa-var-graduation-cap,\n  \"mortar-board\": $fa-var-mortar-board,\n  \"greater-than\": $fa-var-greater-than,\n  \"greater-than-equal\": $fa-var-greater-than-equal,\n  \"grip\": $fa-var-grip,\n  \"grip-horizontal\": $fa-var-grip-horizontal,\n  \"grip-lines\": $fa-var-grip-lines,\n  \"grip-lines-vertical\": $fa-var-grip-lines-vertical,\n  \"grip-vertical\": $fa-var-grip-vertical,\n  \"guarani-sign\": $fa-var-guarani-sign,\n  \"guitar\": $fa-var-guitar,\n  \"gun\": $fa-var-gun,\n  \"h\": $fa-var-h,\n  \"hammer\": $fa-var-hammer,\n  \"hamsa\": $fa-var-hamsa,\n  \"hand\": $fa-var-hand,\n  \"hand-paper\": $fa-var-hand-paper,\n  \"hand-back-fist\": $fa-var-hand-back-fist,\n  \"hand-rock\": $fa-var-hand-rock,\n  \"hand-dots\": $fa-var-hand-dots,\n  \"allergies\": $fa-var-allergies,\n  \"hand-fist\": $fa-var-hand-fist,\n  \"fist-raised\": $fa-var-fist-raised,\n  \"hand-holding\": $fa-var-hand-holding,\n  \"hand-holding-dollar\": $fa-var-hand-holding-dollar,\n  \"hand-holding-usd\": $fa-var-hand-holding-usd,\n  \"hand-holding-droplet\": $fa-var-hand-holding-droplet,\n  \"hand-holding-water\": $fa-var-hand-holding-water,\n  \"hand-holding-heart\": $fa-var-hand-holding-heart,\n  \"hand-holding-medical\": $fa-var-hand-holding-medical,\n  \"hand-lizard\": $fa-var-hand-lizard,\n  \"hand-middle-finger\": $fa-var-hand-middle-finger,\n  \"hand-peace\": $fa-var-hand-peace,\n  \"hand-point-down\": $fa-var-hand-point-down,\n  \"hand-point-left\": $fa-var-hand-point-left,\n  \"hand-point-right\": $fa-var-hand-point-right,\n  \"hand-point-up\": $fa-var-hand-point-up,\n  \"hand-pointer\": $fa-var-hand-pointer,\n  \"hand-scissors\": $fa-var-hand-scissors,\n  \"hand-sparkles\": $fa-var-hand-sparkles,\n  \"hand-spock\": $fa-var-hand-spock,\n  \"hands\": $fa-var-hands,\n  \"sign-language\": $fa-var-sign-language,\n  \"signing\": $fa-var-signing,\n  \"hands-asl-interpreting\": $fa-var-hands-asl-interpreting,\n  \"american-sign-language-interpreting\": $fa-var-american-sign-language-interpreting,\n  \"asl-interpreting\": $fa-var-asl-interpreting,\n  \"hands-american-sign-language-interpreting\": $fa-var-hands-american-sign-language-interpreting,\n  \"hands-bubbles\": $fa-var-hands-bubbles,\n  \"hands-wash\": $fa-var-hands-wash,\n  \"hands-clapping\": $fa-var-hands-clapping,\n  \"hands-holding\": $fa-var-hands-holding,\n  \"hands-praying\": $fa-var-hands-praying,\n  \"praying-hands\": $fa-var-praying-hands,\n  \"handshake\": $fa-var-handshake,\n  \"handshake-angle\": $fa-var-handshake-angle,\n  \"hands-helping\": $fa-var-hands-helping,\n  \"handshake-simple-slash\": $fa-var-handshake-simple-slash,\n  \"handshake-alt-slash\": $fa-var-handshake-alt-slash,\n  \"handshake-slash\": $fa-var-handshake-slash,\n  \"hanukiah\": $fa-var-hanukiah,\n  \"hard-drive\": $fa-var-hard-drive,\n  \"hdd\": $fa-var-hdd,\n  \"hashtag\": $fa-var-hashtag,\n  \"hat-cowboy\": $fa-var-hat-cowboy,\n  \"hat-cowboy-side\": $fa-var-hat-cowboy-side,\n  \"hat-wizard\": $fa-var-hat-wizard,\n  \"head-side-cough\": $fa-var-head-side-cough,\n  \"head-side-cough-slash\": $fa-var-head-side-cough-slash,\n  \"head-side-mask\": $fa-var-head-side-mask,\n  \"head-side-virus\": $fa-var-head-side-virus,\n  \"heading\": $fa-var-heading,\n  \"header\": $fa-var-header,\n  \"headphones\": $fa-var-headphones,\n  \"headphones-simple\": $fa-var-headphones-simple,\n  \"headphones-alt\": $fa-var-headphones-alt,\n  \"headset\": $fa-var-headset,\n  \"heart\": $fa-var-heart,\n  \"heart-crack\": $fa-var-heart-crack,\n  \"heart-broken\": $fa-var-heart-broken,\n  \"heart-pulse\": $fa-var-heart-pulse,\n  \"heartbeat\": $fa-var-heartbeat,\n  \"helicopter\": $fa-var-helicopter,\n  \"helmet-safety\": $fa-var-helmet-safety,\n  \"hard-hat\": $fa-var-hard-hat,\n  \"hat-hard\": $fa-var-hat-hard,\n  \"highlighter\": $fa-var-highlighter,\n  \"hippo\": $fa-var-hippo,\n  \"hockey-puck\": $fa-var-hockey-puck,\n  \"holly-berry\": $fa-var-holly-berry,\n  \"horse\": $fa-var-horse,\n  \"horse-head\": $fa-var-horse-head,\n  \"hospital\": $fa-var-hospital,\n  \"hospital-alt\": $fa-var-hospital-alt,\n  \"hospital-wide\": $fa-var-hospital-wide,\n  \"hospital-user\": $fa-var-hospital-user,\n  \"hot-tub-person\": $fa-var-hot-tub-person,\n  \"hot-tub\": $fa-var-hot-tub,\n  \"hotdog\": $fa-var-hotdog,\n  \"hotel\": $fa-var-hotel,\n  \"hourglass\": $fa-var-hourglass,\n  \"hourglass-2\": $fa-var-hourglass-2,\n  \"hourglass-half\": $fa-var-hourglass-half,\n  \"hourglass-empty\": $fa-var-hourglass-empty,\n  \"hourglass-end\": $fa-var-hourglass-end,\n  \"hourglass-3\": $fa-var-hourglass-3,\n  \"hourglass-start\": $fa-var-hourglass-start,\n  \"hourglass-1\": $fa-var-hourglass-1,\n  \"house\": $fa-var-house,\n  \"home\": $fa-var-home,\n  \"home-alt\": $fa-var-home-alt,\n  \"home-lg-alt\": $fa-var-home-lg-alt,\n  \"house-chimney\": $fa-var-house-chimney,\n  \"home-lg\": $fa-var-home-lg,\n  \"house-chimney-crack\": $fa-var-house-chimney-crack,\n  \"house-damage\": $fa-var-house-damage,\n  \"house-chimney-medical\": $fa-var-house-chimney-medical,\n  \"clinic-medical\": $fa-var-clinic-medical,\n  \"house-chimney-user\": $fa-var-house-chimney-user,\n  \"house-chimney-window\": $fa-var-house-chimney-window,\n  \"house-crack\": $fa-var-house-crack,\n  \"house-laptop\": $fa-var-house-laptop,\n  \"laptop-house\": $fa-var-laptop-house,\n  \"house-medical\": $fa-var-house-medical,\n  \"house-user\": $fa-var-house-user,\n  \"home-user\": $fa-var-home-user,\n  \"hryvnia-sign\": $fa-var-hryvnia-sign,\n  \"hryvnia\": $fa-var-hryvnia,\n  \"i\": $fa-var-i,\n  \"i-cursor\": $fa-var-i-cursor,\n  \"ice-cream\": $fa-var-ice-cream,\n  \"icicles\": $fa-var-icicles,\n  \"icons\": $fa-var-icons,\n  \"heart-music-camera-bolt\": $fa-var-heart-music-camera-bolt,\n  \"id-badge\": $fa-var-id-badge,\n  \"id-card\": $fa-var-id-card,\n  \"drivers-license\": $fa-var-drivers-license,\n  \"id-card-clip\": $fa-var-id-card-clip,\n  \"id-card-alt\": $fa-var-id-card-alt,\n  \"igloo\": $fa-var-igloo,\n  \"image\": $fa-var-image,\n  \"image-portrait\": $fa-var-image-portrait,\n  \"portrait\": $fa-var-portrait,\n  \"images\": $fa-var-images,\n  \"inbox\": $fa-var-inbox,\n  \"indent\": $fa-var-indent,\n  \"indian-rupee-sign\": $fa-var-indian-rupee-sign,\n  \"indian-rupee\": $fa-var-indian-rupee,\n  \"inr\": $fa-var-inr,\n  \"industry\": $fa-var-industry,\n  \"infinity\": $fa-var-infinity,\n  \"info\": $fa-var-info,\n  \"italic\": $fa-var-italic,\n  \"j\": $fa-var-j,\n  \"jedi\": $fa-var-jedi,\n  \"jet-fighter\": $fa-var-jet-fighter,\n  \"fighter-jet\": $fa-var-fighter-jet,\n  \"joint\": $fa-var-joint,\n  \"k\": $fa-var-k,\n  \"kaaba\": $fa-var-kaaba,\n  \"key\": $fa-var-key,\n  \"keyboard\": $fa-var-keyboard,\n  \"khanda\": $fa-var-khanda,\n  \"kip-sign\": $fa-var-kip-sign,\n  \"kit-medical\": $fa-var-kit-medical,\n  \"first-aid\": $fa-var-first-aid,\n  \"kiwi-bird\": $fa-var-kiwi-bird,\n  \"l\": $fa-var-l,\n  \"landmark\": $fa-var-landmark,\n  \"language\": $fa-var-language,\n  \"laptop\": $fa-var-laptop,\n  \"laptop-code\": $fa-var-laptop-code,\n  \"laptop-medical\": $fa-var-laptop-medical,\n  \"lari-sign\": $fa-var-lari-sign,\n  \"layer-group\": $fa-var-layer-group,\n  \"leaf\": $fa-var-leaf,\n  \"left-long\": $fa-var-left-long,\n  \"long-arrow-alt-left\": $fa-var-long-arrow-alt-left,\n  \"left-right\": $fa-var-left-right,\n  \"arrows-alt-h\": $fa-var-arrows-alt-h,\n  \"lemon\": $fa-var-lemon,\n  \"less-than\": $fa-var-less-than,\n  \"less-than-equal\": $fa-var-less-than-equal,\n  \"life-ring\": $fa-var-life-ring,\n  \"lightbulb\": $fa-var-lightbulb,\n  \"link\": $fa-var-link,\n  \"chain\": $fa-var-chain,\n  \"link-slash\": $fa-var-link-slash,\n  \"chain-broken\": $fa-var-chain-broken,\n  \"chain-slash\": $fa-var-chain-slash,\n  \"unlink\": $fa-var-unlink,\n  \"lira-sign\": $fa-var-lira-sign,\n  \"list\": $fa-var-list,\n  \"list-squares\": $fa-var-list-squares,\n  \"list-check\": $fa-var-list-check,\n  \"tasks\": $fa-var-tasks,\n  \"list-ol\": $fa-var-list-ol,\n  \"list-1-2\": $fa-var-list-1-2,\n  \"list-numeric\": $fa-var-list-numeric,\n  \"list-ul\": $fa-var-list-ul,\n  \"list-dots\": $fa-var-list-dots,\n  \"litecoin-sign\": $fa-var-litecoin-sign,\n  \"location-arrow\": $fa-var-location-arrow,\n  \"location-crosshairs\": $fa-var-location-crosshairs,\n  \"location\": $fa-var-location,\n  \"location-dot\": $fa-var-location-dot,\n  \"map-marker-alt\": $fa-var-map-marker-alt,\n  \"location-pin\": $fa-var-location-pin,\n  \"map-marker\": $fa-var-map-marker,\n  \"lock\": $fa-var-lock,\n  \"lock-open\": $fa-var-lock-open,\n  \"lungs\": $fa-var-lungs,\n  \"lungs-virus\": $fa-var-lungs-virus,\n  \"m\": $fa-var-m,\n  \"magnet\": $fa-var-magnet,\n  \"magnifying-glass\": $fa-var-magnifying-glass,\n  \"search\": $fa-var-search,\n  \"magnifying-glass-dollar\": $fa-var-magnifying-glass-dollar,\n  \"search-dollar\": $fa-var-search-dollar,\n  \"magnifying-glass-location\": $fa-var-magnifying-glass-location,\n  \"search-location\": $fa-var-search-location,\n  \"magnifying-glass-minus\": $fa-var-magnifying-glass-minus,\n  \"search-minus\": $fa-var-search-minus,\n  \"magnifying-glass-plus\": $fa-var-magnifying-glass-plus,\n  \"search-plus\": $fa-var-search-plus,\n  \"manat-sign\": $fa-var-manat-sign,\n  \"map\": $fa-var-map,\n  \"map-location\": $fa-var-map-location,\n  \"map-marked\": $fa-var-map-marked,\n  \"map-location-dot\": $fa-var-map-location-dot,\n  \"map-marked-alt\": $fa-var-map-marked-alt,\n  \"map-pin\": $fa-var-map-pin,\n  \"marker\": $fa-var-marker,\n  \"mars\": $fa-var-mars,\n  \"mars-and-venus\": $fa-var-mars-and-venus,\n  \"mars-double\": $fa-var-mars-double,\n  \"mars-stroke\": $fa-var-mars-stroke,\n  \"mars-stroke-right\": $fa-var-mars-stroke-right,\n  \"mars-stroke-h\": $fa-var-mars-stroke-h,\n  \"mars-stroke-up\": $fa-var-mars-stroke-up,\n  \"mars-stroke-v\": $fa-var-mars-stroke-v,\n  \"martini-glass\": $fa-var-martini-glass,\n  \"glass-martini-alt\": $fa-var-glass-martini-alt,\n  \"martini-glass-citrus\": $fa-var-martini-glass-citrus,\n  \"cocktail\": $fa-var-cocktail,\n  \"martini-glass-empty\": $fa-var-martini-glass-empty,\n  \"glass-martini\": $fa-var-glass-martini,\n  \"mask\": $fa-var-mask,\n  \"mask-face\": $fa-var-mask-face,\n  \"masks-theater\": $fa-var-masks-theater,\n  \"theater-masks\": $fa-var-theater-masks,\n  \"maximize\": $fa-var-maximize,\n  \"expand-arrows-alt\": $fa-var-expand-arrows-alt,\n  \"medal\": $fa-var-medal,\n  \"memory\": $fa-var-memory,\n  \"menorah\": $fa-var-menorah,\n  \"mercury\": $fa-var-mercury,\n  \"message\": $fa-var-message,\n  \"comment-alt\": $fa-var-comment-alt,\n  \"meteor\": $fa-var-meteor,\n  \"microchip\": $fa-var-microchip,\n  \"microphone\": $fa-var-microphone,\n  \"microphone-lines\": $fa-var-microphone-lines,\n  \"microphone-alt\": $fa-var-microphone-alt,\n  \"microphone-lines-slash\": $fa-var-microphone-lines-slash,\n  \"microphone-alt-slash\": $fa-var-microphone-alt-slash,\n  \"microphone-slash\": $fa-var-microphone-slash,\n  \"microscope\": $fa-var-microscope,\n  \"mill-sign\": $fa-var-mill-sign,\n  \"minimize\": $fa-var-minimize,\n  \"compress-arrows-alt\": $fa-var-compress-arrows-alt,\n  \"minus\": $fa-var-minus,\n  \"subtract\": $fa-var-subtract,\n  \"mitten\": $fa-var-mitten,\n  \"mobile\": $fa-var-mobile,\n  \"mobile-android\": $fa-var-mobile-android,\n  \"mobile-phone\": $fa-var-mobile-phone,\n  \"mobile-button\": $fa-var-mobile-button,\n  \"mobile-screen-button\": $fa-var-mobile-screen-button,\n  \"mobile-alt\": $fa-var-mobile-alt,\n  \"money-bill\": $fa-var-money-bill,\n  \"money-bill-1\": $fa-var-money-bill-1,\n  \"money-bill-alt\": $fa-var-money-bill-alt,\n  \"money-bill-1-wave\": $fa-var-money-bill-1-wave,\n  \"money-bill-wave-alt\": $fa-var-money-bill-wave-alt,\n  \"money-bill-wave\": $fa-var-money-bill-wave,\n  \"money-check\": $fa-var-money-check,\n  \"money-check-dollar\": $fa-var-money-check-dollar,\n  \"money-check-alt\": $fa-var-money-check-alt,\n  \"monument\": $fa-var-monument,\n  \"moon\": $fa-var-moon,\n  \"mortar-pestle\": $fa-var-mortar-pestle,\n  \"mosque\": $fa-var-mosque,\n  \"motorcycle\": $fa-var-motorcycle,\n  \"mountain\": $fa-var-mountain,\n  \"mug-hot\": $fa-var-mug-hot,\n  \"mug-saucer\": $fa-var-mug-saucer,\n  \"coffee\": $fa-var-coffee,\n  \"music\": $fa-var-music,\n  \"n\": $fa-var-n,\n  \"naira-sign\": $fa-var-naira-sign,\n  \"network-wired\": $fa-var-network-wired,\n  \"neuter\": $fa-var-neuter,\n  \"newspaper\": $fa-var-newspaper,\n  \"not-equal\": $fa-var-not-equal,\n  \"note-sticky\": $fa-var-note-sticky,\n  \"sticky-note\": $fa-var-sticky-note,\n  \"notes-medical\": $fa-var-notes-medical,\n  \"o\": $fa-var-o,\n  \"object-group\": $fa-var-object-group,\n  \"object-ungroup\": $fa-var-object-ungroup,\n  \"oil-can\": $fa-var-oil-can,\n  \"om\": $fa-var-om,\n  \"otter\": $fa-var-otter,\n  \"outdent\": $fa-var-outdent,\n  \"dedent\": $fa-var-dedent,\n  \"p\": $fa-var-p,\n  \"pager\": $fa-var-pager,\n  \"paint-roller\": $fa-var-paint-roller,\n  \"paintbrush\": $fa-var-paintbrush,\n  \"paint-brush\": $fa-var-paint-brush,\n  \"palette\": $fa-var-palette,\n  \"pallet\": $fa-var-pallet,\n  \"panorama\": $fa-var-panorama,\n  \"paper-plane\": $fa-var-paper-plane,\n  \"paperclip\": $fa-var-paperclip,\n  \"parachute-box\": $fa-var-parachute-box,\n  \"paragraph\": $fa-var-paragraph,\n  \"passport\": $fa-var-passport,\n  \"paste\": $fa-var-paste,\n  \"file-clipboard\": $fa-var-file-clipboard,\n  \"pause\": $fa-var-pause,\n  \"paw\": $fa-var-paw,\n  \"peace\": $fa-var-peace,\n  \"pen\": $fa-var-pen,\n  \"pen-clip\": $fa-var-pen-clip,\n  \"pen-alt\": $fa-var-pen-alt,\n  \"pen-fancy\": $fa-var-pen-fancy,\n  \"pen-nib\": $fa-var-pen-nib,\n  \"pen-ruler\": $fa-var-pen-ruler,\n  \"pencil-ruler\": $fa-var-pencil-ruler,\n  \"pen-to-square\": $fa-var-pen-to-square,\n  \"edit\": $fa-var-edit,\n  \"pencil\": $fa-var-pencil,\n  \"pencil-alt\": $fa-var-pencil-alt,\n  \"people-arrows-left-right\": $fa-var-people-arrows-left-right,\n  \"people-arrows\": $fa-var-people-arrows,\n  \"people-carry-box\": $fa-var-people-carry-box,\n  \"people-carry\": $fa-var-people-carry,\n  \"pepper-hot\": $fa-var-pepper-hot,\n  \"percent\": $fa-var-percent,\n  \"percentage\": $fa-var-percentage,\n  \"person\": $fa-var-person,\n  \"male\": $fa-var-male,\n  \"person-biking\": $fa-var-person-biking,\n  \"biking\": $fa-var-biking,\n  \"person-booth\": $fa-var-person-booth,\n  \"person-dots-from-line\": $fa-var-person-dots-from-line,\n  \"diagnoses\": $fa-var-diagnoses,\n  \"person-dress\": $fa-var-person-dress,\n  \"female\": $fa-var-female,\n  \"person-hiking\": $fa-var-person-hiking,\n  \"hiking\": $fa-var-hiking,\n  \"person-praying\": $fa-var-person-praying,\n  \"pray\": $fa-var-pray,\n  \"person-running\": $fa-var-person-running,\n  \"running\": $fa-var-running,\n  \"person-skating\": $fa-var-person-skating,\n  \"skating\": $fa-var-skating,\n  \"person-skiing\": $fa-var-person-skiing,\n  \"skiing\": $fa-var-skiing,\n  \"person-skiing-nordic\": $fa-var-person-skiing-nordic,\n  \"skiing-nordic\": $fa-var-skiing-nordic,\n  \"person-snowboarding\": $fa-var-person-snowboarding,\n  \"snowboarding\": $fa-var-snowboarding,\n  \"person-swimming\": $fa-var-person-swimming,\n  \"swimmer\": $fa-var-swimmer,\n  \"person-walking\": $fa-var-person-walking,\n  \"walking\": $fa-var-walking,\n  \"person-walking-with-cane\": $fa-var-person-walking-with-cane,\n  \"blind\": $fa-var-blind,\n  \"peseta-sign\": $fa-var-peseta-sign,\n  \"peso-sign\": $fa-var-peso-sign,\n  \"phone\": $fa-var-phone,\n  \"phone-flip\": $fa-var-phone-flip,\n  \"phone-alt\": $fa-var-phone-alt,\n  \"phone-slash\": $fa-var-phone-slash,\n  \"phone-volume\": $fa-var-phone-volume,\n  \"volume-control-phone\": $fa-var-volume-control-phone,\n  \"photo-film\": $fa-var-photo-film,\n  \"photo-video\": $fa-var-photo-video,\n  \"piggy-bank\": $fa-var-piggy-bank,\n  \"pills\": $fa-var-pills,\n  \"pizza-slice\": $fa-var-pizza-slice,\n  \"place-of-worship\": $fa-var-place-of-worship,\n  \"plane\": $fa-var-plane,\n  \"plane-arrival\": $fa-var-plane-arrival,\n  \"plane-departure\": $fa-var-plane-departure,\n  \"plane-slash\": $fa-var-plane-slash,\n  \"play\": $fa-var-play,\n  \"plug\": $fa-var-plug,\n  \"plus\": $fa-var-plus,\n  \"add\": $fa-var-add,\n  \"plus-minus\": $fa-var-plus-minus,\n  \"podcast\": $fa-var-podcast,\n  \"poo\": $fa-var-poo,\n  \"poo-storm\": $fa-var-poo-storm,\n  \"poo-bolt\": $fa-var-poo-bolt,\n  \"poop\": $fa-var-poop,\n  \"power-off\": $fa-var-power-off,\n  \"prescription\": $fa-var-prescription,\n  \"prescription-bottle\": $fa-var-prescription-bottle,\n  \"prescription-bottle-medical\": $fa-var-prescription-bottle-medical,\n  \"prescription-bottle-alt\": $fa-var-prescription-bottle-alt,\n  \"print\": $fa-var-print,\n  \"pump-medical\": $fa-var-pump-medical,\n  \"pump-soap\": $fa-var-pump-soap,\n  \"puzzle-piece\": $fa-var-puzzle-piece,\n  \"q\": $fa-var-q,\n  \"qrcode\": $fa-var-qrcode,\n  \"question\": $fa-var-question,\n  \"quote-left\": $fa-var-quote-left,\n  \"quote-left-alt\": $fa-var-quote-left-alt,\n  \"quote-right\": $fa-var-quote-right,\n  \"quote-right-alt\": $fa-var-quote-right-alt,\n  \"r\": $fa-var-r,\n  \"radiation\": $fa-var-radiation,\n  \"rainbow\": $fa-var-rainbow,\n  \"receipt\": $fa-var-receipt,\n  \"record-vinyl\": $fa-var-record-vinyl,\n  \"rectangle-ad\": $fa-var-rectangle-ad,\n  \"ad\": $fa-var-ad,\n  \"rectangle-list\": $fa-var-rectangle-list,\n  \"list-alt\": $fa-var-list-alt,\n  \"rectangle-xmark\": $fa-var-rectangle-xmark,\n  \"rectangle-times\": $fa-var-rectangle-times,\n  \"times-rectangle\": $fa-var-times-rectangle,\n  \"window-close\": $fa-var-window-close,\n  \"recycle\": $fa-var-recycle,\n  \"registered\": $fa-var-registered,\n  \"repeat\": $fa-var-repeat,\n  \"reply\": $fa-var-reply,\n  \"mail-reply\": $fa-var-mail-reply,\n  \"reply-all\": $fa-var-reply-all,\n  \"mail-reply-all\": $fa-var-mail-reply-all,\n  \"republican\": $fa-var-republican,\n  \"restroom\": $fa-var-restroom,\n  \"retweet\": $fa-var-retweet,\n  \"ribbon\": $fa-var-ribbon,\n  \"right-from-bracket\": $fa-var-right-from-bracket,\n  \"sign-out-alt\": $fa-var-sign-out-alt,\n  \"right-left\": $fa-var-right-left,\n  \"exchange-alt\": $fa-var-exchange-alt,\n  \"right-long\": $fa-var-right-long,\n  \"long-arrow-alt-right\": $fa-var-long-arrow-alt-right,\n  \"right-to-bracket\": $fa-var-right-to-bracket,\n  \"sign-in-alt\": $fa-var-sign-in-alt,\n  \"ring\": $fa-var-ring,\n  \"road\": $fa-var-road,\n  \"robot\": $fa-var-robot,\n  \"rocket\": $fa-var-rocket,\n  \"rotate\": $fa-var-rotate,\n  \"sync-alt\": $fa-var-sync-alt,\n  \"rotate-left\": $fa-var-rotate-left,\n  \"rotate-back\": $fa-var-rotate-back,\n  \"rotate-backward\": $fa-var-rotate-backward,\n  \"undo-alt\": $fa-var-undo-alt,\n  \"rotate-right\": $fa-var-rotate-right,\n  \"redo-alt\": $fa-var-redo-alt,\n  \"rotate-forward\": $fa-var-rotate-forward,\n  \"route\": $fa-var-route,\n  \"rss\": $fa-var-rss,\n  \"feed\": $fa-var-feed,\n  \"ruble-sign\": $fa-var-ruble-sign,\n  \"rouble\": $fa-var-rouble,\n  \"rub\": $fa-var-rub,\n  \"ruble\": $fa-var-ruble,\n  \"ruler\": $fa-var-ruler,\n  \"ruler-combined\": $fa-var-ruler-combined,\n  \"ruler-horizontal\": $fa-var-ruler-horizontal,\n  \"ruler-vertical\": $fa-var-ruler-vertical,\n  \"rupee-sign\": $fa-var-rupee-sign,\n  \"rupee\": $fa-var-rupee,\n  \"rupiah-sign\": $fa-var-rupiah-sign,\n  \"s\": $fa-var-s,\n  \"sailboat\": $fa-var-sailboat,\n  \"satellite\": $fa-var-satellite,\n  \"satellite-dish\": $fa-var-satellite-dish,\n  \"scale-balanced\": $fa-var-scale-balanced,\n  \"balance-scale\": $fa-var-balance-scale,\n  \"scale-unbalanced\": $fa-var-scale-unbalanced,\n  \"balance-scale-left\": $fa-var-balance-scale-left,\n  \"scale-unbalanced-flip\": $fa-var-scale-unbalanced-flip,\n  \"balance-scale-right\": $fa-var-balance-scale-right,\n  \"school\": $fa-var-school,\n  \"scissors\": $fa-var-scissors,\n  \"cut\": $fa-var-cut,\n  \"screwdriver\": $fa-var-screwdriver,\n  \"screwdriver-wrench\": $fa-var-screwdriver-wrench,\n  \"tools\": $fa-var-tools,\n  \"scroll\": $fa-var-scroll,\n  \"scroll-torah\": $fa-var-scroll-torah,\n  \"torah\": $fa-var-torah,\n  \"sd-card\": $fa-var-sd-card,\n  \"section\": $fa-var-section,\n  \"seedling\": $fa-var-seedling,\n  \"sprout\": $fa-var-sprout,\n  \"server\": $fa-var-server,\n  \"shapes\": $fa-var-shapes,\n  \"triangle-circle-square\": $fa-var-triangle-circle-square,\n  \"share\": $fa-var-share,\n  \"arrow-turn-right\": $fa-var-arrow-turn-right,\n  \"mail-forward\": $fa-var-mail-forward,\n  \"share-from-square\": $fa-var-share-from-square,\n  \"share-square\": $fa-var-share-square,\n  \"share-nodes\": $fa-var-share-nodes,\n  \"share-alt\": $fa-var-share-alt,\n  \"shekel-sign\": $fa-var-shekel-sign,\n  \"ils\": $fa-var-ils,\n  \"shekel\": $fa-var-shekel,\n  \"sheqel\": $fa-var-sheqel,\n  \"sheqel-sign\": $fa-var-sheqel-sign,\n  \"shield\": $fa-var-shield,\n  \"shield-blank\": $fa-var-shield-blank,\n  \"shield-alt\": $fa-var-shield-alt,\n  \"shield-virus\": $fa-var-shield-virus,\n  \"ship\": $fa-var-ship,\n  \"shirt\": $fa-var-shirt,\n  \"t-shirt\": $fa-var-t-shirt,\n  \"tshirt\": $fa-var-tshirt,\n  \"shoe-prints\": $fa-var-shoe-prints,\n  \"shop\": $fa-var-shop,\n  \"store-alt\": $fa-var-store-alt,\n  \"shop-slash\": $fa-var-shop-slash,\n  \"store-alt-slash\": $fa-var-store-alt-slash,\n  \"shower\": $fa-var-shower,\n  \"shrimp\": $fa-var-shrimp,\n  \"shuffle\": $fa-var-shuffle,\n  \"random\": $fa-var-random,\n  \"shuttle-space\": $fa-var-shuttle-space,\n  \"space-shuttle\": $fa-var-space-shuttle,\n  \"sign-hanging\": $fa-var-sign-hanging,\n  \"sign\": $fa-var-sign,\n  \"signal\": $fa-var-signal,\n  \"signal-5\": $fa-var-signal-5,\n  \"signal-perfect\": $fa-var-signal-perfect,\n  \"signature\": $fa-var-signature,\n  \"signs-post\": $fa-var-signs-post,\n  \"map-signs\": $fa-var-map-signs,\n  \"sim-card\": $fa-var-sim-card,\n  \"sink\": $fa-var-sink,\n  \"sitemap\": $fa-var-sitemap,\n  \"skull\": $fa-var-skull,\n  \"skull-crossbones\": $fa-var-skull-crossbones,\n  \"slash\": $fa-var-slash,\n  \"sleigh\": $fa-var-sleigh,\n  \"sliders\": $fa-var-sliders,\n  \"sliders-h\": $fa-var-sliders-h,\n  \"smog\": $fa-var-smog,\n  \"smoking\": $fa-var-smoking,\n  \"snowflake\": $fa-var-snowflake,\n  \"snowman\": $fa-var-snowman,\n  \"snowplow\": $fa-var-snowplow,\n  \"soap\": $fa-var-soap,\n  \"socks\": $fa-var-socks,\n  \"solar-panel\": $fa-var-solar-panel,\n  \"sort\": $fa-var-sort,\n  \"unsorted\": $fa-var-unsorted,\n  \"sort-down\": $fa-var-sort-down,\n  \"sort-desc\": $fa-var-sort-desc,\n  \"sort-up\": $fa-var-sort-up,\n  \"sort-asc\": $fa-var-sort-asc,\n  \"spa\": $fa-var-spa,\n  \"spaghetti-monster-flying\": $fa-var-spaghetti-monster-flying,\n  \"pastafarianism\": $fa-var-pastafarianism,\n  \"spell-check\": $fa-var-spell-check,\n  \"spider\": $fa-var-spider,\n  \"spinner\": $fa-var-spinner,\n  \"splotch\": $fa-var-splotch,\n  \"spoon\": $fa-var-spoon,\n  \"utensil-spoon\": $fa-var-utensil-spoon,\n  \"spray-can\": $fa-var-spray-can,\n  \"spray-can-sparkles\": $fa-var-spray-can-sparkles,\n  \"air-freshener\": $fa-var-air-freshener,\n  \"square\": $fa-var-square,\n  \"square-arrow-up-right\": $fa-var-square-arrow-up-right,\n  \"external-link-square\": $fa-var-external-link-square,\n  \"square-caret-down\": $fa-var-square-caret-down,\n  \"caret-square-down\": $fa-var-caret-square-down,\n  \"square-caret-left\": $fa-var-square-caret-left,\n  \"caret-square-left\": $fa-var-caret-square-left,\n  \"square-caret-right\": $fa-var-square-caret-right,\n  \"caret-square-right\": $fa-var-caret-square-right,\n  \"square-caret-up\": $fa-var-square-caret-up,\n  \"caret-square-up\": $fa-var-caret-square-up,\n  \"square-check\": $fa-var-square-check,\n  \"check-square\": $fa-var-check-square,\n  \"square-envelope\": $fa-var-square-envelope,\n  \"envelope-square\": $fa-var-envelope-square,\n  \"square-full\": $fa-var-square-full,\n  \"square-h\": $fa-var-square-h,\n  \"h-square\": $fa-var-h-square,\n  \"square-minus\": $fa-var-square-minus,\n  \"minus-square\": $fa-var-minus-square,\n  \"square-parking\": $fa-var-square-parking,\n  \"parking\": $fa-var-parking,\n  \"square-pen\": $fa-var-square-pen,\n  \"pen-square\": $fa-var-pen-square,\n  \"pencil-square\": $fa-var-pencil-square,\n  \"square-phone\": $fa-var-square-phone,\n  \"phone-square\": $fa-var-phone-square,\n  \"square-phone-flip\": $fa-var-square-phone-flip,\n  \"phone-square-alt\": $fa-var-phone-square-alt,\n  \"square-plus\": $fa-var-square-plus,\n  \"plus-square\": $fa-var-plus-square,\n  \"square-poll-horizontal\": $fa-var-square-poll-horizontal,\n  \"poll-h\": $fa-var-poll-h,\n  \"square-poll-vertical\": $fa-var-square-poll-vertical,\n  \"poll\": $fa-var-poll,\n  \"square-root-variable\": $fa-var-square-root-variable,\n  \"square-root-alt\": $fa-var-square-root-alt,\n  \"square-rss\": $fa-var-square-rss,\n  \"rss-square\": $fa-var-rss-square,\n  \"square-share-nodes\": $fa-var-square-share-nodes,\n  \"share-alt-square\": $fa-var-share-alt-square,\n  \"square-up-right\": $fa-var-square-up-right,\n  \"external-link-square-alt\": $fa-var-external-link-square-alt,\n  \"square-xmark\": $fa-var-square-xmark,\n  \"times-square\": $fa-var-times-square,\n  \"xmark-square\": $fa-var-xmark-square,\n  \"stairs\": $fa-var-stairs,\n  \"stamp\": $fa-var-stamp,\n  \"star\": $fa-var-star,\n  \"star-and-crescent\": $fa-var-star-and-crescent,\n  \"star-half\": $fa-var-star-half,\n  \"star-half-stroke\": $fa-var-star-half-stroke,\n  \"star-half-alt\": $fa-var-star-half-alt,\n  \"star-of-david\": $fa-var-star-of-david,\n  \"star-of-life\": $fa-var-star-of-life,\n  \"sterling-sign\": $fa-var-sterling-sign,\n  \"gbp\": $fa-var-gbp,\n  \"pound-sign\": $fa-var-pound-sign,\n  \"stethoscope\": $fa-var-stethoscope,\n  \"stop\": $fa-var-stop,\n  \"stopwatch\": $fa-var-stopwatch,\n  \"stopwatch-20\": $fa-var-stopwatch-20,\n  \"store\": $fa-var-store,\n  \"store-slash\": $fa-var-store-slash,\n  \"street-view\": $fa-var-street-view,\n  \"strikethrough\": $fa-var-strikethrough,\n  \"stroopwafel\": $fa-var-stroopwafel,\n  \"subscript\": $fa-var-subscript,\n  \"suitcase\": $fa-var-suitcase,\n  \"suitcase-medical\": $fa-var-suitcase-medical,\n  \"medkit\": $fa-var-medkit,\n  \"suitcase-rolling\": $fa-var-suitcase-rolling,\n  \"sun\": $fa-var-sun,\n  \"superscript\": $fa-var-superscript,\n  \"swatchbook\": $fa-var-swatchbook,\n  \"synagogue\": $fa-var-synagogue,\n  \"syringe\": $fa-var-syringe,\n  \"t\": $fa-var-t,\n  \"table\": $fa-var-table,\n  \"table-cells\": $fa-var-table-cells,\n  \"th\": $fa-var-th,\n  \"table-cells-large\": $fa-var-table-cells-large,\n  \"th-large\": $fa-var-th-large,\n  \"table-columns\": $fa-var-table-columns,\n  \"columns\": $fa-var-columns,\n  \"table-list\": $fa-var-table-list,\n  \"th-list\": $fa-var-th-list,\n  \"table-tennis-paddle-ball\": $fa-var-table-tennis-paddle-ball,\n  \"ping-pong-paddle-ball\": $fa-var-ping-pong-paddle-ball,\n  \"table-tennis\": $fa-var-table-tennis,\n  \"tablet\": $fa-var-tablet,\n  \"tablet-android\": $fa-var-tablet-android,\n  \"tablet-button\": $fa-var-tablet-button,\n  \"tablet-screen-button\": $fa-var-tablet-screen-button,\n  \"tablet-alt\": $fa-var-tablet-alt,\n  \"tablets\": $fa-var-tablets,\n  \"tachograph-digital\": $fa-var-tachograph-digital,\n  \"digital-tachograph\": $fa-var-digital-tachograph,\n  \"tag\": $fa-var-tag,\n  \"tags\": $fa-var-tags,\n  \"tape\": $fa-var-tape,\n  \"taxi\": $fa-var-taxi,\n  \"cab\": $fa-var-cab,\n  \"teeth\": $fa-var-teeth,\n  \"teeth-open\": $fa-var-teeth-open,\n  \"temperature-empty\": $fa-var-temperature-empty,\n  \"temperature-0\": $fa-var-temperature-0,\n  \"thermometer-0\": $fa-var-thermometer-0,\n  \"thermometer-empty\": $fa-var-thermometer-empty,\n  \"temperature-full\": $fa-var-temperature-full,\n  \"temperature-4\": $fa-var-temperature-4,\n  \"thermometer-4\": $fa-var-thermometer-4,\n  \"thermometer-full\": $fa-var-thermometer-full,\n  \"temperature-half\": $fa-var-temperature-half,\n  \"temperature-2\": $fa-var-temperature-2,\n  \"thermometer-2\": $fa-var-thermometer-2,\n  \"thermometer-half\": $fa-var-thermometer-half,\n  \"temperature-high\": $fa-var-temperature-high,\n  \"temperature-low\": $fa-var-temperature-low,\n  \"temperature-quarter\": $fa-var-temperature-quarter,\n  \"temperature-1\": $fa-var-temperature-1,\n  \"thermometer-1\": $fa-var-thermometer-1,\n  \"thermometer-quarter\": $fa-var-thermometer-quarter,\n  \"temperature-three-quarters\": $fa-var-temperature-three-quarters,\n  \"temperature-3\": $fa-var-temperature-3,\n  \"thermometer-3\": $fa-var-thermometer-3,\n  \"thermometer-three-quarters\": $fa-var-thermometer-three-quarters,\n  \"tenge-sign\": $fa-var-tenge-sign,\n  \"tenge\": $fa-var-tenge,\n  \"terminal\": $fa-var-terminal,\n  \"text-height\": $fa-var-text-height,\n  \"text-slash\": $fa-var-text-slash,\n  \"remove-format\": $fa-var-remove-format,\n  \"text-width\": $fa-var-text-width,\n  \"thermometer\": $fa-var-thermometer,\n  \"thumbs-down\": $fa-var-thumbs-down,\n  \"thumbs-up\": $fa-var-thumbs-up,\n  \"thumbtack\": $fa-var-thumbtack,\n  \"thumb-tack\": $fa-var-thumb-tack,\n  \"ticket\": $fa-var-ticket,\n  \"ticket-simple\": $fa-var-ticket-simple,\n  \"ticket-alt\": $fa-var-ticket-alt,\n  \"timeline\": $fa-var-timeline,\n  \"toggle-off\": $fa-var-toggle-off,\n  \"toggle-on\": $fa-var-toggle-on,\n  \"toilet\": $fa-var-toilet,\n  \"toilet-paper\": $fa-var-toilet-paper,\n  \"toilet-paper-slash\": $fa-var-toilet-paper-slash,\n  \"toolbox\": $fa-var-toolbox,\n  \"tooth\": $fa-var-tooth,\n  \"torii-gate\": $fa-var-torii-gate,\n  \"tower-broadcast\": $fa-var-tower-broadcast,\n  \"broadcast-tower\": $fa-var-broadcast-tower,\n  \"tractor\": $fa-var-tractor,\n  \"trademark\": $fa-var-trademark,\n  \"traffic-light\": $fa-var-traffic-light,\n  \"trailer\": $fa-var-trailer,\n  \"train\": $fa-var-train,\n  \"train-subway\": $fa-var-train-subway,\n  \"subway\": $fa-var-subway,\n  \"train-tram\": $fa-var-train-tram,\n  \"tram\": $fa-var-tram,\n  \"transgender\": $fa-var-transgender,\n  \"transgender-alt\": $fa-var-transgender-alt,\n  \"trash\": $fa-var-trash,\n  \"trash-arrow-up\": $fa-var-trash-arrow-up,\n  \"trash-restore\": $fa-var-trash-restore,\n  \"trash-can\": $fa-var-trash-can,\n  \"trash-alt\": $fa-var-trash-alt,\n  \"trash-can-arrow-up\": $fa-var-trash-can-arrow-up,\n  \"trash-restore-alt\": $fa-var-trash-restore-alt,\n  \"tree\": $fa-var-tree,\n  \"triangle-exclamation\": $fa-var-triangle-exclamation,\n  \"exclamation-triangle\": $fa-var-exclamation-triangle,\n  \"warning\": $fa-var-warning,\n  \"trophy\": $fa-var-trophy,\n  \"truck\": $fa-var-truck,\n  \"truck-fast\": $fa-var-truck-fast,\n  \"shipping-fast\": $fa-var-shipping-fast,\n  \"truck-medical\": $fa-var-truck-medical,\n  \"ambulance\": $fa-var-ambulance,\n  \"truck-monster\": $fa-var-truck-monster,\n  \"truck-moving\": $fa-var-truck-moving,\n  \"truck-pickup\": $fa-var-truck-pickup,\n  \"truck-ramp-box\": $fa-var-truck-ramp-box,\n  \"truck-loading\": $fa-var-truck-loading,\n  \"tty\": $fa-var-tty,\n  \"teletype\": $fa-var-teletype,\n  \"turkish-lira-sign\": $fa-var-turkish-lira-sign,\n  \"try\": $fa-var-try,\n  \"turkish-lira\": $fa-var-turkish-lira,\n  \"turn-down\": $fa-var-turn-down,\n  \"level-down-alt\": $fa-var-level-down-alt,\n  \"turn-up\": $fa-var-turn-up,\n  \"level-up-alt\": $fa-var-level-up-alt,\n  \"tv\": $fa-var-tv,\n  \"television\": $fa-var-television,\n  \"tv-alt\": $fa-var-tv-alt,\n  \"u\": $fa-var-u,\n  \"umbrella\": $fa-var-umbrella,\n  \"umbrella-beach\": $fa-var-umbrella-beach,\n  \"underline\": $fa-var-underline,\n  \"universal-access\": $fa-var-universal-access,\n  \"unlock\": $fa-var-unlock,\n  \"unlock-keyhole\": $fa-var-unlock-keyhole,\n  \"unlock-alt\": $fa-var-unlock-alt,\n  \"up-down\": $fa-var-up-down,\n  \"arrows-alt-v\": $fa-var-arrows-alt-v,\n  \"up-down-left-right\": $fa-var-up-down-left-right,\n  \"arrows-alt\": $fa-var-arrows-alt,\n  \"up-long\": $fa-var-up-long,\n  \"long-arrow-alt-up\": $fa-var-long-arrow-alt-up,\n  \"up-right-and-down-left-from-center\": $fa-var-up-right-and-down-left-from-center,\n  \"expand-alt\": $fa-var-expand-alt,\n  \"up-right-from-square\": $fa-var-up-right-from-square,\n  \"external-link-alt\": $fa-var-external-link-alt,\n  \"upload\": $fa-var-upload,\n  \"user\": $fa-var-user,\n  \"user-astronaut\": $fa-var-user-astronaut,\n  \"user-check\": $fa-var-user-check,\n  \"user-clock\": $fa-var-user-clock,\n  \"user-doctor\": $fa-var-user-doctor,\n  \"user-md\": $fa-var-user-md,\n  \"user-gear\": $fa-var-user-gear,\n  \"user-cog\": $fa-var-user-cog,\n  \"user-graduate\": $fa-var-user-graduate,\n  \"user-group\": $fa-var-user-group,\n  \"user-friends\": $fa-var-user-friends,\n  \"user-injured\": $fa-var-user-injured,\n  \"user-large\": $fa-var-user-large,\n  \"user-alt\": $fa-var-user-alt,\n  \"user-large-slash\": $fa-var-user-large-slash,\n  \"user-alt-slash\": $fa-var-user-alt-slash,\n  \"user-lock\": $fa-var-user-lock,\n  \"user-minus\": $fa-var-user-minus,\n  \"user-ninja\": $fa-var-user-ninja,\n  \"user-nurse\": $fa-var-user-nurse,\n  \"user-pen\": $fa-var-user-pen,\n  \"user-edit\": $fa-var-user-edit,\n  \"user-plus\": $fa-var-user-plus,\n  \"user-secret\": $fa-var-user-secret,\n  \"user-shield\": $fa-var-user-shield,\n  \"user-slash\": $fa-var-user-slash,\n  \"user-tag\": $fa-var-user-tag,\n  \"user-tie\": $fa-var-user-tie,\n  \"user-xmark\": $fa-var-user-xmark,\n  \"user-times\": $fa-var-user-times,\n  \"users\": $fa-var-users,\n  \"users-gear\": $fa-var-users-gear,\n  \"users-cog\": $fa-var-users-cog,\n  \"users-slash\": $fa-var-users-slash,\n  \"utensils\": $fa-var-utensils,\n  \"cutlery\": $fa-var-cutlery,\n  \"v\": $fa-var-v,\n  \"van-shuttle\": $fa-var-van-shuttle,\n  \"shuttle-van\": $fa-var-shuttle-van,\n  \"vault\": $fa-var-vault,\n  \"vector-square\": $fa-var-vector-square,\n  \"venus\": $fa-var-venus,\n  \"venus-double\": $fa-var-venus-double,\n  \"venus-mars\": $fa-var-venus-mars,\n  \"vest\": $fa-var-vest,\n  \"vest-patches\": $fa-var-vest-patches,\n  \"vial\": $fa-var-vial,\n  \"vials\": $fa-var-vials,\n  \"video\": $fa-var-video,\n  \"video-camera\": $fa-var-video-camera,\n  \"video-slash\": $fa-var-video-slash,\n  \"vihara\": $fa-var-vihara,\n  \"virus\": $fa-var-virus,\n  \"virus-covid\": $fa-var-virus-covid,\n  \"virus-covid-slash\": $fa-var-virus-covid-slash,\n  \"virus-slash\": $fa-var-virus-slash,\n  \"viruses\": $fa-var-viruses,\n  \"voicemail\": $fa-var-voicemail,\n  \"volleyball\": $fa-var-volleyball,\n  \"volleyball-ball\": $fa-var-volleyball-ball,\n  \"volume-high\": $fa-var-volume-high,\n  \"volume-up\": $fa-var-volume-up,\n  \"volume-low\": $fa-var-volume-low,\n  \"volume-down\": $fa-var-volume-down,\n  \"volume-off\": $fa-var-volume-off,\n  \"volume-xmark\": $fa-var-volume-xmark,\n  \"volume-mute\": $fa-var-volume-mute,\n  \"volume-times\": $fa-var-volume-times,\n  \"vr-cardboard\": $fa-var-vr-cardboard,\n  \"w\": $fa-var-w,\n  \"wallet\": $fa-var-wallet,\n  \"wand-magic\": $fa-var-wand-magic,\n  \"magic\": $fa-var-magic,\n  \"wand-magic-sparkles\": $fa-var-wand-magic-sparkles,\n  \"magic-wand-sparkles\": $fa-var-magic-wand-sparkles,\n  \"wand-sparkles\": $fa-var-wand-sparkles,\n  \"warehouse\": $fa-var-warehouse,\n  \"water\": $fa-var-water,\n  \"water-ladder\": $fa-var-water-ladder,\n  \"ladder-water\": $fa-var-ladder-water,\n  \"swimming-pool\": $fa-var-swimming-pool,\n  \"wave-square\": $fa-var-wave-square,\n  \"weight-hanging\": $fa-var-weight-hanging,\n  \"weight-scale\": $fa-var-weight-scale,\n  \"weight\": $fa-var-weight,\n  \"wheelchair\": $fa-var-wheelchair,\n  \"whiskey-glass\": $fa-var-whiskey-glass,\n  \"glass-whiskey\": $fa-var-glass-whiskey,\n  \"wifi\": $fa-var-wifi,\n  \"wifi-3\": $fa-var-wifi-3,\n  \"wifi-strong\": $fa-var-wifi-strong,\n  \"wind\": $fa-var-wind,\n  \"window-maximize\": $fa-var-window-maximize,\n  \"window-minimize\": $fa-var-window-minimize,\n  \"window-restore\": $fa-var-window-restore,\n  \"wine-bottle\": $fa-var-wine-bottle,\n  \"wine-glass\": $fa-var-wine-glass,\n  \"wine-glass-empty\": $fa-var-wine-glass-empty,\n  \"wine-glass-alt\": $fa-var-wine-glass-alt,\n  \"won-sign\": $fa-var-won-sign,\n  \"krw\": $fa-var-krw,\n  \"won\": $fa-var-won,\n  \"wrench\": $fa-var-wrench,\n  \"x\": $fa-var-x,\n  \"x-ray\": $fa-var-x-ray,\n  \"xmark\": $fa-var-xmark,\n  \"close\": $fa-var-close,\n  \"multiply\": $fa-var-multiply,\n  \"remove\": $fa-var-remove,\n  \"times\": $fa-var-times,\n  \"y\": $fa-var-y,\n  \"yen-sign\": $fa-var-yen-sign,\n  \"cny\": $fa-var-cny,\n  \"jpy\": $fa-var-jpy,\n  \"rmb\": $fa-var-rmb,\n  \"yen\": $fa-var-yen,\n  \"yin-yang\": $fa-var-yin-yang,\n  \"z\": $fa-var-z,\n);\n\n$fa-brand-icons: (\n  \"42-group\": $fa-var-42-group,\n  \"innosoft\": $fa-var-innosoft,\n  \"500px\": $fa-var-500px,\n  \"accessible-icon\": $fa-var-accessible-icon,\n  \"accusoft\": $fa-var-accusoft,\n  \"adn\": $fa-var-adn,\n  \"adversal\": $fa-var-adversal,\n  \"affiliatetheme\": $fa-var-affiliatetheme,\n  \"airbnb\": $fa-var-airbnb,\n  \"algolia\": $fa-var-algolia,\n  \"alipay\": $fa-var-alipay,\n  \"amazon\": $fa-var-amazon,\n  \"amazon-pay\": $fa-var-amazon-pay,\n  \"amilia\": $fa-var-amilia,\n  \"android\": $fa-var-android,\n  \"angellist\": $fa-var-angellist,\n  \"angrycreative\": $fa-var-angrycreative,\n  \"angular\": $fa-var-angular,\n  \"app-store\": $fa-var-app-store,\n  \"app-store-ios\": $fa-var-app-store-ios,\n  \"apper\": $fa-var-apper,\n  \"apple\": $fa-var-apple,\n  \"apple-pay\": $fa-var-apple-pay,\n  \"artstation\": $fa-var-artstation,\n  \"asymmetrik\": $fa-var-asymmetrik,\n  \"atlassian\": $fa-var-atlassian,\n  \"audible\": $fa-var-audible,\n  \"autoprefixer\": $fa-var-autoprefixer,\n  \"avianex\": $fa-var-avianex,\n  \"aviato\": $fa-var-aviato,\n  \"aws\": $fa-var-aws,\n  \"bandcamp\": $fa-var-bandcamp,\n  \"battle-net\": $fa-var-battle-net,\n  \"behance\": $fa-var-behance,\n  \"behance-square\": $fa-var-behance-square,\n  \"bilibili\": $fa-var-bilibili,\n  \"bimobject\": $fa-var-bimobject,\n  \"bitbucket\": $fa-var-bitbucket,\n  \"bitcoin\": $fa-var-bitcoin,\n  \"bity\": $fa-var-bity,\n  \"black-tie\": $fa-var-black-tie,\n  \"blackberry\": $fa-var-blackberry,\n  \"blogger\": $fa-var-blogger,\n  \"blogger-b\": $fa-var-blogger-b,\n  \"bluetooth\": $fa-var-bluetooth,\n  \"bluetooth-b\": $fa-var-bluetooth-b,\n  \"bootstrap\": $fa-var-bootstrap,\n  \"bots\": $fa-var-bots,\n  \"btc\": $fa-var-btc,\n  \"buffer\": $fa-var-buffer,\n  \"buromobelexperte\": $fa-var-buromobelexperte,\n  \"buy-n-large\": $fa-var-buy-n-large,\n  \"buysellads\": $fa-var-buysellads,\n  \"canadian-maple-leaf\": $fa-var-canadian-maple-leaf,\n  \"cc-amazon-pay\": $fa-var-cc-amazon-pay,\n  \"cc-amex\": $fa-var-cc-amex,\n  \"cc-apple-pay\": $fa-var-cc-apple-pay,\n  \"cc-diners-club\": $fa-var-cc-diners-club,\n  \"cc-discover\": $fa-var-cc-discover,\n  \"cc-jcb\": $fa-var-cc-jcb,\n  \"cc-mastercard\": $fa-var-cc-mastercard,\n  \"cc-paypal\": $fa-var-cc-paypal,\n  \"cc-stripe\": $fa-var-cc-stripe,\n  \"cc-visa\": $fa-var-cc-visa,\n  \"centercode\": $fa-var-centercode,\n  \"centos\": $fa-var-centos,\n  \"chrome\": $fa-var-chrome,\n  \"chromecast\": $fa-var-chromecast,\n  \"cloudflare\": $fa-var-cloudflare,\n  \"cloudscale\": $fa-var-cloudscale,\n  \"cloudsmith\": $fa-var-cloudsmith,\n  \"cloudversify\": $fa-var-cloudversify,\n  \"cmplid\": $fa-var-cmplid,\n  \"codepen\": $fa-var-codepen,\n  \"codiepie\": $fa-var-codiepie,\n  \"confluence\": $fa-var-confluence,\n  \"connectdevelop\": $fa-var-connectdevelop,\n  \"contao\": $fa-var-contao,\n  \"cotton-bureau\": $fa-var-cotton-bureau,\n  \"cpanel\": $fa-var-cpanel,\n  \"creative-commons\": $fa-var-creative-commons,\n  \"creative-commons-by\": $fa-var-creative-commons-by,\n  \"creative-commons-nc\": $fa-var-creative-commons-nc,\n  \"creative-commons-nc-eu\": $fa-var-creative-commons-nc-eu,\n  \"creative-commons-nc-jp\": $fa-var-creative-commons-nc-jp,\n  \"creative-commons-nd\": $fa-var-creative-commons-nd,\n  \"creative-commons-pd\": $fa-var-creative-commons-pd,\n  \"creative-commons-pd-alt\": $fa-var-creative-commons-pd-alt,\n  \"creative-commons-remix\": $fa-var-creative-commons-remix,\n  \"creative-commons-sa\": $fa-var-creative-commons-sa,\n  \"creative-commons-sampling\": $fa-var-creative-commons-sampling,\n  \"creative-commons-sampling-plus\": $fa-var-creative-commons-sampling-plus,\n  \"creative-commons-share\": $fa-var-creative-commons-share,\n  \"creative-commons-zero\": $fa-var-creative-commons-zero,\n  \"critical-role\": $fa-var-critical-role,\n  \"css3\": $fa-var-css3,\n  \"css3-alt\": $fa-var-css3-alt,\n  \"cuttlefish\": $fa-var-cuttlefish,\n  \"d-and-d\": $fa-var-d-and-d,\n  \"d-and-d-beyond\": $fa-var-d-and-d-beyond,\n  \"dailymotion\": $fa-var-dailymotion,\n  \"dashcube\": $fa-var-dashcube,\n  \"deezer\": $fa-var-deezer,\n  \"delicious\": $fa-var-delicious,\n  \"deploydog\": $fa-var-deploydog,\n  \"deskpro\": $fa-var-deskpro,\n  \"dev\": $fa-var-dev,\n  \"deviantart\": $fa-var-deviantart,\n  \"dhl\": $fa-var-dhl,\n  \"diaspora\": $fa-var-diaspora,\n  \"digg\": $fa-var-digg,\n  \"digital-ocean\": $fa-var-digital-ocean,\n  \"discord\": $fa-var-discord,\n  \"discourse\": $fa-var-discourse,\n  \"dochub\": $fa-var-dochub,\n  \"docker\": $fa-var-docker,\n  \"draft2digital\": $fa-var-draft2digital,\n  \"dribbble\": $fa-var-dribbble,\n  \"dribbble-square\": $fa-var-dribbble-square,\n  \"dropbox\": $fa-var-dropbox,\n  \"drupal\": $fa-var-drupal,\n  \"dyalog\": $fa-var-dyalog,\n  \"earlybirds\": $fa-var-earlybirds,\n  \"ebay\": $fa-var-ebay,\n  \"edge\": $fa-var-edge,\n  \"edge-legacy\": $fa-var-edge-legacy,\n  \"elementor\": $fa-var-elementor,\n  \"ello\": $fa-var-ello,\n  \"ember\": $fa-var-ember,\n  \"empire\": $fa-var-empire,\n  \"envira\": $fa-var-envira,\n  \"erlang\": $fa-var-erlang,\n  \"ethereum\": $fa-var-ethereum,\n  \"etsy\": $fa-var-etsy,\n  \"evernote\": $fa-var-evernote,\n  \"expeditedssl\": $fa-var-expeditedssl,\n  \"facebook\": $fa-var-facebook,\n  \"facebook-f\": $fa-var-facebook-f,\n  \"facebook-messenger\": $fa-var-facebook-messenger,\n  \"facebook-square\": $fa-var-facebook-square,\n  \"fantasy-flight-games\": $fa-var-fantasy-flight-games,\n  \"fedex\": $fa-var-fedex,\n  \"fedora\": $fa-var-fedora,\n  \"figma\": $fa-var-figma,\n  \"firefox\": $fa-var-firefox,\n  \"firefox-browser\": $fa-var-firefox-browser,\n  \"first-order\": $fa-var-first-order,\n  \"first-order-alt\": $fa-var-first-order-alt,\n  \"firstdraft\": $fa-var-firstdraft,\n  \"flickr\": $fa-var-flickr,\n  \"flipboard\": $fa-var-flipboard,\n  \"fly\": $fa-var-fly,\n  \"font-awesome\": $fa-var-font-awesome,\n  \"font-awesome-flag\": $fa-var-font-awesome-flag,\n  \"font-awesome-logo-full\": $fa-var-font-awesome-logo-full,\n  \"fonticons\": $fa-var-fonticons,\n  \"fonticons-fi\": $fa-var-fonticons-fi,\n  \"fort-awesome\": $fa-var-fort-awesome,\n  \"fort-awesome-alt\": $fa-var-fort-awesome-alt,\n  \"forumbee\": $fa-var-forumbee,\n  \"foursquare\": $fa-var-foursquare,\n  \"free-code-camp\": $fa-var-free-code-camp,\n  \"freebsd\": $fa-var-freebsd,\n  \"fulcrum\": $fa-var-fulcrum,\n  \"galactic-republic\": $fa-var-galactic-republic,\n  \"galactic-senate\": $fa-var-galactic-senate,\n  \"get-pocket\": $fa-var-get-pocket,\n  \"gg\": $fa-var-gg,\n  \"gg-circle\": $fa-var-gg-circle,\n  \"git\": $fa-var-git,\n  \"git-alt\": $fa-var-git-alt,\n  \"git-square\": $fa-var-git-square,\n  \"github\": $fa-var-github,\n  \"github-alt\": $fa-var-github-alt,\n  \"github-square\": $fa-var-github-square,\n  \"gitkraken\": $fa-var-gitkraken,\n  \"gitlab\": $fa-var-gitlab,\n  \"gitter\": $fa-var-gitter,\n  \"glide\": $fa-var-glide,\n  \"glide-g\": $fa-var-glide-g,\n  \"gofore\": $fa-var-gofore,\n  \"golang\": $fa-var-golang,\n  \"goodreads\": $fa-var-goodreads,\n  \"goodreads-g\": $fa-var-goodreads-g,\n  \"google\": $fa-var-google,\n  \"google-drive\": $fa-var-google-drive,\n  \"google-pay\": $fa-var-google-pay,\n  \"google-play\": $fa-var-google-play,\n  \"google-plus\": $fa-var-google-plus,\n  \"google-plus-g\": $fa-var-google-plus-g,\n  \"google-plus-square\": $fa-var-google-plus-square,\n  \"google-wallet\": $fa-var-google-wallet,\n  \"gratipay\": $fa-var-gratipay,\n  \"grav\": $fa-var-grav,\n  \"gripfire\": $fa-var-gripfire,\n  \"grunt\": $fa-var-grunt,\n  \"guilded\": $fa-var-guilded,\n  \"gulp\": $fa-var-gulp,\n  \"hacker-news\": $fa-var-hacker-news,\n  \"hacker-news-square\": $fa-var-hacker-news-square,\n  \"hackerrank\": $fa-var-hackerrank,\n  \"hashnode\": $fa-var-hashnode,\n  \"hips\": $fa-var-hips,\n  \"hire-a-helper\": $fa-var-hire-a-helper,\n  \"hive\": $fa-var-hive,\n  \"hooli\": $fa-var-hooli,\n  \"hornbill\": $fa-var-hornbill,\n  \"hotjar\": $fa-var-hotjar,\n  \"houzz\": $fa-var-houzz,\n  \"html5\": $fa-var-html5,\n  \"hubspot\": $fa-var-hubspot,\n  \"ideal\": $fa-var-ideal,\n  \"imdb\": $fa-var-imdb,\n  \"instagram\": $fa-var-instagram,\n  \"instagram-square\": $fa-var-instagram-square,\n  \"instalod\": $fa-var-instalod,\n  \"intercom\": $fa-var-intercom,\n  \"internet-explorer\": $fa-var-internet-explorer,\n  \"invision\": $fa-var-invision,\n  \"ioxhost\": $fa-var-ioxhost,\n  \"itch-io\": $fa-var-itch-io,\n  \"itunes\": $fa-var-itunes,\n  \"itunes-note\": $fa-var-itunes-note,\n  \"java\": $fa-var-java,\n  \"jedi-order\": $fa-var-jedi-order,\n  \"jenkins\": $fa-var-jenkins,\n  \"jira\": $fa-var-jira,\n  \"joget\": $fa-var-joget,\n  \"joomla\": $fa-var-joomla,\n  \"js\": $fa-var-js,\n  \"js-square\": $fa-var-js-square,\n  \"jsfiddle\": $fa-var-jsfiddle,\n  \"kaggle\": $fa-var-kaggle,\n  \"keybase\": $fa-var-keybase,\n  \"keycdn\": $fa-var-keycdn,\n  \"kickstarter\": $fa-var-kickstarter,\n  \"kickstarter-k\": $fa-var-kickstarter-k,\n  \"korvue\": $fa-var-korvue,\n  \"laravel\": $fa-var-laravel,\n  \"lastfm\": $fa-var-lastfm,\n  \"lastfm-square\": $fa-var-lastfm-square,\n  \"leanpub\": $fa-var-leanpub,\n  \"less\": $fa-var-less,\n  \"line\": $fa-var-line,\n  \"linkedin\": $fa-var-linkedin,\n  \"linkedin-in\": $fa-var-linkedin-in,\n  \"linode\": $fa-var-linode,\n  \"linux\": $fa-var-linux,\n  \"lyft\": $fa-var-lyft,\n  \"magento\": $fa-var-magento,\n  \"mailchimp\": $fa-var-mailchimp,\n  \"mandalorian\": $fa-var-mandalorian,\n  \"markdown\": $fa-var-markdown,\n  \"mastodon\": $fa-var-mastodon,\n  \"maxcdn\": $fa-var-maxcdn,\n  \"mdb\": $fa-var-mdb,\n  \"medapps\": $fa-var-medapps,\n  \"medium\": $fa-var-medium,\n  \"medium-m\": $fa-var-medium-m,\n  \"medrt\": $fa-var-medrt,\n  \"meetup\": $fa-var-meetup,\n  \"megaport\": $fa-var-megaport,\n  \"mendeley\": $fa-var-mendeley,\n  \"microblog\": $fa-var-microblog,\n  \"microsoft\": $fa-var-microsoft,\n  \"mix\": $fa-var-mix,\n  \"mixcloud\": $fa-var-mixcloud,\n  \"mixer\": $fa-var-mixer,\n  \"mizuni\": $fa-var-mizuni,\n  \"modx\": $fa-var-modx,\n  \"monero\": $fa-var-monero,\n  \"napster\": $fa-var-napster,\n  \"neos\": $fa-var-neos,\n  \"nimblr\": $fa-var-nimblr,\n  \"node\": $fa-var-node,\n  \"node-js\": $fa-var-node-js,\n  \"npm\": $fa-var-npm,\n  \"ns8\": $fa-var-ns8,\n  \"nutritionix\": $fa-var-nutritionix,\n  \"octopus-deploy\": $fa-var-octopus-deploy,\n  \"odnoklassniki\": $fa-var-odnoklassniki,\n  \"odnoklassniki-square\": $fa-var-odnoklassniki-square,\n  \"old-republic\": $fa-var-old-republic,\n  \"opencart\": $fa-var-opencart,\n  \"openid\": $fa-var-openid,\n  \"opera\": $fa-var-opera,\n  \"optin-monster\": $fa-var-optin-monster,\n  \"orcid\": $fa-var-orcid,\n  \"osi\": $fa-var-osi,\n  \"padlet\": $fa-var-padlet,\n  \"page4\": $fa-var-page4,\n  \"pagelines\": $fa-var-pagelines,\n  \"palfed\": $fa-var-palfed,\n  \"patreon\": $fa-var-patreon,\n  \"paypal\": $fa-var-paypal,\n  \"perbyte\": $fa-var-perbyte,\n  \"periscope\": $fa-var-periscope,\n  \"phabricator\": $fa-var-phabricator,\n  \"phoenix-framework\": $fa-var-phoenix-framework,\n  \"phoenix-squadron\": $fa-var-phoenix-squadron,\n  \"php\": $fa-var-php,\n  \"pied-piper\": $fa-var-pied-piper,\n  \"pied-piper-alt\": $fa-var-pied-piper-alt,\n  \"pied-piper-hat\": $fa-var-pied-piper-hat,\n  \"pied-piper-pp\": $fa-var-pied-piper-pp,\n  \"pied-piper-square\": $fa-var-pied-piper-square,\n  \"pinterest\": $fa-var-pinterest,\n  \"pinterest-p\": $fa-var-pinterest-p,\n  \"pinterest-square\": $fa-var-pinterest-square,\n  \"pix\": $fa-var-pix,\n  \"playstation\": $fa-var-playstation,\n  \"product-hunt\": $fa-var-product-hunt,\n  \"pushed\": $fa-var-pushed,\n  \"python\": $fa-var-python,\n  \"qq\": $fa-var-qq,\n  \"quinscape\": $fa-var-quinscape,\n  \"quora\": $fa-var-quora,\n  \"r-project\": $fa-var-r-project,\n  \"raspberry-pi\": $fa-var-raspberry-pi,\n  \"ravelry\": $fa-var-ravelry,\n  \"react\": $fa-var-react,\n  \"reacteurope\": $fa-var-reacteurope,\n  \"readme\": $fa-var-readme,\n  \"rebel\": $fa-var-rebel,\n  \"red-river\": $fa-var-red-river,\n  \"reddit\": $fa-var-reddit,\n  \"reddit-alien\": $fa-var-reddit-alien,\n  \"reddit-square\": $fa-var-reddit-square,\n  \"redhat\": $fa-var-redhat,\n  \"renren\": $fa-var-renren,\n  \"replyd\": $fa-var-replyd,\n  \"researchgate\": $fa-var-researchgate,\n  \"resolving\": $fa-var-resolving,\n  \"rev\": $fa-var-rev,\n  \"rocketchat\": $fa-var-rocketchat,\n  \"rockrms\": $fa-var-rockrms,\n  \"rust\": $fa-var-rust,\n  \"safari\": $fa-var-safari,\n  \"salesforce\": $fa-var-salesforce,\n  \"sass\": $fa-var-sass,\n  \"schlix\": $fa-var-schlix,\n  \"scribd\": $fa-var-scribd,\n  \"searchengin\": $fa-var-searchengin,\n  \"sellcast\": $fa-var-sellcast,\n  \"sellsy\": $fa-var-sellsy,\n  \"servicestack\": $fa-var-servicestack,\n  \"shirtsinbulk\": $fa-var-shirtsinbulk,\n  \"shopify\": $fa-var-shopify,\n  \"shopware\": $fa-var-shopware,\n  \"simplybuilt\": $fa-var-simplybuilt,\n  \"sistrix\": $fa-var-sistrix,\n  \"sith\": $fa-var-sith,\n  \"sitrox\": $fa-var-sitrox,\n  \"sketch\": $fa-var-sketch,\n  \"skyatlas\": $fa-var-skyatlas,\n  \"skype\": $fa-var-skype,\n  \"slack\": $fa-var-slack,\n  \"slack-hash\": $fa-var-slack-hash,\n  \"slideshare\": $fa-var-slideshare,\n  \"snapchat\": $fa-var-snapchat,\n  \"snapchat-ghost\": $fa-var-snapchat-ghost,\n  \"snapchat-square\": $fa-var-snapchat-square,\n  \"soundcloud\": $fa-var-soundcloud,\n  \"sourcetree\": $fa-var-sourcetree,\n  \"speakap\": $fa-var-speakap,\n  \"speaker-deck\": $fa-var-speaker-deck,\n  \"spotify\": $fa-var-spotify,\n  \"square-font-awesome\": $fa-var-square-font-awesome,\n  \"square-font-awesome-stroke\": $fa-var-square-font-awesome-stroke,\n  \"font-awesome-alt\": $fa-var-font-awesome-alt,\n  \"squarespace\": $fa-var-squarespace,\n  \"stack-exchange\": $fa-var-stack-exchange,\n  \"stack-overflow\": $fa-var-stack-overflow,\n  \"stackpath\": $fa-var-stackpath,\n  \"staylinked\": $fa-var-staylinked,\n  \"steam\": $fa-var-steam,\n  \"steam-square\": $fa-var-steam-square,\n  \"steam-symbol\": $fa-var-steam-symbol,\n  \"sticker-mule\": $fa-var-sticker-mule,\n  \"strava\": $fa-var-strava,\n  \"stripe\": $fa-var-stripe,\n  \"stripe-s\": $fa-var-stripe-s,\n  \"studiovinari\": $fa-var-studiovinari,\n  \"stumbleupon\": $fa-var-stumbleupon,\n  \"stumbleupon-circle\": $fa-var-stumbleupon-circle,\n  \"superpowers\": $fa-var-superpowers,\n  \"supple\": $fa-var-supple,\n  \"suse\": $fa-var-suse,\n  \"swift\": $fa-var-swift,\n  \"symfony\": $fa-var-symfony,\n  \"teamspeak\": $fa-var-teamspeak,\n  \"telegram\": $fa-var-telegram,\n  \"telegram-plane\": $fa-var-telegram-plane,\n  \"tencent-weibo\": $fa-var-tencent-weibo,\n  \"the-red-yeti\": $fa-var-the-red-yeti,\n  \"themeco\": $fa-var-themeco,\n  \"themeisle\": $fa-var-themeisle,\n  \"think-peaks\": $fa-var-think-peaks,\n  \"tiktok\": $fa-var-tiktok,\n  \"trade-federation\": $fa-var-trade-federation,\n  \"trello\": $fa-var-trello,\n  \"tumblr\": $fa-var-tumblr,\n  \"tumblr-square\": $fa-var-tumblr-square,\n  \"twitch\": $fa-var-twitch,\n  \"twitter\": $fa-var-twitter,\n  \"twitter-square\": $fa-var-twitter-square,\n  \"typo3\": $fa-var-typo3,\n  \"uber\": $fa-var-uber,\n  \"ubuntu\": $fa-var-ubuntu,\n  \"uikit\": $fa-var-uikit,\n  \"umbraco\": $fa-var-umbraco,\n  \"uncharted\": $fa-var-uncharted,\n  \"uniregistry\": $fa-var-uniregistry,\n  \"unity\": $fa-var-unity,\n  \"unsplash\": $fa-var-unsplash,\n  \"untappd\": $fa-var-untappd,\n  \"ups\": $fa-var-ups,\n  \"usb\": $fa-var-usb,\n  \"usps\": $fa-var-usps,\n  \"ussunnah\": $fa-var-ussunnah,\n  \"vaadin\": $fa-var-vaadin,\n  \"viacoin\": $fa-var-viacoin,\n  \"viadeo\": $fa-var-viadeo,\n  \"viadeo-square\": $fa-var-viadeo-square,\n  \"viber\": $fa-var-viber,\n  \"vimeo\": $fa-var-vimeo,\n  \"vimeo-square\": $fa-var-vimeo-square,\n  \"vimeo-v\": $fa-var-vimeo-v,\n  \"vine\": $fa-var-vine,\n  \"vk\": $fa-var-vk,\n  \"vnv\": $fa-var-vnv,\n  \"vuejs\": $fa-var-vuejs,\n  \"watchman-monitoring\": $fa-var-watchman-monitoring,\n  \"waze\": $fa-var-waze,\n  \"weebly\": $fa-var-weebly,\n  \"weibo\": $fa-var-weibo,\n  \"weixin\": $fa-var-weixin,\n  \"whatsapp\": $fa-var-whatsapp,\n  \"whatsapp-square\": $fa-var-whatsapp-square,\n  \"whmcs\": $fa-var-whmcs,\n  \"wikipedia-w\": $fa-var-wikipedia-w,\n  \"windows\": $fa-var-windows,\n  \"wirsindhandwerk\": $fa-var-wirsindhandwerk,\n  \"wsh\": $fa-var-wsh,\n  \"wix\": $fa-var-wix,\n  \"wizards-of-the-coast\": $fa-var-wizards-of-the-coast,\n  \"wodu\": $fa-var-wodu,\n  \"wolf-pack-battalion\": $fa-var-wolf-pack-battalion,\n  \"wordpress\": $fa-var-wordpress,\n  \"wordpress-simple\": $fa-var-wordpress-simple,\n  \"wpbeginner\": $fa-var-wpbeginner,\n  \"wpexplorer\": $fa-var-wpexplorer,\n  \"wpforms\": $fa-var-wpforms,\n  \"wpressr\": $fa-var-wpressr,\n  \"xbox\": $fa-var-xbox,\n  \"xing\": $fa-var-xing,\n  \"xing-square\": $fa-var-xing-square,\n  \"y-combinator\": $fa-var-y-combinator,\n  \"yahoo\": $fa-var-yahoo,\n  \"yammer\": $fa-var-yammer,\n  \"yandex\": $fa-var-yandex,\n  \"yandex-international\": $fa-var-yandex-international,\n  \"yarn\": $fa-var-yarn,\n  \"yelp\": $fa-var-yelp,\n  \"yoast\": $fa-var-yoast,\n  \"youtube\": $fa-var-youtube,\n  \"youtube-square\": $fa-var-youtube-square,\n  \"zhihu\": $fa-var-zhihu,\n);\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/brands.scss",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n@import 'functions';\n@import 'variables';\n\n:root, :host {\n  --#{ $fa-css-prefix }-font-brands: normal 400 1em/1 \"Font Awesome 6 Brands\";\n}\n\n@font-face {\n  font-family: 'Font Awesome 6 Brands';\n  font-style: normal;\n  font-weight: 400;\n  font-display: $fa-font-display;\n  src: url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),\n    url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype');\n}\n\n.fab,\n.fa-brands {\n  font-family: 'Font Awesome 6 Brands';\n  font-weight: 400;\n}\n\n@each $name, $icon in $fa-brand-icons {\n  .#{$fa-css-prefix}-#{$name}:before { content: fa-content($icon); }\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/fontawesome.scss",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n// Font Awesome core compile (Web Fonts-based)\n// -------------------------\n\n@import 'functions';\n@import 'variables';\n@import 'mixins';\n@import 'core';\n@import 'sizing';\n@import 'fixed-width';\n@import 'list';\n@import 'bordered-pulled';\n@import 'animated';\n@import 'rotated-flipped';\n@import 'stacked';\n@import 'icons';\n@import 'screen-reader';\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/regular.scss",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n@import 'functions';\n@import 'variables';\n\n:root, :host {\n  --#{ $fa-css-prefix }-font-regular: normal 400 1em/1 \"#{ $fa-style-family }\";\n}\n\n@font-face {\n  font-family: 'Font Awesome 6 Free';\n  font-style: normal;\n  font-weight: 400;\n  font-display: $fa-font-display;\n  src: url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),\n    url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype');\n}\n\n.far,\n.fa-regular {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 400;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/solid.scss",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n@import 'functions';\n@import 'variables';\n\n:root, :host {\n  --#{ $fa-css-prefix }-font-solid: normal 900 1em/1 \"#{ $fa-style-family }\";\n}\n\n@font-face {\n  font-family: 'Font Awesome 6 Free';\n  font-style: normal;\n  font-weight: 900;\n  font-display: $fa-font-display;\n  src: url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),\n    url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype');\n}\n\n.fas,\n.fa-solid {\n  font-family: 'Font Awesome 6 Free';\n  font-weight: 900;\n}\n"
  },
  {
    "path": "public/vendor/fontawesome/6.0.0/scss/v4-shims.scss",
    "content": "/*!\n * Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n// V4 shims compile (Web Fonts-based)\n// -------------------------\n\n@import 'functions';\n@import 'variables';\n@import 'shims';\n"
  },
  {
    "path": "public/vendor/laravel-translation-manager/css/index.css",
    "content": "/*!\n * Bootstrap v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#337ab7;--secondary:#6c757d;--success:#449d44;--info:#5bc0de;--warning:#ec971f;--danger:#c12e2a;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:\"Raleway\",sans-serif;--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Raleway,sans-serif;font-size:.9rem;font-weight:400;line-height:1.6;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#337ab7;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#22527b;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.25rem}.h2,h2{font-size:1.8rem}.h3,h3{font-size:1.575rem}.h4,h4{font-size:1.35rem}.h5,h5{font-size:1.125rem}.h6,h6{font-size:.9rem}.lead{font-size:1.125rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:.5rem;margin-bottom:.5rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.125rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:\"\\2014   \\A0\"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{padding-right:15px;padding-left:15px}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-2{-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-8{-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#c6daeb}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b3cee4}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#cbe4cb}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#badbba}.table-info,.table-info>td,.table-info>th{background-color:#d1edf6}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#bce5f2}.table-warning,.table-warning>td,.table-warning>th{background-color:#fae2c0}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f8d7a8}.table-danger,.table-danger>td,.table-danger>th{background-color:#eec4c3}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#e8b0af}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:.9rem;line-height:1.6;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#8bb8df;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(51,122,183,.25);box-shadow:0 0 0 .2rem rgba(51,122,183,.25)}.form-control::-webkit-input-placeholder{opacity:1}.form-control:-ms-input-placeholder,.form-control::-ms-input-placeholder{opacity:1}.form-control::placeholder{opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.19rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.6}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.125rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.7875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.6;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.7875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.68125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.6875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.25rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#449d44}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(68,157,68,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#449d44}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#449d44;-webkit-box-shadow:0 0 0 .2rem rgba(68,157,68,.25);box-shadow:0 0 0 .2rem rgba(68,157,68,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#449d44}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#449d44}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{background-color:#91cf91}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#5cb85c}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(68,157,68,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(68,157,68,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#449d44}.custom-file-input.is-valid~.custom-file-label:before,.was-validated .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{-webkit-box-shadow:0 0 0 .2rem rgba(68,157,68,.25);box-shadow:0 0 0 .2rem rgba(68,157,68,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#c12e2a}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(193,46,42,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#c12e2a}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#c12e2a;-webkit-box-shadow:0 0 0 .2rem rgba(193,46,42,.25);box-shadow:0 0 0 .2rem rgba(193,46,42,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#c12e2a}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#c12e2a}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{background-color:#e58886}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#d74b47}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(193,46,42,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(193,46,42,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#c12e2a}.custom-file-input.is-invalid~.custom-file-label:before,.was-validated .custom-file-input:invalid~.custom-file-label:before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{-webkit-box-shadow:0 0 0 .2rem rgba(193,46,42,.25);box-shadow:0 0 0 .2rem rgba(193,46,42,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:.9rem;line-height:1.6;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(51,122,183,.25);box-shadow:0 0 0 .2rem rgba(51,122,183,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#337ab7;border-color:#337ab7}.btn-primary:hover{color:#fff;background-color:#2b6699;border-color:#285f8f}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(51,122,183,.5);box-shadow:0 0 0 .2rem rgba(51,122,183,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#337ab7;border-color:#337ab7}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#285f8f;border-color:#255985}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(51,122,183,.5);box-shadow:0 0 0 .2rem rgba(51,122,183,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5);box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5);box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-success{color:#fff;background-color:#449d44;border-color:#449d44}.btn-success:hover{color:#fff;background-color:#388238;border-color:#357935}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(68,157,68,.5);box-shadow:0 0 0 .2rem rgba(68,157,68,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#449d44;border-color:#449d44}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#357935;border-color:#317131}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(68,157,68,.5);box-shadow:0 0 0 .2rem rgba(68,157,68,.5)}.btn-info{color:#212529;background-color:#5bc0de;border-color:#5bc0de}.btn-info:hover{color:#fff;background-color:#3bb4d8;border-color:#31b0d5}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(91,192,222,.5);box-shadow:0 0 0 .2rem rgba(91,192,222,.5)}.btn-info.disabled,.btn-info:disabled{color:#212529;background-color:#5bc0de;border-color:#5bc0de}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#2aaacf}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(91,192,222,.5);box-shadow:0 0 0 .2rem rgba(91,192,222,.5)}.btn-warning{color:#212529;background-color:#ec971f;border-color:#ec971f}.btn-warning:hover{color:#fff;background-color:#d38312;border-color:#c77c11}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(236,151,31,.5);box-shadow:0 0 0 .2rem rgba(236,151,31,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ec971f;border-color:#ec971f}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#c77c11;border-color:#bb7410}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(236,151,31,.5);box-shadow:0 0 0 .2rem rgba(236,151,31,.5)}.btn-danger{color:#fff;background-color:#c12e2a;border-color:#c12e2a}.btn-danger:hover{color:#fff;background-color:#a22723;border-color:#972421}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(193,46,42,.5);box-shadow:0 0 0 .2rem rgba(193,46,42,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#c12e2a;border-color:#c12e2a}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#972421;border-color:#8d221f}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(193,46,42,.5);box-shadow:0 0 0 .2rem rgba(193,46,42,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#337ab7;background-color:transparent;background-image:none;border-color:#337ab7}.btn-outline-primary:hover{color:#fff;background-color:#337ab7;border-color:#337ab7}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(51,122,183,.5);box-shadow:0 0 0 .2rem rgba(51,122,183,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#337ab7;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#337ab7;border-color:#337ab7}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(51,122,183,.5);box-shadow:0 0 0 .2rem rgba(51,122,183,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5);box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5);box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-success{color:#449d44;background-color:transparent;background-image:none;border-color:#449d44}.btn-outline-success:hover{color:#fff;background-color:#449d44;border-color:#449d44}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(68,157,68,.5);box-shadow:0 0 0 .2rem rgba(68,157,68,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#449d44;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#449d44}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(68,157,68,.5);box-shadow:0 0 0 .2rem rgba(68,157,68,.5)}.btn-outline-info{color:#5bc0de;background-color:transparent;background-image:none;border-color:#5bc0de}.btn-outline-info:hover{color:#212529;background-color:#5bc0de;border-color:#5bc0de}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(91,192,222,.5);box-shadow:0 0 0 .2rem rgba(91,192,222,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#212529;background-color:#5bc0de;border-color:#5bc0de}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(91,192,222,.5);box-shadow:0 0 0 .2rem rgba(91,192,222,.5)}.btn-outline-warning{color:#ec971f;background-color:transparent;background-image:none;border-color:#ec971f}.btn-outline-warning:hover{color:#212529;background-color:#ec971f;border-color:#ec971f}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(236,151,31,.5);box-shadow:0 0 0 .2rem rgba(236,151,31,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ec971f;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ec971f;border-color:#ec971f}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(236,151,31,.5);box-shadow:0 0 0 .2rem rgba(236,151,31,.5)}.btn-outline-danger{color:#c12e2a;background-color:transparent;background-image:none;border-color:#c12e2a}.btn-outline-danger:hover{color:#fff;background-color:#c12e2a;border-color:#c12e2a}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(193,46,42,.5);box-shadow:0 0 0 .2rem rgba(193,46,42,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#c12e2a;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#c12e2a;border-color:#c12e2a}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(193,46,42,.5);box-shadow:0 0 0 .2rem rgba(193,46,42,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#337ab7;background-color:transparent}.btn-link:hover{color:#22527b;background-color:transparent}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline;border-color:transparent}.btn-link.focus,.btn-link:focus{-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.7875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .15s ease;transition:height .15s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.9rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";display:none}.dropleft .dropdown-toggle:before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#337ab7}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.7875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group,.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label:after{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.9rem;font-weight:400;line-height:1.6;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.6rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;background-color:#337ab7}.custom-control-input:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(51,122,183,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(51,122,183,.25)}.custom-control-input:active~.custom-control-label:before{color:#fff;background-color:#b3d0ea}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label:before{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.3rem;left:0;display:block;width:1rem;height:1rem;content:\"\"}.custom-control-label:after{background-repeat:no-repeat;background-position:50%;background-size:50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:before{background-color:#337ab7}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#337ab7}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(51,122,183,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(51,122,183,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:before{background-color:#337ab7}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(51,122,183,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.19rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.6;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#8bb8df;outline:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(139,184,223,.5);box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(139,184,223,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.68125rem + 2px);font-size:75%}.custom-select-lg,.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem}.custom-select-lg{height:calc(2.6875rem + 2px);font-size:125%}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(2.19rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#8bb8df;-webkit-box-shadow:0 0 0 .2rem rgba(51,122,183,.25);box-shadow:0 0 0 .2rem rgba(51,122,183,.25)}.custom-file-input:focus~.custom-file-label:after{border-color:#8bb8df}.custom-file-input:lang(en)~.custom-file-label:after{content:\"Browse\"}.custom-file-label{left:0;z-index:1;height:calc(2.19rem + 2px);background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.6;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc((2.19rem + 2px) - 1px * 2);content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#337ab7;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.custom-range::-webkit-slider-thumb:focus{outline:none;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(51,122,183,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(51,122,183,.25)}.custom-range::-webkit-slider-thumb:active{background-color:#b3d0ea}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#337ab7;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.custom-range::-moz-range-thumb:focus{outline:none;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(51,122,183,.25)}.custom-range::-moz-range-thumb:active{background-color:#b3d0ea}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;background-color:#337ab7;border:0;border-radius:1rem;appearance:none}.custom-range::-ms-thumb:focus{outline:none;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(51,122,183,.25)}.custom-range::-ms-thumb:active{background-color:#b3d0ea}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#337ab7}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.32rem;padding-bottom:.32rem;margin-right:1rem;font-size:1.125rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.125rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.card-title{margin-bottom:.3rem}.card-subtitle{margin-top:-.15rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.3rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.3rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.3rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck,.card-deck .card{-webkit-box-direction:normal}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.3rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#337ab7;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#22527b;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(51,122,183,.25);box-shadow:0 0 0 .2rem rgba(51,122,183,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#337ab7;border-color:#337ab7}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.125rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.7875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#337ab7}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#285f8f}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#449d44}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#357935}.badge-info{color:#212529;background-color:#5bc0de}.badge-info[href]:focus,.badge-info[href]:hover{color:#212529;text-decoration:none;background-color:#31b0d5}.badge-warning{color:#212529;background-color:#ec971f}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#c77c11}.badge-danger{color:#fff;background-color:#c12e2a}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#972421}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.85rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#1b3f5f;background-color:#d6e4f1;border-color:#c6daeb}.alert-primary hr{border-top-color:#b3cee4}.alert-primary .alert-link{color:#102537}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#235223;background-color:#daebda;border-color:#cbe4cb}.alert-success hr{border-top-color:#badbba}.alert-success .alert-link{color:#142e14}.alert-info{color:#2f6473;background-color:#def2f8;border-color:#d1edf6}.alert-info hr{border-top-color:#bce5f2}.alert-info .alert-link{color:#20454f}.alert-warning{color:#7b4f10;background-color:#fbead2;border-color:#fae2c0}.alert-warning hr{border-top-color:#f8d7a8}.alert-warning .alert-link{color:#4e320a}.alert-danger{color:#641816;background-color:#f3d5d4;border-color:#eec4c3}.alert-danger hr{border-top-color:#e8b0af}.alert-danger .alert-link{color:#3a0e0d}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;overflow:hidden;font-size:.675rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#337ab7;-webkit-transition:width .6s ease;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#1b3f5f;background-color:#c6daeb}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#1b3f5f;background-color:#b3cee4}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#1b3f5f;border-color:#1b3f5f}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#235223;background-color:#cbe4cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#235223;background-color:#badbba}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#235223;border-color:#235223}.list-group-item-info{color:#2f6473;background-color:#d1edf6}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#2f6473;background-color:#bce5f2}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2f6473;border-color:#2f6473}.list-group-item-warning{color:#7b4f10;background-color:#fae2c0}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#7b4f10;background-color:#f8d7a8}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7b4f10;border-color:#7b4f10}.list-group-item-danger{color:#641816;background-color:#eec4c3}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#641816;background-color:#e8b0af}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#641816;border-color:#641816}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.35rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-25%);transform:translateY(-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0);transform:translate(0)}.modal-dialog-centered{-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-content,.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex}.modal-content{position:relative;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.6}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Raleway,sans-serif;font-style:normal;font-weight:400;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.7875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Raleway,sans-serif;font-style:normal;font-weight:400;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.7875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:after,.bs-popover-top .arrow:before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-top .arrow:after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:after,.bs-popover-right .arrow:before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-right .arrow:after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:after,.bs-popover-bottom .arrow:before{border-width:0 .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-bottom .arrow:after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:after,.bs-popover-left .arrow:before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-left .arrow:after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.9rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;-webkit-transition:-webkit-transform .6s ease;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}@media screen and (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateZ(0);transform:translateZ(0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:opacity;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateZ(0);transform:translateZ(0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat 50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:hsla(0,0%,100%,.5)}.carousel-indicators li:before{top:-10px}.carousel-indicators li:after,.carousel-indicators li:before{position:absolute;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li:after{bottom:-10px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#337ab7!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#285f8f!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#449d44!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#357935!important}.bg-info{background-color:#5bc0de!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#31b0d5!important}.bg-warning{background-color:#ec971f!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#c77c11!important}.bg-danger{background-color:#c12e2a!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#972421!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#337ab7!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#449d44!important}.border-info{border-color:#5bc0de!important}.border-warning{border-color:#ec971f!important}.border-danger{border-color:#c12e2a!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714286%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#337ab7!important}a.text-primary:focus,a.text-primary:hover{color:#285f8f!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#449d44!important}a.text-success:focus,a.text-success:hover{color:#357935!important}.text-info{color:#5bc0de!important}a.text-info:focus,a.text-info:hover{color:#31b0d5!important}.text-warning{color:#ec971f!important}a.text-warning:focus,a.text-warning:hover{color:#c77c11!important}.text-danger{color:#c12e2a!important}a.text-danger:focus,a.text-danger:hover{color:#972421!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}}.container-fluid{width:100%;padding-right:0;padding-left:0;margin-right:auto;margin-left:auto}#root{height:100%;min-height:100%}.card{margin-top:.5em;margin-bottom:.5em}.content{margin:20px 20px 20px 100px}input[type=checkbox]{margin-left:8px;margin-right:4px}.sidebararound{position:fixed;height:100%;z-index:2000;top:0}.sidebar{width:80px;height:100%;background-color:#337ab7;overflow:hidden;color:#fff}.fa-2x{font-size:1.7em}.sidebar ul{font-size:.9em;list-style-type:none;padding:0;text-align:center}.sidebar ul:not(.SubMenu){margin:0}.sidebar ul>li{border-left:2px solid #337ab7;color:#fff}.sidebar ul>li a{display:inline-block;color:#fff;width:100%}.sidebar ul>li:hover a{color:#fff;text-decoration:none;background-color:#723dcc}.sidebar ul>li.SubMenu:hover ul>li{color:#fff;text-decoration:none;background-color:#337ab7}.sidebar ul>li .activeSidebar{color:#c12e2a;text-decoration:none;width:100%;background-color:#337ab7}.sidebar ul>li a:active,.sidebar ul>li a:link{text-decoration:none}.bottomSideBar{position:absolute;bottom:0;margin-bottom:0;width:80px}.sidebar ul:not(.SubMenu)>li{border-bottom:1px solid #fff;padding:1rem 0}.sidebar .bottomSideBar ul:not(.SubMenu)>li{border-top:1px solid #fff;border-bottom:none}.sidebar ul>li:hover{color:#fff;border-left:2px solid #c12e2a;background-color:#723dcc;cursor:pointer}.sidebar ul>li:hover>ul.SubMenu{left:80px}.sidebar ul>li:hover>ul.SubMenu,.sidebar ul>li ul.SubMenu{white-space:nowrap;overflow:hidden;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;font-size:1.1em;-webkit-transition-property:all;transition-property:all;-webkit-transition:.2s ease-out;transition:.2s ease-out}.sidebar ul>li ul.SubMenu{position:absolute;border:1px solid #337ab7;left:-400px;margin-top:-50px;z-index:-1}.sidebar ul>li ul.SubMenu,.sidebar ul>li ul.SubMenu>li:hover a.separator{background-color:#fff;color:#337ab7}.sidebar ul>li ul.SubMenu>li:hover a{display:inline-block;color:#fff;background-color:#337ab7}.sidebar ul>li ul.SubMenu>li:hover a.disabled{display:inline-block;color:#6c757d;background-color:#fff;cursor:default}.sidebar ul>li ul.SubMenu>li:first-child a{padding-top:.2rem}.sidebar ul>li ul.SubMenu>li:last-child a{padding-bottom:.2rem}.sidebar ul>li ul.SubMenu>li{display:table;line-height:1.5em;text-align:left;margin-left:0;width:100%;color:#337ab7;background-color:#fff;border-left:1px solid #337ab7}.sidebar ul>li ul.SubMenu>li a{background-color:#fff;display:inline-block;color:#337ab7;line-height:1.5em;min-width:100%;padding:0 1.2rem}.sidebar ul>li ul.SubMenu>li a.disabled{color:#6c757d}.sidebar ul>li ul.SubMenu>li a.menu-checked:before{display:inline-block;width:.8rem;margin-right:.2rem;content:\" \"}.sidebar ul>li ul.SubMenu>li a.menu-checked.item-checked:before{content:\"\\2714\\FE0E\"}.sidebar ul>li ul.SubMenu>li a.menu-checked{padding-left:.2rem}.sidebar ul>li ul.SubMenu>li a.menu-action-item{font-weight:700}.sidebar ul>li ul.SubMenu>li a.menu-action-item:after{display:inline;content:\" ...\"}.sidebar ul>li ul.SubMenu>li a.separator{display:block;overflow:hidden;height:.375em;cursor:default;border-top:1px solid #337ab7;margin-top:.2625em;line-height:.1125em}.sidebar ul>li ul.SubMenu>li a.separator:hover{background-color:#fff}.sidebar ul>li ul.SubMenu>li a:hover{color:#fff;text-decoration:none;background-color:#337ab7}.table.translation-stats>tbody>tr>td,.table.translation-stats>thead>tr>th{margin:0!important;padding:2px 6px}.table.translation-stats>tbody>tr>td.group{text-align:left;font-weight:700;padding-left:8px}.table.translation-stats>tbody>tr>td.deleted,.table.translation-stats>tbody>tr>td.group.deleted>a,.table.translation-stats>thead>tr>th.deleted{color:#c200c1;font-weight:700}.table.translation-stats>tbody>tr>td.group.missing>a,.table.translation-stats>thead>tr>th.missing{color:#d00030}.table.translation-stats>tbody>tr>td.group.changed>a,.table.translation-stats>thead>tr>th.changed{color:#00a030}.table.translation-stats>tbody>tr>td.group.cached>a,.table.translation-stats>thead>tr>th.cached{color:#3399f3}.card-body .table{margin-bottom:0}.text-white{color:#fff;text-shadow:none}.heading-button{cursor:pointer;line-height:1.1;opacity:.8}.heading-button,.input-group-heading{float:right;margin-right:-.3em;font-weight:700;background:transparent;border:none;color:#fff;text-shadow:none}.input-group-heading{display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;line-height:unset}.btn-heading{cursor:pointer;opacity:.8;background:transparent;border:none;color:#fff;text-shadow:none}.btn-heading.loading,.btn-heading.stale-data{color:#ff87fb;opacity:1%}.btn-heading.loading>.fa{-webkit-transform:rotate(10turn);transform:rotate(10turn);-webkit-transition:transform .15s linear;-webkit-transition:-webkit-transform 10s linear;transition:-webkit-transform 10s linear;transition:transform 10s linear;transition:transform 10s linear,-webkit-transform 10s linear}.btn-collapse:after{content:\"\\25BC\";display:inline-block;position:relative;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.btn-collapse.shown:after,.btn-collapse:after{-webkit-transition:all .2s ease;transition:all .2s ease}.btn-collapse.shown:after{-webkit-transform:rotate(0deg);transform:rotate(0deg)}del{color:#c80010}ins{color:#108030}.align-right{text-align:right}.popover.fade{opacity:1;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.popover-content .checkbox label{display:inline-block;margin-bottom:.1rem}.popover-content label{margin-bottom:.1rem}.popover-content .editable-checklist label{-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;margin:0}.popover-content .editable-checklist label input[type=checkbox]{margin-right:4px}.popover-content .editableform .btn,.popover-content .editableform .fa{color:#fff}.popover.right>.arrow{left:-16px!important}#show-matching-clear{border:1px solid #ced4da}.has-highlight #show-matching-clear{background-color:#d9edf7;border:1px solid #337ab7}.has-error #show-matching-clear{background-color:#f2dede}.form-control::-webkit-input-placeholder{color:#adb5bd}.form-control:-ms-input-placeholder,.form-control::-ms-input-placeholder{color:#adb5bd}.form-control::placeholder{color:#adb5bd}.btn.busy{color:#fff;background-color:#6610f2;border-color:#c12e2a}.stale-data{opacity:.75}.modal-lg{max-width:80%;min-width:800px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.show-loading{background:url(/vendor/laravel-translation-manager/images/loading.gif?9ed4669f524bec38319be63a2ee4ba26) 50% no-repeat;height:25px;width:auto;min-width:25px}.float-center-container{float:left;position:relative;left:50%}.float-center-fixer{float:left;position:relative;left:-50%}.text-safe{color:#fff!important;border-color:#ced4da!important}.text-attention{color:#5bc0de!important;border-color:#5bc0de!important}.text-caution{color:#ffe804!important;border-color:#ffe804!important}"
  },
  {
    "path": "public/vendor/laravel-translation-manager/css/translations.css",
    "content": ".transpopup {\n    overflow: auto;\n    max-width: 95%;\n    max-height: 95%;\n    display: flex;\n    padding-right: 20px;\n    flex-direction: column;\n    background-color: #f7f7f7;\n    border: 1px solid #c2e1f5 !important;\n}\n\n.editable-click,\na.editable-click,\na.editable-click:hover {\n    text-decoration: none;\n    border-bottom: dashed 1px #0088cc;\n}\n\n.translation-manager .editable-click,\n.translation-manager a.editable-click,\n.translation-manager a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n}\n\nh1 .editable-click, h1 a.editable-click, h1 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #0088cc;\n}\n\nh2 .editable-click, h2 a.editable-click, h2 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #0088cc;\n}\n\nh3 .editable-click, h3 a.editable-click, h3 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #0088cc;\n}\n\nh4 .editable-click, h4 a.editable-click, h4 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #0088cc;\n}\n\nh5 .editable-click, h5 a.editable-click, h5 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #0088cc;\n}\n\nh6 .editable-click, h6 a.editable-click, h6 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #0088cc;\n}\n\n.translation-manager h1 .editable-click, h1 a.editable-click, h1 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #FF00cc !important;\n}\n\n.translation-manager h2 .editable-click, h2 a.editable-click, h2 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #FF00cc !important;\n}\n\n.translation-manager h3 .editable-click, h3 a.editable-click, h3 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #FF00cc !important;\n}\n\n.translation-manager h4 .editable-click, h4 a.editable-click, h4 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #FF00cc !important;\n}\n\n.translation-manager h5 .editable-click, h5 a.editable-click, h5 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #FF00cc !important;\n}\n\n.translation-manager h6 .editable-click, h6 a.editable-click, h6 a.editable-click:hover {\n    text-decoration: none;\n    border-bottom: none;\n    border-bottom: dashed 1px #FF00cc !important;\n}\n\n.table.translation-stats > thead > tr > th,\n.table.translation-stats > tbody > tr > td {\n    margin: 0 0 0 !important;\n    padding: 2px 6px 2px 6px;\n}\n\n.table.translation-stats > tbody > tr > td.group {\n    text-align: left;\n    font-weight: bold;\n    padding-left: 8px;\n}\n\n.table-translations td.unused-key {\n    color: #999999;\n}\n\n.table.translation-stats > thead > tr > th.deleted,\n.table.translation-stats > tbody > tr > td.deleted,\n.table.translation-stats > tbody > tr > td.group.deleted > a {\n    color: #c200c1;\n    font-weight: bold;\n}\n\n.table.translation-stats > thead > tr > th.missing,\n.table.translation-stats > tbody > tr > td.group.missing > a {\n    color: #d00030;\n}\n\n.table.translation-stats > thead > tr > th.changed,\n.table.translation-stats > tbody > tr > td.group.changed > a {\n    color: #00A030;\n}\n\n.table.translation-stats > thead > tr > th.cached,\n.table.translation-stats > tbody > tr > td.group.cached > a {\n    color: #3399f3;\n}\n\ntextarea.editable-input {\n    width: 600px !important;\n    display: block !important;\n    white-space: pre-wrap;\n}\n\n.editable-container.editable-inline {\n    display: block !important;\n    width: 400px !important;\n}\n\n.editable-container .editable-error-block {\n    display: block !important;\n    max-width: 600px !important;\n}\n\n.editable-buttons .editable-translate {\n    margin-left: 1px;\n}\n\n.table-translations thead tr {\n    background-color: #f0f0f0;\n}\n\n.table-striped > tbody > tr:nth-of-type(even) {\n    background-color: #f9f9f9;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n    background-color: #ffffff;\n}\n\n.table-translations tr.editing {\n    background-color: rgba(255, 255, 100, .3);\n}\n\n.table-striped > tbody > tr.editing:nth-of-type(even) {\n    background-color: #f7f9da;\n}\n\n.table-striped > tbody > tr.editing:nth-of-type(odd) {\n    background-color: #fffdd9;\n}\n\n/*.table-translations tr.deleted-translation {*/\n/*text-decoration: line-through;*/\n/*}*/\n\n.table-translations > tbody > tr.deleted-translation:not(.editing):nth-of-type(even) {\n    background-color: #edd3ed;\n}\n\n.table-translations > tbody > tr.deleted-translation:not(.editing):nth-of-type(odd) {\n    background-color: #ffe0ff;\n}\n\n.table-translations > tbody > tr:not(.deleted-translation):not(.editing):nth-of-type(even) > td.has-unpublished-translation {\n    background-color: #ebf7e4;\n}\n\n.table-translations > tbody > tr:not(.deleted-translation):not(.editing):nth-of-type(odd) > td.has-unpublished-translation {\n    background-color: #f3ffed;\n}\n\n.table-translations > tbody > tr:not(.deleted-translation):not(.editing):nth-of-type(even) > td.has-cached-translation {\n    background-color: #e9f7f7;\n}\n\n.table-translations > tbody > tr:not(.deleted-translation):not(.editing):nth-of-type(odd) > td.has-cached-translation {\n    background-color: #f2feff;\n}\n\na.status-1 {\n    font-weight: bold;\n}\n\ndel {\n    color: #C80010;\n}\n\nins {\n    color: #108030;\n}\n\n#accordion.panel-group .panel > .panel-heading a:not(.collapsed):not(.btn):before {\n    content: \"▼ \";\n    display: inline;\n}\n\n#accordion.panel-group .panel > .panel-heading a.collapsed:not(.in):before {\n    content: \"▶ \";\n    display: inline;\n}\n\n.panel-heading > h1,\n.panel-heading > h2,\n.panel-heading > h3,\n.panel-heading > h4,\n.panel-heading > h5,\n.panel-heading > h6 {\n    margin-bottom: 0;\n}\n\n.key-filter {\n    float: right;\n    font-weight: normal;\n}\n\n.key-filter.have-filtered {\n    font-weight: bold;\n    color: #be0031;\n}\n\n.panel .table:last-child {\n    margin-bottom: 0;\n}\n\ninput.bg-success {\n    background-color: #dff0d8;\n}\n\ninput.bg-info {\n    background-color: #d9edf7;\n}\n\ninput.bg-warning {\n    background-color: #fcf8e3;\n}\n\ninput.bg-danger {\n    background-color: #f2dede;\n}\n\n.regex-error {\n    color: #c70155;\n}\n\n#accordion.panel-group {\n    margin-bottom: 2px;\n}\n\nlabel.regex-error {\n    color: #c70155;\n    margin-top: -30px;\n    /*height: 30px;*/\n}\n\ninput.bg-highlight {\n    background-color: #d9edf7;\n}\n\n.has-highlight .help-block,\n.has-highlight .control-label,\n.has-highlight .radio,\n.has-highlight .checkbox,\n.has-highlight .radio-inline,\n.has-highlight .checkbox-inline,\n.has-highlight.radio label,\n.has-highlight.checkbox label,\n.has-highlight.radio-inline label,\n.has-highlight.checkbox-inline label {\n    color: #337ab7;\n}\n\n.has-highlight .form-control {\n    border-color: #337ab7;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n\n.has-highlight .form-control:focus {\n    border-color: #286090;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #337ab7;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #337ab7;\n}\n\n.has-highlight .input-group-addon {\n    color: #337ab7;\n    background-color: #d9edf7;\n    border-color: #337ab7;\n}\n\n.has-highlight .form-control-feedback {\n    color: #337ab7;\n}\n\n.translation-filter.has-feedback label,\n.translation-filter.has-highlight label,\n.translation-filter.has-error label,\n.translation-filter.has-success label,\n.translation-filter.has-warning label {\n    font-weight: bold;\n}\n"
  },
  {
    "path": "public/vendor/laravel-translation-manager/js/index.js",
    "content": "!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"/\",n(n.s=105)}([function(e,t,n){\"use strict\";e.exports=n(20)},function(e,t,n){\"use strict\";var r=function(e){};e.exports=function(e,t,n,o,a,i,s,u){if(r(t),!e){var l;if(void 0===t)l=new Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var c=[n,o,a,i,s,u],d=0;(l=new Error(t.replace(/%s/g,function(){return c[d++]}))).name=\"Invariant Violation\"}throw l.framesToPop=1,l}}},function(e,t,n){e.exports=n(230)()},function(e,t,n){\"use strict\";var r=n(11);e.exports=r},function(e,t,n){\"use strict\";e.exports=function(e){for(var t=arguments.length-1,n=\"Minified React error #\"+e+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant=\"+e,r=0;r<t;r++)n+=\"&args[]=\"+encodeURIComponent(arguments[r+1]);n+=\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\";var o=new Error(n);throw o.name=\"Invariant Violation\",o.framesToPop=1,o}},function(e,t,n){\"use strict\";var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(e){r[e]=e}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,i,s=function(e){if(null===e||void 0===e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),u=1;u<arguments.length;u++){for(var l in n=Object(arguments[u]))o.call(n,l)&&(s[l]=n[l]);if(r){i=r(n);for(var c=0;c<i.length;c++)a.call(n,i[c])&&(s[i[c]]=n[i[c]])}}return s}},function(e,t,n){\"use strict\";var r=n(4),o=n(22),a=n(75),i=(n(1),o.ID_ATTRIBUTE_NAME),s=a,u=\"__reactInternalInstance$\"+Math.random().toString(36).slice(2);function l(e,t){return 1===e.nodeType&&e.getAttribute(i)===String(t)||8===e.nodeType&&e.nodeValue===\" react-text: \"+t+\" \"||8===e.nodeType&&e.nodeValue===\" react-empty: \"+t+\" \"}function c(e){for(var t;t=e._renderedComponent;)e=t;return e}function d(e,t){var n=c(e);n._hostNode=t,t[u]=n}function f(e,t){if(!(e._flags&s.hasCachedChildNodes)){var n=e._renderedChildren,o=t.firstChild;e:for(var a in n)if(n.hasOwnProperty(a)){var i=n[a],u=c(i)._domID;if(0!==u){for(;null!==o;o=o.nextSibling)if(l(o,u)){d(i,o);continue e}r(\"32\",u)}}e._flags|=s.hasCachedChildNodes}}function p(e){if(e[u])return e[u];for(var t,n,r=[];!e[u];){if(r.push(e),!e.parentNode)return null;e=e.parentNode}for(;e&&(n=e[u]);e=r.pop())t=n,r.length&&f(n,e);return t}var h={getClosestInstanceFromNode:p,getInstanceFromNode:function(e){var t=p(e);return null!=t&&t._hostNode===e?t:null},getNodeFromInstance:function(e){if(void 0===e._hostNode&&r(\"33\"),e._hostNode)return e._hostNode;for(var t=[];!e._hostNode;)t.push(e),e._hostParent||r(\"34\"),e=e._hostParent;for(;t.length;e=t.pop())f(e,e._hostNode);return e._hostNode},precacheChildNodes:f,precacheNode:d,uncacheNode:function(e){var t=e._hostNode;t&&(delete t[u],e._hostNode=null)}};e.exports=h},function(e,t,n){\"use strict\";var r=function(){};e.exports=r},function(e,t,n){var r;!function(t,n){\"use strict\";\"object\"==typeof e&&\"object\"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(t)}(\"undefined\"!=typeof window?window:this,function(n,o){\"use strict\";var a=[],i=n.document,s=Object.getPrototypeOf,u=a.slice,l=a.concat,c=a.push,d=a.indexOf,f={},p=f.toString,h=f.hasOwnProperty,m=h.toString,g=m.call(Object),v={},b=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType},y=function(e){return null!=e&&e===e.window},w={type:!0,src:!0,noModule:!0};function x(e,t,n){var r,o=(t=t||i).createElement(\"script\");if(o.text=e,n)for(r in w)n[r]&&(o[r]=n[r]);t.head.appendChild(o).parentNode.removeChild(o)}function _(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?f[p.call(e)]||\"object\":typeof e}var E=function(e,t){return new E.fn.init(e,t)},k=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function S(e){var t=!!e&&\"length\"in e&&e.length,n=_(e);return!b(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}E.fn=E.prototype={jquery:\"3.3.1\",constructor:E,length:0,toArray:function(){return u.call(this)},get:function(e){return null==e?u.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(e){return this.pushStack(E.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:c,sort:a.sort,splice:a.splice},E.extend=E.fn.extend=function(){var e,t,n,r,o,a,i=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof i&&(l=i,i=arguments[s]||{},s++),\"object\"==typeof i||b(i)||(i={}),s===u&&(i=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=i[t],i!==(r=e[t])&&(l&&r&&(E.isPlainObject(r)||(o=Array.isArray(r)))?(o?(o=!1,a=n&&Array.isArray(n)?n:[]):a=n&&E.isPlainObject(n)?n:{},i[t]=E.extend(l,a,r)):void 0!==r&&(i[t]=r));return i},E.extend({expando:\"jQuery\"+(\"3.3.1\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==p.call(e))&&(!(t=s(e))||\"function\"==typeof(n=h.call(t,\"constructor\")&&t.constructor)&&m.call(n)===g)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){x(e)},each:function(e,t){var n,r=0;if(S(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(k,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(S(Object(e))?E.merge(n,\"string\"==typeof e?[e]:e):c.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:d.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r=[],o=0,a=e.length,i=!n;o<a;o++)!t(e[o],o)!==i&&r.push(e[o]);return r},map:function(e,t,n){var r,o,a=0,i=[];if(S(e))for(r=e.length;a<r;a++)null!=(o=t(e[a],a,n))&&i.push(o);else for(a in e)null!=(o=t(e[a],a,n))&&i.push(o);return l.apply([],i)},guid:1,support:v}),\"function\"==typeof Symbol&&(E.fn[Symbol.iterator]=a[Symbol.iterator]),E.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){f[\"[object \"+t+\"]\"]=t.toLowerCase()});var C=function(e){var t,n,r,o,a,i,s,u,l,c,d,f,p,h,m,g,v,b,y,w=\"sizzle\"+1*new Date,x=e.document,_=0,E=0,k=ie(),S=ie(),C=ie(),O=function(e,t){return e===t&&(d=!0),0},T={}.hasOwnProperty,P=[],I=P.pop,D=P.push,N=P.push,A=P.slice,j=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},L=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",R=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",M=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",U=\"\\\\[\"+R+\"*(\"+M+\")(?:\"+R+\"*([*^$|!~]?=)\"+R+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+M+\"))|)\"+R+\"*\\\\]\",B=\":(\"+M+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+U+\")*)|.*)\\\\)|)\",H=new RegExp(R+\"+\",\"g\"),$=new RegExp(\"^\"+R+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+R+\"+$\",\"g\"),F=new RegExp(\"^\"+R+\"*,\"+R+\"*\"),V=new RegExp(\"^\"+R+\"*([>+~]|\"+R+\")\"+R+\"*\"),W=new RegExp(\"=\"+R+\"*([^\\\\]'\\\"]*?)\"+R+\"*\\\\]\",\"g\"),K=new RegExp(B),q=new RegExp(\"^\"+M+\"$\"),z={ID:new RegExp(\"^#(\"+M+\")\"),CLASS:new RegExp(\"^\\\\.(\"+M+\")\"),TAG:new RegExp(\"^(\"+M+\"|[*])\"),ATTR:new RegExp(\"^\"+U),PSEUDO:new RegExp(\"^\"+B),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+R+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+R+\"*(?:([+-]|)\"+R+\"*(\\\\d+)|))\"+R+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+L+\")$\",\"i\"),needsContext:new RegExp(\"^\"+R+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+R+\"*((?:-\\\\d)?\\\\d*)\"+R+\"*\\\\)|)(?=[^-]|$)\",\"i\")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,X=/^[^{]+\\{\\s*\\[native \\w/,Q=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,J=/[+~]/,Z=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+R+\"?|(\"+R+\")|.)\",\"ig\"),ee=function(e,t,n){var r=\"0x\"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ne=function(e,t){return t?\"\\0\"===e?\"�\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},re=function(){f()},oe=be(function(e){return!0===e.disabled&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{N.apply(P=A.call(x.childNodes),x.childNodes),P[x.childNodes.length].nodeType}catch(e){N={apply:P.length?function(e,t){D.apply(e,A.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function ae(e,t,r,o){var a,s,l,c,d,h,v,b=t&&t.ownerDocument,_=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==_&&9!==_&&11!==_)return r;if(!o&&((t?t.ownerDocument||t:x)!==p&&f(t),t=t||p,m)){if(11!==_&&(d=Q.exec(e)))if(a=d[1]){if(9===_){if(!(l=t.getElementById(a)))return r;if(l.id===a)return r.push(l),r}else if(b&&(l=b.getElementById(a))&&y(t,l)&&l.id===a)return r.push(l),r}else{if(d[2])return N.apply(r,t.getElementsByTagName(e)),r;if((a=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return N.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&!C[e+\" \"]&&(!g||!g.test(e))){if(1!==_)b=t,v=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((c=t.getAttribute(\"id\"))?c=c.replace(te,ne):t.setAttribute(\"id\",c=w),s=(h=i(e)).length;s--;)h[s]=\"#\"+c+\" \"+ve(h[s]);v=h.join(\",\"),b=J.test(e)&&me(t.parentNode)||t}if(v)try{return N.apply(r,b.querySelectorAll(v)),r}catch(e){}finally{c===w&&t.removeAttribute(\"id\")}}}return u(e.replace($,\"$1\"),t,r,o)}function ie(){var e=[];return function t(n,o){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=o}}function se(e){return e[w]=!0,e}function ue(e){var t=p.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){for(var n=e.split(\"|\"),o=n.length;o--;)r.attrHandle[n[o]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function de(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function fe(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function pe(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&oe(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){for(var o,a=e([],n.length,t),i=a.length;i--;)n[o=a[i]]&&(n[o]=!(r[o]=n[o]))})})}function me(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=ae.support={},a=ae.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},f=ae.setDocument=function(e){var t,o,i=e?e.ownerDocument||e:x;return i!==p&&9===i.nodeType&&i.documentElement?(h=(p=i).documentElement,m=!a(p),x!==p&&(o=p.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener(\"unload\",re,!1):o.attachEvent&&o.attachEvent(\"onunload\",re)),n.attributes=ue(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),n.getElementsByTagName=ue(function(e){return e.appendChild(p.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),n.getElementsByClassName=X.test(p.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=w,!p.getElementsByName||!p.getElementsByName(w).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,o,a=t.getElementById(e);if(a){if((n=a.getAttributeNode(\"id\"))&&n.value===e)return[a];for(o=t.getElementsByName(e),r=0;a=o[r++];)if((n=a.getAttributeNode(\"id\"))&&n.value===e)return[a]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,a=t.getElementsByTagName(e);if(\"*\"===e){for(;n=a[o++];)1===n.nodeType&&r.push(n);return r}return a},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=X.test(p.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=\"<a id='\"+w+\"'></a><select id='\"+w+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&g.push(\"[*^$]=\"+R+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||g.push(\"\\\\[\"+R+\"*(?:value|\"+L+\")\"),e.querySelectorAll(\"[id~=\"+w+\"-]\").length||g.push(\"~=\"),e.querySelectorAll(\":checked\").length||g.push(\":checked\"),e.querySelectorAll(\"a#\"+w+\"+*\").length||g.push(\".#.+[+~]\")}),ue(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=p.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&g.push(\"name\"+R+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&g.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&g.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),g.push(\",.*:\")})),(n.matchesSelector=X.test(b=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=b.call(e,\"*\"),b.call(e,\"[s!='']:x\"),v.push(\"!=\",B)}),g=g.length&&new RegExp(g.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=X.test(h.compareDocumentPosition),y=t||X.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},O=t?function(e,t){if(e===t)return d=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===p||e.ownerDocument===x&&y(x,e)?-1:t===p||t.ownerDocument===x&&y(x,t)?1:c?j(c,e)-j(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,r=0,o=e.parentNode,a=t.parentNode,i=[e],s=[t];if(!o||!a)return e===p?-1:t===p?1:o?-1:a?1:c?j(c,e)-j(c,t):0;if(o===a)return ce(e,t);for(n=e;n=n.parentNode;)i.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;i[r]===s[r];)r++;return r?ce(i[r],s[r]):i[r]===x?-1:s[r]===x?1:0},p):p},ae.matches=function(e,t){return ae(e,null,null,t)},ae.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&f(e),t=t.replace(W,\"='$1']\"),n.matchesSelector&&m&&!C[t+\" \"]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var r=b.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return ae(t,p,null,[e]).length>0},ae.contains=function(e,t){return(e.ownerDocument||e)!==p&&f(e),y(e,t)},ae.attr=function(e,t){(e.ownerDocument||e)!==p&&f(e);var o=r.attrHandle[t.toLowerCase()],a=o&&T.call(r.attrHandle,t.toLowerCase())?o(e,t,!m):void 0;return void 0!==a?a:n.attributes||!m?e.getAttribute(t):(a=e.getAttributeNode(t))&&a.specified?a.value:null},ae.escape=function(e){return(e+\"\").replace(te,ne)},ae.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},ae.uniqueSort=function(e){var t,r=[],o=0,a=0;if(d=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(O),d){for(;t=e[a++];)t===e[a]&&(o=r.push(a));for(;o--;)e.splice(r[o],1)}return c=null,e},o=ae.getText=function(e){var t,n=\"\",r=0,a=e.nodeType;if(a){if(1===a||9===a||11===a){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===a||4===a)return e.nodeValue}else for(;t=e[r++];)n+=o(t);return n},(r=ae.selectors={cacheLength:50,createPseudo:se,match:z,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||\"\").replace(Z,ee),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||ae.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&ae.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return z.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&K.test(n)&&(t=i(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=k[e+\" \"];return t||(t=new RegExp(\"(^|\"+R+\")\"+e+\"(\"+R+\"|$)\"))&&k(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var o=ae.attr(r,e);return null==o?\"!=\"===t:!t||(o+=\"\",\"=\"===t?o===n:\"!=\"===t?o!==n:\"^=\"===t?n&&0===o.indexOf(n):\"*=\"===t?n&&o.indexOf(n)>-1:\"$=\"===t?n&&o.slice(-n.length)===n:\"~=\"===t?(\" \"+o.replace(H,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(o===n||o.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,o){var a=\"nth\"!==e.slice(0,3),i=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,u){var l,c,d,f,p,h,m=a!==i?\"nextSibling\":\"previousSibling\",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),b=!u&&!s,y=!1;if(g){if(a){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=m=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[i?g.firstChild:g.lastChild],i&&b){for(y=(p=(l=(c=(d=(f=g)[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===_&&l[1])&&l[2],f=p&&g.childNodes[p];f=++p&&f&&f[m]||(y=p=0)||h.pop();)if(1===f.nodeType&&++y&&f===t){c[e]=[_,p,y];break}}else if(b&&(y=p=(l=(c=(d=(f=t)[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===_&&l[1]),!1===y)for(;(f=++p&&f&&f[m]||(y=p=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++y||(b&&((c=(d=f[w]||(f[w]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]=[_,y]),f!==t)););return(y-=o)===r||y%r==0&&y/r>=0}}},PSEUDO:function(e,t){var n,o=r.pseudos[e]||r.setFilters[e.toLowerCase()]||ae.error(\"unsupported pseudo: \"+e);return o[w]?o(t):o.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){for(var r,a=o(e,t),i=a.length;i--;)e[r=j(e,a[i])]=!(n[r]=a[i])}):function(e){return o(e,0,n)}):o}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace($,\"$1\"));return r[w]?se(function(e,t,n,o){for(var a,i=r(e,null,o,[]),s=e.length;s--;)(a=i[s])&&(e[s]=!(t[s]=a))}):function(e,o,a){return t[0]=e,r(t,null,a,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return ae(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:se(function(e){return q.test(e||\"\")||ae.error(\"unsupported lang: \"+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:pe(!1),disabled:pe(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=de(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=fe(t);function ge(){}function ve(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function be(e,t,n){var r=t.dir,o=t.next,a=o||r,i=n&&\"parentNode\"===a,s=E++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o);return!1}:function(t,n,u){var l,c,d,f=[_,s];if(u){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,u))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(c=(d=t[w]||(t[w]={}))[t.uniqueID]||(d[t.uniqueID]={}),o&&o===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[a])&&l[0]===_&&l[1]===s)return f[2]=l[2];if(c[a]=f,f[2]=e(t,n,u))return!0}return!1}}function ye(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function we(e,t,n,r,o){for(var a,i=[],s=0,u=e.length,l=null!=t;s<u;s++)(a=e[s])&&(n&&!n(a,r,o)||(i.push(a),l&&t.push(s)));return i}function xe(e,t,n,r,o,a){return r&&!r[w]&&(r=xe(r)),o&&!o[w]&&(o=xe(o,a)),se(function(a,i,s,u){var l,c,d,f=[],p=[],h=i.length,m=a||function(e,t,n){for(var r=0,o=t.length;r<o;r++)ae(e,t[r],n);return n}(t||\"*\",s.nodeType?[s]:s,[]),g=!e||!a&&t?m:we(m,f,e,s,u),v=n?o||(a?e:h||r)?[]:i:g;if(n&&n(g,v,s,u),r)for(l=we(v,p),r(l,[],s,u),c=l.length;c--;)(d=l[c])&&(v[p[c]]=!(g[p[c]]=d));if(a){if(o||e){if(o){for(l=[],c=v.length;c--;)(d=v[c])&&l.push(g[c]=d);o(null,v=[],l,u)}for(c=v.length;c--;)(d=v[c])&&(l=o?j(a,d):f[c])>-1&&(a[l]=!(i[l]=d))}}else v=we(v===i?v.splice(h,v.length):v),o?o(null,i,v,u):N.apply(i,v)})}function _e(e){for(var t,n,o,a=e.length,i=r.relative[e[0].type],s=i||r.relative[\" \"],u=i?1:0,c=be(function(e){return e===t},s,!0),d=be(function(e){return j(t,e)>-1},s,!0),f=[function(e,n,r){var o=!i&&(r||n!==l)||((t=n).nodeType?c(e,n,r):d(e,n,r));return t=null,o}];u<a;u++)if(n=r.relative[e[u].type])f=[be(ye(f),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[w]){for(o=++u;o<a&&!r.relative[e[o].type];o++);return xe(u>1&&ye(f),u>1&&ve(e.slice(0,u-1).concat({value:\" \"===e[u-2].type?\"*\":\"\"})).replace($,\"$1\"),n,u<o&&_e(e.slice(u,o)),o<a&&_e(e=e.slice(o)),o<a&&ve(e))}f.push(n)}return ye(f)}return ge.prototype=r.filters=r.pseudos,r.setFilters=new ge,i=ae.tokenize=function(e,t){var n,o,a,i,s,u,l,c=S[e+\" \"];if(c)return t?0:c.slice(0);for(s=e,u=[],l=r.preFilter;s;){for(i in n&&!(o=F.exec(s))||(o&&(s=s.slice(o[0].length)||s),u.push(a=[])),n=!1,(o=V.exec(s))&&(n=o.shift(),a.push({value:n,type:o[0].replace($,\" \")}),s=s.slice(n.length)),r.filter)!(o=z[i].exec(s))||l[i]&&!(o=l[i](o))||(n=o.shift(),a.push({value:n,type:i,matches:o}),s=s.slice(n.length));if(!n)break}return t?s.length:s?ae.error(e):S(e,u).slice(0)},s=ae.compile=function(e,t){var n,o=[],a=[],s=C[e+\" \"];if(!s){for(t||(t=i(e)),n=t.length;n--;)(s=_e(t[n]))[w]?o.push(s):a.push(s);(s=C(e,function(e,t){var n=t.length>0,o=e.length>0,a=function(a,i,s,u,c){var d,h,g,v=0,b=\"0\",y=a&&[],w=[],x=l,E=a||o&&r.find.TAG(\"*\",c),k=_+=null==x?1:Math.random()||.1,S=E.length;for(c&&(l=i===p||i||c);b!==S&&null!=(d=E[b]);b++){if(o&&d){for(h=0,i||d.ownerDocument===p||(f(d),s=!m);g=e[h++];)if(g(d,i||p,s)){u.push(d);break}c&&(_=k)}n&&((d=!g&&d)&&v--,a&&y.push(d))}if(v+=b,n&&b!==v){for(h=0;g=t[h++];)g(y,w,i,s);if(a){if(v>0)for(;b--;)y[b]||w[b]||(w[b]=I.call(u));w=we(w)}N.apply(u,w),c&&!a&&w.length>0&&v+t.length>1&&ae.uniqueSort(u)}return c&&(_=k,l=x),y};return n?se(a):a}(a,o))).selector=e}return s},u=ae.select=function(e,t,n,o){var a,u,l,c,d,f=\"function\"==typeof e&&e,p=!o&&i(e=f.selector||e);if(n=n||[],1===p.length){if((u=p[0]=p[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===t.nodeType&&m&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;f&&(t=t.parentNode),e=e.slice(u.shift().value.length)}for(a=z.needsContext.test(e)?0:u.length;a--&&(l=u[a],!r.relative[c=l.type]);)if((d=r.find[c])&&(o=d(l.matches[0].replace(Z,ee),J.test(u[0].type)&&me(t.parentNode)||t))){if(u.splice(a,1),!(e=o.length&&ve(u)))return N.apply(n,o),n;break}}return(f||s(e,p))(o,t,!m,n,!t||J.test(e)&&me(t.parentNode)||t),n},n.sortStable=w.split(\"\").sort(O).join(\"\")===w,n.detectDuplicates=!!d,f(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(p.createElement(\"fieldset\"))}),ue(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||le(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||le(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute(\"disabled\")})||le(L,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),ae}(n);E.find=C,E.expr=C.selectors,E.expr[\":\"]=E.expr.pseudos,E.uniqueSort=E.unique=C.uniqueSort,E.text=C.getText,E.isXMLDoc=C.isXML,E.contains=C.contains,E.escapeSelector=C.escape;var O=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},P=E.expr.match.needsContext;function I(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function N(e,t,n){return b(t)?E.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?E.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?E.grep(e,function(e){return d.call(t,e)>-1!==n}):E.filter(t,e,n)}E.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,o=this;if(\"string\"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(o[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,o[t],n);return r>1?E.uniqueSort(n):n},filter:function(e){return this.pushStack(N(this,e||[],!1))},not:function(e){return this.pushStack(N(this,e||[],!0))},is:function(e){return!!N(this,\"string\"==typeof e&&P.test(e)?E(e):e||[],!1).length}});var A,j=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(E.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||A,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:i,!0)),D.test(r[1])&&E.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(o=i.getElementById(r[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,A=E(i);var L=/^(?:parents|prev(?:Until|All))/,R={children:!0,contents:!0,next:!0,prev:!0};function M(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,o=this.length,a=[],i=\"string\"!=typeof e&&E(e);if(!P.test(e))for(;r<o;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(i?i.index(n)>-1:1===n.nodeType&&E.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?E.uniqueSort(a):a)},index:function(e){return e?\"string\"==typeof e?d.call(E(e),this[0]):d.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return O(e,\"parentNode\")},parentsUntil:function(e,t,n){return O(e,\"parentNode\",n)},next:function(e){return M(e,\"nextSibling\")},prev:function(e){return M(e,\"previousSibling\")},nextAll:function(e){return O(e,\"nextSibling\")},prevAll:function(e){return O(e,\"previousSibling\")},nextUntil:function(e,t,n){return O(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return O(e,\"previousSibling\",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return I(e,\"iframe\")?e.contentDocument:(I(e,\"template\")&&(e=e.content||e),E.merge([],e.childNodes))}},function(e,t){E.fn[e]=function(n,r){var o=E.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(o=E.filter(r,o)),this.length>1&&(R[e]||E.uniqueSort(o),L.test(e)&&o.reverse()),this.pushStack(o)}});var U=/[^\\x20\\t\\r\\n\\f]+/g;function B(e){return e}function H(e){throw e}function $(e,t,n,r){var o;try{e&&b(o=e.promise)?o.call(e).done(t).fail(n):e&&b(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(e){e=\"string\"==typeof e?function(e){var t={};return E.each(e.match(U)||[],function(e,n){t[n]=!0}),t}(e):E.extend({},e);var t,n,r,o,a=[],i=[],s=-1,u=function(){for(o=o||e.once,r=t=!0;i.length;s=-1)for(n=i.shift();++s<a.length;)!1===a[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=a.length,n=!1);e.memory||(n=!1),t=!1,o&&(a=n?[]:\"\")},l={add:function(){return a&&(n&&!t&&(s=a.length-1,i.push(n)),function t(n){E.each(n,function(n,r){b(r)?e.unique&&l.has(r)||a.push(r):r&&r.length&&\"string\"!==_(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return E.each(arguments,function(e,t){for(var n;(n=E.inArray(t,a,n))>-1;)a.splice(n,1),n<=s&&s--}),this},has:function(e){return e?E.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return o=i=[],a=n=\"\",this},disabled:function(){return!a},lock:function(){return o=i=[],n||t||(a=n=\"\"),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=[e,(n=n||[]).slice?n.slice():n],i.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},E.extend({Deferred:function(e){var t=[[\"notify\",\"progress\",E.Callbacks(\"memory\"),E.Callbacks(\"memory\"),2],[\"resolve\",\"done\",E.Callbacks(\"once memory\"),E.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",E.Callbacks(\"once memory\"),E.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",o={state:function(){return r},always:function(){return a.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return E.Deferred(function(n){E.each(t,function(t,r){var o=b(e[r[4]])&&e[r[4]];a[r[1]](function(){var e=o&&o.apply(this,arguments);e&&b(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,o?[e]:arguments)})}),e=null}).promise()},then:function(e,r,o){var a=0;function i(e,t,r,o){return function(){var s=this,u=arguments,l=function(){var n,l;if(!(e<a)){if((n=r.apply(s,u))===t.promise())throw new TypeError(\"Thenable self-resolution\");l=n&&(\"object\"==typeof n||\"function\"==typeof n)&&n.then,b(l)?o?l.call(n,i(a,t,B,o),i(a,t,H,o)):(a++,l.call(n,i(a,t,B,o),i(a,t,H,o),i(a,t,B,t.notifyWith))):(r!==B&&(s=void 0,u=[n]),(o||t.resolveWith)(s,u))}},c=o?l:function(){try{l()}catch(n){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(n,c.stackTrace),e+1>=a&&(r!==H&&(s=void 0,u=[n]),t.rejectWith(s,u))}};e?c():(E.Deferred.getStackHook&&(c.stackTrace=E.Deferred.getStackHook()),n.setTimeout(c))}}return E.Deferred(function(n){t[0][3].add(i(0,n,b(o)?o:B,n.notifyWith)),t[1][3].add(i(0,n,b(e)?e:B)),t[2][3].add(i(0,n,b(r)?r:H))}).promise()},promise:function(e){return null!=e?E.extend(e,o):o}},a={};return E.each(t,function(e,n){var i=n[2],s=n[5];o[n[1]]=i.add,s&&i.add(function(){r=s},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),i.add(n[3].fire),a[n[0]]=function(){return a[n[0]+\"With\"](this===a?void 0:this,arguments),this},a[n[0]+\"With\"]=i.fireWith}),o.promise(a),e&&e.call(a,a),a},when:function(e){var t=arguments.length,n=t,r=Array(n),o=u.call(arguments),a=E.Deferred(),i=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?u.call(arguments):n,--t||a.resolveWith(r,o)}};if(t<=1&&($(e,a.done(i(n)).resolve,a.reject,!t),\"pending\"===a.state()||b(o[n]&&o[n].then)))return a.then();for(;n--;)$(o[n],i(n),a.reject);return a.promise()}});var F=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&F.test(e.name)&&n.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},E.readyException=function(e){n.setTimeout(function(){throw e})};var V=E.Deferred();function W(){i.removeEventListener(\"DOMContentLoaded\",W),n.removeEventListener(\"load\",W),E.ready()}E.fn.ready=function(e){return V.then(e).catch(function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0,!0!==e&&--E.readyWait>0||V.resolveWith(i,[E]))}}),E.ready.then=V.then,\"complete\"===i.readyState||\"loading\"!==i.readyState&&!i.documentElement.doScroll?n.setTimeout(E.ready):(i.addEventListener(\"DOMContentLoaded\",W),n.addEventListener(\"load\",W));var K=function(e,t,n,r,o,a,i){var s=0,u=e.length,l=null==n;if(\"object\"===_(n))for(s in o=!0,n)K(e,t,s,n[s],!0,a,i);else if(void 0!==r&&(o=!0,b(r)||(i=!0),l&&(i?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,i?r:r.call(e[s],s,t(e[s],n)));return o?e:l?t.call(e):u?t(e[0],n):a},q=/^-ms-/,z=/-([a-z])/g;function G(e,t){return t.toUpperCase()}function Y(e){return e.replace(q,\"ms-\").replace(z,G)}var X=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=E.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},X(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if(\"string\"==typeof t)o[Y(t)]=n;else for(r in t)o[Y(r)]=t[r];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][Y(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(Y):(t=Y(t))in r?[t]:t.match(U)||[]).length;for(;n--;)delete r[t[n]]}(void 0===t||E.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var J=new Q,Z=new Q,ee=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,te=/[A-Z]/g;function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(te,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=function(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:ee.test(e)?JSON.parse(e):e)}(n)}catch(e){}Z.set(e,t,n)}else n=void 0;return n}E.extend({hasData:function(e){return Z.hasData(e)||J.hasData(e)},data:function(e,t,n){return Z.access(e,t,n)},removeData:function(e,t){Z.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),E.fn.extend({data:function(e,t){var n,r,o,a=this[0],i=a&&a.attributes;if(void 0===e){if(this.length&&(o=Z.get(a),1===a.nodeType&&!J.get(a,\"hasDataAttrs\"))){for(n=i.length;n--;)i[n]&&0===(r=i[n].name).indexOf(\"data-\")&&(r=Y(r.slice(5)),ne(a,r,o[r]));J.set(a,\"hasDataAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){Z.set(this,e)}):K(this,function(t){var n;if(a&&void 0===t)return void 0!==(n=Z.get(a,e))?n:void 0!==(n=ne(a,e))?n:void 0;this.each(function(){Z.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Z.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=E.queue(e,t),r=n.length,o=n.shift(),a=E._queueHooks(e,t);\"inprogress\"===o&&(o=n.shift(),r--),o&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete a.stop,o.call(e,function(){E.dequeue(e,t)},a)),!r&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return J.get(e,n)||J.access(e,n,{empty:E.Callbacks(\"once memory\").add(function(){J.remove(e,[t+\"queue\",n])})})}}),E.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?E.queue(this[0],e):void 0===t?this:this.each(function(){var n=E.queue(this,e,t);E._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&E.dequeue(this,e)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,o=E.Deferred(),a=this,i=this.length,s=function(){--r||o.resolveWith(a,[a])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";i--;)(n=J.get(a[i],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),o.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,oe=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),ae=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ie=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&E.contains(e.ownerDocument,e)&&\"none\"===E.css(e,\"display\")},se=function(e,t,n,r){var o,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in o=n.apply(e,r||[]),t)e.style[a]=i[a];return o};function ue(e,t,n,r){var o,a,i=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,\"\")},u=s(),l=n&&n[3]||(E.cssNumber[t]?\"\":\"px\"),c=(E.cssNumber[t]||\"px\"!==l&&+u)&&oe.exec(E.css(e,t));if(c&&c[3]!==l){for(u/=2,l=l||c[3],c=+u||1;i--;)E.style(e,t,c+l),(1-a)*(1-(a=s()/u||.5))<=0&&(i=0),c/=a;c*=2,E.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,o=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=o)),o}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,o=le[r];return o||(t=n.body.appendChild(n.createElement(r)),o=E.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===o&&(o=\"block\"),le[r]=o,o)}function de(e,t){for(var n,r,o=[],a=0,i=e.length;a<i;a++)(r=e[a]).style&&(n=r.style.display,t?(\"none\"===n&&(o[a]=J.get(r,\"display\")||null,o[a]||(r.style.display=\"\")),\"\"===r.style.display&&ie(r)&&(o[a]=ce(r))):\"none\"!==n&&(o[a]=\"none\",J.set(r,\"display\",n)));for(a=0;a<i;a++)null!=o[a]&&(e[a].style.display=o[a]);return e}E.fn.extend({show:function(){return de(this,!0)},hide:function(){return de(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ie(this)?E(this).show():E(this).hide()})}});var fe=/^(?:checkbox|radio)$/i,pe=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,me={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function ge(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):void 0!==e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&I(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],\"globalEval\",!t||J.get(t[n],\"globalEval\"))}me.optgroup=me.option,me.tbody=me.tfoot=me.colgroup=me.caption=me.thead,me.th=me.td;var be,ye,we=/<|&#?\\w+;/;function xe(e,t,n,r,o){for(var a,i,s,u,l,c,d=t.createDocumentFragment(),f=[],p=0,h=e.length;p<h;p++)if((a=e[p])||0===a)if(\"object\"===_(a))E.merge(f,a.nodeType?[a]:a);else if(we.test(a)){for(i=i||d.appendChild(t.createElement(\"div\")),s=(pe.exec(a)||[\"\",\"\"])[1].toLowerCase(),u=me[s]||me._default,i.innerHTML=u[1]+E.htmlPrefilter(a)+u[2],c=u[0];c--;)i=i.lastChild;E.merge(f,i.childNodes),(i=d.firstChild).textContent=\"\"}else f.push(t.createTextNode(a));for(d.textContent=\"\",p=0;a=f[p++];)if(r&&E.inArray(a,r)>-1)o&&o.push(a);else if(l=E.contains(a.ownerDocument,a),i=ge(d.appendChild(a),\"script\"),l&&ve(i),n)for(c=0;a=i[c++];)he.test(a.type||\"\")&&n.push(a);return d}be=i.createDocumentFragment().appendChild(i.createElement(\"div\")),(ye=i.createElement(\"input\")).setAttribute(\"type\",\"radio\"),ye.setAttribute(\"checked\",\"checked\"),ye.setAttribute(\"name\",\"t\"),be.appendChild(ye),v.checkClone=be.cloneNode(!0).cloneNode(!0).lastChild.checked,be.innerHTML=\"<textarea>x</textarea>\",v.noCloneChecked=!!be.cloneNode(!0).lastChild.defaultValue;var _e=i.documentElement,Ee=/^key/,ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Se=/^([^.]*)(?:\\.(.+)|)/;function Ce(){return!0}function Oe(){return!1}function Te(){try{return i.activeElement}catch(e){}}function Pe(e,t,n,r,o,a){var i,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Pe(e,s,n,r,t[s],a);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&(\"string\"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=Oe;else if(!o)return e;return 1===a&&(i=o,(o=function(e){return E().off(e),i.apply(this,arguments)}).guid=i.guid||(i.guid=E.guid++)),e.each(function(){E.event.add(this,t,o,r,n)})}E.event={global:{},add:function(e,t,n,r,o){var a,i,s,u,l,c,d,f,p,h,m,g=J.get(e);if(g)for(n.handler&&(n=(a=n).handler,o=a.selector),o&&E.find.matchesSelector(_e,o),n.guid||(n.guid=E.guid++),(u=g.events)||(u=g.events={}),(i=g.handle)||(i=g.handle=function(t){return void 0!==E&&E.event.triggered!==t.type?E.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\"\").match(U)||[\"\"]).length;l--;)p=m=(s=Se.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),p&&(d=E.event.special[p]||{},p=(o?d.delegateType:d.bindType)||p,d=E.event.special[p]||{},c=E.extend({type:p,origType:m,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&E.expr.match.needsContext.test(o),namespace:h.join(\".\")},a),(f=u[p])||((f=u[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,r,h,i)||e.addEventListener&&e.addEventListener(p,i)),d.add&&(d.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,c):f.push(c),E.event.global[p]=!0)},remove:function(e,t,n,r,o){var a,i,s,u,l,c,d,f,p,h,m,g=J.hasData(e)&&J.get(e);if(g&&(u=g.events)){for(l=(t=(t||\"\").match(U)||[\"\"]).length;l--;)if(p=m=(s=Se.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),p){for(d=E.event.special[p]||{},f=u[p=(r?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),i=a=f.length;a--;)c=f[a],!o&&m!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(f.splice(a,1),c.selector&&f.delegateCount--,d.remove&&d.remove.call(e,c));i&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,g.handle)||E.removeEvent(e,p,g.handle),delete u[p])}else for(p in u)E.event.remove(e,p+t[l],n,r,!0);E.isEmptyObject(u)&&J.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,o,a,i,s=E.event.fix(e),u=new Array(arguments.length),l=(J.get(this,\"events\")||{})[s.type]||[],c=E.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){for(i=E.event.handlers.call(this,s,l),t=0;(o=i[t++])&&!s.isPropagationStopped();)for(s.currentTarget=o.elem,n=0;(a=o.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!s.rnamespace.test(a.namespace)||(s.handleObj=a,s.data=a.data,void 0!==(r=((E.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,o,a,i,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(a=[],i={},n=0;n<u;n++)void 0===i[o=(r=t[n]).selector+\" \"]&&(i[o]=r.needsContext?E(o,this).index(l)>-1:E.find(o,this,null,[l]).length),i[o]&&a.push(r);a.length&&s.push({elem:l,handlers:a})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(E.Event.prototype,e,{enumerable:!0,configurable:!0,get:b(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Te()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===Te()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&I(this,\"input\"))return this.click(),!1},_default:function(e){return I(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Oe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Oe,isPropagationStopped:Oe,isImmediatePropagationStopped:Oe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Ee.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&ke.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},E.event.addProp),E.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){E.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=e.relatedTarget,o=e.handleObj;return r&&(r===this||E.contains(this,r))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),E.fn.extend({on:function(e,t,n,r){return Pe(this,e,t,n,r)},one:function(e,t,n,r){return Pe(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Oe),this.each(function(){E.event.remove(this,e,n,t)})}});var Ie=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,De=/<script|<style|<link/i,Ne=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Ae=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function je(e,t){return I(e,\"table\")&&I(11!==t.nodeType?t:t.firstChild,\"tr\")&&E(e).children(\"tbody\")[0]||e}function Le(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Re(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Me(e,t){var n,r,o,a,i,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(a=J.access(e),i=J.set(t,a),l=a.events))for(o in delete i.handle,i.events={},l)for(n=0,r=l[o].length;n<r;n++)E.event.add(t,o,l[o][n]);Z.hasData(e)&&(s=Z.access(e),u=E.extend({},s),Z.set(t,u))}}function Ue(e,t,n,r){t=l.apply([],t);var o,a,i,s,u,c,d=0,f=e.length,p=f-1,h=t[0],m=b(h);if(m||f>1&&\"string\"==typeof h&&!v.checkClone&&Ne.test(h))return e.each(function(o){var a=e.eq(o);m&&(t[0]=h.call(this,o,a.html())),Ue(a,t,n,r)});if(f&&(a=(o=xe(t,e[0].ownerDocument,!1,e,r)).firstChild,1===o.childNodes.length&&(o=a),a||r)){for(s=(i=E.map(ge(o,\"script\"),Le)).length;d<f;d++)u=o,d!==p&&(u=E.clone(u,!0,!0),s&&E.merge(i,ge(u,\"script\"))),n.call(e[d],u,d);if(s)for(c=i[i.length-1].ownerDocument,E.map(i,Re),d=0;d<s;d++)u=i[d],he.test(u.type||\"\")&&!J.access(u,\"globalEval\")&&E.contains(c,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?E._evalUrl&&E._evalUrl(u.src):x(u.textContent.replace(Ae,\"\"),c,u))}return e}function Be(e,t,n){for(var r,o=t?E.filter(t,e):e,a=0;null!=(r=o[a]);a++)n||1!==r.nodeType||E.cleanData(ge(r)),r.parentNode&&(n&&E.contains(r.ownerDocument,r)&&ve(ge(r,\"script\")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e.replace(Ie,\"<$1></$2>\")},clone:function(e,t,n){var r,o,a,i,s,u,l,c=e.cloneNode(!0),d=E.contains(e.ownerDocument,e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(i=ge(c),r=0,o=(a=ge(e)).length;r<o;r++)s=a[r],u=i[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&fe.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(a=a||ge(e),i=i||ge(c),r=0,o=a.length;r<o;r++)Me(a[r],i[r]);else Me(e,c);return(i=ge(c,\"script\")).length>0&&ve(i,!d&&ge(e,\"script\")),c},cleanData:function(e){for(var t,n,r,o=E.event.special,a=0;void 0!==(n=e[a]);a++)if(X(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)o[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return K(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ue(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return Ue(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ue(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ue(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ge(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return K(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!De.test(e)&&!me[(pe.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(ge(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Ue(this,arguments,function(t){var n=this.parentNode;E.inArray(this,e)<0&&(E.cleanData(ge(this)),n&&n.replaceChild(t,this))},e)}}),E.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){E.fn[e]=function(e){for(var n,r=[],o=E(e),a=o.length-1,i=0;i<=a;i++)n=i===a?this:this.clone(!0),E(o[i])[t](n),c.apply(r,n.get());return this.pushStack(r)}});var He=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),$e=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=n),t.getComputedStyle(e)},Fe=new RegExp(ae.join(\"|\"),\"i\");function Ve(e,t,n){var r,o,a,i,s=e.style;return(n=n||$e(e))&&(\"\"!==(i=n.getPropertyValue(t)||n[t])||E.contains(e.ownerDocument,e)||(i=E.style(e,t)),!v.pixelBoxStyles()&&He.test(i)&&Fe.test(t)&&(r=s.width,o=s.minWidth,a=s.maxWidth,s.minWidth=s.maxWidth=s.width=i,i=n.width,s.width=r,s.minWidth=o,s.maxWidth=a)),void 0!==i?i+\"\":i}function We(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",_e.appendChild(l).appendChild(c);var e=n.getComputedStyle(c);r=\"1%\"!==e.top,u=12===t(e.marginLeft),c.style.right=\"60%\",s=36===t(e.right),o=36===t(e.width),c.style.position=\"absolute\",a=36===c.offsetWidth||\"absolute\",_e.removeChild(l),c=null}}function t(e){return Math.round(parseFloat(e))}var r,o,a,s,u,l=i.createElement(\"div\"),c=i.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",v.clearCloneStyle=\"content-box\"===c.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),o},pixelBoxStyles:function(){return e(),s},pixelPosition:function(){return e(),r},reliableMarginLeft:function(){return e(),u},scrollboxSize:function(){return e(),a}}))}();var Ke=/^(none|table(?!-c[ea]).+)/,qe=/^--/,ze={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ge={letterSpacing:\"0\",fontWeight:\"400\"},Ye=[\"Webkit\",\"Moz\",\"ms\"],Xe=i.createElement(\"div\").style;function Qe(e){var t=E.cssProps[e];return t||(t=E.cssProps[e]=function(e){if(e in Xe)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=Ye.length;n--;)if((e=Ye[n]+t)in Xe)return e}(e)||e),t}function Je(e,t,n){var r=oe.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Ze(e,t,n,r,o,a){var i=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;i<4;i+=2)\"margin\"===n&&(u+=E.css(e,n+ae[i],!0,o)),r?(\"content\"===n&&(u-=E.css(e,\"padding\"+ae[i],!0,o)),\"margin\"!==n&&(u-=E.css(e,\"border\"+ae[i]+\"Width\",!0,o))):(u+=E.css(e,\"padding\"+ae[i],!0,o),\"padding\"!==n?u+=E.css(e,\"border\"+ae[i]+\"Width\",!0,o):s+=E.css(e,\"border\"+ae[i]+\"Width\",!0,o));return!r&&a>=0&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-a-u-s-.5))),u}function et(e,t,n){var r=$e(e),o=Ve(e,t,r),a=\"border-box\"===E.css(e,\"boxSizing\",!1,r),i=a;if(He.test(o)){if(!n)return o;o=\"auto\"}return i=i&&(v.boxSizingReliable()||o===e.style[t]),(\"auto\"===o||!parseFloat(o)&&\"inline\"===E.css(e,\"display\",!1,r))&&(o=e[\"offset\"+t[0].toUpperCase()+t.slice(1)],i=!0),(o=parseFloat(o)||0)+Ze(e,t,n||(a?\"border\":\"content\"),i,r,o)+\"px\"}function tt(e,t,n,r,o){return new tt.prototype.init(e,t,n,r,o)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ve(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,i,s=Y(t),u=qe.test(t),l=e.style;if(u||(t=Qe(s)),i=E.cssHooks[t]||E.cssHooks[s],void 0===n)return i&&\"get\"in i&&void 0!==(o=i.get(e,!1,r))?o:l[t];\"string\"===(a=typeof n)&&(o=oe.exec(n))&&o[1]&&(n=ue(e,t,o),a=\"number\"),null!=n&&n==n&&(\"number\"===a&&(n+=o&&o[3]||(E.cssNumber[s]?\"\":\"px\")),v.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),i&&\"set\"in i&&void 0===(n=i.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var o,a,i,s=Y(t);return qe.test(t)||(t=Qe(s)),(i=E.cssHooks[t]||E.cssHooks[s])&&\"get\"in i&&(o=i.get(e,!0,n)),void 0===o&&(o=Ve(e,t,r)),\"normal\"===o&&t in Ge&&(o=Ge[t]),\"\"===n||n?(a=parseFloat(o),!0===n||isFinite(a)?a||0:o):o}}),E.each([\"height\",\"width\"],function(e,t){E.cssHooks[t]={get:function(e,n,r){if(n)return!Ke.test(E.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,ze,function(){return et(e,t,r)})},set:function(e,n,r){var o,a=$e(e),i=\"border-box\"===E.css(e,\"boxSizing\",!1,a),s=r&&Ze(e,t,r,i,a);return i&&v.scrollboxSize()===a.position&&(s-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(a[t])-Ze(e,t,\"border\",!1,a)-.5)),s&&(o=oe.exec(n))&&\"px\"!==(o[3]||\"px\")&&(e.style[t]=n,n=E.css(e,t)),Je(0,n,s)}}}),E.cssHooks.marginLeft=We(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ve(e,\"marginLeft\"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),E.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){E.cssHooks[e+t]={expand:function(n){for(var r=0,o={},a=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)o[e+ae[r]+t]=a[r]||a[r-2]||a[0];return o}},\"margin\"!==e&&(E.cssHooks[e+t].set=Je)}),E.fn.extend({css:function(e,t){return K(this,function(e,t,n){var r,o,a={},i=0;if(Array.isArray(t)){for(r=$e(e),o=t.length;i<o;i++)a[t[i]]=E.css(e,t[i],!1,r);return a}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,arguments.length>1)}}),E.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,o,a){this.elem=e,this.prop=n,this.easing=o||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=a||(E.cssNumber[n]?\"\":\"px\")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[E.cssProps[e.prop]]&&!E.cssHooks[e.prop]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},E.fx=tt.prototype.init,E.fx.step={};var nt,rt,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function it(){rt&&(!1===i.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(it):n.setTimeout(it,E.fx.interval),E.fx.tick())}function st(){return n.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)o[\"margin\"+(n=ae[r])]=o[\"padding\"+n]=e;return t&&(o.opacity=o.width=e),o}function lt(e,t,n){for(var r,o=(ct.tweeners[t]||[]).concat(ct.tweeners[\"*\"]),a=0,i=o.length;a<i;a++)if(r=o[a].call(n,t,e))return r}function ct(e,t,n){var r,o,a=0,i=ct.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(o)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),a=0,i=l.tweens.length;a<i;a++)l.tweens[a].run(r);return s.notifyWith(e,[l,r,n]),r<1&&i?n:(i||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:E.extend({},t),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=E.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(o)return this;for(o=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(!function(e,t){var n,r,o,a,i;for(n in e)if(o=t[r=Y(n)],a=e[n],Array.isArray(a)&&(o=a[1],a=e[n]=a[0]),n!==r&&(e[r]=a,delete e[n]),(i=E.cssHooks[r])&&\"expand\"in i)for(n in a=i.expand(a),delete e[r],a)n in e||(e[n]=a[n],t[n]=o);else t[r]=o}(c,l.opts.specialEasing);a<i;a++)if(r=ct.prefilters[a].call(l,e,c,l.opts))return b(r.stop)&&(E._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return E.map(c,lt,l),b(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),E.fx.timer(E.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}E.Animation=E.extend(ct,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,oe.exec(t),n),n}]},tweener:function(e,t){b(e)?(t=e,e=[\"*\"]):e=e.match(U);for(var n,r=0,o=e.length;r<o;r++)n=e[r],ct.tweeners[n]=ct.tweeners[n]||[],ct.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,o,a,i,s,u,l,c,d=\"width\"in t||\"height\"in t,f=this,p={},h=e.style,m=e.nodeType&&ie(e),g=J.get(e,\"fxshow\");for(r in n.queue||(null==(i=E._queueHooks(e,\"fx\")).unqueued&&(i.unqueued=0,s=i.empty.fire,i.empty.fire=function(){i.unqueued||s()}),i.unqueued++,f.always(function(){f.always(function(){i.unqueued--,E.queue(e,\"fx\").length||i.empty.fire()})})),t)if(o=t[r],ot.test(o)){if(delete t[r],a=a||\"toggle\"===o,o===(m?\"hide\":\"show\")){if(\"show\"!==o||!g||void 0===g[r])continue;m=!0}p[r]=g&&g[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(p))for(r in d&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=g&&g.display)&&(l=J.get(e,\"display\")),\"none\"===(c=E.css(e,\"display\"))&&(l?c=l:(de([e],!0),l=e.style.display||l,c=E.css(e,\"display\"),de([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===E.css(e,\"float\")&&(u||(f.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",f.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,p)u||(g?\"hidden\"in g&&(m=g.hidden):g=J.access(e,\"fxshow\",{display:l}),a&&(g.hidden=!m),m&&de([e],!0),f.done(function(){for(r in m||de([e]),J.remove(e,\"fxshow\"),p)E.style(e,r,p[r])})),u=lt(m?g[r]:0,r,f),r in g||(g[r]=u.start,m&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ct.prefilters.unshift(e):ct.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&\"object\"==typeof e?E.extend({},e):{complete:n||!n&&t||b(e)&&e,duration:e,easing:n&&t||t&&!b(t)&&t};return E.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){b(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ie).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=E.isEmptyObject(e),a=E.speed(t,n,r),i=function(){var t=ct(this,E.extend({},e),a);(o||J.get(this,\"finish\"))&&t.stop(!0)};return i.finish=i,o||!1===a.queue?this.each(i):this.queue(a.queue,i)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,o=null!=e&&e+\"queueHooks\",a=E.timers,i=J.get(this);if(o)i[o]&&i[o].stop&&r(i[o]);else for(o in i)i[o]&&i[o].stop&&at.test(o)&&r(i[o]);for(o=a.length;o--;)a[o].elem!==this||null!=e&&a[o].queue!==e||(a[o].anim.stop(n),t=!1,a.splice(o,1));!t&&n||E.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=J.get(this),r=n[e+\"queue\"],o=n[e+\"queueHooks\"],a=E.timers,i=r?r.length:0;for(n.finish=!0,E.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=a.length;t--;)a[t].elem===this&&a[t].queue===e&&(a[t].anim.stop(!0),a.splice(t,1));for(t=0;t<i;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),E.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=E.fn[t];E.fn[t]=function(e,r,o){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,o)}}),E.each({slideDown:ut(\"show\"),slideUp:ut(\"hide\"),slideToggle:ut(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){E.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),nt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){rt||(rt=!0,it())},E.fx.stop=function(){rt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(e,t){return e=E.fx&&E.fx.speeds[e]||e,t=t||\"fx\",this.queue(t,function(t,r){var o=n.setTimeout(t,e);r.stop=function(){n.clearTimeout(o)}})},function(){var e=i.createElement(\"input\"),t=i.createElement(\"select\").appendChild(i.createElement(\"option\"));e.type=\"checkbox\",v.checkOn=\"\"!==e.value,v.optSelected=t.selected,(e=i.createElement(\"input\")).value=\"t\",e.type=\"radio\",v.radioValue=\"t\"===e.value}();var dt,ft=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return K(this,E.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,o,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return void 0===e.getAttribute?E.prop(e,t,n):(1===a&&E.isXMLDoc(e)||(o=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):o&&\"get\"in o&&null!==(r=o.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&\"radio\"===t&&I(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(U);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ft[t]||E.find.attr;ft[t]=function(e,t,r){var o,a,i=t.toLowerCase();return r||(a=ft[i],ft[i]=o,o=null!=n(e,t,r)?i:null,ft[i]=a),o}});var pt=/^(?:input|select|textarea|button)$/i,ht=/^(?:a|area)$/i;function mt(e){return(e.match(U)||[]).join(\" \")}function gt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function vt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(U)||[]}E.fn.extend({prop:function(e,t){return K(this,E.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,o,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return 1===a&&E.isXMLDoc(e)||(t=E.propFix[t]||t,o=E.propHooks[t]),void 0!==n?o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&\"get\"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,\"tabindex\");return t?parseInt(t,10):pt.test(e.nodeName)||ht.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(e){var t,n,r,o,a,i,s,u=0;if(b(e))return this.each(function(t){E(this).addClass(e.call(this,t,gt(this)))});if((t=vt(e)).length)for(;n=this[u++];)if(o=gt(n),r=1===n.nodeType&&\" \"+mt(o)+\" \"){for(i=0;a=t[i++];)r.indexOf(\" \"+a+\" \")<0&&(r+=a+\" \");o!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,o,a,i,s,u=0;if(b(e))return this.each(function(t){E(this).removeClass(e.call(this,t,gt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((t=vt(e)).length)for(;n=this[u++];)if(o=gt(n),r=1===n.nodeType&&\" \"+mt(o)+\" \"){for(i=0;a=t[i++];)for(;r.indexOf(\" \"+a+\" \")>-1;)r=r.replace(\" \"+a+\" \",\" \");o!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):b(e)?this.each(function(n){E(this).toggleClass(e.call(this,n,gt(this),t),t)}):this.each(function(){var t,o,a,i;if(r)for(o=0,a=E(this),i=vt(e);t=i[o++];)a.hasClass(t)?a.removeClass(t):a.addClass(t);else void 0!==e&&\"boolean\"!==n||((t=gt(this))&&J.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":J.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+mt(gt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var bt=/\\r/g;E.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=b(e),this.each(function(n){var o;1===this.nodeType&&(null==(o=r?e.call(this,n,E(this).val()):e)?o=\"\":\"number\"==typeof o?o+=\"\":Array.isArray(o)&&(o=E.map(o,function(e){return null==e?\"\":e+\"\"})),(t=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,o,\"value\")||(this.value=o))})):o?(t=E.valHooks[o.type]||E.valHooks[o.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(o,\"value\"))?n:\"string\"==typeof(n=o.value)?n.replace(bt,\"\"):null==n?\"\":n:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,\"value\");return null!=t?t:mt(E.text(e))}},select:{get:function(e){var t,n,r,o=e.options,a=e.selectedIndex,i=\"select-one\"===e.type,s=i?null:[],u=i?a+1:o.length;for(r=a<0?u:i?a:0;r<u;r++)if(((n=o[r]).selected||r===a)&&!n.disabled&&(!n.parentNode.disabled||!I(n.parentNode,\"optgroup\"))){if(t=E(n).val(),i)return t;s.push(t)}return s},set:function(e,t){for(var n,r,o=e.options,a=E.makeArray(t),i=o.length;i--;)((r=o[i]).selected=E.inArray(E.valHooks.option.get(r),a)>-1)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),E.each([\"radio\",\"checkbox\"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=E.inArray(E(e).val(),t)>-1}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),v.focusin=\"onfocusin\"in n;var yt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,r,o){var a,s,u,l,c,d,f,p,m=[r||i],g=h.call(e,\"type\")?e.type:e,v=h.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(s=p=u=r=r||i,3!==r.nodeType&&8!==r.nodeType&&!yt.test(g+E.event.triggered)&&(g.indexOf(\".\")>-1&&(g=(v=g.split(\".\")).shift(),v.sort()),c=g.indexOf(\":\")<0&&\"on\"+g,(e=e[E.expando]?e:new E.Event(g,\"object\"==typeof e&&e)).isTrigger=o?2:3,e.namespace=v.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+v.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:E.makeArray(t,[e]),f=E.event.special[g]||{},o||!f.trigger||!1!==f.trigger.apply(r,t))){if(!o&&!f.noBubble&&!y(r)){for(l=f.delegateType||g,yt.test(l+g)||(s=s.parentNode);s;s=s.parentNode)m.push(s),u=s;u===(r.ownerDocument||i)&&m.push(u.defaultView||u.parentWindow||n)}for(a=0;(s=m[a++])&&!e.isPropagationStopped();)p=s,e.type=a>1?l:f.bindType||g,(d=(J.get(s,\"events\")||{})[e.type]&&J.get(s,\"handle\"))&&d.apply(s,t),(d=c&&s[c])&&d.apply&&X(s)&&(e.result=d.apply(s,t),!1===e.result&&e.preventDefault());return e.type=g,o||e.isDefaultPrevented()||f._default&&!1!==f._default.apply(m.pop(),t)||!X(r)||c&&b(r[g])&&!y(r)&&((u=r[c])&&(r[c]=null),E.event.triggered=g,e.isPropagationStopped()&&p.addEventListener(g,wt),r[g](),e.isPropagationStopped()&&p.removeEventListener(g,wt),E.event.triggered=void 0,u&&(r[c]=u)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){E.event.simulate(t,e.target,E.event.fix(e))};E.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=J.access(r,t);o||r.addEventListener(e,n,!0),J.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=J.access(r,t)-1;o?J.access(r,t,o):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var xt=n.location,_t=Date.now(),Et=/\\?/;E.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||E.error(\"Invalid XML: \"+e),t};var kt=/\\[\\]$/,St=/\\r?\\n/g,Ct=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Tt(e,t,n,r){var o;if(Array.isArray(t))E.each(t,function(t,o){n||kt.test(e)?r(e,o):Tt(e+\"[\"+(\"object\"==typeof o&&null!=o?t:\"\")+\"]\",o,n,r)});else if(n||\"object\"!==_(t))r(e,t);else for(o in t)Tt(e+\"[\"+o+\"]\",t[o],n,r)}E.param=function(e,t){var n,r=[],o=function(e,t){var n=b(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){o(this.name,this.value)});else for(n in e)Tt(n,e[n],t,o);return r.join(\"&\")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,\"elements\");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(\":disabled\")&&Ot.test(this.nodeName)&&!Ct.test(e)&&(this.checked||!fe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(St,\"\\r\\n\")}}):{name:t.name,value:n.replace(St,\"\\r\\n\")}}).get()}});var Pt=/%20/g,It=/#.*$/,Dt=/([?&])_=[^&]*/,Nt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,At=/^(?:GET|HEAD)$/,jt=/^\\/\\//,Lt={},Rt={},Mt=\"*/\".concat(\"*\"),Ut=i.createElement(\"a\");function Bt(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,o=0,a=t.toLowerCase().match(U)||[];if(b(n))for(;r=a[o++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Ht(e,t,n,r){var o={},a=e===Rt;function i(s){var u;return o[s]=!0,E.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||a||o[l]?a?!(u=l):void 0:(t.dataTypes.unshift(l),i(l),!1)}),u}return i(t.dataTypes[0])||!o[\"*\"]&&i(\"*\")}function $t(e,t){var n,r,o=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Ut.href=xt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:xt.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(xt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Mt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,E.ajaxSettings),t):$t(E.ajaxSettings,e)},ajaxPrefilter:Bt(Lt),ajaxTransport:Bt(Rt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var r,o,a,s,u,l,c,d,f,p,h=E.ajaxSetup({},t),m=h.context||h,g=h.context&&(m.nodeType||m.jquery)?E(m):E.event,v=E.Deferred(),b=E.Callbacks(\"once memory\"),y=h.statusCode||{},w={},x={},_=\"canceled\",k={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s)for(s={};t=Nt.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,w[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)k.always(e[k.status]);else for(t in e)y[t]=[y[t],e[t]];return this},abort:function(e){var t=e||_;return r&&r.abort(t),S(0,t),this}};if(v.promise(k),h.url=((e||h.url||xt.href)+\"\").replace(jt,xt.protocol+\"//\"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(U)||[\"\"],null==h.crossDomain){l=i.createElement(\"a\");try{l.href=h.url,l.href=l.href,h.crossDomain=Ut.protocol+\"//\"+Ut.host!=l.protocol+\"//\"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=E.param(h.data,h.traditional)),Ht(Lt,h,t,k),c)return k;for(f in(d=E.event&&h.global)&&0==E.active++&&E.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!At.test(h.type),o=h.url.replace(It,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(Pt,\"+\")):(p=h.url.slice(o.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(o+=(Et.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Dt,\"$1\"),p=(Et.test(o)?\"&\":\"?\")+\"_=\"+_t+++p),h.url=o+p),h.ifModified&&(E.lastModified[o]&&k.setRequestHeader(\"If-Modified-Since\",E.lastModified[o]),E.etag[o]&&k.setRequestHeader(\"If-None-Match\",E.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&k.setRequestHeader(\"Content-Type\",h.contentType),k.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+Mt+\"; q=0.01\":\"\"):h.accepts[\"*\"]),h.headers)k.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(!1===h.beforeSend.call(m,k,h)||c))return k.abort();if(_=\"abort\",b.add(h.complete),k.done(h.success),k.fail(h.error),r=Ht(Rt,h,t,k)){if(k.readyState=1,d&&g.trigger(\"ajaxSend\",[k,h]),c)return k;h.async&&h.timeout>0&&(u=n.setTimeout(function(){k.abort(\"timeout\")},h.timeout));try{c=!1,r.send(w,S)}catch(e){if(c)throw e;S(-1,e)}}else S(-1,\"No Transport\");function S(e,t,i,s){var l,f,p,w,x,_=t;c||(c=!0,u&&n.clearTimeout(u),r=void 0,a=s||\"\",k.readyState=e>0?4:0,l=e>=200&&e<300||304===e,i&&(w=function(e,t,n){for(var r,o,a,i,s=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(o in s)if(s[o]&&s[o].test(r)){u.unshift(o);break}if(u[0]in n)a=u[0];else{for(o in n){if(!u[0]||e.converters[o+\" \"+u[0]]){a=o;break}i||(i=o)}a=a||i}if(a)return a!==u[0]&&u.unshift(a),n[a]}(h,k,i)),w=function(e,t,n,r){var o,a,i,s,u,l={},c=e.dataTypes.slice();if(c[1])for(i in e.converters)l[i.toLowerCase()]=e.converters[i];for(a=c.shift();a;)if(e.responseFields[a]&&(n[e.responseFields[a]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=a,a=c.shift())if(\"*\"===a)a=u;else if(\"*\"!==u&&u!==a){if(!(i=l[u+\" \"+a]||l[\"* \"+a]))for(o in l)if((s=o.split(\" \"))[1]===a&&(i=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===i?i=l[o]:!0!==l[o]&&(a=s[0],c.unshift(s[1]));break}if(!0!==i)if(i&&e.throws)t=i(t);else try{t=i(t)}catch(e){return{state:\"parsererror\",error:i?e:\"No conversion from \"+u+\" to \"+a}}}return{state:\"success\",data:t}}(h,w,k,l),l?(h.ifModified&&((x=k.getResponseHeader(\"Last-Modified\"))&&(E.lastModified[o]=x),(x=k.getResponseHeader(\"etag\"))&&(E.etag[o]=x)),204===e||\"HEAD\"===h.type?_=\"nocontent\":304===e?_=\"notmodified\":(_=w.state,f=w.data,l=!(p=w.error))):(p=_,!e&&_||(_=\"error\",e<0&&(e=0))),k.status=e,k.statusText=(t||_)+\"\",l?v.resolveWith(m,[f,_,k]):v.rejectWith(m,[k,_,p]),k.statusCode(y),y=void 0,d&&g.trigger(l?\"ajaxSuccess\":\"ajaxError\",[k,h,l?f:p]),b.fireWith(m,[k,_]),d&&(g.trigger(\"ajaxComplete\",[k,h]),--E.active||E.event.trigger(\"ajaxStop\")))}return k},getJSON:function(e,t,n){return E.get(e,t,n,\"json\")},getScript:function(e,t){return E.get(e,void 0,t,\"script\")}}),E.each([\"get\",\"post\"],function(e,t){E[t]=function(e,n,r,o){return b(n)&&(o=o||r,r=n,n=void 0),E.ajax(E.extend({url:e,type:t,dataType:o,data:n,success:r},E.isPlainObject(e)&&e))}}),E._evalUrl=function(e){return E.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,throws:!0})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(b(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return b(e)?this.each(function(t){E(this).wrapInner(e.call(this,t))}):this.each(function(){var t=E(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b(e);return this.each(function(n){E(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Ft={0:200,1223:204},Vt=E.ajaxSettings.xhr();v.cors=!!Vt&&\"withCredentials\"in Vt,v.ajax=Vt=!!Vt,E.ajaxTransport(function(e){var t,r;if(v.cors||Vt&&!e.crossDomain)return{send:function(o,a){var i,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(i in e.xhrFields)s[i]=e.xhrFields[i];for(i in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||o[\"X-Requested-With\"]||(o[\"X-Requested-With\"]=\"XMLHttpRequest\"),o)s.setRequestHeader(i,o[i]);t=function(e){return function(){t&&(t=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?a(0,\"error\"):a(s.status,s.statusText):a(Ft[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),r=s.onerror=s.ontimeout=t(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout(function(){t&&r()})},t=t(\"abort\");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),E.ajaxTransport(\"script\",function(e){var t,n;if(e.crossDomain)return{send:function(r,o){t=E(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),i.head.appendChild(t[0])},abort:function(){n&&n()}}});var Wt,Kt=[],qt=/(=)\\?(?=&|$)|\\?\\?/;E.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Kt.pop()||E.expando+\"_\"+_t++;return this[e]=!0,e}}),E.ajaxPrefilter(\"json jsonp\",function(e,t,r){var o,a,i,s=!1!==e.jsonp&&(qt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&qt.test(e.data)&&\"data\");if(s||\"jsonp\"===e.dataTypes[0])return o=e.jsonpCallback=b(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(qt,\"$1\"+o):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+o),e.converters[\"script json\"]=function(){return i||E.error(o+\" was not called\"),i[0]},e.dataTypes[0]=\"json\",a=n[o],n[o]=function(){i=arguments},r.always(function(){void 0===a?E(n).removeProp(o):n[o]=a,e[o]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(o)),i&&b(a)&&a(i[0]),i=a=void 0}),\"script\"}),v.createHTMLDocument=((Wt=i.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Wt.childNodes.length),E.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=i.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=i.location.href,t.head.appendChild(r)):t=i),o=D.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&E(a).remove(),E.merge([],o.childNodes)));var r,o,a},E.fn.load=function(e,t,n){var r,o,a,i=this,s=e.indexOf(\" \");return s>-1&&(r=mt(e.slice(s)),e=e.slice(0,s)),b(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(o=\"POST\"),i.length>0&&E.ajax({url:e,type:o||\"GET\",dataType:\"html\",data:t}).done(function(e){a=arguments,i.html(r?E(\"<div>\").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){i.each(function(){n.apply(this,a||[e.responseText,t,e])})}),this},E.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.expr.pseudos.animated=function(e){return E.grep(E.timers,function(t){return e===t.elem}).length},E.offset={setOffset:function(e,t,n){var r,o,a,i,s,u,l=E.css(e,\"position\"),c=E(e),d={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),a=E.css(e,\"top\"),u=E.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&(a+u).indexOf(\"auto\")>-1?(i=(r=c.position()).top,o=r.left):(i=parseFloat(a)||0,o=parseFloat(u)||0),b(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(d.top=t.top-s.top+i),null!=t.left&&(d.left=t.left-s.left+o),\"using\"in t?t.using.call(e,d):c.css(d)}},E.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){E.offset.setOffset(this,e,t)});var t,n,r=this[0];return r?r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if(\"fixed\"===E.css(r,\"position\"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&\"static\"===E.css(e,\"position\");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((o=E(e).offset()).top+=E.css(e,\"borderTopWidth\",!0),o.left+=E.css(e,\"borderLeftWidth\",!0))}return{top:t.top-o.top-E.css(r,\"marginTop\",!0),left:t.left-o.left-E.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&\"static\"===E.css(e,\"position\");)e=e.offsetParent;return e||_e})}}),E.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;E.fn[e]=function(r){return K(this,function(e,r,o){var a;if(y(e)?a=e:9===e.nodeType&&(a=e.defaultView),void 0===o)return a?a[t]:e[r];a?a.scrollTo(n?a.pageXOffset:o,n?o:a.pageYOffset):e[r]=o},e,r,arguments.length)}}),E.each([\"top\",\"left\"],function(e,t){E.cssHooks[t]=We(v.pixelPosition,function(e,n){if(n)return n=Ve(e,t),He.test(n)?E(e).position()[t]+\"px\":n})}),E.each({Height:\"height\",Width:\"width\"},function(e,t){E.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){E.fn[r]=function(o,a){var i=arguments.length&&(n||\"boolean\"!=typeof o),s=n||(!0===o||!0===a?\"margin\":\"border\");return K(this,function(t,n,o){var a;return y(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(a=t.documentElement,Math.max(t.body[\"scroll\"+e],a[\"scroll\"+e],t.body[\"offset\"+e],a[\"offset\"+e],a[\"client\"+e])):void 0===o?E.css(t,n,s):E.style(t,n,o,s)},t,i?o:void 0,i)}})}),E.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){E.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),E.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),E.proxy=function(e,t){var n,r,o;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),b(e))return r=u.call(arguments,2),(o=function(){return e.apply(t||this,r.concat(u.call(arguments)))}).guid=e.guid=e.guid||E.guid++,o},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=I,E.isFunction=b,E.isWindow=y,E.camelCase=Y,E.type=_,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},void 0===(r=function(){return E}.apply(t,[]))||(e.exports=r);var zt=n.jQuery,Gt=n.$;return E.noConflict=function(e){return n.$===E&&(n.$=Gt),e&&n.jQuery===E&&(n.jQuery=zt),E},o||(n.jQuery=n.$=E),E})},function(e,t,n){\"use strict\";var r=!(\"undefined\"==typeof window||!window.document||!window.document.createElement),o={canUseDOM:r,canUseWorkers:\"undefined\"!=typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};e.exports=o},function(e,t,n){\"use strict\";var r=n(63),o=n(111),a=Object.prototype.toString;function i(e){return\"[object Array]\"===a.call(e)}function s(e){return null!==e&&\"object\"==typeof e}function u(e){return\"[object Function]\"===a.call(e)}function l(e,t){if(null!==e&&void 0!==e)if(\"object\"!=typeof e&&(e=[e]),i(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.call(null,e[o],o,e)}e.exports={isArray:i,isArrayBuffer:function(e){return\"[object ArrayBuffer]\"===a.call(e)},isBuffer:o,isFormData:function(e){return\"undefined\"!=typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return\"string\"==typeof e},isNumber:function(e){return\"number\"==typeof e},isObject:s,isUndefined:function(e){return void 0===e},isDate:function(e){return\"[object Date]\"===a.call(e)},isFile:function(e){return\"[object File]\"===a.call(e)},isBlob:function(e){return\"[object Blob]\"===a.call(e)},isFunction:u,isStream:function(e){return s(e)&&u(e.pipe)},isURLSearchParams:function(e){return\"undefined\"!=typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return(\"undefined\"==typeof navigator||\"ReactNative\"!==navigator.product)&&\"undefined\"!=typeof window&&\"undefined\"!=typeof document},forEach:l,merge:function e(){var t={};function n(n,r){\"object\"==typeof t[r]&&\"object\"==typeof n?t[r]=e(t[r],n):t[r]=n}for(var r=0,o=arguments.length;r<o;r++)l(arguments[r],n);return t},extend:function(e,t,n){return l(t,function(t,o){e[o]=n&&\"function\"==typeof t?r(t,n):t}),e},trim:function(e){return e.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\")}}},function(e,t,n){\"use strict\";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){\"use strict\";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var u;if(void 0===t)u=new Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[n,r,o,a,i,s],c=0;(u=new Error(t.replace(/%s/g,function(){return l[c++]}))).name=\"Invariant Violation\"}throw u.framesToPop=1,u}}},function(e,t,n){\"use strict\";var r=null;e.exports={debugTool:r}},function(e,t,n){\"use strict\";var r=n(100),o=n(248),a=n(57);r.BoxedState=o.BoxedState,r.boxState=o.boxState,r.boxOut=a.boxOut,e.exports={default:r.box,_$:r.box,$_:r.boxOut,box:r.box,createBox:r.createBox,boxState:r.boxState,boxOut:r.boxOut,util:a,boxed:r}},function(e,t,n){e.exports=n(110)},function(e,t,n){\"use strict\";var r=n(4),o=n(5),a=n(79),i=n(19),s=n(80),u=n(23),l=n(33),c=n(1),d=[],f=0,p=a.getPooled(),h=!1,m=null;function g(){_.ReactReconcileTransaction&&m||r(\"123\")}var v=[{initialize:function(){this.dirtyComponentsLength=d.length},close:function(){this.dirtyComponentsLength!==d.length?(d.splice(0,this.dirtyComponentsLength),x()):d.length=0}},{initialize:function(){this.callbackQueue.reset()},close:function(){this.callbackQueue.notifyAll()}}];function b(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=a.getPooled(),this.reconcileTransaction=_.ReactReconcileTransaction.getPooled(!0)}function y(e,t){return e._mountOrder-t._mountOrder}function w(e){var t=e.dirtyComponentsLength;t!==d.length&&r(\"124\",t,d.length),d.sort(y),f++;for(var n=0;n<t;n++){var o,a=d[n],i=a._pendingCallbacks;if(a._pendingCallbacks=null,s.logTopLevelRenders){var l=a;a._currentElement.type.isReactTopLevelWrapper&&(l=a._renderedComponent),o=\"React update: \"+l.getName(),console.time(o)}if(u.performUpdateIfNecessary(a,e.reconcileTransaction,f),o&&console.timeEnd(o),i)for(var c=0;c<i.length;c++)e.callbackQueue.enqueue(i[c],a.getPublicInstance())}}o(b.prototype,l,{getTransactionWrappers:function(){return v},destructor:function(){this.dirtyComponentsLength=null,a.release(this.callbackQueue),this.callbackQueue=null,_.ReactReconcileTransaction.release(this.reconcileTransaction),this.reconcileTransaction=null},perform:function(e,t,n){return l.perform.call(this,this.reconcileTransaction.perform,this.reconcileTransaction,e,t,n)}}),i.addPoolingTo(b);var x=function(){for(;d.length||h;){if(d.length){var e=b.getPooled();e.perform(w,null,e),b.release(e)}if(h){h=!1;var t=p;p=a.getPooled(),t.notifyAll(),a.release(t)}}};var _={ReactReconcileTransaction:null,batchedUpdates:function(e,t,n,r,o,a){return g(),m.batchedUpdates(e,t,n,r,o,a)},enqueueUpdate:function e(t){g(),m.isBatchingUpdates?(d.push(t),null==t._updateBatchNumber&&(t._updateBatchNumber=f+1)):m.batchedUpdates(e,t)},flushBatchedUpdates:x,injection:{injectReconcileTransaction:function(e){e||r(\"126\"),_.ReactReconcileTransaction=e},injectBatchingStrategy:function(e){e||r(\"127\"),\"function\"!=typeof e.batchedUpdates&&r(\"128\"),\"boolean\"!=typeof e.isBatchingUpdates&&r(\"129\"),m=e}},asap:function(e,t){c(m.isBatchingUpdates,\"ReactUpdates.asap: Can't enqueue an asap callback in a context whereupdates are not being batched.\"),p.enqueue(e,t),h=!0}};e.exports=_},function(e,t,n){\"use strict\";e.exports={current:null}},function(e,t,n){\"use strict\";var r=n(5),o=n(19),a=n(11),i=(n(3),[\"dispatchConfig\",\"_targetInst\",\"nativeEvent\",\"isDefaultPrevented\",\"isPropagationStopped\",\"_dispatchListeners\",\"_dispatchInstances\"]),s={type:null,target:null,currentTarget:a.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};function u(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n;var o=this.constructor.Interface;for(var i in o)if(o.hasOwnProperty(i)){0;var s=o[i];s?this[i]=s(n):\"target\"===i?this.target=r:this[i]=n[i]}var u=null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue;return this.isDefaultPrevented=u?a.thatReturnsTrue:a.thatReturnsFalse,this.isPropagationStopped=a.thatReturnsFalse,this}r(u.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=a.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=a.thatReturnsTrue)},persist:function(){this.isPersistent=a.thatReturnsTrue},isPersistent:a.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;for(var n=0;n<i.length;n++)this[i[n]]=null}}),u.Interface=s,u.augmentClass=function(e,t){var n=function(){};n.prototype=this.prototype;var a=new n;r(a,e.prototype),e.prototype=a,e.prototype.constructor=e,e.Interface=r({},this.Interface,t),e.augmentClass=this.augmentClass,o.addPoolingTo(e,o.fourArgumentPooler)},o.addPoolingTo(u,o.fourArgumentPooler),e.exports=u},function(e,t,n){\"use strict\";var r=n(4),o=(n(1),function(e){if(this.instancePool.length){var t=this.instancePool.pop();return this.call(t,e),t}return new this(e)}),a=function(e){e instanceof this||r(\"25\"),e.destructor(),this.instancePool.length<this.poolSize&&this.instancePool.push(e)},i=o,s={addPoolingTo:function(e,t){var n=e;return n.instancePool=[],n.getPooled=t||i,n.poolSize||(n.poolSize=10),n.release=a,n},oneArgumentPooler:o,twoArgumentPooler:function(e,t){if(this.instancePool.length){var n=this.instancePool.pop();return this.call(n,e,t),n}return new this(e,t)},threeArgumentPooler:function(e,t,n){if(this.instancePool.length){var r=this.instancePool.pop();return this.call(r,e,t,n),r}return new this(e,t,n)},fourArgumentPooler:function(e,t,n,r){if(this.instancePool.length){var o=this.instancePool.pop();return this.call(o,e,t,n,r),o}return new this(e,t,n,r)}};e.exports=s},function(e,t,n){\"use strict\";var r=n(5),o=n(69),a=n(129),i=n(134),s=n(21),u=n(135),l=n(138),c=n(139),d=n(141),f=s.createElement,p=s.createFactory,h=s.cloneElement,m=r,g=function(e){return e},v={Children:{map:a.map,forEach:a.forEach,count:a.count,toArray:a.toArray,only:d},Component:o.Component,PureComponent:o.PureComponent,createElement:f,cloneElement:h,isValidElement:s.isValidElement,PropTypes:u,createClass:c,createFactory:p,createMixin:g,DOM:i,version:l,__spread:m};e.exports=v},function(e,t,n){\"use strict\";var r=n(5),o=n(17),a=(n(3),n(71),Object.prototype.hasOwnProperty),i=n(72),s={key:!0,ref:!0,__self:!0,__source:!0};function u(e){return void 0!==e.ref}function l(e){return void 0!==e.key}var c=function(e,t,n,r,o,a,s){var u={$$typeof:i,type:e,key:t,ref:n,props:s,_owner:a};return u};c.createElement=function(e,t,n){var r,i={},d=null,f=null;if(null!=t)for(r in u(t)&&(f=t.ref),l(t)&&(d=\"\"+t.key),void 0===t.__self?null:t.__self,void 0===t.__source?null:t.__source,t)a.call(t,r)&&!s.hasOwnProperty(r)&&(i[r]=t[r]);var p=arguments.length-2;if(1===p)i.children=n;else if(p>1){for(var h=Array(p),m=0;m<p;m++)h[m]=arguments[m+2];0,i.children=h}if(e&&e.defaultProps){var g=e.defaultProps;for(r in g)void 0===i[r]&&(i[r]=g[r])}return c(e,d,f,0,0,o.current,i)},c.createFactory=function(e){var t=c.createElement.bind(null,e);return t.type=e,t},c.cloneAndReplaceKey=function(e,t){return c(e.type,t,e.ref,e._self,e._source,e._owner,e.props)},c.cloneElement=function(e,t,n){var i,d,f=r({},e.props),p=e.key,h=e.ref,m=(e._self,e._source,e._owner);if(null!=t)for(i in u(t)&&(h=t.ref,m=o.current),l(t)&&(p=\"\"+t.key),e.type&&e.type.defaultProps&&(d=e.type.defaultProps),t)a.call(t,i)&&!s.hasOwnProperty(i)&&(void 0===t[i]&&void 0!==d?f[i]=d[i]:f[i]=t[i]);var g=arguments.length-2;if(1===g)f.children=n;else if(g>1){for(var v=Array(g),b=0;b<g;b++)v[b]=arguments[b+2];f.children=v}return c(e.type,p,h,0,0,m,f)},c.isValidElement=function(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===i},e.exports=c},function(e,t,n){\"use strict\";var r=n(4);n(1);function o(e,t){return(e&t)===t}var a={MUST_USE_PROPERTY:1,HAS_BOOLEAN_VALUE:4,HAS_NUMERIC_VALUE:8,HAS_POSITIVE_NUMERIC_VALUE:24,HAS_OVERLOADED_BOOLEAN_VALUE:32,injectDOMPropertyConfig:function(e){var t=a,n=e.Properties||{},i=e.DOMAttributeNamespaces||{},u=e.DOMAttributeNames||{},l=e.DOMPropertyNames||{},c=e.DOMMutationMethods||{};for(var d in e.isCustomAttribute&&s._isCustomAttributeFunctions.push(e.isCustomAttribute),n){s.properties.hasOwnProperty(d)&&r(\"48\",d);var f=d.toLowerCase(),p=n[d],h={attributeName:f,attributeNamespace:null,propertyName:d,mutationMethod:null,mustUseProperty:o(p,t.MUST_USE_PROPERTY),hasBooleanValue:o(p,t.HAS_BOOLEAN_VALUE),hasNumericValue:o(p,t.HAS_NUMERIC_VALUE),hasPositiveNumericValue:o(p,t.HAS_POSITIVE_NUMERIC_VALUE),hasOverloadedBooleanValue:o(p,t.HAS_OVERLOADED_BOOLEAN_VALUE)};if(h.hasBooleanValue+h.hasNumericValue+h.hasOverloadedBooleanValue<=1||r(\"50\",d),u.hasOwnProperty(d)){var m=u[d];h.attributeName=m}i.hasOwnProperty(d)&&(h.attributeNamespace=i[d]),l.hasOwnProperty(d)&&(h.propertyName=l[d]),c.hasOwnProperty(d)&&(h.mutationMethod=c[d]),s.properties[d]=h}}},i=\":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\",s={ID_ATTRIBUTE_NAME:\"data-reactid\",ROOT_ATTRIBUTE_NAME:\"data-reactroot\",ATTRIBUTE_NAME_START_CHAR:i,ATTRIBUTE_NAME_CHAR:i+\"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\",properties:{},getPossibleStandardName:null,_isCustomAttributeFunctions:[],isCustomAttribute:function(e){for(var t=0;t<s._isCustomAttributeFunctions.length;t++){if((0,s._isCustomAttributeFunctions[t])(e))return!0}return!1},injection:a};e.exports=s},function(e,t,n){\"use strict\";var r=n(151);n(13),n(3);function o(){r.attachRefs(this,this._currentElement)}var a={mountComponent:function(e,t,n,r,a,i){var s=e.mountComponent(t,n,r,a,i);return e._currentElement&&null!=e._currentElement.ref&&t.getReactMountReady().enqueue(o,e),s},getHostNode:function(e){return e.getHostNode()},unmountComponent:function(e,t){r.detachRefs(e,e._currentElement),e.unmountComponent(t)},receiveComponent:function(e,t,n,a){var i=e._currentElement;if(t!==i||a!==e._context){0;var s=r.shouldUpdateRefs(i,t);s&&r.detachRefs(e,i),e.receiveComponent(t,n,a),s&&e._currentElement&&null!=e._currentElement.ref&&n.getReactMountReady().enqueue(o,e)}},performUpdateIfNecessary:function(e,t,n){e._updateBatchNumber===n&&e.performUpdateIfNecessary(t)}};e.exports=a},function(e,t,n){\"use strict\";var r=n(47),o=n(35),a=n(48),i=n(84),s=\"undefined\"!=typeof document&&\"number\"==typeof document.documentMode||\"undefined\"!=typeof navigator&&\"string\"==typeof navigator.userAgent&&/\\bEdge\\/\\d/.test(navigator.userAgent);function u(e){if(s){var t=e.node,n=e.children;if(n.length)for(var r=0;r<n.length;r++)l(t,n[r],null);else null!=e.html?o(t,e.html):null!=e.text&&i(t,e.text)}}var l=a(function(e,t,n){11===t.node.nodeType||1===t.node.nodeType&&\"object\"===t.node.nodeName.toLowerCase()&&(null==t.node.namespaceURI||t.node.namespaceURI===r.html)?(u(t),e.insertBefore(t.node,n)):(e.insertBefore(t.node,n),u(t))});function c(){return this.node.nodeName}function d(e){return{node:e,children:[],html:null,text:null,toString:c}}d.insertTreeBefore=l,d.replaceChildWithTree=function(e,t){e.parentNode.replaceChild(t.node,e),u(t)},d.queueChild=function(e,t){s?e.children.push(t):e.node.appendChild(t.node)},d.queueHTML=function(e,t){s?e.html=t:o(e.node,t)},d.queueText=function(e,t){s?e.text=t:i(e.node,t)},e.exports=d},function(e,t){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(e){\"object\"==typeof window&&(n=window)}e.exports=n},function(e,t,n){\"use strict\";e.exports=function(e){for(var t=arguments.length-1,n=\"Minified React error #\"+e+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant=\"+e,r=0;r<t;r++)n+=\"&args[]=\"+encodeURIComponent(arguments[r+1]);n+=\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\";var o=new Error(n);throw o.name=\"Invariant Violation\",o.framesToPop=1,o}},function(e,t,n){\"use strict\";var r=n(28),o=n(41),a=n(76),i=n(77),s=(n(3),r.getListener);function u(e,t,n){var r=function(e,t,n){var r=t.dispatchConfig.phasedRegistrationNames[n];return s(e,r)}(e,n,t);r&&(n._dispatchListeners=a(n._dispatchListeners,r),n._dispatchInstances=a(n._dispatchInstances,e))}function l(e){e&&e.dispatchConfig.phasedRegistrationNames&&o.traverseTwoPhase(e._targetInst,u,e)}function c(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst,n=t?o.getParentInstance(t):null;o.traverseTwoPhase(n,u,e)}}function d(e,t,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,o=s(e,r);o&&(n._dispatchListeners=a(n._dispatchListeners,o),n._dispatchInstances=a(n._dispatchInstances,e))}}function f(e){e&&e.dispatchConfig.registrationName&&d(e._targetInst,0,e)}var p={accumulateTwoPhaseDispatches:function(e){i(e,l)},accumulateTwoPhaseDispatchesSkipTarget:function(e){i(e,c)},accumulateDirectDispatches:function(e){i(e,f)},accumulateEnterLeaveDispatches:function(e,t,n,r){o.traverseEnterLeave(n,r,d,e,t)}};e.exports=p},function(e,t,n){\"use strict\";var r=n(4),o=n(40),a=n(41),i=n(42),s=n(76),u=n(77),l=(n(1),{}),c=null,d=function(e,t){e&&(a.executeDispatchesInOrder(e,t),e.isPersistent()||e.constructor.release(e))},f=function(e){return d(e,!0)},p=function(e){return d(e,!1)},h=function(e){return\".\"+e._rootNodeID};var m={injection:{injectEventPluginOrder:o.injectEventPluginOrder,injectEventPluginsByName:o.injectEventPluginsByName},putListener:function(e,t,n){\"function\"!=typeof n&&r(\"94\",t,typeof n);var a=h(e);(l[t]||(l[t]={}))[a]=n;var i=o.registrationNameModules[t];i&&i.didPutListener&&i.didPutListener(e,t,n)},getListener:function(e,t){var n=l[t];if(function(e,t,n){switch(e){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":return!(!n.disabled||(r=t,\"button\"!==r&&\"input\"!==r&&\"select\"!==r&&\"textarea\"!==r));default:return!1}var r}(t,e._currentElement.type,e._currentElement.props))return null;var r=h(e);return n&&n[r]},deleteListener:function(e,t){var n=o.registrationNameModules[t];n&&n.willDeleteListener&&n.willDeleteListener(e,t);var r=l[t];r&&delete r[h(e)]},deleteAllListeners:function(e){var t=h(e);for(var n in l)if(l.hasOwnProperty(n)&&l[n][t]){var r=o.registrationNameModules[n];r&&r.willDeleteListener&&r.willDeleteListener(e,n),delete l[n][t]}},extractEvents:function(e,t,n,r){for(var a,i=o.plugins,u=0;u<i.length;u++){var l=i[u];if(l){var c=l.extractEvents(e,t,n,r);c&&(a=s(a,c))}}return a},enqueueEvents:function(e){e&&(c=s(c,e))},processEventQueue:function(e){var t=c;c=null,u(t,e?f:p),c&&r(\"95\"),i.rethrowCaughtError()},__purge:function(){l={}},__getListenerBank:function(){return l}};e.exports=m},function(e,t,n){\"use strict\";var r=n(18),o=n(43),a={view:function(e){if(e.view)return e.view;var t=o(e);if(t.window===t)return t;var n=t.ownerDocument;return n?n.defaultView||n.parentWindow:window},detail:function(e){return e.detail||0}};function i(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(i,a),e.exports=i},function(e,t,n){\"use strict\";var r={remove:function(e){e._reactInternalInstance=void 0},get:function(e){return e._reactInternalInstance},has:function(e){return void 0!==e._reactInternalInstance},set:function(e,t){e._reactInternalInstance=t}};e.exports=r},function(e,t,n){\"use strict\";t.__esModule=!0;t.addLeadingSlash=function(e){return\"/\"===e.charAt(0)?e:\"/\"+e},t.stripLeadingSlash=function(e){return\"/\"===e.charAt(0)?e.substr(1):e};var r=t.hasBasename=function(e,t){return new RegExp(\"^\"+t+\"(\\\\/|\\\\?|#|$)\",\"i\").test(e)};t.stripBasename=function(e,t){return r(e,t)?e.substr(t.length):e},t.stripTrailingSlash=function(e){return\"/\"===e.charAt(e.length-1)?e.slice(0,-1):e},t.parsePath=function(e){var t=e||\"/\",n=\"\",r=\"\",o=t.indexOf(\"#\");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf(\"?\");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:\"?\"===n?\"\":n,hash:\"#\"===r?\"\":r}},t.createPath=function(e){var t=e.pathname,n=e.search,r=e.hash,o=t||\"/\";return n&&\"?\"!==n&&(o+=\"?\"===n.charAt(0)?n:\"?\"+n),r&&\"#\"!==r&&(o+=\"#\"===r.charAt(0)?r:\"#\"+r),o}},function(e,t,n){\"use strict\";var r={};e.exports=r},function(e,t,n){\"use strict\";var r=n(4),o=(n(1),{}),a={reinitializeTransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitData?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(e,t,n,o,a,i,s,u){var l,c;this.isInTransaction()&&r(\"27\");try{this._isInTransaction=!0,l=!0,this.initializeAll(0),c=e.call(t,n,o,a,i,s,u),l=!1}finally{try{if(l)try{this.closeAll(0)}catch(e){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return c},initializeAll:function(e){for(var t=this.transactionWrappers,n=e;n<t.length;n++){var r=t[n];try{this.wrapperInitData[n]=o,this.wrapperInitData[n]=r.initialize?r.initialize.call(this):null}finally{if(this.wrapperInitData[n]===o)try{this.initializeAll(n+1)}catch(e){}}}},closeAll:function(e){this.isInTransaction()||r(\"28\");for(var t=this.transactionWrappers,n=e;n<t.length;n++){var a,i=t[n],s=this.wrapperInitData[n];try{a=!0,s!==o&&i.close&&i.close.call(this,s),a=!1}finally{if(a)try{this.closeAll(n+1)}catch(e){}}}this.wrapperInitData.length=0}};e.exports=a},function(e,t,n){\"use strict\";var r=n(29),o=n(83),a={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:n(45),button:function(e){var t=e.button;return\"which\"in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return\"pageX\"in e?e.pageX:e.clientX+o.currentScrollLeft},pageY:function(e){return\"pageY\"in e?e.pageY:e.clientY+o.currentScrollTop}};function i(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(i,a),e.exports=i},function(e,t,n){\"use strict\";var r,o=n(9),a=n(47),i=/^[ \\r\\n\\t\\f]/,s=/<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/,u=n(48)(function(e,t){if(e.namespaceURI!==a.svg||\"innerHTML\"in e)e.innerHTML=t;else{(r=r||document.createElement(\"div\")).innerHTML=\"<svg>\"+t+\"</svg>\";for(var n=r.firstChild;n.firstChild;)e.appendChild(n.firstChild)}});if(o.canUseDOM){var l=document.createElement(\"div\");l.innerHTML=\" \",\"\"===l.innerHTML&&(u=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),i.test(t)||\"<\"===t[0]&&s.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),l=null}e.exports=u},function(e,t,n){\"use strict\";var r=/[\"'&<>]/;e.exports=function(e){return\"boolean\"==typeof e||\"number\"==typeof e?\"\"+e:function(e){var t,n=\"\"+e,o=r.exec(n);if(!o)return n;var a=\"\",i=0,s=0;for(i=o.index;i<n.length;i++){switch(n.charCodeAt(i)){case 34:t=\"&quot;\";break;case 38:t=\"&amp;\";break;case 39:t=\"&#x27;\";break;case 60:t=\"&lt;\";break;case 62:t=\"&gt;\";break;default:continue}s!==i&&(a+=n.substring(s,i)),s=i+1,a+=t}return s!==i?a+n.substring(s,i):a}(e)}},function(e,t,n){\"use strict\";var r,o=n(5),a=n(40),i=n(172),s=n(83),u=n(173),l=n(44),c={},d=!1,f=0,p={topAbort:\"abort\",topAnimationEnd:u(\"animationend\")||\"animationend\",topAnimationIteration:u(\"animationiteration\")||\"animationiteration\",topAnimationStart:u(\"animationstart\")||\"animationstart\",topBlur:\"blur\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topChange:\"change\",topClick:\"click\",topCompositionEnd:\"compositionend\",topCompositionStart:\"compositionstart\",topCompositionUpdate:\"compositionupdate\",topContextMenu:\"contextmenu\",topCopy:\"copy\",topCut:\"cut\",topDoubleClick:\"dblclick\",topDrag:\"drag\",topDragEnd:\"dragend\",topDragEnter:\"dragenter\",topDragExit:\"dragexit\",topDragLeave:\"dragleave\",topDragOver:\"dragover\",topDragStart:\"dragstart\",topDrop:\"drop\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topFocus:\"focus\",topInput:\"input\",topKeyDown:\"keydown\",topKeyPress:\"keypress\",topKeyUp:\"keyup\",topLoadedData:\"loadeddata\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",topMouseDown:\"mousedown\",topMouseMove:\"mousemove\",topMouseOut:\"mouseout\",topMouseOver:\"mouseover\",topMouseUp:\"mouseup\",topPaste:\"paste\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topScroll:\"scroll\",topSeeked:\"seeked\",topSeeking:\"seeking\",topSelectionChange:\"selectionchange\",topStalled:\"stalled\",topSuspend:\"suspend\",topTextInput:\"textInput\",topTimeUpdate:\"timeupdate\",topTouchCancel:\"touchcancel\",topTouchEnd:\"touchend\",topTouchMove:\"touchmove\",topTouchStart:\"touchstart\",topTransitionEnd:u(\"transitionend\")||\"transitionend\",topVolumeChange:\"volumechange\",topWaiting:\"waiting\",topWheel:\"wheel\"},h=\"_reactListenersID\"+String(Math.random()).slice(2);var m=o({},i,{ReactEventListener:null,injection:{injectReactEventListener:function(e){e.setHandleTopLevel(m.handleTopLevel),m.ReactEventListener=e}},setEnabled:function(e){m.ReactEventListener&&m.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!m.ReactEventListener||!m.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var n=t,r=function(e){return Object.prototype.hasOwnProperty.call(e,h)||(e[h]=f++,c[e[h]]={}),c[e[h]]}(n),o=a.registrationNameDependencies[e],i=0;i<o.length;i++){var s=o[i];r.hasOwnProperty(s)&&r[s]||(\"topWheel\"===s?l(\"wheel\")?m.ReactEventListener.trapBubbledEvent(\"topWheel\",\"wheel\",n):l(\"mousewheel\")?m.ReactEventListener.trapBubbledEvent(\"topWheel\",\"mousewheel\",n):m.ReactEventListener.trapBubbledEvent(\"topWheel\",\"DOMMouseScroll\",n):\"topScroll\"===s?l(\"scroll\",!0)?m.ReactEventListener.trapCapturedEvent(\"topScroll\",\"scroll\",n):m.ReactEventListener.trapBubbledEvent(\"topScroll\",\"scroll\",m.ReactEventListener.WINDOW_HANDLE):\"topFocus\"===s||\"topBlur\"===s?(l(\"focus\",!0)?(m.ReactEventListener.trapCapturedEvent(\"topFocus\",\"focus\",n),m.ReactEventListener.trapCapturedEvent(\"topBlur\",\"blur\",n)):l(\"focusin\")&&(m.ReactEventListener.trapBubbledEvent(\"topFocus\",\"focusin\",n),m.ReactEventListener.trapBubbledEvent(\"topBlur\",\"focusout\",n)),r.topBlur=!0,r.topFocus=!0):p.hasOwnProperty(s)&&m.ReactEventListener.trapBubbledEvent(s,p[s],n),r[s]=!0)}},trapBubbledEvent:function(e,t,n){return m.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return m.ReactEventListener.trapCapturedEvent(e,t,n)},supportsEventPageXY:function(){if(!document.createEvent)return!1;var e=document.createEvent(\"MouseEvent\");return null!=e&&\"pageX\"in e},ensureScrollValueMonitoring:function(){if(void 0===r&&(r=m.supportsEventPageXY()),!r&&!d){var e=s.refreshScrollValues;m.ReactEventListener.monitorScrollValue(e),d=!0}}});e.exports=m},function(e,t,n){\"use strict\";(function(t){var r=n(10),o=n(113),a={\"Content-Type\":\"application/x-www-form-urlencoded\"};function i(e,t){!r.isUndefined(e)&&r.isUndefined(e[\"Content-Type\"])&&(e[\"Content-Type\"]=t)}var s,u={adapter:(\"undefined\"!=typeof XMLHttpRequest?s=n(64):void 0!==t&&(s=n(64)),s),transformRequest:[function(e,t){return o(t,\"Content-Type\"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(i(t,\"application/x-www-form-urlencoded;charset=utf-8\"),e.toString()):r.isObject(e)?(i(t,\"application/json;charset=utf-8\"),JSON.stringify(e)):e}],transformResponse:[function(e){if(\"string\"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};u.headers={common:{Accept:\"application/json, text/plain, */*\"}},r.forEach([\"delete\",\"get\",\"head\"],function(e){u.headers[e]={}}),r.forEach([\"post\",\"put\",\"patch\"],function(e){u.headers[e]=r.merge(a)}),e.exports=u}).call(t,n(39))},function(e,t){var n,r,o=e.exports={};function a(){throw new Error(\"setTimeout has not been defined\")}function i(){throw new Error(\"clearTimeout has not been defined\")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n=\"function\"==typeof setTimeout?setTimeout:a}catch(e){n=a}try{r=\"function\"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var u,l=[],c=!1,d=-1;function f(){c&&u&&(c=!1,u.length?l=u.concat(l):d=-1,l.length&&p())}function p(){if(!c){var e=s(f);c=!0;for(var t=l.length;t;){for(u=l,l=[];++d<t;)u&&u[d].run();d=-1,t=l.length}u=null,c=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===i||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function m(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new h(e,t)),1!==l.length||c||s(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title=\"browser\",o.browser=!0,o.env={},o.argv=[],o.version=\"\",o.versions={},o.on=m,o.addListener=m,o.once=m,o.off=m,o.removeListener=m,o.removeAllListeners=m,o.emit=m,o.prependListener=m,o.prependOnceListener=m,o.listeners=function(e){return[]},o.binding=function(e){throw new Error(\"process.binding is not supported\")},o.cwd=function(){return\"/\"},o.chdir=function(e){throw new Error(\"process.chdir is not supported\")},o.umask=function(){return 0}},function(e,t,n){\"use strict\";var r=n(4),o=(n(1),null),a={};function i(){if(o)for(var e in a){var t=a[e],n=o.indexOf(e);if(n>-1||r(\"96\",e),!l.plugins[n]){t.extractEvents||r(\"97\",e),l.plugins[n]=t;var i=t.eventTypes;for(var u in i)s(i[u],t,u)||r(\"98\",u,e)}}}function s(e,t,n){l.eventNameDispatchConfigs.hasOwnProperty(n)&&r(\"99\",n),l.eventNameDispatchConfigs[n]=e;var o=e.phasedRegistrationNames;if(o){for(var a in o){if(o.hasOwnProperty(a))u(o[a],t,n)}return!0}return!!e.registrationName&&(u(e.registrationName,t,n),!0)}function u(e,t,n){l.registrationNameModules[e]&&r(\"100\",e),l.registrationNameModules[e]=t,l.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(e){o&&r(\"101\"),o=Array.prototype.slice.call(e),i()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];a.hasOwnProperty(n)&&a[n]===o||(a[n]&&r(\"102\",n),a[n]=o,t=!0)}t&&i()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return l.registrationNameModules[t.registrationName]||null;if(void 0!==t.phasedRegistrationNames){var n=t.phasedRegistrationNames;for(var r in n)if(n.hasOwnProperty(r)){var o=l.registrationNameModules[n[r]];if(o)return o}}return null},_resetEventPlugins:function(){for(var e in o=null,a)a.hasOwnProperty(e)&&delete a[e];l.plugins.length=0;var t=l.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=l.registrationNameModules;for(var i in r)r.hasOwnProperty(i)&&delete r[i]}};e.exports=l},function(e,t,n){\"use strict\";var r,o,a=n(4),i=n(42);n(1),n(3);function s(e,t,n,r){var o=e.type||\"unknown-event\";e.currentTarget=u.getNodeFromInstance(r),t?i.invokeGuardedCallbackWithCatch(o,n,e):i.invokeGuardedCallback(o,n,e),e.currentTarget=null}var u={isEndish:function(e){return\"topMouseUp\"===e||\"topTouchEnd\"===e||\"topTouchCancel\"===e},isMoveish:function(e){return\"topMouseMove\"===e||\"topTouchMove\"===e},isStartish:function(e){return\"topMouseDown\"===e||\"topTouchStart\"===e},executeDirectDispatch:function(e){var t=e._dispatchListeners,n=e._dispatchInstances;Array.isArray(t)&&a(\"103\"),e.currentTarget=t?u.getNodeFromInstance(n):null;var r=t?t(e):null;return e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,r},executeDispatchesInOrder:function(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)s(e,t,n[o],r[o]);else n&&s(e,t,n,r);e._dispatchListeners=null,e._dispatchInstances=null},executeDispatchesInOrderStopAtTrue:function(e){var t=function(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t)){for(var r=0;r<t.length&&!e.isPropagationStopped();r++)if(t[r](e,n[r]))return n[r]}else if(t&&t(e,n))return n;return null}(e);return e._dispatchInstances=null,e._dispatchListeners=null,t},hasDispatches:function(e){return!!e._dispatchListeners},getInstanceFromNode:function(e){return r.getInstanceFromNode(e)},getNodeFromInstance:function(e){return r.getNodeFromInstance(e)},isAncestor:function(e,t){return o.isAncestor(e,t)},getLowestCommonAncestor:function(e,t){return o.getLowestCommonAncestor(e,t)},getParentInstance:function(e){return o.getParentInstance(e)},traverseTwoPhase:function(e,t,n){return o.traverseTwoPhase(e,t,n)},traverseEnterLeave:function(e,t,n,r,a){return o.traverseEnterLeave(e,t,n,r,a)},injection:{injectComponentTree:function(e){r=e},injectTreeTraversal:function(e){o=e}}};e.exports=u},function(e,t,n){\"use strict\";var r=null;function o(e,t,n){try{t(n)}catch(e){null===r&&(r=e)}}var a={invokeGuardedCallback:o,invokeGuardedCallbackWithCatch:o,rethrowCaughtError:function(){if(r){var e=r;throw r=null,e}}};e.exports=a},function(e,t,n){\"use strict\";e.exports=function(e){var t=e.target||e.srcElement||window;return t.correspondingUseElement&&(t=t.correspondingUseElement),3===t.nodeType?t.parentNode:t}},function(e,t,n){\"use strict\";var r,o=n(9);o.canUseDOM&&(r=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature(\"\",\"\")),e.exports=function(e,t){if(!o.canUseDOM||t&&!(\"addEventListener\"in document))return!1;var n=\"on\"+e,a=n in document;if(!a){var i=document.createElement(\"div\");i.setAttribute(n,\"return;\"),a=\"function\"==typeof i[n]}return!a&&r&&\"wheel\"===e&&(a=document.implementation.hasFeature(\"Events.wheel\",\"3.0\")),a}},function(e,t,n){\"use strict\";var r={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function o(e){var t=this.nativeEvent;if(t.getModifierState)return t.getModifierState(e);var n=r[e];return!!n&&!!t[n]}e.exports=function(e){return o}},function(e,t,n){\"use strict\";var r=n(24),o=n(157),a=(n(6),n(13),n(48)),i=n(35),s=n(84);function u(e,t){return Array.isArray(t)&&(t=t[1]),t?t.nextSibling:e.firstChild}var l=a(function(e,t,n){e.insertBefore(t,n)});function c(e,t,n){r.insertTreeBefore(e,t,n)}function d(e,t,n){Array.isArray(t)?function(e,t,n,r){var o=t;for(;;){var a=o.nextSibling;if(l(e,o,r),o===n)break;o=a}}(e,t[0],t[1],n):l(e,t,n)}function f(e,t){if(Array.isArray(t)){var n=t[1];p(e,t=t[0],n),e.removeChild(n)}e.removeChild(t)}function p(e,t,n){for(;;){var r=t.nextSibling;if(r===n)break;e.removeChild(r)}}var h=o.dangerouslyReplaceNodeWithMarkup;var m={dangerouslyReplaceNodeWithMarkup:h,replaceDelimitedText:function(e,t,n){var r=e.parentNode,o=e.nextSibling;o===t?n&&l(r,document.createTextNode(n),o):n?(s(o,n),p(r,o,t)):p(r,e,t)},processUpdates:function(e,t){for(var n=0;n<t.length;n++){var r=t[n];switch(r.type){case\"INSERT_MARKUP\":c(e,r.content,u(e,r.afterNode));break;case\"MOVE_EXISTING\":d(e,r.fromNode,u(e,r.afterNode));break;case\"SET_MARKUP\":i(e,r.content);break;case\"TEXT_CONTENT\":s(e,r.content);break;case\"REMOVE_NODE\":f(e,r.fromNode)}}}};e.exports=m},function(e,t,n){\"use strict\";e.exports={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"}},function(e,t,n){\"use strict\";e.exports=function(e){return\"undefined\"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}},function(e,t,n){\"use strict\";var r=n(4),o=n(175),a=n(73)(n(20).isValidElement),i=(n(1),n(3),{button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0});function s(e){null!=e.checkedLink&&null!=e.valueLink&&r(\"87\")}function u(e){s(e),(null!=e.value||null!=e.onChange)&&r(\"88\")}function l(e){s(e),(null!=e.checked||null!=e.onChange)&&r(\"89\")}var c={value:function(e,t,n){return!e[t]||i[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error(\"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.\")},checked:function(e,t,n){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error(\"You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.\")},onChange:a.func},d={};function f(e){if(e){var t=e.getName();if(t)return\" Check the render method of `\"+t+\"`.\"}return\"\"}var p={checkPropTypes:function(e,t,n){for(var r in c){if(c.hasOwnProperty(r))var a=c[r](t,r,e,\"prop\",null,o);if(a instanceof Error&&!(a.message in d)){d[a.message]=!0;f(n)}}},getValue:function(e){return e.valueLink?(u(e),e.valueLink.value):e.value},getChecked:function(e){return e.checkedLink?(l(e),e.checkedLink.value):e.checked},executeOnChange:function(e,t){return e.valueLink?(u(e),e.valueLink.requestChange(t.target.value)):e.checkedLink?(l(e),e.checkedLink.requestChange(t.target.checked)):e.onChange?e.onChange.call(void 0,t):void 0}};e.exports=p},function(e,t,n){\"use strict\";var r=n(4),o=(n(1),!1),a={replaceNodeWithMarkup:null,processChildrenUpdates:null,injection:{injectEnvironment:function(e){o&&r(\"104\"),a.replaceNodeWithMarkup=e.replaceNodeWithMarkup,a.processChildrenUpdates=e.processChildrenUpdates,o=!0}}};e.exports=a},function(e,t,n){\"use strict\";var r=Object.prototype.hasOwnProperty;function o(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}e.exports=function(e,t){if(o(e,t))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof t||null===t)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(var i=0;i<n.length;i++)if(!r.call(t,n[i])||!o(e[n[i]],t[n[i]]))return!1;return!0}},function(e,t,n){\"use strict\";e.exports=function(e,t){var n=null===e||!1===e,r=null===t||!1===t;if(n||r)return n===r;var o=typeof e,a=typeof t;return\"string\"===o||\"number\"===o?\"string\"===a||\"number\"===a:\"object\"===a&&e.type===t.type&&e.key===t.key}},function(e,t,n){\"use strict\";var r={escape:function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+e).replace(/[=:]/g,function(e){return t[e]})},unescape:function(e){var t={\"=0\":\"=\",\"=2\":\":\"};return(\"\"+(\".\"===e[0]&&\"$\"===e[1]?e.substring(2):e.substring(1))).replace(/(=0|=2)/g,function(e){return t[e]})}};e.exports=r},function(e,t,n){\"use strict\";var r=n(4),o=(n(17),n(30)),a=(n(13),n(16));n(1),n(3);function i(e){a.enqueueUpdate(e)}function s(e){var t=typeof e;if(\"object\"!==t)return t;var n=e.constructor&&e.constructor.name||t,r=Object.keys(e);return r.length>0&&r.length<20?n+\" (keys: \"+r.join(\", \")+\")\":n}function u(e,t){var n=o.get(e);return n||null}var l={isMounted:function(e){var t=o.get(e);return!!t&&!!t._renderedComponent},enqueueCallback:function(e,t,n){l.validateCallback(t,n);var r=u(e);if(!r)return null;r._pendingCallbacks?r._pendingCallbacks.push(t):r._pendingCallbacks=[t],i(r)},enqueueCallbackInternal:function(e,t){e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],i(e)},enqueueForceUpdate:function(e){var t=u(e);t&&(t._pendingForceUpdate=!0,i(t))},enqueueReplaceState:function(e,t,n){var r=u(e);r&&(r._pendingStateQueue=[t],r._pendingReplaceState=!0,void 0!==n&&null!==n&&(l.validateCallback(n,\"replaceState\"),r._pendingCallbacks?r._pendingCallbacks.push(n):r._pendingCallbacks=[n]),i(r))},enqueueSetState:function(e,t){var n=u(e);n&&((n._pendingStateQueue||(n._pendingStateQueue=[])).push(t),i(n))},enqueueElementInternal:function(e,t,n){e._pendingElement=t,e._context=n,i(e)},validateCallback:function(e,t){e&&\"function\"!=typeof e&&r(\"122\",t,s(e))}};e.exports=l},function(e,t,n){\"use strict\";n(5);var r=n(11),o=(n(3),r);e.exports=o},function(e,t,n){\"use strict\";e.exports=function(e){var t,n=e.keyCode;return\"charCode\"in e?0===(t=e.charCode)&&13===n&&(t=13):t=n,t>=32||13===t?t:0}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o=n(246),a=n(247),i=void 0;function s(e){return e||e!==i&&null!==e&&!Number.isNaN(e)}function u(e){return!!e&&\"object\"===(void 0===e?\"undefined\":r(e))}function l(e){return u(e)&&e.constructor===Array}function c(e,t){var n=!u(e)&&Number.parseFloat(e);return Number.isFinite(n)&&+n===n?n:t}function d(e,t){var n=!u(e)&&Number.parseFloat(e);return Number.isInteger(n)&&+n===n?n:t}function f(e,t){var n=!u(e)&&Number.parseFloat(e);return Number.isInteger(n)&&+n===n&&n>=0?n:t}function p(e){return f(e)!==i}function h(e){return f(e,e)}function m(e){return void 0===e}function g(e){return o(e)?e.apply(void 0,Array.prototype.slice.call(arguments,1)):e}function v(e,t,n,r){return t.length&&e.length>=t.length&&e.substr(0,t.length)===t?g(n,e,t):g(r,e,t)}function b(e,t,n,r){return t.length&&e.length>=t.length&&e.substr(e.length-t.length)===t?g(n,e,t):g(r,e,t)}function y(e,t,n,r,o){return e.length>=t.length+n.length&&w(prop,t)&&x(prop,n)?g(r,e,t,n):g(o,e,t,n)}function w(e,t){return v(e,t,!0,!1)}function x(e,t){return b(e,t,!0,!1)}function _(e,t,n){return y(e,t,n,!0,!1)}function E(e,t){return e.substring(t.length,e.length)}function k(e,t){return e.substring(0,e.length-t.length)}function S(e,t,n){return e.substring(t.length,e.length-n.length)}function C(e,t){return t+e}e.exports.UNDEFINED=i,e.exports.isString=a,e.exports.isFunction=o,e.exports.isValid=s,e.exports.isNumber=function(e){return\"number\"==typeof e},e.exports.extend=function(e,t){if(!t||!u(t))return e;var n=Object.keys(t),r=n.length;for(;r--;){var o=n[r];e[o]=t[o]}return e},e.exports.hasOwnProperty=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},e.exports.isObjectLike=u,e.exports.isArray=l,e.exports.isNumeric=function(e){var t=!u(e)&&Number.parseFloat(e);return Number.isFinite(t)&&+t===t},e.exports.isNumericInteger=function(e){var t=!u(e)&&Number.parseFloat(e);return Number.isInteger(t)&&+t===t},e.exports.toNumberOrDefault=c,e.exports.toNumber=function(e){return c(e,e)},e.exports.toIntegerOrDefault=d,e.exports.toInteger=function(e){return d(e,e)},e.exports.toArrayIndexOrDefault=f,e.exports.isArrayIndex=p,e.exports.toArrayIndex=h,e.exports.returnsAlwaysFalse=function(){return!1},e.exports.returnsAlwaysTrue=function(){return!0},e.exports.isUndefined=m,e.exports.isNull=function(e){return null===e},e.exports.isNullOrUndefined=function(e){return null===e||void 0===e},e.exports.resolveArg=g,e.exports.ifStartsWith=v,e.exports.ifEndsWith=b,e.exports.ifWrappedWith=y,e.exports.startsWith=w,e.exports.endsWith=x,e.exports.wrappedWith=_,e.exports.removePrefix=function(e,t){return v(e,t,E,e)},e.exports.removeSuffix=function(e,t){return b(e,t,k,e)},e.exports.unwrap=function(e,t,n){return y(e,t,n,S,e)},e.exports.prefixWith=C,e.exports.suffixWith=function(e,t){return e+t},e.exports.wrapWith=function(e,t,n){return t+e+n},e.exports.prefixOnce=function(e,t){return v(e,t,e,C)},e.exports.suffixOnce=function(e,t){return b(arg,t,arg,C)},e.exports.wrapOnce=function(e,t,n){return y(e,t,n,e,_)},e.exports.firstDefined=function(){for(var e=0;e<arguments.length;e++)if(void 0!==arguments[e])return arguments[e]},e.exports.firstValid=function(){for(var e=void 0,t=0;t<arguments.length;t++){var n=arguments[t];if(s(n))return n;n!==i&&(e=n)}return e};var O,T=((O=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i;return T.returned=e,T}).clearDefault=function(){var e=T.returned;return T.returned=i,e},O.restoreDefault=function(e){T.returned=e},O.setDefault=function(e){T.returned=e},O);function P(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i,n=i;if(u(this)&&(this.constructor===Object||this.constructor===Array)){for(var r=Object.keys(this),o=r.length,a=T.clearDefault();o--;){var s=r[o];if(e.call(t,this[s],h(s),this)===T){n=T.returned;break}}T.restoreDefault(a)}return n}function I(e,t){return!0}function D(e,t){return this==e}function N(e,t){return-1!==this.indexOf(t)||\"number\"==typeof t&&t>=0&&Number.isInteger(t)&&-1!==this.indexOf(Number.prototype.toString.call(t))}function A(e,t){return this.hasOwnProperty(t)}function j(e,t){if(!N.call(this,e,t))return T(!0)}function L(e,t,n){if(!this.hasOwnProperty(t))return T(!0)}function R(e){return function(t,n,r){if(!e.call(this,t,n,r))return T(!0)}}function M(e,t,n){return T(!0)}function U(e,t,n){if(t!=this)return T(!0)}function B(e,t,n,r,a,i){return o(e)?o(r)?r(e):e:l(e)?n:u(e)?t:m(e)?a:i}function H(e){return!!u(this)&&(s(e)?!!P.call(this,B(e,L,j,R,M,U),e):Object.keys(this).length>0)}function $(e,t){p(t)?this.arrayValues[t]=e:this.objectKeys.push(t)}function F(e,t){p(t)||this.objectKeys.push(t)}function V(e){var t=!l(e),n={arrayValues:t?[]:e,objectKeys:[]};return P.call(e,t?$:F,n),n}function W(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=this,o=V(r),a=o.arrayValues,s=o.objectKeys,u=i,l=!0;function c(e,o){for(var a=e.length,i=0;i<a;i++){var s=o?i:e[i],c=o?e[i]:r[s];if(t.call(n,c,s,r)===T){u=T.returned,l=!1;break}}}function d(e,o){for(var a=e.length;a--;){var i=o?a:e[a],s=o?e[a]:r[i];if(t.call(n,s,i,r)===T){u=T.returned,l=!1;break}}}var f=T.clearDefault();return e?(s.sort(),d(s,!1),l&&d(a,!0)):(c(a,!0),l&&(s.sort(),c(s,!1))),T.restoreDefault(f),u}function K(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;return W.call(this,!1,e,t)}function q(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;return W.call(this,!0,e,t)}function z(){if(u(this)){var e=Object.assign(this.constructor(),this);return l(this)&&P.call(this,function(t,n){p(n)||(e[n]=t)}),e}throw new TypeError(\"Invalid this for cloneArrayObject, got \"+JSON.stringify(this))}function G(){if(arguments.length>0&&l(this))for(var e=arguments.length;e--;){var t=arguments[e];if(l(t))G.apply(this,t);else if(u(t))G.apply(this,Object.keys(t));else{var n=this.indexOf(t);n>=0&&this.splice(n,1)}}return this}function Y(){if(u(this)){if(l(this))return this.length;for(var e=Object.keys(this),t=0,n=e.length;n--;){var r=f(e[n]);if(r!==i){var o=r+1;t<o&&(t=o)}}return t}return 0}function X(e){if(u(e)){for(var t=l(e)?[]:{},n=Object.keys(e),r=n.length;r--;){var o=n[r],a=e[o];t[o]=u(a)?X(a):a}return t}return e}function Q(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=this;t=t||Number.MAX_SAFE_INTEGER;var a=!n,c=void 0,d=void 0;if(u(o)&&u(e))for(var f=Object.keys(e),p=f.length;p--;){var h=f[p],m=e[h];s(m)&&(d=c=u(o)&&o.hasOwnProperty(h)?o[h]:i,s(c)?t>1&&u(c)&&!l(c)&&(d=Q.call(c,m,t-1,n,r)):d=m,d!==c&&(a||(o=z.call(o),a=!0),r&&u(d)&&(d=X(d)),o[h]=d))}return o}function J(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=null;if(t!==i&&u(e)&&(e.constructor===Object||e.constructor===Array)){var a=this,s=B(t,A,N,null,I,D);o(t)||(n=t),P.call(e,function(e,t,o){if(e!==i){var u=s.call(n,e,t,o);if(u===T)return T;u&&(r||(r=a||{}),r[t]=e)}},n)}return r}function Z(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=null;if(u(e)&&(e.constructor===Object||e.constructor===Array)){var a=this,s=B(t,A,N,null,I,D);o(t)||(n=t),P.call(e,function(e,t,o){if(e!==i){var u=s.call(n,e,t,o);if(u===T)return T;u||(r||(r=a||{}),r[t]=e)}},n)}return r}function ee(e,t){var n=l(this)?[]:{};return J.call(n,this,e,t),n}function te(e,t){var n=[];return K.call(this,function(r,o,a){var i=e.call(t,r,o,a);if(i===T)return T;i&&n.push(r)}),n}function ne(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i,n=l(this)?[]:{};return P.call(this,function(r,o,a){var s=e.call(t,r,o,a);if(s===T)return T;s!==i&&(n[o]=s)}),n}function re(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i,n=[];return K.call(this,function(r,o,a){var s=e.call(t,r,o,a);if(s===T)return T;s!==i&&n.push(s)}),n}function oe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i;return!!K.call(this,function(n,r,o){T.setDefault(!0);var a=e.call(t,n,r,o);return a===T?T:a?T(!0):void 0})}function ae(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i;return!K.call(this,function(n,r,o){T.setDefault(!1);var a=e.call(t,n,r,o);return a===T?T:a?void 0:T(!0)})}function ie(e,t){var n=arguments[2],r=arguments.length<=2;if(e.call(this,function(e,o,a){if(r)n=e,r=!1;else{T.setDefault(n);var s=t.call(i,n,e,o,a);if(s===T)return n=T.returned,T;n=s}}),r)throw new TypeError(\"Reduce of empty array with no initial value\");return n}function se(e){var t=Array.prototype.slice.call(arguments,0);return t.unshift(P),ie.apply(this,t)}function ue(e){var t=Array.prototype.slice.call(arguments,0);return t.unshift(K),ie.apply(this,t)}function le(e){var t=Array.prototype.slice.call(arguments,0);return t.unshift(q),ie.apply(this,t)}e.exports.BREAK=T,e.exports.eachProp=P,e.exports.hasOwnProperties=H,e.exports.arrayObjectKeys=V,e.exports.eachDir=W,e.exports.each=K,e.exports.eachRev=q,e.exports.cloneArrayObject=z,e.exports.deleteItems=G,e.exports.arrayLength=Y,e.exports.deepClone=X,e.exports.mergeDefaults=Q,e.exports.copyFiltered=J,e.exports.copyFilteredNot=Z,e.exports.objFiltered=ee,e.exports.objFilter=te,e.exports.objMapped=ne,e.exports.objMap=re,e.exports.objSome=oe,e.exports.objEvery=ae,e.exports.objReduceIterated=ie,e.exports.objReduce=se,e.exports.objReduceLeft=ue,e.exports.objReduceRight=le;var ce={};ce.prototype=Object.create(Object.prototype),ce.prototype.arrayLength=Y,ce.prototype.cloneArrayObject=z,ce.prototype.copyFiltered=J,ce.prototype.copyFilteredNot=Z,ce.prototype.deepClone=X,ce.prototype.each=K,ce.prototype.eachProp=P,ce.prototype.eachRev=q,ce.prototype.every=ae,ce.prototype.everyProp=ae,ce.prototype.filter=te,ce.prototype.filteredProps=ee,ce.prototype.filterProps=te,ce.prototype.forEach=K,ce.prototype.hasOwnProperties=H,ce.prototype.map=re,ce.prototype.mappedProps=ne,ce.prototype.mapProps=re,ce.prototype.mergeDefaults=Q,ce.prototype.reduce=ue,ce.prototype.reduceProps=se,ce.prototype.reducePropsLeft=ue,ce.prototype.reducePropsRight=le,ce.prototype.reduceRight=le,ce.prototype.some=oe,ce.prototype.someProps=oe;var de=[];function fe(e){return!u(e)||e.constructor!==Object&&e.constructor!==Array||Object.setPrototypeOf(e,e.constructor===Array?de.prototype:ce.prototype),e}de.prototype=Object.create(Array.prototype),de.prototype.arrayLength=Y,de.prototype.cloneArrayObject=z,de.prototype.copyFiltered=J,de.prototype.copyFilteredNot=Z,de.prototype.deepClone=X,de.prototype.deleteItems=G,de.prototype.each=K,de.prototype.eachProp=P,de.prototype.eachRev=q,de.prototype.everyProp=ae,de.prototype.filteredProps=ee,de.prototype.filterProps=te,de.prototype.hasOwnProperties=H,de.prototype.mappedProps=ne,de.prototype.mapProps=re,de.prototype.mergeDefaults=Q,de.prototype.reduceProps=se,de.prototype.reducePropsLeft=ue,de.prototype.reducePropsRight=le,de.prototype.someProps=oe,e.exports.boxOut=fe,e.exports.$_=fe},function(e,t){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=function(e,t){var n=e[1]||\"\",r=e[3];if(!r)return n;if(t&&\"function\"==typeof btoa){var o=(i=r,\"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+\" */\"),a=r.sources.map(function(e){return\"/*# sourceURL=\"+r.sourceRoot+e+\" */\"});return[n].concat(a).concat([o]).join(\"\\n\")}var i;return[n].join(\"\\n\")}(t,e);return t[2]?\"@media \"+t[2]+\"{\"+n+\"}\":n}).join(\"\")},t.i=function(e,n){\"string\"==typeof e&&(e=[[null,e,\"\"]]);for(var r={},o=0;o<this.length;o++){var a=this[o][0];\"number\"==typeof a&&(r[a]=!0)}for(o=0;o<e.length;o++){var i=e[o];\"number\"==typeof i[0]&&r[i[0]]||(n&&!i[2]?i[2]=n:n&&(i[2]=\"(\"+i[2]+\") and (\"+n+\")\"),t.push(i))}},t}},function(e,t,n){var r,o,a={},i=(r=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===o&&(o=r.apply(this,arguments)),o}),s=function(e){var t={};return function(e){return void 0===t[e]&&(t[e]=function(e){return document.querySelector(e)}.call(this,e)),t[e]}}(),u=null,l=0,c=[],d=n(259);function f(e,t){for(var n=0;n<e.length;n++){var r=e[n],o=a[r.id];if(o){o.refs++;for(var i=0;i<o.parts.length;i++)o.parts[i](r.parts[i]);for(;i<r.parts.length;i++)o.parts.push(b(r.parts[i],t))}else{var s=[];for(i=0;i<r.parts.length;i++)s.push(b(r.parts[i],t));a[r.id]={id:r.id,refs:1,parts:s}}}}function p(e,t){for(var n=[],r={},o=0;o<e.length;o++){var a=e[o],i=t.base?a[0]+t.base:a[0],s={css:a[1],media:a[2],sourceMap:a[3]};r[i]?r[i].parts.push(s):n.push(r[i]={id:i,parts:[s]})}return n}function h(e,t){var n=s(e.insertInto);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");var r=c[c.length-1];if(\"top\"===e.insertAt)r?r.nextSibling?n.insertBefore(t,r.nextSibling):n.appendChild(t):n.insertBefore(t,n.firstChild),c.push(t);else{if(\"bottom\"!==e.insertAt)throw new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");n.appendChild(t)}}function m(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e);var t=c.indexOf(e);t>=0&&c.splice(t,1)}function g(e){var t=document.createElement(\"style\");return e.attrs.type=\"text/css\",v(t,e.attrs),h(e,t),t}function v(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function b(e,t){var n,r,o,a;if(t.transform&&e.css){if(!(a=t.transform(e.css)))return function(){};e.css=a}if(t.singleton){var i=l++;n=u||(u=g(t)),r=x.bind(null,n,i,!1),o=x.bind(null,n,i,!0)}else e.sourceMap&&\"function\"==typeof URL&&\"function\"==typeof URL.createObjectURL&&\"function\"==typeof URL.revokeObjectURL&&\"function\"==typeof Blob&&\"function\"==typeof btoa?(n=function(e){var t=document.createElement(\"link\");return e.attrs.type=\"text/css\",e.attrs.rel=\"stylesheet\",v(t,e.attrs),h(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,a=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||a)&&(r=d(r));o&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+\" */\");var i=new Blob([r],{type:\"text/css\"}),s=e.href;e.href=URL.createObjectURL(i),s&&URL.revokeObjectURL(s)}.bind(null,n,t),o=function(){m(n),n.href&&URL.revokeObjectURL(n.href)}):(n=g(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute(\"media\",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){m(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if(\"undefined\"!=typeof DEBUG&&DEBUG&&\"object\"!=typeof document)throw new Error(\"The style-loader cannot be used in a non-browser environment\");(t=t||{}).attrs=\"object\"==typeof t.attrs?t.attrs:{},t.singleton||(t.singleton=i()),t.insertInto||(t.insertInto=\"head\"),t.insertAt||(t.insertAt=\"bottom\");var n=p(e,t);return f(n,t),function(e){for(var r=[],o=0;o<n.length;o++){var i=n[o];(s=a[i.id]).refs--,r.push(s)}e&&f(p(e,t),t);for(o=0;o<r.length;o++){var s;if(0===(s=r[o]).refs){for(var u=0;u<s.parts.length;u++)s.parts[u]();delete a[s.id]}}}};var y,w=(y=[],function(e,t){return y[e]=t,y.filter(Boolean).join(\"\\n\")});function x(e,t,n,r){var o=n?\"\":r.css;if(e.styleSheet)e.styleSheet.cssText=w(t,o);else{var a=document.createTextNode(o),i=e.childNodes;i[t]&&e.removeChild(i[t]),i.length?e.insertBefore(a,i[t]):e.appendChild(a)}}},function(e,t,n){\"use strict\";t.__esModule=!0,t.locationsAreEqual=t.createLocation=void 0;var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=s(n(101)),a=s(n(102)),i=n(31);function s(e){return e&&e.__esModule?e:{default:e}}t.createLocation=function(e,t,n,a){var s=void 0;\"string\"==typeof e?(s=(0,i.parsePath)(e)).state=t:(void 0===(s=r({},e)).pathname&&(s.pathname=\"\"),s.search?\"?\"!==s.search.charAt(0)&&(s.search=\"?\"+s.search):s.search=\"\",s.hash?\"#\"!==s.hash.charAt(0)&&(s.hash=\"#\"+s.hash):s.hash=\"\",void 0!==t&&void 0===s.state&&(s.state=t));try{s.pathname=decodeURI(s.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname \"'+s.pathname+'\" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(s.key=n),a?s.pathname?\"/\"!==s.pathname.charAt(0)&&(s.pathname=(0,o.default)(s.pathname,a.pathname)):s.pathname=a.pathname:s.pathname||(s.pathname=\"/\"),s},t.locationsAreEqual=function(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&(0,a.default)(e.state,t.state)}},function(e,t,n){\"use strict\";t.__esModule=!0;var r,o=n(7),a=(r=o)&&r.__esModule?r:{default:r};t.default=function(){var e=null,t=[];return{setPrompt:function(t){return(0,a.default)(null==e,\"A history supports only one prompt at a time\"),e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i=\"function\"==typeof e?e(t,n):e;\"string\"==typeof i?\"function\"==typeof r?r(i,o):((0,a.default)(!1,\"A history needs a getUserConfirmation function in order to use a prompt message\"),o(!0)):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0,r=function(){n&&e.apply(void 0,arguments)};return t.push(r),function(){n=!1,t=t.filter(function(e){return e!==r})}},notifyListeners:function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach(function(e){return e.apply(void 0,n)})}}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){for(var n=\"undefined\"!=typeof window&&\"undefined\"!=typeof document,r=[\"Edge\",\"Trident\",\"Firefox\"],o=0,a=0;a<r.length;a+=1)if(n&&navigator.userAgent.indexOf(r[a])>=0){o=1;break}var i=n&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},o))}};function s(e){return e&&\"[object Function]\"==={}.toString.call(e)}function u(e,t){if(1!==e.nodeType)return[];var n=getComputedStyle(e,null);return t?n[t]:n}function l(e){return\"HTML\"===e.nodeName?e:e.parentNode||e.host}function c(e){if(!e)return document.body;switch(e.nodeName){case\"HTML\":case\"BODY\":return e.ownerDocument.body;case\"#document\":return e.body}var t=u(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/(auto|scroll|overlay)/.test(n+o+r)?e:c(l(e))}var d=n&&!(!window.MSInputMethodContext||!document.documentMode),f=n&&/MSIE 10/.test(navigator.userAgent);function p(e){return 11===e?d:10===e?f:d||f}function h(e){if(!e)return document.documentElement;for(var t=p(10)?document.body:null,n=e.offsetParent;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var r=n&&n.nodeName;return r&&\"BODY\"!==r&&\"HTML\"!==r?-1!==[\"TD\",\"TABLE\"].indexOf(n.nodeName)&&\"static\"===u(n,\"position\")?h(n):n:e?e.ownerDocument.documentElement:document.documentElement}function m(e){return null!==e.parentNode?m(e.parentNode):e}function g(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,r=n?e:t,o=n?t:e,a=document.createRange();a.setStart(r,0),a.setEnd(o,0);var i,s,u=a.commonAncestorContainer;if(e!==u&&t!==u||r.contains(o))return\"BODY\"===(s=(i=u).nodeName)||\"HTML\"!==s&&h(i.firstElementChild)!==i?h(u):u;var l=m(e);return l.host?g(l.host,t):g(e,m(t).host)}function v(e){var t=\"top\"===(arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"top\")?\"scrollTop\":\"scrollLeft\",n=e.nodeName;if(\"BODY\"===n||\"HTML\"===n){var r=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||r)[t]}return e[t]}function b(e,t){var n=\"x\"===t?\"Left\":\"Top\",r=\"Left\"===n?\"Right\":\"Bottom\";return parseFloat(e[\"border\"+n+\"Width\"],10)+parseFloat(e[\"border\"+r+\"Width\"],10)}function y(e,t,n,r){return Math.max(t[\"offset\"+e],t[\"scroll\"+e],n[\"client\"+e],n[\"offset\"+e],n[\"scroll\"+e],p(10)?n[\"offset\"+e]+r[\"margin\"+(\"Height\"===e?\"Top\":\"Left\")]+r[\"margin\"+(\"Height\"===e?\"Bottom\":\"Right\")]:0)}function w(){var e=document.body,t=document.documentElement,n=p(10)&&getComputedStyle(t);return{height:y(\"Height\",e,t,n),width:y(\"Width\",e,t,n)}}var x=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},_=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),E=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function S(e){return k({},e,{right:e.left+e.width,bottom:e.top+e.height})}function C(e){var t={};try{if(p(10)){t=e.getBoundingClientRect();var n=v(e,\"top\"),r=v(e,\"left\");t.top+=n,t.left+=r,t.bottom+=n,t.right+=r}else t=e.getBoundingClientRect()}catch(e){}var o={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},a=\"HTML\"===e.nodeName?w():{},i=a.width||e.clientWidth||o.right-o.left,s=a.height||e.clientHeight||o.bottom-o.top,l=e.offsetWidth-i,c=e.offsetHeight-s;if(l||c){var d=u(e);l-=b(d,\"x\"),c-=b(d,\"y\"),o.width-=l,o.height-=c}return S(o)}function O(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=p(10),o=\"HTML\"===t.nodeName,a=C(e),i=C(t),s=c(e),l=u(t),d=parseFloat(l.borderTopWidth,10),f=parseFloat(l.borderLeftWidth,10);n&&\"HTML\"===t.nodeName&&(i.top=Math.max(i.top,0),i.left=Math.max(i.left,0));var h=S({top:a.top-i.top-d,left:a.left-i.left-f,width:a.width,height:a.height});if(h.marginTop=0,h.marginLeft=0,!r&&o){var m=parseFloat(l.marginTop,10),g=parseFloat(l.marginLeft,10);h.top-=d-m,h.bottom-=d-m,h.left-=f-g,h.right-=f-g,h.marginTop=m,h.marginLeft=g}return(r&&!n?t.contains(s):t===s&&\"BODY\"!==s.nodeName)&&(h=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=v(t,\"top\"),o=v(t,\"left\"),a=n?-1:1;return e.top+=r*a,e.bottom+=r*a,e.left+=o*a,e.right+=o*a,e}(h,t)),h}function T(e){if(!e||!e.parentElement||p())return document.documentElement;for(var t=e.parentElement;t&&\"none\"===u(t,\"transform\");)t=t.parentElement;return t||document.documentElement}function P(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a={top:0,left:0},i=o?T(e):g(e,t);if(\"viewport\"===r)a=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,r=O(e,n),o=Math.max(n.clientWidth,window.innerWidth||0),a=Math.max(n.clientHeight,window.innerHeight||0),i=t?0:v(n),s=t?0:v(n,\"left\");return S({top:i-r.top+r.marginTop,left:s-r.left+r.marginLeft,width:o,height:a})}(i,o);else{var s=void 0;\"scrollParent\"===r?\"BODY\"===(s=c(l(t))).nodeName&&(s=e.ownerDocument.documentElement):s=\"window\"===r?e.ownerDocument.documentElement:r;var d=O(s,i,o);if(\"HTML\"!==s.nodeName||function e(t){var n=t.nodeName;return\"BODY\"!==n&&\"HTML\"!==n&&(\"fixed\"===u(t,\"position\")||e(l(t)))}(i))a=d;else{var f=w(),p=f.height,h=f.width;a.top+=d.top-d.marginTop,a.bottom=p+d.top,a.left+=d.left-d.marginLeft,a.right=h+d.left}}return a.left+=n,a.top+=n,a.right-=n,a.bottom-=n,a}function I(e,t,n,r,o){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf(\"auto\"))return e;var i=P(n,r,a,o),s={top:{width:i.width,height:t.top-i.top},right:{width:i.right-t.right,height:i.height},bottom:{width:i.width,height:i.bottom-t.bottom},left:{width:t.left-i.left,height:i.height}},u=Object.keys(s).map(function(e){return k({key:e},s[e],{area:(t=s[e],t.width*t.height)});var t}).sort(function(e,t){return t.area-e.area}),l=u.filter(function(e){var t=e.width,r=e.height;return t>=n.clientWidth&&r>=n.clientHeight}),c=l.length>0?l[0].key:u[0].key,d=e.split(\"-\")[1];return c+(d?\"-\"+d:\"\")}function D(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return O(n,r?T(t):g(t,n),r)}function N(e){var t=getComputedStyle(e),n=parseFloat(t.marginTop)+parseFloat(t.marginBottom),r=parseFloat(t.marginLeft)+parseFloat(t.marginRight);return{width:e.offsetWidth+r,height:e.offsetHeight+n}}function A(e){var t={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function j(e,t,n){n=n.split(\"-\")[0];var r=N(e),o={width:r.width,height:r.height},a=-1!==[\"right\",\"left\"].indexOf(n),i=a?\"top\":\"left\",s=a?\"left\":\"top\",u=a?\"height\":\"width\",l=a?\"width\":\"height\";return o[i]=t[i]+t[u]/2-r[u]/2,o[s]=n===s?t[s]-r[l]:t[A(s)],o}function L(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function R(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===n});var r=L(e,function(e){return e[t]===n});return e.indexOf(r)}(e,\"name\",n))).forEach(function(e){e.function&&console.warn(\"`modifier.function` is deprecated, use `modifier.fn`!\");var n=e.function||e.fn;e.enabled&&s(n)&&(t.offsets.popper=S(t.offsets.popper),t.offsets.reference=S(t.offsets.reference),t=n(t,e))}),t}function M(e,t){return e.some(function(e){var n=e.name;return e.enabled&&n===t})}function U(e){for(var t=[!1,\"ms\",\"Webkit\",\"Moz\",\"O\"],n=e.charAt(0).toUpperCase()+e.slice(1),r=0;r<t.length;r++){var o=t[r],a=o?\"\"+o+n:e;if(void 0!==document.body.style[a])return a}return null}function B(e){var t=e.ownerDocument;return t?t.defaultView:window}function H(e,t,n,r){n.updateBound=r,B(e).addEventListener(\"resize\",n.updateBound,{passive:!0});var o=c(e);return function e(t,n,r,o){var a=\"BODY\"===t.nodeName,i=a?t.ownerDocument.defaultView:t;i.addEventListener(n,r,{passive:!0}),a||e(c(i.parentNode),n,r,o),o.push(i)}(o,\"scroll\",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function $(){var e,t;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(e=this.reference,t=this.state,B(e).removeEventListener(\"resize\",t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener(\"scroll\",t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t))}function F(e){return\"\"!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function V(e,t){Object.keys(t).forEach(function(n){var r=\"\";-1!==[\"width\",\"height\",\"top\",\"right\",\"bottom\",\"left\"].indexOf(n)&&F(t[n])&&(r=\"px\"),e.style[n]=t[n]+r})}function W(e,t,n){var r=L(e,function(e){return e.name===t}),o=!!r&&e.some(function(e){return e.name===n&&e.enabled&&e.order<r.order});if(!o){var a=\"`\"+t+\"`\",i=\"`\"+n+\"`\";console.warn(i+\" modifier is required by \"+a+\" modifier in order to work, be sure to include it before \"+a+\"!\")}return o}var K=[\"auto-start\",\"auto\",\"auto-end\",\"top-start\",\"top\",\"top-end\",\"right-start\",\"right\",\"right-end\",\"bottom-end\",\"bottom\",\"bottom-start\",\"left-end\",\"left\",\"left-start\"],q=K.slice(3);function z(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=q.indexOf(e),r=q.slice(n+1).concat(q.slice(0,n));return t?r.reverse():r}var G={FLIP:\"flip\",CLOCKWISE:\"clockwise\",COUNTERCLOCKWISE:\"counterclockwise\"};function Y(e,t,n,r){var o=[0,0],a=-1!==[\"right\",\"left\"].indexOf(r),i=e.split(/(\\+|\\-)/).map(function(e){return e.trim()}),s=i.indexOf(L(i,function(e){return-1!==e.search(/,|\\s/)}));i[s]&&-1===i[s].indexOf(\",\")&&console.warn(\"Offsets separated by white space(s) are deprecated, use a comma (,) instead.\");var u=/\\s*,\\s*|\\s+/,l=-1!==s?[i.slice(0,s).concat([i[s].split(u)[0]]),[i[s].split(u)[1]].concat(i.slice(s+1))]:[i];return(l=l.map(function(e,r){var o=(1===r?!a:a)?\"height\":\"width\",i=!1;return e.reduce(function(e,t){return\"\"===e[e.length-1]&&-1!==[\"+\",\"-\"].indexOf(t)?(e[e.length-1]=t,i=!0,e):i?(e[e.length-1]+=t,i=!1,e):e.concat(t)},[]).map(function(e){return function(e,t,n,r){var o=e.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/),a=+o[1],i=o[2];if(!a)return e;if(0===i.indexOf(\"%\")){var s=void 0;switch(i){case\"%p\":s=n;break;case\"%\":case\"%r\":default:s=r}return S(s)[t]/100*a}if(\"vh\"===i||\"vw\"===i)return(\"vh\"===i?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*a;return a}(e,o,t,n)})})).forEach(function(e,t){e.forEach(function(n,r){F(n)&&(o[t]+=n*(\"-\"===e[r-1]?-1:1))})}),o}var X={placement:\"bottom\",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split(\"-\")[0],r=t.split(\"-\")[1];if(r){var o=e.offsets,a=o.reference,i=o.popper,s=-1!==[\"bottom\",\"top\"].indexOf(n),u=s?\"left\":\"top\",l=s?\"width\":\"height\",c={start:E({},u,a[u]),end:E({},u,a[u]+a[l]-i[l])};e.offsets.popper=k({},i,c[r])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,r=e.placement,o=e.offsets,a=o.popper,i=o.reference,s=r.split(\"-\")[0],u=void 0;return u=F(+n)?[+n,0]:Y(n,a,i,s),\"left\"===s?(a.top+=u[0],a.left-=u[1]):\"right\"===s?(a.top+=u[0],a.left+=u[1]):\"top\"===s?(a.left+=u[0],a.top-=u[1]):\"bottom\"===s&&(a.left+=u[0],a.top+=u[1]),e.popper=a,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||h(e.instance.popper);e.instance.reference===n&&(n=h(n));var r=U(\"transform\"),o=e.instance.popper.style,a=o.top,i=o.left,s=o[r];o.top=\"\",o.left=\"\",o[r]=\"\";var u=P(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);o.top=a,o.left=i,o[r]=s,t.boundaries=u;var l=t.priority,c=e.offsets.popper,d={primary:function(e){var n=c[e];return c[e]<u[e]&&!t.escapeWithReference&&(n=Math.max(c[e],u[e])),E({},e,n)},secondary:function(e){var n=\"right\"===e?\"left\":\"top\",r=c[n];return c[e]>u[e]&&!t.escapeWithReference&&(r=Math.min(c[n],u[e]-(\"right\"===e?c.width:c.height))),E({},n,r)}};return l.forEach(function(e){var t=-1!==[\"left\",\"top\"].indexOf(e)?\"primary\":\"secondary\";c=k({},c,d[t](e))}),e.offsets.popper=c,e},priority:[\"left\",\"right\",\"top\",\"bottom\"],padding:5,boundariesElement:\"scrollParent\"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,r=t.reference,o=e.placement.split(\"-\")[0],a=Math.floor,i=-1!==[\"top\",\"bottom\"].indexOf(o),s=i?\"right\":\"bottom\",u=i?\"left\":\"top\",l=i?\"width\":\"height\";return n[s]<a(r[u])&&(e.offsets.popper[u]=a(r[u])-n[l]),n[u]>a(r[s])&&(e.offsets.popper[u]=a(r[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!W(e.instance.modifiers,\"arrow\",\"keepTogether\"))return e;var r=t.element;if(\"string\"==typeof r){if(!(r=e.instance.popper.querySelector(r)))return e}else if(!e.instance.popper.contains(r))return console.warn(\"WARNING: `arrow.element` must be child of its popper element!\"),e;var o=e.placement.split(\"-\")[0],a=e.offsets,i=a.popper,s=a.reference,l=-1!==[\"left\",\"right\"].indexOf(o),c=l?\"height\":\"width\",d=l?\"Top\":\"Left\",f=d.toLowerCase(),p=l?\"left\":\"top\",h=l?\"bottom\":\"right\",m=N(r)[c];s[h]-m<i[f]&&(e.offsets.popper[f]-=i[f]-(s[h]-m)),s[f]+m>i[h]&&(e.offsets.popper[f]+=s[f]+m-i[h]),e.offsets.popper=S(e.offsets.popper);var g=s[f]+s[c]/2-m/2,v=u(e.instance.popper),b=parseFloat(v[\"margin\"+d],10),y=parseFloat(v[\"border\"+d+\"Width\"],10),w=g-e.offsets.popper[f]-b-y;return w=Math.max(Math.min(i[c]-m,w),0),e.arrowElement=r,e.offsets.arrow=(E(n={},f,Math.round(w)),E(n,p,\"\"),n),e},element:\"[x-arrow]\"},flip:{order:600,enabled:!0,fn:function(e,t){if(M(e.instance.modifiers,\"inner\"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=P(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),r=e.placement.split(\"-\")[0],o=A(r),a=e.placement.split(\"-\")[1]||\"\",i=[];switch(t.behavior){case G.FLIP:i=[r,o];break;case G.CLOCKWISE:i=z(r);break;case G.COUNTERCLOCKWISE:i=z(r,!0);break;default:i=t.behavior}return i.forEach(function(s,u){if(r!==s||i.length===u+1)return e;r=e.placement.split(\"-\")[0],o=A(r);var l=e.offsets.popper,c=e.offsets.reference,d=Math.floor,f=\"left\"===r&&d(l.right)>d(c.left)||\"right\"===r&&d(l.left)<d(c.right)||\"top\"===r&&d(l.bottom)>d(c.top)||\"bottom\"===r&&d(l.top)<d(c.bottom),p=d(l.left)<d(n.left),h=d(l.right)>d(n.right),m=d(l.top)<d(n.top),g=d(l.bottom)>d(n.bottom),v=\"left\"===r&&p||\"right\"===r&&h||\"top\"===r&&m||\"bottom\"===r&&g,b=-1!==[\"top\",\"bottom\"].indexOf(r),y=!!t.flipVariations&&(b&&\"start\"===a&&p||b&&\"end\"===a&&h||!b&&\"start\"===a&&m||!b&&\"end\"===a&&g);(f||v||y)&&(e.flipped=!0,(f||v)&&(r=i[u+1]),y&&(a=function(e){return\"end\"===e?\"start\":\"start\"===e?\"end\":e}(a)),e.placement=r+(a?\"-\"+a:\"\"),e.offsets.popper=k({},e.offsets.popper,j(e.instance.popper,e.offsets.reference,e.placement)),e=R(e.instance.modifiers,e,\"flip\"))}),e},behavior:\"flip\",padding:5,boundariesElement:\"viewport\"},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split(\"-\")[0],r=e.offsets,o=r.popper,a=r.reference,i=-1!==[\"left\",\"right\"].indexOf(n),s=-1===[\"top\",\"left\"].indexOf(n);return o[i?\"left\":\"top\"]=a[n]-(s?o[i?\"width\":\"height\"]:0),e.placement=A(t),e.offsets.popper=S(o),e}},hide:{order:800,enabled:!0,fn:function(e){if(!W(e.instance.modifiers,\"hide\",\"preventOverflow\"))return e;var t=e.offsets.reference,n=L(e.instance.modifiers,function(e){return\"preventOverflow\"===e.name}).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes[\"x-out-of-boundaries\"]=\"\"}else{if(!1===e.hide)return e;e.hide=!1,e.attributes[\"x-out-of-boundaries\"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,r=t.y,o=e.offsets.popper,a=L(e.instance.modifiers,function(e){return\"applyStyle\"===e.name}).gpuAcceleration;void 0!==a&&console.warn(\"WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!\");var i=void 0!==a?a:t.gpuAcceleration,s=C(h(e.instance.popper)),u={position:o.position},l={left:Math.floor(o.left),top:Math.round(o.top),bottom:Math.round(o.bottom),right:Math.floor(o.right)},c=\"bottom\"===n?\"top\":\"bottom\",d=\"right\"===r?\"left\":\"right\",f=U(\"transform\"),p=void 0,m=void 0;if(m=\"bottom\"===c?-s.height+l.bottom:l.top,p=\"right\"===d?-s.width+l.right:l.left,i&&f)u[f]=\"translate3d(\"+p+\"px, \"+m+\"px, 0)\",u[c]=0,u[d]=0,u.willChange=\"transform\";else{var g=\"bottom\"===c?-1:1,v=\"right\"===d?-1:1;u[c]=m*g,u[d]=p*v,u.willChange=c+\", \"+d}var b={\"x-placement\":e.placement};return e.attributes=k({},b,e.attributes),e.styles=k({},u,e.styles),e.arrowStyles=k({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:\"bottom\",y:\"right\"},applyStyle:{order:900,enabled:!0,fn:function(e){var t,n;return V(e.instance.popper,e.styles),t=e.instance.popper,n=e.attributes,Object.keys(n).forEach(function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)}),e.arrowElement&&Object.keys(e.arrowStyles).length&&V(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,r,o){var a=D(o,t,e,n.positionFixed),i=I(n.placement,a,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute(\"x-placement\",i),V(t,{position:n.positionFixed?\"fixed\":\"absolute\"}),n},gpuAcceleration:void 0}}},Q=function(){function e(t,n){var r=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};x(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(r.update)},this.update=i(this.update.bind(this)),this.options=k({},e.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(k({},e.Defaults.modifiers,o.modifiers)).forEach(function(t){r.options.modifiers[t]=k({},e.Defaults.modifiers[t]||{},o.modifiers?o.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return k({name:e},r.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&s(e.onLoad)&&e.onLoad(r.reference,r.popper,r.options,e,r.state)}),this.update();var a=this.options.eventsEnabled;a&&this.enableEventListeners(),this.state.eventsEnabled=a}return _(e,[{key:\"update\",value:function(){return function(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=D(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=I(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=j(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?\"fixed\":\"absolute\",e=R(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}.call(this)}},{key:\"destroy\",value:function(){return function(){return this.state.isDestroyed=!0,M(this.modifiers,\"applyStyle\")&&(this.popper.removeAttribute(\"x-placement\"),this.popper.style.position=\"\",this.popper.style.top=\"\",this.popper.style.left=\"\",this.popper.style.right=\"\",this.popper.style.bottom=\"\",this.popper.style.willChange=\"\",this.popper.style[U(\"transform\")]=\"\"),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:\"enableEventListeners\",value:function(){return function(){this.state.eventsEnabled||(this.state=H(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:\"disableEventListeners\",value:function(){return $.call(this)}}]),e}();Q.Utils=(\"undefined\"!=typeof window?window:e).PopperUtils,Q.placements=K,Q.Defaults=X,t.default=Q}.call(t,n(25))},function(e,t,n){\"use strict\";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t,n){\"use strict\";var r=n(10),o=n(114),a=n(116),i=n(117),s=n(118),u=n(65),l=\"undefined\"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(119);e.exports=function(e){return new Promise(function(t,c){var d=e.data,f=e.headers;r.isFormData(d)&&delete f[\"Content-Type\"];var p=new XMLHttpRequest,h=\"onreadystatechange\",m=!1;if(\"undefined\"==typeof window||!window.XDomainRequest||\"withCredentials\"in p||s(e.url)||(p=new window.XDomainRequest,h=\"onload\",m=!0,p.onprogress=function(){},p.ontimeout=function(){}),e.auth){var g=e.auth.username||\"\",v=e.auth.password||\"\";f.Authorization=\"Basic \"+l(g+\":\"+v)}if(p.open(e.method.toUpperCase(),a(e.url,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,p[h]=function(){if(p&&(4===p.readyState||m)&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf(\"file:\"))){var n=\"getAllResponseHeaders\"in p?i(p.getAllResponseHeaders()):null,r={data:e.responseType&&\"text\"!==e.responseType?p.response:p.responseText,status:1223===p.status?204:p.status,statusText:1223===p.status?\"No Content\":p.statusText,headers:n,config:e,request:p};o(t,c,r),p=null}},p.onerror=function(){c(u(\"Network Error\",e,null,p)),p=null},p.ontimeout=function(){c(u(\"timeout of \"+e.timeout+\"ms exceeded\",e,\"ECONNABORTED\",p)),p=null},r.isStandardBrowserEnv()){var b=n(120),y=(e.withCredentials||s(e.url))&&e.xsrfCookieName?b.read(e.xsrfCookieName):void 0;y&&(f[e.xsrfHeaderName]=y)}if(\"setRequestHeader\"in p&&r.forEach(f,function(e,t){void 0===d&&\"content-type\"===t.toLowerCase()?delete f[t]:p.setRequestHeader(t,e)}),e.withCredentials&&(p.withCredentials=!0),e.responseType)try{p.responseType=e.responseType}catch(t){if(\"json\"!==e.responseType)throw t}\"function\"==typeof e.onDownloadProgress&&p.addEventListener(\"progress\",e.onDownloadProgress),\"function\"==typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener(\"progress\",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){p&&(p.abort(),c(e),p=null)}),void 0===d&&(d=null),p.send(d)})}},function(e,t,n){\"use strict\";var r=n(115);e.exports=function(e,t,n,o,a){var i=new Error(e);return r(i,t,n,o,a)}},function(e,t,n){\"use strict\";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){\"use strict\";function r(e){this.message=e}r.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},r.prototype.__CANCEL__=!0,e.exports=r},function(e,t,n){var r,o;\"function\"==typeof Symbol&&Symbol.iterator;void 0===(o=\"function\"==typeof(r=function(){var e=function(e){\"use strict\";var t,n,r=\"xregexp\",o={astral:!1,natives:!1},a={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i={},s={},u={},l=[],c={default:/\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??|[\\s\\S]/,class:/\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|[\\s\\S]/},d=/\\$(?:{([\\w$]+)}|(\\d\\d?|[\\s\\S]))/g,f=a.exec.call(/()??/,\"\")[1]===e,p=function(){var e=!0;try{new RegExp(\"\",\"u\")}catch(t){e=!1}return e}(),h=function(){var e=!0;try{new RegExp(\"\",\"y\")}catch(t){e=!1}return e}(),m=/a/.flags!==e,g={g:!0,i:!0,m:!0,u:p,y:h},v={}.toString;function b(e,n,o,a,i){var s;if(e[r]={captureNames:n},i)return e;if(e.__proto__)e.__proto__=t.prototype;else for(s in t.prototype)e[s]=t.prototype[s];return e[r].source=o,e[r].flags=a?a.split(\"\").sort().join(\"\"):a,e}function y(e){return a.replace.call(e,/([\\s\\S])(?=[\\s\\S]*\\1)/g,\"\")}function w(n,o){if(!t.isRegExp(n))throw new TypeError(\"Type RegExp expected\");var i=n[r]||{},s=function(e){return m?e.flags:a.exec.call(/\\/([a-z]*)$/i,RegExp.prototype.toString.call(e))[1]}(n),u=\"\",l=\"\",c=null,d=null;return(o=o||{}).removeG&&(l+=\"g\"),o.removeY&&(l+=\"y\"),l&&(s=a.replace.call(s,new RegExp(\"[\"+l+\"]+\",\"g\"),\"\")),o.addG&&(u+=\"g\"),o.addY&&(u+=\"y\"),u&&(s=y(s+u)),o.isInternalOnly||(i.source!==e&&(c=i.source),null!=i.flags&&(d=u?y(i.flags+u):i.flags)),n=b(new RegExp(n.source,s),function(e){return!(!e[r]||!e[r].captureNames)}(n)?i.captureNames.slice(0):null,c,d,o.isInternalOnly)}function x(e,t){var n,r=e.length;for(n=0;n<r;++n)if(e[n]===t)return n;return-1}function _(e,t){return v.call(e)===\"[object \"+t+\"]\"}function E(e,t,n){return a.test.call(n.indexOf(\"x\")>-1?/^(?:\\s+|#.*|\\(\\?#[^)]*\\))*(?:[?*+]|{\\d+(?:,\\d*)?})/:/^(?:\\(\\?#[^)]*\\))*(?:[?*+]|{\\d+(?:,\\d*)?})/,e.slice(t))}function k(e){var n={};return _(e,\"String\")?(t.forEach(e,/[^\\s,]+/,function(e){n[e]=!0}),n):e}function S(e){if(!/^[\\w$]$/.test(e))throw new Error(\"Flag must be a single character A-Za-z0-9_$\");g[e]=!0}function C(e,n,r,o,a){for(var i,s,u=l.length,c=e.charAt(r),d=null;u--;)if(!((s=l[u]).leadChar&&s.leadChar!==c||s.scope!==o&&\"all\"!==s.scope||s.flag&&-1===n.indexOf(s.flag))&&(i=t.exec(e,s.regex,r,\"sticky\"))){d={matchLength:i[0].length,output:s.handler.call(a,i,o,n),reparse:s.reparse};break}return d}function O(e){o.astral=e}function T(e){RegExp.prototype.exec=(e?i:a).exec,RegExp.prototype.test=(e?i:a).test,String.prototype.match=(e?i:a).match,String.prototype.replace=(e?i:a).replace,String.prototype.split=(e?i:a).split,o.natives=e}function P(e){if(null==e)throw new TypeError(\"Cannot convert null or undefined to object\");return e}return(t=function(n,r){var o,i,s,l,d,f={hasNamedCapture:!1,captureNames:[]},p=\"default\",h=\"\",m=0;if(t.isRegExp(n)){if(r!==e)throw new TypeError(\"Cannot supply flags when copying a RegExp\");return w(n)}if(n=n===e?\"\":String(n),r=r===e?\"\":String(r),t.isInstalled(\"astral\")&&-1===r.indexOf(\"A\")&&(r+=\"A\"),u[n]||(u[n]={}),!u[n][r]){for(l=(o=function(e,t){var n;if(y(t)!==t)throw new SyntaxError(\"Invalid duplicate regex flag \"+t);for(e=a.replace.call(e,/^\\(\\?([\\w$]+)\\)/,function(e,n){if(a.test.call(/[gy]/,n))throw new SyntaxError(\"Cannot use flag g or y in mode modifier \"+e);return t=y(t+n),\"\"}),n=0;n<t.length;++n)if(!g[t.charAt(n)])throw new SyntaxError(\"Unknown regex flag \"+t.charAt(n));return{pattern:e,flags:t}}(n,r)).pattern,d=o.flags;m<l.length;){do{(o=C(l,d,m,p,f))&&o.reparse&&(l=l.slice(0,m)+o.output+l.slice(m+o.matchLength))}while(o&&o.reparse);o?(h+=o.output,m+=o.matchLength||1):(h+=i=t.exec(l,c[p],m,\"sticky\")[0],m+=i.length,\"[\"===i&&\"default\"===p?p=\"class\":\"]\"===i&&\"class\"===p&&(p=\"default\"))}u[n][r]={pattern:a.replace.call(h,/\\(\\?:\\)(?=\\(\\?:\\))|^\\(\\?:\\)|\\(\\?:\\)$/g,\"\"),flags:a.replace.call(d,/[^gimuy]+/g,\"\"),captures:f.hasNamedCapture?f.captureNames:null}}return s=u[n][r],b(new RegExp(s.pattern,s.flags),s.captures,n,r)}).prototype=new RegExp,t.version=\"3.0.0\",t.addToken=function(e,n,r){var o,i=(r=r||{}).optionalFlags;if(r.flag&&S(r.flag),i)for(i=a.split.call(i,\"\"),o=0;o<i.length;++o)S(i[o]);l.push({regex:w(e,{addG:!0,addY:h,isInternalOnly:!0}),handler:n,scope:r.scope||\"default\",flag:r.flag,reparse:r.reparse,leadChar:r.leadChar}),t.cache.flush(\"patterns\")},t.cache=function(e,n){return s[e]||(s[e]={}),s[e][n]||(s[e][n]=t(e,n))},t.cache.flush=function(e){\"patterns\"===e?u={}:s={}},t.escape=function(e){return a.replace.call(P(e),/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\")},t.exec=function(e,t,n,o){var a,s,u,l=\"g\";return(a=h&&!!(o||t.sticky&&!1!==o))&&(l+=\"y\"),t[r]=t[r]||{},(u=t[r][l]||(t[r][l]=w(t,{addG:!0,addY:a,removeY:!1===o,isInternalOnly:!0}))).lastIndex=n=n||0,s=i.exec.call(u,e),o&&s&&s.index!==n&&(s=null),t.global&&(t.lastIndex=s?u.lastIndex:0),s},t.forEach=function(e,n,r){for(var o,a=0,i=-1;o=t.exec(e,n,a);)r(o,++i,e,n),a=o.index+(o[0].length||1)},t.globalize=function(e){return w(e,{addG:!0})},t.install=function(e){e=k(e),!o.astral&&e.astral&&O(!0),!o.natives&&e.natives&&T(!0)},t.isInstalled=function(e){return!!o[e]},t.isRegExp=function(e){return\"[object RegExp]\"===v.call(e)},t.match=function(e,t,n){var o,i,s=t.global&&\"one\"!==n||\"all\"===n,u=(s?\"g\":\"\")+(t.sticky?\"y\":\"\")||\"noGY\";return t[r]=t[r]||{},i=t[r][u]||(t[r][u]=w(t,{addG:!!s,addY:!!t.sticky,removeG:\"one\"===n,isInternalOnly:!0})),o=a.match.call(P(e),i),t.global&&(t.lastIndex=\"one\"===n&&o?o.index+o[0].length:0),s?o||[]:o&&o[0]},t.matchChain=function(e,n){return function e(r,o){var a,i=n[o].regex?n[o]:{regex:n[o]},s=[],u=function(e){if(i.backref){if(!(e.hasOwnProperty(i.backref)||+i.backref<e.length))throw new ReferenceError(\"Backreference to undefined group: \"+i.backref);s.push(e[i.backref]||\"\")}else s.push(e[0])};for(a=0;a<r.length;++a)t.forEach(r[a],i.regex,u);return o!==n.length-1&&s.length?e(s,o+1):s}([e],0)},t.replace=function(e,n,o,a){var s,u=t.isRegExp(n),l=n.global&&\"one\"!==a||\"all\"===a,c=(l?\"g\":\"\")+(n.sticky?\"y\":\"\")||\"noGY\",d=n;return u?(n[r]=n[r]||{},d=n[r][c]||(n[r][c]=w(n,{addG:!!l,addY:!!n.sticky,removeG:\"one\"===a,isInternalOnly:!0}))):l&&(d=new RegExp(t.escape(String(n)),\"g\")),s=i.replace.call(P(e),d,o),u&&n.global&&(n.lastIndex=0),s},t.replaceEach=function(e,n){var r,o;for(r=0;r<n.length;++r)o=n[r],e=t.replace(e,o[0],o[1],o[2]);return e},t.split=function(e,t,n){return i.split.call(P(e),t,n)},t.test=function(e,n,r,o){return!!t.exec(e,n,r,o)},t.uninstall=function(e){e=k(e),o.astral&&e.astral&&O(!1),o.natives&&e.natives&&T(!1)},t.union=function(e,n){var o,i,s,u,l=/(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*]/g,c=[],d=0,f=function(e,t,n){var r=i[d-o];if(t){if(++d,r)return\"(?<\"+r+\">\"}else if(n)return\"\\\\\"+(+n+o);return e};if(!_(e,\"Array\")||!e.length)throw new TypeError(\"Must provide a nonempty array of patterns to merge\");for(u=0;u<e.length;++u)s=e[u],t.isRegExp(s)?(o=d,i=s[r]&&s[r].captureNames||[],c.push(a.replace.call(t(s.source).source,l,f))):c.push(t.escape(s));return t(c.join(\"|\"),n)},i.exec=function(t){var n,o,i,s=this.lastIndex,u=a.exec.apply(this,arguments);if(u){if(!f&&u.length>1&&x(u,\"\")>-1&&(o=w(this,{removeG:!0,isInternalOnly:!0}),a.replace.call(String(t).slice(u.index),o,function(){var t,n=arguments.length;for(t=1;t<n-2;++t)arguments[t]===e&&(u[t]=e)})),this[r]&&this[r].captureNames)for(i=1;i<u.length;++i)(n=this[r].captureNames[i-1])&&(u[n]=u[i]);this.global&&!u[0].length&&this.lastIndex>u.index&&(this.lastIndex=u.index)}return this.global||(this.lastIndex=s),u},i.test=function(e){return!!i.exec.call(this,e)},i.match=function(e){var n;if(t.isRegExp(e)){if(e.global)return n=a.match.apply(this,arguments),e.lastIndex=0,n}else e=new RegExp(e);return i.exec.call(e,P(this))},i.replace=function(n,o){var i,s,u,l=t.isRegExp(n);return l?(n[r]&&(s=n[r].captureNames),i=n.lastIndex):n+=\"\",u=_(o,\"Function\")?a.replace.call(String(this),n,function(){var t,r=arguments;if(s)for(r[0]=new String(r[0]),t=0;t<s.length;++t)s[t]&&(r[0][s[t]]=r[t+1]);return l&&n.global&&(n.lastIndex=r[r.length-2]+r[0].length),o.apply(e,r)}):a.replace.call(null==this?this:String(this),n,function(){var e=arguments;return a.replace.call(String(o),d,function(t,n,r){var o;if(n){if((o=+n)<=e.length-3)return e[o]||\"\";if((o=s?x(s,n):-1)<0)throw new SyntaxError(\"Backreference to undefined group \"+t);return e[o+1]||\"\"}if(\"$\"===r)return\"$\";if(\"&\"===r||0==+r)return e[0];if(\"`\"===r)return e[e.length-1].slice(0,e[e.length-2]);if(\"'\"===r)return e[e.length-1].slice(e[e.length-2]+e[0].length);if(r=+r,!isNaN(r)){if(r>e.length-3)throw new SyntaxError(\"Backreference to undefined group \"+t);return e[r]||\"\"}throw new SyntaxError(\"Invalid token \"+t)})}),l&&(n.global?n.lastIndex=0:n.lastIndex=i),u},i.split=function(n,r){if(!t.isRegExp(n))return a.split.apply(this,arguments);var o,i=String(this),s=[],u=n.lastIndex,l=0;return r=(r===e?-1:r)>>>0,t.forEach(i,n,function(e){e.index+e[0].length>l&&(s.push(i.slice(l,e.index)),e.length>1&&e.index<i.length&&Array.prototype.push.apply(s,e.slice(1)),o=e[0].length,l=e.index+o)}),l===i.length?a.test.call(n,\"\")&&!o||s.push(\"\"):s.push(i.slice(l)),n.lastIndex=u,s.length>r?s.slice(0,r):s},(n=t.addToken)(/\\\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|x(?![\\dA-Fa-f]{2}))/,function(e,t){if(\"B\"===e[1]&&\"default\"===t)return e[0];throw new SyntaxError(\"Invalid escape \"+e[0])},{scope:\"all\",leadChar:\"\\\\\"}),n(/\\\\u{([\\dA-Fa-f]+)}/,function(e,t,n){var r=function(e){return parseInt(e,16)}(e[1]);if(r>1114111)throw new SyntaxError(\"Invalid Unicode code point \"+e[0]);if(r<=65535)return\"\\\\u\"+function(e){for(;e.length<4;)e=\"0\"+e;return e}(function(e){return parseInt(e,10).toString(16)}(r));if(p&&n.indexOf(\"u\")>-1)return e[0];throw new SyntaxError(\"Cannot use Unicode code point above \\\\u{FFFF} without flag u\")},{scope:\"all\",leadChar:\"\\\\\"}),n(/\\[(\\^?)]/,function(e){return e[1]?\"[\\\\s\\\\S]\":\"\\\\b\\\\B\"},{leadChar:\"[\"}),n(/\\(\\?#[^)]*\\)/,function(e,t,n){return E(e.input,e.index+e[0].length,n)?\"\":\"(?:)\"},{leadChar:\"(\"}),n(/\\s+|#.*/,function(e,t,n){return E(e.input,e.index+e[0].length,n)?\"\":\"(?:)\"},{flag:\"x\"}),n(/\\./,function(){return\"[\\\\s\\\\S]\"},{flag:\"s\",leadChar:\".\"}),n(/\\\\k<([\\w$]+)>/,function(e){var t=isNaN(e[1])?x(this.captureNames,e[1])+1:+e[1],n=e.index+e[0].length;if(!t||t>this.captureNames.length)throw new SyntaxError(\"Backreference to undefined group \"+e[0]);return\"\\\\\"+t+(n===e.input.length||isNaN(e.input.charAt(n))?\"\":\"(?:)\")},{leadChar:\"\\\\\"}),n(/\\\\(\\d+)/,function(e,t){if(!(\"default\"===t&&/^[1-9]/.test(e[1])&&+e[1]<=this.captureNames.length)&&\"0\"!==e[1])throw new SyntaxError(\"Cannot use octal escape or backreference to undefined group \"+e[0]);return e[0]},{scope:\"all\",leadChar:\"\\\\\"}),n(/\\(\\?P?<([\\w$]+)>/,function(e){if(!isNaN(e[1]))throw new SyntaxError(\"Cannot use integer as capture name \"+e[0]);if(\"length\"===e[1]||\"__proto__\"===e[1])throw new SyntaxError(\"Cannot use reserved word as capture name \"+e[0]);if(x(this.captureNames,e[1])>-1)throw new SyntaxError(\"Cannot use same name for multiple groups \"+e[0]);return this.captureNames.push(e[1]),this.hasNamedCapture=!0,\"(\"},{leadChar:\"(\"}),n(/\\((?!\\?)/,function(e,t,n){return n.indexOf(\"n\")>-1?\"(?:\":(this.captureNames.push(null),\"(\")},{optionalFlags:\"n\",leadChar:\"(\"}),t}();return function(e){\"use strict\";var t=\"xregexp\",n=/(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*]/g,r=e.union([/\\({{([\\w$]+)}}\\)|{{([\\w$]+)}}/,n],\"g\");function o(e){var t=/^\\^/,n=/\\$$/;return t.test(e)&&n.test(e.replace(/\\\\[\\s\\S]/g,\"\"))?e.replace(t,\"\").replace(n,\"\"):e}function a(n){return e.isRegExp(n)?n[t]&&n[t].captureNames?n:e(n.source):e(n)}e.build=function(i,s,u){var l,c,d,f,p=/^\\(\\?([\\w$]+)\\)/.exec(i),h={},m=0,g=0,v=[0];for(f in p&&(u=u||\"\",p[1].replace(/./g,function(e){u+=u.indexOf(e)>-1?\"\":e})),s)s.hasOwnProperty(f)&&(d=a(s[f]),h[f]={pattern:o(d.source),names:d[t].captureNames||[]});return i=a(i),c=i[t].captureNames||[],i=i.source.replace(r,function(e,t,r,o,a){var i,s,u=t||r;if(u){if(!h.hasOwnProperty(u))throw new ReferenceError(\"Undefined property \"+e);return t?(i=c[g],v[++g]=++m,s=\"(?<\"+(i||u)+\">\"):s=\"(?:\",l=m,s+h[u].pattern.replace(n,function(e,t,n){if(t){if(i=h[u].names[m-l],++m,i)return\"(?<\"+i+\">\"}else if(n)return\"\\\\\"+(+n+l);return e})+\")\"}if(o){if(i=c[g],v[++g]=++m,i)return\"(?<\"+i+\">\"}else if(a)return\"\\\\\"+v[+a];return e}),e(i,u)}}(e),function(e){\"use strict\";function t(e,t,n,r){return{name:e,value:t,start:n,end:r}}e.matchRecursive=function(n,r,o,a,i){a=a||\"\",i=i||{};var s,u,l,c,d,f=a.indexOf(\"g\")>-1,p=a.indexOf(\"y\")>-1,h=a.replace(/y/g,\"\"),m=i.escapeChar,g=i.valueNames,v=[],b=0,y=0,w=0,x=0;if(r=e(r,h),o=e(o,h),m){if(m.length>1)throw new Error(\"Cannot use more than one escape character\");m=e.escape(m),d=new RegExp(\"(?:\"+m+\"[\\\\S\\\\s]|(?:(?!\"+e.union([r,o]).source+\")[^\"+m+\"])+)+\",a.replace(/[^imu]+/g,\"\"))}for(;;){if(m&&(w+=(e.exec(n,d,w,\"sticky\")||[\"\"])[0].length),l=e.exec(n,r,w),c=e.exec(n,o,w),l&&c&&(l.index<=c.index?c=null:l=null),l||c)w=(y=(l||c).index)+(l||c)[0].length;else if(!b)break;if(p&&!b&&y>x)break;if(l)b||(s=y,u=w),++b;else{if(!c||!b)throw new Error(\"Unbalanced delimiter found in string\");if(!--b&&(g?(g[0]&&s>x&&v.push(t(g[0],n.slice(x,s),x,s)),g[1]&&v.push(t(g[1],n.slice(s,u),s,u)),g[2]&&v.push(t(g[2],n.slice(u,y),u,y)),g[3]&&v.push(t(g[3],n.slice(y,w),y,w))):v.push(n.slice(u,y)),x=w,!f))break}y===w&&++w}return f&&!p&&g&&g[0]&&n.length>x&&v.push(t(g[0],n.slice(x),x,n.length)),v}}(e),function(e){\"use strict\";var t={};function n(e){return e.replace(/[- _]+/g,\"\").toLowerCase()}function r(e){for(;e.length<4;)e=\"0\"+e;return e}function o(e){return parseInt(e,10).toString(16)}function a(e){var t,n=/^\\\\[xu](.+)/.exec(e);return n?(t=n[1],parseInt(t,16)):e.charCodeAt(\"\\\\\"===e.charAt(0)?1:0)}function i(n){var i,s,u,l;return t[n][\"b!\"]||(t[n][\"b!\"]=(i=t[n].bmp,u=\"\",l=-1,e.forEach(i,/(\\\\x..|\\\\u....|\\\\?[\\s\\S])(?:-(\\\\x..|\\\\u....|\\\\?[\\s\\S]))?/,function(e){(s=a(e[1]))>l+1&&(u+=\"\\\\u\"+r(o(l+1)),s>l+2&&(u+=\"-\\\\u\"+r(o(s-1)))),l=a(e[2]||e[1])}),l<65535&&(u+=\"\\\\u\"+r(o(l+1)),l<65534&&(u+=\"-\\\\uFFFF\")),u))}function s(e,n){var r=n?\"a!\":\"a=\";return t[e][r]||(t[e][r]=function(e,n){var r=t[e],o=\"\";return r.bmp&&!r.isBmpLast&&(o=\"[\"+r.bmp+\"]\"+(r.astral?\"|\":\"\")),r.astral&&(o+=r.astral),r.isBmpLast&&r.bmp&&(o+=(r.astral?\"|\":\"\")+\"[\"+r.bmp+\"]\"),n?\"(?:(?!\"+o+\")(?:[\\ud800-\\udbff][\\udc00-\\udfff]|[\\0-￿]))\":\"(?:\"+o+\")\"}(e,n))}e.addToken(/\\\\([pP])(?:{(\\^?)([^}]*)}|([A-Za-z]))/,function(e,r,o){var a=\"P\"===e[1]||!!e[2],u=o.indexOf(\"A\")>-1,l=n(e[4]||e[3]),c=t[l];if(\"P\"===e[1]&&e[2])throw new SyntaxError(\"Invalid double negation \"+e[0]);if(!t.hasOwnProperty(l))throw new SyntaxError(\"Unknown Unicode token \"+e[0]);if(c.inverseOf){if(l=n(c.inverseOf),!t.hasOwnProperty(l))throw new ReferenceError(\"Unicode token missing data \"+e[0]+\" -> \"+c.inverseOf);c=t[l],a=!a}if(!c.bmp&&!u)throw new SyntaxError(\"Astral mode required for Unicode token \"+e[0]);if(u){if(\"class\"===r)throw new SyntaxError(\"Astral mode does not support Unicode tokens within character classes\");return s(l,a)}return\"class\"===r?a?i(l):c.bmp:(a?\"[^\":\"[\")+c.bmp+\"]\"},{scope:\"all\",optionalFlags:\"A\",leadChar:\"\\\\\"}),e.addUnicodeData=function(r){var o,a;for(a=0;a<r.length;++a){if(!(o=r[a]).name)throw new Error(\"Unicode token requires name\");if(!(o.inverseOf||o.bmp||o.astral))throw new Error(\"Unicode token has no character data \"+o.name);t[n(o.name)]=o,o.alias&&(t[n(o.alias)]=o)}e.cache.flush(\"patterns\")}}(e),function(e){\"use strict\";if(!e.addUnicodeData)throw new ReferenceError(\"Unicode Base must be loaded before Unicode Blocks\");e.addUnicodeData([{name:\"InAegean_Numbers\",astral:\"\\ud800[\\udd00-\\udd3f]\"},{name:\"InAhom\",astral:\"\\ud805[\\udf00-\\udf3f]\"},{name:\"InAlchemical_Symbols\",astral:\"\\ud83d[\\udf00-\\udf7f]\"},{name:\"InAlphabetic_Presentation_Forms\",bmp:\"ﬀ-ﭏ\"},{name:\"InAnatolian_Hieroglyphs\",astral:\"\\ud811[\\udc00-\\ude7f]\"},{name:\"InAncient_Greek_Musical_Notation\",astral:\"\\ud834[\\ude00-\\ude4f]\"},{name:\"InAncient_Greek_Numbers\",astral:\"\\ud800[\\udd40-\\udd8f]\"},{name:\"InAncient_Symbols\",astral:\"\\ud800[\\udd90-\\uddcf]\"},{name:\"InArabic\",bmp:\"؀-ۿ\"},{name:\"InArabic_Extended_A\",bmp:\"ࢠ-ࣿ\"},{name:\"InArabic_Mathematical_Alphabetic_Symbols\",astral:\"\\ud83b[\\ude00-\\udeff]\"},{name:\"InArabic_Presentation_Forms_A\",bmp:\"ﭐ-﷿\"},{name:\"InArabic_Presentation_Forms_B\",bmp:\"ﹰ-\\ufeff\"},{name:\"InArabic_Supplement\",bmp:\"ݐ-ݿ\"},{name:\"InArmenian\",bmp:\"԰-֏\"},{name:\"InArrows\",bmp:\"←-⇿\"},{name:\"InAvestan\",astral:\"\\ud802[\\udf00-\\udf3f]\"},{name:\"InBalinese\",bmp:\"ᬀ-᭿\"},{name:\"InBamum\",bmp:\"ꚠ-꛿\"},{name:\"InBamum_Supplement\",astral:\"\\ud81a[\\udc00-\\ude3f]\"},{name:\"InBasic_Latin\",bmp:\"\\0-\"},{name:\"InBassa_Vah\",astral:\"\\ud81a[\\uded0-\\udeff]\"},{name:\"InBatak\",bmp:\"ᯀ-᯿\"},{name:\"InBengali\",bmp:\"ঀ-৿\"},{name:\"InBlock_Elements\",bmp:\"▀-▟\"},{name:\"InBopomofo\",bmp:\"㄀-ㄯ\"},{name:\"InBopomofo_Extended\",bmp:\"ㆠ-ㆿ\"},{name:\"InBox_Drawing\",bmp:\"─-╿\"},{name:\"InBrahmi\",astral:\"\\ud804[\\udc00-\\udc7f]\"},{name:\"InBraille_Patterns\",bmp:\"⠀-⣿\"},{name:\"InBuginese\",bmp:\"ᨀ-᨟\"},{name:\"InBuhid\",bmp:\"ᝀ-᝟\"},{name:\"InByzantine_Musical_Symbols\",astral:\"\\ud834[\\udc00-\\udcff]\"},{name:\"InCJK_Compatibility\",bmp:\"㌀-㏿\"},{name:\"InCJK_Compatibility_Forms\",bmp:\"︰-﹏\"},{name:\"InCJK_Compatibility_Ideographs\",bmp:\"豈-﫿\"},{name:\"InCJK_Compatibility_Ideographs_Supplement\",astral:\"\\ud87e[\\udc00-\\ude1f]\"},{name:\"InCJK_Radicals_Supplement\",bmp:\"⺀-⻿\"},{name:\"InCJK_Strokes\",bmp:\"㇀-㇯\"},{name:\"InCJK_Symbols_and_Punctuation\",bmp:\"　-〿\"},{name:\"InCJK_Unified_Ideographs\",bmp:\"一-鿿\"},{name:\"InCJK_Unified_Ideographs_Extension_A\",bmp:\"㐀-䶿\"},{name:\"InCJK_Unified_Ideographs_Extension_B\",astral:\"[\\ud840-\\ud868][\\udc00-\\udfff]|\\ud869[\\udc00-\\udedf]\"},{name:\"InCJK_Unified_Ideographs_Extension_C\",astral:\"\\ud86d[\\udc00-\\udf3f]|[\\ud86a-\\ud86c][\\udc00-\\udfff]|\\ud869[\\udf00-\\udfff]\"},{name:\"InCJK_Unified_Ideographs_Extension_D\",astral:\"\\ud86d[\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1f]\"},{name:\"InCJK_Unified_Ideographs_Extension_E\",astral:\"[\\ud86f-\\ud872][\\udc00-\\udfff]|\\ud873[\\udc00-\\udeaf]|\\ud86e[\\udc20-\\udfff]\"},{name:\"InCarian\",astral:\"\\ud800[\\udea0-\\udedf]\"},{name:\"InCaucasian_Albanian\",astral:\"\\ud801[\\udd30-\\udd6f]\"},{name:\"InChakma\",astral:\"\\ud804[\\udd00-\\udd4f]\"},{name:\"InCham\",bmp:\"ꨀ-꩟\"},{name:\"InCherokee\",bmp:\"Ꭰ-᏿\"},{name:\"InCherokee_Supplement\",bmp:\"ꭰ-ꮿ\"},{name:\"InCombining_Diacritical_Marks\",bmp:\"̀-ͯ\"},{name:\"InCombining_Diacritical_Marks_Extended\",bmp:\"᪰-᫿\"},{name:\"InCombining_Diacritical_Marks_Supplement\",bmp:\"᷀-᷿\"},{name:\"InCombining_Diacritical_Marks_for_Symbols\",bmp:\"⃐-⃿\"},{name:\"InCombining_Half_Marks\",bmp:\"︠-︯\"},{name:\"InCommon_Indic_Number_Forms\",bmp:\"꠰-꠿\"},{name:\"InControl_Pictures\",bmp:\"␀-␿\"},{name:\"InCoptic\",bmp:\"Ⲁ-⳿\"},{name:\"InCoptic_Epact_Numbers\",astral:\"\\ud800[\\udee0-\\udeff]\"},{name:\"InCounting_Rod_Numerals\",astral:\"\\ud834[\\udf60-\\udf7f]\"},{name:\"InCuneiform\",astral:\"\\ud808[\\udc00-\\udfff]\"},{name:\"InCuneiform_Numbers_and_Punctuation\",astral:\"\\ud809[\\udc00-\\udc7f]\"},{name:\"InCurrency_Symbols\",bmp:\"₠-⃏\"},{name:\"InCypriot_Syllabary\",astral:\"\\ud802[\\udc00-\\udc3f]\"},{name:\"InCyrillic\",bmp:\"Ѐ-ӿ\"},{name:\"InCyrillic_Extended_A\",bmp:\"ⷠ-ⷿ\"},{name:\"InCyrillic_Extended_B\",bmp:\"Ꙁ-ꚟ\"},{name:\"InCyrillic_Supplement\",bmp:\"Ԁ-ԯ\"},{name:\"InDeseret\",astral:\"\\ud801[\\udc00-\\udc4f]\"},{name:\"InDevanagari\",bmp:\"ऀ-ॿ\"},{name:\"InDevanagari_Extended\",bmp:\"꣠-ꣿ\"},{name:\"InDingbats\",bmp:\"✀-➿\"},{name:\"InDomino_Tiles\",astral:\"\\ud83c[\\udc30-\\udc9f]\"},{name:\"InDuployan\",astral:\"\\ud82f[\\udc00-\\udc9f]\"},{name:\"InEarly_Dynastic_Cuneiform\",astral:\"\\ud809[\\udc80-\\udd4f]\"},{name:\"InEgyptian_Hieroglyphs\",astral:\"\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2f]\"},{name:\"InElbasan\",astral:\"\\ud801[\\udd00-\\udd2f]\"},{name:\"InEmoticons\",astral:\"\\ud83d[\\ude00-\\ude4f]\"},{name:\"InEnclosed_Alphanumeric_Supplement\",astral:\"\\ud83c[\\udd00-\\uddff]\"},{name:\"InEnclosed_Alphanumerics\",bmp:\"①-⓿\"},{name:\"InEnclosed_CJK_Letters_and_Months\",bmp:\"㈀-㋿\"},{name:\"InEnclosed_Ideographic_Supplement\",astral:\"\\ud83c[\\ude00-\\udeff]\"},{name:\"InEthiopic\",bmp:\"ሀ-፿\"},{name:\"InEthiopic_Extended\",bmp:\"ⶀ-⷟\"},{name:\"InEthiopic_Extended_A\",bmp:\"꬀-꬯\"},{name:\"InEthiopic_Supplement\",bmp:\"ᎀ-᎟\"},{name:\"InGeneral_Punctuation\",bmp:\" -⁯\"},{name:\"InGeometric_Shapes\",bmp:\"■-◿\"},{name:\"InGeometric_Shapes_Extended\",astral:\"\\ud83d[\\udf80-\\udfff]\"},{name:\"InGeorgian\",bmp:\"Ⴀ-ჿ\"},{name:\"InGeorgian_Supplement\",bmp:\"ⴀ-⴯\"},{name:\"InGlagolitic\",bmp:\"Ⰰ-ⱟ\"},{name:\"InGothic\",astral:\"\\ud800[\\udf30-\\udf4f]\"},{name:\"InGrantha\",astral:\"\\ud804[\\udf00-\\udf7f]\"},{name:\"InGreek_Extended\",bmp:\"ἀ-῿\"},{name:\"InGreek_and_Coptic\",bmp:\"Ͱ-Ͽ\"},{name:\"InGujarati\",bmp:\"઀-૿\"},{name:\"InGurmukhi\",bmp:\"਀-੿\"},{name:\"InHalfwidth_and_Fullwidth_Forms\",bmp:\"＀-￯\"},{name:\"InHangul_Compatibility_Jamo\",bmp:\"㄰-㆏\"},{name:\"InHangul_Jamo\",bmp:\"ᄀ-ᇿ\"},{name:\"InHangul_Jamo_Extended_A\",bmp:\"ꥠ-꥿\"},{name:\"InHangul_Jamo_Extended_B\",bmp:\"ힰ-퟿\"},{name:\"InHangul_Syllables\",bmp:\"가-힯\"},{name:\"InHanunoo\",bmp:\"ᜠ-᜿\"},{name:\"InHatran\",astral:\"\\ud802[\\udce0-\\udcff]\"},{name:\"InHebrew\",bmp:\"֐-׿\"},{name:\"InHigh_Private_Use_Surrogates\",bmp:\"\\udb80-\\udbff\"},{name:\"InHigh_Surrogates\",bmp:\"\\ud800-\\udb7f\"},{name:\"InHiragana\",bmp:\"぀-ゟ\"},{name:\"InIPA_Extensions\",bmp:\"ɐ-ʯ\"},{name:\"InIdeographic_Description_Characters\",bmp:\"⿰-⿿\"},{name:\"InImperial_Aramaic\",astral:\"\\ud802[\\udc40-\\udc5f]\"},{name:\"InInscriptional_Pahlavi\",astral:\"\\ud802[\\udf60-\\udf7f]\"},{name:\"InInscriptional_Parthian\",astral:\"\\ud802[\\udf40-\\udf5f]\"},{name:\"InJavanese\",bmp:\"ꦀ-꧟\"},{name:\"InKaithi\",astral:\"\\ud804[\\udc80-\\udccf]\"},{name:\"InKana_Supplement\",astral:\"\\ud82c[\\udc00-\\udcff]\"},{name:\"InKanbun\",bmp:\"㆐-㆟\"},{name:\"InKangxi_Radicals\",bmp:\"⼀-⿟\"},{name:\"InKannada\",bmp:\"ಀ-೿\"},{name:\"InKatakana\",bmp:\"゠-ヿ\"},{name:\"InKatakana_Phonetic_Extensions\",bmp:\"ㇰ-ㇿ\"},{name:\"InKayah_Li\",bmp:\"꤀-꤯\"},{name:\"InKharoshthi\",astral:\"\\ud802[\\ude00-\\ude5f]\"},{name:\"InKhmer\",bmp:\"ក-៿\"},{name:\"InKhmer_Symbols\",bmp:\"᧠-᧿\"},{name:\"InKhojki\",astral:\"\\ud804[\\ude00-\\ude4f]\"},{name:\"InKhudawadi\",astral:\"\\ud804[\\udeb0-\\udeff]\"},{name:\"InLao\",bmp:\"຀-໿\"},{name:\"InLatin_Extended_Additional\",bmp:\"Ḁ-ỿ\"},{name:\"InLatin_Extended_A\",bmp:\"Ā-ſ\"},{name:\"InLatin_Extended_B\",bmp:\"ƀ-ɏ\"},{name:\"InLatin_Extended_C\",bmp:\"Ⱡ-Ɀ\"},{name:\"InLatin_Extended_D\",bmp:\"꜠-ꟿ\"},{name:\"InLatin_Extended_E\",bmp:\"ꬰ-꭯\"},{name:\"InLatin_1_Supplement\",bmp:\"-ÿ\"},{name:\"InLepcha\",bmp:\"ᰀ-ᱏ\"},{name:\"InLetterlike_Symbols\",bmp:\"℀-⅏\"},{name:\"InLimbu\",bmp:\"ᤀ-᥏\"},{name:\"InLinear_A\",astral:\"\\ud801[\\ude00-\\udf7f]\"},{name:\"InLinear_B_Ideograms\",astral:\"\\ud800[\\udc80-\\udcff]\"},{name:\"InLinear_B_Syllabary\",astral:\"\\ud800[\\udc00-\\udc7f]\"},{name:\"InLisu\",bmp:\"ꓐ-꓿\"},{name:\"InLow_Surrogates\",bmp:\"\\udc00-\\udfff\"},{name:\"InLycian\",astral:\"\\ud800[\\ude80-\\ude9f]\"},{name:\"InLydian\",astral:\"\\ud802[\\udd20-\\udd3f]\"},{name:\"InMahajani\",astral:\"\\ud804[\\udd50-\\udd7f]\"},{name:\"InMahjong_Tiles\",astral:\"\\ud83c[\\udc00-\\udc2f]\"},{name:\"InMalayalam\",bmp:\"ഀ-ൿ\"},{name:\"InMandaic\",bmp:\"ࡀ-࡟\"},{name:\"InManichaean\",astral:\"\\ud802[\\udec0-\\udeff]\"},{name:\"InMathematical_Alphanumeric_Symbols\",astral:\"\\ud835[\\udc00-\\udfff]\"},{name:\"InMathematical_Operators\",bmp:\"∀-⋿\"},{name:\"InMeetei_Mayek\",bmp:\"ꯀ-꯿\"},{name:\"InMeetei_Mayek_Extensions\",bmp:\"ꫠ-꫿\"},{name:\"InMende_Kikakui\",astral:\"\\ud83a[\\udc00-\\udcdf]\"},{name:\"InMeroitic_Cursive\",astral:\"\\ud802[\\udda0-\\uddff]\"},{name:\"InMeroitic_Hieroglyphs\",astral:\"\\ud802[\\udd80-\\udd9f]\"},{name:\"InMiao\",astral:\"\\ud81b[\\udf00-\\udf9f]\"},{name:\"InMiscellaneous_Mathematical_Symbols_A\",bmp:\"⟀-⟯\"},{name:\"InMiscellaneous_Mathematical_Symbols_B\",bmp:\"⦀-⧿\"},{name:\"InMiscellaneous_Symbols\",bmp:\"☀-⛿\"},{name:\"InMiscellaneous_Symbols_and_Arrows\",bmp:\"⬀-⯿\"},{name:\"InMiscellaneous_Symbols_and_Pictographs\",astral:\"\\ud83d[\\udc00-\\uddff]|\\ud83c[\\udf00-\\udfff]\"},{name:\"InMiscellaneous_Technical\",bmp:\"⌀-⏿\"},{name:\"InModi\",astral:\"\\ud805[\\ude00-\\ude5f]\"},{name:\"InModifier_Tone_Letters\",bmp:\"꜀-ꜟ\"},{name:\"InMongolian\",bmp:\"᠀-᢯\"},{name:\"InMro\",astral:\"\\ud81a[\\ude40-\\ude6f]\"},{name:\"InMultani\",astral:\"\\ud804[\\ude80-\\udeaf]\"},{name:\"InMusical_Symbols\",astral:\"\\ud834[\\udd00-\\uddff]\"},{name:\"InMyanmar\",bmp:\"က-႟\"},{name:\"InMyanmar_Extended_A\",bmp:\"ꩠ-ꩿ\"},{name:\"InMyanmar_Extended_B\",bmp:\"ꧠ-꧿\"},{name:\"InNKo\",bmp:\"߀-߿\"},{name:\"InNabataean\",astral:\"\\ud802[\\udc80-\\udcaf]\"},{name:\"InNew_Tai_Lue\",bmp:\"ᦀ-᧟\"},{name:\"InNumber_Forms\",bmp:\"⅐-↏\"},{name:\"InOgham\",bmp:\" -᚟\"},{name:\"InOl_Chiki\",bmp:\"᱐-᱿\"},{name:\"InOld_Hungarian\",astral:\"\\ud803[\\udc80-\\udcff]\"},{name:\"InOld_Italic\",astral:\"\\ud800[\\udf00-\\udf2f]\"},{name:\"InOld_North_Arabian\",astral:\"\\ud802[\\ude80-\\ude9f]\"},{name:\"InOld_Permic\",astral:\"\\ud800[\\udf50-\\udf7f]\"},{name:\"InOld_Persian\",astral:\"\\ud800[\\udfa0-\\udfdf]\"},{name:\"InOld_South_Arabian\",astral:\"\\ud802[\\ude60-\\ude7f]\"},{name:\"InOld_Turkic\",astral:\"\\ud803[\\udc00-\\udc4f]\"},{name:\"InOptical_Character_Recognition\",bmp:\"⑀-⑟\"},{name:\"InOriya\",bmp:\"଀-୿\"},{name:\"InOrnamental_Dingbats\",astral:\"\\ud83d[\\ude50-\\ude7f]\"},{name:\"InOsmanya\",astral:\"\\ud801[\\udc80-\\udcaf]\"},{name:\"InPahawh_Hmong\",astral:\"\\ud81a[\\udf00-\\udf8f]\"},{name:\"InPalmyrene\",astral:\"\\ud802[\\udc60-\\udc7f]\"},{name:\"InPau_Cin_Hau\",astral:\"\\ud806[\\udec0-\\udeff]\"},{name:\"InPhags_pa\",bmp:\"ꡀ-꡿\"},{name:\"InPhaistos_Disc\",astral:\"\\ud800[\\uddd0-\\uddff]\"},{name:\"InPhoenician\",astral:\"\\ud802[\\udd00-\\udd1f]\"},{name:\"InPhonetic_Extensions\",bmp:\"ᴀ-ᵿ\"},{name:\"InPhonetic_Extensions_Supplement\",bmp:\"ᶀ-ᶿ\"},{name:\"InPlaying_Cards\",astral:\"\\ud83c[\\udca0-\\udcff]\"},{name:\"InPrivate_Use_Area\",bmp:\"-\"},{name:\"InPsalter_Pahlavi\",astral:\"\\ud802[\\udf80-\\udfaf]\"},{name:\"InRejang\",bmp:\"ꤰ-꥟\"},{name:\"InRumi_Numeral_Symbols\",astral:\"\\ud803[\\ude60-\\ude7f]\"},{name:\"InRunic\",bmp:\"ᚠ-᛿\"},{name:\"InSamaritan\",bmp:\"ࠀ-࠿\"},{name:\"InSaurashtra\",bmp:\"ꢀ-꣟\"},{name:\"InSharada\",astral:\"\\ud804[\\udd80-\\udddf]\"},{name:\"InShavian\",astral:\"\\ud801[\\udc50-\\udc7f]\"},{name:\"InShorthand_Format_Controls\",astral:\"\\ud82f[\\udca0-\\udcaf]\"},{name:\"InSiddham\",astral:\"\\ud805[\\udd80-\\uddff]\"},{name:\"InSinhala\",bmp:\"඀-෿\"},{name:\"InSinhala_Archaic_Numbers\",astral:\"\\ud804[\\udde0-\\uddff]\"},{name:\"InSmall_Form_Variants\",bmp:\"﹐-﹯\"},{name:\"InSora_Sompeng\",astral:\"\\ud804[\\udcd0-\\udcff]\"},{name:\"InSpacing_Modifier_Letters\",bmp:\"ʰ-˿\"},{name:\"InSpecials\",bmp:\"￰-￿\"},{name:\"InSundanese\",bmp:\"ᮀ-ᮿ\"},{name:\"InSundanese_Supplement\",bmp:\"᳀-᳏\"},{name:\"InSuperscripts_and_Subscripts\",bmp:\"⁰-₟\"},{name:\"InSupplemental_Arrows_A\",bmp:\"⟰-⟿\"},{name:\"InSupplemental_Arrows_B\",bmp:\"⤀-⥿\"},{name:\"InSupplemental_Arrows_C\",astral:\"\\ud83e[\\udc00-\\udcff]\"},{name:\"InSupplemental_Mathematical_Operators\",bmp:\"⨀-⫿\"},{name:\"InSupplemental_Punctuation\",bmp:\"⸀-⹿\"},{name:\"InSupplemental_Symbols_and_Pictographs\",astral:\"\\ud83e[\\udd00-\\uddff]\"},{name:\"InSupplementary_Private_Use_Area_A\",astral:\"[\\udb80-\\udbbf][\\udc00-\\udfff]\"},{name:\"InSupplementary_Private_Use_Area_B\",astral:\"[\\udbc0-\\udbff][\\udc00-\\udfff]\"},{name:\"InSutton_SignWriting\",astral:\"\\ud836[\\udc00-\\udeaf]\"},{name:\"InSyloti_Nagri\",bmp:\"ꠀ-꠯\"},{name:\"InSyriac\",bmp:\"܀-ݏ\"},{name:\"InTagalog\",bmp:\"ᜀ-ᜟ\"},{name:\"InTagbanwa\",bmp:\"ᝠ-᝿\"},{name:\"InTags\",astral:\"\\udb40[\\udc00-\\udc7f]\"},{name:\"InTai_Le\",bmp:\"ᥐ-᥿\"},{name:\"InTai_Tham\",bmp:\"ᨠ-᪯\"},{name:\"InTai_Viet\",bmp:\"ꪀ-꫟\"},{name:\"InTai_Xuan_Jing_Symbols\",astral:\"\\ud834[\\udf00-\\udf5f]\"},{name:\"InTakri\",astral:\"\\ud805[\\ude80-\\udecf]\"},{name:\"InTamil\",bmp:\"஀-௿\"},{name:\"InTelugu\",bmp:\"ఀ-౿\"},{name:\"InThaana\",bmp:\"ހ-޿\"},{name:\"InThai\",bmp:\"฀-๿\"},{name:\"InTibetan\",bmp:\"ༀ-࿿\"},{name:\"InTifinagh\",bmp:\"ⴰ-⵿\"},{name:\"InTirhuta\",astral:\"\\ud805[\\udc80-\\udcdf]\"},{name:\"InTransport_and_Map_Symbols\",astral:\"\\ud83d[\\ude80-\\udeff]\"},{name:\"InUgaritic\",astral:\"\\ud800[\\udf80-\\udf9f]\"},{name:\"InUnified_Canadian_Aboriginal_Syllabics\",bmp:\"᐀-ᙿ\"},{name:\"InUnified_Canadian_Aboriginal_Syllabics_Extended\",bmp:\"ᢰ-᣿\"},{name:\"InVai\",bmp:\"ꔀ-꘿\"},{name:\"InVariation_Selectors\",bmp:\"︀-️\"},{name:\"InVariation_Selectors_Supplement\",astral:\"\\udb40[\\udd00-\\uddef]\"},{name:\"InVedic_Extensions\",bmp:\"᳐-᳿\"},{name:\"InVertical_Forms\",bmp:\"︐-︟\"},{name:\"InWarang_Citi\",astral:\"\\ud806[\\udca0-\\udcff]\"},{name:\"InYi_Radicals\",bmp:\"꒐-꓏\"},{name:\"InYi_Syllables\",bmp:\"ꀀ-꒏\"},{name:\"InYijing_Hexagram_Symbols\",bmp:\"䷀-䷿\"}])}(e),function(e){\"use strict\";if(!e.addUnicodeData)throw new ReferenceError(\"Unicode Base must be loaded before Unicode Categories\");e.addUnicodeData([{name:\"C\",alias:\"Other\",isBmpLast:!0,bmp:\"\\0-\u001f-­͸͹΀-΃΋΍΢԰՗՘ՠֈ֋֌֐׈-׏׫-ׯ׵-؅؜؝۝܎܏݋݌޲-޿߻-߿࠮࠯࠿࡜࡝࡟-࢟ࢵ-࣢঄঍঎঑঒঩঱঳-঵঺঻৅৆৉৊৏-৖৘-৛৞৤৥ৼ-਀਄਋-਎਑਒਩਱਴਷਺਻਽੃-੆੉੊੎-੐੒-੘੝੟-੥੶-઀઄઎઒઩઱઴઺઻૆૊૎૏૑-૟૤૥૲-૸ૺ-଀଄଍଎଑଒଩଱଴଺଻୅୆୉୊୎-୕୘-୛୞୤୥୸-஁஄஋-஍஑஖-஘஛஝஠-஢஥-஧஫-஭஺-஽௃-௅௉௎௏௑-௖௘-௥௻-௿ఄ఍఑఩఺-఼౅౉౎-౔౗౛-౟౤౥౰-౷ಀ಄಍಑಩಴಺಻೅೉೎-೔೗-ೝ೟೤೥೰ೳ-ഀഄ഍഑഻഼൅൉൏-ൖ൘-൞൤൥൶-൸඀ඁ඄඗-඙඲඼඾඿෇-෉෋-෎෕෗෠-෥෰෱෵-฀฻-฾๜-຀຃຅ຆຉ຋ຌຎ-ຓຘຠ຤຦ຨຩຬ຺຾຿໅໇໎໏໚໛໠-໿཈཭-཰྘྽࿍࿛-࿿჆჈-჌჎჏቉቎቏቗቙቞቟኉኎኏኱኶኷኿዁዆዇዗጑጖጗፛፜፽-፿᎚-᎟᏶᏷᏾᏿᚝-᚟᛹-᛿ᜍ᜕-ᜟ᜷-᜿᝔-᝟᝭᝱᝴-᝿៞៟៪-៯៺-៿᠎᠏᠚-᠟ᡸ-᡿᢫-᢯᣶-᣿᤟᤬-᤯᤼-᤿᥁-᥃᥮᥯᥵-᥿᦬-᦯᧊-᧏᧛-᧝᨜᨝᩟᩽᩾᪊-᪏᪚-᪟᪮᪯ᪿ-᫿ᭌ-᭏᭽-᭿᯴-᯻᰸-᰺᱊-᱌ᲀ-Ჿ᳈-᳏᳷ᳺ-᳿᷶-᷻἖἗἞἟὆὇὎὏὘὚὜὞὾὿᾵῅῔῕῜῰῱῵῿​-‏‪-‮⁠-⁯⁲⁳₏₝-₟₿-⃏⃱-⃿↌-↏⏻-⏿␧-␿⑋-⑟⭴⭵⮖⮗⮺-⮼⯉⯒-⯫⯰-⯿Ⱟⱟ⳴-⳸⴦⴨-⴬⴮⴯⵨-⵮⵱-⵾⶗-⶟⶧⶯⶷⶿⷇⷏⷗⷟⹃-⹿⺚⻴-⻿⿖-⿯⿼-⿿぀゗゘㄀-㄄ㄮ-㄰㆏ㆻ-ㆿ㇤-㇯㈟㋿䶶-䶿鿖-鿿꒍-꒏꓇-꓏꘬-꘿꛸-꛿ꞮꞯꞸ-ꟶ꠬-꠯꠺-꠿꡸-꡿ꣅ-꣍꣚-꣟ꣾꣿ꥔-꥞꥽-꥿꧎꧚-꧝꧿꨷-꨿꩎꩏꩚꩛꫃-꫚꫷-꬀꬇꬈꬏꬐꬗-꬟꬧꬯ꭦ-꭯꯮꯯꯺-꯿힤-힯퟇-퟊퟼-﩮﩯﫚-﫿﬇-﬒﬘-﬜﬷﬽﬿﭂﭅﯂-﯒﵀-﵏﶐﶑﷈-﷯﷾﷿︚-︟﹓﹧﹬-﹯﹵﻽-＀﾿-￁￈￉￐￑￘￙￝-￟￧￯-￻￾￿\",astral:\"\\ud834[\\udcf6-\\udcff\\udd27\\udd28\\udd73-\\udd7a\\udde9-\\uddff\\ude46-\\udeff\\udf57-\\udf5f\\udf72-\\udfff]|\\ud836[\\ude8c-\\ude9a\\udea0\\udeb0-\\udfff]|\\ud83c[\\udc2c-\\udc2f\\udc94-\\udc9f\\udcaf\\udcb0\\udcc0\\udcd0\\udcf6-\\udcff\\udd0d-\\udd0f\\udd2f\\udd6c-\\udd6f\\udd9b-\\udde5\\ude03-\\ude0f\\ude3b-\\ude3f\\ude49-\\ude4f\\ude52-\\udeff]|\\ud81a[\\ude39-\\ude3f\\ude5f\\ude6a-\\ude6d\\ude70-\\udecf\\udeee\\udeef\\udef6-\\udeff\\udf46-\\udf4f\\udf5a\\udf62\\udf78-\\udf7c\\udf90-\\udfff]|\\ud809[\\udc6f\\udc75-\\udc7f\\udd44-\\udfff]|\\ud81b[\\udc00-\\udeff\\udf45-\\udf4f\\udf7f-\\udf8e\\udfa0-\\udfff]|\\ud86e[\\udc1e\\udc1f]|\\ud83d[\\udd7a\\udda4\\uded1-\\udedf\\udeed-\\udeef\\udef4-\\udeff\\udf74-\\udf7f\\udfd5-\\udfff]|\\ud801[\\udc9e\\udc9f\\udcaa-\\udcff\\udd28-\\udd2f\\udd64-\\udd6e\\udd70-\\uddff\\udf37-\\udf3f\\udf56-\\udf5f\\udf68-\\udfff]|\\ud800[\\udc0c\\udc27\\udc3b\\udc3e\\udc4e\\udc4f\\udc5e-\\udc7f\\udcfb-\\udcff\\udd03-\\udd06\\udd34-\\udd36\\udd8d-\\udd8f\\udd9c-\\udd9f\\udda1-\\uddcf\\uddfe-\\ude7f\\ude9d-\\ude9f\\uded1-\\udedf\\udefc-\\udeff\\udf24-\\udf2f\\udf4b-\\udf4f\\udf7b-\\udf7f\\udf9e\\udfc4-\\udfc7\\udfd6-\\udfff]|\\ud869[\\uded7-\\udeff]|\\ud83b[\\udc00-\\uddff\\ude04\\ude20\\ude23\\ude25\\ude26\\ude28\\ude33\\ude38\\ude3a\\ude3c-\\ude41\\ude43-\\ude46\\ude48\\ude4a\\ude4c\\ude50\\ude53\\ude55\\ude56\\ude58\\ude5a\\ude5c\\ude5e\\ude60\\ude63\\ude65\\ude66\\ude6b\\ude73\\ude78\\ude7d\\ude7f\\ude8a\\ude9c-\\udea0\\udea4\\udeaa\\udebc-\\udeef\\udef2-\\udfff]|\\ud87e[\\ude1e-\\udfff]|\\udb40[\\udc00-\\udcff\\uddf0-\\udfff]|\\ud804[\\udc4e-\\udc51\\udc70-\\udc7e\\udcbd\\udcc2-\\udccf\\udce9-\\udcef\\udcfa-\\udcff\\udd35\\udd44-\\udd4f\\udd77-\\udd7f\\uddce\\uddcf\\udde0\\uddf5-\\uddff\\ude12\\ude3e-\\ude7f\\ude87\\ude89\\ude8e\\ude9e\\udeaa-\\udeaf\\udeeb-\\udeef\\udefa-\\udeff\\udf04\\udf0d\\udf0e\\udf11\\udf12\\udf29\\udf31\\udf34\\udf3a\\udf3b\\udf45\\udf46\\udf49\\udf4a\\udf4e\\udf4f\\udf51-\\udf56\\udf58-\\udf5c\\udf64\\udf65\\udf6d-\\udf6f\\udf75-\\udfff]|\\ud83a[\\udcc5\\udcc6\\udcd7-\\udfff]|\\ud80d[\\udc2f-\\udfff]|\\ud86d[\\udf35-\\udf3f]|[\\ud807\\ud80a\\ud80b\\ud80e-\\ud810\\ud812-\\ud819\\ud81c-\\ud82b\\ud82d\\ud82e\\ud830-\\ud833\\ud837-\\ud839\\ud83f\\ud874-\\ud87d\\ud87f-\\udb3f\\udb41-\\udbff][\\udc00-\\udfff]|\\ud806[\\udc00-\\udc9f\\udcf3-\\udcfe\\udd00-\\udebf\\udef9-\\udfff]|\\ud803[\\udc49-\\udc7f\\udcb3-\\udcbf\\udcf3-\\udcf9\\udd00-\\ude5f\\ude7f-\\udfff]|\\ud835[\\udc55\\udc9d\\udca0\\udca1\\udca3\\udca4\\udca7\\udca8\\udcad\\udcba\\udcbc\\udcc4\\udd06\\udd0b\\udd0c\\udd15\\udd1d\\udd3a\\udd3f\\udd45\\udd47-\\udd49\\udd51\\udea6\\udea7\\udfcc\\udfcd]|\\ud805[\\udc00-\\udc7f\\udcc8-\\udccf\\udcda-\\udd7f\\uddb6\\uddb7\\uddde-\\uddff\\ude45-\\ude4f\\ude5a-\\ude7f\\udeb8-\\udebf\\udeca-\\udeff\\udf1a-\\udf1c\\udf2c-\\udf2f\\udf40-\\udfff]|\\ud802[\\udc06\\udc07\\udc09\\udc36\\udc39-\\udc3b\\udc3d\\udc3e\\udc56\\udc9f-\\udca6\\udcb0-\\udcdf\\udcf3\\udcf6-\\udcfa\\udd1c-\\udd1e\\udd3a-\\udd3e\\udd40-\\udd7f\\uddb8-\\uddbb\\uddd0\\uddd1\\ude04\\ude07-\\ude0b\\ude14\\ude18\\ude34-\\ude37\\ude3b-\\ude3e\\ude48-\\ude4f\\ude59-\\ude5f\\udea0-\\udebf\\udee7-\\udeea\\udef7-\\udeff\\udf36-\\udf38\\udf56\\udf57\\udf73-\\udf77\\udf92-\\udf98\\udf9d-\\udfa8\\udfb0-\\udfff]|\\ud808[\\udf9a-\\udfff]|\\ud82f[\\udc6b-\\udc6f\\udc7d-\\udc7f\\udc89-\\udc8f\\udc9a\\udc9b\\udca0-\\udfff]|\\ud82c[\\udc02-\\udfff]|\\ud811[\\ude47-\\udfff]|\\ud83e[\\udc0c-\\udc0f\\udc48-\\udc4f\\udc5a-\\udc5f\\udc88-\\udc8f\\udcae-\\udd0f\\udd19-\\udd7f\\udd85-\\uddbf\\uddc1-\\udfff]|\\ud873[\\udea2-\\udfff]\"},{name:\"Cc\",alias:\"Control\",bmp:\"\\0-\u001f-\"},{name:\"Cf\",alias:\"Format\",bmp:\"­؀-؅؜۝܏᠎​-‏‪-‮⁠-⁤⁦-⁯\\ufeff￹-￻\",astral:\"\\udb40[\\udc01\\udc20-\\udc7f]|\\ud82f[\\udca0-\\udca3]|\\ud834[\\udd73-\\udd7a]|𑂽\"},{name:\"Cn\",alias:\"Unassigned\",bmp:\"͸͹΀-΃΋΍΢԰՗՘ՠֈ֋֌֐׈-׏׫-ׯ׵-׿؝܎݋݌޲-޿߻-߿࠮࠯࠿࡜࡝࡟-࢟ࢵ-࣢঄঍঎঑঒঩঱঳-঵঺঻৅৆৉৊৏-৖৘-৛৞৤৥ৼ-਀਄਋-਎਑਒਩਱਴਷਺਻਽੃-੆੉੊੎-੐੒-੘੝੟-੥੶-઀઄઎઒઩઱઴઺઻૆૊૎૏૑-૟૤૥૲-૸ૺ-଀଄଍଎଑଒଩଱଴଺଻୅୆୉୊୎-୕୘-୛୞୤୥୸-஁஄஋-஍஑஖-஘஛஝஠-஢஥-஧஫-஭஺-஽௃-௅௉௎௏௑-௖௘-௥௻-௿ఄ఍఑఩఺-఼౅౉౎-౔౗౛-౟౤౥౰-౷ಀ಄಍಑಩಴಺಻೅೉೎-೔೗-ೝ೟೤೥೰ೳ-ഀഄ഍഑഻഼൅൉൏-ൖ൘-൞൤൥൶-൸඀ඁ඄඗-඙඲඼඾඿෇-෉෋-෎෕෗෠-෥෰෱෵-฀฻-฾๜-຀຃຅ຆຉ຋ຌຎ-ຓຘຠ຤຦ຨຩຬ຺຾຿໅໇໎໏໚໛໠-໿཈཭-཰྘྽࿍࿛-࿿჆჈-჌჎჏቉቎቏቗቙቞቟኉኎኏኱኶኷኿዁዆዇዗጑጖጗፛፜፽-፿᎚-᎟᏶᏷᏾᏿᚝-᚟᛹-᛿ᜍ᜕-ᜟ᜷-᜿᝔-᝟᝭᝱᝴-᝿៞៟៪-៯៺-៿᠏᠚-᠟ᡸ-᡿᢫-᢯᣶-᣿᤟᤬-᤯᤼-᤿᥁-᥃᥮᥯᥵-᥿᦬-᦯᧊-᧏᧛-᧝᨜᨝᩟᩽᩾᪊-᪏᪚-᪟᪮᪯ᪿ-᫿ᭌ-᭏᭽-᭿᯴-᯻᰸-᰺᱊-᱌ᲀ-Ჿ᳈-᳏᳷ᳺ-᳿᷶-᷻἖἗἞἟὆὇὎὏὘὚὜὞὾὿᾵῅῔῕῜῰῱῵῿⁥⁲⁳₏₝-₟₿-⃏⃱-⃿↌-↏⏻-⏿␧-␿⑋-⑟⭴⭵⮖⮗⮺-⮼⯉⯒-⯫⯰-⯿Ⱟⱟ⳴-⳸⴦⴨-⴬⴮⴯⵨-⵮⵱-⵾⶗-⶟⶧⶯⶷⶿⷇⷏⷗⷟⹃-⹿⺚⻴-⻿⿖-⿯⿼-⿿぀゗゘㄀-㄄ㄮ-㄰㆏ㆻ-ㆿ㇤-㇯㈟㋿䶶-䶿鿖-鿿꒍-꒏꓇-꓏꘬-꘿꛸-꛿ꞮꞯꞸ-ꟶ꠬-꠯꠺-꠿꡸-꡿ꣅ-꣍꣚-꣟ꣾꣿ꥔-꥞꥽-꥿꧎꧚-꧝꧿꨷-꨿꩎꩏꩚꩛꫃-꫚꫷-꬀꬇꬈꬏꬐꬗-꬟꬧꬯ꭦ-꭯꯮꯯꯺-꯿힤-힯퟇-퟊퟼-퟿﩮﩯﫚-﫿﬇-﬒﬘-﬜﬷﬽﬿﭂﭅﯂-﯒﵀-﵏﶐﶑﷈-﷯﷾﷿︚-︟﹓﹧﹬-﹯﹵﻽﻾＀﾿-￁￈￉￐￑￘￙￝-￟￧￯-￸￾￿\",astral:\"\\udb40[\\udc00\\udc02-\\udc1f\\udc80-\\udcff\\uddf0-\\udfff]|\\ud834[\\udcf6-\\udcff\\udd27\\udd28\\udde9-\\uddff\\ude46-\\udeff\\udf57-\\udf5f\\udf72-\\udfff]|\\ud83c[\\udc2c-\\udc2f\\udc94-\\udc9f\\udcaf\\udcb0\\udcc0\\udcd0\\udcf6-\\udcff\\udd0d-\\udd0f\\udd2f\\udd6c-\\udd6f\\udd9b-\\udde5\\ude03-\\ude0f\\ude3b-\\ude3f\\ude49-\\ude4f\\ude52-\\udeff]|\\ud81a[\\ude39-\\ude3f\\ude5f\\ude6a-\\ude6d\\ude70-\\udecf\\udeee\\udeef\\udef6-\\udeff\\udf46-\\udf4f\\udf5a\\udf62\\udf78-\\udf7c\\udf90-\\udfff]|\\ud809[\\udc6f\\udc75-\\udc7f\\udd44-\\udfff]|\\ud81b[\\udc00-\\udeff\\udf45-\\udf4f\\udf7f-\\udf8e\\udfa0-\\udfff]|\\ud86e[\\udc1e\\udc1f]|\\ud83d[\\udd7a\\udda4\\uded1-\\udedf\\udeed-\\udeef\\udef4-\\udeff\\udf74-\\udf7f\\udfd5-\\udfff]|\\ud801[\\udc9e\\udc9f\\udcaa-\\udcff\\udd28-\\udd2f\\udd64-\\udd6e\\udd70-\\uddff\\udf37-\\udf3f\\udf56-\\udf5f\\udf68-\\udfff]|\\ud800[\\udc0c\\udc27\\udc3b\\udc3e\\udc4e\\udc4f\\udc5e-\\udc7f\\udcfb-\\udcff\\udd03-\\udd06\\udd34-\\udd36\\udd8d-\\udd8f\\udd9c-\\udd9f\\udda1-\\uddcf\\uddfe-\\ude7f\\ude9d-\\ude9f\\uded1-\\udedf\\udefc-\\udeff\\udf24-\\udf2f\\udf4b-\\udf4f\\udf7b-\\udf7f\\udf9e\\udfc4-\\udfc7\\udfd6-\\udfff]|\\ud869[\\uded7-\\udeff]|\\ud83b[\\udc00-\\uddff\\ude04\\ude20\\ude23\\ude25\\ude26\\ude28\\ude33\\ude38\\ude3a\\ude3c-\\ude41\\ude43-\\ude46\\ude48\\ude4a\\ude4c\\ude50\\ude53\\ude55\\ude56\\ude58\\ude5a\\ude5c\\ude5e\\ude60\\ude63\\ude65\\ude66\\ude6b\\ude73\\ude78\\ude7d\\ude7f\\ude8a\\ude9c-\\udea0\\udea4\\udeaa\\udebc-\\udeef\\udef2-\\udfff]|[\\udbbf\\udbff][\\udffe\\udfff]|\\ud87e[\\ude1e-\\udfff]|\\ud82f[\\udc6b-\\udc6f\\udc7d-\\udc7f\\udc89-\\udc8f\\udc9a\\udc9b\\udca4-\\udfff]|\\ud83a[\\udcc5\\udcc6\\udcd7-\\udfff]|\\ud80d[\\udc2f-\\udfff]|\\ud86d[\\udf35-\\udf3f]|[\\ud807\\ud80a\\ud80b\\ud80e-\\ud810\\ud812-\\ud819\\ud81c-\\ud82b\\ud82d\\ud82e\\ud830-\\ud833\\ud837-\\ud839\\ud83f\\ud874-\\ud87d\\ud87f-\\udb3f\\udb41-\\udb7f][\\udc00-\\udfff]|\\ud806[\\udc00-\\udc9f\\udcf3-\\udcfe\\udd00-\\udebf\\udef9-\\udfff]|\\ud803[\\udc49-\\udc7f\\udcb3-\\udcbf\\udcf3-\\udcf9\\udd00-\\ude5f\\ude7f-\\udfff]|\\ud835[\\udc55\\udc9d\\udca0\\udca1\\udca3\\udca4\\udca7\\udca8\\udcad\\udcba\\udcbc\\udcc4\\udd06\\udd0b\\udd0c\\udd15\\udd1d\\udd3a\\udd3f\\udd45\\udd47-\\udd49\\udd51\\udea6\\udea7\\udfcc\\udfcd]|\\ud836[\\ude8c-\\ude9a\\udea0\\udeb0-\\udfff]|\\ud805[\\udc00-\\udc7f\\udcc8-\\udccf\\udcda-\\udd7f\\uddb6\\uddb7\\uddde-\\uddff\\ude45-\\ude4f\\ude5a-\\ude7f\\udeb8-\\udebf\\udeca-\\udeff\\udf1a-\\udf1c\\udf2c-\\udf2f\\udf40-\\udfff]|\\ud802[\\udc06\\udc07\\udc09\\udc36\\udc39-\\udc3b\\udc3d\\udc3e\\udc56\\udc9f-\\udca6\\udcb0-\\udcdf\\udcf3\\udcf6-\\udcfa\\udd1c-\\udd1e\\udd3a-\\udd3e\\udd40-\\udd7f\\uddb8-\\uddbb\\uddd0\\uddd1\\ude04\\ude07-\\ude0b\\ude14\\ude18\\ude34-\\ude37\\ude3b-\\ude3e\\ude48-\\ude4f\\ude59-\\ude5f\\udea0-\\udebf\\udee7-\\udeea\\udef7-\\udeff\\udf36-\\udf38\\udf56\\udf57\\udf73-\\udf77\\udf92-\\udf98\\udf9d-\\udfa8\\udfb0-\\udfff]|\\ud808[\\udf9a-\\udfff]|\\ud804[\\udc4e-\\udc51\\udc70-\\udc7e\\udcc2-\\udccf\\udce9-\\udcef\\udcfa-\\udcff\\udd35\\udd44-\\udd4f\\udd77-\\udd7f\\uddce\\uddcf\\udde0\\uddf5-\\uddff\\ude12\\ude3e-\\ude7f\\ude87\\ude89\\ude8e\\ude9e\\udeaa-\\udeaf\\udeeb-\\udeef\\udefa-\\udeff\\udf04\\udf0d\\udf0e\\udf11\\udf12\\udf29\\udf31\\udf34\\udf3a\\udf3b\\udf45\\udf46\\udf49\\udf4a\\udf4e\\udf4f\\udf51-\\udf56\\udf58-\\udf5c\\udf64\\udf65\\udf6d-\\udf6f\\udf75-\\udfff]|\\ud82c[\\udc02-\\udfff]|\\ud811[\\ude47-\\udfff]|\\ud83e[\\udc0c-\\udc0f\\udc48-\\udc4f\\udc5a-\\udc5f\\udc88-\\udc8f\\udcae-\\udd0f\\udd19-\\udd7f\\udd85-\\uddbf\\uddc1-\\udfff]|\\ud873[\\udea2-\\udfff]\"},{name:\"Co\",alias:\"Private_Use\",bmp:\"-\",astral:\"[\\udb80-\\udbbe\\udbc0-\\udbfe][\\udc00-\\udfff]|[\\udbbf\\udbff][\\udc00-\\udffd]\"},{name:\"Cs\",alias:\"Surrogate\",bmp:\"\\ud800-\\udfff\"},{name:\"L\",alias:\"Letter\",bmp:\"A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢴऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞭꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ﬀ-ﬆﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼＡ-Ｚａ-ｚｦ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ\",astral:\"\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2]|\\ud83a[\\udc00-\\udcc4]|\\ud801[\\udc00-\\udc9d\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf30-\\udf40\\udf42-\\udf49\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf]|\\ud80d[\\udc00-\\udc2e]|\\ud87e[\\udc00-\\ude1d]|\\ud81b[\\udf00-\\udf44\\udf50\\udf93-\\udf9f]|[\\ud80c\\ud840-\\ud868\\ud86a-\\ud86c\\ud86f-\\ud872][\\udc00-\\udfff]|\\ud805[\\udc80-\\udcaf\\udcc4\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udf00-\\udf19]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud809[\\udc80-\\udd43]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude33\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud804[\\udc03-\\udc37\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud808[\\udc00-\\udf99]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud806[\\udca0-\\udcdf\\udcff\\udec0-\\udef8]|\\ud811[\\udc00-\\ude46]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud82c[\\udc00\\udc01]|\\ud873[\\udc00-\\udea1]\"},{name:\"Ll\",alias:\"Lowercase_Letter\",bmp:\"a-zµß-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĳĵķĸĺļľŀłńņňŉŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž-ƀƃƅƈƌƍƒƕƙ-ƛƞơƣƥƨƪƫƭưƴƶƹƺƽ-ƿǆǉǌǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰǳǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳ-ȹȼȿɀɂɇɉɋɍɏ-ʓʕ-ʯͱͳͷͻ-ͽΐά-ώϐϑϕ-ϗϙϛϝϟϡϣϥϧϩϫϭϯ-ϳϵϸϻϼа-џѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧԩԫԭԯա-ևᏸ-ᏽᴀ-ᴫᵫ-ᵷᵹ-ᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕ-ẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷιῂ-ῄῆῇῐ-ΐῖῗῠ-ῧῲ-ῴῶῷℊℎℏℓℯℴℹℼℽⅆ-ⅉⅎↄⰰ-ⱞⱡⱥⱦⱨⱪⱬⱱⱳⱴⱶ-ⱻⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳤⳬⳮⳳⴀ-ⴥⴧⴭꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꚙꚛꜣꜥꜧꜩꜫꜭꜯ-ꜱꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝱ-ꝸꝺꝼꝿꞁꞃꞅꞇꞌꞎꞑꞓ-ꞕꞗꞙꞛꞝꞟꞡꞣꞥꞧꞩꞵꞷꟺꬰ-ꭚꭠ-ꭥꭰ-ꮿﬀ-ﬆﬓ-ﬗａ-ｚ\",astral:\"\\ud803[\\udcc0-\\udcf2]|\\ud835[\\udc1a-\\udc33\\udc4e-\\udc54\\udc56-\\udc67\\udc82-\\udc9b\\udcb6-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udccf\\udcea-\\udd03\\udd1e-\\udd37\\udd52-\\udd6b\\udd86-\\udd9f\\uddba-\\uddd3\\uddee-\\ude07\\ude22-\\ude3b\\ude56-\\ude6f\\ude8a-\\udea5\\udec2-\\udeda\\udedc-\\udee1\\udefc-\\udf14\\udf16-\\udf1b\\udf36-\\udf4e\\udf50-\\udf55\\udf70-\\udf88\\udf8a-\\udf8f\\udfaa-\\udfc2\\udfc4-\\udfc9\\udfcb]|\\ud801[\\udc28-\\udc4f]|\\ud806[\\udcc0-\\udcdf]\"},{name:\"Lm\",alias:\"Modifier_Letter\",bmp:\"ʰ-ˁˆ-ˑˠ-ˤˬˮʹͺՙـۥۦߴߵߺࠚࠤࠨॱๆໆჼៗᡃᪧᱸ-ᱽᴬ-ᵪᵸᶛ-ᶿⁱⁿₐ-ₜⱼⱽⵯⸯ々〱-〵〻ゝゞー-ヾꀕꓸ-ꓽꘌꙿꚜꚝꜗ-ꜟꝰꞈꟸꟹꧏꧦꩰꫝꫳꫴꭜ-ꭟｰﾞﾟ\",astral:\"\\ud81a[\\udf40-\\udf43]|\\ud81b[\\udf93-\\udf9f]\"},{name:\"Lo\",alias:\"Other_Letter\",bmp:\"ªºƻǀ-ǃʔא-תװ-ײؠ-ؿف-يٮٯٱ-ۓەۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪࠀ-ࠕࡀ-ࡘࢠ-ࢴऄ-हऽॐक़-ॡॲ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๅກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎა-ჺჽ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៜᠠ-ᡂᡄ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱷᳩ-ᳬᳮ-ᳱᳵᳶℵ-ℸⴰ-ⵧⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ〆〼ぁ-ゖゟァ-ヺヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꀔꀖ-ꒌꓐ-ꓷꔀ-ꘋꘐ-ꘟꘪꘫꙮꚠ-ꛥꞏꟷꟻ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧠ-ꧤꧧ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩯꩱ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛꫜꫠ-ꫪꫲꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎יִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼｦ-ｯｱ-ﾝﾠ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ\",astral:\"\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud83a[\\udc00-\\udcc4]|\\ud803[\\udc00-\\udc48]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf30-\\udf40\\udf42-\\udf49\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf]|\\ud80d[\\udc00-\\udc2e]|\\ud87e[\\udc00-\\ude1d]|\\ud81b[\\udf00-\\udf44\\udf50]|[\\ud80c\\ud840-\\ud868\\ud86a-\\ud86c\\ud86f-\\ud872][\\udc00-\\udfff]|\\ud805[\\udc80-\\udcaf\\udcc4\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udf00-\\udf19]|\\ud806[\\udcff\\udec0-\\udef8]|\\ud809[\\udc80-\\udd43]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude33\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud804[\\udc03-\\udc37\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud808[\\udc00-\\udf99]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf2f\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud801[\\udc50-\\udc9d\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud811[\\udc00-\\ude46]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud82c[\\udc00\\udc01]|\\ud873[\\udc00-\\udea1]\"},{name:\"Lt\",alias:\"Titlecase_Letter\",bmp:\"ǅǈǋǲᾈ-ᾏᾘ-ᾟᾨ-ᾯᾼῌῼ\"},{name:\"Lu\",alias:\"Uppercase_Letter\",bmp:\"A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİĲĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉ-ƋƎ-ƑƓƔƖ-ƘƜƝƟƠƢƤƦƧƩƬƮƯƱ-ƳƵƷƸƼǄǇǊǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮǱǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁɃ-ɆɈɊɌɎͰͲͶͿΆΈ-ΊΌΎΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԨԪԬԮԱ-ՖႠ-ჅჇჍᎠ-ᏵḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꚘꚚꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽꝾꞀꞂꞄꞆꞋꞍꞐꞒꞖꞘꞚꞜꞞꞠꞢꞤꞦꞨꞪ-ꞭꞰ-ꞴꞶＡ-Ｚ\",astral:\"\\ud806[\\udca0-\\udcbf]|\\ud803[\\udc80-\\udcb2]|\\ud801[\\udc00-\\udc27]|\\ud835[\\udc00-\\udc19\\udc34-\\udc4d\\udc68-\\udc81\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb5\\udcd0-\\udce9\\udd04\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd38\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd6c-\\udd85\\udda0-\\uddb9\\uddd4-\\udded\\ude08-\\ude21\\ude3c-\\ude55\\ude70-\\ude89\\udea8-\\udec0\\udee2-\\udefa\\udf1c-\\udf34\\udf56-\\udf6e\\udf90-\\udfa8\\udfca]\"},{name:\"M\",alias:\"Mark\",bmp:\"̀-ͯ҃-҉֑-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣣ-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣஂா-ூெ-ைொ-்ௗఀ-ఃా-ౄె-ైొ-్ౕౖౢౣಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣංඃ්ා-ුූෘ-ෟෲෳัิ-ฺ็-๎ັິ-ູົຼ່-ໍ༹༘༙༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏႚ-ႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝᠋-᠍ᢩᤠ-ᤫᤰ-᤻ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼᪰-᪾ᬀ-ᬄ᬴-᭄᭫-᭳ᮀ-ᮂᮡ-ᮭ᯦-᯳ᰤ-᰷᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷼-᷿⃐-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꙯-꙲ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-꣄꣠-꣱ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀ꧥꨩ-ꨶꩃꩌꩍꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ︀-️︠-︯\",astral:\"\\ud805[\\udcb0-\\udcc3\\uddaf-\\uddb5\\uddb8-\\uddc0\\udddc\\udddd\\ude30-\\ude40\\udeab-\\udeb7\\udf1d-\\udf2b]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud804[\\udc00-\\udc02\\udc38-\\udc46\\udc7f-\\udc82\\udcb0-\\udcba\\udd00-\\udd02\\udd27-\\udd34\\udd73\\udd80-\\udd82\\uddb3-\\uddc0\\uddca-\\uddcc\\ude2c-\\ude37\\udedf-\\udeea\\udf00-\\udf03\\udf3c\\udf3e-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf57\\udf62\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud81b[\\udf51-\\udf7e\\udf8f-\\udf92]|\\ud81a[\\udef0-\\udef4\\udf30-\\udf36]|\\ud82f[\\udc9d\\udc9e]|\\ud800[\\uddfd\\udee0\\udf76-\\udf7a]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud802[\\ude01-\\ude03\\ude05\\ude06\\ude0c-\\ude0f\\ude38-\\ude3a\\ude3f\\udee5\\udee6]|\\ud83a[\\udcd0-\\udcd6]|\\udb40[\\udd00-\\uddef]\"},{name:\"Mc\",alias:\"Spacing_Mark\",bmp:\"ःऻा-ीॉ-ौॎॏংঃা-ীেৈোৌৗਃਾ-ੀઃા-ીૉોૌଂଃାୀେୈୋୌୗாிுூெ-ைொ-ௌௗఁ-ఃు-ౄಂಃಾೀ-ೄೇೈೊೋೕೖംഃാ-ീെ-ൈൊ-ൌൗංඃා-ෑෘ-ෟෲෳ༾༿ཿါာေးျြၖၗၢ-ၤၧ-ၭႃႄႇ-ႌႏႚ-ႜាើ-ៅះៈᤣ-ᤦᤩ-ᤫᤰᤱᤳ-ᤸᨙᨚᩕᩗᩡᩣᩤᩭ-ᩲᬄᬵᬻᬽ-ᭁᭃ᭄ᮂᮡᮦᮧ᮪ᯧᯪ-ᯬᯮ᯲᯳ᰤ-ᰫᰴᰵ᳡ᳲᳳ〮〯ꠣꠤꠧꢀꢁꢴ-ꣃꥒ꥓ꦃꦴꦵꦺꦻꦽ-꧀ꨯꨰꨳꨴꩍꩻꩽꫫꫮꫯꫵꯣꯤꯦꯧꯩꯪ꯬\",astral:\"\\ud834[\\udd65\\udd66\\udd6d-\\udd72]|\\ud804[\\udc00\\udc02\\udc82\\udcb0-\\udcb2\\udcb7\\udcb8\\udd2c\\udd82\\uddb3-\\uddb5\\uddbf\\uddc0\\ude2c-\\ude2e\\ude32\\ude33\\ude35\\udee0-\\udee2\\udf02\\udf03\\udf3e\\udf3f\\udf41-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf57\\udf62\\udf63]|\\ud805[\\udcb0-\\udcb2\\udcb9\\udcbb-\\udcbe\\udcc1\\uddaf-\\uddb1\\uddb8-\\uddbb\\uddbe\\ude30-\\ude32\\ude3b\\ude3c\\ude3e\\udeac\\udeae\\udeaf\\udeb6\\udf20\\udf21\\udf26]|\\ud81b[\\udf51-\\udf7e]\"},{name:\"Me\",alias:\"Enclosing_Mark\",bmp:\"҈҉᪾⃝-⃠⃢-⃤꙰-꙲\"},{name:\"Mn\",alias:\"Nonspacing_Mark\",bmp:\"̀-ͯ҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣣ-ंऺ़ु-ै्॑-ॗॢॣঁ়ু-ৄ্ৢৣਁਂ਼ੁੂੇੈੋ-੍ੑੰੱੵઁં઼ુ-ૅેૈ્ૢૣଁ଼ିୁ-ୄ୍ୖୢୣஂீ்ఀా-ీె-ైొ-్ౕౖౢౣಁ಼ಿೆೌ್ೢೣഁു-ൄ്ൢൣ්ි-ුූัิ-ฺ็-๎ັິ-ູົຼ່-ໍཱ༹༘༙༵༷-ཾྀ-྄྆྇ྍ-ྗྙ-ྼ࿆ိ-ူဲ-့္်ွှၘၙၞ-ၠၱ-ၴႂႅႆႍႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴឵ិ-ួំ៉-៓៝᠋-᠍ᢩᤠ-ᤢᤧᤨᤲ᤹-᤻ᨘᨗᨛᩖᩘ-ᩞ᩠ᩢᩥ-ᩬᩳ-᩿᩼᪰-᪽ᬀ-ᬃ᬴ᬶ-ᬺᬼᭂ᭫-᭳ᮀᮁᮢ-ᮥᮨᮩ᮫-ᮭ᯦ᯨᯩᯭᯯ-ᯱᰬ-ᰳᰶ᰷᳐-᳔᳒-᳢᳠-᳨᳭᳴᳸᳹᷀-᷵᷼-᷿⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〭꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠥꠦ꣄꣠-꣱ꤦ-꤭ꥇ-ꥑꦀ-ꦂ꦳ꦶ-ꦹꦼꧥꨩ-ꨮꨱꨲꨵꨶꩃꩌꩼꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫬꫭ꫶ꯥꯨ꯭ﬞ︀-️︠-︯\",astral:\"\\ud805[\\udcb3-\\udcb8\\udcba\\udcbf\\udcc0\\udcc2\\udcc3\\uddb2-\\uddb5\\uddbc\\uddbd\\uddbf\\uddc0\\udddc\\udddd\\ude33-\\ude3a\\ude3d\\ude3f\\ude40\\udeab\\udead\\udeb0-\\udeb5\\udeb7\\udf1d-\\udf1f\\udf22-\\udf25\\udf27-\\udf2b]|\\ud834[\\udd67-\\udd69\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud81a[\\udef0-\\udef4\\udf30-\\udf36]|\\ud81b[\\udf8f-\\udf92]|\\ud82f[\\udc9d\\udc9e]|\\ud800[\\uddfd\\udee0\\udf76-\\udf7a]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud802[\\ude01-\\ude03\\ude05\\ude06\\ude0c-\\ude0f\\ude38-\\ude3a\\ude3f\\udee5\\udee6]|\\ud804[\\udc01\\udc38-\\udc46\\udc7f-\\udc81\\udcb3-\\udcb6\\udcb9\\udcba\\udd00-\\udd02\\udd27-\\udd2b\\udd2d-\\udd34\\udd73\\udd80\\udd81\\uddb6-\\uddbe\\uddca-\\uddcc\\ude2f-\\ude31\\ude34\\ude36\\ude37\\udedf\\udee3-\\udeea\\udf00\\udf01\\udf3c\\udf40\\udf66-\\udf6c\\udf70-\\udf74]|\\ud83a[\\udcd0-\\udcd6]|\\udb40[\\udd00-\\uddef]\"},{name:\"N\",alias:\"Number\",bmp:\"0-9²³¹¼-¾٠-٩۰-۹߀-߉०-९০-৯৴-৹੦-੯૦-૯୦-୯୲-୷௦-௲౦-౯౸-౾೦-೯൦-൵෦-෯๐-๙໐-໙༠-༳၀-၉႐-႙፩-፼ᛮ-ᛰ០-៩៰-៹᠐-᠙᥆-᥏᧐-᧚᪀-᪉᪐-᪙᭐-᭙᮰-᮹᱀-᱉᱐-᱙⁰⁴-⁹₀-₉⅐-ↂↅ-↉①-⒛⓪-⓿❶-➓⳽〇〡-〩〸-〺㆒-㆕㈠-㈩㉈-㉏㉑-㉟㊀-㊉㊱-㊿꘠-꘩ꛦ-ꛯ꠰-꠵꣐-꣙꤀-꤉꧐-꧙꧰-꧹꩐-꩙꯰-꯹０-９\",astral:\"\\ud800[\\udd07-\\udd33\\udd40-\\udd78\\udd8a\\udd8b\\udee1-\\udefb\\udf20-\\udf23\\udf41\\udf4a\\udfd1-\\udfd5]|\\ud801[\\udca0-\\udca9]|\\ud803[\\udcfa-\\udcff\\ude60-\\ude7e]|\\ud835[\\udfce-\\udfff]|\\ud83a[\\udcc7-\\udccf]|\\ud81a[\\ude60-\\ude69\\udf50-\\udf59\\udf5b-\\udf61]|\\ud806[\\udce0-\\udcf2]|\\ud804[\\udc52-\\udc6f\\udcf0-\\udcf9\\udd36-\\udd3f\\uddd0-\\uddd9\\udde1-\\uddf4\\udef0-\\udef9]|\\ud834[\\udf60-\\udf71]|\\ud83c[\\udd00-\\udd0c]|\\ud809[\\udc00-\\udc6e]|\\ud802[\\udc58-\\udc5f\\udc79-\\udc7f\\udca7-\\udcaf\\udcfb-\\udcff\\udd16-\\udd1b\\uddbc\\uddbd\\uddc0-\\uddcf\\uddd2-\\uddff\\ude40-\\ude47\\ude7d\\ude7e\\ude9d-\\ude9f\\udeeb-\\udeef\\udf58-\\udf5f\\udf78-\\udf7f\\udfa9-\\udfaf]|\\ud805[\\udcd0-\\udcd9\\ude50-\\ude59\\udec0-\\udec9\\udf30-\\udf3b]\"},{name:\"Nd\",alias:\"Decimal_Number\",bmp:\"0-9٠-٩۰-۹߀-߉०-९০-৯੦-੯૦-૯୦-୯௦-௯౦-౯೦-೯൦-൯෦-෯๐-๙໐-໙༠-༩၀-၉႐-႙០-៩᠐-᠙᥆-᥏᧐-᧙᪀-᪉᪐-᪙᭐-᭙᮰-᮹᱀-᱉᱐-᱙꘠-꘩꣐-꣙꤀-꤉꧐-꧙꧰-꧹꩐-꩙꯰-꯹０-９\",astral:\"\\ud801[\\udca0-\\udca9]|\\ud835[\\udfce-\\udfff]|\\ud805[\\udcd0-\\udcd9\\ude50-\\ude59\\udec0-\\udec9\\udf30-\\udf39]|\\ud806[\\udce0-\\udce9]|\\ud804[\\udc66-\\udc6f\\udcf0-\\udcf9\\udd36-\\udd3f\\uddd0-\\uddd9\\udef0-\\udef9]|\\ud81a[\\ude60-\\ude69\\udf50-\\udf59]\"},{name:\"Nl\",alias:\"Letter_Number\",bmp:\"ᛮ-ᛰⅠ-ↂↅ-ↈ〇〡-〩〸-〺ꛦ-ꛯ\",astral:\"\\ud809[\\udc00-\\udc6e]|\\ud800[\\udd40-\\udd74\\udf41\\udf4a\\udfd1-\\udfd5]\"},{name:\"No\",alias:\"Other_Number\",bmp:\"²³¹¼-¾৴-৹୲-୷௰-௲౸-౾൰-൵༪-༳፩-፼៰-៹᧚⁰⁴-⁹₀-₉⅐-⅟↉①-⒛⓪-⓿❶-➓⳽㆒-㆕㈠-㈩㉈-㉏㉑-㉟㊀-㊉㊱-㊿꠰-꠵\",astral:\"\\ud804[\\udc52-\\udc65\\udde1-\\uddf4]|\\ud803[\\udcfa-\\udcff\\ude60-\\ude7e]|\\ud83c[\\udd00-\\udd0c]|\\ud806[\\udcea-\\udcf2]|\\ud83a[\\udcc7-\\udccf]|\\ud802[\\udc58-\\udc5f\\udc79-\\udc7f\\udca7-\\udcaf\\udcfb-\\udcff\\udd16-\\udd1b\\uddbc\\uddbd\\uddc0-\\uddcf\\uddd2-\\uddff\\ude40-\\ude47\\ude7d\\ude7e\\ude9d-\\ude9f\\udeeb-\\udeef\\udf58-\\udf5f\\udf78-\\udf7f\\udfa9-\\udfaf]|\\ud805[\\udf3a\\udf3b]|\\ud81a[\\udf5b-\\udf61]|\\ud834[\\udf60-\\udf71]|\\ud800[\\udd07-\\udd33\\udd75-\\udd78\\udd8a\\udd8b\\udee1-\\udefb\\udf20-\\udf23]\"},{name:\"P\",alias:\"Punctuation\",bmp:\"!-#%-\\\\x2A,-/:;\\\\x3F@\\\\x5B-\\\\x5D_\\\\x7B}¡§«¶·»¿;·՚-՟։֊־׀׃׆׳״؉؊،؍؛؞؟٪-٭۔܀-܍߷-߹࠰-࠾࡞।॥॰૰෴๏๚๛༄-༒༔༺-༽྅࿐-࿔࿙࿚၊-၏჻፠-፨᐀᙭᙮᚛᚜᛫-᛭᜵᜶។-៖៘-៚᠀-᠊᥄᥅᨞᨟᪠-᪦᪨-᪭᭚-᭠᯼-᯿᰻-᰿᱾᱿᳀-᳇᳓‐-‧‰-⁃⁅-⁑⁓-⁞⁽⁾₍₎⌈-⌋〈〉❨-❵⟅⟆⟦-⟯⦃-⦘⧘-⧛⧼⧽⳹-⳼⳾⳿⵰⸀-⸮⸰-⹂、-〃〈-】〔-〟〰〽゠・꓾꓿꘍-꘏꙳꙾꛲-꛷꡴-꡷꣎꣏꣸-꣺꣼꤮꤯꥟꧁-꧍꧞꧟꩜-꩟꫞꫟꫰꫱꯫﴾﴿︐-︙︰-﹒﹔-﹡﹣﹨﹪﹫！-＃％-＊，-／：；？＠［-］＿｛｝｟-･\",astral:\"\\ud802[\\udc57\\udd1f\\udd3f\\ude50-\\ude58\\ude7f\\udef0-\\udef6\\udf39-\\udf3f\\udf99-\\udf9c]|\\ud809[\\udc70-\\udc74]|\\ud805[\\udcc6\\uddc1-\\uddd7\\ude41-\\ude43\\udf3c-\\udf3e]|\\ud836[\\ude87-\\ude8b]|𐕯|𛲟|\\ud804[\\udc47-\\udc4d\\udcbb\\udcbc\\udcbe-\\udcc1\\udd40-\\udd43\\udd74\\udd75\\uddc5-\\uddc9\\uddcd\\udddb\\udddd-\\udddf\\ude38-\\ude3d\\udea9]|\\ud800[\\udd00-\\udd02\\udf9f\\udfd0]|\\ud81a[\\ude6e\\ude6f\\udef5\\udf37-\\udf3b\\udf44]\"},{name:\"Pc\",alias:\"Connector_Punctuation\",bmp:\"_‿⁀⁔︳︴﹍-﹏＿\"},{name:\"Pd\",alias:\"Dash_Punctuation\",bmp:\"\\\\x2D֊־᐀᠆‐-―⸗⸚⸺⸻⹀〜〰゠︱︲﹘﹣－\"},{name:\"Pe\",alias:\"Close_Punctuation\",bmp:\"\\\\x29\\\\x5D}༻༽᚜⁆⁾₎⌉⌋〉❩❫❭❯❱❳❵⟆⟧⟩⟫⟭⟯⦄⦆⦈⦊⦌⦎⦐⦒⦔⦖⦘⧙⧛⧽⸣⸥⸧⸩〉》」』】〕〗〙〛〞〟﴾︘︶︸︺︼︾﹀﹂﹄﹈﹚﹜﹞）］｝｠｣\"},{name:\"Pf\",alias:\"Final_Punctuation\",bmp:\"»’”›⸃⸅⸊⸍⸝⸡\"},{name:\"Pi\",alias:\"Initial_Punctuation\",bmp:\"«‘‛“‟‹⸂⸄⸉⸌⸜⸠\"},{name:\"Po\",alias:\"Other_Punctuation\",bmp:\"!-#%-'\\\\x2A,\\\\x2E/:;\\\\x3F@\\\\x5C¡§¶·¿;·՚-՟։׀׃׆׳״؉؊،؍؛؞؟٪-٭۔܀-܍߷-߹࠰-࠾࡞।॥॰૰෴๏๚๛༄-༒༔྅࿐-࿔࿙࿚၊-၏჻፠-፨᙭᙮᛫-᛭᜵᜶។-៖៘-៚᠀-᠅᠇-᠊᥄᥅᨞᨟᪠-᪦᪨-᪭᭚-᭠᯼-᯿᰻-᰿᱾᱿᳀-᳇᳓‖‗†-‧‰-‸※-‾⁁-⁃⁇-⁑⁓⁕-⁞⳹-⳼⳾⳿⵰⸀⸁⸆-⸈⸋⸎-⸖⸘⸙⸛⸞⸟⸪-⸮⸰-⸹⸼-⸿⹁、-〃〽・꓾꓿꘍-꘏꙳꙾꛲-꛷꡴-꡷꣎꣏꣸-꣺꣼꤮꤯꥟꧁-꧍꧞꧟꩜-꩟꫞꫟꫰꫱꯫︐-︖︙︰﹅﹆﹉-﹌﹐-﹒﹔-﹗﹟-﹡﹨﹪﹫！-＃％-＇＊，．／：；？＠＼｡､･\",astral:\"\\ud802[\\udc57\\udd1f\\udd3f\\ude50-\\ude58\\ude7f\\udef0-\\udef6\\udf39-\\udf3f\\udf99-\\udf9c]|\\ud809[\\udc70-\\udc74]|\\ud805[\\udcc6\\uddc1-\\uddd7\\ude41-\\ude43\\udf3c-\\udf3e]|\\ud836[\\ude87-\\ude8b]|𐕯|𛲟|\\ud804[\\udc47-\\udc4d\\udcbb\\udcbc\\udcbe-\\udcc1\\udd40-\\udd43\\udd74\\udd75\\uddc5-\\uddc9\\uddcd\\udddb\\udddd-\\udddf\\ude38-\\ude3d\\udea9]|\\ud800[\\udd00-\\udd02\\udf9f\\udfd0]|\\ud81a[\\ude6e\\ude6f\\udef5\\udf37-\\udf3b\\udf44]\"},{name:\"Ps\",alias:\"Open_Punctuation\",bmp:\"\\\\x28\\\\x5B\\\\x7B༺༼᚛‚„⁅⁽₍⌈⌊〈❨❪❬❮❰❲❴⟅⟦⟨⟪⟬⟮⦃⦅⦇⦉⦋⦍⦏⦑⦓⦕⦗⧘⧚⧼⸢⸤⸦⸨⹂〈《「『【〔〖〘〚〝﴿︗︵︷︹︻︽︿﹁﹃﹇﹙﹛﹝（［｛｟｢\"},{name:\"S\",alias:\"Symbol\",bmp:\"\\\\x24\\\\x2B<->\\\\x5E`\\\\x7C~¢-¦¨©¬®-±´¸×÷˂-˅˒-˟˥-˫˭˯-˿͵΄΅϶҂֍-֏؆-؈؋؎؏۞۩۽۾߶৲৳৺৻૱୰௳-௺౿൹฿༁-༃༓༕-༗༚-༟༴༶༸྾-࿅࿇-࿌࿎࿏࿕-࿘႞႟᎐-᎙៛᥀᧞-᧿᭡-᭪᭴-᭼᾽᾿-῁῍-῏῝-῟῭-`´῾⁄⁒⁺-⁼₊-₌₠-₾℀℁℃-℆℈℉℔№-℘℞-℣℥℧℩℮℺℻⅀-⅄⅊-⅍⅏↊↋←-⌇⌌-⌨⌫-⏺␀-␦⑀-⑊⒜-ⓩ─-❧➔-⟄⟇-⟥⟰-⦂⦙-⧗⧜-⧻⧾-⭳⭶-⮕⮘-⮹⮽-⯈⯊-⯑⯬-⯯⳥-⳪⺀-⺙⺛-⻳⼀-⿕⿰-⿻〄〒〓〠〶〷〾〿゛゜㆐㆑㆖-㆟㇀-㇣㈀-㈞㈪-㉇㉐㉠-㉿㊊-㊰㋀-㋾㌀-㏿䷀-䷿꒐-꓆꜀-꜖꜠꜡꞉꞊꠨-꠫꠶-꠹꩷-꩹꭛﬩﮲-﯁﷼﷽﹢﹤-﹦﹩＄＋＜-＞＾｀｜～￠-￦￨-￮￼�\",astral:\"\\ud83e[\\udc00-\\udc0b\\udc10-\\udc47\\udc50-\\udc59\\udc60-\\udc87\\udc90-\\udcad\\udd10-\\udd18\\udd80-\\udd84\\uddc0]|\\ud83c[\\udc00-\\udc2b\\udc30-\\udc93\\udca0-\\udcae\\udcb1-\\udcbf\\udcc1-\\udccf\\udcd1-\\udcf5\\udd10-\\udd2e\\udd30-\\udd6b\\udd70-\\udd9a\\udde6-\\ude02\\ude10-\\ude3a\\ude40-\\ude48\\ude50\\ude51\\udf00-\\udfff]|\\ud83d[\\udc00-\\udd79\\udd7b-\\udda3\\udda5-\\uded0\\udee0-\\udeec\\udef0-\\udef3\\udf00-\\udf73\\udf80-\\udfd4]|\\ud835[\\udec1\\udedb\\udefb\\udf15\\udf35\\udf4f\\udf6f\\udf89\\udfa9\\udfc3]|\\ud800[\\udd37-\\udd3f\\udd79-\\udd89\\udd8c\\udd90-\\udd9b\\udda0\\uddd0-\\uddfc]|𛲜|𑜿|\\ud802[\\udc77\\udc78\\udec8]|\\ud81a[\\udf3c-\\udf3f\\udf45]|\\ud836[\\udc00-\\uddff\\ude37-\\ude3a\\ude6d-\\ude74\\ude76-\\ude83\\ude85\\ude86]|\\ud834[\\udc00-\\udcf5\\udd00-\\udd26\\udd29-\\udd64\\udd6a-\\udd6c\\udd83\\udd84\\udd8c-\\udda9\\uddae-\\udde8\\ude00-\\ude41\\ude45\\udf00-\\udf56]|\\ud83b[\\udef0\\udef1]\"},{name:\"Sc\",alias:\"Currency_Symbol\",bmp:\"\\\\x24¢-¥֏؋৲৳৻૱௹฿៛₠-₾꠸﷼﹩＄￠￡￥￦\"},{name:\"Sk\",alias:\"Modifier_Symbol\",bmp:\"\\\\x5E`¨¯´¸˂-˅˒-˟˥-˫˭˯-˿͵΄΅᾽᾿-῁῍-῏῝-῟῭-`´῾゛゜꜀-꜖꜠꜡꞉꞊꭛﮲-﯁＾｀￣\",astral:\"\\ud83c[\\udffb-\\udfff]\"},{name:\"Sm\",alias:\"Math_Symbol\",bmp:\"\\\\x2B<->\\\\x7C~¬±×÷϶؆-؈⁄⁒⁺-⁼₊-₌℘⅀-⅄⅋←-↔↚↛↠↣↦↮⇎⇏⇒⇔⇴-⋿⌠⌡⍼⎛-⎳⏜-⏡▷◁◸-◿♯⟀-⟄⟇-⟥⟰-⟿⤀-⦂⦙-⧗⧜-⧻⧾-⫿⬰-⭄⭇-⭌﬩﹢﹤-﹦＋＜-＞｜～￢￩-￬\",astral:\"\\ud83b[\\udef0\\udef1]|\\ud835[\\udec1\\udedb\\udefb\\udf15\\udf35\\udf4f\\udf6f\\udf89\\udfa9\\udfc3]\"},{name:\"So\",alias:\"Other_Symbol\",bmp:\"¦©®°҂֍֎؎؏۞۩۽۾߶৺୰௳-௸௺౿൹༁-༃༓༕-༗༚-༟༴༶༸྾-࿅࿇-࿌࿎࿏࿕-࿘႞႟᎐-᎙᥀᧞-᧿᭡-᭪᭴-᭼℀℁℃-℆℈℉℔№℗℞-℣℥℧℩℮℺℻⅊⅌⅍⅏↊↋↕-↙↜-↟↡↢↤↥↧-↭↯-⇍⇐⇑⇓⇕-⇳⌀-⌇⌌-⌟⌢-⌨⌫-⍻⍽-⎚⎴-⏛⏢-⏺␀-␦⑀-⑊⒜-ⓩ─-▶▸-◀◂-◷☀-♮♰-❧➔-➿⠀-⣿⬀-⬯⭅⭆⭍-⭳⭶-⮕⮘-⮹⮽-⯈⯊-⯑⯬-⯯⳥-⳪⺀-⺙⺛-⻳⼀-⿕⿰-⿻〄〒〓〠〶〷〾〿㆐㆑㆖-㆟㇀-㇣㈀-㈞㈪-㉇㉐㉠-㉿㊊-㊰㋀-㋾㌀-㏿䷀-䷿꒐-꓆꠨-꠫꠶꠷꠹꩷-꩹﷽￤￨￭￮￼�\",astral:\"\\ud83e[\\udc00-\\udc0b\\udc10-\\udc47\\udc50-\\udc59\\udc60-\\udc87\\udc90-\\udcad\\udd10-\\udd18\\udd80-\\udd84\\uddc0]|\\ud83d[\\udc00-\\udd79\\udd7b-\\udda3\\udda5-\\uded0\\udee0-\\udeec\\udef0-\\udef3\\udf00-\\udf73\\udf80-\\udfd4]|\\ud83c[\\udc00-\\udc2b\\udc30-\\udc93\\udca0-\\udcae\\udcb1-\\udcbf\\udcc1-\\udccf\\udcd1-\\udcf5\\udd10-\\udd2e\\udd30-\\udd6b\\udd70-\\udd9a\\udde6-\\ude02\\ude10-\\ude3a\\ude40-\\ude48\\ude50\\ude51\\udf00-\\udffa]|\\ud800[\\udd37-\\udd3f\\udd79-\\udd89\\udd8c\\udd90-\\udd9b\\udda0\\uddd0-\\uddfc]|𛲜|𑜿|\\ud802[\\udc77\\udc78\\udec8]|\\ud81a[\\udf3c-\\udf3f\\udf45]|\\ud836[\\udc00-\\uddff\\ude37-\\ude3a\\ude6d-\\ude74\\ude76-\\ude83\\ude85\\ude86]|\\ud834[\\udc00-\\udcf5\\udd00-\\udd26\\udd29-\\udd64\\udd6a-\\udd6c\\udd83\\udd84\\udd8c-\\udda9\\uddae-\\udde8\\ude00-\\ude41\\ude45\\udf00-\\udf56]\"},{name:\"Z\",alias:\"Separator\",bmp:\"    - \\u2028\\u2029  　\"},{name:\"Zl\",alias:\"Line_Separator\",bmp:\"\\u2028\"},{name:\"Zp\",alias:\"Paragraph_Separator\",bmp:\"\\u2029\"},{name:\"Zs\",alias:\"Space_Separator\",bmp:\"    -   　\"}])}(e),function(e){\"use strict\";if(!e.addUnicodeData)throw new ReferenceError(\"Unicode Base must be loaded before Unicode Properties\");var t=[{name:\"ASCII\",bmp:\"\\0-\"},{name:\"Alphabetic\",bmp:\"A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͅͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևְ-ׇֽֿׁׂׅׄא-תװ-ײؐ-ؚؠ-ٗٙ-ٟٮ-ۓە-ۜۡ-ۭۨ-ۯۺ-ۼۿܐ-ܿݍ-ޱߊ-ߪߴߵߺࠀ-ࠗࠚ-ࠬࡀ-ࡘࢠ-ࢴࣣ-ࣰࣩ-ऻऽ-ौॎ-ॐॕ-ॣॱ-ঃঅ-ঌএঐও-নপ-রলশ-হঽ-ৄেৈোৌৎৗড়ঢ়য়-ৣৰৱਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਾ-ੂੇੈੋੌੑਖ਼-ੜਫ਼ੰ-ੵઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽ-ૅે-ૉોૌૐૠ-ૣૹଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽ-ୄେୈୋୌୖୗଡ଼ଢ଼ୟ-ୣୱஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-ௌௐௗఀ-ఃఅ-ఌఎ-ఐఒ-నప-హఽ-ౄె-ైొ-ౌౕౖౘ-ౚౠ-ౣಁ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ೄೆ-ೈೊ-ೌೕೖೞೠ-ೣೱೲഁ-ഃഅ-ഌഎ-ഐഒ-ഺഽ-ൄെ-ൈൊ-ൌൎൗൟ-ൣൺ-ൿංඃඅ-ඖක-නඳ-රලව-ෆා-ුූෘ-ෟෲෳก-ฺเ-ๆํກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆໍໜ-ໟༀཀ-ཇཉ-ཬཱ-ཱྀྈ-ྗྙ-ྼက-ံးျ-ဿၐ-ၢၥ-ၨၮ-ႆႎႜႝႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፟ᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜓᜠ-ᜳᝀ-ᝓᝠ-ᝬᝮ-ᝰᝲᝳក-ឳា-ៈៗៜᠠ-ᡷᢀ-ᢪᢰ-ᣵᤀ-ᤞᤠ-ᤫᤰ-ᤸᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨛᨠ-ᩞᩡ-ᩴᪧᬀ-ᬳᬵ-ᭃᭅ-ᭋᮀ-ᮩᮬ-ᮯᮺ-ᯥᯧ-ᯱᰀ-ᰵᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳳᳵᳶᴀ-ᶿᷧ-ᷴḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⒶ-ⓩⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⷠ-ⷿⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙴ-ꙻꙿ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞭꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠧꡀ-ꡳꢀ-ꣃꣲ-ꣷꣻꣽꤊ-ꤪꤰ-ꥒꥠ-ꥼꦀ-ꦲꦴ-ꦿꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨶꩀ-ꩍꩠ-ꩶꩺꩾ-ꪾꫀꫂꫛ-ꫝꫠ-ꫯꫲ-ꫵꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯪ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ﬀ-ﬆﬓ-ﬗיִ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼＡ-Ｚａ-ｚｦ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ\",astral:\"\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud804[\\udc00-\\udc45\\udc82-\\udcb8\\udcd0-\\udce8\\udd00-\\udd32\\udd50-\\udd72\\udd76\\udd80-\\uddbf\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude34\\ude37\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udee8\\udf00-\\udf03\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3d-\\udf44\\udf47\\udf48\\udf4b\\udf4c\\udf50\\udf57\\udf5d-\\udf63]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2]|\\ud83a[\\udc00-\\udcc4]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udf00-\\udf36\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud801[\\udc00-\\udc9d\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud83c[\\udd30-\\udd49\\udd50-\\udd69\\udd70-\\udd89]|\\ud80d[\\udc00-\\udc2e]|\\ud87e[\\udc00-\\ude1d]|[\\ud80c\\ud840-\\ud868\\ud86a-\\ud86c\\ud86f-\\ud872][\\udc00-\\udfff]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9e]|\\ud808[\\udc00-\\udf99]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud805[\\udc80-\\udcc1\\udcc4\\udcc5\\udcc7\\udd80-\\uddb5\\uddb8-\\uddbe\\uddd8-\\udddd\\ude00-\\ude3e\\ude40\\ude44\\ude80-\\udeb5\\udf00-\\udf19\\udf1d-\\udf2a]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud806[\\udca0-\\udcdf\\udcff\\udec0-\\udef8]|\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf30-\\udf4a\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00-\\ude03\\ude05\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude33\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud811[\\udc00-\\ude46]|\\ud82c[\\udc00\\udc01]|\\ud81b[\\udf00-\\udf44\\udf50-\\udf7e\\udf93-\\udf9f]|\\ud873[\\udc00-\\udea1]\"},{name:\"Any\",isBmpLast:!0,bmp:\"\\0-￿\",astral:\"[\\ud800-\\udbff][\\udc00-\\udfff]\"},{name:\"Default_Ignorable_Code_Point\",bmp:\"­͏؜ᅟᅠ឴឵᠋-᠎​-‏‪-‮⁠-⁯ㅤ︀-️\\ufeffﾠ￰-￸\",astral:\"[\\udb40-\\udb43][\\udc00-\\udfff]|\\ud834[\\udd73-\\udd7a]|\\ud82f[\\udca0-\\udca3]\"},{name:\"Lowercase\",bmp:\"a-zªµºß-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĳĵķĸĺļľŀłńņňŉŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž-ƀƃƅƈƌƍƒƕƙ-ƛƞơƣƥƨƪƫƭưƴƶƹƺƽ-ƿǆǉǌǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰǳǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳ-ȹȼȿɀɂɇɉɋɍɏ-ʓʕ-ʸˀˁˠ-ˤͅͱͳͷͺ-ͽΐά-ώϐϑϕ-ϗϙϛϝϟϡϣϥϧϩϫϭϯ-ϳϵϸϻϼа-џѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧԩԫԭԯա-ևᏸ-ᏽᴀ-ᶿḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕ-ẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷιῂ-ῄῆῇῐ-ΐῖῗῠ-ῧῲ-ῴῶῷⁱⁿₐ-ₜℊℎℏℓℯℴℹℼℽⅆ-ⅉⅎⅰ-ⅿↄⓐ-ⓩⰰ-ⱞⱡⱥⱦⱨⱪⱬⱱⱳⱴⱶ-ⱽⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳤⳬⳮⳳⴀ-ⴥⴧⴭꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꚙꚛ-ꚝꜣꜥꜧꜩꜫꜭꜯ-ꜱꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯ-ꝸꝺꝼꝿꞁꞃꞅꞇꞌꞎꞑꞓ-ꞕꞗꞙꞛꞝꞟꞡꞣꞥꞧꞩꞵꞷꟸ-ꟺꬰ-ꭚꭜ-ꭥꭰ-ꮿﬀ-ﬆﬓ-ﬗａ-ｚ\",astral:\"\\ud803[\\udcc0-\\udcf2]|\\ud835[\\udc1a-\\udc33\\udc4e-\\udc54\\udc56-\\udc67\\udc82-\\udc9b\\udcb6-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udccf\\udcea-\\udd03\\udd1e-\\udd37\\udd52-\\udd6b\\udd86-\\udd9f\\uddba-\\uddd3\\uddee-\\ude07\\ude22-\\ude3b\\ude56-\\ude6f\\ude8a-\\udea5\\udec2-\\udeda\\udedc-\\udee1\\udefc-\\udf14\\udf16-\\udf1b\\udf36-\\udf4e\\udf50-\\udf55\\udf70-\\udf88\\udf8a-\\udf8f\\udfaa-\\udfc2\\udfc4-\\udfc9\\udfcb]|\\ud801[\\udc28-\\udc4f]|\\ud806[\\udcc0-\\udcdf]\"},{name:\"Noncharacter_Code_Point\",bmp:\"﷐-﷯￾￿\",astral:\"[\\udb3f\\udb7f\\udbbf\\udbff\\ud83f\\ud87f\\ud8bf\\udaff\\ud97f\\ud9bf\\ud9ff\\uda3f\\ud8ff\\udabf\\uda7f\\ud93f][\\udffe\\udfff]\"},{name:\"Uppercase\",bmp:\"A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİĲĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉ-ƋƎ-ƑƓƔƖ-ƘƜƝƟƠƢƤƦƧƩƬƮƯƱ-ƳƵƷƸƼǄǇǊǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮǱǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁɃ-ɆɈɊɌɎͰͲͶͿΆΈ-ΊΌΎΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԨԪԬԮԱ-ՖႠ-ჅჇჍᎠ-ᏵḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾℿⅅⅠ-ⅯↃⒶ-ⓏⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꚘꚚꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽꝾꞀꞂꞄꞆꞋꞍꞐꞒꞖꞘꞚꞜꞞꞠꞢꞤꞦꞨꞪ-ꞭꞰ-ꞴꞶＡ-Ｚ\",astral:\"\\ud806[\\udca0-\\udcbf]|\\ud803[\\udc80-\\udcb2]|\\ud835[\\udc00-\\udc19\\udc34-\\udc4d\\udc68-\\udc81\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb5\\udcd0-\\udce9\\udd04\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd38\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd6c-\\udd85\\udda0-\\uddb9\\uddd4-\\udded\\ude08-\\ude21\\ude3c-\\ude55\\ude70-\\ude89\\udea8-\\udec0\\udee2-\\udefa\\udf1c-\\udf34\\udf56-\\udf6e\\udf90-\\udfa8\\udfca]|\\ud801[\\udc00-\\udc27]|\\ud83c[\\udd30-\\udd49\\udd50-\\udd69\\udd70-\\udd89]\"},{name:\"White_Space\",bmp:\"\\t-\\r    - \\u2028\\u2029  　\"}];t.push({name:\"Assigned\",inverseOf:\"Cn\"}),e.addUnicodeData(t)}(e),function(e){\"use strict\";if(!e.addUnicodeData)throw new ReferenceError(\"Unicode Base must be loaded before Unicode Scripts\");e.addUnicodeData([{name:\"Ahom\",astral:\"\\ud805[\\udf00-\\udf19\\udf1d-\\udf2b\\udf30-\\udf3f]\"},{name:\"Anatolian_Hieroglyphs\",astral:\"\\ud811[\\udc00-\\ude46]\"},{name:\"Arabic\",bmp:\"؀-؄؆-؋؍-ؚ؞ؠ-ؿف-يٖ-ٯٱ-ۜ۞-ۿݐ-ݿࢠ-ࢴࣣ-ࣿﭐ-﯁ﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷽ﹰ-ﹴﹶ-ﻼ\",astral:\"\\ud803[\\ude60-\\ude7e]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb\\udef0\\udef1]\"},{name:\"Armenian\",bmp:\"Ա-Ֆՙ-՟ա-և֊֍-֏ﬓ-ﬗ\"},{name:\"Avestan\",astral:\"\\ud802[\\udf00-\\udf35\\udf39-\\udf3f]\"},{name:\"Balinese\",bmp:\"ᬀ-ᭋ᭐-᭼\"},{name:\"Bamum\",bmp:\"ꚠ-꛷\",astral:\"\\ud81a[\\udc00-\\ude38]\"},{name:\"Bassa_Vah\",astral:\"\\ud81a[\\uded0-\\udeed\\udef0-\\udef5]\"},{name:\"Batak\",bmp:\"ᯀ-᯳᯼-᯿\"},{name:\"Bengali\",bmp:\"ঀ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗড়ঢ়য়-ৣ০-৻\"},{name:\"Bopomofo\",bmp:\"˪˫ㄅ-ㄭㆠ-ㆺ\"},{name:\"Brahmi\",astral:\"\\ud804[\\udc00-\\udc4d\\udc52-\\udc6f\\udc7f]\"},{name:\"Braille\",bmp:\"⠀-⣿\"},{name:\"Buginese\",bmp:\"ᨀ-ᨛ᨞᨟\"},{name:\"Buhid\",bmp:\"ᝀ-ᝓ\"},{name:\"Canadian_Aboriginal\",bmp:\"᐀-ᙿᢰ-ᣵ\"},{name:\"Carian\",astral:\"\\ud800[\\udea0-\\uded0]\"},{name:\"Caucasian_Albanian\",astral:\"\\ud801[\\udd30-\\udd63\\udd6f]\"},{name:\"Chakma\",astral:\"\\ud804[\\udd00-\\udd34\\udd36-\\udd43]\"},{name:\"Cham\",bmp:\"ꨀ-ꨶꩀ-ꩍ꩐-꩙꩜-꩟\"},{name:\"Cherokee\",bmp:\"Ꭰ-Ᏽᏸ-ᏽꭰ-ꮿ\"},{name:\"Common\",bmp:\"\\0-@\\\\x5B-`\\\\x7B-©«-¹»-¿×÷ʹ-˟˥-˩ˬ-˿ʹ;΅·։؅،؛؜؟ـ۝।॥฿࿕-࿘჻᛫-᛭᜵᜶᠂᠃᠅᳓᳡ᳩ-ᳬᳮ-ᳳᳵᳶ -​‎-⁤⁦-⁰⁴-⁾₀-₎₠-₾℀-℥℧-℩ℬ-ℱℳ-⅍⅏-⅟↉-↋←-⏺␀-␦⑀-⑊①-⟿⤀-⭳⭶-⮕⮘-⮹⮽-⯈⯊-⯑⯬-⯯⸀-⹂⿰-⿻　-〄〆〈-〠〰-〷〼-〿゛゜゠・ー㆐-㆟㇀-㇣㈠-㉟㉿-㋏㍘-㏿䷀-䷿꜀-꜡ꞈ-꞊꠰-꠹꤮ꧏ꭛﴾﴿︐-︙︰-﹒﹔-﹦﹨-﹫\\ufeff！-＠［-｀｛-･ｰﾞﾟ￠-￦￨-￮￹-�\",astral:\"\\ud83e[\\udc00-\\udc0b\\udc10-\\udc47\\udc50-\\udc59\\udc60-\\udc87\\udc90-\\udcad\\udd10-\\udd18\\udd80-\\udd84\\uddc0]|\\ud82f[\\udca0-\\udca3]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udfcb\\udfce-\\udfff]|\\udb40[\\udc01\\udc20-\\udc7f]|\\ud83d[\\udc00-\\udd79\\udd7b-\\udda3\\udda5-\\uded0\\udee0-\\udeec\\udef0-\\udef3\\udf00-\\udf73\\udf80-\\udfd4]|\\ud800[\\udd00-\\udd02\\udd07-\\udd33\\udd37-\\udd3f\\udd90-\\udd9b\\uddd0-\\uddfc\\udee1-\\udefb]|\\ud834[\\udc00-\\udcf5\\udd00-\\udd26\\udd29-\\udd66\\udd6a-\\udd7a\\udd83\\udd84\\udd8c-\\udda9\\uddae-\\udde8\\udf00-\\udf56\\udf60-\\udf71]|\\ud83c[\\udc00-\\udc2b\\udc30-\\udc93\\udca0-\\udcae\\udcb1-\\udcbf\\udcc1-\\udccf\\udcd1-\\udcf5\\udd00-\\udd0c\\udd10-\\udd2e\\udd30-\\udd6b\\udd70-\\udd9a\\udde6-\\uddff\\ude01\\ude02\\ude10-\\ude3a\\ude40-\\ude48\\ude50\\ude51\\udf00-\\udfff]\"},{name:\"Coptic\",bmp:\"Ϣ-ϯⲀ-ⳳ⳹-⳿\"},{name:\"Cuneiform\",astral:\"\\ud809[\\udc00-\\udc6e\\udc70-\\udc74\\udc80-\\udd43]|\\ud808[\\udc00-\\udf99]\"},{name:\"Cypriot\",astral:\"\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f]\"},{name:\"Cyrillic\",bmp:\"Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯\"},{name:\"Deseret\",astral:\"\\ud801[\\udc00-\\udc4f]\"},{name:\"Devanagari\",bmp:\"ऀ-ॐ॓-ॣ०-ॿ꣠-ꣽ\"},{name:\"Duployan\",astral:\"\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9c-\\udc9f]\"},{name:\"Egyptian_Hieroglyphs\",astral:\"\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]\"},{name:\"Elbasan\",astral:\"\\ud801[\\udd00-\\udd27]\"},{name:\"Ethiopic\",bmp:\"ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፼ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮ\"},{name:\"Georgian\",bmp:\"Ⴀ-ჅჇჍა-ჺჼ-ჿⴀ-ⴥⴧⴭ\"},{name:\"Glagolitic\",bmp:\"Ⰰ-Ⱞⰰ-ⱞ\"},{name:\"Gothic\",astral:\"\\ud800[\\udf30-\\udf4a]\"},{name:\"Grantha\",astral:\"\\ud804[\\udf00-\\udf03\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3c-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf50\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]\"},{name:\"Greek\",bmp:\"Ͱ-ͳ͵-ͷͺ-ͽͿ΄ΆΈ-ΊΌΎ-ΡΣ-ϡϰ-Ͽᴦ-ᴪᵝ-ᵡᵦ-ᵪᶿἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ῄῆ-ΐῖ-Ί῝-`ῲ-ῴῶ-῾Ωꭥ\",astral:\"\\ud800[\\udd40-\\udd8c\\udda0]|\\ud834[\\ude00-\\ude45]\"},{name:\"Gujarati\",bmp:\"ઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૱ૹ\"},{name:\"Gurmukhi\",bmp:\"ਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-ੵ\"},{name:\"Han\",bmp:\"⺀-⺙⺛-⻳⼀-⿕々〇〡-〩〸-〻㐀-䶵一-鿕豈-舘並-龎\",astral:\"\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|[\\ud840-\\ud868\\ud86a-\\ud86c\\ud86f-\\ud872][\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud87e[\\udc00-\\ude1d]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud873[\\udc00-\\udea1]\"},{name:\"Hangul\",bmp:\"ᄀ-ᇿ〮〯ㄱ-ㆎ㈀-㈞㉠-㉾ꥠ-ꥼ가-힣ힰ-ퟆퟋ-ퟻﾠ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ\"},{name:\"Hanunoo\",bmp:\"ᜠ-᜴\"},{name:\"Hatran\",astral:\"\\ud802[\\udce0-\\udcf2\\udcf4\\udcf5\\udcfb-\\udcff]\"},{name:\"Hebrew\",bmp:\"֑-ׇא-תװ-״יִ-זּטּ-לּמּנּסּףּפּצּ-ﭏ\"},{name:\"Hiragana\",bmp:\"ぁ-ゖゝ-ゟ\",astral:\"𛀁|🈀\"},{name:\"Imperial_Aramaic\",astral:\"\\ud802[\\udc40-\\udc55\\udc57-\\udc5f]\"},{name:\"Inherited\",bmp:\"̀-ًͯ҅҆-ٰٕ॒॑᪰-᪾᳐-᳔᳒-᳢᳠-᳨᳭᳴᳸᳹᷀-᷵᷼-᷿‌‍⃐-〪⃰-゙゚〭︀-️︠-︭\",astral:\"\\ud834[\\udd67-\\udd69\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad]|\\ud800[\\uddfd\\udee0]|\\udb40[\\udd00-\\uddef]\"},{name:\"Inscriptional_Pahlavi\",astral:\"\\ud802[\\udf60-\\udf72\\udf78-\\udf7f]\"},{name:\"Inscriptional_Parthian\",astral:\"\\ud802[\\udf40-\\udf55\\udf58-\\udf5f]\"},{name:\"Javanese\",bmp:\"ꦀ-꧍꧐-꧙꧞꧟\"},{name:\"Kaithi\",astral:\"\\ud804[\\udc80-\\udcc1]\"},{name:\"Kannada\",bmp:\"ಁ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೞೠ-ೣ೦-೯ೱೲ\"},{name:\"Katakana\",bmp:\"ァ-ヺヽ-ヿㇰ-ㇿ㋐-㋾㌀-㍗ｦ-ｯｱ-ﾝ\",astral:\"𛀀\"},{name:\"Kayah_Li\",bmp:\"꤀-꤭꤯\"},{name:\"Kharoshthi\",astral:\"\\ud802[\\ude00-\\ude03\\ude05\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude33\\ude38-\\ude3a\\ude3f-\\ude47\\ude50-\\ude58]\"},{name:\"Khmer\",bmp:\"ក-៝០-៩៰-៹᧠-᧿\"},{name:\"Khojki\",astral:\"\\ud804[\\ude00-\\ude11\\ude13-\\ude3d]\"},{name:\"Khudawadi\",astral:\"\\ud804[\\udeb0-\\udeea\\udef0-\\udef9]\"},{name:\"Lao\",bmp:\"ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆ່-ໍ໐-໙ໜ-ໟ\"},{name:\"Latin\",bmp:\"A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤﬀ-ﬆＡ-Ｚａ-ｚ\"},{name:\"Lepcha\",bmp:\"ᰀ-᰷᰻-᱉ᱍ-ᱏ\"},{name:\"Limbu\",bmp:\"ᤀ-ᤞᤠ-ᤫᤰ-᤻᥀᥄-᥏\"},{name:\"Linear_A\",astral:\"\\ud801[\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]\"},{name:\"Linear_B\",astral:\"\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa]\"},{name:\"Lisu\",bmp:\"ꓐ-꓿\"},{name:\"Lycian\",astral:\"\\ud800[\\ude80-\\ude9c]\"},{name:\"Lydian\",astral:\"\\ud802[\\udd20-\\udd39\\udd3f]\"},{name:\"Mahajani\",astral:\"\\ud804[\\udd50-\\udd76]\"},{name:\"Malayalam\",bmp:\"ഁ-ഃഅ-ഌഎ-ഐഒ-ഺഽ-ൄെ-ൈൊ-ൎൗൟ-ൣ൦-൵൹-ൿ\"},{name:\"Mandaic\",bmp:\"ࡀ-࡛࡞\"},{name:\"Manichaean\",astral:\"\\ud802[\\udec0-\\udee6\\udeeb-\\udef6]\"},{name:\"Meetei_Mayek\",bmp:\"ꫠ-꫶ꯀ-꯭꯰-꯹\"},{name:\"Mende_Kikakui\",astral:\"\\ud83a[\\udc00-\\udcc4\\udcc7-\\udcd6]\"},{name:\"Meroitic_Cursive\",astral:\"\\ud802[\\udda0-\\uddb7\\uddbc-\\uddcf\\uddd2-\\uddff]\"},{name:\"Meroitic_Hieroglyphs\",astral:\"\\ud802[\\udd80-\\udd9f]\"},{name:\"Miao\",astral:\"\\ud81b[\\udf00-\\udf44\\udf50-\\udf7e\\udf8f-\\udf9f]\"},{name:\"Modi\",astral:\"\\ud805[\\ude00-\\ude44\\ude50-\\ude59]\"},{name:\"Mongolian\",bmp:\"᠀᠁᠄᠆-᠎᠐-᠙ᠠ-ᡷᢀ-ᢪ\"},{name:\"Mro\",astral:\"\\ud81a[\\ude40-\\ude5e\\ude60-\\ude69\\ude6e\\ude6f]\"},{name:\"Multani\",astral:\"\\ud804[\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea9]\"},{name:\"Myanmar\",bmp:\"က-႟ꧠ-ꧾꩠ-ꩿ\"},{name:\"Nabataean\",astral:\"\\ud802[\\udc80-\\udc9e\\udca7-\\udcaf]\"},{name:\"New_Tai_Lue\",bmp:\"ᦀ-ᦫᦰ-ᧉ᧐-᧚᧞᧟\"},{name:\"Nko\",bmp:\"߀-ߺ\"},{name:\"Ogham\",bmp:\" -᚜\"},{name:\"Ol_Chiki\",bmp:\"᱐-᱿\"},{name:\"Old_Hungarian\",astral:\"\\ud803[\\udc80-\\udcb2\\udcc0-\\udcf2\\udcfa-\\udcff]\"},{name:\"Old_Italic\",astral:\"\\ud800[\\udf00-\\udf23]\"},{name:\"Old_North_Arabian\",astral:\"\\ud802[\\ude80-\\ude9f]\"},{name:\"Old_Permic\",astral:\"\\ud800[\\udf50-\\udf7a]\"},{name:\"Old_Persian\",astral:\"\\ud800[\\udfa0-\\udfc3\\udfc8-\\udfd5]\"},{name:\"Old_South_Arabian\",astral:\"\\ud802[\\ude60-\\ude7f]\"},{name:\"Old_Turkic\",astral:\"\\ud803[\\udc00-\\udc48]\"},{name:\"Oriya\",bmp:\"ଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ଼-ୄେୈୋ-୍ୖୗଡ଼ଢ଼ୟ-ୣ୦-୷\"},{name:\"Osmanya\",astral:\"\\ud801[\\udc80-\\udc9d\\udca0-\\udca9]\"},{name:\"Pahawh_Hmong\",astral:\"\\ud81a[\\udf00-\\udf45\\udf50-\\udf59\\udf5b-\\udf61\\udf63-\\udf77\\udf7d-\\udf8f]\"},{name:\"Palmyrene\",astral:\"\\ud802[\\udc60-\\udc7f]\"},{name:\"Pau_Cin_Hau\",astral:\"\\ud806[\\udec0-\\udef8]\"},{name:\"Phags_Pa\",bmp:\"ꡀ-꡷\"},{name:\"Phoenician\",astral:\"\\ud802[\\udd00-\\udd1b\\udd1f]\"},{name:\"Psalter_Pahlavi\",astral:\"\\ud802[\\udf80-\\udf91\\udf99-\\udf9c\\udfa9-\\udfaf]\"},{name:\"Rejang\",bmp:\"ꤰ-꥓꥟\"},{name:\"Runic\",bmp:\"ᚠ-ᛪᛮ-ᛸ\"},{name:\"Samaritan\",bmp:\"ࠀ-࠭࠰-࠾\"},{name:\"Saurashtra\",bmp:\"ꢀ-꣄꣎-꣙\"},{name:\"Sharada\",astral:\"\\ud804[\\udd80-\\uddcd\\uddd0-\\udddf]\"},{name:\"Shavian\",astral:\"\\ud801[\\udc50-\\udc7f]\"},{name:\"Siddham\",astral:\"\\ud805[\\udd80-\\uddb5\\uddb8-\\udddd]\"},{name:\"SignWriting\",astral:\"\\ud836[\\udc00-\\ude8b\\ude9b-\\ude9f\\udea1-\\udeaf]\"},{name:\"Sinhala\",bmp:\"ංඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟ෦-෯ෲ-෴\",astral:\"\\ud804[\\udde1-\\uddf4]\"},{name:\"Sora_Sompeng\",astral:\"\\ud804[\\udcd0-\\udce8\\udcf0-\\udcf9]\"},{name:\"Sundanese\",bmp:\"ᮀ-ᮿ᳀-᳇\"},{name:\"Syloti_Nagri\",bmp:\"ꠀ-꠫\"},{name:\"Syriac\",bmp:\"܀-܍܏-݊ݍ-ݏ\"},{name:\"Tagalog\",bmp:\"ᜀ-ᜌᜎ-᜔\"},{name:\"Tagbanwa\",bmp:\"ᝠ-ᝬᝮ-ᝰᝲᝳ\"},{name:\"Tai_Le\",bmp:\"ᥐ-ᥭᥰ-ᥴ\"},{name:\"Tai_Tham\",bmp:\"ᨠ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪠-᪭\"},{name:\"Tai_Viet\",bmp:\"ꪀ-ꫂꫛ-꫟\"},{name:\"Takri\",astral:\"\\ud805[\\ude80-\\udeb7\\udec0-\\udec9]\"},{name:\"Tamil\",bmp:\"ஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-்ௐௗ௦-௺\"},{name:\"Telugu\",bmp:\"ఀ-ఃఅ-ఌఎ-ఐఒ-నప-హఽ-ౄె-ైొ-్ౕౖౘ-ౚౠ-ౣ౦-౯౸-౿\"},{name:\"Thaana\",bmp:\"ހ-ޱ\"},{name:\"Thai\",bmp:\"ก-ฺเ-๛\"},{name:\"Tibetan\",bmp:\"ༀ-ཇཉ-ཬཱ-ྗྙ-ྼ྾-࿌࿎-࿔࿙࿚\"},{name:\"Tifinagh\",bmp:\"ⴰ-ⵧⵯ⵰⵿\"},{name:\"Tirhuta\",astral:\"\\ud805[\\udc80-\\udcc7\\udcd0-\\udcd9]\"},{name:\"Ugaritic\",astral:\"\\ud800[\\udf80-\\udf9d\\udf9f]\"},{name:\"Vai\",bmp:\"ꔀ-ꘫ\"},{name:\"Warang_Citi\",astral:\"\\ud806[\\udca0-\\udcf2\\udcff]\"},{name:\"Yi\",bmp:\"ꀀ-ꒌ꒐-꓆\"}])}(e),e})?r.call(t,n,t,e):r)||(e.exports=o)},function(e,t,n){\"use strict\";var r=n(26),o=n(5),a=n(70),i=(n(71),n(32));n(1),n(128);function s(e,t,n){this.props=e,this.context=t,this.refs=i,this.updater=n||a}function u(e,t,n){this.props=e,this.context=t,this.refs=i,this.updater=n||a}function l(){}s.prototype.isReactComponent={},s.prototype.setState=function(e,t){\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e&&r(\"85\"),this.updater.enqueueSetState(this,e),t&&this.updater.enqueueCallback(this,t,\"setState\")},s.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this),e&&this.updater.enqueueCallback(this,e,\"forceUpdate\")},l.prototype=s.prototype,u.prototype=new l,u.prototype.constructor=u,o(u.prototype,s.prototype),u.prototype.isPureReactComponent=!0,e.exports={Component:s,PureComponent:u}},function(e,t,n){\"use strict\";n(3);var r={isMounted:function(e){return!1},enqueueCallback:function(e,t){},enqueueForceUpdate:function(e){},enqueueReplaceState:function(e,t){},enqueueSetState:function(e,t){}};e.exports=r},function(e,t,n){\"use strict\";var r=!1;e.exports=r},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103;e.exports=r},function(e,t,n){\"use strict\";var r=n(136);e.exports=function(e){return r(e,!1)}},function(e,t,n){\"use strict\";e.exports=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\"},function(e,t,n){\"use strict\";e.exports={hasCachedChildNodes:1}},function(e,t,n){\"use strict\";var r=n(4);n(1);e.exports=function(e,t){return null==t&&r(\"30\"),null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}},function(e,t,n){\"use strict\";e.exports=function(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}},function(e,t,n){\"use strict\";var r=n(9),o=null;e.exports=function(){return!o&&r.canUseDOM&&(o=\"textContent\"in document.documentElement?\"textContent\":\"innerText\"),o}},function(e,t,n){\"use strict\";var r=n(4);var o=n(19),a=(n(1),function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._callbacks=null,this._contexts=null,this._arg=t}return e.prototype.enqueue=function(e,t){this._callbacks=this._callbacks||[],this._callbacks.push(e),this._contexts=this._contexts||[],this._contexts.push(t)},e.prototype.notifyAll=function(){var e=this._callbacks,t=this._contexts,n=this._arg;if(e&&t){e.length!==t.length&&r(\"24\"),this._callbacks=null,this._contexts=null;for(var o=0;o<e.length;o++)e[o].call(t[o],n);e.length=0,t.length=0}},e.prototype.checkpoint=function(){return this._callbacks?this._callbacks.length:0},e.prototype.rollback=function(e){this._callbacks&&this._contexts&&(this._callbacks.length=e,this._contexts.length=e)},e.prototype.reset=function(){this._callbacks=null,this._contexts=null},e.prototype.destructor=function(){this.reset()},e}());e.exports=o.addPoolingTo(a)},function(e,t,n){\"use strict\";e.exports={logTopLevelRenders:!1}},function(e,t,n){\"use strict\";var r=n(6);function o(e){var t=e.type,n=e.nodeName;return n&&\"input\"===n.toLowerCase()&&(\"checkbox\"===t||\"radio\"===t)}function a(e){return e._wrapperState.valueTracker}var i={_getTrackerFromNode:function(e){return a(r.getInstanceFromNode(e))},track:function(e){if(!a(e)){var t=r.getNodeFromInstance(e),n=o(t)?\"checked\":\"value\",i=Object.getOwnPropertyDescriptor(t.constructor.prototype,n),s=\"\"+t[n];t.hasOwnProperty(n)||\"function\"!=typeof i.get||\"function\"!=typeof i.set||(Object.defineProperty(t,n,{enumerable:i.enumerable,configurable:!0,get:function(){return i.get.call(this)},set:function(e){s=\"\"+e,i.set.call(this,e)}}),function(e,t){e._wrapperState.valueTracker=t}(e,{getValue:function(){return s},setValue:function(e){s=\"\"+e},stopTracking:function(){!function(e){e._wrapperState.valueTracker=null}(e),delete t[n]}}))}},updateValueIfChanged:function(e){if(!e)return!1;var t=a(e);if(!t)return i.track(e),!0;var n,s,u=t.getValue(),l=((n=r.getNodeFromInstance(e))&&(s=o(n)?\"\"+n.checked:n.value),s);return l!==u&&(t.setValue(l),!0)},stopTracking:function(e){var t=a(e);t&&t.stopTracking()}};e.exports=i},function(e,t,n){\"use strict\";var r={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};e.exports=function(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===t?!!r[e.type]:\"textarea\"===t}},function(e,t,n){\"use strict\";var r={currentScrollLeft:0,currentScrollTop:0,refreshScrollValues:function(e){r.currentScrollLeft=e.x,r.currentScrollTop=e.y}};e.exports=r},function(e,t,n){\"use strict\";var r=n(9),o=n(36),a=n(35),i=function(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t};r.canUseDOM&&(\"textContent\"in document.documentElement||(i=function(e,t){3!==e.nodeType?a(e,o(t)):e.nodeValue=t})),e.exports=i},function(e,t,n){\"use strict\";e.exports=function(e){try{e.focus()}catch(e){}}},function(e,t,n){\"use strict\";var r={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0};var o=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(r).forEach(function(e){o.forEach(function(t){r[function(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}(t,e)]=r[e]})});var a={isUnitlessNumber:r,shorthandPropertyExpansions:{background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}}};e.exports=a},function(e,t,n){\"use strict\";var r=n(22),o=(n(6),n(13),n(171)),a=(n(3),new RegExp(\"^[\"+r.ATTRIBUTE_NAME_START_CHAR+\"][\"+r.ATTRIBUTE_NAME_CHAR+\"]*$\")),i={},s={};function u(e){return!!s.hasOwnProperty(e)||!i.hasOwnProperty(e)&&(a.test(e)?(s[e]=!0,!0):(i[e]=!0,!1))}function l(e,t){return null==t||e.hasBooleanValue&&!t||e.hasNumericValue&&isNaN(t)||e.hasPositiveNumericValue&&t<1||e.hasOverloadedBooleanValue&&!1===t}var c={createMarkupForID:function(e){return r.ID_ATTRIBUTE_NAME+\"=\"+o(e)},setAttributeForID:function(e,t){e.setAttribute(r.ID_ATTRIBUTE_NAME,t)},createMarkupForRoot:function(){return r.ROOT_ATTRIBUTE_NAME+'=\"\"'},setAttributeForRoot:function(e){e.setAttribute(r.ROOT_ATTRIBUTE_NAME,\"\")},createMarkupForProperty:function(e,t){var n=r.properties.hasOwnProperty(e)?r.properties[e]:null;if(n){if(l(n,t))return\"\";var a=n.attributeName;return n.hasBooleanValue||n.hasOverloadedBooleanValue&&!0===t?a+'=\"\"':a+\"=\"+o(t)}return r.isCustomAttribute(e)?null==t?\"\":e+\"=\"+o(t):null},createMarkupForCustomAttribute:function(e,t){return u(e)&&null!=t?e+\"=\"+o(t):\"\"},setValueForProperty:function(e,t,n){var o=r.properties.hasOwnProperty(t)?r.properties[t]:null;if(o){var a=o.mutationMethod;if(a)a(e,n);else{if(l(o,n))return void this.deleteValueForProperty(e,t);if(o.mustUseProperty)e[o.propertyName]=n;else{var i=o.attributeName,s=o.attributeNamespace;s?e.setAttributeNS(s,i,\"\"+n):o.hasBooleanValue||o.hasOverloadedBooleanValue&&!0===n?e.setAttribute(i,\"\"):e.setAttribute(i,\"\"+n)}}}else if(r.isCustomAttribute(t))return void c.setValueForAttribute(e,t,n)},setValueForAttribute:function(e,t,n){u(t)&&(null==n?e.removeAttribute(t):e.setAttribute(t,\"\"+n))},deleteValueForAttribute:function(e,t){e.removeAttribute(t)},deleteValueForProperty:function(e,t){var n=r.properties.hasOwnProperty(t)?r.properties[t]:null;if(n){var o=n.mutationMethod;if(o)o(e,void 0);else if(n.mustUseProperty){var a=n.propertyName;n.hasBooleanValue?e[a]=!1:e[a]=\"\"}else e.removeAttribute(n.attributeName)}else r.isCustomAttribute(t)&&e.removeAttribute(t)}};e.exports=c},function(e,t,n){\"use strict\";var r=n(5),o=n(49),a=n(6),i=n(16),s=(n(3),!1);function u(){if(this._rootNodeID&&this._wrapperState.pendingUpdate){this._wrapperState.pendingUpdate=!1;var e=this._currentElement.props,t=o.getValue(e);null!=t&&l(this,Boolean(e.multiple),t)}}function l(e,t,n){var r,o,i=a.getNodeFromInstance(e).options;if(t){for(r={},o=0;o<n.length;o++)r[\"\"+n[o]]=!0;for(o=0;o<i.length;o++){var s=r.hasOwnProperty(i[o].value);i[o].selected!==s&&(i[o].selected=s)}}else{for(r=\"\"+n,o=0;o<i.length;o++)if(i[o].value===r)return void(i[o].selected=!0);i.length&&(i[0].selected=!0)}}var c={getHostProps:function(e,t){return r({},t,{onChange:e._wrapperState.onChange,value:void 0})},mountWrapper:function(e,t){var n=o.getValue(t);e._wrapperState={pendingUpdate:!1,initialValue:null!=n?n:t.defaultValue,listeners:null,onChange:function(e){var t=this._currentElement.props,n=o.executeOnChange(t,e);this._rootNodeID&&(this._wrapperState.pendingUpdate=!0);return i.asap(u,this),n}.bind(e),wasMultiple:Boolean(t.multiple)},void 0===t.value||void 0===t.defaultValue||s||(s=!0)},getSelectValueContext:function(e){return e._wrapperState.initialValue},postUpdateWrapper:function(e){var t=e._currentElement.props;e._wrapperState.initialValue=void 0;var n=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=Boolean(t.multiple);var r=o.getValue(t);null!=r?(e._wrapperState.pendingUpdate=!1,l(e,Boolean(t.multiple),r)):n!==Boolean(t.multiple)&&(null!=t.defaultValue?l(e,Boolean(t.multiple),t.defaultValue):l(e,Boolean(t.multiple),t.multiple?[]:\"\"))}};e.exports=c},function(e,t,n){\"use strict\";var r=n(4),o=n(5),a=n(180),i=n(91),s=n(92),u=(n(181),n(1),n(3),function(e){this.construct(e)});function l(e,t){var n;if(null===e||!1===e)n=i.create(l);else if(\"object\"==typeof e){var o=e,a=o.type;if(\"function\"!=typeof a&&\"string\"!=typeof a){var c=\"\";0,c+=function(e){if(e){var t=e.getName();if(t)return\" Check the render method of `\"+t+\"`.\"}return\"\"}(o._owner),r(\"130\",null==a?a:typeof a,c)}\"string\"==typeof o.type?n=s.createInternalComponent(o):!function(e){return\"function\"==typeof e&&void 0!==e.prototype&&\"function\"==typeof e.prototype.mountComponent&&\"function\"==typeof e.prototype.receiveComponent}(o.type)?n=new u(o):(n=new o.type(o)).getHostNode||(n.getHostNode=n.getNativeNode)}else\"string\"==typeof e||\"number\"==typeof e?n=s.createInstanceForText(e):r(\"131\",typeof e);return n._mountIndex=0,n._mountImage=null,n}o(u.prototype,a,{_instantiateReactComponent:l}),e.exports=l},function(e,t,n){\"use strict\";var r=n(4),o=n(20),a=(n(1),{HOST:0,COMPOSITE:1,EMPTY:2,getType:function(e){return null===e||!1===e?a.EMPTY:o.isValidElement(e)?\"function\"==typeof e.type?a.COMPOSITE:a.HOST:void r(\"26\",e)}});e.exports=a},function(e,t,n){\"use strict\";var r,o={injectEmptyComponentFactory:function(e){r=e}},a={create:function(e){return r(e)}};a.injection=o,e.exports=a},function(e,t,n){\"use strict\";var r=n(4),o=(n(1),null),a=null;var i={createInternalComponent:function(e){return o||r(\"111\",e.type),new o(e)},createInstanceForText:function(e){return new a(e)},isTextComponent:function(e){return e instanceof a},injection:{injectGenericComponentClass:function(e){o=e},injectTextComponentClass:function(e){a=e}}};e.exports=i},function(e,t,n){\"use strict\";var r=n(4),o=(n(17),n(182)),a=n(183),i=(n(1),n(53)),s=(n(3),\".\"),u=\":\";function l(e,t){return e&&\"object\"==typeof e&&null!=e.key?i.escape(e.key):t.toString(36)}e.exports=function(e,t,n){return null==e?0:function e(t,n,c,d){var f,p=typeof t;if(\"undefined\"!==p&&\"boolean\"!==p||(t=null),null===t||\"string\"===p||\"number\"===p||\"object\"===p&&t.$$typeof===o)return c(d,t,\"\"===n?s+l(t,0):n),1;var h=0,m=\"\"===n?s:n+u;if(Array.isArray(t))for(var g=0;g<t.length;g++)h+=e(f=t[g],m+l(f,g),c,d);else{var v=a(t);if(v){var b,y=v.call(t);if(v!==t.entries)for(var w=0;!(b=y.next()).done;)h+=e(f=b.value,m+l(f,w++),c,d);else for(;!(b=y.next()).done;){var x=b.value;x&&(h+=e(f=x[1],m+i.escape(x[0])+u+l(f,0),c,d))}}else if(\"object\"===p){var _=\"\",E=String(t);r(\"31\",\"[object Object]\"===E?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":E,_)}}return h}(e,\"\",t,n)}},function(e,t,n){\"use strict\";var r,o,a,i,s,u,l,c=n(26),d=n(17);n(1),n(3);function f(e){var t=Function.prototype.toString,n=Object.prototype.hasOwnProperty,r=RegExp(\"^\"+t.call(n).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");try{var o=t.call(e);return r.test(o)}catch(e){return!1}}if(\"function\"==typeof Array.from&&\"function\"==typeof Map&&f(Map)&&null!=Map.prototype&&\"function\"==typeof Map.prototype.keys&&f(Map.prototype.keys)&&\"function\"==typeof Set&&f(Set)&&null!=Set.prototype&&\"function\"==typeof Set.prototype.keys&&f(Set.prototype.keys)){var p=new Map,h=new Set;r=function(e,t){p.set(e,t)},o=function(e){return p.get(e)},a=function(e){p.delete(e)},i=function(){return Array.from(p.keys())},s=function(e){h.add(e)},u=function(e){h.delete(e)},l=function(){return Array.from(h.keys())}}else{var m={},g={},v=function(e){return\".\"+e},b=function(e){return parseInt(e.substr(1),10)};r=function(e,t){var n=v(e);m[n]=t},o=function(e){var t=v(e);return m[t]},a=function(e){var t=v(e);delete m[t]},i=function(){return Object.keys(m).map(b)},s=function(e){var t=v(e);g[t]=!0},u=function(e){var t=v(e);delete g[t]},l=function(){return Object.keys(g).map(b)}}var y=[];function w(e){var t=o(e);if(t){var n=t.childIDs;a(e),n.forEach(w)}}function x(e,t,n){return\"\\n    in \"+(e||\"Unknown\")+(t?\" (at \"+t.fileName.replace(/^.*[\\\\\\/]/,\"\")+\":\"+t.lineNumber+\")\":n?\" (created by \"+n+\")\":\"\")}function _(e){return null==e?\"#empty\":\"string\"==typeof e||\"number\"==typeof e?\"#text\":\"string\"==typeof e.type?e.type:e.type.displayName||e.type.name||\"Unknown\"}function E(e){var t,n=k.getDisplayName(e),r=k.getElement(e),o=k.getOwnerID(e);return o&&(t=k.getDisplayName(o)),x(n,r&&r._source,t)}var k={onSetChildren:function(e,t){var n=o(e);n||c(\"144\"),n.childIDs=t;for(var r=0;r<t.length;r++){var a=t[r],i=o(a);i||c(\"140\"),null==i.childIDs&&\"object\"==typeof i.element&&null!=i.element&&c(\"141\"),i.isMounted||c(\"71\"),null==i.parentID&&(i.parentID=e),i.parentID!==e&&c(\"142\",a,i.parentID,e)}},onBeforeMountComponent:function(e,t,n){r(e,{element:t,parentID:n,text:null,childIDs:[],isMounted:!1,updateCount:0})},onBeforeUpdateComponent:function(e,t){var n=o(e);n&&n.isMounted&&(n.element=t)},onMountComponent:function(e){var t=o(e);t||c(\"144\"),t.isMounted=!0,0===t.parentID&&s(e)},onUpdateComponent:function(e){var t=o(e);t&&t.isMounted&&t.updateCount++},onUnmountComponent:function(e){var t=o(e);t&&(t.isMounted=!1,0===t.parentID&&u(e));y.push(e)},purgeUnmountedComponents:function(){if(!k._preventPurging){for(var e=0;e<y.length;e++){w(y[e])}y.length=0}},isMounted:function(e){var t=o(e);return!!t&&t.isMounted},getCurrentStackAddendum:function(e){var t=\"\";if(e){var n=_(e),r=e._owner;t+=x(n,e._source,r&&r.getName())}var o=d.current,a=o&&o._debugID;return t+=k.getStackAddendumByID(a)},getStackAddendumByID:function(e){for(var t=\"\";e;)t+=E(e),e=k.getParentID(e);return t},getChildIDs:function(e){var t=o(e);return t?t.childIDs:[]},getDisplayName:function(e){var t=k.getElement(e);return t?_(t):null},getElement:function(e){var t=o(e);return t?t.element:null},getOwnerID:function(e){var t=k.getElement(e);return t&&t._owner?t._owner._debugID:null},getParentID:function(e){var t=o(e);return t?t.parentID:null},getSource:function(e){var t=o(e),n=t?t.element:null;return null!=n?n._source:null},getText:function(e){var t=k.getElement(e);return\"string\"==typeof t?t:\"number\"==typeof t?\"\"+t:null},getUpdateCount:function(e){var t=o(e);return t?t.updateCount:0},getRootIDs:l,getRegisteredIDs:i,pushNonStandardWarningStack:function(e,t){if(\"function\"==typeof console.reactStack){var n=[],r=d.current,o=r&&r._debugID;try{for(e&&n.push({name:o?k.getDisplayName(o):null,fileName:t?t.fileName:null,lineNumber:t?t.lineNumber:null});o;){var a=k.getElement(o),i=k.getParentID(o),s=k.getOwnerID(o),u=s?k.getDisplayName(s):null,l=a&&a._source;n.push({name:u,fileName:l?l.fileName:null,lineNumber:l?l.lineNumber:null}),o=i}}catch(e){}console.reactStack(n)}},popNonStandardWarningStack:function(){\"function\"==typeof console.reactStackEnd&&console.reactStackEnd()}};e.exports=k},function(e,t,n){\"use strict\";var r=n(11),o={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent(\"on\"+t,n),{remove:function(){e.detachEvent(\"on\"+t,n)}}):void 0},capture:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!0),{remove:function(){e.removeEventListener(t,n,!0)}}):{remove:r}},registerDefault:function(){}};e.exports=o},function(e,t,n){\"use strict\";var r=n(195),o=n(197),a=n(85),i=n(97);var s={hasSelectionCapabilities:function(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(\"input\"===t&&\"text\"===e.type||\"textarea\"===t||\"true\"===e.contentEditable)},getSelectionInformation:function(){var e=i();return{focusedElem:e,selectionRange:s.hasSelectionCapabilities(e)?s.getSelection(e):null}},restoreSelection:function(e){var t,n=i(),r=e.focusedElem,u=e.selectionRange;n!==r&&(t=r,o(document.documentElement,t))&&(s.hasSelectionCapabilities(r)&&s.setSelection(r,u),a(r))},getSelection:function(e){var t;if(\"selectionStart\"in e)t={start:e.selectionStart,end:e.selectionEnd};else if(document.selection&&e.nodeName&&\"input\"===e.nodeName.toLowerCase()){var n=document.selection.createRange();n.parentElement()===e&&(t={start:-n.moveStart(\"character\",-e.value.length),end:-n.moveEnd(\"character\",-e.value.length)})}else t=r.getOffsets(e);return t||{start:0,end:0}},setSelection:function(e,t){var n=t.start,o=t.end;if(void 0===o&&(o=n),\"selectionStart\"in e)e.selectionStart=n,e.selectionEnd=Math.min(o,e.value.length);else if(document.selection&&e.nodeName&&\"input\"===e.nodeName.toLowerCase()){var a=e.createTextRange();a.collapse(!0),a.moveStart(\"character\",n),a.moveEnd(\"character\",o-n),a.select()}else r.setOffsets(e,t)}};e.exports=s},function(e,t,n){\"use strict\";e.exports=function(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}},function(e,t,n){\"use strict\";var r=n(4),o=n(24),a=n(22),i=n(20),s=n(37),u=(n(17),n(6)),l=n(212),c=n(213),d=n(80),f=n(30),p=(n(13),n(214)),h=n(23),m=n(54),g=n(16),v=n(32),b=n(89),y=(n(1),n(35)),w=n(52),x=(n(3),a.ID_ATTRIBUTE_NAME),_=a.ROOT_ATTRIBUTE_NAME,E=1,k=9,S=11,C={};function O(e){return e?e.nodeType===k?e.documentElement:e.firstChild:null}function T(e){return e.getAttribute&&e.getAttribute(x)||\"\"}function P(e,t,n,r,o){var a;if(d.logTopLevelRenders){var i=e._currentElement.props.child.type;a=\"React mount: \"+(\"string\"==typeof i?i:i.displayName||i.name),console.time(a)}var s=h.mountComponent(e,n,null,l(e,t),o,0);a&&console.timeEnd(a),e._renderedComponent._topLevelWrapper=e,M._mountImageIntoNode(s,t,e,r,n)}function I(e,t,n,r){var o=g.ReactReconcileTransaction.getPooled(!n&&c.useCreateElement);o.perform(P,null,e,t,o,n,r),g.ReactReconcileTransaction.release(o)}function D(e,t,n){for(0,h.unmountComponent(e,n),t.nodeType===k&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)}function N(e){var t=O(e);if(t){var n=u.getInstanceFromNode(t);return!(!n||!n._hostParent)}}function A(e){return!(!e||e.nodeType!==E&&e.nodeType!==k&&e.nodeType!==S)}function j(e){var t=function(e){var t=O(e),n=t&&u.getInstanceFromNode(t);return n&&!n._hostParent?n:null}(e);return t?t._hostContainerInfo._topLevelWrapper:null}var L=1,R=function(){this.rootID=L++};R.prototype.isReactComponent={},R.prototype.render=function(){return this.props.child},R.isReactTopLevelWrapper=!0;var M={TopLevelWrapper:R,_instancesByReactRootID:C,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r,o){return M.scrollMonitor(r,function(){m.enqueueElementInternal(e,t,n),o&&m.enqueueCallbackInternal(e,o)}),e},_renderNewRootComponent:function(e,t,n,o){A(t)||r(\"37\"),s.ensureScrollValueMonitoring();var a=b(e,!1);g.batchedUpdates(I,a,t,n,o);var i=a._instance.rootID;return C[i]=a,a},renderSubtreeIntoContainer:function(e,t,n,o){return null!=e&&f.has(e)||r(\"38\"),M._renderSubtreeIntoContainer(e,t,n,o)},_renderSubtreeIntoContainer:function(e,t,n,o){m.validateCallback(o,\"ReactDOM.render\"),i.isValidElement(t)||r(\"39\",\"string\"==typeof t?\" Instead of passing a string like 'div', pass React.createElement('div') or <div />.\":\"function\"==typeof t?\" Instead of passing a class like Foo, pass React.createElement(Foo) or <Foo />.\":null!=t&&void 0!==t.props?\" This may be caused by unintentionally loading two independent copies of React.\":\"\");var a,s=i.createElement(R,{child:t});if(e){var u=f.get(e);a=u._processChildContext(u._context)}else a=v;var l=j(n);if(l){var c=l._currentElement.props.child;if(w(c,t)){var d=l._renderedComponent.getPublicInstance(),p=o&&function(){o.call(d)};return M._updateRootComponent(l,s,a,n,p),d}M.unmountComponentAtNode(n)}var h=O(n),g=h&&!!T(h),b=N(n),y=g&&!l&&!b,x=M._renderNewRootComponent(s,n,y,a)._renderedComponent.getPublicInstance();return o&&o.call(x),x},render:function(e,t,n){return M._renderSubtreeIntoContainer(null,e,t,n)},unmountComponentAtNode:function(e){A(e)||r(\"40\");var t=j(e);if(!t){N(e),1===e.nodeType&&e.hasAttribute(_);return!1}return delete C[t._instance.rootID],g.batchedUpdates(D,t,e,!1),!0},_mountImageIntoNode:function(e,t,n,a,i){if(A(t)||r(\"41\"),a){var s=O(t);if(p.canReuseMarkup(e,s))return void u.precacheNode(n,s);var l=s.getAttribute(p.CHECKSUM_ATTR_NAME);s.removeAttribute(p.CHECKSUM_ATTR_NAME);var c=s.outerHTML;s.setAttribute(p.CHECKSUM_ATTR_NAME,l);var d=e,f=function(e,t){for(var n=Math.min(e.length,t.length),r=0;r<n;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.length?-1:n}(d,c),h=\" (client) \"+d.substring(f-20,f+20)+\"\\n (server) \"+c.substring(f-20,f+20);t.nodeType===k&&r(\"42\",h)}if(t.nodeType===k&&r(\"43\"),i.useCreateElement){for(;t.lastChild;)t.removeChild(t.lastChild);o.insertTreeBefore(t,e,null)}else y(t,e),u.precacheNode(n,t.firstChild)}};e.exports=M},function(e,t,n){\"use strict\";var r=n(90);e.exports=function(e){for(var t;(t=e._renderedNodeType)===r.COMPOSITE;)e=e._renderedComponent;return t===r.HOST?e._renderedComponent:t===r.EMPTY?null:void 0}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o=n(57),a=o.eachProp,i=o.toIntegerOrDefault,s=o.toArrayIndexOrDefault,u=o.toArrayIndex,l=o.isFunction,c=o.isObjectLike,d=o.isArray,f=o.isString,p=o.isNullOrUndefined,h=o.hasOwnProperties,m=o.UNDEFINED,g=o.firstDefined,v=o.boxOut,b=\"@@BOXED_THIS\";e.exports.BOXED_GET_THIS=b;var y=\"_$\",w=\"$_\",x={_$:{getBoxedIn:function(){return this.boxedInProxy},getBoxedOut:function(){return this.boxedInProxy},set:function(e){return this.setValueOf(e)},delete:function(){return this.deleteValueOf()},ownPropertyDescriptor:function(){return{value:this.boxedInProxy,writable:!0}}},$_:{getBoxedIn:function(){return this.getBoxedOutValue()},getBoxedOut:function(){return this.getBoxedOutValue()},set:function(e){return this.setValueOf(e)},delete:function(){return this.deleteValueOf()},ownPropertyDescriptor:function(){return{value:this.getBoxedOutValue(),writable:!!this.boxedOutProxy}}},$_forEachKey:{getBoxedIn:function(){return this.forEachKey},getBoxedOut:function(){return this.forEachKey},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.forEachKey}}},$_if:{getBoxedIn:function(){return this.ifValueBoxedOut},getBoxedOut:function(){return this.ifValueBoxedOut},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueBoxedOut}}},if_$:{getBoxedIn:function(){return this.ifValueBoxedIn},getBoxedOut:function(){return this.ifValueBoxedIn},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueBoxedIn}}},$_ifValid:{getBoxedIn:function(){return this.ifValueValidBoxedOut},getBoxedOut:function(){return this.ifValueValidBoxedOut},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueValidBoxedOut}}},ifValid_$:{getBoxedIn:function(){return this.ifValueValidBoxedIn},getBoxedOut:function(){return this.ifValueValidBoxedIn},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueValidBoxedIn}}},$_ifArray:{getBoxedIn:function(){return this.ifValueArrayBoxedOut},getBoxedOut:function(){return this.ifValueArrayBoxedOut},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueArrayBoxedOut}}},ifArray_$:{getBoxedIn:function(){return this.ifValueArrayBoxedIn},getBoxedOut:function(){return this.ifValueArrayBoxedIn},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueArrayBoxedIn}}},$_array:{getBoxedIn:function(){return this.valueArrayBoxedOut()},getBoxedOut:function(){return this.valueArrayBoxedOut()},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.valueArrayBoxedOut()}}},$_ifObject:{getBoxedIn:function(){return this.ifValueObjectBoxedOut},getBoxedOut:function(){return this.ifValueObjectBoxedOut},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueObjectBoxedOut}}},$_object:{getBoxedIn:function(){return this.valueObjectBoxedOut()},getBoxedOut:function(){return this.valueObjectBoxedOut()},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.valueObjectBoxedOut()}}},ifObject_$:{getBoxedIn:function(){return this.ifValueObjectBoxedIn},getBoxedOut:function(){return this.ifValueObjectBoxedIn},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueObjectBoxedIn}}},$_ifDefined:{getBoxedIn:function(){return this.ifValueDefinedBoxedOut},getBoxedOut:function(){return this.ifValueDefinedBoxedOut},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueDefinedBoxedOut}}},ifDefined_$:{getBoxedIn:function(){return this.ifValueDefinedBoxedIn},getBoxedOut:function(){return this.ifValueDefinedBoxedIn},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.ifValueDefinedBoxedIn}}},forEachKey_$:{getBoxedIn:function(){return this.forEachKeyBoxed},getBoxedOut:function(){return this.forEachKeyBoxed},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.forEachKeyBoxed}}},default_$:{getBoxedIn:function(){return this.setValueOfBoxedInDefault},getBoxedOut:function(){return this.setValueOfBoxedInDefault},set:function(e){return this.setValueOfDefaultMagic(e)},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.setValueOfBoxedInDefault,writable:!0}}},$_default:{getBoxedIn:function(){return this.setValueOfBoxedOutDefault},getBoxedOut:function(){return this.setValueOfBoxedOutDefault},set:function(e){return this.setValueOfDefaultMagic(e)},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.setValueOfBoxedOutDefault,writable:!0}}},path_$:{getBoxedIn:function(){return this.boxedInOfPath},getBoxedOut:function(){return this.boxedInOfPath},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.boxedInOfPath,writable:!1}}},$_path:{getBoxedIn:function(){return this.valueOfPath},getBoxedOut:function(){return this.valueOfPath},set:function(e){return!1},delete:function(){return!1},ownPropertyDescriptor:function(){return{value:this.valueOfPath,writable:!1}}},$_value:{getBoxedIn:function(){return this.valueOf()},getBoxedOut:function(){return this.valueOf()},set:function(e){return this.setValueOf(e)},delete:function(){return this.deleteValueOf()},ownPropertyDescriptor:function(){return{value:this.value}}},$_modified:{getBoxedIn:function(){return this.valueOfModified()},getBoxedOut:function(){return this.valueOfModified()},set:function(e){return this.setValueOfModified(e)},delete:function(){return this.deleteValueOfModified()},ownPropertyDescriptor:function(){return{value:this.isCopy?this.value:m}}},$_delta:{getBoxedIn:function(){return this.unboxedDelta()},getBoxedOut:function(){return this.unboxedDelta()},set:function(e){return this.setUnboxedDelta(e)},delete:function(){return this.deleteUnboxedDelta()},ownPropertyDescriptor:function(){return{value:this.isCopy?this.unboxedDelta():m}}},$_deepDelta:{getBoxedIn:function(){return this.unboxedDeepDelta()},getBoxedOut:function(){return this.unboxedDeepDelta()},set:function(e){return this.setUnboxedDeepDelta(e)},delete:function(){return this.deleteUnboxedDeepDelta()},ownPropertyDescriptor:function(){return{value:this.isCopy?this.unboxedDeepDelta():m}}}},_={\"_$|$_\":x},E={setTransforms:null,getTransforms:null};function k(e,t){e=Object.assign({},e||{}),t?(e.boxedInSuffix=t.boxedInSuffix,e.boxedOutPrefix=t.boxedOutPrefix,this.globalBox=t.context.globalBox):this.globalBox=m,this.deleteEmptyCollections=g(e.deleteEmptyCollections,!0),this.ignoreUndefinedProperties=g(e.ignoreUndefinedProperties,!0),this.arrayDeltaObjects=g(e.arrayDeltaObjects,!1),this.arrayDeltaPartials=g(e.arrayDeltaPartials,!1),this.arrayDeltaObjectMarker=g(e.arrayDeltaObjectMarker,m),this.arrayDeltaObjectMarkerValue=g(e.arrayDeltaObjectMarkerValue,m),this.arrayDeepDeltaObjects=g(e.arrayDeepDeltaObjects,!1),this.arrayDeepDeltaObjectMarker=g(e.arrayDeepDeltaObjectMarker,m),this.arrayDeepDeltaObjectMarkerValue=g(e.arrayDeepDeltaObjectMarkerValue,m),this.arrayDeepDeltaPartials=g(e.arrayDeepDeltaPartials,!0),this.boxedInSuffix=e.boxedInSuffix||y,this.boxedOutPrefix=e.boxedOutPrefix||w,this.boxedArrayEnd=this.boxedInSuffix;var n=this.boxedOutPrefix+\"|\"+this.boxedInSuffix;if(!o.hasOwnProperty(_,n)){for(var r=Object.keys(x),a=r.length,i={};a--;){var s=r[a];i[s?this.reWrapMagicProp(s):s]=x[s]}_[n]=i}this.reservedProps=_[n],this.reservedPropsList=Object.keys(this.reservedProps)}function S(e){return o.isObjectLike(e)&&e.constructor===k?e:new k(e)}function C(e){c(e.withBoxedOut)?(e.withBoxedOut[b]=e,e.boxedOutProxy=new Proxy(e.withBoxedOut,H)):e.withBoxedOut=m}function O(e){e.withBoxedIn=e.withBoxedIn.bind(e),e.setValueOfBoxedInDefault=e.setValueOfBoxedInDefault.bind(e),e.setValueOfBoxedOutDefault=e.setValueOfBoxedOutDefault.bind(e),e.forEachKey=e.forEachKey.bind(e),e.forEachKeyBoxed=e.forEachKeyBoxed.bind(e),e.ifValueBoxedOut=e.ifValueBoxedOut.bind(e),e.ifValueBoxedIn=e.ifValueBoxedIn.bind(e),e.ifValueDefinedBoxedOut=e.ifValueDefinedBoxedOut.bind(e),e.ifValueDefinedBoxedIn=e.ifValueDefinedBoxedIn.bind(e),e.ifValueValidBoxedOut=e.ifValueValidBoxedOut.bind(e),e.ifValueValidBoxedIn=e.ifValueValidBoxedIn.bind(e),e.ifValueArrayBoxedOut=e.ifValueArrayBoxedOut.bind(e),e.ifValueArrayBoxedIn=e.ifValueArrayBoxedIn.bind(e),e.ifValueObjectBoxedOut=e.ifValueObjectBoxedOut.bind(e),e.ifValueObjectBoxedIn=e.ifValueObjectBoxedIn.bind(e),e.getValueProp=e.getValueProp.bind(e),e.setValueProp=e.setValueProp.bind(e),e.boxedInOfPath=e.boxedInOfPath.bind(e),e.valueOfPath=e.valueOfPath.bind(e),e.withBoxedIn[b]=e,Object.defineProperty(e.withBoxedIn,\"length\",{value:0,writable:!0,configurable:!1,enumerable:!1}),e.boxedInProxy=new Proxy(e.withBoxedIn,H),C(e)}function T(e){var t=void 0;return c(e)&&(e.constructor===Object||(t=e.constructor===Array))?t?Array:Object:m}function P(e){return c(e)?d(e)?v([]):v({}):m}function I(e,t,n,r,o){var a=this;this.context=t?t.context.boxedContext(r):S(r),this.value=e,this.parent=t,this.prop=n,this.boxedProps={},this.modifiedProps={},this.reservedProps=this.context.reservedProps,this.globalBox=this.context.globalBox,this.setTransforms=o&&o.setTransforms,this.getTransforms=o&&o.getTransforms,this.boxedArrayEnd=this.context.boxedArrayEnd,this.boxedInProxy=m,this.boxedOutProxy=m,this.withBoxedOut=P(this.value),c(this.getTransforms)&&(this.value=j(e,this.getTransforms,this.boxedArrayEnd,!0,!0,function(e){a.modifiedProps[e]=!0})),this.isCopy=this.value!==e,this.isFullCopy=!1}function D(){T(this.value)!==T(this.withBoxedOut)&&(this.withBoxedOut&&(this.withBoxedOut[b]=!1),this.withBoxedOut=P(this.value),C(this))}e.exports.BOX_ONLY_PROPERTIES=E,e.exports.BoxedContext=k,k.prototype.reWrapMagicProp=function(e){return o.endsWith(e,y)?e.substr(0,e.length-y.length)+this.boxedInSuffix:o.startsWith(e,w)?this.boxedOutPrefix+e.substr(w.length,e.length-w.length):e},k.prototype.boxedContext=function(e){return h.call(e)?new k(e,this):this},k.prototype.copyUnreservedKeys=function(e,t){if(!c(e))return l(t)?[\"length\"]:[];var n=Object.keys(e);if(n.length>0)for(var r=this.reservedPropsList,o=r.length;o--;){var a=r[o];e.hasOwnProperty(a)&&n.splice(n.indexOf(a),1)}return-1===n.indexOf(\"length\")&&n.push(\"length\"),n},e.exports.boxedContext=S,e.exports.Box=I,I.prototype.withBoxedIn=function(e){return e!==m?l(e)?e(this.boxedInProxy):(this.setValueOf(e),this.boxedInProxy):this.value};var N={};function A(e,t,n,r,o,a,i,s,u,d){if(e||t)for(var f=[].concat(e,t),p=f.length,h=0;h<p;h++){var m=f[h];m&&(d&&c(m)?o=j(o,m,n,u,d):u&&l(m)&&(o=m(o,r,a,i,s)))}return o}function j(e,t,n,r,a,i){var s=void 0;function u(t,n){e[t]!==n&&(s||(e=o.cloneArrayObject.call(e),s=!0),e[t]=n,i&&i(t))}function l(t){return e[t]}var c=Object.assign({},e),d=t[n],f=Object.keys(t),p=f.length;if(!d||p>1)for(;p--;){var h=f[p];if(e.hasOwnProperty(h)){var m=t[h];if(m){var g=c[h];u(h,A(m,d,n,h,e[h],g,l,u,r,a))}}}if(d)for(var v=Object.keys(e),b=v.length;b--;){var y=v[b];if(!t.hasOwnProperty(y)){var w=c[y];u(y,A(d,void 0,n,y,e[y],w,l,u,r,a))}}return e}function L(e){return(\"shallow\"===e?1:(\"deep\"===e||\"merge\"===e)&&Number.MAX_SAFE_INTEGER)||i(e)}function R(e,t){var n=this.value;function o(t,r,o){var a=n[t];if(a!==m||r.undefs)if(e)o(t,this.getBoxedIn(t),a);else{var i=this.getBoxedOut(t);o(t,i!==m?i:a,a)}}if((d(t)||(void 0===t?\"undefined\":r(t))===(void 0===arguments?\"undefined\":r(arguments)))&&c(n)){var a=t.length-1,i=t[a];if(l(i)){var f=d(n),p=void 0,h=void 0,g={};if(a&&(c(t[0])&&(g.props=arg.props,g.undefs=arg.undefs,t.splice(0,1),a--),a)){var v=f&&!g.props,b=void 0;for(p=a,h=[];p--;){var y=t[p];c(y)?d(y)?h.concat(y):h.concat(Object.keys(y)):v&&(b=s(y))?h.push(b):h.push(y)}}if(h)for(var w=h,x=w.length;x--;){var _=w[x];n.hasOwnProperty(_)&&(f&&(_=u(_)),o.call(this,_,g,i))}else if(f&&!g.props)for(var E=n.length;E--;)o.call(this,E,g,i);else for(var k=Object.keys(n),S=k.length;S--;){var C=k[S];f&&(C=u(C)),o.call(this,C,g,i)}}}return e?this.boxedInProxy:this.boxedOutProxy}function M(e){return c(e)&&e.constructor===I}function U(e){var t=void 0;return e&&(t=e[b])&&M(t)?t:null}function B(e){throw e===m?new TypeError(\"BoxedHandler: IllegalArgument expected box function target\"):new TypeError(\"BoxedHandler: IllegalState boxedOut proxy is already detached, probably held on to a boxedIn proxy after the type of the property value was changed\")}I.prototype.getBoxedOutValue=function(){var e=this.boxedOutProxy||this.value;return e===m&&N.hasOwnProperty(this.prop)?N[prop]:e},I.prototype.detachFromParent=function(){this.parent=m},I.prototype.detachProp=function(e){var t=this.boxedProps;if(t.hasOwnProperty(e)){var n=t[e];n&&(n.detachFromParent(),delete t[e])}},I.prototype.detachAllProps=function(){for(var e=Object.keys(this.boxedProps),t=e.length;t--;){var n=e[t];e.hasOwnProperty(n)&&this.detachProp(n)}},I.prototype.has=function(e,t){return t===this.globalBox&&(t=this.boxedArrayEnd),!this.reservedProps.hasOwnProperty(t)&&(!!c(this.value)&&this.value.hasOwnProperty(t))},I.prototype.ownKeys=function(e){return this.context.copyUnreservedKeys(this.value,e)},I.prototype.getOwnPropertyDescriptor=function(e,t){var n=void 0;return t===this.globalBox&&(t=this.boxedArrayEnd),this.reservedProps.hasOwnProperty(t)?this.reservedProps[t].get.call(this):((c(this.value)||l(this.value))&&(n=Object.getOwnPropertyDescriptor(this.value,t)),n||(\"length\"===t?Object.getOwnPropertyDescriptor(e,t):void 0))},I.prototype.getBoxedProp=function(e){if(e in this.boxedProps)return this.boxedProps[e];var t=c(this.value)?this.value[e]:m,n=void 0,r=void 0;if(this.setTransforms){var o=this.setTransforms[e],i=this.setTransforms[this.boxedArrayEnd];(n=this.setTransforms&&function(){var e=arguments.length,t=void 0;function n(e){e.forEach(function(e){c(e)&&a.call(e,function(e,n){t||(t={});var r=t[n];r?(d(r)||(r=[r]),r.push(e)):t[n]=e})})}for(var r=0;r<e;r++){var o=arguments[r];c(o)&&(d(o)?n(o):n([o]))}return t}(o,i))&&(r={setTransforms:n})}var s=new I(t,this,e,void 0,r);return this.modifiedProps.hasOwnProperty(e)&&(s.isCopy=!0,s.isFullCopy=this.modifiedProps[e]),this.boxedProps[e]=s,O(s),s},I.prototype.getBoxedIn=function(e){if(e===this.globalBox&&(e=this.boxedArrayEnd),this.reservedProps.hasOwnProperty(e))return this.reservedProps[e].getBoxedIn.call(this);if(c(this.value)){var t=this.value[e];if(l(t))return t}return this.getBoxedProp(e).boxedInProxy},I.prototype.getBoxedOut=function(e){if(e===this.globalBox&&(e=this.boxedArrayEnd),this.reservedProps.hasOwnProperty(e))return this.reservedProps[e].getBoxedOut.call(this);if(this.withBoxedOut){var t=this.value[e];return T(t)?this.getBoxedProp(e).boxedOutProxy:t}return m},I.prototype.copyOfValue=function(){return o.cloneArrayObject.call(this.value)},I.prototype.boxedOfPath=function(e,t){if(f(t)){if(t){for(var n=t.split(\".\"),r=n.length,o=this,a=0;a<r;a++){var i=n[a];if(i!==this.boxedArrayEnd){if(this.reservedProps.hasOwnProperty(i))throw new TypeError(\"InvalidArgument, path parts cannot be reserved property names (other than \"+this.boxedArrayEnd+\"), got \"+i+\" in \"+t);o=o.getBoxedProp(i)}}var s=arguments.length;if(s>2){var u=arguments[2];if(l(u)){var c=u;if(s>3){var d=Array.prototype.slice.call(arguments,3);u=c.apply(e?o.getBoxedOutValue():o.value,d)}else u=c(e?o.boxedInProxy:o.value)}o.setValueOf(u)}return o}return this}throw new TypeError(\"InvalidArgument, only string path allowed, got \"+t)},I.prototype.boxedInOfPath=function(e){return this.boxedOfPath.apply(this,[!0].concat(Array.prototype.slice.call(arguments))).boxedInProxy},I.prototype.valueOfPath=function(e){return this.boxedOfPath.apply(this,[!1].concat(Array.prototype.slice.call(arguments))).value},I.prototype.getValueProp=function(e){return e===this.toTransformKey?this.toTransformValue:c(this.value)&&this.value.hasOwnProperty(e)?this.value[e]:void 0},I.prototype.setValueProp=function(e,t){e===this.toTransformKey?this.toTransformValue=t:c(this.value)&&this.value[e]===t||(this.extraValues||(this.extraValues={}),this.extraValues[e]=t)},I.prototype.set=function(e,t,n){var r=this;if(n&&n!==this.boxedProps[e])throw console.error(\"boxed child mismatch\",n,this.boxedProps[e]),new TypeError(\"Boxed property mismatch\");e===this.globalBox&&(e=this.boxedArrayEnd);var a=e===this.boxedArrayEnd,i=a;if(!a){if(this.reservedProps.hasOwnProperty(e))return this.reservedProps[e].set.call(this,t);var u=s(e);(i=u!==m||a)&&(e=u)}var l=t&&t[b];l&&(t=l.value);var d=!a,f=c(this.value)?this.value[e]:void 0;if(this.setTransforms){var h=this.setTransforms[e],g=this.setTransforms[this.boxedArrayEnd];if(h||g){a&&(e=o.arrayLength.call(this.value)),this.extraValues=void 0,this.toTransformValue=t,this.toTransformKey=e;var v=t;t=A(h,g,this.boxedArrayEnd,e,t,f,this.getValueProp,this.setValueProp,!0,!n),this.extraValues&&(d=!1),this.toTransformValue!==v&&(e!==this.boxedArrayEnd&&(n=void 0),t=this.toTransformValue),this.toTransformValue=void 0,this.toTransformKey=void 0}}var y=!this.isCopy;if(this.isCopy&&c(this.value)){if(d&&f===t)return!0}else{if(d&&c(this.value)&&f===t)return!0;p(this.value)||!c(this.value)?(this.value=i?[]:{},D.call(this),this.isFullCopy=!0):this.value=this.copyOfValue(),y=!0,this.isCopy=!0}return a?(e===this.boxedArrayEnd&&(e=o.arrayLength.call(this.value)),this.value[e]=t):(this.value[e]=t,n||this.detachProp(e)),this.extraValues&&(o.eachProp.call(this.extraValues,function(e,t){r.value[t]=e,n&&n.prop===t||r.detachProp(t),r.isFullCopy||(r.modifiedProps[t]=!0)}),this.extraValues=void 0),y&&this.parent&&this.prop&&this.parent.set(this.prop,this.value,this),this.isFullCopy||(this.modifiedProps[e]=!0),!0},I.prototype.delete=function(e){var t=this;if(e===this.globalBox&&(e=this.boxedArrayEnd),this.reservedProps.hasOwnProperty(e))return this.reservedProps[e].delete.call(this,!0);if(c(this.value)&&this.value.hasOwnProperty(e)){if(this.setTransforms){var n=e!==this.boxedArrayEnd&&this.setTransforms[e],r=this.setTransforms[this.boxedArrayEnd],a=this.value[e];if(n||r){this.extraValues=void 0,this.toTransformValue=a,this.toTransformKey=e;var i=A(n,r,this.boxedArrayEnd,e,void 0,a,this.getValueProp,this.setValueProp,!0,!0);if(this.toTransformValue=void 0,this.toTransformKey=void 0,void 0!==i)return this.extraValues=void 0,i!==a&&this.set(e,i),!0;this.extraValues&&(o.eachProp.call(this.extraValues,function(e,n){t.value[n]=e,t.detachProp(n),t.isFullCopy||(t.modifiedProps[n]=!0)}),this.extraValues=void 0)}}this.detachProp(e);var s=this.isCopy?this.value:this.copyOfValue();delete s[e]&&(delete this.modifiedProps[e],this.value=s,this.deleteEmptyCollections&&!h.call(this.value)?this.prop&&this.parent&&(this.parent.delete(this.prop)||this.parent.set(this.prop,this.value,this)):!this.isCopy&&this.prop&&this.parent&&this.parent.set(this.prop,this.value,this),this.isCopy=!0)}return!0},I.prototype.valueOf=function(){return this.value},I.prototype.setValueOf=function(e){if(c(this.setTransforms)&&(e=j(e,this.setTransforms,this.boxedArrayEnd,!0,!0)),this.value!==e){if(e===m&&this.context.ignoreUndefinedProperties&&this.deleteValueOf())return!0;this.value=e,this.isCopy=!0,this.isFullCopy=!0,D.call(this),this.detachAllProps(),this.modifiedProps={},this.parent&&this.prop&&this.parent.set(this.prop,e,this)}return!0},I.prototype.deleteValueOf=function(){return!!(this.parent&&this.prop&&this.context.ignoreUndefinedProperties&&this.parent.delete(this.prop))||this.setValueOf(m)},I.prototype.isModified=function(){return this.isCopy},I.prototype.valueOfModified=function(){return this.isCopy?this.valueOf():m},I.prototype.setValueOfModified=function(e){return this.setValueOf(e)},I.prototype.deleteValueOfModified=function(){return this.deleteValueOf()},I.prototype.setValueOfDefaultMagic=function(e){return this.value!==m||e===m||this.setValueOf(e)},I.prototype.setValueOfDefaultImpl=function(e,t,n){var o=this;if(n===m&&(n=t),n!==m)if(this.value===m)this.setValueOf(n);else if(c(this.value)&&r(this.value)===(void 0===n?\"undefined\":r(n))&&t){var i=L(t);i===m&&c(t)&&(i=L(t.levels)),i>0&&(d(n)||a.call(n,function(e,t){var n=o.value[t];n===m?o.set(t,e):i>1&&c(n)&&(void 0===e?\"undefined\":r(e))===(void 0===n?\"undefined\":r(n))&&o.getBoxedProp(t).setValueOfDefaultImpl(!0,i-1,e)}))}return e?this.boxedInProxy:this.getBoxedOutValue()},I.prototype.setValueOfBoxedOutDefault=function(e,t){return this.setValueOfDefaultImpl(!1,e,t)},I.prototype.setValueOfBoxedInDefault=function(e,t){return this.setValueOfDefaultImpl(!0,e,t)},I.prototype.unboxedDelta=function(){if(!this.isCopy||this.isFullCopy||!c(this.value))return this.valueOfModified();var e=!this.context.arrayDeltaObjects&&!this.context.arrayDeltaPartials&&d(this.value),t=e?this.value.constructor():{},n=Object.keys(this.modifiedProps),r=n.length;if(e){for(var o=m;r--;){var a=n[r],i=s(a);if(i!==m&&o===m||i>o)o=i;else{var u=this.value[a];u===m&&this.ignoreUndefinedProperties||(t[a]=u)}}if(o!==m)for(r=o+1;r--;)t[r]=this.value[r]}else{for(;r--;){var l=n[r],f=this.value[l];f===m&&this.ignoreUndefinedProperties||(t[l]=f)}d(this.value)&&this.context.arrayDeltaObjectMarker!==m&&(t[this.context.arrayDeltaObjectMarker]=this.context.arrayDeltaObjectMarkerValue)}return t},I.prototype.setUnboxedDelta=function(e){if(!c(this.value)||!c(e))return this.setValueOf(e);for(var t=Object.keys(e),n=t.length;n--;){var r=t[n];this.set(r,e[r])}return!0},I.prototype.deleteUnboxedDelta=function(){return!1},I.prototype.unboxedDeepDelta=function(){if(!this.isCopy||this.isFullCopy||!c(this.value))return this.valueOfModified();var e=!this.context.arrayDeepDeltaObjects&&d(this.value),t=e&&!this.context.arrayDeepDeltaPartials,n=e?this.value.constructor():{},r=Object.keys(this.modifiedProps),o=r.length;if(t){for(var a=m;o--;){var i=r[o],u=s(i);if(u!==m&&a===m||u>a)a=u;else{var l=this.value[i];l===m&&this.ignoreUndefinedProperties||(n[i]=l)}}if(a!==m)for(o=a+1;o--;)n[o]=this.value[o]}else{for(;o--;){var f=r[o];if(this.boxedProps.hasOwnProperty(f)){var p=this.boxedProps[f].unboxedDeepDelta();p===m&&this.ignoreUndefinedProperties||(n[f]=p)}else{var h=this.value[f];h===m&&this.ignoreUndefinedProperties||(n[f]=h)}}d(this.value)&&this.context.arrayDeepDeltaObjectMarker!==m&&(n[this.context.arrayDeepDeltaObjectMarker]=this.context.arrayDeepDeltaObjectMarkerValue)}return n},I.prototype.setUnboxedDeepDelta=function(e){if(!c(this.value))return this.setValueOf(e);var t=Object.keys(e),n=t.length;for(this.context;n--;){var r=t[n],o=e[r];c(o)?this.getBoxedProp(r).setUnboxedDeepDelta(o):this.set(r,o)}return!0},I.prototype.deleteUnboxedDeepDelta=function(){return!1},I.prototype.forEachKey=function(){R.call(this,!1,arguments)},I.prototype.ifImpl=function(e,t,n){if(t){var o=n[0];void 0===n||r(n);if(l(o)){var a=e?this.boxedInProxy:this.getBoxedOutValue();if(n.length>1){var i=Array.prototype.slice.call(n,1);return o.apply(a,i)}return n[0]=a,o.apply(a,n)}}},I.prototype.ifValueBoxedOut=function(){return this.ifImpl(!1,this.value,arguments)},I.prototype.ifValueBoxedIn=function(e){return this.ifImpl(!0,this.value,arguments)},I.prototype.ifValueDefinedBoxedOut=function(e){return this.ifImpl(!1,this.value!==m,arguments)},I.prototype.ifValueDefinedBoxedIn=function(e){return this.ifImpl(!0,this.value!==m,arguments)},I.prototype.ifValueValidBoxedOut=function(e){return this.ifImpl(!1,o.isValid(this.value),arguments)},I.prototype.ifValueValidBoxedIn=function(e){return this.ifImpl(!0,o.isValid(this.value),arguments)},I.prototype.ifValueArrayBoxedOut=function(e){return this.ifImpl(!1,o.isArray(this.value),arguments)},I.prototype.ifValueArrayBoxedIn=function(e){return this.ifImpl(!0,o.isArray(this.value),arguments)},I.prototype.ifValueObjectBoxedOut=function(e){return this.ifImpl(!1,o.isObjectLike(this.value),arguments)},I.prototype.ifValueObjectBoxedIn=function(e){return this.ifImpl(!0,o.isObjectLike(this.value),arguments)},I.prototype.valueArrayBoxedOut=function(e){return o.isArray(this.value)||(o.isValid(this.value)?this.setValueOf([this.value]):this.setValueOf([])),this.getBoxedOutValue()},I.prototype.valueObjectBoxedOut=function(e){return o.isObjectLike(this.value)&&!o.isArray(this.value)||(o.isArray(this.value)?this.setValueOf(Object.assign({},this.value)):this.setValueOf({})),this.getBoxedOutValue()},I.prototype.forEachKeyBoxed=function(){R.call(this,!0,arguments)},e.exports.isBox=M,e.exports.thisBox=function(e){return U(e)||null},e.exports.isBoxedProxy=U,e.exports.isBoxedOutProxy=function(e){var t=void 0;return e&&(t=e[b])&&M(t)&&e===t.boxedOutProxy?t:null},e.exports.isBoxedInProxy=function(e){var t=void 0;return e&&(t=e[b])&&M(t)&&e===t.boxedInProxy?t:null};var H={get:function(e,t,n){var r=e[b];if(r)return t===b?r:t===r.context.boxedInSuffix?r.boxedInProxy:r.withBoxedIn===e?r.getBoxedIn(t):r.getBoxedOut(t);B(r)},set:function(e,t,n,r){var o=e[b];if(o)return t!==b&&o.set(t,n);B(o)},has:function(e,t){var n=e[b];if(n)return t===b||n.has(e,t);B(n)},ownKeys:function(e){var t=e[b];if(t)return t.ownKeys(e);B(t)},deleteProperty:function(e,t){var n=e[b];if(n)return t!==b&&n.delete(t);B(n)},getOwnPropertyDescriptor:function(e,t){var n=e[b];if(n)return t===b?{value:n,writable:!1,enumerable:!1,configurable:!1,get:m,set:m}:n.getOwnPropertyDescriptor(e,t);B(n)}},$=void 0;var F={toBoolean:function(e){return!!e},toBooleanDefaultTrue:function(e){return e===m||!!e},toAlwaysTrue:function(){return!0},toAlwaysFalse:function(){return!1},isPrefixedToBoolean:function(e,t){return o.startsWith(t,\"is\")?!!e:e},regexMatchProp:function(e,t){return function(){return arguments[1].match(e)?t.apply(this,arguments):arguments[0]}},toDefault:function(e){return function(t){return t===m?e:t}},toBooleanNot:function(e){return!e}};function V(e){return o.copyFiltered.call(void 0,e,E)}function W(e){var t=new k(e),n=V(e),r=void 0,o=function(){var e=arguments.length,o=void 0;e&&l(arguments[e-1])&&(o=arguments[--e]);var a=void 0;e&&(a=e>1?[].concat(Array.prototype.slice.call(arguments)).splice(e,1):arguments[0]);var i=void 0;return i=c(r)?new I(a,m,m,t,Object.assign({},n,r)):new I(a,m,m,t,n),r=void 0,O(i),o&&i.withBoxedIn(o),i.boxedInProxy};if(o.withBoxOptions=function(e){return r=e,o.apply(o,Array.prototype.slice.call(arguments,1))}.bind(o),o.transform=F,!$){var a={};a[o]=0,$=Object.keys(a)[0]}return t.globalBox=$,o.boxedContext=t,o}e.exports.getBoxOnlyOptions=V,e.exports.createBox=W,e.exports.box=W()},function(e,t,n){\"use strict\";function r(e){return\"/\"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",n=e&&e.split(\"/\")||[],a=t&&t.split(\"/\")||[],i=e&&r(e),s=t&&r(t),u=i||s;if(e&&r(e)?a=n:n.length&&(a.pop(),a=a.concat(n)),!a.length)return\"/\";var l=void 0;if(a.length){var c=a[a.length-1];l=\".\"===c||\"..\"===c||\"\"===c}else l=!1;for(var d=0,f=a.length;f>=0;f--){var p=a[f];\".\"===p?o(a,f):\"..\"===p?(o(a,f),d++):d&&(o(a,f),d--)}if(!u)for(;d--;d)a.unshift(\"..\");!u||\"\"===a[0]||a[0]&&r(a[0])||a.unshift(\"\");var h=a.join(\"/\");return l&&\"/\"!==h.substr(-1)&&(h+=\"/\"),h}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};t.default=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every(function(t,r){return e(t,n[r])});var o=void 0===t?\"undefined\":r(t);if(o!==(void 0===n?\"undefined\":r(n)))return!1;if(\"object\"===o){var a=t.valueOf(),i=n.valueOf();if(a!==t||i!==n)return e(a,i);var s=Object.keys(t),u=Object.keys(n);return s.length===u.length&&s.every(function(r){return e(t[r],n[r])})}return!1}},function(e,t,n){\"use strict\";t.__esModule=!0;t.canUseDOM=!(\"undefined\"==typeof window||!window.document||!window.document.createElement),t.addEventListener=function(e,t,n){return e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent(\"on\"+t,n)},t.removeEventListener=function(e,t,n){return e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent(\"on\"+t,n)},t.getConfirmation=function(e,t){return t(window.confirm(e))},t.supportsHistory=function(){var e=window.navigator.userAgent;return(-1===e.indexOf(\"Android 2.\")&&-1===e.indexOf(\"Android 4.0\")||-1===e.indexOf(\"Mobile Safari\")||-1!==e.indexOf(\"Chrome\")||-1!==e.indexOf(\"Windows Phone\"))&&(window.history&&\"pushState\"in window.history)},t.supportsPopStateOnHashChange=function(){return-1===window.navigator.userAgent.indexOf(\"Trident\")},t.supportsGoWithoutReloadUsingHash=function(){return-1===window.navigator.userAgent.indexOf(\"Firefox\")},t.isExtraneousPopstateEvent=function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf(\"CriOS\")}},function(e,t,n){var r;r=function(){\"use strict\";var e={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},t={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},n=Object.defineProperty,r=Object.getOwnPropertyNames,o=Object.getOwnPropertySymbols,a=Object.getOwnPropertyDescriptor,i=Object.getPrototypeOf,s=i&&i(Object);return function u(l,c,d){if(\"string\"!=typeof c){if(s){var f=i(c);f&&f!==s&&u(l,f,d)}var p=r(c);o&&(p=p.concat(o(c)));for(var h=0;h<p.length;++h){var m=p[h];if(!(e[m]||t[m]||d&&d[m])){var g=a(c,m);try{n(l,m,g)}catch(e){}}}return l}return l}},e.exports=r()},function(e,t,n){n(106),e.exports=n(272)},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});n(107);var r=n(0),o=n.n(r),a=n(142),i=n.n(a),s=(n(219),Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e});var u={type:\"logger\",log:function(e){this.output(\"log\",e)},warn:function(e){this.output(\"warn\",e)},error:function(e){this.output(\"error\",e)},output:function(e,t){var n;console&&console[e]&&(n=console)[e].apply(n,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(t))}},l=new(function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.init(t,n)}return e.prototype.init=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||\"i18next:\",this.logger=e||u,this.options=t,this.debug=t.debug},e.prototype.setDebug=function(e){this.debug=e},e.prototype.log=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.forward(t,\"log\",\"\",!0)},e.prototype.warn=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.forward(t,\"warn\",\"\",!0)},e.prototype.error=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.forward(t,\"error\",\"\")},e.prototype.deprecate=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.forward(t,\"warn\",\"WARNING DEPRECATED: \",!0)},e.prototype.forward=function(e,t,n,r){return r&&!this.debug?null:(\"string\"==typeof e[0]&&(e[0]=\"\"+n+this.prefix+\" \"+e[0]),this.logger[t](e))},e.prototype.create=function(t){return new e(this.logger,s({prefix:this.prefix+\":\"+t+\":\"},this.options))},e}());var c=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.observers={}}return e.prototype.on=function(e,t){var n=this;e.split(\" \").forEach(function(e){n.observers[e]=n.observers[e]||[],n.observers[e].push(t)})},e.prototype.off=function(e,t){var n=this;this.observers[e]&&this.observers[e].forEach(function(){if(t){var r=n.observers[e].indexOf(t);r>-1&&n.observers[e].splice(r,1)}else delete n.observers[e]})},e.prototype.emit=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];this.observers[e]&&[].concat(this.observers[e]).forEach(function(e){e.apply(void 0,n)});this.observers[\"*\"]&&[].concat(this.observers[\"*\"]).forEach(function(t){var r;t.apply(t,(r=[e]).concat.apply(r,n))})},e}();function d(e){return null==e?\"\":\"\"+e}function f(e,t,n){function r(e){return e&&e.indexOf(\"###\")>-1?e.replace(/###/g,\".\"):e}function o(){return!e||\"string\"==typeof e}for(var a=\"string\"!=typeof t?[].concat(t):t.split(\".\");a.length>1;){if(o())return{};var i=r(a.shift());!e[i]&&n&&(e[i]=new n),e=e[i]}return o()?{}:{obj:e,k:r(a.shift())}}function p(e,t,n){var r=f(e,t,Object);r.obj[r.k]=n}function h(e,t){var n=f(e,t),r=n.obj,o=n.k;if(r)return r[o]}function m(e){return e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")}var g={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#x2F;\"};function v(e){return\"string\"==typeof e?e.replace(/[&<>\"'\\/]/g,function(e){return g[e]}):e}var b=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function y(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var o=n[r],a=Object.getOwnPropertyDescriptor(t,o);a&&a.configurable&&void 0===e[o]&&Object.defineProperty(e,o,a)}}(e,t))}var w=function(e){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:[\"translation\"],defaultNS:\"translation\"};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var o=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,e.call(this));return o.data=n,o.options=r,o}return y(t,e),t.prototype.addNamespaces=function(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)},t.prototype.removeNamespaces=function(e){var t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)},t.prototype.getResource=function(e,t,n){var r=(arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}).keySeparator||this.options.keySeparator;void 0===r&&(r=\".\");var o=[e,t];return n&&\"string\"!=typeof n&&(o=o.concat(n)),n&&\"string\"==typeof n&&(o=o.concat(r?n.split(r):n)),e.indexOf(\".\")>-1&&(o=e.split(\".\")),h(this.data,o)},t.prototype.addResource=function(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1},a=this.options.keySeparator;void 0===a&&(a=\".\");var i=[e,t];n&&(i=i.concat(a?n.split(a):n)),e.indexOf(\".\")>-1&&(r=t,t=(i=e.split(\".\"))[1]),this.addNamespaces(t),p(this.data,i,r),o.silent||this.emit(\"added\",e,t,n,r)},t.prototype.addResources=function(e,t,n){for(var r in n)\"string\"==typeof n[r]&&this.addResource(e,t,r,n[r],{silent:!0});this.emit(\"added\",e,t,n)},t.prototype.addResourceBundle=function(e,t,n,r,o){var a=[e,t];e.indexOf(\".\")>-1&&(r=n,n=t,t=(a=e.split(\".\"))[1]),this.addNamespaces(t);var i=h(this.data,a)||{};r?function e(t,n,r){for(var o in n)o in t?\"string\"==typeof t[o]||t[o]instanceof String||\"string\"==typeof n[o]||n[o]instanceof String?r&&(t[o]=n[o]):e(t[o],n[o],r):t[o]=n[o];return t}(i,n,o):i=b({},i,n),p(this.data,a,i),this.emit(\"added\",e,t,n)},t.prototype.removeResourceBundle=function(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit(\"removed\",e,t)},t.prototype.hasResourceBundle=function(e,t){return void 0!==this.getResource(e,t)},t.prototype.getResourceBundle=function(e,t){return t||(t=this.options.defaultNS),\"v1\"===this.options.compatibilityAPI?b({},this.getResource(e,t)):this.getResource(e,t)},t.prototype.toJSON=function(){return this.data},t}(c),x={processors:{},addPostProcessor:function(e){this.processors[e.name]=e},handle:function(e,t,n,r,o){var a=this;return e.forEach(function(e){a.processors[e]&&(t=a.processors[e].process(t,n,r,o))}),t}};function _(e){return e.interpolation={unescapeSuffix:\"HTML\"},e.interpolation.prefix=e.interpolationPrefix||\"__\",e.interpolation.suffix=e.interpolationSuffix||\"__\",e.interpolation.escapeValue=e.escapeInterpolation||!1,e.interpolation.nestingPrefix=e.reusePrefix||\"$t(\",e.interpolation.nestingSuffix=e.reuseSuffix||\")\",e}function E(e){return(e.interpolationPrefix||e.interpolationSuffix||void 0!==e.escapeInterpolation)&&(e=_(e)),e.nsSeparator=e.nsseparator,e.keySeparator=e.keyseparator,e.returnObjects=e.returnObjectTrees,e}var k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},S=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};function C(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var o=n[r],a=Object.getOwnPropertyDescriptor(t,o);a&&a.configurable&&void 0===e[o]&&Object.defineProperty(e,o,a)}}(e,t))}var O=function(e){function t(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var o,a,i=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,e.call(this));return o=n,a=i,[\"resourceStore\",\"languageUtils\",\"pluralResolver\",\"interpolator\",\"backendConnector\"].forEach(function(e){o[e]&&(a[e]=o[e])}),i.options=r,i.logger=l.create(\"translator\"),i}return C(t,e),t.prototype.changeLanguage=function(e){e&&(this.language=e)},t.prototype.exists=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};return\"v1\"===this.options.compatibilityAPI&&(t=E(t)),void 0!==this.resolve(e,t)},t.prototype.extractFromKey=function(e,t){var n=t.nsSeparator||this.options.nsSeparator;void 0===n&&(n=\":\");var r=t.keySeparator||this.options.keySeparator||\".\",o=t.ns||this.options.defaultNS;if(n&&e.indexOf(n)>-1){var a=e.split(n);(n!==r||n===r&&this.options.ns.indexOf(a[0])>-1)&&(o=a.shift()),e=a.join(r)}return\"string\"==typeof o&&(o=[o]),{key:e,namespaces:o}},t.prototype.translate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"object\"!==(void 0===t?\"undefined\":S(t))?t=this.options.overloadTranslationOptionHandler(arguments):\"v1\"===this.options.compatibilityAPI&&(t=E(t)),void 0===e||null===e||\"\"===e)return\"\";\"number\"==typeof e&&(e=String(e)),\"string\"==typeof e&&(e=[e]);var n=t.keySeparator||this.options.keySeparator||\".\",r=this.extractFromKey(e[e.length-1],t),o=r.key,a=r.namespaces,i=a[a.length-1],s=t.lng||this.language,u=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(s&&\"cimode\"===s.toLowerCase())return u?i+(t.nsSeparator||this.options.nsSeparator)+o:o;var l=this.resolve(e,t),c=Object.prototype.toString.apply(l),d=void 0!==t.joinArrays?t.joinArrays:this.options.joinArrays;if(l&&\"string\"!=typeof l&&[\"[object Number]\",\"[object Function]\",\"[object RegExp]\"].indexOf(c)<0&&(!d||\"[object Array]\"!==c)){if(!t.returnObjects&&!this.options.returnObjects)return this.logger.warn(\"accessing an object - but returnObjects options is not enabled!\"),this.options.returnedObjectHandler?this.options.returnedObjectHandler(o,l,t):\"key '\"+o+\" (\"+this.language+\")' returned an object instead of string.\";if(t.keySeparator||this.options.keySeparator){var f=\"[object Array]\"===c?[]:{};for(var p in l)Object.prototype.hasOwnProperty.call(l,p)&&(f[p]=this.translate(\"\"+o+n+p,k({},t,{joinArrays:!1,ns:a})));l=f}}else if(d&&\"[object Array]\"===c)(l=l.join(d))&&(l=this.extendTranslation(l,o,t));else{var h=!1,m=!1;if(this.isValidLookup(l)||void 0===t.defaultValue||(h=!0,l=t.defaultValue),this.isValidLookup(l)||(m=!0,l=o),m||h){this.logger.log(\"missingKey\",s,i,o,l);var g=[],v=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if(\"fallback\"===this.options.saveMissingTo&&v&&v[0])for(var b=0;b<v.length;b++)g.push(v[b]);else\"all\"===this.options.saveMissingTo?g=this.languageUtils.toResolveHierarchy(t.lng||this.language):g.push(t.lng||this.language);this.options.saveMissing&&(this.options.missingKeyHandler?this.options.missingKeyHandler(g,i,o,l):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(g,i,o,l)),this.emit(\"missingKey\",g,i,o,l)}l=this.extendTranslation(l,o,t),m&&l===o&&this.options.appendNamespaceToMissingKey&&(l=i+\":\"+o),m&&this.options.parseMissingKeyHandler&&(l=this.options.parseMissingKeyHandler(l))}return l},t.prototype.extendTranslation=function(e,t,n){var r=this;n.interpolation&&this.interpolator.init(k({},n,{interpolation:k({},this.options.interpolation,n.interpolation)}));var o=n.replace&&\"string\"!=typeof n.replace?n.replace:n;this.options.interpolation.defaultVariables&&(o=k({},this.options.interpolation.defaultVariables,o)),e=this.interpolator.interpolate(e,o,n.lng||this.language),!1!==n.nest&&(e=this.interpolator.nest(e,function(){return r.translate.apply(r,arguments)},n)),n.interpolation&&this.interpolator.reset();var a=n.postProcess||this.options.postProcess,i=\"string\"==typeof a?[a]:a;return void 0!==e&&i&&i.length&&!1!==n.applyPostProcessor&&(e=x.handle(i,e,t,n,this)),e},t.prototype.resolve=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0;return\"string\"==typeof e&&(e=[e]),e.forEach(function(e){if(!t.isValidLookup(r)){var o=t.extractFromKey(e,n),a=o.key,i=o.namespaces;t.options.fallbackNS&&(i=i.concat(t.options.fallbackNS));var s=void 0!==n.count&&\"string\"!=typeof n.count,u=void 0!==n.context&&\"string\"==typeof n.context&&\"\"!==n.context,l=n.lngs?n.lngs:t.languageUtils.toResolveHierarchy(n.lng||t.language);i.forEach(function(e){t.isValidLookup(r)||l.forEach(function(o){if(!t.isValidLookup(r)){var i=a,l=[i],c=void 0;s&&(c=t.pluralResolver.getSuffix(o,n.count)),s&&u&&l.push(i+c),u&&l.push(i+=\"\"+t.options.contextSeparator+n.context),s&&l.push(i+=c);for(var d=void 0;d=l.pop();)t.isValidLookup(r)||(r=t.getResource(o,e,d,n))}})})}}),r},t.prototype.isValidLookup=function(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&\"\"===e)},t.prototype.getResource=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.resourceStore.getResource(e,t,n,r)},t}(c);function T(e){return e.charAt(0).toUpperCase()+e.slice(1)}var P=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options=t,this.whitelist=this.options.whitelist||!1,this.logger=l.create(\"languageUtils\")}return e.prototype.getScriptPartFromCode=function(e){if(!e||e.indexOf(\"-\")<0)return null;var t=e.split(\"-\");return 2===t.length?null:(t.pop(),this.formatLanguageCode(t.join(\"-\")))},e.prototype.getLanguagePartFromCode=function(e){if(!e||e.indexOf(\"-\")<0)return e;var t=e.split(\"-\");return this.formatLanguageCode(t[0])},e.prototype.formatLanguageCode=function(e){if(\"string\"==typeof e&&e.indexOf(\"-\")>-1){var t=[\"hans\",\"hant\",\"latn\",\"cyrl\",\"cans\",\"mong\",\"arab\"],n=e.split(\"-\");return this.options.lowerCaseLng?n=n.map(function(e){return e.toLowerCase()}):2===n.length?(n[0]=n[0].toLowerCase(),n[1]=n[1].toUpperCase(),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=T(n[1].toLowerCase()))):3===n.length&&(n[0]=n[0].toLowerCase(),2===n[1].length&&(n[1]=n[1].toUpperCase()),\"sgn\"!==n[0]&&2===n[2].length&&(n[2]=n[2].toUpperCase()),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=T(n[1].toLowerCase())),t.indexOf(n[2].toLowerCase())>-1&&(n[2]=T(n[2].toLowerCase()))),n.join(\"-\")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e},e.prototype.isWhitelisted=function(e){return(\"languageOnly\"===this.options.load||this.options.nonExplicitWhitelist)&&(e=this.getLanguagePartFromCode(e)),!this.whitelist||!this.whitelist.length||this.whitelist.indexOf(e)>-1},e.prototype.getFallbackCodes=function(e,t){if(!e)return[];if(\"string\"==typeof e&&(e=[e]),\"[object Array]\"===Object.prototype.toString.apply(e))return e;if(!t)return e.default||[];var n=e[t];return n||(n=e[this.getScriptPartFromCode(t)]),n||(n=e[this.formatLanguageCode(t)]),n||(n=e.default),n||[]},e.prototype.toResolveHierarchy=function(e,t){var n=this,r=this.getFallbackCodes(t||this.options.fallbackLng||[],e),o=[],a=function(e){e&&(n.isWhitelisted(e)?o.push(e):n.logger.warn(\"rejecting non-whitelisted language code: \"+e))};return\"string\"==typeof e&&e.indexOf(\"-\")>-1?(\"languageOnly\"!==this.options.load&&a(this.formatLanguageCode(e)),\"languageOnly\"!==this.options.load&&\"currentOnly\"!==this.options.load&&a(this.getScriptPartFromCode(e)),\"currentOnly\"!==this.options.load&&a(this.getLanguagePartFromCode(e))):\"string\"==typeof e&&a(this.formatLanguageCode(e)),r.forEach(function(e){o.indexOf(e)<0&&a(n.formatLanguageCode(e))}),o},e}();var I=[{lngs:[\"ach\",\"ak\",\"am\",\"arn\",\"br\",\"fil\",\"gun\",\"ln\",\"mfe\",\"mg\",\"mi\",\"oc\",\"tg\",\"ti\",\"tr\",\"uz\",\"wa\"],nr:[1,2],fc:1},{lngs:[\"af\",\"an\",\"ast\",\"az\",\"bg\",\"bn\",\"ca\",\"da\",\"de\",\"dev\",\"el\",\"en\",\"eo\",\"es\",\"es_ar\",\"et\",\"eu\",\"fi\",\"fo\",\"fur\",\"fy\",\"gl\",\"gu\",\"ha\",\"he\",\"hi\",\"hu\",\"hy\",\"ia\",\"it\",\"kn\",\"ku\",\"lb\",\"mai\",\"ml\",\"mn\",\"mr\",\"nah\",\"nap\",\"nb\",\"ne\",\"nl\",\"nn\",\"no\",\"nso\",\"pa\",\"pap\",\"pms\",\"ps\",\"pt\",\"pt_br\",\"rm\",\"sco\",\"se\",\"si\",\"so\",\"son\",\"sq\",\"sv\",\"sw\",\"ta\",\"te\",\"tk\",\"ur\",\"yo\"],nr:[1,2],fc:2},{lngs:[\"ay\",\"bo\",\"cgg\",\"fa\",\"id\",\"ja\",\"jbo\",\"ka\",\"kk\",\"km\",\"ko\",\"ky\",\"lo\",\"ms\",\"sah\",\"su\",\"th\",\"tt\",\"ug\",\"vi\",\"wo\",\"zh\"],nr:[1],fc:3},{lngs:[\"be\",\"bs\",\"dz\",\"hr\",\"ru\",\"sr\",\"uk\"],nr:[1,2,5],fc:4},{lngs:[\"ar\"],nr:[0,1,2,3,11,100],fc:5},{lngs:[\"cs\",\"sk\"],nr:[1,2,5],fc:6},{lngs:[\"csb\",\"pl\"],nr:[1,2,5],fc:7},{lngs:[\"cy\"],nr:[1,2,3,8],fc:8},{lngs:[\"fr\"],nr:[1,2],fc:9},{lngs:[\"ga\"],nr:[1,2,3,7,11],fc:10},{lngs:[\"gd\"],nr:[1,2,3,20],fc:11},{lngs:[\"is\"],nr:[1,2],fc:12},{lngs:[\"jv\"],nr:[0,1],fc:13},{lngs:[\"kw\"],nr:[1,2,3,4],fc:14},{lngs:[\"lt\"],nr:[1,2,10],fc:15},{lngs:[\"lv\"],nr:[1,2,0],fc:16},{lngs:[\"mk\"],nr:[1,2],fc:17},{lngs:[\"mnk\"],nr:[0,1,2],fc:18},{lngs:[\"mt\"],nr:[1,2,11,20],fc:19},{lngs:[\"or\"],nr:[2,1],fc:2},{lngs:[\"ro\"],nr:[1,2,20],fc:20},{lngs:[\"sl\"],nr:[5,1,2,3],fc:21}],D={1:function(e){return Number(e>1)},2:function(e){return Number(1!=e)},3:function(e){return 0},4:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},5:function(e){return Number(0===e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5)},6:function(e){return Number(1==e?0:e>=2&&e<=4?1:2)},7:function(e){return Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},8:function(e){return Number(1==e?0:2==e?1:8!=e&&11!=e?2:3)},9:function(e){return Number(e>=2)},10:function(e){return Number(1==e?0:2==e?1:e<7?2:e<11?3:4)},11:function(e){return Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3)},12:function(e){return Number(e%10!=1||e%100==11)},13:function(e){return Number(0!==e)},14:function(e){return Number(1==e?0:2==e?1:3==e?2:3)},15:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2)},16:function(e){return Number(e%10==1&&e%100!=11?0:0!==e?1:2)},17:function(e){return Number(1==e||e%10==1?0:1)},18:function(e){return Number(0==e?0:1==e?1:2)},19:function(e){return Number(1==e?0:0===e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3)},20:function(e){return Number(1==e?0:0===e||e%100>0&&e%100<20?1:2)},21:function(e){return Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0)}};var N=function(){function e(t){var n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.languageUtils=t,this.options=r,this.logger=l.create(\"pluralResolver\"),this.rules=(n={},I.forEach(function(e){e.lngs.forEach(function(t){n[t]={numbers:e.nr,plurals:D[e.fc]}})}),n)}return e.prototype.addRule=function(e,t){this.rules[e]=t},e.prototype.getRule=function(e){return this.rules[this.languageUtils.getLanguagePartFromCode(e)]},e.prototype.needsPlural=function(e){var t=this.getRule(e);return t&&t.numbers.length>1},e.prototype.getSuffix=function(e,t){var n=this,r=this.getRule(e);if(r){if(1===r.numbers.length)return\"\";var o=r.noAbs?r.plurals(t):r.plurals(Math.abs(t)),a=r.numbers[o];this.options.simplifyPluralSuffix&&2===r.numbers.length&&1===r.numbers[0]&&(2===a?a=\"plural\":1===a&&(a=\"\"));var i=function(){return n.options.prepend&&a.toString()?n.options.prepend+a.toString():a.toString()};return\"v1\"===this.options.compatibilityJSON?1===a?\"\":\"number\"==typeof a?\"_plural_\"+a.toString():i():\"v2\"===this.options.compatibilityJSON||2===r.numbers.length&&1===r.numbers[0]?i():2===r.numbers.length&&1===r.numbers[0]?i():this.options.prepend&&o.toString()?this.options.prepend+o.toString():o.toString()}return this.logger.warn(\"no plural rule found for: \"+e),\"\"},e}(),A=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};var j=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.logger=l.create(\"interpolator\"),this.init(t,!0)}return e.prototype.init=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};arguments[1]&&(this.options=e,this.format=e.interpolation&&e.interpolation.format||function(e){return e},this.escape=e.interpolation&&e.interpolation.escape||v),e.interpolation||(e.interpolation={escapeValue:!0});var t=e.interpolation;this.escapeValue=void 0===t.escapeValue||t.escapeValue,this.prefix=t.prefix?m(t.prefix):t.prefixEscaped||\"{{\",this.suffix=t.suffix?m(t.suffix):t.suffixEscaped||\"}}\",this.formatSeparator=t.formatSeparator?t.formatSeparator:t.formatSeparator||\",\",this.unescapePrefix=t.unescapeSuffix?\"\":t.unescapePrefix||\"-\",this.unescapeSuffix=this.unescapePrefix?\"\":t.unescapeSuffix||\"\",this.nestingPrefix=t.nestingPrefix?m(t.nestingPrefix):t.nestingPrefixEscaped||m(\"$t(\"),this.nestingSuffix=t.nestingSuffix?m(t.nestingSuffix):t.nestingSuffixEscaped||m(\")\"),this.resetRegExp()},e.prototype.reset=function(){this.options&&this.init(this.options)},e.prototype.resetRegExp=function(){var e=this.prefix+\"(.+?)\"+this.suffix;this.regexp=new RegExp(e,\"g\");var t=\"\"+this.prefix+this.unescapePrefix+\"(.+?)\"+this.unescapeSuffix+this.suffix;this.regexpUnescape=new RegExp(t,\"g\");var n=this.nestingPrefix+\"(.+?)\"+this.nestingSuffix;this.nestingRegexp=new RegExp(n,\"g\")},e.prototype.interpolate=function(e,t,n){var r=this,o=void 0,a=void 0;function i(e){return e.replace(/\\$/g,\"$$$$\")}var s=function(e){if(e.indexOf(r.formatSeparator)<0)return h(t,e);var o=e.split(r.formatSeparator),a=o.shift().trim(),i=o.join(r.formatSeparator).trim();return r.format(h(t,a),i,n)};for(this.resetRegExp();o=this.regexpUnescape.exec(e);)a=s(o[1].trim()),e=e.replace(o[0],a),this.regexpUnescape.lastIndex=0;for(;o=this.regexp.exec(e);)\"string\"!=typeof(a=s(o[1].trim()))&&(a=d(a)),a||(this.logger.warn(\"missed to pass in variable \"+o[1]+\" for interpolating \"+e),a=\"\"),a=this.escapeValue?i(this.escape(a)):i(a),e=e.replace(o[0],a),this.regexp.lastIndex=0;return e},e.prototype.nest=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,o=void 0,a=A({},n);function i(e){if(e.indexOf(\",\")<0)return e;var t=e.split(\",\");e=t.shift();var n=t.join(\",\");n=(n=this.interpolate(n,a)).replace(/'/g,'\"');try{a=JSON.parse(n)}catch(t){this.logger.error(\"failed parsing options string in nesting for key \"+e,t)}return e}for(a.applyPostProcessor=!1;r=this.nestingRegexp.exec(e);){if((o=t(i.call(this,r[1].trim()),a))&&r[0]===e&&\"string\"!=typeof o)return o;\"string\"!=typeof o&&(o=d(o)),o||(this.logger.warn(\"missed to resolve \"+r[1]+\" for nesting \"+e),o=\"\"),e=e.replace(r[0],o),this.regexp.lastIndex=0}return e},e}(),L=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},R=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,a=void 0;try{for(var i,s=e[Symbol.iterator]();!(r=(i=s.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,a=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}();function M(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var o=n[r],a=Object.getOwnPropertyDescriptor(t,o);a&&a.configurable&&void 0===e[o]&&Object.defineProperty(e,o,a)}}(e,t))}var U=function(e){function t(n,r,o){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,e.call(this));return i.backend=n,i.store=r,i.services=o,i.options=a,i.logger=l.create(\"backendConnector\"),i.state={},i.queue=[],i.backend&&i.backend.init&&i.backend.init(o,a.backend,a),i}return M(t,e),t.prototype.queueLoad=function(e,t,n){var r=this,o=[],a=[],i=[],s=[];return e.forEach(function(e){var n=!0;t.forEach(function(t){var i=e+\"|\"+t;r.store.hasResourceBundle(e,t)?r.state[i]=2:r.state[i]<0||(1===r.state[i]?a.indexOf(i)<0&&a.push(i):(r.state[i]=1,n=!1,a.indexOf(i)<0&&a.push(i),o.indexOf(i)<0&&o.push(i),s.indexOf(t)<0&&s.push(t)))}),n||i.push(e)}),(o.length||a.length)&&this.queue.push({pending:a,loaded:{},errors:[],callback:n}),{toLoad:o,pending:a,toLoadLanguages:i,toLoadNamespaces:s}},t.prototype.loaded=function(e,t,n){var r=this,o=e.split(\"|\"),a=R(o,2),i=a[0],s=a[1];t&&this.emit(\"failedLoading\",i,s,t),n&&this.store.addResourceBundle(i,s,n),this.state[e]=t?-1:2,this.queue.forEach(function(n){var o,a,u,l,c,d;o=n.loaded,a=s,l=f(o,[i],Object),c=l.obj,d=l.k,c[d]=c[d]||[],u&&(c[d]=c[d].concat(a)),u||c[d].push(a),function(e,t){for(var n=e.indexOf(t);-1!==n;)e.splice(n,1),n=e.indexOf(t)}(n.pending,e),t&&n.errors.push(t),0!==n.pending.length||n.done||(r.emit(\"loaded\",n.loaded),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.queue=this.queue.filter(function(e){return!e.done})},t.prototype.read=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=this,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:250,i=arguments[5];return e.length?this.backend[n](e,t,function(s,u){s&&u&&r<5?setTimeout(function(){o.read.call(o,e,t,n,r+1,2*a,i)},a):i(s,u)}):i(null,{})},t.prototype.load=function(e,t,n){var r=this;if(!this.backend)return this.logger.warn(\"No backend was added via i18next.use. Will not load resources.\"),n&&n();var o=L({},this.backend.options,this.options.backend);\"string\"==typeof e&&(e=this.services.languageUtils.toResolveHierarchy(e)),\"string\"==typeof t&&(t=[t]);var a=this.queueLoad(e,t,n);if(!a.toLoad.length)return a.pending.length||n(),null;o.allowMultiLoading&&this.backend.readMulti?this.read(a.toLoadLanguages,a.toLoadNamespaces,\"readMulti\",null,null,function(e,t){e&&r.logger.warn(\"loading namespaces \"+a.toLoadNamespaces.join(\", \")+\" for languages \"+a.toLoadLanguages.join(\", \")+\" via multiloading failed\",e),!e&&t&&r.logger.log(\"successfully loaded namespaces \"+a.toLoadNamespaces.join(\", \")+\" for languages \"+a.toLoadLanguages.join(\", \")+\" via multiloading\",t),a.toLoad.forEach(function(n){var o=n.split(\"|\"),a=R(o,2),i=a[0],s=a[1],u=h(t,[i,s]);if(u)r.loaded(n,e,u);else{var l=\"loading namespace \"+s+\" for language \"+i+\" via multiloading failed\";r.loaded(n,l),r.logger.error(l)}})}):a.toLoad.forEach(function(e){r.loadOne(e)})},t.prototype.reload=function(e,t){var n=this;this.backend||this.logger.warn(\"No backend was added via i18next.use. Will not load resources.\");var r=L({},this.backend.options,this.options.backend);\"string\"==typeof e&&(e=this.services.languageUtils.toResolveHierarchy(e)),\"string\"==typeof t&&(t=[t]),r.allowMultiLoading&&this.backend.readMulti?this.read(e,t,\"readMulti\",null,null,function(r,o){r&&n.logger.warn(\"reloading namespaces \"+t.join(\", \")+\" for languages \"+e.join(\", \")+\" via multiloading failed\",r),!r&&o&&n.logger.log(\"successfully reloaded namespaces \"+t.join(\", \")+\" for languages \"+e.join(\", \")+\" via multiloading\",o),e.forEach(function(e){t.forEach(function(t){var a=h(o,[e,t]);if(a)n.loaded(e+\"|\"+t,r,a);else{var i=\"reloading namespace \"+t+\" for language \"+e+\" via multiloading failed\";n.loaded(e+\"|\"+t,i),n.logger.error(i)}})})}):e.forEach(function(e){t.forEach(function(t){n.loadOne(e+\"|\"+t,\"re\")})})},t.prototype.loadOne=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",r=e.split(\"|\"),o=R(r,2),a=o[0],i=o[1];this.read(a,i,\"read\",null,null,function(r,o){r&&t.logger.warn(n+\"loading namespace \"+i+\" for language \"+a+\" failed\",r),!r&&o&&t.logger.log(n+\"loaded namespace \"+i+\" for language \"+a,o),t.loaded(e,r,o)})},t.prototype.saveMissing=function(e,t,n,r){this.backend&&this.backend.create&&this.backend.create(e,t,n,r),e&&e[0]&&this.store.addResource(e[0],t,n,r)},t}(c),B=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function H(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var o=n[r],a=Object.getOwnPropertyDescriptor(t,o);a&&a.configurable&&void 0===e[o]&&Object.defineProperty(e,o,a)}}(e,t))}var F=function(e){function t(n,r,o){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var i=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,e.call(this));return i.cache=n,i.store=r,i.services=o,i.options=a,i.logger=l.create(\"cacheConnector\"),i.cache&&i.cache.init&&i.cache.init(o,a.cache,a),i}return H(t,e),t.prototype.load=function(e,t,n){var r=this;if(!this.cache)return n&&n();var o=B({},this.cache.options,this.options.cache),a=\"string\"==typeof e?this.services.languageUtils.toResolveHierarchy(e):e;o.enabled?this.cache.load(a,function(e,t){if(e&&r.logger.error(\"loading languages \"+a.join(\", \")+\" from cache failed\",e),t)for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o))for(var i in t[o])if(Object.prototype.hasOwnProperty.call(t[o],i)&&\"i18nStamp\"!==i){var s=t[o][i];s&&r.store.addResourceBundle(o,i,s)}n&&n()}):n&&n()},t.prototype.save=function(){this.cache&&this.options.cache&&this.options.cache.enabled&&this.cache.save(this.store.data)},t}(c);function V(e){return\"string\"==typeof e.ns&&(e.ns=[e.ns]),\"string\"==typeof e.fallbackLng&&(e.fallbackLng=[e.fallbackLng]),\"string\"==typeof e.fallbackNS&&(e.fallbackNS=[e.fallbackNS]),e.whitelist&&e.whitelist.indexOf(\"cimode\")<0&&e.whitelist.push(\"cimode\"),e}var W=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function K(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function q(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var o=n[r],a=Object.getOwnPropertyDescriptor(t,o);a&&a.configurable&&void 0===e[o]&&Object.defineProperty(e,o,a)}}(e,t))}function z(){}var G=new(function(e){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments[1];!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var o=K(this,e.call(this));if(o.options=V(n),o.services={},o.logger=l,o.modules={external:[]},r&&!o.isInitialized&&!n.isClone){var a;if(!o.options.initImmediate)return a=o.init(n,r),K(o,a);setTimeout(function(){o.init(n,r)},0)}return o}return q(t,e),t.prototype.init=function(e,t){var n=this;function r(e){return e?\"function\"==typeof e?new e:e:null}if(\"function\"==typeof e&&(t=e,e={}),e||(e={}),\"v1\"===e.compatibilityAPI?this.options=W({},{debug:!1,initImmediate:!0,ns:[\"translation\"],defaultNS:[\"translation\"],fallbackLng:[\"dev\"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,load:\"all\",preload:!1,simplifyPluralSuffix:!0,keySeparator:\".\",nsSeparator:\":\",pluralSeparator:\"_\",contextSeparator:\"_\",saveMissing:!1,saveMissingTo:\"fallback\",missingKeyHandler:!1,postProcess:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:function(){},parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){return{defaultValue:e[1]}},interpolation:{escapeValue:!0,format:function(e,t,n){return e},prefix:\"{{\",suffix:\"}}\",formatSeparator:\",\",unescapePrefix:\"-\",nestingPrefix:\"$t(\",nestingSuffix:\")\",defaultVariables:void 0}},V(function(e){return e.resStore&&(e.resources=e.resStore),e.ns&&e.ns.defaultNs?(e.defaultNS=e.ns.defaultNs,e.ns=e.ns.namespaces):e.defaultNS=e.ns||\"translation\",e.fallbackToDefaultNS&&e.defaultNS&&(e.fallbackNS=e.defaultNS),e.saveMissing=e.sendMissing,e.saveMissingTo=e.sendMissingTo||\"current\",e.returnNull=!e.fallbackOnNull,e.returnEmptyString=!e.fallbackOnEmpty,e.returnObjects=e.returnObjectTrees,e.joinArrays=\"\\n\",e.returnedObjectHandler=e.objectTreeKeyHandler,e.parseMissingKeyHandler=e.parseMissingKey,e.appendNamespaceToMissingKey=!0,e.nsSeparator=e.nsseparator||\":\",e.keySeparator=e.keyseparator||\".\",\"sprintf\"===e.shortcutFunction&&(e.overloadTranslationOptionHandler=function(e){for(var t=[],n=1;n<e.length;n++)t.push(e[n]);return{postProcess:\"sprintf\",sprintf:t}}),e.whitelist=e.lngWhitelist,e.preload=e.preload,\"current\"===e.load&&(e.load=\"currentOnly\"),\"unspecific\"===e.load&&(e.load=\"languageOnly\"),e.backend=e.backend||{},e.backend.loadPath=e.resGetPath||\"locales/__lng__/__ns__.json\",e.backend.addPath=e.resPostPath||\"locales/add/__lng__/__ns__\",e.backend.allowMultiLoading=e.dynamicLoad,e.cache=e.cache||{},e.cache.prefix=\"res_\",e.cache.expirationTime=6048e5,e.cache.enabled=e.useLocalStorage,(e=_(e)).defaultVariables&&(e.interpolation.defaultVariables=e.defaultVariables),e}(e)),{}):\"v1\"===e.compatibilityJSON?this.options=W({},{debug:!1,initImmediate:!0,ns:[\"translation\"],defaultNS:[\"translation\"],fallbackLng:[\"dev\"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,load:\"all\",preload:!1,simplifyPluralSuffix:!0,keySeparator:\".\",nsSeparator:\":\",pluralSeparator:\"_\",contextSeparator:\"_\",saveMissing:!1,saveMissingTo:\"fallback\",missingKeyHandler:!1,postProcess:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:function(){},parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){return{defaultValue:e[1]}},interpolation:{escapeValue:!0,format:function(e,t,n){return e},prefix:\"{{\",suffix:\"}}\",formatSeparator:\",\",unescapePrefix:\"-\",nestingPrefix:\"$t(\",nestingSuffix:\")\",defaultVariables:void 0}},V(function(e){return(e=_(e)).joinArrays=\"\\n\",e}(e)),{}):this.options=W({},{debug:!1,initImmediate:!0,ns:[\"translation\"],defaultNS:[\"translation\"],fallbackLng:[\"dev\"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,load:\"all\",preload:!1,simplifyPluralSuffix:!0,keySeparator:\".\",nsSeparator:\":\",pluralSeparator:\"_\",contextSeparator:\"_\",saveMissing:!1,saveMissingTo:\"fallback\",missingKeyHandler:!1,postProcess:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:function(){},parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){return{defaultValue:e[1]}},interpolation:{escapeValue:!0,format:function(e,t,n){return e},prefix:\"{{\",suffix:\"}}\",formatSeparator:\",\",unescapePrefix:\"-\",nestingPrefix:\"$t(\",nestingSuffix:\")\",defaultVariables:void 0}},this.options,V(e)),this.format=this.options.interpolation.format,t||(t=z),!this.options.isClone){this.modules.logger?l.init(r(this.modules.logger),this.options):l.init(null,this.options);var o=new P(this.options);this.store=new w(this.options.resources,this.options);var a=this.services;a.logger=l,a.resourceStore=this.store,a.resourceStore.on(\"added removed\",function(e,t){a.cacheConnector.save()}),a.languageUtils=o,a.pluralResolver=new N(o,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),a.interpolator=new j(this.options),a.backendConnector=new U(r(this.modules.backend),a.resourceStore,a,this.options),a.backendConnector.on(\"*\",function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];n.emit.apply(n,[e].concat(r))}),a.backendConnector.on(\"loaded\",function(e){a.cacheConnector.save()}),a.cacheConnector=new F(r(this.modules.cache),a.resourceStore,a,this.options),a.cacheConnector.on(\"*\",function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];n.emit.apply(n,[e].concat(r))}),this.modules.languageDetector&&(a.languageDetector=r(this.modules.languageDetector),a.languageDetector.init(a,this.options.detection,this.options)),this.translator=new O(this.services,this.options),this.translator.on(\"*\",function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];n.emit.apply(n,[e].concat(r))}),this.modules.external.forEach(function(e){e.init&&e.init(n)})}var i;[\"getResource\",\"addResource\",\"addResources\",\"addResourceBundle\",\"removeResourceBundle\",\"hasResourceBundle\",\"getResourceBundle\"].forEach(function(e){n[e]=function(){var t;return(t=n.store)[e].apply(t,arguments)}}),\"v1\"===this.options.compatibilityAPI&&((i=this).lng=function(){return l.deprecate(\"i18next.lng() can be replaced by i18next.language for detected language or i18next.languages for languages ordered by translation lookup.\"),i.services.languageUtils.toResolveHierarchy(i.language)[0]},i.preload=function(e,t){l.deprecate(\"i18next.preload() can be replaced with i18next.loadLanguages()\"),i.loadLanguages(e,t)},i.setLng=function(e,t,n){return l.deprecate(\"i18next.setLng() can be replaced with i18next.changeLanguage() or i18next.getFixedT() to get a translation function with fixed language or namespace.\"),\"function\"==typeof t&&(n=t,t={}),t||(t={}),!0===t.fixLng&&n?n(null,i.getFixedT(e)):i.changeLanguage(e,n)},i.addPostProcessor=function(e,t){l.deprecate(\"i18next.addPostProcessor() can be replaced by i18next.use({ type: 'postProcessor', name: 'name', process: fc })\"),i.use({type:\"postProcessor\",name:e,process:t})});var s=function(){n.changeLanguage(n.options.lng,function(e,r){n.isInitialized=!0,n.logger.log(\"initialized\",n.options),n.emit(\"initialized\",n.options),t(e,r)})};return this.options.resources||!this.options.initImmediate?s():setTimeout(s,0),this},t.prototype.loadResources=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:z;if(this.options.resources)t(null);else{if(this.language&&\"cimode\"===this.language.toLowerCase())return t();var n=[],r=function(t){t&&e.services.languageUtils.toResolveHierarchy(t).forEach(function(e){n.indexOf(e)<0&&n.push(e)})};if(this.language)r(this.language);else this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(function(e){return r(e)});this.options.preload&&this.options.preload.forEach(function(e){return r(e)}),this.services.cacheConnector.load(n,this.options.ns,function(){e.services.backendConnector.load(n,e.options.ns,t)})}},t.prototype.reloadResources=function(e,t){e||(e=this.languages),t||(t=this.options.ns),this.services.backendConnector.reload(e,t)},t.prototype.use=function(e){return\"backend\"===e.type&&(this.modules.backend=e),\"cache\"===e.type&&(this.modules.cache=e),(\"logger\"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),\"languageDetector\"===e.type&&(this.modules.languageDetector=e),\"postProcessor\"===e.type&&x.addPostProcessor(e),\"3rdParty\"===e.type&&this.modules.external.push(e),this},t.prototype.changeLanguage=function(e,t){var n=this,r=function(e){e&&(n.language=e,n.languages=n.services.languageUtils.toResolveHierarchy(e),n.translator.changeLanguage(e),n.services.languageDetector&&n.services.languageDetector.cacheUserLanguage(e)),n.loadResources(function(r){!function(e,r){r&&(n.emit(\"languageChanged\",r),n.logger.log(\"languageChanged\",r)),t&&t(e,function(){return n.t.apply(n,arguments)})}(r,e)})};e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(r):r(e):r(this.services.languageDetector.detect())},t.prototype.getFixedT=function(e,t){var n=this,r=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=W({},r);return o.lng=o.lng||e.lng,o.lngs=o.lngs||e.lngs,o.ns=o.ns||e.ns,n.t(t,o)};return\"string\"==typeof e?r.lng=e:r.lngs=e,r.ns=t,r},t.prototype.t=function(){var e;return this.translator&&(e=this.translator).translate.apply(e,arguments)},t.prototype.exists=function(){var e;return this.translator&&(e=this.translator).exists.apply(e,arguments)},t.prototype.setDefaultNamespace=function(e){this.options.defaultNS=e},t.prototype.loadNamespaces=function(e,t){var n=this;if(!this.options.ns)return t&&t();\"string\"==typeof e&&(e=[e]),e.forEach(function(e){n.options.ns.indexOf(e)<0&&n.options.ns.push(e)}),this.loadResources(t)},t.prototype.loadLanguages=function(e,t){\"string\"==typeof e&&(e=[e]);var n=this.options.preload||[],r=e.filter(function(e){return n.indexOf(e)<0});if(!r.length)return t();this.options.preload=n.concat(r),this.loadResources(t)},t.prototype.dir=function(e){if(e||(e=this.languages&&this.languages.length>0?this.languages[0]:this.language),!e)return\"rtl\";return[\"ar\",\"shu\",\"sqr\",\"ssh\",\"xaa\",\"yhd\",\"yud\",\"aao\",\"abh\",\"abv\",\"acm\",\"acq\",\"acw\",\"acx\",\"acy\",\"adf\",\"ads\",\"aeb\",\"aec\",\"afb\",\"ajp\",\"apc\",\"apd\",\"arb\",\"arq\",\"ars\",\"ary\",\"arz\",\"auz\",\"avl\",\"ayh\",\"ayl\",\"ayn\",\"ayp\",\"bbz\",\"pga\",\"he\",\"iw\",\"ps\",\"pbt\",\"pbu\",\"pst\",\"prp\",\"prd\",\"ur\",\"ydd\",\"yds\",\"yih\",\"ji\",\"yi\",\"hbo\",\"men\",\"xmn\",\"fa\",\"jpr\",\"peo\",\"pes\",\"prs\",\"dv\",\"sam\"].indexOf(this.services.languageUtils.getLanguagePartFromCode(e))>=0?\"rtl\":\"ltr\"},t.prototype.createInstance=function(){return new t(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments[1])},t.prototype.cloneInstance=function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z,o=W({},this.options,n,{isClone:!0}),a=new t(o,r);return[\"store\",\"services\",\"language\"].forEach(function(t){a[t]=e[t]}),a.translator=new O(a.services,a.options),a.translator.on(\"*\",function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];a.emit.apply(a,[e].concat(n))}),a.init(o,r),a},t}(c)),Y=G,X=(G.changeLanguage.bind(G),G.cloneInstance.bind(G),G.createInstance.bind(G),G.dir.bind(G),G.exists.bind(G),G.getFixedT.bind(G),G.init.bind(G),G.loadLanguages.bind(G),G.loadNamespaces.bind(G),G.loadResources.bind(G),G.off.bind(G),G.on.bind(G),G.setDefaultNamespace.bind(G),G.t.bind(G),G.use.bind(G),n(220)),Q=n.n(X),J=n(2),Z=n.n(J),ee=n(231),te=n.n(ee),ne=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},re={wait:!1,withRef:!1,bindI18n:\"languageChanged loaded\",bindStore:\"added removed\",translateFuncName:\"t\",nsMode:\"default\"},oe=void 0;function ae(e){re=ne({},re,e)}function ie(){return re}function se(e){oe=e}function ue(){return oe}var le={type:\"3rdParty\",init:function(e){ae(e.options.react),se(e)}},ce=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},de=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var fe=!1,pe=function(e){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));r.i18n=n.i18n||e.i18n||ue(),r.namespaces=r.props.ns||r.i18n.options.defaultNS,\"string\"==typeof r.namespaces&&(r.namespaces=[r.namespaces]);var o=r.i18n&&r.i18n.options.react||{};r.options=ce({},ie(),o,e),e.initialI18nStore&&(r.i18n.services.resourceStore.data=e.initialI18nStore,r.options.wait=!1),e.initialLanguage&&r.i18n.changeLanguage(e.initialLanguage),r.i18n.options.isInitialSSR&&(r.options.wait=!1);var a=r.i18n.languages&&r.i18n.languages[0],i=!!a&&r.namespaces.every(function(e){return r.i18n.hasResourceBundle(a,e)});return r.state={i18nLoadedAt:null,ready:i},r.onI18nChanged=r.onI18nChanged.bind(r),r.getI18nTranslate=r.getI18nTranslate.bind(r),r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r[\"Component\"]),de(t,[{key:\"getChildContext\",value:function(){return{t:this.t,i18n:this.i18n}}},{key:\"componentWillMount\",value:function(){this.t=this.getI18nTranslate()}},{key:\"componentDidMount\",value:function(){var e=this,t=function(){e.options.bindI18n&&e.i18n&&e.i18n.on(e.options.bindI18n,e.onI18nChanged),e.options.bindStore&&e.i18n.store&&e.i18n.store.on(e.options.bindStore,e.onI18nChanged)};this.mounted=!0,this.i18n.loadNamespaces(this.namespaces,function(){var n=function(){e.mounted&&!e.state.ready&&e.setState({ready:!0}),e.options.wait&&e.mounted&&t()};if(e.i18n.isInitialized)n();else{e.i18n.on(\"initialized\",function t(){setTimeout(function(){e.i18n.off(\"initialized\",t)},1e3),n()})}}),this.options.wait||t()}},{key:\"componentWillUnmount\",value:function(){var e=this;if(this.mounted=!1,this.onI18nChanged){if(this.options.bindI18n)this.options.bindI18n.split(\" \").forEach(function(t){return e.i18n.off(t,e.onI18nChanged)});if(this.options.bindStore)this.options.bindStore.split(\" \").forEach(function(t){return e.i18n.store&&e.i18n.store.off(t,e.onI18nChanged)})}}},{key:\"onI18nChanged\",value:function(){this.mounted&&(this.t=this.getI18nTranslate(),this.setState({i18nLoadedAt:new Date}))}},{key:\"getI18nTranslate\",value:function(){return this.i18n.getFixedT(null,\"fallback\"===this.options.nsMode?this.namespaces:this.namespaces[0])}},{key:\"render\",value:function(){var e=this,t=this.props.children;return!this.state.ready&&this.options.wait?null:(this.i18n.options.isInitialSSR&&!fe&&(fe=!0,setTimeout(function(){delete e.i18n.options.isInitialSSR},100)),t(this.t,{i18n:this.i18n,t:this.t}))}}]),t}(),he=pe;pe.contextTypes={i18n:Z.a.object},pe.childContextTypes={t:Z.a.func.isRequired,i18n:Z.a.object};var me=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ge=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function ve(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(n){var a,i=function(a){function i(n,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,i);var o=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,n,r));o.i18n=r.i18n||n.i18n||t.i18n||ue(),\"string\"==typeof(e=e||o.i18n.options.defaultNS)&&(e=[e]);var a=o.i18n&&o.i18n.options.react||{};return o.options=me({},ie(),a,t),o.getWrappedInstance=o.getWrappedInstance.bind(o),o}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(i,r[\"Component\"]),ge(i,[{key:\"getWrappedInstance\",value:function(){return this.options.withRef||console.error(\"To access the wrapped instance, you need to specify { withRef: true } as the second argument of the translate() call.\"),this.wrappedInstance}},{key:\"render\",value:function(){var t=this,r={};return this.options.withRef&&(r.ref=function(e){t.wrappedInstance=e}),o.a.createElement(he,me({ns:e},this.options,this.props,{i18n:this.i18n}),function(e,a){return o.a.createElement(n,me({},t.props,r,a))})}}]),i}();return i.WrappedComponent=n,i.contextTypes={i18n:Z.a.object},i.displayName=\"Translate(\"+((a=n).displayName||a.name||\"Component\")+\")\",i.namespaces=e,te()(i,n)}}ve.setDefaults=ae,ve.setI18n=se;var be=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ye=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var we=function(e){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return r.i18n=e.i18n||n.i18n,r.t=e.t||n.t,r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r[\"PureComponent\"]),ye(t,[{key:\"render\",value:function(){var e=this,t=this.props.parent||\"span\",n=this.props.regexp||this.i18n.services.interpolator.regexp,r=this.props,a=r.className,i=r.style,s=this.props.useDangerouslySetInnerHTML||!1,u=this.props.dangerouslySetInnerHTMLPartElement||\"span\",l=be({},this.props.options,{interpolation:{prefix:\"#$?\",suffix:\"?$#\"}}),c=this.t(this.props.i18nKey,l);if(!c||\"string\"!=typeof c)return o.a.createElement(\"noscript\",null);var d=[];c.split(n).reduce(function(t,n,r){var a=void 0;if(r%2==0){if(0===n.length)return t;a=s?o.a.createElement(u,{dangerouslySetInnerHTML:{__html:n}}):n}else a=function(t,n){if(t.indexOf(e.i18n.options.interpolation.formatSeparator)<0)return void 0===n[t]&&e.i18n.services.logger.warn(\"interpolator: missed to pass in variable \"+t+\" for interpolating \"+c),n[t];var r=t.split(e.i18n.options.interpolation.formatSeparator),o=r.shift().trim(),a=r.join(e.i18n.options.interpolation.formatSeparator).trim();return void 0===n[o]&&e.i18n.services.logger.warn(\"interpolator: missed to pass in variable \"+o+\" for interpolating \"+c),e.i18n.options.interpolation.format(n[o],a,e.i18n.language)}(n,e.props);return t.push(a),t},d);var f={};if(this.i18n.options.react&&this.i18n.options.react.exposeNamespace){var p=\"string\"==typeof this.t.ns?this.t.ns:this.t.ns[0];if(this.props.i18nKey&&this.i18n.options.nsSeparator&&this.props.i18nKey.indexOf(this.i18n.options.nsSeparator)>-1)p=this.props.i18nKey.split(this.i18n.options.nsSeparator)[0];this.t.ns&&(f[\"data-i18next-options\"]=JSON.stringify({ns:p}))}return a&&(f.className=a),i&&(f.style=i),o.a.createElement.apply(this,[t,f].concat(d))}}]),t}();we.propTypes={className:Z.a.string},we.defaultProps={className:\"\"},we.contextTypes={i18n:Z.a.object.isRequired,t:Z.a.func.isRequired};var xe=n(232),_e=n.n(xe),Ee=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),ke=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Se=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};function Ce(e){return e&&(e.children||e.props&&e.props.children)}function Oe(e){return e&&e.children?e.children:e.props&&e.props.children}var Te=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),Ee(t,[{key:\"render\",value:function(){var e=ke({i18n:this.context.i18n,t:this.context.t},this.props),t=e.children,n=e.count,r=e.parent,a=e.i18nKey,i=e.i18n,s=e.t,u=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,[\"children\",\"count\",\"parent\",\"i18nKey\",\"i18n\",\"t\"]),l=function e(t,n,r){return\"[object Array]\"!==Object.prototype.toString.call(n)&&(n=[n]),n.forEach(function(n,r){var a=\"\"+r;if(\"string\"==typeof n)t=\"\"+t+n;else if(Ce(n))t=t+\"<\"+a+\">\"+e(\"\",Oe(n),r+1)+\"</\"+a+\">\";else if(o.a.isValidElement(n))t=t+\"<\"+a+\"></\"+a+\">\";else if(\"object\"===(void 0===n?\"undefined\":Se(n))){var i=ke({},n),s=i.format;delete i.format;var u=Object.keys(i);s&&1===u.length?t=t+\"<\"+a+\">{{\"+u[0]+\", \"+s+\"}}</\"+a+\">\":1===u.length&&(t=t+\"<\"+a+\">{{\"+u[0]+\"}}</\"+a+\">\")}}),t}(\"\",t),c=i.options.react&&i.options.react.hashTransKey,d=a||(c?c(l):l),f=d?s(d,{interpolation:{prefix:\"#$?\",suffix:\"?$#\"},defaultValue:l,count:n}):l;if(i.options.react&&i.options.react.exposeNamespace){var p=\"string\"==typeof s.ns?s.ns:s.ns[0];if(a&&i.options.nsSeparator&&a.indexOf(i.options.nsSeparator)>-1)p=a.split(i.options.nsSeparator)[0];s.ns&&(u[\"data-i18next-options\"]=JSON.stringify({ns:p}))}return o.a.createElement(r,u,function(e,t,n){return Oe(function e(t,r){return\"[object Array]\"!==Object.prototype.toString.call(t)&&(t=[t]),\"[object Array]\"!==Object.prototype.toString.call(r)&&(r=[r]),r.reduce(function(r,a,i){if(\"tag\"===a.type){var s=t[parseInt(a.name,10)]||{},u=o.a.isValidElement(s);if(\"string\"==typeof s)r.push(s);else if(Ce(s)){var l=e(Oe(s),a.children);s.dummy&&(s.children=l),r.push(o.a.cloneElement(s,ke({},s.props,{key:i}),l))}else if(\"object\"!==(void 0===s?\"undefined\":Se(s))||u)r.push(s);else{var c=n.services.interpolator.interpolate(a.children[0].content,s,n.language);r.push(c)}}else\"text\"===a.type&&r.push(a.content);return r},[])}([{dummy:!0,children:e}],_e.a.parse(\"<0>\"+t+\"</0>\"))[0])}(t,f,i))}}]),t}();Te.propTypes={count:Z.a.number,parent:Z.a.string,i18nKey:Z.a.string,i18n:Z.a.object,t:Z.a.func},Te.defaultProps={parent:\"div\"},Te.contextTypes={i18n:Z.a.object.isRequired,t:Z.a.func.isRequired};var Pe=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Ie=function(e){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return r.i18n=e.i18n,e.initialI18nStore&&(r.i18n.services.resourceStore.data=e.initialI18nStore,r.i18n.options.isInitialSSR=!0),e.initialLanguage&&r.i18n.changeLanguage(e.initialLanguage),r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r[\"Component\"]),Pe(t,[{key:\"getChildContext\",value:function(){return{i18n:this.i18n}}},{key:\"componentWillReceiveProps\",value:function(e){if(this.props.i18n!==e.i18n)throw new Error(\"[react-i18next][I18nextProvider]does not support changing the i18n object.\")}},{key:\"render\",value:function(){var e=this.props.children;return r.Children.only(e)}}]),t}();Ie.propTypes={i18n:Z.a.object.isRequired,children:Z.a.element.isRequired},Ie.childContextTypes={i18n:Z.a.object.isRequired};var De=Ie;\"function\"==typeof Symbol&&Symbol.iterator;Object.entries||(Object.entries=function(e){for(var t=Object.keys(e),n=t.length,r=new Array(n);n--;)r[n]=[t[n],e[t[n]]];return r});var Ne=n(237),Ae=n.n(Ne),je=n(241),Le=\"object\"==typeof self&&self&&self.Object===Object&&self,Re=(je.a||Le||Function(\"return this\")()).Symbol,Me=Object.prototype,Ue=Me.hasOwnProperty,Be=Me.toString,He=Re?Re.toStringTag:void 0;var $e=function(e){var t=Ue.call(e,He),n=e[He];try{e[He]=void 0;var r=!0}catch(e){}var o=Be.call(e);return r&&(t?e[He]=n:delete e[He]),o},Fe=Object.prototype.toString;var Ve=function(e){return Fe.call(e)},We=\"[object Null]\",Ke=\"[object Undefined]\",qe=Re?Re.toStringTag:void 0;var ze=function(e){return null==e?void 0===e?Ke:We:qe&&qe in Object(e)?$e(e):Ve(e)};var Ge=function(e,t){return function(n){return e(t(n))}}(Object.getPrototypeOf,Object);var Ye=function(e){return null!=e&&\"object\"==typeof e},Xe=\"[object Object]\",Qe=Function.prototype,Je=Object.prototype,Ze=Qe.toString,et=Je.hasOwnProperty,tt=Ze.call(Object);var nt=function(e){if(!Ye(e)||ze(e)!=Xe)return!1;var t=Ge(e);if(null===t)return!0;var n=et.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&Ze.call(n)==tt},rt=n(242),ot={INIT:\"@@redux/INIT\"};function at(e,t){return function(){return t(e.apply(void 0,arguments))}}function it(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce(function(e,t){return function(){return e(t.apply(void 0,arguments))}})}var st=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};var ut=n(245),lt=n.n(ut),ct=n(14),dt=n.n(ct),ft={};var pt=function e(t,n,r){var o;if(\"function\"==typeof n&&void 0===r&&(r=n,n=void 0),void 0!==r){if(\"function\"!=typeof r)throw new Error(\"Expected the enhancer to be a function.\");return r(e)(t,n)}if(\"function\"!=typeof t)throw new Error(\"Expected the reducer to be a function.\");var a=t,i=n,s=[],u=s,l=!1;function c(){u===s&&(u=s.slice())}function d(){return i}function f(e){if(\"function\"!=typeof e)throw new Error(\"Expected listener to be a function.\");var t=!0;return c(),u.push(e),function(){if(t){t=!1,c();var n=u.indexOf(e);u.splice(n,1)}}}function p(e){if(!nt(e))throw new Error(\"Actions must be plain objects. Use custom middleware for async actions.\");if(void 0===e.type)throw new Error('Actions may not have an undefined \"type\" property. Have you misspelled a constant?');if(l)throw new Error(\"Reducers may not dispatch actions.\");try{l=!0,i=a(i,e)}finally{l=!1}for(var t=s=u,n=0;n<t.length;n++)(0,t[n])();return e}return p({type:ot.INIT}),(o={dispatch:p,subscribe:f,getState:d,replaceReducer:function(e){if(\"function\"!=typeof e)throw new Error(\"Expected the nextReducer to be a function.\");a=e,p({type:ot.INIT})}})[rt.a]=function(){var e,t=f;return(e={subscribe:function(e){if(\"object\"!=typeof e)throw new TypeError(\"Expected the observer to be an object.\");function n(){e.next&&e.next(d())}return n(),{unsubscribe:t(n)}}})[rt.a]=function(){return this},e},o}(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];if(\"@@redux/INIT\"===t.type);else if(ft.hasOwnProperty(t.type)){var n={};return n[ft[t.type].globalKey]=t,Object.assign({},e,n)}return e},function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(n,r,o){var a,i=e(n,r,o),s=i.dispatch,u={getState:i.getState,dispatch:function(e){return s(e)}};return a=t.map(function(e){return e(u)}),s=it.apply(void 0,a)(i.dispatch),st({},i,{dispatch:s})}}}(lt.a)),ht=function(){var e=Object(ct.boxState)(function(){return pt.getState()},void 0);pt.subscribe(function(){e.cancel()});return e}(),mt=pt;var gt=dt.a.box,vt=dt.a.util,bt=(vt.extend,vt.eachProp,vt.hasOwnProperty,vt.hasOwnProperties,vt.isString),yt=vt.isArray,wt=vt.isObjectLike,xt=vt.isFunction,_t=(vt.isNumeric,vt.isNumericInteger,vt.returnsAlwaysFalse,vt.returnsAlwaysTrue,vt.UNDEFINED,vt.isUndefined,vt.isNull,vt.isNullOrUndefined),Et=(vt.endsWith,vt.startsWith,vt.wrappedWith,vt.isWrapped,vt.unwrap,vt.wrap,vt.copyFilteredProperties,vt.cloneArrayObject,vt.firstDefined),kt=gt,St=dt.a;function Ct(){for(var e=arguments.length;e--;)if(_t(arguments[e]))return!0;return!1}function Ot(){return window.axios.defaults.baseURL}function Tt(){var e=ht.globalSettings.appSettings.xDebugSession(),t=\"\",n=\"?\",r=\"\";function o(e){if(e&&bt(e))!t||t.endsWith(\"/\")||e.startsWith(\"/\")||(t+=\"/\"),t+=e;else if(yt(e))e.forEach(function(e){o(e)});else if(wt(e))for(var a in e)if(e.hasOwnProperty(a)){var i=e[a];!i||wt(i)||yt(i)||(r+=n,n=\"&\",r+=encodeURIComponent(a)+\"=\"+encodeURIComponent(i))}}for(var a=arguments.length,i=Array(a),s=0;s<a;s++)i[s]=arguments[s];for(var u=i.length,l=0;l<u;l++){o(i[l])}return e&&(r+=n,n=\"&\",t+=e),t+r}var Pt,It;Y.use(Ae.a).use(Q.a).use(le).init({fallbackLng:\"en\",lng:\"en\",debug:!0,ns:[\"laravel-translation-manager\"],defaultNS:\"laravel-translation-manager\",keySeparator:\".\",interpolation:{escapeValue:!1,formatSeparator:\",\"},preload:[\"en\"],backend:{loadPath:Tt(Ot(),(Pt=\"{{ns}}::messages\",It=\"{{lng}}\",{url:Tt(\"api/translations\",Pt,It),type:\"GET\",data:void 0}).url),crossDomain:!0,allowMultiLoading:!1,parse:function(e){return JSON.parse(e)},withCredentials:!0},react:{wait:!0}});var Dt=Y,Nt=(n(249),n(250),n(251),n(252),n(253),n(254),n(68),n(255),n(256),n(257),n(260),n(265),n(8)),At=n.n(Nt),jt=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function Lt(e,t){var n=e.indexOf(t);n>=0&&e.splice(n,1)}function Rt(e,t){return e.indexOf(t)<0&&e.push(t),function(){return Lt(e,t)}}function Mt(e){for(var t=Object.assign([],e),n=t.length,r=null,o=arguments.length,a=Array(o>1?o-1:0),i=1;i<o;i++)a[i-1]=arguments[i];for(var s=0;s<n;s++){var u=t[s];if(!u);try{u.apply(void 0,a)}catch(e){r||(r=[]),r.push(u),console.error(\"GlobalSettingsHandler listener error for \",s,u,a,t,e)}}r&&r.forEach(function(e){return Lt(t,e)})}var Ut=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._unsubscribe=[];for(var t=arguments.length-1,n=arguments[t],r=function(){this._unsubscribe&&n()}.bind(this),o=0;o<t;o++){var a=arguments[o];this._unsubscribe.push(a.subscribe(r))}this.unsubscribe=this.unsubscribe.bind(this)}return jt(e,[{key:\"unsubscribe\",value:function(){var e=this._unsubscribe;this._unsubscribe=null;for(var t=e.length,n=0;n<t;n++)e[n]()}}]),e}(),Bt=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Ht=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.delayTimer=null,this.defaultDelay=t,this.pendingTask=null,this.run=this.run.bind(this)}return Bt(e,[{key:\"cancel\",value:function(){this.delayTimer&&(window.clearTimeout(this.delayTimer),this.delayTimer=null,this.pendingTask=null)}},{key:\"isPending\",value:function(){return this.delayTimer}},{key:\"run\",value:function(){var e=this.pendingTask;this.delayTimer=null,this.pendingTask=null,Array.isArray(e)?e.forEach(function(e){return e()}):e&&e()}},{key:\"restart\",value:function(e,t){this.cancel(),this.pendingTask=e,this.delayTimer=window.setTimeout(this.run,void 0!==t?t:this.defaultDelay)}},{key:\"append\",value:function(e,t){var n=this.pendingTask;this.cancel(),n?Array.isArray(n)?n.push(e):this.pendingTask=[n,e]:this.pendingTask=e}}]),e}(),$t=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Ft=dt.a.box,Vt=dt.a.boxState,Wt=dt.a.util,Kt=(Wt.isArray,Wt.eachProp),qt=Wt.copyFiltered,zt=Wt.copyFilteredNot,Gt=(Wt.isFunction,Wt.isObjectLike,Wt.UNDEFINED),Yt=[\"isLoaded\",\"isLoading\",\"isUpdating\",\"type\",\"settingsFrameID\"],Xt={appSettings:!1,globalTranslations:!1,globalMismatches:!1,globalSearchData:!1,globalSummary:!1,globalUserLocales:!1};function Qt(e){return!!Xt[e]}var Jt=0,Zt=1,en=2,tn=3,nn=function(){function e(t,n,r){var o,a=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1e3;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.globalKey=t,this.settingsFrameID=0,this.storeSubscribers=[],this.serverLoadSubscribers=[],this.serverUpdateFrameId=0,this.serverUpdater=new Ht(i||1e3),this.loadThrottler=new Ht(i||1e3),this.pendingLoad=null,this.sentUpdates=null,this.sentUpdateFrameIds=null,this.pendingUpdates=null,this.serverUpdates=null,this.lastSettingsFrameID=0,this.isLoaded=!1,this.isLoading=!1,this.isUpdating=!1,this.isStaleData=!0,this.state_$=Vt(function(){return a.getState()},function(e,t){a.update(t.$_delta)}),ft[(o=this).globalKey]=o,this.storeUnsubscribe=mt.subscribe(function(){a.state_$.cancel(),a.fireSettingsChanged()}),(n||r)&&this.setDefaultSettings(n||{},r||{})}return $t(e,[{key:\"setDefaultSettings\",value:function(e,t){var n=this;this.immediateProps=[],this.throttledProps=[],this.serverProps=[],this.storeProps=[],this.updateSettingsType={},zt.call(this.updateSettingsType,t,Yt),Kt.call(this.updateSettingsType,function(e,t){switch(e){case!0:case Jt:n.immediateProps.push(t);break;case!1:case Zt:n.throttledProps.push(t);break;case en:n.serverProps.push(t);break;case null:case tn:n.storeProps.push(t);break;default:throw\"InvalidArgument for update setting type expected [0,1,2,3,true,false,null], got \"+e}});var r=this.reduxAction(e||{}),o=Object.assign({},r);delete o.type,this.defaultSettings=o,window.setTimeout(function(){mt.dispatch(r)},0)}},{key:\"getState\",value:function(){return mt.getState()[this.globalKey]||this.defaultSettings}},{key:\"getBoxed\",value:function(){return this.state_$}},{key:\"setStateTransforms\",value:function(e){var t={isLoaded:Ft.transform.toBoolean,isLoading:Ft.transform.toBoolean,isUpdating:Ft.transform.toBoolean,isStaleData:Ft.transform.toBoolean},n={setTransforms:Object.assign({},e,t)};this.state_$.boxOptions(n)}},{key:\"reduxAction\",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return Object.assign.apply(Object,[{},e,{type:this.globalKey,isLoaded:this.isLoaded,isLoading:this.isLoading,isUpdating:this.isUpdating,isStaleData:this.isStaleData,settingsFrameID:this.settingsFrameID++}].concat(n))}},{key:\"serverCanLoad\",value:function(){throw\"serverCanLoad: Must be implemented in subclass\"}},{key:\"serverLoad\",value:function(){throw\"serverLoad: Must be implemented in subclass\"}},{key:\"updateServer\",value:function(e,t){throw\"serverUpdate: Must be implemented in subclass\"}},{key:\"load\",value:function(){var e=this;if(Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[load request]:\"),!this.loadThrottler.isPending()&&this.serverCanLoad.apply(this,arguments)){var t;this.loadThrottler.restart(function(){if(e.pendingLoad){Qt(e.globalKey)&&window.console.debug(e.globalKey+\"[load request]: delayed request running now\");e.pendingLoad;e.pendingLoad=null,e.load()}}),this.pendingLoad=null,this.isLoading=!0,Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[load request]: dispatching to store\");var n=this.reduxAction(this.getState());mt.dispatch(n),Qt(this.globalKey)&&(t=window.console).debug.apply(t,[this.globalKey+\"[load request]: requesting from server\"].concat(Array.prototype.slice.call(arguments))),this.serverLoad()}else Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[load request]: scheduled for later\"),this.pendingLoad=!0}},{key:\"canAutoRefresh\",value:function(){return wn.uiSettings.autoUpdateViews()}},{key:\"staleData\",value:function(e){if(this.isStaleData=!0,e||!Wt.isValid(e)&&this.canAutoRefresh())this.load();else{var t=this.reduxAction(this.getState());mt.dispatch(t)}}},{key:\"update\",value:function(e){e!==this.getState()&&this.throttledUpdate(e)}},{key:\"throttledUpdate\",value:function(e){var t=this;Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[next: \"+(this.serverUpdateFrameId+1)+\"]: throttled update request:\",e);var n=qt.call(void 0,e,this.immediateProps),r=qt.call(void 0,e,this.throttledProps,this.pendingUpdates),o=qt.call(void 0,e,this.serverProps,this.serverUpdates),a=qt.call(void 0,e,this.storeProps);if(a&&o?Object.assign(a,o):a=o||a,n||r||o){if(this.serverUpdater.cancel(),this.pendingUpdates=r||this.pendingUpdates,this.serverUpdates=o||this.serverUpdates,this.isUpdating=!!(n||this.pendingUpdates||this.serverUpdates),(this.pendingUpdates||n)&&!1!==e.isLoading&&(this.isLoading=!0),n){n=Object.assign(n,this.pendingUpdates),this.sentUpdates=Object.assign({},this.sentUpdates,n),n=Object.assign(n,this.serverUpdates),this.pendingUpdates=null,this.serverUpdates=null;var i=this.updateSentUpdateFrameId(n);Qt(this.globalKey)&&window.console.debug(i+\": immediate update: \",n),this.updateServer(n,i)}else(this.pendingUpdates||this.serverUpdates)&&(Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[next: \"+(this.serverUpdateFrameId+1)+\"]: scheduling pending server update:\",this.pendingUpdates,this.serverUpdates),this.serverUpdater.restart(function(){if(t.pendingUpdates||t.serverUpdates){var e=Object.assign({},t.serverUpdates,t.pendingUpdates);t.sentUpdates=Object.assign({},t.sentUpdates,t.pendingUpdates),t.serverUpdates=null,t.pendingUpdates=null;var n=t.updateSentUpdateFrameId(e);Qt(t.globalKey)&&window.console.debug(t.globalKey+\"[\"+n+\"]: pending update:\",e,t.sentUpdates),t.updateServer(e,n)}}));var s=this.reduxAction(this.getState(),this.sentUpdates,this.pendingUpdates,a);Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[next \"+(this.serverUpdateFrameId+1)+\"]:store update:\",s,this.sentUpdates,this.pendingUpdates,a),mt.dispatch(s)}else if(a){var u=this.reduxAction(this.getState(),this.sentUpdates,this.pendingUpdates,a);Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[next \"+(this.serverUpdateFrameId+1)+\"]:store update:\",u,this.sentUpdates,this.pendingUpdates,a),mt.dispatch(u)}}},{key:\"updateSentUpdateFrameId\",value:function(e){var t=this;this.sentUpdateFrameIds||(this.sentUpdateFrameIds={});var n=++this.serverUpdateFrameId;return Kt.call(e,function(e,r){t.sentUpdates.hasOwnProperty(r)&&(t.sentUpdateFrameIds[r]=n)}),n}},{key:\"processServerUpdate\",value:function(e,t){var n;if(t){Wt.copyFiltered.call(e,this.getState(),this.serverProps),Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[\"+t+\"]: processing server update:\",e);var r=this.sentUpdates,o=this.sentUpdateFrameIds,a={},i={},s=!1;r&&Kt.call(r,function(e,n){if(e!==Gt&&o.hasOwnProperty(n)){var r=o[n];r===t||(a[n]=e,i[n]=r,s=!0)}}),this.sentUpdates=s?a:null,this.sentUpdateFrameIds=s?i:null}else Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[]: load processing: \",e);this.isLoaded=!0,this.sentUpdates?(this.isLoading=!0,this.isUpdating=!0):(this.isLoading=!1,this.isStaleData=!1,this.isUpdating=!(!this.pendingUpdates&&!this.serverUpdates)),Wt.copyFiltered.call(e,this.getState(),this.storeProps),n=this.reduxAction(e,this.sentUpdates,this.pendingUpdates),mt.dispatch(n),this.fireSettingsLoaded()}},{key:\"subscribe\",value:function(e){return Rt(this.storeSubscribers,e)}},{key:\"fireSettingsChanged\",value:function(){var e=this.getState();this.lastSettingsFrameID!==e.settingsFrameID&&(this.lastSettingsFrameID=e.settingsFrameID,Mt(this.storeSubscribers))}},{key:\"subscribeLoaded\",value:function(e){return Rt(this.serverLoadSubscribers,e)}},{key:\"fireSettingsLoaded\",value:function(){Mt(this.serverLoadSubscribers)}}]),e}(),rn=n(15),on=n.n(rn),an=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var sn=new(function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.eventSubscribers={},this.events={}}return an(e,[{key:\"registerEvent\",value:function(e){this.events[e]=!0}},{key:\"subscribe\",value:function(e,t){if(!this.events[e])throw\"IllegalStateException, event \"+e+\" has not been registered\";return this.eventSubscribers[e]||(this.eventSubscribers[e]=[]),Rt(this.eventSubscribers[e],t)}},{key:\"fireEvent\",value:function(e){if(!this.events[e])throw\"IllegalStateException, event \"+e+\" has not been registered\";this.eventSubscribers[e]&&Mt.apply(void 0,[this.eventSubscribers[e]].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(Array.prototype.splice.call(arguments,1))))}}]),e}()),un=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},ln=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var cn=dt.a.util,dn=dt.a.box,fn=cn.isArray,pn=cn.eachProp,hn=(cn.isFunction,cn.isObjectLike),mn=cn.UNDEFINED,gn={autoUpdateViews:\"auto-update-views\",autoUpdateTranslationTable:\"auto-update-translation-table\",confirmDeleteGroup:\"confirm-delete-group\",confirmImportGroup:\"confirm-import-group\",confirmImportGroupReplace:\"confirm-import-group-replace\",confirmImportGroupDelete:\"confirm-import-group-delete\",confirmPublishGroup:\"confirm-publish-group\",confirmImportAllGroups:\"confirm-import-all-groups\",confirmImportAllGroupsReplace:\"confirm-import-all-groups-replace\",confirmImportAllGroupsDelete:\"confirm-import-all-groups-delete\",confirmAddReferences:\"confirm-add-references\",confirmPublishAllGroups:\"confirm-publish-all-groups\",confirmAddSuffixedKeys:\"confirm-add-suffixed-keys\",confirmDeleteSuffixedKeys:\"confirm-delete-suffixed-keys\",confirmClearUserUiSettings:\"confirm-clear-user-ui-settings\"},vn={confirmDeleteGroup:!0,confirmAddReferences:!0,confirmDeleteSuffixedKeys:!0,confirmClearUserUiSettings:!0},bn={dashboards:{summary:{index:0,showState:\"showSummaryDashboard\",title:\"messages.stats\",collapseState:\"collapseSummaryDashboard\",defaultCollapse:!0,defaultShow:!0,defaultInclude:!0},mismatches:{index:1,showState:\"showMismatchDashboard\",title:\"messages.mismatches\",collapseState:\"collapseMismatchDashboard\",defaultShow:!0,defaultCollapse:!0,defaultInclude:!0},userAdmin:{index:2,showState:\"showUserManagementDashboard\",title:\"messages.user-admin\",collapseState:\"collapseUserManagementDashboard\",defaultShow:!0,defaultInclude:!0,isAvailable:function(){return wn.isAdminEnabled()}},translationSettings:{index:3,showState:\"showTranslationSettings\",title:\"messages.translation-settings\",collapseState:\"collapseTranslationSettings\",defaultShow:!0,defaultInclude:!0},yandex:{index:4,showState:\"showYandexTranslation\",title:\"messages.translation-ops\",collapseState:\"collapseYandexTranslation\",defaultShow:!1,defaultInclude:!0,isDisabled:xn},suffixedKeyOps:{index:4,showState:\"showSuffixedKeyOps\",title:\"messages.suffixed-keyops\",collapseState:\"collapseSuffixedKeyOps\",defaultShow:!1,defaultInclude:!1,isDisabled:xn},appSettings:{index:10,showState:\"showAppSettings\",collapseState:\"collapseAppSettings\",title:\"messages.app-settings\",defaultShow:!1,defaultInclude:!1},search:{index:15,showState:\"showSearchDashboard\",collapseState:\"collapseSearchDashboard\",title:\"messages.search-dashboard\",defaultShow:!1,defaultInclude:!1},translations:{index:20,showState:\"showTranslationTable\",collapseState:\"collapseTranslationTable\",title:\"messages.translation-table\",defaultShow:!1,defaultInclude:!1},groups:{index:25,showState:\"showGroupManagementDashboard\",collapseState:\"collapseGroupManagementDashboard\",title:\"messages.group-management-dashboard\",defaultShow:!1,defaultInclude:!1}},routeDashboards:{\"\":{settingsPrefix:\"\",includeDashboards:[\"summary\",\"mismatches\",\"translationSettings\",\"userAdmin\",\"yandex\",\"suffixedKeyOps\"]},users:{settingsPrefix:\"users\",includeDashboards:[\"summary\",\"mismatches\",\"translationSettings\"],excludeDashboards:[\"userAdmin\"]},groups:{settingsPrefix:\"groups\",excludeDashboards:[\"summary\",\"mismatches\",\"userAdmin\"]},topics:{settingsPrefix:\"topics\"},settings:{settingsPrefix:\"settings\",includeDashboards:[\"summary\",\"mismatches\"]},search:{settingsPrefix:\"search\",excludeDashboards:[\"userAdmin\"]},yandex:{settingsPrefix:\"yandex\",excludeDashboards:[\"Yandex\"]}}},yn=new(function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"appSettings\")),n=dn({isAdminEnabled:!1,connectionList:{\"\":\"default\"},connectionName:\"\",transFilters:null,markdownKeySuffix:\"\",showUsage:!1,resetUsage:!1,usageInfoEnabled:!1,mismatchEnabled:!1,userLocalesEnabled:!1,currentLocale:\"en\",primaryLocale:\"en\",translatingLocale:\"en\",locales:[\"en\"],userLocales:[\"en\"],displayLocales:[\"en\"],groups:[],yandexKey:\"\",showUnpublishedSite:!1,uiSettings:{yandexText:{\"@@\":\"\"},group:null,xDebugSession:null,searchText:\"\",showPublishButtons:!0,collapsePublishButtons:!0,defaultSuffixes:\"-type\\n-header\\n-heading\\n-description\\n-footer\"},suffixedKeyOps:{keys:\"\",suffixes:\"\"}}),r={connectionName:Jt,showUsage:Zt,resetUsage:Jt,currentLocale:Zt,primaryLocale:Zt,translatingLocale:Zt,displayLocales:Zt,showUnpublishedSite:Zt,uiSettings:en},o=dn({isAdminEnabled:dn.transform.toBoolean,showUsage:dn.transform.toBoolean,locales:dn.transform.toDefault(\"\"),resetUsage:dn.transform.toBoolean,usageInfoEnabled:dn.transform.toBoolean,mismatchEnabled:dn.transform.toBoolean,userLocalesEnabled:dn.transform.toBoolean,showUnpublishedSite:dn.transform.toBoolean,uiSettings:{showPublishButtons:dn.transform.toBoolean,collapsePublishButtons:dn.transform.toBoolean}});pn.call(bn.dashboards,function(e,t){e.dashboardName=t;var r=cn.firstDefined(e.defaultShow,!1),a=cn.firstDefined(e.defaultCollapse,!1),i=r?dn.transform.toBooleanDefaultTrue:dn.transform.toBoolean,s=a?dn.transform.toBooleanDefaultTrue:dn.transform.toBoolean;o.uiSettings[e.showState]=i,o.uiSettings[e.collapseState]=s,n.uiSettings[e.showState]=r,n.uiSettings[e.collapseState]=a,pn.call(bn.routeDashboards,function(u,l){var c=u.includeDashboards&&-1!==u.includeDashboards.indexOf(t),d=!u.includeDashboards||c,f=u.excludeDashboards&&-1!==u.excludeDashboards.indexOf(t);if((c||d&&e.defaultInclude)&&!f){u.dashboards||(u.dashboards=[]);var p=u.settingsPrefix;p?(u.dashboards.push(Object.assign({},e,{showState:p+\".\"+e.showState,collapseState:p+\".\"+e.collapseState})),o.uiSettings[p][e.showState]=i,o.uiSettings[p][e.collapseState]=s,n.uiSettings[p][e.showState]=r,n.uiSettings[p][e.collapseState]=a):u.dashboards.push(e)}})}),pn.call(bn.routeDashboards,function(e,t){e.dashboards&&e.dashboards.sort(function(e,t){return e.index-t.index})}),pn.call(gn,function(e,t){if(vn.hasOwnProperty(t)){var r=vn[t];o.uiSettings[t]=r?dn.transform.toAlwaysTrue:dn.transform.toAlwaysFalse,n.uiSettings[t]=r}else o.uiSettings[t]=dn.transform.toBooleanDefaultTrue,n.uiSettings[t]=!0});var a=n.$_value,i=o.$_value;return e.setStateTransforms(i),e.setDefaultSettings(a,r),window.setTimeout(function(){e.load()},100),e}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,nn),ln(t,[{key:\"serverCanLoad\",value:function(){return!0}},{key:\"adjustServerData\",value:function(e,t){var n=e.data;if(t){var r=n.uiSettings;r||(n.uiSettings=n.appSettings),!r||void 0===r.yandexText||hn(r.yandexText)&&!fn(r.yandexText)||(r.yandexText={}),n.uiSettings=r,n=cn.mergeDefaults.call(e.data,{uiSettings:yn.getState().uiSettings})}return n&&delete n.appSettings,n}},{key:\"serverLoad\",value:function(){var e=this;on.a.get(Tt(\"api/app-settings\")).then(function(t){var n=e.adjustServerData(t,!0);e.processServerUpdate(n)})}},{key:\"updateServer\",value:function(e,t){var n,r=this,o=(n=e,{url:Tt(\"api/app-settings\"),type:\"POST\",data:JSON.stringify(n)});on.a.post(o.url,o.data).then(function(e){var n=r.adjustServerData(e,!1);r.processServerUpdate(n,t)})}},{key:\"getRouteDashboard\",value:function(e){if(hn(e))void 0===(e=e.path.substr(1))||un(e);var t=bn.routeDashboards[e];return t&&t.dashboards?t.dashboards.filter(function(e){return e.isAvailable===mn||e.isAvailable()}):null}},{key:\"getRouteSettingPrefix\",value:function(e){e=this.dashboardRoute(e);var t=bn.routeDashboards[e];return t&&t.settingsPrefix?t.settingsPrefix:\"\"}},{key:\"dashboardRoute\",value:function(e){if(hn(e))void 0===(e=e.path&&e.path.substr(1)||\"\")||un(e);return e}}]),t}()),wn=yn.getBoxed();function xn(){return!wn.yandexKey()}var _n=yn,En=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function kn(e,t){return\"JSON\"===e||\"json\"!==t}var Sn=new(function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"globalTranslations\",{connectionName:\"default\",displayLocales:[],yandexKey:null,translations:{},missingKeys:{}},{missingKeys:en},500));return e.knownMissingKeys={},e.missingKeys={},e.missingKeyTimer=null,e.addMissingKey=e.addMissingKey.bind(e),e.unsubscribe=_n.subscribeLoaded(function(){var t=wn.uiSettings.group(),n=wn.groups.$_array,r=e.getState(),o=n.indexOf(t);if(!Ct(wn.primaryLocale(),wn.translatingLocale())&&n.length&&t&&-1!==o)if(!r.group||Ct(r.primaryLocale,r.translatingLocale))e.load(t);else{var a=_n.getState();r.primaryLocale===a.primaryLocale&&r.translatingLocale===a.translatingLocale&&r.group===t&&r.connectionName===a.connectionName&&r.displayLocales&&r.displayLocales.filter(function(e){return kn(t,e)}).join(\",\")===wn.displayLocales.$_array.filter(function(e){return kn(t,e)}).join(\",\")||e.staleData()}else wn.uiSettings()&&t&&-1===o&&(wn.uiSettings.group=\"\",wn.save(),e.staleData())}),sn.registerEvent(\"invalidate.groups\"),sn.registerEvent(\"invalidate.group\"),sn.registerEvent(\"invalidate.translations\"),e.invalidateGroup=sn.subscribe(\"invalidate.group\",function(){e.staleData(),sn.fireEvent(\"invalidate.translations\")}),e.invalidateGroups=sn.subscribe(\"invalidate.groups\",function(){wn.isLoaded=!1,wn.uiSettings.group=null,wn.groups=[],wn.save(),_n.staleData(),sn.fireEvent(\"invalidate.translations\")}),e.load(),e}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,nn),En(t,[{key:\"canAutoRefresh\",value:function(){return wn.uiSettings.autoUpdateTranslationTable()}},{key:\"changeGroup\",value:function(e){wn.uiSettings.group=e,wn.save()}},{key:\"serverCanLoad\",value:function(){return!!wn.uiSettings.group()}},{key:\"serverLoad\",value:function(){var e=this,t=wn._$(),n=t.connectionName,r=t.primaryLocale,o=t.translatingLocale,a=t.displayLocales,i=wn.uiSettings.group();Qt(this.globalKey)&&window.console.debug(this.globalKey+\"[Translations load request]: \"+wn.translatingLocale()+\" requesting from server \",i);var s=function(e,t,n,r,o){return{url:Tt(\"api/translation-table\",e),type:\"POST\",data:JSON.stringify({connectionName:t,primaryLocale:n,translatingLocale:r,displayLocales:o})}}(i,n,r,o,a);on.a.post(s.url,s.data).then(function(t){e.processServerUpdate(t.data)})}},{key:\"updateServer\",value:function(e,t){var n=this,r=Object.keys(e.missingKeys);if(!r)throw\"IllegalState, missingKeys is false, should not call translations updateServer\";var o=function(e){return{url:Tt(\"api/missing-keys\"),type:\"POST\",data:JSON.stringify({missingKeys:e})}}(r);on.a.post(o.url,o.data).then(function(e){var o=n.getState();n.knownMissingKeys=Object.assign({},n.knownMissingKeys,r);var a=e.data.affectedGroups;delete e.data.affectedGroups,n.processServerUpdate(Object.assign({},o,e.data),t),a&&-1!==a.indexOf(n.getState().group)&&n.staleData()})}},{key:\"update\",value:function(e){var t=Object.assign({},e),n=t.missingKeys;delete t.isLoaded,delete t.missingKeys,_n.update(t),n&&this.throttledUpdate({missingKeys:n})}},{key:\"changeTranslations\",value:function(e,t,n){if(e&&e===this.getState().group){var r=this.getBoxed();r.translations.forEachKey_$(function(e,r){t(e)&&r.forEachKey_$(function(e,t){n(e,t)})});var o=r.$_modified;if(r.cancel(),o){var a=Sn.reduxAction(o);mt.dispatch(a),sn.fireEvent(\"invalidate.translations\",e)}}}},{key:\"addMissingKey\",value:function(e,t,n){var r=this,o=t+\"::\"+n;if(!this.knownMissingKeys||!this.knownMissingKeys[o]){this.knownMissingKeys[o]=e;var a=Object(ct._$)(this.missingKeys);a[o][-1]=e,a.$_modified&&(this.missingKeyTimer&&(window.clearTimeout(this.missingKeyTimer),this.missingKeyTimer=null),this.missingKeys=a.$_modified,this.missingKeyTimer=window.setTimeout(function(){r.missingKeyTimer=null,r.update({missingKeys:r.missingKeys})},1e3))}}}]),t}()),Cn=Sn.getBoxed(),On=Sn,Tn=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Pn=new(function(){function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.oldLanguage=null,this.isLoaded={},this.scriptHooker=new Ht(500),this.globalSettingsChanged=this.globalSettingsChanged.bind(this),this.globalTranslationChanged=this.globalTranslationChanged.bind(this),this.unhookOldScripts=this.unhookOldScripts.bind(this),this.hookOldScripts=this.hookOldScripts.bind(this),Dt.on(\"loaded\",function(e){for(var n in e)e.hasOwnProperty(n)&&(t.isLoaded[n]=!0);var r=_n.getState();t.updateGlobalVars(Dt,r)}),this.scriptsHooked=!1,this.unsubscribe=_n.subscribe(function(){var e=_n.getState(),n=Dt.language;e.currentLocale!==n&&Dt.changeLanguage(e.currentLocale),t.updateGlobalVars(Dt)}),Dt.on(\"missingKey\",function(e,t,n,r){On.addMissingKey(e,t,n)}),this.oldScriptHookers={},this.oldScriptHookerId=0}return Tn(e,[{key:\"globalSettingsChanged\",value:function(e){if(e.hasOwnProperty(\"uiSettings\")){if(e.uiSettings.hasOwnProperty(\"yandexPrimaryText\")){var t=wn.primaryLocale();wn.uiSettings.yandexText[t]=e.uiSettings.yandexPrimaryText,e.uiSettings.yandexText=wn.uiSettings.yandexText(),delete e.uiSettings.yandexPrimaryText,wn.cancel()}if(e.uiSettings.hasOwnProperty(\"yandexTranslatingText\")){var n=wn.translatingLocale();wn.uiSettings.yandexText[n]=e.uiSettings.yandexTranslatingText,e.uiSettings.yandexText=wn.uiSettings.yandexText(),delete e.uiSettings.yandexTranslatingText,wn.cancel()}e.uiSettings=dt.a.util.mergeDefaults.call(e.uiSettings,_n.getState().uiSettings,99)}_n.update(e)}},{key:\"globalTranslationChanged\",value:function(e,t,n,r,o){var a=0;e===On.getState().group?On.changeTranslations(e,function(e){return e===t},function(e,t){if(n===e){r=\"\"===r?null:r,t.value=r;var i=t.saved_value();a=t.status=r===i?0:1,o(a)}}):(o(1),sn.fireEvent(\"invalidate.translations\",e))}},{key:\"unhookOldScripts\",value:function(e){this.oldScriptHookers[e]&&(delete this.oldScriptHookers[e],dt.a.util.hasOwnProperties.call(this.oldScriptHookers)||(this.scriptHooker.cancel(),$.fn.OldScriptHooks.UNHOOK_TRANSLATION_PAGE_EVENTS&&$.fn.OldScriptHooks.UNHOOK_TRANSLATION_PAGE_EVENTS()))}},{key:\"hookOldScripts\",value:function(e){return e||(e=++this.oldScriptHookerId),this.oldScriptHookers[e]=!0,this.hookOldScriptsRaw(e,\"hook\"),e}},{key:\"hookOldScriptsRaw\",value:function(e,t){var n=this;this.scriptHooker.restart(function(){At.a.fn.OldScriptHooks.GLOBAL_SETTINGS_CHANGED=n.globalSettingsChanged,At.a.fn.OldScriptHooks.GLOBAL_TRANSLATION_CHANGED=n.globalTranslationChanged,window.console.debug(t+\": hooking old scripts for \"+e),n.hookScripts()})}},{key:\"hookOnComponentDidMount\",value:function(e,t){return e=t?Pn.hookOldScripts(e):null}},{key:\"hookOnComponentDidUpdate\",value:function(e,t){return t&&e&&(e=Pn.hookOldScripts(e)),e}},{key:\"hookOnComponentWillUnmount\",value:function(e,t){return t&&e&&(Pn.unhookOldScripts(e),e=null),e}},{key:\"hookScripts\",value:function(){var e=At.a.fn.OldScriptHooks;e.YANDEX_TRANSLATOR_KEY=wn.yandexKey(),e.PRIMARY_LOCALE=wn.primaryLocale(),e.TRANSLATING_LOCALE=wn.translatingLocale(),!e.TRANS_FILTERS&&wn.transFilters()&&(e.TRANS_FILTERS=wn.transFilters()),e.CURRENT_GROUP=wn.uiSettings().group,e.USER_LOCALES=wn.userLocales(),e.URL_TRANSLATOR_FILTERS=Tt(Ot(),\"api/trans-filters\"),e.HOOKUP_TRANSLATION_PAGE_EVENTS&&e.HOOKUP_TRANSLATION_PAGE_EVENTS()}},{key:\"updateGlobalVars\",value:function(e){var t=At.a.fn.OldScriptHooks;e.language!==this.oldLanguage&&this.isLoaded[e.language]&&(this.oldLanguage=e.language,t.MISMATCHED_QUOTES_MESSAGE=e.t(\"messages.mismatched-quotes\"),t.TITLE_SAVE_CHANGES=e.t(\"messages.title-save-changes\"),t.TITLE_CANCEL_CHANGES=e.t(\"messages.title-cancel-changes\"),t.TITLE_TRANSLATE=e.t(\"messages.title-translate\"),t.TITLE_CONVERT_KEY=e.t(\"messages.title-convert-key\"),t.TITLE_GENERATE_PLURALS=e.t(\"messages.title-generate-plurals\"),t.TITLE_CLEAN_HTML_MARKDOWN=e.t(\"messages.title-clean-html-markdown\"),t.TITLE_CAPITALIZE=e.t(\"messages.title-capitalize\"),t.TITLE_LOWERCASE=e.t(\"messages.title-lowercase\"),t.TITLE_CAPITALIZE_FIRST_WORD=e.t(\"messages.title-capitalize-first-word\"),t.TITLE_SIMULATED_COPY=e.t(\"messages.title-simulated-copy\"),t.TITLE_SIMULATED_PASTE=e.t(\"messages.title-simulated-paste\"),t.TITLE_RESET_EDITOR=e.t(\"messages.title-reset-editor\"),t.TITLE_LOAD_LAST=e.t(\"messages.title-load-last\"),t.TRANSLATION_TITLE=e.t(\"messages.enter-translation\"),t.UpdateXEditButtonTitles&&t.UpdateXEditButtonTitles())}}]),e}()),In=Pn,Dn=n(7),Nn=n.n(Dn),An=n(267),jn=n.n(An),Ln=n(12),Rn=n.n(Ln),Mn=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function Un(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}var Bn=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,a=Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=r=Un(this,e.call.apply(e,[this].concat(a))),r.state={match:r.computeMatch(r.props.history.location.pathname)},Un(r,n)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:Mn({},this.context.router,{history:this.props.history,route:{location:this.props.history.location,match:this.state.match}})}},t.prototype.computeMatch=function(e){return{path:\"/\",url:\"/\",params:{},isExact:\"/\"===e}},t.prototype.componentWillMount=function(){var e=this,t=this.props,n=t.children,r=t.history;Rn()(null==n||1===o.a.Children.count(n),\"A <Router> may have only one child element\"),this.unlisten=r.listen(function(){e.setState({match:e.computeMatch(r.location.pathname)})})},t.prototype.componentWillReceiveProps=function(e){Nn()(this.props.history===e.history,\"You cannot change <Router history>\")},t.prototype.componentWillUnmount=function(){this.unlisten()},t.prototype.render=function(){var e=this.props.children;return e?o.a.Children.only(e):null},t}(o.a.Component);Bn.propTypes={history:Z.a.object.isRequired,children:Z.a.node},Bn.contextTypes={router:Z.a.object},Bn.childContextTypes={router:Z.a.object.isRequired};var Hn=Bn,$n=Hn;function Fn(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}var Vn=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,a=Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=r=Fn(this,e.call.apply(e,[this].concat(a))),r.history=jn()(r.props),Fn(r,n)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){Nn()(!this.props.history,\"<BrowserRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { BrowserRouter as Router }`.\")},t.prototype.render=function(){return o.a.createElement($n,{history:this.history,children:this.props.children})},t}(o.a.Component);Vn.propTypes={basename:Z.a.string,forceRefresh:Z.a.bool,getUserConfirmation:Z.a.func,keyLength:Z.a.number,children:Z.a.node};var Wn=Vn,Kn=n(268),qn=n.n(Kn);function zn(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}var Gn=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,a=Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=r=zn(this,e.call.apply(e,[this].concat(a))),r.history=qn()(r.props),zn(r,n)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){Nn()(!this.props.history,\"<HashRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { HashRouter as Router }`.\")},t.prototype.render=function(){return o.a.createElement($n,{history:this.history,children:this.props.children})},t}(o.a.Component);Gn.propTypes={basename:Z.a.string,getUserConfirmation:Z.a.func,hashType:Z.a.oneOf([\"hashbang\",\"noslash\",\"slash\"]),children:Z.a.node};var Yn=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function Xn(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}var Qn=function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)},Jn=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,a=Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=r=Xn(this,e.call.apply(e,[this].concat(a))),r.handleClick=function(e){if(r.props.onClick&&r.props.onClick(e),!e.defaultPrevented&&0===e.button&&!r.props.target&&!Qn(e)){e.preventDefault();var t=r.context.router.history,n=r.props,o=n.replace,a=n.to;o?t.replace(a):t.push(a)}},Xn(r,n)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.render=function(){var e=this.props,t=(e.replace,e.to),n=e.innerRef,r=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,[\"replace\",\"to\",\"innerRef\"]);Rn()(this.context.router,\"You should not use <Link> outside a <Router>\");var a=this.context.router.history.createHref(\"string\"==typeof t?{pathname:t}:t);return o.a.createElement(\"a\",Yn({},r,{onClick:this.handleClick,href:a,ref:n}))},t}(o.a.Component);Jn.propTypes={onClick:Z.a.func,target:Z.a.string,replace:Z.a.bool,to:Z.a.oneOfType([Z.a.string,Z.a.object]).isRequired,innerRef:Z.a.oneOfType([Z.a.string,Z.a.func])},Jn.defaultProps={replace:!1},Jn.contextTypes={router:Z.a.shape({history:Z.a.shape({push:Z.a.func.isRequired,replace:Z.a.func.isRequired,createHref:Z.a.func.isRequired}).isRequired}).isRequired};var Zn=Jn,er=n(269),tr=n.n(er);function nr(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}var rr=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,a=Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=r=nr(this,e.call.apply(e,[this].concat(a))),r.history=tr()(r.props),nr(r,n)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){Nn()(!this.props.history,\"<MemoryRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { MemoryRouter as Router }`.\")},t.prototype.render=function(){return o.a.createElement(Hn,{history:this.history,children:this.props.children})},t}(o.a.Component);rr.propTypes={initialEntries:Z.a.array,initialIndex:Z.a.number,getUserConfirmation:Z.a.func,keyLength:Z.a.number,children:Z.a.node};var or=n(270),ar=n.n(or),ir={},sr=0,ur=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};\"string\"==typeof t&&(t={path:t});var n=t,r=n.path,o=void 0===r?\"/\":r,a=n.exact,i=void 0!==a&&a,s=n.strict,u=void 0!==s&&s,l=n.sensitive,c=function(e,t){var n=\"\"+t.end+t.strict+t.sensitive,r=ir[n]||(ir[n]={});if(r[e])return r[e];var o=[],a={re:ar()(e,o,t),keys:o};return sr<1e4&&(r[e]=a,sr++),a}(o,{end:i,strict:u,sensitive:void 0!==l&&l}),d=c.re,f=c.keys,p=d.exec(e);if(!p)return null;var h=p[0],m=p.slice(1),g=e===h;return i&&!g?null:{path:o,url:\"/\"===o&&\"\"===h?\"/\":h,isExact:g,params:f.reduce(function(e,t,n){return e[t.name]=m[n],e},{})}},lr=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function cr(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}var dr=function(e){return 0===o.a.Children.count(e)},fr=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,a=Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=r=cr(this,e.call.apply(e,[this].concat(a))),r.state={match:r.computeMatch(r.props,r.context.router)},cr(r,n)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:lr({},this.context.router,{route:{location:this.props.location||this.context.router.route.location,match:this.state.match}})}},t.prototype.computeMatch=function(e,t){var n=e.computedMatch,r=e.location,o=e.path,a=e.strict,i=e.exact,s=e.sensitive;if(n)return n;Rn()(t,\"You should not use <Route> or withRouter() outside a <Router>\");var u=t.route,l=(r||u.location).pathname;return o?ur(l,{path:o,strict:a,exact:i,sensitive:s}):u.match},t.prototype.componentWillMount=function(){Nn()(!(this.props.component&&this.props.render),\"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\"),Nn()(!(this.props.component&&this.props.children&&!dr(this.props.children)),\"You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored\"),Nn()(!(this.props.render&&this.props.children&&!dr(this.props.children)),\"You should not use <Route render> and <Route children> in the same route; <Route children> will be ignored\")},t.prototype.componentWillReceiveProps=function(e,t){Nn()(!(e.location&&!this.props.location),'<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'),Nn()(!(!e.location&&this.props.location),'<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'),this.setState({match:this.computeMatch(e,t.router)})},t.prototype.render=function(){var e=this.state.match,t=this.props,n=t.children,r=t.component,a=t.render,i=this.context.router,s=i.history,u=i.route,l=i.staticContext,c={match:e,location:this.props.location||u.location,history:s,staticContext:l};return r?e?o.a.createElement(r,c):null:a?e?a(c):null:n?\"function\"==typeof n?n(c):dr(n)?null:o.a.Children.only(n):null},t}(o.a.Component);fr.propTypes={computedMatch:Z.a.object,path:Z.a.string,exact:Z.a.bool,strict:Z.a.bool,sensitive:Z.a.bool,component:Z.a.func,render:Z.a.func,children:Z.a.oneOfType([Z.a.func,Z.a.node]),location:Z.a.object},fr.contextTypes={router:Z.a.shape({history:Z.a.object.isRequired,route:Z.a.object.isRequired,staticContext:Z.a.object})},fr.childContextTypes={router:Z.a.object.isRequired};var pr=fr,hr=pr,mr=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gr=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};var vr=function(e){var t=e.to,n=e.exact,r=e.strict,a=e.location,i=e.activeClassName,s=e.className,u=e.activeStyle,l=e.style,c=e.isActive,d=e.ariaCurrent,f=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,[\"to\",\"exact\",\"strict\",\"location\",\"activeClassName\",\"className\",\"activeStyle\",\"style\",\"isActive\",\"ariaCurrent\"]);return o.a.createElement(hr,{path:\"object\"===(void 0===t?\"undefined\":gr(t))?t.pathname:t,exact:n,strict:r,location:a,children:function(e){var n=e.location,r=e.match,a=!!(c?c(r,n):r);return o.a.createElement(Zn,mr({to:t,className:a?[s,i].filter(function(e){return e}).join(\" \"):s,style:a?mr({},l,u):l,\"aria-current\":a&&d},f))}})};vr.propTypes={to:Zn.propTypes.to,exact:Z.a.bool,strict:Z.a.bool,location:Z.a.object,activeClassName:Z.a.string,className:Z.a.string,activeStyle:Z.a.object,style:Z.a.object,isActive:Z.a.func,ariaCurrent:Z.a.oneOf([\"page\",\"step\",\"location\",\"true\"])},vr.defaultProps={activeClassName:\"active\",ariaCurrent:\"true\"};var br=vr;var yr=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.enable=function(e){this.unblock&&this.unblock(),this.unblock=this.context.router.history.block(e)},t.prototype.disable=function(){this.unblock&&(this.unblock(),this.unblock=null)},t.prototype.componentWillMount=function(){Rn()(this.context.router,\"You should not use <Prompt> outside a <Router>\"),this.props.when&&this.enable(this.props.message)},t.prototype.componentWillReceiveProps=function(e){e.when?this.props.when&&this.props.message===e.message||this.enable(e.message):this.disable()},t.prototype.componentWillUnmount=function(){this.disable()},t.prototype.render=function(){return null},t}(o.a.Component);yr.propTypes={when:Z.a.bool,message:Z.a.oneOfType([Z.a.func,Z.a.string]).isRequired},yr.defaultProps={when:!0},yr.contextTypes={router:Z.a.shape({history:Z.a.shape({block:Z.a.func.isRequired}).isRequired}).isRequired};var wr=n(101),xr=n(102),_r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Er=function(e,t,n,r){var o=void 0;\"string\"==typeof e?(o=function(e){var t=e||\"/\",n=\"\",r=\"\",o=t.indexOf(\"#\");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf(\"?\");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:\"?\"===n?\"\":n,hash:\"#\"===r?\"\":r}}(e)).state=t:(void 0===(o=_r({},e)).pathname&&(o.pathname=\"\"),o.search?\"?\"!==o.search.charAt(0)&&(o.search=\"?\"+o.search):o.search=\"\",o.hash?\"#\"!==o.hash.charAt(0)&&(o.hash=\"#\"+o.hash):o.hash=\"\",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname \"'+o.pathname+'\" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(o.key=n),r?o.pathname?\"/\"!==o.pathname.charAt(0)&&(o.pathname=Object(wr.default)(o.pathname,r.pathname)):o.pathname=r.pathname:o.pathname||(o.pathname=\"/\"),o},kr=function(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&Object(xr.default)(e.state,t.state)};\"undefined\"==typeof window||!window.document||window.document.createElement,\"function\"==typeof Symbol&&Symbol.iterator,Object.assign,Object.assign,\"function\"==typeof Symbol&&Symbol.iterator,Object.assign;var Sr=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.isStatic=function(){return this.context.router&&this.context.router.staticContext},t.prototype.componentWillMount=function(){Rn()(this.context.router,\"You should not use <Redirect> outside a <Router>\"),this.isStatic()&&this.perform()},t.prototype.componentDidMount=function(){this.isStatic()||this.perform()},t.prototype.componentDidUpdate=function(e){var t=Er(e.to),n=Er(this.props.to);kr(t,n)?Nn()(!1,\"You tried to redirect to the same route you're currently on: \\\"\"+n.pathname+n.search+'\"'):this.perform()},t.prototype.perform=function(){var e=this.context.router.history,t=this.props,n=t.push,r=t.to;n?e.push(r):e.replace(r)},t.prototype.render=function(){return null},t}(o.a.Component);Sr.propTypes={push:Z.a.bool,from:Z.a.string,to:Z.a.oneOfType([Z.a.string,Z.a.object]).isRequired},Sr.defaultProps={push:!1},Sr.contextTypes={router:Z.a.shape({history:Z.a.shape({push:Z.a.func.isRequired,replace:Z.a.func.isRequired}).isRequired,staticContext:Z.a.object}).isRequired};var Cr=n(31),Or=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function Tr(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}var Pr=function(e,t){return e?Or({},t,{pathname:Object(Cr.addLeadingSlash)(e)+t.pathname}):t},Ir=function(e){return\"string\"==typeof e?Object(Cr.parsePath)(e):(n=(t=e).pathname,r=void 0===n?\"/\":n,o=t.search,a=void 0===o?\"\":o,i=t.hash,s=void 0===i?\"\":i,{pathname:r,search:\"?\"===a?\"\":a,hash:\"#\"===s?\"\":s});var t,n,r,o,a,i,s},Dr=function(e){return\"string\"==typeof e?e:Object(Cr.createPath)(e)},Nr=function(e){return function(){Rn()(!1,\"You cannot %s with <StaticRouter>\",e)}},Ar=function(){},jr=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,a=Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=r=Tr(this,e.call.apply(e,[this].concat(a))),r.createHref=function(e){return Object(Cr.addLeadingSlash)(r.props.basename+Dr(e))},r.handlePush=function(e){var t=r.props,n=t.basename,o=t.context;o.action=\"PUSH\",o.location=Pr(n,Ir(e)),o.url=Dr(o.location)},r.handleReplace=function(e){var t=r.props,n=t.basename,o=t.context;o.action=\"REPLACE\",o.location=Pr(n,Ir(e)),o.url=Dr(o.location)},r.handleListen=function(){return Ar},r.handleBlock=function(){return Ar},Tr(r,n)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:{staticContext:this.props.context}}},t.prototype.componentWillMount=function(){Nn()(!this.props.history,\"<StaticRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { StaticRouter as Router }`.\")},t.prototype.render=function(){var e=this.props,t=e.basename,n=(e.context,e.location),r=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,[\"basename\",\"context\",\"location\"]),a={createHref:this.createHref,action:\"POP\",location:function(e,t){if(!e)return t;var n=Object(Cr.addLeadingSlash)(e);return 0!==t.pathname.indexOf(n)?t:Or({},t,{pathname:t.pathname.substr(n.length)})}(t,Ir(n)),push:this.handlePush,replace:this.handleReplace,go:Nr(\"go\"),goBack:Nr(\"goBack\"),goForward:Nr(\"goForward\"),listen:this.handleListen,block:this.handleBlock};return o.a.createElement(Hn,Or({},r,{history:a}))},t}(o.a.Component);jr.propTypes={basename:Z.a.string,context:Z.a.object.isRequired,location:Z.a.oneOfType([Z.a.string,Z.a.object])},jr.defaultProps={basename:\"\",location:\"/\"},jr.childContextTypes={router:Z.a.object.isRequired};var Lr=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){Rn()(this.context.router,\"You should not use <Switch> outside a <Router>\")},t.prototype.componentWillReceiveProps=function(e){Nn()(!(e.location&&!this.props.location),'<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'),Nn()(!(!e.location&&this.props.location),'<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.')},t.prototype.render=function(){var e=this.context.router.route,t=this.props.children,n=this.props.location||e.location,r=void 0,a=void 0;return o.a.Children.forEach(t,function(t){if(o.a.isValidElement(t)){var i=t.props,s=i.path,u=i.exact,l=i.strict,c=i.sensitive,d=i.from,f=s||d;null==r&&(a=t,r=f?ur(n.pathname,{path:f,exact:u,strict:l,sensitive:c}):e.match)}}),r?o.a.cloneElement(a,{location:n,computedMatch:r}):null},t}(o.a.Component);Lr.contextTypes={router:Z.a.shape({route:Z.a.object.isRequired}).isRequired},Lr.propTypes={children:Z.a.node,location:Z.a.object};var Rr=Lr,Mr=n(104),Ur=n.n(Mr),Br=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};var Hr=function(e){var t=function(t){var n=t.wrappedComponentRef,r=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(t,[\"wrappedComponentRef\"]);return o.a.createElement(pr,{render:function(t){return o.a.createElement(e,Br({},r,t,{ref:n}))}})};return t.displayName=\"withRouter(\"+(e.displayName||e.name)+\")\",t.WrappedComponent=e,t.propTypes={wrappedComponentRef:Z.a.func},Ur()(t,e)},$r=Z.a.shape({trySubscribe:Z.a.func.isRequired,tryUnsubscribe:Z.a.func.isRequired,notifyNestedSubs:Z.a.func.isRequired,isSubscribed:Z.a.func.isRequired}),Fr=Z.a.shape({subscribe:Z.a.func.isRequired,dispatch:Z.a.func.isRequired,getState:Z.a.func.isRequired});var Vr=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"store\",n=arguments[1]||t+\"Subscription\",o=function(e){function o(n,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,o);var a=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,e.call(this,n,r));return a[t]=n.store,a}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(o,e),o.prototype.getChildContext=function(){var e;return(e={})[t]=this[t],e[n]=null,e},o.prototype.render=function(){return r.Children.only(this.props.children)},o}(r.Component);return o.propTypes={store:Fr.isRequired,children:Z.a.element.isRequired},o.childContextTypes=((e={})[t]=Fr.isRequired,e[n]=$r,e),o}();var Wr=null,Kr={notify:function(){}};var qr=function(){function e(t,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.store=t,this.parentSub=n,this.onStateChange=r,this.unsubscribe=null,this.listeners=Kr}return e.prototype.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},e.prototype.notifyNestedSubs=function(){this.listeners.notify()},e.prototype.isSubscribed=function(){return Boolean(this.unsubscribe)},e.prototype.trySubscribe=function(){var e,t;this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.onStateChange):this.store.subscribe(this.onStateChange),this.listeners=(e=[],t=[],{clear:function(){t=Wr,e=Wr},notify:function(){for(var n=e=t,r=0;r<n.length;r++)n[r]()},get:function(){return t},subscribe:function(n){var r=!0;return t===e&&(t=e.slice()),t.push(n),function(){r&&e!==Wr&&(r=!1,t===e&&(t=e.slice()),t.splice(t.indexOf(n),1))}}}))},e.prototype.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=Kr)},e}(),zr=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};var Gr=0,Yr={};function Xr(){}function Qr(e){var t,n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=o.getDisplayName,i=void 0===a?function(e){return\"ConnectAdvanced(\"+e+\")\"}:a,s=o.methodName,u=void 0===s?\"connectAdvanced\":s,l=o.renderCountProp,c=void 0===l?void 0:l,d=o.shouldHandleStateChanges,f=void 0===d||d,p=o.storeKey,h=void 0===p?\"store\":p,m=o.withRef,g=void 0!==m&&m,v=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(o,[\"getDisplayName\",\"methodName\",\"renderCountProp\",\"shouldHandleStateChanges\",\"storeKey\",\"withRef\"]),b=h+\"Subscription\",y=Gr++,w=((t={})[h]=Fr,t[b]=$r,t),x=((n={})[b]=$r,n);return function(t){Rn()(\"function\"==typeof t,\"You must pass a component to the function returned by \"+u+\". Instead received \"+JSON.stringify(t));var n=t.displayName||t.name||\"Component\",o=i(n),a=zr({},v,{getDisplayName:i,methodName:u,renderCountProp:c,shouldHandleStateChanges:f,storeKey:h,withRef:g,displayName:o,wrappedComponentName:n,WrappedComponent:t}),s=function(n){function i(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,i);var r=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,n.call(this,e,t));return r.version=y,r.state={},r.renderCount=0,r.store=e[h]||t[h],r.propsMode=Boolean(e[h]),r.setWrappedInstance=r.setWrappedInstance.bind(r),Rn()(r.store,'Could not find \"'+h+'\" in either the context or props of \"'+o+'\". Either wrap the root component in a <Provider>, or explicitly pass \"'+h+'\" as a prop to \"'+o+'\".'),r.initSelector(),r.initSubscription(),r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(i,n),i.prototype.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return(e={})[b]=t||this.context[b],e},i.prototype.componentDidMount=function(){f&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},i.prototype.componentWillReceiveProps=function(e){this.selector.run(e)},i.prototype.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},i.prototype.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=Xr,this.store=null,this.selector.run=Xr,this.selector.shouldComponentUpdate=!1},i.prototype.getWrappedInstance=function(){return Rn()(g,\"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the \"+u+\"() call.\"),this.wrappedInstance},i.prototype.setWrappedInstance=function(e){this.wrappedInstance=e},i.prototype.initSelector=function(){var t=e(this.store.dispatch,a);this.selector=function(e,t){var n={run:function(r){try{var o=e(t.getState(),r);(o!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=o,n.error=null)}catch(e){n.shouldComponentUpdate=!0,n.error=e}}};return n}(t,this.store),this.selector.run(this.props)},i.prototype.initSubscription=function(){if(f){var e=(this.propsMode?this.props:this.context)[b];this.subscription=new qr(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},i.prototype.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(Yr)):this.notifyNestedSubs()},i.prototype.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},i.prototype.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},i.prototype.addExtraProps=function(e){if(!(g||c||this.propsMode&&this.subscription))return e;var t=zr({},e);return g&&(t.ref=this.setWrappedInstance),c&&(t[c]=this.renderCount++),this.propsMode&&this.subscription&&(t[b]=this.subscription),t},i.prototype.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return Object(r.createElement)(t,this.addExtraProps(e.props))},i}(r.Component);return s.WrappedComponent=t,s.displayName=o,s.childContextTypes=x,s.contextTypes=w,s.propTypes=w,Ur()(s,t)}}var Jr=Object.prototype.hasOwnProperty;function Zr(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function eo(e,t){if(Zr(e,t))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o<n.length;o++)if(!Jr.call(t,n[o])||!Zr(e[n[o]],t[n[o]]))return!1;return!0}function to(e){return function(t,n){var r=e(t,n);function o(){return r}return o.dependsOnOwnProps=!1,o}}function no(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function ro(e,t){return function(t,n){n.displayName;var r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=no(e);var o=r(t,n);return\"function\"==typeof o&&(r.mapToProps=o,r.dependsOnOwnProps=no(o),o=r(t,n)),o},r}}var oo=[function(e){return\"function\"==typeof e?ro(e):void 0},function(e){return e?void 0:to(function(e){return{dispatch:e}})},function(e){return e&&\"object\"==typeof e?to(function(t){return function(e,t){if(\"function\"==typeof e)return at(e,t);if(\"object\"!=typeof e||null===e)throw new Error(\"bindActionCreators expected an object or a function, instead received \"+(null===e?\"null\":typeof e)+'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?');for(var n=Object.keys(e),r={},o=0;o<n.length;o++){var a=n[o],i=e[a];\"function\"==typeof i&&(r[a]=at(i,t))}return r}(e,t)}):void 0}];var ao=[function(e){return\"function\"==typeof e?ro(e):void 0},function(e){return e?void 0:to(function(){return{}})}],io=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function so(e,t,n){return io({},n,e,t)}var uo=[function(e){return\"function\"==typeof e?function(e){return function(t,n){n.displayName;var r=n.pure,o=n.areMergedPropsEqual,a=!1,i=void 0;return function(t,n,s){var u=e(t,n,s);return a?r&&o(u,i)||(i=u):(a=!0,i=u),i}}}(e):void 0},function(e){return e?void 0:function(){return so}}];function lo(e,t,n,r){return function(o,a){return n(e(o,a),t(r,a),a)}}function co(e,t,n,r,o){var a=o.areStatesEqual,i=o.areOwnPropsEqual,s=o.areStatePropsEqual,u=!1,l=void 0,c=void 0,d=void 0,f=void 0,p=void 0;function h(o,u){var h,m,g=!i(u,c),v=!a(o,l);return l=o,c=u,g&&v?(d=e(l,c),t.dependsOnOwnProps&&(f=t(r,c)),p=n(d,f,c)):g?(e.dependsOnOwnProps&&(d=e(l,c)),t.dependsOnOwnProps&&(f=t(r,c)),p=n(d,f,c)):v?(h=e(l,c),m=!s(h,d),d=h,m&&(p=n(d,f,c)),p):p}return function(o,a){return u?h(o,a):(d=e(l=o,c=a),f=t(r,c),p=n(d,f,c),u=!0,p)}}function fo(e,t){var n=t.initMapStateToProps,r=t.initMapDispatchToProps,o=t.initMergeProps,a=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(t,[\"initMapStateToProps\",\"initMapDispatchToProps\",\"initMergeProps\"]),i=n(e,a),s=r(e,a),u=o(e,a);return(a.pure?co:lo)(i,s,u,e,a)}var po=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function ho(e,t,n){for(var r=t.length-1;r>=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error(\"Invalid value of type \"+typeof e+\" for \"+n+\" argument when connecting component \"+r.wrappedComponentName+\".\")}}function mo(e,t){return e===t}var go=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.connectHOC,n=void 0===t?Qr:t,r=e.mapStateToPropsFactories,o=void 0===r?ao:r,a=e.mapDispatchToPropsFactories,i=void 0===a?oo:a,s=e.mergePropsFactories,u=void 0===s?uo:s,l=e.selectorFactory,c=void 0===l?fo:l;return function(e,t,r){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=a.pure,l=void 0===s||s,d=a.areStatesEqual,f=void 0===d?mo:d,p=a.areOwnPropsEqual,h=void 0===p?eo:p,m=a.areStatePropsEqual,g=void 0===m?eo:m,v=a.areMergedPropsEqual,b=void 0===v?eo:v,y=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(a,[\"pure\",\"areStatesEqual\",\"areOwnPropsEqual\",\"areStatePropsEqual\",\"areMergedPropsEqual\"]),w=ho(e,o,\"mapStateToProps\"),x=ho(t,i,\"mapDispatchToProps\"),_=ho(r,u,\"mergeProps\");return n(c,po({methodName:\"connect\",getDisplayName:function(e){return\"Connect(\"+e+\")\"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:w,initMapDispatchToProps:x,initMergeProps:_,pure:l,areStatesEqual:f,areOwnPropsEqual:h,areStatePropsEqual:g,areMergedPropsEqual:b},y))}}(),vo=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var bo=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.setState=n.setState.bind(n),n.applyPendingSettings=n.applyPendingSettings.bind(n),n.state_$=Object(ct.boxState)(function(){return n.state},function(e,t){n.setState(t.$_delta)}),n.usesSettings=[_n],n.usesOldScripts=!1,n.settingsUpdater=new Ht(500),n.stateToSettings=null,n.stateToSettingsProps=null,n.pendingStateSettings=null,n.oldScriptHookerId=null,n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),vo(t,[{key:\"componentDidMount\",value:function(){var e=this;this.subscriber=new(Function.prototype.bind.apply(Ut,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(this.usesSettings),[function(){e.state_$.cancel(),e.setStateFromSettings(e.getState())}]))),this.haveMounted=!0,this.oldScriptHookerId=In.hookOnComponentDidMount(this.oldScriptHookerId,this.usesOldScripts)}},{key:\"componentWillUnmount\",value:function(){this.haveMounted=!1,this.subscriber.unsubscribe(),this.oldScriptHookerId=In.hookOnComponentWillUnmount(this.oldScriptHookerId,this.usesOldScripts)}},{key:\"componentDidUpdate\",value:function(){this.oldScriptHookerId=In.hookOnComponentDidUpdate(this.oldScriptHookerId,this.usesOldScripts)}},{key:\"setStateTransforms\",value:function(e){var t=e;e.hasOwnProperty(\"getTransforms\")||e.hasOwnProperty(\"setTransforms\")||(t={setTransforms:e}),this.state_$.boxOptions(t)}},{key:\"setStateToSettings\",value:function(e){if(this.stateToSettings=e,this.pendingStateSettings=null,e){if(!e.hasOwnProperty(\"\"))throw\"IllegalArgument, setStateToSettings argument must have an '' property function to save settings\";if(!xt(e[\"\"]))throw\"IllegalArgument, setStateToSettings argument '' property is not a function\";this.stateToSettingsProps=Object.keys(e),this.stateToSettingsProps.splice(this.stateToSettingsProps.indexOf(\"\"),1)}}},{key:\"applyPendingSettings\",value:function(){var e=this,t=this.pendingStateSettings;this.pendingStateSettings=null,t&&(this.stateToSettingsProps.forEach(function(n){var r=e.stateToSettings[n];xt(r)&&r.call(null,t)}),this.stateToSettings[\"\"]())}},{key:\"adjustState\",value:function(e){return this.pendingStateSettings?Object.assign(e,this.pendingStateSettings):e}},{key:\"setState\",value:function(e){var t=this;if(this.state_$.cancel(),this.settingsUpdater.cancel(),e)if(this.stateToSettings)if(xt(e)){var n=e;o.a.Component.prototype.setState.call(this,function(r,o){return e=n(r,o),t.updateStateSettings(e),e})}else this.updateStateSettings(e),o.a.Component.prototype.setState.call(this,e);else o.a.Component.prototype.setState.call(this,e)}},{key:\"setStateFromSettings\",value:function(e){this.state_$.cancel(),this.settingsUpdater.cancel(),e&&o.a.Component.prototype.setState.call(this,e)}},{key:\"updateStateSettings\",value:function(e){var t=this,n={},r=null;this.stateToSettingsProps.forEach(function(o){e.hasOwnProperty(o)?(n[o]=e[o],r=n):t.pendingStateSettings&&t.pendingStateSettings.hasOwnProperty(o)?(n[o]=t.pendingStateSettings[o],r=n):n[o]=t.state[o]}),this.pendingStateSettings=r,this.pendingStateSettings&&this.settingsUpdater.restart(this.applyPendingSettings)}}]),t}(),yo=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var wo=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state=n.getState(),n.onChangeHandler=n.onChangeHandler.bind(n),n.setAllLanguagesTrue=n.setAllLanguagesTrue.bind(n),n.setAllLanguagesFalse=n.setAllLanguagesFalse.bind(n),n.updateWorkSet=n.updateWorkSet.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,bo),yo(t,[{key:\"getState\",value:function(){var e=wn;return{isLoaded:e.isLoaded(),isLoading:e.isLoading(),isStaleData:e.isStaleData(),currentLocale:e.currentLocale(),primaryLocale:e.primaryLocale(),translatingLocale:e.translatingLocale(),locales:e.locales(),userLocales:e.userLocales(),displayLocales:e.displayLocales()}}},{key:\"componentDidMount\",value:function(){var e=this;this.subscriber=new Ut(_n,On,function(){e.state_$.cancel(),e.setState(e.getState())})}},{key:\"componentWillUnmount\",value:function(){this.subscriber.unsubscribe()}},{key:\"onChangeHandler\",value:function(e){e.target.checked?(this.state_$.displayLocales.$_.push(e.target.name),this.state_$.save()):(this.state_$.displayLocales.$_if(function(t){return t.splice(t.indexOf(e.target.name),1)}),this.state_$.save())}},{key:\"updateWorkSet\",value:function(){wn.displayLocales=this.state.displayLocales,wn.save()}},{key:\"setAllLanguagesTrue\",value:function(){this.state_$.displayLocales=this.state.locales.slice(0),this.state_$.save()}},{key:\"setAllLanguagesFalse\",value:function(){this.state_$.displayLocales=[this.state.primaryLocale,this.state.translatingLocale],this.state_$.save()}},{key:\"render\",value:function(){var e=this,t=this.props.t,n=this.state,r=n.isLoaded,a=n.primaryLocale,i=n.translatingLocale,s=n.locales,u=n.displayLocales;return r?o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-3\"},o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-12\"},o.a.createElement(\"button\",{type:\"button\",className:\"btn btn-sm btn-primary\",onClick:this.updateWorkSet},t(\"messages.display-locales\")),\"  \")),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\" col-sm-12\"},o.a.createElement(\"div\",{style:{minHeight:\"10px\"}}),o.a.createElement(\"button\",{id:\"display-locale-all\",type:\"button\",className:\"btn btn-sm btn-outline-secondary\",onClick:this.setAllLanguagesTrue},t(\"messages.check-all\")),o.a.createElement(\"button\",{id:\"display-locale-none\",type:\"button\",className:\"btn btn-sm btn-outline-secondary ml-1\",onClick:this.setAllLanguagesFalse},t(\"messages.check-none\"))))),o.a.createElement(\"div\",{className:\"col-sm-9\"},o.a.createElement(\"div\",{className:\"input-group-sm\"},s.map(function(t,n){return o.a.createElement(\"label\",{key:n+\":\"+t},o.a.createElement(\"input\",{className:t!==a&&t!==i?\"display-locale\":\"\",name:t,type:\"checkbox\",value:t,checked:t===a||t===i||-1!==u.indexOf(t),disabled:t===a||t===i,onChange:e.onChangeHandler}),t)})))):o.a.createElement(\"div\",null,\"Loading...\")}}]),t}(),xo=it(ve(),go())(wo),_o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Eo=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state=n.getState(),n.onCurrentLocaleChange=n.onCurrentLocaleChange.bind(n),n.onPrimaryLocaleChange=n.onPrimaryLocaleChange.bind(n),n.onTranslatingLocaleChange=n.onTranslatingLocaleChange.bind(n),n.onConnectionNameChange=n.onConnectionNameChange.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,bo),_o(t,[{key:\"getState\",value:function(){return{isLoaded:wn.isLoaded(),isLoading:wn.isLoading(),isAdminEnabled:wn.isAdminEnabled(),translatingLocale:wn.translatingLocale(),currentLocale:wn.currentLocale(),primaryLocale:wn.primaryLocale(),connectionList:wn.connectionList(),connectionName:wn.connectionName(),userLocales:wn.userLocales(),locales:wn.locales()}}},{key:\"componentDidMount\",value:function(){var e=this;this.subscriber=new Ut(_n,function(){e.state_$.cancel(),e.setState(e.getState())})}},{key:\"componentWillUnmount\",value:function(){this.subscriber.unsubscribe()}},{key:\"onCurrentLocaleChange\",value:function(e){e.preventDefault(),wn.currentLocale=e.target.value,wn.save()}},{key:\"onPrimaryLocaleChange\",value:function(e){e.preventDefault(),wn.primaryLocale=e.target.value,wn.save()}},{key:\"onTranslatingLocaleChange\",value:function(e){e.preventDefault(),wn.translatingLocale=e.target.value,wn.save()}},{key:\"onConnectionNameChange\",value:function(e){e.preventDefault(),wn.connectionName=e.target.value,wn.save()}},{key:\"render\",value:function(){var e=this.props,t=e.t,n=(e.i18n,this.state),r=n.isLoaded,a=n.isAdminEnabled,i=n.userLocales,s=n.translatingLocale,u=n.currentLocale,l=n.primaryLocale,c=n.connectionList,d=n.connectionName,f=n.locales,p=[];for(var h in c)c.hasOwnProperty(h)&&p.push(h);return r?o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\" col-sm-3\"},a&&p.length>1&&o.a.createElement(\"div\",{className:\"input-group-sm\"},o.a.createElement(\"label\",{htmlFor:\"db-connection\"},t(\"messages.db-connection\"),\":\"),o.a.createElement(\"br\",null),o.a.createElement(\"select\",{name:\"connectionName\",id:\"db-connection\",className:\"form-control\",value:d,onChange:this.onConnectionNameChange},p.map(function(e){return o.a.createElement(\"option\",{key:e,value:e},c[e])}))),(!a||0===p.length)&&o.a.createElement(\"span\",null,\" \")),o.a.createElement(\"div\",{className:\"col-sm-3\"},o.a.createElement(\"div\",{className:\"input-group-sm\"},o.a.createElement(\"label\",null,t(\"messages.interface-locale\"),\":\"),o.a.createElement(\"br\",null),o.a.createElement(\"select\",{name:\"locale\",id:\"interface-locale\",className:\"form-control\",value:u,onChange:this.onCurrentLocaleChange},f.map(function(e){return o.a.createElement(\"option\",{key:e,value:e},e)})))),o.a.createElement(\"div\",{className:\"col-sm-3\"},o.a.createElement(\"div\",{className:\"input-group-sm\"},o.a.createElement(\"label\",null,t(\"messages.translating-locale\"),\":\"),o.a.createElement(\"br\",null),o.a.createElement(\"select\",{name:\"translatingLocale\",id:\"translating-locale\",className:\"form-control\",value:s,onChange:this.onTranslatingLocaleChange},f.map(function(e){return i.indexOf(e)>-1&&o.a.createElement(\"option\",{key:e,value:e},e)})))),o.a.createElement(\"div\",{className:\"col-sm-3\"},o.a.createElement(\"div\",{className:\"input-group-sm\"},o.a.createElement(\"label\",null,t(\"messages.primary-locale\"),\":\"),o.a.createElement(\"br\",null),o.a.createElement(\"select\",{name:\"primaryLocale\",id:\"primary-locale\",className:\"form-control\",value:l,onChange:this.onPrimaryLocaleChange},f.map(function(e){return o.a.createElement(\"option\",{key:e,value:e},e)}))))):o.a.createElement(\"div\",null,\"Loading...\")}}]),t}(),ko=it(ve(),go())(Eo),So=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Co=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state=n.getState(),n.handleShowUsageInfoChange=n.handleShowUsageInfoChange.bind(n),n.handleResetUsageInfoChange=n.handleResetUsageInfoChange.bind(n),n.updateUsageInfo=n.updateUsageInfo.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,bo),So(t,[{key:\"getState\",value:function(){return{isLoaded:wn.isLoaded(),isLoading:wn.isLoading(),isStaleData:wn.isStaleData(),isAdminEnabled:wn.isAdminEnabled(),showUsage:wn.showUsage(),resetUsage:wn.resetUsage(),usageInfoEnabled:wn.usageInfoEnabled()}}},{key:\"componentDidMount\",value:function(){var e=this;this.subscriber=new Ut(_n,function(){e.state_$.cancel(),e.setState(e.getState())})}},{key:\"componentWillUnmount\",value:function(){this.subscriber.unsubscribe()}},{key:\"updateUsageInfo\",value:function(){wn.showUsage=this.state.showUsage,wn.resetUsage=this.state.resetUsage,wn.save()}},{key:\"handleShowUsageInfoChange\",value:function(e){this.state_$.showUsage=e.target.checked,this.state_$.save()}},{key:\"handleResetUsageInfoChange\",value:function(e){this.state_$.resetUsage=e.target.checked,this.state_$.save()}},{key:\"render\",value:function(){var e=this.props.t,t=this.state,n=t.isLoaded,r=(t.isAdminEnabled,t.showUsage),a=t.resetUsage,i=t.usageInfoEnabled;return n?i&&o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-12\"},o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\" col-sm-3\"},o.a.createElement(\"button\",{className:\"btn btn-sm btn-primary\",onClick:this.updateUsageInfo},e(\"messages.set-usage-info\"))),o.a.createElement(\"div\",{className:\" col-sm-4\"},o.a.createElement(\"label\",null,o.a.createElement(\"input\",{id:\"show-usage-info\",name:\"show-usage-info\",type:\"checkbox\",checked:r,onChange:this.handleShowUsageInfoChange}),e(\"messages.show-usage-info\"))),o.a.createElement(\"div\",{className:\" col-sm-4\"},o.a.createElement(\"label\",null,o.a.createElement(\"input\",{id:\"reset-usage-info\",name:\"reset-usage-info\",type:\"checkbox\",checked:a,onChange:this.handleResetUsageInfoChange}),e(\"messages.reset-usage-info\")))))):o.a.createElement(\"div\",null,\"Loading...\")}}]),t}(),Oo=it(ve(),go())(Co),To=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Po=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={},n.handleReload=n.handleReload.bind(n),n.handleCollapse=n.handleCollapse.bind(n),n.handleHide=n.handleHide.bind(n),n.handleExtras=n.handleExtras.bind(n),n.collapseUpdateTimer=null,n.oldScriptHookerId=null,n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),To(t,[{key:\"onCollapseFire\",value:function(e){xt(this.props.onCollapse)&&this.props.onCollapse(e)}},{key:\"componentDidMount\",value:function(){var e=this;this.$el=At()(this.el),this.$btn=At()(this.btn),this.$el.collapse({toggle:!1}),this.$el.on(\"shown.bs.collapse\",function(){e.onCollapseFire(!1)}),this.$el.on(\"hidden.bs.collapse\",function(){e.onCollapseFire(!0)}),this.oldScriptHookerId=In.hookOnComponentDidMount(this.oldScriptHookerId,this.usesOldScripts)}},{key:\"componentWillUnmount\",value:function(){this.$el.collapse(\"dispose\"),this.oldScriptHookerId=In.hookOnComponentWillUnmount(this.oldScriptHookerId,this.usesOldScripts)}},{key:\"componentDidUpdate\",value:function(){this.oldScriptHookerId=In.hookOnComponentDidUpdate(this.oldScriptHookerId,this.props.hookOldScripts)}},{key:\"handleReload\",value:function(e){e.preventDefault(),e.stopPropagation(),xt(this.props.onReload)&&this.props.onReload(e)}},{key:\"handleHide\",value:function(e){e.preventDefault(),e.stopPropagation(),xt(this.props.onHide)&&this.props.onHide(e)}},{key:\"handleExtras\",value:function(e){e.preventDefault(),e.stopPropagation(),xt(this.props.onExtras)&&this.props.onExtras(e)}},{key:\"handleCollapse\",value:function(e){e.preventDefault(),e.stopPropagation(),this.$el.hasClass(\".collapsing\")||(this.props.isCollapsed?(this.$btn.addClass(\"shown\"),this.$el.collapse(\"show\")):(this.$btn.removeClass(\"shown\"),this.$el.collapse(\"hide\")))}},{key:\"render\",value:function(){var e=this,t=this.props,n=(t.t,t.isCollapsed),r=t.onCollapse,a=t.isAltExtras,i=t.onReload,s=t.onHide,u=t.onExtras,l=t.extrasContent,c=t.extrasAltContent,d=t.isLoading,f=t.isStaleData,p=t.maxHeight,h=o.a.createElement(\"div\",{className:\"card-body\"+(f?\" stale-data\":\"\")},o.a.createElement(\"div\",{style:void 0===p?{}:{display:\"block\",width:\"100%\",maxHeight:p||\"300px\",marginBottom:0,overflow:\"auto\"}},this.props.children)),m=!f||d?\"primary\":\"secondary\",g=\" bg-\"+m;return o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-12\"},o.a.createElement(\"div\",{className:\"card border-\"+m},o.a.createElement(\"div\",{className:\"card-header text-white\"+g,onClick:r?this.handleCollapse:null},o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-10\"},this.props.headerChildren),(i||r||s||u)&&o.a.createElement(\"div\",{className:\"col col-sm-2\"},o.a.createElement(\"div\",{className:\"input-group input-group-heading\"},u?o.a.createElement(\"button\",{type:\"button\",className:\"btn-heading\",onClick:this.handleExtras},a&&c?c:l||o.a.createElement(\"i\",{className:\"fas fa fa-tasks\"})):null,s?o.a.createElement(\"button\",{type:\"button\",className:\"btn-heading\",onClick:this.handleHide},o.a.createElement(\"i\",{className:\"fas fa fa-times\"})):null,i?o.a.createElement(\"button\",{type:\"button\",className:\"btn-heading\"+(d?\" loading\":\"\")+(f?\" stale-data\":\"\"),onClick:this.handleReload},o.a.createElement(\"i\",{className:\"fas fa fa-sync-alt\"})):null,r?o.a.createElement(\"button\",{ref:function(t){return e.btn=t},className:\"btn-heading btn-collapse\"+(n?\"\":\" shown\"),type:\"button\",\"aria-expanded\":\"false\",\"aria-controls\":\"dashboard\",onClick:this.handleCollapse}):null)))),r?o.a.createElement(\"div\",{ref:function(t){return e.el=t},className:\"collapse\"+(n?\"\":\" show\")},h):h)))}}]),t}();Po.propTypes={onReload:Z.a.func,onHide:Z.a.any,onExtras:Z.a.any,isAltExtras:Z.a.bool,extrasContent:Z.a.element,extrasAltContent:Z.a.element,onCollapse:Z.a.any,isCollapsed:Z.a.bool,hookOldScripts:Z.a.bool,isLoading:Z.a.bool,isStaleData:Z.a.bool,headerChildren:Z.a.any.isRequired,maxHeight:Z.a.string};var Io=Po,Do=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var No=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleClose=n.handleClose.bind(n),n.handleOk=n.handleOk.bind(n),n.handleNeverShow=n.handleNeverShow.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),Do(t,[{key:\"handleClose\",value:function(e){e.preventDefault(),e.stopPropagation();var t=this.props.onClose;xt(t)&&t(e,!1),At()(e.target).closest(\".modal\").modal(\"hide\")}},{key:\"handleOk\",value:function(e){e.preventDefault(),e.stopPropagation();var t=this.props.onClose;xt(t)&&t(e,!0),At()(e.target).closest(\".modal\").modal(\"hide\")}},{key:\"handleNeverShow\",value:function(e){e.preventDefault(),e.stopPropagation();var t=this.props.onNeverShow;t&&(xt(t)?t(e):bt(t)?(wn.uiSettings[t]=!1,wn.save()):console.error(\"Invalid onNeverShow property for modal\",t)),this.handleOk(e)}},{key:\"render\",value:function(){var e=this.props,t=e.t,n=e.cancelText,r=e.okText,a=e.onNeverShow,i=e.neverShowText;return o.a.createElement(\"div\",{className:\"modal-footer\"},a&&o.a.createElement(\"button\",{type:\"button\",className:this.props.neverShowButtonType||\"btn btn-sm btn-warning\",onClick:this.handleNeverShow},i||t(\"messages.modal-button-never-show\")),!this.props.hideCancel&&o.a.createElement(\"button\",{type:\"button\",className:this.props.cancelButtonType||\"btn btn-sm btn-outline-secondary\",onClick:this.handleClose},n||t(\"messages.modal-button-close\")),o.a.createElement(\"button\",{type:\"button\",className:this.props.okButtonType||\"btn btn-sm btn-secondary\",onClick:this.handleOk},r||t(\"messages.modal-button-ok\")))}}]),t}();No.propTypes={onNeverShow:Z.a.any,hideCancel:Z.a.bool,onClose:Z.a.any,neverShowText:Z.a.string,neverShowButtonType:Z.a.string,okText:Z.a.string,okButtonType:Z.a.string,cancelText:Z.a.string,cancelButtonType:Z.a.string};var Ao=it(ve(),go())(No),jo=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Lo=dt.a.util,Ro=dt.a.box,Mo=(Lo.isArray,Lo.eachProp,Lo.isFunction,Lo.isObjectLike),Uo=(Lo.UNDEFINED,0);function Bo(e,t){return Lo.isValid(e)?Lo.isFunction(e)?e(t):e:t}function Ho(e){if(e){var t=Array.prototype.slice.call(arguments,1);window.setTimeout(function(){e.apply(void 0,t)},100)}}var $o=new(function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"appModal\")),n={showModal:tn,hideModal:tn,modalProps:tn,modalBody:tn},r={modalBody:null,modalProps:{},showModal:!1,hideModal:!1},o=Ro({showModal:Ro.transform.toDefault(!1),hideModal:Ro.transform.toDefault(!1),modalProps:Ro.transform.toDefault({}),modalBody:Ro.transform.toDefault(null)}).$_value;return e.setStateTransforms(o),e.setDefaultSettings(r,n),e.modalState=Uo,e.shakeModal=!1,e.onShow=null,e.onShown=null,e.onHide=null,e.onHidden=null,e.onClose=null,e._onModalShow=e._onModalShow.bind(e),e._onModalShown=e._onModalShown.bind(e),e._onModalHide=e._onModalHide.bind(e),e._onModalHidden=e._onModalHidden.bind(e),e._onModalClose=e._onModalClose.bind(e),e.inButtonOp=!1,e}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,nn),jo(t,[{key:\"serverCanLoad\",value:function(){return!1}},{key:\"_onModalShow\",value:function(){this.modalState=2;var e=this.onShow;this.onShow=null,e&&e()}},{key:\"_onModalShown\",value:function(){this.modalState=3;var e=this.onShown;this.onShown=null,e&&e()}},{key:\"_onModalClose\",value:function(e){var t=null,n=this.onClose;return n&&(t=n(e)),t?(Mo(t)&&this._showModal(t),!1):(this.onClose=null,!0)}},{key:\"_onModalHide\",value:function(e){this.modalState=1;var t=this.onHide;this.onHide=null,t&&t(e)}},{key:\"_onModalHidden\",value:function(){this.modalState=Uo;var e=this.onHidden;this.onHidden=null,e&&e(),this.modalState===Uo&&this.update(this.defaultSettings)}},{key:\"_showModal\",value:function(e){this.onShow=e.onShow,this.onShown=e.onShown,this.onHide=e.onHide,this.onClose=e.onClose,this.onHidden=e.onHidden;var t=Object.assign({modalTitle:\"Missing Modal Title\"},e.modalProps,{onHide:this._onModalHide,onHidden:this._onModalHidden,onShow:this._onModalShow,onShown:this._onModalShown,onClose:this._onModalClose});this.update({showModal:!0,modalBody:e.modalBody||\"Missing Modal Body\",modalProps:t})}},{key:\"hideModal\",value:function(){switch(this.modalState){case Uo:case 1:break;case 2:case 3:this.update({hideModal:!0});break;default:window.console.error(\"Unknown modal state: \"+this.modalState)}}},{key:\"showModal\",value:function(e){var t=this;this.getState();switch(this.modalState){case Uo:this.modalState=2,this._showModal(e);break;case 1:var n=this.onHidden;this.onHidden=function(){n&&n(),t._showModal(e)};break;case 2:window.console.error(\"showModal called while previous is still in show transition: \",e);break;case 3:window.console.error(\"showModal called while previous is still shown: \",e);break;default:window.console.error(\"Unknown modal state: \"+this.modalState)}}},{key:\"isModalShowing\",value:function(){return this.modalState!==Uo}},{key:\"confirmationModal\",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,a=Bo(e);if(wn.uiSettings[a]()){var i=a?gn[a]:null,s=a?vn[a]:null;i||console.error(a+\" missing dashCase entry in appSettings appSettingChecks\",i);var u=function(e){var t=Object.assign({},{btnClasses:\"\",okBtnType:\"btn-outline-primary\",cancelBtnType:\"btn-outline-secondary\",btnSize:\"\"},e);return t.btnClasses&&t.btnClasses.split(\" \").forEach(function(e){switch(e){case\"btn-sm\":t.btnSize=\"btn-sm\";break;case\"btn\":break;case\"btn-lg\":t.btnSize=e;break;default:e.match(/^btn-outline-[a-z]+$/)?t.okBtnType=e:e.match(/^btn-[a-z]+$/)&&(t.okBtnType=\"btn-outline-\"+e.substr(4))}}),t.okBtnClass=t.okBtnClass||\"btn \"+t.btnSize+\" \"+t.okBtnType,t.cancelBtnClass=t.cancelBtnClass||\"btn \"+t.btnSize+\" \"+t.cancelBtnType,t}(r),l={onClose:function(e){console.log(\"Modal closed\"),n(!1)},modalProps:{modalTitle:Dt.t(\"messages.\"+i+\"-title\"),modalType:\"\",footer:o.a.createElement(Ao,{onNeverShow:void 0===s?a:null,okText:Dt.t(\"messages.\"+i.substring(\"confirm-\".length)),okButtonType:u.okBtnClass,neverShowButtonType:u.okBtnClass,cancelButtonType:u.cancelBtnClass,onClose:function(e,t){console.log(\"Modal closed\",t),$o.hideModal(),n(!!t)}})},modalBody:t?o.a.createElement(\"div\",null,Bo(t,Dt.t(\"messages.\"+i+\"-message\"))):o.a.createElement(\"p\",null,Dt.t(\"messages.\"+i+\"-message\"))};$o.showModal(l)}else n()}},{key:\"messageBox\",value:function(e,t,n){var r=function(e,t){console.log(\"Modal closed\",t),$o.hideModal()}.bind(this),a={onClose:null,modalProps:Object.assign({footer:o.a.createElement(Ao,{hideCancel:!0,onClose:r})},n,{modalTitle:e}),modalBody:t};$o.showModal(a)}}]),t}()),Fo=$o,Vo=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Wo=function(e){function t(e,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var o=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));if(!bn.dashboards[n])throw\"IllegalArgument, \"+n+\" is not found in dashboardConfig\";return o.usesOldScripts=!!r,o.dashboardName=n,o.reload=o.reload.bind(o),o.handleReload=o.handleReload.bind(o),o.handleCollapse=o.handleCollapse.bind(o),o.handleHide=o.handleHide.bind(o),o.handleExtras=o.handleExtras.bind(o),o.state={},o.onReload=o.reload,o}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,bo),Vo(t,[{key:\"noShow\",value:function(){return void 0!==this.state.showDashboard&&!this.state.showDashboard&&!0!==this.props.noHide}},{key:\"adjustState\",value:function(e,t){function n(e,t,n){return n?t:bt(e)?wn.uiSettings.$_path(e):t}var r=this.props,o=r.noHide;if(e.dashboardProps={},o)e.dashboardProps.onHide=void 0,e.dashboardProps.onCollapse=void 0;else{var a=this.dashboardName;if(a){var i=r.routeSettings||\"\",s=i?\".\":\"\";e.dashboardProps.onHide=i+s+bn.dashboards[a].showState,e.dashboardProps.onCollapse=i+s+bn.dashboards[a].collapseState}else e.dashboardProps.onHide=this.handleHide,e.dashboardProps.onCollapse=this.handleCollapse}return e.showDashboard=n(e.dashboardProps.onHide,!0,o),e.isCollapsed=n(e.dashboardProps.onCollapse,!1),t&&(e.dashboardProps.onExtras=t,e.isAltExtras=n(e.dashboardProps.onExtras,!1)),bo.prototype.adjustState.call(this,e)}},{key:\"getDashboardProps\",value:function(){return{isAltExtras:this.state.isAltExtras,isCollapsed:this.state.isCollapsed,isLoaded:Et(this.state.isLoaded,!0),isLoading:Et(this.state.isLoading,!1),isStaleData:Et(this.state.isStaleData,!1),onCollapse:this.state.dashboardProps.onCollapse?this.handleCollapse:null,onExtras:this.state.dashboardProps.onExtras?this.handleExtras:null,onHide:this.state.dashboardProps.onHide?this.handleHide:null,onReload:this.onReload?this.handleReload:null,showDashboard:this.state.showDashboard,hookOldScripts:!!this.usesOldScripts}}},{key:\"handleToggle\",value:function(e,t){bt(e)?(wn.uiSettings.path_$(e).$_value=t,wn.save()):xt(e)&&e(t)}},{key:\"handleCollapse\",value:function(e){this.state_$.isCollapsed=e,this.state_$.save(),this.handleToggle(this.state.dashboardProps.onCollapse,e)}},{key:\"handleHide\",value:function(e){this.handleToggle(this.state.dashboardProps.onHide,!1)}},{key:\"handleExtras\",value:function(e){this.handleToggle(this.state.dashboardProps.onExtras,!this.state.isAltExtras)}},{key:\"reload\",value:function(){}},{key:\"handleReload\",value:function(){this.handleCollapse(!1),this.reload()}},{key:\"handleButtonClick\",value:function(e){if(e.preventDefault(),e.stopPropagation(),!this.inButtonOp){this.inButtonOp=!0;var t=At()(e.target),n=t.data(\"reload-groups\"),r=t.data(\"disable-with\"),a=t.data(\"confirmation-key\"),i=this.state.confirmationExtra||null,s=t.data(\"invalidate-group\"),u=t.data(\"post-url\"),l=t.data(\"extra-fields\"),c=t.data(\"extra-params\"),d=l&&this.state_$.$_path(l)||{},f=xt(d)?d(c):d,p=function(){var e=this,o=void 0;r&&(o=t.text(),t.text(r)),t.addClass(\"busy\"),on.a.post(u,f).then(function(r){o&&t.text(o),t.removeAttr(\"disabled\"),t.removeClass(\"busy\"),o=null,e.inButtonOp=!1,s&&sn.fireEvent(\"invalidate.translations\",e.state.group),n&&sn.fireEvent(\"invalidate.groups\"),console.log(\"Operation complete\",u,r.data)}).catch(function(){o&&t.text(o),t.removeAttr(\"disabled\"),t.removeClass(\"busy\"),e.inButtonOp=!1})}.bind(this);if(a&&wn.uiSettings[a]()){var h=this.props.t,m=a?gn[a]:null,g=a?vn[a]:null;m||console.error(a+\" missing dashCase entry in appSettings appSettingChecks\",m);var v=\"btn-outline-primary\",b=\"\";t.attr(\"class\").split(\" \").forEach(function(e){switch(e){case\"btn-sm\":b=\"btn-sm\";break;case\"btn\":break;case\"btn-lg\":b=e;break;default:e.match(/^btn-outline-[a-z]+$/)?v=e:e.match(/^btn-[a-z]+$/)&&(v=\"btn-outline-\"+e.substr(4))}});var y=\"btn \"+b+\" \"+v,w=\"btn \"+b+\" btn-outline-secondary\",x=function(e,t){console.log(\"Modal closed\",t),Fo.hideModal(),t?p():this.inButtonOp=!1}.bind(this),_=function(e){console.log(\"Modal closed\"),this.inButtonOp=!1}.bind(this);Fo.showModal({onClose:_,modalProps:{modalTitle:h(\"messages.\"+m+\"-title\"),modalType:\"\",footer:o.a.createElement(Ao,{onNeverShow:void 0===g?a:null,okText:h(\"messages.\"+m.substring(\"confirm-\".length)),okButtonType:y,neverShowButtonType:y,cancelButtonType:w,onClose:x})},modalBody:o.a.createElement(\"div\",null,o.a.createElement(\"p\",null,h(\"messages.\"+m+\"-message\")),i)})}else p()}}}]),t}();Wo.propTypes={dashboardName:Z.a.string,routeSettings:Z.a.string,noHide:Z.a.bool};var Ko=Wo,qo=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},zo=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Go=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"translationSettings\"));return n.state=n.getState(),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),zo(t,[{key:\"getState\",value:function(){return this.adjustState({isLoaded:wn.isLoaded(),isLoading:wn.isLoading(),isStaleData:wn.isStaleData()})}},{key:\"reload\",value:function(){_n.load()}},{key:\"render\",value:function(){var e=this.props.t;return this.noShow()?null:o.a.createElement(Io,qo({headerChildren:e(\"messages.translation-settings\")},this.getDashboardProps()),o.a.createElement(ko,null),o.a.createElement(\"hr\",null),o.a.createElement(xo,null),o.a.createElement(\"hr\",null),o.a.createElement(Oo,null))}}]),t}();Go.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var Yo=it(ve(),go())(Go),Xo=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Qo=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Jo=dt.a.boxOut,Zo=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"appSettings\"));return n.state=n.getState(),Jo(Xt).eachProp(function(e,t){n.state[\"trace-\"+t]=Xt[t]}),n.saveSettings=n.saveSettings.bind(n),n.xDebugSessionClear=n.xDebugSessionClear.bind(n),n.xDebugSessionChanged=n.xDebugSessionChanged.bind(n),n.handleStateChange=n.handleStateChange.bind(n),n.handleTraceChange=n.handleTraceChange.bind(n),n.handleSuffixesChange=n.handleSuffixesChange.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),Qo(t,[{key:\"getState\",value:function(){var e=this,t=this.adjustState({isLoaded:wn.isLoaded(),isLoading:wn.isLoading(),isAdminEnabled:wn.isAdminEnabled(),xDebugSession:wn.uiSettings.xDebugSession(),defaultSuffixes:wn.uiSettings.defaultSuffixes()||\"\",showUnpublishedSite:wn.showUnpublishedSite()||!1});return Jo(Xt).eachProp(function(n,r){t[\"trace-\"+r]=!!e.state[\"trace-\"+r]}),Jo(gn).eachProp(function(e,n){vn.hasOwnProperty(n)?t[n]=vn[n]:t[n]=!!wn.uiSettings[n]()}),t}},{key:\"reload\",value:function(){_n.load()}},{key:\"handleSuffixesChange\",value:function(e){this.state_$.defaultSuffixes=e.target.value,this.state_$.save()}},{key:\"saveSettings\",value:function(){var e=this;wn.uiSettings._$(function(t){t.xDebugSession=e.state.xDebugSession,Jo(gn).eachProp(function(n,r){vn.hasOwnProperty(r)?t[r]=vn[r]:t[r]=!!e.state_$[r]()}),t.defaultSuffixes=e.state.defaultSuffixes}),wn.showUnpublishedSite=this.state.showUnpublishedSite,wn.save(),Jo(Xt).eachProp(function(t,n){Xt[n]=!!e.state[\"trace-\"+n]})}},{key:\"xDebugSessionClear\",value:function(){this.state_$.xDebugSession=null,this.state_$.save()}},{key:\"xDebugSessionChanged\",value:function(e){this.state_$.xDebugSession=e.target.value,this.state_$.save()}},{key:\"handleStateChange\",value:function(e){var t=At()(e.target),n=t.data(\"state-key\");this.state_$[n]=t.prop(\"checked\"),this.state_$.save()}},{key:\"handleTraceChange\",value:function(e){this.state;this.state_$._$[\"trace-\"+e.target.name]=!!e.target.checked,this.state_$.save()}},{key:\"render\",value:function(){var e=this,t=this.props.t,n=this.state,r=n.isAdminEnabled,a=n.xDebugSession,i=n.showUnpublishedSite;if(this.noShow())return null;for(var s=this.state_$,u=Object.keys(gn).map(function(n,r){var a=!!vn[n],i=gn[n],u=!!s[n]();return o.a.createElement(\"label\",{key:r},o.a.createElement(\"input\",{type:\"checkbox\",disabled:a,name:i,\"data-state-key\":n,checked:u,onChange:e.handleStateChange}),t(\"messages.\"+i))}),l=[],c=u.length,d=0;d<c;d+=2){var f=u[d],p=u[d+1];l.push(d?o.a.createElement(\"div\",{key:d+\"row\",className:\"row\"},o.a.createElement(\"div\",{className:\" col-sm-3\"}),o.a.createElement(\"div\",{className:\" col-sm-4\"},f),o.a.createElement(\"div\",{className:\" col-sm-5\"},p)):o.a.createElement(\"div\",{key:d+\"row\",className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-3\"},o.a.createElement(\"button\",{type:\"button\",className:\"btn btn-sm btn-primary\",onClick:this.saveSettings},t(\"messages.save-settings\"))),o.a.createElement(\"div\",{className:\" col-sm-3\"},o.a.createElement(\"label\",null,o.a.createElement(\"input\",{type:\"checkbox\",\"data-state-key\":\"showUnpublishedSite\",checked:i,onChange:this.handleStateChange}),t(\"messages.show-unpublished-site\"))),o.a.createElement(\"div\",{className:\" col-sm-3\"},f),o.a.createElement(\"div\",{className:\" col-sm-3\"},p)))}var h=[];return h.push(l.shift()),o.a.createElement(Io,Xo({headerChildren:t(\"messages.application-settings\")},this.getDashboardProps()),r&&o.a.createElement(\"div\",null,o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\" col-sm-2\"},o.a.createElement(\"label\",null,t(\"messages.xdebug-session\"),\":\")),o.a.createElement(\"div\",{className:\"col-sm-4\"},o.a.createElement(\"div\",{className:\"input-group input-group-sm\"},o.a.createElement(\"input\",{className:\"form-control form-control-sm\",value:a||\"\",onChange:this.xDebugSessionChanged,type:\"text\",placeholder:t(\"messages.xdebug-session\")}),o.a.createElement(\"div\",{className:\"input-group-append\"},o.a.createElement(\"button\",{type:\"button\",className:\"btn btn-outline-secondary\",onClick:this.xDebugSessionClear},\"×\")))),o.a.createElement(\"div\",{className:\"col-sm-5\"})),o.a.createElement(\"hr\",null),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\" col-sm-2\"},o.a.createElement(\"label\",null,t(\"messages.debug-trace\"),\":\")),o.a.createElement(\"div\",{className:\"col-sm-10\"},o.a.createElement(\"div\",{className:\"input-group-sm\"},Jo(Xt).mapProps(function(n,r){return o.a.createElement(\"label\",{key:r},o.a.createElement(\"input\",{className:\"display-locale\",name:r,type:\"checkbox\",value:r,checked:!!e.state[\"trace-\"+r],disabled:!1,onChange:e.handleTraceChange}),t(\"messages.trace-\"+r))}))))),o.a.createElement(\"hr\",null),l,o.a.createElement(\"hr\",null),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-3\"},o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-12\"},o.a.createElement(\"label\",null,t(\"messages.default-suffixes\"),\":\"))),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-12\"},o.a.createElement(\"p\",{className:\"text-secondary\"},t(\"messages.default-suffixes-placeholder\"))))),o.a.createElement(\"div\",{className:\"col col-sm-9\"},o.a.createElement(\"textarea\",{value:this.state.defaultSuffixes,className:\"form-control\",rows:\"6\",style:{resize:\"vertical\"},placeholder:t(\"messages.default-suffixes-placeholder\"),onChange:this.handleSuffixesChange}))),o.a.createElement(\"hr\",null),h)}}]),t}(),ea=it(ve(),go())(Zo),ta=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var na=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state=n.getState(),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,bo),ta(t,[{key:\"getState\",value:function(){return{}}},{key:\"componentDidMount\",value:function(){var e=this;this.subscriber=new Ut(_n,function(){e.state_$.cancel(),e.setState(e.getState())})}},{key:\"componentWillUnmount\",value:function(){this.subscriber.unsubscribe()}},{key:\"render\",value:function(){return o.a.createElement(\"div\",null,o.a.createElement(ea,{noHide:!0}),o.a.createElement(Yo,{noHide:!0}))}}]),t}();na.propTypes={};var ra=it(ve(),go())(na),oa=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},aa=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var ia=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),aa(t,[{key:\"componentDidMount\",value:function(){this.$el=$(this.el);var e=this.props.defaultOptions||{};this.$el.editable(e),e.hasOwnProperty(\"editableform\")&&e.editableform.hasOwnProperty(\"template\")&&($.fn.editableform.template=e.editableform.template)}},{key:\"componentDidUpdate\",value:function(){var e=this.$el.editable(\"getValue\",!0);(yt(e)&&\"\"===e.join(\"\")||bt(e)&&\"\"===e)&&this.$el.editable(\"destroy\"),this.$el=$(this.el);var t=this.props.defaultOptions||{};this.$el.editable(t),t.hasOwnProperty(\"editableform\")&&t.editableform.hasOwnProperty(\"template\")&&($.fn.editableform.template=t.editableform.template)}},{key:\"componentWillUnmount\",value:function(){this.$el.editable(\"destroy\")}},{key:\"render\",value:function(){var e=this,t=Object.assign({},this.props);return delete t.defaultOptions,o.a.createElement(\"div\",null,o.a.createElement(\"a\",oa({href:\"#\",ref:function(t){return e.el=t}},t),this.props.children||\"\"))}}]),t}(),sa=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var ua=new(function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"globalUserLocales\",{connectionName:\"default\",displayLocales:null,userLocaleList:[]},{}));return e.connectionName=e.defaultSettings.connectionName,e.displayLocales=e.defaultSettings.displayLocales,e.unsubscribe=_n.subscribeLoaded(function(){wn.uiSettings()&&wn.displayLocales[0]()&&(e.connectionName===wn.connectionName()&&e.displayLocales&&e.displayLocales.join(\",\")===wn.displayLocales.$_array.join(\",\")||e.staleData())}),e.load(),e}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,nn),sa(t,[{key:\"serverCanLoad\",value:function(){return!0}},{key:\"serverLoad\",value:function(){var e=this,t=_n.getState(),n=function(e,t){return{url:Tt(\"api/user-list\"),type:\"POST\",data:JSON.stringify({connectionName:e,displayLocales:t})}}(t.connectionName,t.displayLocales);on.a.post(n.url,n.data).then(function(t){e.connectionName=t.data.connectionName,e.displayLocales=t.data.displayLocales,e.processServerUpdate(t.data)})}},{key:\"updateServer\",value:function(e,t){throw\"globalUserLocales has no update\"}}]),t}()),la=ua.getBoxed(),ca=ua,da=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fa=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var pa=n(14).util,ha=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleClick=n.handleClick.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),fa(t,[{key:\"handleClick\",value:function(e){var t=this.props.t;if(e.preventDefault(),e.stopPropagation(),!Fo.inButtonOp&&!Bo(this.props.disabled)){Fo.inButtonOp=!0;var n=e.target,r=At()(n),a=Bo(this.props.dataUrl),i=pa.isObjectLike(a)?a:{url:a},s=this.props.reloadGroups,u=this.props.disableWith,l=this.props.confirmationKey,c=this.props.confirmationBody||null,d=this.props.invalidateGroup,f=this.props.onConfirmed,p=this.props.onSuccess,h=this.props.onFailure,m=function(e){if(e)if(pa.isFunction(f))try{f()}finally{Fo.inButtonOp=!1}else{var r=function(e,t){var n=At()(e),r=void 0;return t&&(r=n.text(),n.text(Bo(t))),$o.inButtonOp=!0,n.addClass(\"busy\"),function(){r&&n.text(r),n.removeAttr(\"disabled\"),n.removeClass(\"busy\"),r=null,$o.inButtonOp=!1}}(n,u);(i.type&&\"get\"===i.type.toLowerCase()?on.a.get:on.a.post)(i.url,i.data).then(function(e){if(r(),\"ok\"===e.data.status)d&&(sn.fireEvent(\"invalidate.translations\",Bo(d)),sn.fireEvent(\"invalidate.group\")),Bo(s)&&sn.fireEvent(\"invalidate.groups\"),Ho(p,e);else if(h)Ho(h,null,e);else{var n=pa.isArray(e.data.error)?o.a.createElement(\"ul\",null,e.data.error.map(function(e,t){return o.a.createElement(\"li\",{key:t,dangerouslySetInnerHTML:{__html:e}})})):o.a.createElement(\"p\",null,e.data.error);Fo.messageBox(t(\"messages.server-error-title\"),o.a.createElement(\"div\",null,o.a.createElement(\"p\",null,t(\"messages.server-error-response\")),n),{headerType:\"bg-danger text-white\"})}console.log(\"Operation complete\",i,e.data)}).catch(function(e){r(),h?Ho(h,e):Fo.messageBox(t(\"messages.server-error-title\"),o.a.createElement(\"div\",null,o.a.createElement(\"p\",null,t(\"messages.server-error-message\")),e.message),{headerType:\"bg-danger text-white\"})})}else Fo.inButtonOp=!1}.bind(this);l?Fo.confirmationModal(l,c,m,{btnClasses:r.attr(\"class\")}):m(!0)}}},{key:\"render\",value:function(){var e=this;this.props.t;return this.props.plainLink?o.a.createElement(\"a\",da({role:\"button\",className:this.props.className,href:Bo(this.props.dataUrl.url)},Bo(this.props.disabled)?{disabled:!0}:{}),this.props.children):this.props.asLink?o.a.createElement(\"a\",{ref:function(t){return e.el=t},href:\"#\",title:this.props.title||\"\",onClick:this.handleClick,className:this.props.className},this.props.children):o.a.createElement(\"button\",{ref:function(t){return e.el=t},type:this.props.type||\"button\",onClick:this.handleClick,className:this.props.className},this.props.children)}}]),t}();ha.propTypes={plainLink:Z.a.bool,asLink:Z.a.bool,disable:Z.a.any,dataUrl:Z.a.any,onConfirmed:Z.a.func,onSuccess:Z.a.func,onFailure:Z.a.func,reloadGroups:Z.a.any,invalidateGroup:Z.a.any,confirmationKey:Z.a.any,confirmationBody:Z.a.any,disableWith:Z.a.any};var ma=it(ve(),go())(ha),ga=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},va=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function ba(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var ya=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"userAdmin\"));return n.state=n.getState(),n.usesSettings=[_n,ca],n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),va(t,[{key:\"getState\",value:function(){return this.adjustState({error:null,isLoaded:la.isLoaded()&&wn.isLoaded(),isLoading:la.isLoading(),isStaleData:la.isStaleData()||wn.isStaleData(),displayLocales:wn.displayLocales(),userLocaleList:la.userLocaleList()})}},{key:\"getEntry\",value:function(e){return{id:e.hasOwnProperty(\"id\")?e.id:null,email:e.hasOwnProperty(\"email\")?e.email:null,name:e.hasOwnProperty(\"name\")?e.name:null,locales:e.hasOwnProperty(\"locales\")?e.locales.replace(/,/g,\", \"):null}}},{key:\"reload\",value:function(){ca.load()}},{key:\"render\",value:function(){var e=this,t=this.props,n=t.t,r=(t.showDashboard,t.noHide,this.state),a=r.error,i=r.isLoaded,s=r.userLocaleList,u=r.displayLocales;if(this.noShow())return null;var l=void 0;if(a)l=o.a.createElement(\"div\",null,\"Error: \",a.message);else if(i){var c=Tt(Ot(),\"api/user_locales\"),d=[].concat(ba(u));s.forEach(function(e){var t;e.locales&&(t=d).push.apply(t,ba(e.locales.split(\",\").filter(function(e){return e&&-1===d.indexOf(e)})))}),d=d.sort();var f=[];for(var p in d)if(d.hasOwnProperty(p)){var h=d[p];f.push({value:h,text:h})}var m={source:f,placement:\"bottom\",emptytext:\"All\",showbuttons:!1,display:function(e,t){var n=[],r=At.a.fn.editableutils.itemsByValue(e,t);r.length?(At.a.each(r,function(e,t){n.push(At.a.fn.editableutils.escape(t.text))}),At()(this).html(n.join(\", \"))):At()(this).empty()}};l=s.map(function(t,r){var a,i,s=e.getEntry(t),u=ga({},m),l=(a=s.id,i=wn.connectionName(),{url:Tt(\"api/clear-ui-settings\"),type:\"POST\",data:JSON.stringify({connectionName:i,userId:a})}),d=s===e.state.user?\"disabled \":\"\";return o.a.createElement(\"tr\",{key:r+\".\"+s.id},o.a.createElement(\"td\",{className:\"align-right\"},s.id),o.a.createElement(\"td\",null,s.email),o.a.createElement(\"td\",null,s.name),o.a.createElement(\"td\",null,o.a.createElement(ia,{to:\"#\",className:\"user-locales\",\"data-type\":\"checklist\",\"data-pk\":s.id,\"data-url\":c,\"data-title\":\"Select User Locales\",\"data-value\":s.locales,defaultOptions:u},s.locales)),o.a.createElement(\"td\",null,o.a.createElement(ma,{className:d+\"btn btn-sm btn-outline-primary\",disabled:!!d,dataUrl:l,confirmationKey:\"confirmClearUserUiSettings\",disableWith:n(\"messages.busy-processing\")},n(\"messages.delete-uisettings\"))))})}else l=o.a.createElement(\"tr\",null,o.a.createElement(\"td\",{colSpan:\"4\",width:\"100%\",className:\"text-center\"},o.a.createElement(\"div\",{className:\"show-loading\"})));return o.a.createElement(Io,ga({headerChildren:n(\"messages.user-admin\")},this.getDashboardProps()),o.a.createElement(\"table\",{className:\"table table-sm table-hover translation-stats\"},o.a.createElement(\"thead\",{className:\"thead-light\"},o.a.createElement(\"tr\",null,o.a.createElement(\"th\",{width:\"0%\",className:\"align-right\"},n(\"messages.user-locales-user-id\")),o.a.createElement(\"th\",{width:\"39%\"},n(\"messages.user-email\")),o.a.createElement(\"th\",{width:\"30%\"},n(\"messages.user-name\")),o.a.createElement(\"th\",{width:\"20%\"},n(\"messages.user-locales\")),o.a.createElement(\"th\",{width:\"0%\"}))),o.a.createElement(\"tbody\",null,l)))}}]),t}();ya.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var wa=it(ve(),go())(ya),xa=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Ea=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"groups\"));return n.state=n.getState(),n.handleNameChange=n.handleNameChange.bind(n),n.handleNameReset=n.handleNameReset.bind(n),n.handleSelectionChange=n.handleSelectionChange.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),_a(t,[{key:\"getState\",value:function(){return this.adjustState({error:null,isLoaded:wn.isLoaded(),isLoading:wn.isLoading(),isStaleData:wn.isStaleData(),groups:wn.groups(),groupEdits:{}})}},{key:\"reload\",value:function(){_n.load()}},{key:\"handleNameReset\",value:function(e){var t=At()(e.target).closest(\"td,th\").data(\"original-name\"),n=this.state_$.cancel();n.groupEdits[t].newName=t,n.groupEdits[t].selected=!1,n.save()}},{key:\"handleNameChange\",value:function(e){var t=At()(e.target),n=t.closest(\"td,th\").data(\"original-name\"),r=t.val(),o=this.state_$.cancel();o.groupEdits[n].newName=r,o.groupEdits[n].selected=\"\"!==r&&r!==n,o.save()}},{key:\"handleSelectionChange\",value:function(e){var t=At()(e.target),n=t.closest(\"td,th\").data(\"original-name\"),r=t.prop(\"checked\"),o=this.state_$.cancel(),a=o.groupEdits;\"*\"===n?this.state.groups.forEach(function(e){return a[e].selected=r}):a[n].selected=r;o.save()}},{key:\"render\",value:function(){var e=this,t=this.props.t,n=this.state,r=n.error,a=n.isLoaded,i=n.groups;if(this.noShow())return null;var s=void 0,u=!1;return r?s=o.a.createElement(\"div\",null,\"Error: \",r.message):a?function(){var t=e.state_$.groupEdits;u=!0,s=[];for(var n=Math.ceil(i.length/2),r=0;r<n;r++){var a=i[r],l=i[r+n],c=function(e,n){var r=!!t[e].selected(),a=t[e].newName();return a=void 0===a?e||\"\":a||\"\",r||(u=!1),o.a.createElement(\"td\",{key:n+e,className:r?\"editing\":\"\",\"data-original-name\":e},o.a.createElement(\"div\",{className:\"row align-items-center\"},o.a.createElement(\"div\",{className:\"col-auto\"},o.a.createElement(\"div\",{className:\"form-group mb-0\"},o.a.createElement(\"input\",{className:\"form-control form-check-inline\",type:\"checkbox\",checked:r,onChange:this.handleSelectionChange}))),o.a.createElement(\"div\",{className:\"col-11\"},o.a.createElement(\"div\",{className:\"input-group mb-0\"},o.a.createElement(\"input\",{type:\"text\",className:\"form-control form-control-sm\",value:a,onChange:this.handleNameChange,placeholder:e}),o.a.createElement(\"div\",{className:\"input-group-append\"},o.a.createElement(\"button\",{type:\"button\",className:\"btn btn-sm btn-outline-secondary\",onClick:this.handleNameReset},\"×\"))))))}.bind(e);s.push(o.a.createElement(\"tr\",{key:s.length+a+\"|\"+l},c(a,r),l?c(l,r+n):null))}}():s=o.a.createElement(\"tr\",null,o.a.createElement(\"td\",{colSpan:\"4\",width:\"100%\",className:\"text-center\"},o.a.createElement(\"div\",{className:\"show-loading\"}))),o.a.createElement(Io,xa({headerChildren:t(\"messages.group-admin\")},this.getDashboardProps()),o.a.createElement(\"table\",{className:\"table table-sm table-striped table-translations\"},o.a.createElement(\"thead\",{className:\"thead-light\"},o.a.createElement(\"tr\",null,o.a.createElement(\"th\",{width:\"50%\",\"data-original-name\":\"*\"},o.a.createElement(\"div\",{className:\"row align-items-center\"},o.a.createElement(\"div\",{className:\"col-auto\"},o.a.createElement(\"div\",{className:\"form-group mb-0\"},o.a.createElement(\"input\",{className:\"form-control form-check-inline\",type:\"checkbox\",checked:u,onChange:this.handleSelectionChange}))),o.a.createElement(\"div\",{className:\"col-11\"},o.a.createElement(\"div\",{className:\"input-group mb-0\"},t(\"messages.group\"))))),o.a.createElement(\"th\",{width:\"50%\"}))),o.a.createElement(\"tbody\",null,s)))}}]),t}();Ea.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var ka=it(ve(),go())(Ea),Sa=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Ca=new(function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"globalSummary\",{connectionName:\"default\",displayLocales:null,summary:[]},{}));return e.connectionName=e.defaultSettings.connectionName,e.displayLocales=e.defaultSettings.displayLocales,e.unsubscribe=_n.subscribeLoaded(function(){wn.displayLocales[0]()&&(null===e.displayLocales?e.load():e.displayLocales&&e.connectionName===wn.connectionName()&&e.displayLocales.join(\",\")===wn.displayLocales.$_array.join(\",\")||e.staleData())}),e.invalidateTranslations=sn.subscribe(\"invalidate.translations\",function(){e.staleData()}),e.invalidateGroup=sn.subscribe(\"invalidate.group\",function(){e.staleData()}),e.invalidateGroups=sn.subscribe(\"invalidate.groups\",function(){e.staleData()}),e.load(),e}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,nn),Sa(t,[{key:\"serverCanLoad\",value:function(){return wn.displayLocales[0]()}},{key:\"serverLoad\",value:function(){var e=this,t=_n.getState(),n=function(e,t){return{url:Tt(\"api/summary\"),type:\"POST\",data:JSON.stringify({connectionName:e,displayLocales:t})}}(t.connectionName,t.displayLocales);on.a.post(n.url,n.data).then(function(t){e.displayLocales=t.data.displayLocales,e.connectionName=t.data.connectionName,e.processServerUpdate(t.data)})}},{key:\"updateServer\",value:function(e,t){throw\"globalSummary has no update\"}}]),t}()),Oa=Ca.getBoxed(),Ta=Ca,Pa=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ia=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function Da(e){var t=e.type,n=e.count;return n?o.a.createElement(\"td\",{className:t},n):o.a.createElement(\"td\",{className:t},\" \")}function Na(e){var t=e.stat,n=(e.action,void 0);return t.deleted?(n=\"deleted\",t.deleted):t.missing?(n=\"missing\",t.missing):t.changed?(n=\"changed\",t.changed):t.cached?(n=\"cached\",t.cached):(n=\"\",\"\"),o.a.createElement(\"td\",{className:\"group \"+n},o.a.createElement(Zn,{to:\"#\",onClick:function(){e.callBack(t.group)}},t.group))}var Aa=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"summary\"));return n.state=n.getState(),n.showGroup=n.showGroup.bind(n),n.usesSettings=[Ta,_n],n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),Ia(t,[{key:\"getState\",value:function(){return this.adjustState({error:null,isLoaded:Oa.isLoaded(),isLoading:Oa.isLoading(),isStaleData:Oa.isStaleData()||wn.isStaleData(),summary:Oa.summary()})}},{key:\"showGroup\",value:function(e){this.props.history.push(\"/\"),On.changeGroup(e)}},{key:\"getEntry\",value:function(e){return{group:e.hasOwnProperty(\"group\")?e.group:null,deleted:e.hasOwnProperty(\"deleted\")?e.deleted:null,missing:e.hasOwnProperty(\"missing\")?e.missing:null,changed:e.hasOwnProperty(\"changed\")?e.changed:null,cached:e.hasOwnProperty(\"cached\")?e.cached:null}}},{key:\"reload\",value:function(){Ta.load()}},{key:\"render\",value:function(){var e=this,t=this.props.t,n=this.state,r=n.error,a=n.isLoaded,i=n.summary;if(this.noShow())return null;var s=void 0;return s=r?o.a.createElement(\"div\",null,\"Error: \",r.message):a?i.map(function(t,n){var r=e.getEntry(t);return o.a.createElement(\"tr\",{key:n},o.a.createElement(Da,{columnType:\"deleted\",count:r.deleted}),o.a.createElement(Da,{columnType:\"missing\",count:r.missing}),o.a.createElement(Da,{columnType:\"changed\",count:r.changed}),o.a.createElement(Da,{columnType:\"cached\",count:r.cached}),o.a.createElement(Na,{stat:r,callBack:e.showGroup}))}):o.a.createElement(\"tr\",null,o.a.createElement(\"td\",{colSpan:\"5\",width:\"100%\",className:\"text-center\"},o.a.createElement(\"div\",{className:\"show-loading\"}))),o.a.createElement(Io,Pa({headerChildren:t(\"messages.stats\"),maxHeight:\"300px\"},this.getDashboardProps()),o.a.createElement(\"table\",{className:\"table table-sm table-hover table-striped table-bordered translation-stats\"},o.a.createElement(\"thead\",{className:\"thead-light\"},o.a.createElement(\"tr\",null,o.a.createElement(\"th\",{className:\"deleted\",width:\"16%\"},t(\"messages.deleted\")),o.a.createElement(\"th\",{className:\"missing\",width:\"16%\"},t(\"messages.missing\")),o.a.createElement(\"th\",{className:\"changed\",width:\"16%\"},t(\"messages.changed\")),o.a.createElement(\"th\",{className:\"cached\",width:\"16%\"},t(\"messages.cached\")),o.a.createElement(\"th\",{className:\"group\",width:\"36%\"},t(\"messages.group\")))),o.a.createElement(\"tbody\",null,s)))}}]),t}();Aa.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var ja=it(ve(),go())(Hr(Aa)),La=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Ra=new(function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"globalMismatches\",{connectionName:\"default\",mismatches:[]},{}));return e.primaryLocale=null,e.translatingLocale=null,e.connectionName=e.defaultSettings.connectionName,e.unsubscribe=_n.subscribe(function(){Ct(wn.uiSettings.group(),wn.primaryLocale(),wn.translatingLocale())||(Ct(e.primaryLocale,e.translatingLocale)?e.load(wn.uiSettings.group()):e.primaryLocale===wn.primaryLocale()&&e.translatingLocale===wn.translatingLocale()&&e.connectionName===wn.connectionName()||e.staleData())}),e.load(),e}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,nn),La(t,[{key:\"serverCanLoad\",value:function(){var e=_n.getState(),t=e.primaryLocale,n=e.translatingLocale;return t&&n&&t!==n}},{key:\"serverLoad\",value:function(){var e=this,t=_n.getState(),n=t.primaryLocale,r=t.translatingLocale,o=function(e,t,n){return{url:Tt(\"api/mismatches\"),type:\"POST\",data:JSON.stringify({connectionName:e,primaryLocale:t,translatingLocale:n})}}(t.connectionName,n,r);on.a.post(o.url,o.data).then(function(t){e.connectionName=t.data.connectionName,e.primaryLocale=t.data.primaryLocale,e.translatingLocale=t.data.translatingLocale,e.processServerUpdate(t.data)})}},{key:\"updateServer\",value:function(e,t){throw\"globalMismatches has no update\"}}]),t}()),Ma=Ra.getBoxed(),Ua=Ra,Ba=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ha=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var $a=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),Ha(t,[{key:\"componentDidMount\",value:function(){this.$el=At()(this.el);var e=this.props.defaultOptions||{};this.$el.vsch_editable(e),e.hasOwnProperty(\"editableform\")&&e.editableform.hasOwnProperty(\"template\")&&(At.a.fn.editableform.template=e.editableform.template)}},{key:\"componentWillUnmount\",value:function(){this.$el.vsch_editable(\"destroy\")}},{key:\"componentDidUpdate\",value:function(){var e=this.$el.editable(\"getValue\",!0),t=this.props.children?this.props.children.trim():\"\";if(e!==t&&this.$el.editable(\"setValue\",t,!0),\"\"===t){this.$el.vsch_editable(\"destroy\"),this.$el=At()(this.el);var n=this.props.defaultOptions||{};this.$el.vsch_editable(n)}}},{key:\"render\",value:function(){var e=this,t=Ba({},this.props);if(delete t.defaultOptions,\"ru-new-key-json\"===this.props.id);return o.a.createElement(\"a\",Ba({href:\"#\",ref:function(t){return e.el=t}},t),this.props.children)}}],[{key:\"htmlEncode\",value:function(e){return At()(\"<div/>\").text(e).html()}},{key:\"transXEditLink\",value:function(e,n,r,a,i){var s=Tt(Ot(),\"api/edit\",e);if(\"JSON\"===e&&\"new-key-json\"===n&&\"ru\"===r);if(a){var u=a.diff?o.a.createElement(\"span\",{style:{display:\"inline\"},dangerouslySetInnerHTML:{__html:\" [\"+a.diff+\"]\"}}):null;return o.a.createElement(\"span\",null,o.a.createElement(t,{className:\"vsch_editable status-\"+(a.status||0)+\" locale-\"+a.locale,\"data-type\":\"textarea\",\"data-pk\":a.id||0,\"data-url\":s,\"data-locale\":a.locale,\"data-name\":a.locale+\"|\"+a.key,id:a.locale+\"-\"+a.key,\"data-inputclass\":\"editable-input\",\"data-saved_value\":a.saved_value,\"data-title\":\"[\"+a.locale+\"] \"+a.group+\".\"+a.key},a.value||\"\"),u)}return o.a.createElement(\"span\",null,o.a.createElement(t,{className:\"vsch_editable editable-empty status-0 locale-\"+r,\"data-type\":\"textarea\",\"data-pk\":0,\"data-url\":s,\"data-locale\":r,\"data-name\":r+\"|\"+n,id:r+\"-\"+n,\"data-inputclass\":\"editable-input\",\"data-saved_value\":\"\",\"data-title\":\"[\"+r+\"] \"+e+\".\"+n}))}}]),t}(),Fa=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Va=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.showGroup=n.showGroup.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),Fa(t,[{key:\"componentDidMount\",value:function(){this.invalidateTranslations=sn.subscribe(\"invalidate.translations\",function(e){Ua.staleData()})}},{key:\"componentWillUnmount\",value:function(){this.invalidateTranslations&&this.invalidateTranslations()}},{key:\"showGroup\",value:function(e,t){e.preventDefault(),this.props.history.push(\"/\"),On.changeGroup(t)}},{key:\"getEntry\",value:function(e){return{group:e.hasOwnProperty(\"group\")?e.group:null,key:e.hasOwnProperty(\"key\")?e.key:null,tr:e.hasOwnProperty(\"tr\")?e.tr:null,tr_value:e.hasOwnProperty(\"tr_value\")?e.tr_value:null,pr:e.hasOwnProperty(\"pr\")?e.pr:null,pr_value:e.hasOwnProperty(\"pr_value\")?e.pr_value:null,status:e.hasOwnProperty(\"status\")?e.status:null}}},{key:\"render\",value:function(){var e=this,t=this.props.t,n=this.props,r=n.error,a=n.isLoaded,i=n.mismatches,s=n.translatingLocale,u=n.primaryLocale,l=n.userLocales,c=void 0;if(r)c=o.a.createElement(\"div\",null,\"Error: \",r.message);else if(a)if(i.length){var d=\"\",f=void 0,p=s,h=l.indexOf(p)>-1;c=i.map(function(t,n){var r=e.getEntry(t),a=\"group/\"+r.group,i=\"no-border-top\";return d!==r.key&&(\"\"!==d&&(i=\"border-top\"),d=r.key,f=r.key),a+\"/\"+r.group+\"#\"+r.key,r.value=r.tr_value,r.locale=p,o.a.createElement(\"tr\",{key:n+\".\"+r.group+\".\"+r.key,className:i},o.a.createElement(\"td\",{className:\"missing\"},f),o.a.createElement(\"td\",{className:(\"1\"==r.status?\" has-unpublished-translation\":\"\")+(\"2\"==r.status?\" has-cached-translation\":\"\")},h?$a.transXEditLink(r.group,r.key,r.locale,r,!1):r.value),o.a.createElement(\"td\",{className:\"missing\",dangerouslySetInnerHTML:{__html:r.tr}}),o.a.createElement(\"td\",{className:\"missing\",dangerouslySetInnerHTML:{__html:r.pr}}),o.a.createElement(\"td\",{className:\"group missing\"},o.a.createElement(\"a\",{href:\"#\",onClick:function(t){return e.showGroup(t,r.group)}},r.group)))})}else c=o.a.createElement(\"tr\",null,o.a.createElement(\"td\",{colSpan:\"5\",width:\"100%\",className:\"text-center\"},t(\"messages.no-mismatches\")));else c=o.a.createElement(\"tr\",null,o.a.createElement(\"td\",{colSpan:\"5\",width:\"100%\",className:\"text-center\"},o.a.createElement(\"div\",{className:\"show-loading\"})));return o.a.createElement(\"table\",{className:\"table table-sm table-hover table-striped table-bordered translation-stats table-translations\"},o.a.createElement(\"thead\",{className:\"thead-light\"},o.a.createElement(\"tr\",null,o.a.createElement(\"th\",{width:\"20%\",className:\"key\"},t(\"messages.key\")),o.a.createElement(\"th\",{width:\"40%\",colSpan:\"2\"},s),o.a.createElement(\"th\",{width:\"20%\"},u),o.a.createElement(\"th\",{width:\"20%\",className:\"group\"},t(\"messages.group\")))),o.a.createElement(\"tbody\",null,c))}}]),t}(),Wa=it(ve(),go())(Hr(Va)),Ka=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},qa=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var za=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"mismatches\"));return n.state=n.getState(),n.usesSettings=[Ua,_n],n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),qa(t,[{key:\"getState\",value:function(){return this.adjustState({error:null,isLoaded:Ma.isLoaded()&&wn.isLoaded(),isLoading:Ma.isLoading(),isStaleData:Ma.isStaleData()||wn.isStaleData(),translatingLocale:wn.translatingLocale(),primaryLocale:wn.primaryLocale(),userLocales:wn.userLocales(),mismatches:Ma.mismatches()})}},{key:\"reload\",value:function(){Ua.load()}},{key:\"render\",value:function(){var e=this.props.t;return this.noShow()?null:o.a.createElement(Io,Ka({headerChildren:e(\"messages.mismatches\"),maxHeight:\"300px\"},this.getDashboardProps()),o.a.createElement(Wa,this.state))}}]),t}();za.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var Ga=it(ve(),go())(za),Ya=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Xa=new(function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,\"globalSearchData\",{connectionName:\"default\",displayLocales:_n.defaultSettings.displayLocales,userLocales:_n.defaultSettings.userLocales,searchData:[]},{}));return e.connectionName=e.defaultSettings.connectionName,e.displayLocales=e.defaultSettings.displayLocales,e.userLocales=e.defaultSettings.userLocales,e.searchData=e.defaultSettings.searchData,e.searchText=null,e.isStaleData=!1,e.isLoaded=!0,e.isLoading=!1,e.isULoading=!1,e.unsubscribe=_n.subscribe(function(){if(function(){return!Ct.apply(void 0,arguments)}(wn.displayLocales(),wn.uiSettings.searchText())&&!_t(wn.primaryLocale())){var t=wn.displayLocales.$_array.join(\",\"),n=e.connectionName!==wn.connectionName(),r=wn.uiSettings.searchText.$_value||\"\",o=e.searchText!==r,a=e.displayLocales.join(\",\")!==t;if(r&&(!e.displayLocales||!e.userLocales||n||o||a))e.isStaleData||e.staleData();else if(e.isStaleData){e.isStaleData=!1;var i=e.reduxAction(e.getState());mt.dispatch(i)}}}),e.invalidateTranslations=sn.subscribe(\"invalidate.translations\",function(t){e.staleData()}),e}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,nn),Ya(t,[{key:\"serverCanLoad\",value:function(e){return!0}},{key:\"canAutoRefresh\",value:function(){return!1}},{key:\"serverLoad\",value:function(e){var t=this,n=_n.getState(),r=n.connectionName,o=n.displayLocales;if(e=e||wn.uiSettings.searchText()){var a=function(e,t,n){return{url:Tt(\"api/search\"),type:\"POST\",data:JSON.stringify({connectionName:e,displayLocales:t,searchText:n})}}(r,o,e);on.a.post(a.url,a.data).then(function(e){t.connectionName=e.data.connectionName,t.displayLocales=e.data.displayLocales,t.userLocales=e.data.userLocales,t.searchText=e.data.searchText,t.processServerUpdate(e.data),wn.uiSettings.searchText=t.searchText,wn.uiSettings.loadedSearchText=t.searchText,wn.save()})}else window.setTimeout(function(){t.connectionName=wn.connectionName(),t.displayLocales=wn.displayLocales(),t.userLocales=wn.userLocales(),t.searchText=e,t.processServerUpdate({searchText:t.searchText,loadedSearchText:t.searchText})},50)}},{key:\"updateServer\",value:function(e,t){throw\"globalSearchData has no update\"}}]),t}()),Qa=Xa.getBoxed(),Ja=Xa,Za=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var ei=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state=n.getState(),n.searchTextChanged=n.searchTextChanged.bind(n),n.showGroup=n.showGroup.bind(n),n.onKeyPress=n.onKeyPress.bind(n),n.usesSettings=[Ja,_n],n.setStateToSettings({searchText:function(e){return wn.uiSettings.searchText=e.searchText},\"\":wn.save}),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,bo),Za(t,[{key:\"getState\",value:function(){return this.adjustState({error:null,isLoaded:Qa.isLoaded()&&wn.isLoaded(),isLoading:Qa.isLoading(),isStaleData:Qa.isStaleData()||wn.isStaleData(),userLocales:wn.userLocales(),displayLocales:wn.displayLocales(),loadedSearchText:wn.uiSettings.loadedSearchText(),searchText:wn.uiSettings.searchText(),searchData:Qa.searchData()})}},{key:\"componentDidMount\",value:function(){bo.prototype.componentDidMount.call(this),this.props.onLoad&&this.props.onLoad(this.input),this.invalidateTranslations=sn.subscribe(\"invalidate.translations\",function(e){e&&Ja.staleData()})}},{key:\"componentWillUnmount\",value:function(){bo.prototype.componentWillUnmount.call(this),this.invalidateTranslations&&this.invalidateTranslations()}},{key:\"reload\",value:function(){Ja.load()}},{key:\"onKeyPress\",value:function(e){\"Enter\"===e.key&&Ja.load()}},{key:\"showGroup\",value:function(e,t){this.props.history.push(\"/\"),On.changeGroup(t),St.util.isFunction(this.props.onGroup)&&this.props.onGroup(e,t)}},{key:\"searchTextChanged\",value:function(e){var t=e.target.value||\"\";this.state_$.searchText=t,this.state_$.save(),wn.uiSettings.searchText=t,wn.save()}},{key:\"render\",value:function(){var e=this,t=this.props.t,n=this.state,r=n.error,a=n.loadedSearchText,i=n.searchText,s=n.isLoaded,u=n.isLoading,l=n.isStaleData,c=n.searchData,d=n.userLocales,f=void 0;if(r)f=o.a.createElement(\"h4\",null,\"Error: \",r.message);else if(u&&!s)f=o.a.createElement(\"div\",{className:\"text-center\"},o.a.createElement(\"div\",{className:\"show-loading\"}));else if(c&&c.length){var p=c.map(function(t,n){var r=t,a=r.locale,i=d.indexOf(a)>-1;return o.a.createElement(\"tr\",{key:n+\":\"+r.group+\".\"+r.key,id:r.key.replace(\".\",\"-\"),className:\"no-border-top\"},o.a.createElement(\"td\",null,o.a.createElement(Zn,{to:\"/\",onClick:function(t){return e.showGroup(t,r.group)}},r.group)),o.a.createElement(\"td\",null,r.key),o.a.createElement(\"td\",null,r.locale),o.a.createElement(\"td\",null,i?$a.transXEditLink(r.group,r.key,r.locale,r,!1):r.value))});f=o.a.createElement(\"table\",{key:1,className:\"table table-sm table-hover table-striped table-bordered table-translations\"+(this.state.isStaleData?\" stale-data\":\"\")},o.a.createElement(\"thead\",{className:\"thead-light\"},o.a.createElement(\"tr\",{key:\"heading1\"},o.a.createElement(\"th\",{colSpan:\"4\"},\"[\",c.length,\"]: \",\" \",o.a.createElement(\"code\",null,a),\" \")),o.a.createElement(\"tr\",{key:\"heading2\"},o.a.createElement(\"th\",{width:\"20%\"},t(\"messages.group\")),o.a.createElement(\"th\",{width:\"25%\"},t(\"messages.key\")),o.a.createElement(\"th\",{width:\" 5%\"},t(\"messages.locale\")),o.a.createElement(\"th\",{width:\"50%\"},t(\"messages.translation\")))),o.a.createElement(\"tbody\",null,p))}else(f=i&&!l?o.a.createElement(\"h4\",{className:\"text-center\"},t(\"messages.no-results\")):\"\")||(l=!1);return o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col col-12\"},o.a.createElement(\"div\",{className:\"input-group input-group-sm mb-3\"},o.a.createElement(\"div\",{className:\"input-group-prepend\"},o.a.createElement(\"button\",{type:\"button\",className:\"btn btn-outline-primary\",onClick:this.reload},t(\"messages.search\"))),o.a.createElement(\"input\",{ref:function(t){e.input=t},className:\"form-control form-control-sm border-primary\",value:i||\"\",onChange:this.searchTextChanged,onKeyPress:this.onKeyPress,type:\"search\",placeholder:t(\"messages.search-text-placeholder\")})),f))}}],[{key:\"takeFocus\",value:function(e){e&&window.setTimeout(function(){e.focus();var t=e.value;t&&e.setSelectionRange(0,t.length)},100)}}]),t}();ei.propTypes={onGroup:Z.a.func,onLoad:Z.a.func};var ti=it(ve(),go())(Hr(ei)),ni=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ri=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var oi=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"search\"));return n.state=n.getState(),n.usesSettings=[Ja,_n],n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),ri(t,[{key:\"getState\",value:function(){return this.adjustState({error:null,isLoaded:Qa.isLoaded()&&wn.isLoaded(),isLoading:Qa.isLoading(),isStaleData:Qa.isStaleData()||wn.isStaleData()})}},{key:\"reload\",value:function(){Ja.load()}},{key:\"render\",value:function(){if(this.noShow())return null;var e=this.props.t;return o.a.createElement(Io,ni({headerChildren:e(\"messages.search-translations\")},this.getDashboardProps()),o.a.createElement(ti,{onLoad:ti.takeFocus}))}}]),t}();oi.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var ai=it(ve(),go())(oi),ii=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var si=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.a.Component),ii(t,[{key:\"componentDidMount\",value:function(){this.$el=At()(this.el)}},{key:\"componentWillUnmount\",value:function(){}},{key:\"render\",value:function(){var e=this;return o.a.createElement(\"div\",{ref:function(t){return e.el=t}},o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-12 \"},o.a.createElement(\"label\",{id:\"show-matching-text-label\",className:\"regex-error hidden\"}))),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-12 \"},o.a.createElement(\"div\",{className:\"form-inline mb-3\"},o.a.createElement(\"div\",{className:\"input-group input-group-sm\"},o.a.createElement(\"input\",{className:\"form-control form-control-sm\",style:{width:\"200px\"},id:\"show-matching-text\",type:\"text\",placeholder:Dt.t(\"messages.show-matching-text\")}),o.a.createElement(\"div\",{className:\"input-group-append\"},o.a.createElement(\"button\",{type:\"button\",className:\"btn btn-outline-secondary\",id:\"show-matching-clear\"},\"×\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline ml-2\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-all\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-all\"}),Dt.t(\"messages.show-all\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-new\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-new\"}),Dt.t(\"messages.show-new\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-need-attention\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-need-attention\"}),Dt.t(\"messages.show-need-attention\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-nonempty\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-nonempty\"}),Dt.t(\"messages.show-nonempty\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-used\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-used\"}),Dt.t(\"messages.show-used\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-unpublished\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-unpublished\"}),Dt.t(\"messages.show-unpublished\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-empty\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-empty\"}),Dt.t(\"messages.show-empty\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-changed\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-changed\"}),Dt.t(\"messages.show-changed\"))),o.a.createElement(\"div\",{className:\"translation-filter form-control-sm form-check form-check-inline\"},o.a.createElement(\"label\",{className:\"form-check-label\"},o.a.createElement(\"input\",{id:\"show-deleted\",className:\"form-check-input\",type:\"radio\",name:\"show-options\",value:\"show-deleted\"}),Dt.t(\"messages.show-deleted\")))))))}}]),t}(),ui=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},li=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var ci=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"translations\",!0));return n.state=n.getState(),n.loadGroup=n.loadGroup.bind(n),n.handleImportReplace=n.handleImportReplace.bind(n),n.isDoneLoading=n.isDoneLoading.bind(n),n.usesSettings=[_n,On],n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),li(t,[{key:\"getState\",value:function(){var e=wn.isAdminEnabled(),t=wn.uiSettings.group();return this.adjustState({error:null,isLoaded:Cn.isLoaded()&&wn.isLoaded(),isLoading:Cn.isLoading(),isStaleData:Cn.isStaleData()||wn.isStaleData(),isAdminEnabled:e,primaryLocale:wn.primaryLocale(),showUsage:wn.showUsage(),translatingLocale:wn.translatingLocale(),showPublishButtons:wn.uiSettings.showPublishButtons(),collapsePublishButtons:wn.uiSettings.collapsePublishButtons(),userLocales:wn.userLocales(),groups:wn.groups(),group:t,translationsGroup:Cn.group(),displayLocales:Cn.displayLocales(),yandexKey:Cn.yandexKey(),translations:Cn.translations(),importReplace:wn.uiSettings.importReplace()||\"0\"},e?\"collapsePublishButtons\":null)}},{key:\"reload\",value:function(){On.update({isLoaded:!1}),On.load()}},{key:\"deleteTransFlag\",value:function(e,t,n,r,o){e.preventDefault(),e.stopPropagation(),on.a.post(r).then(function(e){On.changeTranslations(t,function(e){return e===n},function(e,t){t.is_deleted=o})})}},{key:\"loadGroup\",value:function(e){On.changeGroup(e.target.value)}},{key:\"handleImportReplace\",value:function(e){wn.uiSettings.importReplace=e.target.value,wn.save()}},{key:\"isDoneLoading\",value:function(){return this.state.isLoaded&&!this.state.isLoading}},{key:\"render\",value:function(){var e=this,t=this.props.t,n=this.state,r=n.error,a=n.isStaleData,i=n.isLoaded,s=n.isLoading,u=n.collapsePublishButtons,l=n.translationsGroup,c=n.showPublishButtons,d=n.importReplace,f=n.isAdminEnabled,p=n.groups,h=n.group,m=n.translations,g=(n.translatingLocale,n.primaryLocale),v=n.userLocales,b=n.displayLocales,y=n.showUsage,w=n.yandexKey;if(this.noShow())return null;var x=void 0,_=void 0;if(r)_=o.a.createElement(\"th\",{width:\"100%\"},\" \"),x=o.a.createElement(\"div\",null,\"Error: \",r.message);else if(i&&h&&h===l){if(h)!function(){if(\"JSON\"!==h){var n=b.indexOf(\"json\");-1!==n&&b.splice(n,1)}var r=b,a=[];for(var i in r)if(r.hasOwnProperty(i)){var s=r[i];a.push({value:s,text:s})}var u=b;_=[],f&&_.push(o.a.createElement(\"th\",{key:_.length,width:\"1%\"},o.a.createElement(\"a\",{href:\"#\",className:\"auto-delete-key\"},o.a.createElement(\"span\",{className:\"fa fa-trash-alt\"})),\" \",o.a.createElement(\"a\",{href:\"#\",className:\"auto-undelete-key\"},o.a.createElement(\"span\",{className:\"fa fa-thumbs-up\"}))));var l=u.length,c=void 0;c=l>3?25:3===l?28:42;var d=m,p=b,k=\",\"+v.join(\",\")+\",\",S=h,C=0,O=d.length;_.push(o.a.createElement(\"th\",{key:_.length,width:\"15%\"},t(\"messages.key\"),o.a.createElement(\"span\",{className:\"key-filter\",id:\"key-filter\"},O)));for(var T=p.length,P=0;P<T;P++){var I=p[P],D=\"json\"===I?t(\"messages.json-key\"):I,N=k.indexOf(\",\"+I+\",\")>-1;!u.indexOf(I)<0||(C<3?0===C?_.push(o.a.createElement(\"th\",{key:_.length,width:c+\"%\"},I,\" \",o.a.createElement(\"a\",{className:\"btn btn-sm btn-light btn-outline-secondary\",id:\"auto-fill\",role:\"button\",disabled:!N,\"data-disable-with\":t(\"messages.auto-fill-disabled\"),href:\"#\"},t(\"messages.auto-fill\")))):w&&N&&\"json\"!==I?_.push(o.a.createElement(\"th\",{key:_.length,width:c+\"%\"},I,\" \",o.a.createElement(\"a\",{key:1,className:\"btn btn-sm btn-light btn-outline-secondary auto-translate\",role:\"button\",\"data-trans\":C,\"data-locale\":I,disabled:!N,\"data-disable-with\":t(\"messages.auto-translate-disabled\"),href:\"#\"},t(\"messages.auto-translate\")),o.a.createElement(\"a\",{key:2,className:\"btn btn-sm btn-light btn-outline-secondary auto-prop-case ml-1\",role:\"button\",\"data-trans\":C,\"data-locale\":I,disabled:!N,\"data-disable-with\":t(\"messages.auto-prop-case-disabled\"),href:\"#\"},\"Ab Ab \",o.a.createElement(\"i\",{className:\"fa fa-share\"}),\" Ab ab\"))):_.push(o.a.createElement(\"th\",{key:_.length,width:c+\"%\"},D)):w&&N&&\"json\"!==I?_.push(o.a.createElement(\"th\",{key:_.length},I,o.a.createElement(\"a\",{key:1,className:\"btn btn-sm btn-light btn-outline-secondary auto-translate\",role:\"button\",\"data-trans\":C,\"data-locale\":I,\"data-disable-with\":t(\"messages.auto-translate-disabled\"),href:\"#\"},t(\"messages.auto-translate\")),o.a.createElement(\"a\",{key:2,className:\"btn btn-sm btn-light btn-outline-secondary auto-prop-case ml-1\",role:\"button\",\"data-trans\":C,\"data-locale\":I,\"data-disable-with\":t(\"messages.auto-prop-case-disabled\"),href:\"#\"},\"Ab Ab \",o.a.createElement(\"i\",{className:\"fa fa-share\"}),\" Ab ab\"))):_.push(o.a.createElement(\"th\",{key:_.length},D)),C++)}x=[];var A=function(n){if(!d.hasOwnProperty(n))return\"continue\";for(var r=d[n],a=[],i=!1,s=!1,u=!1,l=!1,c={},m={},v=!1,w=0;w<T;w++){var _=p[w];if(!(!b.indexOf(_)<0)&&(c[_]=!1,m[_]=!1,r.hasOwnProperty(_))){var C=r[_];C.is_deleted&&(i=!0),C.was_used&&(v=!0),\"\"!==C.value?(u=!0,0===C.status&&(C.value||\"\")===(C.saved_value||\"\")||(l=!0)):s=!0,0!==C.status&&(1===C.status||(C.value||\"\")!==(C.saved_value||\"\")?c[_]=!0:m[_]=\"\"!==C.value&&2===C.status)}}if(f){var O=Tt(\"api/undelete\",encodeURI(S),encodeURI(n)),P=Tt(\"api/delete\",encodeURI(S),encodeURI(n));a.push(o.a.createElement(\"td\",{key:a.length+S+\".\"+n+\":x\"},o.a.createElement(\"a\",{key:\"1\",href:\"#\",className:\"undelete-key\"+(i?\"\":\" hidden\"),onClick:function(t){return e.deleteTransFlag(t,S,n,O+Tt(),0)}},o.a.createElement(\"span\",{className:\"fa fa-thumbs-up\"})),o.a.createElement(\"a\",{key:\"2\",href:\"#\",className:\"delete-key\"+(i?\" hidden\":\"\"),onClick:function(t){return e.deleteTransFlag(t,S,n,P+Tt(),1)}},o.a.createElement(\"span\",{className:\"fa fa-trash-alt\"}))))}var I=!0,D=!1,N=!1,A=void 0;if(y){I=!1;for(var j=0;j<T;j++){var L=p[j];if(null!=(A=r.hasOwnProperty(L)?r[L]:null)&&A.was_used){I=!0;break}}}for(var R in p)if(p.hasOwnProperty(R)){var M=p[R];if(null!=(A=r.hasOwnProperty(M)?r[M]:null)&&A.has_source){D=!0,N=A.is_auto_added;break}}a.push(o.a.createElement(\"td\",{key:a.length+S+\".\"+n+\":\",className:\"key\"+(I?\" used-key\":\" unused-key\")},n,D&&o.a.createElement(ma,{asLink:!0,dataUrl:function(e,t,n){return{url:Tt(\"api/key-references\",e,n?void 0:t),type:\"POST\",data:JSON.stringify({connectionName:n||\"\",key:t})}}(h,n,E),className:\"float-right\",title:t(\"messages.show-source-refs\"),onSuccess:function(e){var n=e.data.key_name,r=o.a.createElement(\"span\",null,t(\"messages.source-refs-header\"),o.a.createElement(\"code\",null,\" '\",n,\"'\")),a=e.data.result.join(\"\\n\"),i={modalProps:{modalTitle:r,modalType:\"modal\",modalDialogType:\"modal-dialog modal-lg modal-dialog-centered\",backdrop:!0},modalBody:o.a.createElement(\"pre\",null,a)};Fo.showModal(i)}},o.a.createElement(\"span\",{className:\"fa \"+(N?\"fa-question-circle\":\"fa-info-circle\")}))));for(var U=0;U<T;U++){var B=p[U],H=k.indexOf(\",\"+B+\",\")>=0;!b.indexOf(B)<0||(A=r.hasOwnProperty(B)?r[B]:null,a.push(o.a.createElement(\"td\",{key:a.length+S+\".\"+n+\":\"+B,className:(B!==g?\"auto-translatable-\"+B:\"auto-fillable\")+(c[B]?\" has-unpublished-translation\":\"\")+(m[B]?\" has-cached-translation\":\"\")},H?$a.transXEditLink(S,n,B,A||null,!0):A?A.value:\"\")))}x.push(o.a.createElement(\"tr\",{key:x.length,id:n.replace(\".\",\"-\"),className:(i?\" deleted-translation\":\"\")+(s?\" has-empty-translation\":\"\")+(u?\" has-nonempty-translation\":\"\")+(l?\" has-changed-translation\":\"\")+(v?\" has-used-translation\":\"\")},a))};for(var j in d)A(j)}();else if(!f)return}else _=o.a.createElement(\"th\",{width:\"100%\"},\" \"),x=h?o.a.createElement(\"tr\",null,o.a.createElement(\"td\",{width:\"100%\",className:\"text-center\"},o.a.createElement(\"div\",{className:\"show-loading\"}))):o.a.createElement(\"tr\",null,o.a.createElement(\"td\",{width:\"100%\",className:\"text-center\"},o.a.createElement(\"div\",null,t(\"messages.choose-group-text\"))));var E=_n.getState().connectionName,k=function(e){return function(e,t){return{url:Tt(\"api/zipped-translations\",e),type:\"GET\"}}(e||\"*\")},S=function(e){return function(e,t){return{url:Tt(\"api/publish-group\",e),type:\"POST\",data:JSON.stringify({connectionName:t})}}(e||\"*\",E)},C=function(e){return function(e,t,n){return{url:Tt(\"api/import-group\",e),type:\"POST\",data:JSON.stringify({connectionName:n,replace:t})}}(e||\"*\",d,E)},O=[],T=[],P=0==d?\"text-safe\":1==d?\"text-attention\":\"text-caution\",I=0==d?\"border-light btn-success\":1==d?\"border-light btn-info\":\"border-light btn-warning\",D=0==d?\"confirmImportAllGroups\":1==d?\"confirmImportAllGroupsReplace\":\"confirmImportAllGroupsDelete\",N=0==d?\"confirmImportGroup\":1==d?\"confirmImportGroupReplace\":\"confirmImportGroupDelete\",A=0==d?\"\":1==d?\"-replace\":\"-delete\";return f&&c&&(u||O.push(o.a.createElement(\"div\",{key:O.length,className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-6\"},o.a.createElement(\"div\",{className:\"input-group input-group-sm mb-2\",onClick:function(e){return e.stopPropagation()}},o.a.createElement(\"select\",{name:\"replace\",className:\"form-control \"+P+(!a||s?\" bg-primary\":\" bg-secondary\"),value:d||\"0\",onChange:this.handleImportReplace},o.a.createElement(\"option\",{value:\"0\"},t(\"messages.import-add\")),o.a.createElement(\"option\",{value:\"1\"},t(\"messages.import-replace\")),o.a.createElement(\"option\",{value:\"2\"},t(\"messages.import-fresh\"))))),o.a.createElement(\"div\",{className:\"col col-sm-6\"},o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-5\"},o.a.createElement(\"div\",{className:\"input-group input-group-sm\",onClick:function(e){return e.stopPropagation()}},o.a.createElement(ma,{className:\"btn border-light btn-sm btn-warning ml-3\",dataUrl:S(),invalidateGroup:\"*\",confirmationKey:\"confirmPublishAllGroups\",disableWith:t(\"messages.publishing\")},t(\"messages.publish-all-groups\")),o.a.createElement(ma,{className:\"btn border-light btn-sm btn-primary ml-1\",plainLink:!0,dataUrl:k()},t(\"messages.zip-all\")))),o.a.createElement(\"div\",{className:\"col col-sm-3\"},o.a.createElement(\"div\",{className:\"row justify-content-md-center\"},o.a.createElement(\"div\",{className:\"col-md-auto\"},o.a.createElement(ma,{className:\"mx-auto btn btn-sm \"+I,dataUrl:C(),reloadGroups:!0,confirmationKey:D,disableWith:t(\"messages.loading\"),onSuccess:function(e){Fo.messageBox(o.a.createElement(\"div\",{dangerouslySetInnerHTML:{__html:t(\"messages.api-import-groups-done-title\")}}),o.a.createElement(\"div\",{dangerouslySetInnerHTML:{__html:t(\"messages.api-import-groups-done-message\").replace(\":count\",e.data.counter)}}))}},t(\"messages.import-all-groups\"+A))))),o.a.createElement(\"div\",{className:\"col col-sm-4\"},o.a.createElement(ma,{className:\"float-right btn border-light btn-sm btn-danger ml-1\",dataUrl:function(e){return{url:Tt(\"api/find-references\"),type:\"POST\",data:JSON.stringify({connectionName:e})}}(E),reloadGroups:!0,confirmationKey:\"confirmAddReferences\",disableWith:t(\"messages.searching\"),onSuccess:function(e){Fo.messageBox(o.a.createElement(\"div\",{dangerouslySetInnerHTML:{__html:t(\"messages.api-add-references-done-title\")}}),o.a.createElement(\"div\",{dangerouslySetInnerHTML:{__html:t(\"messages.api-add-references-done-message\").replace(\":count\",e.data.counter)}}))}},t(\"messages.find-in-files\")))))))),T.push(o.a.createElement(\"div\",{key:\"select group\"+O.length,className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-6\"},o.a.createElement(\"div\",{className:\"input-group input-group-sm\",onClick:function(e){return e.stopPropagation()}},o.a.createElement(\"select\",{className:\"form-control text-white\"+(!a||s?\" bg-primary\":\" bg-secondary\"),value:h||\"\",onChange:this.loadGroup},o.a.createElement(\"option\",{key:\"\",value:\"\"},t(\"messages.choose-group\")),p.map(function(e){return o.a.createElement(\"option\",{key:e,value:e},e)})))),o.a.createElement(\"div\",{className:\"col col-sm-6\"},!!h&&f&&o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col col-sm-5\"},o.a.createElement(ma,{className:\"btn border-light btn-sm btn-info ml-3\",dataUrl:S(h),invalidateGroup:h,confirmationKey:\"confirmPublishGroup\",disableWith:t(\"messages.publishing\")},t(\"messages.publish-group\")),o.a.createElement(ma,{className:\"btn border-light btn-sm btn-primary ml-1\",plainLink:!0,dataUrl:k(h)},t(\"messages.zip\"))),o.a.createElement(\"div\",{className:\"col col-sm-3\"},o.a.createElement(\"div\",{className:\"row justify-content-md-center\"},o.a.createElement(\"div\",{className:\"col-md-auto\"},o.a.createElement(ma,{className:\"mx-auto btn btn-sm \"+I,dataUrl:C(h),invalidateGroup:h,confirmationKey:N,disableWith:t(\"messages.loading\"),onSuccess:function(e){Fo.messageBox(o.a.createElement(\"div\",{dangerouslySetInnerHTML:{__html:t(\"messages.api-import-group-done-title\").replace(\":group\",h)}}),o.a.createElement(\"div\",{dangerouslySetInnerHTML:{__html:t(\"messages.api-import-group-done-message\").replace(\":group\",h).replace(\":count\",e.data.counter)}}))}},t(\"messages.import-group\"+A))))),o.a.createElement(\"div\",{className:\"col col-sm-4\"},o.a.createElement(\"div\",{className:\"float-right\"},o.a.createElement(ma,{className:\"btn border-light btn-sm btn-danger ml-1\",dataUrl:function(e){return function(e,t){return{url:Tt(\"api/delete-group\",e),type:\"POST\",data:JSON.stringify({connectionName:t})}}(e,E)}(h),reloadGroups:!0,confirmationKey:\"confirmDeleteGroup\",disableWith:t(\"messages.deleting\")},t(\"messages.delete\")))))))),o.a.createElement(Io,ui({headerChildren:o.a.createElement(\"div\",null,O,T),extrasContent:f?o.a.createElement(\"i\",{className:\"fas fa fa-minus-square\",title:t(\"messages.hide-actions\")}):null,extrasAltContent:f?o.a.createElement(\"i\",{className:\"fas fa fa-cogs\",title:t(\"messages.show-actions\")}):null},this.getDashboardProps()),o.a.createElement(si,null),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-12 \"},o.a.createElement(\"table\",{id:\"translations\",className:\"table table-sm table-hover table-striped table-bordered table-translations\"},o.a.createElement(\"thead\",{className:\"thead-light\"},o.a.createElement(\"tr\",{key:\"heading\"},_)),o.a.createElement(\"tbody\",null,x)))))}}]),t}();ci.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var di=it(ve(),go())(ci),fi=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},pi=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var hi=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"suffixedKeyOps\",!0));return n.handleKeysChange=n.handleKeysChange.bind(n),n.handleSuffixesChange=n.handleSuffixesChange.bind(n),n.addStandardSuffixes=n.addStandardSuffixes.bind(n),n.clearSuffixes=n.clearSuffixes.bind(n),n.clearKeys=n.clearKeys.bind(n),n.searchDialog=n.searchDialog.bind(n),n.state=n.getState(),n.onReload=null,n.setStateToSettings({keys:function(e){return wn.uiSettings.suffixedKeyOps.keys=e.keys},suffixes:function(e){return wn.uiSettings.suffixedKeyOps.suffixes=e.suffixes},\"\":wn.save}),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),pi(t,[{key:\"getState\",value:function(){return this.adjustState({error:null,isLoaded:wn.isLoaded(),isLoading:wn.isLoading(),isStaleData:wn.isStaleData(),group:wn.uiSettings.group(),keys:wn.uiSettings.suffixedKeyOps.keys()||\"\",suffixes:wn.uiSettings.suffixedKeyOps.suffixes()||\"\"})}},{key:\"reload\",value:function(){}},{key:\"handleKeysChange\",value:function(e){this.state_$.keys=e.target.value,this.state_$.save()}},{key:\"handleSuffixesChange\",value:function(e){this.state_$.suffixes=e.target.value,this.state_$.save()}},{key:\"addStandardSuffixes\",value:function(e){e.preventDefault(),this.state_$.suffixes=wn.uiSettings.defaultSuffixes(),this.state_$.save()}},{key:\"clearSuffixes\",value:function(e){e.preventDefault(),this.state_$.suffixes=\"\",this.state_$.save()}},{key:\"clearKeys\",value:function(e){e.preventDefault(),this.state_$.keys=\"\",this.state_$.save()}},{key:\"searchDialog\",value:function(e){var t=this;if(e.preventDefault(),e.stopPropagation(),!Fo.inButtonOp){var n=function(e,t){console.debug(\"Search closed\",t),Fo.inButtonOp=!1}.bind(this),r=function(e,t){console.debug(\"Search closed by group\",t),Fo.hideModal(),Fo.inButtonOp=!1}.bind(this);Fo.showModal({onClose:n,onShown:function(){ti.takeFocus(t.searchInput)},modalProps:{modalTitle:this.props.t(\"messages.search-translations\"),modalType:\"\",modalDialogType:\"modal-dialog modal-lg\",footer:null,backdrop:!0},modalBody:o.a.createElement(\"div\",{style:{background:\"solid #fff\"}},o.a.createElement(ti,{onLoad:function(e){t.searchInput=e},onGroup:r}))})}}},{key:\"getConfirmationExtra\",value:function(){var e=this.state,t=e.keys.trim().split(\"\\n\").filter(function(e){return!!e.trim()}),n=e.suffixes.trim().split(\"\\n\").filter(function(e){return!!e.trim()}),r=void 0,a=t.length;if(a>0){var i=a>4?3:4===a?2:3===a?3:2===a?2:1,s=\"col col-sm-\"+12/i,u=[];t.forEach(function(e){var t=[];0===n.length?t.push(e):n.forEach(function(n){t.push(e+n)}),u.push(t)});var l=0,c=0;for(r=[];l<u.length;){for(var d=[],f=0;f<i;f++){var p=l+f;if(p<u.length){var h=u[p];d.push(o.a.createElement(\"div\",{key:l+\".\"+c+\".\"+p,className:s},h[c]))}}r.push(o.a.createElement(\"div\",{key:r.length,className:\"row\"},d)),++c>=n.length&&(c=0,(l+=i)<u.length&&r.push(o.a.createElement(\"hr\",{key:r.length})))}return r}}},{key:\"render\",value:function(){var e=this.props.t,t=this.state,n=t.error,r=t.isLoaded,a=t.group,i=t.keys,s=t.suffixes;if(this.noShow())return null;var u=void 0;if(n)u=o.a.createElement(\"div\",null,\"Error: \",n.message);else if(r){var l=function(e,t,n,r){return{url:Tt(\"api/add-suffixed-keys\",e),type:\"POST\",data:JSON.stringify({connectionName:r,keys:t,suffixes:n})}}(a,this.state.keys,this.state.suffixes,wn.connectionName()),c=function(e,t,n,r){return{url:Tt(\"api/delete-suffixed-keys\",e),type:\"POST\",data:JSON.stringify({connectionName:r,keys:t,suffixes:n})}}(a,this.state.keys,this.state.suffixes,wn.connectionName()),d=i.trim()?\"\":\"disabled \",f=s.trim()?\"\":\"disabled \",p=this.getConfirmationExtra();u=o.a.createElement(\"div\",null,o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-6\"},o.a.createElement(\"label\",null,e(\"messages.keys\"),\":\"),o.a.createElement(\"textarea\",{value:i,id:\"keyop-keys\",className:\"form-control\",rows:\"4\",style:{resize:\"vertical\"},placeholder:e(\"messages.addkeys-placeholder\"),onChange:this.handleKeysChange}),o.a.createElement(\"div\",{style:{minHeight:\"10px\"}}),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-8\"},o.a.createElement(ma,{className:d+\" btn btn-sm btn-primary mr-2\",disabled:!!d,dataUrl:l,confirmationKey:\"confirmAddSuffixedKeys\",invalidateGroup:a,disableWith:e(\"messages.busy-processing\"),confirmationBody:function(e){return o.a.createElement(\"div\",null,o.a.createElement(\"p\",null,e),p)}},e(\"messages.addkeys\")),o.a.createElement(\"button\",{type:\"button\",className:d+\"btn btn-sm btn-outline-secondary\",onClick:d?null:this.clearKeys},e(\"messages.clearkeys\"))),o.a.createElement(\"div\",{className:\"col-sm-4\"},o.a.createElement(\"span\",{style:{float:\"right\",display:\"inline\"}},o.a.createElement(ma,{className:d+\"btn btn-sm btn-danger\",disabled:!!d,dataUrl:c,confirmationKey:\"confirmDeleteSuffixedKeys\",invalidateGroup:a,disableWith:e(\"messages.busy-processing\"),confirmationBody:function(e){return o.a.createElement(\"div\",null,o.a.createElement(\"p\",null,e),p)}},e(\"messages.deletekeys\")))))),o.a.createElement(\"div\",{className:\"col-sm-6\"},o.a.createElement(\"label\",null,e(\"messages.suffixes\"),\":\"),o.a.createElement(\"textarea\",{value:s,id:\"keyop-suffixes\",className:\"form-control\",rows:\"4\",style:{resize:\"vertical\"},placeholder:e(\"messages.addsuffixes-placeholder\"),onChange:this.handleSuffixesChange}),o.a.createElement(\"div\",{style:{minHeight:\"10px\"}}),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-8\"},o.a.createElement(\"button\",{type:\"button\",className:\"btn btn-sm btn-outline-secondary mr-2\",onClick:this.addStandardSuffixes},e(\"messages.addsuffixes\")),o.a.createElement(\"button\",{type:\"button\",className:f+\"btn btn-sm btn-outline-secondary\",onClick:f?null:this.clearSuffixes},e(\"messages.clearsuffixes\"))),o.a.createElement(\"div\",{className:\"col-sm-4\"},o.a.createElement(\"span\",{style:{float:\"right\",display:\"inline\"}},o.a.createElement(\"button\",{type:\"button\",className:\"btn btn-sm btn-outline-primary\",onClick:this.searchDialog},e(\"messages.search\"))))))))}else u=o.a.createElement(\"tr\",null,o.a.createElement(\"div\",{className:\"text-center mx-auto\"},o.a.createElement(\"div\",{className:\"show-loading\"})));return o.a.createElement(Io,fi({headerChildren:e(\"messages.suffixed-keyops\")},this.getDashboardProps()),u)}}]),t}();hi.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var mi=it(ve(),go())(hi),gi=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},vi=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var bi=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,\"yandex\",!0));return n.handlePrimaryTextChange=n.handlePrimaryTextChange.bind(n),n.handleTranslatingTextChange=n.handleTranslatingTextChange.bind(n),n.state=n.getState(),n.onReload=null,n.setStateToSettings({primaryLocale:null,translatingLocale:null,yandexPrimaryText:function(e){return wn.uiSettings.yandexText[e.primaryLocale]=e.yandexPrimaryText},yandexTranslatingText:function(e){return wn.uiSettings.yandexText[e.translatingLocale]=e.yandexTranslatingText},\"\":wn.save}),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Ko),vi(t,[{key:\"getState\",value:function(){var e=wn.translatingLocale(),t=wn.primaryLocale(),n=wn.uiSettings.yandexText;return this.adjustState({error:null,isLoaded:wn.isLoaded(),isLoading:wn.isLoading(),isStaleData:wn.isStaleData()||wn.isStaleData(),yandexKey:wn.yandexKey(),primaryLocale:t,translatingLocale:e,yandexPrimaryText:n[t]()||\"\",yandexTranslatingText:n[e]()||\"\"})}},{key:\"reload\",value:function(){}},{key:\"handlePrimaryTextChange\",value:function(e){this.state_$.yandexPrimaryText=e.target.value,this.state_$.save()}},{key:\"handleTranslatingTextChange\",value:function(e){this.state_$.yandexTranslatingText=e.target.value,this.state_$.save()}},{key:\"render\",value:function(){var e=this.props.t,t=this.state,n=t.error,r=t.isLoaded,a=t.yandexKey,i=t.yandexPrimaryText,s=t.yandexTranslatingText,u=t.primaryLocale,l=t.translatingLocale;if(this.noShow()||!a)return null;var c=void 0;return c=n?o.a.createElement(\"div\",null,\"Error: \",n.message):r?o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"div\",{className:\"col-sm-6\"},o.a.createElement(\"textarea\",{value:i,id:\"primary-text\",className:\"form-control\",rows:\"3\",name:\"keys\",style:{resize:\"vertical\"},placeholder:u,onChange:this.handlePrimaryTextChange}),o.a.createElement(\"div\",{style:{minHeight:\"10px\"}}),o.a.createElement(\"span\",{dangerouslySetInnerHTML:{__html:e(\"messages.powered-by-yandex\")}}),o.a.createElement(\"span\",{style:{float:\"right\",display:\"inline\"}},o.a.createElement(\"button\",{id:\"translate-primary-current\",type:\"button\",className:\"btn btn-sm btn-outline-secondary\"},u,\" \",o.a.createElement(\"i\",{className:\"fa fa-share\"}),\" \",l))),o.a.createElement(\"div\",{className:\"col-sm-6\"},o.a.createElement(\"textarea\",{value:s,id:\"current-text\",className:\"form-control\",rows:\"3\",name:\"keys\",style:{resize:\"vertical\"},placeholder:l,onChange:this.handleTranslatingTextChange}),o.a.createElement(\"div\",{style:{minHeight:\"10px\"}}),o.a.createElement(\"button\",{id:\"translate-current-primary\",type:\"button\",className:\"btn btn-sm btn-outline-secondary\"},u,\" \",o.a.createElement(\"i\",{className:\"fa fa-reply\"}),\" \",l),o.a.createElement(\"span\",{style:{float:\"right\",display:\"inline\"},dangerouslySetInnerHTML:{__html:e(\"messages.powered-by-yandex\")}}))):o.a.createElement(\"tr\",null,o.a.createElement(\"div\",{className:\"text-center mx-auto\"},o.a.createElement(\"div\",{className:\"show-loading\"}))),o.a.createElement(Io,gi({headerChildren:e(\"messages.translation-ops\")},this.getDashboardProps()),c)}}]),t}();bi.propTypes={routeSettings:Z.a.string,showDashboard:Z.a.bool,noHide:Z.a.bool};var yi=it(ve(),go())(bi),wi=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var xi=n(14).util,_i=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleClose=n.handleClose.bind(n),n.onHidden=n.onHidden.bind(n),n.onHide=n.onHide.bind(n),n.onShow=n.onShow.bind(n),n.onShown=n.onShown.bind(n),n.isHidden=!0,n.isShown=!1,n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,bo),wi(t,[{key:\"componentDidMount\",value:function(){this.attachModal()}},{key:\"attachModal\",value:function(){this.$el=At()(this.el),this.$el.on(\"hidden.bs.modal\",this.onHidden),this.$el.on(\"hide.bs.modal\",this.onHide),this.$el.on(\"show.bs.modal\",this.onShow),this.$el.on(\"shown.bs.modal\",this.onShown)}},{key:\"componentWillUnmount\",value:function(){this.detachModal()}},{key:\"detachModal\",value:function(){this.$el.modal(\"dispose\")}},{key:\"onHidden\",value:function(){this.detachModal(),this.isHidden=!0,xi.isFunction(this.props.onHidden)&&this.props.onHidden()}},{key:\"onHide\",value:function(){xi.isFunction(this.props.onHide)&&this.props.onHide()}},{key:\"onShow\",value:function(){xi.isFunction(this.props.onShow)&&this.props.onShow()}},{key:\"onShown\",value:function(){this.isShown=!0,xi.isFunction(this.props.onShown)&&this.props.onShown()}},{key:\"componentDidUpdate\",value:function(){if(this.isShown&&this.props.hideModal&&this.handleClose(),this.isHidden&&this.props.showModal){this.detachModal(),this.attachModal(),this.isHidden=!1;var e={backdrop:null===this.props.backdrop||void 0===this.props.backdrop||\"static\"===this.props.backdrop?\"static\":this.props.backdrop,keyboard:null===this.props.keyboard||void 0===this.props.keyboard||!!this.props.keyboard,focus:null===this.props.focus||void 0===this.props.focus||!!this.props.focus};this.$el.modal(e)}}},{key:\"handleClose\",value:function(e){e&&(e.preventDefault(),e.stopPropagation());var t=this.props.onClose,n=!0;xi.isFunction(t)&&(n=t(e,!1)),(void 0===n||n)&&(this.isShown=!1,this.$el.modal(\"hide\"))}},{key:\"render\",value:function(){var e=this;this.props.t;return o.a.createElement(\"div\",{ref:function(t){return e.el=t},className:this.props.modalType||\"modal fade\",tabIndex:\"-1\",role:\"dialog\",\"aria-labelledby\":\"modalTitle\",\"aria-hidden\":\"true\"},o.a.createElement(\"div\",{className:this.props.modalDialogType||\"modal-dialog modal-dialog-centered\",role:\"document\"},o.a.createElement(\"div\",{className:\"modal-content\"},o.a.createElement(\"div\",{className:\"modal-header \"+this.props.headerType},o.a.createElement(\"h5\",{className:\"modal-title\",id:\"modalTitle\"},this.props.modalTitle||\"Missing Title\"),o.a.createElement(\"button\",{type:\"button\",className:\"close\",onClick:this.handleClose},o.a.createElement(\"span\",{\"aria-hidden\":\"true\"},\"×\"))),o.a.createElement(\"div\",{className:\"modal-body\"},this.props.children),this.props.footer)))}}]),t}();_i.propTypes={onHidden:Z.a.func,onHide:Z.a.func,onShow:Z.a.func,onShown:Z.a.func,onClose:Z.a.func,showModal:Z.a.bool,hideModal:Z.a.bool,modalTitle:Z.a.any,modalType:Z.a.string,modalDialogType:Z.a.string,headerType:Z.a.string,backdrop:Z.a.any,footer:Z.a.node};var Ei=it(ve(),go())(_i),ki=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Si=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var Ci={summary:ja,mismatches:Ga,userAdmin:wa,translationSettings:Yo,appSettings:ea,search:ai,translations:di,groups:ka,yandex:yi,suffixedKeyOps:mi},Oi=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state=n.getState(),n.Home=n.Home.bind(n),n.Settings=n.Settings.bind(n),n.Topics=n.Topics.bind(n),n.Search=n.Search.bind(n),n.UserAdmin=n.UserAdmin.bind(n),n.GroupAdmin=n.GroupAdmin.bind(n),n.loadGroup=n.loadGroup.bind(n),n.toggleDashboard=n.toggleDashboard.bind(n),n.dashboardLinks=n.dashboardLinks.bind(n),n.dashboardComponents=n.dashboardComponents.bind(n),n.collectDashboards=n.collectDashboards.bind(n),n.sideMenuClick=n.sideMenuClick.bind(n),n.Yandex=n.Yandex.bind(n),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,bo),Si(t,[{key:\"componentDidMount\",value:function(){var e=this;this.context.router;this.unsubscribe=mt.subscribe(function(){e.setState(e.getState())})}},{key:\"componentWillUnmount\",value:function(){this.unsubscribe()}},{key:\"getState\",value:function(){return{loggedIn:!0,isAdminEnabled:wn.isAdminEnabled(),yandexKey:wn.yandexKey(),groups:wn.groups(),group:Cn.group(),modalBody:Fo.getState().modalBody,modalProps:Fo.getState().modalProps,showModal:Fo.getState().showModal,hideModal:Fo.getState().hideModal}}},{key:\"toggleDashboard\",value:function(e,t){e.preventDefault(),wn.uiSettings.$_path(t,kt.transform.toBooleanNot),wn.save()}},{key:\"sideMenuClick\",value:function(e){e.preventDefault();var t=$(e.target).children(\"a:first-child\").attr(\"href\");if(t&&\"#\"!==t){var n=this.props.history.createHref({path:\"/\",search:\"\",hash:\"\"}),r=t.substr(n.length-1);this.props.history.push(r)}}},{key:\"nullIfEmpty\",value:function(e){return e&&0!==e.length?e:null}},{key:\"collectDashboards\",value:function(e,t){var n=_n.getRouteDashboard(e);return n?n.map(function(e,n){return t(e,n)}).filter(function(e){return e}):null}},{key:\"dashboardLinks\",value:function(e){var t=this;e=_n.dashboardRoute(e);_n.getRouteSettingPrefix(e);return this.collectDashboards(e,function(n,r){var a=n.showState,i=n.isDisabled,s=i&&(!xt(i)||i()),u=n.title;return o.a.createElement(\"li\",{key:e+\".\"+r},o.a.createElement(br,{to:\"#\",className:\"menu-checked\"+(s?\" disabled\":\"\")+(!s&&wn.uiSettings.$_path(a)?\" activeSidebar item-checked\":\"\"),onClick:function(e){return!s&&t.toggleDashboard(e,a)},\"aria-hidden\":\"true\"},t.props.t(u)))})}},{key:\"dashboardComponents\",value:function(e){e=_n.dashboardRoute(e);var t=_n.getRouteSettingPrefix(e)||\"\";return this.collectDashboards(e,function(n,r){var a=Ci[n.dashboardName],i=r;return o.a.createElement(a,{key:e+\".\"+i,routeSettings:t})})}},{key:\"loadGroup\",value:function(e){On.changeGroup(e)}},{key:\"Home\",value:function(e){var t=e.match;return o.a.createElement(\"div\",null,this.dashboardComponents(_n.getRouteSettingPrefix(t)),o.a.createElement(di,{noHide:!0}))}},{key:\"Search\",value:function(e){var t=e.match;return o.a.createElement(\"div\",null,this.dashboardComponents(_n.getRouteSettingPrefix(t)),o.a.createElement(ai,{noHide:!0}))}},{key:\"Yandex\",value:function(e){var t=e.match;return o.a.createElement(\"div\",null,this.dashboardComponents(_n.getRouteSettingPrefix(t)),o.a.createElement(yi,{noHide:!0}))}},{key:\"Settings\",value:function(e){var t=e.match;return o.a.createElement(\"div\",null,this.dashboardComponents(_n.getRouteSettingPrefix(t)),o.a.createElement(ra,{noHide:!0}))}},{key:\"UserAdmin\",value:function(e){var t=e.match;return o.a.createElement(\"div\",null,this.dashboardComponents(_n.getRouteSettingPrefix(t)),o.a.createElement(wa,{noHide:!0}))}},{key:\"GroupAdmin\",value:function(e){var t=e.match;return o.a.createElement(\"div\",null,this.dashboardComponents(_n.getRouteSettingPrefix(t)),o.a.createElement(ka,{noHide:!0}))}},{key:\"Topics\",value:function(e){var n=e.match;return o.a.createElement(\"div\",null,this.dashboardComponents(_n.getRouteSettingPrefix(n)),o.a.createElement(\"h2\",null,\"Topics\"),o.a.createElement(hr,{path:n.url+\"/:topicId\",component:t.Topic}),o.a.createElement(hr,{exact:!0,path:n.url,render:function(){return o.a.createElement(\"h3\",null,\"Please select a topic.\")}}))}},{key:\"render\",value:function(){var e=this,t=this.props,n=t.t,r=(t.i18n,t.match,this.state),a=r.groups,i=r.isAdminEnabled,s=r.yandexKey,u=r.group,l=(r.showSummaryDashboard,r.showMismatchDashboard,[]);l.push(o.a.createElement(\"li\",{key:\"::new::\"},o.a.createElement(br,{to:\"#\",className:\"disabled menu-checked menu-action-item\",\"aria-hidden\":\"true\"},n(\"messages.manage-groups\")))),l.push(o.a.createElement(\"li\",{key:\"::new-sep::\"},o.a.createElement(br,{to:\"#\",className:\"menu-checked separator\",\"aria-hidden\":\"true\"})));for(var c=function(t){var n=a[t];l.push(o.a.createElement(\"li\",{key:t+n},o.a.createElement(br,{to:\"/\",\"aria-hidden\":\"true\",className:\"menu-checked\"+(n===u?\" activeSidebar item-checked\":\"\"),onClick:function(){e.loadGroup(n)}},n)))},d=0;d<a.length;d++)c(d);return o.a.createElement(\"div\",{className:\"translation-manager\"},o.a.createElement(\"div\",{className:\"sidebararound\"},o.a.createElement(\"div\",{className:\"sidebar list-group\"},o.a.createElement(\"ul\",null,o.a.createElement(\"li\",{onClick:this.sideMenuClick},o.a.createElement(br,{exact:!0,to:\"/\",activeClassName:\"activeSidebar\",className:\"fa fa-bars fa-2x\"}),\"Main\"),o.a.createElement(\"li\",{onClick:this.sideMenuClick},o.a.createElement(br,{to:\"/search\",className:\"fa fa-question-circle fa-2x\",\"aria-hidden\":\"true\",activeClassName:\"activeSidebar\"}),\"Search\"),i&&o.a.createElement(\"li\",{onClick:this.sideMenuClick},o.a.createElement(br,{exact:!0,to:\"/users\",activeClassName:\"activeSidebar\",className:\"fa fa-users fa-2x\"}),\"User Admin\"),o.a.createElement(\"li\",{onClick:this.sideMenuClick},o.a.createElement(br,{exact:!0,to:\"/\",className:\"fa fa-bars fa-2x\"}),\"Groups\",o.a.createElement(\"ul\",{className:\"SubMenu\"},l)),o.a.createElement(\"li\",{onClick:this.sideMenuClick},o.a.createElement(br,{to:\"#\",className:\"fa fa-newspaper fa-2x\"}),n(\"messages.dashboards\"),o.a.createElement(Rr,null,o.a.createElement(hr,{exact:!0,path:\"/\"},o.a.createElement(\"ul\",{className:\"SubMenu\"},this.dashboardLinks(\"\"))),i?o.a.createElement(hr,{path:\"/users\"},o.a.createElement(\"ul\",{className:\"SubMenu\"},this.dashboardLinks(\"users\"))):null,i?o.a.createElement(hr,{path:\"/groups\"},o.a.createElement(\"ul\",{className:\"SubMenu\"},this.dashboardLinks(\"groups\"))):null,o.a.createElement(hr,{path:\"/topics\"},o.a.createElement(\"ul\",{className:\"SubMenu\"},this.dashboardLinks(\"topics\"))),o.a.createElement(hr,{path:\"/settings\"},o.a.createElement(\"ul\",{className:\"SubMenu\"},this.dashboardLinks(\"settings\"))),o.a.createElement(hr,{path:\"/search\"},o.a.createElement(\"ul\",{className:\"SubMenu\"},this.dashboardLinks(\"search\"))),s?o.a.createElement(hr,{path:\"/yandex\"},o.a.createElement(\"ul\",{className:\"SubMenu\"},this.dashboardLinks(\"yandex\"))):null))),o.a.createElement(\"div\",{className:\"bottomSideBar\"},o.a.createElement(\"ul\",null,o.a.createElement(\"li\",{onClick:this.sideMenuClick},o.a.createElement(br,{to:\"/settings\",activeClassName:\"activeSidebar\",className:\"fa fa-cog fa-2x\"}),\"Settings\"))))),o.a.createElement(\"div\",{className:\"content\"},o.a.createElement(\"h1\",null,n(\"messages.translation-manager\")),o.a.createElement(\"p\",{dangerouslySetInnerHTML:{__html:n(\"messages.export-warning-text\")+\"&nbsp;\"+n(\"messages.powered-by-yandex\")}}),o.a.createElement(hr,{exact:!0,path:\"/\",component:this.Home}),i&&o.a.createElement(hr,{path:\"/users\",component:this.UserAdmin}),i&&o.a.createElement(hr,{path:\"/groups\",component:this.GroupAdmin}),o.a.createElement(hr,{path:\"/topics\",component:this.Topics}),o.a.createElement(hr,{path:\"/settings\",component:this.Settings}),o.a.createElement(hr,{path:\"/search\",component:this.Search}),s?o.a.createElement(hr,{path:\"/yandex\",component:this.Yandex}):null),o.a.createElement(Ei,ki({},this.state.modalProps,{showModal:this.state.showModal,hideModal:this.state.hideModal}),this.state.modalBody))}}],[{key:\"Topic\",value:function(e){var t=e.match;return o.a.createElement(\"div\",null,o.a.createElement(\"h3\",null,t.params.topicId))}}]),t}(),Ti=ve()(Hr(Oi)),Pi=document.head.querySelector('meta[name=\"app-url\"]'),Ii=\"\";Pi?Ii=Pi.content:console.error(\"app-url meta data not found\");var Di=document.head.querySelector('meta[name=\"web-url\"]');At.a.fn.OldScriptHooks.APP_URL=\"\",At.a.fn.OldScriptHooks.WEB_URL=Di,At.a.fn.OldScriptHooks.BASE_URL=Ii,document.getElementById(\"root\")&&i.a.render(o.a.createElement(De,{i18n:Dt},o.a.createElement(Vr,{store:mt},o.a.createElement(Wn,{basename:Ii},o.a.createElement(Ti,null)))),document.getElementById(\"root\"))},function(e,t,n){window._=n(108),window.Popper=n(62).default;try{window.$=window.jQuery=n(8)}catch(e){}window.axios=n(15),window.axios.defaults.headers.common[\"X-Requested-With\"]=\"XMLHttpRequest\";var r=document.head.querySelector('meta[name=\"csrf-token\"]');r?window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"]=r.content:console.error(\"CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token\");var o=document.head.querySelector('meta[name=\"api-url\"]');o?window.axios.defaults.baseURL=o.content:console.error(\"api-url meta data not found\"),window.axios.defaults.withCredentials=!0,window.axios.defaults.cache=\"no-cache\",window.axios.defaults.responseType=\"json\",window.axios.defaults.withCredentials=!0,window.axios.defaults.maxContentLength=1e5,window.axios.defaults.headers={\"Access-Control-Allow-Origin\":\"*\",\"Content-Type\":\"application/json\"},window.XRegExp=n(68)},function(e,t,n){(function(e,r){var o;(function(){var a,i=200,s=\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\",u=\"Expected a function\",l=\"__lodash_hash_undefined__\",c=500,d=\"__lodash_placeholder__\",f=1,p=2,h=4,m=1,g=2,v=1,b=2,y=4,w=8,x=16,_=32,E=64,k=128,S=256,C=512,O=30,T=\"...\",P=800,I=16,D=1,N=2,A=1/0,j=9007199254740991,L=1.7976931348623157e308,R=NaN,M=4294967295,U=M-1,B=M>>>1,H=[[\"ary\",k],[\"bind\",v],[\"bindKey\",b],[\"curry\",w],[\"curryRight\",x],[\"flip\",C],[\"partial\",_],[\"partialRight\",E],[\"rearg\",S]],$=\"[object Arguments]\",F=\"[object Array]\",V=\"[object AsyncFunction]\",W=\"[object Boolean]\",K=\"[object Date]\",q=\"[object DOMException]\",z=\"[object Error]\",G=\"[object Function]\",Y=\"[object GeneratorFunction]\",X=\"[object Map]\",Q=\"[object Number]\",J=\"[object Null]\",Z=\"[object Object]\",ee=\"[object Proxy]\",te=\"[object RegExp]\",ne=\"[object Set]\",re=\"[object String]\",oe=\"[object Symbol]\",ae=\"[object Undefined]\",ie=\"[object WeakMap]\",se=\"[object WeakSet]\",ue=\"[object ArrayBuffer]\",le=\"[object DataView]\",ce=\"[object Float32Array]\",de=\"[object Float64Array]\",fe=\"[object Int8Array]\",pe=\"[object Int16Array]\",he=\"[object Int32Array]\",me=\"[object Uint8Array]\",ge=\"[object Uint8ClampedArray]\",ve=\"[object Uint16Array]\",be=\"[object Uint32Array]\",ye=/\\b__p \\+= '';/g,we=/\\b(__p \\+=) '' \\+/g,xe=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,_e=/&(?:amp|lt|gt|quot|#39);/g,Ee=/[&<>\"']/g,ke=RegExp(_e.source),Se=RegExp(Ee.source),Ce=/<%-([\\s\\S]+?)%>/g,Oe=/<%([\\s\\S]+?)%>/g,Te=/<%=([\\s\\S]+?)%>/g,Pe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Ie=/^\\w*$/,De=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,Ne=/[\\\\^$.*+?()[\\]{}|]/g,Ae=RegExp(Ne.source),je=/^\\s+|\\s+$/g,Le=/^\\s+/,Re=/\\s+$/,Me=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,Ue=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,Be=/,? & /,He=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,$e=/\\\\(\\\\)?/g,Fe=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,Ve=/\\w*$/,We=/^[-+]0x[0-9a-f]+$/i,Ke=/^0b[01]+$/i,qe=/^\\[object .+?Constructor\\]$/,ze=/^0o[0-7]+$/i,Ge=/^(?:0|[1-9]\\d*)$/,Ye=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,Xe=/($^)/,Qe=/['\\n\\r\\u2028\\u2029\\\\]/g,Je=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Ze=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",et=\"[\\\\ud800-\\\\udfff]\",tt=\"[\"+Ze+\"]\",nt=\"[\"+Je+\"]\",rt=\"\\\\d+\",ot=\"[\\\\u2700-\\\\u27bf]\",at=\"[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]\",it=\"[^\\\\ud800-\\\\udfff\"+Ze+rt+\"\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",st=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",ut=\"[^\\\\ud800-\\\\udfff]\",lt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",ct=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",dt=\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",ft=\"(?:\"+at+\"|\"+it+\")\",pt=\"(?:\"+dt+\"|\"+it+\")\",ht=\"(?:\"+nt+\"|\"+st+\")\"+\"?\",mt=\"[\\\\ufe0e\\\\ufe0f]?\"+ht+(\"(?:\\\\u200d(?:\"+[ut,lt,ct].join(\"|\")+\")[\\\\ufe0e\\\\ufe0f]?\"+ht+\")*\"),gt=\"(?:\"+[ot,lt,ct].join(\"|\")+\")\"+mt,vt=\"(?:\"+[ut+nt+\"?\",nt,lt,ct,et].join(\"|\")+\")\",bt=RegExp(\"['’]\",\"g\"),yt=RegExp(nt,\"g\"),wt=RegExp(st+\"(?=\"+st+\")|\"+vt+mt,\"g\"),xt=RegExp([dt+\"?\"+at+\"+(?:['’](?:d|ll|m|re|s|t|ve))?(?=\"+[tt,dt,\"$\"].join(\"|\")+\")\",pt+\"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=\"+[tt,dt+ft,\"$\"].join(\"|\")+\")\",dt+\"?\"+ft+\"+(?:['’](?:d|ll|m|re|s|t|ve))?\",dt+\"+(?:['’](?:D|LL|M|RE|S|T|VE))?\",\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",rt,gt].join(\"|\"),\"g\"),_t=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\"+Je+\"\\\\ufe0e\\\\ufe0f]\"),Et=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,kt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],St=-1,Ct={};Ct[ce]=Ct[de]=Ct[fe]=Ct[pe]=Ct[he]=Ct[me]=Ct[ge]=Ct[ve]=Ct[be]=!0,Ct[$]=Ct[F]=Ct[ue]=Ct[W]=Ct[le]=Ct[K]=Ct[z]=Ct[G]=Ct[X]=Ct[Q]=Ct[Z]=Ct[te]=Ct[ne]=Ct[re]=Ct[ie]=!1;var Ot={};Ot[$]=Ot[F]=Ot[ue]=Ot[le]=Ot[W]=Ot[K]=Ot[ce]=Ot[de]=Ot[fe]=Ot[pe]=Ot[he]=Ot[X]=Ot[Q]=Ot[Z]=Ot[te]=Ot[ne]=Ot[re]=Ot[oe]=Ot[me]=Ot[ge]=Ot[ve]=Ot[be]=!0,Ot[z]=Ot[G]=Ot[ie]=!1;var Tt={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},Pt=parseFloat,It=parseInt,Dt=\"object\"==typeof e&&e&&e.Object===Object&&e,Nt=\"object\"==typeof self&&self&&self.Object===Object&&self,At=Dt||Nt||Function(\"return this\")(),jt=\"object\"==typeof t&&t&&!t.nodeType&&t,Lt=jt&&\"object\"==typeof r&&r&&!r.nodeType&&r,Rt=Lt&&Lt.exports===jt,Mt=Rt&&Dt.process,Ut=function(){try{return Mt&&Mt.binding&&Mt.binding(\"util\")}catch(e){}}(),Bt=Ut&&Ut.isArrayBuffer,Ht=Ut&&Ut.isDate,$t=Ut&&Ut.isMap,Ft=Ut&&Ut.isRegExp,Vt=Ut&&Ut.isSet,Wt=Ut&&Ut.isTypedArray;function Kt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function qt(e,t,n,r){for(var o=-1,a=null==e?0:e.length;++o<a;){var i=e[o];t(r,i,n(i),e)}return r}function zt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function Gt(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Yt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function Xt(e,t){for(var n=-1,r=null==e?0:e.length,o=0,a=[];++n<r;){var i=e[n];t(i,n,e)&&(a[o++]=i)}return a}function Qt(e,t){return!!(null==e?0:e.length)&&un(e,t,0)>-1}function Jt(e,t,n){for(var r=-1,o=null==e?0:e.length;++r<o;)if(n(t,e[r]))return!0;return!1}function Zt(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}function en(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}function tn(e,t,n,r){var o=-1,a=null==e?0:e.length;for(r&&a&&(n=e[++o]);++o<a;)n=t(n,e[o],o,e);return n}function nn(e,t,n,r){var o=null==e?0:e.length;for(r&&o&&(n=e[--o]);o--;)n=t(n,e[o],o,e);return n}function rn(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var on=fn(\"length\");function an(e,t,n){var r;return n(e,function(e,n,o){if(t(e,n,o))return r=n,!1}),r}function sn(e,t,n,r){for(var o=e.length,a=n+(r?1:-1);r?a--:++a<o;)if(t(e[a],a,e))return a;return-1}function un(e,t,n){return t==t?function(e,t,n){var r=n-1,o=e.length;for(;++r<o;)if(e[r]===t)return r;return-1}(e,t,n):sn(e,cn,n)}function ln(e,t,n,r){for(var o=n-1,a=e.length;++o<a;)if(r(e[o],t))return o;return-1}function cn(e){return e!=e}function dn(e,t){var n=null==e?0:e.length;return n?mn(e,t)/n:R}function fn(e){return function(t){return null==t?a:t[e]}}function pn(e){return function(t){return null==e?a:e[t]}}function hn(e,t,n,r,o){return o(e,function(e,o,a){n=r?(r=!1,e):t(n,e,o,a)}),n}function mn(e,t){for(var n,r=-1,o=e.length;++r<o;){var i=t(e[r]);i!==a&&(n=n===a?i:n+i)}return n}function gn(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function vn(e){return function(t){return e(t)}}function bn(e,t){return Zt(t,function(t){return e[t]})}function yn(e,t){return e.has(t)}function wn(e,t){for(var n=-1,r=e.length;++n<r&&un(t,e[n],0)>-1;);return n}function xn(e,t){for(var n=e.length;n--&&un(t,e[n],0)>-1;);return n}var _n=pn({\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"Ç\":\"C\",\"ç\":\"c\",\"Ð\":\"D\",\"ð\":\"d\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"Ñ\":\"N\",\"ñ\":\"n\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"Ý\":\"Y\",\"ý\":\"y\",\"ÿ\":\"y\",\"Æ\":\"Ae\",\"æ\":\"ae\",\"Þ\":\"Th\",\"þ\":\"th\",\"ß\":\"ss\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ą\":\"A\",\"ā\":\"a\",\"ă\":\"a\",\"ą\":\"a\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"Ď\":\"D\",\"Đ\":\"D\",\"ď\":\"d\",\"đ\":\"d\",\"Ē\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ę\":\"E\",\"Ě\":\"E\",\"ē\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ę\":\"e\",\"ě\":\"e\",\"Ĝ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ģ\":\"G\",\"ĝ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ģ\":\"g\",\"Ĥ\":\"H\",\"Ħ\":\"H\",\"ĥ\":\"h\",\"ħ\":\"h\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"Į\":\"I\",\"İ\":\"I\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"į\":\"i\",\"ı\":\"i\",\"Ĵ\":\"J\",\"ĵ\":\"j\",\"Ķ\":\"K\",\"ķ\":\"k\",\"ĸ\":\"k\",\"Ĺ\":\"L\",\"Ļ\":\"L\",\"Ľ\":\"L\",\"Ŀ\":\"L\",\"Ł\":\"L\",\"ĺ\":\"l\",\"ļ\":\"l\",\"ľ\":\"l\",\"ŀ\":\"l\",\"ł\":\"l\",\"Ń\":\"N\",\"Ņ\":\"N\",\"Ň\":\"N\",\"Ŋ\":\"N\",\"ń\":\"n\",\"ņ\":\"n\",\"ň\":\"n\",\"ŋ\":\"n\",\"Ō\":\"O\",\"Ŏ\":\"O\",\"Ő\":\"O\",\"ō\":\"o\",\"ŏ\":\"o\",\"ő\":\"o\",\"Ŕ\":\"R\",\"Ŗ\":\"R\",\"Ř\":\"R\",\"ŕ\":\"r\",\"ŗ\":\"r\",\"ř\":\"r\",\"Ś\":\"S\",\"Ŝ\":\"S\",\"Ş\":\"S\",\"Š\":\"S\",\"ś\":\"s\",\"ŝ\":\"s\",\"ş\":\"s\",\"š\":\"s\",\"Ţ\":\"T\",\"Ť\":\"T\",\"Ŧ\":\"T\",\"ţ\":\"t\",\"ť\":\"t\",\"ŧ\":\"t\",\"Ũ\":\"U\",\"Ū\":\"U\",\"Ŭ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ų\":\"U\",\"ũ\":\"u\",\"ū\":\"u\",\"ŭ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"ź\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"Ĳ\":\"IJ\",\"ĳ\":\"ij\",\"Œ\":\"Oe\",\"œ\":\"oe\",\"ŉ\":\"'n\",\"ſ\":\"s\"}),En=pn({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function kn(e){return\"\\\\\"+Tt[e]}function Sn(e){return _t.test(e)}function Cn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function On(e,t){return function(n){return e(t(n))}}function Tn(e,t){for(var n=-1,r=e.length,o=0,a=[];++n<r;){var i=e[n];i!==t&&i!==d||(e[n]=d,a[o++]=n)}return a}function Pn(e,t){return\"__proto__\"==t?a:e[t]}function In(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function Dn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=[e,e]}),n}function Nn(e){return Sn(e)?function(e){var t=wt.lastIndex=0;for(;wt.test(e);)++t;return t}(e):on(e)}function An(e){return Sn(e)?function(e){return e.match(wt)||[]}(e):function(e){return e.split(\"\")}(e)}var jn=pn({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"});var Ln=function e(t){var n,r=(t=null==t?At:Ln.defaults(At.Object(),t,Ln.pick(At,kt))).Array,o=t.Date,Je=t.Error,Ze=t.Function,et=t.Math,tt=t.Object,nt=t.RegExp,rt=t.String,ot=t.TypeError,at=r.prototype,it=Ze.prototype,st=tt.prototype,ut=t[\"__core-js_shared__\"],lt=it.toString,ct=st.hasOwnProperty,dt=0,ft=(n=/[^.]+$/.exec(ut&&ut.keys&&ut.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",pt=st.toString,ht=lt.call(tt),mt=At._,gt=nt(\"^\"+lt.call(ct).replace(Ne,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),vt=Rt?t.Buffer:a,wt=t.Symbol,_t=t.Uint8Array,Tt=vt?vt.allocUnsafe:a,Dt=On(tt.getPrototypeOf,tt),Nt=tt.create,jt=st.propertyIsEnumerable,Lt=at.splice,Mt=wt?wt.isConcatSpreadable:a,Ut=wt?wt.iterator:a,on=wt?wt.toStringTag:a,pn=function(){try{var e=Ha(tt,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),Rn=t.clearTimeout!==At.clearTimeout&&t.clearTimeout,Mn=o&&o.now!==At.Date.now&&o.now,Un=t.setTimeout!==At.setTimeout&&t.setTimeout,Bn=et.ceil,Hn=et.floor,$n=tt.getOwnPropertySymbols,Fn=vt?vt.isBuffer:a,Vn=t.isFinite,Wn=at.join,Kn=On(tt.keys,tt),qn=et.max,zn=et.min,Gn=o.now,Yn=t.parseInt,Xn=et.random,Qn=at.reverse,Jn=Ha(t,\"DataView\"),Zn=Ha(t,\"Map\"),er=Ha(t,\"Promise\"),tr=Ha(t,\"Set\"),nr=Ha(t,\"WeakMap\"),rr=Ha(tt,\"create\"),or=nr&&new nr,ar={},ir=di(Jn),sr=di(Zn),ur=di(er),lr=di(tr),cr=di(nr),dr=wt?wt.prototype:a,fr=dr?dr.valueOf:a,pr=dr?dr.toString:a;function hr(e){if(Ts(e)&&!vs(e)&&!(e instanceof br)){if(e instanceof vr)return e;if(ct.call(e,\"__wrapped__\"))return fi(e)}return new vr(e)}var mr=function(){function e(){}return function(t){if(!Os(t))return{};if(Nt)return Nt(t);e.prototype=t;var n=new e;return e.prototype=a,n}}();function gr(){}function vr(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=a}function br(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=M,this.__views__=[]}function yr(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function wr(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function xr(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function _r(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new xr;++t<n;)this.add(e[t])}function Er(e){var t=this.__data__=new wr(e);this.size=t.size}function kr(e,t){var n=vs(e),r=!n&&gs(e),o=!n&&!r&&xs(e),a=!n&&!r&&!o&&Rs(e),i=n||r||o||a,s=i?gn(e.length,rt):[],u=s.length;for(var l in e)!t&&!ct.call(e,l)||i&&(\"length\"==l||o&&(\"offset\"==l||\"parent\"==l)||a&&(\"buffer\"==l||\"byteLength\"==l||\"byteOffset\"==l)||za(l,u))||s.push(l);return s}function Sr(e){var t=e.length;return t?e[Eo(0,t-1)]:a}function Cr(e,t){return ui(oa(e),Lr(t,0,e.length))}function Or(e){return ui(oa(e))}function Tr(e,t,n){(n===a||ps(e[t],n))&&(n!==a||t in e)||Ar(e,t,n)}function Pr(e,t,n){var r=e[t];ct.call(e,t)&&ps(r,n)&&(n!==a||t in e)||Ar(e,t,n)}function Ir(e,t){for(var n=e.length;n--;)if(ps(e[n][0],t))return n;return-1}function Dr(e,t,n,r){return Hr(e,function(e,o,a){t(r,e,n(e),a)}),r}function Nr(e,t){return e&&aa(t,ou(t),e)}function Ar(e,t,n){\"__proto__\"==t&&pn?pn(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function jr(e,t){for(var n=-1,o=t.length,i=r(o),s=null==e;++n<o;)i[n]=s?a:Zs(e,t[n]);return i}function Lr(e,t,n){return e==e&&(n!==a&&(e=e<=n?e:n),t!==a&&(e=e>=t?e:t)),e}function Rr(e,t,n,r,o,i){var s,u=t&f,l=t&p,c=t&h;if(n&&(s=o?n(e,r,o,i):n(e)),s!==a)return s;if(!Os(e))return e;var d=vs(e);if(d){if(s=function(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&ct.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}(e),!u)return oa(e,s)}else{var m=Va(e),g=m==G||m==Y;if(xs(e))return Jo(e,u);if(m==Z||m==$||g&&!o){if(s=l||g?{}:Ka(e),!u)return l?function(e,t){return aa(e,Fa(e),t)}(e,function(e,t){return e&&aa(t,au(t),e)}(s,e)):function(e,t){return aa(e,$a(e),t)}(e,Nr(s,e))}else{if(!Ot[m])return o?e:{};s=function(e,t,n){var r,o,a,i=e.constructor;switch(t){case ue:return Zo(e);case W:case K:return new i(+e);case le:return function(e,t){var n=t?Zo(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case ce:case de:case fe:case pe:case he:case me:case ge:case ve:case be:return ea(e,n);case X:return new i;case Q:case re:return new i(e);case te:return(a=new(o=e).constructor(o.source,Ve.exec(o))).lastIndex=o.lastIndex,a;case ne:return new i;case oe:return r=e,fr?tt(fr.call(r)):{}}}(e,m,u)}}i||(i=new Er);var v=i.get(e);if(v)return v;if(i.set(e,s),As(e))return e.forEach(function(r){s.add(Rr(r,t,n,r,e,i))}),s;if(Ps(e))return e.forEach(function(r,o){s.set(o,Rr(r,t,n,o,e,i))}),s;var b=d?a:(c?l?Aa:Na:l?au:ou)(e);return zt(b||e,function(r,o){b&&(r=e[o=r]),Pr(s,o,Rr(r,t,n,o,e,i))}),s}function Mr(e,t,n){var r=n.length;if(null==e)return!r;for(e=tt(e);r--;){var o=n[r],i=t[o],s=e[o];if(s===a&&!(o in e)||!i(s))return!1}return!0}function Ur(e,t,n){if(\"function\"!=typeof e)throw new ot(u);return oi(function(){e.apply(a,n)},t)}function Br(e,t,n,r){var o=-1,a=Qt,s=!0,u=e.length,l=[],c=t.length;if(!u)return l;n&&(t=Zt(t,vn(n))),r?(a=Jt,s=!1):t.length>=i&&(a=yn,s=!1,t=new _r(t));e:for(;++o<u;){var d=e[o],f=null==n?d:n(d);if(d=r||0!==d?d:0,s&&f==f){for(var p=c;p--;)if(t[p]===f)continue e;l.push(d)}else a(t,f,r)||l.push(d)}return l}hr.templateSettings={escape:Ce,evaluate:Oe,interpolate:Te,variable:\"\",imports:{_:hr}},hr.prototype=gr.prototype,hr.prototype.constructor=hr,vr.prototype=mr(gr.prototype),vr.prototype.constructor=vr,br.prototype=mr(gr.prototype),br.prototype.constructor=br,yr.prototype.clear=function(){this.__data__=rr?rr(null):{},this.size=0},yr.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},yr.prototype.get=function(e){var t=this.__data__;if(rr){var n=t[e];return n===l?a:n}return ct.call(t,e)?t[e]:a},yr.prototype.has=function(e){var t=this.__data__;return rr?t[e]!==a:ct.call(t,e)},yr.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=rr&&t===a?l:t,this},wr.prototype.clear=function(){this.__data__=[],this.size=0},wr.prototype.delete=function(e){var t=this.__data__,n=Ir(t,e);return!(n<0||(n==t.length-1?t.pop():Lt.call(t,n,1),--this.size,0))},wr.prototype.get=function(e){var t=this.__data__,n=Ir(t,e);return n<0?a:t[n][1]},wr.prototype.has=function(e){return Ir(this.__data__,e)>-1},wr.prototype.set=function(e,t){var n=this.__data__,r=Ir(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},xr.prototype.clear=function(){this.size=0,this.__data__={hash:new yr,map:new(Zn||wr),string:new yr}},xr.prototype.delete=function(e){var t=Ua(this,e).delete(e);return this.size-=t?1:0,t},xr.prototype.get=function(e){return Ua(this,e).get(e)},xr.prototype.has=function(e){return Ua(this,e).has(e)},xr.prototype.set=function(e,t){var n=Ua(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},_r.prototype.add=_r.prototype.push=function(e){return this.__data__.set(e,l),this},_r.prototype.has=function(e){return this.__data__.has(e)},Er.prototype.clear=function(){this.__data__=new wr,this.size=0},Er.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Er.prototype.get=function(e){return this.__data__.get(e)},Er.prototype.has=function(e){return this.__data__.has(e)},Er.prototype.set=function(e,t){var n=this.__data__;if(n instanceof wr){var r=n.__data__;if(!Zn||r.length<i-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new xr(r)}return n.set(e,t),this.size=n.size,this};var Hr=ua(Gr),$r=ua(Yr,!0);function Fr(e,t){var n=!0;return Hr(e,function(e,r,o){return n=!!t(e,r,o)}),n}function Vr(e,t,n){for(var r=-1,o=e.length;++r<o;){var i=e[r],s=t(i);if(null!=s&&(u===a?s==s&&!Ls(s):n(s,u)))var u=s,l=i}return l}function Wr(e,t){var n=[];return Hr(e,function(e,r,o){t(e,r,o)&&n.push(e)}),n}function Kr(e,t,n,r,o){var a=-1,i=e.length;for(n||(n=qa),o||(o=[]);++a<i;){var s=e[a];t>0&&n(s)?t>1?Kr(s,t-1,n,r,o):en(o,s):r||(o[o.length]=s)}return o}var qr=la(),zr=la(!0);function Gr(e,t){return e&&qr(e,t,ou)}function Yr(e,t){return e&&zr(e,t,ou)}function Xr(e,t){return Xt(t,function(t){return ks(e[t])})}function Qr(e,t){for(var n=0,r=(t=Go(t,e)).length;null!=e&&n<r;)e=e[ci(t[n++])];return n&&n==r?e:a}function Jr(e,t,n){var r=t(e);return vs(e)?r:en(r,n(e))}function Zr(e){return null==e?e===a?ae:J:on&&on in tt(e)?function(e){var t=ct.call(e,on),n=e[on];try{e[on]=a;var r=!0}catch(e){}var o=pt.call(e);return r&&(t?e[on]=n:delete e[on]),o}(e):function(e){return pt.call(e)}(e)}function eo(e,t){return e>t}function to(e,t){return null!=e&&ct.call(e,t)}function no(e,t){return null!=e&&t in tt(e)}function ro(e,t,n){for(var o=n?Jt:Qt,i=e[0].length,s=e.length,u=s,l=r(s),c=1/0,d=[];u--;){var f=e[u];u&&t&&(f=Zt(f,vn(t))),c=zn(f.length,c),l[u]=!n&&(t||i>=120&&f.length>=120)?new _r(u&&f):a}f=e[0];var p=-1,h=l[0];e:for(;++p<i&&d.length<c;){var m=f[p],g=t?t(m):m;if(m=n||0!==m?m:0,!(h?yn(h,g):o(d,g,n))){for(u=s;--u;){var v=l[u];if(!(v?yn(v,g):o(e[u],g,n)))continue e}h&&h.push(g),d.push(m)}}return d}function oo(e,t,n){var r=null==(e=ni(e,t=Go(t,e)))?e:e[ci(Ei(t))];return null==r?a:Kt(r,e,n)}function ao(e){return Ts(e)&&Zr(e)==$}function io(e,t,n,r,o){return e===t||(null==e||null==t||!Ts(e)&&!Ts(t)?e!=e&&t!=t:function(e,t,n,r,o,i){var s=vs(e),u=vs(t),l=s?F:Va(e),c=u?F:Va(t),d=(l=l==$?Z:l)==Z,f=(c=c==$?Z:c)==Z,p=l==c;if(p&&xs(e)){if(!xs(t))return!1;s=!0,d=!1}if(p&&!d)return i||(i=new Er),s||Rs(e)?Ia(e,t,n,r,o,i):function(e,t,n,r,o,a,i){switch(n){case le:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case ue:return!(e.byteLength!=t.byteLength||!a(new _t(e),new _t(t)));case W:case K:case Q:return ps(+e,+t);case z:return e.name==t.name&&e.message==t.message;case te:case re:return e==t+\"\";case X:var s=Cn;case ne:var u=r&m;if(s||(s=In),e.size!=t.size&&!u)return!1;var l=i.get(e);if(l)return l==t;r|=g,i.set(e,t);var c=Ia(s(e),s(t),r,o,a,i);return i.delete(e),c;case oe:if(fr)return fr.call(e)==fr.call(t)}return!1}(e,t,l,n,r,o,i);if(!(n&m)){var h=d&&ct.call(e,\"__wrapped__\"),v=f&&ct.call(t,\"__wrapped__\");if(h||v){var b=h?e.value():e,y=v?t.value():t;return i||(i=new Er),o(b,y,n,r,i)}}return!!p&&(i||(i=new Er),function(e,t,n,r,o,i){var s=n&m,u=Na(e),l=u.length,c=Na(t).length;if(l!=c&&!s)return!1;for(var d=l;d--;){var f=u[d];if(!(s?f in t:ct.call(t,f)))return!1}var p=i.get(e);if(p&&i.get(t))return p==t;var h=!0;i.set(e,t),i.set(t,e);for(var g=s;++d<l;){f=u[d];var v=e[f],b=t[f];if(r)var y=s?r(b,v,f,t,e,i):r(v,b,f,e,t,i);if(!(y===a?v===b||o(v,b,n,r,i):y)){h=!1;break}g||(g=\"constructor\"==f)}if(h&&!g){var w=e.constructor,x=t.constructor;w!=x&&\"constructor\"in e&&\"constructor\"in t&&!(\"function\"==typeof w&&w instanceof w&&\"function\"==typeof x&&x instanceof x)&&(h=!1)}return i.delete(e),i.delete(t),h}(e,t,n,r,o,i))}(e,t,n,r,io,o))}function so(e,t,n,r){var o=n.length,i=o,s=!r;if(null==e)return!i;for(e=tt(e);o--;){var u=n[o];if(s&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++o<i;){var l=(u=n[o])[0],c=e[l],d=u[1];if(s&&u[2]){if(c===a&&!(l in e))return!1}else{var f=new Er;if(r)var p=r(c,d,l,e,t,f);if(!(p===a?io(d,c,m|g,r,f):p))return!1}}return!0}function uo(e){return!(!Os(e)||ft&&ft in e)&&(ks(e)?gt:qe).test(di(e))}function lo(e){return\"function\"==typeof e?e:null==e?Iu:\"object\"==typeof e?vs(e)?go(e[0],e[1]):mo(e):Bu(e)}function co(e){if(!Ja(e))return Kn(e);var t=[];for(var n in tt(e))ct.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function fo(e){if(!Os(e))return function(e){var t=[];if(null!=e)for(var n in tt(e))t.push(n);return t}(e);var t=Ja(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&ct.call(e,r))&&n.push(r);return n}function po(e,t){return e<t}function ho(e,t){var n=-1,o=ys(e)?r(e.length):[];return Hr(e,function(e,r,a){o[++n]=t(e,r,a)}),o}function mo(e){var t=Ba(e);return 1==t.length&&t[0][2]?ei(t[0][0],t[0][1]):function(n){return n===e||so(n,e,t)}}function go(e,t){return Ya(e)&&Za(t)?ei(ci(e),t):function(n){var r=Zs(n,e);return r===a&&r===t?eu(n,e):io(t,r,m|g)}}function vo(e,t,n,r,o){e!==t&&qr(t,function(i,s){if(Os(i))o||(o=new Er),function(e,t,n,r,o,i,s){var u=Pn(e,n),l=Pn(t,n),c=s.get(l);if(c)Tr(e,n,c);else{var d=i?i(u,l,n+\"\",e,t,s):a,f=d===a;if(f){var p=vs(l),h=!p&&xs(l),m=!p&&!h&&Rs(l);d=l,p||h||m?vs(u)?d=u:ws(u)?d=oa(u):h?(f=!1,d=Jo(l,!0)):m?(f=!1,d=ea(l,!0)):d=[]:Ds(l)||gs(l)?(d=u,gs(u)?d=Ws(u):(!Os(u)||r&&ks(u))&&(d=Ka(l))):f=!1}f&&(s.set(l,d),o(d,l,r,i,s),s.delete(l)),Tr(e,n,d)}}(e,t,s,n,vo,r,o);else{var u=r?r(Pn(e,s),i,s+\"\",e,t,o):a;u===a&&(u=i),Tr(e,s,u)}},au)}function bo(e,t){var n=e.length;if(n)return za(t+=t<0?n:0,n)?e[t]:a}function yo(e,t,n){var r=-1;return t=Zt(t.length?t:[Iu],vn(Ma())),function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}(ho(e,function(e,n,o){return{criteria:Zt(t,function(t){return t(e)}),index:++r,value:e}}),function(e,t){return function(e,t,n){for(var r=-1,o=e.criteria,a=t.criteria,i=o.length,s=n.length;++r<i;){var u=ta(o[r],a[r]);if(u){if(r>=s)return u;var l=n[r];return u*(\"desc\"==l?-1:1)}}return e.index-t.index}(e,t,n)})}function wo(e,t,n){for(var r=-1,o=t.length,a={};++r<o;){var i=t[r],s=Qr(e,i);n(s,i)&&To(a,Go(i,e),s)}return a}function xo(e,t,n,r){var o=r?ln:un,a=-1,i=t.length,s=e;for(e===t&&(t=oa(t)),n&&(s=Zt(e,vn(n)));++a<i;)for(var u=0,l=t[a],c=n?n(l):l;(u=o(s,c,u,r))>-1;)s!==e&&Lt.call(s,u,1),Lt.call(e,u,1);return e}function _o(e,t){for(var n=e?t.length:0,r=n-1;n--;){var o=t[n];if(n==r||o!==a){var a=o;za(o)?Lt.call(e,o,1):Ho(e,o)}}return e}function Eo(e,t){return e+Hn(Xn()*(t-e+1))}function ko(e,t){var n=\"\";if(!e||t<1||t>j)return n;do{t%2&&(n+=e),(t=Hn(t/2))&&(e+=e)}while(t);return n}function So(e,t){return ai(ti(e,t,Iu),e+\"\")}function Co(e){return Sr(pu(e))}function Oo(e,t){var n=pu(e);return ui(n,Lr(t,0,n.length))}function To(e,t,n,r){if(!Os(e))return e;for(var o=-1,i=(t=Go(t,e)).length,s=i-1,u=e;null!=u&&++o<i;){var l=ci(t[o]),c=n;if(o!=s){var d=u[l];(c=r?r(d,l,u):a)===a&&(c=Os(d)?d:za(t[o+1])?[]:{})}Pr(u,l,c),u=u[l]}return e}var Po=or?function(e,t){return or.set(e,t),e}:Iu,Io=pn?function(e,t){return pn(e,\"toString\",{configurable:!0,enumerable:!1,value:Ou(t),writable:!0})}:Iu;function Do(e){return ui(pu(e))}function No(e,t,n){var o=-1,a=e.length;t<0&&(t=-t>a?0:a+t),(n=n>a?a:n)<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var i=r(a);++o<a;)i[o]=e[o+t];return i}function Ao(e,t){var n;return Hr(e,function(e,r,o){return!(n=t(e,r,o))}),!!n}function jo(e,t,n){var r=0,o=null==e?r:e.length;if(\"number\"==typeof t&&t==t&&o<=B){for(;r<o;){var a=r+o>>>1,i=e[a];null!==i&&!Ls(i)&&(n?i<=t:i<t)?r=a+1:o=a}return o}return Lo(e,t,Iu,n)}function Lo(e,t,n,r){t=n(t);for(var o=0,i=null==e?0:e.length,s=t!=t,u=null===t,l=Ls(t),c=t===a;o<i;){var d=Hn((o+i)/2),f=n(e[d]),p=f!==a,h=null===f,m=f==f,g=Ls(f);if(s)var v=r||m;else v=c?m&&(r||p):u?m&&p&&(r||!h):l?m&&p&&!h&&(r||!g):!h&&!g&&(r?f<=t:f<t);v?o=d+1:i=d}return zn(i,U)}function Ro(e,t){for(var n=-1,r=e.length,o=0,a=[];++n<r;){var i=e[n],s=t?t(i):i;if(!n||!ps(s,u)){var u=s;a[o++]=0===i?0:i}}return a}function Mo(e){return\"number\"==typeof e?e:Ls(e)?R:+e}function Uo(e){if(\"string\"==typeof e)return e;if(vs(e))return Zt(e,Uo)+\"\";if(Ls(e))return pr?pr.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-A?\"-0\":t}function Bo(e,t,n){var r=-1,o=Qt,a=e.length,s=!0,u=[],l=u;if(n)s=!1,o=Jt;else if(a>=i){var c=t?null:ka(e);if(c)return In(c);s=!1,o=yn,l=new _r}else l=t?[]:u;e:for(;++r<a;){var d=e[r],f=t?t(d):d;if(d=n||0!==d?d:0,s&&f==f){for(var p=l.length;p--;)if(l[p]===f)continue e;t&&l.push(f),u.push(d)}else o(l,f,n)||(l!==u&&l.push(f),u.push(d))}return u}function Ho(e,t){return null==(e=ni(e,t=Go(t,e)))||delete e[ci(Ei(t))]}function $o(e,t,n,r){return To(e,t,n(Qr(e,t)),r)}function Fo(e,t,n,r){for(var o=e.length,a=r?o:-1;(r?a--:++a<o)&&t(e[a],a,e););return n?No(e,r?0:a,r?a+1:o):No(e,r?a+1:0,r?o:a)}function Vo(e,t){var n=e;return n instanceof br&&(n=n.value()),tn(t,function(e,t){return t.func.apply(t.thisArg,en([e],t.args))},n)}function Wo(e,t,n){var o=e.length;if(o<2)return o?Bo(e[0]):[];for(var a=-1,i=r(o);++a<o;)for(var s=e[a],u=-1;++u<o;)u!=a&&(i[a]=Br(i[a]||s,e[u],t,n));return Bo(Kr(i,1),t,n)}function Ko(e,t,n){for(var r=-1,o=e.length,i=t.length,s={};++r<o;){var u=r<i?t[r]:a;n(s,e[r],u)}return s}function qo(e){return ws(e)?e:[]}function zo(e){return\"function\"==typeof e?e:Iu}function Go(e,t){return vs(e)?e:Ya(e,t)?[e]:li(Ks(e))}var Yo=So;function Xo(e,t,n){var r=e.length;return n=n===a?r:n,!t&&n>=r?e:No(e,t,n)}var Qo=Rn||function(e){return At.clearTimeout(e)};function Jo(e,t){if(t)return e.slice();var n=e.length,r=Tt?Tt(n):new e.constructor(n);return e.copy(r),r}function Zo(e){var t=new e.constructor(e.byteLength);return new _t(t).set(new _t(e)),t}function ea(e,t){var n=t?Zo(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function ta(e,t){if(e!==t){var n=e!==a,r=null===e,o=e==e,i=Ls(e),s=t!==a,u=null===t,l=t==t,c=Ls(t);if(!u&&!c&&!i&&e>t||i&&s&&l&&!u&&!c||r&&s&&l||!n&&l||!o)return 1;if(!r&&!i&&!c&&e<t||c&&n&&o&&!r&&!i||u&&n&&o||!s&&o||!l)return-1}return 0}function na(e,t,n,o){for(var a=-1,i=e.length,s=n.length,u=-1,l=t.length,c=qn(i-s,0),d=r(l+c),f=!o;++u<l;)d[u]=t[u];for(;++a<s;)(f||a<i)&&(d[n[a]]=e[a]);for(;c--;)d[u++]=e[a++];return d}function ra(e,t,n,o){for(var a=-1,i=e.length,s=-1,u=n.length,l=-1,c=t.length,d=qn(i-u,0),f=r(d+c),p=!o;++a<d;)f[a]=e[a];for(var h=a;++l<c;)f[h+l]=t[l];for(;++s<u;)(p||a<i)&&(f[h+n[s]]=e[a++]);return f}function oa(e,t){var n=-1,o=e.length;for(t||(t=r(o));++n<o;)t[n]=e[n];return t}function aa(e,t,n,r){var o=!n;n||(n={});for(var i=-1,s=t.length;++i<s;){var u=t[i],l=r?r(n[u],e[u],u,n,e):a;l===a&&(l=e[u]),o?Ar(n,u,l):Pr(n,u,l)}return n}function ia(e,t){return function(n,r){var o=vs(n)?qt:Dr,a=t?t():{};return o(n,e,Ma(r,2),a)}}function sa(e){return So(function(t,n){var r=-1,o=n.length,i=o>1?n[o-1]:a,s=o>2?n[2]:a;for(i=e.length>3&&\"function\"==typeof i?(o--,i):a,s&&Ga(n[0],n[1],s)&&(i=o<3?a:i,o=1),t=tt(t);++r<o;){var u=n[r];u&&e(t,u,r,i)}return t})}function ua(e,t){return function(n,r){if(null==n)return n;if(!ys(n))return e(n,r);for(var o=n.length,a=t?o:-1,i=tt(n);(t?a--:++a<o)&&!1!==r(i[a],a,i););return n}}function la(e){return function(t,n,r){for(var o=-1,a=tt(t),i=r(t),s=i.length;s--;){var u=i[e?s:++o];if(!1===n(a[u],u,a))break}return t}}function ca(e){return function(t){var n=Sn(t=Ks(t))?An(t):a,r=n?n[0]:t.charAt(0),o=n?Xo(n,1).join(\"\"):t.slice(1);return r[e]()+o}}function da(e){return function(t){return tn(ku(gu(t).replace(bt,\"\")),e,\"\")}}function fa(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=mr(e.prototype),r=e.apply(n,t);return Os(r)?r:n}}function pa(e){return function(t,n,r){var o=tt(t);if(!ys(t)){var i=Ma(n,3);t=ou(t),n=function(e){return i(o[e],e,o)}}var s=e(t,n,r);return s>-1?o[i?t[s]:s]:a}}function ha(e){return Da(function(t){var n=t.length,r=n,o=vr.prototype.thru;for(e&&t.reverse();r--;){var i=t[r];if(\"function\"!=typeof i)throw new ot(u);if(o&&!s&&\"wrapper\"==La(i))var s=new vr([],!0)}for(r=s?r:n;++r<n;){var l=La(i=t[r]),c=\"wrapper\"==l?ja(i):a;s=c&&Xa(c[0])&&c[1]==(k|w|_|S)&&!c[4].length&&1==c[9]?s[La(c[0])].apply(s,c[3]):1==i.length&&Xa(i)?s[l]():s.thru(i)}return function(){var e=arguments,r=e[0];if(s&&1==e.length&&vs(r))return s.plant(r).value();for(var o=0,a=n?t[o].apply(this,e):r;++o<n;)a=t[o].call(this,a);return a}})}function ma(e,t,n,o,i,s,u,l,c,d){var f=t&k,p=t&v,h=t&b,m=t&(w|x),g=t&C,y=h?a:fa(e);return function v(){for(var b=arguments.length,w=r(b),x=b;x--;)w[x]=arguments[x];if(m)var _=Ra(v),E=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}(w,_);if(o&&(w=na(w,o,i,m)),s&&(w=ra(w,s,u,m)),b-=E,m&&b<d){var k=Tn(w,_);return _a(e,t,ma,v.placeholder,n,w,k,l,c,d-b)}var S=p?n:this,C=h?S[e]:e;return b=w.length,l?w=function(e,t){for(var n=e.length,r=zn(t.length,n),o=oa(e);r--;){var i=t[r];e[r]=za(i,n)?o[i]:a}return e}(w,l):g&&b>1&&w.reverse(),f&&c<b&&(w.length=c),this&&this!==At&&this instanceof v&&(C=y||fa(C)),C.apply(S,w)}}function ga(e,t){return function(n,r){return function(e,t,n,r){return Gr(e,function(e,o,a){t(r,n(e),o,a)}),r}(n,e,t(r),{})}}function va(e,t){return function(n,r){var o;if(n===a&&r===a)return t;if(n!==a&&(o=n),r!==a){if(o===a)return r;\"string\"==typeof n||\"string\"==typeof r?(n=Uo(n),r=Uo(r)):(n=Mo(n),r=Mo(r)),o=e(n,r)}return o}}function ba(e){return Da(function(t){return t=Zt(t,vn(Ma())),So(function(n){var r=this;return e(t,function(e){return Kt(e,r,n)})})})}function ya(e,t){var n=(t=t===a?\" \":Uo(t)).length;if(n<2)return n?ko(t,e):t;var r=ko(t,Bn(e/Nn(t)));return Sn(t)?Xo(An(r),0,e).join(\"\"):r.slice(0,e)}function wa(e){return function(t,n,o){return o&&\"number\"!=typeof o&&Ga(t,n,o)&&(n=o=a),t=Hs(t),n===a?(n=t,t=0):n=Hs(n),function(e,t,n,o){for(var a=-1,i=qn(Bn((t-e)/(n||1)),0),s=r(i);i--;)s[o?i:++a]=e,e+=n;return s}(t,n,o=o===a?t<n?1:-1:Hs(o),e)}}function xa(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=Vs(t),n=Vs(n)),e(t,n)}}function _a(e,t,n,r,o,i,s,u,l,c){var d=t&w;t|=d?_:E,(t&=~(d?E:_))&y||(t&=~(v|b));var f=[e,t,o,d?i:a,d?s:a,d?a:i,d?a:s,u,l,c],p=n.apply(a,f);return Xa(e)&&ri(p,f),p.placeholder=r,ii(p,e,t)}function Ea(e){var t=et[e];return function(e,n){if(e=Vs(e),n=null==n?0:zn($s(n),292)){var r=(Ks(e)+\"e\").split(\"e\");return+((r=(Ks(t(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return t(e)}}var ka=tr&&1/In(new tr([,-0]))[1]==A?function(e){return new tr(e)}:Lu;function Sa(e){return function(t){var n=Va(t);return n==X?Cn(t):n==ne?Dn(t):function(e,t){return Zt(t,function(t){return[t,e[t]]})}(t,e(t))}}function Ca(e,t,n,o,i,s,l,c){var f=t&b;if(!f&&\"function\"!=typeof e)throw new ot(u);var p=o?o.length:0;if(p||(t&=~(_|E),o=i=a),l=l===a?l:qn($s(l),0),c=c===a?c:$s(c),p-=i?i.length:0,t&E){var h=o,m=i;o=i=a}var g=f?a:ja(e),C=[e,t,n,o,i,h,m,s,l,c];if(g&&function(e,t){var n=e[1],r=t[1],o=n|r,a=o<(v|b|k),i=r==k&&n==w||r==k&&n==S&&e[7].length<=t[8]||r==(k|S)&&t[7].length<=t[8]&&n==w;if(!a&&!i)return e;r&v&&(e[2]=t[2],o|=n&v?0:y);var s=t[3];if(s){var u=e[3];e[3]=u?na(u,s,t[4]):s,e[4]=u?Tn(e[3],d):t[4]}(s=t[5])&&(u=e[5],e[5]=u?ra(u,s,t[6]):s,e[6]=u?Tn(e[5],d):t[6]),(s=t[7])&&(e[7]=s),r&k&&(e[8]=null==e[8]?t[8]:zn(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=o}(C,g),e=C[0],t=C[1],n=C[2],o=C[3],i=C[4],!(c=C[9]=C[9]===a?f?0:e.length:qn(C[9]-p,0))&&t&(w|x)&&(t&=~(w|x)),t&&t!=v)O=t==w||t==x?function(e,t,n){var o=fa(e);return function i(){for(var s=arguments.length,u=r(s),l=s,c=Ra(i);l--;)u[l]=arguments[l];var d=s<3&&u[0]!==c&&u[s-1]!==c?[]:Tn(u,c);return(s-=d.length)<n?_a(e,t,ma,i.placeholder,a,u,d,a,a,n-s):Kt(this&&this!==At&&this instanceof i?o:e,this,u)}}(e,t,c):t!=_&&t!=(v|_)||i.length?ma.apply(a,C):function(e,t,n,o){var a=t&v,i=fa(e);return function t(){for(var s=-1,u=arguments.length,l=-1,c=o.length,d=r(c+u),f=this&&this!==At&&this instanceof t?i:e;++l<c;)d[l]=o[l];for(;u--;)d[l++]=arguments[++s];return Kt(f,a?n:this,d)}}(e,t,n,o);else var O=function(e,t,n){var r=t&v,o=fa(e);return function t(){return(this&&this!==At&&this instanceof t?o:e).apply(r?n:this,arguments)}}(e,t,n);return ii((g?Po:ri)(O,C),e,t)}function Oa(e,t,n,r){return e===a||ps(e,st[n])&&!ct.call(r,n)?t:e}function Ta(e,t,n,r,o,i){return Os(e)&&Os(t)&&(i.set(t,e),vo(e,t,a,Ta,i),i.delete(t)),e}function Pa(e){return Ds(e)?a:e}function Ia(e,t,n,r,o,i){var s=n&m,u=e.length,l=t.length;if(u!=l&&!(s&&l>u))return!1;var c=i.get(e);if(c&&i.get(t))return c==t;var d=-1,f=!0,p=n&g?new _r:a;for(i.set(e,t),i.set(t,e);++d<u;){var h=e[d],v=t[d];if(r)var b=s?r(v,h,d,t,e,i):r(h,v,d,e,t,i);if(b!==a){if(b)continue;f=!1;break}if(p){if(!rn(t,function(e,t){if(!yn(p,t)&&(h===e||o(h,e,n,r,i)))return p.push(t)})){f=!1;break}}else if(h!==v&&!o(h,v,n,r,i)){f=!1;break}}return i.delete(e),i.delete(t),f}function Da(e){return ai(ti(e,a,bi),e+\"\")}function Na(e){return Jr(e,ou,$a)}function Aa(e){return Jr(e,au,Fa)}var ja=or?function(e){return or.get(e)}:Lu;function La(e){for(var t=e.name+\"\",n=ar[t],r=ct.call(ar,t)?n.length:0;r--;){var o=n[r],a=o.func;if(null==a||a==e)return o.name}return t}function Ra(e){return(ct.call(hr,\"placeholder\")?hr:e).placeholder}function Ma(){var e=hr.iteratee||Du;return e=e===Du?lo:e,arguments.length?e(arguments[0],arguments[1]):e}function Ua(e,t){var n,r,o=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function Ba(e){for(var t=ou(e),n=t.length;n--;){var r=t[n],o=e[r];t[n]=[r,o,Za(o)]}return t}function Ha(e,t){var n=function(e,t){return null==e?a:e[t]}(e,t);return uo(n)?n:a}var $a=$n?function(e){return null==e?[]:(e=tt(e),Xt($n(e),function(t){return jt.call(e,t)}))}:Fu,Fa=$n?function(e){for(var t=[];e;)en(t,$a(e)),e=Dt(e);return t}:Fu,Va=Zr;function Wa(e,t,n){for(var r=-1,o=(t=Go(t,e)).length,a=!1;++r<o;){var i=ci(t[r]);if(!(a=null!=e&&n(e,i)))break;e=e[i]}return a||++r!=o?a:!!(o=null==e?0:e.length)&&Cs(o)&&za(i,o)&&(vs(e)||gs(e))}function Ka(e){return\"function\"!=typeof e.constructor||Ja(e)?{}:mr(Dt(e))}function qa(e){return vs(e)||gs(e)||!!(Mt&&e&&e[Mt])}function za(e,t){var n=typeof e;return!!(t=null==t?j:t)&&(\"number\"==n||\"symbol\"!=n&&Ge.test(e))&&e>-1&&e%1==0&&e<t}function Ga(e,t,n){if(!Os(n))return!1;var r=typeof t;return!!(\"number\"==r?ys(n)&&za(t,n.length):\"string\"==r&&t in n)&&ps(n[t],e)}function Ya(e,t){if(vs(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!Ls(e))||Ie.test(e)||!Pe.test(e)||null!=t&&e in tt(t)}function Xa(e){var t=La(e),n=hr[t];if(\"function\"!=typeof n||!(t in br.prototype))return!1;if(e===n)return!0;var r=ja(n);return!!r&&e===r[0]}(Jn&&Va(new Jn(new ArrayBuffer(1)))!=le||Zn&&Va(new Zn)!=X||er&&\"[object Promise]\"!=Va(er.resolve())||tr&&Va(new tr)!=ne||nr&&Va(new nr)!=ie)&&(Va=function(e){var t=Zr(e),n=t==Z?e.constructor:a,r=n?di(n):\"\";if(r)switch(r){case ir:return le;case sr:return X;case ur:return\"[object Promise]\";case lr:return ne;case cr:return ie}return t});var Qa=ut?ks:Vu;function Ja(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||st)}function Za(e){return e==e&&!Os(e)}function ei(e,t){return function(n){return null!=n&&n[e]===t&&(t!==a||e in tt(n))}}function ti(e,t,n){return t=qn(t===a?e.length-1:t,0),function(){for(var o=arguments,a=-1,i=qn(o.length-t,0),s=r(i);++a<i;)s[a]=o[t+a];a=-1;for(var u=r(t+1);++a<t;)u[a]=o[a];return u[t]=n(s),Kt(e,this,u)}}function ni(e,t){return t.length<2?e:Qr(e,No(t,0,-1))}var ri=si(Po),oi=Un||function(e,t){return At.setTimeout(e,t)},ai=si(Io);function ii(e,t,n){var r=t+\"\";return ai(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?\"& \":\"\")+t[r],t=t.join(n>2?\", \":\" \"),e.replace(Me,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(r,function(e,t){return zt(H,function(n){var r=\"_.\"+n[0];t&n[1]&&!Qt(e,r)&&e.push(r)}),e.sort()}(function(e){var t=e.match(Ue);return t?t[1].split(Be):[]}(r),n)))}function si(e){var t=0,n=0;return function(){var r=Gn(),o=I-(r-n);if(n=r,o>0){if(++t>=P)return arguments[0]}else t=0;return e.apply(a,arguments)}}function ui(e,t){var n=-1,r=e.length,o=r-1;for(t=t===a?r:t;++n<t;){var i=Eo(n,o),s=e[i];e[i]=e[n],e[n]=s}return e.length=t,e}var li=function(e){var t=ss(e,function(e){return n.size===c&&n.clear(),e}),n=t.cache;return t}(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(De,function(e,n,r,o){t.push(r?o.replace($e,\"$1\"):n||e)}),t});function ci(e){if(\"string\"==typeof e||Ls(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-A?\"-0\":t}function di(e){if(null!=e){try{return lt.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function fi(e){if(e instanceof br)return e.clone();var t=new vr(e.__wrapped__,e.__chain__);return t.__actions__=oa(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var pi=So(function(e,t){return ws(e)?Br(e,Kr(t,1,ws,!0)):[]}),hi=So(function(e,t){var n=Ei(t);return ws(n)&&(n=a),ws(e)?Br(e,Kr(t,1,ws,!0),Ma(n,2)):[]}),mi=So(function(e,t){var n=Ei(t);return ws(n)&&(n=a),ws(e)?Br(e,Kr(t,1,ws,!0),a,n):[]});function gi(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=null==n?0:$s(n);return o<0&&(o=qn(r+o,0)),sn(e,Ma(t,3),o)}function vi(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=r-1;return n!==a&&(o=$s(n),o=n<0?qn(r+o,0):zn(o,r-1)),sn(e,Ma(t,3),o,!0)}function bi(e){return null!=e&&e.length?Kr(e,1):[]}function yi(e){return e&&e.length?e[0]:a}var wi=So(function(e){var t=Zt(e,qo);return t.length&&t[0]===e[0]?ro(t):[]}),xi=So(function(e){var t=Ei(e),n=Zt(e,qo);return t===Ei(n)?t=a:n.pop(),n.length&&n[0]===e[0]?ro(n,Ma(t,2)):[]}),_i=So(function(e){var t=Ei(e),n=Zt(e,qo);return(t=\"function\"==typeof t?t:a)&&n.pop(),n.length&&n[0]===e[0]?ro(n,a,t):[]});function Ei(e){var t=null==e?0:e.length;return t?e[t-1]:a}var ki=So(Si);function Si(e,t){return e&&e.length&&t&&t.length?xo(e,t):e}var Ci=Da(function(e,t){var n=null==e?0:e.length,r=jr(e,t);return _o(e,Zt(t,function(e){return za(e,n)?+e:e}).sort(ta)),r});function Oi(e){return null==e?e:Qn.call(e)}var Ti=So(function(e){return Bo(Kr(e,1,ws,!0))}),Pi=So(function(e){var t=Ei(e);return ws(t)&&(t=a),Bo(Kr(e,1,ws,!0),Ma(t,2))}),Ii=So(function(e){var t=Ei(e);return t=\"function\"==typeof t?t:a,Bo(Kr(e,1,ws,!0),a,t)});function Di(e){if(!e||!e.length)return[];var t=0;return e=Xt(e,function(e){if(ws(e))return t=qn(e.length,t),!0}),gn(t,function(t){return Zt(e,fn(t))})}function Ni(e,t){if(!e||!e.length)return[];var n=Di(e);return null==t?n:Zt(n,function(e){return Kt(t,a,e)})}var Ai=So(function(e,t){return ws(e)?Br(e,t):[]}),ji=So(function(e){return Wo(Xt(e,ws))}),Li=So(function(e){var t=Ei(e);return ws(t)&&(t=a),Wo(Xt(e,ws),Ma(t,2))}),Ri=So(function(e){var t=Ei(e);return t=\"function\"==typeof t?t:a,Wo(Xt(e,ws),a,t)}),Mi=So(Di);var Ui=So(function(e){var t=e.length,n=t>1?e[t-1]:a;return Ni(e,n=\"function\"==typeof n?(e.pop(),n):a)});function Bi(e){var t=hr(e);return t.__chain__=!0,t}function Hi(e,t){return t(e)}var $i=Da(function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,o=function(t){return jr(t,e)};return!(t>1||this.__actions__.length)&&r instanceof br&&za(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:Hi,args:[o],thisArg:a}),new vr(r,this.__chain__).thru(function(e){return t&&!e.length&&e.push(a),e})):this.thru(o)});var Fi=ia(function(e,t,n){ct.call(e,n)?++e[n]:Ar(e,n,1)});var Vi=pa(gi),Wi=pa(vi);function Ki(e,t){return(vs(e)?zt:Hr)(e,Ma(t,3))}function qi(e,t){return(vs(e)?Gt:$r)(e,Ma(t,3))}var zi=ia(function(e,t,n){ct.call(e,n)?e[n].push(t):Ar(e,n,[t])});var Gi=So(function(e,t,n){var o=-1,a=\"function\"==typeof t,i=ys(e)?r(e.length):[];return Hr(e,function(e){i[++o]=a?Kt(t,e,n):oo(e,t,n)}),i}),Yi=ia(function(e,t,n){Ar(e,n,t)});function Xi(e,t){return(vs(e)?Zt:ho)(e,Ma(t,3))}var Qi=ia(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]});var Ji=So(function(e,t){if(null==e)return[];var n=t.length;return n>1&&Ga(e,t[0],t[1])?t=[]:n>2&&Ga(t[0],t[1],t[2])&&(t=[t[0]]),yo(e,Kr(t,1),[])}),Zi=Mn||function(){return At.Date.now()};function es(e,t,n){return t=n?a:t,t=e&&null==t?e.length:t,Ca(e,k,a,a,a,a,t)}function ts(e,t){var n;if(\"function\"!=typeof t)throw new ot(u);return e=$s(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=a),n}}var ns=So(function(e,t,n){var r=v;if(n.length){var o=Tn(n,Ra(ns));r|=_}return Ca(e,r,t,n,o)}),rs=So(function(e,t,n){var r=v|b;if(n.length){var o=Tn(n,Ra(rs));r|=_}return Ca(t,r,e,n,o)});function os(e,t,n){var r,o,i,s,l,c,d=0,f=!1,p=!1,h=!0;if(\"function\"!=typeof e)throw new ot(u);function m(t){var n=r,i=o;return r=o=a,d=t,s=e.apply(i,n)}function g(e){var n=e-c;return c===a||n>=t||n<0||p&&e-d>=i}function v(){var e=Zi();if(g(e))return b(e);l=oi(v,function(e){var n=t-(e-c);return p?zn(n,i-(e-d)):n}(e))}function b(e){return l=a,h&&r?m(e):(r=o=a,s)}function y(){var e=Zi(),n=g(e);if(r=arguments,o=this,c=e,n){if(l===a)return function(e){return d=e,l=oi(v,t),f?m(e):s}(c);if(p)return l=oi(v,t),m(c)}return l===a&&(l=oi(v,t)),s}return t=Vs(t)||0,Os(n)&&(f=!!n.leading,i=(p=\"maxWait\"in n)?qn(Vs(n.maxWait)||0,t):i,h=\"trailing\"in n?!!n.trailing:h),y.cancel=function(){l!==a&&Qo(l),d=0,r=c=o=l=a},y.flush=function(){return l===a?s:b(Zi())},y}var as=So(function(e,t){return Ur(e,1,t)}),is=So(function(e,t,n){return Ur(e,Vs(t)||0,n)});function ss(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new ot(u);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],a=n.cache;if(a.has(o))return a.get(o);var i=e.apply(this,r);return n.cache=a.set(o,i)||a,i};return n.cache=new(ss.Cache||xr),n}function us(e){if(\"function\"!=typeof e)throw new ot(u);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}ss.Cache=xr;var ls=Yo(function(e,t){var n=(t=1==t.length&&vs(t[0])?Zt(t[0],vn(Ma())):Zt(Kr(t,1),vn(Ma()))).length;return So(function(r){for(var o=-1,a=zn(r.length,n);++o<a;)r[o]=t[o].call(this,r[o]);return Kt(e,this,r)})}),cs=So(function(e,t){var n=Tn(t,Ra(cs));return Ca(e,_,a,t,n)}),ds=So(function(e,t){var n=Tn(t,Ra(ds));return Ca(e,E,a,t,n)}),fs=Da(function(e,t){return Ca(e,S,a,a,a,t)});function ps(e,t){return e===t||e!=e&&t!=t}var hs=xa(eo),ms=xa(function(e,t){return e>=t}),gs=ao(function(){return arguments}())?ao:function(e){return Ts(e)&&ct.call(e,\"callee\")&&!jt.call(e,\"callee\")},vs=r.isArray,bs=Bt?vn(Bt):function(e){return Ts(e)&&Zr(e)==ue};function ys(e){return null!=e&&Cs(e.length)&&!ks(e)}function ws(e){return Ts(e)&&ys(e)}var xs=Fn||Vu,_s=Ht?vn(Ht):function(e){return Ts(e)&&Zr(e)==K};function Es(e){if(!Ts(e))return!1;var t=Zr(e);return t==z||t==q||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!Ds(e)}function ks(e){if(!Os(e))return!1;var t=Zr(e);return t==G||t==Y||t==V||t==ee}function Ss(e){return\"number\"==typeof e&&e==$s(e)}function Cs(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=j}function Os(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function Ts(e){return null!=e&&\"object\"==typeof e}var Ps=$t?vn($t):function(e){return Ts(e)&&Va(e)==X};function Is(e){return\"number\"==typeof e||Ts(e)&&Zr(e)==Q}function Ds(e){if(!Ts(e)||Zr(e)!=Z)return!1;var t=Dt(e);if(null===t)return!0;var n=ct.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&lt.call(n)==ht}var Ns=Ft?vn(Ft):function(e){return Ts(e)&&Zr(e)==te};var As=Vt?vn(Vt):function(e){return Ts(e)&&Va(e)==ne};function js(e){return\"string\"==typeof e||!vs(e)&&Ts(e)&&Zr(e)==re}function Ls(e){return\"symbol\"==typeof e||Ts(e)&&Zr(e)==oe}var Rs=Wt?vn(Wt):function(e){return Ts(e)&&Cs(e.length)&&!!Ct[Zr(e)]};var Ms=xa(po),Us=xa(function(e,t){return e<=t});function Bs(e){if(!e)return[];if(ys(e))return js(e)?An(e):oa(e);if(Ut&&e[Ut])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Ut]());var t=Va(e);return(t==X?Cn:t==ne?In:pu)(e)}function Hs(e){return e?(e=Vs(e))===A||e===-A?(e<0?-1:1)*L:e==e?e:0:0===e?e:0}function $s(e){var t=Hs(e),n=t%1;return t==t?n?t-n:t:0}function Fs(e){return e?Lr($s(e),0,M):0}function Vs(e){if(\"number\"==typeof e)return e;if(Ls(e))return R;if(Os(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=Os(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(je,\"\");var n=Ke.test(e);return n||ze.test(e)?It(e.slice(2),n?2:8):We.test(e)?R:+e}function Ws(e){return aa(e,au(e))}function Ks(e){return null==e?\"\":Uo(e)}var qs=sa(function(e,t){if(Ja(t)||ys(t))aa(t,ou(t),e);else for(var n in t)ct.call(t,n)&&Pr(e,n,t[n])}),zs=sa(function(e,t){aa(t,au(t),e)}),Gs=sa(function(e,t,n,r){aa(t,au(t),e,r)}),Ys=sa(function(e,t,n,r){aa(t,ou(t),e,r)}),Xs=Da(jr);var Qs=So(function(e,t){e=tt(e);var n=-1,r=t.length,o=r>2?t[2]:a;for(o&&Ga(t[0],t[1],o)&&(r=1);++n<r;)for(var i=t[n],s=au(i),u=-1,l=s.length;++u<l;){var c=s[u],d=e[c];(d===a||ps(d,st[c])&&!ct.call(e,c))&&(e[c]=i[c])}return e}),Js=So(function(e){return e.push(a,Ta),Kt(su,a,e)});function Zs(e,t,n){var r=null==e?a:Qr(e,t);return r===a?n:r}function eu(e,t){return null!=e&&Wa(e,t,no)}var tu=ga(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=pt.call(t)),e[t]=n},Ou(Iu)),nu=ga(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=pt.call(t)),ct.call(e,t)?e[t].push(n):e[t]=[n]},Ma),ru=So(oo);function ou(e){return ys(e)?kr(e):co(e)}function au(e){return ys(e)?kr(e,!0):fo(e)}var iu=sa(function(e,t,n){vo(e,t,n)}),su=sa(function(e,t,n,r){vo(e,t,n,r)}),uu=Da(function(e,t){var n={};if(null==e)return n;var r=!1;t=Zt(t,function(t){return t=Go(t,e),r||(r=t.length>1),t}),aa(e,Aa(e),n),r&&(n=Rr(n,f|p|h,Pa));for(var o=t.length;o--;)Ho(n,t[o]);return n});var lu=Da(function(e,t){return null==e?{}:function(e,t){return wo(e,t,function(t,n){return eu(e,n)})}(e,t)});function cu(e,t){if(null==e)return{};var n=Zt(Aa(e),function(e){return[e]});return t=Ma(t),wo(e,n,function(e,n){return t(e,n[0])})}var du=Sa(ou),fu=Sa(au);function pu(e){return null==e?[]:bn(e,ou(e))}var hu=da(function(e,t,n){return t=t.toLowerCase(),e+(n?mu(t):t)});function mu(e){return Eu(Ks(e).toLowerCase())}function gu(e){return(e=Ks(e))&&e.replace(Ye,_n).replace(yt,\"\")}var vu=da(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),bu=da(function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()}),yu=ca(\"toLowerCase\");var wu=da(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()});var xu=da(function(e,t,n){return e+(n?\" \":\"\")+Eu(t)});var _u=da(function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()}),Eu=ca(\"toUpperCase\");function ku(e,t,n){return e=Ks(e),(t=n?a:t)===a?function(e){return Et.test(e)}(e)?function(e){return e.match(xt)||[]}(e):function(e){return e.match(He)||[]}(e):e.match(t)||[]}var Su=So(function(e,t){try{return Kt(e,a,t)}catch(e){return Es(e)?e:new Je(e)}}),Cu=Da(function(e,t){return zt(t,function(t){t=ci(t),Ar(e,t,ns(e[t],e))}),e});function Ou(e){return function(){return e}}var Tu=ha(),Pu=ha(!0);function Iu(e){return e}function Du(e){return lo(\"function\"==typeof e?e:Rr(e,f))}var Nu=So(function(e,t){return function(n){return oo(n,e,t)}}),Au=So(function(e,t){return function(n){return oo(e,n,t)}});function ju(e,t,n){var r=ou(t),o=Xr(t,r);null!=n||Os(t)&&(o.length||!r.length)||(n=t,t=e,e=this,o=Xr(t,ou(t)));var a=!(Os(n)&&\"chain\"in n&&!n.chain),i=ks(e);return zt(o,function(n){var r=t[n];e[n]=r,i&&(e.prototype[n]=function(){var t=this.__chain__;if(a||t){var n=e(this.__wrapped__);return(n.__actions__=oa(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,en([this.value()],arguments))})}),e}function Lu(){}var Ru=ba(Zt),Mu=ba(Yt),Uu=ba(rn);function Bu(e){return Ya(e)?fn(ci(e)):function(e){return function(t){return Qr(t,e)}}(e)}var Hu=wa(),$u=wa(!0);function Fu(){return[]}function Vu(){return!1}var Wu=va(function(e,t){return e+t},0),Ku=Ea(\"ceil\"),qu=va(function(e,t){return e/t},1),zu=Ea(\"floor\");var Gu,Yu=va(function(e,t){return e*t},1),Xu=Ea(\"round\"),Qu=va(function(e,t){return e-t},0);return hr.after=function(e,t){if(\"function\"!=typeof t)throw new ot(u);return e=$s(e),function(){if(--e<1)return t.apply(this,arguments)}},hr.ary=es,hr.assign=qs,hr.assignIn=zs,hr.assignInWith=Gs,hr.assignWith=Ys,hr.at=Xs,hr.before=ts,hr.bind=ns,hr.bindAll=Cu,hr.bindKey=rs,hr.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return vs(e)?e:[e]},hr.chain=Bi,hr.chunk=function(e,t,n){t=(n?Ga(e,t,n):t===a)?1:qn($s(t),0);var o=null==e?0:e.length;if(!o||t<1)return[];for(var i=0,s=0,u=r(Bn(o/t));i<o;)u[s++]=No(e,i,i+=t);return u},hr.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,o=[];++t<n;){var a=e[t];a&&(o[r++]=a)}return o},hr.concat=function(){var e=arguments.length;if(!e)return[];for(var t=r(e-1),n=arguments[0],o=e;o--;)t[o-1]=arguments[o];return en(vs(n)?oa(n):[n],Kr(t,1))},hr.cond=function(e){var t=null==e?0:e.length,n=Ma();return e=t?Zt(e,function(e){if(\"function\"!=typeof e[1])throw new ot(u);return[n(e[0]),e[1]]}):[],So(function(n){for(var r=-1;++r<t;){var o=e[r];if(Kt(o[0],this,n))return Kt(o[1],this,n)}})},hr.conforms=function(e){return function(e){var t=ou(e);return function(n){return Mr(n,e,t)}}(Rr(e,f))},hr.constant=Ou,hr.countBy=Fi,hr.create=function(e,t){var n=mr(e);return null==t?n:Nr(n,t)},hr.curry=function e(t,n,r){var o=Ca(t,w,a,a,a,a,a,n=r?a:n);return o.placeholder=e.placeholder,o},hr.curryRight=function e(t,n,r){var o=Ca(t,x,a,a,a,a,a,n=r?a:n);return o.placeholder=e.placeholder,o},hr.debounce=os,hr.defaults=Qs,hr.defaultsDeep=Js,hr.defer=as,hr.delay=is,hr.difference=pi,hr.differenceBy=hi,hr.differenceWith=mi,hr.drop=function(e,t,n){var r=null==e?0:e.length;return r?No(e,(t=n||t===a?1:$s(t))<0?0:t,r):[]},hr.dropRight=function(e,t,n){var r=null==e?0:e.length;return r?No(e,0,(t=r-(t=n||t===a?1:$s(t)))<0?0:t):[]},hr.dropRightWhile=function(e,t){return e&&e.length?Fo(e,Ma(t,3),!0,!0):[]},hr.dropWhile=function(e,t){return e&&e.length?Fo(e,Ma(t,3),!0):[]},hr.fill=function(e,t,n,r){var o=null==e?0:e.length;return o?(n&&\"number\"!=typeof n&&Ga(e,t,n)&&(n=0,r=o),function(e,t,n,r){var o=e.length;for((n=$s(n))<0&&(n=-n>o?0:o+n),(r=r===a||r>o?o:$s(r))<0&&(r+=o),r=n>r?0:Fs(r);n<r;)e[n++]=t;return e}(e,t,n,r)):[]},hr.filter=function(e,t){return(vs(e)?Xt:Wr)(e,Ma(t,3))},hr.flatMap=function(e,t){return Kr(Xi(e,t),1)},hr.flatMapDeep=function(e,t){return Kr(Xi(e,t),A)},hr.flatMapDepth=function(e,t,n){return n=n===a?1:$s(n),Kr(Xi(e,t),n)},hr.flatten=bi,hr.flattenDeep=function(e){return null!=e&&e.length?Kr(e,A):[]},hr.flattenDepth=function(e,t){return null!=e&&e.length?Kr(e,t=t===a?1:$s(t)):[]},hr.flip=function(e){return Ca(e,C)},hr.flow=Tu,hr.flowRight=Pu,hr.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var o=e[t];r[o[0]]=o[1]}return r},hr.functions=function(e){return null==e?[]:Xr(e,ou(e))},hr.functionsIn=function(e){return null==e?[]:Xr(e,au(e))},hr.groupBy=zi,hr.initial=function(e){return null!=e&&e.length?No(e,0,-1):[]},hr.intersection=wi,hr.intersectionBy=xi,hr.intersectionWith=_i,hr.invert=tu,hr.invertBy=nu,hr.invokeMap=Gi,hr.iteratee=Du,hr.keyBy=Yi,hr.keys=ou,hr.keysIn=au,hr.map=Xi,hr.mapKeys=function(e,t){var n={};return t=Ma(t,3),Gr(e,function(e,r,o){Ar(n,t(e,r,o),e)}),n},hr.mapValues=function(e,t){var n={};return t=Ma(t,3),Gr(e,function(e,r,o){Ar(n,r,t(e,r,o))}),n},hr.matches=function(e){return mo(Rr(e,f))},hr.matchesProperty=function(e,t){return go(e,Rr(t,f))},hr.memoize=ss,hr.merge=iu,hr.mergeWith=su,hr.method=Nu,hr.methodOf=Au,hr.mixin=ju,hr.negate=us,hr.nthArg=function(e){return e=$s(e),So(function(t){return bo(t,e)})},hr.omit=uu,hr.omitBy=function(e,t){return cu(e,us(Ma(t)))},hr.once=function(e){return ts(2,e)},hr.orderBy=function(e,t,n,r){return null==e?[]:(vs(t)||(t=null==t?[]:[t]),vs(n=r?a:n)||(n=null==n?[]:[n]),yo(e,t,n))},hr.over=Ru,hr.overArgs=ls,hr.overEvery=Mu,hr.overSome=Uu,hr.partial=cs,hr.partialRight=ds,hr.partition=Qi,hr.pick=lu,hr.pickBy=cu,hr.property=Bu,hr.propertyOf=function(e){return function(t){return null==e?a:Qr(e,t)}},hr.pull=ki,hr.pullAll=Si,hr.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?xo(e,t,Ma(n,2)):e},hr.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?xo(e,t,a,n):e},hr.pullAt=Ci,hr.range=Hu,hr.rangeRight=$u,hr.rearg=fs,hr.reject=function(e,t){return(vs(e)?Xt:Wr)(e,us(Ma(t,3)))},hr.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,o=[],a=e.length;for(t=Ma(t,3);++r<a;){var i=e[r];t(i,r,e)&&(n.push(i),o.push(r))}return _o(e,o),n},hr.rest=function(e,t){if(\"function\"!=typeof e)throw new ot(u);return So(e,t=t===a?t:$s(t))},hr.reverse=Oi,hr.sampleSize=function(e,t,n){return t=(n?Ga(e,t,n):t===a)?1:$s(t),(vs(e)?Cr:Oo)(e,t)},hr.set=function(e,t,n){return null==e?e:To(e,t,n)},hr.setWith=function(e,t,n,r){return r=\"function\"==typeof r?r:a,null==e?e:To(e,t,n,r)},hr.shuffle=function(e){return(vs(e)?Or:Do)(e)},hr.slice=function(e,t,n){var r=null==e?0:e.length;return r?(n&&\"number\"!=typeof n&&Ga(e,t,n)?(t=0,n=r):(t=null==t?0:$s(t),n=n===a?r:$s(n)),No(e,t,n)):[]},hr.sortBy=Ji,hr.sortedUniq=function(e){return e&&e.length?Ro(e):[]},hr.sortedUniqBy=function(e,t){return e&&e.length?Ro(e,Ma(t,2)):[]},hr.split=function(e,t,n){return n&&\"number\"!=typeof n&&Ga(e,t,n)&&(t=n=a),(n=n===a?M:n>>>0)?(e=Ks(e))&&(\"string\"==typeof t||null!=t&&!Ns(t))&&!(t=Uo(t))&&Sn(e)?Xo(An(e),0,n):e.split(t,n):[]},hr.spread=function(e,t){if(\"function\"!=typeof e)throw new ot(u);return t=null==t?0:qn($s(t),0),So(function(n){var r=n[t],o=Xo(n,0,t);return r&&en(o,r),Kt(e,this,o)})},hr.tail=function(e){var t=null==e?0:e.length;return t?No(e,1,t):[]},hr.take=function(e,t,n){return e&&e.length?No(e,0,(t=n||t===a?1:$s(t))<0?0:t):[]},hr.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?No(e,(t=r-(t=n||t===a?1:$s(t)))<0?0:t,r):[]},hr.takeRightWhile=function(e,t){return e&&e.length?Fo(e,Ma(t,3),!1,!0):[]},hr.takeWhile=function(e,t){return e&&e.length?Fo(e,Ma(t,3)):[]},hr.tap=function(e,t){return t(e),e},hr.throttle=function(e,t,n){var r=!0,o=!0;if(\"function\"!=typeof e)throw new ot(u);return Os(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),os(e,t,{leading:r,maxWait:t,trailing:o})},hr.thru=Hi,hr.toArray=Bs,hr.toPairs=du,hr.toPairsIn=fu,hr.toPath=function(e){return vs(e)?Zt(e,ci):Ls(e)?[e]:oa(li(Ks(e)))},hr.toPlainObject=Ws,hr.transform=function(e,t,n){var r=vs(e),o=r||xs(e)||Rs(e);if(t=Ma(t,4),null==n){var a=e&&e.constructor;n=o?r?new a:[]:Os(e)&&ks(a)?mr(Dt(e)):{}}return(o?zt:Gr)(e,function(e,r,o){return t(n,e,r,o)}),n},hr.unary=function(e){return es(e,1)},hr.union=Ti,hr.unionBy=Pi,hr.unionWith=Ii,hr.uniq=function(e){return e&&e.length?Bo(e):[]},hr.uniqBy=function(e,t){return e&&e.length?Bo(e,Ma(t,2)):[]},hr.uniqWith=function(e,t){return t=\"function\"==typeof t?t:a,e&&e.length?Bo(e,a,t):[]},hr.unset=function(e,t){return null==e||Ho(e,t)},hr.unzip=Di,hr.unzipWith=Ni,hr.update=function(e,t,n){return null==e?e:$o(e,t,zo(n))},hr.updateWith=function(e,t,n,r){return r=\"function\"==typeof r?r:a,null==e?e:$o(e,t,zo(n),r)},hr.values=pu,hr.valuesIn=function(e){return null==e?[]:bn(e,au(e))},hr.without=Ai,hr.words=ku,hr.wrap=function(e,t){return cs(zo(t),e)},hr.xor=ji,hr.xorBy=Li,hr.xorWith=Ri,hr.zip=Mi,hr.zipObject=function(e,t){return Ko(e||[],t||[],Pr)},hr.zipObjectDeep=function(e,t){return Ko(e||[],t||[],To)},hr.zipWith=Ui,hr.entries=du,hr.entriesIn=fu,hr.extend=zs,hr.extendWith=Gs,ju(hr,hr),hr.add=Wu,hr.attempt=Su,hr.camelCase=hu,hr.capitalize=mu,hr.ceil=Ku,hr.clamp=function(e,t,n){return n===a&&(n=t,t=a),n!==a&&(n=(n=Vs(n))==n?n:0),t!==a&&(t=(t=Vs(t))==t?t:0),Lr(Vs(e),t,n)},hr.clone=function(e){return Rr(e,h)},hr.cloneDeep=function(e){return Rr(e,f|h)},hr.cloneDeepWith=function(e,t){return Rr(e,f|h,t=\"function\"==typeof t?t:a)},hr.cloneWith=function(e,t){return Rr(e,h,t=\"function\"==typeof t?t:a)},hr.conformsTo=function(e,t){return null==t||Mr(e,t,ou(t))},hr.deburr=gu,hr.defaultTo=function(e,t){return null==e||e!=e?t:e},hr.divide=qu,hr.endsWith=function(e,t,n){e=Ks(e),t=Uo(t);var r=e.length,o=n=n===a?r:Lr($s(n),0,r);return(n-=t.length)>=0&&e.slice(n,o)==t},hr.eq=ps,hr.escape=function(e){return(e=Ks(e))&&Se.test(e)?e.replace(Ee,En):e},hr.escapeRegExp=function(e){return(e=Ks(e))&&Ae.test(e)?e.replace(Ne,\"\\\\$&\"):e},hr.every=function(e,t,n){var r=vs(e)?Yt:Fr;return n&&Ga(e,t,n)&&(t=a),r(e,Ma(t,3))},hr.find=Vi,hr.findIndex=gi,hr.findKey=function(e,t){return an(e,Ma(t,3),Gr)},hr.findLast=Wi,hr.findLastIndex=vi,hr.findLastKey=function(e,t){return an(e,Ma(t,3),Yr)},hr.floor=zu,hr.forEach=Ki,hr.forEachRight=qi,hr.forIn=function(e,t){return null==e?e:qr(e,Ma(t,3),au)},hr.forInRight=function(e,t){return null==e?e:zr(e,Ma(t,3),au)},hr.forOwn=function(e,t){return e&&Gr(e,Ma(t,3))},hr.forOwnRight=function(e,t){return e&&Yr(e,Ma(t,3))},hr.get=Zs,hr.gt=hs,hr.gte=ms,hr.has=function(e,t){return null!=e&&Wa(e,t,to)},hr.hasIn=eu,hr.head=yi,hr.identity=Iu,hr.includes=function(e,t,n,r){e=ys(e)?e:pu(e),n=n&&!r?$s(n):0;var o=e.length;return n<0&&(n=qn(o+n,0)),js(e)?n<=o&&e.indexOf(t,n)>-1:!!o&&un(e,t,n)>-1},hr.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=null==n?0:$s(n);return o<0&&(o=qn(r+o,0)),un(e,t,o)},hr.inRange=function(e,t,n){return t=Hs(t),n===a?(n=t,t=0):n=Hs(n),function(e,t,n){return e>=zn(t,n)&&e<qn(t,n)}(e=Vs(e),t,n)},hr.invoke=ru,hr.isArguments=gs,hr.isArray=vs,hr.isArrayBuffer=bs,hr.isArrayLike=ys,hr.isArrayLikeObject=ws,hr.isBoolean=function(e){return!0===e||!1===e||Ts(e)&&Zr(e)==W},hr.isBuffer=xs,hr.isDate=_s,hr.isElement=function(e){return Ts(e)&&1===e.nodeType&&!Ds(e)},hr.isEmpty=function(e){if(null==e)return!0;if(ys(e)&&(vs(e)||\"string\"==typeof e||\"function\"==typeof e.splice||xs(e)||Rs(e)||gs(e)))return!e.length;var t=Va(e);if(t==X||t==ne)return!e.size;if(Ja(e))return!co(e).length;for(var n in e)if(ct.call(e,n))return!1;return!0},hr.isEqual=function(e,t){return io(e,t)},hr.isEqualWith=function(e,t,n){var r=(n=\"function\"==typeof n?n:a)?n(e,t):a;return r===a?io(e,t,a,n):!!r},hr.isError=Es,hr.isFinite=function(e){return\"number\"==typeof e&&Vn(e)},hr.isFunction=ks,hr.isInteger=Ss,hr.isLength=Cs,hr.isMap=Ps,hr.isMatch=function(e,t){return e===t||so(e,t,Ba(t))},hr.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:a,so(e,t,Ba(t),n)},hr.isNaN=function(e){return Is(e)&&e!=+e},hr.isNative=function(e){if(Qa(e))throw new Je(s);return uo(e)},hr.isNil=function(e){return null==e},hr.isNull=function(e){return null===e},hr.isNumber=Is,hr.isObject=Os,hr.isObjectLike=Ts,hr.isPlainObject=Ds,hr.isRegExp=Ns,hr.isSafeInteger=function(e){return Ss(e)&&e>=-j&&e<=j},hr.isSet=As,hr.isString=js,hr.isSymbol=Ls,hr.isTypedArray=Rs,hr.isUndefined=function(e){return e===a},hr.isWeakMap=function(e){return Ts(e)&&Va(e)==ie},hr.isWeakSet=function(e){return Ts(e)&&Zr(e)==se},hr.join=function(e,t){return null==e?\"\":Wn.call(e,t)},hr.kebabCase=vu,hr.last=Ei,hr.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=r;return n!==a&&(o=(o=$s(n))<0?qn(r+o,0):zn(o,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,o):sn(e,cn,o,!0)},hr.lowerCase=bu,hr.lowerFirst=yu,hr.lt=Ms,hr.lte=Us,hr.max=function(e){return e&&e.length?Vr(e,Iu,eo):a},hr.maxBy=function(e,t){return e&&e.length?Vr(e,Ma(t,2),eo):a},hr.mean=function(e){return dn(e,Iu)},hr.meanBy=function(e,t){return dn(e,Ma(t,2))},hr.min=function(e){return e&&e.length?Vr(e,Iu,po):a},hr.minBy=function(e,t){return e&&e.length?Vr(e,Ma(t,2),po):a},hr.stubArray=Fu,hr.stubFalse=Vu,hr.stubObject=function(){return{}},hr.stubString=function(){return\"\"},hr.stubTrue=function(){return!0},hr.multiply=Yu,hr.nth=function(e,t){return e&&e.length?bo(e,$s(t)):a},hr.noConflict=function(){return At._===this&&(At._=mt),this},hr.noop=Lu,hr.now=Zi,hr.pad=function(e,t,n){e=Ks(e);var r=(t=$s(t))?Nn(e):0;if(!t||r>=t)return e;var o=(t-r)/2;return ya(Hn(o),n)+e+ya(Bn(o),n)},hr.padEnd=function(e,t,n){e=Ks(e);var r=(t=$s(t))?Nn(e):0;return t&&r<t?e+ya(t-r,n):e},hr.padStart=function(e,t,n){e=Ks(e);var r=(t=$s(t))?Nn(e):0;return t&&r<t?ya(t-r,n)+e:e},hr.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),Yn(Ks(e).replace(Le,\"\"),t||0)},hr.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&Ga(e,t,n)&&(t=n=a),n===a&&(\"boolean\"==typeof t?(n=t,t=a):\"boolean\"==typeof e&&(n=e,e=a)),e===a&&t===a?(e=0,t=1):(e=Hs(e),t===a?(t=e,e=0):t=Hs(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var o=Xn();return zn(e+o*(t-e+Pt(\"1e-\"+((o+\"\").length-1))),t)}return Eo(e,t)},hr.reduce=function(e,t,n){var r=vs(e)?tn:hn,o=arguments.length<3;return r(e,Ma(t,4),n,o,Hr)},hr.reduceRight=function(e,t,n){var r=vs(e)?nn:hn,o=arguments.length<3;return r(e,Ma(t,4),n,o,$r)},hr.repeat=function(e,t,n){return t=(n?Ga(e,t,n):t===a)?1:$s(t),ko(Ks(e),t)},hr.replace=function(){var e=arguments,t=Ks(e[0]);return e.length<3?t:t.replace(e[1],e[2])},hr.result=function(e,t,n){var r=-1,o=(t=Go(t,e)).length;for(o||(o=1,e=a);++r<o;){var i=null==e?a:e[ci(t[r])];i===a&&(r=o,i=n),e=ks(i)?i.call(e):i}return e},hr.round=Xu,hr.runInContext=e,hr.sample=function(e){return(vs(e)?Sr:Co)(e)},hr.size=function(e){if(null==e)return 0;if(ys(e))return js(e)?Nn(e):e.length;var t=Va(e);return t==X||t==ne?e.size:co(e).length},hr.snakeCase=wu,hr.some=function(e,t,n){var r=vs(e)?rn:Ao;return n&&Ga(e,t,n)&&(t=a),r(e,Ma(t,3))},hr.sortedIndex=function(e,t){return jo(e,t)},hr.sortedIndexBy=function(e,t,n){return Lo(e,t,Ma(n,2))},hr.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=jo(e,t);if(r<n&&ps(e[r],t))return r}return-1},hr.sortedLastIndex=function(e,t){return jo(e,t,!0)},hr.sortedLastIndexBy=function(e,t,n){return Lo(e,t,Ma(n,2),!0)},hr.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=jo(e,t,!0)-1;if(ps(e[n],t))return n}return-1},hr.startCase=xu,hr.startsWith=function(e,t,n){return e=Ks(e),n=null==n?0:Lr($s(n),0,e.length),t=Uo(t),e.slice(n,n+t.length)==t},hr.subtract=Qu,hr.sum=function(e){return e&&e.length?mn(e,Iu):0},hr.sumBy=function(e,t){return e&&e.length?mn(e,Ma(t,2)):0},hr.template=function(e,t,n){var r=hr.templateSettings;n&&Ga(e,t,n)&&(t=a),e=Ks(e),t=Gs({},t,r,Oa);var o,i,s=Gs({},t.imports,r.imports,Oa),u=ou(s),l=bn(s,u),c=0,d=t.interpolate||Xe,f=\"__p += '\",p=nt((t.escape||Xe).source+\"|\"+d.source+\"|\"+(d===Te?Fe:Xe).source+\"|\"+(t.evaluate||Xe).source+\"|$\",\"g\"),h=\"//# sourceURL=\"+(\"sourceURL\"in t?t.sourceURL:\"lodash.templateSources[\"+ ++St+\"]\")+\"\\n\";e.replace(p,function(t,n,r,a,s,u){return r||(r=a),f+=e.slice(c,u).replace(Qe,kn),n&&(o=!0,f+=\"' +\\n__e(\"+n+\") +\\n'\"),s&&(i=!0,f+=\"';\\n\"+s+\";\\n__p += '\"),r&&(f+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),c=u+t.length,t}),f+=\"';\\n\";var m=t.variable;m||(f=\"with (obj) {\\n\"+f+\"\\n}\\n\"),f=(i?f.replace(ye,\"\"):f).replace(we,\"$1\").replace(xe,\"$1;\"),f=\"function(\"+(m||\"obj\")+\") {\\n\"+(m?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(o?\", __e = _.escape\":\"\")+(i?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+f+\"return __p\\n}\";var g=Su(function(){return Ze(u,h+\"return \"+f).apply(a,l)});if(g.source=f,Es(g))throw g;return g},hr.times=function(e,t){if((e=$s(e))<1||e>j)return[];var n=M,r=zn(e,M);t=Ma(t),e-=M;for(var o=gn(r,t);++n<e;)t(n);return o},hr.toFinite=Hs,hr.toInteger=$s,hr.toLength=Fs,hr.toLower=function(e){return Ks(e).toLowerCase()},hr.toNumber=Vs,hr.toSafeInteger=function(e){return e?Lr($s(e),-j,j):0===e?e:0},hr.toString=Ks,hr.toUpper=function(e){return Ks(e).toUpperCase()},hr.trim=function(e,t,n){if((e=Ks(e))&&(n||t===a))return e.replace(je,\"\");if(!e||!(t=Uo(t)))return e;var r=An(e),o=An(t);return Xo(r,wn(r,o),xn(r,o)+1).join(\"\")},hr.trimEnd=function(e,t,n){if((e=Ks(e))&&(n||t===a))return e.replace(Re,\"\");if(!e||!(t=Uo(t)))return e;var r=An(e);return Xo(r,0,xn(r,An(t))+1).join(\"\")},hr.trimStart=function(e,t,n){if((e=Ks(e))&&(n||t===a))return e.replace(Le,\"\");if(!e||!(t=Uo(t)))return e;var r=An(e);return Xo(r,wn(r,An(t))).join(\"\")},hr.truncate=function(e,t){var n=O,r=T;if(Os(t)){var o=\"separator\"in t?t.separator:o;n=\"length\"in t?$s(t.length):n,r=\"omission\"in t?Uo(t.omission):r}var i=(e=Ks(e)).length;if(Sn(e)){var s=An(e);i=s.length}if(n>=i)return e;var u=n-Nn(r);if(u<1)return r;var l=s?Xo(s,0,u).join(\"\"):e.slice(0,u);if(o===a)return l+r;if(s&&(u+=l.length-u),Ns(o)){if(e.slice(u).search(o)){var c,d=l;for(o.global||(o=nt(o.source,Ks(Ve.exec(o))+\"g\")),o.lastIndex=0;c=o.exec(d);)var f=c.index;l=l.slice(0,f===a?u:f)}}else if(e.indexOf(Uo(o),u)!=u){var p=l.lastIndexOf(o);p>-1&&(l=l.slice(0,p))}return l+r},hr.unescape=function(e){return(e=Ks(e))&&ke.test(e)?e.replace(_e,jn):e},hr.uniqueId=function(e){var t=++dt;return Ks(e)+t},hr.upperCase=_u,hr.upperFirst=Eu,hr.each=Ki,hr.eachRight=qi,hr.first=yi,ju(hr,(Gu={},Gr(hr,function(e,t){ct.call(hr.prototype,t)||(Gu[t]=e)}),Gu),{chain:!1}),hr.VERSION=\"4.17.5\",zt([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){hr[e].placeholder=hr}),zt([\"drop\",\"take\"],function(e,t){br.prototype[e]=function(n){n=n===a?1:qn($s(n),0);var r=this.__filtered__&&!t?new br(this):this.clone();return r.__filtered__?r.__takeCount__=zn(n,r.__takeCount__):r.__views__.push({size:zn(n,M),type:e+(r.__dir__<0?\"Right\":\"\")}),r},br.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),zt([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,r=n==D||3==n;br.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Ma(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),zt([\"head\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");br.prototype[e]=function(){return this[n](1).value()[0]}}),zt([\"initial\",\"tail\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");br.prototype[e]=function(){return this.__filtered__?new br(this):this[n](1)}}),br.prototype.compact=function(){return this.filter(Iu)},br.prototype.find=function(e){return this.filter(e).head()},br.prototype.findLast=function(e){return this.reverse().find(e)},br.prototype.invokeMap=So(function(e,t){return\"function\"==typeof e?new br(this):this.map(function(n){return oo(n,e,t)})}),br.prototype.reject=function(e){return this.filter(us(Ma(e)))},br.prototype.slice=function(e,t){e=$s(e);var n=this;return n.__filtered__&&(e>0||t<0)?new br(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==a&&(n=(t=$s(t))<0?n.dropRight(-t):n.take(t-e)),n)},br.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},br.prototype.toArray=function(){return this.take(M)},Gr(br.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),o=hr[r?\"take\"+(\"last\"==t?\"Right\":\"\"):t],i=r||/^find/.test(t);o&&(hr.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,u=t instanceof br,l=s[0],c=u||vs(t),d=function(e){var t=o.apply(hr,en([e],s));return r&&f?t[0]:t};c&&n&&\"function\"==typeof l&&1!=l.length&&(u=c=!1);var f=this.__chain__,p=!!this.__actions__.length,h=i&&!f,m=u&&!p;if(!i&&c){t=m?t:new br(this);var g=e.apply(t,s);return g.__actions__.push({func:Hi,args:[d],thisArg:a}),new vr(g,f)}return h&&m?e.apply(this,s):(g=this.thru(d),h?r?g.value()[0]:g.value():g)})}),zt([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=at[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(e);hr.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var o=this.value();return t.apply(vs(o)?o:[],e)}return this[n](function(n){return t.apply(vs(n)?n:[],e)})}}),Gr(br.prototype,function(e,t){var n=hr[t];if(n){var r=n.name+\"\";(ar[r]||(ar[r]=[])).push({name:t,func:n})}}),ar[ma(a,b).name]=[{name:\"wrapper\",func:a}],br.prototype.clone=function(){var e=new br(this.__wrapped__);return e.__actions__=oa(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=oa(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=oa(this.__views__),e},br.prototype.reverse=function(){if(this.__filtered__){var e=new br(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},br.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=vs(e),r=t<0,o=n?e.length:0,a=function(e,t,n){for(var r=-1,o=n.length;++r<o;){var a=n[r],i=a.size;switch(a.type){case\"drop\":e+=i;break;case\"dropRight\":t-=i;break;case\"take\":t=zn(t,e+i);break;case\"takeRight\":e=qn(e,t-i)}}return{start:e,end:t}}(0,o,this.__views__),i=a.start,s=a.end,u=s-i,l=r?s:i-1,c=this.__iteratees__,d=c.length,f=0,p=zn(u,this.__takeCount__);if(!n||!r&&o==u&&p==u)return Vo(e,this.__actions__);var h=[];e:for(;u--&&f<p;){for(var m=-1,g=e[l+=t];++m<d;){var v=c[m],b=v.iteratee,y=v.type,w=b(g);if(y==N)g=w;else if(!w){if(y==D)continue e;break e}}h[f++]=g}return h},hr.prototype.at=$i,hr.prototype.chain=function(){return Bi(this)},hr.prototype.commit=function(){return new vr(this.value(),this.__chain__)},hr.prototype.next=function(){this.__values__===a&&(this.__values__=Bs(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?a:this.__values__[this.__index__++]}},hr.prototype.plant=function(e){for(var t,n=this;n instanceof gr;){var r=fi(n);r.__index__=0,r.__values__=a,t?o.__wrapped__=r:t=r;var o=r;n=n.__wrapped__}return o.__wrapped__=e,t},hr.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof br){var t=e;return this.__actions__.length&&(t=new br(this)),(t=t.reverse()).__actions__.push({func:Hi,args:[Oi],thisArg:a}),new vr(t,this.__chain__)}return this.thru(Oi)},hr.prototype.toJSON=hr.prototype.valueOf=hr.prototype.value=function(){return Vo(this.__wrapped__,this.__actions__)},hr.prototype.first=hr.prototype.head,Ut&&(hr.prototype[Ut]=function(){return this}),hr}();At._=Ln,(o=function(){return Ln}.call(t,n,t,r))===a||(r.exports=o)}).call(this)}).call(t,n(25),n(109)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,\"loaded\",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,\"id\",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){\"use strict\";var r=n(10),o=n(63),a=n(112),i=n(38);function s(e){var t=new a(e),n=o(a.prototype.request,t);return r.extend(n,a.prototype,t),r.extend(n,t),n}var u=s(i);u.Axios=a,u.create=function(e){return s(r.merge(i,e))},u.Cancel=n(67),u.CancelToken=n(126),u.isCancel=n(66),u.all=function(e){return Promise.all(e)},u.spread=n(127),e.exports=u,e.exports.default=u},function(e,t){function n(e){return!!e.constructor&&\"function\"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(n(e)||function(e){return\"function\"==typeof e.readFloatLE&&\"function\"==typeof e.slice&&n(e.slice(0,0))}(e)||!!e._isBuffer)}},function(e,t,n){\"use strict\";var r=n(38),o=n(10),a=n(121),i=n(122);function s(e){this.defaults=e,this.interceptors={request:new a,response:new a}}s.prototype.request=function(e){\"string\"==typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),(e=o.merge(r,{method:\"get\"},this.defaults,e)).method=e.method.toLowerCase();var t=[i,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},o.forEach([\"delete\",\"get\",\"head\",\"options\"],function(e){s.prototype[e]=function(t,n){return this.request(o.merge(n||{},{method:e,url:t}))}}),o.forEach([\"post\",\"put\",\"patch\"],function(e){s.prototype[e]=function(t,n,r){return this.request(o.merge(r||{},{method:e,url:t,data:n}))}}),e.exports=s},function(e,t,n){\"use strict\";var r=n(10);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){\"use strict\";var r=n(65);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r(\"Request failed with status code \"+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){\"use strict\";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e}},function(e,t,n){\"use strict\";var r=n(10);function o(e){return encodeURIComponent(e).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}e.exports=function(e,t,n){if(!t)return e;var a;if(n)a=n(t);else if(r.isURLSearchParams(t))a=t.toString();else{var i=[];r.forEach(t,function(e,t){null!==e&&void 0!==e&&(r.isArray(e)?t+=\"[]\":e=[e],r.forEach(e,function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),i.push(o(t)+\"=\"+o(e))}))}),a=i.join(\"&\")}return a&&(e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+a),e}},function(e,t,n){\"use strict\";var r=n(10),o=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];e.exports=function(e){var t,n,a,i={};return e?(r.forEach(e.split(\"\\n\"),function(e){if(a=e.indexOf(\":\"),t=r.trim(e.substr(0,a)).toLowerCase(),n=r.trim(e.substr(a+1)),t){if(i[t]&&o.indexOf(t)>=0)return;i[t]=\"set-cookie\"===t?(i[t]?i[t]:[]).concat([n]):i[t]?i[t]+\", \"+n:n}}),i):i}},function(e,t,n){\"use strict\";var r=n(10);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function o(e){var r=e;return t&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){\"use strict\";var r=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";function o(){this.message=\"String contains an invalid character\"}o.prototype=new Error,o.prototype.code=5,o.prototype.name=\"InvalidCharacterError\",e.exports=function(e){for(var t,n,a=String(e),i=\"\",s=0,u=r;a.charAt(0|s)||(u=\"=\",s%1);i+=u.charAt(63&t>>8-s%1*8)){if((n=a.charCodeAt(s+=.75))>255)throw new o;t=t<<8|n}return i}},function(e,t,n){\"use strict\";var r=n(10);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,o,a,i){var s=[];s.push(e+\"=\"+encodeURIComponent(t)),r.isNumber(n)&&s.push(\"expires=\"+new Date(n).toGMTString()),r.isString(o)&&s.push(\"path=\"+o),r.isString(a)&&s.push(\"domain=\"+a),!0===i&&s.push(\"secure\"),document.cookie=s.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,t,n){\"use strict\";var r=n(10);function o(){this.handlers=[]}o.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){r.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=o},function(e,t,n){\"use strict\";var r=n(10),o=n(123),a=n(66),i=n(38),s=n(124),u=n(125);function l(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return l(e),e.baseURL&&!s(e.url)&&(e.url=u(e.baseURL,e.url)),e.headers=e.headers||{},e.data=o(e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),r.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(t){delete e.headers[t]}),(e.adapter||i.adapter)(e).then(function(t){return l(e),t.data=o(t.data,t.headers,e.transformResponse),t},function(t){return a(t)||(l(e),t&&t.response&&(t.response.data=o(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){\"use strict\";var r=n(10);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t,n){\"use strict\";e.exports=function(e){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(e)}},function(e,t,n){\"use strict\";e.exports=function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}},function(e,t,n){\"use strict\";var r=n(67);function o(e){if(\"function\"!=typeof e)throw new TypeError(\"executor must be a function.\");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new r(e),t(n.reason))})}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var e;return{token:new o(function(t){e=t}),cancel:e}},e.exports=o},function(e,t,n){\"use strict\";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t,n){\"use strict\";var r=function(){};e.exports=r},function(e,t,n){\"use strict\";var r=n(130),o=n(21),a=n(11),i=n(131),s=r.twoArgumentPooler,u=r.fourArgumentPooler,l=/\\/+/g;function c(e){return(\"\"+e).replace(l,\"$&/\")}function d(e,t){this.func=e,this.context=t,this.count=0}function f(e,t,n){var r=e.func,o=e.context;r.call(o,t,e.count++)}function p(e,t,n,r){this.result=e,this.keyPrefix=t,this.func=n,this.context=r,this.count=0}function h(e,t,n){var r=e.result,i=e.keyPrefix,s=e.func,u=e.context,l=s.call(u,t,e.count++);Array.isArray(l)?m(l,r,n,a.thatReturnsArgument):null!=l&&(o.isValidElement(l)&&(l=o.cloneAndReplaceKey(l,i+(!l.key||t&&t.key===l.key?\"\":c(l.key)+\"/\")+n)),r.push(l))}function m(e,t,n,r,o){var a=\"\";null!=n&&(a=c(n)+\"/\");var s=p.getPooled(t,a,r,o);i(e,h,s),p.release(s)}function g(e,t,n){return null}d.prototype.destructor=function(){this.func=null,this.context=null,this.count=0},r.addPoolingTo(d,s),p.prototype.destructor=function(){this.result=null,this.keyPrefix=null,this.func=null,this.context=null,this.count=0},r.addPoolingTo(p,u);var v={forEach:function(e,t,n){if(null==e)return e;var r=d.getPooled(t,n);i(e,f,r),d.release(r)},map:function(e,t,n){if(null==e)return e;var r=[];return m(e,r,null,t,n),r},mapIntoWithKeyPrefixInternal:m,count:function(e,t){return i(e,g,null)},toArray:function(e){var t=[];return m(e,t,null,a.thatReturnsArgument),t}};e.exports=v},function(e,t,n){\"use strict\";var r=n(26),o=(n(1),function(e){if(this.instancePool.length){var t=this.instancePool.pop();return this.call(t,e),t}return new this(e)}),a=function(e){e instanceof this||r(\"25\"),e.destructor(),this.instancePool.length<this.poolSize&&this.instancePool.push(e)},i=o,s={addPoolingTo:function(e,t){var n=e;return n.instancePool=[],n.getPooled=t||i,n.poolSize||(n.poolSize=10),n.release=a,n},oneArgumentPooler:o,twoArgumentPooler:function(e,t){if(this.instancePool.length){var n=this.instancePool.pop();return this.call(n,e,t),n}return new this(e,t)},threeArgumentPooler:function(e,t,n){if(this.instancePool.length){var r=this.instancePool.pop();return this.call(r,e,t,n),r}return new this(e,t,n)},fourArgumentPooler:function(e,t,n,r){if(this.instancePool.length){var o=this.instancePool.pop();return this.call(o,e,t,n,r),o}return new this(e,t,n,r)}};e.exports=s},function(e,t,n){\"use strict\";var r=n(26),o=(n(17),n(72)),a=n(132),i=(n(1),n(133)),s=(n(3),\".\"),u=\":\";function l(e,t){return e&&\"object\"==typeof e&&null!=e.key?i.escape(e.key):t.toString(36)}e.exports=function(e,t,n){return null==e?0:function e(t,n,c,d){var f,p=typeof t;if(\"undefined\"!==p&&\"boolean\"!==p||(t=null),null===t||\"string\"===p||\"number\"===p||\"object\"===p&&t.$$typeof===o)return c(d,t,\"\"===n?s+l(t,0):n),1;var h=0,m=\"\"===n?s:n+u;if(Array.isArray(t))for(var g=0;g<t.length;g++)h+=e(f=t[g],m+l(f,g),c,d);else{var v=a(t);if(v){var b,y=v.call(t);if(v!==t.entries)for(var w=0;!(b=y.next()).done;)h+=e(f=b.value,m+l(f,w++),c,d);else for(;!(b=y.next()).done;){var x=b.value;x&&(h+=e(f=x[1],m+i.escape(x[0])+u+l(f,0),c,d))}}else if(\"object\"===p){var _=\"\",E=String(t);r(\"31\",\"[object Object]\"===E?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":E,_)}}return h}(e,\"\",t,n)}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&Symbol.iterator,o=\"@@iterator\";e.exports=function(e){var t=e&&(r&&e[r]||e[o]);if(\"function\"==typeof t)return t}},function(e,t,n){\"use strict\";var r={escape:function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+e).replace(/[=:]/g,function(e){return t[e]})},unescape:function(e){var t={\"=0\":\"=\",\"=2\":\":\"};return(\"\"+(\".\"===e[0]&&\"$\"===e[1]?e.substring(2):e.substring(1))).replace(/(=0|=2)/g,function(e){return t[e]})}};e.exports=r},function(e,t,n){\"use strict\";var r=n(21).createFactory,o={a:r(\"a\"),abbr:r(\"abbr\"),address:r(\"address\"),area:r(\"area\"),article:r(\"article\"),aside:r(\"aside\"),audio:r(\"audio\"),b:r(\"b\"),base:r(\"base\"),bdi:r(\"bdi\"),bdo:r(\"bdo\"),big:r(\"big\"),blockquote:r(\"blockquote\"),body:r(\"body\"),br:r(\"br\"),button:r(\"button\"),canvas:r(\"canvas\"),caption:r(\"caption\"),cite:r(\"cite\"),code:r(\"code\"),col:r(\"col\"),colgroup:r(\"colgroup\"),data:r(\"data\"),datalist:r(\"datalist\"),dd:r(\"dd\"),del:r(\"del\"),details:r(\"details\"),dfn:r(\"dfn\"),dialog:r(\"dialog\"),div:r(\"div\"),dl:r(\"dl\"),dt:r(\"dt\"),em:r(\"em\"),embed:r(\"embed\"),fieldset:r(\"fieldset\"),figcaption:r(\"figcaption\"),figure:r(\"figure\"),footer:r(\"footer\"),form:r(\"form\"),h1:r(\"h1\"),h2:r(\"h2\"),h3:r(\"h3\"),h4:r(\"h4\"),h5:r(\"h5\"),h6:r(\"h6\"),head:r(\"head\"),header:r(\"header\"),hgroup:r(\"hgroup\"),hr:r(\"hr\"),html:r(\"html\"),i:r(\"i\"),iframe:r(\"iframe\"),img:r(\"img\"),input:r(\"input\"),ins:r(\"ins\"),kbd:r(\"kbd\"),keygen:r(\"keygen\"),label:r(\"label\"),legend:r(\"legend\"),li:r(\"li\"),link:r(\"link\"),main:r(\"main\"),map:r(\"map\"),mark:r(\"mark\"),menu:r(\"menu\"),menuitem:r(\"menuitem\"),meta:r(\"meta\"),meter:r(\"meter\"),nav:r(\"nav\"),noscript:r(\"noscript\"),object:r(\"object\"),ol:r(\"ol\"),optgroup:r(\"optgroup\"),option:r(\"option\"),output:r(\"output\"),p:r(\"p\"),param:r(\"param\"),picture:r(\"picture\"),pre:r(\"pre\"),progress:r(\"progress\"),q:r(\"q\"),rp:r(\"rp\"),rt:r(\"rt\"),ruby:r(\"ruby\"),s:r(\"s\"),samp:r(\"samp\"),script:r(\"script\"),section:r(\"section\"),select:r(\"select\"),small:r(\"small\"),source:r(\"source\"),span:r(\"span\"),strong:r(\"strong\"),style:r(\"style\"),sub:r(\"sub\"),summary:r(\"summary\"),sup:r(\"sup\"),table:r(\"table\"),tbody:r(\"tbody\"),td:r(\"td\"),textarea:r(\"textarea\"),tfoot:r(\"tfoot\"),th:r(\"th\"),thead:r(\"thead\"),time:r(\"time\"),title:r(\"title\"),tr:r(\"tr\"),track:r(\"track\"),u:r(\"u\"),ul:r(\"ul\"),var:r(\"var\"),video:r(\"video\"),wbr:r(\"wbr\"),circle:r(\"circle\"),clipPath:r(\"clipPath\"),defs:r(\"defs\"),ellipse:r(\"ellipse\"),g:r(\"g\"),image:r(\"image\"),line:r(\"line\"),linearGradient:r(\"linearGradient\"),mask:r(\"mask\"),path:r(\"path\"),pattern:r(\"pattern\"),polygon:r(\"polygon\"),polyline:r(\"polyline\"),radialGradient:r(\"radialGradient\"),rect:r(\"rect\"),stop:r(\"stop\"),svg:r(\"svg\"),text:r(\"text\"),tspan:r(\"tspan\")};e.exports=o},function(e,t,n){\"use strict\";var r=n(21).isValidElement,o=n(73);e.exports=o(r)},function(e,t,n){\"use strict\";var r=n(11),o=n(1),a=n(3),i=n(5),s=n(74),u=n(137);e.exports=function(e,t){var n=\"function\"==typeof Symbol&&Symbol.iterator,l=\"@@iterator\";var c=\"<<anonymous>>\",d={array:m(\"array\"),bool:m(\"boolean\"),func:m(\"function\"),number:m(\"number\"),object:m(\"object\"),string:m(\"string\"),symbol:m(\"symbol\"),any:h(r.thatReturnsNull),arrayOf:function(e){return h(function(t,n,r,o,a){if(\"function\"!=typeof e)return new p(\"Property `\"+a+\"` of component `\"+r+\"` has invalid PropType notation inside arrayOf.\");var i=t[n];if(!Array.isArray(i)){var u=v(i);return new p(\"Invalid \"+o+\" `\"+a+\"` of type `\"+u+\"` supplied to `\"+r+\"`, expected an array.\")}for(var l=0;l<i.length;l++){var c=e(i,l,r,o,a+\"[\"+l+\"]\",s);if(c instanceof Error)return c}return null})},element:function(){return h(function(t,n,r,o,a){var i=t[n];if(!e(i)){var s=v(i);return new p(\"Invalid \"+o+\" `\"+a+\"` of type `\"+s+\"` supplied to `\"+r+\"`, expected a single ReactElement.\")}return null})}(),instanceOf:function(e){return h(function(t,n,r,o,a){if(!(t[n]instanceof e)){var i=e.name||c,s=function(e){if(!e.constructor||!e.constructor.name)return c;return e.constructor.name}(t[n]);return new p(\"Invalid \"+o+\" `\"+a+\"` of type `\"+s+\"` supplied to `\"+r+\"`, expected instance of `\"+i+\"`.\")}return null})},node:function(){return h(function(e,t,n,r,o){if(!g(e[t]))return new p(\"Invalid \"+r+\" `\"+o+\"` supplied to `\"+n+\"`, expected a ReactNode.\");return null})}(),objectOf:function(e){return h(function(t,n,r,o,a){if(\"function\"!=typeof e)return new p(\"Property `\"+a+\"` of component `\"+r+\"` has invalid PropType notation inside objectOf.\");var i=t[n],u=v(i);if(\"object\"!==u)return new p(\"Invalid \"+o+\" `\"+a+\"` of type `\"+u+\"` supplied to `\"+r+\"`, expected an object.\");for(var l in i)if(i.hasOwnProperty(l)){var c=e(i,l,r,o,a+\".\"+l,s);if(c instanceof Error)return c}return null})},oneOf:function(e){if(!Array.isArray(e))return r.thatReturnsNull;return h(function(t,n,r,o,a){for(var i=t[n],s=0;s<e.length;s++)if(f(i,e[s]))return null;var u=JSON.stringify(e);return new p(\"Invalid \"+o+\" `\"+a+\"` of value `\"+i+\"` supplied to `\"+r+\"`, expected one of \"+u+\".\")})},oneOfType:function(e){if(!Array.isArray(e))return r.thatReturnsNull;for(var t=0;t<e.length;t++){var n=e[t];if(\"function\"!=typeof n)return a(!1,\"Invalid argument supplied to oneOfType. Expected an array of check functions, but received %s at index %s.\",y(n),t),r.thatReturnsNull}return h(function(t,n,r,o,a){for(var i=0;i<e.length;i++){var u=e[i];if(null==u(t,n,r,o,a,s))return null}return new p(\"Invalid \"+o+\" `\"+a+\"` supplied to `\"+r+\"`.\")})},shape:function(e){return h(function(t,n,r,o,a){var i=t[n],u=v(i);if(\"object\"!==u)return new p(\"Invalid \"+o+\" `\"+a+\"` of type `\"+u+\"` supplied to `\"+r+\"`, expected `object`.\");for(var l in e){var c=e[l];if(c){var d=c(i,l,r,o,a+\".\"+l,s);if(d)return d}}return null})},exact:function(e){return h(function(t,n,r,o,a){var u=t[n],l=v(u);if(\"object\"!==l)return new p(\"Invalid \"+o+\" `\"+a+\"` of type `\"+l+\"` supplied to `\"+r+\"`, expected `object`.\");var c=i({},t[n],e);for(var d in c){var f=e[d];if(!f)return new p(\"Invalid \"+o+\" `\"+a+\"` key `\"+d+\"` supplied to `\"+r+\"`.\\nBad object: \"+JSON.stringify(t[n],null,\"  \")+\"\\nValid keys: \"+JSON.stringify(Object.keys(e),null,\"  \"));var h=f(u,d,r,o,a+\".\"+d,s);if(h)return h}return null})}};function f(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function p(e){this.message=e,this.stack=\"\"}function h(e){function n(n,r,a,i,u,l,d){(i=i||c,l=l||a,d!==s)&&(t&&o(!1,\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types\"));return null==r[a]?n?null===r[a]?new p(\"The \"+u+\" `\"+l+\"` is marked as required in `\"+i+\"`, but its value is `null`.\"):new p(\"The \"+u+\" `\"+l+\"` is marked as required in `\"+i+\"`, but its value is `undefined`.\"):null:e(r,a,i,u,l)}var r=n.bind(null,!1);return r.isRequired=n.bind(null,!0),r}function m(e){return h(function(t,n,r,o,a,i){var s=t[n];return v(s)!==e?new p(\"Invalid \"+o+\" `\"+a+\"` of type `\"+b(s)+\"` supplied to `\"+r+\"`, expected `\"+e+\"`.\"):null})}function g(t){switch(typeof t){case\"number\":case\"string\":case\"undefined\":return!0;case\"boolean\":return!t;case\"object\":if(Array.isArray(t))return t.every(g);if(null===t||e(t))return!0;var r=function(e){var t=e&&(n&&e[n]||e[l]);if(\"function\"==typeof t)return t}(t);if(!r)return!1;var o,a=r.call(t);if(r!==t.entries){for(;!(o=a.next()).done;)if(!g(o.value))return!1}else for(;!(o=a.next()).done;){var i=o.value;if(i&&!g(i[1]))return!1}return!0;default:return!1}}function v(e){var t=typeof e;return Array.isArray(e)?\"array\":e instanceof RegExp?\"object\":function(e,t){return\"symbol\"===e||\"Symbol\"===t[\"@@toStringTag\"]||\"function\"==typeof Symbol&&t instanceof Symbol}(t,e)?\"symbol\":t}function b(e){if(void 0===e||null===e)return\"\"+e;var t=v(e);if(\"object\"===t){if(e instanceof Date)return\"date\";if(e instanceof RegExp)return\"regexp\"}return t}function y(e){var t=b(e);switch(t){case\"array\":case\"object\":return\"an \"+t;case\"boolean\":case\"date\":case\"regexp\":return\"a \"+t;default:return t}}return p.prototype=Error.prototype,d.checkPropTypes=u,d.PropTypes=d,d}},function(e,t,n){\"use strict\";e.exports=function(e,t,n,r,o){}},function(e,t,n){\"use strict\";e.exports=\"15.6.2\"},function(e,t,n){\"use strict\";var r=n(69).Component,o=n(21).isValidElement,a=n(70),i=n(140);e.exports=i(r,o,a)},function(e,t,n){\"use strict\";var r=n(5),o=n(32),a=n(1),i=\"mixins\";e.exports=function(e,t,n){var s=[],u={mixins:\"DEFINE_MANY\",statics:\"DEFINE_MANY\",propTypes:\"DEFINE_MANY\",contextTypes:\"DEFINE_MANY\",childContextTypes:\"DEFINE_MANY\",getDefaultProps:\"DEFINE_MANY_MERGED\",getInitialState:\"DEFINE_MANY_MERGED\",getChildContext:\"DEFINE_MANY_MERGED\",render:\"DEFINE_ONCE\",componentWillMount:\"DEFINE_MANY\",componentDidMount:\"DEFINE_MANY\",componentWillReceiveProps:\"DEFINE_MANY\",shouldComponentUpdate:\"DEFINE_ONCE\",componentWillUpdate:\"DEFINE_MANY\",componentDidUpdate:\"DEFINE_MANY\",componentWillUnmount:\"DEFINE_MANY\",UNSAFE_componentWillMount:\"DEFINE_MANY\",UNSAFE_componentWillReceiveProps:\"DEFINE_MANY\",UNSAFE_componentWillUpdate:\"DEFINE_MANY\",updateComponent:\"OVERRIDE_BASE\"},l={getDerivedStateFromProps:\"DEFINE_MANY_MERGED\"},c={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n<t.length;n++)f(e,t[n])},childContextTypes:function(e,t){e.childContextTypes=r({},e.childContextTypes,t)},contextTypes:function(e,t){e.contextTypes=r({},e.contextTypes,t)},getDefaultProps:function(e,t){e.getDefaultProps?e.getDefaultProps=h(e.getDefaultProps,t):e.getDefaultProps=t},propTypes:function(e,t){e.propTypes=r({},e.propTypes,t)},statics:function(e,t){!function(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in c;a(!o,'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it as an instance property instead; it will still be accessible on the constructor.',n);var i=n in e;if(i){var s=l.hasOwnProperty(n)?l[n]:null;return a(\"DEFINE_MANY_MERGED\"===s,\"ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.\",n),void(e[n]=h(e[n],r))}e[n]=r}}}(e,t)},autobind:function(){}};function d(e,t){var n=u.hasOwnProperty(t)?u[t]:null;y.hasOwnProperty(t)&&a(\"OVERRIDE_BASE\"===n,\"ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.\",t),e&&a(\"DEFINE_MANY\"===n||\"DEFINE_MANY_MERGED\"===n,\"ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.\",t)}function f(e,n){if(n){a(\"function\"!=typeof n,\"ReactClass: You're attempting to use a component class or function as a mixin. Instead, just use a regular object.\"),a(!t(n),\"ReactClass: You're attempting to use a component as a mixin. Instead, just use a regular object.\");var r=e.prototype,o=r.__reactAutoBindPairs;for(var s in n.hasOwnProperty(i)&&c.mixins(e,n.mixins),n)if(n.hasOwnProperty(s)&&s!==i){var l=n[s],f=r.hasOwnProperty(s);if(d(f,s),c.hasOwnProperty(s))c[s](e,l);else{var p=u.hasOwnProperty(s);if(\"function\"!=typeof l||p||f||!1===n.autobind)if(f){var g=u[s];a(p&&(\"DEFINE_MANY_MERGED\"===g||\"DEFINE_MANY\"===g),\"ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.\",g,s),\"DEFINE_MANY_MERGED\"===g?r[s]=h(r[s],l):\"DEFINE_MANY\"===g&&(r[s]=m(r[s],l))}else r[s]=l;else o.push(s,l),r[s]=l}}}}function p(e,t){for(var n in a(e&&t&&\"object\"==typeof e&&\"object\"==typeof t,\"mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.\"),t)t.hasOwnProperty(n)&&(a(void 0===e[n],\"mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.\",n),e[n]=t[n]);return e}function h(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);if(null==n)return r;if(null==r)return n;var o={};return p(o,n),p(o,r),o}}function m(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function g(e,t){var n=t.bind(e);return n}var v={componentDidMount:function(){this.__isMounted=!0}},b={componentWillUnmount:function(){this.__isMounted=!1}},y={replaceState:function(e,t){this.updater.enqueueReplaceState(this,e,t)},isMounted:function(){return!!this.__isMounted}},w=function(){};return r(w.prototype,e.prototype,y),function(e){var t=function(e,r,i){this.__reactAutoBindPairs.length&&function(e){for(var t=e.__reactAutoBindPairs,n=0;n<t.length;n+=2){var r=t[n],o=t[n+1];e[r]=g(e,o)}}(this),this.props=e,this.context=r,this.refs=o,this.updater=i||n,this.state=null;var s=this.getInitialState?this.getInitialState():null;a(\"object\"==typeof s&&!Array.isArray(s),\"%s.getInitialState(): must return an object or null\",t.displayName||\"ReactCompositeComponent\"),this.state=s};for(var r in t.prototype=new w,t.prototype.constructor=t,t.prototype.__reactAutoBindPairs=[],s.forEach(f.bind(null,t)),f(t,v),f(t,e),f(t,b),t.getDefaultProps&&(t.defaultProps=t.getDefaultProps()),a(t.prototype.render,\"createClass(...): Class specification must implement a `render` method.\"),u)t.prototype[r]||(t.prototype[r]=null);return t}}},function(e,t,n){\"use strict\";var r=n(26),o=n(21);n(1);e.exports=function(e){return o.isValidElement(e)||r(\"143\"),e}},function(e,t,n){\"use strict\";e.exports=n(143)},function(e,t,n){\"use strict\";var r=n(6),o=n(144),a=n(98),i=n(23),s=n(16),u=n(216),l=n(217),c=n(99),d=n(218);n(3);o.inject();var f={findDOMNode:l,render:a.render,unmountComponentAtNode:a.unmountComponentAtNode,version:u,unstable_batchedUpdates:s.batchedUpdates,unstable_renderSubtreeIntoContainer:d};\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ComponentTree:{getClosestInstanceFromNode:r.getClosestInstanceFromNode,getNodeFromInstance:function(e){return e._renderedComponent&&(e=c(e)),e?r.getNodeFromInstance(e):null}},Mount:a,Reconciler:i}),e.exports=f},function(e,t,n){\"use strict\";var r=n(145),o=n(146),a=n(150),i=n(153),s=n(154),u=n(155),l=n(156),c=n(162),d=n(6),f=n(187),p=n(188),h=n(189),m=n(190),g=n(191),v=n(193),b=n(194),y=n(200),w=n(201),x=n(202),_=!1;e.exports={inject:function(){_||(_=!0,v.EventEmitter.injectReactEventListener(g),v.EventPluginHub.injectEventPluginOrder(i),v.EventPluginUtils.injectComponentTree(d),v.EventPluginUtils.injectTreeTraversal(p),v.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:x,EnterLeaveEventPlugin:s,ChangeEventPlugin:a,SelectEventPlugin:w,BeforeInputEventPlugin:o}),v.HostComponent.injectGenericComponentClass(c),v.HostComponent.injectTextComponentClass(h),v.DOMProperty.injectDOMPropertyConfig(r),v.DOMProperty.injectDOMPropertyConfig(u),v.DOMProperty.injectDOMPropertyConfig(y),v.EmptyComponent.injectEmptyComponentFactory(function(e){return new f(e)}),v.Updates.injectReconcileTransaction(b),v.Updates.injectBatchingStrategy(m),v.Component.injectEnvironment(l))}}},function(e,t,n){\"use strict\";e.exports={Properties:{\"aria-current\":0,\"aria-details\":0,\"aria-disabled\":0,\"aria-hidden\":0,\"aria-invalid\":0,\"aria-keyshortcuts\":0,\"aria-label\":0,\"aria-roledescription\":0,\"aria-autocomplete\":0,\"aria-checked\":0,\"aria-expanded\":0,\"aria-haspopup\":0,\"aria-level\":0,\"aria-modal\":0,\"aria-multiline\":0,\"aria-multiselectable\":0,\"aria-orientation\":0,\"aria-placeholder\":0,\"aria-pressed\":0,\"aria-readonly\":0,\"aria-required\":0,\"aria-selected\":0,\"aria-sort\":0,\"aria-valuemax\":0,\"aria-valuemin\":0,\"aria-valuenow\":0,\"aria-valuetext\":0,\"aria-atomic\":0,\"aria-busy\":0,\"aria-live\":0,\"aria-relevant\":0,\"aria-dropeffect\":0,\"aria-grabbed\":0,\"aria-activedescendant\":0,\"aria-colcount\":0,\"aria-colindex\":0,\"aria-colspan\":0,\"aria-controls\":0,\"aria-describedby\":0,\"aria-errormessage\":0,\"aria-flowto\":0,\"aria-labelledby\":0,\"aria-owns\":0,\"aria-posinset\":0,\"aria-rowcount\":0,\"aria-rowindex\":0,\"aria-rowspan\":0,\"aria-setsize\":0},DOMAttributeNames:{},DOMPropertyNames:{}}},function(e,t,n){\"use strict\";var r=n(27),o=n(9),a=n(147),i=n(148),s=n(149),u=[9,13,27,32],l=229,c=o.canUseDOM&&\"CompositionEvent\"in window,d=null;o.canUseDOM&&\"documentMode\"in document&&(d=document.documentMode);var f,p=o.canUseDOM&&\"TextEvent\"in window&&!d&&!(\"object\"==typeof(f=window.opera)&&\"function\"==typeof f.version&&parseInt(f.version(),10)<=12),h=o.canUseDOM&&(!c||d&&d>8&&d<=11);var m=32,g=String.fromCharCode(m),v={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"topCompositionEnd\",\"topKeyPress\",\"topTextInput\",\"topPaste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:[\"topBlur\",\"topCompositionEnd\",\"topKeyDown\",\"topKeyPress\",\"topKeyUp\",\"topMouseDown\"]},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",captured:\"onCompositionStartCapture\"},dependencies:[\"topBlur\",\"topCompositionStart\",\"topKeyDown\",\"topKeyPress\",\"topKeyUp\",\"topMouseDown\"]},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:[\"topBlur\",\"topCompositionUpdate\",\"topKeyDown\",\"topKeyPress\",\"topKeyUp\",\"topMouseDown\"]}},b=!1;function y(e,t){switch(e){case\"topKeyUp\":return-1!==u.indexOf(t.keyCode);case\"topKeyDown\":return t.keyCode!==l;case\"topKeyPress\":case\"topMouseDown\":case\"topBlur\":return!0;default:return!1}}function w(e){var t=e.detail;return\"object\"==typeof t&&\"data\"in t?t.data:null}var x=null;function _(e,t,n,o){var s,u;if(c?s=function(e){switch(e){case\"topCompositionStart\":return v.compositionStart;case\"topCompositionEnd\":return v.compositionEnd;case\"topCompositionUpdate\":return v.compositionUpdate}}(e):x?y(e,n)&&(s=v.compositionEnd):function(e,t){return\"topKeyDown\"===e&&t.keyCode===l}(e,n)&&(s=v.compositionStart),!s)return null;h&&(x||s!==v.compositionStart?s===v.compositionEnd&&x&&(u=x.getData()):x=a.getPooled(o));var d=i.getPooled(s,t,n,o);if(u)d.data=u;else{var f=w(n);null!==f&&(d.data=f)}return r.accumulateTwoPhaseDispatches(d),d}function E(e,t,n,o){var i;if(!(i=p?function(e,t){switch(e){case\"topCompositionEnd\":return w(t);case\"topKeyPress\":return t.which!==m?null:(b=!0,g);case\"topTextInput\":var n=t.data;return n===g&&b?null:n;default:return null}}(e,n):function(e,t){if(x){if(\"topCompositionEnd\"===e||!c&&y(e,t)){var n=x.getData();return a.release(x),x=null,n}return null}switch(e){case\"topPaste\":return null;case\"topKeyPress\":return t.which&&!function(e){return(e.ctrlKey||e.altKey||e.metaKey)&&!(e.ctrlKey&&e.altKey)}(t)?String.fromCharCode(t.which):null;case\"topCompositionEnd\":return h?null:t.data;default:return null}}(e,n)))return null;var u=s.getPooled(v.beforeInput,t,n,o);return u.data=i,r.accumulateTwoPhaseDispatches(u),u}var k={eventTypes:v,extractEvents:function(e,t,n,r){return[_(e,t,n,r),E(e,t,n,r)]}};e.exports=k},function(e,t,n){\"use strict\";var r=n(5),o=n(19),a=n(78);function i(e){this._root=e,this._startText=this.getText(),this._fallbackText=null}r(i.prototype,{destructor:function(){this._root=null,this._startText=null,this._fallbackText=null},getText:function(){return\"value\"in this._root?this._root.value:this._root[a()]},getData:function(){if(this._fallbackText)return this._fallbackText;var e,t,n=this._startText,r=n.length,o=this.getText(),a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);var s=t>1?1-t:void 0;return this._fallbackText=o.slice(e,s),this._fallbackText}}),o.addPoolingTo(i),e.exports=i},function(e,t,n){\"use strict\";var r=n(18);function o(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(o,{data:null}),e.exports=o},function(e,t,n){\"use strict\";var r=n(18);function o(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(o,{data:null}),e.exports=o},function(e,t,n){\"use strict\";var r=n(28),o=n(27),a=n(9),i=n(6),s=n(16),u=n(18),l=n(81),c=n(43),d=n(44),f=n(82),p={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:[\"topBlur\",\"topChange\",\"topClick\",\"topFocus\",\"topInput\",\"topKeyDown\",\"topKeyUp\",\"topSelectionChange\"]}};function h(e,t,n){var r=u.getPooled(p.change,e,t,n);return r.type=\"change\",o.accumulateTwoPhaseDispatches(r),r}var m=null,g=null;var v=!1;function b(e){var t=h(g,e,c(e));s.batchedUpdates(y,t)}function y(e){r.enqueueEvents(e),r.processEventQueue(!1)}function w(){m&&(m.detachEvent(\"onchange\",b),m=null,g=null)}function x(e,t){var n=l.updateValueIfChanged(e),r=!0===t.simulated&&D._allowSimulatedPassThrough;if(n||r)return e}function _(e,t){if(\"topChange\"===e)return t}function E(e,t,n){\"topFocus\"===e?(w(),function(e,t){g=t,(m=e).attachEvent(\"onchange\",b)}(t,n)):\"topBlur\"===e&&w()}a.canUseDOM&&(v=d(\"change\")&&(!document.documentMode||document.documentMode>8));var k=!1;function S(){m&&(m.detachEvent(\"onpropertychange\",C),m=null,g=null)}function C(e){\"value\"===e.propertyName&&x(g,e)&&b(e)}function O(e,t,n){\"topFocus\"===e?(S(),function(e,t){g=t,(m=e).attachEvent(\"onpropertychange\",C)}(t,n)):\"topBlur\"===e&&S()}function T(e,t,n){if(\"topSelectionChange\"===e||\"topKeyUp\"===e||\"topKeyDown\"===e)return x(g,n)}function P(e,t,n){if(\"topClick\"===e)return x(t,n)}function I(e,t,n){if(\"topInput\"===e||\"topChange\"===e)return x(t,n)}a.canUseDOM&&(k=d(\"input\")&&(!document.documentMode||document.documentMode>9));var D={eventTypes:p,_allowSimulatedPassThrough:!0,_isInputEventSupported:k,extractEvents:function(e,t,n,r){var o,a,s,u,l=t?i.getNodeFromInstance(t):window;if(\"select\"===(u=(s=l).nodeName&&s.nodeName.toLowerCase())||\"input\"===u&&\"file\"===s.type?v?o=_:a=E:f(l)?k?o=I:(o=T,a=O):function(e){var t=e.nodeName;return t&&\"input\"===t.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)}(l)&&(o=P),o){var c=o(e,t,n);if(c)return h(c,n,r)}a&&a(e,l,t),\"topBlur\"===e&&function(e,t){if(null!=e){var n=e._wrapperState||t._wrapperState;if(n&&n.controlled&&\"number\"===t.type){var r=\"\"+t.value;t.getAttribute(\"value\")!==r&&t.setAttribute(\"value\",r)}}}(t,l)}};e.exports=D},function(e,t,n){\"use strict\";var r=n(152),o={};o.attachRefs=function(e,t){if(null!==t&&\"object\"==typeof t){var n=t.ref;null!=n&&function(e,t,n){\"function\"==typeof e?e(t.getPublicInstance()):r.addComponentAsRefTo(t,e,n)}(n,e,t._owner)}},o.shouldUpdateRefs=function(e,t){var n=null,r=null;null!==e&&\"object\"==typeof e&&(n=e.ref,r=e._owner);var o=null,a=null;return null!==t&&\"object\"==typeof t&&(o=t.ref,a=t._owner),n!==o||\"string\"==typeof o&&a!==r},o.detachRefs=function(e,t){if(null!==t&&\"object\"==typeof t){var n=t.ref;null!=n&&function(e,t,n){\"function\"==typeof e?e(null):r.removeComponentAsRefFrom(t,e,n)}(n,e,t._owner)}},e.exports=o},function(e,t,n){\"use strict\";var r=n(4);n(1);function o(e){return!(!e||\"function\"!=typeof e.attachRef||\"function\"!=typeof e.detachRef)}var a={addComponentAsRefTo:function(e,t,n){o(n)||r(\"119\"),n.attachRef(t,e)},removeComponentAsRefFrom:function(e,t,n){o(n)||r(\"120\");var a=n.getPublicInstance();a&&a.refs[t]===e.getPublicInstance()&&n.detachRef(t)}};e.exports=a},function(e,t,n){\"use strict\";e.exports=[\"ResponderEventPlugin\",\"SimpleEventPlugin\",\"TapEventPlugin\",\"EnterLeaveEventPlugin\",\"ChangeEventPlugin\",\"SelectEventPlugin\",\"BeforeInputEventPlugin\"]},function(e,t,n){\"use strict\";var r=n(27),o=n(6),a=n(34),i={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"topMouseOut\",\"topMouseOver\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"topMouseOut\",\"topMouseOver\"]}},s={eventTypes:i,extractEvents:function(e,t,n,s){if(\"topMouseOver\"===e&&(n.relatedTarget||n.fromElement))return null;if(\"topMouseOut\"!==e&&\"topMouseOver\"!==e)return null;var u,l,c;if(s.window===s)u=s;else{var d=s.ownerDocument;u=d?d.defaultView||d.parentWindow:window}if(\"topMouseOut\"===e){l=t;var f=n.relatedTarget||n.toElement;c=f?o.getClosestInstanceFromNode(f):null}else l=null,c=t;if(l===c)return null;var p=null==l?u:o.getNodeFromInstance(l),h=null==c?u:o.getNodeFromInstance(c),m=a.getPooled(i.mouseLeave,l,n,s);m.type=\"mouseleave\",m.target=p,m.relatedTarget=h;var g=a.getPooled(i.mouseEnter,c,n,s);return g.type=\"mouseenter\",g.target=h,g.relatedTarget=p,r.accumulateEnterLeaveDispatches(m,g,l,c),[m,g]}};e.exports=s},function(e,t,n){\"use strict\";var r=n(22),o=r.injection.MUST_USE_PROPERTY,a=r.injection.HAS_BOOLEAN_VALUE,i=r.injection.HAS_NUMERIC_VALUE,s=r.injection.HAS_POSITIVE_NUMERIC_VALUE,u=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE,l={isCustomAttribute:RegExp.prototype.test.bind(new RegExp(\"^(data|aria)-[\"+r.ATTRIBUTE_NAME_CHAR+\"]*$\")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:a,allowTransparency:0,alt:0,as:0,async:a,autoComplete:0,autoPlay:a,capture:a,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:o|a,cite:0,classID:0,className:0,cols:s,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:a,controlsList:0,coords:0,crossOrigin:0,data:0,dateTime:0,default:a,defer:a,dir:0,disabled:a,download:u,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:a,formTarget:0,frameBorder:0,headers:0,height:0,hidden:a,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:a,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:o|a,muted:o|a,name:0,nonce:0,noValidate:a,open:a,optimum:0,pattern:0,placeholder:0,playsInline:a,poster:0,preload:0,profile:0,radioGroup:0,readOnly:a,referrerPolicy:0,rel:0,required:a,reversed:a,role:0,rows:s,rowSpan:i,sandbox:0,scope:0,scoped:a,scrolling:0,seamless:a,selected:o|a,shape:0,size:s,sizes:0,span:s,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:i,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:0,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,typeof:0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:a,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:\"accept-charset\",className:\"class\",htmlFor:\"for\",httpEquiv:\"http-equiv\"},DOMPropertyNames:{},DOMMutationMethods:{value:function(e,t){if(null==t)return e.removeAttribute(\"value\");\"number\"!==e.type||!1===e.hasAttribute(\"value\")?e.setAttribute(\"value\",\"\"+t):e.validity&&!e.validity.badInput&&e.ownerDocument.activeElement!==e&&e.setAttribute(\"value\",\"\"+t)}}};e.exports=l},function(e,t,n){\"use strict\";var r=n(46),o={processChildrenUpdates:n(161).dangerouslyProcessChildrenUpdates,replaceNodeWithMarkup:r.dangerouslyReplaceNodeWithMarkup};e.exports=o},function(e,t,n){\"use strict\";var r=n(4),o=n(24),a=n(9),i=n(158),s=n(11),u=(n(1),{dangerouslyReplaceNodeWithMarkup:function(e,t){if(a.canUseDOM||r(\"56\"),t||r(\"57\"),\"HTML\"===e.nodeName&&r(\"58\"),\"string\"==typeof t){var n=i(t,s)[0];e.parentNode.replaceChild(n,e)}else o.replaceChildWithTree(e,t)}});e.exports=u},function(e,t,n){\"use strict\";var r=n(9),o=n(159),a=n(160),i=n(1),s=r.canUseDOM?document.createElement(\"div\"):null,u=/^\\s*<(\\w+)/;e.exports=function(e,t){var n=s;s||i(!1);var r=function(e){var t=e.match(u);return t&&t[1].toLowerCase()}(e),l=r&&a(r);if(l){n.innerHTML=l[1]+e+l[2];for(var c=l[0];c--;)n=n.lastChild}else n.innerHTML=e;var d=n.getElementsByTagName(\"script\");d.length&&(t||i(!1),o(d).forEach(t));for(var f=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return f}},function(e,t,n){\"use strict\";var r=n(1);e.exports=function(e){return function(e){return!!e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"length\"in e&&!(\"setInterval\"in e)&&\"number\"!=typeof e.nodeType&&(Array.isArray(e)||\"callee\"in e||\"item\"in e)}(e)?Array.isArray(e)?e.slice():function(e){var t=e.length;if((Array.isArray(e)||\"object\"!=typeof e&&\"function\"!=typeof e)&&r(!1),\"number\"!=typeof t&&r(!1),0===t||t-1 in e||r(!1),\"function\"==typeof e.callee&&r(!1),e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(e){}for(var n=Array(t),o=0;o<t;o++)n[o]=e[o];return n}(e):[e]}},function(e,t,n){\"use strict\";var r=n(9),o=n(1),a=r.canUseDOM?document.createElement(\"div\"):null,i={},s=[1,'<select multiple=\"true\">',\"</select>\"],u=[1,\"<table>\",\"</table>\"],l=[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],c=[1,'<svg xmlns=\"http://www.w3.org/2000/svg\">',\"</svg>\"],d={\"*\":[1,\"?<div>\",\"</div>\"],area:[1,\"<map>\",\"</map>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],param:[1,\"<object>\",\"</object>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],optgroup:s,option:s,caption:u,colgroup:u,tbody:u,tfoot:u,thead:u,td:l,th:l};[\"circle\",\"clipPath\",\"defs\",\"ellipse\",\"g\",\"image\",\"line\",\"linearGradient\",\"mask\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialGradient\",\"rect\",\"stop\",\"text\",\"tspan\"].forEach(function(e){d[e]=c,i[e]=!0}),e.exports=function(e){return a||o(!1),d.hasOwnProperty(e)||(e=\"*\"),i.hasOwnProperty(e)||(a.innerHTML=\"*\"===e?\"<link />\":\"<\"+e+\"></\"+e+\">\",i[e]=!a.firstChild),i[e]?d[e]:null}},function(e,t,n){\"use strict\";var r=n(46),o=n(6),a={dangerouslyProcessChildrenUpdates:function(e,t){var n=o.getNodeFromInstance(e);r.processUpdates(n,t)}};e.exports=a},function(e,t,n){\"use strict\";var r=n(4),o=n(5),a=n(163),i=n(164),s=n(24),u=n(47),l=n(22),c=n(87),d=n(28),f=n(40),p=n(37),h=n(75),m=n(6),g=n(174),v=n(176),b=n(88),y=n(177),w=(n(13),n(178)),x=n(185),_=(n(11),n(36)),E=(n(1),n(44),n(51),n(81)),k=(n(55),n(3),h),S=d.deleteListener,C=m.getNodeFromInstance,O=p.listenTo,T=f.registrationNameModules,P={string:!0,number:!0},I=\"__html\",D={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},N=11;function A(e){if(e){var t=e._currentElement._owner||null;if(t){var n=t.getName();if(n)return\" This DOM node was rendered by `\"+n+\"`.\"}}return\"\"}function j(e,t){t&&(q[e._tag]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&r(\"137\",e._tag,e._currentElement._owner?\" Check the render method of \"+e._currentElement._owner.getName()+\".\":\"\"),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&r(\"60\"),\"object\"==typeof t.dangerouslySetInnerHTML&&I in t.dangerouslySetInnerHTML||r(\"61\")),null!=t.style&&\"object\"!=typeof t.style&&r(\"62\",A(e)))}function L(e,t,n,r){if(!(r instanceof x)){0;var o=e._hostContainerInfo,a=o._node&&o._node.nodeType===N?o._node:o._ownerDocument;O(t,a),r.getReactMountReady().enqueue(R,{inst:e,registrationName:t,listener:n})}}function R(){d.putListener(this.inst,this.registrationName,this.listener)}function M(){g.postMountWrapper(this)}function U(){y.postMountWrapper(this)}function B(){v.postMountWrapper(this)}var H={topAbort:\"abort\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topLoadedData:\"loadeddata\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topSeeked:\"seeked\",topSeeking:\"seeking\",topStalled:\"stalled\",topSuspend:\"suspend\",topTimeUpdate:\"timeupdate\",topVolumeChange:\"volumechange\",topWaiting:\"waiting\"};function $(){E.track(this)}function F(){this._rootNodeID||r(\"63\");var e=C(this);switch(e||r(\"64\"),this._tag){case\"iframe\":case\"object\":this._wrapperState.listeners=[p.trapBubbledEvent(\"topLoad\",\"load\",e)];break;case\"video\":case\"audio\":for(var t in this._wrapperState.listeners=[],H)H.hasOwnProperty(t)&&this._wrapperState.listeners.push(p.trapBubbledEvent(t,H[t],e));break;case\"source\":this._wrapperState.listeners=[p.trapBubbledEvent(\"topError\",\"error\",e)];break;case\"img\":this._wrapperState.listeners=[p.trapBubbledEvent(\"topError\",\"error\",e),p.trapBubbledEvent(\"topLoad\",\"load\",e)];break;case\"form\":this._wrapperState.listeners=[p.trapBubbledEvent(\"topReset\",\"reset\",e),p.trapBubbledEvent(\"topSubmit\",\"submit\",e)];break;case\"input\":case\"select\":case\"textarea\":this._wrapperState.listeners=[p.trapBubbledEvent(\"topInvalid\",\"invalid\",e)]}}function V(){b.postUpdateWrapper(this)}var W={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},K={listing:!0,pre:!0,textarea:!0},q=o({menuitem:!0},W),z=/^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/,G={},Y={}.hasOwnProperty;function X(e,t){return e.indexOf(\"-\")>=0||null!=t.is}var Q=1;function J(e){var t=e.type;!function(e){Y.call(G,e)||(z.test(e)||r(\"65\",e),G[e]=!0)}(t),this._currentElement=e,this._tag=t.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}J.displayName=\"ReactDOMComponent\",J.Mixin={mountComponent:function(e,t,n,r){this._rootNodeID=Q++,this._domID=n._idCounter++,this._hostParent=t,this._hostContainerInfo=n;var o,i,l,d=this._currentElement.props;switch(this._tag){case\"audio\":case\"form\":case\"iframe\":case\"img\":case\"link\":case\"object\":case\"source\":case\"video\":this._wrapperState={listeners:null},e.getReactMountReady().enqueue(F,this);break;case\"input\":g.mountWrapper(this,d,t),d=g.getHostProps(this,d),e.getReactMountReady().enqueue($,this),e.getReactMountReady().enqueue(F,this);break;case\"option\":v.mountWrapper(this,d,t),d=v.getHostProps(this,d);break;case\"select\":b.mountWrapper(this,d,t),d=b.getHostProps(this,d),e.getReactMountReady().enqueue(F,this);break;case\"textarea\":y.mountWrapper(this,d,t),d=y.getHostProps(this,d),e.getReactMountReady().enqueue($,this),e.getReactMountReady().enqueue(F,this)}if(j(this,d),null!=t?(o=t._namespaceURI,i=t._tag):n._tag&&(o=n._namespaceURI,i=n._tag),(null==o||o===u.svg&&\"foreignobject\"===i)&&(o=u.html),o===u.html&&(\"svg\"===this._tag?o=u.svg:\"math\"===this._tag&&(o=u.mathml)),this._namespaceURI=o,e.useCreateElement){var f,p=n._ownerDocument;if(o===u.html)if(\"script\"===this._tag){var h=p.createElement(\"div\"),w=this._currentElement.type;h.innerHTML=\"<\"+w+\"></\"+w+\">\",f=h.removeChild(h.firstChild)}else f=d.is?p.createElement(this._currentElement.type,d.is):p.createElement(this._currentElement.type);else f=p.createElementNS(o,this._currentElement.type);m.precacheNode(this,f),this._flags|=k.hasCachedChildNodes,this._hostParent||c.setAttributeForRoot(f),this._updateDOMProperties(null,d,e);var x=s(f);this._createInitialChildren(e,d,r,x),l=x}else{var _=this._createOpenTagMarkupAndPutListeners(e,d),E=this._createContentMarkup(e,d,r);l=!E&&W[this._tag]?_+\"/>\":_+\">\"+E+\"</\"+this._currentElement.type+\">\"}switch(this._tag){case\"input\":e.getReactMountReady().enqueue(M,this),d.autoFocus&&e.getReactMountReady().enqueue(a.focusDOMComponent,this);break;case\"textarea\":e.getReactMountReady().enqueue(U,this),d.autoFocus&&e.getReactMountReady().enqueue(a.focusDOMComponent,this);break;case\"select\":case\"button\":d.autoFocus&&e.getReactMountReady().enqueue(a.focusDOMComponent,this);break;case\"option\":e.getReactMountReady().enqueue(B,this)}return l},_createOpenTagMarkupAndPutListeners:function(e,t){var n=\"<\"+this._currentElement.type;for(var r in t)if(t.hasOwnProperty(r)){var a=t[r];if(null!=a)if(T.hasOwnProperty(r))a&&L(this,r,a,e);else{\"style\"===r&&(a&&(a=this._previousStyleCopy=o({},t.style)),a=i.createMarkupForStyles(a,this));var s=null;null!=this._tag&&X(this._tag,t)?D.hasOwnProperty(r)||(s=c.createMarkupForCustomAttribute(r,a)):s=c.createMarkupForProperty(r,a),s&&(n+=\" \"+s)}}return e.renderToStaticMarkup?n:(this._hostParent||(n+=\" \"+c.createMarkupForRoot()),n+=\" \"+c.createMarkupForID(this._domID))},_createContentMarkup:function(e,t,n){var r=\"\",o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&(r=o.__html);else{var a=P[typeof t.children]?t.children:null,i=null!=a?null:t.children;if(null!=a)r=_(a);else if(null!=i){r=this.mountChildren(i,e,n).join(\"\")}}return K[this._tag]&&\"\\n\"===r.charAt(0)?\"\\n\"+r:r},_createInitialChildren:function(e,t,n,r){var o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&s.queueHTML(r,o.__html);else{var a=P[typeof t.children]?t.children:null,i=null!=a?null:t.children;if(null!=a)\"\"!==a&&s.queueText(r,a);else if(null!=i)for(var u=this.mountChildren(i,e,n),l=0;l<u.length;l++)s.queueChild(r,u[l])}},receiveComponent:function(e,t,n){var r=this._currentElement;this._currentElement=e,this.updateComponent(t,r,e,n)},updateComponent:function(e,t,n,r){var o=t.props,a=this._currentElement.props;switch(this._tag){case\"input\":o=g.getHostProps(this,o),a=g.getHostProps(this,a);break;case\"option\":o=v.getHostProps(this,o),a=v.getHostProps(this,a);break;case\"select\":o=b.getHostProps(this,o),a=b.getHostProps(this,a);break;case\"textarea\":o=y.getHostProps(this,o),a=y.getHostProps(this,a)}switch(j(this,a),this._updateDOMProperties(o,a,e),this._updateDOMChildren(o,a,e,r),this._tag){case\"input\":g.updateWrapper(this),E.updateValueIfChanged(this);break;case\"textarea\":y.updateWrapper(this);break;case\"select\":e.getReactMountReady().enqueue(V,this)}},_updateDOMProperties:function(e,t,n){var r,a,s;for(r in e)if(!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if(\"style\"===r){var u=this._previousStyleCopy;for(a in u)u.hasOwnProperty(a)&&((s=s||{})[a]=\"\");this._previousStyleCopy=null}else T.hasOwnProperty(r)?e[r]&&S(this,r):X(this._tag,e)?D.hasOwnProperty(r)||c.deleteValueForAttribute(C(this),r):(l.properties[r]||l.isCustomAttribute(r))&&c.deleteValueForProperty(C(this),r);for(r in t){var d=t[r],f=\"style\"===r?this._previousStyleCopy:null!=e?e[r]:void 0;if(t.hasOwnProperty(r)&&d!==f&&(null!=d||null!=f))if(\"style\"===r)if(d?d=this._previousStyleCopy=o({},d):this._previousStyleCopy=null,f){for(a in f)!f.hasOwnProperty(a)||d&&d.hasOwnProperty(a)||((s=s||{})[a]=\"\");for(a in d)d.hasOwnProperty(a)&&f[a]!==d[a]&&((s=s||{})[a]=d[a])}else s=d;else if(T.hasOwnProperty(r))d?L(this,r,d,n):f&&S(this,r);else if(X(this._tag,t))D.hasOwnProperty(r)||c.setValueForAttribute(C(this),r,d);else if(l.properties[r]||l.isCustomAttribute(r)){var p=C(this);null!=d?c.setValueForProperty(p,r,d):c.deleteValueForProperty(p,r)}}s&&i.setValueForStyles(C(this),s,this)},_updateDOMChildren:function(e,t,n,r){var o=P[typeof e.children]?e.children:null,a=P[typeof t.children]?t.children:null,i=e.dangerouslySetInnerHTML&&e.dangerouslySetInnerHTML.__html,s=t.dangerouslySetInnerHTML&&t.dangerouslySetInnerHTML.__html,u=null!=o?null:e.children,l=null!=a?null:t.children,c=null!=o||null!=i,d=null!=a||null!=s;null!=u&&null==l?this.updateChildren(null,n,r):c&&!d&&this.updateTextContent(\"\"),null!=a?o!==a&&this.updateTextContent(\"\"+a):null!=s?i!==s&&this.updateMarkup(\"\"+s):null!=l&&this.updateChildren(l,n,r)},getHostNode:function(){return C(this)},unmountComponent:function(e){switch(this._tag){case\"audio\":case\"form\":case\"iframe\":case\"img\":case\"link\":case\"object\":case\"source\":case\"video\":var t=this._wrapperState.listeners;if(t)for(var n=0;n<t.length;n++)t[n].remove();break;case\"input\":case\"textarea\":E.stopTracking(this);break;case\"html\":case\"head\":case\"body\":r(\"66\",this._tag)}this.unmountChildren(e),m.uncacheNode(this),d.deleteAllListeners(this),this._rootNodeID=0,this._domID=0,this._wrapperState=null},getPublicInstance:function(){return C(this)}},o(J.prototype,J.Mixin,w.Mixin),e.exports=J},function(e,t,n){\"use strict\";var r=n(6),o=n(85),a={focusDOMComponent:function(){o(r.getNodeFromInstance(this))}};e.exports=a},function(e,t,n){\"use strict\";var r=n(86),o=n(9),a=(n(13),n(165),n(167)),i=n(168),s=n(170),u=(n(3),s(function(e){return i(e)})),l=!1,c=\"cssFloat\";if(o.canUseDOM){var d=document.createElement(\"div\").style;try{d.font=\"\"}catch(e){l=!0}void 0===document.documentElement.style.cssFloat&&(c=\"styleFloat\")}var f={createMarkupForStyles:function(e,t){var n=\"\";for(var r in e)if(e.hasOwnProperty(r)){var o=0===r.indexOf(\"--\"),i=e[r];0,null!=i&&(n+=u(r)+\":\",n+=a(r,i,t,o)+\";\")}return n||null},setValueForStyles:function(e,t,n){var o=e.style;for(var i in t)if(t.hasOwnProperty(i)){var s=0===i.indexOf(\"--\");0;var u=a(i,t[i],n,s);if(\"float\"!==i&&\"cssFloat\"!==i||(i=c),s)o.setProperty(i,u);else if(u)o[i]=u;else{var d=l&&r.shorthandPropertyExpansions[i];if(d)for(var f in d)o[f]=\"\";else o[i]=\"\"}}}};e.exports=f},function(e,t,n){\"use strict\";var r=n(166),o=/^-ms-/;e.exports=function(e){return r(e.replace(o,\"ms-\"))}},function(e,t,n){\"use strict\";var r=/-(.)/g;e.exports=function(e){return e.replace(r,function(e,t){return t.toUpperCase()})}},function(e,t,n){\"use strict\";var r=n(86),o=(n(3),r.isUnitlessNumber);e.exports=function(e,t,n,r){if(null==t||\"boolean\"==typeof t||\"\"===t)return\"\";var a=isNaN(t);return r||a||0===t||o.hasOwnProperty(e)&&o[e]?\"\"+t:(\"string\"==typeof t&&(t=t.trim()),t+\"px\")}},function(e,t,n){\"use strict\";var r=n(169),o=/^ms-/;e.exports=function(e){return r(e).replace(o,\"-ms-\")}},function(e,t,n){\"use strict\";var r=/([A-Z])/g;e.exports=function(e){return e.replace(r,\"-$1\").toLowerCase()}},function(e,t,n){\"use strict\";e.exports=function(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}},function(e,t,n){\"use strict\";var r=n(36);e.exports=function(e){return'\"'+r(e)+'\"'}},function(e,t,n){\"use strict\";var r=n(28);var o={handleTopLevel:function(e,t,n,o){!function(e){r.enqueueEvents(e),r.processEventQueue(!1)}(r.extractEvents(e,t,n,o))}};e.exports=o},function(e,t,n){\"use strict\";var r=n(9);function o(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[\"Webkit\"+e]=\"webkit\"+t,n[\"Moz\"+e]=\"moz\"+t,n[\"ms\"+e]=\"MS\"+t,n[\"O\"+e]=\"o\"+t.toLowerCase(),n}var a={animationend:o(\"Animation\",\"AnimationEnd\"),animationiteration:o(\"Animation\",\"AnimationIteration\"),animationstart:o(\"Animation\",\"AnimationStart\"),transitionend:o(\"Transition\",\"TransitionEnd\")},i={},s={};r.canUseDOM&&(s=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete a.animationend.animation,delete a.animationiteration.animation,delete a.animationstart.animation),\"TransitionEvent\"in window||delete a.transitionend.transition),e.exports=function(e){if(i[e])return i[e];if(!a[e])return e;var t=a[e];for(var n in t)if(t.hasOwnProperty(n)&&n in s)return i[e]=t[n];return\"\"}},function(e,t,n){\"use strict\";var r=n(4),o=n(5),a=n(87),i=n(49),s=n(6),u=n(16);n(1),n(3);function l(){this._rootNodeID&&d.updateWrapper(this)}function c(e){return\"checkbox\"===e.type||\"radio\"===e.type?null!=e.checked:null!=e.value}var d={getHostProps:function(e,t){var n=i.getValue(t),r=i.getChecked(t);return o({type:void 0,step:void 0,min:void 0,max:void 0},t,{defaultChecked:void 0,defaultValue:void 0,value:null!=n?n:e._wrapperState.initialValue,checked:null!=r?r:e._wrapperState.initialChecked,onChange:e._wrapperState.onChange})},mountWrapper:function(e,t){var n=t.defaultValue;e._wrapperState={initialChecked:null!=t.checked?t.checked:t.defaultChecked,initialValue:null!=t.value?t.value:n,listeners:null,onChange:function(e){var t=this._currentElement.props,n=i.executeOnChange(t,e);u.asap(l,this);var o=t.name;if(\"radio\"===t.type&&null!=o){for(var a=s.getNodeFromInstance(this),c=a;c.parentNode;)c=c.parentNode;for(var d=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+o)+'][type=\"radio\"]'),f=0;f<d.length;f++){var p=d[f];if(p!==a&&p.form===a.form){var h=s.getInstanceFromNode(p);h||r(\"90\"),u.asap(l,h)}}}return n}.bind(e),controlled:c(t)}},updateWrapper:function(e){var t=e._currentElement.props,n=t.checked;null!=n&&a.setValueForProperty(s.getNodeFromInstance(e),\"checked\",n||!1);var r=s.getNodeFromInstance(e),o=i.getValue(t);if(null!=o)if(0===o&&\"\"===r.value)r.value=\"0\";else if(\"number\"===t.type){var u=parseFloat(r.value,10)||0;(o!=u||o==u&&r.value!=o)&&(r.value=\"\"+o)}else r.value!==\"\"+o&&(r.value=\"\"+o);else null==t.value&&null!=t.defaultValue&&r.defaultValue!==\"\"+t.defaultValue&&(r.defaultValue=\"\"+t.defaultValue),null==t.checked&&null!=t.defaultChecked&&(r.defaultChecked=!!t.defaultChecked)},postMountWrapper:function(e){var t=e._currentElement.props,n=s.getNodeFromInstance(e);switch(t.type){case\"submit\":case\"reset\":break;case\"color\":case\"date\":case\"datetime\":case\"datetime-local\":case\"month\":case\"time\":case\"week\":n.value=\"\",n.value=n.defaultValue;break;default:n.value=n.value}var r=n.name;\"\"!==r&&(n.name=\"\"),n.defaultChecked=!n.defaultChecked,n.defaultChecked=!n.defaultChecked,\"\"!==r&&(n.name=r)}};e.exports=d},function(e,t,n){\"use strict\";e.exports=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\"},function(e,t,n){\"use strict\";var r=n(5),o=n(20),a=n(6),i=n(88),s=(n(3),!1);function u(e){var t=\"\";return o.Children.forEach(e,function(e){null!=e&&(\"string\"==typeof e||\"number\"==typeof e?t+=e:s||(s=!0))}),t}var l={mountWrapper:function(e,t,n){var r=null;if(null!=n){var o=n;\"optgroup\"===o._tag&&(o=o._hostParent),null!=o&&\"select\"===o._tag&&(r=i.getSelectValueContext(o))}var a,s=null;if(null!=r)if(a=null!=t.value?t.value+\"\":u(t.children),s=!1,Array.isArray(r)){for(var l=0;l<r.length;l++)if(\"\"+r[l]===a){s=!0;break}}else s=\"\"+r===a;e._wrapperState={selected:s}},postMountWrapper:function(e){var t=e._currentElement.props;null!=t.value&&a.getNodeFromInstance(e).setAttribute(\"value\",t.value)},getHostProps:function(e,t){var n=r({selected:void 0,children:void 0},t);null!=e._wrapperState.selected&&(n.selected=e._wrapperState.selected);var o=u(t.children);return o&&(n.children=o),n}};e.exports=l},function(e,t,n){\"use strict\";var r=n(4),o=n(5),a=n(49),i=n(6),s=n(16);n(1),n(3);function u(){this._rootNodeID&&l.updateWrapper(this)}var l={getHostProps:function(e,t){return null!=t.dangerouslySetInnerHTML&&r(\"91\"),o({},t,{value:void 0,defaultValue:void 0,children:\"\"+e._wrapperState.initialValue,onChange:e._wrapperState.onChange})},mountWrapper:function(e,t){var n=a.getValue(t),o=n;if(null==n){var i=t.defaultValue,l=t.children;null!=l&&(null!=i&&r(\"92\"),Array.isArray(l)&&(l.length<=1||r(\"93\"),l=l[0]),i=\"\"+l),null==i&&(i=\"\"),o=i}e._wrapperState={initialValue:\"\"+o,listeners:null,onChange:function(e){var t=this._currentElement.props,n=a.executeOnChange(t,e);return s.asap(u,this),n}.bind(e)}},updateWrapper:function(e){var t=e._currentElement.props,n=i.getNodeFromInstance(e),r=a.getValue(t);if(null!=r){var o=\"\"+r;o!==n.value&&(n.value=o),null==t.defaultValue&&(n.defaultValue=o)}null!=t.defaultValue&&(n.defaultValue=t.defaultValue)},postMountWrapper:function(e){var t=i.getNodeFromInstance(e),n=t.textContent;n===e._wrapperState.initialValue&&(t.value=n)}};e.exports=l},function(e,t,n){\"use strict\";var r=n(4),o=n(50),a=(n(30),n(13),n(17),n(23)),i=n(179),s=(n(11),n(184));n(1);function u(e,t){return t&&(e=e||[]).push(t),e}function l(e,t){o.processChildrenUpdates(e,t)}var c={Mixin:{_reconcilerInstantiateChildren:function(e,t,n){return i.instantiateChildren(e,t,n)},_reconcilerUpdateChildren:function(e,t,n,r,o,a){var u,l=0;return u=s(t,l),i.updateChildren(e,u,n,r,o,this,this._hostContainerInfo,a,l),u},mountChildren:function(e,t,n){var r=this._reconcilerInstantiateChildren(e,t,n);this._renderedChildren=r;var o=[],i=0;for(var s in r)if(r.hasOwnProperty(s)){var u=r[s],l=0;0;var c=a.mountComponent(u,t,this,this._hostContainerInfo,n,l);u._mountIndex=i++,o.push(c)}return o},updateTextContent:function(e){var t,n=this._renderedChildren;for(var o in i.unmountChildren(n,!1),n)n.hasOwnProperty(o)&&r(\"118\");l(this,[(t=e,{type:\"TEXT_CONTENT\",content:t,fromIndex:null,fromNode:null,toIndex:null,afterNode:null})])},updateMarkup:function(e){var t,n=this._renderedChildren;for(var o in i.unmountChildren(n,!1),n)n.hasOwnProperty(o)&&r(\"118\");l(this,[(t=e,{type:\"SET_MARKUP\",content:t,fromIndex:null,fromNode:null,toIndex:null,afterNode:null})])},updateChildren:function(e,t,n){this._updateChildren(e,t,n)},_updateChildren:function(e,t,n){var r=this._renderedChildren,o={},i=[],s=this._reconcilerUpdateChildren(r,e,i,o,t,n);if(s||r){var c,d=null,f=0,p=0,h=0,m=null;for(c in s)if(s.hasOwnProperty(c)){var g=r&&r[c],v=s[c];g===v?(d=u(d,this.moveChild(g,m,f,p)),p=Math.max(g._mountIndex,p),g._mountIndex=f):(g&&(p=Math.max(g._mountIndex,p)),d=u(d,this._mountChildAtIndex(v,i[h],m,f,t,n)),h++),f++,m=a.getHostNode(v)}for(c in o)o.hasOwnProperty(c)&&(d=u(d,this._unmountChild(r[c],o[c])));d&&l(this,d),this._renderedChildren=s}},unmountChildren:function(e){var t=this._renderedChildren;i.unmountChildren(t,e),this._renderedChildren=null},moveChild:function(e,t,n,r){if(e._mountIndex<r)return function(e,t,n){return{type:\"MOVE_EXISTING\",content:null,fromIndex:e._mountIndex,fromNode:a.getHostNode(e),toIndex:n,afterNode:t}}(e,t,n)},createChild:function(e,t,n){return function(e,t,n){return{type:\"INSERT_MARKUP\",content:e,fromIndex:null,fromNode:null,toIndex:n,afterNode:t}}(n,t,e._mountIndex)},removeChild:function(e,t){return function(e,t){return{type:\"REMOVE_NODE\",content:null,fromIndex:e._mountIndex,fromNode:t,toIndex:null,afterNode:null}}(e,t)},_mountChildAtIndex:function(e,t,n,r,o,a){return e._mountIndex=r,this.createChild(e,n,t)},_unmountChild:function(e,t){var n=this.removeChild(e,t);return e._mountIndex=null,n}}};e.exports=c},function(e,t,n){\"use strict\";(function(t){var r=n(23),o=n(89),a=(n(53),n(52)),i=n(93);n(3);function s(e,t,n,r){var a=void 0===e[n];null!=t&&a&&(e[n]=o(t,!0))}void 0!==t&&Object({NODE_ENV:\"production\"});var u={instantiateChildren:function(e,t,n,r){if(null==e)return null;var o={};return i(e,s,o),o},updateChildren:function(e,t,n,i,s,u,l,c,d){if(t||e){var f,p;for(f in t)if(t.hasOwnProperty(f)){var h=(p=e&&e[f])&&p._currentElement,m=t[f];if(null!=p&&a(h,m))r.receiveComponent(p,m,s,c),t[f]=p;else{p&&(i[f]=r.getHostNode(p),r.unmountComponent(p,!1));var g=o(m,!0);t[f]=g;var v=r.mountComponent(g,s,u,l,c,d);n.push(v)}}for(f in e)!e.hasOwnProperty(f)||t&&t.hasOwnProperty(f)||(p=e[f],i[f]=r.getHostNode(p),r.unmountComponent(p,!1))}},unmountChildren:function(e,t){for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];r.unmountComponent(o,t)}}};e.exports=u}).call(t,n(39))},function(e,t,n){\"use strict\";var r=n(4),o=n(5),a=n(20),i=n(50),s=n(17),u=n(42),l=n(30),c=(n(13),n(90)),d=n(23),f=n(32),p=(n(1),n(51)),h=n(52),m=(n(3),0),g=1,v=2;function b(e){}function y(e,t){0}b.prototype.render=function(){var e=l.get(this)._currentElement.type,t=e(this.props,this.context,this.updater);return y(e,t),t};var w=1,x={construct:function(e){this._currentElement=e,this._rootNodeID=0,this._compositeType=null,this._instance=null,this._hostParent=null,this._hostContainerInfo=null,this._updateBatchNumber=null,this._pendingElement=null,this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._renderedNodeType=null,this._renderedComponent=null,this._context=null,this._mountOrder=0,this._topLevelWrapper=null,this._pendingCallbacks=null,this._calledComponentWillUnmount=!1},mountComponent:function(e,t,n,o){this._context=o,this._mountOrder=w++,this._hostParent=t,this._hostContainerInfo=n;var i,s=this._currentElement.props,u=this._processContext(o),c=this._currentElement.type,d=e.getUpdateQueue(),p=function(e){return!(!e.prototype||!e.prototype.isReactComponent)}(c),h=this._constructComponent(p,s,u,d);p||null!=h&&null!=h.render?!function(e){return!(!e.prototype||!e.prototype.isPureReactComponent)}(c)?this._compositeType=m:this._compositeType=g:(i=h,y(),null===h||!1===h||a.isValidElement(h)||r(\"105\",c.displayName||c.name||\"Component\"),h=new b(c),this._compositeType=v),h.props=s,h.context=u,h.refs=f,h.updater=d,this._instance=h,l.set(h,this);var x,_=h.state;return void 0===_&&(h.state=_=null),(\"object\"!=typeof _||Array.isArray(_))&&r(\"106\",this.getName()||\"ReactCompositeComponent\"),this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,x=h.unstable_handleError?this.performInitialMountWithErrorHandling(i,t,n,e,o):this.performInitialMount(i,t,n,e,o),h.componentDidMount&&e.getReactMountReady().enqueue(h.componentDidMount,h),x},_constructComponent:function(e,t,n,r){return this._constructComponentWithoutOwner(e,t,n,r)},_constructComponentWithoutOwner:function(e,t,n,r){var o=this._currentElement.type;return e?new o(t,n,r):o(t,n,r)},performInitialMountWithErrorHandling:function(e,t,n,r,o){var a,i=r.checkpoint();try{a=this.performInitialMount(e,t,n,r,o)}catch(s){r.rollback(i),this._instance.unstable_handleError(s),this._pendingStateQueue&&(this._instance.state=this._processPendingState(this._instance.props,this._instance.context)),i=r.checkpoint(),this._renderedComponent.unmountComponent(!0),r.rollback(i),a=this.performInitialMount(e,t,n,r,o)}return a},performInitialMount:function(e,t,n,r,o){var a=this._instance,i=0;a.componentWillMount&&(a.componentWillMount(),this._pendingStateQueue&&(a.state=this._processPendingState(a.props,a.context))),void 0===e&&(e=this._renderValidatedComponent());var s=c.getType(e);this._renderedNodeType=s;var u=this._instantiateReactComponent(e,s!==c.EMPTY);return this._renderedComponent=u,d.mountComponent(u,r,t,n,this._processChildContext(o),i)},getHostNode:function(){return d.getHostNode(this._renderedComponent)},unmountComponent:function(e){if(this._renderedComponent){var t=this._instance;if(t.componentWillUnmount&&!t._calledComponentWillUnmount)if(t._calledComponentWillUnmount=!0,e){var n=this.getName()+\".componentWillUnmount()\";u.invokeGuardedCallback(n,t.componentWillUnmount.bind(t))}else t.componentWillUnmount();this._renderedComponent&&(d.unmountComponent(this._renderedComponent,e),this._renderedNodeType=null,this._renderedComponent=null,this._instance=null),this._pendingStateQueue=null,this._pendingReplaceState=!1,this._pendingForceUpdate=!1,this._pendingCallbacks=null,this._pendingElement=null,this._context=null,this._rootNodeID=0,this._topLevelWrapper=null,l.remove(t)}},_maskContext:function(e){var t=this._currentElement.type.contextTypes;if(!t)return f;var n={};for(var r in t)n[r]=e[r];return n},_processContext:function(e){var t=this._maskContext(e);return t},_processChildContext:function(e){var t,n=this._currentElement.type,a=this._instance;if(a.getChildContext&&(t=a.getChildContext()),t){for(var i in\"object\"!=typeof n.childContextTypes&&r(\"107\",this.getName()||\"ReactCompositeComponent\"),t)i in n.childContextTypes||r(\"108\",this.getName()||\"ReactCompositeComponent\",i);return o({},e,t)}return e},_checkContextTypes:function(e,t,n){0},receiveComponent:function(e,t,n){var r=this._currentElement,o=this._context;this._pendingElement=null,this.updateComponent(t,r,e,o,n)},performUpdateIfNecessary:function(e){null!=this._pendingElement?d.receiveComponent(this,this._pendingElement,e,this._context):null!==this._pendingStateQueue||this._pendingForceUpdate?this.updateComponent(e,this._currentElement,this._currentElement,this._context,this._context):this._updateBatchNumber=null},updateComponent:function(e,t,n,o,a){var i=this._instance;null==i&&r(\"136\",this.getName()||\"ReactCompositeComponent\");var s,u=!1;this._context===a?s=i.context:(s=this._processContext(a),u=!0);var l=t.props,c=n.props;t!==n&&(u=!0),u&&i.componentWillReceiveProps&&i.componentWillReceiveProps(c,s);var d=this._processPendingState(c,s),f=!0;this._pendingForceUpdate||(i.shouldComponentUpdate?f=i.shouldComponentUpdate(c,d,s):this._compositeType===g&&(f=!p(l,c)||!p(i.state,d))),this._updateBatchNumber=null,f?(this._pendingForceUpdate=!1,this._performComponentUpdate(n,c,d,s,e,a)):(this._currentElement=n,this._context=a,i.props=c,i.state=d,i.context=s)},_processPendingState:function(e,t){var n=this._instance,r=this._pendingStateQueue,a=this._pendingReplaceState;if(this._pendingReplaceState=!1,this._pendingStateQueue=null,!r)return n.state;if(a&&1===r.length)return r[0];for(var i=o({},a?r[0]:n.state),s=a?1:0;s<r.length;s++){var u=r[s];o(i,\"function\"==typeof u?u.call(n,i,e,t):u)}return i},_performComponentUpdate:function(e,t,n,r,o,a){var i,s,u,l=this._instance,c=Boolean(l.componentDidUpdate);c&&(i=l.props,s=l.state,u=l.context),l.componentWillUpdate&&l.componentWillUpdate(t,n,r),this._currentElement=e,this._context=a,l.props=t,l.state=n,l.context=r,this._updateRenderedComponent(o,a),c&&o.getReactMountReady().enqueue(l.componentDidUpdate.bind(l,i,s,u),l)},_updateRenderedComponent:function(e,t){var n=this._renderedComponent,r=n._currentElement,o=this._renderValidatedComponent(),a=0;if(h(r,o))d.receiveComponent(n,o,e,this._processChildContext(t));else{var i=d.getHostNode(n);d.unmountComponent(n,!1);var s=c.getType(o);this._renderedNodeType=s;var u=this._instantiateReactComponent(o,s!==c.EMPTY);this._renderedComponent=u;var l=d.mountComponent(u,e,this._hostParent,this._hostContainerInfo,this._processChildContext(t),a);this._replaceNodeWithMarkup(i,l,n)}},_replaceNodeWithMarkup:function(e,t,n){i.replaceNodeWithMarkup(e,t,n)},_renderValidatedComponentWithoutOwnerOrContext:function(){var e=this._instance;return e.render()},_renderValidatedComponent:function(){var e;if(this._compositeType!==v){s.current=this;try{e=this._renderValidatedComponentWithoutOwnerOrContext()}finally{s.current=null}}else e=this._renderValidatedComponentWithoutOwnerOrContext();return null===e||!1===e||a.isValidElement(e)||r(\"109\",this.getName()||\"ReactCompositeComponent\"),e},attachRef:function(e,t){var n=this.getPublicInstance();null==n&&r(\"110\");var o=t.getPublicInstance();(n.refs===f?n.refs={}:n.refs)[e]=o},detachRef:function(e){delete this.getPublicInstance().refs[e]},getName:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null},getPublicInstance:function(){var e=this._instance;return this._compositeType===v?null:e},_instantiateReactComponent:null};e.exports=x},function(e,t,n){\"use strict\";var r=1;e.exports=function(){return r++}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103;e.exports=r},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&Symbol.iterator,o=\"@@iterator\";e.exports=function(e){var t=e&&(r&&e[r]||e[o]);if(\"function\"==typeof t)return t}},function(e,t,n){\"use strict\";(function(t){n(53);var r=n(93);n(3);function o(e,t,n,r){if(e&&\"object\"==typeof e){var o=e,a=void 0===o[n];0,a&&null!=t&&(o[n]=t)}}void 0!==t&&Object({NODE_ENV:\"production\"}),e.exports=function(e,t){if(null==e)return e;var n={};return r(e,o,n),n}}).call(t,n(39))},function(e,t,n){\"use strict\";var r=n(5),o=n(19),a=n(33),i=(n(13),n(186)),s=[];var u={enqueue:function(){}};function l(e){this.reinitializeTransaction(),this.renderToStaticMarkup=e,this.useCreateElement=!1,this.updateQueue=new i(this)}var c={getTransactionWrappers:function(){return s},getReactMountReady:function(){return u},getUpdateQueue:function(){return this.updateQueue},destructor:function(){},checkpoint:function(){},rollback:function(){}};r(l.prototype,a,c),o.addPoolingTo(l),e.exports=l},function(e,t,n){\"use strict\";var r=n(54);n(3);var o=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.transaction=t}return e.prototype.isMounted=function(e){return!1},e.prototype.enqueueCallback=function(e,t,n){this.transaction.isInTransaction()&&r.enqueueCallback(e,t,n)},e.prototype.enqueueForceUpdate=function(e){this.transaction.isInTransaction()&&r.enqueueForceUpdate(e)},e.prototype.enqueueReplaceState=function(e,t){this.transaction.isInTransaction()&&r.enqueueReplaceState(e,t)},e.prototype.enqueueSetState=function(e,t){this.transaction.isInTransaction()&&r.enqueueSetState(e,t)},e}();e.exports=o},function(e,t,n){\"use strict\";var r=n(5),o=n(24),a=n(6),i=function(e){this._currentElement=null,this._hostNode=null,this._hostParent=null,this._hostContainerInfo=null,this._domID=0};r(i.prototype,{mountComponent:function(e,t,n,r){var i=n._idCounter++;this._domID=i,this._hostParent=t,this._hostContainerInfo=n;var s=\" react-empty: \"+this._domID+\" \";if(e.useCreateElement){var u=n._ownerDocument.createComment(s);return a.precacheNode(this,u),o(u)}return e.renderToStaticMarkup?\"\":\"\\x3c!--\"+s+\"--\\x3e\"},receiveComponent:function(){},getHostNode:function(){return a.getNodeFromInstance(this)},unmountComponent:function(){a.uncacheNode(this)}}),e.exports=i},function(e,t,n){\"use strict\";var r=n(4);n(1);function o(e,t){\"_hostNode\"in e||r(\"33\"),\"_hostNode\"in t||r(\"33\");for(var n=0,o=e;o;o=o._hostParent)n++;for(var a=0,i=t;i;i=i._hostParent)a++;for(;n-a>0;)e=e._hostParent,n--;for(;a-n>0;)t=t._hostParent,a--;for(var s=n;s--;){if(e===t)return e;e=e._hostParent,t=t._hostParent}return null}e.exports={isAncestor:function(e,t){\"_hostNode\"in e||r(\"35\"),\"_hostNode\"in t||r(\"35\");for(;t;){if(t===e)return!0;t=t._hostParent}return!1},getLowestCommonAncestor:o,getParentInstance:function(e){return\"_hostNode\"in e||r(\"36\"),e._hostParent},traverseTwoPhase:function(e,t,n){for(var r,o=[];e;)o.push(e),e=e._hostParent;for(r=o.length;r-- >0;)t(o[r],\"captured\",n);for(r=0;r<o.length;r++)t(o[r],\"bubbled\",n)},traverseEnterLeave:function(e,t,n,r,a){for(var i=e&&t?o(e,t):null,s=[];e&&e!==i;)s.push(e),e=e._hostParent;for(var u,l=[];t&&t!==i;)l.push(t),t=t._hostParent;for(u=0;u<s.length;u++)n(s[u],\"bubbled\",r);for(u=l.length;u-- >0;)n(l[u],\"captured\",a)}}},function(e,t,n){\"use strict\";var r=n(4),o=n(5),a=n(46),i=n(24),s=n(6),u=n(36),l=(n(1),n(55),function(e){this._currentElement=e,this._stringText=\"\"+e,this._hostNode=null,this._hostParent=null,this._domID=0,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});o(l.prototype,{mountComponent:function(e,t,n,r){var o=n._idCounter++,a=\" react-text: \"+o+\" \";if(this._domID=o,this._hostParent=t,e.useCreateElement){var l=n._ownerDocument,c=l.createComment(a),d=l.createComment(\" /react-text \"),f=i(l.createDocumentFragment());return i.queueChild(f,i(c)),this._stringText&&i.queueChild(f,i(l.createTextNode(this._stringText))),i.queueChild(f,i(d)),s.precacheNode(this,c),this._closingComment=d,f}var p=u(this._stringText);return e.renderToStaticMarkup?p:\"\\x3c!--\"+a+\"--\\x3e\"+p+\"\\x3c!-- /react-text --\\x3e\"},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=\"\"+e;if(n!==this._stringText){this._stringText=n;var r=this.getHostNode();a.replaceDelimitedText(r[0],r[1],n)}}},getHostNode:function(){var e=this._commentNodes;if(e)return e;if(!this._closingComment)for(var t=s.getNodeFromInstance(this).nextSibling;;){if(null==t&&r(\"67\",this._domID),8===t.nodeType&&\" /react-text \"===t.nodeValue){this._closingComment=t;break}t=t.nextSibling}return e=[this._hostNode,this._closingComment],this._commentNodes=e,e},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,s.uncacheNode(this)}}),e.exports=l},function(e,t,n){\"use strict\";var r=n(5),o=n(16),a=n(33),i=n(11),s={initialize:i,close:function(){d.isBatchingUpdates=!1}},u=[{initialize:i,close:o.flushBatchedUpdates.bind(o)},s];function l(){this.reinitializeTransaction()}r(l.prototype,a,{getTransactionWrappers:function(){return u}});var c=new l,d={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,r,o,a){var i=d.isBatchingUpdates;return d.isBatchingUpdates=!0,i?e(t,n,r,o,a):c.perform(e,null,t,n,r,o,a)}};e.exports=d},function(e,t,n){\"use strict\";var r=n(5),o=n(95),a=n(9),i=n(19),s=n(6),u=n(16),l=n(43),c=n(192);function d(e){for(;e._hostParent;)e=e._hostParent;var t=s.getNodeFromInstance(e).parentNode;return s.getClosestInstanceFromNode(t)}function f(e,t){this.topLevelType=e,this.nativeEvent=t,this.ancestors=[]}function p(e){var t=l(e.nativeEvent),n=s.getClosestInstanceFromNode(t),r=n;do{e.ancestors.push(r),r=r&&d(r)}while(r);for(var o=0;o<e.ancestors.length;o++)n=e.ancestors[o],h._handleTopLevel(e.topLevelType,n,e.nativeEvent,l(e.nativeEvent))}r(f.prototype,{destructor:function(){this.topLevelType=null,this.nativeEvent=null,this.ancestors.length=0}}),i.addPoolingTo(f,i.twoArgumentPooler);var h={_enabled:!0,_handleTopLevel:null,WINDOW_HANDLE:a.canUseDOM?window:null,setHandleTopLevel:function(e){h._handleTopLevel=e},setEnabled:function(e){h._enabled=!!e},isEnabled:function(){return h._enabled},trapBubbledEvent:function(e,t,n){return n?o.listen(n,t,h.dispatchEvent.bind(null,e)):null},trapCapturedEvent:function(e,t,n){return n?o.capture(n,t,h.dispatchEvent.bind(null,e)):null},monitorScrollValue:function(e){var t=function(e){e(c(window))}.bind(null,e);o.listen(window,\"scroll\",t)},dispatchEvent:function(e,t){if(h._enabled){var n=f.getPooled(e,t);try{u.batchedUpdates(p,n)}finally{f.release(n)}}}};e.exports=h},function(e,t,n){\"use strict\";e.exports=function(e){return e.Window&&e instanceof e.Window?{x:e.pageXOffset||e.document.documentElement.scrollLeft,y:e.pageYOffset||e.document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}},function(e,t,n){\"use strict\";var r=n(22),o=n(28),a=n(41),i=n(50),s=n(91),u=n(37),l=n(92),c=n(16),d={Component:i.injection,DOMProperty:r.injection,EmptyComponent:s.injection,EventPluginHub:o.injection,EventPluginUtils:a.injection,EventEmitter:u.injection,HostComponent:l.injection,Updates:c.injection};e.exports=d},function(e,t,n){\"use strict\";var r=n(5),o=n(79),a=n(19),i=n(37),s=n(96),u=(n(13),n(33)),l=n(54),c=[{initialize:s.getSelectionInformation,close:s.restoreSelection},{initialize:function(){var e=i.isEnabled();return i.setEnabled(!1),e},close:function(e){i.setEnabled(e)}},{initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}}];function d(e){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=o.getPooled(null),this.useCreateElement=e}var f={getTransactionWrappers:function(){return c},getReactMountReady:function(){return this.reactMountReady},getUpdateQueue:function(){return l},checkpoint:function(){return this.reactMountReady.checkpoint()},rollback:function(e){this.reactMountReady.rollback(e)},destructor:function(){o.release(this.reactMountReady),this.reactMountReady=null}};r(d.prototype,u,f),a.addPoolingTo(d),e.exports=d},function(e,t,n){\"use strict\";var r=n(9),o=n(196),a=n(78);function i(e,t,n,r){return e===n&&t===r}var s=r.canUseDOM&&\"selection\"in document&&!(\"getSelection\"in window),u={getOffsets:s?function(e){var t=document.selection.createRange(),n=t.text.length,r=t.duplicate();r.moveToElementText(e),r.setEndPoint(\"EndToStart\",t);var o=r.text.length;return{start:o,end:o+n}}:function(e){var t=window.getSelection&&window.getSelection();if(!t||0===t.rangeCount)return null;var n=t.anchorNode,r=t.anchorOffset,o=t.focusNode,a=t.focusOffset,s=t.getRangeAt(0);try{s.startContainer.nodeType,s.endContainer.nodeType}catch(e){return null}var u=i(t.anchorNode,t.anchorOffset,t.focusNode,t.focusOffset)?0:s.toString().length,l=s.cloneRange();l.selectNodeContents(e),l.setEnd(s.startContainer,s.startOffset);var c=i(l.startContainer,l.startOffset,l.endContainer,l.endOffset)?0:l.toString().length,d=c+u,f=document.createRange();f.setStart(n,r),f.setEnd(o,a);var p=f.collapsed;return{start:p?d:c,end:p?c:d}},setOffsets:s?function(e,t){var n,r,o=document.selection.createRange().duplicate();void 0===t.end?r=n=t.start:t.start>t.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart(\"character\",n),o.setEndPoint(\"EndToStart\",o),o.moveEnd(\"character\",r-n),o.select()}:function(e,t){if(window.getSelection){var n=window.getSelection(),r=e[a()].length,i=Math.min(t.start,r),s=void 0===t.end?i:Math.min(t.end,r);if(!n.extend&&i>s){var u=s;s=i,i=u}var l=o(e,i),c=o(e,s);if(l&&c){var d=document.createRange();d.setStart(l.node,l.offset),n.removeAllRanges(),i>s?(n.addRange(d),n.extend(c.node,c.offset)):(d.setEnd(c.node,c.offset),n.addRange(d))}}}};e.exports=u},function(e,t,n){\"use strict\";function r(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function o(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}e.exports=function(e,t){for(var n=r(e),a=0,i=0;n;){if(3===n.nodeType){if(i=a+n.textContent.length,a<=t&&i>=t)return{node:n,offset:t-a};a=i}n=r(o(n))}}},function(e,t,n){\"use strict\";var r=n(198);e.exports=function e(t,n){return!(!t||!n)&&(t===n||!r(t)&&(r(n)?e(t,n.parentNode):\"contains\"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}},function(e,t,n){\"use strict\";var r=n(199);e.exports=function(e){return r(e)&&3==e.nodeType}},function(e,t,n){\"use strict\";e.exports=function(e){var t=(e?e.ownerDocument||e:document).defaultView||window;return!(!e||!(\"function\"==typeof t.Node?e instanceof t.Node:\"object\"==typeof e&&\"number\"==typeof e.nodeType&&\"string\"==typeof e.nodeName))}},function(e,t,n){\"use strict\";var r=\"http://www.w3.org/1999/xlink\",o=\"http://www.w3.org/XML/1998/namespace\",a={accentHeight:\"accent-height\",accumulate:0,additive:0,alignmentBaseline:\"alignment-baseline\",allowReorder:\"allowReorder\",alphabetic:0,amplitude:0,arabicForm:\"arabic-form\",ascent:0,attributeName:\"attributeName\",attributeType:\"attributeType\",autoReverse:\"autoReverse\",azimuth:0,baseFrequency:\"baseFrequency\",baseProfile:\"baseProfile\",baselineShift:\"baseline-shift\",bbox:0,begin:0,bias:0,by:0,calcMode:\"calcMode\",capHeight:\"cap-height\",clip:0,clipPath:\"clip-path\",clipRule:\"clip-rule\",clipPathUnits:\"clipPathUnits\",colorInterpolation:\"color-interpolation\",colorInterpolationFilters:\"color-interpolation-filters\",colorProfile:\"color-profile\",colorRendering:\"color-rendering\",contentScriptType:\"contentScriptType\",contentStyleType:\"contentStyleType\",cursor:0,cx:0,cy:0,d:0,decelerate:0,descent:0,diffuseConstant:\"diffuseConstant\",direction:0,display:0,divisor:0,dominantBaseline:\"dominant-baseline\",dur:0,dx:0,dy:0,edgeMode:\"edgeMode\",elevation:0,enableBackground:\"enable-background\",end:0,exponent:0,externalResourcesRequired:\"externalResourcesRequired\",fill:0,fillOpacity:\"fill-opacity\",fillRule:\"fill-rule\",filter:0,filterRes:\"filterRes\",filterUnits:\"filterUnits\",floodColor:\"flood-color\",floodOpacity:\"flood-opacity\",focusable:0,fontFamily:\"font-family\",fontSize:\"font-size\",fontSizeAdjust:\"font-size-adjust\",fontStretch:\"font-stretch\",fontStyle:\"font-style\",fontVariant:\"font-variant\",fontWeight:\"font-weight\",format:0,from:0,fx:0,fy:0,g1:0,g2:0,glyphName:\"glyph-name\",glyphOrientationHorizontal:\"glyph-orientation-horizontal\",glyphOrientationVertical:\"glyph-orientation-vertical\",glyphRef:\"glyphRef\",gradientTransform:\"gradientTransform\",gradientUnits:\"gradientUnits\",hanging:0,horizAdvX:\"horiz-adv-x\",horizOriginX:\"horiz-origin-x\",ideographic:0,imageRendering:\"image-rendering\",in:0,in2:0,intercept:0,k:0,k1:0,k2:0,k3:0,k4:0,kernelMatrix:\"kernelMatrix\",kernelUnitLength:\"kernelUnitLength\",kerning:0,keyPoints:\"keyPoints\",keySplines:\"keySplines\",keyTimes:\"keyTimes\",lengthAdjust:\"lengthAdjust\",letterSpacing:\"letter-spacing\",lightingColor:\"lighting-color\",limitingConeAngle:\"limitingConeAngle\",local:0,markerEnd:\"marker-end\",markerMid:\"marker-mid\",markerStart:\"marker-start\",markerHeight:\"markerHeight\",markerUnits:\"markerUnits\",markerWidth:\"markerWidth\",mask:0,maskContentUnits:\"maskContentUnits\",maskUnits:\"maskUnits\",mathematical:0,mode:0,numOctaves:\"numOctaves\",offset:0,opacity:0,operator:0,order:0,orient:0,orientation:0,origin:0,overflow:0,overlinePosition:\"overline-position\",overlineThickness:\"overline-thickness\",paintOrder:\"paint-order\",panose1:\"panose-1\",pathLength:\"pathLength\",patternContentUnits:\"patternContentUnits\",patternTransform:\"patternTransform\",patternUnits:\"patternUnits\",pointerEvents:\"pointer-events\",points:0,pointsAtX:\"pointsAtX\",pointsAtY:\"pointsAtY\",pointsAtZ:\"pointsAtZ\",preserveAlpha:\"preserveAlpha\",preserveAspectRatio:\"preserveAspectRatio\",primitiveUnits:\"primitiveUnits\",r:0,radius:0,refX:\"refX\",refY:\"refY\",renderingIntent:\"rendering-intent\",repeatCount:\"repeatCount\",repeatDur:\"repeatDur\",requiredExtensions:\"requiredExtensions\",requiredFeatures:\"requiredFeatures\",restart:0,result:0,rotate:0,rx:0,ry:0,scale:0,seed:0,shapeRendering:\"shape-rendering\",slope:0,spacing:0,specularConstant:\"specularConstant\",specularExponent:\"specularExponent\",speed:0,spreadMethod:\"spreadMethod\",startOffset:\"startOffset\",stdDeviation:\"stdDeviation\",stemh:0,stemv:0,stitchTiles:\"stitchTiles\",stopColor:\"stop-color\",stopOpacity:\"stop-opacity\",strikethroughPosition:\"strikethrough-position\",strikethroughThickness:\"strikethrough-thickness\",string:0,stroke:0,strokeDasharray:\"stroke-dasharray\",strokeDashoffset:\"stroke-dashoffset\",strokeLinecap:\"stroke-linecap\",strokeLinejoin:\"stroke-linejoin\",strokeMiterlimit:\"stroke-miterlimit\",strokeOpacity:\"stroke-opacity\",strokeWidth:\"stroke-width\",surfaceScale:\"surfaceScale\",systemLanguage:\"systemLanguage\",tableValues:\"tableValues\",targetX:\"targetX\",targetY:\"targetY\",textAnchor:\"text-anchor\",textDecoration:\"text-decoration\",textRendering:\"text-rendering\",textLength:\"textLength\",to:0,transform:0,u1:0,u2:0,underlinePosition:\"underline-position\",underlineThickness:\"underline-thickness\",unicode:0,unicodeBidi:\"unicode-bidi\",unicodeRange:\"unicode-range\",unitsPerEm:\"units-per-em\",vAlphabetic:\"v-alphabetic\",vHanging:\"v-hanging\",vIdeographic:\"v-ideographic\",vMathematical:\"v-mathematical\",values:0,vectorEffect:\"vector-effect\",version:0,vertAdvY:\"vert-adv-y\",vertOriginX:\"vert-origin-x\",vertOriginY:\"vert-origin-y\",viewBox:\"viewBox\",viewTarget:\"viewTarget\",visibility:0,widths:0,wordSpacing:\"word-spacing\",writingMode:\"writing-mode\",x:0,xHeight:\"x-height\",x1:0,x2:0,xChannelSelector:\"xChannelSelector\",xlinkActuate:\"xlink:actuate\",xlinkArcrole:\"xlink:arcrole\",xlinkHref:\"xlink:href\",xlinkRole:\"xlink:role\",xlinkShow:\"xlink:show\",xlinkTitle:\"xlink:title\",xlinkType:\"xlink:type\",xmlBase:\"xml:base\",xmlns:0,xmlnsXlink:\"xmlns:xlink\",xmlLang:\"xml:lang\",xmlSpace:\"xml:space\",y:0,y1:0,y2:0,yChannelSelector:\"yChannelSelector\",z:0,zoomAndPan:\"zoomAndPan\"},i={Properties:{},DOMAttributeNamespaces:{xlinkActuate:r,xlinkArcrole:r,xlinkHref:r,xlinkRole:r,xlinkShow:r,xlinkTitle:r,xlinkType:r,xmlBase:o,xmlLang:o,xmlSpace:o},DOMAttributeNames:{}};Object.keys(a).forEach(function(e){i.Properties[e]=0,a[e]&&(i.DOMAttributeNames[e]=a[e])}),e.exports=i},function(e,t,n){\"use strict\";var r=n(27),o=n(9),a=n(6),i=n(96),s=n(18),u=n(97),l=n(82),c=n(51),d=o.canUseDOM&&\"documentMode\"in document&&document.documentMode<=11,f={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:[\"topBlur\",\"topContextMenu\",\"topFocus\",\"topKeyDown\",\"topKeyUp\",\"topMouseDown\",\"topMouseUp\",\"topSelectionChange\"]}},p=null,h=null,m=null,g=!1,v=!1;function b(e,t){if(g||null==p||p!==u())return null;var n=function(e){if(\"selectionStart\"in e&&i.hasSelectionCapabilities(e))return{start:e.selectionStart,end:e.selectionEnd};if(window.getSelection){var t=window.getSelection();return{anchorNode:t.anchorNode,anchorOffset:t.anchorOffset,focusNode:t.focusNode,focusOffset:t.focusOffset}}if(document.selection){var n=document.selection.createRange();return{parentElement:n.parentElement(),text:n.text,top:n.boundingTop,left:n.boundingLeft}}}(p);if(!m||!c(m,n)){m=n;var o=s.getPooled(f.select,h,e,t);return o.type=\"select\",o.target=p,r.accumulateTwoPhaseDispatches(o),o}return null}var y={eventTypes:f,extractEvents:function(e,t,n,r){if(!v)return null;var o=t?a.getNodeFromInstance(t):window;switch(e){case\"topFocus\":(l(o)||\"true\"===o.contentEditable)&&(p=o,h=t,m=null);break;case\"topBlur\":p=null,h=null,m=null;break;case\"topMouseDown\":g=!0;break;case\"topContextMenu\":case\"topMouseUp\":return g=!1,b(n,r);case\"topSelectionChange\":if(d)break;case\"topKeyDown\":case\"topKeyUp\":return b(n,r)}return null},didPutListener:function(e,t,n){\"onSelect\"===t&&(v=!0)}};e.exports=y},function(e,t,n){\"use strict\";var r=n(4),o=n(95),a=n(27),i=n(6),s=n(203),u=n(204),l=n(18),c=n(205),d=n(206),f=n(34),p=n(208),h=n(209),m=n(210),g=n(29),v=n(211),b=n(11),y=n(56),w=(n(1),{}),x={};[\"abort\",\"animationEnd\",\"animationIteration\",\"animationStart\",\"blur\",\"canPlay\",\"canPlayThrough\",\"click\",\"contextMenu\",\"copy\",\"cut\",\"doubleClick\",\"drag\",\"dragEnd\",\"dragEnter\",\"dragExit\",\"dragLeave\",\"dragOver\",\"dragStart\",\"drop\",\"durationChange\",\"emptied\",\"encrypted\",\"ended\",\"error\",\"focus\",\"input\",\"invalid\",\"keyDown\",\"keyPress\",\"keyUp\",\"load\",\"loadedData\",\"loadedMetadata\",\"loadStart\",\"mouseDown\",\"mouseMove\",\"mouseOut\",\"mouseOver\",\"mouseUp\",\"paste\",\"pause\",\"play\",\"playing\",\"progress\",\"rateChange\",\"reset\",\"scroll\",\"seeked\",\"seeking\",\"stalled\",\"submit\",\"suspend\",\"timeUpdate\",\"touchCancel\",\"touchEnd\",\"touchMove\",\"touchStart\",\"transitionEnd\",\"volumeChange\",\"waiting\",\"wheel\"].forEach(function(e){var t=e[0].toUpperCase()+e.slice(1),n=\"on\"+t,r=\"top\"+t,o={phasedRegistrationNames:{bubbled:n,captured:n+\"Capture\"},dependencies:[r]};w[e]=o,x[r]=o});var _={};function E(e){return\".\"+e._rootNodeID}function k(e){return\"button\"===e||\"input\"===e||\"select\"===e||\"textarea\"===e}var S={eventTypes:w,extractEvents:function(e,t,n,o){var i,b=x[e];if(!b)return null;switch(e){case\"topAbort\":case\"topCanPlay\":case\"topCanPlayThrough\":case\"topDurationChange\":case\"topEmptied\":case\"topEncrypted\":case\"topEnded\":case\"topError\":case\"topInput\":case\"topInvalid\":case\"topLoad\":case\"topLoadedData\":case\"topLoadedMetadata\":case\"topLoadStart\":case\"topPause\":case\"topPlay\":case\"topPlaying\":case\"topProgress\":case\"topRateChange\":case\"topReset\":case\"topSeeked\":case\"topSeeking\":case\"topStalled\":case\"topSubmit\":case\"topSuspend\":case\"topTimeUpdate\":case\"topVolumeChange\":case\"topWaiting\":i=l;break;case\"topKeyPress\":if(0===y(n))return null;case\"topKeyDown\":case\"topKeyUp\":i=d;break;case\"topBlur\":case\"topFocus\":i=c;break;case\"topClick\":if(2===n.button)return null;case\"topDoubleClick\":case\"topMouseDown\":case\"topMouseMove\":case\"topMouseUp\":case\"topMouseOut\":case\"topMouseOver\":case\"topContextMenu\":i=f;break;case\"topDrag\":case\"topDragEnd\":case\"topDragEnter\":case\"topDragExit\":case\"topDragLeave\":case\"topDragOver\":case\"topDragStart\":case\"topDrop\":i=p;break;case\"topTouchCancel\":case\"topTouchEnd\":case\"topTouchMove\":case\"topTouchStart\":i=h;break;case\"topAnimationEnd\":case\"topAnimationIteration\":case\"topAnimationStart\":i=s;break;case\"topTransitionEnd\":i=m;break;case\"topScroll\":i=g;break;case\"topWheel\":i=v;break;case\"topCopy\":case\"topCut\":case\"topPaste\":i=u}i||r(\"86\",e);var w=i.getPooled(b,t,n,o);return a.accumulateTwoPhaseDispatches(w),w},didPutListener:function(e,t,n){if(\"onClick\"===t&&!k(e._tag)){var r=E(e),a=i.getNodeFromInstance(e);_[r]||(_[r]=o.listen(a,\"click\",b))}},willDeleteListener:function(e,t){if(\"onClick\"===t&&!k(e._tag)){var n=E(e);_[n].remove(),delete _[n]}}};e.exports=S},function(e,t,n){\"use strict\";var r=n(18);function o(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(o,{animationName:null,elapsedTime:null,pseudoElement:null}),e.exports=o},function(e,t,n){\"use strict\";var r=n(18),o={clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}};function a(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(a,o),e.exports=a},function(e,t,n){\"use strict\";var r=n(29);function o(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(o,{relatedTarget:null}),e.exports=o},function(e,t,n){\"use strict\";var r=n(29),o=n(56),a={key:n(207),location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:n(45),charCode:function(e){return\"keypress\"===e.type?o(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?o(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}};function i(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(i,a),e.exports=i},function(e,t,n){\"use strict\";var r=n(56),o={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},a={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"};e.exports=function(e){if(e.key){var t=o[e.key]||e.key;if(\"Unidentified\"!==t)return t}if(\"keypress\"===e.type){var n=r(e);return 13===n?\"Enter\":String.fromCharCode(n)}return\"keydown\"===e.type||\"keyup\"===e.type?a[e.keyCode]||\"Unidentified\":\"\"}},function(e,t,n){\"use strict\";var r=n(34);function o(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(o,{dataTransfer:null}),e.exports=o},function(e,t,n){\"use strict\";var r=n(29),o={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:n(45)};function a(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(a,o),e.exports=a},function(e,t,n){\"use strict\";var r=n(18);function o(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(o,{propertyName:null,elapsedTime:null,pseudoElement:null}),e.exports=o},function(e,t,n){\"use strict\";var r=n(34);function o(e,t,n,o){return r.call(this,e,t,n,o)}r.augmentClass(o,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),e.exports=o},function(e,t,n){\"use strict\";n(55);var r=9;e.exports=function(e,t){var n={_topLevelWrapper:e,_idCounter:1,_ownerDocument:t?t.nodeType===r?t:t.ownerDocument:null,_node:t,_tag:t?t.nodeName.toLowerCase():null,_namespaceURI:t?t.namespaceURI:null};return n}},function(e,t,n){\"use strict\";e.exports={useCreateElement:!0,useFiber:!1}},function(e,t,n){\"use strict\";var r=n(215),o=/\\/?>/,a=/^<\\!\\-\\-/,i={CHECKSUM_ATTR_NAME:\"data-react-checksum\",addChecksumToMarkup:function(e){var t=r(e);return a.test(e)?e:e.replace(o,\" \"+i.CHECKSUM_ATTR_NAME+'=\"'+t+'\"$&')},canReuseMarkup:function(e,t){var n=t.getAttribute(i.CHECKSUM_ATTR_NAME);return n=n&&parseInt(n,10),r(e)===n}};e.exports=i},function(e,t,n){\"use strict\";var r=65521;e.exports=function(e){for(var t=1,n=0,o=0,a=e.length,i=-4&a;o<i;){for(var s=Math.min(o+4096,i);o<s;o+=4)n+=(t+=e.charCodeAt(o))+(t+=e.charCodeAt(o+1))+(t+=e.charCodeAt(o+2))+(t+=e.charCodeAt(o+3));t%=r,n%=r}for(;o<a;o++)n+=t+=e.charCodeAt(o);return(t%=r)|(n%=r)<<16}},function(e,t,n){\"use strict\";e.exports=\"15.6.2\"},function(e,t,n){\"use strict\";var r=n(4),o=(n(17),n(6)),a=n(30),i=n(99);n(1),n(3);e.exports=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=a.get(e);if(t)return(t=i(t))?o.getNodeFromInstance(t):null;\"function\"==typeof e.render?r(\"44\"):r(\"45\",Object.keys(e))}},function(e,t,n){\"use strict\";var r=n(98);e.exports=r.renderSubtreeIntoContainer},function(e,t,n){(function(e,t,n){\"use strict\";function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){a(e,t,n[t])})}return e}t=t&&t.hasOwnProperty(\"default\")?t.default:t,n=n&&n.hasOwnProperty(\"default\")?n.default:n;var s=function(e){var t=\"transitionend\";function n(t){var n=this,o=!1;return e(this).one(r.TRANSITION_END,function(){o=!0}),setTimeout(function(){o||r.triggerTransitionEnd(n)},t),this}var r={TRANSITION_END:\"bsTransitionEnd\",getUID:function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},getSelectorFromElement:function(t){var n=t.getAttribute(\"data-target\");n&&\"#\"!==n||(n=t.getAttribute(\"href\")||\"\");try{return e(document).find(n).length>0?n:null}catch(e){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css(\"transition-duration\");return parseFloat(n)?(n=n.split(\",\")[0],1e3*parseFloat(n)):0},reflow:function(e){return e.offsetHeight},triggerTransitionEnd:function(n){e(n).trigger(t)},supportsTransitionEnd:function(){return Boolean(t)},isElement:function(e){return(e[0]||e).nodeType},typeCheckConfig:function(e,t,n){for(var o in n)if(Object.prototype.hasOwnProperty.call(n,o)){var a=n[o],i=t[o],s=i&&r.isElement(i)?\"element\":(u=i,{}.toString.call(u).match(/\\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(a).test(s))throw new Error(e.toUpperCase()+': Option \"'+o+'\" provided type \"'+s+'\" but expected type \"'+a+'\".')}var u}};return e.fn.emulateTransitionEnd=n,e.event.special[r.TRANSITION_END]={bindType:t,delegateType:t,handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}},r}(t),u=function(e){var t=e.fn.alert,n={CLOSE:\"close.bs.alert\",CLOSED:\"closed.bs.alert\",CLICK_DATA_API:\"click.bs.alert.data-api\"},r=\"alert\",a=\"fade\",i=\"show\",u=function(){function t(e){this._element=e}var u=t.prototype;return u.close=function(e){e=e||this._element;var t=this._getRootElement(e);this._triggerCloseEvent(t).isDefaultPrevented()||this._removeElement(t)},u.dispose=function(){e.removeData(this._element,\"bs.alert\"),this._element=null},u._getRootElement=function(t){var n=s.getSelectorFromElement(t),o=!1;return n&&(o=e(n)[0]),o||(o=e(t).closest(\".\"+r)[0]),o},u._triggerCloseEvent=function(t){var r=e.Event(n.CLOSE);return e(t).trigger(r),r},u._removeElement=function(t){var n=this;if(e(t).removeClass(i),e(t).hasClass(a)){var r=s.getTransitionDurationFromElement(t);e(t).one(s.TRANSITION_END,function(e){return n._destroyElement(t,e)}).emulateTransitionEnd(r)}else this._destroyElement(t)},u._destroyElement=function(t){e(t).detach().trigger(n.CLOSED).remove()},t._jQueryInterface=function(n){return this.each(function(){var r=e(this),o=r.data(\"bs.alert\");o||(o=new t(this),r.data(\"bs.alert\",o)),\"close\"===n&&o[n](this)})},t._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},o(t,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}}]),t}();return e(document).on(n.CLICK_DATA_API,'[data-dismiss=\"alert\"]',u._handleDismiss(new u)),e.fn.alert=u._jQueryInterface,e.fn.alert.Constructor=u,e.fn.alert.noConflict=function(){return e.fn.alert=t,u._jQueryInterface},u}(t),l=function(e){var t=\"button\",n=e.fn[t],r=\"active\",a=\"btn\",i=\"focus\",s='[data-toggle^=\"button\"]',u='[data-toggle=\"buttons\"]',l=\"input\",c=\".active\",d=\".btn\",f={CLICK_DATA_API:\"click.bs.button.data-api\",FOCUS_BLUR_DATA_API:\"focus.bs.button.data-api blur.bs.button.data-api\"},p=function(){function t(e){this._element=e}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,o=e(this._element).closest(u)[0];if(o){var a=e(this._element).find(l)[0];if(a){if(\"radio\"===a.type)if(a.checked&&e(this._element).hasClass(r))t=!1;else{var i=e(o).find(c)[0];i&&e(i).removeClass(r)}if(t){if(a.hasAttribute(\"disabled\")||o.hasAttribute(\"disabled\")||a.classList.contains(\"disabled\")||o.classList.contains(\"disabled\"))return;a.checked=!e(this._element).hasClass(r),e(a).trigger(\"change\")}a.focus(),n=!1}}n&&this._element.setAttribute(\"aria-pressed\",!e(this._element).hasClass(r)),t&&e(this._element).toggleClass(r)},n.dispose=function(){e.removeData(this._element,\"bs.button\"),this._element=null},t._jQueryInterface=function(n){return this.each(function(){var r=e(this).data(\"bs.button\");r||(r=new t(this),e(this).data(\"bs.button\",r)),\"toggle\"===n&&r[n]()})},o(t,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}}]),t}();return e(document).on(f.CLICK_DATA_API,s,function(t){t.preventDefault();var n=t.target;e(n).hasClass(a)||(n=e(n).closest(d)),p._jQueryInterface.call(e(n),\"toggle\")}).on(f.FOCUS_BLUR_DATA_API,s,function(t){var n=e(t.target).closest(d)[0];e(n).toggleClass(i,/^focus(in)?$/.test(t.type))}),e.fn[t]=p._jQueryInterface,e.fn[t].Constructor=p,e.fn[t].noConflict=function(){return e.fn[t]=n,p._jQueryInterface},p}(t),c=function(e){var t=\"carousel\",n=\"bs.carousel\",r=\".\"+n,a=e.fn[t],u={interval:5e3,keyboard:!0,slide:!1,pause:\"hover\",wrap:!0},l={interval:\"(number|boolean)\",keyboard:\"boolean\",slide:\"(boolean|string)\",pause:\"(string|boolean)\",wrap:\"boolean\"},c=\"next\",d=\"prev\",f=\"left\",p=\"right\",h={SLIDE:\"slide\"+r,SLID:\"slid\"+r,KEYDOWN:\"keydown\"+r,MOUSEENTER:\"mouseenter\"+r,MOUSELEAVE:\"mouseleave\"+r,TOUCHEND:\"touchend\"+r,LOAD_DATA_API:\"load.bs.carousel.data-api\",CLICK_DATA_API:\"click.bs.carousel.data-api\"},m=\"carousel\",g=\"active\",v=\"slide\",b=\"carousel-item-right\",y=\"carousel-item-left\",w=\"carousel-item-next\",x=\"carousel-item-prev\",_={ACTIVE:\".active\",ACTIVE_ITEM:\".active.carousel-item\",ITEM:\".carousel-item\",NEXT_PREV:\".carousel-item-next, .carousel-item-prev\",INDICATORS:\".carousel-indicators\",DATA_SLIDE:\"[data-slide], [data-slide-to]\",DATA_RIDE:'[data-ride=\"carousel\"]'},E=function(){function a(t,n){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(n),this._element=e(t)[0],this._indicatorsElement=e(this._element).find(_.INDICATORS)[0],this._addEventListeners()}var E=a.prototype;return E.next=function(){this._isSliding||this._slide(c)},E.nextWhenVisible=function(){!document.hidden&&e(this._element).is(\":visible\")&&\"hidden\"!==e(this._element).css(\"visibility\")&&this.next()},E.prev=function(){this._isSliding||this._slide(d)},E.pause=function(t){t||(this._isPaused=!0),e(this._element).find(_.NEXT_PREV)[0]&&(s.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},E.cycle=function(e){e||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},E.to=function(t){var n=this;this._activeElement=e(this._element).find(_.ACTIVE_ITEM)[0];var r=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one(h.SLID,function(){return n.to(t)});else{if(r===t)return this.pause(),void this.cycle();var o=t>r?c:d;this._slide(o,this._items[t])}},E.dispose=function(){e(this._element).off(r),e.removeData(this._element,n),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},E._getConfig=function(e){return e=i({},u,e),s.typeCheckConfig(t,e,l),e},E._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on(h.KEYDOWN,function(e){return t._keydown(e)}),\"hover\"===this._config.pause&&(e(this._element).on(h.MOUSEENTER,function(e){return t.pause(e)}).on(h.MOUSELEAVE,function(e){return t.cycle(e)}),\"ontouchstart\"in document.documentElement&&e(this._element).on(h.TOUCHEND,function(){t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout(function(e){return t.cycle(e)},500+t._config.interval)}))},E._keydown=function(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case 37:e.preventDefault(),this.prev();break;case 39:e.preventDefault(),this.next()}},E._getItemIndex=function(t){return this._items=e.makeArray(e(t).parent().find(_.ITEM)),this._items.indexOf(t)},E._getItemByDirection=function(e,t){var n=e===c,r=e===d,o=this._getItemIndex(t),a=this._items.length-1;if((r&&0===o||n&&o===a)&&!this._config.wrap)return t;var i=(o+(e===d?-1:1))%this._items.length;return-1===i?this._items[this._items.length-1]:this._items[i]},E._triggerSlideEvent=function(t,n){var r=this._getItemIndex(t),o=this._getItemIndex(e(this._element).find(_.ACTIVE_ITEM)[0]),a=e.Event(h.SLIDE,{relatedTarget:t,direction:n,from:o,to:r});return e(this._element).trigger(a),a},E._setActiveIndicatorElement=function(t){if(this._indicatorsElement){e(this._indicatorsElement).find(_.ACTIVE).removeClass(g);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&e(n).addClass(g)}},E._slide=function(t,n){var r,o,a,i=this,u=e(this._element).find(_.ACTIVE_ITEM)[0],l=this._getItemIndex(u),d=n||u&&this._getItemByDirection(t,u),m=this._getItemIndex(d),E=Boolean(this._interval);if(t===c?(r=y,o=w,a=f):(r=b,o=x,a=p),d&&e(d).hasClass(g))this._isSliding=!1;else if(!this._triggerSlideEvent(d,a).isDefaultPrevented()&&u&&d){this._isSliding=!0,E&&this.pause(),this._setActiveIndicatorElement(d);var k=e.Event(h.SLID,{relatedTarget:d,direction:a,from:l,to:m});if(e(this._element).hasClass(v)){e(d).addClass(o),s.reflow(d),e(u).addClass(r),e(d).addClass(r);var S=s.getTransitionDurationFromElement(u);e(u).one(s.TRANSITION_END,function(){e(d).removeClass(r+\" \"+o).addClass(g),e(u).removeClass(g+\" \"+o+\" \"+r),i._isSliding=!1,setTimeout(function(){return e(i._element).trigger(k)},0)}).emulateTransitionEnd(S)}else e(u).removeClass(g),e(d).addClass(g),this._isSliding=!1,e(this._element).trigger(k);E&&this.cycle()}},a._jQueryInterface=function(t){return this.each(function(){var r=e(this).data(n),o=i({},u,e(this).data());\"object\"==typeof t&&(o=i({},o,t));var s=\"string\"==typeof t?t:o.slide;if(r||(r=new a(this,o),e(this).data(n,r)),\"number\"==typeof t)r.to(t);else if(\"string\"==typeof s){if(void 0===r[s])throw new TypeError('No method named \"'+s+'\"');r[s]()}else o.interval&&(r.pause(),r.cycle())})},a._dataApiClickHandler=function(t){var r=s.getSelectorFromElement(this);if(r){var o=e(r)[0];if(o&&e(o).hasClass(m)){var u=i({},e(o).data(),e(this).data()),l=this.getAttribute(\"data-slide-to\");l&&(u.interval=!1),a._jQueryInterface.call(e(o),u),l&&e(o).data(n).to(l),t.preventDefault()}}},o(a,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}},{key:\"Default\",get:function(){return u}}]),a}();return e(document).on(h.CLICK_DATA_API,_.DATA_SLIDE,E._dataApiClickHandler),e(window).on(h.LOAD_DATA_API,function(){e(_.DATA_RIDE).each(function(){var t=e(this);E._jQueryInterface.call(t,t.data())})}),e.fn[t]=E._jQueryInterface,e.fn[t].Constructor=E,e.fn[t].noConflict=function(){return e.fn[t]=a,E._jQueryInterface},E}(t),d=function(e){var t=\"collapse\",n=\"bs.collapse\",r=e.fn[t],a={toggle:!0,parent:\"\"},u={toggle:\"boolean\",parent:\"(string|element)\"},l={SHOW:\"show.bs.collapse\",SHOWN:\"shown.bs.collapse\",HIDE:\"hide.bs.collapse\",HIDDEN:\"hidden.bs.collapse\",CLICK_DATA_API:\"click.bs.collapse.data-api\"},c=\"show\",d=\"collapse\",f=\"collapsing\",p=\"collapsed\",h=\"width\",m=\"height\",g={ACTIVES:\".show, .collapsing\",DATA_TOGGLE:'[data-toggle=\"collapse\"]'},v=function(){function r(t,n){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(n),this._triggerArray=e.makeArray(e('[data-toggle=\"collapse\"][href=\"#'+t.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+t.id+'\"]'));for(var r=e(g.DATA_TOGGLE),o=0;o<r.length;o++){var a=r[o],i=s.getSelectorFromElement(a);null!==i&&e(i).filter(t).length>0&&(this._selector=i,this._triggerArray.push(a))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var v=r.prototype;return v.toggle=function(){e(this._element).hasClass(c)?this.hide():this.show()},v.show=function(){var t,o,a=this;if(!this._isTransitioning&&!e(this._element).hasClass(c)&&(this._parent&&0===(t=e.makeArray(e(this._parent).find(g.ACTIVES).filter('[data-parent=\"'+this._config.parent+'\"]'))).length&&(t=null),!(t&&(o=e(t).not(this._selector).data(n))&&o._isTransitioning))){var i=e.Event(l.SHOW);if(e(this._element).trigger(i),!i.isDefaultPrevented()){t&&(r._jQueryInterface.call(e(t).not(this._selector),\"hide\"),o||e(t).data(n,null));var u=this._getDimension();e(this._element).removeClass(d).addClass(f),this._element.style[u]=0,this._triggerArray.length>0&&e(this._triggerArray).removeClass(p).attr(\"aria-expanded\",!0),this.setTransitioning(!0);var h=\"scroll\"+(u[0].toUpperCase()+u.slice(1)),m=s.getTransitionDurationFromElement(this._element);e(this._element).one(s.TRANSITION_END,function(){e(a._element).removeClass(f).addClass(d).addClass(c),a._element.style[u]=\"\",a.setTransitioning(!1),e(a._element).trigger(l.SHOWN)}).emulateTransitionEnd(m),this._element.style[u]=this._element[h]+\"px\"}}},v.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass(c)){var n=e.Event(l.HIDE);if(e(this._element).trigger(n),!n.isDefaultPrevented()){var r=this._getDimension();if(this._element.style[r]=this._element.getBoundingClientRect()[r]+\"px\",s.reflow(this._element),e(this._element).addClass(f).removeClass(d).removeClass(c),this._triggerArray.length>0)for(var o=0;o<this._triggerArray.length;o++){var a=this._triggerArray[o],i=s.getSelectorFromElement(a);if(null!==i)e(i).hasClass(c)||e(a).addClass(p).attr(\"aria-expanded\",!1)}this.setTransitioning(!0);this._element.style[r]=\"\";var u=s.getTransitionDurationFromElement(this._element);e(this._element).one(s.TRANSITION_END,function(){t.setTransitioning(!1),e(t._element).removeClass(f).addClass(d).trigger(l.HIDDEN)}).emulateTransitionEnd(u)}}},v.setTransitioning=function(e){this._isTransitioning=e},v.dispose=function(){e.removeData(this._element,n),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},v._getConfig=function(e){return(e=i({},a,e)).toggle=Boolean(e.toggle),s.typeCheckConfig(t,e,u),e},v._getDimension=function(){return e(this._element).hasClass(h)?h:m},v._getParent=function(){var t=this,n=null;s.isElement(this._config.parent)?(n=this._config.parent,void 0!==this._config.parent.jquery&&(n=this._config.parent[0])):n=e(this._config.parent)[0];var o='[data-toggle=\"collapse\"][data-parent=\"'+this._config.parent+'\"]';return e(n).find(o).each(function(e,n){t._addAriaAndCollapsedClass(r._getTargetFromElement(n),[n])}),n},v._addAriaAndCollapsedClass=function(t,n){if(t){var r=e(t).hasClass(c);n.length>0&&e(n).toggleClass(p,!r).attr(\"aria-expanded\",r)}},r._getTargetFromElement=function(t){var n=s.getSelectorFromElement(t);return n?e(n)[0]:null},r._jQueryInterface=function(t){return this.each(function(){var o=e(this),s=o.data(n),u=i({},a,o.data(),\"object\"==typeof t&&t);if(!s&&u.toggle&&/show|hide/.test(t)&&(u.toggle=!1),s||(s=new r(this,u),o.data(n,s)),\"string\"==typeof t){if(void 0===s[t])throw new TypeError('No method named \"'+t+'\"');s[t]()}})},o(r,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}},{key:\"Default\",get:function(){return a}}]),r}();return e(document).on(l.CLICK_DATA_API,g.DATA_TOGGLE,function(t){\"A\"===t.currentTarget.tagName&&t.preventDefault();var r=e(this),o=s.getSelectorFromElement(this);e(o).each(function(){var t=e(this),o=t.data(n)?\"toggle\":r.data();v._jQueryInterface.call(t,o)})}),e.fn[t]=v._jQueryInterface,e.fn[t].Constructor=v,e.fn[t].noConflict=function(){return e.fn[t]=r,v._jQueryInterface},v}(t),f=function(e){var t=\"dropdown\",r=\"bs.dropdown\",a=\".\"+r,u=e.fn[t],l=new RegExp(\"38|40|27\"),c={HIDE:\"hide\"+a,HIDDEN:\"hidden\"+a,SHOW:\"show\"+a,SHOWN:\"shown\"+a,CLICK:\"click\"+a,CLICK_DATA_API:\"click.bs.dropdown.data-api\",KEYDOWN_DATA_API:\"keydown.bs.dropdown.data-api\",KEYUP_DATA_API:\"keyup.bs.dropdown.data-api\"},d=\"disabled\",f=\"show\",p=\"dropup\",h=\"dropright\",m=\"dropleft\",g=\"dropdown-menu-right\",v=\"position-static\",b='[data-toggle=\"dropdown\"]',y=\".dropdown form\",w=\".dropdown-menu\",x=\".navbar-nav\",_=\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",E=\"top-start\",k=\"top-end\",S=\"bottom-start\",C=\"bottom-end\",O=\"right-start\",T=\"left-start\",P={offset:0,flip:!0,boundary:\"scrollParent\",reference:\"toggle\",display:\"dynamic\"},I={offset:\"(number|string|function)\",flip:\"boolean\",boundary:\"(string|element)\",reference:\"(string|element)\",display:\"string\"},D=function(){function u(e,t){this._element=e,this._popper=null,this._config=this._getConfig(t),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var y=u.prototype;return y.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass(d)){var t=u._getParentFromElement(this._element),r=e(this._menu).hasClass(f);if(u._clearMenus(),!r){var o={relatedTarget:this._element},a=e.Event(c.SHOW,o);if(e(t).trigger(a),!a.isDefaultPrevented()){if(!this._inNavbar){if(void 0===n)throw new TypeError(\"Bootstrap dropdown require Popper.js (https://popper.js.org)\");var i=this._element;\"parent\"===this._config.reference?i=t:s.isElement(this._config.reference)&&(i=this._config.reference,void 0!==this._config.reference.jquery&&(i=this._config.reference[0])),\"scrollParent\"!==this._config.boundary&&e(t).addClass(v),this._popper=new n(i,this._menu,this._getPopperConfig())}\"ontouchstart\"in document.documentElement&&0===e(t).closest(x).length&&e(document.body).children().on(\"mouseover\",null,e.noop),this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),e(this._menu).toggleClass(f),e(t).toggleClass(f).trigger(e.Event(c.SHOWN,o))}}}},y.dispose=function(){e.removeData(this._element,r),e(this._element).off(a),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},y.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},y._addEventListeners=function(){var t=this;e(this._element).on(c.CLICK,function(e){e.preventDefault(),e.stopPropagation(),t.toggle()})},y._getConfig=function(n){return n=i({},this.constructor.Default,e(this._element).data(),n),s.typeCheckConfig(t,n,this.constructor.DefaultType),n},y._getMenuElement=function(){if(!this._menu){var t=u._getParentFromElement(this._element);this._menu=e(t).find(w)[0]}return this._menu},y._getPlacement=function(){var t=e(this._element).parent(),n=S;return t.hasClass(p)?(n=E,e(this._menu).hasClass(g)&&(n=k)):t.hasClass(h)?n=O:t.hasClass(m)?n=T:e(this._menu).hasClass(g)&&(n=C),n},y._detectNavbar=function(){return e(this._element).closest(\".navbar\").length>0},y._getPopperConfig=function(){var e=this,t={};\"function\"==typeof this._config.offset?t.fn=function(t){return t.offsets=i({},t.offsets,e._config.offset(t.offsets)||{}),t}:t.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:t,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return\"static\"===this._config.display&&(n.modifiers.applyStyle={enabled:!1}),n},u._jQueryInterface=function(t){return this.each(function(){var n=e(this).data(r);if(n||(n=new u(this,\"object\"==typeof t?t:null),e(this).data(r,n)),\"string\"==typeof t){if(void 0===n[t])throw new TypeError('No method named \"'+t+'\"');n[t]()}})},u._clearMenus=function(t){if(!t||3!==t.which&&(\"keyup\"!==t.type||9===t.which))for(var n=e.makeArray(e(b)),o=0;o<n.length;o++){var a=u._getParentFromElement(n[o]),i=e(n[o]).data(r),s={relatedTarget:n[o]};if(i){var l=i._menu;if(e(a).hasClass(f)&&!(t&&(\"click\"===t.type&&/input|textarea/i.test(t.target.tagName)||\"keyup\"===t.type&&9===t.which)&&e.contains(a,t.target))){var d=e.Event(c.HIDE,s);e(a).trigger(d),d.isDefaultPrevented()||(\"ontouchstart\"in document.documentElement&&e(document.body).children().off(\"mouseover\",null,e.noop),n[o].setAttribute(\"aria-expanded\",\"false\"),e(l).removeClass(f),e(a).removeClass(f).trigger(e.Event(c.HIDDEN,s)))}}}},u._getParentFromElement=function(t){var n,r=s.getSelectorFromElement(t);return r&&(n=e(r)[0]),n||t.parentNode},u._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||e(t.target).closest(w).length)):l.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!e(this).hasClass(d))){var n=u._getParentFromElement(this),r=e(n).hasClass(f);if((r||27===t.which&&32===t.which)&&(!r||27!==t.which&&32!==t.which)){var o=e(n).find(_).get();if(0!==o.length){var a=o.indexOf(t.target);38===t.which&&a>0&&a--,40===t.which&&a<o.length-1&&a++,a<0&&(a=0),o[a].focus()}}else{if(27===t.which){var i=e(n).find(b)[0];e(i).trigger(\"focus\")}e(this).trigger(\"click\")}}},o(u,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}},{key:\"Default\",get:function(){return P}},{key:\"DefaultType\",get:function(){return I}}]),u}();return e(document).on(c.KEYDOWN_DATA_API,b,D._dataApiKeydownHandler).on(c.KEYDOWN_DATA_API,w,D._dataApiKeydownHandler).on(c.CLICK_DATA_API+\" \"+c.KEYUP_DATA_API,D._clearMenus).on(c.CLICK_DATA_API,b,function(t){t.preventDefault(),t.stopPropagation(),D._jQueryInterface.call(e(this),\"toggle\")}).on(c.CLICK_DATA_API,y,function(e){e.stopPropagation()}),e.fn[t]=D._jQueryInterface,e.fn[t].Constructor=D,e.fn[t].noConflict=function(){return e.fn[t]=u,D._jQueryInterface},D}(t),p=function(e){var t=\"modal\",n=\".bs.modal\",r=e.fn.modal,a={backdrop:!0,keyboard:!0,focus:!0,show:!0},u={backdrop:\"(boolean|string)\",keyboard:\"boolean\",focus:\"boolean\",show:\"boolean\"},l={HIDE:\"hide.bs.modal\",HIDDEN:\"hidden.bs.modal\",SHOW:\"show.bs.modal\",SHOWN:\"shown.bs.modal\",FOCUSIN:\"focusin.bs.modal\",RESIZE:\"resize.bs.modal\",CLICK_DISMISS:\"click.dismiss.bs.modal\",KEYDOWN_DISMISS:\"keydown.dismiss.bs.modal\",MOUSEUP_DISMISS:\"mouseup.dismiss.bs.modal\",MOUSEDOWN_DISMISS:\"mousedown.dismiss.bs.modal\",CLICK_DATA_API:\"click.bs.modal.data-api\"},c=\"modal-scrollbar-measure\",d=\"modal-backdrop\",f=\"modal-open\",p=\"fade\",h=\"show\",m={DIALOG:\".modal-dialog\",DATA_TOGGLE:'[data-toggle=\"modal\"]',DATA_DISMISS:'[data-dismiss=\"modal\"]',FIXED_CONTENT:\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",STICKY_CONTENT:\".sticky-top\",NAVBAR_TOGGLER:\".navbar-toggler\"},g=function(){function r(t,n){this._config=this._getConfig(n),this._element=t,this._dialog=e(t).find(m.DIALOG)[0],this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._scrollbarWidth=0}var g=r.prototype;return g.toggle=function(e){return this._isShown?this.hide():this.show(e)},g.show=function(t){var n=this;if(!this._isTransitioning&&!this._isShown){e(this._element).hasClass(p)&&(this._isTransitioning=!0);var r=e.Event(l.SHOW,{relatedTarget:t});e(this._element).trigger(r),this._isShown||r.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),e(document.body).addClass(f),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on(l.CLICK_DISMISS,m.DATA_DISMISS,function(e){return n.hide(e)}),e(this._dialog).on(l.MOUSEDOWN_DISMISS,function(){e(n._element).one(l.MOUSEUP_DISMISS,function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return n._showElement(t)}))}},g.hide=function(t){var n=this;if(t&&t.preventDefault(),!this._isTransitioning&&this._isShown){var r=e.Event(l.HIDE);if(e(this._element).trigger(r),this._isShown&&!r.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass(p);if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off(l.FOCUSIN),e(this._element).removeClass(h),e(this._element).off(l.CLICK_DISMISS),e(this._dialog).off(l.MOUSEDOWN_DISMISS),o){var a=s.getTransitionDurationFromElement(this._element);e(this._element).one(s.TRANSITION_END,function(e){return n._hideModal(e)}).emulateTransitionEnd(a)}else this._hideModal()}}},g.dispose=function(){e.removeData(this._element,\"bs.modal\"),e(window,document,this._element,this._backdrop).off(n),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._scrollbarWidth=null},g.handleUpdate=function(){this._adjustDialog()},g._getConfig=function(e){return e=i({},a,e),s.typeCheckConfig(t,e,u),e},g._showElement=function(t){var n=this,r=e(this._element).hasClass(p);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display=\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.scrollTop=0,r&&s.reflow(this._element),e(this._element).addClass(h),this._config.focus&&this._enforceFocus();var o=e.Event(l.SHOWN,{relatedTarget:t}),a=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(o)};if(r){var i=s.getTransitionDurationFromElement(this._element);e(this._dialog).one(s.TRANSITION_END,a).emulateTransitionEnd(i)}else a()},g._enforceFocus=function(){var t=this;e(document).off(l.FOCUSIN).on(l.FOCUSIN,function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()})},g._setEscapeEvent=function(){var t=this;this._isShown&&this._config.keyboard?e(this._element).on(l.KEYDOWN_DISMISS,function(e){27===e.which&&(e.preventDefault(),t.hide())}):this._isShown||e(this._element).off(l.KEYDOWN_DISMISS)},g._setResizeEvent=function(){var t=this;this._isShown?e(window).on(l.RESIZE,function(e){return t.handleUpdate(e)}):e(window).off(l.RESIZE)},g._hideModal=function(){var t=this;this._element.style.display=\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._isTransitioning=!1,this._showBackdrop(function(){e(document.body).removeClass(f),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger(l.HIDDEN)})},g._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},g._showBackdrop=function(t){var n=this,r=e(this._element).hasClass(p)?p:\"\";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement(\"div\"),this._backdrop.className=d,r&&e(this._backdrop).addClass(r),e(this._backdrop).appendTo(document.body),e(this._element).on(l.CLICK_DISMISS,function(e){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:e.target===e.currentTarget&&(\"static\"===n._config.backdrop?n._element.focus():n.hide())}),r&&s.reflow(this._backdrop),e(this._backdrop).addClass(h),!t)return;if(!r)return void t();var o=s.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(s.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass(h);var a=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass(p)){var i=s.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(s.TRANSITION_END,a).emulateTransitionEnd(i)}else a()}else t&&t()},g._adjustDialog=function(){var e=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+\"px\"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+\"px\")},g._resetAdjustments=function(){this._element.style.paddingLeft=\"\",this._element.style.paddingRight=\"\"},g._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},g._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){e(m.FIXED_CONTENT).each(function(n,r){var o=e(r)[0].style.paddingRight,a=e(r).css(\"padding-right\");e(r).data(\"padding-right\",o).css(\"padding-right\",parseFloat(a)+t._scrollbarWidth+\"px\")}),e(m.STICKY_CONTENT).each(function(n,r){var o=e(r)[0].style.marginRight,a=e(r).css(\"margin-right\");e(r).data(\"margin-right\",o).css(\"margin-right\",parseFloat(a)-t._scrollbarWidth+\"px\")}),e(m.NAVBAR_TOGGLER).each(function(n,r){var o=e(r)[0].style.marginRight,a=e(r).css(\"margin-right\");e(r).data(\"margin-right\",o).css(\"margin-right\",parseFloat(a)+t._scrollbarWidth+\"px\")});var n=document.body.style.paddingRight,r=e(document.body).css(\"padding-right\");e(document.body).data(\"padding-right\",n).css(\"padding-right\",parseFloat(r)+this._scrollbarWidth+\"px\")}},g._resetScrollbar=function(){e(m.FIXED_CONTENT).each(function(t,n){var r=e(n).data(\"padding-right\");void 0!==r&&e(n).css(\"padding-right\",r).removeData(\"padding-right\")}),e(m.STICKY_CONTENT+\", \"+m.NAVBAR_TOGGLER).each(function(t,n){var r=e(n).data(\"margin-right\");void 0!==r&&e(n).css(\"margin-right\",r).removeData(\"margin-right\")});var t=e(document.body).data(\"padding-right\");void 0!==t&&e(document.body).css(\"padding-right\",t).removeData(\"padding-right\")},g._getScrollbarWidth=function(){var e=document.createElement(\"div\");e.className=c,document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t},r._jQueryInterface=function(t,n){return this.each(function(){var o=e(this).data(\"bs.modal\"),a=i({},r.Default,e(this).data(),\"object\"==typeof t&&t);if(o||(o=new r(this,a),e(this).data(\"bs.modal\",o)),\"string\"==typeof t){if(void 0===o[t])throw new TypeError('No method named \"'+t+'\"');o[t](n)}else a.show&&o.show(n)})},o(r,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}},{key:\"Default\",get:function(){return a}}]),r}();return e(document).on(l.CLICK_DATA_API,m.DATA_TOGGLE,function(t){var n,r=this,o=s.getSelectorFromElement(this);o&&(n=e(o)[0]);var a=e(n).data(\"bs.modal\")?\"toggle\":i({},e(n).data(),e(this).data());\"A\"!==this.tagName&&\"AREA\"!==this.tagName||t.preventDefault();var u=e(n).one(l.SHOW,function(t){t.isDefaultPrevented()||u.one(l.HIDDEN,function(){e(r).is(\":visible\")&&r.focus()})});g._jQueryInterface.call(e(n),a,this)}),e.fn.modal=g._jQueryInterface,e.fn.modal.Constructor=g,e.fn.modal.noConflict=function(){return e.fn.modal=r,g._jQueryInterface},g}(t),h=function(e){var t=\"tooltip\",r=\".bs.tooltip\",a=e.fn[t],u=new RegExp(\"(^|\\\\s)bs-tooltip\\\\S+\",\"g\"),l={animation:\"boolean\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\",delay:\"(number|object)\",html:\"boolean\",selector:\"(string|boolean)\",placement:\"(string|function)\",offset:\"(number|string)\",container:\"(string|element|boolean)\",fallbackPlacement:\"(string|array)\",boundary:\"(string|element)\"},c={AUTO:\"auto\",TOP:\"top\",RIGHT:\"right\",BOTTOM:\"bottom\",LEFT:\"left\"},d={animation:!0,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,selector:!1,placement:\"top\",offset:0,container:!1,fallbackPlacement:\"flip\",boundary:\"scrollParent\"},f=\"show\",p=\"out\",h={HIDE:\"hide\"+r,HIDDEN:\"hidden\"+r,SHOW:\"show\"+r,SHOWN:\"shown\"+r,INSERTED:\"inserted\"+r,CLICK:\"click\"+r,FOCUSIN:\"focusin\"+r,FOCUSOUT:\"focusout\"+r,MOUSEENTER:\"mouseenter\"+r,MOUSELEAVE:\"mouseleave\"+r},m=\"fade\",g=\"show\",v=\".tooltip-inner\",b=\".arrow\",y=\"hover\",w=\"focus\",x=\"click\",_=\"manual\",E=function(){function a(e,t){if(void 0===n)throw new TypeError(\"Bootstrap tooltips require Popper.js (https://popper.js.org)\");this._isEnabled=!0,this._timeout=0,this._hoverState=\"\",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var E=a.prototype;return E.enable=function(){this._isEnabled=!0},E.disable=function(){this._isEnabled=!1},E.toggleEnabled=function(){this._isEnabled=!this._isEnabled},E.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,r=e(t.currentTarget).data(n);r||(r=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,r)),r._activeTrigger.click=!r._activeTrigger.click,r._isWithActiveTrigger()?r._enter(null,r):r._leave(null,r)}else{if(e(this.getTipElement()).hasClass(g))return void this._leave(null,this);this._enter(null,this)}},E.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(\".modal\").off(\"hide.bs.modal\"),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,null!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},E.show=function(){var t=this;if(\"none\"===e(this.element).css(\"display\"))throw new Error(\"Please use show on visible elements\");var r=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(r);var o=e.contains(this.element.ownerDocument.documentElement,this.element);if(r.isDefaultPrevented()||!o)return;var a=this.getTipElement(),i=s.getUID(this.constructor.NAME);a.setAttribute(\"id\",i),this.element.setAttribute(\"aria-describedby\",i),this.setContent(),this.config.animation&&e(a).addClass(m);var u=\"function\"==typeof this.config.placement?this.config.placement.call(this,a,this.element):this.config.placement,l=this._getAttachment(u);this.addAttachmentClass(l);var c=!1===this.config.container?document.body:e(this.config.container);e(a).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(a).appendTo(c),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,a,{placement:l,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:b},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){t._handlePopperPlacementChange(e)}}),e(a).addClass(g),\"ontouchstart\"in document.documentElement&&e(document.body).children().on(\"mouseover\",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),n===p&&t._leave(null,t)};if(e(this.tip).hasClass(m)){var f=s.getTransitionDurationFromElement(this.tip);e(this.tip).one(s.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},E.hide=function(t){var n=this,r=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),a=function(){n._hoverState!==f&&r.parentNode&&r.parentNode.removeChild(r),n._cleanTipClass(),n.element.removeAttribute(\"aria-describedby\"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(r).removeClass(g),\"ontouchstart\"in document.documentElement&&e(document.body).children().off(\"mouseover\",null,e.noop),this._activeTrigger[x]=!1,this._activeTrigger[w]=!1,this._activeTrigger[y]=!1,e(this.tip).hasClass(m)){var i=s.getTransitionDurationFromElement(r);e(r).one(s.TRANSITION_END,a).emulateTransitionEnd(i)}else a();this._hoverState=\"\"}},E.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},E.isWithContent=function(){return Boolean(this.getTitle())},E.addAttachmentClass=function(t){e(this.getTipElement()).addClass(\"bs-tooltip-\"+t)},E.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},E.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(v),this.getTitle()),t.removeClass(m+\" \"+g)},E.setElementContent=function(t,n){var r=this.config.html;\"object\"==typeof n&&(n.nodeType||n.jquery)?r?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text()):t[r?\"html\":\"text\"](n)},E.getTitle=function(){var e=this.element.getAttribute(\"data-original-title\");return e||(e=\"function\"==typeof this.config.title?this.config.title.call(this.element):this.config.title),e},E._getAttachment=function(e){return c[e.toUpperCase()]},E._setListeners=function(){var t=this;this.config.trigger.split(\" \").forEach(function(n){if(\"click\"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,function(e){return t.toggle(e)});else if(n!==_){var r=n===y?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o=n===y?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(r,t.config.selector,function(e){return t._enter(e)}).on(o,t.config.selector,function(e){return t._leave(e)})}e(t.element).closest(\".modal\").on(\"hide.bs.modal\",function(){return t.hide()})}),this.config.selector?this.config=i({},this.config,{trigger:\"manual\",selector:\"\"}):this._fixTitle()},E._fixTitle=function(){var e=typeof this.element.getAttribute(\"data-original-title\");(this.element.getAttribute(\"title\")||\"string\"!==e)&&(this.element.setAttribute(\"data-original-title\",this.element.getAttribute(\"title\")||\"\"),this.element.setAttribute(\"title\",\"\"))},E._enter=function(t,n){var r=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(r))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(r,n)),t&&(n._activeTrigger[\"focusin\"===t.type?w:y]=!0),e(n.getTipElement()).hasClass(g)||n._hoverState===f?n._hoverState=f:(clearTimeout(n._timeout),n._hoverState=f,n.config.delay&&n.config.delay.show?n._timeout=setTimeout(function(){n._hoverState===f&&n.show()},n.config.delay.show):n.show())},E._leave=function(t,n){var r=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(r))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(r,n)),t&&(n._activeTrigger[\"focusout\"===t.type?w:y]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState=p,n.config.delay&&n.config.delay.hide?n._timeout=setTimeout(function(){n._hoverState===p&&n.hide()},n.config.delay.hide):n.hide())},E._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},E._getConfig=function(n){return\"number\"==typeof(n=i({},this.constructor.Default,e(this.element).data(),n)).delay&&(n.delay={show:n.delay,hide:n.delay}),\"number\"==typeof n.title&&(n.title=n.title.toString()),\"number\"==typeof n.content&&(n.content=n.content.toString()),s.typeCheckConfig(t,n,this.constructor.DefaultType),n},E._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},E._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr(\"class\").match(u);null!==n&&n.length>0&&t.removeClass(n.join(\"\"))},E._handlePopperPlacementChange=function(e){this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},E._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute(\"x-placement\")&&(e(t).removeClass(m),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},a._jQueryInterface=function(t){return this.each(function(){var n=e(this).data(\"bs.tooltip\"),r=\"object\"==typeof t&&t;if((n||!/dispose|hide/.test(t))&&(n||(n=new a(this,r),e(this).data(\"bs.tooltip\",n)),\"string\"==typeof t)){if(void 0===n[t])throw new TypeError('No method named \"'+t+'\"');n[t]()}})},o(a,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}},{key:\"Default\",get:function(){return d}},{key:\"NAME\",get:function(){return t}},{key:\"DATA_KEY\",get:function(){return\"bs.tooltip\"}},{key:\"Event\",get:function(){return h}},{key:\"EVENT_KEY\",get:function(){return r}},{key:\"DefaultType\",get:function(){return l}}]),a}();return e.fn[t]=E._jQueryInterface,e.fn[t].Constructor=E,e.fn[t].noConflict=function(){return e.fn[t]=a,E._jQueryInterface},E}(t),m=function(e){var t=\"popover\",n=\".bs.popover\",r=e.fn[t],a=new RegExp(\"(^|\\\\s)bs-popover\\\\S+\",\"g\"),s=i({},h.Default,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'}),u=i({},h.DefaultType,{content:\"(string|element|function)\"}),l=\"fade\",c=\"show\",d=\".popover-header\",f=\".popover-body\",p={HIDE:\"hide\"+n,HIDDEN:\"hidden\"+n,SHOW:\"show\"+n,SHOWN:\"shown\"+n,INSERTED:\"inserted\"+n,CLICK:\"click\"+n,FOCUSIN:\"focusin\"+n,FOCUSOUT:\"focusout\"+n,MOUSEENTER:\"mouseenter\"+n,MOUSELEAVE:\"mouseleave\"+n},m=function(r){var i,h;function m(){return r.apply(this,arguments)||this}h=r,(i=m).prototype=Object.create(h.prototype),i.prototype.constructor=i,i.__proto__=h;var g=m.prototype;return g.isWithContent=function(){return this.getTitle()||this._getContent()},g.addAttachmentClass=function(t){e(this.getTipElement()).addClass(\"bs-popover-\"+t)},g.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},g.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(d),this.getTitle());var n=this._getContent();\"function\"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(f),n),t.removeClass(l+\" \"+c)},g._getContent=function(){return this.element.getAttribute(\"data-content\")||this.config.content},g._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr(\"class\").match(a);null!==n&&n.length>0&&t.removeClass(n.join(\"\"))},m._jQueryInterface=function(t){return this.each(function(){var n=e(this).data(\"bs.popover\"),r=\"object\"==typeof t?t:null;if((n||!/destroy|hide/.test(t))&&(n||(n=new m(this,r),e(this).data(\"bs.popover\",n)),\"string\"==typeof t)){if(void 0===n[t])throw new TypeError('No method named \"'+t+'\"');n[t]()}})},o(m,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}},{key:\"Default\",get:function(){return s}},{key:\"NAME\",get:function(){return t}},{key:\"DATA_KEY\",get:function(){return\"bs.popover\"}},{key:\"Event\",get:function(){return p}},{key:\"EVENT_KEY\",get:function(){return n}},{key:\"DefaultType\",get:function(){return u}}]),m}(h);return e.fn[t]=m._jQueryInterface,e.fn[t].Constructor=m,e.fn[t].noConflict=function(){return e.fn[t]=r,m._jQueryInterface},m}(t),g=function(e){var t=\"scrollspy\",n=e.fn[t],r={offset:10,method:\"auto\",target:\"\"},a={offset:\"number\",method:\"string\",target:\"(string|element)\"},u={ACTIVATE:\"activate.bs.scrollspy\",SCROLL:\"scroll.bs.scrollspy\",LOAD_DATA_API:\"load.bs.scrollspy.data-api\"},l=\"dropdown-item\",c=\"active\",d={DATA_SPY:'[data-spy=\"scroll\"]',ACTIVE:\".active\",NAV_LIST_GROUP:\".nav, .list-group\",NAV_LINKS:\".nav-link\",NAV_ITEMS:\".nav-item\",LIST_ITEMS:\".list-group-item\",DROPDOWN:\".dropdown\",DROPDOWN_ITEMS:\".dropdown-item\",DROPDOWN_TOGGLE:\".dropdown-toggle\"},f=\"offset\",p=\"position\",h=function(){function n(t,n){var r=this;this._element=t,this._scrollElement=\"BODY\"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+\" \"+d.NAV_LINKS+\",\"+this._config.target+\" \"+d.LIST_ITEMS+\",\"+this._config.target+\" \"+d.DROPDOWN_ITEMS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on(u.SCROLL,function(e){return r._process(e)}),this.refresh(),this._process()}var h=n.prototype;return h.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?f:p,r=\"auto\"===this._config.method?n:this._config.method,o=r===p?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),e.makeArray(e(this._selector)).map(function(t){var n,a=s.getSelectorFromElement(t);if(a&&(n=e(a)[0]),n){var i=n.getBoundingClientRect();if(i.width||i.height)return[e(n)[r]().top+o,a]}return null}).filter(function(e){return e}).sort(function(e,t){return e[0]-t[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},h.dispose=function(){e.removeData(this._element,\"bs.scrollspy\"),e(this._scrollElement).off(\".bs.scrollspy\"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},h._getConfig=function(n){if(\"string\"!=typeof(n=i({},r,n)).target){var o=e(n.target).attr(\"id\");o||(o=s.getUID(t),e(n.target).attr(\"id\",o)),n.target=\"#\"+o}return s.typeCheckConfig(t,n,a),n},h._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},h._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},h._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},h._process=function(){var e=this._getScrollTop()+this._config.offset,t=this._getScrollHeight(),n=this._config.offset+t-this._getOffsetHeight();if(this._scrollHeight!==t&&this.refresh(),e>=n){var r=this._targets[this._targets.length-1];this._activeTarget!==r&&this._activate(r)}else{if(this._activeTarget&&e<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&e>=this._offsets[o]&&(void 0===this._offsets[o+1]||e<this._offsets[o+1])&&this._activate(this._targets[o])}}},h._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(\",\");n=n.map(function(e){return e+'[data-target=\"'+t+'\"],'+e+'[href=\"'+t+'\"]'});var r=e(n.join(\",\"));r.hasClass(l)?(r.closest(d.DROPDOWN).find(d.DROPDOWN_TOGGLE).addClass(c),r.addClass(c)):(r.addClass(c),r.parents(d.NAV_LIST_GROUP).prev(d.NAV_LINKS+\", \"+d.LIST_ITEMS).addClass(c),r.parents(d.NAV_LIST_GROUP).prev(d.NAV_ITEMS).children(d.NAV_LINKS).addClass(c)),e(this._scrollElement).trigger(u.ACTIVATE,{relatedTarget:t})},h._clear=function(){e(this._selector).filter(d.ACTIVE).removeClass(c)},n._jQueryInterface=function(t){return this.each(function(){var r=e(this).data(\"bs.scrollspy\");if(r||(r=new n(this,\"object\"==typeof t&&t),e(this).data(\"bs.scrollspy\",r)),\"string\"==typeof t){if(void 0===r[t])throw new TypeError('No method named \"'+t+'\"');r[t]()}})},o(n,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}},{key:\"Default\",get:function(){return r}}]),n}();return e(window).on(u.LOAD_DATA_API,function(){for(var t=e.makeArray(e(d.DATA_SPY)),n=t.length;n--;){var r=e(t[n]);h._jQueryInterface.call(r,r.data())}}),e.fn[t]=h._jQueryInterface,e.fn[t].Constructor=h,e.fn[t].noConflict=function(){return e.fn[t]=n,h._jQueryInterface},h}(t),v=function(e){var t=e.fn.tab,n={HIDE:\"hide.bs.tab\",HIDDEN:\"hidden.bs.tab\",SHOW:\"show.bs.tab\",SHOWN:\"shown.bs.tab\",CLICK_DATA_API:\"click.bs.tab.data-api\"},r=\"dropdown-menu\",a=\"active\",i=\"disabled\",u=\"fade\",l=\"show\",c=\".dropdown\",d=\".nav, .list-group\",f=\".active\",p=\"> li > .active\",h='[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',m=\".dropdown-toggle\",g=\"> .dropdown-menu .active\",v=function(){function t(e){this._element=e}var h=t.prototype;return h.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass(a)||e(this._element).hasClass(i))){var r,o,u=e(this._element).closest(d)[0],l=s.getSelectorFromElement(this._element);if(u){var c=\"UL\"===u.nodeName?p:f;o=(o=e.makeArray(e(u).find(c)))[o.length-1]}var h=e.Event(n.HIDE,{relatedTarget:this._element}),m=e.Event(n.SHOW,{relatedTarget:o});if(o&&e(o).trigger(h),e(this._element).trigger(m),!m.isDefaultPrevented()&&!h.isDefaultPrevented()){l&&(r=e(l)[0]),this._activate(this._element,u);var g=function(){var r=e.Event(n.HIDDEN,{relatedTarget:t._element}),a=e.Event(n.SHOWN,{relatedTarget:o});e(o).trigger(r),e(t._element).trigger(a)};r?this._activate(r,r.parentNode,g):g()}}},h.dispose=function(){e.removeData(this._element,\"bs.tab\"),this._element=null},h._activate=function(t,n,r){var o=this,a=(\"UL\"===n.nodeName?e(n).find(p):e(n).children(f))[0],i=r&&a&&e(a).hasClass(u),l=function(){return o._transitionComplete(t,a,r)};if(a&&i){var c=s.getTransitionDurationFromElement(a);e(a).one(s.TRANSITION_END,l).emulateTransitionEnd(c)}else l()},h._transitionComplete=function(t,n,o){if(n){e(n).removeClass(l+\" \"+a);var i=e(n.parentNode).find(g)[0];i&&e(i).removeClass(a),\"tab\"===n.getAttribute(\"role\")&&n.setAttribute(\"aria-selected\",!1)}if(e(t).addClass(a),\"tab\"===t.getAttribute(\"role\")&&t.setAttribute(\"aria-selected\",!0),s.reflow(t),e(t).addClass(l),t.parentNode&&e(t.parentNode).hasClass(r)){var u=e(t).closest(c)[0];u&&e(u).find(m).addClass(a),t.setAttribute(\"aria-expanded\",!0)}o&&o()},t._jQueryInterface=function(n){return this.each(function(){var r=e(this),o=r.data(\"bs.tab\");if(o||(o=new t(this),r.data(\"bs.tab\",o)),\"string\"==typeof n){if(void 0===o[n])throw new TypeError('No method named \"'+n+'\"');o[n]()}})},o(t,null,[{key:\"VERSION\",get:function(){return\"4.1.0\"}}]),t}();return e(document).on(n.CLICK_DATA_API,h,function(t){t.preventDefault(),v._jQueryInterface.call(e(this),\"show\")}),e.fn.tab=v._jQueryInterface,e.fn.tab.Constructor=v,e.fn.tab.noConflict=function(){return e.fn.tab=t,v._jQueryInterface},v}(t);!function(e){if(void 0===e)throw new TypeError(\"Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.\");var t=e.fn.jquery.split(\" \")[0].split(\".\");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error(\"Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0\")}(t),e.Util=s,e.Alert=u,e.Button=l,e.Carousel=c,e.Collapse=d,e.Dropdown=f,e.Modal=p,e.Popover=m,e.Scrollspy=g,e.Tab=v,e.Tooltip=h,Object.defineProperty(e,\"__esModule\",{value:!0})})(t,n(8),n(62))},function(e,t,n){e.exports=n(221).default},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(222)),a=f(n(223)),i=f(n(224)),s=f(n(225)),u=f(n(226)),l=f(n(227)),c=f(n(228)),d=f(n(229));function f(e){return e&&e.__esModule?e:{default:e}}var p=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.type=\"languageDetector\",this.detectors={},this.init(t,n)}return r(e,[{key:\"init\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.services=e,this.options=o.defaults(t,this.options||{},{order:[\"querystring\",\"cookie\",\"localStorage\",\"navigator\",\"htmlTag\"],lookupQuerystring:\"lng\",lookupCookie:\"i18next\",lookupLocalStorage:\"i18nextLng\",caches:[\"localStorage\"],excludeCacheFor:[\"cimode\"]}),this.i18nOptions=n,this.addDetector(a.default),this.addDetector(i.default),this.addDetector(s.default),this.addDetector(u.default),this.addDetector(l.default),this.addDetector(c.default),this.addDetector(d.default)}},{key:\"addDetector\",value:function(e){this.detectors[e.name]=e}},{key:\"detect\",value:function(e){var t=this;e||(e=this.options.order);var n=[];e.forEach(function(e){if(t.detectors[e]){var r=t.detectors[e].lookup(t.options);r&&\"string\"==typeof r&&(r=[r]),r&&(n=n.concat(r))}});var r=void 0;if(n.forEach(function(e){if(!r){var n=t.services.languageUtils.formatLanguageCode(e);t.services.languageUtils.isWhitelisted(n)&&(r=n)}}),!r){var o=this.i18nOptions.fallbackLng;\"string\"==typeof o&&(o=[o]),o||(o=[]),r=\"[object Array]\"===Object.prototype.toString.apply(o)?o[0]:o[0]||o.default&&o.default[0]}return r}},{key:\"cacheUserLanguage\",value:function(e,t){var n=this;t||(t=this.options.caches),t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(function(t){n.detectors[t]&&n.detectors[t].cacheUserLanguage(e,n.options)}))}}]),e}();p.type=\"languageDetector\",t.default=p},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.defaults=function(e){return o.call(a.call(arguments,1),function(t){if(t)for(var n in t)void 0===e[n]&&(e[n]=t[n])}),e},t.extend=function(e){return o.call(a.call(arguments,1),function(t){if(t)for(var n in t)e[n]=t[n]}),e};var r=[],o=r.forEach,a=r.slice},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e,t,n,r){var o=void 0;if(n){var a=new Date;a.setTime(a.getTime()+60*n*1e3),o=\"; expires=\"+a.toGMTString()}else o=\"\";r=r?\"domain=\"+r+\";\":\"\",document.cookie=e+\"=\"+t+o+\";\"+r+\"path=/\"},o=function(e){for(var t=e+\"=\",n=document.cookie.split(\";\"),r=0;r<n.length;r++){for(var o=n[r];\" \"===o.charAt(0);)o=o.substring(1,o.length);if(0===o.indexOf(t))return o.substring(t.length,o.length)}return null};t.default={name:\"cookie\",lookup:function(e){var t=void 0;if(e.lookupCookie&&\"undefined\"!=typeof document){var n=o(e.lookupCookie);n&&(t=n)}return t},cacheUserLanguage:function(e,t){t.lookupCookie&&\"undefined\"!=typeof document&&r(t.lookupCookie,e,t.cookieMinutes,t.cookieDomain)}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"querystring\",lookup:function(e){var t=void 0;if(\"undefined\"!=typeof window)for(var n=window.location.search.substring(1).split(\"&\"),r=0;r<n.length;r++){var o=n[r].indexOf(\"=\");if(o>0)n[r].substring(0,o)===e.lookupQuerystring&&(t=n[r].substring(o+1))}return t}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=void 0;try{r=\"undefined\"!==window&&null!==window.localStorage;window.localStorage.setItem(\"i18next.translate.boo\",\"foo\"),window.localStorage.removeItem(\"i18next.translate.boo\")}catch(e){r=!1}t.default={name:\"localStorage\",lookup:function(e){var t=void 0;if(e.lookupLocalStorage&&r){var n=window.localStorage.getItem(e.lookupLocalStorage);n&&(t=n)}return t},cacheUserLanguage:function(e,t){t.lookupLocalStorage&&r&&window.localStorage.setItem(t.lookupLocalStorage,e)}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"navigator\",lookup:function(e){var t=[];if(\"undefined\"!=typeof navigator){if(navigator.languages)for(var n=0;n<navigator.languages.length;n++)t.push(navigator.languages[n]);navigator.userLanguage&&t.push(navigator.userLanguage),navigator.language&&t.push(navigator.language)}return t.length>0?t:void 0}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"htmlTag\",lookup:function(e){var t=void 0,n=e.htmlTag||(\"undefined\"!=typeof document?document.documentElement:null);return n&&\"function\"==typeof n.getAttribute&&(t=n.getAttribute(\"lang\")),t}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"path\",lookup:function(e){var t=void 0;if(\"undefined\"!=typeof window){var n=window.location.pathname.match(/\\/([a-zA-Z-]*)/g);n instanceof Array&&(t=\"number\"==typeof e.lookupFromUrlIndex?n[e.lookupFromPathIndex].replace(\"/\",\"\"):n[0].replace(\"/\",\"\"))}return t}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"subdomain\",lookup:function(e){var t=void 0;if(\"undefined\"!=typeof window){var n=window.location.pathname.match(/(?:http[s]*\\:\\/\\/)*(.*?)\\.(?=[^\\/]*\\..{2,5})/gi);n instanceof Array&&(t=\"number\"==typeof e.lookupFromSubdomainIndex?n[e.lookupFromSubdomainIndex].replace(\"http://\",\"\").replace(\"https://\",\"\").replace(\".\",\"\"):n[0].replace(\"http://\",\"\").replace(\"https://\",\"\").replace(\".\",\"\"))}return t}}},function(e,t,n){\"use strict\";var r=n(11),o=n(1),a=n(74);e.exports=function(){function e(e,t,n,r,i,s){s!==a&&o(!1,\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\")}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return n.checkPropTypes=r,n.PropTypes=n,n}},function(e,t,n){\"use strict\";var r={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a=Object.defineProperty,i=Object.getOwnPropertyNames,s=Object.getOwnPropertySymbols,u=Object.getOwnPropertyDescriptor,l=Object.getPrototypeOf,c=l&&l(Object);e.exports=function e(t,n,d){if(\"string\"!=typeof n){if(c){var f=l(n);f&&f!==c&&e(t,f,d)}var p=i(n);s&&(p=p.concat(s(n)));for(var h=0;h<p.length;++h){var m=p[h];if(!(r[m]||o[m]||d&&d[m])){var g=u(n,m);try{a(t,m,g)}catch(e){}}}return t}return t}},function(e,t,n){e.exports={parse:n(233),stringify:n(236)}},function(e,t,n){var r=/(?:<!--[\\S\\s]*?-->|<(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\">])+>)/g,o=n(234),a=Object.create?Object.create(null):{};function i(e,t,n,r,o){var a=t.indexOf(\"<\",r),i=t.slice(r,-1===a?void 0:a);/^\\s*$/.test(i)&&(i=\" \"),(!o&&a>-1&&n+e.length>=0||\" \"!==i)&&e.push({type:\"text\",content:i})}e.exports=function(e,t){t||(t={}),t.components||(t.components=a);var n,s=[],u=-1,l=[],c={},d=!1;return e.replace(r,function(r,a){if(d){if(r!==\"</\"+n.name+\">\")return;d=!1}var f,p=\"/\"!==r.charAt(1),h=0===r.indexOf(\"\\x3c!--\"),m=a+r.length,g=e.charAt(m);p&&!h&&(u++,\"tag\"===(n=o(r)).type&&t.components[n.name]&&(n.type=\"component\",d=!0),n.voidElement||d||!g||\"<\"===g||i(n.children,e,u,m,t.ignoreWhitespace),c[n.tagName]=n,0===u&&s.push(n),(f=l[u-1])&&f.children.push(n),l[u]=n),(h||!p||n.voidElement)&&(h||u--,!d&&\"<\"!==g&&g&&i(f=-1===u?s:l[u].children,e,u,m,t.ignoreWhitespace))}),!s.length&&e.length&&i(s,e,0,0,t.ignoreWhitespace),s}},function(e,t,n){var r=/([\\w-]+)|=|(['\"])([.\\s\\S]*?)\\2/g,o=n(235);e.exports=function(e){var t,n=0,a=!0,i={type:\"tag\",name:\"\",voidElement:!1,attrs:{},children:[]};return e.replace(r,function(r){if(\"=\"===r)return a=!0,void n++;a?0===n?((o[r]||\"/\"===e.charAt(e.length-2))&&(i.voidElement=!0),i.name=r):(i.attrs[t]=r.replace(/^['\"]|['\"]$/g,\"\"),t=void 0):(t&&(i.attrs[t]=t),t=r),n++,a=!1}),i}},function(e,t){e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,menuitem:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},function(e,t){function n(e,t){switch(t.type){case\"text\":return e+t.content;case\"tag\":return e+=\"<\"+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+'=\"'+e[n]+'\"');return t.length?\" \"+t.join(\" \"):\"\"}(t.attrs):\"\")+(t.voidElement?\"/>\":\">\"),t.voidElement?e:e+t.children.reduce(n,\"\")+\"</\"+t.name+\">\"}}e.exports=function(e){return e.reduce(function(e,t){return e+n(\"\",t)},\"\")}},function(e,t,n){e.exports=n(238).default},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(239)),i=n(240),s=(r=i)&&r.__esModule?r:{default:r};var u=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.init(t,n),this.type=\"backend\"}return o(e,[{key:\"init\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.services=e,this.options=a.defaults(t,this.options||{},{loadPath:\"/locales/{{lng}}/{{ns}}.json\",addPath:\"/locales/add/{{lng}}/{{ns}}\",allowMultiLoading:!1,parse:JSON.parse,crossDomain:!1,ajax:s.default})}},{key:\"readMulti\",value:function(e,t,n){var r=this.options.loadPath;\"function\"==typeof this.options.loadPath&&(r=this.options.loadPath(e,t));var o=this.services.interpolator.interpolate(r,{lng:e.join(\"+\"),ns:t.join(\"+\")});this.loadUrl(o,n)}},{key:\"read\",value:function(e,t,n){var r=this.options.loadPath;\"function\"==typeof this.options.loadPath&&(r=this.options.loadPath([e],[t]));var o=this.services.interpolator.interpolate(r,{lng:e,ns:t});this.loadUrl(o,n)}},{key:\"loadUrl\",value:function(e,t){var n=this;this.options.ajax(e,this.options,function(r,o){if(o.status>=500&&o.status<600)return t(\"failed loading \"+e,!0);if(o.status>=400&&o.status<500)return t(\"failed loading \"+e,!1);var a=void 0,i=void 0;try{a=n.options.parse(r,e)}catch(t){i=\"failed parsing \"+e+\" to json\"}if(i)return t(i,!1);t(null,a)})}},{key:\"create\",value:function(e,t,n,r){var o=this;\"string\"==typeof e&&(e=[e]);var a={};a[n]=r||\"\",e.forEach(function(e){var n=o.services.interpolator.interpolate(o.options.addPath,{lng:e,ns:t});o.options.ajax(n,o.options,function(e,t){},a)})}}]),e}();u.type=\"backend\",t.default=u},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.defaults=function(e){return o.call(a.call(arguments,1),function(t){if(t)for(var n in t)void 0===e[n]&&(e[n]=t[n])}),e},t.extend=function(e){return o.call(a.call(arguments,1),function(t){if(t)for(var n in t)e[n]=t[n]}),e};var r=[],o=r.forEach,a=r.slice},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};function o(e,t){if(t&&\"object\"===(void 0===t?\"undefined\":r(t))){var n=\"\",o=encodeURIComponent;for(var a in t)n+=\"&\"+o(a)+\"=\"+o(t[a]);if(!n)return e;e=e+(-1!==e.indexOf(\"?\")?\"&\":\"?\")+n.slice(1)}return e}t.default=function(e,t,n,a,i){a&&\"object\"===(void 0===a?\"undefined\":r(a))&&(i||(a._t=new Date),a=o(\"\",a).slice(1)),t.queryStringParams&&(e=o(e,t.queryStringParams));try{var s;(s=XMLHttpRequest?new XMLHttpRequest:new ActiveXObject(\"MSXML2.XMLHTTP.3.0\")).open(a?\"POST\":\"GET\",e,1),t.crossDomain||s.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),s.withCredentials=!!t.withCredentials,a&&s.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\"),s.overrideMimeType&&s.overrideMimeType(\"application/json\");var u=t.customHeaders;if(u)for(var l in u)s.setRequestHeader(l,u[l]);s.onreadystatechange=function(){s.readyState>3&&n&&n(s.responseText,s)},s.send(a)}catch(e){console&&console.log(e)}}},function(e,t,n){\"use strict\";(function(e){var n=\"object\"==typeof e&&e&&e.Object===Object&&e;t.a=n}).call(t,n(25))},function(e,t,n){\"use strict\";(function(e,r){var o,a=n(244);o=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==e?e:r;var i=Object(a.a)(o);t.a=i}).call(t,n(25),n(243)(e))},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,\"exports\",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,n){\"use strict\";t.a=function(e){var t,n=e.Symbol;\"function\"==typeof n?n.observable?t=n.observable:(t=n(\"observable\"),n.observable=t):t=\"@@observable\";return t}},function(e,t,n){\"use strict\";function r(e){return function(t){var n=t.dispatch,r=t.getState;return function(t){return function(o){return\"function\"==typeof o?o(n,r,e):t(o)}}}}t.__esModule=!0;var o=r();o.withExtraArgument=r,t.default=o},function(e,t,n){(function(t){var n=\"[object AsyncFunction]\",r=\"[object Function]\",o=\"[object GeneratorFunction]\",a=\"[object Null]\",i=\"[object Proxy]\",s=\"[object Undefined]\",u=\"object\"==typeof t&&t&&t.Object===Object&&t,l=\"object\"==typeof self&&self&&self.Object===Object&&self,c=u||l||Function(\"return this\")(),d=Object.prototype,f=d.hasOwnProperty,p=d.toString,h=c.Symbol,m=h?h.toStringTag:void 0;function g(e){return null==e?void 0===e?s:a:m&&m in Object(e)?function(e){var t=f.call(e,m),n=e[m];try{e[m]=void 0;var r=!0}catch(e){}var o=p.call(e);r&&(t?e[m]=n:delete e[m]);return o}(e):function(e){return p.call(e)}(e)}e.exports=function(e){if(!function(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}(e))return!1;var t=g(e);return t==r||t==o||t==n||t==i}}).call(t,n(25))},function(e,t){var n=\"[object String]\",r=Object.prototype.toString,o=Array.isArray;e.exports=function(e){return\"string\"==typeof e||!o(e)&&function(e){return!!e&&\"object\"==typeof e}(e)&&r.call(e)==n}},function(e,t,n){\"use strict\";var r=n(100),o=n(57),a=o.isFunction,i=void 0;function s(e){return o.isFunction(e)&&e.hasOwnProperty(\"boxedContext\")&&o.isObjectLike(e.boxedContext)&&e.boxedContext.constructor===r.BoxedContext}function u(){return this.boxed||(this.boxed=this.box.withBoxOptions(this.getBoxOnlyOptions,this.getState())),this.boxed}function l(){var e=this.boxed;if(e){var t=e[r.BOXED_GET_THIS].valueOfModified();if(t!==i){if(this.boxed=i,this.saveState)return this.saveState(t,e);throw new TypeError(\"Save State Not Supported on this instance, saveState callback not provided\")}}}function c(){var e=this.boxed;return this.boxed=i,e&&e[r.BOXED_GET_THIS].unboxedDelta()}function d(e){return this.boxed=i,this.boxOnlyOptions=r.getBoxOnlyOptions(e),this.proxiedThis}function f(e,t,n){if(!a(e))throw new TypeError(\"InvalidArgument, getState must be a function, got \"+e);if(t&&!a(t))throw new TypeError(\"InvalidArgument, saveState must be a function, got \"+t);var f=void 0,p=void 0;s(n=n||{})?(f=n,n={}):(f=o.firstDefined(s(n.box)?n.box:void 0,r.box),p=o.copyFiltered.call(void 0,n,r.BOX_ONLY_PROPERTIES));var h=o.firstDefined(n.saveBoxedProp,\"save\"),m=o.firstDefined(n.saveBoxedProp,\"cancel\"),g=o.firstDefined(n.boxOptionsProp,\"boxOptions\");this.box=f,this.context=this.box.boxedContext,this.saveBoxedProp=h,this.cancelBoxedProp=m,this.boxOptionsProp=g,this.getState=e,this.saveState=t,this.boxed=i,this.proxiedThis=i,this.boxOnlyOptions=o.hasOwnProperties.call(p)&&p,this.getBoxed=u.bind(this),this.saveBoxed=l.bind(this),this.cancelBoxed=c.bind(this),this.boxOptions=d.bind(this)}function p(e){return o.isObjectLike(e)&&e.constructor===f}f.prototype.getBoxed=u,f.prototype.saveBoxed=l,f.prototype.cancelBoxed=c,f.prototype.boxOptions=d;var h=r.BOXED_GET_THIS,m={get:function(e,t,n){if(p(e))return t===h?e:t===e.saveBoxedProp?e.saveBoxed:t===e.cancelBoxedProp?e.cancelBoxed:t===e.boxOptionsProp?e.boxOptions:e.getBoxed()[t];throw new TypeError(\"BoxedStateHandler: IllegalArgument expected BoxedState target\")},set:function(e,t,n,r){if(p(e))return t!==e.saveBoxedProp&&(t!==e.cancelBoxedProp&&(t!==e.boxOptionsProp&&Reflect.set(e.getBoxed(),t,n,r)));throw new TypeError(\"BoxedStateHandler: IllegalArgument expected BoxedState target\")},deleteProperty:function(e,t){if(p(e))return t!==e.saveBoxedProp&&(t!==e.cancelBoxedProp&&(t!==e.boxOptionsProp&&Reflect.deleteProperty(e.getBoxed(),t)));throw new TypeError(\"BoxedStateHandler: IllegalArgument expected BoxedState target\")},has:function(e,t){if(p(e))return t===e.saveBoxedProp||(t===e.cancelBoxedProp||(t===e.boxOptionsProp||Reflect.has(e.getBoxed(),t)));throw new TypeError(\"BoxedStateHandler: IllegalArgument expected BoxedState target\")},ownKeys:function(e){if(p(e)){var t=Reflect.ownKeys(e.getBoxed());return o.deleteItems.call(t,e.saveBoxedProp,e.cancelBoxedProp,e.boxOptionsProp)}throw new TypeError(\"BoxedStateHandler: IllegalArgument expected BoxedState target\")},getOwnPropertyDescriptor:function(e,t){if(p(e))return t===e.saveBoxedProp?{value:e.saveBoxed}:t===e.cancelBoxedProp?{value:e.cancelBoxed}:t===e.boxOptionsProp?{value:e.boxOptions}:Reflect.getOwnPropertyDescriptor(e.getBoxed(),t);throw new TypeError(\"BoxedStateHandler: IllegalArgument expected BoxedState attached target\")}};e.exports.BoxedState=f,e.exports.boxState=function(e,t,n){var r=new f(e,t,n);return r.proxiedThis=new Proxy(r,m),r.proxiedThis}},function(e,t){var n,r,o,a,i;n=jQuery,r=window,o=window.document,a=function(e){var t={text:\"\",start:0,end:0};if(!e.value)return t;try{if(r.getSelection)t.start=e.selectionStart,t.end=e.selectionEnd,t.text=e.value.slice(t.start,t.end);else if(o.selection){e.focus();var n=o.selection.createRange(),a=o.body.createTextRange();t.text=n.text;try{a.moveToElementText(e),a.setEndPoint(\"StartToStart\",n)}catch(t){(a=e.createTextRange()).setEndPoint(\"StartToStart\",n)}t.start=e.value.length-a.text.length,t.end=t.start+n.text.length}}catch(e){}return t},i={getPos:function(e){var t=a(e);return{start:t.start,end:t.end}},setPos:function(e,t,n){\"start\"===(n=this._caretMode(n))?t.end=t.start:\"end\"===n&&(t.start=t.end),e.focus();try{if(e.createTextRange){var o=e.createTextRange();r.navigator.userAgent.toLowerCase().indexOf(\"msie\")>=0&&(t.start=e.value.substr(0,t.start).replace(/\\r/g,\"\").length,t.end=e.value.substr(0,t.end).replace(/\\r/g,\"\").length),o.collapse(!0),o.moveStart(\"character\",t.start),o.moveEnd(\"character\",t.end-t.start),o.select()}else e.setSelectionRange&&e.setSelectionRange(t.start,t.end)}catch(e){}},getText:function(e){return a(e).text},_caretMode:function(e){switch(!1===(e=e||\"keep\")&&(e=\"end\"),e){case\"keep\":case\"start\":case\"end\":break;default:e=\"keep\"}return e},replace:function(e,t,r){var o=a(e),i=e.value,s=n(e).scrollTop(),u={start:o.start,end:o.start+t.length};e.value=i.substr(0,o.start)+t+i.substr(o.end),n(e).scrollTop(s),this.setPos(e,u,r)},insertBefore:function(e,t,r){var o=a(e),i=e.value,s=n(e).scrollTop(),u={start:o.start+t.length,end:o.end+t.length};e.value=i.substr(0,o.start)+t+i.substr(o.start),n(e).scrollTop(s),this.setPos(e,u,r)},insertAfter:function(e,t,r){var o=a(e),i=e.value,s=n(e).scrollTop(),u={start:o.start,end:o.end};e.value=i.substr(0,o.end)+t+i.substr(o.end),n(e).scrollTop(s),this.setPos(e,u,r)}},n.extend({selection:function(e){var t=\"text\"===(e||\"text\").toLowerCase();try{if(r.getSelection){if(t)return r.getSelection().toString();var a,i=r.getSelection();return i.getRangeAt?a=i.getRangeAt(0):((a=o.createRange()).setStart(i.anchorNode,i.anchorOffset),a.setEnd(i.focusNode,i.focusOffset)),n(\"<div></div>\").append(a.cloneContents()).html()}if(o.selection)return t?o.selection.createRange().text:o.selection.createRange().htmlText}catch(e){}return\"\"}}),n.fn.extend({selection:function(e,t){switch(t=t||{},e){case\"getPos\":return i.getPos(this[0]);case\"setPos\":return this.each(function(){i.setPos(this,t)});case\"replace\":return this.each(function(){i.replace(this,t.text,t.caret)});case\"insert\":return this.each(function(){\"before\"===t.mode?i.insertBefore(this,t.text,t.caret):i.insertAfter(this,t.text,t.caret)});case\"get\":default:return i.getText(this[0])}return this}})},function(e,t){!function(e){\"use strict\";e.fn.OldScriptHooks=function(e,t){},e.fn.OldScriptHooks.CLIP_TEXT=void 0,e.fn.OldScriptHooks.CURRENT_GROUP=void 0,e.fn.OldScriptHooks.CURRENT_LOCALE=void 0,e.fn.OldScriptHooks.HOOKUP_TRANSLATION_PAGE_EVENTS=void 0,e.fn.OldScriptHooks.UNHOOK_TRANSLATION_PAGE_EVENTS=void 0,e.fn.OldScriptHooks.MARKDOWN_KEY_SUFFIX=void 0,e.fn.OldScriptHooks.MISMATCHED_QUOTES_MESSAGE=void 0,e.fn.OldScriptHooks.PRIMARY_LOCALE=void 0,e.fn.OldScriptHooks.TITLE_CANCEL_CHANGES=void 0,e.fn.OldScriptHooks.TITLE_CAPITALIZE=void 0,e.fn.OldScriptHooks.TITLE_CAPITALIZE_FIRST_WORD=void 0,e.fn.OldScriptHooks.TITLE_CLEAN_HTML_MARKDOWN=void 0,e.fn.OldScriptHooks.TITLE_CONVERT_KEY=void 0,e.fn.OldScriptHooks.TITLE_GENERATE_PLURALS=void 0,e.fn.OldScriptHooks.TITLE_GENERATE_PLURALS_COUNT=void 0,e.fn.OldScriptHooks.TITLE_LOAD_LAST=void 0,e.fn.OldScriptHooks.TITLE_LOWERCASE=void 0,e.fn.OldScriptHooks.TITLE_RESET_EDITOR=void 0,e.fn.OldScriptHooks.TITLE_SAVE_CHANGES=void 0,e.fn.OldScriptHooks.TITLE_SIMULATED_COPY=void 0,e.fn.OldScriptHooks.TITLE_SIMULATED_PASTE=void 0,e.fn.OldScriptHooks.TITLE_TRANSLATE=void 0,e.fn.OldScriptHooks.TRANS_FILTERS=void 0,e.fn.OldScriptHooks.TRANSLATING_LOCALE=void 0,e.fn.OldScriptHooks.URL_TRANSLATOR_ALL=void 0,e.fn.OldScriptHooks.URL_TRANSLATOR_FILTERS=void 0,e.fn.OldScriptHooks.URL_TRANSLATOR_GROUP=void 0,e.fn.OldScriptHooks.URL_YANDEX_TRANSLATOR_KEY=void 0,e.fn.OldScriptHooks.USER_LOCALES=void 0,e.fn.OldScriptHooks.xtranslateService=void 0,e.fn.OldScriptHooks.xtranslateText=void 0,e.fn.OldScriptHooks.YANDEX_TRANSLATOR_KEY=void 0,e.fn.OldScriptHooks.GLOBAL_SETTINGS_CHANGED=void 0,e.fn.OldScriptHooks.GLOBAL_TRANSLATION_CHANGED=void 0,e.fn.OldScriptHooks.TRANSLATION_TITLE=void 0,e.fn.OldScriptHooks.APP_URL=void 0}(window.jQuery)},function(e,t){var n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};!function(e){\"use strict\";var t=e.fn.jquery.split(\" \")[0].split(\".\");if(t[0]<2&&t[1]<9||1==t[0]&&9==t[1]&&t[2]<1||t[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(window.jQuery),function(e){\"use strict\";var t=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",e,t)};t.VERSION=\"3.3.7\",t.TRANSITION_DURATION=150,t.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},t.prototype.init=function(t,n,r){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&e(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var o=this.options.trigger.split(\" \"),a=o.length;a--;){var i=o[a];if(\"click\"==i)this.$element.on(\"click.\"+this.type,this.options.selector,e.proxy(this.toggle,this));else if(\"manual\"!=i){var s=\"hover\"==i?\"mouseenter\":\"focusin\",u=\"hover\"==i?\"mouseleave\":\"focusout\";this.$element.on(s+\".\"+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(u+\".\"+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return(t=e.extend({},this.getDefaults(),this.$element.data(),t)).delay&&\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,r){n[e]!=r&&(t[e]=r)}),t},t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data(\"bs.\"+this.type,n)),t instanceof e.Event&&(n.inState[\"focusin\"==t.type?\"focus\":\"hover\"]=!0),n.tip().hasClass(\"in\")||\"in\"==n.hoverState)n.hoverState=\"in\";else{if(clearTimeout(n.timeout),n.hoverState=\"in\",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){\"in\"==n.hoverState&&n.show()},n.options.delay.show)}},t.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data(\"bs.\"+this.type,n)),t instanceof e.Event&&(n.inState[\"focusout\"==t.type?\"focus\":\"hover\"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState=\"out\",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){\"out\"==n.hoverState&&n.hide()},n.options.delay.hide)}},t.prototype.show=function(){var n=e.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(n);var r=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(n.isDefaultPrevented()||!r)return;var o=this,a=this.tip(),i=this.getUID(this.type);this.setContent(),a.attr(\"id\",i),this.$element.attr(\"aria-describedby\",i),this.options.animation&&a.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,u=/\\s?auto?\\s?/i,l=u.test(s);l&&(s=s.replace(u,\"\")||\"top\"),a.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?a.appendTo(this.options.container):a.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var c=this.getPosition(),d=a[0].offsetWidth,f=a[0].offsetHeight;if(l){var p=s,h=this.getPosition(this.$viewport);s=\"bottom\"==s&&c.bottom+f>h.bottom?\"top\":\"top\"==s&&c.top-f<h.top?\"bottom\":\"right\"==s&&c.right+d>h.width?\"left\":\"left\"==s&&c.left-d<h.left?\"right\":s,a.removeClass(p).addClass(s)}var m=this.getCalculatedOffset(s,c,d,f);this.applyPlacement(m,s);var g=function(){var e=o.hoverState;o.$element.trigger(\"shown.bs.\"+o.type),o.hoverState=null,\"out\"==e&&o.leave(o)};e.support.transition&&this.$tip.hasClass(\"fade\")?a.one(\"bsTransitionEnd\",g).emulateTransitionEnd(t.TRANSITION_DURATION):g()}},t.prototype.applyPlacement=function(t,n){var r=this.tip(),o=r[0].offsetWidth,a=r[0].offsetHeight,i=parseInt(r.css(\"margin-top\"),10),s=parseInt(r.css(\"margin-left\"),10);isNaN(i)&&(i=0),isNaN(s)&&(s=0),t.top+=i,t.left+=s,e.offset.setOffset(r[0],e.extend({using:function(e){r.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),r.addClass(\"in\");var u=r[0].offsetWidth,l=r[0].offsetHeight;\"top\"==n&&l!=a&&(t.top=t.top+a-l);var c=this.getViewportAdjustedDelta(n,t,u,l);c.left?t.left+=c.left:t.top+=c.top;var d=/top|bottom/.test(n),f=d?2*c.left-o+u:2*c.top-a+l,p=d?\"offsetWidth\":\"offsetHeight\";r.offset(t),this.replaceArrow(f,r[0][p],d)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?\"left\":\"top\",50*(1-e/t)+\"%\").css(n?\"top\":\"left\",\"\")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(\".tooltip-inner\")[this.options.html?\"html\":\"text\"](t),e.removeClass(\"fade in top bottom left right\")},t.prototype.hide=function(n){var r=this,o=e(this.$tip),a=e.Event(\"hide.bs.\"+this.type);function i(){\"in\"!=r.hoverState&&o.detach(),r.$element&&r.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+r.type),n&&n()}if(this.$element.trigger(a),!a.isDefaultPrevented())return o.removeClass(\"in\"),e.support.transition&&o.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",i).emulateTransitionEnd(t.TRANSITION_DURATION):i(),this.hoverState=null,this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr(\"title\")||\"string\"!=typeof e.attr(\"data-original-title\"))&&e.attr(\"data-original-title\",e.attr(\"title\")||\"\").attr(\"title\",\"\")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(t){var n=(t=t||this.$element)[0],r=\"BODY\"==n.tagName,o=n.getBoundingClientRect();null==o.width&&(o=e.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var a=window.SVGElement&&n instanceof window.SVGElement,i=r?{top:0,left:0}:a?null:t.offset(),s={scroll:r?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},u=r?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},o,s,u,i)},t.prototype.getCalculatedOffset=function(e,t,n,r){return\"bottom\"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:\"top\"==e?{top:t.top-r,left:t.left+t.width/2-n/2}:\"left\"==e?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},t.prototype.getViewportAdjustedDelta=function(e,t,n,r){var o={top:0,left:0};if(!this.$viewport)return o;var a=this.options.viewport&&this.options.viewport.padding||0,i=this.getPosition(this.$viewport);if(/right|left/.test(e)){var s=t.top-a-i.scroll,u=t.top+a-i.scroll+r;s<i.top?o.top=i.top-s:u>i.top+i.height&&(o.top=i.top+i.height-u)}else{var l=t.left-a,c=t.left+a+n;l<i.left?o.left=i.left-l:c>i.right&&(o.left=i.left+i.width-c)}return o},t.prototype.getTitle=function(){var e=this.$element,t=this.options;return e.attr(\"data-original-title\")||(\"function\"==typeof t.title?t.title.call(e[0]):t.title)},t.prototype.getUID=function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},t.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=this;t&&((n=e(t.currentTarget).data(\"bs.\"+this.type))||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data(\"bs.\"+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass(\"in\")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide(function(){e.$element.off(\".\"+e.type).removeData(\"bs.\"+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null,e.$element=null})};var r=e.fn.tooltip;e.fn.tooltip=function(r){return this.each(function(){var o=e(this),a=o.data(\"bs.tooltip\"),i=\"object\"==(void 0===r?\"undefined\":n(r))&&r;!a&&/destroy|hide/.test(r)||(a||o.data(\"bs.tooltip\",a=new t(this,i)),\"string\"==typeof r&&a[r]())})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=r,this}}(window.jQuery),function(e){\"use strict\";var t=function(e,t){this.init(\"popover\",e,t)};if(!e.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");t.VERSION=\"3.3.7\",t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(\".popover-title\")[this.options.html?\"html\":\"text\"](t),e.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof n?\"html\":\"append\":\"text\"](n),e.removeClass(\"fade top bottom left right in\"),e.find(\".popover-title\").html()||e.find(\".popover-title\").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr(\"data-content\")||(\"function\"==typeof t.content?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var r=e.fn.popover;e.fn.popover=function(r){return this.each(function(){var o=e(this),a=o.data(\"bs.popover\"),i=\"object\"==(void 0===r?\"undefined\":n(r))&&r;!a&&/destroy|hide/.test(r)||(a||o.data(\"bs.popover\",a=new t(this,i)),\"string\"==typeof r&&a[r]())})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=r,this}}(window.jQuery)},function(e,t){var n,r,o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};!function(e){\"use strict\";var t=function(t,n){this.options=e.extend({},e.fn.editableform.defaults,n),this.$div=e(t),this.options.scope||(this.options.scope=this)};t.prototype={constructor:t,initInput:function(){this.input=this.options.input,this.value=this.input.str2value(this.options.value),this.input.prerender()},initTemplate:function(){this.$form=e(e.fn.editableform.template)},initButtons:function(){var t=this.$form.find(\".editable-buttons\");t.append(e.fn.editableform.buttons),\"bottom\"===this.options.showbuttons&&t.addClass(\"editable-buttons-bottom\")},render:function(){this.$loading=e(e.fn.editableform.loading),this.$div.empty().append(this.$loading),this.initTemplate(),this.options.showbuttons?this.initButtons():this.$form.find(\".editable-buttons\").remove(),this.showLoading(),this.isSaving=!1,this.$div.triggerHandler(\"rendering\"),this.initInput(),this.$form.find(\"div.editable-input\").append(this.input.$tpl),this.$div.append(this.$form),e.when(this.input.render()).then(e.proxy(function(){if(this.options.showbuttons||this.input.autosubmit(),this.$form.find(\".editable-cancel\").click(e.proxy(this.cancel,this)),this.input.error)this.error(this.input.error),this.$form.find(\".editable-submit\").attr(\"disabled\",!0),this.input.$input.attr(\"disabled\",!0),this.$form.submit(function(e){e.preventDefault()});else{this.error(!1),this.input.$input.removeAttr(\"disabled\"),this.$form.find(\".editable-submit\").removeAttr(\"disabled\");var t=null===this.value||void 0===this.value||\"\"===this.value?this.options.defaultValue:this.value;this.input.value2input(t),this.$form.submit(e.proxy(this.submit,this))}this.$div.triggerHandler(\"rendered\"),this.showForm(),this.input.postrender&&this.input.postrender()},this))},cancel:function(){this.$div.triggerHandler(\"cancel\")},showLoading:function(){var e,t;this.$form?(e=this.$form.outerWidth(),t=this.$form.outerHeight(),e&&this.$loading.width(e),t&&this.$loading.height(t),this.$form.hide()):(e=this.$loading.parent().width())&&this.$loading.width(e),this.$loading.show()},showForm:function(e){this.$loading.hide(),this.$form.show(),!1!==e&&this.input.activate(),this.$div.triggerHandler(\"show\")},error:function(t){var n,r=this.$form.find(\".control-group\"),o=this.$form.find(\".editable-error-block\");if(!1===t)r.removeClass(e.fn.editableform.errorGroupClass),o.removeClass(e.fn.editableform.errorBlockClass).empty().hide();else{if(t){n=(\"\"+t).split(\"\\n\");for(var a=0;a<n.length;a++)n[a]=e(\"<div>\").text(n[a]).html();t=n.join(\"<br>\")}r.addClass(e.fn.editableform.errorGroupClass),o.addClass(e.fn.editableform.errorBlockClass).html(t).show()}},submit:function(t){t.stopPropagation(),t.preventDefault();var n=this.input.input2value(),r=this.validate(n);if(\"object\"===e.type(r)&&void 0!==r.newValue){if(n=r.newValue,this.input.value2input(n),\"string\"==typeof r.msg)return this.error(r.msg),void this.showForm()}else if(r)return this.error(r),void this.showForm();if(this.options.savenochange||this.input.value2str(n)!==this.input.value2str(this.value)){var a=this.input.value2submit(n);this.isSaving=!0,e.when(this.save(a)).done(e.proxy(function(e){this.isSaving=!1;var t=\"function\"==typeof this.options.success?this.options.success.call(this.options.scope,e,n):null;return!1===t?(this.error(!1),void this.showForm(!1)):\"string\"==typeof t?(this.error(t),void this.showForm()):(t&&\"object\"===(void 0===t?\"undefined\":o(t))&&t.hasOwnProperty(\"newValue\")&&(n=t.newValue),this.error(!1),this.value=n,void this.$div.triggerHandler(\"save\",{newValue:n,submitValue:a,response:e}))},this)).fail(e.proxy(function(e){var t;this.isSaving=!1,t=\"function\"==typeof this.options.error?this.options.error.call(this.options.scope,e,n):\"string\"==typeof e?e:e.responseText||e.statusText||\"Unknown error!\",this.error(t),this.showForm()},this))}else this.$div.triggerHandler(\"nochange\")},save:function(t){this.options.pk=e.fn.editableutils.tryParseJson(this.options.pk,!0);var n,r=\"function\"==typeof this.options.pk?this.options.pk.call(this.options.scope):this.options.pk;if(!!(\"function\"==typeof this.options.url||this.options.url&&(\"always\"===this.options.send||\"auto\"===this.options.send&&null!==r&&void 0!==r)))return this.showLoading(),n={name:this.options.name||\"\",value:t,pk:r},\"function\"==typeof this.options.params?n=this.options.params.call(this.options.scope,n):(this.options.params=e.fn.editableutils.tryParseJson(this.options.params,!0),e.extend(n,this.options.params)),\"function\"==typeof this.options.url?this.options.url.call(this.options.scope,n):e.ajax(e.extend({url:this.options.url,data:n,type:\"POST\"},this.options.ajaxOptions))},validate:function(e){if(void 0===e&&(e=this.value),\"function\"==typeof this.options.validate)return this.options.validate.call(this.options.scope,e)},option:function(e,t){e in this.options&&(this.options[e]=t),\"value\"===e&&this.setValue(t)},setValue:function(e,t){this.value=t?this.input.str2value(e):e,this.$form&&this.$form.is(\":visible\")&&this.input.value2input(this.value)}},e.fn.editableform=function(n){var r=arguments;return this.each(function(){var a=e(this),i=a.data(\"editableform\"),s=\"object\"===(void 0===n?\"undefined\":o(n))&&n;i||a.data(\"editableform\",i=new t(this,s)),\"string\"==typeof n&&i[n].apply(i,Array.prototype.slice.call(r,1))})},e.fn.editableform.Constructor=t,e.fn.editableform.defaults={type:\"text\",url:null,params:null,name:null,pk:null,value:null,defaultValue:null,send:\"auto\",validate:null,success:null,error:null,ajaxOptions:null,showbuttons:!0,scope:null,savenochange:!1},e.fn.editableform.template='<form class=\"form-inline editableform\"><div class=\"control-group\"><div><div class=\"editable-input\"></div><div class=\"editable-buttons\"></div></div><div class=\"editable-error-block\"></div></div></form>',e.fn.editableform.loading='<div class=\"editableform-loading\"></div>',e.fn.editableform.buttons='<button type=\"submit\" class=\"editable-submit\">ok</button><button type=\"button\" class=\"editable-cancel\">cancel</button>',e.fn.editableform.errorGroupClass=null,e.fn.editableform.errorBlockClass=\"editable-error\",e.fn.editableform.engine=\"jquery\"}(window.jQuery),function(e){\"use strict\";e.fn.editableutils={inherit:function(e,t){var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e,e.superclass=t.prototype},setCursorPosition:function(e,t){if(e.setSelectionRange)e.setSelectionRange(t,t);else if(e.createTextRange){var n=e.createTextRange();n.collapse(!0),n.moveEnd(\"character\",t),n.moveStart(\"character\",t),n.select()}},tryParseJson:function(e,t){if(\"string\"==typeof e&&e.length&&e.match(/^[\\{\\[].*[\\}\\]]$/))if(t)try{e=new Function(\"return \"+e)()}catch(e){}finally{return e}else e=new Function(\"return \"+e)();return e},sliceObj:function(t,n,r){var o,a,i={};if(!e.isArray(n)||!n.length)return i;for(var s=0;s<n.length;s++)o=n[s],t.hasOwnProperty(o)&&(i[o]=t[o]),!0!==r&&(a=o.toLowerCase(),t.hasOwnProperty(a)&&(i[o]=t[a]));return i},getConfigData:function(t){var n={};return e.each(t.data(),function(e,t){(\"object\"!==(void 0===t?\"undefined\":o(t))||t&&\"object\"===(void 0===t?\"undefined\":o(t))&&(t.constructor===Object||t.constructor===Array))&&(n[e]=t)}),n},objectKeys:function(e){if(Object.keys)return Object.keys(e);if(e!==Object(e))throw new TypeError(\"Object.keys called on a non-object\");var t,n=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.push(t);return n},escape:function(t){return e(\"<div>\").text(t).html()},itemsByValue:function(t,n,r){if(!n||null===t)return[];if(\"function\"!=typeof r){var a=r||\"value\";r=function(e){return e[a]}}var i=e.isArray(t),s=[],u=this;return e.each(n,function(n,a){if(a.children)s=s.concat(u.itemsByValue(t,a.children,r));else if(i)e.grep(t,function(e){return e==(a&&\"object\"===(void 0===a?\"undefined\":o(a))?r(a):a)}).length&&s.push(a);else{var l=a&&\"object\"===(void 0===a?\"undefined\":o(a))?r(a):a;t==l&&s.push(a)}}),s},createInput:function(t){var n,r=t.type;return\"date\"===r&&(\"inline\"===t.mode?e.fn.editabletypes.datefield?r=\"datefield\":e.fn.editabletypes.dateuifield&&(r=\"dateuifield\"):e.fn.editabletypes.date?r=\"date\":e.fn.editabletypes.dateui&&(r=\"dateui\"),\"date\"!==r||e.fn.editabletypes.date||(r=\"combodate\")),\"datetime\"===r&&\"inline\"===t.mode&&(r=\"datetimefield\"),\"wysihtml5\"!==r||e.fn.editabletypes[r]||(r=\"textarea\"),\"function\"==typeof e.fn.editabletypes[r]?new(n=e.fn.editabletypes[r])(this.sliceObj(t,this.objectKeys(n.defaults))):(e.error(\"Unknown type: \"+r),!1)},supportsTransitions:function(){var e=(document.body||document.documentElement).style,t=\"transition\",n=[\"Moz\",\"Webkit\",\"Khtml\",\"O\",\"ms\"];if(\"string\"==typeof e[t])return!0;t=t.charAt(0).toUpperCase()+t.substr(1);for(var r=0;r<n.length;r++)if(\"string\"==typeof e[n[r]+t])return!0;return!1}}}(window.jQuery),function(e){\"use strict\";var t=function(e,t){this.init(e,t)},n=function(e,t){this.init(e,t)};t.prototype={containerName:null,containerDataName:null,innerCss:null,containerClass:\"editable-container editable-popup\",defaults:{},init:function(n,r){this.$element=e(n),this.options=e.extend({},e.fn.editableContainer.defaults,r),this.splitOptions(),this.formOptions.scope=this.$element[0],this.initContainer(),this.delayedHide=!1,this.$element.on(\"destroyed\",e.proxy(function(){this.destroy()},this)),e(document).data(\"editable-handlers-attached\")||(e(document).on(\"keyup.editable\",function(t){27===t.which&&e(\".editable-open\").editableContainer(\"hide\")}),e(document).on(\"click.editable\",function(n){var r,o=e(n.target),a=[\".editable-container\",\".ui-datepicker-header\",\".datepicker\",\".modal-backdrop\",\".bootstrap-wysihtml5-insert-image-modal\",\".bootstrap-wysihtml5-insert-link-modal\"];if(!e(\".select2-drop-mask\").is(\":visible\")&&e.contains(document.documentElement,n.target)&&!o.is(document)){for(r=0;r<a.length;r++)if(o.is(a[r])||o.parents(a[r]).length)return;t.prototype.closeOthers(n.target)}}),e(document).data(\"editable-handlers-attached\",!0))},splitOptions:function(){if(this.containerOptions={},this.formOptions={},!e.fn[this.containerName])throw new Error(this.containerName+\" not found. Have you included corresponding js file?\");for(var t in this.options)t in this.defaults?this.containerOptions[t]=this.options[t]:this.formOptions[t]=this.options[t]},tip:function(){return this.container()?this.container().$tip:null},container:function(){var e;return this.containerDataName&&(e=this.$element.data(this.containerDataName))?e:(e=this.$element.data(this.containerName),e)},call:function(){this.$element[this.containerName].apply(this.$element,arguments)},initContainer:function(){this.call(this.containerOptions)},renderForm:function(){this.$form.editableform(this.formOptions).on({save:e.proxy(this.save,this),nochange:e.proxy(function(){this.hide(\"nochange\")},this),cancel:e.proxy(function(){this.hide(\"cancel\")},this),show:e.proxy(function(){this.delayedHide?(this.hide(this.delayedHide.reason),this.delayedHide=!1):this.setPosition()},this),rendering:e.proxy(this.setPosition,this),resize:e.proxy(this.setPosition,this),rendered:e.proxy(function(){this.$element.triggerHandler(\"shown\",e(this.options.scope).data(\"editable\"))},this)}).editableform(\"render\")},show:function(t){this.$element.addClass(\"editable-open\"),!1!==t&&this.closeOthers(this.$element[0]),this.innerShow(),this.tip().addClass(this.containerClass),this.$form,this.$form=e(\"<div>\"),this.tip().is(this.innerCss)?this.tip().append(this.$form):this.tip().find(this.innerCss).append(this.$form),this.renderForm()},hide:function(e){this.tip()&&this.tip().is(\":visible\")&&this.$element.hasClass(\"editable-open\")&&(this.$form.data(\"editableform\").isSaving?this.delayedHide={reason:e}:(this.delayedHide=!1,this.$element.removeClass(\"editable-open\"),this.innerHide(),this.$element.triggerHandler(\"hidden\",e||\"manual\")))},innerShow:function(){},innerHide:function(){},toggle:function(e){this.container()&&this.tip()&&this.tip().is(\":visible\")?this.hide():this.show(e)},setPosition:function(){},save:function(e,t){this.$element.triggerHandler(\"save\",t),this.hide(\"save\")},option:function(e,t){this.options[e]=t,e in this.containerOptions?(this.containerOptions[e]=t,this.setContainerOption(e,t)):(this.formOptions[e]=t,this.$form&&this.$form.editableform(\"option\",e,t))},setContainerOption:function(e,t){this.call(\"option\",e,t)},destroy:function(){this.hide(),this.innerDestroy(),this.$element.off(\"destroyed\"),this.$element.removeData(\"editableContainer\")},innerDestroy:function(){},closeOthers:function(t){e(\".editable-open\").each(function(n,r){if(r!==t&&!e(r).find(t).length){var o=e(r),a=o.data(\"editableContainer\");a&&(\"cancel\"===a.options.onblur?o.data(\"editableContainer\").hide(\"onblur\"):\"submit\"===a.options.onblur&&o.data(\"editableContainer\").tip().find(\"form\").submit())}})},activate:function(){this.tip&&this.tip().is(\":visible\")&&this.$form&&this.$form.data(\"editableform\").input.activate()}},e.fn.editableContainer=function(r){var a=arguments;return this.each(function(){var i=e(this),s=i.data(\"editableContainer\"),u=\"object\"===(void 0===r?\"undefined\":o(r))&&r,l=\"inline\"===u.mode?n:t;s||i.data(\"editableContainer\",s=new l(this,u)),\"string\"==typeof r&&s[r].apply(s,Array.prototype.slice.call(a,1))})},e.fn.editableContainer.Popup=t,e.fn.editableContainer.Inline=n,e.fn.editableContainer.defaults={value:null,placement:\"top\",autohide:!0,onblur:\"cancel\",anim:!1,mode:\"popup\"},jQuery.event.special.destroyed={remove:function(e){e.handler&&e.handler()}}}(window.jQuery),function(e){\"use strict\";e.extend(e.fn.editableContainer.Inline.prototype,e.fn.editableContainer.Popup.prototype,{containerName:\"editableform\",innerCss:\".editable-inline\",containerClass:\"editable-container editable-inline\",initContainer:function(){this.$tip=e(\"<span></span>\"),this.options.anim||(this.options.anim=0)},splitOptions:function(){this.containerOptions={},this.formOptions=this.options},tip:function(){return this.$tip},innerShow:function(){this.$element.hide(),this.tip().insertAfter(this.$element).show()},innerHide:function(){this.$tip.hide(this.options.anim,e.proxy(function(){this.$element.show(),this.innerDestroy()},this))},innerDestroy:function(){this.tip()&&this.tip().empty().remove()}})}(window.jQuery),function(e){\"use strict\";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.editable.defaults,n,e.fn.editableutils.getConfigData(this.$element)),this.options.selector?this.initLive():this.init(),this.options.highlight&&!e.fn.editableutils.supportsTransitions()&&(this.options.highlight=!1)};t.prototype={constructor:t,init:function(){var t,n=!1;if(this.options.name=this.options.name||this.$element.attr(\"id\"),this.options.scope=this.$element[0],this.input=e.fn.editableutils.createInput(this.options),this.input){switch(void 0===this.options.value||null===this.options.value?(this.value=this.input.html2value(e.trim(this.$element.html())),n=!0):(this.options.value=e.fn.editableutils.tryParseJson(this.options.value,!0),\"string\"==typeof this.options.value?this.value=this.input.str2value(this.options.value):this.value=this.options.value),this.$element.addClass(\"editable\"),\"textarea\"===this.input.type&&this.$element.addClass(\"editable-pre-wrapped\"),\"manual\"!==this.options.toggle?(this.$element.addClass(\"editable-click\"),this.$element.on(this.options.toggle+\".editable\",e.proxy(function(e){if(this.options.disabled||e.preventDefault(),\"mouseenter\"===this.options.toggle)this.show();else{var t=\"click\"!==this.options.toggle;this.toggle(t)}},this))):this.$element.attr(\"tabindex\",-1),\"function\"==typeof this.options.display&&(this.options.autotext=\"always\"),this.options.autotext){case\"always\":t=!0;break;case\"auto\":t=!e.trim(this.$element.text()).length&&null!==this.value&&void 0!==this.value&&!n;break;default:t=!1}e.when(!t||this.render()).then(e.proxy(function(){this.options.disabled?this.disable():this.enable(),this.$element.triggerHandler(\"init\",this)},this))}},initLive:function(){var t=this.options.selector;this.options.selector=!1,this.options.autotext=\"never\",this.$element.on(this.options.toggle+\".editable\",t,e.proxy(function(t){var n=e(t.target);n.data(\"editable\")||(n.hasClass(this.options.emptyclass)&&n.empty(),n.editable(this.options).trigger(t))},this))},render:function(e){if(!1!==this.options.display)return this.input.value2htmlFinal?this.input.value2html(this.value,this.$element[0],this.options.display,e):\"function\"==typeof this.options.display?this.options.display.call(this.$element[0],this.value,e):this.input.value2html(this.value,this.$element[0])},enable:function(){this.options.disabled=!1,this.$element.removeClass(\"editable-disabled\"),this.handleEmpty(this.isEmpty),\"manual\"!==this.options.toggle&&\"-1\"===this.$element.attr(\"tabindex\")&&this.$element.removeAttr(\"tabindex\")},disable:function(){this.options.disabled=!0,this.hide(),this.$element.addClass(\"editable-disabled\"),this.handleEmpty(this.isEmpty),this.$element.attr(\"tabindex\",-1)},toggleDisabled:function(){this.options.disabled?this.enable():this.disable()},option:function(t,n){if(t&&\"object\"===(void 0===t?\"undefined\":o(t)))e.each(t,e.proxy(function(t,n){this.option(e.trim(t),n)},this));else{if(this.options[t]=n,\"disabled\"===t)return n?this.disable():this.enable();\"value\"===t&&this.setValue(n),this.container&&this.container.option(t,n),this.input.option&&this.input.option(t,n)}},handleEmpty:function(t){!1!==this.options.display&&(void 0!==t?this.isEmpty=t:\"function\"==typeof this.input.isEmpty?this.isEmpty=this.input.isEmpty(this.$element):this.isEmpty=\"\"===e.trim(this.$element.html()),this.options.disabled?this.isEmpty&&(this.$element.empty(),this.options.emptyclass&&this.$element.removeClass(this.options.emptyclass)):this.isEmpty?(this.$element.html(this.options.emptytext),this.options.emptyclass&&this.$element.addClass(this.options.emptyclass)):this.options.emptyclass&&this.$element.removeClass(this.options.emptyclass))},show:function(t){if(!this.options.disabled){if(this.container){if(this.container.tip().is(\":visible\"))return}else{var n=e.extend({},this.options,{value:this.value,input:this.input});this.$element.editableContainer(n),this.$element.on(\"save.internal\",e.proxy(this.save,this)),this.container=this.$element.data(\"editableContainer\")}this.container.show(t)}},hide:function(){this.container&&this.container.hide()},toggle:function(e){this.container&&this.container.tip().is(\":visible\")?this.hide():this.show(e)},save:function(e,t){if(this.options.unsavedclass){var n=!1;(n=(n=(n=(n=n||\"function\"==typeof this.options.url)||!1===this.options.display)||void 0!==t.response)||this.options.savenochange&&this.input.value2str(this.value)!==this.input.value2str(t.newValue))?this.$element.removeClass(this.options.unsavedclass):this.$element.addClass(this.options.unsavedclass)}if(this.options.highlight){var r=this.$element,o=r.css(\"background-color\");r.css(\"background-color\",this.options.highlight),setTimeout(function(){\"transparent\"===o&&(o=\"\"),r.css(\"background-color\",o),r.addClass(\"editable-bg-transition\"),setTimeout(function(){r.removeClass(\"editable-bg-transition\")},1700)},10)}this.setValue(t.newValue,!1,t.response)},validate:function(){if(\"function\"==typeof this.options.validate)return this.options.validate.call(this,this.value)},setValue:function(t,n,r){this.value=n?this.input.str2value(t):t,this.container&&this.container.option(\"value\",this.value),e.when(this.render(r)).then(e.proxy(function(){this.handleEmpty()},this))},activate:function(){this.container&&this.container.activate()},destroy:function(){this.disable(),this.container&&this.container.destroy(),this.input.destroy(),\"manual\"!==this.options.toggle&&(this.$element.removeClass(\"editable-click\"),this.$element.off(this.options.toggle+\".editable\")),this.$element.off(\"save.internal\"),this.$element.removeClass(\"editable editable-open editable-disabled\"),this.$element.removeData(\"editable\")}},e.fn.editable=function(n){var r={},a=arguments;switch(n){case\"validate\":return this.each(function(){var t,n=e(this).data(\"editable\");n&&(t=n.validate())&&(r[n.options.name]=t)}),r;case\"getValue\":return 2===arguments.length&&!0===arguments[1]?r=this.eq(0).data(\"editable\").value:this.each(function(){var t=e(this).data(\"editable\");t&&void 0!==t.value&&null!==t.value&&(r[t.options.name]=t.input.value2submit(t.value))}),r;case\"submit\":var i=arguments[1]||{},s=this,u=this.editable(\"validate\");if(e.isEmptyObject(u)){var l={};if(1===s.length){var c=s.data(\"editable\"),d={name:c.options.name||\"\",value:c.input.value2submit(c.value),pk:\"function\"==typeof c.options.pk?c.options.pk.call(c.options.scope):c.options.pk};\"function\"==typeof c.options.params?d=c.options.params.call(c.options.scope,d):(c.options.params=e.fn.editableutils.tryParseJson(c.options.params,!0),e.extend(d,c.options.params)),l={url:c.options.url,data:d,type:\"POST\"},i.success=i.success||c.options.success,i.error=i.error||c.options.error}else{var f=this.editable(\"getValue\");l={url:i.url,data:f,type:\"POST\"}}l.success=\"function\"==typeof i.success?function(e){i.success.call(s,e,i)}:e.noop,l.error=\"function\"==typeof i.error?function(){i.error.apply(s,arguments)}:e.noop,i.ajaxOptions&&e.extend(l,i.ajaxOptions),i.data&&e.extend(l.data,i.data),e.ajax(l)}else\"function\"==typeof i.error&&i.error.call(s,u);return this}return this.each(function(){var r=e(this),i=r.data(\"editable\"),s=\"object\"===(void 0===n?\"undefined\":o(n))&&n;s&&s.selector?i=new t(this,s):(i||r.data(\"editable\",i=new t(this,s)),\"string\"==typeof n&&i[n].apply(i,Array.prototype.slice.call(a,1)))})},e.fn.editable.defaults={type:\"text\",disabled:!1,toggle:\"click\",emptytext:\"Empty\",autotext:\"auto\",value:null,display:null,emptyclass:\"editable-empty\",unsavedclass:\"editable-unsaved\",selector:null,highlight:\"#FFFF80\"}}(window.jQuery),function(e){\"use strict\";e.fn.editabletypes={};var t=function(){};t.prototype={init:function(t,n,r){this.type=t,this.options=e.extend({},r,n)},prerender:function(){this.$tpl=e(this.options.tpl),this.$input=this.$tpl,this.$clear=null,this.error=null},render:function(){},value2html:function(t,n){e(n)[this.options.escape?\"text\":\"html\"](e.trim(t))},html2value:function(t){return e(\"<div>\").html(t).text()},value2str:function(e){return e},str2value:function(e){return e},value2submit:function(e){return e},value2input:function(e){this.$input.val(e)},input2value:function(){return this.$input.val()},activate:function(){this.$input.is(\":visible\")&&this.$input.focus()},clear:function(){this.$input.val(null)},escape:function(t){return e(\"<div>\").text(t).html()},autosubmit:function(){},destroy:function(){},setClass:function(){this.options.inputclass&&this.$input.addClass(this.options.inputclass)},setAttr:function(e){void 0!==this.options[e]&&null!==this.options[e]&&this.$input.attr(e,this.options[e])},option:function(e,t){this.options[e]=t}},t.defaults={tpl:\"\",inputclass:null,escape:!0,scope:null,showbuttons:!0},e.extend(e.fn.editabletypes,{abstractinput:t})}(window.jQuery),function(e){\"use strict\";var t=function(e){};e.fn.editableutils.inherit(t,e.fn.editabletypes.abstractinput),e.extend(t.prototype,{render:function(){var t=e.Deferred();return this.error=null,this.onSourceReady(function(){this.renderList(),t.resolve()},function(){this.error=this.options.sourceError,t.resolve()}),t.promise()},html2value:function(e){return null},value2html:function(t,n,r,o){var a=e.Deferred(),i=function(){\"function\"==typeof r?r.call(n,t,this.sourceData,o):this.value2htmlFinal(t,n),a.resolve()};return null===t?i.call(this):this.onSourceReady(i,function(){a.resolve()}),a.promise()},onSourceReady:function(t,n){var r;if(e.isFunction(this.options.source)?(r=this.options.source.call(this.options.scope),this.sourceData=null):r=this.options.source,this.options.sourceCache&&e.isArray(this.sourceData))t.call(this);else{try{r=e.fn.editableutils.tryParseJson(r,!1)}catch(e){return void n.call(this)}if(\"string\"==typeof r){if(this.options.sourceCache){var o,a=r;if(e(document).data(a)||e(document).data(a,{}),!1===(o=e(document).data(a)).loading&&o.sourceData)return this.sourceData=o.sourceData,this.doPrepend(),void t.call(this);if(!0===o.loading)return o.callbacks.push(e.proxy(function(){this.sourceData=o.sourceData,this.doPrepend(),t.call(this)},this)),void o.err_callbacks.push(e.proxy(n,this));o.loading=!0,o.callbacks=[],o.err_callbacks=[]}var i=e.extend({url:r,type:\"get\",cache:!1,dataType:\"json\",success:e.proxy(function(r){o&&(o.loading=!1),this.sourceData=this.makeArray(r),e.isArray(this.sourceData)?(o&&(o.sourceData=this.sourceData,e.each(o.callbacks,function(){this.call()})),this.doPrepend(),t.call(this)):(n.call(this),o&&e.each(o.err_callbacks,function(){this.call()}))},this),error:e.proxy(function(){n.call(this),o&&(o.loading=!1,e.each(o.err_callbacks,function(){this.call()}))},this)},this.options.sourceOptions);e.ajax(i)}else this.sourceData=this.makeArray(r),e.isArray(this.sourceData)?(this.doPrepend(),t.call(this)):n.call(this)}},doPrepend:function(){null!==this.options.prepend&&void 0!==this.options.prepend&&(e.isArray(this.prependData)||(e.isFunction(this.options.prepend)&&(this.options.prepend=this.options.prepend.call(this.options.scope)),this.options.prepend=e.fn.editableutils.tryParseJson(this.options.prepend,!0),\"string\"==typeof this.options.prepend&&(this.options.prepend={\"\":this.options.prepend}),this.prependData=this.makeArray(this.options.prepend)),e.isArray(this.prependData)&&e.isArray(this.sourceData)&&(this.sourceData=this.prependData.concat(this.sourceData)))},renderList:function(){},value2htmlFinal:function(e,t){},makeArray:function(t){var n,r,a,i,s=[];if(!t||\"string\"==typeof t)return null;if(e.isArray(t)){i=function(e,t){if(r={value:e,text:t},n++>=2)return!1};for(var u=0;u<t.length;u++)\"object\"===(void 0===(a=t[u])?\"undefined\":o(a))?(n=0,e.each(a,i),1===n?s.push(r):n>1&&(a.children&&(a.children=this.makeArray(a.children)),s.push(a))):s.push({value:a,text:a})}else e.each(t,function(e,t){s.push({value:e,text:t})});return s},option:function(e,t){this.options[e]=t,\"source\"===e&&(this.sourceData=null),\"prepend\"===e&&(this.prependData=null)}}),t.defaults=e.extend({},e.fn.editabletypes.abstractinput.defaults,{source:null,prepend:!1,sourceError:\"Error when loading list\",sourceCache:!0,sourceOptions:null}),e.fn.editabletypes.list=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"text\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.abstractinput),e.extend(t.prototype,{render:function(){this.renderClear(),this.setClass(),this.setAttr(\"placeholder\")},activate:function(){this.$input.is(\":visible\")&&(this.$input.focus(),this.$input.is(\"input,textarea\")&&!this.$input.is('[type=\"checkbox\"],[type=\"range\"]')&&e.fn.editableutils.setCursorPosition(this.$input.get(0),this.$input.val().length),this.toggleClear&&this.toggleClear())},renderClear:function(){this.options.clear&&(this.$clear=e('<span class=\"editable-clear-x\"></span>'),this.$input.after(this.$clear).css(\"padding-right\",24).keyup(e.proxy(function(t){if(!~e.inArray(t.keyCode,[40,38,9,13,27])){clearTimeout(this.t);var n=this;this.t=setTimeout(function(){n.toggleClear(t)},100)}},this)).parent().css(\"position\",\"relative\"),this.$clear.click(e.proxy(this.clear,this)))},postrender:function(){},toggleClear:function(e){if(this.$clear){var t=this.$input.val().length,n=this.$clear.is(\":visible\");t&&!n&&this.$clear.show(),!t&&n&&this.$clear.hide()}},clear:function(){this.$clear.hide(),this.$input.val(\"\").focus()}}),t.defaults=e.extend({},e.fn.editabletypes.abstractinput.defaults,{tpl:'<input type=\"text\">',placeholder:null,clear:!0}),e.fn.editabletypes.text=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"textarea\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.abstractinput),e.extend(t.prototype,{render:function(){this.setClass(),this.setAttr(\"placeholder\"),this.setAttr(\"rows\"),this.$input.keydown(function(t){t.ctrlKey&&13===t.which&&e(this).closest(\"form\").submit()})},activate:function(){e.fn.editabletypes.text.prototype.activate.call(this)}}),t.defaults=e.extend({},e.fn.editabletypes.abstractinput.defaults,{tpl:\"<textarea></textarea>\",inputclass:\"input-large\",placeholder:null,rows:7}),e.fn.editabletypes.textarea=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"select\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.list),e.extend(t.prototype,{renderList:function(){this.$input.empty();var t=this.options.escape;!function n(r,o){var a;if(e.isArray(o))for(var i=0;i<o.length;i++)if(a={},o[i].children)a.label=o[i].text,r.append(n(e(\"<optgroup>\",a),o[i].children));else{a.value=o[i].value,o[i].disabled&&(a.disabled=!0);var s=e(\"<option>\",a);s[t?\"text\":\"html\"](o[i].text),r.append(s)}return r}(this.$input,this.sourceData),this.setClass(),this.$input.on(\"keydown.editable\",function(t){13===t.which&&e(this).closest(\"form\").submit()})},value2htmlFinal:function(t,n){var r=\"\",o=e.fn.editableutils.itemsByValue(t,this.sourceData);o.length&&(r=o[0].text),e.fn.editabletypes.abstractinput.prototype.value2html.call(this,r,n)},autosubmit:function(){this.$input.off(\"keydown.editable\").on(\"change.editable\",function(){e(this).closest(\"form\").submit()})}}),t.defaults=e.extend({},e.fn.editabletypes.list.defaults,{tpl:\"<select></select>\"}),e.fn.editabletypes.select=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"checklist\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.list),e.extend(t.prototype,{renderList:function(){var t;if(this.$tpl.empty(),e.isArray(this.sourceData)){for(var n=0;n<this.sourceData.length;n++){t=e(\"<label>\").append(e(\"<input>\",{type:\"checkbox\",value:this.sourceData[n].value}));var r=e(\"<span>\");r[this.options.escape?\"text\":\"html\"](\" \"+this.sourceData[n].text),t.append(r),e(\"<div>\").append(t).appendTo(this.$tpl)}this.$input=this.$tpl.find('input[type=\"checkbox\"]'),this.setClass()}},value2str:function(t){return e.isArray(t)?t.sort().join(e.trim(this.options.separator)):\"\"},str2value:function(t){var n,r=null;return\"string\"==typeof t&&t.length?(n=new RegExp(\"\\\\s*\"+e.trim(this.options.separator)+\"\\\\s*\"),r=t.split(n)):r=e.isArray(t)?t:[t],r},value2input:function(t){this.$input.prop(\"checked\",!1),e.isArray(t)&&t.length&&this.$input.each(function(n,r){var o=e(r);e.each(t,function(e,t){o.val()==t&&o.prop(\"checked\",!0)})})},input2value:function(){var t=[];return this.$input.filter(\":checked\").each(function(n,r){t.push(e(r).val())}),t},value2htmlFinal:function(t,n){var r=[],o=e.fn.editableutils.itemsByValue(t,this.sourceData),a=this.options.escape;o.length?(e.each(o,function(t,n){var o=a?e.fn.editableutils.escape(n.text):n.text;r.push(o)}),e(n).html(r.join(\"<br>\"))):e(n).empty()},activate:function(){this.$input.first().focus()},autosubmit:function(){this.$input.on(\"keydown\",function(t){13===t.which&&e(this).closest(\"form\").submit()})}}),t.defaults=e.extend({},e.fn.editabletypes.list.defaults,{tpl:'<div class=\"editable-checklist\"></div>',inputclass:null,separator:\",\"}),e.fn.editabletypes.checklist=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"password\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.text),e.extend(t.prototype,{value2html:function(t,n){t?e(n).text(\"[hidden]\"):e(n).empty()},html2value:function(e){return null}}),t.defaults=e.extend({},e.fn.editabletypes.text.defaults,{tpl:'<input type=\"password\">'}),e.fn.editabletypes.password=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"email\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.text),t.defaults=e.extend({},e.fn.editabletypes.text.defaults,{tpl:'<input type=\"email\">'}),e.fn.editabletypes.email=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"url\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.text),t.defaults=e.extend({},e.fn.editabletypes.text.defaults,{tpl:'<input type=\"url\">'}),e.fn.editabletypes.url=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"tel\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.text),t.defaults=e.extend({},e.fn.editabletypes.text.defaults,{tpl:'<input type=\"tel\">'}),e.fn.editabletypes.tel=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"number\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.text),e.extend(t.prototype,{render:function(){t.superclass.render.call(this),this.setAttr(\"min\"),this.setAttr(\"max\"),this.setAttr(\"step\")},postrender:function(){this.$clear&&this.$clear.css({right:24})}}),t.defaults=e.extend({},e.fn.editabletypes.text.defaults,{tpl:'<input type=\"number\">',inputclass:\"input-mini\",min:null,max:null,step:null}),e.fn.editabletypes.number=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"range\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.number),e.extend(t.prototype,{render:function(){this.$input=this.$tpl.filter(\"input\"),this.setClass(),this.setAttr(\"min\"),this.setAttr(\"max\"),this.setAttr(\"step\"),this.$input.on(\"input\",function(){e(this).siblings(\"output\").text(e(this).val())})},activate:function(){this.$input.focus()}}),t.defaults=e.extend({},e.fn.editabletypes.number.defaults,{tpl:'<input type=\"range\"><output style=\"width: 30px; display: inline-block\"></output>',inputclass:\"input-medium\"}),e.fn.editabletypes.range=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"time\",t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.abstractinput),e.extend(t.prototype,{render:function(){this.setClass()}}),t.defaults=e.extend({},e.fn.editabletypes.abstractinput.defaults,{tpl:'<input type=\"time\">'}),e.fn.editabletypes.time=t}(window.jQuery),function(e){\"use strict\";var t=function t(n){if(this.init(\"select2\",n,t.defaults),n.select2=n.select2||{},this.sourceData=null,n.placeholder&&(n.select2.placeholder=n.placeholder),!n.select2.tags&&n.source){var r=n.source;e.isFunction(n.source)&&(r=n.source.call(n.scope)),\"string\"==typeof r?(n.select2.ajax=n.select2.ajax||{},n.select2.ajax.dataType||(n.select2.ajax.dataType=\"json\"),n.select2.ajax.data||(n.select2.ajax.data=function(e){return{query:e}}),n.select2.ajax.processResults||(n.select2.ajax.processResults=function(e){return{results:e}}),n.select2.ajax.url=r):(this.sourceData=this.convertSource(r),n.select2.data=this.sourceData)}if(this.options.select2=e.extend({},t.defaults.select2,n.select2),this.isMultiple=this.options.select2.tags||this.options.select2.multiple,this.isRemote=\"ajax\"in this.options.select2,this.idFunc=this.options.select2.id,\"function\"!=typeof this.idFunc){var o=this.idFunc||\"id\";this.idFunc=function(e){return e[o]}}this.formatSelection=this.options.select2.formatSelection,\"function\"!=typeof this.formatSelection&&(this.formatSelection=function(e){return e.text})};e.fn.editableutils.inherit(t,e.fn.editabletypes.abstractinput),e.extend(t.prototype,{render:function(){this.setClass(),this.isRemote&&this.$input.on(\"select2-loaded\",e.proxy(function(e){this.sourceData=e.items.results},this)),this.isMultiple&&this.$input.on(\"change\",function(){e(this).closest(\"form\").parent().triggerHandler(\"resize\")})},value2html:function(n,r){var a,i=\"\",s=this;this.options.select2.tags?a=n:this.sourceData&&(a=e.fn.editableutils.itemsByValue(n,this.sourceData,this.idFunc)),e.isArray(a)?(i=[],e.each(a,function(e,t){i.push(t&&\"object\"===(void 0===t?\"undefined\":o(t))?s.formatSelection(t):t)})):a&&(i=s.formatSelection(a)),i=e.isArray(i)?i.join(this.options.viewseparator):i,t.superclass.value2html.call(this,i,r)},html2value:function(e){return this.options.select2.tags?this.str2value(e,this.options.viewseparator):null},value2input:function(t){if(e.isArray(t)&&(t=t.join(this.getSeparator())),this.$input.data(\"select2\")?this.$input.val(t).trigger(\"change\",!0):(this.$input.val(t),this.$input.select2(this.options.select2)),this.isRemote&&!this.isMultiple&&!this.options.select2.initSelection){var n=this.options.select2.id,r=this.options.select2.formatSelection;if(!n&&!r){var o=e(this.options.scope);if(!o.data(\"editable\").isEmpty){var a={id:t,text:o.text()};this.$input.select2(\"data\",a)}}}},input2value:function(){return this.$input.select2(\"val\")},str2value:function(t,n){if(\"string\"!=typeof t||!this.isMultiple)return t;var r,o,a;if(n=n||this.getSeparator(),null===t||t.length<1)return null;for(o=0,a=(r=t.split(n)).length;o<a;o+=1)r[o]=e.trim(r[o]);return r},autosubmit:function(){this.$input.on(\"change\",function(t,n){n||e(this).closest(\"form\").submit()})},getSeparator:function(){return this.options.select2.separator||e.fn.select2.defaults.separator},convertSource:function(t){if(e.isArray(t)&&t.length&&void 0!==t[0].value)for(var n=0;n<t.length;n++)void 0!==t[n].value&&(t[n].id=t[n].value,delete t[n].value);return t},destroy:function(){this.$input.data(\"select2\")&&this.$input.select2(\"destroy\")}}),t.defaults=e.extend({},e.fn.editabletypes.abstractinput.defaults,{tpl:'<input type=\"hidden\">',select2:null,placeholder:null,source:null,viewseparator:\", \"}),e.fn.editabletypes.select2=t}(window.jQuery),n=window.jQuery,(r=function(e,t){this.$element=n(e),this.$element.is(\"input\")?(this.options=n.extend({},n.fn.combodate.defaults,t,this.$element.data()),this.init()):n.error(\"Combodate should be applied to INPUT element\")}).prototype={constructor:r,init:function(){this.map={day:[\"D\",\"date\"],month:[\"M\",\"month\"],year:[\"Y\",\"year\"],hour:[\"[Hh]\",\"hours\"],minute:[\"m\",\"minutes\"],second:[\"s\",\"seconds\"],ampm:[\"[Aa]\",\"\"]},this.$widget=n('<span class=\"combodate\"></span>').html(this.getTemplate()),this.initCombos(),this.$widget.on(\"change\",\"select\",n.proxy(function(e){this.$element.val(this.getValue()).change(),this.options.smartDays&&(n(e.target).is(\".month\")||n(e.target).is(\".year\"))&&this.fillCombo(\"day\")},this)),this.$widget.find(\"select\").css(\"width\",\"auto\"),this.$element.hide().after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var e=this.options.template;return n.each(this.map,function(t,n){n=n[0];var r=new RegExp(n+\"+\"),o=n.length>1?n.substring(1,2):n;e=e.replace(r,\"{\"+o+\"}\")}),e=e.replace(/ /g,\"&nbsp;\"),n.each(this.map,function(t,n){var r=(n=n[0]).length>1?n.substring(1,2):n;e=e.replace(\"{\"+r+\"}\",'<select class=\"'+t+'\"></select>')}),e},initCombos:function(){for(var e in this.map){var t=this.$widget.find(\".\"+e);this[\"$\"+e]=t.length?t:null,this.fillCombo(e)}},fillCombo:function(e){var t=this[\"$\"+e];if(t){var n=this[\"fill\"+e.charAt(0).toUpperCase()+e.slice(1)](),r=t.val();t.empty();for(var o=0;o<n.length;o++)t.append('<option value=\"'+n[o][0]+'\">'+n[o][1]+\"</option>\");t.val(r)}},fillCommon:function(e){var t,n=[];if(\"name\"===this.options.firstItem){var r=\"function\"==typeof(t=moment.relativeTime||moment.langData()._relativeTime)[e]?t[e](1,!0,e,!1):t[e];r=r.split(\" \").reverse()[0],n.push([\"\",r])}else\"empty\"===this.options.firstItem&&n.push([\"\",\"\"]);return n},fillDay:function(){var e,t,n=this.fillCommon(\"d\"),r=-1!==this.options.template.indexOf(\"DD\"),o=31;if(this.options.smartDays&&this.$month&&this.$year){var a=parseInt(this.$month.val(),10),i=parseInt(this.$year.val(),10);isNaN(a)||isNaN(i)||(o=moment([i,a]).daysInMonth())}for(t=1;t<=o;t++)e=r?this.leadZero(t):t,n.push([t,e]);return n},fillMonth:function(){var e,t,n=this.fillCommon(\"M\"),r=-1!==this.options.template.indexOf(\"MMMM\"),o=-1!==this.options.template.indexOf(\"MMM\"),a=-1!==this.options.template.indexOf(\"MM\");for(t=0;t<=11;t++)e=r?moment().date(1).month(t).format(\"MMMM\"):o?moment().date(1).month(t).format(\"MMM\"):a?this.leadZero(t+1):t+1,n.push([t,e]);return n},fillYear:function(){var e,t,n=[],r=-1!==this.options.template.indexOf(\"YYYY\");for(t=this.options.maxYear;t>=this.options.minYear;t--)e=r?t:(t+\"\").substring(2),n[this.options.yearDescending?\"push\":\"unshift\"]([t,e]);return n=this.fillCommon(\"y\").concat(n)},fillHour:function(){var e,t,n=this.fillCommon(\"h\"),r=-1!==this.options.template.indexOf(\"h\"),o=(this.options.template.indexOf(\"H\"),-1!==this.options.template.toLowerCase().indexOf(\"hh\")),a=r?12:23;for(t=r?1:0;t<=a;t++)e=o?this.leadZero(t):t,n.push([t,e]);return n},fillMinute:function(){var e,t,n=this.fillCommon(\"m\"),r=-1!==this.options.template.indexOf(\"mm\");for(t=0;t<=59;t+=this.options.minuteStep)e=r?this.leadZero(t):t,n.push([t,e]);return n},fillSecond:function(){var e,t,n=this.fillCommon(\"s\"),r=-1!==this.options.template.indexOf(\"ss\");for(t=0;t<=59;t+=this.options.secondStep)e=r?this.leadZero(t):t,n.push([t,e]);return n},fillAmpm:function(){var e=-1!==this.options.template.indexOf(\"a\");return this.options.template.indexOf(\"A\"),[[\"am\",e?\"am\":\"AM\"],[\"pm\",e?\"pm\":\"PM\"]]},getValue:function(e){var t,r={},o=this,a=!1;return n.each(this.map,function(e,t){if(\"ampm\"!==e){var n=\"day\"===e?1:0;return r[e]=o[\"$\"+e]?parseInt(o[\"$\"+e].val(),10):n,isNaN(r[e])?(a=!0,!1):void 0}}),a?\"\":(this.$ampm&&(12===r.hour?r.hour=\"am\"===this.$ampm.val()?0:12:r.hour=\"am\"===this.$ampm.val()?r.hour:r.hour+12),t=moment([r.year,r.month,r.day,r.hour,r.minute,r.second]),this.highlight(t),null===(e=void 0===e?this.options.format:e)?t.isValid()?t:null:t.isValid()?t.format(e):\"\")},setValue:function(e){if(e){var t=\"string\"==typeof e?moment(e,this.options.format):moment(e),r=this,o={};t.isValid()&&(n.each(this.map,function(e,n){\"ampm\"!==e&&(o[e]=t[n[1]]())}),this.$ampm&&(o.hour>=12?(o.ampm=\"pm\",o.hour>12&&(o.hour-=12)):(o.ampm=\"am\",0===o.hour&&(o.hour=12))),n.each(o,function(e,t){r[\"$\"+e]&&(\"minute\"===e&&r.options.minuteStep>1&&r.options.roundTime&&(t=a(r[\"$\"+e],t)),\"second\"===e&&r.options.secondStep>1&&r.options.roundTime&&(t=a(r[\"$\"+e],t)),r[\"$\"+e].val(t))}),this.options.smartDays&&this.fillCombo(\"day\"),this.$element.val(t.format(this.options.format)).change())}function a(e,t){var r={};return e.children(\"option\").each(function(e,o){var a,i=n(o).attr(\"value\");\"\"!==i&&(a=Math.abs(i-t),(void 0===r.distance||a<r.distance)&&(r={value:i,distance:a}))}),r.value}},highlight:function(e){e.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find(\"select\").css(\"border-color\",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find(\"select\").css(\"border-color\")),this.$widget.find(\"select\").css(\"border-color\",\"red\"))},leadZero:function(e){return e<=9?\"0\"+e:e},destroy:function(){this.$widget.remove(),this.$element.removeData(\"combodate\").show()}},n.fn.combodate=function(e){var t,a=Array.apply(null,arguments);return a.shift(),\"getValue\"===e&&this.length&&(t=this.eq(0).data(\"combodate\"))?t.getValue.apply(t,a):this.each(function(){var t=n(this),i=t.data(\"combodate\"),s=\"object\"==(void 0===e?\"undefined\":o(e))&&e;i||t.data(\"combodate\",i=new r(this,s)),\"string\"==typeof e&&\"function\"==typeof i[e]&&i[e].apply(i,a)})},n.fn.combodate.defaults={format:\"DD-MM-YYYY HH:mm\",template:\"D / MMM / YYYY   H : mm\",value:null,minYear:1970,maxYear:(new Date).getFullYear(),yearDescending:!0,minuteStep:5,secondStep:1,firstItem:\"empty\",errorClass:null,roundTime:!0,smartDays:!1},function(e){\"use strict\";var t=function t(n){this.init(\"combodate\",n,t.defaults),this.options.viewformat||(this.options.viewformat=this.options.format),n.combodate=e.fn.editableutils.tryParseJson(n.combodate,!0),this.options.combodate=e.extend({},t.defaults.combodate,n.combodate,{format:this.options.format,template:this.options.template})};e.fn.editableutils.inherit(t,e.fn.editabletypes.abstractinput),e.extend(t.prototype,{render:function(){this.$input.combodate(this.options.combodate),\"bs3\"===e.fn.editableform.engine&&this.$input.siblings().find(\"select\").addClass(\"form-control\"),this.options.inputclass&&this.$input.siblings().find(\"select\").addClass(this.options.inputclass)},value2html:function(e,n){var r=e?e.format(this.options.viewformat):\"\";t.superclass.value2html.call(this,r,n)},html2value:function(e){return e?moment(e,this.options.viewformat):null},value2str:function(e){return e?e.format(this.options.format):\"\"},str2value:function(e){return e?moment(e,this.options.format):null},value2submit:function(e){return this.value2str(e)},value2input:function(e){this.$input.combodate(\"setValue\",e)},input2value:function(){return this.$input.combodate(\"getValue\",null)},activate:function(){this.$input.siblings(\".combodate\").find(\"select\").eq(0).focus()},autosubmit:function(){}}),t.defaults=e.extend({},e.fn.editabletypes.abstractinput.defaults,{tpl:'<input type=\"text\">',inputclass:null,format:\"YYYY-MM-DD\",viewformat:null,template:\"D / MMM / YYYY\",combodate:null}),e.fn.editabletypes.combodate=t}(window.jQuery),function(e){\"use strict\";var t=e.fn.editableform.Constructor.prototype.initInput;e.extend(e.fn.editableform.Constructor.prototype,{initTemplate:function(){this.$form=e(e.fn.editableform.template),this.$form.find(\".control-group\").addClass(\"form-group\"),this.$form.find(\".editable-error-block\").addClass(\"help-block\")},initInput:function(){t.apply(this);var n=null===this.input.options.inputclass||!1===this.input.options.inputclass,r=\"text,select,textarea,password,email,url,tel,number,range,time,typeaheadjs\".split(\",\");~e.inArray(this.input.type,r)&&(this.input.$input.addClass(\"form-control\"),n&&(this.input.options.inputclass=\"input-sm\",this.input.$input.addClass(\"input-sm\")));for(var o=this.$form.find(\".editable-buttons\"),a=n?[\"input-sm\"]:this.input.options.inputclass.split(\" \"),i=0;i<a.length;i++)\"input-lg\"===a[i].toLowerCase()&&o.find(\"button\").removeClass(\"btn-sm\").addClass(\"btn-lg\")}}),e.fn.editableform.buttons='<button type=\"submit\" class=\"btn btn-primary btn-sm editable-submit\"><i class=\"glyphicon glyphicon-ok\"></i></button><button type=\"button\" class=\"btn btn-default btn-sm editable-cancel\"><i class=\"glyphicon glyphicon-remove\"></i></button>',e.fn.editableform.errorGroupClass=\"has-error\",e.fn.editableform.errorBlockClass=null,e.fn.editableform.engine=\"bs3\"}(window.jQuery),function(e){\"use strict\";e.extend(e.fn.editableContainer.Popup.prototype,{containerName:\"popover\",containerDataName:\"bs.popover\",innerCss:\".popover-content\",defaults:e.fn.popover.Constructor.DEFAULTS,initContainer:function(){var t;e.extend(this.containerOptions,{trigger:\"manual\",selector:!1,content:\" \",template:this.defaults.template}),this.$element.data(\"template\")&&(t=this.$element.data(\"template\"),this.$element.removeData(\"template\")),this.call(this.containerOptions),t&&this.$element.data(\"template\",t)},innerShow:function(){this.call(\"show\")},innerHide:function(){this.call(\"hide\")},innerDestroy:function(){this.call(\"destroy\")},setContainerOption:function(e,t){this.container().options[e]=t},setPosition:function(){(function(){var e=this.tip(),t=\"function\"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,n=/\\s?auto?\\s?/i,r=n.test(t);r&&(t=t.replace(n,\"\")||\"top\");var o=this.getPosition(),a=e[0].offsetWidth,i=e[0].offsetHeight;if(r){var s=this.$element.parent(),u=t,l=document.documentElement.scrollTop||document.body.scrollTop,c=\"body\"==this.options.container?window.innerWidth:s.outerWidth(),d=\"body\"==this.options.container?window.innerHeight:s.outerHeight(),f=\"body\"==this.options.container?0:s.offset().left;t=\"bottom\"==t&&o.top+o.height+i-l>d?\"top\":\"top\"==t&&o.top-l-i<0?\"bottom\":\"right\"==t&&o.right+a>c?\"left\":\"left\"==t&&o.left-a<f?\"right\":t,e.removeClass(u).addClass(t)}var p=this.getCalculatedOffset(t,o,a,i);this.applyPlacement(p,t)}).call(this.container())}})}(window.jQuery),function(e){function t(){return new Date(Date.UTC.apply(Date,arguments))}var n=function(t,n){this._process_options(n),this.element=e(t),this.isInline=!1,this.isInput=this.element.is(\"input\"),this.component=!!this.element.is(\".date\")&&this.element.find(\".add-on, .btn\"),this.hasInput=this.component&&this.element.find(\"input\").length,this.component&&0===this.component.length&&(this.component=!1),this.picker=e(c.template),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass(\"datepicker-inline\").appendTo(this.element):this.picker.addClass(\"datepicker-dropdown dropdown-menu\"),this.o.rtl&&(this.picker.addClass(\"datepicker-rtl\"),this.picker.find(\".prev i, .next i\").toggleClass(\"icon-arrow-left icon-arrow-right\")),this.viewMode=this.o.startView,this.o.calendarWeeks&&this.picker.find(\"tfoot th.today\").attr(\"colspan\",function(e,t){return parseInt(t)+1}),this._allow_update=!1,this.setStartDate(this.o.startDate),this.setEndDate(this.o.endDate),this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),this.fillDow(),this.fillMonths(),this._allow_update=!0,this.update(),this.showMode(),this.isInline&&this.show()};n.prototype={constructor:n,_process_options:function(t){this._o=e.extend({},this._o,t);var n=this.o=e.extend({},this._o),r=n.language;switch(l[r]||(r=r.split(\"-\")[0],l[r]||(r=s.language)),n.language=r,n.startView){case 2:case\"decade\":n.startView=2;break;case 1:case\"year\":n.startView=1;break;default:n.startView=0}switch(n.minViewMode){case 1:case\"months\":n.minViewMode=1;break;case 2:case\"years\":n.minViewMode=2;break;default:n.minViewMode=0}n.startView=Math.max(n.startView,n.minViewMode),n.weekStart%=7,n.weekEnd=(n.weekStart+6)%7;var o=c.parseFormat(n.format);n.startDate!==-1/0&&(n.startDate=c.parseDate(n.startDate,o,n.language)),n.endDate!==1/0&&(n.endDate=c.parseDate(n.endDate,o,n.language)),n.daysOfWeekDisabled=n.daysOfWeekDisabled||[],e.isArray(n.daysOfWeekDisabled)||(n.daysOfWeekDisabled=n.daysOfWeekDisabled.split(/[,\\s]*/)),n.daysOfWeekDisabled=e.map(n.daysOfWeekDisabled,function(e){return parseInt(e,10)})},_events:[],_secondaryEvents:[],_applyEvents:function(e){for(var t,n,r=0;r<e.length;r++)t=e[r][0],n=e[r][1],t.on(n)},_unapplyEvents:function(e){for(var t,n,r=0;r<e.length;r++)t=e[r][0],n=e[r][1],t.off(n)},_buildEvents:function(){this.isInput?this._events=[[this.element,{focus:e.proxy(this.show,this),keyup:e.proxy(this.update,this),keydown:e.proxy(this.keydown,this)}]]:this.component&&this.hasInput?this._events=[[this.element.find(\"input\"),{focus:e.proxy(this.show,this),keyup:e.proxy(this.update,this),keydown:e.proxy(this.keydown,this)}],[this.component,{click:e.proxy(this.show,this)}]]:this.element.is(\"div\")?this.isInline=!0:this._events=[[this.element,{click:e.proxy(this.show,this)}]],this._secondaryEvents=[[this.picker,{click:e.proxy(this.click,this)}],[e(window),{resize:e.proxy(this.place,this)}],[e(document),{mousedown:e.proxy(function(e){this.element.is(e.target)||this.element.find(e.target).size()||this.picker.is(e.target)||this.picker.find(e.target).size()||this.hide()},this)}]]},_attachEvents:function(){this._detachEvents(),this._applyEvents(this._events)},_detachEvents:function(){this._unapplyEvents(this._events)},_attachSecondaryEvents:function(){this._detachSecondaryEvents(),this._applyEvents(this._secondaryEvents)},_detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)},_trigger:function(t,n){var r=n||this.date,o=new Date(r.getTime()+6e4*r.getTimezoneOffset());this.element.trigger({type:t,date:o,format:e.proxy(function(e){var t=e||this.o.format;return c.formatDate(r,t,this.o.language)},this)})},show:function(e){this.isInline||this.picker.appendTo(\"body\"),this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.place(),this._attachSecondaryEvents(),e&&e.preventDefault(),this._trigger(\"show\")},hide:function(e){this.isInline||this.picker.is(\":visible\")&&(this.picker.hide().detach(),this._detachSecondaryEvents(),this.viewMode=this.o.startView,this.showMode(),this.o.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find(\"input\").val())&&this.setValue(),this._trigger(\"hide\"))},remove:function(){this.hide(),this._detachEvents(),this._detachSecondaryEvents(),this.picker.remove(),delete this.element.data().datepicker,this.isInput||delete this.element.data().date},getDate:function(){var e=this.getUTCDate();return new Date(e.getTime()+6e4*e.getTimezoneOffset())},getUTCDate:function(){return this.date},setDate:function(e){this.setUTCDate(new Date(e.getTime()-6e4*e.getTimezoneOffset()))},setUTCDate:function(e){this.date=e,this.setValue()},setValue:function(){var e=this.getFormattedDate();this.isInput?this.element.val(e):this.component&&this.element.find(\"input\").val(e)},getFormattedDate:function(e){return void 0===e&&(e=this.o.format),c.formatDate(this.date,e,this.o.language)},setStartDate:function(e){this._process_options({startDate:e}),this.update(),this.updateNavArrows()},setEndDate:function(e){this._process_options({endDate:e}),this.update(),this.updateNavArrows()},setDaysOfWeekDisabled:function(e){this._process_options({daysOfWeekDisabled:e}),this.update(),this.updateNavArrows()},place:function(){if(!this.isInline){var t=parseInt(this.element.parents().filter(function(){return\"auto\"!=e(this).css(\"z-index\")}).first().css(\"z-index\"))+10,n=this.component?this.component.parent().offset():this.element.offset(),r=this.component?this.component.outerHeight(!0):this.element.outerHeight(!0);this.picker.css({top:n.top+r,left:n.left,zIndex:t})}},_allow_update:!0,update:function(){if(this._allow_update){var e,t=!1;arguments&&arguments.length&&(\"string\"==typeof arguments[0]||arguments[0]instanceof Date)?(e=arguments[0],t=!0):(e=this.isInput?this.element.val():this.element.data(\"date\")||this.element.find(\"input\").val(),delete this.element.data().date),this.date=c.parseDate(e,this.o.format,this.o.language),t&&this.setValue(),this.date<this.o.startDate?this.viewDate=new Date(this.o.startDate):this.date>this.o.endDate?this.viewDate=new Date(this.o.endDate):this.viewDate=new Date(this.date),this.fill()}},fillDow:function(){var e=this.o.weekStart,t=\"<tr>\";if(this.o.calendarWeeks){var n='<th class=\"cw\">&nbsp;</th>';t+=n,this.picker.find(\".datepicker-days thead tr:first-child\").prepend(n)}for(;e<this.o.weekStart+7;)t+='<th class=\"dow\">'+l[this.o.language].daysMin[e++%7]+\"</th>\";t+=\"</tr>\",this.picker.find(\".datepicker-days thead\").append(t)},fillMonths:function(){for(var e=\"\",t=0;t<12;)e+='<span class=\"month\">'+l[this.o.language].monthsShort[t++]+\"</span>\";this.picker.find(\".datepicker-months td\").html(e)},setRange:function(t){t&&t.length?this.range=e.map(t,function(e){return e.valueOf()}):delete this.range,this.fill()},getClassNames:function(t){var n=[],r=this.viewDate.getUTCFullYear(),o=this.viewDate.getUTCMonth(),a=this.date.valueOf(),i=new Date;return t.getUTCFullYear()<r||t.getUTCFullYear()==r&&t.getUTCMonth()<o?n.push(\"old\"):(t.getUTCFullYear()>r||t.getUTCFullYear()==r&&t.getUTCMonth()>o)&&n.push(\"new\"),this.o.todayHighlight&&t.getUTCFullYear()==i.getFullYear()&&t.getUTCMonth()==i.getMonth()&&t.getUTCDate()==i.getDate()&&n.push(\"today\"),a&&t.valueOf()==a&&n.push(\"active\"),(t.valueOf()<this.o.startDate||t.valueOf()>this.o.endDate||-1!==e.inArray(t.getUTCDay(),this.o.daysOfWeekDisabled))&&n.push(\"disabled\"),this.range&&(t>this.range[0]&&t<this.range[this.range.length-1]&&n.push(\"range\"),-1!=e.inArray(t.valueOf(),this.range)&&n.push(\"selected\")),n},fill:function(){var n,r=new Date(this.viewDate),o=r.getUTCFullYear(),a=r.getUTCMonth(),i=this.o.startDate!==-1/0?this.o.startDate.getUTCFullYear():-1/0,s=this.o.startDate!==-1/0?this.o.startDate.getUTCMonth():-1/0,u=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,d=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0;this.date&&this.date.valueOf();this.picker.find(\".datepicker-days thead th.datepicker-switch\").text(l[this.o.language].months[a]+\" \"+o),this.picker.find(\"tfoot th.today\").text(l[this.o.language].today).toggle(!1!==this.o.todayBtn),this.picker.find(\"tfoot th.clear\").text(l[this.o.language].clear).toggle(!1!==this.o.clearBtn),this.updateNavArrows(),this.fillMonths();var f=t(o,a-1,28,0,0,0,0),p=c.getDaysInMonth(f.getUTCFullYear(),f.getUTCMonth());f.setUTCDate(p),f.setUTCDate(p-(f.getUTCDay()-this.o.weekStart+7)%7);var h=new Date(f);h.setUTCDate(h.getUTCDate()+42),h=h.valueOf();for(var m,g=[];f.valueOf()<h;){if(f.getUTCDay()==this.o.weekStart&&(g.push(\"<tr>\"),this.o.calendarWeeks)){var v=new Date(+f+(this.o.weekStart-f.getUTCDay()-7)%7*864e5),b=new Date(+v+(11-v.getUTCDay())%7*864e5),y=new Date(+(y=t(b.getUTCFullYear(),0,1))+(11-y.getUTCDay())%7*864e5),w=(b-y)/864e5/7+1;g.push('<td class=\"cw\">'+w+\"</td>\")}(m=this.getClassNames(f)).push(\"day\");var x=this.o.beforeShowDay(f);void 0===x?x={}:\"boolean\"==typeof x?x={enabled:x}:\"string\"==typeof x&&(x={classes:x}),!1===x.enabled&&m.push(\"disabled\"),x.classes&&(m=m.concat(x.classes.split(/\\s+/))),x.tooltip&&(n=x.tooltip),m=e.unique(m),g.push('<td class=\"'+m.join(\" \")+'\"'+(n?' title=\"'+n+'\"':\"\")+\">\"+f.getUTCDate()+\"</td>\"),f.getUTCDay()==this.o.weekEnd&&g.push(\"</tr>\"),f.setUTCDate(f.getUTCDate()+1)}this.picker.find(\".datepicker-days tbody\").empty().append(g.join(\"\"));var _=this.date&&this.date.getUTCFullYear(),E=this.picker.find(\".datepicker-months\").find(\"th:eq(1)\").text(o).end().find(\"span\").removeClass(\"active\");_&&_==o&&E.eq(this.date.getUTCMonth()).addClass(\"active\"),(o<i||o>u)&&E.addClass(\"disabled\"),o==i&&E.slice(0,s).addClass(\"disabled\"),o==u&&E.slice(d+1).addClass(\"disabled\"),g=\"\",o=10*parseInt(o/10,10);var k=this.picker.find(\".datepicker-years\").find(\"th:eq(1)\").text(o+\"-\"+(o+9)).end().find(\"td\");o-=1;for(var S=-1;S<11;S++)g+='<span class=\"year'+(-1==S?\" old\":10==S?\" new\":\"\")+(_==o?\" active\":\"\")+(o<i||o>u?\" disabled\":\"\")+'\">'+o+\"</span>\",o+=1;k.html(g)},updateNavArrows:function(){if(this._allow_update){var e=new Date(this.viewDate),t=e.getUTCFullYear(),n=e.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-1/0&&t<=this.o.startDate.getUTCFullYear()&&n<=this.o.startDate.getUTCMonth()?this.picker.find(\".prev\").css({visibility:\"hidden\"}):this.picker.find(\".prev\").css({visibility:\"visible\"}),this.o.endDate!==1/0&&t>=this.o.endDate.getUTCFullYear()&&n>=this.o.endDate.getUTCMonth()?this.picker.find(\".next\").css({visibility:\"hidden\"}):this.picker.find(\".next\").css({visibility:\"visible\"});break;case 1:case 2:this.o.startDate!==-1/0&&t<=this.o.startDate.getUTCFullYear()?this.picker.find(\".prev\").css({visibility:\"hidden\"}):this.picker.find(\".prev\").css({visibility:\"visible\"}),this.o.endDate!==1/0&&t>=this.o.endDate.getUTCFullYear()?this.picker.find(\".next\").css({visibility:\"hidden\"}):this.picker.find(\".next\").css({visibility:\"visible\"})}}},click:function(n){n.preventDefault();var r=e(n.target).closest(\"span, td, th\");if(1==r.length)switch(r[0].nodeName.toLowerCase()){case\"th\":switch(r[0].className){case\"datepicker-switch\":this.showMode(1);break;case\"prev\":case\"next\":var o=c.modes[this.viewMode].navStep*(\"prev\"==r[0].className?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,o);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,o)}this.fill();break;case\"today\":var a=new Date;a=t(a.getFullYear(),a.getMonth(),a.getDate(),0,0,0),this.showMode(-2);var i=\"linked\"==this.o.todayBtn?null:\"view\";this._setDate(a,i);break;case\"clear\":var s;this.isInput?s=this.element:this.component&&(s=this.element.find(\"input\")),s&&s.val(\"\").change(),this._trigger(\"changeDate\"),this.update(),this.o.autoclose&&this.hide()}break;case\"span\":if(!r.is(\".disabled\")){if(this.viewDate.setUTCDate(1),r.is(\".month\")){var u=1,l=r.parent().find(\"span\").index(r),d=this.viewDate.getUTCFullYear();this.viewDate.setUTCMonth(l),this._trigger(\"changeMonth\",this.viewDate),1===this.o.minViewMode&&this._setDate(t(d,l,u,0,0,0,0))}else{d=parseInt(r.text(),10)||0,u=1,l=0;this.viewDate.setUTCFullYear(d),this._trigger(\"changeYear\",this.viewDate),2===this.o.minViewMode&&this._setDate(t(d,l,u,0,0,0,0))}this.showMode(-1),this.fill()}break;case\"td\":if(r.is(\".day\")&&!r.is(\".disabled\")){u=parseInt(r.text(),10)||1,d=this.viewDate.getUTCFullYear(),l=this.viewDate.getUTCMonth();r.is(\".old\")?0===l?(l=11,d-=1):l-=1:r.is(\".new\")&&(11==l?(l=0,d+=1):l+=1),this._setDate(t(d,l,u,0,0,0,0))}}},_setDate:function(e,t){var n;t&&\"date\"!=t||(this.date=new Date(e)),t&&\"view\"!=t||(this.viewDate=new Date(e)),this.fill(),this.setValue(),this._trigger(\"changeDate\"),this.isInput?n=this.element:this.component&&(n=this.element.find(\"input\")),n&&(n.change(),!this.o.autoclose||t&&\"date\"!=t||this.hide())},moveMonth:function(e,t){if(!t)return e;var n,r,o=new Date(e.valueOf()),a=o.getUTCDate(),i=o.getUTCMonth(),s=Math.abs(t);if(t=t>0?1:-1,1==s)r=-1==t?function(){return o.getUTCMonth()==i}:function(){return o.getUTCMonth()!=n},n=i+t,o.setUTCMonth(n),(n<0||n>11)&&(n=(n+12)%12);else{for(var u=0;u<s;u++)o=this.moveMonth(o,t);n=o.getUTCMonth(),o.setUTCDate(a),r=function(){return n!=o.getUTCMonth()}}for(;r();)o.setUTCDate(--a),o.setUTCMonth(n);return o},moveYear:function(e,t){return this.moveMonth(e,12*t)},dateWithinRange:function(e){return e>=this.o.startDate&&e<=this.o.endDate},keydown:function(e){if(this.picker.is(\":not(:visible)\"))27==e.keyCode&&this.show();else{var t,n,r,o,a=!1;switch(e.keyCode){case 27:this.hide(),e.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;t=37==e.keyCode?-1:1,e.ctrlKey?(n=this.moveYear(this.date,t),r=this.moveYear(this.viewDate,t)):e.shiftKey?(n=this.moveMonth(this.date,t),r=this.moveMonth(this.viewDate,t)):((n=new Date(this.date)).setUTCDate(this.date.getUTCDate()+t),(r=new Date(this.viewDate)).setUTCDate(this.viewDate.getUTCDate()+t)),this.dateWithinRange(n)&&(this.date=n,this.viewDate=r,this.setValue(),this.update(),e.preventDefault(),a=!0);break;case 38:case 40:if(!this.o.keyboardNavigation)break;t=38==e.keyCode?-1:1,e.ctrlKey?(n=this.moveYear(this.date,t),r=this.moveYear(this.viewDate,t)):e.shiftKey?(n=this.moveMonth(this.date,t),r=this.moveMonth(this.viewDate,t)):((n=new Date(this.date)).setUTCDate(this.date.getUTCDate()+7*t),(r=new Date(this.viewDate)).setUTCDate(this.viewDate.getUTCDate()+7*t)),this.dateWithinRange(n)&&(this.date=n,this.viewDate=r,this.setValue(),this.update(),e.preventDefault(),a=!0);break;case 13:this.hide(),e.preventDefault();break;case 9:this.hide()}if(a)this._trigger(\"changeDate\"),this.isInput?o=this.element:this.component&&(o=this.element.find(\"input\")),o&&o.change()}},showMode:function(e){e&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+e))),this.picker.find(\">div\").hide().filter(\".datepicker-\"+c.modes[this.viewMode].clsName).css(\"display\",\"block\"),this.updateNavArrows()}};var r=function(t,n){this.element=e(t),this.inputs=e.map(n.inputs,function(e){return e.jquery?e[0]:e}),delete n.inputs,e(this.inputs).datepicker(n).bind(\"changeDate\",e.proxy(this.dateUpdated,this)),this.pickers=e.map(this.inputs,function(t){return e(t).data(\"datepicker\")}),this.updateDates()};r.prototype={updateDates:function(){this.dates=e.map(this.pickers,function(e){return e.date}),this.updateRanges()},updateRanges:function(){var t=e.map(this.dates,function(e){return e.valueOf()});e.each(this.pickers,function(e,n){n.setRange(t)})},dateUpdated:function(t){var n=e(t.target).data(\"datepicker\").getUTCDate(),r=e.inArray(t.target,this.inputs),o=this.inputs.length;if(-1!=r){if(n<this.dates[r])for(;r>=0&&n<this.dates[r];)this.pickers[r--].setUTCDate(n);else if(n>this.dates[r])for(;r<o&&n>this.dates[r];)this.pickers[r++].setUTCDate(n);this.updateDates()}},remove:function(){e.map(this.pickers,function(e){e.remove()}),delete this.element.data().datepicker}};var a=e.fn.datepicker,i=e.fn.datepicker=function(t){var a,i=Array.apply(null,arguments);return i.shift(),this.each(function(){var c=e(this),d=c.data(\"datepicker\"),f=\"object\"==(void 0===t?\"undefined\":o(t))&&t;if(!d){var p=function(t,n){var r=e(t).data(),o={},a=new RegExp(\"^\"+n.toLowerCase()+\"([A-Z])\");for(var i in n=new RegExp(\"^\"+n.toLowerCase()),r)n.test(i)&&(o[i.replace(a,function(e,t){return t.toLowerCase()})]=r[i]);return o}(this,\"date\"),h=function(t){var n={};if(l[t]||(t=t.split(\"-\")[0],l[t])){var r=l[t];return e.each(u,function(e,t){t in r&&(n[t]=r[t])}),n}}(e.extend({},s,p,f).language),m=e.extend({},s,h,p,f);if(c.is(\".input-daterange\")||m.inputs){var g={inputs:m.inputs||c.find(\"input\").toArray()};c.data(\"datepicker\",d=new r(this,e.extend(m,g)))}else c.data(\"datepicker\",d=new n(this,m))}if(\"string\"==typeof t&&\"function\"==typeof d[t]&&void 0!==(a=d[t].apply(d,i)))return!1}),void 0!==a?a:this},s=e.fn.datepicker.defaults={autoclose:!1,beforeShowDay:e.noop,calendarWeeks:!1,clearBtn:!1,daysOfWeekDisabled:[],endDate:1/0,forceParse:!0,format:\"mm/dd/yyyy\",keyboardNavigation:!0,language:\"en\",minViewMode:0,rtl:!1,startDate:-1/0,startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0},u=e.fn.datepicker.locale_opts=[\"format\",\"rtl\",\"weekStart\"];e.fn.datepicker.Constructor=n;var l=e.fn.datepicker.dates={en:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"],daysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"],daysMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\",\"Su\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],today:\"Today\",clear:\"Clear\"}},c={modes:[{clsName:\"days\",navFnc:\"Month\",navStep:1},{clsName:\"months\",navFnc:\"FullYear\",navStep:1},{clsName:\"years\",navFnc:\"FullYear\",navStep:10}],isLeapYear:function(e){return e%4==0&&e%100!=0||e%400==0},getDaysInMonth:function(e,t){return[31,c.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\\/:-@\\[\\u3400-\\u9fff-`{-~\\t\\n\\r]+/g,parseFormat:function(e){var t=e.replace(this.validParts,\"\\0\").split(\"\\0\"),n=e.match(this.validParts);if(!t||!t.length||!n||0===n.length)throw new Error(\"Invalid date format.\");return{separators:t,parts:n}},parseDate:function(r,o,a){if(r instanceof Date)return r;if(\"string\"==typeof o&&(o=c.parseFormat(o)),/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(r)){var i,s=/([\\-+]\\d+)([dmwy])/,u=r.match(/([\\-+]\\d+)([dmwy])/g);r=new Date;for(var d=0;d<u.length;d++)switch(h=s.exec(u[d]),i=parseInt(h[1]),h[2]){case\"d\":r.setUTCDate(r.getUTCDate()+i);break;case\"m\":r=n.prototype.moveMonth.call(n.prototype,r,i);break;case\"w\":r.setUTCDate(r.getUTCDate()+7*i);break;case\"y\":r=n.prototype.moveYear.call(n.prototype,r,i)}return t(r.getUTCFullYear(),r.getUTCMonth(),r.getUTCDate(),0,0,0)}u=r&&r.match(this.nonpunctuation)||[],r=new Date;var f,p,h,m={},g=[\"yyyy\",\"yy\",\"M\",\"MM\",\"m\",\"mm\",\"d\",\"dd\"],v={yyyy:function(e,t){return e.setUTCFullYear(t)},yy:function(e,t){return e.setUTCFullYear(2e3+t)},m:function(e,t){for(t-=1;t<0;)t+=12;for(t%=12,e.setUTCMonth(t);e.getUTCMonth()!=t;)e.setUTCDate(e.getUTCDate()-1);return e},d:function(e,t){return e.setUTCDate(t)}};v.M=v.MM=v.mm=v.m,v.dd=v.d,r=t(r.getFullYear(),r.getMonth(),r.getDate(),0,0,0);var b=o.parts.slice();if(u.length!=b.length&&(b=e(b).filter(function(t,n){return-1!==e.inArray(n,g)}).toArray()),u.length==b.length){d=0;for(var y=b.length;d<y;d++){if(f=parseInt(u[d],10),h=b[d],isNaN(f))switch(h){case\"MM\":p=e(l[a].months).filter(function(){var e=this.slice(0,u[d].length);return e==u[d].slice(0,e.length)}),f=e.inArray(p[0],l[a].months)+1;break;case\"M\":p=e(l[a].monthsShort).filter(function(){var e=this.slice(0,u[d].length);return e==u[d].slice(0,e.length)}),f=e.inArray(p[0],l[a].monthsShort)+1}m[h]=f}var w;for(d=0;d<g.length;d++)(w=g[d])in m&&!isNaN(m[w])&&v[w](r,m[w])}return r},formatDate:function(t,n,r){\"string\"==typeof n&&(n=c.parseFormat(n));var o={d:t.getUTCDate(),D:l[r].daysShort[t.getUTCDay()],DD:l[r].days[t.getUTCDay()],m:t.getUTCMonth()+1,M:l[r].monthsShort[t.getUTCMonth()],MM:l[r].months[t.getUTCMonth()],yy:t.getUTCFullYear().toString().substring(2),yyyy:t.getUTCFullYear()};o.dd=(o.d<10?\"0\":\"\")+o.d,o.mm=(o.m<10?\"0\":\"\")+o.m;t=[];for(var a=e.extend([],n.separators),i=0,s=n.parts.length;i<=s;i++)a.length&&t.push(a.shift()),t.push(o[n.parts[i]]);return t.join(\"\")},headTemplate:'<thead><tr><th class=\"prev\"><i class=\"icon-arrow-left\"/></th><th colspan=\"5\" class=\"datepicker-switch\"></th><th class=\"next\"><i class=\"icon-arrow-right\"/></th></tr></thead>',contTemplate:'<tbody><tr><td colspan=\"7\"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan=\"7\" class=\"today\"></th></tr><tr><th colspan=\"7\" class=\"clear\"></th></tr></tfoot>'};c.template='<div class=\"datepicker\"><div class=\"datepicker-days\"><table class=\" table-condensed\">'+c.headTemplate+\"<tbody></tbody>\"+c.footTemplate+'</table></div><div class=\"datepicker-months\"><table class=\"table-condensed\">'+c.headTemplate+c.contTemplate+c.footTemplate+'</table></div><div class=\"datepicker-years\"><table class=\"table-condensed\">'+c.headTemplate+c.contTemplate+c.footTemplate+\"</table></div></div>\",e.fn.datepicker.DPGlobal=c,e.fn.datepicker.noConflict=function(){return e.fn.datepicker=a,this},e(document).on(\"focus.datepicker.data-api click.datepicker.data-api\",'[data-provide=\"datepicker\"]',function(t){var n=e(this);n.data(\"datepicker\")||(t.preventDefault(),i.call(n,\"show\"))}),e(function(){i.call(e('[data-provide=\"datepicker-inline\"]'))})}(window.jQuery),function(e){\"use strict\";e.fn.bdatepicker=e.fn.datepicker.noConflict(),e.fn.datepicker||(e.fn.datepicker=e.fn.bdatepicker);var t=function e(t){this.init(\"date\",t,e.defaults),this.initPicker(t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.abstractinput),e.extend(t.prototype,{initPicker:function(t,n){this.options.viewformat||(this.options.viewformat=this.options.format),t.datepicker=e.fn.editableutils.tryParseJson(t.datepicker,!0),this.options.datepicker=e.extend({},n.datepicker,t.datepicker,{format:this.options.viewformat}),this.options.datepicker.language=this.options.datepicker.language||\"en\",this.dpg=e.fn.bdatepicker.DPGlobal,this.parsedFormat=this.dpg.parseFormat(this.options.format),this.parsedViewFormat=this.dpg.parseFormat(this.options.viewformat)},render:function(){this.$input.bdatepicker(this.options.datepicker),this.options.clear&&(this.$clear=e('<a href=\"#\"></a>').html(this.options.clear).click(e.proxy(function(e){e.preventDefault(),e.stopPropagation(),this.clear()},this)),this.$tpl.parent().append(e('<div class=\"editable-clear\">').append(this.$clear)))},value2html:function(e,n){var r=e?this.dpg.formatDate(e,this.parsedViewFormat,this.options.datepicker.language):\"\";t.superclass.value2html.call(this,r,n)},html2value:function(e){return this.parseDate(e,this.parsedViewFormat)},value2str:function(e){return e?this.dpg.formatDate(e,this.parsedFormat,this.options.datepicker.language):\"\"},str2value:function(e){return this.parseDate(e,this.parsedFormat)},value2submit:function(e){return this.value2str(e)},value2input:function(e){this.$input.bdatepicker(\"update\",e)},input2value:function(){return this.$input.data(\"datepicker\").date},activate:function(){},clear:function(){this.$input.data(\"datepicker\").date=null,this.$input.find(\".active\").removeClass(\"active\"),this.options.showbuttons||this.$input.closest(\"form\").submit()},autosubmit:function(){this.$input.on(\"mouseup\",\".day\",function(t){if(!e(t.currentTarget).is(\".old\")&&!e(t.currentTarget).is(\".new\")){var n=e(this).closest(\"form\");setTimeout(function(){n.submit()},200)}})},parseDate:function(e,t){var n=null;return e&&(n=this.dpg.parseDate(e,t,this.options.datepicker.language),\"string\"==typeof e&&e!==this.dpg.formatDate(n,t,this.options.datepicker.language)&&(n=null)),n}}),t.defaults=e.extend({},e.fn.editabletypes.abstractinput.defaults,{tpl:'<div class=\"editable-date well\"></div>',inputclass:null,format:\"yyyy-mm-dd\",viewformat:null,datepicker:{weekStart:0,startView:0,minViewMode:0,autoclose:!1},clear:\"&times; clear\"}),e.fn.editabletypes.date=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"datefield\",t,e.defaults),this.initPicker(t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.date),e.extend(t.prototype,{render:function(){this.$input=this.$tpl.find(\"input\"),this.setClass(),this.setAttr(\"placeholder\"),this.$tpl.bdatepicker(this.options.datepicker),this.$input.off(\"focus keydown\"),this.$input.keyup(e.proxy(function(){this.$tpl.removeData(\"date\"),this.$tpl.bdatepicker(\"update\")},this))},value2input:function(e){this.$input.val(e?this.dpg.formatDate(e,this.parsedViewFormat,this.options.datepicker.language):\"\"),this.$tpl.bdatepicker(\"update\")},input2value:function(){return this.html2value(this.$input.val())},activate:function(){e.fn.editabletypes.text.prototype.activate.call(this)},autosubmit:function(){}}),t.defaults=e.extend({},e.fn.editabletypes.date.defaults,{tpl:'<div class=\"input-append date\"><input type=\"text\"/><span class=\"add-on\"><i class=\"icon-th\"></i></span></div>',inputclass:\"input-small\",datepicker:{weekStart:0,startView:0,minViewMode:0,autoclose:!0}}),e.fn.editabletypes.datefield=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"datetime\",t,e.defaults),this.initPicker(t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.abstractinput),e.extend(t.prototype,{initPicker:function(t,n){this.options.viewformat||(this.options.viewformat=this.options.format),t.datetimepicker=e.fn.editableutils.tryParseJson(t.datetimepicker,!0),this.options.datetimepicker=e.extend({},n.datetimepicker,t.datetimepicker,{format:this.options.viewformat}),this.options.datetimepicker.language=this.options.datetimepicker.language||\"en\",this.dpg=e.fn.datetimepicker.DPGlobal,this.parsedFormat=this.dpg.parseFormat(this.options.format,this.options.formatType),this.parsedViewFormat=this.dpg.parseFormat(this.options.viewformat,this.options.formatType)},render:function(){this.$input.datetimepicker(this.options.datetimepicker),this.$input.on(\"changeMode\",function(t){var n=e(this).closest(\"form\").parent();setTimeout(function(){n.triggerHandler(\"resize\")},0)}),this.options.clear&&(this.$clear=e('<a href=\"#\"></a>').html(this.options.clear).click(e.proxy(function(e){e.preventDefault(),e.stopPropagation(),this.clear()},this)),this.$tpl.parent().append(e('<div class=\"editable-clear\">').append(this.$clear)))},value2html:function(e,n){var r=e?this.dpg.formatDate(this.toUTC(e),this.parsedViewFormat,this.options.datetimepicker.language,this.options.formatType):\"\";if(!n)return r;t.superclass.value2html.call(this,r,n)},html2value:function(e){var t=this.parseDate(e,this.parsedViewFormat);return t?this.fromUTC(t):null},value2str:function(e){return e?this.dpg.formatDate(this.toUTC(e),this.parsedFormat,this.options.datetimepicker.language,this.options.formatType):\"\"},str2value:function(e){var t=this.parseDate(e,this.parsedFormat);return t?this.fromUTC(t):null},value2submit:function(e){return this.value2str(e)},value2input:function(e){e&&this.$input.data(\"datetimepicker\").setDate(e)},input2value:function(){var e=this.$input.data(\"datetimepicker\");return e.date?e.getDate():null},activate:function(){},clear:function(){this.$input.data(\"datetimepicker\").date=null,this.$input.find(\".active\").removeClass(\"active\"),this.options.showbuttons||this.$input.closest(\"form\").submit()},autosubmit:function(){this.$input.on(\"mouseup\",\".minute\",function(t){var n=e(this).closest(\"form\");setTimeout(function(){n.submit()},200)})},toUTC:function(e){return e?new Date(e.valueOf()-6e4*e.getTimezoneOffset()):e},fromUTC:function(e){return e?new Date(e.valueOf()+6e4*e.getTimezoneOffset()):e},parseDate:function(e,t){var n=null;return e&&(n=this.dpg.parseDate(e,t,this.options.datetimepicker.language,this.options.formatType),\"string\"==typeof e&&e!==this.dpg.formatDate(n,t,this.options.datetimepicker.language,this.options.formatType)&&(n=null)),n}}),t.defaults=e.extend({},e.fn.editabletypes.abstractinput.defaults,{tpl:'<div class=\"editable-date well\"></div>',inputclass:null,format:\"yyyy-mm-dd hh:ii\",formatType:\"standard\",viewformat:null,datetimepicker:{todayHighlight:!1,autoclose:!1},clear:\"&times; clear\"}),e.fn.editabletypes.datetime=t}(window.jQuery),function(e){\"use strict\";var t=function e(t){this.init(\"datetimefield\",t,e.defaults),this.initPicker(t,e.defaults)};e.fn.editableutils.inherit(t,e.fn.editabletypes.datetime),e.extend(t.prototype,{render:function(){this.$input=this.$tpl.find(\"input\"),this.setClass(),this.setAttr(\"placeholder\"),this.$tpl.datetimepicker(this.options.datetimepicker),this.$input.off(\"focus keydown\"),this.$input.keyup(e.proxy(function(){this.$tpl.removeData(\"date\"),this.$tpl.datetimepicker(\"update\")},this))},value2input:function(e){this.$input.val(this.value2html(e)),this.$tpl.datetimepicker(\"update\")},input2value:function(){return this.html2value(this.$input.val())},activate:function(){e.fn.editabletypes.text.prototype.activate.call(this)},autosubmit:function(){}}),t.defaults=e.extend({},e.fn.editabletypes.datetime.defaults,{tpl:'<div class=\"input-append date\"><input type=\"text\"/><span class=\"add-on\"><i class=\"icon-th\"></i></span></div>',inputclass:\"input-medium\",datetimepicker:{todayHighlight:!1,autoclose:!0}}),e.fn.editabletypes.datetimefield=t}(window.jQuery)},function(e,t){!function(e,t){\"use strict\";var n;void 0!==e.rails&&e.error(\"jquery-ujs has already been loaded!\");var r=e(document);e.rails=n={linkClickSelector:\"a[data-confirm], a[data-method], a[data-remote], a[data-disable-with], a[data-disable]\",buttonClickSelector:\"button[data-remote]:not(form button), button[data-confirm]:not(form button)\",inputChangeSelector:\"select[data-remote], input[data-remote], textarea[data-remote]\",formSubmitSelector:\"form\",formInputClickSelector:\"form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\",disableSelector:\"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\",enableSelector:\"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\",requiredInputSelector:\"input[name][required]:not([disabled]),textarea[name][required]:not([disabled])\",fileInputSelector:\"input[type=file]\",linkDisableSelector:\"a[data-disable-with], a[data-disable]\",buttonDisableSelector:\"button[data-remote][data-disable-with], button[data-remote][data-disable]\",csrfToken:function(){return e(\"meta[name=csrf-token]\").attr(\"content\")},csrfParam:function(){return e(\"meta[name=csrf-param]\").attr(\"content\")},CSRFProtection:function(e){var t=n.csrfToken();t&&e.setRequestHeader(\"X-CSRF-Token\",t)},refreshCSRFTokens:function(){e('form input[name=\"'+n.csrfParam()+'\"]').val(n.csrfToken())},fire:function(t,n,r){var o=e.Event(n);return t.trigger(o,r),!1!==o.result},confirm:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e){return confirm(e)}),ajax:function(t){return e.ajax(t)},href:function(e){return e[0].href},isRemote:function(e){return void 0!==e.data(\"remote\")&&!1!==e.data(\"remote\")},handleRemote:function(t){var r,o,a,i,s,u;if(n.fire(t,\"ajax:before\")){if(i=t.data(\"with-credentials\")||null,s=t.data(\"type\")||e.ajaxSettings&&e.ajaxSettings.dataType,t.is(\"form\")){r=t.attr(\"method\"),o=t.attr(\"action\"),a=t.serializeArray();var l=t.data(\"ujs:submit-button\");l&&(a.push(l),t.data(\"ujs:submit-button\",null))}else t.is(n.inputChangeSelector)?(r=t.data(\"method\"),o=t.data(\"url\"),a=t.serialize(),t.data(\"params\")&&(a=a+\"&\"+t.data(\"params\"))):t.is(n.buttonClickSelector)?(r=t.data(\"method\")||\"get\",o=t.data(\"url\"),a=t.serialize(),t.data(\"params\")&&(a=a+\"&\"+t.data(\"params\"))):(r=t.data(\"method\"),o=n.href(t),a=t.data(\"params\")||null);return u={type:r||\"GET\",data:a,dataType:s,beforeSend:function(e,r){if(void 0===r.dataType&&e.setRequestHeader(\"accept\",\"*/*;q=0.5, \"+r.accepts.script),!n.fire(t,\"ajax:beforeSend\",[e,r]))return!1;t.trigger(\"ajax:send\",e)},success:function(e,n,r){t.trigger(\"ajax:success\",[e,n,r])},complete:function(e,n){t.trigger(\"ajax:complete\",[e,n])},error:function(e,n,r){t.trigger(\"ajax:error\",[e,n,r])},crossDomain:n.isCrossDomain(o)},i&&(u.xhrFields={withCredentials:i}),o&&(u.url=o),n.ajax(u)}return!1},isCrossDomain:function(e){var t=document.createElement(\"a\");t.href=location.href;var n=document.createElement(\"a\");try{return n.href=e,n.href=n.href,!n.protocol||!n.host||t.protocol+\"//\"+t.host!=n.protocol+\"//\"+n.host}catch(e){return!0}},handleMethod:function(t){var r=n.href(t),o=t.data(\"method\"),a=t.attr(\"target\"),i=n.csrfToken(),s=n.csrfParam(),u=e('<form method=\"post\" action=\"'+r+'\"></form>'),l='<input name=\"_method\" value=\"'+o+'\" type=\"hidden\" />';void 0===s||void 0===i||n.isCrossDomain(r)||(l+='<input name=\"'+s+'\" value=\"'+i+'\" type=\"hidden\" />'),a&&u.attr(\"target\",a),u.hide().append(l).appendTo(\"body\"),u.submit()},formElements:function(t,n){return t.is(\"form\")?e(t[0].elements).filter(n):t.find(n)},disableFormElements:function(t){n.formElements(t,n.disableSelector).each(function(){n.disableFormElement(e(this))})},disableFormElement:function(e){var t,n;t=e.is(\"button\")?\"html\":\"val\",n=e.data(\"disable-with\"),e.data(\"ujs:enable-with\",e[t]()),void 0!==n&&e[t](n),e.prop(\"disabled\",!0)},enableFormElements:function(t){n.formElements(t,n.enableSelector).each(function(){n.enableFormElement(e(this))})},enableFormElement:function(e){var t=e.is(\"button\")?\"html\":\"val\";e.data(\"ujs:enable-with\")&&e[t](e.data(\"ujs:enable-with\")),e.prop(\"disabled\",!1)},allowAction:function(e){var t,r=e.data(\"confirm\"),o=!1;if(!r)return!0;if(n.fire(e,\"confirm\")){try{o=n.confirm(r)}catch(e){(console.error||console.log).call(console,e.stack||e)}t=n.fire(e,\"confirm:complete\",[o])}return o&&t},blankInputs:function(t,n,r){var o,a=e(),i=n||\"input,textarea\",s=t.find(i);return s.each(function(){if(o=e(this),(o.is(\"input[type=checkbox],input[type=radio]\")?o.is(\":checked\"):!!o.val())===r){if(o.is(\"input[type=radio]\")&&s.filter('input[type=radio]:checked[name=\"'+o.attr(\"name\")+'\"]').length)return!0;a=a.add(o)}}),!!a.length&&a},nonBlankInputs:function(e,t){return n.blankInputs(e,t,!0)},stopEverything:function(t){return e(t.target).trigger(\"ujs:everythingStopped\"),t.stopImmediatePropagation(),!1},disableElement:function(e){var t=e.data(\"disable-with\");e.data(\"ujs:enable-with\",e.html()),void 0!==t&&e.html(t),e.bind(\"click.railsDisable\",function(e){return n.stopEverything(e)})},enableElement:function(e){void 0!==e.data(\"ujs:enable-with\")&&(e.html(e.data(\"ujs:enable-with\")),e.removeData(\"ujs:enable-with\")),e.unbind(\"click.railsDisable\")}},n.fire(r,\"rails:attachBindings\")&&(e.ajaxPrefilter(function(e,t,r){e.crossDomain||n.CSRFProtection(r)}),e(window).on(\"pageshow.rails\",function(){e(e.rails.enableSelector).each(function(){var t=e(this);t.data(\"ujs:enable-with\")&&e.rails.enableFormElement(t)}),e(e.rails.linkDisableSelector).each(function(){var t=e(this);t.data(\"ujs:enable-with\")&&e.rails.enableElement(t)})}),r.delegate(n.linkDisableSelector,\"ajax:complete\",function(){n.enableElement(e(this))}),r.delegate(n.buttonDisableSelector,\"ajax:complete\",function(){n.enableFormElement(e(this))}),r.delegate(n.linkClickSelector,\"click.rails\",function(t){var r=e(this),o=r.data(\"method\"),a=r.data(\"params\"),i=t.metaKey||t.ctrlKey;if(!n.allowAction(r))return n.stopEverything(t);if(!i&&r.is(n.linkDisableSelector)&&n.disableElement(r),n.isRemote(r)){if(i&&(!o||\"GET\"===o)&&!a)return!0;var s=n.handleRemote(r);return!1===s?n.enableElement(r):s.fail(function(){n.enableElement(r)}),!1}return o?(n.handleMethod(r),!1):void 0}),r.delegate(n.buttonClickSelector,\"click.rails\",function(t){var r=e(this);if(!n.allowAction(r)||!n.isRemote(r))return n.stopEverything(t);r.is(n.buttonDisableSelector)&&n.disableFormElement(r);var o=n.handleRemote(r);return!1===o?n.enableFormElement(r):o.fail(function(){n.enableFormElement(r)}),!1}),r.delegate(n.inputChangeSelector,\"change.rails\",function(t){var r=e(this);return n.allowAction(r)&&n.isRemote(r)?(n.handleRemote(r),!1):n.stopEverything(t)}),r.delegate(n.formSubmitSelector,\"submit.rails\",function(t){var r,o,a=e(this),i=n.isRemote(a);if(!n.allowAction(a))return n.stopEverything(t);if(void 0===a.attr(\"novalidate\")&&(r=n.blankInputs(a,n.requiredInputSelector,!1))&&n.fire(a,\"ajax:aborted:required\",[r]))return n.stopEverything(t);if(i){if(o=n.nonBlankInputs(a,n.fileInputSelector)){setTimeout(function(){n.disableFormElements(a)},13);var s=n.fire(a,\"ajax:aborted:file\",[o]);return s||setTimeout(function(){n.enableFormElements(a)},13),s}return n.handleRemote(a),!1}setTimeout(function(){n.disableFormElements(a)},13)}),r.delegate(n.formInputClickSelector,\"click.rails\",function(t){var r=e(this);if(!n.allowAction(r))return n.stopEverything(t);var o=r.attr(\"name\"),a=o?{name:o,value:r.val()}:null;r.closest(\"form\").data(\"ujs:submit-button\",a)}),r.delegate(n.formSubmitSelector,\"ajax:send.rails\",function(t){this===t.target&&n.disableFormElements(e(this))}),r.delegate(n.formSubmitSelector,\"ajax:complete.rails\",function(t){this===t.target&&n.enableFormElements(e(this))}),e(function(){n.refreshCSRFTokens()}))}(jQuery)},function(e,t){\"undefined\"==typeof window||window.InflectionJS||(window.InflectionJS=null),InflectionJS={uncountable_words:[\"equipment\",\"information\",\"rice\",\"money\",\"species\",\"series\",\"fish\",\"sheep\",\"moose\",\"deer\",\"news\"],plural_rules:[[new RegExp(\"(m)an$\",\"gi\"),\"$1en\"],[new RegExp(\"(pe)rson$\",\"gi\"),\"$1ople\"],[new RegExp(\"(child)$\",\"gi\"),\"$1ren\"],[new RegExp(\"^(ox)$\",\"gi\"),\"$1en\"],[new RegExp(\"(ax|test)is$\",\"gi\"),\"$1es\"],[new RegExp(\"(octop|vir)us$\",\"gi\"),\"$1i\"],[new RegExp(\"(alias|status)$\",\"gi\"),\"$1es\"],[new RegExp(\"(bu)s$\",\"gi\"),\"$1ses\"],[new RegExp(\"(buffal|tomat|potat)o$\",\"gi\"),\"$1oes\"],[new RegExp(\"([ti])um$\",\"gi\"),\"$1a\"],[new RegExp(\"sis$\",\"gi\"),\"ses\"],[new RegExp(\"(?:([^f])fe|([lr])f)$\",\"gi\"),\"$1$2ves\"],[new RegExp(\"(hive)$\",\"gi\"),\"$1s\"],[new RegExp(\"([^aeiouy]|qu)y$\",\"gi\"),\"$1ies\"],[new RegExp(\"(x|ch|ss|sh)$\",\"gi\"),\"$1es\"],[new RegExp(\"(matr|vert|ind)ix|ex$\",\"gi\"),\"$1ices\"],[new RegExp(\"([m|l])ouse$\",\"gi\"),\"$1ice\"],[new RegExp(\"(quiz)$\",\"gi\"),\"$1zes\"],[new RegExp(\"s$\",\"gi\"),\"s\"],[new RegExp(\"$\",\"gi\"),\"s\"]],singular_rules:[[new RegExp(\"(m)en$\",\"gi\"),\"$1an\"],[new RegExp(\"(pe)ople$\",\"gi\"),\"$1rson\"],[new RegExp(\"(child)ren$\",\"gi\"),\"$1\"],[new RegExp(\"([ti])a$\",\"gi\"),\"$1um\"],[new RegExp(\"((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$\",\"gi\"),\"$1$2sis\"],[new RegExp(\"(hive)s$\",\"gi\"),\"$1\"],[new RegExp(\"(tive)s$\",\"gi\"),\"$1\"],[new RegExp(\"(curve)s$\",\"gi\"),\"$1\"],[new RegExp(\"([lr])ves$\",\"gi\"),\"$1f\"],[new RegExp(\"([^fo])ves$\",\"gi\"),\"$1fe\"],[new RegExp(\"([^aeiouy]|qu)ies$\",\"gi\"),\"$1y\"],[new RegExp(\"(s)eries$\",\"gi\"),\"$1eries\"],[new RegExp(\"(m)ovies$\",\"gi\"),\"$1ovie\"],[new RegExp(\"(x|ch|ss|sh)es$\",\"gi\"),\"$1\"],[new RegExp(\"([m|l])ice$\",\"gi\"),\"$1ouse\"],[new RegExp(\"(bus)es$\",\"gi\"),\"$1\"],[new RegExp(\"(o)es$\",\"gi\"),\"$1\"],[new RegExp(\"(shoe)s$\",\"gi\"),\"$1\"],[new RegExp(\"(cris|ax|test)es$\",\"gi\"),\"$1is\"],[new RegExp(\"(octop|vir)i$\",\"gi\"),\"$1us\"],[new RegExp(\"(alias|status)es$\",\"gi\"),\"$1\"],[new RegExp(\"^(ox)en\",\"gi\"),\"$1\"],[new RegExp(\"(vert|ind)ices$\",\"gi\"),\"$1ex\"],[new RegExp(\"(matr)ices$\",\"gi\"),\"$1ix\"],[new RegExp(\"(quiz)zes$\",\"gi\"),\"$1\"],[new RegExp(\"s$\",\"gi\"),\"\"]],non_titlecased_words:[\"and\",\"or\",\"nor\",\"a\",\"an\",\"the\",\"so\",\"but\",\"to\",\"of\",\"at\",\"by\",\"from\",\"into\",\"on\",\"onto\",\"off\",\"out\",\"in\",\"over\",\"with\",\"for\"],id_suffix:new RegExp(\"(_ids|_id)$\",\"g\"),underbar:new RegExp(\"_\",\"g\"),space_or_underbar:new RegExp(\"[ _]\",\"g\"),uppercase:new RegExp(\"([A-Z])\",\"g\"),underbar_prefix:new RegExp(\"^_\"),apply_rules:function(e,t,n,r){if(r)e=r;else if(!(n.indexOf(e.toLowerCase())>-1))for(var o=0;o<t.length;o++)if(e.match(t[o][0])){e=e.replace(t[o][0],t[o][1]);break}return\"\"+e}},Array.prototype.indexOf||(Array.prototype.indexOf=function(e,t,n){t||(t=-1);for(var r=-1,o=t;o<this.length;o++)if(this[o]===e||n&&n(this[o],e)){r=o;break}return r}),String.prototype._uncountable_words||(String.prototype._uncountable_words=InflectionJS.uncountable_words),String.prototype._plural_rules||(String.prototype._plural_rules=InflectionJS.plural_rules),String.prototype._singular_rules||(String.prototype._singular_rules=InflectionJS.singular_rules),String.prototype._non_titlecased_words||(String.prototype._non_titlecased_words=InflectionJS.non_titlecased_words),String.prototype.pluralize||(String.prototype.pluralize=function(e){return InflectionJS.apply_rules(this,this._plural_rules,this._uncountable_words,e)}),String.prototype.singularize||(String.prototype.singularize=function(e){return InflectionJS.apply_rules(this,this._singular_rules,this._uncountable_words,e)}),String.prototype.camelize||(String.prototype.camelize=function(e){for(var t=this.toLowerCase(),n=t.split(\"/\"),r=0;r<n.length;r++){for(var o=n[r].split(\"_\"),a=e&&r+1===n.length?1:0;a<o.length;a++)o[a]=o[a].charAt(0).toUpperCase()+o[a].substring(1);n[r]=o.join(\"\")}return\"\"+(t=n.join(\"::\"))}),String.prototype.underscore||(String.prototype.underscore=function(){for(var e=this,t=e.split(\"::\"),n=0;n<t.length;n++)t[n]=t[n].replace(InflectionJS.uppercase,\"_$1\"),t[n]=t[n].replace(InflectionJS.underbar_prefix,\"\");return\"\"+(e=t.join(\"/\").toLowerCase())}),String.prototype.humanize||(String.prototype.humanize=function(e){var t=this.toLowerCase();return t=(t=t.replace(InflectionJS.id_suffix,\"\")).replace(InflectionJS.underbar,\" \"),e||(t=t.capitalize()),\"\"+t}),String.prototype.capitalize||(String.prototype.capitalize=function(){var e=this.toLowerCase();return\"\"+(e=e.substring(0,1).toUpperCase()+e.substring(1))}),String.prototype.dasherize||(String.prototype.dasherize=function(){var e=this;return\"\"+(e=e.replace(InflectionJS.space_or_underbar,\"-\"))}),String.prototype.titleize||(String.prototype.titleize=function(){for(var e=this.toLowerCase(),t=(e=e.replace(InflectionJS.underbar,\" \")).split(\" \"),n=0;n<t.length;n++){for(var r=t[n].split(\"-\"),o=0;o<r.length;o++)this._non_titlecased_words.indexOf(r[o].toLowerCase())<0&&(r[o]=r[o].capitalize());t[n]=r.join(\"-\")}return\"\"+(e=(e=t.join(\" \")).substring(0,1).toUpperCase()+e.substring(1))}),String.prototype.demodulize||(String.prototype.demodulize=function(){var e=this,t=e.split(\"::\");return\"\"+(e=t[t.length-1])}),String.prototype.tableize||(String.prototype.tableize=function(){var e=this;return\"\"+(e=e.underscore().pluralize())}),String.prototype.classify||(String.prototype.classify=function(){var e=this;return\"\"+(e=e.camelize().singularize())}),String.prototype.foreign_key||(String.prototype.foreign_key=function(e){var t=this;return\"\"+(t=t.demodulize().underscore()+(e?\"\":\"_\")+\"id\")}),String.prototype.ordinalize||(String.prototype.ordinalize=function(){for(var e=this,t=e.split(\" \"),n=0;n<t.length;n++){var r=parseInt(t[n],10);if(!isNaN(r)){var o=t[n].substring(t[n].length-2),a=t[n].substring(t[n].length-1),i=\"th\";\"11\"!=o&&\"12\"!=o&&\"13\"!=o&&(\"1\"===a?i=\"st\":\"2\"===a?i=\"nd\":\"3\"===a&&(i=\"rd\")),t[n]+=i}}return\"\"+(e=t.join(\" \"))})},function(e,t){!function(e){\"use strict\";var t=/:count\\s+/;function n(e,t,n){return 0===t.toLocaleLowerCase().indexOf(n)&&0!==e.toLocaleLowerCase().indexOf(n)}function r(e,t){return e.length>t?(r=e[t],-1!==(i=r.indexOf(\" \"))&&(r=n(o=r.substr(0,i),a=r.substr(i+1),\"од\")||n(o,a,\"дв\")||n(o,a,\"пя\")?o:a),r):\"\";var r,o,a,i}function o(e){if(void 0!==document.selection)return e.focus(),document.selection.createRange().text;if(void 0!==e.selectionStart){var t=e.selectionStart,n=e.selectionEnd;return e.value.substring(t,n)}}String.prototype.toCapitalCase=function(){return this.toLowerCase().replace(/(?:^|\\s)\\S/g,function(e){return e.toUpperCase()})},String.prototype.toLocaleCapitalCase=function(){return this.toLocaleLowerCase().replace(/(?:^|\\s)\\S/g,function(e){return e.toLocaleUpperCase()})},String.prototype.toLocaleProperCase=function(){return this.toLocaleLowerCase().replace(/(?:^)\\S/,function(e){return e.toLocaleUpperCase()})},String.prototype.toLocaleProperCaseOrLowerCase=function(){return this.substr(0,1)+this.substr(1).toLocaleLowerCase()},e.fn.OldScriptHooks.xtranslateService=function(t,n,r,o){var a={200:\"Operation completed successfully.\",401:\"Invalid API key.\",402:\"This API key has been blocked.\",403:\"You have reached the daily limit for requests (including calls of the detect method).\",404:\"You have reached the daily limit for the volume of translated text (including calls of the detect method).\",413:\"The text size exceeds the maximum.\",422:\"The text could not be translated.\",501:\"The specified translation direction is not supported.\"},i=e.ajax({dataType:\"json\",url:\"https://translate.yandex.net/api/v1.5/tr.json/translate\",data:{key:e.fn.OldScriptHooks.YANDEX_TRANSLATOR_KEY,lang:t+\"-\"+r,text:n},xhrFields:{withCredentials:!1},success:function(e){200===e.code?o(e.text.join(\"\\n\")):window.console.log(\"Yandex API: \"+e.code+\": \"+a[e.code]+\"\\n\")}});i.done(function(){}),i.fail(function(){})},e.fn.OldScriptHooks.xtranslateText=function(e,n,o,a,i){var s,u,l,c,d=o,f=!1,p=!1;-1!==(s=o.indexOf(\"|\"))&&(u=o.substr(0,s),l=o.substr(s+1),u.match(t)&&(u=u.replace(t,\"\"),f=!0),l.match(t)&&(l=l.replace(t,\"\"),p=!0),d=\"one \"+u+\"\\ntwo \"+l+\"\\nfive \"+l,c=!0);for(var h,m=0,g=[],v=/\\:([a-zA-Z0-9_-]*)(?=[^a-zA-Z0-9_-]|$)/g,b=\"\",y=0;null!==(h=v.exec(d));){var w=h[1];(y=g.indexOf(w)+1)||(g.push(w),y=g.length),b+=d.substr(m,h.index-m),b+=\"{{\"+y+\"}}\",m=v.lastIndex}y&&(d=b+=d.substr(m,d.length)),e(n,d,a,function(e){var t,n,o,s;if(y&&(e=e.replace(/\\{\\{[0-9]*\\}\\}/g,function(e){return\":\"+g[parseInt(e.substr(2,e.length-4))-1]})),c){\"|\"===(s=e.replace(/$\\s*/gm,\"|\")).substr(s.length-1,1)&&(s=s.substr(0,s.length-1)),t=r(o=e.split(\"\\n\",3),0),n=r(o,1);var u=f?\":count \":\"\",l=p?\":count \":\"\";e=\"ru\"===a?u+t+\"|\"+l+n+\"|\"+l+r(o,2):u+t+\"|\"+l+n}i(e,s)})},e.ajaxPrefilter(function(t){t.crossDomain||(t.headers={\"X-CSRF-TOKEN\":e('meta[name=\"csrf-token\"]').attr(\"content\")})}),e.ajaxSetup({xhrFields:{withCredentials:!0},type:\"POST\"}),e.fn.OldScriptHooks.URL_YANDEX_TRANSLATOR_KEY&&e.ajax({type:\"POST\",url:e.fn.OldScriptHooks.URL_YANDEX_TRANSLATOR_KEY,data:{},success:function(t){\"ok\"===t.status&&(e.fn.OldScriptHooks.YANDEX_TRANSLATOR_KEY=t.yandex_key)},encode:!0}),e.fn.editableContainer.defaults.placement=\"bottom\",e.fn.editableContainer.defaults.onblur=\"submit\",e.fn.editableContainer.defaults.validate=function(t){return function(t){for(var n,r,o,a=/\\b(href=|src=)\\s*(\"|')?([^\"'>]*)(\"|')?/,i=/:string/g,s=e.fn.OldScriptHooks.MISMATCHED_QUOTES_MESSAGE||\"mismatched or missing quotes in :string attribute\",u=[],l=0,c=t,d=t.length;(l<d&&-1!==(n=c.indexOf(\"href=\",l))||-1!==(n=c.indexOf(\"src=\",l)))&&(l=n,r=(c=c.substr(l>0?l-1:0)).match(a));)void 0!==r[2]&&r[2]===r[4]||u.push(s.replace(i,r[0])),l+=r[0].length;if(u.length)return(o=e(\".editableform .editable-error-block\")).length&&window.setTimeout(function(){o.html(c)},50),c=\"<ul><li>\"+u.join(\"</li><li>\")+\"</li></ul>\",\" \"}(t)},e.fn.editableform.template='<form class=\"form-inline editableform\"><div class=\"control-group\"> <div>  <div class=\"editable-buttons\" style=\"display: block\"></div>  <div id=\"x-trans-edit\" class=\"editable-input\"></div>  <div class=\"editable-error-block\"></div> </div></div></form>',e.fn.OldScriptHooks.UpdateXEditButtonTitles=function(){var t=e.fn.OldScriptHooks.TITLE_SAVE_CHANGES||\"Save changes\",n=e.fn.OldScriptHooks.TITLE_CANCEL_CHANGES||\"Cancel changes\",r=e.fn.OldScriptHooks.TITLE_TRANSLATE||\"Translate\",o=e.fn.OldScriptHooks.TITLE_CONVERT_KEY||\"Convert translation key to text\",a=e.fn.OldScriptHooks.TITLE_GENERATE_PLURALS||\"Generate plural forms with :count\",i=e.fn.OldScriptHooks.TITLE_CLEAN_HTML_MARKDOWN||\"Clean HTML markdown\",s=e.fn.OldScriptHooks.TITLE_CAPITALIZE||\"Capitalize text\",u=e.fn.OldScriptHooks.TITLE_LOWERCASE||\"Lowercase text\",l=e.fn.OldScriptHooks.TITLE_CAPITALIZE_FIRST_WORD||\"Capitalize first word\",c=e.fn.OldScriptHooks.TITLE_SIMULATED_COPY||\"Copy text to simulated clipboard (page refresh clears contents)\",d=e.fn.OldScriptHooks.TITLE_SIMULATED_PASTE||\"Paste text from simulated clipboard\",f=e.fn.OldScriptHooks.TITLE_RESET_EDITOR||\"Reset editor contents\",p=e.fn.OldScriptHooks.TITLE_LOAD_LAST||\"Load last published/imported value\";e.fn.editableform.buttons='<button type=\"submit\" title=\"'+t+'\" id=\"x-submit\" class=\"editable-submit btn btn-sm btn-success\"><i class=\"fa fa-check\"/></button>&nbsp;<button type=\"button\" title=\"'+n+'\" id=\"x-cancel\" class=\"editable-cancel btn btn-sm btn-danger\"><i class=\"fa fa-times\"/></button>&nbsp;&nbsp;<button id=\"x-translate\" type=\"button\" title=\"'+r+'\" class=\"editable-translate btn btn-sm btn-warning hidden\"><i class=\"fa fa-share\"/></button><button id=\"x-nodash\" type=\"button\" title=\"'+o+'\" class=\"editable-translate btn btn-sm btn-warning hidden\">❉ <i class=\"fa fa-share\"/> Ab</button>&nbsp;&nbsp;<button id=\"x-plurals\" type=\"button\" title=\"'+a+'\" class=\"editable-translate btn btn-sm btn-warning hidden\">|</i></button><button id=\"x-plurals-count\" type=\"button\" title=\"'+a+'\" class=\"editable-translate btn btn-sm btn-warning hidden\">|:</i></button><button id=\"x-clean-markdown\" type=\"button\" title=\"'+i+'\" class=\"editable-translate btn btn-sm btn-warning hidden\"><i class=\"fa fa-flash\"/></button>&nbsp;&nbsp;<button id=\"x-capitalize\" type=\"button\" title=\"'+s+'\" class=\"editable-translate btn btn-sm btn-info\">ab <i class=\"fa fa-share\"/> Ab</button><button id=\"x-lowercase\" type=\"button\" title=\"'+u+'\" class=\"editable-translate btn btn-sm btn-info\">AB <i class=\"fa fa-share\"/> ab</button><button id=\"x-propcap\" type=\"button\" title=\"'+l+'\" class=\"editable-translate btn btn-sm btn-info\">A B <i class=\"fa fa-share\"/> A b</button>&nbsp;&nbsp;<button id=\"x-copy\" type=\"button\" title=\"'+c+'\" class=\"editable-translate btn btn-sm btn-primary\"><i class=\"fa fa-copy\"/></button><button id=\"x-paste\" type=\"button\" title=\"'+d+'\" class=\"editable-translate btn btn-sm btn-primary\"><i class=\"fa fa-paste\"/></button>&nbsp;&nbsp;<button id=\"x-reset-open\" type=\"button\" title=\"'+f+'\" class=\"editable-translate btn btn-sm btn-success\"><i class=\"fa fa-upload\"/></button><button id=\"x-reset-saved\" type=\"button\" title=\"'+p+'\" class=\"editable-translate btn btn-sm btn-success\"><i class=\"fa fa-newspaper\"/></button><br>&nbsp;'},e.fn.editableform.formElements=function(t){var n=e(t).find(\"+ div.editable-container\");return n.length>0?{elemInput:n.find(\"#x-trans-edit\").first().find(\"textarea.editable-input\").first(),elemError:n.find(\".editable-error-block\").first(),btnTranslate:n.find(\"#x-translate\").first(),btnCapitalize:n.find(\"#x-capitalize\").first(),btnLowercase:n.find(\"#x-lowercase\").first(),btnPlurals:n.find(\"#x-plurals\").first(),btnPluralsCount:n.find(\"#x-plurals-count\").first(),btnPropCap:n.find(\"#x-propcap\").first(),btnNoDash:n.find(\"#x-nodash\").first(),btnCopy:n.find(\"#x-copy\").first(),btnPaste:n.find(\"#x-paste\").first(),btnResetOpen:n.find(\"#x-reset-open\").first(),btnResetSaved:n.find(\"#x-reset-saved\").first(),btnCleanMarkdown:n.find(\"#x-clean-markdown\").first()}:null};var a,i,s,u,l,c=0,d=function(e,t,n){return function(){var r=o(e[0]);r?e.selection(\"replace\",{text:t.apply(r,n)}):e.val(t.apply(e.val(),n)),e.focus()}},f=function(e,t,n){return function(){e.val(t.apply(e.val(),n)),e.focus()}};function p(){var t,n,r=this,o=r.data(\"locale\"),a=r.attr(\"data-url\"),i=r.attr(\"id\"),s=a.lastIndexOf(\"/\"),u=a.substr(s+1);t=i.substr(o.length+1),n=r.editable(\"getValue\",!0),e.fn.OldScriptHooks.GLOBAL_TRANSLATION_CHANGED(u,t,o,n,function(t){var n=t?0:1,o=1-n;r.removeClass(\"status-\"+n).addClass(\"status-\"+o);var a,i=r.closest(\"tr\"),s=i.find(\"a.vsch_editable\");a=0,s.each(function(){\"\"===e(this).editable(\"getValue\",!0)&&a++});var u=s.filter(\".editable-empty\").length;a!==u&&window.console.debug(\"Tmp and Tmp2 disagree\",a,u),a?(i.addClass(\"has-empty-translation\"),a===s.length?i.removeClass(\"has-nonempty-translation\"):i.addClass(\"has-nonempty-translation\")):(i.removeClass(\"has-empty-translation\"),i.addClass(\"has-nonempty-translation\")),s.filter(\".status-1\").length?i.addClass(\"has-changed-translation\"):i.removeClass(\"has-changed-translation\")})}e.fn.vsch_editable=function(n){e.extend({},{},n);if(\"destroy\"===n)return e(\".editing\").removeClass(\"editing\"),void this.each(function(){var t=e(this);t.editable().off(\"hidden\"),t.editable().off(\"shown\"),t.editable(\"destroy\")});this.each(function(){var n=e(this),r=n.offset().top;n.offset().left<500?n.editable({placement:\"right\"}):r<300&&n.editable({placement:\"bottom\"}),n.editable().off(\"hidden\"),n.editable().on(\"hidden.vsch\",function(t,n){\"save\"===n&&p.call(e(this)),--c||e(\".editing\").removeClass(\"editing\")}),n.editable().off(\"shown\"),n.editable().on(\"shown.vsch\",function(n,r){if(e(this).hasClass(\"vsch_editable\")){var p,h,m,g,v,b=e.fn.OldScriptHooks.PRIMARY_LOCALE,y=e.fn.OldScriptHooks.MARKDOWN_KEY_SUFFIX,w=e.fn.OldScriptHooks.YANDEX_TRANSLATOR_KEY,x=e(this).attr(\"data-saved_value\"),_=e(this).attr(\"id\");s=e(this).data(\"locale\"),c++,h=(i=s===b?\"\":b)+_.substr(s.length),p=_.substr(s.length+1),l=e(this).closest(\"tr#\"+p.replace(/\\./g,\"-\")).first(),v=p.replace(/-|_/g,\" \").toCapitalCase();var E=e.fn.editableform.formElements(this);u=E.elemInput,g=u[0].value.trim(),u[0].value=g,void 0!==y&&\"\"!==y&&p.length>y.length&&p.substring(p.length-y.length,p.length)===y?E.btnCleanMarkdown.length&&(E.btnCleanMarkdown.removeClass(\"hidden\"),E.btnCleanMarkdown.on(\"click\",d(u,function(e){for(var t=this.split(\"\\n\"),n=t.length,r=\"\",o=!0,a=0;a<n;a++){var i=t[a],s=!1;if(0===i.trim().length)o?(i=\"\",s=o):(i=\"\\n\",s=!0);else if(s=!1,i.length>2&&\"  \"===i.substring(i.length-2,i.length))i+=\"\\n\";else if((a+1>=n||0===t[a+1].trim().length)&&(i+=\"\\n\"),r.length>0){var u=r.charAt(r.length-1);\"\\n\"!==u&&\" \"!==u&&\" \"!==i.charAt(0)&&(r+=\" \")}r+=i,o=s}return r}))):E.btnPluralsCount.length&&(s!==b&&\"\"===w||(E.btnPluralsCount.removeClass(\"hidden\"),E.btnPluralsCount.on(\"click\",f(u,function(){var e=this;if(-1===e.indexOf(\"|\")){switch(s){case\"ru\":e=this+\"|:count \"+this+\"|:count \"+this;break;case\"en\":e=\"en\"===b?v.singularize()+\"|:count \"+v.pluralize():e.singularize()+\"|:count \"+e.pluralize();break;default:e=this+\"|:count \"+this}return e.toLocaleLowerCase()}var n=e.split(\"|\");return e=n.some(function(e){return e.match(t)})?n.every(function(e){return e.match(t)})?n.map(function(e){return e.replace(t,\"\")}).join(\"|\"):\":count \"+n.map(function(e){return e.replace(t,\"\")}).join(\"|:count \"):n.map(function(e){return e.replace(t,\"\")}).join(\"|:count \")})))),l.length&&(e(\".editing\").removeClass(\"editing\"),l.addClass(\"editing\")),E.btnTranslate.length&&u.length&&\"\"!==w&&\"\"!==i&&(0===(m=l.find(\"#\"+h.replace(/\\./g,\"-\")).first()).length&&(m=l.parent().find(\"#\"+h.replace(/\\./g,\"-\")).first()),m.length&&(a=m.text(),E.btnTranslate.html(i+' <i class=\"fa fa-share\"/> '+s),E.btnTranslate.removeClass(\"hidden\"),E.btnTranslate.on(\"click\",function(t,n,r,o,a){return function(){e.fn.OldScriptHooks.xtranslateText(e.fn.OldScriptHooks.xtranslateService,t,n,r,function(e,t){t&&(a.html(t),a.css(\"display\",\"block\")),o.val(e),o.focus()})}}(i,a,s,u,E.elemError)))),E.btnNoDash.length&&s===b&&(E.btnNoDash.removeClass(\"hidden\"),E.btnNoDash.on(\"click\",f(u,function(){return v}))),E.btnCapitalize.length&&E.btnCapitalize.on(\"click\",function(e,t,n){return function(){var r,a=o(e[0]);a?e.selection(\"replace\",{text:t.apply(a,n)}):-1!==e.val().indexOf(\"|\")?((r=e.val().split(\"|\")).forEach(function(e,r,o){o[r]=t.apply(e,n)}),e.val(r.join(\"|\"))):e.val(t.apply(e.val(),n)),e.focus()}}(u,String.prototype.toLocaleCapitalCase)),E.btnLowercase.length&&E.btnLowercase.on(\"click\",d(u,String.prototype.toLocaleLowerCase)),E.btnPropCap.length&&E.btnPropCap.on(\"click\",d(u,String.prototype.toLocaleProperCase)),E.btnCopy.length&&E.btnCopy.on(\"click\",d(u,function(){return e.fn.OldScriptHooks.CLIP_TEXT=this,this})),E.btnPaste.length&&E.btnPaste.on(\"click\",d(u,function(){return e.fn.OldScriptHooks.CLIP_TEXT})),E.btnResetOpen.length&&E.btnResetOpen.on(\"click\",f(u,function(){return g})),E.btnResetSaved.length&&E.btnResetSaved.on(\"click\",f(u,function(){return x}))}})})},e.fn.vsch_editable.updateTranslationFromXEditable=p}(window.jQuery)},function(e,t){var n,r=[];function o(){for(var e=r.length,t=0;t<e;t++)try{r[t].call()}catch(e){window.console.error(\"unhookTranslationPage for \",r[t],e)}r=[]}(n=window.jQuery).fn.OldScriptHooks.UNHOOK_TRANSLATION_PAGE_EVENTS=o,n.fn.OldScriptHooks.HOOKUP_TRANSLATION_PAGE_EVENTS=function(){var e=n.fn.OldScriptHooks,t=1e3,a=500;o();var i=n(\"a.delete-key\");r.push(function(){return i.off(\"ajax:success\")}),i.on(\"ajax:success\",function(e,t){var r=n(this).closest(\"tr\");r.addClass(\"deleted-translation\"),n(this).addClass(\"hidden\"),r.find(\"a.undelete-key\").first().removeClass(\"hidden\")});var s=n(\"a.undelete-key\");r.push(function(){return s.off(\"ajax:success\")}),s.on(\"ajax:success\",function(e,t){var r=n(this).closest(\"tr\");r.removeClass(\"deleted-translation\"),n(this).addClass(\"hidden\"),r.find(\"a.delete-key\").first().removeClass(\"hidden\")});var u=n(\"#form-keyops\");r.push(function(){return u.off(\"ajax:success\")}),u.on(\"ajax:success\",function(e,t){var r=n(\"#wildcard-keyops-results\").first();r.html(t),r.find(\".vsch_editable\").vsch_editable()});var l=n(\"#translate-current-primary\");r.push(function(){return l.off(\"click\")}),l.on(\"click\",function(){var t=n(\"#current-text\").first()[0].value;e.xtranslateService(e.TRANSLATING_LOCALE,t,e.PRIMARY_LOCALE,function(t){var r=n(\"#primary-text\").first();r.length&&(r.val(t),e.GLOBAL_SETTINGS_CHANGED&&e.GLOBAL_SETTINGS_CHANGED({uiSettings:{yandexPrimaryText:t}}))})});var c=n(\"#translate-primary-current\");function d(e){e.find(\"tr\").removeClass(\"hidden\")}r.push(function(){return c.off(\"click\")}),c.on(\"click\",function(){var t=n(\"#primary-text\").first()[0].value;e.xtranslateService(e.PRIMARY_LOCALE,t,e.TRANSLATING_LOCALE,function(t){var r=n(\"#current-text\").first();r.length&&(r.val(t),e.GLOBAL_SETTINGS_CHANGED&&e.GLOBAL_SETTINGS_CHANGED({uiSettings:{yandexTranslatingText:t}}))})});var f=d,p=\"show-all\",h=null,m=null;function g(r){var o,i,s,u,l,c=n(\"#translations\").find(\"tbody\").first(),d=n(\"#show-matching-text\"),g=n(\"#show-matching-text-label\"),v=\"\";if((r=n(r)).length>0&&(p=r.prop(\"id\")),i=c.find(\"tr\").length,f(c),u=s=i-c.find(\"tr.hidden\").length,r.length>0){var b=r.closest(\"div\");n(\".translation-filter\").removeClass(\"has-success has-error has-feedback has-highlight\"),\"show-all\"!==p&&(s>0?s===i?b.addClass(\"has-feedback\"):b.addClass(\"has-highlight\"):b.addClass(\"has-error\"))}if(0===d.length)g.html(\"&nbsp;\"),g.addClass(\"hidden\");else{v=d[0].value.trim();var y=!1;m&&(window.clearTimeout(m),m=null);try{o=new RegExp(v,\"i\"),g.html(\"&nbsp;\"),g.addClass(\"hidden\")}catch(e){o=new RegExp(\"\"),g.text(e.message),y=!0}!function(e,t){e.find(\"tr\").each(function(){if(!n(this).hasClass(\"hidden\")){var e=n(this).find(\"td.key\").first();if(e.length>0){var r=e[0].innerText;t.exec(r)||n(this).addClass(\"hidden\")}}})}(c,o),u=i-c.find(\"tr.hidden\").length;var w=d.parent(\"div\");w.removeClass(\"has-error has-success has-feedback has-highlight\"),d.removeClass(\"bg-danger bg-success bg-highlight regex-error\"),y?(w.addClass(\"has-error\"),d.addClass(\"regex-error\"),m=window.setTimeout(function(){m=null,g.removeClass(\"hidden\")},t)):v.length>0&&s>0&&(0===u?(w.addClass(\"has-error\"),d.addClass(\"bg-danger\")):u<s&&(w.addClass(\"has-highlight\"),d.addClass(\"bg-highlight\")))}if(function(t){h&&(window.clearTimeout(h),h=null),e.TRANS_FILTERS=t,h=window.setTimeout(function(){h=null,n.ajax({type:\"POST\",url:e.URL_TRANSLATOR_FILTERS,data:t,success:function(e){e.status},encode:!0})},a)}({filter:p,regex:v}),(l=n(\"#key-filter\").first()).length>0){var x=\"\";u!==s&&(x+=u+\"/\"),s!==i&&(x+=s+\"/\"),x+=i,l.removeClass(\"have-filtered\"),u!==i&&l.addClass(\"have-filtered\"),l[0].innerHTML=x}}r.push(function(){h&&window.clearTimeout(h),m&&window.clearTimeout(m)});var v=n(\"#show-all\");r.push(function(){return v.off(\"click\")}),v.on(\"click\",function(e){f=d,g(this)});var b=n(\"#show-new\");r.push(function(){return b.off(\"click\")}),b.on(\"click\",function(e){f=function(e){e.find(\"tr\").removeClass(\"hidden\"),e.find(\"tr.has-nonempty-translation\").addClass(\"hidden\")},g(this)});var y=n(\"#show-need-attention\");r.push(function(){return y.off(\"click\")}),y.on(\"click\",function(e){f=function(e){e.find(\"tr\").addClass(\"hidden\"),e.find(\"tr.has-empty-translation\").removeClass(\"hidden\"),e.find(\"tr.deleted-translation\").removeClass(\"hidden\"),e.find(\"tr.has-changed-translation\").removeClass(\"hidden\")},g(this)});var w=n(\"#show-unpublished\");r.push(function(){return w.off(\"click\")}),w.on(\"click\",function(e){f=function(e){e.find(\"tr\").addClass(\"hidden\"),e.find(\"tr.deleted-translation\").removeClass(\"hidden\"),e.find(\"tr.has-changed-translation\").removeClass(\"hidden\")},g(this)});var x=n(\"#show-empty\");r.push(function(){return x.off(\"click\")}),x.on(\"click\",function(e){f=function(e){e.find(\"tr\").addClass(\"hidden\"),e.find(\"tr.has-empty-translation\").removeClass(\"hidden\")},g(this)});var _=n(\"#show-nonempty\");r.push(function(){return _.off(\"click\")}),_.on(\"click\",function(e){f=function(e){e.find(\"tr\").addClass(\"hidden\"),e.find(\"tr.has-nonempty-translation\").removeClass(\"hidden\")},g(this)});var E=n(\"#show-used\");r.push(function(){return E.off(\"click\")}),E.on(\"click\",function(e){f=function(e){e.find(\"tr\").addClass(\"hidden\"),e.find(\"tr.has-used-translation\").removeClass(\"hidden\")},g(this)});var k=n(\"#show-deleted\");r.push(function(){return k.off(\"click\")}),k.on(\"click\",function(e){f=function(e){e.find(\"tr\").addClass(\"hidden\"),e.find(\"tr.deleted-translation\").removeClass(\"hidden\")},g(this)});var S=n(\"#show-changed\");r.push(function(){return S.off(\"click\")}),S.on(\"click\",function(e){f=function(e){e.find(\"tr\").addClass(\"hidden\"),e.find(\"tr.has-changed-translation\").removeClass(\"hidden\")},g(this)});var C=null;r.push(function(){return C&&window.clearTimeout(C)});var O=n(\"#show-matching-text\");r.push(function(){return O.off(\"keyup change\")}),O.on(\"keyup change\",function(){C&&(window.clearTimeout(C),C=null),C=window.setTimeout(function(){C=null,g()},100)});var T=n(\"#show-matching-clear\");function P(e,t,r){if(e.length){var o,a,i=t.text(),s=t.data(\"disable-with\");o=e.length,a=0;var u,l=function(e){r(e.srcText,function(r,o){if(\"\"!==r){var a=n.ajax({type:\"POST\",url:e.dataUrl,data:{name:e.dataName,value:r},success:function(o){\"ok\"===o.status?(e.dstElem.removeClass(\"editable-empty status-0\"),e.dstElem.text(r),e.dstElem.editable(\"setValue\",r,!1),e.dstElem.editable(\"getValue\",!0),n.fn.vsch_editable.updateTranslationFromXEditable.call(e.dstElem)):(t.removeAttr(\"disabled\"),t.text(i))},encode:!0});a.done(function(){u()}),a.fail(function(){t.removeAttr(\"disabled\"),t.text(i)})}else t.removeAttr(\"disabled\"),t.text(i)})};u=function(){e.length?(a++,l(e.pop()),t.attr(\"disabled\",\"disabled\"),t.text(s+\" \"+a+\" / \"+o)):(t.removeAttr(\"disabled\"),t.text(i))};for(var c=0;c<5;c++)u()}}r.push(function(){return T.off(\"click\")}),T.on(\"click\",function(){O.length&&(O[0].value=\"\",O.focus(),g())}),n(\".btn.auto-translate\").each(function(){var t=n(this).data(\"trans\"),o=n(this).data(\"locale\"),a=n(this);r.push(function(){return a.off(\"click\")}),a.on(\"click\",function(r){r.preventDefault(),r.stopPropagation();var i=[];n(\".auto-translatable-\"+o).each(function(){var e=n(this).parent().find(\".vsch_editable\");if(e.length>1){var r=n(e[0]),o=n(e[t]);!e.closest(\"tr\").hasClass(\"hidden\")&&o.length&&r.length&&o.hasClass(\"editable-empty\")&&!r.hasClass(\"editable-empty\")&&i.push({srcText:r.text(),dataUrl:o.data(\"url\"),dataName:o.data(\"name\"),dstElem:o})}}),function(t,n,r){P(i,r,function(r,o){e.xtranslateText(e.xtranslateService,t,r,n,function(e,t){o(e,t)})})}(e.PRIMARY_LOCALE,o,a)})});var I=n(\"#auto-fill\");function D(e){if(e.length){var t=new MouseEvent(\"click\",{view:window,bubbles:!0,cancelable:!0});e[0].dispatchEvent(t)}}r.push(function(){return I.off(\"click\")}),I.on(\"click\",function(t){var r=[];t.preventDefault(),t.stopPropagation(),n(\".auto-fillable\").each(function(){var t=n(this).find(\"a.vsch_editable.editable-empty\"),o=t.closest(\"tr\");t.length&&!o.hasClass(\"hidden\")&&r.push({srcText:t.data(\"name\").substr(e.PRIMARY_LOCALE.length+1),dataUrl:t.data(\"url\"),dataName:t.data(\"name\"),dstElem:t})}),P(r,I,function(e,t){t(e.replace(/^.*\\.|-|_/g,\" \").toCapitalCase().trim(),\"\")})});var N=n(\".auto-delete-key\");r.push(function(){return N.off(\"click\")}),N.on(\"click\",function(e){e.preventDefault(),n(\"#translations\").find(\"tbody\").first().find(\".delete-key\").each(function(){n(this).closest(\"tr\").hasClass(\"hidden\")||n(this).hasClass(\"hidden\")||D(n(this))})});var A=n(\".auto-undelete-key\");r.push(function(){return A.off(\"click\")}),A.on(\"click\",function(e){e.preventDefault(),n(\"#translations\").find(\"tbody\").first().find(\".undelete-key\").each(function(){n(this).closest(\"tr\").hasClass(\"hidden\")||n(this).hasClass(\"hidden\")||D(n(this))})});var j=n(\"a.show-source-refs\");function L(e,t,o){return function(){var a={id:null},i={id:null},s=function(e,t,n){return function(){\"both\"===t.css(\"resize\")?(t.outerWidth(e.outerWidth()),t.outerHeight(e.outerHeight())):\"horizontal\"===t.css(\"resize\")?t.outerWidth(e.outerWidth()):\"vertical\"===t.css(\"resize\")&&t.outerHeight(e.outerHeight()),n.id&&(clearTimeout(n.id),n.id=null)}};o&&(r.push(function(){return n(window).off(\"mousemove\")}),n(window).on(\"mousemove\",function(n){n.target===e[0]?(a.id&&(clearTimeout(a.id),a.id=null),a.id=setTimeout(s(e,t,a),1e3/30)):n.target===t[0]&&(i.id&&(clearTimeout(i.id),i.id=null),i.id=setTimeout(s(t,e,i),1e3/30))})),r.push(function(){return n(window).off(\"mouseup\")}),n(window).on(\"mouseup\",function(n){null!==a.id&&(clearTimeout(a.id),a.id=null),n.target===e[0]?s(e,t,a)():n.target===t[0]&&s(t,e,i)()})}}if(r.push(function(){return j.off(\"ajax:success\")}),j.on(\"ajax:success\",function(e,t){var r=n(\"#sourceRefsModal\").first();r.find(\"#key-name\").first().text(t.key_name);var o=r.find(\".results\").first(),a=t.result.join(\"<br>\");o.html(a),r.modal(\"show\")}),n(\".btn.auto-prop-case\").each(function(){var e=n(this).data(\"trans\"),t=n(this).data(\"locale\"),o=n(this);r.push(function(){return o.off(\"click\")}),o.on(\"click\",function(r){r.preventDefault(),r.stopPropagation();var a=[],i=XRegExp(\"^(\\\\p{Alphabetic}|\\\\p{Number})+(\\\\p{Space_Separator}+(\\\\p{Alphabetic}|\\\\p{Number})+)+\\\\.?$\");n(\".auto-translatable-\"+t).each(function(){if(!n(this).closest(\"tr\").hasClass(\"hidden\")){var t=n(this).parent().find(\".vsch_editable\");if(t.length>1){n(t[0]);var r=n(t[e]);if(r.length&&!r.hasClass(\"editable-empty\")){var o=r.text(),s=i.test(o);window.console.log(o+\" simple \"+s),o!==o.toLocaleProperCaseOrLowerCase()&&s&&a.push({srcText:r.text(),dataUrl:r.data(\"url\"),dataName:r.data(\"name\"),dstElem:r})}}}}),a.length>0&&function(e,t,n){P(a,n,function(e,t){t(e.toLocaleProperCaseOrLowerCase(),\"\")})}(0,0,o)})}),L(n(\"#keyop-keys\"),n(\"#keyop-suffixes\"),!0)(),L(n(\"#primary-text\"),n(\"#current-text\"),!0)(),L(n(\"#srckeys\"),n(\"#dstkeys\"),!0)(),e.TRANS_FILTERS&&\"\"!==e.CURRENT_GROUP){var R=e.TRANS_FILTERS.filter,M=e.TRANS_FILTERS.regex,U=n(\"#\"+R);U.prop(\"checked\",!0),O.length>0&&(O[0].value=M,D(U))}}},function(e,t,n){var r=n(258);\"string\"==typeof r&&(r=[[e.i,r,\"\"]]);var o={transform:void 0};n(59)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(58)(!1)).push([e.i,'/*!\\n * Bootstrap v3.3.7 (http://getbootstrap.com)\\n * Copyright 2011-2018 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */\\n\\n/*!\\n * Generated using the Bootstrap Customizer (<none>)\\n * Config saved to config.json and <none>\\n */\\n/*!\\n * Bootstrap v3.3.7 (http://getbootstrap.com)\\n * Copyright 2011-2016 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */\\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:10px;margin-bottom:10px;border:0;border-top:1px solid #e6e6e6}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:\"\"}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:\" \";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:\" \";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:\" \";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:\" \";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.clearfix:after,.clearfix:before{content:\" \";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}',\"\"])},function(e,t){e.exports=function(e){var t=\"undefined\"!=typeof window&&window.location;if(!t)throw new Error(\"fixUrls requires window.location\");if(!e||\"string\"!=typeof e)return e;var n=t.protocol+\"//\"+t.host,r=n+t.pathname.replace(/\\/[^\\/]*$/,\"/\");return e.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi,function(e,t){var o,a=t.trim().replace(/^\"(.*)\"$/,function(e,t){return t}).replace(/^'(.*)'$/,function(e,t){return t});return/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(a)?e:(o=0===a.indexOf(\"//\")?a:0===a.indexOf(\"/\")?n+a:r+a.replace(/^\\.\\//,\"\"),\"url(\"+JSON.stringify(o)+\")\")})}},function(e,t,n){var r=n(261);\"string\"==typeof r&&(r=[[e.i,r,\"\"]]);var o={transform:void 0};n(59)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){var r=n(262);(e.exports=n(58)(!1)).push([e.i,\"/*! X-editable - v1.5.1 \\n* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery\\n* http://github.com/vitalets/x-editable\\n* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */.editableform{margin-bottom:0}.editableform .control-group{margin-bottom:0;white-space:nowrap;line-height:20px}.editableform .form-control{width:auto}.editable-buttons{display:inline-block;vertical-align:top;margin-left:7px;zoom:1;*display:inline}.editable-buttons.editable-buttons-bottom{display:block;margin-top:7px;margin-left:0}.editable-input{vertical-align:top;display:inline-block;width:auto;white-space:normal;zoom:1;*display:inline}.editable-buttons .editable-cancel{margin-left:7px}.editable-buttons button.ui-button-icon-only{height:24px;width:30px}.editableform-loading{background:url(\"+r(n(263))+\") 50% no-repeat;height:25px;width:auto;min-width:25px}.editable-inline .editableform-loading{background-position:left 5px}.editable-error-block{max-width:300px;margin:5px 0 0;width:auto;white-space:normal}.editable-error-block.ui-state-error{padding:3px}.editable-error{color:red}.editableform .editable-date{padding:0;margin:0;float:left}.editable-inline .add-on .icon-th{margin-top:3px;margin-left:1px}.editable-checklist label input[type=checkbox],.editable-checklist label span{vertical-align:middle;margin:0}.editable-checklist label{white-space:nowrap}.editable-wysihtml5{width:566px;height:250px}.editable-clear{clear:both;font-size:.9em;text-decoration:none;text-align:right}.editable-clear-x{background:url(\"+r(n(264))+') 50% no-repeat;display:block;width:13px;height:13px;position:absolute;opacity:.6;z-index:100;top:50%;right:6px;margin-top:-6px}.editable-clear-x:hover{opacity:1}.editable-pre-wrapped{white-space:pre-wrap}.editable-container.editable-popup{max-width:none!important}.editable-container.popover{width:auto}.editable-container.editable-inline{display:inline-block;vertical-align:middle;width:auto;zoom:1;*display:inline}.editable-container.ui-widget{font-size:inherit;z-index:9990}.editable-click,a.editable-click,a.editable-click:hover{text-decoration:none;border-bottom:1px dashed #08c}.editable-click.editable-disabled,a.editable-click.editable-disabled,a.editable-click.editable-disabled:hover{color:#585858;cursor:default;border-bottom:none}.editable-empty,.editable-empty:focus,.editable-empty:hover{font-style:italic;color:#d14;text-decoration:none}.editable-unsaved{font-weight:700}.editable-bg-transition{-webkit-transition:background-color 1.4s ease-out;-moz-transition:background-color 1.4s ease-out;-o-transition:background-color 1.4s ease-out;-ms-transition:background-color 1.4s ease-out;transition:background-color 1.4s ease-out}.form-horizontal .editable{padding-top:5px;display:inline-block}\\n\\n\\n/*!\\n * Datepicker for Bootstrap\\n *\\n * Copyright 2012 Stefan Petre\\n * Improvements by Andrew Rowls\\n * Licensed under the Apache License v2.0\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n */.datepicker{padding:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown:before{content:\"\";display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:6px}.datepicker-dropdown:after{content:\"\";display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.datepicker>div{display:none}.datepicker.days div.datepicker-days,.datepicker.months div.datepicker-months,.datepicker.years div.datepicker-years{display:block}.datepicker table{margin:0}.datepicker td,.datepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day:hover{background:#eee;cursor:pointer}.datepicker table tr td.new,.datepicker table tr td.old{color:#999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:none;color:#999;cursor:default}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(top,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(top,#fdd49a,#fdf59a);background-image:-o-linear-gradient(top,#fdd49a,#fdf59a);background-image:linear-gradient(top,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#fdd49a\",endColorstr=\"#fdf59a\",GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#000}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today.disabled:hover[disabled],.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today:active,.datepicker table tr td.today:hover,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today:hover:active,.datepicker table tr td.today:hover:hover,.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today[disabled]{background-color:#fdf59a}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today:active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active{background-color:#fbf069\\\\9}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range:hover{background:#eee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today:hover{background-color:#f3d17a;background-image:-moz-linear-gradient(top,#f3c17a,#f3e97a);background-image:-ms-linear-gradient(top,#f3c17a,#f3e97a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f3c17a),to(#f3e97a));background-image:-webkit-linear-gradient(top,#f3c17a,#f3e97a);background-image:-o-linear-gradient(top,#f3c17a,#f3e97a);background-image:linear-gradient(top,#f3c17a,#f3e97a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f3c17a\",endColorstr=\"#f3e97a\",GradientType=0);border-color:#f3e97a #f3e97a #edde34;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today.disabled:hover[disabled],.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today:hover:hover,.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today[disabled]{background-color:#f3e97a}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active{background-color:#efe24b\\\\9}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{background-color:#9e9e9e;background-image:-moz-linear-gradient(top,#b3b3b3,gray);background-image:-ms-linear-gradient(top,#b3b3b3,gray);background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3b3b3),to(gray));background-image:-webkit-linear-gradient(top,#b3b3b3,gray);background-image:-o-linear-gradient(top,#b3b3b3,gray);background-image:linear-gradient(top,#b3b3b3,gray);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#b3b3b3\",endColorstr=\"#808080\",GradientType=0);border-color:gray gray #595959;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected.disabled:hover[disabled],.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected:hover:hover,.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected[disabled]{background-color:gray}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active{background-color:#666\\\\9}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#0088cc\",endColorstr=\"#0044cc\",GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active.disabled:hover[disabled],.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active:active,.datepicker table tr td.active:hover,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active:hover:active,.datepicker table tr td.active:hover:hover,.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active[disabled]{background-color:#04c}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active:active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active{background-color:#039\\\\9}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:none;color:#999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#0088cc\",endColorstr=\"#0044cc\",GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active.disabled:hover[disabled],.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active:hover:hover,.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active[disabled]{background-color:#04c}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active{background-color:#039\\\\9}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#999}.datepicker th.datepicker-switch{width:145px}.datepicker tfoot tr th,.datepicker thead tr:first-child th{cursor:pointer}.datepicker tfoot tr th:hover,.datepicker thead tr:first-child th:hover{background:#eee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.datepicker thead tr:first-child th.cw{cursor:default;background-color:transparent}.input-append.date .add-on i,.input-prepend.date .add-on i{display:block;cursor:pointer;width:16px;height:16px}.input-daterange input{text-align:center}.input-daterange input:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-daterange input:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-daterange .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:400;line-height:18px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc;margin-left:-5px;margin-right:-5px}',\"\"])},function(e,t){e.exports=function(e){return\"string\"!=typeof e?e:(/^['\"].*['\"]$/.test(e)&&(e=e.slice(1,-1)),/[\"'() \\t\\n]/.test(e)?'\"'+e.replace(/\"/g,'\\\\\"').replace(/\\n/g,\"\\\\n\")+'\"':e)}},function(e,t){e.exports=\"/vendor/laravel-translation-manager/images/loading.gif?9ed4669f524bec38319be63a2ee4ba26\"},function(e,t){e.exports=\"/vendor/laravel-translation-manager/images/clear.png?ddda9c7c315686e262ce37f40564cd28\"},function(e,t,n){var r=n(266);\"string\"==typeof r&&(r=[[e.i,r,\"\"]]);var o={transform:void 0};n(59)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(58)(!1)).push([e.i,'.transpopup{overflow:auto;max-width:95%;max-height:95%;display:flex;padding-right:20px;flex-direction:column;background-color:#f7f7f7;border:1px solid #c2e1f5!important}.editable-click,a.editable-click,a.editable-click:hover{text-decoration:none;border-bottom:1px dashed #08c}.translation-manager .editable-click,.translation-manager a.editable-click,.translation-manager a.editable-click:hover{text-decoration:none;border-bottom:none}h1 .editable-click,h1 a.editable-click,h1 a.editable-click:hover,h2 .editable-click,h2 a.editable-click,h2 a.editable-click:hover,h3 .editable-click,h3 a.editable-click,h3 a.editable-click:hover,h4 .editable-click,h4 a.editable-click,h4 a.editable-click:hover,h5 .editable-click,h5 a.editable-click,h5 a.editable-click:hover,h6 .editable-click,h6 a.editable-click,h6 a.editable-click:hover{text-decoration:none;border-bottom:none;border-bottom:1px dashed #08c}.translation-manager h1 .editable-click,.translation-manager h2 .editable-click,.translation-manager h3 .editable-click,.translation-manager h4 .editable-click,.translation-manager h5 .editable-click,.translation-manager h6 .editable-click,h1 a.editable-click,h1 a.editable-click:hover,h2 a.editable-click,h2 a.editable-click:hover,h3 a.editable-click,h3 a.editable-click:hover,h4 a.editable-click,h4 a.editable-click:hover,h5 a.editable-click,h5 a.editable-click:hover,h6 a.editable-click,h6 a.editable-click:hover{text-decoration:none;border-bottom:none;border-bottom:1px dashed #f0c!important}.table.translation-stats>tbody>tr>td,.table.translation-stats>thead>tr>th{margin:0!important;padding:2px 6px}.table.translation-stats>tbody>tr>td.group{text-align:left;font-weight:700;padding-left:8px}.table-translations td.unused-key{color:#999}.table.translation-stats>tbody>tr>td.deleted,.table.translation-stats>tbody>tr>td.group.deleted>a,.table.translation-stats>thead>tr>th.deleted{color:#c200c1;font-weight:700}.table.translation-stats>tbody>tr>td.group.missing>a,.table.translation-stats>thead>tr>th.missing{color:#d00030}.table.translation-stats>tbody>tr>td.group.changed>a,.table.translation-stats>thead>tr>th.changed{color:#00a030}.table.translation-stats>tbody>tr>td.group.cached>a,.table.translation-stats>thead>tr>th.cached{color:#3399f3}textarea.editable-input{width:600px!important;display:block!important;white-space:pre-wrap}.editable-container.editable-inline{display:block!important;width:400px!important}.editable-container .editable-error-block{display:block!important;max-width:600px!important}.editable-buttons .editable-translate{margin-left:1px}.table-translations thead tr{background-color:#f0f0f0}.table-striped>tbody>tr:nth-of-type(2n){background-color:#f9f9f9}.table-striped>tbody>tr:nth-of-type(odd){background-color:#fff}.table-translations tr.editing{background-color:rgba(255,255,100,.3)}.table-striped>tbody>tr.editing:nth-of-type(2n){background-color:#f7f9da}.table-striped>tbody>tr.editing:nth-of-type(odd){background-color:#fffdd9}.table-translations tr td.editing{background-color:rgba(255,255,100,.3)}.table-striped>tbody>tr:nth-of-type(2n) td.editing{background-color:#f7f9da}.table-striped>tbody>tr:nth-of-type(odd) td.editing{background-color:#fffdd9}.table-translations>tbody>tr.deleted-translation:not(.editing):nth-of-type(2n){background-color:#edd3ed}.table-translations>tbody>tr.deleted-translation:not(.editing):nth-of-type(odd){background-color:#ffe0ff}.table-translations>tbody>tr:not(.deleted-translation):not(.editing):nth-of-type(2n)>td.has-unpublished-translation{background-color:#ebf7e4}.table-translations>tbody>tr:not(.deleted-translation):not(.editing):nth-of-type(odd)>td.has-unpublished-translation{background-color:#f3ffed}.table-translations>tbody>tr:not(.deleted-translation):not(.editing):nth-of-type(2n)>td.has-cached-translation{background-color:#e9f7f7}.table-translations>tbody>tr:not(.deleted-translation):not(.editing):nth-of-type(odd)>td.has-cached-translation{background-color:#f2feff}a.status-1{font-weight:700}del{color:#c80010}ins{color:#108030}#accordion.panel-group .panel>.panel-heading a:not(.collapsed):not(.btn):before{content:\"\\\\25BC   \";display:inline}#accordion.panel-group .panel>.panel-heading a.collapsed:not(.in):before{content:\"\\\\25B6   \";display:inline}.panel-heading>h1,.panel-heading>h2,.panel-heading>h3,.panel-heading>h4,.panel-heading>h5,.panel-heading>h6{margin-bottom:0}.key-filter{float:right;font-weight:400}.key-filter.have-filtered{font-weight:700;color:#be0031}.panel .table:last-child{margin-bottom:0}input.bg-success{background-color:#dff0d8!important}input.bg-info{background-color:#d9edf7!important}input.bg-warning{background-color:#fcf8e3!important}input.bg-danger{background-color:#f2dede!important}input.regex-error{color:#c70155;border:1px solid #c70155}input.regex-error:focus{color:#c70155;border-color:#c70155}#accordion.panel-group{margin-bottom:2px}label.regex-error{color:#c70155;margin-top:-30px}input.bg-highlight{background-color:#d9edf7}.translation-filter.has-highlight label.form-check-label{color:#337ab7;font-weight:700!important}.translation-filter.has-error label.form-check-label{color:#c70155;font-weight:700!important}.translation-filter.has-feedback label.form-check-label{color:#108030;font-weight:700!important}.has-highlight .form-control{border-color:#337ab7;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-highlight .form-control:focus{border-color:#286090;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #337ab7;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #337ab7}.has-highlight .input-group-addon{color:#337ab7;background-color:#d9edf7;border-color:#337ab7}.has-highlight .form-control-feedback{color:#337ab7}.translation-filter.has-error label,.translation-filter.has-feedback label,.translation-filter.has-highlight label,.translation-filter.has-success label,.translation-filter.has-warning label{font-weight:700!important}.translation-filter.has-highlight label{color:#337ab7}.translation-filter.has-error label{color:#c70155}.translation-filter.has-feedback label{color:#108030}',\"\"])},function(e,t,n){\"use strict\";t.__esModule=!0;var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a=d(n(7)),i=d(n(12)),s=n(60),u=n(31),l=d(n(61)),c=n(103);function d(e){return e&&e.__esModule?e:{default:e}}var f=function(){try{return window.history.state||{}}catch(e){return{}}};t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,i.default)(c.canUseDOM,\"Browser history needs a DOM\");var t=window.history,n=(0,c.supportsHistory)(),d=!(0,c.supportsPopStateOnHashChange)(),p=e.forceRefresh,h=void 0!==p&&p,m=e.getUserConfirmation,g=void 0===m?c.getConfirmation:m,v=e.keyLength,b=void 0===v?6:v,y=e.basename?(0,u.stripTrailingSlash)((0,u.addLeadingSlash)(e.basename)):\"\",w=function(e){var t=e||{},n=t.key,r=t.state,o=window.location,i=o.pathname+o.search+o.hash;return(0,a.default)(!y||(0,u.hasBasename)(i,y),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path \"'+i+'\" to begin with \"'+y+'\".'),y&&(i=(0,u.stripBasename)(i,y)),(0,s.createLocation)(i,r,n)},x=function(){return Math.random().toString(36).substr(2,b)},_=(0,l.default)(),E=function(e){o(R,e),R.length=t.length,_.notifyListeners(R.location,R.action)},k=function(e){(0,c.isExtraneousPopstateEvent)(e)||O(w(e.state))},S=function(){O(w(f()))},C=!1,O=function(e){C?(C=!1,E()):_.confirmTransitionTo(e,\"POP\",g,function(t){t?E({action:\"POP\",location:e}):T(e)})},T=function(e){var t=R.location,n=I.indexOf(t.key);-1===n&&(n=0);var r=I.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(C=!0,N(o))},P=w(f()),I=[P.key],D=function(e){return y+(0,u.createPath)(e)},N=function(e){t.go(e)},A=0,j=function(e){1===(A+=e)?((0,c.addEventListener)(window,\"popstate\",k),d&&(0,c.addEventListener)(window,\"hashchange\",S)):0===A&&((0,c.removeEventListener)(window,\"popstate\",k),d&&(0,c.removeEventListener)(window,\"hashchange\",S))},L=!1,R={length:t.length,action:\"POP\",location:P,createHref:D,push:function(e,o){(0,a.default)(!(\"object\"===(void 0===e?\"undefined\":r(e))&&void 0!==e.state&&void 0!==o),\"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored\");var i=(0,s.createLocation)(e,o,x(),R.location);_.confirmTransitionTo(i,\"PUSH\",g,function(e){if(e){var r=D(i),o=i.key,s=i.state;if(n)if(t.pushState({key:o,state:s},null,r),h)window.location.href=r;else{var u=I.indexOf(R.location.key),l=I.slice(0,-1===u?0:u+1);l.push(i.key),I=l,E({action:\"PUSH\",location:i})}else(0,a.default)(void 0===s,\"Browser history cannot push state in browsers that do not support HTML5 history\"),window.location.href=r}})},replace:function(e,o){(0,a.default)(!(\"object\"===(void 0===e?\"undefined\":r(e))&&void 0!==e.state&&void 0!==o),\"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored\");var i=(0,s.createLocation)(e,o,x(),R.location);_.confirmTransitionTo(i,\"REPLACE\",g,function(e){if(e){var r=D(i),o=i.key,s=i.state;if(n)if(t.replaceState({key:o,state:s},null,r),h)window.location.replace(r);else{var u=I.indexOf(R.location.key);-1!==u&&(I[u]=i.key),E({action:\"REPLACE\",location:i})}else(0,a.default)(void 0===s,\"Browser history cannot replace state in browsers that do not support HTML5 history\"),window.location.replace(r)}})},go:N,goBack:function(){return N(-1)},goForward:function(){return N(1)},block:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=_.setPrompt(e);return L||(j(1),L=!0),function(){return L&&(L=!1,j(-1)),t()}},listen:function(e){var t=_.appendListener(e);return j(1),function(){j(-1),t()}}};return R}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=c(n(7)),a=c(n(12)),i=n(60),s=n(31),u=c(n(61)),l=n(103);function c(e){return e&&e.__esModule?e:{default:e}}var d={hashbang:{encodePath:function(e){return\"!\"===e.charAt(0)?e:\"!/\"+(0,s.stripLeadingSlash)(e)},decodePath:function(e){return\"!\"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:s.stripLeadingSlash,decodePath:s.addLeadingSlash},slash:{encodePath:s.addLeadingSlash,decodePath:s.addLeadingSlash}},f=function(){var e=window.location.href,t=e.indexOf(\"#\");return-1===t?\"\":e.substring(t+1)},p=function(e){var t=window.location.href.indexOf(\"#\");window.location.replace(window.location.href.slice(0,t>=0?t:0)+\"#\"+e)};t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,a.default)(l.canUseDOM,\"Hash history needs a DOM\");var t=window.history,n=(0,l.supportsGoWithoutReloadUsingHash)(),c=e.getUserConfirmation,h=void 0===c?l.getConfirmation:c,m=e.hashType,g=void 0===m?\"slash\":m,v=e.basename?(0,s.stripTrailingSlash)((0,s.addLeadingSlash)(e.basename)):\"\",b=d[g],y=b.encodePath,w=b.decodePath,x=function(){var e=w(f());return(0,o.default)(!v||(0,s.hasBasename)(e,v),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path \"'+e+'\" to begin with \"'+v+'\".'),v&&(e=(0,s.stripBasename)(e,v)),(0,i.createLocation)(e)},_=(0,u.default)(),E=function(e){r(M,e),M.length=t.length,_.notifyListeners(M.location,M.action)},k=!1,S=null,C=function(){var e=f(),t=y(e);if(e!==t)p(t);else{var n=x(),r=M.location;if(!k&&(0,i.locationsAreEqual)(r,n))return;if(S===(0,s.createPath)(n))return;S=null,O(n)}},O=function(e){k?(k=!1,E()):_.confirmTransitionTo(e,\"POP\",h,function(t){t?E({action:\"POP\",location:e}):T(e)})},T=function(e){var t=M.location,n=N.lastIndexOf((0,s.createPath)(t));-1===n&&(n=0);var r=N.lastIndexOf((0,s.createPath)(e));-1===r&&(r=0);var o=n-r;o&&(k=!0,A(o))},P=f(),I=y(P);P!==I&&p(I);var D=x(),N=[(0,s.createPath)(D)],A=function(e){(0,o.default)(n,\"Hash history go(n) causes a full page reload in this browser\"),t.go(e)},j=0,L=function(e){1===(j+=e)?(0,l.addEventListener)(window,\"hashchange\",C):0===j&&(0,l.removeEventListener)(window,\"hashchange\",C)},R=!1,M={length:t.length,action:\"POP\",location:D,createHref:function(e){return\"#\"+y(v+(0,s.createPath)(e))},push:function(e,t){(0,o.default)(void 0===t,\"Hash history cannot push state; it is ignored\");var n=(0,i.createLocation)(e,void 0,void 0,M.location);_.confirmTransitionTo(n,\"PUSH\",h,function(e){if(e){var t=(0,s.createPath)(n),r=y(v+t);if(f()!==r){S=t,function(e){window.location.hash=e}(r);var a=N.lastIndexOf((0,s.createPath)(M.location)),i=N.slice(0,-1===a?0:a+1);i.push(t),N=i,E({action:\"PUSH\",location:n})}else(0,o.default)(!1,\"Hash history cannot PUSH the same path; a new entry will not be added to the history stack\"),E()}})},replace:function(e,t){(0,o.default)(void 0===t,\"Hash history cannot replace state; it is ignored\");var n=(0,i.createLocation)(e,void 0,void 0,M.location);_.confirmTransitionTo(n,\"REPLACE\",h,function(e){if(e){var t=(0,s.createPath)(n),r=y(v+t);f()!==r&&(S=t,p(r));var o=N.indexOf((0,s.createPath)(M.location));-1!==o&&(N[o]=t),E({action:\"REPLACE\",location:n})}})},go:A,goBack:function(){return A(-1)},goForward:function(){return A(1)},block:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=_.setPrompt(e);return R||(L(1),R=!0),function(){return R&&(R=!1,L(-1)),t()}},listen:function(e){var t=_.appendListener(e);return L(1),function(){L(-1),t()}}};return M}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a=l(n(7)),i=n(31),s=n(60),u=l(n(61));function l(e){return e&&e.__esModule?e:{default:e}}var c=function(e,t,n){return Math.min(Math.max(e,t),n)};t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.getUserConfirmation,n=e.initialEntries,l=void 0===n?[\"/\"]:n,d=e.initialIndex,f=void 0===d?0:d,p=e.keyLength,h=void 0===p?6:p,m=(0,u.default)(),g=function(e){o(_,e),_.length=_.entries.length,m.notifyListeners(_.location,_.action)},v=function(){return Math.random().toString(36).substr(2,h)},b=c(f,0,l.length-1),y=l.map(function(e){return\"string\"==typeof e?(0,s.createLocation)(e,void 0,v()):(0,s.createLocation)(e,void 0,e.key||v())}),w=i.createPath,x=function(e){var n=c(_.index+e,0,_.entries.length-1),r=_.entries[n];m.confirmTransitionTo(r,\"POP\",t,function(e){e?g({action:\"POP\",location:r,index:n}):g()})},_={length:y.length,action:\"POP\",location:y[b],index:b,entries:y,createHref:w,push:function(e,n){(0,a.default)(!(\"object\"===(void 0===e?\"undefined\":r(e))&&void 0!==e.state&&void 0!==n),\"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored\");var o=(0,s.createLocation)(e,n,v(),_.location);m.confirmTransitionTo(o,\"PUSH\",t,function(e){if(e){var t=_.index+1,n=_.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),g({action:\"PUSH\",location:o,index:t,entries:n})}})},replace:function(e,n){(0,a.default)(!(\"object\"===(void 0===e?\"undefined\":r(e))&&void 0!==e.state&&void 0!==n),\"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored\");var o=(0,s.createLocation)(e,n,v(),_.location);m.confirmTransitionTo(o,\"REPLACE\",t,function(e){e&&(_.entries[_.index]=o,g({action:\"REPLACE\",location:o}))})},go:x,goBack:function(){return x(-1)},goForward:function(){return x(1)},canGo:function(e){var t=_.index+e;return t>=0&&t<_.entries.length},block:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return m.setPrompt(e)},listen:function(e){return m.appendListener(e)}};return _}},function(e,t,n){var r=n(271);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t))},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=f;var o=new RegExp([\"(\\\\\\\\.)\",\"([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))\"].join(\"|\"),\"g\");function a(e,t){for(var n,r=[],a=0,i=0,s=\"\",c=t&&t.delimiter||\"/\";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(s+=e.slice(i,p),i=p+d.length,f)s+=f[1];else{var h=e[i],m=n[2],g=n[3],v=n[4],b=n[5],y=n[6],w=n[7];s&&(r.push(s),s=\"\");var x=null!=m&&null!=h&&h!==m,_=\"+\"===y||\"*\"===y,E=\"?\"===y||\"*\"===y,k=n[2]||c,S=v||b;r.push({name:g||a++,prefix:m||\"\",delimiter:k,optional:E,repeat:_,partial:x,asterisk:!!w,pattern:S?l(S):w?\".*\":\"[^\"+u(k)+\"]+?\"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\\/?#]/g,function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()})}function s(e){for(var t=new Array(e.length),n=0;n<e.length;n++)\"object\"==typeof e[n]&&(t[n]=new RegExp(\"^(?:\"+e[n].pattern+\")$\"));return function(n,o){for(var a=\"\",s=n||{},u=(o||{}).pretty?i:encodeURIComponent,l=0;l<e.length;l++){var c=e[l];if(\"string\"!=typeof c){var d,f=s[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected \"'+c.name+'\" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected \"'+c.name+'\" to not repeat, but received `'+JSON.stringify(f)+\"`\");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected \"'+c.name+'\" to not be empty')}for(var p=0;p<f.length;p++){if(d=u(f[p]),!t[l].test(d))throw new TypeError('Expected all \"'+c.name+'\" to match \"'+c.pattern+'\", but received `'+JSON.stringify(d)+\"`\");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()}):u(f),!t[l].test(d))throw new TypeError('Expected \"'+c.name+'\" to match \"'+c.pattern+'\", but received \"'+d+'\"');a+=c.prefix+d}}else a+=c}return a}}function u(e){return e.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g,\"\\\\$1\")}function l(e){return e.replace(/([=!:$\\/()])/g,\"\\\\$1\")}function c(e,t){return e.keys=t,e}function d(e){return e.sensitive?\"\":\"i\"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i=\"\",s=0;s<e.length;s++){var l=e[s];if(\"string\"==typeof l)i+=u(l);else{var f=u(l.prefix),p=\"(?:\"+l.pattern+\")\";t.push(l),l.repeat&&(p+=\"(?:\"+f+p+\")*\"),i+=p=l.optional?l.partial?f+\"(\"+p+\")?\":\"(?:\"+f+\"(\"+p+\"))?\":f+\"(\"+p+\")\"}}var h=u(n.delimiter||\"/\"),m=i.slice(-h.length)===h;return o||(i=(m?i.slice(0,-h.length):i)+\"(?:\"+h+\"(?=$))?\"),i+=a?\"$\":o&&m?\"\":\"(?=\"+h+\"|$)\",c(new RegExp(\"^\"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\\((?!\\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp(\"(?:\"+r.join(\"|\")+\")\",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},function(e,t){e.exports=Array.isArray||function(e){return\"[object Array]\"==Object.prototype.toString.call(e)}},function(e,t){}]);"
  },
  {
    "path": "public/vendor/laravel-translation-manager/js/inflection.js",
    "content": "/*\nCopyright (c) 2007-2015 Ryan Schuft (ryan.schuft@gmail.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\n/*\n  This code is based in part on the work done in Ruby to support\n  infection as part of Ruby on Rails in the ActiveSupport's Inflector\n  and Inflections classes.  It was initally ported to Javascript by\n  Ryan Schuft (ryan.schuft@gmail.com) in 2007.\n\n  The code is available at http://code.google.com/p/inflection-js/\n\n  The basic usage is:\n    1. Include this script on your web page.\n    2. Call functions on any String object in Javascript\n\n  Currently implemented functions:\n\n    String.pluralize(plural) == String\n      renders a singular English language noun into its plural form\n      normal results can be overridden by passing in an alternative\n\n    String.singularize(singular) == String\n      renders a plural English language noun into its singular form\n      normal results can be overridden by passing in an alterative\n\n    String.camelize(lowFirstLetter) == String\n      renders a lower case underscored word into camel case\n      the first letter of the result will be upper case unless you pass true\n      also translates \"/\" into \"::\" (underscore does the opposite)\n\n    String.underscore() == String\n      renders a camel cased word into words seperated by underscores\n      also translates \"::\" back into \"/\" (camelize does the opposite)\n\n    String.humanize(lowFirstLetter) == String\n      renders a lower case and underscored word into human readable form\n      defaults to making the first letter capitalized unless you pass true\n\n    String.capitalize() == String\n      renders all characters to lower case and then makes the first upper\n\n    String.dasherize() == String\n      renders all underbars and spaces as dashes\n\n    String.titleize() == String\n      renders words into title casing (as for book titles)\n\n    String.demodulize() == String\n      renders class names that are prepended by modules into just the class\n\n    String.tableize() == String\n      renders camel cased singular words into their underscored plural form\n\n    String.classify() == String\n      renders an underscored plural word into its camel cased singular form\n\n    String.foreign_key(dropIdUbar) == String\n      renders a class name (camel cased singular noun) into a foreign key\n      defaults to seperating the class from the id with an underbar unless\n      you pass true\n\n    String.ordinalize() == String\n      renders all numbers found in the string into their sequence like \"22nd\"\n*/\n\n/*\n  This sets up a container for some constants in its own namespace\n  We use the window (if available) to enable dynamic loading of this script\n  Window won't necessarily exist for non-browsers.\n*/\nif (typeof window !== \"undefined\" && !window.InflectionJS)\n{\n    window.InflectionJS = null;\n}\n\n/*\n  This sets up some constants for later use\n  This should use the window namespace variable if available\n*/\nInflectionJS =\n{\n    /*\n      This is a list of nouns that use the same form for both singular and plural.\n      This list should remain entirely in lower case to correctly match Strings.\n    */\n    uncountable_words: [\n        'equipment', 'information', 'rice', 'money', 'species', 'series',\n        'fish', 'sheep', 'moose', 'deer', 'news'\n    ],\n\n    /*\n      These rules translate from the singular form of a noun to its plural form.\n    */\n    plural_rules: [\n        [new RegExp('(m)an$', 'gi'),                 '$1en'],\n        [new RegExp('(pe)rson$', 'gi'),              '$1ople'],\n        [new RegExp('(child)$', 'gi'),               '$1ren'],\n        [new RegExp('^(ox)$', 'gi'),                 '$1en'],\n        [new RegExp('(ax|test)is$', 'gi'),           '$1es'],\n        [new RegExp('(octop|vir)us$', 'gi'),         '$1i'],\n        [new RegExp('(alias|status)$', 'gi'),        '$1es'],\n        [new RegExp('(bu)s$', 'gi'),                 '$1ses'],\n        [new RegExp('(buffal|tomat|potat)o$', 'gi'), '$1oes'],\n        [new RegExp('([ti])um$', 'gi'),              '$1a'],\n        [new RegExp('sis$', 'gi'),                   'ses'],\n        [new RegExp('(?:([^f])fe|([lr])f)$', 'gi'),  '$1$2ves'],\n        [new RegExp('(hive)$', 'gi'),                '$1s'],\n        [new RegExp('([^aeiouy]|qu)y$', 'gi'),       '$1ies'],\n        [new RegExp('(x|ch|ss|sh)$', 'gi'),          '$1es'],\n        [new RegExp('(matr|vert|ind)ix|ex$', 'gi'),  '$1ices'],\n        [new RegExp('([m|l])ouse$', 'gi'),           '$1ice'],\n        [new RegExp('(quiz)$', 'gi'),                '$1zes'],\n        [new RegExp('s$', 'gi'),                     's'],\n        [new RegExp('$', 'gi'),                      's']\n    ],\n\n    /*\n      These rules translate from the plural form of a noun to its singular form.\n    */\n    singular_rules: [\n        [new RegExp('(m)en$', 'gi'),                                                       '$1an'],\n        [new RegExp('(pe)ople$', 'gi'),                                                    '$1rson'],\n        [new RegExp('(child)ren$', 'gi'),                                                  '$1'],\n        [new RegExp('([ti])a$', 'gi'),                                                     '$1um'],\n        [new RegExp('((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$','gi'), '$1$2sis'],\n        [new RegExp('(hive)s$', 'gi'),                                                     '$1'],\n        [new RegExp('(tive)s$', 'gi'),                                                     '$1'],\n        [new RegExp('(curve)s$', 'gi'),                                                    '$1'],\n        [new RegExp('([lr])ves$', 'gi'),                                                   '$1f'],\n        [new RegExp('([^fo])ves$', 'gi'),                                                  '$1fe'],\n        [new RegExp('([^aeiouy]|qu)ies$', 'gi'),                                           '$1y'],\n        [new RegExp('(s)eries$', 'gi'),                                                    '$1eries'],\n        [new RegExp('(m)ovies$', 'gi'),                                                    '$1ovie'],\n        [new RegExp('(x|ch|ss|sh)es$', 'gi'),                                              '$1'],\n        [new RegExp('([m|l])ice$', 'gi'),                                                  '$1ouse'],\n        [new RegExp('(bus)es$', 'gi'),                                                     '$1'],\n        [new RegExp('(o)es$', 'gi'),                                                       '$1'],\n        [new RegExp('(shoe)s$', 'gi'),                                                     '$1'],\n        [new RegExp('(cris|ax|test)es$', 'gi'),                                            '$1is'],\n        [new RegExp('(octop|vir)i$', 'gi'),                                                '$1us'],\n        [new RegExp('(alias|status)es$', 'gi'),                                            '$1'],\n        [new RegExp('^(ox)en', 'gi'),                                                      '$1'],\n        [new RegExp('(vert|ind)ices$', 'gi'),                                              '$1ex'],\n        [new RegExp('(matr)ices$', 'gi'),                                                  '$1ix'],\n        [new RegExp('(quiz)zes$', 'gi'),                                                   '$1'],\n        [new RegExp('s$', 'gi'),                                                           '']\n    ],\n\n    /*\n      This is a list of words that should not be capitalized for title case\n    */\n    non_titlecased_words: [\n        'and', 'or', 'nor', 'a', 'an', 'the', 'so', 'but', 'to', 'of', 'at',\n        'by', 'from', 'into', 'on', 'onto', 'off', 'out', 'in', 'over',\n        'with', 'for'\n    ],\n\n    /*\n      These are regular expressions used for converting between String formats\n    */\n    id_suffix: new RegExp('(_ids|_id)$', 'g'),\n    underbar: new RegExp('_', 'g'),\n    space_or_underbar: new RegExp('[\\ _]', 'g'),\n    uppercase: new RegExp('([A-Z])', 'g'),\n    underbar_prefix: new RegExp('^_'),\n    \n    /*\n      This is a helper method that applies rules based replacement to a String\n      Signature:\n        InflectionJS.apply_rules(str, rules, skip, override) == String\n      Arguments:\n        str - String - String to modify and return based on the passed rules\n        rules - Array: [RegExp, String] - Regexp to match paired with String to use for replacement\n        skip - Array: [String] - Strings to skip if they match\n        override - String (optional) - String to return as though this method succeeded (used to conform to APIs)\n      Returns:\n        String - passed String modified by passed rules\n      Examples:\n        InflectionJS.apply_rules(\"cows\", InflectionJs.singular_rules) === 'cow'\n    */\n    apply_rules: function(str, rules, skip, override)\n    {\n        if (override)\n        {\n            str = override;\n        }\n        else\n        {\n            var ignore = (skip.indexOf(str.toLowerCase()) > -1);\n            if (!ignore)\n            {\n                for (var x = 0; x < rules.length; x++)\n                {\n                    if (str.match(rules[x][0]))\n                    {\n                        str = str.replace(rules[x][0], rules[x][1]);\n                        break;\n                    }\n                }\n            }\n        }\n        return '' + str;\n    }\n};\n\n/*\n  This lets us detect if an Array contains a given element\n  Signature:\n    Array.indexOf(item, fromIndex, compareFunc) == Integer\n  Arguments:\n    item - Object - object to locate in the Array\n    fromIndex - Integer (optional) - starts checking from this position in the Array\n    compareFunc - Function (optional) - function used to compare Array item vs passed item\n  Returns:\n    Integer - index position in the Array of the passed item\n  Examples:\n    ['hi','there'].indexOf(\"guys\") === -1\n    ['hi','there'].indexOf(\"hi\") === 0\n*/\nif (!Array.prototype.indexOf)\n{\n    Array.prototype.indexOf = function(item, fromIndex, compareFunc)\n    {\n        if (!fromIndex)\n        {\n            fromIndex = -1;\n        }\n        var index = -1;\n        for (var i = fromIndex; i < this.length; i++)\n        {\n            if (this[i] === item || compareFunc && compareFunc(this[i], item))\n            {\n                index = i;\n                break;\n            }\n        }\n        return index;\n    };\n}\n\n/*\n  You can override this list for all Strings or just one depending on if you\n  set the new values on prototype or on a given String instance.\n*/\nif (!String.prototype._uncountable_words)\n{\n    String.prototype._uncountable_words = InflectionJS.uncountable_words;\n}\n\n/*\n  You can override this list for all Strings or just one depending on if you\n  set the new values on prototype or on a given String instance.\n*/\nif (!String.prototype._plural_rules)\n{\n    String.prototype._plural_rules = InflectionJS.plural_rules;\n}\n\n/*\n  You can override this list for all Strings or just one depending on if you\n  set the new values on prototype or on a given String instance.\n*/\nif (!String.prototype._singular_rules)\n{\n    String.prototype._singular_rules = InflectionJS.singular_rules;\n}\n\n/*\n  You can override this list for all Strings or just one depending on if you\n  set the new values on prototype or on a given String instance.\n*/\nif (!String.prototype._non_titlecased_words)\n{\n    String.prototype._non_titlecased_words = InflectionJS.non_titlecased_words;\n}\n\n/*\n  This function adds plurilization support to every String object\n    Signature:\n      String.pluralize(plural) == String\n    Arguments:\n      plural - String (optional) - overrides normal output with said String\n    Returns:\n      String - singular English language nouns are returned in plural form\n    Examples:\n      \"person\".pluralize() == \"people\"\n      \"octopus\".pluralize() == \"octopi\"\n      \"Hat\".pluralize() == \"Hats\"\n      \"person\".pluralize(\"guys\") == \"guys\"\n*/\nif (!String.prototype.pluralize)\n{\n    String.prototype.pluralize = function(plural)\n    {\n        return InflectionJS.apply_rules(\n            this,\n            this._plural_rules,\n            this._uncountable_words,\n            plural\n        );\n    };\n}\n\n/*\n  This function adds singularization support to every String object\n    Signature:\n      String.singularize(singular) == String\n    Arguments:\n      singular - String (optional) - overrides normal output with said String\n    Returns:\n      String - plural English language nouns are returned in singular form\n    Examples:\n      \"people\".singularize() == \"person\"\n      \"octopi\".singularize() == \"octopus\"\n      \"Hats\".singularize() == \"Hat\"\n      \"guys\".singularize(\"person\") == \"person\"\n*/\nif (!String.prototype.singularize)\n{\n    String.prototype.singularize = function(singular)\n    {\n        return InflectionJS.apply_rules(\n            this,\n            this._singular_rules,\n            this._uncountable_words,\n            singular\n        );\n    };\n}\n\n/*\n  This function adds camelization support to every String object\n    Signature:\n      String.camelize(lowFirstLetter) == String\n    Arguments:\n      lowFirstLetter - boolean (optional) - default is to capitalize the first\n        letter of the results... passing true will lowercase it\n    Returns:\n      String - lower case underscored words will be returned in camel case\n        additionally '/' is translated to '::'\n    Examples:\n      \"message_properties\".camelize() == \"MessageProperties\"\n      \"message_properties\".camelize(true) == \"messageProperties\"\n*/\nif (!String.prototype.camelize)\n{\n     String.prototype.camelize = function(lowFirstLetter)\n     {\n        var str = this.toLowerCase();\n        var str_path = str.split('/');\n        for (var i = 0; i < str_path.length; i++)\n        {\n            var str_arr = str_path[i].split('_');\n            var initX = ((lowFirstLetter && i + 1 === str_path.length) ? (1) : (0));\n            for (var x = initX; x < str_arr.length; x++)\n            {\n                str_arr[x] = str_arr[x].charAt(0).toUpperCase() + str_arr[x].substring(1);\n            }\n            str_path[i] = str_arr.join('');\n        }\n        str = str_path.join('::');\n        return '' + str;\n    };\n}\n\n/*\n  This function adds underscore support to every String object\n    Signature:\n      String.underscore() == String\n    Arguments:\n      N/A\n    Returns:\n      String - camel cased words are returned as lower cased and underscored\n        additionally '::' is translated to '/'\n    Examples:\n      \"MessageProperties\".camelize() == \"message_properties\"\n      \"messageProperties\".underscore() == \"message_properties\"\n*/\nif (!String.prototype.underscore)\n{\n     String.prototype.underscore = function()\n     {\n        var str = this;\n        var str_path = str.split('::');\n        for (var i = 0; i < str_path.length; i++)\n        {\n            str_path[i] = str_path[i].replace(InflectionJS.uppercase, '_$1');\n            str_path[i] = str_path[i].replace(InflectionJS.underbar_prefix, '');\n        }\n        str = str_path.join('/').toLowerCase();\n        return '' + str;\n    };\n}\n\n/*\n  This function adds humanize support to every String object\n    Signature:\n      String.humanize(lowFirstLetter) == String\n    Arguments:\n      lowFirstLetter - boolean (optional) - default is to capitalize the first\n        letter of the results... passing true will lowercase it\n    Returns:\n      String - lower case underscored words will be returned in humanized form\n    Examples:\n      \"message_properties\".humanize() == \"Message properties\"\n      \"message_properties\".humanize(true) == \"message properties\"\n*/\nif (!String.prototype.humanize)\n{\n    String.prototype.humanize = function(lowFirstLetter)\n    {\n        var str = this.toLowerCase();\n        str = str.replace(InflectionJS.id_suffix, '');\n        str = str.replace(InflectionJS.underbar, ' ');\n        if (!lowFirstLetter)\n        {\n            str = str.capitalize();\n        }\n        return '' + str;\n    };\n}\n\n/*\n  This function adds capitalization support to every String object\n    Signature:\n      String.capitalize() == String\n    Arguments:\n      N/A\n    Returns:\n      String - all characters will be lower case and the first will be upper\n    Examples:\n      \"message_properties\".capitalize() == \"Message_properties\"\n      \"message properties\".capitalize() == \"Message properties\"\n*/\nif (!String.prototype.capitalize)\n{\n    String.prototype.capitalize = function()\n    {\n        var str = this.toLowerCase();\n        str = str.substring(0, 1).toUpperCase() + str.substring(1);\n        return '' + str;\n    };\n}\n\n/*\n  This function adds dasherization support to every String object\n    Signature:\n      String.dasherize() == String\n    Arguments:\n      N/A\n    Returns:\n      String - replaces all spaces or underbars with dashes\n    Examples:\n      \"message_properties\".capitalize() == \"message-properties\"\n      \"Message Properties\".capitalize() == \"Message-Properties\"\n*/\nif (!String.prototype.dasherize)\n{\n    String.prototype.dasherize = function()\n    {\n        var str = this;\n        str = str.replace(InflectionJS.space_or_underbar, '-');\n        return '' + str;\n    };\n}\n\n/*\n  This function adds titleize support to every String object\n    Signature:\n      String.titleize() == String\n    Arguments:\n      N/A\n    Returns:\n      String - capitalizes words as you would for a book title\n    Examples:\n      \"message_properties\".titleize() == \"Message Properties\"\n      \"message properties to keep\".titleize() == \"Message Properties to Keep\"\n*/\nif (!String.prototype.titleize)\n{\n    String.prototype.titleize = function()\n    {\n        var str = this.toLowerCase();\n        str = str.replace(InflectionJS.underbar, ' ');\n        var str_arr = str.split(' ');\n        for (var x = 0; x < str_arr.length; x++)\n        {\n            var d = str_arr[x].split('-');\n            for (var i = 0; i < d.length; i++)\n            {\n                if (this._non_titlecased_words.indexOf(d[i].toLowerCase()) < 0)\n                {\n                    d[i] = d[i].capitalize();\n                }\n            }\n            str_arr[x] = d.join('-');\n        }\n        str = str_arr.join(' ');\n        str = str.substring(0, 1).toUpperCase() + str.substring(1);\n        return '' + str;\n    };\n}\n\n/*\n  This function adds demodulize support to every String object\n    Signature:\n      String.demodulize() == String\n    Arguments:\n      N/A\n    Returns:\n      String - removes module names leaving only class names (Ruby style)\n    Examples:\n      \"Message::Bus::Properties\".demodulize() == \"Properties\"\n*/\nif (!String.prototype.demodulize)\n{\n    String.prototype.demodulize = function()\n    {\n        var str = this;\n        var str_arr = str.split('::');\n        str = str_arr[str_arr.length - 1];\n        return '' + str;\n    };\n}\n\n/*\n  This function adds tableize support to every String object\n    Signature:\n      String.tableize() == String\n    Arguments:\n      N/A\n    Returns:\n      String - renders camel cased words into their underscored plural form\n    Examples:\n      \"MessageBusProperty\".tableize() == \"message_bus_properties\"\n*/\nif (!String.prototype.tableize)\n{\n    String.prototype.tableize = function()\n    {\n        var str = this;\n        str = str.underscore().pluralize();\n        return '' + str;\n    };\n}\n\n/*\n  This function adds classification support to every String object\n    Signature:\n      String.classify() == String\n    Arguments:\n      N/A\n    Returns:\n      String - underscored plural nouns become the camel cased singular form\n    Examples:\n      \"message_bus_properties\".classify() == \"MessageBusProperty\"\n*/\nif (!String.prototype.classify)\n{\n    String.prototype.classify = function()\n    {\n        var str = this;\n        str = str.camelize().singularize();\n        return '' + str;\n    };\n}\n\n/*\n  This function adds foreign key support to every String object\n    Signature:\n      String.foreign_key(dropIdUbar) == String\n    Arguments:\n      dropIdUbar - boolean (optional) - default is to seperate id with an\n        underbar at the end of the class name, you can pass true to skip it\n    Returns:\n      String - camel cased singular class names become underscored with id\n    Examples:\n      \"MessageBusProperty\".foreign_key() == \"message_bus_property_id\"\n      \"MessageBusProperty\".foreign_key(true) == \"message_bus_propertyid\"\n*/\nif (!String.prototype.foreign_key)\n{\n    String.prototype.foreign_key = function(dropIdUbar)\n    {\n        var str = this;\n        str = str.demodulize().underscore() + ((dropIdUbar) ? ('') : ('_')) + 'id';\n        return '' + str;\n    };\n}\n\n/*\n  This function adds ordinalize support to every String object\n    Signature:\n      String.ordinalize() == String\n    Arguments:\n      N/A\n    Returns:\n      String - renders all found numbers their sequence like \"22nd\"\n    Examples:\n      \"the 1 pitch\".ordinalize() == \"the 1st pitch\"\n*/\nif (!String.prototype.ordinalize)\n{\n    String.prototype.ordinalize = function()\n    {\n        var str = this;\n        var str_arr = str.split(' ');\n        for (var x = 0; x < str_arr.length; x++)\n        {\n            var i = parseInt(str_arr[x], 10);\n            if (!isNaN(i))\n            {\n                var ltd = str_arr[x].substring(str_arr[x].length - 2);\n                var ld = str_arr[x].substring(str_arr[x].length - 1);\n                var suf = \"th\";\n                if (ltd != \"11\" && ltd != \"12\" && ltd != \"13\")\n                {\n                    if (ld === \"1\")\n                    {\n                        suf = \"st\";\n                    }\n                    else if (ld === \"2\")\n                    {\n                        suf = \"nd\";\n                    }\n                    else if (ld === \"3\")\n                    {\n                        suf = \"rd\";\n                    }\n                }\n                str_arr[x] += suf;\n            }\n        }\n        str = str_arr.join(' ');\n        return '' + str;\n    };\n}\n"
  },
  {
    "path": "public/vendor/laravel-translation-manager/js/rails.async.js",
    "content": "/**\n * Unobtrusive scripting adapter for jQuery\n *\n * Requires jQuery 1.6.0 or later.\n * https://github.com/rails/jquery-ujs\n * Uploading file using rails.js\n * =============================\n *\n * By default, browsers do not allow files to be uploaded via AJAX. As a result, if there are any non-blank file fields\n * in the remote form, this adapter aborts the AJAX submission and allows the form to submit through standard means.\n *\n * The `ajax:aborted:file` event allows you to bind your own handler to process the form submission however you wish.\n *\n * Ex:\n *     $('form').live('ajax:aborted:file', function(event, elements){\n *       // Implement own remote file-transfer handler here for non-blank file inputs passed in `elements`.\n *       // Returning false in this handler tells rails.js to disallow standard form submission\n *       return false;\n *     });\n *\n * The `ajax:aborted:file` event is fired when a file-type input is detected with a non-blank value.\n *\n * Third-party tools can use this hook to detect when an AJAX file upload is attempted, and then use\n * techniques like the iframe method to upload the file instead.\n *\n * Required fields in rails.js\n * ===========================\n *\n * If any blank required inputs (required=\"required\") are detected in the remote form, the whole form submission\n * is canceled. Note that this is unlike file inputs, which still allow standard (non-AJAX) form submission.\n *\n * The `ajax:aborted:required` event allows you to bind your own handler to inform the user of blank required inputs.\n *\n * !! Note that Opera does not fire the form's submit event if there are blank required inputs, so this event may never\n *    get fired in Opera. This event is what causes other browsers to exhibit the same submit-aborting behavior.\n *\n * Ex:\n *     $('form').live('ajax:aborted:required', function(event, elements){\n *       // Returning false in this handler tells rails.js to submit the form anyway.\n *       // The blank required inputs are passed to this function in `elements`.\n *       return ! confirm(\"Would you like to submit the form with missing info?\");\n *     });\n */\n\n(function($, undefined) {\n    // Shorthand to make it a little easier to call public rails functions from within rails.js\n    var rails;\n\n    $.rails = rails = {\n        // Link elements bound by jquery-ujs\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]',\n\n        // Select elements bound by jquery-ujs\n        selectChangeSelector: 'select[data-remote]',\n\n        // Form elements bound by jquery-ujs\n        formSubmitSelector: 'form',\n\n        // Form input elements bound by jquery-ujs\n        formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type])',\n\n        // Form input elements disabled during form submission\n        disableSelector: 'input[data-disable-with], button[data-disable-with], textarea[data-disable-with]',\n\n        // Form input elements re-enabled after form submission\n        enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled',\n\n        // Form required input elements\n        requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])',\n\n        // Form file input elements\n        fileInputSelector: 'input:file',\n\n        // Make sure that every Ajax request sends the CSRF token\n        CSRFProtection: function(xhr) {\n            var token = $('meta[name=\"csrf-token\"]').attr('content');\n            if (token) xhr.setRequestHeader('X-CSRF-Token', token);\n        },\n\n        // Triggers an event on an element and returns false if the event result is false\n        fire: function(obj, name, data) {\n            var event = $.Event(name);\n            obj.trigger(event, data);\n            return event.result !== false;\n        },\n\n        resolveOrReject: function(deferred, resolved) {\n            if (resolved) {\n                deferred.resolve();\n            } else {\n                deferred.reject();\n            }\n            return deferred;\n        },\n\n        // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm\n        confirm: function(message) {\n            var res = confirm(message),\n                answer = $.Deferred();\n\n            rails.resolveOrReject(answer, res);\n            return answer.promise();\n        },\n\n        // Default ajax function, may be overridden with custom function in $.rails.ajax\n        ajax: function(options) {\n            return $.ajax(options);\n        },\n\n        // Submits \"remote\" forms and links with ajax\n        handleRemote: function(element) {\n            var method, url, data, button,\n                crossDomain = element.data('cross-domain') || null,\n                dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType),\n                options;\n\n            if (rails.fire(element, 'ajax:before')) {\n\n                if (element.is('form')) {\n                    method = element.attr('method');\n                    url = element.attr('action');\n                    data = element.serializeArray();\n                    // memoized value from clicked submit button\n                    button = element.data('ujs:submit-button');\n                    if (button) {\n                        data.push(button);\n                        element.data('ujs:submit-button', null);\n                    }\n                } else if (element.is('select')) {\n                    method = element.data('method');\n                    url = element.data('url');\n                    data = element.serialize();\n                    if (element.data('params')) data = data + \"&\" + element.data('params');\n                } else {\n                    method = element.data('method');\n                    url = element.attr('href');\n                    data = element.data('params') || null;\n                }\n\n                options = {\n                    type: method || 'GET', data: data, dataType: dataType, crossDomain: crossDomain,\n                    // stopping the \"ajax:beforeSend\" event will cancel the ajax request\n                    beforeSend: function(xhr, settings) {\n                        if (settings.dataType === undefined) {\n                            xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);\n                        }\n                        return rails.fire(element, 'ajax:beforeSend', [xhr, settings]);\n                    },\n                    success: function(data, status, xhr) {\n                        element.trigger('ajax:success', [data, status, xhr]);\n                    },\n                    complete: function(xhr, status) {\n                        element.trigger('ajax:complete', [xhr, status]);\n                    },\n                    error: function(xhr, status, error) {\n                        element.trigger('ajax:error', [xhr, status, error]);\n                    }\n                };\n                // Only pass url to `ajax` options if not blank\n                if (url) { options.url = url; }\n\n                rails.ajax(options);\n            }\n        },\n\n        // Handles \"data-method\" on links such as:\n        // <a href=\"/users/5\" data-method=\"delete\" rel=\"nofollow\" data-confirm=\"Are you sure?\">Delete</a>\n        handleMethod: function(link) {\n            var href = link.attr('href'),\n                method = link.data('method') || 'GET',\n                csrf_token = $('meta[name=csrf-token]').attr('content'),\n                csrf_param = $('meta[name=csrf-param]').attr('content'),\n                form = $('<form></form>', { action: href, method: method, 'data-ujs-generated': 'true' }),\n                metadata_input = '';\n\n            if (method !== 'GET') {\n                form.attr('method', 'POST');\n                metadata_input += '<input name=\"_method\" value=\"' + method + '\" type=\"hidden\" />';\n\n                if (csrf_param !== undefined && csrf_token !== undefined) {\n                    metadata_input += '<input name=\"' + csrf_param + '\" value=\"' + csrf_token + '\" type=\"hidden\" />';\n                }\n            }\n\n            form.hide().append(metadata_input).appendTo('body');\n            form.submit();\n        },\n\n        /* Disables form elements:\n         - Caches element value in 'ujs:enable-with' data store\n         - Replaces element text with value of 'data-disable-with' attribute\n         - Adds disabled=disabled attribute\n         */\n        disableFormElements: function(form) {\n            form.find(rails.disableSelector).each(function() {\n                var element = $(this),\n                    method = element.is('button') ? 'html' : 'val';\n\n                element.data('ujs:enable-with', element[method]());\n                element[method](element.data('disable-with'));\n                element.attr('disabled', 'disabled');\n            });\n        },\n\n        /* Re-enables disabled form elements:\n         - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)\n         - Removes disabled attribute\n         */\n        enableFormElements: function(form) {\n            form.find(rails.enableSelector).each(function() {\n                var element = $(this),\n                    method = element.is('button') ? 'html' : 'val';\n\n                if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with'));\n                element.removeAttr('disabled');\n            });\n        },\n\n        /* For 'data-confirm' attribute:\n         - Fires `confirm` event\n         - Shows the confirmation dialog\n         - Fires the `confirm:complete` event\n         Returns `true` if no function stops the chain and user chose yes; `false` otherwise.\n         Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.\n         Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function\n         return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.\n         */\n        allowAction: function(element) {\n            var message = element.data('confirm'),\n                confirmAnswer,\n                answer = $.Deferred();\n\n            if (!message) { return $.when(true); }\n\n            if (rails.fire(element, 'confirm')) {\n                confirmAnswer = rails.confirm(message);\n                confirmAnswer.then(\n                    function() {\n                        var callbackOk = rails.fire(element, 'confirm:complete', [ true ]);\n                        rails.resolveOrReject(answer, callbackOk);\n                    },\n                    function() {\n                        rails.fire(element, 'confirm:complete', [ false ]);\n                        answer.reject();\n                    }\n                );\n                return answer.promise();\n                // If `confirm` event handler returned false...\n            } else {\n                answer.reject();\n                return answer.promise();\n            }\n        },\n\n        // Helper function which checks for blank inputs in a form that match the specified CSS selector\n        blankInputs: function(form, specifiedSelector, nonBlank) {\n            var inputs = $(), input,\n                selector = specifiedSelector || 'input,textarea';\n\n            form.find(selector).each(function() {\n                input = $(this);\n                // Collect non-blank inputs if nonBlank option is true, otherwise, collect blank inputs\n                if (nonBlank ? input.val() : !input.val()) {\n                    inputs = inputs.add(input);\n                }\n            });\n            return inputs.length ? inputs : false;\n        },\n\n        // Helper function which checks for non-blank inputs in a form that match the specified CSS selector\n        nonBlankInputs: function(form, specifiedSelector) {\n            return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank\n        },\n\n        // Helper function, needed to provide consistent behavior in IE\n        stopEverything: function(e) {\n            $(e.target).trigger('ujs:everythingStopped');\n            e.stopImmediatePropagation();\n            return false;\n        },\n\n        // find all the submit events directly bound to the form and\n        // manually invoke them. If anyone returns false then stop the loop\n        callFormSubmitBindings: function(form) {\n            var events = form.data('events'), continuePropagation = true;\n\n            if (events !== undefined && events['submit'] !== undefined) {\n                $.each(events['submit'], function(i, obj){\n                    if (typeof obj.handler === 'function') return continuePropagation = obj.handler(obj.data);\n                });\n            }\n            return continuePropagation;\n        }\n    };\n\n    $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});\n\n    $(rails.linkClickSelector).live('click.rails', function(e) {\n        var link = $(this);\n\n        rails.allowAction(link).then(\n            function() {\n                if (link.data('remote') !== undefined) {\n                    rails.handleRemote(link);\n                } else {\n                    rails.handleMethod(link);\n                }\n            },\n            function() {\n                rails.stopEverything(e);\n            }\n        );\n\n        e.preventDefault();\n    });\n\n    $(rails.selectChangeSelector).live('change.rails', function(e) {\n        var link = $(this);\n\n        rails.allowAction(link).then(\n            function() {\n                rails.handleRemote(link);\n            },\n            function() {\n                rails.stopEverything(e);\n            }\n        );\n\n        e.preventDefault();\n    });\n\n    $(rails.formSubmitSelector).live('submit.rails', function(e) {\n        var form = $(this),\n            remote = (form.data('remote') !== undefined),\n            blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector),\n            nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);\n\n        rails.allowAction(form).then(\n            function() {\n                // skip other logic when required values are missing or file upload is present\n                if (blankRequiredInputs && form.attr(\"novalidate\") == undefined && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {\n                    return rails.stopEverything(e);\n                }\n\n                if (remote) {\n                    if (nonBlankFileInputs) {\n                        return rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);\n                    }\n\n                    // If browser does not support submit bubbling, then this live-binding will be called before direct\n                    // bindings. Therefore, we should directly call any direct bindings before remotely submitting form.\n                    if (!$.support.submitBubbles && rails.callFormSubmitBindings(form) === false) return rails.stopEverything(e);\n\n                    rails.handleRemote(form);\n                } else {\n                    // slight timeout so that the submit button gets properly serialized\n                    setTimeout(function() {\n                        rails.disableFormElements(form);\n                        // Submit the form from dom-level js (i.e. *not* via jquery),\n                        // which will skip all submit bindings (including this live-binding),\n                        // since they have already been called.\n                        form.get(0).submit();\n                    }, 13);\n                }\n            },\n            function() {\n                rails.stopEverything(e);\n            }\n        );\n\n        e.preventDefault();\n    });\n\n    $(rails.formInputClickSelector).live('click.rails', function(event) {\n        var button = $(this);\n\n        rails.allowAction(button).then(\n            function() {\n                // register the pressed submit button\n                var name = button.attr('name'), form,\n                    data = name ? {name:name, value:button.val()} : null;\n\n                form = button.closest('form');\n                form.data('ujs:submit-button', data);\n                form.submit();\n            },\n            function() {\n                rails.stopEverything(event);\n            }\n        );\n\n        event.preventDefault();\n    });\n\n    $(rails.formSubmitSelector).live('ajax:beforeSend.rails', function(event) {\n        if (this == event.target) rails.disableFormElements($(this));\n    });\n\n    $(rails.formSubmitSelector).live('ajax:complete.rails', function(event) {\n        if (this == event.target) rails.enableFormElements($(this));\n    });\n\n})( jQuery );\n"
  },
  {
    "path": "public/vendor/laravel-translation-manager/js/rails.js",
    "content": "(function($, undefined) {\n\n    /**\n     * Unobtrusive scripting adapter for jQuery\n     * https://github.com/rails/jquery-ujs\n     *\n     * Requires jQuery 1.8.0 or later.\n     *\n     * Released under the MIT license\n     *\n     */\n\n        // Cut down on the number of issues from people inadvertently including jquery_ujs twice\n        // by detecting and raising an error when it happens.\n    'use strict';\n\n    if ( $.rails !== undefined ) {\n        $.error('jquery-ujs has already been loaded!');\n    }\n\n    // Shorthand to make it a little easier to call public rails functions from within rails.js\n    var rails;\n    var $document = $(document);\n\n    $.rails = rails = {\n        // Link elements bound by jquery-ujs\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote], a[data-disable-with], a[data-disable]',\n\n        // Button elements bound by jquery-ujs\n        buttonClickSelector: 'button[data-remote]:not(form button), button[data-confirm]:not(form button)',\n\n        // Select elements bound by jquery-ujs\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n\n        // Form elements bound by jquery-ujs\n        formSubmitSelector: 'form',\n\n        // Form input elements bound by jquery-ujs\n        formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n\n        // Form input elements disabled during form submission\n        disableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n\n        // Form input elements re-enabled after form submission\n        enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n\n        // Form required input elements\n        requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])',\n\n        // Form file input elements\n        fileInputSelector: 'input[type=file]',\n\n        // Link onClick disable selector with possible reenable after remote submission\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n\n        // Button onClick disable selector with possible reenable after remote submission\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]',\n\n        // Up-to-date Cross-Site Request Forgery token\n        csrfToken: function() {\n            return $('meta[name=csrf-token]').attr('content');\n        },\n\n        // URL param that must contain the CSRF token\n        csrfParam: function() {\n            return $('meta[name=csrf-param]').attr('content');\n        },\n\n        // Make sure that every Ajax request sends the CSRF token\n        CSRFProtection: function(xhr) {\n            var token = rails.csrfToken();\n            if (token) xhr.setRequestHeader('X-CSRF-Token', token);\n        },\n\n        // making sure that all forms have actual up-to-date token(cached forms contain old one)\n        refreshCSRFTokens: function(){\n            $('form input[name=\"' + rails.csrfParam() + '\"]').val(rails.csrfToken());\n        },\n\n        // Triggers an event on an element and returns false if the event result is false\n        fire: function(obj, name, data) {\n            var event = $.Event(name);\n            obj.trigger(event, data);\n            return event.result !== false;\n        },\n\n        // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm\n        confirm: function(message) {\n            return confirm(message);\n        },\n\n        // Default ajax function, may be overridden with custom function in $.rails.ajax\n        ajax: function(options) {\n            return $.ajax(options);\n        },\n\n        // Default way to get an element's href. May be overridden at $.rails.href.\n        href: function(element) {\n            return element[0].href;\n        },\n\n        // Checks \"data-remote\" if true to handle the request through a XHR request.\n        isRemote: function(element) {\n            return element.data('remote') !== undefined && element.data('remote') !== false;\n        },\n\n        // Submits \"remote\" forms and links with ajax\n        handleRemote: function(element) {\n            var method, url, data, withCredentials, dataType, options;\n\n            if (rails.fire(element, 'ajax:before')) {\n                withCredentials = element.data('with-credentials') || null;\n                dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType);\n\n                if (element.is('form')) {\n                    method = element.attr('method');\n                    url = element.attr('action');\n                    data = element.serializeArray();\n                    // memoized value from clicked submit button\n                    var button = element.data('ujs:submit-button');\n                    if (button) {\n                        data.push(button);\n                        element.data('ujs:submit-button', null);\n                    }\n                } else if (element.is(rails.inputChangeSelector)) {\n                    method = element.data('method');\n                    url = element.data('url');\n                    data = element.serialize();\n                    if (element.data('params')) data = data + '&' + element.data('params');\n                } else if (element.is(rails.buttonClickSelector)) {\n                    method = element.data('method') || 'get';\n                    url = element.data('url');\n                    data = element.serialize();\n                    if (element.data('params')) data = data + '&' + element.data('params');\n                } else {\n                    method = element.data('method');\n                    url = rails.href(element);\n                    data = element.data('params') || null;\n                }\n\n                options = {\n                    type: method || 'GET', data: data, dataType: dataType,\n                    // stopping the \"ajax:beforeSend\" event will cancel the ajax request\n                    beforeSend: function(xhr, settings) {\n                        if (settings.dataType === undefined) {\n                            xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);\n                        }\n                        if (rails.fire(element, 'ajax:beforeSend', [xhr, settings])) {\n                            element.trigger('ajax:send', xhr);\n                        } else {\n                            return false;\n                        }\n                    },\n                    success: function(data, status, xhr) {\n                        element.trigger('ajax:success', [data, status, xhr]);\n                    },\n                    complete: function(xhr, status) {\n                        element.trigger('ajax:complete', [xhr, status]);\n                    },\n                    error: function(xhr, status, error) {\n                        element.trigger('ajax:error', [xhr, status, error]);\n                    },\n                    crossDomain: rails.isCrossDomain(url)\n                };\n\n                // There is no withCredentials for IE6-8 when\n                // \"Enable native XMLHTTP support\" is disabled\n                if (withCredentials) {\n                    options.xhrFields = {\n                        withCredentials: withCredentials\n                    };\n                }\n\n                // Only pass url to `ajax` options if not blank\n                if (url) { options.url = url; }\n\n                return rails.ajax(options);\n            } else {\n                return false;\n            }\n        },\n\n        // Determines if the request is a cross domain request.\n        isCrossDomain: function(url) {\n            var originAnchor = document.createElement('a');\n            originAnchor.href = location.href;\n            var urlAnchor = document.createElement('a');\n\n            try {\n                urlAnchor.href = url;\n                // This is a workaround to a IE bug.\n                urlAnchor.href = urlAnchor.href;\n\n                // Make sure that the browser parses the URL and that the protocols and hosts match.\n                return !urlAnchor.protocol || !urlAnchor.host ||\n                    (originAnchor.protocol + '//' + originAnchor.host !==\n                    urlAnchor.protocol + '//' + urlAnchor.host);\n            } catch (e) {\n                // If there is an error parsing the URL, assume it is crossDomain.\n                return true;\n            }\n        },\n\n        // Handles \"data-method\" on links such as:\n        // <a href=\"/users/5\" data-method=\"delete\" rel=\"nofollow\" data-confirm=\"Are you sure?\">Delete</a>\n        handleMethod: function(link) {\n            var href = rails.href(link),\n                method = link.data('method'),\n                target = link.attr('target'),\n                csrfToken = rails.csrfToken(),\n                csrfParam = rails.csrfParam(),\n                form = $('<form method=\"post\" action=\"' + href + '\"></form>'),\n                metadataInput = '<input name=\"_method\" value=\"' + method + '\" type=\"hidden\" />';\n\n            if (csrfParam !== undefined && csrfToken !== undefined && !rails.isCrossDomain(href)) {\n                metadataInput += '<input name=\"' + csrfParam + '\" value=\"' + csrfToken + '\" type=\"hidden\" />';\n            }\n\n            if (target) { form.attr('target', target); }\n\n            form.hide().append(metadataInput).appendTo('body');\n            form.submit();\n        },\n\n        // Helper function that returns form elements that match the specified CSS selector\n        // If form is actually a \"form\" element this will return associated elements outside the from that have\n        // the html form attribute set\n        formElements: function(form, selector) {\n            return form.is('form') ? $(form[0].elements).filter(selector) : form.find(selector);\n        },\n\n        /* Disables form elements:\n         - Caches element value in 'ujs:enable-with' data store\n         - Replaces element text with value of 'data-disable-with' attribute\n         - Sets disabled property to true\n         */\n        disableFormElements: function(form) {\n            rails.formElements(form, rails.disableSelector).each(function() {\n                rails.disableFormElement($(this));\n            });\n        },\n\n        disableFormElement: function(element) {\n            var method, replacement;\n\n            method = element.is('button') ? 'html' : 'val';\n            replacement = element.data('disable-with');\n\n            element.data('ujs:enable-with', element[method]());\n            if (replacement !== undefined) {\n                element[method](replacement);\n            }\n\n            element.prop('disabled', true);\n        },\n\n        /* Re-enables disabled form elements:\n         - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)\n         - Sets disabled property to false\n         */\n        enableFormElements: function(form) {\n            rails.formElements(form, rails.enableSelector).each(function() {\n                rails.enableFormElement($(this));\n            });\n        },\n\n        enableFormElement: function(element) {\n            var method = element.is('button') ? 'html' : 'val';\n            if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with'));\n            element.prop('disabled', false);\n        },\n\n        /* For 'data-confirm' attribute:\n         - Fires `confirm` event\n         - Shows the confirmation dialog\n         - Fires the `confirm:complete` event\n         Returns `true` if no function stops the chain and user chose yes; `false` otherwise.\n         Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.\n         Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function\n         return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.\n         */\n        allowAction: function(element) {\n            var message = element.data('confirm'),\n                answer = false, callback;\n            if (!message) { return true; }\n\n            if (rails.fire(element, 'confirm')) {\n                try {\n                    answer = rails.confirm(message);\n                } catch (e) {\n                    (console.error || console.log).call(console, e.stack || e);\n                }\n                callback = rails.fire(element, 'confirm:complete', [answer]);\n            }\n            return answer && callback;\n        },\n\n        // Helper function which checks for blank inputs in a form that match the specified CSS selector\n        blankInputs: function(form, specifiedSelector, nonBlank) {\n            var inputs = $(), input, valueToCheck,\n                selector = specifiedSelector || 'input,textarea',\n                allInputs = form.find(selector);\n\n            allInputs.each(function() {\n                input = $(this);\n                valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : !!input.val();\n                if (valueToCheck === nonBlank) {\n\n                    // Don't count unchecked required radio if other radio with same name is checked\n                    if (input.is('input[type=radio]') && allInputs.filter('input[type=radio]:checked[name=\"' + input.attr('name') + '\"]').length) {\n                        return true; // Skip to next input\n                    }\n\n                    inputs = inputs.add(input);\n                }\n            });\n            return inputs.length ? inputs : false;\n        },\n\n        // Helper function which checks for non-blank inputs in a form that match the specified CSS selector\n        nonBlankInputs: function(form, specifiedSelector) {\n            return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank\n        },\n\n        // Helper function, needed to provide consistent behavior in IE\n        stopEverything: function(e) {\n            $(e.target).trigger('ujs:everythingStopped');\n            e.stopImmediatePropagation();\n            return false;\n        },\n\n        //  replace element's html with the 'data-disable-with' after storing original html\n        //  and prevent clicking on it\n        disableElement: function(element) {\n            var replacement = element.data('disable-with');\n\n            element.data('ujs:enable-with', element.html()); // store enabled state\n            if (replacement !== undefined) {\n                element.html(replacement);\n            }\n\n            element.bind('click.railsDisable', function(e) { // prevent further clicking\n                return rails.stopEverything(e);\n            });\n        },\n\n        // restore element to its original state which was disabled by 'disableElement' above\n        enableElement: function(element) {\n            if (element.data('ujs:enable-with') !== undefined) {\n                element.html(element.data('ujs:enable-with')); // set to old enabled state\n                element.removeData('ujs:enable-with'); // clean up cache\n            }\n            element.unbind('click.railsDisable'); // enable element\n        }\n    };\n\n    if (rails.fire($document, 'rails:attachBindings')) {\n\n        $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});\n\n        // This event works the same as the load event, except that it fires every\n        // time the page is loaded.\n        //\n        // See https://github.com/rails/jquery-ujs/issues/357\n        // See https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching\n        $(window).on('pageshow.rails', function () {\n            $($.rails.enableSelector).each(function () {\n                var element = $(this);\n\n                if (element.data('ujs:enable-with')) {\n                    $.rails.enableFormElement(element);\n                }\n            });\n\n            $($.rails.linkDisableSelector).each(function () {\n                var element = $(this);\n\n                if (element.data('ujs:enable-with')) {\n                    $.rails.enableElement(element);\n                }\n            });\n        });\n\n        $document.delegate(rails.linkDisableSelector, 'ajax:complete', function() {\n            rails.enableElement($(this));\n        });\n\n        $document.delegate(rails.buttonDisableSelector, 'ajax:complete', function() {\n            rails.enableFormElement($(this));\n        });\n\n        $document.delegate(rails.linkClickSelector, 'click.rails', function(e) {\n            var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey;\n            if (!rails.allowAction(link)) return rails.stopEverything(e);\n\n            if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link);\n\n            if (rails.isRemote(link)) {\n                if (metaClick && (!method || method === 'GET') && !data) { return true; }\n\n                var handleRemote = rails.handleRemote(link);\n                // response from rails.handleRemote() will either be false or a deferred object promise.\n                if (handleRemote === false) {\n                    rails.enableElement(link);\n                } else {\n                    handleRemote.fail( function() { rails.enableElement(link); } );\n                }\n                return false;\n\n            } else if (method) {\n                rails.handleMethod(link);\n                return false;\n            }\n        });\n\n        $document.delegate(rails.buttonClickSelector, 'click.rails', function(e) {\n            var button = $(this);\n\n            if (!rails.allowAction(button) || !rails.isRemote(button)) return rails.stopEverything(e);\n\n            if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button);\n\n            var handleRemote = rails.handleRemote(button);\n            // response from rails.handleRemote() will either be false or a deferred object promise.\n            if (handleRemote === false) {\n                rails.enableFormElement(button);\n            } else {\n                handleRemote.fail( function() { rails.enableFormElement(button); } );\n            }\n            return false;\n        });\n\n        $document.delegate(rails.inputChangeSelector, 'change.rails', function(e) {\n            var link = $(this);\n            if (!rails.allowAction(link) || !rails.isRemote(link)) return rails.stopEverything(e);\n\n            rails.handleRemote(link);\n            return false;\n        });\n\n        $document.delegate(rails.formSubmitSelector, 'submit.rails', function(e) {\n            var form = $(this),\n                remote = rails.isRemote(form),\n                blankRequiredInputs,\n                nonBlankFileInputs;\n\n            if (!rails.allowAction(form)) return rails.stopEverything(e);\n\n            // skip other logic when required values are missing or file upload is present\n            if (form.attr('novalidate') === undefined) {\n                blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector, false);\n                if (blankRequiredInputs && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {\n                    return rails.stopEverything(e);\n                }\n            }\n\n            if (remote) {\n                nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);\n                if (nonBlankFileInputs) {\n                    // slight timeout so that the submit button gets properly serialized\n                    // (make it easy for event handler to serialize form without disabled values)\n                    setTimeout(function(){ rails.disableFormElements(form); }, 13);\n                    var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);\n\n                    // re-enable form elements if event bindings return false (canceling normal form submission)\n                    if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); }\n\n                    return aborted;\n                }\n\n                rails.handleRemote(form);\n                return false;\n\n            } else {\n                // slight timeout so that the submit button gets properly serialized\n                setTimeout(function(){ rails.disableFormElements(form); }, 13);\n            }\n        });\n\n        $document.delegate(rails.formInputClickSelector, 'click.rails', function(event) {\n            var button = $(this);\n\n            if (!rails.allowAction(button)) return rails.stopEverything(event);\n\n            // register the pressed submit button\n            var name = button.attr('name'),\n                data = name ? {name:name, value:button.val()} : null;\n\n            button.closest('form').data('ujs:submit-button', data);\n        });\n\n        $document.delegate(rails.formSubmitSelector, 'ajax:send.rails', function(event) {\n            if (this === event.target) rails.disableFormElements($(this));\n        });\n\n        $document.delegate(rails.formSubmitSelector, 'ajax:complete.rails', function(event) {\n            if (this === event.target) rails.enableFormElements($(this));\n        });\n\n        $(function(){\n            rails.refreshCSRFTokens();\n        });\n    }\n\n})( jQuery );\n"
  },
  {
    "path": "public/vendor/laravel-translation-manager/js/translations.js",
    "content": "/*jshint browser: true, jquery: true*/\n/**\n * Created by vlad on 15-02-10.\n */\nvar CLIP_TEXT;\nvar YANDEX_TRANSLATOR_KEY;\nvar URL_YANDEX_TRANSLATOR_KEY;\nvar PRIMARY_LOCALE;\nvar CURRENT_LOCALE;\nvar TRANSLATING_LOCALE;\nvar xtranslateText;\nvar xtranslateService;\nvar MARKDOWN_KEY_SUFFIX;\n\nvar MISMATCHED_QUOTES_MESSAGE;\nvar TITLE_SAVE_CHANGES;\nvar TITLE_CANCEL_CHANGES;\nvar TITLE_TRANSLATE;\nvar TITLE_CONVERT_KEY;\nvar TITLE_GENERATE_PLURALS;\nvar TITLE_CLEAN_HTML_MARKDOWN;\nvar TITLE_CAPITALIZE;\nvar TITLE_LOWERCASE;\nvar TITLE_CAPITALIZE_FIRST_WORD;\nvar TITLE_SIMULATED_COPY;\nvar TITLE_SIMULATED_PASTE;\nvar TITLE_RESET_EDITOR;\nvar TITLE_LOAD_LAST;\nvar countRegEx = /:count\\s+/;\n\nfunction swapInClass(elem, toAdd, toRemove) {\n    'use strict';\n    return elem.removeClass(toRemove).addClass(toAdd);\n}\n\nfunction swapOutClass(elem, toRemove, toAdd) {\n    'use strict';\n    return elem.removeClass(toRemove).addClass(toAdd);\n}\n\nfunction swapClass(elem, swapDir, toAdd, toRemove) {\n    'use strict';\n    return swapDir ? swapInClass(elem, toAdd, toRemove) : swapOutClass(elem, toAdd, toRemove);\n}\n\nString.prototype.toCapitalCase = function () {\n    \"use strict\";\n    return this.toLowerCase().replace(/(?:^|\\s)\\S/g, function (a) {\n        return a.toUpperCase();\n    });\n};\n\nString.prototype.toLocaleCapitalCase = function () {\n    \"use strict\";\n    return this.toLocaleLowerCase().replace(/(?:^|\\s)\\S/g, function (a) {\n        return a.toLocaleUpperCase();\n    });\n};\n\nString.prototype.toLocaleProperCase = function () {\n    \"use strict\";\n    return this.toLocaleLowerCase().replace(/(?:^)\\S/, function (a) {\n        return a.toLocaleUpperCase();\n    });\n};\n\nString.prototype.toLocaleProperCaseOrLowerCase = function () {\n    \"use strict\";\n    return this.substr(0, 1) + this.substr(1).toLocaleLowerCase();\n};\n\nfunction translateYandex(fromLoc, fromText, toLoc, onTranslate) {\n    var ERR_OK = 200,\n        ERR_KEY_INVALID = 401,\n        ERR_KEY_BLOCKED = 402,\n        ERR_DAILY_REQ_LIMIT_EXCEEDED = 403,\n        ERR_DAILY_CHAR_LIMIT_EXCEEDED = 404,\n        ERR_TEXT_TOO_LONG = 413,\n        ERR_UNPROCESSABLE_TEXT = 422,\n        ERR_LANG_NOT_SUPPORTED = 501,\n        errCodes = {\n            200: 'Operation completed successfully.',\n            401: 'Invalid API key.',\n            402: 'This API key has been blocked.',\n            403: 'You have reached the daily limit for requests (including calls of the detect method).',\n            404: 'You have reached the daily limit for the volume of translated text (including calls of the detect method).',\n            413: 'The text size exceeds the maximum.',\n            422: 'The text could not be translated.',\n            501: 'The specified translation direction is not supported.'\n        };\n\n    var jqxhr = $.getJSON(\"https://translate.yandex.net/api/v1.5/tr.json/translate\", {\n            key: YANDEX_TRANSLATOR_KEY,\n            lang: fromLoc + '-' + toLoc,\n            text: fromText\n        },\n        function (json) {\n            if (json.code === ERR_OK) {\n                onTranslate(json.text.join(\"\\n\"));\n            }\n            else {\n                window.console.log(\"Yandex API: \" + json.code + ': ' + errCodes[json.code] + \"\\n\");\n            }\n        });\n\n    jqxhr.done(function () {\n    });\n\n    jqxhr.fail(function () {\n    });\n}\n\nfunction startsWithWord2(word1, word2, prefix) {\n    return word2.toLocaleLowerCase().indexOf(prefix) === 0 && word1.toLocaleLowerCase().indexOf(prefix) !== 0;\n}\n\nfunction extractSecondWord(text) {\n    var word1, word2, pos = text.indexOf(' ');\n\n    if (pos !== -1) {\n        word1 = text.substr(0, pos);\n        word2 = text.substr(pos + 1);\n        if (startsWithWord2(word1, word2, 'од') || startsWithWord2(word1, word2, 'дв') || startsWithWord2(word1, word2, 'пя')) {\n            text = word1;\n        } else {\n            text = word2;\n        }\n    }\n    return text;\n}\n\nfunction extractPluralForm(pluralForms, index) {\n    if (pluralForms.length > index) {\n        return extractSecondWord(pluralForms[index]);\n    }\n    return '';\n}\n\nxtranslateService = translateYandex;\nxtranslateText = function (translator, srcLoc, srcText, dstLoc, processText) {\n    var pos, single, plural, havePlural, src = srcText;\n    var hadSingleCount = false;\n    var hadPluralCount = false;\n\n    if ((pos = srcText.indexOf('|')) !== -1) {\n        // have pluralization\n        single = srcText.substr(0, pos);\n        plural = srcText.substr(pos + 1);\n\n        if (single.match(countRegEx)) {\n            single = single.replace(countRegEx, '');\n            hadSingleCount = true;\n        }\n        if (plural.match(countRegEx)) {\n            plural = plural.replace(countRegEx, '');\n            hadPluralCount = true;\n        }\n        src = 'one ' + single + '\\ntwo ' + plural + '\\nfive ' + plural;\n        havePlural = true;\n    }\n\n    // convert all occurrences of :parameter to {{#}} where # is the parameter number and store the parameter at index #\n    // that way they won't be mangled by translation and we can restore them back on return.\n    var lastPos = 0, params = [], haveParams, matches, regexParam = /\\:([a-zA-Z0-9_-]*)(?=[^a-zA-Z0-9_-]|$)/g,\n        result = '', paramIndex = 0;\n\n    while ((matches = regexParam.exec(src)) !== null) {\n        var param = matches[1];\n\n        if (!(paramIndex = params.indexOf(param) + 1)) {\n            params.push(param);\n            paramIndex = params.length;\n        }\n\n        result += src.substr(lastPos, matches.index - lastPos);\n        result += '{{' + paramIndex + '}}';\n        lastPos = regexParam.lastIndex;\n    }\n\n    if (paramIndex) {\n        result += src.substr(lastPos, src.length);\n        src = result;\n    }\n\n    translator(srcLoc, src, dstLoc, function (text) {\n        var single, plural, plural2, pluralForms, trans, regexIndex = /\\{\\{[0-9]*\\}\\}/g;\n\n        if (paramIndex) {\n            text = text.replace(regexIndex, function (index) {\n                return ':' + params[parseInt(index.substr(2, index.length - 4)) - 1];\n            });\n        }\n\n        if (havePlural) {\n            trans = text.replace(/$\\s*/mg, '|');\n            if (trans.substr(trans.length - 1, 1) === '|') {\n                trans = trans.substr(0, trans.length - 1);\n            }\n\n            pluralForms = text.split('\\n', 3);\n            single = extractPluralForm(pluralForms, 0);\n            plural = extractPluralForm(pluralForms, 1);\n            var singlePrefix = hadSingleCount ? ':count ' : '';\n            var pluralPrefix = hadPluralCount ? ':count ' : '';\n\n            if (dstLoc === 'ru') {\n                plural2 = extractPluralForm(pluralForms, 2);\n                text = singlePrefix + single + '|' + pluralPrefix + plural + '|' + pluralPrefix + plural2;\n            }\n            else {\n                // TODO: have to handle other plural forms for complex locales\n                text = singlePrefix + single + '|' + pluralPrefix + plural;\n            }\n        }\n        processText(text, trans);\n    });\n};\n\n$(document).ready(function () {\n    'use strict';\n    var elem;\n\n    $.ajaxPrefilter(function (options) {\n        if (!options.crossDomain) {\n            options.headers = {\n                'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n            };\n            //window.console.log('Injected CSRF: ' + $('meta[name=\"csrf-token\"]').attr('content'));\n        }\n    });\n\n    if (URL_YANDEX_TRANSLATOR_KEY) {\n        $.ajax({\n            type: 'POST',\n            url: URL_YANDEX_TRANSLATOR_KEY,\n            data: {},\n            success: function (json) {\n                if (json.status === 'ok') {\n                    YANDEX_TRANSLATOR_KEY = json.yandex_key;\n                }\n            },\n            encode: true\n        });\n    }\n\n    function validateXEdit(value) {\n        // check for open or mismatched quotes in href=  and src=, attributes if any\n        var regex = /\\b(href=|src=)\\s*(\"|')?([^\"'>]*)(\"|')?/;\n        var regexErr = /:string/g;\n        var message = MISMATCHED_QUOTES_MESSAGE || \"mismatched or missing quotes in :string attribute\";\n        var messages = [];\n        var offs = 0, pos;\n        var matches, val = value, maxlen = value.length;\n        var elemDivErr;\n\n        while (offs < maxlen && (pos = val.indexOf('href=', offs)) !== -1 || (pos = val.indexOf('src=', offs)) !== -1) {\n            offs = pos;\n            val = val.substr(offs > 0 ? offs - 1 : 0);\n            matches = val.match(regex);\n            if (!matches) {\n                break;\n            }\n            // see if any are mismatched or missing\n            if (matches[2] === undefined || matches[2] !== matches[4]) {\n                messages.push(message.replace(regexErr, matches[0]));\n            }\n            offs += matches[0].length;\n        }\n        if (messages.length) {\n            elemDivErr = $(\".editableform .editable-error-block\");\n            if (elemDivErr.length) {\n                window.setTimeout(function () {\n                    elemDivErr.html(val);\n                }, 50);\n            }\n            val = \"<ul><li>\" + messages.join('</li><li>') + \"</li></ul>\";\n            return \" \";\n        }\n    }\n\n    $.fn.editableContainer.defaults.placement = 'top';\n    $.fn.editableContainer.defaults.onblur = 'submit';\n    $.fn.editableContainer.defaults.validate = function (value) {\n        return validateXEdit(value);\n    };\n\n    $.fn.editableform.template = '' +\n        '<form class=\"form-inline editableform\">' +\n        '<div class=\"control-group\">' +\n        ' <div>' +\n        '  <div class=\"editable-buttons\" style=\"display: block\"></div>' +\n        '  <div id=\"x-trans-edit\" class=\"editable-input\"></div>' +\n        '  <div class=\"editable-error-block\"></div>' +\n        ' </div>' +\n        '</div>' +\n        '</form>';\n\n    var title_save_changes = TITLE_SAVE_CHANGES || \"Save changes\";\n    var title_cancel_changes = TITLE_CANCEL_CHANGES || \"Cancel changes\";\n    var title_translate = TITLE_TRANSLATE || \"Translate\";\n    var title_convert_key = TITLE_CONVERT_KEY || \"Convert translation key to text\";\n    // var title_generate_plurals = TITLE_GENERATE_PLURALS || \"Generate plural forms\";\n    var title_generate_plurals = TITLE_GENERATE_PLURALS || \"Generate plural forms with :count\";\n    var title_clean_html_markdown = TITLE_CLEAN_HTML_MARKDOWN || \"Clean HTML markdown\";\n    var title_capitalize = TITLE_CAPITALIZE || \"Capitalize text\";\n    var title_lowercase = TITLE_LOWERCASE || \"Lowercase text\";\n    var title_capitalize_first_word = TITLE_CAPITALIZE_FIRST_WORD || \"Capitalize first word\";\n    var title_simulated_copy = TITLE_SIMULATED_COPY || \"Copy text to simulated clipboard (page refresh clears contents)\";\n    var title_simulated_paste = TITLE_SIMULATED_PASTE || \"Paste text from simulated clipboard\";\n    var title_reset_editor = TITLE_RESET_EDITOR || \"Reset editor contents\";\n    var title_load_last = TITLE_LOAD_LAST || \"Load last published/imported value\";\n\n    $.fn.editableform.buttons = '' +\n        '<button type=\"submit\" title=\"' + title_save_changes + '\" id=\"x-submit\" class=\"editable-submit btn btn-sm btn-success\"><i class=\"glyphicon glyphicon-ok\"></i></button>' +\n        '&nbsp;<button type=\"button\" title=\"' + title_cancel_changes + '\" id=\"x-cancel\" class=\"editable-cancel btn btn-sm btn-danger\"><i class=\"glyphicon glyphicon-remove\"></i></button>' +\n        '&nbsp;&nbsp;<button id=\"x-translate\" type=\"button\" title=\"' + title_translate + '\" class=\"editable-translate btn btn-sm btn-warning hidden\"><i class=\"glyphicon glyphicon-share-alt\"></i></button>' +\n        '<button id=\"x-nodash\" type=\"button\" title=\"' + title_convert_key + '\" class=\"editable-translate btn btn-sm btn-warning hidden\">❉ <i class=\"glyphicon glyphicon-share-alt\"></i> Ab</button>' +\n        '&nbsp;&nbsp;<button id=\"x-plurals\" type=\"button\" title=\"' + title_generate_plurals + '\" class=\"editable-translate btn btn-sm btn-warning hidden\">|</i></button>' +\n        '<button id=\"x-plurals-count\" type=\"button\" title=\"' + title_generate_plurals + '\" class=\"editable-translate btn btn-sm btn-warning hidden\">|:</i></button>' +\n        '<button id=\"x-clean-markdown\" type=\"button\" title=\"' + title_clean_html_markdown + '\" class=\"editable-translate btn btn-sm btn-warning hidden\"><i class=\"glyphicon glyphicon-flash\"></i></button>' +\n        '&nbsp;&nbsp;<button id=\"x-capitalize\" type=\"button\" title=\"' + title_capitalize + '\" class=\"editable-translate btn btn-sm btn-info\">ab <i class=\"glyphicon glyphicon-share-alt\"></i> Ab</button>' +\n        '<button id=\"x-lowercase\" type=\"button\" title=\"' + title_lowercase + '\" class=\"editable-translate btn btn-sm btn-info\">AB <i class=\"glyphicon glyphicon-share-alt\"></i> ab</button>' +\n        '<button id=\"x-propcap\" type=\"button\" title=\"' + title_capitalize_first_word + '\" class=\"editable-translate btn btn-sm btn-info\">A B <i class=\"glyphicon glyphicon-share-alt\"></i> A b</button>' +\n        '&nbsp;&nbsp;<button id=\"x-copy\" type=\"button\" title=\"' + title_simulated_copy + '\" class=\"editable-translate btn btn-sm btn-primary\"><i class=\"glyphicon glyphicon-copy\"></i></button>' +\n        '<button id=\"x-paste\" type=\"button\" title=\"' + title_simulated_paste + '\" class=\"editable-translate btn btn-sm btn-primary\"><i class=\"glyphicon glyphicon-paste\"></i></button>' +\n        '&nbsp;&nbsp;<button id=\"x-reset-open\" type=\"button\" title=\"' + title_reset_editor + '\" class=\"editable-translate btn btn-sm btn-success\"><i class=\"glyphicon glyphicon-open\"></i></button>' +\n        '<button id=\"x-reset-saved\" type=\"button\" title=\"' + title_load_last + '\" class=\"editable-translate btn btn-sm btn-success\"><i class=\"glyphicon glyphicon-floppy-open\"></i></button>' +\n        '<br>&nbsp;';\n\n    function textAreaSelectedText(elemTextArea) {\n        var selectedText;\n        // IE version\n        if (document.selection !== undefined) {\n            elemTextArea.focus();\n            var sel = document.selection.createRange();\n            selectedText = sel.text;\n            return selectedText;\n        }\n        // Mozilla version\n        else {\n            if (elemTextArea.selectionStart !== undefined) {\n                var startPos = elemTextArea.selectionStart;\n                var endPos = elemTextArea.selectionEnd;\n                selectedText = elemTextArea.value.substring(startPos, endPos);\n                return selectedText;\n            }\n        }\n    }\n\n    $.fn.editableform.formElements = function (elem) {\n        var divElem = $(elem).find('+ div.editable-container');\n        if (divElem.length > 0) {\n            return {\n                elemInput: divElem.find('#x-trans-edit').first().find('textarea.editable-input').first(),\n                elemError: divElem.find('.editable-error-block').first(),\n                btnTranslate: divElem.find('#x-translate').first(),\n                btnCapitalize: divElem.find('#x-capitalize').first(),\n                btnLowercase: divElem.find('#x-lowercase').first(),\n                btnPlurals: divElem.find('#x-plurals').first(),\n                btnPluralsCount: divElem.find('#x-plurals-count').first(),\n                btnPropCap: divElem.find('#x-propcap').first(),\n                btnNoDash: divElem.find('#x-nodash').first(),\n                btnCopy: divElem.find('#x-copy').first(),\n                btnPaste: divElem.find('#x-paste').first(),\n                btnResetOpen: divElem.find('#x-reset-open').first(),\n                btnResetSaved: divElem.find('#x-reset-saved').first(),\n                btnCleanMarkdown: divElem.find('#x-clean-markdown').first()\n            };\n        }\n        return null;\n    };\n\n    var srcText, srcLoc, dstLoc, dstElem, elemRow, inEditable = 0,\n        xtranslate = function (srcLoc, srcText, dstLoc, dstElem, errElem) {\n            return function () {\n                xtranslateText(xtranslateService, srcLoc, srcText, dstLoc, function (result, trans) {\n                    if (trans) {\n                        errElem.html(trans);\n                        errElem.css('display', 'block');\n                    }\n                    dstElem.val(result);\n                    dstElem.focus();\n                });\n            };\n        },\n        xedit = function (dstElem, editOp, params) {\n            return function () {\n                var sel = textAreaSelectedText(dstElem[0]);\n                if (sel) {\n                    dstElem.selection('replace', { text: editOp.apply(sel, params) });\n                }\n                else {\n                    dstElem.val(editOp.apply(dstElem.val(), params));\n                }\n                dstElem.focus();\n            };\n        },\n        xeditplurals = function (dstElem, editOp, params) {\n            return function () {\n                var sel = textAreaSelectedText(dstElem[0]);\n                if (sel) {\n                    dstElem.selection('replace', { text: editOp.apply(sel, params) });\n                }\n                else {\n                    var pluralForms;\n\n                    if (dstElem.val().indexOf('|') !== -1) {\n                        pluralForms = dstElem.val().split('|');\n                        pluralForms.forEach(function (val, index, arr) {\n                            arr[index] = editOp.apply(val, params);\n                        });\n\n                        dstElem.val(pluralForms.join('|'));\n                    }\n                    else {\n                        dstElem.val(editOp.apply(dstElem.val(), params));\n                    }\n                }\n                dstElem.focus();\n            };\n        },\n        xfull = function (dstElem, editOp, params) {\n            return function () {\n                dstElem.val(editOp.apply(dstElem.val(), params));\n                dstElem.focus();\n            };\n        };\n\n    $.fn.vsch_editable = function (options) {\n        var defaults = {},\n            settings = $.extend({}, defaults, options);\n\n        this.each(function () {\n            var elem = $(this);\n            var top = elem.offset().top;\n\n            if (top < 300) {\n                elem.editable({ placement: 'bottom' });\n            }\n            else {\n                elem.editable({ placement: 'top' });\n            }\n\n            elem.editable().off('hidden');\n            elem.editable().on('hidden.vsch', function (e, reason) {\n                var locale = $(this).data('locale');\n                var elemRow = $(this).parents('tr').first();\n                var trans = elemRow.find('a.vsch_editable'), tmp;\n\n                if (reason === 'save') {\n                    $(this).removeClass('status-0').addClass('status-1');\n                }\n                if (reason === 'save' || reason === 'nochange') {\n                }\n\n                if ((tmp = trans.filter('.editable-empty').length)) {\n                    elemRow.addClass('has-empty-translation');\n                    if (tmp === trans.length) {\n                        elemRow.removeClass('has-nonempty-translation');\n                    } else {\n                        elemRow.addClass('has-nonempty-translation');\n                    }\n                } else {\n                    elemRow.removeClass('has-empty-translation');\n                    elemRow.addClass('has-nonempty-translation');\n                }\n\n                if (trans.filter('.status-1').length) {\n                    elemRow.addClass('has-changed-translation');\n                } else {\n                    elemRow.removeClass('has-changed-translation');\n                }\n\n                if (!--inEditable) {\n                    $(\".editing\").removeClass('editing');\n                }\n\n                //window.console.log(\"editable hidden: \" + inEditable);\n            });\n\n            elem.editable().off('shown');\n            elem.editable().on('shown.vsch', function (e, editable) {\n                var key, srcId, srcElem,\n                    savedValue = $(this).data('saved_value'), openedValue,\n                    dstId = $(this).attr('id'),\n                    regexnodash = /-|_/g,\n                    value;\n\n                dstLoc = $(this).data('locale');\n                srcLoc = dstLoc === PRIMARY_LOCALE ? '' : PRIMARY_LOCALE;\n\n                inEditable++;\n                //window.console.log(\"editable shown: \" + inEditable);\n\n                srcId = srcLoc + dstId.substr(dstLoc.length);\n                key = dstId.substr(dstLoc.length + 1);\n                elemRow = $(this).closest('tr#' + key.replace(/\\./g, '-')).first();\n                value = key.replace(regexnodash, ' ').toCapitalCase();\n\n                var xElem = $.fn.editableform.formElements(this);\n\n                dstElem = xElem.elemInput;\n                openedValue = dstElem[0].value.trim();\n                dstElem[0].value = openedValue;\n\n                if (MARKDOWN_KEY_SUFFIX !== undefined && MARKDOWN_KEY_SUFFIX !== '' && key.length > MARKDOWN_KEY_SUFFIX.length && key.substring(key.length - MARKDOWN_KEY_SUFFIX.length, key.length) === MARKDOWN_KEY_SUFFIX) {\n                    if (xElem.btnCleanMarkdown.length) {\n                        xElem.btnCleanMarkdown.removeClass('hidden');\n                        xElem.btnCleanMarkdown.on('click', xedit(dstElem, function (params) {\n                                // clean up wrapped lines which are not markdown hard breaks or blank lines\n                                // TODO: clean up this shit-ball. Check by lines not characters\n                                // split into lines and step through\n                                var text = this;\n                                var lines = text.split('\\n');\n                                var iMax = lines.length;\n                                var fixedText = \"\";\n                                var lastWasBlank = true;\n                                for (var i = 0; i < iMax; i++) {\n                                    var line = lines[i];\n                                    var isBlankLine = false;\n\n                                    if (line.trim().length === 0) {\n                                        if (!lastWasBlank) {\n                                            line = \"\\n\";\n                                            isBlankLine = true;\n                                        } else {\n                                            line = \"\";\n                                            isBlankLine = lastWasBlank;\n                                        }\n                                    } else {\n                                        isBlankLine = false;\n\n                                        if (line.length > 2 && line.substring(line.length - 2, line.length) === \"  \") {\n                                            // we keep the spaces and add an end of line\n                                            line += \"\\n\";\n                                        } else {\n                                            // we check if next line is blank, we keep eol\n                                            if (i + 1 >= iMax || lines[i + 1].trim().length === 0) {\n                                                line += \"\\n\";\n                                            }\n\n                                            if (fixedText.length > 0) {\n                                                var lastChar = fixedText.charAt(fixedText.length - 1);\n                                                if (lastChar !== '\\n' && lastChar !== ' ' && line.charAt(0) !== ' ') {\n                                                    // add a space, we will splice to previous line\n                                                    fixedText += ' ';\n                                                }\n                                            }\n                                        }\n                                    }\n\n                                    fixedText += line;\n                                    lastWasBlank = isBlankLine;\n                                }\n                                return fixedText;\n                            }\n                        ));\n                    }\n\n                    // // this is needed to prevent doubling funky stuff happening with markdown text and blank lines\n                    // dstElem.off('paste');\n                    // dstElem.on('paste', function (e) {\n                    //     var pastedText = undefined;\n                    //     if (window.clipboardData && window.clipboardData.getData) { // IE\n                    //         pastedText = window.clipboardData.getData('Text');\n                    //     } else {\n                    //         if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData) {\n                    //             pastedText = e.originalEvent.clipboardData.getData('text/plain');\n                    //         }\n                    //     }\n                    //\n                    //     dstElem[0].value = pastedText;\n                    //     return false; // Prevent the default handler from running.\n                    // });\n                } else {\n                    // not markdown\n                    // if (xElem.btnPlurals.length) {\n                    //     if (dstLoc === PRIMARY_LOCALE || YANDEX_TRANSLATOR_KEY !== '') {\n                    //         xElem.btnPlurals.removeClass('hidden');\n                    //         xElem.btnPlurals.on('click', xfull(dstElem, function () {\n                    //             var val = this;\n                    //             if (val.indexOf('|') === -1) {\n                    //                 switch (dstLoc) {\n                    //                     case 'ru' :\n                    //                         val = this + '|' + this + '|' + this;\n                    //                         break;\n                    //\n                    //                     case 'en' :\n                    //                         if (PRIMARY_LOCALE === 'en') {\n                    //                             val = value.singularize() + '|' + value.pluralize();\n                    //                         }\n                    //                         else {\n                    //                             val = val.singularize() + '|' + val.pluralize();\n                    //                         }\n                    //                         break;\n                    //\n                    //                     // TODO: add locale tests and code to create plural forms\n                    //                     default:\n                    //                         val = this + '|' + this;\n                    //                         break;\n                    //                 }\n                    //                 return val.toLocaleLowerCase();\n                    //             }\n                    //             return val;\n                    //         }));\n                    //     }\n                    // }\n                    if (xElem.btnPluralsCount.length) {\n                        if (dstLoc === PRIMARY_LOCALE || YANDEX_TRANSLATOR_KEY !== '') {\n                            xElem.btnPluralsCount.removeClass('hidden');\n                            xElem.btnPluralsCount.on('click', xfull(dstElem, function () {\n                                var val = this;\n\n                                if (val.indexOf('|') === -1) {\n                                    switch (dstLoc) {\n                                        case 'ru' :\n                                            val = this + '|' + ':count ' + this + '|' + ':count ' + this;\n                                            break;\n\n                                        case 'en' :\n                                            if (PRIMARY_LOCALE === 'en') {\n                                                val = value.singularize() + '|' + ':count ' + value.pluralize();\n                                            }\n                                            else {\n                                                val = val.singularize() + '|' + ':count ' + val.pluralize();\n                                            }\n                                            break;\n\n                                        // TODO: add locale tests and code to create plural forms\n                                        default:\n                                            val = this + '|' + ':count ' + this;\n                                            break;\n                                    }\n                                    return val.toLocaleLowerCase();\n                                } else {\n                                    // see if all have count\n                                    var parts = val.split('|');\n                                    if (!parts.some(function (part) { return part.match(countRegEx);})) {\n                                        // add to all except first\n                                        val = parts.map(function (part) { return part.replace(countRegEx, '');}).join('|:count ');\n                                    } else if (parts.every(function (part) { return part.match(countRegEx);})) {\n                                        // remove from all\n                                        val = parts.map(function (part) { return part.replace(countRegEx, '');}).join('|');\n                                    } else {\n                                        // add to all\n                                        val = ':count ' + parts.map(function (part) { return part.replace(countRegEx, '');}).join('|:count ');\n                                    }\n                                }\n                                return val;\n                            }));\n                        }\n                    }\n                }\n\n                if (elemRow.length) {\n                    $(\".editing\").removeClass('editing');\n                    elemRow.addClass('editing');\n                }\n\n                if (xElem.btnTranslate.length && dstElem.length && YANDEX_TRANSLATOR_KEY !== '') {\n                    if (srcLoc !== '') {\n                        srcElem = elemRow.find('#' + srcId.replace(/\\./g, '-')).first();\n                        if (srcElem.length === 0) {\n                            // could be search translations table\n                            srcElem = elemRow.parent().find('#' + srcId.replace(/\\./g, '-')).first();\n                        }\n                        if (srcElem.length) {\n                            srcText = srcElem.text();\n\n                            xElem.btnTranslate.html(srcLoc + ' <i class=\"glyphicon glyphicon-share-alt\"></i> ' + dstLoc);\n                            xElem.btnTranslate.removeClass('hidden');\n                            xElem.btnTranslate.on('click', xtranslate(srcLoc, srcText, dstLoc, dstElem, xElem.elemError));\n                        }\n                    }\n                }\n                if (xElem.btnNoDash.length && dstLoc === PRIMARY_LOCALE) {\n                    xElem.btnNoDash.removeClass('hidden');\n                    xElem.btnNoDash.on('click', xfull(dstElem, function () {\n                        return value;\n                    }));\n                }\n                if (xElem.btnCapitalize.length) {\n                    xElem.btnCapitalize.on('click', xeditplurals(dstElem, String.prototype.toLocaleCapitalCase));\n                }\n                if (xElem.btnLowercase.length) {\n                    xElem.btnLowercase.on('click', xedit(dstElem, String.prototype.toLocaleLowerCase));\n                }\n                if (xElem.btnPropCap.length) {\n                    xElem.btnPropCap.on('click', xedit(dstElem, String.prototype.toLocaleProperCase));\n                }\n                if (xElem.btnCopy.length) {\n                    xElem.btnCopy.on('click', xedit(dstElem, function () {\n                        CLIP_TEXT = this;\n                        return this;\n                    }));\n                }\n                if (xElem.btnPaste.length) {\n                    xElem.btnPaste.on('click', xedit(dstElem, function () {\n                        return CLIP_TEXT;\n                    }));\n                }\n                if (xElem.btnResetOpen.length) {\n                    xElem.btnResetOpen.on('click', xfull(dstElem, function () {\n                        return openedValue;\n                    }));\n                }\n                if (xElem.btnResetSaved.length) {\n                    xElem.btnResetSaved.on('click', xfull(dstElem, function () {\n                        return savedValue;\n                    }));\n                }\n            });\n        });\n    };\n\n    $('.vsch_editable').vsch_editable();\n\n});\n"
  },
  {
    "path": "public/vendor/laravel-translation-manager/js/translations_page.js",
    "content": "/*jshint browser: true, jquery: true*/\n/**\n * Created by vlad on 15-02-10.\n */\nvar CLIP_TEXT; // we store translation copy/paste here\nvar YANDEX_TRANSLATOR_KEY;\nvar URL_YANDEX_TRANSLATOR_KEY;\nvar PRIMARY_LOCALE;\nvar CURRENT_LOCALE;\nvar CURRENT_GROUP;\nvar TRANSLATING_LOCALE;\nvar URL_TRANSLATOR_GROUP;\nvar URL_TRANSLATOR_ALL;\nvar URL_TRANSLATOR_FILTERS;\nvar xtranslateText;\nvar xtranslateService;\nvar TRANS_FILTERS;\nvar USER_LOCALES;\n\njQuery(document).ready(function ($) {\n    $('.group-select').on('change', function () {\n        var group = $(this).val();\n        if (group) {\n            window.location.href = URL_TRANSLATOR_GROUP + $(this).val();\n        } else {\n            window.location.href = URL_TRANSLATOR_ALL;\n        }\n    });\n\n    $('a.delete-key').on('ajax:success', function (e, data) {\n        var row = $(this).closest('tr');\n        row.addClass(\"deleted-translation\");\n\n        $(this).addClass(\"hidden\");\n        row.find(\"a.undelete-key\").first().removeClass(\"hidden\");\n    });\n\n    $('a.undelete-key').on('ajax:success', function (e, data) {\n        var row = $(this).closest('tr');\n        row.removeClass(\"deleted-translation\");\n\n        $(this).addClass(\"hidden\");\n        row.find(\"a.delete-key\").first().removeClass(\"hidden\");\n    });\n\n    var successReporter = function (suffix) {\n        var elem = $('div.success-' + suffix);\n        var originalHtml = elem.html();\n        $('.form-' + suffix).on('ajax:success', function (e, data) {\n            elem.html(originalHtml.replace(/:count\\b/, data.counter));\n            elem.closest('div.alert').slideDown();\n        });\n    };\n\n    successReporter('import-group');\n    successReporter('import-all');\n    successReporter('find');\n\n    $('.form-publish-group').on('ajax:success', function (e, data) {\n        if (data.status === 'errors') {\n            var elem = $('div.errors-alert'),\n                errors = data.errors;\n            elem.html(\"<p>\" + errors.join(\"</p>\\n<p>\") + \"</p>\\n\");\n            elem.closest('div.alert').slideDown();\n        }\n        else {\n            $('div.success-publish').closest('div.alert').slideDown();\n            $('tr.deleted-translation').remove();\n        }\n    });\n\n    $('.form-publish-all').on('ajax:success', function (e, data) {\n        if (data.status === 'errors') {\n            var elem = $('div.errors-alert'),\n                errors = data.errors;\n            elem.html(\"<p>\" + errors.join(\"</p>\\n<p>\") + \"</p>\\n\");\n            elem.closest('div.alert').slideDown();\n        }\n        else {\n            $('div.success-publish-all').closest('div.alert').slideDown();\n            $('tr.deleted-translation').remove();\n        }\n    });\n\n    $('#form-keyops').on('ajax:success', function (e, data) {\n        var elem = $('#wildcard-keyops-results').first();\n        elem.html(data);\n        elem.find('.vsch_editable').vsch_editable();\n    });\n\n    var elemModal = $('#searchModal').first();\n    elemModal.on('shown.bs.modal', function (event, data, status, xhr) {\n        elemModal.find('#search-form-text').first().focus();\n    });\n\n    elemModal.on('ajax:success', function (event, data, status, xhr) {\n        var elem = elemModal.find('.results');\n        elem.html(data);\n        elem.find('.vsch_editable').vsch_editable();\n    });\n\n    $('#translate-current-primary').on('click', function () {\n        var elemFrom = $('#current-text').first(),\n            fromText = elemFrom[0].value;\n        xtranslateService(TRANSLATING_LOCALE, fromText, PRIMARY_LOCALE, function (text) {\n            var elem = $('#primary-text').first();\n            if (elem.length) {\n                elem.val(text);\n            }\n        });\n    });\n\n    $('#translate-primary-current').on('click', function () {\n        var elemFrom = $('#primary-text').first(),\n            fromText = elemFrom[0].value;\n        xtranslateService(PRIMARY_LOCALE, fromText, TRANSLATING_LOCALE, function (text) {\n            var elem = $('#current-text').first();\n            if (elem.length) {\n                elem.val(text);\n            }\n        });\n    });\n\n    $('#db-connection').on('change', function () {\n        $('#form-interface-locale')[0].submit();\n    });\n\n    $('#interface-locale').on('change', function () {\n        $('#form-interface-locale')[0].submit();\n    });\n\n    $('#translating-locale').on('change', function () {\n        $('#form-interface-locale')[0].submit();\n    });\n\n    $('#primary-locale').on('change', function () {\n        $('#form-interface-locale')[0].submit();\n    });\n\n    $('#display-locale-all').on('click', function (e) {\n        e.preventDefault();\n        $('.display-locale').prop('checked', true);\n    });\n\n    $('#display-locale-none').on('click', function (e) {\n        e.preventDefault();\n        $('.display-locale').prop('checked', false);\n    });\n\n    function showMatched(table, matched) {\n        table.find('tr').each(function () {\n            if (!$(this).hasClass('hidden')) {\n                var key = $(this).find('td.key').first();\n                if (key.length > 0) {\n                    var text = key[0].innerText;\n                    if (!matched.exec(text)) {\n                        $(this).addClass('hidden');\n                    }\n                }\n            }\n        });\n    }\n\n    function showAll(table) {\n        table.find('tr').removeClass('hidden');\n    }\n\n    var updateTranslationList = showAll;\n    var updateTranslationFilter = 'show-all';\n\n    function updateMatching(elem) {\n        var table = $('#translations').find('tbody').first(),\n            matchedText = $('#show-matching-text'),\n            matchedTextLabel = $('#show-matching-text-label'),\n            matched, totalKeys, filteredKeys, matchedKeys, keyFilterSpan, pattern = '', elemName;\n\n        elem = $(elem);\n        if (elem.length > 0) {\n            updateTranslationFilter = elem.prop('id');\n        }\n\n        totalKeys = table.find('tr').length;\n        updateTranslationList(table);\n        matchedKeys = filteredKeys = totalKeys - table.find('tr.hidden').length;\n\n        if (elem.length > 0) {\n            var elemDiv = elem.parent().parent();\n\n            $('.translation-filter').removeClass('has-success has-error has-feedback has-highlight');\n            if (updateTranslationFilter != 'show-all') {\n                if (filteredKeys > 0) {\n                    // turn the filter green\n                    if (filteredKeys == totalKeys) {\n                        elemDiv.addClass('has-feedback');\n                    } else {\n                        elemDiv.addClass('has-highlight');\n                    }\n                } else {\n                    // turn the filter red\n                    elemDiv.addClass('has-error');\n                }\n            }\n        }\n\n        if (matchedText.length > 0) {\n            pattern = matchedText[0].value.trim();\n            var regexError = false;\n\n            try {\n                matched = new RegExp(pattern, 'i');\n                matchedTextLabel.html(\"&nbsp;\");\n            }\n            catch (e) {\n                matched = new RegExp(\"\");\n                matchedTextLabel.text(e.message);\n                // matchedTextLabel.removeClass('hidden');\n                regexError = true;\n            }\n\n            showMatched(table, matched);\n            matchedKeys = totalKeys - table.find('tr.hidden').length;\n            var matchedTextParent = matchedText.parent('div');\n\n            matchedTextParent.removeClass('has-error has-success has-feedback has-highlight');\n            matchedText.removeClass('bg-danger bg-success bg-highlight regex-error');\n            if (regexError) {\n                matchedTextParent.addClass('has-error');\n                matchedText.addClass('regex-error');\n            } else {\n                if (pattern.length > 0 && filteredKeys > 0) {\n                    if (matchedKeys == 0) {\n                        matchedTextParent.addClass('has-error');\n                        matchedText.addClass('bg-danger');\n                    } else if (matchedKeys < filteredKeys) {\n                        matchedTextParent.addClass('has-highlight');\n                        matchedText.addClass('bg-highlight');\n                    }\n                }\n            }\n        }\n\n        var jqxhr = $.ajax({\n            type: 'GET',\n            url: URL_TRANSLATOR_FILTERS,\n            data: {'filter': updateTranslationFilter, 'regex': pattern},\n\n            success: function (json) {\n                if (json.status === 'ok') {\n                }\n            },\n            encode: true\n        });\n\n        keyFilterSpan = $('#key-filter').first();\n        if (keyFilterSpan.length > 0) {\n            var html = \"\";\n            if (matchedKeys !== filteredKeys) {\n                html += matchedKeys + \"/\";\n            }\n            if (filteredKeys !== totalKeys) {\n                html += filteredKeys + \"/\";\n            }\n\n            html += totalKeys;\n\n            keyFilterSpan.removeClass('have-filtered');\n            if (matchedKeys !== totalKeys) {\n                keyFilterSpan.addClass('have-filtered');\n            }\n            keyFilterSpan[0].innerHTML = html;\n        }\n    }\n\n    $('#show-all').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = showAll;\n        updateMatching(this);\n    });\n\n    $('#show-need-attention').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = function (table) {\n            table.find('tr').addClass('hidden');\n            table.find('tr.has-empty-translation').removeClass('hidden');\n            table.find('tr.deleted-translation').removeClass('hidden');\n            table.find('tr.has-changed-translation').removeClass('hidden');\n        };\n        updateMatching(this);\n    });\n\n    $('#show-unpublished').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = function (table) {\n            table.find('tr').addClass('hidden');\n            table.find('tr.deleted-translation').removeClass('hidden');\n            table.find('tr.has-changed-translation').removeClass('hidden');\n        };\n        updateMatching(this);\n    });\n\n    $('#show-new').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = function (table) {\n            table.find('tr').removeClass('hidden');\n            table.find('tr.has-nonempty-translation').addClass('hidden');\n        };\n        updateMatching(this);\n    });\n\n    $('#show-empty').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = function (table) {\n            table.find('tr').addClass('hidden');\n            table.find('tr.has-empty-translation').removeClass('hidden');\n        };\n        updateMatching(this);\n    });\n\n    $('#show-nonempty').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = function (table) {\n            table.find('tr').addClass('hidden');\n            table.find('tr.has-nonempty-translation').removeClass('hidden');\n        };\n        updateMatching(this);\n    });\n\n    $('#show-used').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = function (table) {\n            table.find('tr').addClass('hidden');\n            table.find('tr.has-used-translation').removeClass('hidden');\n        };\n        updateMatching(this);\n    });\n\n    $('#show-deleted').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = function (table) {\n            table.find('tr').addClass('hidden');\n            table.find('tr.deleted-translation').removeClass('hidden');\n        };\n        updateMatching(this);\n    });\n\n    $('#show-changed').on('click', function (e) {\n        //e.preventDefault();\n        updateTranslationList = function (table) {\n            table.find('tr').addClass('hidden');\n            table.find('tr.has-changed-translation').removeClass('hidden');\n        };\n        updateMatching(this);\n    });\n\n    var updateMatchingTimer = null,\n        $matchingText = $('#show-matching-text');\n\n    $matchingText.on('keyup change', function () {\n        if (updateMatchingTimer) {\n            window.clearTimeout(updateMatchingTimer);\n            updateMatchingTimer = null;\n        }\n\n        updateMatchingTimer = window.setTimeout(function () {\n            updateMatchingTimer = null;\n            updateMatching();\n        }, 100);\n    });\n\n    $('#show-matching-clear').on('click', function () {\n        if ($matchingText.length) {\n            $matchingText[0].value = '';\n            $matchingText.focus();\n            updateMatching();\n        }\n    });\n\n    $('div.alert-dismissible').each(function () {\n        var elem = $(this), btn = elem.find('button.close').first();\n        if (btn.length) {\n            btn.on('click', function () {\n                elem.slideUp();\n            });\n        }\n    });\n\n    function postTranslationValues(translations, elemButton, processText) {\n        if (!translations.length) {\n            return;\n        }\n\n        var progTotal, progCurrent, btnText = elemButton.text(), btnAlt = elemButton.data('disable-with');\n        progTotal = translations.length;\n        progCurrent = 0;\n\n        // we could process all the keys in parallel but we will do it a few at a time\n        var fireTranslate, translateNext = function (t) {\n            processText(t.srcText, function (text, trans) {\n                if (text !== \"\") {\n                    var jqxhr = $.ajax({\n                        type: 'POST',\n                        url: t.dataUrl,\n                        data: {'name': t.dataName, 'value': text},\n                        success: function (json) {\n                            if (json.status === 'ok') {\n                                // now can update the element and fire off the next translation\n                                t.dstElem.removeClass('editable-empty status-0');\n                                t.dstElem.addClass('status-1');\n                                t.dstElem.text(text);\n                                t.dstElem.editable('setValue', text, false);\n                                t.dstElem.closest('tr').addClass('has-changed-translation');\n                            }\n                            else {\n                                elemButton.removeAttr('disabled');\n                                elemButton.text(btnText);\n                            }\n                        },\n                        encode: true\n                    });\n\n                    jqxhr.done(function () {\n                        fireTranslate();\n                    });\n\n                    jqxhr.fail(function () {\n                        elemButton.removeAttr('disabled');\n                        elemButton.text(btnText);\n                    });\n                }\n                else {\n                    elemButton.removeAttr('disabled');\n                    elemButton.text(btnText);\n                }\n            });\n\n        };\n\n        fireTranslate = function () {\n            if (translations.length) {\n                progCurrent++;\n                translateNext(translations.pop());\n                elemButton.attr('disabled', 'disabled');\n                elemButton.text(btnAlt + ' ' + progCurrent + ' / ' + progTotal);\n            }\n            else {\n                elemButton.removeAttr('disabled');\n                elemButton.text(btnText);\n            }\n        };\n\n        for (var i = 0; i < 5; i++) {\n            fireTranslate();\n        }\n    }\n\n    var elemAutoTrans = $('.btn.auto-translate');\n\n    elemAutoTrans.each(function () {\n        var colNum = $(this).data('trans');\n        var dstLoc = $(this).data('locale');\n        var btnElem = $(this);\n\n        btnElem.on('click', function (e) {\n            e.preventDefault();\n            e.stopPropagation();\n            var autoTranslate = [];\n\n            // step through all the definitions in the second column and auto translate empty ones\n            // here we make a log of assumptions about where the data is.\n            // we assume that the source is the child element immediately preceding this one and it is a <td> containing\n            // <a> containing the source text\n            $(\".auto-translatable-\" + dstLoc).each(function () {\n                var row = $(this).parent().find('.vsch_editable');\n                if (row.length > 1) {\n                    var srcElem = $(row[0]),\n                        dstElem = $(row[colNum]),\n                        tr = row.closest('tr');\n\n                    if (!tr.hasClass('hidden') && dstElem.length && srcElem.length) {\n                        if (dstElem.hasClass('editable-empty') && !srcElem.hasClass('editable-empty')) {\n                            autoTranslate.push({\n                                srcText: srcElem.text(),\n                                dataUrl: dstElem.data('url'),\n                                dataName: dstElem.data('name'),\n                                dstElem: dstElem\n                            });\n                        }\n                    }\n                }\n            });\n\n            (function (fromLoc, toLoc, btnElem) {\n                postTranslationValues(autoTranslate, btnElem, function (text, storeText) {\n                    xtranslateText(xtranslateService, fromLoc, text, toLoc, function (text, trans) {\n                        storeText(text, trans);\n                    });\n                });\n            })(PRIMARY_LOCALE, dstLoc, btnElem);\n        });\n    });\n\n    var elemAutoFill = $('#auto-fill');\n    elemAutoFill.on('click', function (e) {\n        var autoFill = [];\n\n        e.preventDefault();\n        e.stopPropagation();\n\n        // step through all the definitions in the second column and auto translate empty ones\n        // here we make a log of assumptons about where the data is.\n        // we assume that the source is the child element immediately preceeding this one and it is a <td> containing\n        // <a> containing the source text\n        $(\".auto-fillable\").each(function () {\n            var dstElem = $(this).find(\"a.vsch_editable.editable-empty\"),\n                tr = dstElem.closest('tr');\n\n            if (dstElem.length && !tr.hasClass('hidden')) {\n                autoFill.push({\n                    srcText: dstElem.data('name').substr(PRIMARY_LOCALE.length + 1),\n                    dataUrl: dstElem.data('url'),\n                    dataName: dstElem.data('name'),\n                    dstElem: dstElem\n                });\n            }\n        });\n\n        (function (elemButton) {\n            postTranslationValues(autoFill, elemButton, function (text, storeText) {\n                var regexnodash = /^.*\\.|-|_/g,\n                    value = text.replace(regexnodash, ' ').toCapitalCase().trim();\n\n                storeText(value, '');\n            });\n        })(elemAutoFill);\n    });\n\n    $('.auto-delete-key').on('click', function () {\n        var table = $('#translations').find('tbody').first(),\n            keys = table.find('.delete-key');\n\n        keys.each(function () {\n            var row = $(this).closest('tr');\n            if (!row.hasClass('hidden') && !$(this).hasClass('hidden')) {\n                $(this).trigger('click');\n            }\n        });\n    });\n\n    $('.auto-undelete-key').on('click', function () {\n        var table = $('#translations').find('tbody').first(),\n            keys = table.find('.undelete-key');\n\n        keys.each(function () {\n            var row = $(this).closest('tr');\n            if (!row.hasClass('hidden') && !$(this).hasClass('hidden')) {\n                $(this).trigger('click');\n            }\n        });\n    });\n\n    $('a.show-source-refs').on('ajax:success', function (e, data) {\n        var elemModal = $('#sourceRefsModal').first();\n        var elemHeader = elemModal.find('#key-name').first();\n        elemHeader.text(data.key_name);\n        var elemResults = elemModal.find('.results').first();\n        var result = data.result.join(\"<br>\");\n        elemResults.html(result);\n        elemModal.modal('show');\n    });\n\n    var elemAutoPropCase = $('.btn.auto-prop-case');\n    elemAutoPropCase.each(function () {\n        var colNum = $(this).data('trans');\n        var dstLoc = $(this).data('locale');\n        var btnElem = $(this);\n\n        btnElem.on('click', function (e) {\n            e.preventDefault();\n            e.stopPropagation();\n            var autoPropCase = [],\n                regex = XRegExp(\"^(\\\\p{Alphabetic}|\\\\p{Number})+(\\\\p{Space_Separator}+(\\\\p{Alphabetic}|\\\\p{Number})+)+\\\\.?$\");\n\n            // step through all the definitions in the second column and auto translate empty ones\n            // here we make a log of assumptions about where the data is.\n            // we assume that the source is the child element immediately preceding this one and it is a <td> containing\n            // <a> containing the source text\n            $(\".auto-translatable-\" + dstLoc).each(function () {\n                var row = $(this).closest('tr');\n                if (!row.hasClass('hidden')) {\n                    var editable = $(this).parent().find('.vsch_editable');\n                    // exclude filtered out rows, give a bit of control over what will change\n                    if (editable.length > 1) {\n                        var srcElem = $(editable[0]),\n                            dstElem = $(editable[colNum]);\n\n                        if (dstElem.length) {\n                            if (!dstElem.hasClass('editable-empty')) {\n                                var text = dstElem.text();\n                                var simpleWords = regex.test(text);\n                                window.console.log(text + \" simple \" + simpleWords);\n                                if (text !== text.toLocaleProperCaseOrLowerCase() && simpleWords) {\n                                    autoPropCase.push({\n                                        srcText: dstElem.text(),\n                                        dataUrl: dstElem.data('url'),\n                                        dataName: dstElem.data('name'),\n                                        dstElem: dstElem\n                                    });\n                                }\n                            }\n                        }\n                    }\n                }\n            });\n\n            if (autoPropCase.length > 0) {\n                (function (fromLoc, toLoc, btnElem) {\n                    postTranslationValues(autoPropCase, btnElem, function (text, storeText) {\n                        storeText(text.toLocaleProperCaseOrLowerCase(), '');\n                    });\n                })(dstLoc, dstLoc, btnElem);\n            }\n        });\n    });\n\n    function textareaTandemResize(src, dst, liveupdate) {\n        return function () {\n            var srcTimeout = {id: null},\n                dstTimeout = {id: null};\n\n            // the handler function\n            var resizeEvent = function (src, dst, timeout) {\n                return function () {\n                    if (dst.css(\"resize\") === 'both') {\n                        dst.outerWidth(src.outerWidth());\n                        dst.outerHeight(src.outerHeight());\n                    }\n                    else {\n                        if (dst.css(\"resize\") === 'horizontal') {\n                            dst.outerWidth(src.outerWidth());\n                        }\n                        else {\n                            if (dst.css(\"resize\") === 'vertical') {\n                                dst.outerHeight(src.outerHeight());\n                            }\n                        }\n                    }\n\n                    if (timeout.id) {\n                        clearTimeout(timeout.id);\n                        timeout.id = null;\n                    }\n                };\n            };\n\n            // This provides a \"real-time\" (actually 15 fps)\n            // event, while resizing.\n            // Unfortunately, mousedown is not fired on Chrome when\n            // clicking on the resize area, so the real-time effect\n            // does not work under Chrome.\n            if (liveupdate) {\n                $(window).on(\"mousemove\", function (e) {\n                    if (e.target === src[0]) {\n                        if (srcTimeout.id) {\n                            clearTimeout(srcTimeout.id);\n                            srcTimeout.id = null;\n                        }\n                        srcTimeout.id = setTimeout(resizeEvent(src, dst, srcTimeout), 1000 / 30);\n                    }\n                    else {\n                        if (e.target === dst[0]) {\n                            if (dstTimeout.id) {\n                                clearTimeout(dstTimeout.id);\n                                dstTimeout.id = null;\n                            }\n                            dstTimeout.id = setTimeout(resizeEvent(dst, src, dstTimeout), 1000 / 30);\n                        }\n                    }\n                });\n            }\n\n            // The mouseup event stops the interval,\n            // then call the resize event one last time.\n            // We listen for the whole window because in some cases,\n            // the mouse pointer may be on the outside of the textarea.\n            $(window).on(\"mouseup\", function (e) {\n                if (srcTimeout.id !== null) {\n                    clearTimeout(srcTimeout.id);\n                    srcTimeout.id = null;\n                }\n                if (e.target === src[0]) {\n                    resizeEvent(src, dst, srcTimeout)();\n                }\n                else {\n                    if (e.target === dst[0]) {\n                        resizeEvent(dst, src, dstTimeout)();\n                    }\n                }\n            });\n        };\n    }\n\n    var elem = $(\"#form-addkeys\").first();\n    textareaTandemResize(elem.find(\"textarea[name=keys]\"), elem.find(\"textarea[name=suffixes]\"), true)();\n    textareaTandemResize($(\"#primary-text\"), $(\"#current-text\"), true)();\n    textareaTandemResize($(\"#srckeys\"), $(\"#dstkeys\"), true)();\n\n    if (TRANS_FILTERS && CURRENT_GROUP != '') {\n        var filter = TRANS_FILTERS.filter;\n        var regex = TRANS_FILTERS.regex;\n        var elemRadio = $('#' + filter);\n        elemRadio.prop('checked', 'checked');\n\n        if (filter !== 'show-all' || regex) {\n            $('#show-matching-text')[0].value = regex;\n            elemRadio.trigger('click');\n        }\n    }\n\n    $(function () {\n        $('.user-locales').editable({\n            source: USER_LOCALES\n            , emptytext: 'All'\n            , showbuttons: false\n            , display: function (value, sourceData) {\n                //display checklist as comma-separated values\n                var html = [],\n                    checked = $.fn.editableutils.itemsByValue(value, sourceData);\n\n                if (checked.length) {\n                    $.each(checked, function (i, v) {\n                        html.push($.fn.editableutils.escape(v.text));\n                    });\n                    $(this).html(html.join(', '));\n                } else {\n                    $(this).empty();\n                }\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "public/vendor/laravel-translation-manager/js/xregexp-all.js",
    "content": "/*!\n * XRegExp-All 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2012-2015 MIT License\n */\n\n// Module systems magic dance. Don't use strict mode for this function, so it can assign to global.\n;(function(root, definition) {\n    var self;\n\n    // RequireJS\n    if (typeof define === 'function') {\n        define(definition);\n    // CommonJS\n    } else if (typeof exports === 'object') {\n        self = definition();\n        // Use Node.js's `module.exports`. This supports both `require('xregexp')` and\n        // `require('xregexp').XRegExp`\n        (typeof module === 'object' ? (module.exports = self) : exports).XRegExp = self;\n    // <script>\n    } else {\n        // Create global\n        root.XRegExp = definition();\n    }\n}(this, function() {\n\n/*!\n * XRegExp 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2007-2015 MIT License\n */\n\n/**\n * XRegExp provides augmented, extensible regular expressions. You get additional regex syntax and\n * flags, beyond what browsers support natively. XRegExp is also a regex utility belt with tools to\n * make your client-side grepping simpler and more powerful, while freeing you from related\n * cross-browser inconsistencies.\n */\nvar XRegExp = (function(undefined) {\n    'use strict';\n\n/* ==============================\n * Private variables\n * ============================== */\n\n    var // Internal reference to the `XRegExp` object\n        self,\n        // Property name used for extended regex instance data\n        REGEX_DATA = 'xregexp',\n        // Optional features that can be installed and uninstalled\n        features = {\n            astral: false,\n            natives: false\n        },\n        // Native methods to use and restore ('native' is an ES3 reserved keyword)\n        nativ = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        // Storage for fixed/extended native methods\n        fixed = {},\n        // Storage for regexes cached by `XRegExp.cache`\n        regexCache = {},\n        // Storage for pattern details cached by the `XRegExp` constructor\n        patternCache = {},\n        // Storage for regex syntax tokens added internally or by `XRegExp.addToken`\n        tokens = [],\n        // Token scopes\n        defaultScope = 'default',\n        classScope = 'class',\n        // Regexes that match native regex syntax, including octals\n        nativeTokens = {\n            // Any native multicharacter token in default scope, or any single character\n            'default': /\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??|[\\s\\S]/,\n            // Any native multicharacter token in character class scope, or any single character\n            'class': /\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|[\\s\\S]/\n        },\n        // Any backreference or dollar-prefixed character in replacement strings\n        replacementToken = /\\$(?:{([\\w$]+)}|(\\d\\d?|[\\s\\S]))/g,\n        // Check for correct `exec` handling of nonparticipating capturing groups\n        correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined,\n        // Check for ES6 `u` flag support\n        hasNativeU = (function() {\n            var isSupported = true;\n            try {\n                new RegExp('', 'u');\n            } catch (exception) {\n                isSupported = false;\n            }\n            return isSupported;\n        }()),\n        // Check for ES6 `y` flag support\n        hasNativeY = (function() {\n            var isSupported = true;\n            try {\n                new RegExp('', 'y');\n            } catch (exception) {\n                isSupported = false;\n            }\n            return isSupported;\n        }()),\n        // Check for ES6 `flags` prop support\n        hasFlagsProp = /a/.flags !== undefined,\n        // Tracker for known flags, including addon flags\n        registeredFlags = {\n            g: true,\n            i: true,\n            m: true,\n            u: hasNativeU,\n            y: hasNativeY\n        },\n        // Shortcut to `Object.prototype.toString`\n        toString = {}.toString,\n        // Shortcut to `XRegExp.addToken`\n        add;\n\n/* ==============================\n * Private functions\n * ============================== */\n\n/**\n * Attaches extended data and `XRegExp.prototype` properties to a regex object.\n *\n * @private\n * @param {RegExp} regex Regex to augment.\n * @param {Array} captureNames Array with capture names, or `null`.\n * @param {String} xSource XRegExp pattern used to generate `regex`, or `null` if N/A.\n * @param {String} xFlags XRegExp flags used to generate `regex`, or `null` if N/A.\n * @param {Boolean} [isInternalOnly=false] Whether the regex will be used only for internal\n *   operations, and never exposed to users. For internal-only regexes, we can improve perf by\n *   skipping some operations like attaching `XRegExp.prototype` properties.\n * @returns {RegExp} Augmented regex.\n */\n    function augment(regex, captureNames, xSource, xFlags, isInternalOnly) {\n        var p;\n\n        regex[REGEX_DATA] = {\n            captureNames: captureNames\n        };\n\n        if (isInternalOnly) {\n            return regex;\n        }\n\n        // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value\n        if (regex.__proto__) {\n            regex.__proto__ = self.prototype;\n        } else {\n            for (p in self.prototype) {\n                // A `self.prototype.hasOwnProperty(p)` check wouldn't be worth it here, since this\n                // is performance sensitive, and enumerable `Object.prototype` or `RegExp.prototype`\n                // extensions exist on `regex.prototype` anyway\n                regex[p] = self.prototype[p];\n            }\n        }\n\n        regex[REGEX_DATA].source = xSource;\n        // Emulate the ES6 `flags` prop by ensuring flags are in alphabetical order\n        regex[REGEX_DATA].flags = xFlags ? xFlags.split('').sort().join('') : xFlags;\n\n        return regex;\n    }\n\n/**\n * Removes any duplicate characters from the provided string.\n *\n * @private\n * @param {String} str String to remove duplicate characters from.\n * @returns {String} String with any duplicate characters removed.\n */\n    function clipDuplicates(str) {\n        return nativ.replace.call(str, /([\\s\\S])(?=[\\s\\S]*\\1)/g, '');\n    }\n\n/**\n * Copies a regex object while preserving extended data and augmenting with `XRegExp.prototype`\n * properties. The copy has a fresh `lastIndex` property (set to zero). Allows adding and removing\n * flags g and y while copying the regex.\n *\n * @private\n * @param {RegExp} regex Regex to copy.\n * @param {Object} [options] Options object with optional properties:\n *   <li>`addG` {Boolean} Add flag g while copying the regex.\n *   <li>`addY` {Boolean} Add flag y while copying the regex.\n *   <li>`removeG` {Boolean} Remove flag g while copying the regex.\n *   <li>`removeY` {Boolean} Remove flag y while copying the regex.\n *   <li>`isInternalOnly` {Boolean} Whether the copied regex will be used only for internal\n *     operations, and never exposed to users. For internal-only regexes, we can improve perf by\n *     skipping some operations like attaching `XRegExp.prototype` properties.\n * @returns {RegExp} Copy of the provided regex, possibly with modified flags.\n */\n    function copyRegex(regex, options) {\n        if (!self.isRegExp(regex)) {\n            throw new TypeError('Type RegExp expected');\n        }\n\n        var xData = regex[REGEX_DATA] || {},\n            flags = getNativeFlags(regex),\n            flagsToAdd = '',\n            flagsToRemove = '',\n            xregexpSource = null,\n            xregexpFlags = null;\n\n        options = options || {};\n\n        if (options.removeG) {flagsToRemove += 'g';}\n        if (options.removeY) {flagsToRemove += 'y';}\n        if (flagsToRemove) {\n            flags = nativ.replace.call(flags, new RegExp('[' + flagsToRemove + ']+', 'g'), '');\n        }\n\n        if (options.addG) {flagsToAdd += 'g';}\n        if (options.addY) {flagsToAdd += 'y';}\n        if (flagsToAdd) {\n            flags = clipDuplicates(flags + flagsToAdd);\n        }\n\n        if (!options.isInternalOnly) {\n            if (xData.source !== undefined) {\n                xregexpSource = xData.source;\n            }\n            // null or undefined; don't want to add to `flags` if the previous value was null, since\n            // that indicates we're not tracking original precompilation flags\n            if (xData.flags != null) {\n                // Flags are only added for non-internal regexes by `XRegExp.globalize`. Flags are\n                // never removed for non-internal regexes, so don't need to handle it\n                xregexpFlags = flagsToAdd ? clipDuplicates(xData.flags + flagsToAdd) : xData.flags;\n            }\n        }\n\n        // Augment with `XRegExp.prototype` properties, but use the native `RegExp` constructor to\n        // avoid searching for special tokens. That would be wrong for regexes constructed by\n        // `RegExp`, and unnecessary for regexes constructed by `XRegExp` because the regex has\n        // already undergone the translation to native regex syntax\n        regex = augment(\n            new RegExp(regex.source, flags),\n            hasNamedCapture(regex) ? xData.captureNames.slice(0) : null,\n            xregexpSource,\n            xregexpFlags,\n            options.isInternalOnly\n        );\n\n        return regex;\n    }\n\n/**\n * Converts hexadecimal to decimal.\n *\n * @private\n * @param {String} hex\n * @returns {Number}\n */\n    function dec(hex) {\n        return parseInt(hex, 16);\n    }\n\n/**\n * Returns native `RegExp` flags used by a regex object.\n *\n * @private\n * @param {RegExp} regex Regex to check.\n * @returns {String} Native flags in use.\n */\n    function getNativeFlags(regex) {\n        return hasFlagsProp ?\n            regex.flags :\n            // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or\n            // concatenation with an empty string) allows this to continue working predictably when\n            // `XRegExp.proptotype.toString` is overriden\n            nativ.exec.call(/\\/([a-z]*)$/i, RegExp.prototype.toString.call(regex))[1];\n    }\n\n/**\n * Determines whether a regex has extended instance data used to track capture names.\n *\n * @private\n * @param {RegExp} regex Regex to check.\n * @returns {Boolean} Whether the regex uses named capture.\n */\n    function hasNamedCapture(regex) {\n        return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames);\n    }\n\n/**\n * Converts decimal to hexadecimal.\n *\n * @private\n * @param {Number|String} dec\n * @returns {String}\n */\n    function hex(dec) {\n        return parseInt(dec, 10).toString(16);\n    }\n\n/**\n * Returns the first index at which a given value can be found in an array.\n *\n * @private\n * @param {Array} array Array to search.\n * @param {*} value Value to locate in the array.\n * @returns {Number} Zero-based index at which the item is found, or -1.\n */\n    function indexOf(array, value) {\n        var len = array.length, i;\n\n        for (i = 0; i < len; ++i) {\n            if (array[i] === value) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n/**\n * Determines whether a value is of the specified type, by resolving its internal [[Class]].\n *\n * @private\n * @param {*} value Object to check.\n * @param {String} type Type to check for, in TitleCase.\n * @returns {Boolean} Whether the object matches the type.\n */\n    function isType(value, type) {\n        return toString.call(value) === '[object ' + type + ']';\n    }\n\n/**\n * Checks whether the next nonignorable token after the specified position is a quantifier.\n *\n * @private\n * @param {String} pattern Pattern to search within.\n * @param {Number} pos Index in `pattern` to search at.\n * @param {String} flags Flags used by the pattern.\n * @returns {Boolean} Whether the next token is a quantifier.\n */\n    function isQuantifierNext(pattern, pos, flags) {\n        return nativ.test.call(\n            flags.indexOf('x') > -1 ?\n                // Ignore any leading whitespace, line comments, and inline comments\n                /^(?:\\s+|#.*|\\(\\?#[^)]*\\))*(?:[?*+]|{\\d+(?:,\\d*)?})/ :\n                // Ignore any leading inline comments\n                /^(?:\\(\\?#[^)]*\\))*(?:[?*+]|{\\d+(?:,\\d*)?})/,\n            pattern.slice(pos)\n        );\n    }\n\n/**\n * Pads the provided string with as many leading zeros as needed to get to length 4. Used to produce\n * fixed-length hexadecimal values.\n *\n * @private\n * @param {String} str\n * @returns {String}\n */\n    function pad4(str) {\n        while (str.length < 4) {\n            str = '0' + str;\n        }\n        return str;\n    }\n\n/**\n * Checks for flag-related errors, and strips/applies flags in a leading mode modifier. Offloads\n * the flag preparation logic from the `XRegExp` constructor.\n *\n * @private\n * @param {String} pattern Regex pattern, possibly with a leading mode modifier.\n * @param {String} flags Any combination of flags.\n * @returns {Object} Object with properties `pattern` and `flags`.\n */\n    function prepareFlags(pattern, flags) {\n        var i;\n\n        // Recent browsers throw on duplicate flags, so copy this behavior for nonnative flags\n        if (clipDuplicates(flags) !== flags) {\n            throw new SyntaxError('Invalid duplicate regex flag ' + flags);\n        }\n\n        // Strip and apply a leading mode modifier with any combination of flags except g or y\n        pattern = nativ.replace.call(pattern, /^\\(\\?([\\w$]+)\\)/, function($0, $1) {\n            if (nativ.test.call(/[gy]/, $1)) {\n                throw new SyntaxError('Cannot use flag g or y in mode modifier ' + $0);\n            }\n            // Allow duplicate flags within the mode modifier\n            flags = clipDuplicates(flags + $1);\n            return '';\n        });\n\n        // Throw on unknown native or nonnative flags\n        for (i = 0; i < flags.length; ++i) {\n            if (!registeredFlags[flags.charAt(i)]) {\n                throw new SyntaxError('Unknown regex flag ' + flags.charAt(i));\n            }\n        }\n\n        return {\n            pattern: pattern,\n            flags: flags\n        };\n    }\n\n/**\n * Prepares an options object from the given value.\n *\n * @private\n * @param {String|Object} value Value to convert to an options object.\n * @returns {Object} Options object.\n */\n    function prepareOptions(value) {\n        var options = {};\n\n        if (isType(value, 'String')) {\n            self.forEach(value, /[^\\s,]+/, function(match) {\n                options[match] = true;\n            });\n\n            return options;\n        }\n\n        return value;\n    }\n\n/**\n * Registers a flag so it doesn't throw an 'unknown flag' error.\n *\n * @private\n * @param {String} flag Single-character flag to register.\n */\n    function registerFlag(flag) {\n        if (!/^[\\w$]$/.test(flag)) {\n            throw new Error('Flag must be a single character A-Za-z0-9_$');\n        }\n\n        registeredFlags[flag] = true;\n    }\n\n/**\n * Runs built-in and custom regex syntax tokens in reverse insertion order at the specified\n * position, until a match is found.\n *\n * @private\n * @param {String} pattern Original pattern from which an XRegExp object is being built.\n * @param {String} flags Flags being used to construct the regex.\n * @param {Number} pos Position to search for tokens within `pattern`.\n * @param {Number} scope Regex scope to apply: 'default' or 'class'.\n * @param {Object} context Context object to use for token handler functions.\n * @returns {Object} Object with properties `matchLength`, `output`, and `reparse`; or `null`.\n */\n    function runTokens(pattern, flags, pos, scope, context) {\n        var i = tokens.length,\n            leadChar = pattern.charAt(pos),\n            result = null,\n            match,\n            t;\n\n        // Run in reverse insertion order\n        while (i--) {\n            t = tokens[i];\n            if (\n                (t.leadChar && t.leadChar !== leadChar) ||\n                (t.scope !== scope && t.scope !== 'all') ||\n                (t.flag && flags.indexOf(t.flag) === -1)\n            ) {\n                continue;\n            }\n\n            match = self.exec(pattern, t.regex, pos, 'sticky');\n            if (match) {\n                result = {\n                    matchLength: match[0].length,\n                    output: t.handler.call(context, match, scope, flags),\n                    reparse: t.reparse\n                };\n                // Finished with token tests\n                break;\n            }\n        }\n\n        return result;\n    }\n\n/**\n * Enables or disables implicit astral mode opt-in. When enabled, flag A is automatically added to\n * all new regexes created by XRegExp. This causes an error to be thrown when creating regexes if\n * the Unicode Base addon is not available, since flag A is registered by that addon.\n *\n * @private\n * @param {Boolean} on `true` to enable; `false` to disable.\n */\n    function setAstral(on) {\n        features.astral = on;\n    }\n\n/**\n * Enables or disables native method overrides.\n *\n * @private\n * @param {Boolean} on `true` to enable; `false` to disable.\n */\n    function setNatives(on) {\n        RegExp.prototype.exec = (on ? fixed : nativ).exec;\n        RegExp.prototype.test = (on ? fixed : nativ).test;\n        String.prototype.match = (on ? fixed : nativ).match;\n        String.prototype.replace = (on ? fixed : nativ).replace;\n        String.prototype.split = (on ? fixed : nativ).split;\n\n        features.natives = on;\n    }\n\n/**\n * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow\n * the ES5 abstract operation `ToObject`.\n *\n * @private\n * @param {*} value Object to check and return.\n * @returns {*} The provided object.\n */\n    function toObject(value) {\n        // null or undefined\n        if (value == null) {\n            throw new TypeError('Cannot convert null or undefined to object');\n        }\n\n        return value;\n    }\n\n/* ==============================\n * Constructor\n * ============================== */\n\n/**\n * Creates an extended regular expression object for matching text with a pattern. Differs from a\n * native regular expression in that additional syntax and flags are supported. The returned object\n * is in fact a native `RegExp` and works with all native methods.\n *\n * @class XRegExp\n * @constructor\n * @param {String|RegExp} pattern Regex pattern string, or an existing regex object to copy.\n * @param {String} [flags] Any combination of flags.\n *   Native flags:\n *     <li>`g` - global\n *     <li>`i` - ignore case\n *     <li>`m` - multiline anchors\n *     <li>`u` - unicode (ES6)\n *     <li>`y` - sticky (Firefox 3+, ES6)\n *   Additional XRegExp flags:\n *     <li>`n` - explicit capture\n *     <li>`s` - dot matches all (aka singleline)\n *     <li>`x` - free-spacing and line comments (aka extended)\n *     <li>`A` - astral (requires the Unicode Base addon)\n *   Flags cannot be provided when constructing one `RegExp` from another.\n * @returns {RegExp} Extended regular expression object.\n * @example\n *\n * // With named capture and flag x\n * XRegExp('(?<year>  [0-9]{4} ) -?  # year  \\n\\\n *          (?<month> [0-9]{2} ) -?  # month \\n\\\n *          (?<day>   [0-9]{2} )     # day   ', 'x');\n *\n * // Providing a regex object copies it. Native regexes are recompiled using native (not XRegExp)\n * // syntax. Copies maintain extended data, are augmented with `XRegExp.prototype` properties, and\n * // have fresh `lastIndex` properties (set to zero).\n * XRegExp(/regex/);\n */\n    self = function(pattern, flags) {\n        var context = {\n                hasNamedCapture: false,\n                captureNames: []\n            },\n            scope = defaultScope,\n            output = '',\n            pos = 0,\n            result,\n            token,\n            generated,\n            appliedPattern,\n            appliedFlags;\n\n        if (self.isRegExp(pattern)) {\n            if (flags !== undefined) {\n                throw new TypeError('Cannot supply flags when copying a RegExp');\n            }\n            return copyRegex(pattern);\n        }\n\n        // Copy the argument behavior of `RegExp`\n        pattern = pattern === undefined ? '' : String(pattern);\n        flags = flags === undefined ? '' : String(flags);\n\n        if (self.isInstalled('astral') && flags.indexOf('A') === -1) {\n            // This causes an error to be thrown if the Unicode Base addon is not available\n            flags += 'A';\n        }\n\n        if (!patternCache[pattern]) {\n            patternCache[pattern] = {};\n        }\n\n        if (!patternCache[pattern][flags]) {\n            // Check for flag-related errors, and strip/apply flags in a leading mode modifier\n            result = prepareFlags(pattern, flags);\n            appliedPattern = result.pattern;\n            appliedFlags = result.flags;\n\n            // Use XRegExp's tokens to translate the pattern to a native regex pattern.\n            // `appliedPattern.length` may change on each iteration if tokens use `reparse`\n            while (pos < appliedPattern.length) {\n                do {\n                    // Check for custom tokens at the current position\n                    result = runTokens(appliedPattern, appliedFlags, pos, scope, context);\n                    // If the matched token used the `reparse` option, splice its output into the\n                    // pattern before running tokens again at the same position\n                    if (result && result.reparse) {\n                        appliedPattern = appliedPattern.slice(0, pos) +\n                            result.output +\n                            appliedPattern.slice(pos + result.matchLength);\n                    }\n                } while (result && result.reparse);\n\n                if (result) {\n                    output += result.output;\n                    pos += (result.matchLength || 1);\n                } else {\n                    // Get the native token at the current position\n                    token = self.exec(appliedPattern, nativeTokens[scope], pos, 'sticky')[0];\n                    output += token;\n                    pos += token.length;\n                    if (token === '[' && scope === defaultScope) {\n                        scope = classScope;\n                    } else if (token === ']' && scope === classScope) {\n                        scope = defaultScope;\n                    }\n                }\n            }\n\n            patternCache[pattern][flags] = {\n                // Cleanup token cruft: repeated `(?:)(?:)` and leading/trailing `(?:)`\n                pattern: nativ.replace.call(output, /\\(\\?:\\)(?=\\(\\?:\\))|^\\(\\?:\\)|\\(\\?:\\)$/g, ''),\n                // Strip all but native flags\n                flags: nativ.replace.call(appliedFlags, /[^gimuy]+/g, ''),\n                // `context.captureNames` has an item for each capturing group, even if unnamed\n                captures: context.hasNamedCapture ? context.captureNames : null\n            };\n        }\n\n        generated = patternCache[pattern][flags];\n        return augment(\n            new RegExp(generated.pattern, generated.flags),\n            generated.captures,\n            pattern,\n            flags\n        );\n    };\n\n// Add `RegExp.prototype` to the prototype chain\n    self.prototype = new RegExp();\n\n/* ==============================\n * Public properties\n * ============================== */\n\n/**\n * The XRegExp version number.\n *\n * @static\n * @memberOf XRegExp\n * @type String\n */\n    self.version = '3.0.0';\n\n/* ==============================\n * Public methods\n * ============================== */\n\n/**\n * Extends XRegExp syntax and allows custom flags. This is used internally and can be used to\n * create XRegExp addons. If more than one token can match the same string, the last added wins.\n *\n * @memberOf XRegExp\n * @param {RegExp} regex Regex object that matches the new token.\n * @param {Function} handler Function that returns a new pattern string (using native regex syntax)\n *   to replace the matched token within all future XRegExp regexes. Has access to persistent\n *   properties of the regex being built, through `this`. Invoked with three arguments:\n *   <li>The match array, with named backreference properties.\n *   <li>The regex scope where the match was found: 'default' or 'class'.\n *   <li>The flags used by the regex, including any flags in a leading mode modifier.\n *   The handler function becomes part of the XRegExp construction process, so be careful not to\n *   construct XRegExps within the function or you will trigger infinite recursion.\n * @param {Object} [options] Options object with optional properties:\n *   <li>`scope` {String} Scope where the token applies: 'default', 'class', or 'all'.\n *   <li>`flag` {String} Single-character flag that triggers the token. This also registers the\n *     flag, which prevents XRegExp from throwing an 'unknown flag' error when the flag is used.\n *   <li>`optionalFlags` {String} Any custom flags checked for within the token `handler` that are\n *     not required to trigger the token. This registers the flags, to prevent XRegExp from\n *     throwing an 'unknown flag' error when any of the flags are used.\n *   <li>`reparse` {Boolean} Whether the `handler` function's output should not be treated as\n *     final, and instead be reparseable by other tokens (including the current token). Allows\n *     token chaining or deferring.\n *   <li>`leadChar` {String} Single character that occurs at the beginning of any successful match\n *     of the token (not always applicable). This doesn't change the behavior of the token unless\n *     you provide an erroneous value. However, providing it can increase the token's performance.\n * @example\n *\n * // Basic usage: Add \\a for the ALERT control code\n * XRegExp.addToken(\n *   /\\\\a/,\n *   function() {return '\\\\x07';},\n *   {scope: 'all'}\n * );\n * XRegExp('\\\\a[\\\\a-\\\\n]+').test('\\x07\\n\\x07'); // -> true\n *\n * // Add the U (ungreedy) flag from PCRE and RE2, which reverses greedy and lazy quantifiers\n * XRegExp.addToken(\n *   /([?*+]|{\\d+(?:,\\d*)?})(\\??)/,\n *   function(match) {return match[1] + (match[2] ? '' : '?');},\n *   {flag: 'U'}\n * );\n * XRegExp('a+', 'U').exec('aaa')[0]; // -> 'a'\n * XRegExp('a+?', 'U').exec('aaa')[0]; // -> 'aaa'\n */\n    self.addToken = function(regex, handler, options) {\n        options = options || {};\n        var optionalFlags = options.optionalFlags, i;\n\n        if (options.flag) {\n            registerFlag(options.flag);\n        }\n\n        if (optionalFlags) {\n            optionalFlags = nativ.split.call(optionalFlags, '');\n            for (i = 0; i < optionalFlags.length; ++i) {\n                registerFlag(optionalFlags[i]);\n            }\n        }\n\n        // Add to the private list of syntax tokens\n        tokens.push({\n            regex: copyRegex(regex, {\n                addG: true,\n                addY: hasNativeY,\n                isInternalOnly: true\n            }),\n            handler: handler,\n            scope: options.scope || defaultScope,\n            flag: options.flag,\n            reparse: options.reparse,\n            leadChar: options.leadChar\n        });\n\n        // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and\n        // flags might now produce different results\n        self.cache.flush('patterns');\n    };\n\n/**\n * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with\n * the same pattern and flag combination, the cached copy of the regex is returned.\n *\n * @memberOf XRegExp\n * @param {String} pattern Regex pattern string.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {RegExp} Cached XRegExp object.\n * @example\n *\n * while (match = XRegExp.cache('.', 'gs').exec(str)) {\n *   // The regex is compiled once only\n * }\n */\n    self.cache = function(pattern, flags) {\n        if (!regexCache[pattern]) {\n            regexCache[pattern] = {};\n        }\n        return regexCache[pattern][flags] || (\n            regexCache[pattern][flags] = self(pattern, flags)\n        );\n    };\n\n// Intentionally undocumented\n    self.cache.flush = function(cacheName) {\n        if (cacheName === 'patterns') {\n            // Flush the pattern cache used by the `XRegExp` constructor\n            patternCache = {};\n        } else {\n            // Flush the regex cache populated by `XRegExp.cache`\n            regexCache = {};\n        }\n    };\n\n/**\n * Escapes any regular expression metacharacters, for use when matching literal strings. The result\n * can safely be used at any point within a regex that uses any flags.\n *\n * @memberOf XRegExp\n * @param {String} str String to escape.\n * @returns {String} String with regex metacharacters escaped.\n * @example\n *\n * XRegExp.escape('Escaped? <.>');\n * // -> 'Escaped\\?\\ <\\.>'\n */\n    self.escape = function(str) {\n        return nativ.replace.call(toObject(str), /[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n    };\n\n/**\n * Executes a regex search in a specified string. Returns a match array or `null`. If the provided\n * regex uses named capture, named backreference properties are included on the match array.\n * Optional `pos` and `sticky` arguments specify the search start position, and whether the match\n * must start at the specified position only. The `lastIndex` property of the provided regex is not\n * used, but is updated for compatibility. Also fixes browser bugs compared to the native\n * `RegExp.prototype.exec` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Number} [pos=0] Zero-based index at which to start the search.\n * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position\n *   only. The string `'sticky'` is accepted as an alternative to `true`.\n * @returns {Array} Match array with named backreference properties, or `null`.\n * @example\n *\n * // Basic use, with named backreference\n * var match = XRegExp.exec('U+2620', XRegExp('U\\\\+(?<hex>[0-9A-F]{4})'));\n * match.hex; // -> '2620'\n *\n * // With pos and sticky, in a loop\n * var pos = 2, result = [], match;\n * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\\d)>/, pos, 'sticky')) {\n *   result.push(match[1]);\n *   pos = match.index + match[0].length;\n * }\n * // result -> ['2', '3', '4']\n */\n    self.exec = function(str, regex, pos, sticky) {\n        var cacheKey = 'g',\n            addY = false,\n            match,\n            r2;\n\n        addY = hasNativeY && !!(sticky || (regex.sticky && sticky !== false));\n        if (addY) {\n            cacheKey += 'y';\n        }\n\n        regex[REGEX_DATA] = regex[REGEX_DATA] || {};\n\n        // Shares cached copies with `XRegExp.match`/`replace`\n        r2 = regex[REGEX_DATA][cacheKey] || (\n            regex[REGEX_DATA][cacheKey] = copyRegex(regex, {\n                addG: true,\n                addY: addY,\n                removeY: sticky === false,\n                isInternalOnly: true\n            })\n        );\n\n        r2.lastIndex = pos = pos || 0;\n\n        // Fixed `exec` required for `lastIndex` fix, named backreferences, etc.\n        match = fixed.exec.call(r2, str);\n\n        if (sticky && match && match.index !== pos) {\n            match = null;\n        }\n\n        if (regex.global) {\n            regex.lastIndex = match ? r2.lastIndex : 0;\n        }\n\n        return match;\n    };\n\n/**\n * Executes a provided function once per regex match.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Function} callback Function to execute for each match. Invoked with four arguments:\n *   <li>The match array, with named backreference properties.\n *   <li>The zero-based match index.\n *   <li>The string being traversed.\n *   <li>The regex object being used to traverse the string.\n * @example\n *\n * // Extracts every other digit from a string\n * XRegExp.forEach('1a2345', /\\d/, function(match, i) {\n *   if (i % 2) this.push(+match[0]);\n * }, []);\n * // -> [2, 4]\n */\n    self.forEach = function(str, regex, callback) {\n        var pos = 0,\n            i = -1,\n            match;\n\n        while ((match = self.exec(str, regex, pos))) {\n            // Because `regex` is provided to `callback`, the function could use the deprecated/\n            // nonstandard `RegExp.prototype.compile` to mutate the regex. However, since\n            // `XRegExp.exec` doesn't use `lastIndex` to set the search position, this can't lead\n            // to an infinite loop, at least. Actually, because of the way `XRegExp.exec` caches\n            // globalized versions of regexes, mutating the regex will not have any effect on the\n            // iteration or matched strings, which is a nice side effect that brings extra safety\n            callback(match, ++i, str, regex);\n\n            pos = match.index + (match[0].length || 1);\n        }\n    };\n\n/**\n * Copies a regex object and adds flag `g`. The copy maintains extended data, is augmented with\n * `XRegExp.prototype` properties, and has a fresh `lastIndex` property (set to zero). Native\n * regexes are not recompiled using XRegExp syntax.\n *\n * @memberOf XRegExp\n * @param {RegExp} regex Regex to globalize.\n * @returns {RegExp} Copy of the provided regex with flag `g` added.\n * @example\n *\n * var globalCopy = XRegExp.globalize(/regex/);\n * globalCopy.global; // -> true\n */\n    self.globalize = function(regex) {\n        return copyRegex(regex, {addG: true});\n    };\n\n/**\n * Installs optional features according to the specified options. Can be undone using\n * {@link #XRegExp.uninstall}.\n *\n * @memberOf XRegExp\n * @param {Object|String} options Options object or string.\n * @example\n *\n * // With an options object\n * XRegExp.install({\n *   // Enables support for astral code points in Unicode addons (implicitly sets flag A)\n *   astral: true,\n *\n *   // Overrides native regex methods with fixed/extended versions that support named\n *   // backreferences and fix numerous cross-browser bugs\n *   natives: true\n * });\n *\n * // With an options string\n * XRegExp.install('astral natives');\n */\n    self.install = function(options) {\n        options = prepareOptions(options);\n\n        if (!features.astral && options.astral) {\n            setAstral(true);\n        }\n\n        if (!features.natives && options.natives) {\n            setNatives(true);\n        }\n    };\n\n/**\n * Checks whether an individual optional feature is installed.\n *\n * @memberOf XRegExp\n * @param {String} feature Name of the feature to check. One of:\n *   <li>`natives`\n *   <li>`astral`\n * @returns {Boolean} Whether the feature is installed.\n * @example\n *\n * XRegExp.isInstalled('natives');\n */\n    self.isInstalled = function(feature) {\n        return !!(features[feature]);\n    };\n\n/**\n * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes\n * created in another frame, when `instanceof` and `constructor` checks would fail.\n *\n * @memberOf XRegExp\n * @param {*} value Object to check.\n * @returns {Boolean} Whether the object is a `RegExp` object.\n * @example\n *\n * XRegExp.isRegExp('string'); // -> false\n * XRegExp.isRegExp(/regex/i); // -> true\n * XRegExp.isRegExp(RegExp('^', 'm')); // -> true\n * XRegExp.isRegExp(XRegExp('(?s).')); // -> true\n */\n    self.isRegExp = function(value) {\n        return toString.call(value) === '[object RegExp]';\n        //return isType(value, 'RegExp');\n    };\n\n/**\n * Returns the first matched string, or in global mode, an array containing all matched strings.\n * This is essentially a more convenient re-implementation of `String.prototype.match` that gives\n * the result types you actually want (string instead of `exec`-style array in match-first mode,\n * and an empty array instead of `null` when no matches are found in match-all mode). It also lets\n * you override flag g and ignore `lastIndex`, and fixes browser bugs.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {String} [scope='one'] Use 'one' to return the first match as a string. Use 'all' to\n *   return an array of all matched strings. If not explicitly specified and `regex` uses flag g,\n *   `scope` is 'all'.\n * @returns {String|Array} In match-first mode: First match as a string, or `null`. In match-all\n *   mode: Array of all matched strings, or an empty array.\n * @example\n *\n * // Match first\n * XRegExp.match('abc', /\\w/); // -> 'a'\n * XRegExp.match('abc', /\\w/g, 'one'); // -> 'a'\n * XRegExp.match('abc', /x/g, 'one'); // -> null\n *\n * // Match all\n * XRegExp.match('abc', /\\w/g); // -> ['a', 'b', 'c']\n * XRegExp.match('abc', /\\w/, 'all'); // -> ['a', 'b', 'c']\n * XRegExp.match('abc', /x/, 'all'); // -> []\n */\n    self.match = function(str, regex, scope) {\n        var global = (regex.global && scope !== 'one') || scope === 'all',\n            cacheKey = ((global ? 'g' : '') + (regex.sticky ? 'y' : '')) || 'noGY',\n            result,\n            r2;\n\n        regex[REGEX_DATA] = regex[REGEX_DATA] || {};\n\n        // Shares cached copies with `XRegExp.exec`/`replace`\n        r2 = regex[REGEX_DATA][cacheKey] || (\n            regex[REGEX_DATA][cacheKey] = copyRegex(regex, {\n                addG: !!global,\n                addY: !!regex.sticky,\n                removeG: scope === 'one',\n                isInternalOnly: true\n            })\n        );\n\n        result = nativ.match.call(toObject(str), r2);\n\n        if (regex.global) {\n            regex.lastIndex = (\n                (scope === 'one' && result) ?\n                    // Can't use `r2.lastIndex` since `r2` is nonglobal in this case\n                    (result.index + result[0].length) : 0\n            );\n        }\n\n        return global ? (result || []) : (result && result[0]);\n    };\n\n/**\n * Retrieves the matches from searching a string using a chain of regexes that successively search\n * within previous matches. The provided `chain` array can contain regexes and objects with `regex`\n * and `backref` properties. When a backreference is specified, the named or numbered backreference\n * is passed forward to the next regex or returned.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {Array} chain Regexes that each search for matches within preceding results.\n * @returns {Array} Matches by the last regex in the chain, or an empty array.\n * @example\n *\n * // Basic usage; matches numbers within <b> tags\n * XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [\n *   XRegExp('(?is)<b>.*?</b>'),\n *   /\\d+/\n * ]);\n * // -> ['2', '4', '56']\n *\n * // Passing forward and returning specific backreferences\n * html = '<a href=\"http://xregexp.com/api/\">XRegExp</a>\\\n *         <a href=\"http://www.google.com/\">Google</a>';\n * XRegExp.matchChain(html, [\n *   {regex: /<a href=\"([^\"]+)\">/i, backref: 1},\n *   {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'}\n * ]);\n * // -> ['xregexp.com', 'www.google.com']\n */\n    self.matchChain = function(str, chain) {\n        return (function recurseChain(values, level) {\n            var item = chain[level].regex ? chain[level] : {regex: chain[level]},\n                matches = [],\n                addMatch = function(match) {\n                    if (item.backref) {\n                        /* Safari 4.0.5 (but not 5.0.5+) inappropriately uses sparse arrays to hold\n                         * the `undefined`s for backreferences to nonparticipating capturing\n                         * groups. In such cases, a `hasOwnProperty` or `in` check on its own would\n                         * inappropriately throw the exception, so also check if the backreference\n                         * is a number that is within the bounds of the array.\n                         */\n                        if (!(match.hasOwnProperty(item.backref) || +item.backref < match.length)) {\n                            throw new ReferenceError('Backreference to undefined group: ' + item.backref);\n                        }\n\n                        matches.push(match[item.backref] || '');\n                    } else {\n                        matches.push(match[0]);\n                    }\n                },\n                i;\n\n            for (i = 0; i < values.length; ++i) {\n                self.forEach(values[i], item.regex, addMatch);\n            }\n\n            return ((level === chain.length - 1) || !matches.length) ?\n                matches :\n                recurseChain(matches, level + 1);\n        }([str], 0));\n    };\n\n/**\n * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string\n * or regex, and the replacement can be a string or a function to be called for each match. To\n * perform a global search and replace, use the optional `scope` argument or include flag g if using\n * a regex. Replacement strings can use `${n}` for named and numbered backreferences. Replacement\n * functions can use named backreferences via `arguments[0].name`. Also fixes browser bugs compared\n * to the native `String.prototype.replace` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp|String} search Search pattern to be replaced.\n * @param {String|Function} replacement Replacement string or a function invoked to create it.\n *   Replacement strings can include special replacement syntax:\n *     <li>$$ - Inserts a literal $ character.\n *     <li>$&, $0 - Inserts the matched substring.\n *     <li>$` - Inserts the string that precedes the matched substring (left context).\n *     <li>$' - Inserts the string that follows the matched substring (right context).\n *     <li>$n, $nn - Where n/nn are digits referencing an existent capturing group, inserts\n *       backreference n/nn.\n *     <li>${n} - Where n is a name or any number of digits that reference an existent capturing\n *       group, inserts backreference n.\n *   Replacement functions are invoked with three or more arguments:\n *     <li>The matched substring (corresponds to $& above). Named backreferences are accessible as\n *       properties of this first argument.\n *     <li>0..n arguments, one for each backreference (corresponding to $1, $2, etc. above).\n *     <li>The zero-based index of the match within the total search string.\n *     <li>The total string being searched.\n * @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not\n *   explicitly specified and using a regex with flag g, `scope` is 'all'.\n * @returns {String} New string with one or all matches replaced.\n * @example\n *\n * // Regex search, using named backreferences in replacement string\n * var name = XRegExp('(?<first>\\\\w+) (?<last>\\\\w+)');\n * XRegExp.replace('John Smith', name, '${last}, ${first}');\n * // -> 'Smith, John'\n *\n * // Regex search, using named backreferences in replacement function\n * XRegExp.replace('John Smith', name, function(match) {\n *   return match.last + ', ' + match.first;\n * });\n * // -> 'Smith, John'\n *\n * // String search, with replace-all\n * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all');\n * // -> 'XRegExp builds XRegExps'\n */\n    self.replace = function(str, search, replacement, scope) {\n        var isRegex = self.isRegExp(search),\n            global = (search.global && scope !== 'one') || scope === 'all',\n            cacheKey = ((global ? 'g' : '') + (search.sticky ? 'y' : '')) || 'noGY',\n            s2 = search,\n            result;\n\n        if (isRegex) {\n            search[REGEX_DATA] = search[REGEX_DATA] || {};\n\n            // Shares cached copies with `XRegExp.exec`/`match`. Since a copy is used, `search`'s\n            // `lastIndex` isn't updated *during* replacement iterations\n            s2 = search[REGEX_DATA][cacheKey] || (\n                search[REGEX_DATA][cacheKey] = copyRegex(search, {\n                    addG: !!global,\n                    addY: !!search.sticky,\n                    removeG: scope === 'one',\n                    isInternalOnly: true\n                })\n            );\n        } else if (global) {\n            s2 = new RegExp(self.escape(String(search)), 'g');\n        }\n\n        // Fixed `replace` required for named backreferences, etc.\n        result = fixed.replace.call(toObject(str), s2, replacement);\n\n        if (isRegex && search.global) {\n            // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)\n            search.lastIndex = 0;\n        }\n\n        return result;\n    };\n\n/**\n * Performs batch processing of string replacements. Used like {@link #XRegExp.replace}, but\n * accepts an array of replacement details. Later replacements operate on the output of earlier\n * replacements. Replacement details are accepted as an array with a regex or string to search for,\n * the replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp\n * replacement text syntax, which supports named backreference properties via `${name}`.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {Array} replacements Array of replacement detail arrays.\n * @returns {String} New string with all replacements.\n * @example\n *\n * str = XRegExp.replaceEach(str, [\n *   [XRegExp('(?<name>a)'), 'z${name}'],\n *   [/b/gi, 'y'],\n *   [/c/g, 'x', 'one'], // scope 'one' overrides /g\n *   [/d/, 'w', 'all'],  // scope 'all' overrides lack of /g\n *   ['e', 'v', 'all'],  // scope 'all' allows replace-all for strings\n *   [/f/g, function($0) {\n *     return $0.toUpperCase();\n *   }]\n * ]);\n */\n    self.replaceEach = function(str, replacements) {\n        var i, r;\n\n        for (i = 0; i < replacements.length; ++i) {\n            r = replacements[i];\n            str = self.replace(str, r[0], r[1], r[2]);\n        }\n\n        return str;\n    };\n\n/**\n * Splits a string into an array of strings using a regex or string separator. Matches of the\n * separator are not included in the result array. However, if `separator` is a regex that contains\n * capturing groups, backreferences are spliced into the result each time `separator` is matched.\n * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably\n * cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to split.\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {Array} Array of substrings.\n * @example\n *\n * // Basic use\n * XRegExp.split('a b c', ' ');\n * // -> ['a', 'b', 'c']\n *\n * // With limit\n * XRegExp.split('a b c', ' ', 2);\n * // -> ['a', 'b']\n *\n * // Backreferences in result array\n * XRegExp.split('..word1..', /([a-z]+)(\\d+)/i);\n * // -> ['..', 'word', '1', '..']\n */\n    self.split = function(str, separator, limit) {\n        return fixed.split.call(toObject(str), separator, limit);\n    };\n\n/**\n * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and\n * `sticky` arguments specify the search start position, and whether the match must start at the\n * specified position only. The `lastIndex` property of the provided regex is not used, but is\n * updated for compatibility. Also fixes browser bugs compared to the native\n * `RegExp.prototype.test` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Number} [pos=0] Zero-based index at which to start the search.\n * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position\n *   only. The string `'sticky'` is accepted as an alternative to `true`.\n * @returns {Boolean} Whether the regex matched the provided value.\n * @example\n *\n * // Basic use\n * XRegExp.test('abc', /c/); // -> true\n *\n * // With pos and sticky\n * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false\n */\n    self.test = function(str, regex, pos, sticky) {\n        // Do this the easy way :-)\n        return !!self.exec(str, regex, pos, sticky);\n    };\n\n/**\n * Uninstalls optional features according to the specified options. All optional features start out\n * uninstalled, so this is used to undo the actions of {@link #XRegExp.install}.\n *\n * @memberOf XRegExp\n * @param {Object|String} options Options object or string.\n * @example\n *\n * // With an options object\n * XRegExp.uninstall({\n *   // Disables support for astral code points in Unicode addons\n *   astral: true,\n *\n *   // Restores native regex methods\n *   natives: true\n * });\n *\n * // With an options string\n * XRegExp.uninstall('astral natives');\n */\n    self.uninstall = function(options) {\n        options = prepareOptions(options);\n\n        if (features.astral && options.astral) {\n            setAstral(false);\n        }\n\n        if (features.natives && options.natives) {\n            setNatives(false);\n        }\n    };\n\n/**\n * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as\n * regex objects or strings. Metacharacters are escaped in patterns provided as strings.\n * Backreferences in provided regex objects are automatically renumbered to work correctly within\n * the larger combined pattern. Native flags used by provided regexes are ignored in favor of the\n * `flags` argument.\n *\n * @memberOf XRegExp\n * @param {Array} patterns Regexes and strings to combine.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {RegExp} Union of the provided regexes and strings.\n * @example\n *\n * XRegExp.union(['a+b*c', /(dogs)\\1/, /(cats)\\1/], 'i');\n * // -> /a\\+b\\*c|(dogs)\\1|(cats)\\2/i\n */\n    self.union = function(patterns, flags) {\n        var parts = /(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*]/g,\n            output = [],\n            numCaptures = 0,\n            numPriorCaptures,\n            captureNames,\n            pattern,\n            rewrite = function(match, paren, backref) {\n                var name = captureNames[numCaptures - numPriorCaptures];\n\n                // Capturing group\n                if (paren) {\n                    ++numCaptures;\n                    // If the current capture has a name, preserve the name\n                    if (name) {\n                        return '(?<' + name + '>';\n                    }\n                // Backreference\n                } else if (backref) {\n                    // Rewrite the backreference\n                    return '\\\\' + (+backref + numPriorCaptures);\n                }\n\n                return match;\n            },\n            i;\n\n        if (!(isType(patterns, 'Array') && patterns.length)) {\n            throw new TypeError('Must provide a nonempty array of patterns to merge');\n        }\n\n        for (i = 0; i < patterns.length; ++i) {\n            pattern = patterns[i];\n\n            if (self.isRegExp(pattern)) {\n                numPriorCaptures = numCaptures;\n                captureNames = (pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames) || [];\n\n                // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns\n                // are independently valid; helps keep this simple. Named captures are put back\n                output.push(nativ.replace.call(self(pattern.source).source, parts, rewrite));\n            } else {\n                output.push(self.escape(pattern));\n            }\n        }\n\n        return self(output.join('|'), flags);\n    };\n\n/* ==============================\n * Fixed/extended native methods\n * ============================== */\n\n/**\n * Adds named capture support (with backreferences returned as `result.name`), and fixes browser\n * bugs in the native `RegExp.prototype.exec`. Calling `XRegExp.install('natives')` uses this to\n * override the native method. Use via `XRegExp.exec` without overriding natives.\n *\n * @private\n * @param {String} str String to search.\n * @returns {Array} Match array with named backreference properties, or `null`.\n */\n    fixed.exec = function(str) {\n        var origLastIndex = this.lastIndex,\n            match = nativ.exec.apply(this, arguments),\n            name,\n            r2,\n            i;\n\n        if (match) {\n            // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating\n            // capturing groups. This fixes IE 5.5-8, but not IE 9's quirks mode or emulation of\n            // older IEs. IE 9 in standards mode follows the spec\n            if (!correctExecNpcg && match.length > 1 && indexOf(match, '') > -1) {\n                r2 = copyRegex(this, {\n                    removeG: true,\n                    isInternalOnly: true\n                });\n                // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed\n                // matching due to characters outside the match\n                nativ.replace.call(String(str).slice(match.index), r2, function() {\n                    var len = arguments.length, i;\n                    // Skip index 0 and the last 2\n                    for (i = 1; i < len - 2; ++i) {\n                        if (arguments[i] === undefined) {\n                            match[i] = undefined;\n                        }\n                    }\n                });\n            }\n\n            // Attach named capture properties\n            if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) {\n                // Skip index 0\n                for (i = 1; i < match.length; ++i) {\n                    name = this[REGEX_DATA].captureNames[i - 1];\n                    if (name) {\n                        match[name] = match[i];\n                    }\n                }\n            }\n\n            // Fix browsers that increment `lastIndex` after zero-length matches\n            if (this.global && !match[0].length && (this.lastIndex > match.index)) {\n                this.lastIndex = match.index;\n            }\n        }\n\n        if (!this.global) {\n            // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)\n            this.lastIndex = origLastIndex;\n        }\n\n        return match;\n    };\n\n/**\n * Fixes browser bugs in the native `RegExp.prototype.test`. Calling `XRegExp.install('natives')`\n * uses this to override the native method.\n *\n * @private\n * @param {String} str String to search.\n * @returns {Boolean} Whether the regex matched the provided value.\n */\n    fixed.test = function(str) {\n        // Do this the easy way :-)\n        return !!fixed.exec.call(this, str);\n    };\n\n/**\n * Adds named capture support (with backreferences returned as `result.name`), and fixes browser\n * bugs in the native `String.prototype.match`. Calling `XRegExp.install('natives')` uses this to\n * override the native method.\n *\n * @private\n * @param {RegExp|*} regex Regex to search with. If not a regex object, it is passed to `RegExp`.\n * @returns {Array} If `regex` uses flag g, an array of match strings or `null`. Without flag g,\n *   the result of calling `regex.exec(this)`.\n */\n    fixed.match = function(regex) {\n        var result;\n\n        if (!self.isRegExp(regex)) {\n            // Use the native `RegExp` rather than `XRegExp`\n            regex = new RegExp(regex);\n        } else if (regex.global) {\n            result = nativ.match.apply(this, arguments);\n            // Fixes IE bug\n            regex.lastIndex = 0;\n\n            return result;\n        }\n\n        return fixed.exec.call(regex, toObject(this));\n    };\n\n/**\n * Adds support for `${n}` tokens for named and numbered backreferences in replacement text, and\n * provides named backreferences to replacement functions as `arguments[0].name`. Also fixes browser\n * bugs in replacement text syntax when performing a replacement using a nonregex search value, and\n * the value of a replacement regex's `lastIndex` property during replacement iterations and upon\n * completion. Calling `XRegExp.install('natives')` uses this to override the native method. Note\n * that this doesn't support SpiderMonkey's proprietary third (`flags`) argument. Use via\n * `XRegExp.replace` without overriding natives.\n *\n * @private\n * @param {RegExp|String} search Search pattern to be replaced.\n * @param {String|Function} replacement Replacement string or a function invoked to create it.\n * @returns {String} New string with one or all matches replaced.\n */\n    fixed.replace = function(search, replacement) {\n        var isRegex = self.isRegExp(search),\n            origLastIndex,\n            captureNames,\n            result;\n\n        if (isRegex) {\n            if (search[REGEX_DATA]) {\n                captureNames = search[REGEX_DATA].captureNames;\n            }\n            // Only needed if `search` is nonglobal\n            origLastIndex = search.lastIndex;\n        } else {\n            search += ''; // Type-convert\n        }\n\n        // Don't use `typeof`; some older browsers return 'function' for regex objects\n        if (isType(replacement, 'Function')) {\n            // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement\n            // functions isn't type-converted to a string\n            result = nativ.replace.call(String(this), search, function() {\n                var args = arguments, i;\n                if (captureNames) {\n                    // Change the `arguments[0]` string primitive to a `String` object that can\n                    // store properties. This really does need to use `String` as a constructor\n                    args[0] = new String(args[0]);\n                    // Store named backreferences on the first argument\n                    for (i = 0; i < captureNames.length; ++i) {\n                        if (captureNames[i]) {\n                            args[0][captureNames[i]] = args[i + 1];\n                        }\n                    }\n                }\n                // Update `lastIndex` before calling `replacement`. Fixes IE, Chrome, Firefox,\n                // Safari bug (last tested IE 9, Chrome 17, Firefox 11, Safari 5.1)\n                if (isRegex && search.global) {\n                    search.lastIndex = args[args.length - 2] + args[0].length;\n                }\n                // ES6 specs the context for replacement functions as `undefined`\n                return replacement.apply(undefined, args);\n            });\n        } else {\n            // Ensure that the last value of `args` will be a string when given nonstring `this`,\n            // while still throwing on null or undefined context\n            result = nativ.replace.call(this == null ? this : String(this), search, function() {\n                // Keep this function's `arguments` available through closure\n                var args = arguments;\n                return nativ.replace.call(String(replacement), replacementToken, function($0, $1, $2) {\n                    var n;\n                    // Named or numbered backreference with curly braces\n                    if ($1) {\n                        // XRegExp behavior for `${n}`:\n                        // 1. Backreference to numbered capture, if `n` is an integer. Use `0` for\n                        //    for the entire match. Any number of leading zeros may be used.\n                        // 2. Backreference to named capture `n`, if it exists and is not an\n                        //    integer overridden by numbered capture. In practice, this does not\n                        //    overlap with numbered capture since XRegExp does not allow named\n                        //    capture to use a bare integer as the name.\n                        // 3. If the name or number does not refer to an existing capturing group,\n                        //    it's an error.\n                        n = +$1; // Type-convert; drop leading zeros\n                        if (n <= args.length - 3) {\n                            return args[n] || '';\n                        }\n                        // Groups with the same name is an error, else would need `lastIndexOf`\n                        n = captureNames ? indexOf(captureNames, $1) : -1;\n                        if (n < 0) {\n                            throw new SyntaxError('Backreference to undefined group ' + $0);\n                        }\n                        return args[n + 1] || '';\n                    }\n                    // Else, special variable or numbered backreference without curly braces\n                    if ($2 === '$') { // $$\n                        return '$';\n                    }\n                    if ($2 === '&' || +$2 === 0) { // $&, $0 (not followed by 1-9), $00\n                        return args[0];\n                    }\n                    if ($2 === '`') { // $` (left context)\n                        return args[args.length - 1].slice(0, args[args.length - 2]);\n                    }\n                    if ($2 === \"'\") { // $' (right context)\n                        return args[args.length - 1].slice(args[args.length - 2] + args[0].length);\n                    }\n                    // Else, numbered backreference without curly braces\n                    $2 = +$2; // Type-convert; drop leading zero\n                    // XRegExp behavior for `$n` and `$nn`:\n                    // - Backrefs end after 1 or 2 digits. Use `${..}` for more digits.\n                    // - `$1` is an error if no capturing groups.\n                    // - `$10` is an error if less than 10 capturing groups. Use `${1}0` instead.\n                    // - `$01` is `$1` if at least one capturing group, else it's an error.\n                    // - `$0` (not followed by 1-9) and `$00` are the entire match.\n                    // Native behavior, for comparison:\n                    // - Backrefs end after 1 or 2 digits. Cannot reference capturing group 100+.\n                    // - `$1` is a literal `$1` if no capturing groups.\n                    // - `$10` is `$1` followed by a literal `0` if less than 10 capturing groups.\n                    // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`.\n                    // - `$0` is a literal `$0`.\n                    if (!isNaN($2)) {\n                        if ($2 > args.length - 3) {\n                            throw new SyntaxError('Backreference to undefined group ' + $0);\n                        }\n                        return args[$2] || '';\n                    }\n                    // `$` followed by an unsupported char is an error, unlike native JS\n                    throw new SyntaxError('Invalid token ' + $0);\n                });\n            });\n        }\n\n        if (isRegex) {\n            if (search.global) {\n                // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)\n                search.lastIndex = 0;\n            } else {\n                // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)\n                search.lastIndex = origLastIndex;\n            }\n        }\n\n        return result;\n    };\n\n/**\n * Fixes browser bugs in the native `String.prototype.split`. Calling `XRegExp.install('natives')`\n * uses this to override the native method. Use via `XRegExp.split` without overriding natives.\n *\n * @private\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {Array} Array of substrings.\n */\n    fixed.split = function(separator, limit) {\n        if (!self.isRegExp(separator)) {\n            // Browsers handle nonregex split correctly, so use the faster native method\n            return nativ.split.apply(this, arguments);\n        }\n\n        var str = String(this),\n            output = [],\n            origLastIndex = separator.lastIndex,\n            lastLastIndex = 0,\n            lastLength;\n\n        // Values for `limit`, per the spec:\n        // If undefined: pow(2,32) - 1\n        // If 0, Infinity, or NaN: 0\n        // If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32);\n        // If negative number: pow(2,32) - floor(abs(limit))\n        // If other: Type-convert, then use the above rules\n        // This line fails in very strange ways for some values of `limit` in Opera 10.5-10.63,\n        // unless Opera Dragonfly is open (go figure). It works in at least Opera 9.5-10.1 and 11+\n        limit = (limit === undefined ? -1 : limit) >>> 0;\n\n        self.forEach(str, separator, function(match) {\n            // This condition is not the same as `if (match[0].length)`\n            if ((match.index + match[0].length) > lastLastIndex) {\n                output.push(str.slice(lastLastIndex, match.index));\n                if (match.length > 1 && match.index < str.length) {\n                    Array.prototype.push.apply(output, match.slice(1));\n                }\n                lastLength = match[0].length;\n                lastLastIndex = match.index + lastLength;\n            }\n        });\n\n        if (lastLastIndex === str.length) {\n            if (!nativ.test.call(separator, '') || lastLength) {\n                output.push('');\n            }\n        } else {\n            output.push(str.slice(lastLastIndex));\n        }\n\n        separator.lastIndex = origLastIndex;\n        return output.length > limit ? output.slice(0, limit) : output;\n    };\n\n/* ==============================\n * Built-in syntax/flag tokens\n * ============================== */\n\n    add = self.addToken;\n\n/*\n * Letter escapes that natively match literal characters: `\\a`, `\\A`, etc. These should be\n * SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-browser\n * consistency and to reserve their syntax, but lets them be superseded by addons.\n */\n    add(\n        /\\\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|x(?![\\dA-Fa-f]{2}))/,\n        function(match, scope) {\n            // \\B is allowed in default scope only\n            if (match[1] === 'B' && scope === defaultScope) {\n                return match[0];\n            }\n            throw new SyntaxError('Invalid escape ' + match[0]);\n        },\n        {\n            scope: 'all',\n            leadChar: '\\\\'\n        }\n    );\n\n/*\n * Unicode code point escape with curly braces: `\\u{N..}`. `N..` is any one or more digit\n * hexadecimal number from 0-10FFFF, and can include leading zeros. Requires the native ES6 `u` flag\n * to support code points greater than U+FFFF. Avoids converting code points above U+FFFF to\n * surrogate pairs (which could be done without flag `u`), since that could lead to broken behavior\n * if you follow a `\\u{N..}` token that references a code point above U+FFFF with a quantifier, or\n * if you use the same in a character class.\n */\n    add(\n        /\\\\u{([\\dA-Fa-f]+)}/,\n        function(match, scope, flags) {\n            var code = dec(match[1]);\n            if (code > 0x10FFFF) {\n                throw new SyntaxError('Invalid Unicode code point ' + match[0]);\n            }\n            if (code <= 0xFFFF) {\n                // Converting to \\uNNNN avoids needing to escape the literal character and keep it\n                // separate from preceding tokens\n                return '\\\\u' + pad4(hex(code));\n            }\n            // If `code` is between 0xFFFF and 0x10FFFF, require and defer to native handling\n            if (hasNativeU && flags.indexOf('u') > -1) {\n                return match[0];\n            }\n            throw new SyntaxError('Cannot use Unicode code point above \\\\u{FFFF} without flag u');\n        },\n        {\n            scope: 'all',\n            leadChar: '\\\\'\n        }\n    );\n\n/*\n * Empty character class: `[]` or `[^]`. This fixes a critical cross-browser syntax inconsistency.\n * Unless this is standardized (per the ES spec), regex syntax can't be accurately parsed because\n * character class endings can't be determined.\n */\n    add(\n        /\\[(\\^?)]/,\n        function(match) {\n            // For cross-browser compatibility with ES3, convert [] to \\b\\B and [^] to [\\s\\S].\n            // (?!) should work like \\b\\B, but is unreliable in some versions of Firefox\n            return match[1] ? '[\\\\s\\\\S]' : '\\\\b\\\\B';\n        },\n        {leadChar: '['}\n    );\n\n/*\n * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in\n * free-spacing mode (flag x).\n */\n    add(\n        /\\(\\?#[^)]*\\)/,\n        function(match, scope, flags) {\n            // Keep tokens separated unless the following token is a quantifier\n            return isQuantifierNext(match.input, match.index + match[0].length, flags) ?\n                '' : '(?:)';\n        },\n        {leadChar: '('}\n    );\n\n/*\n * Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only.\n */\n    add(\n        /\\s+|#.*/,\n        function(match, scope, flags) {\n            // Keep tokens separated unless the following token is a quantifier\n            return isQuantifierNext(match.input, match.index + match[0].length, flags) ?\n                '' : '(?:)';\n        },\n        {flag: 'x'}\n    );\n\n/*\n * Dot, in dotall mode (aka singleline mode, flag s) only.\n */\n    add(\n        /\\./,\n        function() {\n            return '[\\\\s\\\\S]';\n        },\n        {\n            flag: 's',\n            leadChar: '.'\n        }\n    );\n\n/*\n * Named backreference: `\\k<name>`. Backreference names can use the characters A-Z, a-z, 0-9, _,\n * and $ only. Also allows numbered backreferences as `\\k<n>`.\n */\n    add(\n        /\\\\k<([\\w$]+)>/,\n        function(match) {\n            // Groups with the same name is an error, else would need `lastIndexOf`\n            var index = isNaN(match[1]) ? (indexOf(this.captureNames, match[1]) + 1) : +match[1],\n                endIndex = match.index + match[0].length;\n            if (!index || index > this.captureNames.length) {\n                throw new SyntaxError('Backreference to undefined group ' + match[0]);\n            }\n            // Keep backreferences separate from subsequent literal numbers\n            return '\\\\' + index + (\n                endIndex === match.input.length || isNaN(match.input.charAt(endIndex)) ?\n                    '' : '(?:)'\n            );\n        },\n        {leadChar: '\\\\'}\n    );\n\n/*\n * Numbered backreference or octal, plus any following digits: `\\0`, `\\11`, etc. Octals except `\\0`\n * not followed by 0-9 and backreferences to unopened capture groups throw an error. Other matches\n * are returned unaltered. IE < 9 doesn't support backreferences above `\\99` in regex syntax.\n */\n    add(\n        /\\\\(\\d+)/,\n        function(match, scope) {\n            if (\n                !(\n                    scope === defaultScope &&\n                    /^[1-9]/.test(match[1]) &&\n                    +match[1] <= this.captureNames.length\n                ) &&\n                match[1] !== '0'\n            ) {\n                throw new SyntaxError('Cannot use octal escape or backreference to undefined group ' +\n                    match[0]);\n            }\n            return match[0];\n        },\n        {\n            scope: 'all',\n            leadChar: '\\\\'\n        }\n    );\n\n/*\n * Named capturing group; match the opening delimiter only: `(?<name>`. Capture names can use the\n * characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers. Supports Python-style\n * `(?P<name>` as an alternate syntax to avoid issues in some older versions of Opera which natively\n * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to\n * Python-style named capture as octals.\n */\n    add(\n        /\\(\\?P?<([\\w$]+)>/,\n        function(match) {\n            // Disallow bare integers as names because named backreferences are added to match\n            // arrays and therefore numeric properties may lead to incorrect lookups\n            if (!isNaN(match[1])) {\n                throw new SyntaxError('Cannot use integer as capture name ' + match[0]);\n            }\n            if (match[1] === 'length' || match[1] === '__proto__') {\n                throw new SyntaxError('Cannot use reserved word as capture name ' + match[0]);\n            }\n            if (indexOf(this.captureNames, match[1]) > -1) {\n                throw new SyntaxError('Cannot use same name for multiple groups ' + match[0]);\n            }\n            this.captureNames.push(match[1]);\n            this.hasNamedCapture = true;\n            return '(';\n        },\n        {leadChar: '('}\n    );\n\n/*\n * Capturing group; match the opening parenthesis only. Required for support of named capturing\n * groups. Also adds explicit capture mode (flag n).\n */\n    add(\n        /\\((?!\\?)/,\n        function(match, scope, flags) {\n            if (flags.indexOf('n') > -1) {\n                return '(?:';\n            }\n            this.captureNames.push(null);\n            return '(';\n        },\n        {\n            optionalFlags: 'n',\n            leadChar: '('\n        }\n    );\n\n/* ==============================\n * Expose XRegExp\n * ============================== */\n\n    return self;\n\n}());\n\n/*!\n * XRegExp.build 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2012-2015 MIT License\n * Inspired by Lea Verou's RegExp.create <http://lea.verou.me/>\n */\n\n(function(XRegExp) {\n    'use strict';\n\n    var REGEX_DATA = 'xregexp',\n        subParts = /(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*]/g,\n        parts = XRegExp.union([/\\({{([\\w$]+)}}\\)|{{([\\w$]+)}}/, subParts], 'g');\n\n/**\n * Strips a leading `^` and trailing unescaped `$`, if both are present.\n *\n * @private\n * @param {String} pattern Pattern to process.\n * @returns {String} Pattern with edge anchors removed.\n */\n    function deanchor(pattern) {\n        var leadingAnchor = /^\\^/,\n            trailingAnchor = /\\$$/;\n\n        // Ensure that the trailing `$` isn't escaped\n        if (leadingAnchor.test(pattern) && trailingAnchor.test(pattern.replace(/\\\\[\\s\\S]/g, ''))) {\n            return pattern.replace(leadingAnchor, '').replace(trailingAnchor, '');\n        }\n\n        return pattern;\n    }\n\n/**\n * Converts the provided value to an XRegExp. Native RegExp flags are not preserved.\n *\n * @private\n * @param {String|RegExp} value Value to convert.\n * @returns {RegExp} XRegExp object with XRegExp syntax applied.\n */\n    function asXRegExp(value) {\n        return XRegExp.isRegExp(value) ?\n            (value[REGEX_DATA] && value[REGEX_DATA].captureNames ?\n                // Don't recompile, to preserve capture names\n                value :\n                // Recompile as XRegExp\n                XRegExp(value.source)\n            ) :\n            // Compile string as XRegExp\n            XRegExp(value);\n    }\n\n/**\n * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in the\n * outer pattern and provided subpatterns are automatically renumbered to work correctly. Native\n * flags used by provided subpatterns are ignored in favor of the `flags` argument.\n *\n * @memberOf XRegExp\n * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows\n *   `({{name}})` as shorthand for `(?<name>{{name}})`. Patterns cannot be embedded within\n *   character classes.\n * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A\n *   leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {RegExp} Regex with interpolated subpatterns.\n * @example\n *\n * var time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', {\n *   hours: XRegExp.build('{{h12}} : | {{h24}}', {\n *     h12: /1[0-2]|0?[1-9]/,\n *     h24: /2[0-3]|[01][0-9]/\n *   }, 'x'),\n *   minutes: /^[0-5][0-9]$/\n * });\n * time.test('10:59'); // -> true\n * XRegExp.exec('10:59', time).minutes; // -> '59'\n */\n    XRegExp.build = function(pattern, subs, flags) {\n        var inlineFlags = /^\\(\\?([\\w$]+)\\)/.exec(pattern),\n            data = {},\n            numCaps = 0, // 'Caps' is short for captures\n            numPriorCaps,\n            numOuterCaps = 0,\n            outerCapsMap = [0],\n            outerCapNames,\n            sub,\n            p;\n\n        // Add flags within a leading mode modifier to the overall pattern's flags\n        if (inlineFlags) {\n            flags = flags || '';\n            inlineFlags[1].replace(/./g, function(flag) {\n                // Don't add duplicates\n                flags += (flags.indexOf(flag) > -1 ? '' : flag);\n            });\n        }\n\n        for (p in subs) {\n            if (subs.hasOwnProperty(p)) {\n                // Passing to XRegExp enables extended syntax and ensures independent validity,\n                // lest an unescaped `(`, `)`, `[`, or trailing `\\` breaks the `(?:)` wrapper. For\n                // subpatterns provided as native regexes, it dies on octals and adds the property\n                // used to hold extended regex instance data, for simplicity\n                sub = asXRegExp(subs[p]);\n                data[p] = {\n                    // Deanchoring allows embedding independently useful anchored regexes. If you\n                    // really need to keep your anchors, double them (i.e., `^^...$$`)\n                    pattern: deanchor(sub.source),\n                    names: sub[REGEX_DATA].captureNames || []\n                };\n            }\n        }\n\n        // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid;\n        // helps keep this simple. Named captures will be put back\n        pattern = asXRegExp(pattern);\n        outerCapNames = pattern[REGEX_DATA].captureNames || [];\n        pattern = pattern.source.replace(parts, function($0, $1, $2, $3, $4) {\n            var subName = $1 || $2, capName, intro;\n            // Named subpattern\n            if (subName) {\n                if (!data.hasOwnProperty(subName)) {\n                    throw new ReferenceError('Undefined property ' + $0);\n                }\n                // Named subpattern was wrapped in a capturing group\n                if ($1) {\n                    capName = outerCapNames[numOuterCaps];\n                    outerCapsMap[++numOuterCaps] = ++numCaps;\n                    // If it's a named group, preserve the name. Otherwise, use the subpattern name\n                    // as the capture name\n                    intro = '(?<' + (capName || subName) + '>';\n                } else {\n                    intro = '(?:';\n                }\n                numPriorCaps = numCaps;\n                return intro + data[subName].pattern.replace(subParts, function(match, paren, backref) {\n                    // Capturing group\n                    if (paren) {\n                        capName = data[subName].names[numCaps - numPriorCaps];\n                        ++numCaps;\n                        // If the current capture has a name, preserve the name\n                        if (capName) {\n                            return '(?<' + capName + '>';\n                        }\n                    // Backreference\n                    } else if (backref) {\n                        // Rewrite the backreference\n                        return '\\\\' + (+backref + numPriorCaps);\n                    }\n                    return match;\n                }) + ')';\n            }\n            // Capturing group\n            if ($3) {\n                capName = outerCapNames[numOuterCaps];\n                outerCapsMap[++numOuterCaps] = ++numCaps;\n                // If the current capture has a name, preserve the name\n                if (capName) {\n                    return '(?<' + capName + '>';\n                }\n            // Backreference\n            } else if ($4) {\n                // Rewrite the backreference\n                return '\\\\' + outerCapsMap[+$4];\n            }\n            return $0;\n        });\n\n        return XRegExp(pattern, flags);\n    };\n\n}(XRegExp));\n\n/*!\n * XRegExp.matchRecursive 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2009-2015 MIT License\n */\n\n(function(XRegExp) {\n    'use strict';\n\n/**\n * Returns a match detail object composed of the provided values.\n *\n * @private\n */\n    function row(name, value, start, end) {\n        return {\n            name: name,\n            value: value,\n            start: start,\n            end: end\n        };\n    }\n\n/**\n * Returns an array of match strings between outermost left and right delimiters, or an array of\n * objects with detailed match parts and position data. An error is thrown if delimiters are\n * unbalanced within the data.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {String} left Left delimiter as an XRegExp pattern.\n * @param {String} right Right delimiter as an XRegExp pattern.\n * @param {String} [flags] Any native or XRegExp flags, used for the left and right delimiters.\n * @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options.\n * @returns {Array} Array of matches, or an empty array.\n * @example\n *\n * // Basic usage\n * var str = '(t((e))s)t()(ing)';\n * XRegExp.matchRecursive(str, '\\\\(', '\\\\)', 'g');\n * // -> ['t((e))s', '', 'ing']\n *\n * // Extended information mode with valueNames\n * str = 'Here is <div> <div>an</div></div> example';\n * XRegExp.matchRecursive(str, '<div\\\\s*>', '</div>', 'gi', {\n *   valueNames: ['between', 'left', 'match', 'right']\n * });\n * // -> [\n * // {name: 'between', value: 'Here is ',       start: 0,  end: 8},\n * // {name: 'left',    value: '<div>',          start: 8,  end: 13},\n * // {name: 'match',   value: ' <div>an</div>', start: 13, end: 27},\n * // {name: 'right',   value: '</div>',         start: 27, end: 33},\n * // {name: 'between', value: ' example',       start: 33, end: 41}\n * // ]\n *\n * // Omitting unneeded parts with null valueNames, and using escapeChar\n * str = '...{1}\\\\{{function(x,y){return y+x;}}';\n * XRegExp.matchRecursive(str, '{', '}', 'g', {\n *   valueNames: ['literal', null, 'value', null],\n *   escapeChar: '\\\\'\n * });\n * // -> [\n * // {name: 'literal', value: '...', start: 0, end: 3},\n * // {name: 'value',   value: '1',   start: 4, end: 5},\n * // {name: 'literal', value: '\\\\{', start: 6, end: 8},\n * // {name: 'value',   value: 'function(x,y){return y+x;}', start: 9, end: 35}\n * // ]\n *\n * // Sticky mode via flag y\n * str = '<1><<<2>>><3>4<5>';\n * XRegExp.matchRecursive(str, '<', '>', 'gy');\n * // -> ['1', '<<2>>', '3']\n */\n    XRegExp.matchRecursive = function(str, left, right, flags, options) {\n        flags = flags || '';\n        options = options || {};\n        var global = flags.indexOf('g') > -1,\n            sticky = flags.indexOf('y') > -1,\n            // Flag `y` is controlled internally\n            basicFlags = flags.replace(/y/g, ''),\n            escapeChar = options.escapeChar,\n            vN = options.valueNames,\n            output = [],\n            openTokens = 0,\n            delimStart = 0,\n            delimEnd = 0,\n            lastOuterEnd = 0,\n            outerStart,\n            innerStart,\n            leftMatch,\n            rightMatch,\n            esc;\n        left = XRegExp(left, basicFlags);\n        right = XRegExp(right, basicFlags);\n\n        if (escapeChar) {\n            if (escapeChar.length > 1) {\n                throw new Error('Cannot use more than one escape character');\n            }\n            escapeChar = XRegExp.escape(escapeChar);\n            // Using `XRegExp.union` safely rewrites backreferences in `left` and `right`\n            esc = new RegExp(\n                '(?:' + escapeChar + '[\\\\S\\\\s]|(?:(?!' +\n                    XRegExp.union([left, right]).source +\n                    ')[^' + escapeChar + '])+)+',\n                // Flags `gy` not needed here\n                flags.replace(/[^imu]+/g, '')\n            );\n        }\n\n        while (true) {\n            // If using an escape character, advance to the delimiter's next starting position,\n            // skipping any escaped characters in between\n            if (escapeChar) {\n                delimEnd += (XRegExp.exec(str, esc, delimEnd, 'sticky') || [''])[0].length;\n            }\n            leftMatch = XRegExp.exec(str, left, delimEnd);\n            rightMatch = XRegExp.exec(str, right, delimEnd);\n            // Keep the leftmost match only\n            if (leftMatch && rightMatch) {\n                if (leftMatch.index <= rightMatch.index) {\n                    rightMatch = null;\n                } else {\n                    leftMatch = null;\n                }\n            }\n            // Paths (LM: leftMatch, RM: rightMatch, OT: openTokens):\n            // LM | RM | OT | Result\n            // 1  | 0  | 1  | loop\n            // 1  | 0  | 0  | loop\n            // 0  | 1  | 1  | loop\n            // 0  | 1  | 0  | throw\n            // 0  | 0  | 1  | throw\n            // 0  | 0  | 0  | break\n            // The paths above don't include the sticky mode special case. The loop ends after the\n            // first completed match if not `global`.\n            if (leftMatch || rightMatch) {\n                delimStart = (leftMatch || rightMatch).index;\n                delimEnd = delimStart + (leftMatch || rightMatch)[0].length;\n            } else if (!openTokens) {\n                break;\n            }\n            if (sticky && !openTokens && delimStart > lastOuterEnd) {\n                break;\n            }\n            if (leftMatch) {\n                if (!openTokens) {\n                    outerStart = delimStart;\n                    innerStart = delimEnd;\n                }\n                ++openTokens;\n            } else if (rightMatch && openTokens) {\n                if (!--openTokens) {\n                    if (vN) {\n                        if (vN[0] && outerStart > lastOuterEnd) {\n                            output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart));\n                        }\n                        if (vN[1]) {\n                            output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart));\n                        }\n                        if (vN[2]) {\n                            output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart));\n                        }\n                        if (vN[3]) {\n                            output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd));\n                        }\n                    } else {\n                        output.push(str.slice(innerStart, delimStart));\n                    }\n                    lastOuterEnd = delimEnd;\n                    if (!global) {\n                        break;\n                    }\n                }\n            } else {\n                throw new Error('Unbalanced delimiter found in string');\n            }\n            // If the delimiter matched an empty string, avoid an infinite loop\n            if (delimStart === delimEnd) {\n                ++delimEnd;\n            }\n        }\n\n        if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd) {\n            output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length));\n        }\n\n        return output;\n    };\n\n}(XRegExp));\n\n/*!\n * XRegExp Unicode Base 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2008-2015 MIT License\n */\n\n/**\n * Adds base support for Unicode matching:\n * - Adds syntax `\\p{..}` for matching Unicode tokens. Tokens can be inverted using `\\P{..}` or\n *   `\\p{^..}`. Token names ignore case, spaces, hyphens, and underscores. You can omit the brackets\n *   for token names that are a single letter (e.g. `\\pL` or `PL`).\n * - Adds flag A (astral), which enables 21-bit Unicode support.\n * - Adds the `XRegExp.addUnicodeData` method used by other addons to provide character data.\n *\n * Unicode Base relies on externally provided Unicode character data. Official addons are available\n * to provide data for Unicode categories, scripts, blocks, and properties.\n *\n * @requires XRegExp\n */\n(function(XRegExp) {\n    'use strict';\n\n// Storage for Unicode data\n    var unicode = {};\n\n/* ==============================\n * Private functions\n * ============================== */\n\n// Generates a token lookup name: lowercase, with hyphens, spaces, and underscores removed\n    function normalize(name) {\n        return name.replace(/[- _]+/g, '').toLowerCase();\n    }\n\n// Adds leading zeros if shorter than four characters\n    function pad4(str) {\n        while (str.length < 4) {\n            str = '0' + str;\n        }\n        return str;\n    }\n\n// Converts a hexadecimal number to decimal\n    function dec(hex) {\n        return parseInt(hex, 16);\n    }\n\n// Converts a decimal number to hexadecimal\n    function hex(dec) {\n        return parseInt(dec, 10).toString(16);\n    }\n\n// Gets the decimal code of a literal code unit, \\xHH, \\uHHHH, or a backslash-escaped literal\n    function charCode(chr) {\n        var esc = /^\\\\[xu](.+)/.exec(chr);\n        return esc ?\n            dec(esc[1]) :\n            chr.charCodeAt(chr.charAt(0) === '\\\\' ? 1 : 0);\n    }\n\n// Inverts a list of ordered BMP characters and ranges\n    function invertBmp(range) {\n        var output = '',\n            lastEnd = -1,\n            start;\n        XRegExp.forEach(range, /(\\\\x..|\\\\u....|\\\\?[\\s\\S])(?:-(\\\\x..|\\\\u....|\\\\?[\\s\\S]))?/, function(m) {\n            start = charCode(m[1]);\n            if (start > (lastEnd + 1)) {\n                output += '\\\\u' + pad4(hex(lastEnd + 1));\n                if (start > (lastEnd + 2)) {\n                    output += '-\\\\u' + pad4(hex(start - 1));\n                }\n            }\n            lastEnd = charCode(m[2] || m[1]);\n        });\n        if (lastEnd < 0xFFFF) {\n            output += '\\\\u' + pad4(hex(lastEnd + 1));\n            if (lastEnd < 0xFFFE) {\n                output += '-\\\\uFFFF';\n            }\n        }\n        return output;\n    }\n\n// Generates an inverted BMP range on first use\n    function cacheInvertedBmp(slug) {\n        var prop = 'b!';\n        return unicode[slug][prop] || (\n            unicode[slug][prop] = invertBmp(unicode[slug].bmp)\n        );\n    }\n\n// Combines and optionally negates BMP and astral data\n    function buildAstral(slug, isNegated) {\n        var item = unicode[slug],\n            combined = '';\n        if (item.bmp && !item.isBmpLast) {\n            combined = '[' + item.bmp + ']' + (item.astral ? '|' : '');\n        }\n        if (item.astral) {\n            combined += item.astral;\n        }\n        if (item.isBmpLast && item.bmp) {\n            combined += (item.astral ? '|' : '') + '[' + item.bmp + ']';\n        }\n        // Astral Unicode tokens always match a code point, never a code unit\n        return isNegated ?\n            '(?:(?!' + combined + ')(?:[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\0-\\uFFFF]))' :\n            '(?:' + combined + ')';\n    }\n\n// Builds a complete astral pattern on first use\n    function cacheAstral(slug, isNegated) {\n        var prop = isNegated ? 'a!' : 'a=';\n        return unicode[slug][prop] || (\n            unicode[slug][prop] = buildAstral(slug, isNegated)\n        );\n    }\n\n/* ==============================\n * Core functionality\n * ============================== */\n\n/*\n * Add Unicode token syntax: \\p{..}, \\P{..}, \\p{^..}. Also add astral mode (flag A).\n */\n    XRegExp.addToken(\n        // Use `*` instead of `+` to avoid capturing `^` as the token name in `\\p{^}`\n        /\\\\([pP])(?:{(\\^?)([^}]*)}|([A-Za-z]))/,\n        function(match, scope, flags) {\n            var ERR_DOUBLE_NEG = 'Invalid double negation ',\n                ERR_UNKNOWN_NAME = 'Unknown Unicode token ',\n                ERR_UNKNOWN_REF = 'Unicode token missing data ',\n                ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token ',\n                ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes',\n                // Negated via \\P{..} or \\p{^..}\n                isNegated = match[1] === 'P' || !!match[2],\n                // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A\n                isAstralMode = flags.indexOf('A') > -1,\n                // Token lookup name. Check `[4]` first to avoid passing `undefined` via `\\p{}`\n                slug = normalize(match[4] || match[3]),\n                // Token data object\n                item = unicode[slug];\n\n            if (match[1] === 'P' && match[2]) {\n                throw new SyntaxError(ERR_DOUBLE_NEG + match[0]);\n            }\n            if (!unicode.hasOwnProperty(slug)) {\n                throw new SyntaxError(ERR_UNKNOWN_NAME + match[0]);\n            }\n\n            // Switch to the negated form of the referenced Unicode token\n            if (item.inverseOf) {\n                slug = normalize(item.inverseOf);\n                if (!unicode.hasOwnProperty(slug)) {\n                    throw new ReferenceError(ERR_UNKNOWN_REF + match[0] + ' -> ' + item.inverseOf);\n                }\n                item = unicode[slug];\n                isNegated = !isNegated;\n            }\n\n            if (!(item.bmp || isAstralMode)) {\n                throw new SyntaxError(ERR_ASTRAL_ONLY + match[0]);\n            }\n            if (isAstralMode) {\n                if (scope === 'class') {\n                    throw new SyntaxError(ERR_ASTRAL_IN_CLASS);\n                }\n\n                return cacheAstral(slug, isNegated);\n            }\n\n            return scope === 'class' ?\n                (isNegated ? cacheInvertedBmp(slug) : item.bmp) :\n                (isNegated ? '[^' : '[') + item.bmp + ']';\n        },\n        {\n            scope: 'all',\n            optionalFlags: 'A',\n            leadChar: '\\\\'\n        }\n    );\n\n/**\n * Adds to the list of Unicode tokens that XRegExp regexes can match via `\\p` or `\\P`.\n *\n * @memberOf XRegExp\n * @param {Array} data Objects with named character ranges. Each object may have properties `name`,\n *   `alias`, `isBmpLast`, `inverseOf`, `bmp`, and `astral`. All but `name` are optional, although\n *   one of `bmp` or `astral` is required (unless `inverseOf` is set). If `astral` is absent, the\n *   `bmp` data is used for BMP and astral modes. If `bmp` is absent, the name errors in BMP mode\n *   but works in astral mode. If both `bmp` and `astral` are provided, the `bmp` data only is used\n *   in BMP mode, and the combination of `bmp` and `astral` data is used in astral mode.\n *   `isBmpLast` is needed when a token matches orphan high surrogates *and* uses surrogate pairs\n *   to match astral code points. The `bmp` and `astral` data should be a combination of literal\n *   characters and `\\xHH` or `\\uHHHH` escape sequences, with hyphens to create ranges. Any regex\n *   metacharacters in the data should be escaped, apart from range-creating hyphens. The `astral`\n *   data can additionally use character classes and alternation, and should use surrogate pairs to\n *   represent astral code points. `inverseOf` can be used to avoid duplicating character data if a\n *   Unicode token is defined as the exact inverse of another token.\n * @example\n *\n * // Basic use\n * XRegExp.addUnicodeData([{\n *   name: 'XDigit',\n *   alias: 'Hexadecimal',\n *   bmp: '0-9A-Fa-f'\n * }]);\n * XRegExp('\\\\p{XDigit}:\\\\p{Hexadecimal}+').test('0:3D'); // -> true\n */\n    XRegExp.addUnicodeData = function(data) {\n        var ERR_NO_NAME = 'Unicode token requires name',\n            ERR_NO_DATA = 'Unicode token has no character data ',\n            item,\n            i;\n\n        for (i = 0; i < data.length; ++i) {\n            item = data[i];\n            if (!item.name) {\n                throw new Error(ERR_NO_NAME);\n            }\n            if (!(item.inverseOf || item.bmp || item.astral)) {\n                throw new Error(ERR_NO_DATA + item.name);\n            }\n            unicode[normalize(item.name)] = item;\n            if (item.alias) {\n                unicode[normalize(item.alias)] = item;\n            }\n        }\n\n        // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and\n        // flags might now produce different results\n        XRegExp.cache.flush('patterns');\n    };\n\n}(XRegExp));\n\n/*!\n * XRegExp Unicode Blocks 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2010-2015 MIT License\n * Unicode data provided by Mathias Bynens <http://mathiasbynens.be/>\n */\n\n/**\n * Adds support for all Unicode blocks. Block names use the prefix 'In'. E.g., `\\p{InBasicLatin}`.\n * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 8.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n(function(XRegExp) {\n    'use strict';\n\n    if (!XRegExp.addUnicodeData) {\n        throw new ReferenceError('Unicode Base must be loaded before Unicode Blocks');\n    }\n\n    XRegExp.addUnicodeData([\n        {\n            name: 'InAegean_Numbers',\n            astral: '\\uD800[\\uDD00-\\uDD3F]'\n        },\n        {\n            name: 'InAhom',\n            astral: '\\uD805[\\uDF00-\\uDF3F]'\n        },\n        {\n            name: 'InAlchemical_Symbols',\n            astral: '\\uD83D[\\uDF00-\\uDF7F]'\n        },\n        {\n            name: 'InAlphabetic_Presentation_Forms',\n            bmp: '\\uFB00-\\uFB4F'\n        },\n        {\n            name: 'InAnatolian_Hieroglyphs',\n            astral: '\\uD811[\\uDC00-\\uDE7F]'\n        },\n        {\n            name: 'InAncient_Greek_Musical_Notation',\n            astral: '\\uD834[\\uDE00-\\uDE4F]'\n        },\n        {\n            name: 'InAncient_Greek_Numbers',\n            astral: '\\uD800[\\uDD40-\\uDD8F]'\n        },\n        {\n            name: 'InAncient_Symbols',\n            astral: '\\uD800[\\uDD90-\\uDDCF]'\n        },\n        {\n            name: 'InArabic',\n            bmp: '\\u0600-\\u06FF'\n        },\n        {\n            name: 'InArabic_Extended_A',\n            bmp: '\\u08A0-\\u08FF'\n        },\n        {\n            name: 'InArabic_Mathematical_Alphabetic_Symbols',\n            astral: '\\uD83B[\\uDE00-\\uDEFF]'\n        },\n        {\n            name: 'InArabic_Presentation_Forms_A',\n            bmp: '\\uFB50-\\uFDFF'\n        },\n        {\n            name: 'InArabic_Presentation_Forms_B',\n            bmp: '\\uFE70-\\uFEFF'\n        },\n        {\n            name: 'InArabic_Supplement',\n            bmp: '\\u0750-\\u077F'\n        },\n        {\n            name: 'InArmenian',\n            bmp: '\\u0530-\\u058F'\n        },\n        {\n            name: 'InArrows',\n            bmp: '\\u2190-\\u21FF'\n        },\n        {\n            name: 'InAvestan',\n            astral: '\\uD802[\\uDF00-\\uDF3F]'\n        },\n        {\n            name: 'InBalinese',\n            bmp: '\\u1B00-\\u1B7F'\n        },\n        {\n            name: 'InBamum',\n            bmp: '\\uA6A0-\\uA6FF'\n        },\n        {\n            name: 'InBamum_Supplement',\n            astral: '\\uD81A[\\uDC00-\\uDE3F]'\n        },\n        {\n            name: 'InBasic_Latin',\n            bmp: '\\0-\\x7F'\n        },\n        {\n            name: 'InBassa_Vah',\n            astral: '\\uD81A[\\uDED0-\\uDEFF]'\n        },\n        {\n            name: 'InBatak',\n            bmp: '\\u1BC0-\\u1BFF'\n        },\n        {\n            name: 'InBengali',\n            bmp: '\\u0980-\\u09FF'\n        },\n        {\n            name: 'InBlock_Elements',\n            bmp: '\\u2580-\\u259F'\n        },\n        {\n            name: 'InBopomofo',\n            bmp: '\\u3100-\\u312F'\n        },\n        {\n            name: 'InBopomofo_Extended',\n            bmp: '\\u31A0-\\u31BF'\n        },\n        {\n            name: 'InBox_Drawing',\n            bmp: '\\u2500-\\u257F'\n        },\n        {\n            name: 'InBrahmi',\n            astral: '\\uD804[\\uDC00-\\uDC7F]'\n        },\n        {\n            name: 'InBraille_Patterns',\n            bmp: '\\u2800-\\u28FF'\n        },\n        {\n            name: 'InBuginese',\n            bmp: '\\u1A00-\\u1A1F'\n        },\n        {\n            name: 'InBuhid',\n            bmp: '\\u1740-\\u175F'\n        },\n        {\n            name: 'InByzantine_Musical_Symbols',\n            astral: '\\uD834[\\uDC00-\\uDCFF]'\n        },\n        {\n            name: 'InCJK_Compatibility',\n            bmp: '\\u3300-\\u33FF'\n        },\n        {\n            name: 'InCJK_Compatibility_Forms',\n            bmp: '\\uFE30-\\uFE4F'\n        },\n        {\n            name: 'InCJK_Compatibility_Ideographs',\n            bmp: '\\uF900-\\uFAFF'\n        },\n        {\n            name: 'InCJK_Compatibility_Ideographs_Supplement',\n            astral: '\\uD87E[\\uDC00-\\uDE1F]'\n        },\n        {\n            name: 'InCJK_Radicals_Supplement',\n            bmp: '\\u2E80-\\u2EFF'\n        },\n        {\n            name: 'InCJK_Strokes',\n            bmp: '\\u31C0-\\u31EF'\n        },\n        {\n            name: 'InCJK_Symbols_and_Punctuation',\n            bmp: '\\u3000-\\u303F'\n        },\n        {\n            name: 'InCJK_Unified_Ideographs',\n            bmp: '\\u4E00-\\u9FFF'\n        },\n        {\n            name: 'InCJK_Unified_Ideographs_Extension_A',\n            bmp: '\\u3400-\\u4DBF'\n        },\n        {\n            name: 'InCJK_Unified_Ideographs_Extension_B',\n            astral: '[\\uD840-\\uD868][\\uDC00-\\uDFFF]|\\uD869[\\uDC00-\\uDEDF]'\n        },\n        {\n            name: 'InCJK_Unified_Ideographs_Extension_C',\n            astral: '\\uD86D[\\uDC00-\\uDF3F]|[\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD869[\\uDF00-\\uDFFF]'\n        },\n        {\n            name: 'InCJK_Unified_Ideographs_Extension_D',\n            astral: '\\uD86D[\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1F]'\n        },\n        {\n            name: 'InCJK_Unified_Ideographs_Extension_E',\n            astral: '[\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD873[\\uDC00-\\uDEAF]|\\uD86E[\\uDC20-\\uDFFF]'\n        },\n        {\n            name: 'InCarian',\n            astral: '\\uD800[\\uDEA0-\\uDEDF]'\n        },\n        {\n            name: 'InCaucasian_Albanian',\n            astral: '\\uD801[\\uDD30-\\uDD6F]'\n        },\n        {\n            name: 'InChakma',\n            astral: '\\uD804[\\uDD00-\\uDD4F]'\n        },\n        {\n            name: 'InCham',\n            bmp: '\\uAA00-\\uAA5F'\n        },\n        {\n            name: 'InCherokee',\n            bmp: '\\u13A0-\\u13FF'\n        },\n        {\n            name: 'InCherokee_Supplement',\n            bmp: '\\uAB70-\\uABBF'\n        },\n        {\n            name: 'InCombining_Diacritical_Marks',\n            bmp: '\\u0300-\\u036F'\n        },\n        {\n            name: 'InCombining_Diacritical_Marks_Extended',\n            bmp: '\\u1AB0-\\u1AFF'\n        },\n        {\n            name: 'InCombining_Diacritical_Marks_Supplement',\n            bmp: '\\u1DC0-\\u1DFF'\n        },\n        {\n            name: 'InCombining_Diacritical_Marks_for_Symbols',\n            bmp: '\\u20D0-\\u20FF'\n        },\n        {\n            name: 'InCombining_Half_Marks',\n            bmp: '\\uFE20-\\uFE2F'\n        },\n        {\n            name: 'InCommon_Indic_Number_Forms',\n            bmp: '\\uA830-\\uA83F'\n        },\n        {\n            name: 'InControl_Pictures',\n            bmp: '\\u2400-\\u243F'\n        },\n        {\n            name: 'InCoptic',\n            bmp: '\\u2C80-\\u2CFF'\n        },\n        {\n            name: 'InCoptic_Epact_Numbers',\n            astral: '\\uD800[\\uDEE0-\\uDEFF]'\n        },\n        {\n            name: 'InCounting_Rod_Numerals',\n            astral: '\\uD834[\\uDF60-\\uDF7F]'\n        },\n        {\n            name: 'InCuneiform',\n            astral: '\\uD808[\\uDC00-\\uDFFF]'\n        },\n        {\n            name: 'InCuneiform_Numbers_and_Punctuation',\n            astral: '\\uD809[\\uDC00-\\uDC7F]'\n        },\n        {\n            name: 'InCurrency_Symbols',\n            bmp: '\\u20A0-\\u20CF'\n        },\n        {\n            name: 'InCypriot_Syllabary',\n            astral: '\\uD802[\\uDC00-\\uDC3F]'\n        },\n        {\n            name: 'InCyrillic',\n            bmp: '\\u0400-\\u04FF'\n        },\n        {\n            name: 'InCyrillic_Extended_A',\n            bmp: '\\u2DE0-\\u2DFF'\n        },\n        {\n            name: 'InCyrillic_Extended_B',\n            bmp: '\\uA640-\\uA69F'\n        },\n        {\n            name: 'InCyrillic_Supplement',\n            bmp: '\\u0500-\\u052F'\n        },\n        {\n            name: 'InDeseret',\n            astral: '\\uD801[\\uDC00-\\uDC4F]'\n        },\n        {\n            name: 'InDevanagari',\n            bmp: '\\u0900-\\u097F'\n        },\n        {\n            name: 'InDevanagari_Extended',\n            bmp: '\\uA8E0-\\uA8FF'\n        },\n        {\n            name: 'InDingbats',\n            bmp: '\\u2700-\\u27BF'\n        },\n        {\n            name: 'InDomino_Tiles',\n            astral: '\\uD83C[\\uDC30-\\uDC9F]'\n        },\n        {\n            name: 'InDuployan',\n            astral: '\\uD82F[\\uDC00-\\uDC9F]'\n        },\n        {\n            name: 'InEarly_Dynastic_Cuneiform',\n            astral: '\\uD809[\\uDC80-\\uDD4F]'\n        },\n        {\n            name: 'InEgyptian_Hieroglyphs',\n            astral: '\\uD80C[\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2F]'\n        },\n        {\n            name: 'InElbasan',\n            astral: '\\uD801[\\uDD00-\\uDD2F]'\n        },\n        {\n            name: 'InEmoticons',\n            astral: '\\uD83D[\\uDE00-\\uDE4F]'\n        },\n        {\n            name: 'InEnclosed_Alphanumeric_Supplement',\n            astral: '\\uD83C[\\uDD00-\\uDDFF]'\n        },\n        {\n            name: 'InEnclosed_Alphanumerics',\n            bmp: '\\u2460-\\u24FF'\n        },\n        {\n            name: 'InEnclosed_CJK_Letters_and_Months',\n            bmp: '\\u3200-\\u32FF'\n        },\n        {\n            name: 'InEnclosed_Ideographic_Supplement',\n            astral: '\\uD83C[\\uDE00-\\uDEFF]'\n        },\n        {\n            name: 'InEthiopic',\n            bmp: '\\u1200-\\u137F'\n        },\n        {\n            name: 'InEthiopic_Extended',\n            bmp: '\\u2D80-\\u2DDF'\n        },\n        {\n            name: 'InEthiopic_Extended_A',\n            bmp: '\\uAB00-\\uAB2F'\n        },\n        {\n            name: 'InEthiopic_Supplement',\n            bmp: '\\u1380-\\u139F'\n        },\n        {\n            name: 'InGeneral_Punctuation',\n            bmp: '\\u2000-\\u206F'\n        },\n        {\n            name: 'InGeometric_Shapes',\n            bmp: '\\u25A0-\\u25FF'\n        },\n        {\n            name: 'InGeometric_Shapes_Extended',\n            astral: '\\uD83D[\\uDF80-\\uDFFF]'\n        },\n        {\n            name: 'InGeorgian',\n            bmp: '\\u10A0-\\u10FF'\n        },\n        {\n            name: 'InGeorgian_Supplement',\n            bmp: '\\u2D00-\\u2D2F'\n        },\n        {\n            name: 'InGlagolitic',\n            bmp: '\\u2C00-\\u2C5F'\n        },\n        {\n            name: 'InGothic',\n            astral: '\\uD800[\\uDF30-\\uDF4F]'\n        },\n        {\n            name: 'InGrantha',\n            astral: '\\uD804[\\uDF00-\\uDF7F]'\n        },\n        {\n            name: 'InGreek_Extended',\n            bmp: '\\u1F00-\\u1FFF'\n        },\n        {\n            name: 'InGreek_and_Coptic',\n            bmp: '\\u0370-\\u03FF'\n        },\n        {\n            name: 'InGujarati',\n            bmp: '\\u0A80-\\u0AFF'\n        },\n        {\n            name: 'InGurmukhi',\n            bmp: '\\u0A00-\\u0A7F'\n        },\n        {\n            name: 'InHalfwidth_and_Fullwidth_Forms',\n            bmp: '\\uFF00-\\uFFEF'\n        },\n        {\n            name: 'InHangul_Compatibility_Jamo',\n            bmp: '\\u3130-\\u318F'\n        },\n        {\n            name: 'InHangul_Jamo',\n            bmp: '\\u1100-\\u11FF'\n        },\n        {\n            name: 'InHangul_Jamo_Extended_A',\n            bmp: '\\uA960-\\uA97F'\n        },\n        {\n            name: 'InHangul_Jamo_Extended_B',\n            bmp: '\\uD7B0-\\uD7FF'\n        },\n        {\n            name: 'InHangul_Syllables',\n            bmp: '\\uAC00-\\uD7AF'\n        },\n        {\n            name: 'InHanunoo',\n            bmp: '\\u1720-\\u173F'\n        },\n        {\n            name: 'InHatran',\n            astral: '\\uD802[\\uDCE0-\\uDCFF]'\n        },\n        {\n            name: 'InHebrew',\n            bmp: '\\u0590-\\u05FF'\n        },\n        {\n            name: 'InHigh_Private_Use_Surrogates',\n            bmp: '\\uDB80-\\uDBFF'\n        },\n        {\n            name: 'InHigh_Surrogates',\n            bmp: '\\uD800-\\uDB7F'\n        },\n        {\n            name: 'InHiragana',\n            bmp: '\\u3040-\\u309F'\n        },\n        {\n            name: 'InIPA_Extensions',\n            bmp: '\\u0250-\\u02AF'\n        },\n        {\n            name: 'InIdeographic_Description_Characters',\n            bmp: '\\u2FF0-\\u2FFF'\n        },\n        {\n            name: 'InImperial_Aramaic',\n            astral: '\\uD802[\\uDC40-\\uDC5F]'\n        },\n        {\n            name: 'InInscriptional_Pahlavi',\n            astral: '\\uD802[\\uDF60-\\uDF7F]'\n        },\n        {\n            name: 'InInscriptional_Parthian',\n            astral: '\\uD802[\\uDF40-\\uDF5F]'\n        },\n        {\n            name: 'InJavanese',\n            bmp: '\\uA980-\\uA9DF'\n        },\n        {\n            name: 'InKaithi',\n            astral: '\\uD804[\\uDC80-\\uDCCF]'\n        },\n        {\n            name: 'InKana_Supplement',\n            astral: '\\uD82C[\\uDC00-\\uDCFF]'\n        },\n        {\n            name: 'InKanbun',\n            bmp: '\\u3190-\\u319F'\n        },\n        {\n            name: 'InKangxi_Radicals',\n            bmp: '\\u2F00-\\u2FDF'\n        },\n        {\n            name: 'InKannada',\n            bmp: '\\u0C80-\\u0CFF'\n        },\n        {\n            name: 'InKatakana',\n            bmp: '\\u30A0-\\u30FF'\n        },\n        {\n            name: 'InKatakana_Phonetic_Extensions',\n            bmp: '\\u31F0-\\u31FF'\n        },\n        {\n            name: 'InKayah_Li',\n            bmp: '\\uA900-\\uA92F'\n        },\n        {\n            name: 'InKharoshthi',\n            astral: '\\uD802[\\uDE00-\\uDE5F]'\n        },\n        {\n            name: 'InKhmer',\n            bmp: '\\u1780-\\u17FF'\n        },\n        {\n            name: 'InKhmer_Symbols',\n            bmp: '\\u19E0-\\u19FF'\n        },\n        {\n            name: 'InKhojki',\n            astral: '\\uD804[\\uDE00-\\uDE4F]'\n        },\n        {\n            name: 'InKhudawadi',\n            astral: '\\uD804[\\uDEB0-\\uDEFF]'\n        },\n        {\n            name: 'InLao',\n            bmp: '\\u0E80-\\u0EFF'\n        },\n        {\n            name: 'InLatin_Extended_Additional',\n            bmp: '\\u1E00-\\u1EFF'\n        },\n        {\n            name: 'InLatin_Extended_A',\n            bmp: '\\u0100-\\u017F'\n        },\n        {\n            name: 'InLatin_Extended_B',\n            bmp: '\\u0180-\\u024F'\n        },\n        {\n            name: 'InLatin_Extended_C',\n            bmp: '\\u2C60-\\u2C7F'\n        },\n        {\n            name: 'InLatin_Extended_D',\n            bmp: '\\uA720-\\uA7FF'\n        },\n        {\n            name: 'InLatin_Extended_E',\n            bmp: '\\uAB30-\\uAB6F'\n        },\n        {\n            name: 'InLatin_1_Supplement',\n            bmp: '\\x80-\\xFF'\n        },\n        {\n            name: 'InLepcha',\n            bmp: '\\u1C00-\\u1C4F'\n        },\n        {\n            name: 'InLetterlike_Symbols',\n            bmp: '\\u2100-\\u214F'\n        },\n        {\n            name: 'InLimbu',\n            bmp: '\\u1900-\\u194F'\n        },\n        {\n            name: 'InLinear_A',\n            astral: '\\uD801[\\uDE00-\\uDF7F]'\n        },\n        {\n            name: 'InLinear_B_Ideograms',\n            astral: '\\uD800[\\uDC80-\\uDCFF]'\n        },\n        {\n            name: 'InLinear_B_Syllabary',\n            astral: '\\uD800[\\uDC00-\\uDC7F]'\n        },\n        {\n            name: 'InLisu',\n            bmp: '\\uA4D0-\\uA4FF'\n        },\n        {\n            name: 'InLow_Surrogates',\n            bmp: '\\uDC00-\\uDFFF'\n        },\n        {\n            name: 'InLycian',\n            astral: '\\uD800[\\uDE80-\\uDE9F]'\n        },\n        {\n            name: 'InLydian',\n            astral: '\\uD802[\\uDD20-\\uDD3F]'\n        },\n        {\n            name: 'InMahajani',\n            astral: '\\uD804[\\uDD50-\\uDD7F]'\n        },\n        {\n            name: 'InMahjong_Tiles',\n            astral: '\\uD83C[\\uDC00-\\uDC2F]'\n        },\n        {\n            name: 'InMalayalam',\n            bmp: '\\u0D00-\\u0D7F'\n        },\n        {\n            name: 'InMandaic',\n            bmp: '\\u0840-\\u085F'\n        },\n        {\n            name: 'InManichaean',\n            astral: '\\uD802[\\uDEC0-\\uDEFF]'\n        },\n        {\n            name: 'InMathematical_Alphanumeric_Symbols',\n            astral: '\\uD835[\\uDC00-\\uDFFF]'\n        },\n        {\n            name: 'InMathematical_Operators',\n            bmp: '\\u2200-\\u22FF'\n        },\n        {\n            name: 'InMeetei_Mayek',\n            bmp: '\\uABC0-\\uABFF'\n        },\n        {\n            name: 'InMeetei_Mayek_Extensions',\n            bmp: '\\uAAE0-\\uAAFF'\n        },\n        {\n            name: 'InMende_Kikakui',\n            astral: '\\uD83A[\\uDC00-\\uDCDF]'\n        },\n        {\n            name: 'InMeroitic_Cursive',\n            astral: '\\uD802[\\uDDA0-\\uDDFF]'\n        },\n        {\n            name: 'InMeroitic_Hieroglyphs',\n            astral: '\\uD802[\\uDD80-\\uDD9F]'\n        },\n        {\n            name: 'InMiao',\n            astral: '\\uD81B[\\uDF00-\\uDF9F]'\n        },\n        {\n            name: 'InMiscellaneous_Mathematical_Symbols_A',\n            bmp: '\\u27C0-\\u27EF'\n        },\n        {\n            name: 'InMiscellaneous_Mathematical_Symbols_B',\n            bmp: '\\u2980-\\u29FF'\n        },\n        {\n            name: 'InMiscellaneous_Symbols',\n            bmp: '\\u2600-\\u26FF'\n        },\n        {\n            name: 'InMiscellaneous_Symbols_and_Arrows',\n            bmp: '\\u2B00-\\u2BFF'\n        },\n        {\n            name: 'InMiscellaneous_Symbols_and_Pictographs',\n            astral: '\\uD83D[\\uDC00-\\uDDFF]|\\uD83C[\\uDF00-\\uDFFF]'\n        },\n        {\n            name: 'InMiscellaneous_Technical',\n            bmp: '\\u2300-\\u23FF'\n        },\n        {\n            name: 'InModi',\n            astral: '\\uD805[\\uDE00-\\uDE5F]'\n        },\n        {\n            name: 'InModifier_Tone_Letters',\n            bmp: '\\uA700-\\uA71F'\n        },\n        {\n            name: 'InMongolian',\n            bmp: '\\u1800-\\u18AF'\n        },\n        {\n            name: 'InMro',\n            astral: '\\uD81A[\\uDE40-\\uDE6F]'\n        },\n        {\n            name: 'InMultani',\n            astral: '\\uD804[\\uDE80-\\uDEAF]'\n        },\n        {\n            name: 'InMusical_Symbols',\n            astral: '\\uD834[\\uDD00-\\uDDFF]'\n        },\n        {\n            name: 'InMyanmar',\n            bmp: '\\u1000-\\u109F'\n        },\n        {\n            name: 'InMyanmar_Extended_A',\n            bmp: '\\uAA60-\\uAA7F'\n        },\n        {\n            name: 'InMyanmar_Extended_B',\n            bmp: '\\uA9E0-\\uA9FF'\n        },\n        {\n            name: 'InNKo',\n            bmp: '\\u07C0-\\u07FF'\n        },\n        {\n            name: 'InNabataean',\n            astral: '\\uD802[\\uDC80-\\uDCAF]'\n        },\n        {\n            name: 'InNew_Tai_Lue',\n            bmp: '\\u1980-\\u19DF'\n        },\n        {\n            name: 'InNumber_Forms',\n            bmp: '\\u2150-\\u218F'\n        },\n        {\n            name: 'InOgham',\n            bmp: '\\u1680-\\u169F'\n        },\n        {\n            name: 'InOl_Chiki',\n            bmp: '\\u1C50-\\u1C7F'\n        },\n        {\n            name: 'InOld_Hungarian',\n            astral: '\\uD803[\\uDC80-\\uDCFF]'\n        },\n        {\n            name: 'InOld_Italic',\n            astral: '\\uD800[\\uDF00-\\uDF2F]'\n        },\n        {\n            name: 'InOld_North_Arabian',\n            astral: '\\uD802[\\uDE80-\\uDE9F]'\n        },\n        {\n            name: 'InOld_Permic',\n            astral: '\\uD800[\\uDF50-\\uDF7F]'\n        },\n        {\n            name: 'InOld_Persian',\n            astral: '\\uD800[\\uDFA0-\\uDFDF]'\n        },\n        {\n            name: 'InOld_South_Arabian',\n            astral: '\\uD802[\\uDE60-\\uDE7F]'\n        },\n        {\n            name: 'InOld_Turkic',\n            astral: '\\uD803[\\uDC00-\\uDC4F]'\n        },\n        {\n            name: 'InOptical_Character_Recognition',\n            bmp: '\\u2440-\\u245F'\n        },\n        {\n            name: 'InOriya',\n            bmp: '\\u0B00-\\u0B7F'\n        },\n        {\n            name: 'InOrnamental_Dingbats',\n            astral: '\\uD83D[\\uDE50-\\uDE7F]'\n        },\n        {\n            name: 'InOsmanya',\n            astral: '\\uD801[\\uDC80-\\uDCAF]'\n        },\n        {\n            name: 'InPahawh_Hmong',\n            astral: '\\uD81A[\\uDF00-\\uDF8F]'\n        },\n        {\n            name: 'InPalmyrene',\n            astral: '\\uD802[\\uDC60-\\uDC7F]'\n        },\n        {\n            name: 'InPau_Cin_Hau',\n            astral: '\\uD806[\\uDEC0-\\uDEFF]'\n        },\n        {\n            name: 'InPhags_pa',\n            bmp: '\\uA840-\\uA87F'\n        },\n        {\n            name: 'InPhaistos_Disc',\n            astral: '\\uD800[\\uDDD0-\\uDDFF]'\n        },\n        {\n            name: 'InPhoenician',\n            astral: '\\uD802[\\uDD00-\\uDD1F]'\n        },\n        {\n            name: 'InPhonetic_Extensions',\n            bmp: '\\u1D00-\\u1D7F'\n        },\n        {\n            name: 'InPhonetic_Extensions_Supplement',\n            bmp: '\\u1D80-\\u1DBF'\n        },\n        {\n            name: 'InPlaying_Cards',\n            astral: '\\uD83C[\\uDCA0-\\uDCFF]'\n        },\n        {\n            name: 'InPrivate_Use_Area',\n            bmp: '\\uE000-\\uF8FF'\n        },\n        {\n            name: 'InPsalter_Pahlavi',\n            astral: '\\uD802[\\uDF80-\\uDFAF]'\n        },\n        {\n            name: 'InRejang',\n            bmp: '\\uA930-\\uA95F'\n        },\n        {\n            name: 'InRumi_Numeral_Symbols',\n            astral: '\\uD803[\\uDE60-\\uDE7F]'\n        },\n        {\n            name: 'InRunic',\n            bmp: '\\u16A0-\\u16FF'\n        },\n        {\n            name: 'InSamaritan',\n            bmp: '\\u0800-\\u083F'\n        },\n        {\n            name: 'InSaurashtra',\n            bmp: '\\uA880-\\uA8DF'\n        },\n        {\n            name: 'InSharada',\n            astral: '\\uD804[\\uDD80-\\uDDDF]'\n        },\n        {\n            name: 'InShavian',\n            astral: '\\uD801[\\uDC50-\\uDC7F]'\n        },\n        {\n            name: 'InShorthand_Format_Controls',\n            astral: '\\uD82F[\\uDCA0-\\uDCAF]'\n        },\n        {\n            name: 'InSiddham',\n            astral: '\\uD805[\\uDD80-\\uDDFF]'\n        },\n        {\n            name: 'InSinhala',\n            bmp: '\\u0D80-\\u0DFF'\n        },\n        {\n            name: 'InSinhala_Archaic_Numbers',\n            astral: '\\uD804[\\uDDE0-\\uDDFF]'\n        },\n        {\n            name: 'InSmall_Form_Variants',\n            bmp: '\\uFE50-\\uFE6F'\n        },\n        {\n            name: 'InSora_Sompeng',\n            astral: '\\uD804[\\uDCD0-\\uDCFF]'\n        },\n        {\n            name: 'InSpacing_Modifier_Letters',\n            bmp: '\\u02B0-\\u02FF'\n        },\n        {\n            name: 'InSpecials',\n            bmp: '\\uFFF0-\\uFFFF'\n        },\n        {\n            name: 'InSundanese',\n            bmp: '\\u1B80-\\u1BBF'\n        },\n        {\n            name: 'InSundanese_Supplement',\n            bmp: '\\u1CC0-\\u1CCF'\n        },\n        {\n            name: 'InSuperscripts_and_Subscripts',\n            bmp: '\\u2070-\\u209F'\n        },\n        {\n            name: 'InSupplemental_Arrows_A',\n            bmp: '\\u27F0-\\u27FF'\n        },\n        {\n            name: 'InSupplemental_Arrows_B',\n            bmp: '\\u2900-\\u297F'\n        },\n        {\n            name: 'InSupplemental_Arrows_C',\n            astral: '\\uD83E[\\uDC00-\\uDCFF]'\n        },\n        {\n            name: 'InSupplemental_Mathematical_Operators',\n            bmp: '\\u2A00-\\u2AFF'\n        },\n        {\n            name: 'InSupplemental_Punctuation',\n            bmp: '\\u2E00-\\u2E7F'\n        },\n        {\n            name: 'InSupplemental_Symbols_and_Pictographs',\n            astral: '\\uD83E[\\uDD00-\\uDDFF]'\n        },\n        {\n            name: 'InSupplementary_Private_Use_Area_A',\n            astral: '[\\uDB80-\\uDBBF][\\uDC00-\\uDFFF]'\n        },\n        {\n            name: 'InSupplementary_Private_Use_Area_B',\n            astral: '[\\uDBC0-\\uDBFF][\\uDC00-\\uDFFF]'\n        },\n        {\n            name: 'InSutton_SignWriting',\n            astral: '\\uD836[\\uDC00-\\uDEAF]'\n        },\n        {\n            name: 'InSyloti_Nagri',\n            bmp: '\\uA800-\\uA82F'\n        },\n        {\n            name: 'InSyriac',\n            bmp: '\\u0700-\\u074F'\n        },\n        {\n            name: 'InTagalog',\n            bmp: '\\u1700-\\u171F'\n        },\n        {\n            name: 'InTagbanwa',\n            bmp: '\\u1760-\\u177F'\n        },\n        {\n            name: 'InTags',\n            astral: '\\uDB40[\\uDC00-\\uDC7F]'\n        },\n        {\n            name: 'InTai_Le',\n            bmp: '\\u1950-\\u197F'\n        },\n        {\n            name: 'InTai_Tham',\n            bmp: '\\u1A20-\\u1AAF'\n        },\n        {\n            name: 'InTai_Viet',\n            bmp: '\\uAA80-\\uAADF'\n        },\n        {\n            name: 'InTai_Xuan_Jing_Symbols',\n            astral: '\\uD834[\\uDF00-\\uDF5F]'\n        },\n        {\n            name: 'InTakri',\n            astral: '\\uD805[\\uDE80-\\uDECF]'\n        },\n        {\n            name: 'InTamil',\n            bmp: '\\u0B80-\\u0BFF'\n        },\n        {\n            name: 'InTelugu',\n            bmp: '\\u0C00-\\u0C7F'\n        },\n        {\n            name: 'InThaana',\n            bmp: '\\u0780-\\u07BF'\n        },\n        {\n            name: 'InThai',\n            bmp: '\\u0E00-\\u0E7F'\n        },\n        {\n            name: 'InTibetan',\n            bmp: '\\u0F00-\\u0FFF'\n        },\n        {\n            name: 'InTifinagh',\n            bmp: '\\u2D30-\\u2D7F'\n        },\n        {\n            name: 'InTirhuta',\n            astral: '\\uD805[\\uDC80-\\uDCDF]'\n        },\n        {\n            name: 'InTransport_and_Map_Symbols',\n            astral: '\\uD83D[\\uDE80-\\uDEFF]'\n        },\n        {\n            name: 'InUgaritic',\n            astral: '\\uD800[\\uDF80-\\uDF9F]'\n        },\n        {\n            name: 'InUnified_Canadian_Aboriginal_Syllabics',\n            bmp: '\\u1400-\\u167F'\n        },\n        {\n            name: 'InUnified_Canadian_Aboriginal_Syllabics_Extended',\n            bmp: '\\u18B0-\\u18FF'\n        },\n        {\n            name: 'InVai',\n            bmp: '\\uA500-\\uA63F'\n        },\n        {\n            name: 'InVariation_Selectors',\n            bmp: '\\uFE00-\\uFE0F'\n        },\n        {\n            name: 'InVariation_Selectors_Supplement',\n            astral: '\\uDB40[\\uDD00-\\uDDEF]'\n        },\n        {\n            name: 'InVedic_Extensions',\n            bmp: '\\u1CD0-\\u1CFF'\n        },\n        {\n            name: 'InVertical_Forms',\n            bmp: '\\uFE10-\\uFE1F'\n        },\n        {\n            name: 'InWarang_Citi',\n            astral: '\\uD806[\\uDCA0-\\uDCFF]'\n        },\n        {\n            name: 'InYi_Radicals',\n            bmp: '\\uA490-\\uA4CF'\n        },\n        {\n            name: 'InYi_Syllables',\n            bmp: '\\uA000-\\uA48F'\n        },\n        {\n            name: 'InYijing_Hexagram_Symbols',\n            bmp: '\\u4DC0-\\u4DFF'\n        }\n    ]);\n\n}(XRegExp));\n\n/*!\n * XRegExp Unicode Categories 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2010-2015 MIT License\n * Unicode data provided by Mathias Bynens <http://mathiasbynens.be/>\n */\n\n/**\n * Adds support for Unicode's general categories. E.g., `\\p{Lu}` or `\\p{Uppercase Letter}`. See\n * category descriptions in UAX #44 <http://unicode.org/reports/tr44/#GC_Values_Table>. Token names\n * are case insensitive, and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 8.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n(function(XRegExp) {\n    'use strict';\n\n    if (!XRegExp.addUnicodeData) {\n        throw new ReferenceError('Unicode Base must be loaded before Unicode Categories');\n    }\n\n    XRegExp.addUnicodeData([\n        {\n            name: 'C',\n            alias: 'Other',\n            isBmpLast: true,\n            bmp: '\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B\\u058C\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08B5-\\u08E2\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0AF8\\u0AFA-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0BFF\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D00\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5E\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F6\\u13F7\\u13FE\\u13FF\\u169D-\\u169F\\u16F9-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180E\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE\\u1AAF\\u1ABF-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7\\u1CFA-\\u1CFF\\u1DF6-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BF-\\u20CF\\u20F1-\\u20FF\\u218C-\\u218F\\u23FB-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2B74\\u2B75\\u2B96\\u2B97\\u2BBA-\\u2BBC\\u2BC9\\u2BD2-\\u2BEB\\u2BF0-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E43-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FD6-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA6F8-\\uA6FF\\uA7AE\\uA7AF\\uA7B8-\\uA7F6\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FE\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB66-\\uAB6F\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF',\n            astral: '\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD73-\\uDD7A\\uDDE9-\\uDDFF\\uDE46-\\uDEFF\\uDF57-\\uDF5F\\uDF72-\\uDFFF]|\\uD836[\\uDE8C-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDCFF\\uDD0D-\\uDD0F\\uDD2F\\uDD6C-\\uDD6F\\uDD9B-\\uDDE5\\uDE03-\\uDE0F\\uDE3B-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDEFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDE6D\\uDE70-\\uDECF\\uDEEE\\uDEEF\\uDEF6-\\uDEFF\\uDF46-\\uDF4F\\uDF5A\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD809[\\uDC6F\\uDC75-\\uDC7F\\uDD44-\\uDFFF]|\\uD81B[\\uDC00-\\uDEFF\\uDF45-\\uDF4F\\uDF7F-\\uDF8E\\uDFA0-\\uDFFF]|\\uD86E[\\uDC1E\\uDC1F]|\\uD83D[\\uDD7A\\uDDA4\\uDED1-\\uDEDF\\uDEED-\\uDEEF\\uDEF4-\\uDEFF\\uDF74-\\uDF7F\\uDFD5-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6E\\uDD70-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDCFF\\uDD03-\\uDD06\\uDD34-\\uDD36\\uDD8D-\\uDD8F\\uDD9C-\\uDD9F\\uDDA1-\\uDDCF\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEFC-\\uDEFF\\uDF24-\\uDF2F\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDFC4-\\uDFC7\\uDFD6-\\uDFFF]|\\uD869[\\uDED7-\\uDEFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDEEF\\uDEF2-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]|\\uD804[\\uDC4E-\\uDC51\\uDC70-\\uDC7E\\uDCBD\\uDCC2-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD44-\\uDD4F\\uDD77-\\uDD7F\\uDDCE\\uDDCF\\uDDE0\\uDDF5-\\uDDFF\\uDE12\\uDE3E-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEAA-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF3B\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD83A[\\uDCC5\\uDCC6\\uDCD7-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD86D[\\uDF35-\\uDF3F]|[\\uD807\\uD80A\\uD80B\\uD80E-\\uD810\\uD812-\\uD819\\uD81C-\\uD82B\\uD82D\\uD82E\\uD830-\\uD833\\uD837-\\uD839\\uD83F\\uD874-\\uD87D\\uD87F-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD806[\\uDC00-\\uDC9F\\uDCF3-\\uDCFE\\uDD00-\\uDEBF\\uDEF9-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCF9\\uDD00-\\uDE5F\\uDE7F-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDFCC\\uDFCD]|\\uD805[\\uDC00-\\uDC7F\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDDE-\\uDDFF\\uDE45-\\uDE4F\\uDE5A-\\uDE7F\\uDEB8-\\uDEBF\\uDECA-\\uDEFF\\uDF1A-\\uDF1C\\uDF2C-\\uDF2F\\uDF40-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56\\uDC9F-\\uDCA6\\uDCB0-\\uDCDF\\uDCF3\\uDCF6-\\uDCFA\\uDD1C-\\uDD1E\\uDD3A-\\uDD3E\\uDD40-\\uDD7F\\uDDB8-\\uDDBB\\uDDD0\\uDDD1\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE34-\\uDE37\\uDE3B-\\uDE3E\\uDE48-\\uDE4F\\uDE59-\\uDE5F\\uDEA0-\\uDEBF\\uDEE7-\\uDEEA\\uDEF7-\\uDEFF\\uDF36-\\uDF38\\uDF56\\uDF57\\uDF73-\\uDF77\\uDF92-\\uDF98\\uDF9D-\\uDFA8\\uDFB0-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A\\uDC9B\\uDCA0-\\uDFFF]|\\uD82C[\\uDC02-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE-\\uDD0F\\uDD19-\\uDD7F\\uDD85-\\uDDBF\\uDDC1-\\uDFFF]|\\uD873[\\uDEA2-\\uDFFF]'\n        },\n        {\n            name: 'Cc',\n            alias: 'Control',\n            bmp: '\\0-\\x1F\\x7F-\\x9F'\n        },\n        {\n            name: 'Cf',\n            alias: 'Format',\n            bmp: '\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB',\n            astral: '\\uDB40[\\uDC01\\uDC20-\\uDC7F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uD804\\uDCBD'\n        },\n        {\n            name: 'Cn',\n            alias: 'Unassigned',\n            bmp: '\\u0378\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B\\u058C\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u05FF\\u061D\\u070E\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08B5-\\u08E2\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0AF8\\u0AFA-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0BFF\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D00\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5E\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F6\\u13F7\\u13FE\\u13FF\\u169D-\\u169F\\u16F9-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE\\u1AAF\\u1ABF-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7\\u1CFA-\\u1CFF\\u1DF6-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u2065\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BF-\\u20CF\\u20F1-\\u20FF\\u218C-\\u218F\\u23FB-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2B74\\u2B75\\u2B96\\u2B97\\u2BBA-\\u2BBC\\u2BC9\\u2BD2-\\u2BEB\\u2BF0-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E43-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FD6-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA6F8-\\uA6FF\\uA7AE\\uA7AF\\uA7B8-\\uA7F6\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FE\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB66-\\uAB6F\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD\\uFEFE\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFF8\\uFFFE\\uFFFF',\n            astral: '\\uDB40[\\uDC00\\uDC02-\\uDC1F\\uDC80-\\uDCFF\\uDDF0-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDDE9-\\uDDFF\\uDE46-\\uDEFF\\uDF57-\\uDF5F\\uDF72-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDCFF\\uDD0D-\\uDD0F\\uDD2F\\uDD6C-\\uDD6F\\uDD9B-\\uDDE5\\uDE03-\\uDE0F\\uDE3B-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDEFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDE6D\\uDE70-\\uDECF\\uDEEE\\uDEEF\\uDEF6-\\uDEFF\\uDF46-\\uDF4F\\uDF5A\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD809[\\uDC6F\\uDC75-\\uDC7F\\uDD44-\\uDFFF]|\\uD81B[\\uDC00-\\uDEFF\\uDF45-\\uDF4F\\uDF7F-\\uDF8E\\uDFA0-\\uDFFF]|\\uD86E[\\uDC1E\\uDC1F]|\\uD83D[\\uDD7A\\uDDA4\\uDED1-\\uDEDF\\uDEED-\\uDEEF\\uDEF4-\\uDEFF\\uDF74-\\uDF7F\\uDFD5-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6E\\uDD70-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDCFF\\uDD03-\\uDD06\\uDD34-\\uDD36\\uDD8D-\\uDD8F\\uDD9C-\\uDD9F\\uDDA1-\\uDDCF\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEFC-\\uDEFF\\uDF24-\\uDF2F\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDFC4-\\uDFC7\\uDFD6-\\uDFFF]|\\uD869[\\uDED7-\\uDEFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDEEF\\uDEF2-\\uDFFF]|[\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A\\uDC9B\\uDCA4-\\uDFFF]|\\uD83A[\\uDCC5\\uDCC6\\uDCD7-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD86D[\\uDF35-\\uDF3F]|[\\uD807\\uD80A\\uD80B\\uD80E-\\uD810\\uD812-\\uD819\\uD81C-\\uD82B\\uD82D\\uD82E\\uD830-\\uD833\\uD837-\\uD839\\uD83F\\uD874-\\uD87D\\uD87F-\\uDB3F\\uDB41-\\uDB7F][\\uDC00-\\uDFFF]|\\uD806[\\uDC00-\\uDC9F\\uDCF3-\\uDCFE\\uDD00-\\uDEBF\\uDEF9-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCF9\\uDD00-\\uDE5F\\uDE7F-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDFCC\\uDFCD]|\\uD836[\\uDE8C-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD805[\\uDC00-\\uDC7F\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDDE-\\uDDFF\\uDE45-\\uDE4F\\uDE5A-\\uDE7F\\uDEB8-\\uDEBF\\uDECA-\\uDEFF\\uDF1A-\\uDF1C\\uDF2C-\\uDF2F\\uDF40-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56\\uDC9F-\\uDCA6\\uDCB0-\\uDCDF\\uDCF3\\uDCF6-\\uDCFA\\uDD1C-\\uDD1E\\uDD3A-\\uDD3E\\uDD40-\\uDD7F\\uDDB8-\\uDDBB\\uDDD0\\uDDD1\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE34-\\uDE37\\uDE3B-\\uDE3E\\uDE48-\\uDE4F\\uDE59-\\uDE5F\\uDEA0-\\uDEBF\\uDEE7-\\uDEEA\\uDEF7-\\uDEFF\\uDF36-\\uDF38\\uDF56\\uDF57\\uDF73-\\uDF77\\uDF92-\\uDF98\\uDF9D-\\uDFA8\\uDFB0-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD804[\\uDC4E-\\uDC51\\uDC70-\\uDC7E\\uDCC2-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD44-\\uDD4F\\uDD77-\\uDD7F\\uDDCE\\uDDCF\\uDDE0\\uDDF5-\\uDDFF\\uDE12\\uDE3E-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEAA-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF3B\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD82C[\\uDC02-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE-\\uDD0F\\uDD19-\\uDD7F\\uDD85-\\uDDBF\\uDDC1-\\uDFFF]|\\uD873[\\uDEA2-\\uDFFF]'\n        },\n        {\n            name: 'Co',\n            alias: 'Private_Use',\n            bmp: '\\uE000-\\uF8FF',\n            astral: '[\\uDB80-\\uDBBE\\uDBC0-\\uDBFE][\\uDC00-\\uDFFF]|[\\uDBBF\\uDBFF][\\uDC00-\\uDFFD]'\n        },\n        {\n            name: 'Cs',\n            alias: 'Surrogate',\n            bmp: '\\uD800-\\uDFFF'\n        },\n        {\n            name: 'L',\n            alias: 'Letter',\n            bmp: 'A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n            astral: '\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD83A[\\uDC00-\\uDCC4]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD87E[\\uDC00-\\uDE1D]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD809[\\uDC80-\\uDD43]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD808[\\uDC00-\\uDF99]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD811[\\uDC00-\\uDE46]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD82C[\\uDC00\\uDC01]|\\uD873[\\uDC00-\\uDEA1]'\n        },\n        {\n            name: 'Ll',\n            alias: 'Lowercase_Letter',\n            bmp: 'a-z\\xB5\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0561-\\u0587\\u13F8-\\u13FD\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7B5\\uA7B7\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A',\n            astral: '\\uD803[\\uDCC0-\\uDCF2]|\\uD835[\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]|\\uD801[\\uDC28-\\uDC4F]|\\uD806[\\uDCC0-\\uDCDF]'\n        },\n        {\n            name: 'Lm',\n            alias: 'Modifier_Letter',\n            bmp: '\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5\\u06E6\\u07F4\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D6A\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7C\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA69C\\uA69D\\uA717-\\uA71F\\uA770\\uA788\\uA7F8\\uA7F9\\uA9CF\\uA9E6\\uAA70\\uAADD\\uAAF3\\uAAF4\\uAB5C-\\uAB5F\\uFF70\\uFF9E\\uFF9F',\n            astral: '\\uD81A[\\uDF40-\\uDF43]|\\uD81B[\\uDF93-\\uDF9F]'\n        },\n        {\n            name: 'Lo',\n            alias: 'Other_Letter',\n            bmp: '\\xAA\\xBA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10D0-\\u10FA\\u10FD-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA78F\\uA7F7\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n            astral: '\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4]|\\uD803[\\uDC00-\\uDC48]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD87E[\\uDC00-\\uDE1D]|\\uD81B[\\uDF00-\\uDF44\\uDF50]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCFF\\uDEC0-\\uDEF8]|\\uD809[\\uDC80-\\uDD43]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD808[\\uDC00-\\uDF99]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD801[\\uDC50-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD811[\\uDC00-\\uDE46]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD82C[\\uDC00\\uDC01]|\\uD873[\\uDC00-\\uDEA1]'\n        },\n        {\n            name: 'Lt',\n            alias: 'Titlecase_Letter',\n            bmp: '\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC'\n        },\n        {\n            name: 'Lu',\n            alias: 'Uppercase_Letter',\n            bmp: 'A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AD\\uA7B0-\\uA7B4\\uA7B6\\uFF21-\\uFF3A',\n            astral: '\\uD806[\\uDCA0-\\uDCBF]|\\uD803[\\uDC80-\\uDCB2]|\\uD801[\\uDC00-\\uDC27]|\\uD835[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA]'\n        },\n        {\n            name: 'M',\n            alias: 'Mark',\n            bmp: '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F',\n            astral: '\\uD805[\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDCA-\\uDDCC\\uDE2C-\\uDE37\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD81B[\\uDF51-\\uDF7E\\uDF8F-\\uDF92]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD82F[\\uDC9D\\uDC9E]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD83A[\\uDCD0-\\uDCD6]|\\uDB40[\\uDD00-\\uDDEF]'\n        },\n        {\n            name: 'Mc',\n            alias: 'Spacing_Mark',\n            bmp: '\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u094F\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u1A19\\u1A1A\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2\\u1BF3\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\u1CF3\\u302E\\u302F\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uAA7D\\uAAEB\\uAAEE\\uAAEF\\uAAF5\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC',\n            astral: '\\uD834[\\uDD65\\uDD66\\uDD6D-\\uDD72]|\\uD804[\\uDC00\\uDC02\\uDC82\\uDCB0-\\uDCB2\\uDCB7\\uDCB8\\uDD2C\\uDD82\\uDDB3-\\uDDB5\\uDDBF\\uDDC0\\uDE2C-\\uDE2E\\uDE32\\uDE33\\uDE35\\uDEE0-\\uDEE2\\uDF02\\uDF03\\uDF3E\\uDF3F\\uDF41-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63]|\\uD805[\\uDCB0-\\uDCB2\\uDCB9\\uDCBB-\\uDCBE\\uDCC1\\uDDAF-\\uDDB1\\uDDB8-\\uDDBB\\uDDBE\\uDE30-\\uDE32\\uDE3B\\uDE3C\\uDE3E\\uDEAC\\uDEAE\\uDEAF\\uDEB6\\uDF20\\uDF21\\uDF26]|\\uD81B[\\uDF51-\\uDF7E]'\n        },\n        {\n            name: 'Me',\n            alias: 'Enclosing_Mark',\n            bmp: '\\u0488\\u0489\\u1ABE\\u20DD-\\u20E0\\u20E2-\\u20E4\\uA670-\\uA672'\n        },\n        {\n            name: 'Mn',\n            alias: 'Nonspacing_Mark',\n            bmp: '\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C00\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D01\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099\\u309A\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9E5\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEC\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F',\n            astral: '\\uD805[\\uDCB3-\\uDCB8\\uDCBA\\uDCBF\\uDCC0\\uDCC2\\uDCC3\\uDDB2-\\uDDB5\\uDDBC\\uDDBD\\uDDBF\\uDDC0\\uDDDC\\uDDDD\\uDE33-\\uDE3A\\uDE3D\\uDE3F\\uDE40\\uDEAB\\uDEAD\\uDEB0-\\uDEB5\\uDEB7\\uDF1D-\\uDF1F\\uDF22-\\uDF25\\uDF27-\\uDF2B]|\\uD834[\\uDD67-\\uDD69\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF8F-\\uDF92]|\\uD82F[\\uDC9D\\uDC9E]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD804[\\uDC01\\uDC38-\\uDC46\\uDC7F-\\uDC81\\uDCB3-\\uDCB6\\uDCB9\\uDCBA\\uDD00-\\uDD02\\uDD27-\\uDD2B\\uDD2D-\\uDD34\\uDD73\\uDD80\\uDD81\\uDDB6-\\uDDBE\\uDDCA-\\uDDCC\\uDE2F-\\uDE31\\uDE34\\uDE36\\uDE37\\uDEDF\\uDEE3-\\uDEEA\\uDF00\\uDF01\\uDF3C\\uDF40\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD83A[\\uDCD0-\\uDCD6]|\\uDB40[\\uDD00-\\uDDEF]'\n        },\n        {\n            name: 'N',\n            alias: 'Number',\n            bmp: '0-9\\xB2\\xB3\\xB9\\xBC-\\xBE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19',\n            astral: '\\uD800[\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDEE1-\\uDEFB\\uDF20-\\uDF23\\uDF41\\uDF4A\\uDFD1-\\uDFD5]|\\uD801[\\uDCA0-\\uDCA9]|\\uD803[\\uDCFA-\\uDCFF\\uDE60-\\uDE7E]|\\uD835[\\uDFCE-\\uDFFF]|\\uD83A[\\uDCC7-\\uDCCF]|\\uD81A[\\uDE60-\\uDE69\\uDF50-\\uDF59\\uDF5B-\\uDF61]|\\uD806[\\uDCE0-\\uDCF2]|\\uD804[\\uDC52-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDDE1-\\uDDF4\\uDEF0-\\uDEF9]|\\uD834[\\uDF60-\\uDF71]|\\uD83C[\\uDD00-\\uDD0C]|\\uD809[\\uDC00-\\uDC6E]|\\uD802[\\uDC58-\\uDC5F\\uDC79-\\uDC7F\\uDCA7-\\uDCAF\\uDCFB-\\uDCFF\\uDD16-\\uDD1B\\uDDBC\\uDDBD\\uDDC0-\\uDDCF\\uDDD2-\\uDDFF\\uDE40-\\uDE47\\uDE7D\\uDE7E\\uDE9D-\\uDE9F\\uDEEB-\\uDEEF\\uDF58-\\uDF5F\\uDF78-\\uDF7F\\uDFA9-\\uDFAF]|\\uD805[\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF3B]'\n        },\n        {\n            name: 'Nd',\n            alias: 'Decimal_Number',\n            bmp: '0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19',\n            astral: '\\uD801[\\uDCA0-\\uDCA9]|\\uD835[\\uDFCE-\\uDFFF]|\\uD805[\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF39]|\\uD806[\\uDCE0-\\uDCE9]|\\uD804[\\uDC66-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDEF0-\\uDEF9]|\\uD81A[\\uDE60-\\uDE69\\uDF50-\\uDF59]'\n        },\n        {\n            name: 'Nl',\n            alias: 'Letter_Number',\n            bmp: '\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A\\uA6E6-\\uA6EF',\n            astral: '\\uD809[\\uDC00-\\uDC6E]|\\uD800[\\uDD40-\\uDD74\\uDF41\\uDF4A\\uDFD1-\\uDFD5]'\n        },\n        {\n            name: 'No',\n            alias: 'Other_Number',\n            bmp: '\\xB2\\xB3\\xB9\\xBC-\\xBE\\u09F4-\\u09F9\\u0B72-\\u0B77\\u0BF0-\\u0BF2\\u0C78-\\u0C7E\\u0D70-\\u0D75\\u0F2A-\\u0F33\\u1369-\\u137C\\u17F0-\\u17F9\\u19DA\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u215F\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA830-\\uA835',\n            astral: '\\uD804[\\uDC52-\\uDC65\\uDDE1-\\uDDF4]|\\uD803[\\uDCFA-\\uDCFF\\uDE60-\\uDE7E]|\\uD83C[\\uDD00-\\uDD0C]|\\uD806[\\uDCEA-\\uDCF2]|\\uD83A[\\uDCC7-\\uDCCF]|\\uD802[\\uDC58-\\uDC5F\\uDC79-\\uDC7F\\uDCA7-\\uDCAF\\uDCFB-\\uDCFF\\uDD16-\\uDD1B\\uDDBC\\uDDBD\\uDDC0-\\uDDCF\\uDDD2-\\uDDFF\\uDE40-\\uDE47\\uDE7D\\uDE7E\\uDE9D-\\uDE9F\\uDEEB-\\uDEEF\\uDF58-\\uDF5F\\uDF78-\\uDF7F\\uDFA9-\\uDFAF]|\\uD805[\\uDF3A\\uDF3B]|\\uD81A[\\uDF5B-\\uDF61]|\\uD834[\\uDF60-\\uDF71]|\\uD800[\\uDD07-\\uDD33\\uDD75-\\uDD78\\uDD8A\\uDD8B\\uDEE1-\\uDEFB\\uDF20-\\uDF23]'\n        },\n        {\n            name: 'P',\n            alias: 'Punctuation',\n            bmp: '\\x21-\\x23\\x25-\\\\x2A\\x2C-\\x2F\\x3A\\x3B\\\\x3F\\x40\\\\x5B-\\\\x5D\\x5F\\\\x7B\\x7D\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65',\n            astral: '\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD809[\\uDC70-\\uDC74]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD836[\\uDE87-\\uDE8B]|\\uD801\\uDD6F|\\uD82F\\uDC9F|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]'\n        },\n        {\n            name: 'Pc',\n            alias: 'Connector_Punctuation',\n            bmp: '\\x5F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F'\n        },\n        {\n            name: 'Pd',\n            alias: 'Dash_Punctuation',\n            bmp: '\\\\x2D\\u058A\\u05BE\\u1400\\u1806\\u2010-\\u2015\\u2E17\\u2E1A\\u2E3A\\u2E3B\\u2E40\\u301C\\u3030\\u30A0\\uFE31\\uFE32\\uFE58\\uFE63\\uFF0D'\n        },\n        {\n            name: 'Pe',\n            alias: 'Close_Punctuation',\n            bmp: '\\\\x29\\\\x5D\\x7D\\u0F3B\\u0F3D\\u169C\\u2046\\u207E\\u208E\\u2309\\u230B\\u232A\\u2769\\u276B\\u276D\\u276F\\u2771\\u2773\\u2775\\u27C6\\u27E7\\u27E9\\u27EB\\u27ED\\u27EF\\u2984\\u2986\\u2988\\u298A\\u298C\\u298E\\u2990\\u2992\\u2994\\u2996\\u2998\\u29D9\\u29DB\\u29FD\\u2E23\\u2E25\\u2E27\\u2E29\\u3009\\u300B\\u300D\\u300F\\u3011\\u3015\\u3017\\u3019\\u301B\\u301E\\u301F\\uFD3E\\uFE18\\uFE36\\uFE38\\uFE3A\\uFE3C\\uFE3E\\uFE40\\uFE42\\uFE44\\uFE48\\uFE5A\\uFE5C\\uFE5E\\uFF09\\uFF3D\\uFF5D\\uFF60\\uFF63'\n        },\n        {\n            name: 'Pf',\n            alias: 'Final_Punctuation',\n            bmp: '\\xBB\\u2019\\u201D\\u203A\\u2E03\\u2E05\\u2E0A\\u2E0D\\u2E1D\\u2E21'\n        },\n        {\n            name: 'Pi',\n            alias: 'Initial_Punctuation',\n            bmp: '\\xAB\\u2018\\u201B\\u201C\\u201F\\u2039\\u2E02\\u2E04\\u2E09\\u2E0C\\u2E1C\\u2E20'\n        },\n        {\n            name: 'Po',\n            alias: 'Other_Punctuation',\n            bmp: '\\x21-\\x23\\x25-\\x27\\\\x2A\\x2C\\\\x2E\\x2F\\x3A\\x3B\\\\x3F\\x40\\\\x5C\\xA1\\xA7\\xB6\\xB7\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u166D\\u166E\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u1805\\u1807-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2016\\u2017\\u2020-\\u2027\\u2030-\\u2038\\u203B-\\u203E\\u2041-\\u2043\\u2047-\\u2051\\u2053\\u2055-\\u205E\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00\\u2E01\\u2E06-\\u2E08\\u2E0B\\u2E0E-\\u2E16\\u2E18\\u2E19\\u2E1B\\u2E1E\\u2E1F\\u2E2A-\\u2E2E\\u2E30-\\u2E39\\u2E3C-\\u2E3F\\u2E41\\u3001-\\u3003\\u303D\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFE10-\\uFE16\\uFE19\\uFE30\\uFE45\\uFE46\\uFE49-\\uFE4C\\uFE50-\\uFE52\\uFE54-\\uFE57\\uFE5F-\\uFE61\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF07\\uFF0A\\uFF0C\\uFF0E\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3C\\uFF61\\uFF64\\uFF65',\n            astral: '\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD809[\\uDC70-\\uDC74]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD836[\\uDE87-\\uDE8B]|\\uD801\\uDD6F|\\uD82F\\uDC9F|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]'\n        },\n        {\n            name: 'Ps',\n            alias: 'Open_Punctuation',\n            bmp: '\\\\x28\\\\x5B\\\\x7B\\u0F3A\\u0F3C\\u169B\\u201A\\u201E\\u2045\\u207D\\u208D\\u2308\\u230A\\u2329\\u2768\\u276A\\u276C\\u276E\\u2770\\u2772\\u2774\\u27C5\\u27E6\\u27E8\\u27EA\\u27EC\\u27EE\\u2983\\u2985\\u2987\\u2989\\u298B\\u298D\\u298F\\u2991\\u2993\\u2995\\u2997\\u29D8\\u29DA\\u29FC\\u2E22\\u2E24\\u2E26\\u2E28\\u2E42\\u3008\\u300A\\u300C\\u300E\\u3010\\u3014\\u3016\\u3018\\u301A\\u301D\\uFD3F\\uFE17\\uFE35\\uFE37\\uFE39\\uFE3B\\uFE3D\\uFE3F\\uFE41\\uFE43\\uFE47\\uFE59\\uFE5B\\uFE5D\\uFF08\\uFF3B\\uFF5B\\uFF5F\\uFF62'\n        },\n        {\n            name: 'S',\n            alias: 'Symbol',\n            bmp: '\\\\x24\\\\x2B\\x3C-\\x3E\\\\x5E\\x60\\\\x7C\\x7E\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20BE\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u23FA\\u2400-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B98-\\u2BB9\\u2BBD-\\u2BC8\\u2BCA-\\u2BD1\\u2BEC-\\u2BEF\\u2CE5-\\u2CEA\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u32FE\\u3300-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uFB29\\uFBB2-\\uFBC1\\uFDFC\\uFDFD\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD',\n            astral: '\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDD10-\\uDD18\\uDD80-\\uDD84\\uDDC0]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD10-\\uDD2E\\uDD30-\\uDD6B\\uDD70-\\uDD9A\\uDDE6-\\uDE02\\uDE10-\\uDE3A\\uDE40-\\uDE48\\uDE50\\uDE51\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDD79\\uDD7B-\\uDDA3\\uDDA5-\\uDED0\\uDEE0-\\uDEEC\\uDEF0-\\uDEF3\\uDF00-\\uDF73\\uDF80-\\uDFD4]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C\\uDD90-\\uDD9B\\uDDA0\\uDDD0-\\uDDFC]|\\uD82F\\uDC9C|\\uD805\\uDF3F|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD83B[\\uDEF0\\uDEF1]'\n        },\n        {\n            name: 'Sc',\n            alias: 'Currency_Symbol',\n            bmp: '\\\\x24\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BE\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6'\n        },\n        {\n            name: 'Sk',\n            alias: 'Modifier_Symbol',\n            bmp: '\\\\x5E\\x60\\xA8\\xAF\\xB4\\xB8\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u309B\\u309C\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uAB5B\\uFBB2-\\uFBC1\\uFF3E\\uFF40\\uFFE3',\n            astral: '\\uD83C[\\uDFFB-\\uDFFF]'\n        },\n        {\n            name: 'Sm',\n            alias: 'Math_Symbol',\n            bmp: '\\\\x2B\\x3C-\\x3E\\\\x7C\\x7E\\xAC\\xB1\\xD7\\xF7\\u03F6\\u0606-\\u0608\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u2118\\u2140-\\u2144\\u214B\\u2190-\\u2194\\u219A\\u219B\\u21A0\\u21A3\\u21A6\\u21AE\\u21CE\\u21CF\\u21D2\\u21D4\\u21F4-\\u22FF\\u2320\\u2321\\u237C\\u239B-\\u23B3\\u23DC-\\u23E1\\u25B7\\u25C1\\u25F8-\\u25FF\\u266F\\u27C0-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u27FF\\u2900-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2AFF\\u2B30-\\u2B44\\u2B47-\\u2B4C\\uFB29\\uFE62\\uFE64-\\uFE66\\uFF0B\\uFF1C-\\uFF1E\\uFF5C\\uFF5E\\uFFE2\\uFFE9-\\uFFEC',\n            astral: '\\uD83B[\\uDEF0\\uDEF1]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]'\n        },\n        {\n            name: 'So',\n            alias: 'Other_Symbol',\n            bmp: '\\xA6\\xA9\\xAE\\xB0\\u0482\\u058D\\u058E\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u09FA\\u0B70\\u0BF3-\\u0BF8\\u0BFA\\u0C7F\\u0D79\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116\\u2117\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u214A\\u214C\\u214D\\u214F\\u218A\\u218B\\u2195-\\u2199\\u219C-\\u219F\\u21A1\\u21A2\\u21A4\\u21A5\\u21A7-\\u21AD\\u21AF-\\u21CD\\u21D0\\u21D1\\u21D3\\u21D5-\\u21F3\\u2300-\\u2307\\u230C-\\u231F\\u2322-\\u2328\\u232B-\\u237B\\u237D-\\u239A\\u23B4-\\u23DB\\u23E2-\\u23FA\\u2400-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u25B6\\u25B8-\\u25C0\\u25C2-\\u25F7\\u2600-\\u266E\\u2670-\\u2767\\u2794-\\u27BF\\u2800-\\u28FF\\u2B00-\\u2B2F\\u2B45\\u2B46\\u2B4D-\\u2B73\\u2B76-\\u2B95\\u2B98-\\u2BB9\\u2BBD-\\u2BC8\\u2BCA-\\u2BD1\\u2BEC-\\u2BEF\\u2CE5-\\u2CEA\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u32FE\\u3300-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA828-\\uA82B\\uA836\\uA837\\uA839\\uAA77-\\uAA79\\uFDFD\\uFFE4\\uFFE8\\uFFED\\uFFEE\\uFFFC\\uFFFD',\n            astral: '\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDD10-\\uDD18\\uDD80-\\uDD84\\uDDC0]|\\uD83D[\\uDC00-\\uDD79\\uDD7B-\\uDDA3\\uDDA5-\\uDED0\\uDEE0-\\uDEEC\\uDEF0-\\uDEF3\\uDF00-\\uDF73\\uDF80-\\uDFD4]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD10-\\uDD2E\\uDD30-\\uDD6B\\uDD70-\\uDD9A\\uDDE6-\\uDE02\\uDE10-\\uDE3A\\uDE40-\\uDE48\\uDE50\\uDE51\\uDF00-\\uDFFA]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C\\uDD90-\\uDD9B\\uDDA0\\uDDD0-\\uDDFC]|\\uD82F\\uDC9C|\\uD805\\uDF3F|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]'\n        },\n        {\n            name: 'Z',\n            alias: 'Separator',\n            bmp: '\\x20\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000'\n        },\n        {\n            name: 'Zl',\n            alias: 'Line_Separator',\n            bmp: '\\u2028'\n        },\n        {\n            name: 'Zp',\n            alias: 'Paragraph_Separator',\n            bmp: '\\u2029'\n        },\n        {\n            name: 'Zs',\n            alias: 'Space_Separator',\n            bmp: '\\x20\\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000'\n        }\n    ]);\n\n}(XRegExp));\n\n/*!\n * XRegExp Unicode Properties 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2012-2015 MIT License\n * Unicode data provided by Mathias Bynens <http://mathiasbynens.be/>\n */\n\n/**\n * Adds properties to meet the UTS #18 Level 1 RL1.2 requirements for Unicode regex support. See\n * <http://unicode.org/reports/tr18/#RL1.2>. Following are definitions of these properties from UAX\n * #44 <http://unicode.org/reports/tr44/>:\n *\n * - Alphabetic\n *   Characters with the Alphabetic property. Generated from: Lowercase + Uppercase + Lt + Lm + Lo +\n *   Nl + Other_Alphabetic.\n *\n * - Default_Ignorable_Code_Point\n *   For programmatic determination of default ignorable code points. New characters that should be\n *   ignored in rendering (unless explicitly supported) will be assigned in these ranges, permitting\n *   programs to correctly handle the default rendering of such characters when not otherwise\n *   supported.\n *\n * - Lowercase\n *   Characters with the Lowercase property. Generated from: Ll + Other_Lowercase.\n *\n * - Noncharacter_Code_Point\n *   Code points permanently reserved for internal use.\n *\n * - Uppercase\n *   Characters with the Uppercase property. Generated from: Lu + Other_Uppercase.\n *\n * - White_Space\n *   Spaces, separator characters and other control characters which should be treated by\n *   programming languages as \"white space\" for the purpose of parsing elements.\n *\n * The properties ASCII, Any, and Assigned are also included but are not defined in UAX #44. UTS #18\n * RL1.2 additionally requires support for Unicode scripts and general categories. These are\n * included in XRegExp's Unicode Categories and Unicode Scripts addons.\n *\n * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 8.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n(function(XRegExp) {\n    'use strict';\n\n    if (!XRegExp.addUnicodeData) {\n        throw new ReferenceError('Unicode Base must be loaded before Unicode Properties');\n    }\n\n    var unicodeData = [\n        {\n            name: 'ASCII',\n            bmp: '\\0-\\x7F'\n        },\n        {\n            name: 'Alphabetic',\n            bmp: 'A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0345\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05B0-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0657\\u0659-\\u065F\\u066E-\\u06D3\\u06D5-\\u06DC\\u06E1-\\u06E8\\u06ED-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710-\\u073F\\u074D-\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0817\\u081A-\\u082C\\u0840-\\u0858\\u08A0-\\u08B4\\u08E3-\\u08E9\\u08F0-\\u093B\\u093D-\\u094C\\u094E-\\u0950\\u0955-\\u0963\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD-\\u09C4\\u09C7\\u09C8\\u09CB\\u09CC\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09F0\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B\\u0A4C\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A70-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB\\u0ACC\\u0AD0\\u0AE0-\\u0AE3\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D-\\u0B44\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD0\\u0BD7\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4C\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCC\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E46\\u0E4D\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ECD\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F81\\u0F88-\\u0F97\\u0F99-\\u0FBC\\u1000-\\u1036\\u1038\\u103B-\\u103F\\u1050-\\u1062\\u1065-\\u1068\\u106E-\\u1086\\u108E\\u109C\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1713\\u1720-\\u1733\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17B3\\u17B6-\\u17C8\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u1938\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A61-\\u1A74\\u1AA7\\u1B00-\\u1B33\\u1B35-\\u1B43\\u1B45-\\u1B4B\\u1B80-\\u1BA9\\u1BAC-\\u1BAF\\u1BBA-\\u1BE5\\u1BE7-\\u1BF1\\u1C00-\\u1C35\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1DE7-\\u1DF4\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u24B6-\\u24E9\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA674-\\uA67B\\uA67F-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA827\\uA840-\\uA873\\uA880-\\uA8C3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA92A\\uA930-\\uA952\\uA960-\\uA97C\\uA980-\\uA9B2\\uA9B4-\\uA9BF\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAABE\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF5\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n            astral: '\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD804[\\uDC00-\\uDC45\\uDC82-\\uDCB8\\uDCD0-\\uDCE8\\uDD00-\\uDD32\\uDD50-\\uDD72\\uDD76\\uDD80-\\uDDBF\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE34\\uDE37\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEE8\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D-\\uDF44\\uDF47\\uDF48\\uDF4B\\uDF4C\\uDF50\\uDF57\\uDF5D-\\uDF63]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD83A[\\uDC00-\\uDCC4]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89]|\\uD80D[\\uDC00-\\uDC2E]|\\uD87E[\\uDC00-\\uDE1D]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9E]|\\uD808[\\uDC00-\\uDF99]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD805[\\uDC80-\\uDCC1\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDB5\\uDDB8-\\uDDBE\\uDDD8-\\uDDDD\\uDE00-\\uDE3E\\uDE40\\uDE44\\uDE80-\\uDEB5\\uDF00-\\uDF19\\uDF1D-\\uDF2A]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD811[\\uDC00-\\uDE46]|\\uD82C[\\uDC00\\uDC01]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF93-\\uDF9F]|\\uD873[\\uDC00-\\uDEA1]'\n        },\n        {\n            name: 'Any',\n            isBmpLast: true,\n            bmp: '\\0-\\uFFFF',\n            astral: '[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]'\n        },\n        {\n            name: 'Default_Ignorable_Code_Point',\n            bmp: '\\xAD\\u034F\\u061C\\u115F\\u1160\\u17B4\\u17B5\\u180B-\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8',\n            astral: '[\\uDB40-\\uDB43][\\uDC00-\\uDFFF]|\\uD834[\\uDD73-\\uDD7A]|\\uD82F[\\uDCA0-\\uDCA3]'\n        },\n        {\n            name: 'Lowercase',\n            bmp: 'a-z\\xAA\\xB5\\xBA\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02B8\\u02C0\\u02C1\\u02E0-\\u02E4\\u0345\\u0371\\u0373\\u0377\\u037A-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0561-\\u0587\\u13F8-\\u13FD\\u1D00-\\u1DBF\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u2071\\u207F\\u2090-\\u209C\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2170-\\u217F\\u2184\\u24D0-\\u24E9\\u2C30-\\u2C5E\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7D\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B-\\uA69D\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7B5\\uA7B7\\uA7F8-\\uA7FA\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A',\n            astral: '\\uD803[\\uDCC0-\\uDCF2]|\\uD835[\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]|\\uD801[\\uDC28-\\uDC4F]|\\uD806[\\uDCC0-\\uDCDF]'\n        },\n        {\n            name: 'Noncharacter_Code_Point',\n            bmp: '\\uFDD0-\\uFDEF\\uFFFE\\uFFFF',\n            astral: '[\\uDB3F\\uDB7F\\uDBBF\\uDBFF\\uD83F\\uD87F\\uD8BF\\uDAFF\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uD8FF\\uDABF\\uDA7F\\uD93F][\\uDFFE\\uDFFF]'\n        },\n        {\n            name: 'Uppercase',\n            bmp: 'A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2160-\\u216F\\u2183\\u24B6-\\u24CF\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AD\\uA7B0-\\uA7B4\\uA7B6\\uFF21-\\uFF3A',\n            astral: '\\uD806[\\uDCA0-\\uDCBF]|\\uD803[\\uDC80-\\uDCB2]|\\uD835[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA]|\\uD801[\\uDC00-\\uDC27]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89]'\n        },\n        {\n            name: 'White_Space',\n            bmp: '\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000'\n        }\n    ];\n\n    // Add non-generated data\n    unicodeData.push({\n        name: 'Assigned',\n        // Since this is defined as the inverse of Unicode category Cn (Unassigned), the Unicode\n        // Categories addon is required to use this property\n        inverseOf: 'Cn'\n    });\n\n    XRegExp.addUnicodeData(unicodeData);\n\n}(XRegExp));\n\n/*!\n * XRegExp Unicode Scripts 3.0.0\n * <http://xregexp.com/>\n * Steven Levithan (c) 2010-2015 MIT License\n * Unicode data provided by Mathias Bynens <http://mathiasbynens.be/>\n */\n\n/**\n * Adds support for all Unicode scripts. E.g., `\\p{Latin}`. Token names are case insensitive, and\n * any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 8.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n(function(XRegExp) {\n    'use strict';\n\n    if (!XRegExp.addUnicodeData) {\n        throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts');\n    }\n\n    XRegExp.addUnicodeData([\n        {\n            name: 'Ahom',\n            astral: '\\uD805[\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF3F]'\n        },\n        {\n            name: 'Anatolian_Hieroglyphs',\n            astral: '\\uD811[\\uDC00-\\uDE46]'\n        },\n        {\n            name: 'Arabic',\n            bmp: '\\u0600-\\u0604\\u0606-\\u060B\\u060D-\\u061A\\u061E\\u0620-\\u063F\\u0641-\\u064A\\u0656-\\u066F\\u0671-\\u06DC\\u06DE-\\u06FF\\u0750-\\u077F\\u08A0-\\u08B4\\u08E3-\\u08FF\\uFB50-\\uFBC1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFD\\uFE70-\\uFE74\\uFE76-\\uFEFC',\n            astral: '\\uD803[\\uDE60-\\uDE7E]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB\\uDEF0\\uDEF1]'\n        },\n        {\n            name: 'Armenian',\n            bmp: '\\u0531-\\u0556\\u0559-\\u055F\\u0561-\\u0587\\u058A\\u058D-\\u058F\\uFB13-\\uFB17'\n        },\n        {\n            name: 'Avestan',\n            astral: '\\uD802[\\uDF00-\\uDF35\\uDF39-\\uDF3F]'\n        },\n        {\n            name: 'Balinese',\n            bmp: '\\u1B00-\\u1B4B\\u1B50-\\u1B7C'\n        },\n        {\n            name: 'Bamum',\n            bmp: '\\uA6A0-\\uA6F7',\n            astral: '\\uD81A[\\uDC00-\\uDE38]'\n        },\n        {\n            name: 'Bassa_Vah',\n            astral: '\\uD81A[\\uDED0-\\uDEED\\uDEF0-\\uDEF5]'\n        },\n        {\n            name: 'Batak',\n            bmp: '\\u1BC0-\\u1BF3\\u1BFC-\\u1BFF'\n        },\n        {\n            name: 'Bengali',\n            bmp: '\\u0980-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09FB'\n        },\n        {\n            name: 'Bopomofo',\n            bmp: '\\u02EA\\u02EB\\u3105-\\u312D\\u31A0-\\u31BA'\n        },\n        {\n            name: 'Brahmi',\n            astral: '\\uD804[\\uDC00-\\uDC4D\\uDC52-\\uDC6F\\uDC7F]'\n        },\n        {\n            name: 'Braille',\n            bmp: '\\u2800-\\u28FF'\n        },\n        {\n            name: 'Buginese',\n            bmp: '\\u1A00-\\u1A1B\\u1A1E\\u1A1F'\n        },\n        {\n            name: 'Buhid',\n            bmp: '\\u1740-\\u1753'\n        },\n        {\n            name: 'Canadian_Aboriginal',\n            bmp: '\\u1400-\\u167F\\u18B0-\\u18F5'\n        },\n        {\n            name: 'Carian',\n            astral: '\\uD800[\\uDEA0-\\uDED0]'\n        },\n        {\n            name: 'Caucasian_Albanian',\n            astral: '\\uD801[\\uDD30-\\uDD63\\uDD6F]'\n        },\n        {\n            name: 'Chakma',\n            astral: '\\uD804[\\uDD00-\\uDD34\\uDD36-\\uDD43]'\n        },\n        {\n            name: 'Cham',\n            bmp: '\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA5C-\\uAA5F'\n        },\n        {\n            name: 'Cherokee',\n            bmp: '\\u13A0-\\u13F5\\u13F8-\\u13FD\\uAB70-\\uABBF'\n        },\n        {\n            name: 'Common',\n            bmp: '\\0-\\x40\\\\x5B-\\x60\\\\x7B-\\xA9\\xAB-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02B9-\\u02DF\\u02E5-\\u02E9\\u02EC-\\u02FF\\u0374\\u037E\\u0385\\u0387\\u0589\\u0605\\u060C\\u061B\\u061C\\u061F\\u0640\\u06DD\\u0964\\u0965\\u0E3F\\u0FD5-\\u0FD8\\u10FB\\u16EB-\\u16ED\\u1735\\u1736\\u1802\\u1803\\u1805\\u1CD3\\u1CE1\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u2000-\\u200B\\u200E-\\u2064\\u2066-\\u2070\\u2074-\\u207E\\u2080-\\u208E\\u20A0-\\u20BE\\u2100-\\u2125\\u2127-\\u2129\\u212C-\\u2131\\u2133-\\u214D\\u214F-\\u215F\\u2189-\\u218B\\u2190-\\u23FA\\u2400-\\u2426\\u2440-\\u244A\\u2460-\\u27FF\\u2900-\\u2B73\\u2B76-\\u2B95\\u2B98-\\u2BB9\\u2BBD-\\u2BC8\\u2BCA-\\u2BD1\\u2BEC-\\u2BEF\\u2E00-\\u2E42\\u2FF0-\\u2FFB\\u3000-\\u3004\\u3006\\u3008-\\u3020\\u3030-\\u3037\\u303C-\\u303F\\u309B\\u309C\\u30A0\\u30FB\\u30FC\\u3190-\\u319F\\u31C0-\\u31E3\\u3220-\\u325F\\u327F-\\u32CF\\u3358-\\u33FF\\u4DC0-\\u4DFF\\uA700-\\uA721\\uA788-\\uA78A\\uA830-\\uA839\\uA92E\\uA9CF\\uAB5B\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFEFF\\uFF01-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFF70\\uFF9E\\uFF9F\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFF9-\\uFFFD',\n            astral: '\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDD10-\\uDD18\\uDD80-\\uDD84\\uDDC0]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDFCB\\uDFCE-\\uDFFF]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]|\\uD83D[\\uDC00-\\uDD79\\uDD7B-\\uDDA3\\uDDA5-\\uDED0\\uDEE0-\\uDEEC\\uDEF0-\\uDEF3\\uDF00-\\uDF73\\uDF80-\\uDFD4]|\\uD800[\\uDD00-\\uDD02\\uDD07-\\uDD33\\uDD37-\\uDD3F\\uDD90-\\uDD9B\\uDDD0-\\uDDFC\\uDEE1-\\uDEFB]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD66\\uDD6A-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDF00-\\uDF56\\uDF60-\\uDF71]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD00-\\uDD0C\\uDD10-\\uDD2E\\uDD30-\\uDD6B\\uDD70-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE10-\\uDE3A\\uDE40-\\uDE48\\uDE50\\uDE51\\uDF00-\\uDFFF]'\n        },\n        {\n            name: 'Coptic',\n            bmp: '\\u03E2-\\u03EF\\u2C80-\\u2CF3\\u2CF9-\\u2CFF'\n        },\n        {\n            name: 'Cuneiform',\n            astral: '\\uD809[\\uDC00-\\uDC6E\\uDC70-\\uDC74\\uDC80-\\uDD43]|\\uD808[\\uDC00-\\uDF99]'\n        },\n        {\n            name: 'Cypriot',\n            astral: '\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F]'\n        },\n        {\n            name: 'Cyrillic',\n            bmp: '\\u0400-\\u0484\\u0487-\\u052F\\u1D2B\\u1D78\\u2DE0-\\u2DFF\\uA640-\\uA69F\\uFE2E\\uFE2F'\n        },\n        {\n            name: 'Deseret',\n            astral: '\\uD801[\\uDC00-\\uDC4F]'\n        },\n        {\n            name: 'Devanagari',\n            bmp: '\\u0900-\\u0950\\u0953-\\u0963\\u0966-\\u097F\\uA8E0-\\uA8FD'\n        },\n        {\n            name: 'Duployan',\n            astral: '\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9C-\\uDC9F]'\n        },\n        {\n            name: 'Egyptian_Hieroglyphs',\n            astral: '\\uD80C[\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]'\n        },\n        {\n            name: 'Elbasan',\n            astral: '\\uD801[\\uDD00-\\uDD27]'\n        },\n        {\n            name: 'Ethiopic',\n            bmp: '\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u137C\\u1380-\\u1399\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E'\n        },\n        {\n            name: 'Georgian',\n            bmp: '\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u10FF\\u2D00-\\u2D25\\u2D27\\u2D2D'\n        },\n        {\n            name: 'Glagolitic',\n            bmp: '\\u2C00-\\u2C2E\\u2C30-\\u2C5E'\n        },\n        {\n            name: 'Gothic',\n            astral: '\\uD800[\\uDF30-\\uDF4A]'\n        },\n        {\n            name: 'Grantha',\n            astral: '\\uD804[\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]'\n        },\n        {\n            name: 'Greek',\n            bmp: '\\u0370-\\u0373\\u0375-\\u0377\\u037A-\\u037D\\u037F\\u0384\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03E1\\u03F0-\\u03FF\\u1D26-\\u1D2A\\u1D5D-\\u1D61\\u1D66-\\u1D6A\\u1DBF\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-\\u1FDB\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-\\u1FFE\\u2126\\uAB65',\n            astral: '\\uD800[\\uDD40-\\uDD8C\\uDDA0]|\\uD834[\\uDE00-\\uDE45]'\n        },\n        {\n            name: 'Gujarati',\n            bmp: '\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AF1\\u0AF9'\n        },\n        {\n            name: 'Gurmukhi',\n            bmp: '\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75'\n        },\n        {\n            name: 'Han',\n            bmp: '\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u3005\\u3007\\u3021-\\u3029\\u3038-\\u303B\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uF900-\\uFA6D\\uFA70-\\uFAD9',\n            astral: '\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|[\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD87E[\\uDC00-\\uDE1D]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]'\n        },\n        {\n            name: 'Hangul',\n            bmp: '\\u1100-\\u11FF\\u302E\\u302F\\u3131-\\u318E\\u3200-\\u321E\\u3260-\\u327E\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC'\n        },\n        {\n            name: 'Hanunoo',\n            bmp: '\\u1720-\\u1734'\n        },\n        {\n            name: 'Hatran',\n            astral: '\\uD802[\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDCFF]'\n        },\n        {\n            name: 'Hebrew',\n            bmp: '\\u0591-\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F4\\uFB1D-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFB4F'\n        },\n        {\n            name: 'Hiragana',\n            bmp: '\\u3041-\\u3096\\u309D-\\u309F',\n            astral: '\\uD82C\\uDC01|\\uD83C\\uDE00'\n        },\n        {\n            name: 'Imperial_Aramaic',\n            astral: '\\uD802[\\uDC40-\\uDC55\\uDC57-\\uDC5F]'\n        },\n        {\n            name: 'Inherited',\n            bmp: '\\u0300-\\u036F\\u0485\\u0486\\u064B-\\u0655\\u0670\\u0951\\u0952\\u1AB0-\\u1ABE\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u200C\\u200D\\u20D0-\\u20F0\\u302A-\\u302D\\u3099\\u309A\\uFE00-\\uFE0F\\uFE20-\\uFE2D',\n            astral: '\\uD834[\\uDD67-\\uDD69\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD]|\\uD800[\\uDDFD\\uDEE0]|\\uDB40[\\uDD00-\\uDDEF]'\n        },\n        {\n            name: 'Inscriptional_Pahlavi',\n            astral: '\\uD802[\\uDF60-\\uDF72\\uDF78-\\uDF7F]'\n        },\n        {\n            name: 'Inscriptional_Parthian',\n            astral: '\\uD802[\\uDF40-\\uDF55\\uDF58-\\uDF5F]'\n        },\n        {\n            name: 'Javanese',\n            bmp: '\\uA980-\\uA9CD\\uA9D0-\\uA9D9\\uA9DE\\uA9DF'\n        },\n        {\n            name: 'Kaithi',\n            astral: '\\uD804[\\uDC80-\\uDCC1]'\n        },\n        {\n            name: 'Kannada',\n            bmp: '\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2'\n        },\n        {\n            name: 'Katakana',\n            bmp: '\\u30A1-\\u30FA\\u30FD-\\u30FF\\u31F0-\\u31FF\\u32D0-\\u32FE\\u3300-\\u3357\\uFF66-\\uFF6F\\uFF71-\\uFF9D',\n            astral: '\\uD82C\\uDC00'\n        },\n        {\n            name: 'Kayah_Li',\n            bmp: '\\uA900-\\uA92D\\uA92F'\n        },\n        {\n            name: 'Kharoshthi',\n            astral: '\\uD802[\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F-\\uDE47\\uDE50-\\uDE58]'\n        },\n        {\n            name: 'Khmer',\n            bmp: '\\u1780-\\u17DD\\u17E0-\\u17E9\\u17F0-\\u17F9\\u19E0-\\u19FF'\n        },\n        {\n            name: 'Khojki',\n            astral: '\\uD804[\\uDE00-\\uDE11\\uDE13-\\uDE3D]'\n        },\n        {\n            name: 'Khudawadi',\n            astral: '\\uD804[\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9]'\n        },\n        {\n            name: 'Lao',\n            bmp: '\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF'\n        },\n        {\n            name: 'Latin',\n            bmp: 'A-Za-z\\xAA\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02B8\\u02E0-\\u02E4\\u1D00-\\u1D25\\u1D2C-\\u1D5C\\u1D62-\\u1D65\\u1D6B-\\u1D77\\u1D79-\\u1DBE\\u1E00-\\u1EFF\\u2071\\u207F\\u2090-\\u209C\\u212A\\u212B\\u2132\\u214E\\u2160-\\u2188\\u2C60-\\u2C7F\\uA722-\\uA787\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA7FF\\uAB30-\\uAB5A\\uAB5C-\\uAB64\\uFB00-\\uFB06\\uFF21-\\uFF3A\\uFF41-\\uFF5A'\n        },\n        {\n            name: 'Lepcha',\n            bmp: '\\u1C00-\\u1C37\\u1C3B-\\u1C49\\u1C4D-\\u1C4F'\n        },\n        {\n            name: 'Limbu',\n            bmp: '\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1940\\u1944-\\u194F'\n        },\n        {\n            name: 'Linear_A',\n            astral: '\\uD801[\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]'\n        },\n        {\n            name: 'Linear_B',\n            astral: '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA]'\n        },\n        {\n            name: 'Lisu',\n            bmp: '\\uA4D0-\\uA4FF'\n        },\n        {\n            name: 'Lycian',\n            astral: '\\uD800[\\uDE80-\\uDE9C]'\n        },\n        {\n            name: 'Lydian',\n            astral: '\\uD802[\\uDD20-\\uDD39\\uDD3F]'\n        },\n        {\n            name: 'Mahajani',\n            astral: '\\uD804[\\uDD50-\\uDD76]'\n        },\n        {\n            name: 'Malayalam',\n            bmp: '\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D75\\u0D79-\\u0D7F'\n        },\n        {\n            name: 'Mandaic',\n            bmp: '\\u0840-\\u085B\\u085E'\n        },\n        {\n            name: 'Manichaean',\n            astral: '\\uD802[\\uDEC0-\\uDEE6\\uDEEB-\\uDEF6]'\n        },\n        {\n            name: 'Meetei_Mayek',\n            bmp: '\\uAAE0-\\uAAF6\\uABC0-\\uABED\\uABF0-\\uABF9'\n        },\n        {\n            name: 'Mende_Kikakui',\n            astral: '\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCD6]'\n        },\n        {\n            name: 'Meroitic_Cursive',\n            astral: '\\uD802[\\uDDA0-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDDFF]'\n        },\n        {\n            name: 'Meroitic_Hieroglyphs',\n            astral: '\\uD802[\\uDD80-\\uDD9F]'\n        },\n        {\n            name: 'Miao',\n            astral: '\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]'\n        },\n        {\n            name: 'Modi',\n            astral: '\\uD805[\\uDE00-\\uDE44\\uDE50-\\uDE59]'\n        },\n        {\n            name: 'Mongolian',\n            bmp: '\\u1800\\u1801\\u1804\\u1806-\\u180E\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA'\n        },\n        {\n            name: 'Mro',\n            astral: '\\uD81A[\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE6E\\uDE6F]'\n        },\n        {\n            name: 'Multani',\n            astral: '\\uD804[\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA9]'\n        },\n        {\n            name: 'Myanmar',\n            bmp: '\\u1000-\\u109F\\uA9E0-\\uA9FE\\uAA60-\\uAA7F'\n        },\n        {\n            name: 'Nabataean',\n            astral: '\\uD802[\\uDC80-\\uDC9E\\uDCA7-\\uDCAF]'\n        },\n        {\n            name: 'New_Tai_Lue',\n            bmp: '\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u19DE\\u19DF'\n        },\n        {\n            name: 'Nko',\n            bmp: '\\u07C0-\\u07FA'\n        },\n        {\n            name: 'Ogham',\n            bmp: '\\u1680-\\u169C'\n        },\n        {\n            name: 'Ol_Chiki',\n            bmp: '\\u1C50-\\u1C7F'\n        },\n        {\n            name: 'Old_Hungarian',\n            astral: '\\uD803[\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDCFF]'\n        },\n        {\n            name: 'Old_Italic',\n            astral: '\\uD800[\\uDF00-\\uDF23]'\n        },\n        {\n            name: 'Old_North_Arabian',\n            astral: '\\uD802[\\uDE80-\\uDE9F]'\n        },\n        {\n            name: 'Old_Permic',\n            astral: '\\uD800[\\uDF50-\\uDF7A]'\n        },\n        {\n            name: 'Old_Persian',\n            astral: '\\uD800[\\uDFA0-\\uDFC3\\uDFC8-\\uDFD5]'\n        },\n        {\n            name: 'Old_South_Arabian',\n            astral: '\\uD802[\\uDE60-\\uDE7F]'\n        },\n        {\n            name: 'Old_Turkic',\n            astral: '\\uD803[\\uDC00-\\uDC48]'\n        },\n        {\n            name: 'Oriya',\n            bmp: '\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B77'\n        },\n        {\n            name: 'Osmanya',\n            astral: '\\uD801[\\uDC80-\\uDC9D\\uDCA0-\\uDCA9]'\n        },\n        {\n            name: 'Pahawh_Hmong',\n            astral: '\\uD81A[\\uDF00-\\uDF45\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]'\n        },\n        {\n            name: 'Palmyrene',\n            astral: '\\uD802[\\uDC60-\\uDC7F]'\n        },\n        {\n            name: 'Pau_Cin_Hau',\n            astral: '\\uD806[\\uDEC0-\\uDEF8]'\n        },\n        {\n            name: 'Phags_Pa',\n            bmp: '\\uA840-\\uA877'\n        },\n        {\n            name: 'Phoenician',\n            astral: '\\uD802[\\uDD00-\\uDD1B\\uDD1F]'\n        },\n        {\n            name: 'Psalter_Pahlavi',\n            astral: '\\uD802[\\uDF80-\\uDF91\\uDF99-\\uDF9C\\uDFA9-\\uDFAF]'\n        },\n        {\n            name: 'Rejang',\n            bmp: '\\uA930-\\uA953\\uA95F'\n        },\n        {\n            name: 'Runic',\n            bmp: '\\u16A0-\\u16EA\\u16EE-\\u16F8'\n        },\n        {\n            name: 'Samaritan',\n            bmp: '\\u0800-\\u082D\\u0830-\\u083E'\n        },\n        {\n            name: 'Saurashtra',\n            bmp: '\\uA880-\\uA8C4\\uA8CE-\\uA8D9'\n        },\n        {\n            name: 'Sharada',\n            astral: '\\uD804[\\uDD80-\\uDDCD\\uDDD0-\\uDDDF]'\n        },\n        {\n            name: 'Shavian',\n            astral: '\\uD801[\\uDC50-\\uDC7F]'\n        },\n        {\n            name: 'Siddham',\n            astral: '\\uD805[\\uDD80-\\uDDB5\\uDDB8-\\uDDDD]'\n        },\n        {\n            name: 'SignWriting',\n            astral: '\\uD836[\\uDC00-\\uDE8B\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]'\n        },\n        {\n            name: 'Sinhala',\n            bmp: '\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2-\\u0DF4',\n            astral: '\\uD804[\\uDDE1-\\uDDF4]'\n        },\n        {\n            name: 'Sora_Sompeng',\n            astral: '\\uD804[\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9]'\n        },\n        {\n            name: 'Sundanese',\n            bmp: '\\u1B80-\\u1BBF\\u1CC0-\\u1CC7'\n        },\n        {\n            name: 'Syloti_Nagri',\n            bmp: '\\uA800-\\uA82B'\n        },\n        {\n            name: 'Syriac',\n            bmp: '\\u0700-\\u070D\\u070F-\\u074A\\u074D-\\u074F'\n        },\n        {\n            name: 'Tagalog',\n            bmp: '\\u1700-\\u170C\\u170E-\\u1714'\n        },\n        {\n            name: 'Tagbanwa',\n            bmp: '\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773'\n        },\n        {\n            name: 'Tai_Le',\n            bmp: '\\u1950-\\u196D\\u1970-\\u1974'\n        },\n        {\n            name: 'Tai_Tham',\n            bmp: '\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA0-\\u1AAD'\n        },\n        {\n            name: 'Tai_Viet',\n            bmp: '\\uAA80-\\uAAC2\\uAADB-\\uAADF'\n        },\n        {\n            name: 'Takri',\n            astral: '\\uD805[\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]'\n        },\n        {\n            name: 'Tamil',\n            bmp: '\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BFA'\n        },\n        {\n            name: 'Telugu',\n            bmp: '\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C78-\\u0C7F'\n        },\n        {\n            name: 'Thaana',\n            bmp: '\\u0780-\\u07B1'\n        },\n        {\n            name: 'Thai',\n            bmp: '\\u0E01-\\u0E3A\\u0E40-\\u0E5B'\n        },\n        {\n            name: 'Tibetan',\n            bmp: '\\u0F00-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F97\\u0F99-\\u0FBC\\u0FBE-\\u0FCC\\u0FCE-\\u0FD4\\u0FD9\\u0FDA'\n        },\n        {\n            name: 'Tifinagh',\n            bmp: '\\u2D30-\\u2D67\\u2D6F\\u2D70\\u2D7F'\n        },\n        {\n            name: 'Tirhuta',\n            astral: '\\uD805[\\uDC80-\\uDCC7\\uDCD0-\\uDCD9]'\n        },\n        {\n            name: 'Ugaritic',\n            astral: '\\uD800[\\uDF80-\\uDF9D\\uDF9F]'\n        },\n        {\n            name: 'Vai',\n            bmp: '\\uA500-\\uA62B'\n        },\n        {\n            name: 'Warang_Citi',\n            astral: '\\uD806[\\uDCA0-\\uDCF2\\uDCFF]'\n        },\n        {\n            name: 'Yi',\n            bmp: '\\uA000-\\uA48C\\uA490-\\uA4C6'\n        }\n    ]);\n\n}(XRegExp));\n\nreturn XRegExp;\n\n}));\n\n"
  },
  {
    "path": "public/vendor/leaflet/leaflet-polyline-measure.js",
    "content": "/*********************************************************\n **                                                      **\n **       Leaflet Plugin \"Leaflet.PolylineMeasure\"       **\n **       Version: 2019-11-15                            **\n **                                                      **\n *********************************************************/\n\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(['leaflet'], factory);\n    } else if (typeof module !== 'undefined') {\n        // Node/CommonJS\n        module.exports = factory(require('leaflet'));\n    } else {\n        // Browser globals\n        if (typeof window.L === 'undefined') {\n            throw new Error('Leaflet must be loaded first');\n        }\n        factory(window.L);\n    }\n}(function (L) {\n    var _measureControlId = 'polyline-measure-control';\n    var _unicodeClass = 'polyline-measure-unicode-icon';\n\n    /**\n     * Polyline Measure class\n     * @extends L.Control\n     */\n    L.Control.PolylineMeasure = L.Control.extend({\n        /**\n         * Default options for the tool\n         * @type {Object}\n         */\n        options: {\n            /**\n             * Position to show the control. Possible values are: 'topright', 'topleft', 'bottomright', 'bottomleft'\n             * @type {String}\n             * @default\n             */\n            position: 'topleft',\n            /**\n             * Which units the distances are displayed in. Possible values are: 'metres', 'landmiles', 'nauticalmiles'\n             * @type {String}\n             * @default\n             */\n            unit: 'metres',\n            /**\n             * Clear the measurements on stop\n             * @type {Boolean}\n             * @default\n             */\n            clearMeasurementsOnStop: true,\n            /**\n             * Whether bearings are displayed within the tooltips\n             * @type {Boolean}\n             * @default\n             */\n            showBearings: false,\n            /**\n             * Text for the bearing In\n             * @type {String}\n             * @default\n             */\n            bearingTextIn: 'In',\n            /**\n             * Text for the bearing Out\n             * @type {String}\n             * @default\n             */\n            bearingTextOut: 'Out',\n            /**\n             * Text for last point's tooltip\n             * @type {String}\n             * @default\n             */\n            tooltipTextFinish: 'Click to <b>finish line</b><br>',\n            tooltipTextDelete: 'Press SHIFT-key and click to <b>delete point</b>',\n            tooltipTextMove: 'Click and drag to <b>move point</b><br>',\n            tooltipTextResume: '<br>Press CTRL-key and click to <b>resume line</b>',\n            tooltipTextAdd: 'Press CTRL-key and click to <b>add point</b>',\n\n            /**\n             * Title for the control going to be switched on\n             * @type {String}\n             * @default\n             */\n            measureControlTitleOn: \"Turn on PolylineMeasure\",\n            /**\n             * Title for the control going to be switched off\n             * @type {String}\n             * @default\n             */\n            measureControlTitleOff: \"Turn off PolylineMeasure\",\n            /**\n             * Label of the Measure control (maybe a unicode symbol)\n             * @type {String}\n             * @default\n             */\n            measureControlLabel: '&#8614;',\n            /**\n             * Classes to apply to the Measure control\n             * @type {Array}\n             * @default\n             */\n            measureControlClasses: [],\n            /**\n             * Show a control to clear all the measurements\n             * @type {Boolean}\n             * @default\n             */\n            showClearControl: false,\n            /**\n             * Title text to show on the Clear measurements control button\n             * @type {String}\n             * @default\n             */\n            clearControlTitle: 'Clear Measurements',\n            /**\n             * Label of the Clear control (maybe a unicode symbol)\n             * @type {String}\n             * @default\n             */\n            clearControlLabel: '&times;',\n            /**\n             * Classes to apply to Clear control button\n             * @type {Array}\n             * @default\n             */\n            clearControlClasses: [],\n            /**\n             * Show a control to change the units of measurements\n             * @type {Boolean}\n             * @default\n             */\n            showUnitControl: false,\n            /**\n             * Keep same unit in tooltips in case of distance less then 1 km/mi/nm\n             * @type {Boolean}\n             * @default\n             */\n            distanceShowSameUnit: false,\n            /**\n             * Title texts to show on the Unit Control button\n             * @type {Object}\n             * @default\n             */\n            unitControlTitle: {\n                text: 'Change Units',\n                metres: 'metres',\n                landmiles: 'land miles',\n                nauticalmiles: 'nautical miles',\n                custom: 'custom'\n            },\n            /**\n             * Unit symbols to show in the Unit Control button and measurement labels\n             * @type {Object}\n             * @default\n             */\n            unitControlLabel: {\n                metres: 'm',\n                kilometres: 'km',\n                feet: 'ft',\n                landmiles: 'mi',\n                nauticalmiles: 'nm',\n                custom: 'custom'\n            },\n\n            /**\n             * Distance between two points for the custom distance calculation\n             */\n            customUnitDistance: 500,\n            /**\n             * Styling settings for the temporary dashed rubberline\n             * @type {Object}\n             */\n            tempLine: {\n                /**\n                 * Dashed line color\n                 * @type {String}\n                 * @default\n                 */\n                color: '#00f',\n                /**\n                 * Dashed line weight\n                 * @type {Number}\n                 * @default\n                 */\n                weight: 2\n            },\n            /**\n             * Styling for the fixed polyline\n             * @type {Object}\n             */\n            fixedLine: {\n                /**\n                 * Solid line color\n                 * @type {String}\n                 * @default\n                 */\n                color: '#006',\n                /**\n                 * Solid line weight\n                 * @type {Number}\n                 * @default\n                 */\n                weight: 2\n            },\n            /**\n             * Style settings for circle marker indicating the starting point of the polyline\n             * @type {Object}\n             */\n            startCircle: {\n                /**\n                 * Color of the border of the circle\n                 * @type {String}\n                 * @default\n                 */\n                color: '#000',\n                /**\n                 * Weight of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                weight: 1,\n                /**\n                 * Fill color of the circle\n                 * @type {String}\n                 * @default\n                 */\n                fillColor: '#0f0',\n                /**\n                 * Fill opacity of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                fillOpacity: 1,\n                /**\n                 * Radius of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                radius: 3\n            },\n            /**\n             * Style settings for all circle markers between startCircle and endCircle\n             * @type {Object}\n             */\n            intermedCircle: {\n                /**\n                 * Color of the border of the circle\n                 * @type {String}\n                 * @default\n                 */\n                color: '#000',\n                /**\n                 * Weight of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                weight: 1,\n                /**\n                 * Fill color of the circle\n                 * @type {String}\n                 * @default\n                 */\n                fillColor: '#ff0',\n                /**\n                 * Fill opacity of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                fillOpacity: 1,\n                /**\n                 * Radius of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                radius: 3\n            },\n            /**\n             * Style settings for circle marker indicating the latest point of the polyline during drawing a line\n             * @type {Object}\n             */\n            currentCircle: {\n                /**\n                 * Color of the border of the circle\n                 * @type {String}\n                 * @default\n                 */\n                color: '#000',\n                /**\n                 * Weight of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                weight: 1,\n                /**\n                 * Fill color of the circle\n                 * @type {String}\n                 * @default\n                 */\n                fillColor: '#f0f',\n                /**\n                 * Fill opacity of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                fillOpacity: 1,\n                /**\n                 * Radius of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                radius: 6\n            },\n            /**\n             * Style settings for circle marker indicating the end point of the polyline\n             * @type {Object}\n             */\n            endCircle: {\n                /**\n                 * Color of the border of the circle\n                 * @type {String}\n                 * @default\n                 */\n                color: '#000',\n                /**\n                 * Weight of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                weight: 1,\n                /**\n                 * Fill color of the circle\n                 * @type {String}\n                 * @default\n                 */\n                fillColor: '#f00',\n                /**\n                 * Fill opacity of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                fillOpacity: 1,\n                /**\n                 * Radius of the circle\n                 * @type {Number}\n                 * @default\n                 */\n                radius: 3\n            }\n        },\n\n        _arcpoints: 100,  // 100 points = 99 line segments. lower value to make arc less accurate or increase value to make it more accurate.\n        _circleNr: -1,\n        _lineNr: -1,\n\n        /**\n         * Create a control button\n         * @param {String}      label           Label to add\n         * @param {String}      title           Title to show on hover\n         * @param {Array}       classesToAdd    Collection of classes to add\n         * @param {Element}     container       Parent element\n         * @param {Function}    fn              Callback function to run\n         * @param {Object}      context         Context\n         * @returns {Element}                   Created element\n         * @private\n         */\n        _createControl: function (label, title, classesToAdd, container, fn, context) {\n            var anchor = document.createElement('a');\n            anchor.innerHTML = label;\n            anchor.setAttribute('title', title);\n            classesToAdd.forEach(function(c) {\n                anchor.classList.add(c);\n            });\n            L.DomEvent.on (anchor, 'click', fn, context);\n            container.appendChild(anchor);\n            return anchor;\n        },\n\n        /**\n         * Method to fire on add to map\n         * @param {Object}      map     Map object\n         * @returns {Element}           Containing element\n         */\n        onAdd: function(map) {\n            var self = this\n            // needed to avoid creating points by mouseclick during dragging the map\n            map.on('movestart ', function() {\n                self._mapdragging = true\n            })\n            this._container = document.createElement('div');\n            this._container.classList.add('leaflet-bar');\n            L.DomEvent.disableClickPropagation(this._container); // otherwise drawing process would instantly start at controls' container or double click would zoom-in map\n            var title = this.options.measureControlTitleOn;\n            var label = this.options.measureControlLabel;\n            var classes = this.options.measureControlClasses;\n            if (label.indexOf('&') != -1) {\n                classes.push(_unicodeClass);\n            }\n\n            // initialize state\n            this._arrPolylines = [];\n            this._measureControl = this._createControl (label, title, classes, this._container, this._toggleMeasure, this);\n            this._defaultControlBgColor = this._measureControl.style.backgroundColor;\n            this._measureControl.setAttribute('id', _measureControlId);\n            if (this.options.showClearControl) {\n                var title = this.options.clearControlTitle;\n                var label = this.options.clearControlLabel;\n                var classes = this.options.clearControlClasses;\n                if (label.indexOf('&') != -1) {\n                    classes.push(_unicodeClass);\n                }\n                this._clearMeasureControl = this._createControl (label, title, classes, this._container, this._clearAllMeasurements, this);\n                this._clearMeasureControl.classList.add('polyline-measure-clearControl')\n            }\n            if (this.options.showUnitControl) {\n                if (this.options.unit == \"metres\") {\n                    var label = this.options.unitControlLabel.metres;\n                    var title = this.options.unitControlTitle.text + \" [\" + this.options.unitControlTitle.metres  + \"]\";\n                }  else if  (this.options.unit == \"landmiles\") {\n                    var label = this.options.unitControlLabel.landmiles;\n                    var title = this.options.unitControlTitle.text + \" [\" + this.options.unitControlTitle.landmiles  + \"]\";\n                } else {\n                    var label = this.options.unitControlLabel.nauticalmiles;\n                    var title = this.options.unitControlTitle.text + \" [\" + this.options.unitControlTitle.nauticalmiles  + \"]\";\n                }\n                var classes = [];\n                this._unitControl = this._createControl (label, title, classes, this._container, this._changeUnit, this);\n                this._unitControl.setAttribute ('id', 'unitControlId');\n            }\n            return this._container;\n        },\n\n        /**\n         * Method to fire on remove from map\n         */\n        onRemove: function () {\n            if (this._measuring) {\n                this._toggleMeasure();\n            }\n        },\n\n        // turn off all Leaflet-own events of markers (popups, tooltips). Needed to allow creating points on top of markers\n        _saveNonpolylineEvents: function () {\n            this._nonpolylineTargets = this._map._targets;\n            if (typeof this._polylineTargets !== 'undefined') {\n                this._map._targets = this._polylineTargets;\n            } else {\n                this._map._targets ={};\n            }\n        },\n\n        // on disabling the measure add-on, save Polyline-measure events and enable the former Leaflet-own events again\n        _savePolylineEvents: function () {\n            this._polylineTargets = this._map._targets;\n            this._map._targets = this._nonpolylineTargets;\n        },\n\n        /**\n         * Toggle the measure functionality on or off\n         * @private\n         */\n        _toggleMeasure: function () {\n            this._measuring = !this._measuring;\n            if (this._measuring) {   // if measuring is going to be switched on\n                this._mapdragging = false;\n                this._saveNonpolylineEvents ();\n                this._measureControl.classList.add ('polyline-measure-controlOnBgColor');\n                this._measureControl.style.backgroundColor = this.options.backgroundColor;\n                this._measureControl.title = this.options.measureControlTitleOff;\n                this._oldCursor = this._map._container.style.cursor;          // save former cursor type\n                this._map._container.style.cursor = 'crosshair';\n                this._doubleClickZoom = this._map.doubleClickZoom.enabled();  // save former status of doubleClickZoom\n                this._map.doubleClickZoom.disable();\n                // create LayerGroup \"layerPaint\" (only) the first time Measure Control is switched on\n                if (!this._layerPaint) {\n                    this._layerPaint = L.layerGroup().addTo(this._map);\n                }\n                this._map.on ('mousemove', this._mouseMove, this);   //  enable listing to 'mousemove', 'click', 'keydown' events\n                this._map.on ('click', this._mouseClick, this);\n                L.DomEvent.on (document, 'keydown', this._onKeyDown, this);\n                this._resetPathVariables();\n            } else {   // if measuring is going to be switched off\n                this._savePolylineEvents ();\n                this._measureControl.classList.remove ('polyline-measure-controlOnBgColor');\n                this._measureControl.style.backgroundColor = this._defaultControlBgColor;\n                this._measureControl.title = this.options.measureControlTitleOn;\n                this._map._container.style.cursor = this._oldCursor;\n                this._map.off ('mousemove', this._mouseMove, this);\n                this._map.off ('click', this._mouseClick, this);\n                this._map.off ('mousemove', this._resumeFirstpointMousemove, this);\n                this._map.off ('click', this._resumeFirstpointClick, this);\n                this._map.off ('mousemove', this._dragCircleMousemove, this);\n                this._map.off ('mouseup', this._dragCircleMouseup, this);\n                L.DomEvent.off (document, 'keydown', this._onKeyDown, this);\n                if(this._doubleClickZoom) {\n                    this._map.doubleClickZoom.enable();\n                }\n                if(this.options.clearMeasurementsOnStop && this._layerPaint) {\n                    this._clearAllMeasurements();\n                }\n                // to remove temp. Line if line at the moment is being drawn and not finished while clicking the control\n                if (this._cntCircle !== 0) {\n                    this._finishPolylinePath();\n                }\n            }\n            // allow easy to connect the measure control to the app, f.e. to disable the selection on the map when the measurement is turned on\n            this._map.fire('polylinemeasure:toggle', {sttus: this._measuring});\n        },\n\n        /**\n         * Clear all measurements from the map\n         */\n        _clearAllMeasurements: function() {\n            if ((this._cntCircle !== undefined) && (this._cntCircle !== 0)) {\n                this._finishPolylinePath();\n            }\n            if (this._layerPaint) {\n                this._layerPaint.clearLayers();\n            }\n            this._arrPolylines = [];\n            this._map.fire('polylinemeasure:clear');\n        },\n\n        _changeUnit: function() {\n            if (this.options.unit == \"metres\") {\n                this.options.unit = \"landmiles\";\n                document.getElementById(\"unitControlId\").innerHTML = this.options.unitControlLabel.landmiles;\n                this._unitControl.title = this.options.unitControlTitle.text +\" [\" + this.options.unitControlTitle.landmiles  + \"]\";\n            } else if (this.options.unit == \"landmiles\") {\n                this.options.unit = \"nauticalmiles\";\n                document.getElementById(\"unitControlId\").innerHTML = this.options.unitControlLabel.nauticalmiles;\n                this._unitControl.title = this.options.unitControlTitle.text +\" [\" + this.options.unitControlTitle.nauticalmiles  + \"]\";\n            } else {\n                this.options.unit = \"metres\";\n                document.getElementById(\"unitControlId\").innerHTML = this.options.unitControlLabel.metres;\n                this._unitControl.title = this.options.unitControlTitle.text +\" [\" + this.options.unitControlTitle.metres  + \"]\";\n            }\n            this._arrPolylines.map (function(line) {\n                var totalDistance = 0;\n                line.circleCoords.map (function(point, point_index) {\n                    if (point_index >= 1) {\n                        var distance = line.circleCoords [point_index - 1].distanceTo (line.circleCoords [point_index]);\n                        totalDistance += distance;\n                        this._updateTooltip (line.tooltips [point_index], line.tooltips [point_index - 1], totalDistance, distance, line.circleCoords [point_index - 1], line.circleCoords [point_index]);\n                    }\n                }.bind(this));\n            }.bind(this));\n        },\n\n        /**\n         * Event to fire when a keyboard key is depressed.\n         * Currently only watching for ESC key (= keyCode 27). 1st press finishes line, 2nd press turns Measuring off.\n         * @param {Object} e Event\n         * @private\n         */\n        _onKeyDown: function (e) {\n            if (e.keyCode === 27) {\n                // if resuming a line at its first point is active\n                if (this._resumeFirstpointFlag === true) {\n                    this._resumeFirstpointFlag = false;\n                    var lineNr = this._lineNr;\n                    this._map.off ('mousemove', this._resumeFirstpointMousemove, this);\n                    this._map.off ('click', this._resumeFirstpointClick, this);\n                    this._layerPaint.removeLayer (this._rubberlinePath2);\n                    this._layerPaint.removeLayer (this._tooltipNew);\n                    this._arrPolylines[lineNr].circleMarkers [0].setStyle (this.options.startCircle);\n                    var text = '';\n                    var totalDistance = 0;\n                    if (this.options.showBearings === true) {\n                        text = this.options.bearingTextIn+':---°<br>'+this.options.bearingTextOut+':---°';\n                    }\n                    text = text + '<div class=\"polyline-measure-tooltip-difference\">+' + '0</div>';\n                    text = text + '<div class=\"polyline-measure-tooltip-total\">' + '0</div>';\n                    this._arrPolylines[lineNr].tooltips [0]._icon.innerHTML = text;\n                    this._arrPolylines[lineNr].tooltips.map (function (item, index) {\n                        if (index >= 1) {\n                            var distance = this._arrPolylines[lineNr].circleCoords[index-1].distanceTo (this._arrPolylines[lineNr].circleCoords[index]);\n                            var lastCircleCoords = this._arrPolylines[lineNr].circleCoords[index - 1];\n                            var mouseCoords = this._arrPolylines[lineNr].circleCoords[index];\n                            totalDistance += distance;\n                            var prevTooltip = this._arrPolylines[lineNr].tooltips[index-1]\n                            this._updateTooltip (item, prevTooltip, totalDistance, distance, lastCircleCoords, mouseCoords);\n                        }\n                    }.bind (this));\n                    this._map.on ('mousemove', this._mouseMove, this);\n                    return\n                }\n                if (!this._currentLine) {    // if NOT drawing a line, ESC will directly switch of measuring\n                    this._toggleMeasure();\n                } else {                     // if drawing a line, ESC will finish the current line\n                    this._finishPolylinePath(e);\n                }\n            }\n        },\n\n        /**\n         * Get the distance in the format specified in the options\n         * @param {Number} distance Distance to convert\n         * @returns {{value: *, unit: *}}\n         * @private\n         */\n        _getDistance: function (distance) {\n            var dist = distance;\n            var unit;\n            if (this.options.unit === 'nauticalmiles') {\n                unit = this.options.unitControlLabel.nauticalmiles;\n                if (dist >= 185200) {\n                    dist = (dist/1852).toFixed(0);\n                } else if (dist >= 18520) {\n                    dist = (dist/1852).toFixed(1);\n                } else if (dist >= 1852) {\n                    dist = (dist/1852).toFixed(2);\n                } else  {\n                    if (this.options.distanceShowSameUnit) {\n                        dist = (dist/1852).toFixed(3);\n                    } else {\n                        dist = (dist/0.3048).toFixed(0);\n                        unit = this.options.unitControlLabel.feet;\n                    }\n                }\n            } else if (this.options.unit === 'landmiles') {\n                unit = this.options.unitControlLabel.landmiles;\n                if (dist >= 160934.4) {\n                    dist = (dist/1609.344).toFixed(0);\n                } else if (dist >= 16093.44) {\n                    dist = (dist/1609.344).toFixed(1);\n                } else if (dist >= 1609.344) {\n                    dist = (dist/1609.344).toFixed(2);\n                } else {\n                    if (this.options.distanceShowSameUnit) {\n                        dist = (dist/1609.344).toFixed(3);\n                    } else {\n                        dist = (dist/0.3048).toFixed(0);\n                        unit = this.options.unitControlLabel.feet;\n                    }\n                }\n            }\n            else if (this.options.unit === 'custom') {\n                unit = this.options.unitControlLabel.custom;\n                dist = dist/this.options.customUnitDistance;\n                // if (dist >= 100000) {\n                //     dist = (dist/1000).toFixed(0);\n                // } else if (dist >= 10000) {\n                //     dist = (dist/1000).toFixed(1);\n                // } else if (dist >= 1000) {\n                //     dist = (dist/1000).toFixed(2);\n                // } else {\n                //     if (this.options.distanceShowSameUnit) {\n                //         dist = (dist/1000).toFixed(3);\n                //     } else {\n                //         dist = (dist).toFixed(0);\n                //         unit = this.options.unitControlLabel.custom;\n                //     }\n                // }\n            }\n            else {\n                unit = this.options.unitControlLabel.kilometres;\n                if (dist >= 100000) {\n                    dist = (dist/1000).toFixed(0);\n                } else if (dist >= 10000) {\n                    dist = (dist/1000).toFixed(1);\n                } else if (dist >= 1000) {\n                    dist = (dist/1000).toFixed(2);\n                } else {\n                    if (this.options.distanceShowSameUnit) {\n                        dist = (dist/1000).toFixed(3);\n                    } else {\n                        dist = (dist).toFixed(0);\n                        unit = this.options.unitControlLabel.metres;\n                    }\n                }\n            }\n            return {value:dist, unit:unit};\n        },\n\n        /**\n         * Calculate Great-circle Arc (= shortest distance on a sphere like the Earth) between two coordinates\n         * formulas: http://www.edwilliams.org/avform.htm\n         * @private\n         */\n        _polylineArc: function (_from, _to) {\n            function _GCinterpolate (f) {\n                var A = Math.sin((1 - f) * d) / Math.sin(d);\n                var B = Math.sin(f * d) / Math.sin(d);\n                var x = A * Math.cos(fromLat) * Math.cos(fromLng) + B * Math.cos(toLat) * Math.cos(toLng);\n                var y = A * Math.cos(fromLat) * Math.sin(fromLng) + B * Math.cos(toLat) * Math.sin(toLng);\n                var z = A * Math.sin(fromLat) + B * Math.sin(toLat);\n                // atan2 better than atan-function cause results are from -pi to +pi\n                // => results of latInterpol, lngInterpol always within range -180° ... +180°  => conversion into values < -180° or > + 180° has to be done afterwards\n                var latInterpol = 180 / Math.PI * Math.atan2(z, Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)));\n                var lngInterpol = 180 / Math.PI * Math.atan2(y, x);\n                // don't split polyline if it crosses dateline ( -180° or +180°).  Without the polyline would look like: +179° ==> +180° ==> -180° ==> -179°...\n                // algo: if difference lngInterpol-from.lng is > 180° there's been an unwanted split from +180 to -180 cause an arc can never span >180°\n                var diff = lngInterpol-fromLng*180/Math.PI;\n                function trunc(n) { return Math[n > 0 ? \"floor\" : \"ceil\"](n); }   // alternatively we could use the new Math.trunc method, but Internet Explorer doesn't know it\n                if (diff < 0) {\n                    lngInterpol = lngInterpol  - trunc ((diff - 180)/ 360) * 360;\n                } else {\n                    lngInterpol = lngInterpol  - trunc ((diff +180)/ 360) * 360;\n                }\n                return [latInterpol, lngInterpol];\n            }\n\n            function _GCarc (npoints) {\n                var arrArcCoords = [];\n                var delta = 1.0 / (npoints-1 );\n                // first point of Arc should NOT be returned\n                for (var i = 0; i < npoints; i++) {\n                    var step = delta * i;\n                    var coordPair = _GCinterpolate (step);\n                    arrArcCoords.push (coordPair);\n                }\n                return arrArcCoords;\n            }\n\n            var fromLat = _from.lat;  // work with with copies of object's elements _from.lat and _from.lng, otherwise they would get modiefied due to call-by-reference on Objects in Javascript\n            var fromLng = _from.lng;\n            var toLat = _to.lat;\n            var toLng = _to.lng;\n            fromLat=fromLat * Math.PI / 180;\n            fromLng=fromLng * Math.PI / 180;\n            toLat=toLat * Math.PI / 180;\n            toLng=toLng * Math.PI / 180;\n            var d = 2.0 * Math.asin(Math.sqrt(Math.pow (Math.sin((fromLat - toLat) / 2.0), 2) + Math.cos(fromLat) *  Math.cos(toLat) *  Math.pow(Math.sin((fromLng - toLng) / 2.0), 2)));\n            var arrLatLngs;\n            if (d === 0) {\n                arrLatLngs = [[fromLat, fromLng]];\n            } else {\n                arrLatLngs = _GCarc(this._arcpoints);\n            }\n            return arrLatLngs;\n        },\n\n        /**\n         * Update the tooltip distance\n         * @param {Number} total        Total distance\n         * @param {Number} difference   Difference in distance between 2 points\n         * @private\n         */\n        _updateTooltip: function (currentTooltip, prevTooltip, total, difference, lastCircleCoords, mouseCoords) {\n            // Explanation of formula: http://www.movable-type.co.uk/scripts/latlong.html\n            var calcAngle = function (p1, p2, direction) {\n                var lat1 = p1.lat / 180 * Math.PI;\n                var lat2 = p2.lat / 180 * Math.PI;\n                var lng1 = p1.lng / 180 * Math.PI;\n                var lng2 = p2.lng / 180 * Math.PI;\n                var y = Math.sin(lng2-lng1) * Math.cos(lat2);\n                var x = Math.cos(lat1)*Math.sin(lat2) - Math.sin(lat1)*Math.cos(lat2)*Math.cos(lng2-lng1);\n                if (direction === \"inbound\") {\n                    var brng = (Math.atan2(y, x) * 180 / Math.PI + 180).toFixed(0);\n                } else {\n                    var brng = (Math.atan2(y, x) * 180 / Math.PI + 360).toFixed(0);\n                }\n                return (brng % 360);\n            }\n\n            var angleIn = calcAngle (mouseCoords, lastCircleCoords, \"inbound\");\n            var angleOut = calcAngle (lastCircleCoords, mouseCoords, \"outbound\");\n            var totalRound = this._getDistance (total);\n            var differenceRound = this._getDistance (difference);\n            var textCurrent = '';\n            if (differenceRound.value > 0 ) {\n                if (this.options.showBearings === true) {\n                    textCurrent = this.options.bearingTextIn + ': ' + angleIn + '°<br>'+this.options.bearingTextOut+':---°';\n                }\n                textCurrent += '<div class=\"polyline-measure-tooltip-difference\">+' + differenceRound.value + '&nbsp;' +  differenceRound.unit + '</div>';\n            }\n            textCurrent += '<div class=\"polyline-measure-tooltip-total\">' + totalRound.value + '&nbsp;' +  totalRound.unit + '</div>';\n            currentTooltip._icon.innerHTML = textCurrent;\n            if ((this.options.showBearings === true) && (prevTooltip)) {\n                var textPrev = prevTooltip._icon.innerHTML;\n                var regExp = new RegExp(this.options.bearingTextOut + '.*\\°');\n                var textReplace = textPrev.replace(regExp, this.options.bearingTextOut + ': ' + angleOut + \"°\");\n                prevTooltip._icon.innerHTML = textReplace;\n            }\n        },\n\n        _drawArrow: function (arcLine) {\n            var midpoint = Math.round(arcLine.length/2);\n            var P1 = arcLine[midpoint-1];\n            var P2 = arcLine[midpoint];\n            var diffLng12 = P2[1] - P1[1];\n            var diffLat12 = P2[0] - P1[0];\n            var center = [P1[0] + diffLat12/2, P1[1] + diffLng12/2];  // center of Great-circle distance, NOT of the arc on a Mercator map! reason: a) to complicated b) map not always Mercator c) good optical feature to see where real center of distance is not the \"virtual\" warped arc center due to Mercator projection\n            // angle just an aprroximation, which could be somewhat off if Line runs near high latitudes. Use of *geographical coords* for line segment P1 to P2 is best method. Use of *Pixel coords* for just one arc segement P1 to P2 could create for short lines unexact rotation angles, and the use Use of Pixel coords between endpoints [0] to [99] (in case of 100-point-arc) results in even more rotation difference for high latitudes as with geogrpaphical coords-method\n            var cssAngle = -Math.atan2(diffLat12, diffLng12)*57.29578   // convert radiant to degree as needed for use as CSS value; cssAngle is opposite to mathematical angle.\n            var iconArrow = L.divIcon ({\n                className: \"\",  // to avoid getting a default class with paddings and borders assigned by Leaflet\n                iconSize: [16, 16],\n                iconAnchor: [8, 8],\n                // html : \"<img src='iconArrow.png' style='background:green; height:100%; vertical-align:top; transform:rotate(\"+ cssAngle +\"deg)'>\"  <<=== alternative method by the use of an image instead of a Unicode symbol.\n                html : \"<div style = 'font-size: 16px; line-height: 16px; vertical-align:top; transform: rotate(\"+ cssAngle +\"deg)'>&#x27a4;</div>\"   // best results if iconSize = font-size = line-height and iconAnchor font-size/2 .both values needed to position symbol in center of L.divIcon for all font-sizes.\n            });\n            var newArrowMarker = L.marker (center, {icon: iconArrow, zIndexOffset:-50}).addTo(this._layerPaint);  // zIndexOffset to draw arrows below tooltips\n            if (!this._currentLine){  // just bind tooltip if not drawing line anymore, cause following the instruction of tooltip is just possible when not drawing a line\n                newArrowMarker.bindTooltip (this.options.tooltipTextAdd, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n            }\n            newArrowMarker.on ('click', this._clickedArrow, this);\n            return newArrowMarker;\n        },\n\n        /**\n         * Event to fire on mouse move\n         * @param {Object} e Event\n         * @private\n         */\n        _mouseMove: function (e) {\n            var mouseCoords = e.latlng;\n            this._map.on ('click', this._mouseClick, this);  // necassary for _dragCircle. If switched on already within _dragCircle an unwanted click is fired at the end of the drag.\n            if(!mouseCoords || !this._currentLine) {\n                return;\n            }\n            var lastCircleCoords = this._currentLine.circleCoords.last();\n            this._rubberlinePath.setLatLngs (this._polylineArc (lastCircleCoords, mouseCoords));\n            var currentTooltip = this._currentLine.tooltips.last();\n            var prevTooltip = this._currentLine.tooltips.slice(-2,-1)[0];\n            currentTooltip.setLatLng (mouseCoords);\n            var distanceSegment = mouseCoords.distanceTo (lastCircleCoords);\n            this._updateTooltip (currentTooltip, prevTooltip, this._currentLine.distance + distanceSegment, distanceSegment, lastCircleCoords, mouseCoords);\n        },\n\n        _startLine: function (clickCoords) {\n            var icon = L.divIcon({\n                className: 'polyline-measure-tooltip',\n                iconAnchor: [-4, -4]\n            });\n            var last = function() {\n                return this.slice(-1)[0];\n            };\n            this._rubberlinePath = L.polyline ([], {\n                // Style of temporary, dashed line while moving the mouse\n                color: this.options.tempLine.color,\n                weight: this.options.tempLine.weight,\n                interactive: false,\n                dashArray: '8,8'\n            }).addTo(this._layerPaint).bringToBack();\n\n            var polylineState = this;   // use \"polylineState\" instead of \"this\" to allow measuring on 2 different maps the same time\n\n            this._currentLine = {\n                id: 0,\n                circleCoords: [],\n                circleMarkers: [],\n                arrowMarkers: [],\n                tooltips: [],\n                distance: 0,\n\n                polylinePath: L.polyline([], {\n                    // Style of fixed, polyline after mouse is clicked\n                    color: this.options.fixedLine.color,\n                    weight: this.options.fixedLine.weight,\n                    interactive: false\n                }).addTo(this._layerPaint).bringToBack(),\n\n                handleMarkers: function (latlng) {\n                    // update style on previous marker\n                    var lastCircleMarker = this.circleMarkers.last();\n                    if (lastCircleMarker) {\n                        lastCircleMarker.bindTooltip (polylineState.options.tooltipTextDelete, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                        lastCircleMarker.off ('click', polylineState._finishPolylinePath, polylineState);\n                        if (this.circleMarkers.length === 1) {\n                            lastCircleMarker.setStyle (polylineState.options.startCircle);\n                        } else {\n                            lastCircleMarker.setStyle (polylineState.options.intermedCircle);\n                        }\n                    }\n                    var newCircleMarker = new L.CircleMarker (latlng, polylineState.options.currentCircle).addTo(polylineState._layerPaint);\n                    newCircleMarker.bindTooltip (polylineState.options.tooltipTextFinish + polylineState.options.tooltipTextDelete, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                    newCircleMarker.cntLine = polylineState._currentLine.id;\n                    newCircleMarker.cntCircle = polylineState._cntCircle;\n                    polylineState._cntCircle++;\n                    newCircleMarker.on ('mousedown', polylineState._dragCircle, polylineState);\n                    newCircleMarker.on ('click', polylineState._finishPolylinePath, polylineState);\n                    this.circleMarkers.push (newCircleMarker);\n                },\n\n                getNewToolTip: function(latlng) {\n                    return L.marker (latlng, {\n                        icon: icon,\n                        interactive: false\n                    });\n                },\n\n                addPoint: function (mouseCoords) {\n                    var lastCircleCoords = this.circleCoords.last();\n                    if (lastCircleCoords && lastCircleCoords.equals (mouseCoords)) {    // don't add a new circle if the click was onto the last circle\n                        return;\n                    }\n                    this.circleCoords.push (mouseCoords);\n                    // update polyline\n                    if (this.circleCoords.length > 1) {\n                        var arc = polylineState._polylineArc (lastCircleCoords, mouseCoords);\n                        if (this.circleCoords.length > 2) {\n                            arc.shift();  // remove first coordinate of the arc, cause it is identical with last coordinate of previous arc\n                        }\n                        this.polylinePath.setLatLngs (this.polylinePath.getLatLngs().concat(arc));\n                        // following lines needed especially for Mobile Browsers where we just use mouseclicks. No mousemoves, no tempLine.\n                        var arrowMarker = polylineState._drawArrow (arc);\n                        arrowMarker.cntLine = polylineState._currentLine.id;\n                        arrowMarker.cntArrow = polylineState._cntCircle - 1;\n                        polylineState._currentLine.arrowMarkers.push (arrowMarker);\n                        var distanceSegment = lastCircleCoords.distanceTo (mouseCoords);\n                        this.distance += distanceSegment;\n                        var currentTooltip = polylineState._currentLine.tooltips.last();\n                        var prevTooltip = polylineState._currentLine.tooltips.slice(-1,-2)[0];\n                        polylineState._updateTooltip (currentTooltip, prevTooltip, this.distance, distanceSegment, lastCircleCoords, mouseCoords);\n                    }\n                    // update last tooltip with final value\n                    if (currentTooltip) {\n                        currentTooltip.setLatLng (mouseCoords);\n                    }\n                    // add new tooltip to update on mousemove\n                    var tooltipNew = this.getNewToolTip(mouseCoords);\n                    tooltipNew.addTo(polylineState._layerPaint);\n                    this.tooltips.push (tooltipNew);\n                    this.handleMarkers (mouseCoords);\n                },\n\n                finalize: function() {\n                    // remove tooltip created by last click\n                    polylineState._layerPaint.removeLayer (this.tooltips.last());\n                    this.tooltips.pop();\n                    // remove temporary rubberline\n                    polylineState._layerPaint.removeLayer (polylineState._rubberlinePath);\n                    if (this.circleCoords.length > 1) {\n                        this.tooltips.last()._icon.classList.add('polyline-measure-tooltip-end'); // add Class e.g. another background-color to the Previous Tooltip (which is the last fixed tooltip, cause the moving tooltip is being deleted later)\n                        var lastCircleMarker = this.circleMarkers.last()\n                        lastCircleMarker.setStyle (polylineState.options.endCircle);\n                        // use Leaflet's own tooltip method to shwo a popuo tooltip if user hovers the last circle of a polyline\n                        lastCircleMarker.unbindTooltip ();  // to close the opened Tooltip after it's been opened after click onto point to finish the line\n                        polylineState._currentLine.circleMarkers.map (function (circle) {circle.bindTooltip (polylineState.options.tooltipTextMove + polylineState.options.tooltipTextDelete, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'})});\n                        polylineState._currentLine.circleMarkers[0].bindTooltip (polylineState.options.tooltipTextMove + polylineState.options.tooltipTextDelete + polylineState.options.tooltipTextResume, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                        lastCircleMarker.bindTooltip (polylineState.options.tooltipTextMove + polylineState.options.tooltipTextDelete + polylineState.options.tooltipTextResume, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                        polylineState._currentLine.arrowMarkers.map (function (arrow) {arrow.bindTooltip (polylineState.options.tooltipTextAdd, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'})});\n                        lastCircleMarker.off ('click', polylineState._finishPolylinePath, polylineState);\n                        lastCircleMarker.on ('click', polylineState._resumePolylinePath, polylineState);\n                        polylineState._arrPolylines.push(this);\n                    } else {\n                        // if there is only one point, just clean it up\n                        polylineState._layerPaint.removeLayer (this.circleMarkers.last());\n                        polylineState._layerPaint.removeLayer (this.tooltips.last());\n                    }\n                    polylineState._resetPathVariables();\n                }\n            };\n\n            var firstTooltip = L.marker (clickCoords, {\n                icon: icon,\n                interactive: false\n            })\n            firstTooltip.addTo(this._layerPaint);\n            var text = '';\n            if (this.options.showBearings === true) {\n                text = this.options.bearingTextIn+':---°<br>'+this.options.bearingTextOut+':---°';\n            }\n            text = text + '<div class=\"polyline-measure-tooltip-difference\">+' + '0</div>';\n            text = text + '<div class=\"polyline-measure-tooltip-total\">' + '0</div>';\n            firstTooltip._icon.innerHTML = text;\n            this._currentLine.tooltips.push (firstTooltip);\n            this._currentLine.circleCoords.last = last;\n            this._currentLine.tooltips.last = last;\n            this._currentLine.circleMarkers.last = last;\n            this._currentLine.id = this._arrPolylines.length;\n        },\n\n        /**\n         * Event to fire on mouse click\n         * @param {Object} e Event\n         * @private\n         */\n        _mouseClick: function (e) {\n            // skip if there are no coords provided by the event, or this event's screen coordinates match those of finishing CircleMarker for the line we just completed\n            if (!e.latlng || (this._finishCircleScreencoords && this._finishCircleScreencoords.equals(e.containerPoint))) {\n                return;\n            }\n\n            if (!this._currentLine && !this._mapdragging) {\n                this._startLine (e.latlng);\n                this._map.fire('polylinemeasure:start', this._currentLine);\n            }\n            // just create a point if the map isn't dragged during the mouseclick.\n            if (!this._mapdragging) {\n                this._currentLine.addPoint (e.latlng);\n                this._map.fire('polylinemeasure:add', e);\n            } else {\n                this._mapdragging = false; // this manual setting to \"false\" needed, instead of a \"moveend\"-Event. Cause the mouseclick of a \"moveend\"-event immediately would create a point too the same time.\n            }\n        },\n\n        /**\n         * Finish the drawing of the path by clicking onto the last circle or pressing ESC-Key\n         * @private\n         */\n        _finishPolylinePath: function (e) {\n            this._map.fire('polylinemeasure:finish', this._currentLine);\n            this._currentLine.finalize();\n            if (e) {\n                this._finishCircleScreencoords = e.containerPoint;\n            }\n        },\n\n        /**\n         * Resume the drawing of a polyline by pressing CTRL-Key and clicking onto the last circle\n         * @private\n         */\n        _resumePolylinePath: function (e) {\n            if (e.originalEvent.ctrlKey === true) {    // just resume if user pressed the CTRL-Key while clicking onto the last circle\n                this._currentLine = this._arrPolylines [e.target.cntLine];\n                this._rubberlinePath = L.polyline ([], {\n                    // Style of temporary, rubberline while moving the mouse\n                    color: this.options.tempLine.color,\n                    weight: this.options.tempLine.weight,\n                    interactive: false,\n                    dashArray: '8,8'\n                }).addTo(this._layerPaint).bringToBack();\n                this._currentLine.tooltips.last()._icon.classList.remove ('polyline-measure-tooltip-end');   // remove extra CSS-class of previous, last tooltip\n                var tooltipNew = this._currentLine.getNewToolTip (e.latlng);\n                tooltipNew.addTo (this._layerPaint);\n                this._currentLine.tooltips.push(tooltipNew);\n                this._currentLine.circleMarkers.last().unbindTooltip();   // remove popup-tooltip of previous, last circleMarker\n                this._currentLine.circleMarkers.last().bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                this._currentLine.circleMarkers.last().setStyle (this.options.currentCircle);\n                this._cntCircle = this._currentLine.circleCoords.length;\n                this._map.fire('polylinemeasure:resume', this._currentLine);\n            }\n        },\n\n        /**\n         * After completing a path, reset all the values to prepare in creating the next polyline measurement\n         * @private\n         */\n        _resetPathVariables: function() {\n            this._cntCircle = 0;\n            this._currentLine = null;\n        },\n\n        _clickedArrow: function(e) {\n            if (e.originalEvent.ctrlKey) {\n                var lineNr = e.target.cntLine;\n                var arrowNr = e.target.cntArrow;\n                this._arrPolylines[lineNr].arrowMarkers [arrowNr].removeFrom (this._layerPaint);\n                var newCircleMarker = new L.CircleMarker (e.latlng, this.options.intermedCircle).addTo(this._layerPaint);\n                newCircleMarker.cntLine = lineNr;\n                newCircleMarker.on ('mousedown', this._dragCircle, this);\n                newCircleMarker.bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                this._arrPolylines[lineNr].circleMarkers.splice (arrowNr+1, 0, newCircleMarker);\n                this._arrPolylines[lineNr].circleMarkers.map (function (item, index) {\n                    item.cntCircle = index;\n                });\n                this._arrPolylines[lineNr].circleCoords.splice (arrowNr+1, 0, e.latlng);\n                lineCoords = this._arrPolylines[lineNr].polylinePath.getLatLngs(); // get Coords of each Point of the current Polyline\n                var arc1 = this._polylineArc (this._arrPolylines[lineNr].circleCoords[arrowNr], e.latlng);\n                arc1.pop();\n                var arc2 = this._polylineArc (e.latlng, this._arrPolylines[lineNr].circleCoords[arrowNr+2]);\n                Array.prototype.splice.apply (lineCoords, [(arrowNr)*(this._arcpoints-1), this._arcpoints].concat (arc1, arc2));\n                this._arrPolylines[lineNr].polylinePath.setLatLngs (lineCoords);\n                var arrowMarker = this._drawArrow (arc1);\n                this._arrPolylines[lineNr].arrowMarkers[arrowNr] = arrowMarker;\n                arrowMarker = this._drawArrow (arc2);\n                this._arrPolylines[lineNr].arrowMarkers.splice(arrowNr+1,0,arrowMarker);\n                this._arrPolylines[lineNr].arrowMarkers.map (function (item, index) {\n                    item.cntLine = lineNr;\n                    item.cntArrow = index;\n                });\n                this._tooltipNew = L.marker (e.latlng, {\n                    icon: L.divIcon({\n                        className: 'polyline-measure-tooltip',\n                        iconAnchor: [-4, -4]\n                    }),\n                    interactive: false\n                });\n                this._tooltipNew.addTo(this._layerPaint);\n                this._arrPolylines[lineNr].tooltips.splice (arrowNr+1, 0, this._tooltipNew);\n                var totalDistance = 0;\n                this._arrPolylines[lineNr].tooltips.map (function (item, index) {\n                    if (index >= 1) {\n                        var distance = this._arrPolylines[lineNr].circleCoords[index-1].distanceTo (this._arrPolylines[lineNr].circleCoords[index]);\n                        var lastCircleCoords = this._arrPolylines[lineNr].circleCoords[index - 1];\n                        var mouseCoords = this._arrPolylines[lineNr].circleCoords[index];\n                        totalDistance += distance;\n                        var prevTooltip = this._arrPolylines[lineNr].tooltips[index-1]\n                        this._updateTooltip (item, prevTooltip, totalDistance, distance, lastCircleCoords, mouseCoords);\n                    }\n                }.bind(this));\n                this._map.fire('polylinemeasure:insert', e);\n            }\n        },\n\n        _dragCircleMouseup: function () {\n            // bind new popup-tooltip to the last CircleMArker if dragging finished\n            if ((this._circleNr === 0) || (this._circleNr === this._arrPolylines[this._lineNr].circleCoords.length-1)) {\n                this._e1.target.bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete + this.options.tooltipTextResume, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n            } else {\n                this._e1.target.bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n            }\n            this._resetPathVariables();\n            this._map.off ('mousemove', this._dragCircleMousemove, this);\n            this._map.dragging.enable();\n            this._map.on ('mousemove', this._mouseMove, this);\n            this._map.off ('mouseup', this._dragCircleMouseup, this);\n            this._map.fire('polylinemeasure:move', this._e1);\n        },\n\n        _dragCircleMousemove: function (e2) {\n            var mouseNewLat = e2.latlng.lat;\n            var mouseNewLng = e2.latlng.lng;\n            var latDifference = mouseNewLat - this._mouseStartingLat;\n            var lngDifference = mouseNewLng - this._mouseStartingLng;\n            var currentCircleCoords = L.latLng (this._circleStartingLat + latDifference, this._circleStartingLng + lngDifference);\n            var arcpoints = this._arcpoints;\n            var lineNr = this._e1.target.cntLine;\n            this._lineNr = lineNr;\n            var circleNr = this._e1.target.cntCircle;\n            this._circleNr = circleNr;\n            this._e1.target.setLatLng (currentCircleCoords);\n            this._e1.target.unbindTooltip();    // unbind popup-tooltip cause otherwise it would be annoying during dragging, or popup instantly again if it's just closed\n            this._arrPolylines[lineNr].circleCoords[circleNr] = currentCircleCoords;\n            var lineCoords = this._arrPolylines[lineNr].polylinePath.getLatLngs(); // get Coords of each Point of the current Polyline\n            if (circleNr >= 1) {   // redraw previous arc just if circle is not starting circle of polyline\n                var newLineSegment1 = this._polylineArc(this._arrPolylines[lineNr].circleCoords[circleNr-1], currentCircleCoords);\n                // the next line's syntax has to be used since Internet Explorer doesn't know new spread operator (...) for inserting the individual elements of an array as 3rd argument of the splice method; Otherwise we could write: lineCoords.splice (circleNr*(arcpoints-1), arcpoints, ...newLineSegment1);\n                Array.prototype.splice.apply (lineCoords, [(circleNr-1)*(arcpoints-1), arcpoints].concat (newLineSegment1));\n                var arrowMarker = this._drawArrow (newLineSegment1);\n                arrowMarker.cntLine = lineNr;\n                arrowMarker.cntArrow = circleNr-1;\n                this._arrPolylines[lineNr].arrowMarkers [circleNr-1].removeFrom (this._layerPaint);\n                this._arrPolylines[lineNr].arrowMarkers [circleNr-1] = arrowMarker;\n            }\n            if (circleNr < this._arrPolylines[lineNr].circleCoords.length-1) {   // redraw following arc just if circle is not end circle of polyline\n                var newLineSegment2 = this._polylineArc (currentCircleCoords, this._arrPolylines[lineNr].circleCoords[circleNr+1]);\n                Array.prototype.splice.apply (lineCoords, [circleNr*(arcpoints-1), arcpoints].concat (newLineSegment2));\n                arrowMarker = this._drawArrow (newLineSegment2);\n                arrowMarker.cntLine = lineNr;\n                arrowMarker.cntArrow = circleNr;\n                this._arrPolylines[lineNr].arrowMarkers [circleNr].removeFrom (this._layerPaint);\n                this._arrPolylines[lineNr].arrowMarkers [circleNr] = arrowMarker;\n            }\n            this._arrPolylines[lineNr].polylinePath.setLatLngs (lineCoords);\n            if (circleNr >= 0) {     // just update tooltip position if moved circle is 2nd, 3rd, 4th etc. circle of a polyline\n                this._arrPolylines[lineNr].tooltips[circleNr].setLatLng (currentCircleCoords);\n            }\n            var totalDistance = 0;\n            // update tooltip texts of each tooltip\n            this._arrPolylines[lineNr].tooltips.map (function (item, index) {\n                if (index >= 1) {\n                    var distance = this._arrPolylines[lineNr].circleCoords[index-1].distanceTo (this._arrPolylines[lineNr].circleCoords[index]);\n                    var lastCircleCoords = this._arrPolylines[lineNr].circleCoords[index - 1];\n                    var mouseCoords = this._arrPolylines[lineNr].circleCoords[index];\n                    totalDistance += distance;\n                    this._arrPolylines[lineNr].distance = totalDistance;\n                    var prevTooltip = this._arrPolylines[lineNr].tooltips[index-1]\n                    this._updateTooltip (item, prevTooltip, totalDistance, distance, lastCircleCoords, mouseCoords);\n                }\n            }.bind(this));\n            this._map.on ('mouseup', this._dragCircleMouseup, this);\n        },\n\n        _resumeFirstpointMousemove: function (e) {\n            var lineNr = this._lineNr;\n            this._map.on ('click', this._resumeFirstpointClick, this);  // necassary for _dragCircle. If switched on already within _dragCircle an unwanted click is fired at the end of the drag.\n            var mouseCoords = e.latlng;\n            this._rubberlinePath2.setLatLngs (this._polylineArc (mouseCoords, currentCircleCoords));\n            this._tooltipNew.setLatLng (mouseCoords);\n            var totalDistance = 0;\n            var distance = mouseCoords.distanceTo (this._arrPolylines[lineNr].circleCoords[0]);\n            var lastCircleCoords = mouseCoords;\n            var currentCoords = this._arrPolylines[lineNr].circleCoords[0];\n            totalDistance += distance;\n            var prevTooltip = this._tooltipNew;\n            var currentTooltip = this._arrPolylines[lineNr].tooltips[0]\n            this._updateTooltip (currentTooltip, prevTooltip, totalDistance, distance, lastCircleCoords, currentCoords);\n            this._arrPolylines[lineNr].tooltips.map (function (item, index) {\n                if (index >= 1) {\n                    var distance = this._arrPolylines[lineNr].circleCoords[index-1].distanceTo (this._arrPolylines[lineNr].circleCoords[index]);\n                    var lastCircleCoords = this._arrPolylines[lineNr].circleCoords[index - 1];\n                    var mouseCoords = this._arrPolylines[lineNr].circleCoords[index];\n                    totalDistance += distance;\n                    var prevTooltip = this._arrPolylines[lineNr].tooltips[index-1]\n                    this._updateTooltip (item, prevTooltip, totalDistance, distance, lastCircleCoords, mouseCoords);\n                }\n            }.bind (this));\n        },\n\n        _resumeFirstpointClick: function (e) {\n            var lineNr = this._lineNr;\n            this._resumeFirstpointFlag = false;\n            this._map.off ('mousemove', this._resumeFirstpointMousemove, this);\n            this._map.off ('click', this._resumeFirstpointClick, this);\n            this._layerPaint.removeLayer (this._rubberlinePath2);\n            this._arrPolylines[lineNr].circleMarkers [0].setStyle (this.options.intermedCircle);\n            this._arrPolylines[lineNr].circleMarkers [0].unbindTooltip();\n            this._arrPolylines[lineNr].circleMarkers [0].bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n            var newCircleMarker = new L.CircleMarker (e.latlng, this.options.startCircle).addTo(this._layerPaint);\n            newCircleMarker.cntLine = lineNr;\n            newCircleMarker.cntCircle = 0;\n            newCircleMarker.on ('mousedown', this._dragCircle, this);\n            newCircleMarker.bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete + this.options.tooltipTextResume, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n            this._arrPolylines[lineNr].circleMarkers.unshift(newCircleMarker);\n            this._arrPolylines[lineNr].circleMarkers.map (function (item, index) {\n                item.cntCircle = index;\n            });\n            this._arrPolylines[lineNr].circleCoords.unshift(e.latlng);\n            var arc = this._polylineArc (e.latlng, currentCircleCoords);\n            var arrowMarker = this._drawArrow (arc);\n            this._arrPolylines[lineNr].arrowMarkers.unshift(arrowMarker);\n            this._arrPolylines[lineNr].arrowMarkers.map (function (item, index) {\n                item.cntLine = lineNr;\n                item.cntArrow = index;\n            });\n            arc.pop();  // remove last coordinate of arc, cause it's already part of the next arc.\n            this._arrPolylines[lineNr].polylinePath.setLatLngs (arc.concat(this._arrPolylines[lineNr].polylinePath.getLatLngs()));\n            this._arrPolylines[lineNr].tooltips.unshift(this._tooltipNew);\n            this._map.on ('mousemove', this._mouseMove, this);\n        },\n\n\n        // not just used for dragging Cirles but also for deleting circles and resuming line at its starting point.\n        _dragCircle: function (e1) {\n            var arcpoints = this._arcpoints;\n            if (e1.originalEvent.ctrlKey) {   // if user wants to resume drawing a line\n                this._map.off ('click', this._mouseClick, this); // to avoid unwanted creation of a new line if CTRL-clicked onto a point\n                // if user wants resume the line at its starting point\n                if (e1.target.cntCircle === 0) {\n                    this._resumeFirstpointFlag = true;\n                    this._lineNr = e1.target.cntLine;\n                    var lineNr = this._lineNr;\n                    this._circleNr = e1.target.cntCircle;\n                    currentCircleCoords = e1.latlng;\n                    this._arrPolylines[lineNr].circleMarkers [0].setStyle (this.options.currentCircle);\n                    this._rubberlinePath2 = L.polyline ([], {\n                        // Style of temporary, rubberline while moving the mouse\n                        color: this.options.tempLine.color,\n                        weight: this.options.tempLine.weight,\n                        interactive: false,\n                        dashArray: '8,8'\n                    }).addTo(this._layerPaint).bringToBack();\n                    this._tooltipNew = L.marker (currentCircleCoords, {\n                        icon: L.divIcon({\n                            className: 'polyline-measure-tooltip',\n                            iconAnchor: [-4, -4]\n                        }),\n                        interactive: false\n                    });\n                    this._tooltipNew.addTo(this._layerPaint);\n                    var text='';\n                    if (this.options.showBearings === true) {\n                        text = text + this.options.bearingTextIn+':---°<br>'+this.options.bearingTextOut+':---°';\n                    }\n                    text = text + '<div class=\"polyline-measure-tooltip-difference\">+' + '0</div>';\n                    text = text + '<div class=\"polyline-measure-tooltip-total\">' + '0</div>';\n                    this._tooltipNew._icon.innerHTML = text;\n                    this._map.off ('mousemove', this._mouseMove, this);\n                    this._map.on ('mousemove', this._resumeFirstpointMousemove, this);\n                }\n                return;\n            }\n\n            // if user wants to delete a circle\n            if (e1.originalEvent.shiftKey) {    // it's not possible to use \"ALT-Key\" instead, cause this won't work in some Linux distributions (there it's the default hotkey for moving windows)\n                this._lineNr = e1.target.cntLine;\n                var lineNr = this._lineNr;\n                this._circleNr = e1.target.cntCircle;\n                var circleNr = this._circleNr;\n\n                // if there is a polyline with this number in finished ones\n                if (this._arrPolylines[lineNr]) {\n                    if (this._arrPolylines[lineNr].circleMarkers.length === 2) {    // if there are just 2 remaining points, delete all these points and the remaining line, since there should not stay a lonely point the map\n                        this._layerPaint.removeLayer (this._arrPolylines[lineNr].circleMarkers [1]);\n                        this._layerPaint.removeLayer (this._arrPolylines[lineNr].tooltips [1]);\n                        this._layerPaint.removeLayer (this._arrPolylines[lineNr].circleMarkers [0]);\n                        this._layerPaint.removeLayer (this._arrPolylines[lineNr].tooltips [0]);\n                        this._layerPaint.removeLayer (this._arrPolylines[lineNr].arrowMarkers [0]);\n                        this._layerPaint.removeLayer (this._arrPolylines[lineNr].polylinePath);\n                        this._map.fire('polylinemeasure:remove', e1);\n                        return;\n                    }\n\n                    this._arrPolylines[lineNr].circleCoords.splice(circleNr,1);\n                    this._arrPolylines[lineNr].circleMarkers [circleNr].removeFrom (this._layerPaint);\n                    this._arrPolylines[lineNr].circleMarkers.splice(circleNr,1);\n                    this._arrPolylines[lineNr].circleMarkers.map (function (item, index) {\n                        item.cntCircle = index;\n                    });\n                    var lineCoords = this._arrPolylines[lineNr].polylinePath.getLatLngs();\n                    this._arrPolylines[lineNr].tooltips [circleNr].removeFrom (this._layerPaint);\n                    this._arrPolylines[lineNr].tooltips.splice(circleNr,1);\n\n                    // if the last Circle in polyline is being removed (in the code above, so length will be equal 0)\n                    if(!this._arrPolylines[lineNr].circleMarkers.length) {\n                        this._arrPolylines.splice(lineNr, 1);\n                        // when you delete the line in the middle of array, other lines indexes change, so you need to update line number of markers and circles\n                        this._arrPolylines.forEach(function(line, index) {\n                            line.circleMarkers.map(function (item) {\n                                item.cntLine = index;\n                            });\n                            line.arrowMarkers.map(function (item) {\n                                item.cntLine = index;\n                            });\n                        });\n\n                        return;\n                    }\n                    // if first Circle is being removed\n                    if (circleNr === 0) {\n                        this._arrPolylines[lineNr].circleMarkers [0].setStyle (this.options.startCircle);\n                        lineCoords.splice (0, arcpoints-1);\n                        this._arrPolylines[lineNr].circleMarkers [0].bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete + this.options.tooltipTextResume, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                        this._arrPolylines[lineNr].arrowMarkers [circleNr].removeFrom (this._layerPaint);\n                        this._arrPolylines[lineNr].arrowMarkers.splice(0,1);\n                        var text='';\n                        if (this.options.showBearings === true) {\n                            text = this.options.bearingTextIn+':---°<br>'+this.options.bearingTextOut+':---°';\n                        }\n                        text = text + '<div class=\"polyline-measure-tooltip-difference\">+' + '0</div>';\n                        text = text + '<div class=\"polyline-measure-tooltip-total\">' + '0</div>';\n                        this._arrPolylines[lineNr].tooltips [0]._icon.innerHTML = text;\n                        // if last Circle is being removed\n                    } else if (circleNr === this._arrPolylines[lineNr].circleCoords.length) {\n                        this._arrPolylines[lineNr].circleMarkers [circleNr-1].on ('click', this._resumePolylinePath, this);\n                        this._arrPolylines[lineNr].circleMarkers [circleNr-1].bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete + this.options.tooltipTextResume, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                        this._arrPolylines[lineNr].circleMarkers.slice(-1)[0].setStyle (this.options.endCircle);  // get last element of the array\n                        this._arrPolylines[lineNr].tooltips.slice(-1)[0]._icon.classList.add('polyline-measure-tooltip-end');\n                        lineCoords.splice (-(arcpoints-1), arcpoints-1);\n                        this._arrPolylines[lineNr].arrowMarkers [circleNr-1].removeFrom (this._layerPaint);\n                        this._arrPolylines[lineNr].arrowMarkers.splice(-1,1);\n                        // if intermediate Circle is being removed\n                    } else {\n                        newLineSegment = this._polylineArc (this._arrPolylines[lineNr].circleCoords[circleNr-1], this._arrPolylines[lineNr].circleCoords[circleNr]);\n                        Array.prototype.splice.apply (lineCoords, [(circleNr-1)*(arcpoints-1), (2*arcpoints-1)].concat (newLineSegment));\n                        this._arrPolylines[lineNr].arrowMarkers [circleNr-1].removeFrom (this._layerPaint);\n                        this._arrPolylines[lineNr].arrowMarkers [circleNr].removeFrom (this._layerPaint);\n                        var arrowMarker = this._drawArrow (newLineSegment);\n                        this._arrPolylines[lineNr].arrowMarkers.splice(circleNr-1,2,arrowMarker);\n                    }\n                    this._arrPolylines[lineNr].polylinePath.setLatLngs (lineCoords);\n                    this._arrPolylines[lineNr].arrowMarkers.map (function (item, index) {\n                        item.cntLine = lineNr;\n                        item.cntArrow = index;\n                    });\n                    var totalDistance = 0;\n                    this._arrPolylines[lineNr].tooltips.map (function (item, index) {\n                        if (index >= 1) {\n                            var distance = this._arrPolylines[lineNr].circleCoords[index-1].distanceTo (this._arrPolylines[lineNr].circleCoords[index]);\n                            var lastCircleCoords = this._arrPolylines[lineNr].circleCoords[index - 1];\n                            var mouseCoords = this._arrPolylines[lineNr].circleCoords[index];\n                            totalDistance += distance;\n                            this._arrPolylines[lineNr].distance = totalDistance;\n                            var prevTooltip = this._arrPolylines[lineNr].tooltips[index-1];\n                            this._updateTooltip (item, prevTooltip, totalDistance, distance, lastCircleCoords, mouseCoords);\n                        }\n                    }.bind (this));\n                    // if this is the first line and it's not finished yet\n                } else {\n                    // when you're drawing and deleting point you need to take it into account by decreasing _cntCircle\n                    this._cntCircle--;\n                    // if the last Circle in polyline is being removed\n                    if(this._currentLine.circleMarkers.length === 1) {\n                        this._currentLine.finalize();\n                        return;\n                    }\n\n                    this._currentLine.circleCoords.splice(circleNr,1);\n                    this._currentLine.circleMarkers [circleNr].removeFrom (this._layerPaint);\n                    this._currentLine.circleMarkers.splice(circleNr,1);\n                    this._currentLine.circleMarkers.map (function (item, index) {\n                        item.cntCircle = index;\n                    });\n                    lineCoords = this._currentLine.polylinePath.getLatLngs();\n                    this._currentLine.tooltips [circleNr].removeFrom (this._layerPaint);\n                    this._currentLine.tooltips.splice(circleNr,1);\n\n                    // if first Circle is being removed\n                    if (circleNr === 0) {\n                        if(this._currentLine.circleMarkers.length === 1) {\n                            this._currentLine.circleMarkers [0].setStyle (this.options.currentCircle);\n                        } else {\n                            this._currentLine.circleMarkers [0].setStyle (this.options.startCircle);\n                        }\n                        lineCoords.splice (0, arcpoints-1);\n                        this._currentLine.circleMarkers [0].bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete + this.options.tooltipTextResume, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                        this._currentLine.arrowMarkers [circleNr].removeFrom (this._layerPaint);\n                        this._currentLine.arrowMarkers.splice(0,1);\n                        var text='';\n                        if (this.options.showBearings === true) {\n                            text = this.options.bearingTextIn+':---°<br>'+this.options.bearingTextOut+':---°';\n                        }\n                        text = text + '<div class=\"polyline-measure-tooltip-difference\">+' + '0</div>';\n                        text = text + '<div class=\"polyline-measure-tooltip-total\">' + '0</div>';\n                        this._currentLine.tooltips [0]._icon.innerHTML = text;\n                        // if last Circle is being removed\n                    } else if (circleNr === this._currentLine.circleCoords.length) {\n                        this._currentLine.circleMarkers [circleNr-1].on ('click', this._resumePolylinePath, this);\n                        this._currentLine.circleMarkers [circleNr-1].bindTooltip (this.options.tooltipTextMove + this.options.tooltipTextDelete + this.options.tooltipTextResume, {direction:'top', opacity:0.7, className:'polyline-measure-popupTooltip'});\n                        this._currentLine.circleMarkers.slice(-1)[0].setStyle (this.options.currentCircle);  // get last element of the array\n                        this._currentLine.tooltips.slice(-1)[0]._icon.classList.add('polyline-measure-tooltip-end');\n                        lineCoords.splice (-(arcpoints-1), arcpoints-1);\n                        this._currentLine.arrowMarkers [circleNr-1].removeFrom (this._layerPaint);\n                        this._currentLine.arrowMarkers.splice(-1,1);\n                        // if intermediate Circle is being removed\n                    } else {\n                        newLineSegment = this._polylineArc (this._currentLine.circleCoords[circleNr-1], this._currentLine.circleCoords[circleNr]);\n                        Array.prototype.splice.apply (lineCoords, [(circleNr-1)*(arcpoints-1), (2*arcpoints-1)].concat (newLineSegment));\n                        this._currentLine.arrowMarkers [circleNr-1].removeFrom (this._layerPaint);\n                        this._currentLine.arrowMarkers [circleNr].removeFrom (this._layerPaint);\n                        arrowMarker = this._drawArrow (newLineSegment);\n                        this._currentLine.arrowMarkers.splice(circleNr-1,2,arrowMarker);\n                    }\n                    this._currentLine.polylinePath.setLatLngs (lineCoords);\n                    this._currentLine.arrowMarkers.map (function (item, index) {\n                        item.cntLine = lineNr;\n                        item.cntArrow = index;\n                    });\n                    var totalDistanceUnfinishedLine = 0;\n                    this._currentLine.tooltips.map (function (item, index, arr) {\n                        if (index >= 1) {\n                            var distance, mouseCoords;\n                            var prevTooltip = this._currentLine.tooltips[index-1];\n                            var lastCircleCoords = this._currentLine.circleCoords[index - 1];\n                            if(index === arr.length - 1) {\n                                distance = this._currentLine.circleCoords[index-1].distanceTo (e1.latlng);\n                                mouseCoords = e1.latlng;\n                                // if this is the last Circle (mouse cursor) then don't sum the distance, but update tooltip like it was summed\n                                this._updateTooltip (item, prevTooltip, totalDistanceUnfinishedLine + distance, distance, lastCircleCoords, mouseCoords);\n                            } else {\n                                distance = this._currentLine.circleCoords[index-1].distanceTo (this._currentLine.circleCoords[index]);\n                                mouseCoords = this._currentLine.circleCoords[index];\n                                // if this is not the last Circle (mouse cursor) then sum the distance\n                                totalDistanceUnfinishedLine += distance;\n                                this._updateTooltip (item, prevTooltip, totalDistanceUnfinishedLine, distance, lastCircleCoords, mouseCoords);\n                            }\n                        }\n                    }.bind (this));\n\n                    // update _currentLine distance after point deletion\n                    this._currentLine.distance = totalDistanceUnfinishedLine;\n                }\n\n                this._map.fire('polylinemeasure:remove', e1);\n                return;\n            }\n            this._e1 = e1;\n            if ((this._measuring) && (this._cntCircle === 0)) {    // just execute drag-function if Measuring tool is active but no line is being drawn at the moment.\n                this._map.dragging.disable();  // turn of moving of the map during drag of a circle\n                this._map.off ('mousemove', this._mouseMove, this);\n                this._map.off ('click', this._mouseClick, this);\n                this._mouseStartingLat = e1.latlng.lat;\n                this._mouseStartingLng = e1.latlng.lng;\n                this._circleStartingLat = e1.target._latlng.lat;\n                this._circleStartingLng = e1.target._latlng.lng;\n                this._map.on ('mousemove', this._dragCircleMousemove, this);\n            }\n        }\n    });\n\n//======================================================================================\n\n    L.Map.mergeOptions({\n        PolylineMeasureControl: false\n    });\n\n    L.Map.addInitHook(function () {\n        if (this.options.polylineMeasureControl) {\n            this.PMControl = new L.Control.PolylineMeasure();\n            this.addControl(this.PMControl);\n        }\n    });\n\n    L.control.polylineMeasure = function (options) {\n        return new L.Control.PolylineMeasure (options);\n    };\n\n    return L.Control.PolylineMeasure;\n    // to allow\n    // import PolylineMeasure from 'leaflet.polylinemeasure';\n    // const measureControl = new PolylineMeasure();\n    // together with\n    // import 'leaflet.polylinemeasure';\n    // const measureControl = new L.Control.PolylineMeasure();\n\n}));\n"
  },
  {
    "path": "public/vendor/leaflet/leaflet.editable.js",
    "content": "'use strict';\n(function (factory, window) {\n    /*globals define, module, require*/\n\n    // define an AMD module that relies on 'leaflet'\n    if (typeof define === 'function' && define.amd) {\n        define(['leaflet'], factory);\n\n\n    // define a Common JS module that relies on 'leaflet'\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('leaflet'));\n    }\n\n    // attach your plugin to the global 'L' variable\n    if(typeof window !== 'undefined' && window.L){\n        factory(window.L);\n    }\n\n}(function (L) {\n    // 🍂miniclass CancelableEvent (Event objects)\n    // 🍂method cancel()\n    // Cancel any subsequent action.\n\n    // 🍂miniclass VertexEvent (Event objects)\n    // 🍂property vertex: VertexMarker\n    // The vertex that fires the event.\n\n    // 🍂miniclass ShapeEvent (Event objects)\n    // 🍂property shape: Array\n    // The shape (LatLngs array) subject of the action.\n\n    // 🍂miniclass CancelableVertexEvent (Event objects)\n    // 🍂inherits VertexEvent\n    // 🍂inherits CancelableEvent\n\n    // 🍂miniclass CancelableShapeEvent (Event objects)\n    // 🍂inherits ShapeEvent\n    // 🍂inherits CancelableEvent\n\n    // 🍂miniclass LayerEvent (Event objects)\n    // 🍂property layer: object\n    // The Layer (Marker, Polyline…) subject of the action.\n\n    // 🍂namespace Editable; 🍂class Editable; 🍂aka L.Editable\n    // Main edition handler. By default, it is attached to the map\n    // as `map.editTools` property.\n    // Leaflet.Editable is made to be fully extendable. You have three ways to customize\n    // the behaviour: using options, listening to events, or extending.\n    L.Editable = L.Evented.extend({\n\n        statics: {\n            FORWARD: 1,\n            BACKWARD: -1\n        },\n\n        options: {\n\n            // You can pass them when creating a map using the `editOptions` key.\n            // 🍂option zIndex: int = 1000\n            // The default zIndex of the editing tools.\n            zIndex: 1000,\n\n            // 🍂option polygonClass: class = L.Polygon\n            // Class to be used when creating a new Polygon.\n            polygonClass: L.Polygon,\n\n            // 🍂option polylineClass: class = L.Polyline\n            // Class to be used when creating a new Polyline.\n            polylineClass: L.Polyline,\n\n            // 🍂option markerClass: class = L.Marker\n            // Class to be used when creating a new Marker.\n            markerClass: L.Marker,\n\n            // 🍂option rectangleClass: class = L.Rectangle\n            // Class to be used when creating a new Rectangle.\n            rectangleClass: L.Rectangle,\n\n            // 🍂option circleClass: class = L.Circle\n            // Class to be used when creating a new Circle.\n            circleClass: L.Circle,\n\n            // 🍂option drawingCSSClass: string = 'leaflet-editable-drawing'\n            // CSS class to be added to the map container while drawing.\n            drawingCSSClass: 'leaflet-editable-drawing',\n\n            // 🍂option drawingCursor: const = 'crosshair'\n            // Cursor mode set to the map while drawing.\n            drawingCursor: 'crosshair',\n\n            // 🍂option editLayer: Layer = new L.LayerGroup()\n            // Layer used to store edit tools (vertex, line guide…).\n            editLayer: undefined,\n\n            // 🍂option featuresLayer: Layer = new L.LayerGroup()\n            // Default layer used to store drawn features (Marker, Polyline…).\n            featuresLayer: undefined,\n\n            // 🍂option polylineEditorClass: class = PolylineEditor\n            // Class to be used as Polyline editor.\n            polylineEditorClass: undefined,\n\n            // 🍂option polygonEditorClass: class = PolygonEditor\n            // Class to be used as Polygon editor.\n            polygonEditorClass: undefined,\n\n            // 🍂option markerEditorClass: class = MarkerEditor\n            // Class to be used as Marker editor.\n            markerEditorClass: undefined,\n\n            // 🍂option rectangleEditorClass: class = RectangleEditor\n            // Class to be used as Rectangle editor.\n            rectangleEditorClass: undefined,\n\n            // 🍂option circleEditorClass: class = CircleEditor\n            // Class to be used as Circle editor.\n            circleEditorClass: undefined,\n\n            // 🍂option lineGuideOptions: hash = {}\n            // Options to be passed to the line guides.\n            lineGuideOptions: {},\n\n            // 🍂option skipMiddleMarkers: boolean = false\n            // Set this to true if you don't want middle markers.\n            skipMiddleMarkers: false\n\n        },\n\n        initialize: function (map, options) {\n            L.setOptions(this, options);\n            this._lastZIndex = this.options.zIndex;\n            this.map = map;\n            this.editLayer = this.createEditLayer();\n            this.featuresLayer = this.createFeaturesLayer();\n            this.forwardLineGuide = this.createLineGuide();\n            this.backwardLineGuide = this.createLineGuide();\n        },\n\n        fireAndForward: function (type, e) {\n            e = e || {};\n            e.editTools = this;\n            this.fire(type, e);\n            this.map.fire(type, e);\n        },\n\n        createLineGuide: function () {\n            var options = L.extend({dashArray: '5,10', weight: 1, interactive: false}, this.options.lineGuideOptions);\n            return L.polyline([], options);\n        },\n\n        createVertexIcon: function (options) {\n            return L.Browser.mobile && L.Browser.touch ? new L.Editable.TouchVertexIcon(options) : new L.Editable.VertexIcon(options);\n        },\n\n        createEditLayer: function () {\n            return this.options.editLayer || new L.LayerGroup().addTo(this.map);\n        },\n\n        createFeaturesLayer: function () {\n            return this.options.featuresLayer || new L.LayerGroup().addTo(this.map);\n        },\n\n        moveForwardLineGuide: function (latlng) {\n            if (this.forwardLineGuide._latlngs.length) {\n                this.forwardLineGuide._latlngs[1] = latlng;\n                this.forwardLineGuide._bounds.extend(latlng);\n                this.forwardLineGuide.redraw();\n            }\n        },\n\n        moveBackwardLineGuide: function (latlng) {\n            if (this.backwardLineGuide._latlngs.length) {\n                this.backwardLineGuide._latlngs[1] = latlng;\n                this.backwardLineGuide._bounds.extend(latlng);\n                this.backwardLineGuide.redraw();\n            }\n        },\n\n        anchorForwardLineGuide: function (latlng) {\n            this.forwardLineGuide._latlngs[0] = latlng;\n            this.forwardLineGuide._bounds.extend(latlng);\n            this.forwardLineGuide.redraw();\n        },\n\n        anchorBackwardLineGuide: function (latlng) {\n            this.backwardLineGuide._latlngs[0] = latlng;\n            this.backwardLineGuide._bounds.extend(latlng);\n            this.backwardLineGuide.redraw();\n        },\n\n        attachForwardLineGuide: function () {\n            this.editLayer.addLayer(this.forwardLineGuide);\n        },\n\n        attachBackwardLineGuide: function () {\n            this.editLayer.addLayer(this.backwardLineGuide);\n        },\n\n        detachForwardLineGuide: function () {\n            this.forwardLineGuide.setLatLngs([]);\n            this.editLayer.removeLayer(this.forwardLineGuide);\n        },\n\n        detachBackwardLineGuide: function () {\n            this.backwardLineGuide.setLatLngs([]);\n            this.editLayer.removeLayer(this.backwardLineGuide);\n        },\n\n        blockEvents: function () {\n            // Hack: force map not to listen to other layers events while drawing.\n            if (!this._oldTargets) {\n                this._oldTargets = this.map._targets;\n                this.map._targets = {};\n            }\n        },\n\n        unblockEvents: function () {\n            if (this._oldTargets) {\n                // Reset, but keep targets created while drawing.\n                this.map._targets = L.extend(this.map._targets, this._oldTargets);\n                delete this._oldTargets;\n            }\n        },\n\n        registerForDrawing: function (editor) {\n            if (this._drawingEditor) this.unregisterForDrawing(this._drawingEditor);\n            this.blockEvents();\n            editor.reset();  // Make sure editor tools still receive events.\n            this._drawingEditor = editor;\n            this.map.on('mousemove touchmove', editor.onDrawingMouseMove, editor);\n            this.map.on('mousedown', this.onMousedown, this);\n            this.map.on('mouseup', this.onMouseup, this);\n            L.DomUtil.addClass(this.map._container, this.options.drawingCSSClass);\n            this.defaultMapCursor = this.map._container.style.cursor;\n            this.map._container.style.cursor = this.options.drawingCursor;\n        },\n\n        unregisterForDrawing: function (editor) {\n            this.unblockEvents();\n            L.DomUtil.removeClass(this.map._container, this.options.drawingCSSClass);\n            this.map._container.style.cursor = this.defaultMapCursor;\n            editor = editor || this._drawingEditor;\n            if (!editor) return;\n            this.map.off('mousemove touchmove', editor.onDrawingMouseMove, editor);\n            this.map.off('mousedown', this.onMousedown, this);\n            this.map.off('mouseup', this.onMouseup, this);\n            if (editor !== this._drawingEditor) return;\n            delete this._drawingEditor;\n            if (editor._drawing) editor.cancelDrawing();\n        },\n\n        onMousedown: function (e) {\n            if (e.originalEvent.which != 1) return;\n            this._mouseDown = e;\n            this._drawingEditor.onDrawingMouseDown(e);\n        },\n\n        onMouseup: function (e) {\n            if (this._mouseDown) {\n                var editor = this._drawingEditor,\n                    mouseDown = this._mouseDown;\n                this._mouseDown = null;\n                editor.onDrawingMouseUp(e);\n                if (this._drawingEditor !== editor) return;  // onDrawingMouseUp may call unregisterFromDrawing.\n                var origin = L.point(mouseDown.originalEvent.clientX, mouseDown.originalEvent.clientY);\n                var distance = L.point(e.originalEvent.clientX, e.originalEvent.clientY).distanceTo(origin);\n                if (Math.abs(distance) < 9 * (window.devicePixelRatio || 1)) this._drawingEditor.onDrawingClick(e);\n            }\n        },\n\n        // 🍂section Public methods\n        // You will generally access them by the `map.editTools`\n        // instance:\n        //\n        // `map.editTools.startPolyline();`\n\n        // 🍂method drawing(): boolean\n        // Return true if any drawing action is ongoing.\n        drawing: function () {\n            return this._drawingEditor && this._drawingEditor.drawing();\n        },\n\n        // 🍂method stopDrawing()\n        // When you need to stop any ongoing drawing, without needing to know which editor is active.\n        stopDrawing: function () {\n            this.unregisterForDrawing();\n        },\n\n        // 🍂method commitDrawing()\n        // When you need to commit any ongoing drawing, without needing to know which editor is active.\n        commitDrawing: function (e) {\n            if (!this._drawingEditor) return;\n            this._drawingEditor.commitDrawing(e);\n        },\n\n        connectCreatedToMap: function (layer) {\n            return this.featuresLayer.addLayer(layer);\n        },\n\n        // 🍂method startPolyline(latlng: L.LatLng, options: hash): L.Polyline\n        // Start drawing a Polyline. If `latlng` is given, a first point will be added. In any case, continuing on user click.\n        // If `options` is given, it will be passed to the Polyline class constructor.\n        startPolyline: function (latlng, options) {\n            var line = this.createPolyline([], options);\n            line.enableEdit(this.map).newShape(latlng);\n            return line;\n        },\n\n        // 🍂method startPolygon(latlng: L.LatLng, options: hash): L.Polygon\n        // Start drawing a Polygon. If `latlng` is given, a first point will be added. In any case, continuing on user click.\n        // If `options` is given, it will be passed to the Polygon class constructor.\n        startPolygon: function (latlng, options) {\n            var polygon = this.createPolygon([], options);\n            polygon.enableEdit(this.map).newShape(latlng);\n            return polygon;\n        },\n\n        // 🍂method startMarker(latlng: L.LatLng, options: hash): L.Marker\n        // Start adding a Marker. If `latlng` is given, the Marker will be shown first at this point.\n        // In any case, it will follow the user mouse, and will have a final `latlng` on next click (or touch).\n        // If `options` is given, it will be passed to the Marker class constructor.\n        startMarker: function (latlng, options) {\n            latlng = latlng || this.map.getCenter().clone();\n            var marker = this.createMarker(latlng, options);\n            marker.enableEdit(this.map).startDrawing();\n            return marker;\n        },\n\n        // 🍂method startRectangle(latlng: L.LatLng, options: hash): L.Rectangle\n        // Start drawing a Rectangle. If `latlng` is given, the Rectangle anchor will be added. In any case, continuing on user drag.\n        // If `options` is given, it will be passed to the Rectangle class constructor.\n        startRectangle: function(latlng, options) {\n            var corner = latlng || L.latLng([0, 0]);\n            var bounds = new L.LatLngBounds(corner, corner);\n            var rectangle = this.createRectangle(bounds, options);\n            rectangle.enableEdit(this.map).startDrawing();\n            return rectangle;\n        },\n\n        // 🍂method startCircle(latlng: L.LatLng, options: hash): L.Circle\n        // Start drawing a Circle. If `latlng` is given, the Circle anchor will be added. In any case, continuing on user drag.\n        // If `options` is given, it will be passed to the Circle class constructor.\n        startCircle: function (latlng, options) {\n            latlng = latlng || this.map.getCenter().clone();\n            var circle = this.createCircle(latlng, options);\n            circle.enableEdit(this.map).startDrawing();\n            return circle;\n        },\n\n        startHole: function (editor, latlng) {\n            editor.newHole(latlng);\n        },\n\n        createLayer: function (klass, latlngs, options) {\n            options = L.Util.extend({editOptions: {editTools: this}}, options);\n            var layer = new klass(latlngs, options);\n            // 🍂namespace Editable\n            // 🍂event editable:created: LayerEvent\n            // Fired when a new feature (Marker, Polyline…) is created.\n            this.fireAndForward('editable:created', {layer: layer});\n            return layer;\n        },\n\n        createPolyline: function (latlngs, options) {\n            return this.createLayer(options && options.polylineClass || this.options.polylineClass, latlngs, options);\n        },\n\n        createPolygon: function (latlngs, options) {\n            return this.createLayer(options && options.polygonClass || this.options.polygonClass, latlngs, options);\n        },\n\n        createMarker: function (latlng, options) {\n            return this.createLayer(options && options.markerClass || this.options.markerClass, latlng, options);\n        },\n\n        createRectangle: function (bounds, options) {\n            return this.createLayer(options && options.rectangleClass || this.options.rectangleClass, bounds, options);\n        },\n\n        createCircle: function (latlng, options) {\n            return this.createLayer(options && options.circleClass || this.options.circleClass, latlng, options);\n        }\n\n    });\n\n    L.extend(L.Editable, {\n\n        makeCancellable: function (e) {\n            e.cancel = function () {\n                e._cancelled = true;\n            };\n        }\n\n    });\n\n    // 🍂namespace Map; 🍂class Map\n    // Leaflet.Editable add options and events to the `L.Map` object.\n    // See `Editable` events for the list of events fired on the Map.\n    // 🍂example\n    //\n    // ```js\n    // var map = L.map('map', {\n    //  editable: true,\n    //  editOptions: {\n    //    …\n    // }\n    // });\n    // ```\n    // 🍂section Editable Map Options\n    L.Map.mergeOptions({\n\n        // 🍂namespace Map\n        // 🍂section Map Options\n        // 🍂option editToolsClass: class = L.Editable\n        // Class to be used as vertex, for path editing.\n        editToolsClass: L.Editable,\n\n        // 🍂option editable: boolean = false\n        // Whether to create a L.Editable instance at map init.\n        editable: false,\n\n        // 🍂option editOptions: hash = {}\n        // Options to pass to L.Editable when instantiating.\n        editOptions: {}\n\n    });\n\n    L.Map.addInitHook(function () {\n\n        this.whenReady(function () {\n            if (this.options.editable) {\n                this.editTools = new this.options.editToolsClass(this, this.options.editOptions);\n            }\n        });\n\n    });\n\n    L.Editable.VertexIcon = L.DivIcon.extend({\n\n        options: {\n            iconSize: new L.Point(8, 8)\n        }\n\n    });\n\n    L.Editable.TouchVertexIcon = L.Editable.VertexIcon.extend({\n\n        options: {\n            iconSize: new L.Point(20, 20)\n        }\n\n    });\n\n\n    // 🍂namespace Editable; 🍂class VertexMarker; Handler for dragging path vertices.\n    L.Editable.VertexMarker = L.Marker.extend({\n\n        options: {\n            draggable: true,\n            className: 'leaflet-div-icon leaflet-vertex-icon'\n        },\n\n\n        // 🍂section Public methods\n        // The marker used to handle path vertex. You will usually interact with a `VertexMarker`\n        // instance when listening for events like `editable:vertex:ctrlclick`.\n\n        initialize: function (latlng, latlngs, editor, options) {\n            // We don't use this._latlng, because on drag Leaflet replace it while\n            // we want to keep reference.\n            this.latlng = latlng;\n            this.latlngs = latlngs;\n            this.editor = editor;\n            L.Marker.prototype.initialize.call(this, latlng, options);\n            this.options.icon = this.editor.tools.createVertexIcon({className: this.options.className});\n            this.latlng.__vertex = this;\n            this.editor.editLayer.addLayer(this);\n            this.setZIndexOffset(editor.tools._lastZIndex + 1);\n        },\n\n        onAdd: function (map) {\n            L.Marker.prototype.onAdd.call(this, map);\n            this.on('drag', this.onDrag);\n            this.on('dragstart', this.onDragStart);\n            this.on('dragend', this.onDragEnd);\n            this.on('mouseup', this.onMouseup);\n            this.on('click', this.onClick);\n            this.on('contextmenu', this.onContextMenu);\n            this.on('mousedown touchstart', this.onMouseDown);\n            this.on('mouseover', this.onMouseOver);\n            this.on('mouseout', this.onMouseOut);\n            this.addMiddleMarkers();\n        },\n\n        onRemove: function (map) {\n            if (this.middleMarker) this.middleMarker.delete();\n            delete this.latlng.__vertex;\n            this.off('drag', this.onDrag);\n            this.off('dragstart', this.onDragStart);\n            this.off('dragend', this.onDragEnd);\n            this.off('mouseup', this.onMouseup);\n            this.off('click', this.onClick);\n            this.off('contextmenu', this.onContextMenu);\n            this.off('mousedown touchstart', this.onMouseDown);\n            this.off('mouseover', this.onMouseOver);\n            this.off('mouseout', this.onMouseOut);\n            L.Marker.prototype.onRemove.call(this, map);\n        },\n\n        onDrag: function (e) {\n            e.vertex = this;\n            this.editor.onVertexMarkerDrag(e);\n            var iconPos = L.DomUtil.getPosition(this._icon),\n                latlng = this._map.layerPointToLatLng(iconPos);\n            this.latlng.update(latlng);\n            this._latlng = this.latlng;  // Push back to Leaflet our reference.\n            this.editor.refresh();\n            if (this.middleMarker) this.middleMarker.updateLatLng();\n            var next = this.getNext();\n            if (next && next.middleMarker) next.middleMarker.updateLatLng();\n        },\n\n        onDragStart: function (e) {\n            e.vertex = this;\n            this.editor.onVertexMarkerDragStart(e);\n        },\n\n        onDragEnd: function (e) {\n            e.vertex = this;\n            this.editor.onVertexMarkerDragEnd(e);\n        },\n\n        onClick: function (e) {\n            e.vertex = this;\n            this.editor.onVertexMarkerClick(e);\n        },\n\n        onMouseup: function (e) {\n            L.DomEvent.stop(e);\n            e.vertex = this;\n            this.editor.map.fire('mouseup', e);\n        },\n\n        onContextMenu: function (e) {\n            e.vertex = this;\n            this.editor.onVertexMarkerContextMenu(e);\n        },\n\n        onMouseDown: function (e) {\n            e.vertex = this;\n            this.editor.onVertexMarkerMouseDown(e);\n        },\n\n        onMouseOver: function (e) {\n            e.vertex = this;\n            this.editor.onVertexMarkerMouseOver(e);\n        },\n\n        onMouseOut: function (e) {\n            e.vertex = this;\n            this.editor.onVertexMarkerMouseOut(e);\n        },\n\n        // 🍂method delete()\n        // Delete a vertex and the related LatLng.\n        delete: function () {\n            var next = this.getNext();  // Compute before changing latlng\n            this.latlngs.splice(this.getIndex(), 1);\n            this.editor.editLayer.removeLayer(this);\n            this.editor.onVertexDeleted({latlng: this.latlng, vertex: this});\n            if (!this.latlngs.length) this.editor.deleteShape(this.latlngs);\n            if (next) next.resetMiddleMarker();\n            this.editor.refresh();\n        },\n\n        // 🍂method getIndex(): int\n        // Get the index of the current vertex among others of the same LatLngs group.\n        getIndex: function () {\n            return this.latlngs.indexOf(this.latlng);\n        },\n\n        // 🍂method getLastIndex(): int\n        // Get last vertex index of the LatLngs group of the current vertex.\n        getLastIndex: function () {\n            return this.latlngs.length - 1;\n        },\n\n        // 🍂method getPrevious(): VertexMarker\n        // Get the previous VertexMarker in the same LatLngs group.\n        getPrevious: function () {\n            if (this.latlngs.length < 2) return;\n            var index = this.getIndex(),\n                previousIndex = index - 1;\n            if (index === 0 && this.editor.CLOSED) previousIndex = this.getLastIndex();\n            var previous = this.latlngs[previousIndex];\n            if (previous) return previous.__vertex;\n        },\n\n        // 🍂method getNext(): VertexMarker\n        // Get the next VertexMarker in the same LatLngs group.\n        getNext: function () {\n            if (this.latlngs.length < 2) return;\n            var index = this.getIndex(),\n                nextIndex = index + 1;\n            if (index === this.getLastIndex() && this.editor.CLOSED) nextIndex = 0;\n            var next = this.latlngs[nextIndex];\n            if (next) return next.__vertex;\n        },\n\n        addMiddleMarker: function (previous) {\n            if (!this.editor.hasMiddleMarkers()) return;\n            previous = previous || this.getPrevious();\n            if (previous && !this.middleMarker) this.middleMarker = this.editor.addMiddleMarker(previous, this, this.latlngs, this.editor);\n        },\n\n        addMiddleMarkers: function () {\n            if (!this.editor.hasMiddleMarkers()) return;\n            var previous = this.getPrevious();\n            if (previous) this.addMiddleMarker(previous);\n            var next = this.getNext();\n            if (next) next.resetMiddleMarker();\n        },\n\n        resetMiddleMarker: function () {\n            if (this.middleMarker) this.middleMarker.delete();\n            this.addMiddleMarker();\n        },\n\n        // 🍂method split()\n        // Split the vertex LatLngs group at its index, if possible.\n        split: function () {\n            if (!this.editor.splitShape) return;  // Only for PolylineEditor\n            this.editor.splitShape(this.latlngs, this.getIndex());\n        },\n\n        // 🍂method continue()\n        // Continue the vertex LatLngs from this vertex. Only active for first and last vertices of a Polyline.\n        continue: function () {\n            if (!this.editor.continueBackward) return;  // Only for PolylineEditor\n            var index = this.getIndex();\n            if (index === 0) this.editor.continueBackward(this.latlngs);\n            else if (index === this.getLastIndex()) this.editor.continueForward(this.latlngs);\n        }\n\n    });\n\n    L.Editable.mergeOptions({\n\n        // 🍂namespace Editable\n        // 🍂option vertexMarkerClass: class = VertexMarker\n        // Class to be used as vertex, for path editing.\n        vertexMarkerClass: L.Editable.VertexMarker\n\n    });\n\n    L.Editable.MiddleMarker = L.Marker.extend({\n\n        options: {\n            opacity: 0.5,\n            className: 'leaflet-div-icon leaflet-middle-icon',\n            draggable: true\n        },\n\n        initialize: function (left, right, latlngs, editor, options) {\n            this.left = left;\n            this.right = right;\n            this.editor = editor;\n            this.latlngs = latlngs;\n            L.Marker.prototype.initialize.call(this, this.computeLatLng(), options);\n            this._opacity = this.options.opacity;\n            this.options.icon = this.editor.tools.createVertexIcon({className: this.options.className});\n            this.editor.editLayer.addLayer(this);\n            this.setVisibility();\n        },\n\n        setVisibility: function () {\n            var leftPoint = this._map.latLngToContainerPoint(this.left.latlng),\n                rightPoint = this._map.latLngToContainerPoint(this.right.latlng),\n                size = L.point(this.options.icon.options.iconSize);\n            if (leftPoint.distanceTo(rightPoint) < size.x * 3) this.hide();\n            else this.show();\n        },\n\n        show: function () {\n            this.setOpacity(this._opacity);\n        },\n\n        hide: function () {\n            this.setOpacity(0);\n        },\n\n        updateLatLng: function () {\n            this.setLatLng(this.computeLatLng());\n            this.setVisibility();\n        },\n\n        computeLatLng: function () {\n            var leftPoint = this.editor.map.latLngToContainerPoint(this.left.latlng),\n                rightPoint = this.editor.map.latLngToContainerPoint(this.right.latlng),\n                y = (leftPoint.y + rightPoint.y) / 2,\n                x = (leftPoint.x + rightPoint.x) / 2;\n            return this.editor.map.containerPointToLatLng([x, y]);\n        },\n\n        onAdd: function (map) {\n            L.Marker.prototype.onAdd.call(this, map);\n            L.DomEvent.on(this._icon, 'mousedown touchstart', this.onMouseDown, this);\n            map.on('zoomend', this.setVisibility, this);\n        },\n\n        onRemove: function (map) {\n            delete this.right.middleMarker;\n            L.DomEvent.off(this._icon, 'mousedown touchstart', this.onMouseDown, this);\n            map.off('zoomend', this.setVisibility, this);\n            L.Marker.prototype.onRemove.call(this, map);\n        },\n\n        onMouseDown: function (e) {\n            var iconPos = L.DomUtil.getPosition(this._icon),\n                latlng = this.editor.map.layerPointToLatLng(iconPos);\n            e = {\n                originalEvent: e,\n                latlng: latlng\n            };\n            if (this.options.opacity === 0) return;\n            L.Editable.makeCancellable(e);\n            this.editor.onMiddleMarkerMouseDown(e);\n            if (e._cancelled) return;\n            this.latlngs.splice(this.index(), 0, e.latlng);\n            this.editor.refresh();\n            var icon = this._icon;\n            var marker = this.editor.addVertexMarker(e.latlng, this.latlngs);\n            this.editor.onNewVertex(marker);\n            /* Hack to workaround browser not firing touchend when element is no more on DOM */\n            var parent = marker._icon.parentNode;\n            parent.removeChild(marker._icon);\n            marker._icon = icon;\n            parent.appendChild(marker._icon);\n            marker._initIcon();\n            marker._initInteraction();\n            marker.setOpacity(1);\n            /* End hack */\n            // Transfer ongoing dragging to real marker\n            L.Draggable._dragging = false;\n            marker.dragging._draggable._onDown(e.originalEvent);\n            this.delete();\n        },\n\n        delete: function () {\n            this.editor.editLayer.removeLayer(this);\n        },\n\n        index: function () {\n            return this.latlngs.indexOf(this.right.latlng);\n        }\n\n    });\n\n    L.Editable.mergeOptions({\n\n        // 🍂namespace Editable\n        // 🍂option middleMarkerClass: class = VertexMarker\n        // Class to be used as middle vertex, pulled by the user to create a new point in the middle of a path.\n        middleMarkerClass: L.Editable.MiddleMarker\n\n    });\n\n    // 🍂namespace Editable; 🍂class BaseEditor; 🍂aka L.Editable.BaseEditor\n    // When editing a feature (Marker, Polyline…), an editor is attached to it. This\n    // editor basically knows how to handle the edition.\n    L.Editable.BaseEditor = L.Handler.extend({\n\n        initialize: function (map, feature, options) {\n            L.setOptions(this, options);\n            this.map = map;\n            this.feature = feature;\n            this.feature.editor = this;\n            this.editLayer = new L.LayerGroup();\n            this.tools = this.options.editTools || map.editTools;\n        },\n\n        // 🍂method enable(): this\n        // Set up the drawing tools for the feature to be editable.\n        addHooks: function () {\n            if (this.isConnected()) this.onFeatureAdd();\n            else this.feature.once('add', this.onFeatureAdd, this);\n            this.onEnable();\n            this.feature.on(this._getEvents(), this);\n        },\n\n        // 🍂method disable(): this\n        // Remove the drawing tools for the feature.\n        removeHooks: function () {\n            this.feature.off(this._getEvents(), this);\n            if (this.feature.dragging) this.feature.dragging.disable();\n            this.editLayer.clearLayers();\n            this.tools.editLayer.removeLayer(this.editLayer);\n            this.onDisable();\n            if (this._drawing) this.cancelDrawing();\n        },\n\n        // 🍂method drawing(): boolean\n        // Return true if any drawing action is ongoing with this editor.\n        drawing: function () {\n            return !!this._drawing;\n        },\n\n        reset: function () {},\n\n        onFeatureAdd: function () {\n            this.tools.editLayer.addLayer(this.editLayer);\n            if (this.feature.dragging) this.feature.dragging.enable();\n        },\n\n        hasMiddleMarkers: function () {\n            return !this.options.skipMiddleMarkers && !this.tools.options.skipMiddleMarkers;\n        },\n\n        fireAndForward: function (type, e) {\n            e = e || {};\n            e.layer = this.feature;\n            this.feature.fire(type, e);\n            this.tools.fireAndForward(type, e);\n        },\n\n        onEnable: function () {\n            // 🍂namespace Editable\n            // 🍂event editable:enable: Event\n            // Fired when an existing feature is ready to be edited.\n            this.fireAndForward('editable:enable');\n        },\n\n        onDisable: function () {\n            // 🍂namespace Editable\n            // 🍂event editable:disable: Event\n            // Fired when an existing feature is not ready anymore to be edited.\n            this.fireAndForward('editable:disable');\n        },\n\n        onEditing: function () {\n            // 🍂namespace Editable\n            // 🍂event editable:editing: Event\n            // Fired as soon as any change is made to the feature geometry.\n            this.fireAndForward('editable:editing');\n        },\n\n        onStartDrawing: function () {\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:start: Event\n            // Fired when a feature is to be drawn.\n            this.fireAndForward('editable:drawing:start');\n        },\n\n        onEndDrawing: function () {\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:end: Event\n            // Fired when a feature is not drawn anymore.\n            this.fireAndForward('editable:drawing:end');\n        },\n\n        onCancelDrawing: function () {\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:cancel: Event\n            // Fired when user cancel drawing while a feature is being drawn.\n            this.fireAndForward('editable:drawing:cancel');\n        },\n\n        onCommitDrawing: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:commit: Event\n            // Fired when user finish drawing a feature.\n            this.fireAndForward('editable:drawing:commit', e);\n        },\n\n        onDrawingMouseDown: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:mousedown: Event\n            // Fired when user `mousedown` while drawing.\n            this.fireAndForward('editable:drawing:mousedown', e);\n        },\n\n        onDrawingMouseUp: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:mouseup: Event\n            // Fired when user `mouseup` while drawing.\n            this.fireAndForward('editable:drawing:mouseup', e);\n        },\n\n        startDrawing: function () {\n            if (!this._drawing) this._drawing = L.Editable.FORWARD;\n            this.tools.registerForDrawing(this);\n            this.onStartDrawing();\n        },\n\n        commitDrawing: function (e) {\n            this.onCommitDrawing(e);\n            this.endDrawing();\n        },\n\n        cancelDrawing: function () {\n            // If called during a vertex drag, the vertex will be removed before\n            // the mouseup fires on it. This is a workaround. Maybe better fix is\n            // To have L.Draggable reset it's status on disable (Leaflet side).\n            L.Draggable._dragging = false;\n            this.onCancelDrawing();\n            this.endDrawing();\n        },\n\n        endDrawing: function () {\n            this._drawing = false;\n            this.tools.unregisterForDrawing(this);\n            this.onEndDrawing();\n        },\n\n        onDrawingClick: function (e) {\n            if (!this.drawing()) return;\n            L.Editable.makeCancellable(e);\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:click: CancelableEvent\n            // Fired when user `click` while drawing, before any internal action is being processed.\n            this.fireAndForward('editable:drawing:click', e);\n            if (e._cancelled) return;\n            if (!this.isConnected()) this.connect(e);\n            this.processDrawingClick(e);\n        },\n\n        isConnected: function () {\n            return this.map.hasLayer(this.feature);\n        },\n\n        connect: function () {\n            this.tools.connectCreatedToMap(this.feature);\n            this.tools.editLayer.addLayer(this.editLayer);\n        },\n\n        onMove: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:move: Event\n            // Fired when `move` mouse while drawing, while dragging a marker, and while dragging a vertex.\n            this.fireAndForward('editable:drawing:move', e);\n        },\n\n        onDrawingMouseMove: function (e) {\n            this.onMove(e);\n        },\n\n        _getEvents: function () {\n            return {\n                dragstart: this.onDragStart,\n                drag: this.onDrag,\n                dragend: this.onDragEnd,\n                remove: this.disable\n            };\n        },\n\n        onDragStart: function (e) {\n            this.onEditing();\n            // 🍂namespace Editable\n            // 🍂event editable:dragstart: Event\n            // Fired before a path feature is dragged.\n            this.fireAndForward('editable:dragstart', e);\n        },\n\n        onDrag: function (e) {\n            this.onMove(e);\n            // 🍂namespace Editable\n            // 🍂event editable:drag: Event\n            // Fired when a path feature is being dragged.\n            this.fireAndForward('editable:drag', e);\n        },\n\n        onDragEnd: function (e) {\n            // 🍂namespace Editable\n            // 🍂event editable:dragend: Event\n            // Fired after a path feature has been dragged.\n            this.fireAndForward('editable:dragend', e);\n        }\n\n    });\n\n    // 🍂namespace Editable; 🍂class MarkerEditor; 🍂aka L.Editable.MarkerEditor\n    // 🍂inherits BaseEditor\n    // Editor for Marker.\n    L.Editable.MarkerEditor = L.Editable.BaseEditor.extend({\n\n        onDrawingMouseMove: function (e) {\n            L.Editable.BaseEditor.prototype.onDrawingMouseMove.call(this, e);\n            if (this._drawing) this.feature.setLatLng(e.latlng);\n        },\n\n        processDrawingClick: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Drawing events\n            // 🍂event editable:drawing:clicked: Event\n            // Fired when user `click` while drawing, after all internal actions.\n            this.fireAndForward('editable:drawing:clicked', e);\n            this.commitDrawing(e);\n        },\n\n        connect: function (e) {\n            // On touch, the latlng has not been updated because there is\n            // no mousemove.\n            if (e) this.feature._latlng = e.latlng;\n            L.Editable.BaseEditor.prototype.connect.call(this, e);\n        }\n\n    });\n\n    // 🍂namespace Editable; 🍂class PathEditor; 🍂aka L.Editable.PathEditor\n    // 🍂inherits BaseEditor\n    // Base class for all path editors.\n    L.Editable.PathEditor = L.Editable.BaseEditor.extend({\n\n        CLOSED: false,\n        MIN_VERTEX: 2,\n\n        addHooks: function () {\n            L.Editable.BaseEditor.prototype.addHooks.call(this);\n            if (this.feature) this.initVertexMarkers();\n            return this;\n        },\n\n        initVertexMarkers: function (latlngs) {\n            if (!this.enabled()) return;\n            latlngs = latlngs || this.getLatLngs();\n            if (isFlat(latlngs)) this.addVertexMarkers(latlngs);\n            else for (var i = 0; i < latlngs.length; i++) this.initVertexMarkers(latlngs[i]);\n        },\n\n        getLatLngs: function () {\n            return this.feature.getLatLngs();\n        },\n\n        // 🍂method reset()\n        // Rebuild edit elements (Vertex, MiddleMarker, etc.).\n        reset: function () {\n            this.editLayer.clearLayers();\n            this.initVertexMarkers();\n        },\n\n        addVertexMarker: function (latlng, latlngs) {\n            return new this.tools.options.vertexMarkerClass(latlng, latlngs, this);\n        },\n\n        onNewVertex: function (vertex) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:new: VertexEvent\n            // Fired when a new vertex is created.\n            this.fireAndForward('editable:vertex:new', {latlng: vertex.latlng, vertex: vertex});\n        },\n\n        addVertexMarkers: function (latlngs) {\n            for (var i = 0; i < latlngs.length; i++) {\n                this.addVertexMarker(latlngs[i], latlngs);\n            }\n        },\n\n        refreshVertexMarkers: function (latlngs) {\n            latlngs = latlngs || this.getDefaultLatLngs();\n            for (var i = 0; i < latlngs.length; i++) {\n                latlngs[i].__vertex.update();\n            }\n        },\n\n        addMiddleMarker: function (left, right, latlngs) {\n            return new this.tools.options.middleMarkerClass(left, right, latlngs, this);\n        },\n\n        onVertexMarkerClick: function (e) {\n            L.Editable.makeCancellable(e);\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:click: CancelableVertexEvent\n            // Fired when a `click` is issued on a vertex, before any internal action is being processed.\n            this.fireAndForward('editable:vertex:click', e);\n            if (e._cancelled) return;\n            if (this.tools.drawing() && this.tools._drawingEditor !== this) return;\n            var index = e.vertex.getIndex(), commit;\n            if (e.originalEvent.ctrlKey) {\n                this.onVertexMarkerCtrlClick(e);\n            } else if (e.originalEvent.altKey) {\n                this.onVertexMarkerAltClick(e);\n            } else if (e.originalEvent.shiftKey) {\n                this.onVertexMarkerShiftClick(e);\n            } else if (e.originalEvent.metaKey) {\n                this.onVertexMarkerMetaKeyClick(e);\n            } else if (index === e.vertex.getLastIndex() && this._drawing === L.Editable.FORWARD) {\n                if (index >= this.MIN_VERTEX - 1) commit = true;\n            } else if (index === 0 && this._drawing === L.Editable.BACKWARD && this._drawnLatLngs.length >= this.MIN_VERTEX) {\n                commit = true;\n            } else if (index === 0 && this._drawing === L.Editable.FORWARD && this._drawnLatLngs.length >= this.MIN_VERTEX && this.CLOSED) {\n                commit = true;  // Allow to close on first point also for polygons\n            } else {\n                this.onVertexRawMarkerClick(e);\n            }\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:clicked: VertexEvent\n            // Fired when a `click` is issued on a vertex, after all internal actions.\n            this.fireAndForward('editable:vertex:clicked', e);\n            if (commit) this.commitDrawing(e);\n        },\n\n        onVertexRawMarkerClick: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:rawclick: CancelableVertexEvent\n            // Fired when a `click` is issued on a vertex without any special key and without being in drawing mode.\n            this.fireAndForward('editable:vertex:rawclick', e);\n            if (e._cancelled) return;\n            if (!this.vertexCanBeDeleted(e.vertex)) return;\n            e.vertex.delete();\n        },\n\n        vertexCanBeDeleted: function (vertex) {\n            return vertex.latlngs.length > this.MIN_VERTEX;\n        },\n\n        onVertexDeleted: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:deleted: VertexEvent\n            // Fired after a vertex has been deleted by user.\n            this.fireAndForward('editable:vertex:deleted', e);\n        },\n\n        onVertexMarkerCtrlClick: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:ctrlclick: VertexEvent\n            // Fired when a `click` with `ctrlKey` is issued on a vertex.\n            this.fireAndForward('editable:vertex:ctrlclick', e);\n        },\n\n        onVertexMarkerShiftClick: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:shiftclick: VertexEvent\n            // Fired when a `click` with `shiftKey` is issued on a vertex.\n            this.fireAndForward('editable:vertex:shiftclick', e);\n        },\n\n        onVertexMarkerMetaKeyClick: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:metakeyclick: VertexEvent\n            // Fired when a `click` with `metaKey` is issued on a vertex.\n            this.fireAndForward('editable:vertex:metakeyclick', e);\n        },\n\n        onVertexMarkerAltClick: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:altclick: VertexEvent\n            // Fired when a `click` with `altKey` is issued on a vertex.\n            this.fireAndForward('editable:vertex:altclick', e);\n        },\n\n        onVertexMarkerContextMenu: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:contextmenu: VertexEvent\n            // Fired when a `contextmenu` is issued on a vertex.\n            this.fireAndForward('editable:vertex:contextmenu', e);\n        },\n\n        onVertexMarkerMouseDown: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:mousedown: VertexEvent\n            // Fired when user `mousedown` a vertex.\n            this.fireAndForward('editable:vertex:mousedown', e);\n        },\n\n        onVertexMarkerMouseOver: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:mouseover: VertexEvent\n            // Fired when a user's mouse enters the vertex\n            this.fireAndForward('editable:vertex:mouseover', e);\n        },\n\n        onVertexMarkerMouseOut: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:mouseout: VertexEvent\n            // Fired when a user's mouse leaves the vertex\n            this.fireAndForward('editable:vertex:mouseout', e);\n        },\n\n        onMiddleMarkerMouseDown: function (e) {\n            // 🍂namespace Editable\n            // 🍂section MiddleMarker events\n            // 🍂event editable:middlemarker:mousedown: VertexEvent\n            // Fired when user `mousedown` a middle marker.\n            this.fireAndForward('editable:middlemarker:mousedown', e);\n        },\n\n        onVertexMarkerDrag: function (e) {\n            this.onMove(e);\n            if (this.feature._bounds) this.extendBounds(e);\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:drag: VertexEvent\n            // Fired when a vertex is dragged by user.\n            this.fireAndForward('editable:vertex:drag', e);\n        },\n\n        onVertexMarkerDragStart: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:dragstart: VertexEvent\n            // Fired before a vertex is dragged by user.\n            this.fireAndForward('editable:vertex:dragstart', e);\n        },\n\n        onVertexMarkerDragEnd: function (e) {\n            // 🍂namespace Editable\n            // 🍂section Vertex events\n            // 🍂event editable:vertex:dragend: VertexEvent\n            // Fired after a vertex is dragged by user.\n            this.fireAndForward('editable:vertex:dragend', e);\n        },\n\n        setDrawnLatLngs: function (latlngs) {\n            this._drawnLatLngs = latlngs || this.getDefaultLatLngs();\n        },\n\n        startDrawing: function () {\n            if (!this._drawnLatLngs) this.setDrawnLatLngs();\n            L.Editable.BaseEditor.prototype.startDrawing.call(this);\n        },\n\n        startDrawingForward: function () {\n            this.startDrawing();\n        },\n\n        endDrawing: function () {\n            this.tools.detachForwardLineGuide();\n            this.tools.detachBackwardLineGuide();\n            if (this._drawnLatLngs && this._drawnLatLngs.length < this.MIN_VERTEX) this.deleteShape(this._drawnLatLngs);\n            L.Editable.BaseEditor.prototype.endDrawing.call(this);\n            delete this._drawnLatLngs;\n        },\n\n        addLatLng: function (latlng) {\n            if (this._drawing === L.Editable.FORWARD) this._drawnLatLngs.push(latlng);\n            else this._drawnLatLngs.unshift(latlng);\n            this.feature._bounds.extend(latlng);\n            var vertex = this.addVertexMarker(latlng, this._drawnLatLngs);\n            this.onNewVertex(vertex);\n            this.refresh();\n        },\n\n        newPointForward: function (latlng) {\n            this.addLatLng(latlng);\n            this.tools.attachForwardLineGuide();\n            this.tools.anchorForwardLineGuide(latlng);\n        },\n\n        newPointBackward: function (latlng) {\n            this.addLatLng(latlng);\n            this.tools.anchorBackwardLineGuide(latlng);\n        },\n\n        // 🍂namespace PathEditor\n        // 🍂method push()\n        // Programmatically add a point while drawing.\n        push: function (latlng) {\n            if (!latlng) return console.error('L.Editable.PathEditor.push expect a valid latlng as parameter');\n            if (this._drawing === L.Editable.FORWARD) this.newPointForward(latlng);\n            else this.newPointBackward(latlng);\n        },\n\n        removeLatLng: function (latlng) {\n            latlng.__vertex.delete();\n            this.refresh();\n        },\n\n        // 🍂method pop(): L.LatLng or null\n        // Programmatically remove last point (if any) while drawing.\n        pop: function () {\n            if (this._drawnLatLngs.length <= 1) return;\n            var latlng;\n            if (this._drawing === L.Editable.FORWARD) latlng = this._drawnLatLngs[this._drawnLatLngs.length - 1];\n            else latlng = this._drawnLatLngs[0];\n            this.removeLatLng(latlng);\n            if (this._drawing === L.Editable.FORWARD) this.tools.anchorForwardLineGuide(this._drawnLatLngs[this._drawnLatLngs.length - 1]);\n            else this.tools.anchorForwardLineGuide(this._drawnLatLngs[0]);\n            return latlng;\n        },\n\n        processDrawingClick: function (e) {\n            if (e.vertex && e.vertex.editor === this) return;\n            if (this._drawing === L.Editable.FORWARD) this.newPointForward(e.latlng);\n            else this.newPointBackward(e.latlng);\n            this.fireAndForward('editable:drawing:clicked', e);\n        },\n\n        onDrawingMouseMove: function (e) {\n            L.Editable.BaseEditor.prototype.onDrawingMouseMove.call(this, e);\n            if (this._drawing) {\n                this.tools.moveForwardLineGuide(e.latlng);\n                this.tools.moveBackwardLineGuide(e.latlng);\n            }\n        },\n\n        refresh: function () {\n            this.feature.redraw();\n            this.onEditing();\n        },\n\n        // 🍂namespace PathEditor\n        // 🍂method newShape(latlng?: L.LatLng)\n        // Add a new shape (Polyline, Polygon) in a multi, and setup up drawing tools to draw it;\n        // if optional `latlng` is given, start a path at this point.\n        newShape: function (latlng) {\n            var shape = this.addNewEmptyShape();\n            if (!shape) return;\n            this.setDrawnLatLngs(shape[0] || shape);  // Polygon or polyline\n            this.startDrawingForward();\n            // 🍂namespace Editable\n            // 🍂section Shape events\n            // 🍂event editable:shape:new: ShapeEvent\n            // Fired when a new shape is created in a multi (Polygon or Polyline).\n            this.fireAndForward('editable:shape:new', {shape: shape});\n            if (latlng) this.newPointForward(latlng);\n        },\n\n        deleteShape: function (shape, latlngs) {\n            var e = {shape: shape};\n            L.Editable.makeCancellable(e);\n            // 🍂namespace Editable\n            // 🍂section Shape events\n            // 🍂event editable:shape:delete: CancelableShapeEvent\n            // Fired before a new shape is deleted in a multi (Polygon or Polyline).\n            this.fireAndForward('editable:shape:delete', e);\n            if (e._cancelled) return;\n            shape = this._deleteShape(shape, latlngs);\n            if (this.ensureNotFlat) this.ensureNotFlat();  // Polygon.\n            this.feature.setLatLngs(this.getLatLngs());  // Force bounds reset.\n            this.refresh();\n            this.reset();\n            // 🍂namespace Editable\n            // 🍂section Shape events\n            // 🍂event editable:shape:deleted: ShapeEvent\n            // Fired after a new shape is deleted in a multi (Polygon or Polyline).\n            this.fireAndForward('editable:shape:deleted', {shape: shape});\n            return shape;\n        },\n\n        _deleteShape: function (shape, latlngs) {\n            latlngs = latlngs || this.getLatLngs();\n            if (!latlngs.length) return;\n            var self = this,\n                inplaceDelete = function (latlngs, shape) {\n                    // Called when deleting a flat latlngs\n                    shape = latlngs.splice(0, Number.MAX_VALUE);\n                    return shape;\n                },\n                spliceDelete = function (latlngs, shape) {\n                    // Called when removing a latlngs inside an array\n                    latlngs.splice(latlngs.indexOf(shape), 1);\n                    if (!latlngs.length) self._deleteShape(latlngs);\n                    return shape;\n                };\n            if (latlngs === shape) return inplaceDelete(latlngs, shape);\n            for (var i = 0; i < latlngs.length; i++) {\n                if (latlngs[i] === shape) return spliceDelete(latlngs, shape);\n                else if (latlngs[i].indexOf(shape) !== -1) return spliceDelete(latlngs[i], shape);\n            }\n        },\n\n        // 🍂namespace PathEditor\n        // 🍂method deleteShapeAt(latlng: L.LatLng): Array\n        // Remove a path shape at the given `latlng`.\n        deleteShapeAt: function (latlng) {\n            var shape = this.feature.shapeAt(latlng);\n            if (shape) return this.deleteShape(shape);\n        },\n\n        // 🍂method appendShape(shape: Array)\n        // Append a new shape to the Polygon or Polyline.\n        appendShape: function (shape) {\n            this.insertShape(shape);\n        },\n\n        // 🍂method prependShape(shape: Array)\n        // Prepend a new shape to the Polygon or Polyline.\n        prependShape: function (shape) {\n            this.insertShape(shape, 0);\n        },\n\n        // 🍂method insertShape(shape: Array, index: int)\n        // Insert a new shape to the Polygon or Polyline at given index (default is to append).\n        insertShape: function (shape, index) {\n            this.ensureMulti();\n            shape = this.formatShape(shape);\n            if (typeof index === 'undefined') index = this.feature._latlngs.length;\n            this.feature._latlngs.splice(index, 0, shape);\n            this.feature.redraw();\n            if (this._enabled) this.reset();\n        },\n\n        extendBounds: function (e) {\n            this.feature._bounds.extend(e.vertex.latlng);\n        },\n\n        onDragStart: function (e) {\n            this.editLayer.clearLayers();\n            L.Editable.BaseEditor.prototype.onDragStart.call(this, e);\n        },\n\n        onDragEnd: function (e) {\n            this.initVertexMarkers();\n            L.Editable.BaseEditor.prototype.onDragEnd.call(this, e);\n        }\n\n    });\n\n    // 🍂namespace Editable; 🍂class PolylineEditor; 🍂aka L.Editable.PolylineEditor\n    // 🍂inherits PathEditor\n    L.Editable.PolylineEditor = L.Editable.PathEditor.extend({\n\n        startDrawingBackward: function () {\n            this._drawing = L.Editable.BACKWARD;\n            this.startDrawing();\n        },\n\n        // 🍂method continueBackward(latlngs?: Array)\n        // Set up drawing tools to continue the line backward.\n        continueBackward: function (latlngs) {\n            if (this.drawing()) return;\n            latlngs = latlngs || this.getDefaultLatLngs();\n            this.setDrawnLatLngs(latlngs);\n            if (latlngs.length > 0) {\n                this.tools.attachBackwardLineGuide();\n                this.tools.anchorBackwardLineGuide(latlngs[0]);\n            }\n            this.startDrawingBackward();\n        },\n\n        // 🍂method continueForward(latlngs?: Array)\n        // Set up drawing tools to continue the line forward.\n        continueForward: function (latlngs) {\n            if (this.drawing()) return;\n            latlngs = latlngs || this.getDefaultLatLngs();\n            this.setDrawnLatLngs(latlngs);\n            if (latlngs.length > 0) {\n                this.tools.attachForwardLineGuide();\n                this.tools.anchorForwardLineGuide(latlngs[latlngs.length - 1]);\n            }\n            this.startDrawingForward();\n        },\n\n        getDefaultLatLngs: function (latlngs) {\n            latlngs = latlngs || this.feature._latlngs;\n            if (!latlngs.length || latlngs[0] instanceof L.LatLng) return latlngs;\n            else return this.getDefaultLatLngs(latlngs[0]);\n        },\n\n        ensureMulti: function () {\n            if (this.feature._latlngs.length && isFlat(this.feature._latlngs)) {\n                this.feature._latlngs = [this.feature._latlngs];\n            }\n        },\n\n        addNewEmptyShape: function () {\n            if (this.feature._latlngs.length) {\n                var shape = [];\n                this.appendShape(shape);\n                return shape;\n            } else {\n                return this.feature._latlngs;\n            }\n        },\n\n        formatShape: function (shape) {\n            if (isFlat(shape)) return shape;\n            else if (shape[0]) return this.formatShape(shape[0]);\n        },\n\n        // 🍂method splitShape(latlngs?: Array, index: int)\n        // Split the given `latlngs` shape at index `index` and integrate new shape in instance `latlngs`.\n        splitShape: function (shape, index) {\n            if (!index || index >= shape.length - 1) return;\n            this.ensureMulti();\n            var shapeIndex = this.feature._latlngs.indexOf(shape);\n            if (shapeIndex === -1) return;\n            var first = shape.slice(0, index + 1),\n                second = shape.slice(index);\n            // We deal with reference, we don't want twice the same latlng around.\n            second[0] = L.latLng(second[0].lat, second[0].lng, second[0].alt);\n            this.feature._latlngs.splice(shapeIndex, 1, first, second);\n            this.refresh();\n            this.reset();\n        }\n\n    });\n\n    // 🍂namespace Editable; 🍂class PolygonEditor; 🍂aka L.Editable.PolygonEditor\n    // 🍂inherits PathEditor\n    L.Editable.PolygonEditor = L.Editable.PathEditor.extend({\n\n        CLOSED: true,\n        MIN_VERTEX: 3,\n\n        newPointForward: function (latlng) {\n            L.Editable.PathEditor.prototype.newPointForward.call(this, latlng);\n            if (!this.tools.backwardLineGuide._latlngs.length) this.tools.anchorBackwardLineGuide(latlng);\n            if (this._drawnLatLngs.length === 2) this.tools.attachBackwardLineGuide();\n        },\n\n        addNewEmptyHole: function (latlng) {\n            this.ensureNotFlat();\n            var latlngs = this.feature.shapeAt(latlng);\n            if (!latlngs) return;\n            var holes = [];\n            latlngs.push(holes);\n            return holes;\n        },\n\n        // 🍂method newHole(latlng?: L.LatLng, index: int)\n        // Set up drawing tools for creating a new hole on the Polygon. If the `latlng` param is given, a first point is created.\n        newHole: function (latlng) {\n            var holes = this.addNewEmptyHole(latlng);\n            if (!holes) return;\n            this.setDrawnLatLngs(holes);\n            this.startDrawingForward();\n            if (latlng) this.newPointForward(latlng);\n        },\n\n        addNewEmptyShape: function () {\n            if (this.feature._latlngs.length && this.feature._latlngs[0].length) {\n                var shape = [];\n                this.appendShape(shape);\n                return shape;\n            } else {\n                return this.feature._latlngs;\n            }\n        },\n\n        ensureMulti: function () {\n            if (this.feature._latlngs.length && isFlat(this.feature._latlngs[0])) {\n                this.feature._latlngs = [this.feature._latlngs];\n            }\n        },\n\n        ensureNotFlat: function () {\n            if (!this.feature._latlngs.length || isFlat(this.feature._latlngs)) this.feature._latlngs = [this.feature._latlngs];\n        },\n\n        vertexCanBeDeleted: function (vertex) {\n            var parent = this.feature.parentShape(vertex.latlngs),\n                idx = L.Util.indexOf(parent, vertex.latlngs);\n            if (idx > 0) return true;  // Holes can be totally deleted without removing the layer itself.\n            return L.Editable.PathEditor.prototype.vertexCanBeDeleted.call(this, vertex);\n        },\n\n        getDefaultLatLngs: function () {\n            if (!this.feature._latlngs.length) this.feature._latlngs.push([]);\n            return this.feature._latlngs[0];\n        },\n\n        formatShape: function (shape) {\n            // [[1, 2], [3, 4]] => must be nested\n            // [] => must be nested\n            // [[]] => is already nested\n            if (isFlat(shape) && (!shape[0] || shape[0].length !== 0)) return [shape];\n            else return shape;\n        }\n\n    });\n\n    // 🍂namespace Editable; 🍂class RectangleEditor; 🍂aka L.Editable.RectangleEditor\n    // 🍂inherits PathEditor\n    L.Editable.RectangleEditor = L.Editable.PathEditor.extend({\n\n        CLOSED: true,\n        MIN_VERTEX: 4,\n\n        options: {\n            skipMiddleMarkers: true\n        },\n\n        extendBounds: function (e) {\n            var index = e.vertex.getIndex(),\n                next = e.vertex.getNext(),\n                previous = e.vertex.getPrevious(),\n                oppositeIndex = (index + 2) % 4,\n                opposite = e.vertex.latlngs[oppositeIndex],\n                bounds = new L.LatLngBounds(e.latlng, opposite);\n            // Update latlngs by hand to preserve order.\n            previous.latlng.update([e.latlng.lat, opposite.lng]);\n            next.latlng.update([opposite.lat, e.latlng.lng]);\n            this.updateBounds(bounds);\n            this.refreshVertexMarkers();\n        },\n\n        onDrawingMouseDown: function (e) {\n            L.Editable.PathEditor.prototype.onDrawingMouseDown.call(this, e);\n            this.connect();\n            var latlngs = this.getDefaultLatLngs();\n            // L.Polygon._convertLatLngs removes last latlng if it equals first point,\n            // which is the case here as all latlngs are [0, 0]\n            if (latlngs.length === 3) latlngs.push(e.latlng);\n            var bounds = new L.LatLngBounds(e.latlng, e.latlng);\n            this.updateBounds(bounds);\n            this.updateLatLngs(bounds);\n            this.refresh();\n            this.reset();\n            // Stop dragging map.\n            // L.Draggable has two workflows:\n            // - mousedown => mousemove => mouseup\n            // - touchstart => touchmove => touchend\n            // Problem: L.Map.Tap does not allow us to listen to touchstart, so we only\n            // can deal with mousedown, but then when in a touch device, we are dealing with\n            // simulated events (actually simulated by L.Map.Tap), which are no more taken\n            // into account by L.Draggable.\n            // Ref.: https://github.com/Leaflet/Leaflet.Editable/issues/103\n            e.originalEvent._simulated = false;\n            this.map.dragging._draggable._onUp(e.originalEvent);\n            // Now transfer ongoing drag action to the bottom right corner.\n            // Should we refine which corner will handle the drag according to\n            // drag direction?\n            latlngs[3].__vertex.dragging._draggable._onDown(e.originalEvent);\n        },\n\n        onDrawingMouseUp: function (e) {\n            this.commitDrawing(e);\n            e.originalEvent._simulated = false;\n            L.Editable.PathEditor.prototype.onDrawingMouseUp.call(this, e);\n        },\n\n        onDrawingMouseMove: function (e) {\n            e.originalEvent._simulated = false;\n            L.Editable.PathEditor.prototype.onDrawingMouseMove.call(this, e);\n        },\n\n\n        getDefaultLatLngs: function (latlngs) {\n            return latlngs || this.feature._latlngs[0];\n        },\n\n        updateBounds: function (bounds) {\n            this.feature._bounds = bounds;\n        },\n\n        updateLatLngs: function (bounds) {\n            var latlngs = this.getDefaultLatLngs(),\n                newLatlngs = this.feature._boundsToLatLngs(bounds);\n            // Keep references.\n            for (var i = 0; i < latlngs.length; i++) {\n                latlngs[i].update(newLatlngs[i]);\n            }\n        }\n\n    });\n\n    // 🍂namespace Editable; 🍂class CircleEditor; 🍂aka L.Editable.CircleEditor\n    // 🍂inherits PathEditor\n    L.Editable.CircleEditor = L.Editable.PathEditor.extend({\n\n        MIN_VERTEX: 2,\n\n        options: {\n            skipMiddleMarkers: true\n        },\n\n        initialize: function (map, feature, options) {\n            L.Editable.PathEditor.prototype.initialize.call(this, map, feature, options);\n            this._resizeLatLng = this.computeResizeLatLng();\n        },\n\n        computeResizeLatLng: function () {\n            // While circle is not added to the map, _radius is not set.\n            var delta = (this.feature._radius || this.feature._mRadius) * Math.cos(Math.PI / 4),\n                point = this.map.project(this.feature._latlng);\n            return this.map.unproject([point.x + delta, point.y - delta]);\n        },\n\n        updateResizeLatLng: function () {\n            this._resizeLatLng.update(this.computeResizeLatLng());\n            this._resizeLatLng.__vertex.update();\n        },\n\n        getLatLngs: function () {\n            return [this.feature._latlng, this._resizeLatLng];\n        },\n\n        getDefaultLatLngs: function () {\n            return this.getLatLngs();\n        },\n\n        onVertexMarkerDrag: function (e) {\n            if (e.vertex.getIndex() === 1) this.resize(e);\n            else this.updateResizeLatLng(e);\n            L.Editable.PathEditor.prototype.onVertexMarkerDrag.call(this, e);\n        },\n\n        resize: function (e) {\n            var radius = this.feature._latlng.distanceTo(e.latlng);\n            this.feature.setRadius(radius);\n        },\n\n        onDrawingMouseDown: function (e) {\n            L.Editable.PathEditor.prototype.onDrawingMouseDown.call(this, e);\n            this._resizeLatLng.update(e.latlng);\n            this.feature._latlng.update(e.latlng);\n            this.connect();\n            // Stop dragging map.\n            e.originalEvent._simulated = false;\n            this.map.dragging._draggable._onUp(e.originalEvent);\n            // Now transfer ongoing drag action to the radius handler.\n            this._resizeLatLng.__vertex.dragging._draggable._onDown(e.originalEvent);\n        },\n\n        onDrawingMouseUp: function (e) {\n            this.commitDrawing(e);\n            e.originalEvent._simulated = false;\n            L.Editable.PathEditor.prototype.onDrawingMouseUp.call(this, e);\n        },\n\n        onDrawingMouseMove: function (e) {\n            e.originalEvent._simulated = false;\n            L.Editable.PathEditor.prototype.onDrawingMouseMove.call(this, e);\n        },\n\n        onDrag: function (e) {\n            L.Editable.PathEditor.prototype.onDrag.call(this, e);\n            this.feature.dragging.updateLatLng(this._resizeLatLng);\n        }\n\n    });\n\n    // 🍂namespace Editable; 🍂class EditableMixin\n    // `EditableMixin` is included to `L.Polyline`, `L.Polygon`, `L.Rectangle`, `L.Circle`\n    // and `L.Marker`. It adds some methods to them.\n    // *When editing is enabled, the editor is accessible on the instance with the\n    // `editor` property.*\n    var EditableMixin = {\n\n        createEditor: function (map) {\n            map = map || this._map;\n            var tools = (this.options.editOptions || {}).editTools || map.editTools;\n            if (!tools) throw Error('Unable to detect Editable instance.');\n            var Klass = this.options.editorClass || this.getEditorClass(tools);\n            return new Klass(map, this, this.options.editOptions);\n        },\n\n        // 🍂method enableEdit(map?: L.Map): this.editor\n        // Enable editing, by creating an editor if not existing, and then calling `enable` on it.\n        enableEdit: function (map) {\n            if (!this.editor) this.createEditor(map);\n            this.editor.enable();\n            return this.editor;\n        },\n\n        // 🍂method editEnabled(): boolean\n        // Return true if current instance has an editor attached, and this editor is enabled.\n        editEnabled: function () {\n            return this.editor && this.editor.enabled();\n        },\n\n        // 🍂method disableEdit()\n        // Disable editing, also remove the editor property reference.\n        disableEdit: function () {\n            if (this.editor) {\n                this.editor.disable();\n                delete this.editor;\n            }\n        },\n\n        // 🍂method toggleEdit()\n        // Enable or disable editing, according to current status.\n        toggleEdit: function () {\n            if (this.editEnabled()) this.disableEdit();\n            else this.enableEdit();\n        },\n\n        _onEditableAdd: function () {\n            if (this.editor) this.enableEdit();\n        }\n\n    };\n\n    var PolylineMixin = {\n\n        getEditorClass: function (tools) {\n            return (tools && tools.options.polylineEditorClass) ? tools.options.polylineEditorClass : L.Editable.PolylineEditor;\n        },\n\n        shapeAt: function (latlng, latlngs) {\n            // We can have those cases:\n            // - latlngs are just a flat array of latlngs, use this\n            // - latlngs is an array of arrays of latlngs, loop over\n            var shape = null;\n            latlngs = latlngs || this._latlngs;\n            if (!latlngs.length) return shape;\n            else if (isFlat(latlngs) && this.isInLatLngs(latlng, latlngs)) shape = latlngs;\n            else for (var i = 0; i < latlngs.length; i++) if (this.isInLatLngs(latlng, latlngs[i])) return latlngs[i];\n            return shape;\n        },\n\n        isInLatLngs: function (l, latlngs) {\n            if (!latlngs) return false;\n            var i, k, len, part = [], p,\n                w = this._clickTolerance();\n            this._projectLatlngs(latlngs, part, this._pxBounds);\n            part = part[0];\n            p = this._map.latLngToLayerPoint(l);\n\n            if (!this._pxBounds.contains(p)) { return false; }\n            for (i = 1, len = part.length, k = 0; i < len; k = i++) {\n\n                if (L.LineUtil.pointToSegmentDistance(p, part[k], part[i]) <= w) {\n                    return true;\n                }\n            }\n            return false;\n        }\n\n    };\n\n    var PolygonMixin = {\n\n        getEditorClass: function (tools) {\n            return (tools && tools.options.polygonEditorClass) ? tools.options.polygonEditorClass : L.Editable.PolygonEditor;\n        },\n\n        shapeAt: function (latlng, latlngs) {\n            // We can have those cases:\n            // - latlngs are just a flat array of latlngs, use this\n            // - latlngs is an array of arrays of latlngs, this is a simple polygon (maybe with holes), use the first\n            // - latlngs is an array of arrays of arrays, this is a multi, loop over\n            var shape = null;\n            latlngs = latlngs || this._latlngs;\n            if (!latlngs.length) return shape;\n            else if (isFlat(latlngs) && this.isInLatLngs(latlng, latlngs)) shape = latlngs;\n            else if (isFlat(latlngs[0]) && this.isInLatLngs(latlng, latlngs[0])) shape = latlngs;\n            else for (var i = 0; i < latlngs.length; i++) if (this.isInLatLngs(latlng, latlngs[i][0])) return latlngs[i];\n            return shape;\n        },\n\n        isInLatLngs: function (l, latlngs) {\n            var inside = false, l1, l2, j, k, len2;\n\n            for (j = 0, len2 = latlngs.length, k = len2 - 1; j < len2; k = j++) {\n                l1 = latlngs[j];\n                l2 = latlngs[k];\n\n                if (((l1.lat > l.lat) !== (l2.lat > l.lat)) &&\n                        (l.lng < (l2.lng - l1.lng) * (l.lat - l1.lat) / (l2.lat - l1.lat) + l1.lng)) {\n                    inside = !inside;\n                }\n            }\n\n            return inside;\n        },\n\n        parentShape: function (shape, latlngs) {\n            latlngs = latlngs || this._latlngs;\n            if (!latlngs) return;\n            var idx = L.Util.indexOf(latlngs, shape);\n            if (idx !== -1) return latlngs;\n            for (var i = 0; i < latlngs.length; i++) {\n                idx = L.Util.indexOf(latlngs[i], shape);\n                if (idx !== -1) return latlngs[i];\n            }\n        }\n\n    };\n\n\n    var MarkerMixin = {\n\n        getEditorClass: function (tools) {\n            return (tools && tools.options.markerEditorClass) ? tools.options.markerEditorClass : L.Editable.MarkerEditor;\n        }\n\n    };\n\n    var RectangleMixin = {\n\n        getEditorClass: function (tools) {\n            return (tools && tools.options.rectangleEditorClass) ? tools.options.rectangleEditorClass : L.Editable.RectangleEditor;\n        }\n\n    };\n\n    var CircleMixin = {\n\n        getEditorClass: function (tools) {\n            return (tools && tools.options.circleEditorClass) ? tools.options.circleEditorClass : L.Editable.CircleEditor;\n        }\n\n    };\n\n    var keepEditable = function () {\n        // Make sure you can remove/readd an editable layer.\n        this.on('add', this._onEditableAdd);\n    };\n\n    var isFlat = L.LineUtil.isFlat || L.LineUtil._flat || L.Polyline._flat;  // <=> 1.1 compat.\n\n\n    if (L.Polyline) {\n        L.Polyline.include(EditableMixin);\n        L.Polyline.include(PolylineMixin);\n        L.Polyline.addInitHook(keepEditable);\n    }\n    if (L.Polygon) {\n        L.Polygon.include(EditableMixin);\n        L.Polygon.include(PolygonMixin);\n    }\n    if (L.Marker) {\n        L.Marker.include(EditableMixin);\n        L.Marker.include(MarkerMixin);\n        L.Marker.addInitHook(keepEditable);\n    }\n    if (L.Rectangle) {\n        L.Rectangle.include(EditableMixin);\n        L.Rectangle.include(RectangleMixin);\n    }\n    if (L.Circle) {\n        L.Circle.include(EditableMixin);\n        L.Circle.include(CircleMixin);\n    }\n\n    L.LatLng.prototype.update = function (latlng) {\n        latlng = L.latLng(latlng);\n        this.lat = latlng.lat;\n        this.lng = latlng.lng;\n    }\n\n}, window));\n"
  },
  {
    "path": "public/vendor/leaflet/leaflet.layerstree.css",
    "content": ".leaflet-control-layers-toggle.leaflet-layerstree-named-toggle {\n    margin: 2px 5px;\n    width: auto;\n    height: auto;\n    background-image: none;\n}\n\n.leaflet-layerstree-node {\n}\n\n.leaflet-layerstree-header input{\n    margin-left: 0px;\n}\n\n\n.leaflet-layerstree-header {\n}\n\n.leaflet-layerstree-header-pointer {\n    cursor: pointer;\n}\n\n.leaflet-layerstree-header label {\n    display: inline-block;\n    cursor: pointer;\n}\n\n.leaflet-layerstree-header-label {\n}\n\n.leaflet-layerstree-header-name {\n}\n\n.leaflet-layerstree-header-space {\n}\n\n.leaflet-layerstree-children {\n    padding-left: 10px;\n}\n\n.leaflet-layerstree-children-nopad {\n    padding-left: 0px;\n}\n\n.leaflet-layerstree-closed {\n}\n\n.leaflet-layerstree-opened {\n}\n\n.leaflet-layerstree-hide {\n    display: none;\n}\n\n.leaflet-layerstree-nevershow {\n    display: none;\n}\n\n.leaflet-layerstree-expand-collapse {\n    cursor: pointer;\n}"
  },
  {
    "path": "public/vendor/leaflet/leaflet.layerstree.js",
    "content": "/*\n * Control like L.Control.Layers, but showing layers in a tree.\n * Do not forget to include the css file.\n */\n\n(function(L) {\n    if (typeof L === 'undefined') {\n        throw new Error('Leaflet must be included first');\n    }\n\n    /*\n     * L.Control.Layers.Tree extends L.Control.Layers because it reuses\n     * most of its functionality. Only the HTML creation is different.\n     */\n    L.Control.Layers.Tree = L.Control.Layers.extend({\n        options: {\n            closedSymbol: '+',\n            openedSymbol: '&minus;',\n            spaceSymbol: ' ',\n            selectorBack: false,\n            namedToggle: false,\n            collapseAll: '',\n            expandAll: '',\n            labelIsSelector: 'both',\n        },\n\n        // Class names are error prone texts, so write them once here\n        _initClassesNames: function() {\n            this.cls = {\n                children: 'leaflet-layerstree-children',\n                childrenNopad: 'leaflet-layerstree-children-nopad',\n                hide: 'leaflet-layerstree-hide',\n                closed: 'leaflet-layerstree-closed',\n                opened: 'leaflet-layerstree-opened',\n                space: 'leaflet-layerstree-header-space',\n                pointer: 'leaflet-layerstree-header-pointer',\n                header: 'leaflet-layerstree-header',\n                neverShow: 'leaflet-layerstree-nevershow',\n                node: 'leaflet-layerstree-node',\n                name: 'leaflet-layerstree-header-name',\n                label: 'leaflet-layerstree-header-label',\n                selAllCheckbox: 'leaflet-layerstree-sel-all-checkbox',\n            };\n        },\n\n        initialize: function(baseTree, overlaysTree, options) {\n            this._scrollTop = 0;\n            this._initClassesNames();\n            this._baseTree = null;\n            this._overlaysTree = null;\n            L.Util.setOptions(this, options);\n            L.Control.Layers.prototype.initialize.call(this, null, null, options);\n            this._setTrees(baseTree, overlaysTree);\n        },\n\n        setBaseTree: function(tree) {\n            return this._setTrees(tree);\n        },\n\n        setOverlayTree: function(tree) {\n            return this._setTrees(undefined, tree);\n        },\n\n        addBaseLayer: function(_layer, _name) {\n            throw 'addBaseLayer is disabled';\n        },\n\n        addOverlay: function(_layer, _name) {\n            throw 'addOverlay is disabled';\n        },\n\n        removeLayer: function(_layer) {\n            throw 'removeLayer is disabled';\n        },\n\n        collapse: function() {\n            this._scrollTop = this._sect().scrollTop;\n            return L.Control.Layers.prototype.collapse.call(this);\n        },\n\n        expand: function() {\n            L.Control.Layers.prototype.expand.call(this);\n            this._sect().scrollTop = this._scrollTop;\n        },\n\n        onAdd: function(map) {\n            function changeName(layer) {\n                if (layer._layersTreeName) {\n                    toggle.innerHTML = layer._layersTreeName;\n                }\n            }\n\n            var ret = L.Control.Layers.prototype.onAdd.call(this, map);\n            if (this.options.namedToggle) {\n                var toggle = this._container.getElementsByClassName('leaflet-control-layers-toggle')[0];\n                L.DomUtil.addClass(toggle, 'leaflet-layerstree-named-toggle');\n                // Start with this value...\n                map.eachLayer(function(layer) {changeName(layer);});\n                // ... and change it whenever the baselayer is changed.\n                map.on('baselayerchange', function(e) {changeName(e.layer);}, this);\n            }\n            return ret;\n        },\n\n        // Expands the whole tree (base other overlays)\n        expandTree: function(overlay) {\n            var container = overlay ? this._overlaysList : this._baseLayersList;\n            if (container) {\n                this._applyOnTree(container, false);\n            }\n            return this._localExpand();\n        },\n\n        // Collapses the whole tree (base other overlays)\n        collapseTree: function(overlay) {\n            var container = overlay ? this._overlaysList : this._baseLayersList;\n            if (container) {\n                this._applyOnTree(container, true);\n            }\n            return this._localExpand();\n        },\n\n        // Expands the tree, only to show the selected inputs\n        expandSelected: function(overlay) {\n            function iter(el) {\n                // Function to iterate the whole DOM upwards\n                var p = el.parentElement;\n                if (p) {\n                    if (L.DomUtil.hasClass(p, that.cls.children) &&\n                        !L.DomUtil.hasClass(el, that.cls.childrenNopad)) {\n                        L.DomUtil.removeClass(p, hide);\n                    }\n\n                    if (L.DomUtil.hasClass(p, that.cls.node)) {\n                        var h = p.getElementsByClassName(that.cls.header)[0];\n                        that._applyOnTree(h, false);\n                    }\n                    iter(p);\n                }\n            }\n\n            var that = this;\n            var container = overlay ? this._overlaysList : this._baseLayersList;\n            if (!container) return this;\n            var hide = this.cls.hide;\n            var inputs = this._layerControlInputs || container.getElementsByTagName('input');\n            for (var i = 0; i < inputs.length; i++) {\n                // Loop over every (valid) input.\n                var input = inputs[i];\n                if (this._getLayer && !!this._getLayer(input.layerId).overlay != !!overlay) continue;\n                if (input.checked) {\n                    // Get out of the header,\n                    // to not open the possible (but rare) children\n                    iter(input.parentElement.parentElement.parentElement.parentElement);\n                }\n            }\n            return this._localExpand();\n        },\n\n        // \"private\" methods, not exposed in the API\n        _sect: function() {\n            // to keep compatibility after 1.3 https://github.com/Leaflet/Leaflet/pull/6380\n            return this._section || this._form;\n        },\n\n        _setTrees: function(base, overlays) {\n            var id = 0; // to keep unique id\n            function iterate(tree, output, overlays) {\n                if (tree && tree.layer) {\n                    if (!overlays) {\n                        tree.layer._layersTreeName = tree.name || tree.label;\n                    }\n                    output[id++] = tree.layer;\n                }\n                if (tree && tree.children && tree.children.length) {\n                    tree.children.forEach(function(child) {\n                        iterate(child, output, overlays);\n                    });\n                }\n                return output;\n            }\n\n            // We accept arrays, but convert into an object with children\n            function forArrays(input) {\n                if (Array.isArray(input)) {\n                    return {noShow: true, children: input};\n                } else {\n                    return input;\n                }\n            }\n\n            // Clean everything, and start again.\n            if (this._layerControlInputs) {\n                this._layerControlInputs = [];\n            }\n            for (var i = 0; i < this._layers.length; ++i) {\n                this._layers[i].layer.off('add remove', this._onLayerChange, this);\n            }\n            this._layers = [];\n\n            if (base !== undefined) this._baseTree = forArrays(base);\n            if (overlays !== undefined) this._overlaysTree = forArrays(overlays);\n\n            var bflat = iterate(this._baseTree, {});\n            for (var j in bflat) {\n                this._addLayer(bflat[j], j);\n            }\n\n            var oflat = iterate(this._overlaysTree, {}, true);\n            for (var k in oflat) {\n                this._addLayer(oflat[k], k, true);\n            }\n            return (this._map) ? this._update() : this;\n        },\n\n        // Used to update the vertical scrollbar\n        _localExpand: function() {\n            if (this._map && L.DomUtil.hasClass(this._container, 'leaflet-control-layers-expanded')) {\n                var top = this._sect().scrollTop;\n                this.expand();\n                this._sect().scrollTop = top; // to keep the scroll location\n                this._scrollTop = top;\n            }\n            return this;\n        },\n\n        // collapses or expands the tree in the container.\n        _applyOnTree: function(container, collapse) {\n            var iters = [\n                {cls: this.cls.children, hide: collapse},\n                {cls: this.cls.opened, hide: collapse},\n                {cls: this.cls.closed, hide: !collapse},\n            ];\n            iters.forEach(function(it) {\n                var els = container.getElementsByClassName(it.cls);\n                for (var i = 0; i < els.length; i++) {\n                    var el = els[i];\n                    if (L.DomUtil.hasClass(el, this.cls.childrenNopad)) {\n                        // do nothing\n                    } else if (it.hide) {\n                        L.DomUtil.addClass(el, this.cls.hide);\n                    } else {\n                        L.DomUtil.removeClass(el, this.cls.hide);\n                    }\n                }\n            }, this);\n        },\n\n        // it is called in the original _update, and shouldn't do anything.\n        _addItem: function(_obj) {\n        },\n\n        // overwrite _update function in Control.Layers\n        _update: function() {\n            if (!this._container) { return this; }\n            L.Control.Layers.prototype._update.call(this);\n            this._addTreeLayout(this._baseTree, false);\n            this._addTreeLayout(this._overlaysTree, true);\n            return this._localExpand();\n        },\n\n        // Create the DOM objects for the tree\n        _addTreeLayout: function(tree, overlay) {\n            if (!tree) return;\n            var container = overlay ? this._overlaysList : this._baseLayersList;\n            this._expandCollapseAll(overlay, this.options.collapseAll, this.collapseTree);\n            this._expandCollapseAll(overlay, this.options.expandAll, this.expandTree);\n            this._iterateTreeLayout(tree, container, overlay, [], tree.noShow);\n            if (this._checkDisabledLayers) {\n                // to keep compatibility\n                this._checkDisabledLayers();\n            }\n        },\n\n        // Create the \"Collapse all\" or expand, if needed.\n        _expandCollapseAll: function(overlay, text, fn, ctx) {\n            var container = overlay ? this._overlaysList : this._baseLayersList;\n            ctx = ctx ? ctx : this;\n            if (text) {\n                var o = document.createElement('div');\n                o.className = 'leaflet-layerstree-expand-collapse';\n                container.appendChild(o);\n                o.innerHTML = text;\n                o.tabIndex = 0;\n                L.DomEvent.on(o, 'click keydown', function(e) {\n                    if (e.type !== 'keydown' || e.keyCode === 32) {\n                        o.blur();\n                        fn.call(ctx, overlay);\n                        this._localExpand();\n                    }\n                }, this);\n            }\n        },\n\n        // recursive function to create the DOM children\n        _iterateTreeLayout: function(tree, container, overlay, selAllNodes, noShow) {\n            if (!tree) return;\n            function creator(type, cls, append, innerHTML) {\n                var obj = L.DomUtil.create(type, cls, append);\n                if (innerHTML) obj.innerHTML = innerHTML;\n                return obj;\n            }\n\n            // create the header with it fields\n            var header = creator('div', this.cls.header, container);\n            var sel = creator('span');\n            var entry = creator('span');\n            var closed = creator('span', this.cls.closed, sel, this.options.closedSymbol);\n            var opened = creator('span', this.cls.opened, sel, this.options.openedSymbol);\n            var space = creator('span', this.cls.space, null, this.options.spaceSymbol);\n            if (this.options.selectorBack) {\n                sel.insertBefore(space, closed);\n                header.appendChild(entry);\n                header.appendChild(sel);\n            } else {\n                sel.appendChild(space);\n                header.appendChild(sel);\n                header.appendChild(entry);\n            }\n\n            function updateSelAllCheckbox(ancestor) {\n                var selector = ancestor.querySelector('input[type=checkbox]');\n                var selectedAll = true;\n                var selectedNone = true;\n                var inputs = ancestor.querySelectorAll('input[type=checkbox]');\n                [].forEach.call(inputs, function(inp) { // to work in node for tests\n                    if (inp === selector) {\n                        // ignore\n                    } else if (inp.indeterminate) {\n                        selectedAll = false;\n                        selectedNone = false;\n                    } else if (inp.checked) {\n                        selectedNone = false;\n                    } else if (!inp.checked) {\n                        selectedAll = false;\n                    }\n                });\n                if (selectedAll) {\n                    selector.indeterminate = false;\n                    selector.checked = true;\n                } else if (selectedNone) {\n                    selector.indeterminate = false;\n                    selector.checked = false;\n                } else {\n                    selector.indeterminate = true;\n                    selector.checked = false;\n                }\n            }\n\n            function manageSelectorsAll(input, ctx) {\n                selAllNodes.forEach(function(ancestor) {\n                    L.DomEvent.on(input, 'click', function(_ev) {\n                        updateSelAllCheckbox(ancestor);\n                    }, ctx);\n                }, ctx);\n            }\n\n            var selAll;\n            if (tree.selectAllCheckbox) {\n                selAll = this._createCheckboxElement(false);\n                selAll.className += ' ' + this.cls.selAllCheckbox;\n            }\n\n            var hide = this.cls.hide; // To toggle state\n            // create the children group, with the header event click\n            if (tree.children) {\n                var children = creator('div', this.cls.children, container);\n                var sensible = tree.layer ? sel : header;\n                L.DomUtil.addClass(sensible, this.cls.pointer);\n                sensible.tabIndex = 0;\n                L.DomEvent.on(sensible, 'click keydown', function(e) {\n                    // leaflet internal flag to prevent click propagation and collapsing tree on mobile browsers\n                    if (this._preventClick) {\n                        return;\n                    }\n                    if (e.type === 'keydown' && e.keyCode !== 32) {\n                        return;\n                    }\n                    sensible.blur();\n\n                    if (L.DomUtil.hasClass(opened, hide)) {\n                        // it is not opened, so open it\n                        L.DomUtil.addClass(closed, hide);\n                        L.DomUtil.removeClass(opened, hide);\n                        L.DomUtil.removeClass(children, hide);\n                    } else {\n                        // close it\n                        L.DomUtil.removeClass(closed, hide);\n                        L.DomUtil.addClass(opened, hide);\n                        L.DomUtil.addClass(children, hide);\n                    }\n                    this._localExpand();\n                }, this);\n                if (selAll) {\n                    selAllNodes.splice(0, 0, container);\n                }\n                tree.children.forEach(function(child) {\n                    var node = creator('div', this.cls.node, children);\n                    this._iterateTreeLayout(child, node, overlay, selAllNodes);\n                }, this);\n                if (selAll) {\n                    selAllNodes.splice(0, 1);\n                }\n            } else {\n                // no children, so the selector makes no sense.\n                L.DomUtil.addClass(sel, this.cls.neverShow);\n            }\n\n            // make (or not) the label clickable to toggle the layer\n            var labelType;\n            if (tree.layer) {\n                if ((this.options.labelIsSelector === 'both') || // if option is set to both\n                    (overlay && this.options.labelIsSelector === 'overlay') || // if an overlay layer and options is set to overlay\n                    (!overlay && this.options.labelIsSelector === 'base')) { // if a base layer and option is set to base\n                    labelType = 'label';\n                } else { // if option is set to something else\n                    labelType = 'span';\n                }\n            } else {\n                labelType = 'span';\n            }\n            // create the input and label\n            var label = creator(labelType, this.cls.label, entry);\n            if (tree.layer) {\n                // now create the element like in _addItem\n                var checked = this._map.hasLayer(tree.layer);\n                var input;\n                var radioGroup = overlay ? tree.radioGroup : 'leaflet-base-layers_' + L.Util.stamp(this);\n                if (radioGroup) {\n                    input = this._createRadioElement(radioGroup, checked);\n                } else {\n                    input = this._createCheckboxElement(checked);\n                    manageSelectorsAll(input, this);\n                }\n                if (this._layerControlInputs) {\n                    // to keep compatibility with 1.0.3\n                    this._layerControlInputs.push(input);\n                }\n                input.layerId = L.Util.stamp(tree.layer);\n                L.DomEvent.on(input, 'click', this._onInputClick, this);\n                label.appendChild(input);\n            }\n\n            function isText(variable) {\n                return (typeof variable === 'string' || variable instanceof String);\n            }\n\n            function isFunction(functionToCheck) {\n                return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';\n            }\n\n            function selectAllCheckboxes(select, ctx) {\n                var inputs = container.getElementsByTagName('input');\n                for (var i = 0; i < inputs.length; i++) {\n                    var input = inputs[i];\n                    if (input.type !== 'checkbox') continue;\n                    input.checked = select;\n                    input.indeterminate = false;\n                }\n                ctx._onInputClick();\n            }\n            if (tree.selectAllCheckbox) {\n                // selAll is already created\n                label.appendChild(selAll);\n                if (isText(tree.selectAllCheckbox)) {\n                    selAll.title = tree.selectAllCheckbox;\n                }\n                L.DomEvent.on(selAll, 'click', function(ev) {\n                    ev.stopPropagation();\n                    selectAllCheckboxes(selAll.checked, this);\n                }, this);\n                updateSelAllCheckbox(container);\n                manageSelectorsAll(selAll, this);\n            }\n\n            creator('span', this.cls.name, label, tree.label);\n\n            // hide the button which doesn't fit the collapsed state, then hide children conditionally\n            L.DomUtil.addClass(tree.collapsed ? opened : closed, hide);\n            tree.collapsed && children && L.DomUtil.addClass(children, hide);\n\n            if (noShow) {\n                L.DomUtil.addClass(header, this.cls.neverShow);\n                L.DomUtil.addClass(children, this.cls.childrenNopad);\n            }\n\n            var eventeds = tree.eventedClasses;\n            if (!(eventeds instanceof Array)) {\n                eventeds = [eventeds];\n            }\n\n            for (var e = 0; e < eventeds.length; e++) {\n                var evented = eventeds[e];\n                if (evented && evented.className) {\n                    var obj = container.querySelector('.' + evented.className);\n                    if (obj) {\n                        L.DomEvent.on(obj, evented.event || 'click', (function(selectAll) {\n                            return function(ev) {\n                                ev.stopPropagation();\n                                var select = isFunction(selectAll) ? selectAll(ev, container, tree, this._map) : selectAll;\n                                if (select !== undefined && select !== null) {\n                                    selectAllCheckboxes(select, this);\n                                }\n                            };\n                        })(evented.selectAll), this);\n                    }\n                }\n            }\n        },\n\n        _createCheckboxElement: function(checked) {\n            var input = document.createElement('input');\n            input.type = 'checkbox';\n            input.className = 'leaflet-control-layers-selector';\n            input.defaultChecked = checked;\n            return input;\n        },\n\n    });\n\n    L.control.layers.tree = function(base, overlays, options) {\n        return new L.Control.Layers.Tree(base, overlays, options);\n    };\n\n})(L);"
  },
  {
    "path": "public/vendor/leaflet/leaflet.markercluster.js",
    "content": "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t(((e=e||self).Leaflet=e.Leaflet||{},e.Leaflet.markercluster={}))}(this,function(e){\"use strict\";var t=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnEveryZoom:!1,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyShapePositions:null,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:\"#222\",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(e){L.Util.setOptions(this,e),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var t=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,t?this._withAnimation:this._noAnimation),this._markerCluster=t?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(e){if(e instanceof L.LayerGroup)return this.addLayers([e]);if(!e.getLatLng)return this._nonPointGroup.addLayer(e),this.fire(\"layeradd\",{layer:e}),this;if(!this._map)return this._needsClustering.push(e),this.fire(\"layeradd\",{layer:e}),this;if(this.hasLayer(e))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(e,this._maxZoom),this.fire(\"layeradd\",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var t=e,i=this._zoom;if(e.__parent)for(;t.__parent._zoom>=i;)t=t.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers([e]):(e.getLatLng?this._map?e.__parent&&(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this.fire(\"layerremove\",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow())):(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push({layer:e,latlng:e._latlng}),this.fire(\"layerremove\",{layer:e})):(this._nonPointGroup.removeLayer(e),this.fire(\"layerremove\",{layer:e})),this)},addLayers:function(n,s){if(!L.Util.isArray(n))return this.addLayer(n);var o,a=this._featureGroup,h=this._nonPointGroup,l=this.options.chunkedLoading,u=this.options.chunkInterval,_=this.options.chunkProgress,d=n.length,p=0,c=!0;if(this._map){var f=(new Date).getTime(),m=L.bind(function(){var e=(new Date).getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();p<d;p++){if(l&&p%200==0){var t=(new Date).getTime()-e;if(u<t)break}if((o=n[p])instanceof L.LayerGroup)c&&(n=n.slice(),c=!1),this._extractNonGroupLayers(o,n),d=n.length;else if(o.getLatLng){if(!this.hasLayer(o)&&(this._addLayer(o,this._maxZoom),s||this.fire(\"layeradd\",{layer:o}),o.__parent&&2===o.__parent.getChildCount())){var i=o.__parent.getAllChildMarkers(),r=i[0]===o?i[1]:i[0];a.removeLayer(r)}}else h.addLayer(o),s||this.fire(\"layeradd\",{layer:o})}_&&_(p,d,(new Date).getTime()-f),p===d?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(m,this.options.chunkDelay)},this);m()}else for(var e=this._needsClustering;p<d;p++)(o=n[p])instanceof L.LayerGroup?(c&&(n=n.slice(),c=!1),this._extractNonGroupLayers(o,n),d=n.length):o.getLatLng?this.hasLayer(o)||e.push(o):h.addLayer(o);return this},removeLayers:function(e){var t,i,r=e.length,n=this._featureGroup,s=this._nonPointGroup,o=!0;if(!this._map){for(t=0;t<r;t++)(i=e[t])instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),r=e.length):(this._arraySplice(this._needsClustering,i),s.removeLayer(i),this.hasLayer(i)&&this._needsRemoving.push({layer:i,latlng:i._latlng}),this.fire(\"layerremove\",{layer:i}));return this}if(this._unspiderfy){this._unspiderfy();var a=e.slice(),h=r;for(t=0;t<h;t++)(i=a[t])instanceof L.LayerGroup?(this._extractNonGroupLayers(i,a),h=a.length):this._unspiderfyLayer(i)}for(t=0;t<r;t++)(i=e[t])instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),r=e.length):i.__parent?(this._removeLayer(i,!0,!0),this.fire(\"layerremove\",{layer:i}),n.hasLayer(i)&&(n.removeLayer(i),i.clusterShow&&i.clusterShow())):(s.removeLayer(i),this.fire(\"layerremove\",{layer:i}));return this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds),this},clearLayers:function(){return this._map||(this._needsClustering=[],this._needsRemoving=[],delete this._gridClusters,delete this._gridUnclustered),this._noanimationUnspiderfy&&this._noanimationUnspiderfy(),this._featureGroup.clearLayers(),this._nonPointGroup.clearLayers(),this.eachLayer(function(e){e.off(this._childMarkerEventHandlers,this),delete e.__parent},this),this._map&&this._generateInitialClusters(),this},getBounds:function(){var e=new L.LatLngBounds;this._topClusterLevel&&e.extend(this._topClusterLevel._bounds);for(var t=this._needsClustering.length-1;0<=t;t--)e.extend(this._needsClustering[t].getLatLng());return e.extend(this._nonPointGroup.getBounds()),e},eachLayer:function(e,t){var i,r,n,s=this._needsClustering.slice(),o=this._needsRemoving;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(s),r=s.length-1;0<=r;r--){for(i=!0,n=o.length-1;0<=n;n--)if(o[n].layer===s[r]){i=!1;break}i&&e.call(t,s[r])}this._nonPointGroup.eachLayer(e,t)},getLayers:function(){var t=[];return this.eachLayer(function(e){t.push(e)}),t},getLayer:function(t){var i=null;return t=parseInt(t,10),this.eachLayer(function(e){L.stamp(e)===t&&(i=e)}),i},hasLayer:function(e){if(!e)return!1;var t,i=this._needsClustering;for(t=i.length-1;0<=t;t--)if(i[t]===e)return!0;for(t=(i=this._needsRemoving).length-1;0<=t;t--)if(i[t].layer===e)return!1;return!(!e.__parent||e.__parent._group!==this)||this._nonPointGroup.hasLayer(e)},zoomToShowLayer:function(e,t){var i=this._map;\"function\"!=typeof t&&(t=function(){});var r=function(){!i.hasLayer(e)&&!i.hasLayer(e.__parent)||this._inZoomAnimation||(this._map.off(\"moveend\",r,this),this.off(\"animationend\",r,this),i.hasLayer(e)?t():e.__parent._icon&&(this.once(\"spiderfied\",t,this),e.__parent.spiderfy()))};e._icon&&this._map.getBounds().contains(e.getLatLng())?t():e.__parent._zoom<Math.round(this._map._zoom)?(this._map.on(\"moveend\",r,this),this._map.panTo(e.getLatLng())):(this._map.on(\"moveend\",r,this),this.on(\"animationend\",r,this),e.__parent.zoomToBounds())},onAdd:function(e){var t,i,r;if(this._map=e,!isFinite(this._map.getMaxZoom()))throw\"Map has no maxZoom specified\";for(this._featureGroup.addTo(e),this._nonPointGroup.addTo(e),this._gridClusters||this._generateInitialClusters(),this._maxLat=e.options.crs.projection.MAX_LATITUDE,t=0,i=this._needsRemoving.length;t<i;t++)(r=this._needsRemoving[t]).newlatlng=r.layer._latlng,r.layer._latlng=r.latlng;for(t=0,i=this._needsRemoving.length;t<i;t++)r=this._needsRemoving[t],this._removeLayer(r.layer,!0),r.layer._latlng=r.newlatlng;this._needsRemoving=[],this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds(),this._map.on(\"zoomend\",this._zoomEnd,this),this._map.on(\"moveend\",this._moveEnd,this),this._spiderfierOnAdd&&this._spiderfierOnAdd(),this._bindEvents(),i=this._needsClustering,this._needsClustering=[],this.addLayers(i,!0)},onRemove:function(e){e.off(\"zoomend\",this._zoomEnd,this),e.off(\"moveend\",this._moveEnd,this),this._unbindEvents(),this._map._mapPane.className=this._map._mapPane.className.replace(\" leaflet-cluster-anim\",\"\"),this._spiderfierOnRemove&&this._spiderfierOnRemove(),delete this._maxLat,this._hideCoverage(),this._featureGroup.remove(),this._nonPointGroup.remove(),this._featureGroup.clearLayers(),this._map=null},getVisibleParent:function(e){for(var t=e;t&&!t._icon;)t=t.__parent;return t||null},_arraySplice:function(e,t){for(var i=e.length-1;0<=i;i--)if(e[i]===t)return e.splice(i,1),!0},_removeFromGridUnclustered:function(e,t){for(var i=this._map,r=this._gridUnclustered,n=Math.floor(this._map.getMinZoom());n<=t&&r[t].removeObject(e,i.project(e.getLatLng(),t));t--);},_childMarkerDragStart:function(e){e.target.__dragStart=e.target._latlng},_childMarkerMoved:function(e){if(!this._ignoreMove&&!e.target.__dragStart){var t=e.target._popup&&e.target._popup.isOpen();this._moveChild(e.target,e.oldLatLng,e.latlng),t&&e.target.openPopup()}},_moveChild:function(e,t,i){e._latlng=t,this.removeLayer(e),e._latlng=i,this.addLayer(e)},_childMarkerDragEnd:function(e){var t=e.target.__dragStart;delete e.target.__dragStart,t&&this._moveChild(e.target,t,e.target._latlng)},_removeLayer:function(e,t,i){var r=this._gridClusters,n=this._gridUnclustered,s=this._featureGroup,o=this._map,a=Math.floor(this._map.getMinZoom());t&&this._removeFromGridUnclustered(e,this._maxZoom);var h,l=e.__parent,u=l._markers;for(this._arraySplice(u,e);l&&(l._childCount--,l._boundsNeedUpdate=!0,!(l._zoom<a));)t&&l._childCount<=1?(h=l._markers[0]===e?l._markers[1]:l._markers[0],r[l._zoom].removeObject(l,o.project(l._cLatLng,l._zoom)),n[l._zoom].addObject(h,o.project(h.getLatLng(),l._zoom)),this._arraySplice(l.__parent._childClusters,l),l.__parent._markers.push(h),h.__parent=l.__parent,l._icon&&(s.removeLayer(l),i||s.addLayer(h))):l._iconNeedsUpdate=!0,l=l.__parent;delete e.__parent},_isOrIsParent:function(e,t){for(;t;){if(e===t)return!0;t=t.parentNode}return!1},fire:function(e,t,i){if(t&&t.layer instanceof L.MarkerCluster){if(t.originalEvent&&this._isOrIsParent(t.layer._icon,t.originalEvent.relatedTarget))return;e=\"cluster\"+e}L.FeatureGroup.prototype.fire.call(this,e,t,i)},listens:function(e,t){return L.FeatureGroup.prototype.listens.call(this,e,t)||L.FeatureGroup.prototype.listens.call(this,\"cluster\"+e,t)},_defaultIconCreateFunction:function(e){var t=e.getChildCount(),i=\" marker-cluster-\";return i+=t<10?\"small\":t<100?\"medium\":\"large\",new L.DivIcon({html:\"<div><span>\"+t+\"</span></div>\",className:\"marker-cluster\"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var e=this._map,t=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,r=this.options.zoomToBoundsOnClick,n=this.options.spiderfyOnEveryZoom;(t||r||n)&&this.on(\"clusterclick clusterkeypress\",this._zoomOrSpiderfy,this),i&&(this.on(\"clustermouseover\",this._showCoverage,this),this.on(\"clustermouseout\",this._hideCoverage,this),e.on(\"zoomend\",this._hideCoverage,this))},_zoomOrSpiderfy:function(e){var t=e.layer,i=t;if(\"clusterkeypress\"!==e.type||!e.originalEvent||13===e.originalEvent.keyCode){for(;1===i._childClusters.length;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===t._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),this.options.spiderfyOnEveryZoom&&t.spiderfy(),e.originalEvent&&13===e.originalEvent.keyCode&&this._map._container.focus()}},_showCoverage:function(e){var t=this._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),2<e.layer.getChildCount()&&e.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(e.layer.getConvexHull(),this.options.polygonOptions),t.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var e=this.options.spiderfyOnMaxZoom,t=this.options.showCoverageOnHover,i=this.options.zoomToBoundsOnClick,r=this.options.spiderfyOnEveryZoom,n=this._map;(e||i||r)&&this.off(\"clusterclick clusterkeypress\",this._zoomOrSpiderfy,this),t&&(this.off(\"clustermouseover\",this._showCoverage,this),this.off(\"clustermouseout\",this._hideCoverage,this),n.off(\"zoomend\",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var e=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,e),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),e),this._currentShownBounds=e}},_generateInitialClusters:function(){var e=Math.ceil(this._map.getMaxZoom()),t=Math.floor(this._map.getMinZoom()),i=this.options.maxClusterRadius,r=i;\"function\"!=typeof i&&(r=function(){return i}),null!==this.options.disableClusteringAtZoom&&(e=this.options.disableClusteringAtZoom-1),this._maxZoom=e,this._gridClusters={},this._gridUnclustered={};for(var n=e;t<=n;n--)this._gridClusters[n]=new L.DistanceGrid(r(n)),this._gridUnclustered[n]=new L.DistanceGrid(r(n));this._topClusterLevel=new this._markerCluster(this,t-1)},_addLayer:function(e,t){var i,r,n=this._gridClusters,s=this._gridUnclustered,o=Math.floor(this._map.getMinZoom());for(this.options.singleMarkerMode&&this._overrideMarkerIcon(e),e.on(this._childMarkerEventHandlers,this);o<=t;t--){i=this._map.project(e.getLatLng(),t);var a=n[t].getNearObject(i);if(a)return a._addChild(e),void(e.__parent=a);if(a=s[t].getNearObject(i)){var h=a.__parent;h&&this._removeLayer(a,!1);var l=new this._markerCluster(this,t,a,e);n[t].addObject(l,this._map.project(l._cLatLng,t)),a.__parent=l;var u=e.__parent=l;for(r=t-1;r>h._zoom;r--)u=new this._markerCluster(this,r,u),n[r].addObject(u,this._map.project(a.getLatLng(),r));return h._addChild(u),void this._removeFromGridUnclustered(a,t)}s[t].addObject(e,i)}this._topClusterLevel._addChild(e),e.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e=0;e<this._queue.length;e++)this._queue[e].call(this);this._queue.length=0,clearTimeout(this._queueTimeout),this._queueTimeout=null},_mergeSplitClusters:function(){var e=Math.round(this._map._zoom);this._processQueue(),this._zoom<e&&this._currentShownBounds.intersects(this._getExpandedVisibleBounds())?(this._animationStart(),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,this._getExpandedVisibleBounds()),this._animationZoomIn(this._zoom,e)):this._zoom>e?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(e){var t=this._maxLat;return void 0!==t&&(e.getNorth()>=t&&(e._northEast.lat=1/0),e.getSouth()<=-t&&(e._southWest.lat=-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(t===e)this._featureGroup.addLayer(e);else if(2===t._childCount){t._addToMap();var i=t.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i,r=e.getLayers(),n=0;for(t=t||[];n<r.length;n++)(i=r[n])instanceof L.LayerGroup?this._extractNonGroupLayers(i,t):t.push(i);return t},_overrideMarkerIcon:function(e){return e.options.icon=this.options.iconCreateFunction({getChildCount:function(){return 1},getAllChildMarkers:function(){return[e]}})}});L.MarkerClusterGroup.include({_mapBoundsInfinite:new L.LatLngBounds(new L.LatLng(-1/0,-1/0),new L.LatLng(1/0,1/0))}),L.MarkerClusterGroup.include({_noAnimation:{_animationStart:function(){},_animationZoomIn:function(e,t){this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this.fire(\"animationend\")},_animationZoomOut:function(e,t){this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this.fire(\"animationend\")},_animationAddLayer:function(e,t){this._animationAddLayerNonAnimated(e,t)}},_withAnimation:{_animationStart:function(){this._map._mapPane.className+=\" leaflet-cluster-anim\",this._inZoomAnimation++},_animationZoomIn:function(n,s){var o,a=this._getExpandedVisibleBounds(),h=this._featureGroup,e=Math.floor(this._map.getMinZoom());this._ignoreMove=!0,this._topClusterLevel._recursively(a,n,e,function(e){var t,i=e._latlng,r=e._markers;for(a.contains(i)||(i=null),e._isSingleParent()&&n+1===s?(h.removeLayer(e),e._recursivelyAddChildrenToMap(null,s,a)):(e.clusterHide(),e._recursivelyAddChildrenToMap(i,s,a)),o=r.length-1;0<=o;o--)t=r[o],a.contains(t._latlng)||h.removeLayer(t)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(a,s),h.eachLayer(function(e){e instanceof L.MarkerCluster||!e._icon||e.clusterShow()}),this._topClusterLevel._recursively(a,n,s,function(e){e._recursivelyRestoreChildPositions(s)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(a,n,e,function(e){h.removeLayer(e),e.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(e,t){this._animationZoomOutSingle(this._topClusterLevel,e-1,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e,this._getExpandedVisibleBounds())},_animationAddLayer:function(e,t){var i=this,r=this._featureGroup;r.addLayer(e),t!==e&&(2<t._childCount?(t._updateIcon(),this._forceLayout(),this._animationStart(),e._setPos(this._map.latLngToLayerPoint(t.getLatLng())),e.clusterHide(),this._enqueue(function(){r.removeLayer(e),e.clusterShow(),i._animationEnd()})):(this._forceLayout(),i._animationStart(),i._animationZoomOutSingle(t,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(t,i,r){var n=this._getExpandedVisibleBounds(),s=Math.floor(this._map.getMinZoom());t._recursivelyAnimateChildrenInAndAddSelfToMap(n,s,i+1,r);var o=this;this._forceLayout(),t._recursivelyBecomeVisible(n,r),this._enqueue(function(){if(1===t._childCount){var e=t._markers[0];this._ignoreMove=!0,e.setLatLng(e.getLatLng()),this._ignoreMove=!1,e.clusterShow&&e.clusterShow()}else t._recursively(n,r,s,function(e){e._recursivelyRemoveChildrenFromMap(n,s,i+1)});o._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(\" leaflet-cluster-anim\",\"\")),this._inZoomAnimation--,this.fire(\"animationend\")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(e){return new L.MarkerClusterGroup(e)};var i=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(e,t,i,r){L.Marker.prototype.initialize.call(this,i?i._cLatLng||i.getLatLng():new L.LatLng(0,0),{icon:this,pane:e.options.clusterPane}),this._group=e,this._zoom=t,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,i&&this._addChild(i),r&&this._addChild(r)},getAllChildMarkers:function(e,t){e=e||[];for(var i=this._childClusters.length-1;0<=i;i--)this._childClusters[i].getAllChildMarkers(e,t);for(var r=this._markers.length-1;0<=r;r--)t&&this._markers[r].__dragStart||e.push(this._markers[r]);return e},getChildCount:function(){return this._childCount},zoomToBounds:function(e){for(var t,i=this._childClusters.slice(),r=this._group._map,n=r.getBoundsZoom(this._bounds),s=this._zoom+1,o=r.getZoom();0<i.length&&s<n;){s++;var a=[];for(t=0;t<i.length;t++)a=a.concat(i[t]._childClusters);i=a}s<n?this._group._map.setView(this._latlng,s):n<=o?this._group._map.setView(this._latlng,o+1):this._group._map.fitBounds(this._bounds,e)},getBounds:function(){var e=new L.LatLngBounds;return e.extend(this._bounds),e},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(e,t){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(e),e instanceof L.MarkerCluster?(t||(this._childClusters.push(e),e.__parent=this),this._childCount+=e._childCount):(t||this._markers.push(e),this._childCount++),this.__parent&&this.__parent._addChild(e,!0)},_setClusterCenter:function(e){this._cLatLng||(this._cLatLng=e._cLatLng||e._latlng)},_resetBounds:function(){var e=this._bounds;e._southWest&&(e._southWest.lat=1/0,e._southWest.lng=1/0),e._northEast&&(e._northEast.lat=-1/0,e._northEast.lng=-1/0)},_recalculateBounds:function(){var e,t,i,r,n=this._markers,s=this._childClusters,o=0,a=0,h=this._childCount;if(0!==h){for(this._resetBounds(),e=0;e<n.length;e++)i=n[e]._latlng,this._bounds.extend(i),o+=i.lat,a+=i.lng;for(e=0;e<s.length;e++)(t=s[e])._boundsNeedUpdate&&t._recalculateBounds(),this._bounds.extend(t._bounds),i=t._wLatLng,r=t._childCount,o+=i.lat*r,a+=i.lng*r;this._latlng=this._wLatLng=new L.LatLng(o/h,a/h),this._boundsNeedUpdate=!1}},_addToMap:function(e){e&&(this._backupLatlng=this._latlng,this.setLatLng(e)),this._group._featureGroup.addLayer(this)},_recursivelyAnimateChildrenIn:function(e,n,t){this._recursively(e,this._group._map.getMinZoom(),t-1,function(e){var t,i,r=e._markers;for(t=r.length-1;0<=t;t--)(i=r[t])._icon&&(i._setPos(n),i.clusterHide())},function(e){var t,i,r=e._childClusters;for(t=r.length-1;0<=t;t--)(i=r[t])._icon&&(i._setPos(n),i.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(t,i,r,n){this._recursively(t,n,i,function(e){e._recursivelyAnimateChildrenIn(t,e._group._map.latLngToLayerPoint(e.getLatLng()).round(),r),e._isSingleParent()&&r-1===n?(e.clusterShow(),e._recursivelyRemoveChildrenFromMap(t,i,r)):e.clusterHide(),e._addToMap()})},_recursivelyBecomeVisible:function(e,t){this._recursively(e,this._group._map.getMinZoom(),t,null,function(e){e.clusterShow()})},_recursivelyAddChildrenToMap:function(r,n,s){this._recursively(s,this._group._map.getMinZoom()-1,n,function(e){if(n!==e._zoom)for(var t=e._markers.length-1;0<=t;t--){var i=e._markers[t];s.contains(i._latlng)&&(r&&(i._backupLatlng=i.getLatLng(),i.setLatLng(r),i.clusterHide&&i.clusterHide()),e._group._featureGroup.addLayer(i))}},function(e){e._addToMap(r)})},_recursivelyRestoreChildPositions:function(e){for(var t=this._markers.length-1;0<=t;t--){var i=this._markers[t];i._backupLatlng&&(i.setLatLng(i._backupLatlng),delete i._backupLatlng)}if(e-1===this._zoom)for(var r=this._childClusters.length-1;0<=r;r--)this._childClusters[r]._restorePosition();else for(var n=this._childClusters.length-1;0<=n;n--)this._childClusters[n]._recursivelyRestoreChildPositions(e)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(e,t,i,r){var n,s;this._recursively(e,t-1,i-1,function(e){for(s=e._markers.length-1;0<=s;s--)n=e._markers[s],r&&r.contains(n._latlng)||(e._group._featureGroup.removeLayer(n),n.clusterShow&&n.clusterShow())},function(e){for(s=e._childClusters.length-1;0<=s;s--)n=e._childClusters[s],r&&r.contains(n._latlng)||(e._group._featureGroup.removeLayer(n),n.clusterShow&&n.clusterShow())})},_recursively:function(e,t,i,r,n){var s,o,a=this._childClusters,h=this._zoom;if(t<=h&&(r&&r(this),n&&h===i&&n(this)),h<t||h<i)for(s=a.length-1;0<=s;s--)(o=a[s])._boundsNeedUpdate&&o._recalculateBounds(),e.intersects(o._bounds)&&o._recursively(e,t,i,r,n)},_isSingleParent:function(){return 0<this._childClusters.length&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var e=this.options.opacity;return this.setOpacity(0),this.options.opacity=e,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(e){this._cellSize=e,this._sqCellSize=e*e,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(e,t){var i=this._getCoord(t.x),r=this._getCoord(t.y),n=this._grid,s=n[r]=n[r]||{},o=s[i]=s[i]||[],a=L.Util.stamp(e);this._objectPoint[a]=t,o.push(e)},updateObject:function(e,t){this.removeObject(e),this.addObject(e,t)},removeObject:function(e,t){var i,r,n=this._getCoord(t.x),s=this._getCoord(t.y),o=this._grid,a=o[s]=o[s]||{},h=a[n]=a[n]||[];for(delete this._objectPoint[L.Util.stamp(e)],i=0,r=h.length;i<r;i++)if(h[i]===e)return h.splice(i,1),1===r&&delete a[n],!0},eachObject:function(e,t){var i,r,n,s,o,a,h=this._grid;for(i in h)for(r in o=h[i])for(n=0,s=(a=o[r]).length;n<s;n++)e.call(t,a[n])&&(n--,s--)},getNearObject:function(e){var t,i,r,n,s,o,a,h,l=this._getCoord(e.x),u=this._getCoord(e.y),_=this._objectPoint,d=this._sqCellSize,p=null;for(t=u-1;t<=u+1;t++)if(n=this._grid[t])for(i=l-1;i<=l+1;i++)if(s=n[i])for(r=0,o=s.length;r<o;r++)a=s[r],((h=this._sqDist(_[L.Util.stamp(a)],e))<d||h<=d&&null===p)&&(d=h,p=a);return p},_getCoord:function(e){var t=Math.floor(e/this._cellSize);return isFinite(t)?t:e},_sqDist:function(e,t){var i=t.x-e.x,r=t.y-e.y;return i*i+r*r}},L.QuickHull={getDistant:function(e,t){var i=t[1].lat-t[0].lat;return(t[0].lng-t[1].lng)*(e.lat-t[0].lat)+i*(e.lng-t[0].lng)},findMostDistantPointFromBaseLine:function(e,t){var i,r,n,s=0,o=null,a=[];for(i=t.length-1;0<=i;i--)r=t[i],0<(n=this.getDistant(r,e))&&(a.push(r),s<n&&(s=n,o=r));return{maxPoint:o,newPoints:a}},buildConvexHull:function(e,t){var i=[],r=this.findMostDistantPointFromBaseLine(e,t);return r.maxPoint?i=(i=i.concat(this.buildConvexHull([e[0],r.maxPoint],r.newPoints))).concat(this.buildConvexHull([r.maxPoint,e[1]],r.newPoints)):[e[0]]},getConvexHull:function(e){var t,i=!1,r=!1,n=!1,s=!1,o=null,a=null,h=null,l=null,u=null,_=null;for(t=e.length-1;0<=t;t--){var d=e[t];(!1===i||d.lat>i)&&(i=(o=d).lat),(!1===r||d.lat<r)&&(r=(a=d).lat),(!1===n||d.lng>n)&&(n=(h=d).lng),(!1===s||d.lng<s)&&(s=(l=d).lng)}return u=r!==i?(_=a,o):(_=l,h),[].concat(this.buildConvexHull([_,u],e),this.buildConvexHull([u,_],e))}},L.MarkerCluster.include({getConvexHull:function(){var e,t,i=this.getAllChildMarkers(),r=[];for(t=i.length-1;0<=t;t--)e=i[t].getLatLng(),r.push(e);return L.QuickHull.getConvexHull(r)}}),L.MarkerCluster.include({_2PI:2*Math.PI,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(this._group._spiderfied!==this&&!this._group._inZoomAnimation){var e,t=this.getAllChildMarkers(null,!0),i=this._group._map.latLngToLayerPoint(this._latlng);this._group._unspiderfy(),e=(this._group._spiderfied=this)._group.options.spiderfyShapePositions?this._group.options.spiderfyShapePositions(t.length,i):t.length>=this._circleSpiralSwitchover?this._generatePointsSpiral(t.length,i):(i.y+=10,this._generatePointsCircle(t.length,i)),this._animationSpiderfy(t,e)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfied=null)},_generatePointsCircle:function(e,t){var i,r,n=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e)/this._2PI,s=this._2PI/e,o=[];for(n=Math.max(n,35),o.length=e,i=0;i<e;i++)r=this._circleStartAngle+i*s,o[i]=new L.Point(t.x+n*Math.cos(r),t.y+n*Math.sin(r))._round();return o},_generatePointsSpiral:function(e,t){var i,r=this._group.options.spiderfyDistanceMultiplier,n=r*this._spiralLengthStart,s=r*this._spiralFootSeparation,o=r*this._spiralLengthFactor*this._2PI,a=0,h=[];for(i=h.length=e;0<=i;i--)i<e&&(h[i]=new L.Point(t.x+n*Math.cos(a),t.y+n*Math.sin(a))._round()),n+=o/(a+=s/n+5e-4*i);return h},_noanimationUnspiderfy:function(){var e,t,i=this._group,r=i._map,n=i._featureGroup,s=this.getAllChildMarkers(null,!0);for(i._ignoreMove=!0,this.setOpacity(1),t=s.length-1;0<=t;t--)e=s[t],n.removeLayer(e),e._preSpiderfyLatlng&&(e.setLatLng(e._preSpiderfyLatlng),delete e._preSpiderfyLatlng),e.setZIndexOffset&&e.setZIndexOffset(0),e._spiderLeg&&(r.removeLayer(e._spiderLeg),delete e._spiderLeg);i.fire(\"unspiderfied\",{cluster:this,markers:s}),i._ignoreMove=!1,i._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(e,t){var i,r,n,s,o=this._group,a=o._map,h=o._featureGroup,l=this._group.options.spiderLegPolylineOptions;for(o._ignoreMove=!0,i=0;i<e.length;i++)s=a.layerPointToLatLng(t[i]),r=e[i],n=new L.Polyline([this._latlng,s],l),a.addLayer(n),r._spiderLeg=n,r._preSpiderfyLatlng=r._latlng,r.setLatLng(s),r.setZIndexOffset&&r.setZIndexOffset(1e6),h.addLayer(r);this.setOpacity(.3),o._ignoreMove=!1,o.fire(\"spiderfied\",{cluster:this,markers:e})},_animationUnspiderfy:function(){this._noanimationUnspiderfy()}}),L.MarkerCluster.include({_animationSpiderfy:function(e,t){var i,r,n,s,o,a,h=this,l=this._group,u=l._map,_=l._featureGroup,d=this._latlng,p=u.latLngToLayerPoint(d),c=L.Path.SVG,f=L.extend({},this._group.options.spiderLegPolylineOptions),m=f.opacity;for(void 0===m&&(m=L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity),c?(f.opacity=0,f.className=(f.className||\"\")+\" leaflet-cluster-spider-leg\"):f.opacity=m,l._ignoreMove=!0,i=0;i<e.length;i++)r=e[i],a=u.layerPointToLatLng(t[i]),n=new L.Polyline([d,a],f),u.addLayer(n),r._spiderLeg=n,c&&(o=(s=n._path).getTotalLength()+.1,s.style.strokeDasharray=o,s.style.strokeDashoffset=o),r.setZIndexOffset&&r.setZIndexOffset(1e6),r.clusterHide&&r.clusterHide(),_.addLayer(r),r._setPos&&r._setPos(p);for(l._forceLayout(),l._animationStart(),i=e.length-1;0<=i;i--)a=u.layerPointToLatLng(t[i]),(r=e[i])._preSpiderfyLatlng=r._latlng,r.setLatLng(a),r.clusterShow&&r.clusterShow(),c&&((s=(n=r._spiderLeg)._path).style.strokeDashoffset=0,n.setStyle({opacity:m}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire(\"spiderfied\",{cluster:h,markers:e})},200)},_animationUnspiderfy:function(e){var t,i,r,n,s,o,a=this,h=this._group,l=h._map,u=h._featureGroup,_=e?l._latLngToNewLayerPoint(this._latlng,e.zoom,e.center):l.latLngToLayerPoint(this._latlng),d=this.getAllChildMarkers(null,!0),p=L.Path.SVG;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),i=d.length-1;0<=i;i--)(t=d[i])._preSpiderfyLatlng&&(t.closePopup(),t.setLatLng(t._preSpiderfyLatlng),delete t._preSpiderfyLatlng,o=!0,t._setPos&&(t._setPos(_),o=!1),t.clusterHide&&(t.clusterHide(),o=!1),o&&u.removeLayer(t),p&&(s=(n=(r=t._spiderLeg)._path).getTotalLength()+.1,n.style.strokeDashoffset=s,r.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var e=0;for(i=d.length-1;0<=i;i--)(t=d[i])._spiderLeg&&e++;for(i=d.length-1;0<=i;i--)(t=d[i])._spiderLeg&&(t.clusterShow&&t.clusterShow(),t.setZIndexOffset&&t.setZIndexOffset(0),1<e&&u.removeLayer(t),l.removeLayer(t._spiderLeg),delete t._spiderLeg);h._animationEnd(),h.fire(\"unspiderfied\",{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on(\"click\",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on(\"zoomstart\",this._unspiderfyZoomStart,this),this._map.on(\"zoomend\",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off(\"click\",this._unspiderfyWrapper,this),this._map.off(\"zoomstart\",this._unspiderfyZoomStart,this),this._map.off(\"zoomanim\",this._unspiderfyZoomAnim,this),this._map.off(\"zoomend\",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on(\"zoomanim\",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(e){L.DomUtil.hasClass(this._map._mapPane,\"leaflet-touching\")||(this._map.off(\"zoomanim\",this._unspiderfyZoomAnim,this),this._unspiderfy(e))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(e){this._spiderfied&&this._spiderfied.unspiderfy(e)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(e){e._spiderLeg&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow(),e.setZIndexOffset&&e.setZIndexOffset(0),this._map.removeLayer(e._spiderLeg),delete e._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(e){return e?e instanceof L.MarkerClusterGroup?e=e._topClusterLevel.getAllChildMarkers():e instanceof L.LayerGroup?e=e._layers:e instanceof L.MarkerCluster?e=e.getAllChildMarkers():e instanceof L.Marker&&(e=[e]):e=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(e),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(e),this},_flagParentsIconsNeedUpdate:function(e){var t,i;for(t in e)for(i=e[t].__parent;i;)i._iconNeedsUpdate=!0,i=i.__parent},_refreshSingleMarkerModeMarkers:function(e){var t,i;for(t in e)i=e[t],this.hasLayer(i)&&i.setIcon(this._overrideMarkerIcon(i))}}),L.Marker.include({refreshIconOptions:function(e,t){var i=this.options.icon;return L.setOptions(i,e),this.setIcon(i),t&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),e.MarkerClusterGroup=t,e.MarkerCluster=i,Object.defineProperty(e,\"__esModule\",{value:!0})});\n//# sourceMappingURL=leaflet.markercluster.js.map"
  },
  {
    "path": "public/vendor/leaflet/leaflet.markercluster.layersupport.js",
    "content": "/*!\n Leaflet.MarkerCluster.LayerSupport 2.0.1+649b3a9\n (c) 2015-2018 Boris Seang\n License MIT\n */\n!function(e,r){\"function\"==typeof define&&define.amd?define([\"leaflet\"],r):r(\"object\"==typeof module&&module.exports?require(\"leaflet\"):e.L)}(this,function(e,r){e.MarkerClusterGroup.LayerSupport=e.MarkerClusterGroup.extend({options:{singleAddRemoveBufferDuration:0},initialize:function(r){e.MarkerClusterGroup.prototype.initialize.call(this,r),this._featureGroup=new o,this._featureGroup.addEventParent(this),this._nonPointGroup=new o,this._nonPointGroup.addEventParent(this),this._layers={},this._proxyLayerGroups={},this._proxyLayerGroupsNeedRemoving={},this._singleAddRemoveBuffer=[]},checkIn:function(e){var r=this._toArray(e);return this._checkInGetSeparated(r),this},checkOut:function(r){var o,t,i=this._toArray(r),a=this._separateSingleFromGroupLayers(i,{groups:[],singles:[]}),s=a.groups,n=a.singles;for(o=0;o<n.length;o++)t=n[o],delete this._layers[e.stamp(t)],delete t._mcgLayerSupportGroup;for(this._originalRemoveLayers(n),o=0;o<s.length;o++)t=s[o],this._dismissProxyLayerGroup(t);return this},addLayers:function(r){var o,t,i,a=this._toArray(r),s=this._checkInGetSeparated(a),n=s.groups;for(this._originalAddLayers(s.singles),o=0;o<n.length;o++)t=n[o],i=e.stamp(t),this._proxyLayerGroups[i]=t,delete this._proxyLayerGroupsNeedRemoving[i],this._map&&this._map._originalAddLayer(t)},addLayer:function(e){return this._bufferSingleAddRemove(e,\"addLayers\"),this},_originalAddLayer:e.MarkerClusterGroup.prototype.addLayer,_originalAddLayers:e.MarkerClusterGroup.prototype.addLayers,removeLayers:function(r){var o,t,i=this._toArray(r),a=this._separateSingleFromGroupLayers(i,{groups:[],singles:[]}),s=a.groups,n=a.singles,p=0;for(this._originalRemoveLayers(n);p<s.length;p++)o=s[p],t=e.stamp(o),delete this._proxyLayerGroups[t],this._map?this._map._originalRemoveLayer(o):this._proxyLayerGroupsNeedRemoving[t]=o;return this},removeLayer:function(e){return this._bufferSingleAddRemove(e,\"removeLayers\"),this},_originalRemoveLayer:e.MarkerClusterGroup.prototype.removeLayer,_originalRemoveLayers:e.MarkerClusterGroup.prototype.removeLayers,onAdd:function(r){r._originalAddLayer=r._originalAddLayer||r.addLayer,r._originalRemoveLayer=r._originalRemoveLayer||r.removeLayer,e.extend(r,i);var o,t,a,s=this._removePreAddedLayers(r);this._originalOnAdd.call(this,r);for(o in this._proxyLayerGroups)t=this._proxyLayerGroups[o],r._originalAddLayer(t);for(o in this._proxyLayerGroupsNeedRemoving)t=this._proxyLayerGroupsNeedRemoving[o],r._originalRemoveLayer(t),delete this._proxyLayerGroupsNeedRemoving[o];for(a=0;a<s.length;a++)r.addLayer(s[a])},_originalOnAdd:e.MarkerClusterGroup.prototype.onAdd,_bufferSingleAddRemove:function(r,o){var t,i=this.options.singleAddRemoveBufferDuration;i>0?(this._singleAddRemoveBuffer.push({type:o,layer:r}),this._singleAddRemoveBufferTimeout||(t=e.bind(this._processSingleAddRemoveBuffer,this),this._singleAddRemoveBufferTimeout=setTimeout(t,i))):this[o](r)},_processSingleAddRemoveBuffer:function(){for(var e,r,o=this._singleAddRemoveBuffer,t=0,i=[];t<o.length;t++)e=o[t],r||(r=e.type),e.type===r?i.push(e.layer):(this[r](i),r=e.type,i=[e.layer]);this[r](i),o.length=0,clearTimeout(this._singleAddRemoveBufferTimeout),this._singleAddRemoveBufferTimeout=null},_checkInGetSeparated:function(r){var o,t,i=this._separateSingleFromGroupLayers(r,{groups:[],singles:[]}),a=i.groups,s=i.singles;for(o=0;o<a.length;o++)t=a[o],this._recruitLayerGroupAsProxy(t);for(o=0;o<s.length;o++)t=s[o],this._removeFromOtherGroupsOrMap(t),this._layers[e.stamp(t)]=t,t._mcgLayerSupportGroup=this;return i},_separateSingleFromGroupLayers:function(r,o){for(var t,i=o.groups,a=o.singles,s=e.Util.isArray,n=0;n<r.length;n++)t=r[n],t instanceof e.LayerGroup?(i.push(t),this._separateSingleFromGroupLayers(t.getLayers(),o)):s(t)?this._separateSingleFromGroupLayers(t,o):a.push(t);return o},_recruitLayerGroupAsProxy:function(r){var o=r._proxyMcgLayerSupportGroup;if(o){if(o===this)return;o.checkOut(r)}else this._removeFromOwnMap(r);r._proxyMcgLayerSupportGroup=this,r._originalAddLayer=r._originalAddLayer||r.addLayer,r._originalRemoveLayer=r._originalRemoveLayer||r.removeLayer,r._originalOnAdd=r._originalOnAdd||r.onAdd,r._originalOnRemove=r._originalOnRemove||r.onRemove,e.extend(r,t)},_dismissProxyLayerGroup:function(o){if(o._proxyMcgLayerSupportGroup!==r&&o._proxyMcgLayerSupportGroup===this){delete o._proxyMcgLayerSupportGroup,o.addLayer=o._originalAddLayer,o.removeLayer=o._originalRemoveLayer,o.onAdd=o._originalOnAdd,o.onRemove=o._originalOnRemove;var t=e.stamp(o);delete this._proxyLayerGroups[t],delete this._proxyLayerGroupsNeedRemoving[t],this._removeFromOwnMap(o)}},_removeFromOtherGroupsOrMap:function(e){var r=e._mcgLayerSupportGroup;if(r){if(r===this)return;r.checkOut(e)}else e.__parent?e.__parent._group.removeLayer(e):this._removeFromOwnMap(e)},_removeFromOwnMap:function(e){e._map&&e._map.removeLayer(e)},_removePreAddedLayers:function(e){var r,o=this._layers,t=[];for(var i in o)r=o[i],r._map&&(t.push(r),e._originalRemoveLayer(r));return t},_toArray:function(r){return e.Util.isArray(r)?r:[r]}});var o=e.FeatureGroup.extend({addLayer:function(r){if(this.hasLayer(r))return this;r.addEventParent(this);var o=e.stamp(r);return this._layers[o]=r,this._map&&this._map._originalAddLayer(r),this.fire(\"layeradd\",{layer:r})},removeLayer:function(r){if(!this.hasLayer(r))return this;r in this._layers&&(r=this._layers[r]),r.removeEventParent(this);var o=e.stamp(r);return this._map&&this._layers[o]&&this._map._originalRemoveLayer(this._layers[o]),delete this._layers[o],this.fire(\"layerremove\",{layer:r})},onAdd:function(e){this._map=e,this.eachLayer(e._originalAddLayer,e)},onRemove:function(e){this.eachLayer(e._originalRemoveLayer,e),this._map=null}}),t={addLayer:function(e){var r=this.getLayerId(e);return this._layers[r]=e,this._map?this._proxyMcgLayerSupportGroup.addLayer(e):this._proxyMcgLayerSupportGroup.checkIn(e),this},removeLayer:function(e){var r=e in this._layers?e:this.getLayerId(e);return this._proxyMcgLayerSupportGroup.removeLayer(e),delete this._layers[r],this},onAdd:function(){this._proxyMcgLayerSupportGroup.addLayers(this.getLayers())},onRemove:function(){this._proxyMcgLayerSupportGroup.removeLayers(this.getLayers())}},i={addLayer:function(e){return e._mcgLayerSupportGroup?e._mcgLayerSupportGroup._originalAddLayer(e):this._originalAddLayer(e)},removeLayer:function(e){return e._mcgLayerSupportGroup?e._mcgLayerSupportGroup._originalRemoveLayer(e):this._originalRemoveLayer(e)}};e.markerClusterGroup.layerSupport=function(r){return new e.MarkerClusterGroup.LayerSupport(r)}});"
  },
  {
    "path": "public/vendor/leaflet/leaflet.path.drag.js",
    "content": "'use strict';\n\n/* A Draggable that does not update the element position\nand takes care of only bubbling to targetted path in Canvas mode. */\nL.PathDraggable = L.Draggable.extend({\n\n  initialize: function (path) {\n    this._path = path;\n    this._canvas = (path._map.getRenderer(path) instanceof L.Canvas);\n    var element = this._canvas ? this._path._map.getRenderer(this._path)._container : this._path._path;\n    L.Draggable.prototype.initialize.call(this, element, element, true);\n  },\n\n  _updatePosition: function () {\n    var e = {originalEvent: this._lastEvent};\n    this.fire('drag', e);\n  },\n\n  _onDown: function (e) {\n    var first = e.touches ? e.touches[0] : e;\n    this._startPoint = new L.Point(first.clientX, first.clientY);\n    if (this._canvas && !this._path._containsPoint(this._path._map.mouseEventToLayerPoint(first))) { return; }\n    L.Draggable.prototype._onDown.call(this, e);\n  }\n\n});\n\n\nL.Handler.PathDrag = L.Handler.extend({\n\n  initialize: function (path) {\n    this._path = path;\n  },\n\n  getEvents: function () {\n    return {\n      dragstart: this._onDragStart,\n      drag: this._onDrag,\n      dragend: this._onDragEnd\n    };\n  },\n\n  addHooks: function () {\n    if (!this._draggable) { this._draggable = new L.PathDraggable(this._path); }\n    this._draggable.on(this.getEvents(), this).enable();\n    L.DomUtil.addClass(this._draggable._element, 'leaflet-path-draggable');\n  },\n\n  removeHooks: function () {\n    this._draggable.off(this.getEvents(), this).disable();\n    L.DomUtil.removeClass(this._draggable._element, 'leaflet-path-draggable');\n  },\n\n  moved: function () {\n    return this._draggable && this._draggable._moved;\n  },\n\n  _onDragStart: function () {\n    this._startPoint = this._draggable._startPoint;\n    this._path\n        .closePopup()\n        .fire('movestart')\n        .fire('dragstart');\n  },\n\n  _onDrag: function (e) {\n    var path = this._path,\n        event = (e.originalEvent.touches && e.originalEvent.touches.length === 1 ? e.originalEvent.touches[0] : e.originalEvent),\n        newPoint = L.point(event.clientX, event.clientY),\n        latlng = path._map.layerPointToLatLng(newPoint);\n\n    this._offset = newPoint.subtract(this._startPoint);\n    this._startPoint = newPoint;\n\n    this._path.eachLatLng(this.updateLatLng, this);\n    path.redraw();\n\n    e.latlng = latlng;\n    e.offset = this._offset;\n    path.fire('drag', e);\n    e.latlng = this._path.getCenter ? this._path.getCenter() : this._path.getLatLng();\n    path.fire('move', e);\n  },\n\n  _onDragEnd: function (e) {\n    if (this._path._bounds) this.resetBounds();\n    this._path.fire('moveend')\n        .fire('dragend', e);\n  },\n\n  latLngToLayerPoint: function (latlng) {\n    // Same as map.latLngToLayerPoint, but without the round().\n    var projectedPoint = this._path._map.project(L.latLng(latlng));\n    return projectedPoint._subtract(this._path._map.getPixelOrigin());\n  },\n\n  updateLatLng: function (latlng) {\n    var oldPoint = this.latLngToLayerPoint(latlng);\n    oldPoint._add(this._offset);\n    var newLatLng = this._path._map.layerPointToLatLng(oldPoint);\n    latlng.lat = newLatLng.lat;\n    latlng.lng = newLatLng.lng;\n  },\n\n  resetBounds: function () {\n    this._path._bounds = new L.LatLngBounds();\n    this._path.eachLatLng(function (latlng) {\n      this._bounds.extend(latlng);\n    });\n  }\n\n});\n\nL.Path.include({\n\n  eachLatLng: function (callback, context) {\n    context = context || this;\n    var loop = function (latlngs) {\n      for (var i = 0; i < latlngs.length; i++) {\n        if (L.Util.isArray(latlngs[i])) loop(latlngs[i]);\n        else callback.call(context, latlngs[i]);\n      }\n    };\n    loop(this.getLatLngs ? this.getLatLngs() : [this.getLatLng()]);\n  }\n\n});\n\nL.Path.addInitHook(function () {\n\n  this.dragging = new L.Handler.PathDrag(this);\n  if (this.options.draggable) {\n    this.once('add', function () {\n      this.dragging.enable();\n    });\n  }\n\n});\n"
  },
  {
    "path": "public/vendor/leaflet/leaflet.ruler-kanka.js",
    "content": "(function(factory, window){\n    \"use strict\";\n    if (typeof define === 'function' && define.amd) {\n        define(['leaflet'], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('leaflet'));\n    }\n    if (typeof window !== 'undefined' && window.L) {\n        window.L.Ruler = factory(L);\n    }\n}(function (L) {\n    \"use strict\";\n    L.Control.Ruler = L.Control.extend({\n        options: {\n            position: 'topright',\n            circleMarker: {\n                color: 'red',\n                radius: 2\n            },\n            lineStyle: {\n                color: 'red',\n                dashArray: '1,6'\n            },\n            lengthUnit: {\n                display: 'km',\n                decimal: 2,\n                factor: null\n            },\n            angleUnit: {\n                display: '&deg;',\n                decimal: 2,\n                factor: null\n            }\n        },\n        onAdd: function(map) {\n            this._map = map;\n            this._container = L.DomUtil.create('div', 'leaflet-bar');\n            this._container.classList.add('leaflet-ruler');\n            L.DomEvent.disableClickPropagation(this._container);\n            L.DomEvent.on(this._container, 'click', this._toggleMeasure, this);\n            this._choice = false;\n            this._defaultCursor = this._map._container.style.cursor;\n            this._allLayers = L.layerGroup();\n            this._maxZoom = this._map.getMaxZoom();\n            return this._container;\n        },\n        onRemove: function() {\n            L.DomEvent.off(this._container, 'click', this._toggleMeasure, this);\n        },\n        _toggleMeasure: function() {\n            this._choice = !this._choice;\n            this._clickedLatLong = null;\n            this._clickedPoints = [];\n            this._totalLength = 0;\n            if (this._choice){\n                this._map.doubleClickZoom.disable();\n                L.DomEvent.on(this._map._container, 'keydown', this._escape, this);\n                L.DomEvent.on(this._map._container, 'dblclick', this._closePath, this);\n                this._container.classList.add(\"leaflet-ruler-clicked\");\n                this._clickCount = 0;\n                this._tempLine = L.featureGroup().addTo(this._allLayers);\n                this._tempPoint = L.featureGroup().addTo(this._allLayers);\n                this._pointLayer = L.featureGroup().addTo(this._allLayers);\n                this._polylineLayer = L.featureGroup().addTo(this._allLayers);\n                this._allLayers.addTo(this._map);\n                this._map._container.style.cursor = 'crosshair';\n                this._map.on('click', this._clicked, this);\n                this._map.on('mousemove', this._moving, this);\n            }\n            else {\n                this._map.doubleClickZoom.enable();\n                L.DomEvent.off(this._map._container, 'keydown', this._escape, this);\n                L.DomEvent.off(this._map._container, 'dblclick', this._closePath, this);\n                this._container.classList.remove(\"leaflet-ruler-clicked\");\n                this._map.removeLayer(this._allLayers);\n                this._allLayers = L.layerGroup();\n                this._map._container.style.cursor = this._defaultCursor;\n                this._map.off('click', this._clicked, this);\n                this._map.off('mousemove', this._moving, this);\n            }\n        },\n        _clicked: function(e) {\n            this._clickedLatLong = e.latlng;\n            //console.log('Clicked', this._clickedLatLong);\n            this._clickedPoints.push(this._clickedLatLong);\n            L.circleMarker(this._clickedLatLong, this.options.circleMarker).addTo(this._pointLayer);\n            if(this._clickCount > 0 && !e.latlng.equals(this._clickedPoints[this._clickedPoints.length - 2])){\n                if (this._movingLatLong){\n                    L.polyline([this._clickedPoints[this._clickCount-1], this._movingLatLong], this.options.lineStyle).addTo(this._polylineLayer);\n                }\n                var text;\n                this._totalLength += this._result.Distance;\n                if (this._clickCount > 1){\n                    // Original with bearing - ja 05042018\n                    // text = '<b>' + 'Bearing:' + '</b>&nbsp;' + this._result.Bearing.toFixed(this.options.angleUnit.decimal) + '&nbsp;' + this.options.angleUnit.display + '<br><b>' + 'Distance:' + '</b>&nbsp;' + this._totalLength.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n                    // Without Bearing\n                    text = '' + this._totalLength.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n                }\n                else {\n                    // Original with bearing - ja 05042018\n                    //   text = '<b>' + 'Bearing:' + '</b>&nbsp;' + this._result.Bearing.toFixed(this.options.angleUnit.decimal) + '&nbsp;' + this.options.angleUnit.display + '<br><b>' + 'Distance:' + '</b>&nbsp;' + this._result.Distance.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n                    // Without Bearing\n                    text = '' + this._result.Distance.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n\n                }\n                L.circleMarker(this._clickedLatLong, this.options.circleMarker).bindTooltip(text, {permanent: true, className: 'result-tooltip',direction: 'top'}).addTo(this._pointLayer).openTooltip();\n            }\n            this._clickCount++;\n        },\n        _moving: function(e) {\n            if (this._clickedLatLong){\n                L.DomEvent.off(this._container, 'click', this._toggleMeasure, this);\n                this._movingLatLong = e.latlng;\n                //console.log('New position', this._movingLatLong);\n                if (this._tempLine){\n                    this._map.removeLayer(this._tempLine);\n                    this._map.removeLayer(this._tempPoint);\n                }\n                var text;\n                this._addedLength = 0;\n                this._tempLine = L.featureGroup();\n                this._tempPoint = L.featureGroup();\n                this._tempLine.addTo(this._map);\n                this._tempPoint.addTo(this._map);\n                this._calculateBearingAndDistance();\n                this._addedLength = this._result.Distance + this._totalLength;\n                L.polyline([this._clickedLatLong, this._movingLatLong], this.options.lineStyle).addTo(this._tempLine);\n                if (this._clickCount > 1){\n                    text = '<b>' + 'Distance:' + '</b>&nbsp;' + this._addedLength.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display + '<br><div class=\"plus-length\">(+' + this._result.Distance.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' + this.options.lengthUnit.display +')</div>';\n                }\n                else {\n                    text = '<b>' + 'Distance:' + '</b>&nbsp;' + this._result.Distance.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n                }\n                L.circleMarker(this._movingLatLong, this.options.circleMarker).bindTooltip(text, {sticky: true, className: 'moving-tooltip',direction: 'top'}).addTo(this._tempPoint).openTooltip();\n            }\n        },\n        _escape: function(e) {\n            if (e.keyCode === 27){\n                if (this._clickCount > 0){\n                    this._closePath();\n                }\n                else {\n                    this._choice = true;\n                    this._toggleMeasure();\n                }\n            }\n        },\n        _calculateBearingAndDistance: function() {\n            var f1 = this._clickedLatLong.lat, l1 = this._clickedLatLong.lng, f2 = this._movingLatLong.lat, l2 = this._movingLatLong.lng;\n            var toRadian = Math.PI / 180;\n            // haversine formula\n            // bearing\n            var y = Math.sin((l2-l1)*toRadian) * Math.cos(f2*toRadian);\n            var x = Math.cos(f1*toRadian)*Math.sin(f2*toRadian) - Math.sin(f1*toRadian)*Math.cos(f2*toRadian)*Math.cos((l2-l1)*toRadian);\n            var brng = Math.atan2(y, x)*((this.options.angleUnit.factor ? this.options.angleUnit.factor/2 : 180)/Math.PI);\n            brng += brng < 0 ? (this.options.angleUnit.factor ? this.options.angleUnit.factor : 360) : 0;\n\n            // Calculate distance based on a \"flat world\"\n            var pt1 = L.CRS.Simple.latLngToPoint(this._clickedLatLong, this._maxZoom);\n            var pt2 = L.CRS.Simple.latLngToPoint(this._movingLatLong, this._maxZoom);\n            var distance = pt1.distanceTo(pt2)*(this.options.lengthUnit.factor ? this.options.lengthUnit.factor : 1)/this._maxZoom;  // sets distance and multiplies based on factor in options  - cc 05032018\n            //console.log('Points', pt1, pt2);\n            //console.log('Lat', this._clickedLatLong.lat, 'now', this._movingLatLong.lat);\n            //console.log('Long', this._clickedLatLong.lng, 'now', this._movingLatLong.lng);\n            //console.log(pt1.y, pt2.y);\n            //console.log('Distance between them', pt1.distanceTo(pt2));\n            this._result = {\n                Bearing: brng,\n                Distance: distance\n            };\n\n            return;\n        },\n        _closePath: function() {\n            this._map.removeLayer(this._tempLine);\n            this._map.removeLayer(this._tempPoint);\n            this._choice = false;\n            L.DomEvent.on(this._container, 'click', this._toggleMeasure, this);\n            this._toggleMeasure();\n        }\n    });\n    L.control.ruler = function(options) {\n        return new L.Control.Ruler(options);\n    };\n}, window));\n"
  },
  {
    "path": "public/vendor/leaflet/leaflet.ruler.js",
    "content": "(function(factory, window){\n    \"use strict\";\n    if (typeof define === 'function' && define.amd) {\n        define(['leaflet'], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('leaflet'));\n    }\n    if (typeof window !== 'undefined' && window.L) {\n        window.L.Ruler = factory(L);\n    }\n}(function (L) {\n    \"use strict\";\n    L.Control.Ruler = L.Control.extend({\n        options: {\n            position: 'topright',\n            circleMarker: {\n                color: 'red',\n                radius: 2\n            },\n            lineStyle: {\n                color: 'red',\n                dashArray: '1,6'\n            },\n            lengthUnit: {\n                display: 'km',\n                decimal: 2,\n                factor: null\n            },\n            angleUnit: {\n                display: '&deg;',\n                decimal: 2,\n                factor: null\n            }\n        },\n        onAdd: function(map) {\n            this._map = map;\n            this._container = L.DomUtil.create('div', 'leaflet-bar');\n            this._container.classList.add('leaflet-ruler');\n            L.DomEvent.disableClickPropagation(this._container);\n            L.DomEvent.on(this._container, 'click', this._toggleMeasure, this);\n            this._choice = false;\n            this._defaultCursor = this._map._container.style.cursor;\n            this._allLayers = L.layerGroup();\n            this._maxZoom = this._map.getMaxZoom();  // Sets maxzoom to standardize the calculation - cc 05032018\n            return this._container;\n        },\n        onRemove: function() {\n            L.DomEvent.off(this._container, 'click', this._toggleMeasure, this);\n        },\n        _toggleMeasure: function() {\n            this._choice = !this._choice;\n            this._clickedLatLong = null;\n            this._clickedPoints = [];\n            this._totalLength = 0;\n            if (this._choice){\n                this._map.doubleClickZoom.disable();\n                L.DomEvent.on(this._map._container, 'keydown', this._escape, this);\n                L.DomEvent.on(this._map._container, 'dblclick', this._closePath, this);\n                this._container.classList.add(\"leaflet-ruler-clicked\");\n                this._clickCount = 0;\n                this._tempLine = L.featureGroup().addTo(this._allLayers);\n                this._tempPoint = L.featureGroup().addTo(this._allLayers);\n                this._pointLayer = L.featureGroup().addTo(this._allLayers);\n                this._polylineLayer = L.featureGroup().addTo(this._allLayers);\n                this._allLayers.addTo(this._map);\n                this._map._container.style.cursor = 'crosshair';\n                this._map.on('click', this._clicked, this);\n                this._map.on('mousemove', this._moving, this);\n            }\n            else {\n                this._map.doubleClickZoom.enable();\n                L.DomEvent.off(this._map._container, 'keydown', this._escape, this);\n                L.DomEvent.off(this._map._container, 'dblclick', this._closePath, this);\n                this._container.classList.remove(\"leaflet-ruler-clicked\");\n                this._map.removeLayer(this._allLayers);\n                this._allLayers = L.layerGroup();\n                this._map._container.style.cursor = this._defaultCursor;\n                this._map.off('click', this._clicked, this);\n                this._map.off('mousemove', this._moving, this);\n            }\n        },\n        _clicked: function(e) {\n            this._clickedLatLong = e.latlng;\n            this._clickedPoints.push(this._clickedLatLong);\n            L.circleMarker(this._clickedLatLong, this.options.circleMarker).addTo(this._pointLayer);\n            if(this._clickCount > 0 && !e.latlng.equals(this._clickedPoints[this._clickedPoints.length - 2])){\n                if (this._movingLatLong){\n                    L.polyline([this._clickedPoints[this._clickCount-1], this._movingLatLong], this.options.lineStyle).addTo(this._polylineLayer);\n                }\n                var text;\n                this._totalLength += this._result.Distance;\n                if (this._clickCount > 1){\n                    // Original with bearing - ja 05042018\n                    // text = '<b>' + 'Bearing:' + '</b>&nbsp;' + this._result.Bearing.toFixed(this.options.angleUnit.decimal) + '&nbsp;' + this.options.angleUnit.display + '<br><b>' + 'Distance:' + '</b>&nbsp;' + this._totalLength.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n                    // Without Bearing\n                    text = '' + this._totalLength.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n                }\n                else {\n                    // Original with bearing - ja 05042018\n                    //   text = '<b>' + 'Bearing:' + '</b>&nbsp;' + this._result.Bearing.toFixed(this.options.angleUnit.decimal) + '&nbsp;' + this.options.angleUnit.display + '<br><b>' + 'Distance:' + '</b>&nbsp;' + this._result.Distance.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n                    // Without Bearing\n                    text = '' + this._result.Distance.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n\n                }\n                L.circleMarker(this._clickedLatLong, this.options.circleMarker).bindTooltip(text, {permanent: true, className: 'result-tooltip',direction: 'top'}).addTo(this._pointLayer).openTooltip();\n            }\n            this._clickCount++;\n        },\n        _moving: function(e) {\n            if (this._clickedLatLong){\n                L.DomEvent.off(this._container, 'click', this._toggleMeasure, this);\n                this._movingLatLong = e.latlng;\n                if (this._tempLine){\n                    this._map.removeLayer(this._tempLine);\n                    this._map.removeLayer(this._tempPoint);\n                }\n                var text;\n                this._addedLength = 0;\n                this._tempLine = L.featureGroup();\n                this._tempPoint = L.featureGroup();\n                this._tempLine.addTo(this._map);\n                this._tempPoint.addTo(this._map);\n                this._calculateBearingAndDistance();\n                this._addedLength = this._result.Distance + this._totalLength;\n                L.polyline([this._clickedLatLong, this._movingLatLong], this.options.lineStyle).addTo(this._tempLine);\n                if (this._clickCount > 1){\n                    text = '<b>' + 'Distance:' + '</b>&nbsp;' + this._addedLength.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display + '<br><div class=\"plus-length\">(+' + this._result.Distance.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' + this.options.lengthUnit.display +')</div>';\n                }\n                else {\n                    text = '<b>' + 'Distance:' + '</b>&nbsp;' + this._result.Distance.toFixed(this.options.lengthUnit.decimal) + '&nbsp;' +  this.options.lengthUnit.display;\n                }\n                L.circleMarker(this._movingLatLong, this.options.circleMarker).bindTooltip(text, {sticky: true, className: 'moving-tooltip',direction: 'top'}).addTo(this._tempPoint).openTooltip();\n            }\n        },\n        _escape: function(e) {\n            if (e.keyCode === 27){\n                if (this._clickCount > 0){\n                    this._closePath();\n                }\n                else {\n                    this._choice = true;\n                    this._toggleMeasure();\n                }\n            }\n        },\n        _calculateBearingAndDistance: function() {\n            var f1 = this._clickedLatLong.lat, l1 = this._clickedLatLong.lng, f2 = this._movingLatLong.lat, l2 = this._movingLatLong.lng;\n            var toRadian = Math.PI / 180;\n            // haversine formula\n            // bearing\n            var deltaL = (l2 - l1)*toRadian;\n            var deltaF = (f2 - f1)*toRadian;\n            var y = Math.sin(deltaL) * Math.cos(f2*toRadian);\n            var x = Math.cos(f1*toRadian)*Math.sin(f2*toRadian) - Math.sin(f1*toRadian)*Math.cos(f2*toRadian)*Math.cos((l2-l1)*toRadian);\n            var brng = Math.atan2(y, x)*((this.options.angleUnit.factor ? this.options.angleUnit.factor/2 : 180)/Math.PI);\n            brng += brng < 0 ? (this.options.angleUnit.factor ? this.options.angleUnit.factor : 360) : 0;\n            // distance\n            // New calculations by mapping the Earth-based standard to the relative points of the default Map CRS system - cc 05032018\n            var pt1 = L.CRS.EPSG3857.latLngToPoint(this._clickedLatLong, this._maxZoom); // point 1 where clicked at max zoom level - cc 05032018\n            var pt2 = L.CRS.EPSG3857.latLngToPoint(this._movingLatLong, this._maxZoom); // point 2 where clicked at max zoom level - cc 05032018\n            var distance = pt1.distanceTo(pt2)*(this.options.lengthUnit.factor ? this.options.lengthUnit.factor : 1)/this._maxZoom;  // sets distance and multiplies based on factor in options  - cc 05032018\n            this._result = {\n                Bearing: brng,\n                Distance: distance\n            };\n        },\n        _closePath: function() {\n            this._map.removeLayer(this._tempLine);\n            this._map.removeLayer(this._tempPoint);\n            this._choice = false;\n            L.DomEvent.on(this._container, 'click', this._toggleMeasure, this);\n            this._toggleMeasure();\n        }\n    });\n    L.control.ruler = function(options) {\n        return new L.Control.Ruler(options);\n    };\n}, window));\n"
  },
  {
    "path": "public/vendor/leaflet/leaflet.zoomcss.js",
    "content": "/*\n  Leaflet.ZoomCSS\n  Adding a css class on the map div element, so other elements, such as markers can be automatically styled based on the zoom level using css instead of javascript\n  Copyright (c) 2014, Dag Jomar Mersland, dagjomar@gmail.com, @dagjomar\n  https://github.com/dagjomar/Leaflet.ZoomCSS\n*/\n\n\nL.Map.mergeOptions({\n    zoomCss: true\n  });\n\n  L.Map.ZoomCSS = L.Handler.extend({\n    addHooks: function () {\n      this._zoomCSS();\n      this._map.on('zoomend', this._zoomCSS, this);\n    },\n\n    removeHooks: function () {\n      this._map.off('zoomend', this._zoomCSS, this);\n    },\n\n    _zoomCSS: function (e) {\n      const zoomCssPrefix = 'z';\n\n      var map = this._map,\n        zoom = map.getZoom(),\n        container = map.getContainer();\n\n      for ( let i = -5; i < 24; i++ ) {\n          let base = zoomCssPrefix + String(i);\n          container.classList.remove(base);\n          container.classList.remove(base + \".25\");\n          container.classList.remove(base + \".5\");\n          container.classList.remove(base + \".75\");\n      }\n      if (zoom) {\n          let base = zoomCssPrefix + String(zoom);\n          container.classList.add(base);\n      }\n    }\n\n\n  });\n\n  L.Map.addInitHook('addHandler', 'zoomCss', L.Map.ZoomCSS);\n"
  },
  {
    "path": "public/vendor/leaflet/leaflet.zoomdisplay.js",
    "content": "(function(global,factory){if(typeof define===\"function\"&&define.amd){define([],factory)}else if(typeof exports!==\"undefined\"){factory()}else{var mod={exports:{}};factory();global.leafletZoomdisplaySrc=mod.exports}})(typeof globalThis!==\"undefined\"?globalThis:typeof self!==\"undefined\"?self:this,function(){\"use strict\";(function(global,factory){if(typeof define===\"function\"&&define.amd){define([\"exports\"],factory)}else if(typeof exports!==\"undefined\"){factory(exports)}else{var mod={exports:{}};factory(mod.exports);global.LControlZoomDisplay=mod.exports}})(typeof globalThis!==\"undefined\"?globalThis:typeof self!==\"undefined\"?self:void 0,function(_exports){\"use strict\";Object.defineProperty(_exports,\"__esModule\",{value:true});_exports.default=_default;/*\n   * L.Control.ZoomDisplay shows the current map zoom level\n   */function _default(L,options={}){var _options$position,_options$position2;options=Object.assign({position:(_options$position=options.position)!==null&&_options$position!==void 0?_options$position:\"topleft\",prefix:\"Zoom : \"},options);L.Control.ZoomDisplay=L.Control.extend({options:{position:(_options$position2=options.position)!==null&&_options$position2!==void 0?_options$position2:\"topleft\"},onAdd:function(map){this._map=map;this._container=L.DomUtil.create(\"div\",\"leaflet-control-zoom-display leaflet-bar-part leaflet-bar\");this.updateMapZoom(map.getZoom());map.on(\"zoomend\",this.onMapZoomEnd,this);return this._container},onRemove:function(map){map.off(\"zoomend\",this.onMapZoomEnd,this)},onMapZoomEnd:function(e){this.updateMapZoom(this._map.getZoom())},updateMapZoom:function(zoom){if(zoom===undefined){zoom=\"\"}this._container.innerHTML=String(options.prefix)+zoom}});L.Map.mergeOptions({zoomDisplayControl:true});L.Map.addInitHook(function(){if(this.options.zoomDisplayControl){this.zoomDisplayControl=new L.Control.ZoomDisplay;this.addControl(this.zoomDisplayControl)}});// Factory\nL.control.zoomDisplay=function(options){return new L.Control.ZoomDisplay(options)};return L.Control.ZoomDisplay}})});\n"
  },
  {
    "path": "public/vendor/summernote/0.9.1/font/summernote.hash",
    "content": "9917e08b6ee971f29d245c8cadb11fa9"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-ar-AR.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'ar-AR': {\n      font: {\n        bold: 'عريض',\n        italic: 'مائل',\n        underline: 'تحته خط',\n        clear: 'مسح التنسيق',\n        height: 'إرتفاع السطر',\n        name: 'الخط',\n        strikethrough: 'فى وسطه خط',\n        subscript: 'مخطوطة',\n        superscript: 'حرف فوقي',\n        size: 'الحجم'\n      },\n      image: {\n        image: 'صورة',\n        insert: 'إضافة صورة',\n        resizeFull: 'الحجم بالكامل',\n        resizeHalf: 'تصغير للنصف',\n        resizeQuarter: 'تصغير للربع',\n        floatLeft: 'تطيير لليسار',\n        floatRight: 'تطيير لليمين',\n        floatNone: 'ثابته',\n        shapeRounded: 'الشكل: تقريب',\n        shapeCircle: 'الشكل: دائرة',\n        shapeThumbnail: 'الشكل: صورة مصغرة',\n        shapeNone: 'الشكل: لا شيء',\n        dragImageHere: 'إدرج الصورة هنا',\n        dropImage: 'إسقاط صورة أو نص',\n        selectFromFiles: 'حدد ملف',\n        maximumFileSize: 'الحد الأقصى لحجم الملف',\n        maximumFileSizeError: 'تم تجاوز الحد الأقصى لحجم الملف',\n        url: 'رابط الصورة',\n        remove: 'حذف الصورة',\n        original: 'Original'\n      },\n      video: {\n        video: 'فيديو',\n        videoLink: 'رابط الفيديو',\n        insert: 'إدراج الفيديو',\n        url: 'رابط الفيديو',\n        providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'رابط',\n        insert: 'إدراج',\n        unlink: 'حذف الرابط',\n        edit: 'تعديل',\n        textToDisplay: 'النص',\n        url: 'مسار الرابط',\n        openInNewWindow: 'فتح في نافذة جديدة'\n      },\n      table: {\n        table: 'جدول',\n        addRowAbove: 'إضافة سطر أعلاه',\n        addRowBelow: 'إضافة سطر أدناه',\n        addColLeft: 'إضافة عمود قبله',\n        addColRight: 'إضافة عمود بعده',\n        delRow: 'حذف سطر',\n        delCol: 'حذف عمود',\n        delTable: 'حذف الجدول'\n      },\n      hr: {\n        insert: 'إدراج خط أفقي'\n      },\n      style: {\n        style: 'تنسيق',\n        p: 'عادي',\n        blockquote: 'إقتباس',\n        pre: 'شفيرة',\n        h1: 'عنوان رئيسي 1',\n        h2: 'عنوان رئيسي 2',\n        h3: 'عنوان رئيسي 3',\n        h4: 'عنوان رئيسي 4',\n        h5: 'عنوان رئيسي 5',\n        h6: 'عنوان رئيسي 6'\n      },\n      lists: {\n        unordered: 'قائمة مُنقطة',\n        ordered: 'قائمة مُرقمة'\n      },\n      options: {\n        help: 'مساعدة',\n        fullscreen: 'حجم الشاشة بالكامل',\n        codeview: 'شفيرة المصدر'\n      },\n      paragraph: {\n        paragraph: 'فقرة',\n        outdent: 'محاذاة للخارج',\n        indent: 'محاذاة للداخل',\n        left: 'محاذاة لليسار',\n        center: 'توسيط',\n        right: 'محاذاة لليمين',\n        justify: 'ملئ السطر'\n      },\n      color: {\n        recent: 'تم إستخدامه',\n        more: 'المزيد',\n        background: 'لون الخلفية',\n        foreground: 'لون النص',\n        transparent: 'شفاف',\n        setTransparent: 'بدون خلفية',\n        reset: 'إعادة الضبط',\n        resetToDefault: 'إعادة الضبط',\n        cpSelect: 'اختار'\n      },\n      shortcut: {\n        shortcuts: 'إختصارات',\n        close: 'غلق',\n        textFormatting: 'تنسيق النص',\n        action: 'Action',\n        paragraphFormatting: 'تنسيق الفقرة',\n        documentStyle: 'تنسيق المستند',\n        extraKeys: 'أزرار إضافية'\n      },\n      help: {\n        'insertParagraph': 'إدراج فقرة',\n        'undo': 'تراجع عن آخر أمر',\n        'redo': 'إعادة تنفيذ آخر أمر',\n        'tab': 'إزاحة (تاب)',\n        'untab': 'سحب النص باتجاه البداية',\n        'bold': 'تنسيق عريض',\n        'italic': 'تنسيق مائل',\n        'underline': 'تنسيق خط سفلي',\n        'strikethrough': 'تنسيق خط متوسط للنص',\n        'removeFormat': 'إزالة التنسيقات',\n        'justifyLeft': 'محاذاة لليسار',\n        'justifyCenter': 'محاذاة توسيط',\n        'justifyRight': 'محاذاة لليمين',\n        'justifyFull': 'محاذاة كاملة',\n        'insertUnorderedList': 'قائمة منقّطة',\n        'insertOrderedList': 'قائمة مرقّمة',\n        'outdent': 'إزاحة للأمام على الفقرة الحالية',\n        'indent': 'إزاحة للخلف على الفقرة الحالية',\n        'formatPara': 'تغيير التنسيق للكتلة الحالية إلى فقرة',\n        'formatH1': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 1',\n        'formatH2': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 2',\n        'formatH3': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 3',\n        'formatH4': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 4',\n        'formatH5': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 5',\n        'formatH6': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 6',\n        'insertHorizontalRule': 'إدراج خط أفقي',\n        'linkDialog.show': 'إظهار خصائص الرابط'\n      },\n      history: {\n        undo: 'تراجع',\n        redo: 'إعادة'\n      },\n      specialChar: {\n        specialChar: 'محارف خاصة',\n        select: 'اختر المحرف الخاص'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-ar-AR.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-az-AZ.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n//Summernote WYSIWYG  editor ucun Azerbaycan dili fayli\n//Tercume etdi: RAMIL ALIYEV\n//Tarix: 20.07.2019\n//Baki Azerbaycan\n//Website: https://ramilaliyev.com\n\n//Azerbaijan language for Summernote WYSIWYG \n//Translated by: RAMIL ALIYEV\n//Date: 20.07.2019\n//Baku Azerbaijan\n//Website: https://ramilaliyev.com\n\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'az-AZ': {\n      font: {\n        bold: 'Qalın',\n        italic: 'Əyri',\n        underline: 'Altı xətli',\n        clear: 'Təmizlə',\n        height: 'Sətir hündürlüyü',\n        name: 'Yazı Tipi',\n        strikethrough: 'Üstü xətli',\n        subscript: 'Alt simvol',\n        superscript: 'Üst simvol',\n        size: 'Yazı ölçüsü'\n      },\n      image: {\n        image: 'Şəkil',\n        insert: 'Şəkil əlavə et',\n        resizeFull: 'Original ölçü',\n        resizeHalf: '1/2 ölçü',\n        resizeQuarter: '1/4 ölçü',\n        floatLeft: 'Sola çək',\n        floatRight: 'Sağa çək',\n        floatNone: 'Sola-sağa çəkilməni ləğv et',\n        shapeRounded: 'Şəkil: yuvarlaq künç',\n        shapeCircle: 'Şəkil: Dairə',\n        shapeThumbnail: 'Şəkil: Thumbnail',\n        shapeNone: 'Şəkil: Yox',\n        dragImageHere: 'Bura sürüşdür',\n        dropImage: 'Şəkil və ya mətni buraxın',\n        selectFromFiles: 'Sənəd seçin',\n        maximumFileSize: 'Maksimum sənəd ölçüsü',\n        maximumFileSizeError: 'Maksimum sənəd ölçüsünü keçdiniz.',\n        url: 'Şəkil linki',\n        remove: 'Şəkli sil',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video linki',\n        insert: 'Video əlavə et',\n        url: 'Video linki?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion və ya Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link əlavə et',\n        unlink: 'Linki sil',\n        edit: 'Linkə düzəliş et',\n        textToDisplay: 'Ekranda göstəriləcək link adı',\n        url: 'Link ünvanı?',\n        openInNewWindow: 'Yeni pəncərədə aç'\n      },\n      table: {\n        table: 'Cədvəl',\n        addRowAbove: 'Yuxarı sətir əlavə et',\n        addRowBelow: 'Aşağı sətir əlavə et',\n        addColLeft: 'Sola sütun əlavə et',\n        addColRight: 'Sağa sütun əlavə et',\n        delRow: 'Sətiri sil',\n        delCol: 'Sütunu sil',\n        delTable: 'Cədvəli sil'\n      },\n      hr: {\n        insert: 'Üfuqi xətt əlavə et'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'İstinad',\n        pre: 'Ön baxış',\n        h1: 'Başlıq 1',\n        h2: 'Başlıq 2',\n        h3: 'Başlıq 3',\n        h4: 'Başlıq 4',\n        h5: 'Başlıq 5',\n        h6: 'Başlıq 6'\n      },\n      lists: {\n        unordered: 'Nizamsız sıra',\n        ordered: 'Nizamlı sıra'\n      },\n      options: {\n        help: 'Kömək',\n        fullscreen: 'Tam ekran',\n        codeview: 'HTML Kodu'\n      },\n      paragraph: {\n        paragraph: 'Paraqraf',\n        outdent: 'Girintini artır',\n        indent: 'Girintini azalt',\n        left: 'Sola çək',\n        center: 'Ortaya çək',\n        right: 'Sağa çək',\n        justify: 'Sola və sağa çək'\n      },\n      color: {\n        recent: 'Son rənk',\n        more: 'Daha çox rənk',\n        background: 'Arxa fon rəngi',\n        foreground: 'Yazı rıngi',\n        transparent: 'Şəffaflıq',\n        setTransparent: 'Şəffaflığı nizamla',\n        reset: 'Sıfırla',\n        resetToDefault: 'Susyama görə sıfırla'\n      },\n      shortcut: {\n        shortcuts: 'Qısayollar',\n        close: 'Bağla',\n        textFormatting: 'Yazı formatlandırmaq',\n        action: 'Hadisə',\n        paragraphFormatting: 'Paraqraf formatlandırmaq',\n        documentStyle: 'Sənəd stili',\n        extraKeys: 'Əlavə'\n      },\n      help: {\n        'insertParagraph': 'Paraqraf əlavə etmək',\n        'undo': 'Son əmri geri alır',\n        'redo': 'Son əmri irəli alır',\n        'tab': 'Girintini artırır',\n        'untab': 'Girintini azaltır',\n        'bold': 'Qalın yazma stilini nizamlayır',\n        'italic': 'İtalik yazma stilini nizamlayır',\n        'underline': 'Altı xətli yazma stilini nizamlayır',\n        'strikethrough': 'Üstü xətli yazma stilini nizamlayır',\n        'removeFormat': 'Formatlandırmanı ləğv edir',\n        'justifyLeft': 'Yazını sola çəkir',\n        'justifyCenter': 'Yazını ortaya çəkir',\n        'justifyRight': 'Yazını sağa çəkir',\n        'justifyFull': 'Yazını hər iki tərəfə yazır',\n        'insertUnorderedList': 'Nizamsız sıra əlavə edir',\n        'insertOrderedList': 'Nizamlı sıra əlavə edir',\n        'outdent': 'Aktiv paraqrafın girintisini azaltır',\n        'indent': 'Aktiv paragrafın girintisini artırır',\n        'formatPara': 'Aktiv bloqun formatını paraqraf (p) olaraq dəyişdirir',\n        'formatH1': 'Aktiv bloqun formatını başlıq 1 (h1) olaraq dəyişdirir',\n        'formatH2': 'Aktiv bloqun formatını başlıq 2 (h2) olaraq dəyişdirir',\n        'formatH3': 'Aktiv bloqun formatını başlıq 3 (h3) olaraq dəyişdirir',\n        'formatH4': 'Aktiv bloqun formatını başlıq 4 (h4) olaraq dəyişdirir',\n        'formatH5': 'Aktiv bloqun formatını başlıq 5 (h5) olaraq dəyişdirir',\n        'formatH6': 'Aktiv bloqun formatını başlıq 6 (h6) olaraq dəyişdirir',\n        'insertHorizontalRule': 'Üfuqi xətt əlavə edir',\n        'linkDialog.show': 'Link parametrləri qutusunu göstərir'\n      },\n      history: {\n        undo: 'Əvvəlki vəziyyət',\n        redo: 'Sonrakı vəziyyət'\n      },\n      specialChar: {\n        specialChar: 'Xüsusi simvollar',\n        select: 'Xüsusi simvolları seçin'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-az-AZ.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-bg-BG.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'bg-BG': {\n      font: {\n        bold: 'Удебелен',\n        italic: 'Наклонен',\n        underline: 'Подчертан',\n        clear: 'Изчисти стиловете',\n        height: 'Височина',\n        name: 'Шрифт',\n        strikethrough: 'Задраскано',\n        subscript: 'Долен индекс',\n        superscript: 'Горен индекс',\n        size: 'Размер на шрифта'\n      },\n      image: {\n        image: 'Изображение',\n        insert: 'Постави картинка',\n        resizeFull: 'Цял размер',\n        resizeHalf: 'Размер на 50%',\n        resizeQuarter: 'Размер на 25%',\n        floatLeft: 'Подравни в ляво',\n        floatRight: 'Подравни в дясно',\n        floatNone: 'Без подравняване',\n        shapeRounded: 'Форма: Заоблено',\n        shapeCircle: 'Форма: Кръг',\n        shapeThumbnail: 'Форма: Миниатюра',\n        shapeNone: 'Форма: Без',\n        dragImageHere: 'Пуснете изображението тук',\n        dropImage: 'Пуснете Изображение или Текст',\n        selectFromFiles: 'Изберете файл',\n        maximumFileSize: 'Максимален размер на файла',\n        maximumFileSizeError: 'Достигнат Максимален размер на файла.',\n        url: 'URL адрес на изображение',\n        remove: 'Премахни изображение',\n        original: 'Оригинал'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Видео линк',\n        insert: 'Добави Видео',\n        url: 'Видео URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Връзка',\n        insert: 'Добави връзка',\n        unlink: 'Премахни връзка',\n        edit: 'Промени',\n        textToDisplay: 'Текст за показване',\n        url: 'URL адрес',\n        openInNewWindow: 'Отвори в нов прозорец'\n      },\n      table: {\n        table: 'Таблица',\n        addRowAbove: 'Добави ред отгоре',\n        addRowBelow: 'Добави ред отдолу',\n        addColLeft: 'Добави колона отляво',\n        addColRight: 'Добави колона отдясно',\n        delRow: 'Изтрии ред',\n        delCol: 'Изтрии колона',\n        delTable: 'Изтрии таблица'\n      },\n      hr: {\n        insert: 'Добави хоризонтална линия'\n      },\n      style: {\n        style: 'Стил',\n        p: 'Нормален',\n        blockquote: 'Цитат',\n        pre: 'Код',\n        h1: 'Заглавие 1',\n        h2: 'Заглавие 2',\n        h3: 'Заглавие 3',\n        h4: 'Заглавие 4',\n        h5: 'Заглавие 5',\n        h6: 'Заглавие 6'\n      },\n      lists: {\n        unordered: 'Символен списък',\n        ordered: 'Цифров списък'\n      },\n      options: {\n        help: 'Помощ',\n        fullscreen: 'На цял екран',\n        codeview: 'Преглед на код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Намаляване на отстъпа',\n        indent: 'Абзац',\n        left: 'Подравняване в ляво',\n        center: 'Център',\n        right: 'Подравняване в дясно',\n        justify: 'Разтягане по ширина'\n      },\n      color: {\n        recent: 'Последния избран цвят',\n        more: 'Още цветове',\n        background: 'Цвят на фона',\n        foreground: 'Цвят на шрифта',\n        transparent: 'Прозрачен',\n        setTransparent: 'Направете прозрачен',\n        reset: 'Възстанови',\n        resetToDefault: 'Възстанови оригиналните',\n        cpSelect: 'Изберете'\n      },\n      shortcut: {\n        shortcuts: 'Клавишни комбинации',\n        close: 'Затвори',\n        textFormatting: 'Форматиране на текста',\n        action: 'Действие',\n        paragraphFormatting: 'Форматиране на параграф',\n        documentStyle: 'Стил на документа',\n        extraKeys: 'Екстра бутони'\n      },\n      help: {\n        'insertParagraph': 'Добави Параграф',\n        'undo': 'Отмени последната промяна',\n        'redo': 'Върни последната промяна',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Удебели',\n        'italic': 'Приложи наклонен стил',\n        'underline': 'Приложи подчераване',\n        'strikethrough': 'Приложи зачеркнат стил',\n        'removeFormat': 'Изчисти стилове',\n        'justifyLeft': 'Подравняване в ляво',\n        'justifyCenter': 'Подравняване в центъра',\n        'justifyRight': 'Подравняване в дясно',\n        'justifyFull': 'Двустранно подравняване',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Вмъкни хоризонтално правило',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Назад',\n        redo: 'Напред'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Избери Специални символи'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-bg-BG.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-bn-BD.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'bn-BD': {\n      font: {\n        bold: 'গাঢ়',\n        italic: 'তির্যক',\n        underline: 'নিন্মরেখা',\n        clear: 'ফন্টের শৈলী সরান',\n        height: 'লাইনের উচ্চতা',\n        name: 'ফন্ট পরিবার',\n        strikethrough: 'অবচ্ছেদন',\n        subscript: 'নিম্নলিপি',\n        superscript: 'উর্ধ্বলিপি',\n        size: 'ফন্টের আকার',\n        sizeunit: 'ফন্টের আকারের একক'\n      },\n      image: {\n        image: 'ছবি',\n        insert: 'ছবি যোগ করুন',\n        resizeFull: 'পূর্ণ আকারে নিন',\n        resizeHalf: 'অর্ধ আকারে নিন',\n        resizeQuarter: 'চতুর্থাংশ আকারে নিন',\n        resizeNone: 'আসল আকার',\n        floatLeft: 'বামে নিন',\n        floatRight: 'ডানে নিন',\n        floatNone: 'দিক সরান',\n        shapeRounded: 'আকৃতি: গোলাকার',\n        shapeCircle: 'আকৃতি: বৃত্ত',\n        shapeThumbnail: 'আকৃতি: থাম্বনেইল',\n        shapeNone: 'আকৃতি: কিছু নয়',\n        dragImageHere: 'এখানে ছবি বা লেখা টেনে আনুন',\n        dropImage: 'ছবি বা লেখা ছাড়ুন',\n        selectFromFiles: 'ফাইল থেকে নির্বাচন করুন',\n        maximumFileSize: 'সর্বোচ্চ ফাইলের আকার',\n        maximumFileSizeError: 'সর্বোচ্চ ফাইলের আকার অতিক্রম করেছে।',\n        url: 'ছবির URL',\n        remove: 'ছবি সরান',\n        original: 'আসল'\n      },\n      video: {\n        video: 'ভিডিও',\n        videoLink: 'ভিডিওর লিঙ্ক',\n        insert: 'ভিডিও সন্নিবেশ করুন',\n        url: 'ভিডিওর URL',\n        providers: '(ইউটিউব, গুগল ড্রাইভ, ভিমিও, ভিন, ইনস্টাগ্রাম, ডেইলিমোশন বা ইউকু)'\n      },\n      link: {\n        link: 'লিঙ্ক',\n        insert: 'লিঙ্ক সন্নিবেশ করুন',\n        unlink: 'লিঙ্কমুক্ত করুন',\n        edit: 'সম্পাদনা করুন',\n        textToDisplay: 'দেখানোর জন্য লেখা',\n        url: 'এই লিঙ্কটি কোন URL-এ যাবে?',\n        openInNewWindow: 'নতুন উইন্ডোতে খুলুন'\n      },\n      table: {\n        table: 'ছক',\n        addRowAbove: 'উপরে সারি যোগ করুন',\n        addRowBelow: 'নিচে সারি যোগ করুন',\n        addColLeft: 'বামে কলাম যোগ করুন',\n        addColRight: 'ডানে কলাম যোগ করুন',\n        delRow: 'সারি মুছুন',\n        delCol: 'কলাম মুছুন',\n        delTable: 'ছক মুছুন'\n      },\n      hr: {\n        insert: 'বিভাজক রেখা সন্নিবেশ করুন'\n      },\n      style: {\n        style: 'শৈলী',\n        p: 'সাধারণ',\n        blockquote: 'উক্তি',\n        pre: 'কোড',\n        h1: 'শীর্ষক ১',\n        h2: 'শীর্ষক ২',\n        h3: 'শীর্ষক ৩',\n        h4: 'শীর্ষক ৪',\n        h5: 'শীর্ষক ৫',\n        h6: 'শীর্ষক ৬'\n      },\n      lists: {\n        unordered: 'অবিন্যস্ত তালিকা',\n        ordered: 'বিন্যস্ত তালিকা'\n      },\n      options: {\n        help: 'সাহায্য',\n        fullscreen: 'পূর্ণ পর্দা',\n        codeview: 'কোড দৃশ্য'\n      },\n      paragraph: {\n        paragraph: 'অনুচ্ছেদ',\n        outdent: 'ঋণাত্মক প্রান্তিককরণ',\n        indent: 'প্রান্তিককরণ',\n        left: 'বামে সারিবদ্ধ করুন',\n        center: 'কেন্দ্রে সারিবদ্ধ করুন',\n        right: 'ডানে সারিবদ্ধ করুন',\n        justify: 'যথাযথ ফাঁক দিয়ে সাজান'\n      },\n      color: {\n        recent: 'সাম্প্রতিক রং',\n        more: 'আরও রং',\n        background: 'পটভূমির রং',\n        foreground: 'লেখার রং',\n        transparent: 'স্বচ্ছ',\n        setTransparent: 'স্বচ্ছ নির্ধারণ করুন',\n        reset: 'পুনঃস্থাপন করুন',\n        resetToDefault: 'পূর্বনির্ধারিত ফিরিয়ে আনুন',\n        cpSelect: 'নির্বাচন করুন'\n      },\n      shortcut: {\n        shortcuts: 'কীবোর্ড শর্টকাট',\n        close: 'বন্ধ করুন',\n        textFormatting: 'লেখার বিন্যাসন',\n        action: 'কার্য',\n        paragraphFormatting: 'অনুচ্ছেদের বিন্যাসন',\n        documentStyle: 'নথির শৈলী',\n        extraKeys: 'অতিরিক্ত কীগুলি'\n      },\n      help: {\n        'escape': 'এস্কেপ',\n        'insertParagraph': 'অনুচ্ছেদ সন্নিবেশ',\n        'undo': 'শেষ কমান্ড পূর্বাবস্থায় ফেরত',\n        'redo': 'শেষ কমান্ড পুনরায় করা',\n        'tab': 'ট্যাব',\n        'untab': 'অ-ট্যাব',\n        'bold': 'গাঢ় শৈলী নির্ধারণ',\n        'italic': 'তির্যক শৈলী নির্ধারণ',\n        'underline': 'নিম্নরেখার শৈলী নির্ধারণ',\n        'strikethrough': 'অবচ্ছেদনের শৈলী নির্ধারণ',\n        'removeFormat': 'শৈলী পরিষ্কার',\n        'justifyLeft': 'বামের সারিবন্ধন নির্ধারণ',\n        'justifyCenter': 'কেন্দ্রের সারিবন্ধন নির্ধারণ',\n        'justifyRight': 'ডানের সারিবন্ধন নির্ধারণ',\n        'justifyFull': 'পূর্ণ সারিবন্ধন নির্ধারণ',\n        'insertUnorderedList': 'অবিন্যস্ত তালিকা টগল',\n        'insertOrderedList': 'বিন্যস্ত তালিকা টগল',\n        'outdent': 'বর্তমান অনুচ্ছেদে ঋণাত্মক প্রান্তিককরণ',\n        'indent': 'বর্তমান অনুচ্ছেদে প্রান্তিককরণ',\n        'formatPara': 'বর্তমান ব্লকের বিন্যাসটি অনুচ্ছেদ হিসেবে পরিবর্তন (P ট্যাগ)',\n        'formatH1': 'বর্তমান ব্লকের বিন্যাসটি H1 হিসেবে পরিবর্তন',\n        'formatH2': 'বর্তমান ব্লকের বিন্যাসটি H2 হিসেবে পরিবর্তন',\n        'formatH3': 'বর্তমান ব্লকের বিন্যাসটি H3 হিসেবে পরিবর্তন',\n        'formatH4': 'বর্তমান ব্লকের বিন্যাসটি H4 হিসেবে পরিবর্তন',\n        'formatH5': 'বর্তমান ব্লকের বিন্যাসটি H5 হিসেবে পরিবর্তন',\n        'formatH6': 'বর্তমান ব্লকের বিন্যাসটি H6 হিসেবে পরিবর্তন',\n        'insertHorizontalRule': 'বিভাজক রেখা সন্নিবেশ',\n        'linkDialog.show': 'লিংক ডায়ালগ প্রদর্শন'\n      },\n      history: {\n        undo: 'পূর্বাবস্থায় আনুন',\n        redo: 'পুনঃকরুন'\n      },\n      specialChar: {\n        specialChar: 'বিশেষ অক্ষর',\n        select: 'বিশেষ অক্ষর নির্বাচন করুন'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-bn-BD.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-ca-ES.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'ca-ES': {\n      font: {\n        bold: 'Negreta',\n        italic: 'Cursiva',\n        underline: 'Subratllat',\n        clear: 'Treure estil de lletra',\n        height: 'Alçada de línia',\n        name: 'Font',\n        strikethrough: 'Ratllat',\n        subscript: 'Subíndex',\n        superscript: 'Superíndex',\n        size: 'Mida de lletra'\n      },\n      image: {\n        image: 'Imatge',\n        insert: 'Inserir imatge',\n        resizeFull: 'Redimensionar a mida completa',\n        resizeHalf: 'Redimensionar a la meitat',\n        resizeQuarter: 'Redimensionar a un quart',\n        floatLeft: 'Alinear a l\\'esquerra',\n        floatRight: 'Alinear a la dreta',\n        floatNone: 'No alinear',\n        shapeRounded: 'Forma: Arrodonit',\n        shapeCircle: 'Forma: Cercle',\n        shapeThumbnail: 'Forma: Marc',\n        shapeNone: 'Forma: Cap',\n        dragImageHere: 'Arrossegueu una imatge o text aquí',\n        dropImage: 'Deixa anar aquí una imatge o un text',\n        selectFromFiles: 'Seleccioneu des dels arxius',\n        maximumFileSize: 'Mida màxima de l\\'arxiu',\n        maximumFileSizeError: 'La mida màxima de l\\'arxiu s\\'ha superat.',\n        url: 'URL de la imatge',\n        remove: 'Eliminar imatge',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Enllaç del vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL del vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Enllaç',\n        insert: 'Inserir enllaç',\n        unlink: 'Treure enllaç',\n        edit: 'Editar',\n        textToDisplay: 'Text per mostrar',\n        url: 'Cap a quina URL porta l\\'enllaç?',\n        openInNewWindow: 'Obrir en una finestra nova'\n      },\n      table: {\n        table: 'Taula',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Inserir línia horitzontal'\n      },\n      style: {\n        style: 'Estil',\n        p: 'p',\n        blockquote: 'Cita',\n        pre: 'Codi',\n        h1: 'Títol 1',\n        h2: 'Títol 2',\n        h3: 'Títol 3',\n        h4: 'Títol 4',\n        h5: 'Títol 5',\n        h6: 'Títol 6'\n      },\n      lists: {\n        unordered: 'Llista desendreçada',\n        ordered: 'Llista endreçada'\n      },\n      options: {\n        help: 'Ajut',\n        fullscreen: 'Pantalla sencera',\n        codeview: 'Veure codi font'\n      },\n      paragraph: {\n        paragraph: 'Paràgraf',\n        outdent: 'Menys tabulació',\n        indent: 'Més tabulació',\n        left: 'Alinear a l\\'esquerra',\n        center: 'Alinear al mig',\n        right: 'Alinear a la dreta',\n        justify: 'Justificar'\n      },\n      color: {\n        recent: 'Últim color',\n        more: 'Més colors',\n        background: 'Color de fons',\n        foreground: 'Color de lletra',\n        transparent: 'Transparent',\n        setTransparent: 'Establir transparent',\n        reset: 'Restablir',\n        resetToDefault: 'Restablir per defecte'\n      },\n      shortcut: {\n        shortcuts: 'Dreceres de teclat',\n        close: 'Tancar',\n        textFormatting: 'Format de text',\n        action: 'Acció',\n        paragraphFormatting: 'Format de paràgraf',\n        documentStyle: 'Estil del document',\n        extraKeys: 'Tecles adicionals'\n      },\n      help: {\n        'insertParagraph': 'Inserir paràgraf',\n        'undo': 'Desfer l\\'última acció',\n        'redo': 'Refer l\\'última acció',\n        'tab': 'Tabular',\n        'untab': 'Eliminar tabulació',\n        'bold': 'Establir estil negreta',\n        'italic': 'Establir estil cursiva',\n        'underline': 'Establir estil subratllat',\n        'strikethrough': 'Establir estil ratllat',\n        'removeFormat': 'Netejar estil',\n        'justifyLeft': 'Alinear a l\\'esquerra',\n        'justifyCenter': 'Alinear al centre',\n        'justifyRight': 'Alinear a la dreta',\n        'justifyFull': 'Justificar',\n        'insertUnorderedList': 'Inserir llista desendreçada',\n        'insertOrderedList': 'Inserir llista endreçada',\n        'outdent': 'Reduïr tabulació del paràgraf',\n        'indent': 'Augmentar tabulació del paràgraf',\n        'formatPara': 'Canviar l\\'estil del bloc com a un paràgraf (etiqueta P)',\n        'formatH1': 'Canviar l\\'estil del bloc com a un H1',\n        'formatH2': 'Canviar l\\'estil del bloc com a un H2',\n        'formatH3': 'Canviar l\\'estil del bloc com a un H3',\n        'formatH4': 'Canviar l\\'estil del bloc com a un H4',\n        'formatH5': 'Canviar l\\'estil del bloc com a un H5',\n        'formatH6': 'Canviar l\\'estil del bloc com a un H6',\n        'insertHorizontalRule': 'Inserir una línia horitzontal',\n        'linkDialog.show': 'Mostrar panel d\\'enllaços'\n      },\n      history: {\n        undo: 'Desfer',\n        redo: 'Refer'\n      },\n      specialChar: {\n        specialChar: 'CARÀCTERS ESPECIALS',\n        select: 'Selecciona caràcters especials'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-ca-ES.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-cs-CZ.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'cs-CZ': {\n      font: {\n        bold: 'Tučné',\n        italic: 'Kurzíva',\n        underline: 'Podtržené',\n        clear: 'Odstranit styl písma',\n        height: 'Výška řádku',\n        strikethrough: 'Přeškrtnuté',\n        size: 'Velikost písma'\n      },\n      image: {\n        image: 'Obrázek',\n        insert: 'Vložit obrázek',\n        resizeFull: 'Původní velikost',\n        resizeHalf: 'Poloviční velikost',\n        resizeQuarter: 'Čtvrteční velikost',\n        floatLeft: 'Umístit doleva',\n        floatRight: 'Umístit doprava',\n        floatNone: 'Neobtékat textem',\n        shapeRounded: 'Tvar: zaoblený',\n        shapeCircle: 'Tvar: kruh',\n        shapeThumbnail: 'Tvar: náhled',\n        shapeNone: 'Tvar: žádný',\n        dragImageHere: 'Přetáhnout sem obrázek',\n        dropImage: 'Přetáhnout obrázek nebo text',\n        selectFromFiles: 'Vybrat soubor',\n        url: 'URL obrázku',\n        remove: 'Odebrat obrázek',\n        original: 'Originál'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Odkaz videa',\n        insert: 'Vložit video',\n        url: 'URL videa?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)'\n      },\n      link: {\n        link: 'Odkaz',\n        insert: 'Vytvořit odkaz',\n        unlink: 'Zrušit odkaz',\n        edit: 'Upravit',\n        textToDisplay: 'Zobrazovaný text',\n        url: 'Na jaké URL má tento odkaz vést?',\n        openInNewWindow: 'Otevřít v novém okně'\n      },\n      table: {\n        table: 'Tabulka',\n        addRowAbove: 'Přidat řádek nad',\n        addRowBelow: 'Přidat řádek pod',\n        addColLeft: 'Přidat sloupec vlevo',\n        addColRight: 'Přidat sloupec vpravo',\n        delRow: 'Smazat řádek',\n        delCol: 'Smazat sloupec',\n        delTable: 'Smazat tabulku'\n      },\n      hr: {\n        insert: 'Vložit vodorovnou čáru'\n      },\n      style: {\n        style: 'Styl',\n        p: 'Normální',\n        blockquote: 'Citace',\n        pre: 'Kód',\n        h1: 'Nadpis 1',\n        h2: 'Nadpis 2',\n        h3: 'Nadpis 3',\n        h4: 'Nadpis 4',\n        h5: 'Nadpis 5',\n        h6: 'Nadpis 6'\n      },\n      lists: {\n        unordered: 'Odrážkový seznam',\n        ordered: 'Číselný seznam'\n      },\n      options: {\n        help: 'Nápověda',\n        fullscreen: 'Celá obrazovka',\n        codeview: 'HTML kód'\n      },\n      paragraph: {\n        paragraph: 'Odstavec',\n        outdent: 'Předsadit',\n        indent: 'Odsadit',\n        left: 'Zarovnat doleva',\n        center: 'Zarovnat na střed',\n        right: 'Zarovnat doprava',\n        justify: 'Zarovnat oboustranně'\n      },\n      color: {\n        recent: 'Aktuální barva',\n        more: 'Další barvy',\n        background: 'Barva pozadí',\n        foreground: 'Barva písma',\n        transparent: 'Průhlednost',\n        setTransparent: 'Nastavit průhlednost',\n        reset: 'Obnovit',\n        resetToDefault: 'Obnovit výchozí',\n        cpSelect: 'Vybrat'\n      },\n      shortcut: {\n        shortcuts: 'Klávesové zkratky',\n        close: 'Zavřít',\n        textFormatting: 'Formátování textu',\n        action: 'Akce',\n        paragraphFormatting: 'Formátování odstavce',\n        documentStyle: 'Styl dokumentu'\n      },\n      help: {\n        'insertParagraph': 'Vložit odstavec',\n        'undo': 'Vrátit poslední příkaz',\n        'redo': 'Opakovat poslední příkaz',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Nastavit tučně',\n        'italic': 'Nastavit kurzívu',\n        'underline': 'Nastavit podtrhnutí',\n        'strikethrough': 'Nastavit přeškrtnutí',\n        'removeFormat': 'Ostranit nastavený styl',\n        'justifyLeft': 'Nastavit zarovnání vlevo',\n        'justifyCenter': 'Nastavit zarovnání na střed',\n        'justifyRight': 'Nastavit zarovnání vpravo',\n        'justifyFull': 'Nastavit zarovnání do bloku',\n        'insertUnorderedList': 'Aplikovat odrážkový seznam',\n        'insertOrderedList': 'Aplikovat číselný seznam',\n        'outdent': 'Zmenšit odsazení aktuálního odstavec',\n        'indent': 'Odsadit aktuální odstavec',\n        'formatPara': 'Změnit formátování aktuálního bloku na odstavec (P tag)',\n        'formatH1': 'Změnit formátování aktuálního bloku na Nadpis 1',\n        'formatH2': 'Změnit formátování aktuálního bloku na Nadpis 2',\n        'formatH3': 'Změnit formátování aktuálního bloku na Nadpis 3',\n        'formatH4': 'Změnit formátování aktuálního bloku na Nadpis 4',\n        'formatH5': 'Změnit formátování aktuálního bloku na Nadpis 5',\n        'formatH6': 'Změnit formátování aktuálního bloku na Nadpis 6',\n        'insertHorizontalRule': 'Vložit horizontální čáru',\n        'linkDialog.show': 'Zobrazit dialog pro odkaz'\n      },\n      history: {\n        undo: 'Krok vzad',\n        redo: 'Krok vpřed'\n      },\n      specialChar: {\n        specialChar: 'SPECIÁLNÍ ZNAKY',\n        select: 'Vyberte speciální znaky'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-cs-CZ.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-da-DK.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'da-DK': {\n      font: {\n        bold: 'Fed',\n        italic: 'Kursiv',\n        underline: 'Understreget',\n        clear: 'Fjern formatering',\n        height: 'Højde',\n        name: 'Skrifttype',\n        strikethrough: 'Gennemstreget',\n        subscript: 'Sænket skrift',\n        superscript: 'Hævet skrift',\n        size: 'Skriftstørrelse'\n      },\n      image: {\n        image: 'Billede',\n        insert: 'Indsæt billede',\n        resizeFull: 'Original størrelse',\n        resizeHalf: 'Halv størrelse',\n        resizeQuarter: 'Kvart størrelse',\n        floatLeft: 'Venstrestillet',\n        floatRight: 'Højrestillet',\n        floatNone: 'Fjern formatering',\n        shapeRounded: 'Form: Runde kanter',\n        shapeCircle: 'Form: Cirkel',\n        shapeThumbnail: 'Form: Miniature',\n        shapeNone: 'Form: Ingen',\n        dragImageHere: 'Træk billede hertil',\n        dropImage: 'Slip billede',\n        selectFromFiles: 'Vælg billed-fil',\n        maximumFileSize: 'Maks fil størrelse',\n        maximumFileSizeError: 'Filen er større end maks tilladte fil størrelse!',\n        url: 'Billede URL',\n        remove: 'Fjern billede',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Indsæt Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Indsæt link',\n        unlink: 'Fjern link',\n        edit: 'Rediger',\n        textToDisplay: 'Visningstekst',\n        url: 'Hvor skal linket pege hen?',\n        openInNewWindow: 'Åbn i nyt vindue'\n      },\n      table: {\n        table: 'Tabel',\n        addRowAbove: 'Tilføj række over',\n        addRowBelow: 'Tilføj række under',\n        addColLeft: 'Tilføj venstre kolonne',\n        addColRight: 'Tilføj højre kolonne',\n        delRow: 'Slet række',\n        delCol: 'Slet kolonne',\n        delTable: 'Slet tabel'\n      },\n      hr: {\n        insert: 'Indsæt horisontal linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Kode',\n        h1: 'Overskrift 1',\n        h2: 'Overskrift 2',\n        h3: 'Overskrift 3',\n        h4: 'Overskrift 4',\n        h5: 'Overskrift 5',\n        h6: 'Overskrift 6'\n      },\n      lists: {\n        unordered: 'Punktopstillet liste',\n        ordered: 'Nummereret liste'\n      },\n      options: {\n        help: 'Hjælp',\n        fullscreen: 'Fuld skærm',\n        codeview: 'HTML-Visning'\n      },\n      paragraph: {\n        paragraph: 'Afsnit',\n        outdent: 'Formindsk indryk',\n        indent: 'Forøg indryk',\n        left: 'Venstrestillet',\n        center: 'Centreret',\n        right: 'Højrestillet',\n        justify: 'Blokjuster'\n      },\n      color: {\n        recent: 'Nyligt valgt farve',\n        more: 'Flere farver',\n        background: 'Baggrund',\n        foreground: 'Forgrund',\n        transparent: 'Transparent',\n        setTransparent: 'Sæt transparent',\n        reset: 'Nulstil',\n        resetToDefault: 'Gendan standardindstillinger'\n      },\n      shortcut: {\n        shortcuts: 'Genveje',\n        close: 'Luk',\n        textFormatting: 'Tekstformatering',\n        action: 'Handling',\n        paragraphFormatting: 'Afsnitsformatering',\n        documentStyle: 'Dokumentstil',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Indsæt paragraf',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Vis Link Dialog'\n      },\n      history: {\n        undo: 'Fortryd',\n        redo: 'Annuller fortryd'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Vælg special karakterer'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-da-DK.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-de-CH.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'de-CH': {\n      font: {\n        bold: 'Fett',\n        italic: 'Kursiv',\n        underline: 'Unterstrichen',\n        clear: 'Zurücksetzen',\n        height: 'Zeilenhöhe',\n        name: 'Schriftart',\n        strikethrough: 'Durchgestrichen',\n        subscript: 'Tiefgestellt',\n        superscript: 'Hochgestellt',\n        size: 'Schriftgrösse'\n      },\n      image: {\n        image: 'Bild',\n        insert: 'Bild einfügen',\n        resizeFull: 'Originalgrösse',\n        resizeHalf: '1/2 Grösse',\n        resizeQuarter: '1/4 Grösse',\n        floatLeft: 'Linksbündig',\n        floatRight: 'Rechtsbündig',\n        floatNone: 'Kein Textfluss',\n        shapeRounded: 'Abgerundete Ecken',\n        shapeCircle: 'Kreisförmig',\n        shapeThumbnail: '\"Vorschaubild\"',\n        shapeNone: 'Kein Rahmen',\n        dragImageHere: 'Bild hierher ziehen',\n        dropImage: 'Bild oder Text nehmen',\n        selectFromFiles: 'Datei auswählen',\n        maximumFileSize: 'Maximale Dateigrösse',\n        maximumFileSizeError: 'Maximale Dateigrösse überschritten',\n        url: 'Bild URL',\n        remove: 'Bild entfernen',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Videolink',\n        insert: 'Video einfügen',\n        url: 'Video URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion oder Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link einfügen',\n        unlink: 'Link entfernen',\n        edit: 'Bearbeiten',\n        textToDisplay: 'Anzeigetext',\n        url: 'Link URL',\n        openInNewWindow: 'In neuem Fenster öffnen'\n      },\n      table: {\n        table: 'Tabelle',\n        addRowAbove: '+ Zeile oberhalb',\n        addRowBelow: '+ Zeile unterhalb',\n        addColLeft: '+ Spalte links',\n        addColRight: '+ Spalte rechts',\n        delRow: 'Zeile löschen',\n        delCol: 'Spalte löschen',\n        delTable: 'Tabelle löschen'\n      },\n      hr: {\n        insert: 'Horizontale Linie einfügen'\n      },\n      style: {\n        style: 'Stil',\n        normal: 'Normal',\n        p: 'Normal',\n        blockquote: 'Zitat',\n        pre: 'Quellcode',\n        h1: 'Überschrift 1',\n        h2: 'Überschrift 2',\n        h3: 'Überschrift 3',\n        h4: 'Überschrift 4',\n        h5: 'Überschrift 5',\n        h6: 'Überschrift 6'\n      },\n      lists: {\n        unordered: 'Aufzählung',\n        ordered: 'Nummerierung'\n      },\n      options: {\n        help: 'Hilfe',\n        fullscreen: 'Vollbild',\n        codeview: 'Quellcode anzeigen'\n      },\n      paragraph: {\n        paragraph: 'Absatz',\n        outdent: 'Einzug verkleinern',\n        indent: 'Einzug vergrössern',\n        left: 'Links ausrichten',\n        center: 'Zentriert ausrichten',\n        right: 'Rechts ausrichten',\n        justify: 'Blocksatz'\n      },\n      color: {\n        recent: 'Letzte Farbe',\n        more: 'Weitere Farben',\n        background: 'Hintergrundfarbe',\n        foreground: 'Schriftfarbe',\n        transparent: 'Transparenz',\n        setTransparent: 'Transparenz setzen',\n        reset: 'Zurücksetzen',\n        resetToDefault: 'Auf Standard zurücksetzen'\n      },\n      shortcut: {\n        shortcuts: 'Tastenkürzel',\n        close: 'Schliessen',\n        textFormatting: 'Textformatierung',\n        action: 'Aktion',\n        paragraphFormatting: 'Absatzformatierung',\n        documentStyle: 'Dokumentenstil',\n        extraKeys: 'Weitere Tasten'\n      },\n      help: {\n        insertParagraph: 'Absatz einfügen',\n        undo: 'Letzte Anweisung rückgängig',\n        redo: 'Letzte Anweisung wiederholen',\n        tab: 'Einzug hinzufügen',\n        untab: 'Einzug entfernen',\n        bold: 'Schrift Fett',\n        italic: 'Schrift Kursiv',\n        underline: 'Unterstreichen',\n        strikethrough: 'Durchstreichen',\n        removeFormat: 'Entfernt Format',\n        justifyLeft: 'Linksbündig',\n        justifyCenter: 'Mittig',\n        justifyRight: 'Rechtsbündig',\n        justifyFull: 'Blocksatz',\n        insertUnorderedList: 'Unnummerierte Liste',\n        insertOrderedList: 'Nummerierte Liste',\n        outdent: 'Aktuellen Absatz ausrücken',\n        indent: 'Aktuellen Absatz einrücken',\n        formatPara: 'Formatiert aktuellen Block als Absatz (P-Tag)',\n        formatH1: 'Formatiert aktuellen Block als H1',\n        formatH2: 'Formatiert aktuellen Block als H2',\n        formatH3: 'Formatiert aktuellen Block als H3',\n        formatH4: 'Formatiert aktuellen Block als H4',\n        formatH5: 'Formatiert aktuellen Block als H5',\n        formatH6: 'Formatiert aktuellen Block als H6',\n        insertHorizontalRule: 'Fügt eine horizontale Linie ein',\n        'linkDialog.show': 'Zeigt den Linkdialog'\n      },\n      history: {\n        undo: 'Rückgängig',\n        redo: 'Wiederholen'\n      },\n      specialChar: {\n        specialChar: 'Sonderzeichen',\n        select: 'Zeichen auswählen'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-de-CH.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-de-DE.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'de-DE': {\n      font: {\n        bold: 'Fett',\n        italic: 'Kursiv',\n        underline: 'Unterstrichen',\n        clear: 'Zurücksetzen',\n        height: 'Zeilenhöhe',\n        name: 'Schriftart',\n        strikethrough: 'Durchgestrichen',\n        subscript: 'Tiefgestellt',\n        superscript: 'Hochgestellt',\n        size: 'Schriftgröße'\n      },\n      image: {\n        image: 'Bild',\n        insert: 'Bild einfügen',\n        resizeFull: 'Originalgröße',\n        resizeHalf: '1/2 Größe',\n        resizeQuarter: '1/4 Größe',\n        floatLeft: 'Linksbündig',\n        floatRight: 'Rechtsbündig',\n        floatNone: 'Kein Textfluss',\n        shapeRounded: 'Abgerundete Ecken',\n        shapeCircle: 'Kreisförmig',\n        shapeThumbnail: '\"Vorschaubild\"',\n        shapeNone: 'Kein Rahmen',\n        dragImageHere: 'Bild hierher ziehen',\n        dropImage: 'Bild oder Text nehmen',\n        selectFromFiles: 'Datei auswählen',\n        maximumFileSize: 'Maximale Dateigröße',\n        maximumFileSizeError: 'Maximale Dateigröße überschritten',\n        url: 'Bild URL',\n        remove: 'Bild entfernen',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Videolink',\n        insert: 'Video einfügen',\n        url: 'Video URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion oder Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link einfügen',\n        unlink: 'Link entfernen',\n        edit: 'Bearbeiten',\n        textToDisplay: 'Anzeigetext',\n        url: 'Link URL',\n        openInNewWindow: 'In neuem Fenster öffnen'\n      },\n      table: {\n        table: 'Tabelle',\n        addRowAbove: '+ Zeile oberhalb',\n        addRowBelow: '+ Zeile unterhalb',\n        addColLeft: '+ Spalte links',\n        addColRight: '+ Spalte rechts',\n        delRow: 'Zeile löschen',\n        delCol: 'Spalte löschen',\n        delTable: 'Tabelle löschen'\n      },\n      hr: {\n        insert: 'Horizontale Linie einfügen'\n      },\n      style: {\n        style: 'Stil',\n        normal: 'Normal',\n        p: 'Normal',\n        blockquote: 'Zitat',\n        pre: 'Quellcode',\n        h1: 'Überschrift 1',\n        h2: 'Überschrift 2',\n        h3: 'Überschrift 3',\n        h4: 'Überschrift 4',\n        h5: 'Überschrift 5',\n        h6: 'Überschrift 6'\n      },\n      lists: {\n        unordered: 'Aufzählung',\n        ordered: 'Nummerierung'\n      },\n      options: {\n        help: 'Hilfe',\n        fullscreen: 'Vollbild',\n        codeview: 'Quellcode anzeigen'\n      },\n      paragraph: {\n        paragraph: 'Absatz',\n        outdent: 'Einzug verkleinern',\n        indent: 'Einzug vergrößern',\n        left: 'Links ausrichten',\n        center: 'Zentriert ausrichten',\n        right: 'Rechts ausrichten',\n        justify: 'Blocksatz'\n      },\n      color: {\n        recent: 'Letzte Farbe',\n        more: 'Weitere Farben',\n        background: 'Hintergrundfarbe',\n        foreground: 'Schriftfarbe',\n        transparent: 'Transparenz',\n        setTransparent: 'Transparenz setzen',\n        reset: 'Zurücksetzen',\n        resetToDefault: 'Auf Standard zurücksetzen'\n      },\n      shortcut: {\n        shortcuts: 'Tastenkürzel',\n        close: 'Schließen',\n        textFormatting: 'Textformatierung',\n        action: 'Aktion',\n        paragraphFormatting: 'Absatzformatierung',\n        documentStyle: 'Dokumentenstil',\n        extraKeys: 'Weitere Tasten'\n      },\n      help: {\n        insertParagraph: 'Absatz einfügen',\n        undo: 'Letzte Anweisung rückgängig',\n        redo: 'Letzte Anweisung wiederholen',\n        tab: 'Einzug hinzufügen',\n        untab: 'Einzug entfernen',\n        bold: 'Schrift Fett',\n        italic: 'Schrift Kursiv',\n        underline: 'Unterstreichen',\n        strikethrough: 'Durchstreichen',\n        removeFormat: 'Entfernt Format',\n        justifyLeft: 'Linksbündig',\n        justifyCenter: 'Mittig',\n        justifyRight: 'Rechtsbündig',\n        justifyFull: 'Blocksatz',\n        insertUnorderedList: 'Unnummerierte Liste',\n        insertOrderedList: 'Nummerierte Liste',\n        outdent: 'Aktuellen Absatz ausrücken',\n        indent: 'Aktuellen Absatz einrücken',\n        formatPara: 'Formatiert aktuellen Block als Absatz (P-Tag)',\n        formatH1: 'Formatiert aktuellen Block als H1',\n        formatH2: 'Formatiert aktuellen Block als H2',\n        formatH3: 'Formatiert aktuellen Block als H3',\n        formatH4: 'Formatiert aktuellen Block als H4',\n        formatH5: 'Formatiert aktuellen Block als H5',\n        formatH6: 'Formatiert aktuellen Block als H6',\n        insertHorizontalRule: 'Fügt eine horizontale Linie ein',\n        'linkDialog.show': 'Zeigt den Linkdialog'\n      },\n      history: {\n        undo: 'Rückgängig',\n        redo: 'Wiederholen'\n      },\n      specialChar: {\n        specialChar: 'Sonderzeichen',\n        select: 'Zeichen auswählen'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-de-DE.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-el-GR.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'el-GR': {\n      font: {\n        bold: 'Έντονα',\n        italic: 'Πλάγια',\n        underline: 'Υπογραμμισμένα',\n        clear: 'Καθαρισμός',\n        height: 'Ύψος',\n        name: 'Γραμματοσειρά',\n        strikethrough: 'Διεγραμμένα',\n        subscript: 'Δείκτης',\n        superscript: 'Εκθέτης',\n        size: 'Μέγεθος',\n        sizeunit: 'Μονάδα μεγέθους'\n      },\n      image: {\n        image: 'Εικόνα',\n        insert: 'Εισαγωγή',\n        resizeFull: 'Πλήρες μέγεθος',\n        resizeHalf: 'Μισό μέγεθος',\n        resizeQuarter: '1/4 μέγεθος',\n        resizeNone: 'Αρχικό μέγεθος',\n        floatLeft: 'Μετατόπιση αριστερά',\n        floatRight: 'Μετατόπιση δεξιά',\n        floatNone: 'Χωρίς μετατόπιση',\n        shapeRounded: 'Σχήμα: Στρογγυλεμένο',\n        shapeCircle: 'Σχήμα: Κύκλος',\n        shapeThumbnail: 'Σχήμα: Μικρογραφία',\n        shapeNone: 'Σχήμα: Κανένα',\n        dragImageHere: 'Σύρτε την εικόνα εδώ',\n        dropImage: 'Αφήστε την εικόνα',\n        selectFromFiles: 'Επιλογή από αρχεία',\n        maximumFileSize: 'Μέγιστο μέγεθος αρχείου',\n        maximumFileSizeError: 'Το μέγεθος είναι μεγαλύτερο από το μέγιστο επιτρεπτό.',\n        url: 'URL',\n        remove: 'Αφαίρεση',\n        original: 'Αρχικό'\n      },\n      link: {\n        link: 'Σύνδεσμος',\n        insert: 'Εισαγωγή συνδέσμου',\n        unlink: 'Αφαίρεση συνδέσμου',\n        edit: 'Επεξεργασία συνδέσμου',\n        textToDisplay: 'Κείμενο συνδέσμου',\n        url: 'Σε ποιo URL πρέπει να πηγαίνει αυτός ο σύνδεσμος;',\n        openInNewWindow: 'Άνοιγμα σε νέο παράθυρο'\n      },\n      video: {\n        video: 'Βίντεο',\n        videoLink: 'Σύνδεσμος Βίντεο',\n        insert: 'Εισαγωγή',\n        url: 'URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ή Youku)'\n      },\n      table: {\n        table: 'Πίνακας',\n        addRowAbove: 'Προσθήκη γραμμής πάνω',\n        addRowBelow: 'Προσθήκη γραμμής κάτω',\n        addColLeft: 'Προσθήκη στήλης αριστερά',\n        addColRight: 'Προσθήκη στήλης δεξία',\n        delRow: 'Διαγραφή γραμμής',\n        delCol: 'Διαγραφή στήλης',\n        delTable: 'Διαγραφή πίνακα'\n      },\n      hr: {\n        insert: 'Εισαγωγή οριζόντιας γραμμής'\n      },\n      style: {\n        style: 'Στυλ',\n        normal: 'Κανονικό',\n        blockquote: 'Παράθεση',\n        pre: 'Ως έχει',\n        h1: 'Κεφαλίδα 1',\n        h2: 'Κεφαλίδα 2',\n        h3: 'Κεφαλίδα 3',\n        h4: 'Κεφαλίδα 4',\n        h5: 'Κεφαλίδα 5',\n        h6: 'Κεφαλίδα 6'\n      },\n      lists: {\n        unordered: 'Αταξινόμητη λίστα',\n        ordered: 'Ταξινομημένη λίστα'\n      },\n      options: {\n        help: 'Βοήθεια',\n        fullscreen: 'Πλήρης οθόνη',\n        codeview: 'Προβολή HTML'\n      },\n      paragraph: {\n        paragraph: 'Παράγραφος',\n        outdent: 'Μείωση εσοχής',\n        indent: 'Άυξηση εσοχής',\n        left: 'Αριστερή στοίχιση',\n        center: 'Στοίχιση στο κέντρο',\n        right: 'Δεξιά στοίχιση',\n        justify: 'Πλήρης στοίχιση'\n      },\n      color: {\n        recent: 'Πρόσφατη επιλογή',\n        more: 'Περισσότερα',\n        background: 'Υπόβαθρο',\n        foreground: 'Μπροστά',\n        transparent: 'Διαφανές',\n        setTransparent: 'Επιλογή διαφάνειας',\n        reset: 'Επαναφορά',\n        resetToDefault: 'Επαναφορά στις προκαθορισμένες τιμές',\n        cpSelect: 'Επιλογή'\n      },\n      shortcut: {\n        shortcuts: 'Συντομεύσεις',\n        close: 'Κλείσιμο',\n        textFormatting: 'Διαμόρφωση κειμένου',\n        action: 'Ενέργεια',\n        paragraphFormatting: 'Διαμόρφωση παραγράφου',\n        documentStyle: 'Στυλ κειμένου',\n        extraKeys: 'Επιπλέον συντομεύσεις'\n      },\n      help: {\n        'escape': 'Έξοδος',\n        'insertParagraph': 'Εισαγωγή παραγράφου',\n        'undo': 'Αναιρεί την προηγούμενη εντολή',\n        'redo': 'Επαναλαμβάνει την προηγούμενη εντολή',\n        'tab': 'Εσοχή',\n        'untab': 'Αναίρεση εσοχής',\n        'bold': 'Ορισμός έντονου στυλ',\n        'italic': 'Ορισμός πλάγιου στυλ',\n        'underline': 'Ορισμός υπογεγραμμένου στυλ',\n        'strikethrough': 'Ορισμός διεγραμμένου στυλ',\n        'removeFormat': 'Αφαίρεση στυλ',\n        'justifyLeft': 'Ορισμός αριστερής στοίχισης',\n        'justifyCenter': 'Ορισμός κεντρικής στοίχισης',\n        'justifyRight': 'Ορισμός δεξιάς στοίχισης',\n        'justifyFull': 'Ορισμός πλήρους στοίχισης',\n        'insertUnorderedList': 'Ορισμός μη-ταξινομημένης λίστας',\n        'insertOrderedList': 'Ορισμός ταξινομημένης λίστας',\n        'outdent': 'Προεξοχή παραγράφου',\n        'indent': 'Εσοχή παραγράφου',\n        'formatPara': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε παράγραφο (P tag)',\n        'formatH1': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H1',\n        'formatH2': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H2',\n        'formatH3': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H3',\n        'formatH4': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H4',\n        'formatH5': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H5',\n        'formatH6': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H6',\n        'insertHorizontalRule': 'Εισαγωγή οριζόντιας γραμμής',\n        'linkDialog.show': 'Εμφάνιση διαλόγου συνδέσμου'\n      },\n      history: {\n        undo: 'Αναίρεση',\n        redo: 'Επαναληψη'\n      },\n      specialChar: {\n        specialChar: 'ΕΙΔΙΚΟΙ ΧΑΡΑΚΤΗΡΕΣ',\n        select: 'Επιλέξτε ειδικούς χαρακτήρες'\n      },\n      output: {\n        noSelection: 'Δεν έγινε επιλογή!'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-el-GR.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-en-US.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, (__WEBPACK_EXTERNAL_MODULE__8938__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 8938:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__8938__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8938);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n(jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) = (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) || {\n  lang: {}\n};\njquery__WEBPACK_IMPORTED_MODULE_0___default().extend(true, (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote).lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit'\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original'\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion, Youku, Peertube)'\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window'\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table'\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule'\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list'\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View'\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full'\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select'\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys'\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog'\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo'\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters'\n    },\n    output: {\n      noSelection: 'No Selection Made!'\n    }\n  }\n});\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-en-US.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-es-ES.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'es-ES': {\n      font: {\n        bold: 'Negrita',\n        italic: 'Cursiva',\n        underline: 'Subrayado',\n        clear: 'Eliminar estilo de letra',\n        height: 'Altura de línea',\n        name: 'Tipo de letra',\n        strikethrough: 'Tachado',\n        subscript: 'Subíndice',\n        superscript: 'Superíndice',\n        size: 'Tamaño de la fuente',\n        sizeunit: 'Unidad del tamaño de letra'\n      },\n      image: {\n        image: 'Imagen',\n        insert: 'Insertar imagen',\n        resizeFull: 'Redimensionar a tamaño completo',\n        resizeHalf: 'Redimensionar a la mitad',\n        resizeQuarter: 'Redimensionar a un cuarto',\n        resizeNone: 'Tamaño original',\n        floatLeft: 'Flotar a la izquierda',\n        floatRight: 'Flotar a la derecha',\n        floatNone: 'No flotar',\n        shapeRounded: 'Forma: Redondeado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Miniatura',\n        shapeNone: 'Forma: Ninguna',\n        dragImageHere: 'Arrastre una imagen o texto aquí',\n        dropImage: 'Suelte una imagen o texto',\n        selectFromFiles: 'Seleccione un fichero',\n        maximumFileSize: 'Tamaño máximo del fichero',\n        maximumFileSizeError: 'Superado el tamaño máximo de fichero.',\n        url: 'URL de la imagen',\n        remove: 'Eliminar la imagen',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Enlace del vídeo',\n        insert: 'Insertar un vídeo',\n        url: 'URL del vídeo',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Enlace',\n        insert: 'Insertar un enlace',\n        unlink: 'Quitar el enlace',\n        edit: 'Editar',\n        textToDisplay: 'Texto a mostrar',\n        url: '¿A qué URL lleva este enlace?',\n        openInNewWindow: 'Abrir en una nueva ventana'\n      },\n      table: {\n        table: 'Tabla',\n        addRowAbove: 'Añadir una fila encima',\n        addRowBelow: 'Añadir una fila debajo',\n        addColLeft: 'Añadir una columna a la izquierda',\n        addColRight: 'Añadir una columna a la derecha',\n        delRow: 'Borrar la fila',\n        delCol: 'Borrar la columna',\n        delTable: 'Borrar la tabla'\n      },\n      hr: {\n        insert: 'Insertar una línea horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'Normal',\n        blockquote: 'Cita',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista',\n        ordered: 'Lista numerada'\n      },\n      options: {\n        help: 'Ayuda',\n        fullscreen: 'Pantalla completa',\n        codeview: 'Ver el código fuente'\n      },\n      paragraph: {\n        paragraph: 'Párrafo',\n        outdent: 'Reducir la sangría',\n        indent: 'Aumentar la sangría',\n        left: 'Alinear a la izquierda',\n        center: 'Centrar',\n        right: 'Alinear a la derecha',\n        justify: 'Justificar'\n      },\n      color: {\n        recent: 'Último color',\n        more: 'Más colores',\n        background: 'Color de fondo',\n        foreground: 'Color del texto',\n        transparent: 'Transparente',\n        setTransparent: 'Establecer transparente',\n        reset: 'Restablecer',\n        resetToDefault: 'Restablecer a los valores predefinidos',\n        cpSelect: 'Seleccionar'\n      },\n      shortcut: {\n        shortcuts: 'Atajos de teclado',\n        close: 'Cerrar',\n        textFormatting: 'Formato de texto',\n        action: 'Acción',\n        paragraphFormatting: 'Formato de párrafo',\n        documentStyle: 'Estilo de documento',\n        extraKeys: 'Teclas adicionales'\n      },\n      help: {\n        insertParagraph: 'Insertar un párrafo',\n        undo: 'Deshacer la última acción',\n        redo: 'Rehacer la última acción',\n        tab: 'Tabular',\n        untab: 'Eliminar tabulación',\n        bold: 'Establecer estilo negrita',\n        italic: 'Establecer estilo cursiva',\n        underline: 'Establecer estilo subrayado',\n        strikethrough: 'Establecer estilo tachado',\n        removeFormat: 'Limpiar estilo',\n        justifyLeft: 'Alinear a la izquierda',\n        justifyCenter: 'Alinear al centro',\n        justifyRight: 'Alinear a la derecha',\n        justifyFull: 'Justificar',\n        insertUnorderedList: 'Insertar lista',\n        insertOrderedList: 'Insertar lista numerada',\n        outdent: 'Reducir sangría del párrafo',\n        indent: 'Aumentar sangría del párrafo',\n        formatPara: 'Cambiar el formato del bloque actual a párrafo (etiqueta P)',\n        formatH1: 'Cambiar el formato del bloque actual a H1',\n        formatH2: 'Cambiar el formato del bloque actual a H2',\n        formatH3: 'Cambiar el formato del bloque actual a H3',\n        formatH4: 'Cambiar el formato del bloque actual a H4',\n        formatH5: 'Cambiar el formato del bloque actual a H5',\n        formatH6: 'Cambiar el formato del bloque actual a H6',\n        insertHorizontalRule: 'Insertar una línea horizontal',\n        'linkDialog.show': 'Mostrar el panel de enlaces'\n      },\n      history: {\n        undo: 'Deshacer',\n        redo: 'Rehacer'\n      },\n      specialChar: {\n        specialChar: 'CARACTERES ESPECIALES',\n        select: 'Seleccionar caracteres especiales'\n      },\n      output: {\n        noSelection: '¡No ha seleccionado nada!'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-es-ES.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-es-EU.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'es-EU': {\n      font: {\n        bold: 'Lodia',\n        italic: 'Etzana',\n        underline: 'Azpimarratua',\n        clear: 'Estiloa kendu',\n        height: 'Lerro altuera',\n        name: 'Tipografia',\n        strikethrough: 'Marratua',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Letren neurria'\n      },\n      image: {\n        image: 'Irudia',\n        insert: 'Irudi bat txertatu',\n        resizeFull: 'Jatorrizko neurrira aldatu',\n        resizeHalf: 'Neurria erdira aldatu',\n        resizeQuarter: 'Neurria laurdenera aldatu',\n        floatLeft: 'Ezkerrean kokatu',\n        floatRight: 'Eskuinean kokatu',\n        floatNone: 'Kokapenik ez ezarri',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Irudi bat ezarri hemen',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Zure fitxategi bat aukeratu',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Irudiaren URL helbidea',\n        remove: 'Remove Image',\n        original: 'Original'\n      },\n      video: {\n        video: 'Bideoa',\n        videoLink: 'Bideorako esteka',\n        insert: 'Bideo berri bat txertatu',\n        url: 'Bideoaren URL helbidea',\n        providers: '(YouTube, Vimeo, Vine, Instagram edo DailyMotion)'\n      },\n      link: {\n        link: 'Esteka',\n        insert: 'Esteka bat txertatu',\n        unlink: 'Esteka ezabatu',\n        edit: 'Editatu',\n        textToDisplay: 'Estekaren testua',\n        url: 'Estekaren URL helbidea',\n        openInNewWindow: 'Leiho berri batean ireki'\n      },\n      table: {\n        table: 'Taula',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Marra horizontala txertatu'\n      },\n      style: {\n        style: 'Estiloa',\n        p: 'p',\n        blockquote: 'Aipamena',\n        pre: 'Kodea',\n        h1: '1. izenburua',\n        h2: '2. izenburua',\n        h3: '3. izenburua',\n        h4: '4. izenburua',\n        h5: '5. izenburua',\n        h6: '6. izenburua'\n      },\n      lists: {\n        unordered: 'Ordenatu gabeko zerrenda',\n        ordered: 'Zerrenda ordenatua'\n      },\n      options: {\n        help: 'Laguntza',\n        fullscreen: 'Pantaila osoa',\n        codeview: 'Kodea ikusi'\n      },\n      paragraph: {\n        paragraph: 'Paragrafoa',\n        outdent: 'Koska txikiagoa',\n        indent: 'Koska handiagoa',\n        left: 'Ezkerrean kokatu',\n        center: 'Erdian kokatu',\n        right: 'Eskuinean kokatu',\n        justify: 'Justifikatu'\n      },\n      color: {\n        recent: 'Azken kolorea',\n        more: 'Kolore gehiago',\n        background: 'Atzeko planoa',\n        foreground: 'Aurreko planoa',\n        transparent: 'Gardena',\n        setTransparent: 'Gardendu',\n        reset: 'Lehengoratu',\n        resetToDefault: 'Berrezarri lehenetsia'\n      },\n      shortcut: {\n        shortcuts: 'Lasterbideak',\n        close: 'Itxi',\n        textFormatting: 'Testuaren formatua',\n        action: 'Ekintza',\n        paragraphFormatting: 'Paragrafoaren formatua',\n        documentStyle: 'Dokumentuaren estiloa'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Desegin',\n        redo: 'Berregin'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-es-EU.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-fa-IR.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'fa-IR': {\n      font: {\n        bold: 'درشت',\n        italic: 'خمیده',\n        underline: 'میان خط',\n        clear: 'پاک کردن فرمت فونت',\n        height: 'فاصله ی خطی',\n        name: 'اسم فونت',\n        strikethrough: 'خط خورده',\n        subscript: 'زیرنویس',\n        superscript: 'بالا نویس',\n        size: 'اندازه ی فونت'\n      },\n      image: {\n        image: 'تصویر',\n        insert: 'وارد کردن تصویر',\n        resizeFull: 'تغییر به اندازه ی کامل',\n        resizeHalf: 'تغییر به اندازه نصف',\n        resizeQuarter: 'تغییر به اندازه یک چهارم',\n        floatLeft: 'چسباندن به چپ',\n        floatRight: 'چسباندن به راست',\n        floatNone: 'بدون چسبندگی',\n        shapeRounded: 'شکل: گرد',\n        shapeCircle: 'شکل: دایره',\n        shapeThumbnail: 'شکل: تصویر کوچک',\n        shapeNone: 'شکل: هیچکدام',\n        dragImageHere: 'یک تصویر را اینجا بکشید',\n        dropImage: 'تصویر یا متن را رها کنید',\n        selectFromFiles: 'فایل ها را انتخاب کنید',\n        maximumFileSize: 'حداکثر اندازه پرونده',\n        maximumFileSizeError: 'از حداکثر اندازه فایل بیشتر شده است.',\n        url: 'آدرس تصویر',\n        remove: 'حذف تصویر',\n        original: 'اصلی'\n      },\n      video: {\n        video: 'ویدیو',\n        videoLink: 'لینک ویدیو',\n        insert: 'افزودن ویدیو',\n        url: 'آدرس ویدیو ؟',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion یا Youku)'\n      },\n      link: {\n        link: 'لینک',\n        insert: 'اضافه کردن لینک',\n        unlink: 'حذف لینک',\n        edit: 'ویرایش',\n        textToDisplay: 'متن جهت نمایش',\n        url: 'این لینک به چه آدرسی باید برود ؟',\n        openInNewWindow: 'در یک پنجره ی جدید باز شود'\n      },\n      table: {\n        table: 'جدول',\n        addRowAbove: 'افزودن ردیف بالا',\n        addRowBelow: 'افزودن ردیف پایین',\n        addColLeft: 'افزودن ستون چپ',\n        addColRight: 'افزودن ستون راست',\n        delRow: 'حذف ردیف',\n        delCol: 'حذف ستون',\n        delTable: 'حذف جدول'\n      },\n      hr: {\n        insert: 'افزودن خط افقی'\n      },\n      style: {\n        style: 'استیل',\n        p: 'نرمال',\n        blockquote: 'نقل قول',\n        pre: 'کد',\n        h1: 'سرتیتر 1',\n        h2: 'سرتیتر 2',\n        h3: 'سرتیتر 3',\n        h4: 'سرتیتر 4',\n        h5: 'سرتیتر 5',\n        h6: 'سرتیتر 6'\n      },\n      lists: {\n        unordered: 'لیست غیر ترتیبی',\n        ordered: 'لیست ترتیبی'\n      },\n      options: {\n        help: 'راهنما',\n        fullscreen: 'نمایش تمام صفحه',\n        codeview: 'مشاهده ی کد'\n      },\n      paragraph: {\n        paragraph: 'پاراگراف',\n        outdent: 'کاهش تو رفتگی',\n        indent: 'افزایش تو رفتگی',\n        left: 'چپ چین',\n        center: 'میان چین',\n        right: 'راست چین',\n        justify: 'بلوک چین'\n      },\n      color: {\n        recent: 'رنگ اخیرا استفاده شده',\n        more: 'رنگ بیشتر',\n        background: 'رنگ پس زمینه',\n        foreground: 'رنگ متن',\n        transparent: 'بی رنگ',\n        setTransparent: 'تنظیم حالت بی رنگ',\n        reset: 'بازنشاندن',\n        resetToDefault: 'حالت پیش فرض'\n      },\n      shortcut: {\n        shortcuts: 'دکمه های میان بر',\n        close: 'بستن',\n        textFormatting: 'فرمت متن',\n        action: 'عملیات',\n        paragraphFormatting: 'فرمت پاراگراف',\n        documentStyle: 'استیل سند',\n        extraKeys: 'کلیدهای اضافی'\n      },\n      help: {\n        'insertParagraph': 'افزودن پاراگراف',\n        'undo': 'آخرین فرمان را لغو می کند',\n        'redo': 'دستور آخر را دوباره اجرا می کند',\n        'tab': 'تب',\n        'untab': 'لغو تب',\n        'bold': 'استایل ضخیم میدهد',\n        'italic': 'استایل مورب میدهد',\n        'underline': 'استایل زیرخط دار میدهد',\n        'strikethrough': 'استایل خط خورده میدهد',\n        'removeFormat': 'حذف همه استایل ها',\n        'justifyLeft': 'چپ چین',\n        'justifyCenter': 'وسط چین',\n        'justifyRight': 'راست چین',\n        'justifyFull': 'چینش در کل عرض',\n        'insertUnorderedList': 'تغییر بع لیست غیرترتیبی',\n        'insertOrderedList': 'تغییر بع لیست ترتیبی',\n        'outdent': 'گذر از پاراگراف فعلی',\n        'indent': 'قرارگیری بر روی پاراگراف جاری',\n        'formatPara': 'تغییر فرمت متن به تگ <p>',\n        'formatH1': 'تغییر فرمت متن به تگ <h1>',\n        'formatH2': 'تغییر فرمت متن به تگ <h2>',\n        'formatH3': 'تغییر فرمت متن به تگ <h3>',\n        'formatH4': 'تغییر فرمت متن به تگ <h4>',\n        'formatH5': 'تغییر فرمت متن به تگ <h5>',\n        'formatH6': 'تغییر فرمت متن به تگ <h6>',\n        'insertHorizontalRule': 'وارد کردن به صورت افقی',\n        'linkDialog.show': 'نمایش پیام لینک'\n      },\n      history: {\n        undo: 'واچیدن',\n        redo: 'بازچیدن'\n      },\n      specialChar: {\n        specialChar: 'کاراکتر خاص',\n        select: 'انتخاب کاراکتر خاص'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-fa-IR.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-fi-FI.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'fi-FI': {\n      font: {\n        bold: 'Lihavointi',\n        italic: 'Kursivointi',\n        underline: 'Alleviivaus',\n        clear: 'Tyhjennä muotoilu',\n        height: 'Riviväli',\n        name: 'Kirjasintyyppi',\n        strikethrough: 'Yliviivaus',\n        subscript: 'Alaindeksi',\n        superscript: 'Yläindeksi',\n        size: 'Kirjasinkoko'\n      },\n      image: {\n        image: 'Kuva',\n        insert: 'Lisää kuva',\n        resizeFull: 'Koko leveys',\n        resizeHalf: 'Puolikas leveys',\n        resizeQuarter: 'Neljäsosa leveys',\n        floatLeft: 'Sijoita vasemmalle',\n        floatRight: 'Sijoita oikealle',\n        floatNone: 'Ei sijoitusta',\n        shapeRounded: 'Muoto: Pyöristetty',\n        shapeCircle: 'Muoto: Ympyrä',\n        shapeThumbnail: 'Muoto: Esikatselukuva',\n        shapeNone: 'Muoto: Ei muotoilua',\n        dragImageHere: 'Vedä kuva tähän',\n        selectFromFiles: 'Valitse tiedostoista',\n        maximumFileSize: 'Maksimi tiedosto koko',\n        maximumFileSizeError: 'Maksimi tiedosto koko ylitetty.',\n        url: 'URL-osoitteen mukaan',\n        remove: 'Poista kuva',\n        original: 'Alkuperäinen'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Linkki videoon',\n        insert: 'Lisää video',\n        url: 'Videon URL-osoite',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion tai Youku)'\n      },\n      link: {\n        link: 'Linkki',\n        insert: 'Lisää linkki',\n        unlink: 'Poista linkki',\n        edit: 'Muokkaa',\n        textToDisplay: 'Näytettävä teksti',\n        url: 'Linkin URL-osoite',\n        openInNewWindow: 'Avaa uudessa ikkunassa'\n      },\n      table: {\n        table: 'Taulukko',\n        addRowAbove: 'Lisää rivi yläpuolelle',\n        addRowBelow: 'Lisää rivi alapuolelle',\n        addColLeft: 'Lisää sarake vasemmalle puolelle',\n        addColRight: 'Lisää sarake oikealle puolelle',\n        delRow: 'Poista rivi',\n        delCol: 'Poista sarake',\n        delTable: 'Poista taulukko'\n      },\n      hr: {\n        insert: 'Lisää vaakaviiva'\n      },\n      style: {\n        style: 'Tyyli',\n        p: 'Normaali',\n        blockquote: 'Lainaus',\n        pre: 'Koodi',\n        h1: 'Otsikko 1',\n        h2: 'Otsikko 2',\n        h3: 'Otsikko 3',\n        h4: 'Otsikko 4',\n        h5: 'Otsikko 5',\n        h6: 'Otsikko 6'\n      },\n      lists: {\n        unordered: 'Luettelomerkitty luettelo',\n        ordered: 'Numeroitu luettelo'\n      },\n      options: {\n        help: 'Ohje',\n        fullscreen: 'Koko näyttö',\n        codeview: 'HTML-näkymä'\n      },\n      paragraph: {\n        paragraph: 'Kappale',\n        outdent: 'Pienennä sisennystä',\n        indent: 'Suurenna sisennystä',\n        left: 'Tasaa vasemmalle',\n        center: 'Keskitä',\n        right: 'Tasaa oikealle',\n        justify: 'Tasaa'\n      },\n      color: {\n        recent: 'Viimeisin väri',\n        more: 'Lisää värejä',\n        background: 'Korostusväri',\n        foreground: 'Tekstin väri',\n        transparent: 'Läpinäkyvä',\n        setTransparent: 'Aseta läpinäkyväksi',\n        reset: 'Palauta',\n        resetToDefault: 'Palauta oletusarvoksi'\n      },\n      shortcut: {\n        shortcuts: 'Pikanäppäimet',\n        close: 'Sulje',\n        textFormatting: 'Tekstin muotoilu',\n        action: 'Toiminto',\n        paragraphFormatting: 'Kappaleen muotoilu',\n        documentStyle: 'Asiakirjan tyyli'\n      },\n      help: {\n        'insertParagraph': 'Lisää kappale',\n        'undo': 'Kumoa viimeisin komento',\n        'redo': 'Tee uudelleen kumottu komento',\n        'tab': 'Sarkain',\n        'untab': 'Sarkainmerkin poisto',\n        'bold': 'Lihavointi',\n        'italic': 'Kursiivi',\n        'underline': 'Alleviivaus',\n        'strikethrough': 'Yliviivaus',\n        'removeFormat': 'Poista asetetut tyylit',\n        'justifyLeft': 'Tasaa vasemmalle',\n        'justifyCenter': 'Keskitä',\n        'justifyRight': 'Tasaa oikealle',\n        'justifyFull': 'Tasaa',\n        'insertUnorderedList': 'Luettelomerkillä varustettu lista',\n        'insertOrderedList': 'Numeroitu lista',\n        'outdent': 'Pienennä sisennystä',\n        'indent': 'Suurenna sisennystä',\n        'formatPara': 'Muuta kappaleen formaatti p',\n        'formatH1': 'Muuta kappaleen formaatti H1',\n        'formatH2': 'Muuta kappaleen formaatti H2',\n        'formatH3': 'Muuta kappaleen formaatti H3',\n        'formatH4': 'Muuta kappaleen formaatti H4',\n        'formatH5': 'Muuta kappaleen formaatti H5',\n        'formatH6': 'Muuta kappaleen formaatti H6',\n        'insertHorizontalRule': 'Lisää vaakaviiva',\n        'linkDialog.show': 'Lisää linkki'\n      },\n      history: {\n        undo: 'Kumoa',\n        redo: 'Toista'\n      },\n      specialChar: {\n        specialChar: 'ERIKOISMERKIT',\n        select: 'Valitse erikoismerkit'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-fi-FI.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-fr-FR.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'fr-FR': {\n      font: {\n        bold: 'Gras',\n        italic: 'Italique',\n        underline: 'Souligné',\n        clear: 'Effacer la mise en forme',\n        height: 'Interligne',\n        name: 'Famille de police',\n        strikethrough: 'Barré',\n        superscript: 'Exposant',\n        subscript: 'Indice',\n        size: 'Taille de police'\n      },\n      image: {\n        image: 'Image',\n        insert: 'Insérer une image',\n        resizeFull: 'Taille originale',\n        resizeHalf: 'Redimensionner à 50 %',\n        resizeQuarter: 'Redimensionner à 25 %',\n        floatLeft: 'Aligné à gauche',\n        floatRight: 'Aligné à droite',\n        floatNone: 'Pas d\\'alignement',\n        shapeRounded: 'Forme: Rectangle arrondi',\n        shapeCircle: 'Forme: Cercle',\n        shapeThumbnail: 'Forme: Vignette',\n        shapeNone: 'Forme: Aucune',\n        dragImageHere: 'Faites glisser une image ou un texte dans ce cadre',\n        dropImage: 'Lachez l\\'image ou le texte',\n        selectFromFiles: 'Choisir un fichier',\n        maximumFileSize: 'Taille de fichier maximale',\n        maximumFileSizeError: 'Taille maximale du fichier dépassée',\n        url: 'URL de l\\'image',\n        remove: 'Supprimer l\\'image',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vidéo',\n        videoLink: 'Lien vidéo',\n        insert: 'Insérer une vidéo',\n        url: 'URL de la vidéo',\n        providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Lien',\n        insert: 'Insérer un lien',\n        unlink: 'Supprimer un lien',\n        edit: 'Modifier',\n        textToDisplay: 'Texte à afficher',\n        url: 'URL du lien',\n        openInNewWindow: 'Ouvrir dans une nouvelle fenêtre'\n      },\n      table: {\n        table: 'Tableau',\n        addRowAbove: 'Ajouter une ligne au-dessus',\n        addRowBelow: 'Ajouter une ligne en dessous',\n        addColLeft: 'Ajouter une colonne à gauche',\n        addColRight: 'Ajouter une colonne à droite',\n        delRow: 'Supprimer la ligne',\n        delCol: 'Supprimer la colonne',\n        delTable: 'Supprimer le tableau'\n      },\n      hr: {\n        insert: 'Insérer une ligne horizontale'\n      },\n      style: {\n        style: 'Style',\n        p: 'Normal',\n        blockquote: 'Citation',\n        pre: 'Code source',\n        h1: 'Titre 1',\n        h2: 'Titre 2',\n        h3: 'Titre 3',\n        h4: 'Titre 4',\n        h5: 'Titre 5',\n        h6: 'Titre 6'\n      },\n      lists: {\n        unordered: 'Liste à puces',\n        ordered: 'Liste numérotée'\n      },\n      options: {\n        help: 'Aide',\n        fullscreen: 'Plein écran',\n        codeview: 'Afficher le code HTML'\n      },\n      paragraph: {\n        paragraph: 'Paragraphe',\n        outdent: 'Diminuer le retrait',\n        indent: 'Augmenter le retrait',\n        left: 'Aligner à gauche',\n        center: 'Centrer',\n        right: 'Aligner à droite',\n        justify: 'Justifier'\n      },\n      color: {\n        recent: 'Dernière couleur sélectionnée',\n        more: 'Plus de couleurs',\n        background: 'Couleur de fond',\n        foreground: 'Couleur de police',\n        transparent: 'Transparent',\n        setTransparent: 'Définir la transparence',\n        reset: 'Restaurer',\n        resetToDefault: 'Restaurer la couleur par défaut'\n      },\n      shortcut: {\n        shortcuts: 'Raccourcis',\n        close: 'Fermer',\n        textFormatting: 'Mise en forme du texte',\n        action: 'Action',\n        paragraphFormatting: 'Mise en forme des paragraphes',\n        documentStyle: 'Style du document',\n        extraKeys: 'Touches supplémentaires'\n      },\n      help: {\n        'insertParagraph': 'Insérer paragraphe',\n        'undo': 'Défaire la dernière commande',\n        'redo': 'Refaire la dernière commande',\n        'tab': 'Tabulation',\n        'untab': 'Tabulation arrière',\n        'bold': 'Mettre en caractère gras',\n        'italic': 'Mettre en italique',\n        'underline': 'Mettre en souligné',\n        'strikethrough': 'Mettre en texte barré',\n        'removeFormat': 'Nettoyer les styles',\n        'justifyLeft': 'Aligner à gauche',\n        'justifyCenter': 'Centrer',\n        'justifyRight': 'Aligner à droite',\n        'justifyFull': 'Justifier à gauche et à droite',\n        'insertUnorderedList': 'Basculer liste à puces',\n        'insertOrderedList': 'Basculer liste ordonnée',\n        'outdent': 'Diminuer le retrait du paragraphe',\n        'indent': 'Augmenter le retrait du paragraphe',\n        'formatPara': 'Changer le paragraphe en cours en normal (P)',\n        'formatH1': 'Changer le paragraphe en cours en entête H1',\n        'formatH2': 'Changer le paragraphe en cours en entête H2',\n        'formatH3': 'Changer le paragraphe en cours en entête H3',\n        'formatH4': 'Changer le paragraphe en cours en entête H4',\n        'formatH5': 'Changer le paragraphe en cours en entête H5',\n        'formatH6': 'Changer le paragraphe en cours en entête H6',\n        'insertHorizontalRule': 'Insérer séparation horizontale',\n        'linkDialog.show': 'Afficher fenêtre d\\'hyperlien'\n      },\n      history: {\n        undo: 'Annuler la dernière action',\n        redo: 'Restaurer la dernière action annulée'\n      },\n      specialChar: {\n        specialChar: 'Caractères spéciaux',\n        select: 'Choisir des caractères spéciaux'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-fr-FR.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-gl-ES.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'gl-ES': {\n      font: {\n        bold: 'Negrita',\n        italic: 'Cursiva',\n        underline: 'Subliñado',\n        clear: 'Quitar estilo de fonte',\n        height: 'Altura de liña',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        superscript: 'Superíndice',\n        subscript: 'Subíndice',\n        size: 'Tamaño da fonte'\n      },\n      image: {\n        image: 'Imaxe',\n        insert: 'Inserir imaxe',\n        resizeFull: 'Redimensionar a tamaño completo',\n        resizeHalf: 'Redimensionar á metade',\n        resizeQuarter: 'Redimensionar a un cuarto',\n        floatLeft: 'Flotar á esquerda',\n        floatRight: 'Flotar á dereita',\n        floatNone: 'Non flotar',\n        shapeRounded: 'Forma: Redondeado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Marco',\n        shapeNone: 'Forma: Ningunha',\n        dragImageHere: 'Arrastrar unha imaxe ou texto aquí',\n        dropImage: 'Solta a imaxe ou texto',\n        selectFromFiles: 'Seleccionar desde os arquivos',\n        maximumFileSize: 'Tamaño máximo do arquivo',\n        maximumFileSizeError: 'Superaches o tamaño máximo do arquivo.',\n        url: 'URL da imaxe',\n        remove: 'Eliminar imaxe',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Ligazón do vídeo',\n        insert: 'Insertar vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)'\n      },\n      link: {\n        link: 'Ligazón',\n        insert: 'Inserir Ligazón',\n        unlink: 'Quitar Ligazón',\n        edit: 'Editar',\n        textToDisplay: 'Texto para amosar',\n        url: 'Cara a que URL leva a ligazón?',\n        openInNewWindow: 'Abrir nunha nova xanela'\n      },\n      table: {\n        table: 'Táboa',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Inserir liña horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'Normal',\n        blockquote: 'Cita',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista desordenada',\n        ordered: 'Lista ordenada'\n      },\n      options: {\n        help: 'Axuda',\n        fullscreen: 'Pantalla completa',\n        codeview: 'Ver código fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menos tabulación',\n        indent: 'Máis tabulación',\n        left: 'Aliñar á esquerda',\n        center: 'Aliñar ao centro',\n        right: 'Aliñar á dereita',\n        justify: 'Xustificar'\n      },\n      color: {\n        recent: 'Última cor',\n        more: 'Máis cores',\n        background: 'Cor de fondo',\n        foreground: 'Cor de fuente',\n        transparent: 'Transparente',\n        setTransparent: 'Establecer transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar por defecto'\n      },\n      shortcut: {\n        shortcuts: 'Atallos de teclado',\n        close: 'Pechar',\n        textFormatting: 'Formato de texto',\n        action: 'Acción',\n        paragraphFormatting: 'Formato de parágrafo',\n        documentStyle: 'Estilo de documento',\n        extraKeys: 'Teclas adicionais'\n      },\n      help: {\n        'insertParagraph': 'Inserir parágrafo',\n        'undo': 'Desfacer última acción',\n        'redo': 'Refacer última acción',\n        'tab': 'Tabular',\n        'untab': 'Eliminar tabulación',\n        'bold': 'Establecer estilo negrita',\n        'italic': 'Establecer estilo cursiva',\n        'underline': 'Establecer estilo subliñado',\n        'strikethrough': 'Establecer estilo riscado',\n        'removeFormat': 'Limpar estilo',\n        'justifyLeft': 'Aliñar á esquerda',\n        'justifyCenter': 'Aliñar ao centro',\n        'justifyRight': 'Aliñar á dereita',\n        'justifyFull': 'Xustificar',\n        'insertUnorderedList': 'Inserir lista desordenada',\n        'insertOrderedList': 'Inserir lista ordenada',\n        'outdent': 'Reducir tabulación do parágrafo',\n        'indent': 'Aumentar tabulación do parágrafo',\n        'formatPara': 'Mudar estilo do bloque a parágrafo (etiqueta P)',\n        'formatH1': 'Mudar estilo do bloque a H1',\n        'formatH2': 'Mudar estilo do bloque a H2',\n        'formatH3': 'Mudar estilo do bloque a H3',\n        'formatH4': 'Mudar estilo do bloque a H4',\n        'formatH5': 'Mudar estilo do bloque a H5',\n        'formatH6': 'Mudar estilo do bloque a H6',\n        'insertHorizontalRule': 'Inserir liña horizontal',\n        'linkDialog.show': 'Amosar panel ligazóns'\n      },\n      history: {\n        undo: 'Desfacer',\n        redo: 'Refacer'\n      },\n      specialChar: {\n        specialChar: 'CARACTERES ESPECIAIS',\n        select: 'Selecciona Caracteres especiais'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-gl-ES.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-he-IL.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'he-IL': {\n      font: {\n        bold: 'מודגש',\n        italic: 'נטוי',\n        underline: 'קו תחתון',\n        clear: 'נקה עיצוב',\n        height: 'גובה',\n        name: 'גופן',\n        strikethrough: 'קו חוצה',\n        subscript: 'כתב תחתי',\n        superscript: 'כתב עילי',\n        size: 'גודל גופן'\n      },\n      image: {\n        image: 'תמונה',\n        insert: 'הוסף תמונה',\n        resizeFull: 'גודל מלא',\n        resizeHalf: 'להקטין לחצי',\n        resizeQuarter: 'להקטין לרבע',\n        floatLeft: 'יישור לשמאל',\n        floatRight: 'יישור לימין',\n        floatNone: 'ישר',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'גרור תמונה לכאן',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'בחר מתוך קבצים',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'נתיב לתמונה',\n        remove: 'הסר תמונה',\n        original: 'Original'\n      },\n      video: {\n        video: 'סרטון',\n        videoLink: 'קישור לסרטון',\n        insert: 'הוסף סרטון',\n        url: 'קישור לסרטון',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion או Youku)'\n      },\n      link: {\n        link: 'קישור',\n        insert: 'הוסף קישור',\n        unlink: 'הסר קישור',\n        edit: 'ערוך',\n        textToDisplay: 'טקסט להציג',\n        url: 'קישור',\n        openInNewWindow: 'פתח בחלון חדש'\n      },\n      table: {\n        table: 'טבלה',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'הוסף קו'\n      },\n      style: {\n        style: 'עיצוב',\n        p: 'טקסט רגיל',\n        blockquote: 'ציטוט',\n        pre: 'קוד',\n        h1: 'כותרת 1',\n        h2: 'כותרת 2',\n        h3: 'כותרת 3',\n        h4: 'כותרת 4',\n        h5: 'כותרת 5',\n        h6: 'כותרת 6'\n      },\n      lists: {\n        unordered: 'רשימת תבליטים',\n        ordered: 'רשימה ממוספרת'\n      },\n      options: {\n        help: 'עזרה',\n        fullscreen: 'מסך מלא',\n        codeview: 'תצוגת קוד'\n      },\n      paragraph: {\n        paragraph: 'פסקה',\n        outdent: 'הקטן כניסה',\n        indent: 'הגדל כניסה',\n        left: 'יישור לשמאל',\n        center: 'יישור למרכז',\n        right: 'יישור לימין',\n        justify: 'מיושר'\n      },\n      color: {\n        recent: 'צבע טקסט אחרון',\n        more: 'עוד צבעים',\n        background: 'צבע רקע',\n        foreground: 'צבע טקסט',\n        transparent: 'שקוף',\n        setTransparent: 'קבע כשקוף',\n        reset: 'איפוס',\n        resetToDefault: 'אפס לברירת מחדל'\n      },\n      shortcut: {\n        shortcuts: 'קיצורי מקלדת',\n        close: 'סגור',\n        textFormatting: 'עיצוב הטקסט',\n        action: 'פעולה',\n        paragraphFormatting: 'סגנונות פסקה',\n        documentStyle: 'עיצוב המסמך',\n        extraKeys: 'קיצורים נוספים'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'בטל פעולה',\n        redo: 'בצע שוב'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-he-IL.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-hr-HR.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'hr-HR': {\n      font: {\n        bold: 'Podebljano',\n        italic: 'Kurziv',\n        underline: 'Podvučeno',\n        clear: 'Ukloni stilove fonta',\n        height: 'Visina linije',\n        name: 'Font Family',\n        strikethrough: 'Precrtano',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Veličina fonta'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Ubaci sliku',\n        resizeFull: 'Puna veličina',\n        resizeHalf: 'Umanji na 50%',\n        resizeQuarter: 'Umanji na 25%',\n        floatLeft: 'Poravnaj lijevo',\n        floatRight: 'Poravnaj desno',\n        floatNone: 'Bez poravnanja',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Povuci sliku ovdje',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Izaberi iz datoteke',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Adresa slike',\n        remove: 'Ukloni sliku',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Veza na video',\n        insert: 'Ubaci video',\n        url: 'URL video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)'\n      },\n      link: {\n        link: 'Veza',\n        insert: 'Ubaci vezu',\n        unlink: 'Ukloni vezu',\n        edit: 'Uredi',\n        textToDisplay: 'Tekst za prikaz',\n        url: 'Internet adresa',\n        openInNewWindow: 'Otvori u novom prozoru'\n      },\n      table: {\n        table: 'Tablica',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Ubaci horizontalnu liniju'\n      },\n      style: {\n        style: 'Stil',\n        p: 'pni',\n        blockquote: 'Citat',\n        pre: 'Kôd',\n        h1: 'Naslov 1',\n        h2: 'Naslov 2',\n        h3: 'Naslov 3',\n        h4: 'Naslov 4',\n        h5: 'Naslov 5',\n        h6: 'Naslov 6'\n      },\n      lists: {\n        unordered: 'Obična lista',\n        ordered: 'Numerirana lista'\n      },\n      options: {\n        help: 'Pomoć',\n        fullscreen: 'Preko cijelog ekrana',\n        codeview: 'Izvorni kôd'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Smanji uvlačenje',\n        indent: 'Povećaj uvlačenje',\n        left: 'Poravnaj lijevo',\n        center: 'Centrirano',\n        right: 'Poravnaj desno',\n        justify: 'Poravnaj obostrano'\n      },\n      color: {\n        recent: 'Posljednja boja',\n        more: 'Više boja',\n        background: 'Boja pozadine',\n        foreground: 'Boja teksta',\n        transparent: 'Prozirna',\n        setTransparent: 'Prozirna',\n        reset: 'Poništi',\n        resetToDefault: 'Podrazumijevana'\n      },\n      shortcut: {\n        shortcuts: 'Prečice s tipkovnice',\n        close: 'Zatvori',\n        textFormatting: 'Formatiranje teksta',\n        action: 'Akcija',\n        paragraphFormatting: 'Formatiranje paragrafa',\n        documentStyle: 'Stil dokumenta',\n        extraKeys: 'Dodatne kombinacije'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Poništi',\n        redo: 'Ponovi'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-hr-HR.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-hu-HU.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'hu-HU': {\n      font: {\n        bold: 'Félkövér',\n        italic: 'Dőlt',\n        underline: 'Aláhúzott',\n        clear: 'Formázás törlése',\n        height: 'Sorköz',\n        name: 'Betűtípus',\n        strikethrough: 'Áthúzott',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Betűméret'\n      },\n      image: {\n        image: 'Kép',\n        insert: 'Kép beszúrása',\n        resizeFull: 'Átméretezés teljes méretre',\n        resizeHalf: 'Átméretezés felére',\n        resizeQuarter: 'Átméretezés negyedére',\n        floatLeft: 'Igazítás balra',\n        floatRight: 'Igazítás jobbra',\n        floatNone: 'Igazítás törlése',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Ide húzhat képet vagy szöveget',\n        dropImage: 'Engedje el a képet vagy szöveget',\n        selectFromFiles: 'Fájlok kiválasztása',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Kép URL címe',\n        remove: 'Kép törlése',\n        original: 'Original'\n      },\n      video: {\n        video: 'Videó',\n        videoLink: 'Videó hivatkozás',\n        insert: 'Videó beszúrása',\n        url: 'Videó URL címe',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion vagy Youku)'\n      },\n      link: {\n        link: 'Hivatkozás',\n        insert: 'Hivatkozás beszúrása',\n        unlink: 'Hivatkozás megszüntetése',\n        edit: 'Szerkesztés',\n        textToDisplay: 'Megjelenítendő szöveg',\n        url: 'Milyen URL címre hivatkozzon?',\n        openInNewWindow: 'Megnyitás új ablakban'\n      },\n      table: {\n        table: 'Táblázat',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Elválasztó vonal beszúrása'\n      },\n      style: {\n        style: 'Stílus',\n        p: 'Normál',\n        blockquote: 'Idézet',\n        pre: 'Kód',\n        h1: 'Fejléc 1',\n        h2: 'Fejléc 2',\n        h3: 'Fejléc 3',\n        h4: 'Fejléc 4',\n        h5: 'Fejléc 5',\n        h6: 'Fejléc 6'\n      },\n      lists: {\n        unordered: 'Listajeles lista',\n        ordered: 'Számozott lista'\n      },\n      options: {\n        help: 'Súgó',\n        fullscreen: 'Teljes képernyő',\n        codeview: 'Kód nézet'\n      },\n      paragraph: {\n        paragraph: 'Bekezdés',\n        outdent: 'Behúzás csökkentése',\n        indent: 'Behúzás növelése',\n        left: 'Igazítás balra',\n        center: 'Igazítás középre',\n        right: 'Igazítás jobbra',\n        justify: 'Sorkizárt'\n      },\n      color: {\n        recent: 'Jelenlegi szín',\n        more: 'További színek',\n        background: 'Háttérszín',\n        foreground: 'Betűszín',\n        transparent: 'Átlátszó',\n        setTransparent: 'Átlászóság beállítása',\n        reset: 'Visszaállítás',\n        resetToDefault: 'Alaphelyzetbe állítás'\n      },\n      shortcut: {\n        shortcuts: 'Gyorsbillentyű',\n        close: 'Bezárás',\n        textFormatting: 'Szöveg formázása',\n        action: 'Művelet',\n        paragraphFormatting: 'Bekezdés formázása',\n        documentStyle: 'Dokumentumstílus',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Új bekezdés',\n        'undo': 'Visszavonás',\n        'redo': 'Újra',\n        'tab': 'Behúzás növelése',\n        'untab': 'Behúzás csökkentése',\n        'bold': 'Félkövérre állítás',\n        'italic': 'Dőltre állítás',\n        'underline': 'Aláhúzás',\n        'strikethrough': 'Áthúzás',\n        'removeFormat': 'Formázás törlése',\n        'justifyLeft': 'Balra igazítás',\n        'justifyCenter': 'Középre igazítás',\n        'justifyRight': 'Jobbra igazítás',\n        'justifyFull': 'Sorkizárt',\n        'insertUnorderedList': 'Számozatlan lista be/ki',\n        'insertOrderedList': 'Számozott lista be/ki',\n        'outdent': 'Jelenlegi bekezdés behúzásának megszüntetése',\n        'indent': 'Jelenlegi bekezdés behúzása',\n        'formatPara': 'Blokk formázása bekezdésként (P tag)',\n        'formatH1': 'Blokk formázása, mint Fejléc 1',\n        'formatH2': 'Blokk formázása, mint Fejléc 2',\n        'formatH3': 'Blokk formázása, mint Fejléc 3',\n        'formatH4': 'Blokk formázása, mint Fejléc 4',\n        'formatH5': 'Blokk formázása, mint Fejléc 5',\n        'formatH6': 'Blokk formázása, mint Fejléc 6',\n        'insertHorizontalRule': 'Vízszintes vonal beszúrása',\n        'linkDialog.show': 'Link párbeszédablak megjelenítése'\n      },\n      history: {\n        undo: 'Visszavonás',\n        redo: 'Újra'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-hu-HU.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-id-ID.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'id-ID': {\n      font: {\n        bold: 'Tebal',\n        italic: 'Miring',\n        underline: 'Garis bawah',\n        clear: 'Bersihkan gaya',\n        height: 'Jarak baris',\n        name: 'Jenis Tulisan',\n        strikethrough: 'Coret',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Ukuran font'\n      },\n      image: {\n        image: 'Gambar',\n        insert: 'Sisipkan gambar',\n        resizeFull: 'Ukuran penuh',\n        resizeHalf: 'Ukuran 50%',\n        resizeQuarter: 'Ukuran 25%',\n        floatLeft: 'Rata kiri',\n        floatRight: 'Rata kanan',\n        floatNone: 'Tanpa perataan',\n        shapeRounded: 'Bentuk: Membundar',\n        shapeCircle: 'Bentuk: Bundar',\n        shapeThumbnail: 'Bentuk: Thumbnail',\n        shapeNone: 'Bentuk: Tidak ada',\n        dragImageHere: 'Tarik gambar ke area ini',\n        dropImage: 'Letakkan gambar atau teks',\n        selectFromFiles: 'Pilih gambar dari berkas',\n        maximumFileSize: 'Ukuran maksimal berkas',\n        maximumFileSizeError: 'Ukuran maksimal berkas terlampaui.',\n        url: 'URL gambar',\n        remove: 'Hapus Gambar',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link video',\n        insert: 'Sisipkan video',\n        url: 'Tautan video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion atau Youku)'\n      },\n      link: {\n        link: 'Tautan',\n        insert: 'Tambah tautan',\n        unlink: 'Hapus tautan',\n        edit: 'Edit',\n        textToDisplay: 'Tampilan teks',\n        url: 'Tautan tujuan',\n        openInNewWindow: 'Buka di jendela baru'\n      },\n      table: {\n        table: 'Tabel',\n        addRowAbove: 'Tambahkan baris ke atas',\n        addRowBelow: 'Tambahkan baris ke bawah',\n        addColLeft: 'Tambahkan kolom ke kiri',\n        addColRight: 'Tambahkan kolom ke kanan',\n        delRow: 'Hapus baris',\n        delCol: 'Hapus kolom',\n        delTable: 'Hapus tabel'\n      },\n      hr: {\n        insert: 'Masukkan garis horizontal'\n      },\n      style: {\n        style: 'Gaya',\n        p: 'p',\n        blockquote: 'Kutipan',\n        pre: 'Kode',\n        h1: 'Heading 1',\n        h2: 'Heading 2',\n        h3: 'Heading 3',\n        h4: 'Heading 4',\n        h5: 'Heading 5',\n        h6: 'Heading 6'\n      },\n      lists: {\n        unordered: 'Pencacahan',\n        ordered: 'Penomoran'\n      },\n      options: {\n        help: 'Bantuan',\n        fullscreen: 'Layar penuh',\n        codeview: 'Kode HTML'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Outdent',\n        indent: 'Indent',\n        left: 'Rata kiri',\n        center: 'Rata tengah',\n        right: 'Rata kanan',\n        justify: 'Rata kanan kiri'\n      },\n      color: {\n        recent: 'Warna sekarang',\n        more: 'Selengkapnya',\n        background: 'Warna latar',\n        foreground: 'Warna font',\n        transparent: 'Transparan',\n        setTransparent: 'Atur transparansi',\n        reset: 'Atur ulang',\n        resetToDefault: 'Kembalikan kesemula'\n      },\n      shortcut: {\n        shortcuts: 'Jalan pintas',\n        close: 'Tutup',\n        textFormatting: 'Format teks',\n        action: 'Aksi',\n        paragraphFormatting: 'Format paragraf',\n        documentStyle: 'Gaya dokumen',\n        extraKeys: 'Shortcut tambahan'\n      },\n      help: {\n        'insertParagraph': 'Tambahkan paragraf',\n        'undo': 'Urungkan perintah terakhir',\n        'redo': 'Kembalikan perintah terakhir',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Mengaktifkan gaya tebal',\n        'italic': 'Mengaktifkan gaya italic',\n        'underline': 'Mengaktifkan gaya underline',\n        'strikethrough': 'Mengaktifkan gaya strikethrough',\n        'removeFormat': 'Hapus semua gaya',\n        'justifyLeft': 'Atur rata kiri',\n        'justifyCenter': 'Atur rata tengah',\n        'justifyRight': 'Atur rata kanan',\n        'justifyFull': 'Atur rata kiri-kanan',\n        'insertUnorderedList': 'Nyalakan urutan tanpa nomor',\n        'insertOrderedList': 'Nyalakan urutan bernomor',\n        'outdent': 'Outdent di paragraf terpilih',\n        'indent': 'Indent di paragraf terpilih',\n        'formatPara': 'Ubah format gaya tulisan terpilih menjadi paragraf',\n        'formatH1': 'Ubah format gaya tulisan terpilih menjadi Heading 1',\n        'formatH2': 'Ubah format gaya tulisan terpilih menjadi Heading 2',\n        'formatH3': 'Ubah format gaya tulisan terpilih menjadi Heading 3',\n        'formatH4': 'Ubah format gaya tulisan terpilih menjadi Heading 4',\n        'formatH5': 'Ubah format gaya tulisan terpilih menjadi Heading 5',\n        'formatH6': 'Ubah format gaya tulisan terpilih menjadi Heading 6',\n        'insertHorizontalRule': 'Masukkan garis horizontal',\n        'linkDialog.show': 'Tampilkan Link Dialog'\n      },\n      history: {\n        undo: 'Kembali',\n        redo: 'Ulang'\n      },\n      specialChar: {\n        specialChar: 'KARAKTER KHUSUS',\n        select: 'Pilih karakter khusus'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-id-ID.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-it-IT.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'it-IT': {\n      font: {\n        bold: 'Testo in grassetto',\n        italic: 'Testo in corsivo',\n        underline: 'Testo sottolineato',\n        clear: 'Elimina la formattazione del testo',\n        height: 'Altezza della linea di testo',\n        name: 'Famiglia Font',\n        strikethrough: 'Testo barrato',\n        subscript: 'Pedice',\n        superscript: 'Apice',\n        size: 'Dimensione del carattere'\n      },\n      image: {\n        image: 'Immagine',\n        insert: 'Inserisci immagine',\n        resizeFull: 'Dimensioni originali',\n        resizeHalf: 'Ridimensiona al 50%',\n        resizeQuarter: 'Ridimensiona al 25%',\n        floatLeft: 'Posiziona a sinistra',\n        floatRight: 'Posiziona a destra',\n        floatNone: 'Nessun posizionamento',\n        shapeRounded: 'Forma: arrotondata',\n        shapeCircle: 'Forma: cerchio',\n        shapeThumbnail: 'Forma: miniatura',\n        shapeNone: 'Forma: nessuna',\n        dragImageHere: 'Trascina qui un\\'immagine',\n        dropImage: 'Rilascia immagine o testo',\n        selectFromFiles: 'Scegli dai file',\n        maximumFileSize: 'Dimensione massima del file',\n        maximumFileSizeError: 'Dimensione massima del file superata.',\n        url: 'URL dell\\'immagine',\n        remove: 'Rimuovi immagine',\n        original: 'Originale'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Collegamento ad un video',\n        insert: 'Inserisci video',\n        url: 'URL del video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Collegamento',\n        insert: 'Inserisci collegamento',\n        unlink: 'Elimina collegamento',\n        edit: 'Modifica collegamento',\n        textToDisplay: 'Testo del collegamento',\n        url: 'URL del collegamento',\n        openInNewWindow: 'Apri in una nuova finestra'\n      },\n      table: {\n        table: 'Tabella',\n        addRowAbove: 'Aggiungi riga sopra',\n        addRowBelow: 'Aggiungi riga sotto',\n        addColLeft: 'Aggiungi colonna sinistra',\n        addColRight: 'Aggiungi colonna destra',\n        delRow: 'Elimina riga',\n        delCol: 'Elimina colonna',\n        delTable: 'Elimina tabella'\n      },\n      hr: {\n        insert: 'Inserisce una linea di separazione'\n      },\n      style: {\n        style: 'Stili',\n        p: 'Normale',\n        blockquote: 'Citazione',\n        pre: 'Codice',\n        h1: 'Titolo 1',\n        h2: 'Titolo 2',\n        h3: 'Titolo 3',\n        h4: 'Titolo 4',\n        h5: 'Titolo 5',\n        h6: 'Titolo 6'\n      },\n      lists: {\n        unordered: 'Elenco non ordinato',\n        ordered: 'Elenco ordinato'\n      },\n      options: {\n        help: 'Aiuto',\n        fullscreen: 'Modalità a tutto schermo',\n        codeview: 'Visualizza codice'\n      },\n      paragraph: {\n        paragraph: 'Paragrafo',\n        outdent: 'Diminuisce il livello di rientro',\n        indent: 'Aumenta il livello di rientro',\n        left: 'Allinea a sinistra',\n        center: 'Centra',\n        right: 'Allinea a destra',\n        justify: 'Giustifica (allinea a destra e sinistra)'\n      },\n      color: {\n        recent: 'Ultimo colore utilizzato',\n        more: 'Altri colori',\n        background: 'Colore di sfondo',\n        foreground: 'Colore',\n        transparent: 'Trasparente',\n        setTransparent: 'Trasparente',\n        reset: 'Reimposta',\n        resetToDefault: 'Reimposta i colori'\n      },\n      shortcut: {\n        shortcuts: 'Scorciatoie da tastiera',\n        close: 'Chiudi',\n        textFormatting: 'Formattazione testo',\n        action: 'Azioni',\n        paragraphFormatting: 'Formattazione paragrafo',\n        documentStyle: 'Stili',\n        extraKeys: 'Tasti extra'\n      },\n      help: {\n        'insertParagraph': 'Inserisci paragrafo',\n        'undo': 'Annulla l\\'ultimo comando',\n        'redo': 'Ripristina l\\'ultimo comando',\n        'tab': 'Tabulazione',\n        'untab': 'Toglie tabulazione',\n        'bold': 'Imposta uno stile grassetto',\n        'italic': 'Imposta uno stile corsivo',\n        'underline': 'Imposta uno stile di sottolineatura',\n        'strikethrough': 'Imposta uno stile barrato',\n        'removeFormat': 'Rimuove uno stile',\n        'justifyLeft': 'Imposta l\\'allineamento a sinistra',\n        'justifyCenter': 'Imposta l\\'allineamento al centro',\n        'justifyRight': 'Imposta l\\'allineamento al destra',\n        'justifyFull': 'Imposta l\\'allineamento a pieno rigo',\n        'insertUnorderedList': 'Attiva/disattiva elenco non ordinato',\n        'insertOrderedList': 'Attiva/disattiva elenco ordinato',\n        'outdent': 'Annulla rientro paragrafo',\n        'indent': 'Rientro paragrafo',\n        'formatPara': 'Cambia il formato del blocco corrente come paragrafo (tag P)',\n        'formatH1': 'Cambia il formato del blocco corrente come H1',\n        'formatH2': 'Cambia il formato del blocco corrente come H2',\n        'formatH3': 'Cambia il formato del blocco corrente come H3',\n        'formatH4': 'Cambia il formato del blocco corrente come H4',\n        'formatH5': 'Cambia il formato del blocco corrente come H5',\n        'formatH6': 'Cambia il formato del blocco corrente come H6',\n        'insertHorizontalRule': 'Inserisci linea orizzontale',\n        'linkDialog.show': 'Mostra finestra di dialogo del collegamento'\n      },\n      history: {\n        undo: 'Annulla',\n        redo: 'Ripristina'\n      },\n      specialChar: {\n        specialChar: 'CARATTERI SPECIALI',\n        select: 'Selezione caratteri speciali'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-it-IT.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-ja-JP.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'ja-JP': {\n      font: {\n        bold: '太字',\n        italic: '斜体',\n        underline: '下線',\n        clear: 'クリア',\n        height: '文字高',\n        name: 'フォント',\n        strikethrough: '取り消し線',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: '大きさ'\n      },\n      image: {\n        image: '画像',\n        insert: '画像挿入',\n        resizeFull: '最大化',\n        resizeHalf: '1/2',\n        resizeQuarter: '1/4',\n        floatLeft: '左寄せ',\n        floatRight: '右寄せ',\n        floatNone: '寄せ解除',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'ここに画像をドラッグしてください',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: '画像ファイルを選ぶ',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URLから画像を挿入する',\n        remove: '画像を削除する',\n        original: 'Original'\n      },\n      video: {\n        video: '動画',\n        videoLink: '動画リンク',\n        insert: '動画挿入',\n        url: '動画のURL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku)'\n      },\n      link: {\n        link: 'リンク',\n        insert: 'リンク挿入',\n        unlink: 'リンク解除',\n        edit: '編集',\n        textToDisplay: 'リンク文字列',\n        url: 'URLを入力してください',\n        openInNewWindow: '新しいウィンドウで開く'\n      },\n      table: {\n        table: 'テーブル',\n        addRowAbove: '行を上に追加',\n        addRowBelow: '行を下に追加',\n        addColLeft: '列を左に追加',\n        addColRight: '列を右に追加',\n        delRow: '行を削除',\n        delCol: '列を削除',\n        delTable: 'テーブルを削除'\n      },\n      hr: {\n        insert: '水平線の挿入'\n      },\n      style: {\n        style: 'スタイル',\n        p: '標準',\n        blockquote: '引用',\n        pre: 'コード',\n        h1: '見出し1',\n        h2: '見出し2',\n        h3: '見出し3',\n        h4: '見出し4',\n        h5: '見出し5',\n        h6: '見出し6'\n      },\n      lists: {\n        unordered: '通常リスト',\n        ordered: '番号リスト'\n      },\n      options: {\n        help: 'ヘルプ',\n        fullscreen: 'フルスクリーン',\n        codeview: 'コード表示'\n      },\n      paragraph: {\n        paragraph: '文章',\n        outdent: '字上げ',\n        indent: '字下げ',\n        left: '左寄せ',\n        center: '中央寄せ',\n        right: '右寄せ',\n        justify: '均等割付'\n      },\n      color: {\n        recent: '現在の色',\n        more: 'もっと見る',\n        background: '背景色',\n        foreground: '文字色',\n        transparent: '透明',\n        setTransparent: '透明にする',\n        reset: '標準',\n        resetToDefault: '標準に戻す'\n      },\n      shortcut: {\n        shortcuts: 'ショートカット',\n        close: '閉じる',\n        textFormatting: '文字フォーマット',\n        action: 'アクション',\n        paragraphFormatting: '文章フォーマット',\n        documentStyle: 'ドキュメント形式',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': '改行挿入',\n        'undo': '一旦、行った操作を戻す',\n        'redo': '最後のコマンドをやり直す',\n        'tab': 'Tab',\n        'untab': 'タブ戻し',\n        'bold': '太文字',\n        'italic': '斜体',\n        'underline': '下線',\n        'strikethrough': '取り消し線',\n        'removeFormat': '装飾を戻す',\n        'justifyLeft': '左寄せ',\n        'justifyCenter': '真ん中寄せ',\n        'justifyRight': '右寄せ',\n        'justifyFull': 'すべてを整列',\n        'insertUnorderedList': '行頭に●を挿入',\n        'insertOrderedList': '行頭に番号を挿入',\n        'outdent': '字下げを戻す（アウトデント）',\n        'indent': '字下げする（インデント）',\n        'formatPara': '段落(P tag)指定',\n        'formatH1': 'H1指定',\n        'formatH2': 'H2指定',\n        'formatH3': 'H3指定',\n        'formatH4': 'H4指定',\n        'formatH5': 'H5指定',\n        'formatH6': 'H6指定',\n        'insertHorizontalRule': '&lt;hr /&gt;を挿入',\n        'linkDialog.show': 'リンク挿入'\n      },\n      history: {\n        undo: '元に戻す',\n        redo: 'やり直す'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-ja-JP.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-ko-KR.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'ko-KR': {\n      font: {\n        bold: '굵게',\n        italic: '기울임꼴',\n        underline: '밑줄',\n        clear: '서식 지우기',\n        height: '줄 간격',\n        name: '글꼴',\n        superscript: '위 첨자',\n        subscript: '아래 첨자',\n        strikethrough: '취소선',\n        size: '글자 크기'\n      },\n      image: {\n        image: '그림',\n        insert: '그림 삽입',\n        resizeFull: '100% 크기로 변경',\n        resizeHalf: '50% 크기로 변경',\n        resizeQuarter: '25% 크기로 변경',\n        resizeNone: '원본 크기',\n        floatLeft: '왼쪽 정렬',\n        floatRight: '오른쪽 정렬',\n        floatNone: '정렬하지 않음',\n        shapeRounded: '스타일: 둥근 모서리',\n        shapeCircle: '스타일: 원형',\n        shapeThumbnail: '스타일: 액자',\n        shapeNone: '스타일: 없음',\n        dragImageHere: '텍스트 혹은 사진을 이곳으로 끌어오세요',\n        dropImage: '텍스트 혹은 사진을 내려놓으세요',\n        selectFromFiles: '파일 선택',\n        maximumFileSize: '최대 파일 크기',\n        maximumFileSizeError: '최대 파일 크기를 초과했습니다.',\n        url: '사진 URL',\n        remove: '사진 삭제',\n        original: '원본'\n      },\n      video: {\n        video: '동영상',\n        videoLink: '동영상 링크',\n        insert: '동영상 삽입',\n        url: '동영상 URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)'\n      },\n      link: {\n        link: '링크',\n        insert: '링크 삽입',\n        unlink: '링크 삭제',\n        edit: '수정',\n        textToDisplay: '링크에 표시할 내용',\n        url: '이동할 URL',\n        openInNewWindow: '새창으로 열기'\n      },\n      table: {\n        table: '표',\n        addRowAbove: '위에 행 삽입',\n        addRowBelow: '아래에 행 삽입',\n        addColLeft: '왼쪽에 열 삽입',\n        addColRight: '오른쪽에 열 삽입',\n        delRow: '행 지우기',\n        delCol: '열 지우기',\n        delTable: '표 삭제'\n      },\n      hr: {\n        insert: '구분선 삽입'\n      },\n      style: {\n        style: '스타일',\n        p: '본문',\n        blockquote: '인용구',\n        pre: '코드',\n        h1: '제목 1',\n        h2: '제목 2',\n        h3: '제목 3',\n        h4: '제목 4',\n        h5: '제목 5',\n        h6: '제목 6'\n      },\n      lists: {\n        unordered: '글머리 기호',\n        ordered: '번호 매기기'\n      },\n      options: {\n        help: '도움말',\n        fullscreen: '전체 화면',\n        codeview: '코드 보기'\n      },\n      paragraph: {\n        paragraph: '문단 정렬',\n        outdent: '내어쓰기',\n        indent: '들여쓰기',\n        left: '왼쪽 정렬',\n        center: '가운데 정렬',\n        right: '오른쪽 정렬',\n        justify: '양쪽 정렬'\n      },\n      color: {\n        recent: '마지막으로 사용한 색',\n        more: '다른 색 선택',\n        background: '배경색',\n        foreground: '글자색',\n        transparent: '투명',\n        setTransparent: '투명으로 설정',\n        reset: '취소',\n        resetToDefault: '기본값으로 설정',\n        cpSelect: '선택'\n      },\n      shortcut: {\n        shortcuts: '키보드 단축키',\n        close: '닫기',\n        textFormatting: '글자 스타일 적용',\n        action: '기능',\n        paragraphFormatting: '문단 스타일 적용',\n        documentStyle: '문서 스타일 적용',\n        extraKeys: '추가 키'\n      },\n      help: {\n        'insertParagraph': '문단 삽입',\n        'undo': '마지막 명령 취소',\n        'redo': '마지막 명령 재실행',\n        'tab': '탭',\n        'untab': '탭 제거',\n        'bold': '굵은 글자로 설정',\n        'italic': '기울임꼴 글자로 설정',\n        'underline': '밑줄 글자로 설정',\n        'strikethrough': '취소선 글자로 설정',\n        'removeFormat': '서식 삭제',\n        'justifyLeft': '왼쪽 정렬하기',\n        'justifyCenter': '가운데 정렬하기',\n        'justifyRight': '오른쪽 정렬하기',\n        'justifyFull': '좌우채움 정렬하기',\n        'insertUnorderedList': '글머리 기호 켜고 끄기',\n        'insertOrderedList': '번호 매기기 켜고 끄기',\n        'outdent': '현재 문단 내어쓰기',\n        'indent': '현재 문단 들여쓰기',\n        'formatPara': '현재 블록의 포맷을 문단(P)으로 변경',\n        'formatH1': '현재 블록의 포맷을 제목1(H1)로 변경',\n        'formatH2': '현재 블록의 포맷을 제목2(H2)로 변경',\n        'formatH3': '현재 블록의 포맷을 제목3(H3)로 변경',\n        'formatH4': '현재 블록의 포맷을 제목4(H4)로 변경',\n        'formatH5': '현재 블록의 포맷을 제목5(H5)로 변경',\n        'formatH6': '현재 블록의 포맷을 제목6(H6)로 변경',\n        'insertHorizontalRule': '구분선 삽입',\n        'linkDialog.show': '링크 대화상자 열기'\n      },\n      history: {\n        undo: '실행 취소',\n        redo: '재실행'\n      },\n      specialChar: {\n        specialChar: '특수문자',\n        select: '특수문자를 선택하세요'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-ko-KR.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-lt-LT.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'lt-LT': {\n      font: {\n        bold: 'Paryškintas',\n        italic: 'Kursyvas',\n        underline: 'Pabrėžtas',\n        clear: 'Be formatavimo',\n        height: 'Eilutės aukštis',\n        name: 'Šrifto pavadinimas',\n        strikethrough: 'Perbrauktas',\n        superscript: 'Viršutinis',\n        subscript: 'Indeksas',\n        size: 'Šrifto dydis'\n      },\n      image: {\n        image: 'Paveikslėlis',\n        insert: 'Įterpti paveikslėlį',\n        resizeFull: 'Pilnas dydis',\n        resizeHalf: 'Sumažinti dydį 50%',\n        resizeQuarter: 'Sumažinti dydį 25%',\n        floatLeft: 'Kairinis lygiavimas',\n        floatRight: 'Dešininis lygiavimas',\n        floatNone: 'Jokio lygiavimo',\n        shapeRounded: 'Forma: apvalūs kraštai',\n        shapeCircle: 'Forma: apskritimas',\n        shapeThumbnail: 'Forma: miniatiūra',\n        shapeNone: 'Forma: jokia',\n        dragImageHere: 'Vilkite paveikslėlį čia',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Pasirinkite failą',\n        maximumFileSize: 'Maskimalus failo dydis',\n        maximumFileSizeError: 'Maskimalus failo dydis viršytas!',\n        url: 'Paveikslėlio URL adresas',\n        remove: 'Ištrinti paveikslėlį',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Insert Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Nuoroda',\n        insert: 'Įterpti nuorodą',\n        unlink: 'Pašalinti nuorodą',\n        edit: 'Redaguoti',\n        textToDisplay: 'Rodomas tekstas',\n        url: 'Koks URL adresas yra susietas?',\n        openInNewWindow: 'Atidaryti naujame lange'\n      },\n      table: {\n        table: 'Lentelė',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Įterpti horizontalią liniją'\n      },\n      style: {\n        style: 'Stilius',\n        p: 'pus',\n        blockquote: 'Citata',\n        pre: 'Kodas',\n        h1: 'Antraštė 1',\n        h2: 'Antraštė 2',\n        h3: 'Antraštė 3',\n        h4: 'Antraštė 4',\n        h5: 'Antraštė 5',\n        h6: 'Antraštė 6'\n      },\n      lists: {\n        unordered: 'Suženklintasis sąrašas',\n        ordered: 'Sunumeruotas sąrašas'\n      },\n      options: {\n        help: 'Pagalba',\n        fullscreen: 'Viso ekrano režimas',\n        codeview: 'HTML kodo peržiūra'\n      },\n      paragraph: {\n        paragraph: 'Pastraipa',\n        outdent: 'Sumažinti įtrauką',\n        indent: 'Padidinti įtrauką',\n        left: 'Kairinė lygiuotė',\n        center: 'Centrinė lygiuotė',\n        right: 'Dešininė lygiuotė',\n        justify: 'Abipusis išlyginimas'\n      },\n      color: {\n        recent: 'Paskutinė naudota spalva',\n        more: 'Daugiau spalvų',\n        background: 'Fono spalva',\n        foreground: 'Šrifto spalva',\n        transparent: 'Permatoma',\n        setTransparent: 'Nustatyti skaidrumo intensyvumą',\n        reset: 'Atkurti',\n        resetToDefault: 'Atstatyti numatytąją spalvą'\n      },\n      shortcut: {\n        shortcuts: 'Spartieji klavišai',\n        close: 'Uždaryti',\n        textFormatting: 'Teksto formatavimas',\n        action: 'Veiksmas',\n        paragraphFormatting: 'Pastraipos formatavimas',\n        documentStyle: 'Dokumento stilius',\n        extraKeys: 'Papildomi klavišų deriniai'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Anuliuoti veiksmą',\n        redo: 'Perdaryti veiksmą'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-lt-LT.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-lt-LV.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'lv-LV': {\n      font: {\n        bold: 'Treknraksts',\n        italic: 'Kursīvs',\n        underline: 'Pasvītrots',\n        clear: 'Noņemt formatējumu',\n        height: 'Līnijas augstums',\n        name: 'Fonts',\n        strikethrough: 'Nosvītrots',\n        superscript: 'Augšraksts',\n        subscript: 'Apakšraksts',\n        size: 'Fonta lielums'\n      },\n      image: {\n        image: 'Attēls',\n        insert: 'Ievietot attēlu',\n        resizeFull: 'Pilns izmērts',\n        resizeHalf: 'Samazināt 50%',\n        resizeQuarter: 'Samazināt 25%',\n        floatLeft: 'Līdzināt pa kreisi',\n        floatRight: 'Līdzināt pa labi',\n        floatNone: 'Nelīdzināt',\n        shapeRounded: 'Forma: apaļām malām',\n        shapeCircle: 'Forma: aplis',\n        shapeThumbnail: 'Forma: rāmītis',\n        shapeNone: 'Forma: orģināla',\n        dragImageHere: 'Ievēlciet attēlu šeit',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Izvēlēties failu',\n        maximumFileSize: 'Maksimālais faila izmērs',\n        maximumFileSizeError: 'Faila izmērs pārāk liels!',\n        url: 'Attēla URL',\n        remove: 'Dzēst attēlu',\n        original: 'Oriģināls'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video saite',\n        insert: 'Ievietot Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Saite',\n        insert: 'Ievietot saiti',\n        unlink: 'Noņemt saiti',\n        edit: 'Rediģēt',\n        textToDisplay: 'Saites saturs',\n        url: 'Uz kādu URL šai saitei būtu jāved?',\n        openInNewWindow: 'Atvērt jaunā logā'\n      },\n      table: {\n        table: 'Tabula',\n        addRowAbove: 'Pievienot rindu virs',\n        addRowBelow: 'Pievienot rindu zem',\n        addColLeft: 'Pievienot kolonnu pa kreisi',\n        addColRight: 'Pievienot kolonnu pa labi',\n        delRow: 'Dzēst rindu',\n        delCol: 'Dzēst kolonnu',\n        delTable: 'Dzēst tabulu'\n      },\n      hr: {\n        insert: 'Ievietot līniju'\n      },\n      style: {\n        style: 'Stils',\n        p: 'Parasts',\n        blockquote: 'Citāts',\n        pre: 'Kods',\n        h1: 'Virsraksts h1',\n        h2: 'Virsraksts h2',\n        h3: 'Virsraksts h3',\n        h4: 'Virsraksts h4',\n        h5: 'Virsraksts h5',\n        h6: 'Virsraksts h6'\n      },\n      lists: {\n        unordered: 'Nenumurēts saraksts',\n        ordered: 'Numurēts saraksts'\n      },\n      options: {\n        help: 'Palīdzība',\n        fullscreen: 'Pa visu ekrānu',\n        codeview: 'HTML kods'\n      },\n      paragraph: {\n        paragraph: 'Paragrāfs',\n        outdent: 'Samazināt atkāpi',\n        indent: 'Palielināt atkāpi',\n        left: 'Līdzināt pa kreisi',\n        center: 'Centrēt',\n        right: 'Līdzināt pa labi',\n        justify: 'Līdzināt gar abām malām'\n      },\n      color: {\n        recent: 'Nesen izmantotās',\n        more: 'Citas krāsas',\n        background: 'Fona krāsa',\n        foreground: 'Fonta krāsa',\n        transparent: 'Caurspīdīgs',\n        setTransparent: 'Iestatīt caurspīdīgumu',\n        reset: 'Atjaunot',\n        resetToDefault: 'Atjaunot noklusējumu'\n      },\n      shortcut: {\n        shortcuts: 'Saīsnes',\n        close: 'Aizvērt',\n        textFormatting: 'Teksta formatēšana',\n        action: 'Darbība',\n        paragraphFormatting: 'Paragrāfa formatēšana',\n        documentStyle: 'Dokumenta stils',\n        extraKeys: 'Citas taustiņu kombinācijas'\n      },\n      help: {\n        insertParagraph: 'Ievietot Paragrāfu',\n        undo: 'Atcelt iepriekšējo darbību',\n        redo: 'Atkārtot atcelto darbību',\n        tab: 'Atkāpe',\n        untab: 'Samazināt atkāpi',\n        bold: 'Pārvērst tekstu treknrakstā',\n        italic: 'Pārvērst tekstu slīprakstā (kursīvā)',\n        underline: 'Pasvītrot tekstu',\n        strikethrough: 'Nosvītrot tekstu',\n        removeFormat: 'Notīrīt stilu no teksta',\n        justifyLeft: 'Līdzīnāt saturu pa kreisi',\n        justifyCenter: 'Centrēt saturu',\n        justifyRight: 'Līdzīnāt saturu pa labi',\n        justifyFull: 'Izlīdzināt saturu gar abām malām',\n        insertUnorderedList: 'Ievietot nenumurētu sarakstu',\n        insertOrderedList: 'Ievietot numurētu sarakstu',\n        outdent: 'Samazināt/noņemt atkāpi paragrāfam',\n        indent: 'Uzlikt atkāpi paragrāfam',\n        formatPara: 'Mainīt bloka tipu uz (p) Paragrāfu',\n        formatH1: 'Mainīt bloka tipu uz virsrakstu H1',\n        formatH2: 'Mainīt bloka tipu uz virsrakstu H2',\n        formatH3: 'Mainīt bloka tipu uz virsrakstu H3',\n        formatH4: 'Mainīt bloka tipu uz virsrakstu H4',\n        formatH5: 'Mainīt bloka tipu uz virsrakstu H5',\n        formatH6: 'Mainīt bloka tipu uz virsrakstu H6',\n        insertHorizontalRule: 'Ievietot horizontālu līniju',\n        'linkDialog.show': 'Parādīt saites logu'\n      },\n      history: {\n        undo: 'Atsauks (undo)',\n        redo: 'Atkārtot (redo)'\n      },\n      specialChar: {\n        specialChar: 'ĪPAŠIE SIMBOLI',\n        select: 'Izvēlieties īpašos simbolus'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-lt-LV.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-mn-MN.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n// Starsoft Mongolia LLC Temuujin Ariunbold\n\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'mn-MN': {\n      font: {\n        bold: 'Тод',\n        italic: 'Налуу',\n        underline: 'Доогуур зураас',\n        clear: 'Цэвэрлэх',\n        height: 'Өндөр',\n        name: 'Фонт',\n        superscript: 'Дээд илтгэгч',\n        subscript: 'Доод илтгэгч',\n        strikethrough: 'Дарах',\n        size: 'Хэмжээ'\n      },\n      image: {\n        image: 'Зураг',\n        insert: 'Оруулах',\n        resizeFull: 'Хэмжээ бүтэн',\n        resizeHalf: 'Хэмжээ 1/2',\n        resizeQuarter: 'Хэмжээ 1/4',\n        floatLeft: 'Зүүн талд байрлуулах',\n        floatRight: 'Баруун талд байрлуулах',\n        floatNone: 'Анхдагч байрлалд аваачих',\n        shapeRounded: 'Хүрээ: Дугуй',\n        shapeCircle: 'Хүрээ: Тойрог',\n        shapeThumbnail: 'Хүрээ: Хураангуй',\n        shapeNone: 'Хүрээгүй',\n        dragImageHere: 'Зургийг энд чирч авчирна уу',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Файлуудаас сонгоно уу',\n        maximumFileSize: 'Файлын дээд хэмжээ',\n        maximumFileSizeError: 'Файлын дээд хэмжээ хэтэрсэн',\n        url: 'Зургийн URL',\n        remove: 'Зургийг устгах',\n        original: 'Original'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Видео холбоос',\n        insert: 'Видео оруулах',\n        url: 'Видео URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion болон Youku)'\n      },\n      link: {\n        link: 'Холбоос',\n        insert: 'Холбоос оруулах',\n        unlink: 'Холбоос арилгах',\n        edit: 'Засварлах',\n        textToDisplay: 'Харуулах бичвэр',\n        url: 'Энэ холбоос хаашаа очих вэ?',\n        openInNewWindow: 'Шинэ цонхонд нээх'\n      },\n      table: {\n        table: 'Хүснэгт',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Хэвтээ шугам оруулах'\n      },\n      style: {\n        style: 'Хэв маяг',\n        p: 'p',\n        blockquote: 'Иш татах',\n        pre: 'Эх сурвалж',\n        h1: 'Гарчиг 1',\n        h2: 'Гарчиг 2',\n        h3: 'Гарчиг 3',\n        h4: 'Гарчиг 4',\n        h5: 'Гарчиг 5',\n        h6: 'Гарчиг 6'\n      },\n      lists: {\n        unordered: 'Эрэмбэлэгдээгүй',\n        ordered: 'Эрэмбэлэгдсэн'\n      },\n      options: {\n        help: 'Тусламж',\n        fullscreen: 'Дэлгэцийг дүүргэх',\n        codeview: 'HTML-Code харуулах'\n      },\n      paragraph: {\n        paragraph: 'Хэсэг',\n        outdent: 'Догол мөр хасах',\n        indent: 'Догол мөр нэмэх',\n        left: 'Зүүн тийш эгнүүлэх',\n        center: 'Төвд эгнүүлэх',\n        right: 'Баруун тийш эгнүүлэх',\n        justify: 'Мөрийг тэгшлэх'\n      },\n      color: {\n        recent: 'Сүүлд хэрэглэсэн өнгө',\n        more: 'Өөр өнгөнүүд',\n        background: 'Дэвсгэр өнгө',\n        foreground: 'Үсгийн өнгө',\n        transparent: 'Тунгалаг',\n        setTransparent: 'Тунгалаг болгох',\n        reset: 'Анхдагч өнгөөр тохируулах',\n        resetToDefault: 'Хэвд нь оруулах'\n      },\n      shortcut: {\n        shortcuts: 'Богино холбоос',\n        close: 'Хаалт',\n        textFormatting: 'Бичвэрийг хэлбэржүүлэх',\n        action: 'Үйлдэл',\n        paragraphFormatting: 'Догол мөрийг хэлбэржүүлэх',\n        documentStyle: 'Бичиг баримтын хэв загвар',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Буцаах',\n        redo: 'Дахин хийх'\n      },\n      specialChar: {\n        specialChar: 'Тусгай тэмдэгт',\n        select: 'Тусгай тэмдэгт сонгох'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-mn-MN.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-nb-NO.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'nb-NO': {\n      font: {\n        bold: 'Fet',\n        italic: 'Kursiv',\n        underline: 'Understrek',\n        clear: 'Fjern formatering',\n        height: 'Linjehøyde',\n        name: 'Skrifttype',\n        strikethrough: 'Gjennomstrek',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Skriftstørrelse'\n      },\n      image: {\n        image: 'Bilde',\n        insert: 'Sett inn bilde',\n        resizeFull: 'Sett full størrelse',\n        resizeHalf: 'Sett halv størrelse',\n        resizeQuarter: 'Sett kvart størrelse',\n        floatLeft: 'Flyt til venstre',\n        floatRight: 'Flyt til høyre',\n        floatNone: 'Fjern flyt',\n        shapeRounded: 'Form: Rundet',\n        shapeCircle: 'Form: Sirkel',\n        shapeThumbnail: 'Form: Miniatyr',\n        shapeNone: 'Form: Ingen',\n        dragImageHere: 'Dra et bilde hit',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Velg fra filer',\n        maximumFileSize: 'Max filstørrelse',\n        maximumFileSizeError: 'Maks filstørrelse overskredet.',\n        url: 'Bilde-URL',\n        remove: 'Fjern bilde',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Videolenke',\n        insert: 'Sett inn video',\n        url: 'Video-URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Lenke',\n        insert: 'Sett inn lenke',\n        unlink: 'Fjern lenke',\n        edit: 'Rediger',\n        textToDisplay: 'Visningstekst',\n        url: 'Til hvilken URL skal denne lenken peke?',\n        openInNewWindow: 'Åpne i nytt vindu'\n      },\n      table: {\n        table: 'Tabell',\n        addRowAbove: 'Legg til rad over',\n        addRowBelow: 'Legg til rad under',\n        addColLeft: 'Legg til kolonne på venstre side',\n        addColRight: 'Legg til kolonne på høyre side',\n        delRow: 'Slett rad',\n        delCol: 'Slett kolonne',\n        delTable: 'Slett tabell'\n      },\n      hr: {\n        insert: 'Sett inn horisontal linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'Paragraf',\n        blockquote: 'Sitat',\n        pre: 'Kode',\n        h1: 'Overskrift 1',\n        h2: 'Overskrift 2',\n        h3: 'Overskrift 3',\n        h4: 'Overskrift 4',\n        h5: 'Overskrift 5',\n        h6: 'Overskrift 6'\n      },\n      lists: {\n        unordered: 'Punktliste',\n        ordered: 'Nummerert liste'\n      },\n      options: {\n        help: 'Hjelp',\n        fullscreen: 'Fullskjerm',\n        codeview: 'HTML-visning'\n      },\n      paragraph: {\n        paragraph: 'Avsnitt',\n        outdent: 'Tilbakerykk',\n        indent: 'Innrykk',\n        left: 'Venstrejustert',\n        center: 'Midtstilt',\n        right: 'Høyrejustert',\n        justify: 'Blokkjustert'\n      },\n      color: {\n        recent: 'Nylig valgt farge',\n        more: 'Flere farger',\n        background: 'Bakgrunnsfarge',\n        foreground: 'Skriftfarge',\n        transparent: 'Gjennomsiktig',\n        setTransparent: 'Sett gjennomsiktig',\n        reset: 'Nullstill',\n        resetToDefault: 'Nullstill til standard'\n      },\n      shortcut: {\n        shortcuts: 'Hurtigtaster',\n        close: 'Lukk',\n        textFormatting: 'Tekstformatering',\n        action: 'Handling',\n        paragraphFormatting: 'Avsnittsformatering',\n        documentStyle: 'Dokumentstil'\n      },\n      help: {\n        'insertParagraph': 'Sett inn avsnitt',\n        'undo': 'Angre siste handling',\n        'redo': 'Gjør om siste handling',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Angi en fet stil',\n        'italic': 'Angi en kursiv stil',\n        'underline': 'Sett en understreket stil',\n        'strikethrough': 'Sett en gjennomgående sti',\n        'removeFormat': 'Tøm formattering',\n        'justifyLeft': 'Angi venstrejustering',\n        'justifyCenter': 'Angi sentrert justering',\n        'justifyRight': 'Angi høyre justering',\n        'justifyFull': 'Angi full justering',\n        'insertUnorderedList': 'Bytt uordnet liste',\n        'insertOrderedList': 'Bytt sortert liste',\n        'outdent': 'Utrykk på valgt avsnitt',\n        'indent': 'Innrykk på valgt avsnitt',\n        'formatPara': 'Endre gjeldende blokkformat til et avsnitt (P-kode)',\n        'formatH1': 'Endre gjeldende blokkformat til H1',\n        'formatH2': 'Endre gjeldende blokkformat til H2',\n        'formatH3': 'Endre gjeldende blokkformat til H3',\n        'formatH4': 'Endre gjeldende blokkformat til H4',\n        'formatH5': 'Endre gjeldende blokkformat til H5',\n        'formatH6': 'Endre gjeldende blokkformat til H6',\n        'insertHorizontalRule': 'Sett inn horisontal deler',\n        'linkDialog.show': 'Vis koblingsdialog'\n      },\n      history: {\n        undo: 'Angre',\n        redo: 'Gjør om'\n      },\n      specialChar: {\n        specialChar: 'SPESIELLE TEGN',\n        select: 'Velg spesielle tegn'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-nb-NO.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-nl-NL.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'nl-NL': {\n      font: {\n        bold: 'Vet',\n        italic: 'Cursief',\n        underline: 'Onderstrepen',\n        clear: 'Stijl verwijderen',\n        height: 'Regelhoogte',\n        name: 'Lettertype',\n        strikethrough: 'Doorhalen',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Tekstgrootte'\n      },\n      image: {\n        image: 'Afbeelding',\n        insert: 'Afbeelding invoegen',\n        resizeFull: 'Volledige breedte',\n        resizeHalf: 'Halve breedte',\n        resizeQuarter: 'Kwart breedte',\n        floatLeft: 'Links uitlijnen',\n        floatRight: 'Rechts uitlijnen',\n        floatNone: 'Geen uitlijning',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Sleep hier een afbeelding naar toe',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Selecteer een bestand',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL van de afbeelding',\n        remove: 'Verwijder afbeelding',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video link',\n        insert: 'Video invoegen',\n        url: 'URL van de video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion of Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link invoegen',\n        unlink: 'Link verwijderen',\n        edit: 'Wijzigen',\n        textToDisplay: 'Tekst van link',\n        url: 'Naar welke URL moet deze link verwijzen?',\n        openInNewWindow: 'Open in nieuw venster'\n      },\n      table: {\n        table: 'Tabel',\n        addRowAbove: 'Rij hierboven invoegen',\n        addRowBelow: 'Rij hieronder invoegen',\n        addColLeft: 'Kolom links toevoegen',\n        addColRight: 'Kolom rechts toevoegen',\n        delRow: 'Verwijder rij',\n        delCol: 'Verwijder kolom',\n        delTable: 'Verwijder tabel'\n      },\n      hr: {\n        insert: 'Horizontale lijn invoegen'\n      },\n      style: {\n        style: 'Stijl',\n        p: 'Normaal',\n        blockquote: 'Quote',\n        pre: 'Code',\n        h1: 'Kop 1',\n        h2: 'Kop 2',\n        h3: 'Kop 3',\n        h4: 'Kop 4',\n        h5: 'Kop 5',\n        h6: 'Kop 6'\n      },\n      lists: {\n        unordered: 'Ongeordende lijst',\n        ordered: 'Geordende lijst'\n      },\n      options: {\n        help: 'Help',\n        fullscreen: 'Volledig scherm',\n        codeview: 'Bekijk Code'\n      },\n      paragraph: {\n        paragraph: 'Paragraaf',\n        outdent: 'Inspringen verkleinen',\n        indent: 'Inspringen vergroten',\n        left: 'Links uitlijnen',\n        center: 'Centreren',\n        right: 'Rechts uitlijnen',\n        justify: 'Uitvullen'\n      },\n      color: {\n        recent: 'Recente kleur',\n        more: 'Meer kleuren',\n        background: 'Achtergrond kleur',\n        foreground: 'Tekst kleur',\n        transparent: 'Transparant',\n        setTransparent: 'Transparant',\n        reset: 'Standaard',\n        resetToDefault: 'Standaard kleur'\n      },\n      shortcut: {\n        shortcuts: 'Toetsencombinaties',\n        close: 'sluiten',\n        textFormatting: 'Tekststijlen',\n        action: 'Acties',\n        paragraphFormatting: 'Paragraafstijlen',\n        documentStyle: 'Documentstijlen',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Alinea invoegen',\n        'undo': 'Laatste handeling ongedaan maken',\n        'redo': 'Laatste handeling opnieuw uitvoeren',\n        'tab': 'Tab',\n        'untab': 'Herstel tab',\n        'bold': 'Stel stijl in als vet',\n        'italic': 'Stel stijl in als cursief',\n        'underline': 'Stel stijl in als onderstreept',\n        'strikethrough': 'Stel stijl in als doorgestreept',\n        'removeFormat': 'Verwijder stijl',\n        'justifyLeft': 'Lijn links uit',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Lijn rechts uit',\n        'justifyFull': 'Lijn uit op volledige breedte',\n        'insertUnorderedList': 'Zet ongeordende lijstweergave aan',\n        'insertOrderedList': 'Zet geordende lijstweergave aan',\n        'outdent': 'Verwijder inspringing huidige alinea',\n        'indent': 'Inspringen op huidige alinea',\n        'formatPara': 'Wijzig formattering huidig blok in alinea(P tag)',\n        'formatH1': 'Formatteer huidig blok als H1',\n        'formatH2': 'Formatteer huidig blok als H2',\n        'formatH3': 'Formatteer huidig blok als H3',\n        'formatH4': 'Formatteer huidig blok als H4',\n        'formatH5': 'Formatteer huidig blok als H5',\n        'formatH6': 'Formatteer huidig blok als H6',\n        'insertHorizontalRule': 'Invoegen horizontale lijn',\n        'linkDialog.show': 'Toon Link Dialoogvenster'\n      },\n      history: {\n        undo: 'Ongedaan maken',\n        redo: 'Opnieuw doorvoeren'\n      },\n      specialChar: {\n        specialChar: 'SPECIALE TEKENS',\n        select: 'Selecteer Speciale Tekens'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-nl-NL.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-pl-PL.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'pl-PL': {\n      font: {\n        bold: 'Pogrubienie',\n        italic: 'Pochylenie',\n        underline: 'Podkreślenie',\n        clear: 'Usuń formatowanie',\n        height: 'Interlinia',\n        name: 'Czcionka',\n        strikethrough: 'Przekreślenie',\n        subscript: 'Indeks dolny',\n        superscript: 'Indeks górny',\n        size: 'Rozmiar'\n      },\n      image: {\n        image: 'Grafika',\n        insert: 'Wstaw grafikę',\n        resizeFull: 'Zmień rozmiar na 100%',\n        resizeHalf: 'Zmień rozmiar na 50%',\n        resizeQuarter: 'Zmień rozmiar na 25%',\n        floatLeft: 'Do lewej',\n        floatRight: 'Do prawej',\n        floatNone: 'Równo z tekstem',\n        shapeRounded: 'Kształt: zaokrąglone',\n        shapeCircle: 'Kształt: okrąg',\n        shapeThumbnail: 'Kształt: miniatura',\n        shapeNone: 'Kształt: brak',\n        dragImageHere: 'Przeciągnij grafikę lub tekst tutaj',\n        dropImage: 'Przeciągnij grafikę lub tekst',\n        selectFromFiles: 'Wybierz z dysku',\n        maximumFileSize: 'Limit wielkości pliku',\n        maximumFileSizeError: 'Przekroczono limit wielkości pliku.',\n        url: 'Adres URL grafiki',\n        remove: 'Usuń grafikę',\n        original: 'Oryginał'\n      },\n      video: {\n        video: 'Wideo',\n        videoLink: 'Adres wideo',\n        insert: 'Wstaw wideo',\n        url: 'Adres wideo',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion lub Youku)'\n      },\n      link: {\n        link: 'Odnośnik',\n        insert: 'Wstaw odnośnik',\n        unlink: 'Usuń odnośnik',\n        edit: 'Edytuj',\n        textToDisplay: 'Tekst do wyświetlenia',\n        url: 'Na jaki adres URL powinien przenosić ten odnośnik?',\n        openInNewWindow: 'Otwórz w nowym oknie'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Dodaj wiersz powyżej',\n        addRowBelow: 'Dodaj wiersz poniżej',\n        addColLeft: 'Dodaj kolumnę po lewej',\n        addColRight: 'Dodaj kolumnę po prawej',\n        delRow: 'Usuń wiersz',\n        delCol: 'Usuń kolumnę',\n        delTable: 'Usuń tabelę'\n      },\n      hr: {\n        insert: 'Wstaw poziomą linię'\n      },\n      style: {\n        style: 'Styl',\n        p: 'Paragraf',\n        blockquote: 'Cytat',\n        pre: 'Kod',\n        h1: 'Nagłówek 1',\n        h2: 'Nagłówek 2',\n        h3: 'Nagłówek 3',\n        h4: 'Nagłówek 4',\n        h5: 'Nagłówek 5',\n        h6: 'Nagłówek 6'\n      },\n      lists: {\n        unordered: 'Lista wypunktowana',\n        ordered: 'Lista numerowana'\n      },\n      options: {\n        help: 'Pomoc',\n        fullscreen: 'Pełny ekran',\n        codeview: 'Źródło'\n      },\n      paragraph: {\n        paragraph: 'Akapit',\n        outdent: 'Zmniejsz wcięcie',\n        indent: 'Zwiększ wcięcie',\n        left: 'Wyrównaj do lewej',\n        center: 'Wyrównaj do środka',\n        right: 'Wyrównaj do prawej',\n        justify: 'Wyrównaj do lewej i prawej'\n      },\n      color: {\n        recent: 'Ostani kolor',\n        more: 'Więcej kolorów',\n        background: 'Tło',\n        foreground: 'Czcionka',\n        transparent: 'Przeźroczysty',\n        setTransparent: 'Przeźroczyste',\n        reset: 'Zresetuj',\n        resetToDefault: 'Domyślne'\n      },\n      shortcut: {\n        shortcuts: 'Skróty klawiaturowe',\n        close: 'Zamknij',\n        textFormatting: 'Formatowanie tekstu',\n        action: 'Akcja',\n        paragraphFormatting: 'Formatowanie akapitu',\n        documentStyle: 'Styl dokumentu',\n        extraKeys: 'Dodatkowe klawisze'\n      },\n      help: {\n        'insertParagraph': 'Wstaw paragraf',\n        'undo': 'Cofnij poprzednią operację',\n        'redo': 'Przywróć poprzednią operację',\n        'tab': 'Tabulacja',\n        'untab': 'Usuń tabulację',\n        'bold': 'Pogrubienie',\n        'italic': 'Kursywa',\n        'underline': 'Podkreślenie',\n        'strikethrough': 'Przekreślenie',\n        'removeFormat': 'Usuń formatowanie',\n        'justifyLeft': 'Wyrównaj do lewej',\n        'justifyCenter': 'Wyrównaj do środka',\n        'justifyRight': 'Wyrównaj do prawej',\n        'justifyFull': 'Justyfikacja',\n        'insertUnorderedList': 'Nienumerowana lista',\n        'insertOrderedList': 'Wypunktowana lista',\n        'outdent': 'Zmniejsz wcięcie paragrafu',\n        'indent': 'Zwiększ wcięcie paragrafu',\n        'formatPara': 'Zamień format bloku na paragraf (tag P)',\n        'formatH1': 'Zamień format bloku na H1',\n        'formatH2': 'Zamień format bloku na H2',\n        'formatH3': 'Zamień format bloku na H3',\n        'formatH4': 'Zamień format bloku na H4',\n        'formatH5': 'Zamień format bloku na H5',\n        'formatH6': 'Zamień format bloku na H6',\n        'insertHorizontalRule': 'Wstaw poziomą linię',\n        'linkDialog.show': 'Pokaż okno linkowania'\n      },\n      history: {\n        undo: 'Cofnij',\n        redo: 'Ponów'\n      },\n      specialChar: {\n        specialChar: 'ZNAKI SPECJALNE',\n        select: 'Wybierz Znak specjalny'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-pl-PL.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-pt-BR.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'pt-BR': {\n      font: {\n        bold: 'Negrito',\n        italic: 'Itálico',\n        underline: 'Sublinhado',\n        clear: 'Remover estilo da fonte',\n        height: 'Altura da linha',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        subscript: 'Subscrito',\n        superscript: 'Sobrescrito',\n        size: 'Tamanho da fonte'\n      },\n      image: {\n        image: 'Imagem',\n        insert: 'Inserir imagem',\n        resizeFull: 'Redimensionar Completamente',\n        resizeHalf: 'Redimensionar pela Metade',\n        resizeQuarter: 'Redimensionar a um Quarto',\n        floatLeft: 'Flutuar para Esquerda',\n        floatRight: 'Flutuar para Direita',\n        floatNone: 'Não Flutuar',\n        shapeRounded: 'Forma: Arredondado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Miniatura',\n        shapeNone: 'Forma: Nenhum',\n        dragImageHere: 'Arraste Imagem ou Texto para cá',\n        dropImage: 'Solte Imagem ou Texto',\n        selectFromFiles: 'Selecione a partir dos arquivos',\n        maximumFileSize: 'Tamanho máximo do arquivo',\n        maximumFileSizeError: 'Tamanho máximo do arquivo excedido.',\n        url: 'URL da imagem',\n        remove: 'Remover Imagem',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Link para vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserir link',\n        unlink: 'Remover link',\n        edit: 'Editar',\n        textToDisplay: 'Texto para exibir',\n        url: 'Para qual URL este link leva?',\n        openInNewWindow: 'Abrir em uma nova janela',\n        useProtocol: 'Usar protocolo padrão'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Adicionar linha acima',\n        addRowBelow: 'Adicionar linha abaixo',\n        addColLeft: 'Adicionar coluna à esquerda',\n        addColRight: 'Adicionar coluna à direita',\n        delRow: 'Excluir linha',\n        delCol: 'Excluir coluna',\n        delTable: 'Excluir tabela'\n      },\n      hr: {\n        insert: 'Linha horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'Normal',\n        blockquote: 'Citação',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista com marcadores',\n        ordered: 'Lista numerada'\n      },\n      options: {\n        help: 'Ajuda',\n        fullscreen: 'Tela cheia',\n        codeview: 'Ver código-fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menor tabulação',\n        indent: 'Maior tabulação',\n        left: 'Alinhar à esquerda',\n        center: 'Alinhar ao centro',\n        right: 'Alinha à direita',\n        justify: 'Justificado'\n      },\n      color: {\n        recent: 'Cor recente',\n        more: 'Mais cores',\n        background: 'Fundo',\n        foreground: 'Fonte',\n        transparent: 'Transparente',\n        setTransparent: 'Fundo transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar padrão',\n        cpSelect: 'Selecionar'\n      },\n      shortcut: {\n        shortcuts: 'Atalhos do teclado',\n        close: 'Fechar',\n        textFormatting: 'Formatação de texto',\n        action: 'Ação',\n        paragraphFormatting: 'Formatação de parágrafo',\n        documentStyle: 'Estilo de documento',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Inserir Parágrafo',\n        'undo': 'Desfazer o último comando',\n        'redo': 'Refazer o último comando',\n        'tab': 'Tab',\n        'untab': 'Desfazer tab',\n        'bold': 'Colocar em negrito',\n        'italic': 'Colocar em itálico',\n        'underline': 'Sublinhado',\n        'strikethrough': 'Tachado',\n        'removeFormat': 'Remover estilo',\n        'justifyLeft': 'Alinhar à esquerda',\n        'justifyCenter': 'Centralizar',\n        'justifyRight': 'Alinhar à esquerda',\n        'justifyFull': 'Justificar',\n        'insertUnorderedList': 'Lista não ordenada',\n        'insertOrderedList': 'Lista ordenada',\n        'outdent': 'Recuar parágrafo atual',\n        'indent': 'Avançar parágrafo atual',\n        'formatPara': 'Alterar formato do bloco para parágrafo(tag P)',\n        'formatH1': 'Alterar formato do bloco para H1',\n        'formatH2': 'Alterar formato do bloco para H2',\n        'formatH3': 'Alterar formato do bloco para H3',\n        'formatH4': 'Alterar formato do bloco para H4',\n        'formatH5': 'Alterar formato do bloco para H5',\n        'formatH6': 'Alterar formato do bloco para H6',\n        'insertHorizontalRule': 'Inserir Régua horizontal',\n        'linkDialog.show': 'Inserir um Hiperlink'\n      },\n      history: {\n        undo: 'Desfazer',\n        redo: 'Refazer'\n      },\n      specialChar: {\n        specialChar: 'CARACTERES ESPECIAIS',\n        select: 'Selecionar Caracteres Especiais'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-pt-BR.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-pt-PT.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'pt-PT': {\n      font: {\n        bold: 'Negrito',\n        italic: 'Itálico',\n        underline: 'Sublinhado',\n        clear: 'Remover estilo da fonte',\n        height: 'Altura da linha',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Tamanho da fonte'\n      },\n      image: {\n        image: 'Imagem',\n        insert: 'Inserir imagem',\n        resizeFull: 'Redimensionar Completo',\n        resizeHalf: 'Redimensionar Metade',\n        resizeQuarter: 'Redimensionar Um Quarto',\n        floatLeft: 'Float Esquerda',\n        floatRight: 'Float Direita',\n        floatNone: 'Sem Float',\n        shapeRounded: 'Forma: Arredondado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Minhatura',\n        shapeNone: 'Forma: Nenhum',\n        dragImageHere: 'Arraste uma imagem para aqui',\n        dropImage: 'Arraste uma imagem ou texto',\n        selectFromFiles: 'Selecione a partir dos arquivos',\n        maximumFileSize: 'Tamanho máximo do fixeiro',\n        maximumFileSizeError: 'Tamanho máximo do fixeiro é maior que o permitido.',\n        url: 'Endereço da imagem',\n        remove: 'Remover Imagem',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Link para vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserir ligação',\n        unlink: 'Remover ligação',\n        edit: 'Editar',\n        textToDisplay: 'Texto para exibir',\n        url: 'Que endereço esta licação leva?',\n        openInNewWindow: 'Abrir numa nova janela'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Adicionar linha acima',\n        addRowBelow: 'Adicionar linha abaixo',\n        addColLeft: 'Adicionar coluna à Esquerda',\n        addColRight: 'Adicionar coluna à Esquerda',\n        delRow: 'Excluir linha',\n        delCol: 'Excluir coluna',\n        delTable: 'Excluir tabela'\n      },\n      hr: {\n        insert: 'Inserir linha horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'Parágrafo',\n        blockquote: 'Citação',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista com marcadores',\n        ordered: 'Lista numerada'\n      },\n      options: {\n        help: 'Ajuda',\n        fullscreen: 'Janela Completa',\n        codeview: 'Ver código-fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menor tabulação',\n        indent: 'Maior tabulação',\n        left: 'Alinhar à esquerda',\n        center: 'Alinhar ao centro',\n        right: 'Alinha à direita',\n        justify: 'Justificado'\n      },\n      color: {\n        recent: 'Cor recente',\n        more: 'Mais cores',\n        background: 'Fundo',\n        foreground: 'Fonte',\n        transparent: 'Transparente',\n        setTransparent: 'Fundo transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar padrão',\n        cpSelect: 'Selecionar'\n      },\n      shortcut: {\n        shortcuts: 'Atalhos do teclado',\n        close: 'Fechar',\n        textFormatting: 'Formatação de texto',\n        action: 'Ação',\n        paragraphFormatting: 'Formatação de parágrafo',\n        documentStyle: 'Estilo de documento'\n      },\n      help: {\n        'insertParagraph': 'Inserir Parágrafo',\n        'undo': 'Desfazer o último comando',\n        'redo': 'Refazer o último comando',\n        'tab': 'Maior tabulação',\n        'untab': 'Menor tabulação',\n        'bold': 'Colocar em negrito',\n        'italic': 'Colocar em itálico',\n        'underline': 'Colocar em sublinhado',\n        'strikethrough': 'Colocar em riscado',\n        'removeFormat': 'Limpar o estilo',\n        'justifyLeft': 'Definir alinhado à esquerda',\n        'justifyCenter': 'Definir alinhado ao centro',\n        'justifyRight': 'Definir alinhado à direita',\n        'justifyFull': 'Definir justificado',\n        'insertUnorderedList': 'Alternar lista não ordenada',\n        'insertOrderedList': 'Alternar lista ordenada',\n        'outdent': 'Recuar parágrafo atual',\n        'indent': 'Avançar parágrafo atual',\n        'formatPara': 'Alterar formato do bloco para parágrafo',\n        'formatH1': 'Alterar formato do bloco para Título 1',\n        'formatH2': 'Alterar formato do bloco para Título 2',\n        'formatH3': 'Alterar formato do bloco para Título 3',\n        'formatH4': 'Alterar formato do bloco para Título 4',\n        'formatH5': 'Alterar formato do bloco para Título 5',\n        'formatH6': 'Alterar formato do bloco para Título 6',\n        'insertHorizontalRule': 'Inserir linha horizontal',\n        'linkDialog.show': 'Inserir uma ligração'\n      },\n      history: {\n        undo: 'Desfazer',\n        redo: 'Refazer'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-pt-PT.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-ro-RO.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'ro-RO': {\n      font: {\n        bold: 'Îngroșat',\n        italic: 'Înclinat',\n        underline: 'Subliniat',\n        clear: 'Înlătură formatare font',\n        height: 'Înălțime rând',\n        name: 'Familie de fonturi',\n        strikethrough: 'Tăiat',\n        subscript: 'Indice',\n        superscript: 'Exponent',\n        size: 'Dimensiune font'\n      },\n      image: {\n        image: 'Imagine',\n        insert: 'Inserează imagine',\n        resizeFull: 'Redimensionează complet',\n        resizeHalf: 'Redimensionează 1/2',\n        resizeQuarter: 'Redimensionează 1/4',\n        floatLeft: 'Aliniere la stânga',\n        floatRight: 'Aliniere la dreapta',\n        floatNone: 'Fară aliniere',\n        shapeRounded: 'Formă: Rotund',\n        shapeCircle: 'Formă: Cerc',\n        shapeThumbnail: 'Formă: Pictogramă',\n        shapeNone: 'Formă: Nici una',\n        dragImageHere: 'Trage o imagine sau un text aici',\n        dropImage: 'Eliberează imaginea sau textul',\n        selectFromFiles: 'Alege din fişiere',\n        maximumFileSize: 'Dimensiune maximă fișier',\n        maximumFileSizeError: 'Dimensiune maximă fișier depășită.',\n        url: 'URL imagine',\n        remove: 'Șterge imagine',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link video',\n        insert: 'Inserează video',\n        url: 'URL video?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion sau Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserează link',\n        unlink: 'Înlătură link',\n        edit: 'Editează',\n        textToDisplay: 'Text ce va fi afişat',\n        url: 'La ce adresă URL trebuie să conducă acest link?',\n        openInNewWindow: 'Deschidere în fereastră nouă'\n      },\n      table: {\n        table: 'Tabel',\n        addRowAbove: 'Adaugă rând deasupra',\n        addRowBelow: 'Adaugă rând dedesubt',\n        addColLeft: 'Adaugă coloană stânga',\n        addColRight: 'Adaugă coloană dreapta',\n        delRow: 'Șterge rând',\n        delCol: 'Șterge coloană',\n        delTable: 'Șterge tabel'\n      },\n      hr: {\n        insert: 'Inserează o linie orizontală'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Preformatat',\n        h1: 'Titlu 1',\n        h2: 'Titlu 2',\n        h3: 'Titlu 3',\n        h4: 'Titlu 4',\n        h5: 'Titlu 5',\n        h6: 'Titlu 6'\n      },\n      lists: {\n        unordered: 'Listă neordonată',\n        ordered: 'Listă ordonată'\n      },\n      options: {\n        help: 'Ajutor',\n        fullscreen: 'Măreşte',\n        codeview: 'Sursă'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Creşte identarea',\n        indent: 'Scade identarea',\n        left: 'Aliniere la stânga',\n        center: 'Aliniere centrală',\n        right: 'Aliniere la dreapta',\n        justify: 'Aliniere în bloc'\n      },\n      color: {\n        recent: 'Culoare recentă',\n        more: 'Mai multe  culori',\n        background: 'Culoarea fundalului',\n        foreground: 'Culoarea textului',\n        transparent: 'Transparent',\n        setTransparent: 'Setează transparent',\n        reset: 'Resetează',\n        resetToDefault: 'Revino la iniţial'\n      },\n      shortcut: {\n        shortcuts: 'Scurtături tastatură',\n        close: 'Închide',\n        textFormatting: 'Formatare text',\n        action: 'Acţiuni',\n        paragraphFormatting: 'Formatare paragraf',\n        documentStyle: 'Stil paragraf',\n        extraKeys: 'Taste extra'\n      },\n      help: {\n        'insertParagraph': 'Inserează paragraf',\n        'undo': 'Revine la starea anterioară',\n        'redo': 'Revine la starea ulterioară',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Setează stil îngroșat',\n        'italic': 'Setează stil înclinat',\n        'underline': 'Setează stil subliniat',\n        'strikethrough': 'Setează stil tăiat',\n        'removeFormat': 'Înlătură formatare',\n        'justifyLeft': 'Setează aliniere stânga',\n        'justifyCenter': 'Setează aliniere centru',\n        'justifyRight': 'Setează aliniere dreapta',\n        'justifyFull': 'Setează aliniere bloc',\n        'insertUnorderedList': 'Comutare listă neordinată',\n        'insertOrderedList': 'Comutare listă ordonată',\n        'outdent': 'Înlătură indentare paragraf curent',\n        'indent': 'Adaugă indentare paragraf curent',\n        'formatPara': 'Schimbă formatarea selecției în paragraf',\n        'formatH1': 'Schimbă formatarea selecției în H1',\n        'formatH2': 'Schimbă formatarea selecției în H2',\n        'formatH3': 'Schimbă formatarea selecției în H3',\n        'formatH4': 'Schimbă formatarea selecției în H4',\n        'formatH5': 'Schimbă formatarea selecției în H5',\n        'formatH6': 'Schimbă formatarea selecției în H6',\n        'insertHorizontalRule': 'Adaugă linie orizontală',\n        'linkDialog.show': 'Inserează link'\n      },\n      history: {\n        undo: 'Starea anterioară',\n        redo: 'Starea ulterioară'\n      },\n      specialChar: {\n        specialChar: 'CARACTERE SPECIALE',\n        select: 'Alege caractere speciale'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-ro-RO.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-ru-RU.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'ru-RU': {\n      font: {\n        bold: 'Полужирный',\n        italic: 'Курсив',\n        underline: 'Подчёркнутый',\n        clear: 'Убрать стили шрифта',\n        height: 'Высота линии',\n        name: 'Шрифт',\n        strikethrough: 'Зачёркнутый',\n        subscript: 'Нижний индекс',\n        superscript: 'Верхний индекс',\n        size: 'Размер шрифта'\n      },\n      image: {\n        image: 'Картинка',\n        insert: 'Вставить картинку',\n        resizeFull: 'Восстановить размер',\n        resizeHalf: 'Уменьшить до 50%',\n        resizeQuarter: 'Уменьшить до 25%',\n        floatLeft: 'Расположить слева',\n        floatRight: 'Расположить справа',\n        floatNone: 'Расположение по-умолчанию',\n        shapeRounded: 'Форма: Закругленная',\n        shapeCircle: 'Форма: Круг',\n        shapeThumbnail: 'Форма: Миниатюра',\n        shapeNone: 'Форма: Нет',\n        dragImageHere: 'Перетащите сюда картинку',\n        dropImage: 'Перетащите картинку',\n        selectFromFiles: 'Выбрать из файлов',\n        maximumFileSize: 'Максимальный размер файла',\n        maximumFileSizeError: 'Превышен максимальный размер файла',\n        url: 'URL картинки',\n        remove: 'Удалить картинку',\n        original: 'Оригинал'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Ссылка на видео',\n        insert: 'Вставить видео',\n        url: 'URL видео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'\n      },\n      link: {\n        link: 'Ссылка',\n        insert: 'Вставить ссылку',\n        unlink: 'Убрать ссылку',\n        edit: 'Редактировать',\n        textToDisplay: 'Отображаемый текст',\n        url: 'URL для перехода',\n        openInNewWindow: 'Открывать в новом окне'\n      },\n      table: {\n        table: 'Таблица',\n        addRowAbove: 'Добавить строку выше',\n        addRowBelow: 'Добавить строку ниже',\n        addColLeft: 'Добавить столбец слева',\n        addColRight: 'Добавить столбец справа',\n        delRow: 'Удалить строку',\n        delCol: 'Удалить столбец',\n        delTable: 'Удалить таблицу'\n      },\n      hr: {\n        insert: 'Вставить горизонтальную линию'\n      },\n      style: {\n        style: 'Стиль',\n        p: 'Нормальный',\n        blockquote: 'Цитата',\n        pre: 'Код',\n        h1: 'Заголовок 1',\n        h2: 'Заголовок 2',\n        h3: 'Заголовок 3',\n        h4: 'Заголовок 4',\n        h5: 'Заголовок 5',\n        h6: 'Заголовок 6'\n      },\n      lists: {\n        unordered: 'Маркированный список',\n        ordered: 'Нумерованный список'\n      },\n      options: {\n        help: 'Помощь',\n        fullscreen: 'На весь экран',\n        codeview: 'Исходный код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Уменьшить отступ',\n        indent: 'Увеличить отступ',\n        left: 'Выровнять по левому краю',\n        center: 'Выровнять по центру',\n        right: 'Выровнять по правому краю',\n        justify: 'Растянуть по ширине'\n      },\n      color: {\n        recent: 'Последний цвет',\n        more: 'Еще цвета',\n        background: 'Цвет фона',\n        foreground: 'Цвет шрифта',\n        transparent: 'Прозрачный',\n        setTransparent: 'Сделать прозрачным',\n        reset: 'Сброс',\n        resetToDefault: 'Восстановить умолчания'\n      },\n      shortcut: {\n        shortcuts: 'Сочетания клавиш',\n        close: 'Закрыть',\n        textFormatting: 'Форматирование текста',\n        action: 'Действие',\n        paragraphFormatting: 'Форматирование параграфа',\n        documentStyle: 'Стиль документа',\n        extraKeys: 'Дополнительные комбинации'\n      },\n      help: {\n        'insertParagraph': 'Новый параграф',\n        'undo': 'Отменить последнюю команду',\n        'redo': 'Повторить последнюю команду',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Установить стиль \"Жирный\"',\n        'italic': 'Установить стиль \"Наклонный\"',\n        'underline': 'Установить стиль \"Подчеркнутый\"',\n        'strikethrough': 'Установить стиль \"Зачеркнутый\"',\n        'removeFormat': 'Сборсить стили',\n        'justifyLeft': 'Выровнять по левому краю',\n        'justifyCenter': 'Выровнять по центру',\n        'justifyRight': 'Выровнять по правому краю',\n        'justifyFull': 'Растянуть на всю ширину',\n        'insertUnorderedList': 'Включить/отключить маркированный список',\n        'insertOrderedList': 'Включить/отключить нумерованный список',\n        'outdent': 'Убрать отступ в текущем параграфе',\n        'indent': 'Вставить отступ в текущем параграфе',\n        'formatPara': 'Форматировать текущий блок как параграф (тег P)',\n        'formatH1': 'Форматировать текущий блок как H1',\n        'formatH2': 'Форматировать текущий блок как H2',\n        'formatH3': 'Форматировать текущий блок как H3',\n        'formatH4': 'Форматировать текущий блок как H4',\n        'formatH5': 'Форматировать текущий блок как H5',\n        'formatH6': 'Форматировать текущий блок как H6',\n        'insertHorizontalRule': 'Вставить горизонтальную черту',\n        'linkDialog.show': 'Показать диалог \"Ссылка\"'\n      },\n      history: {\n        undo: 'Отменить',\n        redo: 'Повтор'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-ru-RU.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-sk-SK.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'sk-SK': {\n      font: {\n        bold: 'Tučné',\n        italic: 'Kurzíva',\n        underline: 'Podčiarknutie',\n        clear: 'Odstrániť štýl písma',\n        height: 'Výška riadku',\n        name: 'Názov',\n        strikethrough: 'Prečiarknuté',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Veľkosť písma'\n      },\n      image: {\n        image: 'Obrázok',\n        insert: 'Vložiť obrázok',\n        resizeFull: 'Pôvodná veľkosť',\n        resizeHalf: 'Polovičná veľkosť',\n        resizeQuarter: 'Štvrtinová veľkosť',\n        floatLeft: 'Umiestniť doľava',\n        floatRight: 'Umiestniť doprava',\n        floatNone: 'Bez zarovnania',\n        shapeRounded: 'Tvar: Zaoblené',\n        shapeCircle: 'Tvar: Kruh',\n        shapeThumbnail: 'Tvar: Náhľad',\n        shapeNone: 'Tvar: Žiadne',\n        dragImageHere: 'Pretiahnuť sem obrázok',\n        dropImage: 'Pretiahnuť sem obrázok alebo text',\n        selectFromFiles: 'Vybrať súbor',\n        maximumFileSize: 'Maximálna veľkosť súboru',\n        maximumFileSizeError: 'Maximálna veľkosť súboru bola prekročená.',\n        url: 'URL obrázku',\n        removeMedia: 'Odstrániť obrázok',\n        original: 'Originál'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Odkaz videa',\n        insert: 'Vložiť video',\n        url: 'URL videa?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion alebo Youku)'\n      },\n      link: {\n        link: 'Odkaz',\n        insert: 'Vytvoriť odkaz',\n        unlink: 'Zrušiť odkaz',\n        edit: 'Upraviť',\n        textToDisplay: 'Zobrazovaný text',\n        url: 'Na akú URL adresu má tento odkaz viesť?',\n        openInNewWindow: 'Otvoriť v novom okne'\n      },\n      table: {\n        table: 'Tabuľka',\n        addRowAbove: 'Pridať riadok nad',\n        addRowBelow: 'Pridať riadok pod',\n        addColLeft: 'Pridať stĺpec vľavo',\n        addColRight: 'Pridať stĺpec vpravo',\n        delRow: 'Odstrániť riadok',\n        delCol: 'Odstrániť stĺpec',\n        delTable: 'Odstrániť tabuľku'\n      },\n      hr: {\n        insert: 'Vložit vodorovnú čiaru'\n      },\n      style: {\n        style: 'Štýl',\n        p: 'Normálny',\n        blockquote: 'Citácia',\n        pre: 'Kód',\n        h1: 'Nadpis 1',\n        h2: 'Nadpis 2',\n        h3: 'Nadpis 3',\n        h4: 'Nadpis 4',\n        h5: 'Nadpis 5',\n        h6: 'Nadpis 6'\n      },\n      lists: {\n        unordered: 'Odrážkový zoznam',\n        ordered: 'Číselný zoznam'\n      },\n      options: {\n        help: 'Pomoc',\n        fullscreen: 'Celá obrazovka',\n        codeview: 'HTML kód'\n      },\n      paragraph: {\n        paragraph: 'Odsek',\n        outdent: 'Zväčšiť odsadenie',\n        indent: 'Zmenšiť odsadenie',\n        left: 'Zarovnať doľava',\n        center: 'Zarovnať na stred',\n        right: 'Zarovnať doprava',\n        justify: 'Zarovnať obojstranne'\n      },\n      color: {\n        recent: 'Aktuálna farba',\n        more: 'Dalšie farby',\n        background: 'Farba pozadia',\n        foreground: 'Farba písma',\n        transparent: 'Priehľadnosť',\n        setTransparent: 'Nastaviť priehľadnosť',\n        reset: 'Obnoviť',\n        resetToDefault: 'Obnoviť prednastavené'\n      },\n      shortcut: {\n        shortcuts: 'Klávesové skratky',\n        close: 'Zavrieť',\n        textFormatting: 'Formátovanie textu',\n        action: 'Akcia',\n        paragraphFormatting: 'Formátovanie odseku',\n        documentStyle: 'Štýl dokumentu',\n        extraKeys: 'Ďalšie kombinácie'\n      },\n      help: {\n        'insertParagraph': 'Vložiť odsek',\n        'undo': 'Vrátiť posledný krok',\n        'redo': 'Obnoviť posledný krok',\n        'tab': 'Odsadiť',\n        'untab': 'Zmenšiť odsadenie',\n        'bold': 'Tučné',\n        'italic': 'Kurzívu',\n        'underline': 'Podčiarknutie',\n        'strikethrough': 'Preškrknutý text',\n        'removeFormat': 'Odstrániť formátovanie',\n        'justifyLeft': 'Odsadenie zľava',\n        'justifyCenter': 'Vycentrovať',\n        'justifyRight': 'Odsadenie zprava',\n        'justifyFull': 'Zarovnať do bloku',\n        'insertUnorderedList': 'Odrážkový zoznam',\n        'insertOrderedList': 'Číselný zoznam',\n        'outdent': 'Zrušiť odsadenie aktuálneho odseku',\n        'indent': 'Odsadiť aktuálny odsek',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Vložiť horizontálne pravidlo',\n        'linkDialog.show': 'Dialóg na zadanie odkazu'\n      },\n      history: {\n        undo: 'Krok vzad',\n        redo: 'Krok dopredu'\n      },\n      specialChar: {\n        specialChar: 'ŠPECIÁLNE ZNAKY',\n        select: 'Vybrať špeciálne znaky'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-sk-SK.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-sl-SI.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'sl-SI': {\n      font: {\n        bold: 'Krepko',\n        italic: 'Ležeče',\n        underline: 'Podčrtano',\n        clear: 'Počisti oblikovanje izbire',\n        height: 'Razmik med vrsticami',\n        name: 'Pisava',\n        strikethrough: 'Prečrtano',\n        subscript: 'Podpisano',\n        superscript: 'Nadpisano',\n        size: 'Velikost pisave'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Vstavi sliko',\n        resizeFull: 'Razširi na polno velikost',\n        resizeHalf: 'Razširi na polovico velikosti',\n        resizeQuarter: 'Razširi na četrtino velikosti',\n        floatLeft: 'Leva poravnava',\n        floatRight: 'Desna poravnava',\n        floatNone: 'Brez poravnave',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Sem povlecite sliko',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Izberi sliko za nalaganje',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL naslov slike',\n        remove: 'Odstrani sliko',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video povezava',\n        insert: 'Vstavi video',\n        url: 'Povezava do videa',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ali Youku)'\n      },\n      link: {\n        link: 'Povezava',\n        insert: 'Vstavi povezavo',\n        unlink: 'Odstrani povezavo',\n        edit: 'Uredi',\n        textToDisplay: 'Prikazano besedilo',\n        url: 'Povezava',\n        openInNewWindow: 'Odpri v novem oknu'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Vstavi horizontalno črto'\n      },\n      style: {\n        style: 'Slogi',\n        p: 'Navadno besedilo',\n        blockquote: 'Citat',\n        pre: 'Koda',\n        h1: 'Naslov 1',\n        h2: 'Naslov 2',\n        h3: 'Naslov 3',\n        h4: 'Naslov 4',\n        h5: 'Naslov 5',\n        h6: 'Naslov 6'\n      },\n      lists: {\n        unordered: 'Označen seznam',\n        ordered: 'Oštevilčen seznam'\n      },\n      options: {\n        help: 'Pomoč',\n        fullscreen: 'Celozaslonski način',\n        codeview: 'Pregled HTML kode'\n      },\n      paragraph: {\n        paragraph: 'Slogi odstavka',\n        outdent: 'Zmanjšaj odmik',\n        indent: 'Povečaj odmik',\n        left: 'Leva poravnava',\n        center: 'Desna poravnava',\n        right: 'Sredinska poravnava',\n        justify: 'Obojestranska poravnava'\n      },\n      color: {\n        recent: 'Uporabi zadnjo barvo',\n        more: 'Več barv',\n        background: 'Barva ozadja',\n        foreground: 'Barva besedila',\n        transparent: 'Brez barve',\n        setTransparent: 'Brez barve',\n        reset: 'Ponastavi',\n        resetToDefault: 'Ponastavi na privzeto'\n      },\n      shortcut: {\n        shortcuts: 'Bljižnice',\n        close: 'Zapri',\n        textFormatting: 'Oblikovanje besedila',\n        action: 'Dejanja',\n        paragraphFormatting: 'Oblikovanje odstavka',\n        documentStyle: 'Oblikovanje naslova',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Razveljavi',\n        redo: 'Uveljavi'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-sl-SI.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-sr-RS-Latin.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'sr-RS': {\n      font: {\n        bold: 'Podebljano',\n        italic: 'Kurziv',\n        underline: 'Podvučeno',\n        clear: 'Ukloni stilove fonta',\n        height: 'Visina linije',\n        name: 'Font Family',\n        strikethrough: 'Precrtano',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Veličina fonta'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Umetni sliku',\n        resizeFull: 'Puna veličina',\n        resizeHalf: 'Umanji na 50%',\n        resizeQuarter: 'Umanji na 25%',\n        floatLeft: 'Uz levu ivicu',\n        floatRight: 'Uz desnu ivicu',\n        floatNone: 'Bez ravnanja',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Prevuci sliku ovde',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Izaberi iz datoteke',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Adresa slike',\n        remove: 'Ukloni sliku',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Veza ka videu',\n        insert: 'Umetni video',\n        url: 'URL video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)'\n      },\n      link: {\n        link: 'Veza',\n        insert: 'Umetni vezu',\n        unlink: 'Ukloni vezu',\n        edit: 'Uredi',\n        textToDisplay: 'Tekst za prikaz',\n        url: 'Internet adresa',\n        openInNewWindow: 'Otvori u novom prozoru'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Umetni horizontalnu liniju'\n      },\n      style: {\n        style: 'Stil',\n        p: 'pni',\n        blockquote: 'Citat',\n        pre: 'Kod',\n        h1: 'Zaglavlje 1',\n        h2: 'Zaglavlje 2',\n        h3: 'Zaglavlje 3',\n        h4: 'Zaglavlje 4',\n        h5: 'Zaglavlje 5',\n        h6: 'Zaglavlje 6'\n      },\n      lists: {\n        unordered: 'Obična lista',\n        ordered: 'Numerisana lista'\n      },\n      options: {\n        help: 'Pomoć',\n        fullscreen: 'Preko celog ekrana',\n        codeview: 'Izvorni kod'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Smanji uvlačenje',\n        indent: 'Povečaj uvlačenje',\n        left: 'Poravnaj u levo',\n        center: 'Centrirano',\n        right: 'Poravnaj u desno',\n        justify: 'Poravnaj obostrano'\n      },\n      color: {\n        recent: 'Poslednja boja',\n        more: 'Više boja',\n        background: 'Boja pozadine',\n        foreground: 'Boja teksta',\n        transparent: 'Providna',\n        setTransparent: 'Providna',\n        reset: 'Opoziv',\n        resetToDefault: 'Podrazumevana'\n      },\n      shortcut: {\n        shortcuts: 'Prečice sa tastature',\n        close: 'Zatvori',\n        textFormatting: 'Formatiranje teksta',\n        action: 'Akcija',\n        paragraphFormatting: 'Formatiranje paragrafa',\n        documentStyle: 'Stil dokumenta',\n        extraKeys: 'Dodatne kombinacije'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Poništi',\n        redo: 'Ponovi'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-sr-RS-Latin.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-sr-RS.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'sr-RS': {\n      font: {\n        bold: 'Подебљано',\n        italic: 'Курзив',\n        underline: 'Подвучено',\n        clear: 'Уклони стилове фонта',\n        height: 'Висина линије',\n        name: 'Font Family',\n        strikethrough: 'Прецртано',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Величина фонта'\n      },\n      image: {\n        image: 'Слика',\n        insert: 'Уметни слику',\n        resizeFull: 'Пуна величина',\n        resizeHalf: 'Умањи на 50%',\n        resizeQuarter: 'Умањи на 25%',\n        floatLeft: 'Уз леву ивицу',\n        floatRight: 'Уз десну ивицу',\n        floatNone: 'Без равнања',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Превуци слику овде',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Изабери из датотеке',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Адреса слике',\n        remove: 'Уклони слику',\n        original: 'Original'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Веза ка видеу',\n        insert: 'Уметни видео',\n        url: 'URL видео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'\n      },\n      link: {\n        link: 'Веза',\n        insert: 'Уметни везу',\n        unlink: 'Уклони везу',\n        edit: 'Уреди',\n        textToDisplay: 'Текст за приказ',\n        url: 'Интернет адреса',\n        openInNewWindow: 'Отвори у новом прозору'\n      },\n      table: {\n        table: 'Табела',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Уметни хоризонталну линију'\n      },\n      style: {\n        style: 'Стил',\n        p: 'Нормални',\n        blockquote: 'Цитат',\n        pre: 'Код',\n        h1: 'Заглавље 1',\n        h2: 'Заглавље 2',\n        h3: 'Заглавље 3',\n        h4: 'Заглавље 4',\n        h5: 'Заглавље 5',\n        h6: 'Заглавље 6'\n      },\n      lists: {\n        unordered: 'Обична листа',\n        ordered: 'Нумерисана листа'\n      },\n      options: {\n        help: 'Помоћ',\n        fullscreen: 'Преко целог екрана',\n        codeview: 'Изворни код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Смањи увлачење',\n        indent: 'Повечај увлачење',\n        left: 'Поравнај у лево',\n        center: 'Центрирано',\n        right: 'Поравнај у десно',\n        justify: 'Поравнај обострано'\n      },\n      color: {\n        recent: 'Последња боја',\n        more: 'Више боја',\n        background: 'Боја позадине',\n        foreground: 'Боја текста',\n        transparent: 'Провидна',\n        setTransparent: 'Провидна',\n        reset: 'Опозив',\n        resetToDefault: 'Подразумевана'\n      },\n      shortcut: {\n        shortcuts: 'Пречице са тастатуре',\n        close: 'Затвори',\n        textFormatting: 'Форматирање текста',\n        action: 'Акција',\n        paragraphFormatting: 'Форматирање параграфа',\n        documentStyle: 'Стил документа',\n        extraKeys: 'Додатне комбинације'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Поништи',\n        redo: 'Понови'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-sr-RS.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-sv-SE.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'sv-SE': {\n      font: {\n        bold: 'Fet',\n        italic: 'Kursiv',\n        underline: 'Understruken',\n        clear: 'Radera formatering',\n        height: 'Radavstånd',\n        name: 'Teckensnitt',\n        strikethrough: 'Genomstruken',\n        subscript: 'Nedsänkt',\n        superscript: 'Upphöjd',\n        size: 'Teckenstorlek'\n      },\n      image: {\n        image: 'Bild',\n        insert: 'Infoga bild',\n        resizeFull: 'Full storlek',\n        resizeHalf: 'Halv storlek',\n        resizeQuarter: 'En fjärdedel i storlek',\n        floatLeft: 'Vänsterjusterad',\n        floatRight: 'Högerjusterad',\n        floatNone: 'Ingen justering',\n        shapeRounded: 'Form: Avrundad',\n        shapeCircle: 'Form: Cirkel',\n        shapeThumbnail: 'Form: Miniatyr',\n        shapeNone: 'Form: Ingen',\n        dragImageHere: 'Dra en bild hit',\n        dropImage: 'Släpp bild eller text',\n        selectFromFiles: 'Välj från filer',\n        maximumFileSize: 'Maximal filstorlek',\n        maximumFileSizeError: 'Maximal filstorlek har överskridits.',\n        url: 'Länk till bild',\n        remove: 'Ta bort bild',\n        original: 'Original'\n      },\n      video: {\n        video: 'Filmklipp',\n        videoLink: 'Länk till filmklipp',\n        insert: 'Infoga filmklipp',\n        url: 'Länk till filmklipp',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Länk',\n        insert: 'Infoga länk',\n        unlink: 'Ta bort länk',\n        edit: 'Redigera',\n        textToDisplay: 'Visningstext',\n        url: 'Till vilken URL ska denna länk peka?',\n        openInNewWindow: 'Öppna i ett nytt fönster'\n      },\n      table: {\n        table: 'Tabell',\n        addRowAbove: 'Lägg till rad ovanför',\n        addRowBelow: 'Lägg till rad under',\n        addColLeft: 'Lägg till kolumn åt vänster',\n        addColRight: 'Lägg till kolumn åt höger',\n        delRow: 'Radera rad',\n        delCol: 'Radera kolumn',\n        delTable: 'Radera tabell'\n      },\n      hr: {\n        insert: 'Infoga horisontell linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Kod',\n        h1: 'Rubrik 1',\n        h2: 'Rubrik 2',\n        h3: 'Rubrik 3',\n        h4: 'Rubrik 4',\n        h5: 'Rubrik 5',\n        h6: 'Rubrik 6'\n      },\n      lists: {\n        unordered: 'Punktlista',\n        ordered: 'Numrerad lista'\n      },\n      options: {\n        help: 'Hjälp',\n        fullscreen: 'Fullskärm',\n        codeview: 'HTML-visning'\n      },\n      paragraph: {\n        paragraph: 'Justera text',\n        outdent: 'Minska indrag',\n        indent: 'Öka indrag',\n        left: 'Vänsterjusterad',\n        center: 'Centrerad',\n        right: 'Högerjusterad',\n        justify: 'Justera text'\n      },\n      color: {\n        recent: 'Senast använda färg',\n        more: 'Fler färger',\n        background: 'Bakgrundsfärg',\n        foreground: 'Teckenfärg',\n        transparent: 'Genomskinlig',\n        setTransparent: 'Gör genomskinlig',\n        reset: 'Nollställ',\n        resetToDefault: 'Återställ till standard'\n      },\n      shortcut: {\n        shortcuts: 'Kortkommandon',\n        close: 'Stäng',\n        textFormatting: 'Textformatering',\n        action: 'Funktion',\n        paragraphFormatting: 'Avsnittsformatering',\n        documentStyle: 'Dokumentstil',\n        extraKeys: 'Extra tangenter'\n      },\n      help: {\n        'insertParagraph': 'Infoga paragraf',\n        'undo': 'Ångra senaste kommandot',\n        'redo': 'Gör om senaste kommandot',\n        'tab': 'Lägg till indrag',\n        'untab': 'Ta bort indrag',\n        'bold': 'Tillämpa fet stil',\n        'italic': 'Tillämpa kursiv stil',\n        'underline': 'Tillämpa understruken stil',\n        'strikethrough': 'Tillämpa genomstruken stil',\n        'removeFormat': 'Rensa formatering',\n        'justifyLeft': 'Tillämpa vänsterjustering',\n        'justifyCenter': 'Tillämpa centrering',\n        'justifyRight': 'Tillämpa högerjustering',\n        'justifyFull': 'Tillämpa justerad text',\n        'insertUnorderedList': 'Tillämpa punktlista',\n        'insertOrderedList': 'Tillämpa numrerad lista',\n        'outdent': 'Minska indrag för aktuell paragraf',\n        'indent': 'Öka indrag för aktuell paragraf',\n        'formatPara': 'Ändra formatet för aktuellt block till en paragraf (P-tagg)',\n        'formatH1': 'Ändra formatet för aktuellt block till rubrik 1',\n        'formatH2': 'Ändra formatet för aktuellt block till rubrik 2',\n        'formatH3': 'Ändra formatet för aktuellt block till rubrik 3',\n        'formatH4': 'Ändra formatet för aktuellt block till rubrik 4',\n        'formatH5': 'Ändra formatet för aktuellt block till rubrik 5',\n        'formatH6': 'Ändra formatet för aktuellt block till rubrik 6',\n        'insertHorizontalRule': 'Infoga horisontell linje',\n        'linkDialog.show': 'Visa dialogruta för länk'\n      },\n      history: {\n        undo: 'Ångra',\n        redo: 'Gör om'\n      },\n      specialChar: {\n        specialChar: 'SPECIALTECKEN',\n        select: 'Välj specialtecken'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-sv-SE.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-ta-IN.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'ta-IN': {\n      font: {\n        bold: 'தடித்த',\n        italic: 'சாய்வு',\n        underline: 'அடிக்கோடு',\n        clear: 'நீக்கு',\n        height: 'வரி  உயரம்',\n        name: 'எழுத்துரு பெயர்',\n        strikethrough: 'குறுக்குக் கோடு',\n        size: 'எழுத்துரு அளவு',\n        superscript: 'மேல் ஒட்டு',\n        subscript: 'கீழ் ஒட்டு'\n      },\n      image: {\n        image: 'படம்',\n        insert: 'படத்தை செருகு',\n        resizeFull: 'முழு அளவை',\n        resizeHalf: 'அரை அளவை',\n        resizeQuarter: 'கால் அளவை',\n        floatLeft: 'இடப்பக்கமாக வை',\n        floatRight: 'வலப்பக்கமாக வை',\n        floatNone: 'இயல்புநிலையில் வை',\n        shapeRounded: 'வட்டமான வடிவம்',\n        shapeCircle: 'வட்ட வடிவம்',\n        shapeThumbnail: 'சிறு வடிவம்',\n        shapeNone: 'வடிவத்தை நீக்கு',\n        dragImageHere: 'படத்தை இங்கே இழுத்துவை',\n        dropImage: 'படத்தை விடு',\n        selectFromFiles: 'கோப்புகளை தேர்வு செய்',\n        maximumFileSize: 'அதிகபட்ச கோப்பு அளவு',\n        maximumFileSizeError: 'கோப்பு அதிகபட்ச அளவை மீறிவிட்டது',\n        url: 'இணையதள முகவரி',\n        remove: 'படத்தை நீக்கு',\n        original: 'Original'\n      },\n      video: {\n        video: 'காணொளி',\n        videoLink: 'காணொளி இணைப்பு',\n        insert: 'காணொளியை செருகு',\n        url: 'இணையதள முகவரி',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'இணைப்பு',\n        insert: 'இணைப்பை செருகு',\n        unlink: 'இணைப்பை நீக்கு',\n        edit: 'இணைப்பை தொகு',\n        textToDisplay: 'காட்சி வாசகம்',\n        url: 'இணையதள முகவரி',\n        openInNewWindow: 'புதிய சாளரத்தில் திறக்க'\n      },\n      table: {\n        table: 'அட்டவணை',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'கிடைமட்ட கோடு'\n      },\n      style: {\n        style: 'தொகுப்பு',\n        p: 'பத்தி',\n        blockquote: 'மேற்கோள்',\n        pre: 'குறியீடு',\n        h1: 'தலைப்பு 1',\n        h2: 'தலைப்பு 2',\n        h3: 'தலைப்பு 3',\n        h4: 'தலைப்பு 4',\n        h5: 'தலைப்பு 5',\n        h6: 'தலைப்பு 6'\n      },\n      lists: {\n        unordered: 'வரிசையிடாத',\n        ordered: 'வரிசையிட்ட'\n      },\n      options: {\n        help: 'உதவி',\n        fullscreen: 'முழுத்திரை',\n        codeview: 'நிரலாக்க காட்சி'\n      },\n      paragraph: {\n        paragraph: 'பத்தி',\n        outdent: 'வெளித்தள்ளு',\n        indent: 'உள்ளே தள்ளு',\n        left: 'இடது சீரமைப்பு',\n        center: 'நடு சீரமைப்பு',\n        right: 'வலது சீரமைப்பு',\n        justify: 'இருபுற சீரமைப்பு'\n      },\n      color: {\n        recent: 'அண்மை நிறம்',\n        more: 'மேலும்',\n        background: 'பின்புல நிறம்',\n        foreground: 'முன்புற நிறம்',\n        transparent: 'தெளிமையான',\n        setTransparent: 'தெளிமையாக்கு',\n        reset: 'மீட்டமைக்க',\n        resetToDefault: 'இயல்புநிலைக்கு மீட்டமை'\n      },\n      shortcut: {\n        shortcuts: 'குறுக்குவழி',\n        close: 'மூடு',\n        textFormatting: 'எழுத்து வடிவமைப்பு',\n        action: 'செயல்படுத்து',\n        paragraphFormatting: 'பத்தி வடிவமைப்பு',\n        documentStyle: 'ஆவண பாணி',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'மீளமை',\n        redo: 'மீண்டும்'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-ta-IN.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-th-TH.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'th-TH': {\n      font: {\n        bold: 'ตัวหนา',\n        italic: 'ตัวเอียง',\n        underline: 'ขีดเส้นใต้',\n        clear: 'ล้างรูปแบบตัวอักษร',\n        height: 'ความสูงบรรทัด',\n        name: 'แบบตัวอักษร',\n        strikethrough: 'ขีดฆ่า',\n        subscript: 'ตัวห้อย',\n        superscript: 'ตัวยก',\n        size: 'ขนาดตัวอักษร'\n      },\n      image: {\n        image: 'รูปภาพ',\n        insert: 'แทรกรูปภาพ',\n        resizeFull: 'ปรับขนาดเท่าจริง',\n        resizeHalf: 'ปรับขนาดลง 50%',\n        resizeQuarter: 'ปรับขนาดลง 25%',\n        floatLeft: 'ชิดซ้าย',\n        floatRight: 'ชิดขวา',\n        floatNone: 'ไม่จัดตำแหน่ง',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'ลากรูปภาพที่ต้องการไว้ที่นี่',\n        dropImage: 'วางรูปภาพหรือข้อความ',\n        selectFromFiles: 'เลือกไฟล์รูปภาพ',\n        maximumFileSize: 'ขนาดไฟล์ใหญ่สุด',\n        maximumFileSizeError: 'ไฟล์เกินขนาดที่กำหนด',\n        url: 'ที่อยู่ URL ของรูปภาพ',\n        remove: 'ลบรูปภาพ',\n        original: 'Original'\n      },\n      video: {\n        video: 'วีดีโอ',\n        videoLink: 'ลิงก์ของวีดีโอ',\n        insert: 'แทรกวีดีโอ',\n        url: 'ที่อยู่ URL ของวีดีโอ',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion หรือ Youku)'\n      },\n      link: {\n        link: 'ตัวเชื่อมโยง',\n        insert: 'แทรกตัวเชื่อมโยง',\n        unlink: 'ยกเลิกตัวเชื่อมโยง',\n        edit: 'แก้ไข',\n        textToDisplay: 'ข้อความที่ให้แสดง',\n        url: 'ที่อยู่เว็บไซต์ที่ต้องการให้เชื่อมโยงไปถึง?',\n        openInNewWindow: 'เปิดในหน้าต่างใหม่'\n      },\n      table: {\n        table: 'ตาราง',\n        addRowAbove: 'เพิ่มแถวด้านบน',\n        addRowBelow: 'เพิ่มแถวด้านล่าง',\n        addColLeft: 'เพิ่มคอลัมน์ด้านซ้าย',\n        addColRight: 'เพิ่มคอลัมน์ด้านขวา',\n        delRow: 'ลบแถว',\n        delCol: 'ลบคอลัมน์',\n        delTable: 'ลบตาราง'\n      },\n      hr: {\n        insert: 'แทรกเส้นคั่น'\n      },\n      style: {\n        style: 'รูปแบบ',\n        p: 'ปกติ',\n        blockquote: 'ข้อความ',\n        pre: 'โค้ด',\n        h1: 'หัวข้อ 1',\n        h2: 'หัวข้อ 2',\n        h3: 'หัวข้อ 3',\n        h4: 'หัวข้อ 4',\n        h5: 'หัวข้อ 5',\n        h6: 'หัวข้อ 6'\n      },\n      lists: {\n        unordered: 'รายการแบบไม่มีลำดับ',\n        ordered: 'รายการแบบมีลำดับ'\n      },\n      options: {\n        help: 'ช่วยเหลือ',\n        fullscreen: 'ขยายเต็มหน้าจอ',\n        codeview: 'ซอร์สโค้ด'\n      },\n      paragraph: {\n        paragraph: 'ย่อหน้า',\n        outdent: 'เยื้องซ้าย',\n        indent: 'เยื้องขวา',\n        left: 'จัดหน้าชิดซ้าย',\n        center: 'จัดหน้ากึ่งกลาง',\n        right: 'จัดหน้าชิดขวา',\n        justify: 'จัดบรรทัดเสมอกัน'\n      },\n      color: {\n        recent: 'สีที่ใช้ล่าสุด',\n        more: 'สีอื่นๆ',\n        background: 'สีพื้นหลัง',\n        foreground: 'สีพื้นหน้า',\n        transparent: 'โปร่งแสง',\n        setTransparent: 'ตั้งค่าความโปร่งแสง',\n        reset: 'คืนค่า',\n        resetToDefault: 'คืนค่ามาตรฐาน'\n      },\n      shortcut: {\n        shortcuts: 'แป้นลัด',\n        close: 'ปิด',\n        textFormatting: 'การจัดรูปแบบข้อความ',\n        action: 'การกระทำ',\n        paragraphFormatting: 'การจัดรูปแบบย่อหน้า',\n        documentStyle: 'รูปแบบของเอกสาร',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'ทำตัวหนา',\n        'italic': 'ทำตัวเอียง',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H1',\n        'formatH2': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H2',\n        'formatH3': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H3',\n        'formatH4': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H4',\n        'formatH5': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H5',\n        'formatH6': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'เปิดหน้าแก้ไข Link'\n      },\n      history: {\n        undo: 'ยกเลิกการกระทำ',\n        redo: 'ทำซ้ำการกระทำ'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-th-TH.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-tr-TR.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'tr-TR': {\n      font: {\n        bold: 'Kalın',\n        italic: 'İtalik',\n        underline: 'Altı çizili',\n        clear: 'Temizle',\n        height: 'Satır yüksekliği',\n        name: 'Yazı Tipi',\n        strikethrough: 'Üstü çizili',\n        subscript: 'Alt Simge',\n        superscript: 'Üst Simge',\n        size: 'Yazı tipi boyutu'\n      },\n      image: {\n        image: 'Resim',\n        insert: 'Resim ekle',\n        resizeFull: 'Orjinal boyut',\n        resizeHalf: '1/2 boyut',\n        resizeQuarter: '1/4 boyut',\n        floatLeft: 'Sola hizala',\n        floatRight: 'Sağa hizala',\n        floatNone: 'Hizalamayı kaldır',\n        shapeRounded: 'Şekil: Yuvarlatılmış Köşe',\n        shapeCircle: 'Şekil: Daire',\n        shapeThumbnail: 'Şekil: K.Resim',\n        shapeNone: 'Şekil: Yok',\n        dragImageHere: 'Buraya sürükleyin',\n        dropImage: 'Resim veya metni bırakın',\n        selectFromFiles: 'Dosya seçin',\n        maximumFileSize: 'Maksimum dosya boyutu',\n        maximumFileSizeError: 'Maksimum dosya boyutu aşıldı.',\n        url: 'Resim bağlantısı',\n        remove: 'Resimi Kaldır',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video bağlantısı',\n        insert: 'Video ekle',\n        url: 'Video bağlantısı?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion veya Youku)'\n      },\n      link: {\n        link: 'Bağlantı',\n        insert: 'Bağlantı ekle',\n        unlink: 'Bağlantıyı kaldır',\n        edit: 'Bağlantıyı düzenle',\n        textToDisplay: 'Görüntülemek için',\n        url: 'Bağlantı adresi?',\n        openInNewWindow: 'Yeni pencerede aç'\n      },\n      table: {\n        table: 'Tablo',\n        addRowAbove: 'Yukarı satır ekle',\n        addRowBelow: 'Aşağı satır ekle',\n        addColLeft: 'Sola sütun ekle',\n        addColRight: 'Sağa sütun ekle',\n        delRow: 'Satırı sil',\n        delCol: 'Sütunu sil',\n        delTable: 'Tabloyu sil'\n      },\n      hr: {\n        insert: 'Yatay çizgi ekle'\n      },\n      style: {\n        style: 'Biçim',\n        p: 'p',\n        blockquote: 'Alıntı',\n        pre: 'Önbiçimli',\n        h1: 'Başlık 1',\n        h2: 'Başlık 2',\n        h3: 'Başlık 3',\n        h4: 'Başlık 4',\n        h5: 'Başlık 5',\n        h6: 'Başlık 6'\n      },\n      lists: {\n        unordered: 'Madde işaretli liste',\n        ordered: 'Numaralı liste'\n      },\n      options: {\n        help: 'Yardım',\n        fullscreen: 'Tam ekran',\n        codeview: 'HTML Kodu'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Girintiyi artır',\n        indent: 'Girintiyi azalt',\n        left: 'Sola hizala',\n        center: 'Ortaya hizala',\n        right: 'Sağa hizala',\n        justify: 'Yasla'\n      },\n      color: {\n        recent: 'Son renk',\n        more: 'Daha fazla renk',\n        background: 'Arka plan rengi',\n        foreground: 'Yazı rengi',\n        transparent: 'Seffaflık',\n        setTransparent: 'Şeffaflığı ayarla',\n        reset: 'Sıfırla',\n        resetToDefault: 'Varsayılanlara sıfırla',\n        cpSelect: 'Seç'\n      },\n      shortcut: {\n        shortcuts: 'Kısayollar',\n        close: 'Kapat',\n        textFormatting: 'Yazı biçimlendirme',\n        action: 'Eylem',\n        paragraphFormatting: 'Paragraf biçimlendirme',\n        documentStyle: 'Biçim',\n        extraKeys: 'İlave anahtarlar'\n      },\n      help: {\n        'insertParagraph': 'Paragraf ekler',\n        'undo': 'Son komudu geri alır',\n        'redo': 'Son komudu yineler',\n        'tab': 'Girintiyi artırır',\n        'untab': 'Girintiyi azaltır',\n        'bold': 'Kalın yazma stilini ayarlar',\n        'italic': 'İtalik yazma stilini ayarlar',\n        'underline': 'Altı çizgili yazma stilini ayarlar',\n        'strikethrough': 'Üstü çizgili yazma stilini ayarlar',\n        'removeFormat': 'Biçimlendirmeyi temizler',\n        'justifyLeft': 'Yazıyı sola hizalar',\n        'justifyCenter': 'Yazıyı ortalar',\n        'justifyRight': 'Yazıyı sağa hizalar',\n        'justifyFull': 'Yazıyı her iki tarafa yazlar',\n        'insertUnorderedList': 'Madde işaretli liste ekler',\n        'insertOrderedList': 'Numaralı liste ekler',\n        'outdent': 'Aktif paragrafın girintisini azaltır',\n        'indent': 'Aktif paragrafın girintisini artırır',\n        'formatPara': 'Aktif bloğun biçimini paragraf (p) olarak değiştirir',\n        'formatH1': 'Aktif bloğun biçimini başlık 1 (h1) olarak değiştirir',\n        'formatH2': 'Aktif bloğun biçimini başlık 2 (h2) olarak değiştirir',\n        'formatH3': 'Aktif bloğun biçimini başlık 3 (h3) olarak değiştirir',\n        'formatH4': 'Aktif bloğun biçimini başlık 4 (h4) olarak değiştirir',\n        'formatH5': 'Aktif bloğun biçimini başlık 5 (h5) olarak değiştirir',\n        'formatH6': 'Aktif bloğun biçimini başlık 6 (h6) olarak değiştirir',\n        'insertHorizontalRule': 'Yatay çizgi ekler',\n        'linkDialog.show': 'Bağlantı ayar kutusunu gösterir'\n      },\n      history: {\n        undo: 'Geri al',\n        redo: 'Yinele'\n      },\n      specialChar: {\n        specialChar: 'ÖZEL KARAKTERLER',\n        select: 'Özel Karakterleri seçin'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-tr-TR.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-uk-UA.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'uk-UA': {\n      font: {\n        bold: 'Напівжирний',\n        italic: 'Курсив',\n        underline: 'Підкреслений',\n        clear: 'Прибрати стилі шрифту',\n        height: 'Висота лінії',\n        name: 'Шрифт',\n        strikethrough: 'Закреслений',\n        subscript: 'Нижній індекс',\n        superscript: 'Верхній індекс',\n        size: 'Розмір шрифту'\n      },\n      image: {\n        image: 'Картинка',\n        insert: 'Вставити картинку',\n        resizeFull: 'Відновити розмір',\n        resizeHalf: 'Зменшити до 50%',\n        resizeQuarter: 'Зменшити до 25%',\n        floatLeft: 'Розташувати ліворуч',\n        floatRight: 'Розташувати праворуч',\n        floatNone: 'Початкове розташування',\n        shapeRounded: 'Форма: Заокруглена',\n        shapeCircle: 'Форма: Коло',\n        shapeThumbnail: 'Форма: Мініатюра',\n        shapeNone: 'Форма: Немає',\n        dragImageHere: 'Перетягніть сюди картинку',\n        dropImage: 'Перетягніть картинку',\n        selectFromFiles: 'Вибрати з файлів',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL картинки',\n        remove: 'Видалити картинку',\n        original: 'Original'\n      },\n      video: {\n        video: 'Відео',\n        videoLink: 'Посилання на відео',\n        insert: 'Вставити відео',\n        url: 'URL відео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion чи Youku)'\n      },\n      link: {\n        link: 'Посилання',\n        insert: 'Вставити посилання',\n        unlink: 'Прибрати посилання',\n        edit: 'Редагувати',\n        textToDisplay: 'Текст, що відображається',\n        url: 'URL для переходу',\n        openInNewWindow: 'Відкрити у новому вікні'\n      },\n      table: {\n        table: 'Таблиця',\n        addRowAbove: 'Додати рядок вище',\n        addRowBelow: 'Додати рядок нижче',\n        addColLeft: 'Додати стовпчик ліворуч',\n        addColRight: 'Додати стовпчик праворуч',\n        delRow: 'Видалити рядок',\n        delCol: 'Видалити стовпчик',\n        delTable: 'Видалити таблицю'\n      },\n      hr: {\n        insert: 'Вставити горизонтальну лінію'\n      },\n      style: {\n        style: 'Стиль',\n        p: 'Нормальний',\n        blockquote: 'Цитата',\n        pre: 'Код',\n        h1: 'Заголовок 1',\n        h2: 'Заголовок 2',\n        h3: 'Заголовок 3',\n        h4: 'Заголовок 4',\n        h5: 'Заголовок 5',\n        h6: 'Заголовок 6'\n      },\n      lists: {\n        unordered: 'Маркований список',\n        ordered: 'Нумерований список'\n      },\n      options: {\n        help: 'Допомога',\n        fullscreen: 'На весь екран',\n        codeview: 'Початковий код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Зменшити відступ',\n        indent: 'Збільшити відступ',\n        left: 'Вирівняти по лівому краю',\n        center: 'Вирівняти по центру',\n        right: 'Вирівняти по правому краю',\n        justify: 'Розтягнути по ширині'\n      },\n      color: {\n        recent: 'Останній колір',\n        more: 'Ще кольори',\n        background: 'Колір фону',\n        foreground: 'Колір шрифту',\n        transparent: 'Прозорий',\n        setTransparent: 'Зробити прозорим',\n        reset: 'Відновити',\n        resetToDefault: 'Відновити початкові'\n      },\n      shortcut: {\n        shortcuts: 'Комбінації клавіш',\n        close: 'Закрити',\n        textFormatting: 'Форматування тексту',\n        action: 'Дія',\n        paragraphFormatting: 'Форматування параграфу',\n        documentStyle: 'Стиль документу',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Відмінити',\n        redo: 'Повторити'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-uk-UA.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-uz-UZ.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'uz-UZ': {\n      font: {\n        bold: 'қалин',\n        italic: 'Курсив',\n        underline: 'Белгиланган',\n        clear: 'Ҳарф турларини олиб ташлаш',\n        height: 'Чизиқ баландлиги',\n        name: 'Ҳарф',\n        strikethrough: 'Ўчирилган',\n        subscript: 'Пастки индекс',\n        superscript: 'Юқори индекс',\n        size: 'ҳарф ҳажми'\n      },\n      image: {\n        image: 'Расм',\n        insert: 'расмни қўйиш',\n        resizeFull: 'Ҳажмни тиклаш',\n        resizeHalf: '50% гача кичрайтириш',\n        resizeQuarter: '25% гача кичрайтириш',\n        floatLeft: 'Чапда жойлаштириш',\n        floatRight: 'Ўнгда жойлаштириш',\n        floatNone: 'Стандарт бўйича жойлашув',\n        shapeRounded: 'Шакли: Юмалоқ',\n        shapeCircle: 'Шакли: Доира',\n        shapeThumbnail: 'Шакли: Миниатюра',\n        shapeNone: 'Шакли: Йўқ',\n        dragImageHere: 'Суратни кўчириб ўтинг',\n        dropImage: 'Суратни кўчириб ўтинг',\n        selectFromFiles: 'Файллардан бирини танлаш',\n        url: 'суратлар URL и',\n        remove: 'Суратни ўчириш'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Видеога ҳавола',\n        insert: 'Видео',\n        url: 'URL видео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'\n      },\n      link: {\n        link: 'Ҳавола',\n        insert: 'Ҳаволани қўйиш',\n        unlink: 'Ҳаволани олиб ташлаш',\n        edit: 'Таҳрир қилиш',\n        textToDisplay: 'Кўринадиган матн',\n        url: 'URL ўтиш учун',\n        openInNewWindow: 'Янги дарчада очиш'\n      },\n      table: {\n        table: 'Жадвал'\n      },\n      hr: {\n        insert: 'Горизонтал чизиқни қўйиш'\n      },\n      style: {\n        style: 'Услуб',\n        p: 'Яхши',\n        blockquote: 'Жумла',\n        pre: 'Код',\n        h1: 'Сарлавҳа 1',\n        h2: 'Сарлавҳа  2',\n        h3: 'Сарлавҳа  3',\n        h4: 'Сарлавҳа  4',\n        h5: 'Сарлавҳа  5',\n        h6: 'Сарлавҳа  6'\n      },\n      lists: {\n        unordered: 'Белгиланган рўйҳат',\n        ordered: 'Рақамланган рўйҳат'\n      },\n      options: {\n        help: 'Ёрдам',\n        fullscreen: 'Бутун экран бўйича',\n        codeview: 'Бошланғич код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Орқага қайтишни камайтириш',\n        indent: 'Орқага қайтишни кўпайтириш',\n        left: 'Чап қирғоққа тўғрилаш',\n        center: 'Марказга тўғрилаш',\n        right: 'Ўнг қирғоққа тўғрилаш',\n        justify: 'Эни бўйлаб чўзиш'\n      },\n      color: {\n        recent: 'Охирги ранг',\n        more: 'Яна ранглар',\n        background: 'Фон  ранги',\n        foreground: 'Ҳарф ранги',\n        transparent: 'Шаффоф',\n        setTransparent: 'Шаффофдай қилиш',\n        reset: 'Бекор қилиш',\n        resetToDefault: 'Стандартга оид тиклаш'\n      },\n      shortcut: {\n        shortcuts: 'Клавишларнинг ҳамохҳанглиги',\n        close: 'Ёпиқ',\n        textFormatting: 'Матнни ',\n        action: 'Ҳаркат',\n        paragraphFormatting: 'Параграфни форматлаш',\n        documentStyle: 'Ҳужжатнинг тури',\n        extraKeys: 'Қўшимча имкониятлар'\n      },\n      history: {\n        undo: 'Бекор қилиш',\n        redo: 'Қайтариш'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-uz-UZ.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-vi-VN.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'vi-VN': {\n      font: {\n        bold: 'In Đậm',\n        italic: 'In Nghiêng',\n        underline: 'Gạch dưới',\n        clear: 'Bỏ định dạng',\n        height: 'Chiều cao dòng',\n        name: 'Phông chữ',\n        strikethrough: 'Gạch ngang',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Cỡ chữ'\n      },\n      image: {\n        image: 'Hình ảnh',\n        insert: 'Chèn',\n        resizeFull: '100%',\n        resizeHalf: '50%',\n        resizeQuarter: '25%',\n        floatLeft: 'Trôi về trái',\n        floatRight: 'Trôi về phải',\n        floatNone: 'Không trôi',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Thả Ảnh ở vùng này',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Chọn từ File',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL',\n        remove: 'Xóa',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link đến Video',\n        insert: 'Chèn Video',\n        url: 'URL',\n        providers: '(Hỗ trợ YouTube, Vimeo, Vine, Instagram, DailyMotion và Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Chèn Link',\n        unlink: 'Gỡ Link',\n        edit: 'Sửa',\n        textToDisplay: 'Văn bản hiển thị',\n        url: 'URL',\n        openInNewWindow: 'Mở ở Cửa sổ mới'\n      },\n      table: {\n        table: 'Bảng',\n        addRowAbove: 'Chèn dòng phía trên',\n        addRowBelow: 'Chèn dòng phía dưới',\n        addColLeft: 'Chèn cột bên trái',\n        addColRight: 'Chèn cột bên phải',\n        delRow: 'Xóa dòng',\n        delCol: 'Xóa cột',\n        delTable: 'Xóa bảng'\n      },\n      hr: {\n        insert: 'Chèn'\n      },\n      style: {\n        style: 'Kiểu chữ',\n        p: 'Chữ thường',\n        blockquote: 'Đoạn trích',\n        pre: 'Mã Code',\n        h1: 'H1',\n        h2: 'H2',\n        h3: 'H3',\n        h4: 'H4',\n        h5: 'H5',\n        h6: 'H6'\n      },\n      lists: {\n        unordered: 'Liệt kê danh sách',\n        ordered: 'Liệt kê theo thứ tự'\n      },\n      options: {\n        help: 'Trợ giúp',\n        fullscreen: 'Toàn Màn hình',\n        codeview: 'Xem Code'\n      },\n      paragraph: {\n        paragraph: 'Canh lề',\n        outdent: 'Dịch sang trái',\n        indent: 'Dịch sang phải',\n        left: 'Canh trái',\n        center: 'Canh giữa',\n        right: 'Canh phải',\n        justify: 'Canh đều'\n      },\n      color: {\n        recent: 'Màu chữ',\n        more: 'Mở rộng',\n        background: 'Màu nền',\n        foreground: 'Màu chữ',\n        transparent: 'trong suốt',\n        setTransparent: 'Nền trong suốt',\n        reset: 'Thiết lập lại',\n        resetToDefault: 'Trở lại ban đầu'\n      },\n      shortcut: {\n        shortcuts: 'Phím tắt',\n        close: 'Đóng',\n        textFormatting: 'Định dạng Văn bản',\n        action: 'Hành động',\n        paragraphFormatting: 'Định dạng',\n        documentStyle: 'Kiểu văn bản',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Chèn đo văn',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Lùi lại',\n        redo: 'Làm lại'\n      },\n      specialChar: {\n        specialChar: 'KÝ TỰ ĐẶC BIỆT',\n        select: 'Chọn ký tự đặc biệt'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-vi-VN.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-zh-CN.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'zh-CN': {\n      font: {\n        bold: '粗体',\n        italic: '斜体',\n        underline: '下划线',\n        clear: '清除格式',\n        height: '行高',\n        name: '字体',\n        strikethrough: '删除线',\n        subscript: '下标',\n        superscript: '上标',\n        size: '字号'\n      },\n      image: {\n        image: '图片',\n        insert: '插入图片',\n        resizeFull: '缩放至 100%',\n        resizeHalf: '缩放至 50%',\n        resizeQuarter: '缩放至 25%',\n        floatLeft: '靠左浮动',\n        floatRight: '靠右浮动',\n        floatNone: '取消浮动',\n        shapeRounded: '形状: 圆角',\n        shapeCircle: '形状: 圆',\n        shapeThumbnail: '形状: 缩略图',\n        shapeNone: '形状: 无',\n        dragImageHere: '将图片拖拽至此处',\n        dropImage: '拖拽图片或文本',\n        selectFromFiles: '从本地上传',\n        maximumFileSize: '文件大小最大值',\n        maximumFileSizeError: '文件大小超出最大值。',\n        url: '图片地址',\n        remove: '移除图片',\n        original: '原始图片'\n      },\n      video: {\n        video: '视频',\n        videoLink: '视频链接',\n        insert: '插入视频',\n        url: '视频地址',\n        providers: '(优酷, 腾讯, Instagram, DailyMotion, Youtube等)'\n      },\n      link: {\n        link: '链接',\n        insert: '插入链接',\n        unlink: '去除链接',\n        edit: '编辑链接',\n        textToDisplay: '显示文本',\n        url: '链接地址',\n        openInNewWindow: '在新窗口打开'\n      },\n      table: {\n        table: '表格',\n        addRowAbove: '在上方插入行',\n        addRowBelow: '在下方插入行',\n        addColLeft: '在左侧插入列',\n        addColRight: '在右侧插入列',\n        delRow: '删除行',\n        delCol: '删除列',\n        delTable: '删除表格'\n      },\n      hr: {\n        insert: '水平线'\n      },\n      style: {\n        style: '样式',\n        p: '普通',\n        blockquote: '引用',\n        pre: '代码',\n        h1: '标题 1',\n        h2: '标题 2',\n        h3: '标题 3',\n        h4: '标题 4',\n        h5: '标题 5',\n        h6: '标题 6'\n      },\n      lists: {\n        unordered: '无序列表',\n        ordered: '有序列表'\n      },\n      options: {\n        help: '帮助',\n        fullscreen: '全屏',\n        codeview: '源代码'\n      },\n      paragraph: {\n        paragraph: '段落',\n        outdent: '减少缩进',\n        indent: '增加缩进',\n        left: '左对齐',\n        center: '居中对齐',\n        right: '右对齐',\n        justify: '两端对齐'\n      },\n      color: {\n        recent: '最近使用',\n        more: '更多',\n        background: '背景',\n        foreground: '前景',\n        transparent: '透明',\n        setTransparent: '透明',\n        reset: '重置',\n        resetToDefault: '默认'\n      },\n      shortcut: {\n        shortcuts: '快捷键',\n        close: '关闭',\n        textFormatting: '文本格式',\n        action: '动作',\n        paragraphFormatting: '段落格式',\n        documentStyle: '文档样式',\n        extraKeys: '额外按键'\n      },\n      help: {\n        insertParagraph: '插入段落',\n        undo: '撤销',\n        redo: '重做',\n        tab: '增加缩进',\n        untab: '减少缩进',\n        bold: '粗体',\n        italic: '斜体',\n        underline: '下划线',\n        strikethrough: '删除线',\n        removeFormat: '清除格式',\n        justifyLeft: '左对齐',\n        justifyCenter: '居中对齐',\n        justifyRight: '右对齐',\n        justifyFull: '两端对齐',\n        insertUnorderedList: '无序列表',\n        insertOrderedList: '有序列表',\n        outdent: '减少缩进',\n        indent: '增加缩进',\n        formatPara: '设置选中内容样式为 普通',\n        formatH1: '设置选中内容样式为 标题1',\n        formatH2: '设置选中内容样式为 标题2',\n        formatH3: '设置选中内容样式为 标题3',\n        formatH4: '设置选中内容样式为 标题4',\n        formatH5: '设置选中内容样式为 标题5',\n        formatH6: '设置选中内容样式为 标题6',\n        insertHorizontalRule: '插入水平线',\n        'linkDialog.show': '显示链接对话框'\n      },\n      history: {\n        undo: '撤销',\n        redo: '重做'\n      },\n      specialChar: {\n        specialChar: '特殊字符',\n        select: '选取特殊字符'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-zh-CN.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/lang/summernote-zh-TW.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\nvar __webpack_exports__ = {};\n(function ($) {\n  $.extend(true, $.summernote.lang, {\n    'zh-TW': {\n      font: {\n        bold: '粗體',\n        italic: '斜體',\n        underline: '底線',\n        clear: '清除格式',\n        height: '行高',\n        name: '字體',\n        strikethrough: '刪除線',\n        subscript: '下標',\n        superscript: '上標',\n        size: '字號'\n      },\n      image: {\n        image: '圖片',\n        insert: '插入圖片',\n        resizeFull: '縮放至100%',\n        resizeHalf: '縮放至 50%',\n        resizeQuarter: '縮放至 25%',\n        floatLeft: '靠左浮動',\n        floatRight: '靠右浮動',\n        floatNone: '取消浮動',\n        shapeRounded: '形狀: 圓角',\n        shapeCircle: '形狀: 圓',\n        shapeThumbnail: '形狀: 縮略圖',\n        shapeNone: '形狀: 無',\n        dragImageHere: '將圖片拖曳至此處',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: '從本機上傳',\n        maximumFileSize: '文件大小最大值',\n        maximumFileSizeError: '文件大小超出最大值。',\n        url: '圖片網址',\n        remove: '移除圖片',\n        original: 'Original'\n      },\n      video: {\n        video: '影片',\n        videoLink: '影片連結',\n        insert: '插入影片',\n        url: '影片網址',\n        providers: '(優酷, Instagram, DailyMotion, Youtube等)'\n      },\n      link: {\n        link: '連結',\n        insert: '插入連結',\n        unlink: '取消連結',\n        edit: '編輯連結',\n        textToDisplay: '顯示文字',\n        url: '連結網址',\n        openInNewWindow: '在新視窗開啟'\n      },\n      table: {\n        table: '表格',\n        addRowAbove: '上方插入列',\n        addRowBelow: '下方插入列',\n        addColLeft: '左方插入欄',\n        addColRight: '右方插入欄',\n        delRow: '刪除列',\n        delCol: '刪除欄',\n        delTable: '刪除表格'\n      },\n      hr: {\n        insert: '水平線'\n      },\n      style: {\n        style: '樣式',\n        p: '一般',\n        blockquote: '引用區塊',\n        pre: '程式碼區塊',\n        h1: '標題 1',\n        h2: '標題 2',\n        h3: '標題 3',\n        h4: '標題 4',\n        h5: '標題 5',\n        h6: '標題 6'\n      },\n      lists: {\n        unordered: '項目清單',\n        ordered: '編號清單'\n      },\n      options: {\n        help: '幫助',\n        fullscreen: '全螢幕',\n        codeview: '原始碼'\n      },\n      paragraph: {\n        paragraph: '段落',\n        outdent: '取消縮排',\n        indent: '增加縮排',\n        left: '靠左對齊',\n        center: '靠中對齊',\n        right: '靠右對齊',\n        justify: '左右對齊'\n      },\n      color: {\n        recent: '字型顏色',\n        more: '更多',\n        background: '背景',\n        foreground: '字體',\n        transparent: '透明',\n        setTransparent: '透明',\n        reset: '重設',\n        resetToDefault: '預設'\n      },\n      shortcut: {\n        shortcuts: '快捷鍵',\n        close: '關閉',\n        textFormatting: '文字格式',\n        action: '動作',\n        paragraphFormatting: '段落格式',\n        documentStyle: '文件格式',\n        extraKeys: '額外按鍵'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: '復原',\n        redo: '取消復原'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-zh-TW.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/plugin/databasic/summernote-ext-databasic.css",
    "content": ".ext-databasic {\n\tposition: relative;\n\tdisplay: block;\n\tmin-height: 50px;\n\tbackground-color: cyan;\n\ttext-align: center;\n\tpadding: 20px;\n\tborder: 1px solid white;\n\tborder-radius: 10px;\n}\n\n.ext-databasic p {\n\tcolor: white;\n\tfont-size: 1.2em;\n\tmargin: 0;\n}\n"
  },
  {
    "path": "public/vendor/summernote/0.9.1/plugin/databasic/summernote-ext-databasic.js",
    "content": "(function(factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function($) {\n  // pull in some summernote core functions\n  var ui = $.summernote.ui;\n  var dom = $.summernote.dom;\n\n  // define the popover plugin\n  var DataBasicPlugin = function(context) {\n    var self = this;\n    var options = context.options;\n    var lang = options.langInfo;\n\n    self.icon = '<i class=\"fa fa-object-group\"></i>';\n\n    // add context menu button for dialog\n    context.memo('button.databasic', function() {\n      return ui.button({\n        contents: self.icon,\n        tooltip: lang.databasic.insert,\n        click: context.createInvokeHandler('databasic.showDialog'),\n      }).render();\n    });\n\n    // add popover edit button\n    context.memo('button.databasicDialog', function() {\n      return ui.button({\n        contents: self.icon,\n        tooltip: lang.databasic.edit,\n        click: context.createInvokeHandler('databasic.showDialog'),\n      }).render();\n    });\n\n    //  add popover size buttons\n    context.memo('button.databasicSize100', function() {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">100%</span>',\n        tooltip: lang.image.resizeFull,\n        click: context.createInvokeHandler('editor.resize', '1'),\n      }).render();\n    });\n    context.memo('button.databasicSize50', function() {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">50%</span>',\n        tooltip: lang.image.resizeHalf,\n        click: context.createInvokeHandler('editor.resize', '0.5'),\n      }).render();\n    });\n    context.memo('button.databasicSize25', function() {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">25%</span>',\n        tooltip: lang.image.resizeQuarter,\n        click: context.createInvokeHandler('editor.resize', '0.25'),\n      }).render();\n    });\n\n    self.events = {\n      'summernote.init': function(we, e) {\n        // update existing containers\n        $('data.ext-databasic', e.editable).each(function() { self.setContent($(this)); });\n        // TODO: make this an undo snapshot...\n      },\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function() {\n        self.update();\n      },\n      'summernote.dialog.shown': function() {\n        self.hidePopover();\n      },\n    };\n\n    self.initialize = function() {\n      // create dialog markup\n      var $container = options.dialogsInBody ? $(document.body) : context.layoutInfo.editor;\n\n      var body = '<div class=\"form-group row-fluid\">' +\n          '<label>' + lang.databasic.testLabel + '</label>' +\n          '<input class=\"ext-databasic-test form-control\" type=\"text\" />' +\n          '</div>';\n      var footer = '<button href=\"#\" class=\"btn btn-primary ext-databasic-save\">' + lang.databasic.insert + '</button>';\n\n      self.$dialog = ui.dialog({\n        title: lang.databasic.name,\n        fade: options.dialogsFade,\n        body: body,\n        footer: footer,\n      }).render().appendTo($container);\n\n      // create popover\n      self.$popover = ui.popover({\n        className: 'ext-databasic-popover',\n      }).render().appendTo('body');\n      var $content = self.$popover.find('.popover-content');\n\n      context.invoke('buttons.build', $content, options.popover.databasic);\n    };\n\n    self.destroy = function() {\n      self.$popover.remove();\n      self.$popover = null;\n      self.$dialog.remove();\n      self.$dialog = null;\n    };\n\n    self.update = function() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!context.invoke('editor.hasFocus')) {\n        self.hidePopover();\n        return;\n      }\n\n      var rng = context.invoke('editor.createRange');\n      var visible = false;\n\n      if (rng.isOnData()) {\n        var $data = $(rng.sc).closest('data.ext-databasic');\n\n        if ($data.length) {\n          var pos = dom.posFromPlaceholder($data[0]);\n\n          self.$popover.css({\n            display: 'block',\n            left: pos.left,\n            top: pos.top,\n          });\n\n          // save editor target to let size buttons resize the container\n          context.invoke('editor.saveTarget', $data[0]);\n\n          visible = true;\n        }\n      }\n\n      // hide if not visible\n      if (!visible) {\n        self.hidePopover();\n      }\n    };\n\n    self.hidePopover = function() {\n      self.$popover.hide();\n    };\n\n    // define plugin dialog\n    self.getInfo = function() {\n      var rng = context.invoke('editor.createRange');\n\n      if (rng.isOnData()) {\n        var $data = $(rng.sc).closest('data.ext-databasic');\n\n        if ($data.length) {\n          // Get the first node on range(for edit).\n          return {\n            node: $data,\n            test: $data.attr('data-test'),\n          };\n        }\n      }\n\n      return {};\n    };\n\n    self.setContent = function($node) {\n      $node.html('<p contenteditable=\"false\">' + self.icon + ' ' + lang.databasic.name + ': ' +\n        $node.attr('data-test') + '</p>');\n    };\n\n    self.updateNode = function(info) {\n      self.setContent(info.node\n        .attr('data-test', info.test));\n    };\n\n    self.createNode = function(info) {\n      var $node = $('<data class=\"ext-databasic\"></data>');\n\n      if ($node) {\n        // save node to info structure\n        info.node = $node;\n        // insert node into editor dom\n        context.invoke('editor.insertNode', $node[0]);\n      }\n\n      return $node;\n    };\n\n    self.showDialog = function() {\n      var info = self.getInfo();\n      var newNode = !info.node;\n      context.invoke('editor.saveRange');\n\n      self\n        .openDialog(info)\n        .then(function(dialogInfo) {\n          // [workaround] hide dialog before restore range for IE range focus\n          ui.hideDialog(self.$dialog);\n          context.invoke('editor.restoreRange');\n\n          // insert a new node\n          if (newNode) {\n            self.createNode(info);\n          }\n\n          // update info with dialog info\n          $.extend(info, dialogInfo);\n\n          self.updateNode(info);\n        })\n        .fail(function() {\n          context.invoke('editor.restoreRange');\n        });\n    };\n\n    self.openDialog = function(info) {\n      return $.Deferred(function(deferred) {\n        var $inpTest = self.$dialog.find('.ext-databasic-test');\n        var $saveBtn = self.$dialog.find('.ext-databasic-save');\n        var onKeyup = function(event) {\n          if (event.keyCode === 13) {\n            $saveBtn.trigger('click');\n          }\n        };\n\n        ui.onDialogShown(self.$dialog, function() {\n          context.triggerEvent('dialog.shown');\n\n          $inpTest.val(info.test).on('input', function() {\n            ui.toggleBtn($saveBtn, $inpTest.val());\n          }).trigger('focus').on('keyup', onKeyup);\n\n          $saveBtn\n            .text(info.node ? lang.databasic.edit : lang.databasic.insert)\n            .on('click', function(event) {\n              event.preventDefault();\n\n              deferred.resolve({ test: $inpTest.val() });\n            });\n\n          // init save button\n          ui.toggleBtn($saveBtn, $inpTest.val());\n        });\n\n        ui.onDialogHidden(self.$dialog, function() {\n          $inpTest.off('input keyup');\n          $saveBtn.off('click');\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        ui.showDialog(self.$dialog);\n      });\n    };\n  };\n\n  // Extends summernote\n  $.extend(true, $.summernote, {\n    plugins: {\n      databasic: DataBasicPlugin,\n    },\n\n    options: {\n      popover: {\n        databasic: [\n          ['databasic', ['databasicDialog', 'databasicSize100', 'databasicSize50', 'databasicSize25']],\n        ],\n      },\n    },\n\n    // add localization texts\n    lang: {\n      'en-US': {\n        databasic: {\n          name: 'Basic Data Container',\n          insert: 'insert basic data container',\n          edit: 'edit basic data container',\n          testLabel: 'test input',\n        },\n      },\n    },\n\n  });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/0.9.1/plugin/hello/summernote-ext-hello.js",
    "content": "(function(factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function($) {\n  // Extends plugins for adding hello.\n  //  - plugin is external module for customizing.\n  $.extend($.summernote.plugins, {\n    /**\n     * @param {Object} context - context object has status of editor.\n     */\n    'hello': function(context) {\n      var self = this;\n\n      // ui has renders to build ui elements.\n      //  - you can create a button with `ui.button`\n      var ui = $.summernote.ui;\n\n      // add hello button\n      context.memo('button.hello', function() {\n        // create button\n        var button = ui.button({\n          contents: '<i class=\"fa fa-child\"/> Hello',\n          tooltip: 'hello',\n          click: function() {\n            self.$panel.show();\n            self.$panel.hide(500);\n            // invoke insertText method with 'hello' on editor module.\n            context.invoke('editor.insertText', 'hello');\n          },\n        });\n\n        // create jQuery object from button instance.\n        var $hello = button.render();\n        return $hello;\n      });\n\n      // This events will be attached when editor is initialized.\n      this.events = {\n        // This will be called after modules are initialized.\n        'summernote.init': function(we, e) {\n          // eslint-disable-next-line\n          console.log('summernote initialized', we, e);\n        },\n        // This will be called when user releases a key on editable.\n        'summernote.keyup': function(we, e) {\n          // eslint-disable-next-line\n          console.log('summernote keyup', we, e);\n        },\n      };\n\n      // This method will be called when editor is initialized by $('..').summernote();\n      // You can create elements for plugin\n      this.initialize = function() {\n        this.$panel = $('<div class=\"hello-panel\"/>').css({\n          position: 'absolute',\n          width: 100,\n          height: 100,\n          left: '50%',\n          top: '50%',\n          background: 'red',\n        }).hide();\n\n        this.$panel.appendTo('body');\n      };\n\n      // This methods will be called when editor is destroyed by $('..').summernote('destroy');\n      // You should remove elements on `initialize`.\n      this.destroy = function() {\n        this.$panel.remove();\n        this.$panel = null;\n      };\n    },\n  });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/0.9.1/plugin/specialchars/summernote-ext-specialchars.js",
    "content": "(function(factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function($) {\n  $.extend($.summernote.plugins, {\n    'specialchars': function(context) {\n      var self = this;\n      var ui = $.summernote.ui;\n\n      var $editor = context.layoutInfo.editor;\n      var options = context.options;\n      var lang = options.langInfo;\n\n      var KEY = {\n        UP: 38,\n        DOWN: 40,\n        LEFT: 37,\n        RIGHT: 39,\n        ENTER: 13,\n      };\n      var COLUMN_LENGTH = 12;\n      var COLUMN_WIDTH = 35;\n\n      var currentColumn = 0;\n      var currentRow = 0;\n      var totalColumn = 0;\n      var totalRow = 0;\n\n      // special characters data set\n      var specialCharDataSet = [\n        '&quot;', '&amp;', '&lt;', '&gt;', '&iexcl;', '&cent;',\n        '&pound;', '&curren;', '&yen;', '&brvbar;', '&sect;',\n        '&uml;', '&copy;', '&ordf;', '&laquo;', '&not;',\n        '&reg;', '&macr;', '&deg;', '&plusmn;', '&sup2;',\n        '&sup3;', '&acute;', '&micro;', '&para;', '&middot;',\n        '&cedil;', '&sup1;', '&ordm;', '&raquo;', '&frac14;',\n        '&frac12;', '&frac34;', '&iquest;', '&times;', '&divide;',\n        '&fnof;', '&circ;', '&tilde;', '&ndash;', '&mdash;',\n        '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;',\n        '&bdquo;', '&dagger;', '&Dagger;', '&bull;', '&hellip;',\n        '&permil;', '&prime;', '&Prime;', '&lsaquo;', '&rsaquo;',\n        '&oline;', '&frasl;', '&euro;', '&image;', '&weierp;',\n        '&real;', '&trade;', '&alefsym;', '&larr;', '&uarr;',\n        '&rarr;', '&darr;', '&harr;', '&crarr;', '&lArr;',\n        '&uArr;', '&rArr;', '&dArr;', '&hArr;', '&forall;',\n        '&part;', '&exist;', '&empty;', '&nabla;', '&isin;',\n        '&notin;', '&ni;', '&prod;', '&sum;', '&minus;',\n        '&lowast;', '&radic;', '&prop;', '&infin;', '&ang;',\n        '&and;', '&or;', '&cap;', '&cup;', '&int;',\n        '&there4;', '&sim;', '&cong;', '&asymp;', '&ne;',\n        '&equiv;', '&le;', '&ge;', '&sub;', '&sup;',\n        '&nsub;', '&sube;', '&supe;', '&oplus;', '&otimes;',\n        '&perp;', '&sdot;', '&lceil;', '&rceil;', '&lfloor;',\n        '&rfloor;', '&loz;', '&spades;', '&clubs;', '&hearts;',\n        '&diams;',\n      ];\n\n      context.memo('button.specialchars', function() {\n        return ui.button({\n          contents: '<i class=\"fa fa-font fa-flip-vertical\"></i>',\n          tooltip: lang.specialChar.specialChar,\n          click: function() {\n            self.show();\n          },\n        }).render();\n      });\n\n      /**\n       * Make Special Characters Table\n       *\n       * @member plugin.specialChar\n       * @private\n       * @return {jQuery}\n       */\n      this.makeSpecialCharSetTable = function() {\n        var $table = $('<table></table>');\n        $.each(specialCharDataSet, function(idx, text) {\n          var $td = $('<td></td>').addClass('note-specialchar-node');\n          var $tr = (idx % COLUMN_LENGTH === 0) ? $('<tr></tr>') : $table.find('tr').last();\n\n          var $button = ui.button({\n            callback: function($node) {\n              $node.html(text);\n              $node.attr('title', text);\n              $node.attr('data-value', encodeURIComponent(text));\n              $node.css({\n                width: COLUMN_WIDTH,\n                'margin-right': '2px',\n                'margin-bottom': '2px',\n              });\n            },\n          }).render();\n\n          $td.append($button);\n\n          $tr.append($td);\n          if (idx % COLUMN_LENGTH === 0) {\n            $table.append($tr);\n          }\n        });\n\n        totalRow = $table.find('tr').length;\n        totalColumn = COLUMN_LENGTH;\n\n        return $table;\n      };\n\n      this.initialize = function() {\n        var $container = options.dialogsInBody ? $(document.body) : $editor;\n\n        var body = '<div class=\"form-group row-fluid\">' + this.makeSpecialCharSetTable()[0].outerHTML + '</div>';\n\n        this.$dialog = ui.dialog({\n          title: lang.specialChar.select,\n          body: body,\n        }).render().appendTo($container);\n      };\n\n      this.show = function() {\n        var text = context.invoke('editor.getSelectedText');\n        context.invoke('editor.saveRange');\n        this.showSpecialCharDialog(text).then(function(selectChar) {\n          context.invoke('editor.restoreRange');\n\n          // build node\n          var $node = $('<span></span>').html(selectChar)[0];\n\n          if ($node) {\n            // insert video node\n            context.invoke('editor.insertNode', $node);\n          }\n        }).fail(function() {\n          context.invoke('editor.restoreRange');\n        });\n      };\n\n      /**\n       * show image dialog\n       *\n       * @param {jQuery} $dialog\n       * @return {Promise}\n       */\n      this.showSpecialCharDialog = function(text) {\n        return $.Deferred(function(deferred) {\n          var $specialCharDialog = self.$dialog;\n          var $specialCharNode = $specialCharDialog.find('.note-specialchar-node');\n          var $selectedNode = null;\n          var ARROW_KEYS = [KEY.UP, KEY.DOWN, KEY.LEFT, KEY.RIGHT];\n          var ENTER_KEY = KEY.ENTER;\n\n          function addActiveClass($target) {\n            if (!$target) {\n              return;\n            }\n            $target.find('button').addClass('active');\n            $selectedNode = $target;\n          }\n\n          function removeActiveClass($target) {\n            $target.find('button').removeClass('active');\n            $selectedNode = null;\n          }\n\n          // find next node\n          function findNextNode(row, column) {\n            var findNode = null;\n            $.each($specialCharNode, function(idx, $node) {\n              var findRow = Math.ceil((idx + 1) / COLUMN_LENGTH);\n              var findColumn = ((idx + 1) % COLUMN_LENGTH === 0) ? COLUMN_LENGTH : (idx + 1) % COLUMN_LENGTH;\n              if (findRow === row && findColumn === column) {\n                findNode = $node;\n                return false;\n              }\n            });\n            return $(findNode);\n          }\n\n          function arrowKeyHandler(keyCode) {\n            // left, right, up, down key\n            var $nextNode;\n            var lastRowColumnLength = $specialCharNode.length % totalColumn;\n\n            if (KEY.LEFT === keyCode) {\n              if (currentColumn > 1) {\n                currentColumn = currentColumn - 1;\n              } else if (currentRow === 1 && currentColumn === 1) {\n                currentColumn = lastRowColumnLength;\n                currentRow = totalRow;\n              } else {\n                currentColumn = totalColumn;\n                currentRow = currentRow - 1;\n              }\n            } else if (KEY.RIGHT === keyCode) {\n              if (currentRow === totalRow && lastRowColumnLength === currentColumn) {\n                currentColumn = 1;\n                currentRow = 1;\n              } else if (currentColumn < totalColumn) {\n                currentColumn = currentColumn + 1;\n              } else {\n                currentColumn = 1;\n                currentRow = currentRow + 1;\n              }\n            } else if (KEY.UP === keyCode) {\n              if (currentRow === 1 && lastRowColumnLength < currentColumn) {\n                currentRow = totalRow - 1;\n              } else {\n                currentRow = currentRow - 1;\n              }\n            } else if (KEY.DOWN === keyCode) {\n              currentRow = currentRow + 1;\n            }\n\n            if (currentRow === totalRow && currentColumn > lastRowColumnLength) {\n              currentRow = 1;\n            } else if (currentRow > totalRow) {\n              currentRow = 1;\n            } else if (currentRow < 1) {\n              currentRow = totalRow;\n            }\n\n            $nextNode = findNextNode(currentRow, currentColumn);\n\n            if ($nextNode) {\n              removeActiveClass($selectedNode);\n              addActiveClass($nextNode);\n            }\n          }\n\n          function enterKeyHandler() {\n            if (!$selectedNode) {\n              return;\n            }\n\n            deferred.resolve(decodeURIComponent($selectedNode.find('button').attr('data-value')));\n            $specialCharDialog.modal('hide');\n          }\n\n          function keyDownEventHandler(event) {\n            event.preventDefault();\n            var keyCode = event.keyCode;\n            if (keyCode === undefined || keyCode === null) {\n              return;\n            }\n            // check arrowKeys match\n            if (ARROW_KEYS.indexOf(keyCode) > -1) {\n              if ($selectedNode === null) {\n                addActiveClass($specialCharNode.eq(0));\n                currentColumn = 1;\n                currentRow = 1;\n                return;\n              }\n              arrowKeyHandler(keyCode);\n            } else if (keyCode === ENTER_KEY) {\n              enterKeyHandler();\n            }\n            return false;\n          }\n\n          // remove class\n          removeActiveClass($specialCharNode);\n\n          // find selected node\n          if (text) {\n            for (var i = 0; i < $specialCharNode.length; i++) {\n              var $checkNode = $($specialCharNode[i]);\n              if ($checkNode.text() === text) {\n                addActiveClass($checkNode);\n                currentRow = Math.ceil((i + 1) / COLUMN_LENGTH);\n                currentColumn = (i + 1) % COLUMN_LENGTH;\n              }\n            }\n          }\n\n          ui.onDialogShown(self.$dialog, function() {\n            $(document).on('keydown', keyDownEventHandler);\n\n            self.$dialog.find('button').tooltip();\n\n            $specialCharNode.on('click', function(event) {\n              event.preventDefault();\n              deferred.resolve(decodeURIComponent($(event.currentTarget).find('button').attr('data-value')));\n              ui.hideDialog(self.$dialog);\n            });\n          });\n\n          ui.onDialogHidden(self.$dialog, function() {\n            $specialCharNode.off('click');\n\n            self.$dialog.find('button').tooltip();\n\n            $(document).off('keydown', keyDownEventHandler);\n\n            if (deferred.state() === 'pending') {\n              deferred.reject();\n            }\n          });\n\n          ui.showDialog(self.$dialog);\n        });\n      };\n    },\n  });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/0.9.1/summernote-bs4.css",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n@font-face {\n    font-family: \"summernote\";\n    font-style: normal;\n    font-weight: 400;\n    font-display: auto;\n    src: url(\"./font/summernote.eot?#iefix\") format(\"embedded-opentype\"), url(\"./font/summernote.woff2\") format(\"woff2\"), url(\"./font/summernote.woff\") format(\"woff\"), url(\"./font/summernote.ttf\") format(\"truetype\");\n}\n[class^=note-icon]:before,\n[class*=\" note-icon\"]:before {\n    display: inline-block;\n    font-family: \"summernote\";\n    font-style: normal;\n    font-size: inherit;\n    text-decoration: inherit;\n    text-rendering: auto;\n    text-transform: none;\n    vertical-align: middle;\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-font-smoothing: antialiased;\n    speak: none;\n}\n\n.note-icon-fw {\n    text-align: center;\n    width: 1.25em;\n}\n\n.note-icon-border {\n    border: solid 0.08em #eee;\n    border-radius: 0.1em;\n    padding: 0.2em 0.25em 0.15em;\n}\n\n.note-icon-pull-left {\n    float: left;\n}\n\n.note-icon-pull-right {\n    float: right;\n}\n\n.note-icon.note-icon-pull-left {\n    margin-right: 0.3em;\n}\n.note-icon.note-icon-pull-right {\n    margin-left: 0.3em;\n}\n\n.note-icon-align::before {\n    content: \"\\ea01\";\n}\n\n.note-icon-align-center::before {\n    content: \"\\ea02\";\n}\n\n.note-icon-align-indent::before {\n    content: \"\\ea03\";\n}\n\n.note-icon-align-justify::before {\n    content: \"\\ea04\";\n}\n\n.note-icon-align-left::before {\n    content: \"\\ea05\";\n}\n\n.note-icon-align-outdent::before {\n    content: \"\\ea06\";\n}\n\n.note-icon-align-right::before {\n    content: \"\\ea07\";\n}\n\n.note-icon-arrow-circle-down::before {\n    content: \"\\ea08\";\n}\n\n.note-icon-arrow-circle-left::before {\n    content: \"\\ea09\";\n}\n\n.note-icon-arrow-circle-right::before {\n    content: \"\\ea0a\";\n}\n\n.note-icon-arrow-circle-up::before {\n    content: \"\\ea0b\";\n}\n\n.note-icon-arrows-alt::before {\n    content: \"\\ea0c\";\n}\n\n.note-icon-arrows-h::before {\n    content: \"\\ea0d\";\n}\n\n.note-icon-arrows-v::before {\n    content: \"\\ea0e\";\n}\n\n.note-icon-bold::before {\n    content: \"\\ea0f\";\n}\n\n.note-icon-caret::before {\n    content: \"\\ea10\";\n}\n\n.note-icon-chain-broken::before {\n    content: \"\\ea11\";\n}\n\n.note-icon-circle::before {\n    content: \"\\ea12\";\n}\n\n.note-icon-close::before {\n    content: \"\\ea13\";\n}\n\n.note-icon-code::before {\n    content: \"\\ea14\";\n}\n\n.note-icon-col-after::before {\n    content: \"\\ea15\";\n}\n\n.note-icon-col-before::before {\n    content: \"\\ea16\";\n}\n\n.note-icon-col-remove::before {\n    content: \"\\ea17\";\n}\n\n.note-icon-eraser::before {\n    content: \"\\ea18\";\n}\n\n.note-icon-float-left::before {\n    content: \"\\ea19\";\n}\n\n.note-icon-float-none::before {\n    content: \"\\ea1a\";\n}\n\n.note-icon-float-right::before {\n    content: \"\\ea1b\";\n}\n\n.note-icon-font::before {\n    content: \"\\ea1c\";\n}\n\n.note-icon-frame::before {\n    content: \"\\ea1d\";\n}\n\n.note-icon-italic::before {\n    content: \"\\ea1e\";\n}\n\n.note-icon-link::before {\n    content: \"\\ea1f\";\n}\n\n.note-icon-magic::before {\n    content: \"\\ea20\";\n}\n\n.note-icon-menu-check::before {\n    content: \"\\ea21\";\n}\n\n.note-icon-minus::before {\n    content: \"\\ea22\";\n}\n\n.note-icon-orderedlist::before {\n    content: \"\\ea23\";\n}\n\n.note-icon-pencil::before {\n    content: \"\\ea24\";\n}\n\n.note-icon-picture::before {\n    content: \"\\ea25\";\n}\n\n.note-icon-question::before {\n    content: \"\\ea26\";\n}\n\n.note-icon-redo::before {\n    content: \"\\ea27\";\n}\n\n.note-icon-rollback::before {\n    content: \"\\ea28\";\n}\n\n.note-icon-row-above::before {\n    content: \"\\ea29\";\n}\n\n.note-icon-row-below::before {\n    content: \"\\ea2a\";\n}\n\n.note-icon-row-remove::before {\n    content: \"\\ea2b\";\n}\n\n.note-icon-special-character::before {\n    content: \"\\ea2c\";\n}\n\n.note-icon-square::before {\n    content: \"\\ea2d\";\n}\n\n.note-icon-strikethrough::before {\n    content: \"\\ea2e\";\n}\n\n.note-icon-subscript::before {\n    content: \"\\ea2f\";\n}\n\n.note-icon-summernote::before {\n    content: \"\\ea30\";\n}\n\n.note-icon-superscript::before {\n    content: \"\\ea31\";\n}\n\n.note-icon-table::before {\n    content: \"\\ea32\";\n}\n\n.note-icon-text-height::before {\n    content: \"\\ea33\";\n}\n\n.note-icon-trash::before {\n    content: \"\\ea34\";\n}\n\n.note-icon-underline::before {\n    content: \"\\ea35\";\n}\n\n.note-icon-undo::before {\n    content: \"\\ea36\";\n}\n\n.note-icon-unorderedlist::before {\n    content: \"\\ea37\";\n}\n\n.note-icon-video::before {\n    content: \"\\ea38\";\n}\n\n/* Theme Variables\n ------------------------------------------ */\n/* Layout\n ------------------------------------------ */\n.note-editor {\n    position: relative;\n}\n.note-editor .note-dropzone {\n    position: absolute;\n    display: none;\n    z-index: 100;\n    color: lightskyblue;\n    background-color: #fff;\n    opacity: 0.95;\n}\n.note-editor .note-dropzone .note-dropzone-message {\n    display: table-cell;\n    vertical-align: middle;\n    text-align: center;\n    font-size: 28px;\n    font-weight: 700;\n}\n.note-editor .note-dropzone.hover {\n    color: #098ddf;\n}\n.note-editor.dragover .note-dropzone {\n    display: table;\n}\n.note-editor .note-editing-area {\n    position: relative;\n}\n.note-editor .note-editing-area .note-editable {\n    outline: none;\n}\n.note-editor .note-editing-area .note-editable sup {\n    vertical-align: super;\n}\n.note-editor .note-editing-area .note-editable sub {\n    vertical-align: sub;\n}\n.note-editor .note-editing-area .note-editable img.note-float-left {\n    margin-right: 10px;\n}\n.note-editor .note-editing-area .note-editable img.note-float-right {\n    margin-left: 10px;\n}\n\n/* Frame mode layout\n ------------------------------------------ */\n.note-editor.note-frame,\n.note-editor.note-airframe {\n    border: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame.codeview .note-editing-area .note-editable,\n.note-editor.note-airframe.codeview .note-editing-area .note-editable {\n    display: none;\n}\n.note-editor.note-frame.codeview .note-editing-area .note-codable,\n.note-editor.note-airframe.codeview .note-editing-area .note-codable {\n    display: block;\n}\n.note-editor.note-frame .note-editing-area,\n.note-editor.note-airframe .note-editing-area {\n    overflow: hidden;\n}\n.note-editor.note-frame .note-editing-area .note-editable,\n.note-editor.note-airframe .note-editing-area .note-editable {\n    padding: 10px;\n    overflow: auto;\n    word-wrap: break-word;\n}\n.note-editor.note-frame .note-editing-area .note-editable[contenteditable=false],\n.note-editor.note-airframe .note-editing-area .note-editable[contenteditable=false] {\n    background-color: rgba(128, 128, 128, 0.1137254902);\n}\n.note-editor.note-frame .note-editing-area .note-codable,\n.note-editor.note-airframe .note-editing-area .note-codable {\n    display: none;\n    width: 100%;\n    padding: 10px;\n    border: none;\n    box-shadow: none;\n    font-family: Menlo, Monaco, monospace, sans-serif;\n    font-size: 14px;\n    color: #ccc;\n    background-color: #222;\n    resize: none;\n    outline: none;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n    border-radius: 0;\n    margin-bottom: 0;\n}\n.note-editor.note-frame.fullscreen,\n.note-editor.note-airframe.fullscreen {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100% !important;\n    z-index: 1050;\n}\n.note-editor.note-frame.fullscreen .note-resizebar,\n.note-editor.note-airframe.fullscreen .note-resizebar {\n    display: none;\n}\n.note-editor.note-frame .note-status-output,\n.note-editor.note-airframe .note-status-output {\n    display: block;\n    width: 100%;\n    font-size: 14px;\n    line-height: 1.42857143;\n    height: 20px;\n    margin-bottom: 0;\n    color: #000;\n    border: 0;\n    border-top: 1px solid #e2e2e2;\n}\n.note-editor.note-frame .note-status-output:empty,\n.note-editor.note-airframe .note-status-output:empty {\n    height: 0;\n    border-top: 0 solid transparent;\n}\n.note-editor.note-frame .note-status-output .pull-right,\n.note-editor.note-airframe .note-status-output .pull-right {\n    float: right !important;\n}\n.note-editor.note-frame .note-status-output .text-muted,\n.note-editor.note-airframe .note-status-output .text-muted {\n    color: #777;\n}\n.note-editor.note-frame .note-status-output .text-primary,\n.note-editor.note-airframe .note-status-output .text-primary {\n    color: #286090;\n}\n.note-editor.note-frame .note-status-output .text-success,\n.note-editor.note-airframe .note-status-output .text-success {\n    color: #3c763d;\n}\n.note-editor.note-frame .note-status-output .text-info,\n.note-editor.note-airframe .note-status-output .text-info {\n    color: #31708f;\n}\n.note-editor.note-frame .note-status-output .text-warning,\n.note-editor.note-airframe .note-status-output .text-warning {\n    color: #8a6d3b;\n}\n.note-editor.note-frame .note-status-output .text-danger,\n.note-editor.note-airframe .note-status-output .text-danger {\n    color: #a94442;\n}\n.note-editor.note-frame .note-status-output .alert,\n.note-editor.note-airframe .note-status-output .alert {\n    margin: -7px 0 0 0;\n    padding: 7px 10px 2px 10px;\n    border-radius: 0;\n    color: #000;\n    background-color: #f5f5f5;\n}\n.note-editor.note-frame .note-status-output .alert .note-icon,\n.note-editor.note-airframe .note-status-output .alert .note-icon {\n    margin-right: 5px;\n}\n.note-editor.note-frame .note-status-output .alert-success,\n.note-editor.note-airframe .note-status-output .alert-success {\n    color: #3c763d !important;\n    background-color: #dff0d8 !important;\n}\n.note-editor.note-frame .note-status-output .alert-info,\n.note-editor.note-airframe .note-status-output .alert-info {\n    color: #31708f !important;\n    background-color: #d9edf7 !important;\n}\n.note-editor.note-frame .note-status-output .alert-warning,\n.note-editor.note-airframe .note-status-output .alert-warning {\n    color: #8a6d3b !important;\n    background-color: #fcf8e3 !important;\n}\n.note-editor.note-frame .note-status-output .alert-danger,\n.note-editor.note-airframe .note-status-output .alert-danger {\n    color: #a94442 !important;\n    background-color: #f2dede !important;\n}\n.note-editor.note-frame .note-statusbar,\n.note-editor.note-airframe .note-statusbar {\n    background-color: rgba(128, 128, 128, 0.1137254902);\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame .note-statusbar .note-resizebar,\n.note-editor.note-airframe .note-statusbar .note-resizebar {\n    padding-top: 1px;\n    height: 9px;\n    width: 100%;\n    cursor: ns-resize;\n}\n.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,\n.note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar {\n    width: 20px;\n    margin: 1px auto;\n    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame .note-statusbar.locked .note-resizebar,\n.note-editor.note-airframe .note-statusbar.locked .note-resizebar {\n    cursor: default;\n}\n.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar,\n.note-editor.note-airframe .note-statusbar.locked .note-resizebar .note-icon-bar {\n    display: none;\n}\n.note-editor.note-frame .note-placeholder,\n.note-editor.note-airframe .note-placeholder {\n    padding: 10px;\n}\n\n.note-editor.note-airframe {\n    border: 0;\n}\n.note-editor.note-airframe .note-editing-area .note-editable {\n    padding: 0;\n}\n\n/* Popover\n ------------------------------------------ */\n.note-popover.popover {\n    display: none;\n    max-width: none;\n}\n.note-popover.popover .popover-content a {\n    display: inline-block;\n    max-width: 200px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    vertical-align: middle;\n}\n.note-popover.popover .arrow {\n    left: 20px !important;\n}\n\n/* Popover and Toolbar (Button container)\n ------------------------------------------ */\n.note-toolbar {\n    position: relative;\n}\n\n.note-popover .popover-content, .note-editor .note-toolbar {\n    margin: 0;\n    padding: 0 0 5px 5px;\n}\n.note-popover .popover-content > .note-btn-group, .note-editor .note-toolbar > .note-btn-group {\n    margin-top: 5px;\n    margin-left: 0;\n    margin-right: 5px;\n}\n.note-popover .popover-content .note-btn-group .note-table, .note-editor .note-toolbar .note-btn-group .note-table {\n    min-width: 0;\n    padding: 5px;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker {\n    font-size: 18px;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher {\n    position: absolute !important;\n    z-index: 3;\n    width: 10em;\n    height: 10em;\n    cursor: pointer;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted {\n    position: relative !important;\n    z-index: 1;\n    width: 5em;\n    height: 5em;\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted {\n    position: absolute !important;\n    z-index: 2;\n    width: 1em;\n    height: 1em;\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n}\n.note-popover .popover-content .note-style .dropdown-style blockquote, .note-popover .popover-content .note-style .dropdown-style pre, .note-editor .note-toolbar .note-style .dropdown-style blockquote, .note-editor .note-toolbar .note-style .dropdown-style pre {\n    margin: 0;\n    padding: 5px 10px;\n}\n.note-popover .popover-content .note-style .dropdown-style h1, .note-popover .popover-content .note-style .dropdown-style h2, .note-popover .popover-content .note-style .dropdown-style h3, .note-popover .popover-content .note-style .dropdown-style h4, .note-popover .popover-content .note-style .dropdown-style h5, .note-popover .popover-content .note-style .dropdown-style h6, .note-popover .popover-content .note-style .dropdown-style p, .note-editor .note-toolbar .note-style .dropdown-style h1, .note-editor .note-toolbar .note-style .dropdown-style h2, .note-editor .note-toolbar .note-style .dropdown-style h3, .note-editor .note-toolbar .note-style .dropdown-style h4, .note-editor .note-toolbar .note-style .dropdown-style h5, .note-editor .note-toolbar .note-style .dropdown-style h6, .note-editor .note-toolbar .note-style .dropdown-style p {\n    margin: 0;\n    padding: 0;\n}\n.note-popover .popover-content .note-color-all .note-dropdown-menu, .note-editor .note-toolbar .note-color-all .note-dropdown-menu {\n    min-width: 337px;\n}\n.note-popover .popover-content .note-color .dropdown-toggle, .note-editor .note-toolbar .note-color .dropdown-toggle {\n    width: 20px;\n    padding-left: 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette {\n    display: inline-block;\n    margin: 0;\n    width: 160px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette:first-child, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette:first-child {\n    margin: 0 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title {\n    font-size: 12px;\n    margin: 2px 7px;\n    text-align: center;\n    border-bottom: 1px solid #eee;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset,\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select {\n    font-size: 11px;\n    margin: 3px;\n    padding: 0 3px;\n    cursor: pointer;\n    width: 100%;\n    border-radius: 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover {\n    background: #eee;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-row, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row {\n    height: 20px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select-btn {\n    display: none;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn {\n    border: 1px solid #eee;\n}\n.note-popover .popover-content .note-para .note-dropdown-menu, .note-editor .note-toolbar .note-para .note-dropdown-menu {\n    min-width: 228px;\n    padding: 5px;\n}\n.note-popover .popover-content .note-para .note-dropdown-menu > div + div, .note-editor .note-toolbar .note-para .note-dropdown-menu > div + div {\n    margin-left: 5px;\n}\n.note-popover .popover-content .note-dropdown-menu, .note-editor .note-toolbar .note-dropdown-menu {\n    min-width: 160px;\n}\n.note-popover .popover-content .note-dropdown-menu.right, .note-editor .note-toolbar .note-dropdown-menu.right {\n    right: 0;\n    left: auto;\n}\n.note-popover .popover-content .note-dropdown-menu.right::before, .note-editor .note-toolbar .note-dropdown-menu.right::before {\n    right: 9px;\n    left: auto !important;\n}\n.note-popover .popover-content .note-dropdown-menu.right::after, .note-editor .note-toolbar .note-dropdown-menu.right::after {\n    right: 10px;\n    left: auto !important;\n}\n.note-popover .popover-content .note-dropdown-menu.note-check a i, .note-editor .note-toolbar .note-dropdown-menu.note-check a i {\n    color: deepskyblue;\n    visibility: hidden;\n}\n.note-popover .popover-content .note-dropdown-menu.note-check a.checked i, .note-editor .note-toolbar .note-dropdown-menu.note-check a.checked i {\n    visibility: visible;\n}\n.note-popover .popover-content .note-fontsize-10, .note-editor .note-toolbar .note-fontsize-10 {\n    font-size: 10px;\n}\n.note-popover .popover-content .note-color-palette, .note-editor .note-toolbar .note-color-palette {\n    line-height: 1;\n}\n.note-popover .popover-content .note-color-palette div .note-color-btn, .note-editor .note-toolbar .note-color-palette div .note-color-btn {\n    width: 20px;\n    height: 20px;\n    padding: 0;\n    margin: 0;\n    border: 0;\n    border-radius: 0;\n}\n.note-popover .popover-content .note-color-palette div .note-color-btn:hover, .note-editor .note-toolbar .note-color-palette div .note-color-btn:hover {\n    transform: scale(1.2);\n    transition: all 0.2s;\n}\n\n/* Dialog\n ------------------------------------------ */\n.note-modal .modal-dialog {\n    outline: 0;\n    border-radius: 5px;\n    box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n}\n.note-modal .form-group {\n    margin-left: 0;\n    margin-right: 0;\n}\n.note-modal .note-modal-form {\n    margin: 0;\n}\n.note-modal .note-image-dialog .note-dropzone {\n    min-height: 100px;\n    font-size: 30px;\n    line-height: 4;\n    color: lightgray;\n    text-align: center;\n    border: 4px dashed lightgray;\n    margin-bottom: 10px;\n}\n@-moz-document url-prefix() {\n    .note-modal .note-image-input {\n        height: auto;\n    }\n}\n\n/* Placeholder\n ------------------------------------------ */\n.note-placeholder {\n    position: absolute;\n    display: none;\n    color: gray;\n}\n\n/* Handle\n ------------------------------------------ */\n.note-handle .note-control-selection {\n    position: absolute;\n    display: none;\n    border: 1px solid #000;\n}\n.note-handle .note-control-selection > div {\n    position: absolute;\n}\n.note-handle .note-control-selection .note-control-selection-bg {\n    width: 100%;\n    height: 100%;\n    background-color: #000;\n    -webkit-opacity: 0.3;\n    -khtml-opacity: 0.3;\n    -moz-opacity: 0.3;\n    opacity: 0.3;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=30);\n    filter: alpha(opacity=30);\n}\n.note-handle .note-control-selection .note-control-handle, .note-handle .note-control-selection .note-control-sizing, .note-handle .note-control-selection .note-control-holder {\n    width: 7px;\n    height: 7px;\n    border: 1px solid #000;\n}\n.note-handle .note-control-selection .note-control-sizing {\n    background-color: #000;\n}\n.note-handle .note-control-selection .note-control-nw {\n    top: -5px;\n    left: -5px;\n    border-right: none;\n    border-bottom: none;\n}\n.note-handle .note-control-selection .note-control-ne {\n    top: -5px;\n    right: -5px;\n    border-bottom: none;\n    border-left: none;\n}\n.note-handle .note-control-selection .note-control-sw {\n    bottom: -5px;\n    left: -5px;\n    border-top: none;\n    border-right: none;\n}\n.note-handle .note-control-selection .note-control-se {\n    right: -5px;\n    bottom: -5px;\n    cursor: se-resize;\n}\n.note-handle .note-control-selection .note-control-se.note-control-holder {\n    cursor: default;\n    border-top: none;\n    border-left: none;\n}\n.note-handle .note-control-selection .note-control-selection-info {\n    right: 0;\n    bottom: 0;\n    padding: 5px;\n    margin: 5px;\n    color: #fff;\n    background-color: #000;\n    font-size: 12px;\n    border-radius: 5px;\n    -webkit-opacity: 0.7;\n    -khtml-opacity: 0.7;\n    -moz-opacity: 0.7;\n    opacity: 0.7;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);\n    filter: alpha(opacity=70);\n}\n\n.note-hint-popover {\n    min-width: 100px;\n    padding: 2px;\n}\n.note-hint-popover .popover-content {\n    padding: 3px;\n    max-height: 150px;\n    overflow: auto;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item {\n    display: block !important;\n    padding: 3px;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item.active, .note-hint-popover .popover-content .note-hint-group .note-hint-item:hover {\n    display: block;\n    clear: both;\n    font-weight: 400;\n    line-height: 1.4;\n    color: white;\n    white-space: nowrap;\n    text-decoration: none;\n    background-color: #428bca;\n    outline: 0;\n    cursor: pointer;\n}\n\n/* Handle\n ------------------------------------------ */\nhtml .note-fullscreen-body, body .note-fullscreen-body {\n    overflow: hidden !important;\n}\n\n.note-editable ul li, .note-editable ol li {\n    list-style-position: inside;\n}\n\n.note-toolbar {\n    background: rgba(128, 128, 128, 0.1137254902);\n}\n\n.note-btn-group .note-btn {\n    border-color: rgba(0, 0, 0, 0.1960784314);\n    padding: 0.28rem 0.65rem;\n    font-size: 13px;\n}\n\n/*# sourceMappingURL=summernote-bs4.css.map*/"
  },
  {
    "path": "public/vendor/summernote/0.9.1/summernote-bs4.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, (__WEBPACK_EXTERNAL_MODULE__8938__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 7000:\n/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {\n\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8938);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n(jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) = (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) || {\n  lang: {}\n};\njquery__WEBPACK_IMPORTED_MODULE_0___default().extend(true, (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote).lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit'\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original'\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion, Youku, Peertube)'\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window'\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table'\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule'\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list'\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View'\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full'\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select'\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys'\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog'\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo'\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters'\n    },\n    output: {\n      noSelection: 'No Selection Made!'\n    }\n  }\n});\n\n/***/ }),\n\n/***/ 8938:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__8938__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_ = __webpack_require__(8938);\nvar external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_);\n// EXTERNAL MODULE: ./src/lang/summernote-en-US.js\nvar summernote_en_US = __webpack_require__(7000);\n;// CONCATENATED MODULE: ./src/js/core/env.js\n\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nvar genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\nfunction validFontName(fontName) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().inArray(fontName.toLowerCase(), genericFontFamilies) === -1 ? \"'\".concat(fontName, \"'\") : fontName;\n}\nfunction createIsFontInstalledFunc() {\n  var testText = \"mw\";\n  var fontSize = \"20px\";\n  var canvasWidth = 40;\n  var canvasHeight = 20;\n  var canvas = document.createElement(\"canvas\");\n  var context = canvas.getContext(\"2d\", {\n    willReadFrequently: true\n  });\n  canvas.width = canvasWidth;\n  canvas.height = canvasHeight;\n  context.textAlign = \"center\";\n  context.fillStyle = \"black\";\n  context.textBaseline = \"middle\";\n  function getPxInfo(font, testFontName) {\n    context.clearRect(0, 0, canvasWidth, canvasHeight);\n    context.font = fontSize + ' ' + validFontName(font) + ', \"' + testFontName + '\"';\n    context.fillText(testText, canvasWidth / 2, canvasHeight / 2);\n    // Get pixel information\n    var pxInfo = context.getImageData(0, 0, canvasWidth, canvasHeight).data;\n    return pxInfo.join(\"\");\n  }\n  return function (fontName) {\n    var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n    var testInfo = getPxInfo(testFontName, testFontName);\n    var fontInfo = getPxInfo(fontName, testFontName);\n    return testInfo !== fontInfo;\n  };\n}\nvar userAgent = navigator.userAgent;\nvar isMSIE = /MSIE|Trident/i.test(userAgent);\nvar browserVersion;\nif (isMSIE) {\n  var matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\nvar isEdge = /Edge\\/\\d+/.test(userAgent);\nvar isSupportTouch = 'ontouchstart' in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nvar inputEventName = isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\n/* harmony default export */ const env = ({\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE: isMSIE,\n  isEdge: isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && !/chrome/i.test(userAgent),\n  browserVersion: browserVersion,\n  isSupportTouch: isSupportTouch,\n  isFontInstalled: createIsFontInstalledFunc(),\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName: inputEventName,\n  genericFontFamilies: genericFontFamilies,\n  validFontName: validFontName\n});\n;// CONCATENATED MODULE: ./src/js/core/func.js\n\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n  return function (itemB) {\n    return itemA === itemB;\n  };\n}\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\nfunction peq2(propName) {\n  return function (itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\nfunction ok() {\n  return true;\n}\nfunction fail() {\n  return false;\n}\nfunction not(f) {\n  return function () {\n    return !f.apply(f, arguments);\n  };\n}\nfunction and(fA, fB) {\n  return function (item) {\n    return fA(item) && fB(item);\n  };\n}\nfunction func_self(a) {\n  return a;\n}\nfunction invoke(obj, method) {\n  return function () {\n    return obj[method].apply(obj, arguments);\n  };\n}\nvar idCounter = 0;\n\n/**\n * reset globally-unique id\n *\n */\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n  var $document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n  var inverted = {};\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n  return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function (name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n    var later = function later() {\n      timeout = null;\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\nfunction isValidUrl(url) {\n  var expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n/* harmony default export */ const func = ({\n  eq: eq,\n  eq2: eq2,\n  peq2: peq2,\n  ok: ok,\n  fail: fail,\n  self: func_self,\n  not: not,\n  and: and,\n  invoke: invoke,\n  resetUniqueId: resetUniqueId,\n  uniqueId: uniqueId,\n  rect2bnd: rect2bnd,\n  invertObject: invertObject,\n  namespaceToCamel: namespaceToCamel,\n  debounce: debounce,\n  isValidUrl: isValidUrl\n});\n;// CONCATENATED MODULE: ./src/js/core/lists.js\n\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n  return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n  return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n  return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    var item = array[idx];\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction lists_all(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n  return false;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function (memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n  var result = [];\n  var length = collection.length;\n  var idx = -1;\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n  return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n  return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n  if (!array.length) {\n    return [];\n  }\n  var aTail = tail(array);\n  return aTail.reduce(function (memo, v) {\n    var aLast = last(memo);\n    if (fn(last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n    return memo;\n  }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n  var aResult = [];\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) {\n      aResult.push(array[idx]);\n    }\n  }\n  return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n  var results = [];\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n  return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n  return null;\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n  return null;\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\n/* harmony default export */ const lists = ({\n  head: head,\n  last: last,\n  initial: initial,\n  tail: tail,\n  prev: prev,\n  next: next,\n  find: find,\n  contains: contains,\n  all: lists_all,\n  sum: sum,\n  from: from,\n  isEmpty: isEmpty,\n  clusterBy: clusterBy,\n  compact: compact,\n  unique: unique\n});\n;// CONCATENATED MODULE: ./src/js/core/dom.js\n\n\n\n\nvar NBSP_CHAR = String.fromCharCode(160);\nvar ZERO_WIDTH_NBSP_CHAR = \"\\uFEFF\";\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function (node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  }\n\n  // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\nvar isPre = makePredByNodeName('PRE');\nvar isLi = makePredByNodeName('LI');\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\nvar isTable = makePredByNodeName('TABLE');\nvar isData = makePredByNodeName('DATA');\nfunction isInline(node) {\n  return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node);\n}\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\nvar isHr = makePredByNodeName('HR');\nfunction isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\nvar isBlockquote = makePredByNodeName('BLOCKQUOTE');\nfunction isBodyContainer(node) {\n  return isCell(node) || isBlockquote(node) || isEditable(node);\n}\nvar isAnchor = makePredByNodeName('A');\nfunction isParaInline(node) {\n  return isInline(node) && !!ancestor(node, isPara);\n}\nfunction isBodyInline(node) {\n  return isInline(node) && !ancestor(node, isPara);\n}\nvar isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n  var siblings = [];\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n  siblings.push(node);\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n  return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\nvar blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n  if (node) {\n    return node.childNodes.length;\n  }\n  return 0;\n}\n\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while (node = node.firstElementChild);\n  return dom_isEmpty(node);\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction dom_isEmpty(node) {\n  var len = nodeLength(node);\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n  return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) {\n      return node;\n    }\n    if (isEditable(node)) {\n      break;\n    }\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n  while (node) {\n    if (nodeLength(node) !== 1) {\n      break;\n    }\n    if (pred(node)) {\n      return node;\n    }\n    if (isEditable(node)) {\n      break;\n    }\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n  var ancestors = [];\n  ancestor(node, function (el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n    return pred(el);\n  });\n  return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n  var ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n  var ancestors = listAncestor(nodeA);\n  for (var n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n  return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n  var descendants = [];\n  pred = pred || func.ok;\n\n  // start DFS(depth first search) with node\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n    for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n  return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n  var parent = node.parentNode;\n  var wrapper = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<' + wrapperName + '>')[0];\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n  return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n  var next = preceding.nextSibling;\n  var parent = preceding.parentNode;\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n  return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild, isSkipPaddingBlankHTML) {\n  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(aChild, function (idx, child) {\n    // special case: appending a pure UL/OL to a LI element creates inaccessible LI element\n    // e.g. press enter in last LI which has UL/OL-subelements\n    // Therefore, if current node is LI element with no child nodes (text-node) and appending a list, add a br before\n    if (!isSkipPaddingBlankHTML && isLi(node) && node.firstChild === null && isList(child)) {\n      node.appendChild(create(\"br\"));\n    }\n    node.appendChild(child);\n  });\n  return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (position(node) !== 0) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n  while (node && node !== ancestor) {\n    if (position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n  var offset = 0;\n  while (node = node.previousSibling) {\n    offset += 1;\n  }\n  return offset;\n}\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n  var node;\n  var offset;\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    node = point.node.parentNode;\n    offset = position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n  var node, offset;\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    var nextTextNode = getNextTextNode(point.node);\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/**\n * Find next boundaryPoint for preorder / depth first traversal of the DOM\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  var node,\n    offset = 0;\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    node = point.node.parentNode;\n    offset = position(point.node) + 1;\n\n    // if parent node is editable,  return current node's sibling node.\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/*\n* returns the next Text node index or 0 if not found.\n*/\nfunction getNextTextNode(actual) {\n  if (!actual.nextSibling) return undefined;\n  if (actual.parent !== actual.nextSibling.parent) return undefined;\n  if (isText(actual.nextSibling)) return actual.nextSibling;else return getNextTextNode(actual.nextSibling);\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || dom_isEmpty(point.node)) {\n    return true;\n  }\n  var leftNode = point.node.childNodes[point.offset - 1];\n  var rightNode = point.node.childNodes[point.offset];\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode)) || isTable(rightNode)) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n    point = prevPoint(point);\n  }\n  return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n    point = nextPoint(point);\n  }\n  return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && ch !== ' ' && ch !== NBSP_CHAR;\n}\n\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n\n/**\n * @method walkPoint - preorder / depth first traversal of the DOM\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  var point = startPoint;\n  while (point && point.node) {\n    handler(point);\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n    var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n  var ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n  var current = ancestor;\n  for (var i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n  return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n  var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  var isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  }\n\n  // edge case\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  }\n\n  // split #text\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    var childNode = point.node.childNodes[point.offset];\n    var childNodes = listNext(childNode);\n    var clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, childNodes);\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n    if (isDiscardEmptySplits) {\n      if (dom_isEmpty(point.node)) {\n        remove(point.node);\n      }\n      if (dom_isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n    return clone;\n  }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  var ancestors = listAncestor(point.node, func.eq(root));\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n  // Filter elements with sibling elements\n  if (ancestors.length > 2) {\n    var domList = ancestors.slice(0, ancestors.length - 1);\n    var ifHasNextSibling = domList.find(function (item) {\n      return item.nextSibling;\n    });\n    if (ifHasNextSibling && point.offset != 0 && isRightEdgePoint(point)) {\n      var nestSibling = ifHasNextSibling.nextSibling;\n      var textNode;\n      if (nestSibling.nodeType == 1) {\n        textNode = nestSibling.childNodes[0];\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0\n        };\n      } else if (nestSibling.nodeType == 3 && !nestSibling.data.match(/[\\n\\r]/g)) {\n        textNode = nestSibling;\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0\n        };\n      }\n    }\n  }\n  return ancestors.reduce(function (node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n    return splitNode({\n      node: parent,\n      offset: node ? position(node) : nodeLength(parent)\n    }, options);\n  });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  var pred = isInline ? isPara : isBodyContainer;\n  var ancestors = listAncestor(point.node, pred);\n  var topAncestor = lists.last(ancestors) || point.node;\n  var splitRoot, container;\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  }\n\n  // if splitRoot is exists, split with splitTree\n  var pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline\n  });\n\n  // if container is point.node, find pivot with point.offset\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n  return {\n    rightNode: pivot,\n    container: container\n  };\n}\nfunction create(nodeName) {\n  return document.createElement(nodeName);\n}\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) {\n    return;\n  }\n  if (node.removeNode) {\n    return node.removeNode(isRemoveChild);\n  }\n  var parent = node.parentNode;\n  if (!isRemoveChild) {\n    var nodes = [];\n    for (var i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n    for (var _i = 0, _len = nodes.length; _i < _len; _i++) {\n      parent.insertBefore(nodes[_i], node);\n    }\n  }\n  parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n    var parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n  var newNode = create(nodeName);\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n  return newNode;\n}\nvar isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n  var val = isTextarea($node[0]) ? $node.val() : $node.html();\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n  return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n  var markup = value($node);\n  if (isNewlineOnBlock) {\n    var regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function (match, endSlash, name) {\n      name = name.toUpperCase();\n      var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash;\n      var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n      return match + (isEndOfInlineContainer || isBlockNode ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n  return markup;\n}\nfunction posFromPlaceholder(placeholder) {\n  var $placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(placeholder);\n  var pos = $placeholder.offset();\n  var height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height\n  };\n}\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.on(key, events[key]);\n  });\n}\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.off(key, events[key]);\n  });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n/* harmony default export */ const dom = ({\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR: NBSP_CHAR,\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,\n  /** @property {String} blank */\n  blank: blankHTML,\n  /** @property {String} emptyPara */\n  emptyPara: \"<p>\".concat(blankHTML, \"</p>\"),\n  makePredByNodeName: makePredByNodeName,\n  isEditable: isEditable,\n  isControlSizing: isControlSizing,\n  isText: isText,\n  isElement: isElement,\n  isVoid: isVoid,\n  isPara: isPara,\n  isPurePara: isPurePara,\n  isHeading: isHeading,\n  isInline: isInline,\n  isBlock: func.not(isInline),\n  isBodyInline: isBodyInline,\n  isBody: isBody,\n  isParaInline: isParaInline,\n  isPre: isPre,\n  isList: isList,\n  isTable: isTable,\n  isData: isData,\n  isCell: isCell,\n  isBlockquote: isBlockquote,\n  isBodyContainer: isBodyContainer,\n  isAnchor: isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi: isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea: isTextarea,\n  deepestChildIsEmpty: deepestChildIsEmpty,\n  isEmpty: dom_isEmpty,\n  isEmptyAnchor: func.and(isAnchor, dom_isEmpty),\n  isClosestSibling: isClosestSibling,\n  withClosestSiblings: withClosestSiblings,\n  nodeLength: nodeLength,\n  isLeftEdgePoint: isLeftEdgePoint,\n  isRightEdgePoint: isRightEdgePoint,\n  isEdgePoint: isEdgePoint,\n  isLeftEdgeOf: isLeftEdgeOf,\n  isRightEdgeOf: isRightEdgeOf,\n  isLeftEdgePointOf: isLeftEdgePointOf,\n  isRightEdgePointOf: isRightEdgePointOf,\n  prevPoint: prevPoint,\n  nextPoint: nextPoint,\n  nextPointWithEmptyNode: nextPointWithEmptyNode,\n  isSamePoint: isSamePoint,\n  isVisiblePoint: isVisiblePoint,\n  prevPointUntil: prevPointUntil,\n  nextPointUntil: nextPointUntil,\n  isCharPoint: isCharPoint,\n  isSpacePoint: isSpacePoint,\n  walkPoint: walkPoint,\n  ancestor: ancestor,\n  singleChildAncestor: singleChildAncestor,\n  listAncestor: listAncestor,\n  lastAncestor: lastAncestor,\n  listNext: listNext,\n  listPrev: listPrev,\n  listDescendant: listDescendant,\n  commonAncestor: commonAncestor,\n  wrap: wrap,\n  insertAfter: insertAfter,\n  appendChildNodes: appendChildNodes,\n  position: position,\n  hasChildren: hasChildren,\n  makeOffsetPath: makeOffsetPath,\n  fromOffsetPath: fromOffsetPath,\n  splitTree: splitTree,\n  splitPoint: splitPoint,\n  create: create,\n  createText: createText,\n  remove: remove,\n  removeWhile: removeWhile,\n  replace: replace,\n  html: html,\n  value: value,\n  posFromPlaceholder: posFromPlaceholder,\n  attachEvents: attachEvents,\n  detachEvents: detachEvents,\n  isCustomStyleTag: isCustomStyleTag\n});\n;// CONCATENATED MODULE: ./src/js/Context.js\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Context = /*#__PURE__*/function () {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  function Context($note, options) {\n    _classCallCheck(this, Context);\n    this.$note = $note;\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, options);\n\n    // init ui with options\n    (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().summernote.ui_template(this.options);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.initialize();\n  }\n\n  /**\n   * create layout and initialize modules and other resources\n   */\n  return _createClass(Context, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.layoutInfo = this.ui.createLayout(this.$note);\n      this._initialize();\n      this.$note.hide();\n      return this;\n    }\n\n    /**\n     * destroy modules and other resources and remove layout\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._destroy();\n      this.$note.removeData('summernote');\n      this.ui.removeLayout(this.$note, this.layoutInfo);\n    }\n\n    /**\n     * destory modules and other resources and initialize it again\n     */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var disabled = this.isDisabled();\n      this.code(dom.emptyPara);\n      this._destroy();\n      this._initialize();\n      if (disabled) {\n        this.disable();\n      }\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\n      var _this = this;\n      // set own id\n      this.options.id = func.uniqueId(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now());\n      // set default container for tooltips, popovers, and dialogs\n      this.options.container = this.options.container || this.layoutInfo.editor;\n\n      // add optional buttons\n      var buttons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.buttons);\n      Object.keys(buttons).forEach(function (key) {\n        _this.memo('button.' + key, buttons[key]);\n      });\n      var modules = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.modules, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.plugins || {});\n\n      // add and initialize modules\n      Object.keys(modules).forEach(function (key) {\n        _this.module(key, modules[key], true);\n      });\n      Object.keys(this.modules).forEach(function (key) {\n        _this.initializeModule(key);\n      });\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      var _this2 = this;\n      // destroy modules with reversed order\n      Object.keys(this.modules).reverse().forEach(function (key) {\n        _this2.removeModule(key);\n      });\n      Object.keys(this.memos).forEach(function (key) {\n        _this2.removeMemo(key);\n      });\n      // trigger custom onDestroy callback\n      this.triggerEvent('destroy', this);\n    }\n  }, {\n    key: \"code\",\n    value: function code(html) {\n      var isActivated = this.invoke('codeview.isActivated');\n      if (html === undefined) {\n        this.invoke('codeview.sync');\n        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n      } else {\n        if (isActivated) {\n          this.invoke('codeview.sync', html);\n        } else {\n          this.layoutInfo.editable.html(html);\n        }\n        this.$note.val(html);\n        this.triggerEvent('change', html, this.layoutInfo.editable);\n      }\n    }\n  }, {\n    key: \"isDisabled\",\n    value: function isDisabled() {\n      return this.layoutInfo.editable.attr('contenteditable') === 'false';\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      this.layoutInfo.editable.attr('contenteditable', true);\n      this.invoke('toolbar.activate', true);\n      this.triggerEvent('disable', false);\n      this.options.editing = true;\n    }\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      // close codeview if codeview is opend\n      if (this.invoke('codeview.isActivated')) {\n        this.invoke('codeview.deactivate');\n      }\n      this.layoutInfo.editable.attr('contenteditable', false);\n      this.options.editing = false;\n      this.invoke('toolbar.deactivate', true);\n      this.triggerEvent('disable', true);\n    }\n  }, {\n    key: \"triggerEvent\",\n    value: function triggerEvent() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n      if (callback) {\n        callback.apply(this.$note[0], args);\n      }\n      this.$note.trigger('summernote.' + namespace, args);\n    }\n  }, {\n    key: \"initializeModule\",\n    value: function initializeModule(key) {\n      var module = this.modules[key];\n      module.shouldInitialize = module.shouldInitialize || func.ok;\n      if (!module.shouldInitialize()) {\n        return;\n      }\n\n      // initialize module\n      if (module.initialize) {\n        module.initialize();\n      }\n\n      // attach events\n      if (module.events) {\n        dom.attachEvents(this.$note, module.events);\n      }\n    }\n  }, {\n    key: \"module\",\n    value: function module(key, ModuleClass, withoutIntialize) {\n      if (arguments.length === 1) {\n        return this.modules[key];\n      }\n      this.modules[key] = new ModuleClass(this);\n      if (!withoutIntialize) {\n        this.initializeModule(key);\n      }\n    }\n  }, {\n    key: \"removeModule\",\n    value: function removeModule(key) {\n      var module = this.modules[key];\n      if (module.shouldInitialize()) {\n        if (module.events) {\n          dom.detachEvents(this.$note, module.events);\n        }\n        if (module.destroy) {\n          module.destroy();\n        }\n      }\n      delete this.modules[key];\n    }\n  }, {\n    key: \"memo\",\n    value: function memo(key, obj) {\n      if (arguments.length === 1) {\n        return this.memos[key];\n      }\n      this.memos[key] = obj;\n    }\n  }, {\n    key: \"removeMemo\",\n    value: function removeMemo(key) {\n      if (this.memos[key] && this.memos[key].destroy) {\n        this.memos[key].destroy();\n      }\n      delete this.memos[key];\n    }\n\n    /**\n     * Some buttons need to change their visual style immediately once they get pressed\n     */\n  }, {\n    key: \"createInvokeHandlerAndUpdateState\",\n    value: function createInvokeHandlerAndUpdateState(namespace, value) {\n      var _this3 = this;\n      return function (event) {\n        _this3.createInvokeHandler(namespace, value)(event);\n        _this3.invoke('buttons.updateCurrentStyle');\n      };\n    }\n  }, {\n    key: \"createInvokeHandler\",\n    value: function createInvokeHandler(namespace, value) {\n      var _this4 = this;\n      return function (event) {\n        event.preventDefault();\n        var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n        _this4.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n      };\n    }\n  }, {\n    key: \"invoke\",\n    value: function invoke() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var splits = namespace.split('.');\n      var hasSeparator = splits.length > 1;\n      var moduleName = hasSeparator && lists.head(splits);\n      var methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n      var module = this.modules[moduleName || 'editor'];\n      if (!moduleName && this[methodName]) {\n        return this[methodName].apply(this, args);\n      } else if (module && module[methodName] && module.shouldInitialize()) {\n        return module[methodName].apply(module, args);\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/summernote.js\nfunction summernote_typeof(o) { \"@babel/helpers - typeof\"; return summernote_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, summernote_typeof(o); }\n\n\n\n\nexternal_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function summernote() {\n    var type = summernote_typeof(lists.head(arguments));\n    var isExternalAPICalled = type === 'string';\n    var hasInitOptions = type === 'object';\n    var options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n    // Update options\n    options.langInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'], (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang[options.lang]);\n    options.icons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n    this.each(function (idx, note) {\n      var $note = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(note);\n      if (!$note.data('summernote')) {\n        var context = new Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n    var $note = this.first();\n    if ($note.length) {\n      var context = $note.data('summernote');\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n    return this;\n  }\n});\n;// CONCATENATED MODULE: ./src/js/core/range.js\nfunction range_typeof(o) { \"@babel/helpers - typeof\"; return range_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, range_typeof(o); }\nfunction range_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction range_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, range_toPropertyKey(o.key), o); } }\nfunction range_createClass(e, r, t) { return r && range_defineProperties(e.prototype, r), t && range_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction range_toPropertyKey(t) { var i = range_toPrimitive(t, \"string\"); return \"symbol\" == range_typeof(i) ? i : i + \"\"; }\nfunction range_toPrimitive(t, r) { if (\"object\" != range_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != range_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n  var container = textRange.parentElement();\n  var offset;\n  var tester = document.body.createTextRange();\n  var prevContainer;\n  var childNodes = lists.from(container.childNodes);\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n    tester.moveToElementText(childNodes[offset]);\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n    prevContainer = childNodes[offset];\n  }\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    var textRangeStart = document.body.createTextRange();\n    var curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n    var pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    var textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    // [workaround] enforce IE to re-reference curTextNode, hack\n    var dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n    container = curTextNode;\n    offset = textCount;\n  }\n  return {\n    cont: container,\n    offset: offset\n  };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n  var textRangeInfo = function textRangeInfo(container, offset) {\n    var node, isCollapseToStart;\n    if (dom.isText(container)) {\n      var prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      var prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n      offset = 0;\n      isCollapseToStart = false;\n    }\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset\n    };\n  };\n  var textRange = document.body.createTextRange();\n  var info = textRangeInfo(point.node, point.offset);\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\nvar WrappedRange = /*#__PURE__*/function () {\n  function WrappedRange(sc, so, ec, eo) {\n    range_classCallCheck(this, WrappedRange);\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo;\n\n    // isOnEditable: judge whether range is on editable or not\n    this.isOnEditable = this.makeIsOn(dom.isEditable);\n    // isOnList: judge whether range is on list node or not\n    this.isOnList = this.makeIsOn(dom.isList);\n    // isOnAnchor: judge whether range is on anchor node or not\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n    // isOnCell: judge whether range is on cell node or not\n    this.isOnCell = this.makeIsOn(dom.isCell);\n    // isOnData: judge whether range is on data node or not\n    this.isOnData = this.makeIsOn(dom.isData);\n  }\n\n  // nativeRange: get nativeRange from sc, so, ec, eo\n  return range_createClass(WrappedRange, [{\n    key: \"nativeRange\",\n    value: function nativeRange() {\n      if (env.isW3CRangeSupport) {\n        var w3cRange = document.createRange();\n        w3cRange.setStart(this.sc, this.so);\n        w3cRange.setEnd(this.ec, this.eo);\n        return w3cRange;\n      } else {\n        var textRange = pointToTextRange({\n          node: this.sc,\n          offset: this.so\n        });\n        textRange.setEndPoint('EndToEnd', pointToTextRange({\n          node: this.ec,\n          offset: this.eo\n        }));\n        return textRange;\n      }\n    }\n  }, {\n    key: \"getPoints\",\n    value: function getPoints() {\n      return {\n        sc: this.sc,\n        so: this.so,\n        ec: this.ec,\n        eo: this.eo\n      };\n    }\n  }, {\n    key: \"getStartPoint\",\n    value: function getStartPoint() {\n      return {\n        node: this.sc,\n        offset: this.so\n      };\n    }\n  }, {\n    key: \"getEndPoint\",\n    value: function getEndPoint() {\n      return {\n        node: this.ec,\n        offset: this.eo\n      };\n    }\n\n    /**\n     * select update visible range\n     */\n  }, {\n    key: \"select\",\n    value: function select() {\n      var nativeRng = this.nativeRange();\n      if (env.isW3CRangeSupport) {\n        var selection = document.getSelection();\n        if (selection.rangeCount > 0) {\n          selection.removeAllRanges();\n        }\n        selection.addRange(nativeRng);\n      } else {\n        nativeRng.select();\n      }\n      return this;\n    }\n\n    /**\n     * Moves the scrollbar to start container(sc) of current range\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"scrollIntoView\",\n    value: function scrollIntoView(container) {\n      var height = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(container).height();\n      if (container.scrollTop + height < this.sc.offsetTop) {\n        container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n      }\n      return this;\n    }\n\n    /**\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"normalize\",\n    value: function normalize() {\n      /**\n       * @param {BoundaryPoint} point\n       * @param {Boolean} isLeftToRight - true: prefer to choose right node\n       *                                - false: prefer to choose left node\n       * @return {BoundaryPoint}\n       */\n      var getVisiblePoint = function getVisiblePoint(point, isLeftToRight) {\n        if (!point) {\n          return point;\n        }\n\n        // Just use the given point [XXX:Adhoc]\n        //  - case 01. if the point is on the middle of the node\n        //  - case 02. if the point is on the right edge and prefer to choose left node\n        //  - case 03. if the point is on the left edge and prefer to choose right node\n        //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n        //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n        //  - case 06. if the point is on the block node and there is no children\n        if (dom.isVisiblePoint(point)) {\n          if (!dom.isEdgePoint(point) || dom.isRightEdgePoint(point) && !isLeftToRight || dom.isLeftEdgePoint(point) && isLeftToRight || dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling) || dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling) || dom.isBlock(point.node) && dom.isEmpty(point.node)) {\n            return point;\n          }\n        }\n\n        // point on block's edge\n        var block = dom.ancestor(point.node, dom.isBlock);\n        var hasRightNode = false;\n        if (!hasRightNode) {\n          var prevPoint = dom.prevPoint(point) || {\n            node: null\n          };\n          hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n        }\n        var hasLeftNode = false;\n        if (!hasLeftNode) {\n          var _nextPoint = dom.nextPoint(point) || {\n            node: null\n          };\n          hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(_nextPoint.node)) && isLeftToRight;\n        }\n        if (hasRightNode || hasLeftNode) {\n          // returns point already on visible point\n          if (dom.isVisiblePoint(point)) {\n            return point;\n          }\n          // reverse direction\n          isLeftToRight = !isLeftToRight;\n        }\n        var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n        return nextPoint || point;\n      };\n      var endPoint = getVisiblePoint(this.getEndPoint(), false);\n      var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns matched nodes on range\n     *\n     * @param {Function} [pred] - predicate function\n     * @param {Object} [options]\n     * @param {Boolean} [options.includeAncestor]\n     * @param {Boolean} [options.fullyContains]\n     * @return {Node[]}\n     */\n  }, {\n    key: \"nodes\",\n    value: function nodes(pred, options) {\n      pred = pred || func.ok;\n      var includeAncestor = options && options.includeAncestor;\n      var fullyContains = options && options.fullyContains;\n\n      // TODO compare points and sort\n      var startPoint = this.getStartPoint();\n      var endPoint = this.getEndPoint();\n      var nodes = [];\n      var leftEdgeNodes = [];\n      dom.walkPoint(startPoint, endPoint, function (point) {\n        if (dom.isEditable(point.node)) {\n          return;\n        }\n        var node;\n        if (fullyContains) {\n          if (dom.isLeftEdgePoint(point)) {\n            leftEdgeNodes.push(point.node);\n          }\n          if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n            node = point.node;\n          }\n        } else if (includeAncestor) {\n          node = dom.ancestor(point.node, pred);\n        } else {\n          node = point.node;\n        }\n        if (node && pred(node)) {\n          nodes.push(node);\n        }\n      }, true);\n      return lists.unique(nodes);\n    }\n\n    /**\n     * returns commonAncestor of range\n     * @return {Element} - commonAncestor\n     */\n  }, {\n    key: \"commonAncestor\",\n    value: function commonAncestor() {\n      return dom.commonAncestor(this.sc, this.ec);\n    }\n\n    /**\n     * returns expanded range by pred\n     *\n     * @param {Function} pred - predicate function\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"expand\",\n    value: function expand(pred) {\n      var startAncestor = dom.ancestor(this.sc, pred);\n      var endAncestor = dom.ancestor(this.ec, pred);\n      if (!startAncestor && !endAncestor) {\n        return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n      }\n      var boundaryPoints = this.getPoints();\n      if (startAncestor) {\n        boundaryPoints.sc = startAncestor;\n        boundaryPoints.so = 0;\n      }\n      if (endAncestor) {\n        boundaryPoints.ec = endAncestor;\n        boundaryPoints.eo = dom.nodeLength(endAncestor);\n      }\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n\n    /**\n     * @param {Boolean} isCollapseToStart\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"collapse\",\n    value: function collapse(isCollapseToStart) {\n      if (isCollapseToStart) {\n        return new WrappedRange(this.sc, this.so, this.sc, this.so);\n      } else {\n        return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n      }\n    }\n\n    /**\n     * splitText on range\n     */\n  }, {\n    key: \"splitText\",\n    value: function splitText() {\n      var isSameContainer = this.sc === this.ec;\n      var boundaryPoints = this.getPoints();\n      if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n        this.ec.splitText(this.eo);\n      }\n      if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n        boundaryPoints.sc = this.sc.splitText(this.so);\n        boundaryPoints.so = 0;\n        if (isSameContainer) {\n          boundaryPoints.ec = boundaryPoints.sc;\n          boundaryPoints.eo = this.eo - this.so;\n        }\n      }\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n\n    /**\n     * delete contents on range\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"deleteContents\",\n    value: function deleteContents() {\n      if (this.isCollapsed()) {\n        return this;\n      }\n      var rng = this.splitText();\n      var nodes = rng.nodes(null, {\n        fullyContains: true\n      });\n\n      // find new cursor point\n      var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {\n        return !lists.contains(nodes, point.node);\n      });\n      var emptyParents = [];\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(nodes, function (idx, node) {\n        // find empty parents\n        var parent = node.parentNode;\n        if (point.node !== parent && dom.nodeLength(parent) === 1) {\n          emptyParents.push(parent);\n        }\n        dom.remove(node, false);\n      });\n\n      // remove empty parents\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyParents, function (idx, node) {\n        dom.remove(node, false);\n      });\n      return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize();\n    }\n\n    /**\n     * makeIsOn: return isOn(pred) function\n     */\n  }, {\n    key: \"makeIsOn\",\n    value: function makeIsOn(pred) {\n      return function () {\n        var ancestor = dom.ancestor(this.sc, pred);\n        return !!ancestor && ancestor === dom.ancestor(this.ec, pred);\n      };\n    }\n\n    /**\n     * @param {Function} pred\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isLeftEdgeOf\",\n    value: function isLeftEdgeOf(pred) {\n      if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n        return false;\n      }\n      var node = dom.ancestor(this.sc, pred);\n      return node && dom.isLeftEdgeOf(this.sc, node);\n    }\n\n    /**\n     * returns whether range was collapsed or not\n     */\n  }, {\n    key: \"isCollapsed\",\n    value: function isCollapsed() {\n      return this.sc === this.ec && this.so === this.eo;\n    }\n\n    /**\n     * wrap inline nodes which children of body with paragraph\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"wrapBodyInlineWithPara\",\n    value: function wrapBodyInlineWithPara() {\n      if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n        this.sc.innerHTML = dom.emptyPara;\n        return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n      }\n\n      /**\n       * [workaround] firefox often create range on not visible point. so normalize here.\n       *  - firefox: |<p>text</p>|\n       *  - chrome: <p>|text|</p>\n       */\n      var rng = this.normalize();\n      if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n        return rng;\n      }\n\n      // find inline top ancestor\n      var topAncestor;\n      if (dom.isInline(rng.sc)) {\n        var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n        topAncestor = lists.last(ancestors);\n        if (!dom.isInline(topAncestor)) {\n          topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n        }\n      } else {\n        topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n      }\n      if (topAncestor) {\n        // siblings not in paragraph\n        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n        // wrap with paragraph\n        if (inlineSiblings.length) {\n          var para = dom.wrap(lists.head(inlineSiblings), 'p');\n          dom.appendChildNodes(para, lists.tail(inlineSiblings));\n        }\n      }\n      return this.normalize();\n    }\n\n    /**\n     * insert node at current cursor\n     *\n     * @param {Node} node\n     * @param {Boolean} doNotInsertPara - default is false, removes added <p> that's added if true\n     * @return {Node}\n     */\n  }, {\n    key: \"insertNode\",\n    value: function insertNode(node) {\n      var doNotInsertPara = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var rng = this;\n      if (dom.isText(node) || dom.isInline(node)) {\n        rng = this.wrapBodyInlineWithPara().deleteContents();\n      }\n      var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n      if (info.rightNode) {\n        info.rightNode.parentNode.insertBefore(node, info.rightNode);\n        if (dom.isEmpty(info.rightNode) && (doNotInsertPara || dom.isPara(node))) {\n          info.rightNode.parentNode.removeChild(info.rightNode);\n        }\n      } else {\n        info.container.appendChild(node);\n      }\n      return node;\n    }\n\n    /**\n     * insert html at current cursor\n     */\n  }, {\n    key: \"pasteHTML\",\n    value: function pasteHTML(markup) {\n      markup = ((markup || '') + '').trim(markup);\n      var contentsContainer = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').html(markup)[0];\n      var childNodes = lists.from(contentsContainer.childNodes);\n\n      // const rng = this.wrapBodyInlineWithPara().deleteContents();\n      var rng = this;\n      var reversed = false;\n      if (rng.so >= 0) {\n        childNodes = childNodes.reverse();\n        reversed = true;\n      }\n      childNodes = childNodes.map(function (childNode) {\n        return rng.insertNode(childNode, !dom.isInline(childNode));\n      });\n      if (reversed) {\n        childNodes = childNodes.reverse();\n      }\n      return childNodes;\n    }\n\n    /**\n     * returns text in range\n     *\n     * @return {String}\n     */\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var nativeRng = this.nativeRange();\n      return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n    }\n\n    /**\n     * returns range for word before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getWordRange\",\n    value: function getWordRange(findAfter) {\n      var endPoint = this.getEndPoint();\n      if (!dom.isCharPoint(endPoint)) {\n        return this;\n      }\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        return !dom.isCharPoint(point);\n      });\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, function (point) {\n          return !dom.isCharPoint(point);\n        });\n      }\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns range for words before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getWordsRange\",\n    value: function getWordsRange(findAfter) {\n      var endPoint = this.getEndPoint();\n      var isNotTextPoint = function isNotTextPoint(point) {\n        return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n      };\n      if (isNotTextPoint(endPoint)) {\n        return this;\n      }\n      var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n      }\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns range for words before cursor that match with a Regex\n     *\n     * example:\n     *  range: 'hi @Peter Pan'\n     *  regex: '/@[a-z ]+/i'\n     *  return range: '@Peter Pan'\n     *\n     * @param {RegExp} [regex]\n     * @return {WrappedRange|null}\n     */\n  }, {\n    key: \"getWordsMatchRange\",\n    value: function getWordsMatchRange(regex) {\n      var endPoint = this.getEndPoint();\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n          return true;\n        }\n        var rng = new WrappedRange(point.node, point.offset, endPoint.node, endPoint.offset);\n        var result = regex.exec(rng.toString());\n        return result && result.index === 0;\n      });\n      var rng = new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n      var text = rng.toString();\n      var result = regex.exec(text);\n      if (result && result[0].length === text.length) {\n        return rng;\n      } else {\n        return null;\n      }\n    }\n\n    /**\n     * create offsetPath bookmark\n     *\n     * @param {Node} editable\n     */\n  }, {\n    key: \"bookmark\",\n    value: function bookmark(editable) {\n      return {\n        s: {\n          path: dom.makeOffsetPath(editable, this.sc),\n          offset: this.so\n        },\n        e: {\n          path: dom.makeOffsetPath(editable, this.ec),\n          offset: this.eo\n        }\n      };\n    }\n\n    /**\n     * create offsetPath bookmark base on paragraph\n     *\n     * @param {Node[]} paras\n     */\n  }, {\n    key: \"paraBookmark\",\n    value: function paraBookmark(paras) {\n      return {\n        s: {\n          path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n          offset: this.so\n        },\n        e: {\n          path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n          offset: this.eo\n        }\n      };\n    }\n\n    /**\n     * getClientRects\n     * @return {Rect[]}\n     */\n  }, {\n    key: \"getClientRects\",\n    value: function getClientRects() {\n      var nativeRng = this.nativeRange();\n      return nativeRng.getClientRects();\n    }\n  }]);\n}();\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\n/* harmony default export */ const range = ({\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function create(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) {\n      // collapsed\n      ec = sc;\n      eo = so;\n      return new WrappedRange(sc, so, ec, eo);\n    } else {\n      var wrappedRange = this.createFromSelection();\n      if (!wrappedRange && arguments.length === 1) {\n        var bodyElement = arguments[0];\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n      return wrappedRange;\n    }\n  },\n  createFromBodyElement: function createFromBodyElement(bodyElement) {\n    var isCollapseToStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n  createFromSelection: function createFromSelection() {\n    var sc, so, ec, eo;\n    if (env.isW3CRangeSupport) {\n      var selection = document.getSelection();\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n      var nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else {\n      // IE8: TextRange\n      var textRange = document.selection.createRange();\n      var textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      var textRangeStart = textRange;\n      textRangeStart.collapse(true);\n      var startPoint = textRangeToPoint(textRangeStart, true);\n      var endPoint = textRangeToPoint(textRangeEnd, false);\n\n      // same visible point case: range was collapsed.\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n    return new WrappedRange(sc, so, ec, eo);\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function createFromNode(node) {\n    var sc = node;\n    var so = 0;\n    var ec = node;\n    var eo = dom.nodeLength(ec);\n\n    // browsers can't target a picture or void node\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n    return this.create(sc, so, ec, eo);\n  },\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function createFromNodeBefore(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function createFromNodeAfter(node) {\n    return this.createFromNode(node).collapse();\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function createFromBookmark(editable, bookmark) {\n    var sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    var so = bookmark.s.offset;\n    var ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    var eo = bookmark.e.offset;\n    return new WrappedRange(sc, so, ec, eo);\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function createFromParaBookmark(bookmark, paras) {\n    var so = bookmark.s.offset;\n    var eo = bookmark.e.offset;\n    var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n    return new WrappedRange(sc, so, ec, eo);\n  }\n});\n;// CONCATENATED MODULE: ./src/js/core/key.js\n\n\nvar KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\n/* harmony default export */ const key = ({\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: function isEdit(keyCode) {\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE], keyCode);\n  },\n  /**\n   * @method isRemove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isRemove: function isRemove(keyCode) {\n    // LB\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.DELETE], keyCode);\n  },\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: function isMove(keyCode) {\n    return lists.contains([KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN], keyCode);\n  },\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: function isNavigation(keyCode) {\n    return lists.contains([KEY_MAP.HOME, KEY_MAP.END, KEY_MAP.PAGEUP, KEY_MAP.PAGEDOWN], keyCode);\n  },\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP\n});\n;// CONCATENATED MODULE: ./src/js/core/async.js\n\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nfunction readFileAsDataURL(file) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(new FileReader(), {\n      onload: function onload(event) {\n        var dataURL = event.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: function onerror(err) {\n        deferred.reject(err);\n      }\n    }).readAsDataURL(file);\n  }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nfunction createImage(url) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n    var $img = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<img>');\n    $img.one('load', function () {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', function () {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none'\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n;// CONCATENATED MODULE: ./src/js/editing/History.js\nfunction History_typeof(o) { \"@babel/helpers - typeof\"; return History_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, History_typeof(o); }\nfunction History_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction History_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, History_toPropertyKey(o.key), o); } }\nfunction History_createClass(e, r, t) { return r && History_defineProperties(e.prototype, r), t && History_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction History_toPropertyKey(t) { var i = History_toPrimitive(t, \"string\"); return \"symbol\" == History_typeof(i) ? i : i + \"\"; }\nfunction History_toPrimitive(t, r) { if (\"object\" != History_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != History_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar History = /*#__PURE__*/function () {\n  function History(context) {\n    History_classCallCheck(this, History);\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n  return History_createClass(History, [{\n    key: \"makeSnapshot\",\n    value: function makeSnapshot() {\n      var rng = range.create(this.editable);\n      var emptyBookmark = {\n        s: {\n          path: [],\n          offset: 0\n        },\n        e: {\n          path: [],\n          offset: 0\n        }\n      };\n      return {\n        contents: this.$editable.html(),\n        bookmark: rng && rng.isOnEditable() ? rng.bookmark(this.editable) : emptyBookmark\n      };\n    }\n  }, {\n    key: \"applySnapshot\",\n    value: function applySnapshot(snapshot) {\n      if (snapshot.contents !== null) {\n        this.$editable.html(snapshot.contents);\n      }\n      if (snapshot.bookmark !== null) {\n        range.createFromBookmark(this.editable, snapshot.bookmark).select();\n      }\n    }\n\n    /**\n    * @method rewind\n    * Rewinds the history stack back to the first snapshot taken.\n    * Leaves the stack intact, so that \"Redo\" can still be used.\n    */\n  }, {\n    key: \"rewind\",\n    value: function rewind() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      // Return to the first available snapshot.\n      this.stackOffset = 0;\n\n      // Apply that snapshot.\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n\n    /**\n    *  @method commit\n    *  Resets history stack, but keeps current editor's content.\n    */\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      // Clear the stack.\n      this.stack = [];\n\n      // Restore stackOffset to its original value.\n      this.stackOffset = -1;\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    }\n\n    /**\n    * @method reset\n    * Resets the history stack completely; reverting to an empty editor.\n    */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      // Clear the stack.\n      this.stack = [];\n\n      // Restore stackOffset to its original value.\n      this.stackOffset = -1;\n\n      // Clear the editable area.\n      this.$editable.html('');\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    }\n\n    /**\n     * undo\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n      if (this.stackOffset > 0) {\n        this.stackOffset--;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n\n    /**\n     * redo\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.stack.length - 1 > this.stackOffset) {\n        this.stackOffset++;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n\n    /**\n     * recorded undo\n     */\n  }, {\n    key: \"recordUndo\",\n    value: function recordUndo() {\n      this.stackOffset++;\n\n      // Wash out stack after stackOffset\n      if (this.stack.length > this.stackOffset) {\n        this.stack = this.stack.slice(0, this.stackOffset);\n      }\n\n      // Create new snapshot and push it to the end\n      this.stack.push(this.makeSnapshot());\n\n      // If the stack size reachs to the limit, then slice it\n      if (this.stack.length > this.context.options.historyLimit) {\n        this.stack.shift();\n        this.stackOffset -= 1;\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Style.js\nfunction Style_typeof(o) { \"@babel/helpers - typeof\"; return Style_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Style_typeof(o); }\nfunction Style_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Style_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Style_toPropertyKey(o.key), o); } }\nfunction Style_createClass(e, r, t) { return r && Style_defineProperties(e.prototype, r), t && Style_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Style_toPropertyKey(t) { var i = Style_toPrimitive(t, \"string\"); return \"symbol\" == Style_typeof(i) ? i : i + \"\"; }\nfunction Style_toPrimitive(t, r) { if (\"object\" != Style_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Style_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Style = /*#__PURE__*/function () {\n  function Style() {\n    Style_classCallCheck(this, Style);\n  }\n  return Style_createClass(Style, [{\n    key: \"jQueryCSS\",\n    value:\n    /**\n     * @method jQueryCSS\n     *\n     * [workaround] for old jQuery\n     * passing an array of style properties to .css()\n     * will result in an object of property-value pairs.\n     * (compability with version < 1.9)\n     *\n     * @private\n     * @param  {jQuery} $obj\n     * @param  {Array} propertyNames - An array of one or more CSS properties.\n     * @return {Object}\n     */\n    function jQueryCSS($obj, propertyNames) {\n      var result = {};\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(propertyNames, function (idx, propertyName) {\n        result[propertyName] = $obj.css(propertyName);\n      });\n      return result;\n    }\n\n    /**\n     * returns style object from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n  }, {\n    key: \"fromNode\",\n    value: function fromNode($node) {\n      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n      var styleInfo = this.jQueryCSS($node, properties) || {};\n      var fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n      styleInfo['font-size'] = parseInt(fontSize, 10);\n      styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n      return styleInfo;\n    }\n\n    /**\n     * paragraph level style\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} styleInfo\n     */\n  }, {\n    key: \"stylePara\",\n    value: function stylePara(rng, styleInfo) {\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rng.nodes(dom.isPara, {\n        includeAncestor: true\n      }), function (idx, para) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css(styleInfo);\n      });\n    }\n\n    /**\n     * insert and returns styleNodes on range.\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} [options] - options for styleNodes\n     * @param {String} [options.nodeName] - default: `SPAN`\n     * @param {Boolean} [options.expandClosestSibling] - default: `false`\n     * @param {Boolean} [options.onlyPartialContains] - default: `false`\n     * @return {Node[]}\n     */\n  }, {\n    key: \"styleNodes\",\n    value: function styleNodes(rng, options) {\n      rng = rng.splitText();\n      var nodeName = options && options.nodeName || 'SPAN';\n      var expandClosestSibling = !!(options && options.expandClosestSibling);\n      var onlyPartialContains = !!(options && options.onlyPartialContains);\n      if (rng.isCollapsed()) {\n        return [rng.insertNode(dom.create(nodeName))];\n      }\n      var pred = dom.makePredByNodeName(nodeName);\n      var nodes = rng.nodes(dom.isText, {\n        fullyContains: true\n      }).map(function (text) {\n        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n      });\n      if (expandClosestSibling) {\n        if (onlyPartialContains) {\n          var nodesInRange = rng.nodes();\n          // compose with partial contains predication\n          pred = func.and(pred, function (node) {\n            return lists.contains(nodesInRange, node);\n          });\n        }\n        return nodes.map(function (node) {\n          var siblings = dom.withClosestSiblings(node, pred);\n          var head = lists.head(siblings);\n          var tails = lists.tail(siblings);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(tails, function (idx, elem) {\n            dom.appendChildNodes(head, elem.childNodes);\n            dom.remove(elem);\n          });\n          return lists.head(siblings);\n        });\n      } else {\n        return nodes;\n      }\n    }\n\n    /**\n     * get current style on cursor\n     *\n     * @param {WrappedRange} rng\n     * @return {Object} - object contains style properties.\n     */\n  }, {\n    key: \"current\",\n    value: function current(rng) {\n      var $cont = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n      var styleInfo = this.fromNode($cont);\n\n      // document.queryCommandState for toggle state\n      // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n      try {\n        styleInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(styleInfo, {\n          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n          'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n        });\n      } catch (e) {\n        // eslint-disable-next-line\n      }\n\n      // list-style-type to list-style(unordered, ordered)\n      if (!rng.isOnList()) {\n        styleInfo['list-style'] = 'none';\n      } else {\n        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n        var isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n      }\n      var para = dom.ancestor(rng.sc, dom.isPara);\n      if (para && para.style['line-height']) {\n        styleInfo['line-height'] = para.style.lineHeight;\n      } else {\n        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n        styleInfo['line-height'] = lineHeight.toFixed(1);\n      }\n      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n      styleInfo.range = rng;\n      return styleInfo;\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Bullet.js\nfunction Bullet_typeof(o) { \"@babel/helpers - typeof\"; return Bullet_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Bullet_typeof(o); }\nfunction Bullet_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Bullet_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Bullet_toPropertyKey(o.key), o); } }\nfunction Bullet_createClass(e, r, t) { return r && Bullet_defineProperties(e.prototype, r), t && Bullet_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Bullet_toPropertyKey(t) { var i = Bullet_toPrimitive(t, \"string\"); return \"symbol\" == Bullet_typeof(i) ? i : i + \"\"; }\nfunction Bullet_toPrimitive(t, r) { if (\"object\" != Bullet_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Bullet_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\nvar Bullet = /*#__PURE__*/function () {\n  function Bullet() {\n    Bullet_classCallCheck(this, Bullet);\n  }\n  return Bullet_createClass(Bullet, [{\n    key: \"insertOrderedList\",\n    value:\n    /**\n     * toggle ordered list\n     */\n    function insertOrderedList(editable) {\n      this.toggleList('OL', editable);\n    }\n\n    /**\n     * toggle unordered list\n     */\n  }, {\n    key: \"insertUnorderedList\",\n    value: function insertUnorderedList(editable) {\n      this.toggleList('UL', editable);\n    }\n\n    /**\n     * indent\n     */\n  }, {\n    key: \"indent\",\n    value: function indent(editable) {\n      var _this = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        if (dom.isLi(head)) {\n          var previousList = _this.findList(head.previousSibling);\n          if (previousList) {\n            paras.map(function (para) {\n              return previousList.appendChild(para);\n            });\n          } else {\n            _this.wrapList(paras, head.parentNode.nodeName);\n            paras.map(function (para) {\n              return para.parentNode;\n            }).map(function (para) {\n              return _this.appendToPrevious(para);\n            });\n          }\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              return (parseInt(val, 10) || 0) + 25;\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n\n    /**\n     * outdent\n     */\n  }, {\n    key: \"outdent\",\n    value: function outdent(editable) {\n      var _this2 = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        if (dom.isLi(head)) {\n          _this2.releaseList([paras]);\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              val = parseInt(val, 10) || 0;\n              return val > 25 ? val - 25 : '';\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n\n    /**\n     * toggle list\n     *\n     * @param {String} listName - OL or UL\n     */\n  }, {\n    key: \"toggleList\",\n    value: function toggleList(listName, editable) {\n      var _this3 = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var bookmark = rng.paraBookmark(paras);\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n      // paragraph to list\n      if (lists.find(paras, dom.isPurePara)) {\n        var wrappedParas = [];\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n          wrappedParas = wrappedParas.concat(_this3.wrapList(paras, listName));\n        });\n        paras = wrappedParas;\n        // list to paragraph or change list style\n      } else {\n        var diffLists = rng.nodes(dom.isList, {\n          includeAncestor: true\n        }).filter(function (listNode) {\n          return !external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().nodeName(listNode, listName);\n        });\n        if (diffLists.length) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(diffLists, function (idx, listNode) {\n            dom.replace(listNode, listName);\n          });\n        } else {\n          paras = this.releaseList(clustereds, true);\n        }\n      }\n      range.createFromParaBookmark(bookmark, paras).select();\n    }\n\n    /**\n     * @param {Node[]} paras\n     * @param {String} listName\n     * @return {Node[]}\n     */\n  }, {\n    key: \"wrapList\",\n    value: function wrapList(paras, listName) {\n      var head = lists.head(paras);\n      var last = lists.last(paras);\n      var prevList = dom.isList(head.previousSibling) && head.previousSibling;\n      var nextList = dom.isList(last.nextSibling) && last.nextSibling;\n      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n      // P to LI\n      paras = paras.map(function (para) {\n        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n      });\n\n      // append to list(<ul>, <ol>)\n      dom.appendChildNodes(listNode, paras, true);\n      if (nextList) {\n        dom.appendChildNodes(listNode, lists.from(nextList.childNodes), true);\n        dom.remove(nextList);\n      }\n      return paras;\n    }\n\n    /**\n     * @method releaseList\n     *\n     * @param {Array[]} clustereds\n     * @param {Boolean} isEscapseToBody\n     * @return {Node[]}\n     */\n  }, {\n    key: \"releaseList\",\n    value: function releaseList(clustereds, isEscapseToBody) {\n      var _this4 = this;\n      var releasedParas = [];\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        var last = lists.last(paras);\n        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n        var parentItem = headList.parentNode;\n        if (headList.parentNode.nodeName === 'LI') {\n          paras.map(function (para) {\n            var newList = _this4.findNextSiblings(para);\n            if (parentItem.nextSibling) {\n              parentItem.parentNode.insertBefore(para, parentItem.nextSibling);\n            } else {\n              parentItem.parentNode.appendChild(para);\n            }\n            if (newList.length) {\n              _this4.wrapList(newList, headList.nodeName);\n              para.appendChild(newList[0].parentNode);\n            }\n          });\n          if (headList.children.length === 0) {\n            parentItem.removeChild(headList);\n          }\n          if (parentItem.childNodes.length === 0) {\n            parentItem.parentNode.removeChild(parentItem);\n          }\n        } else {\n          var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n            node: last.parentNode,\n            offset: dom.position(last) + 1\n          }, {\n            isSkipPaddingBlankHTML: true\n          }) : null;\n          var middleList = dom.splitTree(headList, {\n            node: head.parentNode,\n            offset: dom.position(head)\n          }, {\n            isSkipPaddingBlankHTML: true\n          });\n          paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi);\n\n          // LI to P\n          if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n            paras = paras.map(function (para) {\n              return dom.replace(para, 'P');\n            });\n          }\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(lists.from(paras).reverse(), function (idx, para) {\n            dom.insertAfter(para, headList);\n          });\n\n          // remove empty lists\n          var rootLists = lists.compact([headList, middleList, lastList]);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rootLists, function (idx, rootList) {\n            var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(listNodes.reverse(), function (idx, listNode) {\n              if (!dom.nodeLength(listNode)) {\n                dom.remove(listNode, true);\n              }\n            });\n          });\n        }\n        releasedParas = releasedParas.concat(paras);\n      });\n      return releasedParas;\n    }\n\n    /**\n     * @method appendToPrevious\n     *\n     * Appends list to previous list item, if\n     * none exist it wraps the list in a new list item.\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n  }, {\n    key: \"appendToPrevious\",\n    value: function appendToPrevious(node) {\n      return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');\n    }\n\n    /**\n     * @method findList\n     *\n     * Finds an existing list in list item\n     *\n     * @param {HTMLNode} ListItem\n     * @return {Array[]}\n     */\n  }, {\n    key: \"findList\",\n    value: function findList(node) {\n      return node ? lists.find(node.children, function (child) {\n        return ['OL', 'UL'].indexOf(child.nodeName) > -1;\n      }) : null;\n    }\n\n    /**\n     * @method findNextSiblings\n     *\n     * Finds all list item siblings that follow it\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n  }, {\n    key: \"findNextSiblings\",\n    value: function findNextSiblings(node) {\n      var siblings = [];\n      while (node.nextSibling) {\n        siblings.push(node.nextSibling);\n        node = node.nextSibling;\n      }\n      return siblings;\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Typing.js\nfunction Typing_typeof(o) { \"@babel/helpers - typeof\"; return Typing_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Typing_typeof(o); }\nfunction Typing_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Typing_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Typing_toPropertyKey(o.key), o); } }\nfunction Typing_createClass(e, r, t) { return r && Typing_defineProperties(e.prototype, r), t && Typing_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Typing_toPropertyKey(t) { var i = Typing_toPrimitive(t, \"string\"); return \"symbol\" == Typing_typeof(i) ? i : i + \"\"; }\nfunction Typing_toPrimitive(t, r) { if (\"object\" != Typing_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Typing_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nvar Typing = /*#__PURE__*/function () {\n  function Typing(context) {\n    Typing_classCallCheck(this, Typing);\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet();\n    this.options = context.options;\n  }\n\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n  return Typing_createClass(Typing, [{\n    key: \"insertTab\",\n    value: function insertTab(rng, tabsize) {\n      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n      rng = rng.deleteContents();\n      rng.insertNode(tab, true);\n      rng = range.create(tab, tabsize);\n      rng.select();\n    }\n\n    /**\n     * insert paragraph\n     *\n     * @param {jQuery} $editable\n     * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n     *\n     * blockquoteBreakingLevel\n     *   0 - No break, the new paragraph remains inside the quote\n     *   1 - Break the first blockquote in the ancestors list\n     *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n     */\n  }, {\n    key: \"insertParagraph\",\n    value: function insertParagraph(editable, rng) {\n      rng = rng || range.create(editable);\n\n      // deleteContents on range.\n      rng = rng.deleteContents();\n\n      // Wrap range if it needs to be wrapped by paragraph\n      rng = rng.wrapBodyInlineWithPara();\n\n      // finding paragraph\n      var splitRoot = dom.ancestor(rng.sc, dom.isPara);\n      var nextPara;\n      // on paragraph: split paragraph\n      if (splitRoot) {\n        // if it is an empty line with li\n        if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n          // toggle UL/OL and escape\n          this.bullet.toggleList(splitRoot.parentNode.nodeName);\n          return;\n        } else {\n          var blockquote = null;\n          if (this.options.blockquoteBreakingLevel === 1) {\n            blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n          } else if (this.options.blockquoteBreakingLevel === 2) {\n            blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n          }\n          if (blockquote) {\n            // We're inside a blockquote and options ask us to break it\n            nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];\n            // If the split is right before a <br>, remove it so that there's no \"empty line\"\n            // after the split in the new blockquote created\n            if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(rng.sc.nextSibling).remove();\n            }\n            var split = dom.splitTree(blockquote, rng.getStartPoint(), {\n              isDiscardEmptySplits: true\n            });\n            if (split) {\n              split.parentNode.insertBefore(nextPara, split);\n            } else {\n              dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n            }\n          } else {\n            nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n            // not a blockquote, just insert the paragraph\n            var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n            emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyAnchors, function (idx, anchor) {\n              dom.remove(anchor);\n            });\n\n            // replace empty heading, pre or custom-made styleTag with P tag\n            if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n              nextPara = dom.replace(nextPara, 'p');\n            }\n          }\n        }\n        // no paragraph: insert empty paragraph\n      } else {\n        var next = rng.sc.childNodes[rng.so];\n        nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];\n        if (next) {\n          rng.sc.insertBefore(nextPara, next);\n        } else {\n          rng.sc.appendChild(nextPara);\n        }\n      }\n      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Table.js\nfunction Table_typeof(o) { \"@babel/helpers - typeof\"; return Table_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Table_typeof(o); }\nfunction Table_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Table_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Table_toPropertyKey(o.key), o); } }\nfunction Table_createClass(e, r, t) { return r && Table_defineProperties(e.prototype, r), t && Table_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Table_toPropertyKey(t) { var i = Table_toPrimitive(t, \"string\"); return \"symbol\" == Table_typeof(i) ? i : i + \"\"; }\nfunction Table_toPrimitive(t, r) { if (\"object\" != Table_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Table_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nvar TableResultAction = function TableResultAction(startPoint, where, action, domTable) {\n  var _startPoint = {\n    'colPos': 0,\n    'rowPos': 0\n  };\n  var _virtualTable = [];\n  var _actionCellList = [];\n\n  /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th') {\n      // Impossible to identify start Cell point\n      return;\n    }\n    _startPoint.colPos = startPoint.cellIndex;\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    var objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell\n    };\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition\n      }\n    };\n  }\n\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n    var newCellIndex = cellIndex;\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n  function addCellInfoToVirtual(row, cell) {\n    var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    var cellHasColspan = cell.colSpan > 1;\n    var cellHasRowspan = cell.rowSpan > 1;\n    var isThisSelectedCell = row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos;\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n    // Add span rows to virtual Table.\n    var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n    if (rowspanNumber > 1) {\n      for (var rp = 1; rp < rowspanNumber; rp++) {\n        var rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    }\n\n    // Add span cols to virtual table.\n    var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n    if (colspanNumber > 1) {\n      for (var cp = 1; cp < colspanNumber; cp++) {\n        var cellspanIndex = recoverCellIndex(row.rowIndex, cellIndex + cp);\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n  function createVirtualTable() {\n    var rows = domTable.rows;\n    for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      var cells = rows[rowIndex].cells;\n      for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.RemoveCell;\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.AddCell;\n  }\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  }\n\n  /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n  this.getActionList = function () {\n    var fixedRow = where === TableResultAction.where.Row ? _startPoint.rowPos : -1;\n    var fixedCol = where === TableResultAction.where.Column ? _startPoint.colPos : -1;\n    var actualPosition = 0;\n    var canContinue = true;\n    while (canContinue) {\n      var rowPosition = fixedRow >= 0 ? fixedRow : actualPosition;\n      var colPosition = fixedCol >= 0 ? fixedCol : actualPosition;\n      var row = _virtualTable[rowPosition];\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n      var cell = row[colPosition];\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      // Define action to be applied in this cell\n      var resultAction = TableResultAction.resultAction.Ignore;\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n      actualPosition++;\n    }\n    return _actionCellList;\n  };\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = {\n  'Row': 0,\n  'Column': 1\n};\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = {\n  'Add': 0,\n  'Delete': 1\n};\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = {\n  'Ignore': 0,\n  'SubtractSpanCount': 1,\n  'RemoveCell': 2,\n  'AddCell': 3,\n  'SumSpanCount': 4\n};\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nvar Table = /*#__PURE__*/function () {\n  function Table() {\n    Table_classCallCheck(this, Table);\n  }\n  return Table_createClass(Table, [{\n    key: \"tab\",\n    value:\n    /**\n     * handle tab key\n     *\n     * @param {WrappedRange} rng\n     * @param {Boolean} isShift\n     */\n    function tab(rng, isShift) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var table = dom.ancestor(cell, dom.isTable);\n      var cells = dom.listDescendant(table, dom.isCell);\n      var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n      if (nextCell) {\n        range.create(nextCell, 0).select();\n      }\n    }\n\n    /**\n     * Add a new row\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (top/bottom)\n     * @return {Node}\n     */\n  }, {\n    key: \"addRow\",\n    value: function addRow(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var currentTr = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var trAttributes = this.recoverAttributes(currentTr);\n      var html = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<tr' + trAttributes + '></tr>');\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var idCell = 0; idCell < actions.length; idCell++) {\n        var currentCell = actions[idCell];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            break;\n          case TableResultAction.resultAction.SumSpanCount:\n            {\n              if (position === 'top') {\n                var baseCellTr = currentCell.baseCell.parent;\n                var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n                if (isTopFromRowSpan) {\n                  var newTd = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                  html.append(newTd);\n                  break;\n                }\n              }\n              var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n              rowspanNumber++;\n              currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n            }\n            break;\n        }\n      }\n      if (position === 'top') {\n        currentTr.before(html);\n      } else {\n        var cellHasRowspan = cell.rowSpan > 1;\n        if (cellHasRowspan) {\n          var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).parent().find('tr')[lastTrIndex]).after(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(html));\n          return;\n        }\n        currentTr.after(html);\n      }\n    }\n\n    /**\n     * Add a new col\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (left/right)\n     * @return {Node}\n     */\n  }, {\n    key: \"addCol\",\n    value: function addCol(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var rowsGroup = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).siblings();\n      rowsGroup.push(row);\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        var currentCell = actions[actionIndex];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            if (position === 'right') {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n            break;\n          case TableResultAction.resultAction.SumSpanCount:\n            if (position === 'right') {\n              var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n              colspanNumber++;\n              currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n            break;\n        }\n      }\n    }\n\n    /*\n    * Copy attributes from element.\n    *\n    * @param {object} Element to recover attributes.\n    * @return {string} Copied string elements.\n    */\n  }, {\n    key: \"recoverAttributes\",\n    value: function recoverAttributes(el) {\n      var resultStr = '';\n      if (!el) {\n        return resultStr;\n      }\n      var attrList = el.attributes || [];\n      for (var i = 0; i < attrList.length; i++) {\n        if (attrList[i].name.toLowerCase() === 'id') {\n          continue;\n        }\n        if (attrList[i].specified) {\n          resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n        }\n      }\n      return resultStr;\n    }\n\n    /**\n     * Delete current row\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));\n      var rowPos = row[0].rowIndex;\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n        var baseCell = actions[actionIndex].baseCell;\n        var virtualPosition = actions[actionIndex].virtualTable;\n        var hasRowspan = baseCell.rowSpan && baseCell.rowSpan > 1;\n        var rowspanNumber = hasRowspan ? parseInt(baseCell.rowSpan, 10) : 0;\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n          case TableResultAction.resultAction.AddCell:\n            {\n              var nextRow = row.next('tr')[0];\n              if (!nextRow) {\n                continue;\n              }\n              var cloneRow = row[0].cells[cellPos];\n              if (hasRowspan) {\n                if (rowspanNumber > 2) {\n                  rowspanNumber--;\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                  nextRow.cells[cellPos].innerHTML = '';\n                } else if (rowspanNumber === 2) {\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].removeAttribute('rowSpan');\n                  nextRow.cells[cellPos].innerHTML = '';\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.SubtractSpanCount:\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                baseCell.setAttribute('rowSpan', rowspanNumber);\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              } else if (rowspanNumber === 2) {\n                baseCell.removeAttribute('rowSpan');\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.RemoveCell:\n            // Do not need remove cell because row will be deleted.\n            continue;\n        }\n      }\n      row.remove();\n    }\n\n    /**\n     * Delete current col\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n          case TableResultAction.resultAction.SubtractSpanCount:\n            {\n              var baseCell = actions[actionIndex].baseCell;\n              var hasColspan = baseCell.colSpan && baseCell.colSpan > 1;\n              if (hasColspan) {\n                var colspanNumber = baseCell.colSpan ? parseInt(baseCell.colSpan, 10) : 0;\n                if (colspanNumber > 2) {\n                  colspanNumber--;\n                  baseCell.setAttribute('colSpan', colspanNumber);\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                } else if (colspanNumber === 2) {\n                  baseCell.removeAttribute('colSpan');\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.RemoveCell:\n            dom.remove(actions[actionIndex].baseCell, true);\n            continue;\n        }\n      }\n    }\n\n    /**\n     * create empty table element\n     *\n     * @param {Number} rowCount\n     * @param {Number} colCount\n     * @return {Node}\n     */\n  }, {\n    key: \"createTable\",\n    value: function createTable(colCount, rowCount, options) {\n      var tds = [];\n      var tdHTML;\n      for (var idxCol = 0; idxCol < colCount; idxCol++) {\n        tds.push('<td>' + dom.blank + '</td>');\n      }\n      tdHTML = tds.join('');\n      var trs = [];\n      var trHTML;\n      for (var idxRow = 0; idxRow < rowCount; idxRow++) {\n        trs.push('<tr>' + tdHTML + '</tr>');\n      }\n      trHTML = trs.join('');\n      var $table = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<table>' + trHTML + '</table>');\n      if (options && options.tableClassName) {\n        $table.addClass(options.tableClassName);\n      }\n      return $table[0];\n    }\n\n    /**\n     * Delete current table\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('table').remove();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Editor.js\nfunction Editor_typeof(o) { \"@babel/helpers - typeof\"; return Editor_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Editor_typeof(o); }\nfunction Editor_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Editor_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Editor_toPropertyKey(o.key), o); } }\nfunction Editor_createClass(e, r, t) { return r && Editor_defineProperties(e.prototype, r), t && Editor_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Editor_toPropertyKey(t) { var i = Editor_toPrimitive(t, \"string\"); return \"symbol\" == Editor_typeof(i) ? i : i + \"\"; }\nfunction Editor_toPrimitive(t, r) { if (\"object\" != Editor_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Editor_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KEY_BOGUS = 'bogus';\nvar MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nvar TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nvar URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\n\n/**\n * @class Editor\n */\nvar Editor = /*#__PURE__*/function () {\n  function Editor(context) {\n    var _this = this;\n    Editor_classCallCheck(this, Editor);\n    this.context = context;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n    this.style = new Style();\n    this.table = new Table();\n    this.typing = new Typing(context);\n    this.bullet = new Bullet();\n    this.history = new History(context);\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName);\n\n    // native commands(with execCommand), generate function for execCommand\n    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor'];\n    for (var idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = function (sCmd) {\n        return function (value) {\n          _this.beforeCommand();\n          document.execCommand(sCmd, false, value);\n          _this.afterCommand(true);\n        };\n      }(commands[idx]);\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n    this.fontName = this.wrapCommand(function (value) {\n      return _this.fontStyling('font-family', env.validFontName(value));\n    });\n    this.fontSize = this.wrapCommand(function (value) {\n      var unit = _this.currentStyle()['font-size-unit'];\n      return _this.fontStyling('font-size', value + unit);\n    });\n    this.fontSizeUnit = this.wrapCommand(function (value) {\n      var size = _this.currentStyle()['font-size'];\n      return _this.fontStyling('font-size', size + value);\n    });\n    for (var _idx = 1; _idx <= 6; _idx++) {\n      this['formatH' + _idx] = function (idx) {\n        return function () {\n          _this.formatBlock('H' + idx);\n        };\n      }(_idx);\n      this.context.memo('help.formatH' + _idx, this.lang.help['formatH' + _idx]);\n    }\n    this.insertParagraph = this.wrapCommand(function () {\n      _this.typing.insertParagraph(_this.editable);\n    });\n    this.insertOrderedList = this.wrapCommand(function () {\n      _this.bullet.insertOrderedList(_this.editable);\n    });\n    this.insertUnorderedList = this.wrapCommand(function () {\n      _this.bullet.insertUnorderedList(_this.editable);\n    });\n    this.indent = this.wrapCommand(function () {\n      _this.bullet.indent(_this.editable);\n    });\n    this.outdent = this.wrapCommand(function () {\n      _this.bullet.outdent(_this.editable);\n    });\n\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n    this.insertNode = this.wrapCommand(function (node) {\n      if (_this.isLimited(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).text().length)) {\n        return;\n      }\n      var rng = _this.getLastRange();\n      rng.insertNode(node);\n      _this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n\n    /**\n     * insert text\n     * @param {String} text\n     */\n    this.insertText = this.wrapCommand(function (text) {\n      if (_this.isLimited(text.length)) {\n        return;\n      }\n      var rng = _this.getLastRange();\n      var textNode = rng.insertNode(dom.createText(text));\n      _this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n    this.pasteHTML = this.wrapCommand(function (markup) {\n      if (_this.isLimited(markup.length)) {\n        return;\n      }\n      markup = _this.context.invoke('codeview.purify', markup);\n      var contents = _this.getLastRange().pasteHTML(markup);\n      _this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n    this.formatBlock = this.wrapCommand(function (tagName, $target) {\n      var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle;\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock);\n      } else {\n        _this.onFormatBlock(tagName, $target);\n      }\n    });\n\n    /**\n     * insert horizontal rule\n     */\n    this.insertHorizontalRule = this.wrapCommand(function () {\n      var hrNode = _this.getLastRange().insertNode(dom.create('HR'));\n      if (hrNode.nextSibling) {\n        _this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n    this.lineHeight = this.wrapCommand(function (value) {\n      _this.style.stylePara(_this.getLastRange(), {\n        lineHeight: value\n      });\n    });\n\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n    this.createLink = this.wrapCommand(function (linkInfo) {\n      var rel = [];\n      var linkUrl = linkInfo.url;\n      var linkText = linkInfo.text;\n      var isNewWindow = linkInfo.isNewWindow;\n      var addNoReferrer = _this.options.linkAddNoReferrer;\n      var addNoOpener = _this.options.linkAddNoOpener;\n      var rng = linkInfo.range || _this.getLastRange();\n      var additionalTextLength = linkText.length - rng.toString().length;\n      if (additionalTextLength > 0 && _this.isLimited(additionalTextLength)) {\n        return;\n      }\n      var isTextChanged = rng.toString() !== linkText;\n\n      // handle spaced urls from input\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n      if (_this.options.onCreateLink) {\n        linkUrl = _this.options.onCreateLink(linkUrl);\n      } else {\n        linkUrl = _this.checkLinkUrl(linkUrl);\n      }\n      var anchors = [];\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        var anchor = rng.insertNode(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<A></A>').text(linkText)[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = _this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true\n        });\n      }\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(anchors, function (idx, anchor) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href', linkUrl);\n        if (isNewWindow) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('target', '_blank');\n          if (addNoReferrer) {\n            rel.push('noreferrer');\n          }\n          if (addNoOpener) {\n            rel.push('noopener');\n          }\n          if (rel.length) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('rel', rel.join(' '));\n          }\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).removeAttr('target');\n        }\n      });\n      _this.setLastRange(_this.createRangeFromList(anchors).select());\n    });\n\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n    this.color = this.wrapCommand(function (colorInfo) {\n      var foreColor = colorInfo.foreColor;\n      var backColor = colorInfo.backColor;\n      if (foreColor) {\n        document.execCommand('foreColor', false, foreColor);\n      }\n      if (backColor) {\n        document.execCommand('backColor', false, backColor);\n      }\n    });\n\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n    this.foreColor = this.wrapCommand(function (colorInfo) {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n    this.insertTable = this.wrapCommand(function (dim) {\n      var dimension = dim.split('x');\n      var rng = _this.getLastRange().deleteContents();\n      rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options));\n    });\n\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n    this.removeMedia = this.wrapCommand(function () {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).parent();\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).detach();\n      }\n      _this.setLastRange(range.createFromSelection($target).select());\n      _this.context.triggerEvent('media.delete', $target, _this.$editable);\n    });\n\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n    this.floatMe = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', value === 'none' ? '' : value);\n    });\n\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n    this.resize = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());\n      value = parseFloat(value);\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: ''\n        });\n      }\n    });\n  }\n  return Editor_createClass(Editor, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      // bind custom events\n      this.$editable.on('keydown', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          _this2.context.triggerEvent('enter', event);\n        }\n        _this2.context.triggerEvent('keydown', event);\n\n        // keep a snapshot to limit text on input event\n        _this2.snapshot = _this2.history.makeSnapshot();\n        _this2.hasKeyShortCut = false;\n        if (!event.isDefaultPrevented()) {\n          if (_this2.options.shortcuts) {\n            _this2.hasKeyShortCut = _this2.handleKeyMap(event);\n          } else {\n            _this2.preventDefaultEditableShortCuts(event);\n          }\n        }\n        if (_this2.isLimited(1, event)) {\n          var lastRange = _this2.getLastRange();\n          if (lastRange.eo - lastRange.so === 0) {\n            return false;\n          }\n        }\n        _this2.setLastRange();\n\n        // record undo in the key event except keyMap.\n        if (_this2.options.recordEveryKeystroke) {\n          if (_this2.hasKeyShortCut === false) {\n            _this2.history.recordUndo();\n          }\n        }\n      }).on('keyup', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('keyup', event);\n      }).on('focus', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('focus', event);\n      }).on('blur', function (event) {\n        _this2.context.triggerEvent('blur', event);\n      }).on('mousedown', function (event) {\n        _this2.context.triggerEvent('mousedown', event);\n      }).on('mouseup', function (event) {\n        _this2.setLastRange();\n        _this2.history.recordUndo();\n        _this2.context.triggerEvent('mouseup', event);\n      }).on('scroll', function (event) {\n        _this2.context.triggerEvent('scroll', event);\n      }).on('paste', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('paste', event);\n      }).on('copy', function (event) {\n        _this2.context.triggerEvent('copy', event);\n      }).on('input', function () {\n        // To limit composition characters (e.g. Korean)\n        if (_this2.isLimited(0) && _this2.snapshot) {\n          _this2.history.applySnapshot(_this2.snapshot);\n        }\n      });\n      this.$editable.attr('spellcheck', this.options.spellCheck);\n      this.$editable.attr('autocorrect', this.options.spellCheck);\n      if (this.options.disableGrammar) {\n        this.$editable.attr('data-gramm', false);\n      }\n\n      // init content before set event\n      this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n      this.$editable.on(env.inputEventName, func.debounce(function () {\n        _this2.context.triggerEvent('change', _this2.$editable.html(), _this2.$editable);\n      }, 10));\n      this.$editable.on('focusin', function (event) {\n        _this2.context.triggerEvent('focusin', event);\n      }).on('focusout', function (event) {\n        _this2.context.triggerEvent('focusout', event);\n      });\n      if (this.options.airMode) {\n        if (this.options.overrideContextMenu) {\n          this.$editor.on('contextmenu', function (event) {\n            _this2.context.triggerEvent('contextmenu', event);\n            return false;\n          });\n        }\n      } else {\n        if (this.options.width) {\n          this.$editor.outerWidth(this.options.width);\n        }\n        if (this.options.height) {\n          this.$editable.outerHeight(this.options.height);\n        }\n        if (this.options.maxHeight) {\n          this.$editable.css('max-height', this.options.maxHeight);\n        }\n        if (this.options.minHeight) {\n          this.$editable.css('min-height', this.options.minHeight);\n        }\n      }\n      this.history.recordUndo();\n      this.setLastRange();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$editable.off();\n    }\n  }, {\n    key: \"handleKeyMap\",\n    value: function handleKeyMap(event) {\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      var keys = [];\n      if (event.metaKey) {\n        keys.push('CMD');\n      }\n      if (event.ctrlKey && !event.altKey) {\n        keys.push('CTRL');\n      }\n      if (event.shiftKey) {\n        keys.push('SHIFT');\n      }\n      var keyName = key.nameFromCode[event.keyCode];\n      if (keyName) {\n        keys.push(keyName);\n      }\n      var eventName = keyMap[keys.join('+')];\n      if (keyName === 'TAB' && !this.options.tabDisable) {\n        this.afterCommand();\n      } else if (eventName) {\n        if (this.context.invoke(eventName) !== false) {\n          event.preventDefault();\n          return true;\n        }\n      } else if (key.isEdit(event.keyCode)) {\n        if (key.isRemove(event.keyCode)) {\n          this.context.invoke('removed');\n        }\n        this.afterCommand();\n      }\n      return false;\n    }\n  }, {\n    key: \"preventDefaultEditableShortCuts\",\n    value: function preventDefaultEditableShortCuts(event) {\n      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n      if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) {\n        event.preventDefault();\n      }\n    }\n  }, {\n    key: \"isLimited\",\n    value: function isLimited(pad, event) {\n      pad = pad || 0;\n      if (typeof event !== 'undefined') {\n        if (key.isMove(event.keyCode) || key.isNavigation(event.keyCode) || event.ctrlKey || event.metaKey || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n          return false;\n        }\n      }\n      if (this.options.maxTextLength > 0) {\n        if (this.$editable.text().length + pad > this.options.maxTextLength) {\n          return true;\n        }\n      }\n      return false;\n    }\n  }, {\n    key: \"checkLinkUrl\",\n    value: function checkLinkUrl(linkUrl) {\n      if (MAILTO_PATTERN.test(linkUrl)) {\n        return 'mailto://' + linkUrl;\n      } else if (TEL_PATTERN.test(linkUrl)) {\n        return 'tel://' + linkUrl;\n      } else if (!URL_SCHEME_PATTERN.test(linkUrl)) {\n        return 'http://' + linkUrl;\n      }\n      return linkUrl;\n    }\n\n    /**\n     * create range\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"createRange\",\n    value: function createRange() {\n      this.focus();\n      this.setLastRange();\n      return this.getLastRange();\n    }\n\n    /**\n     * create a new range from the list of elements\n     *\n     * @param {list} dom element list\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"createRangeFromList\",\n    value: function createRangeFromList(lst) {\n      var startRange = range.createFromNodeBefore(lists.head(lst));\n      var startPoint = startRange.getStartPoint();\n      var endRange = range.createFromNodeAfter(lists.last(lst));\n      var endPoint = endRange.getEndPoint();\n      return range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * set the last range\n     *\n     * if given rng is exist, set rng as the last range\n     * or create a new range at the end of the document\n     *\n     * @param {WrappedRange} rng\n     */\n  }, {\n    key: \"setLastRange\",\n    value: function setLastRange(rng) {\n      if (rng) {\n        this.lastRange = rng;\n      } else {\n        this.lastRange = range.create(this.editable);\n        if (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.lastRange.sc).closest('.note-editable').length === 0) {\n          this.lastRange = range.createFromBodyElement(this.editable);\n        }\n      }\n    }\n\n    /**\n     * get the last range\n     *\n     * if there is a saved last range, return it\n     * or create a new range and return it\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      if (!this.lastRange) {\n        this.setLastRange();\n      }\n      return this.lastRange;\n    }\n\n    /**\n     * saveRange\n     *\n     * save current range\n     *\n     * @param {Boolean} [thenCollapse=false]\n     */\n  }, {\n    key: \"saveRange\",\n    value: function saveRange(thenCollapse) {\n      if (thenCollapse) {\n        this.getLastRange().collapse().select();\n      }\n    }\n\n    /**\n     * restoreRange\n     *\n     * restore lately range\n     */\n  }, {\n    key: \"restoreRange\",\n    value: function restoreRange() {\n      if (this.lastRange) {\n        this.lastRange.select();\n        this.focus();\n      }\n    }\n  }, {\n    key: \"saveTarget\",\n    value: function saveTarget(node) {\n      this.$editable.data('target', node);\n    }\n  }, {\n    key: \"clearTarget\",\n    value: function clearTarget() {\n      this.$editable.removeData('target');\n    }\n  }, {\n    key: \"restoreTarget\",\n    value: function restoreTarget() {\n      return this.$editable.data('target');\n    }\n\n    /**\n     * currentStyle\n     *\n     * current style\n     * @return {Object|Boolean} unfocus\n     */\n  }, {\n    key: \"currentStyle\",\n    value: function currentStyle() {\n      var rng = range.create();\n      if (rng) {\n        rng = rng.normalize();\n      }\n      return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n    }\n\n    /**\n     * style from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n  }, {\n    key: \"styleFromNode\",\n    value: function styleFromNode($node) {\n      return this.style.fromNode($node);\n    }\n\n    /**\n     * undo\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.undo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /*\n    * commit\n    */\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.commit();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /**\n     * redo\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.redo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /**\n     * before command\n     */\n  }, {\n    key: \"beforeCommand\",\n    value: function beforeCommand() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n\n      // Set styleWithCSS before run a command\n      document.execCommand('styleWithCSS', false, this.options.styleWithCSS);\n\n      // keep focus on editable before command execution\n      this.focus();\n    }\n\n    /**\n     * after command\n     * @param {Boolean} isPreventTrigger\n     */\n  }, {\n    key: \"afterCommand\",\n    value: function afterCommand(isPreventTrigger) {\n      this.normalizeContent();\n      this.history.recordUndo();\n      if (!isPreventTrigger) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n\n    /**\n     * handle tab key\n     */\n  }, {\n    key: \"tab\",\n    value: function tab() {\n      var rng = this.getLastRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n        if (!this.isLimited(this.options.tabSize)) {\n          this.beforeCommand();\n          this.typing.insertTab(rng, this.options.tabSize);\n          this.afterCommand();\n        }\n      }\n    }\n\n    /**\n     * handle shift+tab key\n     */\n  }, {\n    key: \"untab\",\n    value: function untab() {\n      var rng = this.getLastRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng, true);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n      }\n    }\n\n    /**\n     * run given function between beforeCommand and afterCommand\n     */\n  }, {\n    key: \"wrapCommand\",\n    value: function wrapCommand(fn) {\n      return function () {\n        this.beforeCommand();\n        fn.apply(this, arguments);\n        this.afterCommand();\n      };\n    }\n    /**\n     * removed (function added by 1der1)\n    */\n  }, {\n    key: \"removed\",\n    value: function removed(rng, node, tagName) {\n      // LB\n      rng = range.create();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        node = rng.ec;\n        if ((tagName = node.tagName) && node.childElementCount === 1 && node.childNodes[0].tagName === \"BR\") {\n          if (tagName === \"P\") {\n            node.remove();\n          } else if (['TH', 'TD'].indexOf(tagName) >= 0) {\n            node.firstChild.remove();\n          }\n        }\n      }\n    }\n    /**\n     * insert image\n     *\n     * @param {String} src\n     * @param {String|Function} param\n     * @return {Promise}\n     */\n  }, {\n    key: \"insertImage\",\n    value: function insertImage(src, param) {\n      var _this3 = this;\n      return createImage(src, param).then(function ($image) {\n        _this3.beforeCommand();\n        if (typeof param === 'function') {\n          param($image);\n        } else {\n          if (typeof param === 'string') {\n            $image.attr('data-filename', param);\n          }\n          $image.css('width', Math.min(_this3.$editable.width(), $image.width()));\n        }\n        $image.show();\n        _this3.getLastRange().insertNode($image[0]);\n        _this3.setLastRange(range.createFromNodeAfter($image[0]).select());\n        _this3.afterCommand();\n      }).fail(function (e) {\n        _this3.context.triggerEvent('image.upload.error', e);\n      });\n    }\n\n    /**\n     * insertImages\n     * @param {File[]} files\n     */\n  }, {\n    key: \"insertImagesAsDataURL\",\n    value: function insertImagesAsDataURL(files) {\n      var _this4 = this;\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(files, function (idx, file) {\n        var filename = file.name;\n        if (_this4.options.maximumImageFileSize && _this4.options.maximumImageFileSize < file.size) {\n          _this4.context.triggerEvent('image.upload.error', _this4.lang.image.maximumFileSizeError);\n        } else {\n          readFileAsDataURL(file).then(function (dataURL) {\n            return _this4.insertImage(dataURL, filename);\n          }).fail(function () {\n            _this4.context.triggerEvent('image.upload.error');\n          });\n        }\n      });\n    }\n\n    /**\n     * insertImagesOrCallback\n     * @param {File[]} files\n     */\n  }, {\n    key: \"insertImagesOrCallback\",\n    value: function insertImagesOrCallback(files) {\n      var callbacks = this.options.callbacks;\n      // If onImageUpload set,\n      if (callbacks.onImageUpload) {\n        this.context.triggerEvent('image.upload', files);\n        // else insert Image as dataURL\n      } else {\n        this.insertImagesAsDataURL(files);\n      }\n    }\n\n    /**\n     * return selected plain text\n     * @return {String} text\n     */\n  }, {\n    key: \"getSelectedText\",\n    value: function getSelectedText() {\n      var rng = this.getLastRange();\n\n      // if range on anchor, expand range with anchor\n      if (rng.isOnAnchor()) {\n        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n      }\n      return rng.toString();\n    }\n  }, {\n    key: \"onFormatBlock\",\n    value: function onFormatBlock(tagName, $target) {\n      // [workaround] for MSIE, IE need `<`\n      document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName);\n\n      // support custom class\n      if ($target && $target.length) {\n        // find the exact element has given tagName\n        if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n          $target = $target.find(tagName);\n        }\n        if ($target && $target.length) {\n          var currentRange = this.createRange();\n          var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()([currentRange.sc, currentRange.ec]).closest(tagName);\n          // remove class added for current block\n          $parent.removeClass();\n          var className = $target[0].className || '';\n          if (className) {\n            $parent.addClass(className);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"formatPara\",\n    value: function formatPara() {\n      this.formatBlock('P');\n    }\n  }, {\n    key: \"fontStyling\",\n    value: function fontStyling(target, value) {\n      var rng = this.getLastRange();\n      if (rng !== '') {\n        var spans = this.style.styleNodes(rng);\n        this.$editor.find('.note-status-output').html('');\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(spans).css(target, value);\n\n        // [workaround] added styled bogus span for style\n        //  - also bogus character needed for cursor position\n        if (rng.isCollapsed()) {\n          var firstSpan = lists.head(spans);\n          if (firstSpan && !dom.nodeLength(firstSpan)) {\n            firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n            range.createFromNode(firstSpan.firstChild).select();\n            this.setLastRange();\n            this.$editable.data(KEY_BOGUS, firstSpan);\n          }\n        } else {\n          rng.select();\n        }\n      } else {\n        var noteStatusOutput = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now();\n        this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n        setTimeout(function () {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('#note-status-output-' + noteStatusOutput).remove();\n        }, 5000);\n      }\n    }\n\n    /**\n     * unlink\n     *\n     * @type command\n     */\n  }, {\n    key: \"unlink\",\n    value: function unlink() {\n      var rng = this.getLastRange();\n      if (rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        rng = range.createFromNode(anchor);\n        rng.select();\n        this.setLastRange();\n        this.beforeCommand();\n        document.execCommand('unlink');\n        this.afterCommand();\n      }\n    }\n\n    /**\n     * returns link info\n     *\n     * @return {Object}\n     * @return {WrappedRange} return.range\n     * @return {String} return.text\n     * @return {Boolean} [return.isNewWindow=true]\n     * @return {String} [return.url=\"\"]\n     */\n  }, {\n    key: \"getLinkInfo\",\n    value: function getLinkInfo() {\n      if (!this.hasFocus()) {\n        this.focus();\n      }\n      var rng = this.getLastRange().expand(dom.isAnchor);\n      // Get the first anchor on range(for edit).\n      var $anchor = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(lists.head(rng.nodes(dom.isAnchor)));\n      var linkInfo = {\n        range: rng,\n        text: rng.toString(),\n        url: $anchor.length ? $anchor.attr('href') : ''\n      };\n\n      // When anchor exists,\n      if ($anchor.length) {\n        // Set isNewWindow by checking its target.\n        linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n      }\n      return linkInfo;\n    }\n  }, {\n    key: \"addRow\",\n    value: function addRow(position) {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addRow(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"addCol\",\n    value: function addCol(position) {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addCol(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteRow(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteCol(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteTable(rng);\n        this.afterCommand();\n      }\n    }\n\n    /**\n     * @param {Position} pos\n     * @param {jQuery} $target - target element\n     * @param {Boolean} [bKeepRatio] - keep ratio\n     */\n  }, {\n    key: \"resizeTo\",\n    value: function resizeTo(pos, $target, bKeepRatio) {\n      var imageSize;\n      if (bKeepRatio) {\n        var newRatio = pos.y / pos.x;\n        var ratio = $target.data('ratio');\n        imageSize = {\n          width: ratio > newRatio ? pos.x : pos.y / ratio,\n          height: ratio > newRatio ? pos.x * ratio : pos.y\n        };\n      } else {\n        imageSize = {\n          width: pos.x,\n          height: pos.y\n        };\n      }\n      $target.css(imageSize);\n    }\n\n    /**\n     * returns whether editable area has focus or not.\n     */\n  }, {\n    key: \"hasFocus\",\n    value: function hasFocus() {\n      return this.$editable.is(':focus');\n    }\n\n    /**\n     * set focus\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // [workaround] Screen will move when page is scolled in IE.\n      //  - do focus when not focused\n      if (!this.hasFocus()) {\n        this.$editable.trigger('focus');\n      }\n    }\n\n    /**\n     * returns whether contents is empty or not.\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n    }\n\n    /**\n     * Removes all contents and restores the editable instance to an _emptyPara_.\n     */\n  }, {\n    key: \"empty\",\n    value: function empty() {\n      this.context.invoke('code', dom.emptyPara);\n    }\n\n    /**\n     * normalize content\n     */\n  }, {\n    key: \"normalizeContent\",\n    value: function normalizeContent() {\n      this.$editable[0].normalize();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Clipboard.js\nfunction Clipboard_typeof(o) { \"@babel/helpers - typeof\"; return Clipboard_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Clipboard_typeof(o); }\nfunction Clipboard_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Clipboard_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Clipboard_toPropertyKey(o.key), o); } }\nfunction Clipboard_createClass(e, r, t) { return r && Clipboard_defineProperties(e.prototype, r), t && Clipboard_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Clipboard_toPropertyKey(t) { var i = Clipboard_toPrimitive(t, \"string\"); return \"symbol\" == Clipboard_typeof(i) ? i : i + \"\"; }\nfunction Clipboard_toPrimitive(t, r) { if (\"object\" != Clipboard_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Clipboard_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar Clipboard = /*#__PURE__*/function () {\n  function Clipboard(context) {\n    Clipboard_classCallCheck(this, Clipboard);\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n  }\n  return Clipboard_createClass(Clipboard, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.$editable.on('paste', this.pasteByEvent.bind(this));\n    }\n\n    /**\n     * paste by clipboard event\n     *\n     * @param {Event} event\n     */\n  }, {\n    key: \"pasteByEvent\",\n    value: function pasteByEvent(event) {\n      var _this = this;\n      if (this.context.isDisabled()) {\n        return;\n      }\n      var clipboardData = event.originalEvent.clipboardData;\n      if (clipboardData && clipboardData.items && clipboardData.items.length) {\n        var clipboardFiles = clipboardData.files;\n        var clipboardText = clipboardData.getData('Text');\n\n        // paste img file\n        if (clipboardFiles.length > 0 && this.options.allowClipboardImagePasting) {\n          this.context.invoke('editor.insertImagesOrCallback', clipboardFiles);\n          event.preventDefault();\n        }\n\n        // paste text with maxTextLength check\n        if (clipboardText.length > 0 && this.context.invoke('editor.isLimited', clipboardText.length)) {\n          event.preventDefault();\n        }\n      } else if (window.clipboardData) {\n        // for IE\n        var text = window.clipboardData.getData('text');\n        if (this.context.invoke('editor.isLimited', text.length)) {\n          event.preventDefault();\n        }\n      }\n\n      // Call editor.afterCommand after proceeding default event handler\n      setTimeout(function () {\n        _this.context.invoke('editor.afterCommand');\n      }, 10);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Dropzone.js\nfunction Dropzone_typeof(o) { \"@babel/helpers - typeof\"; return Dropzone_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Dropzone_typeof(o); }\nfunction Dropzone_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Dropzone_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Dropzone_toPropertyKey(o.key), o); } }\nfunction Dropzone_createClass(e, r, t) { return r && Dropzone_defineProperties(e.prototype, r), t && Dropzone_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Dropzone_toPropertyKey(t) { var i = Dropzone_toPrimitive(t, \"string\"); return \"symbol\" == Dropzone_typeof(i) ? i : i + \"\"; }\nfunction Dropzone_toPrimitive(t, r) { if (\"object\" != Dropzone_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Dropzone_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Dropzone = /*#__PURE__*/function () {\n  function Dropzone(context) {\n    Dropzone_classCallCheck(this, Dropzone);\n    this.context = context;\n    this.$eventListener = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n    this.$dropzone = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-dropzone\">', '<div class=\"note-dropzone-message\"></div>', '</div>'].join('')).prependTo(this.$editor);\n  }\n\n  /**\n   * attach Drag and Drop Events\n   */\n  return Dropzone_createClass(Dropzone, [{\n    key: \"initialize\",\n    value: function initialize() {\n      if (this.options.disableDragAndDrop) {\n        // prevent default drop event\n        this.documentEventHandlers.onDrop = function (e) {\n          e.preventDefault();\n        };\n        // do not consider outside of dropzone\n        this.$eventListener = this.$dropzone;\n        this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n      } else {\n        this.attachDragAndDropEvent();\n      }\n    }\n\n    /**\n     * attach Drag and Drop Events\n     */\n  }, {\n    key: \"attachDragAndDropEvent\",\n    value: function attachDragAndDropEvent() {\n      var _this = this;\n      var collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n      var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n      this.documentEventHandlers.onDragenter = function (e) {\n        var isCodeview = _this.context.invoke('codeview.isActivated');\n        var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0;\n        if (!isCodeview && !collection.length && hasEditorSize) {\n          _this.$editor.addClass('dragover');\n          _this.$dropzone.width(_this.$editor.width());\n          _this.$dropzone.height(_this.$editor.height());\n          $dropzoneMessage.text(_this.lang.image.dragImageHere);\n        }\n        collection = collection.add(e.target);\n      };\n      this.documentEventHandlers.onDragleave = function (e) {\n        collection = collection.not(e.target);\n\n        // If nodeName is BODY, then just make it over (fix for IE)\n        if (!collection.length || e.target.nodeName === 'BODY') {\n          collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n          _this.$editor.removeClass('dragover');\n        }\n      };\n      this.documentEventHandlers.onDrop = function () {\n        collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n        _this.$editor.removeClass('dragover');\n      };\n\n      // show dropzone on dragenter when dragging a object to document\n      // -but only if the editor is visible, i.e. has a positive width and height\n      this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter).on('dragleave', this.documentEventHandlers.onDragleave).on('drop', this.documentEventHandlers.onDrop);\n\n      // change dropzone's message on hover.\n      this.$dropzone.on('dragenter', function () {\n        _this.$dropzone.addClass('hover');\n        $dropzoneMessage.text(_this.lang.image.dropImage);\n      }).on('dragleave', function () {\n        _this.$dropzone.removeClass('hover');\n        $dropzoneMessage.text(_this.lang.image.dragImageHere);\n      });\n\n      // attach dropImage\n      this.$dropzone.on('drop', function (event) {\n        var dataTransfer = event.originalEvent.dataTransfer;\n\n        // stop the browser from opening the dropped content\n        event.preventDefault();\n        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n          _this.$editable.trigger('focus');\n          _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(dataTransfer.types, function (idx, type) {\n            // skip moz-specific types\n            if (type.toLowerCase().indexOf('_moz_') > -1) {\n              return;\n            }\n            var content = dataTransfer.getData(type);\n            if (type.toLowerCase().indexOf('text') > -1) {\n              _this.context.invoke('editor.pasteHTML', content);\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(content).each(function (idx, item) {\n                _this.context.invoke('editor.insertNode', item);\n              });\n            }\n          });\n        }\n      }).on('dragover', false); // prevent default dragover event\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n      Object.keys(this.documentEventHandlers).forEach(function (key) {\n        _this2.$eventListener.off(key.slice(2).toLowerCase(), _this2.documentEventHandlers[key]);\n      });\n      this.documentEventHandlers = {};\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Codeview.js\nfunction Codeview_typeof(o) { \"@babel/helpers - typeof\"; return Codeview_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Codeview_typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction Codeview_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Codeview_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Codeview_toPropertyKey(o.key), o); } }\nfunction Codeview_createClass(e, r, t) { return r && Codeview_defineProperties(e.prototype, r), t && Codeview_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Codeview_toPropertyKey(t) { var i = Codeview_toPrimitive(t, \"string\"); return \"symbol\" == Codeview_typeof(i) ? i : i + \"\"; }\nfunction Codeview_toPrimitive(t, r) { if (\"object\" != Codeview_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Codeview_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n/**\n * @class Codeview\n */\nvar CodeView = /*#__PURE__*/function () {\n  function CodeView(context) {\n    Codeview_classCallCheck(this, CodeView);\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n  return Codeview_createClass(CodeView, [{\n    key: \"sync\",\n    value: function sync(html) {\n      var isCodeview = this.isActivated();\n      var CodeMirror = this.CodeMirrorConstructor;\n      if (isCodeview) {\n        if (html) {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').getDoc().setValue(html);\n          } else {\n            this.$codable.val(html);\n          }\n        } else {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').save();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      this.$codable.on('keyup', function (event) {\n        if (event.keyCode === key.code.ESCAPE) {\n          _this.deactivate();\n        }\n      });\n    }\n\n    /**\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isActivated\",\n    value: function isActivated() {\n      return this.$editor.hasClass('codeview');\n    }\n\n    /**\n     * toggle codeview\n     */\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.isActivated()) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n      this.context.triggerEvent('codeview.toggled');\n    }\n\n    /**\n     * purify input value\n     * @param value\n     * @returns {*}\n     */\n  }, {\n    key: \"purify\",\n    value: function purify(value) {\n      if (this.options.codeviewFilter) {\n        // filter code view regex\n        value = value.replace(this.options.codeviewFilterRegex, '');\n        // allow specific iframe tag\n        if (this.options.codeviewIframeFilter) {\n          var whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n          value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function (tag) {\n            // remove if src attribute is duplicated\n            if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n              return '';\n            }\n            var _iterator = _createForOfIteratorHelper(whitelist),\n              _step;\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var src = _step.value;\n                // pass if src is trusted\n                if (new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"').test(tag)) {\n                  return tag;\n                }\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n            return '';\n          });\n        }\n      }\n      return value;\n    }\n\n    /**\n     * activate code view\n     */\n  }, {\n    key: \"activate\",\n    value: function activate() {\n      var _this2 = this;\n      var CodeMirror = this.CodeMirrorConstructor;\n      this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n      this.$codable.height(this.$editable.height());\n      this.context.invoke('toolbar.updateCodeview', true);\n      this.context.invoke('airPopover.updateCodeview', true);\n      this.$editor.addClass('codeview');\n      this.$codable.trigger('focus');\n\n      // activate CodeMirror as codable\n      if (CodeMirror) {\n        var cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n        // CodeMirror TernServer\n        if (this.options.codemirror.tern) {\n          var server = new CodeMirror.TernServer(this.options.codemirror.tern);\n          cmEditor.ternServer = server;\n          cmEditor.on('cursorActivity', function (cm) {\n            server.updateArgHints(cm);\n          });\n        }\n        cmEditor.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n        });\n        cmEditor.on('change', function () {\n          _this2.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n        });\n\n        // CodeMirror hasn't Padding.\n        cmEditor.setSize(null, this.$editable.outerHeight());\n        this.$codable.data('cmEditor', cmEditor);\n      } else {\n        this.$codable.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', _this2.$codable.val(), event);\n        });\n        this.$codable.on('input', function () {\n          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);\n        });\n      }\n    }\n\n    /**\n     * deactivate code view\n     */\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      var CodeMirror = this.CodeMirrorConstructor;\n      // deactivate CodeMirror as codable\n      if (CodeMirror) {\n        var cmEditor = this.$codable.data('cmEditor');\n        this.$codable.val(cmEditor.getValue());\n        cmEditor.toTextArea();\n      }\n      var value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n      var isChange = this.$editable.html() !== value;\n      this.$editable.html(value);\n      this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n      this.$editor.removeClass('codeview');\n      if (isChange) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n      this.$editable.trigger('focus');\n      this.context.invoke('toolbar.updateCodeview', false);\n      this.context.invoke('airPopover.updateCodeview', false);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isActivated()) {\n        this.deactivate();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Statusbar.js\nfunction Statusbar_typeof(o) { \"@babel/helpers - typeof\"; return Statusbar_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Statusbar_typeof(o); }\nfunction Statusbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Statusbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Statusbar_toPropertyKey(o.key), o); } }\nfunction Statusbar_createClass(e, r, t) { return r && Statusbar_defineProperties(e.prototype, r), t && Statusbar_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Statusbar_toPropertyKey(t) { var i = Statusbar_toPrimitive(t, \"string\"); return \"symbol\" == Statusbar_typeof(i) ? i : i + \"\"; }\nfunction Statusbar_toPrimitive(t, r) { if (\"object\" != Statusbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Statusbar_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar EDITABLE_PADDING = 24;\nvar Statusbar = /*#__PURE__*/function () {\n  function Statusbar(context) {\n    Statusbar_classCallCheck(this, Statusbar);\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n  }\n  return Statusbar_createClass(Statusbar, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      if (this.options.airMode || this.options.disableResizeEditor) {\n        this.destroy();\n        return;\n      }\n      this.$statusbar.on('mousedown touchstart', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        var editableTop = _this.$editable.offset().top - _this.$document.scrollTop();\n        var editableCodeTop = _this.$codable.offset().top - _this.$document.scrollTop();\n        var onStatusbarMove = function onStatusbarMove(event) {\n          var originalEvent = event.type == 'mousemove' ? event : event.originalEvent.touches[0];\n          var height = originalEvent.clientY - (editableTop + EDITABLE_PADDING);\n          var heightCode = originalEvent.clientY - (editableCodeTop + EDITABLE_PADDING);\n          height = _this.options.minheight > 0 ? Math.max(height, _this.options.minheight) : height;\n          height = _this.options.maxHeight > 0 ? Math.min(height, _this.options.maxHeight) : height;\n          heightCode = _this.options.minheight > 0 ? Math.max(heightCode, _this.options.minheight) : heightCode;\n          heightCode = _this.options.maxHeight > 0 ? Math.min(heightCode, _this.options.maxHeight) : heightCode;\n          _this.$editable.height(height);\n          _this.$codable.height(heightCode);\n        };\n        _this.$document.on('mousemove touchmove', onStatusbarMove).one('mouseup touchend', function () {\n          _this.$document.off('mousemove touchmove', onStatusbarMove);\n        });\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$statusbar.off();\n      this.$statusbar.addClass('locked');\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Fullscreen.js\nfunction Fullscreen_typeof(o) { \"@babel/helpers - typeof\"; return Fullscreen_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Fullscreen_typeof(o); }\nfunction Fullscreen_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Fullscreen_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Fullscreen_toPropertyKey(o.key), o); } }\nfunction Fullscreen_createClass(e, r, t) { return r && Fullscreen_defineProperties(e.prototype, r), t && Fullscreen_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Fullscreen_toPropertyKey(t) { var i = Fullscreen_toPrimitive(t, \"string\"); return \"symbol\" == Fullscreen_typeof(i) ? i : i + \"\"; }\nfunction Fullscreen_toPrimitive(t, r) { if (\"object\" != Fullscreen_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Fullscreen_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Fullscreen = /*#__PURE__*/function () {\n  function Fullscreen(context) {\n    var _this = this;\n    Fullscreen_classCallCheck(this, Fullscreen);\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);\n    this.$scrollbar = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('html, body');\n    this.scrollbarClassName = 'note-fullscreen-body';\n    this.onResize = function () {\n      _this.resizeTo({\n        h: _this.$window.height() - _this.$toolbar.outerHeight()\n      });\n    };\n  }\n  return Fullscreen_createClass(Fullscreen, [{\n    key: \"resizeTo\",\n    value: function resizeTo(size) {\n      this.$editable.css('height', size.h);\n      this.$codable.css('height', size.h);\n      if (this.$codable.data('cmeditor')) {\n        this.$codable.data('cmeditor').setsize(null, size.h);\n      }\n    }\n\n    /**\n     * toggle fullscreen\n     */\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      this.$editor.toggleClass('fullscreen');\n      var isFullscreen = this.isFullscreen();\n      this.$scrollbar.toggleClass(this.scrollbarClassName, isFullscreen);\n      if (isFullscreen) {\n        this.$editable.data('orgHeight', this.$editable.css('height'));\n        this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n        this.$editable.css('maxHeight', '');\n        this.$window.on('resize', this.onResize).trigger('resize');\n      } else {\n        this.$window.off('resize', this.onResize);\n        this.resizeTo({\n          h: this.$editable.data('orgHeight')\n        });\n        this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n      }\n      this.context.invoke('toolbar.updateFullscreen', isFullscreen);\n    }\n  }, {\n    key: \"isFullscreen\",\n    value: function isFullscreen() {\n      return this.$editor.hasClass('fullscreen');\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$scrollbar.removeClass(this.scrollbarClassName);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Handle.js\nfunction Handle_typeof(o) { \"@babel/helpers - typeof\"; return Handle_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Handle_typeof(o); }\nfunction Handle_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Handle_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Handle_toPropertyKey(o.key), o); } }\nfunction Handle_createClass(e, r, t) { return r && Handle_defineProperties(e.prototype, r), t && Handle_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Handle_toPropertyKey(t) { var i = Handle_toPrimitive(t, \"string\"); return \"symbol\" == Handle_typeof(i) ? i : i + \"\"; }\nfunction Handle_toPrimitive(t, r) { if (\"object\" != Handle_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Handle_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar Handle = /*#__PURE__*/function () {\n  function Handle(context) {\n    var _this = this;\n    Handle_classCallCheck(this, Handle);\n    this.context = context;\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        if (_this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n  return Handle_createClass(Handle, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$handle = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-handle\">', '<div class=\"note-control-selection\">', '<div class=\"note-control-selection-bg\"></div>', '<div class=\"note-control-holder note-control-nw\"></div>', '<div class=\"note-control-holder note-control-ne\"></div>', '<div class=\"note-control-holder note-control-sw\"></div>', '<div class=\"', this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing', ' note-control-se\"></div>', this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>', '</div>', '</div>'].join('')).prependTo(this.$editingArea);\n      this.$handle.on('mousedown', function (event) {\n        if (dom.isControlSizing(event.target)) {\n          event.preventDefault();\n          event.stopPropagation();\n          var $target = _this2.$handle.find('.note-control-selection').data('target');\n          var posStart = $target.offset();\n          var scrollTop = _this2.$document.scrollTop();\n          var onMouseMove = function onMouseMove(event) {\n            _this2.context.invoke('editor.resizeTo', {\n              x: event.clientX - posStart.left,\n              y: event.clientY - (posStart.top - scrollTop)\n            }, $target, !event.shiftKey);\n            _this2.update($target[0], event);\n          };\n          _this2.$document.on('mousemove', onMouseMove).one('mouseup', function (e) {\n            e.preventDefault();\n            _this2.$document.off('mousemove', onMouseMove);\n            _this2.context.invoke('editor.afterCommand');\n          });\n          if (!$target.data('ratio')) {\n            // original ratio.\n            $target.data('ratio', $target.height() / $target.width());\n          }\n        }\n      });\n\n      // Listen for scrolling on the handle overlay.\n      this.$handle.on('wheel', function (event) {\n        event.preventDefault();\n        _this2.update();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$handle.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n      var isImage = dom.isImg(target);\n      var $selection = this.$handle.find('.note-control-selection');\n      this.context.invoke('imagePopover.update', target, event);\n      if (isImage) {\n        var $image = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target);\n        var areaRect = this.$editingArea[0].getBoundingClientRect();\n        var imageRect = target.getBoundingClientRect();\n        $selection.css({\n          display: 'block',\n          left: imageRect.left - areaRect.left,\n          top: imageRect.top - areaRect.top,\n          width: imageRect.width,\n          height: imageRect.height\n        }).data('target', $image); // save current image element.\n\n        var origImageObj = new Image();\n        origImageObj.src = $image.attr('src');\n        var sizingText = imageRect.width + 'x' + imageRect.height + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n        $selection.find('.note-control-selection-info').text(sizingText);\n        this.context.invoke('editor.saveTarget', target);\n      } else {\n        this.hide();\n      }\n      return isImage;\n    }\n\n    /**\n     * hide\n     *\n     * @param {jQuery} $handle\n     */\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.context.invoke('editor.clearTarget');\n      this.$handle.children().hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoLink.js\nfunction AutoLink_typeof(o) { \"@babel/helpers - typeof\"; return AutoLink_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoLink_typeof(o); }\nfunction AutoLink_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoLink_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoLink_toPropertyKey(o.key), o); } }\nfunction AutoLink_createClass(e, r, t) { return r && AutoLink_defineProperties(e.prototype, r), t && AutoLink_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoLink_toPropertyKey(t) { var i = AutoLink_toPrimitive(t, \"string\"); return \"symbol\" == AutoLink_typeof(i) ? i : i + \"\"; }\nfunction AutoLink_toPrimitive(t, r) { if (\"object\" != AutoLink_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoLink_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar defaultScheme = 'http://';\nvar linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@|xmpp:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\nvar AutoLink = /*#__PURE__*/function () {\n  function AutoLink(context) {\n    var _this = this;\n    AutoLink_classCallCheck(this, AutoLink);\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      }\n    };\n  }\n  return AutoLink_createClass(AutoLink, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWordRange) {\n        return;\n      }\n      var keyword = this.lastWordRange.toString();\n      var match = keyword.match(linkPattern);\n      if (match && (match[1] || match[2])) {\n        var link = match[1] ? keyword : defaultScheme + keyword;\n        var urlText = this.options.showDomainOnlyForAutolink ? keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:xmpp?:?)?(?:www\\.)?/i, '').split('/')[0] : keyword;\n        var node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a></a>').html(urlText).attr('href', link)[0];\n        if (this.context.options.linkTargetBlank) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).attr('target', '_blank');\n        }\n        this.lastWordRange.insertNode(node);\n        this.lastWordRange = null;\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      if (lists.contains([key.code.ENTER, key.code.SPACE], event.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWordRange = wordRange;\n      }\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      if (key.code.SPACE === event.keyCode || key.code.ENTER === event.keyCode && !event.shiftKey) {\n        this.replace();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoSync.js\nfunction AutoSync_typeof(o) { \"@babel/helpers - typeof\"; return AutoSync_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoSync_typeof(o); }\nfunction AutoSync_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoSync_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoSync_toPropertyKey(o.key), o); } }\nfunction AutoSync_createClass(e, r, t) { return r && AutoSync_defineProperties(e.prototype, r), t && AutoSync_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoSync_toPropertyKey(t) { var i = AutoSync_toPrimitive(t, \"string\"); return \"symbol\" == AutoSync_typeof(i) ? i : i + \"\"; }\nfunction AutoSync_toPrimitive(t, r) { if (\"object\" != AutoSync_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoSync_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n/**\n * textarea auto sync.\n */\nvar AutoSync = /*#__PURE__*/function () {\n  function AutoSync(context) {\n    var _this = this;\n    AutoSync_classCallCheck(this, AutoSync);\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': function summernoteChange() {\n        _this.$note.val(context.invoke('code'));\n      }\n    };\n  }\n  return AutoSync_createClass(AutoSync, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return dom.isTextarea(this.$note[0]);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoReplace.js\nfunction AutoReplace_typeof(o) { \"@babel/helpers - typeof\"; return AutoReplace_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoReplace_typeof(o); }\nfunction AutoReplace_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoReplace_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoReplace_toPropertyKey(o.key), o); } }\nfunction AutoReplace_createClass(e, r, t) { return r && AutoReplace_defineProperties(e.prototype, r), t && AutoReplace_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoReplace_toPropertyKey(t) { var i = AutoReplace_toPrimitive(t, \"string\"); return \"symbol\" == AutoReplace_typeof(i) ? i : i + \"\"; }\nfunction AutoReplace_toPrimitive(t, r) { if (\"object\" != AutoReplace_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoReplace_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar AutoReplace = /*#__PURE__*/function () {\n  function AutoReplace(context) {\n    var _this = this;\n    AutoReplace_classCallCheck(this, AutoReplace);\n    this.context = context;\n    this.options = context.options.replace || {};\n    this.keys = [key.code.ENTER, key.code.SPACE, key.code.PERIOD, key.code.COMMA, key.code.SEMICOLON, key.code.SLASH];\n    this.previousKeydownCode = null;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      }\n    };\n  }\n  return AutoReplace_createClass(AutoReplace, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.match;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWord) {\n        return;\n      }\n      var self = this;\n      var keyword = this.lastWord.toString();\n      this.options.match(keyword, function (match) {\n        if (match) {\n          var node = '';\n          if (typeof match === 'string') {\n            node = dom.createText(match);\n          } else if (match instanceof jQuery) {\n            node = match[0];\n          } else if (match instanceof Node) {\n            node = match;\n          }\n          if (!node) return;\n          self.lastWord.insertNode(node);\n          self.lastWord = null;\n          self.context.invoke('editor.focus');\n        }\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      // this forces it to remember the last whole word, even if multiple termination keys are pressed\n      // before the previous key is let go.\n      if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n        this.previousKeydownCode = event.keyCode;\n        return;\n      }\n      if (lists.contains(this.keys, event.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWord = wordRange;\n      }\n      this.previousKeydownCode = event.keyCode;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      if (lists.contains(this.keys, event.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Placeholder.js\nfunction Placeholder_typeof(o) { \"@babel/helpers - typeof\"; return Placeholder_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Placeholder_typeof(o); }\nfunction Placeholder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Placeholder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Placeholder_toPropertyKey(o.key), o); } }\nfunction Placeholder_createClass(e, r, t) { return r && Placeholder_defineProperties(e.prototype, r), t && Placeholder_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Placeholder_toPropertyKey(t) { var i = Placeholder_toPrimitive(t, \"string\"); return \"symbol\" == Placeholder_typeof(i) ? i : i + \"\"; }\nfunction Placeholder_toPrimitive(t, r) { if (\"object\" != Placeholder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Placeholder_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Placeholder = /*#__PURE__*/function () {\n  function Placeholder(context) {\n    var _this = this;\n    Placeholder_classCallCheck(this, Placeholder);\n    this.context = context;\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n    this.events = {\n      'summernote.init summernote.change': function summernoteInitSummernoteChange() {\n        _this.update();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n  return Placeholder_createClass(Placeholder, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.placeholder;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-placeholder\"></div>');\n      this.$placeholder.on('click', function () {\n        _this2.context.invoke('focus');\n      }).html(this.options.placeholder).prependTo(this.$editingArea);\n      this.update();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$placeholder.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n      this.$placeholder.toggle(isShow);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Buttons.js\nfunction Buttons_typeof(o) { \"@babel/helpers - typeof\"; return Buttons_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Buttons_typeof(o); }\nfunction Buttons_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Buttons_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Buttons_toPropertyKey(o.key), o); } }\nfunction Buttons_createClass(e, r, t) { return r && Buttons_defineProperties(e.prototype, r), t && Buttons_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Buttons_toPropertyKey(t) { var i = Buttons_toPrimitive(t, \"string\"); return \"symbol\" == Buttons_typeof(i) ? i : i + \"\"; }\nfunction Buttons_toPrimitive(t, r) { if (\"object\" != Buttons_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Buttons_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Buttons = /*#__PURE__*/function () {\n  function Buttons(context) {\n    Buttons_classCallCheck(this, Buttons);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']);\n  }\n  return Buttons_createClass(Buttons, [{\n    key: \"representShortcut\",\n    value: function representShortcut(editorMethod) {\n      var shortcut = this.invertedKeyMap[editorMethod];\n      if (!this.options.shortcuts || !shortcut) {\n        return '';\n      }\n      if (env.isMac) {\n        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n      }\n      shortcut = shortcut.replace('BACKSLASH', '\\\\').replace('SLASH', '/').replace('LEFTBRACKET', '[').replace('RIGHTBRACKET', ']');\n      return ' (' + shortcut + ')';\n    }\n  }, {\n    key: \"button\",\n    value: function button(o) {\n      if (!this.options.tooltip && o.tooltip) {\n        delete o.tooltip;\n      }\n      o.container = this.options.container;\n      return this.ui.button(o);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.addToolbarButtons();\n      this.addImagePopoverButtons();\n      this.addLinkPopoverButtons();\n      this.addTablePopoverButtons();\n      this.fontInstalledMap = {};\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      delete this.fontInstalledMap;\n    }\n  }, {\n    key: \"isFontInstalled\",\n    value: function isFontInstalled(name) {\n      if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n        this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name);\n      }\n      return this.fontInstalledMap[name];\n    }\n  }, {\n    key: \"isFontDeservedToAdd\",\n    value: function isFontDeservedToAdd(name) {\n      name = name.toLowerCase();\n      return name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1;\n    }\n  }, {\n    key: \"colorPalette\",\n    value: function colorPalette(className, tooltip, backColor, foreColor) {\n      var _this = this;\n      return this.ui.buttonGroup({\n        className: 'note-color ' + className,\n        children: [this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: function click(event) {\n            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget);\n            if (backColor && foreColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor')\n              });\n            } else if (backColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor')\n              });\n            } else if (foreColor) {\n              _this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor')\n              });\n            }\n          },\n          callback: function callback($button) {\n            var $recentColor = $button.find('.note-recent-color');\n            if (backColor) {\n              $recentColor.css('background-color', _this.options.colorButton.backColor);\n              $button.attr('data-backColor', _this.options.colorButton.backColor);\n            }\n            if (foreColor) {\n              $recentColor.css('color', _this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', _this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          }\n        }), this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), this.ui.dropdown({\n          items: (backColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">', this.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"backColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette-' + this.options.id + '\">', '</div>', '<div class=\"note-holder-custom\" id=\"backColorPalette-' + this.options.id + '\" data-event=\"backColor\"></div>', '</div>'].join('') : '') + (foreColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">', this.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"foreColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette-' + this.options.id + '\">', '</div>',\n          // Fix missing Div, Commented to find easily if it's wrong\n          '<div class=\"note-holder-custom\" id=\"foreColorPalette-' + this.options.id + '\" data-event=\"foreColor\"></div>', '</div>'].join('') : ''),\n          callback: function callback($dropdown) {\n            $dropdown.find('.note-holder').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: _this.options.colors,\n                colorsName: _this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n            var customColors = [['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF']];\n            $dropdown.find('.note-holder-custom').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each(function (idx, item) {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).on(\"change\", function () {\n                var $chip = $dropdown.find('#' + external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this).data('event')).find('.note-color-btn').first();\n                var color = this.value.toUpperCase();\n                $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n                $chip.trigger('click');\n              });\n            });\n          },\n          click: function click(event) {\n            event.stopPropagation();\n            var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.' + className).find('.note-dropdown-menu');\n            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n            var eventName = $button.data('event');\n            var value = $button.attr('data-value');\n            if (eventName === 'openPalette') {\n              var $picker = $parent.find('#' + value);\n              var $palette = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]);\n\n              // Shift palette chips\n              var $chip = $palette.find('.note-color-btn').last().detach();\n\n              // Set chip attributes\n              var color = $picker.val();\n              $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.trigger('click');\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                var key = eventName === 'backColor' ? 'background-color' : 'color';\n                var $color = $button.closest('.note-color').find('.note-recent-color');\n                var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n              _this.context.invoke('editor.' + eventName, value);\n            }\n          }\n        })]\n      }).render();\n    }\n  }, {\n    key: \"addToolbarButtons\",\n    value: function addToolbarButtons() {\n      var _this2 = this;\n      this.context.memo('button.style', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.magic), _this2.options),\n          tooltip: _this2.lang.style.style,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          className: 'dropdown-style',\n          items: _this2.options.styleTags,\n          title: _this2.lang.style.style,\n          template: function template(item) {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: Object.prototype.hasOwnProperty.call(_this2.lang.style, item) ? _this2.lang.style[item] : item\n              };\n            }\n            var tag = item.tag;\n            var title = item.title;\n            var style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            var className = item.className ? ' class=\"' + item.className + '\"' : '';\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: _this2.context.createInvokeHandler('editor.formatBlock')\n        })]).render();\n      });\n      var _loop = function _loop() {\n        var item = _this2.options.styleTags[styleIdx];\n        _this2.context.memo('button.style.' + item, function () {\n          return _this2.button({\n            className: 'note-btn-style-' + item,\n            contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n            tooltip: _this2.lang.style[item],\n            click: _this2.context.createInvokeHandler('editor.formatBlock')\n          }).render();\n        });\n      };\n      for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n        _loop();\n      }\n      this.context.memo('button.bold', function () {\n        return _this2.button({\n          className: 'note-btn-bold',\n          contents: _this2.ui.icon(_this2.options.icons.bold),\n          tooltip: _this2.lang.font.bold + _this2.representShortcut('bold'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.bold')\n        }).render();\n      });\n      this.context.memo('button.italic', function () {\n        return _this2.button({\n          className: 'note-btn-italic',\n          contents: _this2.ui.icon(_this2.options.icons.italic),\n          tooltip: _this2.lang.font.italic + _this2.representShortcut('italic'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.italic')\n        }).render();\n      });\n      this.context.memo('button.underline', function () {\n        return _this2.button({\n          className: 'note-btn-underline',\n          contents: _this2.ui.icon(_this2.options.icons.underline),\n          tooltip: _this2.lang.font.underline + _this2.representShortcut('underline'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.underline')\n        }).render();\n      });\n      this.context.memo('button.clear', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.eraser),\n          tooltip: _this2.lang.font.clear + _this2.representShortcut('removeFormat'),\n          click: _this2.context.createInvokeHandler('editor.removeFormat')\n        }).render();\n      });\n      this.context.memo('button.strikethrough', function () {\n        return _this2.button({\n          className: 'note-btn-strikethrough',\n          contents: _this2.ui.icon(_this2.options.icons.strikethrough),\n          tooltip: _this2.lang.font.strikethrough + _this2.representShortcut('strikethrough'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n        }).render();\n      });\n      this.context.memo('button.superscript', function () {\n        return _this2.button({\n          className: 'note-btn-superscript',\n          contents: _this2.ui.icon(_this2.options.icons.superscript),\n          tooltip: _this2.lang.font.superscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.superscript')\n        }).render();\n      });\n      this.context.memo('button.subscript', function () {\n        return _this2.button({\n          className: 'note-btn-subscript',\n          contents: _this2.ui.icon(_this2.options.icons.subscript),\n          tooltip: _this2.lang.font.subscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.subscript')\n        }).render();\n      });\n      this.context.memo('button.fontname', function () {\n        var styleInfo = _this2.context.invoke('editor.currentStyle');\n        if (_this2.options.addDefaultFonts) {\n          // Add 'default' fonts into the fontnames array if not exist\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(styleInfo['font-family'].split(','), function (idx, fontname) {\n            fontname = fontname.trim().replace(/['\"]+/g, '');\n            if (_this2.isFontDeservedToAdd(fontname)) {\n              if (_this2.options.fontNames.indexOf(fontname) === -1) {\n                _this2.options.fontNames.push(fontname);\n              }\n            }\n          });\n        }\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontname\"></span>', _this2.options),\n          tooltip: _this2.lang.font.name,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontNames.filter(_this2.isFontInstalled.bind(_this2)),\n          title: _this2.lang.font.name,\n          template: function template(item) {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontName')\n        })]).render();\n      });\n      this.context.memo('button.fontsize', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', _this2.options),\n          tooltip: _this2.lang.font.size,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizes,\n          title: _this2.lang.font.size,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n        })]).render();\n      });\n      this.context.memo('button.fontsizeunit', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', _this2.options),\n          tooltip: _this2.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizeUnits,\n          title: _this2.lang.font.sizeunit,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit')\n        })]).render();\n      });\n      this.context.memo('button.color', function () {\n        return _this2.colorPalette('note-color-all', _this2.lang.color.recent, true, true);\n      });\n      this.context.memo('button.forecolor', function () {\n        return _this2.colorPalette('note-color-fore', _this2.lang.color.foreground, false, true);\n      });\n      this.context.memo('button.backcolor', function () {\n        return _this2.colorPalette('note-color-back', _this2.lang.color.background, true, false);\n      });\n      this.context.memo('button.ul', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.unorderedlist),\n          tooltip: _this2.lang.lists.unordered + _this2.representShortcut('insertUnorderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertUnorderedList')\n        }).render();\n      });\n      this.context.memo('button.ol', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.orderedlist),\n          tooltip: _this2.lang.lists.ordered + _this2.representShortcut('insertOrderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertOrderedList')\n        }).render();\n      });\n      var justifyLeft = this.button({\n        contents: this.ui.icon(this.options.icons.alignLeft),\n        tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n        click: this.context.createInvokeHandler('editor.justifyLeft')\n      });\n      var justifyCenter = this.button({\n        contents: this.ui.icon(this.options.icons.alignCenter),\n        tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n        click: this.context.createInvokeHandler('editor.justifyCenter')\n      });\n      var justifyRight = this.button({\n        contents: this.ui.icon(this.options.icons.alignRight),\n        tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n        click: this.context.createInvokeHandler('editor.justifyRight')\n      });\n      var justifyFull = this.button({\n        contents: this.ui.icon(this.options.icons.alignJustify),\n        tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n        click: this.context.createInvokeHandler('editor.justifyFull')\n      });\n      var outdent = this.button({\n        contents: this.ui.icon(this.options.icons.outdent),\n        tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n        click: this.context.createInvokeHandler('editor.outdent')\n      });\n      var indent = this.button({\n        contents: this.ui.icon(this.options.icons.indent),\n        tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n        click: this.context.createInvokeHandler('editor.indent')\n      });\n      this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n      this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n      this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n      this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n      this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n      this.context.memo('button.indent', func.invoke(indent, 'render'));\n      this.context.memo('button.paragraph', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.alignLeft), _this2.options),\n          tooltip: _this2.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown([_this2.ui.buttonGroup({\n          className: 'note-align',\n          children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n        }), _this2.ui.buttonGroup({\n          className: 'note-list',\n          children: [outdent, indent]\n        })])]).render();\n      });\n      this.context.memo('button.height', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.textHeight), _this2.options),\n          tooltip: _this2.lang.font.height,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          items: _this2.options.lineHeights,\n          checkClassName: _this2.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: _this2.lang.font.height,\n          click: _this2.context.createInvokeHandler('editor.lineHeight')\n        })]).render();\n      });\n      this.context.memo('button.table', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.table), _this2.options),\n          tooltip: _this2.lang.table.table,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          title: _this2.lang.table.table,\n          className: 'note-table',\n          items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n        })], {\n          callback: function callback($node) {\n            var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n            $catcher.css({\n              width: _this2.options.insertTableMaxSize.col + 'em',\n              height: _this2.options.insertTableMaxSize.row + 'em'\n            }).on('mousedown', _this2.context.createInvokeHandler('editor.insertTable')).on('mousemove', _this2.tableMoveHandler.bind(_this2));\n          }\n        }).render();\n      });\n      this.context.memo('button.link', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.link),\n          tooltip: _this2.lang.link.link + _this2.representShortcut('linkDialog.show'),\n          click: _this2.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.picture', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.picture),\n          tooltip: _this2.lang.image.image,\n          click: _this2.context.createInvokeHandler('imageDialog.show')\n        }).render();\n      });\n      this.context.memo('button.video', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.video),\n          tooltip: _this2.lang.video.video,\n          click: _this2.context.createInvokeHandler('videoDialog.show')\n        }).render();\n      });\n      this.context.memo('button.hr', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.minus),\n          tooltip: _this2.lang.hr.insert + _this2.representShortcut('insertHorizontalRule'),\n          click: _this2.context.createInvokeHandler('editor.insertHorizontalRule')\n        }).render();\n      });\n      this.context.memo('button.fullscreen', function () {\n        return _this2.button({\n          className: 'btn-fullscreen note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.arrowsAlt),\n          tooltip: _this2.lang.options.fullscreen,\n          click: _this2.context.createInvokeHandler('fullscreen.toggle')\n        }).render();\n      });\n      this.context.memo('button.codeview', function () {\n        return _this2.button({\n          className: 'btn-codeview note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.code),\n          tooltip: _this2.lang.options.codeview,\n          click: _this2.context.createInvokeHandler('codeview.toggle')\n        }).render();\n      });\n      this.context.memo('button.redo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.redo),\n          tooltip: _this2.lang.history.redo + _this2.representShortcut('redo'),\n          click: _this2.context.createInvokeHandler('editor.redo')\n        }).render();\n      });\n      this.context.memo('button.undo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.undo),\n          tooltip: _this2.lang.history.undo + _this2.representShortcut('undo'),\n          click: _this2.context.createInvokeHandler('editor.undo')\n        }).render();\n      });\n      this.context.memo('button.help', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.question),\n          tooltip: _this2.lang.options.help,\n          click: _this2.context.createInvokeHandler('helpDialog.show')\n        }).render();\n      });\n    }\n\n    /**\n     * image: [\n     *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n     *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n     *   ['remove', ['removeMedia']],\n     * ],\n     */\n  }, {\n    key: \"addImagePopoverButtons\",\n    value: function addImagePopoverButtons() {\n      var _this3 = this;\n      // Image Size Buttons\n      this.context.memo('button.resizeFull', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">100%</span>',\n          tooltip: _this3.lang.image.resizeFull,\n          click: _this3.context.createInvokeHandler('editor.resize', '1')\n        }).render();\n      });\n      this.context.memo('button.resizeHalf', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">50%</span>',\n          tooltip: _this3.lang.image.resizeHalf,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.5')\n        }).render();\n      });\n      this.context.memo('button.resizeQuarter', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">25%</span>',\n          tooltip: _this3.lang.image.resizeQuarter,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.25')\n        }).render();\n      });\n      this.context.memo('button.resizeNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.resizeNone,\n          click: _this3.context.createInvokeHandler('editor.resize', '0')\n        }).render();\n      });\n\n      // Float Buttons\n      this.context.memo('button.floatLeft', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatLeft),\n          tooltip: _this3.lang.image.floatLeft,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'left')\n        }).render();\n      });\n      this.context.memo('button.floatRight', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatRight),\n          tooltip: _this3.lang.image.floatRight,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'right')\n        }).render();\n      });\n      this.context.memo('button.floatNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.floatNone,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'none')\n        }).render();\n      });\n\n      // Remove Buttons\n      this.context.memo('button.removeMedia', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.trash),\n          tooltip: _this3.lang.image.remove,\n          click: _this3.context.createInvokeHandler('editor.removeMedia')\n        }).render();\n      });\n    }\n  }, {\n    key: \"addLinkPopoverButtons\",\n    value: function addLinkPopoverButtons() {\n      var _this4 = this;\n      this.context.memo('button.linkDialogShow', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.link),\n          tooltip: _this4.lang.link.edit,\n          click: _this4.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.unlink', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.unlink),\n          tooltip: _this4.lang.link.unlink,\n          click: _this4.context.createInvokeHandler('editor.unlink')\n        }).render();\n      });\n    }\n\n    /**\n     * table : [\n     *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n     *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n     * ],\n     */\n  }, {\n    key: \"addTablePopoverButtons\",\n    value: function addTablePopoverButtons() {\n      var _this5 = this;\n      this.context.memo('button.addRowUp', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowAbove),\n          tooltip: _this5.lang.table.addRowAbove,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'top')\n        }).render();\n      });\n      this.context.memo('button.addRowDown', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowBelow),\n          tooltip: _this5.lang.table.addRowBelow,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'bottom')\n        }).render();\n      });\n      this.context.memo('button.addColLeft', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colBefore),\n          tooltip: _this5.lang.table.addColLeft,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'left')\n        }).render();\n      });\n      this.context.memo('button.addColRight', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colAfter),\n          tooltip: _this5.lang.table.addColRight,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'right')\n        }).render();\n      });\n      this.context.memo('button.deleteRow', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowRemove),\n          tooltip: _this5.lang.table.delRow,\n          click: _this5.context.createInvokeHandler('editor.deleteRow')\n        }).render();\n      });\n      this.context.memo('button.deleteCol', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colRemove),\n          tooltip: _this5.lang.table.delCol,\n          click: _this5.context.createInvokeHandler('editor.deleteCol')\n        }).render();\n      });\n      this.context.memo('button.deleteTable', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.trash),\n          tooltip: _this5.lang.table.delTable,\n          click: _this5.context.createInvokeHandler('editor.deleteTable')\n        }).render();\n      });\n    }\n  }, {\n    key: \"build\",\n    value: function build($container, groups) {\n      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n        var group = groups[groupIdx];\n        var groupName = Array.isArray(group) ? group[0] : group;\n        var buttons = Array.isArray(group) ? group.length === 1 ? [group[0]] : group[1] : [group];\n        var $group = this.ui.buttonGroup({\n          className: 'note-' + groupName\n        }).render();\n        for (var idx = 0, len = buttons.length; idx < len; idx++) {\n          var btn = this.context.memo('button.' + buttons[idx]);\n          if (btn) {\n            $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n          }\n        }\n        $group.appendTo($container);\n      }\n    }\n\n    /**\n     * @param {jQuery} [$container]\n     */\n  }, {\n    key: \"updateCurrentStyle\",\n    value: function updateCurrentStyle($container) {\n      var $cont = $container || this.$toolbar;\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      this.updateBtnStates($cont, {\n        '.note-btn-bold': function noteBtnBold() {\n          return styleInfo['font-bold'] === 'bold';\n        },\n        '.note-btn-italic': function noteBtnItalic() {\n          return styleInfo['font-italic'] === 'italic';\n        },\n        '.note-btn-underline': function noteBtnUnderline() {\n          return styleInfo['font-underline'] === 'underline';\n        },\n        '.note-btn-subscript': function noteBtnSubscript() {\n          return styleInfo['font-subscript'] === 'subscript';\n        },\n        '.note-btn-superscript': function noteBtnSuperscript() {\n          return styleInfo['font-superscript'] === 'superscript';\n        },\n        '.note-btn-strikethrough': function noteBtnStrikethrough() {\n          return styleInfo['font-strikethrough'] === 'strikethrough';\n        }\n      });\n      if (styleInfo['font-family']) {\n        var fontNames = styleInfo['font-family'].split(',').map(function (name) {\n          return name.replace(/[\\'\\\"]/g, '').replace(/\\s+$/, '').replace(/^\\s+/, '');\n        });\n        var fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n        $cont.find('.dropdown-fontname a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare string to avoid creating another func.\n          var isChecked = $item.data('value') + '' === fontName + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n      }\n      if (styleInfo['font-size']) {\n        var fontSize = styleInfo['font-size'];\n        $cont.find('.dropdown-fontsize a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare with string to avoid creating another func.\n          var isChecked = $item.data('value') + '' === fontSize + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsize').text(fontSize);\n        var fontSizeUnit = styleInfo['font-size-unit'];\n        $cont.find('.dropdown-fontsizeunit a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          var isChecked = $item.data('value') + '' === fontSizeUnit + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n      }\n      if (styleInfo['line-height']) {\n        var lineHeight = styleInfo['line-height'];\n        $cont.find('.dropdown-line-height a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare with string to avoid creating another func.\n          var isChecked = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).data('value') + '' === lineHeight + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-line-height').text(lineHeight);\n      }\n    }\n  }, {\n    key: \"updateBtnStates\",\n    value: function updateBtnStates($container, infos) {\n      var _this6 = this;\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(infos, function (selector, pred) {\n        _this6.ui.toggleBtnActive($container.find(selector), pred());\n      });\n    }\n  }, {\n    key: \"tableMoveHandler\",\n    value: function tableMoveHandler(event) {\n      var PX_PER_EM = 18;\n      var $picker = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n      var $dimensionDisplay = $picker.next();\n      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n      var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n      var posOffset;\n      // HTML5 with jQuery - e.offsetX is undefined in Firefox\n      if (event.offsetX === undefined) {\n        var posCatcher = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target).offset();\n        posOffset = {\n          x: event.pageX - posCatcher.left,\n          y: event.pageY - posCatcher.top\n        };\n      } else {\n        posOffset = {\n          x: event.offsetX,\n          y: event.offsetY\n        };\n      }\n      var dim = {\n        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n        r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n      };\n      $highlighted.css({\n        width: dim.c + 'em',\n        height: dim.r + 'em'\n      });\n      $catcher.data('value', dim.c + 'x' + dim.r);\n      if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n        $unhighlighted.css({\n          width: dim.c + 1 + 'em'\n        });\n      }\n      if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n        $unhighlighted.css({\n          height: dim.r + 1 + 'em'\n        });\n      }\n      $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Toolbar.js\nfunction Toolbar_typeof(o) { \"@babel/helpers - typeof\"; return Toolbar_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Toolbar_typeof(o); }\nfunction Toolbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Toolbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Toolbar_toPropertyKey(o.key), o); } }\nfunction Toolbar_createClass(e, r, t) { return r && Toolbar_defineProperties(e.prototype, r), t && Toolbar_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Toolbar_toPropertyKey(t) { var i = Toolbar_toPrimitive(t, \"string\"); return \"symbol\" == Toolbar_typeof(i) ? i : i + \"\"; }\nfunction Toolbar_toPrimitive(t, r) { if (\"object\" != Toolbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Toolbar_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Toolbar = /*#__PURE__*/function () {\n  function Toolbar(context) {\n    Toolbar_classCallCheck(this, Toolbar);\n    this.context = context;\n    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n  return Toolbar_createClass(Toolbar, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !this.options.airMode;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      this.options.toolbar = this.options.toolbar || [];\n      if (!this.options.toolbar.length) {\n        this.$toolbar.hide();\n      } else {\n        this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n      }\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n      this.changeContainer(false);\n      this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () {\n        _this.context.invoke('buttons.updateCurrentStyle');\n      });\n      this.context.invoke('buttons.updateCurrentStyle');\n      if (this.options.followingToolbar) {\n        this.$window.on('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$toolbar.children().remove();\n      if (this.options.followingToolbar) {\n        this.$window.off('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"followScroll\",\n    value: function followScroll() {\n      if (this.$editor.hasClass('fullscreen')) {\n        return false;\n      }\n      var editorHeight = this.$editor.outerHeight();\n      var editorWidth = this.$editor.width();\n      var toolbarHeight = this.$toolbar.height();\n      var statusbarHeight = this.$statusbar.height();\n\n      // check if the web app is currently using another static bar\n      var otherBarHeight = 0;\n      if (this.options.otherStaticBar) {\n        otherBarHeight = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.otherStaticBar).outerHeight();\n      }\n      var currentOffset = this.$document.scrollTop();\n      var editorOffsetTop = this.$editor.offset().top;\n      var editorOffsetBottom = editorOffsetTop + editorHeight;\n      var activateOffset = editorOffsetTop - otherBarHeight;\n      var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n      if (!this.isFollowing && currentOffset > activateOffset && currentOffset < deactivateOffsetBottom - toolbarHeight) {\n        this.isFollowing = true;\n        this.$editable.css({\n          marginTop: this.$toolbar.outerHeight()\n        });\n        this.$toolbar.css({\n          position: 'fixed',\n          top: otherBarHeight,\n          width: editorWidth,\n          zIndex: 1000\n        });\n      } else if (this.isFollowing && (currentOffset < activateOffset || currentOffset > deactivateOffsetBottom)) {\n        this.isFollowing = false;\n        this.$toolbar.css({\n          position: 'relative',\n          top: 0,\n          width: '100%',\n          zIndex: 'auto'\n        });\n        this.$editable.css({\n          marginTop: ''\n        });\n      }\n    }\n  }, {\n    key: \"changeContainer\",\n    value: function changeContainer(isFullscreen) {\n      if (isFullscreen) {\n        this.$toolbar.prependTo(this.$editor);\n      } else {\n        if (this.options.toolbarContainer) {\n          this.$toolbar.appendTo(this.options.toolbarContainer);\n        }\n      }\n      if (this.options.followingToolbar) {\n        this.followScroll();\n      }\n    }\n  }, {\n    key: \"updateFullscreen\",\n    value: function updateFullscreen(isFullscreen) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n      this.changeContainer(isFullscreen);\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n    }\n  }, {\n    key: \"activate\",\n    value: function activate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n      this.ui.toggleBtn($btn, true);\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n      this.ui.toggleBtn($btn, false);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/LinkDialog.js\nfunction LinkDialog_typeof(o) { \"@babel/helpers - typeof\"; return LinkDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, LinkDialog_typeof(o); }\nfunction LinkDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction LinkDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, LinkDialog_toPropertyKey(o.key), o); } }\nfunction LinkDialog_createClass(e, r, t) { return r && LinkDialog_defineProperties(e.prototype, r), t && LinkDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction LinkDialog_toPropertyKey(t) { var i = LinkDialog_toPrimitive(t, \"string\"); return \"symbol\" == LinkDialog_typeof(i) ? i : i + \"\"; }\nfunction LinkDialog_toPrimitive(t, r) { if (\"object\" != LinkDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != LinkDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar LinkDialog_MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nvar LinkDialog_TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nvar LinkDialog_URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\nvar LinkDialog = /*#__PURE__*/function () {\n  function LinkDialog(context) {\n    LinkDialog_classCallCheck(this, LinkDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n  return LinkDialog_createClass(LinkDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.textToDisplay, \"</label>\"), \"<input id=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-link-text form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>', '<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.url, \"</label>\"), \"<input id=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-link-url form-control note-form-control note-input\\\" type=\\\"text\\\" value=\\\"http://\\\"/>\"), '</div>', !this.options.disableLinkTarget ? external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(this.ui.checkbox({\n        className: 'sn-checkbox-open-in-new-window',\n        text: this.lang.link.openInNewWindow,\n        checked: true\n      }).render()).html() : ''].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.link.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        className: 'link-dialog',\n        title: this.lang.link.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"checkLinkUrl\",\n    value: function checkLinkUrl(linkUrl) {\n      if (LinkDialog_MAILTO_PATTERN.test(linkUrl)) {\n        return 'mailto://' + linkUrl;\n      } else if (LinkDialog_TEL_PATTERN.test(linkUrl)) {\n        return 'tel://' + linkUrl;\n      } else if (!LinkDialog_URL_SCHEME_PATTERN.test(linkUrl)) {\n        return 'http://' + linkUrl;\n      }\n      return linkUrl;\n    }\n  }, {\n    key: \"onCheckLinkUrl\",\n    value: function onCheckLinkUrl($input) {\n      var _this = this;\n      $input.on('blur', function (event) {\n        event.target.value = event.target.value == '' ? '' : _this.checkLinkUrl(event.target.value);\n      });\n    }\n\n    /**\n     * toggle update button\n     */\n  }, {\n    key: \"toggleLinkBtn\",\n    value: function toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n      this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n    }\n\n    /**\n     * Show link dialog and set event handlers on dialog controls.\n     *\n     * @param {Object} linkInfo\n     * @return {Promise}\n     */\n  }, {\n    key: \"showLinkDialog\",\n    value: function showLinkDialog(linkInfo) {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $linkText = _this2.$dialog.find('.note-link-text');\n        var $linkUrl = _this2.$dialog.find('.note-link-url');\n        var $linkBtn = _this2.$dialog.find('.note-link-btn');\n        var $openInNewWindow = _this2.$dialog.find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          // If no url was given and given text is valid URL then copy that into URL Field\n          if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n            linkInfo.url = _this2.checkLinkUrl(linkInfo.text);\n          }\n          $linkText.on('input paste propertychange', function () {\n            // If linktext was modified by input events,\n            // cloning text from linkUrl will be stopped.\n            var text = $linkText.val();\n            var div = document.createElement('div');\n            div.innerText = text;\n            text = div.innerHTML;\n            linkInfo.text = text;\n            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.text);\n          $linkUrl.on('input paste propertychange', function () {\n            // Display same text on `Text to display` as default\n            // when linktext has no text\n            if (!linkInfo.text) {\n              $linkText.val($linkUrl.val());\n            }\n            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.url);\n          if (!env.isSupportTouch) {\n            $linkUrl.trigger('focus');\n          }\n          _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          _this2.bindEnterKey($linkUrl, $linkBtn);\n          _this2.bindEnterKey($linkText, $linkBtn);\n          _this2.onCheckLinkUrl($linkUrl);\n          var isNewWindowChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this2.context.options.linkTargetBlank;\n          $openInNewWindow.prop('checked', isNewWindowChecked);\n          $linkBtn.one('click', function (event) {\n            event.preventDefault();\n            deferred.resolve({\n              range: linkInfo.range,\n              url: $linkUrl.val(),\n              text: $linkText.val(),\n              isNewWindow: $openInNewWindow.is(':checked')\n            });\n            _this2.ui.hideDialog(_this2.$dialog);\n          });\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          // detach events\n          $linkText.off();\n          $linkUrl.off();\n          $linkBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n\n    /**\n     * @param {Object} layoutInfo\n     */\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n      var linkInfo = this.context.invoke('editor.getLinkInfo');\n      this.context.invoke('editor.saveRange');\n      this.showLinkDialog(linkInfo).then(function (linkInfo) {\n        _this3.context.invoke('editor.restoreRange');\n        _this3.context.invoke('editor.createLink', linkInfo);\n      }).fail(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/LinkPopover.js\nfunction LinkPopover_typeof(o) { \"@babel/helpers - typeof\"; return LinkPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, LinkPopover_typeof(o); }\nfunction LinkPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction LinkPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, LinkPopover_toPropertyKey(o.key), o); } }\nfunction LinkPopover_createClass(e, r, t) { return r && LinkPopover_defineProperties(e.prototype, r), t && LinkPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction LinkPopover_toPropertyKey(t) { var i = LinkPopover_toPrimitive(t, \"string\"); return \"symbol\" == LinkPopover_typeof(i) ? i : i + \"\"; }\nfunction LinkPopover_toPrimitive(t, r) { if (\"object\" != LinkPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != LinkPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar LinkPopover = /*#__PURE__*/function () {\n  function LinkPopover(context) {\n    var _this = this;\n    LinkPopover_classCallCheck(this, LinkPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return LinkPopover_createClass(LinkPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.link);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-link-popover',\n        callback: function callback($node) {\n          var $content = $node.find('.popover-content,.note-popover-content');\n          $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n        }\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.link);\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!this.context.invoke('editor.hasFocus')) {\n        this.hide();\n        return;\n      }\n      var rng = this.context.invoke('editor.getLastRange');\n      if (rng.isCollapsed() && rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        var href = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href');\n        this.$popover.find('a').attr('href', href).text(href);\n        var pos = dom.posFromPlaceholder(anchor);\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/ImageDialog.js\nfunction ImageDialog_typeof(o) { \"@babel/helpers - typeof\"; return ImageDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ImageDialog_typeof(o); }\nfunction ImageDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ImageDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ImageDialog_toPropertyKey(o.key), o); } }\nfunction ImageDialog_createClass(e, r, t) { return r && ImageDialog_defineProperties(e.prototype, r), t && ImageDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ImageDialog_toPropertyKey(t) { var i = ImageDialog_toPrimitive(t, \"string\"); return \"symbol\" == ImageDialog_typeof(i) ? i : i + \"\"; }\nfunction ImageDialog_toPrimitive(t, r) { if (\"object\" != ImageDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ImageDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar ImageDialog = /*#__PURE__*/function () {\n  function ImageDialog(context) {\n    ImageDialog_classCallCheck(this, ImageDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return ImageDialog_createClass(ImageDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var imageLimitation = '';\n      if (this.options.maximumImageFileSize) {\n        var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n        var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';\n        imageLimitation = \"<small>\".concat(this.lang.image.maximumFileSize + ' : ' + readableSize, \"</small>\");\n      }\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group note-group-select-from-files\">', '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>', '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ', ' type=\"file\" name=\"files\" accept=\"' + this.options.acceptImageFileTypes + '\" multiple=\"multiple\"/>', imageLimitation, '</div>', '<div class=\"form-group note-group-image-url\">', '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>', '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>', '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.image.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.image.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      this.context.invoke('editor.saveRange');\n      this.showImageDialog().then(function (data) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n        _this.context.invoke('editor.restoreRange');\n        if (typeof data === 'string') {\n          // image url\n          // If onImageLinkInsert set,\n          if (_this.options.callbacks.onImageLinkInsert) {\n            _this.context.triggerEvent('image.link.insert', data);\n          } else {\n            _this.context.invoke('editor.insertImage', data);\n          }\n        } else {\n          // array of files\n          _this.context.invoke('editor.insertImagesOrCallback', data);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n  }, {\n    key: \"showImageDialog\",\n    value: function showImageDialog() {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $imageInput = _this2.$dialog.find('.note-image-input');\n        var $imageUrl = _this2.$dialog.find('.note-image-url');\n        var $imageBtn = _this2.$dialog.find('.note-image-btn');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          // Cloning imageInput to clear element.\n          $imageInput.replaceWith($imageInput.clone().on('change', function (event) {\n            deferred.resolve(event.target.files || event.target.value);\n          }).val(''));\n          $imageUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($imageBtn, $imageUrl.val());\n          }).val('');\n          if (!env.isSupportTouch) {\n            $imageUrl.trigger('focus');\n          }\n          $imageBtn.on('click', function (event) {\n            event.preventDefault();\n            deferred.resolve($imageUrl.val());\n          });\n          _this2.bindEnterKey($imageUrl, $imageBtn);\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $imageInput.off();\n          $imageUrl.off();\n          $imageBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/ImagePopover.js\nfunction ImagePopover_typeof(o) { \"@babel/helpers - typeof\"; return ImagePopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ImagePopover_typeof(o); }\nfunction ImagePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ImagePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ImagePopover_toPropertyKey(o.key), o); } }\nfunction ImagePopover_createClass(e, r, t) { return r && ImagePopover_defineProperties(e.prototype, r), t && ImagePopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ImagePopover_toPropertyKey(t) { var i = ImagePopover_toPrimitive(t, \"string\"); return \"symbol\" == ImagePopover_typeof(i) ? i : i + \"\"; }\nfunction ImagePopover_toPrimitive(t, r) { if (\"object\" != ImagePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ImagePopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nvar ImagePopover = /*#__PURE__*/function () {\n  function ImagePopover(context) {\n    var _this = this;\n    ImagePopover_classCallCheck(this, ImagePopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n    this.events = {\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return ImagePopover_createClass(ImagePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.image);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-image-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.image);\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (dom.isImg(target)) {\n        var position = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target).offset();\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        var pos = {};\n        if (this.options.popatmouse) {\n          pos.left = event.pageX - 20;\n          pos.top = event.pageY;\n        } else {\n          pos = position;\n        }\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/TablePopover.js\nfunction TablePopover_typeof(o) { \"@babel/helpers - typeof\"; return TablePopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, TablePopover_typeof(o); }\nfunction TablePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction TablePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, TablePopover_toPropertyKey(o.key), o); } }\nfunction TablePopover_createClass(e, r, t) { return r && TablePopover_defineProperties(e.prototype, r), t && TablePopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction TablePopover_toPropertyKey(t) { var i = TablePopover_toPrimitive(t, \"string\"); return \"symbol\" == TablePopover_typeof(i) ? i : i + \"\"; }\nfunction TablePopover_toPrimitive(t, r) { if (\"object\" != TablePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != TablePopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar TablePopover = /*#__PURE__*/function () {\n  function TablePopover(context) {\n    var _this = this;\n    TablePopover_classCallCheck(this, TablePopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, event) {\n        _this.update(event.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': function summernoteKeyupSummernoteScrollSummernoteChange() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return TablePopover_createClass(TablePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.table);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-table-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n      // [workaround] Disable Firefox's default table editor\n      if (env.isFF) {\n        document.execCommand('enableInlineTableEditing', false, false);\n      }\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n      var isCell = dom.isCell(target) || dom.isCell(target === null || target === void 0 ? void 0 : target.parentElement);\n      if (isCell) {\n        var pos = dom.posFromPlaceholder(target);\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n      return isCell;\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/VideoDialog.js\nfunction VideoDialog_typeof(o) { \"@babel/helpers - typeof\"; return VideoDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, VideoDialog_typeof(o); }\nfunction VideoDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction VideoDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, VideoDialog_toPropertyKey(o.key), o); } }\nfunction VideoDialog_createClass(e, r, t) { return r && VideoDialog_defineProperties(e.prototype, r), t && VideoDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction VideoDialog_toPropertyKey(t) { var i = VideoDialog_toPrimitive(t, \"string\"); return \"symbol\" == VideoDialog_typeof(i) ? i : i + \"\"; }\nfunction VideoDialog_toPrimitive(t, r) { if (\"object\" != VideoDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != VideoDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar VideoDialog = /*#__PURE__*/function () {\n  function VideoDialog(context) {\n    VideoDialog_classCallCheck(this, VideoDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return VideoDialog_createClass(VideoDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group row-fluid\">', \"<label for=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.video.url, \" <small class=\\\"text-muted\\\">\").concat(this.lang.video.providers, \"</small></label>\"), \"<input id=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-video-url form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.video.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.video.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"createVideoNode\",\n    value: function createVideoNode(url) {\n      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, peertube, mp4, ogg, webm)\n      var ytRegExp = /(?:youtu\\.be\\/|youtube\\.com\\/(?:[^\\/\\n\\s]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/|\\S*?[?&]v=|shorts\\/|live\\/))([^&\\n?]+)(?:.*[?&]t=([^&\\n]+))?.*/;\n      var ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n      var ytMatch = url.match(ytRegExp);\n      var gdRegExp = /(?:\\.|\\/\\/)drive\\.google\\.com\\/file\\/d\\/(.[a-zA-Z0-9_-]*)\\/view/;\n      var gdMatch = url.match(gdRegExp);\n      var igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/(reel|p)\\/(.[a-zA-Z0-9_-]*)/;\n      var igMatch = url.match(igRegExp);\n      var vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n      var vMatch = url.match(vRegExp);\n      var vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n      var vimMatch = url.match(vimRegExp);\n      var dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n      var dmMatch = url.match(dmRegExp);\n      var youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n      var youkuMatch = url.match(youkuRegExp);\n      var peerTubeRegExp = /\\/\\/(.*)\\/videos\\/watch\\/([^?]*)(?:\\?(?:start=(\\w*))?(?:&stop=(\\w*))?(?:&loop=([10]))?(?:&autoplay=([10]))?(?:&muted=([10]))?)?/;\n      var peerTubeMatch = url.match(peerTubeRegExp);\n      var qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n      var qqMatch = url.match(qqRegExp);\n      var qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n      var qqMatch2 = url.match(qqRegExp2);\n      var mp4RegExp = /^.+.(mp4|m4v)$/;\n      var mp4Match = url.match(mp4RegExp);\n      var oggRegExp = /^.+.(ogg|ogv)$/;\n      var oggMatch = url.match(oggRegExp);\n      var webmRegExp = /^.+.(webm)$/;\n      var webmMatch = url.match(webmRegExp);\n      var fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n      var fbMatch = url.match(fbRegExp);\n      var $video;\n      if (ytMatch && ytMatch[1].length === 11) {\n        var youtubeId = ytMatch[1];\n        var start = 0;\n        if (typeof ytMatch[2] !== 'undefined') {\n          var ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n          if (ytMatchForStart) {\n            for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n              start += typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0;\n            }\n          } else {\n            start = parseInt(ytMatch[2], 10);\n          }\n        }\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : '')).attr('width', '640').attr('height', '360');\n      } else if (gdMatch && gdMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://drive.google.com/file/d/' + gdMatch[1] + '/preview').attr('width', '640').attr('height', '480');\n      } else if (igMatch && igMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://instagram.com/p/' + igMatch[2] + '/embed/').attr('width', '612').attr('height', '710').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else if (vMatch && vMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', vMatch[0] + '/embed/simple').attr('width', '600').attr('height', '600').attr('class', 'vine-embed');\n      } else if (vimMatch && vimMatch[3].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('src', '//player.vimeo.com/video/' + vimMatch[3]).attr('width', '640').attr('height', '360');\n      } else if (dmMatch && dmMatch[2].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]).attr('width', '640').attr('height', '360');\n      } else if (youkuMatch && youkuMatch[1].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '498').attr('width', '510').attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n      } else if (peerTubeMatch && peerTubeMatch[0].length) {\n        var begin = 0;\n        if (peerTubeMatch[2] !== 'undefined') begin = peerTubeMatch[2];\n        var end = 0;\n        if (peerTubeMatch[3] !== 'undefined') end = peerTubeMatch[3];\n        var loop = 0;\n        if (peerTubeMatch[4] !== 'undefined') loop = peerTubeMatch[4];\n        var autoplay = 0;\n        if (peerTubeMatch[5] !== 'undefined') autoplay = peerTubeMatch[5];\n        var muted = 0;\n        if (peerTubeMatch[6] !== 'undefined') muted = peerTubeMatch[6];\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe allowfullscreen sandbox=\"allow-same-origin allow-scripts allow-popups\">').attr('frameborder', 0).attr('src', '//' + peerTubeMatch[1] + '/videos/embed/' + peerTubeMatch[2] + \"?loop=\" + loop + \"&autoplay=\" + autoplay + \"&muted=\" + muted + (begin > 0 ? '&start=' + begin : '') + (end > 0 ? '&end=' + start : '')).attr('width', '560').attr('height', '315');\n      } else if (qqMatch && qqMatch[1].length || qqMatch2 && qqMatch2[2].length) {\n        var vid = qqMatch && qqMatch[1].length ? qqMatch[1] : qqMatch2[2];\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '310').attr('width', '500').attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n      } else if (mp4Match || oggMatch || webmMatch) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<video controls>').attr('src', url).attr('width', '640').attr('height', '360');\n      } else if (fbMatch && fbMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560').attr('width', '560').attr('height', '301').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else {\n        // this is not a known video link. Now what, Cat? Now what?\n        return false;\n      }\n      $video.addClass('note-video-clip');\n      return $video[0];\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      var text = this.context.invoke('editor.getSelectedText');\n      this.context.invoke('editor.saveRange');\n      this.showVideoDialog(text).then(function (url) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n        _this.context.invoke('editor.restoreRange');\n\n        // build node\n        var $node = _this.createVideoNode(url);\n        if ($node) {\n          // insert video node\n          _this.context.invoke('editor.insertNode', $node);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n\n    /**\n     * show video dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n  }, {\n    key: \"showVideoDialog\",\n    value: function showVideoDialog( /* text */\n    ) {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $videoUrl = _this2.$dialog.find('.note-video-url');\n        var $videoBtn = _this2.$dialog.find('.note-video-btn');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n          $videoUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($videoBtn, $videoUrl.val());\n          });\n          if (!env.isSupportTouch) {\n            $videoUrl.trigger('focus');\n          }\n          $videoBtn.on('click', function (event) {\n            event.preventDefault();\n            deferred.resolve($videoUrl.val());\n          });\n          _this2.bindEnterKey($videoUrl, $videoBtn);\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $videoUrl.off();\n          $videoBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/HelpDialog.js\nfunction HelpDialog_typeof(o) { \"@babel/helpers - typeof\"; return HelpDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, HelpDialog_typeof(o); }\nfunction HelpDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction HelpDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, HelpDialog_toPropertyKey(o.key), o); } }\nfunction HelpDialog_createClass(e, r, t) { return r && HelpDialog_defineProperties(e.prototype, r), t && HelpDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction HelpDialog_toPropertyKey(t) { var i = HelpDialog_toPrimitive(t, \"string\"); return \"symbol\" == HelpDialog_typeof(i) ? i : i + \"\"; }\nfunction HelpDialog_toPrimitive(t, r) { if (\"object\" != HelpDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != HelpDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar HelpDialog = /*#__PURE__*/function () {\n  function HelpDialog(context) {\n    HelpDialog_classCallCheck(this, HelpDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return HelpDialog_createClass(HelpDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<p class=\"text-center\">', '<a href=\"http://summernote.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Summernote 0.9.1</a> · ', '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\" rel=\"noopener noreferrer\">Project</a> · ', '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\" rel=\"noopener noreferrer\">Issues</a>', '</p>'].join('');\n      this.$dialog = this.ui.dialog({\n        title: this.lang.options.help,\n        fade: this.options.dialogsFade,\n        body: this.createShortcutList(),\n        footer: body,\n        callback: function callback($node) {\n          $node.find('.modal-body,.note-modal-body').css({\n            'max-height': 300,\n            'overflow': 'scroll'\n          });\n        }\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"createShortcutList\",\n    value: function createShortcutList() {\n      var _this = this;\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      return Object.keys(keyMap).map(function (key) {\n        var command = keyMap[key];\n        var $row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div><div class=\"help-list-item\"></div></div>');\n        $row.append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<label><kbd>' + key + '</kdb></label>').css({\n          'width': 180,\n          'margin-right': 10\n        })).append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<span></span>').html(_this.context.memo('help.' + command) || command));\n        return $row.html();\n      }).join('');\n    }\n\n    /**\n     * show help dialog\n     *\n     * @return {Promise}\n     */\n  }, {\n    key: \"showHelpDialog\",\n    value: function showHelpDialog() {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n          deferred.resolve();\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n      this.context.invoke('editor.saveRange');\n      this.showHelpDialog().then(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AirPopover.js\nfunction AirPopover_typeof(o) { \"@babel/helpers - typeof\"; return AirPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AirPopover_typeof(o); }\nfunction AirPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AirPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AirPopover_toPropertyKey(o.key), o); } }\nfunction AirPopover_createClass(e, r, t) { return r && AirPopover_defineProperties(e.prototype, r), t && AirPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AirPopover_toPropertyKey(t) { var i = AirPopover_toPrimitive(t, \"string\"); return \"symbol\" == AirPopover_typeof(i) ? i : i + \"\"; }\nfunction AirPopover_toPrimitive(t, r) { if (\"object\" != AirPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AirPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar AIRMODE_POPOVER_X_OFFSET = -5;\nvar AIRMODE_POPOVER_Y_OFFSET = 5;\nvar AirPopover = /*#__PURE__*/function () {\n  function AirPopover(context) {\n    var _this = this;\n    AirPopover_classCallCheck(this, AirPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n    this.events = {\n      'summernote.contextmenu': function summernoteContextmenu(event) {\n        if (_this.options.editing) {\n          event.preventDefault();\n          event.stopPropagation();\n          _this.onContextmenu = true;\n          _this.update(true);\n        }\n      },\n      'summernote.mousedown': function summernoteMousedown(we, event) {\n        _this.pageX = event.pageX;\n        _this.pageY = event.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteScroll(we, event) {\n        if (_this.options.editing && !_this.onContextmenu) {\n          if (event.type == 'keyup') {\n            var range = _this.context.invoke('editor.getLastRange');\n            var wordRange = range.getWordRange();\n            var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n            _this.pageX = bnd.left;\n            _this.pageY = bnd.top;\n          } else {\n            _this.pageX = event.pageX;\n            _this.pageY = event.pageY;\n          }\n          _this.update();\n        }\n        _this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.focusout': function summernoteFocusout() {\n        if (!_this.$popover.is(':active,:focus')) {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return AirPopover_createClass(AirPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$popover = this.ui.popover({\n        className: 'note-air-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.air);\n\n      // disable hiding this popover preemptively by 'summernote.blur' event.\n      this.$popover.on('mousedown', function () {\n        _this2.hidable = false;\n      });\n      // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n      this.$popover.on('mouseup', function () {\n        _this2.hidable = true;\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(forcelyOpen) {\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n        var rect = {\n          left: this.pageX,\n          top: this.pageY\n        };\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        rect.top -= containerOffset.top;\n        rect.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n          top: rect.top + AIRMODE_POPOVER_Y_OFFSET\n        });\n        this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (this.hidable) {\n        this.$popover.hide();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/HintPopover.js\nfunction HintPopover_typeof(o) { \"@babel/helpers - typeof\"; return HintPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, HintPopover_typeof(o); }\nfunction HintPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction HintPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, HintPopover_toPropertyKey(o.key), o); } }\nfunction HintPopover_createClass(e, r, t) { return r && HintPopover_defineProperties(e.prototype, r), t && HintPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction HintPopover_toPropertyKey(t) { var i = HintPopover_toPrimitive(t, \"string\"); return \"symbol\" == HintPopover_typeof(i) ? i : i + \"\"; }\nfunction HintPopover_toPrimitive(t, r) { if (\"object\" != HintPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != HintPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\nvar POPOVER_DIST = 5;\nvar HintPopover = /*#__PURE__*/function () {\n  function HintPopover(context) {\n    var _this = this;\n    HintPopover_classCallCheck(this, HintPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n  return HintPopover_createClass(HintPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.hints.length > 0;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.lastWordRange = null;\n      this.matchingWord = null;\n      this.$popover = this.ui.popover({\n        className: 'note-hint-popover',\n        hideArrow: true,\n        direction: ''\n      }).render().appendTo(this.options.container);\n      this.$popover.hide();\n      this.$content = this.$popover.find('.popover-content,.note-popover-content');\n      this.$content.on('click', '.note-hint-item', function (event) {\n        _this2.$content.find('.active').removeClass('active');\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget).addClass('active');\n        _this2.replace();\n      });\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"selectItem\",\n    value: function selectItem($item) {\n      this.$content.find('.active').removeClass('active');\n      $item.addClass('active');\n      this.$content[0].scrollTop = $item[0].offsetTop - this.$content.innerHeight() / 2;\n    }\n  }, {\n    key: \"moveDown\",\n    value: function moveDown() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $next = $current.next();\n      if ($next.length) {\n        this.selectItem($next);\n      } else {\n        var $nextGroup = $current.parent().next();\n        if (!$nextGroup.length) {\n          $nextGroup = this.$content.find('.note-hint-group').first();\n        }\n        this.selectItem($nextGroup.find('.note-hint-item').first());\n      }\n    }\n  }, {\n    key: \"moveUp\",\n    value: function moveUp() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $prev = $current.prev();\n      if ($prev.length) {\n        this.selectItem($prev);\n      } else {\n        var $prevGroup = $current.parent().prev();\n        if (!$prevGroup.length) {\n          $prevGroup = this.$content.find('.note-hint-group').last();\n        }\n        this.selectItem($prevGroup.find('.note-hint-item').last());\n      }\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      var $item = this.$content.find('.note-hint-item.active');\n      if ($item.length) {\n        var node = this.nodeFromItem($item);\n        // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n        if (this.matchingWord !== null && this.matchingWord.length === 0) {\n          this.lastWordRange.so = this.lastWordRange.eo;\n          // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n        } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n          var rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n          if (rangeCompute > 0) {\n            this.lastWordRange.so += rangeCompute;\n          }\n        }\n        this.lastWordRange.insertNode(node);\n        if (this.options.hintSelect === 'next') {\n          var blank = document.createTextNode('');\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).after(blank);\n          range.createFromNodeBefore(blank).select();\n        } else {\n          range.createFromNodeAfter(node).select();\n        }\n        this.lastWordRange = null;\n        this.hide();\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"nodeFromItem\",\n    value: function nodeFromItem($item) {\n      var hint = this.hints[$item.data('index')];\n      var item = $item.data('item');\n      var node = hint.content ? hint.content(item) : item;\n      if (typeof node === 'string') {\n        node = dom.createText(node);\n      }\n      return node;\n    }\n  }, {\n    key: \"createItemTemplates\",\n    value: function createItemTemplates(hintIdx, items) {\n      var hint = this.hints[hintIdx];\n      return items.map(function (item, idx) {\n        var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-hint-item\"></div>');\n        $item.append(hint.template ? hint.template(item) : item + '');\n        $item.data({\n          'index': hintIdx,\n          'item': item\n        });\n        if (hintIdx === 0 && idx === 0) {\n          $item.addClass('active');\n        }\n        return $item;\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      if (!this.$popover.is(':visible')) {\n        return;\n      }\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        this.replace();\n      } else if (event.keyCode === key.code.UP) {\n        event.preventDefault();\n        this.moveUp();\n      } else if (event.keyCode === key.code.DOWN) {\n        event.preventDefault();\n        this.moveDown();\n      }\n    }\n  }, {\n    key: \"searchKeyword\",\n    value: function searchKeyword(index, keyword, callback) {\n      var hint = this.hints[index];\n      if (hint && hint.match.test(keyword) && hint.search) {\n        var matches = hint.match.exec(keyword);\n        this.matchingWord = matches[0];\n        hint.search(matches[1], callback);\n      } else {\n        callback();\n      }\n    }\n  }, {\n    key: \"createGroup\",\n    value: function createGroup(idx, keyword) {\n      var _this3 = this;\n      var $group = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n      this.searchKeyword(idx, keyword, function (items) {\n        items = items || [];\n        if (items.length) {\n          $group.html(_this3.createItemTemplates(idx, items));\n          _this3.show();\n        }\n      });\n      return $group;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      var _this4 = this;\n      if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], event.keyCode)) {\n        var _range = this.context.invoke('editor.getLastRange');\n        var wordRange, keyword;\n        if (this.options.hintMode === 'words') {\n          wordRange = _range.getWordsRange(_range);\n          keyword = wordRange.toString();\n          this.hints.forEach(function (hint) {\n            if (hint.match.test(keyword)) {\n              wordRange = _range.getWordsMatchRange(hint.match);\n              return false;\n            }\n          });\n          if (!wordRange) {\n            this.hide();\n            return;\n          }\n          keyword = wordRange.toString();\n        } else {\n          wordRange = _range.getWordRange();\n          keyword = wordRange.toString();\n        }\n        if (this.hints.length && keyword) {\n          this.$content.empty();\n          var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n          var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n          if (bnd) {\n            bnd.top -= containerOffset.top;\n            bnd.left -= containerOffset.left;\n            this.$popover.hide();\n            this.lastWordRange = wordRange;\n            this.hints.forEach(function (hint, idx) {\n              if (hint.match.test(keyword)) {\n                _this4.createGroup(idx, keyword).appendTo(_this4.$content);\n              }\n            });\n            // select first .note-hint-item\n            this.$content.find('.note-hint-item').first().addClass('active');\n\n            // set position for popover after group is created\n            if (this.direction === 'top') {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n              });\n            } else {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top + bnd.height + POPOVER_DIST\n              });\n            }\n          }\n        } else {\n          this.hide();\n        }\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$popover.show();\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/settings.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {\n  version: '0.9.1',\n  plugins: {},\n  dom: dom,\n  range: range,\n  lists: lists,\n  options: {\n    langInfo: (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor,\n      'clipboard': Clipboard,\n      'dropzone': Dropzone,\n      'codeview': CodeView,\n      'statusbar': Statusbar,\n      'fullscreen': Fullscreen,\n      'handle': Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover,\n      'autoLink': AutoLink,\n      'autoSync': AutoSync,\n      'autoReplace': AutoReplace,\n      'placeholder': Placeholder,\n      'buttons': Buttons,\n      'toolbar': Toolbar,\n      'linkDialog': LinkDialog,\n      'linkPopover': LinkPopover,\n      'imageDialog': ImageDialog,\n      'imagePopover': ImagePopover,\n      'tablePopover': TablePopover,\n      'videoDialog': VideoDialog,\n      'helpDialog': HelpDialog,\n      'airPopover': AirPopover\n    },\n    buttons: {},\n    lang: 'en-US',\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']]],\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']], ['float', ['floatLeft', 'floatRight', 'floatNone']], ['remove', ['removeMedia']]],\n      link: [['link', ['linkDialogShow', 'unlink']]],\n      table: [['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]],\n      air: [['color', ['color']], ['font', ['bold', 'underline', 'clear']], ['para', ['ul', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], ['view', ['fullscreen', 'codeview']]]\n    },\n    // link options\n    linkAddNoReferrer: false,\n    addLinkNoOpener: false,\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false,\n    // TBD\n\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n    focus: false,\n    tabDisable: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n    fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana'],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n    fontSizeUnits: ['px', 'pt'],\n    // pallete colors(n x n)\n    colors: [['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']],\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']],\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00'\n    },\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n    tableClassName: 'table table-bordered',\n    insertTableMaxSize: {\n      col: 10,\n      row: 10\n    },\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n    maximumImageFileSize: null,\n    acceptImageFileTypes: \"image/*\",\n    allowClipboardImagePasting: true,\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null\n    },\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true\n    },\n    codeviewFilter: true,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: ['www.youtube.com', 'www.youtube-nocookie.com', 'www.facebook.com', 'vine.co', 'instagram.com', 'player.vimeo.com', 'www.dailymotion.com', 'player.youku.com', 'jumpingbean.tv', 'v.qq.com'],\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show'\n      },\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show'\n      }\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video'\n    }\n  }\n});\n;// CONCATENATED MODULE: ./src/js/renderer.js\nfunction renderer_typeof(o) { \"@babel/helpers - typeof\"; return renderer_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, renderer_typeof(o); }\nfunction renderer_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction renderer_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, renderer_toPropertyKey(o.key), o); } }\nfunction renderer_createClass(e, r, t) { return r && renderer_defineProperties(e.prototype, r), t && renderer_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction renderer_toPropertyKey(t) { var i = renderer_toPrimitive(t, \"string\"); return \"symbol\" == renderer_typeof(i) ? i : i + \"\"; }\nfunction renderer_toPrimitive(t, r) { if (\"object\" != renderer_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != renderer_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer(markup, children, options, callback) {\n    renderer_classCallCheck(this, Renderer);\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n  return renderer_createClass(Renderer, [{\n    key: \"render\",\n    value: function render($parent) {\n      var $node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.markup);\n      if (this.options && this.options.contents) {\n        $node.html(this.options.contents);\n      }\n      if (this.options && this.options.className) {\n        $node.addClass(this.options.className);\n      }\n      if (this.options && this.options.data) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(this.options.data, function (k, v) {\n          $node.attr('data-' + k, v);\n        });\n      }\n      if (this.options && this.options.click) {\n        $node.on('click', this.options.click);\n      }\n      if (this.children) {\n        var $container = $node.find('.note-children-container');\n        this.children.forEach(function (child) {\n          child.render($container.length ? $container : $node);\n        });\n      }\n      if (this.callback) {\n        this.callback($node, this.options);\n      }\n      if (this.options && this.options.callback) {\n        this.options.callback($node);\n      }\n      if ($parent) {\n        $parent.append($node);\n      }\n      return $node;\n    }\n  }]);\n}();\n/* harmony default export */ const renderer = ({\n  create: function create(markup, callback) {\n    return function () {\n      var options = renderer_typeof(arguments[1]) === 'object' ? arguments[1] : arguments[0];\n      var children = Array.isArray(arguments[0]) ? arguments[0] : [];\n      if (options && options.children) {\n        children = options.children;\n      }\n      return new Renderer(markup, children, options, callback);\n    };\n  }\n});\n;// CONCATENATED MODULE: ./src/styles/bs4/summernote-bs4.js\nfunction summernote_bs4_typeof(o) { \"@babel/helpers - typeof\"; return summernote_bs4_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, summernote_bs4_typeof(o); }\n\n\n\n\nvar editor = renderer.create('<div class=\"note-editor note-frame card\"></div>');\nvar toolbar = renderer.create('<div class=\"note-toolbar card-header\" role=\"toolbar\"></div>');\nvar editingArea = renderer.create('<div class=\"note-editing-area\"></div>');\nvar codable = renderer.create('<textarea class=\"note-codable\" aria-multiline=\"true\"></textarea>');\nvar editable = renderer.create('<div class=\"note-editable card-block\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>');\nvar statusbar = renderer.create(['<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>', '<div class=\"note-statusbar\" role=\"status\">', '<div class=\"note-resizebar\" aria-label=\"Resize\">', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '</div>', '</div>'].join(''));\nvar airEditor = renderer.create('<div class=\"note-editor note-airframe\"></div>');\nvar airEditable = renderer.create(['<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>', '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>'].join(''));\nvar buttonGroup = renderer.create('<div class=\"note-btn-group btn-group\"></div>');\nvar dropdown = renderer.create('<div class=\"note-dropdown-menu dropdown-menu\" role=\"list\"></div>', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var option = summernote_bs4_typeof(item) === 'object' ? item.option : undefined;\n    var dataValue = 'data-value=\"' + value + '\"';\n    var dataOption = option !== undefined ? ' data-option=\"' + option + '\"' : '';\n    return '<a class=\"dropdown-item\" href=\"#\" ' + (dataValue + dataOption) + ' role=\"listitem\" aria-label=\"' + value + '\">' + content + '</a>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dropdownButtonContents = function dropdownButtonContents(contents) {\n  return contents;\n};\nvar dropdownCheck = renderer.create('<div class=\"note-dropdown-menu dropdown-menu note-check\" role=\"list\"></div>', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    return '<a class=\"dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\">' + icon(options.checkClassName) + ' ' + content + '</a>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dialog = renderer.create('<div class=\"modal note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"></div>', function ($node, options) {\n  if (options.fade) {\n    $node.addClass('fade');\n  }\n  $node.attr({\n    'aria-label': options.title\n  });\n  $node.html(['<div class=\"modal-dialog\">', '<div class=\"modal-content\">', options.title ? '<div class=\"modal-header\">' + '<h4 class=\"modal-title\">' + options.title + '</h4>' + '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" aria-hidden=\"true\">&times;</button>' + '</div>' : '', '<div class=\"modal-body\">' + options.body + '</div>', options.footer ? '<div class=\"modal-footer\">' + options.footer + '</div>' : '', '</div>', '</div>'].join(''));\n});\nvar popover = renderer.create(['<div class=\"note-popover popover in\">', '<div class=\"arrow\"></div>', '<div class=\"popover-content note-children-container\"></div>', '</div>'].join(''), function ($node, options) {\n  var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n  $node.addClass(direction);\n  if (options.hideArrow) {\n    $node.find('.arrow').hide();\n  }\n});\nvar summernote_bs4_checkbox = renderer.create('<div class=\"form-check\"></div>', function ($node, options) {\n  $node.html(['<label class=\"form-check-label\"' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>', '<input type=\"checkbox\" class=\"form-check-input\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''), options.checked ? ' checked' : '', ' aria-label=\"' + (options.text ? options.text : '') + '\"', ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>', ' ' + (options.text ? options.text : '') + '</label>'].join(''));\n});\nvar icon = function icon(iconClassName, tagName) {\n  if (iconClassName.match(/^</)) {\n    return iconClassName;\n  }\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"></' + tagName + '>';\n};\nvar ui = function ui(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    dropdown: dropdown,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheck: dropdownCheck,\n    dialog: dialog,\n    popover: popover,\n    icon: icon,\n    checkbox: summernote_bs4_checkbox,\n    options: editorOptions,\n    palette: function palette($node, options) {\n      return renderer.create('<div class=\"note-color-palette\"></div>', function ($node, options) {\n        var contents = [];\n        for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n          var eventName = options.eventName;\n          var colors = options.colors[row];\n          var colorsName = options.colorsName[row];\n          var buttons = [];\n          for (var col = 0, colSize = colors.length; col < colSize; col++) {\n            var color = colors[col];\n            var colorName = colorsName[col];\n            buttons.push(['<button type=\"button\" class=\"note-color-btn\"', 'style=\"background-color:', color, '\" ', 'data-event=\"', eventName, '\" ', 'data-value=\"', color, '\" ', 'title=\"', colorName, '\" ', 'aria-label=\"', colorName, '\" ', 'data-toggle=\"button\" tabindex=\"-1\"></button>'].join(''));\n          }\n          contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n        }\n        $node.html(contents.join(''));\n        if (options.tooltip) {\n          $node.find('.note-color-btn').tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          });\n        }\n      })($node, options);\n    },\n    button: function button($node, options) {\n      return renderer.create('<button type=\"button\" class=\"note-btn btn btn-light btn-sm\" tabindex=\"-1\"></button>', function ($node, options) {\n        if (options && options.tooltip) {\n          $node.attr({\n            title: options.tooltip,\n            'aria-label': options.tooltip\n          }).tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          }).on('click', function (e) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.currentTarget).tooltip('hide');\n          });\n        }\n        if (options && options.codeviewButton) {\n          $node.addClass('note-codeview-keep');\n        }\n      })($node, options);\n    },\n    toggleBtn: function toggleBtn($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n    toggleBtnActive: function toggleBtnActive($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n    onDialogShown: function onDialogShown($dialog, handler) {\n      $dialog.one('shown.bs.modal', handler);\n    },\n    onDialogHidden: function onDialogHidden($dialog, handler) {\n      $dialog.one('hidden.bs.modal', handler);\n    },\n    showDialog: function showDialog($dialog) {\n      $dialog.modal('show');\n    },\n    hideDialog: function hideDialog($dialog) {\n      $dialog.modal('hide');\n    },\n    createLayout: function createLayout($note) {\n      var $editor = (editorOptions.airMode ? airEditor([editingArea([codable(), airEditable()])]) : editorOptions.toolbarPosition === 'bottom' ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()]) : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])).render();\n      $editor.insertAfter($note);\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar')\n      };\n    },\n    removeLayout: function removeLayout($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.show();\n    }\n  };\n};\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {\n  ui_template: ui,\n  \"interface\": 'bs4'\n});\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options.styleTags = ['p', {\n  title: 'Blockquote',\n  tag: 'blockquote',\n  className: 'blockquote',\n  value: 'blockquote'\n}, 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-bs4.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/summernote-bs5.css",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n@font-face {\n    font-family: \"summernote\";\n    font-style: normal;\n    font-weight: 400;\n    font-display: auto;\n    src: url(\"./font/summernote.eot?#iefix\") format(\"embedded-opentype\"), url(\"./font/summernote.woff2\") format(\"woff2\"), url(\"./font/summernote.woff\") format(\"woff\"), url(\"./font/summernote.ttf\") format(\"truetype\");\n}\n[class^=note-icon]:before,\n[class*=\" note-icon\"]:before {\n    display: inline-block;\n    font-family: \"summernote\";\n    font-style: normal;\n    font-size: inherit;\n    text-decoration: inherit;\n    text-rendering: auto;\n    text-transform: none;\n    vertical-align: middle;\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-font-smoothing: antialiased;\n    speak: none;\n}\n\n.note-icon-fw {\n    text-align: center;\n    width: 1.25em;\n}\n\n.note-icon-border {\n    border: solid 0.08em #eee;\n    border-radius: 0.1em;\n    padding: 0.2em 0.25em 0.15em;\n}\n\n.note-icon-pull-left {\n    float: left;\n}\n\n.note-icon-pull-right {\n    float: right;\n}\n\n.note-icon.note-icon-pull-left {\n    margin-right: 0.3em;\n}\n.note-icon.note-icon-pull-right {\n    margin-left: 0.3em;\n}\n\n.note-icon-align::before {\n    content: \"\\ea01\";\n}\n\n.note-icon-align-center::before {\n    content: \"\\ea02\";\n}\n\n.note-icon-align-indent::before {\n    content: \"\\ea03\";\n}\n\n.note-icon-align-justify::before {\n    content: \"\\ea04\";\n}\n\n.note-icon-align-left::before {\n    content: \"\\ea05\";\n}\n\n.note-icon-align-outdent::before {\n    content: \"\\ea06\";\n}\n\n.note-icon-align-right::before {\n    content: \"\\ea07\";\n}\n\n.note-icon-arrow-circle-down::before {\n    content: \"\\ea08\";\n}\n\n.note-icon-arrow-circle-left::before {\n    content: \"\\ea09\";\n}\n\n.note-icon-arrow-circle-right::before {\n    content: \"\\ea0a\";\n}\n\n.note-icon-arrow-circle-up::before {\n    content: \"\\ea0b\";\n}\n\n.note-icon-arrows-alt::before {\n    content: \"\\ea0c\";\n}\n\n.note-icon-arrows-h::before {\n    content: \"\\ea0d\";\n}\n\n.note-icon-arrows-v::before {\n    content: \"\\ea0e\";\n}\n\n.note-icon-bold::before {\n    content: \"\\ea0f\";\n}\n\n.note-icon-caret::before {\n    content: \"\\ea10\";\n}\n\n.note-icon-chain-broken::before {\n    content: \"\\ea11\";\n}\n\n.note-icon-circle::before {\n    content: \"\\ea12\";\n}\n\n.note-icon-close::before {\n    content: \"\\ea13\";\n}\n\n.note-icon-code::before {\n    content: \"\\ea14\";\n}\n\n.note-icon-col-after::before {\n    content: \"\\ea15\";\n}\n\n.note-icon-col-before::before {\n    content: \"\\ea16\";\n}\n\n.note-icon-col-remove::before {\n    content: \"\\ea17\";\n}\n\n.note-icon-eraser::before {\n    content: \"\\ea18\";\n}\n\n.note-icon-float-left::before {\n    content: \"\\ea19\";\n}\n\n.note-icon-float-none::before {\n    content: \"\\ea1a\";\n}\n\n.note-icon-float-right::before {\n    content: \"\\ea1b\";\n}\n\n.note-icon-font::before {\n    content: \"\\ea1c\";\n}\n\n.note-icon-frame::before {\n    content: \"\\ea1d\";\n}\n\n.note-icon-italic::before {\n    content: \"\\ea1e\";\n}\n\n.note-icon-link::before {\n    content: \"\\ea1f\";\n}\n\n.note-icon-magic::before {\n    content: \"\\ea20\";\n}\n\n.note-icon-menu-check::before {\n    content: \"\\ea21\";\n}\n\n.note-icon-minus::before {\n    content: \"\\ea22\";\n}\n\n.note-icon-orderedlist::before {\n    content: \"\\ea23\";\n}\n\n.note-icon-pencil::before {\n    content: \"\\ea24\";\n}\n\n.note-icon-picture::before {\n    content: \"\\ea25\";\n}\n\n.note-icon-question::before {\n    content: \"\\ea26\";\n}\n\n.note-icon-redo::before {\n    content: \"\\ea27\";\n}\n\n.note-icon-rollback::before {\n    content: \"\\ea28\";\n}\n\n.note-icon-row-above::before {\n    content: \"\\ea29\";\n}\n\n.note-icon-row-below::before {\n    content: \"\\ea2a\";\n}\n\n.note-icon-row-remove::before {\n    content: \"\\ea2b\";\n}\n\n.note-icon-special-character::before {\n    content: \"\\ea2c\";\n}\n\n.note-icon-square::before {\n    content: \"\\ea2d\";\n}\n\n.note-icon-strikethrough::before {\n    content: \"\\ea2e\";\n}\n\n.note-icon-subscript::before {\n    content: \"\\ea2f\";\n}\n\n.note-icon-summernote::before {\n    content: \"\\ea30\";\n}\n\n.note-icon-superscript::before {\n    content: \"\\ea31\";\n}\n\n.note-icon-table::before {\n    content: \"\\ea32\";\n}\n\n.note-icon-text-height::before {\n    content: \"\\ea33\";\n}\n\n.note-icon-trash::before {\n    content: \"\\ea34\";\n}\n\n.note-icon-underline::before {\n    content: \"\\ea35\";\n}\n\n.note-icon-undo::before {\n    content: \"\\ea36\";\n}\n\n.note-icon-unorderedlist::before {\n    content: \"\\ea37\";\n}\n\n.note-icon-video::before {\n    content: \"\\ea38\";\n}\n\n/* Theme Variables\n ------------------------------------------ */\n/* Layout\n ------------------------------------------ */\n.note-editor {\n    position: relative;\n}\n.note-editor .note-dropzone {\n    position: absolute;\n    display: none;\n    z-index: 100;\n    color: lightskyblue;\n    background-color: #fff;\n    opacity: 0.95;\n}\n.note-editor .note-dropzone .note-dropzone-message {\n    display: table-cell;\n    vertical-align: middle;\n    text-align: center;\n    font-size: 28px;\n    font-weight: 700;\n}\n.note-editor .note-dropzone.hover {\n    color: #098ddf;\n}\n.note-editor.dragover .note-dropzone {\n    display: table;\n}\n.note-editor .note-editing-area {\n    position: relative;\n}\n.note-editor .note-editing-area .note-editable {\n    outline: none;\n}\n.note-editor .note-editing-area .note-editable sup {\n    vertical-align: super;\n}\n.note-editor .note-editing-area .note-editable sub {\n    vertical-align: sub;\n}\n.note-editor .note-editing-area .note-editable img.note-float-left {\n    margin-right: 10px;\n}\n.note-editor .note-editing-area .note-editable img.note-float-right {\n    margin-left: 10px;\n}\n\n/* Frame mode layout\n ------------------------------------------ */\n.note-editor.note-frame,\n.note-editor.note-airframe {\n    border: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame.codeview .note-editing-area .note-editable,\n.note-editor.note-airframe.codeview .note-editing-area .note-editable {\n    display: none;\n}\n.note-editor.note-frame.codeview .note-editing-area .note-codable,\n.note-editor.note-airframe.codeview .note-editing-area .note-codable {\n    display: block;\n}\n.note-editor.note-frame .note-editing-area,\n.note-editor.note-airframe .note-editing-area {\n    overflow: hidden;\n}\n.note-editor.note-frame .note-editing-area .note-editable,\n.note-editor.note-airframe .note-editing-area .note-editable {\n    padding: 10px;\n    overflow: auto;\n    word-wrap: break-word;\n}\n.note-editor.note-frame .note-editing-area .note-editable[contenteditable=false],\n.note-editor.note-airframe .note-editing-area .note-editable[contenteditable=false] {\n    background-color: rgba(128, 128, 128, 0.1137254902);\n}\n.note-editor.note-frame .note-editing-area .note-codable,\n.note-editor.note-airframe .note-editing-area .note-codable {\n    display: none;\n    width: 100%;\n    padding: 10px;\n    border: none;\n    box-shadow: none;\n    font-family: Menlo, Monaco, monospace, sans-serif;\n    font-size: 14px;\n    color: #ccc;\n    background-color: #222;\n    resize: none;\n    outline: none;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n    border-radius: 0;\n    margin-bottom: 0;\n}\n.note-editor.note-frame.fullscreen,\n.note-editor.note-airframe.fullscreen {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100% !important;\n    z-index: 1050;\n}\n.note-editor.note-frame.fullscreen .note-resizebar,\n.note-editor.note-airframe.fullscreen .note-resizebar {\n    display: none;\n}\n.note-editor.note-frame .note-status-output,\n.note-editor.note-airframe .note-status-output {\n    display: block;\n    width: 100%;\n    font-size: 14px;\n    line-height: 1.42857143;\n    height: 20px;\n    margin-bottom: 0;\n    color: #000;\n    border: 0;\n    border-top: 1px solid #e2e2e2;\n}\n.note-editor.note-frame .note-status-output:empty,\n.note-editor.note-airframe .note-status-output:empty {\n    height: 0;\n    border-top: 0 solid transparent;\n}\n.note-editor.note-frame .note-status-output .pull-right,\n.note-editor.note-airframe .note-status-output .pull-right {\n    float: right !important;\n}\n.note-editor.note-frame .note-status-output .text-muted,\n.note-editor.note-airframe .note-status-output .text-muted {\n    color: #777;\n}\n.note-editor.note-frame .note-status-output .text-primary,\n.note-editor.note-airframe .note-status-output .text-primary {\n    color: #286090;\n}\n.note-editor.note-frame .note-status-output .text-success,\n.note-editor.note-airframe .note-status-output .text-success {\n    color: #3c763d;\n}\n.note-editor.note-frame .note-status-output .text-info,\n.note-editor.note-airframe .note-status-output .text-info {\n    color: #31708f;\n}\n.note-editor.note-frame .note-status-output .text-warning,\n.note-editor.note-airframe .note-status-output .text-warning {\n    color: #8a6d3b;\n}\n.note-editor.note-frame .note-status-output .text-danger,\n.note-editor.note-airframe .note-status-output .text-danger {\n    color: #a94442;\n}\n.note-editor.note-frame .note-status-output .alert,\n.note-editor.note-airframe .note-status-output .alert {\n    margin: -7px 0 0 0;\n    padding: 7px 10px 2px 10px;\n    border-radius: 0;\n    color: #000;\n    background-color: #f5f5f5;\n}\n.note-editor.note-frame .note-status-output .alert .note-icon,\n.note-editor.note-airframe .note-status-output .alert .note-icon {\n    margin-right: 5px;\n}\n.note-editor.note-frame .note-status-output .alert-success,\n.note-editor.note-airframe .note-status-output .alert-success {\n    color: #3c763d !important;\n    background-color: #dff0d8 !important;\n}\n.note-editor.note-frame .note-status-output .alert-info,\n.note-editor.note-airframe .note-status-output .alert-info {\n    color: #31708f !important;\n    background-color: #d9edf7 !important;\n}\n.note-editor.note-frame .note-status-output .alert-warning,\n.note-editor.note-airframe .note-status-output .alert-warning {\n    color: #8a6d3b !important;\n    background-color: #fcf8e3 !important;\n}\n.note-editor.note-frame .note-status-output .alert-danger,\n.note-editor.note-airframe .note-status-output .alert-danger {\n    color: #a94442 !important;\n    background-color: #f2dede !important;\n}\n.note-editor.note-frame .note-statusbar,\n.note-editor.note-airframe .note-statusbar {\n    background-color: rgba(128, 128, 128, 0.1137254902);\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame .note-statusbar .note-resizebar,\n.note-editor.note-airframe .note-statusbar .note-resizebar {\n    padding-top: 1px;\n    height: 9px;\n    width: 100%;\n    cursor: ns-resize;\n}\n.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,\n.note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar {\n    width: 20px;\n    margin: 1px auto;\n    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame .note-statusbar.locked .note-resizebar,\n.note-editor.note-airframe .note-statusbar.locked .note-resizebar {\n    cursor: default;\n}\n.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar,\n.note-editor.note-airframe .note-statusbar.locked .note-resizebar .note-icon-bar {\n    display: none;\n}\n.note-editor.note-frame .note-placeholder,\n.note-editor.note-airframe .note-placeholder {\n    padding: 10px;\n}\n\n.note-editor.note-airframe {\n    border: 0;\n}\n.note-editor.note-airframe .note-editing-area .note-editable {\n    padding: 0;\n}\n\n/* Popover\n ------------------------------------------ */\n.note-popover.popover {\n    display: none;\n    max-width: none;\n}\n.note-popover.popover .popover-content a {\n    display: inline-block;\n    max-width: 200px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    vertical-align: middle;\n}\n.note-popover.popover .arrow {\n    left: 20px !important;\n}\n\n/* Popover and Toolbar (Button container)\n ------------------------------------------ */\n.note-toolbar {\n    position: relative;\n}\n\n.note-popover .popover-content, .note-editor .note-toolbar {\n    margin: 0;\n    padding: 0 0 5px 5px;\n}\n.note-popover .popover-content > .note-btn-group, .note-editor .note-toolbar > .note-btn-group {\n    margin-top: 5px;\n    margin-left: 0;\n    margin-right: 5px;\n}\n.note-popover .popover-content .note-btn-group .note-table, .note-editor .note-toolbar .note-btn-group .note-table {\n    min-width: 0;\n    padding: 5px;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker {\n    font-size: 18px;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher {\n    position: absolute !important;\n    z-index: 3;\n    width: 10em;\n    height: 10em;\n    cursor: pointer;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted {\n    position: relative !important;\n    z-index: 1;\n    width: 5em;\n    height: 5em;\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted {\n    position: absolute !important;\n    z-index: 2;\n    width: 1em;\n    height: 1em;\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n}\n.note-popover .popover-content .note-style .dropdown-style blockquote, .note-popover .popover-content .note-style .dropdown-style pre, .note-editor .note-toolbar .note-style .dropdown-style blockquote, .note-editor .note-toolbar .note-style .dropdown-style pre {\n    margin: 0;\n    padding: 5px 10px;\n}\n.note-popover .popover-content .note-style .dropdown-style h1, .note-popover .popover-content .note-style .dropdown-style h2, .note-popover .popover-content .note-style .dropdown-style h3, .note-popover .popover-content .note-style .dropdown-style h4, .note-popover .popover-content .note-style .dropdown-style h5, .note-popover .popover-content .note-style .dropdown-style h6, .note-popover .popover-content .note-style .dropdown-style p, .note-editor .note-toolbar .note-style .dropdown-style h1, .note-editor .note-toolbar .note-style .dropdown-style h2, .note-editor .note-toolbar .note-style .dropdown-style h3, .note-editor .note-toolbar .note-style .dropdown-style h4, .note-editor .note-toolbar .note-style .dropdown-style h5, .note-editor .note-toolbar .note-style .dropdown-style h6, .note-editor .note-toolbar .note-style .dropdown-style p {\n    margin: 0;\n    padding: 0;\n}\n.note-popover .popover-content .note-color-all .note-dropdown-menu, .note-editor .note-toolbar .note-color-all .note-dropdown-menu {\n    min-width: 337px;\n}\n.note-popover .popover-content .note-color .dropdown-toggle, .note-editor .note-toolbar .note-color .dropdown-toggle {\n    width: 20px;\n    padding-left: 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette {\n    display: inline-block;\n    margin: 0;\n    width: 160px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette:first-child, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette:first-child {\n    margin: 0 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title {\n    font-size: 12px;\n    margin: 2px 7px;\n    text-align: center;\n    border-bottom: 1px solid #eee;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset,\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select {\n    font-size: 11px;\n    margin: 3px;\n    padding: 0 3px;\n    cursor: pointer;\n    width: 100%;\n    border-radius: 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover {\n    background: #eee;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-row, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row {\n    height: 20px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select-btn {\n    display: none;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn {\n    border: 1px solid #eee;\n}\n.note-popover .popover-content .note-para .note-dropdown-menu, .note-editor .note-toolbar .note-para .note-dropdown-menu {\n    min-width: 228px;\n    padding: 5px;\n}\n.note-popover .popover-content .note-para .note-dropdown-menu > div + div, .note-editor .note-toolbar .note-para .note-dropdown-menu > div + div {\n    margin-left: 5px;\n}\n.note-popover .popover-content .note-dropdown-menu, .note-editor .note-toolbar .note-dropdown-menu {\n    min-width: 160px;\n}\n.note-popover .popover-content .note-dropdown-menu.right, .note-editor .note-toolbar .note-dropdown-menu.right {\n    right: 0;\n    left: auto;\n}\n.note-popover .popover-content .note-dropdown-menu.right::before, .note-editor .note-toolbar .note-dropdown-menu.right::before {\n    right: 9px;\n    left: auto !important;\n}\n.note-popover .popover-content .note-dropdown-menu.right::after, .note-editor .note-toolbar .note-dropdown-menu.right::after {\n    right: 10px;\n    left: auto !important;\n}\n.note-popover .popover-content .note-dropdown-menu.note-check a i, .note-editor .note-toolbar .note-dropdown-menu.note-check a i {\n    color: deepskyblue;\n    visibility: hidden;\n}\n.note-popover .popover-content .note-dropdown-menu.note-check a.checked i, .note-editor .note-toolbar .note-dropdown-menu.note-check a.checked i {\n    visibility: visible;\n}\n.note-popover .popover-content .note-fontsize-10, .note-editor .note-toolbar .note-fontsize-10 {\n    font-size: 10px;\n}\n.note-popover .popover-content .note-color-palette, .note-editor .note-toolbar .note-color-palette {\n    line-height: 1;\n}\n.note-popover .popover-content .note-color-palette div .note-color-btn, .note-editor .note-toolbar .note-color-palette div .note-color-btn {\n    width: 20px;\n    height: 20px;\n    padding: 0;\n    margin: 0;\n    border: 0;\n    border-radius: 0;\n}\n.note-popover .popover-content .note-color-palette div .note-color-btn:hover, .note-editor .note-toolbar .note-color-palette div .note-color-btn:hover {\n    transform: scale(1.2);\n    transition: all 0.2s;\n}\n\n/* Dialog\n ------------------------------------------ */\n.note-modal .modal-dialog {\n    outline: 0;\n    border-radius: 5px;\n    box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n}\n.note-modal .form-group {\n    margin-left: 0;\n    margin-right: 0;\n}\n.note-modal .note-modal-form {\n    margin: 0;\n}\n.note-modal .note-image-dialog .note-dropzone {\n    min-height: 100px;\n    font-size: 30px;\n    line-height: 4;\n    color: lightgray;\n    text-align: center;\n    border: 4px dashed lightgray;\n    margin-bottom: 10px;\n}\n@-moz-document url-prefix() {\n    .note-modal .note-image-input {\n        height: auto;\n    }\n}\n\n/* Placeholder\n ------------------------------------------ */\n.note-placeholder {\n    position: absolute;\n    display: none;\n    color: gray;\n}\n\n/* Handle\n ------------------------------------------ */\n.note-handle .note-control-selection {\n    position: absolute;\n    display: none;\n    border: 1px solid #000;\n}\n.note-handle .note-control-selection > div {\n    position: absolute;\n}\n.note-handle .note-control-selection .note-control-selection-bg {\n    width: 100%;\n    height: 100%;\n    background-color: #000;\n    -webkit-opacity: 0.3;\n    -khtml-opacity: 0.3;\n    -moz-opacity: 0.3;\n    opacity: 0.3;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=30);\n    filter: alpha(opacity=30);\n}\n.note-handle .note-control-selection .note-control-handle, .note-handle .note-control-selection .note-control-sizing, .note-handle .note-control-selection .note-control-holder {\n    width: 7px;\n    height: 7px;\n    border: 1px solid #000;\n}\n.note-handle .note-control-selection .note-control-sizing {\n    background-color: #000;\n}\n.note-handle .note-control-selection .note-control-nw {\n    top: -5px;\n    left: -5px;\n    border-right: none;\n    border-bottom: none;\n}\n.note-handle .note-control-selection .note-control-ne {\n    top: -5px;\n    right: -5px;\n    border-bottom: none;\n    border-left: none;\n}\n.note-handle .note-control-selection .note-control-sw {\n    bottom: -5px;\n    left: -5px;\n    border-top: none;\n    border-right: none;\n}\n.note-handle .note-control-selection .note-control-se {\n    right: -5px;\n    bottom: -5px;\n    cursor: se-resize;\n}\n.note-handle .note-control-selection .note-control-se.note-control-holder {\n    cursor: default;\n    border-top: none;\n    border-left: none;\n}\n.note-handle .note-control-selection .note-control-selection-info {\n    right: 0;\n    bottom: 0;\n    padding: 5px;\n    margin: 5px;\n    color: #fff;\n    background-color: #000;\n    font-size: 12px;\n    border-radius: 5px;\n    -webkit-opacity: 0.7;\n    -khtml-opacity: 0.7;\n    -moz-opacity: 0.7;\n    opacity: 0.7;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);\n    filter: alpha(opacity=70);\n}\n\n.note-hint-popover {\n    min-width: 100px;\n    padding: 2px;\n}\n.note-hint-popover .popover-content {\n    padding: 3px;\n    max-height: 150px;\n    overflow: auto;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item {\n    display: block !important;\n    padding: 3px;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item.active, .note-hint-popover .popover-content .note-hint-group .note-hint-item:hover {\n    display: block;\n    clear: both;\n    font-weight: 400;\n    line-height: 1.4;\n    color: white;\n    white-space: nowrap;\n    text-decoration: none;\n    background-color: #428bca;\n    outline: 0;\n    cursor: pointer;\n}\n\n/* Handle\n ------------------------------------------ */\nhtml .note-fullscreen-body, body .note-fullscreen-body {\n    overflow: hidden !important;\n}\n\n.note-editable ul li, .note-editable ol li {\n    list-style-position: inside;\n}\n\n.note-toolbar {\n    background: rgba(128, 128, 128, 0.1137254902);\n}\n\n.note-btn-group .note-btn {\n    border-color: rgba(0, 0, 0, 0.1960784314);\n    padding: 0.28rem 0.65rem;\n    font-size: 13px;\n}\n\n/*# sourceMappingURL=summernote-bs5.css.map*/"
  },
  {
    "path": "public/vendor/summernote/0.9.1/summernote-bs5.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, (__WEBPACK_EXTERNAL_MODULE__8938__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 7000:\n/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {\n\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8938);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n(jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) = (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) || {\n  lang: {}\n};\njquery__WEBPACK_IMPORTED_MODULE_0___default().extend(true, (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote).lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit'\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original'\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion, Youku, Peertube)'\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window'\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table'\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule'\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list'\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View'\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full'\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select'\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys'\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog'\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo'\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters'\n    },\n    output: {\n      noSelection: 'No Selection Made!'\n    }\n  }\n});\n\n/***/ }),\n\n/***/ 8938:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__8938__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_ = __webpack_require__(8938);\nvar external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_);\n// EXTERNAL MODULE: ./src/lang/summernote-en-US.js\nvar summernote_en_US = __webpack_require__(7000);\n;// CONCATENATED MODULE: ./src/js/core/env.js\n\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nvar genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\nfunction validFontName(fontName) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().inArray(fontName.toLowerCase(), genericFontFamilies) === -1 ? \"'\".concat(fontName, \"'\") : fontName;\n}\nfunction createIsFontInstalledFunc() {\n  var testText = \"mw\";\n  var fontSize = \"20px\";\n  var canvasWidth = 40;\n  var canvasHeight = 20;\n  var canvas = document.createElement(\"canvas\");\n  var context = canvas.getContext(\"2d\", {\n    willReadFrequently: true\n  });\n  canvas.width = canvasWidth;\n  canvas.height = canvasHeight;\n  context.textAlign = \"center\";\n  context.fillStyle = \"black\";\n  context.textBaseline = \"middle\";\n  function getPxInfo(font, testFontName) {\n    context.clearRect(0, 0, canvasWidth, canvasHeight);\n    context.font = fontSize + ' ' + validFontName(font) + ', \"' + testFontName + '\"';\n    context.fillText(testText, canvasWidth / 2, canvasHeight / 2);\n    // Get pixel information\n    var pxInfo = context.getImageData(0, 0, canvasWidth, canvasHeight).data;\n    return pxInfo.join(\"\");\n  }\n  return function (fontName) {\n    var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n    var testInfo = getPxInfo(testFontName, testFontName);\n    var fontInfo = getPxInfo(fontName, testFontName);\n    return testInfo !== fontInfo;\n  };\n}\nvar userAgent = navigator.userAgent;\nvar isMSIE = /MSIE|Trident/i.test(userAgent);\nvar browserVersion;\nif (isMSIE) {\n  var matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\nvar isEdge = /Edge\\/\\d+/.test(userAgent);\nvar isSupportTouch = 'ontouchstart' in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nvar inputEventName = isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\n/* harmony default export */ const env = ({\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE: isMSIE,\n  isEdge: isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && !/chrome/i.test(userAgent),\n  browserVersion: browserVersion,\n  isSupportTouch: isSupportTouch,\n  isFontInstalled: createIsFontInstalledFunc(),\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName: inputEventName,\n  genericFontFamilies: genericFontFamilies,\n  validFontName: validFontName\n});\n;// CONCATENATED MODULE: ./src/js/core/func.js\n\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n  return function (itemB) {\n    return itemA === itemB;\n  };\n}\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\nfunction peq2(propName) {\n  return function (itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\nfunction ok() {\n  return true;\n}\nfunction fail() {\n  return false;\n}\nfunction not(f) {\n  return function () {\n    return !f.apply(f, arguments);\n  };\n}\nfunction and(fA, fB) {\n  return function (item) {\n    return fA(item) && fB(item);\n  };\n}\nfunction func_self(a) {\n  return a;\n}\nfunction invoke(obj, method) {\n  return function () {\n    return obj[method].apply(obj, arguments);\n  };\n}\nvar idCounter = 0;\n\n/**\n * reset globally-unique id\n *\n */\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n  var $document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n  var inverted = {};\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n  return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function (name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n    var later = function later() {\n      timeout = null;\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\nfunction isValidUrl(url) {\n  var expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n/* harmony default export */ const func = ({\n  eq: eq,\n  eq2: eq2,\n  peq2: peq2,\n  ok: ok,\n  fail: fail,\n  self: func_self,\n  not: not,\n  and: and,\n  invoke: invoke,\n  resetUniqueId: resetUniqueId,\n  uniqueId: uniqueId,\n  rect2bnd: rect2bnd,\n  invertObject: invertObject,\n  namespaceToCamel: namespaceToCamel,\n  debounce: debounce,\n  isValidUrl: isValidUrl\n});\n;// CONCATENATED MODULE: ./src/js/core/lists.js\n\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n  return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n  return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n  return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    var item = array[idx];\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction lists_all(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n  return false;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function (memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n  var result = [];\n  var length = collection.length;\n  var idx = -1;\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n  return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n  return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n  if (!array.length) {\n    return [];\n  }\n  var aTail = tail(array);\n  return aTail.reduce(function (memo, v) {\n    var aLast = last(memo);\n    if (fn(last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n    return memo;\n  }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n  var aResult = [];\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) {\n      aResult.push(array[idx]);\n    }\n  }\n  return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n  var results = [];\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n  return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n  return null;\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n  return null;\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\n/* harmony default export */ const lists = ({\n  head: head,\n  last: last,\n  initial: initial,\n  tail: tail,\n  prev: prev,\n  next: next,\n  find: find,\n  contains: contains,\n  all: lists_all,\n  sum: sum,\n  from: from,\n  isEmpty: isEmpty,\n  clusterBy: clusterBy,\n  compact: compact,\n  unique: unique\n});\n;// CONCATENATED MODULE: ./src/js/core/dom.js\n\n\n\n\nvar NBSP_CHAR = String.fromCharCode(160);\nvar ZERO_WIDTH_NBSP_CHAR = \"\\uFEFF\";\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function (node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  }\n\n  // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\nvar isPre = makePredByNodeName('PRE');\nvar isLi = makePredByNodeName('LI');\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\nvar isTable = makePredByNodeName('TABLE');\nvar isData = makePredByNodeName('DATA');\nfunction isInline(node) {\n  return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node);\n}\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\nvar isHr = makePredByNodeName('HR');\nfunction isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\nvar isBlockquote = makePredByNodeName('BLOCKQUOTE');\nfunction isBodyContainer(node) {\n  return isCell(node) || isBlockquote(node) || isEditable(node);\n}\nvar isAnchor = makePredByNodeName('A');\nfunction isParaInline(node) {\n  return isInline(node) && !!ancestor(node, isPara);\n}\nfunction isBodyInline(node) {\n  return isInline(node) && !ancestor(node, isPara);\n}\nvar isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n  var siblings = [];\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n  siblings.push(node);\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n  return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\nvar blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n  if (node) {\n    return node.childNodes.length;\n  }\n  return 0;\n}\n\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while (node = node.firstElementChild);\n  return dom_isEmpty(node);\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction dom_isEmpty(node) {\n  var len = nodeLength(node);\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n  return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) {\n      return node;\n    }\n    if (isEditable(node)) {\n      break;\n    }\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n  while (node) {\n    if (nodeLength(node) !== 1) {\n      break;\n    }\n    if (pred(node)) {\n      return node;\n    }\n    if (isEditable(node)) {\n      break;\n    }\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n  var ancestors = [];\n  ancestor(node, function (el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n    return pred(el);\n  });\n  return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n  var ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n  var ancestors = listAncestor(nodeA);\n  for (var n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n  return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n  var descendants = [];\n  pred = pred || func.ok;\n\n  // start DFS(depth first search) with node\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n    for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n  return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n  var parent = node.parentNode;\n  var wrapper = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<' + wrapperName + '>')[0];\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n  return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n  var next = preceding.nextSibling;\n  var parent = preceding.parentNode;\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n  return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild, isSkipPaddingBlankHTML) {\n  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(aChild, function (idx, child) {\n    // special case: appending a pure UL/OL to a LI element creates inaccessible LI element\n    // e.g. press enter in last LI which has UL/OL-subelements\n    // Therefore, if current node is LI element with no child nodes (text-node) and appending a list, add a br before\n    if (!isSkipPaddingBlankHTML && isLi(node) && node.firstChild === null && isList(child)) {\n      node.appendChild(create(\"br\"));\n    }\n    node.appendChild(child);\n  });\n  return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (position(node) !== 0) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n  while (node && node !== ancestor) {\n    if (position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n  var offset = 0;\n  while (node = node.previousSibling) {\n    offset += 1;\n  }\n  return offset;\n}\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n  var node;\n  var offset;\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    node = point.node.parentNode;\n    offset = position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n  var node, offset;\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    var nextTextNode = getNextTextNode(point.node);\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/**\n * Find next boundaryPoint for preorder / depth first traversal of the DOM\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  var node,\n    offset = 0;\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    node = point.node.parentNode;\n    offset = position(point.node) + 1;\n\n    // if parent node is editable,  return current node's sibling node.\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/*\n* returns the next Text node index or 0 if not found.\n*/\nfunction getNextTextNode(actual) {\n  if (!actual.nextSibling) return undefined;\n  if (actual.parent !== actual.nextSibling.parent) return undefined;\n  if (isText(actual.nextSibling)) return actual.nextSibling;else return getNextTextNode(actual.nextSibling);\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || dom_isEmpty(point.node)) {\n    return true;\n  }\n  var leftNode = point.node.childNodes[point.offset - 1];\n  var rightNode = point.node.childNodes[point.offset];\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode)) || isTable(rightNode)) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n    point = prevPoint(point);\n  }\n  return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n    point = nextPoint(point);\n  }\n  return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && ch !== ' ' && ch !== NBSP_CHAR;\n}\n\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n\n/**\n * @method walkPoint - preorder / depth first traversal of the DOM\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  var point = startPoint;\n  while (point && point.node) {\n    handler(point);\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n    var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n  var ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n  var current = ancestor;\n  for (var i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n  return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n  var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  var isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  }\n\n  // edge case\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  }\n\n  // split #text\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    var childNode = point.node.childNodes[point.offset];\n    var childNodes = listNext(childNode);\n    var clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, childNodes);\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n    if (isDiscardEmptySplits) {\n      if (dom_isEmpty(point.node)) {\n        remove(point.node);\n      }\n      if (dom_isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n    return clone;\n  }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  var ancestors = listAncestor(point.node, func.eq(root));\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n  // Filter elements with sibling elements\n  if (ancestors.length > 2) {\n    var domList = ancestors.slice(0, ancestors.length - 1);\n    var ifHasNextSibling = domList.find(function (item) {\n      return item.nextSibling;\n    });\n    if (ifHasNextSibling && point.offset != 0 && isRightEdgePoint(point)) {\n      var nestSibling = ifHasNextSibling.nextSibling;\n      var textNode;\n      if (nestSibling.nodeType == 1) {\n        textNode = nestSibling.childNodes[0];\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0\n        };\n      } else if (nestSibling.nodeType == 3 && !nestSibling.data.match(/[\\n\\r]/g)) {\n        textNode = nestSibling;\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0\n        };\n      }\n    }\n  }\n  return ancestors.reduce(function (node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n    return splitNode({\n      node: parent,\n      offset: node ? position(node) : nodeLength(parent)\n    }, options);\n  });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  var pred = isInline ? isPara : isBodyContainer;\n  var ancestors = listAncestor(point.node, pred);\n  var topAncestor = lists.last(ancestors) || point.node;\n  var splitRoot, container;\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  }\n\n  // if splitRoot is exists, split with splitTree\n  var pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline\n  });\n\n  // if container is point.node, find pivot with point.offset\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n  return {\n    rightNode: pivot,\n    container: container\n  };\n}\nfunction create(nodeName) {\n  return document.createElement(nodeName);\n}\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) {\n    return;\n  }\n  if (node.removeNode) {\n    return node.removeNode(isRemoveChild);\n  }\n  var parent = node.parentNode;\n  if (!isRemoveChild) {\n    var nodes = [];\n    for (var i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n    for (var _i = 0, _len = nodes.length; _i < _len; _i++) {\n      parent.insertBefore(nodes[_i], node);\n    }\n  }\n  parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n    var parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n  var newNode = create(nodeName);\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n  return newNode;\n}\nvar isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n  var val = isTextarea($node[0]) ? $node.val() : $node.html();\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n  return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n  var markup = value($node);\n  if (isNewlineOnBlock) {\n    var regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function (match, endSlash, name) {\n      name = name.toUpperCase();\n      var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash;\n      var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n      return match + (isEndOfInlineContainer || isBlockNode ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n  return markup;\n}\nfunction posFromPlaceholder(placeholder) {\n  var $placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(placeholder);\n  var pos = $placeholder.offset();\n  var height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height\n  };\n}\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.on(key, events[key]);\n  });\n}\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.off(key, events[key]);\n  });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n/* harmony default export */ const dom = ({\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR: NBSP_CHAR,\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,\n  /** @property {String} blank */\n  blank: blankHTML,\n  /** @property {String} emptyPara */\n  emptyPara: \"<p>\".concat(blankHTML, \"</p>\"),\n  makePredByNodeName: makePredByNodeName,\n  isEditable: isEditable,\n  isControlSizing: isControlSizing,\n  isText: isText,\n  isElement: isElement,\n  isVoid: isVoid,\n  isPara: isPara,\n  isPurePara: isPurePara,\n  isHeading: isHeading,\n  isInline: isInline,\n  isBlock: func.not(isInline),\n  isBodyInline: isBodyInline,\n  isBody: isBody,\n  isParaInline: isParaInline,\n  isPre: isPre,\n  isList: isList,\n  isTable: isTable,\n  isData: isData,\n  isCell: isCell,\n  isBlockquote: isBlockquote,\n  isBodyContainer: isBodyContainer,\n  isAnchor: isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi: isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea: isTextarea,\n  deepestChildIsEmpty: deepestChildIsEmpty,\n  isEmpty: dom_isEmpty,\n  isEmptyAnchor: func.and(isAnchor, dom_isEmpty),\n  isClosestSibling: isClosestSibling,\n  withClosestSiblings: withClosestSiblings,\n  nodeLength: nodeLength,\n  isLeftEdgePoint: isLeftEdgePoint,\n  isRightEdgePoint: isRightEdgePoint,\n  isEdgePoint: isEdgePoint,\n  isLeftEdgeOf: isLeftEdgeOf,\n  isRightEdgeOf: isRightEdgeOf,\n  isLeftEdgePointOf: isLeftEdgePointOf,\n  isRightEdgePointOf: isRightEdgePointOf,\n  prevPoint: prevPoint,\n  nextPoint: nextPoint,\n  nextPointWithEmptyNode: nextPointWithEmptyNode,\n  isSamePoint: isSamePoint,\n  isVisiblePoint: isVisiblePoint,\n  prevPointUntil: prevPointUntil,\n  nextPointUntil: nextPointUntil,\n  isCharPoint: isCharPoint,\n  isSpacePoint: isSpacePoint,\n  walkPoint: walkPoint,\n  ancestor: ancestor,\n  singleChildAncestor: singleChildAncestor,\n  listAncestor: listAncestor,\n  lastAncestor: lastAncestor,\n  listNext: listNext,\n  listPrev: listPrev,\n  listDescendant: listDescendant,\n  commonAncestor: commonAncestor,\n  wrap: wrap,\n  insertAfter: insertAfter,\n  appendChildNodes: appendChildNodes,\n  position: position,\n  hasChildren: hasChildren,\n  makeOffsetPath: makeOffsetPath,\n  fromOffsetPath: fromOffsetPath,\n  splitTree: splitTree,\n  splitPoint: splitPoint,\n  create: create,\n  createText: createText,\n  remove: remove,\n  removeWhile: removeWhile,\n  replace: replace,\n  html: html,\n  value: value,\n  posFromPlaceholder: posFromPlaceholder,\n  attachEvents: attachEvents,\n  detachEvents: detachEvents,\n  isCustomStyleTag: isCustomStyleTag\n});\n;// CONCATENATED MODULE: ./src/js/Context.js\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Context = /*#__PURE__*/function () {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  function Context($note, options) {\n    _classCallCheck(this, Context);\n    this.$note = $note;\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, options);\n\n    // init ui with options\n    (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().summernote.ui_template(this.options);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.initialize();\n  }\n\n  /**\n   * create layout and initialize modules and other resources\n   */\n  return _createClass(Context, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.layoutInfo = this.ui.createLayout(this.$note);\n      this._initialize();\n      this.$note.hide();\n      return this;\n    }\n\n    /**\n     * destroy modules and other resources and remove layout\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._destroy();\n      this.$note.removeData('summernote');\n      this.ui.removeLayout(this.$note, this.layoutInfo);\n    }\n\n    /**\n     * destory modules and other resources and initialize it again\n     */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var disabled = this.isDisabled();\n      this.code(dom.emptyPara);\n      this._destroy();\n      this._initialize();\n      if (disabled) {\n        this.disable();\n      }\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\n      var _this = this;\n      // set own id\n      this.options.id = func.uniqueId(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now());\n      // set default container for tooltips, popovers, and dialogs\n      this.options.container = this.options.container || this.layoutInfo.editor;\n\n      // add optional buttons\n      var buttons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.buttons);\n      Object.keys(buttons).forEach(function (key) {\n        _this.memo('button.' + key, buttons[key]);\n      });\n      var modules = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.modules, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.plugins || {});\n\n      // add and initialize modules\n      Object.keys(modules).forEach(function (key) {\n        _this.module(key, modules[key], true);\n      });\n      Object.keys(this.modules).forEach(function (key) {\n        _this.initializeModule(key);\n      });\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      var _this2 = this;\n      // destroy modules with reversed order\n      Object.keys(this.modules).reverse().forEach(function (key) {\n        _this2.removeModule(key);\n      });\n      Object.keys(this.memos).forEach(function (key) {\n        _this2.removeMemo(key);\n      });\n      // trigger custom onDestroy callback\n      this.triggerEvent('destroy', this);\n    }\n  }, {\n    key: \"code\",\n    value: function code(html) {\n      var isActivated = this.invoke('codeview.isActivated');\n      if (html === undefined) {\n        this.invoke('codeview.sync');\n        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n      } else {\n        if (isActivated) {\n          this.invoke('codeview.sync', html);\n        } else {\n          this.layoutInfo.editable.html(html);\n        }\n        this.$note.val(html);\n        this.triggerEvent('change', html, this.layoutInfo.editable);\n      }\n    }\n  }, {\n    key: \"isDisabled\",\n    value: function isDisabled() {\n      return this.layoutInfo.editable.attr('contenteditable') === 'false';\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      this.layoutInfo.editable.attr('contenteditable', true);\n      this.invoke('toolbar.activate', true);\n      this.triggerEvent('disable', false);\n      this.options.editing = true;\n    }\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      // close codeview if codeview is opend\n      if (this.invoke('codeview.isActivated')) {\n        this.invoke('codeview.deactivate');\n      }\n      this.layoutInfo.editable.attr('contenteditable', false);\n      this.options.editing = false;\n      this.invoke('toolbar.deactivate', true);\n      this.triggerEvent('disable', true);\n    }\n  }, {\n    key: \"triggerEvent\",\n    value: function triggerEvent() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n      if (callback) {\n        callback.apply(this.$note[0], args);\n      }\n      this.$note.trigger('summernote.' + namespace, args);\n    }\n  }, {\n    key: \"initializeModule\",\n    value: function initializeModule(key) {\n      var module = this.modules[key];\n      module.shouldInitialize = module.shouldInitialize || func.ok;\n      if (!module.shouldInitialize()) {\n        return;\n      }\n\n      // initialize module\n      if (module.initialize) {\n        module.initialize();\n      }\n\n      // attach events\n      if (module.events) {\n        dom.attachEvents(this.$note, module.events);\n      }\n    }\n  }, {\n    key: \"module\",\n    value: function module(key, ModuleClass, withoutIntialize) {\n      if (arguments.length === 1) {\n        return this.modules[key];\n      }\n      this.modules[key] = new ModuleClass(this);\n      if (!withoutIntialize) {\n        this.initializeModule(key);\n      }\n    }\n  }, {\n    key: \"removeModule\",\n    value: function removeModule(key) {\n      var module = this.modules[key];\n      if (module.shouldInitialize()) {\n        if (module.events) {\n          dom.detachEvents(this.$note, module.events);\n        }\n        if (module.destroy) {\n          module.destroy();\n        }\n      }\n      delete this.modules[key];\n    }\n  }, {\n    key: \"memo\",\n    value: function memo(key, obj) {\n      if (arguments.length === 1) {\n        return this.memos[key];\n      }\n      this.memos[key] = obj;\n    }\n  }, {\n    key: \"removeMemo\",\n    value: function removeMemo(key) {\n      if (this.memos[key] && this.memos[key].destroy) {\n        this.memos[key].destroy();\n      }\n      delete this.memos[key];\n    }\n\n    /**\n     * Some buttons need to change their visual style immediately once they get pressed\n     */\n  }, {\n    key: \"createInvokeHandlerAndUpdateState\",\n    value: function createInvokeHandlerAndUpdateState(namespace, value) {\n      var _this3 = this;\n      return function (event) {\n        _this3.createInvokeHandler(namespace, value)(event);\n        _this3.invoke('buttons.updateCurrentStyle');\n      };\n    }\n  }, {\n    key: \"createInvokeHandler\",\n    value: function createInvokeHandler(namespace, value) {\n      var _this4 = this;\n      return function (event) {\n        event.preventDefault();\n        var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n        _this4.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n      };\n    }\n  }, {\n    key: \"invoke\",\n    value: function invoke() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var splits = namespace.split('.');\n      var hasSeparator = splits.length > 1;\n      var moduleName = hasSeparator && lists.head(splits);\n      var methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n      var module = this.modules[moduleName || 'editor'];\n      if (!moduleName && this[methodName]) {\n        return this[methodName].apply(this, args);\n      } else if (module && module[methodName] && module.shouldInitialize()) {\n        return module[methodName].apply(module, args);\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/summernote.js\nfunction summernote_typeof(o) { \"@babel/helpers - typeof\"; return summernote_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, summernote_typeof(o); }\n\n\n\n\nexternal_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function summernote() {\n    var type = summernote_typeof(lists.head(arguments));\n    var isExternalAPICalled = type === 'string';\n    var hasInitOptions = type === 'object';\n    var options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n    // Update options\n    options.langInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'], (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang[options.lang]);\n    options.icons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n    this.each(function (idx, note) {\n      var $note = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(note);\n      if (!$note.data('summernote')) {\n        var context = new Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n    var $note = this.first();\n    if ($note.length) {\n      var context = $note.data('summernote');\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n    return this;\n  }\n});\n;// CONCATENATED MODULE: ./src/js/core/range.js\nfunction range_typeof(o) { \"@babel/helpers - typeof\"; return range_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, range_typeof(o); }\nfunction range_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction range_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, range_toPropertyKey(o.key), o); } }\nfunction range_createClass(e, r, t) { return r && range_defineProperties(e.prototype, r), t && range_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction range_toPropertyKey(t) { var i = range_toPrimitive(t, \"string\"); return \"symbol\" == range_typeof(i) ? i : i + \"\"; }\nfunction range_toPrimitive(t, r) { if (\"object\" != range_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != range_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n  var container = textRange.parentElement();\n  var offset;\n  var tester = document.body.createTextRange();\n  var prevContainer;\n  var childNodes = lists.from(container.childNodes);\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n    tester.moveToElementText(childNodes[offset]);\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n    prevContainer = childNodes[offset];\n  }\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    var textRangeStart = document.body.createTextRange();\n    var curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n    var pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    var textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    // [workaround] enforce IE to re-reference curTextNode, hack\n    var dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n    container = curTextNode;\n    offset = textCount;\n  }\n  return {\n    cont: container,\n    offset: offset\n  };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n  var textRangeInfo = function textRangeInfo(container, offset) {\n    var node, isCollapseToStart;\n    if (dom.isText(container)) {\n      var prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      var prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n      offset = 0;\n      isCollapseToStart = false;\n    }\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset\n    };\n  };\n  var textRange = document.body.createTextRange();\n  var info = textRangeInfo(point.node, point.offset);\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\nvar WrappedRange = /*#__PURE__*/function () {\n  function WrappedRange(sc, so, ec, eo) {\n    range_classCallCheck(this, WrappedRange);\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo;\n\n    // isOnEditable: judge whether range is on editable or not\n    this.isOnEditable = this.makeIsOn(dom.isEditable);\n    // isOnList: judge whether range is on list node or not\n    this.isOnList = this.makeIsOn(dom.isList);\n    // isOnAnchor: judge whether range is on anchor node or not\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n    // isOnCell: judge whether range is on cell node or not\n    this.isOnCell = this.makeIsOn(dom.isCell);\n    // isOnData: judge whether range is on data node or not\n    this.isOnData = this.makeIsOn(dom.isData);\n  }\n\n  // nativeRange: get nativeRange from sc, so, ec, eo\n  return range_createClass(WrappedRange, [{\n    key: \"nativeRange\",\n    value: function nativeRange() {\n      if (env.isW3CRangeSupport) {\n        var w3cRange = document.createRange();\n        w3cRange.setStart(this.sc, this.so);\n        w3cRange.setEnd(this.ec, this.eo);\n        return w3cRange;\n      } else {\n        var textRange = pointToTextRange({\n          node: this.sc,\n          offset: this.so\n        });\n        textRange.setEndPoint('EndToEnd', pointToTextRange({\n          node: this.ec,\n          offset: this.eo\n        }));\n        return textRange;\n      }\n    }\n  }, {\n    key: \"getPoints\",\n    value: function getPoints() {\n      return {\n        sc: this.sc,\n        so: this.so,\n        ec: this.ec,\n        eo: this.eo\n      };\n    }\n  }, {\n    key: \"getStartPoint\",\n    value: function getStartPoint() {\n      return {\n        node: this.sc,\n        offset: this.so\n      };\n    }\n  }, {\n    key: \"getEndPoint\",\n    value: function getEndPoint() {\n      return {\n        node: this.ec,\n        offset: this.eo\n      };\n    }\n\n    /**\n     * select update visible range\n     */\n  }, {\n    key: \"select\",\n    value: function select() {\n      var nativeRng = this.nativeRange();\n      if (env.isW3CRangeSupport) {\n        var selection = document.getSelection();\n        if (selection.rangeCount > 0) {\n          selection.removeAllRanges();\n        }\n        selection.addRange(nativeRng);\n      } else {\n        nativeRng.select();\n      }\n      return this;\n    }\n\n    /**\n     * Moves the scrollbar to start container(sc) of current range\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"scrollIntoView\",\n    value: function scrollIntoView(container) {\n      var height = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(container).height();\n      if (container.scrollTop + height < this.sc.offsetTop) {\n        container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n      }\n      return this;\n    }\n\n    /**\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"normalize\",\n    value: function normalize() {\n      /**\n       * @param {BoundaryPoint} point\n       * @param {Boolean} isLeftToRight - true: prefer to choose right node\n       *                                - false: prefer to choose left node\n       * @return {BoundaryPoint}\n       */\n      var getVisiblePoint = function getVisiblePoint(point, isLeftToRight) {\n        if (!point) {\n          return point;\n        }\n\n        // Just use the given point [XXX:Adhoc]\n        //  - case 01. if the point is on the middle of the node\n        //  - case 02. if the point is on the right edge and prefer to choose left node\n        //  - case 03. if the point is on the left edge and prefer to choose right node\n        //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n        //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n        //  - case 06. if the point is on the block node and there is no children\n        if (dom.isVisiblePoint(point)) {\n          if (!dom.isEdgePoint(point) || dom.isRightEdgePoint(point) && !isLeftToRight || dom.isLeftEdgePoint(point) && isLeftToRight || dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling) || dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling) || dom.isBlock(point.node) && dom.isEmpty(point.node)) {\n            return point;\n          }\n        }\n\n        // point on block's edge\n        var block = dom.ancestor(point.node, dom.isBlock);\n        var hasRightNode = false;\n        if (!hasRightNode) {\n          var prevPoint = dom.prevPoint(point) || {\n            node: null\n          };\n          hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n        }\n        var hasLeftNode = false;\n        if (!hasLeftNode) {\n          var _nextPoint = dom.nextPoint(point) || {\n            node: null\n          };\n          hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(_nextPoint.node)) && isLeftToRight;\n        }\n        if (hasRightNode || hasLeftNode) {\n          // returns point already on visible point\n          if (dom.isVisiblePoint(point)) {\n            return point;\n          }\n          // reverse direction\n          isLeftToRight = !isLeftToRight;\n        }\n        var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n        return nextPoint || point;\n      };\n      var endPoint = getVisiblePoint(this.getEndPoint(), false);\n      var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns matched nodes on range\n     *\n     * @param {Function} [pred] - predicate function\n     * @param {Object} [options]\n     * @param {Boolean} [options.includeAncestor]\n     * @param {Boolean} [options.fullyContains]\n     * @return {Node[]}\n     */\n  }, {\n    key: \"nodes\",\n    value: function nodes(pred, options) {\n      pred = pred || func.ok;\n      var includeAncestor = options && options.includeAncestor;\n      var fullyContains = options && options.fullyContains;\n\n      // TODO compare points and sort\n      var startPoint = this.getStartPoint();\n      var endPoint = this.getEndPoint();\n      var nodes = [];\n      var leftEdgeNodes = [];\n      dom.walkPoint(startPoint, endPoint, function (point) {\n        if (dom.isEditable(point.node)) {\n          return;\n        }\n        var node;\n        if (fullyContains) {\n          if (dom.isLeftEdgePoint(point)) {\n            leftEdgeNodes.push(point.node);\n          }\n          if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n            node = point.node;\n          }\n        } else if (includeAncestor) {\n          node = dom.ancestor(point.node, pred);\n        } else {\n          node = point.node;\n        }\n        if (node && pred(node)) {\n          nodes.push(node);\n        }\n      }, true);\n      return lists.unique(nodes);\n    }\n\n    /**\n     * returns commonAncestor of range\n     * @return {Element} - commonAncestor\n     */\n  }, {\n    key: \"commonAncestor\",\n    value: function commonAncestor() {\n      return dom.commonAncestor(this.sc, this.ec);\n    }\n\n    /**\n     * returns expanded range by pred\n     *\n     * @param {Function} pred - predicate function\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"expand\",\n    value: function expand(pred) {\n      var startAncestor = dom.ancestor(this.sc, pred);\n      var endAncestor = dom.ancestor(this.ec, pred);\n      if (!startAncestor && !endAncestor) {\n        return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n      }\n      var boundaryPoints = this.getPoints();\n      if (startAncestor) {\n        boundaryPoints.sc = startAncestor;\n        boundaryPoints.so = 0;\n      }\n      if (endAncestor) {\n        boundaryPoints.ec = endAncestor;\n        boundaryPoints.eo = dom.nodeLength(endAncestor);\n      }\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n\n    /**\n     * @param {Boolean} isCollapseToStart\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"collapse\",\n    value: function collapse(isCollapseToStart) {\n      if (isCollapseToStart) {\n        return new WrappedRange(this.sc, this.so, this.sc, this.so);\n      } else {\n        return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n      }\n    }\n\n    /**\n     * splitText on range\n     */\n  }, {\n    key: \"splitText\",\n    value: function splitText() {\n      var isSameContainer = this.sc === this.ec;\n      var boundaryPoints = this.getPoints();\n      if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n        this.ec.splitText(this.eo);\n      }\n      if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n        boundaryPoints.sc = this.sc.splitText(this.so);\n        boundaryPoints.so = 0;\n        if (isSameContainer) {\n          boundaryPoints.ec = boundaryPoints.sc;\n          boundaryPoints.eo = this.eo - this.so;\n        }\n      }\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n\n    /**\n     * delete contents on range\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"deleteContents\",\n    value: function deleteContents() {\n      if (this.isCollapsed()) {\n        return this;\n      }\n      var rng = this.splitText();\n      var nodes = rng.nodes(null, {\n        fullyContains: true\n      });\n\n      // find new cursor point\n      var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {\n        return !lists.contains(nodes, point.node);\n      });\n      var emptyParents = [];\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(nodes, function (idx, node) {\n        // find empty parents\n        var parent = node.parentNode;\n        if (point.node !== parent && dom.nodeLength(parent) === 1) {\n          emptyParents.push(parent);\n        }\n        dom.remove(node, false);\n      });\n\n      // remove empty parents\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyParents, function (idx, node) {\n        dom.remove(node, false);\n      });\n      return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize();\n    }\n\n    /**\n     * makeIsOn: return isOn(pred) function\n     */\n  }, {\n    key: \"makeIsOn\",\n    value: function makeIsOn(pred) {\n      return function () {\n        var ancestor = dom.ancestor(this.sc, pred);\n        return !!ancestor && ancestor === dom.ancestor(this.ec, pred);\n      };\n    }\n\n    /**\n     * @param {Function} pred\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isLeftEdgeOf\",\n    value: function isLeftEdgeOf(pred) {\n      if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n        return false;\n      }\n      var node = dom.ancestor(this.sc, pred);\n      return node && dom.isLeftEdgeOf(this.sc, node);\n    }\n\n    /**\n     * returns whether range was collapsed or not\n     */\n  }, {\n    key: \"isCollapsed\",\n    value: function isCollapsed() {\n      return this.sc === this.ec && this.so === this.eo;\n    }\n\n    /**\n     * wrap inline nodes which children of body with paragraph\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"wrapBodyInlineWithPara\",\n    value: function wrapBodyInlineWithPara() {\n      if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n        this.sc.innerHTML = dom.emptyPara;\n        return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n      }\n\n      /**\n       * [workaround] firefox often create range on not visible point. so normalize here.\n       *  - firefox: |<p>text</p>|\n       *  - chrome: <p>|text|</p>\n       */\n      var rng = this.normalize();\n      if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n        return rng;\n      }\n\n      // find inline top ancestor\n      var topAncestor;\n      if (dom.isInline(rng.sc)) {\n        var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n        topAncestor = lists.last(ancestors);\n        if (!dom.isInline(topAncestor)) {\n          topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n        }\n      } else {\n        topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n      }\n      if (topAncestor) {\n        // siblings not in paragraph\n        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n        // wrap with paragraph\n        if (inlineSiblings.length) {\n          var para = dom.wrap(lists.head(inlineSiblings), 'p');\n          dom.appendChildNodes(para, lists.tail(inlineSiblings));\n        }\n      }\n      return this.normalize();\n    }\n\n    /**\n     * insert node at current cursor\n     *\n     * @param {Node} node\n     * @param {Boolean} doNotInsertPara - default is false, removes added <p> that's added if true\n     * @return {Node}\n     */\n  }, {\n    key: \"insertNode\",\n    value: function insertNode(node) {\n      var doNotInsertPara = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var rng = this;\n      if (dom.isText(node) || dom.isInline(node)) {\n        rng = this.wrapBodyInlineWithPara().deleteContents();\n      }\n      var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n      if (info.rightNode) {\n        info.rightNode.parentNode.insertBefore(node, info.rightNode);\n        if (dom.isEmpty(info.rightNode) && (doNotInsertPara || dom.isPara(node))) {\n          info.rightNode.parentNode.removeChild(info.rightNode);\n        }\n      } else {\n        info.container.appendChild(node);\n      }\n      return node;\n    }\n\n    /**\n     * insert html at current cursor\n     */\n  }, {\n    key: \"pasteHTML\",\n    value: function pasteHTML(markup) {\n      markup = ((markup || '') + '').trim(markup);\n      var contentsContainer = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').html(markup)[0];\n      var childNodes = lists.from(contentsContainer.childNodes);\n\n      // const rng = this.wrapBodyInlineWithPara().deleteContents();\n      var rng = this;\n      var reversed = false;\n      if (rng.so >= 0) {\n        childNodes = childNodes.reverse();\n        reversed = true;\n      }\n      childNodes = childNodes.map(function (childNode) {\n        return rng.insertNode(childNode, !dom.isInline(childNode));\n      });\n      if (reversed) {\n        childNodes = childNodes.reverse();\n      }\n      return childNodes;\n    }\n\n    /**\n     * returns text in range\n     *\n     * @return {String}\n     */\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var nativeRng = this.nativeRange();\n      return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n    }\n\n    /**\n     * returns range for word before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getWordRange\",\n    value: function getWordRange(findAfter) {\n      var endPoint = this.getEndPoint();\n      if (!dom.isCharPoint(endPoint)) {\n        return this;\n      }\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        return !dom.isCharPoint(point);\n      });\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, function (point) {\n          return !dom.isCharPoint(point);\n        });\n      }\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns range for words before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getWordsRange\",\n    value: function getWordsRange(findAfter) {\n      var endPoint = this.getEndPoint();\n      var isNotTextPoint = function isNotTextPoint(point) {\n        return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n      };\n      if (isNotTextPoint(endPoint)) {\n        return this;\n      }\n      var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n      }\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns range for words before cursor that match with a Regex\n     *\n     * example:\n     *  range: 'hi @Peter Pan'\n     *  regex: '/@[a-z ]+/i'\n     *  return range: '@Peter Pan'\n     *\n     * @param {RegExp} [regex]\n     * @return {WrappedRange|null}\n     */\n  }, {\n    key: \"getWordsMatchRange\",\n    value: function getWordsMatchRange(regex) {\n      var endPoint = this.getEndPoint();\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n          return true;\n        }\n        var rng = new WrappedRange(point.node, point.offset, endPoint.node, endPoint.offset);\n        var result = regex.exec(rng.toString());\n        return result && result.index === 0;\n      });\n      var rng = new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n      var text = rng.toString();\n      var result = regex.exec(text);\n      if (result && result[0].length === text.length) {\n        return rng;\n      } else {\n        return null;\n      }\n    }\n\n    /**\n     * create offsetPath bookmark\n     *\n     * @param {Node} editable\n     */\n  }, {\n    key: \"bookmark\",\n    value: function bookmark(editable) {\n      return {\n        s: {\n          path: dom.makeOffsetPath(editable, this.sc),\n          offset: this.so\n        },\n        e: {\n          path: dom.makeOffsetPath(editable, this.ec),\n          offset: this.eo\n        }\n      };\n    }\n\n    /**\n     * create offsetPath bookmark base on paragraph\n     *\n     * @param {Node[]} paras\n     */\n  }, {\n    key: \"paraBookmark\",\n    value: function paraBookmark(paras) {\n      return {\n        s: {\n          path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n          offset: this.so\n        },\n        e: {\n          path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n          offset: this.eo\n        }\n      };\n    }\n\n    /**\n     * getClientRects\n     * @return {Rect[]}\n     */\n  }, {\n    key: \"getClientRects\",\n    value: function getClientRects() {\n      var nativeRng = this.nativeRange();\n      return nativeRng.getClientRects();\n    }\n  }]);\n}();\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\n/* harmony default export */ const range = ({\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function create(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) {\n      // collapsed\n      ec = sc;\n      eo = so;\n      return new WrappedRange(sc, so, ec, eo);\n    } else {\n      var wrappedRange = this.createFromSelection();\n      if (!wrappedRange && arguments.length === 1) {\n        var bodyElement = arguments[0];\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n      return wrappedRange;\n    }\n  },\n  createFromBodyElement: function createFromBodyElement(bodyElement) {\n    var isCollapseToStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n  createFromSelection: function createFromSelection() {\n    var sc, so, ec, eo;\n    if (env.isW3CRangeSupport) {\n      var selection = document.getSelection();\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n      var nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else {\n      // IE8: TextRange\n      var textRange = document.selection.createRange();\n      var textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      var textRangeStart = textRange;\n      textRangeStart.collapse(true);\n      var startPoint = textRangeToPoint(textRangeStart, true);\n      var endPoint = textRangeToPoint(textRangeEnd, false);\n\n      // same visible point case: range was collapsed.\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n    return new WrappedRange(sc, so, ec, eo);\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function createFromNode(node) {\n    var sc = node;\n    var so = 0;\n    var ec = node;\n    var eo = dom.nodeLength(ec);\n\n    // browsers can't target a picture or void node\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n    return this.create(sc, so, ec, eo);\n  },\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function createFromNodeBefore(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function createFromNodeAfter(node) {\n    return this.createFromNode(node).collapse();\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function createFromBookmark(editable, bookmark) {\n    var sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    var so = bookmark.s.offset;\n    var ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    var eo = bookmark.e.offset;\n    return new WrappedRange(sc, so, ec, eo);\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function createFromParaBookmark(bookmark, paras) {\n    var so = bookmark.s.offset;\n    var eo = bookmark.e.offset;\n    var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n    return new WrappedRange(sc, so, ec, eo);\n  }\n});\n;// CONCATENATED MODULE: ./src/js/core/key.js\n\n\nvar KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\n/* harmony default export */ const key = ({\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: function isEdit(keyCode) {\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE], keyCode);\n  },\n  /**\n   * @method isRemove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isRemove: function isRemove(keyCode) {\n    // LB\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.DELETE], keyCode);\n  },\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: function isMove(keyCode) {\n    return lists.contains([KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN], keyCode);\n  },\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: function isNavigation(keyCode) {\n    return lists.contains([KEY_MAP.HOME, KEY_MAP.END, KEY_MAP.PAGEUP, KEY_MAP.PAGEDOWN], keyCode);\n  },\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP\n});\n;// CONCATENATED MODULE: ./src/js/core/async.js\n\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nfunction readFileAsDataURL(file) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(new FileReader(), {\n      onload: function onload(event) {\n        var dataURL = event.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: function onerror(err) {\n        deferred.reject(err);\n      }\n    }).readAsDataURL(file);\n  }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nfunction createImage(url) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n    var $img = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<img>');\n    $img.one('load', function () {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', function () {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none'\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n;// CONCATENATED MODULE: ./src/js/editing/History.js\nfunction History_typeof(o) { \"@babel/helpers - typeof\"; return History_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, History_typeof(o); }\nfunction History_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction History_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, History_toPropertyKey(o.key), o); } }\nfunction History_createClass(e, r, t) { return r && History_defineProperties(e.prototype, r), t && History_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction History_toPropertyKey(t) { var i = History_toPrimitive(t, \"string\"); return \"symbol\" == History_typeof(i) ? i : i + \"\"; }\nfunction History_toPrimitive(t, r) { if (\"object\" != History_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != History_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar History = /*#__PURE__*/function () {\n  function History(context) {\n    History_classCallCheck(this, History);\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n  return History_createClass(History, [{\n    key: \"makeSnapshot\",\n    value: function makeSnapshot() {\n      var rng = range.create(this.editable);\n      var emptyBookmark = {\n        s: {\n          path: [],\n          offset: 0\n        },\n        e: {\n          path: [],\n          offset: 0\n        }\n      };\n      return {\n        contents: this.$editable.html(),\n        bookmark: rng && rng.isOnEditable() ? rng.bookmark(this.editable) : emptyBookmark\n      };\n    }\n  }, {\n    key: \"applySnapshot\",\n    value: function applySnapshot(snapshot) {\n      if (snapshot.contents !== null) {\n        this.$editable.html(snapshot.contents);\n      }\n      if (snapshot.bookmark !== null) {\n        range.createFromBookmark(this.editable, snapshot.bookmark).select();\n      }\n    }\n\n    /**\n    * @method rewind\n    * Rewinds the history stack back to the first snapshot taken.\n    * Leaves the stack intact, so that \"Redo\" can still be used.\n    */\n  }, {\n    key: \"rewind\",\n    value: function rewind() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      // Return to the first available snapshot.\n      this.stackOffset = 0;\n\n      // Apply that snapshot.\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n\n    /**\n    *  @method commit\n    *  Resets history stack, but keeps current editor's content.\n    */\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      // Clear the stack.\n      this.stack = [];\n\n      // Restore stackOffset to its original value.\n      this.stackOffset = -1;\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    }\n\n    /**\n    * @method reset\n    * Resets the history stack completely; reverting to an empty editor.\n    */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      // Clear the stack.\n      this.stack = [];\n\n      // Restore stackOffset to its original value.\n      this.stackOffset = -1;\n\n      // Clear the editable area.\n      this.$editable.html('');\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    }\n\n    /**\n     * undo\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n      if (this.stackOffset > 0) {\n        this.stackOffset--;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n\n    /**\n     * redo\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.stack.length - 1 > this.stackOffset) {\n        this.stackOffset++;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n\n    /**\n     * recorded undo\n     */\n  }, {\n    key: \"recordUndo\",\n    value: function recordUndo() {\n      this.stackOffset++;\n\n      // Wash out stack after stackOffset\n      if (this.stack.length > this.stackOffset) {\n        this.stack = this.stack.slice(0, this.stackOffset);\n      }\n\n      // Create new snapshot and push it to the end\n      this.stack.push(this.makeSnapshot());\n\n      // If the stack size reachs to the limit, then slice it\n      if (this.stack.length > this.context.options.historyLimit) {\n        this.stack.shift();\n        this.stackOffset -= 1;\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Style.js\nfunction Style_typeof(o) { \"@babel/helpers - typeof\"; return Style_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Style_typeof(o); }\nfunction Style_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Style_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Style_toPropertyKey(o.key), o); } }\nfunction Style_createClass(e, r, t) { return r && Style_defineProperties(e.prototype, r), t && Style_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Style_toPropertyKey(t) { var i = Style_toPrimitive(t, \"string\"); return \"symbol\" == Style_typeof(i) ? i : i + \"\"; }\nfunction Style_toPrimitive(t, r) { if (\"object\" != Style_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Style_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Style = /*#__PURE__*/function () {\n  function Style() {\n    Style_classCallCheck(this, Style);\n  }\n  return Style_createClass(Style, [{\n    key: \"jQueryCSS\",\n    value:\n    /**\n     * @method jQueryCSS\n     *\n     * [workaround] for old jQuery\n     * passing an array of style properties to .css()\n     * will result in an object of property-value pairs.\n     * (compability with version < 1.9)\n     *\n     * @private\n     * @param  {jQuery} $obj\n     * @param  {Array} propertyNames - An array of one or more CSS properties.\n     * @return {Object}\n     */\n    function jQueryCSS($obj, propertyNames) {\n      var result = {};\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(propertyNames, function (idx, propertyName) {\n        result[propertyName] = $obj.css(propertyName);\n      });\n      return result;\n    }\n\n    /**\n     * returns style object from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n  }, {\n    key: \"fromNode\",\n    value: function fromNode($node) {\n      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n      var styleInfo = this.jQueryCSS($node, properties) || {};\n      var fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n      styleInfo['font-size'] = parseInt(fontSize, 10);\n      styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n      return styleInfo;\n    }\n\n    /**\n     * paragraph level style\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} styleInfo\n     */\n  }, {\n    key: \"stylePara\",\n    value: function stylePara(rng, styleInfo) {\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rng.nodes(dom.isPara, {\n        includeAncestor: true\n      }), function (idx, para) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css(styleInfo);\n      });\n    }\n\n    /**\n     * insert and returns styleNodes on range.\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} [options] - options for styleNodes\n     * @param {String} [options.nodeName] - default: `SPAN`\n     * @param {Boolean} [options.expandClosestSibling] - default: `false`\n     * @param {Boolean} [options.onlyPartialContains] - default: `false`\n     * @return {Node[]}\n     */\n  }, {\n    key: \"styleNodes\",\n    value: function styleNodes(rng, options) {\n      rng = rng.splitText();\n      var nodeName = options && options.nodeName || 'SPAN';\n      var expandClosestSibling = !!(options && options.expandClosestSibling);\n      var onlyPartialContains = !!(options && options.onlyPartialContains);\n      if (rng.isCollapsed()) {\n        return [rng.insertNode(dom.create(nodeName))];\n      }\n      var pred = dom.makePredByNodeName(nodeName);\n      var nodes = rng.nodes(dom.isText, {\n        fullyContains: true\n      }).map(function (text) {\n        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n      });\n      if (expandClosestSibling) {\n        if (onlyPartialContains) {\n          var nodesInRange = rng.nodes();\n          // compose with partial contains predication\n          pred = func.and(pred, function (node) {\n            return lists.contains(nodesInRange, node);\n          });\n        }\n        return nodes.map(function (node) {\n          var siblings = dom.withClosestSiblings(node, pred);\n          var head = lists.head(siblings);\n          var tails = lists.tail(siblings);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(tails, function (idx, elem) {\n            dom.appendChildNodes(head, elem.childNodes);\n            dom.remove(elem);\n          });\n          return lists.head(siblings);\n        });\n      } else {\n        return nodes;\n      }\n    }\n\n    /**\n     * get current style on cursor\n     *\n     * @param {WrappedRange} rng\n     * @return {Object} - object contains style properties.\n     */\n  }, {\n    key: \"current\",\n    value: function current(rng) {\n      var $cont = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n      var styleInfo = this.fromNode($cont);\n\n      // document.queryCommandState for toggle state\n      // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n      try {\n        styleInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(styleInfo, {\n          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n          'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n        });\n      } catch (e) {\n        // eslint-disable-next-line\n      }\n\n      // list-style-type to list-style(unordered, ordered)\n      if (!rng.isOnList()) {\n        styleInfo['list-style'] = 'none';\n      } else {\n        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n        var isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n      }\n      var para = dom.ancestor(rng.sc, dom.isPara);\n      if (para && para.style['line-height']) {\n        styleInfo['line-height'] = para.style.lineHeight;\n      } else {\n        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n        styleInfo['line-height'] = lineHeight.toFixed(1);\n      }\n      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n      styleInfo.range = rng;\n      return styleInfo;\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Bullet.js\nfunction Bullet_typeof(o) { \"@babel/helpers - typeof\"; return Bullet_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Bullet_typeof(o); }\nfunction Bullet_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Bullet_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Bullet_toPropertyKey(o.key), o); } }\nfunction Bullet_createClass(e, r, t) { return r && Bullet_defineProperties(e.prototype, r), t && Bullet_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Bullet_toPropertyKey(t) { var i = Bullet_toPrimitive(t, \"string\"); return \"symbol\" == Bullet_typeof(i) ? i : i + \"\"; }\nfunction Bullet_toPrimitive(t, r) { if (\"object\" != Bullet_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Bullet_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\nvar Bullet = /*#__PURE__*/function () {\n  function Bullet() {\n    Bullet_classCallCheck(this, Bullet);\n  }\n  return Bullet_createClass(Bullet, [{\n    key: \"insertOrderedList\",\n    value:\n    /**\n     * toggle ordered list\n     */\n    function insertOrderedList(editable) {\n      this.toggleList('OL', editable);\n    }\n\n    /**\n     * toggle unordered list\n     */\n  }, {\n    key: \"insertUnorderedList\",\n    value: function insertUnorderedList(editable) {\n      this.toggleList('UL', editable);\n    }\n\n    /**\n     * indent\n     */\n  }, {\n    key: \"indent\",\n    value: function indent(editable) {\n      var _this = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        if (dom.isLi(head)) {\n          var previousList = _this.findList(head.previousSibling);\n          if (previousList) {\n            paras.map(function (para) {\n              return previousList.appendChild(para);\n            });\n          } else {\n            _this.wrapList(paras, head.parentNode.nodeName);\n            paras.map(function (para) {\n              return para.parentNode;\n            }).map(function (para) {\n              return _this.appendToPrevious(para);\n            });\n          }\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              return (parseInt(val, 10) || 0) + 25;\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n\n    /**\n     * outdent\n     */\n  }, {\n    key: \"outdent\",\n    value: function outdent(editable) {\n      var _this2 = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        if (dom.isLi(head)) {\n          _this2.releaseList([paras]);\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              val = parseInt(val, 10) || 0;\n              return val > 25 ? val - 25 : '';\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n\n    /**\n     * toggle list\n     *\n     * @param {String} listName - OL or UL\n     */\n  }, {\n    key: \"toggleList\",\n    value: function toggleList(listName, editable) {\n      var _this3 = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var bookmark = rng.paraBookmark(paras);\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n      // paragraph to list\n      if (lists.find(paras, dom.isPurePara)) {\n        var wrappedParas = [];\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n          wrappedParas = wrappedParas.concat(_this3.wrapList(paras, listName));\n        });\n        paras = wrappedParas;\n        // list to paragraph or change list style\n      } else {\n        var diffLists = rng.nodes(dom.isList, {\n          includeAncestor: true\n        }).filter(function (listNode) {\n          return !external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().nodeName(listNode, listName);\n        });\n        if (diffLists.length) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(diffLists, function (idx, listNode) {\n            dom.replace(listNode, listName);\n          });\n        } else {\n          paras = this.releaseList(clustereds, true);\n        }\n      }\n      range.createFromParaBookmark(bookmark, paras).select();\n    }\n\n    /**\n     * @param {Node[]} paras\n     * @param {String} listName\n     * @return {Node[]}\n     */\n  }, {\n    key: \"wrapList\",\n    value: function wrapList(paras, listName) {\n      var head = lists.head(paras);\n      var last = lists.last(paras);\n      var prevList = dom.isList(head.previousSibling) && head.previousSibling;\n      var nextList = dom.isList(last.nextSibling) && last.nextSibling;\n      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n      // P to LI\n      paras = paras.map(function (para) {\n        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n      });\n\n      // append to list(<ul>, <ol>)\n      dom.appendChildNodes(listNode, paras, true);\n      if (nextList) {\n        dom.appendChildNodes(listNode, lists.from(nextList.childNodes), true);\n        dom.remove(nextList);\n      }\n      return paras;\n    }\n\n    /**\n     * @method releaseList\n     *\n     * @param {Array[]} clustereds\n     * @param {Boolean} isEscapseToBody\n     * @return {Node[]}\n     */\n  }, {\n    key: \"releaseList\",\n    value: function releaseList(clustereds, isEscapseToBody) {\n      var _this4 = this;\n      var releasedParas = [];\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        var last = lists.last(paras);\n        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n        var parentItem = headList.parentNode;\n        if (headList.parentNode.nodeName === 'LI') {\n          paras.map(function (para) {\n            var newList = _this4.findNextSiblings(para);\n            if (parentItem.nextSibling) {\n              parentItem.parentNode.insertBefore(para, parentItem.nextSibling);\n            } else {\n              parentItem.parentNode.appendChild(para);\n            }\n            if (newList.length) {\n              _this4.wrapList(newList, headList.nodeName);\n              para.appendChild(newList[0].parentNode);\n            }\n          });\n          if (headList.children.length === 0) {\n            parentItem.removeChild(headList);\n          }\n          if (parentItem.childNodes.length === 0) {\n            parentItem.parentNode.removeChild(parentItem);\n          }\n        } else {\n          var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n            node: last.parentNode,\n            offset: dom.position(last) + 1\n          }, {\n            isSkipPaddingBlankHTML: true\n          }) : null;\n          var middleList = dom.splitTree(headList, {\n            node: head.parentNode,\n            offset: dom.position(head)\n          }, {\n            isSkipPaddingBlankHTML: true\n          });\n          paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi);\n\n          // LI to P\n          if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n            paras = paras.map(function (para) {\n              return dom.replace(para, 'P');\n            });\n          }\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(lists.from(paras).reverse(), function (idx, para) {\n            dom.insertAfter(para, headList);\n          });\n\n          // remove empty lists\n          var rootLists = lists.compact([headList, middleList, lastList]);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rootLists, function (idx, rootList) {\n            var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(listNodes.reverse(), function (idx, listNode) {\n              if (!dom.nodeLength(listNode)) {\n                dom.remove(listNode, true);\n              }\n            });\n          });\n        }\n        releasedParas = releasedParas.concat(paras);\n      });\n      return releasedParas;\n    }\n\n    /**\n     * @method appendToPrevious\n     *\n     * Appends list to previous list item, if\n     * none exist it wraps the list in a new list item.\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n  }, {\n    key: \"appendToPrevious\",\n    value: function appendToPrevious(node) {\n      return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');\n    }\n\n    /**\n     * @method findList\n     *\n     * Finds an existing list in list item\n     *\n     * @param {HTMLNode} ListItem\n     * @return {Array[]}\n     */\n  }, {\n    key: \"findList\",\n    value: function findList(node) {\n      return node ? lists.find(node.children, function (child) {\n        return ['OL', 'UL'].indexOf(child.nodeName) > -1;\n      }) : null;\n    }\n\n    /**\n     * @method findNextSiblings\n     *\n     * Finds all list item siblings that follow it\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n  }, {\n    key: \"findNextSiblings\",\n    value: function findNextSiblings(node) {\n      var siblings = [];\n      while (node.nextSibling) {\n        siblings.push(node.nextSibling);\n        node = node.nextSibling;\n      }\n      return siblings;\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Typing.js\nfunction Typing_typeof(o) { \"@babel/helpers - typeof\"; return Typing_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Typing_typeof(o); }\nfunction Typing_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Typing_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Typing_toPropertyKey(o.key), o); } }\nfunction Typing_createClass(e, r, t) { return r && Typing_defineProperties(e.prototype, r), t && Typing_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Typing_toPropertyKey(t) { var i = Typing_toPrimitive(t, \"string\"); return \"symbol\" == Typing_typeof(i) ? i : i + \"\"; }\nfunction Typing_toPrimitive(t, r) { if (\"object\" != Typing_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Typing_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nvar Typing = /*#__PURE__*/function () {\n  function Typing(context) {\n    Typing_classCallCheck(this, Typing);\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet();\n    this.options = context.options;\n  }\n\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n  return Typing_createClass(Typing, [{\n    key: \"insertTab\",\n    value: function insertTab(rng, tabsize) {\n      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n      rng = rng.deleteContents();\n      rng.insertNode(tab, true);\n      rng = range.create(tab, tabsize);\n      rng.select();\n    }\n\n    /**\n     * insert paragraph\n     *\n     * @param {jQuery} $editable\n     * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n     *\n     * blockquoteBreakingLevel\n     *   0 - No break, the new paragraph remains inside the quote\n     *   1 - Break the first blockquote in the ancestors list\n     *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n     */\n  }, {\n    key: \"insertParagraph\",\n    value: function insertParagraph(editable, rng) {\n      rng = rng || range.create(editable);\n\n      // deleteContents on range.\n      rng = rng.deleteContents();\n\n      // Wrap range if it needs to be wrapped by paragraph\n      rng = rng.wrapBodyInlineWithPara();\n\n      // finding paragraph\n      var splitRoot = dom.ancestor(rng.sc, dom.isPara);\n      var nextPara;\n      // on paragraph: split paragraph\n      if (splitRoot) {\n        // if it is an empty line with li\n        if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n          // toggle UL/OL and escape\n          this.bullet.toggleList(splitRoot.parentNode.nodeName);\n          return;\n        } else {\n          var blockquote = null;\n          if (this.options.blockquoteBreakingLevel === 1) {\n            blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n          } else if (this.options.blockquoteBreakingLevel === 2) {\n            blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n          }\n          if (blockquote) {\n            // We're inside a blockquote and options ask us to break it\n            nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];\n            // If the split is right before a <br>, remove it so that there's no \"empty line\"\n            // after the split in the new blockquote created\n            if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(rng.sc.nextSibling).remove();\n            }\n            var split = dom.splitTree(blockquote, rng.getStartPoint(), {\n              isDiscardEmptySplits: true\n            });\n            if (split) {\n              split.parentNode.insertBefore(nextPara, split);\n            } else {\n              dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n            }\n          } else {\n            nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n            // not a blockquote, just insert the paragraph\n            var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n            emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyAnchors, function (idx, anchor) {\n              dom.remove(anchor);\n            });\n\n            // replace empty heading, pre or custom-made styleTag with P tag\n            if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n              nextPara = dom.replace(nextPara, 'p');\n            }\n          }\n        }\n        // no paragraph: insert empty paragraph\n      } else {\n        var next = rng.sc.childNodes[rng.so];\n        nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];\n        if (next) {\n          rng.sc.insertBefore(nextPara, next);\n        } else {\n          rng.sc.appendChild(nextPara);\n        }\n      }\n      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Table.js\nfunction Table_typeof(o) { \"@babel/helpers - typeof\"; return Table_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Table_typeof(o); }\nfunction Table_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Table_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Table_toPropertyKey(o.key), o); } }\nfunction Table_createClass(e, r, t) { return r && Table_defineProperties(e.prototype, r), t && Table_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Table_toPropertyKey(t) { var i = Table_toPrimitive(t, \"string\"); return \"symbol\" == Table_typeof(i) ? i : i + \"\"; }\nfunction Table_toPrimitive(t, r) { if (\"object\" != Table_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Table_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nvar TableResultAction = function TableResultAction(startPoint, where, action, domTable) {\n  var _startPoint = {\n    'colPos': 0,\n    'rowPos': 0\n  };\n  var _virtualTable = [];\n  var _actionCellList = [];\n\n  /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th') {\n      // Impossible to identify start Cell point\n      return;\n    }\n    _startPoint.colPos = startPoint.cellIndex;\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    var objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell\n    };\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition\n      }\n    };\n  }\n\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n    var newCellIndex = cellIndex;\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n  function addCellInfoToVirtual(row, cell) {\n    var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    var cellHasColspan = cell.colSpan > 1;\n    var cellHasRowspan = cell.rowSpan > 1;\n    var isThisSelectedCell = row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos;\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n    // Add span rows to virtual Table.\n    var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n    if (rowspanNumber > 1) {\n      for (var rp = 1; rp < rowspanNumber; rp++) {\n        var rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    }\n\n    // Add span cols to virtual table.\n    var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n    if (colspanNumber > 1) {\n      for (var cp = 1; cp < colspanNumber; cp++) {\n        var cellspanIndex = recoverCellIndex(row.rowIndex, cellIndex + cp);\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n  function createVirtualTable() {\n    var rows = domTable.rows;\n    for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      var cells = rows[rowIndex].cells;\n      for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.RemoveCell;\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.AddCell;\n  }\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  }\n\n  /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n  this.getActionList = function () {\n    var fixedRow = where === TableResultAction.where.Row ? _startPoint.rowPos : -1;\n    var fixedCol = where === TableResultAction.where.Column ? _startPoint.colPos : -1;\n    var actualPosition = 0;\n    var canContinue = true;\n    while (canContinue) {\n      var rowPosition = fixedRow >= 0 ? fixedRow : actualPosition;\n      var colPosition = fixedCol >= 0 ? fixedCol : actualPosition;\n      var row = _virtualTable[rowPosition];\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n      var cell = row[colPosition];\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      // Define action to be applied in this cell\n      var resultAction = TableResultAction.resultAction.Ignore;\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n      actualPosition++;\n    }\n    return _actionCellList;\n  };\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = {\n  'Row': 0,\n  'Column': 1\n};\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = {\n  'Add': 0,\n  'Delete': 1\n};\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = {\n  'Ignore': 0,\n  'SubtractSpanCount': 1,\n  'RemoveCell': 2,\n  'AddCell': 3,\n  'SumSpanCount': 4\n};\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nvar Table = /*#__PURE__*/function () {\n  function Table() {\n    Table_classCallCheck(this, Table);\n  }\n  return Table_createClass(Table, [{\n    key: \"tab\",\n    value:\n    /**\n     * handle tab key\n     *\n     * @param {WrappedRange} rng\n     * @param {Boolean} isShift\n     */\n    function tab(rng, isShift) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var table = dom.ancestor(cell, dom.isTable);\n      var cells = dom.listDescendant(table, dom.isCell);\n      var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n      if (nextCell) {\n        range.create(nextCell, 0).select();\n      }\n    }\n\n    /**\n     * Add a new row\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (top/bottom)\n     * @return {Node}\n     */\n  }, {\n    key: \"addRow\",\n    value: function addRow(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var currentTr = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var trAttributes = this.recoverAttributes(currentTr);\n      var html = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<tr' + trAttributes + '></tr>');\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var idCell = 0; idCell < actions.length; idCell++) {\n        var currentCell = actions[idCell];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            break;\n          case TableResultAction.resultAction.SumSpanCount:\n            {\n              if (position === 'top') {\n                var baseCellTr = currentCell.baseCell.parent;\n                var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n                if (isTopFromRowSpan) {\n                  var newTd = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                  html.append(newTd);\n                  break;\n                }\n              }\n              var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n              rowspanNumber++;\n              currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n            }\n            break;\n        }\n      }\n      if (position === 'top') {\n        currentTr.before(html);\n      } else {\n        var cellHasRowspan = cell.rowSpan > 1;\n        if (cellHasRowspan) {\n          var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).parent().find('tr')[lastTrIndex]).after(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(html));\n          return;\n        }\n        currentTr.after(html);\n      }\n    }\n\n    /**\n     * Add a new col\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (left/right)\n     * @return {Node}\n     */\n  }, {\n    key: \"addCol\",\n    value: function addCol(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var rowsGroup = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).siblings();\n      rowsGroup.push(row);\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        var currentCell = actions[actionIndex];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            if (position === 'right') {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n            break;\n          case TableResultAction.resultAction.SumSpanCount:\n            if (position === 'right') {\n              var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n              colspanNumber++;\n              currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n            break;\n        }\n      }\n    }\n\n    /*\n    * Copy attributes from element.\n    *\n    * @param {object} Element to recover attributes.\n    * @return {string} Copied string elements.\n    */\n  }, {\n    key: \"recoverAttributes\",\n    value: function recoverAttributes(el) {\n      var resultStr = '';\n      if (!el) {\n        return resultStr;\n      }\n      var attrList = el.attributes || [];\n      for (var i = 0; i < attrList.length; i++) {\n        if (attrList[i].name.toLowerCase() === 'id') {\n          continue;\n        }\n        if (attrList[i].specified) {\n          resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n        }\n      }\n      return resultStr;\n    }\n\n    /**\n     * Delete current row\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));\n      var rowPos = row[0].rowIndex;\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n        var baseCell = actions[actionIndex].baseCell;\n        var virtualPosition = actions[actionIndex].virtualTable;\n        var hasRowspan = baseCell.rowSpan && baseCell.rowSpan > 1;\n        var rowspanNumber = hasRowspan ? parseInt(baseCell.rowSpan, 10) : 0;\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n          case TableResultAction.resultAction.AddCell:\n            {\n              var nextRow = row.next('tr')[0];\n              if (!nextRow) {\n                continue;\n              }\n              var cloneRow = row[0].cells[cellPos];\n              if (hasRowspan) {\n                if (rowspanNumber > 2) {\n                  rowspanNumber--;\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                  nextRow.cells[cellPos].innerHTML = '';\n                } else if (rowspanNumber === 2) {\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].removeAttribute('rowSpan');\n                  nextRow.cells[cellPos].innerHTML = '';\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.SubtractSpanCount:\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                baseCell.setAttribute('rowSpan', rowspanNumber);\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              } else if (rowspanNumber === 2) {\n                baseCell.removeAttribute('rowSpan');\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.RemoveCell:\n            // Do not need remove cell because row will be deleted.\n            continue;\n        }\n      }\n      row.remove();\n    }\n\n    /**\n     * Delete current col\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n          case TableResultAction.resultAction.SubtractSpanCount:\n            {\n              var baseCell = actions[actionIndex].baseCell;\n              var hasColspan = baseCell.colSpan && baseCell.colSpan > 1;\n              if (hasColspan) {\n                var colspanNumber = baseCell.colSpan ? parseInt(baseCell.colSpan, 10) : 0;\n                if (colspanNumber > 2) {\n                  colspanNumber--;\n                  baseCell.setAttribute('colSpan', colspanNumber);\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                } else if (colspanNumber === 2) {\n                  baseCell.removeAttribute('colSpan');\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.RemoveCell:\n            dom.remove(actions[actionIndex].baseCell, true);\n            continue;\n        }\n      }\n    }\n\n    /**\n     * create empty table element\n     *\n     * @param {Number} rowCount\n     * @param {Number} colCount\n     * @return {Node}\n     */\n  }, {\n    key: \"createTable\",\n    value: function createTable(colCount, rowCount, options) {\n      var tds = [];\n      var tdHTML;\n      for (var idxCol = 0; idxCol < colCount; idxCol++) {\n        tds.push('<td>' + dom.blank + '</td>');\n      }\n      tdHTML = tds.join('');\n      var trs = [];\n      var trHTML;\n      for (var idxRow = 0; idxRow < rowCount; idxRow++) {\n        trs.push('<tr>' + tdHTML + '</tr>');\n      }\n      trHTML = trs.join('');\n      var $table = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<table>' + trHTML + '</table>');\n      if (options && options.tableClassName) {\n        $table.addClass(options.tableClassName);\n      }\n      return $table[0];\n    }\n\n    /**\n     * Delete current table\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('table').remove();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Editor.js\nfunction Editor_typeof(o) { \"@babel/helpers - typeof\"; return Editor_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Editor_typeof(o); }\nfunction Editor_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Editor_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Editor_toPropertyKey(o.key), o); } }\nfunction Editor_createClass(e, r, t) { return r && Editor_defineProperties(e.prototype, r), t && Editor_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Editor_toPropertyKey(t) { var i = Editor_toPrimitive(t, \"string\"); return \"symbol\" == Editor_typeof(i) ? i : i + \"\"; }\nfunction Editor_toPrimitive(t, r) { if (\"object\" != Editor_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Editor_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KEY_BOGUS = 'bogus';\nvar MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nvar TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nvar URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\n\n/**\n * @class Editor\n */\nvar Editor = /*#__PURE__*/function () {\n  function Editor(context) {\n    var _this = this;\n    Editor_classCallCheck(this, Editor);\n    this.context = context;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n    this.style = new Style();\n    this.table = new Table();\n    this.typing = new Typing(context);\n    this.bullet = new Bullet();\n    this.history = new History(context);\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName);\n\n    // native commands(with execCommand), generate function for execCommand\n    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor'];\n    for (var idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = function (sCmd) {\n        return function (value) {\n          _this.beforeCommand();\n          document.execCommand(sCmd, false, value);\n          _this.afterCommand(true);\n        };\n      }(commands[idx]);\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n    this.fontName = this.wrapCommand(function (value) {\n      return _this.fontStyling('font-family', env.validFontName(value));\n    });\n    this.fontSize = this.wrapCommand(function (value) {\n      var unit = _this.currentStyle()['font-size-unit'];\n      return _this.fontStyling('font-size', value + unit);\n    });\n    this.fontSizeUnit = this.wrapCommand(function (value) {\n      var size = _this.currentStyle()['font-size'];\n      return _this.fontStyling('font-size', size + value);\n    });\n    for (var _idx = 1; _idx <= 6; _idx++) {\n      this['formatH' + _idx] = function (idx) {\n        return function () {\n          _this.formatBlock('H' + idx);\n        };\n      }(_idx);\n      this.context.memo('help.formatH' + _idx, this.lang.help['formatH' + _idx]);\n    }\n    this.insertParagraph = this.wrapCommand(function () {\n      _this.typing.insertParagraph(_this.editable);\n    });\n    this.insertOrderedList = this.wrapCommand(function () {\n      _this.bullet.insertOrderedList(_this.editable);\n    });\n    this.insertUnorderedList = this.wrapCommand(function () {\n      _this.bullet.insertUnorderedList(_this.editable);\n    });\n    this.indent = this.wrapCommand(function () {\n      _this.bullet.indent(_this.editable);\n    });\n    this.outdent = this.wrapCommand(function () {\n      _this.bullet.outdent(_this.editable);\n    });\n\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n    this.insertNode = this.wrapCommand(function (node) {\n      if (_this.isLimited(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).text().length)) {\n        return;\n      }\n      var rng = _this.getLastRange();\n      rng.insertNode(node);\n      _this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n\n    /**\n     * insert text\n     * @param {String} text\n     */\n    this.insertText = this.wrapCommand(function (text) {\n      if (_this.isLimited(text.length)) {\n        return;\n      }\n      var rng = _this.getLastRange();\n      var textNode = rng.insertNode(dom.createText(text));\n      _this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n    this.pasteHTML = this.wrapCommand(function (markup) {\n      if (_this.isLimited(markup.length)) {\n        return;\n      }\n      markup = _this.context.invoke('codeview.purify', markup);\n      var contents = _this.getLastRange().pasteHTML(markup);\n      _this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n    this.formatBlock = this.wrapCommand(function (tagName, $target) {\n      var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle;\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock);\n      } else {\n        _this.onFormatBlock(tagName, $target);\n      }\n    });\n\n    /**\n     * insert horizontal rule\n     */\n    this.insertHorizontalRule = this.wrapCommand(function () {\n      var hrNode = _this.getLastRange().insertNode(dom.create('HR'));\n      if (hrNode.nextSibling) {\n        _this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n    this.lineHeight = this.wrapCommand(function (value) {\n      _this.style.stylePara(_this.getLastRange(), {\n        lineHeight: value\n      });\n    });\n\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n    this.createLink = this.wrapCommand(function (linkInfo) {\n      var rel = [];\n      var linkUrl = linkInfo.url;\n      var linkText = linkInfo.text;\n      var isNewWindow = linkInfo.isNewWindow;\n      var addNoReferrer = _this.options.linkAddNoReferrer;\n      var addNoOpener = _this.options.linkAddNoOpener;\n      var rng = linkInfo.range || _this.getLastRange();\n      var additionalTextLength = linkText.length - rng.toString().length;\n      if (additionalTextLength > 0 && _this.isLimited(additionalTextLength)) {\n        return;\n      }\n      var isTextChanged = rng.toString() !== linkText;\n\n      // handle spaced urls from input\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n      if (_this.options.onCreateLink) {\n        linkUrl = _this.options.onCreateLink(linkUrl);\n      } else {\n        linkUrl = _this.checkLinkUrl(linkUrl);\n      }\n      var anchors = [];\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        var anchor = rng.insertNode(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<A></A>').text(linkText)[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = _this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true\n        });\n      }\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(anchors, function (idx, anchor) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href', linkUrl);\n        if (isNewWindow) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('target', '_blank');\n          if (addNoReferrer) {\n            rel.push('noreferrer');\n          }\n          if (addNoOpener) {\n            rel.push('noopener');\n          }\n          if (rel.length) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('rel', rel.join(' '));\n          }\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).removeAttr('target');\n        }\n      });\n      _this.setLastRange(_this.createRangeFromList(anchors).select());\n    });\n\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n    this.color = this.wrapCommand(function (colorInfo) {\n      var foreColor = colorInfo.foreColor;\n      var backColor = colorInfo.backColor;\n      if (foreColor) {\n        document.execCommand('foreColor', false, foreColor);\n      }\n      if (backColor) {\n        document.execCommand('backColor', false, backColor);\n      }\n    });\n\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n    this.foreColor = this.wrapCommand(function (colorInfo) {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n    this.insertTable = this.wrapCommand(function (dim) {\n      var dimension = dim.split('x');\n      var rng = _this.getLastRange().deleteContents();\n      rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options));\n    });\n\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n    this.removeMedia = this.wrapCommand(function () {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).parent();\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).detach();\n      }\n      _this.setLastRange(range.createFromSelection($target).select());\n      _this.context.triggerEvent('media.delete', $target, _this.$editable);\n    });\n\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n    this.floatMe = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', value === 'none' ? '' : value);\n    });\n\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n    this.resize = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());\n      value = parseFloat(value);\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: ''\n        });\n      }\n    });\n  }\n  return Editor_createClass(Editor, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      // bind custom events\n      this.$editable.on('keydown', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          _this2.context.triggerEvent('enter', event);\n        }\n        _this2.context.triggerEvent('keydown', event);\n\n        // keep a snapshot to limit text on input event\n        _this2.snapshot = _this2.history.makeSnapshot();\n        _this2.hasKeyShortCut = false;\n        if (!event.isDefaultPrevented()) {\n          if (_this2.options.shortcuts) {\n            _this2.hasKeyShortCut = _this2.handleKeyMap(event);\n          } else {\n            _this2.preventDefaultEditableShortCuts(event);\n          }\n        }\n        if (_this2.isLimited(1, event)) {\n          var lastRange = _this2.getLastRange();\n          if (lastRange.eo - lastRange.so === 0) {\n            return false;\n          }\n        }\n        _this2.setLastRange();\n\n        // record undo in the key event except keyMap.\n        if (_this2.options.recordEveryKeystroke) {\n          if (_this2.hasKeyShortCut === false) {\n            _this2.history.recordUndo();\n          }\n        }\n      }).on('keyup', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('keyup', event);\n      }).on('focus', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('focus', event);\n      }).on('blur', function (event) {\n        _this2.context.triggerEvent('blur', event);\n      }).on('mousedown', function (event) {\n        _this2.context.triggerEvent('mousedown', event);\n      }).on('mouseup', function (event) {\n        _this2.setLastRange();\n        _this2.history.recordUndo();\n        _this2.context.triggerEvent('mouseup', event);\n      }).on('scroll', function (event) {\n        _this2.context.triggerEvent('scroll', event);\n      }).on('paste', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('paste', event);\n      }).on('copy', function (event) {\n        _this2.context.triggerEvent('copy', event);\n      }).on('input', function () {\n        // To limit composition characters (e.g. Korean)\n        if (_this2.isLimited(0) && _this2.snapshot) {\n          _this2.history.applySnapshot(_this2.snapshot);\n        }\n      });\n      this.$editable.attr('spellcheck', this.options.spellCheck);\n      this.$editable.attr('autocorrect', this.options.spellCheck);\n      if (this.options.disableGrammar) {\n        this.$editable.attr('data-gramm', false);\n      }\n\n      // init content before set event\n      this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n      this.$editable.on(env.inputEventName, func.debounce(function () {\n        _this2.context.triggerEvent('change', _this2.$editable.html(), _this2.$editable);\n      }, 10));\n      this.$editable.on('focusin', function (event) {\n        _this2.context.triggerEvent('focusin', event);\n      }).on('focusout', function (event) {\n        _this2.context.triggerEvent('focusout', event);\n      });\n      if (this.options.airMode) {\n        if (this.options.overrideContextMenu) {\n          this.$editor.on('contextmenu', function (event) {\n            _this2.context.triggerEvent('contextmenu', event);\n            return false;\n          });\n        }\n      } else {\n        if (this.options.width) {\n          this.$editor.outerWidth(this.options.width);\n        }\n        if (this.options.height) {\n          this.$editable.outerHeight(this.options.height);\n        }\n        if (this.options.maxHeight) {\n          this.$editable.css('max-height', this.options.maxHeight);\n        }\n        if (this.options.minHeight) {\n          this.$editable.css('min-height', this.options.minHeight);\n        }\n      }\n      this.history.recordUndo();\n      this.setLastRange();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$editable.off();\n    }\n  }, {\n    key: \"handleKeyMap\",\n    value: function handleKeyMap(event) {\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      var keys = [];\n      if (event.metaKey) {\n        keys.push('CMD');\n      }\n      if (event.ctrlKey && !event.altKey) {\n        keys.push('CTRL');\n      }\n      if (event.shiftKey) {\n        keys.push('SHIFT');\n      }\n      var keyName = key.nameFromCode[event.keyCode];\n      if (keyName) {\n        keys.push(keyName);\n      }\n      var eventName = keyMap[keys.join('+')];\n      if (keyName === 'TAB' && !this.options.tabDisable) {\n        this.afterCommand();\n      } else if (eventName) {\n        if (this.context.invoke(eventName) !== false) {\n          event.preventDefault();\n          return true;\n        }\n      } else if (key.isEdit(event.keyCode)) {\n        if (key.isRemove(event.keyCode)) {\n          this.context.invoke('removed');\n        }\n        this.afterCommand();\n      }\n      return false;\n    }\n  }, {\n    key: \"preventDefaultEditableShortCuts\",\n    value: function preventDefaultEditableShortCuts(event) {\n      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n      if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) {\n        event.preventDefault();\n      }\n    }\n  }, {\n    key: \"isLimited\",\n    value: function isLimited(pad, event) {\n      pad = pad || 0;\n      if (typeof event !== 'undefined') {\n        if (key.isMove(event.keyCode) || key.isNavigation(event.keyCode) || event.ctrlKey || event.metaKey || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n          return false;\n        }\n      }\n      if (this.options.maxTextLength > 0) {\n        if (this.$editable.text().length + pad > this.options.maxTextLength) {\n          return true;\n        }\n      }\n      return false;\n    }\n  }, {\n    key: \"checkLinkUrl\",\n    value: function checkLinkUrl(linkUrl) {\n      if (MAILTO_PATTERN.test(linkUrl)) {\n        return 'mailto://' + linkUrl;\n      } else if (TEL_PATTERN.test(linkUrl)) {\n        return 'tel://' + linkUrl;\n      } else if (!URL_SCHEME_PATTERN.test(linkUrl)) {\n        return 'http://' + linkUrl;\n      }\n      return linkUrl;\n    }\n\n    /**\n     * create range\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"createRange\",\n    value: function createRange() {\n      this.focus();\n      this.setLastRange();\n      return this.getLastRange();\n    }\n\n    /**\n     * create a new range from the list of elements\n     *\n     * @param {list} dom element list\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"createRangeFromList\",\n    value: function createRangeFromList(lst) {\n      var startRange = range.createFromNodeBefore(lists.head(lst));\n      var startPoint = startRange.getStartPoint();\n      var endRange = range.createFromNodeAfter(lists.last(lst));\n      var endPoint = endRange.getEndPoint();\n      return range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * set the last range\n     *\n     * if given rng is exist, set rng as the last range\n     * or create a new range at the end of the document\n     *\n     * @param {WrappedRange} rng\n     */\n  }, {\n    key: \"setLastRange\",\n    value: function setLastRange(rng) {\n      if (rng) {\n        this.lastRange = rng;\n      } else {\n        this.lastRange = range.create(this.editable);\n        if (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.lastRange.sc).closest('.note-editable').length === 0) {\n          this.lastRange = range.createFromBodyElement(this.editable);\n        }\n      }\n    }\n\n    /**\n     * get the last range\n     *\n     * if there is a saved last range, return it\n     * or create a new range and return it\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      if (!this.lastRange) {\n        this.setLastRange();\n      }\n      return this.lastRange;\n    }\n\n    /**\n     * saveRange\n     *\n     * save current range\n     *\n     * @param {Boolean} [thenCollapse=false]\n     */\n  }, {\n    key: \"saveRange\",\n    value: function saveRange(thenCollapse) {\n      if (thenCollapse) {\n        this.getLastRange().collapse().select();\n      }\n    }\n\n    /**\n     * restoreRange\n     *\n     * restore lately range\n     */\n  }, {\n    key: \"restoreRange\",\n    value: function restoreRange() {\n      if (this.lastRange) {\n        this.lastRange.select();\n        this.focus();\n      }\n    }\n  }, {\n    key: \"saveTarget\",\n    value: function saveTarget(node) {\n      this.$editable.data('target', node);\n    }\n  }, {\n    key: \"clearTarget\",\n    value: function clearTarget() {\n      this.$editable.removeData('target');\n    }\n  }, {\n    key: \"restoreTarget\",\n    value: function restoreTarget() {\n      return this.$editable.data('target');\n    }\n\n    /**\n     * currentStyle\n     *\n     * current style\n     * @return {Object|Boolean} unfocus\n     */\n  }, {\n    key: \"currentStyle\",\n    value: function currentStyle() {\n      var rng = range.create();\n      if (rng) {\n        rng = rng.normalize();\n      }\n      return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n    }\n\n    /**\n     * style from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n  }, {\n    key: \"styleFromNode\",\n    value: function styleFromNode($node) {\n      return this.style.fromNode($node);\n    }\n\n    /**\n     * undo\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.undo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /*\n    * commit\n    */\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.commit();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /**\n     * redo\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.redo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /**\n     * before command\n     */\n  }, {\n    key: \"beforeCommand\",\n    value: function beforeCommand() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n\n      // Set styleWithCSS before run a command\n      document.execCommand('styleWithCSS', false, this.options.styleWithCSS);\n\n      // keep focus on editable before command execution\n      this.focus();\n    }\n\n    /**\n     * after command\n     * @param {Boolean} isPreventTrigger\n     */\n  }, {\n    key: \"afterCommand\",\n    value: function afterCommand(isPreventTrigger) {\n      this.normalizeContent();\n      this.history.recordUndo();\n      if (!isPreventTrigger) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n\n    /**\n     * handle tab key\n     */\n  }, {\n    key: \"tab\",\n    value: function tab() {\n      var rng = this.getLastRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n        if (!this.isLimited(this.options.tabSize)) {\n          this.beforeCommand();\n          this.typing.insertTab(rng, this.options.tabSize);\n          this.afterCommand();\n        }\n      }\n    }\n\n    /**\n     * handle shift+tab key\n     */\n  }, {\n    key: \"untab\",\n    value: function untab() {\n      var rng = this.getLastRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng, true);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n      }\n    }\n\n    /**\n     * run given function between beforeCommand and afterCommand\n     */\n  }, {\n    key: \"wrapCommand\",\n    value: function wrapCommand(fn) {\n      return function () {\n        this.beforeCommand();\n        fn.apply(this, arguments);\n        this.afterCommand();\n      };\n    }\n    /**\n     * removed (function added by 1der1)\n    */\n  }, {\n    key: \"removed\",\n    value: function removed(rng, node, tagName) {\n      // LB\n      rng = range.create();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        node = rng.ec;\n        if ((tagName = node.tagName) && node.childElementCount === 1 && node.childNodes[0].tagName === \"BR\") {\n          if (tagName === \"P\") {\n            node.remove();\n          } else if (['TH', 'TD'].indexOf(tagName) >= 0) {\n            node.firstChild.remove();\n          }\n        }\n      }\n    }\n    /**\n     * insert image\n     *\n     * @param {String} src\n     * @param {String|Function} param\n     * @return {Promise}\n     */\n  }, {\n    key: \"insertImage\",\n    value: function insertImage(src, param) {\n      var _this3 = this;\n      return createImage(src, param).then(function ($image) {\n        _this3.beforeCommand();\n        if (typeof param === 'function') {\n          param($image);\n        } else {\n          if (typeof param === 'string') {\n            $image.attr('data-filename', param);\n          }\n          $image.css('width', Math.min(_this3.$editable.width(), $image.width()));\n        }\n        $image.show();\n        _this3.getLastRange().insertNode($image[0]);\n        _this3.setLastRange(range.createFromNodeAfter($image[0]).select());\n        _this3.afterCommand();\n      }).fail(function (e) {\n        _this3.context.triggerEvent('image.upload.error', e);\n      });\n    }\n\n    /**\n     * insertImages\n     * @param {File[]} files\n     */\n  }, {\n    key: \"insertImagesAsDataURL\",\n    value: function insertImagesAsDataURL(files) {\n      var _this4 = this;\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(files, function (idx, file) {\n        var filename = file.name;\n        if (_this4.options.maximumImageFileSize && _this4.options.maximumImageFileSize < file.size) {\n          _this4.context.triggerEvent('image.upload.error', _this4.lang.image.maximumFileSizeError);\n        } else {\n          readFileAsDataURL(file).then(function (dataURL) {\n            return _this4.insertImage(dataURL, filename);\n          }).fail(function () {\n            _this4.context.triggerEvent('image.upload.error');\n          });\n        }\n      });\n    }\n\n    /**\n     * insertImagesOrCallback\n     * @param {File[]} files\n     */\n  }, {\n    key: \"insertImagesOrCallback\",\n    value: function insertImagesOrCallback(files) {\n      var callbacks = this.options.callbacks;\n      // If onImageUpload set,\n      if (callbacks.onImageUpload) {\n        this.context.triggerEvent('image.upload', files);\n        // else insert Image as dataURL\n      } else {\n        this.insertImagesAsDataURL(files);\n      }\n    }\n\n    /**\n     * return selected plain text\n     * @return {String} text\n     */\n  }, {\n    key: \"getSelectedText\",\n    value: function getSelectedText() {\n      var rng = this.getLastRange();\n\n      // if range on anchor, expand range with anchor\n      if (rng.isOnAnchor()) {\n        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n      }\n      return rng.toString();\n    }\n  }, {\n    key: \"onFormatBlock\",\n    value: function onFormatBlock(tagName, $target) {\n      // [workaround] for MSIE, IE need `<`\n      document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName);\n\n      // support custom class\n      if ($target && $target.length) {\n        // find the exact element has given tagName\n        if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n          $target = $target.find(tagName);\n        }\n        if ($target && $target.length) {\n          var currentRange = this.createRange();\n          var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()([currentRange.sc, currentRange.ec]).closest(tagName);\n          // remove class added for current block\n          $parent.removeClass();\n          var className = $target[0].className || '';\n          if (className) {\n            $parent.addClass(className);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"formatPara\",\n    value: function formatPara() {\n      this.formatBlock('P');\n    }\n  }, {\n    key: \"fontStyling\",\n    value: function fontStyling(target, value) {\n      var rng = this.getLastRange();\n      if (rng !== '') {\n        var spans = this.style.styleNodes(rng);\n        this.$editor.find('.note-status-output').html('');\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(spans).css(target, value);\n\n        // [workaround] added styled bogus span for style\n        //  - also bogus character needed for cursor position\n        if (rng.isCollapsed()) {\n          var firstSpan = lists.head(spans);\n          if (firstSpan && !dom.nodeLength(firstSpan)) {\n            firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n            range.createFromNode(firstSpan.firstChild).select();\n            this.setLastRange();\n            this.$editable.data(KEY_BOGUS, firstSpan);\n          }\n        } else {\n          rng.select();\n        }\n      } else {\n        var noteStatusOutput = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now();\n        this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n        setTimeout(function () {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('#note-status-output-' + noteStatusOutput).remove();\n        }, 5000);\n      }\n    }\n\n    /**\n     * unlink\n     *\n     * @type command\n     */\n  }, {\n    key: \"unlink\",\n    value: function unlink() {\n      var rng = this.getLastRange();\n      if (rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        rng = range.createFromNode(anchor);\n        rng.select();\n        this.setLastRange();\n        this.beforeCommand();\n        document.execCommand('unlink');\n        this.afterCommand();\n      }\n    }\n\n    /**\n     * returns link info\n     *\n     * @return {Object}\n     * @return {WrappedRange} return.range\n     * @return {String} return.text\n     * @return {Boolean} [return.isNewWindow=true]\n     * @return {String} [return.url=\"\"]\n     */\n  }, {\n    key: \"getLinkInfo\",\n    value: function getLinkInfo() {\n      if (!this.hasFocus()) {\n        this.focus();\n      }\n      var rng = this.getLastRange().expand(dom.isAnchor);\n      // Get the first anchor on range(for edit).\n      var $anchor = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(lists.head(rng.nodes(dom.isAnchor)));\n      var linkInfo = {\n        range: rng,\n        text: rng.toString(),\n        url: $anchor.length ? $anchor.attr('href') : ''\n      };\n\n      // When anchor exists,\n      if ($anchor.length) {\n        // Set isNewWindow by checking its target.\n        linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n      }\n      return linkInfo;\n    }\n  }, {\n    key: \"addRow\",\n    value: function addRow(position) {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addRow(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"addCol\",\n    value: function addCol(position) {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addCol(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteRow(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteCol(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteTable(rng);\n        this.afterCommand();\n      }\n    }\n\n    /**\n     * @param {Position} pos\n     * @param {jQuery} $target - target element\n     * @param {Boolean} [bKeepRatio] - keep ratio\n     */\n  }, {\n    key: \"resizeTo\",\n    value: function resizeTo(pos, $target, bKeepRatio) {\n      var imageSize;\n      if (bKeepRatio) {\n        var newRatio = pos.y / pos.x;\n        var ratio = $target.data('ratio');\n        imageSize = {\n          width: ratio > newRatio ? pos.x : pos.y / ratio,\n          height: ratio > newRatio ? pos.x * ratio : pos.y\n        };\n      } else {\n        imageSize = {\n          width: pos.x,\n          height: pos.y\n        };\n      }\n      $target.css(imageSize);\n    }\n\n    /**\n     * returns whether editable area has focus or not.\n     */\n  }, {\n    key: \"hasFocus\",\n    value: function hasFocus() {\n      return this.$editable.is(':focus');\n    }\n\n    /**\n     * set focus\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // [workaround] Screen will move when page is scolled in IE.\n      //  - do focus when not focused\n      if (!this.hasFocus()) {\n        this.$editable.trigger('focus');\n      }\n    }\n\n    /**\n     * returns whether contents is empty or not.\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n    }\n\n    /**\n     * Removes all contents and restores the editable instance to an _emptyPara_.\n     */\n  }, {\n    key: \"empty\",\n    value: function empty() {\n      this.context.invoke('code', dom.emptyPara);\n    }\n\n    /**\n     * normalize content\n     */\n  }, {\n    key: \"normalizeContent\",\n    value: function normalizeContent() {\n      this.$editable[0].normalize();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Clipboard.js\nfunction Clipboard_typeof(o) { \"@babel/helpers - typeof\"; return Clipboard_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Clipboard_typeof(o); }\nfunction Clipboard_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Clipboard_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Clipboard_toPropertyKey(o.key), o); } }\nfunction Clipboard_createClass(e, r, t) { return r && Clipboard_defineProperties(e.prototype, r), t && Clipboard_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Clipboard_toPropertyKey(t) { var i = Clipboard_toPrimitive(t, \"string\"); return \"symbol\" == Clipboard_typeof(i) ? i : i + \"\"; }\nfunction Clipboard_toPrimitive(t, r) { if (\"object\" != Clipboard_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Clipboard_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar Clipboard = /*#__PURE__*/function () {\n  function Clipboard(context) {\n    Clipboard_classCallCheck(this, Clipboard);\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n  }\n  return Clipboard_createClass(Clipboard, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.$editable.on('paste', this.pasteByEvent.bind(this));\n    }\n\n    /**\n     * paste by clipboard event\n     *\n     * @param {Event} event\n     */\n  }, {\n    key: \"pasteByEvent\",\n    value: function pasteByEvent(event) {\n      var _this = this;\n      if (this.context.isDisabled()) {\n        return;\n      }\n      var clipboardData = event.originalEvent.clipboardData;\n      if (clipboardData && clipboardData.items && clipboardData.items.length) {\n        var clipboardFiles = clipboardData.files;\n        var clipboardText = clipboardData.getData('Text');\n\n        // paste img file\n        if (clipboardFiles.length > 0 && this.options.allowClipboardImagePasting) {\n          this.context.invoke('editor.insertImagesOrCallback', clipboardFiles);\n          event.preventDefault();\n        }\n\n        // paste text with maxTextLength check\n        if (clipboardText.length > 0 && this.context.invoke('editor.isLimited', clipboardText.length)) {\n          event.preventDefault();\n        }\n      } else if (window.clipboardData) {\n        // for IE\n        var text = window.clipboardData.getData('text');\n        if (this.context.invoke('editor.isLimited', text.length)) {\n          event.preventDefault();\n        }\n      }\n\n      // Call editor.afterCommand after proceeding default event handler\n      setTimeout(function () {\n        _this.context.invoke('editor.afterCommand');\n      }, 10);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Dropzone.js\nfunction Dropzone_typeof(o) { \"@babel/helpers - typeof\"; return Dropzone_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Dropzone_typeof(o); }\nfunction Dropzone_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Dropzone_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Dropzone_toPropertyKey(o.key), o); } }\nfunction Dropzone_createClass(e, r, t) { return r && Dropzone_defineProperties(e.prototype, r), t && Dropzone_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Dropzone_toPropertyKey(t) { var i = Dropzone_toPrimitive(t, \"string\"); return \"symbol\" == Dropzone_typeof(i) ? i : i + \"\"; }\nfunction Dropzone_toPrimitive(t, r) { if (\"object\" != Dropzone_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Dropzone_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Dropzone = /*#__PURE__*/function () {\n  function Dropzone(context) {\n    Dropzone_classCallCheck(this, Dropzone);\n    this.context = context;\n    this.$eventListener = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n    this.$dropzone = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-dropzone\">', '<div class=\"note-dropzone-message\"></div>', '</div>'].join('')).prependTo(this.$editor);\n  }\n\n  /**\n   * attach Drag and Drop Events\n   */\n  return Dropzone_createClass(Dropzone, [{\n    key: \"initialize\",\n    value: function initialize() {\n      if (this.options.disableDragAndDrop) {\n        // prevent default drop event\n        this.documentEventHandlers.onDrop = function (e) {\n          e.preventDefault();\n        };\n        // do not consider outside of dropzone\n        this.$eventListener = this.$dropzone;\n        this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n      } else {\n        this.attachDragAndDropEvent();\n      }\n    }\n\n    /**\n     * attach Drag and Drop Events\n     */\n  }, {\n    key: \"attachDragAndDropEvent\",\n    value: function attachDragAndDropEvent() {\n      var _this = this;\n      var collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n      var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n      this.documentEventHandlers.onDragenter = function (e) {\n        var isCodeview = _this.context.invoke('codeview.isActivated');\n        var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0;\n        if (!isCodeview && !collection.length && hasEditorSize) {\n          _this.$editor.addClass('dragover');\n          _this.$dropzone.width(_this.$editor.width());\n          _this.$dropzone.height(_this.$editor.height());\n          $dropzoneMessage.text(_this.lang.image.dragImageHere);\n        }\n        collection = collection.add(e.target);\n      };\n      this.documentEventHandlers.onDragleave = function (e) {\n        collection = collection.not(e.target);\n\n        // If nodeName is BODY, then just make it over (fix for IE)\n        if (!collection.length || e.target.nodeName === 'BODY') {\n          collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n          _this.$editor.removeClass('dragover');\n        }\n      };\n      this.documentEventHandlers.onDrop = function () {\n        collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n        _this.$editor.removeClass('dragover');\n      };\n\n      // show dropzone on dragenter when dragging a object to document\n      // -but only if the editor is visible, i.e. has a positive width and height\n      this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter).on('dragleave', this.documentEventHandlers.onDragleave).on('drop', this.documentEventHandlers.onDrop);\n\n      // change dropzone's message on hover.\n      this.$dropzone.on('dragenter', function () {\n        _this.$dropzone.addClass('hover');\n        $dropzoneMessage.text(_this.lang.image.dropImage);\n      }).on('dragleave', function () {\n        _this.$dropzone.removeClass('hover');\n        $dropzoneMessage.text(_this.lang.image.dragImageHere);\n      });\n\n      // attach dropImage\n      this.$dropzone.on('drop', function (event) {\n        var dataTransfer = event.originalEvent.dataTransfer;\n\n        // stop the browser from opening the dropped content\n        event.preventDefault();\n        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n          _this.$editable.trigger('focus');\n          _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(dataTransfer.types, function (idx, type) {\n            // skip moz-specific types\n            if (type.toLowerCase().indexOf('_moz_') > -1) {\n              return;\n            }\n            var content = dataTransfer.getData(type);\n            if (type.toLowerCase().indexOf('text') > -1) {\n              _this.context.invoke('editor.pasteHTML', content);\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(content).each(function (idx, item) {\n                _this.context.invoke('editor.insertNode', item);\n              });\n            }\n          });\n        }\n      }).on('dragover', false); // prevent default dragover event\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n      Object.keys(this.documentEventHandlers).forEach(function (key) {\n        _this2.$eventListener.off(key.slice(2).toLowerCase(), _this2.documentEventHandlers[key]);\n      });\n      this.documentEventHandlers = {};\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Codeview.js\nfunction Codeview_typeof(o) { \"@babel/helpers - typeof\"; return Codeview_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Codeview_typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction Codeview_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Codeview_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Codeview_toPropertyKey(o.key), o); } }\nfunction Codeview_createClass(e, r, t) { return r && Codeview_defineProperties(e.prototype, r), t && Codeview_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Codeview_toPropertyKey(t) { var i = Codeview_toPrimitive(t, \"string\"); return \"symbol\" == Codeview_typeof(i) ? i : i + \"\"; }\nfunction Codeview_toPrimitive(t, r) { if (\"object\" != Codeview_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Codeview_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n/**\n * @class Codeview\n */\nvar CodeView = /*#__PURE__*/function () {\n  function CodeView(context) {\n    Codeview_classCallCheck(this, CodeView);\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n  return Codeview_createClass(CodeView, [{\n    key: \"sync\",\n    value: function sync(html) {\n      var isCodeview = this.isActivated();\n      var CodeMirror = this.CodeMirrorConstructor;\n      if (isCodeview) {\n        if (html) {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').getDoc().setValue(html);\n          } else {\n            this.$codable.val(html);\n          }\n        } else {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').save();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      this.$codable.on('keyup', function (event) {\n        if (event.keyCode === key.code.ESCAPE) {\n          _this.deactivate();\n        }\n      });\n    }\n\n    /**\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isActivated\",\n    value: function isActivated() {\n      return this.$editor.hasClass('codeview');\n    }\n\n    /**\n     * toggle codeview\n     */\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.isActivated()) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n      this.context.triggerEvent('codeview.toggled');\n    }\n\n    /**\n     * purify input value\n     * @param value\n     * @returns {*}\n     */\n  }, {\n    key: \"purify\",\n    value: function purify(value) {\n      if (this.options.codeviewFilter) {\n        // filter code view regex\n        value = value.replace(this.options.codeviewFilterRegex, '');\n        // allow specific iframe tag\n        if (this.options.codeviewIframeFilter) {\n          var whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n          value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function (tag) {\n            // remove if src attribute is duplicated\n            if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n              return '';\n            }\n            var _iterator = _createForOfIteratorHelper(whitelist),\n              _step;\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var src = _step.value;\n                // pass if src is trusted\n                if (new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"').test(tag)) {\n                  return tag;\n                }\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n            return '';\n          });\n        }\n      }\n      return value;\n    }\n\n    /**\n     * activate code view\n     */\n  }, {\n    key: \"activate\",\n    value: function activate() {\n      var _this2 = this;\n      var CodeMirror = this.CodeMirrorConstructor;\n      this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n      this.$codable.height(this.$editable.height());\n      this.context.invoke('toolbar.updateCodeview', true);\n      this.context.invoke('airPopover.updateCodeview', true);\n      this.$editor.addClass('codeview');\n      this.$codable.trigger('focus');\n\n      // activate CodeMirror as codable\n      if (CodeMirror) {\n        var cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n        // CodeMirror TernServer\n        if (this.options.codemirror.tern) {\n          var server = new CodeMirror.TernServer(this.options.codemirror.tern);\n          cmEditor.ternServer = server;\n          cmEditor.on('cursorActivity', function (cm) {\n            server.updateArgHints(cm);\n          });\n        }\n        cmEditor.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n        });\n        cmEditor.on('change', function () {\n          _this2.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n        });\n\n        // CodeMirror hasn't Padding.\n        cmEditor.setSize(null, this.$editable.outerHeight());\n        this.$codable.data('cmEditor', cmEditor);\n      } else {\n        this.$codable.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', _this2.$codable.val(), event);\n        });\n        this.$codable.on('input', function () {\n          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);\n        });\n      }\n    }\n\n    /**\n     * deactivate code view\n     */\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      var CodeMirror = this.CodeMirrorConstructor;\n      // deactivate CodeMirror as codable\n      if (CodeMirror) {\n        var cmEditor = this.$codable.data('cmEditor');\n        this.$codable.val(cmEditor.getValue());\n        cmEditor.toTextArea();\n      }\n      var value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n      var isChange = this.$editable.html() !== value;\n      this.$editable.html(value);\n      this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n      this.$editor.removeClass('codeview');\n      if (isChange) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n      this.$editable.trigger('focus');\n      this.context.invoke('toolbar.updateCodeview', false);\n      this.context.invoke('airPopover.updateCodeview', false);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isActivated()) {\n        this.deactivate();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Statusbar.js\nfunction Statusbar_typeof(o) { \"@babel/helpers - typeof\"; return Statusbar_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Statusbar_typeof(o); }\nfunction Statusbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Statusbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Statusbar_toPropertyKey(o.key), o); } }\nfunction Statusbar_createClass(e, r, t) { return r && Statusbar_defineProperties(e.prototype, r), t && Statusbar_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Statusbar_toPropertyKey(t) { var i = Statusbar_toPrimitive(t, \"string\"); return \"symbol\" == Statusbar_typeof(i) ? i : i + \"\"; }\nfunction Statusbar_toPrimitive(t, r) { if (\"object\" != Statusbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Statusbar_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar EDITABLE_PADDING = 24;\nvar Statusbar = /*#__PURE__*/function () {\n  function Statusbar(context) {\n    Statusbar_classCallCheck(this, Statusbar);\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n  }\n  return Statusbar_createClass(Statusbar, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      if (this.options.airMode || this.options.disableResizeEditor) {\n        this.destroy();\n        return;\n      }\n      this.$statusbar.on('mousedown touchstart', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        var editableTop = _this.$editable.offset().top - _this.$document.scrollTop();\n        var editableCodeTop = _this.$codable.offset().top - _this.$document.scrollTop();\n        var onStatusbarMove = function onStatusbarMove(event) {\n          var originalEvent = event.type == 'mousemove' ? event : event.originalEvent.touches[0];\n          var height = originalEvent.clientY - (editableTop + EDITABLE_PADDING);\n          var heightCode = originalEvent.clientY - (editableCodeTop + EDITABLE_PADDING);\n          height = _this.options.minheight > 0 ? Math.max(height, _this.options.minheight) : height;\n          height = _this.options.maxHeight > 0 ? Math.min(height, _this.options.maxHeight) : height;\n          heightCode = _this.options.minheight > 0 ? Math.max(heightCode, _this.options.minheight) : heightCode;\n          heightCode = _this.options.maxHeight > 0 ? Math.min(heightCode, _this.options.maxHeight) : heightCode;\n          _this.$editable.height(height);\n          _this.$codable.height(heightCode);\n        };\n        _this.$document.on('mousemove touchmove', onStatusbarMove).one('mouseup touchend', function () {\n          _this.$document.off('mousemove touchmove', onStatusbarMove);\n        });\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$statusbar.off();\n      this.$statusbar.addClass('locked');\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Fullscreen.js\nfunction Fullscreen_typeof(o) { \"@babel/helpers - typeof\"; return Fullscreen_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Fullscreen_typeof(o); }\nfunction Fullscreen_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Fullscreen_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Fullscreen_toPropertyKey(o.key), o); } }\nfunction Fullscreen_createClass(e, r, t) { return r && Fullscreen_defineProperties(e.prototype, r), t && Fullscreen_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Fullscreen_toPropertyKey(t) { var i = Fullscreen_toPrimitive(t, \"string\"); return \"symbol\" == Fullscreen_typeof(i) ? i : i + \"\"; }\nfunction Fullscreen_toPrimitive(t, r) { if (\"object\" != Fullscreen_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Fullscreen_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Fullscreen = /*#__PURE__*/function () {\n  function Fullscreen(context) {\n    var _this = this;\n    Fullscreen_classCallCheck(this, Fullscreen);\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);\n    this.$scrollbar = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('html, body');\n    this.scrollbarClassName = 'note-fullscreen-body';\n    this.onResize = function () {\n      _this.resizeTo({\n        h: _this.$window.height() - _this.$toolbar.outerHeight()\n      });\n    };\n  }\n  return Fullscreen_createClass(Fullscreen, [{\n    key: \"resizeTo\",\n    value: function resizeTo(size) {\n      this.$editable.css('height', size.h);\n      this.$codable.css('height', size.h);\n      if (this.$codable.data('cmeditor')) {\n        this.$codable.data('cmeditor').setsize(null, size.h);\n      }\n    }\n\n    /**\n     * toggle fullscreen\n     */\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      this.$editor.toggleClass('fullscreen');\n      var isFullscreen = this.isFullscreen();\n      this.$scrollbar.toggleClass(this.scrollbarClassName, isFullscreen);\n      if (isFullscreen) {\n        this.$editable.data('orgHeight', this.$editable.css('height'));\n        this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n        this.$editable.css('maxHeight', '');\n        this.$window.on('resize', this.onResize).trigger('resize');\n      } else {\n        this.$window.off('resize', this.onResize);\n        this.resizeTo({\n          h: this.$editable.data('orgHeight')\n        });\n        this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n      }\n      this.context.invoke('toolbar.updateFullscreen', isFullscreen);\n    }\n  }, {\n    key: \"isFullscreen\",\n    value: function isFullscreen() {\n      return this.$editor.hasClass('fullscreen');\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$scrollbar.removeClass(this.scrollbarClassName);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Handle.js\nfunction Handle_typeof(o) { \"@babel/helpers - typeof\"; return Handle_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Handle_typeof(o); }\nfunction Handle_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Handle_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Handle_toPropertyKey(o.key), o); } }\nfunction Handle_createClass(e, r, t) { return r && Handle_defineProperties(e.prototype, r), t && Handle_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Handle_toPropertyKey(t) { var i = Handle_toPrimitive(t, \"string\"); return \"symbol\" == Handle_typeof(i) ? i : i + \"\"; }\nfunction Handle_toPrimitive(t, r) { if (\"object\" != Handle_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Handle_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar Handle = /*#__PURE__*/function () {\n  function Handle(context) {\n    var _this = this;\n    Handle_classCallCheck(this, Handle);\n    this.context = context;\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        if (_this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n  return Handle_createClass(Handle, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$handle = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-handle\">', '<div class=\"note-control-selection\">', '<div class=\"note-control-selection-bg\"></div>', '<div class=\"note-control-holder note-control-nw\"></div>', '<div class=\"note-control-holder note-control-ne\"></div>', '<div class=\"note-control-holder note-control-sw\"></div>', '<div class=\"', this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing', ' note-control-se\"></div>', this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>', '</div>', '</div>'].join('')).prependTo(this.$editingArea);\n      this.$handle.on('mousedown', function (event) {\n        if (dom.isControlSizing(event.target)) {\n          event.preventDefault();\n          event.stopPropagation();\n          var $target = _this2.$handle.find('.note-control-selection').data('target');\n          var posStart = $target.offset();\n          var scrollTop = _this2.$document.scrollTop();\n          var onMouseMove = function onMouseMove(event) {\n            _this2.context.invoke('editor.resizeTo', {\n              x: event.clientX - posStart.left,\n              y: event.clientY - (posStart.top - scrollTop)\n            }, $target, !event.shiftKey);\n            _this2.update($target[0], event);\n          };\n          _this2.$document.on('mousemove', onMouseMove).one('mouseup', function (e) {\n            e.preventDefault();\n            _this2.$document.off('mousemove', onMouseMove);\n            _this2.context.invoke('editor.afterCommand');\n          });\n          if (!$target.data('ratio')) {\n            // original ratio.\n            $target.data('ratio', $target.height() / $target.width());\n          }\n        }\n      });\n\n      // Listen for scrolling on the handle overlay.\n      this.$handle.on('wheel', function (event) {\n        event.preventDefault();\n        _this2.update();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$handle.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n      var isImage = dom.isImg(target);\n      var $selection = this.$handle.find('.note-control-selection');\n      this.context.invoke('imagePopover.update', target, event);\n      if (isImage) {\n        var $image = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target);\n        var areaRect = this.$editingArea[0].getBoundingClientRect();\n        var imageRect = target.getBoundingClientRect();\n        $selection.css({\n          display: 'block',\n          left: imageRect.left - areaRect.left,\n          top: imageRect.top - areaRect.top,\n          width: imageRect.width,\n          height: imageRect.height\n        }).data('target', $image); // save current image element.\n\n        var origImageObj = new Image();\n        origImageObj.src = $image.attr('src');\n        var sizingText = imageRect.width + 'x' + imageRect.height + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n        $selection.find('.note-control-selection-info').text(sizingText);\n        this.context.invoke('editor.saveTarget', target);\n      } else {\n        this.hide();\n      }\n      return isImage;\n    }\n\n    /**\n     * hide\n     *\n     * @param {jQuery} $handle\n     */\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.context.invoke('editor.clearTarget');\n      this.$handle.children().hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoLink.js\nfunction AutoLink_typeof(o) { \"@babel/helpers - typeof\"; return AutoLink_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoLink_typeof(o); }\nfunction AutoLink_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoLink_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoLink_toPropertyKey(o.key), o); } }\nfunction AutoLink_createClass(e, r, t) { return r && AutoLink_defineProperties(e.prototype, r), t && AutoLink_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoLink_toPropertyKey(t) { var i = AutoLink_toPrimitive(t, \"string\"); return \"symbol\" == AutoLink_typeof(i) ? i : i + \"\"; }\nfunction AutoLink_toPrimitive(t, r) { if (\"object\" != AutoLink_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoLink_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar defaultScheme = 'http://';\nvar linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@|xmpp:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\nvar AutoLink = /*#__PURE__*/function () {\n  function AutoLink(context) {\n    var _this = this;\n    AutoLink_classCallCheck(this, AutoLink);\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      }\n    };\n  }\n  return AutoLink_createClass(AutoLink, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWordRange) {\n        return;\n      }\n      var keyword = this.lastWordRange.toString();\n      var match = keyword.match(linkPattern);\n      if (match && (match[1] || match[2])) {\n        var link = match[1] ? keyword : defaultScheme + keyword;\n        var urlText = this.options.showDomainOnlyForAutolink ? keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:xmpp?:?)?(?:www\\.)?/i, '').split('/')[0] : keyword;\n        var node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a></a>').html(urlText).attr('href', link)[0];\n        if (this.context.options.linkTargetBlank) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).attr('target', '_blank');\n        }\n        this.lastWordRange.insertNode(node);\n        this.lastWordRange = null;\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      if (lists.contains([key.code.ENTER, key.code.SPACE], event.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWordRange = wordRange;\n      }\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      if (key.code.SPACE === event.keyCode || key.code.ENTER === event.keyCode && !event.shiftKey) {\n        this.replace();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoSync.js\nfunction AutoSync_typeof(o) { \"@babel/helpers - typeof\"; return AutoSync_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoSync_typeof(o); }\nfunction AutoSync_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoSync_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoSync_toPropertyKey(o.key), o); } }\nfunction AutoSync_createClass(e, r, t) { return r && AutoSync_defineProperties(e.prototype, r), t && AutoSync_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoSync_toPropertyKey(t) { var i = AutoSync_toPrimitive(t, \"string\"); return \"symbol\" == AutoSync_typeof(i) ? i : i + \"\"; }\nfunction AutoSync_toPrimitive(t, r) { if (\"object\" != AutoSync_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoSync_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n/**\n * textarea auto sync.\n */\nvar AutoSync = /*#__PURE__*/function () {\n  function AutoSync(context) {\n    var _this = this;\n    AutoSync_classCallCheck(this, AutoSync);\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': function summernoteChange() {\n        _this.$note.val(context.invoke('code'));\n      }\n    };\n  }\n  return AutoSync_createClass(AutoSync, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return dom.isTextarea(this.$note[0]);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoReplace.js\nfunction AutoReplace_typeof(o) { \"@babel/helpers - typeof\"; return AutoReplace_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoReplace_typeof(o); }\nfunction AutoReplace_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoReplace_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoReplace_toPropertyKey(o.key), o); } }\nfunction AutoReplace_createClass(e, r, t) { return r && AutoReplace_defineProperties(e.prototype, r), t && AutoReplace_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoReplace_toPropertyKey(t) { var i = AutoReplace_toPrimitive(t, \"string\"); return \"symbol\" == AutoReplace_typeof(i) ? i : i + \"\"; }\nfunction AutoReplace_toPrimitive(t, r) { if (\"object\" != AutoReplace_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoReplace_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar AutoReplace = /*#__PURE__*/function () {\n  function AutoReplace(context) {\n    var _this = this;\n    AutoReplace_classCallCheck(this, AutoReplace);\n    this.context = context;\n    this.options = context.options.replace || {};\n    this.keys = [key.code.ENTER, key.code.SPACE, key.code.PERIOD, key.code.COMMA, key.code.SEMICOLON, key.code.SLASH];\n    this.previousKeydownCode = null;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      }\n    };\n  }\n  return AutoReplace_createClass(AutoReplace, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.match;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWord) {\n        return;\n      }\n      var self = this;\n      var keyword = this.lastWord.toString();\n      this.options.match(keyword, function (match) {\n        if (match) {\n          var node = '';\n          if (typeof match === 'string') {\n            node = dom.createText(match);\n          } else if (match instanceof jQuery) {\n            node = match[0];\n          } else if (match instanceof Node) {\n            node = match;\n          }\n          if (!node) return;\n          self.lastWord.insertNode(node);\n          self.lastWord = null;\n          self.context.invoke('editor.focus');\n        }\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      // this forces it to remember the last whole word, even if multiple termination keys are pressed\n      // before the previous key is let go.\n      if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n        this.previousKeydownCode = event.keyCode;\n        return;\n      }\n      if (lists.contains(this.keys, event.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWord = wordRange;\n      }\n      this.previousKeydownCode = event.keyCode;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      if (lists.contains(this.keys, event.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Placeholder.js\nfunction Placeholder_typeof(o) { \"@babel/helpers - typeof\"; return Placeholder_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Placeholder_typeof(o); }\nfunction Placeholder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Placeholder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Placeholder_toPropertyKey(o.key), o); } }\nfunction Placeholder_createClass(e, r, t) { return r && Placeholder_defineProperties(e.prototype, r), t && Placeholder_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Placeholder_toPropertyKey(t) { var i = Placeholder_toPrimitive(t, \"string\"); return \"symbol\" == Placeholder_typeof(i) ? i : i + \"\"; }\nfunction Placeholder_toPrimitive(t, r) { if (\"object\" != Placeholder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Placeholder_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Placeholder = /*#__PURE__*/function () {\n  function Placeholder(context) {\n    var _this = this;\n    Placeholder_classCallCheck(this, Placeholder);\n    this.context = context;\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n    this.events = {\n      'summernote.init summernote.change': function summernoteInitSummernoteChange() {\n        _this.update();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n  return Placeholder_createClass(Placeholder, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.placeholder;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-placeholder\"></div>');\n      this.$placeholder.on('click', function () {\n        _this2.context.invoke('focus');\n      }).html(this.options.placeholder).prependTo(this.$editingArea);\n      this.update();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$placeholder.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n      this.$placeholder.toggle(isShow);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Buttons.js\nfunction Buttons_typeof(o) { \"@babel/helpers - typeof\"; return Buttons_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Buttons_typeof(o); }\nfunction Buttons_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Buttons_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Buttons_toPropertyKey(o.key), o); } }\nfunction Buttons_createClass(e, r, t) { return r && Buttons_defineProperties(e.prototype, r), t && Buttons_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Buttons_toPropertyKey(t) { var i = Buttons_toPrimitive(t, \"string\"); return \"symbol\" == Buttons_typeof(i) ? i : i + \"\"; }\nfunction Buttons_toPrimitive(t, r) { if (\"object\" != Buttons_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Buttons_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Buttons = /*#__PURE__*/function () {\n  function Buttons(context) {\n    Buttons_classCallCheck(this, Buttons);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']);\n  }\n  return Buttons_createClass(Buttons, [{\n    key: \"representShortcut\",\n    value: function representShortcut(editorMethod) {\n      var shortcut = this.invertedKeyMap[editorMethod];\n      if (!this.options.shortcuts || !shortcut) {\n        return '';\n      }\n      if (env.isMac) {\n        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n      }\n      shortcut = shortcut.replace('BACKSLASH', '\\\\').replace('SLASH', '/').replace('LEFTBRACKET', '[').replace('RIGHTBRACKET', ']');\n      return ' (' + shortcut + ')';\n    }\n  }, {\n    key: \"button\",\n    value: function button(o) {\n      if (!this.options.tooltip && o.tooltip) {\n        delete o.tooltip;\n      }\n      o.container = this.options.container;\n      return this.ui.button(o);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.addToolbarButtons();\n      this.addImagePopoverButtons();\n      this.addLinkPopoverButtons();\n      this.addTablePopoverButtons();\n      this.fontInstalledMap = {};\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      delete this.fontInstalledMap;\n    }\n  }, {\n    key: \"isFontInstalled\",\n    value: function isFontInstalled(name) {\n      if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n        this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name);\n      }\n      return this.fontInstalledMap[name];\n    }\n  }, {\n    key: \"isFontDeservedToAdd\",\n    value: function isFontDeservedToAdd(name) {\n      name = name.toLowerCase();\n      return name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1;\n    }\n  }, {\n    key: \"colorPalette\",\n    value: function colorPalette(className, tooltip, backColor, foreColor) {\n      var _this = this;\n      return this.ui.buttonGroup({\n        className: 'note-color ' + className,\n        children: [this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: function click(event) {\n            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget);\n            if (backColor && foreColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor')\n              });\n            } else if (backColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor')\n              });\n            } else if (foreColor) {\n              _this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor')\n              });\n            }\n          },\n          callback: function callback($button) {\n            var $recentColor = $button.find('.note-recent-color');\n            if (backColor) {\n              $recentColor.css('background-color', _this.options.colorButton.backColor);\n              $button.attr('data-backColor', _this.options.colorButton.backColor);\n            }\n            if (foreColor) {\n              $recentColor.css('color', _this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', _this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          }\n        }), this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), this.ui.dropdown({\n          items: (backColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">', this.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"backColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette-' + this.options.id + '\">', '</div>', '<div class=\"note-holder-custom\" id=\"backColorPalette-' + this.options.id + '\" data-event=\"backColor\"></div>', '</div>'].join('') : '') + (foreColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">', this.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"foreColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette-' + this.options.id + '\">', '</div>',\n          // Fix missing Div, Commented to find easily if it's wrong\n          '<div class=\"note-holder-custom\" id=\"foreColorPalette-' + this.options.id + '\" data-event=\"foreColor\"></div>', '</div>'].join('') : ''),\n          callback: function callback($dropdown) {\n            $dropdown.find('.note-holder').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: _this.options.colors,\n                colorsName: _this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n            var customColors = [['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF']];\n            $dropdown.find('.note-holder-custom').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each(function (idx, item) {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).on(\"change\", function () {\n                var $chip = $dropdown.find('#' + external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this).data('event')).find('.note-color-btn').first();\n                var color = this.value.toUpperCase();\n                $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n                $chip.trigger('click');\n              });\n            });\n          },\n          click: function click(event) {\n            event.stopPropagation();\n            var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.' + className).find('.note-dropdown-menu');\n            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n            var eventName = $button.data('event');\n            var value = $button.attr('data-value');\n            if (eventName === 'openPalette') {\n              var $picker = $parent.find('#' + value);\n              var $palette = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]);\n\n              // Shift palette chips\n              var $chip = $palette.find('.note-color-btn').last().detach();\n\n              // Set chip attributes\n              var color = $picker.val();\n              $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.trigger('click');\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                var key = eventName === 'backColor' ? 'background-color' : 'color';\n                var $color = $button.closest('.note-color').find('.note-recent-color');\n                var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n              _this.context.invoke('editor.' + eventName, value);\n            }\n          }\n        })]\n      }).render();\n    }\n  }, {\n    key: \"addToolbarButtons\",\n    value: function addToolbarButtons() {\n      var _this2 = this;\n      this.context.memo('button.style', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.magic), _this2.options),\n          tooltip: _this2.lang.style.style,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          className: 'dropdown-style',\n          items: _this2.options.styleTags,\n          title: _this2.lang.style.style,\n          template: function template(item) {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: Object.prototype.hasOwnProperty.call(_this2.lang.style, item) ? _this2.lang.style[item] : item\n              };\n            }\n            var tag = item.tag;\n            var title = item.title;\n            var style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            var className = item.className ? ' class=\"' + item.className + '\"' : '';\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: _this2.context.createInvokeHandler('editor.formatBlock')\n        })]).render();\n      });\n      var _loop = function _loop() {\n        var item = _this2.options.styleTags[styleIdx];\n        _this2.context.memo('button.style.' + item, function () {\n          return _this2.button({\n            className: 'note-btn-style-' + item,\n            contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n            tooltip: _this2.lang.style[item],\n            click: _this2.context.createInvokeHandler('editor.formatBlock')\n          }).render();\n        });\n      };\n      for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n        _loop();\n      }\n      this.context.memo('button.bold', function () {\n        return _this2.button({\n          className: 'note-btn-bold',\n          contents: _this2.ui.icon(_this2.options.icons.bold),\n          tooltip: _this2.lang.font.bold + _this2.representShortcut('bold'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.bold')\n        }).render();\n      });\n      this.context.memo('button.italic', function () {\n        return _this2.button({\n          className: 'note-btn-italic',\n          contents: _this2.ui.icon(_this2.options.icons.italic),\n          tooltip: _this2.lang.font.italic + _this2.representShortcut('italic'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.italic')\n        }).render();\n      });\n      this.context.memo('button.underline', function () {\n        return _this2.button({\n          className: 'note-btn-underline',\n          contents: _this2.ui.icon(_this2.options.icons.underline),\n          tooltip: _this2.lang.font.underline + _this2.representShortcut('underline'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.underline')\n        }).render();\n      });\n      this.context.memo('button.clear', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.eraser),\n          tooltip: _this2.lang.font.clear + _this2.representShortcut('removeFormat'),\n          click: _this2.context.createInvokeHandler('editor.removeFormat')\n        }).render();\n      });\n      this.context.memo('button.strikethrough', function () {\n        return _this2.button({\n          className: 'note-btn-strikethrough',\n          contents: _this2.ui.icon(_this2.options.icons.strikethrough),\n          tooltip: _this2.lang.font.strikethrough + _this2.representShortcut('strikethrough'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n        }).render();\n      });\n      this.context.memo('button.superscript', function () {\n        return _this2.button({\n          className: 'note-btn-superscript',\n          contents: _this2.ui.icon(_this2.options.icons.superscript),\n          tooltip: _this2.lang.font.superscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.superscript')\n        }).render();\n      });\n      this.context.memo('button.subscript', function () {\n        return _this2.button({\n          className: 'note-btn-subscript',\n          contents: _this2.ui.icon(_this2.options.icons.subscript),\n          tooltip: _this2.lang.font.subscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.subscript')\n        }).render();\n      });\n      this.context.memo('button.fontname', function () {\n        var styleInfo = _this2.context.invoke('editor.currentStyle');\n        if (_this2.options.addDefaultFonts) {\n          // Add 'default' fonts into the fontnames array if not exist\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(styleInfo['font-family'].split(','), function (idx, fontname) {\n            fontname = fontname.trim().replace(/['\"]+/g, '');\n            if (_this2.isFontDeservedToAdd(fontname)) {\n              if (_this2.options.fontNames.indexOf(fontname) === -1) {\n                _this2.options.fontNames.push(fontname);\n              }\n            }\n          });\n        }\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontname\"></span>', _this2.options),\n          tooltip: _this2.lang.font.name,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontNames.filter(_this2.isFontInstalled.bind(_this2)),\n          title: _this2.lang.font.name,\n          template: function template(item) {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontName')\n        })]).render();\n      });\n      this.context.memo('button.fontsize', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', _this2.options),\n          tooltip: _this2.lang.font.size,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizes,\n          title: _this2.lang.font.size,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n        })]).render();\n      });\n      this.context.memo('button.fontsizeunit', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', _this2.options),\n          tooltip: _this2.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizeUnits,\n          title: _this2.lang.font.sizeunit,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit')\n        })]).render();\n      });\n      this.context.memo('button.color', function () {\n        return _this2.colorPalette('note-color-all', _this2.lang.color.recent, true, true);\n      });\n      this.context.memo('button.forecolor', function () {\n        return _this2.colorPalette('note-color-fore', _this2.lang.color.foreground, false, true);\n      });\n      this.context.memo('button.backcolor', function () {\n        return _this2.colorPalette('note-color-back', _this2.lang.color.background, true, false);\n      });\n      this.context.memo('button.ul', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.unorderedlist),\n          tooltip: _this2.lang.lists.unordered + _this2.representShortcut('insertUnorderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertUnorderedList')\n        }).render();\n      });\n      this.context.memo('button.ol', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.orderedlist),\n          tooltip: _this2.lang.lists.ordered + _this2.representShortcut('insertOrderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertOrderedList')\n        }).render();\n      });\n      var justifyLeft = this.button({\n        contents: this.ui.icon(this.options.icons.alignLeft),\n        tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n        click: this.context.createInvokeHandler('editor.justifyLeft')\n      });\n      var justifyCenter = this.button({\n        contents: this.ui.icon(this.options.icons.alignCenter),\n        tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n        click: this.context.createInvokeHandler('editor.justifyCenter')\n      });\n      var justifyRight = this.button({\n        contents: this.ui.icon(this.options.icons.alignRight),\n        tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n        click: this.context.createInvokeHandler('editor.justifyRight')\n      });\n      var justifyFull = this.button({\n        contents: this.ui.icon(this.options.icons.alignJustify),\n        tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n        click: this.context.createInvokeHandler('editor.justifyFull')\n      });\n      var outdent = this.button({\n        contents: this.ui.icon(this.options.icons.outdent),\n        tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n        click: this.context.createInvokeHandler('editor.outdent')\n      });\n      var indent = this.button({\n        contents: this.ui.icon(this.options.icons.indent),\n        tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n        click: this.context.createInvokeHandler('editor.indent')\n      });\n      this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n      this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n      this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n      this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n      this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n      this.context.memo('button.indent', func.invoke(indent, 'render'));\n      this.context.memo('button.paragraph', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.alignLeft), _this2.options),\n          tooltip: _this2.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown([_this2.ui.buttonGroup({\n          className: 'note-align',\n          children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n        }), _this2.ui.buttonGroup({\n          className: 'note-list',\n          children: [outdent, indent]\n        })])]).render();\n      });\n      this.context.memo('button.height', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.textHeight), _this2.options),\n          tooltip: _this2.lang.font.height,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          items: _this2.options.lineHeights,\n          checkClassName: _this2.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: _this2.lang.font.height,\n          click: _this2.context.createInvokeHandler('editor.lineHeight')\n        })]).render();\n      });\n      this.context.memo('button.table', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.table), _this2.options),\n          tooltip: _this2.lang.table.table,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          title: _this2.lang.table.table,\n          className: 'note-table',\n          items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n        })], {\n          callback: function callback($node) {\n            var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n            $catcher.css({\n              width: _this2.options.insertTableMaxSize.col + 'em',\n              height: _this2.options.insertTableMaxSize.row + 'em'\n            }).on('mousedown', _this2.context.createInvokeHandler('editor.insertTable')).on('mousemove', _this2.tableMoveHandler.bind(_this2));\n          }\n        }).render();\n      });\n      this.context.memo('button.link', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.link),\n          tooltip: _this2.lang.link.link + _this2.representShortcut('linkDialog.show'),\n          click: _this2.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.picture', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.picture),\n          tooltip: _this2.lang.image.image,\n          click: _this2.context.createInvokeHandler('imageDialog.show')\n        }).render();\n      });\n      this.context.memo('button.video', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.video),\n          tooltip: _this2.lang.video.video,\n          click: _this2.context.createInvokeHandler('videoDialog.show')\n        }).render();\n      });\n      this.context.memo('button.hr', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.minus),\n          tooltip: _this2.lang.hr.insert + _this2.representShortcut('insertHorizontalRule'),\n          click: _this2.context.createInvokeHandler('editor.insertHorizontalRule')\n        }).render();\n      });\n      this.context.memo('button.fullscreen', function () {\n        return _this2.button({\n          className: 'btn-fullscreen note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.arrowsAlt),\n          tooltip: _this2.lang.options.fullscreen,\n          click: _this2.context.createInvokeHandler('fullscreen.toggle')\n        }).render();\n      });\n      this.context.memo('button.codeview', function () {\n        return _this2.button({\n          className: 'btn-codeview note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.code),\n          tooltip: _this2.lang.options.codeview,\n          click: _this2.context.createInvokeHandler('codeview.toggle')\n        }).render();\n      });\n      this.context.memo('button.redo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.redo),\n          tooltip: _this2.lang.history.redo + _this2.representShortcut('redo'),\n          click: _this2.context.createInvokeHandler('editor.redo')\n        }).render();\n      });\n      this.context.memo('button.undo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.undo),\n          tooltip: _this2.lang.history.undo + _this2.representShortcut('undo'),\n          click: _this2.context.createInvokeHandler('editor.undo')\n        }).render();\n      });\n      this.context.memo('button.help', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.question),\n          tooltip: _this2.lang.options.help,\n          click: _this2.context.createInvokeHandler('helpDialog.show')\n        }).render();\n      });\n    }\n\n    /**\n     * image: [\n     *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n     *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n     *   ['remove', ['removeMedia']],\n     * ],\n     */\n  }, {\n    key: \"addImagePopoverButtons\",\n    value: function addImagePopoverButtons() {\n      var _this3 = this;\n      // Image Size Buttons\n      this.context.memo('button.resizeFull', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">100%</span>',\n          tooltip: _this3.lang.image.resizeFull,\n          click: _this3.context.createInvokeHandler('editor.resize', '1')\n        }).render();\n      });\n      this.context.memo('button.resizeHalf', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">50%</span>',\n          tooltip: _this3.lang.image.resizeHalf,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.5')\n        }).render();\n      });\n      this.context.memo('button.resizeQuarter', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">25%</span>',\n          tooltip: _this3.lang.image.resizeQuarter,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.25')\n        }).render();\n      });\n      this.context.memo('button.resizeNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.resizeNone,\n          click: _this3.context.createInvokeHandler('editor.resize', '0')\n        }).render();\n      });\n\n      // Float Buttons\n      this.context.memo('button.floatLeft', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatLeft),\n          tooltip: _this3.lang.image.floatLeft,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'left')\n        }).render();\n      });\n      this.context.memo('button.floatRight', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatRight),\n          tooltip: _this3.lang.image.floatRight,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'right')\n        }).render();\n      });\n      this.context.memo('button.floatNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.floatNone,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'none')\n        }).render();\n      });\n\n      // Remove Buttons\n      this.context.memo('button.removeMedia', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.trash),\n          tooltip: _this3.lang.image.remove,\n          click: _this3.context.createInvokeHandler('editor.removeMedia')\n        }).render();\n      });\n    }\n  }, {\n    key: \"addLinkPopoverButtons\",\n    value: function addLinkPopoverButtons() {\n      var _this4 = this;\n      this.context.memo('button.linkDialogShow', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.link),\n          tooltip: _this4.lang.link.edit,\n          click: _this4.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.unlink', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.unlink),\n          tooltip: _this4.lang.link.unlink,\n          click: _this4.context.createInvokeHandler('editor.unlink')\n        }).render();\n      });\n    }\n\n    /**\n     * table : [\n     *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n     *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n     * ],\n     */\n  }, {\n    key: \"addTablePopoverButtons\",\n    value: function addTablePopoverButtons() {\n      var _this5 = this;\n      this.context.memo('button.addRowUp', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowAbove),\n          tooltip: _this5.lang.table.addRowAbove,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'top')\n        }).render();\n      });\n      this.context.memo('button.addRowDown', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowBelow),\n          tooltip: _this5.lang.table.addRowBelow,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'bottom')\n        }).render();\n      });\n      this.context.memo('button.addColLeft', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colBefore),\n          tooltip: _this5.lang.table.addColLeft,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'left')\n        }).render();\n      });\n      this.context.memo('button.addColRight', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colAfter),\n          tooltip: _this5.lang.table.addColRight,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'right')\n        }).render();\n      });\n      this.context.memo('button.deleteRow', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowRemove),\n          tooltip: _this5.lang.table.delRow,\n          click: _this5.context.createInvokeHandler('editor.deleteRow')\n        }).render();\n      });\n      this.context.memo('button.deleteCol', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colRemove),\n          tooltip: _this5.lang.table.delCol,\n          click: _this5.context.createInvokeHandler('editor.deleteCol')\n        }).render();\n      });\n      this.context.memo('button.deleteTable', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.trash),\n          tooltip: _this5.lang.table.delTable,\n          click: _this5.context.createInvokeHandler('editor.deleteTable')\n        }).render();\n      });\n    }\n  }, {\n    key: \"build\",\n    value: function build($container, groups) {\n      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n        var group = groups[groupIdx];\n        var groupName = Array.isArray(group) ? group[0] : group;\n        var buttons = Array.isArray(group) ? group.length === 1 ? [group[0]] : group[1] : [group];\n        var $group = this.ui.buttonGroup({\n          className: 'note-' + groupName\n        }).render();\n        for (var idx = 0, len = buttons.length; idx < len; idx++) {\n          var btn = this.context.memo('button.' + buttons[idx]);\n          if (btn) {\n            $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n          }\n        }\n        $group.appendTo($container);\n      }\n    }\n\n    /**\n     * @param {jQuery} [$container]\n     */\n  }, {\n    key: \"updateCurrentStyle\",\n    value: function updateCurrentStyle($container) {\n      var $cont = $container || this.$toolbar;\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      this.updateBtnStates($cont, {\n        '.note-btn-bold': function noteBtnBold() {\n          return styleInfo['font-bold'] === 'bold';\n        },\n        '.note-btn-italic': function noteBtnItalic() {\n          return styleInfo['font-italic'] === 'italic';\n        },\n        '.note-btn-underline': function noteBtnUnderline() {\n          return styleInfo['font-underline'] === 'underline';\n        },\n        '.note-btn-subscript': function noteBtnSubscript() {\n          return styleInfo['font-subscript'] === 'subscript';\n        },\n        '.note-btn-superscript': function noteBtnSuperscript() {\n          return styleInfo['font-superscript'] === 'superscript';\n        },\n        '.note-btn-strikethrough': function noteBtnStrikethrough() {\n          return styleInfo['font-strikethrough'] === 'strikethrough';\n        }\n      });\n      if (styleInfo['font-family']) {\n        var fontNames = styleInfo['font-family'].split(',').map(function (name) {\n          return name.replace(/[\\'\\\"]/g, '').replace(/\\s+$/, '').replace(/^\\s+/, '');\n        });\n        var fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n        $cont.find('.dropdown-fontname a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare string to avoid creating another func.\n          var isChecked = $item.data('value') + '' === fontName + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n      }\n      if (styleInfo['font-size']) {\n        var fontSize = styleInfo['font-size'];\n        $cont.find('.dropdown-fontsize a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare with string to avoid creating another func.\n          var isChecked = $item.data('value') + '' === fontSize + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsize').text(fontSize);\n        var fontSizeUnit = styleInfo['font-size-unit'];\n        $cont.find('.dropdown-fontsizeunit a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          var isChecked = $item.data('value') + '' === fontSizeUnit + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n      }\n      if (styleInfo['line-height']) {\n        var lineHeight = styleInfo['line-height'];\n        $cont.find('.dropdown-line-height a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare with string to avoid creating another func.\n          var isChecked = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).data('value') + '' === lineHeight + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-line-height').text(lineHeight);\n      }\n    }\n  }, {\n    key: \"updateBtnStates\",\n    value: function updateBtnStates($container, infos) {\n      var _this6 = this;\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(infos, function (selector, pred) {\n        _this6.ui.toggleBtnActive($container.find(selector), pred());\n      });\n    }\n  }, {\n    key: \"tableMoveHandler\",\n    value: function tableMoveHandler(event) {\n      var PX_PER_EM = 18;\n      var $picker = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n      var $dimensionDisplay = $picker.next();\n      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n      var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n      var posOffset;\n      // HTML5 with jQuery - e.offsetX is undefined in Firefox\n      if (event.offsetX === undefined) {\n        var posCatcher = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target).offset();\n        posOffset = {\n          x: event.pageX - posCatcher.left,\n          y: event.pageY - posCatcher.top\n        };\n      } else {\n        posOffset = {\n          x: event.offsetX,\n          y: event.offsetY\n        };\n      }\n      var dim = {\n        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n        r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n      };\n      $highlighted.css({\n        width: dim.c + 'em',\n        height: dim.r + 'em'\n      });\n      $catcher.data('value', dim.c + 'x' + dim.r);\n      if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n        $unhighlighted.css({\n          width: dim.c + 1 + 'em'\n        });\n      }\n      if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n        $unhighlighted.css({\n          height: dim.r + 1 + 'em'\n        });\n      }\n      $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Toolbar.js\nfunction Toolbar_typeof(o) { \"@babel/helpers - typeof\"; return Toolbar_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Toolbar_typeof(o); }\nfunction Toolbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Toolbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Toolbar_toPropertyKey(o.key), o); } }\nfunction Toolbar_createClass(e, r, t) { return r && Toolbar_defineProperties(e.prototype, r), t && Toolbar_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Toolbar_toPropertyKey(t) { var i = Toolbar_toPrimitive(t, \"string\"); return \"symbol\" == Toolbar_typeof(i) ? i : i + \"\"; }\nfunction Toolbar_toPrimitive(t, r) { if (\"object\" != Toolbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Toolbar_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Toolbar = /*#__PURE__*/function () {\n  function Toolbar(context) {\n    Toolbar_classCallCheck(this, Toolbar);\n    this.context = context;\n    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n  return Toolbar_createClass(Toolbar, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !this.options.airMode;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      this.options.toolbar = this.options.toolbar || [];\n      if (!this.options.toolbar.length) {\n        this.$toolbar.hide();\n      } else {\n        this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n      }\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n      this.changeContainer(false);\n      this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () {\n        _this.context.invoke('buttons.updateCurrentStyle');\n      });\n      this.context.invoke('buttons.updateCurrentStyle');\n      if (this.options.followingToolbar) {\n        this.$window.on('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$toolbar.children().remove();\n      if (this.options.followingToolbar) {\n        this.$window.off('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"followScroll\",\n    value: function followScroll() {\n      if (this.$editor.hasClass('fullscreen')) {\n        return false;\n      }\n      var editorHeight = this.$editor.outerHeight();\n      var editorWidth = this.$editor.width();\n      var toolbarHeight = this.$toolbar.height();\n      var statusbarHeight = this.$statusbar.height();\n\n      // check if the web app is currently using another static bar\n      var otherBarHeight = 0;\n      if (this.options.otherStaticBar) {\n        otherBarHeight = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.otherStaticBar).outerHeight();\n      }\n      var currentOffset = this.$document.scrollTop();\n      var editorOffsetTop = this.$editor.offset().top;\n      var editorOffsetBottom = editorOffsetTop + editorHeight;\n      var activateOffset = editorOffsetTop - otherBarHeight;\n      var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n      if (!this.isFollowing && currentOffset > activateOffset && currentOffset < deactivateOffsetBottom - toolbarHeight) {\n        this.isFollowing = true;\n        this.$editable.css({\n          marginTop: this.$toolbar.outerHeight()\n        });\n        this.$toolbar.css({\n          position: 'fixed',\n          top: otherBarHeight,\n          width: editorWidth,\n          zIndex: 1000\n        });\n      } else if (this.isFollowing && (currentOffset < activateOffset || currentOffset > deactivateOffsetBottom)) {\n        this.isFollowing = false;\n        this.$toolbar.css({\n          position: 'relative',\n          top: 0,\n          width: '100%',\n          zIndex: 'auto'\n        });\n        this.$editable.css({\n          marginTop: ''\n        });\n      }\n    }\n  }, {\n    key: \"changeContainer\",\n    value: function changeContainer(isFullscreen) {\n      if (isFullscreen) {\n        this.$toolbar.prependTo(this.$editor);\n      } else {\n        if (this.options.toolbarContainer) {\n          this.$toolbar.appendTo(this.options.toolbarContainer);\n        }\n      }\n      if (this.options.followingToolbar) {\n        this.followScroll();\n      }\n    }\n  }, {\n    key: \"updateFullscreen\",\n    value: function updateFullscreen(isFullscreen) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n      this.changeContainer(isFullscreen);\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n    }\n  }, {\n    key: \"activate\",\n    value: function activate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n      this.ui.toggleBtn($btn, true);\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n      this.ui.toggleBtn($btn, false);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/LinkDialog.js\nfunction LinkDialog_typeof(o) { \"@babel/helpers - typeof\"; return LinkDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, LinkDialog_typeof(o); }\nfunction LinkDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction LinkDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, LinkDialog_toPropertyKey(o.key), o); } }\nfunction LinkDialog_createClass(e, r, t) { return r && LinkDialog_defineProperties(e.prototype, r), t && LinkDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction LinkDialog_toPropertyKey(t) { var i = LinkDialog_toPrimitive(t, \"string\"); return \"symbol\" == LinkDialog_typeof(i) ? i : i + \"\"; }\nfunction LinkDialog_toPrimitive(t, r) { if (\"object\" != LinkDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != LinkDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar LinkDialog_MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nvar LinkDialog_TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nvar LinkDialog_URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\nvar LinkDialog = /*#__PURE__*/function () {\n  function LinkDialog(context) {\n    LinkDialog_classCallCheck(this, LinkDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n  return LinkDialog_createClass(LinkDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.textToDisplay, \"</label>\"), \"<input id=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-link-text form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>', '<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.url, \"</label>\"), \"<input id=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-link-url form-control note-form-control note-input\\\" type=\\\"text\\\" value=\\\"http://\\\"/>\"), '</div>', !this.options.disableLinkTarget ? external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(this.ui.checkbox({\n        className: 'sn-checkbox-open-in-new-window',\n        text: this.lang.link.openInNewWindow,\n        checked: true\n      }).render()).html() : ''].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.link.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        className: 'link-dialog',\n        title: this.lang.link.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"checkLinkUrl\",\n    value: function checkLinkUrl(linkUrl) {\n      if (LinkDialog_MAILTO_PATTERN.test(linkUrl)) {\n        return 'mailto://' + linkUrl;\n      } else if (LinkDialog_TEL_PATTERN.test(linkUrl)) {\n        return 'tel://' + linkUrl;\n      } else if (!LinkDialog_URL_SCHEME_PATTERN.test(linkUrl)) {\n        return 'http://' + linkUrl;\n      }\n      return linkUrl;\n    }\n  }, {\n    key: \"onCheckLinkUrl\",\n    value: function onCheckLinkUrl($input) {\n      var _this = this;\n      $input.on('blur', function (event) {\n        event.target.value = event.target.value == '' ? '' : _this.checkLinkUrl(event.target.value);\n      });\n    }\n\n    /**\n     * toggle update button\n     */\n  }, {\n    key: \"toggleLinkBtn\",\n    value: function toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n      this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n    }\n\n    /**\n     * Show link dialog and set event handlers on dialog controls.\n     *\n     * @param {Object} linkInfo\n     * @return {Promise}\n     */\n  }, {\n    key: \"showLinkDialog\",\n    value: function showLinkDialog(linkInfo) {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $linkText = _this2.$dialog.find('.note-link-text');\n        var $linkUrl = _this2.$dialog.find('.note-link-url');\n        var $linkBtn = _this2.$dialog.find('.note-link-btn');\n        var $openInNewWindow = _this2.$dialog.find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          // If no url was given and given text is valid URL then copy that into URL Field\n          if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n            linkInfo.url = _this2.checkLinkUrl(linkInfo.text);\n          }\n          $linkText.on('input paste propertychange', function () {\n            // If linktext was modified by input events,\n            // cloning text from linkUrl will be stopped.\n            var text = $linkText.val();\n            var div = document.createElement('div');\n            div.innerText = text;\n            text = div.innerHTML;\n            linkInfo.text = text;\n            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.text);\n          $linkUrl.on('input paste propertychange', function () {\n            // Display same text on `Text to display` as default\n            // when linktext has no text\n            if (!linkInfo.text) {\n              $linkText.val($linkUrl.val());\n            }\n            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.url);\n          if (!env.isSupportTouch) {\n            $linkUrl.trigger('focus');\n          }\n          _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          _this2.bindEnterKey($linkUrl, $linkBtn);\n          _this2.bindEnterKey($linkText, $linkBtn);\n          _this2.onCheckLinkUrl($linkUrl);\n          var isNewWindowChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this2.context.options.linkTargetBlank;\n          $openInNewWindow.prop('checked', isNewWindowChecked);\n          $linkBtn.one('click', function (event) {\n            event.preventDefault();\n            deferred.resolve({\n              range: linkInfo.range,\n              url: $linkUrl.val(),\n              text: $linkText.val(),\n              isNewWindow: $openInNewWindow.is(':checked')\n            });\n            _this2.ui.hideDialog(_this2.$dialog);\n          });\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          // detach events\n          $linkText.off();\n          $linkUrl.off();\n          $linkBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n\n    /**\n     * @param {Object} layoutInfo\n     */\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n      var linkInfo = this.context.invoke('editor.getLinkInfo');\n      this.context.invoke('editor.saveRange');\n      this.showLinkDialog(linkInfo).then(function (linkInfo) {\n        _this3.context.invoke('editor.restoreRange');\n        _this3.context.invoke('editor.createLink', linkInfo);\n      }).fail(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/LinkPopover.js\nfunction LinkPopover_typeof(o) { \"@babel/helpers - typeof\"; return LinkPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, LinkPopover_typeof(o); }\nfunction LinkPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction LinkPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, LinkPopover_toPropertyKey(o.key), o); } }\nfunction LinkPopover_createClass(e, r, t) { return r && LinkPopover_defineProperties(e.prototype, r), t && LinkPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction LinkPopover_toPropertyKey(t) { var i = LinkPopover_toPrimitive(t, \"string\"); return \"symbol\" == LinkPopover_typeof(i) ? i : i + \"\"; }\nfunction LinkPopover_toPrimitive(t, r) { if (\"object\" != LinkPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != LinkPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar LinkPopover = /*#__PURE__*/function () {\n  function LinkPopover(context) {\n    var _this = this;\n    LinkPopover_classCallCheck(this, LinkPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return LinkPopover_createClass(LinkPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.link);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-link-popover',\n        callback: function callback($node) {\n          var $content = $node.find('.popover-content,.note-popover-content');\n          $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n        }\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.link);\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!this.context.invoke('editor.hasFocus')) {\n        this.hide();\n        return;\n      }\n      var rng = this.context.invoke('editor.getLastRange');\n      if (rng.isCollapsed() && rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        var href = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href');\n        this.$popover.find('a').attr('href', href).text(href);\n        var pos = dom.posFromPlaceholder(anchor);\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/ImageDialog.js\nfunction ImageDialog_typeof(o) { \"@babel/helpers - typeof\"; return ImageDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ImageDialog_typeof(o); }\nfunction ImageDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ImageDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ImageDialog_toPropertyKey(o.key), o); } }\nfunction ImageDialog_createClass(e, r, t) { return r && ImageDialog_defineProperties(e.prototype, r), t && ImageDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ImageDialog_toPropertyKey(t) { var i = ImageDialog_toPrimitive(t, \"string\"); return \"symbol\" == ImageDialog_typeof(i) ? i : i + \"\"; }\nfunction ImageDialog_toPrimitive(t, r) { if (\"object\" != ImageDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ImageDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar ImageDialog = /*#__PURE__*/function () {\n  function ImageDialog(context) {\n    ImageDialog_classCallCheck(this, ImageDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return ImageDialog_createClass(ImageDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var imageLimitation = '';\n      if (this.options.maximumImageFileSize) {\n        var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n        var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';\n        imageLimitation = \"<small>\".concat(this.lang.image.maximumFileSize + ' : ' + readableSize, \"</small>\");\n      }\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group note-group-select-from-files\">', '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>', '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ', ' type=\"file\" name=\"files\" accept=\"' + this.options.acceptImageFileTypes + '\" multiple=\"multiple\"/>', imageLimitation, '</div>', '<div class=\"form-group note-group-image-url\">', '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>', '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>', '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.image.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.image.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      this.context.invoke('editor.saveRange');\n      this.showImageDialog().then(function (data) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n        _this.context.invoke('editor.restoreRange');\n        if (typeof data === 'string') {\n          // image url\n          // If onImageLinkInsert set,\n          if (_this.options.callbacks.onImageLinkInsert) {\n            _this.context.triggerEvent('image.link.insert', data);\n          } else {\n            _this.context.invoke('editor.insertImage', data);\n          }\n        } else {\n          // array of files\n          _this.context.invoke('editor.insertImagesOrCallback', data);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n  }, {\n    key: \"showImageDialog\",\n    value: function showImageDialog() {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $imageInput = _this2.$dialog.find('.note-image-input');\n        var $imageUrl = _this2.$dialog.find('.note-image-url');\n        var $imageBtn = _this2.$dialog.find('.note-image-btn');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          // Cloning imageInput to clear element.\n          $imageInput.replaceWith($imageInput.clone().on('change', function (event) {\n            deferred.resolve(event.target.files || event.target.value);\n          }).val(''));\n          $imageUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($imageBtn, $imageUrl.val());\n          }).val('');\n          if (!env.isSupportTouch) {\n            $imageUrl.trigger('focus');\n          }\n          $imageBtn.on('click', function (event) {\n            event.preventDefault();\n            deferred.resolve($imageUrl.val());\n          });\n          _this2.bindEnterKey($imageUrl, $imageBtn);\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $imageInput.off();\n          $imageUrl.off();\n          $imageBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/ImagePopover.js\nfunction ImagePopover_typeof(o) { \"@babel/helpers - typeof\"; return ImagePopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ImagePopover_typeof(o); }\nfunction ImagePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ImagePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ImagePopover_toPropertyKey(o.key), o); } }\nfunction ImagePopover_createClass(e, r, t) { return r && ImagePopover_defineProperties(e.prototype, r), t && ImagePopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ImagePopover_toPropertyKey(t) { var i = ImagePopover_toPrimitive(t, \"string\"); return \"symbol\" == ImagePopover_typeof(i) ? i : i + \"\"; }\nfunction ImagePopover_toPrimitive(t, r) { if (\"object\" != ImagePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ImagePopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nvar ImagePopover = /*#__PURE__*/function () {\n  function ImagePopover(context) {\n    var _this = this;\n    ImagePopover_classCallCheck(this, ImagePopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n    this.events = {\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return ImagePopover_createClass(ImagePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.image);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-image-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.image);\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (dom.isImg(target)) {\n        var position = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target).offset();\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        var pos = {};\n        if (this.options.popatmouse) {\n          pos.left = event.pageX - 20;\n          pos.top = event.pageY;\n        } else {\n          pos = position;\n        }\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/TablePopover.js\nfunction TablePopover_typeof(o) { \"@babel/helpers - typeof\"; return TablePopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, TablePopover_typeof(o); }\nfunction TablePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction TablePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, TablePopover_toPropertyKey(o.key), o); } }\nfunction TablePopover_createClass(e, r, t) { return r && TablePopover_defineProperties(e.prototype, r), t && TablePopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction TablePopover_toPropertyKey(t) { var i = TablePopover_toPrimitive(t, \"string\"); return \"symbol\" == TablePopover_typeof(i) ? i : i + \"\"; }\nfunction TablePopover_toPrimitive(t, r) { if (\"object\" != TablePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != TablePopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar TablePopover = /*#__PURE__*/function () {\n  function TablePopover(context) {\n    var _this = this;\n    TablePopover_classCallCheck(this, TablePopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, event) {\n        _this.update(event.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': function summernoteKeyupSummernoteScrollSummernoteChange() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return TablePopover_createClass(TablePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.table);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-table-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n      // [workaround] Disable Firefox's default table editor\n      if (env.isFF) {\n        document.execCommand('enableInlineTableEditing', false, false);\n      }\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n      var isCell = dom.isCell(target) || dom.isCell(target === null || target === void 0 ? void 0 : target.parentElement);\n      if (isCell) {\n        var pos = dom.posFromPlaceholder(target);\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n      return isCell;\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/VideoDialog.js\nfunction VideoDialog_typeof(o) { \"@babel/helpers - typeof\"; return VideoDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, VideoDialog_typeof(o); }\nfunction VideoDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction VideoDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, VideoDialog_toPropertyKey(o.key), o); } }\nfunction VideoDialog_createClass(e, r, t) { return r && VideoDialog_defineProperties(e.prototype, r), t && VideoDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction VideoDialog_toPropertyKey(t) { var i = VideoDialog_toPrimitive(t, \"string\"); return \"symbol\" == VideoDialog_typeof(i) ? i : i + \"\"; }\nfunction VideoDialog_toPrimitive(t, r) { if (\"object\" != VideoDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != VideoDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar VideoDialog = /*#__PURE__*/function () {\n  function VideoDialog(context) {\n    VideoDialog_classCallCheck(this, VideoDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return VideoDialog_createClass(VideoDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group row-fluid\">', \"<label for=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.video.url, \" <small class=\\\"text-muted\\\">\").concat(this.lang.video.providers, \"</small></label>\"), \"<input id=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-video-url form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.video.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.video.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"createVideoNode\",\n    value: function createVideoNode(url) {\n      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, peertube, mp4, ogg, webm)\n      var ytRegExp = /(?:youtu\\.be\\/|youtube\\.com\\/(?:[^\\/\\n\\s]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/|\\S*?[?&]v=|shorts\\/|live\\/))([^&\\n?]+)(?:.*[?&]t=([^&\\n]+))?.*/;\n      var ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n      var ytMatch = url.match(ytRegExp);\n      var gdRegExp = /(?:\\.|\\/\\/)drive\\.google\\.com\\/file\\/d\\/(.[a-zA-Z0-9_-]*)\\/view/;\n      var gdMatch = url.match(gdRegExp);\n      var igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/(reel|p)\\/(.[a-zA-Z0-9_-]*)/;\n      var igMatch = url.match(igRegExp);\n      var vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n      var vMatch = url.match(vRegExp);\n      var vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n      var vimMatch = url.match(vimRegExp);\n      var dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n      var dmMatch = url.match(dmRegExp);\n      var youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n      var youkuMatch = url.match(youkuRegExp);\n      var peerTubeRegExp = /\\/\\/(.*)\\/videos\\/watch\\/([^?]*)(?:\\?(?:start=(\\w*))?(?:&stop=(\\w*))?(?:&loop=([10]))?(?:&autoplay=([10]))?(?:&muted=([10]))?)?/;\n      var peerTubeMatch = url.match(peerTubeRegExp);\n      var qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n      var qqMatch = url.match(qqRegExp);\n      var qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n      var qqMatch2 = url.match(qqRegExp2);\n      var mp4RegExp = /^.+.(mp4|m4v)$/;\n      var mp4Match = url.match(mp4RegExp);\n      var oggRegExp = /^.+.(ogg|ogv)$/;\n      var oggMatch = url.match(oggRegExp);\n      var webmRegExp = /^.+.(webm)$/;\n      var webmMatch = url.match(webmRegExp);\n      var fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n      var fbMatch = url.match(fbRegExp);\n      var $video;\n      if (ytMatch && ytMatch[1].length === 11) {\n        var youtubeId = ytMatch[1];\n        var start = 0;\n        if (typeof ytMatch[2] !== 'undefined') {\n          var ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n          if (ytMatchForStart) {\n            for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n              start += typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0;\n            }\n          } else {\n            start = parseInt(ytMatch[2], 10);\n          }\n        }\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : '')).attr('width', '640').attr('height', '360');\n      } else if (gdMatch && gdMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://drive.google.com/file/d/' + gdMatch[1] + '/preview').attr('width', '640').attr('height', '480');\n      } else if (igMatch && igMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://instagram.com/p/' + igMatch[2] + '/embed/').attr('width', '612').attr('height', '710').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else if (vMatch && vMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', vMatch[0] + '/embed/simple').attr('width', '600').attr('height', '600').attr('class', 'vine-embed');\n      } else if (vimMatch && vimMatch[3].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('src', '//player.vimeo.com/video/' + vimMatch[3]).attr('width', '640').attr('height', '360');\n      } else if (dmMatch && dmMatch[2].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]).attr('width', '640').attr('height', '360');\n      } else if (youkuMatch && youkuMatch[1].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '498').attr('width', '510').attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n      } else if (peerTubeMatch && peerTubeMatch[0].length) {\n        var begin = 0;\n        if (peerTubeMatch[2] !== 'undefined') begin = peerTubeMatch[2];\n        var end = 0;\n        if (peerTubeMatch[3] !== 'undefined') end = peerTubeMatch[3];\n        var loop = 0;\n        if (peerTubeMatch[4] !== 'undefined') loop = peerTubeMatch[4];\n        var autoplay = 0;\n        if (peerTubeMatch[5] !== 'undefined') autoplay = peerTubeMatch[5];\n        var muted = 0;\n        if (peerTubeMatch[6] !== 'undefined') muted = peerTubeMatch[6];\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe allowfullscreen sandbox=\"allow-same-origin allow-scripts allow-popups\">').attr('frameborder', 0).attr('src', '//' + peerTubeMatch[1] + '/videos/embed/' + peerTubeMatch[2] + \"?loop=\" + loop + \"&autoplay=\" + autoplay + \"&muted=\" + muted + (begin > 0 ? '&start=' + begin : '') + (end > 0 ? '&end=' + start : '')).attr('width', '560').attr('height', '315');\n      } else if (qqMatch && qqMatch[1].length || qqMatch2 && qqMatch2[2].length) {\n        var vid = qqMatch && qqMatch[1].length ? qqMatch[1] : qqMatch2[2];\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '310').attr('width', '500').attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n      } else if (mp4Match || oggMatch || webmMatch) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<video controls>').attr('src', url).attr('width', '640').attr('height', '360');\n      } else if (fbMatch && fbMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560').attr('width', '560').attr('height', '301').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else {\n        // this is not a known video link. Now what, Cat? Now what?\n        return false;\n      }\n      $video.addClass('note-video-clip');\n      return $video[0];\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      var text = this.context.invoke('editor.getSelectedText');\n      this.context.invoke('editor.saveRange');\n      this.showVideoDialog(text).then(function (url) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n        _this.context.invoke('editor.restoreRange');\n\n        // build node\n        var $node = _this.createVideoNode(url);\n        if ($node) {\n          // insert video node\n          _this.context.invoke('editor.insertNode', $node);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n\n    /**\n     * show video dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n  }, {\n    key: \"showVideoDialog\",\n    value: function showVideoDialog( /* text */\n    ) {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $videoUrl = _this2.$dialog.find('.note-video-url');\n        var $videoBtn = _this2.$dialog.find('.note-video-btn');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n          $videoUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($videoBtn, $videoUrl.val());\n          });\n          if (!env.isSupportTouch) {\n            $videoUrl.trigger('focus');\n          }\n          $videoBtn.on('click', function (event) {\n            event.preventDefault();\n            deferred.resolve($videoUrl.val());\n          });\n          _this2.bindEnterKey($videoUrl, $videoBtn);\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $videoUrl.off();\n          $videoBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/HelpDialog.js\nfunction HelpDialog_typeof(o) { \"@babel/helpers - typeof\"; return HelpDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, HelpDialog_typeof(o); }\nfunction HelpDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction HelpDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, HelpDialog_toPropertyKey(o.key), o); } }\nfunction HelpDialog_createClass(e, r, t) { return r && HelpDialog_defineProperties(e.prototype, r), t && HelpDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction HelpDialog_toPropertyKey(t) { var i = HelpDialog_toPrimitive(t, \"string\"); return \"symbol\" == HelpDialog_typeof(i) ? i : i + \"\"; }\nfunction HelpDialog_toPrimitive(t, r) { if (\"object\" != HelpDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != HelpDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar HelpDialog = /*#__PURE__*/function () {\n  function HelpDialog(context) {\n    HelpDialog_classCallCheck(this, HelpDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return HelpDialog_createClass(HelpDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<p class=\"text-center\">', '<a href=\"http://summernote.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Summernote 0.9.1</a> · ', '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\" rel=\"noopener noreferrer\">Project</a> · ', '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\" rel=\"noopener noreferrer\">Issues</a>', '</p>'].join('');\n      this.$dialog = this.ui.dialog({\n        title: this.lang.options.help,\n        fade: this.options.dialogsFade,\n        body: this.createShortcutList(),\n        footer: body,\n        callback: function callback($node) {\n          $node.find('.modal-body,.note-modal-body').css({\n            'max-height': 300,\n            'overflow': 'scroll'\n          });\n        }\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"createShortcutList\",\n    value: function createShortcutList() {\n      var _this = this;\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      return Object.keys(keyMap).map(function (key) {\n        var command = keyMap[key];\n        var $row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div><div class=\"help-list-item\"></div></div>');\n        $row.append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<label><kbd>' + key + '</kdb></label>').css({\n          'width': 180,\n          'margin-right': 10\n        })).append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<span></span>').html(_this.context.memo('help.' + command) || command));\n        return $row.html();\n      }).join('');\n    }\n\n    /**\n     * show help dialog\n     *\n     * @return {Promise}\n     */\n  }, {\n    key: \"showHelpDialog\",\n    value: function showHelpDialog() {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n          deferred.resolve();\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n      this.context.invoke('editor.saveRange');\n      this.showHelpDialog().then(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AirPopover.js\nfunction AirPopover_typeof(o) { \"@babel/helpers - typeof\"; return AirPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AirPopover_typeof(o); }\nfunction AirPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AirPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AirPopover_toPropertyKey(o.key), o); } }\nfunction AirPopover_createClass(e, r, t) { return r && AirPopover_defineProperties(e.prototype, r), t && AirPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AirPopover_toPropertyKey(t) { var i = AirPopover_toPrimitive(t, \"string\"); return \"symbol\" == AirPopover_typeof(i) ? i : i + \"\"; }\nfunction AirPopover_toPrimitive(t, r) { if (\"object\" != AirPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AirPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar AIRMODE_POPOVER_X_OFFSET = -5;\nvar AIRMODE_POPOVER_Y_OFFSET = 5;\nvar AirPopover = /*#__PURE__*/function () {\n  function AirPopover(context) {\n    var _this = this;\n    AirPopover_classCallCheck(this, AirPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n    this.events = {\n      'summernote.contextmenu': function summernoteContextmenu(event) {\n        if (_this.options.editing) {\n          event.preventDefault();\n          event.stopPropagation();\n          _this.onContextmenu = true;\n          _this.update(true);\n        }\n      },\n      'summernote.mousedown': function summernoteMousedown(we, event) {\n        _this.pageX = event.pageX;\n        _this.pageY = event.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteScroll(we, event) {\n        if (_this.options.editing && !_this.onContextmenu) {\n          if (event.type == 'keyup') {\n            var range = _this.context.invoke('editor.getLastRange');\n            var wordRange = range.getWordRange();\n            var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n            _this.pageX = bnd.left;\n            _this.pageY = bnd.top;\n          } else {\n            _this.pageX = event.pageX;\n            _this.pageY = event.pageY;\n          }\n          _this.update();\n        }\n        _this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.focusout': function summernoteFocusout() {\n        if (!_this.$popover.is(':active,:focus')) {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return AirPopover_createClass(AirPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$popover = this.ui.popover({\n        className: 'note-air-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.air);\n\n      // disable hiding this popover preemptively by 'summernote.blur' event.\n      this.$popover.on('mousedown', function () {\n        _this2.hidable = false;\n      });\n      // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n      this.$popover.on('mouseup', function () {\n        _this2.hidable = true;\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(forcelyOpen) {\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n        var rect = {\n          left: this.pageX,\n          top: this.pageY\n        };\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        rect.top -= containerOffset.top;\n        rect.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n          top: rect.top + AIRMODE_POPOVER_Y_OFFSET\n        });\n        this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (this.hidable) {\n        this.$popover.hide();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/HintPopover.js\nfunction HintPopover_typeof(o) { \"@babel/helpers - typeof\"; return HintPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, HintPopover_typeof(o); }\nfunction HintPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction HintPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, HintPopover_toPropertyKey(o.key), o); } }\nfunction HintPopover_createClass(e, r, t) { return r && HintPopover_defineProperties(e.prototype, r), t && HintPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction HintPopover_toPropertyKey(t) { var i = HintPopover_toPrimitive(t, \"string\"); return \"symbol\" == HintPopover_typeof(i) ? i : i + \"\"; }\nfunction HintPopover_toPrimitive(t, r) { if (\"object\" != HintPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != HintPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\nvar POPOVER_DIST = 5;\nvar HintPopover = /*#__PURE__*/function () {\n  function HintPopover(context) {\n    var _this = this;\n    HintPopover_classCallCheck(this, HintPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n  return HintPopover_createClass(HintPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.hints.length > 0;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.lastWordRange = null;\n      this.matchingWord = null;\n      this.$popover = this.ui.popover({\n        className: 'note-hint-popover',\n        hideArrow: true,\n        direction: ''\n      }).render().appendTo(this.options.container);\n      this.$popover.hide();\n      this.$content = this.$popover.find('.popover-content,.note-popover-content');\n      this.$content.on('click', '.note-hint-item', function (event) {\n        _this2.$content.find('.active').removeClass('active');\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget).addClass('active');\n        _this2.replace();\n      });\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"selectItem\",\n    value: function selectItem($item) {\n      this.$content.find('.active').removeClass('active');\n      $item.addClass('active');\n      this.$content[0].scrollTop = $item[0].offsetTop - this.$content.innerHeight() / 2;\n    }\n  }, {\n    key: \"moveDown\",\n    value: function moveDown() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $next = $current.next();\n      if ($next.length) {\n        this.selectItem($next);\n      } else {\n        var $nextGroup = $current.parent().next();\n        if (!$nextGroup.length) {\n          $nextGroup = this.$content.find('.note-hint-group').first();\n        }\n        this.selectItem($nextGroup.find('.note-hint-item').first());\n      }\n    }\n  }, {\n    key: \"moveUp\",\n    value: function moveUp() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $prev = $current.prev();\n      if ($prev.length) {\n        this.selectItem($prev);\n      } else {\n        var $prevGroup = $current.parent().prev();\n        if (!$prevGroup.length) {\n          $prevGroup = this.$content.find('.note-hint-group').last();\n        }\n        this.selectItem($prevGroup.find('.note-hint-item').last());\n      }\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      var $item = this.$content.find('.note-hint-item.active');\n      if ($item.length) {\n        var node = this.nodeFromItem($item);\n        // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n        if (this.matchingWord !== null && this.matchingWord.length === 0) {\n          this.lastWordRange.so = this.lastWordRange.eo;\n          // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n        } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n          var rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n          if (rangeCompute > 0) {\n            this.lastWordRange.so += rangeCompute;\n          }\n        }\n        this.lastWordRange.insertNode(node);\n        if (this.options.hintSelect === 'next') {\n          var blank = document.createTextNode('');\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).after(blank);\n          range.createFromNodeBefore(blank).select();\n        } else {\n          range.createFromNodeAfter(node).select();\n        }\n        this.lastWordRange = null;\n        this.hide();\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"nodeFromItem\",\n    value: function nodeFromItem($item) {\n      var hint = this.hints[$item.data('index')];\n      var item = $item.data('item');\n      var node = hint.content ? hint.content(item) : item;\n      if (typeof node === 'string') {\n        node = dom.createText(node);\n      }\n      return node;\n    }\n  }, {\n    key: \"createItemTemplates\",\n    value: function createItemTemplates(hintIdx, items) {\n      var hint = this.hints[hintIdx];\n      return items.map(function (item, idx) {\n        var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-hint-item\"></div>');\n        $item.append(hint.template ? hint.template(item) : item + '');\n        $item.data({\n          'index': hintIdx,\n          'item': item\n        });\n        if (hintIdx === 0 && idx === 0) {\n          $item.addClass('active');\n        }\n        return $item;\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      if (!this.$popover.is(':visible')) {\n        return;\n      }\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        this.replace();\n      } else if (event.keyCode === key.code.UP) {\n        event.preventDefault();\n        this.moveUp();\n      } else if (event.keyCode === key.code.DOWN) {\n        event.preventDefault();\n        this.moveDown();\n      }\n    }\n  }, {\n    key: \"searchKeyword\",\n    value: function searchKeyword(index, keyword, callback) {\n      var hint = this.hints[index];\n      if (hint && hint.match.test(keyword) && hint.search) {\n        var matches = hint.match.exec(keyword);\n        this.matchingWord = matches[0];\n        hint.search(matches[1], callback);\n      } else {\n        callback();\n      }\n    }\n  }, {\n    key: \"createGroup\",\n    value: function createGroup(idx, keyword) {\n      var _this3 = this;\n      var $group = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n      this.searchKeyword(idx, keyword, function (items) {\n        items = items || [];\n        if (items.length) {\n          $group.html(_this3.createItemTemplates(idx, items));\n          _this3.show();\n        }\n      });\n      return $group;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      var _this4 = this;\n      if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], event.keyCode)) {\n        var _range = this.context.invoke('editor.getLastRange');\n        var wordRange, keyword;\n        if (this.options.hintMode === 'words') {\n          wordRange = _range.getWordsRange(_range);\n          keyword = wordRange.toString();\n          this.hints.forEach(function (hint) {\n            if (hint.match.test(keyword)) {\n              wordRange = _range.getWordsMatchRange(hint.match);\n              return false;\n            }\n          });\n          if (!wordRange) {\n            this.hide();\n            return;\n          }\n          keyword = wordRange.toString();\n        } else {\n          wordRange = _range.getWordRange();\n          keyword = wordRange.toString();\n        }\n        if (this.hints.length && keyword) {\n          this.$content.empty();\n          var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n          var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n          if (bnd) {\n            bnd.top -= containerOffset.top;\n            bnd.left -= containerOffset.left;\n            this.$popover.hide();\n            this.lastWordRange = wordRange;\n            this.hints.forEach(function (hint, idx) {\n              if (hint.match.test(keyword)) {\n                _this4.createGroup(idx, keyword).appendTo(_this4.$content);\n              }\n            });\n            // select first .note-hint-item\n            this.$content.find('.note-hint-item').first().addClass('active');\n\n            // set position for popover after group is created\n            if (this.direction === 'top') {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n              });\n            } else {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top + bnd.height + POPOVER_DIST\n              });\n            }\n          }\n        } else {\n          this.hide();\n        }\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$popover.show();\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/settings.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {\n  version: '0.9.1',\n  plugins: {},\n  dom: dom,\n  range: range,\n  lists: lists,\n  options: {\n    langInfo: (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor,\n      'clipboard': Clipboard,\n      'dropzone': Dropzone,\n      'codeview': CodeView,\n      'statusbar': Statusbar,\n      'fullscreen': Fullscreen,\n      'handle': Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover,\n      'autoLink': AutoLink,\n      'autoSync': AutoSync,\n      'autoReplace': AutoReplace,\n      'placeholder': Placeholder,\n      'buttons': Buttons,\n      'toolbar': Toolbar,\n      'linkDialog': LinkDialog,\n      'linkPopover': LinkPopover,\n      'imageDialog': ImageDialog,\n      'imagePopover': ImagePopover,\n      'tablePopover': TablePopover,\n      'videoDialog': VideoDialog,\n      'helpDialog': HelpDialog,\n      'airPopover': AirPopover\n    },\n    buttons: {},\n    lang: 'en-US',\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']]],\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']], ['float', ['floatLeft', 'floatRight', 'floatNone']], ['remove', ['removeMedia']]],\n      link: [['link', ['linkDialogShow', 'unlink']]],\n      table: [['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]],\n      air: [['color', ['color']], ['font', ['bold', 'underline', 'clear']], ['para', ['ul', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], ['view', ['fullscreen', 'codeview']]]\n    },\n    // link options\n    linkAddNoReferrer: false,\n    addLinkNoOpener: false,\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false,\n    // TBD\n\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n    focus: false,\n    tabDisable: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n    fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana'],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n    fontSizeUnits: ['px', 'pt'],\n    // pallete colors(n x n)\n    colors: [['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']],\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']],\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00'\n    },\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n    tableClassName: 'table table-bordered',\n    insertTableMaxSize: {\n      col: 10,\n      row: 10\n    },\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n    maximumImageFileSize: null,\n    acceptImageFileTypes: \"image/*\",\n    allowClipboardImagePasting: true,\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null\n    },\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true\n    },\n    codeviewFilter: true,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: ['www.youtube.com', 'www.youtube-nocookie.com', 'www.facebook.com', 'vine.co', 'instagram.com', 'player.vimeo.com', 'www.dailymotion.com', 'player.youku.com', 'jumpingbean.tv', 'v.qq.com'],\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show'\n      },\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show'\n      }\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video'\n    }\n  }\n});\n;// CONCATENATED MODULE: ./src/js/renderer.js\nfunction renderer_typeof(o) { \"@babel/helpers - typeof\"; return renderer_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, renderer_typeof(o); }\nfunction renderer_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction renderer_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, renderer_toPropertyKey(o.key), o); } }\nfunction renderer_createClass(e, r, t) { return r && renderer_defineProperties(e.prototype, r), t && renderer_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction renderer_toPropertyKey(t) { var i = renderer_toPrimitive(t, \"string\"); return \"symbol\" == renderer_typeof(i) ? i : i + \"\"; }\nfunction renderer_toPrimitive(t, r) { if (\"object\" != renderer_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != renderer_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer(markup, children, options, callback) {\n    renderer_classCallCheck(this, Renderer);\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n  return renderer_createClass(Renderer, [{\n    key: \"render\",\n    value: function render($parent) {\n      var $node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.markup);\n      if (this.options && this.options.contents) {\n        $node.html(this.options.contents);\n      }\n      if (this.options && this.options.className) {\n        $node.addClass(this.options.className);\n      }\n      if (this.options && this.options.data) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(this.options.data, function (k, v) {\n          $node.attr('data-' + k, v);\n        });\n      }\n      if (this.options && this.options.click) {\n        $node.on('click', this.options.click);\n      }\n      if (this.children) {\n        var $container = $node.find('.note-children-container');\n        this.children.forEach(function (child) {\n          child.render($container.length ? $container : $node);\n        });\n      }\n      if (this.callback) {\n        this.callback($node, this.options);\n      }\n      if (this.options && this.options.callback) {\n        this.options.callback($node);\n      }\n      if ($parent) {\n        $parent.append($node);\n      }\n      return $node;\n    }\n  }]);\n}();\n/* harmony default export */ const renderer = ({\n  create: function create(markup, callback) {\n    return function () {\n      var options = renderer_typeof(arguments[1]) === 'object' ? arguments[1] : arguments[0];\n      var children = Array.isArray(arguments[0]) ? arguments[0] : [];\n      if (options && options.children) {\n        children = options.children;\n      }\n      return new Renderer(markup, children, options, callback);\n    };\n  }\n});\n;// CONCATENATED MODULE: ./src/styles/bs5/summernote-bs5.js\nfunction summernote_bs5_typeof(o) { \"@babel/helpers - typeof\"; return summernote_bs5_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, summernote_bs5_typeof(o); }\n\n\n\n\nvar editor = renderer.create('<div class=\"note-editor note-frame card\"></div>');\nvar toolbar = renderer.create('<div class=\"note-toolbar card-header\" role=\"toolbar\"></div>');\nvar editingArea = renderer.create('<div class=\"note-editing-area\"></div>');\nvar codable = renderer.create('<textarea class=\"note-codable\" aria-multiline=\"true\"></textarea>');\nvar editable = renderer.create('<div class=\"note-editable card-block\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nvar statusbar = renderer.create(['<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>', '<div class=\"note-statusbar\" role=\"status\">', '<div class=\"note-resizebar\" aria-label=\"Resize\">', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '</div>', '</div>'].join(''));\nvar airEditor = renderer.create('<div class=\"note-editor note-airframe\"></div>');\nvar airEditable = renderer.create(['<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>', '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>'].join(''));\nvar buttonGroup = renderer.create('<div class=\"note-btn-group btn-group\">');\nvar dropdown = renderer.create('<div class=\"note-dropdown-menu dropdown-menu\" role=\"list\">', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var option = summernote_bs5_typeof(item) === 'object' ? item.option : undefined;\n    var dataValue = 'data-value=\"' + value + '\"';\n    var dataOption = option !== undefined ? ' data-option=\"' + option + '\"' : '';\n    return '<a class=\"dropdown-item\" href=\"#\" ' + (dataValue + dataOption) + ' role=\"listitem\" aria-label=\"' + value + '\">' + content + '</a>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dropdownButtonContents = function dropdownButtonContents(contents) {\n  return contents;\n};\nvar dropdownCheck = renderer.create('<div class=\"note-dropdown-menu dropdown-menu note-check\" role=\"list\">', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    return '<a class=\"dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\">' + icon(options.checkClassName) + ' ' + content + '</a>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dialog = renderer.create('<div class=\"modal note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"></div>', function ($node, options) {\n  if (options.fade) {\n    $node.addClass('fade');\n  }\n  $node.attr({\n    'aria-label': options.title\n  });\n  $node.html(['<div class=\"modal-dialog\">', '<div class=\"modal-content\">', options.title ? '<div class=\"modal-header\">' + '<h4 class=\"modal-title\">' + options.title + '</h4>' + '<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\" aria-hidden=\"true\"></button>' + '</div>' : '', '<div class=\"modal-body\">' + options.body + '</div>', options.footer ? '<div class=\"modal-footer\">' + options.footer + '</div>' : '', '</div>', '</div>'].join(''));\n});\nvar popover = renderer.create(['<div class=\"note-popover popover bs-popover-auto show\">', '<div class=\"popover-arrow\"></div>', '<div class=\"popover-body note-popover-content note-children-container\"></div>', '</div>'].join(''), function ($node, options) {\n  var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n  $node.attr('data-popper-placement', direction);\n  if (options.hideArrow) {\n    $node.find('.popover-arrow').hide();\n  }\n});\nvar summernote_bs5_checkbox = renderer.create('<div class=\"form-check\"></div>', function ($node, options) {\n  $node.html(['<label class=\"form-check-label\"' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>', '<input type=\"checkbox\" class=\"form-check-input\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''), options.checked ? ' checked' : '', ' aria-label=\"' + (options.text ? options.text : '') + '\"', ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>', ' ' + (options.text ? options.text : '') + '</label>'].join(''));\n});\nvar icon = function icon(iconClassName, tagName) {\n  if (iconClassName.match(/^</)) {\n    return iconClassName;\n  }\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"></' + tagName + '>';\n};\nvar ui = function ui(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    dropdown: dropdown,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheck: dropdownCheck,\n    dialog: dialog,\n    popover: popover,\n    icon: icon,\n    checkbox: summernote_bs5_checkbox,\n    options: editorOptions,\n    palette: function palette($node, options) {\n      return renderer.create('<div class=\"note-color-palette\"></div>', function ($node, options) {\n        var contents = [];\n        for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n          var eventName = options.eventName;\n          var colors = options.colors[row];\n          var colorsName = options.colorsName[row];\n          var buttons = [];\n          for (var col = 0, colSize = colors.length; col < colSize; col++) {\n            var color = colors[col];\n            var colorName = colorsName[col];\n            buttons.push(['<button type=\"button\" class=\"note-color-btn\"', 'style=\"background-color:', color, '\" ', 'data-event=\"', eventName, '\" ', 'data-value=\"', color, '\" ', 'title=\"', colorName, '\" ', 'aria-label=\"', colorName, '\" ', 'data-toggle=\"button\" tabindex=\"-1\"></button>'].join(''));\n          }\n          contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n        }\n        $node.html(contents.join(''));\n        if (options.tooltip) {\n          $node.find('.note-color-btn').tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          });\n        }\n      })($node, options);\n    },\n    button: function button($node, options) {\n      return renderer.create('<button type=\"button\" class=\"note-btn btn btn-outline-secondary btn-sm\" tabindex=\"-1\">', function ($node, options) {\n        if (options && options.data && options.data.toggle === 'dropdown') {\n          $node.removeAttr('data-toggle');\n          $node.attr('data-bs-toggle', 'dropdown');\n          if (options && options.tooltip) {\n            $node.attr({\n              title: options.tooltip,\n              'aria-label': options.tooltip\n            });\n          }\n        } else if (options && options.tooltip) {\n          $node.attr({\n            title: options.tooltip,\n            'aria-label': options.tooltip\n          }).tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          }).on('click', function (e) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.currentTarget).tooltip('hide');\n          });\n        }\n        if (options && options.codeviewButton) {\n          $node.addClass('note-codeview-keep');\n        }\n      })($node, options);\n    },\n    toggleBtn: function toggleBtn($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n    toggleBtnActive: function toggleBtnActive($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n    onDialogShown: function onDialogShown($dialog, handler) {\n      $dialog.one('shown.bs.modal', handler);\n    },\n    onDialogHidden: function onDialogHidden($dialog, handler) {\n      $dialog.one('hidden.bs.modal', handler);\n    },\n    showDialog: function showDialog($dialog) {\n      $dialog.modal('show');\n    },\n    hideDialog: function hideDialog($dialog) {\n      $dialog.modal('hide');\n    },\n    createLayout: function createLayout($note) {\n      var $editor = (editorOptions.airMode ? airEditor([editingArea([codable(), airEditable()])]) : editorOptions.toolbarPosition === 'bottom' ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()]) : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])).render();\n      $editor.insertAfter($note);\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar')\n      };\n    },\n    removeLayout: function removeLayout($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.show();\n    }\n  };\n};\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {\n  ui_template: ui,\n  \"interface\": 'bs5'\n});\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options.styleTags = ['p', {\n  title: 'Blockquote',\n  tag: 'blockquote',\n  className: 'blockquote',\n  value: 'blockquote'\n}, 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-bs5.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/summernote-lite.css",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n@font-face {\n    font-family: \"summernote\";\n    font-style: normal;\n    font-weight: 400;\n    font-display: auto;\n    src: url(\"./font/summernote.eot?#iefix\") format(\"embedded-opentype\"), url(\"./font/summernote.woff2\") format(\"woff2\"), url(\"./font/summernote.woff\") format(\"woff\"), url(\"./font/summernote.ttf\") format(\"truetype\");\n}\n[class^=note-icon]:before,\n[class*=\" note-icon\"]:before {\n    display: inline-block;\n    font-family: \"summernote\";\n    font-style: normal;\n    font-size: inherit;\n    text-decoration: inherit;\n    text-rendering: auto;\n    text-transform: none;\n    vertical-align: middle;\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-font-smoothing: antialiased;\n    speak: none;\n}\n\n.note-icon-fw {\n    text-align: center;\n    width: 1.25em;\n}\n\n.note-icon-border {\n    border: solid 0.08em #eee;\n    border-radius: 0.1em;\n    padding: 0.2em 0.25em 0.15em;\n}\n\n.note-icon-pull-left {\n    float: left;\n}\n\n.note-icon-pull-right {\n    float: right;\n}\n\n.note-icon.note-icon-pull-left {\n    margin-right: 0.3em;\n}\n.note-icon.note-icon-pull-right {\n    margin-left: 0.3em;\n}\n\n.note-icon-align::before {\n    content: \"\\ea01\";\n}\n\n.note-icon-align-center::before {\n    content: \"\\ea02\";\n}\n\n.note-icon-align-indent::before {\n    content: \"\\ea03\";\n}\n\n.note-icon-align-justify::before {\n    content: \"\\ea04\";\n}\n\n.note-icon-align-left::before {\n    content: \"\\ea05\";\n}\n\n.note-icon-align-outdent::before {\n    content: \"\\ea06\";\n}\n\n.note-icon-align-right::before {\n    content: \"\\ea07\";\n}\n\n.note-icon-arrow-circle-down::before {\n    content: \"\\ea08\";\n}\n\n.note-icon-arrow-circle-left::before {\n    content: \"\\ea09\";\n}\n\n.note-icon-arrow-circle-right::before {\n    content: \"\\ea0a\";\n}\n\n.note-icon-arrow-circle-up::before {\n    content: \"\\ea0b\";\n}\n\n.note-icon-arrows-alt::before {\n    content: \"\\ea0c\";\n}\n\n.note-icon-arrows-h::before {\n    content: \"\\ea0d\";\n}\n\n.note-icon-arrows-v::before {\n    content: \"\\ea0e\";\n}\n\n.note-icon-bold::before {\n    content: \"\\ea0f\";\n}\n\n.note-icon-caret::before {\n    content: \"\\ea10\";\n}\n\n.note-icon-chain-broken::before {\n    content: \"\\ea11\";\n}\n\n.note-icon-circle::before {\n    content: \"\\ea12\";\n}\n\n.note-icon-close::before {\n    content: \"\\ea13\";\n}\n\n.note-icon-code::before {\n    content: \"\\ea14\";\n}\n\n.note-icon-col-after::before {\n    content: \"\\ea15\";\n}\n\n.note-icon-col-before::before {\n    content: \"\\ea16\";\n}\n\n.note-icon-col-remove::before {\n    content: \"\\ea17\";\n}\n\n.note-icon-eraser::before {\n    content: \"\\ea18\";\n}\n\n.note-icon-float-left::before {\n    content: \"\\ea19\";\n}\n\n.note-icon-float-none::before {\n    content: \"\\ea1a\";\n}\n\n.note-icon-float-right::before {\n    content: \"\\ea1b\";\n}\n\n.note-icon-font::before {\n    content: \"\\ea1c\";\n}\n\n.note-icon-frame::before {\n    content: \"\\ea1d\";\n}\n\n.note-icon-italic::before {\n    content: \"\\ea1e\";\n}\n\n.note-icon-link::before {\n    content: \"\\ea1f\";\n}\n\n.note-icon-magic::before {\n    content: \"\\ea20\";\n}\n\n.note-icon-menu-check::before {\n    content: \"\\ea21\";\n}\n\n.note-icon-minus::before {\n    content: \"\\ea22\";\n}\n\n.note-icon-orderedlist::before {\n    content: \"\\ea23\";\n}\n\n.note-icon-pencil::before {\n    content: \"\\ea24\";\n}\n\n.note-icon-picture::before {\n    content: \"\\ea25\";\n}\n\n.note-icon-question::before {\n    content: \"\\ea26\";\n}\n\n.note-icon-redo::before {\n    content: \"\\ea27\";\n}\n\n.note-icon-rollback::before {\n    content: \"\\ea28\";\n}\n\n.note-icon-row-above::before {\n    content: \"\\ea29\";\n}\n\n.note-icon-row-below::before {\n    content: \"\\ea2a\";\n}\n\n.note-icon-row-remove::before {\n    content: \"\\ea2b\";\n}\n\n.note-icon-special-character::before {\n    content: \"\\ea2c\";\n}\n\n.note-icon-square::before {\n    content: \"\\ea2d\";\n}\n\n.note-icon-strikethrough::before {\n    content: \"\\ea2e\";\n}\n\n.note-icon-subscript::before {\n    content: \"\\ea2f\";\n}\n\n.note-icon-summernote::before {\n    content: \"\\ea30\";\n}\n\n.note-icon-superscript::before {\n    content: \"\\ea31\";\n}\n\n.note-icon-table::before {\n    content: \"\\ea32\";\n}\n\n.note-icon-text-height::before {\n    content: \"\\ea33\";\n}\n\n.note-icon-trash::before {\n    content: \"\\ea34\";\n}\n\n.note-icon-underline::before {\n    content: \"\\ea35\";\n}\n\n.note-icon-undo::before {\n    content: \"\\ea36\";\n}\n\n.note-icon-unorderedlist::before {\n    content: \"\\ea37\";\n}\n\n.note-icon-video::before {\n    content: \"\\ea38\";\n}\n\n.note-frame {\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n    color: #000;\n    font-family: sans-serif;\n    border-radius: 4px;\n}\n\n.note-toolbar {\n    padding: 10px 5px;\n    border-bottom: 1px solid #e2e2e2;\n    color: #333;\n    background-color: #f5f5f5;\n    border-color: #ddd;\n    border-top-left-radius: 3px;\n    border-top-right-radius: 3px;\n}\n\n.note-btn-group {\n    position: relative;\n    display: inline-block;\n    margin-right: 8px;\n}\n.note-btn-group > .note-btn-group {\n    margin-right: 0;\n}\n.note-btn-group > .note-btn:first-child {\n    margin-left: 0;\n}\n.note-btn-group .note-btn + .note-btn,\n.note-btn-group .note-btn + .note-btn-group,\n.note-btn-group .note-btn-group + .note-btn,\n.note-btn-group .note-btn-group + .note-btn-group {\n    margin-left: -1px;\n}\n.note-btn-group > .note-btn:not(:first-child),\n.note-btn-group > .note-btn-group:not(:first-child) > .note-btn {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n}\n.note-btn-group > .note-btn:not(:last-child):not(.dropdown-toggle),\n.note-btn-group > .note-btn-group:not(:last-child) > .note-btn {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n.note-btn-group.open > .note-dropdown {\n    display: block;\n}\n\n.note-btn {\n    display: inline-block;\n    font-weight: 400;\n    margin-bottom: 0;\n    text-align: center;\n    vertical-align: middle;\n    touch-action: manipulation;\n    cursor: pointer;\n    background-image: none;\n    border: 1px solid #dae0e5;\n    white-space: nowrap;\n    outline: 0;\n    color: #333;\n    background-color: #fff;\n    border-color: #dae0e5;\n    padding: 5px 10px;\n    font-size: 14px;\n    line-height: 1.4;\n    border-radius: 3px;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n}\n.note-btn:focus, .note-btn.focus {\n    color: #333;\n    background-color: #ebebeb;\n    border-color: #dae0e5;\n}\n.note-btn:hover {\n    color: #333;\n    background-color: #ebebeb;\n    border-color: #dae0e5;\n}\n.note-btn.disabled:focus, .note-btn.disabled.focus, .note-btn[disabled]:focus, .note-btn[disabled].focus, fieldset[disabled] .note-btn:focus, fieldset[disabled] .note-btn.focus {\n    background-color: #fff;\n    border-color: #dae0e5;\n}\n.note-btn:hover, .note-btn:focus, .note-btn.focus {\n    color: #333;\n    text-decoration: none;\n    border: 1px solid #dae0e5;\n    background-color: #ebebeb;\n    outline: 0;\n    border-radius: 1px;\n}\n.note-btn:active, .note-btn.active {\n    outline: 0;\n    background-image: none;\n    color: #333;\n    text-decoration: none;\n    border: 1px solid #dae0e5;\n    background-color: #ebebeb;\n    outline: 0;\n    border-radius: 1px;\n    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.note-btn.disabled, .note-btn[disabled], fieldset[disabled] .note-btn {\n    cursor: not-allowed;\n    -webkit-opacity: 0.65;\n    -khtml-opacity: 0.65;\n    -moz-opacity: 0.65;\n    opacity: 0.65;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=65);\n    filter: alpha(opacity=65);\n    box-shadow: none;\n}\n.note-btn > span.note-icon-caret:first-child {\n    margin-left: -1px;\n}\n.note-btn > span.note-icon-caret:nth-child(2) {\n    padding-left: 3px;\n    margin-right: -5px;\n}\n\n.note-btn-primary {\n    background: #fa6362;\n    color: #fff;\n}\n.note-btn-primary:hover, .note-btn-primary:focus, .note-btn-primary.focus {\n    color: #fff;\n    text-decoration: none;\n    border: 1px solid #dae0e5;\n    background-color: #fa6362;\n    border-radius: 1px;\n}\n\n.note-btn-block {\n    display: block;\n    width: 100%;\n}\n\n.note-btn-block + .note-btn-block {\n    margin-top: 5px;\n}\n\ninput[type=submit].note-btn-block,\ninput[type=reset].note-btn-block,\ninput[type=button].note-btn-block {\n    width: 100%;\n}\n\nbutton.close {\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    -webkit-appearance: none;\n}\n\n.close {\n    float: right;\n    font-size: 21px;\n    line-height: 1;\n    color: #000;\n    opacity: 0.2;\n}\n\n.close:hover {\n    -webkit-opacity: 1;\n    -khtml-opacity: 1;\n    -moz-opacity: 1;\n    -ms-filter: alpha(opacity=100);\n    filter: alpha(opacity=100);\n    opacity: 1;\n}\n\n.note-dropdown {\n    position: relative;\n}\n\n.note-color .dropdown-toggle {\n    width: 30px;\n    padding-left: 5px;\n}\n\n.note-dropdown-menu {\n    display: none;\n    min-width: 100px;\n    position: absolute;\n    top: 100%;\n    left: 0;\n    z-index: 1000;\n    float: left;\n    text-align: left;\n    background: #fff;\n    border: 1px solid #e2e2e2;\n    padding: 5px;\n    background-clip: padding-box;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.06);\n}\n.note-dropdown-menu > *:last-child {\n    margin-right: 0;\n}\n\n.note-btn-group.open .note-dropdown-menu {\n    display: block;\n}\n\n.note-dropdown-item {\n    display: block;\n}\n.note-dropdown-item:hover {\n    background-color: #ebebeb;\n}\n\na.note-dropdown-item,\na.note-dropdown-item:hover {\n    margin: 5px 0;\n    color: #000;\n    text-decoration: none;\n}\n\n.note-modal {\n    position: fixed;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    z-index: 1050;\n    -webkit-opacity: 1;\n    -khtml-opacity: 1;\n    -moz-opacity: 1;\n    opacity: 1;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n    filter: alpha(opacity=100);\n    display: none;\n}\n.note-modal.open {\n    display: block;\n}\n\n.note-modal-content {\n    position: relative;\n    width: auto;\n    margin: 30px 20px;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    background: #fff;\n    background-clip: border-box;\n    outline: 0;\n    border-radius: 5px;\n    box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n}\n\n.note-modal-header {\n    padding: 10px 20px;\n    border: 1px solid #ededef;\n}\n\n.note-modal-body {\n    position: relative;\n    padding: 20px 30px;\n}\n.note-modal-body kbd {\n    border-radius: 2px;\n    background-color: #000;\n    color: #fff;\n    padding: 3px 5px;\n    font-weight: 700;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n.note-modal-footer {\n    height: 40px;\n    padding: 10px;\n    text-align: center;\n}\n\n.note-modal-footer a {\n    color: #337ab7;\n    text-decoration: none;\n}\n\n.note-modal-footer a:hover,\n.note-modal-footer a:focus {\n    color: #23527c;\n    text-decoration: underline;\n}\n\n.note-modal-footer .note-btn {\n    float: right;\n}\n\n.note-modal-title {\n    font-size: 20px;\n    color: #42515f;\n    margin: 0;\n    line-height: 1.4;\n}\n\n.note-modal-backdrop {\n    position: fixed;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    top: 0;\n    z-index: 1040;\n    background: #000;\n    -webkit-opacity: 0.5;\n    -khtml-opacity: 0.5;\n    -moz-opacity: 0.5;\n    opacity: 0.5;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n    filter: alpha(opacity=50);\n    display: none;\n}\n.note-modal-backdrop.open {\n    display: block;\n}\n\n@media (min-width: 768px) {\n    .note-modal-content {\n        width: 600px;\n        margin: 30px auto;\n    }\n}\n@media (min-width: 992px) {\n    .note-modal-content-large {\n        width: 900px;\n    }\n}\n.note-modal .note-help-block {\n    display: block;\n    margin-top: 5px;\n    margin-bottom: 10px;\n    color: #737373;\n}\n.note-modal .note-nav {\n    display: flex;\n    flex-wrap: wrap;\n    padding-left: 0;\n    margin-bottom: 0;\n    list-style: none;\n}\n.note-modal .note-nav-link {\n    display: block;\n    padding: 0.5rem 1rem;\n    color: #007bff;\n    text-decoration: none;\n    background-color: transparent;\n    -webkit-text-decoration-skip: objects;\n}\n.note-modal .note-nav-link:focus,\n.note-modal .note-nav-link:hover {\n    color: #0056b3;\n    text-decoration: none;\n}\n.note-modal .note-nav-link.disabled {\n    color: #868e96;\n}\n.note-modal .note-nav-tabs {\n    border-bottom: 1px solid #ddd;\n}\n.note-modal .note-nav-tabs .note-nav-item {\n    margin-bottom: -1px;\n}\n.note-modal .note-nav-tabs .note-nav-link {\n    border: 1px solid transparent;\n    border-top-left-radius: 0.25rem;\n    border-top-right-radius: 0.25rem;\n}\n.note-modal .note-nav-tabs .note-nav-link:focus,\n.note-modal .note-nav-tabs .note-nav-link:hover {\n    border-color: #e9ecef #e9ecef #ddd;\n}\n.note-modal .note-nav-tabs .note-nav-link.disabled {\n    color: #868e96;\n    background-color: transparent;\n    border-color: transparent;\n}\n.note-modal .note-nav-tabs .note-nav-item.show .note-nav-link {\n    color: #495057;\n    background-color: #fff;\n    border-color: #ddd #ddd #fff;\n}\n.note-modal .note-tab-content {\n    margin: 15px auto;\n}\n.note-modal .note-tab-content > .note-tab-pane:target ~ .note-tab-pane:last-child,\n.note-modal .note-tab-content > .note-tab-pane {\n    display: none;\n}\n.note-modal .note-tab-content > :last-child,\n.note-modal .note-tab-content > .note-tab-pane:target {\n    display: block;\n}\n\n.note-form-group {\n    padding-bottom: 20px;\n}\n\n.note-form-group:last-child {\n    padding-bottom: 0;\n}\n\n.note-form-label {\n    display: block;\n    width: 100%;\n    font-size: 16px;\n    color: #42515f;\n    margin-bottom: 10px;\n    font-weight: 700;\n}\n\n.note-input {\n    width: 100%;\n    display: block;\n    border: 1px solid #ededef;\n    background: #fff;\n    outline: 0;\n    padding: 6px 4px;\n    font-size: 14px;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n.note-input::-webkit-input-placeholder {\n    color: #eeeeee;\n}\n\n.note-input:-moz-placeholder { /* Firefox 18- */\n    color: #eeeeee;\n}\n\n.note-input::-moz-placeholder { /* Firefox 19+ */\n    color: #eeeeee;\n}\n\n.note-input:-ms-input-placeholder {\n    color: #eeeeee;\n}\n\n.note-tooltip {\n    position: absolute;\n    z-index: 1070;\n    display: block;\n    font-size: 13px;\n    transition: opacity 0.15s;\n    -webkit-opacity: 0;\n    -khtml-opacity: 0;\n    -moz-opacity: 0;\n    opacity: 0;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n    filter: alpha(opacity=0);\n}\n.note-tooltip.in {\n    -webkit-opacity: 0.9;\n    -khtml-opacity: 0.9;\n    -moz-opacity: 0.9;\n    opacity: 0.9;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=90);\n    filter: alpha(opacity=90);\n}\n.note-tooltip.top {\n    margin-top: -3px;\n    padding: 5px 0;\n}\n.note-tooltip.right {\n    margin-left: 3px;\n    padding: 0 5px;\n}\n.note-tooltip.bottom {\n    margin-top: 3px;\n    padding: 5px 0;\n}\n.note-tooltip.left {\n    margin-left: -3px;\n    padding: 0 5px;\n}\n\n.note-tooltip.bottom .note-tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -5px;\n    border-width: 0 5px 5px;\n    border-bottom-color: #000;\n}\n.note-tooltip.top .note-tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -5px;\n    border-width: 5px 5px 0;\n    border-top-color: #000;\n}\n.note-tooltip.right .note-tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -5px;\n    border-width: 5px 5px 5px 0;\n    border-right-color: #000;\n}\n.note-tooltip.left .note-tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -5px;\n    border-width: 5px 0 5px 5px;\n    border-left-color: #000;\n}\n\n.note-tooltip-arrow {\n    position: absolute;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n}\n\n.note-tooltip-content {\n    max-width: 200px;\n    font-family: sans-serif;\n    padding: 3px 8px;\n    color: #fff;\n    text-align: center;\n    background-color: #000;\n}\n\n.note-popover {\n    position: absolute;\n    z-index: 1060;\n    display: block;\n    font-size: 13px;\n    font-family: sans-serif;\n    display: none;\n    background: #ffffff;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    border: 1px solid #ccc;\n}\n.note-popover.in {\n    display: block;\n}\n.note-popover.top {\n    margin-top: -10px;\n    padding: 5px 0;\n}\n.note-popover.right {\n    margin-left: 10px;\n    padding: 0 5px;\n}\n.note-popover.bottom {\n    margin-top: 10px;\n    padding: 5px 0;\n}\n.note-popover.left {\n    margin-left: -10px;\n    padding: 0 5px;\n}\n\n.note-popover.bottom .note-popover-arrow {\n    top: -11px;\n    left: 20px;\n    margin-left: -10px;\n    border-top-width: 0;\n    border-bottom-color: #999999;\n    border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.note-popover.bottom .note-popover-arrow::after {\n    top: 1px;\n    margin-left: -10px;\n    content: \"\\0020\";\n    border-top-width: 0;\n    border-bottom-color: #fff;\n}\n.note-popover.top .note-popover-arrow {\n    bottom: -11px;\n    left: 20px;\n    margin-left: -10px;\n    border-bottom-width: 0;\n    border-top-color: #999999;\n    border-top-color: rgba(0, 0, 0, 0.25);\n}\n.note-popover.top .note-popover-arrow::after {\n    bottom: 1px;\n    margin-left: -10px;\n    content: \"\\0020\";\n    border-bottom-width: 0;\n    border-top-color: #fff;\n}\n.note-popover.right .note-popover-arrow {\n    top: 50%;\n    left: -11px;\n    margin-top: -10px;\n    border-left-width: 0;\n    border-right-color: #999999;\n    border-right-color: rgba(0, 0, 0, 0.25);\n}\n.note-popover.right .note-popover-arrow::after {\n    left: 1px;\n    margin-top: -10px;\n    content: \"\\0020\";\n    border-left-width: 0;\n    border-right-color: #fff;\n}\n.note-popover.left .note-popover-arrow {\n    top: 50%;\n    right: -11px;\n    margin-top: -10px;\n    border-right-width: 0;\n    border-left-color: #999999;\n    border-left-color: rgba(0, 0, 0, 0.25);\n}\n.note-popover.left .note-popover-arrow::after {\n    right: 1px;\n    margin-top: -10px;\n    content: \"\\0020\";\n    border-right-width: 0;\n    border-left-color: #fff;\n}\n\n.note-popover-arrow {\n    position: absolute;\n    width: 0;\n    height: 0;\n    border: 11px solid transparent;\n}\n.note-popover-arrow::after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n    content: \"\\0020\";\n    border-width: 10px;\n}\n\n.note-popover-content {\n    /*max-width: $popover-max-width;*/\n    padding: 3px 8px;\n    color: #000;\n    text-align: center;\n    background-color: #ffffff;\n    min-width: 100px;\n    min-height: 30px;\n}\n\n/* Theme Variables\n ------------------------------------------ */\n/* Layout\n ------------------------------------------ */\n.note-editor {\n    position: relative;\n}\n.note-editor .note-dropzone {\n    position: absolute;\n    display: none;\n    z-index: 100;\n    color: lightskyblue;\n    background-color: #fff;\n    opacity: 0.95;\n}\n.note-editor .note-dropzone .note-dropzone-message {\n    display: table-cell;\n    vertical-align: middle;\n    text-align: center;\n    font-size: 28px;\n    font-weight: 700;\n}\n.note-editor .note-dropzone.hover {\n    color: #098ddf;\n}\n.note-editor.dragover .note-dropzone {\n    display: table;\n}\n.note-editor .note-editing-area {\n    position: relative;\n}\n.note-editor .note-editing-area .note-editable {\n    outline: none;\n}\n.note-editor .note-editing-area .note-editable sup {\n    vertical-align: super;\n}\n.note-editor .note-editing-area .note-editable sub {\n    vertical-align: sub;\n}\n.note-editor .note-editing-area .note-editable img.note-float-left {\n    margin-right: 10px;\n}\n.note-editor .note-editing-area .note-editable img.note-float-right {\n    margin-left: 10px;\n}\n\n/* Frame mode layout\n ------------------------------------------ */\n.note-editor.note-frame,\n.note-editor.note-airframe {\n    border: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame.codeview .note-editing-area .note-editable,\n.note-editor.note-airframe.codeview .note-editing-area .note-editable {\n    display: none;\n}\n.note-editor.note-frame.codeview .note-editing-area .note-codable,\n.note-editor.note-airframe.codeview .note-editing-area .note-codable {\n    display: block;\n}\n.note-editor.note-frame .note-editing-area,\n.note-editor.note-airframe .note-editing-area {\n    overflow: hidden;\n}\n.note-editor.note-frame .note-editing-area .note-editable,\n.note-editor.note-airframe .note-editing-area .note-editable {\n    padding: 10px;\n    overflow: auto;\n    word-wrap: break-word;\n}\n.note-editor.note-frame .note-editing-area .note-editable[contenteditable=false],\n.note-editor.note-airframe .note-editing-area .note-editable[contenteditable=false] {\n    background-color: rgba(128, 128, 128, 0.1137254902);\n}\n.note-editor.note-frame .note-editing-area .note-codable,\n.note-editor.note-airframe .note-editing-area .note-codable {\n    display: none;\n    width: 100%;\n    padding: 10px;\n    border: none;\n    box-shadow: none;\n    font-family: Menlo, Monaco, monospace, sans-serif;\n    font-size: 14px;\n    color: #ccc;\n    background-color: #222;\n    resize: none;\n    outline: none;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n    border-radius: 0;\n    margin-bottom: 0;\n}\n.note-editor.note-frame.fullscreen,\n.note-editor.note-airframe.fullscreen {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100% !important;\n    z-index: 1050;\n}\n.note-editor.note-frame.fullscreen .note-resizebar,\n.note-editor.note-airframe.fullscreen .note-resizebar {\n    display: none;\n}\n.note-editor.note-frame .note-status-output,\n.note-editor.note-airframe .note-status-output {\n    display: block;\n    width: 100%;\n    font-size: 14px;\n    line-height: 1.42857143;\n    height: 20px;\n    margin-bottom: 0;\n    color: #000;\n    border: 0;\n    border-top: 1px solid #e2e2e2;\n}\n.note-editor.note-frame .note-status-output:empty,\n.note-editor.note-airframe .note-status-output:empty {\n    height: 0;\n    border-top: 0 solid transparent;\n}\n.note-editor.note-frame .note-status-output .pull-right,\n.note-editor.note-airframe .note-status-output .pull-right {\n    float: right !important;\n}\n.note-editor.note-frame .note-status-output .text-muted,\n.note-editor.note-airframe .note-status-output .text-muted {\n    color: #777;\n}\n.note-editor.note-frame .note-status-output .text-primary,\n.note-editor.note-airframe .note-status-output .text-primary {\n    color: #286090;\n}\n.note-editor.note-frame .note-status-output .text-success,\n.note-editor.note-airframe .note-status-output .text-success {\n    color: #3c763d;\n}\n.note-editor.note-frame .note-status-output .text-info,\n.note-editor.note-airframe .note-status-output .text-info {\n    color: #31708f;\n}\n.note-editor.note-frame .note-status-output .text-warning,\n.note-editor.note-airframe .note-status-output .text-warning {\n    color: #8a6d3b;\n}\n.note-editor.note-frame .note-status-output .text-danger,\n.note-editor.note-airframe .note-status-output .text-danger {\n    color: #a94442;\n}\n.note-editor.note-frame .note-status-output .alert,\n.note-editor.note-airframe .note-status-output .alert {\n    margin: -7px 0 0 0;\n    padding: 7px 10px 2px 10px;\n    border-radius: 0;\n    color: #000;\n    background-color: #f5f5f5;\n}\n.note-editor.note-frame .note-status-output .alert .note-icon,\n.note-editor.note-airframe .note-status-output .alert .note-icon {\n    margin-right: 5px;\n}\n.note-editor.note-frame .note-status-output .alert-success,\n.note-editor.note-airframe .note-status-output .alert-success {\n    color: #3c763d !important;\n    background-color: #dff0d8 !important;\n}\n.note-editor.note-frame .note-status-output .alert-info,\n.note-editor.note-airframe .note-status-output .alert-info {\n    color: #31708f !important;\n    background-color: #d9edf7 !important;\n}\n.note-editor.note-frame .note-status-output .alert-warning,\n.note-editor.note-airframe .note-status-output .alert-warning {\n    color: #8a6d3b !important;\n    background-color: #fcf8e3 !important;\n}\n.note-editor.note-frame .note-status-output .alert-danger,\n.note-editor.note-airframe .note-status-output .alert-danger {\n    color: #a94442 !important;\n    background-color: #f2dede !important;\n}\n.note-editor.note-frame .note-statusbar,\n.note-editor.note-airframe .note-statusbar {\n    background-color: rgba(128, 128, 128, 0.1137254902);\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame .note-statusbar .note-resizebar,\n.note-editor.note-airframe .note-statusbar .note-resizebar {\n    padding-top: 1px;\n    height: 9px;\n    width: 100%;\n    cursor: ns-resize;\n}\n.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,\n.note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar {\n    width: 20px;\n    margin: 1px auto;\n    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame .note-statusbar.locked .note-resizebar,\n.note-editor.note-airframe .note-statusbar.locked .note-resizebar {\n    cursor: default;\n}\n.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar,\n.note-editor.note-airframe .note-statusbar.locked .note-resizebar .note-icon-bar {\n    display: none;\n}\n.note-editor.note-frame .note-placeholder,\n.note-editor.note-airframe .note-placeholder {\n    padding: 10px;\n}\n\n.note-editor.note-airframe {\n    border: 0;\n}\n.note-editor.note-airframe .note-editing-area .note-editable {\n    padding: 0;\n}\n\n/* Popover\n ------------------------------------------ */\n.note-popover.popover {\n    display: none;\n    max-width: none;\n}\n.note-popover.popover .popover-content a {\n    display: inline-block;\n    max-width: 200px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    vertical-align: middle;\n}\n.note-popover.popover .arrow {\n    left: 20px !important;\n}\n\n/* Popover and Toolbar (Button container)\n ------------------------------------------ */\n.note-toolbar {\n    position: relative;\n}\n\n.note-popover .popover-content, .note-editor .note-toolbar {\n    margin: 0;\n    padding: 0 0 5px 5px;\n}\n.note-popover .popover-content > .note-btn-group, .note-editor .note-toolbar > .note-btn-group {\n    margin-top: 5px;\n    margin-left: 0;\n    margin-right: 5px;\n}\n.note-popover .popover-content .note-btn-group .note-table, .note-editor .note-toolbar .note-btn-group .note-table {\n    min-width: 0;\n    padding: 5px;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker {\n    font-size: 18px;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher {\n    position: absolute !important;\n    z-index: 3;\n    width: 10em;\n    height: 10em;\n    cursor: pointer;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted {\n    position: relative !important;\n    z-index: 1;\n    width: 5em;\n    height: 5em;\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted {\n    position: absolute !important;\n    z-index: 2;\n    width: 1em;\n    height: 1em;\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n}\n.note-popover .popover-content .note-style .dropdown-style blockquote, .note-popover .popover-content .note-style .dropdown-style pre, .note-editor .note-toolbar .note-style .dropdown-style blockquote, .note-editor .note-toolbar .note-style .dropdown-style pre {\n    margin: 0;\n    padding: 5px 10px;\n}\n.note-popover .popover-content .note-style .dropdown-style h1, .note-popover .popover-content .note-style .dropdown-style h2, .note-popover .popover-content .note-style .dropdown-style h3, .note-popover .popover-content .note-style .dropdown-style h4, .note-popover .popover-content .note-style .dropdown-style h5, .note-popover .popover-content .note-style .dropdown-style h6, .note-popover .popover-content .note-style .dropdown-style p, .note-editor .note-toolbar .note-style .dropdown-style h1, .note-editor .note-toolbar .note-style .dropdown-style h2, .note-editor .note-toolbar .note-style .dropdown-style h3, .note-editor .note-toolbar .note-style .dropdown-style h4, .note-editor .note-toolbar .note-style .dropdown-style h5, .note-editor .note-toolbar .note-style .dropdown-style h6, .note-editor .note-toolbar .note-style .dropdown-style p {\n    margin: 0;\n    padding: 0;\n}\n.note-popover .popover-content .note-color-all .note-dropdown-menu, .note-editor .note-toolbar .note-color-all .note-dropdown-menu {\n    min-width: 337px;\n}\n.note-popover .popover-content .note-color .dropdown-toggle, .note-editor .note-toolbar .note-color .dropdown-toggle {\n    width: 20px;\n    padding-left: 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette {\n    display: inline-block;\n    margin: 0;\n    width: 160px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette:first-child, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette:first-child {\n    margin: 0 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title {\n    font-size: 12px;\n    margin: 2px 7px;\n    text-align: center;\n    border-bottom: 1px solid #eee;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset,\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select {\n    font-size: 11px;\n    margin: 3px;\n    padding: 0 3px;\n    cursor: pointer;\n    width: 100%;\n    border-radius: 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover {\n    background: #eee;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-row, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row {\n    height: 20px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select-btn {\n    display: none;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn {\n    border: 1px solid #eee;\n}\n.note-popover .popover-content .note-para .note-dropdown-menu, .note-editor .note-toolbar .note-para .note-dropdown-menu {\n    min-width: 228px;\n    padding: 5px;\n}\n.note-popover .popover-content .note-para .note-dropdown-menu > div + div, .note-editor .note-toolbar .note-para .note-dropdown-menu > div + div {\n    margin-left: 5px;\n}\n.note-popover .popover-content .note-dropdown-menu, .note-editor .note-toolbar .note-dropdown-menu {\n    min-width: 160px;\n}\n.note-popover .popover-content .note-dropdown-menu.right, .note-editor .note-toolbar .note-dropdown-menu.right {\n    right: 0;\n    left: auto;\n}\n.note-popover .popover-content .note-dropdown-menu.right::before, .note-editor .note-toolbar .note-dropdown-menu.right::before {\n    right: 9px;\n    left: auto !important;\n}\n.note-popover .popover-content .note-dropdown-menu.right::after, .note-editor .note-toolbar .note-dropdown-menu.right::after {\n    right: 10px;\n    left: auto !important;\n}\n.note-popover .popover-content .note-dropdown-menu.note-check a i, .note-editor .note-toolbar .note-dropdown-menu.note-check a i {\n    color: deepskyblue;\n    visibility: hidden;\n}\n.note-popover .popover-content .note-dropdown-menu.note-check a.checked i, .note-editor .note-toolbar .note-dropdown-menu.note-check a.checked i {\n    visibility: visible;\n}\n.note-popover .popover-content .note-fontsize-10, .note-editor .note-toolbar .note-fontsize-10 {\n    font-size: 10px;\n}\n.note-popover .popover-content .note-color-palette, .note-editor .note-toolbar .note-color-palette {\n    line-height: 1;\n}\n.note-popover .popover-content .note-color-palette div .note-color-btn, .note-editor .note-toolbar .note-color-palette div .note-color-btn {\n    width: 20px;\n    height: 20px;\n    padding: 0;\n    margin: 0;\n    border: 0;\n    border-radius: 0;\n}\n.note-popover .popover-content .note-color-palette div .note-color-btn:hover, .note-editor .note-toolbar .note-color-palette div .note-color-btn:hover {\n    transform: scale(1.2);\n    transition: all 0.2s;\n}\n\n/* Dialog\n ------------------------------------------ */\n.note-modal .modal-dialog {\n    outline: 0;\n    border-radius: 5px;\n    box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n}\n.note-modal .form-group {\n    margin-left: 0;\n    margin-right: 0;\n}\n.note-modal .note-modal-form {\n    margin: 0;\n}\n.note-modal .note-image-dialog .note-dropzone {\n    min-height: 100px;\n    font-size: 30px;\n    line-height: 4;\n    color: lightgray;\n    text-align: center;\n    border: 4px dashed lightgray;\n    margin-bottom: 10px;\n}\n@-moz-document url-prefix() {\n    .note-modal .note-image-input {\n        height: auto;\n    }\n}\n\n/* Placeholder\n ------------------------------------------ */\n.note-placeholder {\n    position: absolute;\n    display: none;\n    color: gray;\n}\n\n/* Handle\n ------------------------------------------ */\n.note-handle .note-control-selection {\n    position: absolute;\n    display: none;\n    border: 1px solid #000;\n}\n.note-handle .note-control-selection > div {\n    position: absolute;\n}\n.note-handle .note-control-selection .note-control-selection-bg {\n    width: 100%;\n    height: 100%;\n    background-color: #000;\n    -webkit-opacity: 0.3;\n    -khtml-opacity: 0.3;\n    -moz-opacity: 0.3;\n    opacity: 0.3;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=30);\n    filter: alpha(opacity=30);\n}\n.note-handle .note-control-selection .note-control-handle, .note-handle .note-control-selection .note-control-sizing, .note-handle .note-control-selection .note-control-holder {\n    width: 7px;\n    height: 7px;\n    border: 1px solid #000;\n}\n.note-handle .note-control-selection .note-control-sizing {\n    background-color: #000;\n}\n.note-handle .note-control-selection .note-control-nw {\n    top: -5px;\n    left: -5px;\n    border-right: none;\n    border-bottom: none;\n}\n.note-handle .note-control-selection .note-control-ne {\n    top: -5px;\n    right: -5px;\n    border-bottom: none;\n    border-left: none;\n}\n.note-handle .note-control-selection .note-control-sw {\n    bottom: -5px;\n    left: -5px;\n    border-top: none;\n    border-right: none;\n}\n.note-handle .note-control-selection .note-control-se {\n    right: -5px;\n    bottom: -5px;\n    cursor: se-resize;\n}\n.note-handle .note-control-selection .note-control-se.note-control-holder {\n    cursor: default;\n    border-top: none;\n    border-left: none;\n}\n.note-handle .note-control-selection .note-control-selection-info {\n    right: 0;\n    bottom: 0;\n    padding: 5px;\n    margin: 5px;\n    color: #fff;\n    background-color: #000;\n    font-size: 12px;\n    border-radius: 5px;\n    -webkit-opacity: 0.7;\n    -khtml-opacity: 0.7;\n    -moz-opacity: 0.7;\n    opacity: 0.7;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);\n    filter: alpha(opacity=70);\n}\n\n.note-hint-popover {\n    min-width: 100px;\n    padding: 2px;\n}\n.note-hint-popover .popover-content {\n    padding: 3px;\n    max-height: 150px;\n    overflow: auto;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item {\n    display: block !important;\n    padding: 3px;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item.active, .note-hint-popover .popover-content .note-hint-group .note-hint-item:hover {\n    display: block;\n    clear: both;\n    font-weight: 400;\n    line-height: 1.4;\n    color: white;\n    white-space: nowrap;\n    text-decoration: none;\n    background-color: #428bca;\n    outline: 0;\n    cursor: pointer;\n}\n\n/* Handle\n ------------------------------------------ */\nhtml .note-fullscreen-body, body .note-fullscreen-body {\n    overflow: hidden !important;\n}\n\n.note-editable ul li, .note-editable ol li {\n    list-style-position: inside;\n}\n\n.note-editor .note-editing-area .note-editable table {\n    width: 100%;\n    border-collapse: collapse;\n}\n.note-editor .note-editing-area .note-editable table td, .note-editor .note-editing-area .note-editable table th {\n    border: 1px solid #ececec;\n    padding: 5px 3px;\n}\n.note-editor .note-editing-area .note-editable a {\n    background-color: inherit;\n    text-decoration: inherit;\n    font-family: inherit;\n    font-weight: inherit;\n    color: #337ab7;\n}\n.note-editor .note-editing-area .note-editable a:hover,\n.note-editor .note-editing-area .note-editable a:focus {\n    color: #23527c;\n    text-decoration: underline;\n    outline: 0;\n}\n.note-editor .note-editing-area .note-editable figure {\n    margin: 0;\n}\n\n/* Dialog\n ------------------------------------------*/\n.note-modal .note-modal-body label {\n    margin-bottom: 2px;\n    padding: 2px 5px;\n    display: inline-block;\n}\n.note-modal .note-modal-body .help-list-item:hover {\n    background-color: #e0e0e0;\n}\n@-moz-document url-prefix() {\n    .note-modal .note-image-input {\n        height: auto;\n    }\n}\n\n.help-list-item label {\n    margin-bottom: 5px;\n    display: inline-block;\n}\n\n/*# sourceMappingURL=summernote-lite.css.map*/"
  },
  {
    "path": "public/vendor/summernote/0.9.1/summernote-lite.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, (__WEBPACK_EXTERNAL_MODULE__8938__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 7000:\n/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {\n\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8938);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n(jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) = (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) || {\n  lang: {}\n};\njquery__WEBPACK_IMPORTED_MODULE_0___default().extend(true, (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote).lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit'\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original'\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion, Youku, Peertube)'\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window'\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table'\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule'\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list'\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View'\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full'\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select'\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys'\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog'\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo'\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters'\n    },\n    output: {\n      noSelection: 'No Selection Made!'\n    }\n  }\n});\n\n/***/ }),\n\n/***/ 8938:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__8938__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_ = __webpack_require__(8938);\nvar external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_);\n// EXTERNAL MODULE: ./src/lang/summernote-en-US.js\nvar summernote_en_US = __webpack_require__(7000);\n;// CONCATENATED MODULE: ./src/js/core/env.js\n\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nvar genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\nfunction validFontName(fontName) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().inArray(fontName.toLowerCase(), genericFontFamilies) === -1 ? \"'\".concat(fontName, \"'\") : fontName;\n}\nfunction createIsFontInstalledFunc() {\n  var testText = \"mw\";\n  var fontSize = \"20px\";\n  var canvasWidth = 40;\n  var canvasHeight = 20;\n  var canvas = document.createElement(\"canvas\");\n  var context = canvas.getContext(\"2d\", {\n    willReadFrequently: true\n  });\n  canvas.width = canvasWidth;\n  canvas.height = canvasHeight;\n  context.textAlign = \"center\";\n  context.fillStyle = \"black\";\n  context.textBaseline = \"middle\";\n  function getPxInfo(font, testFontName) {\n    context.clearRect(0, 0, canvasWidth, canvasHeight);\n    context.font = fontSize + ' ' + validFontName(font) + ', \"' + testFontName + '\"';\n    context.fillText(testText, canvasWidth / 2, canvasHeight / 2);\n    // Get pixel information\n    var pxInfo = context.getImageData(0, 0, canvasWidth, canvasHeight).data;\n    return pxInfo.join(\"\");\n  }\n  return function (fontName) {\n    var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n    var testInfo = getPxInfo(testFontName, testFontName);\n    var fontInfo = getPxInfo(fontName, testFontName);\n    return testInfo !== fontInfo;\n  };\n}\nvar userAgent = navigator.userAgent;\nvar isMSIE = /MSIE|Trident/i.test(userAgent);\nvar browserVersion;\nif (isMSIE) {\n  var matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\nvar isEdge = /Edge\\/\\d+/.test(userAgent);\nvar isSupportTouch = 'ontouchstart' in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nvar inputEventName = isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\n/* harmony default export */ const env = ({\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE: isMSIE,\n  isEdge: isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && !/chrome/i.test(userAgent),\n  browserVersion: browserVersion,\n  isSupportTouch: isSupportTouch,\n  isFontInstalled: createIsFontInstalledFunc(),\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName: inputEventName,\n  genericFontFamilies: genericFontFamilies,\n  validFontName: validFontName\n});\n;// CONCATENATED MODULE: ./src/js/core/func.js\n\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n  return function (itemB) {\n    return itemA === itemB;\n  };\n}\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\nfunction peq2(propName) {\n  return function (itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\nfunction ok() {\n  return true;\n}\nfunction fail() {\n  return false;\n}\nfunction not(f) {\n  return function () {\n    return !f.apply(f, arguments);\n  };\n}\nfunction and(fA, fB) {\n  return function (item) {\n    return fA(item) && fB(item);\n  };\n}\nfunction func_self(a) {\n  return a;\n}\nfunction invoke(obj, method) {\n  return function () {\n    return obj[method].apply(obj, arguments);\n  };\n}\nvar idCounter = 0;\n\n/**\n * reset globally-unique id\n *\n */\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n  var $document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n  var inverted = {};\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n  return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function (name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n    var later = function later() {\n      timeout = null;\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\nfunction isValidUrl(url) {\n  var expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n/* harmony default export */ const func = ({\n  eq: eq,\n  eq2: eq2,\n  peq2: peq2,\n  ok: ok,\n  fail: fail,\n  self: func_self,\n  not: not,\n  and: and,\n  invoke: invoke,\n  resetUniqueId: resetUniqueId,\n  uniqueId: uniqueId,\n  rect2bnd: rect2bnd,\n  invertObject: invertObject,\n  namespaceToCamel: namespaceToCamel,\n  debounce: debounce,\n  isValidUrl: isValidUrl\n});\n;// CONCATENATED MODULE: ./src/js/core/lists.js\n\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n  return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n  return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n  return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    var item = array[idx];\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction lists_all(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n  return false;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function (memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n  var result = [];\n  var length = collection.length;\n  var idx = -1;\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n  return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n  return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n  if (!array.length) {\n    return [];\n  }\n  var aTail = tail(array);\n  return aTail.reduce(function (memo, v) {\n    var aLast = last(memo);\n    if (fn(last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n    return memo;\n  }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n  var aResult = [];\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) {\n      aResult.push(array[idx]);\n    }\n  }\n  return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n  var results = [];\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n  return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n  return null;\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n  return null;\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\n/* harmony default export */ const lists = ({\n  head: head,\n  last: last,\n  initial: initial,\n  tail: tail,\n  prev: prev,\n  next: next,\n  find: find,\n  contains: contains,\n  all: lists_all,\n  sum: sum,\n  from: from,\n  isEmpty: isEmpty,\n  clusterBy: clusterBy,\n  compact: compact,\n  unique: unique\n});\n;// CONCATENATED MODULE: ./src/js/core/dom.js\n\n\n\n\nvar NBSP_CHAR = String.fromCharCode(160);\nvar ZERO_WIDTH_NBSP_CHAR = \"\\uFEFF\";\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function (node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  }\n\n  // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\nvar isPre = makePredByNodeName('PRE');\nvar isLi = makePredByNodeName('LI');\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\nvar isTable = makePredByNodeName('TABLE');\nvar isData = makePredByNodeName('DATA');\nfunction isInline(node) {\n  return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node);\n}\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\nvar isHr = makePredByNodeName('HR');\nfunction isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\nvar isBlockquote = makePredByNodeName('BLOCKQUOTE');\nfunction isBodyContainer(node) {\n  return isCell(node) || isBlockquote(node) || isEditable(node);\n}\nvar isAnchor = makePredByNodeName('A');\nfunction isParaInline(node) {\n  return isInline(node) && !!ancestor(node, isPara);\n}\nfunction isBodyInline(node) {\n  return isInline(node) && !ancestor(node, isPara);\n}\nvar isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n  var siblings = [];\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n  siblings.push(node);\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n  return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\nvar blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n  if (node) {\n    return node.childNodes.length;\n  }\n  return 0;\n}\n\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while (node = node.firstElementChild);\n  return dom_isEmpty(node);\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction dom_isEmpty(node) {\n  var len = nodeLength(node);\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n  return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) {\n      return node;\n    }\n    if (isEditable(node)) {\n      break;\n    }\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n  while (node) {\n    if (nodeLength(node) !== 1) {\n      break;\n    }\n    if (pred(node)) {\n      return node;\n    }\n    if (isEditable(node)) {\n      break;\n    }\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n  var ancestors = [];\n  ancestor(node, function (el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n    return pred(el);\n  });\n  return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n  var ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n  var ancestors = listAncestor(nodeA);\n  for (var n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n  return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n  var descendants = [];\n  pred = pred || func.ok;\n\n  // start DFS(depth first search) with node\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n    for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n  return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n  var parent = node.parentNode;\n  var wrapper = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<' + wrapperName + '>')[0];\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n  return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n  var next = preceding.nextSibling;\n  var parent = preceding.parentNode;\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n  return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild, isSkipPaddingBlankHTML) {\n  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(aChild, function (idx, child) {\n    // special case: appending a pure UL/OL to a LI element creates inaccessible LI element\n    // e.g. press enter in last LI which has UL/OL-subelements\n    // Therefore, if current node is LI element with no child nodes (text-node) and appending a list, add a br before\n    if (!isSkipPaddingBlankHTML && isLi(node) && node.firstChild === null && isList(child)) {\n      node.appendChild(create(\"br\"));\n    }\n    node.appendChild(child);\n  });\n  return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (position(node) !== 0) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n  while (node && node !== ancestor) {\n    if (position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n  var offset = 0;\n  while (node = node.previousSibling) {\n    offset += 1;\n  }\n  return offset;\n}\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n  var node;\n  var offset;\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    node = point.node.parentNode;\n    offset = position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n  var node, offset;\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    var nextTextNode = getNextTextNode(point.node);\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/**\n * Find next boundaryPoint for preorder / depth first traversal of the DOM\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  var node,\n    offset = 0;\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    node = point.node.parentNode;\n    offset = position(point.node) + 1;\n\n    // if parent node is editable,  return current node's sibling node.\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/*\n* returns the next Text node index or 0 if not found.\n*/\nfunction getNextTextNode(actual) {\n  if (!actual.nextSibling) return undefined;\n  if (actual.parent !== actual.nextSibling.parent) return undefined;\n  if (isText(actual.nextSibling)) return actual.nextSibling;else return getNextTextNode(actual.nextSibling);\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || dom_isEmpty(point.node)) {\n    return true;\n  }\n  var leftNode = point.node.childNodes[point.offset - 1];\n  var rightNode = point.node.childNodes[point.offset];\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode)) || isTable(rightNode)) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n    point = prevPoint(point);\n  }\n  return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n    point = nextPoint(point);\n  }\n  return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && ch !== ' ' && ch !== NBSP_CHAR;\n}\n\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n\n/**\n * @method walkPoint - preorder / depth first traversal of the DOM\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  var point = startPoint;\n  while (point && point.node) {\n    handler(point);\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n    var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n  var ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n  var current = ancestor;\n  for (var i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n  return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n  var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  var isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  }\n\n  // edge case\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  }\n\n  // split #text\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    var childNode = point.node.childNodes[point.offset];\n    var childNodes = listNext(childNode);\n    var clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, childNodes);\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n    if (isDiscardEmptySplits) {\n      if (dom_isEmpty(point.node)) {\n        remove(point.node);\n      }\n      if (dom_isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n    return clone;\n  }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  var ancestors = listAncestor(point.node, func.eq(root));\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n  // Filter elements with sibling elements\n  if (ancestors.length > 2) {\n    var domList = ancestors.slice(0, ancestors.length - 1);\n    var ifHasNextSibling = domList.find(function (item) {\n      return item.nextSibling;\n    });\n    if (ifHasNextSibling && point.offset != 0 && isRightEdgePoint(point)) {\n      var nestSibling = ifHasNextSibling.nextSibling;\n      var textNode;\n      if (nestSibling.nodeType == 1) {\n        textNode = nestSibling.childNodes[0];\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0\n        };\n      } else if (nestSibling.nodeType == 3 && !nestSibling.data.match(/[\\n\\r]/g)) {\n        textNode = nestSibling;\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0\n        };\n      }\n    }\n  }\n  return ancestors.reduce(function (node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n    return splitNode({\n      node: parent,\n      offset: node ? position(node) : nodeLength(parent)\n    }, options);\n  });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  var pred = isInline ? isPara : isBodyContainer;\n  var ancestors = listAncestor(point.node, pred);\n  var topAncestor = lists.last(ancestors) || point.node;\n  var splitRoot, container;\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  }\n\n  // if splitRoot is exists, split with splitTree\n  var pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline\n  });\n\n  // if container is point.node, find pivot with point.offset\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n  return {\n    rightNode: pivot,\n    container: container\n  };\n}\nfunction create(nodeName) {\n  return document.createElement(nodeName);\n}\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) {\n    return;\n  }\n  if (node.removeNode) {\n    return node.removeNode(isRemoveChild);\n  }\n  var parent = node.parentNode;\n  if (!isRemoveChild) {\n    var nodes = [];\n    for (var i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n    for (var _i = 0, _len = nodes.length; _i < _len; _i++) {\n      parent.insertBefore(nodes[_i], node);\n    }\n  }\n  parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n    var parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n  var newNode = create(nodeName);\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n  return newNode;\n}\nvar isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n  var val = isTextarea($node[0]) ? $node.val() : $node.html();\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n  return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n  var markup = value($node);\n  if (isNewlineOnBlock) {\n    var regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function (match, endSlash, name) {\n      name = name.toUpperCase();\n      var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash;\n      var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n      return match + (isEndOfInlineContainer || isBlockNode ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n  return markup;\n}\nfunction posFromPlaceholder(placeholder) {\n  var $placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(placeholder);\n  var pos = $placeholder.offset();\n  var height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height\n  };\n}\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.on(key, events[key]);\n  });\n}\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.off(key, events[key]);\n  });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n/* harmony default export */ const dom = ({\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR: NBSP_CHAR,\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,\n  /** @property {String} blank */\n  blank: blankHTML,\n  /** @property {String} emptyPara */\n  emptyPara: \"<p>\".concat(blankHTML, \"</p>\"),\n  makePredByNodeName: makePredByNodeName,\n  isEditable: isEditable,\n  isControlSizing: isControlSizing,\n  isText: isText,\n  isElement: isElement,\n  isVoid: isVoid,\n  isPara: isPara,\n  isPurePara: isPurePara,\n  isHeading: isHeading,\n  isInline: isInline,\n  isBlock: func.not(isInline),\n  isBodyInline: isBodyInline,\n  isBody: isBody,\n  isParaInline: isParaInline,\n  isPre: isPre,\n  isList: isList,\n  isTable: isTable,\n  isData: isData,\n  isCell: isCell,\n  isBlockquote: isBlockquote,\n  isBodyContainer: isBodyContainer,\n  isAnchor: isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi: isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea: isTextarea,\n  deepestChildIsEmpty: deepestChildIsEmpty,\n  isEmpty: dom_isEmpty,\n  isEmptyAnchor: func.and(isAnchor, dom_isEmpty),\n  isClosestSibling: isClosestSibling,\n  withClosestSiblings: withClosestSiblings,\n  nodeLength: nodeLength,\n  isLeftEdgePoint: isLeftEdgePoint,\n  isRightEdgePoint: isRightEdgePoint,\n  isEdgePoint: isEdgePoint,\n  isLeftEdgeOf: isLeftEdgeOf,\n  isRightEdgeOf: isRightEdgeOf,\n  isLeftEdgePointOf: isLeftEdgePointOf,\n  isRightEdgePointOf: isRightEdgePointOf,\n  prevPoint: prevPoint,\n  nextPoint: nextPoint,\n  nextPointWithEmptyNode: nextPointWithEmptyNode,\n  isSamePoint: isSamePoint,\n  isVisiblePoint: isVisiblePoint,\n  prevPointUntil: prevPointUntil,\n  nextPointUntil: nextPointUntil,\n  isCharPoint: isCharPoint,\n  isSpacePoint: isSpacePoint,\n  walkPoint: walkPoint,\n  ancestor: ancestor,\n  singleChildAncestor: singleChildAncestor,\n  listAncestor: listAncestor,\n  lastAncestor: lastAncestor,\n  listNext: listNext,\n  listPrev: listPrev,\n  listDescendant: listDescendant,\n  commonAncestor: commonAncestor,\n  wrap: wrap,\n  insertAfter: insertAfter,\n  appendChildNodes: appendChildNodes,\n  position: position,\n  hasChildren: hasChildren,\n  makeOffsetPath: makeOffsetPath,\n  fromOffsetPath: fromOffsetPath,\n  splitTree: splitTree,\n  splitPoint: splitPoint,\n  create: create,\n  createText: createText,\n  remove: remove,\n  removeWhile: removeWhile,\n  replace: replace,\n  html: html,\n  value: value,\n  posFromPlaceholder: posFromPlaceholder,\n  attachEvents: attachEvents,\n  detachEvents: detachEvents,\n  isCustomStyleTag: isCustomStyleTag\n});\n;// CONCATENATED MODULE: ./src/js/Context.js\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Context = /*#__PURE__*/function () {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  function Context($note, options) {\n    _classCallCheck(this, Context);\n    this.$note = $note;\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, options);\n\n    // init ui with options\n    (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().summernote.ui_template(this.options);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.initialize();\n  }\n\n  /**\n   * create layout and initialize modules and other resources\n   */\n  return _createClass(Context, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.layoutInfo = this.ui.createLayout(this.$note);\n      this._initialize();\n      this.$note.hide();\n      return this;\n    }\n\n    /**\n     * destroy modules and other resources and remove layout\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._destroy();\n      this.$note.removeData('summernote');\n      this.ui.removeLayout(this.$note, this.layoutInfo);\n    }\n\n    /**\n     * destory modules and other resources and initialize it again\n     */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var disabled = this.isDisabled();\n      this.code(dom.emptyPara);\n      this._destroy();\n      this._initialize();\n      if (disabled) {\n        this.disable();\n      }\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\n      var _this = this;\n      // set own id\n      this.options.id = func.uniqueId(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now());\n      // set default container for tooltips, popovers, and dialogs\n      this.options.container = this.options.container || this.layoutInfo.editor;\n\n      // add optional buttons\n      var buttons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.buttons);\n      Object.keys(buttons).forEach(function (key) {\n        _this.memo('button.' + key, buttons[key]);\n      });\n      var modules = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.modules, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.plugins || {});\n\n      // add and initialize modules\n      Object.keys(modules).forEach(function (key) {\n        _this.module(key, modules[key], true);\n      });\n      Object.keys(this.modules).forEach(function (key) {\n        _this.initializeModule(key);\n      });\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      var _this2 = this;\n      // destroy modules with reversed order\n      Object.keys(this.modules).reverse().forEach(function (key) {\n        _this2.removeModule(key);\n      });\n      Object.keys(this.memos).forEach(function (key) {\n        _this2.removeMemo(key);\n      });\n      // trigger custom onDestroy callback\n      this.triggerEvent('destroy', this);\n    }\n  }, {\n    key: \"code\",\n    value: function code(html) {\n      var isActivated = this.invoke('codeview.isActivated');\n      if (html === undefined) {\n        this.invoke('codeview.sync');\n        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n      } else {\n        if (isActivated) {\n          this.invoke('codeview.sync', html);\n        } else {\n          this.layoutInfo.editable.html(html);\n        }\n        this.$note.val(html);\n        this.triggerEvent('change', html, this.layoutInfo.editable);\n      }\n    }\n  }, {\n    key: \"isDisabled\",\n    value: function isDisabled() {\n      return this.layoutInfo.editable.attr('contenteditable') === 'false';\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      this.layoutInfo.editable.attr('contenteditable', true);\n      this.invoke('toolbar.activate', true);\n      this.triggerEvent('disable', false);\n      this.options.editing = true;\n    }\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      // close codeview if codeview is opend\n      if (this.invoke('codeview.isActivated')) {\n        this.invoke('codeview.deactivate');\n      }\n      this.layoutInfo.editable.attr('contenteditable', false);\n      this.options.editing = false;\n      this.invoke('toolbar.deactivate', true);\n      this.triggerEvent('disable', true);\n    }\n  }, {\n    key: \"triggerEvent\",\n    value: function triggerEvent() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n      if (callback) {\n        callback.apply(this.$note[0], args);\n      }\n      this.$note.trigger('summernote.' + namespace, args);\n    }\n  }, {\n    key: \"initializeModule\",\n    value: function initializeModule(key) {\n      var module = this.modules[key];\n      module.shouldInitialize = module.shouldInitialize || func.ok;\n      if (!module.shouldInitialize()) {\n        return;\n      }\n\n      // initialize module\n      if (module.initialize) {\n        module.initialize();\n      }\n\n      // attach events\n      if (module.events) {\n        dom.attachEvents(this.$note, module.events);\n      }\n    }\n  }, {\n    key: \"module\",\n    value: function module(key, ModuleClass, withoutIntialize) {\n      if (arguments.length === 1) {\n        return this.modules[key];\n      }\n      this.modules[key] = new ModuleClass(this);\n      if (!withoutIntialize) {\n        this.initializeModule(key);\n      }\n    }\n  }, {\n    key: \"removeModule\",\n    value: function removeModule(key) {\n      var module = this.modules[key];\n      if (module.shouldInitialize()) {\n        if (module.events) {\n          dom.detachEvents(this.$note, module.events);\n        }\n        if (module.destroy) {\n          module.destroy();\n        }\n      }\n      delete this.modules[key];\n    }\n  }, {\n    key: \"memo\",\n    value: function memo(key, obj) {\n      if (arguments.length === 1) {\n        return this.memos[key];\n      }\n      this.memos[key] = obj;\n    }\n  }, {\n    key: \"removeMemo\",\n    value: function removeMemo(key) {\n      if (this.memos[key] && this.memos[key].destroy) {\n        this.memos[key].destroy();\n      }\n      delete this.memos[key];\n    }\n\n    /**\n     * Some buttons need to change their visual style immediately once they get pressed\n     */\n  }, {\n    key: \"createInvokeHandlerAndUpdateState\",\n    value: function createInvokeHandlerAndUpdateState(namespace, value) {\n      var _this3 = this;\n      return function (event) {\n        _this3.createInvokeHandler(namespace, value)(event);\n        _this3.invoke('buttons.updateCurrentStyle');\n      };\n    }\n  }, {\n    key: \"createInvokeHandler\",\n    value: function createInvokeHandler(namespace, value) {\n      var _this4 = this;\n      return function (event) {\n        event.preventDefault();\n        var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n        _this4.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n      };\n    }\n  }, {\n    key: \"invoke\",\n    value: function invoke() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var splits = namespace.split('.');\n      var hasSeparator = splits.length > 1;\n      var moduleName = hasSeparator && lists.head(splits);\n      var methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n      var module = this.modules[moduleName || 'editor'];\n      if (!moduleName && this[methodName]) {\n        return this[methodName].apply(this, args);\n      } else if (module && module[methodName] && module.shouldInitialize()) {\n        return module[methodName].apply(module, args);\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/summernote.js\nfunction summernote_typeof(o) { \"@babel/helpers - typeof\"; return summernote_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, summernote_typeof(o); }\n\n\n\n\nexternal_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function summernote() {\n    var type = summernote_typeof(lists.head(arguments));\n    var isExternalAPICalled = type === 'string';\n    var hasInitOptions = type === 'object';\n    var options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n    // Update options\n    options.langInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'], (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang[options.lang]);\n    options.icons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n    this.each(function (idx, note) {\n      var $note = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(note);\n      if (!$note.data('summernote')) {\n        var context = new Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n    var $note = this.first();\n    if ($note.length) {\n      var context = $note.data('summernote');\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n    return this;\n  }\n});\n;// CONCATENATED MODULE: ./src/js/core/range.js\nfunction range_typeof(o) { \"@babel/helpers - typeof\"; return range_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, range_typeof(o); }\nfunction range_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction range_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, range_toPropertyKey(o.key), o); } }\nfunction range_createClass(e, r, t) { return r && range_defineProperties(e.prototype, r), t && range_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction range_toPropertyKey(t) { var i = range_toPrimitive(t, \"string\"); return \"symbol\" == range_typeof(i) ? i : i + \"\"; }\nfunction range_toPrimitive(t, r) { if (\"object\" != range_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != range_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n  var container = textRange.parentElement();\n  var offset;\n  var tester = document.body.createTextRange();\n  var prevContainer;\n  var childNodes = lists.from(container.childNodes);\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n    tester.moveToElementText(childNodes[offset]);\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n    prevContainer = childNodes[offset];\n  }\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    var textRangeStart = document.body.createTextRange();\n    var curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n    var pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    var textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    // [workaround] enforce IE to re-reference curTextNode, hack\n    var dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n    container = curTextNode;\n    offset = textCount;\n  }\n  return {\n    cont: container,\n    offset: offset\n  };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n  var textRangeInfo = function textRangeInfo(container, offset) {\n    var node, isCollapseToStart;\n    if (dom.isText(container)) {\n      var prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      var prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n      offset = 0;\n      isCollapseToStart = false;\n    }\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset\n    };\n  };\n  var textRange = document.body.createTextRange();\n  var info = textRangeInfo(point.node, point.offset);\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\nvar WrappedRange = /*#__PURE__*/function () {\n  function WrappedRange(sc, so, ec, eo) {\n    range_classCallCheck(this, WrappedRange);\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo;\n\n    // isOnEditable: judge whether range is on editable or not\n    this.isOnEditable = this.makeIsOn(dom.isEditable);\n    // isOnList: judge whether range is on list node or not\n    this.isOnList = this.makeIsOn(dom.isList);\n    // isOnAnchor: judge whether range is on anchor node or not\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n    // isOnCell: judge whether range is on cell node or not\n    this.isOnCell = this.makeIsOn(dom.isCell);\n    // isOnData: judge whether range is on data node or not\n    this.isOnData = this.makeIsOn(dom.isData);\n  }\n\n  // nativeRange: get nativeRange from sc, so, ec, eo\n  return range_createClass(WrappedRange, [{\n    key: \"nativeRange\",\n    value: function nativeRange() {\n      if (env.isW3CRangeSupport) {\n        var w3cRange = document.createRange();\n        w3cRange.setStart(this.sc, this.so);\n        w3cRange.setEnd(this.ec, this.eo);\n        return w3cRange;\n      } else {\n        var textRange = pointToTextRange({\n          node: this.sc,\n          offset: this.so\n        });\n        textRange.setEndPoint('EndToEnd', pointToTextRange({\n          node: this.ec,\n          offset: this.eo\n        }));\n        return textRange;\n      }\n    }\n  }, {\n    key: \"getPoints\",\n    value: function getPoints() {\n      return {\n        sc: this.sc,\n        so: this.so,\n        ec: this.ec,\n        eo: this.eo\n      };\n    }\n  }, {\n    key: \"getStartPoint\",\n    value: function getStartPoint() {\n      return {\n        node: this.sc,\n        offset: this.so\n      };\n    }\n  }, {\n    key: \"getEndPoint\",\n    value: function getEndPoint() {\n      return {\n        node: this.ec,\n        offset: this.eo\n      };\n    }\n\n    /**\n     * select update visible range\n     */\n  }, {\n    key: \"select\",\n    value: function select() {\n      var nativeRng = this.nativeRange();\n      if (env.isW3CRangeSupport) {\n        var selection = document.getSelection();\n        if (selection.rangeCount > 0) {\n          selection.removeAllRanges();\n        }\n        selection.addRange(nativeRng);\n      } else {\n        nativeRng.select();\n      }\n      return this;\n    }\n\n    /**\n     * Moves the scrollbar to start container(sc) of current range\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"scrollIntoView\",\n    value: function scrollIntoView(container) {\n      var height = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(container).height();\n      if (container.scrollTop + height < this.sc.offsetTop) {\n        container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n      }\n      return this;\n    }\n\n    /**\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"normalize\",\n    value: function normalize() {\n      /**\n       * @param {BoundaryPoint} point\n       * @param {Boolean} isLeftToRight - true: prefer to choose right node\n       *                                - false: prefer to choose left node\n       * @return {BoundaryPoint}\n       */\n      var getVisiblePoint = function getVisiblePoint(point, isLeftToRight) {\n        if (!point) {\n          return point;\n        }\n\n        // Just use the given point [XXX:Adhoc]\n        //  - case 01. if the point is on the middle of the node\n        //  - case 02. if the point is on the right edge and prefer to choose left node\n        //  - case 03. if the point is on the left edge and prefer to choose right node\n        //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n        //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n        //  - case 06. if the point is on the block node and there is no children\n        if (dom.isVisiblePoint(point)) {\n          if (!dom.isEdgePoint(point) || dom.isRightEdgePoint(point) && !isLeftToRight || dom.isLeftEdgePoint(point) && isLeftToRight || dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling) || dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling) || dom.isBlock(point.node) && dom.isEmpty(point.node)) {\n            return point;\n          }\n        }\n\n        // point on block's edge\n        var block = dom.ancestor(point.node, dom.isBlock);\n        var hasRightNode = false;\n        if (!hasRightNode) {\n          var prevPoint = dom.prevPoint(point) || {\n            node: null\n          };\n          hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n        }\n        var hasLeftNode = false;\n        if (!hasLeftNode) {\n          var _nextPoint = dom.nextPoint(point) || {\n            node: null\n          };\n          hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(_nextPoint.node)) && isLeftToRight;\n        }\n        if (hasRightNode || hasLeftNode) {\n          // returns point already on visible point\n          if (dom.isVisiblePoint(point)) {\n            return point;\n          }\n          // reverse direction\n          isLeftToRight = !isLeftToRight;\n        }\n        var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n        return nextPoint || point;\n      };\n      var endPoint = getVisiblePoint(this.getEndPoint(), false);\n      var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns matched nodes on range\n     *\n     * @param {Function} [pred] - predicate function\n     * @param {Object} [options]\n     * @param {Boolean} [options.includeAncestor]\n     * @param {Boolean} [options.fullyContains]\n     * @return {Node[]}\n     */\n  }, {\n    key: \"nodes\",\n    value: function nodes(pred, options) {\n      pred = pred || func.ok;\n      var includeAncestor = options && options.includeAncestor;\n      var fullyContains = options && options.fullyContains;\n\n      // TODO compare points and sort\n      var startPoint = this.getStartPoint();\n      var endPoint = this.getEndPoint();\n      var nodes = [];\n      var leftEdgeNodes = [];\n      dom.walkPoint(startPoint, endPoint, function (point) {\n        if (dom.isEditable(point.node)) {\n          return;\n        }\n        var node;\n        if (fullyContains) {\n          if (dom.isLeftEdgePoint(point)) {\n            leftEdgeNodes.push(point.node);\n          }\n          if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n            node = point.node;\n          }\n        } else if (includeAncestor) {\n          node = dom.ancestor(point.node, pred);\n        } else {\n          node = point.node;\n        }\n        if (node && pred(node)) {\n          nodes.push(node);\n        }\n      }, true);\n      return lists.unique(nodes);\n    }\n\n    /**\n     * returns commonAncestor of range\n     * @return {Element} - commonAncestor\n     */\n  }, {\n    key: \"commonAncestor\",\n    value: function commonAncestor() {\n      return dom.commonAncestor(this.sc, this.ec);\n    }\n\n    /**\n     * returns expanded range by pred\n     *\n     * @param {Function} pred - predicate function\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"expand\",\n    value: function expand(pred) {\n      var startAncestor = dom.ancestor(this.sc, pred);\n      var endAncestor = dom.ancestor(this.ec, pred);\n      if (!startAncestor && !endAncestor) {\n        return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n      }\n      var boundaryPoints = this.getPoints();\n      if (startAncestor) {\n        boundaryPoints.sc = startAncestor;\n        boundaryPoints.so = 0;\n      }\n      if (endAncestor) {\n        boundaryPoints.ec = endAncestor;\n        boundaryPoints.eo = dom.nodeLength(endAncestor);\n      }\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n\n    /**\n     * @param {Boolean} isCollapseToStart\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"collapse\",\n    value: function collapse(isCollapseToStart) {\n      if (isCollapseToStart) {\n        return new WrappedRange(this.sc, this.so, this.sc, this.so);\n      } else {\n        return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n      }\n    }\n\n    /**\n     * splitText on range\n     */\n  }, {\n    key: \"splitText\",\n    value: function splitText() {\n      var isSameContainer = this.sc === this.ec;\n      var boundaryPoints = this.getPoints();\n      if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n        this.ec.splitText(this.eo);\n      }\n      if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n        boundaryPoints.sc = this.sc.splitText(this.so);\n        boundaryPoints.so = 0;\n        if (isSameContainer) {\n          boundaryPoints.ec = boundaryPoints.sc;\n          boundaryPoints.eo = this.eo - this.so;\n        }\n      }\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n\n    /**\n     * delete contents on range\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"deleteContents\",\n    value: function deleteContents() {\n      if (this.isCollapsed()) {\n        return this;\n      }\n      var rng = this.splitText();\n      var nodes = rng.nodes(null, {\n        fullyContains: true\n      });\n\n      // find new cursor point\n      var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {\n        return !lists.contains(nodes, point.node);\n      });\n      var emptyParents = [];\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(nodes, function (idx, node) {\n        // find empty parents\n        var parent = node.parentNode;\n        if (point.node !== parent && dom.nodeLength(parent) === 1) {\n          emptyParents.push(parent);\n        }\n        dom.remove(node, false);\n      });\n\n      // remove empty parents\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyParents, function (idx, node) {\n        dom.remove(node, false);\n      });\n      return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize();\n    }\n\n    /**\n     * makeIsOn: return isOn(pred) function\n     */\n  }, {\n    key: \"makeIsOn\",\n    value: function makeIsOn(pred) {\n      return function () {\n        var ancestor = dom.ancestor(this.sc, pred);\n        return !!ancestor && ancestor === dom.ancestor(this.ec, pred);\n      };\n    }\n\n    /**\n     * @param {Function} pred\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isLeftEdgeOf\",\n    value: function isLeftEdgeOf(pred) {\n      if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n        return false;\n      }\n      var node = dom.ancestor(this.sc, pred);\n      return node && dom.isLeftEdgeOf(this.sc, node);\n    }\n\n    /**\n     * returns whether range was collapsed or not\n     */\n  }, {\n    key: \"isCollapsed\",\n    value: function isCollapsed() {\n      return this.sc === this.ec && this.so === this.eo;\n    }\n\n    /**\n     * wrap inline nodes which children of body with paragraph\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"wrapBodyInlineWithPara\",\n    value: function wrapBodyInlineWithPara() {\n      if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n        this.sc.innerHTML = dom.emptyPara;\n        return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n      }\n\n      /**\n       * [workaround] firefox often create range on not visible point. so normalize here.\n       *  - firefox: |<p>text</p>|\n       *  - chrome: <p>|text|</p>\n       */\n      var rng = this.normalize();\n      if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n        return rng;\n      }\n\n      // find inline top ancestor\n      var topAncestor;\n      if (dom.isInline(rng.sc)) {\n        var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n        topAncestor = lists.last(ancestors);\n        if (!dom.isInline(topAncestor)) {\n          topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n        }\n      } else {\n        topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n      }\n      if (topAncestor) {\n        // siblings not in paragraph\n        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n        // wrap with paragraph\n        if (inlineSiblings.length) {\n          var para = dom.wrap(lists.head(inlineSiblings), 'p');\n          dom.appendChildNodes(para, lists.tail(inlineSiblings));\n        }\n      }\n      return this.normalize();\n    }\n\n    /**\n     * insert node at current cursor\n     *\n     * @param {Node} node\n     * @param {Boolean} doNotInsertPara - default is false, removes added <p> that's added if true\n     * @return {Node}\n     */\n  }, {\n    key: \"insertNode\",\n    value: function insertNode(node) {\n      var doNotInsertPara = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var rng = this;\n      if (dom.isText(node) || dom.isInline(node)) {\n        rng = this.wrapBodyInlineWithPara().deleteContents();\n      }\n      var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n      if (info.rightNode) {\n        info.rightNode.parentNode.insertBefore(node, info.rightNode);\n        if (dom.isEmpty(info.rightNode) && (doNotInsertPara || dom.isPara(node))) {\n          info.rightNode.parentNode.removeChild(info.rightNode);\n        }\n      } else {\n        info.container.appendChild(node);\n      }\n      return node;\n    }\n\n    /**\n     * insert html at current cursor\n     */\n  }, {\n    key: \"pasteHTML\",\n    value: function pasteHTML(markup) {\n      markup = ((markup || '') + '').trim(markup);\n      var contentsContainer = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').html(markup)[0];\n      var childNodes = lists.from(contentsContainer.childNodes);\n\n      // const rng = this.wrapBodyInlineWithPara().deleteContents();\n      var rng = this;\n      var reversed = false;\n      if (rng.so >= 0) {\n        childNodes = childNodes.reverse();\n        reversed = true;\n      }\n      childNodes = childNodes.map(function (childNode) {\n        return rng.insertNode(childNode, !dom.isInline(childNode));\n      });\n      if (reversed) {\n        childNodes = childNodes.reverse();\n      }\n      return childNodes;\n    }\n\n    /**\n     * returns text in range\n     *\n     * @return {String}\n     */\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var nativeRng = this.nativeRange();\n      return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n    }\n\n    /**\n     * returns range for word before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getWordRange\",\n    value: function getWordRange(findAfter) {\n      var endPoint = this.getEndPoint();\n      if (!dom.isCharPoint(endPoint)) {\n        return this;\n      }\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        return !dom.isCharPoint(point);\n      });\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, function (point) {\n          return !dom.isCharPoint(point);\n        });\n      }\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns range for words before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getWordsRange\",\n    value: function getWordsRange(findAfter) {\n      var endPoint = this.getEndPoint();\n      var isNotTextPoint = function isNotTextPoint(point) {\n        return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n      };\n      if (isNotTextPoint(endPoint)) {\n        return this;\n      }\n      var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n      }\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns range for words before cursor that match with a Regex\n     *\n     * example:\n     *  range: 'hi @Peter Pan'\n     *  regex: '/@[a-z ]+/i'\n     *  return range: '@Peter Pan'\n     *\n     * @param {RegExp} [regex]\n     * @return {WrappedRange|null}\n     */\n  }, {\n    key: \"getWordsMatchRange\",\n    value: function getWordsMatchRange(regex) {\n      var endPoint = this.getEndPoint();\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n          return true;\n        }\n        var rng = new WrappedRange(point.node, point.offset, endPoint.node, endPoint.offset);\n        var result = regex.exec(rng.toString());\n        return result && result.index === 0;\n      });\n      var rng = new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n      var text = rng.toString();\n      var result = regex.exec(text);\n      if (result && result[0].length === text.length) {\n        return rng;\n      } else {\n        return null;\n      }\n    }\n\n    /**\n     * create offsetPath bookmark\n     *\n     * @param {Node} editable\n     */\n  }, {\n    key: \"bookmark\",\n    value: function bookmark(editable) {\n      return {\n        s: {\n          path: dom.makeOffsetPath(editable, this.sc),\n          offset: this.so\n        },\n        e: {\n          path: dom.makeOffsetPath(editable, this.ec),\n          offset: this.eo\n        }\n      };\n    }\n\n    /**\n     * create offsetPath bookmark base on paragraph\n     *\n     * @param {Node[]} paras\n     */\n  }, {\n    key: \"paraBookmark\",\n    value: function paraBookmark(paras) {\n      return {\n        s: {\n          path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n          offset: this.so\n        },\n        e: {\n          path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n          offset: this.eo\n        }\n      };\n    }\n\n    /**\n     * getClientRects\n     * @return {Rect[]}\n     */\n  }, {\n    key: \"getClientRects\",\n    value: function getClientRects() {\n      var nativeRng = this.nativeRange();\n      return nativeRng.getClientRects();\n    }\n  }]);\n}();\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\n/* harmony default export */ const range = ({\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function create(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) {\n      // collapsed\n      ec = sc;\n      eo = so;\n      return new WrappedRange(sc, so, ec, eo);\n    } else {\n      var wrappedRange = this.createFromSelection();\n      if (!wrappedRange && arguments.length === 1) {\n        var bodyElement = arguments[0];\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n      return wrappedRange;\n    }\n  },\n  createFromBodyElement: function createFromBodyElement(bodyElement) {\n    var isCollapseToStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n  createFromSelection: function createFromSelection() {\n    var sc, so, ec, eo;\n    if (env.isW3CRangeSupport) {\n      var selection = document.getSelection();\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n      var nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else {\n      // IE8: TextRange\n      var textRange = document.selection.createRange();\n      var textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      var textRangeStart = textRange;\n      textRangeStart.collapse(true);\n      var startPoint = textRangeToPoint(textRangeStart, true);\n      var endPoint = textRangeToPoint(textRangeEnd, false);\n\n      // same visible point case: range was collapsed.\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n    return new WrappedRange(sc, so, ec, eo);\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function createFromNode(node) {\n    var sc = node;\n    var so = 0;\n    var ec = node;\n    var eo = dom.nodeLength(ec);\n\n    // browsers can't target a picture or void node\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n    return this.create(sc, so, ec, eo);\n  },\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function createFromNodeBefore(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function createFromNodeAfter(node) {\n    return this.createFromNode(node).collapse();\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function createFromBookmark(editable, bookmark) {\n    var sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    var so = bookmark.s.offset;\n    var ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    var eo = bookmark.e.offset;\n    return new WrappedRange(sc, so, ec, eo);\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function createFromParaBookmark(bookmark, paras) {\n    var so = bookmark.s.offset;\n    var eo = bookmark.e.offset;\n    var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n    return new WrappedRange(sc, so, ec, eo);\n  }\n});\n;// CONCATENATED MODULE: ./src/js/core/key.js\n\n\nvar KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\n/* harmony default export */ const key = ({\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: function isEdit(keyCode) {\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE], keyCode);\n  },\n  /**\n   * @method isRemove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isRemove: function isRemove(keyCode) {\n    // LB\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.DELETE], keyCode);\n  },\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: function isMove(keyCode) {\n    return lists.contains([KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN], keyCode);\n  },\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: function isNavigation(keyCode) {\n    return lists.contains([KEY_MAP.HOME, KEY_MAP.END, KEY_MAP.PAGEUP, KEY_MAP.PAGEDOWN], keyCode);\n  },\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP\n});\n;// CONCATENATED MODULE: ./src/js/core/async.js\n\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nfunction readFileAsDataURL(file) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(new FileReader(), {\n      onload: function onload(event) {\n        var dataURL = event.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: function onerror(err) {\n        deferred.reject(err);\n      }\n    }).readAsDataURL(file);\n  }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nfunction createImage(url) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n    var $img = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<img>');\n    $img.one('load', function () {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', function () {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none'\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n;// CONCATENATED MODULE: ./src/js/editing/History.js\nfunction History_typeof(o) { \"@babel/helpers - typeof\"; return History_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, History_typeof(o); }\nfunction History_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction History_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, History_toPropertyKey(o.key), o); } }\nfunction History_createClass(e, r, t) { return r && History_defineProperties(e.prototype, r), t && History_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction History_toPropertyKey(t) { var i = History_toPrimitive(t, \"string\"); return \"symbol\" == History_typeof(i) ? i : i + \"\"; }\nfunction History_toPrimitive(t, r) { if (\"object\" != History_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != History_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar History = /*#__PURE__*/function () {\n  function History(context) {\n    History_classCallCheck(this, History);\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n  return History_createClass(History, [{\n    key: \"makeSnapshot\",\n    value: function makeSnapshot() {\n      var rng = range.create(this.editable);\n      var emptyBookmark = {\n        s: {\n          path: [],\n          offset: 0\n        },\n        e: {\n          path: [],\n          offset: 0\n        }\n      };\n      return {\n        contents: this.$editable.html(),\n        bookmark: rng && rng.isOnEditable() ? rng.bookmark(this.editable) : emptyBookmark\n      };\n    }\n  }, {\n    key: \"applySnapshot\",\n    value: function applySnapshot(snapshot) {\n      if (snapshot.contents !== null) {\n        this.$editable.html(snapshot.contents);\n      }\n      if (snapshot.bookmark !== null) {\n        range.createFromBookmark(this.editable, snapshot.bookmark).select();\n      }\n    }\n\n    /**\n    * @method rewind\n    * Rewinds the history stack back to the first snapshot taken.\n    * Leaves the stack intact, so that \"Redo\" can still be used.\n    */\n  }, {\n    key: \"rewind\",\n    value: function rewind() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      // Return to the first available snapshot.\n      this.stackOffset = 0;\n\n      // Apply that snapshot.\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n\n    /**\n    *  @method commit\n    *  Resets history stack, but keeps current editor's content.\n    */\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      // Clear the stack.\n      this.stack = [];\n\n      // Restore stackOffset to its original value.\n      this.stackOffset = -1;\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    }\n\n    /**\n    * @method reset\n    * Resets the history stack completely; reverting to an empty editor.\n    */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      // Clear the stack.\n      this.stack = [];\n\n      // Restore stackOffset to its original value.\n      this.stackOffset = -1;\n\n      // Clear the editable area.\n      this.$editable.html('');\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    }\n\n    /**\n     * undo\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n      if (this.stackOffset > 0) {\n        this.stackOffset--;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n\n    /**\n     * redo\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.stack.length - 1 > this.stackOffset) {\n        this.stackOffset++;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n\n    /**\n     * recorded undo\n     */\n  }, {\n    key: \"recordUndo\",\n    value: function recordUndo() {\n      this.stackOffset++;\n\n      // Wash out stack after stackOffset\n      if (this.stack.length > this.stackOffset) {\n        this.stack = this.stack.slice(0, this.stackOffset);\n      }\n\n      // Create new snapshot and push it to the end\n      this.stack.push(this.makeSnapshot());\n\n      // If the stack size reachs to the limit, then slice it\n      if (this.stack.length > this.context.options.historyLimit) {\n        this.stack.shift();\n        this.stackOffset -= 1;\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Style.js\nfunction Style_typeof(o) { \"@babel/helpers - typeof\"; return Style_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Style_typeof(o); }\nfunction Style_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Style_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Style_toPropertyKey(o.key), o); } }\nfunction Style_createClass(e, r, t) { return r && Style_defineProperties(e.prototype, r), t && Style_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Style_toPropertyKey(t) { var i = Style_toPrimitive(t, \"string\"); return \"symbol\" == Style_typeof(i) ? i : i + \"\"; }\nfunction Style_toPrimitive(t, r) { if (\"object\" != Style_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Style_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Style = /*#__PURE__*/function () {\n  function Style() {\n    Style_classCallCheck(this, Style);\n  }\n  return Style_createClass(Style, [{\n    key: \"jQueryCSS\",\n    value:\n    /**\n     * @method jQueryCSS\n     *\n     * [workaround] for old jQuery\n     * passing an array of style properties to .css()\n     * will result in an object of property-value pairs.\n     * (compability with version < 1.9)\n     *\n     * @private\n     * @param  {jQuery} $obj\n     * @param  {Array} propertyNames - An array of one or more CSS properties.\n     * @return {Object}\n     */\n    function jQueryCSS($obj, propertyNames) {\n      var result = {};\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(propertyNames, function (idx, propertyName) {\n        result[propertyName] = $obj.css(propertyName);\n      });\n      return result;\n    }\n\n    /**\n     * returns style object from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n  }, {\n    key: \"fromNode\",\n    value: function fromNode($node) {\n      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n      var styleInfo = this.jQueryCSS($node, properties) || {};\n      var fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n      styleInfo['font-size'] = parseInt(fontSize, 10);\n      styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n      return styleInfo;\n    }\n\n    /**\n     * paragraph level style\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} styleInfo\n     */\n  }, {\n    key: \"stylePara\",\n    value: function stylePara(rng, styleInfo) {\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rng.nodes(dom.isPara, {\n        includeAncestor: true\n      }), function (idx, para) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css(styleInfo);\n      });\n    }\n\n    /**\n     * insert and returns styleNodes on range.\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} [options] - options for styleNodes\n     * @param {String} [options.nodeName] - default: `SPAN`\n     * @param {Boolean} [options.expandClosestSibling] - default: `false`\n     * @param {Boolean} [options.onlyPartialContains] - default: `false`\n     * @return {Node[]}\n     */\n  }, {\n    key: \"styleNodes\",\n    value: function styleNodes(rng, options) {\n      rng = rng.splitText();\n      var nodeName = options && options.nodeName || 'SPAN';\n      var expandClosestSibling = !!(options && options.expandClosestSibling);\n      var onlyPartialContains = !!(options && options.onlyPartialContains);\n      if (rng.isCollapsed()) {\n        return [rng.insertNode(dom.create(nodeName))];\n      }\n      var pred = dom.makePredByNodeName(nodeName);\n      var nodes = rng.nodes(dom.isText, {\n        fullyContains: true\n      }).map(function (text) {\n        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n      });\n      if (expandClosestSibling) {\n        if (onlyPartialContains) {\n          var nodesInRange = rng.nodes();\n          // compose with partial contains predication\n          pred = func.and(pred, function (node) {\n            return lists.contains(nodesInRange, node);\n          });\n        }\n        return nodes.map(function (node) {\n          var siblings = dom.withClosestSiblings(node, pred);\n          var head = lists.head(siblings);\n          var tails = lists.tail(siblings);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(tails, function (idx, elem) {\n            dom.appendChildNodes(head, elem.childNodes);\n            dom.remove(elem);\n          });\n          return lists.head(siblings);\n        });\n      } else {\n        return nodes;\n      }\n    }\n\n    /**\n     * get current style on cursor\n     *\n     * @param {WrappedRange} rng\n     * @return {Object} - object contains style properties.\n     */\n  }, {\n    key: \"current\",\n    value: function current(rng) {\n      var $cont = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n      var styleInfo = this.fromNode($cont);\n\n      // document.queryCommandState for toggle state\n      // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n      try {\n        styleInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(styleInfo, {\n          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n          'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n        });\n      } catch (e) {\n        // eslint-disable-next-line\n      }\n\n      // list-style-type to list-style(unordered, ordered)\n      if (!rng.isOnList()) {\n        styleInfo['list-style'] = 'none';\n      } else {\n        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n        var isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n      }\n      var para = dom.ancestor(rng.sc, dom.isPara);\n      if (para && para.style['line-height']) {\n        styleInfo['line-height'] = para.style.lineHeight;\n      } else {\n        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n        styleInfo['line-height'] = lineHeight.toFixed(1);\n      }\n      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n      styleInfo.range = rng;\n      return styleInfo;\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Bullet.js\nfunction Bullet_typeof(o) { \"@babel/helpers - typeof\"; return Bullet_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Bullet_typeof(o); }\nfunction Bullet_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Bullet_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Bullet_toPropertyKey(o.key), o); } }\nfunction Bullet_createClass(e, r, t) { return r && Bullet_defineProperties(e.prototype, r), t && Bullet_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Bullet_toPropertyKey(t) { var i = Bullet_toPrimitive(t, \"string\"); return \"symbol\" == Bullet_typeof(i) ? i : i + \"\"; }\nfunction Bullet_toPrimitive(t, r) { if (\"object\" != Bullet_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Bullet_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\nvar Bullet = /*#__PURE__*/function () {\n  function Bullet() {\n    Bullet_classCallCheck(this, Bullet);\n  }\n  return Bullet_createClass(Bullet, [{\n    key: \"insertOrderedList\",\n    value:\n    /**\n     * toggle ordered list\n     */\n    function insertOrderedList(editable) {\n      this.toggleList('OL', editable);\n    }\n\n    /**\n     * toggle unordered list\n     */\n  }, {\n    key: \"insertUnorderedList\",\n    value: function insertUnorderedList(editable) {\n      this.toggleList('UL', editable);\n    }\n\n    /**\n     * indent\n     */\n  }, {\n    key: \"indent\",\n    value: function indent(editable) {\n      var _this = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        if (dom.isLi(head)) {\n          var previousList = _this.findList(head.previousSibling);\n          if (previousList) {\n            paras.map(function (para) {\n              return previousList.appendChild(para);\n            });\n          } else {\n            _this.wrapList(paras, head.parentNode.nodeName);\n            paras.map(function (para) {\n              return para.parentNode;\n            }).map(function (para) {\n              return _this.appendToPrevious(para);\n            });\n          }\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              return (parseInt(val, 10) || 0) + 25;\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n\n    /**\n     * outdent\n     */\n  }, {\n    key: \"outdent\",\n    value: function outdent(editable) {\n      var _this2 = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        if (dom.isLi(head)) {\n          _this2.releaseList([paras]);\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              val = parseInt(val, 10) || 0;\n              return val > 25 ? val - 25 : '';\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n\n    /**\n     * toggle list\n     *\n     * @param {String} listName - OL or UL\n     */\n  }, {\n    key: \"toggleList\",\n    value: function toggleList(listName, editable) {\n      var _this3 = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var bookmark = rng.paraBookmark(paras);\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n      // paragraph to list\n      if (lists.find(paras, dom.isPurePara)) {\n        var wrappedParas = [];\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n          wrappedParas = wrappedParas.concat(_this3.wrapList(paras, listName));\n        });\n        paras = wrappedParas;\n        // list to paragraph or change list style\n      } else {\n        var diffLists = rng.nodes(dom.isList, {\n          includeAncestor: true\n        }).filter(function (listNode) {\n          return !external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().nodeName(listNode, listName);\n        });\n        if (diffLists.length) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(diffLists, function (idx, listNode) {\n            dom.replace(listNode, listName);\n          });\n        } else {\n          paras = this.releaseList(clustereds, true);\n        }\n      }\n      range.createFromParaBookmark(bookmark, paras).select();\n    }\n\n    /**\n     * @param {Node[]} paras\n     * @param {String} listName\n     * @return {Node[]}\n     */\n  }, {\n    key: \"wrapList\",\n    value: function wrapList(paras, listName) {\n      var head = lists.head(paras);\n      var last = lists.last(paras);\n      var prevList = dom.isList(head.previousSibling) && head.previousSibling;\n      var nextList = dom.isList(last.nextSibling) && last.nextSibling;\n      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n      // P to LI\n      paras = paras.map(function (para) {\n        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n      });\n\n      // append to list(<ul>, <ol>)\n      dom.appendChildNodes(listNode, paras, true);\n      if (nextList) {\n        dom.appendChildNodes(listNode, lists.from(nextList.childNodes), true);\n        dom.remove(nextList);\n      }\n      return paras;\n    }\n\n    /**\n     * @method releaseList\n     *\n     * @param {Array[]} clustereds\n     * @param {Boolean} isEscapseToBody\n     * @return {Node[]}\n     */\n  }, {\n    key: \"releaseList\",\n    value: function releaseList(clustereds, isEscapseToBody) {\n      var _this4 = this;\n      var releasedParas = [];\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        var last = lists.last(paras);\n        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n        var parentItem = headList.parentNode;\n        if (headList.parentNode.nodeName === 'LI') {\n          paras.map(function (para) {\n            var newList = _this4.findNextSiblings(para);\n            if (parentItem.nextSibling) {\n              parentItem.parentNode.insertBefore(para, parentItem.nextSibling);\n            } else {\n              parentItem.parentNode.appendChild(para);\n            }\n            if (newList.length) {\n              _this4.wrapList(newList, headList.nodeName);\n              para.appendChild(newList[0].parentNode);\n            }\n          });\n          if (headList.children.length === 0) {\n            parentItem.removeChild(headList);\n          }\n          if (parentItem.childNodes.length === 0) {\n            parentItem.parentNode.removeChild(parentItem);\n          }\n        } else {\n          var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n            node: last.parentNode,\n            offset: dom.position(last) + 1\n          }, {\n            isSkipPaddingBlankHTML: true\n          }) : null;\n          var middleList = dom.splitTree(headList, {\n            node: head.parentNode,\n            offset: dom.position(head)\n          }, {\n            isSkipPaddingBlankHTML: true\n          });\n          paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi);\n\n          // LI to P\n          if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n            paras = paras.map(function (para) {\n              return dom.replace(para, 'P');\n            });\n          }\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(lists.from(paras).reverse(), function (idx, para) {\n            dom.insertAfter(para, headList);\n          });\n\n          // remove empty lists\n          var rootLists = lists.compact([headList, middleList, lastList]);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rootLists, function (idx, rootList) {\n            var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(listNodes.reverse(), function (idx, listNode) {\n              if (!dom.nodeLength(listNode)) {\n                dom.remove(listNode, true);\n              }\n            });\n          });\n        }\n        releasedParas = releasedParas.concat(paras);\n      });\n      return releasedParas;\n    }\n\n    /**\n     * @method appendToPrevious\n     *\n     * Appends list to previous list item, if\n     * none exist it wraps the list in a new list item.\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n  }, {\n    key: \"appendToPrevious\",\n    value: function appendToPrevious(node) {\n      return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');\n    }\n\n    /**\n     * @method findList\n     *\n     * Finds an existing list in list item\n     *\n     * @param {HTMLNode} ListItem\n     * @return {Array[]}\n     */\n  }, {\n    key: \"findList\",\n    value: function findList(node) {\n      return node ? lists.find(node.children, function (child) {\n        return ['OL', 'UL'].indexOf(child.nodeName) > -1;\n      }) : null;\n    }\n\n    /**\n     * @method findNextSiblings\n     *\n     * Finds all list item siblings that follow it\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n  }, {\n    key: \"findNextSiblings\",\n    value: function findNextSiblings(node) {\n      var siblings = [];\n      while (node.nextSibling) {\n        siblings.push(node.nextSibling);\n        node = node.nextSibling;\n      }\n      return siblings;\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Typing.js\nfunction Typing_typeof(o) { \"@babel/helpers - typeof\"; return Typing_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Typing_typeof(o); }\nfunction Typing_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Typing_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Typing_toPropertyKey(o.key), o); } }\nfunction Typing_createClass(e, r, t) { return r && Typing_defineProperties(e.prototype, r), t && Typing_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Typing_toPropertyKey(t) { var i = Typing_toPrimitive(t, \"string\"); return \"symbol\" == Typing_typeof(i) ? i : i + \"\"; }\nfunction Typing_toPrimitive(t, r) { if (\"object\" != Typing_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Typing_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nvar Typing = /*#__PURE__*/function () {\n  function Typing(context) {\n    Typing_classCallCheck(this, Typing);\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet();\n    this.options = context.options;\n  }\n\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n  return Typing_createClass(Typing, [{\n    key: \"insertTab\",\n    value: function insertTab(rng, tabsize) {\n      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n      rng = rng.deleteContents();\n      rng.insertNode(tab, true);\n      rng = range.create(tab, tabsize);\n      rng.select();\n    }\n\n    /**\n     * insert paragraph\n     *\n     * @param {jQuery} $editable\n     * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n     *\n     * blockquoteBreakingLevel\n     *   0 - No break, the new paragraph remains inside the quote\n     *   1 - Break the first blockquote in the ancestors list\n     *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n     */\n  }, {\n    key: \"insertParagraph\",\n    value: function insertParagraph(editable, rng) {\n      rng = rng || range.create(editable);\n\n      // deleteContents on range.\n      rng = rng.deleteContents();\n\n      // Wrap range if it needs to be wrapped by paragraph\n      rng = rng.wrapBodyInlineWithPara();\n\n      // finding paragraph\n      var splitRoot = dom.ancestor(rng.sc, dom.isPara);\n      var nextPara;\n      // on paragraph: split paragraph\n      if (splitRoot) {\n        // if it is an empty line with li\n        if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n          // toggle UL/OL and escape\n          this.bullet.toggleList(splitRoot.parentNode.nodeName);\n          return;\n        } else {\n          var blockquote = null;\n          if (this.options.blockquoteBreakingLevel === 1) {\n            blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n          } else if (this.options.blockquoteBreakingLevel === 2) {\n            blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n          }\n          if (blockquote) {\n            // We're inside a blockquote and options ask us to break it\n            nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];\n            // If the split is right before a <br>, remove it so that there's no \"empty line\"\n            // after the split in the new blockquote created\n            if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(rng.sc.nextSibling).remove();\n            }\n            var split = dom.splitTree(blockquote, rng.getStartPoint(), {\n              isDiscardEmptySplits: true\n            });\n            if (split) {\n              split.parentNode.insertBefore(nextPara, split);\n            } else {\n              dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n            }\n          } else {\n            nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n            // not a blockquote, just insert the paragraph\n            var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n            emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyAnchors, function (idx, anchor) {\n              dom.remove(anchor);\n            });\n\n            // replace empty heading, pre or custom-made styleTag with P tag\n            if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n              nextPara = dom.replace(nextPara, 'p');\n            }\n          }\n        }\n        // no paragraph: insert empty paragraph\n      } else {\n        var next = rng.sc.childNodes[rng.so];\n        nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];\n        if (next) {\n          rng.sc.insertBefore(nextPara, next);\n        } else {\n          rng.sc.appendChild(nextPara);\n        }\n      }\n      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Table.js\nfunction Table_typeof(o) { \"@babel/helpers - typeof\"; return Table_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Table_typeof(o); }\nfunction Table_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Table_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Table_toPropertyKey(o.key), o); } }\nfunction Table_createClass(e, r, t) { return r && Table_defineProperties(e.prototype, r), t && Table_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Table_toPropertyKey(t) { var i = Table_toPrimitive(t, \"string\"); return \"symbol\" == Table_typeof(i) ? i : i + \"\"; }\nfunction Table_toPrimitive(t, r) { if (\"object\" != Table_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Table_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nvar TableResultAction = function TableResultAction(startPoint, where, action, domTable) {\n  var _startPoint = {\n    'colPos': 0,\n    'rowPos': 0\n  };\n  var _virtualTable = [];\n  var _actionCellList = [];\n\n  /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th') {\n      // Impossible to identify start Cell point\n      return;\n    }\n    _startPoint.colPos = startPoint.cellIndex;\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    var objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell\n    };\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition\n      }\n    };\n  }\n\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n    var newCellIndex = cellIndex;\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n  function addCellInfoToVirtual(row, cell) {\n    var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    var cellHasColspan = cell.colSpan > 1;\n    var cellHasRowspan = cell.rowSpan > 1;\n    var isThisSelectedCell = row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos;\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n    // Add span rows to virtual Table.\n    var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n    if (rowspanNumber > 1) {\n      for (var rp = 1; rp < rowspanNumber; rp++) {\n        var rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    }\n\n    // Add span cols to virtual table.\n    var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n    if (colspanNumber > 1) {\n      for (var cp = 1; cp < colspanNumber; cp++) {\n        var cellspanIndex = recoverCellIndex(row.rowIndex, cellIndex + cp);\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n  function createVirtualTable() {\n    var rows = domTable.rows;\n    for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      var cells = rows[rowIndex].cells;\n      for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.RemoveCell;\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.AddCell;\n  }\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  }\n\n  /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n  this.getActionList = function () {\n    var fixedRow = where === TableResultAction.where.Row ? _startPoint.rowPos : -1;\n    var fixedCol = where === TableResultAction.where.Column ? _startPoint.colPos : -1;\n    var actualPosition = 0;\n    var canContinue = true;\n    while (canContinue) {\n      var rowPosition = fixedRow >= 0 ? fixedRow : actualPosition;\n      var colPosition = fixedCol >= 0 ? fixedCol : actualPosition;\n      var row = _virtualTable[rowPosition];\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n      var cell = row[colPosition];\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      // Define action to be applied in this cell\n      var resultAction = TableResultAction.resultAction.Ignore;\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n      actualPosition++;\n    }\n    return _actionCellList;\n  };\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = {\n  'Row': 0,\n  'Column': 1\n};\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = {\n  'Add': 0,\n  'Delete': 1\n};\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = {\n  'Ignore': 0,\n  'SubtractSpanCount': 1,\n  'RemoveCell': 2,\n  'AddCell': 3,\n  'SumSpanCount': 4\n};\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nvar Table = /*#__PURE__*/function () {\n  function Table() {\n    Table_classCallCheck(this, Table);\n  }\n  return Table_createClass(Table, [{\n    key: \"tab\",\n    value:\n    /**\n     * handle tab key\n     *\n     * @param {WrappedRange} rng\n     * @param {Boolean} isShift\n     */\n    function tab(rng, isShift) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var table = dom.ancestor(cell, dom.isTable);\n      var cells = dom.listDescendant(table, dom.isCell);\n      var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n      if (nextCell) {\n        range.create(nextCell, 0).select();\n      }\n    }\n\n    /**\n     * Add a new row\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (top/bottom)\n     * @return {Node}\n     */\n  }, {\n    key: \"addRow\",\n    value: function addRow(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var currentTr = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var trAttributes = this.recoverAttributes(currentTr);\n      var html = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<tr' + trAttributes + '></tr>');\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var idCell = 0; idCell < actions.length; idCell++) {\n        var currentCell = actions[idCell];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            break;\n          case TableResultAction.resultAction.SumSpanCount:\n            {\n              if (position === 'top') {\n                var baseCellTr = currentCell.baseCell.parent;\n                var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n                if (isTopFromRowSpan) {\n                  var newTd = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                  html.append(newTd);\n                  break;\n                }\n              }\n              var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n              rowspanNumber++;\n              currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n            }\n            break;\n        }\n      }\n      if (position === 'top') {\n        currentTr.before(html);\n      } else {\n        var cellHasRowspan = cell.rowSpan > 1;\n        if (cellHasRowspan) {\n          var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).parent().find('tr')[lastTrIndex]).after(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(html));\n          return;\n        }\n        currentTr.after(html);\n      }\n    }\n\n    /**\n     * Add a new col\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (left/right)\n     * @return {Node}\n     */\n  }, {\n    key: \"addCol\",\n    value: function addCol(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var rowsGroup = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).siblings();\n      rowsGroup.push(row);\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        var currentCell = actions[actionIndex];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            if (position === 'right') {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n            break;\n          case TableResultAction.resultAction.SumSpanCount:\n            if (position === 'right') {\n              var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n              colspanNumber++;\n              currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n            break;\n        }\n      }\n    }\n\n    /*\n    * Copy attributes from element.\n    *\n    * @param {object} Element to recover attributes.\n    * @return {string} Copied string elements.\n    */\n  }, {\n    key: \"recoverAttributes\",\n    value: function recoverAttributes(el) {\n      var resultStr = '';\n      if (!el) {\n        return resultStr;\n      }\n      var attrList = el.attributes || [];\n      for (var i = 0; i < attrList.length; i++) {\n        if (attrList[i].name.toLowerCase() === 'id') {\n          continue;\n        }\n        if (attrList[i].specified) {\n          resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n        }\n      }\n      return resultStr;\n    }\n\n    /**\n     * Delete current row\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));\n      var rowPos = row[0].rowIndex;\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n        var baseCell = actions[actionIndex].baseCell;\n        var virtualPosition = actions[actionIndex].virtualTable;\n        var hasRowspan = baseCell.rowSpan && baseCell.rowSpan > 1;\n        var rowspanNumber = hasRowspan ? parseInt(baseCell.rowSpan, 10) : 0;\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n          case TableResultAction.resultAction.AddCell:\n            {\n              var nextRow = row.next('tr')[0];\n              if (!nextRow) {\n                continue;\n              }\n              var cloneRow = row[0].cells[cellPos];\n              if (hasRowspan) {\n                if (rowspanNumber > 2) {\n                  rowspanNumber--;\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                  nextRow.cells[cellPos].innerHTML = '';\n                } else if (rowspanNumber === 2) {\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].removeAttribute('rowSpan');\n                  nextRow.cells[cellPos].innerHTML = '';\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.SubtractSpanCount:\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                baseCell.setAttribute('rowSpan', rowspanNumber);\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              } else if (rowspanNumber === 2) {\n                baseCell.removeAttribute('rowSpan');\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.RemoveCell:\n            // Do not need remove cell because row will be deleted.\n            continue;\n        }\n      }\n      row.remove();\n    }\n\n    /**\n     * Delete current col\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n          case TableResultAction.resultAction.SubtractSpanCount:\n            {\n              var baseCell = actions[actionIndex].baseCell;\n              var hasColspan = baseCell.colSpan && baseCell.colSpan > 1;\n              if (hasColspan) {\n                var colspanNumber = baseCell.colSpan ? parseInt(baseCell.colSpan, 10) : 0;\n                if (colspanNumber > 2) {\n                  colspanNumber--;\n                  baseCell.setAttribute('colSpan', colspanNumber);\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                } else if (colspanNumber === 2) {\n                  baseCell.removeAttribute('colSpan');\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.RemoveCell:\n            dom.remove(actions[actionIndex].baseCell, true);\n            continue;\n        }\n      }\n    }\n\n    /**\n     * create empty table element\n     *\n     * @param {Number} rowCount\n     * @param {Number} colCount\n     * @return {Node}\n     */\n  }, {\n    key: \"createTable\",\n    value: function createTable(colCount, rowCount, options) {\n      var tds = [];\n      var tdHTML;\n      for (var idxCol = 0; idxCol < colCount; idxCol++) {\n        tds.push('<td>' + dom.blank + '</td>');\n      }\n      tdHTML = tds.join('');\n      var trs = [];\n      var trHTML;\n      for (var idxRow = 0; idxRow < rowCount; idxRow++) {\n        trs.push('<tr>' + tdHTML + '</tr>');\n      }\n      trHTML = trs.join('');\n      var $table = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<table>' + trHTML + '</table>');\n      if (options && options.tableClassName) {\n        $table.addClass(options.tableClassName);\n      }\n      return $table[0];\n    }\n\n    /**\n     * Delete current table\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('table').remove();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Editor.js\nfunction Editor_typeof(o) { \"@babel/helpers - typeof\"; return Editor_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Editor_typeof(o); }\nfunction Editor_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Editor_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Editor_toPropertyKey(o.key), o); } }\nfunction Editor_createClass(e, r, t) { return r && Editor_defineProperties(e.prototype, r), t && Editor_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Editor_toPropertyKey(t) { var i = Editor_toPrimitive(t, \"string\"); return \"symbol\" == Editor_typeof(i) ? i : i + \"\"; }\nfunction Editor_toPrimitive(t, r) { if (\"object\" != Editor_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Editor_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KEY_BOGUS = 'bogus';\nvar MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nvar TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nvar URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\n\n/**\n * @class Editor\n */\nvar Editor = /*#__PURE__*/function () {\n  function Editor(context) {\n    var _this = this;\n    Editor_classCallCheck(this, Editor);\n    this.context = context;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n    this.style = new Style();\n    this.table = new Table();\n    this.typing = new Typing(context);\n    this.bullet = new Bullet();\n    this.history = new History(context);\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName);\n\n    // native commands(with execCommand), generate function for execCommand\n    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor'];\n    for (var idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = function (sCmd) {\n        return function (value) {\n          _this.beforeCommand();\n          document.execCommand(sCmd, false, value);\n          _this.afterCommand(true);\n        };\n      }(commands[idx]);\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n    this.fontName = this.wrapCommand(function (value) {\n      return _this.fontStyling('font-family', env.validFontName(value));\n    });\n    this.fontSize = this.wrapCommand(function (value) {\n      var unit = _this.currentStyle()['font-size-unit'];\n      return _this.fontStyling('font-size', value + unit);\n    });\n    this.fontSizeUnit = this.wrapCommand(function (value) {\n      var size = _this.currentStyle()['font-size'];\n      return _this.fontStyling('font-size', size + value);\n    });\n    for (var _idx = 1; _idx <= 6; _idx++) {\n      this['formatH' + _idx] = function (idx) {\n        return function () {\n          _this.formatBlock('H' + idx);\n        };\n      }(_idx);\n      this.context.memo('help.formatH' + _idx, this.lang.help['formatH' + _idx]);\n    }\n    this.insertParagraph = this.wrapCommand(function () {\n      _this.typing.insertParagraph(_this.editable);\n    });\n    this.insertOrderedList = this.wrapCommand(function () {\n      _this.bullet.insertOrderedList(_this.editable);\n    });\n    this.insertUnorderedList = this.wrapCommand(function () {\n      _this.bullet.insertUnorderedList(_this.editable);\n    });\n    this.indent = this.wrapCommand(function () {\n      _this.bullet.indent(_this.editable);\n    });\n    this.outdent = this.wrapCommand(function () {\n      _this.bullet.outdent(_this.editable);\n    });\n\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n    this.insertNode = this.wrapCommand(function (node) {\n      if (_this.isLimited(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).text().length)) {\n        return;\n      }\n      var rng = _this.getLastRange();\n      rng.insertNode(node);\n      _this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n\n    /**\n     * insert text\n     * @param {String} text\n     */\n    this.insertText = this.wrapCommand(function (text) {\n      if (_this.isLimited(text.length)) {\n        return;\n      }\n      var rng = _this.getLastRange();\n      var textNode = rng.insertNode(dom.createText(text));\n      _this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n    this.pasteHTML = this.wrapCommand(function (markup) {\n      if (_this.isLimited(markup.length)) {\n        return;\n      }\n      markup = _this.context.invoke('codeview.purify', markup);\n      var contents = _this.getLastRange().pasteHTML(markup);\n      _this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n    this.formatBlock = this.wrapCommand(function (tagName, $target) {\n      var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle;\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock);\n      } else {\n        _this.onFormatBlock(tagName, $target);\n      }\n    });\n\n    /**\n     * insert horizontal rule\n     */\n    this.insertHorizontalRule = this.wrapCommand(function () {\n      var hrNode = _this.getLastRange().insertNode(dom.create('HR'));\n      if (hrNode.nextSibling) {\n        _this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n    this.lineHeight = this.wrapCommand(function (value) {\n      _this.style.stylePara(_this.getLastRange(), {\n        lineHeight: value\n      });\n    });\n\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n    this.createLink = this.wrapCommand(function (linkInfo) {\n      var rel = [];\n      var linkUrl = linkInfo.url;\n      var linkText = linkInfo.text;\n      var isNewWindow = linkInfo.isNewWindow;\n      var addNoReferrer = _this.options.linkAddNoReferrer;\n      var addNoOpener = _this.options.linkAddNoOpener;\n      var rng = linkInfo.range || _this.getLastRange();\n      var additionalTextLength = linkText.length - rng.toString().length;\n      if (additionalTextLength > 0 && _this.isLimited(additionalTextLength)) {\n        return;\n      }\n      var isTextChanged = rng.toString() !== linkText;\n\n      // handle spaced urls from input\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n      if (_this.options.onCreateLink) {\n        linkUrl = _this.options.onCreateLink(linkUrl);\n      } else {\n        linkUrl = _this.checkLinkUrl(linkUrl);\n      }\n      var anchors = [];\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        var anchor = rng.insertNode(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<A></A>').text(linkText)[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = _this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true\n        });\n      }\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(anchors, function (idx, anchor) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href', linkUrl);\n        if (isNewWindow) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('target', '_blank');\n          if (addNoReferrer) {\n            rel.push('noreferrer');\n          }\n          if (addNoOpener) {\n            rel.push('noopener');\n          }\n          if (rel.length) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('rel', rel.join(' '));\n          }\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).removeAttr('target');\n        }\n      });\n      _this.setLastRange(_this.createRangeFromList(anchors).select());\n    });\n\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n    this.color = this.wrapCommand(function (colorInfo) {\n      var foreColor = colorInfo.foreColor;\n      var backColor = colorInfo.backColor;\n      if (foreColor) {\n        document.execCommand('foreColor', false, foreColor);\n      }\n      if (backColor) {\n        document.execCommand('backColor', false, backColor);\n      }\n    });\n\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n    this.foreColor = this.wrapCommand(function (colorInfo) {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n    this.insertTable = this.wrapCommand(function (dim) {\n      var dimension = dim.split('x');\n      var rng = _this.getLastRange().deleteContents();\n      rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options));\n    });\n\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n    this.removeMedia = this.wrapCommand(function () {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).parent();\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).detach();\n      }\n      _this.setLastRange(range.createFromSelection($target).select());\n      _this.context.triggerEvent('media.delete', $target, _this.$editable);\n    });\n\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n    this.floatMe = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', value === 'none' ? '' : value);\n    });\n\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n    this.resize = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());\n      value = parseFloat(value);\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: ''\n        });\n      }\n    });\n  }\n  return Editor_createClass(Editor, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      // bind custom events\n      this.$editable.on('keydown', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          _this2.context.triggerEvent('enter', event);\n        }\n        _this2.context.triggerEvent('keydown', event);\n\n        // keep a snapshot to limit text on input event\n        _this2.snapshot = _this2.history.makeSnapshot();\n        _this2.hasKeyShortCut = false;\n        if (!event.isDefaultPrevented()) {\n          if (_this2.options.shortcuts) {\n            _this2.hasKeyShortCut = _this2.handleKeyMap(event);\n          } else {\n            _this2.preventDefaultEditableShortCuts(event);\n          }\n        }\n        if (_this2.isLimited(1, event)) {\n          var lastRange = _this2.getLastRange();\n          if (lastRange.eo - lastRange.so === 0) {\n            return false;\n          }\n        }\n        _this2.setLastRange();\n\n        // record undo in the key event except keyMap.\n        if (_this2.options.recordEveryKeystroke) {\n          if (_this2.hasKeyShortCut === false) {\n            _this2.history.recordUndo();\n          }\n        }\n      }).on('keyup', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('keyup', event);\n      }).on('focus', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('focus', event);\n      }).on('blur', function (event) {\n        _this2.context.triggerEvent('blur', event);\n      }).on('mousedown', function (event) {\n        _this2.context.triggerEvent('mousedown', event);\n      }).on('mouseup', function (event) {\n        _this2.setLastRange();\n        _this2.history.recordUndo();\n        _this2.context.triggerEvent('mouseup', event);\n      }).on('scroll', function (event) {\n        _this2.context.triggerEvent('scroll', event);\n      }).on('paste', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('paste', event);\n      }).on('copy', function (event) {\n        _this2.context.triggerEvent('copy', event);\n      }).on('input', function () {\n        // To limit composition characters (e.g. Korean)\n        if (_this2.isLimited(0) && _this2.snapshot) {\n          _this2.history.applySnapshot(_this2.snapshot);\n        }\n      });\n      this.$editable.attr('spellcheck', this.options.spellCheck);\n      this.$editable.attr('autocorrect', this.options.spellCheck);\n      if (this.options.disableGrammar) {\n        this.$editable.attr('data-gramm', false);\n      }\n\n      // init content before set event\n      this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n      this.$editable.on(env.inputEventName, func.debounce(function () {\n        _this2.context.triggerEvent('change', _this2.$editable.html(), _this2.$editable);\n      }, 10));\n      this.$editable.on('focusin', function (event) {\n        _this2.context.triggerEvent('focusin', event);\n      }).on('focusout', function (event) {\n        _this2.context.triggerEvent('focusout', event);\n      });\n      if (this.options.airMode) {\n        if (this.options.overrideContextMenu) {\n          this.$editor.on('contextmenu', function (event) {\n            _this2.context.triggerEvent('contextmenu', event);\n            return false;\n          });\n        }\n      } else {\n        if (this.options.width) {\n          this.$editor.outerWidth(this.options.width);\n        }\n        if (this.options.height) {\n          this.$editable.outerHeight(this.options.height);\n        }\n        if (this.options.maxHeight) {\n          this.$editable.css('max-height', this.options.maxHeight);\n        }\n        if (this.options.minHeight) {\n          this.$editable.css('min-height', this.options.minHeight);\n        }\n      }\n      this.history.recordUndo();\n      this.setLastRange();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$editable.off();\n    }\n  }, {\n    key: \"handleKeyMap\",\n    value: function handleKeyMap(event) {\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      var keys = [];\n      if (event.metaKey) {\n        keys.push('CMD');\n      }\n      if (event.ctrlKey && !event.altKey) {\n        keys.push('CTRL');\n      }\n      if (event.shiftKey) {\n        keys.push('SHIFT');\n      }\n      var keyName = key.nameFromCode[event.keyCode];\n      if (keyName) {\n        keys.push(keyName);\n      }\n      var eventName = keyMap[keys.join('+')];\n      if (keyName === 'TAB' && !this.options.tabDisable) {\n        this.afterCommand();\n      } else if (eventName) {\n        if (this.context.invoke(eventName) !== false) {\n          event.preventDefault();\n          return true;\n        }\n      } else if (key.isEdit(event.keyCode)) {\n        if (key.isRemove(event.keyCode)) {\n          this.context.invoke('removed');\n        }\n        this.afterCommand();\n      }\n      return false;\n    }\n  }, {\n    key: \"preventDefaultEditableShortCuts\",\n    value: function preventDefaultEditableShortCuts(event) {\n      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n      if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) {\n        event.preventDefault();\n      }\n    }\n  }, {\n    key: \"isLimited\",\n    value: function isLimited(pad, event) {\n      pad = pad || 0;\n      if (typeof event !== 'undefined') {\n        if (key.isMove(event.keyCode) || key.isNavigation(event.keyCode) || event.ctrlKey || event.metaKey || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n          return false;\n        }\n      }\n      if (this.options.maxTextLength > 0) {\n        if (this.$editable.text().length + pad > this.options.maxTextLength) {\n          return true;\n        }\n      }\n      return false;\n    }\n  }, {\n    key: \"checkLinkUrl\",\n    value: function checkLinkUrl(linkUrl) {\n      if (MAILTO_PATTERN.test(linkUrl)) {\n        return 'mailto://' + linkUrl;\n      } else if (TEL_PATTERN.test(linkUrl)) {\n        return 'tel://' + linkUrl;\n      } else if (!URL_SCHEME_PATTERN.test(linkUrl)) {\n        return 'http://' + linkUrl;\n      }\n      return linkUrl;\n    }\n\n    /**\n     * create range\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"createRange\",\n    value: function createRange() {\n      this.focus();\n      this.setLastRange();\n      return this.getLastRange();\n    }\n\n    /**\n     * create a new range from the list of elements\n     *\n     * @param {list} dom element list\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"createRangeFromList\",\n    value: function createRangeFromList(lst) {\n      var startRange = range.createFromNodeBefore(lists.head(lst));\n      var startPoint = startRange.getStartPoint();\n      var endRange = range.createFromNodeAfter(lists.last(lst));\n      var endPoint = endRange.getEndPoint();\n      return range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * set the last range\n     *\n     * if given rng is exist, set rng as the last range\n     * or create a new range at the end of the document\n     *\n     * @param {WrappedRange} rng\n     */\n  }, {\n    key: \"setLastRange\",\n    value: function setLastRange(rng) {\n      if (rng) {\n        this.lastRange = rng;\n      } else {\n        this.lastRange = range.create(this.editable);\n        if (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.lastRange.sc).closest('.note-editable').length === 0) {\n          this.lastRange = range.createFromBodyElement(this.editable);\n        }\n      }\n    }\n\n    /**\n     * get the last range\n     *\n     * if there is a saved last range, return it\n     * or create a new range and return it\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      if (!this.lastRange) {\n        this.setLastRange();\n      }\n      return this.lastRange;\n    }\n\n    /**\n     * saveRange\n     *\n     * save current range\n     *\n     * @param {Boolean} [thenCollapse=false]\n     */\n  }, {\n    key: \"saveRange\",\n    value: function saveRange(thenCollapse) {\n      if (thenCollapse) {\n        this.getLastRange().collapse().select();\n      }\n    }\n\n    /**\n     * restoreRange\n     *\n     * restore lately range\n     */\n  }, {\n    key: \"restoreRange\",\n    value: function restoreRange() {\n      if (this.lastRange) {\n        this.lastRange.select();\n        this.focus();\n      }\n    }\n  }, {\n    key: \"saveTarget\",\n    value: function saveTarget(node) {\n      this.$editable.data('target', node);\n    }\n  }, {\n    key: \"clearTarget\",\n    value: function clearTarget() {\n      this.$editable.removeData('target');\n    }\n  }, {\n    key: \"restoreTarget\",\n    value: function restoreTarget() {\n      return this.$editable.data('target');\n    }\n\n    /**\n     * currentStyle\n     *\n     * current style\n     * @return {Object|Boolean} unfocus\n     */\n  }, {\n    key: \"currentStyle\",\n    value: function currentStyle() {\n      var rng = range.create();\n      if (rng) {\n        rng = rng.normalize();\n      }\n      return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n    }\n\n    /**\n     * style from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n  }, {\n    key: \"styleFromNode\",\n    value: function styleFromNode($node) {\n      return this.style.fromNode($node);\n    }\n\n    /**\n     * undo\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.undo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /*\n    * commit\n    */\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.commit();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /**\n     * redo\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.redo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /**\n     * before command\n     */\n  }, {\n    key: \"beforeCommand\",\n    value: function beforeCommand() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n\n      // Set styleWithCSS before run a command\n      document.execCommand('styleWithCSS', false, this.options.styleWithCSS);\n\n      // keep focus on editable before command execution\n      this.focus();\n    }\n\n    /**\n     * after command\n     * @param {Boolean} isPreventTrigger\n     */\n  }, {\n    key: \"afterCommand\",\n    value: function afterCommand(isPreventTrigger) {\n      this.normalizeContent();\n      this.history.recordUndo();\n      if (!isPreventTrigger) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n\n    /**\n     * handle tab key\n     */\n  }, {\n    key: \"tab\",\n    value: function tab() {\n      var rng = this.getLastRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n        if (!this.isLimited(this.options.tabSize)) {\n          this.beforeCommand();\n          this.typing.insertTab(rng, this.options.tabSize);\n          this.afterCommand();\n        }\n      }\n    }\n\n    /**\n     * handle shift+tab key\n     */\n  }, {\n    key: \"untab\",\n    value: function untab() {\n      var rng = this.getLastRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng, true);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n      }\n    }\n\n    /**\n     * run given function between beforeCommand and afterCommand\n     */\n  }, {\n    key: \"wrapCommand\",\n    value: function wrapCommand(fn) {\n      return function () {\n        this.beforeCommand();\n        fn.apply(this, arguments);\n        this.afterCommand();\n      };\n    }\n    /**\n     * removed (function added by 1der1)\n    */\n  }, {\n    key: \"removed\",\n    value: function removed(rng, node, tagName) {\n      // LB\n      rng = range.create();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        node = rng.ec;\n        if ((tagName = node.tagName) && node.childElementCount === 1 && node.childNodes[0].tagName === \"BR\") {\n          if (tagName === \"P\") {\n            node.remove();\n          } else if (['TH', 'TD'].indexOf(tagName) >= 0) {\n            node.firstChild.remove();\n          }\n        }\n      }\n    }\n    /**\n     * insert image\n     *\n     * @param {String} src\n     * @param {String|Function} param\n     * @return {Promise}\n     */\n  }, {\n    key: \"insertImage\",\n    value: function insertImage(src, param) {\n      var _this3 = this;\n      return createImage(src, param).then(function ($image) {\n        _this3.beforeCommand();\n        if (typeof param === 'function') {\n          param($image);\n        } else {\n          if (typeof param === 'string') {\n            $image.attr('data-filename', param);\n          }\n          $image.css('width', Math.min(_this3.$editable.width(), $image.width()));\n        }\n        $image.show();\n        _this3.getLastRange().insertNode($image[0]);\n        _this3.setLastRange(range.createFromNodeAfter($image[0]).select());\n        _this3.afterCommand();\n      }).fail(function (e) {\n        _this3.context.triggerEvent('image.upload.error', e);\n      });\n    }\n\n    /**\n     * insertImages\n     * @param {File[]} files\n     */\n  }, {\n    key: \"insertImagesAsDataURL\",\n    value: function insertImagesAsDataURL(files) {\n      var _this4 = this;\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(files, function (idx, file) {\n        var filename = file.name;\n        if (_this4.options.maximumImageFileSize && _this4.options.maximumImageFileSize < file.size) {\n          _this4.context.triggerEvent('image.upload.error', _this4.lang.image.maximumFileSizeError);\n        } else {\n          readFileAsDataURL(file).then(function (dataURL) {\n            return _this4.insertImage(dataURL, filename);\n          }).fail(function () {\n            _this4.context.triggerEvent('image.upload.error');\n          });\n        }\n      });\n    }\n\n    /**\n     * insertImagesOrCallback\n     * @param {File[]} files\n     */\n  }, {\n    key: \"insertImagesOrCallback\",\n    value: function insertImagesOrCallback(files) {\n      var callbacks = this.options.callbacks;\n      // If onImageUpload set,\n      if (callbacks.onImageUpload) {\n        this.context.triggerEvent('image.upload', files);\n        // else insert Image as dataURL\n      } else {\n        this.insertImagesAsDataURL(files);\n      }\n    }\n\n    /**\n     * return selected plain text\n     * @return {String} text\n     */\n  }, {\n    key: \"getSelectedText\",\n    value: function getSelectedText() {\n      var rng = this.getLastRange();\n\n      // if range on anchor, expand range with anchor\n      if (rng.isOnAnchor()) {\n        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n      }\n      return rng.toString();\n    }\n  }, {\n    key: \"onFormatBlock\",\n    value: function onFormatBlock(tagName, $target) {\n      // [workaround] for MSIE, IE need `<`\n      document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName);\n\n      // support custom class\n      if ($target && $target.length) {\n        // find the exact element has given tagName\n        if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n          $target = $target.find(tagName);\n        }\n        if ($target && $target.length) {\n          var currentRange = this.createRange();\n          var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()([currentRange.sc, currentRange.ec]).closest(tagName);\n          // remove class added for current block\n          $parent.removeClass();\n          var className = $target[0].className || '';\n          if (className) {\n            $parent.addClass(className);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"formatPara\",\n    value: function formatPara() {\n      this.formatBlock('P');\n    }\n  }, {\n    key: \"fontStyling\",\n    value: function fontStyling(target, value) {\n      var rng = this.getLastRange();\n      if (rng !== '') {\n        var spans = this.style.styleNodes(rng);\n        this.$editor.find('.note-status-output').html('');\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(spans).css(target, value);\n\n        // [workaround] added styled bogus span for style\n        //  - also bogus character needed for cursor position\n        if (rng.isCollapsed()) {\n          var firstSpan = lists.head(spans);\n          if (firstSpan && !dom.nodeLength(firstSpan)) {\n            firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n            range.createFromNode(firstSpan.firstChild).select();\n            this.setLastRange();\n            this.$editable.data(KEY_BOGUS, firstSpan);\n          }\n        } else {\n          rng.select();\n        }\n      } else {\n        var noteStatusOutput = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now();\n        this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n        setTimeout(function () {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('#note-status-output-' + noteStatusOutput).remove();\n        }, 5000);\n      }\n    }\n\n    /**\n     * unlink\n     *\n     * @type command\n     */\n  }, {\n    key: \"unlink\",\n    value: function unlink() {\n      var rng = this.getLastRange();\n      if (rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        rng = range.createFromNode(anchor);\n        rng.select();\n        this.setLastRange();\n        this.beforeCommand();\n        document.execCommand('unlink');\n        this.afterCommand();\n      }\n    }\n\n    /**\n     * returns link info\n     *\n     * @return {Object}\n     * @return {WrappedRange} return.range\n     * @return {String} return.text\n     * @return {Boolean} [return.isNewWindow=true]\n     * @return {String} [return.url=\"\"]\n     */\n  }, {\n    key: \"getLinkInfo\",\n    value: function getLinkInfo() {\n      if (!this.hasFocus()) {\n        this.focus();\n      }\n      var rng = this.getLastRange().expand(dom.isAnchor);\n      // Get the first anchor on range(for edit).\n      var $anchor = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(lists.head(rng.nodes(dom.isAnchor)));\n      var linkInfo = {\n        range: rng,\n        text: rng.toString(),\n        url: $anchor.length ? $anchor.attr('href') : ''\n      };\n\n      // When anchor exists,\n      if ($anchor.length) {\n        // Set isNewWindow by checking its target.\n        linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n      }\n      return linkInfo;\n    }\n  }, {\n    key: \"addRow\",\n    value: function addRow(position) {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addRow(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"addCol\",\n    value: function addCol(position) {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addCol(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteRow(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteCol(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteTable(rng);\n        this.afterCommand();\n      }\n    }\n\n    /**\n     * @param {Position} pos\n     * @param {jQuery} $target - target element\n     * @param {Boolean} [bKeepRatio] - keep ratio\n     */\n  }, {\n    key: \"resizeTo\",\n    value: function resizeTo(pos, $target, bKeepRatio) {\n      var imageSize;\n      if (bKeepRatio) {\n        var newRatio = pos.y / pos.x;\n        var ratio = $target.data('ratio');\n        imageSize = {\n          width: ratio > newRatio ? pos.x : pos.y / ratio,\n          height: ratio > newRatio ? pos.x * ratio : pos.y\n        };\n      } else {\n        imageSize = {\n          width: pos.x,\n          height: pos.y\n        };\n      }\n      $target.css(imageSize);\n    }\n\n    /**\n     * returns whether editable area has focus or not.\n     */\n  }, {\n    key: \"hasFocus\",\n    value: function hasFocus() {\n      return this.$editable.is(':focus');\n    }\n\n    /**\n     * set focus\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // [workaround] Screen will move when page is scolled in IE.\n      //  - do focus when not focused\n      if (!this.hasFocus()) {\n        this.$editable.trigger('focus');\n      }\n    }\n\n    /**\n     * returns whether contents is empty or not.\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n    }\n\n    /**\n     * Removes all contents and restores the editable instance to an _emptyPara_.\n     */\n  }, {\n    key: \"empty\",\n    value: function empty() {\n      this.context.invoke('code', dom.emptyPara);\n    }\n\n    /**\n     * normalize content\n     */\n  }, {\n    key: \"normalizeContent\",\n    value: function normalizeContent() {\n      this.$editable[0].normalize();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Clipboard.js\nfunction Clipboard_typeof(o) { \"@babel/helpers - typeof\"; return Clipboard_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Clipboard_typeof(o); }\nfunction Clipboard_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Clipboard_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Clipboard_toPropertyKey(o.key), o); } }\nfunction Clipboard_createClass(e, r, t) { return r && Clipboard_defineProperties(e.prototype, r), t && Clipboard_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Clipboard_toPropertyKey(t) { var i = Clipboard_toPrimitive(t, \"string\"); return \"symbol\" == Clipboard_typeof(i) ? i : i + \"\"; }\nfunction Clipboard_toPrimitive(t, r) { if (\"object\" != Clipboard_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Clipboard_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar Clipboard = /*#__PURE__*/function () {\n  function Clipboard(context) {\n    Clipboard_classCallCheck(this, Clipboard);\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n  }\n  return Clipboard_createClass(Clipboard, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.$editable.on('paste', this.pasteByEvent.bind(this));\n    }\n\n    /**\n     * paste by clipboard event\n     *\n     * @param {Event} event\n     */\n  }, {\n    key: \"pasteByEvent\",\n    value: function pasteByEvent(event) {\n      var _this = this;\n      if (this.context.isDisabled()) {\n        return;\n      }\n      var clipboardData = event.originalEvent.clipboardData;\n      if (clipboardData && clipboardData.items && clipboardData.items.length) {\n        var clipboardFiles = clipboardData.files;\n        var clipboardText = clipboardData.getData('Text');\n\n        // paste img file\n        if (clipboardFiles.length > 0 && this.options.allowClipboardImagePasting) {\n          this.context.invoke('editor.insertImagesOrCallback', clipboardFiles);\n          event.preventDefault();\n        }\n\n        // paste text with maxTextLength check\n        if (clipboardText.length > 0 && this.context.invoke('editor.isLimited', clipboardText.length)) {\n          event.preventDefault();\n        }\n      } else if (window.clipboardData) {\n        // for IE\n        var text = window.clipboardData.getData('text');\n        if (this.context.invoke('editor.isLimited', text.length)) {\n          event.preventDefault();\n        }\n      }\n\n      // Call editor.afterCommand after proceeding default event handler\n      setTimeout(function () {\n        _this.context.invoke('editor.afterCommand');\n      }, 10);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Dropzone.js\nfunction Dropzone_typeof(o) { \"@babel/helpers - typeof\"; return Dropzone_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Dropzone_typeof(o); }\nfunction Dropzone_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Dropzone_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Dropzone_toPropertyKey(o.key), o); } }\nfunction Dropzone_createClass(e, r, t) { return r && Dropzone_defineProperties(e.prototype, r), t && Dropzone_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Dropzone_toPropertyKey(t) { var i = Dropzone_toPrimitive(t, \"string\"); return \"symbol\" == Dropzone_typeof(i) ? i : i + \"\"; }\nfunction Dropzone_toPrimitive(t, r) { if (\"object\" != Dropzone_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Dropzone_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Dropzone = /*#__PURE__*/function () {\n  function Dropzone(context) {\n    Dropzone_classCallCheck(this, Dropzone);\n    this.context = context;\n    this.$eventListener = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n    this.$dropzone = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-dropzone\">', '<div class=\"note-dropzone-message\"></div>', '</div>'].join('')).prependTo(this.$editor);\n  }\n\n  /**\n   * attach Drag and Drop Events\n   */\n  return Dropzone_createClass(Dropzone, [{\n    key: \"initialize\",\n    value: function initialize() {\n      if (this.options.disableDragAndDrop) {\n        // prevent default drop event\n        this.documentEventHandlers.onDrop = function (e) {\n          e.preventDefault();\n        };\n        // do not consider outside of dropzone\n        this.$eventListener = this.$dropzone;\n        this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n      } else {\n        this.attachDragAndDropEvent();\n      }\n    }\n\n    /**\n     * attach Drag and Drop Events\n     */\n  }, {\n    key: \"attachDragAndDropEvent\",\n    value: function attachDragAndDropEvent() {\n      var _this = this;\n      var collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n      var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n      this.documentEventHandlers.onDragenter = function (e) {\n        var isCodeview = _this.context.invoke('codeview.isActivated');\n        var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0;\n        if (!isCodeview && !collection.length && hasEditorSize) {\n          _this.$editor.addClass('dragover');\n          _this.$dropzone.width(_this.$editor.width());\n          _this.$dropzone.height(_this.$editor.height());\n          $dropzoneMessage.text(_this.lang.image.dragImageHere);\n        }\n        collection = collection.add(e.target);\n      };\n      this.documentEventHandlers.onDragleave = function (e) {\n        collection = collection.not(e.target);\n\n        // If nodeName is BODY, then just make it over (fix for IE)\n        if (!collection.length || e.target.nodeName === 'BODY') {\n          collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n          _this.$editor.removeClass('dragover');\n        }\n      };\n      this.documentEventHandlers.onDrop = function () {\n        collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n        _this.$editor.removeClass('dragover');\n      };\n\n      // show dropzone on dragenter when dragging a object to document\n      // -but only if the editor is visible, i.e. has a positive width and height\n      this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter).on('dragleave', this.documentEventHandlers.onDragleave).on('drop', this.documentEventHandlers.onDrop);\n\n      // change dropzone's message on hover.\n      this.$dropzone.on('dragenter', function () {\n        _this.$dropzone.addClass('hover');\n        $dropzoneMessage.text(_this.lang.image.dropImage);\n      }).on('dragleave', function () {\n        _this.$dropzone.removeClass('hover');\n        $dropzoneMessage.text(_this.lang.image.dragImageHere);\n      });\n\n      // attach dropImage\n      this.$dropzone.on('drop', function (event) {\n        var dataTransfer = event.originalEvent.dataTransfer;\n\n        // stop the browser from opening the dropped content\n        event.preventDefault();\n        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n          _this.$editable.trigger('focus');\n          _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(dataTransfer.types, function (idx, type) {\n            // skip moz-specific types\n            if (type.toLowerCase().indexOf('_moz_') > -1) {\n              return;\n            }\n            var content = dataTransfer.getData(type);\n            if (type.toLowerCase().indexOf('text') > -1) {\n              _this.context.invoke('editor.pasteHTML', content);\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(content).each(function (idx, item) {\n                _this.context.invoke('editor.insertNode', item);\n              });\n            }\n          });\n        }\n      }).on('dragover', false); // prevent default dragover event\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n      Object.keys(this.documentEventHandlers).forEach(function (key) {\n        _this2.$eventListener.off(key.slice(2).toLowerCase(), _this2.documentEventHandlers[key]);\n      });\n      this.documentEventHandlers = {};\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Codeview.js\nfunction Codeview_typeof(o) { \"@babel/helpers - typeof\"; return Codeview_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Codeview_typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction Codeview_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Codeview_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Codeview_toPropertyKey(o.key), o); } }\nfunction Codeview_createClass(e, r, t) { return r && Codeview_defineProperties(e.prototype, r), t && Codeview_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Codeview_toPropertyKey(t) { var i = Codeview_toPrimitive(t, \"string\"); return \"symbol\" == Codeview_typeof(i) ? i : i + \"\"; }\nfunction Codeview_toPrimitive(t, r) { if (\"object\" != Codeview_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Codeview_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n/**\n * @class Codeview\n */\nvar CodeView = /*#__PURE__*/function () {\n  function CodeView(context) {\n    Codeview_classCallCheck(this, CodeView);\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n  return Codeview_createClass(CodeView, [{\n    key: \"sync\",\n    value: function sync(html) {\n      var isCodeview = this.isActivated();\n      var CodeMirror = this.CodeMirrorConstructor;\n      if (isCodeview) {\n        if (html) {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').getDoc().setValue(html);\n          } else {\n            this.$codable.val(html);\n          }\n        } else {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').save();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      this.$codable.on('keyup', function (event) {\n        if (event.keyCode === key.code.ESCAPE) {\n          _this.deactivate();\n        }\n      });\n    }\n\n    /**\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isActivated\",\n    value: function isActivated() {\n      return this.$editor.hasClass('codeview');\n    }\n\n    /**\n     * toggle codeview\n     */\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.isActivated()) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n      this.context.triggerEvent('codeview.toggled');\n    }\n\n    /**\n     * purify input value\n     * @param value\n     * @returns {*}\n     */\n  }, {\n    key: \"purify\",\n    value: function purify(value) {\n      if (this.options.codeviewFilter) {\n        // filter code view regex\n        value = value.replace(this.options.codeviewFilterRegex, '');\n        // allow specific iframe tag\n        if (this.options.codeviewIframeFilter) {\n          var whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n          value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function (tag) {\n            // remove if src attribute is duplicated\n            if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n              return '';\n            }\n            var _iterator = _createForOfIteratorHelper(whitelist),\n              _step;\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var src = _step.value;\n                // pass if src is trusted\n                if (new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"').test(tag)) {\n                  return tag;\n                }\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n            return '';\n          });\n        }\n      }\n      return value;\n    }\n\n    /**\n     * activate code view\n     */\n  }, {\n    key: \"activate\",\n    value: function activate() {\n      var _this2 = this;\n      var CodeMirror = this.CodeMirrorConstructor;\n      this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n      this.$codable.height(this.$editable.height());\n      this.context.invoke('toolbar.updateCodeview', true);\n      this.context.invoke('airPopover.updateCodeview', true);\n      this.$editor.addClass('codeview');\n      this.$codable.trigger('focus');\n\n      // activate CodeMirror as codable\n      if (CodeMirror) {\n        var cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n        // CodeMirror TernServer\n        if (this.options.codemirror.tern) {\n          var server = new CodeMirror.TernServer(this.options.codemirror.tern);\n          cmEditor.ternServer = server;\n          cmEditor.on('cursorActivity', function (cm) {\n            server.updateArgHints(cm);\n          });\n        }\n        cmEditor.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n        });\n        cmEditor.on('change', function () {\n          _this2.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n        });\n\n        // CodeMirror hasn't Padding.\n        cmEditor.setSize(null, this.$editable.outerHeight());\n        this.$codable.data('cmEditor', cmEditor);\n      } else {\n        this.$codable.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', _this2.$codable.val(), event);\n        });\n        this.$codable.on('input', function () {\n          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);\n        });\n      }\n    }\n\n    /**\n     * deactivate code view\n     */\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      var CodeMirror = this.CodeMirrorConstructor;\n      // deactivate CodeMirror as codable\n      if (CodeMirror) {\n        var cmEditor = this.$codable.data('cmEditor');\n        this.$codable.val(cmEditor.getValue());\n        cmEditor.toTextArea();\n      }\n      var value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n      var isChange = this.$editable.html() !== value;\n      this.$editable.html(value);\n      this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n      this.$editor.removeClass('codeview');\n      if (isChange) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n      this.$editable.trigger('focus');\n      this.context.invoke('toolbar.updateCodeview', false);\n      this.context.invoke('airPopover.updateCodeview', false);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isActivated()) {\n        this.deactivate();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Statusbar.js\nfunction Statusbar_typeof(o) { \"@babel/helpers - typeof\"; return Statusbar_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Statusbar_typeof(o); }\nfunction Statusbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Statusbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Statusbar_toPropertyKey(o.key), o); } }\nfunction Statusbar_createClass(e, r, t) { return r && Statusbar_defineProperties(e.prototype, r), t && Statusbar_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Statusbar_toPropertyKey(t) { var i = Statusbar_toPrimitive(t, \"string\"); return \"symbol\" == Statusbar_typeof(i) ? i : i + \"\"; }\nfunction Statusbar_toPrimitive(t, r) { if (\"object\" != Statusbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Statusbar_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar EDITABLE_PADDING = 24;\nvar Statusbar = /*#__PURE__*/function () {\n  function Statusbar(context) {\n    Statusbar_classCallCheck(this, Statusbar);\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n  }\n  return Statusbar_createClass(Statusbar, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      if (this.options.airMode || this.options.disableResizeEditor) {\n        this.destroy();\n        return;\n      }\n      this.$statusbar.on('mousedown touchstart', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        var editableTop = _this.$editable.offset().top - _this.$document.scrollTop();\n        var editableCodeTop = _this.$codable.offset().top - _this.$document.scrollTop();\n        var onStatusbarMove = function onStatusbarMove(event) {\n          var originalEvent = event.type == 'mousemove' ? event : event.originalEvent.touches[0];\n          var height = originalEvent.clientY - (editableTop + EDITABLE_PADDING);\n          var heightCode = originalEvent.clientY - (editableCodeTop + EDITABLE_PADDING);\n          height = _this.options.minheight > 0 ? Math.max(height, _this.options.minheight) : height;\n          height = _this.options.maxHeight > 0 ? Math.min(height, _this.options.maxHeight) : height;\n          heightCode = _this.options.minheight > 0 ? Math.max(heightCode, _this.options.minheight) : heightCode;\n          heightCode = _this.options.maxHeight > 0 ? Math.min(heightCode, _this.options.maxHeight) : heightCode;\n          _this.$editable.height(height);\n          _this.$codable.height(heightCode);\n        };\n        _this.$document.on('mousemove touchmove', onStatusbarMove).one('mouseup touchend', function () {\n          _this.$document.off('mousemove touchmove', onStatusbarMove);\n        });\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$statusbar.off();\n      this.$statusbar.addClass('locked');\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Fullscreen.js\nfunction Fullscreen_typeof(o) { \"@babel/helpers - typeof\"; return Fullscreen_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Fullscreen_typeof(o); }\nfunction Fullscreen_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Fullscreen_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Fullscreen_toPropertyKey(o.key), o); } }\nfunction Fullscreen_createClass(e, r, t) { return r && Fullscreen_defineProperties(e.prototype, r), t && Fullscreen_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Fullscreen_toPropertyKey(t) { var i = Fullscreen_toPrimitive(t, \"string\"); return \"symbol\" == Fullscreen_typeof(i) ? i : i + \"\"; }\nfunction Fullscreen_toPrimitive(t, r) { if (\"object\" != Fullscreen_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Fullscreen_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Fullscreen = /*#__PURE__*/function () {\n  function Fullscreen(context) {\n    var _this = this;\n    Fullscreen_classCallCheck(this, Fullscreen);\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);\n    this.$scrollbar = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('html, body');\n    this.scrollbarClassName = 'note-fullscreen-body';\n    this.onResize = function () {\n      _this.resizeTo({\n        h: _this.$window.height() - _this.$toolbar.outerHeight()\n      });\n    };\n  }\n  return Fullscreen_createClass(Fullscreen, [{\n    key: \"resizeTo\",\n    value: function resizeTo(size) {\n      this.$editable.css('height', size.h);\n      this.$codable.css('height', size.h);\n      if (this.$codable.data('cmeditor')) {\n        this.$codable.data('cmeditor').setsize(null, size.h);\n      }\n    }\n\n    /**\n     * toggle fullscreen\n     */\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      this.$editor.toggleClass('fullscreen');\n      var isFullscreen = this.isFullscreen();\n      this.$scrollbar.toggleClass(this.scrollbarClassName, isFullscreen);\n      if (isFullscreen) {\n        this.$editable.data('orgHeight', this.$editable.css('height'));\n        this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n        this.$editable.css('maxHeight', '');\n        this.$window.on('resize', this.onResize).trigger('resize');\n      } else {\n        this.$window.off('resize', this.onResize);\n        this.resizeTo({\n          h: this.$editable.data('orgHeight')\n        });\n        this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n      }\n      this.context.invoke('toolbar.updateFullscreen', isFullscreen);\n    }\n  }, {\n    key: \"isFullscreen\",\n    value: function isFullscreen() {\n      return this.$editor.hasClass('fullscreen');\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$scrollbar.removeClass(this.scrollbarClassName);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Handle.js\nfunction Handle_typeof(o) { \"@babel/helpers - typeof\"; return Handle_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Handle_typeof(o); }\nfunction Handle_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Handle_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Handle_toPropertyKey(o.key), o); } }\nfunction Handle_createClass(e, r, t) { return r && Handle_defineProperties(e.prototype, r), t && Handle_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Handle_toPropertyKey(t) { var i = Handle_toPrimitive(t, \"string\"); return \"symbol\" == Handle_typeof(i) ? i : i + \"\"; }\nfunction Handle_toPrimitive(t, r) { if (\"object\" != Handle_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Handle_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar Handle = /*#__PURE__*/function () {\n  function Handle(context) {\n    var _this = this;\n    Handle_classCallCheck(this, Handle);\n    this.context = context;\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        if (_this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n  return Handle_createClass(Handle, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$handle = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-handle\">', '<div class=\"note-control-selection\">', '<div class=\"note-control-selection-bg\"></div>', '<div class=\"note-control-holder note-control-nw\"></div>', '<div class=\"note-control-holder note-control-ne\"></div>', '<div class=\"note-control-holder note-control-sw\"></div>', '<div class=\"', this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing', ' note-control-se\"></div>', this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>', '</div>', '</div>'].join('')).prependTo(this.$editingArea);\n      this.$handle.on('mousedown', function (event) {\n        if (dom.isControlSizing(event.target)) {\n          event.preventDefault();\n          event.stopPropagation();\n          var $target = _this2.$handle.find('.note-control-selection').data('target');\n          var posStart = $target.offset();\n          var scrollTop = _this2.$document.scrollTop();\n          var onMouseMove = function onMouseMove(event) {\n            _this2.context.invoke('editor.resizeTo', {\n              x: event.clientX - posStart.left,\n              y: event.clientY - (posStart.top - scrollTop)\n            }, $target, !event.shiftKey);\n            _this2.update($target[0], event);\n          };\n          _this2.$document.on('mousemove', onMouseMove).one('mouseup', function (e) {\n            e.preventDefault();\n            _this2.$document.off('mousemove', onMouseMove);\n            _this2.context.invoke('editor.afterCommand');\n          });\n          if (!$target.data('ratio')) {\n            // original ratio.\n            $target.data('ratio', $target.height() / $target.width());\n          }\n        }\n      });\n\n      // Listen for scrolling on the handle overlay.\n      this.$handle.on('wheel', function (event) {\n        event.preventDefault();\n        _this2.update();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$handle.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n      var isImage = dom.isImg(target);\n      var $selection = this.$handle.find('.note-control-selection');\n      this.context.invoke('imagePopover.update', target, event);\n      if (isImage) {\n        var $image = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target);\n        var areaRect = this.$editingArea[0].getBoundingClientRect();\n        var imageRect = target.getBoundingClientRect();\n        $selection.css({\n          display: 'block',\n          left: imageRect.left - areaRect.left,\n          top: imageRect.top - areaRect.top,\n          width: imageRect.width,\n          height: imageRect.height\n        }).data('target', $image); // save current image element.\n\n        var origImageObj = new Image();\n        origImageObj.src = $image.attr('src');\n        var sizingText = imageRect.width + 'x' + imageRect.height + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n        $selection.find('.note-control-selection-info').text(sizingText);\n        this.context.invoke('editor.saveTarget', target);\n      } else {\n        this.hide();\n      }\n      return isImage;\n    }\n\n    /**\n     * hide\n     *\n     * @param {jQuery} $handle\n     */\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.context.invoke('editor.clearTarget');\n      this.$handle.children().hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoLink.js\nfunction AutoLink_typeof(o) { \"@babel/helpers - typeof\"; return AutoLink_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoLink_typeof(o); }\nfunction AutoLink_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoLink_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoLink_toPropertyKey(o.key), o); } }\nfunction AutoLink_createClass(e, r, t) { return r && AutoLink_defineProperties(e.prototype, r), t && AutoLink_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoLink_toPropertyKey(t) { var i = AutoLink_toPrimitive(t, \"string\"); return \"symbol\" == AutoLink_typeof(i) ? i : i + \"\"; }\nfunction AutoLink_toPrimitive(t, r) { if (\"object\" != AutoLink_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoLink_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar defaultScheme = 'http://';\nvar linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@|xmpp:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\nvar AutoLink = /*#__PURE__*/function () {\n  function AutoLink(context) {\n    var _this = this;\n    AutoLink_classCallCheck(this, AutoLink);\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      }\n    };\n  }\n  return AutoLink_createClass(AutoLink, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWordRange) {\n        return;\n      }\n      var keyword = this.lastWordRange.toString();\n      var match = keyword.match(linkPattern);\n      if (match && (match[1] || match[2])) {\n        var link = match[1] ? keyword : defaultScheme + keyword;\n        var urlText = this.options.showDomainOnlyForAutolink ? keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:xmpp?:?)?(?:www\\.)?/i, '').split('/')[0] : keyword;\n        var node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a></a>').html(urlText).attr('href', link)[0];\n        if (this.context.options.linkTargetBlank) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).attr('target', '_blank');\n        }\n        this.lastWordRange.insertNode(node);\n        this.lastWordRange = null;\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      if (lists.contains([key.code.ENTER, key.code.SPACE], event.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWordRange = wordRange;\n      }\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      if (key.code.SPACE === event.keyCode || key.code.ENTER === event.keyCode && !event.shiftKey) {\n        this.replace();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoSync.js\nfunction AutoSync_typeof(o) { \"@babel/helpers - typeof\"; return AutoSync_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoSync_typeof(o); }\nfunction AutoSync_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoSync_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoSync_toPropertyKey(o.key), o); } }\nfunction AutoSync_createClass(e, r, t) { return r && AutoSync_defineProperties(e.prototype, r), t && AutoSync_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoSync_toPropertyKey(t) { var i = AutoSync_toPrimitive(t, \"string\"); return \"symbol\" == AutoSync_typeof(i) ? i : i + \"\"; }\nfunction AutoSync_toPrimitive(t, r) { if (\"object\" != AutoSync_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoSync_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n/**\n * textarea auto sync.\n */\nvar AutoSync = /*#__PURE__*/function () {\n  function AutoSync(context) {\n    var _this = this;\n    AutoSync_classCallCheck(this, AutoSync);\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': function summernoteChange() {\n        _this.$note.val(context.invoke('code'));\n      }\n    };\n  }\n  return AutoSync_createClass(AutoSync, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return dom.isTextarea(this.$note[0]);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoReplace.js\nfunction AutoReplace_typeof(o) { \"@babel/helpers - typeof\"; return AutoReplace_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoReplace_typeof(o); }\nfunction AutoReplace_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoReplace_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoReplace_toPropertyKey(o.key), o); } }\nfunction AutoReplace_createClass(e, r, t) { return r && AutoReplace_defineProperties(e.prototype, r), t && AutoReplace_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoReplace_toPropertyKey(t) { var i = AutoReplace_toPrimitive(t, \"string\"); return \"symbol\" == AutoReplace_typeof(i) ? i : i + \"\"; }\nfunction AutoReplace_toPrimitive(t, r) { if (\"object\" != AutoReplace_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoReplace_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar AutoReplace = /*#__PURE__*/function () {\n  function AutoReplace(context) {\n    var _this = this;\n    AutoReplace_classCallCheck(this, AutoReplace);\n    this.context = context;\n    this.options = context.options.replace || {};\n    this.keys = [key.code.ENTER, key.code.SPACE, key.code.PERIOD, key.code.COMMA, key.code.SEMICOLON, key.code.SLASH];\n    this.previousKeydownCode = null;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      }\n    };\n  }\n  return AutoReplace_createClass(AutoReplace, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.match;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWord) {\n        return;\n      }\n      var self = this;\n      var keyword = this.lastWord.toString();\n      this.options.match(keyword, function (match) {\n        if (match) {\n          var node = '';\n          if (typeof match === 'string') {\n            node = dom.createText(match);\n          } else if (match instanceof jQuery) {\n            node = match[0];\n          } else if (match instanceof Node) {\n            node = match;\n          }\n          if (!node) return;\n          self.lastWord.insertNode(node);\n          self.lastWord = null;\n          self.context.invoke('editor.focus');\n        }\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      // this forces it to remember the last whole word, even if multiple termination keys are pressed\n      // before the previous key is let go.\n      if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n        this.previousKeydownCode = event.keyCode;\n        return;\n      }\n      if (lists.contains(this.keys, event.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWord = wordRange;\n      }\n      this.previousKeydownCode = event.keyCode;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      if (lists.contains(this.keys, event.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Placeholder.js\nfunction Placeholder_typeof(o) { \"@babel/helpers - typeof\"; return Placeholder_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Placeholder_typeof(o); }\nfunction Placeholder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Placeholder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Placeholder_toPropertyKey(o.key), o); } }\nfunction Placeholder_createClass(e, r, t) { return r && Placeholder_defineProperties(e.prototype, r), t && Placeholder_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Placeholder_toPropertyKey(t) { var i = Placeholder_toPrimitive(t, \"string\"); return \"symbol\" == Placeholder_typeof(i) ? i : i + \"\"; }\nfunction Placeholder_toPrimitive(t, r) { if (\"object\" != Placeholder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Placeholder_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Placeholder = /*#__PURE__*/function () {\n  function Placeholder(context) {\n    var _this = this;\n    Placeholder_classCallCheck(this, Placeholder);\n    this.context = context;\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n    this.events = {\n      'summernote.init summernote.change': function summernoteInitSummernoteChange() {\n        _this.update();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n  return Placeholder_createClass(Placeholder, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.placeholder;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-placeholder\"></div>');\n      this.$placeholder.on('click', function () {\n        _this2.context.invoke('focus');\n      }).html(this.options.placeholder).prependTo(this.$editingArea);\n      this.update();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$placeholder.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n      this.$placeholder.toggle(isShow);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Buttons.js\nfunction Buttons_typeof(o) { \"@babel/helpers - typeof\"; return Buttons_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Buttons_typeof(o); }\nfunction Buttons_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Buttons_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Buttons_toPropertyKey(o.key), o); } }\nfunction Buttons_createClass(e, r, t) { return r && Buttons_defineProperties(e.prototype, r), t && Buttons_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Buttons_toPropertyKey(t) { var i = Buttons_toPrimitive(t, \"string\"); return \"symbol\" == Buttons_typeof(i) ? i : i + \"\"; }\nfunction Buttons_toPrimitive(t, r) { if (\"object\" != Buttons_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Buttons_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Buttons = /*#__PURE__*/function () {\n  function Buttons(context) {\n    Buttons_classCallCheck(this, Buttons);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']);\n  }\n  return Buttons_createClass(Buttons, [{\n    key: \"representShortcut\",\n    value: function representShortcut(editorMethod) {\n      var shortcut = this.invertedKeyMap[editorMethod];\n      if (!this.options.shortcuts || !shortcut) {\n        return '';\n      }\n      if (env.isMac) {\n        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n      }\n      shortcut = shortcut.replace('BACKSLASH', '\\\\').replace('SLASH', '/').replace('LEFTBRACKET', '[').replace('RIGHTBRACKET', ']');\n      return ' (' + shortcut + ')';\n    }\n  }, {\n    key: \"button\",\n    value: function button(o) {\n      if (!this.options.tooltip && o.tooltip) {\n        delete o.tooltip;\n      }\n      o.container = this.options.container;\n      return this.ui.button(o);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.addToolbarButtons();\n      this.addImagePopoverButtons();\n      this.addLinkPopoverButtons();\n      this.addTablePopoverButtons();\n      this.fontInstalledMap = {};\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      delete this.fontInstalledMap;\n    }\n  }, {\n    key: \"isFontInstalled\",\n    value: function isFontInstalled(name) {\n      if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n        this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name);\n      }\n      return this.fontInstalledMap[name];\n    }\n  }, {\n    key: \"isFontDeservedToAdd\",\n    value: function isFontDeservedToAdd(name) {\n      name = name.toLowerCase();\n      return name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1;\n    }\n  }, {\n    key: \"colorPalette\",\n    value: function colorPalette(className, tooltip, backColor, foreColor) {\n      var _this = this;\n      return this.ui.buttonGroup({\n        className: 'note-color ' + className,\n        children: [this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: function click(event) {\n            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget);\n            if (backColor && foreColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor')\n              });\n            } else if (backColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor')\n              });\n            } else if (foreColor) {\n              _this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor')\n              });\n            }\n          },\n          callback: function callback($button) {\n            var $recentColor = $button.find('.note-recent-color');\n            if (backColor) {\n              $recentColor.css('background-color', _this.options.colorButton.backColor);\n              $button.attr('data-backColor', _this.options.colorButton.backColor);\n            }\n            if (foreColor) {\n              $recentColor.css('color', _this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', _this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          }\n        }), this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), this.ui.dropdown({\n          items: (backColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">', this.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"backColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette-' + this.options.id + '\">', '</div>', '<div class=\"note-holder-custom\" id=\"backColorPalette-' + this.options.id + '\" data-event=\"backColor\"></div>', '</div>'].join('') : '') + (foreColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">', this.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"foreColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette-' + this.options.id + '\">', '</div>',\n          // Fix missing Div, Commented to find easily if it's wrong\n          '<div class=\"note-holder-custom\" id=\"foreColorPalette-' + this.options.id + '\" data-event=\"foreColor\"></div>', '</div>'].join('') : ''),\n          callback: function callback($dropdown) {\n            $dropdown.find('.note-holder').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: _this.options.colors,\n                colorsName: _this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n            var customColors = [['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF']];\n            $dropdown.find('.note-holder-custom').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each(function (idx, item) {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).on(\"change\", function () {\n                var $chip = $dropdown.find('#' + external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this).data('event')).find('.note-color-btn').first();\n                var color = this.value.toUpperCase();\n                $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n                $chip.trigger('click');\n              });\n            });\n          },\n          click: function click(event) {\n            event.stopPropagation();\n            var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.' + className).find('.note-dropdown-menu');\n            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n            var eventName = $button.data('event');\n            var value = $button.attr('data-value');\n            if (eventName === 'openPalette') {\n              var $picker = $parent.find('#' + value);\n              var $palette = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]);\n\n              // Shift palette chips\n              var $chip = $palette.find('.note-color-btn').last().detach();\n\n              // Set chip attributes\n              var color = $picker.val();\n              $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.trigger('click');\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                var key = eventName === 'backColor' ? 'background-color' : 'color';\n                var $color = $button.closest('.note-color').find('.note-recent-color');\n                var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n              _this.context.invoke('editor.' + eventName, value);\n            }\n          }\n        })]\n      }).render();\n    }\n  }, {\n    key: \"addToolbarButtons\",\n    value: function addToolbarButtons() {\n      var _this2 = this;\n      this.context.memo('button.style', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.magic), _this2.options),\n          tooltip: _this2.lang.style.style,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          className: 'dropdown-style',\n          items: _this2.options.styleTags,\n          title: _this2.lang.style.style,\n          template: function template(item) {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: Object.prototype.hasOwnProperty.call(_this2.lang.style, item) ? _this2.lang.style[item] : item\n              };\n            }\n            var tag = item.tag;\n            var title = item.title;\n            var style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            var className = item.className ? ' class=\"' + item.className + '\"' : '';\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: _this2.context.createInvokeHandler('editor.formatBlock')\n        })]).render();\n      });\n      var _loop = function _loop() {\n        var item = _this2.options.styleTags[styleIdx];\n        _this2.context.memo('button.style.' + item, function () {\n          return _this2.button({\n            className: 'note-btn-style-' + item,\n            contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n            tooltip: _this2.lang.style[item],\n            click: _this2.context.createInvokeHandler('editor.formatBlock')\n          }).render();\n        });\n      };\n      for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n        _loop();\n      }\n      this.context.memo('button.bold', function () {\n        return _this2.button({\n          className: 'note-btn-bold',\n          contents: _this2.ui.icon(_this2.options.icons.bold),\n          tooltip: _this2.lang.font.bold + _this2.representShortcut('bold'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.bold')\n        }).render();\n      });\n      this.context.memo('button.italic', function () {\n        return _this2.button({\n          className: 'note-btn-italic',\n          contents: _this2.ui.icon(_this2.options.icons.italic),\n          tooltip: _this2.lang.font.italic + _this2.representShortcut('italic'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.italic')\n        }).render();\n      });\n      this.context.memo('button.underline', function () {\n        return _this2.button({\n          className: 'note-btn-underline',\n          contents: _this2.ui.icon(_this2.options.icons.underline),\n          tooltip: _this2.lang.font.underline + _this2.representShortcut('underline'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.underline')\n        }).render();\n      });\n      this.context.memo('button.clear', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.eraser),\n          tooltip: _this2.lang.font.clear + _this2.representShortcut('removeFormat'),\n          click: _this2.context.createInvokeHandler('editor.removeFormat')\n        }).render();\n      });\n      this.context.memo('button.strikethrough', function () {\n        return _this2.button({\n          className: 'note-btn-strikethrough',\n          contents: _this2.ui.icon(_this2.options.icons.strikethrough),\n          tooltip: _this2.lang.font.strikethrough + _this2.representShortcut('strikethrough'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n        }).render();\n      });\n      this.context.memo('button.superscript', function () {\n        return _this2.button({\n          className: 'note-btn-superscript',\n          contents: _this2.ui.icon(_this2.options.icons.superscript),\n          tooltip: _this2.lang.font.superscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.superscript')\n        }).render();\n      });\n      this.context.memo('button.subscript', function () {\n        return _this2.button({\n          className: 'note-btn-subscript',\n          contents: _this2.ui.icon(_this2.options.icons.subscript),\n          tooltip: _this2.lang.font.subscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.subscript')\n        }).render();\n      });\n      this.context.memo('button.fontname', function () {\n        var styleInfo = _this2.context.invoke('editor.currentStyle');\n        if (_this2.options.addDefaultFonts) {\n          // Add 'default' fonts into the fontnames array if not exist\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(styleInfo['font-family'].split(','), function (idx, fontname) {\n            fontname = fontname.trim().replace(/['\"]+/g, '');\n            if (_this2.isFontDeservedToAdd(fontname)) {\n              if (_this2.options.fontNames.indexOf(fontname) === -1) {\n                _this2.options.fontNames.push(fontname);\n              }\n            }\n          });\n        }\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontname\"></span>', _this2.options),\n          tooltip: _this2.lang.font.name,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontNames.filter(_this2.isFontInstalled.bind(_this2)),\n          title: _this2.lang.font.name,\n          template: function template(item) {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontName')\n        })]).render();\n      });\n      this.context.memo('button.fontsize', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', _this2.options),\n          tooltip: _this2.lang.font.size,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizes,\n          title: _this2.lang.font.size,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n        })]).render();\n      });\n      this.context.memo('button.fontsizeunit', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', _this2.options),\n          tooltip: _this2.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizeUnits,\n          title: _this2.lang.font.sizeunit,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit')\n        })]).render();\n      });\n      this.context.memo('button.color', function () {\n        return _this2.colorPalette('note-color-all', _this2.lang.color.recent, true, true);\n      });\n      this.context.memo('button.forecolor', function () {\n        return _this2.colorPalette('note-color-fore', _this2.lang.color.foreground, false, true);\n      });\n      this.context.memo('button.backcolor', function () {\n        return _this2.colorPalette('note-color-back', _this2.lang.color.background, true, false);\n      });\n      this.context.memo('button.ul', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.unorderedlist),\n          tooltip: _this2.lang.lists.unordered + _this2.representShortcut('insertUnorderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertUnorderedList')\n        }).render();\n      });\n      this.context.memo('button.ol', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.orderedlist),\n          tooltip: _this2.lang.lists.ordered + _this2.representShortcut('insertOrderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertOrderedList')\n        }).render();\n      });\n      var justifyLeft = this.button({\n        contents: this.ui.icon(this.options.icons.alignLeft),\n        tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n        click: this.context.createInvokeHandler('editor.justifyLeft')\n      });\n      var justifyCenter = this.button({\n        contents: this.ui.icon(this.options.icons.alignCenter),\n        tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n        click: this.context.createInvokeHandler('editor.justifyCenter')\n      });\n      var justifyRight = this.button({\n        contents: this.ui.icon(this.options.icons.alignRight),\n        tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n        click: this.context.createInvokeHandler('editor.justifyRight')\n      });\n      var justifyFull = this.button({\n        contents: this.ui.icon(this.options.icons.alignJustify),\n        tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n        click: this.context.createInvokeHandler('editor.justifyFull')\n      });\n      var outdent = this.button({\n        contents: this.ui.icon(this.options.icons.outdent),\n        tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n        click: this.context.createInvokeHandler('editor.outdent')\n      });\n      var indent = this.button({\n        contents: this.ui.icon(this.options.icons.indent),\n        tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n        click: this.context.createInvokeHandler('editor.indent')\n      });\n      this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n      this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n      this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n      this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n      this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n      this.context.memo('button.indent', func.invoke(indent, 'render'));\n      this.context.memo('button.paragraph', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.alignLeft), _this2.options),\n          tooltip: _this2.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown([_this2.ui.buttonGroup({\n          className: 'note-align',\n          children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n        }), _this2.ui.buttonGroup({\n          className: 'note-list',\n          children: [outdent, indent]\n        })])]).render();\n      });\n      this.context.memo('button.height', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.textHeight), _this2.options),\n          tooltip: _this2.lang.font.height,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          items: _this2.options.lineHeights,\n          checkClassName: _this2.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: _this2.lang.font.height,\n          click: _this2.context.createInvokeHandler('editor.lineHeight')\n        })]).render();\n      });\n      this.context.memo('button.table', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.table), _this2.options),\n          tooltip: _this2.lang.table.table,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          title: _this2.lang.table.table,\n          className: 'note-table',\n          items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n        })], {\n          callback: function callback($node) {\n            var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n            $catcher.css({\n              width: _this2.options.insertTableMaxSize.col + 'em',\n              height: _this2.options.insertTableMaxSize.row + 'em'\n            }).on('mousedown', _this2.context.createInvokeHandler('editor.insertTable')).on('mousemove', _this2.tableMoveHandler.bind(_this2));\n          }\n        }).render();\n      });\n      this.context.memo('button.link', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.link),\n          tooltip: _this2.lang.link.link + _this2.representShortcut('linkDialog.show'),\n          click: _this2.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.picture', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.picture),\n          tooltip: _this2.lang.image.image,\n          click: _this2.context.createInvokeHandler('imageDialog.show')\n        }).render();\n      });\n      this.context.memo('button.video', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.video),\n          tooltip: _this2.lang.video.video,\n          click: _this2.context.createInvokeHandler('videoDialog.show')\n        }).render();\n      });\n      this.context.memo('button.hr', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.minus),\n          tooltip: _this2.lang.hr.insert + _this2.representShortcut('insertHorizontalRule'),\n          click: _this2.context.createInvokeHandler('editor.insertHorizontalRule')\n        }).render();\n      });\n      this.context.memo('button.fullscreen', function () {\n        return _this2.button({\n          className: 'btn-fullscreen note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.arrowsAlt),\n          tooltip: _this2.lang.options.fullscreen,\n          click: _this2.context.createInvokeHandler('fullscreen.toggle')\n        }).render();\n      });\n      this.context.memo('button.codeview', function () {\n        return _this2.button({\n          className: 'btn-codeview note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.code),\n          tooltip: _this2.lang.options.codeview,\n          click: _this2.context.createInvokeHandler('codeview.toggle')\n        }).render();\n      });\n      this.context.memo('button.redo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.redo),\n          tooltip: _this2.lang.history.redo + _this2.representShortcut('redo'),\n          click: _this2.context.createInvokeHandler('editor.redo')\n        }).render();\n      });\n      this.context.memo('button.undo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.undo),\n          tooltip: _this2.lang.history.undo + _this2.representShortcut('undo'),\n          click: _this2.context.createInvokeHandler('editor.undo')\n        }).render();\n      });\n      this.context.memo('button.help', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.question),\n          tooltip: _this2.lang.options.help,\n          click: _this2.context.createInvokeHandler('helpDialog.show')\n        }).render();\n      });\n    }\n\n    /**\n     * image: [\n     *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n     *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n     *   ['remove', ['removeMedia']],\n     * ],\n     */\n  }, {\n    key: \"addImagePopoverButtons\",\n    value: function addImagePopoverButtons() {\n      var _this3 = this;\n      // Image Size Buttons\n      this.context.memo('button.resizeFull', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">100%</span>',\n          tooltip: _this3.lang.image.resizeFull,\n          click: _this3.context.createInvokeHandler('editor.resize', '1')\n        }).render();\n      });\n      this.context.memo('button.resizeHalf', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">50%</span>',\n          tooltip: _this3.lang.image.resizeHalf,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.5')\n        }).render();\n      });\n      this.context.memo('button.resizeQuarter', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">25%</span>',\n          tooltip: _this3.lang.image.resizeQuarter,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.25')\n        }).render();\n      });\n      this.context.memo('button.resizeNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.resizeNone,\n          click: _this3.context.createInvokeHandler('editor.resize', '0')\n        }).render();\n      });\n\n      // Float Buttons\n      this.context.memo('button.floatLeft', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatLeft),\n          tooltip: _this3.lang.image.floatLeft,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'left')\n        }).render();\n      });\n      this.context.memo('button.floatRight', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatRight),\n          tooltip: _this3.lang.image.floatRight,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'right')\n        }).render();\n      });\n      this.context.memo('button.floatNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.floatNone,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'none')\n        }).render();\n      });\n\n      // Remove Buttons\n      this.context.memo('button.removeMedia', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.trash),\n          tooltip: _this3.lang.image.remove,\n          click: _this3.context.createInvokeHandler('editor.removeMedia')\n        }).render();\n      });\n    }\n  }, {\n    key: \"addLinkPopoverButtons\",\n    value: function addLinkPopoverButtons() {\n      var _this4 = this;\n      this.context.memo('button.linkDialogShow', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.link),\n          tooltip: _this4.lang.link.edit,\n          click: _this4.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.unlink', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.unlink),\n          tooltip: _this4.lang.link.unlink,\n          click: _this4.context.createInvokeHandler('editor.unlink')\n        }).render();\n      });\n    }\n\n    /**\n     * table : [\n     *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n     *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n     * ],\n     */\n  }, {\n    key: \"addTablePopoverButtons\",\n    value: function addTablePopoverButtons() {\n      var _this5 = this;\n      this.context.memo('button.addRowUp', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowAbove),\n          tooltip: _this5.lang.table.addRowAbove,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'top')\n        }).render();\n      });\n      this.context.memo('button.addRowDown', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowBelow),\n          tooltip: _this5.lang.table.addRowBelow,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'bottom')\n        }).render();\n      });\n      this.context.memo('button.addColLeft', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colBefore),\n          tooltip: _this5.lang.table.addColLeft,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'left')\n        }).render();\n      });\n      this.context.memo('button.addColRight', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colAfter),\n          tooltip: _this5.lang.table.addColRight,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'right')\n        }).render();\n      });\n      this.context.memo('button.deleteRow', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowRemove),\n          tooltip: _this5.lang.table.delRow,\n          click: _this5.context.createInvokeHandler('editor.deleteRow')\n        }).render();\n      });\n      this.context.memo('button.deleteCol', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colRemove),\n          tooltip: _this5.lang.table.delCol,\n          click: _this5.context.createInvokeHandler('editor.deleteCol')\n        }).render();\n      });\n      this.context.memo('button.deleteTable', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.trash),\n          tooltip: _this5.lang.table.delTable,\n          click: _this5.context.createInvokeHandler('editor.deleteTable')\n        }).render();\n      });\n    }\n  }, {\n    key: \"build\",\n    value: function build($container, groups) {\n      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n        var group = groups[groupIdx];\n        var groupName = Array.isArray(group) ? group[0] : group;\n        var buttons = Array.isArray(group) ? group.length === 1 ? [group[0]] : group[1] : [group];\n        var $group = this.ui.buttonGroup({\n          className: 'note-' + groupName\n        }).render();\n        for (var idx = 0, len = buttons.length; idx < len; idx++) {\n          var btn = this.context.memo('button.' + buttons[idx]);\n          if (btn) {\n            $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n          }\n        }\n        $group.appendTo($container);\n      }\n    }\n\n    /**\n     * @param {jQuery} [$container]\n     */\n  }, {\n    key: \"updateCurrentStyle\",\n    value: function updateCurrentStyle($container) {\n      var $cont = $container || this.$toolbar;\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      this.updateBtnStates($cont, {\n        '.note-btn-bold': function noteBtnBold() {\n          return styleInfo['font-bold'] === 'bold';\n        },\n        '.note-btn-italic': function noteBtnItalic() {\n          return styleInfo['font-italic'] === 'italic';\n        },\n        '.note-btn-underline': function noteBtnUnderline() {\n          return styleInfo['font-underline'] === 'underline';\n        },\n        '.note-btn-subscript': function noteBtnSubscript() {\n          return styleInfo['font-subscript'] === 'subscript';\n        },\n        '.note-btn-superscript': function noteBtnSuperscript() {\n          return styleInfo['font-superscript'] === 'superscript';\n        },\n        '.note-btn-strikethrough': function noteBtnStrikethrough() {\n          return styleInfo['font-strikethrough'] === 'strikethrough';\n        }\n      });\n      if (styleInfo['font-family']) {\n        var fontNames = styleInfo['font-family'].split(',').map(function (name) {\n          return name.replace(/[\\'\\\"]/g, '').replace(/\\s+$/, '').replace(/^\\s+/, '');\n        });\n        var fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n        $cont.find('.dropdown-fontname a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare string to avoid creating another func.\n          var isChecked = $item.data('value') + '' === fontName + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n      }\n      if (styleInfo['font-size']) {\n        var fontSize = styleInfo['font-size'];\n        $cont.find('.dropdown-fontsize a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare with string to avoid creating another func.\n          var isChecked = $item.data('value') + '' === fontSize + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsize').text(fontSize);\n        var fontSizeUnit = styleInfo['font-size-unit'];\n        $cont.find('.dropdown-fontsizeunit a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          var isChecked = $item.data('value') + '' === fontSizeUnit + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n      }\n      if (styleInfo['line-height']) {\n        var lineHeight = styleInfo['line-height'];\n        $cont.find('.dropdown-line-height a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare with string to avoid creating another func.\n          var isChecked = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).data('value') + '' === lineHeight + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-line-height').text(lineHeight);\n      }\n    }\n  }, {\n    key: \"updateBtnStates\",\n    value: function updateBtnStates($container, infos) {\n      var _this6 = this;\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(infos, function (selector, pred) {\n        _this6.ui.toggleBtnActive($container.find(selector), pred());\n      });\n    }\n  }, {\n    key: \"tableMoveHandler\",\n    value: function tableMoveHandler(event) {\n      var PX_PER_EM = 18;\n      var $picker = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n      var $dimensionDisplay = $picker.next();\n      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n      var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n      var posOffset;\n      // HTML5 with jQuery - e.offsetX is undefined in Firefox\n      if (event.offsetX === undefined) {\n        var posCatcher = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target).offset();\n        posOffset = {\n          x: event.pageX - posCatcher.left,\n          y: event.pageY - posCatcher.top\n        };\n      } else {\n        posOffset = {\n          x: event.offsetX,\n          y: event.offsetY\n        };\n      }\n      var dim = {\n        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n        r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n      };\n      $highlighted.css({\n        width: dim.c + 'em',\n        height: dim.r + 'em'\n      });\n      $catcher.data('value', dim.c + 'x' + dim.r);\n      if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n        $unhighlighted.css({\n          width: dim.c + 1 + 'em'\n        });\n      }\n      if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n        $unhighlighted.css({\n          height: dim.r + 1 + 'em'\n        });\n      }\n      $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Toolbar.js\nfunction Toolbar_typeof(o) { \"@babel/helpers - typeof\"; return Toolbar_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Toolbar_typeof(o); }\nfunction Toolbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Toolbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Toolbar_toPropertyKey(o.key), o); } }\nfunction Toolbar_createClass(e, r, t) { return r && Toolbar_defineProperties(e.prototype, r), t && Toolbar_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Toolbar_toPropertyKey(t) { var i = Toolbar_toPrimitive(t, \"string\"); return \"symbol\" == Toolbar_typeof(i) ? i : i + \"\"; }\nfunction Toolbar_toPrimitive(t, r) { if (\"object\" != Toolbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Toolbar_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Toolbar = /*#__PURE__*/function () {\n  function Toolbar(context) {\n    Toolbar_classCallCheck(this, Toolbar);\n    this.context = context;\n    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n  return Toolbar_createClass(Toolbar, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !this.options.airMode;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      this.options.toolbar = this.options.toolbar || [];\n      if (!this.options.toolbar.length) {\n        this.$toolbar.hide();\n      } else {\n        this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n      }\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n      this.changeContainer(false);\n      this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () {\n        _this.context.invoke('buttons.updateCurrentStyle');\n      });\n      this.context.invoke('buttons.updateCurrentStyle');\n      if (this.options.followingToolbar) {\n        this.$window.on('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$toolbar.children().remove();\n      if (this.options.followingToolbar) {\n        this.$window.off('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"followScroll\",\n    value: function followScroll() {\n      if (this.$editor.hasClass('fullscreen')) {\n        return false;\n      }\n      var editorHeight = this.$editor.outerHeight();\n      var editorWidth = this.$editor.width();\n      var toolbarHeight = this.$toolbar.height();\n      var statusbarHeight = this.$statusbar.height();\n\n      // check if the web app is currently using another static bar\n      var otherBarHeight = 0;\n      if (this.options.otherStaticBar) {\n        otherBarHeight = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.otherStaticBar).outerHeight();\n      }\n      var currentOffset = this.$document.scrollTop();\n      var editorOffsetTop = this.$editor.offset().top;\n      var editorOffsetBottom = editorOffsetTop + editorHeight;\n      var activateOffset = editorOffsetTop - otherBarHeight;\n      var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n      if (!this.isFollowing && currentOffset > activateOffset && currentOffset < deactivateOffsetBottom - toolbarHeight) {\n        this.isFollowing = true;\n        this.$editable.css({\n          marginTop: this.$toolbar.outerHeight()\n        });\n        this.$toolbar.css({\n          position: 'fixed',\n          top: otherBarHeight,\n          width: editorWidth,\n          zIndex: 1000\n        });\n      } else if (this.isFollowing && (currentOffset < activateOffset || currentOffset > deactivateOffsetBottom)) {\n        this.isFollowing = false;\n        this.$toolbar.css({\n          position: 'relative',\n          top: 0,\n          width: '100%',\n          zIndex: 'auto'\n        });\n        this.$editable.css({\n          marginTop: ''\n        });\n      }\n    }\n  }, {\n    key: \"changeContainer\",\n    value: function changeContainer(isFullscreen) {\n      if (isFullscreen) {\n        this.$toolbar.prependTo(this.$editor);\n      } else {\n        if (this.options.toolbarContainer) {\n          this.$toolbar.appendTo(this.options.toolbarContainer);\n        }\n      }\n      if (this.options.followingToolbar) {\n        this.followScroll();\n      }\n    }\n  }, {\n    key: \"updateFullscreen\",\n    value: function updateFullscreen(isFullscreen) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n      this.changeContainer(isFullscreen);\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n    }\n  }, {\n    key: \"activate\",\n    value: function activate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n      this.ui.toggleBtn($btn, true);\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n      this.ui.toggleBtn($btn, false);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/LinkDialog.js\nfunction LinkDialog_typeof(o) { \"@babel/helpers - typeof\"; return LinkDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, LinkDialog_typeof(o); }\nfunction LinkDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction LinkDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, LinkDialog_toPropertyKey(o.key), o); } }\nfunction LinkDialog_createClass(e, r, t) { return r && LinkDialog_defineProperties(e.prototype, r), t && LinkDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction LinkDialog_toPropertyKey(t) { var i = LinkDialog_toPrimitive(t, \"string\"); return \"symbol\" == LinkDialog_typeof(i) ? i : i + \"\"; }\nfunction LinkDialog_toPrimitive(t, r) { if (\"object\" != LinkDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != LinkDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar LinkDialog_MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nvar LinkDialog_TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nvar LinkDialog_URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\nvar LinkDialog = /*#__PURE__*/function () {\n  function LinkDialog(context) {\n    LinkDialog_classCallCheck(this, LinkDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n  return LinkDialog_createClass(LinkDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.textToDisplay, \"</label>\"), \"<input id=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-link-text form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>', '<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.url, \"</label>\"), \"<input id=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-link-url form-control note-form-control note-input\\\" type=\\\"text\\\" value=\\\"http://\\\"/>\"), '</div>', !this.options.disableLinkTarget ? external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(this.ui.checkbox({\n        className: 'sn-checkbox-open-in-new-window',\n        text: this.lang.link.openInNewWindow,\n        checked: true\n      }).render()).html() : ''].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.link.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        className: 'link-dialog',\n        title: this.lang.link.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"checkLinkUrl\",\n    value: function checkLinkUrl(linkUrl) {\n      if (LinkDialog_MAILTO_PATTERN.test(linkUrl)) {\n        return 'mailto://' + linkUrl;\n      } else if (LinkDialog_TEL_PATTERN.test(linkUrl)) {\n        return 'tel://' + linkUrl;\n      } else if (!LinkDialog_URL_SCHEME_PATTERN.test(linkUrl)) {\n        return 'http://' + linkUrl;\n      }\n      return linkUrl;\n    }\n  }, {\n    key: \"onCheckLinkUrl\",\n    value: function onCheckLinkUrl($input) {\n      var _this = this;\n      $input.on('blur', function (event) {\n        event.target.value = event.target.value == '' ? '' : _this.checkLinkUrl(event.target.value);\n      });\n    }\n\n    /**\n     * toggle update button\n     */\n  }, {\n    key: \"toggleLinkBtn\",\n    value: function toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n      this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n    }\n\n    /**\n     * Show link dialog and set event handlers on dialog controls.\n     *\n     * @param {Object} linkInfo\n     * @return {Promise}\n     */\n  }, {\n    key: \"showLinkDialog\",\n    value: function showLinkDialog(linkInfo) {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $linkText = _this2.$dialog.find('.note-link-text');\n        var $linkUrl = _this2.$dialog.find('.note-link-url');\n        var $linkBtn = _this2.$dialog.find('.note-link-btn');\n        var $openInNewWindow = _this2.$dialog.find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          // If no url was given and given text is valid URL then copy that into URL Field\n          if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n            linkInfo.url = _this2.checkLinkUrl(linkInfo.text);\n          }\n          $linkText.on('input paste propertychange', function () {\n            // If linktext was modified by input events,\n            // cloning text from linkUrl will be stopped.\n            var text = $linkText.val();\n            var div = document.createElement('div');\n            div.innerText = text;\n            text = div.innerHTML;\n            linkInfo.text = text;\n            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.text);\n          $linkUrl.on('input paste propertychange', function () {\n            // Display same text on `Text to display` as default\n            // when linktext has no text\n            if (!linkInfo.text) {\n              $linkText.val($linkUrl.val());\n            }\n            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.url);\n          if (!env.isSupportTouch) {\n            $linkUrl.trigger('focus');\n          }\n          _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          _this2.bindEnterKey($linkUrl, $linkBtn);\n          _this2.bindEnterKey($linkText, $linkBtn);\n          _this2.onCheckLinkUrl($linkUrl);\n          var isNewWindowChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this2.context.options.linkTargetBlank;\n          $openInNewWindow.prop('checked', isNewWindowChecked);\n          $linkBtn.one('click', function (event) {\n            event.preventDefault();\n            deferred.resolve({\n              range: linkInfo.range,\n              url: $linkUrl.val(),\n              text: $linkText.val(),\n              isNewWindow: $openInNewWindow.is(':checked')\n            });\n            _this2.ui.hideDialog(_this2.$dialog);\n          });\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          // detach events\n          $linkText.off();\n          $linkUrl.off();\n          $linkBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n\n    /**\n     * @param {Object} layoutInfo\n     */\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n      var linkInfo = this.context.invoke('editor.getLinkInfo');\n      this.context.invoke('editor.saveRange');\n      this.showLinkDialog(linkInfo).then(function (linkInfo) {\n        _this3.context.invoke('editor.restoreRange');\n        _this3.context.invoke('editor.createLink', linkInfo);\n      }).fail(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/LinkPopover.js\nfunction LinkPopover_typeof(o) { \"@babel/helpers - typeof\"; return LinkPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, LinkPopover_typeof(o); }\nfunction LinkPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction LinkPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, LinkPopover_toPropertyKey(o.key), o); } }\nfunction LinkPopover_createClass(e, r, t) { return r && LinkPopover_defineProperties(e.prototype, r), t && LinkPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction LinkPopover_toPropertyKey(t) { var i = LinkPopover_toPrimitive(t, \"string\"); return \"symbol\" == LinkPopover_typeof(i) ? i : i + \"\"; }\nfunction LinkPopover_toPrimitive(t, r) { if (\"object\" != LinkPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != LinkPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar LinkPopover = /*#__PURE__*/function () {\n  function LinkPopover(context) {\n    var _this = this;\n    LinkPopover_classCallCheck(this, LinkPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return LinkPopover_createClass(LinkPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.link);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-link-popover',\n        callback: function callback($node) {\n          var $content = $node.find('.popover-content,.note-popover-content');\n          $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n        }\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.link);\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!this.context.invoke('editor.hasFocus')) {\n        this.hide();\n        return;\n      }\n      var rng = this.context.invoke('editor.getLastRange');\n      if (rng.isCollapsed() && rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        var href = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href');\n        this.$popover.find('a').attr('href', href).text(href);\n        var pos = dom.posFromPlaceholder(anchor);\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/ImageDialog.js\nfunction ImageDialog_typeof(o) { \"@babel/helpers - typeof\"; return ImageDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ImageDialog_typeof(o); }\nfunction ImageDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ImageDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ImageDialog_toPropertyKey(o.key), o); } }\nfunction ImageDialog_createClass(e, r, t) { return r && ImageDialog_defineProperties(e.prototype, r), t && ImageDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ImageDialog_toPropertyKey(t) { var i = ImageDialog_toPrimitive(t, \"string\"); return \"symbol\" == ImageDialog_typeof(i) ? i : i + \"\"; }\nfunction ImageDialog_toPrimitive(t, r) { if (\"object\" != ImageDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ImageDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar ImageDialog = /*#__PURE__*/function () {\n  function ImageDialog(context) {\n    ImageDialog_classCallCheck(this, ImageDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return ImageDialog_createClass(ImageDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var imageLimitation = '';\n      if (this.options.maximumImageFileSize) {\n        var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n        var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';\n        imageLimitation = \"<small>\".concat(this.lang.image.maximumFileSize + ' : ' + readableSize, \"</small>\");\n      }\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group note-group-select-from-files\">', '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>', '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ', ' type=\"file\" name=\"files\" accept=\"' + this.options.acceptImageFileTypes + '\" multiple=\"multiple\"/>', imageLimitation, '</div>', '<div class=\"form-group note-group-image-url\">', '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>', '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>', '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.image.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.image.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      this.context.invoke('editor.saveRange');\n      this.showImageDialog().then(function (data) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n        _this.context.invoke('editor.restoreRange');\n        if (typeof data === 'string') {\n          // image url\n          // If onImageLinkInsert set,\n          if (_this.options.callbacks.onImageLinkInsert) {\n            _this.context.triggerEvent('image.link.insert', data);\n          } else {\n            _this.context.invoke('editor.insertImage', data);\n          }\n        } else {\n          // array of files\n          _this.context.invoke('editor.insertImagesOrCallback', data);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n  }, {\n    key: \"showImageDialog\",\n    value: function showImageDialog() {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $imageInput = _this2.$dialog.find('.note-image-input');\n        var $imageUrl = _this2.$dialog.find('.note-image-url');\n        var $imageBtn = _this2.$dialog.find('.note-image-btn');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          // Cloning imageInput to clear element.\n          $imageInput.replaceWith($imageInput.clone().on('change', function (event) {\n            deferred.resolve(event.target.files || event.target.value);\n          }).val(''));\n          $imageUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($imageBtn, $imageUrl.val());\n          }).val('');\n          if (!env.isSupportTouch) {\n            $imageUrl.trigger('focus');\n          }\n          $imageBtn.on('click', function (event) {\n            event.preventDefault();\n            deferred.resolve($imageUrl.val());\n          });\n          _this2.bindEnterKey($imageUrl, $imageBtn);\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $imageInput.off();\n          $imageUrl.off();\n          $imageBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/ImagePopover.js\nfunction ImagePopover_typeof(o) { \"@babel/helpers - typeof\"; return ImagePopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ImagePopover_typeof(o); }\nfunction ImagePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ImagePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ImagePopover_toPropertyKey(o.key), o); } }\nfunction ImagePopover_createClass(e, r, t) { return r && ImagePopover_defineProperties(e.prototype, r), t && ImagePopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ImagePopover_toPropertyKey(t) { var i = ImagePopover_toPrimitive(t, \"string\"); return \"symbol\" == ImagePopover_typeof(i) ? i : i + \"\"; }\nfunction ImagePopover_toPrimitive(t, r) { if (\"object\" != ImagePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ImagePopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nvar ImagePopover = /*#__PURE__*/function () {\n  function ImagePopover(context) {\n    var _this = this;\n    ImagePopover_classCallCheck(this, ImagePopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n    this.events = {\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return ImagePopover_createClass(ImagePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.image);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-image-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.image);\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (dom.isImg(target)) {\n        var position = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target).offset();\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        var pos = {};\n        if (this.options.popatmouse) {\n          pos.left = event.pageX - 20;\n          pos.top = event.pageY;\n        } else {\n          pos = position;\n        }\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/TablePopover.js\nfunction TablePopover_typeof(o) { \"@babel/helpers - typeof\"; return TablePopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, TablePopover_typeof(o); }\nfunction TablePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction TablePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, TablePopover_toPropertyKey(o.key), o); } }\nfunction TablePopover_createClass(e, r, t) { return r && TablePopover_defineProperties(e.prototype, r), t && TablePopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction TablePopover_toPropertyKey(t) { var i = TablePopover_toPrimitive(t, \"string\"); return \"symbol\" == TablePopover_typeof(i) ? i : i + \"\"; }\nfunction TablePopover_toPrimitive(t, r) { if (\"object\" != TablePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != TablePopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar TablePopover = /*#__PURE__*/function () {\n  function TablePopover(context) {\n    var _this = this;\n    TablePopover_classCallCheck(this, TablePopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, event) {\n        _this.update(event.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': function summernoteKeyupSummernoteScrollSummernoteChange() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return TablePopover_createClass(TablePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.table);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-table-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n      // [workaround] Disable Firefox's default table editor\n      if (env.isFF) {\n        document.execCommand('enableInlineTableEditing', false, false);\n      }\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n      var isCell = dom.isCell(target) || dom.isCell(target === null || target === void 0 ? void 0 : target.parentElement);\n      if (isCell) {\n        var pos = dom.posFromPlaceholder(target);\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n      return isCell;\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/VideoDialog.js\nfunction VideoDialog_typeof(o) { \"@babel/helpers - typeof\"; return VideoDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, VideoDialog_typeof(o); }\nfunction VideoDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction VideoDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, VideoDialog_toPropertyKey(o.key), o); } }\nfunction VideoDialog_createClass(e, r, t) { return r && VideoDialog_defineProperties(e.prototype, r), t && VideoDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction VideoDialog_toPropertyKey(t) { var i = VideoDialog_toPrimitive(t, \"string\"); return \"symbol\" == VideoDialog_typeof(i) ? i : i + \"\"; }\nfunction VideoDialog_toPrimitive(t, r) { if (\"object\" != VideoDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != VideoDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar VideoDialog = /*#__PURE__*/function () {\n  function VideoDialog(context) {\n    VideoDialog_classCallCheck(this, VideoDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return VideoDialog_createClass(VideoDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group row-fluid\">', \"<label for=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.video.url, \" <small class=\\\"text-muted\\\">\").concat(this.lang.video.providers, \"</small></label>\"), \"<input id=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-video-url form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.video.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.video.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"createVideoNode\",\n    value: function createVideoNode(url) {\n      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, peertube, mp4, ogg, webm)\n      var ytRegExp = /(?:youtu\\.be\\/|youtube\\.com\\/(?:[^\\/\\n\\s]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/|\\S*?[?&]v=|shorts\\/|live\\/))([^&\\n?]+)(?:.*[?&]t=([^&\\n]+))?.*/;\n      var ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n      var ytMatch = url.match(ytRegExp);\n      var gdRegExp = /(?:\\.|\\/\\/)drive\\.google\\.com\\/file\\/d\\/(.[a-zA-Z0-9_-]*)\\/view/;\n      var gdMatch = url.match(gdRegExp);\n      var igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/(reel|p)\\/(.[a-zA-Z0-9_-]*)/;\n      var igMatch = url.match(igRegExp);\n      var vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n      var vMatch = url.match(vRegExp);\n      var vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n      var vimMatch = url.match(vimRegExp);\n      var dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n      var dmMatch = url.match(dmRegExp);\n      var youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n      var youkuMatch = url.match(youkuRegExp);\n      var peerTubeRegExp = /\\/\\/(.*)\\/videos\\/watch\\/([^?]*)(?:\\?(?:start=(\\w*))?(?:&stop=(\\w*))?(?:&loop=([10]))?(?:&autoplay=([10]))?(?:&muted=([10]))?)?/;\n      var peerTubeMatch = url.match(peerTubeRegExp);\n      var qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n      var qqMatch = url.match(qqRegExp);\n      var qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n      var qqMatch2 = url.match(qqRegExp2);\n      var mp4RegExp = /^.+.(mp4|m4v)$/;\n      var mp4Match = url.match(mp4RegExp);\n      var oggRegExp = /^.+.(ogg|ogv)$/;\n      var oggMatch = url.match(oggRegExp);\n      var webmRegExp = /^.+.(webm)$/;\n      var webmMatch = url.match(webmRegExp);\n      var fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n      var fbMatch = url.match(fbRegExp);\n      var $video;\n      if (ytMatch && ytMatch[1].length === 11) {\n        var youtubeId = ytMatch[1];\n        var start = 0;\n        if (typeof ytMatch[2] !== 'undefined') {\n          var ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n          if (ytMatchForStart) {\n            for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n              start += typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0;\n            }\n          } else {\n            start = parseInt(ytMatch[2], 10);\n          }\n        }\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : '')).attr('width', '640').attr('height', '360');\n      } else if (gdMatch && gdMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://drive.google.com/file/d/' + gdMatch[1] + '/preview').attr('width', '640').attr('height', '480');\n      } else if (igMatch && igMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://instagram.com/p/' + igMatch[2] + '/embed/').attr('width', '612').attr('height', '710').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else if (vMatch && vMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', vMatch[0] + '/embed/simple').attr('width', '600').attr('height', '600').attr('class', 'vine-embed');\n      } else if (vimMatch && vimMatch[3].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('src', '//player.vimeo.com/video/' + vimMatch[3]).attr('width', '640').attr('height', '360');\n      } else if (dmMatch && dmMatch[2].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]).attr('width', '640').attr('height', '360');\n      } else if (youkuMatch && youkuMatch[1].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '498').attr('width', '510').attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n      } else if (peerTubeMatch && peerTubeMatch[0].length) {\n        var begin = 0;\n        if (peerTubeMatch[2] !== 'undefined') begin = peerTubeMatch[2];\n        var end = 0;\n        if (peerTubeMatch[3] !== 'undefined') end = peerTubeMatch[3];\n        var loop = 0;\n        if (peerTubeMatch[4] !== 'undefined') loop = peerTubeMatch[4];\n        var autoplay = 0;\n        if (peerTubeMatch[5] !== 'undefined') autoplay = peerTubeMatch[5];\n        var muted = 0;\n        if (peerTubeMatch[6] !== 'undefined') muted = peerTubeMatch[6];\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe allowfullscreen sandbox=\"allow-same-origin allow-scripts allow-popups\">').attr('frameborder', 0).attr('src', '//' + peerTubeMatch[1] + '/videos/embed/' + peerTubeMatch[2] + \"?loop=\" + loop + \"&autoplay=\" + autoplay + \"&muted=\" + muted + (begin > 0 ? '&start=' + begin : '') + (end > 0 ? '&end=' + start : '')).attr('width', '560').attr('height', '315');\n      } else if (qqMatch && qqMatch[1].length || qqMatch2 && qqMatch2[2].length) {\n        var vid = qqMatch && qqMatch[1].length ? qqMatch[1] : qqMatch2[2];\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '310').attr('width', '500').attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n      } else if (mp4Match || oggMatch || webmMatch) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<video controls>').attr('src', url).attr('width', '640').attr('height', '360');\n      } else if (fbMatch && fbMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560').attr('width', '560').attr('height', '301').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else {\n        // this is not a known video link. Now what, Cat? Now what?\n        return false;\n      }\n      $video.addClass('note-video-clip');\n      return $video[0];\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      var text = this.context.invoke('editor.getSelectedText');\n      this.context.invoke('editor.saveRange');\n      this.showVideoDialog(text).then(function (url) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n        _this.context.invoke('editor.restoreRange');\n\n        // build node\n        var $node = _this.createVideoNode(url);\n        if ($node) {\n          // insert video node\n          _this.context.invoke('editor.insertNode', $node);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n\n    /**\n     * show video dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n  }, {\n    key: \"showVideoDialog\",\n    value: function showVideoDialog( /* text */\n    ) {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $videoUrl = _this2.$dialog.find('.note-video-url');\n        var $videoBtn = _this2.$dialog.find('.note-video-btn');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n          $videoUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($videoBtn, $videoUrl.val());\n          });\n          if (!env.isSupportTouch) {\n            $videoUrl.trigger('focus');\n          }\n          $videoBtn.on('click', function (event) {\n            event.preventDefault();\n            deferred.resolve($videoUrl.val());\n          });\n          _this2.bindEnterKey($videoUrl, $videoBtn);\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $videoUrl.off();\n          $videoBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/HelpDialog.js\nfunction HelpDialog_typeof(o) { \"@babel/helpers - typeof\"; return HelpDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, HelpDialog_typeof(o); }\nfunction HelpDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction HelpDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, HelpDialog_toPropertyKey(o.key), o); } }\nfunction HelpDialog_createClass(e, r, t) { return r && HelpDialog_defineProperties(e.prototype, r), t && HelpDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction HelpDialog_toPropertyKey(t) { var i = HelpDialog_toPrimitive(t, \"string\"); return \"symbol\" == HelpDialog_typeof(i) ? i : i + \"\"; }\nfunction HelpDialog_toPrimitive(t, r) { if (\"object\" != HelpDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != HelpDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar HelpDialog = /*#__PURE__*/function () {\n  function HelpDialog(context) {\n    HelpDialog_classCallCheck(this, HelpDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return HelpDialog_createClass(HelpDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<p class=\"text-center\">', '<a href=\"http://summernote.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Summernote 0.9.1</a> · ', '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\" rel=\"noopener noreferrer\">Project</a> · ', '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\" rel=\"noopener noreferrer\">Issues</a>', '</p>'].join('');\n      this.$dialog = this.ui.dialog({\n        title: this.lang.options.help,\n        fade: this.options.dialogsFade,\n        body: this.createShortcutList(),\n        footer: body,\n        callback: function callback($node) {\n          $node.find('.modal-body,.note-modal-body').css({\n            'max-height': 300,\n            'overflow': 'scroll'\n          });\n        }\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"createShortcutList\",\n    value: function createShortcutList() {\n      var _this = this;\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      return Object.keys(keyMap).map(function (key) {\n        var command = keyMap[key];\n        var $row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div><div class=\"help-list-item\"></div></div>');\n        $row.append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<label><kbd>' + key + '</kdb></label>').css({\n          'width': 180,\n          'margin-right': 10\n        })).append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<span></span>').html(_this.context.memo('help.' + command) || command));\n        return $row.html();\n      }).join('');\n    }\n\n    /**\n     * show help dialog\n     *\n     * @return {Promise}\n     */\n  }, {\n    key: \"showHelpDialog\",\n    value: function showHelpDialog() {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n          deferred.resolve();\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n      this.context.invoke('editor.saveRange');\n      this.showHelpDialog().then(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AirPopover.js\nfunction AirPopover_typeof(o) { \"@babel/helpers - typeof\"; return AirPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AirPopover_typeof(o); }\nfunction AirPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AirPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AirPopover_toPropertyKey(o.key), o); } }\nfunction AirPopover_createClass(e, r, t) { return r && AirPopover_defineProperties(e.prototype, r), t && AirPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AirPopover_toPropertyKey(t) { var i = AirPopover_toPrimitive(t, \"string\"); return \"symbol\" == AirPopover_typeof(i) ? i : i + \"\"; }\nfunction AirPopover_toPrimitive(t, r) { if (\"object\" != AirPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AirPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar AIRMODE_POPOVER_X_OFFSET = -5;\nvar AIRMODE_POPOVER_Y_OFFSET = 5;\nvar AirPopover = /*#__PURE__*/function () {\n  function AirPopover(context) {\n    var _this = this;\n    AirPopover_classCallCheck(this, AirPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n    this.events = {\n      'summernote.contextmenu': function summernoteContextmenu(event) {\n        if (_this.options.editing) {\n          event.preventDefault();\n          event.stopPropagation();\n          _this.onContextmenu = true;\n          _this.update(true);\n        }\n      },\n      'summernote.mousedown': function summernoteMousedown(we, event) {\n        _this.pageX = event.pageX;\n        _this.pageY = event.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteScroll(we, event) {\n        if (_this.options.editing && !_this.onContextmenu) {\n          if (event.type == 'keyup') {\n            var range = _this.context.invoke('editor.getLastRange');\n            var wordRange = range.getWordRange();\n            var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n            _this.pageX = bnd.left;\n            _this.pageY = bnd.top;\n          } else {\n            _this.pageX = event.pageX;\n            _this.pageY = event.pageY;\n          }\n          _this.update();\n        }\n        _this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.focusout': function summernoteFocusout() {\n        if (!_this.$popover.is(':active,:focus')) {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return AirPopover_createClass(AirPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$popover = this.ui.popover({\n        className: 'note-air-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.air);\n\n      // disable hiding this popover preemptively by 'summernote.blur' event.\n      this.$popover.on('mousedown', function () {\n        _this2.hidable = false;\n      });\n      // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n      this.$popover.on('mouseup', function () {\n        _this2.hidable = true;\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(forcelyOpen) {\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n        var rect = {\n          left: this.pageX,\n          top: this.pageY\n        };\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        rect.top -= containerOffset.top;\n        rect.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n          top: rect.top + AIRMODE_POPOVER_Y_OFFSET\n        });\n        this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (this.hidable) {\n        this.$popover.hide();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/HintPopover.js\nfunction HintPopover_typeof(o) { \"@babel/helpers - typeof\"; return HintPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, HintPopover_typeof(o); }\nfunction HintPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction HintPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, HintPopover_toPropertyKey(o.key), o); } }\nfunction HintPopover_createClass(e, r, t) { return r && HintPopover_defineProperties(e.prototype, r), t && HintPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction HintPopover_toPropertyKey(t) { var i = HintPopover_toPrimitive(t, \"string\"); return \"symbol\" == HintPopover_typeof(i) ? i : i + \"\"; }\nfunction HintPopover_toPrimitive(t, r) { if (\"object\" != HintPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != HintPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\nvar POPOVER_DIST = 5;\nvar HintPopover = /*#__PURE__*/function () {\n  function HintPopover(context) {\n    var _this = this;\n    HintPopover_classCallCheck(this, HintPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n  return HintPopover_createClass(HintPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.hints.length > 0;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.lastWordRange = null;\n      this.matchingWord = null;\n      this.$popover = this.ui.popover({\n        className: 'note-hint-popover',\n        hideArrow: true,\n        direction: ''\n      }).render().appendTo(this.options.container);\n      this.$popover.hide();\n      this.$content = this.$popover.find('.popover-content,.note-popover-content');\n      this.$content.on('click', '.note-hint-item', function (event) {\n        _this2.$content.find('.active').removeClass('active');\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget).addClass('active');\n        _this2.replace();\n      });\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"selectItem\",\n    value: function selectItem($item) {\n      this.$content.find('.active').removeClass('active');\n      $item.addClass('active');\n      this.$content[0].scrollTop = $item[0].offsetTop - this.$content.innerHeight() / 2;\n    }\n  }, {\n    key: \"moveDown\",\n    value: function moveDown() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $next = $current.next();\n      if ($next.length) {\n        this.selectItem($next);\n      } else {\n        var $nextGroup = $current.parent().next();\n        if (!$nextGroup.length) {\n          $nextGroup = this.$content.find('.note-hint-group').first();\n        }\n        this.selectItem($nextGroup.find('.note-hint-item').first());\n      }\n    }\n  }, {\n    key: \"moveUp\",\n    value: function moveUp() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $prev = $current.prev();\n      if ($prev.length) {\n        this.selectItem($prev);\n      } else {\n        var $prevGroup = $current.parent().prev();\n        if (!$prevGroup.length) {\n          $prevGroup = this.$content.find('.note-hint-group').last();\n        }\n        this.selectItem($prevGroup.find('.note-hint-item').last());\n      }\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      var $item = this.$content.find('.note-hint-item.active');\n      if ($item.length) {\n        var node = this.nodeFromItem($item);\n        // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n        if (this.matchingWord !== null && this.matchingWord.length === 0) {\n          this.lastWordRange.so = this.lastWordRange.eo;\n          // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n        } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n          var rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n          if (rangeCompute > 0) {\n            this.lastWordRange.so += rangeCompute;\n          }\n        }\n        this.lastWordRange.insertNode(node);\n        if (this.options.hintSelect === 'next') {\n          var blank = document.createTextNode('');\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).after(blank);\n          range.createFromNodeBefore(blank).select();\n        } else {\n          range.createFromNodeAfter(node).select();\n        }\n        this.lastWordRange = null;\n        this.hide();\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"nodeFromItem\",\n    value: function nodeFromItem($item) {\n      var hint = this.hints[$item.data('index')];\n      var item = $item.data('item');\n      var node = hint.content ? hint.content(item) : item;\n      if (typeof node === 'string') {\n        node = dom.createText(node);\n      }\n      return node;\n    }\n  }, {\n    key: \"createItemTemplates\",\n    value: function createItemTemplates(hintIdx, items) {\n      var hint = this.hints[hintIdx];\n      return items.map(function (item, idx) {\n        var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-hint-item\"></div>');\n        $item.append(hint.template ? hint.template(item) : item + '');\n        $item.data({\n          'index': hintIdx,\n          'item': item\n        });\n        if (hintIdx === 0 && idx === 0) {\n          $item.addClass('active');\n        }\n        return $item;\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      if (!this.$popover.is(':visible')) {\n        return;\n      }\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        this.replace();\n      } else if (event.keyCode === key.code.UP) {\n        event.preventDefault();\n        this.moveUp();\n      } else if (event.keyCode === key.code.DOWN) {\n        event.preventDefault();\n        this.moveDown();\n      }\n    }\n  }, {\n    key: \"searchKeyword\",\n    value: function searchKeyword(index, keyword, callback) {\n      var hint = this.hints[index];\n      if (hint && hint.match.test(keyword) && hint.search) {\n        var matches = hint.match.exec(keyword);\n        this.matchingWord = matches[0];\n        hint.search(matches[1], callback);\n      } else {\n        callback();\n      }\n    }\n  }, {\n    key: \"createGroup\",\n    value: function createGroup(idx, keyword) {\n      var _this3 = this;\n      var $group = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n      this.searchKeyword(idx, keyword, function (items) {\n        items = items || [];\n        if (items.length) {\n          $group.html(_this3.createItemTemplates(idx, items));\n          _this3.show();\n        }\n      });\n      return $group;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      var _this4 = this;\n      if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], event.keyCode)) {\n        var _range = this.context.invoke('editor.getLastRange');\n        var wordRange, keyword;\n        if (this.options.hintMode === 'words') {\n          wordRange = _range.getWordsRange(_range);\n          keyword = wordRange.toString();\n          this.hints.forEach(function (hint) {\n            if (hint.match.test(keyword)) {\n              wordRange = _range.getWordsMatchRange(hint.match);\n              return false;\n            }\n          });\n          if (!wordRange) {\n            this.hide();\n            return;\n          }\n          keyword = wordRange.toString();\n        } else {\n          wordRange = _range.getWordRange();\n          keyword = wordRange.toString();\n        }\n        if (this.hints.length && keyword) {\n          this.$content.empty();\n          var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n          var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n          if (bnd) {\n            bnd.top -= containerOffset.top;\n            bnd.left -= containerOffset.left;\n            this.$popover.hide();\n            this.lastWordRange = wordRange;\n            this.hints.forEach(function (hint, idx) {\n              if (hint.match.test(keyword)) {\n                _this4.createGroup(idx, keyword).appendTo(_this4.$content);\n              }\n            });\n            // select first .note-hint-item\n            this.$content.find('.note-hint-item').first().addClass('active');\n\n            // set position for popover after group is created\n            if (this.direction === 'top') {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n              });\n            } else {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top + bnd.height + POPOVER_DIST\n              });\n            }\n          }\n        } else {\n          this.hide();\n        }\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$popover.show();\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/settings.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {\n  version: '0.9.1',\n  plugins: {},\n  dom: dom,\n  range: range,\n  lists: lists,\n  options: {\n    langInfo: (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor,\n      'clipboard': Clipboard,\n      'dropzone': Dropzone,\n      'codeview': CodeView,\n      'statusbar': Statusbar,\n      'fullscreen': Fullscreen,\n      'handle': Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover,\n      'autoLink': AutoLink,\n      'autoSync': AutoSync,\n      'autoReplace': AutoReplace,\n      'placeholder': Placeholder,\n      'buttons': Buttons,\n      'toolbar': Toolbar,\n      'linkDialog': LinkDialog,\n      'linkPopover': LinkPopover,\n      'imageDialog': ImageDialog,\n      'imagePopover': ImagePopover,\n      'tablePopover': TablePopover,\n      'videoDialog': VideoDialog,\n      'helpDialog': HelpDialog,\n      'airPopover': AirPopover\n    },\n    buttons: {},\n    lang: 'en-US',\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']]],\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']], ['float', ['floatLeft', 'floatRight', 'floatNone']], ['remove', ['removeMedia']]],\n      link: [['link', ['linkDialogShow', 'unlink']]],\n      table: [['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]],\n      air: [['color', ['color']], ['font', ['bold', 'underline', 'clear']], ['para', ['ul', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], ['view', ['fullscreen', 'codeview']]]\n    },\n    // link options\n    linkAddNoReferrer: false,\n    addLinkNoOpener: false,\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false,\n    // TBD\n\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n    focus: false,\n    tabDisable: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n    fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana'],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n    fontSizeUnits: ['px', 'pt'],\n    // pallete colors(n x n)\n    colors: [['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']],\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']],\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00'\n    },\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n    tableClassName: 'table table-bordered',\n    insertTableMaxSize: {\n      col: 10,\n      row: 10\n    },\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n    maximumImageFileSize: null,\n    acceptImageFileTypes: \"image/*\",\n    allowClipboardImagePasting: true,\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null\n    },\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true\n    },\n    codeviewFilter: true,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: ['www.youtube.com', 'www.youtube-nocookie.com', 'www.facebook.com', 'vine.co', 'instagram.com', 'player.vimeo.com', 'www.dailymotion.com', 'player.youku.com', 'jumpingbean.tv', 'v.qq.com'],\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show'\n      },\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show'\n      }\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video'\n    }\n  }\n});\n;// CONCATENATED MODULE: ./src/js/renderer.js\nfunction renderer_typeof(o) { \"@babel/helpers - typeof\"; return renderer_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, renderer_typeof(o); }\nfunction renderer_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction renderer_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, renderer_toPropertyKey(o.key), o); } }\nfunction renderer_createClass(e, r, t) { return r && renderer_defineProperties(e.prototype, r), t && renderer_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction renderer_toPropertyKey(t) { var i = renderer_toPrimitive(t, \"string\"); return \"symbol\" == renderer_typeof(i) ? i : i + \"\"; }\nfunction renderer_toPrimitive(t, r) { if (\"object\" != renderer_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != renderer_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer(markup, children, options, callback) {\n    renderer_classCallCheck(this, Renderer);\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n  return renderer_createClass(Renderer, [{\n    key: \"render\",\n    value: function render($parent) {\n      var $node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.markup);\n      if (this.options && this.options.contents) {\n        $node.html(this.options.contents);\n      }\n      if (this.options && this.options.className) {\n        $node.addClass(this.options.className);\n      }\n      if (this.options && this.options.data) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(this.options.data, function (k, v) {\n          $node.attr('data-' + k, v);\n        });\n      }\n      if (this.options && this.options.click) {\n        $node.on('click', this.options.click);\n      }\n      if (this.children) {\n        var $container = $node.find('.note-children-container');\n        this.children.forEach(function (child) {\n          child.render($container.length ? $container : $node);\n        });\n      }\n      if (this.callback) {\n        this.callback($node, this.options);\n      }\n      if (this.options && this.options.callback) {\n        this.options.callback($node);\n      }\n      if ($parent) {\n        $parent.append($node);\n      }\n      return $node;\n    }\n  }]);\n}();\n/* harmony default export */ const renderer = ({\n  create: function create(markup, callback) {\n    return function () {\n      var options = renderer_typeof(arguments[1]) === 'object' ? arguments[1] : arguments[0];\n      var children = Array.isArray(arguments[0]) ? arguments[0] : [];\n      if (options && options.children) {\n        children = options.children;\n      }\n      return new Renderer(markup, children, options, callback);\n    };\n  }\n});\n;// CONCATENATED MODULE: ./src/styles/lite/js/TooltipUI.js\nfunction TooltipUI_typeof(o) { \"@babel/helpers - typeof\"; return TooltipUI_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, TooltipUI_typeof(o); }\nfunction TooltipUI_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction TooltipUI_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, TooltipUI_toPropertyKey(o.key), o); } }\nfunction TooltipUI_createClass(e, r, t) { return r && TooltipUI_defineProperties(e.prototype, r), t && TooltipUI_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction TooltipUI_toPropertyKey(t) { var i = TooltipUI_toPrimitive(t, \"string\"); return \"symbol\" == TooltipUI_typeof(i) ? i : i + \"\"; }\nfunction TooltipUI_toPrimitive(t, r) { if (\"object\" != TooltipUI_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != TooltipUI_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar TooltipUI = /*#__PURE__*/function () {\n  function TooltipUI($node, options) {\n    TooltipUI_classCallCheck(this, TooltipUI);\n    this.$node = $node;\n    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, {\n      title: '',\n      target: options.container,\n      trigger: 'hover focus',\n      placement: 'bottom'\n    }, options);\n\n    // create tooltip node\n    this.$tooltip = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-tooltip\">', '<div class=\"note-tooltip-arrow\"></div>', '<div class=\"note-tooltip-content\"></div>', '</div>'].join(''));\n\n    // define event\n    if (this.options.trigger !== 'manual') {\n      var showCallback = this.show.bind(this);\n      var hideCallback = this.hide.bind(this);\n      var toggleCallback = this.toggle.bind(this);\n      this.options.trigger.split(' ').forEach(function (eventName) {\n        if (eventName === 'hover') {\n          $node.off('mouseenter mouseleave');\n          $node.on('mouseenter', showCallback).on('mouseleave', hideCallback);\n        } else if (eventName === 'click') {\n          $node.on('click', toggleCallback);\n        } else if (eventName === 'focus') {\n          $node.on('focus', showCallback).on('blur', hideCallback);\n        }\n      });\n    }\n  }\n  return TooltipUI_createClass(TooltipUI, [{\n    key: \"show\",\n    value: function show() {\n      var $node = this.$node;\n      var offset = $node.offset();\n      var targetOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.target).offset();\n      offset.top -= targetOffset.top;\n      offset.left -= targetOffset.left;\n      var $tooltip = this.$tooltip;\n      var title = this.options.title || $node.attr('title') || $node.data('title');\n      var placement = this.options.placement || $node.data('placement');\n      $tooltip.addClass(placement);\n      $tooltip.find('.note-tooltip-content').text(title);\n      $tooltip.appendTo(this.options.target);\n      var nodeWidth = $node.outerWidth();\n      var nodeHeight = $node.outerHeight();\n      var tooltipWidth = $tooltip.outerWidth();\n      var tooltipHeight = $tooltip.outerHeight();\n      if (placement === 'bottom') {\n        $tooltip.css({\n          top: offset.top + nodeHeight,\n          left: offset.left + (nodeWidth / 2 - tooltipWidth / 2)\n        });\n      } else if (placement === 'top') {\n        $tooltip.css({\n          top: offset.top - tooltipHeight,\n          left: offset.left + (nodeWidth / 2 - tooltipWidth / 2)\n        });\n      } else if (placement === 'left') {\n        $tooltip.css({\n          top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n          left: offset.left - tooltipWidth\n        });\n      } else if (placement === 'right') {\n        $tooltip.css({\n          top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n          left: offset.left + nodeWidth\n        });\n      }\n      $tooltip.addClass('in');\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this = this;\n      this.$tooltip.removeClass('in');\n      setTimeout(function () {\n        _this.$tooltip.remove();\n      }, 200);\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.$tooltip.hasClass('in')) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n  }]);\n}();\n/* harmony default export */ const js_TooltipUI = (TooltipUI);\n;// CONCATENATED MODULE: ./src/styles/lite/js/DropdownUI.js\nfunction DropdownUI_typeof(o) { \"@babel/helpers - typeof\"; return DropdownUI_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, DropdownUI_typeof(o); }\nfunction DropdownUI_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction DropdownUI_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, DropdownUI_toPropertyKey(o.key), o); } }\nfunction DropdownUI_createClass(e, r, t) { return r && DropdownUI_defineProperties(e.prototype, r), t && DropdownUI_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction DropdownUI_toPropertyKey(t) { var i = DropdownUI_toPrimitive(t, \"string\"); return \"symbol\" == DropdownUI_typeof(i) ? i : i + \"\"; }\nfunction DropdownUI_toPrimitive(t, r) { if (\"object\" != DropdownUI_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != DropdownUI_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar DropdownUI = /*#__PURE__*/function () {\n  function DropdownUI($node, options) {\n    DropdownUI_classCallCheck(this, DropdownUI);\n    this.$button = $node;\n    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, {\n      target: options.container\n    }, options);\n    this.setEvent();\n  }\n  return DropdownUI_createClass(DropdownUI, [{\n    key: \"setEvent\",\n    value: function setEvent() {\n      var _this = this;\n      this.$button.on('click', function (e) {\n        _this.toggle();\n        e.stopImmediatePropagation();\n      });\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.note-btn-group.open');\n      $parent.find('.note-btn.active').removeClass('active');\n      $parent.removeClass('open');\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$button.addClass('active');\n      this.$button.parent().addClass('open');\n      var $dropdown = this.$button.next();\n      var offset = $dropdown.offset();\n      var width = $dropdown.outerWidth();\n      var windowWidth = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window).width();\n      var targetMarginRight = parseFloat(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.target).css('margin-right'));\n      if (offset.left + width > windowWidth - targetMarginRight) {\n        $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width));\n      } else {\n        $dropdown.css('margin-left', '');\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$button.removeClass('active');\n      this.$button.parent().removeClass('open');\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      var isOpened = this.$button.parent().hasClass('open');\n      this.clear();\n      if (isOpened) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n  }]);\n}();\nexternal_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document).on('click.note-dropdown-menu', function (e) {\n  if (!external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.target).closest('.note-btn-group').length) {\n    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.note-btn-group.open .note-btn.active').removeClass('active');\n    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.note-btn-group.open').removeClass('open');\n  }\n});\nexternal_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document).on('click.note-dropdown-menu', function (e) {\n  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.target).closest('.note-dropdown-menu').parent().removeClass('open');\n  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.target).closest('.note-dropdown-menu').parent().find('.note-btn.active').removeClass('active');\n});\n/* harmony default export */ const js_DropdownUI = (DropdownUI);\n;// CONCATENATED MODULE: ./src/styles/lite/js/ModalUI.js\nfunction ModalUI_typeof(o) { \"@babel/helpers - typeof\"; return ModalUI_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ModalUI_typeof(o); }\nfunction ModalUI_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ModalUI_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ModalUI_toPropertyKey(o.key), o); } }\nfunction ModalUI_createClass(e, r, t) { return r && ModalUI_defineProperties(e.prototype, r), t && ModalUI_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ModalUI_toPropertyKey(t) { var i = ModalUI_toPrimitive(t, \"string\"); return \"symbol\" == ModalUI_typeof(i) ? i : i + \"\"; }\nfunction ModalUI_toPrimitive(t, r) { if (\"object\" != ModalUI_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ModalUI_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar ModalUI = /*#__PURE__*/function () {\n  function ModalUI($node /*, options */) {\n    ModalUI_classCallCheck(this, ModalUI);\n    this.$modal = $node;\n    this.$backdrop = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-modal-backdrop\"></div>');\n  }\n  return ModalUI_createClass(ModalUI, [{\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      this.$backdrop.appendTo(document.body).show();\n      this.$modal.addClass('open').show();\n      this.$modal.trigger('note.modal.show');\n      this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this));\n      this.$modal.on('keydown', function (event) {\n        if (event.which === 27) {\n          event.preventDefault();\n          _this.hide();\n        }\n      });\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$modal.removeClass('open').hide();\n      this.$backdrop.hide();\n      this.$modal.trigger('note.modal.hide');\n      this.$modal.off('keydown');\n    }\n  }]);\n}();\n/* harmony default export */ const js_ModalUI = (ModalUI);\n;// CONCATENATED MODULE: ./src/styles/lite/summernote-lite.js\n\n\n\n\n\n\n\nvar editor = renderer.create('<div class=\"note-editor note-frame\"></div>');\nvar toolbar = renderer.create('<div class=\"note-toolbar\" role=\"toolbar\"></div>');\nvar editingArea = renderer.create('<div class=\"note-editing-area\"></div>');\nvar codable = renderer.create('<textarea class=\"note-codable\" aria-multiline=\"true\"></textarea>');\nvar editable = renderer.create('<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>');\nvar statusbar = renderer.create(['<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>', '<div class=\"note-statusbar\" role=\"status\">', '<div class=\"note-resizebar\" aria-label=\"resize\">', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '</div>', '</div>'].join(''));\nvar airEditor = renderer.create('<div class=\"note-editor note-airframe\"></div>');\nvar airEditable = renderer.create(['<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>', '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>'].join(''));\nvar buttonGroup = renderer.create('<div class=\"note-btn-group\"></div>');\nvar summernote_lite_button = renderer.create('<button type=\"button\" class=\"note-btn\" tabindex=\"-1\"></button>', function ($node, options) {\n  // set button type\n  if (options && options.tooltip) {\n    $node.attr({\n      'aria-label': options.tooltip\n    });\n    $node.data('_lite_tooltip', new js_TooltipUI($node, {\n      title: options.tooltip,\n      container: options.container\n    })).on('click', function (e) {\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.currentTarget).data('_lite_tooltip').hide();\n    });\n  }\n  if (options.contents) {\n    $node.html(options.contents);\n  }\n  if (options && options.data && options.data.toggle === 'dropdown') {\n    $node.data('_lite_dropdown', new js_DropdownUI($node, {\n      container: options.container\n    }));\n  }\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dropdown = renderer.create('<div class=\"note-dropdown-menu\" role=\"list\"></div>', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var $temp = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + value + '\"></a>');\n    $temp.html(content).data('item', item);\n    return $temp;\n  }) : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  $node.on('click', '> .note-dropdown-item', function (e) {\n    var $a = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this);\n    var item = $a.data('item');\n    var value = $a.data('value');\n    if (item.click) {\n      item.click($a);\n    } else if (options.itemClick) {\n      options.itemClick(e, item, value);\n    }\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dropdownCheck = renderer.create('<div class=\"note-dropdown-menu note-check\" role=\"list\"></div>', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var $temp = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\"></a>');\n    $temp.html([icon(options.checkClassName), ' ', content]).data('item', item);\n    return $temp;\n  }) : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  $node.on('click', '> .note-dropdown-item', function (e) {\n    var $a = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this);\n    var item = $a.data('item');\n    var value = $a.data('value');\n    if (item.click) {\n      item.click($a);\n    } else if (options.itemClick) {\n      options.itemClick(e, item, value);\n    }\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dropdownButtonContents = function dropdownButtonContents(contents, options) {\n  return contents + ' ' + icon(options.icons.caret, 'span');\n};\nvar dropdownButton = function dropdownButton(opt, callback) {\n  return buttonGroup([summernote_lite_button({\n    className: 'dropdown-toggle',\n    contents: opt.title + ' ' + icon('note-icon-caret'),\n    tooltip: opt.tooltip,\n    data: {\n      toggle: 'dropdown'\n    }\n  }), dropdown({\n    className: opt.className,\n    items: opt.items,\n    template: opt.template,\n    itemClick: opt.itemClick\n  })], {\n    callback: callback\n  }).render();\n};\nvar dropdownCheckButton = function dropdownCheckButton(opt, callback) {\n  return buttonGroup([summernote_lite_button({\n    className: 'dropdown-toggle',\n    contents: opt.title + ' ' + icon('note-icon-caret'),\n    tooltip: opt.tooltip,\n    data: {\n      toggle: 'dropdown'\n    }\n  }), dropdownCheck({\n    className: opt.className,\n    checkClassName: opt.checkClassName,\n    items: opt.items,\n    template: opt.template,\n    itemClick: opt.itemClick\n  })], {\n    callback: callback\n  }).render();\n};\nvar paragraphDropdownButton = function paragraphDropdownButton(opt) {\n  return buttonGroup([summernote_lite_button({\n    className: 'dropdown-toggle',\n    contents: opt.title + ' ' + icon('note-icon-caret'),\n    tooltip: opt.tooltip,\n    data: {\n      toggle: 'dropdown'\n    }\n  }), dropdown([buttonGroup({\n    className: 'note-align',\n    children: opt.items[0]\n  }), buttonGroup({\n    className: 'note-list',\n    children: opt.items[1]\n  })])]).render();\n};\nvar tableMoveHandler = function tableMoveHandler(event, col, row) {\n  var PX_PER_EM = 18;\n  var $picker = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n  var $dimensionDisplay = $picker.next();\n  var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n  var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n  var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n  var posOffset;\n  // HTML5 with jQuery - e.offsetX is undefined in Firefox\n  if (event.offsetX === undefined) {\n    var posCatcher = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target).offset();\n    posOffset = {\n      x: event.pageX - posCatcher.left,\n      y: event.pageY - posCatcher.top\n    };\n  } else {\n    posOffset = {\n      x: event.offsetX,\n      y: event.offsetY\n    };\n  }\n  var dim = {\n    c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n    r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n  };\n  $highlighted.css({\n    width: dim.c + 'em',\n    height: dim.r + 'em'\n  });\n  $catcher.data('value', dim.c + 'x' + dim.r);\n  if (dim.c > 3 && dim.c < col) {\n    $unhighlighted.css({\n      width: dim.c + 1 + 'em'\n    });\n  }\n  if (dim.r > 3 && dim.r < row) {\n    $unhighlighted.css({\n      height: dim.r + 1 + 'em'\n    });\n  }\n  $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n};\nvar tableDropdownButton = function tableDropdownButton(opt) {\n  return buttonGroup([summernote_lite_button({\n    className: 'dropdown-toggle',\n    contents: opt.title + ' ' + icon('note-icon-caret'),\n    tooltip: opt.tooltip,\n    data: {\n      toggle: 'dropdown'\n    }\n  }), dropdown({\n    className: 'note-table',\n    items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n  })], {\n    callback: function callback($node) {\n      var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n      $catcher.css({\n        width: opt.col + 'em',\n        height: opt.row + 'em'\n      }).on('mouseup', opt.itemClick).on('mousemove', function (e) {\n        tableMoveHandler(e, opt.col, opt.row);\n      });\n    }\n  }).render();\n};\nvar palette = renderer.create('<div class=\"note-color-palette\"></div>', function ($node, options) {\n  var contents = [];\n  for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n    var eventName = options.eventName;\n    var colors = options.colors[row];\n    var colorsName = options.colorsName[row];\n    var buttons = [];\n    for (var col = 0, colSize = colors.length; col < colSize; col++) {\n      var color = colors[col];\n      var colorName = colorsName[col];\n      buttons.push(['<button type=\"button\" class=\"note-btn note-color-btn\"', 'style=\"background-color:', color, '\" ', 'data-event=\"', eventName, '\" ', 'data-value=\"', color, '\" ', 'data-title=\"', colorName, '\" ', 'aria-label=\"', colorName, '\" ', 'data-toggle=\"button\" tabindex=\"-1\"></button>'].join(''));\n    }\n    contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n  }\n  $node.html(contents.join(''));\n  $node.find('.note-color-btn').each(function () {\n    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this).data('_lite_tooltip', new js_TooltipUI(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this), {\n      container: options.container\n    }));\n  });\n});\nvar colorDropdownButton = function colorDropdownButton(opt, type) {\n  return buttonGroup({\n    className: 'note-color',\n    children: [summernote_lite_button({\n      className: 'note-current-color-button',\n      contents: opt.title,\n      tooltip: opt.lang.color.recent,\n      click: opt.currentClick,\n      callback: function callback($button) {\n        var $recentColor = $button.find('.note-recent-color');\n        if (type !== 'foreColor') {\n          $recentColor.css('background-color', '#FFFF00');\n          $button.attr('data-backColor', '#FFFF00');\n        }\n      }\n    }), summernote_lite_button({\n      className: 'dropdown-toggle',\n      contents: icon('note-icon-caret'),\n      tooltip: opt.lang.color.more,\n      data: {\n        toggle: 'dropdown'\n      }\n    }), dropdown({\n      items: ['<div>', '<div class=\"note-btn-group btn-background-color\">', '<div class=\"note-palette-title\">' + opt.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"backColor\" data-value=\"transparent\">', opt.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"></div>', '<div class=\"btn-sm\">', '<input type=\"color\" id=\"html5bcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">', '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"backColor\" data-value=\"cpbackColor\">', opt.lang.color.cpSelect, '</button>', '</div>', '</div>', '<div class=\"note-btn-group btn-foreground-color\">', '<div class=\"note-palette-title\">' + opt.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"removeFormat\" data-value=\"foreColor\">', opt.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"></div>', '<div class=\"btn-sm\">', '<input type=\"color\" id=\"html5fcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">', '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"foreColor\" data-value=\"cpforeColor\">', opt.lang.color.cpSelect, '</button>', '</div>', '</div>', '</div>'].join(''),\n      callback: function callback($dropdown) {\n        $dropdown.find('.note-holder').each(function () {\n          var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this);\n          $holder.append(palette({\n            colors: opt.colors,\n            eventName: $holder.data('event')\n          }).render());\n        });\n        if (type === 'fore') {\n          $dropdown.find('.btn-background-color').hide();\n          $dropdown.css({\n            'min-width': '210px'\n          });\n        } else if (type === 'back') {\n          $dropdown.find('.btn-foreground-color').hide();\n          $dropdown.css({\n            'min-width': '210px'\n          });\n        }\n      },\n      click: function click(event) {\n        var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n        var eventName = $button.data('event');\n        var value = $button.data('value');\n        var foreinput = document.getElementById('html5fcp').value;\n        var backinput = document.getElementById('html5bcp').value;\n        if (value === 'cp') {\n          event.stopPropagation();\n        } else if (value === 'cpbackColor') {\n          value = backinput;\n        } else if (value === 'cpforeColor') {\n          value = foreinput;\n        }\n        if (eventName && value) {\n          var key = eventName === 'backColor' ? 'background-color' : 'color';\n          var $color = $button.closest('.note-color').find('.note-recent-color');\n          var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n          $color.css(key, value);\n          $currentButton.attr('data-' + eventName, value);\n          if (type === 'fore') {\n            opt.itemClick('foreColor', value);\n          } else if (type === 'back') {\n            opt.itemClick('backColor', value);\n          } else {\n            opt.itemClick(eventName, value);\n          }\n        }\n      }\n    })]\n  }).render();\n};\nvar dialog = renderer.create('<div class=\"note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"></div>', function ($node, options) {\n  if (options.fade) {\n    $node.addClass('fade');\n  }\n  $node.attr({\n    'aria-label': options.title\n  });\n  $node.html(['<div class=\"note-modal-content\">', options.title ? '<div class=\"note-modal-header\"><button type=\"button\" class=\"close\" aria-label=\"Close\" aria-hidden=\"true\"><i class=\"note-icon-close\"></i></button><h4 class=\"note-modal-title\">' + options.title + '</h4></div>' : '', '<div class=\"note-modal-body\">' + options.body + '</div>', options.footer ? '<div class=\"note-modal-footer\">' + options.footer + '</div>' : '', '</div>'].join(''));\n  $node.data('modal', new js_ModalUI($node, options));\n});\nvar videoDialog = function videoDialog(opt) {\n  var body = '<div class=\"note-form-group\">' + '<label for=\"note-dialog-video-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.video.url + ' <small class=\"text-muted\">' + opt.lang.video.providers + '</small></label>' + '<input id=\"note-dialog-video-url-' + opt.id + '\" class=\"note-video-url note-input\" type=\"text\"/>' + '</div>';\n  var footer = ['<button type=\"button\" href=\"#\" class=\"note-btn note-btn-primary note-video-btn disabled\" disabled>', opt.lang.video.insert, '</button>'].join('');\n  return dialog({\n    title: opt.lang.video.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer\n  }).render();\n};\nvar imageDialog = function imageDialog(opt) {\n  var body = '<div class=\"note-form-group note-group-select-from-files\">' + '<label for=\"note-dialog-image-file-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.image.selectFromFiles + '</label>' + '<input id=\"note-dialog-image-file-' + opt.id + '\" class=\"note-note-image-input note-input\" type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>' + opt.imageLimitation + '</div>' + '<div class=\"note-form-group\">' + '<label for=\"note-dialog-image-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.image.url + '</label>' + '<input id=\"note-dialog-image-url-' + opt.id + '\" class=\"note-image-url note-input\" type=\"text\"/>' + '</div>';\n  var footer = ['<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-btn-large note-image-btn disabled\" disabled>', opt.lang.image.insert, '</button>'].join('');\n  return dialog({\n    title: opt.lang.image.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer\n  }).render();\n};\nvar linkDialog = function linkDialog(opt) {\n  var body = '<div class=\"note-form-group\">' + '<label for=\"note-dialog-link-txt-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.link.textToDisplay + '</label>' + '<input id=\"note-dialog-link-txt-' + opt.id + '\" class=\"note-link-text note-input\" type=\"text\"/>' + '</div>' + '<div class=\"note-form-group\">' + '<label for=\"note-dialog-link-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.link.url + '</label>' + '<input id=\"note-dialog-link-url-' + opt.id + '\" class=\"note-link-url note-input\" type=\"text\" value=\"http://\"/>' + '</div>' + (!opt.disableLinkTarget ? '<div class=\"checkbox\"><label for=\"note-dialog-link-nw-' + opt.id + '\"><input id=\"note-dialog-link-nw-' + opt.id + '\" type=\"checkbox\" checked> ' + opt.lang.link.openInNewWindow + '</label></div>' : '');\n  var footer = ['<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-link-btn disabled\" disabled>', opt.lang.link.insert, '</button>'].join('');\n  return dialog({\n    className: 'link-dialog',\n    title: opt.lang.link.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer\n  }).render();\n};\nvar popover = renderer.create(['<div class=\"note-popover bottom\">', '<div class=\"note-popover-arrow\"></div>', '<div class=\"popover-content note-children-container\"></div>', '</div>'].join(''), function ($node, options) {\n  var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n  $node.addClass(direction).hide();\n  if (options.hideArrow) {\n    $node.find('.note-popover-arrow').hide();\n  }\n});\nvar summernote_lite_checkbox = renderer.create('<div class=\"checkbox\"></div>', function ($node, options) {\n  $node.html(['<label' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>', '<input role=\"checkbox\" type=\"checkbox\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''), options.checked ? ' checked' : '', ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>', options.text ? options.text : '', '</label>'].join(''));\n});\nvar icon = function icon(iconClassName, tagName) {\n  if (iconClassName.match(/^</)) {\n    return iconClassName;\n  }\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"></' + tagName + '>';\n};\nvar ui = function ui(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    button: summernote_lite_button,\n    dropdown: dropdown,\n    dropdownCheck: dropdownCheck,\n    dropdownButton: dropdownButton,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheckButton: dropdownCheckButton,\n    paragraphDropdownButton: paragraphDropdownButton,\n    tableDropdownButton: tableDropdownButton,\n    colorDropdownButton: colorDropdownButton,\n    palette: palette,\n    dialog: dialog,\n    videoDialog: videoDialog,\n    imageDialog: imageDialog,\n    linkDialog: linkDialog,\n    popover: popover,\n    checkbox: summernote_lite_checkbox,\n    icon: icon,\n    options: editorOptions,\n    toggleBtn: function toggleBtn($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n    toggleBtnActive: function toggleBtnActive($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n    check: function check($dom, value) {\n      $dom.find('.checked').removeClass('checked');\n      $dom.find('[data-value=\"' + value + '\"]').addClass('checked');\n    },\n    onDialogShown: function onDialogShown($dialog, handler) {\n      $dialog.one('note.modal.show', handler);\n    },\n    onDialogHidden: function onDialogHidden($dialog, handler) {\n      $dialog.one('note.modal.hide', handler);\n    },\n    showDialog: function showDialog($dialog) {\n      $dialog.data('modal').show();\n    },\n    hideDialog: function hideDialog($dialog) {\n      $dialog.data('modal').hide();\n    },\n    /**\n     * get popover content area\n     *\n     * @param $popover\n     * @returns {*}\n     */\n    getPopoverContent: function getPopoverContent($popover) {\n      return $popover.find('.note-popover-content');\n    },\n    /**\n     * get dialog's body area\n     *\n     * @param $dialog\n     * @returns {*}\n     */\n    getDialogBody: function getDialogBody($dialog) {\n      return $dialog.find('.note-modal-body');\n    },\n    createLayout: function createLayout($note) {\n      var $editor = (editorOptions.airMode ? airEditor([editingArea([codable(), airEditable()])]) : editorOptions.toolbarPosition === 'bottom' ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()]) : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])).render();\n      $editor.insertAfter($note);\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar')\n      };\n    },\n    removeLayout: function removeLayout($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.off('summernote'); // remove summernote custom event\n      $note.show();\n    }\n  };\n};\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {\n  ui_template: ui,\n  \"interface\": 'lite'\n});\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote-lite.js.map"
  },
  {
    "path": "public/vendor/summernote/0.9.1/summernote.css",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n@font-face {\n    font-family: \"summernote\";\n    font-style: normal;\n    font-weight: 400;\n    font-display: auto;\n    src: url(\"./font/summernote.eot?#iefix\") format(\"embedded-opentype\"), url(\"./font/summernote.woff2\") format(\"woff2\"), url(\"./font/summernote.woff\") format(\"woff\"), url(\"./font/summernote.ttf\") format(\"truetype\");\n}\n[class^=note-icon]:before,\n[class*=\" note-icon\"]:before {\n    display: inline-block;\n    font-family: \"summernote\";\n    font-style: normal;\n    font-size: inherit;\n    text-decoration: inherit;\n    text-rendering: auto;\n    text-transform: none;\n    vertical-align: middle;\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-font-smoothing: antialiased;\n    speak: none;\n}\n\n.note-icon-fw {\n    text-align: center;\n    width: 1.25em;\n}\n\n.note-icon-border {\n    border: solid 0.08em #eee;\n    border-radius: 0.1em;\n    padding: 0.2em 0.25em 0.15em;\n}\n\n.note-icon-pull-left {\n    float: left;\n}\n\n.note-icon-pull-right {\n    float: right;\n}\n\n.note-icon.note-icon-pull-left {\n    margin-right: 0.3em;\n}\n.note-icon.note-icon-pull-right {\n    margin-left: 0.3em;\n}\n\n.note-icon-align::before {\n    content: \"\\ea01\";\n}\n\n.note-icon-align-center::before {\n    content: \"\\ea02\";\n}\n\n.note-icon-align-indent::before {\n    content: \"\\ea03\";\n}\n\n.note-icon-align-justify::before {\n    content: \"\\ea04\";\n}\n\n.note-icon-align-left::before {\n    content: \"\\ea05\";\n}\n\n.note-icon-align-outdent::before {\n    content: \"\\ea06\";\n}\n\n.note-icon-align-right::before {\n    content: \"\\ea07\";\n}\n\n.note-icon-arrow-circle-down::before {\n    content: \"\\ea08\";\n}\n\n.note-icon-arrow-circle-left::before {\n    content: \"\\ea09\";\n}\n\n.note-icon-arrow-circle-right::before {\n    content: \"\\ea0a\";\n}\n\n.note-icon-arrow-circle-up::before {\n    content: \"\\ea0b\";\n}\n\n.note-icon-arrows-alt::before {\n    content: \"\\ea0c\";\n}\n\n.note-icon-arrows-h::before {\n    content: \"\\ea0d\";\n}\n\n.note-icon-arrows-v::before {\n    content: \"\\ea0e\";\n}\n\n.note-icon-bold::before {\n    content: \"\\ea0f\";\n}\n\n.note-icon-caret::before {\n    content: \"\\ea10\";\n}\n\n.note-icon-chain-broken::before {\n    content: \"\\ea11\";\n}\n\n.note-icon-circle::before {\n    content: \"\\ea12\";\n}\n\n.note-icon-close::before {\n    content: \"\\ea13\";\n}\n\n.note-icon-code::before {\n    content: \"\\ea14\";\n}\n\n.note-icon-col-after::before {\n    content: \"\\ea15\";\n}\n\n.note-icon-col-before::before {\n    content: \"\\ea16\";\n}\n\n.note-icon-col-remove::before {\n    content: \"\\ea17\";\n}\n\n.note-icon-eraser::before {\n    content: \"\\ea18\";\n}\n\n.note-icon-float-left::before {\n    content: \"\\ea19\";\n}\n\n.note-icon-float-none::before {\n    content: \"\\ea1a\";\n}\n\n.note-icon-float-right::before {\n    content: \"\\ea1b\";\n}\n\n.note-icon-font::before {\n    content: \"\\ea1c\";\n}\n\n.note-icon-frame::before {\n    content: \"\\ea1d\";\n}\n\n.note-icon-italic::before {\n    content: \"\\ea1e\";\n}\n\n.note-icon-link::before {\n    content: \"\\ea1f\";\n}\n\n.note-icon-magic::before {\n    content: \"\\ea20\";\n}\n\n.note-icon-menu-check::before {\n    content: \"\\ea21\";\n}\n\n.note-icon-minus::before {\n    content: \"\\ea22\";\n}\n\n.note-icon-orderedlist::before {\n    content: \"\\ea23\";\n}\n\n.note-icon-pencil::before {\n    content: \"\\ea24\";\n}\n\n.note-icon-picture::before {\n    content: \"\\ea25\";\n}\n\n.note-icon-question::before {\n    content: \"\\ea26\";\n}\n\n.note-icon-redo::before {\n    content: \"\\ea27\";\n}\n\n.note-icon-rollback::before {\n    content: \"\\ea28\";\n}\n\n.note-icon-row-above::before {\n    content: \"\\ea29\";\n}\n\n.note-icon-row-below::before {\n    content: \"\\ea2a\";\n}\n\n.note-icon-row-remove::before {\n    content: \"\\ea2b\";\n}\n\n.note-icon-special-character::before {\n    content: \"\\ea2c\";\n}\n\n.note-icon-square::before {\n    content: \"\\ea2d\";\n}\n\n.note-icon-strikethrough::before {\n    content: \"\\ea2e\";\n}\n\n.note-icon-subscript::before {\n    content: \"\\ea2f\";\n}\n\n.note-icon-summernote::before {\n    content: \"\\ea30\";\n}\n\n.note-icon-superscript::before {\n    content: \"\\ea31\";\n}\n\n.note-icon-table::before {\n    content: \"\\ea32\";\n}\n\n.note-icon-text-height::before {\n    content: \"\\ea33\";\n}\n\n.note-icon-trash::before {\n    content: \"\\ea34\";\n}\n\n.note-icon-underline::before {\n    content: \"\\ea35\";\n}\n\n.note-icon-undo::before {\n    content: \"\\ea36\";\n}\n\n.note-icon-unorderedlist::before {\n    content: \"\\ea37\";\n}\n\n.note-icon-video::before {\n    content: \"\\ea38\";\n}\n\n/* Theme Variables\n ------------------------------------------ */\n/* Layout\n ------------------------------------------ */\n.note-editor {\n    position: relative;\n}\n.note-editor .note-dropzone {\n    position: absolute;\n    display: none;\n    z-index: 100;\n    color: lightskyblue;\n    background-color: #fff;\n    opacity: 0.95;\n}\n.note-editor .note-dropzone .note-dropzone-message {\n    display: table-cell;\n    vertical-align: middle;\n    text-align: center;\n    font-size: 28px;\n    font-weight: 700;\n}\n.note-editor .note-dropzone.hover {\n    color: #098ddf;\n}\n.note-editor.dragover .note-dropzone {\n    display: table;\n}\n.note-editor .note-editing-area {\n    position: relative;\n}\n.note-editor .note-editing-area .note-editable {\n    outline: none;\n}\n.note-editor .note-editing-area .note-editable sup {\n    vertical-align: super;\n}\n.note-editor .note-editing-area .note-editable sub {\n    vertical-align: sub;\n}\n.note-editor .note-editing-area .note-editable img.note-float-left {\n    margin-right: 10px;\n}\n.note-editor .note-editing-area .note-editable img.note-float-right {\n    margin-left: 10px;\n}\n\n/* Frame mode layout\n ------------------------------------------ */\n.note-editor.note-frame,\n.note-editor.note-airframe {\n    border: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame.codeview .note-editing-area .note-editable,\n.note-editor.note-airframe.codeview .note-editing-area .note-editable {\n    display: none;\n}\n.note-editor.note-frame.codeview .note-editing-area .note-codable,\n.note-editor.note-airframe.codeview .note-editing-area .note-codable {\n    display: block;\n}\n.note-editor.note-frame .note-editing-area,\n.note-editor.note-airframe .note-editing-area {\n    overflow: hidden;\n}\n.note-editor.note-frame .note-editing-area .note-editable,\n.note-editor.note-airframe .note-editing-area .note-editable {\n    padding: 10px;\n    overflow: auto;\n    word-wrap: break-word;\n}\n.note-editor.note-frame .note-editing-area .note-editable[contenteditable=false],\n.note-editor.note-airframe .note-editing-area .note-editable[contenteditable=false] {\n    background-color: rgba(128, 128, 128, 0.1137254902);\n}\n.note-editor.note-frame .note-editing-area .note-codable,\n.note-editor.note-airframe .note-editing-area .note-codable {\n    display: none;\n    width: 100%;\n    padding: 10px;\n    border: none;\n    box-shadow: none;\n    font-family: Menlo, Monaco, monospace, sans-serif;\n    font-size: 14px;\n    color: #ccc;\n    background-color: #222;\n    resize: none;\n    outline: none;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n    border-radius: 0;\n    margin-bottom: 0;\n}\n.note-editor.note-frame.fullscreen,\n.note-editor.note-airframe.fullscreen {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100% !important;\n    z-index: 1050;\n}\n.note-editor.note-frame.fullscreen .note-resizebar,\n.note-editor.note-airframe.fullscreen .note-resizebar {\n    display: none;\n}\n.note-editor.note-frame .note-status-output,\n.note-editor.note-airframe .note-status-output {\n    display: block;\n    width: 100%;\n    font-size: 14px;\n    line-height: 1.42857143;\n    height: 20px;\n    margin-bottom: 0;\n    color: #000;\n    border: 0;\n    border-top: 1px solid #e2e2e2;\n}\n.note-editor.note-frame .note-status-output:empty,\n.note-editor.note-airframe .note-status-output:empty {\n    height: 0;\n    border-top: 0 solid transparent;\n}\n.note-editor.note-frame .note-status-output .pull-right,\n.note-editor.note-airframe .note-status-output .pull-right {\n    float: right !important;\n}\n.note-editor.note-frame .note-status-output .text-muted,\n.note-editor.note-airframe .note-status-output .text-muted {\n    color: #777;\n}\n.note-editor.note-frame .note-status-output .text-primary,\n.note-editor.note-airframe .note-status-output .text-primary {\n    color: #286090;\n}\n.note-editor.note-frame .note-status-output .text-success,\n.note-editor.note-airframe .note-status-output .text-success {\n    color: #3c763d;\n}\n.note-editor.note-frame .note-status-output .text-info,\n.note-editor.note-airframe .note-status-output .text-info {\n    color: #31708f;\n}\n.note-editor.note-frame .note-status-output .text-warning,\n.note-editor.note-airframe .note-status-output .text-warning {\n    color: #8a6d3b;\n}\n.note-editor.note-frame .note-status-output .text-danger,\n.note-editor.note-airframe .note-status-output .text-danger {\n    color: #a94442;\n}\n.note-editor.note-frame .note-status-output .alert,\n.note-editor.note-airframe .note-status-output .alert {\n    margin: -7px 0 0 0;\n    padding: 7px 10px 2px 10px;\n    border-radius: 0;\n    color: #000;\n    background-color: #f5f5f5;\n}\n.note-editor.note-frame .note-status-output .alert .note-icon,\n.note-editor.note-airframe .note-status-output .alert .note-icon {\n    margin-right: 5px;\n}\n.note-editor.note-frame .note-status-output .alert-success,\n.note-editor.note-airframe .note-status-output .alert-success {\n    color: #3c763d !important;\n    background-color: #dff0d8 !important;\n}\n.note-editor.note-frame .note-status-output .alert-info,\n.note-editor.note-airframe .note-status-output .alert-info {\n    color: #31708f !important;\n    background-color: #d9edf7 !important;\n}\n.note-editor.note-frame .note-status-output .alert-warning,\n.note-editor.note-airframe .note-status-output .alert-warning {\n    color: #8a6d3b !important;\n    background-color: #fcf8e3 !important;\n}\n.note-editor.note-frame .note-status-output .alert-danger,\n.note-editor.note-airframe .note-status-output .alert-danger {\n    color: #a94442 !important;\n    background-color: #f2dede !important;\n}\n.note-editor.note-frame .note-statusbar,\n.note-editor.note-airframe .note-statusbar {\n    background-color: rgba(128, 128, 128, 0.1137254902);\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame .note-statusbar .note-resizebar,\n.note-editor.note-airframe .note-statusbar .note-resizebar {\n    padding-top: 1px;\n    height: 9px;\n    width: 100%;\n    cursor: ns-resize;\n}\n.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,\n.note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar {\n    width: 20px;\n    margin: 1px auto;\n    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);\n}\n.note-editor.note-frame .note-statusbar.locked .note-resizebar,\n.note-editor.note-airframe .note-statusbar.locked .note-resizebar {\n    cursor: default;\n}\n.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar,\n.note-editor.note-airframe .note-statusbar.locked .note-resizebar .note-icon-bar {\n    display: none;\n}\n.note-editor.note-frame .note-placeholder,\n.note-editor.note-airframe .note-placeholder {\n    padding: 10px;\n}\n\n.note-editor.note-airframe {\n    border: 0;\n}\n.note-editor.note-airframe .note-editing-area .note-editable {\n    padding: 0;\n}\n\n/* Popover\n ------------------------------------------ */\n.note-popover.popover {\n    display: none;\n    max-width: none;\n}\n.note-popover.popover .popover-content a {\n    display: inline-block;\n    max-width: 200px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    vertical-align: middle;\n}\n.note-popover.popover .arrow {\n    left: 20px !important;\n}\n\n/* Popover and Toolbar (Button container)\n ------------------------------------------ */\n.note-toolbar {\n    position: relative;\n}\n\n.note-popover .popover-content, .note-editor .note-toolbar {\n    margin: 0;\n    padding: 0 0 5px 5px;\n}\n.note-popover .popover-content > .note-btn-group, .note-editor .note-toolbar > .note-btn-group {\n    margin-top: 5px;\n    margin-left: 0;\n    margin-right: 5px;\n}\n.note-popover .popover-content .note-btn-group .note-table, .note-editor .note-toolbar .note-btn-group .note-table {\n    min-width: 0;\n    padding: 5px;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker {\n    font-size: 18px;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher {\n    position: absolute !important;\n    z-index: 3;\n    width: 10em;\n    height: 10em;\n    cursor: pointer;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted {\n    position: relative !important;\n    z-index: 1;\n    width: 5em;\n    height: 5em;\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n}\n.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted {\n    position: absolute !important;\n    z-index: 2;\n    width: 1em;\n    height: 1em;\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n}\n.note-popover .popover-content .note-style .dropdown-style blockquote, .note-popover .popover-content .note-style .dropdown-style pre, .note-editor .note-toolbar .note-style .dropdown-style blockquote, .note-editor .note-toolbar .note-style .dropdown-style pre {\n    margin: 0;\n    padding: 5px 10px;\n}\n.note-popover .popover-content .note-style .dropdown-style h1, .note-popover .popover-content .note-style .dropdown-style h2, .note-popover .popover-content .note-style .dropdown-style h3, .note-popover .popover-content .note-style .dropdown-style h4, .note-popover .popover-content .note-style .dropdown-style h5, .note-popover .popover-content .note-style .dropdown-style h6, .note-popover .popover-content .note-style .dropdown-style p, .note-editor .note-toolbar .note-style .dropdown-style h1, .note-editor .note-toolbar .note-style .dropdown-style h2, .note-editor .note-toolbar .note-style .dropdown-style h3, .note-editor .note-toolbar .note-style .dropdown-style h4, .note-editor .note-toolbar .note-style .dropdown-style h5, .note-editor .note-toolbar .note-style .dropdown-style h6, .note-editor .note-toolbar .note-style .dropdown-style p {\n    margin: 0;\n    padding: 0;\n}\n.note-popover .popover-content .note-color-all .note-dropdown-menu, .note-editor .note-toolbar .note-color-all .note-dropdown-menu {\n    min-width: 337px;\n}\n.note-popover .popover-content .note-color .dropdown-toggle, .note-editor .note-toolbar .note-color .dropdown-toggle {\n    width: 20px;\n    padding-left: 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette {\n    display: inline-block;\n    margin: 0;\n    width: 160px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette:first-child, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette:first-child {\n    margin: 0 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title {\n    font-size: 12px;\n    margin: 2px 7px;\n    text-align: center;\n    border-bottom: 1px solid #eee;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset,\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select {\n    font-size: 11px;\n    margin: 3px;\n    padding: 0 3px;\n    cursor: pointer;\n    width: 100%;\n    border-radius: 5px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover {\n    background: #eee;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-row, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row {\n    height: 20px;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select-btn {\n    display: none;\n}\n.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn {\n    border: 1px solid #eee;\n}\n.note-popover .popover-content .note-para .note-dropdown-menu, .note-editor .note-toolbar .note-para .note-dropdown-menu {\n    min-width: 228px;\n    padding: 5px;\n}\n.note-popover .popover-content .note-para .note-dropdown-menu > div + div, .note-editor .note-toolbar .note-para .note-dropdown-menu > div + div {\n    margin-left: 5px;\n}\n.note-popover .popover-content .note-dropdown-menu, .note-editor .note-toolbar .note-dropdown-menu {\n    min-width: 160px;\n}\n.note-popover .popover-content .note-dropdown-menu.right, .note-editor .note-toolbar .note-dropdown-menu.right {\n    right: 0;\n    left: auto;\n}\n.note-popover .popover-content .note-dropdown-menu.right::before, .note-editor .note-toolbar .note-dropdown-menu.right::before {\n    right: 9px;\n    left: auto !important;\n}\n.note-popover .popover-content .note-dropdown-menu.right::after, .note-editor .note-toolbar .note-dropdown-menu.right::after {\n    right: 10px;\n    left: auto !important;\n}\n.note-popover .popover-content .note-dropdown-menu.note-check a i, .note-editor .note-toolbar .note-dropdown-menu.note-check a i {\n    color: deepskyblue;\n    visibility: hidden;\n}\n.note-popover .popover-content .note-dropdown-menu.note-check a.checked i, .note-editor .note-toolbar .note-dropdown-menu.note-check a.checked i {\n    visibility: visible;\n}\n.note-popover .popover-content .note-fontsize-10, .note-editor .note-toolbar .note-fontsize-10 {\n    font-size: 10px;\n}\n.note-popover .popover-content .note-color-palette, .note-editor .note-toolbar .note-color-palette {\n    line-height: 1;\n}\n.note-popover .popover-content .note-color-palette div .note-color-btn, .note-editor .note-toolbar .note-color-palette div .note-color-btn {\n    width: 20px;\n    height: 20px;\n    padding: 0;\n    margin: 0;\n    border: 0;\n    border-radius: 0;\n}\n.note-popover .popover-content .note-color-palette div .note-color-btn:hover, .note-editor .note-toolbar .note-color-palette div .note-color-btn:hover {\n    transform: scale(1.2);\n    transition: all 0.2s;\n}\n\n/* Dialog\n ------------------------------------------ */\n.note-modal .modal-dialog {\n    outline: 0;\n    border-radius: 5px;\n    box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n}\n.note-modal .form-group {\n    margin-left: 0;\n    margin-right: 0;\n}\n.note-modal .note-modal-form {\n    margin: 0;\n}\n.note-modal .note-image-dialog .note-dropzone {\n    min-height: 100px;\n    font-size: 30px;\n    line-height: 4;\n    color: lightgray;\n    text-align: center;\n    border: 4px dashed lightgray;\n    margin-bottom: 10px;\n}\n@-moz-document url-prefix() {\n    .note-modal .note-image-input {\n        height: auto;\n    }\n}\n\n/* Placeholder\n ------------------------------------------ */\n.note-placeholder {\n    position: absolute;\n    display: none;\n    color: gray;\n}\n\n/* Handle\n ------------------------------------------ */\n.note-handle .note-control-selection {\n    position: absolute;\n    display: none;\n    border: 1px solid #000;\n}\n.note-handle .note-control-selection > div {\n    position: absolute;\n}\n.note-handle .note-control-selection .note-control-selection-bg {\n    width: 100%;\n    height: 100%;\n    background-color: #000;\n    -webkit-opacity: 0.3;\n    -khtml-opacity: 0.3;\n    -moz-opacity: 0.3;\n    opacity: 0.3;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=30);\n    filter: alpha(opacity=30);\n}\n.note-handle .note-control-selection .note-control-handle, .note-handle .note-control-selection .note-control-sizing, .note-handle .note-control-selection .note-control-holder {\n    width: 7px;\n    height: 7px;\n    border: 1px solid #000;\n}\n.note-handle .note-control-selection .note-control-sizing {\n    background-color: #000;\n}\n.note-handle .note-control-selection .note-control-nw {\n    top: -5px;\n    left: -5px;\n    border-right: none;\n    border-bottom: none;\n}\n.note-handle .note-control-selection .note-control-ne {\n    top: -5px;\n    right: -5px;\n    border-bottom: none;\n    border-left: none;\n}\n.note-handle .note-control-selection .note-control-sw {\n    bottom: -5px;\n    left: -5px;\n    border-top: none;\n    border-right: none;\n}\n.note-handle .note-control-selection .note-control-se {\n    right: -5px;\n    bottom: -5px;\n    cursor: se-resize;\n}\n.note-handle .note-control-selection .note-control-se.note-control-holder {\n    cursor: default;\n    border-top: none;\n    border-left: none;\n}\n.note-handle .note-control-selection .note-control-selection-info {\n    right: 0;\n    bottom: 0;\n    padding: 5px;\n    margin: 5px;\n    color: #fff;\n    background-color: #000;\n    font-size: 12px;\n    border-radius: 5px;\n    -webkit-opacity: 0.7;\n    -khtml-opacity: 0.7;\n    -moz-opacity: 0.7;\n    opacity: 0.7;\n    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);\n    filter: alpha(opacity=70);\n}\n\n.note-hint-popover {\n    min-width: 100px;\n    padding: 2px;\n}\n.note-hint-popover .popover-content {\n    padding: 3px;\n    max-height: 150px;\n    overflow: auto;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item {\n    display: block !important;\n    padding: 3px;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item.active, .note-hint-popover .popover-content .note-hint-group .note-hint-item:hover {\n    display: block;\n    clear: both;\n    font-weight: 400;\n    line-height: 1.4;\n    color: white;\n    white-space: nowrap;\n    text-decoration: none;\n    background-color: #428bca;\n    outline: 0;\n    cursor: pointer;\n}\n\n/* Handle\n ------------------------------------------ */\nhtml .note-fullscreen-body, body .note-fullscreen-body {\n    overflow: hidden !important;\n}\n\n.note-editable ul li, .note-editable ol li {\n    list-style-position: inside;\n}\n\n/*# sourceMappingURL=summernote.css.map*/"
  },
  {
    "path": "public/vendor/summernote/0.9.1/summernote.js",
    "content": "/*!\n * \n * Super simple WYSIWYG editor v0.9.1\n * https://summernote.org\n *\n * Copyright 2013~ Hackerwins and contributors\n * Summernote may be freely distributed under the MIT license.\n *\n * Date: 2024-10-09T10:22Z\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, (__WEBPACK_EXTERNAL_MODULE__8938__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 7000:\n/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {\n\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8938);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n(jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) = (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) || {\n  lang: {}\n};\njquery__WEBPACK_IMPORTED_MODULE_0___default().extend(true, (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote).lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit'\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original'\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion, Youku, Peertube)'\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window'\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table'\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule'\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list'\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View'\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full'\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select'\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys'\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog'\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo'\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters'\n    },\n    output: {\n      noSelection: 'No Selection Made!'\n    }\n  }\n});\n\n/***/ }),\n\n/***/ 8938:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__8938__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_ = __webpack_require__(8938);\nvar external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_);\n// EXTERNAL MODULE: ./src/lang/summernote-en-US.js\nvar summernote_en_US = __webpack_require__(7000);\n;// CONCATENATED MODULE: ./src/js/core/env.js\n\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nvar genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\nfunction validFontName(fontName) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().inArray(fontName.toLowerCase(), genericFontFamilies) === -1 ? \"'\".concat(fontName, \"'\") : fontName;\n}\nfunction createIsFontInstalledFunc() {\n  var testText = \"mw\";\n  var fontSize = \"20px\";\n  var canvasWidth = 40;\n  var canvasHeight = 20;\n  var canvas = document.createElement(\"canvas\");\n  var context = canvas.getContext(\"2d\", {\n    willReadFrequently: true\n  });\n  canvas.width = canvasWidth;\n  canvas.height = canvasHeight;\n  context.textAlign = \"center\";\n  context.fillStyle = \"black\";\n  context.textBaseline = \"middle\";\n  function getPxInfo(font, testFontName) {\n    context.clearRect(0, 0, canvasWidth, canvasHeight);\n    context.font = fontSize + ' ' + validFontName(font) + ', \"' + testFontName + '\"';\n    context.fillText(testText, canvasWidth / 2, canvasHeight / 2);\n    // Get pixel information\n    var pxInfo = context.getImageData(0, 0, canvasWidth, canvasHeight).data;\n    return pxInfo.join(\"\");\n  }\n  return function (fontName) {\n    var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n    var testInfo = getPxInfo(testFontName, testFontName);\n    var fontInfo = getPxInfo(fontName, testFontName);\n    return testInfo !== fontInfo;\n  };\n}\nvar userAgent = navigator.userAgent;\nvar isMSIE = /MSIE|Trident/i.test(userAgent);\nvar browserVersion;\nif (isMSIE) {\n  var matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\nvar isEdge = /Edge\\/\\d+/.test(userAgent);\nvar isSupportTouch = 'ontouchstart' in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nvar inputEventName = isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\n/* harmony default export */ const env = ({\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE: isMSIE,\n  isEdge: isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && !/chrome/i.test(userAgent),\n  browserVersion: browserVersion,\n  isSupportTouch: isSupportTouch,\n  isFontInstalled: createIsFontInstalledFunc(),\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName: inputEventName,\n  genericFontFamilies: genericFontFamilies,\n  validFontName: validFontName\n});\n;// CONCATENATED MODULE: ./src/js/core/func.js\n\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n  return function (itemB) {\n    return itemA === itemB;\n  };\n}\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\nfunction peq2(propName) {\n  return function (itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\nfunction ok() {\n  return true;\n}\nfunction fail() {\n  return false;\n}\nfunction not(f) {\n  return function () {\n    return !f.apply(f, arguments);\n  };\n}\nfunction and(fA, fB) {\n  return function (item) {\n    return fA(item) && fB(item);\n  };\n}\nfunction func_self(a) {\n  return a;\n}\nfunction invoke(obj, method) {\n  return function () {\n    return obj[method].apply(obj, arguments);\n  };\n}\nvar idCounter = 0;\n\n/**\n * reset globally-unique id\n *\n */\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n  var $document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n  var inverted = {};\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n  return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function (name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n    var later = function later() {\n      timeout = null;\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\nfunction isValidUrl(url) {\n  var expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n/* harmony default export */ const func = ({\n  eq: eq,\n  eq2: eq2,\n  peq2: peq2,\n  ok: ok,\n  fail: fail,\n  self: func_self,\n  not: not,\n  and: and,\n  invoke: invoke,\n  resetUniqueId: resetUniqueId,\n  uniqueId: uniqueId,\n  rect2bnd: rect2bnd,\n  invertObject: invertObject,\n  namespaceToCamel: namespaceToCamel,\n  debounce: debounce,\n  isValidUrl: isValidUrl\n});\n;// CONCATENATED MODULE: ./src/js/core/lists.js\n\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n  return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n  return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n  return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    var item = array[idx];\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction lists_all(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n  return false;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function (memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n  var result = [];\n  var length = collection.length;\n  var idx = -1;\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n  return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n  return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n  if (!array.length) {\n    return [];\n  }\n  var aTail = tail(array);\n  return aTail.reduce(function (memo, v) {\n    var aLast = last(memo);\n    if (fn(last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n    return memo;\n  }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n  var aResult = [];\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) {\n      aResult.push(array[idx]);\n    }\n  }\n  return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n  var results = [];\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n  return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n  return null;\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n  return null;\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\n/* harmony default export */ const lists = ({\n  head: head,\n  last: last,\n  initial: initial,\n  tail: tail,\n  prev: prev,\n  next: next,\n  find: find,\n  contains: contains,\n  all: lists_all,\n  sum: sum,\n  from: from,\n  isEmpty: isEmpty,\n  clusterBy: clusterBy,\n  compact: compact,\n  unique: unique\n});\n;// CONCATENATED MODULE: ./src/js/core/dom.js\n\n\n\n\nvar NBSP_CHAR = String.fromCharCode(160);\nvar ZERO_WIDTH_NBSP_CHAR = \"\\uFEFF\";\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function (node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  }\n\n  // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\nvar isPre = makePredByNodeName('PRE');\nvar isLi = makePredByNodeName('LI');\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\nvar isTable = makePredByNodeName('TABLE');\nvar isData = makePredByNodeName('DATA');\nfunction isInline(node) {\n  return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node);\n}\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\nvar isHr = makePredByNodeName('HR');\nfunction isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\nvar isBlockquote = makePredByNodeName('BLOCKQUOTE');\nfunction isBodyContainer(node) {\n  return isCell(node) || isBlockquote(node) || isEditable(node);\n}\nvar isAnchor = makePredByNodeName('A');\nfunction isParaInline(node) {\n  return isInline(node) && !!ancestor(node, isPara);\n}\nfunction isBodyInline(node) {\n  return isInline(node) && !ancestor(node, isPara);\n}\nvar isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n  var siblings = [];\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n  siblings.push(node);\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n  return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\nvar blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n  if (node) {\n    return node.childNodes.length;\n  }\n  return 0;\n}\n\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while (node = node.firstElementChild);\n  return dom_isEmpty(node);\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction dom_isEmpty(node) {\n  var len = nodeLength(node);\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n  return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) {\n      return node;\n    }\n    if (isEditable(node)) {\n      break;\n    }\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n  while (node) {\n    if (nodeLength(node) !== 1) {\n      break;\n    }\n    if (pred(node)) {\n      return node;\n    }\n    if (isEditable(node)) {\n      break;\n    }\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n  var ancestors = [];\n  ancestor(node, function (el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n    return pred(el);\n  });\n  return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n  var ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n  var ancestors = listAncestor(nodeA);\n  for (var n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n  return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n  var descendants = [];\n  pred = pred || func.ok;\n\n  // start DFS(depth first search) with node\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n    for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n  return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n  var parent = node.parentNode;\n  var wrapper = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<' + wrapperName + '>')[0];\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n  return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n  var next = preceding.nextSibling;\n  var parent = preceding.parentNode;\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n  return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild, isSkipPaddingBlankHTML) {\n  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(aChild, function (idx, child) {\n    // special case: appending a pure UL/OL to a LI element creates inaccessible LI element\n    // e.g. press enter in last LI which has UL/OL-subelements\n    // Therefore, if current node is LI element with no child nodes (text-node) and appending a list, add a br before\n    if (!isSkipPaddingBlankHTML && isLi(node) && node.firstChild === null && isList(child)) {\n      node.appendChild(create(\"br\"));\n    }\n    node.appendChild(child);\n  });\n  return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (position(node) !== 0) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n  while (node && node !== ancestor) {\n    if (position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n  var offset = 0;\n  while (node = node.previousSibling) {\n    offset += 1;\n  }\n  return offset;\n}\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n  var node;\n  var offset;\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    node = point.node.parentNode;\n    offset = position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n  var node, offset;\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    var nextTextNode = getNextTextNode(point.node);\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/**\n * Find next boundaryPoint for preorder / depth first traversal of the DOM\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  var node,\n    offset = 0;\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n    node = point.node.parentNode;\n    offset = position(point.node) + 1;\n\n    // if parent node is editable,  return current node's sibling node.\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n  return {\n    node: node,\n    offset: offset\n  };\n}\n\n/*\n* returns the next Text node index or 0 if not found.\n*/\nfunction getNextTextNode(actual) {\n  if (!actual.nextSibling) return undefined;\n  if (actual.parent !== actual.nextSibling.parent) return undefined;\n  if (isText(actual.nextSibling)) return actual.nextSibling;else return getNextTextNode(actual.nextSibling);\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || dom_isEmpty(point.node)) {\n    return true;\n  }\n  var leftNode = point.node.childNodes[point.offset - 1];\n  var rightNode = point.node.childNodes[point.offset];\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode)) || isTable(rightNode)) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n    point = prevPoint(point);\n  }\n  return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n    point = nextPoint(point);\n  }\n  return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && ch !== ' ' && ch !== NBSP_CHAR;\n}\n\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n\n/**\n * @method walkPoint - preorder / depth first traversal of the DOM\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  var point = startPoint;\n  while (point && point.node) {\n    handler(point);\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n    var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n  var ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n  var current = ancestor;\n  for (var i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n  return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n  var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  var isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  }\n\n  // edge case\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  }\n\n  // split #text\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    var childNode = point.node.childNodes[point.offset];\n    var childNodes = listNext(childNode);\n    var clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, childNodes);\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n    if (isDiscardEmptySplits) {\n      if (dom_isEmpty(point.node)) {\n        remove(point.node);\n      }\n      if (dom_isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n    return clone;\n  }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  var ancestors = listAncestor(point.node, func.eq(root));\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n  // Filter elements with sibling elements\n  if (ancestors.length > 2) {\n    var domList = ancestors.slice(0, ancestors.length - 1);\n    var ifHasNextSibling = domList.find(function (item) {\n      return item.nextSibling;\n    });\n    if (ifHasNextSibling && point.offset != 0 && isRightEdgePoint(point)) {\n      var nestSibling = ifHasNextSibling.nextSibling;\n      var textNode;\n      if (nestSibling.nodeType == 1) {\n        textNode = nestSibling.childNodes[0];\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0\n        };\n      } else if (nestSibling.nodeType == 3 && !nestSibling.data.match(/[\\n\\r]/g)) {\n        textNode = nestSibling;\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0\n        };\n      }\n    }\n  }\n  return ancestors.reduce(function (node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n    return splitNode({\n      node: parent,\n      offset: node ? position(node) : nodeLength(parent)\n    }, options);\n  });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  var pred = isInline ? isPara : isBodyContainer;\n  var ancestors = listAncestor(point.node, pred);\n  var topAncestor = lists.last(ancestors) || point.node;\n  var splitRoot, container;\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  }\n\n  // if splitRoot is exists, split with splitTree\n  var pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline\n  });\n\n  // if container is point.node, find pivot with point.offset\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n  return {\n    rightNode: pivot,\n    container: container\n  };\n}\nfunction create(nodeName) {\n  return document.createElement(nodeName);\n}\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) {\n    return;\n  }\n  if (node.removeNode) {\n    return node.removeNode(isRemoveChild);\n  }\n  var parent = node.parentNode;\n  if (!isRemoveChild) {\n    var nodes = [];\n    for (var i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n    for (var _i = 0, _len = nodes.length; _i < _len; _i++) {\n      parent.insertBefore(nodes[_i], node);\n    }\n  }\n  parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n    var parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n  var newNode = create(nodeName);\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n  return newNode;\n}\nvar isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n  var val = isTextarea($node[0]) ? $node.val() : $node.html();\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n  return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n  var markup = value($node);\n  if (isNewlineOnBlock) {\n    var regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function (match, endSlash, name) {\n      name = name.toUpperCase();\n      var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash;\n      var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n      return match + (isEndOfInlineContainer || isBlockNode ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n  return markup;\n}\nfunction posFromPlaceholder(placeholder) {\n  var $placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(placeholder);\n  var pos = $placeholder.offset();\n  var height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height\n  };\n}\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.on(key, events[key]);\n  });\n}\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.off(key, events[key]);\n  });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n/* harmony default export */ const dom = ({\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR: NBSP_CHAR,\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,\n  /** @property {String} blank */\n  blank: blankHTML,\n  /** @property {String} emptyPara */\n  emptyPara: \"<p>\".concat(blankHTML, \"</p>\"),\n  makePredByNodeName: makePredByNodeName,\n  isEditable: isEditable,\n  isControlSizing: isControlSizing,\n  isText: isText,\n  isElement: isElement,\n  isVoid: isVoid,\n  isPara: isPara,\n  isPurePara: isPurePara,\n  isHeading: isHeading,\n  isInline: isInline,\n  isBlock: func.not(isInline),\n  isBodyInline: isBodyInline,\n  isBody: isBody,\n  isParaInline: isParaInline,\n  isPre: isPre,\n  isList: isList,\n  isTable: isTable,\n  isData: isData,\n  isCell: isCell,\n  isBlockquote: isBlockquote,\n  isBodyContainer: isBodyContainer,\n  isAnchor: isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi: isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea: isTextarea,\n  deepestChildIsEmpty: deepestChildIsEmpty,\n  isEmpty: dom_isEmpty,\n  isEmptyAnchor: func.and(isAnchor, dom_isEmpty),\n  isClosestSibling: isClosestSibling,\n  withClosestSiblings: withClosestSiblings,\n  nodeLength: nodeLength,\n  isLeftEdgePoint: isLeftEdgePoint,\n  isRightEdgePoint: isRightEdgePoint,\n  isEdgePoint: isEdgePoint,\n  isLeftEdgeOf: isLeftEdgeOf,\n  isRightEdgeOf: isRightEdgeOf,\n  isLeftEdgePointOf: isLeftEdgePointOf,\n  isRightEdgePointOf: isRightEdgePointOf,\n  prevPoint: prevPoint,\n  nextPoint: nextPoint,\n  nextPointWithEmptyNode: nextPointWithEmptyNode,\n  isSamePoint: isSamePoint,\n  isVisiblePoint: isVisiblePoint,\n  prevPointUntil: prevPointUntil,\n  nextPointUntil: nextPointUntil,\n  isCharPoint: isCharPoint,\n  isSpacePoint: isSpacePoint,\n  walkPoint: walkPoint,\n  ancestor: ancestor,\n  singleChildAncestor: singleChildAncestor,\n  listAncestor: listAncestor,\n  lastAncestor: lastAncestor,\n  listNext: listNext,\n  listPrev: listPrev,\n  listDescendant: listDescendant,\n  commonAncestor: commonAncestor,\n  wrap: wrap,\n  insertAfter: insertAfter,\n  appendChildNodes: appendChildNodes,\n  position: position,\n  hasChildren: hasChildren,\n  makeOffsetPath: makeOffsetPath,\n  fromOffsetPath: fromOffsetPath,\n  splitTree: splitTree,\n  splitPoint: splitPoint,\n  create: create,\n  createText: createText,\n  remove: remove,\n  removeWhile: removeWhile,\n  replace: replace,\n  html: html,\n  value: value,\n  posFromPlaceholder: posFromPlaceholder,\n  attachEvents: attachEvents,\n  detachEvents: detachEvents,\n  isCustomStyleTag: isCustomStyleTag\n});\n;// CONCATENATED MODULE: ./src/js/Context.js\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Context = /*#__PURE__*/function () {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  function Context($note, options) {\n    _classCallCheck(this, Context);\n    this.$note = $note;\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, options);\n\n    // init ui with options\n    (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().summernote.ui_template(this.options);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.initialize();\n  }\n\n  /**\n   * create layout and initialize modules and other resources\n   */\n  return _createClass(Context, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.layoutInfo = this.ui.createLayout(this.$note);\n      this._initialize();\n      this.$note.hide();\n      return this;\n    }\n\n    /**\n     * destroy modules and other resources and remove layout\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._destroy();\n      this.$note.removeData('summernote');\n      this.ui.removeLayout(this.$note, this.layoutInfo);\n    }\n\n    /**\n     * destory modules and other resources and initialize it again\n     */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var disabled = this.isDisabled();\n      this.code(dom.emptyPara);\n      this._destroy();\n      this._initialize();\n      if (disabled) {\n        this.disable();\n      }\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\n      var _this = this;\n      // set own id\n      this.options.id = func.uniqueId(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now());\n      // set default container for tooltips, popovers, and dialogs\n      this.options.container = this.options.container || this.layoutInfo.editor;\n\n      // add optional buttons\n      var buttons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.buttons);\n      Object.keys(buttons).forEach(function (key) {\n        _this.memo('button.' + key, buttons[key]);\n      });\n      var modules = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.modules, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.plugins || {});\n\n      // add and initialize modules\n      Object.keys(modules).forEach(function (key) {\n        _this.module(key, modules[key], true);\n      });\n      Object.keys(this.modules).forEach(function (key) {\n        _this.initializeModule(key);\n      });\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      var _this2 = this;\n      // destroy modules with reversed order\n      Object.keys(this.modules).reverse().forEach(function (key) {\n        _this2.removeModule(key);\n      });\n      Object.keys(this.memos).forEach(function (key) {\n        _this2.removeMemo(key);\n      });\n      // trigger custom onDestroy callback\n      this.triggerEvent('destroy', this);\n    }\n  }, {\n    key: \"code\",\n    value: function code(html) {\n      var isActivated = this.invoke('codeview.isActivated');\n      if (html === undefined) {\n        this.invoke('codeview.sync');\n        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n      } else {\n        if (isActivated) {\n          this.invoke('codeview.sync', html);\n        } else {\n          this.layoutInfo.editable.html(html);\n        }\n        this.$note.val(html);\n        this.triggerEvent('change', html, this.layoutInfo.editable);\n      }\n    }\n  }, {\n    key: \"isDisabled\",\n    value: function isDisabled() {\n      return this.layoutInfo.editable.attr('contenteditable') === 'false';\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      this.layoutInfo.editable.attr('contenteditable', true);\n      this.invoke('toolbar.activate', true);\n      this.triggerEvent('disable', false);\n      this.options.editing = true;\n    }\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      // close codeview if codeview is opend\n      if (this.invoke('codeview.isActivated')) {\n        this.invoke('codeview.deactivate');\n      }\n      this.layoutInfo.editable.attr('contenteditable', false);\n      this.options.editing = false;\n      this.invoke('toolbar.deactivate', true);\n      this.triggerEvent('disable', true);\n    }\n  }, {\n    key: \"triggerEvent\",\n    value: function triggerEvent() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n      if (callback) {\n        callback.apply(this.$note[0], args);\n      }\n      this.$note.trigger('summernote.' + namespace, args);\n    }\n  }, {\n    key: \"initializeModule\",\n    value: function initializeModule(key) {\n      var module = this.modules[key];\n      module.shouldInitialize = module.shouldInitialize || func.ok;\n      if (!module.shouldInitialize()) {\n        return;\n      }\n\n      // initialize module\n      if (module.initialize) {\n        module.initialize();\n      }\n\n      // attach events\n      if (module.events) {\n        dom.attachEvents(this.$note, module.events);\n      }\n    }\n  }, {\n    key: \"module\",\n    value: function module(key, ModuleClass, withoutIntialize) {\n      if (arguments.length === 1) {\n        return this.modules[key];\n      }\n      this.modules[key] = new ModuleClass(this);\n      if (!withoutIntialize) {\n        this.initializeModule(key);\n      }\n    }\n  }, {\n    key: \"removeModule\",\n    value: function removeModule(key) {\n      var module = this.modules[key];\n      if (module.shouldInitialize()) {\n        if (module.events) {\n          dom.detachEvents(this.$note, module.events);\n        }\n        if (module.destroy) {\n          module.destroy();\n        }\n      }\n      delete this.modules[key];\n    }\n  }, {\n    key: \"memo\",\n    value: function memo(key, obj) {\n      if (arguments.length === 1) {\n        return this.memos[key];\n      }\n      this.memos[key] = obj;\n    }\n  }, {\n    key: \"removeMemo\",\n    value: function removeMemo(key) {\n      if (this.memos[key] && this.memos[key].destroy) {\n        this.memos[key].destroy();\n      }\n      delete this.memos[key];\n    }\n\n    /**\n     * Some buttons need to change their visual style immediately once they get pressed\n     */\n  }, {\n    key: \"createInvokeHandlerAndUpdateState\",\n    value: function createInvokeHandlerAndUpdateState(namespace, value) {\n      var _this3 = this;\n      return function (event) {\n        _this3.createInvokeHandler(namespace, value)(event);\n        _this3.invoke('buttons.updateCurrentStyle');\n      };\n    }\n  }, {\n    key: \"createInvokeHandler\",\n    value: function createInvokeHandler(namespace, value) {\n      var _this4 = this;\n      return function (event) {\n        event.preventDefault();\n        var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n        _this4.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n      };\n    }\n  }, {\n    key: \"invoke\",\n    value: function invoke() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var splits = namespace.split('.');\n      var hasSeparator = splits.length > 1;\n      var moduleName = hasSeparator && lists.head(splits);\n      var methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n      var module = this.modules[moduleName || 'editor'];\n      if (!moduleName && this[methodName]) {\n        return this[methodName].apply(this, args);\n      } else if (module && module[methodName] && module.shouldInitialize()) {\n        return module[methodName].apply(module, args);\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/summernote.js\nfunction summernote_typeof(o) { \"@babel/helpers - typeof\"; return summernote_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, summernote_typeof(o); }\n\n\n\n\nexternal_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function summernote() {\n    var type = summernote_typeof(lists.head(arguments));\n    var isExternalAPICalled = type === 'string';\n    var hasInitOptions = type === 'object';\n    var options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n    // Update options\n    options.langInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'], (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang[options.lang]);\n    options.icons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n    this.each(function (idx, note) {\n      var $note = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(note);\n      if (!$note.data('summernote')) {\n        var context = new Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n    var $note = this.first();\n    if ($note.length) {\n      var context = $note.data('summernote');\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n    return this;\n  }\n});\n;// CONCATENATED MODULE: ./src/js/core/range.js\nfunction range_typeof(o) { \"@babel/helpers - typeof\"; return range_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, range_typeof(o); }\nfunction range_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction range_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, range_toPropertyKey(o.key), o); } }\nfunction range_createClass(e, r, t) { return r && range_defineProperties(e.prototype, r), t && range_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction range_toPropertyKey(t) { var i = range_toPrimitive(t, \"string\"); return \"symbol\" == range_typeof(i) ? i : i + \"\"; }\nfunction range_toPrimitive(t, r) { if (\"object\" != range_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != range_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n  var container = textRange.parentElement();\n  var offset;\n  var tester = document.body.createTextRange();\n  var prevContainer;\n  var childNodes = lists.from(container.childNodes);\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n    tester.moveToElementText(childNodes[offset]);\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n    prevContainer = childNodes[offset];\n  }\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    var textRangeStart = document.body.createTextRange();\n    var curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n    var pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    var textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    // [workaround] enforce IE to re-reference curTextNode, hack\n    var dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n    container = curTextNode;\n    offset = textCount;\n  }\n  return {\n    cont: container,\n    offset: offset\n  };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n  var textRangeInfo = function textRangeInfo(container, offset) {\n    var node, isCollapseToStart;\n    if (dom.isText(container)) {\n      var prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      var prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n      offset = 0;\n      isCollapseToStart = false;\n    }\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset\n    };\n  };\n  var textRange = document.body.createTextRange();\n  var info = textRangeInfo(point.node, point.offset);\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\nvar WrappedRange = /*#__PURE__*/function () {\n  function WrappedRange(sc, so, ec, eo) {\n    range_classCallCheck(this, WrappedRange);\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo;\n\n    // isOnEditable: judge whether range is on editable or not\n    this.isOnEditable = this.makeIsOn(dom.isEditable);\n    // isOnList: judge whether range is on list node or not\n    this.isOnList = this.makeIsOn(dom.isList);\n    // isOnAnchor: judge whether range is on anchor node or not\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n    // isOnCell: judge whether range is on cell node or not\n    this.isOnCell = this.makeIsOn(dom.isCell);\n    // isOnData: judge whether range is on data node or not\n    this.isOnData = this.makeIsOn(dom.isData);\n  }\n\n  // nativeRange: get nativeRange from sc, so, ec, eo\n  return range_createClass(WrappedRange, [{\n    key: \"nativeRange\",\n    value: function nativeRange() {\n      if (env.isW3CRangeSupport) {\n        var w3cRange = document.createRange();\n        w3cRange.setStart(this.sc, this.so);\n        w3cRange.setEnd(this.ec, this.eo);\n        return w3cRange;\n      } else {\n        var textRange = pointToTextRange({\n          node: this.sc,\n          offset: this.so\n        });\n        textRange.setEndPoint('EndToEnd', pointToTextRange({\n          node: this.ec,\n          offset: this.eo\n        }));\n        return textRange;\n      }\n    }\n  }, {\n    key: \"getPoints\",\n    value: function getPoints() {\n      return {\n        sc: this.sc,\n        so: this.so,\n        ec: this.ec,\n        eo: this.eo\n      };\n    }\n  }, {\n    key: \"getStartPoint\",\n    value: function getStartPoint() {\n      return {\n        node: this.sc,\n        offset: this.so\n      };\n    }\n  }, {\n    key: \"getEndPoint\",\n    value: function getEndPoint() {\n      return {\n        node: this.ec,\n        offset: this.eo\n      };\n    }\n\n    /**\n     * select update visible range\n     */\n  }, {\n    key: \"select\",\n    value: function select() {\n      var nativeRng = this.nativeRange();\n      if (env.isW3CRangeSupport) {\n        var selection = document.getSelection();\n        if (selection.rangeCount > 0) {\n          selection.removeAllRanges();\n        }\n        selection.addRange(nativeRng);\n      } else {\n        nativeRng.select();\n      }\n      return this;\n    }\n\n    /**\n     * Moves the scrollbar to start container(sc) of current range\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"scrollIntoView\",\n    value: function scrollIntoView(container) {\n      var height = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(container).height();\n      if (container.scrollTop + height < this.sc.offsetTop) {\n        container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n      }\n      return this;\n    }\n\n    /**\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"normalize\",\n    value: function normalize() {\n      /**\n       * @param {BoundaryPoint} point\n       * @param {Boolean} isLeftToRight - true: prefer to choose right node\n       *                                - false: prefer to choose left node\n       * @return {BoundaryPoint}\n       */\n      var getVisiblePoint = function getVisiblePoint(point, isLeftToRight) {\n        if (!point) {\n          return point;\n        }\n\n        // Just use the given point [XXX:Adhoc]\n        //  - case 01. if the point is on the middle of the node\n        //  - case 02. if the point is on the right edge and prefer to choose left node\n        //  - case 03. if the point is on the left edge and prefer to choose right node\n        //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n        //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n        //  - case 06. if the point is on the block node and there is no children\n        if (dom.isVisiblePoint(point)) {\n          if (!dom.isEdgePoint(point) || dom.isRightEdgePoint(point) && !isLeftToRight || dom.isLeftEdgePoint(point) && isLeftToRight || dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling) || dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling) || dom.isBlock(point.node) && dom.isEmpty(point.node)) {\n            return point;\n          }\n        }\n\n        // point on block's edge\n        var block = dom.ancestor(point.node, dom.isBlock);\n        var hasRightNode = false;\n        if (!hasRightNode) {\n          var prevPoint = dom.prevPoint(point) || {\n            node: null\n          };\n          hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n        }\n        var hasLeftNode = false;\n        if (!hasLeftNode) {\n          var _nextPoint = dom.nextPoint(point) || {\n            node: null\n          };\n          hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(_nextPoint.node)) && isLeftToRight;\n        }\n        if (hasRightNode || hasLeftNode) {\n          // returns point already on visible point\n          if (dom.isVisiblePoint(point)) {\n            return point;\n          }\n          // reverse direction\n          isLeftToRight = !isLeftToRight;\n        }\n        var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n        return nextPoint || point;\n      };\n      var endPoint = getVisiblePoint(this.getEndPoint(), false);\n      var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns matched nodes on range\n     *\n     * @param {Function} [pred] - predicate function\n     * @param {Object} [options]\n     * @param {Boolean} [options.includeAncestor]\n     * @param {Boolean} [options.fullyContains]\n     * @return {Node[]}\n     */\n  }, {\n    key: \"nodes\",\n    value: function nodes(pred, options) {\n      pred = pred || func.ok;\n      var includeAncestor = options && options.includeAncestor;\n      var fullyContains = options && options.fullyContains;\n\n      // TODO compare points and sort\n      var startPoint = this.getStartPoint();\n      var endPoint = this.getEndPoint();\n      var nodes = [];\n      var leftEdgeNodes = [];\n      dom.walkPoint(startPoint, endPoint, function (point) {\n        if (dom.isEditable(point.node)) {\n          return;\n        }\n        var node;\n        if (fullyContains) {\n          if (dom.isLeftEdgePoint(point)) {\n            leftEdgeNodes.push(point.node);\n          }\n          if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n            node = point.node;\n          }\n        } else if (includeAncestor) {\n          node = dom.ancestor(point.node, pred);\n        } else {\n          node = point.node;\n        }\n        if (node && pred(node)) {\n          nodes.push(node);\n        }\n      }, true);\n      return lists.unique(nodes);\n    }\n\n    /**\n     * returns commonAncestor of range\n     * @return {Element} - commonAncestor\n     */\n  }, {\n    key: \"commonAncestor\",\n    value: function commonAncestor() {\n      return dom.commonAncestor(this.sc, this.ec);\n    }\n\n    /**\n     * returns expanded range by pred\n     *\n     * @param {Function} pred - predicate function\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"expand\",\n    value: function expand(pred) {\n      var startAncestor = dom.ancestor(this.sc, pred);\n      var endAncestor = dom.ancestor(this.ec, pred);\n      if (!startAncestor && !endAncestor) {\n        return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n      }\n      var boundaryPoints = this.getPoints();\n      if (startAncestor) {\n        boundaryPoints.sc = startAncestor;\n        boundaryPoints.so = 0;\n      }\n      if (endAncestor) {\n        boundaryPoints.ec = endAncestor;\n        boundaryPoints.eo = dom.nodeLength(endAncestor);\n      }\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n\n    /**\n     * @param {Boolean} isCollapseToStart\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"collapse\",\n    value: function collapse(isCollapseToStart) {\n      if (isCollapseToStart) {\n        return new WrappedRange(this.sc, this.so, this.sc, this.so);\n      } else {\n        return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n      }\n    }\n\n    /**\n     * splitText on range\n     */\n  }, {\n    key: \"splitText\",\n    value: function splitText() {\n      var isSameContainer = this.sc === this.ec;\n      var boundaryPoints = this.getPoints();\n      if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n        this.ec.splitText(this.eo);\n      }\n      if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n        boundaryPoints.sc = this.sc.splitText(this.so);\n        boundaryPoints.so = 0;\n        if (isSameContainer) {\n          boundaryPoints.ec = boundaryPoints.sc;\n          boundaryPoints.eo = this.eo - this.so;\n        }\n      }\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n\n    /**\n     * delete contents on range\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"deleteContents\",\n    value: function deleteContents() {\n      if (this.isCollapsed()) {\n        return this;\n      }\n      var rng = this.splitText();\n      var nodes = rng.nodes(null, {\n        fullyContains: true\n      });\n\n      // find new cursor point\n      var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {\n        return !lists.contains(nodes, point.node);\n      });\n      var emptyParents = [];\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(nodes, function (idx, node) {\n        // find empty parents\n        var parent = node.parentNode;\n        if (point.node !== parent && dom.nodeLength(parent) === 1) {\n          emptyParents.push(parent);\n        }\n        dom.remove(node, false);\n      });\n\n      // remove empty parents\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyParents, function (idx, node) {\n        dom.remove(node, false);\n      });\n      return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize();\n    }\n\n    /**\n     * makeIsOn: return isOn(pred) function\n     */\n  }, {\n    key: \"makeIsOn\",\n    value: function makeIsOn(pred) {\n      return function () {\n        var ancestor = dom.ancestor(this.sc, pred);\n        return !!ancestor && ancestor === dom.ancestor(this.ec, pred);\n      };\n    }\n\n    /**\n     * @param {Function} pred\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isLeftEdgeOf\",\n    value: function isLeftEdgeOf(pred) {\n      if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n        return false;\n      }\n      var node = dom.ancestor(this.sc, pred);\n      return node && dom.isLeftEdgeOf(this.sc, node);\n    }\n\n    /**\n     * returns whether range was collapsed or not\n     */\n  }, {\n    key: \"isCollapsed\",\n    value: function isCollapsed() {\n      return this.sc === this.ec && this.so === this.eo;\n    }\n\n    /**\n     * wrap inline nodes which children of body with paragraph\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"wrapBodyInlineWithPara\",\n    value: function wrapBodyInlineWithPara() {\n      if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n        this.sc.innerHTML = dom.emptyPara;\n        return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n      }\n\n      /**\n       * [workaround] firefox often create range on not visible point. so normalize here.\n       *  - firefox: |<p>text</p>|\n       *  - chrome: <p>|text|</p>\n       */\n      var rng = this.normalize();\n      if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n        return rng;\n      }\n\n      // find inline top ancestor\n      var topAncestor;\n      if (dom.isInline(rng.sc)) {\n        var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n        topAncestor = lists.last(ancestors);\n        if (!dom.isInline(topAncestor)) {\n          topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n        }\n      } else {\n        topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n      }\n      if (topAncestor) {\n        // siblings not in paragraph\n        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n        // wrap with paragraph\n        if (inlineSiblings.length) {\n          var para = dom.wrap(lists.head(inlineSiblings), 'p');\n          dom.appendChildNodes(para, lists.tail(inlineSiblings));\n        }\n      }\n      return this.normalize();\n    }\n\n    /**\n     * insert node at current cursor\n     *\n     * @param {Node} node\n     * @param {Boolean} doNotInsertPara - default is false, removes added <p> that's added if true\n     * @return {Node}\n     */\n  }, {\n    key: \"insertNode\",\n    value: function insertNode(node) {\n      var doNotInsertPara = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var rng = this;\n      if (dom.isText(node) || dom.isInline(node)) {\n        rng = this.wrapBodyInlineWithPara().deleteContents();\n      }\n      var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n      if (info.rightNode) {\n        info.rightNode.parentNode.insertBefore(node, info.rightNode);\n        if (dom.isEmpty(info.rightNode) && (doNotInsertPara || dom.isPara(node))) {\n          info.rightNode.parentNode.removeChild(info.rightNode);\n        }\n      } else {\n        info.container.appendChild(node);\n      }\n      return node;\n    }\n\n    /**\n     * insert html at current cursor\n     */\n  }, {\n    key: \"pasteHTML\",\n    value: function pasteHTML(markup) {\n      markup = ((markup || '') + '').trim(markup);\n      var contentsContainer = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').html(markup)[0];\n      var childNodes = lists.from(contentsContainer.childNodes);\n\n      // const rng = this.wrapBodyInlineWithPara().deleteContents();\n      var rng = this;\n      var reversed = false;\n      if (rng.so >= 0) {\n        childNodes = childNodes.reverse();\n        reversed = true;\n      }\n      childNodes = childNodes.map(function (childNode) {\n        return rng.insertNode(childNode, !dom.isInline(childNode));\n      });\n      if (reversed) {\n        childNodes = childNodes.reverse();\n      }\n      return childNodes;\n    }\n\n    /**\n     * returns text in range\n     *\n     * @return {String}\n     */\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var nativeRng = this.nativeRange();\n      return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n    }\n\n    /**\n     * returns range for word before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getWordRange\",\n    value: function getWordRange(findAfter) {\n      var endPoint = this.getEndPoint();\n      if (!dom.isCharPoint(endPoint)) {\n        return this;\n      }\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        return !dom.isCharPoint(point);\n      });\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, function (point) {\n          return !dom.isCharPoint(point);\n        });\n      }\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns range for words before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getWordsRange\",\n    value: function getWordsRange(findAfter) {\n      var endPoint = this.getEndPoint();\n      var isNotTextPoint = function isNotTextPoint(point) {\n        return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n      };\n      if (isNotTextPoint(endPoint)) {\n        return this;\n      }\n      var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n      }\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * returns range for words before cursor that match with a Regex\n     *\n     * example:\n     *  range: 'hi @Peter Pan'\n     *  regex: '/@[a-z ]+/i'\n     *  return range: '@Peter Pan'\n     *\n     * @param {RegExp} [regex]\n     * @return {WrappedRange|null}\n     */\n  }, {\n    key: \"getWordsMatchRange\",\n    value: function getWordsMatchRange(regex) {\n      var endPoint = this.getEndPoint();\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n          return true;\n        }\n        var rng = new WrappedRange(point.node, point.offset, endPoint.node, endPoint.offset);\n        var result = regex.exec(rng.toString());\n        return result && result.index === 0;\n      });\n      var rng = new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n      var text = rng.toString();\n      var result = regex.exec(text);\n      if (result && result[0].length === text.length) {\n        return rng;\n      } else {\n        return null;\n      }\n    }\n\n    /**\n     * create offsetPath bookmark\n     *\n     * @param {Node} editable\n     */\n  }, {\n    key: \"bookmark\",\n    value: function bookmark(editable) {\n      return {\n        s: {\n          path: dom.makeOffsetPath(editable, this.sc),\n          offset: this.so\n        },\n        e: {\n          path: dom.makeOffsetPath(editable, this.ec),\n          offset: this.eo\n        }\n      };\n    }\n\n    /**\n     * create offsetPath bookmark base on paragraph\n     *\n     * @param {Node[]} paras\n     */\n  }, {\n    key: \"paraBookmark\",\n    value: function paraBookmark(paras) {\n      return {\n        s: {\n          path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n          offset: this.so\n        },\n        e: {\n          path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n          offset: this.eo\n        }\n      };\n    }\n\n    /**\n     * getClientRects\n     * @return {Rect[]}\n     */\n  }, {\n    key: \"getClientRects\",\n    value: function getClientRects() {\n      var nativeRng = this.nativeRange();\n      return nativeRng.getClientRects();\n    }\n  }]);\n}();\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\n/* harmony default export */ const range = ({\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function create(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) {\n      // collapsed\n      ec = sc;\n      eo = so;\n      return new WrappedRange(sc, so, ec, eo);\n    } else {\n      var wrappedRange = this.createFromSelection();\n      if (!wrappedRange && arguments.length === 1) {\n        var bodyElement = arguments[0];\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n      return wrappedRange;\n    }\n  },\n  createFromBodyElement: function createFromBodyElement(bodyElement) {\n    var isCollapseToStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n  createFromSelection: function createFromSelection() {\n    var sc, so, ec, eo;\n    if (env.isW3CRangeSupport) {\n      var selection = document.getSelection();\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n      var nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else {\n      // IE8: TextRange\n      var textRange = document.selection.createRange();\n      var textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      var textRangeStart = textRange;\n      textRangeStart.collapse(true);\n      var startPoint = textRangeToPoint(textRangeStart, true);\n      var endPoint = textRangeToPoint(textRangeEnd, false);\n\n      // same visible point case: range was collapsed.\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n    return new WrappedRange(sc, so, ec, eo);\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function createFromNode(node) {\n    var sc = node;\n    var so = 0;\n    var ec = node;\n    var eo = dom.nodeLength(ec);\n\n    // browsers can't target a picture or void node\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n    return this.create(sc, so, ec, eo);\n  },\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function createFromNodeBefore(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function createFromNodeAfter(node) {\n    return this.createFromNode(node).collapse();\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function createFromBookmark(editable, bookmark) {\n    var sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    var so = bookmark.s.offset;\n    var ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    var eo = bookmark.e.offset;\n    return new WrappedRange(sc, so, ec, eo);\n  },\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function createFromParaBookmark(bookmark, paras) {\n    var so = bookmark.s.offset;\n    var eo = bookmark.e.offset;\n    var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n    return new WrappedRange(sc, so, ec, eo);\n  }\n});\n;// CONCATENATED MODULE: ./src/js/core/key.js\n\n\nvar KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\n/* harmony default export */ const key = ({\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: function isEdit(keyCode) {\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE], keyCode);\n  },\n  /**\n   * @method isRemove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isRemove: function isRemove(keyCode) {\n    // LB\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.DELETE], keyCode);\n  },\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: function isMove(keyCode) {\n    return lists.contains([KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN], keyCode);\n  },\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: function isNavigation(keyCode) {\n    return lists.contains([KEY_MAP.HOME, KEY_MAP.END, KEY_MAP.PAGEUP, KEY_MAP.PAGEDOWN], keyCode);\n  },\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP\n});\n;// CONCATENATED MODULE: ./src/js/core/async.js\n\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nfunction readFileAsDataURL(file) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(new FileReader(), {\n      onload: function onload(event) {\n        var dataURL = event.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: function onerror(err) {\n        deferred.reject(err);\n      }\n    }).readAsDataURL(file);\n  }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nfunction createImage(url) {\n  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n    var $img = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<img>');\n    $img.one('load', function () {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', function () {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none'\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n;// CONCATENATED MODULE: ./src/js/editing/History.js\nfunction History_typeof(o) { \"@babel/helpers - typeof\"; return History_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, History_typeof(o); }\nfunction History_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction History_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, History_toPropertyKey(o.key), o); } }\nfunction History_createClass(e, r, t) { return r && History_defineProperties(e.prototype, r), t && History_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction History_toPropertyKey(t) { var i = History_toPrimitive(t, \"string\"); return \"symbol\" == History_typeof(i) ? i : i + \"\"; }\nfunction History_toPrimitive(t, r) { if (\"object\" != History_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != History_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar History = /*#__PURE__*/function () {\n  function History(context) {\n    History_classCallCheck(this, History);\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n  return History_createClass(History, [{\n    key: \"makeSnapshot\",\n    value: function makeSnapshot() {\n      var rng = range.create(this.editable);\n      var emptyBookmark = {\n        s: {\n          path: [],\n          offset: 0\n        },\n        e: {\n          path: [],\n          offset: 0\n        }\n      };\n      return {\n        contents: this.$editable.html(),\n        bookmark: rng && rng.isOnEditable() ? rng.bookmark(this.editable) : emptyBookmark\n      };\n    }\n  }, {\n    key: \"applySnapshot\",\n    value: function applySnapshot(snapshot) {\n      if (snapshot.contents !== null) {\n        this.$editable.html(snapshot.contents);\n      }\n      if (snapshot.bookmark !== null) {\n        range.createFromBookmark(this.editable, snapshot.bookmark).select();\n      }\n    }\n\n    /**\n    * @method rewind\n    * Rewinds the history stack back to the first snapshot taken.\n    * Leaves the stack intact, so that \"Redo\" can still be used.\n    */\n  }, {\n    key: \"rewind\",\n    value: function rewind() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      // Return to the first available snapshot.\n      this.stackOffset = 0;\n\n      // Apply that snapshot.\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n\n    /**\n    *  @method commit\n    *  Resets history stack, but keeps current editor's content.\n    */\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      // Clear the stack.\n      this.stack = [];\n\n      // Restore stackOffset to its original value.\n      this.stackOffset = -1;\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    }\n\n    /**\n    * @method reset\n    * Resets the history stack completely; reverting to an empty editor.\n    */\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      // Clear the stack.\n      this.stack = [];\n\n      // Restore stackOffset to its original value.\n      this.stackOffset = -1;\n\n      // Clear the editable area.\n      this.$editable.html('');\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    }\n\n    /**\n     * undo\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n      if (this.stackOffset > 0) {\n        this.stackOffset--;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n\n    /**\n     * redo\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.stack.length - 1 > this.stackOffset) {\n        this.stackOffset++;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n\n    /**\n     * recorded undo\n     */\n  }, {\n    key: \"recordUndo\",\n    value: function recordUndo() {\n      this.stackOffset++;\n\n      // Wash out stack after stackOffset\n      if (this.stack.length > this.stackOffset) {\n        this.stack = this.stack.slice(0, this.stackOffset);\n      }\n\n      // Create new snapshot and push it to the end\n      this.stack.push(this.makeSnapshot());\n\n      // If the stack size reachs to the limit, then slice it\n      if (this.stack.length > this.context.options.historyLimit) {\n        this.stack.shift();\n        this.stackOffset -= 1;\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Style.js\nfunction Style_typeof(o) { \"@babel/helpers - typeof\"; return Style_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Style_typeof(o); }\nfunction Style_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Style_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Style_toPropertyKey(o.key), o); } }\nfunction Style_createClass(e, r, t) { return r && Style_defineProperties(e.prototype, r), t && Style_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Style_toPropertyKey(t) { var i = Style_toPrimitive(t, \"string\"); return \"symbol\" == Style_typeof(i) ? i : i + \"\"; }\nfunction Style_toPrimitive(t, r) { if (\"object\" != Style_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Style_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Style = /*#__PURE__*/function () {\n  function Style() {\n    Style_classCallCheck(this, Style);\n  }\n  return Style_createClass(Style, [{\n    key: \"jQueryCSS\",\n    value:\n    /**\n     * @method jQueryCSS\n     *\n     * [workaround] for old jQuery\n     * passing an array of style properties to .css()\n     * will result in an object of property-value pairs.\n     * (compability with version < 1.9)\n     *\n     * @private\n     * @param  {jQuery} $obj\n     * @param  {Array} propertyNames - An array of one or more CSS properties.\n     * @return {Object}\n     */\n    function jQueryCSS($obj, propertyNames) {\n      var result = {};\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(propertyNames, function (idx, propertyName) {\n        result[propertyName] = $obj.css(propertyName);\n      });\n      return result;\n    }\n\n    /**\n     * returns style object from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n  }, {\n    key: \"fromNode\",\n    value: function fromNode($node) {\n      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n      var styleInfo = this.jQueryCSS($node, properties) || {};\n      var fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n      styleInfo['font-size'] = parseInt(fontSize, 10);\n      styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n      return styleInfo;\n    }\n\n    /**\n     * paragraph level style\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} styleInfo\n     */\n  }, {\n    key: \"stylePara\",\n    value: function stylePara(rng, styleInfo) {\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rng.nodes(dom.isPara, {\n        includeAncestor: true\n      }), function (idx, para) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css(styleInfo);\n      });\n    }\n\n    /**\n     * insert and returns styleNodes on range.\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} [options] - options for styleNodes\n     * @param {String} [options.nodeName] - default: `SPAN`\n     * @param {Boolean} [options.expandClosestSibling] - default: `false`\n     * @param {Boolean} [options.onlyPartialContains] - default: `false`\n     * @return {Node[]}\n     */\n  }, {\n    key: \"styleNodes\",\n    value: function styleNodes(rng, options) {\n      rng = rng.splitText();\n      var nodeName = options && options.nodeName || 'SPAN';\n      var expandClosestSibling = !!(options && options.expandClosestSibling);\n      var onlyPartialContains = !!(options && options.onlyPartialContains);\n      if (rng.isCollapsed()) {\n        return [rng.insertNode(dom.create(nodeName))];\n      }\n      var pred = dom.makePredByNodeName(nodeName);\n      var nodes = rng.nodes(dom.isText, {\n        fullyContains: true\n      }).map(function (text) {\n        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n      });\n      if (expandClosestSibling) {\n        if (onlyPartialContains) {\n          var nodesInRange = rng.nodes();\n          // compose with partial contains predication\n          pred = func.and(pred, function (node) {\n            return lists.contains(nodesInRange, node);\n          });\n        }\n        return nodes.map(function (node) {\n          var siblings = dom.withClosestSiblings(node, pred);\n          var head = lists.head(siblings);\n          var tails = lists.tail(siblings);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(tails, function (idx, elem) {\n            dom.appendChildNodes(head, elem.childNodes);\n            dom.remove(elem);\n          });\n          return lists.head(siblings);\n        });\n      } else {\n        return nodes;\n      }\n    }\n\n    /**\n     * get current style on cursor\n     *\n     * @param {WrappedRange} rng\n     * @return {Object} - object contains style properties.\n     */\n  }, {\n    key: \"current\",\n    value: function current(rng) {\n      var $cont = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n      var styleInfo = this.fromNode($cont);\n\n      // document.queryCommandState for toggle state\n      // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n      try {\n        styleInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(styleInfo, {\n          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n          'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n        });\n      } catch (e) {\n        // eslint-disable-next-line\n      }\n\n      // list-style-type to list-style(unordered, ordered)\n      if (!rng.isOnList()) {\n        styleInfo['list-style'] = 'none';\n      } else {\n        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n        var isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n      }\n      var para = dom.ancestor(rng.sc, dom.isPara);\n      if (para && para.style['line-height']) {\n        styleInfo['line-height'] = para.style.lineHeight;\n      } else {\n        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n        styleInfo['line-height'] = lineHeight.toFixed(1);\n      }\n      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n      styleInfo.range = rng;\n      return styleInfo;\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Bullet.js\nfunction Bullet_typeof(o) { \"@babel/helpers - typeof\"; return Bullet_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Bullet_typeof(o); }\nfunction Bullet_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Bullet_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Bullet_toPropertyKey(o.key), o); } }\nfunction Bullet_createClass(e, r, t) { return r && Bullet_defineProperties(e.prototype, r), t && Bullet_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Bullet_toPropertyKey(t) { var i = Bullet_toPrimitive(t, \"string\"); return \"symbol\" == Bullet_typeof(i) ? i : i + \"\"; }\nfunction Bullet_toPrimitive(t, r) { if (\"object\" != Bullet_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Bullet_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\nvar Bullet = /*#__PURE__*/function () {\n  function Bullet() {\n    Bullet_classCallCheck(this, Bullet);\n  }\n  return Bullet_createClass(Bullet, [{\n    key: \"insertOrderedList\",\n    value:\n    /**\n     * toggle ordered list\n     */\n    function insertOrderedList(editable) {\n      this.toggleList('OL', editable);\n    }\n\n    /**\n     * toggle unordered list\n     */\n  }, {\n    key: \"insertUnorderedList\",\n    value: function insertUnorderedList(editable) {\n      this.toggleList('UL', editable);\n    }\n\n    /**\n     * indent\n     */\n  }, {\n    key: \"indent\",\n    value: function indent(editable) {\n      var _this = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        if (dom.isLi(head)) {\n          var previousList = _this.findList(head.previousSibling);\n          if (previousList) {\n            paras.map(function (para) {\n              return previousList.appendChild(para);\n            });\n          } else {\n            _this.wrapList(paras, head.parentNode.nodeName);\n            paras.map(function (para) {\n              return para.parentNode;\n            }).map(function (para) {\n              return _this.appendToPrevious(para);\n            });\n          }\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              return (parseInt(val, 10) || 0) + 25;\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n\n    /**\n     * outdent\n     */\n  }, {\n    key: \"outdent\",\n    value: function outdent(editable) {\n      var _this2 = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        if (dom.isLi(head)) {\n          _this2.releaseList([paras]);\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              val = parseInt(val, 10) || 0;\n              return val > 25 ? val - 25 : '';\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n\n    /**\n     * toggle list\n     *\n     * @param {String} listName - OL or UL\n     */\n  }, {\n    key: \"toggleList\",\n    value: function toggleList(listName, editable) {\n      var _this3 = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var bookmark = rng.paraBookmark(paras);\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n      // paragraph to list\n      if (lists.find(paras, dom.isPurePara)) {\n        var wrappedParas = [];\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n          wrappedParas = wrappedParas.concat(_this3.wrapList(paras, listName));\n        });\n        paras = wrappedParas;\n        // list to paragraph or change list style\n      } else {\n        var diffLists = rng.nodes(dom.isList, {\n          includeAncestor: true\n        }).filter(function (listNode) {\n          return !external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().nodeName(listNode, listName);\n        });\n        if (diffLists.length) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(diffLists, function (idx, listNode) {\n            dom.replace(listNode, listName);\n          });\n        } else {\n          paras = this.releaseList(clustereds, true);\n        }\n      }\n      range.createFromParaBookmark(bookmark, paras).select();\n    }\n\n    /**\n     * @param {Node[]} paras\n     * @param {String} listName\n     * @return {Node[]}\n     */\n  }, {\n    key: \"wrapList\",\n    value: function wrapList(paras, listName) {\n      var head = lists.head(paras);\n      var last = lists.last(paras);\n      var prevList = dom.isList(head.previousSibling) && head.previousSibling;\n      var nextList = dom.isList(last.nextSibling) && last.nextSibling;\n      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n      // P to LI\n      paras = paras.map(function (para) {\n        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n      });\n\n      // append to list(<ul>, <ol>)\n      dom.appendChildNodes(listNode, paras, true);\n      if (nextList) {\n        dom.appendChildNodes(listNode, lists.from(nextList.childNodes), true);\n        dom.remove(nextList);\n      }\n      return paras;\n    }\n\n    /**\n     * @method releaseList\n     *\n     * @param {Array[]} clustereds\n     * @param {Boolean} isEscapseToBody\n     * @return {Node[]}\n     */\n  }, {\n    key: \"releaseList\",\n    value: function releaseList(clustereds, isEscapseToBody) {\n      var _this4 = this;\n      var releasedParas = [];\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        var last = lists.last(paras);\n        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n        var parentItem = headList.parentNode;\n        if (headList.parentNode.nodeName === 'LI') {\n          paras.map(function (para) {\n            var newList = _this4.findNextSiblings(para);\n            if (parentItem.nextSibling) {\n              parentItem.parentNode.insertBefore(para, parentItem.nextSibling);\n            } else {\n              parentItem.parentNode.appendChild(para);\n            }\n            if (newList.length) {\n              _this4.wrapList(newList, headList.nodeName);\n              para.appendChild(newList[0].parentNode);\n            }\n          });\n          if (headList.children.length === 0) {\n            parentItem.removeChild(headList);\n          }\n          if (parentItem.childNodes.length === 0) {\n            parentItem.parentNode.removeChild(parentItem);\n          }\n        } else {\n          var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n            node: last.parentNode,\n            offset: dom.position(last) + 1\n          }, {\n            isSkipPaddingBlankHTML: true\n          }) : null;\n          var middleList = dom.splitTree(headList, {\n            node: head.parentNode,\n            offset: dom.position(head)\n          }, {\n            isSkipPaddingBlankHTML: true\n          });\n          paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi);\n\n          // LI to P\n          if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n            paras = paras.map(function (para) {\n              return dom.replace(para, 'P');\n            });\n          }\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(lists.from(paras).reverse(), function (idx, para) {\n            dom.insertAfter(para, headList);\n          });\n\n          // remove empty lists\n          var rootLists = lists.compact([headList, middleList, lastList]);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rootLists, function (idx, rootList) {\n            var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(listNodes.reverse(), function (idx, listNode) {\n              if (!dom.nodeLength(listNode)) {\n                dom.remove(listNode, true);\n              }\n            });\n          });\n        }\n        releasedParas = releasedParas.concat(paras);\n      });\n      return releasedParas;\n    }\n\n    /**\n     * @method appendToPrevious\n     *\n     * Appends list to previous list item, if\n     * none exist it wraps the list in a new list item.\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n  }, {\n    key: \"appendToPrevious\",\n    value: function appendToPrevious(node) {\n      return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');\n    }\n\n    /**\n     * @method findList\n     *\n     * Finds an existing list in list item\n     *\n     * @param {HTMLNode} ListItem\n     * @return {Array[]}\n     */\n  }, {\n    key: \"findList\",\n    value: function findList(node) {\n      return node ? lists.find(node.children, function (child) {\n        return ['OL', 'UL'].indexOf(child.nodeName) > -1;\n      }) : null;\n    }\n\n    /**\n     * @method findNextSiblings\n     *\n     * Finds all list item siblings that follow it\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n  }, {\n    key: \"findNextSiblings\",\n    value: function findNextSiblings(node) {\n      var siblings = [];\n      while (node.nextSibling) {\n        siblings.push(node.nextSibling);\n        node = node.nextSibling;\n      }\n      return siblings;\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Typing.js\nfunction Typing_typeof(o) { \"@babel/helpers - typeof\"; return Typing_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Typing_typeof(o); }\nfunction Typing_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Typing_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Typing_toPropertyKey(o.key), o); } }\nfunction Typing_createClass(e, r, t) { return r && Typing_defineProperties(e.prototype, r), t && Typing_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Typing_toPropertyKey(t) { var i = Typing_toPrimitive(t, \"string\"); return \"symbol\" == Typing_typeof(i) ? i : i + \"\"; }\nfunction Typing_toPrimitive(t, r) { if (\"object\" != Typing_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Typing_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nvar Typing = /*#__PURE__*/function () {\n  function Typing(context) {\n    Typing_classCallCheck(this, Typing);\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet();\n    this.options = context.options;\n  }\n\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n  return Typing_createClass(Typing, [{\n    key: \"insertTab\",\n    value: function insertTab(rng, tabsize) {\n      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n      rng = rng.deleteContents();\n      rng.insertNode(tab, true);\n      rng = range.create(tab, tabsize);\n      rng.select();\n    }\n\n    /**\n     * insert paragraph\n     *\n     * @param {jQuery} $editable\n     * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n     *\n     * blockquoteBreakingLevel\n     *   0 - No break, the new paragraph remains inside the quote\n     *   1 - Break the first blockquote in the ancestors list\n     *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n     */\n  }, {\n    key: \"insertParagraph\",\n    value: function insertParagraph(editable, rng) {\n      rng = rng || range.create(editable);\n\n      // deleteContents on range.\n      rng = rng.deleteContents();\n\n      // Wrap range if it needs to be wrapped by paragraph\n      rng = rng.wrapBodyInlineWithPara();\n\n      // finding paragraph\n      var splitRoot = dom.ancestor(rng.sc, dom.isPara);\n      var nextPara;\n      // on paragraph: split paragraph\n      if (splitRoot) {\n        // if it is an empty line with li\n        if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n          // toggle UL/OL and escape\n          this.bullet.toggleList(splitRoot.parentNode.nodeName);\n          return;\n        } else {\n          var blockquote = null;\n          if (this.options.blockquoteBreakingLevel === 1) {\n            blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n          } else if (this.options.blockquoteBreakingLevel === 2) {\n            blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n          }\n          if (blockquote) {\n            // We're inside a blockquote and options ask us to break it\n            nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];\n            // If the split is right before a <br>, remove it so that there's no \"empty line\"\n            // after the split in the new blockquote created\n            if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(rng.sc.nextSibling).remove();\n            }\n            var split = dom.splitTree(blockquote, rng.getStartPoint(), {\n              isDiscardEmptySplits: true\n            });\n            if (split) {\n              split.parentNode.insertBefore(nextPara, split);\n            } else {\n              dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n            }\n          } else {\n            nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n            // not a blockquote, just insert the paragraph\n            var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n            emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyAnchors, function (idx, anchor) {\n              dom.remove(anchor);\n            });\n\n            // replace empty heading, pre or custom-made styleTag with P tag\n            if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n              nextPara = dom.replace(nextPara, 'p');\n            }\n          }\n        }\n        // no paragraph: insert empty paragraph\n      } else {\n        var next = rng.sc.childNodes[rng.so];\n        nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];\n        if (next) {\n          rng.sc.insertBefore(nextPara, next);\n        } else {\n          rng.sc.appendChild(nextPara);\n        }\n      }\n      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/editing/Table.js\nfunction Table_typeof(o) { \"@babel/helpers - typeof\"; return Table_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Table_typeof(o); }\nfunction Table_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Table_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Table_toPropertyKey(o.key), o); } }\nfunction Table_createClass(e, r, t) { return r && Table_defineProperties(e.prototype, r), t && Table_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Table_toPropertyKey(t) { var i = Table_toPrimitive(t, \"string\"); return \"symbol\" == Table_typeof(i) ? i : i + \"\"; }\nfunction Table_toPrimitive(t, r) { if (\"object\" != Table_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Table_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nvar TableResultAction = function TableResultAction(startPoint, where, action, domTable) {\n  var _startPoint = {\n    'colPos': 0,\n    'rowPos': 0\n  };\n  var _virtualTable = [];\n  var _actionCellList = [];\n\n  /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th') {\n      // Impossible to identify start Cell point\n      return;\n    }\n    _startPoint.colPos = startPoint.cellIndex;\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    var objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell\n    };\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition\n      }\n    };\n  }\n\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n    var newCellIndex = cellIndex;\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n  function addCellInfoToVirtual(row, cell) {\n    var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    var cellHasColspan = cell.colSpan > 1;\n    var cellHasRowspan = cell.rowSpan > 1;\n    var isThisSelectedCell = row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos;\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n    // Add span rows to virtual Table.\n    var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n    if (rowspanNumber > 1) {\n      for (var rp = 1; rp < rowspanNumber; rp++) {\n        var rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    }\n\n    // Add span cols to virtual table.\n    var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n    if (colspanNumber > 1) {\n      for (var cp = 1; cp < colspanNumber; cp++) {\n        var cellspanIndex = recoverCellIndex(row.rowIndex, cellIndex + cp);\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n  function createVirtualTable() {\n    var rows = domTable.rows;\n    for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      var cells = rows[rowIndex].cells;\n      for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.RemoveCell;\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.AddCell;\n  }\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  }\n\n  /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n  this.getActionList = function () {\n    var fixedRow = where === TableResultAction.where.Row ? _startPoint.rowPos : -1;\n    var fixedCol = where === TableResultAction.where.Column ? _startPoint.colPos : -1;\n    var actualPosition = 0;\n    var canContinue = true;\n    while (canContinue) {\n      var rowPosition = fixedRow >= 0 ? fixedRow : actualPosition;\n      var colPosition = fixedCol >= 0 ? fixedCol : actualPosition;\n      var row = _virtualTable[rowPosition];\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n      var cell = row[colPosition];\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      // Define action to be applied in this cell\n      var resultAction = TableResultAction.resultAction.Ignore;\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n      actualPosition++;\n    }\n    return _actionCellList;\n  };\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = {\n  'Row': 0,\n  'Column': 1\n};\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = {\n  'Add': 0,\n  'Delete': 1\n};\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = {\n  'Ignore': 0,\n  'SubtractSpanCount': 1,\n  'RemoveCell': 2,\n  'AddCell': 3,\n  'SumSpanCount': 4\n};\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nvar Table = /*#__PURE__*/function () {\n  function Table() {\n    Table_classCallCheck(this, Table);\n  }\n  return Table_createClass(Table, [{\n    key: \"tab\",\n    value:\n    /**\n     * handle tab key\n     *\n     * @param {WrappedRange} rng\n     * @param {Boolean} isShift\n     */\n    function tab(rng, isShift) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var table = dom.ancestor(cell, dom.isTable);\n      var cells = dom.listDescendant(table, dom.isCell);\n      var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n      if (nextCell) {\n        range.create(nextCell, 0).select();\n      }\n    }\n\n    /**\n     * Add a new row\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (top/bottom)\n     * @return {Node}\n     */\n  }, {\n    key: \"addRow\",\n    value: function addRow(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var currentTr = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var trAttributes = this.recoverAttributes(currentTr);\n      var html = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<tr' + trAttributes + '></tr>');\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var idCell = 0; idCell < actions.length; idCell++) {\n        var currentCell = actions[idCell];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            break;\n          case TableResultAction.resultAction.SumSpanCount:\n            {\n              if (position === 'top') {\n                var baseCellTr = currentCell.baseCell.parent;\n                var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n                if (isTopFromRowSpan) {\n                  var newTd = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                  html.append(newTd);\n                  break;\n                }\n              }\n              var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n              rowspanNumber++;\n              currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n            }\n            break;\n        }\n      }\n      if (position === 'top') {\n        currentTr.before(html);\n      } else {\n        var cellHasRowspan = cell.rowSpan > 1;\n        if (cellHasRowspan) {\n          var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).parent().find('tr')[lastTrIndex]).after(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(html));\n          return;\n        }\n        currentTr.after(html);\n      }\n    }\n\n    /**\n     * Add a new col\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (left/right)\n     * @return {Node}\n     */\n  }, {\n    key: \"addCol\",\n    value: function addCol(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var rowsGroup = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).siblings();\n      rowsGroup.push(row);\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        var currentCell = actions[actionIndex];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            if (position === 'right') {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n            break;\n          case TableResultAction.resultAction.SumSpanCount:\n            if (position === 'right') {\n              var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n              colspanNumber++;\n              currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n            break;\n        }\n      }\n    }\n\n    /*\n    * Copy attributes from element.\n    *\n    * @param {object} Element to recover attributes.\n    * @return {string} Copied string elements.\n    */\n  }, {\n    key: \"recoverAttributes\",\n    value: function recoverAttributes(el) {\n      var resultStr = '';\n      if (!el) {\n        return resultStr;\n      }\n      var attrList = el.attributes || [];\n      for (var i = 0; i < attrList.length; i++) {\n        if (attrList[i].name.toLowerCase() === 'id') {\n          continue;\n        }\n        if (attrList[i].specified) {\n          resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n        }\n      }\n      return resultStr;\n    }\n\n    /**\n     * Delete current row\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));\n      var rowPos = row[0].rowIndex;\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n        var baseCell = actions[actionIndex].baseCell;\n        var virtualPosition = actions[actionIndex].virtualTable;\n        var hasRowspan = baseCell.rowSpan && baseCell.rowSpan > 1;\n        var rowspanNumber = hasRowspan ? parseInt(baseCell.rowSpan, 10) : 0;\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n          case TableResultAction.resultAction.AddCell:\n            {\n              var nextRow = row.next('tr')[0];\n              if (!nextRow) {\n                continue;\n              }\n              var cloneRow = row[0].cells[cellPos];\n              if (hasRowspan) {\n                if (rowspanNumber > 2) {\n                  rowspanNumber--;\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                  nextRow.cells[cellPos].innerHTML = '';\n                } else if (rowspanNumber === 2) {\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].removeAttribute('rowSpan');\n                  nextRow.cells[cellPos].innerHTML = '';\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.SubtractSpanCount:\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                baseCell.setAttribute('rowSpan', rowspanNumber);\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              } else if (rowspanNumber === 2) {\n                baseCell.removeAttribute('rowSpan');\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.RemoveCell:\n            // Do not need remove cell because row will be deleted.\n            continue;\n        }\n      }\n      row.remove();\n    }\n\n    /**\n     * Delete current col\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n          case TableResultAction.resultAction.SubtractSpanCount:\n            {\n              var baseCell = actions[actionIndex].baseCell;\n              var hasColspan = baseCell.colSpan && baseCell.colSpan > 1;\n              if (hasColspan) {\n                var colspanNumber = baseCell.colSpan ? parseInt(baseCell.colSpan, 10) : 0;\n                if (colspanNumber > 2) {\n                  colspanNumber--;\n                  baseCell.setAttribute('colSpan', colspanNumber);\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                } else if (colspanNumber === 2) {\n                  baseCell.removeAttribute('colSpan');\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                }\n              }\n            }\n            continue;\n          case TableResultAction.resultAction.RemoveCell:\n            dom.remove(actions[actionIndex].baseCell, true);\n            continue;\n        }\n      }\n    }\n\n    /**\n     * create empty table element\n     *\n     * @param {Number} rowCount\n     * @param {Number} colCount\n     * @return {Node}\n     */\n  }, {\n    key: \"createTable\",\n    value: function createTable(colCount, rowCount, options) {\n      var tds = [];\n      var tdHTML;\n      for (var idxCol = 0; idxCol < colCount; idxCol++) {\n        tds.push('<td>' + dom.blank + '</td>');\n      }\n      tdHTML = tds.join('');\n      var trs = [];\n      var trHTML;\n      for (var idxRow = 0; idxRow < rowCount; idxRow++) {\n        trs.push('<tr>' + tdHTML + '</tr>');\n      }\n      trHTML = trs.join('');\n      var $table = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<table>' + trHTML + '</table>');\n      if (options && options.tableClassName) {\n        $table.addClass(options.tableClassName);\n      }\n      return $table[0];\n    }\n\n    /**\n     * Delete current table\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('table').remove();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Editor.js\nfunction Editor_typeof(o) { \"@babel/helpers - typeof\"; return Editor_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Editor_typeof(o); }\nfunction Editor_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Editor_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Editor_toPropertyKey(o.key), o); } }\nfunction Editor_createClass(e, r, t) { return r && Editor_defineProperties(e.prototype, r), t && Editor_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Editor_toPropertyKey(t) { var i = Editor_toPrimitive(t, \"string\"); return \"symbol\" == Editor_typeof(i) ? i : i + \"\"; }\nfunction Editor_toPrimitive(t, r) { if (\"object\" != Editor_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Editor_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KEY_BOGUS = 'bogus';\nvar MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nvar TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nvar URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\n\n/**\n * @class Editor\n */\nvar Editor = /*#__PURE__*/function () {\n  function Editor(context) {\n    var _this = this;\n    Editor_classCallCheck(this, Editor);\n    this.context = context;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n    this.style = new Style();\n    this.table = new Table();\n    this.typing = new Typing(context);\n    this.bullet = new Bullet();\n    this.history = new History(context);\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName);\n\n    // native commands(with execCommand), generate function for execCommand\n    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor'];\n    for (var idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = function (sCmd) {\n        return function (value) {\n          _this.beforeCommand();\n          document.execCommand(sCmd, false, value);\n          _this.afterCommand(true);\n        };\n      }(commands[idx]);\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n    this.fontName = this.wrapCommand(function (value) {\n      return _this.fontStyling('font-family', env.validFontName(value));\n    });\n    this.fontSize = this.wrapCommand(function (value) {\n      var unit = _this.currentStyle()['font-size-unit'];\n      return _this.fontStyling('font-size', value + unit);\n    });\n    this.fontSizeUnit = this.wrapCommand(function (value) {\n      var size = _this.currentStyle()['font-size'];\n      return _this.fontStyling('font-size', size + value);\n    });\n    for (var _idx = 1; _idx <= 6; _idx++) {\n      this['formatH' + _idx] = function (idx) {\n        return function () {\n          _this.formatBlock('H' + idx);\n        };\n      }(_idx);\n      this.context.memo('help.formatH' + _idx, this.lang.help['formatH' + _idx]);\n    }\n    this.insertParagraph = this.wrapCommand(function () {\n      _this.typing.insertParagraph(_this.editable);\n    });\n    this.insertOrderedList = this.wrapCommand(function () {\n      _this.bullet.insertOrderedList(_this.editable);\n    });\n    this.insertUnorderedList = this.wrapCommand(function () {\n      _this.bullet.insertUnorderedList(_this.editable);\n    });\n    this.indent = this.wrapCommand(function () {\n      _this.bullet.indent(_this.editable);\n    });\n    this.outdent = this.wrapCommand(function () {\n      _this.bullet.outdent(_this.editable);\n    });\n\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n    this.insertNode = this.wrapCommand(function (node) {\n      if (_this.isLimited(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).text().length)) {\n        return;\n      }\n      var rng = _this.getLastRange();\n      rng.insertNode(node);\n      _this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n\n    /**\n     * insert text\n     * @param {String} text\n     */\n    this.insertText = this.wrapCommand(function (text) {\n      if (_this.isLimited(text.length)) {\n        return;\n      }\n      var rng = _this.getLastRange();\n      var textNode = rng.insertNode(dom.createText(text));\n      _this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n    this.pasteHTML = this.wrapCommand(function (markup) {\n      if (_this.isLimited(markup.length)) {\n        return;\n      }\n      markup = _this.context.invoke('codeview.purify', markup);\n      var contents = _this.getLastRange().pasteHTML(markup);\n      _this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n    this.formatBlock = this.wrapCommand(function (tagName, $target) {\n      var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle;\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock);\n      } else {\n        _this.onFormatBlock(tagName, $target);\n      }\n    });\n\n    /**\n     * insert horizontal rule\n     */\n    this.insertHorizontalRule = this.wrapCommand(function () {\n      var hrNode = _this.getLastRange().insertNode(dom.create('HR'));\n      if (hrNode.nextSibling) {\n        _this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n    this.lineHeight = this.wrapCommand(function (value) {\n      _this.style.stylePara(_this.getLastRange(), {\n        lineHeight: value\n      });\n    });\n\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n    this.createLink = this.wrapCommand(function (linkInfo) {\n      var rel = [];\n      var linkUrl = linkInfo.url;\n      var linkText = linkInfo.text;\n      var isNewWindow = linkInfo.isNewWindow;\n      var addNoReferrer = _this.options.linkAddNoReferrer;\n      var addNoOpener = _this.options.linkAddNoOpener;\n      var rng = linkInfo.range || _this.getLastRange();\n      var additionalTextLength = linkText.length - rng.toString().length;\n      if (additionalTextLength > 0 && _this.isLimited(additionalTextLength)) {\n        return;\n      }\n      var isTextChanged = rng.toString() !== linkText;\n\n      // handle spaced urls from input\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n      if (_this.options.onCreateLink) {\n        linkUrl = _this.options.onCreateLink(linkUrl);\n      } else {\n        linkUrl = _this.checkLinkUrl(linkUrl);\n      }\n      var anchors = [];\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        var anchor = rng.insertNode(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<A></A>').text(linkText)[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = _this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true\n        });\n      }\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(anchors, function (idx, anchor) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href', linkUrl);\n        if (isNewWindow) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('target', '_blank');\n          if (addNoReferrer) {\n            rel.push('noreferrer');\n          }\n          if (addNoOpener) {\n            rel.push('noopener');\n          }\n          if (rel.length) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('rel', rel.join(' '));\n          }\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).removeAttr('target');\n        }\n      });\n      _this.setLastRange(_this.createRangeFromList(anchors).select());\n    });\n\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n    this.color = this.wrapCommand(function (colorInfo) {\n      var foreColor = colorInfo.foreColor;\n      var backColor = colorInfo.backColor;\n      if (foreColor) {\n        document.execCommand('foreColor', false, foreColor);\n      }\n      if (backColor) {\n        document.execCommand('backColor', false, backColor);\n      }\n    });\n\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n    this.foreColor = this.wrapCommand(function (colorInfo) {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n    this.insertTable = this.wrapCommand(function (dim) {\n      var dimension = dim.split('x');\n      var rng = _this.getLastRange().deleteContents();\n      rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options));\n    });\n\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n    this.removeMedia = this.wrapCommand(function () {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).parent();\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).detach();\n      }\n      _this.setLastRange(range.createFromSelection($target).select());\n      _this.context.triggerEvent('media.delete', $target, _this.$editable);\n    });\n\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n    this.floatMe = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', value === 'none' ? '' : value);\n    });\n\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n    this.resize = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());\n      value = parseFloat(value);\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: ''\n        });\n      }\n    });\n  }\n  return Editor_createClass(Editor, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      // bind custom events\n      this.$editable.on('keydown', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          _this2.context.triggerEvent('enter', event);\n        }\n        _this2.context.triggerEvent('keydown', event);\n\n        // keep a snapshot to limit text on input event\n        _this2.snapshot = _this2.history.makeSnapshot();\n        _this2.hasKeyShortCut = false;\n        if (!event.isDefaultPrevented()) {\n          if (_this2.options.shortcuts) {\n            _this2.hasKeyShortCut = _this2.handleKeyMap(event);\n          } else {\n            _this2.preventDefaultEditableShortCuts(event);\n          }\n        }\n        if (_this2.isLimited(1, event)) {\n          var lastRange = _this2.getLastRange();\n          if (lastRange.eo - lastRange.so === 0) {\n            return false;\n          }\n        }\n        _this2.setLastRange();\n\n        // record undo in the key event except keyMap.\n        if (_this2.options.recordEveryKeystroke) {\n          if (_this2.hasKeyShortCut === false) {\n            _this2.history.recordUndo();\n          }\n        }\n      }).on('keyup', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('keyup', event);\n      }).on('focus', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('focus', event);\n      }).on('blur', function (event) {\n        _this2.context.triggerEvent('blur', event);\n      }).on('mousedown', function (event) {\n        _this2.context.triggerEvent('mousedown', event);\n      }).on('mouseup', function (event) {\n        _this2.setLastRange();\n        _this2.history.recordUndo();\n        _this2.context.triggerEvent('mouseup', event);\n      }).on('scroll', function (event) {\n        _this2.context.triggerEvent('scroll', event);\n      }).on('paste', function (event) {\n        _this2.setLastRange();\n        _this2.context.triggerEvent('paste', event);\n      }).on('copy', function (event) {\n        _this2.context.triggerEvent('copy', event);\n      }).on('input', function () {\n        // To limit composition characters (e.g. Korean)\n        if (_this2.isLimited(0) && _this2.snapshot) {\n          _this2.history.applySnapshot(_this2.snapshot);\n        }\n      });\n      this.$editable.attr('spellcheck', this.options.spellCheck);\n      this.$editable.attr('autocorrect', this.options.spellCheck);\n      if (this.options.disableGrammar) {\n        this.$editable.attr('data-gramm', false);\n      }\n\n      // init content before set event\n      this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n      this.$editable.on(env.inputEventName, func.debounce(function () {\n        _this2.context.triggerEvent('change', _this2.$editable.html(), _this2.$editable);\n      }, 10));\n      this.$editable.on('focusin', function (event) {\n        _this2.context.triggerEvent('focusin', event);\n      }).on('focusout', function (event) {\n        _this2.context.triggerEvent('focusout', event);\n      });\n      if (this.options.airMode) {\n        if (this.options.overrideContextMenu) {\n          this.$editor.on('contextmenu', function (event) {\n            _this2.context.triggerEvent('contextmenu', event);\n            return false;\n          });\n        }\n      } else {\n        if (this.options.width) {\n          this.$editor.outerWidth(this.options.width);\n        }\n        if (this.options.height) {\n          this.$editable.outerHeight(this.options.height);\n        }\n        if (this.options.maxHeight) {\n          this.$editable.css('max-height', this.options.maxHeight);\n        }\n        if (this.options.minHeight) {\n          this.$editable.css('min-height', this.options.minHeight);\n        }\n      }\n      this.history.recordUndo();\n      this.setLastRange();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$editable.off();\n    }\n  }, {\n    key: \"handleKeyMap\",\n    value: function handleKeyMap(event) {\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      var keys = [];\n      if (event.metaKey) {\n        keys.push('CMD');\n      }\n      if (event.ctrlKey && !event.altKey) {\n        keys.push('CTRL');\n      }\n      if (event.shiftKey) {\n        keys.push('SHIFT');\n      }\n      var keyName = key.nameFromCode[event.keyCode];\n      if (keyName) {\n        keys.push(keyName);\n      }\n      var eventName = keyMap[keys.join('+')];\n      if (keyName === 'TAB' && !this.options.tabDisable) {\n        this.afterCommand();\n      } else if (eventName) {\n        if (this.context.invoke(eventName) !== false) {\n          event.preventDefault();\n          return true;\n        }\n      } else if (key.isEdit(event.keyCode)) {\n        if (key.isRemove(event.keyCode)) {\n          this.context.invoke('removed');\n        }\n        this.afterCommand();\n      }\n      return false;\n    }\n  }, {\n    key: \"preventDefaultEditableShortCuts\",\n    value: function preventDefaultEditableShortCuts(event) {\n      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n      if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) {\n        event.preventDefault();\n      }\n    }\n  }, {\n    key: \"isLimited\",\n    value: function isLimited(pad, event) {\n      pad = pad || 0;\n      if (typeof event !== 'undefined') {\n        if (key.isMove(event.keyCode) || key.isNavigation(event.keyCode) || event.ctrlKey || event.metaKey || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n          return false;\n        }\n      }\n      if (this.options.maxTextLength > 0) {\n        if (this.$editable.text().length + pad > this.options.maxTextLength) {\n          return true;\n        }\n      }\n      return false;\n    }\n  }, {\n    key: \"checkLinkUrl\",\n    value: function checkLinkUrl(linkUrl) {\n      if (MAILTO_PATTERN.test(linkUrl)) {\n        return 'mailto://' + linkUrl;\n      } else if (TEL_PATTERN.test(linkUrl)) {\n        return 'tel://' + linkUrl;\n      } else if (!URL_SCHEME_PATTERN.test(linkUrl)) {\n        return 'http://' + linkUrl;\n      }\n      return linkUrl;\n    }\n\n    /**\n     * create range\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"createRange\",\n    value: function createRange() {\n      this.focus();\n      this.setLastRange();\n      return this.getLastRange();\n    }\n\n    /**\n     * create a new range from the list of elements\n     *\n     * @param {list} dom element list\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"createRangeFromList\",\n    value: function createRangeFromList(lst) {\n      var startRange = range.createFromNodeBefore(lists.head(lst));\n      var startPoint = startRange.getStartPoint();\n      var endRange = range.createFromNodeAfter(lists.last(lst));\n      var endPoint = endRange.getEndPoint();\n      return range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n\n    /**\n     * set the last range\n     *\n     * if given rng is exist, set rng as the last range\n     * or create a new range at the end of the document\n     *\n     * @param {WrappedRange} rng\n     */\n  }, {\n    key: \"setLastRange\",\n    value: function setLastRange(rng) {\n      if (rng) {\n        this.lastRange = rng;\n      } else {\n        this.lastRange = range.create(this.editable);\n        if (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.lastRange.sc).closest('.note-editable').length === 0) {\n          this.lastRange = range.createFromBodyElement(this.editable);\n        }\n      }\n    }\n\n    /**\n     * get the last range\n     *\n     * if there is a saved last range, return it\n     * or create a new range and return it\n     *\n     * @return {WrappedRange}\n     */\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      if (!this.lastRange) {\n        this.setLastRange();\n      }\n      return this.lastRange;\n    }\n\n    /**\n     * saveRange\n     *\n     * save current range\n     *\n     * @param {Boolean} [thenCollapse=false]\n     */\n  }, {\n    key: \"saveRange\",\n    value: function saveRange(thenCollapse) {\n      if (thenCollapse) {\n        this.getLastRange().collapse().select();\n      }\n    }\n\n    /**\n     * restoreRange\n     *\n     * restore lately range\n     */\n  }, {\n    key: \"restoreRange\",\n    value: function restoreRange() {\n      if (this.lastRange) {\n        this.lastRange.select();\n        this.focus();\n      }\n    }\n  }, {\n    key: \"saveTarget\",\n    value: function saveTarget(node) {\n      this.$editable.data('target', node);\n    }\n  }, {\n    key: \"clearTarget\",\n    value: function clearTarget() {\n      this.$editable.removeData('target');\n    }\n  }, {\n    key: \"restoreTarget\",\n    value: function restoreTarget() {\n      return this.$editable.data('target');\n    }\n\n    /**\n     * currentStyle\n     *\n     * current style\n     * @return {Object|Boolean} unfocus\n     */\n  }, {\n    key: \"currentStyle\",\n    value: function currentStyle() {\n      var rng = range.create();\n      if (rng) {\n        rng = rng.normalize();\n      }\n      return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n    }\n\n    /**\n     * style from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n  }, {\n    key: \"styleFromNode\",\n    value: function styleFromNode($node) {\n      return this.style.fromNode($node);\n    }\n\n    /**\n     * undo\n     */\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.undo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /*\n    * commit\n    */\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.commit();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /**\n     * redo\n     */\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.redo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    /**\n     * before command\n     */\n  }, {\n    key: \"beforeCommand\",\n    value: function beforeCommand() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n\n      // Set styleWithCSS before run a command\n      document.execCommand('styleWithCSS', false, this.options.styleWithCSS);\n\n      // keep focus on editable before command execution\n      this.focus();\n    }\n\n    /**\n     * after command\n     * @param {Boolean} isPreventTrigger\n     */\n  }, {\n    key: \"afterCommand\",\n    value: function afterCommand(isPreventTrigger) {\n      this.normalizeContent();\n      this.history.recordUndo();\n      if (!isPreventTrigger) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n\n    /**\n     * handle tab key\n     */\n  }, {\n    key: \"tab\",\n    value: function tab() {\n      var rng = this.getLastRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n        if (!this.isLimited(this.options.tabSize)) {\n          this.beforeCommand();\n          this.typing.insertTab(rng, this.options.tabSize);\n          this.afterCommand();\n        }\n      }\n    }\n\n    /**\n     * handle shift+tab key\n     */\n  }, {\n    key: \"untab\",\n    value: function untab() {\n      var rng = this.getLastRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng, true);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n      }\n    }\n\n    /**\n     * run given function between beforeCommand and afterCommand\n     */\n  }, {\n    key: \"wrapCommand\",\n    value: function wrapCommand(fn) {\n      return function () {\n        this.beforeCommand();\n        fn.apply(this, arguments);\n        this.afterCommand();\n      };\n    }\n    /**\n     * removed (function added by 1der1)\n    */\n  }, {\n    key: \"removed\",\n    value: function removed(rng, node, tagName) {\n      // LB\n      rng = range.create();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        node = rng.ec;\n        if ((tagName = node.tagName) && node.childElementCount === 1 && node.childNodes[0].tagName === \"BR\") {\n          if (tagName === \"P\") {\n            node.remove();\n          } else if (['TH', 'TD'].indexOf(tagName) >= 0) {\n            node.firstChild.remove();\n          }\n        }\n      }\n    }\n    /**\n     * insert image\n     *\n     * @param {String} src\n     * @param {String|Function} param\n     * @return {Promise}\n     */\n  }, {\n    key: \"insertImage\",\n    value: function insertImage(src, param) {\n      var _this3 = this;\n      return createImage(src, param).then(function ($image) {\n        _this3.beforeCommand();\n        if (typeof param === 'function') {\n          param($image);\n        } else {\n          if (typeof param === 'string') {\n            $image.attr('data-filename', param);\n          }\n          $image.css('width', Math.min(_this3.$editable.width(), $image.width()));\n        }\n        $image.show();\n        _this3.getLastRange().insertNode($image[0]);\n        _this3.setLastRange(range.createFromNodeAfter($image[0]).select());\n        _this3.afterCommand();\n      }).fail(function (e) {\n        _this3.context.triggerEvent('image.upload.error', e);\n      });\n    }\n\n    /**\n     * insertImages\n     * @param {File[]} files\n     */\n  }, {\n    key: \"insertImagesAsDataURL\",\n    value: function insertImagesAsDataURL(files) {\n      var _this4 = this;\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(files, function (idx, file) {\n        var filename = file.name;\n        if (_this4.options.maximumImageFileSize && _this4.options.maximumImageFileSize < file.size) {\n          _this4.context.triggerEvent('image.upload.error', _this4.lang.image.maximumFileSizeError);\n        } else {\n          readFileAsDataURL(file).then(function (dataURL) {\n            return _this4.insertImage(dataURL, filename);\n          }).fail(function () {\n            _this4.context.triggerEvent('image.upload.error');\n          });\n        }\n      });\n    }\n\n    /**\n     * insertImagesOrCallback\n     * @param {File[]} files\n     */\n  }, {\n    key: \"insertImagesOrCallback\",\n    value: function insertImagesOrCallback(files) {\n      var callbacks = this.options.callbacks;\n      // If onImageUpload set,\n      if (callbacks.onImageUpload) {\n        this.context.triggerEvent('image.upload', files);\n        // else insert Image as dataURL\n      } else {\n        this.insertImagesAsDataURL(files);\n      }\n    }\n\n    /**\n     * return selected plain text\n     * @return {String} text\n     */\n  }, {\n    key: \"getSelectedText\",\n    value: function getSelectedText() {\n      var rng = this.getLastRange();\n\n      // if range on anchor, expand range with anchor\n      if (rng.isOnAnchor()) {\n        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n      }\n      return rng.toString();\n    }\n  }, {\n    key: \"onFormatBlock\",\n    value: function onFormatBlock(tagName, $target) {\n      // [workaround] for MSIE, IE need `<`\n      document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName);\n\n      // support custom class\n      if ($target && $target.length) {\n        // find the exact element has given tagName\n        if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n          $target = $target.find(tagName);\n        }\n        if ($target && $target.length) {\n          var currentRange = this.createRange();\n          var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()([currentRange.sc, currentRange.ec]).closest(tagName);\n          // remove class added for current block\n          $parent.removeClass();\n          var className = $target[0].className || '';\n          if (className) {\n            $parent.addClass(className);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"formatPara\",\n    value: function formatPara() {\n      this.formatBlock('P');\n    }\n  }, {\n    key: \"fontStyling\",\n    value: function fontStyling(target, value) {\n      var rng = this.getLastRange();\n      if (rng !== '') {\n        var spans = this.style.styleNodes(rng);\n        this.$editor.find('.note-status-output').html('');\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(spans).css(target, value);\n\n        // [workaround] added styled bogus span for style\n        //  - also bogus character needed for cursor position\n        if (rng.isCollapsed()) {\n          var firstSpan = lists.head(spans);\n          if (firstSpan && !dom.nodeLength(firstSpan)) {\n            firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n            range.createFromNode(firstSpan.firstChild).select();\n            this.setLastRange();\n            this.$editable.data(KEY_BOGUS, firstSpan);\n          }\n        } else {\n          rng.select();\n        }\n      } else {\n        var noteStatusOutput = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now();\n        this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n        setTimeout(function () {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('#note-status-output-' + noteStatusOutput).remove();\n        }, 5000);\n      }\n    }\n\n    /**\n     * unlink\n     *\n     * @type command\n     */\n  }, {\n    key: \"unlink\",\n    value: function unlink() {\n      var rng = this.getLastRange();\n      if (rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        rng = range.createFromNode(anchor);\n        rng.select();\n        this.setLastRange();\n        this.beforeCommand();\n        document.execCommand('unlink');\n        this.afterCommand();\n      }\n    }\n\n    /**\n     * returns link info\n     *\n     * @return {Object}\n     * @return {WrappedRange} return.range\n     * @return {String} return.text\n     * @return {Boolean} [return.isNewWindow=true]\n     * @return {String} [return.url=\"\"]\n     */\n  }, {\n    key: \"getLinkInfo\",\n    value: function getLinkInfo() {\n      if (!this.hasFocus()) {\n        this.focus();\n      }\n      var rng = this.getLastRange().expand(dom.isAnchor);\n      // Get the first anchor on range(for edit).\n      var $anchor = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(lists.head(rng.nodes(dom.isAnchor)));\n      var linkInfo = {\n        range: rng,\n        text: rng.toString(),\n        url: $anchor.length ? $anchor.attr('href') : ''\n      };\n\n      // When anchor exists,\n      if ($anchor.length) {\n        // Set isNewWindow by checking its target.\n        linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n      }\n      return linkInfo;\n    }\n  }, {\n    key: \"addRow\",\n    value: function addRow(position) {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addRow(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"addCol\",\n    value: function addCol(position) {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addCol(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteRow(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteCol(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable() {\n      var rng = this.getLastRange(this.$editable);\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteTable(rng);\n        this.afterCommand();\n      }\n    }\n\n    /**\n     * @param {Position} pos\n     * @param {jQuery} $target - target element\n     * @param {Boolean} [bKeepRatio] - keep ratio\n     */\n  }, {\n    key: \"resizeTo\",\n    value: function resizeTo(pos, $target, bKeepRatio) {\n      var imageSize;\n      if (bKeepRatio) {\n        var newRatio = pos.y / pos.x;\n        var ratio = $target.data('ratio');\n        imageSize = {\n          width: ratio > newRatio ? pos.x : pos.y / ratio,\n          height: ratio > newRatio ? pos.x * ratio : pos.y\n        };\n      } else {\n        imageSize = {\n          width: pos.x,\n          height: pos.y\n        };\n      }\n      $target.css(imageSize);\n    }\n\n    /**\n     * returns whether editable area has focus or not.\n     */\n  }, {\n    key: \"hasFocus\",\n    value: function hasFocus() {\n      return this.$editable.is(':focus');\n    }\n\n    /**\n     * set focus\n     */\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // [workaround] Screen will move when page is scolled in IE.\n      //  - do focus when not focused\n      if (!this.hasFocus()) {\n        this.$editable.trigger('focus');\n      }\n    }\n\n    /**\n     * returns whether contents is empty or not.\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n    }\n\n    /**\n     * Removes all contents and restores the editable instance to an _emptyPara_.\n     */\n  }, {\n    key: \"empty\",\n    value: function empty() {\n      this.context.invoke('code', dom.emptyPara);\n    }\n\n    /**\n     * normalize content\n     */\n  }, {\n    key: \"normalizeContent\",\n    value: function normalizeContent() {\n      this.$editable[0].normalize();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Clipboard.js\nfunction Clipboard_typeof(o) { \"@babel/helpers - typeof\"; return Clipboard_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Clipboard_typeof(o); }\nfunction Clipboard_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Clipboard_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Clipboard_toPropertyKey(o.key), o); } }\nfunction Clipboard_createClass(e, r, t) { return r && Clipboard_defineProperties(e.prototype, r), t && Clipboard_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Clipboard_toPropertyKey(t) { var i = Clipboard_toPrimitive(t, \"string\"); return \"symbol\" == Clipboard_typeof(i) ? i : i + \"\"; }\nfunction Clipboard_toPrimitive(t, r) { if (\"object\" != Clipboard_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Clipboard_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar Clipboard = /*#__PURE__*/function () {\n  function Clipboard(context) {\n    Clipboard_classCallCheck(this, Clipboard);\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n  }\n  return Clipboard_createClass(Clipboard, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.$editable.on('paste', this.pasteByEvent.bind(this));\n    }\n\n    /**\n     * paste by clipboard event\n     *\n     * @param {Event} event\n     */\n  }, {\n    key: \"pasteByEvent\",\n    value: function pasteByEvent(event) {\n      var _this = this;\n      if (this.context.isDisabled()) {\n        return;\n      }\n      var clipboardData = event.originalEvent.clipboardData;\n      if (clipboardData && clipboardData.items && clipboardData.items.length) {\n        var clipboardFiles = clipboardData.files;\n        var clipboardText = clipboardData.getData('Text');\n\n        // paste img file\n        if (clipboardFiles.length > 0 && this.options.allowClipboardImagePasting) {\n          this.context.invoke('editor.insertImagesOrCallback', clipboardFiles);\n          event.preventDefault();\n        }\n\n        // paste text with maxTextLength check\n        if (clipboardText.length > 0 && this.context.invoke('editor.isLimited', clipboardText.length)) {\n          event.preventDefault();\n        }\n      } else if (window.clipboardData) {\n        // for IE\n        var text = window.clipboardData.getData('text');\n        if (this.context.invoke('editor.isLimited', text.length)) {\n          event.preventDefault();\n        }\n      }\n\n      // Call editor.afterCommand after proceeding default event handler\n      setTimeout(function () {\n        _this.context.invoke('editor.afterCommand');\n      }, 10);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Dropzone.js\nfunction Dropzone_typeof(o) { \"@babel/helpers - typeof\"; return Dropzone_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Dropzone_typeof(o); }\nfunction Dropzone_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Dropzone_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Dropzone_toPropertyKey(o.key), o); } }\nfunction Dropzone_createClass(e, r, t) { return r && Dropzone_defineProperties(e.prototype, r), t && Dropzone_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Dropzone_toPropertyKey(t) { var i = Dropzone_toPrimitive(t, \"string\"); return \"symbol\" == Dropzone_typeof(i) ? i : i + \"\"; }\nfunction Dropzone_toPrimitive(t, r) { if (\"object\" != Dropzone_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Dropzone_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Dropzone = /*#__PURE__*/function () {\n  function Dropzone(context) {\n    Dropzone_classCallCheck(this, Dropzone);\n    this.context = context;\n    this.$eventListener = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n    this.$dropzone = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-dropzone\">', '<div class=\"note-dropzone-message\"></div>', '</div>'].join('')).prependTo(this.$editor);\n  }\n\n  /**\n   * attach Drag and Drop Events\n   */\n  return Dropzone_createClass(Dropzone, [{\n    key: \"initialize\",\n    value: function initialize() {\n      if (this.options.disableDragAndDrop) {\n        // prevent default drop event\n        this.documentEventHandlers.onDrop = function (e) {\n          e.preventDefault();\n        };\n        // do not consider outside of dropzone\n        this.$eventListener = this.$dropzone;\n        this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n      } else {\n        this.attachDragAndDropEvent();\n      }\n    }\n\n    /**\n     * attach Drag and Drop Events\n     */\n  }, {\n    key: \"attachDragAndDropEvent\",\n    value: function attachDragAndDropEvent() {\n      var _this = this;\n      var collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n      var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n      this.documentEventHandlers.onDragenter = function (e) {\n        var isCodeview = _this.context.invoke('codeview.isActivated');\n        var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0;\n        if (!isCodeview && !collection.length && hasEditorSize) {\n          _this.$editor.addClass('dragover');\n          _this.$dropzone.width(_this.$editor.width());\n          _this.$dropzone.height(_this.$editor.height());\n          $dropzoneMessage.text(_this.lang.image.dragImageHere);\n        }\n        collection = collection.add(e.target);\n      };\n      this.documentEventHandlers.onDragleave = function (e) {\n        collection = collection.not(e.target);\n\n        // If nodeName is BODY, then just make it over (fix for IE)\n        if (!collection.length || e.target.nodeName === 'BODY') {\n          collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n          _this.$editor.removeClass('dragover');\n        }\n      };\n      this.documentEventHandlers.onDrop = function () {\n        collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();\n        _this.$editor.removeClass('dragover');\n      };\n\n      // show dropzone on dragenter when dragging a object to document\n      // -but only if the editor is visible, i.e. has a positive width and height\n      this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter).on('dragleave', this.documentEventHandlers.onDragleave).on('drop', this.documentEventHandlers.onDrop);\n\n      // change dropzone's message on hover.\n      this.$dropzone.on('dragenter', function () {\n        _this.$dropzone.addClass('hover');\n        $dropzoneMessage.text(_this.lang.image.dropImage);\n      }).on('dragleave', function () {\n        _this.$dropzone.removeClass('hover');\n        $dropzoneMessage.text(_this.lang.image.dragImageHere);\n      });\n\n      // attach dropImage\n      this.$dropzone.on('drop', function (event) {\n        var dataTransfer = event.originalEvent.dataTransfer;\n\n        // stop the browser from opening the dropped content\n        event.preventDefault();\n        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n          _this.$editable.trigger('focus');\n          _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n        } else {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(dataTransfer.types, function (idx, type) {\n            // skip moz-specific types\n            if (type.toLowerCase().indexOf('_moz_') > -1) {\n              return;\n            }\n            var content = dataTransfer.getData(type);\n            if (type.toLowerCase().indexOf('text') > -1) {\n              _this.context.invoke('editor.pasteHTML', content);\n            } else {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(content).each(function (idx, item) {\n                _this.context.invoke('editor.insertNode', item);\n              });\n            }\n          });\n        }\n      }).on('dragover', false); // prevent default dragover event\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n      Object.keys(this.documentEventHandlers).forEach(function (key) {\n        _this2.$eventListener.off(key.slice(2).toLowerCase(), _this2.documentEventHandlers[key]);\n      });\n      this.documentEventHandlers = {};\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Codeview.js\nfunction Codeview_typeof(o) { \"@babel/helpers - typeof\"; return Codeview_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Codeview_typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction Codeview_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Codeview_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Codeview_toPropertyKey(o.key), o); } }\nfunction Codeview_createClass(e, r, t) { return r && Codeview_defineProperties(e.prototype, r), t && Codeview_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Codeview_toPropertyKey(t) { var i = Codeview_toPrimitive(t, \"string\"); return \"symbol\" == Codeview_typeof(i) ? i : i + \"\"; }\nfunction Codeview_toPrimitive(t, r) { if (\"object\" != Codeview_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Codeview_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n/**\n * @class Codeview\n */\nvar CodeView = /*#__PURE__*/function () {\n  function CodeView(context) {\n    Codeview_classCallCheck(this, CodeView);\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n  return Codeview_createClass(CodeView, [{\n    key: \"sync\",\n    value: function sync(html) {\n      var isCodeview = this.isActivated();\n      var CodeMirror = this.CodeMirrorConstructor;\n      if (isCodeview) {\n        if (html) {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').getDoc().setValue(html);\n          } else {\n            this.$codable.val(html);\n          }\n        } else {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').save();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      this.$codable.on('keyup', function (event) {\n        if (event.keyCode === key.code.ESCAPE) {\n          _this.deactivate();\n        }\n      });\n    }\n\n    /**\n     * @return {Boolean}\n     */\n  }, {\n    key: \"isActivated\",\n    value: function isActivated() {\n      return this.$editor.hasClass('codeview');\n    }\n\n    /**\n     * toggle codeview\n     */\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.isActivated()) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n      this.context.triggerEvent('codeview.toggled');\n    }\n\n    /**\n     * purify input value\n     * @param value\n     * @returns {*}\n     */\n  }, {\n    key: \"purify\",\n    value: function purify(value) {\n      if (this.options.codeviewFilter) {\n        // filter code view regex\n        value = value.replace(this.options.codeviewFilterRegex, '');\n        // allow specific iframe tag\n        if (this.options.codeviewIframeFilter) {\n          var whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n          value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function (tag) {\n            // remove if src attribute is duplicated\n            if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n              return '';\n            }\n            var _iterator = _createForOfIteratorHelper(whitelist),\n              _step;\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var src = _step.value;\n                // pass if src is trusted\n                if (new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"').test(tag)) {\n                  return tag;\n                }\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n            return '';\n          });\n        }\n      }\n      return value;\n    }\n\n    /**\n     * activate code view\n     */\n  }, {\n    key: \"activate\",\n    value: function activate() {\n      var _this2 = this;\n      var CodeMirror = this.CodeMirrorConstructor;\n      this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n      this.$codable.height(this.$editable.height());\n      this.context.invoke('toolbar.updateCodeview', true);\n      this.context.invoke('airPopover.updateCodeview', true);\n      this.$editor.addClass('codeview');\n      this.$codable.trigger('focus');\n\n      // activate CodeMirror as codable\n      if (CodeMirror) {\n        var cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n        // CodeMirror TernServer\n        if (this.options.codemirror.tern) {\n          var server = new CodeMirror.TernServer(this.options.codemirror.tern);\n          cmEditor.ternServer = server;\n          cmEditor.on('cursorActivity', function (cm) {\n            server.updateArgHints(cm);\n          });\n        }\n        cmEditor.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n        });\n        cmEditor.on('change', function () {\n          _this2.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n        });\n\n        // CodeMirror hasn't Padding.\n        cmEditor.setSize(null, this.$editable.outerHeight());\n        this.$codable.data('cmEditor', cmEditor);\n      } else {\n        this.$codable.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', _this2.$codable.val(), event);\n        });\n        this.$codable.on('input', function () {\n          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);\n        });\n      }\n    }\n\n    /**\n     * deactivate code view\n     */\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      var CodeMirror = this.CodeMirrorConstructor;\n      // deactivate CodeMirror as codable\n      if (CodeMirror) {\n        var cmEditor = this.$codable.data('cmEditor');\n        this.$codable.val(cmEditor.getValue());\n        cmEditor.toTextArea();\n      }\n      var value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n      var isChange = this.$editable.html() !== value;\n      this.$editable.html(value);\n      this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n      this.$editor.removeClass('codeview');\n      if (isChange) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n      this.$editable.trigger('focus');\n      this.context.invoke('toolbar.updateCodeview', false);\n      this.context.invoke('airPopover.updateCodeview', false);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isActivated()) {\n        this.deactivate();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Statusbar.js\nfunction Statusbar_typeof(o) { \"@babel/helpers - typeof\"; return Statusbar_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Statusbar_typeof(o); }\nfunction Statusbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Statusbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Statusbar_toPropertyKey(o.key), o); } }\nfunction Statusbar_createClass(e, r, t) { return r && Statusbar_defineProperties(e.prototype, r), t && Statusbar_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Statusbar_toPropertyKey(t) { var i = Statusbar_toPrimitive(t, \"string\"); return \"symbol\" == Statusbar_typeof(i) ? i : i + \"\"; }\nfunction Statusbar_toPrimitive(t, r) { if (\"object\" != Statusbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Statusbar_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar EDITABLE_PADDING = 24;\nvar Statusbar = /*#__PURE__*/function () {\n  function Statusbar(context) {\n    Statusbar_classCallCheck(this, Statusbar);\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n  }\n  return Statusbar_createClass(Statusbar, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      if (this.options.airMode || this.options.disableResizeEditor) {\n        this.destroy();\n        return;\n      }\n      this.$statusbar.on('mousedown touchstart', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        var editableTop = _this.$editable.offset().top - _this.$document.scrollTop();\n        var editableCodeTop = _this.$codable.offset().top - _this.$document.scrollTop();\n        var onStatusbarMove = function onStatusbarMove(event) {\n          var originalEvent = event.type == 'mousemove' ? event : event.originalEvent.touches[0];\n          var height = originalEvent.clientY - (editableTop + EDITABLE_PADDING);\n          var heightCode = originalEvent.clientY - (editableCodeTop + EDITABLE_PADDING);\n          height = _this.options.minheight > 0 ? Math.max(height, _this.options.minheight) : height;\n          height = _this.options.maxHeight > 0 ? Math.min(height, _this.options.maxHeight) : height;\n          heightCode = _this.options.minheight > 0 ? Math.max(heightCode, _this.options.minheight) : heightCode;\n          heightCode = _this.options.maxHeight > 0 ? Math.min(heightCode, _this.options.maxHeight) : heightCode;\n          _this.$editable.height(height);\n          _this.$codable.height(heightCode);\n        };\n        _this.$document.on('mousemove touchmove', onStatusbarMove).one('mouseup touchend', function () {\n          _this.$document.off('mousemove touchmove', onStatusbarMove);\n        });\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$statusbar.off();\n      this.$statusbar.addClass('locked');\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Fullscreen.js\nfunction Fullscreen_typeof(o) { \"@babel/helpers - typeof\"; return Fullscreen_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Fullscreen_typeof(o); }\nfunction Fullscreen_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Fullscreen_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Fullscreen_toPropertyKey(o.key), o); } }\nfunction Fullscreen_createClass(e, r, t) { return r && Fullscreen_defineProperties(e.prototype, r), t && Fullscreen_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Fullscreen_toPropertyKey(t) { var i = Fullscreen_toPrimitive(t, \"string\"); return \"symbol\" == Fullscreen_typeof(i) ? i : i + \"\"; }\nfunction Fullscreen_toPrimitive(t, r) { if (\"object\" != Fullscreen_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Fullscreen_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Fullscreen = /*#__PURE__*/function () {\n  function Fullscreen(context) {\n    var _this = this;\n    Fullscreen_classCallCheck(this, Fullscreen);\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);\n    this.$scrollbar = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('html, body');\n    this.scrollbarClassName = 'note-fullscreen-body';\n    this.onResize = function () {\n      _this.resizeTo({\n        h: _this.$window.height() - _this.$toolbar.outerHeight()\n      });\n    };\n  }\n  return Fullscreen_createClass(Fullscreen, [{\n    key: \"resizeTo\",\n    value: function resizeTo(size) {\n      this.$editable.css('height', size.h);\n      this.$codable.css('height', size.h);\n      if (this.$codable.data('cmeditor')) {\n        this.$codable.data('cmeditor').setsize(null, size.h);\n      }\n    }\n\n    /**\n     * toggle fullscreen\n     */\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      this.$editor.toggleClass('fullscreen');\n      var isFullscreen = this.isFullscreen();\n      this.$scrollbar.toggleClass(this.scrollbarClassName, isFullscreen);\n      if (isFullscreen) {\n        this.$editable.data('orgHeight', this.$editable.css('height'));\n        this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n        this.$editable.css('maxHeight', '');\n        this.$window.on('resize', this.onResize).trigger('resize');\n      } else {\n        this.$window.off('resize', this.onResize);\n        this.resizeTo({\n          h: this.$editable.data('orgHeight')\n        });\n        this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n      }\n      this.context.invoke('toolbar.updateFullscreen', isFullscreen);\n    }\n  }, {\n    key: \"isFullscreen\",\n    value: function isFullscreen() {\n      return this.$editor.hasClass('fullscreen');\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$scrollbar.removeClass(this.scrollbarClassName);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Handle.js\nfunction Handle_typeof(o) { \"@babel/helpers - typeof\"; return Handle_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Handle_typeof(o); }\nfunction Handle_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Handle_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Handle_toPropertyKey(o.key), o); } }\nfunction Handle_createClass(e, r, t) { return r && Handle_defineProperties(e.prototype, r), t && Handle_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Handle_toPropertyKey(t) { var i = Handle_toPrimitive(t, \"string\"); return \"symbol\" == Handle_typeof(i) ? i : i + \"\"; }\nfunction Handle_toPrimitive(t, r) { if (\"object\" != Handle_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Handle_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar Handle = /*#__PURE__*/function () {\n  function Handle(context) {\n    var _this = this;\n    Handle_classCallCheck(this, Handle);\n    this.context = context;\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        if (_this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n  return Handle_createClass(Handle, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$handle = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class=\"note-handle\">', '<div class=\"note-control-selection\">', '<div class=\"note-control-selection-bg\"></div>', '<div class=\"note-control-holder note-control-nw\"></div>', '<div class=\"note-control-holder note-control-ne\"></div>', '<div class=\"note-control-holder note-control-sw\"></div>', '<div class=\"', this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing', ' note-control-se\"></div>', this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>', '</div>', '</div>'].join('')).prependTo(this.$editingArea);\n      this.$handle.on('mousedown', function (event) {\n        if (dom.isControlSizing(event.target)) {\n          event.preventDefault();\n          event.stopPropagation();\n          var $target = _this2.$handle.find('.note-control-selection').data('target');\n          var posStart = $target.offset();\n          var scrollTop = _this2.$document.scrollTop();\n          var onMouseMove = function onMouseMove(event) {\n            _this2.context.invoke('editor.resizeTo', {\n              x: event.clientX - posStart.left,\n              y: event.clientY - (posStart.top - scrollTop)\n            }, $target, !event.shiftKey);\n            _this2.update($target[0], event);\n          };\n          _this2.$document.on('mousemove', onMouseMove).one('mouseup', function (e) {\n            e.preventDefault();\n            _this2.$document.off('mousemove', onMouseMove);\n            _this2.context.invoke('editor.afterCommand');\n          });\n          if (!$target.data('ratio')) {\n            // original ratio.\n            $target.data('ratio', $target.height() / $target.width());\n          }\n        }\n      });\n\n      // Listen for scrolling on the handle overlay.\n      this.$handle.on('wheel', function (event) {\n        event.preventDefault();\n        _this2.update();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$handle.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n      var isImage = dom.isImg(target);\n      var $selection = this.$handle.find('.note-control-selection');\n      this.context.invoke('imagePopover.update', target, event);\n      if (isImage) {\n        var $image = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target);\n        var areaRect = this.$editingArea[0].getBoundingClientRect();\n        var imageRect = target.getBoundingClientRect();\n        $selection.css({\n          display: 'block',\n          left: imageRect.left - areaRect.left,\n          top: imageRect.top - areaRect.top,\n          width: imageRect.width,\n          height: imageRect.height\n        }).data('target', $image); // save current image element.\n\n        var origImageObj = new Image();\n        origImageObj.src = $image.attr('src');\n        var sizingText = imageRect.width + 'x' + imageRect.height + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n        $selection.find('.note-control-selection-info').text(sizingText);\n        this.context.invoke('editor.saveTarget', target);\n      } else {\n        this.hide();\n      }\n      return isImage;\n    }\n\n    /**\n     * hide\n     *\n     * @param {jQuery} $handle\n     */\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.context.invoke('editor.clearTarget');\n      this.$handle.children().hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoLink.js\nfunction AutoLink_typeof(o) { \"@babel/helpers - typeof\"; return AutoLink_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoLink_typeof(o); }\nfunction AutoLink_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoLink_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoLink_toPropertyKey(o.key), o); } }\nfunction AutoLink_createClass(e, r, t) { return r && AutoLink_defineProperties(e.prototype, r), t && AutoLink_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoLink_toPropertyKey(t) { var i = AutoLink_toPrimitive(t, \"string\"); return \"symbol\" == AutoLink_typeof(i) ? i : i + \"\"; }\nfunction AutoLink_toPrimitive(t, r) { if (\"object\" != AutoLink_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoLink_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar defaultScheme = 'http://';\nvar linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@|xmpp:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\nvar AutoLink = /*#__PURE__*/function () {\n  function AutoLink(context) {\n    var _this = this;\n    AutoLink_classCallCheck(this, AutoLink);\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      }\n    };\n  }\n  return AutoLink_createClass(AutoLink, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWordRange) {\n        return;\n      }\n      var keyword = this.lastWordRange.toString();\n      var match = keyword.match(linkPattern);\n      if (match && (match[1] || match[2])) {\n        var link = match[1] ? keyword : defaultScheme + keyword;\n        var urlText = this.options.showDomainOnlyForAutolink ? keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:xmpp?:?)?(?:www\\.)?/i, '').split('/')[0] : keyword;\n        var node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a></a>').html(urlText).attr('href', link)[0];\n        if (this.context.options.linkTargetBlank) {\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).attr('target', '_blank');\n        }\n        this.lastWordRange.insertNode(node);\n        this.lastWordRange = null;\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      if (lists.contains([key.code.ENTER, key.code.SPACE], event.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWordRange = wordRange;\n      }\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      if (key.code.SPACE === event.keyCode || key.code.ENTER === event.keyCode && !event.shiftKey) {\n        this.replace();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoSync.js\nfunction AutoSync_typeof(o) { \"@babel/helpers - typeof\"; return AutoSync_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoSync_typeof(o); }\nfunction AutoSync_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoSync_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoSync_toPropertyKey(o.key), o); } }\nfunction AutoSync_createClass(e, r, t) { return r && AutoSync_defineProperties(e.prototype, r), t && AutoSync_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoSync_toPropertyKey(t) { var i = AutoSync_toPrimitive(t, \"string\"); return \"symbol\" == AutoSync_typeof(i) ? i : i + \"\"; }\nfunction AutoSync_toPrimitive(t, r) { if (\"object\" != AutoSync_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoSync_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n/**\n * textarea auto sync.\n */\nvar AutoSync = /*#__PURE__*/function () {\n  function AutoSync(context) {\n    var _this = this;\n    AutoSync_classCallCheck(this, AutoSync);\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': function summernoteChange() {\n        _this.$note.val(context.invoke('code'));\n      }\n    };\n  }\n  return AutoSync_createClass(AutoSync, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return dom.isTextarea(this.$note[0]);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AutoReplace.js\nfunction AutoReplace_typeof(o) { \"@babel/helpers - typeof\"; return AutoReplace_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AutoReplace_typeof(o); }\nfunction AutoReplace_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AutoReplace_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AutoReplace_toPropertyKey(o.key), o); } }\nfunction AutoReplace_createClass(e, r, t) { return r && AutoReplace_defineProperties(e.prototype, r), t && AutoReplace_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AutoReplace_toPropertyKey(t) { var i = AutoReplace_toPrimitive(t, \"string\"); return \"symbol\" == AutoReplace_typeof(i) ? i : i + \"\"; }\nfunction AutoReplace_toPrimitive(t, r) { if (\"object\" != AutoReplace_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AutoReplace_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar AutoReplace = /*#__PURE__*/function () {\n  function AutoReplace(context) {\n    var _this = this;\n    AutoReplace_classCallCheck(this, AutoReplace);\n    this.context = context;\n    this.options = context.options.replace || {};\n    this.keys = [key.code.ENTER, key.code.SPACE, key.code.PERIOD, key.code.COMMA, key.code.SEMICOLON, key.code.SLASH];\n    this.previousKeydownCode = null;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      }\n    };\n  }\n  return AutoReplace_createClass(AutoReplace, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.match;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWord) {\n        return;\n      }\n      var self = this;\n      var keyword = this.lastWord.toString();\n      this.options.match(keyword, function (match) {\n        if (match) {\n          var node = '';\n          if (typeof match === 'string') {\n            node = dom.createText(match);\n          } else if (match instanceof jQuery) {\n            node = match[0];\n          } else if (match instanceof Node) {\n            node = match;\n          }\n          if (!node) return;\n          self.lastWord.insertNode(node);\n          self.lastWord = null;\n          self.context.invoke('editor.focus');\n        }\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      // this forces it to remember the last whole word, even if multiple termination keys are pressed\n      // before the previous key is let go.\n      if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n        this.previousKeydownCode = event.keyCode;\n        return;\n      }\n      if (lists.contains(this.keys, event.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWord = wordRange;\n      }\n      this.previousKeydownCode = event.keyCode;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      if (lists.contains(this.keys, event.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Placeholder.js\nfunction Placeholder_typeof(o) { \"@babel/helpers - typeof\"; return Placeholder_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Placeholder_typeof(o); }\nfunction Placeholder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Placeholder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Placeholder_toPropertyKey(o.key), o); } }\nfunction Placeholder_createClass(e, r, t) { return r && Placeholder_defineProperties(e.prototype, r), t && Placeholder_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Placeholder_toPropertyKey(t) { var i = Placeholder_toPrimitive(t, \"string\"); return \"symbol\" == Placeholder_typeof(i) ? i : i + \"\"; }\nfunction Placeholder_toPrimitive(t, r) { if (\"object\" != Placeholder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Placeholder_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Placeholder = /*#__PURE__*/function () {\n  function Placeholder(context) {\n    var _this = this;\n    Placeholder_classCallCheck(this, Placeholder);\n    this.context = context;\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n    this.events = {\n      'summernote.init summernote.change': function summernoteInitSummernoteChange() {\n        _this.update();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n  return Placeholder_createClass(Placeholder, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.placeholder;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-placeholder\"></div>');\n      this.$placeholder.on('click', function () {\n        _this2.context.invoke('focus');\n      }).html(this.options.placeholder).prependTo(this.$editingArea);\n      this.update();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$placeholder.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n      this.$placeholder.toggle(isShow);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Buttons.js\nfunction Buttons_typeof(o) { \"@babel/helpers - typeof\"; return Buttons_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Buttons_typeof(o); }\nfunction Buttons_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Buttons_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Buttons_toPropertyKey(o.key), o); } }\nfunction Buttons_createClass(e, r, t) { return r && Buttons_defineProperties(e.prototype, r), t && Buttons_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Buttons_toPropertyKey(t) { var i = Buttons_toPrimitive(t, \"string\"); return \"symbol\" == Buttons_typeof(i) ? i : i + \"\"; }\nfunction Buttons_toPrimitive(t, r) { if (\"object\" != Buttons_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Buttons_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar Buttons = /*#__PURE__*/function () {\n  function Buttons(context) {\n    Buttons_classCallCheck(this, Buttons);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']);\n  }\n  return Buttons_createClass(Buttons, [{\n    key: \"representShortcut\",\n    value: function representShortcut(editorMethod) {\n      var shortcut = this.invertedKeyMap[editorMethod];\n      if (!this.options.shortcuts || !shortcut) {\n        return '';\n      }\n      if (env.isMac) {\n        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n      }\n      shortcut = shortcut.replace('BACKSLASH', '\\\\').replace('SLASH', '/').replace('LEFTBRACKET', '[').replace('RIGHTBRACKET', ']');\n      return ' (' + shortcut + ')';\n    }\n  }, {\n    key: \"button\",\n    value: function button(o) {\n      if (!this.options.tooltip && o.tooltip) {\n        delete o.tooltip;\n      }\n      o.container = this.options.container;\n      return this.ui.button(o);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.addToolbarButtons();\n      this.addImagePopoverButtons();\n      this.addLinkPopoverButtons();\n      this.addTablePopoverButtons();\n      this.fontInstalledMap = {};\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      delete this.fontInstalledMap;\n    }\n  }, {\n    key: \"isFontInstalled\",\n    value: function isFontInstalled(name) {\n      if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n        this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name);\n      }\n      return this.fontInstalledMap[name];\n    }\n  }, {\n    key: \"isFontDeservedToAdd\",\n    value: function isFontDeservedToAdd(name) {\n      name = name.toLowerCase();\n      return name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1;\n    }\n  }, {\n    key: \"colorPalette\",\n    value: function colorPalette(className, tooltip, backColor, foreColor) {\n      var _this = this;\n      return this.ui.buttonGroup({\n        className: 'note-color ' + className,\n        children: [this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: function click(event) {\n            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget);\n            if (backColor && foreColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor')\n              });\n            } else if (backColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor')\n              });\n            } else if (foreColor) {\n              _this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor')\n              });\n            }\n          },\n          callback: function callback($button) {\n            var $recentColor = $button.find('.note-recent-color');\n            if (backColor) {\n              $recentColor.css('background-color', _this.options.colorButton.backColor);\n              $button.attr('data-backColor', _this.options.colorButton.backColor);\n            }\n            if (foreColor) {\n              $recentColor.css('color', _this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', _this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          }\n        }), this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), this.ui.dropdown({\n          items: (backColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">', this.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"backColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette-' + this.options.id + '\">', '</div>', '<div class=\"note-holder-custom\" id=\"backColorPalette-' + this.options.id + '\" data-event=\"backColor\"></div>', '</div>'].join('') : '') + (foreColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">', this.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"foreColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette-' + this.options.id + '\">', '</div>',\n          // Fix missing Div, Commented to find easily if it's wrong\n          '<div class=\"note-holder-custom\" id=\"foreColorPalette-' + this.options.id + '\" data-event=\"foreColor\"></div>', '</div>'].join('') : ''),\n          callback: function callback($dropdown) {\n            $dropdown.find('.note-holder').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: _this.options.colors,\n                colorsName: _this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n            var customColors = [['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF']];\n            $dropdown.find('.note-holder-custom').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each(function (idx, item) {\n              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).on(\"change\", function () {\n                var $chip = $dropdown.find('#' + external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this).data('event')).find('.note-color-btn').first();\n                var color = this.value.toUpperCase();\n                $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n                $chip.trigger('click');\n              });\n            });\n          },\n          click: function click(event) {\n            event.stopPropagation();\n            var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.' + className).find('.note-dropdown-menu');\n            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);\n            var eventName = $button.data('event');\n            var value = $button.attr('data-value');\n            if (eventName === 'openPalette') {\n              var $picker = $parent.find('#' + value);\n              var $palette = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]);\n\n              // Shift palette chips\n              var $chip = $palette.find('.note-color-btn').last().detach();\n\n              // Set chip attributes\n              var color = $picker.val();\n              $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.trigger('click');\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                var key = eventName === 'backColor' ? 'background-color' : 'color';\n                var $color = $button.closest('.note-color').find('.note-recent-color');\n                var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n              _this.context.invoke('editor.' + eventName, value);\n            }\n          }\n        })]\n      }).render();\n    }\n  }, {\n    key: \"addToolbarButtons\",\n    value: function addToolbarButtons() {\n      var _this2 = this;\n      this.context.memo('button.style', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.magic), _this2.options),\n          tooltip: _this2.lang.style.style,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          className: 'dropdown-style',\n          items: _this2.options.styleTags,\n          title: _this2.lang.style.style,\n          template: function template(item) {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: Object.prototype.hasOwnProperty.call(_this2.lang.style, item) ? _this2.lang.style[item] : item\n              };\n            }\n            var tag = item.tag;\n            var title = item.title;\n            var style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            var className = item.className ? ' class=\"' + item.className + '\"' : '';\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: _this2.context.createInvokeHandler('editor.formatBlock')\n        })]).render();\n      });\n      var _loop = function _loop() {\n        var item = _this2.options.styleTags[styleIdx];\n        _this2.context.memo('button.style.' + item, function () {\n          return _this2.button({\n            className: 'note-btn-style-' + item,\n            contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n            tooltip: _this2.lang.style[item],\n            click: _this2.context.createInvokeHandler('editor.formatBlock')\n          }).render();\n        });\n      };\n      for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n        _loop();\n      }\n      this.context.memo('button.bold', function () {\n        return _this2.button({\n          className: 'note-btn-bold',\n          contents: _this2.ui.icon(_this2.options.icons.bold),\n          tooltip: _this2.lang.font.bold + _this2.representShortcut('bold'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.bold')\n        }).render();\n      });\n      this.context.memo('button.italic', function () {\n        return _this2.button({\n          className: 'note-btn-italic',\n          contents: _this2.ui.icon(_this2.options.icons.italic),\n          tooltip: _this2.lang.font.italic + _this2.representShortcut('italic'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.italic')\n        }).render();\n      });\n      this.context.memo('button.underline', function () {\n        return _this2.button({\n          className: 'note-btn-underline',\n          contents: _this2.ui.icon(_this2.options.icons.underline),\n          tooltip: _this2.lang.font.underline + _this2.representShortcut('underline'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.underline')\n        }).render();\n      });\n      this.context.memo('button.clear', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.eraser),\n          tooltip: _this2.lang.font.clear + _this2.representShortcut('removeFormat'),\n          click: _this2.context.createInvokeHandler('editor.removeFormat')\n        }).render();\n      });\n      this.context.memo('button.strikethrough', function () {\n        return _this2.button({\n          className: 'note-btn-strikethrough',\n          contents: _this2.ui.icon(_this2.options.icons.strikethrough),\n          tooltip: _this2.lang.font.strikethrough + _this2.representShortcut('strikethrough'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n        }).render();\n      });\n      this.context.memo('button.superscript', function () {\n        return _this2.button({\n          className: 'note-btn-superscript',\n          contents: _this2.ui.icon(_this2.options.icons.superscript),\n          tooltip: _this2.lang.font.superscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.superscript')\n        }).render();\n      });\n      this.context.memo('button.subscript', function () {\n        return _this2.button({\n          className: 'note-btn-subscript',\n          contents: _this2.ui.icon(_this2.options.icons.subscript),\n          tooltip: _this2.lang.font.subscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.subscript')\n        }).render();\n      });\n      this.context.memo('button.fontname', function () {\n        var styleInfo = _this2.context.invoke('editor.currentStyle');\n        if (_this2.options.addDefaultFonts) {\n          // Add 'default' fonts into the fontnames array if not exist\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(styleInfo['font-family'].split(','), function (idx, fontname) {\n            fontname = fontname.trim().replace(/['\"]+/g, '');\n            if (_this2.isFontDeservedToAdd(fontname)) {\n              if (_this2.options.fontNames.indexOf(fontname) === -1) {\n                _this2.options.fontNames.push(fontname);\n              }\n            }\n          });\n        }\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontname\"></span>', _this2.options),\n          tooltip: _this2.lang.font.name,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontNames.filter(_this2.isFontInstalled.bind(_this2)),\n          title: _this2.lang.font.name,\n          template: function template(item) {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontName')\n        })]).render();\n      });\n      this.context.memo('button.fontsize', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', _this2.options),\n          tooltip: _this2.lang.font.size,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizes,\n          title: _this2.lang.font.size,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n        })]).render();\n      });\n      this.context.memo('button.fontsizeunit', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', _this2.options),\n          tooltip: _this2.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizeUnits,\n          title: _this2.lang.font.sizeunit,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit')\n        })]).render();\n      });\n      this.context.memo('button.color', function () {\n        return _this2.colorPalette('note-color-all', _this2.lang.color.recent, true, true);\n      });\n      this.context.memo('button.forecolor', function () {\n        return _this2.colorPalette('note-color-fore', _this2.lang.color.foreground, false, true);\n      });\n      this.context.memo('button.backcolor', function () {\n        return _this2.colorPalette('note-color-back', _this2.lang.color.background, true, false);\n      });\n      this.context.memo('button.ul', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.unorderedlist),\n          tooltip: _this2.lang.lists.unordered + _this2.representShortcut('insertUnorderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertUnorderedList')\n        }).render();\n      });\n      this.context.memo('button.ol', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.orderedlist),\n          tooltip: _this2.lang.lists.ordered + _this2.representShortcut('insertOrderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertOrderedList')\n        }).render();\n      });\n      var justifyLeft = this.button({\n        contents: this.ui.icon(this.options.icons.alignLeft),\n        tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n        click: this.context.createInvokeHandler('editor.justifyLeft')\n      });\n      var justifyCenter = this.button({\n        contents: this.ui.icon(this.options.icons.alignCenter),\n        tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n        click: this.context.createInvokeHandler('editor.justifyCenter')\n      });\n      var justifyRight = this.button({\n        contents: this.ui.icon(this.options.icons.alignRight),\n        tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n        click: this.context.createInvokeHandler('editor.justifyRight')\n      });\n      var justifyFull = this.button({\n        contents: this.ui.icon(this.options.icons.alignJustify),\n        tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n        click: this.context.createInvokeHandler('editor.justifyFull')\n      });\n      var outdent = this.button({\n        contents: this.ui.icon(this.options.icons.outdent),\n        tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n        click: this.context.createInvokeHandler('editor.outdent')\n      });\n      var indent = this.button({\n        contents: this.ui.icon(this.options.icons.indent),\n        tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n        click: this.context.createInvokeHandler('editor.indent')\n      });\n      this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n      this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n      this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n      this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n      this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n      this.context.memo('button.indent', func.invoke(indent, 'render'));\n      this.context.memo('button.paragraph', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.alignLeft), _this2.options),\n          tooltip: _this2.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown([_this2.ui.buttonGroup({\n          className: 'note-align',\n          children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n        }), _this2.ui.buttonGroup({\n          className: 'note-list',\n          children: [outdent, indent]\n        })])]).render();\n      });\n      this.context.memo('button.height', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.textHeight), _this2.options),\n          tooltip: _this2.lang.font.height,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          items: _this2.options.lineHeights,\n          checkClassName: _this2.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: _this2.lang.font.height,\n          click: _this2.context.createInvokeHandler('editor.lineHeight')\n        })]).render();\n      });\n      this.context.memo('button.table', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.table), _this2.options),\n          tooltip: _this2.lang.table.table,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          title: _this2.lang.table.table,\n          className: 'note-table',\n          items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n        })], {\n          callback: function callback($node) {\n            var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n            $catcher.css({\n              width: _this2.options.insertTableMaxSize.col + 'em',\n              height: _this2.options.insertTableMaxSize.row + 'em'\n            }).on('mousedown', _this2.context.createInvokeHandler('editor.insertTable')).on('mousemove', _this2.tableMoveHandler.bind(_this2));\n          }\n        }).render();\n      });\n      this.context.memo('button.link', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.link),\n          tooltip: _this2.lang.link.link + _this2.representShortcut('linkDialog.show'),\n          click: _this2.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.picture', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.picture),\n          tooltip: _this2.lang.image.image,\n          click: _this2.context.createInvokeHandler('imageDialog.show')\n        }).render();\n      });\n      this.context.memo('button.video', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.video),\n          tooltip: _this2.lang.video.video,\n          click: _this2.context.createInvokeHandler('videoDialog.show')\n        }).render();\n      });\n      this.context.memo('button.hr', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.minus),\n          tooltip: _this2.lang.hr.insert + _this2.representShortcut('insertHorizontalRule'),\n          click: _this2.context.createInvokeHandler('editor.insertHorizontalRule')\n        }).render();\n      });\n      this.context.memo('button.fullscreen', function () {\n        return _this2.button({\n          className: 'btn-fullscreen note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.arrowsAlt),\n          tooltip: _this2.lang.options.fullscreen,\n          click: _this2.context.createInvokeHandler('fullscreen.toggle')\n        }).render();\n      });\n      this.context.memo('button.codeview', function () {\n        return _this2.button({\n          className: 'btn-codeview note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.code),\n          tooltip: _this2.lang.options.codeview,\n          click: _this2.context.createInvokeHandler('codeview.toggle')\n        }).render();\n      });\n      this.context.memo('button.redo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.redo),\n          tooltip: _this2.lang.history.redo + _this2.representShortcut('redo'),\n          click: _this2.context.createInvokeHandler('editor.redo')\n        }).render();\n      });\n      this.context.memo('button.undo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.undo),\n          tooltip: _this2.lang.history.undo + _this2.representShortcut('undo'),\n          click: _this2.context.createInvokeHandler('editor.undo')\n        }).render();\n      });\n      this.context.memo('button.help', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.question),\n          tooltip: _this2.lang.options.help,\n          click: _this2.context.createInvokeHandler('helpDialog.show')\n        }).render();\n      });\n    }\n\n    /**\n     * image: [\n     *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n     *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n     *   ['remove', ['removeMedia']],\n     * ],\n     */\n  }, {\n    key: \"addImagePopoverButtons\",\n    value: function addImagePopoverButtons() {\n      var _this3 = this;\n      // Image Size Buttons\n      this.context.memo('button.resizeFull', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">100%</span>',\n          tooltip: _this3.lang.image.resizeFull,\n          click: _this3.context.createInvokeHandler('editor.resize', '1')\n        }).render();\n      });\n      this.context.memo('button.resizeHalf', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">50%</span>',\n          tooltip: _this3.lang.image.resizeHalf,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.5')\n        }).render();\n      });\n      this.context.memo('button.resizeQuarter', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">25%</span>',\n          tooltip: _this3.lang.image.resizeQuarter,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.25')\n        }).render();\n      });\n      this.context.memo('button.resizeNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.resizeNone,\n          click: _this3.context.createInvokeHandler('editor.resize', '0')\n        }).render();\n      });\n\n      // Float Buttons\n      this.context.memo('button.floatLeft', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatLeft),\n          tooltip: _this3.lang.image.floatLeft,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'left')\n        }).render();\n      });\n      this.context.memo('button.floatRight', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatRight),\n          tooltip: _this3.lang.image.floatRight,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'right')\n        }).render();\n      });\n      this.context.memo('button.floatNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.floatNone,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'none')\n        }).render();\n      });\n\n      // Remove Buttons\n      this.context.memo('button.removeMedia', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.trash),\n          tooltip: _this3.lang.image.remove,\n          click: _this3.context.createInvokeHandler('editor.removeMedia')\n        }).render();\n      });\n    }\n  }, {\n    key: \"addLinkPopoverButtons\",\n    value: function addLinkPopoverButtons() {\n      var _this4 = this;\n      this.context.memo('button.linkDialogShow', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.link),\n          tooltip: _this4.lang.link.edit,\n          click: _this4.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.unlink', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.unlink),\n          tooltip: _this4.lang.link.unlink,\n          click: _this4.context.createInvokeHandler('editor.unlink')\n        }).render();\n      });\n    }\n\n    /**\n     * table : [\n     *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n     *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n     * ],\n     */\n  }, {\n    key: \"addTablePopoverButtons\",\n    value: function addTablePopoverButtons() {\n      var _this5 = this;\n      this.context.memo('button.addRowUp', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowAbove),\n          tooltip: _this5.lang.table.addRowAbove,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'top')\n        }).render();\n      });\n      this.context.memo('button.addRowDown', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowBelow),\n          tooltip: _this5.lang.table.addRowBelow,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'bottom')\n        }).render();\n      });\n      this.context.memo('button.addColLeft', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colBefore),\n          tooltip: _this5.lang.table.addColLeft,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'left')\n        }).render();\n      });\n      this.context.memo('button.addColRight', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colAfter),\n          tooltip: _this5.lang.table.addColRight,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'right')\n        }).render();\n      });\n      this.context.memo('button.deleteRow', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowRemove),\n          tooltip: _this5.lang.table.delRow,\n          click: _this5.context.createInvokeHandler('editor.deleteRow')\n        }).render();\n      });\n      this.context.memo('button.deleteCol', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colRemove),\n          tooltip: _this5.lang.table.delCol,\n          click: _this5.context.createInvokeHandler('editor.deleteCol')\n        }).render();\n      });\n      this.context.memo('button.deleteTable', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.trash),\n          tooltip: _this5.lang.table.delTable,\n          click: _this5.context.createInvokeHandler('editor.deleteTable')\n        }).render();\n      });\n    }\n  }, {\n    key: \"build\",\n    value: function build($container, groups) {\n      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n        var group = groups[groupIdx];\n        var groupName = Array.isArray(group) ? group[0] : group;\n        var buttons = Array.isArray(group) ? group.length === 1 ? [group[0]] : group[1] : [group];\n        var $group = this.ui.buttonGroup({\n          className: 'note-' + groupName\n        }).render();\n        for (var idx = 0, len = buttons.length; idx < len; idx++) {\n          var btn = this.context.memo('button.' + buttons[idx]);\n          if (btn) {\n            $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n          }\n        }\n        $group.appendTo($container);\n      }\n    }\n\n    /**\n     * @param {jQuery} [$container]\n     */\n  }, {\n    key: \"updateCurrentStyle\",\n    value: function updateCurrentStyle($container) {\n      var $cont = $container || this.$toolbar;\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      this.updateBtnStates($cont, {\n        '.note-btn-bold': function noteBtnBold() {\n          return styleInfo['font-bold'] === 'bold';\n        },\n        '.note-btn-italic': function noteBtnItalic() {\n          return styleInfo['font-italic'] === 'italic';\n        },\n        '.note-btn-underline': function noteBtnUnderline() {\n          return styleInfo['font-underline'] === 'underline';\n        },\n        '.note-btn-subscript': function noteBtnSubscript() {\n          return styleInfo['font-subscript'] === 'subscript';\n        },\n        '.note-btn-superscript': function noteBtnSuperscript() {\n          return styleInfo['font-superscript'] === 'superscript';\n        },\n        '.note-btn-strikethrough': function noteBtnStrikethrough() {\n          return styleInfo['font-strikethrough'] === 'strikethrough';\n        }\n      });\n      if (styleInfo['font-family']) {\n        var fontNames = styleInfo['font-family'].split(',').map(function (name) {\n          return name.replace(/[\\'\\\"]/g, '').replace(/\\s+$/, '').replace(/^\\s+/, '');\n        });\n        var fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n        $cont.find('.dropdown-fontname a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare string to avoid creating another func.\n          var isChecked = $item.data('value') + '' === fontName + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n      }\n      if (styleInfo['font-size']) {\n        var fontSize = styleInfo['font-size'];\n        $cont.find('.dropdown-fontsize a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare with string to avoid creating another func.\n          var isChecked = $item.data('value') + '' === fontSize + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsize').text(fontSize);\n        var fontSizeUnit = styleInfo['font-size-unit'];\n        $cont.find('.dropdown-fontsizeunit a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          var isChecked = $item.data('value') + '' === fontSizeUnit + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n      }\n      if (styleInfo['line-height']) {\n        var lineHeight = styleInfo['line-height'];\n        $cont.find('.dropdown-line-height a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);\n          // always compare with string to avoid creating another func.\n          var isChecked = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).data('value') + '' === lineHeight + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-line-height').text(lineHeight);\n      }\n    }\n  }, {\n    key: \"updateBtnStates\",\n    value: function updateBtnStates($container, infos) {\n      var _this6 = this;\n      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(infos, function (selector, pred) {\n        _this6.ui.toggleBtnActive($container.find(selector), pred());\n      });\n    }\n  }, {\n    key: \"tableMoveHandler\",\n    value: function tableMoveHandler(event) {\n      var PX_PER_EM = 18;\n      var $picker = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n      var $dimensionDisplay = $picker.next();\n      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n      var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n      var posOffset;\n      // HTML5 with jQuery - e.offsetX is undefined in Firefox\n      if (event.offsetX === undefined) {\n        var posCatcher = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target).offset();\n        posOffset = {\n          x: event.pageX - posCatcher.left,\n          y: event.pageY - posCatcher.top\n        };\n      } else {\n        posOffset = {\n          x: event.offsetX,\n          y: event.offsetY\n        };\n      }\n      var dim = {\n        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n        r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n      };\n      $highlighted.css({\n        width: dim.c + 'em',\n        height: dim.r + 'em'\n      });\n      $catcher.data('value', dim.c + 'x' + dim.r);\n      if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n        $unhighlighted.css({\n          width: dim.c + 1 + 'em'\n        });\n      }\n      if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n        $unhighlighted.css({\n          height: dim.r + 1 + 'em'\n        });\n      }\n      $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/Toolbar.js\nfunction Toolbar_typeof(o) { \"@babel/helpers - typeof\"; return Toolbar_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, Toolbar_typeof(o); }\nfunction Toolbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction Toolbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, Toolbar_toPropertyKey(o.key), o); } }\nfunction Toolbar_createClass(e, r, t) { return r && Toolbar_defineProperties(e.prototype, r), t && Toolbar_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction Toolbar_toPropertyKey(t) { var i = Toolbar_toPrimitive(t, \"string\"); return \"symbol\" == Toolbar_typeof(i) ? i : i + \"\"; }\nfunction Toolbar_toPrimitive(t, r) { if (\"object\" != Toolbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != Toolbar_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Toolbar = /*#__PURE__*/function () {\n  function Toolbar(context) {\n    Toolbar_classCallCheck(this, Toolbar);\n    this.context = context;\n    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);\n    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n  return Toolbar_createClass(Toolbar, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !this.options.airMode;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n      this.options.toolbar = this.options.toolbar || [];\n      if (!this.options.toolbar.length) {\n        this.$toolbar.hide();\n      } else {\n        this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n      }\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n      this.changeContainer(false);\n      this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () {\n        _this.context.invoke('buttons.updateCurrentStyle');\n      });\n      this.context.invoke('buttons.updateCurrentStyle');\n      if (this.options.followingToolbar) {\n        this.$window.on('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$toolbar.children().remove();\n      if (this.options.followingToolbar) {\n        this.$window.off('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"followScroll\",\n    value: function followScroll() {\n      if (this.$editor.hasClass('fullscreen')) {\n        return false;\n      }\n      var editorHeight = this.$editor.outerHeight();\n      var editorWidth = this.$editor.width();\n      var toolbarHeight = this.$toolbar.height();\n      var statusbarHeight = this.$statusbar.height();\n\n      // check if the web app is currently using another static bar\n      var otherBarHeight = 0;\n      if (this.options.otherStaticBar) {\n        otherBarHeight = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.otherStaticBar).outerHeight();\n      }\n      var currentOffset = this.$document.scrollTop();\n      var editorOffsetTop = this.$editor.offset().top;\n      var editorOffsetBottom = editorOffsetTop + editorHeight;\n      var activateOffset = editorOffsetTop - otherBarHeight;\n      var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n      if (!this.isFollowing && currentOffset > activateOffset && currentOffset < deactivateOffsetBottom - toolbarHeight) {\n        this.isFollowing = true;\n        this.$editable.css({\n          marginTop: this.$toolbar.outerHeight()\n        });\n        this.$toolbar.css({\n          position: 'fixed',\n          top: otherBarHeight,\n          width: editorWidth,\n          zIndex: 1000\n        });\n      } else if (this.isFollowing && (currentOffset < activateOffset || currentOffset > deactivateOffsetBottom)) {\n        this.isFollowing = false;\n        this.$toolbar.css({\n          position: 'relative',\n          top: 0,\n          width: '100%',\n          zIndex: 'auto'\n        });\n        this.$editable.css({\n          marginTop: ''\n        });\n      }\n    }\n  }, {\n    key: \"changeContainer\",\n    value: function changeContainer(isFullscreen) {\n      if (isFullscreen) {\n        this.$toolbar.prependTo(this.$editor);\n      } else {\n        if (this.options.toolbarContainer) {\n          this.$toolbar.appendTo(this.options.toolbarContainer);\n        }\n      }\n      if (this.options.followingToolbar) {\n        this.followScroll();\n      }\n    }\n  }, {\n    key: \"updateFullscreen\",\n    value: function updateFullscreen(isFullscreen) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n      this.changeContainer(isFullscreen);\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n    }\n  }, {\n    key: \"activate\",\n    value: function activate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n      this.ui.toggleBtn($btn, true);\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n      this.ui.toggleBtn($btn, false);\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/LinkDialog.js\nfunction LinkDialog_typeof(o) { \"@babel/helpers - typeof\"; return LinkDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, LinkDialog_typeof(o); }\nfunction LinkDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction LinkDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, LinkDialog_toPropertyKey(o.key), o); } }\nfunction LinkDialog_createClass(e, r, t) { return r && LinkDialog_defineProperties(e.prototype, r), t && LinkDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction LinkDialog_toPropertyKey(t) { var i = LinkDialog_toPrimitive(t, \"string\"); return \"symbol\" == LinkDialog_typeof(i) ? i : i + \"\"; }\nfunction LinkDialog_toPrimitive(t, r) { if (\"object\" != LinkDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != LinkDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar LinkDialog_MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nvar LinkDialog_TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nvar LinkDialog_URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\nvar LinkDialog = /*#__PURE__*/function () {\n  function LinkDialog(context) {\n    LinkDialog_classCallCheck(this, LinkDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n  return LinkDialog_createClass(LinkDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.textToDisplay, \"</label>\"), \"<input id=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-link-text form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>', '<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.url, \"</label>\"), \"<input id=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-link-url form-control note-form-control note-input\\\" type=\\\"text\\\" value=\\\"http://\\\"/>\"), '</div>', !this.options.disableLinkTarget ? external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(this.ui.checkbox({\n        className: 'sn-checkbox-open-in-new-window',\n        text: this.lang.link.openInNewWindow,\n        checked: true\n      }).render()).html() : ''].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.link.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        className: 'link-dialog',\n        title: this.lang.link.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"checkLinkUrl\",\n    value: function checkLinkUrl(linkUrl) {\n      if (LinkDialog_MAILTO_PATTERN.test(linkUrl)) {\n        return 'mailto://' + linkUrl;\n      } else if (LinkDialog_TEL_PATTERN.test(linkUrl)) {\n        return 'tel://' + linkUrl;\n      } else if (!LinkDialog_URL_SCHEME_PATTERN.test(linkUrl)) {\n        return 'http://' + linkUrl;\n      }\n      return linkUrl;\n    }\n  }, {\n    key: \"onCheckLinkUrl\",\n    value: function onCheckLinkUrl($input) {\n      var _this = this;\n      $input.on('blur', function (event) {\n        event.target.value = event.target.value == '' ? '' : _this.checkLinkUrl(event.target.value);\n      });\n    }\n\n    /**\n     * toggle update button\n     */\n  }, {\n    key: \"toggleLinkBtn\",\n    value: function toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n      this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n    }\n\n    /**\n     * Show link dialog and set event handlers on dialog controls.\n     *\n     * @param {Object} linkInfo\n     * @return {Promise}\n     */\n  }, {\n    key: \"showLinkDialog\",\n    value: function showLinkDialog(linkInfo) {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $linkText = _this2.$dialog.find('.note-link-text');\n        var $linkUrl = _this2.$dialog.find('.note-link-url');\n        var $linkBtn = _this2.$dialog.find('.note-link-btn');\n        var $openInNewWindow = _this2.$dialog.find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          // If no url was given and given text is valid URL then copy that into URL Field\n          if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n            linkInfo.url = _this2.checkLinkUrl(linkInfo.text);\n          }\n          $linkText.on('input paste propertychange', function () {\n            // If linktext was modified by input events,\n            // cloning text from linkUrl will be stopped.\n            var text = $linkText.val();\n            var div = document.createElement('div');\n            div.innerText = text;\n            text = div.innerHTML;\n            linkInfo.text = text;\n            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.text);\n          $linkUrl.on('input paste propertychange', function () {\n            // Display same text on `Text to display` as default\n            // when linktext has no text\n            if (!linkInfo.text) {\n              $linkText.val($linkUrl.val());\n            }\n            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.url);\n          if (!env.isSupportTouch) {\n            $linkUrl.trigger('focus');\n          }\n          _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          _this2.bindEnterKey($linkUrl, $linkBtn);\n          _this2.bindEnterKey($linkText, $linkBtn);\n          _this2.onCheckLinkUrl($linkUrl);\n          var isNewWindowChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this2.context.options.linkTargetBlank;\n          $openInNewWindow.prop('checked', isNewWindowChecked);\n          $linkBtn.one('click', function (event) {\n            event.preventDefault();\n            deferred.resolve({\n              range: linkInfo.range,\n              url: $linkUrl.val(),\n              text: $linkText.val(),\n              isNewWindow: $openInNewWindow.is(':checked')\n            });\n            _this2.ui.hideDialog(_this2.$dialog);\n          });\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          // detach events\n          $linkText.off();\n          $linkUrl.off();\n          $linkBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n\n    /**\n     * @param {Object} layoutInfo\n     */\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n      var linkInfo = this.context.invoke('editor.getLinkInfo');\n      this.context.invoke('editor.saveRange');\n      this.showLinkDialog(linkInfo).then(function (linkInfo) {\n        _this3.context.invoke('editor.restoreRange');\n        _this3.context.invoke('editor.createLink', linkInfo);\n      }).fail(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/LinkPopover.js\nfunction LinkPopover_typeof(o) { \"@babel/helpers - typeof\"; return LinkPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, LinkPopover_typeof(o); }\nfunction LinkPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction LinkPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, LinkPopover_toPropertyKey(o.key), o); } }\nfunction LinkPopover_createClass(e, r, t) { return r && LinkPopover_defineProperties(e.prototype, r), t && LinkPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction LinkPopover_toPropertyKey(t) { var i = LinkPopover_toPrimitive(t, \"string\"); return \"symbol\" == LinkPopover_typeof(i) ? i : i + \"\"; }\nfunction LinkPopover_toPrimitive(t, r) { if (\"object\" != LinkPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != LinkPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar LinkPopover = /*#__PURE__*/function () {\n  function LinkPopover(context) {\n    var _this = this;\n    LinkPopover_classCallCheck(this, LinkPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return LinkPopover_createClass(LinkPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.link);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-link-popover',\n        callback: function callback($node) {\n          var $content = $node.find('.popover-content,.note-popover-content');\n          $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n        }\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.link);\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!this.context.invoke('editor.hasFocus')) {\n        this.hide();\n        return;\n      }\n      var rng = this.context.invoke('editor.getLastRange');\n      if (rng.isCollapsed() && rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        var href = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href');\n        this.$popover.find('a').attr('href', href).text(href);\n        var pos = dom.posFromPlaceholder(anchor);\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/ImageDialog.js\nfunction ImageDialog_typeof(o) { \"@babel/helpers - typeof\"; return ImageDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ImageDialog_typeof(o); }\nfunction ImageDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ImageDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ImageDialog_toPropertyKey(o.key), o); } }\nfunction ImageDialog_createClass(e, r, t) { return r && ImageDialog_defineProperties(e.prototype, r), t && ImageDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ImageDialog_toPropertyKey(t) { var i = ImageDialog_toPrimitive(t, \"string\"); return \"symbol\" == ImageDialog_typeof(i) ? i : i + \"\"; }\nfunction ImageDialog_toPrimitive(t, r) { if (\"object\" != ImageDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ImageDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar ImageDialog = /*#__PURE__*/function () {\n  function ImageDialog(context) {\n    ImageDialog_classCallCheck(this, ImageDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return ImageDialog_createClass(ImageDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var imageLimitation = '';\n      if (this.options.maximumImageFileSize) {\n        var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n        var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';\n        imageLimitation = \"<small>\".concat(this.lang.image.maximumFileSize + ' : ' + readableSize, \"</small>\");\n      }\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group note-group-select-from-files\">', '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>', '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ', ' type=\"file\" name=\"files\" accept=\"' + this.options.acceptImageFileTypes + '\" multiple=\"multiple\"/>', imageLimitation, '</div>', '<div class=\"form-group note-group-image-url\">', '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>', '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>', '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.image.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.image.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      this.context.invoke('editor.saveRange');\n      this.showImageDialog().then(function (data) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n        _this.context.invoke('editor.restoreRange');\n        if (typeof data === 'string') {\n          // image url\n          // If onImageLinkInsert set,\n          if (_this.options.callbacks.onImageLinkInsert) {\n            _this.context.triggerEvent('image.link.insert', data);\n          } else {\n            _this.context.invoke('editor.insertImage', data);\n          }\n        } else {\n          // array of files\n          _this.context.invoke('editor.insertImagesOrCallback', data);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n  }, {\n    key: \"showImageDialog\",\n    value: function showImageDialog() {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $imageInput = _this2.$dialog.find('.note-image-input');\n        var $imageUrl = _this2.$dialog.find('.note-image-url');\n        var $imageBtn = _this2.$dialog.find('.note-image-btn');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          // Cloning imageInput to clear element.\n          $imageInput.replaceWith($imageInput.clone().on('change', function (event) {\n            deferred.resolve(event.target.files || event.target.value);\n          }).val(''));\n          $imageUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($imageBtn, $imageUrl.val());\n          }).val('');\n          if (!env.isSupportTouch) {\n            $imageUrl.trigger('focus');\n          }\n          $imageBtn.on('click', function (event) {\n            event.preventDefault();\n            deferred.resolve($imageUrl.val());\n          });\n          _this2.bindEnterKey($imageUrl, $imageBtn);\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $imageInput.off();\n          $imageUrl.off();\n          $imageBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/ImagePopover.js\nfunction ImagePopover_typeof(o) { \"@babel/helpers - typeof\"; return ImagePopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, ImagePopover_typeof(o); }\nfunction ImagePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction ImagePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, ImagePopover_toPropertyKey(o.key), o); } }\nfunction ImagePopover_createClass(e, r, t) { return r && ImagePopover_defineProperties(e.prototype, r), t && ImagePopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction ImagePopover_toPropertyKey(t) { var i = ImagePopover_toPrimitive(t, \"string\"); return \"symbol\" == ImagePopover_typeof(i) ? i : i + \"\"; }\nfunction ImagePopover_toPrimitive(t, r) { if (\"object\" != ImagePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != ImagePopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nvar ImagePopover = /*#__PURE__*/function () {\n  function ImagePopover(context) {\n    var _this = this;\n    ImagePopover_classCallCheck(this, ImagePopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n    this.events = {\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return ImagePopover_createClass(ImagePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.image);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-image-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.image);\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (dom.isImg(target)) {\n        var position = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target).offset();\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        var pos = {};\n        if (this.options.popatmouse) {\n          pos.left = event.pageX - 20;\n          pos.top = event.pageY;\n        } else {\n          pos = position;\n        }\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/TablePopover.js\nfunction TablePopover_typeof(o) { \"@babel/helpers - typeof\"; return TablePopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, TablePopover_typeof(o); }\nfunction TablePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction TablePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, TablePopover_toPropertyKey(o.key), o); } }\nfunction TablePopover_createClass(e, r, t) { return r && TablePopover_defineProperties(e.prototype, r), t && TablePopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction TablePopover_toPropertyKey(t) { var i = TablePopover_toPrimitive(t, \"string\"); return \"symbol\" == TablePopover_typeof(i) ? i : i + \"\"; }\nfunction TablePopover_toPrimitive(t, r) { if (\"object\" != TablePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != TablePopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nvar TablePopover = /*#__PURE__*/function () {\n  function TablePopover(context) {\n    var _this = this;\n    TablePopover_classCallCheck(this, TablePopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, event) {\n        _this.update(event.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': function summernoteKeyupSummernoteScrollSummernoteChange() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, event) {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return TablePopover_createClass(TablePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.table);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-table-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n      // [workaround] Disable Firefox's default table editor\n      if (env.isFF) {\n        document.execCommand('enableInlineTableEditing', false, false);\n      }\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n      var isCell = dom.isCell(target) || dom.isCell(target === null || target === void 0 ? void 0 : target.parentElement);\n      if (isCell) {\n        var pos = dom.posFromPlaceholder(target);\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n      return isCell;\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/VideoDialog.js\nfunction VideoDialog_typeof(o) { \"@babel/helpers - typeof\"; return VideoDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, VideoDialog_typeof(o); }\nfunction VideoDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction VideoDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, VideoDialog_toPropertyKey(o.key), o); } }\nfunction VideoDialog_createClass(e, r, t) { return r && VideoDialog_defineProperties(e.prototype, r), t && VideoDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction VideoDialog_toPropertyKey(t) { var i = VideoDialog_toPrimitive(t, \"string\"); return \"symbol\" == VideoDialog_typeof(i) ? i : i + \"\"; }\nfunction VideoDialog_toPrimitive(t, r) { if (\"object\" != VideoDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != VideoDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar VideoDialog = /*#__PURE__*/function () {\n  function VideoDialog(context) {\n    VideoDialog_classCallCheck(this, VideoDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return VideoDialog_createClass(VideoDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group row-fluid\">', \"<label for=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.video.url, \" <small class=\\\"text-muted\\\">\").concat(this.lang.video.providers, \"</small></label>\"), \"<input id=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-video-url form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.video.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.video.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"createVideoNode\",\n    value: function createVideoNode(url) {\n      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, peertube, mp4, ogg, webm)\n      var ytRegExp = /(?:youtu\\.be\\/|youtube\\.com\\/(?:[^\\/\\n\\s]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/|\\S*?[?&]v=|shorts\\/|live\\/))([^&\\n?]+)(?:.*[?&]t=([^&\\n]+))?.*/;\n      var ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n      var ytMatch = url.match(ytRegExp);\n      var gdRegExp = /(?:\\.|\\/\\/)drive\\.google\\.com\\/file\\/d\\/(.[a-zA-Z0-9_-]*)\\/view/;\n      var gdMatch = url.match(gdRegExp);\n      var igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/(reel|p)\\/(.[a-zA-Z0-9_-]*)/;\n      var igMatch = url.match(igRegExp);\n      var vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n      var vMatch = url.match(vRegExp);\n      var vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n      var vimMatch = url.match(vimRegExp);\n      var dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n      var dmMatch = url.match(dmRegExp);\n      var youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n      var youkuMatch = url.match(youkuRegExp);\n      var peerTubeRegExp = /\\/\\/(.*)\\/videos\\/watch\\/([^?]*)(?:\\?(?:start=(\\w*))?(?:&stop=(\\w*))?(?:&loop=([10]))?(?:&autoplay=([10]))?(?:&muted=([10]))?)?/;\n      var peerTubeMatch = url.match(peerTubeRegExp);\n      var qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n      var qqMatch = url.match(qqRegExp);\n      var qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n      var qqMatch2 = url.match(qqRegExp2);\n      var mp4RegExp = /^.+.(mp4|m4v)$/;\n      var mp4Match = url.match(mp4RegExp);\n      var oggRegExp = /^.+.(ogg|ogv)$/;\n      var oggMatch = url.match(oggRegExp);\n      var webmRegExp = /^.+.(webm)$/;\n      var webmMatch = url.match(webmRegExp);\n      var fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n      var fbMatch = url.match(fbRegExp);\n      var $video;\n      if (ytMatch && ytMatch[1].length === 11) {\n        var youtubeId = ytMatch[1];\n        var start = 0;\n        if (typeof ytMatch[2] !== 'undefined') {\n          var ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n          if (ytMatchForStart) {\n            for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n              start += typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0;\n            }\n          } else {\n            start = parseInt(ytMatch[2], 10);\n          }\n        }\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : '')).attr('width', '640').attr('height', '360');\n      } else if (gdMatch && gdMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://drive.google.com/file/d/' + gdMatch[1] + '/preview').attr('width', '640').attr('height', '480');\n      } else if (igMatch && igMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://instagram.com/p/' + igMatch[2] + '/embed/').attr('width', '612').attr('height', '710').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else if (vMatch && vMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', vMatch[0] + '/embed/simple').attr('width', '600').attr('height', '600').attr('class', 'vine-embed');\n      } else if (vimMatch && vimMatch[3].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('src', '//player.vimeo.com/video/' + vimMatch[3]).attr('width', '640').attr('height', '360');\n      } else if (dmMatch && dmMatch[2].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]).attr('width', '640').attr('height', '360');\n      } else if (youkuMatch && youkuMatch[1].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '498').attr('width', '510').attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n      } else if (peerTubeMatch && peerTubeMatch[0].length) {\n        var begin = 0;\n        if (peerTubeMatch[2] !== 'undefined') begin = peerTubeMatch[2];\n        var end = 0;\n        if (peerTubeMatch[3] !== 'undefined') end = peerTubeMatch[3];\n        var loop = 0;\n        if (peerTubeMatch[4] !== 'undefined') loop = peerTubeMatch[4];\n        var autoplay = 0;\n        if (peerTubeMatch[5] !== 'undefined') autoplay = peerTubeMatch[5];\n        var muted = 0;\n        if (peerTubeMatch[6] !== 'undefined') muted = peerTubeMatch[6];\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe allowfullscreen sandbox=\"allow-same-origin allow-scripts allow-popups\">').attr('frameborder', 0).attr('src', '//' + peerTubeMatch[1] + '/videos/embed/' + peerTubeMatch[2] + \"?loop=\" + loop + \"&autoplay=\" + autoplay + \"&muted=\" + muted + (begin > 0 ? '&start=' + begin : '') + (end > 0 ? '&end=' + start : '')).attr('width', '560').attr('height', '315');\n      } else if (qqMatch && qqMatch[1].length || qqMatch2 && qqMatch2[2].length) {\n        var vid = qqMatch && qqMatch[1].length ? qqMatch[1] : qqMatch2[2];\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '310').attr('width', '500').attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n      } else if (mp4Match || oggMatch || webmMatch) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<video controls>').attr('src', url).attr('width', '640').attr('height', '360');\n      } else if (fbMatch && fbMatch[0].length) {\n        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560').attr('width', '560').attr('height', '301').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else {\n        // this is not a known video link. Now what, Cat? Now what?\n        return false;\n      }\n      $video.addClass('note-video-clip');\n      return $video[0];\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n      var text = this.context.invoke('editor.getSelectedText');\n      this.context.invoke('editor.saveRange');\n      this.showVideoDialog(text).then(function (url) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n        _this.context.invoke('editor.restoreRange');\n\n        // build node\n        var $node = _this.createVideoNode(url);\n        if ($node) {\n          // insert video node\n          _this.context.invoke('editor.insertNode', $node);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n\n    /**\n     * show video dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n  }, {\n    key: \"showVideoDialog\",\n    value: function showVideoDialog( /* text */\n    ) {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        var $videoUrl = _this2.$dialog.find('.note-video-url');\n        var $videoBtn = _this2.$dialog.find('.note-video-btn');\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n          $videoUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($videoBtn, $videoUrl.val());\n          });\n          if (!env.isSupportTouch) {\n            $videoUrl.trigger('focus');\n          }\n          $videoBtn.on('click', function (event) {\n            event.preventDefault();\n            deferred.resolve($videoUrl.val());\n          });\n          _this2.bindEnterKey($videoUrl, $videoBtn);\n        });\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $videoUrl.off();\n          $videoBtn.off();\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/HelpDialog.js\nfunction HelpDialog_typeof(o) { \"@babel/helpers - typeof\"; return HelpDialog_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, HelpDialog_typeof(o); }\nfunction HelpDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction HelpDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, HelpDialog_toPropertyKey(o.key), o); } }\nfunction HelpDialog_createClass(e, r, t) { return r && HelpDialog_defineProperties(e.prototype, r), t && HelpDialog_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction HelpDialog_toPropertyKey(t) { var i = HelpDialog_toPrimitive(t, \"string\"); return \"symbol\" == HelpDialog_typeof(i) ? i : i + \"\"; }\nfunction HelpDialog_toPrimitive(t, r) { if (\"object\" != HelpDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != HelpDialog_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar HelpDialog = /*#__PURE__*/function () {\n  function HelpDialog(context) {\n    HelpDialog_classCallCheck(this, HelpDialog);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n  return HelpDialog_createClass(HelpDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<p class=\"text-center\">', '<a href=\"http://summernote.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Summernote 0.9.1</a> · ', '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\" rel=\"noopener noreferrer\">Project</a> · ', '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\" rel=\"noopener noreferrer\">Issues</a>', '</p>'].join('');\n      this.$dialog = this.ui.dialog({\n        title: this.lang.options.help,\n        fade: this.options.dialogsFade,\n        body: this.createShortcutList(),\n        footer: body,\n        callback: function callback($node) {\n          $node.find('.modal-body,.note-modal-body').css({\n            'max-height': 300,\n            'overflow': 'scroll'\n          });\n        }\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"createShortcutList\",\n    value: function createShortcutList() {\n      var _this = this;\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      return Object.keys(keyMap).map(function (key) {\n        var command = keyMap[key];\n        var $row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div><div class=\"help-list-item\"></div></div>');\n        $row.append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<label><kbd>' + key + '</kdb></label>').css({\n          'width': 180,\n          'margin-right': 10\n        })).append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<span></span>').html(_this.context.memo('help.' + command) || command));\n        return $row.html();\n      }).join('');\n    }\n\n    /**\n     * show help dialog\n     *\n     * @return {Promise}\n     */\n  }, {\n    key: \"showHelpDialog\",\n    value: function showHelpDialog() {\n      var _this2 = this;\n      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n          deferred.resolve();\n        });\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n      this.context.invoke('editor.saveRange');\n      this.showHelpDialog().then(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/AirPopover.js\nfunction AirPopover_typeof(o) { \"@babel/helpers - typeof\"; return AirPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, AirPopover_typeof(o); }\nfunction AirPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction AirPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, AirPopover_toPropertyKey(o.key), o); } }\nfunction AirPopover_createClass(e, r, t) { return r && AirPopover_defineProperties(e.prototype, r), t && AirPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction AirPopover_toPropertyKey(t) { var i = AirPopover_toPrimitive(t, \"string\"); return \"symbol\" == AirPopover_typeof(i) ? i : i + \"\"; }\nfunction AirPopover_toPrimitive(t, r) { if (\"object\" != AirPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != AirPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar AIRMODE_POPOVER_X_OFFSET = -5;\nvar AIRMODE_POPOVER_Y_OFFSET = 5;\nvar AirPopover = /*#__PURE__*/function () {\n  function AirPopover(context) {\n    var _this = this;\n    AirPopover_classCallCheck(this, AirPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.options = context.options;\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n    this.events = {\n      'summernote.contextmenu': function summernoteContextmenu(event) {\n        if (_this.options.editing) {\n          event.preventDefault();\n          event.stopPropagation();\n          _this.onContextmenu = true;\n          _this.update(true);\n        }\n      },\n      'summernote.mousedown': function summernoteMousedown(we, event) {\n        _this.pageX = event.pageX;\n        _this.pageY = event.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteScroll(we, event) {\n        if (_this.options.editing && !_this.onContextmenu) {\n          if (event.type == 'keyup') {\n            var range = _this.context.invoke('editor.getLastRange');\n            var wordRange = range.getWordRange();\n            var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n            _this.pageX = bnd.left;\n            _this.pageY = bnd.top;\n          } else {\n            _this.pageX = event.pageX;\n            _this.pageY = event.pageY;\n          }\n          _this.update();\n        }\n        _this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.focusout': function summernoteFocusout() {\n        if (!_this.$popover.is(':active,:focus')) {\n          _this.hide();\n        }\n      }\n    };\n  }\n  return AirPopover_createClass(AirPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.$popover = this.ui.popover({\n        className: 'note-air-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.air);\n\n      // disable hiding this popover preemptively by 'summernote.blur' event.\n      this.$popover.on('mousedown', function () {\n        _this2.hidable = false;\n      });\n      // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n      this.$popover.on('mouseup', function () {\n        _this2.hidable = true;\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(forcelyOpen) {\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n        var rect = {\n          left: this.pageX,\n          top: this.pageY\n        };\n        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n        rect.top -= containerOffset.top;\n        rect.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n          top: rect.top + AIRMODE_POPOVER_Y_OFFSET\n        });\n        this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (this.hidable) {\n        this.$popover.hide();\n      }\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/module/HintPopover.js\nfunction HintPopover_typeof(o) { \"@babel/helpers - typeof\"; return HintPopover_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, HintPopover_typeof(o); }\nfunction HintPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction HintPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, HintPopover_toPropertyKey(o.key), o); } }\nfunction HintPopover_createClass(e, r, t) { return r && HintPopover_defineProperties(e.prototype, r), t && HintPopover_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction HintPopover_toPropertyKey(t) { var i = HintPopover_toPrimitive(t, \"string\"); return \"symbol\" == HintPopover_typeof(i) ? i : i + \"\"; }\nfunction HintPopover_toPrimitive(t, r) { if (\"object\" != HintPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != HintPopover_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\nvar POPOVER_DIST = 5;\nvar HintPopover = /*#__PURE__*/function () {\n  function HintPopover(context) {\n    var _this = this;\n    HintPopover_classCallCheck(this, HintPopover);\n    this.context = context;\n    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, event) {\n        if (!event.isDefaultPrevented()) {\n          _this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, event) {\n        _this.handleKeydown(event);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n  return HintPopover_createClass(HintPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.hints.length > 0;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n      this.lastWordRange = null;\n      this.matchingWord = null;\n      this.$popover = this.ui.popover({\n        className: 'note-hint-popover',\n        hideArrow: true,\n        direction: ''\n      }).render().appendTo(this.options.container);\n      this.$popover.hide();\n      this.$content = this.$popover.find('.popover-content,.note-popover-content');\n      this.$content.on('click', '.note-hint-item', function (event) {\n        _this2.$content.find('.active').removeClass('active');\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget).addClass('active');\n        _this2.replace();\n      });\n      this.$popover.on('mousedown', function (event) {\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"selectItem\",\n    value: function selectItem($item) {\n      this.$content.find('.active').removeClass('active');\n      $item.addClass('active');\n      this.$content[0].scrollTop = $item[0].offsetTop - this.$content.innerHeight() / 2;\n    }\n  }, {\n    key: \"moveDown\",\n    value: function moveDown() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $next = $current.next();\n      if ($next.length) {\n        this.selectItem($next);\n      } else {\n        var $nextGroup = $current.parent().next();\n        if (!$nextGroup.length) {\n          $nextGroup = this.$content.find('.note-hint-group').first();\n        }\n        this.selectItem($nextGroup.find('.note-hint-item').first());\n      }\n    }\n  }, {\n    key: \"moveUp\",\n    value: function moveUp() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $prev = $current.prev();\n      if ($prev.length) {\n        this.selectItem($prev);\n      } else {\n        var $prevGroup = $current.parent().prev();\n        if (!$prevGroup.length) {\n          $prevGroup = this.$content.find('.note-hint-group').last();\n        }\n        this.selectItem($prevGroup.find('.note-hint-item').last());\n      }\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      var $item = this.$content.find('.note-hint-item.active');\n      if ($item.length) {\n        var node = this.nodeFromItem($item);\n        // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n        if (this.matchingWord !== null && this.matchingWord.length === 0) {\n          this.lastWordRange.so = this.lastWordRange.eo;\n          // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n        } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n          var rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n          if (rangeCompute > 0) {\n            this.lastWordRange.so += rangeCompute;\n          }\n        }\n        this.lastWordRange.insertNode(node);\n        if (this.options.hintSelect === 'next') {\n          var blank = document.createTextNode('');\n          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).after(blank);\n          range.createFromNodeBefore(blank).select();\n        } else {\n          range.createFromNodeAfter(node).select();\n        }\n        this.lastWordRange = null;\n        this.hide();\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"nodeFromItem\",\n    value: function nodeFromItem($item) {\n      var hint = this.hints[$item.data('index')];\n      var item = $item.data('item');\n      var node = hint.content ? hint.content(item) : item;\n      if (typeof node === 'string') {\n        node = dom.createText(node);\n      }\n      return node;\n    }\n  }, {\n    key: \"createItemTemplates\",\n    value: function createItemTemplates(hintIdx, items) {\n      var hint = this.hints[hintIdx];\n      return items.map(function (item, idx) {\n        var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-hint-item\"></div>');\n        $item.append(hint.template ? hint.template(item) : item + '');\n        $item.data({\n          'index': hintIdx,\n          'item': item\n        });\n        if (hintIdx === 0 && idx === 0) {\n          $item.addClass('active');\n        }\n        return $item;\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(event) {\n      if (!this.$popover.is(':visible')) {\n        return;\n      }\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        this.replace();\n      } else if (event.keyCode === key.code.UP) {\n        event.preventDefault();\n        this.moveUp();\n      } else if (event.keyCode === key.code.DOWN) {\n        event.preventDefault();\n        this.moveDown();\n      }\n    }\n  }, {\n    key: \"searchKeyword\",\n    value: function searchKeyword(index, keyword, callback) {\n      var hint = this.hints[index];\n      if (hint && hint.match.test(keyword) && hint.search) {\n        var matches = hint.match.exec(keyword);\n        this.matchingWord = matches[0];\n        hint.search(matches[1], callback);\n      } else {\n        callback();\n      }\n    }\n  }, {\n    key: \"createGroup\",\n    value: function createGroup(idx, keyword) {\n      var _this3 = this;\n      var $group = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n      this.searchKeyword(idx, keyword, function (items) {\n        items = items || [];\n        if (items.length) {\n          $group.html(_this3.createItemTemplates(idx, items));\n          _this3.show();\n        }\n      });\n      return $group;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(event) {\n      var _this4 = this;\n      if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], event.keyCode)) {\n        var _range = this.context.invoke('editor.getLastRange');\n        var wordRange, keyword;\n        if (this.options.hintMode === 'words') {\n          wordRange = _range.getWordsRange(_range);\n          keyword = wordRange.toString();\n          this.hints.forEach(function (hint) {\n            if (hint.match.test(keyword)) {\n              wordRange = _range.getWordsMatchRange(hint.match);\n              return false;\n            }\n          });\n          if (!wordRange) {\n            this.hide();\n            return;\n          }\n          keyword = wordRange.toString();\n        } else {\n          wordRange = _range.getWordRange();\n          keyword = wordRange.toString();\n        }\n        if (this.hints.length && keyword) {\n          this.$content.empty();\n          var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n          var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();\n          if (bnd) {\n            bnd.top -= containerOffset.top;\n            bnd.left -= containerOffset.left;\n            this.$popover.hide();\n            this.lastWordRange = wordRange;\n            this.hints.forEach(function (hint, idx) {\n              if (hint.match.test(keyword)) {\n                _this4.createGroup(idx, keyword).appendTo(_this4.$content);\n              }\n            });\n            // select first .note-hint-item\n            this.$content.find('.note-hint-item').first().addClass('active');\n\n            // set position for popover after group is created\n            if (this.direction === 'top') {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n              });\n            } else {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top + bnd.height + POPOVER_DIST\n              });\n            }\n          }\n        } else {\n          this.hide();\n        }\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$popover.show();\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n}();\n\n;// CONCATENATED MODULE: ./src/js/settings.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {\n  version: '0.9.1',\n  plugins: {},\n  dom: dom,\n  range: range,\n  lists: lists,\n  options: {\n    langInfo: (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor,\n      'clipboard': Clipboard,\n      'dropzone': Dropzone,\n      'codeview': CodeView,\n      'statusbar': Statusbar,\n      'fullscreen': Fullscreen,\n      'handle': Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover,\n      'autoLink': AutoLink,\n      'autoSync': AutoSync,\n      'autoReplace': AutoReplace,\n      'placeholder': Placeholder,\n      'buttons': Buttons,\n      'toolbar': Toolbar,\n      'linkDialog': LinkDialog,\n      'linkPopover': LinkPopover,\n      'imageDialog': ImageDialog,\n      'imagePopover': ImagePopover,\n      'tablePopover': TablePopover,\n      'videoDialog': VideoDialog,\n      'helpDialog': HelpDialog,\n      'airPopover': AirPopover\n    },\n    buttons: {},\n    lang: 'en-US',\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']]],\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']], ['float', ['floatLeft', 'floatRight', 'floatNone']], ['remove', ['removeMedia']]],\n      link: [['link', ['linkDialogShow', 'unlink']]],\n      table: [['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]],\n      air: [['color', ['color']], ['font', ['bold', 'underline', 'clear']], ['para', ['ul', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], ['view', ['fullscreen', 'codeview']]]\n    },\n    // link options\n    linkAddNoReferrer: false,\n    addLinkNoOpener: false,\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false,\n    // TBD\n\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n    focus: false,\n    tabDisable: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n    fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana'],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n    fontSizeUnits: ['px', 'pt'],\n    // pallete colors(n x n)\n    colors: [['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']],\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']],\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00'\n    },\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n    tableClassName: 'table table-bordered',\n    insertTableMaxSize: {\n      col: 10,\n      row: 10\n    },\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n    maximumImageFileSize: null,\n    acceptImageFileTypes: \"image/*\",\n    allowClipboardImagePasting: true,\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null\n    },\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true\n    },\n    codeviewFilter: true,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: ['www.youtube.com', 'www.youtube-nocookie.com', 'www.facebook.com', 'vine.co', 'instagram.com', 'player.vimeo.com', 'www.dailymotion.com', 'player.youku.com', 'jumpingbean.tv', 'v.qq.com'],\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show'\n      },\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show'\n      }\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video'\n    }\n  }\n});\n;// CONCATENATED MODULE: ./src/js/renderer.js\nfunction renderer_typeof(o) { \"@babel/helpers - typeof\"; return renderer_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, renderer_typeof(o); }\nfunction renderer_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction renderer_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, renderer_toPropertyKey(o.key), o); } }\nfunction renderer_createClass(e, r, t) { return r && renderer_defineProperties(e.prototype, r), t && renderer_defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction renderer_toPropertyKey(t) { var i = renderer_toPrimitive(t, \"string\"); return \"symbol\" == renderer_typeof(i) ? i : i + \"\"; }\nfunction renderer_toPrimitive(t, r) { if (\"object\" != renderer_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != renderer_typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer(markup, children, options, callback) {\n    renderer_classCallCheck(this, Renderer);\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n  return renderer_createClass(Renderer, [{\n    key: \"render\",\n    value: function render($parent) {\n      var $node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.markup);\n      if (this.options && this.options.contents) {\n        $node.html(this.options.contents);\n      }\n      if (this.options && this.options.className) {\n        $node.addClass(this.options.className);\n      }\n      if (this.options && this.options.data) {\n        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(this.options.data, function (k, v) {\n          $node.attr('data-' + k, v);\n        });\n      }\n      if (this.options && this.options.click) {\n        $node.on('click', this.options.click);\n      }\n      if (this.children) {\n        var $container = $node.find('.note-children-container');\n        this.children.forEach(function (child) {\n          child.render($container.length ? $container : $node);\n        });\n      }\n      if (this.callback) {\n        this.callback($node, this.options);\n      }\n      if (this.options && this.options.callback) {\n        this.options.callback($node);\n      }\n      if ($parent) {\n        $parent.append($node);\n      }\n      return $node;\n    }\n  }]);\n}();\n/* harmony default export */ const renderer = ({\n  create: function create(markup, callback) {\n    return function () {\n      var options = renderer_typeof(arguments[1]) === 'object' ? arguments[1] : arguments[0];\n      var children = Array.isArray(arguments[0]) ? arguments[0] : [];\n      if (options && options.children) {\n        children = options.children;\n      }\n      return new Renderer(markup, children, options, callback);\n    };\n  }\n});\n;// CONCATENATED MODULE: ./src/styles/bs3/summernote-bs3.js\nfunction summernote_bs3_typeof(o) { \"@babel/helpers - typeof\"; return summernote_bs3_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, summernote_bs3_typeof(o); }\n\n\n\n\nvar editor = renderer.create('<div class=\"note-editor note-frame panel panel-default\"></div>');\nvar toolbar = renderer.create('<div class=\"panel-heading note-toolbar\" role=\"toolbar\"></div>');\nvar editingArea = renderer.create('<div class=\"note-editing-area\"></div>');\nvar codable = renderer.create('<textarea class=\"note-codable\" aria-multiline=\"true\"></textarea>');\nvar editable = renderer.create('<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>');\nvar statusbar = renderer.create(['<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>', '<div class=\"note-statusbar\" role=\"status\">', '<div class=\"note-resizebar\" aria-label=\"Resize\">', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '</div>', '</div>'].join(''));\nvar airEditor = renderer.create('<div class=\"note-editor note-airframe\"></div>');\nvar airEditable = renderer.create(['<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>', '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>'].join(''));\nvar buttonGroup = renderer.create('<div class=\"note-btn-group btn-group\"></div>');\nvar dropdown = renderer.create('<ul class=\"note-dropdown-menu dropdown-menu\"></ul>', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var option = summernote_bs3_typeof(item) === 'object' ? item.option : undefined;\n    var dataValue = 'data-value=\"' + value + '\"';\n    var dataOption = option !== undefined ? ' data-option=\"' + option + '\"' : '';\n    return '<li aria-label=\"' + value + '\"><a href=\"#\" ' + (dataValue + dataOption) + '>' + content + '</a></li>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dropdownButtonContents = function dropdownButtonContents(contents, options) {\n  return contents + ' ' + icon(options.icons.caret, 'span');\n};\nvar dropdownCheck = renderer.create('<ul class=\"note-dropdown-menu dropdown-menu note-check\"></ul>', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    return '<li aria-label=\"' + item + '\"><a href=\"#\" data-value=\"' + value + '\">' + icon(options.checkClassName) + ' ' + content + '</a></li>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dialog = renderer.create('<div class=\"modal note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"></div>', function ($node, options) {\n  if (options.fade) {\n    $node.addClass('fade');\n  }\n  $node.attr({\n    'aria-label': options.title\n  });\n  $node.html(['<div class=\"modal-dialog\">', '<div class=\"modal-content\">', options.title ? '<div class=\"modal-header\">' + '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" aria-hidden=\"true\">&times;</button>' + '<h4 class=\"modal-title\">' + options.title + '</h4>' + '</div>' : '', '<div class=\"modal-body\">' + options.body + '</div>', options.footer ? '<div class=\"modal-footer\">' + options.footer + '</div>' : '', '</div>', '</div>'].join(''));\n});\nvar popover = renderer.create(['<div class=\"note-popover popover in\">', '<div class=\"arrow\"></div>', '<div class=\"popover-content note-children-container\"></div>', '</div>'].join(''), function ($node, options) {\n  var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n  $node.addClass(direction);\n  if (options.hideArrow) {\n    $node.find('.arrow').hide();\n  }\n});\nvar summernote_bs3_checkbox = renderer.create('<div class=\"checkbox\"></div>', function ($node, options) {\n  $node.html(['<label' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>', '<input type=\"checkbox\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''), options.checked ? ' checked' : '', ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>', options.text ? options.text : '', '</label>'].join(''));\n});\nvar icon = function icon(iconClassName, tagName) {\n  if (iconClassName.match(/^</)) {\n    return iconClassName;\n  }\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"></' + tagName + '>';\n};\nvar ui = function ui(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    dropdown: dropdown,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheck: dropdownCheck,\n    dialog: dialog,\n    popover: popover,\n    checkbox: summernote_bs3_checkbox,\n    icon: icon,\n    options: editorOptions,\n    palette: function palette($node, options) {\n      return renderer.create('<div class=\"note-color-palette\"></div>', function ($node, options) {\n        var contents = [];\n        for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n          var eventName = options.eventName;\n          var colors = options.colors[row];\n          var colorsName = options.colorsName[row];\n          var buttons = [];\n          for (var col = 0, colSize = colors.length; col < colSize; col++) {\n            var color = colors[col];\n            var colorName = colorsName[col];\n            buttons.push(['<button type=\"button\" class=\"note-color-btn\"', 'style=\"background-color:', color, '\" ', 'data-event=\"', eventName, '\" ', 'data-value=\"', color, '\" ', 'title=\"', colorName, '\" ', 'aria-label=\"', colorName, '\" ', 'data-toggle=\"button\" tabindex=\"-1\"></button>'].join(''));\n          }\n          contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n        }\n        $node.html(contents.join(''));\n        if (options.tooltip) {\n          $node.find('.note-color-btn').tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          });\n        }\n      })($node, options);\n    },\n    button: function button($node, options) {\n      return renderer.create('<button type=\"button\" class=\"note-btn btn btn-default btn-sm\" tabindex=\"-1\"></button>', function ($node, options) {\n        if (options && options.tooltip) {\n          $node.attr({\n            title: options.tooltip,\n            'aria-label': options.tooltip\n          }).tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          }).on('click', function (e) {\n            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.currentTarget).tooltip('hide');\n          });\n        }\n        if (options && options.codeviewButton) {\n          $node.addClass('note-codeview-keep');\n        }\n      })($node, options);\n    },\n    toggleBtn: function toggleBtn($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n    toggleBtnActive: function toggleBtnActive($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n    onDialogShown: function onDialogShown($dialog, handler) {\n      $dialog.one('shown.bs.modal', handler);\n    },\n    onDialogHidden: function onDialogHidden($dialog, handler) {\n      $dialog.one('hidden.bs.modal', handler);\n    },\n    showDialog: function showDialog($dialog) {\n      $dialog.modal('show');\n    },\n    hideDialog: function hideDialog($dialog) {\n      $dialog.modal('hide');\n    },\n    createLayout: function createLayout($note) {\n      var $editor = (editorOptions.airMode ? airEditor([editingArea([codable(), airEditable()])]) : editorOptions.toolbarPosition === 'bottom' ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()]) : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])).render();\n      $editor.insertAfter($note);\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar')\n      };\n    },\n    removeLayout: function removeLayout($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.show();\n    }\n  };\n};\n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {\n  ui_template: ui,\n  \"interface\": 'bs3'\n});\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=summernote.js.map"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ar-AR.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 7:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'ar-AR': {\n      font: {\n        bold: 'عريض',\n        italic: 'مائل',\n        underline: 'تحته خط',\n        clear: 'مسح التنسيق',\n        height: 'إرتفاع السطر',\n        name: 'الخط',\n        strikethrough: 'فى وسطه خط',\n        subscript: 'مخطوطة',\n        superscript: 'حرف فوقي',\n        size: 'الحجم'\n      },\n      image: {\n        image: 'صورة',\n        insert: 'إضافة صورة',\n        resizeFull: 'الحجم بالكامل',\n        resizeHalf: 'تصغير للنصف',\n        resizeQuarter: 'تصغير للربع',\n        floatLeft: 'تطيير لليسار',\n        floatRight: 'تطيير لليمين',\n        floatNone: 'ثابته',\n        shapeRounded: 'الشكل: تقريب',\n        shapeCircle: 'الشكل: دائرة',\n        shapeThumbnail: 'الشكل: صورة مصغرة',\n        shapeNone: 'الشكل: لا شيء',\n        dragImageHere: 'إدرج الصورة هنا',\n        dropImage: 'إسقاط صورة أو نص',\n        selectFromFiles: 'حدد ملف',\n        maximumFileSize: 'الحد الأقصى لحجم الملف',\n        maximumFileSizeError: 'تم تجاوز الحد الأقصى لحجم الملف',\n        url: 'رابط الصورة',\n        remove: 'حذف الصورة',\n        original: 'Original'\n      },\n      video: {\n        video: 'فيديو',\n        videoLink: 'رابط الفيديو',\n        insert: 'إدراج الفيديو',\n        url: 'رابط الفيديو',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'\n      },\n      link: {\n        link: 'رابط',\n        insert: 'إدراج',\n        unlink: 'حذف الرابط',\n        edit: 'تعديل',\n        textToDisplay: 'النص',\n        url: 'مسار الرابط',\n        openInNewWindow: 'فتح في نافذة جديدة'\n      },\n      table: {\n        table: 'جدول',\n        addRowAbove: 'إضافة سطر أعلاه',\n        addRowBelow: 'إضافة سطر أدناه',\n        addColLeft: 'إضافة عمود قبله',\n        addColRight: 'إضافة عمود بعده',\n        delRow: 'حذف سطر',\n        delCol: 'حذف عمود',\n        delTable: 'حذف الجدول'\n      },\n      hr: {\n        insert: 'إدراج خط أفقي'\n      },\n      style: {\n        style: 'تنسيق',\n        p: 'عادي',\n        blockquote: 'إقتباس',\n        pre: 'شفيرة',\n        h1: 'عنوان رئيسي 1',\n        h2: 'عنوان رئيسي 2',\n        h3: 'عنوان رئيسي 3',\n        h4: 'عنوان رئيسي 4',\n        h5: 'عنوان رئيسي 5',\n        h6: 'عنوان رئيسي 6'\n      },\n      lists: {\n        unordered: 'قائمة مُنقطة',\n        ordered: 'قائمة مُرقمة'\n      },\n      options: {\n        help: 'مساعدة',\n        fullscreen: 'حجم الشاشة بالكامل',\n        codeview: 'شفيرة المصدر'\n      },\n      paragraph: {\n        paragraph: 'فقرة',\n        outdent: 'محاذاة للخارج',\n        indent: 'محاذاة للداخل',\n        left: 'محاذاة لليسار',\n        center: 'توسيط',\n        right: 'محاذاة لليمين',\n        justify: 'ملئ السطر'\n      },\n      color: {\n        recent: 'تم إستخدامه',\n        more: 'المزيد',\n        background: 'لون الخلفية',\n        foreground: 'لون النص',\n        transparent: 'شفاف',\n        setTransparent: 'بدون خلفية',\n        reset: 'إعادة الضبط',\n        resetToDefault: 'إعادة الضبط',\n        cpSelect: 'اختار'\n      },\n      shortcut: {\n        shortcuts: 'إختصارات',\n        close: 'غلق',\n        textFormatting: 'تنسيق النص',\n        action: 'Action',\n        paragraphFormatting: 'تنسيق الفقرة',\n        documentStyle: 'تنسيق المستند',\n        extraKeys: 'أزرار إضافية'\n      },\n      help: {\n        'insertParagraph': 'إدراج فقرة',\n        'undo': 'تراجع عن آخر أمر',\n        'redo': 'إعادة تنفيذ آخر أمر',\n        'tab': 'إزاحة (تاب)',\n        'untab': 'سحب النص باتجاه البداية',\n        'bold': 'تنسيق عريض',\n        'italic': 'تنسيق مائل',\n        'underline': 'تنسيق خط سفلي',\n        'strikethrough': 'تنسيق خط متوسط للنص',\n        'removeFormat': 'إزالة التنسيقات',\n        'justifyLeft': 'محاذاة لليسار',\n        'justifyCenter': 'محاذاة توسيط',\n        'justifyRight': 'محاذاة لليمين',\n        'justifyFull': 'محاذاة كاملة',\n        'insertUnorderedList': 'قائمة منقّطة',\n        'insertOrderedList': 'قائمة مرقّمة',\n        'outdent': 'إزاحة للأمام على الفقرة الحالية',\n        'indent': 'إزاحة للخلف على الفقرة الحالية',\n        'formatPara': 'تغيير التنسيق للكتلة الحالية إلى فقرة',\n        'formatH1': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 1',\n        'formatH2': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 2',\n        'formatH3': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 3',\n        'formatH4': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 4',\n        'formatH5': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 5',\n        'formatH6': 'تغيير التنسيق للكتلة الحالية إلى ترويسة 6',\n        'insertHorizontalRule': 'إدراج خط أفقي',\n        'linkDialog.show': 'إظهار خصائص الرابط'\n      },\n      history: {\n        undo: 'تراجع',\n        redo: 'إعادة'\n      },\n      specialChar: {\n        specialChar: 'محارف خاصة',\n        select: 'اختر المحرف الخاص'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ar-AR.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-az-AZ.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 8);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 8:\n/***/ (function(module, exports) {\n\n//Summernote WYSIWYG  editor ucun Azerbaycan dili fayli\n//Tercume etdi: RAMIL ALIYEV\n//Tarix: 20.07.2019\n//Baki Azerbaycan\n//Website: https://ramilaliyev.com\n//Azerbaijan language for Summernote WYSIWYG \n//Translated by: RAMIL ALIYEV\n//Date: 20.07.2019\n//Baku Azerbaijan\n//Website: https://ramilaliyev.com\n(function ($) {\n  $.extend($.summernote.lang, {\n    'az-AZ': {\n      font: {\n        bold: 'Qalın',\n        italic: 'Əyri',\n        underline: 'Altı xətli',\n        clear: 'Təmizlə',\n        height: 'Sətir hündürlüyü',\n        name: 'Yazı Tipi',\n        strikethrough: 'Üstü xətli',\n        subscript: 'Alt simvol',\n        superscript: 'Üst simvol',\n        size: 'Yazı ölçüsü'\n      },\n      image: {\n        image: 'Şəkil',\n        insert: 'Şəkil əlavə et',\n        resizeFull: 'Original ölçü',\n        resizeHalf: '1/2 ölçü',\n        resizeQuarter: '1/4 ölçü',\n        floatLeft: 'Sola çək',\n        floatRight: 'Sağa çək',\n        floatNone: 'Sola-sağa çəkilməni ləğv et',\n        shapeRounded: 'Şəkil: yuvarlaq künç',\n        shapeCircle: 'Şəkil: Dairə',\n        shapeThumbnail: 'Şəkil: Thumbnail',\n        shapeNone: 'Şəkil: Yox',\n        dragImageHere: 'Bura sürüşdür',\n        dropImage: 'Şəkil və ya mətni buraxın',\n        selectFromFiles: 'Sənəd seçin',\n        maximumFileSize: 'Maksimum sənəd ölçüsü',\n        maximumFileSizeError: 'Maksimum sənəd ölçüsünü keçdiniz.',\n        url: 'Şəkil linki',\n        remove: 'Şəkli sil',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video linki',\n        insert: 'Video əlavə et',\n        url: 'Video linki?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion və ya Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link əlavə et',\n        unlink: 'Linki sil',\n        edit: 'Linkə düzəliş et',\n        textToDisplay: 'Ekranda göstəriləcək link adı',\n        url: 'Link ünvanı?',\n        openInNewWindow: 'Yeni pəncərədə aç'\n      },\n      table: {\n        table: 'Cədvəl',\n        addRowAbove: 'Yuxarı sətir əlavə et',\n        addRowBelow: 'Aşağı sətir əlavə et',\n        addColLeft: 'Sola sütun əlavə et',\n        addColRight: 'Sağa sütun əlavə et',\n        delRow: 'Sətiri sil',\n        delCol: 'Sütunu sil',\n        delTable: 'Cədvəli sil'\n      },\n      hr: {\n        insert: 'Üfuqi xətt əlavə et'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'İstinad',\n        pre: 'Ön baxış',\n        h1: 'Başlıq 1',\n        h2: 'Başlıq 2',\n        h3: 'Başlıq 3',\n        h4: 'Başlıq 4',\n        h5: 'Başlıq 5',\n        h6: 'Başlıq 6'\n      },\n      lists: {\n        unordered: 'Nizamsız sıra',\n        ordered: 'Nizamlı sıra'\n      },\n      options: {\n        help: 'Kömək',\n        fullscreen: 'Tam ekran',\n        codeview: 'HTML Kodu'\n      },\n      paragraph: {\n        paragraph: 'Paraqraf',\n        outdent: 'Girintini artır',\n        indent: 'Girintini azalt',\n        left: 'Sola çək',\n        center: 'Ortaya çək',\n        right: 'Sağa çək',\n        justify: 'Sola və sağa çək'\n      },\n      color: {\n        recent: 'Son rənk',\n        more: 'Daha çox rənk',\n        background: 'Arxa fon rəngi',\n        foreground: 'Yazı rıngi',\n        transparent: 'Şəffaflıq',\n        setTransparent: 'Şəffaflığı nizamla',\n        reset: 'Sıfırla',\n        resetToDefault: 'Susyama görə sıfırla'\n      },\n      shortcut: {\n        shortcuts: 'Qısayollar',\n        close: 'Bağla',\n        textFormatting: 'Yazı formatlandırmaq',\n        action: 'Hadisə',\n        paragraphFormatting: 'Paraqraf formatlandırmaq',\n        documentStyle: 'Sənəd stili',\n        extraKeys: 'Əlavə'\n      },\n      help: {\n        'insertParagraph': 'Paraqraf əlavə etmək',\n        'undo': 'Son əmri geri alır',\n        'redo': 'Son əmri irəli alır',\n        'tab': 'Girintini artırır',\n        'untab': 'Girintini azaltır',\n        'bold': 'Qalın yazma stilini nizamlayır',\n        'italic': 'İtalik yazma stilini nizamlayır',\n        'underline': 'Altı xətli yazma stilini nizamlayır',\n        'strikethrough': 'Üstü xətli yazma stilini nizamlayır',\n        'removeFormat': 'Formatlandırmanı ləğv edir',\n        'justifyLeft': 'Yazını sola çəkir',\n        'justifyCenter': 'Yazını ortaya çəkir',\n        'justifyRight': 'Yazını sağa çəkir',\n        'justifyFull': 'Yazını hər iki tərəfə yazır',\n        'insertUnorderedList': 'Nizamsız sıra əlavə edir',\n        'insertOrderedList': 'Nizamlı sıra əlavə edir',\n        'outdent': 'Aktiv paraqrafın girintisini azaltır',\n        'indent': 'Aktiv paragrafın girintisini artırır',\n        'formatPara': 'Aktiv bloqun formatını paraqraf (p) olaraq dəyişdirir',\n        'formatH1': 'Aktiv bloqun formatını başlıq 1 (h1) olaraq dəyişdirir',\n        'formatH2': 'Aktiv bloqun formatını başlıq 2 (h2) olaraq dəyişdirir',\n        'formatH3': 'Aktiv bloqun formatını başlıq 3 (h3) olaraq dəyişdirir',\n        'formatH4': 'Aktiv bloqun formatını başlıq 4 (h4) olaraq dəyişdirir',\n        'formatH5': 'Aktiv bloqun formatını başlıq 5 (h5) olaraq dəyişdirir',\n        'formatH6': 'Aktiv bloqun formatını başlıq 6 (h6) olaraq dəyişdirir',\n        'insertHorizontalRule': 'Üfuqi xətt əlavə edir',\n        'linkDialog.show': 'Link parametrləri qutusunu göstərir'\n      },\n      history: {\n        undo: 'Əvvəlki vəziyyət',\n        redo: 'Sonrakı vəziyyət'\n      },\n      specialChar: {\n        specialChar: 'Xüsusi simvollar',\n        select: 'Xüsusi simvolları seçin'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-az-AZ.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-bg-BG.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 9);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 9:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'bg-BG': {\n      font: {\n        bold: 'Удебелен',\n        italic: 'Наклонен',\n        underline: 'Подчертан',\n        clear: 'Изчисти стиловете',\n        height: 'Височина',\n        name: 'Шрифт',\n        strikethrough: 'Задраскано',\n        subscript: 'Долен индекс',\n        superscript: 'Горен индекс',\n        size: 'Размер на шрифта'\n      },\n      image: {\n        image: 'Изображение',\n        insert: 'Постави картинка',\n        resizeFull: 'Цял размер',\n        resizeHalf: 'Размер на 50%',\n        resizeQuarter: 'Размер на 25%',\n        floatLeft: 'Подравни в ляво',\n        floatRight: 'Подравни в дясно',\n        floatNone: 'Без подравняване',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Пуснете изображението тук',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Изберете файл',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL адрес на изображение',\n        remove: 'Премахни изображение',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Insert Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Връзка',\n        insert: 'Добави връзка',\n        unlink: 'Премахни връзка',\n        edit: 'Промени',\n        textToDisplay: 'Текст за показване',\n        url: 'URL адрес',\n        openInNewWindow: 'Отвори в нов прозорец'\n      },\n      table: {\n        table: 'Таблица',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Добави хоризонтална линия'\n      },\n      style: {\n        style: 'Стил',\n        p: 'Нормален',\n        blockquote: 'Цитат',\n        pre: 'Код',\n        h1: 'Заглавие 1',\n        h2: 'Заглавие 2',\n        h3: 'Заглавие 3',\n        h4: 'Заглавие 4',\n        h5: 'Заглавие 5',\n        h6: 'Заглавие 6'\n      },\n      lists: {\n        unordered: 'Символен списък',\n        ordered: 'Цифров списък'\n      },\n      options: {\n        help: 'Помощ',\n        fullscreen: 'На цял екран',\n        codeview: 'Преглед на код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Намаляване на отстъпа',\n        indent: 'Абзац',\n        left: 'Подравняване в ляво',\n        center: 'Център',\n        right: 'Подравняване в дясно',\n        justify: 'Разтягане по ширина'\n      },\n      color: {\n        recent: 'Последния избран цвят',\n        more: 'Още цветове',\n        background: 'Цвят на фона',\n        foreground: 'Цвят на шрифта',\n        transparent: 'Прозрачен',\n        setTransparent: 'Направете прозрачен',\n        reset: 'Възстанови',\n        resetToDefault: 'Възстанови оригиналните',\n        cpSelect: 'Изберете'\n      },\n      shortcut: {\n        shortcuts: 'Клавишни комбинации',\n        close: 'Затвори',\n        textFormatting: 'Форматиране на текста',\n        action: 'Действие',\n        paragraphFormatting: 'Форматиране на параграф',\n        documentStyle: 'Стил на документа',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Назад',\n        redo: 'Напред'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-bg-BG.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ca-ES.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 10);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 10:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'ca-ES': {\n      font: {\n        bold: 'Negreta',\n        italic: 'Cursiva',\n        underline: 'Subratllat',\n        clear: 'Treure estil de lletra',\n        height: 'Alçada de línia',\n        name: 'Font',\n        strikethrough: 'Ratllat',\n        subscript: 'Subíndex',\n        superscript: 'Superíndex',\n        size: 'Mida de lletra'\n      },\n      image: {\n        image: 'Imatge',\n        insert: 'Inserir imatge',\n        resizeFull: 'Redimensionar a mida completa',\n        resizeHalf: 'Redimensionar a la meitat',\n        resizeQuarter: 'Redimensionar a un quart',\n        floatLeft: 'Alinear a l\\'esquerra',\n        floatRight: 'Alinear a la dreta',\n        floatNone: 'No alinear',\n        shapeRounded: 'Forma: Arrodonit',\n        shapeCircle: 'Forma: Cercle',\n        shapeThumbnail: 'Forma: Marc',\n        shapeNone: 'Forma: Cap',\n        dragImageHere: 'Arrossegueu una imatge o text aquí',\n        dropImage: 'Deixa anar aquí una imatge o un text',\n        selectFromFiles: 'Seleccioneu des dels arxius',\n        maximumFileSize: 'Mida màxima de l\\'arxiu',\n        maximumFileSizeError: 'La mida màxima de l\\'arxiu s\\'ha superat.',\n        url: 'URL de la imatge',\n        remove: 'Eliminar imatge',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Enllaç del vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL del vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Enllaç',\n        insert: 'Inserir enllaç',\n        unlink: 'Treure enllaç',\n        edit: 'Editar',\n        textToDisplay: 'Text per mostrar',\n        url: 'Cap a quina URL porta l\\'enllaç?',\n        openInNewWindow: 'Obrir en una finestra nova'\n      },\n      table: {\n        table: 'Taula',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Inserir línia horitzontal'\n      },\n      style: {\n        style: 'Estil',\n        p: 'p',\n        blockquote: 'Cita',\n        pre: 'Codi',\n        h1: 'Títol 1',\n        h2: 'Títol 2',\n        h3: 'Títol 3',\n        h4: 'Títol 4',\n        h5: 'Títol 5',\n        h6: 'Títol 6'\n      },\n      lists: {\n        unordered: 'Llista desendreçada',\n        ordered: 'Llista endreçada'\n      },\n      options: {\n        help: 'Ajut',\n        fullscreen: 'Pantalla sencera',\n        codeview: 'Veure codi font'\n      },\n      paragraph: {\n        paragraph: 'Paràgraf',\n        outdent: 'Menys tabulació',\n        indent: 'Més tabulació',\n        left: 'Alinear a l\\'esquerra',\n        center: 'Alinear al mig',\n        right: 'Alinear a la dreta',\n        justify: 'Justificar'\n      },\n      color: {\n        recent: 'Últim color',\n        more: 'Més colors',\n        background: 'Color de fons',\n        foreground: 'Color de lletra',\n        transparent: 'Transparent',\n        setTransparent: 'Establir transparent',\n        reset: 'Restablir',\n        resetToDefault: 'Restablir per defecte'\n      },\n      shortcut: {\n        shortcuts: 'Dreceres de teclat',\n        close: 'Tancar',\n        textFormatting: 'Format de text',\n        action: 'Acció',\n        paragraphFormatting: 'Format de paràgraf',\n        documentStyle: 'Estil del document',\n        extraKeys: 'Tecles adicionals'\n      },\n      help: {\n        'insertParagraph': 'Inserir paràgraf',\n        'undo': 'Desfer l\\'última acció',\n        'redo': 'Refer l\\'última acció',\n        'tab': 'Tabular',\n        'untab': 'Eliminar tabulació',\n        'bold': 'Establir estil negreta',\n        'italic': 'Establir estil cursiva',\n        'underline': 'Establir estil subratllat',\n        'strikethrough': 'Establir estil ratllat',\n        'removeFormat': 'Netejar estil',\n        'justifyLeft': 'Alinear a l\\'esquerra',\n        'justifyCenter': 'Alinear al centre',\n        'justifyRight': 'Alinear a la dreta',\n        'justifyFull': 'Justificar',\n        'insertUnorderedList': 'Inserir llista desendreçada',\n        'insertOrderedList': 'Inserir llista endreçada',\n        'outdent': 'Reduïr tabulació del paràgraf',\n        'indent': 'Augmentar tabulació del paràgraf',\n        'formatPara': 'Canviar l\\'estil del bloc com a un paràgraf (etiqueta P)',\n        'formatH1': 'Canviar l\\'estil del bloc com a un H1',\n        'formatH2': 'Canviar l\\'estil del bloc com a un H2',\n        'formatH3': 'Canviar l\\'estil del bloc com a un H3',\n        'formatH4': 'Canviar l\\'estil del bloc com a un H4',\n        'formatH5': 'Canviar l\\'estil del bloc com a un H5',\n        'formatH6': 'Canviar l\\'estil del bloc com a un H6',\n        'insertHorizontalRule': 'Inserir una línia horitzontal',\n        'linkDialog.show': 'Mostrar panel d\\'enllaços'\n      },\n      history: {\n        undo: 'Desfer',\n        redo: 'Refer'\n      },\n      specialChar: {\n        specialChar: 'CARÀCTERS ESPECIALS',\n        select: 'Selecciona caràcters especials'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ca-ES.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-cs-CZ.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 11);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 11:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'cs-CZ': {\n      font: {\n        bold: 'Tučné',\n        italic: 'Kurzíva',\n        underline: 'Podtržené',\n        clear: 'Odstranit styl písma',\n        height: 'Výška řádku',\n        strikethrough: 'Přeškrtnuté',\n        size: 'Velikost písma'\n      },\n      image: {\n        image: 'Obrázek',\n        insert: 'Vložit obrázek',\n        resizeFull: 'Původní velikost',\n        resizeHalf: 'Poloviční velikost',\n        resizeQuarter: 'Čtvrteční velikost',\n        floatLeft: 'Umístit doleva',\n        floatRight: 'Umístit doprava',\n        floatNone: 'Neobtékat textem',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Přetáhnout sem obrázek',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Vybrat soubor',\n        url: 'URL obrázku',\n        remove: 'Remove Image',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Odkaz videa',\n        insert: 'Vložit video',\n        url: 'URL videa?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)'\n      },\n      link: {\n        link: 'Odkaz',\n        insert: 'Vytvořit odkaz',\n        unlink: 'Zrušit odkaz',\n        edit: 'Upravit',\n        textToDisplay: 'Zobrazovaný text',\n        url: 'Na jaké URL má tento odkaz vést?',\n        openInNewWindow: 'Otevřít v novém okně'\n      },\n      table: {\n        table: 'Tabulka',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Vložit vodorovnou čáru'\n      },\n      style: {\n        style: 'Styl',\n        p: 'Normální',\n        blockquote: 'Citace',\n        pre: 'Kód',\n        h1: 'Nadpis 1',\n        h2: 'Nadpis 2',\n        h3: 'Nadpis 3',\n        h4: 'Nadpis 4',\n        h5: 'Nadpis 5',\n        h6: 'Nadpis 6'\n      },\n      lists: {\n        unordered: 'Odrážkový seznam',\n        ordered: 'Číselný seznam'\n      },\n      options: {\n        help: 'Nápověda',\n        fullscreen: 'Celá obrazovka',\n        codeview: 'HTML kód'\n      },\n      paragraph: {\n        paragraph: 'Odstavec',\n        outdent: 'Zvětšit odsazení',\n        indent: 'Zmenšit odsazení',\n        left: 'Zarovnat doleva',\n        center: 'Zarovnat na střed',\n        right: 'Zarovnat doprava',\n        justify: 'Zarovnat oboustranně'\n      },\n      color: {\n        recent: 'Aktuální barva',\n        more: 'Další barvy',\n        background: 'Barva pozadí',\n        foreground: 'Barva písma',\n        transparent: 'Průhlednost',\n        setTransparent: 'Nastavit průhlednost',\n        reset: 'Obnovit',\n        resetToDefault: 'Obnovit výchozí',\n        cpSelect: 'Vybrat'\n      },\n      shortcut: {\n        shortcuts: 'Klávesové zkratky',\n        close: 'Zavřít',\n        textFormatting: 'Formátování textu',\n        action: 'Akce',\n        paragraphFormatting: 'Formátování odstavce',\n        documentStyle: 'Styl dokumentu'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Krok vzad',\n        redo: 'Krok vpřed'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-cs-CZ.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-da-DK.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 12);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 12:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'da-DK': {\n      font: {\n        bold: 'Fed',\n        italic: 'Kursiv',\n        underline: 'Understreget',\n        clear: 'Fjern formatering',\n        height: 'Højde',\n        name: 'Skrifttype',\n        strikethrough: 'Gennemstreget',\n        subscript: 'Sænket skrift',\n        superscript: 'Hævet skrift',\n        size: 'Skriftstørrelse'\n      },\n      image: {\n        image: 'Billede',\n        insert: 'Indsæt billede',\n        resizeFull: 'Original størrelse',\n        resizeHalf: 'Halv størrelse',\n        resizeQuarter: 'Kvart størrelse',\n        floatLeft: 'Venstrestillet',\n        floatRight: 'Højrestillet',\n        floatNone: 'Fjern formatering',\n        shapeRounded: 'Form: Runde kanter',\n        shapeCircle: 'Form: Cirkel',\n        shapeThumbnail: 'Form: Miniature',\n        shapeNone: 'Form: Ingen',\n        dragImageHere: 'Træk billede hertil',\n        dropImage: 'Slip billede',\n        selectFromFiles: 'Vælg billed-fil',\n        maximumFileSize: 'Maks fil størrelse',\n        maximumFileSizeError: 'Filen er større end maks tilladte fil størrelse!',\n        url: 'Billede URL',\n        remove: 'Fjern billede',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Indsæt Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Indsæt link',\n        unlink: 'Fjern link',\n        edit: 'Rediger',\n        textToDisplay: 'Visningstekst',\n        url: 'Hvor skal linket pege hen?',\n        openInNewWindow: 'Åbn i nyt vindue'\n      },\n      table: {\n        table: 'Tabel',\n        addRowAbove: 'Tilføj række over',\n        addRowBelow: 'Tilføj række under',\n        addColLeft: 'Tilføj venstre kolonne',\n        addColRight: 'Tilføj højre kolonne',\n        delRow: 'Slet række',\n        delCol: 'Slet kolonne',\n        delTable: 'Slet tabel'\n      },\n      hr: {\n        insert: 'Indsæt horisontal linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Kode',\n        h1: 'Overskrift 1',\n        h2: 'Overskrift 2',\n        h3: 'Overskrift 3',\n        h4: 'Overskrift 4',\n        h5: 'Overskrift 5',\n        h6: 'Overskrift 6'\n      },\n      lists: {\n        unordered: 'Punktopstillet liste',\n        ordered: 'Nummereret liste'\n      },\n      options: {\n        help: 'Hjælp',\n        fullscreen: 'Fuld skærm',\n        codeview: 'HTML-Visning'\n      },\n      paragraph: {\n        paragraph: 'Afsnit',\n        outdent: 'Formindsk indryk',\n        indent: 'Forøg indryk',\n        left: 'Venstrestillet',\n        center: 'Centreret',\n        right: 'Højrestillet',\n        justify: 'Blokjuster'\n      },\n      color: {\n        recent: 'Nyligt valgt farve',\n        more: 'Flere farver',\n        background: 'Baggrund',\n        foreground: 'Forgrund',\n        transparent: 'Transparent',\n        setTransparent: 'Sæt transparent',\n        reset: 'Nulstil',\n        resetToDefault: 'Gendan standardindstillinger'\n      },\n      shortcut: {\n        shortcuts: 'Genveje',\n        close: 'Luk',\n        textFormatting: 'Tekstformatering',\n        action: 'Handling',\n        paragraphFormatting: 'Afsnitsformatering',\n        documentStyle: 'Dokumentstil',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Indsæt paragraf',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Vis Link Dialog'\n      },\n      history: {\n        undo: 'Fortryd',\n        redo: 'Annuller fortryd'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Vælg special karakterer'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-da-DK.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-de-DE.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 13);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 13:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'de-DE': {\n      font: {\n        bold: 'Fett',\n        italic: 'Kursiv',\n        underline: 'Unterstreichen',\n        clear: 'Zurücksetzen',\n        height: 'Zeilenhöhe',\n        name: 'Schriftart',\n        strikethrough: 'Durchgestrichen',\n        subscript: 'Tiefgestellt',\n        superscript: 'Hochgestellt',\n        size: 'Schriftgröße'\n      },\n      image: {\n        image: 'Bild',\n        insert: 'Bild einfügen',\n        resizeFull: 'Originalgröße',\n        resizeHalf: '1/2 Größe',\n        resizeQuarter: '1/4 Größe',\n        floatLeft: 'Linksbündig',\n        floatRight: 'Rechtsbündig',\n        floatNone: 'Kein Textfluss',\n        shapeRounded: 'Abgerundeter Rahmen',\n        shapeCircle: 'Kreisförmiger Rahmen',\n        shapeThumbnail: 'Rahmenvorschau',\n        shapeNone: 'Kein Rahmen',\n        dragImageHere: 'Bild hierher ziehen',\n        dropImage: 'Bild oder Text nehmen',\n        selectFromFiles: 'Datei auswählen',\n        maximumFileSize: 'Maximale Dateigröße',\n        maximumFileSizeError: 'Maximale Dateigröße überschritten',\n        url: 'Bild URL',\n        remove: 'Bild entfernen',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Videolink',\n        insert: 'Video einfügen',\n        url: 'Video URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion oder Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link einfügen',\n        unlink: 'Link entfernen',\n        edit: 'Bearbeiten',\n        textToDisplay: 'Anzeigetext',\n        url: 'Link URL',\n        openInNewWindow: 'In neuem Fenster öffnen'\n      },\n      table: {\n        table: 'Tabelle',\n        addRowAbove: '+ Zeile oberhalb',\n        addRowBelow: '+ Zeile unterhalb',\n        addColLeft: '+ Spalte links',\n        addColRight: '+ Spalte rechts',\n        delRow: 'Reihe löschen',\n        delCol: 'Spalte löschen',\n        delTable: 'Tabelle löschen'\n      },\n      hr: {\n        insert: 'Horizontale Linie einfügen'\n      },\n      style: {\n        style: 'Stil',\n        normal: 'Normal',\n        p: 'Normal',\n        blockquote: 'Zitat',\n        pre: 'Quellcode',\n        h1: 'Überschrift 1',\n        h2: 'Überschrift 2',\n        h3: 'Überschrift 3',\n        h4: 'Überschrift 4',\n        h5: 'Überschrift 5',\n        h6: 'Überschrift 6'\n      },\n      lists: {\n        unordered: 'Unnummerierte Liste',\n        ordered: 'Nummerierte Liste'\n      },\n      options: {\n        help: 'Hilfe',\n        fullscreen: 'Vollbild',\n        codeview: 'Quellcode anzeigen'\n      },\n      paragraph: {\n        paragraph: 'Absatz',\n        outdent: 'Einzug verkleinern',\n        indent: 'Einzug vergrößern',\n        left: 'Links ausrichten',\n        center: 'Zentriert ausrichten',\n        right: 'Rechts ausrichten',\n        justify: 'Blocksatz'\n      },\n      color: {\n        recent: 'Letzte Farbe',\n        more: 'Weitere Farben',\n        background: 'Hintergrundfarbe',\n        foreground: 'Schriftfarbe',\n        transparent: 'Transparenz',\n        setTransparent: 'Transparenz setzen',\n        reset: 'Zurücksetzen',\n        resetToDefault: 'Auf Standard zurücksetzen'\n      },\n      shortcut: {\n        shortcuts: 'Tastenkürzel',\n        close: 'Schließen',\n        textFormatting: 'Textformatierung',\n        action: 'Aktion',\n        paragraphFormatting: 'Absatzformatierung',\n        documentStyle: 'Dokumentenstil',\n        extraKeys: 'Weitere Tasten'\n      },\n      help: {\n        'insertParagraph': 'Absatz einfügen',\n        'undo': 'Letzte Anweisung rückgängig',\n        'redo': 'Letzte Anweisung wiederholen',\n        'tab': 'Einzug hinzufügen',\n        'untab': 'Einzug entfernen',\n        'bold': 'Schrift Fett',\n        'italic': 'Schrift Kursiv',\n        'underline': 'Unterstreichen',\n        'strikethrough': 'Durchstreichen',\n        'removeFormat': 'Entfernt Format',\n        'justifyLeft': 'Linksbündig',\n        'justifyCenter': 'Mittig',\n        'justifyRight': 'Rechtsbündig',\n        'justifyFull': 'Blocksatz',\n        'insertUnorderedList': 'Unnummerierte Liste',\n        'insertOrderedList': 'Nummerierte Liste',\n        'outdent': 'Aktuellen Absatz ausrücken',\n        'indent': 'Aktuellen Absatz einrücken',\n        'formatPara': 'Formatiert aktuellen Block als Absatz (P-Tag)',\n        'formatH1': 'Formatiert aktuellen Block als H1',\n        'formatH2': 'Formatiert aktuellen Block als H2',\n        'formatH3': 'Formatiert aktuellen Block als H3',\n        'formatH4': 'Formatiert aktuellen Block als H4',\n        'formatH5': 'Formatiert aktuellen Block als H5',\n        'formatH6': 'Formatiert aktuellen Block als H6',\n        'insertHorizontalRule': 'Fügt eine horizontale Linie ein',\n        'linkDialog.show': 'Zeigt Linkdialog'\n      },\n      history: {\n        undo: 'Rückgängig',\n        redo: 'Wiederholen'\n      },\n      specialChar: {\n        specialChar: 'Sonderzeichen',\n        select: 'Zeichen auswählen'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-de-DE.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-el-GR.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 14);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 14:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'el-GR': {\n      font: {\n        bold: 'Έντονα',\n        italic: 'Πλάγια',\n        underline: 'Υπογραμμισμένα',\n        clear: 'Καθαρισμός',\n        height: 'Ύψος',\n        name: 'Γραμματοσειρά',\n        strikethrough: 'Διεγραμμένα',\n        subscript: 'Δείκτης',\n        superscript: 'Εκθέτης',\n        size: 'Μέγεθος',\n        sizeunit: 'Μονάδα μεγέθους'\n      },\n      image: {\n        image: 'Εικόνα',\n        insert: 'Εισαγωγή',\n        resizeFull: 'Πλήρες μέγεθος',\n        resizeHalf: 'Μισό μέγεθος',\n        resizeQuarter: '1/4 μέγεθος',\n        resizeNone: 'Αρχικό μέγεθος',\n        floatLeft: 'Μετατόπιση αριστερά',\n        floatRight: 'Μετατόπιση δεξιά',\n        floatNone: 'Χωρίς μετατόπιση',\n        shapeRounded: 'Σχήμα: Στρογγυλεμένο',\n        shapeCircle: 'Σχήμα: Κύκλος',\n        shapeThumbnail: 'Σχήμα: Μικρογραφία',\n        shapeNone: 'Σχήμα: Κανένα',\n        dragImageHere: 'Σύρτε την εικόνα εδώ',\n        dropImage: 'Αφήστε την εικόνα',\n        selectFromFiles: 'Επιλογή από αρχεία',\n        maximumFileSize: 'Μέγιστο μέγεθος αρχείου',\n        maximumFileSizeError: 'Το μέγεθος είναι μεγαλύτερο από το μέγιστο επιτρεπτό.',\n        url: 'URL',\n        remove: 'Αφαίρεση',\n        original: 'Αρχικό'\n      },\n      link: {\n        link: 'Σύνδεσμος',\n        insert: 'Εισαγωγή συνδέσμου',\n        unlink: 'Αφαίρεση συνδέσμου',\n        edit: 'Επεξεργασία συνδέσμου',\n        textToDisplay: 'Κείμενο συνδέσμου',\n        url: 'Σε ποιo URL πρέπει να πηγαίνει αυτός ο σύνδεσμος;',\n        openInNewWindow: 'Άνοιγμα σε νέο παράθυρο',\n        useProtocol: 'Χρήση προεπιλεγμένου πρωτοκόλλου'\n      },\n      video: {\n        video: 'Βίντεο',\n        videoLink: 'Σύνδεσμος Βίντεο',\n        insert: 'Εισαγωγή',\n        url: 'URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ή Youku)'\n      },\n      table: {\n        table: 'Πίνακας',\n        addRowAbove: 'Προσθήκη γραμμής πάνω',\n        addRowBelow: 'Προσθήκη γραμμής κάτω',\n        addColLeft: 'Προσθήκη στήλης αριστερά',\n        addColRight: 'Προσθήκη στήλης δεξία',\n        delRow: 'Διαγραφή γραμμής',\n        delCol: 'Διαγραφή στήλης',\n        delTable: 'Διαγραφή πίνακα'\n      },\n      hr: {\n        insert: 'Εισαγωγή οριζόντιας γραμμής'\n      },\n      style: {\n        style: 'Στυλ',\n        normal: 'Κανονικό',\n        blockquote: 'Παράθεση',\n        pre: 'Ως έχει',\n        h1: 'Κεφαλίδα 1',\n        h2: 'Κεφαλίδα 2',\n        h3: 'Κεφαλίδα 3',\n        h4: 'Κεφαλίδα 4',\n        h5: 'Κεφαλίδα 5',\n        h6: 'Κεφαλίδα 6'\n      },\n      lists: {\n        unordered: 'Αταξινόμητη λίστα',\n        ordered: 'Ταξινομημένη λίστα'\n      },\n      options: {\n        help: 'Βοήθεια',\n        fullscreen: 'Πλήρης οθόνη',\n        codeview: 'Προβολή HTML'\n      },\n      paragraph: {\n        paragraph: 'Παράγραφος',\n        outdent: 'Μείωση εσοχής',\n        indent: 'Άυξηση εσοχής',\n        left: 'Αριστερή στοίχιση',\n        center: 'Στοίχιση στο κέντρο',\n        right: 'Δεξιά στοίχιση',\n        justify: 'Πλήρης στοίχιση'\n      },\n      color: {\n        recent: 'Πρόσφατη επιλογή',\n        more: 'Περισσότερα',\n        background: 'Υπόβαθρο',\n        foreground: 'Μπροστά',\n        transparent: 'Διαφανές',\n        setTransparent: 'Επιλογή διαφάνειας',\n        reset: 'Επαναφορά',\n        resetToDefault: 'Επαναφορά στις προκαθορισμένες τιμές',\n        cpSelect: 'Επιλογή'\n      },\n      shortcut: {\n        shortcuts: 'Συντομεύσεις',\n        close: 'Κλείσιμο',\n        textFormatting: 'Διαμόρφωση κειμένου',\n        action: 'Ενέργεια',\n        paragraphFormatting: 'Διαμόρφωση παραγράφου',\n        documentStyle: 'Στυλ κειμένου',\n        extraKeys: 'Επιπλέον συντομεύσεις'\n      },\n      help: {\n        'escape': 'Έξοδος',\n        'insertParagraph': 'Εισαγωγή παραγράφου',\n        'undo': 'Αναιρεί την προηγούμενη εντολή',\n        'redo': 'Επαναλαμβάνει την προηγούμενη εντολή',\n        'tab': 'Εσοχή',\n        'untab': 'Αναίρεση εσοχής',\n        'bold': 'Ορισμός έντονου στυλ',\n        'italic': 'Ορισμός πλάγιου στυλ',\n        'underline': 'Ορισμός υπογεγραμμένου στυλ',\n        'strikethrough': 'Ορισμός διεγραμμένου στυλ',\n        'removeFormat': 'Αφαίρεση στυλ',\n        'justifyLeft': 'Ορισμός αριστερής στοίχισης',\n        'justifyCenter': 'Ορισμός κεντρικής στοίχισης',\n        'justifyRight': 'Ορισμός δεξιάς στοίχισης',\n        'justifyFull': 'Ορισμός πλήρους στοίχισης',\n        'insertUnorderedList': 'Ορισμός μη-ταξινομημένης λίστας',\n        'insertOrderedList': 'Ορισμός ταξινομημένης λίστας',\n        'outdent': 'Προεξοχή παραγράφου',\n        'indent': 'Εσοχή παραγράφου',\n        'formatPara': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε παράγραφο (P tag)',\n        'formatH1': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H1',\n        'formatH2': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H2',\n        'formatH3': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H3',\n        'formatH4': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H4',\n        'formatH5': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H5',\n        'formatH6': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H6',\n        'insertHorizontalRule': 'Εισαγωγή οριζόντιας γραμμής',\n        'linkDialog.show': 'Εμφάνιση διαλόγου συνδέσμου'\n      },\n      history: {\n        undo: 'Αναίρεση',\n        redo: 'Επαναληψη'\n      },\n      specialChar: {\n        specialChar: 'ΕΙΔΙΚΟΙ ΧΑΡΑΚΤΗΡΕΣ',\n        select: 'Επιλέξτε ειδικούς χαρακτήρες'\n      },\n      output: {\n        noSelection: 'Δεν έγινε επιλογή!'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-el-GR.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-es-ES.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 15);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 15:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'es-ES': {\n      font: {\n        bold: 'Negrita',\n        italic: 'Cursiva',\n        underline: 'Subrayado',\n        clear: 'Eliminar estilo de letra',\n        height: 'Altura de línea',\n        name: 'Tipo de letra',\n        strikethrough: 'Tachado',\n        subscript: 'Subíndice',\n        superscript: 'Superíndice',\n        size: 'Tamaño de la fuente',\n        sizeunit: 'Unidad del tamaño de letra'\n      },\n      image: {\n        image: 'Imagen',\n        insert: 'Insertar imagen',\n        resizeFull: 'Redimensionar a tamaño completo',\n        resizeHalf: 'Redimensionar a la mitad',\n        resizeQuarter: 'Redimensionar a un cuarto',\n        resizeNone: 'Tamaño original',\n        floatLeft: 'Flotar a la izquierda',\n        floatRight: 'Flotar a la derecha',\n        floatNone: 'No flotar',\n        shapeRounded: 'Forma: Redondeado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Miniatura',\n        shapeNone: 'Forma: Ninguna',\n        dragImageHere: 'Arrastre una imagen o texto aquí',\n        dropImage: 'Suelte una imagen o texto',\n        selectFromFiles: 'Seleccione un fichero',\n        maximumFileSize: 'Tamaño máximo del fichero',\n        maximumFileSizeError: 'Superado el tamaño máximo de fichero.',\n        url: 'URL de la imagen',\n        remove: 'Eliminar la imagen',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Enlace del vídeo',\n        insert: 'Insertar un vídeo',\n        url: 'URL del vídeo',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Enlace',\n        insert: 'Insertar un enlace',\n        unlink: 'Quitar el enlace',\n        edit: 'Editar',\n        textToDisplay: 'Texto a mostrar',\n        url: '¿A qué URL lleva este enlace?',\n        openInNewWindow: 'Abrir en una nueva ventana',\n        useProtocol: 'Usar el protocolo predefinido'\n      },\n      table: {\n        table: 'Tabla',\n        addRowAbove: 'Añadir una fila encima',\n        addRowBelow: 'Añadir una fila debajo',\n        addColLeft: 'Añadir una columna a la izquierda',\n        addColRight: 'Añadir una columna a la derecha',\n        delRow: 'Borrar la fila',\n        delCol: 'Borrar la columna',\n        delTable: 'Borrar la tabla'\n      },\n      hr: {\n        insert: 'Insertar una línea horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'Normal',\n        blockquote: 'Cita',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista',\n        ordered: 'Lista numerada'\n      },\n      options: {\n        help: 'Ayuda',\n        fullscreen: 'Pantalla completa',\n        codeview: 'Ver el código fuente'\n      },\n      paragraph: {\n        paragraph: 'Párrafo',\n        outdent: 'Reducir la sangría',\n        indent: 'Aumentar la sangría',\n        left: 'Alinear a la izquierda',\n        center: 'Centrar',\n        right: 'Alinear a la derecha',\n        justify: 'Justificar'\n      },\n      color: {\n        recent: 'Último color',\n        more: 'Más colores',\n        background: 'Color de fondo',\n        foreground: 'Color del texto',\n        transparent: 'Transparente',\n        setTransparent: 'Establecer transparente',\n        reset: 'Restablecer',\n        resetToDefault: 'Restablecer a los valores predefinidos',\n        cpSelect: 'Seleccionar'\n      },\n      shortcut: {\n        shortcuts: 'Atajos de teclado',\n        close: 'Cerrar',\n        textFormatting: 'Formato de texto',\n        action: 'Acción',\n        paragraphFormatting: 'Formato de párrafo',\n        documentStyle: 'Estilo de documento',\n        extraKeys: 'Teclas adicionales'\n      },\n      help: {\n        insertParagraph: 'Insertar un párrafo',\n        undo: 'Deshacer la última acción',\n        redo: 'Rehacer la última acción',\n        tab: 'Tabular',\n        untab: 'Eliminar tabulación',\n        bold: 'Establecer estilo negrita',\n        italic: 'Establecer estilo cursiva',\n        underline: 'Establecer estilo subrayado',\n        strikethrough: 'Establecer estilo tachado',\n        removeFormat: 'Limpiar estilo',\n        justifyLeft: 'Alinear a la izquierda',\n        justifyCenter: 'Alinear al centro',\n        justifyRight: 'Alinear a la derecha',\n        justifyFull: 'Justificar',\n        insertUnorderedList: 'Insertar lista',\n        insertOrderedList: 'Insertar lista numerada',\n        outdent: 'Reducir sangría del párrafo',\n        indent: 'Aumentar sangría del párrafo',\n        formatPara: 'Cambiar el formato del bloque actual a párrafo (etiqueta P)',\n        formatH1: 'Cambiar el formato del bloque actual a H1',\n        formatH2: 'Cambiar el formato del bloque actual a H2',\n        formatH3: 'Cambiar el formato del bloque actual a H3',\n        formatH4: 'Cambiar el formato del bloque actual a H4',\n        formatH5: 'Cambiar el formato del bloque actual a H5',\n        formatH6: 'Cambiar el formato del bloque actual a H6',\n        insertHorizontalRule: 'Insertar una línea horizontal',\n        'linkDialog.show': 'Mostrar el panel de enlaces'\n      },\n      history: {\n        undo: 'Deshacer',\n        redo: 'Rehacer'\n      },\n      specialChar: {\n        specialChar: 'CARACTERES ESPECIALES',\n        select: 'Seleccionar caracteres especiales'\n      },\n      output: {\n        noSelection: '¡No ha seleccionado nada!'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-es-ES.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-es-EU.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 16);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 16:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'es-EU': {\n      font: {\n        bold: 'Lodia',\n        italic: 'Etzana',\n        underline: 'Azpimarratua',\n        clear: 'Estiloa kendu',\n        height: 'Lerro altuera',\n        name: 'Tipografia',\n        strikethrough: 'Marratua',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Letren neurria'\n      },\n      image: {\n        image: 'Irudia',\n        insert: 'Irudi bat txertatu',\n        resizeFull: 'Jatorrizko neurrira aldatu',\n        resizeHalf: 'Neurria erdira aldatu',\n        resizeQuarter: 'Neurria laurdenera aldatu',\n        floatLeft: 'Ezkerrean kokatu',\n        floatRight: 'Eskuinean kokatu',\n        floatNone: 'Kokapenik ez ezarri',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Irudi bat ezarri hemen',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Zure fitxategi bat aukeratu',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Irudiaren URL helbidea',\n        remove: 'Remove Image',\n        original: 'Original'\n      },\n      video: {\n        video: 'Bideoa',\n        videoLink: 'Bideorako esteka',\n        insert: 'Bideo berri bat txertatu',\n        url: 'Bideoaren URL helbidea',\n        providers: '(YouTube, Vimeo, Vine, Instagram edo DailyMotion)'\n      },\n      link: {\n        link: 'Esteka',\n        insert: 'Esteka bat txertatu',\n        unlink: 'Esteka ezabatu',\n        edit: 'Editatu',\n        textToDisplay: 'Estekaren testua',\n        url: 'Estekaren URL helbidea',\n        openInNewWindow: 'Leiho berri batean ireki'\n      },\n      table: {\n        table: 'Taula',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Marra horizontala txertatu'\n      },\n      style: {\n        style: 'Estiloa',\n        p: 'p',\n        blockquote: 'Aipamena',\n        pre: 'Kodea',\n        h1: '1. izenburua',\n        h2: '2. izenburua',\n        h3: '3. izenburua',\n        h4: '4. izenburua',\n        h5: '5. izenburua',\n        h6: '6. izenburua'\n      },\n      lists: {\n        unordered: 'Ordenatu gabeko zerrenda',\n        ordered: 'Zerrenda ordenatua'\n      },\n      options: {\n        help: 'Laguntza',\n        fullscreen: 'Pantaila osoa',\n        codeview: 'Kodea ikusi'\n      },\n      paragraph: {\n        paragraph: 'Paragrafoa',\n        outdent: 'Koska txikiagoa',\n        indent: 'Koska handiagoa',\n        left: 'Ezkerrean kokatu',\n        center: 'Erdian kokatu',\n        right: 'Eskuinean kokatu',\n        justify: 'Justifikatu'\n      },\n      color: {\n        recent: 'Azken kolorea',\n        more: 'Kolore gehiago',\n        background: 'Atzeko planoa',\n        foreground: 'Aurreko planoa',\n        transparent: 'Gardena',\n        setTransparent: 'Gardendu',\n        reset: 'Lehengoratu',\n        resetToDefault: 'Berrezarri lehenetsia'\n      },\n      shortcut: {\n        shortcuts: 'Lasterbideak',\n        close: 'Itxi',\n        textFormatting: 'Testuaren formatua',\n        action: 'Ekintza',\n        paragraphFormatting: 'Paragrafoaren formatua',\n        documentStyle: 'Dokumentuaren estiloa'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Desegin',\n        redo: 'Berregin'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-es-EU.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-fa-IR.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 17);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 17:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'fa-IR': {\n      font: {\n        bold: 'درشت',\n        italic: 'خمیده',\n        underline: 'میان خط',\n        clear: 'پاک کردن فرمت فونت',\n        height: 'فاصله ی خطی',\n        name: 'اسم فونت',\n        strikethrough: 'Strike',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'اندازه ی فونت'\n      },\n      image: {\n        image: 'تصویر',\n        insert: 'وارد کردن تصویر',\n        resizeFull: 'تغییر به اندازه ی کامل',\n        resizeHalf: 'تغییر به اندازه نصف',\n        resizeQuarter: 'تغییر به اندازه یک چهارم',\n        floatLeft: 'چسباندن به چپ',\n        floatRight: 'چسباندن به راست',\n        floatNone: 'بدون چسبندگی',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'یک تصویر را اینجا بکشید',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'فایل ها را انتخاب کنید',\n        maximumFileSize: 'حداکثر اندازه پرونده',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'آدرس تصویر',\n        remove: 'حذف تصویر',\n        original: 'Original'\n      },\n      video: {\n        video: 'ویدیو',\n        videoLink: 'لینک ویدیو',\n        insert: 'افزودن ویدیو',\n        url: 'آدرس ویدیو ؟',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion یا Youku)'\n      },\n      link: {\n        link: 'لینک',\n        insert: 'اضافه کردن لینک',\n        unlink: 'حذف لینک',\n        edit: 'ویرایش',\n        textToDisplay: 'متن جهت نمایش',\n        url: 'این لینک به چه آدرسی باید برود ؟',\n        openInNewWindow: 'در یک پنجره ی جدید باز شود'\n      },\n      table: {\n        table: 'جدول',\n        addRowAbove: 'افزودن ردیف بالا',\n        addRowBelow: 'افزودن ردیف پایین',\n        addColLeft: 'افزودن ستون چپ',\n        addColRight: 'افزودن ستون راست',\n        delRow: 'حذف ردیف',\n        delCol: 'حذف ستون',\n        delTable: 'حذف جدول'\n      },\n      hr: {\n        insert: 'افزودن خط افقی'\n      },\n      style: {\n        style: 'استیل',\n        p: 'نرمال',\n        blockquote: 'نقل قول',\n        pre: 'کد',\n        h1: 'سرتیتر 1',\n        h2: 'سرتیتر 2',\n        h3: 'سرتیتر 3',\n        h4: 'سرتیتر 4',\n        h5: 'سرتیتر 5',\n        h6: 'سرتیتر 6'\n      },\n      lists: {\n        unordered: 'لیست غیر ترتیبی',\n        ordered: 'لیست ترتیبی'\n      },\n      options: {\n        help: 'راهنما',\n        fullscreen: 'نمایش تمام صفحه',\n        codeview: 'مشاهده ی کد'\n      },\n      paragraph: {\n        paragraph: 'پاراگراف',\n        outdent: 'کاهش تو رفتگی',\n        indent: 'افزایش تو رفتگی',\n        left: 'چپ چین',\n        center: 'میان چین',\n        right: 'راست چین',\n        justify: 'بلوک چین'\n      },\n      color: {\n        recent: 'رنگ اخیرا استفاده شده',\n        more: 'رنگ بیشتر',\n        background: 'رنگ پس زمینه',\n        foreground: 'رنگ متن',\n        transparent: 'بی رنگ',\n        setTransparent: 'تنظیم حالت بی رنگ',\n        reset: 'بازنشاندن',\n        resetToDefault: 'حالت پیش فرض'\n      },\n      shortcut: {\n        shortcuts: 'دکمه های میان بر',\n        close: 'بستن',\n        textFormatting: 'فرمت متن',\n        action: 'عملیات',\n        paragraphFormatting: 'فرمت پاراگراف',\n        documentStyle: 'استیل سند',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'افزودن پاراگراف',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'چپ چین',\n        'justifyCenter': 'وسط چین',\n        'justifyRight': 'راست چین',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'واچیدن',\n        redo: 'بازچیدن'\n      },\n      specialChar: {\n        specialChar: 'کاراکتر خاص',\n        select: 'انتخاب کاراکتر خاص'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-fa-IR.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-fi-FI.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 18);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 18:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'fi-FI': {\n      font: {\n        bold: 'Lihavointi',\n        italic: 'Kursivointi',\n        underline: 'Alleviivaus',\n        clear: 'Tyhjennä muotoilu',\n        height: 'Riviväli',\n        name: 'Kirjasintyyppi',\n        strikethrough: 'Yliviivaus',\n        subscript: 'Alaindeksi',\n        superscript: 'Yläindeksi',\n        size: 'Kirjasinkoko'\n      },\n      image: {\n        image: 'Kuva',\n        insert: 'Lisää kuva',\n        resizeFull: 'Koko leveys',\n        resizeHalf: 'Puolikas leveys',\n        resizeQuarter: 'Neljäsosa leveys',\n        floatLeft: 'Sijoita vasemmalle',\n        floatRight: 'Sijoita oikealle',\n        floatNone: 'Ei sijoitusta',\n        shapeRounded: 'Muoto: Pyöristetty',\n        shapeCircle: 'Muoto: Ympyrä',\n        shapeThumbnail: 'Muoto: Esikatselukuva',\n        shapeNone: 'Muoto: Ei muotoilua',\n        dragImageHere: 'Vedä kuva tähän',\n        selectFromFiles: 'Valitse tiedostoista',\n        maximumFileSize: 'Maksimi tiedosto koko',\n        maximumFileSizeError: 'Maksimi tiedosto koko ylitetty.',\n        url: 'URL-osoitteen mukaan',\n        remove: 'Poista kuva',\n        original: 'Alkuperäinen'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Linkki videoon',\n        insert: 'Lisää video',\n        url: 'Videon URL-osoite',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion tai Youku)'\n      },\n      link: {\n        link: 'Linkki',\n        insert: 'Lisää linkki',\n        unlink: 'Poista linkki',\n        edit: 'Muokkaa',\n        textToDisplay: 'Näytettävä teksti',\n        url: 'Linkin URL-osoite',\n        openInNewWindow: 'Avaa uudessa ikkunassa'\n      },\n      table: {\n        table: 'Taulukko',\n        addRowAbove: 'Lisää rivi yläpuolelle',\n        addRowBelow: 'Lisää rivi alapuolelle',\n        addColLeft: 'Lisää sarake vasemmalle puolelle',\n        addColRight: 'Lisää sarake oikealle puolelle',\n        delRow: 'Poista rivi',\n        delCol: 'Poista sarake',\n        delTable: 'Poista taulukko'\n      },\n      hr: {\n        insert: 'Lisää vaakaviiva'\n      },\n      style: {\n        style: 'Tyyli',\n        p: 'Normaali',\n        blockquote: 'Lainaus',\n        pre: 'Koodi',\n        h1: 'Otsikko 1',\n        h2: 'Otsikko 2',\n        h3: 'Otsikko 3',\n        h4: 'Otsikko 4',\n        h5: 'Otsikko 5',\n        h6: 'Otsikko 6'\n      },\n      lists: {\n        unordered: 'Luettelomerkitty luettelo',\n        ordered: 'Numeroitu luettelo'\n      },\n      options: {\n        help: 'Ohje',\n        fullscreen: 'Koko näyttö',\n        codeview: 'HTML-näkymä'\n      },\n      paragraph: {\n        paragraph: 'Kappale',\n        outdent: 'Pienennä sisennystä',\n        indent: 'Suurenna sisennystä',\n        left: 'Tasaa vasemmalle',\n        center: 'Keskitä',\n        right: 'Tasaa oikealle',\n        justify: 'Tasaa'\n      },\n      color: {\n        recent: 'Viimeisin väri',\n        more: 'Lisää värejä',\n        background: 'Korostusväri',\n        foreground: 'Tekstin väri',\n        transparent: 'Läpinäkyvä',\n        setTransparent: 'Aseta läpinäkyväksi',\n        reset: 'Palauta',\n        resetToDefault: 'Palauta oletusarvoksi'\n      },\n      shortcut: {\n        shortcuts: 'Pikanäppäimet',\n        close: 'Sulje',\n        textFormatting: 'Tekstin muotoilu',\n        action: 'Toiminto',\n        paragraphFormatting: 'Kappaleen muotoilu',\n        documentStyle: 'Asiakirjan tyyli'\n      },\n      help: {\n        'insertParagraph': 'Lisää kappale',\n        'undo': 'Kumoa viimeisin komento',\n        'redo': 'Tee uudelleen kumottu komento',\n        'tab': 'Sarkain',\n        'untab': 'Sarkainmerkin poisto',\n        'bold': 'Lihavointi',\n        'italic': 'Kursiivi',\n        'underline': 'Alleviivaus',\n        'strikethrough': 'Yliviivaus',\n        'removeFormat': 'Poista asetetut tyylit',\n        'justifyLeft': 'Tasaa vasemmalle',\n        'justifyCenter': 'Keskitä',\n        'justifyRight': 'Tasaa oikealle',\n        'justifyFull': 'Tasaa',\n        'insertUnorderedList': 'Luettelomerkillä varustettu lista',\n        'insertOrderedList': 'Numeroitu lista',\n        'outdent': 'Pienennä sisennystä',\n        'indent': 'Suurenna sisennystä',\n        'formatPara': 'Muuta kappaleen formaatti p',\n        'formatH1': 'Muuta kappaleen formaatti H1',\n        'formatH2': 'Muuta kappaleen formaatti H2',\n        'formatH3': 'Muuta kappaleen formaatti H3',\n        'formatH4': 'Muuta kappaleen formaatti H4',\n        'formatH5': 'Muuta kappaleen formaatti H5',\n        'formatH6': 'Muuta kappaleen formaatti H6',\n        'insertHorizontalRule': 'Lisää vaakaviiva',\n        'linkDialog.show': 'Lisää linkki'\n      },\n      history: {\n        undo: 'Kumoa',\n        redo: 'Toista'\n      },\n      specialChar: {\n        specialChar: 'ERIKOISMERKIT',\n        select: 'Valitse erikoismerkit'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-fi-FI.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-fr-FR.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 19);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 19:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'fr-FR': {\n      font: {\n        bold: 'Gras',\n        italic: 'Italique',\n        underline: 'Souligné',\n        clear: 'Effacer la mise en forme',\n        height: 'Interligne',\n        name: 'Famille de police',\n        strikethrough: 'Barré',\n        superscript: 'Exposant',\n        subscript: 'Indice',\n        size: 'Taille de police'\n      },\n      image: {\n        image: 'Image',\n        insert: 'Insérer une image',\n        resizeFull: 'Taille originale',\n        resizeHalf: 'Redimensionner à 50 %',\n        resizeQuarter: 'Redimensionner à 25 %',\n        floatLeft: 'Aligné à gauche',\n        floatRight: 'Aligné à droite',\n        floatNone: 'Pas d\\'alignement',\n        shapeRounded: 'Forme: Rectangle arrondi',\n        shapeCircle: 'Forme: Cercle',\n        shapeThumbnail: 'Forme: Vignette',\n        shapeNone: 'Forme: Aucune',\n        dragImageHere: 'Faites glisser une image ou un texte dans ce cadre',\n        dropImage: 'Lachez l\\'image ou le texte',\n        selectFromFiles: 'Choisir un fichier',\n        maximumFileSize: 'Taille de fichier maximale',\n        maximumFileSizeError: 'Taille maximale du fichier dépassée',\n        url: 'URL de l\\'image',\n        remove: 'Supprimer l\\'image',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vidéo',\n        videoLink: 'Lien vidéo',\n        insert: 'Insérer une vidéo',\n        url: 'URL de la vidéo',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'\n      },\n      link: {\n        link: 'Lien',\n        insert: 'Insérer un lien',\n        unlink: 'Supprimer un lien',\n        edit: 'Modifier',\n        textToDisplay: 'Texte à afficher',\n        url: 'URL du lien',\n        openInNewWindow: 'Ouvrir dans une nouvelle fenêtre'\n      },\n      table: {\n        table: 'Tableau',\n        addRowAbove: 'Ajouter une ligne au-dessus',\n        addRowBelow: 'Ajouter une ligne en dessous',\n        addColLeft: 'Ajouter une colonne à gauche',\n        addColRight: 'Ajouter une colonne à droite',\n        delRow: 'Supprimer la ligne',\n        delCol: 'Supprimer la colonne',\n        delTable: 'Supprimer le tableau'\n      },\n      hr: {\n        insert: 'Insérer une ligne horizontale'\n      },\n      style: {\n        style: 'Style',\n        p: 'Normal',\n        blockquote: 'Citation',\n        pre: 'Code source',\n        h1: 'Titre 1',\n        h2: 'Titre 2',\n        h3: 'Titre 3',\n        h4: 'Titre 4',\n        h5: 'Titre 5',\n        h6: 'Titre 6'\n      },\n      lists: {\n        unordered: 'Liste à puces',\n        ordered: 'Liste numérotée'\n      },\n      options: {\n        help: 'Aide',\n        fullscreen: 'Plein écran',\n        codeview: 'Afficher le code HTML'\n      },\n      paragraph: {\n        paragraph: 'Paragraphe',\n        outdent: 'Diminuer le retrait',\n        indent: 'Augmenter le retrait',\n        left: 'Aligner à gauche',\n        center: 'Centrer',\n        right: 'Aligner à droite',\n        justify: 'Justifier'\n      },\n      color: {\n        recent: 'Dernière couleur sélectionnée',\n        more: 'Plus de couleurs',\n        background: 'Couleur de fond',\n        foreground: 'Couleur de police',\n        transparent: 'Transparent',\n        setTransparent: 'Définir la transparence',\n        reset: 'Restaurer',\n        resetToDefault: 'Restaurer la couleur par défaut'\n      },\n      shortcut: {\n        shortcuts: 'Raccourcis',\n        close: 'Fermer',\n        textFormatting: 'Mise en forme du texte',\n        action: 'Action',\n        paragraphFormatting: 'Mise en forme des paragraphes',\n        documentStyle: 'Style du document',\n        extraKeys: 'Touches supplémentaires'\n      },\n      help: {\n        'insertParagraph': 'Insérer paragraphe',\n        'undo': 'Défaire la dernière commande',\n        'redo': 'Refaire la dernière commande',\n        'tab': 'Tabulation',\n        'untab': 'Tabulation arrière',\n        'bold': 'Mettre en caractère gras',\n        'italic': 'Mettre en italique',\n        'underline': 'Mettre en souligné',\n        'strikethrough': 'Mettre en texte barré',\n        'removeFormat': 'Nettoyer les styles',\n        'justifyLeft': 'Aligner à gauche',\n        'justifyCenter': 'Centrer',\n        'justifyRight': 'Aligner à droite',\n        'justifyFull': 'Justifier à gauche et à droite',\n        'insertUnorderedList': 'Basculer liste à puces',\n        'insertOrderedList': 'Basculer liste ordonnée',\n        'outdent': 'Diminuer le retrait du paragraphe',\n        'indent': 'Augmenter le retrait du paragraphe',\n        'formatPara': 'Changer le paragraphe en cours en normal (P)',\n        'formatH1': 'Changer le paragraphe en cours en entête H1',\n        'formatH2': 'Changer le paragraphe en cours en entête H2',\n        'formatH3': 'Changer le paragraphe en cours en entête H3',\n        'formatH4': 'Changer le paragraphe en cours en entête H4',\n        'formatH5': 'Changer le paragraphe en cours en entête H5',\n        'formatH6': 'Changer le paragraphe en cours en entête H6',\n        'insertHorizontalRule': 'Insérer séparation horizontale',\n        'linkDialog.show': 'Afficher fenêtre d\\'hyperlien'\n      },\n      history: {\n        undo: 'Annuler la dernière action',\n        redo: 'Restaurer la dernière action annulée'\n      },\n      specialChar: {\n        specialChar: 'Caractères spéciaux',\n        select: 'Choisir des caractères spéciaux'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-fr-FR.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-gl-ES.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 20);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 20:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'gl-ES': {\n      font: {\n        bold: 'Negrita',\n        italic: 'Cursiva',\n        underline: 'Subliñado',\n        clear: 'Quitar estilo de fonte',\n        height: 'Altura de liña',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        superscript: 'Superíndice',\n        subscript: 'Subíndice',\n        size: 'Tamaño da fonte'\n      },\n      image: {\n        image: 'Imaxe',\n        insert: 'Inserir imaxe',\n        resizeFull: 'Redimensionar a tamaño completo',\n        resizeHalf: 'Redimensionar á metade',\n        resizeQuarter: 'Redimensionar a un cuarto',\n        floatLeft: 'Flotar á esquerda',\n        floatRight: 'Flotar á dereita',\n        floatNone: 'Non flotar',\n        shapeRounded: 'Forma: Redondeado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Marco',\n        shapeNone: 'Forma: Ningunha',\n        dragImageHere: 'Arrastrar unha imaxe ou texto aquí',\n        dropImage: 'Solta a imaxe ou texto',\n        selectFromFiles: 'Seleccionar desde os arquivos',\n        maximumFileSize: 'Tamaño máximo do arquivo',\n        maximumFileSizeError: 'Superaches o tamaño máximo do arquivo.',\n        url: 'URL da imaxe',\n        remove: 'Eliminar imaxe',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Ligazón do vídeo',\n        insert: 'Insertar vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)'\n      },\n      link: {\n        link: 'Ligazón',\n        insert: 'Inserir Ligazón',\n        unlink: 'Quitar Ligazón',\n        edit: 'Editar',\n        textToDisplay: 'Texto para amosar',\n        url: 'Cara a que URL leva a ligazón?',\n        openInNewWindow: 'Abrir nunha nova xanela'\n      },\n      table: {\n        table: 'Táboa',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Inserir liña horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'Normal',\n        blockquote: 'Cita',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista desordenada',\n        ordered: 'Lista ordenada'\n      },\n      options: {\n        help: 'Axuda',\n        fullscreen: 'Pantalla completa',\n        codeview: 'Ver código fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menos tabulación',\n        indent: 'Máis tabulación',\n        left: 'Aliñar á esquerda',\n        center: 'Aliñar ao centro',\n        right: 'Aliñar á dereita',\n        justify: 'Xustificar'\n      },\n      color: {\n        recent: 'Última cor',\n        more: 'Máis cores',\n        background: 'Cor de fondo',\n        foreground: 'Cor de fuente',\n        transparent: 'Transparente',\n        setTransparent: 'Establecer transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar por defecto'\n      },\n      shortcut: {\n        shortcuts: 'Atallos de teclado',\n        close: 'Pechar',\n        textFormatting: 'Formato de texto',\n        action: 'Acción',\n        paragraphFormatting: 'Formato de parágrafo',\n        documentStyle: 'Estilo de documento',\n        extraKeys: 'Teclas adicionais'\n      },\n      help: {\n        'insertParagraph': 'Inserir parágrafo',\n        'undo': 'Desfacer última acción',\n        'redo': 'Refacer última acción',\n        'tab': 'Tabular',\n        'untab': 'Eliminar tabulación',\n        'bold': 'Establecer estilo negrita',\n        'italic': 'Establecer estilo cursiva',\n        'underline': 'Establecer estilo subliñado',\n        'strikethrough': 'Establecer estilo riscado',\n        'removeFormat': 'Limpar estilo',\n        'justifyLeft': 'Aliñar á esquerda',\n        'justifyCenter': 'Aliñar ao centro',\n        'justifyRight': 'Aliñar á dereita',\n        'justifyFull': 'Xustificar',\n        'insertUnorderedList': 'Inserir lista desordenada',\n        'insertOrderedList': 'Inserir lista ordenada',\n        'outdent': 'Reducir tabulación do parágrafo',\n        'indent': 'Aumentar tabulación do parágrafo',\n        'formatPara': 'Mudar estilo do bloque a parágrafo (etiqueta P)',\n        'formatH1': 'Mudar estilo do bloque a H1',\n        'formatH2': 'Mudar estilo do bloque a H2',\n        'formatH3': 'Mudar estilo do bloque a H3',\n        'formatH4': 'Mudar estilo do bloque a H4',\n        'formatH5': 'Mudar estilo do bloque a H5',\n        'formatH6': 'Mudar estilo do bloque a H6',\n        'insertHorizontalRule': 'Inserir liña horizontal',\n        'linkDialog.show': 'Amosar panel ligazóns'\n      },\n      history: {\n        undo: 'Desfacer',\n        redo: 'Refacer'\n      },\n      specialChar: {\n        specialChar: 'CARACTERES ESPECIAIS',\n        select: 'Selecciona Caracteres especiais'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-gl-ES.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-he-IL.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 21);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 21:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'he-IL': {\n      font: {\n        bold: 'מודגש',\n        italic: 'נטוי',\n        underline: 'קו תחתון',\n        clear: 'נקה עיצוב',\n        height: 'גובה',\n        name: 'גופן',\n        strikethrough: 'קו חוצה',\n        subscript: 'כתב תחתי',\n        superscript: 'כתב עילי',\n        size: 'גודל גופן'\n      },\n      image: {\n        image: 'תמונה',\n        insert: 'הוסף תמונה',\n        resizeFull: 'גודל מלא',\n        resizeHalf: 'להקטין לחצי',\n        resizeQuarter: 'להקטין לרבע',\n        floatLeft: 'יישור לשמאל',\n        floatRight: 'יישור לימין',\n        floatNone: 'ישר',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'גרור תמונה לכאן',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'בחר מתוך קבצים',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'נתיב לתמונה',\n        remove: 'הסר תמונה',\n        original: 'Original'\n      },\n      video: {\n        video: 'סרטון',\n        videoLink: 'קישור לסרטון',\n        insert: 'הוסף סרטון',\n        url: 'קישור לסרטון',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion או Youku)'\n      },\n      link: {\n        link: 'קישור',\n        insert: 'הוסף קישור',\n        unlink: 'הסר קישור',\n        edit: 'ערוך',\n        textToDisplay: 'טקסט להציג',\n        url: 'קישור',\n        openInNewWindow: 'פתח בחלון חדש'\n      },\n      table: {\n        table: 'טבלה',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'הוסף קו'\n      },\n      style: {\n        style: 'עיצוב',\n        p: 'טקסט רגיל',\n        blockquote: 'ציטוט',\n        pre: 'קוד',\n        h1: 'כותרת 1',\n        h2: 'כותרת 2',\n        h3: 'כותרת 3',\n        h4: 'כותרת 4',\n        h5: 'כותרת 5',\n        h6: 'כותרת 6'\n      },\n      lists: {\n        unordered: 'רשימת תבליטים',\n        ordered: 'רשימה ממוספרת'\n      },\n      options: {\n        help: 'עזרה',\n        fullscreen: 'מסך מלא',\n        codeview: 'תצוגת קוד'\n      },\n      paragraph: {\n        paragraph: 'פסקה',\n        outdent: 'הקטן כניסה',\n        indent: 'הגדל כניסה',\n        left: 'יישור לשמאל',\n        center: 'יישור למרכז',\n        right: 'יישור לימין',\n        justify: 'מיושר'\n      },\n      color: {\n        recent: 'צבע טקסט אחרון',\n        more: 'עוד צבעים',\n        background: 'צבע רקע',\n        foreground: 'צבע טקסט',\n        transparent: 'שקוף',\n        setTransparent: 'קבע כשקוף',\n        reset: 'איפוס',\n        resetToDefault: 'אפס לברירת מחדל'\n      },\n      shortcut: {\n        shortcuts: 'קיצורי מקלדת',\n        close: 'סגור',\n        textFormatting: 'עיצוב הטקסט',\n        action: 'פעולה',\n        paragraphFormatting: 'סגנונות פסקה',\n        documentStyle: 'עיצוב המסמך',\n        extraKeys: 'קיצורים נוספים'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'בטל פעולה',\n        redo: 'בצע שוב'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-he-IL.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-hr-HR.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 22);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 22:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'hr-HR': {\n      font: {\n        bold: 'Podebljano',\n        italic: 'Kurziv',\n        underline: 'Podvučeno',\n        clear: 'Ukloni stilove fonta',\n        height: 'Visina linije',\n        name: 'Font Family',\n        strikethrough: 'Precrtano',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Veličina fonta'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Ubaci sliku',\n        resizeFull: 'Puna veličina',\n        resizeHalf: 'Umanji na 50%',\n        resizeQuarter: 'Umanji na 25%',\n        floatLeft: 'Poravnaj lijevo',\n        floatRight: 'Poravnaj desno',\n        floatNone: 'Bez poravnanja',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Povuci sliku ovdje',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Izaberi iz datoteke',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Adresa slike',\n        remove: 'Ukloni sliku',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Veza na video',\n        insert: 'Ubaci video',\n        url: 'URL video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)'\n      },\n      link: {\n        link: 'Veza',\n        insert: 'Ubaci vezu',\n        unlink: 'Ukloni vezu',\n        edit: 'Uredi',\n        textToDisplay: 'Tekst za prikaz',\n        url: 'Internet adresa',\n        openInNewWindow: 'Otvori u novom prozoru'\n      },\n      table: {\n        table: 'Tablica',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Ubaci horizontalnu liniju'\n      },\n      style: {\n        style: 'Stil',\n        p: 'pni',\n        blockquote: 'Citat',\n        pre: 'Kôd',\n        h1: 'Naslov 1',\n        h2: 'Naslov 2',\n        h3: 'Naslov 3',\n        h4: 'Naslov 4',\n        h5: 'Naslov 5',\n        h6: 'Naslov 6'\n      },\n      lists: {\n        unordered: 'Obična lista',\n        ordered: 'Numerirana lista'\n      },\n      options: {\n        help: 'Pomoć',\n        fullscreen: 'Preko cijelog ekrana',\n        codeview: 'Izvorni kôd'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Smanji uvlačenje',\n        indent: 'Povećaj uvlačenje',\n        left: 'Poravnaj lijevo',\n        center: 'Centrirano',\n        right: 'Poravnaj desno',\n        justify: 'Poravnaj obostrano'\n      },\n      color: {\n        recent: 'Posljednja boja',\n        more: 'Više boja',\n        background: 'Boja pozadine',\n        foreground: 'Boja teksta',\n        transparent: 'Prozirna',\n        setTransparent: 'Prozirna',\n        reset: 'Poništi',\n        resetToDefault: 'Podrazumijevana'\n      },\n      shortcut: {\n        shortcuts: 'Prečice s tipkovnice',\n        close: 'Zatvori',\n        textFormatting: 'Formatiranje teksta',\n        action: 'Akcija',\n        paragraphFormatting: 'Formatiranje paragrafa',\n        documentStyle: 'Stil dokumenta',\n        extraKeys: 'Dodatne kombinacije'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Poništi',\n        redo: 'Ponovi'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-hr-HR.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-hu-HU.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 23);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 23:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'hu-HU': {\n      font: {\n        bold: 'Félkövér',\n        italic: 'Dőlt',\n        underline: 'Aláhúzott',\n        clear: 'Formázás törlése',\n        height: 'Sorköz',\n        name: 'Betűtípus',\n        strikethrough: 'Áthúzott',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Betűméret'\n      },\n      image: {\n        image: 'Kép',\n        insert: 'Kép beszúrása',\n        resizeFull: 'Átméretezés teljes méretre',\n        resizeHalf: 'Átméretezés felére',\n        resizeQuarter: 'Átméretezés negyedére',\n        floatLeft: 'Igazítás balra',\n        floatRight: 'Igazítás jobbra',\n        floatNone: 'Igazítás törlése',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Ide húzhat képet vagy szöveget',\n        dropImage: 'Engedje el a képet vagy szöveget',\n        selectFromFiles: 'Fájlok kiválasztása',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Kép URL címe',\n        remove: 'Kép törlése',\n        original: 'Original'\n      },\n      video: {\n        video: 'Videó',\n        videoLink: 'Videó hivatkozás',\n        insert: 'Videó beszúrása',\n        url: 'Videó URL címe',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion vagy Youku)'\n      },\n      link: {\n        link: 'Hivatkozás',\n        insert: 'Hivatkozás beszúrása',\n        unlink: 'Hivatkozás megszüntetése',\n        edit: 'Szerkesztés',\n        textToDisplay: 'Megjelenítendő szöveg',\n        url: 'Milyen URL címre hivatkozzon?',\n        openInNewWindow: 'Megnyitás új ablakban'\n      },\n      table: {\n        table: 'Táblázat',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Elválasztó vonal beszúrása'\n      },\n      style: {\n        style: 'Stílus',\n        p: 'Normál',\n        blockquote: 'Idézet',\n        pre: 'Kód',\n        h1: 'Fejléc 1',\n        h2: 'Fejléc 2',\n        h3: 'Fejléc 3',\n        h4: 'Fejléc 4',\n        h5: 'Fejléc 5',\n        h6: 'Fejléc 6'\n      },\n      lists: {\n        unordered: 'Listajeles lista',\n        ordered: 'Számozott lista'\n      },\n      options: {\n        help: 'Súgó',\n        fullscreen: 'Teljes képernyő',\n        codeview: 'Kód nézet'\n      },\n      paragraph: {\n        paragraph: 'Bekezdés',\n        outdent: 'Behúzás csökkentése',\n        indent: 'Behúzás növelése',\n        left: 'Igazítás balra',\n        center: 'Igazítás középre',\n        right: 'Igazítás jobbra',\n        justify: 'Sorkizárt'\n      },\n      color: {\n        recent: 'Jelenlegi szín',\n        more: 'További színek',\n        background: 'Háttérszín',\n        foreground: 'Betűszín',\n        transparent: 'Átlátszó',\n        setTransparent: 'Átlászóság beállítása',\n        reset: 'Visszaállítás',\n        resetToDefault: 'Alaphelyzetbe állítás'\n      },\n      shortcut: {\n        shortcuts: 'Gyorsbillentyű',\n        close: 'Bezárás',\n        textFormatting: 'Szöveg formázása',\n        action: 'Művelet',\n        paragraphFormatting: 'Bekezdés formázása',\n        documentStyle: 'Dokumentumstílus',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Új bekezdés',\n        'undo': 'Visszavonás',\n        'redo': 'Újra',\n        'tab': 'Behúzás növelése',\n        'untab': 'Behúzás csökkentése',\n        'bold': 'Félkövérre állítás',\n        'italic': 'Dőltre állítás',\n        'underline': 'Aláhúzás',\n        'strikethrough': 'Áthúzás',\n        'removeFormat': 'Formázás törlése',\n        'justifyLeft': 'Balra igazítás',\n        'justifyCenter': 'Középre igazítás',\n        'justifyRight': 'Jobbra igazítás',\n        'justifyFull': 'Sorkizárt',\n        'insertUnorderedList': 'Számozatlan lista be/ki',\n        'insertOrderedList': 'Számozott lista be/ki',\n        'outdent': 'Jelenlegi bekezdés behúzásának megszüntetése',\n        'indent': 'Jelenlegi bekezdés behúzása',\n        'formatPara': 'Blokk formázása bekezdésként (P tag)',\n        'formatH1': 'Blokk formázása, mint Fejléc 1',\n        'formatH2': 'Blokk formázása, mint Fejléc 2',\n        'formatH3': 'Blokk formázása, mint Fejléc 3',\n        'formatH4': 'Blokk formázása, mint Fejléc 4',\n        'formatH5': 'Blokk formázása, mint Fejléc 5',\n        'formatH6': 'Blokk formázása, mint Fejléc 6',\n        'insertHorizontalRule': 'Vízszintes vonal beszúrása',\n        'linkDialog.show': 'Link párbeszédablak megjelenítése'\n      },\n      history: {\n        undo: 'Visszavonás',\n        redo: 'Újra'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-hu-HU.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-id-ID.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 24);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 24:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'id-ID': {\n      font: {\n        bold: 'Tebal',\n        italic: 'Miring',\n        underline: 'Garis bawah',\n        clear: 'Bersihkan gaya',\n        height: 'Jarak baris',\n        name: 'Jenis Tulisan',\n        strikethrough: 'Coret',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Ukuran font'\n      },\n      image: {\n        image: 'Gambar',\n        insert: 'Sisipkan gambar',\n        resizeFull: 'Ukuran penuh',\n        resizeHalf: 'Ukuran 50%',\n        resizeQuarter: 'Ukuran 25%',\n        floatLeft: 'Rata kiri',\n        floatRight: 'Rata kanan',\n        floatNone: 'Tanpa perataan',\n        shapeRounded: 'Bentuk: Membundar',\n        shapeCircle: 'Bentuk: Bundar',\n        shapeThumbnail: 'Bentuk: Thumbnail',\n        shapeNone: 'Bentuk: Tidak ada',\n        dragImageHere: 'Tarik gambar ke area ini',\n        dropImage: 'Letakkan gambar atau teks',\n        selectFromFiles: 'Pilih gambar dari berkas',\n        maximumFileSize: 'Ukuran maksimal berkas',\n        maximumFileSizeError: 'Ukuran maksimal berkas terlampaui.',\n        url: 'URL gambar',\n        remove: 'Hapus Gambar',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link video',\n        insert: 'Sisipkan video',\n        url: 'Tautan video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion atau Youku)'\n      },\n      link: {\n        link: 'Tautan',\n        insert: 'Tambah tautan',\n        unlink: 'Hapus tautan',\n        edit: 'Edit',\n        textToDisplay: 'Tampilan teks',\n        url: 'Tautan tujuan',\n        openInNewWindow: 'Buka di jendela baru'\n      },\n      table: {\n        table: 'Tabel',\n        addRowAbove: 'Tambahkan baris ke atas',\n        addRowBelow: 'Tambahkan baris ke bawah',\n        addColLeft: 'Tambahkan kolom ke kiri',\n        addColRight: 'Tambahkan kolom ke kanan',\n        delRow: 'Hapus baris',\n        delCol: 'Hapus kolom',\n        delTable: 'Hapus tabel'\n      },\n      hr: {\n        insert: 'Masukkan garis horizontal'\n      },\n      style: {\n        style: 'Gaya',\n        p: 'p',\n        blockquote: 'Kutipan',\n        pre: 'Kode',\n        h1: 'Heading 1',\n        h2: 'Heading 2',\n        h3: 'Heading 3',\n        h4: 'Heading 4',\n        h5: 'Heading 5',\n        h6: 'Heading 6'\n      },\n      lists: {\n        unordered: 'Pencacahan',\n        ordered: 'Penomoran'\n      },\n      options: {\n        help: 'Bantuan',\n        fullscreen: 'Layar penuh',\n        codeview: 'Kode HTML'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Outdent',\n        indent: 'Indent',\n        left: 'Rata kiri',\n        center: 'Rata tengah',\n        right: 'Rata kanan',\n        justify: 'Rata kanan kiri'\n      },\n      color: {\n        recent: 'Warna sekarang',\n        more: 'Selengkapnya',\n        background: 'Warna latar',\n        foreground: 'Warna font',\n        transparent: 'Transparan',\n        setTransparent: 'Atur transparansi',\n        reset: 'Atur ulang',\n        resetToDefault: 'Kembalikan kesemula'\n      },\n      shortcut: {\n        shortcuts: 'Jalan pintas',\n        close: 'Tutup',\n        textFormatting: 'Format teks',\n        action: 'Aksi',\n        paragraphFormatting: 'Format paragraf',\n        documentStyle: 'Gaya dokumen',\n        extraKeys: 'Shortcut tambahan'\n      },\n      help: {\n        'insertParagraph': 'Tambahkan paragraf',\n        'undo': 'Urungkan perintah terakhir',\n        'redo': 'Kembalikan perintah terakhir',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Mengaktifkan gaya tebal',\n        'italic': 'Mengaktifkan gaya italic',\n        'underline': 'Mengaktifkan gaya underline',\n        'strikethrough': 'Mengaktifkan gaya strikethrough',\n        'removeFormat': 'Hapus semua gaya',\n        'justifyLeft': 'Atur rata kiri',\n        'justifyCenter': 'Atur rata tengah',\n        'justifyRight': 'Atur rata kanan',\n        'justifyFull': 'Atur rata kiri-kanan',\n        'insertUnorderedList': 'Nyalakan urutan tanpa nomor',\n        'insertOrderedList': 'Nyalakan urutan bernomor',\n        'outdent': 'Outdent di paragraf terpilih',\n        'indent': 'Indent di paragraf terpilih',\n        'formatPara': 'Ubah format gaya tulisan terpilih menjadi paragraf',\n        'formatH1': 'Ubah format gaya tulisan terpilih menjadi Heading 1',\n        'formatH2': 'Ubah format gaya tulisan terpilih menjadi Heading 2',\n        'formatH3': 'Ubah format gaya tulisan terpilih menjadi Heading 3',\n        'formatH4': 'Ubah format gaya tulisan terpilih menjadi Heading 4',\n        'formatH5': 'Ubah format gaya tulisan terpilih menjadi Heading 5',\n        'formatH6': 'Ubah format gaya tulisan terpilih menjadi Heading 6',\n        'insertHorizontalRule': 'Masukkan garis horizontal',\n        'linkDialog.show': 'Tampilkan Link Dialog'\n      },\n      history: {\n        undo: 'Kembali',\n        redo: 'Ulang'\n      },\n      specialChar: {\n        specialChar: 'KARAKTER KHUSUS',\n        select: 'Pilih karakter khusus'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-id-ID.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-it-IT.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 25);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 25:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'it-IT': {\n      font: {\n        bold: 'Testo in grassetto',\n        italic: 'Testo in corsivo',\n        underline: 'Testo sottolineato',\n        clear: 'Elimina la formattazione del testo',\n        height: 'Altezza della linea di testo',\n        name: 'Famiglia Font',\n        strikethrough: 'Testo barrato',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Dimensione del carattere'\n      },\n      image: {\n        image: 'Immagine',\n        insert: 'Inserisci Immagine',\n        resizeFull: 'Dimensioni originali',\n        resizeHalf: 'Ridimensiona al 50%',\n        resizeQuarter: 'Ridimensiona al 25%',\n        floatLeft: 'Posiziona a sinistra',\n        floatRight: 'Posiziona a destra',\n        floatNone: 'Nessun posizionamento',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Trascina qui un\\'immagine',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Scegli dai Documenti',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL dell\\'immagine',\n        remove: 'Rimuovi immagine',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Collegamento ad un Video',\n        insert: 'Inserisci Video',\n        url: 'URL del Video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Collegamento',\n        insert: 'Inserisci Collegamento',\n        unlink: 'Elimina collegamento',\n        edit: 'Modifica collegamento',\n        textToDisplay: 'Testo del collegamento',\n        url: 'URL del collegamento',\n        openInNewWindow: 'Apri in una nuova finestra'\n      },\n      table: {\n        table: 'Tabella',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Inserisce una linea di separazione'\n      },\n      style: {\n        style: 'Stili',\n        p: 'pe',\n        blockquote: 'Citazione',\n        pre: 'Codice',\n        h1: 'Titolo 1',\n        h2: 'Titolo 2',\n        h3: 'Titolo 3',\n        h4: 'Titolo 4',\n        h5: 'Titolo 5',\n        h6: 'Titolo 6'\n      },\n      lists: {\n        unordered: 'Elenco non ordinato',\n        ordered: 'Elenco ordinato'\n      },\n      options: {\n        help: 'Aiuto',\n        fullscreen: 'Modalità a tutto schermo',\n        codeview: 'Visualizza codice'\n      },\n      paragraph: {\n        paragraph: 'Paragrafo',\n        outdent: 'Diminuisce il livello di rientro',\n        indent: 'Aumenta il livello di rientro',\n        left: 'Allinea a sinistra',\n        center: 'Centra',\n        right: 'Allinea a destra',\n        justify: 'Giustifica (allinea a destra e sinistra)'\n      },\n      color: {\n        recent: 'Ultimo colore utilizzato',\n        more: 'Altri colori',\n        background: 'Colore di sfondo',\n        foreground: 'Colore',\n        transparent: 'Trasparente',\n        setTransparent: 'Trasparente',\n        reset: 'Reimposta',\n        resetToDefault: 'Reimposta i colori'\n      },\n      shortcut: {\n        shortcuts: 'Scorciatoie da tastiera',\n        close: 'Chiudi',\n        textFormatting: 'Formattazione testo',\n        action: 'Azioni',\n        paragraphFormatting: 'Formattazione paragrafo',\n        documentStyle: 'Stili',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Annulla',\n        redo: 'Ripristina'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-it-IT.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ja-JP.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 26);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 26:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'ja-JP': {\n      font: {\n        bold: '太字',\n        italic: '斜体',\n        underline: '下線',\n        clear: 'クリア',\n        height: '文字高',\n        name: 'フォント',\n        strikethrough: '取り消し線',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: '大きさ'\n      },\n      image: {\n        image: '画像',\n        insert: '画像挿入',\n        resizeFull: '最大化',\n        resizeHalf: '1/2',\n        resizeQuarter: '1/4',\n        floatLeft: '左寄せ',\n        floatRight: '右寄せ',\n        floatNone: '寄せ解除',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'ここに画像をドラッグしてください',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: '画像ファイルを選ぶ',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URLから画像を挿入する',\n        remove: '画像を削除する',\n        original: 'Original'\n      },\n      video: {\n        video: '動画',\n        videoLink: '動画リンク',\n        insert: '動画挿入',\n        url: '動画のURL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku)'\n      },\n      link: {\n        link: 'リンク',\n        insert: 'リンク挿入',\n        unlink: 'リンク解除',\n        edit: '編集',\n        textToDisplay: 'リンク文字列',\n        url: 'URLを入力してください',\n        openInNewWindow: '新しいウィンドウで開く'\n      },\n      table: {\n        table: 'テーブル',\n        addRowAbove: '行を上に追加',\n        addRowBelow: '行を下に追加',\n        addColLeft: '列を左に追加',\n        addColRight: '列を右に追加',\n        delRow: '行を削除',\n        delCol: '列を削除',\n        delTable: 'テーブルを削除'\n      },\n      hr: {\n        insert: '水平線の挿入'\n      },\n      style: {\n        style: 'スタイル',\n        p: '標準',\n        blockquote: '引用',\n        pre: 'コード',\n        h1: '見出し1',\n        h2: '見出し2',\n        h3: '見出し3',\n        h4: '見出し4',\n        h5: '見出し5',\n        h6: '見出し6'\n      },\n      lists: {\n        unordered: '通常リスト',\n        ordered: '番号リスト'\n      },\n      options: {\n        help: 'ヘルプ',\n        fullscreen: 'フルスクリーン',\n        codeview: 'コード表示'\n      },\n      paragraph: {\n        paragraph: '文章',\n        outdent: '字上げ',\n        indent: '字下げ',\n        left: '左寄せ',\n        center: '中央寄せ',\n        right: '右寄せ',\n        justify: '均等割付'\n      },\n      color: {\n        recent: '現在の色',\n        more: 'もっと見る',\n        background: '背景色',\n        foreground: '文字色',\n        transparent: '透明',\n        setTransparent: '透明にする',\n        reset: '標準',\n        resetToDefault: '標準に戻す'\n      },\n      shortcut: {\n        shortcuts: 'ショートカット',\n        close: '閉じる',\n        textFormatting: '文字フォーマット',\n        action: 'アクション',\n        paragraphFormatting: '文章フォーマット',\n        documentStyle: 'ドキュメント形式',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': '改行挿入',\n        'undo': '一旦、行った操作を戻す',\n        'redo': '最後のコマンドをやり直す',\n        'tab': 'Tab',\n        'untab': 'タブ戻し',\n        'bold': '太文字',\n        'italic': '斜体',\n        'underline': '下線',\n        'strikethrough': '取り消し線',\n        'removeFormat': '装飾を戻す',\n        'justifyLeft': '左寄せ',\n        'justifyCenter': '真ん中寄せ',\n        'justifyRight': '右寄せ',\n        'justifyFull': 'すべてを整列',\n        'insertUnorderedList': '行頭に●を挿入',\n        'insertOrderedList': '行頭に番号を挿入',\n        'outdent': '字下げを戻す（アウトデント）',\n        'indent': '字下げする（インデント）',\n        'formatPara': '段落(P tag)指定',\n        'formatH1': 'H1指定',\n        'formatH2': 'H2指定',\n        'formatH3': 'H3指定',\n        'formatH4': 'H4指定',\n        'formatH5': 'H5指定',\n        'formatH6': 'H6指定',\n        'insertHorizontalRule': '&lt;hr /&gt;を挿入',\n        'linkDialog.show': 'リンク挿入'\n      },\n      history: {\n        undo: '元に戻す',\n        redo: 'やり直す'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ja-JP.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ko-KR.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 27);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 27:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'ko-KR': {\n      font: {\n        bold: '굵게',\n        italic: '기울임꼴',\n        underline: '밑줄',\n        clear: '서식 지우기',\n        height: '줄 간격',\n        name: '글꼴',\n        superscript: '위 첨자',\n        subscript: '아래 첨자',\n        strikethrough: '취소선',\n        size: '글자 크기'\n      },\n      image: {\n        image: '그림',\n        insert: '그림 삽입',\n        resizeFull: '100% 크기로 변경',\n        resizeHalf: '50% 크기로 변경',\n        resizeQuarter: '25% 크기로 변경',\n        resizeNone: '원본 크기',\n        floatLeft: '왼쪽 정렬',\n        floatRight: '오른쪽 정렬',\n        floatNone: '정렬하지 않음',\n        shapeRounded: '스타일: 둥근 모서리',\n        shapeCircle: '스타일: 원형',\n        shapeThumbnail: '스타일: 액자',\n        shapeNone: '스타일: 없음',\n        dragImageHere: '텍스트 혹은 사진을 이곳으로 끌어오세요',\n        dropImage: '텍스트 혹은 사진을 내려놓으세요',\n        selectFromFiles: '파일 선택',\n        maximumFileSize: '최대 파일 크기',\n        maximumFileSizeError: '최대 파일 크기를 초과했습니다.',\n        url: '사진 URL',\n        remove: '사진 삭제',\n        original: '원본'\n      },\n      video: {\n        video: '동영상',\n        videoLink: '동영상 링크',\n        insert: '동영상 삽입',\n        url: '동영상 URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)'\n      },\n      link: {\n        link: '링크',\n        insert: '링크 삽입',\n        unlink: '링크 삭제',\n        edit: '수정',\n        textToDisplay: '링크에 표시할 내용',\n        url: '이동할 URL',\n        openInNewWindow: '새창으로 열기'\n      },\n      table: {\n        table: '표',\n        addRowAbove: '위에 행 삽입',\n        addRowBelow: '아래에 행 삽입',\n        addColLeft: '왼쪽에 열 삽입',\n        addColRight: '오른쪽에 열 삽입',\n        delRow: '행 지우기',\n        delCol: '열 지우기',\n        delTable: '표 삭제'\n      },\n      hr: {\n        insert: '구분선 삽입'\n      },\n      style: {\n        style: '스타일',\n        p: '본문',\n        blockquote: '인용구',\n        pre: '코드',\n        h1: '제목 1',\n        h2: '제목 2',\n        h3: '제목 3',\n        h4: '제목 4',\n        h5: '제목 5',\n        h6: '제목 6'\n      },\n      lists: {\n        unordered: '글머리 기호',\n        ordered: '번호 매기기'\n      },\n      options: {\n        help: '도움말',\n        fullscreen: '전체 화면',\n        codeview: '코드 보기'\n      },\n      paragraph: {\n        paragraph: '문단 정렬',\n        outdent: '내어쓰기',\n        indent: '들여쓰기',\n        left: '왼쪽 정렬',\n        center: '가운데 정렬',\n        right: '오른쪽 정렬',\n        justify: '양쪽 정렬'\n      },\n      color: {\n        recent: '마지막으로 사용한 색',\n        more: '다른 색 선택',\n        background: '배경색',\n        foreground: '글자색',\n        transparent: '투명',\n        setTransparent: '투명으로 설정',\n        reset: '취소',\n        resetToDefault: '기본값으로 설정',\n        cpSelect: '고르다'\n      },\n      shortcut: {\n        shortcuts: '키보드 단축키',\n        close: '닫기',\n        textFormatting: '글자 스타일 적용',\n        action: '기능',\n        paragraphFormatting: '문단 스타일 적용',\n        documentStyle: '문서 스타일 적용',\n        extraKeys: '추가 키'\n      },\n      help: {\n        'insertParagraph': '문단 삽입',\n        'undo': '마지막 명령 취소',\n        'redo': '마지막 명령 재실행',\n        'tab': '탭',\n        'untab': '탭 제거',\n        'bold': '굵은 글자로 설정',\n        'italic': '기울임꼴 글자로 설정',\n        'underline': '밑줄 글자로 설정',\n        'strikethrough': '취소선 글자로 설정',\n        'removeFormat': '서식 삭제',\n        'justifyLeft': '왼쪽 정렬하기',\n        'justifyCenter': '가운데 정렬하기',\n        'justifyRight': '오른쪽 정렬하기',\n        'justifyFull': '좌우채움 정렬하기',\n        'insertUnorderedList': '글머리 기호 켜고 끄기',\n        'insertOrderedList': '번호 매기기 켜고 끄기',\n        'outdent': '현재 문단 내어쓰기',\n        'indent': '현재 문단 들여쓰기',\n        'formatPara': '현재 블록의 포맷을 문단(P)으로 변경',\n        'formatH1': '현재 블록의 포맷을 제목1(H1)로 변경',\n        'formatH2': '현재 블록의 포맷을 제목2(H2)로 변경',\n        'formatH3': '현재 블록의 포맷을 제목3(H3)로 변경',\n        'formatH4': '현재 블록의 포맷을 제목4(H4)로 변경',\n        'formatH5': '현재 블록의 포맷을 제목5(H5)로 변경',\n        'formatH6': '현재 블록의 포맷을 제목6(H6)로 변경',\n        'insertHorizontalRule': '구분선 삽입',\n        'linkDialog.show': '링크 대화상자 열기'\n      },\n      history: {\n        undo: '실행 취소',\n        redo: '재실행'\n      },\n      specialChar: {\n        specialChar: '특수문자',\n        select: '특수문자를 선택하세요'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ko-KR.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-lt-LT.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 28);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 28:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'lt-LT': {\n      font: {\n        bold: 'Paryškintas',\n        italic: 'Kursyvas',\n        underline: 'Pabrėžtas',\n        clear: 'Be formatavimo',\n        height: 'Eilutės aukštis',\n        name: 'Šrifto pavadinimas',\n        strikethrough: 'Perbrauktas',\n        superscript: 'Viršutinis',\n        subscript: 'Indeksas',\n        size: 'Šrifto dydis'\n      },\n      image: {\n        image: 'Paveikslėlis',\n        insert: 'Įterpti paveikslėlį',\n        resizeFull: 'Pilnas dydis',\n        resizeHalf: 'Sumažinti dydį 50%',\n        resizeQuarter: 'Sumažinti dydį 25%',\n        floatLeft: 'Kairinis lygiavimas',\n        floatRight: 'Dešininis lygiavimas',\n        floatNone: 'Jokio lygiavimo',\n        shapeRounded: 'Forma: apvalūs kraštai',\n        shapeCircle: 'Forma: apskritimas',\n        shapeThumbnail: 'Forma: miniatiūra',\n        shapeNone: 'Forma: jokia',\n        dragImageHere: 'Vilkite paveikslėlį čia',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Pasirinkite failą',\n        maximumFileSize: 'Maskimalus failo dydis',\n        maximumFileSizeError: 'Maskimalus failo dydis viršytas!',\n        url: 'Paveikslėlio URL adresas',\n        remove: 'Ištrinti paveikslėlį',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Insert Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Nuoroda',\n        insert: 'Įterpti nuorodą',\n        unlink: 'Pašalinti nuorodą',\n        edit: 'Redaguoti',\n        textToDisplay: 'Rodomas tekstas',\n        url: 'Koks URL adresas yra susietas?',\n        openInNewWindow: 'Atidaryti naujame lange'\n      },\n      table: {\n        table: 'Lentelė',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Įterpti horizontalią liniją'\n      },\n      style: {\n        style: 'Stilius',\n        p: 'pus',\n        blockquote: 'Citata',\n        pre: 'Kodas',\n        h1: 'Antraštė 1',\n        h2: 'Antraštė 2',\n        h3: 'Antraštė 3',\n        h4: 'Antraštė 4',\n        h5: 'Antraštė 5',\n        h6: 'Antraštė 6'\n      },\n      lists: {\n        unordered: 'Suženklintasis sąrašas',\n        ordered: 'Sunumeruotas sąrašas'\n      },\n      options: {\n        help: 'Pagalba',\n        fullscreen: 'Viso ekrano režimas',\n        codeview: 'HTML kodo peržiūra'\n      },\n      paragraph: {\n        paragraph: 'Pastraipa',\n        outdent: 'Sumažinti įtrauką',\n        indent: 'Padidinti įtrauką',\n        left: 'Kairinė lygiuotė',\n        center: 'Centrinė lygiuotė',\n        right: 'Dešininė lygiuotė',\n        justify: 'Abipusis išlyginimas'\n      },\n      color: {\n        recent: 'Paskutinė naudota spalva',\n        more: 'Daugiau spalvų',\n        background: 'Fono spalva',\n        foreground: 'Šrifto spalva',\n        transparent: 'Permatoma',\n        setTransparent: 'Nustatyti skaidrumo intensyvumą',\n        reset: 'Atkurti',\n        resetToDefault: 'Atstatyti numatytąją spalvą'\n      },\n      shortcut: {\n        shortcuts: 'Spartieji klavišai',\n        close: 'Uždaryti',\n        textFormatting: 'Teksto formatavimas',\n        action: 'Veiksmas',\n        paragraphFormatting: 'Pastraipos formatavimas',\n        documentStyle: 'Dokumento stilius',\n        extraKeys: 'Papildomi klavišų deriniai'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Anuliuoti veiksmą',\n        redo: 'Perdaryti veiksmą'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-lt-LT.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-lt-LV.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 29);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 29:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'lv-LV': {\n      font: {\n        bold: 'Treknraksts',\n        italic: 'Kursīvs',\n        underline: 'Pasvītrots',\n        clear: 'Noņemt formatējumu',\n        height: 'Līnijas augstums',\n        name: 'Fonts',\n        strikethrough: 'Nosvītrots',\n        superscript: 'Augšraksts',\n        subscript: 'Apakšraksts',\n        size: 'Fonta lielums'\n      },\n      image: {\n        image: 'Attēls',\n        insert: 'Ievietot attēlu',\n        resizeFull: 'Pilns izmērts',\n        resizeHalf: 'Samazināt 50%',\n        resizeQuarter: 'Samazināt 25%',\n        floatLeft: 'Līdzināt pa kreisi',\n        floatRight: 'Līdzināt pa labi',\n        floatNone: 'Nelīdzināt',\n        shapeRounded: 'Forma: apaļām malām',\n        shapeCircle: 'Forma: aplis',\n        shapeThumbnail: 'Forma: rāmītis',\n        shapeNone: 'Forma: orģināla',\n        dragImageHere: 'Ievēlciet attēlu šeit',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Izvēlēties failu',\n        maximumFileSize: 'Maksimālais faila izmērs',\n        maximumFileSizeError: 'Faila izmērs pārāk liels!',\n        url: 'Attēla URL',\n        remove: 'Dzēst attēlu',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Insert Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Saite',\n        insert: 'Ievietot saiti',\n        unlink: 'Noņemt saiti',\n        edit: 'Rediģēt',\n        textToDisplay: 'Saites saturs',\n        url: 'Koks URL adresas yra susietas?',\n        openInNewWindow: 'Atvērt jaunā logā'\n      },\n      table: {\n        table: 'Tabula',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Ievietot līniju'\n      },\n      style: {\n        style: 'Stils',\n        p: 'Parasts',\n        blockquote: 'Citāts',\n        pre: 'Kods',\n        h1: 'Virsraksts h1',\n        h2: 'Virsraksts h2',\n        h3: 'Virsraksts h3',\n        h4: 'Virsraksts h4',\n        h5: 'Virsraksts h5',\n        h6: 'Virsraksts h6'\n      },\n      lists: {\n        unordered: 'Nenumurēts saraksts',\n        ordered: 'Numurēts saraksts'\n      },\n      options: {\n        help: 'Palīdzība',\n        fullscreen: 'Pa visu ekrānu',\n        codeview: 'HTML kods'\n      },\n      paragraph: {\n        paragraph: 'Paragrāfs',\n        outdent: 'Samazināt atkāpi',\n        indent: 'Palielināt atkāpi',\n        left: 'Līdzināt pa kreisi',\n        center: 'Centrēt',\n        right: 'Līdzināt pa labi',\n        justify: 'Līdzināt gar abām malām'\n      },\n      color: {\n        recent: 'Nesen izmantotās',\n        more: 'Citas krāsas',\n        background: 'Fona krāsa',\n        foreground: 'Fonta krāsa',\n        transparent: 'Caurspīdīgs',\n        setTransparent: 'Iestatīt caurspīdīgumu',\n        reset: 'Atjaunot',\n        resetToDefault: 'Atjaunot noklusējumu'\n      },\n      shortcut: {\n        shortcuts: 'Saīsnes',\n        close: 'Aizvērt',\n        textFormatting: 'Teksta formatēšana',\n        action: 'Darbība',\n        paragraphFormatting: 'Paragrāfa formatēšana',\n        documentStyle: 'Dokumenta stils',\n        extraKeys: 'Citas taustiņu kombinācijas'\n      },\n      help: {\n        insertParagraph: 'Ievietot Paragrāfu',\n        undo: 'Atcelt iepriekšējo darbību',\n        redo: 'Atkārtot atcelto darbību',\n        tab: 'Atkāpe',\n        untab: 'Samazināt atkāpi',\n        bold: 'Pārvērst tekstu treknrakstā',\n        italic: 'Pārvērst tekstu slīprakstā (kursīvā)',\n        underline: 'Pasvītrot tekstu',\n        strikethrough: 'Nosvītrot tekstu',\n        removeFormat: 'Notīrīt stilu no teksta',\n        justifyLeft: 'Līdzīnāt saturu pa kreisi',\n        justifyCenter: 'Centrēt saturu',\n        justifyRight: 'Līdzīnāt saturu pa labi',\n        justifyFull: 'Izlīdzināt saturu gar abām malām',\n        insertUnorderedList: 'Ievietot nenumurētu sarakstu',\n        insertOrderedList: 'Ievietot numurētu sarakstu',\n        outdent: 'Samazināt/noņemt atkāpi paragrāfam',\n        indent: 'Uzlikt atkāpi paragrāfam',\n        formatPara: 'Mainīt bloka tipu uz (p) Paragrāfu',\n        formatH1: 'Mainīt bloka tipu uz virsrakstu H1',\n        formatH2: 'Mainīt bloka tipu uz virsrakstu H2',\n        formatH3: 'Mainīt bloka tipu uz virsrakstu H3',\n        formatH4: 'Mainīt bloka tipu uz virsrakstu H4',\n        formatH5: 'Mainīt bloka tipu uz virsrakstu H5',\n        formatH6: 'Mainīt bloka tipu uz virsrakstu H6',\n        insertHorizontalRule: 'Ievietot horizontālu līniju',\n        'linkDialog.show': 'Parādīt saites logu'\n      },\n      history: {\n        undo: 'Atsauks (undo)',\n        redo: 'Atkārtot (redo)'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-lt-LV.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-mn-MN.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 30);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 30:\n/***/ (function(module, exports) {\n\n// Starsoft Mongolia LLC Temuujin Ariunbold\n(function ($) {\n  $.extend($.summernote.lang, {\n    'mn-MN': {\n      font: {\n        bold: 'Тод',\n        italic: 'Налуу',\n        underline: 'Доогуур зураас',\n        clear: 'Цэвэрлэх',\n        height: 'Өндөр',\n        name: 'Фонт',\n        superscript: 'Дээд илтгэгч',\n        subscript: 'Доод илтгэгч',\n        strikethrough: 'Дарах',\n        size: 'Хэмжээ'\n      },\n      image: {\n        image: 'Зураг',\n        insert: 'Оруулах',\n        resizeFull: 'Хэмжээ бүтэн',\n        resizeHalf: 'Хэмжээ 1/2',\n        resizeQuarter: 'Хэмжээ 1/4',\n        floatLeft: 'Зүүн талд байрлуулах',\n        floatRight: 'Баруун талд байрлуулах',\n        floatNone: 'Анхдагч байрлалд аваачих',\n        shapeRounded: 'Хүрээ: Дугуй',\n        shapeCircle: 'Хүрээ: Тойрог',\n        shapeThumbnail: 'Хүрээ: Хураангуй',\n        shapeNone: 'Хүрээгүй',\n        dragImageHere: 'Зургийг энд чирч авчирна уу',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Файлуудаас сонгоно уу',\n        maximumFileSize: 'Файлын дээд хэмжээ',\n        maximumFileSizeError: 'Файлын дээд хэмжээ хэтэрсэн',\n        url: 'Зургийн URL',\n        remove: 'Зургийг устгах',\n        original: 'Original'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Видео холбоос',\n        insert: 'Видео оруулах',\n        url: 'Видео URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion болон Youku)'\n      },\n      link: {\n        link: 'Холбоос',\n        insert: 'Холбоос оруулах',\n        unlink: 'Холбоос арилгах',\n        edit: 'Засварлах',\n        textToDisplay: 'Харуулах бичвэр',\n        url: 'Энэ холбоос хаашаа очих вэ?',\n        openInNewWindow: 'Шинэ цонхонд нээх'\n      },\n      table: {\n        table: 'Хүснэгт',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Хэвтээ шугам оруулах'\n      },\n      style: {\n        style: 'Хэв маяг',\n        p: 'p',\n        blockquote: 'Иш татах',\n        pre: 'Эх сурвалж',\n        h1: 'Гарчиг 1',\n        h2: 'Гарчиг 2',\n        h3: 'Гарчиг 3',\n        h4: 'Гарчиг 4',\n        h5: 'Гарчиг 5',\n        h6: 'Гарчиг 6'\n      },\n      lists: {\n        unordered: 'Эрэмбэлэгдээгүй',\n        ordered: 'Эрэмбэлэгдсэн'\n      },\n      options: {\n        help: 'Тусламж',\n        fullscreen: 'Дэлгэцийг дүүргэх',\n        codeview: 'HTML-Code харуулах'\n      },\n      paragraph: {\n        paragraph: 'Хэсэг',\n        outdent: 'Догол мөр хасах',\n        indent: 'Догол мөр нэмэх',\n        left: 'Зүүн тийш эгнүүлэх',\n        center: 'Төвд эгнүүлэх',\n        right: 'Баруун тийш эгнүүлэх',\n        justify: 'Мөрийг тэгшлэх'\n      },\n      color: {\n        recent: 'Сүүлд хэрэглэсэн өнгө',\n        more: 'Өөр өнгөнүүд',\n        background: 'Дэвсгэр өнгө',\n        foreground: 'Үсгийн өнгө',\n        transparent: 'Тунгалаг',\n        setTransparent: 'Тунгалаг болгох',\n        reset: 'Анхдагч өнгөөр тохируулах',\n        resetToDefault: 'Хэвд нь оруулах'\n      },\n      shortcut: {\n        shortcuts: 'Богино холбоос',\n        close: 'Хаалт',\n        textFormatting: 'Бичвэрийг хэлбэржүүлэх',\n        action: 'Үйлдэл',\n        paragraphFormatting: 'Догол мөрийг хэлбэржүүлэх',\n        documentStyle: 'Бичиг баримтын хэв загвар',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Буцаах',\n        redo: 'Дахин хийх'\n      },\n      specialChar: {\n        specialChar: 'Тусгай тэмдэгт',\n        select: 'Тусгай тэмдэгт сонгох'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-mn-MN.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-nb-NO.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 31);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 31:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'nb-NO': {\n      font: {\n        bold: 'Fet',\n        italic: 'Kursiv',\n        underline: 'Understrek',\n        clear: 'Fjern formatering',\n        height: 'Linjehøyde',\n        name: 'Skrifttype',\n        strikethrough: 'Gjennomstrek',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Skriftstørrelse'\n      },\n      image: {\n        image: 'Bilde',\n        insert: 'Sett inn bilde',\n        resizeFull: 'Sett full størrelse',\n        resizeHalf: 'Sett halv størrelse',\n        resizeQuarter: 'Sett kvart størrelse',\n        floatLeft: 'Flyt til venstre',\n        floatRight: 'Flyt til høyre',\n        floatNone: 'Fjern flyt',\n        shapeRounded: 'Form: Rundet',\n        shapeCircle: 'Form: Sirkel',\n        shapeThumbnail: 'Form: Miniatyr',\n        shapeNone: 'Form: Ingen',\n        dragImageHere: 'Dra et bilde hit',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Velg fra filer',\n        maximumFileSize: 'Max filstørrelse',\n        maximumFileSizeError: 'Maks filstørrelse overskredet.',\n        url: 'Bilde-URL',\n        remove: 'Fjern bilde',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Videolenke',\n        insert: 'Sett inn video',\n        url: 'Video-URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Lenke',\n        insert: 'Sett inn lenke',\n        unlink: 'Fjern lenke',\n        edit: 'Rediger',\n        textToDisplay: 'Visningstekst',\n        url: 'Til hvilken URL skal denne lenken peke?',\n        openInNewWindow: 'Åpne i nytt vindu'\n      },\n      table: {\n        table: 'Tabell',\n        addRowAbove: 'Legg til rad over',\n        addRowBelow: 'Legg til rad under',\n        addColLeft: 'Legg til kolonne på venstre side',\n        addColRight: 'Legg til kolonne på høyre side',\n        delRow: 'Slett rad',\n        delCol: 'Slett kolonne',\n        delTable: 'Slett tabell'\n      },\n      hr: {\n        insert: 'Sett inn horisontal linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'Paragraf',\n        blockquote: 'Sitat',\n        pre: 'Kode',\n        h1: 'Overskrift 1',\n        h2: 'Overskrift 2',\n        h3: 'Overskrift 3',\n        h4: 'Overskrift 4',\n        h5: 'Overskrift 5',\n        h6: 'Overskrift 6'\n      },\n      lists: {\n        unordered: 'Punktliste',\n        ordered: 'Nummerert liste'\n      },\n      options: {\n        help: 'Hjelp',\n        fullscreen: 'Fullskjerm',\n        codeview: 'HTML-visning'\n      },\n      paragraph: {\n        paragraph: 'Avsnitt',\n        outdent: 'Tilbakerykk',\n        indent: 'Innrykk',\n        left: 'Venstrejustert',\n        center: 'Midtstilt',\n        right: 'Høyrejustert',\n        justify: 'Blokkjustert'\n      },\n      color: {\n        recent: 'Nylig valgt farge',\n        more: 'Flere farger',\n        background: 'Bakgrunnsfarge',\n        foreground: 'Skriftfarge',\n        transparent: 'Gjennomsiktig',\n        setTransparent: 'Sett gjennomsiktig',\n        reset: 'Nullstill',\n        resetToDefault: 'Nullstill til standard'\n      },\n      shortcut: {\n        shortcuts: 'Hurtigtaster',\n        close: 'Lukk',\n        textFormatting: 'Tekstformatering',\n        action: 'Handling',\n        paragraphFormatting: 'Avsnittsformatering',\n        documentStyle: 'Dokumentstil'\n      },\n      help: {\n        'insertParagraph': 'Sett inn avsnitt',\n        'undo': 'Angre siste handling',\n        'redo': 'Gjør om siste handling',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Angi en fet stil',\n        'italic': 'Angi en kursiv stil',\n        'underline': 'Sett en understreket stil',\n        'strikethrough': 'Sett en gjennomgående sti',\n        'removeFormat': 'Tøm formattering',\n        'justifyLeft': 'Angi venstrejustering',\n        'justifyCenter': 'Angi sentrert justering',\n        'justifyRight': 'Angi høyre justering',\n        'justifyFull': 'Angi full justering',\n        'insertUnorderedList': 'Bytt uordnet liste',\n        'insertOrderedList': 'Bytt sortert liste',\n        'outdent': 'Utrykk på valgt avsnitt',\n        'indent': 'Innrykk på valgt avsnitt',\n        'formatPara': 'Endre gjeldende blokkformat til et avsnitt (P-kode)',\n        'formatH1': 'Endre gjeldende blokkformat til H1',\n        'formatH2': 'Endre gjeldende blokkformat til H2',\n        'formatH3': 'Endre gjeldende blokkformat til H3',\n        'formatH4': 'Endre gjeldende blokkformat til H4',\n        'formatH5': 'Endre gjeldende blokkformat til H5',\n        'formatH6': 'Endre gjeldende blokkformat til H6',\n        'insertHorizontalRule': 'Sett inn horisontal deler',\n        'linkDialog.show': 'Vis koblingsdialog'\n      },\n      history: {\n        undo: 'Angre',\n        redo: 'Gjør om'\n      },\n      specialChar: {\n        specialChar: 'SPESIELLE TEGN',\n        select: 'Velg spesielle tegn'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-nb-NO.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-nl-NL.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 32);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 32:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'nl-NL': {\n      font: {\n        bold: 'Vet',\n        italic: 'Cursief',\n        underline: 'Onderstrepen',\n        clear: 'Stijl verwijderen',\n        height: 'Regelhoogte',\n        name: 'Lettertype',\n        strikethrough: 'Doorhalen',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Tekstgrootte'\n      },\n      image: {\n        image: 'Afbeelding',\n        insert: 'Afbeelding invoegen',\n        resizeFull: 'Volledige breedte',\n        resizeHalf: 'Halve breedte',\n        resizeQuarter: 'Kwart breedte',\n        floatLeft: 'Links uitlijnen',\n        floatRight: 'Rechts uitlijnen',\n        floatNone: 'Geen uitlijning',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Sleep hier een afbeelding naar toe',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Selecteer een bestand',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL van de afbeelding',\n        remove: 'Verwijder afbeelding',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video link',\n        insert: 'Video invoegen',\n        url: 'URL van de video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion of Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link invoegen',\n        unlink: 'Link verwijderen',\n        edit: 'Wijzigen',\n        textToDisplay: 'Tekst van link',\n        url: 'Naar welke URL moet deze link verwijzen?',\n        openInNewWindow: 'Open in nieuw venster'\n      },\n      table: {\n        table: 'Tabel',\n        addRowAbove: 'Rij hierboven invoegen',\n        addRowBelow: 'Rij hieronder invoegen',\n        addColLeft: 'Kolom links toevoegen',\n        addColRight: 'Kolom rechts toevoegen',\n        delRow: 'Verwijder rij',\n        delCol: 'Verwijder kolom',\n        delTable: 'Verwijder tabel'\n      },\n      hr: {\n        insert: 'Horizontale lijn invoegen'\n      },\n      style: {\n        style: 'Stijl',\n        p: 'Normaal',\n        blockquote: 'Quote',\n        pre: 'Code',\n        h1: 'Kop 1',\n        h2: 'Kop 2',\n        h3: 'Kop 3',\n        h4: 'Kop 4',\n        h5: 'Kop 5',\n        h6: 'Kop 6'\n      },\n      lists: {\n        unordered: 'Ongeordende lijst',\n        ordered: 'Geordende lijst'\n      },\n      options: {\n        help: 'Help',\n        fullscreen: 'Volledig scherm',\n        codeview: 'Bekijk Code'\n      },\n      paragraph: {\n        paragraph: 'Paragraaf',\n        outdent: 'Inspringen verkleinen',\n        indent: 'Inspringen vergroten',\n        left: 'Links uitlijnen',\n        center: 'Centreren',\n        right: 'Rechts uitlijnen',\n        justify: 'Uitvullen'\n      },\n      color: {\n        recent: 'Recente kleur',\n        more: 'Meer kleuren',\n        background: 'Achtergrond kleur',\n        foreground: 'Tekst kleur',\n        transparent: 'Transparant',\n        setTransparent: 'Transparant',\n        reset: 'Standaard',\n        resetToDefault: 'Standaard kleur'\n      },\n      shortcut: {\n        shortcuts: 'Toetsencombinaties',\n        close: 'sluiten',\n        textFormatting: 'Tekststijlen',\n        action: 'Acties',\n        paragraphFormatting: 'Paragraafstijlen',\n        documentStyle: 'Documentstijlen',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Alinea invoegen',\n        'undo': 'Laatste handeling ongedaan maken',\n        'redo': 'Laatste handeling opnieuw uitvoeren',\n        'tab': 'Tab',\n        'untab': 'Herstel tab',\n        'bold': 'Stel stijl in als vet',\n        'italic': 'Stel stijl in als cursief',\n        'underline': 'Stel stijl in als onderstreept',\n        'strikethrough': 'Stel stijl in als doorgestreept',\n        'removeFormat': 'Verwijder stijl',\n        'justifyLeft': 'Lijn links uit',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Lijn rechts uit',\n        'justifyFull': 'Lijn uit op volledige breedte',\n        'insertUnorderedList': 'Zet ongeordende lijstweergave aan',\n        'insertOrderedList': 'Zet geordende lijstweergave aan',\n        'outdent': 'Verwijder inspringing huidige alinea',\n        'indent': 'Inspringen op huidige alinea',\n        'formatPara': 'Wijzig formattering huidig blok in alinea(P tag)',\n        'formatH1': 'Formatteer huidig blok als H1',\n        'formatH2': 'Formatteer huidig blok als H2',\n        'formatH3': 'Formatteer huidig blok als H3',\n        'formatH4': 'Formatteer huidig blok als H4',\n        'formatH5': 'Formatteer huidig blok als H5',\n        'formatH6': 'Formatteer huidig blok als H6',\n        'insertHorizontalRule': 'Invoegen horizontale lijn',\n        'linkDialog.show': 'Toon Link Dialoogvenster'\n      },\n      history: {\n        undo: 'Ongedaan maken',\n        redo: 'Opnieuw doorvoeren'\n      },\n      specialChar: {\n        specialChar: 'SPECIALE TEKENS',\n        select: 'Selecteer Speciale Tekens'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-nl-NL.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-pl-PL.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 33);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 33:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'pl-PL': {\n      font: {\n        bold: 'Pogrubienie',\n        italic: 'Pochylenie',\n        underline: 'Podkreślenie',\n        clear: 'Usuń formatowanie',\n        height: 'Interlinia',\n        name: 'Czcionka',\n        strikethrough: 'Przekreślenie',\n        subscript: 'Indeks dolny',\n        superscript: 'Indeks górny',\n        size: 'Rozmiar'\n      },\n      image: {\n        image: 'Grafika',\n        insert: 'Wstaw grafikę',\n        resizeFull: 'Zmień rozmiar na 100%',\n        resizeHalf: 'Zmień rozmiar na 50%',\n        resizeQuarter: 'Zmień rozmiar na 25%',\n        floatLeft: 'Po lewej',\n        floatRight: 'Po prawej',\n        floatNone: 'Równo z tekstem',\n        shapeRounded: 'Kształt: zaokrąglone',\n        shapeCircle: 'Kształt: okrąg',\n        shapeThumbnail: 'Kształt: miniatura',\n        shapeNone: 'Kształt: brak',\n        dragImageHere: 'Przeciągnij grafikę lub tekst tutaj',\n        dropImage: 'Przeciągnij grafikę lub tekst',\n        selectFromFiles: 'Wybierz z dysku',\n        maximumFileSize: 'Limit wielkości pliku',\n        maximumFileSizeError: 'Przekroczono limit wielkości pliku.',\n        url: 'Adres URL grafiki',\n        remove: 'Usuń grafikę',\n        original: 'Oryginał'\n      },\n      video: {\n        video: 'Wideo',\n        videoLink: 'Adres wideo',\n        insert: 'Wstaw wideo',\n        url: 'Adres wideo',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion lub Youku)'\n      },\n      link: {\n        link: 'Odnośnik',\n        insert: 'Wstaw odnośnik',\n        unlink: 'Usuń odnośnik',\n        edit: 'Edytuj',\n        textToDisplay: 'Tekst do wyświetlenia',\n        url: 'Na jaki adres URL powinien przenosić ten odnośnik?',\n        openInNewWindow: 'Otwórz w nowym oknie'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Dodaj wiersz powyżej',\n        addRowBelow: 'Dodaj wiersz poniżej',\n        addColLeft: 'Dodaj kolumnę po lewej',\n        addColRight: 'Dodaj kolumnę po prawej',\n        delRow: 'Usuń wiersz',\n        delCol: 'Usuń kolumnę',\n        delTable: 'Usuń tabelę'\n      },\n      hr: {\n        insert: 'Wstaw poziomą linię'\n      },\n      style: {\n        style: 'Styl',\n        p: 'pny',\n        blockquote: 'Cytat',\n        pre: 'Kod',\n        h1: 'Nagłówek 1',\n        h2: 'Nagłówek 2',\n        h3: 'Nagłówek 3',\n        h4: 'Nagłówek 4',\n        h5: 'Nagłówek 5',\n        h6: 'Nagłówek 6'\n      },\n      lists: {\n        unordered: 'Lista wypunktowana',\n        ordered: 'Lista numerowana'\n      },\n      options: {\n        help: 'Pomoc',\n        fullscreen: 'Pełny ekran',\n        codeview: 'Źródło'\n      },\n      paragraph: {\n        paragraph: 'Akapit',\n        outdent: 'Zmniejsz wcięcie',\n        indent: 'Zwiększ wcięcie',\n        left: 'Wyrównaj do lewej',\n        center: 'Wyrównaj do środka',\n        right: 'Wyrównaj do prawej',\n        justify: 'Wyrównaj do lewej i prawej'\n      },\n      color: {\n        recent: 'Ostani kolor',\n        more: 'Więcej kolorów',\n        background: 'Tło',\n        foreground: 'Czcionka',\n        transparent: 'Przeźroczysty',\n        setTransparent: 'Przeźroczyste',\n        reset: 'Zresetuj',\n        resetToDefault: 'Domyślne'\n      },\n      shortcut: {\n        shortcuts: 'Skróty klawiaturowe',\n        close: 'Zamknij',\n        textFormatting: 'Formatowanie tekstu',\n        action: 'Akcja',\n        paragraphFormatting: 'Formatowanie akapitu',\n        documentStyle: 'Styl dokumentu',\n        extraKeys: 'Dodatkowe klawisze'\n      },\n      help: {\n        'insertParagraph': 'Wstaw paragraf',\n        'undo': 'Cofnij poprzednią operację',\n        'redo': 'Przywróć poprzednią operację',\n        'tab': 'Tabulacja',\n        'untab': 'Usuń tabulację',\n        'bold': 'Pogrubienie',\n        'italic': 'Kursywa',\n        'underline': 'Podkreślenie',\n        'strikethrough': 'Przekreślenie',\n        'removeFormat': 'Usuń formatowanie',\n        'justifyLeft': 'Wyrównaj do lewej',\n        'justifyCenter': 'Wyrównaj do środka',\n        'justifyRight': 'Wyrównaj do prawej',\n        'justifyFull': 'Justyfikacja',\n        'insertUnorderedList': 'Nienumerowana lista',\n        'insertOrderedList': 'Wypunktowana lista',\n        'outdent': 'Zmniejsz wcięcie paragrafu',\n        'indent': 'Zwiększ wcięcie paragrafu',\n        'formatPara': 'Zamień format bloku na paragraf (tag P)',\n        'formatH1': 'Zamień format bloku na H1',\n        'formatH2': 'Zamień format bloku na H2',\n        'formatH3': 'Zamień format bloku na H3',\n        'formatH4': 'Zamień format bloku na H4',\n        'formatH5': 'Zamień format bloku na H5',\n        'formatH6': 'Zamień format bloku na H6',\n        'insertHorizontalRule': 'Wstaw poziomą linię',\n        'linkDialog.show': 'Pokaż dialog linkowania'\n      },\n      history: {\n        undo: 'Cofnij',\n        redo: 'Ponów'\n      },\n      specialChar: {\n        specialChar: 'ZNAKI SPECJALNE',\n        select: 'Wybierz Znak specjalny'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-pl-PL.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-pt-BR.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 34);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 34:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'pt-BR': {\n      font: {\n        bold: 'Negrito',\n        italic: 'Itálico',\n        underline: 'Sublinhado',\n        clear: 'Remover estilo da fonte',\n        height: 'Altura da linha',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        subscript: 'Subscrito',\n        superscript: 'Sobrescrito',\n        size: 'Tamanho da fonte'\n      },\n      image: {\n        image: 'Imagem',\n        insert: 'Inserir imagem',\n        resizeFull: 'Redimensionar Completamente',\n        resizeHalf: 'Redimensionar pela Metade',\n        resizeQuarter: 'Redimensionar a um Quarto',\n        floatLeft: 'Flutuar para Esquerda',\n        floatRight: 'Flutuar para Direita',\n        floatNone: 'Não Flutuar',\n        shapeRounded: 'Forma: Arredondado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Miniatura',\n        shapeNone: 'Forma: Nenhum',\n        dragImageHere: 'Arraste Imagem ou Texto para cá',\n        dropImage: 'Solte Imagem ou Texto',\n        selectFromFiles: 'Selecione a partir dos arquivos',\n        maximumFileSize: 'Tamanho máximo do arquivo',\n        maximumFileSizeError: 'Tamanho máximo do arquivo excedido.',\n        url: 'URL da imagem',\n        remove: 'Remover Imagem',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Link para vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserir link',\n        unlink: 'Remover link',\n        edit: 'Editar',\n        textToDisplay: 'Texto para exibir',\n        url: 'Para qual URL este link leva?',\n        openInNewWindow: 'Abrir em uma nova janela'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Adicionar linha acima',\n        addRowBelow: 'Adicionar linha abaixo',\n        addColLeft: 'Adicionar coluna à esquerda',\n        addColRight: 'Adicionar coluna à direita',\n        delRow: 'Excluir linha',\n        delCol: 'Excluir coluna',\n        delTable: 'Excluir tabela'\n      },\n      hr: {\n        insert: 'Linha horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'Normal',\n        blockquote: 'Citação',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista com marcadores',\n        ordered: 'Lista numerada'\n      },\n      options: {\n        help: 'Ajuda',\n        fullscreen: 'Tela cheia',\n        codeview: 'Ver código-fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menor tabulação',\n        indent: 'Maior tabulação',\n        left: 'Alinhar à esquerda',\n        center: 'Alinhar ao centro',\n        right: 'Alinha à direita',\n        justify: 'Justificado'\n      },\n      color: {\n        recent: 'Cor recente',\n        more: 'Mais cores',\n        background: 'Fundo',\n        foreground: 'Fonte',\n        transparent: 'Transparente',\n        setTransparent: 'Fundo transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar padrão',\n        cpSelect: 'Selecionar'\n      },\n      shortcut: {\n        shortcuts: 'Atalhos do teclado',\n        close: 'Fechar',\n        textFormatting: 'Formatação de texto',\n        action: 'Ação',\n        paragraphFormatting: 'Formatação de parágrafo',\n        documentStyle: 'Estilo de documento',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Inserir Parágrafo',\n        'undo': 'Desfazer o último comando',\n        'redo': 'Refazer o último comando',\n        'tab': 'Tab',\n        'untab': 'Desfazer tab',\n        'bold': 'Colocar em negrito',\n        'italic': 'Colocar em itálico',\n        'underline': 'Sublinhado',\n        'strikethrough': 'Tachado',\n        'removeFormat': 'Remover estilo',\n        'justifyLeft': 'Alinhar à esquerda',\n        'justifyCenter': 'Centralizar',\n        'justifyRight': 'Alinhar à esquerda',\n        'justifyFull': 'Justificar',\n        'insertUnorderedList': 'Lista não ordenada',\n        'insertOrderedList': 'Lista ordenada',\n        'outdent': 'Recuar parágrafo atual',\n        'indent': 'Avançar parágrafo atual',\n        'formatPara': 'Alterar formato do bloco para parágrafo(tag P)',\n        'formatH1': 'Alterar formato do bloco para H1',\n        'formatH2': 'Alterar formato do bloco para H2',\n        'formatH3': 'Alterar formato do bloco para H3',\n        'formatH4': 'Alterar formato do bloco para H4',\n        'formatH5': 'Alterar formato do bloco para H5',\n        'formatH6': 'Alterar formato do bloco para H6',\n        'insertHorizontalRule': 'Inserir Régua horizontal',\n        'linkDialog.show': 'Inserir um Hiperlink'\n      },\n      history: {\n        undo: 'Desfazer',\n        redo: 'Refazer'\n      },\n      specialChar: {\n        specialChar: 'CARACTERES ESPECIAIS',\n        select: 'Selecionar Caracteres Especiais'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-pt-BR.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-pt-PT.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 35);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 35:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'pt-PT': {\n      font: {\n        bold: 'Negrito',\n        italic: 'Itálico',\n        underline: 'Sublinhado',\n        clear: 'Remover estilo da fonte',\n        height: 'Altura da linha',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Tamanho da fonte'\n      },\n      image: {\n        image: 'Imagem',\n        insert: 'Inserir imagem',\n        resizeFull: 'Redimensionar Completo',\n        resizeHalf: 'Redimensionar Metade',\n        resizeQuarter: 'Redimensionar Um Quarto',\n        floatLeft: 'Float Esquerda',\n        floatRight: 'Float Direita',\n        floatNone: 'Sem Float',\n        shapeRounded: 'Forma: Arredondado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Minhatura',\n        shapeNone: 'Forma: Nenhum',\n        dragImageHere: 'Arraste uma imagem para aqui',\n        dropImage: 'Arraste uma imagem ou texto',\n        selectFromFiles: 'Selecione a partir dos arquivos',\n        maximumFileSize: 'Tamanho máximo do fixeiro',\n        maximumFileSizeError: 'Tamanho máximo do fixeiro é maior que o permitido.',\n        url: 'Endereço da imagem',\n        remove: 'Remover Imagem',\n        original: 'Original'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Link para vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserir ligação',\n        unlink: 'Remover ligação',\n        edit: 'Editar',\n        textToDisplay: 'Texto para exibir',\n        url: 'Que endereço esta licação leva?',\n        openInNewWindow: 'Abrir numa nova janela'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Adicionar linha acima',\n        addRowBelow: 'Adicionar linha abaixo',\n        addColLeft: 'Adicionar coluna à Esquerda',\n        addColRight: 'Adicionar coluna à Esquerda',\n        delRow: 'Excluir linha',\n        delCol: 'Excluir coluna',\n        delTable: 'Excluir tabela'\n      },\n      hr: {\n        insert: 'Inserir linha horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'Parágrafo',\n        blockquote: 'Citação',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista com marcadores',\n        ordered: 'Lista numerada'\n      },\n      options: {\n        help: 'Ajuda',\n        fullscreen: 'Janela Completa',\n        codeview: 'Ver código-fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menor tabulação',\n        indent: 'Maior tabulação',\n        left: 'Alinhar à esquerda',\n        center: 'Alinhar ao centro',\n        right: 'Alinha à direita',\n        justify: 'Justificado'\n      },\n      color: {\n        recent: 'Cor recente',\n        more: 'Mais cores',\n        background: 'Fundo',\n        foreground: 'Fonte',\n        transparent: 'Transparente',\n        setTransparent: 'Fundo transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar padrão',\n        cpSelect: 'Selecionar'\n      },\n      shortcut: {\n        shortcuts: 'Atalhos do teclado',\n        close: 'Fechar',\n        textFormatting: 'Formatação de texto',\n        action: 'Ação',\n        paragraphFormatting: 'Formatação de parágrafo',\n        documentStyle: 'Estilo de documento'\n      },\n      help: {\n        'insertParagraph': 'Inserir Parágrafo',\n        'undo': 'Desfazer o último comando',\n        'redo': 'Refazer o último comando',\n        'tab': 'Maior tabulação',\n        'untab': 'Menor tabulação',\n        'bold': 'Colocar em negrito',\n        'italic': 'Colocar em itálico',\n        'underline': 'Colocar em sublinhado',\n        'strikethrough': 'Colocar em riscado',\n        'removeFormat': 'Limpar o estilo',\n        'justifyLeft': 'Definir alinhado à esquerda',\n        'justifyCenter': 'Definir alinhado ao centro',\n        'justifyRight': 'Definir alinhado à direita',\n        'justifyFull': 'Definir justificado',\n        'insertUnorderedList': 'Alternar lista não ordenada',\n        'insertOrderedList': 'Alternar lista ordenada',\n        'outdent': 'Recuar parágrafo atual',\n        'indent': 'Avançar parágrafo atual',\n        'formatPara': 'Alterar formato do bloco para parágrafo',\n        'formatH1': 'Alterar formato do bloco para Título 1',\n        'formatH2': 'Alterar formato do bloco para Título 2',\n        'formatH3': 'Alterar formato do bloco para Título 3',\n        'formatH4': 'Alterar formato do bloco para Título 4',\n        'formatH5': 'Alterar formato do bloco para Título 5',\n        'formatH6': 'Alterar formato do bloco para Título 6',\n        'insertHorizontalRule': 'Inserir linha horizontal',\n        'linkDialog.show': 'Inserir uma ligração'\n      },\n      history: {\n        undo: 'Desfazer',\n        redo: 'Refazer'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-pt-PT.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ro-RO.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 36);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 36:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'ro-RO': {\n      font: {\n        bold: 'Îngroșat',\n        italic: 'Înclinat',\n        underline: 'Subliniat',\n        clear: 'Înlătură formatare font',\n        height: 'Înălțime rând',\n        name: 'Familie de fonturi',\n        strikethrough: 'Tăiat',\n        subscript: 'Indice',\n        superscript: 'Exponent',\n        size: 'Dimensiune font'\n      },\n      image: {\n        image: 'Imagine',\n        insert: 'Inserează imagine',\n        resizeFull: 'Redimensionează complet',\n        resizeHalf: 'Redimensionează 1/2',\n        resizeQuarter: 'Redimensionează 1/4',\n        floatLeft: 'Aliniere la stânga',\n        floatRight: 'Aliniere la dreapta',\n        floatNone: 'Fară aliniere',\n        shapeRounded: 'Formă: Rotund',\n        shapeCircle: 'Formă: Cerc',\n        shapeThumbnail: 'Formă: Pictogramă',\n        shapeNone: 'Formă: Nici una',\n        dragImageHere: 'Trage o imagine sau un text aici',\n        dropImage: 'Eliberează imaginea sau textul',\n        selectFromFiles: 'Alege din fişiere',\n        maximumFileSize: 'Dimensiune maximă fișier',\n        maximumFileSizeError: 'Dimensiune maximă fișier depășită.',\n        url: 'URL imagine',\n        remove: 'Șterge imagine',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link video',\n        insert: 'Inserează video',\n        url: 'URL video?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion sau Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserează link',\n        unlink: 'Înlătură link',\n        edit: 'Editează',\n        textToDisplay: 'Text ce va fi afişat',\n        url: 'La ce adresă URL trebuie să conducă acest link?',\n        openInNewWindow: 'Deschidere în fereastră nouă'\n      },\n      table: {\n        table: 'Tabel',\n        addRowAbove: 'Adaugă rând deasupra',\n        addRowBelow: 'Adaugă rând dedesubt',\n        addColLeft: 'Adaugă coloană stânga',\n        addColRight: 'Adaugă coloană dreapta',\n        delRow: 'Șterge rând',\n        delCol: 'Șterge coloană',\n        delTable: 'Șterge tabel'\n      },\n      hr: {\n        insert: 'Inserează o linie orizontală'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Preformatat',\n        h1: 'Titlu 1',\n        h2: 'Titlu 2',\n        h3: 'Titlu 3',\n        h4: 'Titlu 4',\n        h5: 'Titlu 5',\n        h6: 'Titlu 6'\n      },\n      lists: {\n        unordered: 'Listă neordonată',\n        ordered: 'Listă ordonată'\n      },\n      options: {\n        help: 'Ajutor',\n        fullscreen: 'Măreşte',\n        codeview: 'Sursă'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Creşte identarea',\n        indent: 'Scade identarea',\n        left: 'Aliniere la stânga',\n        center: 'Aliniere centrală',\n        right: 'Aliniere la dreapta',\n        justify: 'Aliniere în bloc'\n      },\n      color: {\n        recent: 'Culoare recentă',\n        more: 'Mai multe  culori',\n        background: 'Culoarea fundalului',\n        foreground: 'Culoarea textului',\n        transparent: 'Transparent',\n        setTransparent: 'Setează transparent',\n        reset: 'Resetează',\n        resetToDefault: 'Revino la iniţial'\n      },\n      shortcut: {\n        shortcuts: 'Scurtături tastatură',\n        close: 'Închide',\n        textFormatting: 'Formatare text',\n        action: 'Acţiuni',\n        paragraphFormatting: 'Formatare paragraf',\n        documentStyle: 'Stil paragraf',\n        extraKeys: 'Taste extra'\n      },\n      help: {\n        'insertParagraph': 'Inserează paragraf',\n        'undo': 'Revine la starea anterioară',\n        'redo': 'Revine la starea ulterioară',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Setează stil îngroșat',\n        'italic': 'Setează stil înclinat',\n        'underline': 'Setează stil subliniat',\n        'strikethrough': 'Setează stil tăiat',\n        'removeFormat': 'Înlătură formatare',\n        'justifyLeft': 'Setează aliniere stânga',\n        'justifyCenter': 'Setează aliniere centru',\n        'justifyRight': 'Setează aliniere dreapta',\n        'justifyFull': 'Setează aliniere bloc',\n        'insertUnorderedList': 'Comutare listă neordinată',\n        'insertOrderedList': 'Comutare listă ordonată',\n        'outdent': 'Înlătură indentare paragraf curent',\n        'indent': 'Adaugă indentare paragraf curent',\n        'formatPara': 'Schimbă formatarea selecției în paragraf',\n        'formatH1': 'Schimbă formatarea selecției în H1',\n        'formatH2': 'Schimbă formatarea selecției în H2',\n        'formatH3': 'Schimbă formatarea selecției în H3',\n        'formatH4': 'Schimbă formatarea selecției în H4',\n        'formatH5': 'Schimbă formatarea selecției în H5',\n        'formatH6': 'Schimbă formatarea selecției în H6',\n        'insertHorizontalRule': 'Adaugă linie orizontală',\n        'linkDialog.show': 'Inserează link'\n      },\n      history: {\n        undo: 'Starea anterioară',\n        redo: 'Starea ulterioară'\n      },\n      specialChar: {\n        specialChar: 'CARACTERE SPECIALE',\n        select: 'Alege caractere speciale'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ro-RO.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ru-RU.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 37);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 37:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'ru-RU': {\n      font: {\n        bold: 'Полужирный',\n        italic: 'Курсив',\n        underline: 'Подчёркнутый',\n        clear: 'Убрать стили шрифта',\n        height: 'Высота линии',\n        name: 'Шрифт',\n        strikethrough: 'Зачёркнутый',\n        subscript: 'Нижний индекс',\n        superscript: 'Верхний индекс',\n        size: 'Размер шрифта'\n      },\n      image: {\n        image: 'Картинка',\n        insert: 'Вставить картинку',\n        resizeFull: 'Восстановить размер',\n        resizeHalf: 'Уменьшить до 50%',\n        resizeQuarter: 'Уменьшить до 25%',\n        floatLeft: 'Расположить слева',\n        floatRight: 'Расположить справа',\n        floatNone: 'Расположение по-умолчанию',\n        shapeRounded: 'Форма: Закругленная',\n        shapeCircle: 'Форма: Круг',\n        shapeThumbnail: 'Форма: Миниатюра',\n        shapeNone: 'Форма: Нет',\n        dragImageHere: 'Перетащите сюда картинку',\n        dropImage: 'Перетащите картинку',\n        selectFromFiles: 'Выбрать из файлов',\n        maximumFileSize: 'Максимальный размер файла',\n        maximumFileSizeError: 'Превышен максимальный размер файла',\n        url: 'URL картинки',\n        remove: 'Удалить картинку',\n        original: 'Оригинал'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Ссылка на видео',\n        insert: 'Вставить видео',\n        url: 'URL видео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'\n      },\n      link: {\n        link: 'Ссылка',\n        insert: 'Вставить ссылку',\n        unlink: 'Убрать ссылку',\n        edit: 'Редактировать',\n        textToDisplay: 'Отображаемый текст',\n        url: 'URL для перехода',\n        openInNewWindow: 'Открывать в новом окне'\n      },\n      table: {\n        table: 'Таблица',\n        addRowAbove: 'Добавить строку выше',\n        addRowBelow: 'Добавить строку ниже',\n        addColLeft: 'Добавить столбец слева',\n        addColRight: 'Добавить столбец справа',\n        delRow: 'Удалить строку',\n        delCol: 'Удалить столбец',\n        delTable: 'Удалить таблицу'\n      },\n      hr: {\n        insert: 'Вставить горизонтальную линию'\n      },\n      style: {\n        style: 'Стиль',\n        p: 'Нормальный',\n        blockquote: 'Цитата',\n        pre: 'Код',\n        h1: 'Заголовок 1',\n        h2: 'Заголовок 2',\n        h3: 'Заголовок 3',\n        h4: 'Заголовок 4',\n        h5: 'Заголовок 5',\n        h6: 'Заголовок 6'\n      },\n      lists: {\n        unordered: 'Маркированный список',\n        ordered: 'Нумерованный список'\n      },\n      options: {\n        help: 'Помощь',\n        fullscreen: 'На весь экран',\n        codeview: 'Исходный код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Уменьшить отступ',\n        indent: 'Увеличить отступ',\n        left: 'Выровнять по левому краю',\n        center: 'Выровнять по центру',\n        right: 'Выровнять по правому краю',\n        justify: 'Растянуть по ширине'\n      },\n      color: {\n        recent: 'Последний цвет',\n        more: 'Еще цвета',\n        background: 'Цвет фона',\n        foreground: 'Цвет шрифта',\n        transparent: 'Прозрачный',\n        setTransparent: 'Сделать прозрачным',\n        reset: 'Сброс',\n        resetToDefault: 'Восстановить умолчания'\n      },\n      shortcut: {\n        shortcuts: 'Сочетания клавиш',\n        close: 'Закрыть',\n        textFormatting: 'Форматирование текста',\n        action: 'Действие',\n        paragraphFormatting: 'Форматирование параграфа',\n        documentStyle: 'Стиль документа',\n        extraKeys: 'Дополнительные комбинации'\n      },\n      help: {\n        'insertParagraph': 'Новый параграф',\n        'undo': 'Отменить последнюю команду',\n        'redo': 'Повторить последнюю команду',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Установить стиль \"Жирный\"',\n        'italic': 'Установить стиль \"Наклонный\"',\n        'underline': 'Установить стиль \"Подчеркнутый\"',\n        'strikethrough': 'Установить стиль \"Зачеркнутый\"',\n        'removeFormat': 'Сборсить стили',\n        'justifyLeft': 'Выровнять по левому краю',\n        'justifyCenter': 'Выровнять по центру',\n        'justifyRight': 'Выровнять по правому краю',\n        'justifyFull': 'Растянуть на всю ширину',\n        'insertUnorderedList': 'Включить/отключить маркированный список',\n        'insertOrderedList': 'Включить/отключить нумерованный список',\n        'outdent': 'Убрать отступ в текущем параграфе',\n        'indent': 'Вставить отступ в текущем параграфе',\n        'formatPara': 'Форматировать текущий блок как параграф (тег P)',\n        'formatH1': 'Форматировать текущий блок как H1',\n        'formatH2': 'Форматировать текущий блок как H2',\n        'formatH3': 'Форматировать текущий блок как H3',\n        'formatH4': 'Форматировать текущий блок как H4',\n        'formatH5': 'Форматировать текущий блок как H5',\n        'formatH6': 'Форматировать текущий блок как H6',\n        'insertHorizontalRule': 'Вставить горизонтальную черту',\n        'linkDialog.show': 'Показать диалог \"Ссылка\"'\n      },\n      history: {\n        undo: 'Отменить',\n        redo: 'Повтор'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ru-RU.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sk-SK.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 38);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 38:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'sk-SK': {\n      font: {\n        bold: 'Tučné',\n        italic: 'Kurzíva',\n        underline: 'Podčiarknutie',\n        clear: 'Odstrániť štýl písma',\n        height: 'Výška riadku',\n        strikethrough: 'Prečiarknuté',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Veľkosť písma'\n      },\n      image: {\n        image: 'Obrázok',\n        insert: 'Vložiť obrázok',\n        resizeFull: 'Pôvodná veľkosť',\n        resizeHalf: 'Polovičná veľkosť',\n        resizeQuarter: 'Štvrtinová veľkosť',\n        floatLeft: 'Umiestniť doľava',\n        floatRight: 'Umiestniť doprava',\n        floatNone: 'Bez zarovnania',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Pretiahnuť sem obrázok',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Vybrať súbor',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL obrázku',\n        remove: 'Remove Image',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Odkaz videa',\n        insert: 'Vložiť video',\n        url: 'URL videa?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion alebo Youku)'\n      },\n      link: {\n        link: 'Odkaz',\n        insert: 'Vytvoriť odkaz',\n        unlink: 'Zrušiť odkaz',\n        edit: 'Upraviť',\n        textToDisplay: 'Zobrazovaný text',\n        url: 'Na akú URL adresu má tento odkaz viesť?',\n        openInNewWindow: 'Otvoriť v novom okne'\n      },\n      table: {\n        table: 'Tabuľka',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Vložit vodorovnú čiaru'\n      },\n      style: {\n        style: 'Štýl',\n        p: 'Normálny',\n        blockquote: 'Citácia',\n        pre: 'Kód',\n        h1: 'Nadpis 1',\n        h2: 'Nadpis 2',\n        h3: 'Nadpis 3',\n        h4: 'Nadpis 4',\n        h5: 'Nadpis 5',\n        h6: 'Nadpis 6'\n      },\n      lists: {\n        unordered: 'Odrážkový zoznam',\n        ordered: 'Číselný zoznam'\n      },\n      options: {\n        help: 'Pomoc',\n        fullscreen: 'Celá obrazovka',\n        codeview: 'HTML kód'\n      },\n      paragraph: {\n        paragraph: 'Odsek',\n        outdent: 'Zväčšiť odsadenie',\n        indent: 'Zmenšiť odsadenie',\n        left: 'Zarovnať doľava',\n        center: 'Zarovnať na stred',\n        right: 'Zarovnať doprava',\n        justify: 'Zarovnať obojstranne'\n      },\n      color: {\n        recent: 'Aktuálna farba',\n        more: 'Dalšie farby',\n        background: 'Farba pozadia',\n        foreground: 'Farba písma',\n        transparent: 'Priehľadnosť',\n        setTransparent: 'Nastaviť priehľadnosť',\n        reset: 'Obnoviť',\n        resetToDefault: 'Obnoviť prednastavené'\n      },\n      shortcut: {\n        shortcuts: 'Klávesové skratky',\n        close: 'Zavrieť',\n        textFormatting: 'Formátovanie textu',\n        action: 'Akcia',\n        paragraphFormatting: 'Formátovanie odseku',\n        documentStyle: 'Štýl dokumentu'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Krok vzad',\n        redo: 'Krok dopredu'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sk-SK.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sl-SI.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 39);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 39:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'sl-SI': {\n      font: {\n        bold: 'Krepko',\n        italic: 'Ležeče',\n        underline: 'Podčrtano',\n        clear: 'Počisti oblikovanje izbire',\n        height: 'Razmik med vrsticami',\n        name: 'Pisava',\n        strikethrough: 'Prečrtano',\n        subscript: 'Podpisano',\n        superscript: 'Nadpisano',\n        size: 'Velikost pisave'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Vstavi sliko',\n        resizeFull: 'Razširi na polno velikost',\n        resizeHalf: 'Razširi na polovico velikosti',\n        resizeQuarter: 'Razširi na četrtino velikosti',\n        floatLeft: 'Leva poravnava',\n        floatRight: 'Desna poravnava',\n        floatNone: 'Brez poravnave',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Sem povlecite sliko',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Izberi sliko za nalaganje',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL naslov slike',\n        remove: 'Odstrani sliko',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video povezava',\n        insert: 'Vstavi video',\n        url: 'Povezava do videa',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ali Youku)'\n      },\n      link: {\n        link: 'Povezava',\n        insert: 'Vstavi povezavo',\n        unlink: 'Odstrani povezavo',\n        edit: 'Uredi',\n        textToDisplay: 'Prikazano besedilo',\n        url: 'Povezava',\n        openInNewWindow: 'Odpri v novem oknu'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Vstavi horizontalno črto'\n      },\n      style: {\n        style: 'Slogi',\n        p: 'Navadno besedilo',\n        blockquote: 'Citat',\n        pre: 'Koda',\n        h1: 'Naslov 1',\n        h2: 'Naslov 2',\n        h3: 'Naslov 3',\n        h4: 'Naslov 4',\n        h5: 'Naslov 5',\n        h6: 'Naslov 6'\n      },\n      lists: {\n        unordered: 'Označen seznam',\n        ordered: 'Oštevilčen seznam'\n      },\n      options: {\n        help: 'Pomoč',\n        fullscreen: 'Celozaslonski način',\n        codeview: 'Pregled HTML kode'\n      },\n      paragraph: {\n        paragraph: 'Slogi odstavka',\n        outdent: 'Zmanjšaj odmik',\n        indent: 'Povečaj odmik',\n        left: 'Leva poravnava',\n        center: 'Desna poravnava',\n        right: 'Sredinska poravnava',\n        justify: 'Obojestranska poravnava'\n      },\n      color: {\n        recent: 'Uporabi zadnjo barvo',\n        more: 'Več barv',\n        background: 'Barva ozadja',\n        foreground: 'Barva besedila',\n        transparent: 'Brez barve',\n        setTransparent: 'Brez barve',\n        reset: 'Ponastavi',\n        resetToDefault: 'Ponastavi na privzeto'\n      },\n      shortcut: {\n        shortcuts: 'Bljižnice',\n        close: 'Zapri',\n        textFormatting: 'Oblikovanje besedila',\n        action: 'Dejanja',\n        paragraphFormatting: 'Oblikovanje odstavka',\n        documentStyle: 'Oblikovanje naslova',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Razveljavi',\n        redo: 'Uveljavi'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sl-SI.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sr-RS-Latin.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 40);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 40:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'sr-RS': {\n      font: {\n        bold: 'Podebljano',\n        italic: 'Kurziv',\n        underline: 'Podvučeno',\n        clear: 'Ukloni stilove fonta',\n        height: 'Visina linije',\n        name: 'Font Family',\n        strikethrough: 'Precrtano',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Veličina fonta'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Umetni sliku',\n        resizeFull: 'Puna veličina',\n        resizeHalf: 'Umanji na 50%',\n        resizeQuarter: 'Umanji na 25%',\n        floatLeft: 'Uz levu ivicu',\n        floatRight: 'Uz desnu ivicu',\n        floatNone: 'Bez ravnanja',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Prevuci sliku ovde',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Izaberi iz datoteke',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Adresa slike',\n        remove: 'Ukloni sliku',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Veza ka videu',\n        insert: 'Umetni video',\n        url: 'URL video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)'\n      },\n      link: {\n        link: 'Veza',\n        insert: 'Umetni vezu',\n        unlink: 'Ukloni vezu',\n        edit: 'Uredi',\n        textToDisplay: 'Tekst za prikaz',\n        url: 'Internet adresa',\n        openInNewWindow: 'Otvori u novom prozoru'\n      },\n      table: {\n        table: 'Tabela',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Umetni horizontalnu liniju'\n      },\n      style: {\n        style: 'Stil',\n        p: 'pni',\n        blockquote: 'Citat',\n        pre: 'Kod',\n        h1: 'Zaglavlje 1',\n        h2: 'Zaglavlje 2',\n        h3: 'Zaglavlje 3',\n        h4: 'Zaglavlje 4',\n        h5: 'Zaglavlje 5',\n        h6: 'Zaglavlje 6'\n      },\n      lists: {\n        unordered: 'Obična lista',\n        ordered: 'Numerisana lista'\n      },\n      options: {\n        help: 'Pomoć',\n        fullscreen: 'Preko celog ekrana',\n        codeview: 'Izvorni kod'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Smanji uvlačenje',\n        indent: 'Povečaj uvlačenje',\n        left: 'Poravnaj u levo',\n        center: 'Centrirano',\n        right: 'Poravnaj u desno',\n        justify: 'Poravnaj obostrano'\n      },\n      color: {\n        recent: 'Poslednja boja',\n        more: 'Više boja',\n        background: 'Boja pozadine',\n        foreground: 'Boja teksta',\n        transparent: 'Providna',\n        setTransparent: 'Providna',\n        reset: 'Opoziv',\n        resetToDefault: 'Podrazumevana'\n      },\n      shortcut: {\n        shortcuts: 'Prečice sa tastature',\n        close: 'Zatvori',\n        textFormatting: 'Formatiranje teksta',\n        action: 'Akcija',\n        paragraphFormatting: 'Formatiranje paragrafa',\n        documentStyle: 'Stil dokumenta',\n        extraKeys: 'Dodatne kombinacije'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Poništi',\n        redo: 'Ponovi'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sr-RS-Latin.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sr-RS.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 41);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 41:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'sr-RS': {\n      font: {\n        bold: 'Подебљано',\n        italic: 'Курзив',\n        underline: 'Подвучено',\n        clear: 'Уклони стилове фонта',\n        height: 'Висина линије',\n        name: 'Font Family',\n        strikethrough: 'Прецртано',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Величина фонта'\n      },\n      image: {\n        image: 'Слика',\n        insert: 'Уметни слику',\n        resizeFull: 'Пуна величина',\n        resizeHalf: 'Умањи на 50%',\n        resizeQuarter: 'Умањи на 25%',\n        floatLeft: 'Уз леву ивицу',\n        floatRight: 'Уз десну ивицу',\n        floatNone: 'Без равнања',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Превуци слику овде',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Изабери из датотеке',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Адреса слике',\n        remove: 'Уклони слику',\n        original: 'Original'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Веза ка видеу',\n        insert: 'Уметни видео',\n        url: 'URL видео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'\n      },\n      link: {\n        link: 'Веза',\n        insert: 'Уметни везу',\n        unlink: 'Уклони везу',\n        edit: 'Уреди',\n        textToDisplay: 'Текст за приказ',\n        url: 'Интернет адреса',\n        openInNewWindow: 'Отвори у новом прозору'\n      },\n      table: {\n        table: 'Табела',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Уметни хоризонталну линију'\n      },\n      style: {\n        style: 'Стил',\n        p: 'Нормални',\n        blockquote: 'Цитат',\n        pre: 'Код',\n        h1: 'Заглавље 1',\n        h2: 'Заглавље 2',\n        h3: 'Заглавље 3',\n        h4: 'Заглавље 4',\n        h5: 'Заглавље 5',\n        h6: 'Заглавље 6'\n      },\n      lists: {\n        unordered: 'Обична листа',\n        ordered: 'Нумерисана листа'\n      },\n      options: {\n        help: 'Помоћ',\n        fullscreen: 'Преко целог екрана',\n        codeview: 'Изворни код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Смањи увлачење',\n        indent: 'Повечај увлачење',\n        left: 'Поравнај у лево',\n        center: 'Центрирано',\n        right: 'Поравнај у десно',\n        justify: 'Поравнај обострано'\n      },\n      color: {\n        recent: 'Последња боја',\n        more: 'Више боја',\n        background: 'Боја позадине',\n        foreground: 'Боја текста',\n        transparent: 'Провидна',\n        setTransparent: 'Провидна',\n        reset: 'Опозив',\n        resetToDefault: 'Подразумевана'\n      },\n      shortcut: {\n        shortcuts: 'Пречице са тастатуре',\n        close: 'Затвори',\n        textFormatting: 'Форматирање текста',\n        action: 'Акција',\n        paragraphFormatting: 'Форматирање параграфа',\n        documentStyle: 'Стил документа',\n        extraKeys: 'Додатне комбинације'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Поништи',\n        redo: 'Понови'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sr-RS.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sv-SE.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 42);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 42:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'sv-SE': {\n      font: {\n        bold: 'Fet',\n        italic: 'Kursiv',\n        underline: 'Understruken',\n        clear: 'Radera formatering',\n        height: 'Radavstånd',\n        name: 'Teckensnitt',\n        strikethrough: 'Genomstruken',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Teckenstorlek'\n      },\n      image: {\n        image: 'Bild',\n        insert: 'Infoga bild',\n        resizeFull: 'Full storlek',\n        resizeHalf: 'Halv storlek',\n        resizeQuarter: 'En fjärdedel i storlek',\n        floatLeft: 'Vänsterjusterad',\n        floatRight: 'Högerjusterad',\n        floatNone: 'Ingen justering',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Dra en bild hit',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Välj från filer',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Länk till bild',\n        remove: 'Ta bort bild',\n        original: 'Original'\n      },\n      video: {\n        video: 'Filmklipp',\n        videoLink: 'Länk till filmklipp',\n        insert: 'Infoga filmklipp',\n        url: 'Länk till filmklipp',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Länk',\n        insert: 'Infoga länk',\n        unlink: 'Ta bort länk',\n        edit: 'Redigera',\n        textToDisplay: 'Visningstext',\n        url: 'Till vilken URL ska denna länk peka?',\n        openInNewWindow: 'Öppna i ett nytt fönster'\n      },\n      table: {\n        table: 'Tabell',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Infoga horisontell linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Kod',\n        h1: 'Rubrik 1',\n        h2: 'Rubrik 2',\n        h3: 'Rubrik 3',\n        h4: 'Rubrik 4',\n        h5: 'Rubrik 5',\n        h6: 'Rubrik 6'\n      },\n      lists: {\n        unordered: 'Punktlista',\n        ordered: 'Numrerad lista'\n      },\n      options: {\n        help: 'Hjälp',\n        fullscreen: 'Fullskärm',\n        codeview: 'HTML-visning'\n      },\n      paragraph: {\n        paragraph: 'Justera text',\n        outdent: 'Minska indrag',\n        indent: 'Öka indrag',\n        left: 'Vänsterjusterad',\n        center: 'Centrerad',\n        right: 'Högerjusterad',\n        justify: 'Justera text'\n      },\n      color: {\n        recent: 'Senast använda färg',\n        more: 'Fler färger',\n        background: 'Bakgrundsfärg',\n        foreground: 'Teckenfärg',\n        transparent: 'Genomskinlig',\n        setTransparent: 'Gör genomskinlig',\n        reset: 'Nollställ',\n        resetToDefault: 'Återställ till standard'\n      },\n      shortcut: {\n        shortcuts: 'Kortkommandon',\n        close: 'Stäng',\n        textFormatting: 'Textformatering',\n        action: 'Funktion',\n        paragraphFormatting: 'Avsnittsformatering',\n        documentStyle: 'Dokumentstil',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Ångra',\n        redo: 'Gör om'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-sv-SE.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ta-IN.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 43);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 43:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'ta-IN': {\n      font: {\n        bold: 'தடித்த',\n        italic: 'சாய்வு',\n        underline: 'அடிக்கோடு',\n        clear: 'நீக்கு',\n        height: 'வரி  உயரம்',\n        name: 'எழுத்துரு பெயர்',\n        strikethrough: 'குறுக்குக் கோடு',\n        size: 'எழுத்துரு அளவு',\n        superscript: 'மேல் ஒட்டு',\n        subscript: 'கீழ் ஒட்டு'\n      },\n      image: {\n        image: 'படம்',\n        insert: 'படத்தை செருகு',\n        resizeFull: 'முழு அளவை',\n        resizeHalf: 'அரை அளவை',\n        resizeQuarter: 'கால் அளவை',\n        floatLeft: 'இடப்பக்கமாக வை',\n        floatRight: 'வலப்பக்கமாக வை',\n        floatNone: 'இயல்புநிலையில் வை',\n        shapeRounded: 'வட்டமான வடிவம்',\n        shapeCircle: 'வட்ட வடிவம்',\n        shapeThumbnail: 'சிறு வடிவம்',\n        shapeNone: 'வடிவத்தை நீக்கு',\n        dragImageHere: 'படத்தை இங்கே இழுத்துவை',\n        dropImage: 'படத்தை விடு',\n        selectFromFiles: 'கோப்புகளை தேர்வு செய்',\n        maximumFileSize: 'அதிகபட்ச கோப்பு அளவு',\n        maximumFileSizeError: 'கோப்பு அதிகபட்ச அளவை மீறிவிட்டது',\n        url: 'இணையதள முகவரி',\n        remove: 'படத்தை நீக்கு',\n        original: 'Original'\n      },\n      video: {\n        video: 'காணொளி',\n        videoLink: 'காணொளி இணைப்பு',\n        insert: 'காணொளியை செருகு',\n        url: 'இணையதள முகவரி',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'இணைப்பு',\n        insert: 'இணைப்பை செருகு',\n        unlink: 'இணைப்பை நீக்கு',\n        edit: 'இணைப்பை தொகு',\n        textToDisplay: 'காட்சி வாசகம்',\n        url: 'இணையதள முகவரி',\n        openInNewWindow: 'புதிய சாளரத்தில் திறக்க'\n      },\n      table: {\n        table: 'அட்டவணை',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'கிடைமட்ட கோடு'\n      },\n      style: {\n        style: 'தொகுப்பு',\n        p: 'பத்தி',\n        blockquote: 'மேற்கோள்',\n        pre: 'குறியீடு',\n        h1: 'தலைப்பு 1',\n        h2: 'தலைப்பு 2',\n        h3: 'தலைப்பு 3',\n        h4: 'தலைப்பு 4',\n        h5: 'தலைப்பு 5',\n        h6: 'தலைப்பு 6'\n      },\n      lists: {\n        unordered: 'வரிசையிடாத',\n        ordered: 'வரிசையிட்ட'\n      },\n      options: {\n        help: 'உதவி',\n        fullscreen: 'முழுத்திரை',\n        codeview: 'நிரலாக்க காட்சி'\n      },\n      paragraph: {\n        paragraph: 'பத்தி',\n        outdent: 'வெளித்தள்ளு',\n        indent: 'உள்ளே தள்ளு',\n        left: 'இடது சீரமைப்பு',\n        center: 'நடு சீரமைப்பு',\n        right: 'வலது சீரமைப்பு',\n        justify: 'இருபுற சீரமைப்பு'\n      },\n      color: {\n        recent: 'அண்மை நிறம்',\n        more: 'மேலும்',\n        background: 'பின்புல நிறம்',\n        foreground: 'முன்புற நிறம்',\n        transparent: 'தெளிமையான',\n        setTransparent: 'தெளிமையாக்கு',\n        reset: 'மீட்டமைக்க',\n        resetToDefault: 'இயல்புநிலைக்கு மீட்டமை'\n      },\n      shortcut: {\n        shortcuts: 'குறுக்குவழி',\n        close: 'மூடு',\n        textFormatting: 'எழுத்து வடிவமைப்பு',\n        action: 'செயல்படுத்து',\n        paragraphFormatting: 'பத்தி வடிவமைப்பு',\n        documentStyle: 'ஆவண பாணி',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'மீளமை',\n        redo: 'மீண்டும்'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-ta-IN.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-th-TH.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 44);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 44:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'th-TH': {\n      font: {\n        bold: 'ตัวหนา',\n        italic: 'ตัวเอียง',\n        underline: 'ขีดเส้นใต้',\n        clear: 'ล้างรูปแบบตัวอักษร',\n        height: 'ความสูงบรรทัด',\n        name: 'แบบตัวอักษร',\n        strikethrough: 'ขีดฆ่า',\n        subscript: 'ตัวห้อย',\n        superscript: 'ตัวยก',\n        size: 'ขนาดตัวอักษร'\n      },\n      image: {\n        image: 'รูปภาพ',\n        insert: 'แทรกรูปภาพ',\n        resizeFull: 'ปรับขนาดเท่าจริง',\n        resizeHalf: 'ปรับขนาดลง 50%',\n        resizeQuarter: 'ปรับขนาดลง 25%',\n        floatLeft: 'ชิดซ้าย',\n        floatRight: 'ชิดขวา',\n        floatNone: 'ไม่จัดตำแหน่ง',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'ลากรูปภาพที่ต้องการไว้ที่นี่',\n        dropImage: 'วางรูปภาพหรือข้อความ',\n        selectFromFiles: 'เลือกไฟล์รูปภาพ',\n        maximumFileSize: 'ขนาดไฟล์ใหญ่สุด',\n        maximumFileSizeError: 'ไฟล์เกินขนาดที่กำหนด',\n        url: 'ที่อยู่ URL ของรูปภาพ',\n        remove: 'ลบรูปภาพ',\n        original: 'Original'\n      },\n      video: {\n        video: 'วีดีโอ',\n        videoLink: 'ลิงก์ของวีดีโอ',\n        insert: 'แทรกวีดีโอ',\n        url: 'ที่อยู่ URL ของวีดีโอ',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion หรือ Youku)'\n      },\n      link: {\n        link: 'ตัวเชื่อมโยง',\n        insert: 'แทรกตัวเชื่อมโยง',\n        unlink: 'ยกเลิกตัวเชื่อมโยง',\n        edit: 'แก้ไข',\n        textToDisplay: 'ข้อความที่ให้แสดง',\n        url: 'ที่อยู่เว็บไซต์ที่ต้องการให้เชื่อมโยงไปถึง?',\n        openInNewWindow: 'เปิดในหน้าต่างใหม่'\n      },\n      table: {\n        table: 'ตาราง',\n        addRowAbove: 'เพิ่มแถวด้านบน',\n        addRowBelow: 'เพิ่มแถวด้านล่าง',\n        addColLeft: 'เพิ่มคอลัมน์ด้านซ้าย',\n        addColRight: 'เพิ่มคอลัมน์ด้านขวา',\n        delRow: 'ลบแถว',\n        delCol: 'ลบคอลัมน์',\n        delTable: 'ลบตาราง'\n      },\n      hr: {\n        insert: 'แทรกเส้นคั่น'\n      },\n      style: {\n        style: 'รูปแบบ',\n        p: 'ปกติ',\n        blockquote: 'ข้อความ',\n        pre: 'โค้ด',\n        h1: 'หัวข้อ 1',\n        h2: 'หัวข้อ 2',\n        h3: 'หัวข้อ 3',\n        h4: 'หัวข้อ 4',\n        h5: 'หัวข้อ 5',\n        h6: 'หัวข้อ 6'\n      },\n      lists: {\n        unordered: 'รายการแบบไม่มีลำดับ',\n        ordered: 'รายการแบบมีลำดับ'\n      },\n      options: {\n        help: 'ช่วยเหลือ',\n        fullscreen: 'ขยายเต็มหน้าจอ',\n        codeview: 'ซอร์สโค้ด'\n      },\n      paragraph: {\n        paragraph: 'ย่อหน้า',\n        outdent: 'เยื้องซ้าย',\n        indent: 'เยื้องขวา',\n        left: 'จัดหน้าชิดซ้าย',\n        center: 'จัดหน้ากึ่งกลาง',\n        right: 'จัดหน้าชิดขวา',\n        justify: 'จัดบรรทัดเสมอกัน'\n      },\n      color: {\n        recent: 'สีที่ใช้ล่าสุด',\n        more: 'สีอื่นๆ',\n        background: 'สีพื้นหลัง',\n        foreground: 'สีพื้นหน้า',\n        transparent: 'โปร่งแสง',\n        setTransparent: 'ตั้งค่าความโปร่งแสง',\n        reset: 'คืนค่า',\n        resetToDefault: 'คืนค่ามาตรฐาน'\n      },\n      shortcut: {\n        shortcuts: 'แป้นลัด',\n        close: 'ปิด',\n        textFormatting: 'การจัดรูปแบบข้อความ',\n        action: 'การกระทำ',\n        paragraphFormatting: 'การจัดรูปแบบย่อหน้า',\n        documentStyle: 'รูปแบบของเอกสาร',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'ทำตัวหนา',\n        'italic': 'ทำตัวเอียง',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H1',\n        'formatH2': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H2',\n        'formatH3': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H3',\n        'formatH4': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H4',\n        'formatH5': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H5',\n        'formatH6': 'เปลี่ยนรูปแบบบล็อคปัจจุบันเป็น H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'เปิดหน้าแก้ไข Link'\n      },\n      history: {\n        undo: 'ยกเลิกการกระทำ',\n        redo: 'ทำซ้ำการกระทำ'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-th-TH.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-tr-TR.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 45);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 45:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'tr-TR': {\n      font: {\n        bold: 'Kalın',\n        italic: 'İtalik',\n        underline: 'Altı çizili',\n        clear: 'Temizle',\n        height: 'Satır yüksekliği',\n        name: 'Yazı Tipi',\n        strikethrough: 'Üstü çizili',\n        subscript: 'Alt Simge',\n        superscript: 'Üst Simge',\n        size: 'Yazı tipi boyutu'\n      },\n      image: {\n        image: 'Resim',\n        insert: 'Resim ekle',\n        resizeFull: 'Orjinal boyut',\n        resizeHalf: '1/2 boyut',\n        resizeQuarter: '1/4 boyut',\n        floatLeft: 'Sola hizala',\n        floatRight: 'Sağa hizala',\n        floatNone: 'Hizalamayı kaldır',\n        shapeRounded: 'Şekil: Yuvarlatılmış Köşe',\n        shapeCircle: 'Şekil: Daire',\n        shapeThumbnail: 'Şekil: K.Resim',\n        shapeNone: 'Şekil: Yok',\n        dragImageHere: 'Buraya sürükleyin',\n        dropImage: 'Resim veya metni bırakın',\n        selectFromFiles: 'Dosya seçin',\n        maximumFileSize: 'Maksimum dosya boyutu',\n        maximumFileSizeError: 'Maksimum dosya boyutu aşıldı.',\n        url: 'Resim bağlantısı',\n        remove: 'Resimi Kaldır',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video bağlantısı',\n        insert: 'Video ekle',\n        url: 'Video bağlantısı?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion veya Youku)'\n      },\n      link: {\n        link: 'Bağlantı',\n        insert: 'Bağlantı ekle',\n        unlink: 'Bağlantıyı kaldır',\n        edit: 'Bağlantıyı düzenle',\n        textToDisplay: 'Görüntülemek için',\n        url: 'Bağlantı adresi?',\n        openInNewWindow: 'Yeni pencerede aç'\n      },\n      table: {\n        table: 'Tablo',\n        addRowAbove: 'Yukarı satır ekle',\n        addRowBelow: 'Aşağı satır ekle',\n        addColLeft: 'Sola sütun ekle',\n        addColRight: 'Sağa sütun ekle',\n        delRow: 'Satırı sil',\n        delCol: 'Sütunu sil',\n        delTable: 'Tabloyu sil'\n      },\n      hr: {\n        insert: 'Yatay çizgi ekle'\n      },\n      style: {\n        style: 'Biçim',\n        p: 'p',\n        blockquote: 'Alıntı',\n        pre: 'Önbiçimli',\n        h1: 'Başlık 1',\n        h2: 'Başlık 2',\n        h3: 'Başlık 3',\n        h4: 'Başlık 4',\n        h5: 'Başlık 5',\n        h6: 'Başlık 6'\n      },\n      lists: {\n        unordered: 'Madde işaretli liste',\n        ordered: 'Numaralı liste'\n      },\n      options: {\n        help: 'Yardım',\n        fullscreen: 'Tam ekran',\n        codeview: 'HTML Kodu'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Girintiyi artır',\n        indent: 'Girintiyi azalt',\n        left: 'Sola hizala',\n        center: 'Ortaya hizala',\n        right: 'Sağa hizala',\n        justify: 'Yasla'\n      },\n      color: {\n        recent: 'Son renk',\n        more: 'Daha fazla renk',\n        background: 'Arka plan rengi',\n        foreground: 'Yazı rengi',\n        transparent: 'Seffaflık',\n        setTransparent: 'Şeffaflığı ayarla',\n        reset: 'Sıfırla',\n        resetToDefault: 'Varsayılanlara sıfırla'\n      },\n      shortcut: {\n        shortcuts: 'Kısayollar',\n        close: 'Kapat',\n        textFormatting: 'Yazı biçimlendirme',\n        action: 'Eylem',\n        paragraphFormatting: 'Paragraf biçimlendirme',\n        documentStyle: 'Biçim',\n        extraKeys: 'İlave anahtarlar'\n      },\n      help: {\n        'insertParagraph': 'Paragraf ekler',\n        'undo': 'Son komudu geri alır',\n        'redo': 'Son komudu yineler',\n        'tab': 'Girintiyi artırır',\n        'untab': 'Girintiyi azaltır',\n        'bold': 'Kalın yazma stilini ayarlar',\n        'italic': 'İtalik yazma stilini ayarlar',\n        'underline': 'Altı çizgili yazma stilini ayarlar',\n        'strikethrough': 'Üstü çizgili yazma stilini ayarlar',\n        'removeFormat': 'Biçimlendirmeyi temizler',\n        'justifyLeft': 'Yazıyı sola hizalar',\n        'justifyCenter': 'Yazıyı ortalar',\n        'justifyRight': 'Yazıyı sağa hizalar',\n        'justifyFull': 'Yazıyı her iki tarafa yazlar',\n        'insertUnorderedList': 'Madde işaretli liste ekler',\n        'insertOrderedList': 'Numaralı liste ekler',\n        'outdent': 'Aktif paragrafın girintisini azaltır',\n        'indent': 'Aktif paragrafın girintisini artırır',\n        'formatPara': 'Aktif bloğun biçimini paragraf (p) olarak değiştirir',\n        'formatH1': 'Aktif bloğun biçimini başlık 1 (h1) olarak değiştirir',\n        'formatH2': 'Aktif bloğun biçimini başlık 2 (h2) olarak değiştirir',\n        'formatH3': 'Aktif bloğun biçimini başlık 3 (h3) olarak değiştirir',\n        'formatH4': 'Aktif bloğun biçimini başlık 4 (h4) olarak değiştirir',\n        'formatH5': 'Aktif bloğun biçimini başlık 5 (h5) olarak değiştirir',\n        'formatH6': 'Aktif bloğun biçimini başlık 6 (h6) olarak değiştirir',\n        'insertHorizontalRule': 'Yatay çizgi ekler',\n        'linkDialog.show': 'Bağlantı ayar kutusunu gösterir'\n      },\n      history: {\n        undo: 'Geri al',\n        redo: 'Yinele'\n      },\n      specialChar: {\n        specialChar: 'ÖZEL KARAKTERLER',\n        select: 'Özel Karakterleri seçin'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-tr-TR.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-uk-UA.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 46);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 46:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'uk-UA': {\n      font: {\n        bold: 'Напівжирний',\n        italic: 'Курсив',\n        underline: 'Підкреслений',\n        clear: 'Прибрати стилі шрифту',\n        height: 'Висота лінії',\n        name: 'Шрифт',\n        strikethrough: 'Закреслений',\n        subscript: 'Нижній індекс',\n        superscript: 'Верхній індекс',\n        size: 'Розмір шрифту'\n      },\n      image: {\n        image: 'Картинка',\n        insert: 'Вставити картинку',\n        resizeFull: 'Відновити розмір',\n        resizeHalf: 'Зменшити до 50%',\n        resizeQuarter: 'Зменшити до 25%',\n        floatLeft: 'Розташувати ліворуч',\n        floatRight: 'Розташувати праворуч',\n        floatNone: 'Початкове розташування',\n        shapeRounded: 'Форма: Заокруглена',\n        shapeCircle: 'Форма: Коло',\n        shapeThumbnail: 'Форма: Мініатюра',\n        shapeNone: 'Форма: Немає',\n        dragImageHere: 'Перетягніть сюди картинку',\n        dropImage: 'Перетягніть картинку',\n        selectFromFiles: 'Вибрати з файлів',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL картинки',\n        remove: 'Видалити картинку',\n        original: 'Original'\n      },\n      video: {\n        video: 'Відео',\n        videoLink: 'Посилання на відео',\n        insert: 'Вставити відео',\n        url: 'URL відео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion чи Youku)'\n      },\n      link: {\n        link: 'Посилання',\n        insert: 'Вставити посилання',\n        unlink: 'Прибрати посилання',\n        edit: 'Редагувати',\n        textToDisplay: 'Текст, що відображається',\n        url: 'URL для переходу',\n        openInNewWindow: 'Відкривати у новому вікні'\n      },\n      table: {\n        table: 'Таблиця',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Вставити горизонтальну лінію'\n      },\n      style: {\n        style: 'Стиль',\n        p: 'Нормальний',\n        blockquote: 'Цитата',\n        pre: 'Код',\n        h1: 'Заголовок 1',\n        h2: 'Заголовок 2',\n        h3: 'Заголовок 3',\n        h4: 'Заголовок 4',\n        h5: 'Заголовок 5',\n        h6: 'Заголовок 6'\n      },\n      lists: {\n        unordered: 'Маркований список',\n        ordered: 'Нумерований список'\n      },\n      options: {\n        help: 'Допомога',\n        fullscreen: 'На весь екран',\n        codeview: 'Початковий код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Зменшити відступ',\n        indent: 'Збільшити відступ',\n        left: 'Вирівняти по лівому краю',\n        center: 'Вирівняти по центру',\n        right: 'Вирівняти по правому краю',\n        justify: 'Розтягнути по ширині'\n      },\n      color: {\n        recent: 'Останній колір',\n        more: 'Ще кольори',\n        background: 'Колір фону',\n        foreground: 'Колір шрифту',\n        transparent: 'Прозорий',\n        setTransparent: 'Зробити прозорим',\n        reset: 'Відновити',\n        resetToDefault: 'Відновити початкові'\n      },\n      shortcut: {\n        shortcuts: 'Комбінації клавіш',\n        close: 'Закрити',\n        textFormatting: 'Форматування тексту',\n        action: 'Дія',\n        paragraphFormatting: 'Форматування параграфу',\n        documentStyle: 'Стиль документу',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Відмінити',\n        redo: 'Повторити'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-uk-UA.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-uz-UZ.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 47);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 47:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'uz-UZ': {\n      font: {\n        bold: 'қалин',\n        italic: 'Курсив',\n        underline: 'Белгиланган',\n        clear: 'Ҳарф турларини олиб ташлаш',\n        height: 'Чизиқ баландлиги',\n        name: 'Ҳарф',\n        strikethrough: 'Ўчирилган',\n        subscript: 'Пастки индекс',\n        superscript: 'Юқори индекс',\n        size: 'ҳарф ҳажми'\n      },\n      image: {\n        image: 'Расм',\n        insert: 'расмни қўйиш',\n        resizeFull: 'Ҳажмни тиклаш',\n        resizeHalf: '50% гача кичрайтириш',\n        resizeQuarter: '25% гача кичрайтириш',\n        floatLeft: 'Чапда жойлаштириш',\n        floatRight: 'Ўнгда жойлаштириш',\n        floatNone: 'Стандарт бўйича жойлашув',\n        shapeRounded: 'Шакли: Юмалоқ',\n        shapeCircle: 'Шакли: Доира',\n        shapeThumbnail: 'Шакли: Миниатюра',\n        shapeNone: 'Шакли: Йўқ',\n        dragImageHere: 'Суратни кўчириб ўтинг',\n        dropImage: 'Суратни кўчириб ўтинг',\n        selectFromFiles: 'Файллардан бирини танлаш',\n        url: 'суратлар URL и',\n        remove: 'Суратни ўчириш'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Видеога ҳавола',\n        insert: 'Видео',\n        url: 'URL видео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'\n      },\n      link: {\n        link: 'Ҳавола',\n        insert: 'Ҳаволани қўйиш',\n        unlink: 'Ҳаволани олиб ташлаш',\n        edit: 'Таҳрир қилиш',\n        textToDisplay: 'Кўринадиган матн',\n        url: 'URL ўтиш учун',\n        openInNewWindow: 'Янги дарчада очиш'\n      },\n      table: {\n        table: 'Жадвал'\n      },\n      hr: {\n        insert: 'Горизонтал чизиқни қўйиш'\n      },\n      style: {\n        style: 'Услуб',\n        p: 'Яхши',\n        blockquote: 'Жумла',\n        pre: 'Код',\n        h1: 'Сарлавҳа 1',\n        h2: 'Сарлавҳа  2',\n        h3: 'Сарлавҳа  3',\n        h4: 'Сарлавҳа  4',\n        h5: 'Сарлавҳа  5',\n        h6: 'Сарлавҳа  6'\n      },\n      lists: {\n        unordered: 'Белгиланган рўйҳат',\n        ordered: 'Рақамланган рўйҳат'\n      },\n      options: {\n        help: 'Ёрдам',\n        fullscreen: 'Бутун экран бўйича',\n        codeview: 'Бошланғич код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Орқага қайтишни камайтириш',\n        indent: 'Орқага қайтишни кўпайтириш',\n        left: 'Чап қирғоққа тўғрилаш',\n        center: 'Марказга тўғрилаш',\n        right: 'Ўнг қирғоққа тўғрилаш',\n        justify: 'Эни бўйлаб чўзиш'\n      },\n      color: {\n        recent: 'Охирги ранг',\n        more: 'Яна ранглар',\n        background: 'Фон  ранги',\n        foreground: 'Ҳарф ранги',\n        transparent: 'Шаффоф',\n        setTransparent: 'Шаффофдай қилиш',\n        reset: 'Бекор қилиш',\n        resetToDefault: 'Стандартга оид тиклаш'\n      },\n      shortcut: {\n        shortcuts: 'Клавишларнинг ҳамохҳанглиги',\n        close: 'Ёпиқ',\n        textFormatting: 'Матнни ',\n        action: 'Ҳаркат',\n        paragraphFormatting: 'Параграфни форматлаш',\n        documentStyle: 'Ҳужжатнинг тури',\n        extraKeys: 'Қўшимча имкониятлар'\n      },\n      history: {\n        undo: 'Бекор қилиш',\n        redo: 'Қайтариш'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-uz-UZ.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-vi-VN.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 48);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 48:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'vi-VN': {\n      font: {\n        bold: 'In Đậm',\n        italic: 'In Nghiêng',\n        underline: 'Gạch dưới',\n        clear: 'Bỏ định dạng',\n        height: 'Chiều cao dòng',\n        name: 'Phông chữ',\n        strikethrough: 'Gạch ngang',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Cỡ chữ'\n      },\n      image: {\n        image: 'Hình ảnh',\n        insert: 'Chèn',\n        resizeFull: '100%',\n        resizeHalf: '50%',\n        resizeQuarter: '25%',\n        floatLeft: 'Trôi về trái',\n        floatRight: 'Trôi về phải',\n        floatNone: 'Không trôi',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Thả Ảnh ở vùng này',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Chọn từ File',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'URL',\n        remove: 'Xóa',\n        original: 'Original'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link đến Video',\n        insert: 'Chèn Video',\n        url: 'URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion và Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Chèn Link',\n        unlink: 'Gỡ Link',\n        edit: 'Sửa',\n        textToDisplay: 'Văn bản hiển thị',\n        url: 'URL',\n        openInNewWindow: 'Mở ở Cửa sổ mới'\n      },\n      table: {\n        table: 'Bảng',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: 'Chèn'\n      },\n      style: {\n        style: 'Kiểu chữ',\n        p: 'Chữ thường',\n        blockquote: 'Đoạn trích',\n        pre: 'Mã Code',\n        h1: 'H1',\n        h2: 'H2',\n        h3: 'H3',\n        h4: 'H4',\n        h5: 'H5',\n        h6: 'H6'\n      },\n      lists: {\n        unordered: 'Liệt kê danh sách',\n        ordered: 'Liệt kê theo thứ tự'\n      },\n      options: {\n        help: 'Trợ giúp',\n        fullscreen: 'Toàn Màn hình',\n        codeview: 'Xem Code'\n      },\n      paragraph: {\n        paragraph: 'Canh lề',\n        outdent: 'Dịch sang trái',\n        indent: 'Dịch sang phải',\n        left: 'Canh trái',\n        center: 'Canh giữa',\n        right: 'Canh phải',\n        justify: 'Canh đều'\n      },\n      color: {\n        recent: 'Màu chữ',\n        more: 'Mở rộng',\n        background: 'Màu nền',\n        foreground: 'Màu chữ',\n        transparent: 'trong suốt',\n        setTransparent: 'Nền trong suốt',\n        reset: 'Thiết lập lại',\n        resetToDefault: 'Trở lại ban đầu'\n      },\n      shortcut: {\n        shortcuts: 'Phím tắt',\n        close: 'Đóng',\n        textFormatting: 'Định dạng Văn bản',\n        action: 'Hành động',\n        paragraphFormatting: 'Định dạng',\n        documentStyle: 'Kiểu văn bản',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Lùi lại',\n        redo: 'Làm lại'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-vi-VN.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-zh-CN.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 49);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 49:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'zh-CN': {\n      font: {\n        bold: '粗体',\n        italic: '斜体',\n        underline: '下划线',\n        clear: '清除格式',\n        height: '行高',\n        name: '字体',\n        strikethrough: '删除线',\n        subscript: '下标',\n        superscript: '上标',\n        size: '字号'\n      },\n      image: {\n        image: '图片',\n        insert: '插入图片',\n        resizeFull: '缩放至 100%',\n        resizeHalf: '缩放至 50%',\n        resizeQuarter: '缩放至 25%',\n        floatLeft: '靠左浮动',\n        floatRight: '靠右浮动',\n        floatNone: '取消浮动',\n        shapeRounded: '形状: 圆角',\n        shapeCircle: '形状: 圆',\n        shapeThumbnail: '形状: 缩略图',\n        shapeNone: '形状: 无',\n        dragImageHere: '将图片拖拽至此处',\n        dropImage: '拖拽图片或文本',\n        selectFromFiles: '从本地上传',\n        maximumFileSize: '文件大小最大值',\n        maximumFileSizeError: '文件大小超出最大值。',\n        url: '图片地址',\n        remove: '移除图片',\n        original: '原始图片'\n      },\n      video: {\n        video: '视频',\n        videoLink: '视频链接',\n        insert: '插入视频',\n        url: '视频地址',\n        providers: '(优酷, 腾讯, Instagram, DailyMotion, Youtube等)'\n      },\n      link: {\n        link: '链接',\n        insert: '插入链接',\n        unlink: '去除链接',\n        edit: '编辑链接',\n        textToDisplay: '显示文本',\n        url: '链接地址',\n        openInNewWindow: '在新窗口打开'\n      },\n      table: {\n        table: '表格',\n        addRowAbove: '在上方插入行',\n        addRowBelow: '在下方插入行',\n        addColLeft: '在左侧插入列',\n        addColRight: '在右侧插入列',\n        delRow: '删除行',\n        delCol: '删除列',\n        delTable: '删除表格'\n      },\n      hr: {\n        insert: '水平线'\n      },\n      style: {\n        style: '样式',\n        p: '普通',\n        blockquote: '引用',\n        pre: '代码',\n        h1: '标题 1',\n        h2: '标题 2',\n        h3: '标题 3',\n        h4: '标题 4',\n        h5: '标题 5',\n        h6: '标题 6'\n      },\n      lists: {\n        unordered: '无序列表',\n        ordered: '有序列表'\n      },\n      options: {\n        help: '帮助',\n        fullscreen: '全屏',\n        codeview: '源代码'\n      },\n      paragraph: {\n        paragraph: '段落',\n        outdent: '减少缩进',\n        indent: '增加缩进',\n        left: '左对齐',\n        center: '居中对齐',\n        right: '右对齐',\n        justify: '两端对齐'\n      },\n      color: {\n        recent: '最近使用',\n        more: '更多',\n        background: '背景',\n        foreground: '前景',\n        transparent: '透明',\n        setTransparent: '透明',\n        reset: '重置',\n        resetToDefault: '默认'\n      },\n      shortcut: {\n        shortcuts: '快捷键',\n        close: '关闭',\n        textFormatting: '文本格式',\n        action: '动作',\n        paragraphFormatting: '段落格式',\n        documentStyle: '文档样式',\n        extraKeys: '额外按键'\n      },\n      help: {\n        insertParagraph: '插入段落',\n        undo: '撤销',\n        redo: '重做',\n        tab: '增加缩进',\n        untab: '减少缩进',\n        bold: '粗体',\n        italic: '斜体',\n        underline: '下划线',\n        strikethrough: '删除线',\n        removeFormat: '清除格式',\n        justifyLeft: '左对齐',\n        justifyCenter: '居中对齐',\n        justifyRight: '右对齐',\n        justifyFull: '两端对齐',\n        insertUnorderedList: '无序列表',\n        insertOrderedList: '有序列表',\n        outdent: '减少缩进',\n        indent: '增加缩进',\n        formatPara: '设置选中内容样式为 普通',\n        formatH1: '设置选中内容样式为 标题1',\n        formatH2: '设置选中内容样式为 标题2',\n        formatH3: '设置选中内容样式为 标题3',\n        formatH4: '设置选中内容样式为 标题4',\n        formatH5: '设置选中内容样式为 标题5',\n        formatH6: '设置选中内容样式为 标题6',\n        insertHorizontalRule: '插入水平线',\n        'linkDialog.show': '显示链接对话框'\n      },\n      history: {\n        undo: '撤销',\n        redo: '重做'\n      },\n      specialChar: {\n        specialChar: '特殊字符',\n        select: '选取特殊字符'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-zh-CN.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-zh-TW.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 50);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 50:\n/***/ (function(module, exports) {\n\n(function ($) {\n  $.extend($.summernote.lang, {\n    'zh-TW': {\n      font: {\n        bold: '粗體',\n        italic: '斜體',\n        underline: '底線',\n        clear: '清除格式',\n        height: '行高',\n        name: '字體',\n        strikethrough: '刪除線',\n        subscript: '下標',\n        superscript: '上標',\n        size: '字號'\n      },\n      image: {\n        image: '圖片',\n        insert: '插入圖片',\n        resizeFull: '縮放至100%',\n        resizeHalf: '縮放至 50%',\n        resizeQuarter: '縮放至 25%',\n        floatLeft: '靠左浮動',\n        floatRight: '靠右浮動',\n        floatNone: '取消浮動',\n        shapeRounded: '形狀: 圓角',\n        shapeCircle: '形狀: 圓',\n        shapeThumbnail: '形狀: 縮略圖',\n        shapeNone: '形狀: 無',\n        dragImageHere: '將圖片拖曳至此處',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: '從本機上傳',\n        maximumFileSize: '文件大小最大值',\n        maximumFileSizeError: '文件大小超出最大值。',\n        url: '圖片網址',\n        remove: '移除圖片',\n        original: 'Original'\n      },\n      video: {\n        video: '影片',\n        videoLink: '影片連結',\n        insert: '插入影片',\n        url: '影片網址',\n        providers: '(優酷, Instagram, DailyMotion, Youtube等)'\n      },\n      link: {\n        link: '連結',\n        insert: '插入連結',\n        unlink: '取消連結',\n        edit: '編輯連結',\n        textToDisplay: '顯示文字',\n        url: '連結網址',\n        openInNewWindow: '在新視窗開啟'\n      },\n      table: {\n        table: '表格',\n        addRowAbove: 'Add row above',\n        addRowBelow: 'Add row below',\n        addColLeft: 'Add column left',\n        addColRight: 'Add column right',\n        delRow: 'Delete row',\n        delCol: 'Delete column',\n        delTable: 'Delete table'\n      },\n      hr: {\n        insert: '水平線'\n      },\n      style: {\n        style: '樣式',\n        p: '一般',\n        blockquote: '引用區塊',\n        pre: '程式碼區塊',\n        h1: '標題 1',\n        h2: '標題 2',\n        h3: '標題 3',\n        h4: '標題 4',\n        h5: '標題 5',\n        h6: '標題 6'\n      },\n      lists: {\n        unordered: '項目清單',\n        ordered: '編號清單'\n      },\n      options: {\n        help: '幫助',\n        fullscreen: '全螢幕',\n        codeview: '原始碼'\n      },\n      paragraph: {\n        paragraph: '段落',\n        outdent: '取消縮排',\n        indent: '增加縮排',\n        left: '靠右對齊',\n        center: '靠中對齊',\n        right: '靠右對齊',\n        justify: '左右對齊'\n      },\n      color: {\n        recent: '字型顏色',\n        more: '更多',\n        background: '背景',\n        foreground: '前景',\n        transparent: '透明',\n        setTransparent: '透明',\n        reset: '重設',\n        resetToDefault: '默認'\n      },\n      shortcut: {\n        shortcuts: '快捷鍵',\n        close: '關閉',\n        textFormatting: '文字格式',\n        action: '動作',\n        paragraphFormatting: '段落格式',\n        documentStyle: '文件格式',\n        extraKeys: '額外按鍵'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: '復原',\n        redo: '取消復原'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n})(jQuery);\n\n/***/ })\n\n/******/ });\n});"
  },
  {
    "path": "public/vendor/summernote/lang/summernote-zh-TW.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/plugin/databasic/summernote-ext-databasic.css",
    "content": ".ext-databasic {\n\tposition: relative;\n\tdisplay: block;\n\tmin-height: 50px;\n\tbackground-color: cyan;\n\ttext-align: center;\n\tpadding: 20px;\n\tborder: 1px solid white;\n\tborder-radius: 10px;\n}\n\n.ext-databasic p {\n\tcolor: white;\n\tfont-size: 1.2em;\n\tmargin: 0;\n}\n"
  },
  {
    "path": "public/vendor/summernote/plugin/databasic/summernote-ext-databasic.js",
    "content": "(function(factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function($) {\n  // pull in some summernote core functions\n  var ui = $.summernote.ui;\n  var dom = $.summernote.dom;\n\n  // define the popover plugin\n  var DataBasicPlugin = function(context) {\n    var self = this;\n    var options = context.options;\n    var lang = options.langInfo;\n\n    self.icon = '<i class=\"fa fa-object-group\"/>';\n\n    // add context menu button for dialog\n    context.memo('button.databasic', function() {\n      return ui.button({\n        contents: self.icon,\n        tooltip: lang.databasic.insert,\n        click: context.createInvokeHandler('databasic.showDialog'),\n      }).render();\n    });\n\n    // add popover edit button\n    context.memo('button.databasicDialog', function() {\n      return ui.button({\n        contents: self.icon,\n        tooltip: lang.databasic.edit,\n        click: context.createInvokeHandler('databasic.showDialog'),\n      }).render();\n    });\n\n    //  add popover size buttons\n    context.memo('button.databasicSize100', function() {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">100%</span>',\n        tooltip: lang.image.resizeFull,\n        click: context.createInvokeHandler('editor.resize', '1'),\n      }).render();\n    });\n    context.memo('button.databasicSize50', function() {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">50%</span>',\n        tooltip: lang.image.resizeHalf,\n        click: context.createInvokeHandler('editor.resize', '0.5'),\n      }).render();\n    });\n    context.memo('button.databasicSize25', function() {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">25%</span>',\n        tooltip: lang.image.resizeQuarter,\n        click: context.createInvokeHandler('editor.resize', '0.25'),\n      }).render();\n    });\n\n    self.events = {\n      'summernote.init': function(we, e) {\n        // update existing containers\n        $('data.ext-databasic', e.editable).each(function() { self.setContent($(this)); });\n        // TODO: make this an undo snapshot...\n      },\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function() {\n        self.update();\n      },\n      'summernote.dialog.shown': function() {\n        self.hidePopover();\n      },\n    };\n\n    self.initialize = function() {\n      // create dialog markup\n      var $container = options.dialogsInBody ? $(document.body) : context.layoutInfo.editor;\n\n      var body = '<div class=\"form-group row-fluid\">' +\n          '<label>' + lang.databasic.testLabel + '</label>' +\n          '<input class=\"ext-databasic-test form-control\" type=\"text\" />' +\n          '</div>';\n      var footer = '<button href=\"#\" class=\"btn btn-primary ext-databasic-save\">' + lang.databasic.insert + '</button>';\n\n      self.$dialog = ui.dialog({\n        title: lang.databasic.name,\n        fade: options.dialogsFade,\n        body: body,\n        footer: footer,\n      }).render().appendTo($container);\n\n      // create popover\n      self.$popover = ui.popover({\n        className: 'ext-databasic-popover',\n      }).render().appendTo('body');\n      var $content = self.$popover.find('.popover-content');\n\n      context.invoke('buttons.build', $content, options.popover.databasic);\n    };\n\n    self.destroy = function() {\n      self.$popover.remove();\n      self.$popover = null;\n      self.$dialog.remove();\n      self.$dialog = null;\n    };\n\n    self.update = function() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!context.invoke('editor.hasFocus')) {\n        self.hidePopover();\n        return;\n      }\n\n      var rng = context.invoke('editor.createRange');\n      var visible = false;\n\n      if (rng.isOnData()) {\n        var $data = $(rng.sc).closest('data.ext-databasic');\n\n        if ($data.length) {\n          var pos = dom.posFromPlaceholder($data[0]);\n\n          self.$popover.css({\n            display: 'block',\n            left: pos.left,\n            top: pos.top,\n          });\n\n          // save editor target to let size buttons resize the container\n          context.invoke('editor.saveTarget', $data[0]);\n\n          visible = true;\n        }\n      }\n\n      // hide if not visible\n      if (!visible) {\n        self.hidePopover();\n      }\n    };\n\n    self.hidePopover = function() {\n      self.$popover.hide();\n    };\n\n    // define plugin dialog\n    self.getInfo = function() {\n      var rng = context.invoke('editor.createRange');\n\n      if (rng.isOnData()) {\n        var $data = $(rng.sc).closest('data.ext-databasic');\n\n        if ($data.length) {\n          // Get the first node on range(for edit).\n          return {\n            node: $data,\n            test: $data.attr('data-test'),\n          };\n        }\n      }\n\n      return {};\n    };\n\n    self.setContent = function($node) {\n      $node.html('<p contenteditable=\"false\">' + self.icon + ' ' + lang.databasic.name + ': ' +\n        $node.attr('data-test') + '</p>');\n    };\n\n    self.updateNode = function(info) {\n      self.setContent(info.node\n        .attr('data-test', info.test));\n    };\n\n    self.createNode = function(info) {\n      var $node = $('<data class=\"ext-databasic\"></data>');\n\n      if ($node) {\n        // save node to info structure\n        info.node = $node;\n        // insert node into editor dom\n        context.invoke('editor.insertNode', $node[0]);\n      }\n\n      return $node;\n    };\n\n    self.showDialog = function() {\n      var info = self.getInfo();\n      var newNode = !info.node;\n      context.invoke('editor.saveRange');\n\n      self\n        .openDialog(info)\n        .then(function(dialogInfo) {\n          // [workaround] hide dialog before restore range for IE range focus\n          ui.hideDialog(self.$dialog);\n          context.invoke('editor.restoreRange');\n\n          // insert a new node\n          if (newNode) {\n            self.createNode(info);\n          }\n\n          // update info with dialog info\n          $.extend(info, dialogInfo);\n\n          self.updateNode(info);\n        })\n        .fail(function() {\n          context.invoke('editor.restoreRange');\n        });\n    };\n\n    self.openDialog = function(info) {\n      return $.Deferred(function(deferred) {\n        var $inpTest = self.$dialog.find('.ext-databasic-test');\n        var $saveBtn = self.$dialog.find('.ext-databasic-save');\n        var onKeyup = function(event) {\n          if (event.keyCode === 13) {\n            $saveBtn.trigger('click');\n          }\n        };\n\n        ui.onDialogShown(self.$dialog, function() {\n          context.triggerEvent('dialog.shown');\n\n          $inpTest.val(info.test).on('input', function() {\n            ui.toggleBtn($saveBtn, $inpTest.val());\n          }).trigger('focus').on('keyup', onKeyup);\n\n          $saveBtn\n            .text(info.node ? lang.databasic.edit : lang.databasic.insert)\n            .click(function(event) {\n              event.preventDefault();\n\n              deferred.resolve({ test: $inpTest.val() });\n            });\n\n          // init save button\n          ui.toggleBtn($saveBtn, $inpTest.val());\n        });\n\n        ui.onDialogHidden(self.$dialog, function() {\n          $inpTest.off('input keyup');\n          $saveBtn.off('click');\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        ui.showDialog(self.$dialog);\n      });\n    };\n  };\n\n  // Extends summernote\n  $.extend(true, $.summernote, {\n    plugins: {\n      databasic: DataBasicPlugin,\n    },\n\n    options: {\n      popover: {\n        databasic: [\n          ['databasic', ['databasicDialog', 'databasicSize100', 'databasicSize50', 'databasicSize25']],\n        ],\n      },\n    },\n\n    // add localization texts\n    lang: {\n      'en-US': {\n        databasic: {\n          name: 'Basic Data Container',\n          insert: 'insert basic data container',\n          edit: 'edit basic data container',\n          testLabel: 'test input',\n        },\n      },\n    },\n\n  });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/plugin/embed/summernote-embed-plugin.js",
    "content": "(function(factory) {\n    /* global define */\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = factory(require('jquery'));\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function($) {\n\n    var embedPlugin = function(context) {\n        var self = this;\n\n        var options = context.options;\n        var isIncludedInToolbar = false;\n\n        for (var idx in options.toolbar) {\n            // toolbar => [groupName, [list of button]]\n            var buttons = options.toolbar[idx][1];\n            if ($.inArray('embed', buttons) > -1) {\n                isIncludedInToolbar = true;\n                break;\n            }\n        }\n\n        if (!isIncludedInToolbar) {\n            return;\n        }\n\n        var ui = $.summernote.ui;\n        var $editor = context.layoutInfo.editor;\n        var lang = options.langInfo;\n\n        // Create an embed button to be used in the toolbar\n        context.memo('button.embed', function() {\n            var button = ui.button({\n                contents: \"<i class='fas fa-photo-video'/>\",\n                tooltip: lang.embedButton.tooltip,\n                click: function(e) {\n                    self.show();\n                }\n            });\n\n            return button.render();\n        });\n\n        this.createEmbedDialog = function($container) {\n            var dialogOption = {\n                title: lang.embedDialog.title,\n                body: '<div class=\"form-group\">' +\n                    '<label>' + lang.embedDialog.label + '</label>' +\n                    '<input id=\"input-autocomplete\" class=\"form-control\" type=\"text\" placeholder=\"' + lang.embedDialog.placeholder + '\" />' +\n                    '<p class=\"help-block\">' + lang.embedDialog.help + '</p>' +\n                    '</div>',\n                footer: '<button href=\"#\" id=\"btn-add\" class=\"btn btn-primary\">' + lang.embedDialog.button + '</button>',\n                closeOnEscape: true\n            };\n\n            self.$dialog = ui.dialog(dialogOption).render().appendTo($container);\n            self.$dialog.css({\n                \"height\": \"100%\"\n            });\n            self.$addBtn = self.$dialog.find('#btn-add');\n            self.$embedInput = self.$dialog.find('#input-autocomplete')[0];\n        };\n\n        this.enableAddButton = function() {\n            if (self.$embedInput.value && self.$embedInput.value.length > 0) {\n                self.$addBtn.attr(\"disabled\", false);\n            } else {\n                self.disableAddButton();\n            }\n        };\n\n        this.disableAddButton = function() {\n            self.$addBtn.attr(\"disabled\", true);\n        };\n\n        this.initEmbed = function() {\n            self.enableAddButton();\n        };\n\n        this.showEmbedDialog = function() {\n            self.disableAddButton();\n            self.$embedInput.value = \"\";\n\n            return $.Deferred(function(deferred) {\n                const $embedInput = self.$dialog.find('#input-autocomplete');\n                const $embedAdd = self.$dialog.find('#btn-add');\n\n                ui.onDialogShown(self.$dialog, function() {\n                    context.triggerEvent('dialog.shown');\n                    self.$embedInput.focus();\n\n                    $embedInput.on('input paste propertychange', () => {\n                        self.enableAddButton();\n                    });\n\n                    self.$addBtn.click(function(event) {\n                        event.preventDefault();\n                        deferred.resolve({\n                            place: self.$embedInput.value\n                        });\n                    });\n                });\n\n                ui.onDialogHidden(self.$dialog, function() {\n                    self.$addBtn.off('click');\n                    if (deferred.state() === 'pending') {\n                        deferred.reject();\n                    }\n                });\n\n                ui.showDialog(self.$dialog);\n\n\n                self.bindEnterKey($embedInput, $embedAdd);\n            });\n        };\n\n        this.show = function() {\n            context.invoke('editor.saveRange');\n\n            self.showEmbedDialog()\n                .then(function(data) {\n                    context.invoke('editor.restoreRange');\n                    self.insertEmbedToEditor(data.place);\n                    ui.hideDialog(self.$dialog);\n                }).fail(function() {\n                context.invoke('editor.restoreRange');\n            });\n        };\n\n        this.insertEmbedToEditor = function(placeName) {\n            // Only insert if it's an embed\n            if (!/^<iframe/i.test(placeName)) {\n                return;\n            }\n\n            var $div = $('<div>');\n\n            $div.css({\n            });\n\n            $div.html(placeName)\n            context.invoke('editor.insertNode', $div[0]);\n        };\n\n        this.initialize = function() {\n            var $container = options.dialogsInBody ? $(document.body) : $editor;\n            self.createEmbedDialog($container);\n        };\n\n        this.destroy = function() {\n            ui.hideDialog(self.$dialog);\n            self.$dialog.remove();\n        };\n\n\n        this.bindEnterKey = function ($input, $btn) {\n            $input.on('keypress', function (event) {\n                if (event.keyCode === 13) {\n                    event.preventDefault();\n                    $btn.trigger('click');\n                }\n            });\n        };\n\n        // This events will be attached when editor is initialized.\n        this.events = {\n            // This will be called after modules are initialized.\n            'summernote.init': function(we, e) {\n                self.initEmbed();\n            }\n        };\n    };\n\n    $.extend(true, $.summernote, {\n        lang: {\n            'en-US': {\n                embedButton: {\n                    tooltip: \"Embed\"\n                },\n                embedDialog: {\n                    title: \"Insert Embed\",\n                    label: \"Embed script\",\n                    placeholder: \"<iframe src=''></iframe>\",\n                    button: \"Insert Embed\",\n                    help: \"Copy-Paste a Spotify, Youtube or Google Docs embed code in the above field.\",\n                }\n            },\n        },\n        plugins: {\n            'embed': embedPlugin\n        }\n    });\n\n}));\n\n"
  },
  {
    "path": "public/vendor/summernote/plugin/hello/summernote-ext-hello.js",
    "content": "(function(factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function($) {\n  // Extends plugins for adding hello.\n  //  - plugin is external module for customizing.\n  $.extend($.summernote.plugins, {\n    /**\n     * @param {Object} context - context object has status of editor.\n     */\n    'hello': function(context) {\n      var self = this;\n\n      // ui has renders to build ui elements.\n      //  - you can create a button with `ui.button`\n      var ui = $.summernote.ui;\n\n      // add hello button\n      context.memo('button.hello', function() {\n        // create button\n        var button = ui.button({\n          contents: '<i class=\"fa fa-child\"/> Hello',\n          tooltip: 'hello',\n          click: function() {\n            self.$panel.show();\n            self.$panel.hide(500);\n            // invoke insertText method with 'hello' on editor module.\n            context.invoke('editor.insertText', 'hello');\n          },\n        });\n\n        // create jQuery object from button instance.\n        var $hello = button.render();\n        return $hello;\n      });\n\n      // This events will be attached when editor is initialized.\n      this.events = {\n        // This will be called after modules are initialized.\n        'summernote.init': function(we, e) {\n          // eslint-disable-next-line\n          console.log('summernote initialized', we, e);\n        },\n        // This will be called when user releases a key on editable.\n        'summernote.keyup': function(we, e) {\n          // eslint-disable-next-line\n          console.log('summernote keyup', we, e);\n        },\n      };\n\n      // This method will be called when editor is initialized by $('..').summernote();\n      // You can create elements for plugin\n      this.initialize = function() {\n        this.$panel = $('<div class=\"hello-panel\"/>').css({\n          position: 'absolute',\n          width: 100,\n          height: 100,\n          left: '50%',\n          top: '50%',\n          background: 'red',\n        }).hide();\n\n        this.$panel.appendTo('body');\n      };\n\n      // This methods will be called when editor is destroyed by $('..').summernote('destroy');\n      // You should remove elements on `initialize`.\n      this.destroy = function() {\n        this.$panel.remove();\n        this.$panel = null;\n      };\n    },\n  });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/plugin/rtl/summernote-ext-rtl.js",
    "content": "(function(factory) {\n    /* global define */\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = factory(require('jquery'));\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function($) {\n    // Extends plugins for adding hello.\n    //  - plugin is external module for customizing.\n    $.extend($.summernote.plugins, {\n        /**\n         * @param {Object} context - context object has status of editor.\n         */\n        'rtl': function(context) {\n            var self = this;\n            var selection;\n            // ui has renders to build ui elements.\n            //  - you can create a button with `ui.button`\n            var ui = $.summernote.ui;\n            // add hello button\n            context.memo('button.rtl', function() {\n                // create button\n                var button = ui.button({\n                    contents: '<i class=\"fa fa-paragraph\"/><i class=\"fa fa-caret-left\"/>',\n                    tooltip: 'Change text direction to the right',\n                    click: function() {\n                        function clearSelection() {\n                            if (document.selection) {\n                                document.selection.empty();\n                            } else if (window.getSelection) {\n                                window.getSelection().removeAllRanges();\n                            }\n                        }\n\n                        function getHTMLOfSelection() {\n                            var range;\n                            if (document.selection && document.selection.createRange) {\n                                range = document.selection.createRange();\n                                return range.htmlText;\n                            } else if (window.getSelection) {\n                                selection = window.getSelection();\n                                if (selection.rangeCount > 0) {\n                                    range = selection.getRangeAt(0);\n                                    var clonedSelection = range.cloneContents();\n                                    var div = document.createElement('div');\n                                    div.appendChild(clonedSelection);\n                                    return div.innerHTML;\n                                } else {\n                                    return '';\n                                }\n                            } else {\n                                return '';\n                            }\n                        }\n                        var highlight = window.getSelection();\n                        var range = highlight.getRangeAt(0);\n                        var elementsClass = range.endContainer.parentElement;\n\n\n                        window.highlight = highlight;\n                        window.range = range;\n                        window.elementsClass = elementsClass;\n                        if (elementsClass.style.direction != \"rtl\" && elementsClass.style.direction != \"ltr\") {\n                            var spn = document.createElement('div');\n                            spn.innerHTML = getHTMLOfSelection();\n                            spn.style.direction = 'rtl';\n                            range.deleteContents();\n                            range.insertNode(spn);\n                        } else {\n                            elementsClass.style.direction = 'rtl';\n                            if($(elementsClass).is(\"li\")){\n                                direction = $(elementsClass).css('direction');\n                                $(elementsClass).parent().css('direction',direction);\n                            }\n                        }\n                        clearSelection();\n                    }\n                });\n                // create jQuery object from button instance.\n                var $rtl = button.render();\n                return $rtl;\n            });\n        },\n        'ltr': function(context) {\n            var self = this;\n            // ui has renders to build ui elements.\n            var ui = $.summernote.ui;\n            context.memo('button.ltr', function() {\n                // create button\n                var button = ui.button({\n                    contents: '<i class=\"fa fa-caret-right\"/><i class=\"fa fa-paragraph\"/>',\n                    tooltip: 'Change text direction to the left',\n                    click: function() {\n                        function clearSelection() {\n                            if (document.selection) {\n                                document.selection.empty();\n                            } else if (window.getSelection) {\n                                window.getSelection().removeAllRanges();\n                            }\n                        }\n\n                        function getHTMLOfSelection() {\n                            var range;\n                            if (document.selection && document.selection.createRange) {\n                                range = document.selection.createRange();\n                                return range.htmlText;\n                            } else if (window.getSelection) {\n                                selection = window.getSelection();\n                                if (selection.rangeCount > 0) {\n                                    range = selection.getRangeAt(0);\n                                    var clonedSelection = range.cloneContents();\n                                    var div = document.createElement('div');\n                                    div.appendChild(clonedSelection);\n                                    return div.innerHTML;\n                                } else {\n                                    return '';\n                                }\n                            } else {\n                                return '';\n                            }\n                        }\n                        var highlight = window.getSelection();\n                        var range = highlight.getRangeAt(0);\n                        var elementsClass = range.endContainer.parentElement;\n                        if (elementsClass.style.direction != \"rtl\" && elementsClass.style.direction != \"ltr\") {\n                            var spn = document.createElement('div');\n                            spn.innerHTML = getHTMLOfSelection();\n                            spn.style.direction = 'ltr';\n                            range.deleteContents();\n                            range.insertNode(spn);\n                        } else {\n                            elementsClass.style.direction = 'ltr';\n                            if($(elementsClass).is(\"li\")){\n                                direction = $(elementsClass).css('direction');\n                                $(elementsClass).parent().css('direction',direction);\n                            }\n                        }\n                        clearSelection();\n                    }\n                });\n                // create jQuery object from button instance.\n                var $ltr = button.render();\n                return $ltr;\n            });\n        }\n    });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/plugin/specialchars/summernote-ext-specialchars.js",
    "content": "(function(factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function($) {\n  $.extend($.summernote.plugins, {\n    'specialchars': function(context) {\n      var self = this;\n      var ui = $.summernote.ui;\n\n      var $editor = context.layoutInfo.editor;\n      var options = context.options;\n      var lang = options.langInfo;\n\n      var KEY = {\n        UP: 38,\n        DOWN: 40,\n        LEFT: 37,\n        RIGHT: 39,\n        ENTER: 13,\n      };\n      var COLUMN_LENGTH = 15;\n      var COLUMN_WIDTH = 35;\n\n      var currentColumn = 0;\n      var currentRow = 0;\n      var totalColumn = 0;\n      var totalRow = 0;\n\n      // special characters data set\n      var specialCharDataSet = [\n        '&quot;', '&amp;', '&lt;', '&gt;', '&iexcl;', '&cent;',\n        '&pound;', '&curren;', '&yen;', '&brvbar;', '&sect;',\n        '&uml;', '&copy;', '&ordf;', '&laquo;', '&not;',\n        '&reg;', '&macr;', '&deg;', '&plusmn;', '&sup2;',\n        '&sup3;', '&acute;', '&micro;', '&para;', '&middot;',\n        '&cedil;', '&sup1;', '&ordm;', '&raquo;', '&frac14;',\n        '&frac12;', '&frac34;', '&iquest;', '&times;', '&divide;',\n        '&fnof;', '&circ;', '&tilde;', '&ndash;', '&mdash;',\n        '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;',\n        '&bdquo;', '&dagger;', '&Dagger;', '&bull;', '&hellip;',\n        '&permil;', '&prime;', '&Prime;', '&lsaquo;', '&rsaquo;',\n        '&oline;', '&frasl;', '&euro;', '&image;', '&weierp;',\n        '&real;', '&trade;', '&alefsym;', '&larr;', '&uarr;',\n        '&rarr;', '&darr;', '&harr;', '&crarr;', '&lArr;',\n        '&uArr;', '&rArr;', '&dArr;', '&hArr;', '&forall;',\n        '&part;', '&exist;', '&empty;', '&nabla;', '&isin;',\n        '&notin;', '&ni;', '&prod;', '&sum;', '&minus;',\n        '&lowast;', '&radic;', '&prop;', '&infin;', '&ang;',\n        '&and;', '&or;', '&cap;', '&cup;', '&int;',\n        '&there4;', '&sim;', '&cong;', '&asymp;', '&ne;',\n        '&equiv;', '&le;', '&ge;', '&sub;', '&sup;',\n        '&nsub;', '&sube;', '&supe;', '&oplus;', '&otimes;',\n        '&perp;', '&sdot;', '&lceil;', '&rceil;', '&lfloor;',\n        '&rfloor;', '&loz;', '&spades;', '&clubs;', '&hearts;',\n        '&diams;',\n      ];\n\n      context.memo('button.specialchars', function() {\n        return ui.button({\n          contents: '<i class=\"fa fa-font fa-flip-vertical\">',\n          tooltip: lang.specialChar.specialChar,\n          click: function() {\n            self.show();\n          },\n        }).render();\n      });\n\n      /**\n       * Make Special Characters Table\n       *\n       * @member plugin.specialChar\n       * @private\n       * @return {jQuery}\n       */\n      this.makeSpecialCharSetTable = function() {\n        var $table = $('<table/>');\n        $.each(specialCharDataSet, function(idx, text) {\n          var $td = $('<td/>').addClass('note-specialchar-node');\n          var $tr = (idx % COLUMN_LENGTH === 0) ? $('<tr/>') : $table.find('tr').last();\n\n          var $button = ui.button({\n            callback: function($node) {\n              $node.html(text);\n              $node.attr('title', text);\n              $node.attr('data-value', encodeURIComponent(text));\n              $node.css({\n                width: COLUMN_WIDTH,\n                'margin-right': '2px',\n                'margin-bottom': '2px',\n              });\n            },\n          }).render();\n\n          $td.append($button);\n\n          $tr.append($td);\n          if (idx % COLUMN_LENGTH === 0) {\n            $table.append($tr);\n          }\n        });\n\n        totalRow = $table.find('tr').length;\n        totalColumn = COLUMN_LENGTH;\n\n        return $table;\n      };\n\n      this.initialize = function() {\n        var $container = options.dialogsInBody ? $(document.body) : $editor;\n\n        var body = '<div class=\"form-group row-fluid\">' + this.makeSpecialCharSetTable()[0].outerHTML + '</div>';\n\n        this.$dialog = ui.dialog({\n          title: lang.specialChar.select,\n          body: body,\n        }).render().appendTo($container);\n      };\n\n      this.show = function() {\n        var text = context.invoke('editor.getSelectedText');\n        context.invoke('editor.saveRange');\n        this.showSpecialCharDialog(text).then(function(selectChar) {\n          context.invoke('editor.restoreRange');\n\n          // build node\n          var $node = $('<span></span>').html(selectChar)[0];\n\n          if ($node) {\n            // insert video node\n            context.invoke('editor.insertNode', $node);\n          }\n        }).fail(function() {\n          context.invoke('editor.restoreRange');\n        });\n      };\n\n      /**\n       * show image dialog\n       *\n       * @param {jQuery} $dialog\n       * @return {Promise}\n       */\n      this.showSpecialCharDialog = function(text) {\n        return $.Deferred(function(deferred) {\n          var $specialCharDialog = self.$dialog;\n          var $specialCharNode = $specialCharDialog.find('.note-specialchar-node');\n          var $selectedNode = null;\n          var ARROW_KEYS = [KEY.UP, KEY.DOWN, KEY.LEFT, KEY.RIGHT];\n          var ENTER_KEY = KEY.ENTER;\n\n          function addActiveClass($target) {\n            if (!$target) {\n              return;\n            }\n            $target.find('button').addClass('active');\n            $selectedNode = $target;\n          }\n\n          function removeActiveClass($target) {\n            $target.find('button').removeClass('active');\n            $selectedNode = null;\n          }\n\n          // find next node\n          function findNextNode(row, column) {\n            var findNode = null;\n            $.each($specialCharNode, function(idx, $node) {\n              var findRow = Math.ceil((idx + 1) / COLUMN_LENGTH);\n              var findColumn = ((idx + 1) % COLUMN_LENGTH === 0) ? COLUMN_LENGTH : (idx + 1) % COLUMN_LENGTH;\n              if (findRow === row && findColumn === column) {\n                findNode = $node;\n                return false;\n              }\n            });\n            return $(findNode);\n          }\n\n          function arrowKeyHandler(keyCode) {\n            // left, right, up, down key\n            var $nextNode;\n            var lastRowColumnLength = $specialCharNode.length % totalColumn;\n\n            if (KEY.LEFT === keyCode) {\n              if (currentColumn > 1) {\n                currentColumn = currentColumn - 1;\n              } else if (currentRow === 1 && currentColumn === 1) {\n                currentColumn = lastRowColumnLength;\n                currentRow = totalRow;\n              } else {\n                currentColumn = totalColumn;\n                currentRow = currentRow - 1;\n              }\n            } else if (KEY.RIGHT === keyCode) {\n              if (currentRow === totalRow && lastRowColumnLength === currentColumn) {\n                currentColumn = 1;\n                currentRow = 1;\n              } else if (currentColumn < totalColumn) {\n                currentColumn = currentColumn + 1;\n              } else {\n                currentColumn = 1;\n                currentRow = currentRow + 1;\n              }\n            } else if (KEY.UP === keyCode) {\n              if (currentRow === 1 && lastRowColumnLength < currentColumn) {\n                currentRow = totalRow - 1;\n              } else {\n                currentRow = currentRow - 1;\n              }\n            } else if (KEY.DOWN === keyCode) {\n              currentRow = currentRow + 1;\n            }\n\n            if (currentRow === totalRow && currentColumn > lastRowColumnLength) {\n              currentRow = 1;\n            } else if (currentRow > totalRow) {\n              currentRow = 1;\n            } else if (currentRow < 1) {\n              currentRow = totalRow;\n            }\n\n            $nextNode = findNextNode(currentRow, currentColumn);\n\n            if ($nextNode) {\n              removeActiveClass($selectedNode);\n              addActiveClass($nextNode);\n            }\n          }\n\n          function enterKeyHandler() {\n            if (!$selectedNode) {\n              return;\n            }\n\n            deferred.resolve(decodeURIComponent($selectedNode.find('button').attr('data-value')));\n            $specialCharDialog.modal('hide');\n          }\n\n          function keyDownEventHandler(event) {\n            event.preventDefault();\n            var keyCode = event.keyCode;\n            if (keyCode === undefined || keyCode === null) {\n              return;\n            }\n            // check arrowKeys match\n            if (ARROW_KEYS.indexOf(keyCode) > -1) {\n              if ($selectedNode === null) {\n                addActiveClass($specialCharNode.eq(0));\n                currentColumn = 1;\n                currentRow = 1;\n                return;\n              }\n              arrowKeyHandler(keyCode);\n            } else if (keyCode === ENTER_KEY) {\n              enterKeyHandler();\n            }\n            return false;\n          }\n\n          // remove class\n          removeActiveClass($specialCharNode);\n\n          // find selected node\n          if (text) {\n            for (var i = 0; i < $specialCharNode.length; i++) {\n              var $checkNode = $($specialCharNode[i]);\n              if ($checkNode.text() === text) {\n                addActiveClass($checkNode);\n                currentRow = Math.ceil((i + 1) / COLUMN_LENGTH);\n                currentColumn = (i + 1) % COLUMN_LENGTH;\n              }\n            }\n          }\n\n          ui.onDialogShown(self.$dialog, function() {\n            $(document).on('keydown', keyDownEventHandler);\n\n            self.$dialog.find('button').tooltip();\n\n            $specialCharNode.on('click', function(event) {\n              event.preventDefault();\n              deferred.resolve(decodeURIComponent($(event.currentTarget).find('button').attr('data-value')));\n              ui.hideDialog(self.$dialog);\n            });\n          });\n\n          ui.onDialogHidden(self.$dialog, function() {\n            $specialCharNode.off('click');\n\n            self.$dialog.find('button').tooltip('destroy');\n\n            $(document).off('keydown', keyDownEventHandler);\n\n            if (deferred.state() === 'pending') {\n              deferred.reject();\n            }\n          });\n\n          ui.showDialog(self.$dialog);\n        });\n      };\n    },\n  });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-aroba-kanka/summernote-aroba.js",
    "content": "/* https://github.com/DiemenDesign/summernote-pagebreak */\n(function(factory) {\n    if(typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(window.jQuery);\n    }\n}\n(function($) {\n    $.extend(true,$.summernote.lang, {\n        'en-US': {\n            aroba: {\n                tooltip: 'Mentions'\n            }\n        }\n    });\n    $.extend($.summernote.options, {\n        aroba: {\n            icon: '<i class=\"far fa-at\"></i>',\n            css: ''\n        }\n    });\n    $.extend($.summernote.plugins, {\n        'aroba': function(context) {\n            var self = this;\n\n            var ui = $.summernote.ui;\n\n            var options = context.options;\n            var lang = options.langInfo;\n\n            var $container = options.dialogsInBody ? $(document.body) : context.layoutInfo.editor;\n\n            // add hello button\n            context.memo('button.aroba', function() {\n                // create button\n                let button = ui.button({\n                    contents: '<i class=\"fa-solid fa-at\"/>',\n                    tooltip: 'Mentions',\n                    click: function () {\n                        self.openPopup();\n                    },\n                });\n\n                // create jQuery object from button instance.\n                let $hello = button.render();\n                return $hello;\n            });\n\n            var body = [\n                '<p class=\"text-center\">',\n                'Create mentions to other entities of the campaign by typing <code>@</code> followed by at least three letters.',\n                '<br /><br />',\n                'Search for entities with spaces by replacing <code>&nbsp;</code> with <code>_</code>. For example, <code>@Kanka_is_awesome</code>.',\n                '</p>',\n            ].join('');\n\n            var footer = [\n                '<p class=\"text-center\">',\n                '<a href=\"https://docs.kanka.io/en/latest/features/mentions.html\" target=\"_blank\">Learn more about mentions on our docs</a> · ',\n                '</p>',\n            ].join('');\n\n            self.$dialog = ui.dialog({\n                title: lang.aroba.title,\n                fade: options.dialogsFade,\n                body: body,\n                footer: footer,\n            }).render().appendTo($container);\n\n            /**\n             * show help dialog\n             *\n             * @return {Promise}\n             */\n            this.showHelpDialog = function() {\n                return $.Deferred((deferred) => {\n                    ui.onDialogShown(this.$dialog, () => {\n                        context.triggerEvent('dialog.shown');\n                        deferred.resolve();\n                    });\n                    ui.showDialog(this.$dialog);\n                }).promise();\n            }\n\n            this.openPopup = function() {\n                context.invoke('editor.saveRange');\n                this.showHelpDialog().then(() => {\n                    context.invoke('editor.restoreRange');\n                });\n            }\n        }\n    });\n\n}));\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-image-attribute.js",
    "content": "\n/* https://github.com/adeelhussain/summernote-image-attribute-editor */\n(function (factory) {\n\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory)\n    } else if (typeof module === 'object' && module.exports) {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(window.jQuery)\n    }\n}\n(function ($) {\n    // TODO: Add more languages!\n    $.extend(true, $.summernote.lang, {\n        'en-US': {\n            imageAttributes: {\n                edit: 'Edit Attributes',\n                titleLabel: 'Title',\n                altLabel: 'Alternative Text',\n                captionLabel: 'Caption',\n                tooltip: 'Edit Image',\n                dialogSaveBtnMessage: 'Save',\n                dialogTitle: 'Change Image Attributes',\n                widthLabel: 'Width',\n                heightLabel: 'Height',\n                imageLockLabel: 'Keep aspect ratio',\n                resizeLabel: 'Reset size',\n\n            }\n        }\n    });\n    $.extend($.summernote.options, {\n        imageAttributes: {\n            icon: '<i class=\"note-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 14 14\" width=\"14\" height=\"14\"><path d=\"M 8.781,11.11 7,11.469 7.3595,9.688 8.781,11.11 Z M 7.713,9.334 9.135,10.7565 13,6.8915 11.5775,5.469 7.713,9.334 Z M 6.258,9.5 8.513,7.12 7.5,5.5 6.24,7.5 5,6.52 3,9.5 6.258,9.5 Z M 4.5,5.25 C 4.5,4.836 4.164,4.5 3.75,4.5 3.336,4.5 3,4.836 3,5.25 3,5.6645 3.336,6 3.75,6 4.164,6 4.5,5.6645 4.5,5.25 Z m 1.676,5.25 -4.176,0 0,-7 9,0 0,1.156 1,0 0,-2.156 -11,0 0,9 4.9845,0 0.1915,-1 z\"/></svg></i>',\n            figureClass: '',\n            figcaptionClass: '',\n            captionText: 'Caption Goes Here.'\n        }\n    });\n    $.extend($.summernote.plugins, {\n        'imageAttributes': function (context) {\n            var self = this;\n            var ui = $.summernote.ui,\n                $editable = context.layoutInfo.editable,\n                options = context.options,\n                $editor = context.layoutInfo.editor,\n                lang = options.langInfo,\n                $note = context.layoutInfo.note;\n\n            context.memo('button.imageAttributes', function () {\n                var button = ui.button({\n                    contents: options.imageAttributes.icon,\n                    container: false,\n                    tooltip: lang.imageAttributes.tooltip,\n                    click: function () {\n                        context.invoke('imageAttributes.show');\n                    }\n                });\n                return button.render();\n            });\n\n            this.initialize = function () {\n                // Either the modal appends in Body or Inside the Editor\n                var $container = options.imageAttributes.dialogsInBody ? $(document.body) : $editor;\n\n                var body = ` <div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"note-form-label\">${lang.imageAttributes.titleLabel}</label>\n\t\t\t\t\t\t\t\t\t<input class=\"form-control note-input note-image-title-text\" type=\"text\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"note-form-label\">${lang.imageAttributes.altLabel}</label>\n\t\t\t\t\t\t\t\t\t<input class=\"form-control note-input note-image-alt-text\" type=\"text\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"note-form-label\">${lang.imageAttributes.captionLabel}</label>\n\t\t\t\t\t\t\t\t\t<input class=\"form-control note-input note-image-caption-text\" type=\"text\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t<div class=\"form-group col-sm-4\">\n\t\t\t\t\t\t\t\t\t\t<label class=\"note-form-label\">${lang.imageAttributes.widthLabel}</label>\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-control note-input note-image-width\" type=\"number\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"form-group col-sm-4\">\n\t\t\t\t\t\t\t\t\t\t<label class=\"note-form-label\">${lang.imageAttributes.heightLabel}</label>\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-control note-input note-image-height\" type=\"number\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"form-group col-sm-4\">\n\t\t\t\t\t\t\t\t\t\t<label class=\"note-form-label\">${lang.imageAttributes.imageLockLabel}</label>\n\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-default btn-md lock-button\">\n\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa-solid fa-lock icon-lock\"></i>\n\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa-solid fa-lock-open icon-unlock\" style=\"display: none\"></i>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-default btn-md reset-size-buttton\" aria-label=\"Resize\" data-toggle=\"tooltip\" title=\"${lang.imageAttributes.resizeLabel}\">\n\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa-solid fa-repeat\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>`;\n\n                var footer = `<button href=\"#\" class=\"btn btn-primary note-image-title-btn note-btn\">${lang.imageAttributes.dialogSaveBtnMessage}</button>`;\n\n                this.$dialog = ui.dialog({\n                    title: lang.imageAttributes.dialogTitle,\n                    body: body,\n                    footer: footer\n                }).render().appendTo($container);\n\n            };\n\n            this.destroy = function () {\n                ui.hideDialog(this.$dialog);\n                this.$dialog.remove();\n            };\n\n            this.bindEnterKey = function ($input, $btn) {\n                $input.on('keypress', function (event) {\n                    if (event.keyCode === 13) {\n                        $btn.trigger('click');\n                    }\n                });\n            };\n\n            this.show = function () {\n                var $img = $($editable.data('target'));\n                var _imgInfo = {\n                    title: $img.attr('title'),\n                    alt: $img.attr('alt'),\n                    caption: $img.next('figcaption').text(),\n                    width: $img.width(),\n                    height: $img.height()\n                };\n\n                var img = new Image();\n                img.onload = function () {\n                    _imgInfo.naturalWidth = img.width\n                    _imgInfo.naturalHeight = img.height;\n                }\n                img.src = $img.attr('src');\n\n\n                this.showLinkDialog(_imgInfo)\n                    .then(function (imgInfo) {\n                        ui.hideDialog(self.$dialog);\n                        var isAnyChangeMade = false;\n\n                        // NOTE: Must add more conditions if any new field is being added!\n                        if (_imgInfo.title != imgInfo.title || _imgInfo.alt != imgInfo.alt || _imgInfo.caption != imgInfo.caption\n                            || _imgInfo.width != imgInfo.width || _imgInfo.height != imgInfo.height) {\n                            isAnyChangeMade = true;\n                        }\n\n                        if (imgInfo.alt) {\n                            $img.attr('alt', imgInfo.alt);\n                        }\n                        else {\n                            $img.removeAttr('alt');\n                        }\n\n                        if (imgInfo.title) {\n                            $img.attr('title', imgInfo.title);\n                        }\n                        else {\n                            $img.removeAttr('title');\n                        }\n\n                        if (imgInfo.width) {\n                            $img.css('width', imgInfo.width);\n                        }\n\n                        if (imgInfo.height) {\n                            $img.css('height', imgInfo.height);\n                        }\n\n                        var captionText = imgInfo.caption;\n                        var $parentAnchorLink = $img.parent();\n\n                        // If caption are not same, then its mean need to update!\n                        var isUpdateCaption = (captionText !== _imgInfo.caption);\n\n                        // If image already have a caption and is equal to old one, then remove that!\n                        var $imgFigure = $img.closest('figure');\n                        if ($imgFigure.length && isUpdateCaption) {\n\n                            // Means image wrpped in figure\n                            $imgFigure.find('figcaption').remove();\n                            $imgFigure.children().first().unwrap();\n\n                        }\n\n                        // If caption text is present then add that caption, otherwise don't do any thing\n                        if (isUpdateCaption && captionText) {\n                            var $newFigure;\n                            if ($parentAnchorLink.is('a')) {\n                                $newFigure = $parentAnchorLink.wrap(`<figure class=\"${options.imageAttributes.figureClass}\"></figure>`).parent();\n                                $newFigure.append(`<figcaption class=\"${options.imageAttributes.figcaptionClass}\"> ${captionText}</figcaption>`);\n                            } else {\n                                $newFigure = $img.wrap(`<figure class=\"${options.imageAttributes.figureClass}\"></figure>`).parent();\n                                $img.after(`<figcaption class=\"${options.imageAttributes.figcaptionClass}\">${captionText}</figcaption>`);\n                            }\n                        }\n\n                        if (isAnyChangeMade) {\n                            var _content = context.invoke('code');\n\n                            $note.val(_content);\n                            $note.trigger('summernote.change', _content);\n                        }\n\n                    });\n            };\n\n            this.showLinkDialog = function (imgInfo) {\n                return $.Deferred(function (deferred) {\n                    var $imageTitle = self.$dialog.find('.note-image-title-text');\n                    var $imageCaption = self.$dialog.find('.note-image-caption-text');\n                    var $imageAlt = self.$dialog.find('.note-image-alt-text');\n                    var $editBtn = self.$dialog.find('.note-image-title-btn');\n                    var $imageWidthInput = self.$dialog.find('.note-image-width');\n                    var $imageHeightInput = self.$dialog.find('.note-image-height');\n                    var $lockButton = self.$dialog.find('.lock-button');\n                    var $resetSizeButton = self.$dialog.find('.reset-size-buttton');\n                    var $unlockIcon = $lockButton.find('.icon-unlock');\n                    var $lockIcon = $lockButton.find('.icon-lock');\n\n                    var isLocked = (typeof options.imageAttributes.manageAspectRatio === 'undefined') ? true: options.imageAttributes.manageAspectRatio;\n                    if(isLocked){\n                        $unlockIcon.hide();\n                        $lockIcon.show();\n                    }\n                    else {\n                        $unlockIcon.show();\n                        $lockIcon.hide();\n                    }\n\n                    $lockButton.on('click', function (event) {\n                        event.preventDefault();\n                        isLocked = !isLocked;\n\n                        if (isLocked) {\n\n                            $unlockIcon.hide();\n                            $lockIcon.show();\n\n                            $imageHeightInput.val(imageAdjustedHeight($imageWidthInput.val(), imgInfo.naturalWidth, imgInfo.naturalHeight));\n                        }\n                        else {\n\n                            $unlockIcon.show();\n                            $lockIcon.hide();\n                        }\n                    });\n\n                    $resetSizeButton.on('click', function (event) {\n                        event.preventDefault();\n                        $imageWidthInput.val(imgInfo.width);\n                        $imageHeightInput.val(imgInfo.height);\n                    });\n\n                    $imageHeightInput.on(\"input\", function () {\n                        if (isLocked) {\n                            $imageWidthInput.val(imageAdjustedWidth(this.value, imgInfo.naturalWidth, imgInfo.naturalHeight));\n                        }\n                    });\n\n                    $imageWidthInput.on(\"input\", function () {\n                        if (isLocked) {\n                            $imageHeightInput.val(imageAdjustedHeight(this.value, imgInfo.naturalWidth, imgInfo.naturalHeight));\n                        }\n                    });\n\n                    ui.onDialogShown(self.$dialog, function () {\n                        context.triggerEvent('dialog.shown');\n\n                        $editBtn.on('click', function (event) {\n                            event.preventDefault();\n                            deferred.resolve({\n                                title: $imageTitle.val(),\n                                alt: $imageAlt.val(),\n                                caption: $imageCaption.val(),\n                                width: $imageWidthInput.val(),\n                                height: $imageHeightInput.val(),\n                            });\n                        });\n\n                        $imageTitle.val(imgInfo.title).trigger('focus');\n                        self.bindEnterKey($imageTitle, $editBtn);\n\n                        $imageAlt.val(imgInfo.alt);\n                        self.bindEnterKey($imageAlt, $editBtn);\n\n                        $imageCaption.val(imgInfo.caption);\n                        self.bindEnterKey($imageCaption, $editBtn);\n\n                        $imageWidthInput.val(imgInfo.width);\n                        self.bindEnterKey($imageWidthInput, $editBtn);\n\n                        $imageHeightInput.val(imgInfo.height);\n                        self.bindEnterKey($imageHeightInput, $editBtn);\n\n                    });\n\n                    ui.onDialogHidden(self.$dialog, function () {\n                        $editBtn.off('click');\n                        $imageWidthInput.off('input');\n                        $imageHeightInput.off('input');\n                        $lockButton.off('click');\n                        $resetSizeButton.off('click');\n                        $unlockIcon.off('click');\n                        $lockIcon.off('click');\n\n\n                        if (deferred.state() === 'pending') {\n                            deferred.reject();\n                        }\n                    });\n                    ui.showDialog(self.$dialog);\n                });\n            };\n\n            function imageAdjustedHeight(heightInputValue, imageOriginalWidth, imageOriginalHeight) {\n                return parseInt(heightInputValue * (imageOriginalHeight / imageOriginalWidth), 10)\n            }\n\n            function imageAdjustedWidth(widthInputValue, imageOriginalWidth, imageOriginalHeight) {\n                return parseInt(widthInputValue * (imageOriginalWidth / imageOriginalHeight), 10)\n            }\n        }\n    });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-ext.js",
    "content": "/* https://github.com/tylerecouture/summernote-lists  */\n\n(function (factory) {\n    /* global define */\n    if (typeof define === \"function\" && define.amd) {\n        // AMD. Register as an anonymous module.\n        define([\"jquery\"], factory);\n    } else if (typeof module === \"object\" && module.exports) {\n        // Node/CommonJS\n        module.exports = factory(require(\"jquery\"));\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n})(function ($) {\n    $.extend(true, $.summernote.lang, {\n        \"en-US\": {\n            tableStyles: {\n                tooltip: \"Table style\",\n                stylesExclusive: [\"Basic\", \"Bordered\"],\n                stylesInclusive: [\"Striped\", \"Condensed\", \"Hoverable\", \"Compact\", \"Centered\", \"Right aligned\"]\n            }\n        }\n    });\n    $.extend($.summernote.options, {\n        tableStyles: {\n            // Must keep the same order as in lang.tableStyles.styles*\n            stylesExclusive: [\"\", \"table-bordered\"],\n            stylesInclusive: [\"table-striped\", \"table-condensed\", \"table-hover\", \"table-compact\", \"table-centered\", \"table-right\"]\n        }\n    });\n\n    // Extends plugins for emoji plugin.\n    $.extend($.summernote.plugins, {\n        tableStyles: function (context) {\n            var self = this,\n                ui = $.summernote.ui,\n                options = context.options,\n                lang = options.langInfo,\n                $editor = context.layoutInfo.editor,\n                $editable = context.layoutInfo.editable,\n                editable = $editable[0];\n\n            context.memo(\"button.tableStyles\", function () {\n                var button = ui.buttonGroup([\n                    ui.button({\n                        className: \"dropdown-toggle\",\n                        contents: ui.dropdownButtonContents(\n                            ui.icon(options.icons.magic),\n                            options\n                        ),\n                        tooltip: lang.tableStyles.tooltip,\n                        data: {\n                            toggle: \"dropdown\"\n                        },\n                        callback: function ($dropdownBtn) {\n                            $dropdownBtn.click(function () {\n                                self.updateTableMenuState($dropdownBtn);\n                            });\n                        }\n                    }),\n                    ui.dropdownCheck({\n                        className: \"dropdown-table-style\",\n                        checkClassName: options.icons.menuCheck,\n                        items: self.generateListItems(\n                            options.tableStyles.stylesExclusive,\n                            lang.tableStyles.stylesExclusive,\n                            options.tableStyles.stylesInclusive,\n                            lang.tableStyles.stylesInclusive\n                        ),\n                        callback: function ($dropdown) {\n                            $dropdown.find(\"a\").each(function () {\n                                $(this).click(function (e) {\n                                    self.updateTableStyles(this);\n                                    e.preventDefault();\n                                });\n                            });\n                        }\n                    })\n                ]);\n                return button.render();\n            });\n\n            self.updateTableStyles = function (chosenItem) {\n                const rng = context.invoke(\"createRange\", $editable);\n                const dom = $.summernote.dom;\n                if (rng.isCollapsed() && rng.isOnCell()) {\n                    context.invoke(\"beforeCommand\");\n                    var table = dom.ancestor(rng.commonAncestor(), dom.isTable);\n                    self.updateStyles(\n                        $(table),\n                        chosenItem,\n                        options.tableStyles.stylesExclusive\n                    );\n                }\n            };\n\n            /* Makes sure the check marks are on the currently applied styles */\n            self.updateTableMenuState = function ($dropdownButton) {\n                const rng = context.invoke(\"createRange\", $editable);\n                const dom = $.summernote.dom;\n                if (rng.isCollapsed() && rng.isOnCell()) {\n                    var $table = $(dom.ancestor(rng.commonAncestor(), dom.isTable));\n                    var $listItems = $dropdownButton.parent().find(\".dropdown-menu a\");\n                    self.updateMenuState(\n                        $table,\n                        $listItems,\n                        options.tableStyles.stylesExclusive\n                    );\n                }\n            };\n\n            /* The following functions might be turnkey in other menu lists\n                  with exclusive and inclusive items that toggle CSS classes. */\n\n            self.updateMenuState = function ($node, $listItems, exclusiveStyles) {\n                var hasAnExclusiveStyle = false;\n                console.log($listItems)\n                $listItems.each(function () {\n                    var cssClass = $(this).data(\"value\");\n                    if ($node.hasClass(cssClass)) {\n                        $(this).addClass(\"checked\");\n                        if ($.inArray(cssClass, exclusiveStyles) != -1) {\n                            hasAnExclusiveStyle = true;\n                        }\n                    } else {\n                        $(this).removeClass(\"checked\");\n                    }\n                });\n\n                // if none of the exclusive styles are checked, then check a blank\n                if (!hasAnExclusiveStyle) {\n                    $listItems.filter('[data-value=\"\"]').addClass(\"checked\");\n                }\n            };\n\n            self.updateStyles = function ($node, chosenItem, exclusiveStyles) {\n                var cssClass = $(chosenItem).data(\"value\");\n                context.invoke(\"beforeCommand\");\n                // Exclusive class: only one can be applied one at a time\n                if ($.inArray(cssClass, exclusiveStyles) != -1) {\n                    $node.removeClass(exclusiveStyles.join(\" \"));\n                    $node.addClass(cssClass);\n                } else {\n                    // Inclusive classes: multiple are ok\n                    $node.toggleClass(cssClass);\n                }\n                context.invoke(\"afterCommand\");\n            };\n\n            self.generateListItems = function (\n                exclusiveStyles,\n                exclusiveLabels,\n                inclusiveStyles,\n                inclusiveLabels\n            ) {\n                var index = 0;\n                var list = \"\";\n\n                for (const style of exclusiveStyles) {\n                    list += self.getListItem(style, exclusiveLabels[index], true);\n                    index++;\n                }\n                list += '<hr style=\"margin: 5px 0px\">';\n                index = 0;\n                for (const style of inclusiveStyles) {\n                    list += self.getListItem(style, inclusiveLabels[index], false);\n                    index++;\n                }\n                return list;\n            };\n\n            self.getListItem = function (\n                value,\n                label,\n                isExclusive,\n            ) {\n                var item =\n                    '<li><a href=\"#\" class=\"' +\n                    (isExclusive ? \"exclusive-item\" : \"inclusive-item\") +\n                    '\" ' +\n                    'style=\"display: block;\" data-value=\"' +\n                    value +\n                    '\">' +\n                    '<i class=\"note-icon-menu-check\" ' +\n                    (!isExclusive ? 'style=\"color:#00ffc0;\" ' : \"\") +\n                    \"></i>\" +\n                    \" \" +\n                    label +\n                    \"</a></li>\";\n                return item;\n            };\n        }\n    });\n});\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-headers/Example/example.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Summernote Lists Extension Example</title>\n\n    <!-- include libraries(jQuery, bootstrap) -->\n    <link href=\"https://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css\" rel=\"stylesheet\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js\"></script>\n    <script src=\"https://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js\"></script>\n\n    <!-- include summernote css/js-->\n    <link href=\"https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.7/summernote.css\" rel=\"stylesheet\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.7/summernote.js\"></script>\n\n    <script src=\"../summernote-table-headers.js\"></script>\n    <link href=\"../summernote-table-headers.css\" rel=\"stylesheet\">\n\n</head>\n<body>\n<h3>Demo of summernote-table-headers extension:</h3>\n<div id=\"summernote\" >\n  <table class=\"table table-bordered\"><tbody><tr><td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td><td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td><td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td></tr><tr><td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td><td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit<br></p></td><td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td></tr><tr><td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td><td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td><td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td></tr></tbody></table><p>\n      </p><br><p></p>\n</div>\n\n<script>\n    $(document).ready(function() {\n        $('#summernote').summernote({\n            height: 400,\n            toolbar: [\n                ['style', ['bold', 'italic', 'underline', 'clear']],\n                ['table', ['table']],\n                ['misc', ['codeview']]\n            ],\n            popover: {\n                table: [\n                  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight', 'toggle']],\n                  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']],\n                  ['custom', ['tableHeaders']]\n                ],\n            },\n        });\n    });\n\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-headers/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 tylerecouture\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-headers/README.md",
    "content": "# summernote-table-headers\nA [Summernote](http://summernote.org/) plugin that adds a button to the table popover allowing the user to toggle the first row as a table header.\n\n### How it works\nThe plugin creates a `<thead>` element at the top of the table, and moves the top `<tr>` into the header.  It then swaps each of the `<td>` cells for `<th>` header cells.  Toggle the header off reversese this.\n  \nWhen the summernote table popover is used to create a new column, summernote creates `<td>` cells within the header.  The pluging detects these changes to the table and converts them to propper `<th>` header cells.\n  \n### Usage\n\n1. Include `summernote-table-headers.js`\n2. Customize the Summernote table popover to include `tableHeaders`\n````\n$(document).ready(function() {\n  $('#summernote').summernote({\n    popover: {\n      table: [\n        ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n        ['delete', ['deleteRow', 'deleteCol', 'deleteTable']],\n        ['custom', ['tableHeaders']]\n      ],\n    },\n  });\n});\n````\n\n### Working Example\n\nhttps://rawgit.com/tylerecouture/summernote-table-headers/master/Example/example.html\n\n### To do\n* Add vertical headers\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-headers/summernote-table-headers.js",
    "content": "/* https://github.com/tylerecouture/summernote-lists  */\n\n(function (factory) {\n    /* global define */\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = factory(require('jquery'));\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n\n    // Extends plugins for emoji plugin.\n    $.extend($.summernote.plugins, {\n\n        'tableHeaders': function (context) {\n            var self = this,\n                ui = $.summernote.ui,\n                options = context.options,\n                $editor   = context.layoutInfo.editor,\n                $editable = context.layoutInfo.editable;\n\n            context.memo('button.tableHeaders', function () {\n                return ui.buttonGroup([\n                    ui.button({\n                        contents: '<b>H<b>', //ui.icon(options.icons.bold),\n                        tooltip:  'Toggle table header',\n                        click:function (e) {\n                            self.toggleTableHeader();\n                        }\n                    }),\n                ]).render();\n            });\n\n            this.toggleTableHeader = function () {\n              const rng = context.invoke('createRange', $editable);\n              const dom = $.summernote.dom;\n              if (rng.isCollapsed() && rng.isOnCell()) {\n                context.invoke('beforeCommand');\n                var table = dom.ancestor(rng.commonAncestor(), dom.isTable)\n                var $table = $(table);\n                var $thead = $table.find('thead');\n                if ($thead[0]) {\n                  // thead found, so convert to a regular row.  When a header\n                  // exists and user tries to add a new row below\n                  // the header, Summernote actually adds another tr within the\n                  // thead so need to capture all and move them into tbody\n                  if(self.observer)\n                     self.observer.disconnect(); // see below\n                  self.replaceTags($thead.find('th'), 'td')\n                  var $theadRows = $thead.find('tr');\n                  $table.prepend($theadRows);\n                  $thead.remove();\n                }\n                else { // thead not found, so convert top row to header row\n                  var $topRow = $table.find('tr')[0];\n                  $topRow.remove();\n\n                  var $thead = $(\"<thead>\");\n                  $thead.prependTo($table);\n                  $thead.append($topRow);\n                  self.replaceTags($thead.find('td'), 'th')\n\n                  // Detect changes to the table dom so we can fix the header\n                  // after rows or cols are added.  Summernote creates td's only\n\n                  // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n\n                  // Options for the observer (which mutations to observe)\n                  var config = { childList: true, subtree: true };\n                  // Callback function to execute when mutations are observed\n                  var callback = function(mutationsList) {\n                    for(var mutation of mutationsList) {\n                      self.replaceTags($(mutation.target).find('td'), 'th')\n                    }\n                  };\n                  // Create an observer instance linked to the callback function\n                  self.observer = new MutationObserver(callback);\n                  // Start observing the target node for configured mutations\n                  self.observer.observe($thead[0], config);\n\n                  self.destroy = function () {\n                    self.observer.disconnect();\n                  };\n\n                } // else\n\n                context.invoke('afterCommand');\n              }\n            };\n\n            this.replaceTags = function($nodes, newTag) {\n              $nodes.replaceWith(function() {\n                return $(\"<\" + newTag + \" />\", {html: $(this).html()});\n              });\n            }\n\n        }\n    });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-styles/Example/example.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Summernote Lists Extension Example</title>\n\n    <!-- include libraries(jQuery, bootstrap) -->\n    <link href=\"https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <script src=\"https://code.jquery.com/jquery-3.4.1.min.js\"></script>\n    <script src=\"https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js\"></script>\n\n    <!-- include summernote css/js-->\n    <link href=\"https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.12/summernote.css\" rel=\"stylesheet\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.12/summernote.js\"></script>\n\n    <script src=\"../summernote-table-styles.js\"></script>\n\n</head>\n\n<body style=\"padding:20px;\">\n    <h3>Demo of summernote-table-styles extension:</h3>\n    <p>Summernote version 0.8.12</p>\n    <p>JQuery version 3.4.1</p>\n    <p>Bootstrap version 3.3.7</p>\n    <div id=\"summernote\">\n        <table class=\"table table-bordered table-hover table-striped\">\n            <tbody>\n                <tr>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                </tr>\n                <tr>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                </tr>\n                <tr>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit</td>\n                </tr>\n            </tbody>\n        </table>\n        <p>\n        </p><br>\n        <p></p>\n    </div>\n\n    <script>\n        $(document).ready(function () {\n            $('#summernote').summernote({\n                height: 400,\n                toolbar: [\n                    ['style', ['bold', 'italic', 'underline', 'clear']],\n                    ['fontsize', ['fontsize']],\n                    ['table', ['table']],\n                    ['misc', ['codeview']]\n                ],\n                popover: {\n                    table: [\n                        ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight', 'toggle']],\n                        ['delete', ['deleteRow', 'deleteCol', 'deleteTable']],\n                        ['custom', ['tableStyles']]\n                    ],\n                },\n            });\n        });\n\n    </script>\n\n</body>\n\n</html>"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-styles/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 tylerecouture\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-styles/README.md",
    "content": "# summernote-table-styles\nA [Summernote](https://summernote.org/) plugin that adds a button to the table popover allowing the user to apply [Bootstrap table styles](https://getbootstrap.com/docs/3.3/css/#tables).\n\nThere are two types of styles, exclusive and inclusive. Only one exclusive style may be chosen at a time, whereas multiple inclusive styles may be chosen.  Currently applied styles are indicated with check marks.\n\n**Exclusive Styles**\n* Basic (Default Bootstrap table)\n* Bordered\n\n**Inclusive Styles**\n* Striped\n* Condensed\n* Hoverable\n\n### Usage\n\n1. Add `summernote-table-styles.js` to your project\n2. Customize the Summernote table popover to include `tableStyles`\n````\n$(document).ready(function() {\n  $('#summernote').summernote({\n    popover: {\n      table: [\n        ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n        ['delete', ['deleteRow', 'deleteCol', 'deleteTable']],\n        ['custom', ['tableStyles']]\n      ],\n    },\n  });\n});\n````\n\n### Working Example\n\nhttps://rawgit.com/tylerecouture/summernote-table-styles/master/Example/example.html\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-table-styles/summernote-table-styles.js",
    "content": "/* https://github.com/tylerecouture/summernote-lists  */\n\n(function (factory) {\n  /* global define */\n  if (typeof define === \"function\" && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([\"jquery\"], factory);\n  } else if (typeof module === \"object\" && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n})(function ($) {\n  $.extend(true, $.summernote.lang, {\n    \"en-US\": {\n      tableStyles: {\n        tooltip: \"Table style\",\n        stylesExclusive: [\"Basic\", \"Bordered\"],\n        stylesInclusive: [\"Striped\", \"Condensed\", \"Hoverable\"]\n      }\n    }\n  });\n  $.extend($.summernote.options, {\n    tableStyles: {\n      // Must keep the same order as in lang.tableStyles.styles*\n      stylesExclusive: [\"\", \"table-bordered\"],\n      stylesInclusive: [\"table-striped\", \"table-condensed\", \"table-hover\"]\n    }\n  });\n\n  // Extends plugins for emoji plugin.\n  $.extend($.summernote.plugins, {\n    tableStyles: function (context) {\n      var self = this,\n        ui = $.summernote.ui,\n        options = context.options,\n        lang = options.langInfo,\n        $editor = context.layoutInfo.editor,\n        $editable = context.layoutInfo.editable,\n        editable = $editable[0];\n\n      context.memo(\"button.tableStyles\", function () {\n        var button = ui.buttonGroup([\n          ui.button({\n            className: \"dropdown-toggle\",\n            contents: ui.dropdownButtonContents(\n              ui.icon(options.icons.magic),\n              options\n            ),\n            tooltip: lang.tableStyles.tooltip,\n            data: {\n              toggle: \"dropdown\"\n            },\n            callback: function ($dropdownBtn) {\n              $dropdownBtn.click(function () {\n                self.updateTableMenuState($dropdownBtn);\n              });\n            }\n          }),\n          ui.dropdownCheck({\n            className: \"dropdown-table-style\",\n            checkClassName: options.icons.menuCheck,\n            items: self.generateListItems(\n              options.tableStyles.stylesExclusive,\n              lang.tableStyles.stylesExclusive,\n              options.tableStyles.stylesInclusive,\n              lang.tableStyles.stylesInclusive\n            ),\n            callback: function ($dropdown) {\n              $dropdown.find(\"a\").each(function () {\n                $(this).click(function (e) {\n                  self.updateTableStyles(this);\n                  e.preventDefault();\n                });\n              });\n            }\n          })\n        ]);\n        return button.render();\n      });\n\n      self.updateTableStyles = function (chosenItem) {\n        const rng = context.invoke(\"createRange\", $editable);\n        const dom = $.summernote.dom;\n        if (rng.isCollapsed() && rng.isOnCell()) {\n          context.invoke(\"beforeCommand\");\n          var table = dom.ancestor(rng.commonAncestor(), dom.isTable);\n          self.updateStyles(\n            $(table),\n            chosenItem,\n            options.tableStyles.stylesExclusive\n          );\n        }\n      };\n\n      /* Makes sure the check marks are on the currently applied styles */\n      self.updateTableMenuState = function ($dropdownButton) {\n        const rng = context.invoke(\"createRange\", $editable);\n        const dom = $.summernote.dom;\n        if (rng.isCollapsed() && rng.isOnCell()) {\n          var $table = $(dom.ancestor(rng.commonAncestor(), dom.isTable));\n          var $listItems = $dropdownButton.parent().find(\".dropdown-menu a\");\n          self.updateMenuState(\n            $table,\n            $listItems,\n            options.tableStyles.stylesExclusive\n          );\n        }\n      };\n\n      /* The following functions might be turnkey in other menu lists\n            with exclusive and inclusive items that toggle CSS classes. */\n\n      self.updateMenuState = function ($node, $listItems, exclusiveStyles) {\n        var hasAnExclusiveStyle = false;\n        console.log($listItems)\n        $listItems.each(function () {\n          var cssClass = $(this).data(\"value\");\n          if ($node.hasClass(cssClass)) {\n            $(this).addClass(\"checked\");\n            if ($.inArray(cssClass, exclusiveStyles) != -1) {\n              hasAnExclusiveStyle = true;\n            }\n          } else {\n            $(this).removeClass(\"checked\");\n          }\n        });\n\n        // if none of the exclusive styles are checked, then check a blank\n        if (!hasAnExclusiveStyle) {\n          $listItems.filter('[data-value=\"\"]').addClass(\"checked\");\n        }\n      };\n\n      self.updateStyles = function ($node, chosenItem, exclusiveStyles) {\n        var cssClass = $(chosenItem).data(\"value\");\n        context.invoke(\"beforeCommand\");\n        // Exclusive class: only one can be applied one at a time\n        if ($.inArray(cssClass, exclusiveStyles) != -1) {\n          $node.removeClass(exclusiveStyles.join(\" \"));\n          $node.addClass(cssClass);\n        } else {\n          // Inclusive classes: multiple are ok\n          $node.toggleClass(cssClass);\n        }\n        context.invoke(\"afterCommand\");\n      };\n\n      self.generateListItems = function (\n        exclusiveStyles,\n        exclusiveLabels,\n        inclusiveStyles,\n        inclusiveLabels\n      ) {\n        var index = 0;\n        var list = \"\";\n\n        for (const style of exclusiveStyles) {\n          list += self.getListItem(style, exclusiveLabels[index], true);\n          index++;\n        }\n        list += '<hr style=\"margin: 5px 0px\">';\n        index = 0;\n        for (const style of inclusiveStyles) {\n          list += self.getListItem(style, inclusiveLabels[index], false);\n          index++;\n        }\n        return list;\n      };\n\n      self.getListItem = function (\n        value,\n        label,\n        isExclusive,\n      ) {\n        var item =\n          '<li><a href=\"#\" class=\"' +\n          (isExclusive ? \"exclusive-item\" : \"inclusive-item\") +\n          '\" ' +\n          'style=\"display: block;\" data-value=\"' +\n          value +\n          '\">' +\n          '<i class=\"note-icon-menu-check\" ' +\n          (!isExclusive ? 'style=\"color:#00ffc0;\" ' : \"\") +\n          \"></i>\" +\n          \" \" +\n          label +\n          \"</a></li>\";\n        return item;\n      };\n    }\n  });\n});\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-toc-kanka/summernote-toc.js",
    "content": "/* https://github.com/DiemenDesign/summernote-pagebreak */\n(function(factory) {\n    if(typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(window.jQuery);\n    }\n}\n(function($) {\n    $.extend(true,$.summernote.lang, {\n        'en-US': {\n            tableofcontent: {\n                tooltip: 'Table of content'\n            }\n        }\n    });\n    $.extend($.summernote.options, {\n        tableofcontent: {\n            icon: '<i class=\"far fa-list-alt\"></i>',\n            css: ''\n        }\n    });\n    $.extend($.summernote.plugins, {\n        'tableofcontent': function(context) {\n            var ui      = $.summernote.ui;\n            var options = context.options;\n            var lang    = options.langInfo;\n            $(\"head\").append('<style>' + options.tableofcontent.css + '</style>');\n            context.memo('button.tableofcontent',function() {\n                var button = ui.button({\n                    contents: options.tableofcontent.icon,\n                    tooltip:  lang.tableofcontent.tooltip,\n                    container: 'body',\n                    click: function (e) {\n                        e.preventDefault();\n                        if (getSelection().rangeCount > 0) {\n                            var el = getSelection().getRangeAt(0).commonAncestorContainer.parentNode;\n                            if ($(el).hasClass('note-editable')) {\n                                el = getSelection().getRangeAt(0).commonAncestorContainer;\n                            }\n                            $('<p>{table-of-contents}</p>').insertBefore(el);\n\n                        } else {\n                            $('.note-editable').append('<p>{table-of-contents}</p>');\n                        }\n\n                        // Launching this method to force Summernote sync it's content with the bound textarea element\n                        context.invoke('editor.insertText','');\n                    }\n                });\n                return button.render();\n            });\n        }\n    });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/plugin/summernote-toc.js",
    "content": "/**\n *\n * copyright 2018 Nicolas Fournier.\n * email: nicolas@rousseaufournier.com\n * license: buy me a beer or a house.\n *\n */\n/**\n *\n * copyright [year] [your Business Name and/or Your Name].\n * email: your@email.com\n * license: Your chosen license, or link to a license file.\n *\n */\n(function (factory) {\n    /* Global define */\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = factory(require('jquery'));\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n    /**\n     * @class plugin.examplePlugin\n     *\n     * example Plugin\n     */\n// Extends plugins for adding hello.\n    //  - plugin is external module for customizing.\n    $.extend($.summernote.plugins, {\n        /**\n         * @param {Object} context - context object has status of editor.\n         */\n        'tableofcontent': function(context) {\n            var self = this;\n\n            // ui has renders to build ui elements.\n            //  - you can create a button with `ui.button`\n            var ui = $.summernote.ui;\n            var $note    = context.layoutInfo.note;\n            //var $code =   $note.summernote('code');\n            var $editor  = context.layoutInfo.editor;\n            var $editable = context.layoutInfo.editable;\n            var $toolbar = context.layoutInfo.toolbar;\n            var options  = context.options;\n            var lang     = options.langInfo;\n            // add tableofcontent button\n            context.memo('button.tableofcontent', function() {\n                // create button\n                var button = ui.button({\n                    contents: '<i class=\"far fa-list-alt\"></i>',\n                    tooltip: 'Create a table of content',\n                    click: function() {\n                        // invoke insertText method with 'hello' on editor module.\n                        if ($editable.find(\"div[id='toc']\").length!=0)\n                            $editable.find(\"div[id='toc']\").remove();\n                        var h1 = $editable.find('h1');\n                        var hList= \"<h1>Table of contents</h1><ul id='tableofcontent'>\";\n                        var node = document.createElement('div');\n\n\n                        node.od = id='toc';\n                        for (var i = 0; i < h1.length; i++)\n                        {\n                            if ($(h1[i]).text()!=\"\")\n                            {\n                                if ($(h1[i]).text().replace(/^\\s+/, '').replace(/\\s+$/, '')  == '')\n                                {\n                                    //Whitespace\n                                }\n                                else\n                                {\n                                    //$(h1[i]).append(\"<a name='h1_\" + i + \"'/>\"); //Update???\n                                    $(h1[i]).attr(\"id\",\"h1_\" + i);\n                                    hList += \"<li><a href='#h1_\"+ i + \"'>\" +$(h1[i]).text().replace(/(\\r\\n\\t|\\n|\\r\\t)/gm,\"\") + \"</a></li>\";\n                                }\n                            }\n\n                            //H2\n                            var h2 = $(h1[i]).find('h2');\n                            if (h2.length>0)\n                            {\n                                hList+= \"<ul>\";\n                                for (var j = 0; j < h2.length; j++)\n                                {\n                                    if ($(h2[i]).text()!=\"\")\n                                    {\n                                        if ($(h2[i]).text().replace(/^\\s+/, '').replace(/\\s+$/, '')  == '')\n                                        {\n                                            //Whitespace\n                                        }\n                                        else\n                                        {\n                                            //$(h2[j]).append(\"<a name='h2_\" +i + \"_\"+ j + \"'/>\");\n                                            $(h2[j]).attr(\"id\",\"h2_\" +i + \"_\"+ j);\n                                            hList += \"<li><a href='#h1_\"+ i + \"'>\" +$(h2[j]).text().replace(/(\\r\\n\\t|\\n|\\r\\t)/gm,\"\") + \"</a></li>\";\n                                        }\n                                    }\n                                }\n                                hList += \"</ul>\";\n                            }\n                        }\n                        hList += \"</ul>\";\n                        node.innerHTML = hList;\n\n                        $note.summernote('insertNode', node);\n                    }});\n\n                // create jQuery object from button instance.\n                var $tableofcontent = button.render();\n                return $tableofcontent;\n            });\n\n            // This method will be called when editor is initialized by $('..').summernote();\n            // You can create elements for plugin\n            this.initialize = function() {\n                /*this.$panel = $('<div class=\"hello-panel\"/>').css({\n                  position: 'absolute',\n                  width: 100,\n                  height: 100,\n                  left: '50%',\n                  top: '50%',\n                  background: 'red'\n                }).hide();\n\n                this.$panel.appendTo('body');*/\n            };\n\n            // This methods will be called when editor is destroyed by $('..').summernote('destroy');\n            // You should remove elements on `initialize`.\n            this.destroy = function() {\n                /* this.$panel.remove();\n                 this.$panel = null;*/\n            };\n        }\n    });\n}));\n"
  },
  {
    "path": "public/vendor/summernote/summernote-bs4.css",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n@font-face{font-family:\"summernote\";font-style:normal;font-weight:400;font-display:auto;src:url(font/summernote.eot);src:url(font/summernote.eot?#iefix) format(\"embedded-opentype\"),url(font/summernote.woff2) format(\"woff2\"),url(font/summernote.woff) format(\"woff\"),url(font/summernote.ttf) format(\"truetype\")}[class^=note-icon]:before,[class*=\" note-icon\"]:before{display:inline-block;font-family:summernote;font-style:normal;font-size:inherit;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;speak:none}.note-icon-fw{text-align:center;width:1.25em}.note-icon-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.note-icon-pull-left{float:left}.note-icon-pull-right{float:right}.note-icon.note-icon-pull-left{margin-right:.3em}.note-icon.note-icon-pull-right{margin-left:.3em}.note-icon-align::before{content:\"\"}.note-icon-align-center::before{content:\"\"}.note-icon-align-indent::before{content:\"\"}.note-icon-align-justify::before{content:\"\"}.note-icon-align-left::before{content:\"\"}.note-icon-align-outdent::before{content:\"\"}.note-icon-align-right::before{content:\"\"}.note-icon-arrow-circle-down::before{content:\"\"}.note-icon-arrow-circle-left::before{content:\"\"}.note-icon-arrow-circle-right::before{content:\"\"}.note-icon-arrow-circle-up::before{content:\"\"}.note-icon-arrows-alt::before{content:\"\"}.note-icon-arrows-h::before{content:\"\"}.note-icon-arrows-v::before{content:\"\"}.note-icon-bold::before{content:\"\"}.note-icon-caret::before{content:\"\"}.note-icon-chain-broken::before{content:\"\"}.note-icon-circle::before{content:\"\"}.note-icon-close::before{content:\"\"}.note-icon-code::before{content:\"\"}.note-icon-col-after::before{content:\"\"}.note-icon-col-before::before{content:\"\"}.note-icon-col-remove::before{content:\"\"}.note-icon-eraser::before{content:\"\"}.note-icon-float-left::before{content:\"\"}.note-icon-float-none::before{content:\"\"}.note-icon-float-right::before{content:\"\"}.note-icon-font::before{content:\"\"}.note-icon-frame::before{content:\"\"}.note-icon-italic::before{content:\"\"}.note-icon-link::before{content:\"\"}.note-icon-magic::before{content:\"\"}.note-icon-menu-check::before{content:\"\"}.note-icon-minus::before{content:\"\"}.note-icon-orderedlist::before{content:\"\"}.note-icon-pencil::before{content:\"\"}.note-icon-picture::before{content:\"\"}.note-icon-question::before{content:\"\"}.note-icon-redo::before{content:\"\"}.note-icon-rollback::before{content:\"\"}.note-icon-row-above::before{content:\"\"}.note-icon-row-below::before{content:\"\"}.note-icon-row-remove::before{content:\"\"}.note-icon-special-character::before{content:\"\"}.note-icon-square::before{content:\"\"}.note-icon-strikethrough::before{content:\"\"}.note-icon-subscript::before{content:\"\"}.note-icon-summernote::before{content:\"\"}.note-icon-superscript::before{content:\"\"}.note-icon-table::before{content:\"\"}.note-icon-text-height::before{content:\"\"}.note-icon-trash::before{content:\"\"}.note-icon-underline::before{content:\"\"}.note-icon-undo::before{content:\"\"}.note-icon-unorderedlist::before{content:\"\"}.note-icon-video::before{content:\"\"}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;display:none;z-index:100;color:#87cefa;background-color:#fff;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;vertical-align:middle;text-align:center;font-size:28px;font-weight:700}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:none}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area .note-editable img.note-float-left{margin-right:10px}.note-editor .note-editing-area .note-editable img.note-float-right{margin-left:10px}.note-editor.note-frame,.note-editor.note-airframe{border:1px solid #00000032}.note-editor.note-frame.codeview .note-editing-area .note-editable,.note-editor.note-airframe.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable,.note-editor.note-airframe.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area,.note-editor.note-airframe .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable,.note-editor.note-airframe .note-editing-area .note-editable{padding:10px;overflow:auto;word-wrap:break-word}.note-editor.note-frame .note-editing-area .note-editable[contenteditable=false],.note-editor.note-airframe .note-editing-area .note-editable[contenteditable=false]{background-color:#8080801d}.note-editor.note-frame .note-editing-area .note-codable,.note-editor.note-airframe .note-editing-area .note-codable{display:none;width:100%;padding:10px;border:none;box-shadow:none;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;resize:none;outline:none;-ms-box-sizing:border-box;box-sizing:border-box;border-radius:0;margin-bottom:0}.note-editor.note-frame.fullscreen,.note-editor.note-airframe.fullscreen{position:fixed;top:0;left:0;width:100% !important;z-index:1050}.note-editor.note-frame.fullscreen .note-resizebar,.note-editor.note-airframe.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output,.note-editor.note-airframe .note-status-output{display:block;width:100%;font-size:14px;line-height:1.42857143;height:20px;margin-bottom:0;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty,.note-editor.note-airframe .note-status-output:empty{height:0;border-top:0 solid transparent}.note-editor.note-frame .note-status-output .pull-right,.note-editor.note-airframe .note-status-output .pull-right{float:right !important}.note-editor.note-frame .note-status-output .text-muted,.note-editor.note-airframe .note-status-output .text-muted{color:#777}.note-editor.note-frame .note-status-output .text-primary,.note-editor.note-airframe .note-status-output .text-primary{color:#286090}.note-editor.note-frame .note-status-output .text-success,.note-editor.note-airframe .note-status-output .text-success{color:#3c763d}.note-editor.note-frame .note-status-output .text-info,.note-editor.note-airframe .note-status-output .text-info{color:#31708f}.note-editor.note-frame .note-status-output .text-warning,.note-editor.note-airframe .note-status-output .text-warning{color:#8a6d3b}.note-editor.note-frame .note-status-output .text-danger,.note-editor.note-airframe .note-status-output .text-danger{color:#a94442}.note-editor.note-frame .note-status-output .alert,.note-editor.note-airframe .note-status-output .alert{margin:-7px 0 0 0;padding:7px 10px 2px 10px;border-radius:0;color:#000;background-color:#f5f5f5}.note-editor.note-frame .note-status-output .alert .note-icon,.note-editor.note-airframe .note-status-output .alert .note-icon{margin-right:5px}.note-editor.note-frame .note-status-output .alert-success,.note-editor.note-airframe .note-status-output .alert-success{color:#3c763d !important;background-color:#dff0d8 !important}.note-editor.note-frame .note-status-output .alert-info,.note-editor.note-airframe .note-status-output .alert-info{color:#31708f !important;background-color:#d9edf7 !important}.note-editor.note-frame .note-status-output .alert-warning,.note-editor.note-airframe .note-status-output .alert-warning{color:#8a6d3b !important;background-color:#fcf8e3 !important}.note-editor.note-frame .note-status-output .alert-danger,.note-editor.note-airframe .note-status-output .alert-danger{color:#a94442 !important;background-color:#f2dede !important}.note-editor.note-frame .note-statusbar,.note-editor.note-airframe .note-statusbar{background-color:#8080801d;border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top:1px solid #00000032}.note-editor.note-frame .note-statusbar .note-resizebar,.note-editor.note-airframe .note-statusbar .note-resizebar{padding-top:1px;height:9px;width:100%;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,.note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #00000032}.note-editor.note-frame .note-statusbar.locked .note-resizebar,.note-editor.note-airframe .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar,.note-editor.note-airframe .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder,.note-editor.note-airframe .note-placeholder{padding:10px}.note-editor.note-airframe{border:0}.note-editor.note-airframe .note-editing-area .note-editable{padding:0}.note-popover.popover{display:none;max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px !important}.note-toolbar{position:relative}.note-popover .popover-content,.note-editor .note-toolbar{margin:0;padding:0 0 5px 5px}.note-popover .popover-content>.note-btn-group,.note-editor .note-toolbar>.note-btn-group{margin-top:5px;margin-left:0;margin-right:5px}.note-popover .popover-content .note-btn-group .note-table,.note-editor .note-toolbar .note-btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute !important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative !important;z-index:1;width:5em;height:5em;background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute !important;z-index:2;width:1em;height:1em;background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.note-editor .note-toolbar .note-style .dropdown-style blockquote,.note-editor .note-toolbar .note-style .dropdown-style pre{margin:0;padding:5px 10px}.note-popover .popover-content .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.note-editor .note-toolbar .note-style .dropdown-style h1,.note-editor .note-toolbar .note-style .dropdown-style h2,.note-editor .note-toolbar .note-style .dropdown-style h3,.note-editor .note-toolbar .note-style .dropdown-style h4,.note-editor .note-toolbar .note-style .dropdown-style h5,.note-editor .note-toolbar .note-style .dropdown-style h6,.note-editor .note-toolbar .note-style .dropdown-style p{margin:0;padding:0}.note-popover .popover-content .note-color-all .note-dropdown-menu,.note-editor .note-toolbar .note-color-all .note-dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-toggle,.note-editor .note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette{display:inline-block;margin:0;width:160px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette:first-child,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title{font-size:12px;margin:2px 7px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select{font-size:11px;margin:3px;padding:0 3px;cursor:pointer;width:100%;border-radius:5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover{background:#eee}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-row,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select-btn,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select-btn{display:none}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn{border:1px solid #eee}.note-popover .popover-content .note-para .note-dropdown-menu,.note-editor .note-toolbar .note-para .note-dropdown-menu{min-width:228px;padding:5px}.note-popover .popover-content .note-para .note-dropdown-menu>div+div,.note-editor .note-toolbar .note-para .note-dropdown-menu>div+div{margin-left:5px}.note-popover .popover-content .note-dropdown-menu,.note-editor .note-toolbar .note-dropdown-menu{min-width:160px}.note-popover .popover-content .note-dropdown-menu.right,.note-editor .note-toolbar .note-dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .note-dropdown-menu.right::before,.note-editor .note-toolbar .note-dropdown-menu.right::before{right:9px;left:auto !important}.note-popover .popover-content .note-dropdown-menu.right::after,.note-editor .note-toolbar .note-dropdown-menu.right::after{right:10px;left:auto !important}.note-popover .popover-content .note-dropdown-menu.note-check a i,.note-editor .note-toolbar .note-dropdown-menu.note-check a i{color:#00bfff;visibility:hidden}.note-popover .popover-content .note-dropdown-menu.note-check a.checked i,.note-editor .note-toolbar .note-dropdown-menu.note-check a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.note-editor .note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.note-editor .note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.note-editor .note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:0;border-radius:0}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.note-editor .note-toolbar .note-color-palette div .note-color-btn:hover{transform:scale(1.2);transition:all .2s}.note-modal .modal-dialog{outline:0;border-radius:5px;box-shadow:0 3px 9px rgba(0,0,0,.5)}.note-modal .form-group{margin-left:0;margin-right:0}.note-modal .note-modal-form{margin:0}.note-modal .note-image-dialog .note-dropzone{min-height:100px;font-size:30px;line-height:4;color:#d3d3d3;text-align:center;border:4px dashed #d3d3d3;margin-bottom:10px}@-moz-document url-prefix(){.note-modal .note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid #000}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle,.note-handle .note-control-selection .note-control-sizing,.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-sizing{background-color:#000}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:none;border-bottom:none}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:none;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:none;border-right:none}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:none;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;color:#fff;background-color:#000;font-size:12px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{padding:3px;max-height:150px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block !important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;white-space:nowrap;text-decoration:none;background-color:#428bca;outline:0;cursor:pointer}.note-toolbar{background:#8080801d}.note-btn-group .note-btn{border-color:#00000032;padding:.28rem .65rem;font-size:13px}\n"
  },
  {
    "path": "public/vendor/summernote/summernote-bs4.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 53);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__0__;\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer(markup, children, options, callback) {\n    _classCallCheck(this, Renderer);\n\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n\n  _createClass(Renderer, [{\n    key: \"render\",\n    value: function render($parent) {\n      var $node = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.markup);\n\n      if (this.options && this.options.contents) {\n        $node.html(this.options.contents);\n      }\n\n      if (this.options && this.options.className) {\n        $node.addClass(this.options.className);\n      }\n\n      if (this.options && this.options.data) {\n        jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(this.options.data, function (k, v) {\n          $node.attr('data-' + k, v);\n        });\n      }\n\n      if (this.options && this.options.click) {\n        $node.on('click', this.options.click);\n      }\n\n      if (this.children) {\n        var $container = $node.find('.note-children-container');\n        this.children.forEach(function (child) {\n          child.render($container.length ? $container : $node);\n        });\n      }\n\n      if (this.callback) {\n        this.callback($node, this.options);\n      }\n\n      if (this.options && this.options.callback) {\n        this.options.callback($node);\n      }\n\n      if ($parent) {\n        $parent.append($node);\n      }\n\n      return $node;\n    }\n  }]);\n\n  return Renderer;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  create: function create(markup, callback) {\n    return function () {\n      var options = _typeof(arguments[1]) === 'object' ? arguments[1] : arguments[0];\n      var children = Array.isArray(arguments[0]) ? arguments[0] : [];\n\n      if (options && options.children) {\n        children = options.children;\n      }\n\n      return new Renderer(markup, children, options, callback);\n    };\n  }\n});\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n\n/* WEBPACK VAR INJECTION */}.call(this, {}))\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs2\":\"jquery\",\"commonjs\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_ = __webpack_require__(0);\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_);\n\n// CONCATENATED MODULE: ./src/js/base/summernote-en-US.js\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote || {\n  lang: {}\n};\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit'\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original'\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window',\n      useProtocol: 'Use default protocol'\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table'\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule'\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list'\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View'\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full'\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select'\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys'\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog'\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo'\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters'\n    },\n    output: {\n      noSelection: 'No Selection Made!'\n    }\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/env.js\n\nvar isSupportAmd = typeof define === 'function' && __webpack_require__(2); // eslint-disable-line\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\n\nvar genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\n\nfunction validFontName(fontName) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.inArray(fontName.toLowerCase(), genericFontFamilies) === -1 ? \"'\".concat(fontName, \"'\") : fontName;\n}\n\nfunction env_isFontInstalled(fontName) {\n  var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n  var testText = 'mmmmmmmmmmwwwww';\n  var testSize = '200px';\n  var canvas = document.createElement('canvas');\n  var context = canvas.getContext('2d');\n  context.font = testSize + \" '\" + testFontName + \"'\";\n  var originalWidth = context.measureText(testText).width;\n  context.font = testSize + ' ' + validFontName(fontName) + ', \"' + testFontName + '\"';\n  var width = context.measureText(testText).width;\n  return originalWidth !== width;\n}\n\nvar userAgent = navigator.userAgent;\nvar isMSIE = /MSIE|Trident/i.test(userAgent);\nvar browserVersion;\n\nif (isMSIE) {\n  var matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\n\nvar isEdge = /Edge\\/\\d+/.test(userAgent);\nvar isSupportTouch = 'ontouchstart' in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; // [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\n\nvar inputEventName = isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\n\n/* harmony default export */ var env = ({\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE: isMSIE,\n  isEdge: isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && !/chrome/i.test(userAgent),\n  browserVersion: browserVersion,\n  jqueryVersion: parseFloat(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.fn.jquery),\n  isSupportAmd: isSupportAmd,\n  isSupportTouch: isSupportTouch,\n  isFontInstalled: env_isFontInstalled,\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName: inputEventName,\n  genericFontFamilies: genericFontFamilies,\n  validFontName: validFontName\n});\n// CONCATENATED MODULE: ./src/js/base/core/func.js\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\n\nfunction eq(itemA) {\n  return function (itemB) {\n    return itemA === itemB;\n  };\n}\n\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\n\nfunction peq2(propName) {\n  return function (itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\n\nfunction ok() {\n  return true;\n}\n\nfunction fail() {\n  return false;\n}\n\nfunction not(f) {\n  return function () {\n    return !f.apply(f, arguments);\n  };\n}\n\nfunction and(fA, fB) {\n  return function (item) {\n    return fA(item) && fB(item);\n  };\n}\n\nfunction func_self(a) {\n  return a;\n}\n\nfunction func_invoke(obj, method) {\n  return function () {\n    return obj[method].apply(obj, arguments);\n  };\n}\n\nvar idCounter = 0;\n/**\n * reset globally-unique id\n *\n */\n\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\n\n\nfunction uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\n\n\nfunction rect2bnd(rect) {\n  var $document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n}\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\n\n\nfunction invertObject(obj) {\n  var inverted = {};\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n\n  return inverted;\n}\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\n\n\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function (name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\n\n\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n\n    var later = function later() {\n      timeout = null;\n\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\n\n\nfunction isValidUrl(url) {\n  var expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n\n/* harmony default export */ var func = ({\n  eq: eq,\n  eq2: eq2,\n  peq2: peq2,\n  ok: ok,\n  fail: fail,\n  self: func_self,\n  not: not,\n  and: and,\n  invoke: func_invoke,\n  resetUniqueId: resetUniqueId,\n  uniqueId: uniqueId,\n  rect2bnd: rect2bnd,\n  invertObject: invertObject,\n  namespaceToCamel: namespaceToCamel,\n  debounce: debounce,\n  isValidUrl: isValidUrl\n});\n// CONCATENATED MODULE: ./src/js/base/core/lists.js\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\n\nfunction lists_head(array) {\n  return array[0];\n}\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\n\n\nfunction lists_last(array) {\n  return array[array.length - 1];\n}\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\n\n\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\n\n\nfunction tail(array) {\n  return array.slice(1);\n}\n/**\n * returns item of array\n */\n\n\nfunction find(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    var item = array[idx];\n\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\n\n\nfunction lists_all(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n/**\n * returns true if the value is present in the list.\n */\n\n\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n\n  return false;\n}\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\n\n\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function (memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\n\n\nfunction from(collection) {\n  var result = [];\n  var length = collection.length;\n  var idx = -1;\n\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n\n  return result;\n}\n/**\n * returns whether list is empty or not\n */\n\n\nfunction lists_isEmpty(array) {\n  return !array || !array.length;\n}\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\n\n\nfunction clusterBy(array, fn) {\n  if (!array.length) {\n    return [];\n  }\n\n  var aTail = tail(array);\n  return aTail.reduce(function (memo, v) {\n    var aLast = lists_last(memo);\n\n    if (fn(lists_last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n\n    return memo;\n  }, [[lists_head(array)]]);\n}\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\n\n\nfunction compact(array) {\n  var aResult = [];\n\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) {\n      aResult.push(array[idx]);\n    }\n  }\n\n  return aResult;\n}\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\n\n\nfunction unique(array) {\n  var results = [];\n\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n\n  return results;\n}\n/**\n * returns next item.\n * @param {Array} array\n */\n\n\nfunction lists_next(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n\n  return null;\n}\n/**\n * returns prev item.\n * @param {Array} array\n */\n\n\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n\n  return null;\n}\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\n\n\n/* harmony default export */ var lists = ({\n  head: lists_head,\n  last: lists_last,\n  initial: initial,\n  tail: tail,\n  prev: prev,\n  next: lists_next,\n  find: find,\n  contains: contains,\n  all: lists_all,\n  sum: sum,\n  from: from,\n  isEmpty: lists_isEmpty,\n  clusterBy: clusterBy,\n  compact: compact,\n  unique: unique\n});\n// CONCATENATED MODULE: ./src/js/base/core/dom.js\n\n\n\n\nvar NBSP_CHAR = String.fromCharCode(160);\nvar ZERO_WIDTH_NBSP_CHAR = \"\\uFEFF\";\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\nfunction isEditable(node) {\n  return node && external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).hasClass('note-editable');\n}\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction isControlSizing(node) {\n  return node && external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).hasClass('note-control-sizing');\n}\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\n\n\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function (node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\n\n\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\n\n\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\n\n\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\n\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  } // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n\n\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nvar isPre = makePredByNodeName('PRE');\nvar isLi = makePredByNodeName('LI');\n\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\n\nvar isTable = makePredByNodeName('TABLE');\nvar isData = makePredByNodeName('DATA');\n\nfunction dom_isInline(node) {\n  return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node);\n}\n\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\n\nvar isHr = makePredByNodeName('HR');\n\nfunction dom_isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\n\nvar isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\nfunction isBodyContainer(node) {\n  return dom_isCell(node) || isBlockquote(node) || isEditable(node);\n}\n\nvar isAnchor = makePredByNodeName('A');\n\nfunction isParaInline(node) {\n  return dom_isInline(node) && !!dom_ancestor(node, isPara);\n}\n\nfunction isBodyInline(node) {\n  return dom_isInline(node) && !dom_ancestor(node, isPara);\n}\n\nvar isBody = makePredByNodeName('BODY');\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\n\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;\n}\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\n\n\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n  var siblings = [];\n\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n\n  siblings.push(node);\n\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n\n  return siblings;\n}\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\n\n\nvar blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\n\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n\n  if (node) {\n    return node.childNodes.length;\n  }\n\n  return 0;\n}\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while (node = node.firstElementChild);\n\n  return dom_isEmpty(node);\n}\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction dom_isEmpty(node) {\n  var len = nodeLength(node);\n\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n\n  return false;\n}\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\n\n\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\n\n\nfunction dom_ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) {\n      return node;\n    }\n\n    if (isEditable(node)) {\n      break;\n    }\n\n    node = node.parentNode;\n  }\n\n  return null;\n}\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\n\n\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n\n  while (node) {\n    if (nodeLength(node) !== 1) {\n      break;\n    }\n\n    if (pred(node)) {\n      return node;\n    }\n\n    if (isEditable(node)) {\n      break;\n    }\n\n    node = node.parentNode;\n  }\n\n  return null;\n}\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\n\n\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n  var ancestors = [];\n  dom_ancestor(node, function (el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n\n    return pred(el);\n  });\n  return ancestors;\n}\n/**\n * find farthest ancestor predicate hit\n */\n\n\nfunction lastAncestor(node, pred) {\n  var ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\n\n\nfunction dom_commonAncestor(nodeA, nodeB) {\n  var ancestors = listAncestor(nodeA);\n\n  for (var n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n\n  return null; // difference document area\n}\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\n\n\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n\n  return nodes;\n}\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\n\n\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n\n  return nodes;\n}\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\n\n\nfunction listDescendant(node, pred) {\n  var descendants = [];\n  pred = pred || func.ok; // start DFS(depth first search) with node\n\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n\n    for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n\n  return descendants;\n}\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\n\n\nfunction wrap(node, wrapperName) {\n  var parent = node.parentNode;\n  var wrapper = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<' + wrapperName + '>')[0];\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n  return wrapper;\n}\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\n\n\nfunction insertAfter(node, preceding) {\n  var next = preceding.nextSibling;\n  var parent = preceding.parentNode;\n\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n\n  return node;\n}\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\n\n\nfunction appendChildNodes(node, aChild) {\n  external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(aChild, function (idx, child) {\n    node.appendChild(child);\n  });\n  return node;\n}\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction dom_isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (dom_position(node) !== 0) {\n      return false;\n    }\n\n    node = node.parentNode;\n  }\n\n  return true;\n}\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n\n  while (node && node !== ancestor) {\n    if (dom_position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n\n    node = node.parentNode;\n  }\n\n  return true;\n}\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && dom_isLeftEdgeOf(point.node, ancestor);\n}\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\n\n\nfunction dom_position(node) {\n  var offset = 0;\n\n  while (node = node.previousSibling) {\n    offset += 1;\n  }\n\n  return offset;\n}\n\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction dom_prevPoint(point, isSkipInnerOffset) {\n  var node;\n  var offset;\n\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    node = point.node.parentNode;\n    offset = dom_position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction dom_nextPoint(point, isSkipInnerOffset) {\n  var node, offset;\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    var nextTextNode = getNextTextNode(point.node);\n\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = dom_position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/**\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  var node, offset; // if node is empty string node, return current node's sibling.\n\n  if (dom_isEmpty(point.node)) {\n    node = point.node.nextSibling;\n    offset = 0;\n    return {\n      node: node,\n      offset: offset\n    };\n  }\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    var nextTextNode = getNextTextNode(point.node);\n\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = dom_position(point.node) + 1;\n    } // if next node is editable, return current node's sibling node.\n\n\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n\n    if (dom_isEmpty(node)) {\n      return null;\n    }\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n\n    if (dom_isEmpty(node)) {\n      return null;\n    }\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/*\n* returns the next Text node index or 0 if not found.\n*/\n\n\nfunction getNextTextNode(actual) {\n  if (!actual.nextSibling) return undefined;\n  if (actual.parent !== actual.nextSibling.parent) return undefined;\n  if (isText(actual.nextSibling)) return actual.nextSibling;\n  return getNextTextNode(actual.nextSibling);\n}\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\n\n\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || dom_isEmpty(point.node)) {\n    return true;\n  }\n\n  var leftNode = point.node.childNodes[point.offset - 1];\n  var rightNode = point.node.childNodes[point.offset];\n\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {\n    return true;\n  }\n\n  return false;\n}\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\n\n\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = dom_prevPoint(point);\n  }\n\n  return null;\n}\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\n\n\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = dom_nextPoint(point);\n  }\n\n  return null;\n}\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\n\n\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && ch !== ' ' && ch !== NBSP_CHAR;\n}\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\n\n\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n/**\n * @method walkPoint\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\n\n\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  var point = startPoint;\n\n  while (point) {\n    handler(point);\n\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n\n    var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\n\n\nfunction makeOffsetPath(ancestor, node) {\n  var ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(dom_position).reverse();\n}\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\n\n\nfunction fromOffsetPath(ancestor, offsets) {\n  var current = ancestor;\n\n  for (var i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n\n  return current;\n}\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\n\n\nfunction splitNode(point, options) {\n  var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  var isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  } // edge case\n\n\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  } // split #text\n\n\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    var childNode = point.node.childNodes[point.offset];\n    var clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, listNext(childNode));\n\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n\n    if (isDiscardEmptySplits) {\n      if (dom_isEmpty(point.node)) {\n        remove(point.node);\n      }\n\n      if (dom_isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n\n    return clone;\n  }\n}\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\n\n\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  var ancestors = listAncestor(point.node, func.eq(root));\n\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n\n  return ancestors.reduce(function (node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n\n    return splitNode({\n      node: parent,\n      offset: node ? dom_position(node) : nodeLength(parent)\n    }, options);\n  });\n}\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\n\n\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  var pred = isInline ? isPara : isBodyContainer;\n  var ancestors = listAncestor(point.node, pred);\n  var topAncestor = lists.last(ancestors) || point.node;\n  var splitRoot, container;\n\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  } // if splitRoot is exists, split with splitTree\n\n\n  var pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline\n  }); // if container is point.node, find pivot with point.offset\n\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n\n  return {\n    rightNode: pivot,\n    container: container\n  };\n}\n\nfunction dom_create(nodeName) {\n  return document.createElement(nodeName);\n}\n\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\n\n\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) {\n    return;\n  }\n\n  if (node.removeNode) {\n    return node.removeNode(isRemoveChild);\n  }\n\n  var parent = node.parentNode;\n\n  if (!isRemoveChild) {\n    var nodes = [];\n\n    for (var i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n\n    for (var _i = 0, _len = nodes.length; _i < _len; _i++) {\n      parent.insertBefore(nodes[_i], node);\n    }\n  }\n\n  parent.removeChild(node);\n}\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\n\n\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n\n    var parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\n\n\nfunction dom_replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n\n  var newNode = dom_create(nodeName);\n\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n  return newNode;\n}\n\nvar isTextarea = makePredByNodeName('TEXTAREA');\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\n\nfunction dom_value($node, stripLinebreaks) {\n  var val = isTextarea($node[0]) ? $node.val() : $node.html();\n\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n\n  return val;\n}\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\n\n\nfunction dom_html($node, isNewlineOnBlock) {\n  var markup = dom_value($node);\n\n  if (isNewlineOnBlock) {\n    var regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function (match, endSlash, name) {\n      name = name.toUpperCase();\n      var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash;\n      var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n      return match + (isEndOfInlineContainer || isBlockNode ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n\n  return markup;\n}\n\nfunction posFromPlaceholder(placeholder) {\n  var $placeholder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(placeholder);\n  var pos = $placeholder.offset();\n  var height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height\n  };\n}\n\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.on(key, events[key]);\n  });\n}\n\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.off(key, events[key]);\n  });\n}\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\n\n\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n\n/* harmony default export */ var dom = ({\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR: NBSP_CHAR,\n\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,\n\n  /** @property {String} blank */\n  blank: blankHTML,\n\n  /** @property {String} emptyPara */\n  emptyPara: \"<p>\".concat(blankHTML, \"</p>\"),\n  makePredByNodeName: makePredByNodeName,\n  isEditable: isEditable,\n  isControlSizing: isControlSizing,\n  isText: isText,\n  isElement: isElement,\n  isVoid: isVoid,\n  isPara: isPara,\n  isPurePara: isPurePara,\n  isHeading: isHeading,\n  isInline: dom_isInline,\n  isBlock: func.not(dom_isInline),\n  isBodyInline: isBodyInline,\n  isBody: isBody,\n  isParaInline: isParaInline,\n  isPre: isPre,\n  isList: isList,\n  isTable: isTable,\n  isData: isData,\n  isCell: dom_isCell,\n  isBlockquote: isBlockquote,\n  isBodyContainer: isBodyContainer,\n  isAnchor: isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi: isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea: isTextarea,\n  deepestChildIsEmpty: deepestChildIsEmpty,\n  isEmpty: dom_isEmpty,\n  isEmptyAnchor: func.and(isAnchor, dom_isEmpty),\n  isClosestSibling: isClosestSibling,\n  withClosestSiblings: withClosestSiblings,\n  nodeLength: nodeLength,\n  isLeftEdgePoint: isLeftEdgePoint,\n  isRightEdgePoint: isRightEdgePoint,\n  isEdgePoint: isEdgePoint,\n  isLeftEdgeOf: dom_isLeftEdgeOf,\n  isRightEdgeOf: isRightEdgeOf,\n  isLeftEdgePointOf: isLeftEdgePointOf,\n  isRightEdgePointOf: isRightEdgePointOf,\n  prevPoint: dom_prevPoint,\n  nextPoint: dom_nextPoint,\n  nextPointWithEmptyNode: nextPointWithEmptyNode,\n  isSamePoint: isSamePoint,\n  isVisiblePoint: isVisiblePoint,\n  prevPointUntil: prevPointUntil,\n  nextPointUntil: nextPointUntil,\n  isCharPoint: isCharPoint,\n  isSpacePoint: isSpacePoint,\n  walkPoint: walkPoint,\n  ancestor: dom_ancestor,\n  singleChildAncestor: singleChildAncestor,\n  listAncestor: listAncestor,\n  lastAncestor: lastAncestor,\n  listNext: listNext,\n  listPrev: listPrev,\n  listDescendant: listDescendant,\n  commonAncestor: dom_commonAncestor,\n  wrap: wrap,\n  insertAfter: insertAfter,\n  appendChildNodes: appendChildNodes,\n  position: dom_position,\n  hasChildren: hasChildren,\n  makeOffsetPath: makeOffsetPath,\n  fromOffsetPath: fromOffsetPath,\n  splitTree: splitTree,\n  splitPoint: splitPoint,\n  create: dom_create,\n  createText: createText,\n  remove: remove,\n  removeWhile: removeWhile,\n  replace: dom_replace,\n  html: dom_html,\n  value: dom_value,\n  posFromPlaceholder: posFromPlaceholder,\n  attachEvents: attachEvents,\n  detachEvents: detachEvents,\n  isCustomStyleTag: isCustomStyleTag\n});\n// CONCATENATED MODULE: ./src/js/base/Context.js\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar Context_Context = /*#__PURE__*/function () {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  function Context($note, options) {\n    _classCallCheck(this, Context);\n\n    this.$note = $note;\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, options); // init ui with options\n\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui_template(this.options);\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.initialize();\n  }\n  /**\n   * create layout and initialize modules and other resources\n   */\n\n\n  _createClass(Context, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.layoutInfo = this.ui.createLayout(this.$note);\n\n      this._initialize();\n\n      this.$note.hide();\n      return this;\n    }\n    /**\n     * destroy modules and other resources and remove layout\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._destroy();\n\n      this.$note.removeData('summernote');\n      this.ui.removeLayout(this.$note, this.layoutInfo);\n    }\n    /**\n     * destory modules and other resources and initialize it again\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var disabled = this.isDisabled();\n      this.code(dom.emptyPara);\n\n      this._destroy();\n\n      this._initialize();\n\n      if (disabled) {\n        this.disable();\n      }\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\n      var _this = this;\n\n      // set own id\n      this.options.id = func.uniqueId(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.now()); // set default container for tooltips, popovers, and dialogs\n\n      this.options.container = this.options.container || this.layoutInfo.editor; // add optional buttons\n\n      var buttons = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, this.options.buttons);\n      Object.keys(buttons).forEach(function (key) {\n        _this.memo('button.' + key, buttons[key]);\n      });\n      var modules = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, this.options.modules, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.plugins || {}); // add and initialize modules\n\n      Object.keys(modules).forEach(function (key) {\n        _this.module(key, modules[key], true);\n      });\n      Object.keys(this.modules).forEach(function (key) {\n        _this.initializeModule(key);\n      });\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      var _this2 = this;\n\n      // destroy modules with reversed order\n      Object.keys(this.modules).reverse().forEach(function (key) {\n        _this2.removeModule(key);\n      });\n      Object.keys(this.memos).forEach(function (key) {\n        _this2.removeMemo(key);\n      }); // trigger custom onDestroy callback\n\n      this.triggerEvent('destroy', this);\n    }\n  }, {\n    key: \"code\",\n    value: function code(html) {\n      var isActivated = this.invoke('codeview.isActivated');\n\n      if (html === undefined) {\n        this.invoke('codeview.sync');\n        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n      } else {\n        if (isActivated) {\n          this.invoke('codeview.sync', html);\n        } else {\n          this.layoutInfo.editable.html(html);\n        }\n\n        this.$note.val(html);\n        this.triggerEvent('change', html, this.layoutInfo.editable);\n      }\n    }\n  }, {\n    key: \"isDisabled\",\n    value: function isDisabled() {\n      return this.layoutInfo.editable.attr('contenteditable') === 'false';\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      this.layoutInfo.editable.attr('contenteditable', true);\n      this.invoke('toolbar.activate', true);\n      this.triggerEvent('disable', false);\n      this.options.editing = true;\n    }\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      // close codeview if codeview is opend\n      if (this.invoke('codeview.isActivated')) {\n        this.invoke('codeview.deactivate');\n      }\n\n      this.layoutInfo.editable.attr('contenteditable', false);\n      this.options.editing = false;\n      this.invoke('toolbar.deactivate', true);\n      this.triggerEvent('disable', true);\n    }\n  }, {\n    key: \"triggerEvent\",\n    value: function triggerEvent() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n\n      if (callback) {\n        callback.apply(this.$note[0], args);\n      }\n\n      this.$note.trigger('summernote.' + namespace, args);\n    }\n  }, {\n    key: \"initializeModule\",\n    value: function initializeModule(key) {\n      var module = this.modules[key];\n      module.shouldInitialize = module.shouldInitialize || func.ok;\n\n      if (!module.shouldInitialize()) {\n        return;\n      } // initialize module\n\n\n      if (module.initialize) {\n        module.initialize();\n      } // attach events\n\n\n      if (module.events) {\n        dom.attachEvents(this.$note, module.events);\n      }\n    }\n  }, {\n    key: \"module\",\n    value: function module(key, ModuleClass, withoutIntialize) {\n      if (arguments.length === 1) {\n        return this.modules[key];\n      }\n\n      this.modules[key] = new ModuleClass(this);\n\n      if (!withoutIntialize) {\n        this.initializeModule(key);\n      }\n    }\n  }, {\n    key: \"removeModule\",\n    value: function removeModule(key) {\n      var module = this.modules[key];\n\n      if (module.shouldInitialize()) {\n        if (module.events) {\n          dom.detachEvents(this.$note, module.events);\n        }\n\n        if (module.destroy) {\n          module.destroy();\n        }\n      }\n\n      delete this.modules[key];\n    }\n  }, {\n    key: \"memo\",\n    value: function memo(key, obj) {\n      if (arguments.length === 1) {\n        return this.memos[key];\n      }\n\n      this.memos[key] = obj;\n    }\n  }, {\n    key: \"removeMemo\",\n    value: function removeMemo(key) {\n      if (this.memos[key] && this.memos[key].destroy) {\n        this.memos[key].destroy();\n      }\n\n      delete this.memos[key];\n    }\n    /**\n     * Some buttons need to change their visual style immediately once they get pressed\n     */\n\n  }, {\n    key: \"createInvokeHandlerAndUpdateState\",\n    value: function createInvokeHandlerAndUpdateState(namespace, value) {\n      var _this3 = this;\n\n      return function (event) {\n        _this3.createInvokeHandler(namespace, value)(event);\n\n        _this3.invoke('buttons.updateCurrentStyle');\n      };\n    }\n  }, {\n    key: \"createInvokeHandler\",\n    value: function createInvokeHandler(namespace, value) {\n      var _this4 = this;\n\n      return function (event) {\n        event.preventDefault();\n        var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target);\n\n        _this4.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n      };\n    }\n  }, {\n    key: \"invoke\",\n    value: function invoke() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var splits = namespace.split('.');\n      var hasSeparator = splits.length > 1;\n      var moduleName = hasSeparator && lists.head(splits);\n      var methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n      var module = this.modules[moduleName || 'editor'];\n\n      if (!moduleName && this[methodName]) {\n        return this[methodName].apply(this, args);\n      } else if (module && module[methodName] && module.shouldInitialize()) {\n        return module[methodName].apply(module, args);\n      }\n    }\n  }]);\n\n  return Context;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/summernote.js\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function summernote() {\n    var type = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.type(lists.head(arguments));\n    var isExternalAPICalled = type === 'string';\n    var hasInitOptions = type === 'object';\n    var options = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.options, hasInitOptions ? lists.head(arguments) : {}); // Update options\n\n    options.langInfo = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang['en-US'], external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang[options.lang]);\n    options.icons = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n    this.each(function (idx, note) {\n      var $note = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(note);\n\n      if (!$note.data('summernote')) {\n        var context = new Context_Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n    var $note = this.first();\n\n    if ($note.length) {\n      var context = $note.data('summernote');\n\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n\n    return this;\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/range.js\nfunction range_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction range_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction range_createClass(Constructor, protoProps, staticProps) { if (protoProps) range_defineProperties(Constructor.prototype, protoProps); if (staticProps) range_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\n\nfunction textRangeToPoint(textRange, isStart) {\n  var container = textRange.parentElement();\n  var offset;\n  var tester = document.body.createTextRange();\n  var prevContainer;\n  var childNodes = lists.from(container.childNodes);\n\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n\n    tester.moveToElementText(childNodes[offset]);\n\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n\n    prevContainer = childNodes[offset];\n  }\n\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    var textRangeStart = document.body.createTextRange();\n    var curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n    var pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    var textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    } // [workaround] enforce IE to re-reference curTextNode, hack\n\n\n    var dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    container = curTextNode;\n    offset = textCount;\n  }\n\n  return {\n    cont: container,\n    offset: offset\n  };\n}\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\n\n\nfunction pointToTextRange(point) {\n  var textRangeInfo = function textRangeInfo(container, offset) {\n    var node, isCollapseToStart;\n\n    if (dom.isText(container)) {\n      var prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      var prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n\n      offset = 0;\n      isCollapseToStart = false;\n    }\n\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset\n    };\n  };\n\n  var textRange = document.body.createTextRange();\n  var info = textRangeInfo(point.node, point.offset);\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\n\n\nvar range_WrappedRange = /*#__PURE__*/function () {\n  function WrappedRange(sc, so, ec, eo) {\n    range_classCallCheck(this, WrappedRange);\n\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo; // isOnEditable: judge whether range is on editable or not\n\n    this.isOnEditable = this.makeIsOn(dom.isEditable); // isOnList: judge whether range is on list node or not\n\n    this.isOnList = this.makeIsOn(dom.isList); // isOnAnchor: judge whether range is on anchor node or not\n\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor); // isOnCell: judge whether range is on cell node or not\n\n    this.isOnCell = this.makeIsOn(dom.isCell); // isOnData: judge whether range is on data node or not\n\n    this.isOnData = this.makeIsOn(dom.isData);\n  } // nativeRange: get nativeRange from sc, so, ec, eo\n\n\n  range_createClass(WrappedRange, [{\n    key: \"nativeRange\",\n    value: function nativeRange() {\n      if (env.isW3CRangeSupport) {\n        var w3cRange = document.createRange();\n        w3cRange.setStart(this.sc, this.so);\n        w3cRange.setEnd(this.ec, this.eo);\n        return w3cRange;\n      } else {\n        var textRange = pointToTextRange({\n          node: this.sc,\n          offset: this.so\n        });\n        textRange.setEndPoint('EndToEnd', pointToTextRange({\n          node: this.ec,\n          offset: this.eo\n        }));\n        return textRange;\n      }\n    }\n  }, {\n    key: \"getPoints\",\n    value: function getPoints() {\n      return {\n        sc: this.sc,\n        so: this.so,\n        ec: this.ec,\n        eo: this.eo\n      };\n    }\n  }, {\n    key: \"getStartPoint\",\n    value: function getStartPoint() {\n      return {\n        node: this.sc,\n        offset: this.so\n      };\n    }\n  }, {\n    key: \"getEndPoint\",\n    value: function getEndPoint() {\n      return {\n        node: this.ec,\n        offset: this.eo\n      };\n    }\n    /**\n     * select update visible range\n     */\n\n  }, {\n    key: \"select\",\n    value: function select() {\n      var nativeRng = this.nativeRange();\n\n      if (env.isW3CRangeSupport) {\n        var selection = document.getSelection();\n\n        if (selection.rangeCount > 0) {\n          selection.removeAllRanges();\n        }\n\n        selection.addRange(nativeRng);\n      } else {\n        nativeRng.select();\n      }\n\n      return this;\n    }\n    /**\n     * Moves the scrollbar to start container(sc) of current range\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"scrollIntoView\",\n    value: function scrollIntoView(container) {\n      var height = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(container).height();\n\n      if (container.scrollTop + height < this.sc.offsetTop) {\n        container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n      }\n\n      return this;\n    }\n    /**\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"normalize\",\n    value: function normalize() {\n      /**\n       * @param {BoundaryPoint} point\n       * @param {Boolean} isLeftToRight - true: prefer to choose right node\n       *                                - false: prefer to choose left node\n       * @return {BoundaryPoint}\n       */\n      var getVisiblePoint = function getVisiblePoint(point, isLeftToRight) {\n        if (!point) {\n          return point;\n        } // Just use the given point [XXX:Adhoc]\n        //  - case 01. if the point is on the middle of the node\n        //  - case 02. if the point is on the right edge and prefer to choose left node\n        //  - case 03. if the point is on the left edge and prefer to choose right node\n        //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n        //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n        //  - case 06. if the point is on the block node and there is no children\n\n\n        if (dom.isVisiblePoint(point)) {\n          if (!dom.isEdgePoint(point) || dom.isRightEdgePoint(point) && !isLeftToRight || dom.isLeftEdgePoint(point) && isLeftToRight || dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling) || dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling) || dom.isBlock(point.node) && dom.isEmpty(point.node)) {\n            return point;\n          }\n        } // point on block's edge\n\n\n        var block = dom.ancestor(point.node, dom.isBlock);\n        var hasRightNode = false;\n\n        if (!hasRightNode) {\n          var prevPoint = dom.prevPoint(point) || {\n            node: null\n          };\n          hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n        }\n\n        var hasLeftNode = false;\n\n        if (!hasLeftNode) {\n          var _nextPoint = dom.nextPoint(point) || {\n            node: null\n          };\n\n          hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(_nextPoint.node)) && isLeftToRight;\n        }\n\n        if (hasRightNode || hasLeftNode) {\n          // returns point already on visible point\n          if (dom.isVisiblePoint(point)) {\n            return point;\n          } // reverse direction\n\n\n          isLeftToRight = !isLeftToRight;\n        }\n\n        var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n        return nextPoint || point;\n      };\n\n      var endPoint = getVisiblePoint(this.getEndPoint(), false);\n      var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns matched nodes on range\n     *\n     * @param {Function} [pred] - predicate function\n     * @param {Object} [options]\n     * @param {Boolean} [options.includeAncestor]\n     * @param {Boolean} [options.fullyContains]\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"nodes\",\n    value: function nodes(pred, options) {\n      pred = pred || func.ok;\n      var includeAncestor = options && options.includeAncestor;\n      var fullyContains = options && options.fullyContains; // TODO compare points and sort\n\n      var startPoint = this.getStartPoint();\n      var endPoint = this.getEndPoint();\n      var nodes = [];\n      var leftEdgeNodes = [];\n      dom.walkPoint(startPoint, endPoint, function (point) {\n        if (dom.isEditable(point.node)) {\n          return;\n        }\n\n        var node;\n\n        if (fullyContains) {\n          if (dom.isLeftEdgePoint(point)) {\n            leftEdgeNodes.push(point.node);\n          }\n\n          if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n            node = point.node;\n          }\n        } else if (includeAncestor) {\n          node = dom.ancestor(point.node, pred);\n        } else {\n          node = point.node;\n        }\n\n        if (node && pred(node)) {\n          nodes.push(node);\n        }\n      }, true);\n      return lists.unique(nodes);\n    }\n    /**\n     * returns commonAncestor of range\n     * @return {Element} - commonAncestor\n     */\n\n  }, {\n    key: \"commonAncestor\",\n    value: function commonAncestor() {\n      return dom.commonAncestor(this.sc, this.ec);\n    }\n    /**\n     * returns expanded range by pred\n     *\n     * @param {Function} pred - predicate function\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"expand\",\n    value: function expand(pred) {\n      var startAncestor = dom.ancestor(this.sc, pred);\n      var endAncestor = dom.ancestor(this.ec, pred);\n\n      if (!startAncestor && !endAncestor) {\n        return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n      }\n\n      var boundaryPoints = this.getPoints();\n\n      if (startAncestor) {\n        boundaryPoints.sc = startAncestor;\n        boundaryPoints.so = 0;\n      }\n\n      if (endAncestor) {\n        boundaryPoints.ec = endAncestor;\n        boundaryPoints.eo = dom.nodeLength(endAncestor);\n      }\n\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n    /**\n     * @param {Boolean} isCollapseToStart\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"collapse\",\n    value: function collapse(isCollapseToStart) {\n      if (isCollapseToStart) {\n        return new WrappedRange(this.sc, this.so, this.sc, this.so);\n      } else {\n        return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n      }\n    }\n    /**\n     * splitText on range\n     */\n\n  }, {\n    key: \"splitText\",\n    value: function splitText() {\n      var isSameContainer = this.sc === this.ec;\n      var boundaryPoints = this.getPoints();\n\n      if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n        this.ec.splitText(this.eo);\n      }\n\n      if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n        boundaryPoints.sc = this.sc.splitText(this.so);\n        boundaryPoints.so = 0;\n\n        if (isSameContainer) {\n          boundaryPoints.ec = boundaryPoints.sc;\n          boundaryPoints.eo = this.eo - this.so;\n        }\n      }\n\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n    /**\n     * delete contents on range\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"deleteContents\",\n    value: function deleteContents() {\n      if (this.isCollapsed()) {\n        return this;\n      }\n\n      var rng = this.splitText();\n      var nodes = rng.nodes(null, {\n        fullyContains: true\n      }); // find new cursor point\n\n      var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {\n        return !lists.contains(nodes, point.node);\n      });\n      var emptyParents = [];\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(nodes, function (idx, node) {\n        // find empty parents\n        var parent = node.parentNode;\n\n        if (point.node !== parent && dom.nodeLength(parent) === 1) {\n          emptyParents.push(parent);\n        }\n\n        dom.remove(node, false);\n      }); // remove empty parents\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(emptyParents, function (idx, node) {\n        dom.remove(node, false);\n      });\n      return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize();\n    }\n    /**\n     * makeIsOn: return isOn(pred) function\n     */\n\n  }, {\n    key: \"makeIsOn\",\n    value: function makeIsOn(pred) {\n      return function () {\n        var ancestor = dom.ancestor(this.sc, pred);\n        return !!ancestor && ancestor === dom.ancestor(this.ec, pred);\n      };\n    }\n    /**\n     * @param {Function} pred\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isLeftEdgeOf\",\n    value: function isLeftEdgeOf(pred) {\n      if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n        return false;\n      }\n\n      var node = dom.ancestor(this.sc, pred);\n      return node && dom.isLeftEdgeOf(this.sc, node);\n    }\n    /**\n     * returns whether range was collapsed or not\n     */\n\n  }, {\n    key: \"isCollapsed\",\n    value: function isCollapsed() {\n      return this.sc === this.ec && this.so === this.eo;\n    }\n    /**\n     * wrap inline nodes which children of body with paragraph\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"wrapBodyInlineWithPara\",\n    value: function wrapBodyInlineWithPara() {\n      if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n        this.sc.innerHTML = dom.emptyPara;\n        return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n      }\n      /**\n       * [workaround] firefox often create range on not visible point. so normalize here.\n       *  - firefox: |<p>text</p>|\n       *  - chrome: <p>|text|</p>\n       */\n\n\n      var rng = this.normalize();\n\n      if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n        return rng;\n      } // find inline top ancestor\n\n\n      var topAncestor;\n\n      if (dom.isInline(rng.sc)) {\n        var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n        topAncestor = lists.last(ancestors);\n\n        if (!dom.isInline(topAncestor)) {\n          topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n        }\n      } else {\n        topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n      }\n\n      if (topAncestor) {\n        // siblings not in paragraph\n        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); // wrap with paragraph\n\n        if (inlineSiblings.length) {\n          var para = dom.wrap(lists.head(inlineSiblings), 'p');\n          dom.appendChildNodes(para, lists.tail(inlineSiblings));\n        }\n      }\n\n      return this.normalize();\n    }\n    /**\n     * insert node at current cursor\n     *\n     * @param {Node} node\n     * @return {Node}\n     */\n\n  }, {\n    key: \"insertNode\",\n    value: function insertNode(node) {\n      var rng = this;\n\n      if (dom.isText(node) || dom.isInline(node)) {\n        rng = this.wrapBodyInlineWithPara().deleteContents();\n      }\n\n      var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n\n      if (info.rightNode) {\n        info.rightNode.parentNode.insertBefore(node, info.rightNode);\n\n        if (dom.isEmpty(info.rightNode) && dom.isPara(node)) {\n          info.rightNode.parentNode.removeChild(info.rightNode);\n        }\n      } else {\n        info.container.appendChild(node);\n      }\n\n      return node;\n    }\n    /**\n     * insert html at current cursor\n     */\n\n  }, {\n    key: \"pasteHTML\",\n    value: function pasteHTML(markup) {\n      markup = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.trim(markup);\n      var contentsContainer = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div></div>').html(markup)[0];\n      var childNodes = lists.from(contentsContainer.childNodes); // const rng = this.wrapBodyInlineWithPara().deleteContents();\n\n      var rng = this;\n      var reversed = false;\n\n      if (rng.so >= 0) {\n        childNodes = childNodes.reverse();\n        reversed = true;\n      }\n\n      childNodes = childNodes.map(function (childNode) {\n        return rng.insertNode(childNode);\n      });\n\n      if (reversed) {\n        childNodes = childNodes.reverse();\n      }\n\n      return childNodes;\n    }\n    /**\n     * returns text in range\n     *\n     * @return {String}\n     */\n\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var nativeRng = this.nativeRange();\n      return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n    }\n    /**\n     * returns range for word before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getWordRange\",\n    value: function getWordRange(findAfter) {\n      var endPoint = this.getEndPoint();\n\n      if (!dom.isCharPoint(endPoint)) {\n        return this;\n      }\n\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        return !dom.isCharPoint(point);\n      });\n\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, function (point) {\n          return !dom.isCharPoint(point);\n        });\n      }\n\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns range for words before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getWordsRange\",\n    value: function getWordsRange(findAfter) {\n      var endPoint = this.getEndPoint();\n\n      var isNotTextPoint = function isNotTextPoint(point) {\n        return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n      };\n\n      if (isNotTextPoint(endPoint)) {\n        return this;\n      }\n\n      var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n      }\n\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns range for words before cursor that match with a Regex\n     *\n     * example:\n     *  range: 'hi @Peter Pan'\n     *  regex: '/@[a-z ]+/i'\n     *  return range: '@Peter Pan'\n     *\n     * @param {RegExp} [regex]\n     * @return {WrappedRange|null}\n     */\n\n  }, {\n    key: \"getWordsMatchRange\",\n    value: function getWordsMatchRange(regex) {\n      var endPoint = this.getEndPoint();\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n          return true;\n        }\n\n        var rng = new WrappedRange(point.node, point.offset, endPoint.node, endPoint.offset);\n        var result = regex.exec(rng.toString());\n        return result && result.index === 0;\n      });\n      var rng = new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n      var text = rng.toString();\n      var result = regex.exec(text);\n\n      if (result && result[0].length === text.length) {\n        return rng;\n      } else {\n        return null;\n      }\n    }\n    /**\n     * create offsetPath bookmark\n     *\n     * @param {Node} editable\n     */\n\n  }, {\n    key: \"bookmark\",\n    value: function bookmark(editable) {\n      return {\n        s: {\n          path: dom.makeOffsetPath(editable, this.sc),\n          offset: this.so\n        },\n        e: {\n          path: dom.makeOffsetPath(editable, this.ec),\n          offset: this.eo\n        }\n      };\n    }\n    /**\n     * create offsetPath bookmark base on paragraph\n     *\n     * @param {Node[]} paras\n     */\n\n  }, {\n    key: \"paraBookmark\",\n    value: function paraBookmark(paras) {\n      return {\n        s: {\n          path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n          offset: this.so\n        },\n        e: {\n          path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n          offset: this.eo\n        }\n      };\n    }\n    /**\n     * getClientRects\n     * @return {Rect[]}\n     */\n\n  }, {\n    key: \"getClientRects\",\n    value: function getClientRects() {\n      var nativeRng = this.nativeRange();\n      return nativeRng.getClientRects();\n    }\n  }]);\n\n  return WrappedRange;\n}();\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\n\n\n/* harmony default export */ var range = ({\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function create(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new range_WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) {\n      // collapsed\n      ec = sc;\n      eo = so;\n      return new range_WrappedRange(sc, so, ec, eo);\n    } else {\n      var wrappedRange = this.createFromSelection();\n\n      if (!wrappedRange && arguments.length === 1) {\n        var bodyElement = arguments[0];\n\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n\n      return wrappedRange;\n    }\n  },\n  createFromBodyElement: function createFromBodyElement(bodyElement) {\n    var isCollapseToStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n  createFromSelection: function createFromSelection() {\n    var sc, so, ec, eo;\n\n    if (env.isW3CRangeSupport) {\n      var selection = document.getSelection();\n\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n\n      var nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else {\n      // IE8: TextRange\n      var textRange = document.selection.createRange();\n      var textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      var textRangeStart = textRange;\n      textRangeStart.collapse(true);\n      var startPoint = textRangeToPoint(textRangeStart, true);\n      var endPoint = textRangeToPoint(textRangeEnd, false); // same visible point case: range was collapsed.\n\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n\n    return new range_WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function createFromNode(node) {\n    var sc = node;\n    var so = 0;\n    var ec = node;\n    var eo = dom.nodeLength(ec); // browsers can't target a picture or void node\n\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n\n    return this.create(sc, so, ec, eo);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function createFromNodeBefore(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function createFromNodeAfter(node) {\n    return this.createFromNode(node).collapse();\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function createFromBookmark(editable, bookmark) {\n    var sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    var so = bookmark.s.offset;\n    var ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    var eo = bookmark.e.offset;\n    return new range_WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function createFromParaBookmark(bookmark, paras) {\n    var so = bookmark.s.offset;\n    var eo = bookmark.e.offset;\n    var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n    return new range_WrappedRange(sc, so, ec, eo);\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/key.js\n\n\nvar KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34\n};\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\n\n/* harmony default export */ var core_key = ({\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: function isEdit(keyCode) {\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE], keyCode);\n  },\n\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: function isMove(keyCode) {\n    return lists.contains([KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN], keyCode);\n  },\n\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: function isNavigation(keyCode) {\n    return lists.contains([KEY_MAP.HOME, KEY_MAP.END, KEY_MAP.PAGEUP, KEY_MAP.PAGEDOWN], keyCode);\n  },\n\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP\n});\n// CONCATENATED MODULE: ./src/js/base/core/async.js\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\n\nfunction readFileAsDataURL(file) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(new FileReader(), {\n      onload: function onload(e) {\n        var dataURL = e.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: function onerror(err) {\n        deferred.reject(err);\n      }\n    }).readAsDataURL(file);\n  }).promise();\n}\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\n\nfunction createImage(url) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n    var $img = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<img>');\n    $img.one('load', function () {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', function () {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none'\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n// CONCATENATED MODULE: ./src/js/base/editing/History.js\nfunction History_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction History_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction History_createClass(Constructor, protoProps, staticProps) { if (protoProps) History_defineProperties(Constructor.prototype, protoProps); if (staticProps) History_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar History_History = /*#__PURE__*/function () {\n  function History(context) {\n    History_classCallCheck(this, History);\n\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n\n  History_createClass(History, [{\n    key: \"makeSnapshot\",\n    value: function makeSnapshot() {\n      var rng = range.create(this.editable);\n      var emptyBookmark = {\n        s: {\n          path: [],\n          offset: 0\n        },\n        e: {\n          path: [],\n          offset: 0\n        }\n      };\n      return {\n        contents: this.$editable.html(),\n        bookmark: rng && rng.isOnEditable() ? rng.bookmark(this.editable) : emptyBookmark\n      };\n    }\n  }, {\n    key: \"applySnapshot\",\n    value: function applySnapshot(snapshot) {\n      if (snapshot.contents !== null) {\n        this.$editable.html(snapshot.contents);\n      }\n\n      if (snapshot.bookmark !== null) {\n        range.createFromBookmark(this.editable, snapshot.bookmark).select();\n      }\n    }\n    /**\n    * @method rewind\n    * Rewinds the history stack back to the first snapshot taken.\n    * Leaves the stack intact, so that \"Redo\" can still be used.\n    */\n\n  }, {\n    key: \"rewind\",\n    value: function rewind() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      } // Return to the first available snapshot.\n\n\n      this.stackOffset = 0; // Apply that snapshot.\n\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n    /**\n    *  @method commit\n    *  Resets history stack, but keeps current editor's content.\n    */\n\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      // Clear the stack.\n      this.stack = []; // Restore stackOffset to its original value.\n\n      this.stackOffset = -1; // Record our first snapshot (of nothing).\n\n      this.recordUndo();\n    }\n    /**\n    * @method reset\n    * Resets the history stack completely; reverting to an empty editor.\n    */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      // Clear the stack.\n      this.stack = []; // Restore stackOffset to its original value.\n\n      this.stackOffset = -1; // Clear the editable area.\n\n      this.$editable.html(''); // Record our first snapshot (of nothing).\n\n      this.recordUndo();\n    }\n    /**\n     * undo\n     */\n\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      if (this.stackOffset > 0) {\n        this.stackOffset--;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n    /**\n     * redo\n     */\n\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.stack.length - 1 > this.stackOffset) {\n        this.stackOffset++;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n    /**\n     * recorded undo\n     */\n\n  }, {\n    key: \"recordUndo\",\n    value: function recordUndo() {\n      this.stackOffset++; // Wash out stack after stackOffset\n\n      if (this.stack.length > this.stackOffset) {\n        this.stack = this.stack.slice(0, this.stackOffset);\n      } // Create new snapshot and push it to the end\n\n\n      this.stack.push(this.makeSnapshot()); // If the stack size reachs to the limit, then slice it\n\n      if (this.stack.length > this.context.options.historyLimit) {\n        this.stack.shift();\n        this.stackOffset -= 1;\n      }\n    }\n  }]);\n\n  return History;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Style.js\nfunction Style_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Style_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Style_createClass(Constructor, protoProps, staticProps) { if (protoProps) Style_defineProperties(Constructor.prototype, protoProps); if (staticProps) Style_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar Style_Style = /*#__PURE__*/function () {\n  function Style() {\n    Style_classCallCheck(this, Style);\n  }\n\n  Style_createClass(Style, [{\n    key: \"jQueryCSS\",\n\n    /**\n     * @method jQueryCSS\n     *\n     * [workaround] for old jQuery\n     * passing an array of style properties to .css()\n     * will result in an object of property-value pairs.\n     * (compability with version < 1.9)\n     *\n     * @private\n     * @param  {jQuery} $obj\n     * @param  {Array} propertyNames - An array of one or more CSS properties.\n     * @return {Object}\n     */\n    value: function jQueryCSS($obj, propertyNames) {\n      if (env.jqueryVersion < 1.9) {\n        var result = {};\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(propertyNames, function (idx, propertyName) {\n          result[propertyName] = $obj.css(propertyName);\n        });\n        return result;\n      }\n\n      return $obj.css(propertyNames);\n    }\n    /**\n     * returns style object from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n\n  }, {\n    key: \"fromNode\",\n    value: function fromNode($node) {\n      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n      var styleInfo = this.jQueryCSS($node, properties) || {};\n      var fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n      styleInfo['font-size'] = parseInt(fontSize, 10);\n      styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n      return styleInfo;\n    }\n    /**\n     * paragraph level style\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} styleInfo\n     */\n\n  }, {\n    key: \"stylePara\",\n    value: function stylePara(rng, styleInfo) {\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(rng.nodes(dom.isPara, {\n        includeAncestor: true\n      }), function (idx, para) {\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css(styleInfo);\n      });\n    }\n    /**\n     * insert and returns styleNodes on range.\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} [options] - options for styleNodes\n     * @param {String} [options.nodeName] - default: `SPAN`\n     * @param {Boolean} [options.expandClosestSibling] - default: `false`\n     * @param {Boolean} [options.onlyPartialContains] - default: `false`\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"styleNodes\",\n    value: function styleNodes(rng, options) {\n      rng = rng.splitText();\n      var nodeName = options && options.nodeName || 'SPAN';\n      var expandClosestSibling = !!(options && options.expandClosestSibling);\n      var onlyPartialContains = !!(options && options.onlyPartialContains);\n\n      if (rng.isCollapsed()) {\n        return [rng.insertNode(dom.create(nodeName))];\n      }\n\n      var pred = dom.makePredByNodeName(nodeName);\n      var nodes = rng.nodes(dom.isText, {\n        fullyContains: true\n      }).map(function (text) {\n        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n      });\n\n      if (expandClosestSibling) {\n        if (onlyPartialContains) {\n          var nodesInRange = rng.nodes(); // compose with partial contains predication\n\n          pred = func.and(pred, function (node) {\n            return lists.contains(nodesInRange, node);\n          });\n        }\n\n        return nodes.map(function (node) {\n          var siblings = dom.withClosestSiblings(node, pred);\n          var head = lists.head(siblings);\n          var tails = lists.tail(siblings);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(tails, function (idx, elem) {\n            dom.appendChildNodes(head, elem.childNodes);\n            dom.remove(elem);\n          });\n          return lists.head(siblings);\n        });\n      } else {\n        return nodes;\n      }\n    }\n    /**\n     * get current style on cursor\n     *\n     * @param {WrappedRange} rng\n     * @return {Object} - object contains style properties.\n     */\n\n  }, {\n    key: \"current\",\n    value: function current(rng) {\n      var $cont = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n      var styleInfo = this.fromNode($cont); // document.queryCommandState for toggle state\n      // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n\n      try {\n        styleInfo = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(styleInfo, {\n          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n          'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n        });\n      } catch (e) {} // eslint-disable-next-line\n      // list-style-type to list-style(unordered, ordered)\n\n\n      if (!rng.isOnList()) {\n        styleInfo['list-style'] = 'none';\n      } else {\n        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n        var isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n      }\n\n      var para = dom.ancestor(rng.sc, dom.isPara);\n\n      if (para && para.style['line-height']) {\n        styleInfo['line-height'] = para.style.lineHeight;\n      } else {\n        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n        styleInfo['line-height'] = lineHeight.toFixed(1);\n      }\n\n      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n      styleInfo.range = rng;\n      return styleInfo;\n    }\n  }]);\n\n  return Style;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Bullet.js\nfunction Bullet_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Bullet_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Bullet_createClass(Constructor, protoProps, staticProps) { if (protoProps) Bullet_defineProperties(Constructor.prototype, protoProps); if (staticProps) Bullet_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar Bullet_Bullet = /*#__PURE__*/function () {\n  function Bullet() {\n    Bullet_classCallCheck(this, Bullet);\n  }\n\n  Bullet_createClass(Bullet, [{\n    key: \"insertOrderedList\",\n\n    /**\n     * toggle ordered list\n     */\n    value: function insertOrderedList(editable) {\n      this.toggleList('OL', editable);\n    }\n    /**\n     * toggle unordered list\n     */\n\n  }, {\n    key: \"insertUnorderedList\",\n    value: function insertUnorderedList(editable) {\n      this.toggleList('UL', editable);\n    }\n    /**\n     * indent\n     */\n\n  }, {\n    key: \"indent\",\n    value: function indent(editable) {\n      var _this = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n\n        if (dom.isLi(head)) {\n          var previousList = _this.findList(head.previousSibling);\n\n          if (previousList) {\n            paras.map(function (para) {\n              return previousList.appendChild(para);\n            });\n          } else {\n            _this.wrapList(paras, head.parentNode.nodeName);\n\n            paras.map(function (para) {\n              return para.parentNode;\n            }).map(function (para) {\n              return _this.appendToPrevious(para);\n            });\n          }\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(paras, function (idx, para) {\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              return (parseInt(val, 10) || 0) + 25;\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n    /**\n     * outdent\n     */\n\n  }, {\n    key: \"outdent\",\n    value: function outdent(editable) {\n      var _this2 = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n\n        if (dom.isLi(head)) {\n          _this2.releaseList([paras]);\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(paras, function (idx, para) {\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              val = parseInt(val, 10) || 0;\n              return val > 25 ? val - 25 : '';\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n    /**\n     * toggle list\n     *\n     * @param {String} listName - OL or UL\n     */\n\n  }, {\n    key: \"toggleList\",\n    value: function toggleList(listName, editable) {\n      var _this3 = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var bookmark = rng.paraBookmark(paras);\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list\n\n      if (lists.find(paras, dom.isPurePara)) {\n        var wrappedParas = [];\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n          wrappedParas = wrappedParas.concat(_this3.wrapList(paras, listName));\n        });\n        paras = wrappedParas; // list to paragraph or change list style\n      } else {\n        var diffLists = rng.nodes(dom.isList, {\n          includeAncestor: true\n        }).filter(function (listNode) {\n          return !external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.nodeName(listNode, listName);\n        });\n\n        if (diffLists.length) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(diffLists, function (idx, listNode) {\n            dom.replace(listNode, listName);\n          });\n        } else {\n          paras = this.releaseList(clustereds, true);\n        }\n      }\n\n      range.createFromParaBookmark(bookmark, paras).select();\n    }\n    /**\n     * @param {Node[]} paras\n     * @param {String} listName\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"wrapList\",\n    value: function wrapList(paras, listName) {\n      var head = lists.head(paras);\n      var last = lists.last(paras);\n      var prevList = dom.isList(head.previousSibling) && head.previousSibling;\n      var nextList = dom.isList(last.nextSibling) && last.nextSibling;\n      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); // P to LI\n\n      paras = paras.map(function (para) {\n        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n      }); // append to list(<ul>, <ol>)\n\n      dom.appendChildNodes(listNode, paras);\n\n      if (nextList) {\n        dom.appendChildNodes(listNode, lists.from(nextList.childNodes));\n        dom.remove(nextList);\n      }\n\n      return paras;\n    }\n    /**\n     * @method releaseList\n     *\n     * @param {Array[]} clustereds\n     * @param {Boolean} isEscapseToBody\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"releaseList\",\n    value: function releaseList(clustereds, isEscapseToBody) {\n      var _this4 = this;\n\n      var releasedParas = [];\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        var last = lists.last(paras);\n        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n        var parentItem = headList.parentNode;\n\n        if (headList.parentNode.nodeName === 'LI') {\n          paras.map(function (para) {\n            var newList = _this4.findNextSiblings(para);\n\n            if (parentItem.nextSibling) {\n              parentItem.parentNode.insertBefore(para, parentItem.nextSibling);\n            } else {\n              parentItem.parentNode.appendChild(para);\n            }\n\n            if (newList.length) {\n              _this4.wrapList(newList, headList.nodeName);\n\n              para.appendChild(newList[0].parentNode);\n            }\n          });\n\n          if (headList.children.length === 0) {\n            parentItem.removeChild(headList);\n          }\n\n          if (parentItem.childNodes.length === 0) {\n            parentItem.parentNode.removeChild(parentItem);\n          }\n        } else {\n          var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n            node: last.parentNode,\n            offset: dom.position(last) + 1\n          }, {\n            isSkipPaddingBlankHTML: true\n          }) : null;\n          var middleList = dom.splitTree(headList, {\n            node: head.parentNode,\n            offset: dom.position(head)\n          }, {\n            isSkipPaddingBlankHTML: true\n          });\n          paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi); // LI to P\n\n          if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n            paras = paras.map(function (para) {\n              return dom.replace(para, 'P');\n            });\n          }\n\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(lists.from(paras).reverse(), function (idx, para) {\n            dom.insertAfter(para, headList);\n          }); // remove empty lists\n\n          var rootLists = lists.compact([headList, middleList, lastList]);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(rootLists, function (idx, rootList) {\n            var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(listNodes.reverse(), function (idx, listNode) {\n              if (!dom.nodeLength(listNode)) {\n                dom.remove(listNode, true);\n              }\n            });\n          });\n        }\n\n        releasedParas = releasedParas.concat(paras);\n      });\n      return releasedParas;\n    }\n    /**\n     * @method appendToPrevious\n     *\n     * Appends list to previous list item, if\n     * none exist it wraps the list in a new list item.\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n\n  }, {\n    key: \"appendToPrevious\",\n    value: function appendToPrevious(node) {\n      return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');\n    }\n    /**\n     * @method findList\n     *\n     * Finds an existing list in list item\n     *\n     * @param {HTMLNode} ListItem\n     * @return {Array[]}\n     */\n\n  }, {\n    key: \"findList\",\n    value: function findList(node) {\n      return node ? lists.find(node.children, function (child) {\n        return ['OL', 'UL'].indexOf(child.nodeName) > -1;\n      }) : null;\n    }\n    /**\n     * @method findNextSiblings\n     *\n     * Finds all list item siblings that follow it\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n\n  }, {\n    key: \"findNextSiblings\",\n    value: function findNextSiblings(node) {\n      var siblings = [];\n\n      while (node.nextSibling) {\n        siblings.push(node.nextSibling);\n        node = node.nextSibling;\n      }\n\n      return siblings;\n    }\n  }]);\n\n  return Bullet;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Typing.js\nfunction Typing_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Typing_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Typing_createClass(Constructor, protoProps, staticProps) { if (protoProps) Typing_defineProperties(Constructor.prototype, protoProps); if (staticProps) Typing_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\n\nvar Typing_Typing = /*#__PURE__*/function () {\n  function Typing(context) {\n    Typing_classCallCheck(this, Typing);\n\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet_Bullet();\n    this.options = context.options;\n  }\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n\n\n  Typing_createClass(Typing, [{\n    key: \"insertTab\",\n    value: function insertTab(rng, tabsize) {\n      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n      rng = rng.deleteContents();\n      rng.insertNode(tab, true);\n      rng = range.create(tab, tabsize);\n      rng.select();\n    }\n    /**\n     * insert paragraph\n     *\n     * @param {jQuery} $editable\n     * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n     *\n     * blockquoteBreakingLevel\n     *   0 - No break, the new paragraph remains inside the quote\n     *   1 - Break the first blockquote in the ancestors list\n     *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n     */\n\n  }, {\n    key: \"insertParagraph\",\n    value: function insertParagraph(editable, rng) {\n      rng = rng || range.create(editable); // deleteContents on range.\n\n      rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph\n\n      rng = rng.wrapBodyInlineWithPara(); // finding paragraph\n\n      var splitRoot = dom.ancestor(rng.sc, dom.isPara);\n      var nextPara; // on paragraph: split paragraph\n\n      if (splitRoot) {\n        // if it is an empty line with li\n        if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n          // toggle UL/OL and escape\n          this.bullet.toggleList(splitRoot.parentNode.nodeName);\n          return;\n        } else {\n          var blockquote = null;\n\n          if (this.options.blockquoteBreakingLevel === 1) {\n            blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n          } else if (this.options.blockquoteBreakingLevel === 2) {\n            blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n          }\n\n          if (blockquote) {\n            // We're inside a blockquote and options ask us to break it\n            nextPara = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(dom.emptyPara)[0]; // If the split is right before a <br>, remove it so that there's no \"empty line\"\n            // after the split in the new blockquote created\n\n            if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(rng.sc.nextSibling).remove();\n            }\n\n            var split = dom.splitTree(blockquote, rng.getStartPoint(), {\n              isDiscardEmptySplits: true\n            });\n\n            if (split) {\n              split.parentNode.insertBefore(nextPara, split);\n            } else {\n              dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n            }\n          } else {\n            nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); // not a blockquote, just insert the paragraph\n\n            var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n            emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(emptyAnchors, function (idx, anchor) {\n              dom.remove(anchor);\n            }); // replace empty heading, pre or custom-made styleTag with P tag\n\n            if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n              nextPara = dom.replace(nextPara, 'p');\n            }\n          }\n        } // no paragraph: insert empty paragraph\n\n      } else {\n        var next = rng.sc.childNodes[rng.so];\n        nextPara = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(dom.emptyPara)[0];\n\n        if (next) {\n          rng.sc.insertBefore(nextPara, next);\n        } else {\n          rng.sc.appendChild(nextPara);\n        }\n      }\n\n      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n    }\n  }]);\n\n  return Typing;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Table.js\nfunction Table_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Table_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Table_createClass(Constructor, protoProps, staticProps) { if (protoProps) Table_defineProperties(Constructor.prototype, protoProps); if (staticProps) Table_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\n\nvar TableResultAction = function TableResultAction(startPoint, where, action, domTable) {\n  var _startPoint = {\n    'colPos': 0,\n    'rowPos': 0\n  };\n  var _virtualTable = [];\n  var _actionCellList = []; /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th') {\n      // Impossible to identify start Cell point\n      return;\n    }\n\n    _startPoint.colPos = startPoint.cellIndex;\n\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n\n\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    var objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell\n    };\n\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n\n\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition\n      }\n    };\n  }\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n\n\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n\n    var newCellIndex = cellIndex;\n\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n\n\n  function addCellInfoToVirtual(row, cell) {\n    var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    var cellHasColspan = cell.colSpan > 1;\n    var cellHasRowspan = cell.rowSpan > 1;\n    var isThisSelectedCell = row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos;\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); // Add span rows to virtual Table.\n\n    var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n\n    if (rowspanNumber > 1) {\n      for (var rp = 1; rp < rowspanNumber; rp++) {\n        var rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    } // Add span cols to virtual table.\n\n\n    var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n\n    if (colspanNumber > 1) {\n      for (var cp = 1; cp < colspanNumber; cp++) {\n        var cellspanIndex = recoverCellIndex(row.rowIndex, cellIndex + cp);\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n\n\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n\n\n  function createVirtualTable() {\n    var rows = domTable.rows;\n\n    for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      var cells = rows[rowIndex].cells;\n\n      for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n\n\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n\n        break;\n\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n\n        break;\n    }\n\n    return TableResultAction.resultAction.RemoveCell;\n  }\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n\n\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n\n        break;\n\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n\n        break;\n    }\n\n    return TableResultAction.resultAction.AddCell;\n  }\n\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  } /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n\n\n  this.getActionList = function () {\n    var fixedRow = where === TableResultAction.where.Row ? _startPoint.rowPos : -1;\n    var fixedCol = where === TableResultAction.where.Column ? _startPoint.colPos : -1;\n    var actualPosition = 0;\n    var canContinue = true;\n\n    while (canContinue) {\n      var rowPosition = fixedRow >= 0 ? fixedRow : actualPosition;\n      var colPosition = fixedCol >= 0 ? fixedCol : actualPosition;\n      var row = _virtualTable[rowPosition];\n\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      var cell = row[colPosition];\n\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      } // Define action to be applied in this cell\n\n\n      var resultAction = TableResultAction.resultAction.Ignore;\n\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n\n      actualPosition++;\n    }\n\n    return _actionCellList;\n  };\n\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\n\n\nTableResultAction.where = {\n  'Row': 0,\n  'Column': 1\n};\n/**\n*\n* Requested action to apply enum.\n*/\n\nTableResultAction.requestAction = {\n  'Add': 0,\n  'Delete': 1\n};\n/**\n*\n* Result action to be executed enum.\n*/\n\nTableResultAction.resultAction = {\n  'Ignore': 0,\n  'SubtractSpanCount': 1,\n  'RemoveCell': 2,\n  'AddCell': 3,\n  'SumSpanCount': 4\n};\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\n\nvar Table_Table = /*#__PURE__*/function () {\n  function Table() {\n    Table_classCallCheck(this, Table);\n  }\n\n  Table_createClass(Table, [{\n    key: \"tab\",\n\n    /**\n     * handle tab key\n     *\n     * @param {WrappedRange} rng\n     * @param {Boolean} isShift\n     */\n    value: function tab(rng, isShift) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var table = dom.ancestor(cell, dom.isTable);\n      var cells = dom.listDescendant(table, dom.isCell);\n      var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n\n      if (nextCell) {\n        range.create(nextCell, 0).select();\n      }\n    }\n    /**\n     * Add a new row\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (top/bottom)\n     * @return {Node}\n     */\n\n  }, {\n    key: \"addRow\",\n    value: function addRow(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var currentTr = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var trAttributes = this.recoverAttributes(currentTr);\n      var html = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<tr' + trAttributes + '></tr>');\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentTr).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var idCell = 0; idCell < actions.length; idCell++) {\n        var currentCell = actions[idCell];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            break;\n\n          case TableResultAction.resultAction.SumSpanCount:\n            {\n              if (position === 'top') {\n                var baseCellTr = currentCell.baseCell.parent;\n                var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n\n                if (isTopFromRowSpan) {\n                  var newTd = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div></div>').append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                  html.append(newTd);\n                  break;\n                }\n              }\n\n              var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n              rowspanNumber++;\n              currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n            }\n            break;\n        }\n      }\n\n      if (position === 'top') {\n        currentTr.before(html);\n      } else {\n        var cellHasRowspan = cell.rowSpan > 1;\n\n        if (cellHasRowspan) {\n          var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentTr).parent().find('tr')[lastTrIndex]).after(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(html));\n          return;\n        }\n\n        currentTr.after(html);\n      }\n    }\n    /**\n     * Add a new col\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (left/right)\n     * @return {Node}\n     */\n\n  }, {\n    key: \"addCol\",\n    value: function addCol(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var rowsGroup = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).siblings();\n      rowsGroup.push(row);\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        var currentCell = actions[actionIndex];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            if (position === 'right') {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n\n            break;\n\n          case TableResultAction.resultAction.SumSpanCount:\n            if (position === 'right') {\n              var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n              colspanNumber++;\n              currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n\n            break;\n        }\n      }\n    }\n    /*\n    * Copy attributes from element.\n    *\n    * @param {object} Element to recover attributes.\n    * @return {string} Copied string elements.\n    */\n\n  }, {\n    key: \"recoverAttributes\",\n    value: function recoverAttributes(el) {\n      var resultStr = '';\n\n      if (!el) {\n        return resultStr;\n      }\n\n      var attrList = el.attributes || [];\n\n      for (var i = 0; i < attrList.length; i++) {\n        if (attrList[i].name.toLowerCase() === 'id') {\n          continue;\n        }\n\n        if (attrList[i].specified) {\n          resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n        }\n      }\n\n      return resultStr;\n    }\n    /**\n     * Delete current row\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell));\n      var rowPos = row[0].rowIndex;\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n\n        var baseCell = actions[actionIndex].baseCell;\n        var virtualPosition = actions[actionIndex].virtualTable;\n        var hasRowspan = baseCell.rowSpan && baseCell.rowSpan > 1;\n        var rowspanNumber = hasRowspan ? parseInt(baseCell.rowSpan, 10) : 0;\n\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n\n          case TableResultAction.resultAction.AddCell:\n            {\n              var nextRow = row.next('tr')[0];\n\n              if (!nextRow) {\n                continue;\n              }\n\n              var cloneRow = row[0].cells[cellPos];\n\n              if (hasRowspan) {\n                if (rowspanNumber > 2) {\n                  rowspanNumber--;\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                  nextRow.cells[cellPos].innerHTML = '';\n                } else if (rowspanNumber === 2) {\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].removeAttribute('rowSpan');\n                  nextRow.cells[cellPos].innerHTML = '';\n                }\n              }\n            }\n            continue;\n\n          case TableResultAction.resultAction.SubtractSpanCount:\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                baseCell.setAttribute('rowSpan', rowspanNumber);\n\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              } else if (rowspanNumber === 2) {\n                baseCell.removeAttribute('rowSpan');\n\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              }\n            }\n\n            continue;\n\n          case TableResultAction.resultAction.RemoveCell:\n            // Do not need remove cell because row will be deleted.\n            continue;\n        }\n      }\n\n      row.remove();\n    }\n    /**\n     * Delete current col\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell));\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n\n          case TableResultAction.resultAction.SubtractSpanCount:\n            {\n              var baseCell = actions[actionIndex].baseCell;\n              var hasColspan = baseCell.colSpan && baseCell.colSpan > 1;\n\n              if (hasColspan) {\n                var colspanNumber = baseCell.colSpan ? parseInt(baseCell.colSpan, 10) : 0;\n\n                if (colspanNumber > 2) {\n                  colspanNumber--;\n                  baseCell.setAttribute('colSpan', colspanNumber);\n\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                } else if (colspanNumber === 2) {\n                  baseCell.removeAttribute('colSpan');\n\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                }\n              }\n            }\n            continue;\n\n          case TableResultAction.resultAction.RemoveCell:\n            dom.remove(actions[actionIndex].baseCell, true);\n            continue;\n        }\n      }\n    }\n    /**\n     * create empty table element\n     *\n     * @param {Number} rowCount\n     * @param {Number} colCount\n     * @return {Node}\n     */\n\n  }, {\n    key: \"createTable\",\n    value: function createTable(colCount, rowCount, options) {\n      var tds = [];\n      var tdHTML;\n\n      for (var idxCol = 0; idxCol < colCount; idxCol++) {\n        tds.push('<td>' + dom.blank + '</td>');\n      }\n\n      tdHTML = tds.join('');\n      var trs = [];\n      var trHTML;\n\n      for (var idxRow = 0; idxRow < rowCount; idxRow++) {\n        trs.push('<tr>' + tdHTML + '</tr>');\n      }\n\n      trHTML = trs.join('');\n      var $table = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<table>' + trHTML + '</table>');\n\n      if (options && options.tableClassName) {\n        $table.addClass(options.tableClassName);\n      }\n\n      return $table[0];\n    }\n    /**\n     * Delete current table\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('table').remove();\n    }\n  }]);\n\n  return Table;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Editor.js\nfunction Editor_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Editor_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Editor_createClass(Constructor, protoProps, staticProps) { if (protoProps) Editor_defineProperties(Constructor.prototype, protoProps); if (staticProps) Editor_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KEY_BOGUS = 'bogus';\n/**\n * @class Editor\n */\n\nvar Editor_Editor = /*#__PURE__*/function () {\n  function Editor(context) {\n    var _this = this;\n\n    Editor_classCallCheck(this, Editor);\n\n    this.context = context;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n    this.style = new Style_Style();\n    this.table = new Table_Table();\n    this.typing = new Typing_Typing(context);\n    this.bullet = new Bullet_Bullet();\n    this.history = new History_History(context);\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName); // native commands(with execCommand), generate function for execCommand\n\n    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor'];\n\n    for (var idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = function (sCmd) {\n        return function (value) {\n          _this.beforeCommand();\n\n          document.execCommand(sCmd, false, value);\n\n          _this.afterCommand(true);\n        };\n      }(commands[idx]);\n\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n\n    this.fontName = this.wrapCommand(function (value) {\n      return _this.fontStyling('font-family', env.validFontName(value));\n    });\n    this.fontSize = this.wrapCommand(function (value) {\n      var unit = _this.currentStyle()['font-size-unit'];\n\n      return _this.fontStyling('font-size', value + unit);\n    });\n    this.fontSizeUnit = this.wrapCommand(function (value) {\n      var size = _this.currentStyle()['font-size'];\n\n      return _this.fontStyling('font-size', size + value);\n    });\n\n    for (var _idx = 1; _idx <= 6; _idx++) {\n      this['formatH' + _idx] = function (idx) {\n        return function () {\n          _this.formatBlock('H' + idx);\n        };\n      }(_idx);\n\n      this.context.memo('help.formatH' + _idx, this.lang.help['formatH' + _idx]);\n    }\n\n    this.insertParagraph = this.wrapCommand(function () {\n      _this.typing.insertParagraph(_this.editable);\n    });\n    this.insertOrderedList = this.wrapCommand(function () {\n      _this.bullet.insertOrderedList(_this.editable);\n    });\n    this.insertUnorderedList = this.wrapCommand(function () {\n      _this.bullet.insertUnorderedList(_this.editable);\n    });\n    this.indent = this.wrapCommand(function () {\n      _this.bullet.indent(_this.editable);\n    });\n    this.outdent = this.wrapCommand(function () {\n      _this.bullet.outdent(_this.editable);\n    });\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n\n    this.insertNode = this.wrapCommand(function (node) {\n      if (_this.isLimited(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).text().length)) {\n        return;\n      }\n\n      var rng = _this.getLastRange();\n\n      rng.insertNode(node);\n\n      _this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n    /**\n     * insert text\n     * @param {String} text\n     */\n\n    this.insertText = this.wrapCommand(function (text) {\n      if (_this.isLimited(text.length)) {\n        return;\n      }\n\n      var rng = _this.getLastRange();\n\n      var textNode = rng.insertNode(dom.createText(text));\n\n      _this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n\n    this.pasteHTML = this.wrapCommand(function (markup) {\n      if (_this.isLimited(markup.length)) {\n        return;\n      }\n\n      markup = _this.context.invoke('codeview.purify', markup);\n\n      var contents = _this.getLastRange().pasteHTML(markup);\n\n      _this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n\n    this.formatBlock = this.wrapCommand(function (tagName, $target) {\n      var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle;\n\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock);\n      } else {\n        _this.onFormatBlock(tagName, $target);\n      }\n    });\n    /**\n     * insert horizontal rule\n     */\n\n    this.insertHorizontalRule = this.wrapCommand(function () {\n      var hrNode = _this.getLastRange().insertNode(dom.create('HR'));\n\n      if (hrNode.nextSibling) {\n        _this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n\n    this.lineHeight = this.wrapCommand(function (value) {\n      _this.style.stylePara(_this.getLastRange(), {\n        lineHeight: value\n      });\n    });\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n\n    this.createLink = this.wrapCommand(function (linkInfo) {\n      var linkUrl = linkInfo.url;\n      var linkText = linkInfo.text;\n      var isNewWindow = linkInfo.isNewWindow;\n      var checkProtocol = linkInfo.checkProtocol;\n\n      var rng = linkInfo.range || _this.getLastRange();\n\n      var additionalTextLength = linkText.length - rng.toString().length;\n\n      if (additionalTextLength > 0 && _this.isLimited(additionalTextLength)) {\n        return;\n      }\n\n      var isTextChanged = rng.toString() !== linkText; // handle spaced urls from input\n\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n\n      if (_this.options.onCreateLink) {\n        linkUrl = _this.options.onCreateLink(linkUrl);\n      } else if (checkProtocol) {\n        // if url doesn't have any protocol and not even a relative or a label, use http:// as default\n        linkUrl = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/.test(linkUrl) ? linkUrl : _this.options.defaultProtocol + linkUrl;\n      }\n\n      var anchors = [];\n\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        var anchor = rng.insertNode(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<A>' + linkText + '</A>')[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = _this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true\n        });\n      }\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(anchors, function (idx, anchor) {\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('href', linkUrl);\n\n        if (isNewWindow) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('target', '_blank');\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).removeAttr('target');\n        }\n      });\n\n      _this.setLastRange(_this.createRangeFromList(anchors).select());\n    });\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n\n    this.color = this.wrapCommand(function (colorInfo) {\n      var foreColor = colorInfo.foreColor;\n      var backColor = colorInfo.backColor;\n\n      if (foreColor) {\n        document.execCommand('foreColor', false, foreColor);\n      }\n\n      if (backColor) {\n        document.execCommand('backColor', false, backColor);\n      }\n    });\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n\n    this.foreColor = this.wrapCommand(function (colorInfo) {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n\n    this.insertTable = this.wrapCommand(function (dim) {\n      var dimension = dim.split('x');\n\n      var rng = _this.getLastRange().deleteContents();\n\n      rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options));\n    });\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n\n    this.removeMedia = this.wrapCommand(function () {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget()).parent();\n\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget()).detach();\n      }\n\n      _this.context.triggerEvent('media.delete', $target, _this.$editable);\n    });\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n\n    this.floatMe = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', value === 'none' ? '' : value);\n    });\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n\n    this.resize = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget());\n      value = parseFloat(value);\n\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: ''\n        });\n      }\n    });\n  }\n\n  Editor_createClass(Editor, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      // bind custom events\n      this.$editable.on('keydown', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          _this2.context.triggerEvent('enter', event);\n        }\n\n        _this2.context.triggerEvent('keydown', event); // keep a snapshot to limit text on input event\n\n\n        _this2.snapshot = _this2.history.makeSnapshot();\n        _this2.hasKeyShortCut = false;\n\n        if (!event.isDefaultPrevented()) {\n          if (_this2.options.shortcuts) {\n            _this2.hasKeyShortCut = _this2.handleKeyMap(event);\n          } else {\n            _this2.preventDefaultEditableShortCuts(event);\n          }\n        }\n\n        if (_this2.isLimited(1, event)) {\n          var lastRange = _this2.getLastRange();\n\n          if (lastRange.eo - lastRange.so === 0) {\n            return false;\n          }\n        }\n\n        _this2.setLastRange(); // record undo in the key event except keyMap.\n\n\n        if (_this2.options.recordEveryKeystroke) {\n          if (_this2.hasKeyShortCut === false) {\n            _this2.history.recordUndo();\n          }\n        }\n      }).on('keyup', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('keyup', event);\n      }).on('focus', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('focus', event);\n      }).on('blur', function (event) {\n        _this2.context.triggerEvent('blur', event);\n      }).on('mousedown', function (event) {\n        _this2.context.triggerEvent('mousedown', event);\n      }).on('mouseup', function (event) {\n        _this2.setLastRange();\n\n        _this2.history.recordUndo();\n\n        _this2.context.triggerEvent('mouseup', event);\n      }).on('scroll', function (event) {\n        _this2.context.triggerEvent('scroll', event);\n      }).on('paste', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('paste', event);\n      }).on('input', function () {\n        // To limit composition characters (e.g. Korean)\n        if (_this2.isLimited(0) && _this2.snapshot) {\n          _this2.history.applySnapshot(_this2.snapshot);\n        }\n      });\n      this.$editable.attr('spellcheck', this.options.spellCheck);\n      this.$editable.attr('autocorrect', this.options.spellCheck);\n\n      if (this.options.disableGrammar) {\n        this.$editable.attr('data-gramm', false);\n      } // init content before set event\n\n\n      this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n      this.$editable.on(env.inputEventName, func.debounce(function () {\n        _this2.context.triggerEvent('change', _this2.$editable.html(), _this2.$editable);\n      }, 10));\n      this.$editable.on('focusin', function (event) {\n        _this2.context.triggerEvent('focusin', event);\n      }).on('focusout', function (event) {\n        _this2.context.triggerEvent('focusout', event);\n      });\n\n      if (this.options.airMode) {\n        if (this.options.overrideContextMenu) {\n          this.$editor.on('contextmenu', function (event) {\n            _this2.context.triggerEvent('contextmenu', event);\n\n            return false;\n          });\n        }\n      } else {\n        if (this.options.width) {\n          this.$editor.outerWidth(this.options.width);\n        }\n\n        if (this.options.height) {\n          this.$editable.outerHeight(this.options.height);\n        }\n\n        if (this.options.maxHeight) {\n          this.$editable.css('max-height', this.options.maxHeight);\n        }\n\n        if (this.options.minHeight) {\n          this.$editable.css('min-height', this.options.minHeight);\n        }\n      }\n\n      this.history.recordUndo();\n      this.setLastRange();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$editable.off();\n    }\n  }, {\n    key: \"handleKeyMap\",\n    value: function handleKeyMap(event) {\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      var keys = [];\n\n      if (event.metaKey) {\n        keys.push('CMD');\n      }\n\n      if (event.ctrlKey && !event.altKey) {\n        keys.push('CTRL');\n      }\n\n      if (event.shiftKey) {\n        keys.push('SHIFT');\n      }\n\n      var keyName = core_key.nameFromCode[event.keyCode];\n\n      if (keyName) {\n        keys.push(keyName);\n      }\n\n      var eventName = keyMap[keys.join('+')];\n\n      if (keyName === 'TAB' && !this.options.tabDisable) {\n        this.afterCommand();\n      } else if (eventName) {\n        if (this.context.invoke(eventName) !== false) {\n          event.preventDefault(); // if keyMap action was invoked\n\n          return true;\n        }\n      } else if (core_key.isEdit(event.keyCode)) {\n        this.afterCommand();\n      }\n\n      return false;\n    }\n  }, {\n    key: \"preventDefaultEditableShortCuts\",\n    value: function preventDefaultEditableShortCuts(event) {\n      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n      if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) {\n        event.preventDefault();\n      }\n    }\n  }, {\n    key: \"isLimited\",\n    value: function isLimited(pad, event) {\n      pad = pad || 0;\n\n      if (typeof event !== 'undefined') {\n        if (core_key.isMove(event.keyCode) || core_key.isNavigation(event.keyCode) || event.ctrlKey || event.metaKey || lists.contains([core_key.code.BACKSPACE, core_key.code.DELETE], event.keyCode)) {\n          return false;\n        }\n      }\n\n      if (this.options.maxTextLength > 0) {\n        if (this.$editable.text().length + pad > this.options.maxTextLength) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n    /**\n     * create range\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"createRange\",\n    value: function createRange() {\n      this.focus();\n      this.setLastRange();\n      return this.getLastRange();\n    }\n    /**\n     * create a new range from the list of elements\n     *\n     * @param {list} dom element list\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"createRangeFromList\",\n    value: function createRangeFromList(lst) {\n      var startRange = range.createFromNodeBefore(lists.head(lst));\n      var startPoint = startRange.getStartPoint();\n      var endRange = range.createFromNodeAfter(lists.last(lst));\n      var endPoint = endRange.getEndPoint();\n      return range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * set the last range\n     *\n     * if given rng is exist, set rng as the last range\n     * or create a new range at the end of the document\n     *\n     * @param {WrappedRange} rng\n     */\n\n  }, {\n    key: \"setLastRange\",\n    value: function setLastRange(rng) {\n      if (rng) {\n        this.lastRange = rng;\n      } else {\n        this.lastRange = range.create(this.editable);\n\n        if (external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.lastRange.sc).closest('.note-editable').length === 0) {\n          this.lastRange = range.createFromBodyElement(this.editable);\n        }\n      }\n    }\n    /**\n     * get the last range\n     *\n     * if there is a saved last range, return it\n     * or create a new range and return it\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      if (!this.lastRange) {\n        this.setLastRange();\n      }\n\n      return this.lastRange;\n    }\n    /**\n     * saveRange\n     *\n     * save current range\n     *\n     * @param {Boolean} [thenCollapse=false]\n     */\n\n  }, {\n    key: \"saveRange\",\n    value: function saveRange(thenCollapse) {\n      if (thenCollapse) {\n        this.getLastRange().collapse().select();\n      }\n    }\n    /**\n     * restoreRange\n     *\n     * restore lately range\n     */\n\n  }, {\n    key: \"restoreRange\",\n    value: function restoreRange() {\n      if (this.lastRange) {\n        this.lastRange.select();\n        this.focus();\n      }\n    }\n  }, {\n    key: \"saveTarget\",\n    value: function saveTarget(node) {\n      this.$editable.data('target', node);\n    }\n  }, {\n    key: \"clearTarget\",\n    value: function clearTarget() {\n      this.$editable.removeData('target');\n    }\n  }, {\n    key: \"restoreTarget\",\n    value: function restoreTarget() {\n      return this.$editable.data('target');\n    }\n    /**\n     * currentStyle\n     *\n     * current style\n     * @return {Object|Boolean} unfocus\n     */\n\n  }, {\n    key: \"currentStyle\",\n    value: function currentStyle() {\n      var rng = range.create();\n\n      if (rng) {\n        rng = rng.normalize();\n      }\n\n      return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n    }\n    /**\n     * style from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n\n  }, {\n    key: \"styleFromNode\",\n    value: function styleFromNode($node) {\n      return this.style.fromNode($node);\n    }\n    /**\n     * undo\n     */\n\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.undo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /*\n    * commit\n    */\n\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.commit();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /**\n     * redo\n     */\n\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.redo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /**\n     * before command\n     */\n\n  }, {\n    key: \"beforeCommand\",\n    value: function beforeCommand() {\n      this.context.triggerEvent('before.command', this.$editable.html()); // Set styleWithCSS before run a command\n\n      document.execCommand('styleWithCSS', false, this.options.styleWithCSS); // keep focus on editable before command execution\n\n      this.focus();\n    }\n    /**\n     * after command\n     * @param {Boolean} isPreventTrigger\n     */\n\n  }, {\n    key: \"afterCommand\",\n    value: function afterCommand(isPreventTrigger) {\n      this.normalizeContent();\n      this.history.recordUndo();\n\n      if (!isPreventTrigger) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n    /**\n     * handle tab key\n     */\n\n  }, {\n    key: \"tab\",\n    value: function tab() {\n      var rng = this.getLastRange();\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n\n        if (!this.isLimited(this.options.tabSize)) {\n          this.beforeCommand();\n          this.typing.insertTab(rng, this.options.tabSize);\n          this.afterCommand();\n        }\n      }\n    }\n    /**\n     * handle shift+tab key\n     */\n\n  }, {\n    key: \"untab\",\n    value: function untab() {\n      var rng = this.getLastRange();\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng, true);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n      }\n    }\n    /**\n     * run given function between beforeCommand and afterCommand\n     */\n\n  }, {\n    key: \"wrapCommand\",\n    value: function wrapCommand(fn) {\n      return function () {\n        this.beforeCommand();\n        fn.apply(this, arguments);\n        this.afterCommand();\n      };\n    }\n    /**\n     * insert image\n     *\n     * @param {String} src\n     * @param {String|Function} param\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"insertImage\",\n    value: function insertImage(src, param) {\n      var _this3 = this;\n\n      return createImage(src, param).then(function ($image) {\n        _this3.beforeCommand();\n\n        if (typeof param === 'function') {\n          param($image);\n        } else {\n          if (typeof param === 'string') {\n            $image.attr('data-filename', param);\n          }\n\n          $image.css('width', Math.min(_this3.$editable.width(), $image.width()));\n        }\n\n        $image.show();\n\n        _this3.getLastRange().insertNode($image[0]);\n\n        _this3.setLastRange(range.createFromNodeAfter($image[0]).select());\n\n        _this3.afterCommand();\n      }).fail(function (e) {\n        _this3.context.triggerEvent('image.upload.error', e);\n      });\n    }\n    /**\n     * insertImages\n     * @param {File[]} files\n     */\n\n  }, {\n    key: \"insertImagesAsDataURL\",\n    value: function insertImagesAsDataURL(files) {\n      var _this4 = this;\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(files, function (idx, file) {\n        var filename = file.name;\n\n        if (_this4.options.maximumImageFileSize && _this4.options.maximumImageFileSize < file.size) {\n          _this4.context.triggerEvent('image.upload.error', _this4.lang.image.maximumFileSizeError);\n        } else {\n          readFileAsDataURL(file).then(function (dataURL) {\n            return _this4.insertImage(dataURL, filename);\n          }).fail(function () {\n            _this4.context.triggerEvent('image.upload.error');\n          });\n        }\n      });\n    }\n    /**\n     * insertImagesOrCallback\n     * @param {File[]} files\n     */\n\n  }, {\n    key: \"insertImagesOrCallback\",\n    value: function insertImagesOrCallback(files) {\n      var callbacks = this.options.callbacks; // If onImageUpload set,\n\n      if (callbacks.onImageUpload) {\n        this.context.triggerEvent('image.upload', files); // else insert Image as dataURL\n      } else {\n        this.insertImagesAsDataURL(files);\n      }\n    }\n    /**\n     * return selected plain text\n     * @return {String} text\n     */\n\n  }, {\n    key: \"getSelectedText\",\n    value: function getSelectedText() {\n      var rng = this.getLastRange(); // if range on anchor, expand range with anchor\n\n      if (rng.isOnAnchor()) {\n        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n      }\n\n      return rng.toString();\n    }\n  }, {\n    key: \"onFormatBlock\",\n    value: function onFormatBlock(tagName, $target) {\n      // [workaround] for MSIE, IE need `<`\n      document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName); // support custom class\n\n      if ($target && $target.length) {\n        // find the exact element has given tagName\n        if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n          $target = $target.find(tagName);\n        }\n\n        if ($target && $target.length) {\n          var className = $target[0].className || '';\n\n          if (className) {\n            var currentRange = this.createRange();\n            var $parent = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()([currentRange.sc, currentRange.ec]).closest(tagName);\n            $parent.addClass(className);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"formatPara\",\n    value: function formatPara() {\n      this.formatBlock('P');\n    }\n  }, {\n    key: \"fontStyling\",\n    value: function fontStyling(target, value) {\n      var rng = this.getLastRange();\n\n      if (rng !== '') {\n        var spans = this.style.styleNodes(rng);\n        this.$editor.find('.note-status-output').html('');\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(spans).css(target, value); // [workaround] added styled bogus span for style\n        //  - also bogus character needed for cursor position\n\n        if (rng.isCollapsed()) {\n          var firstSpan = lists.head(spans);\n\n          if (firstSpan && !dom.nodeLength(firstSpan)) {\n            firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n            range.createFromNode(firstSpan.firstChild).select();\n            this.setLastRange();\n            this.$editable.data(KEY_BOGUS, firstSpan);\n          }\n        } else {\n          this.setLastRange(this.createRangeFromList(spans).select());\n        }\n      } else {\n        var noteStatusOutput = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.now();\n        this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n        setTimeout(function () {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('#note-status-output-' + noteStatusOutput).remove();\n        }, 5000);\n      }\n    }\n    /**\n     * unlink\n     *\n     * @type command\n     */\n\n  }, {\n    key: \"unlink\",\n    value: function unlink() {\n      var rng = this.getLastRange();\n\n      if (rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        rng = range.createFromNode(anchor);\n        rng.select();\n        this.setLastRange();\n        this.beforeCommand();\n        document.execCommand('unlink');\n        this.afterCommand();\n      }\n    }\n    /**\n     * returns link info\n     *\n     * @return {Object}\n     * @return {WrappedRange} return.range\n     * @return {String} return.text\n     * @return {Boolean} [return.isNewWindow=true]\n     * @return {String} [return.url=\"\"]\n     */\n\n  }, {\n    key: \"getLinkInfo\",\n    value: function getLinkInfo() {\n      var rng = this.getLastRange().expand(dom.isAnchor); // Get the first anchor on range(for edit).\n\n      var $anchor = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(lists.head(rng.nodes(dom.isAnchor)));\n      var linkInfo = {\n        range: rng,\n        text: rng.toString(),\n        url: $anchor.length ? $anchor.attr('href') : ''\n      }; // When anchor exists,\n\n      if ($anchor.length) {\n        // Set isNewWindow by checking its target.\n        linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n      }\n\n      return linkInfo;\n    }\n  }, {\n    key: \"addRow\",\n    value: function addRow(position) {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addRow(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"addCol\",\n    value: function addCol(position) {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addCol(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteRow(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteCol(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteTable(rng);\n        this.afterCommand();\n      }\n    }\n    /**\n     * @param {Position} pos\n     * @param {jQuery} $target - target element\n     * @param {Boolean} [bKeepRatio] - keep ratio\n     */\n\n  }, {\n    key: \"resizeTo\",\n    value: function resizeTo(pos, $target, bKeepRatio) {\n      var imageSize;\n\n      if (bKeepRatio) {\n        var newRatio = pos.y / pos.x;\n        var ratio = $target.data('ratio');\n        imageSize = {\n          width: ratio > newRatio ? pos.x : pos.y / ratio,\n          height: ratio > newRatio ? pos.x * ratio : pos.y\n        };\n      } else {\n        imageSize = {\n          width: pos.x,\n          height: pos.y\n        };\n      }\n\n      $target.css(imageSize);\n    }\n    /**\n     * returns whether editable area has focus or not.\n     */\n\n  }, {\n    key: \"hasFocus\",\n    value: function hasFocus() {\n      return this.$editable.is(':focus');\n    }\n    /**\n     * set focus\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // [workaround] Screen will move when page is scolled in IE.\n      //  - do focus when not focused\n      if (!this.hasFocus()) {\n        this.$editable.focus();\n      }\n    }\n    /**\n     * returns whether contents is empty or not.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n    }\n    /**\n     * Removes all contents and restores the editable instance to an _emptyPara_.\n     */\n\n  }, {\n    key: \"empty\",\n    value: function empty() {\n      this.context.invoke('code', dom.emptyPara);\n    }\n    /**\n     * normalize content\n     */\n\n  }, {\n    key: \"normalizeContent\",\n    value: function normalizeContent() {\n      this.$editable[0].normalize();\n    }\n  }]);\n\n  return Editor;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Clipboard.js\nfunction Clipboard_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Clipboard_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Clipboard_createClass(Constructor, protoProps, staticProps) { if (protoProps) Clipboard_defineProperties(Constructor.prototype, protoProps); if (staticProps) Clipboard_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Clipboard_Clipboard = /*#__PURE__*/function () {\n  function Clipboard(context) {\n    Clipboard_classCallCheck(this, Clipboard);\n\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n  }\n\n  Clipboard_createClass(Clipboard, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.$editable.on('paste', this.pasteByEvent.bind(this));\n    }\n    /**\n     * paste by clipboard event\n     *\n     * @param {Event} event\n     */\n\n  }, {\n    key: \"pasteByEvent\",\n    value: function pasteByEvent(event) {\n      var _this = this;\n\n      var clipboardData = event.originalEvent.clipboardData;\n\n      if (clipboardData && clipboardData.items && clipboardData.items.length) {\n        var item = clipboardData.items.length > 1 ? clipboardData.items[1] : lists.head(clipboardData.items);\n\n        if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {\n          // paste img file\n          this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);\n          event.preventDefault();\n        } else if (item.kind === 'string') {\n          // paste text with maxTextLength check\n          if (this.context.invoke('editor.isLimited', clipboardData.getData('Text').length)) {\n            event.preventDefault();\n          }\n        }\n      } else if (window.clipboardData) {\n        // for IE\n        var text = window.clipboardData.getData('text');\n\n        if (this.context.invoke('editor.isLimited', text.length)) {\n          event.preventDefault();\n        }\n      } // Call editor.afterCommand after proceeding default event handler\n\n\n      setTimeout(function () {\n        _this.context.invoke('editor.afterCommand');\n      }, 10);\n    }\n  }]);\n\n  return Clipboard;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Dropzone.js\nfunction Dropzone_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Dropzone_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Dropzone_createClass(Constructor, protoProps, staticProps) { if (protoProps) Dropzone_defineProperties(Constructor.prototype, protoProps); if (staticProps) Dropzone_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Dropzone_Dropzone = /*#__PURE__*/function () {\n  function Dropzone(context) {\n    Dropzone_classCallCheck(this, Dropzone);\n\n    this.context = context;\n    this.$eventListener = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n    this.$dropzone = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(['<div class=\"note-dropzone\">', '<div class=\"note-dropzone-message\"></div>', '</div>'].join('')).prependTo(this.$editor);\n  }\n  /**\n   * attach Drag and Drop Events\n   */\n\n\n  Dropzone_createClass(Dropzone, [{\n    key: \"initialize\",\n    value: function initialize() {\n      if (this.options.disableDragAndDrop) {\n        // prevent default drop event\n        this.documentEventHandlers.onDrop = function (e) {\n          e.preventDefault();\n        }; // do not consider outside of dropzone\n\n\n        this.$eventListener = this.$dropzone;\n        this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n      } else {\n        this.attachDragAndDropEvent();\n      }\n    }\n    /**\n     * attach Drag and Drop Events\n     */\n\n  }, {\n    key: \"attachDragAndDropEvent\",\n    value: function attachDragAndDropEvent() {\n      var _this = this;\n\n      var collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n      var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n\n      this.documentEventHandlers.onDragenter = function (e) {\n        var isCodeview = _this.context.invoke('codeview.isActivated');\n\n        var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0;\n\n        if (!isCodeview && !collection.length && hasEditorSize) {\n          _this.$editor.addClass('dragover');\n\n          _this.$dropzone.width(_this.$editor.width());\n\n          _this.$dropzone.height(_this.$editor.height());\n\n          $dropzoneMessage.text(_this.lang.image.dragImageHere);\n        }\n\n        collection = collection.add(e.target);\n      };\n\n      this.documentEventHandlers.onDragleave = function (e) {\n        collection = collection.not(e.target); // If nodeName is BODY, then just make it over (fix for IE)\n\n        if (!collection.length || e.target.nodeName === 'BODY') {\n          collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n\n          _this.$editor.removeClass('dragover');\n        }\n      };\n\n      this.documentEventHandlers.onDrop = function () {\n        collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n\n        _this.$editor.removeClass('dragover');\n      }; // show dropzone on dragenter when dragging a object to document\n      // -but only if the editor is visible, i.e. has a positive width and height\n\n\n      this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter).on('dragleave', this.documentEventHandlers.onDragleave).on('drop', this.documentEventHandlers.onDrop); // change dropzone's message on hover.\n\n      this.$dropzone.on('dragenter', function () {\n        _this.$dropzone.addClass('hover');\n\n        $dropzoneMessage.text(_this.lang.image.dropImage);\n      }).on('dragleave', function () {\n        _this.$dropzone.removeClass('hover');\n\n        $dropzoneMessage.text(_this.lang.image.dragImageHere);\n      }); // attach dropImage\n\n      this.$dropzone.on('drop', function (event) {\n        var dataTransfer = event.originalEvent.dataTransfer; // stop the browser from opening the dropped content\n\n        event.preventDefault();\n\n        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n          _this.$editable.focus();\n\n          _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(dataTransfer.types, function (idx, type) {\n            // skip moz-specific types\n            if (type.toLowerCase().indexOf('_moz_') > -1) {\n              return;\n            }\n\n            var content = dataTransfer.getData(type);\n\n            if (type.toLowerCase().indexOf('text') > -1) {\n              _this.context.invoke('editor.pasteHTML', content);\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(content).each(function (idx, item) {\n                _this.context.invoke('editor.insertNode', item);\n              });\n            }\n          });\n        }\n      }).on('dragover', false); // prevent default dragover event\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n\n      Object.keys(this.documentEventHandlers).forEach(function (key) {\n        _this2.$eventListener.off(key.substr(2).toLowerCase(), _this2.documentEventHandlers[key]);\n      });\n      this.documentEventHandlers = {};\n    }\n  }]);\n\n  return Dropzone;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Codeview.js\nfunction _createForOfIteratorHelper(o) { if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Codeview_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Codeview_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Codeview_createClass(Constructor, protoProps, staticProps) { if (protoProps) Codeview_defineProperties(Constructor.prototype, protoProps); if (staticProps) Codeview_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n/**\n * @class Codeview\n */\n\nvar Codeview_CodeView = /*#__PURE__*/function () {\n  function CodeView(context) {\n    Codeview_classCallCheck(this, CodeView);\n\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n\n  Codeview_createClass(CodeView, [{\n    key: \"sync\",\n    value: function sync(html) {\n      var isCodeview = this.isActivated();\n      var CodeMirror = this.CodeMirrorConstructor;\n\n      if (isCodeview) {\n        if (html) {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').getDoc().setValue(html);\n          } else {\n            this.$codable.val(html);\n          }\n        } else {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').save();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      this.$codable.on('keyup', function (event) {\n        if (event.keyCode === core_key.code.ESCAPE) {\n          _this.deactivate();\n        }\n      });\n    }\n    /**\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isActivated\",\n    value: function isActivated() {\n      return this.$editor.hasClass('codeview');\n    }\n    /**\n     * toggle codeview\n     */\n\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.isActivated()) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n\n      this.context.triggerEvent('codeview.toggled');\n    }\n    /**\n     * purify input value\n     * @param value\n     * @returns {*}\n     */\n\n  }, {\n    key: \"purify\",\n    value: function purify(value) {\n      if (this.options.codeviewFilter) {\n        // filter code view regex\n        value = value.replace(this.options.codeviewFilterRegex, ''); // allow specific iframe tag\n\n        if (this.options.codeviewIframeFilter) {\n          var whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n          value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function (tag) {\n            // remove if src attribute is duplicated\n            if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n              return '';\n            }\n\n            var _iterator = _createForOfIteratorHelper(whitelist),\n                _step;\n\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var src = _step.value;\n\n                // pass if src is trusted\n                if (new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"').test(tag)) {\n                  return tag;\n                }\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n\n            return '';\n          });\n        }\n      }\n\n      return value;\n    }\n    /**\n     * activate code view\n     */\n\n  }, {\n    key: \"activate\",\n    value: function activate() {\n      var _this2 = this;\n\n      var CodeMirror = this.CodeMirrorConstructor;\n      this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n      this.$codable.height(this.$editable.height());\n      this.context.invoke('toolbar.updateCodeview', true);\n      this.context.invoke('airPopover.updateCodeview', true);\n      this.$editor.addClass('codeview');\n      this.$codable.focus(); // activate CodeMirror as codable\n\n      if (CodeMirror) {\n        var cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror); // CodeMirror TernServer\n\n        if (this.options.codemirror.tern) {\n          var server = new CodeMirror.TernServer(this.options.codemirror.tern);\n          cmEditor.ternServer = server;\n          cmEditor.on('cursorActivity', function (cm) {\n            server.updateArgHints(cm);\n          });\n        }\n\n        cmEditor.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n        });\n        cmEditor.on('change', function () {\n          _this2.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n        }); // CodeMirror hasn't Padding.\n\n        cmEditor.setSize(null, this.$editable.outerHeight());\n        this.$codable.data('cmEditor', cmEditor);\n      } else {\n        this.$codable.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', _this2.$codable.val(), event);\n        });\n        this.$codable.on('input', function () {\n          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);\n        });\n      }\n    }\n    /**\n     * deactivate code view\n     */\n\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      var CodeMirror = this.CodeMirrorConstructor; // deactivate CodeMirror as codable\n\n      if (CodeMirror) {\n        var cmEditor = this.$codable.data('cmEditor');\n        this.$codable.val(cmEditor.getValue());\n        cmEditor.toTextArea();\n      }\n\n      var value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n      var isChange = this.$editable.html() !== value;\n      this.$editable.html(value);\n      this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n      this.$editor.removeClass('codeview');\n\n      if (isChange) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n\n      this.$editable.focus();\n      this.context.invoke('toolbar.updateCodeview', false);\n      this.context.invoke('airPopover.updateCodeview', false);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isActivated()) {\n        this.deactivate();\n      }\n    }\n  }]);\n\n  return CodeView;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Statusbar.js\nfunction Statusbar_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Statusbar_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Statusbar_createClass(Constructor, protoProps, staticProps) { if (protoProps) Statusbar_defineProperties(Constructor.prototype, protoProps); if (staticProps) Statusbar_defineProperties(Constructor, staticProps); return Constructor; }\n\n\nvar EDITABLE_PADDING = 24;\n\nvar Statusbar_Statusbar = /*#__PURE__*/function () {\n  function Statusbar(context) {\n    Statusbar_classCallCheck(this, Statusbar);\n\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n  }\n\n  Statusbar_createClass(Statusbar, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      if (this.options.airMode || this.options.disableResizeEditor) {\n        this.destroy();\n        return;\n      }\n\n      this.$statusbar.on('mousedown', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        var editableTop = _this.$editable.offset().top - _this.$document.scrollTop();\n\n        var onMouseMove = function onMouseMove(event) {\n          var height = event.clientY - (editableTop + EDITABLE_PADDING);\n          height = _this.options.minheight > 0 ? Math.max(height, _this.options.minheight) : height;\n          height = _this.options.maxHeight > 0 ? Math.min(height, _this.options.maxHeight) : height;\n\n          _this.$editable.height(height);\n        };\n\n        _this.$document.on('mousemove', onMouseMove).one('mouseup', function () {\n          _this.$document.off('mousemove', onMouseMove);\n        });\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$statusbar.off();\n      this.$statusbar.addClass('locked');\n    }\n  }]);\n\n  return Statusbar;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Fullscreen.js\nfunction Fullscreen_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Fullscreen_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Fullscreen_createClass(Constructor, protoProps, staticProps) { if (protoProps) Fullscreen_defineProperties(Constructor.prototype, protoProps); if (staticProps) Fullscreen_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Fullscreen_Fullscreen = /*#__PURE__*/function () {\n  function Fullscreen(context) {\n    var _this = this;\n\n    Fullscreen_classCallCheck(this, Fullscreen);\n\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.$window = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(window);\n    this.$scrollbar = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('html, body');\n\n    this.onResize = function () {\n      _this.resizeTo({\n        h: _this.$window.height() - _this.$toolbar.outerHeight()\n      });\n    };\n  }\n\n  Fullscreen_createClass(Fullscreen, [{\n    key: \"resizeTo\",\n    value: function resizeTo(size) {\n      this.$editable.css('height', size.h);\n      this.$codable.css('height', size.h);\n\n      if (this.$codable.data('cmeditor')) {\n        this.$codable.data('cmeditor').setsize(null, size.h);\n      }\n    }\n    /**\n     * toggle fullscreen\n     */\n\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      this.$editor.toggleClass('fullscreen');\n\n      if (this.isFullscreen()) {\n        this.$editable.data('orgHeight', this.$editable.css('height'));\n        this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n        this.$editable.css('maxHeight', '');\n        this.$window.on('resize', this.onResize).trigger('resize');\n        this.$scrollbar.css('overflow', 'hidden');\n      } else {\n        this.$window.off('resize', this.onResize);\n        this.resizeTo({\n          h: this.$editable.data('orgHeight')\n        });\n        this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n        this.$scrollbar.css('overflow', 'visible');\n      }\n\n      this.context.invoke('toolbar.updateFullscreen', this.isFullscreen());\n    }\n  }, {\n    key: \"isFullscreen\",\n    value: function isFullscreen() {\n      return this.$editor.hasClass('fullscreen');\n    }\n  }]);\n\n  return Fullscreen;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Handle.js\nfunction Handle_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Handle_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Handle_createClass(Constructor, protoProps, staticProps) { if (protoProps) Handle_defineProperties(Constructor.prototype, protoProps); if (staticProps) Handle_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar Handle_Handle = /*#__PURE__*/function () {\n  function Handle(context) {\n    var _this = this;\n\n    Handle_classCallCheck(this, Handle);\n\n    this.context = context;\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        if (_this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n\n  Handle_createClass(Handle, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$handle = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(['<div class=\"note-handle\">', '<div class=\"note-control-selection\">', '<div class=\"note-control-selection-bg\"></div>', '<div class=\"note-control-holder note-control-nw\"></div>', '<div class=\"note-control-holder note-control-ne\"></div>', '<div class=\"note-control-holder note-control-sw\"></div>', '<div class=\"', this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing', ' note-control-se\"></div>', this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>', '</div>', '</div>'].join('')).prependTo(this.$editingArea);\n      this.$handle.on('mousedown', function (event) {\n        if (dom.isControlSizing(event.target)) {\n          event.preventDefault();\n          event.stopPropagation();\n\n          var $target = _this2.$handle.find('.note-control-selection').data('target');\n\n          var posStart = $target.offset();\n\n          var scrollTop = _this2.$document.scrollTop();\n\n          var onMouseMove = function onMouseMove(event) {\n            _this2.context.invoke('editor.resizeTo', {\n              x: event.clientX - posStart.left,\n              y: event.clientY - (posStart.top - scrollTop)\n            }, $target, !event.shiftKey);\n\n            _this2.update($target[0], event);\n          };\n\n          _this2.$document.on('mousemove', onMouseMove).one('mouseup', function (e) {\n            e.preventDefault();\n\n            _this2.$document.off('mousemove', onMouseMove);\n\n            _this2.context.invoke('editor.afterCommand');\n          });\n\n          if (!$target.data('ratio')) {\n            // original ratio.\n            $target.data('ratio', $target.height() / $target.width());\n          }\n        }\n      }); // Listen for scrolling on the handle overlay.\n\n      this.$handle.on('wheel', function (e) {\n        e.preventDefault();\n\n        _this2.update();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$handle.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n\n      var isImage = dom.isImg(target);\n      var $selection = this.$handle.find('.note-control-selection');\n      this.context.invoke('imagePopover.update', target, event);\n\n      if (isImage) {\n        var $image = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(target);\n        var position = $image.position();\n        var pos = {\n          left: position.left + parseInt($image.css('marginLeft'), 10),\n          top: position.top + parseInt($image.css('marginTop'), 10)\n        }; // exclude margin\n\n        var imageSize = {\n          w: $image.outerWidth(false),\n          h: $image.outerHeight(false)\n        };\n        $selection.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top,\n          width: imageSize.w,\n          height: imageSize.h\n        }).data('target', $image); // save current image element.\n\n        var origImageObj = new Image();\n        origImageObj.src = $image.attr('src');\n        var sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n        $selection.find('.note-control-selection-info').text(sizingText);\n        this.context.invoke('editor.saveTarget', target);\n      } else {\n        this.hide();\n      }\n\n      return isImage;\n    }\n    /**\n     * hide\n     *\n     * @param {jQuery} $handle\n     */\n\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.context.invoke('editor.clearTarget');\n      this.$handle.children().hide();\n    }\n  }]);\n\n  return Handle;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoLink.js\nfunction AutoLink_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoLink_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoLink_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoLink_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoLink_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar defaultScheme = 'http://';\nvar linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\nvar AutoLink_AutoLink = /*#__PURE__*/function () {\n  function AutoLink(context) {\n    var _this = this;\n\n    AutoLink_classCallCheck(this, AutoLink);\n\n    this.context = context;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      }\n    };\n  }\n\n  AutoLink_createClass(AutoLink, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWordRange) {\n        return;\n      }\n\n      var keyword = this.lastWordRange.toString();\n      var match = keyword.match(linkPattern);\n\n      if (match && (match[1] || match[2])) {\n        var link = match[1] ? keyword : defaultScheme + keyword;\n        var urlText = this.options.showDomainOnlyForAutolink ? keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:www\\.)?/i, '').split('/')[0] : keyword;\n        var node = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<a />').html(urlText).attr('href', link)[0];\n\n        if (this.context.options.linkTargetBlank) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).attr('target', '_blank');\n        }\n\n        this.lastWordRange.insertNode(node);\n        this.lastWordRange = null;\n        this.context.invoke('editor.focus');\n      }\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      if (lists.contains([core_key.code.ENTER, core_key.code.SPACE], e.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWordRange = wordRange;\n      }\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      if (lists.contains([core_key.code.ENTER, core_key.code.SPACE], e.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n\n  return AutoLink;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoSync.js\nfunction AutoSync_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoSync_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoSync_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoSync_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoSync_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n/**\n * textarea auto sync.\n */\n\nvar AutoSync_AutoSync = /*#__PURE__*/function () {\n  function AutoSync(context) {\n    var _this = this;\n\n    AutoSync_classCallCheck(this, AutoSync);\n\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': function summernoteChange() {\n        _this.$note.val(context.invoke('code'));\n      }\n    };\n  }\n\n  AutoSync_createClass(AutoSync, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return dom.isTextarea(this.$note[0]);\n    }\n  }]);\n\n  return AutoSync;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoReplace.js\nfunction AutoReplace_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoReplace_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoReplace_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoReplace_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoReplace_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar AutoReplace_AutoReplace = /*#__PURE__*/function () {\n  function AutoReplace(context) {\n    var _this = this;\n\n    AutoReplace_classCallCheck(this, AutoReplace);\n\n    this.context = context;\n    this.options = context.options.replace || {};\n    this.keys = [core_key.code.ENTER, core_key.code.SPACE, core_key.code.PERIOD, core_key.code.COMMA, core_key.code.SEMICOLON, core_key.code.SLASH];\n    this.previousKeydownCode = null;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      }\n    };\n  }\n\n  AutoReplace_createClass(AutoReplace, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.match;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWord) {\n        return;\n      }\n\n      var self = this;\n      var keyword = this.lastWord.toString();\n      this.options.match(keyword, function (match) {\n        if (match) {\n          var node = '';\n\n          if (typeof match === 'string') {\n            node = dom.createText(match);\n          } else if (match instanceof jQuery) {\n            node = match[0];\n          } else if (match instanceof Node) {\n            node = match;\n          }\n\n          if (!node) return;\n          self.lastWord.insertNode(node);\n          self.lastWord = null;\n          self.context.invoke('editor.focus');\n        }\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      // this forces it to remember the last whole word, even if multiple termination keys are pressed\n      // before the previous key is let go.\n      if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n        this.previousKeydownCode = e.keyCode;\n        return;\n      }\n\n      if (lists.contains(this.keys, e.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWord = wordRange;\n      }\n\n      this.previousKeydownCode = e.keyCode;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      if (lists.contains(this.keys, e.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n\n  return AutoReplace;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Placeholder.js\nfunction Placeholder_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Placeholder_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Placeholder_createClass(Constructor, protoProps, staticProps) { if (protoProps) Placeholder_defineProperties(Constructor.prototype, protoProps); if (staticProps) Placeholder_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Placeholder_Placeholder = /*#__PURE__*/function () {\n  function Placeholder(context) {\n    var _this = this;\n\n    Placeholder_classCallCheck(this, Placeholder);\n\n    this.context = context;\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n\n    this.events = {\n      'summernote.init summernote.change': function summernoteInitSummernoteChange() {\n        _this.update();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n\n  Placeholder_createClass(Placeholder, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.placeholder;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$placeholder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-placeholder\">');\n      this.$placeholder.on('click', function () {\n        _this2.context.invoke('focus');\n      }).html(this.options.placeholder).prependTo(this.$editingArea);\n      this.update();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$placeholder.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n      this.$placeholder.toggle(isShow);\n    }\n  }]);\n\n  return Placeholder;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Buttons.js\nfunction Buttons_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Buttons_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Buttons_createClass(Constructor, protoProps, staticProps) { if (protoProps) Buttons_defineProperties(Constructor.prototype, protoProps); if (staticProps) Buttons_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar Buttons_Buttons = /*#__PURE__*/function () {\n  function Buttons(context) {\n    Buttons_classCallCheck(this, Buttons);\n\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']);\n  }\n\n  Buttons_createClass(Buttons, [{\n    key: \"representShortcut\",\n    value: function representShortcut(editorMethod) {\n      var shortcut = this.invertedKeyMap[editorMethod];\n\n      if (!this.options.shortcuts || !shortcut) {\n        return '';\n      }\n\n      if (env.isMac) {\n        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n      }\n\n      shortcut = shortcut.replace('BACKSLASH', '\\\\').replace('SLASH', '/').replace('LEFTBRACKET', '[').replace('RIGHTBRACKET', ']');\n      return ' (' + shortcut + ')';\n    }\n  }, {\n    key: \"button\",\n    value: function button(o) {\n      if (!this.options.tooltip && o.tooltip) {\n        delete o.tooltip;\n      }\n\n      o.container = this.options.container;\n      return this.ui.button(o);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.addToolbarButtons();\n      this.addImagePopoverButtons();\n      this.addLinkPopoverButtons();\n      this.addTablePopoverButtons();\n      this.fontInstalledMap = {};\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      delete this.fontInstalledMap;\n    }\n  }, {\n    key: \"isFontInstalled\",\n    value: function isFontInstalled(name) {\n      if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n        this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name);\n      }\n\n      return this.fontInstalledMap[name];\n    }\n  }, {\n    key: \"isFontDeservedToAdd\",\n    value: function isFontDeservedToAdd(name) {\n      name = name.toLowerCase();\n      return name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1;\n    }\n  }, {\n    key: \"colorPalette\",\n    value: function colorPalette(className, tooltip, backColor, foreColor) {\n      var _this = this;\n\n      return this.ui.buttonGroup({\n        className: 'note-color ' + className,\n        children: [this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: function click(e) {\n            var $button = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget);\n\n            if (backColor && foreColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor')\n              });\n            } else if (backColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor')\n              });\n            } else if (foreColor) {\n              _this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor')\n              });\n            }\n          },\n          callback: function callback($button) {\n            var $recentColor = $button.find('.note-recent-color');\n\n            if (backColor) {\n              $recentColor.css('background-color', _this.options.colorButton.backColor);\n              $button.attr('data-backColor', _this.options.colorButton.backColor);\n            }\n\n            if (foreColor) {\n              $recentColor.css('color', _this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', _this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          }\n        }), this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), this.ui.dropdown({\n          items: (backColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">', this.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"backColorPicker\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette\">', '</div>', '<div class=\"note-holder-custom\" id=\"backColorPalette\" data-event=\"backColor\"></div>', '</div>'].join('') : '') + (foreColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">', this.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"foreColorPicker\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette\">', '</div>', // Fix missing Div, Commented to find easily if it's wrong\n          '<div class=\"note-holder-custom\" id=\"foreColorPalette\" data-event=\"foreColor\"></div>', '</div>'].join('') : ''),\n          callback: function callback($dropdown) {\n            $dropdown.find('.note-holder').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: _this.options.colors,\n                colorsName: _this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n\n            var customColors = [['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF']];\n            $dropdown.find('.note-holder-custom').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each(function (idx, item) {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item).change(function () {\n                var $chip = $dropdown.find('#' + external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this).data('event')).find('.note-color-btn').first();\n                var color = this.value.toUpperCase();\n                $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n                $chip.click();\n              });\n            });\n          },\n          click: function click(event) {\n            event.stopPropagation();\n            var $parent = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('.' + className).find('.note-dropdown-menu');\n            var $button = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target);\n            var eventName = $button.data('event');\n            var value = $button.attr('data-value');\n\n            if (eventName === 'openPalette') {\n              var $picker = $parent.find('#' + value);\n              var $palette = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]); // Shift palette chips\n\n              var $chip = $palette.find('.note-color-btn').last().detach(); // Set chip attributes\n\n              var color = $picker.val();\n              $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.click();\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                var key = eventName === 'backColor' ? 'background-color' : 'color';\n                var $color = $button.closest('.note-color').find('.note-recent-color');\n                var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n\n              _this.context.invoke('editor.' + eventName, value);\n            }\n          }\n        })]\n      }).render();\n    }\n  }, {\n    key: \"addToolbarButtons\",\n    value: function addToolbarButtons() {\n      var _this2 = this;\n\n      this.context.memo('button.style', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.magic), _this2.options),\n          tooltip: _this2.lang.style.style,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          className: 'dropdown-style',\n          items: _this2.options.styleTags,\n          title: _this2.lang.style.style,\n          template: function template(item) {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: Object.prototype.hasOwnProperty.call(_this2.lang.style, item) ? _this2.lang.style[item] : item\n              };\n            }\n\n            var tag = item.tag;\n            var title = item.title;\n            var style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            var className = item.className ? ' class=\"' + item.className + '\"' : '';\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: _this2.context.createInvokeHandler('editor.formatBlock')\n        })]).render();\n      });\n\n      var _loop = function _loop(styleIdx, styleLen) {\n        var item = _this2.options.styleTags[styleIdx];\n\n        _this2.context.memo('button.style.' + item, function () {\n          return _this2.button({\n            className: 'note-btn-style-' + item,\n            contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n            tooltip: _this2.lang.style[item],\n            click: _this2.context.createInvokeHandler('editor.formatBlock')\n          }).render();\n        });\n      };\n\n      for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n        _loop(styleIdx, styleLen);\n      }\n\n      this.context.memo('button.bold', function () {\n        return _this2.button({\n          className: 'note-btn-bold',\n          contents: _this2.ui.icon(_this2.options.icons.bold),\n          tooltip: _this2.lang.font.bold + _this2.representShortcut('bold'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.bold')\n        }).render();\n      });\n      this.context.memo('button.italic', function () {\n        return _this2.button({\n          className: 'note-btn-italic',\n          contents: _this2.ui.icon(_this2.options.icons.italic),\n          tooltip: _this2.lang.font.italic + _this2.representShortcut('italic'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.italic')\n        }).render();\n      });\n      this.context.memo('button.underline', function () {\n        return _this2.button({\n          className: 'note-btn-underline',\n          contents: _this2.ui.icon(_this2.options.icons.underline),\n          tooltip: _this2.lang.font.underline + _this2.representShortcut('underline'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.underline')\n        }).render();\n      });\n      this.context.memo('button.clear', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.eraser),\n          tooltip: _this2.lang.font.clear + _this2.representShortcut('removeFormat'),\n          click: _this2.context.createInvokeHandler('editor.removeFormat')\n        }).render();\n      });\n      this.context.memo('button.strikethrough', function () {\n        return _this2.button({\n          className: 'note-btn-strikethrough',\n          contents: _this2.ui.icon(_this2.options.icons.strikethrough),\n          tooltip: _this2.lang.font.strikethrough + _this2.representShortcut('strikethrough'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n        }).render();\n      });\n      this.context.memo('button.superscript', function () {\n        return _this2.button({\n          className: 'note-btn-superscript',\n          contents: _this2.ui.icon(_this2.options.icons.superscript),\n          tooltip: _this2.lang.font.superscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.superscript')\n        }).render();\n      });\n      this.context.memo('button.subscript', function () {\n        return _this2.button({\n          className: 'note-btn-subscript',\n          contents: _this2.ui.icon(_this2.options.icons.subscript),\n          tooltip: _this2.lang.font.subscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.subscript')\n        }).render();\n      });\n      this.context.memo('button.fontname', function () {\n        var styleInfo = _this2.context.invoke('editor.currentStyle');\n\n        if (_this2.options.addDefaultFonts) {\n          // Add 'default' fonts into the fontnames array if not exist\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(styleInfo['font-family'].split(','), function (idx, fontname) {\n            fontname = fontname.trim().replace(/['\"]+/g, '');\n\n            if (_this2.isFontDeservedToAdd(fontname)) {\n              if (_this2.options.fontNames.indexOf(fontname) === -1) {\n                _this2.options.fontNames.push(fontname);\n              }\n            }\n          });\n        }\n\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontname\"></span>', _this2.options),\n          tooltip: _this2.lang.font.name,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontNames.filter(_this2.isFontInstalled.bind(_this2)),\n          title: _this2.lang.font.name,\n          template: function template(item) {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontName')\n        })]).render();\n      });\n      this.context.memo('button.fontsize', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', _this2.options),\n          tooltip: _this2.lang.font.size,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizes,\n          title: _this2.lang.font.size,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n        })]).render();\n      });\n      this.context.memo('button.fontsizeunit', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', _this2.options),\n          tooltip: _this2.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizeUnits,\n          title: _this2.lang.font.sizeunit,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit')\n        })]).render();\n      });\n      this.context.memo('button.color', function () {\n        return _this2.colorPalette('note-color-all', _this2.lang.color.recent, true, true);\n      });\n      this.context.memo('button.forecolor', function () {\n        return _this2.colorPalette('note-color-fore', _this2.lang.color.foreground, false, true);\n      });\n      this.context.memo('button.backcolor', function () {\n        return _this2.colorPalette('note-color-back', _this2.lang.color.background, true, false);\n      });\n      this.context.memo('button.ul', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.unorderedlist),\n          tooltip: _this2.lang.lists.unordered + _this2.representShortcut('insertUnorderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertUnorderedList')\n        }).render();\n      });\n      this.context.memo('button.ol', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.orderedlist),\n          tooltip: _this2.lang.lists.ordered + _this2.representShortcut('insertOrderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertOrderedList')\n        }).render();\n      });\n      var justifyLeft = this.button({\n        contents: this.ui.icon(this.options.icons.alignLeft),\n        tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n        click: this.context.createInvokeHandler('editor.justifyLeft')\n      });\n      var justifyCenter = this.button({\n        contents: this.ui.icon(this.options.icons.alignCenter),\n        tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n        click: this.context.createInvokeHandler('editor.justifyCenter')\n      });\n      var justifyRight = this.button({\n        contents: this.ui.icon(this.options.icons.alignRight),\n        tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n        click: this.context.createInvokeHandler('editor.justifyRight')\n      });\n      var justifyFull = this.button({\n        contents: this.ui.icon(this.options.icons.alignJustify),\n        tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n        click: this.context.createInvokeHandler('editor.justifyFull')\n      });\n      var outdent = this.button({\n        contents: this.ui.icon(this.options.icons.outdent),\n        tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n        click: this.context.createInvokeHandler('editor.outdent')\n      });\n      var indent = this.button({\n        contents: this.ui.icon(this.options.icons.indent),\n        tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n        click: this.context.createInvokeHandler('editor.indent')\n      });\n      this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n      this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n      this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n      this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n      this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n      this.context.memo('button.indent', func.invoke(indent, 'render'));\n      this.context.memo('button.paragraph', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.alignLeft), _this2.options),\n          tooltip: _this2.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown([_this2.ui.buttonGroup({\n          className: 'note-align',\n          children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n        }), _this2.ui.buttonGroup({\n          className: 'note-list',\n          children: [outdent, indent]\n        })])]).render();\n      });\n      this.context.memo('button.height', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.textHeight), _this2.options),\n          tooltip: _this2.lang.font.height,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          items: _this2.options.lineHeights,\n          checkClassName: _this2.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: _this2.lang.font.height,\n          click: _this2.context.createInvokeHandler('editor.lineHeight')\n        })]).render();\n      });\n      this.context.memo('button.table', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.table), _this2.options),\n          tooltip: _this2.lang.table.table,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          title: _this2.lang.table.table,\n          className: 'note-table',\n          items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n        })], {\n          callback: function callback($node) {\n            var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n            $catcher.css({\n              width: _this2.options.insertTableMaxSize.col + 'em',\n              height: _this2.options.insertTableMaxSize.row + 'em'\n            }).mousedown(_this2.context.createInvokeHandler('editor.insertTable')).on('mousemove', _this2.tableMoveHandler.bind(_this2));\n          }\n        }).render();\n      });\n      this.context.memo('button.link', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.link),\n          tooltip: _this2.lang.link.link + _this2.representShortcut('linkDialog.show'),\n          click: _this2.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.picture', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.picture),\n          tooltip: _this2.lang.image.image,\n          click: _this2.context.createInvokeHandler('imageDialog.show')\n        }).render();\n      });\n      this.context.memo('button.video', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.video),\n          tooltip: _this2.lang.video.video,\n          click: _this2.context.createInvokeHandler('videoDialog.show')\n        }).render();\n      });\n      this.context.memo('button.hr', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.minus),\n          tooltip: _this2.lang.hr.insert + _this2.representShortcut('insertHorizontalRule'),\n          click: _this2.context.createInvokeHandler('editor.insertHorizontalRule')\n        }).render();\n      });\n      this.context.memo('button.fullscreen', function () {\n        return _this2.button({\n          className: 'btn-fullscreen note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.arrowsAlt),\n          tooltip: _this2.lang.options.fullscreen,\n          click: _this2.context.createInvokeHandler('fullscreen.toggle')\n        }).render();\n      });\n      this.context.memo('button.codeview', function () {\n        return _this2.button({\n          className: 'btn-codeview note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.code),\n          tooltip: _this2.lang.options.codeview,\n          click: _this2.context.createInvokeHandler('codeview.toggle')\n        }).render();\n      });\n      this.context.memo('button.redo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.redo),\n          tooltip: _this2.lang.history.redo + _this2.representShortcut('redo'),\n          click: _this2.context.createInvokeHandler('editor.redo')\n        }).render();\n      });\n      this.context.memo('button.undo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.undo),\n          tooltip: _this2.lang.history.undo + _this2.representShortcut('undo'),\n          click: _this2.context.createInvokeHandler('editor.undo')\n        }).render();\n      });\n      this.context.memo('button.help', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.question),\n          tooltip: _this2.lang.options.help,\n          click: _this2.context.createInvokeHandler('helpDialog.show')\n        }).render();\n      });\n    }\n    /**\n     * image: [\n     *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n     *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n     *   ['remove', ['removeMedia']],\n     * ],\n     */\n\n  }, {\n    key: \"addImagePopoverButtons\",\n    value: function addImagePopoverButtons() {\n      var _this3 = this;\n\n      // Image Size Buttons\n      this.context.memo('button.resizeFull', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">100%</span>',\n          tooltip: _this3.lang.image.resizeFull,\n          click: _this3.context.createInvokeHandler('editor.resize', '1')\n        }).render();\n      });\n      this.context.memo('button.resizeHalf', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">50%</span>',\n          tooltip: _this3.lang.image.resizeHalf,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.5')\n        }).render();\n      });\n      this.context.memo('button.resizeQuarter', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">25%</span>',\n          tooltip: _this3.lang.image.resizeQuarter,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.25')\n        }).render();\n      });\n      this.context.memo('button.resizeNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.resizeNone,\n          click: _this3.context.createInvokeHandler('editor.resize', '0')\n        }).render();\n      }); // Float Buttons\n\n      this.context.memo('button.floatLeft', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatLeft),\n          tooltip: _this3.lang.image.floatLeft,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'left')\n        }).render();\n      });\n      this.context.memo('button.floatRight', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatRight),\n          tooltip: _this3.lang.image.floatRight,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'right')\n        }).render();\n      });\n      this.context.memo('button.floatNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.floatNone,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'none')\n        }).render();\n      }); // Remove Buttons\n\n      this.context.memo('button.removeMedia', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.trash),\n          tooltip: _this3.lang.image.remove,\n          click: _this3.context.createInvokeHandler('editor.removeMedia')\n        }).render();\n      });\n    }\n  }, {\n    key: \"addLinkPopoverButtons\",\n    value: function addLinkPopoverButtons() {\n      var _this4 = this;\n\n      this.context.memo('button.linkDialogShow', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.link),\n          tooltip: _this4.lang.link.edit,\n          click: _this4.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.unlink', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.unlink),\n          tooltip: _this4.lang.link.unlink,\n          click: _this4.context.createInvokeHandler('editor.unlink')\n        }).render();\n      });\n    }\n    /**\n     * table : [\n     *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n     *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n     * ],\n     */\n\n  }, {\n    key: \"addTablePopoverButtons\",\n    value: function addTablePopoverButtons() {\n      var _this5 = this;\n\n      this.context.memo('button.addRowUp', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowAbove),\n          tooltip: _this5.lang.table.addRowAbove,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'top')\n        }).render();\n      });\n      this.context.memo('button.addRowDown', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowBelow),\n          tooltip: _this5.lang.table.addRowBelow,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'bottom')\n        }).render();\n      });\n      this.context.memo('button.addColLeft', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colBefore),\n          tooltip: _this5.lang.table.addColLeft,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'left')\n        }).render();\n      });\n      this.context.memo('button.addColRight', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colAfter),\n          tooltip: _this5.lang.table.addColRight,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'right')\n        }).render();\n      });\n      this.context.memo('button.deleteRow', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowRemove),\n          tooltip: _this5.lang.table.delRow,\n          click: _this5.context.createInvokeHandler('editor.deleteRow')\n        }).render();\n      });\n      this.context.memo('button.deleteCol', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colRemove),\n          tooltip: _this5.lang.table.delCol,\n          click: _this5.context.createInvokeHandler('editor.deleteCol')\n        }).render();\n      });\n      this.context.memo('button.deleteTable', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.trash),\n          tooltip: _this5.lang.table.delTable,\n          click: _this5.context.createInvokeHandler('editor.deleteTable')\n        }).render();\n      });\n    }\n  }, {\n    key: \"build\",\n    value: function build($container, groups) {\n      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n        var group = groups[groupIdx];\n        var groupName = Array.isArray(group) ? group[0] : group;\n        var buttons = Array.isArray(group) ? group.length === 1 ? [group[0]] : group[1] : [group];\n        var $group = this.ui.buttonGroup({\n          className: 'note-' + groupName\n        }).render();\n\n        for (var idx = 0, len = buttons.length; idx < len; idx++) {\n          var btn = this.context.memo('button.' + buttons[idx]);\n\n          if (btn) {\n            $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n          }\n        }\n\n        $group.appendTo($container);\n      }\n    }\n    /**\n     * @param {jQuery} [$container]\n     */\n\n  }, {\n    key: \"updateCurrentStyle\",\n    value: function updateCurrentStyle($container) {\n      var _this6 = this;\n\n      var $cont = $container || this.$toolbar;\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      this.updateBtnStates($cont, {\n        '.note-btn-bold': function noteBtnBold() {\n          return styleInfo['font-bold'] === 'bold';\n        },\n        '.note-btn-italic': function noteBtnItalic() {\n          return styleInfo['font-italic'] === 'italic';\n        },\n        '.note-btn-underline': function noteBtnUnderline() {\n          return styleInfo['font-underline'] === 'underline';\n        },\n        '.note-btn-subscript': function noteBtnSubscript() {\n          return styleInfo['font-subscript'] === 'subscript';\n        },\n        '.note-btn-superscript': function noteBtnSuperscript() {\n          return styleInfo['font-superscript'] === 'superscript';\n        },\n        '.note-btn-strikethrough': function noteBtnStrikethrough() {\n          return styleInfo['font-strikethrough'] === 'strikethrough';\n        }\n      });\n\n      if (styleInfo['font-family']) {\n        var fontNames = styleInfo['font-family'].split(',').map(function (name) {\n          return name.replace(/[\\'\\\"]/g, '').replace(/\\s+$/, '').replace(/^\\s+/, '');\n        });\n        var fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n        $cont.find('.dropdown-fontname a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item); // always compare string to avoid creating another func.\n\n          var isChecked = $item.data('value') + '' === fontName + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n      }\n\n      if (styleInfo['font-size']) {\n        var fontSize = styleInfo['font-size'];\n        $cont.find('.dropdown-fontsize a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item); // always compare with string to avoid creating another func.\n\n          var isChecked = $item.data('value') + '' === fontSize + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsize').text(fontSize);\n        var fontSizeUnit = styleInfo['font-size-unit'];\n        $cont.find('.dropdown-fontsizeunit a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n          var isChecked = $item.data('value') + '' === fontSizeUnit + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n      }\n\n      if (styleInfo['line-height']) {\n        var lineHeight = styleInfo['line-height'];\n        $cont.find('.dropdown-line-height li a').each(function (idx, item) {\n          // always compare with string to avoid creating another func.\n          var isChecked = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item).data('value') + '' === lineHeight + '';\n          _this6.className = isChecked ? 'checked' : '';\n        });\n      }\n    }\n  }, {\n    key: \"updateBtnStates\",\n    value: function updateBtnStates($container, infos) {\n      var _this7 = this;\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(infos, function (selector, pred) {\n        _this7.ui.toggleBtnActive($container.find(selector), pred());\n      });\n    }\n  }, {\n    key: \"tableMoveHandler\",\n    value: function tableMoveHandler(event) {\n      var PX_PER_EM = 18;\n      var $picker = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n\n      var $dimensionDisplay = $picker.next();\n      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n      var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n      var posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox\n\n      if (event.offsetX === undefined) {\n        var posCatcher = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target).offset();\n        posOffset = {\n          x: event.pageX - posCatcher.left,\n          y: event.pageY - posCatcher.top\n        };\n      } else {\n        posOffset = {\n          x: event.offsetX,\n          y: event.offsetY\n        };\n      }\n\n      var dim = {\n        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n        r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n      };\n      $highlighted.css({\n        width: dim.c + 'em',\n        height: dim.r + 'em'\n      });\n      $catcher.data('value', dim.c + 'x' + dim.r);\n\n      if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n        $unhighlighted.css({\n          width: dim.c + 1 + 'em'\n        });\n      }\n\n      if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n        $unhighlighted.css({\n          height: dim.r + 1 + 'em'\n        });\n      }\n\n      $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n    }\n  }]);\n\n  return Buttons;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Toolbar.js\nfunction Toolbar_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Toolbar_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Toolbar_createClass(Constructor, protoProps, staticProps) { if (protoProps) Toolbar_defineProperties(Constructor.prototype, protoProps); if (staticProps) Toolbar_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Toolbar_Toolbar = /*#__PURE__*/function () {\n  function Toolbar(context) {\n    Toolbar_classCallCheck(this, Toolbar);\n\n    this.context = context;\n    this.$window = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(window);\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n\n  Toolbar_createClass(Toolbar, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !this.options.airMode;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      this.options.toolbar = this.options.toolbar || [];\n\n      if (!this.options.toolbar.length) {\n        this.$toolbar.hide();\n      } else {\n        this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n      }\n\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n\n      this.changeContainer(false);\n      this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () {\n        _this.context.invoke('buttons.updateCurrentStyle');\n      });\n      this.context.invoke('buttons.updateCurrentStyle');\n\n      if (this.options.followingToolbar) {\n        this.$window.on('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$toolbar.children().remove();\n\n      if (this.options.followingToolbar) {\n        this.$window.off('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"followScroll\",\n    value: function followScroll() {\n      if (this.$editor.hasClass('fullscreen')) {\n        return false;\n      }\n\n      var editorHeight = this.$editor.outerHeight();\n      var editorWidth = this.$editor.width();\n      var toolbarHeight = this.$toolbar.height();\n      var statusbarHeight = this.$statusbar.height(); // check if the web app is currently using another static bar\n\n      var otherBarHeight = 0;\n\n      if (this.options.otherStaticBar) {\n        otherBarHeight = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.otherStaticBar).outerHeight();\n      }\n\n      var currentOffset = this.$document.scrollTop();\n      var editorOffsetTop = this.$editor.offset().top;\n      var editorOffsetBottom = editorOffsetTop + editorHeight;\n      var activateOffset = editorOffsetTop - otherBarHeight;\n      var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n\n      if (!this.isFollowing && currentOffset > activateOffset && currentOffset < deactivateOffsetBottom - toolbarHeight) {\n        this.isFollowing = true;\n        this.$editable.css({\n          marginTop: this.$toolbar.outerHeight()\n        });\n        this.$toolbar.css({\n          position: 'fixed',\n          top: otherBarHeight,\n          width: editorWidth,\n          zIndex: 1000\n        });\n      } else if (this.isFollowing && (currentOffset < activateOffset || currentOffset > deactivateOffsetBottom)) {\n        this.isFollowing = false;\n        this.$toolbar.css({\n          position: 'relative',\n          top: 0,\n          width: '100%',\n          zIndex: 'auto'\n        });\n        this.$editable.css({\n          marginTop: ''\n        });\n      }\n    }\n  }, {\n    key: \"changeContainer\",\n    value: function changeContainer(isFullscreen) {\n      if (isFullscreen) {\n        this.$toolbar.prependTo(this.$editor);\n      } else {\n        if (this.options.toolbarContainer) {\n          this.$toolbar.appendTo(this.options.toolbarContainer);\n        }\n      }\n\n      if (this.options.followingToolbar) {\n        this.followScroll();\n      }\n    }\n  }, {\n    key: \"updateFullscreen\",\n    value: function updateFullscreen(isFullscreen) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n      this.changeContainer(isFullscreen);\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n\n      if (isCodeview) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n    }\n  }, {\n    key: \"activate\",\n    value: function activate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n\n      this.ui.toggleBtn($btn, true);\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n\n      this.ui.toggleBtn($btn, false);\n    }\n  }]);\n\n  return Toolbar;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/LinkDialog.js\nfunction LinkDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction LinkDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LinkDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) LinkDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) LinkDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar LinkDialog_LinkDialog = /*#__PURE__*/function () {\n  function LinkDialog(context) {\n    LinkDialog_classCallCheck(this, LinkDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n\n  LinkDialog_createClass(LinkDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.textToDisplay, \"</label>\"), \"<input id=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-link-text form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>', '<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.url, \"</label>\"), \"<input id=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-link-url form-control note-form-control note-input\\\" type=\\\"text\\\" value=\\\"http://\\\"/>\"), '</div>', !this.options.disableLinkTarget ? external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div/>').append(this.ui.checkbox({\n        className: 'sn-checkbox-open-in-new-window',\n        text: this.lang.link.openInNewWindow,\n        checked: true\n      }).render()).html() : '', external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div/>').append(this.ui.checkbox({\n        className: 'sn-checkbox-use-protocol',\n        text: this.lang.link.useProtocol,\n        checked: true\n      }).render()).html()].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.link.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        className: 'link-dialog',\n        title: this.lang.link.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n    /**\n     * toggle update button\n     */\n\n  }, {\n    key: \"toggleLinkBtn\",\n    value: function toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n      this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n    }\n    /**\n     * Show link dialog and set event handlers on dialog controls.\n     *\n     * @param {Object} linkInfo\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showLinkDialog\",\n    value: function showLinkDialog(linkInfo) {\n      var _this = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $linkText = _this.$dialog.find('.note-link-text');\n\n        var $linkUrl = _this.$dialog.find('.note-link-url');\n\n        var $linkBtn = _this.$dialog.find('.note-link-btn');\n\n        var $openInNewWindow = _this.$dialog.find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n\n        var $useProtocol = _this.$dialog.find('.sn-checkbox-use-protocol input[type=checkbox]');\n\n        _this.ui.onDialogShown(_this.$dialog, function () {\n          _this.context.triggerEvent('dialog.shown'); // If no url was given and given text is valid URL then copy that into URL Field\n\n\n          if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n            linkInfo.url = linkInfo.text;\n          }\n\n          $linkText.on('input paste propertychange', function () {\n            // If linktext was modified by input events,\n            // cloning text from linkUrl will be stopped.\n            linkInfo.text = $linkText.val();\n\n            _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.text);\n          $linkUrl.on('input paste propertychange', function () {\n            // Display same text on `Text to display` as default\n            // when linktext has no text\n            if (!linkInfo.text) {\n              $linkText.val($linkUrl.val());\n            }\n\n            _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.url);\n\n          if (!env.isSupportTouch) {\n            $linkUrl.trigger('focus');\n          }\n\n          _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n\n          _this.bindEnterKey($linkUrl, $linkBtn);\n\n          _this.bindEnterKey($linkText, $linkBtn);\n\n          var isNewWindowChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this.context.options.linkTargetBlank;\n          $openInNewWindow.prop('checked', isNewWindowChecked);\n          var useProtocolChecked = linkInfo.url ? false : _this.context.options.useProtocol;\n          $useProtocol.prop('checked', useProtocolChecked);\n          $linkBtn.one('click', function (event) {\n            event.preventDefault();\n            deferred.resolve({\n              range: linkInfo.range,\n              url: $linkUrl.val(),\n              text: $linkText.val(),\n              isNewWindow: $openInNewWindow.is(':checked'),\n              checkProtocol: $useProtocol.is(':checked')\n            });\n\n            _this.ui.hideDialog(_this.$dialog);\n          });\n        });\n\n        _this.ui.onDialogHidden(_this.$dialog, function () {\n          // detach events\n          $linkText.off();\n          $linkUrl.off();\n          $linkBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this.ui.showDialog(_this.$dialog);\n      }).promise();\n    }\n    /**\n     * @param {Object} layoutInfo\n     */\n\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this2 = this;\n\n      var linkInfo = this.context.invoke('editor.getLinkInfo');\n      this.context.invoke('editor.saveRange');\n      this.showLinkDialog(linkInfo).then(function (linkInfo) {\n        _this2.context.invoke('editor.restoreRange');\n\n        _this2.context.invoke('editor.createLink', linkInfo);\n      }).fail(function () {\n        _this2.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n\n  return LinkDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/LinkPopover.js\nfunction LinkPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction LinkPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LinkPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) LinkPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) LinkPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar LinkPopover_LinkPopover = /*#__PURE__*/function () {\n  function LinkPopover(context) {\n    var _this = this;\n\n    LinkPopover_classCallCheck(this, LinkPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  LinkPopover_createClass(LinkPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.link);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-link-popover',\n        callback: function callback($node) {\n          var $content = $node.find('.popover-content,.note-popover-content');\n          $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n        }\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.link);\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!this.context.invoke('editor.hasFocus')) {\n        this.hide();\n        return;\n      }\n\n      var rng = this.context.invoke('editor.getLastRange');\n\n      if (rng.isCollapsed() && rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        var href = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('href');\n        this.$popover.find('a').attr('href', href).text(href);\n        var pos = dom.posFromPlaceholder(anchor);\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return LinkPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/ImageDialog.js\nfunction ImageDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction ImageDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ImageDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) ImageDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) ImageDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar ImageDialog_ImageDialog = /*#__PURE__*/function () {\n  function ImageDialog(context) {\n    ImageDialog_classCallCheck(this, ImageDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  ImageDialog_createClass(ImageDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var imageLimitation = '';\n\n      if (this.options.maximumImageFileSize) {\n        var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n        var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';\n        imageLimitation = \"<small>\".concat(this.lang.image.maximumFileSize + ' : ' + readableSize, \"</small>\");\n      }\n\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group note-group-select-from-files\">', '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>', '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ', ' type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>', imageLimitation, '</div>', '<div class=\"form-group note-group-image-url\">', '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>', '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>', '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.image.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.image.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n\n      this.context.invoke('editor.saveRange');\n      this.showImageDialog().then(function (data) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n\n        _this.context.invoke('editor.restoreRange');\n\n        if (typeof data === 'string') {\n          // image url\n          // If onImageLinkInsert set,\n          if (_this.options.callbacks.onImageLinkInsert) {\n            _this.context.triggerEvent('image.link.insert', data);\n          } else {\n            _this.context.invoke('editor.insertImage', data);\n          }\n        } else {\n          // array of files\n          _this.context.invoke('editor.insertImagesOrCallback', data);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showImageDialog\",\n    value: function showImageDialog() {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $imageInput = _this2.$dialog.find('.note-image-input');\n\n        var $imageUrl = _this2.$dialog.find('.note-image-url');\n\n        var $imageBtn = _this2.$dialog.find('.note-image-btn');\n\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown'); // Cloning imageInput to clear element.\n\n\n          $imageInput.replaceWith($imageInput.clone().on('change', function (event) {\n            deferred.resolve(event.target.files || event.target.value);\n          }).val(''));\n          $imageUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($imageBtn, $imageUrl.val());\n          }).val('');\n\n          if (!env.isSupportTouch) {\n            $imageUrl.trigger('focus');\n          }\n\n          $imageBtn.click(function (event) {\n            event.preventDefault();\n            deferred.resolve($imageUrl.val());\n          });\n\n          _this2.bindEnterKey($imageUrl, $imageBtn);\n        });\n\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $imageInput.off();\n          $imageUrl.off();\n          $imageBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n\n  return ImageDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/ImagePopover.js\nfunction ImagePopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction ImagePopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ImagePopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) ImagePopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) ImagePopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\n\nvar ImagePopover_ImagePopover = /*#__PURE__*/function () {\n  function ImagePopover(context) {\n    var _this = this;\n\n    ImagePopover_classCallCheck(this, ImagePopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n    this.events = {\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  ImagePopover_createClass(ImagePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.image);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-image-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.image);\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (dom.isImg(target)) {\n        var position = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(target).offset();\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        var pos = {};\n\n        if (this.options.popatmouse) {\n          pos.left = event.pageX - 20;\n          pos.top = event.pageY;\n        } else {\n          pos = position;\n        }\n\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return ImagePopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/TablePopover.js\nfunction TablePopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction TablePopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TablePopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) TablePopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) TablePopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar TablePopover_TablePopover = /*#__PURE__*/function () {\n  function TablePopover(context) {\n    var _this = this;\n\n    TablePopover_classCallCheck(this, TablePopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        _this.update(e.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': function summernoteKeyupSummernoteScrollSummernoteChange() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  TablePopover_createClass(TablePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.table);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-table-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.table); // [workaround] Disable Firefox's default table editor\n\n      if (env.isFF) {\n        document.execCommand('enableInlineTableEditing', false, false);\n      }\n\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n\n      var isCell = dom.isCell(target);\n\n      if (isCell) {\n        var pos = dom.posFromPlaceholder(target);\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n\n      return isCell;\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return TablePopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/VideoDialog.js\nfunction VideoDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction VideoDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction VideoDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) VideoDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) VideoDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar VideoDialog_VideoDialog = /*#__PURE__*/function () {\n  function VideoDialog(context) {\n    VideoDialog_classCallCheck(this, VideoDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  VideoDialog_createClass(VideoDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group row-fluid\">', \"<label for=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.video.url, \" <small class=\\\"text-muted\\\">\").concat(this.lang.video.providers, \"</small></label>\"), \"<input id=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-video-url form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.video.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.video.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"createVideoNode\",\n    value: function createVideoNode(url) {\n      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)\n      var ytRegExp = /\\/\\/(?:(?:www|m)\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))([\\w|-]{11})(?:(?:[\\?&]t=)(\\S+))?$/;\n      var ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n      var ytMatch = url.match(ytRegExp);\n      var igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/;\n      var igMatch = url.match(igRegExp);\n      var vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n      var vMatch = url.match(vRegExp);\n      var vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n      var vimMatch = url.match(vimRegExp);\n      var dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n      var dmMatch = url.match(dmRegExp);\n      var youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n      var youkuMatch = url.match(youkuRegExp);\n      var qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n      var qqMatch = url.match(qqRegExp);\n      var qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n      var qqMatch2 = url.match(qqRegExp2);\n      var mp4RegExp = /^.+.(mp4|m4v)$/;\n      var mp4Match = url.match(mp4RegExp);\n      var oggRegExp = /^.+.(ogg|ogv)$/;\n      var oggMatch = url.match(oggRegExp);\n      var webmRegExp = /^.+.(webm)$/;\n      var webmMatch = url.match(webmRegExp);\n      var fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n      var fbMatch = url.match(fbRegExp);\n      var $video;\n\n      if (ytMatch && ytMatch[1].length === 11) {\n        var youtubeId = ytMatch[1];\n        var start = 0;\n\n        if (typeof ytMatch[2] !== 'undefined') {\n          var ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n\n          if (ytMatchForStart) {\n            for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n              start += typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0;\n            }\n          }\n        }\n\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : '')).attr('width', '640').attr('height', '360');\n      } else if (igMatch && igMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/').attr('width', '612').attr('height', '710').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else if (vMatch && vMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', vMatch[0] + '/embed/simple').attr('width', '600').attr('height', '600').attr('class', 'vine-embed');\n      } else if (vimMatch && vimMatch[3].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('src', '//player.vimeo.com/video/' + vimMatch[3]).attr('width', '640').attr('height', '360');\n      } else if (dmMatch && dmMatch[2].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]).attr('width', '640').attr('height', '360');\n      } else if (youkuMatch && youkuMatch[1].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '498').attr('width', '510').attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n      } else if (qqMatch && qqMatch[1].length || qqMatch2 && qqMatch2[2].length) {\n        var vid = qqMatch && qqMatch[1].length ? qqMatch[1] : qqMatch2[2];\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '310').attr('width', '500').attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n      } else if (mp4Match || oggMatch || webmMatch) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<video controls>').attr('src', url).attr('width', '640').attr('height', '360');\n      } else if (fbMatch && fbMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560').attr('width', '560').attr('height', '301').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else {\n        // this is not a known video link. Now what, Cat? Now what?\n        return false;\n      }\n\n      $video.addClass('note-video-clip');\n      return $video[0];\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n\n      var text = this.context.invoke('editor.getSelectedText');\n      this.context.invoke('editor.saveRange');\n      this.showVideoDialog(text).then(function (url) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n\n        _this.context.invoke('editor.restoreRange'); // build node\n\n\n        var $node = _this.createVideoNode(url);\n\n        if ($node) {\n          // insert video node\n          _this.context.invoke('editor.insertNode', $node);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n    /**\n     * show video dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showVideoDialog\",\n    value: function showVideoDialog()\n    /* text */\n    {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $videoUrl = _this2.$dialog.find('.note-video-url');\n\n        var $videoBtn = _this2.$dialog.find('.note-video-btn');\n\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          $videoUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($videoBtn, $videoUrl.val());\n          });\n\n          if (!env.isSupportTouch) {\n            $videoUrl.trigger('focus');\n          }\n\n          $videoBtn.click(function (event) {\n            event.preventDefault();\n            deferred.resolve($videoUrl.val());\n          });\n\n          _this2.bindEnterKey($videoUrl, $videoBtn);\n        });\n\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $videoUrl.off();\n          $videoBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n\n  return VideoDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/HelpDialog.js\nfunction HelpDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction HelpDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HelpDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) HelpDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) HelpDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar HelpDialog_HelpDialog = /*#__PURE__*/function () {\n  function HelpDialog(context) {\n    HelpDialog_classCallCheck(this, HelpDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  HelpDialog_createClass(HelpDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<p class=\"text-center\">', '<a href=\"http://summernote.org/\" target=\"_blank\">Summernote 0.8.18</a> · ', '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\">Project</a> · ', '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\">Issues</a>', '</p>'].join('');\n      this.$dialog = this.ui.dialog({\n        title: this.lang.options.help,\n        fade: this.options.dialogsFade,\n        body: this.createShortcutList(),\n        footer: body,\n        callback: function callback($node) {\n          $node.find('.modal-body,.note-modal-body').css({\n            'max-height': 300,\n            'overflow': 'scroll'\n          });\n        }\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"createShortcutList\",\n    value: function createShortcutList() {\n      var _this = this;\n\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      return Object.keys(keyMap).map(function (key) {\n        var command = keyMap[key];\n        var $row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div><div class=\"help-list-item\"></div></div>');\n        $row.append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<label><kbd>' + key + '</kdb></label>').css({\n          'width': 180,\n          'margin-right': 10\n        })).append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<span/>').html(_this.context.memo('help.' + command) || command));\n        return $row.html();\n      }).join('');\n    }\n    /**\n     * show help dialog\n     *\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showHelpDialog\",\n    value: function showHelpDialog() {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          deferred.resolve();\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n\n      this.context.invoke('editor.saveRange');\n      this.showHelpDialog().then(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n\n  return HelpDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AirPopover.js\nfunction AirPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AirPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AirPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) AirPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) AirPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar AIRMODE_POPOVER_X_OFFSET = -5;\nvar AIRMODE_POPOVER_Y_OFFSET = 5;\n\nvar AirPopover_AirPopover = /*#__PURE__*/function () {\n  function AirPopover(context) {\n    var _this = this;\n\n    AirPopover_classCallCheck(this, AirPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n    this.events = {\n      'summernote.contextmenu': function summernoteContextmenu(e) {\n        if (_this.options.editing) {\n          e.preventDefault();\n          e.stopPropagation();\n          _this.onContextmenu = true;\n\n          _this.update(true);\n        }\n      },\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        _this.pageX = e.pageX;\n        _this.pageY = e.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteScroll(we, e) {\n        if (_this.options.editing && !_this.onContextmenu) {\n          _this.pageX = e.pageX;\n          _this.pageY = e.pageY;\n\n          _this.update();\n        }\n\n        _this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.focusout': function summernoteFocusout() {\n        if (!_this.$popover.is(':active,:focus')) {\n          _this.hide();\n        }\n      }\n    };\n  }\n\n  AirPopover_createClass(AirPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$popover = this.ui.popover({\n        className: 'note-air-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.air); // disable hiding this popover preemptively by 'summernote.blur' event.\n\n      this.$popover.on('mousedown', function () {\n        _this2.hidable = false;\n      }); // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n\n      this.$popover.on('mouseup', function () {\n        _this2.hidable = true;\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(forcelyOpen) {\n      var styleInfo = this.context.invoke('editor.currentStyle');\n\n      if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n        var rect = {\n          left: this.pageX,\n          top: this.pageY\n        };\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        rect.top -= containerOffset.top;\n        rect.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n          top: rect.top + AIRMODE_POPOVER_Y_OFFSET\n        });\n        this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n\n      if (isCodeview) {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (this.hidable) {\n        this.$popover.hide();\n      }\n    }\n  }]);\n\n  return AirPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/HintPopover.js\nfunction HintPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction HintPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HintPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) HintPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) HintPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar POPOVER_DIST = 5;\n\nvar HintPopover_HintPopover = /*#__PURE__*/function () {\n  function HintPopover(context) {\n    var _this = this;\n\n    HintPopover_classCallCheck(this, HintPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  HintPopover_createClass(HintPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.hints.length > 0;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.lastWordRange = null;\n      this.matchingWord = null;\n      this.$popover = this.ui.popover({\n        className: 'note-hint-popover',\n        hideArrow: true,\n        direction: ''\n      }).render().appendTo(this.options.container);\n      this.$popover.hide();\n      this.$content = this.$popover.find('.popover-content,.note-popover-content');\n      this.$content.on('click', '.note-hint-item', function (e) {\n        _this2.$content.find('.active').removeClass('active');\n\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget).addClass('active');\n\n        _this2.replace();\n      });\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"selectItem\",\n    value: function selectItem($item) {\n      this.$content.find('.active').removeClass('active');\n      $item.addClass('active');\n      this.$content[0].scrollTop = $item[0].offsetTop - this.$content.innerHeight() / 2;\n    }\n  }, {\n    key: \"moveDown\",\n    value: function moveDown() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $next = $current.next();\n\n      if ($next.length) {\n        this.selectItem($next);\n      } else {\n        var $nextGroup = $current.parent().next();\n\n        if (!$nextGroup.length) {\n          $nextGroup = this.$content.find('.note-hint-group').first();\n        }\n\n        this.selectItem($nextGroup.find('.note-hint-item').first());\n      }\n    }\n  }, {\n    key: \"moveUp\",\n    value: function moveUp() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $prev = $current.prev();\n\n      if ($prev.length) {\n        this.selectItem($prev);\n      } else {\n        var $prevGroup = $current.parent().prev();\n\n        if (!$prevGroup.length) {\n          $prevGroup = this.$content.find('.note-hint-group').last();\n        }\n\n        this.selectItem($prevGroup.find('.note-hint-item').last());\n      }\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      var $item = this.$content.find('.note-hint-item.active');\n\n      if ($item.length) {\n        var node = this.nodeFromItem($item); // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n\n        if (this.matchingWord !== null && this.matchingWord.length === 0) {\n          this.lastWordRange.so = this.lastWordRange.eo; // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n        } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n          var rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n\n          if (rangeCompute > 0) {\n            this.lastWordRange.so += rangeCompute;\n          }\n        }\n\n        this.lastWordRange.insertNode(node);\n\n        if (this.options.hintSelect === 'next') {\n          var blank = document.createTextNode('');\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).after(blank);\n          range.createFromNodeBefore(blank).select();\n        } else {\n          range.createFromNodeAfter(node).select();\n        }\n\n        this.lastWordRange = null;\n        this.hide();\n        this.context.invoke('editor.focus');\n      }\n    }\n  }, {\n    key: \"nodeFromItem\",\n    value: function nodeFromItem($item) {\n      var hint = this.hints[$item.data('index')];\n      var item = $item.data('item');\n      var node = hint.content ? hint.content(item) : item;\n\n      if (typeof node === 'string') {\n        node = dom.createText(node);\n      }\n\n      return node;\n    }\n  }, {\n    key: \"createItemTemplates\",\n    value: function createItemTemplates(hintIdx, items) {\n      var hint = this.hints[hintIdx];\n      return items.map(function (item\n      /*, idx */\n      ) {\n        var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-hint-item\"/>');\n        $item.append(hint.template ? hint.template(item) : item + '');\n        $item.data({\n          'index': hintIdx,\n          'item': item\n        });\n        return $item;\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      if (!this.$popover.is(':visible')) {\n        return;\n      }\n\n      if (e.keyCode === core_key.code.ENTER) {\n        e.preventDefault();\n        this.replace();\n      } else if (e.keyCode === core_key.code.UP) {\n        e.preventDefault();\n        this.moveUp();\n      } else if (e.keyCode === core_key.code.DOWN) {\n        e.preventDefault();\n        this.moveDown();\n      }\n    }\n  }, {\n    key: \"searchKeyword\",\n    value: function searchKeyword(index, keyword, callback) {\n      var hint = this.hints[index];\n\n      if (hint && hint.match.test(keyword) && hint.search) {\n        var matches = hint.match.exec(keyword);\n        this.matchingWord = matches[0];\n        hint.search(matches[1], callback);\n      } else {\n        callback();\n      }\n    }\n  }, {\n    key: \"createGroup\",\n    value: function createGroup(idx, keyword) {\n      var _this3 = this;\n\n      var $group = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n      this.searchKeyword(idx, keyword, function (items) {\n        items = items || [];\n\n        if (items.length) {\n          $group.html(_this3.createItemTemplates(idx, items));\n\n          _this3.show();\n        }\n      });\n      return $group;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      var _this4 = this;\n\n      if (!lists.contains([core_key.code.ENTER, core_key.code.UP, core_key.code.DOWN], e.keyCode)) {\n        var _range = this.context.invoke('editor.getLastRange');\n\n        var wordRange, keyword;\n\n        if (this.options.hintMode === 'words') {\n          wordRange = _range.getWordsRange(_range);\n          keyword = wordRange.toString();\n          this.hints.forEach(function (hint) {\n            if (hint.match.test(keyword)) {\n              wordRange = _range.getWordsMatchRange(hint.match);\n              return false;\n            }\n          });\n\n          if (!wordRange) {\n            this.hide();\n            return;\n          }\n\n          keyword = wordRange.toString();\n        } else {\n          wordRange = _range.getWordRange();\n          keyword = wordRange.toString();\n        }\n\n        if (this.hints.length && keyword) {\n          this.$content.empty();\n          var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n          var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n\n          if (bnd) {\n            bnd.top -= containerOffset.top;\n            bnd.left -= containerOffset.left;\n            this.$popover.hide();\n            this.lastWordRange = wordRange;\n            this.hints.forEach(function (hint, idx) {\n              if (hint.match.test(keyword)) {\n                _this4.createGroup(idx, keyword).appendTo(_this4.$content);\n              }\n            }); // select first .note-hint-item\n\n            this.$content.find('.note-hint-item:first').addClass('active'); // set position for popover after group is created\n\n            if (this.direction === 'top') {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n              });\n            } else {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top + bnd.height + POPOVER_DIST\n              });\n            }\n          }\n        } else {\n          this.hide();\n        }\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$popover.show();\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return HintPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/settings.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote, {\n  version: '0.8.18',\n  plugins: {},\n  dom: dom,\n  range: range,\n  lists: lists,\n  options: {\n    langInfo: external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor_Editor,\n      'clipboard': Clipboard_Clipboard,\n      'dropzone': Dropzone_Dropzone,\n      'codeview': Codeview_CodeView,\n      'statusbar': Statusbar_Statusbar,\n      'fullscreen': Fullscreen_Fullscreen,\n      'handle': Handle_Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover_HintPopover,\n      'autoLink': AutoLink_AutoLink,\n      'autoSync': AutoSync_AutoSync,\n      'autoReplace': AutoReplace_AutoReplace,\n      'placeholder': Placeholder_Placeholder,\n      'buttons': Buttons_Buttons,\n      'toolbar': Toolbar_Toolbar,\n      'linkDialog': LinkDialog_LinkDialog,\n      'linkPopover': LinkPopover_LinkPopover,\n      'imageDialog': ImageDialog_ImageDialog,\n      'imagePopover': ImagePopover_ImagePopover,\n      'tablePopover': TablePopover_TablePopover,\n      'videoDialog': VideoDialog_VideoDialog,\n      'helpDialog': HelpDialog_HelpDialog,\n      'airPopover': AirPopover_AirPopover\n    },\n    buttons: {},\n    lang: 'en-US',\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']]],\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']], ['float', ['floatLeft', 'floatRight', 'floatNone']], ['remove', ['removeMedia']]],\n      link: [['link', ['linkDialogShow', 'unlink']]],\n      table: [['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]],\n      air: [['color', ['color']], ['font', ['bold', 'underline', 'clear']], ['para', ['ul', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], ['view', ['fullscreen', 'codeview']]]\n    },\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false,\n    // TBD\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n    useProtocol: true,\n    defaultProtocol: 'http://',\n    focus: false,\n    tabDisabled: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n    fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana'],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n    fontSizeUnits: ['px', 'pt'],\n    // pallete colors(n x n)\n    colors: [['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']],\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']],\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00'\n    },\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n    tableClassName: 'table table-bordered',\n    insertTableMaxSize: {\n      col: 10,\n      row: 10\n    },\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n    maximumImageFileSize: null,\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null\n    },\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true\n    },\n    codeviewFilter: false,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: ['www.youtube.com', 'www.youtube-nocookie.com', 'www.facebook.com', 'vine.co', 'instagram.com', 'player.vimeo.com', 'www.dailymotion.com', 'player.youku.com', 'v.qq.com'],\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show'\n      },\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show'\n      }\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video'\n    }\n  }\n});\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports, __webpack_require__) {\n\n// extracted by mini-css-extract-plugin\n\n/***/ }),\n\n/***/ 53:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs2\":\"jquery\",\"commonjs\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_ = __webpack_require__(0);\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_);\n\n// EXTERNAL MODULE: ./src/js/base/renderer.js\nvar renderer = __webpack_require__(1);\n\n// CONCATENATED MODULE: ./src/js/bs4/ui.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\nvar editor = renderer[\"a\" /* default */].create('<div class=\"note-editor note-frame card\"/>');\nvar toolbar = renderer[\"a\" /* default */].create('<div class=\"note-toolbar card-header\" role=\"toolbar\"/>');\nvar editingArea = renderer[\"a\" /* default */].create('<div class=\"note-editing-area\"/>');\nvar codable = renderer[\"a\" /* default */].create('<textarea class=\"note-codable\" aria-multiline=\"true\"/>');\nvar editable = renderer[\"a\" /* default */].create('<div class=\"note-editable card-block\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nvar statusbar = renderer[\"a\" /* default */].create(['<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>', '<div class=\"note-statusbar\" role=\"status\">', '<div class=\"note-resizebar\" aria-label=\"Resize\">', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '</div>', '</div>'].join(''));\nvar airEditor = renderer[\"a\" /* default */].create('<div class=\"note-editor note-airframe\"/>');\nvar airEditable = renderer[\"a\" /* default */].create(['<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>', '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>'].join(''));\nvar buttonGroup = renderer[\"a\" /* default */].create('<div class=\"note-btn-group btn-group\">');\nvar dropdown = renderer[\"a\" /* default */].create('<div class=\"note-dropdown-menu dropdown-menu\" role=\"list\">', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var option = _typeof(item) === 'object' ? item.option : undefined;\n    var dataValue = 'data-value=\"' + value + '\"';\n    var dataOption = option !== undefined ? ' data-option=\"' + option + '\"' : '';\n    return '<a class=\"dropdown-item\" href=\"#\" ' + (dataValue + dataOption) + ' role=\"listitem\" aria-label=\"' + value + '\">' + content + '</a>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\n\nvar dropdownButtonContents = function dropdownButtonContents(contents) {\n  return contents;\n};\n\nvar dropdownCheck = renderer[\"a\" /* default */].create('<div class=\"note-dropdown-menu dropdown-menu note-check\" role=\"list\">', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    return '<a class=\"dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\">' + icon(options.checkClassName) + ' ' + content + '</a>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dialog = renderer[\"a\" /* default */].create('<div class=\"modal note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"/>', function ($node, options) {\n  if (options.fade) {\n    $node.addClass('fade');\n  }\n\n  $node.attr({\n    'aria-label': options.title\n  });\n  $node.html(['<div class=\"modal-dialog\">', '<div class=\"modal-content\">', options.title ? '<div class=\"modal-header\">' + '<h4 class=\"modal-title\">' + options.title + '</h4>' + '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" aria-hidden=\"true\">&times;</button>' + '</div>' : '', '<div class=\"modal-body\">' + options.body + '</div>', options.footer ? '<div class=\"modal-footer\">' + options.footer + '</div>' : '', '</div>', '</div>'].join(''));\n});\nvar popover = renderer[\"a\" /* default */].create(['<div class=\"note-popover popover in\">', '<div class=\"arrow\"></div>', '<div class=\"popover-content note-children-container\"></div>', '</div>'].join(''), function ($node, options) {\n  var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n  $node.addClass(direction);\n\n  if (options.hideArrow) {\n    $node.find('.arrow').hide();\n  }\n});\nvar ui_checkbox = renderer[\"a\" /* default */].create('<div class=\"form-check\"></div>', function ($node, options) {\n  $node.html(['<label class=\"form-check-label\"' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>', '<input type=\"checkbox\" class=\"form-check-input\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''), options.checked ? ' checked' : '', ' aria-label=\"' + (options.text ? options.text : '') + '\"', ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>', ' ' + (options.text ? options.text : '') + '</label>'].join(''));\n});\n\nvar icon = function icon(iconClassName, tagName) {\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"></' + tagName + '>';\n};\n\nvar ui_ui = function ui(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    dropdown: dropdown,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheck: dropdownCheck,\n    dialog: dialog,\n    popover: popover,\n    icon: icon,\n    checkbox: ui_checkbox,\n    options: editorOptions,\n    palette: function palette($node, options) {\n      return renderer[\"a\" /* default */].create('<div class=\"note-color-palette\"/>', function ($node, options) {\n        var contents = [];\n\n        for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n          var eventName = options.eventName;\n          var colors = options.colors[row];\n          var colorsName = options.colorsName[row];\n          var buttons = [];\n\n          for (var col = 0, colSize = colors.length; col < colSize; col++) {\n            var color = colors[col];\n            var colorName = colorsName[col];\n            buttons.push(['<button type=\"button\" class=\"note-color-btn\"', 'style=\"background-color:', color, '\" ', 'data-event=\"', eventName, '\" ', 'data-value=\"', color, '\" ', 'title=\"', colorName, '\" ', 'aria-label=\"', colorName, '\" ', 'data-toggle=\"button\" tabindex=\"-1\"></button>'].join(''));\n          }\n\n          contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n        }\n\n        $node.html(contents.join(''));\n\n        if (options.tooltip) {\n          $node.find('.note-color-btn').tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          });\n        }\n      })($node, options);\n    },\n    button: function button($node, options) {\n      return renderer[\"a\" /* default */].create('<button type=\"button\" class=\"note-btn btn btn-light btn-sm\" tabindex=\"-1\">', function ($node, options) {\n        if (options && options.tooltip) {\n          $node.attr({\n            title: options.tooltip,\n            'aria-label': options.tooltip\n          }).tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          }).on('click', function (e) {\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget).tooltip('hide');\n          });\n        }\n\n        if (options && options.codeviewButton) {\n          $node.addClass('note-codeview-keep');\n        }\n      })($node, options);\n    },\n    toggleBtn: function toggleBtn($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n    toggleBtnActive: function toggleBtnActive($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n    onDialogShown: function onDialogShown($dialog, handler) {\n      $dialog.one('shown.bs.modal', handler);\n    },\n    onDialogHidden: function onDialogHidden($dialog, handler) {\n      $dialog.one('hidden.bs.modal', handler);\n    },\n    showDialog: function showDialog($dialog) {\n      $dialog.modal('show');\n    },\n    hideDialog: function hideDialog($dialog) {\n      $dialog.modal('hide');\n    },\n    createLayout: function createLayout($note) {\n      var $editor = (editorOptions.airMode ? airEditor([editingArea([codable(), airEditable()])]) : editorOptions.toolbarPosition === 'bottom' ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()]) : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])).render();\n      $editor.insertAfter($note);\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar')\n      };\n    },\n    removeLayout: function removeLayout($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.show();\n    }\n  };\n};\n\n/* harmony default export */ var bs4_ui = (ui_ui);\n// EXTERNAL MODULE: ./src/js/base/settings.js + 37 modules\nvar settings = __webpack_require__(3);\n\n// EXTERNAL MODULE: ./src/styles/summernote-bs4.scss\nvar summernote_bs4 = __webpack_require__(5);\n\n// CONCATENATED MODULE: ./src/js/bs4/settings.js\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote, {\n  ui_template: bs4_ui,\n  \"interface\": 'bs4'\n});\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.options.styleTags = ['p', {\n  title: 'Blockquote',\n  tag: 'blockquote',\n  className: 'blockquote',\n  value: 'blockquote'\n}, 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=summernote-bs4.js.map"
  },
  {
    "path": "public/vendor/summernote/summernote-bs4.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/summernote-lite.css",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n@font-face{font-family:\"summernote\";font-style:normal;font-weight:400;font-display:auto;src:url(font/summernote.eot);src:url(font/summernote.eot?#iefix) format(\"embedded-opentype\"),url(font/summernote.woff2) format(\"woff2\"),url(font/summernote.woff) format(\"woff\"),url(font/summernote.ttf) format(\"truetype\")}[class^=note-icon]:before,[class*=\" note-icon\"]:before{display:inline-block;font-family:summernote;font-style:normal;font-size:inherit;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;speak:none}.note-icon-fw{text-align:center;width:1.25em}.note-icon-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.note-icon-pull-left{float:left}.note-icon-pull-right{float:right}.note-icon.note-icon-pull-left{margin-right:.3em}.note-icon.note-icon-pull-right{margin-left:.3em}.note-icon-align::before{content:\"\"}.note-icon-align-center::before{content:\"\"}.note-icon-align-indent::before{content:\"\"}.note-icon-align-justify::before{content:\"\"}.note-icon-align-left::before{content:\"\"}.note-icon-align-outdent::before{content:\"\"}.note-icon-align-right::before{content:\"\"}.note-icon-arrow-circle-down::before{content:\"\"}.note-icon-arrow-circle-left::before{content:\"\"}.note-icon-arrow-circle-right::before{content:\"\"}.note-icon-arrow-circle-up::before{content:\"\"}.note-icon-arrows-alt::before{content:\"\"}.note-icon-arrows-h::before{content:\"\"}.note-icon-arrows-v::before{content:\"\"}.note-icon-bold::before{content:\"\"}.note-icon-caret::before{content:\"\"}.note-icon-chain-broken::before{content:\"\"}.note-icon-circle::before{content:\"\"}.note-icon-close::before{content:\"\"}.note-icon-code::before{content:\"\"}.note-icon-col-after::before{content:\"\"}.note-icon-col-before::before{content:\"\"}.note-icon-col-remove::before{content:\"\"}.note-icon-eraser::before{content:\"\"}.note-icon-float-left::before{content:\"\"}.note-icon-float-none::before{content:\"\"}.note-icon-float-right::before{content:\"\"}.note-icon-font::before{content:\"\"}.note-icon-frame::before{content:\"\"}.note-icon-italic::before{content:\"\"}.note-icon-link::before{content:\"\"}.note-icon-magic::before{content:\"\"}.note-icon-menu-check::before{content:\"\"}.note-icon-minus::before{content:\"\"}.note-icon-orderedlist::before{content:\"\"}.note-icon-pencil::before{content:\"\"}.note-icon-picture::before{content:\"\"}.note-icon-question::before{content:\"\"}.note-icon-redo::before{content:\"\"}.note-icon-rollback::before{content:\"\"}.note-icon-row-above::before{content:\"\"}.note-icon-row-below::before{content:\"\"}.note-icon-row-remove::before{content:\"\"}.note-icon-special-character::before{content:\"\"}.note-icon-square::before{content:\"\"}.note-icon-strikethrough::before{content:\"\"}.note-icon-subscript::before{content:\"\"}.note-icon-summernote::before{content:\"\"}.note-icon-superscript::before{content:\"\"}.note-icon-table::before{content:\"\"}.note-icon-text-height::before{content:\"\"}.note-icon-trash::before{content:\"\"}.note-icon-underline::before{content:\"\"}.note-icon-undo::before{content:\"\"}.note-icon-unorderedlist::before{content:\"\"}.note-icon-video::before{content:\"\"}.note-frame{-ms-box-sizing:border-box;box-sizing:border-box;color:#000;font-family:sans-serif;border-radius:4px}.note-toolbar{padding:10px 5px;border-bottom:1px solid #e2e2e2;color:#333;background-color:#f5f5f5;border-color:#ddd;border-top-left-radius:3px;border-top-right-radius:3px}.note-btn-group{position:relative;display:inline-block;margin-right:8px}.note-btn-group>.note-btn-group{margin-right:0}.note-btn-group>.note-btn:first-child{margin-left:0}.note-btn-group .note-btn+.note-btn,.note-btn-group .note-btn+.note-btn-group,.note-btn-group .note-btn-group+.note-btn,.note-btn-group .note-btn-group+.note-btn-group{margin-left:-1px}.note-btn-group>.note-btn:not(:first-child),.note-btn-group>.note-btn-group:not(:first-child)>.note-btn{border-top-left-radius:0;border-bottom-left-radius:0}.note-btn-group>.note-btn:not(:last-child):not(.dropdown-toggle),.note-btn-group>.note-btn-group:not(:last-child)>.note-btn{border-top-right-radius:0;border-bottom-right-radius:0}.note-btn-group.open>.note-dropdown{display:block}.note-btn{display:inline-block;font-weight:400;margin-bottom:0;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid #dae0e5;white-space:nowrap;outline:0;color:#333;background-color:#fff;border-color:#dae0e5;padding:5px 10px;font-size:14px;line-height:1.4;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.note-btn:focus,.note-btn.focus{color:#333;background-color:#ebebeb;border-color:#dae0e5}.note-btn:hover{color:#333;background-color:#ebebeb;border-color:#dae0e5}.note-btn.disabled:focus,.note-btn.disabled.focus,.note-btn[disabled]:focus,.note-btn[disabled].focus,fieldset[disabled] .note-btn:focus,fieldset[disabled] .note-btn.focus{background-color:#fff;border-color:#dae0e5}.note-btn:hover,.note-btn:focus,.note-btn.focus{color:#333;text-decoration:none;border:1px solid #dae0e5;background-color:#ebebeb;outline:0;border-radius:1px}.note-btn:active,.note-btn.active{outline:0;background-image:none;color:#333;text-decoration:none;border:1px solid #dae0e5;background-color:#ebebeb;outline:0;border-radius:1px;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.note-btn.disabled,.note-btn[disabled],fieldset[disabled] .note-btn{cursor:not-allowed;-webkit-opacity:.65;-khtml-opacity:.65;-moz-opacity:.65;opacity:.65;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=65);filter:alpha(opacity=65);box-shadow:none}.note-btn>span.note-icon-caret:first-child{margin-left:-1px}.note-btn>span.note-icon-caret:nth-child(2){padding-left:3px;margin-right:-5px}.note-btn-primary{background:#fa6362;color:#fff}.note-btn-primary:hover,.note-btn-primary:focus,.note-btn-primary.focus{color:#fff;text-decoration:none;border:1px solid #dae0e5;background-color:#fa6362;border-radius:1px}.note-btn-block{display:block;width:100%}.note-btn-block+.note-btn-block{margin-top:5px}input[type=submit].note-btn-block,input[type=reset].note-btn-block,input[type=button].note-btn-block{width:100%}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.close{float:right;font-size:21px;line-height:1;color:#000;opacity:.2}.close:hover{-webkit-opacity:1;-khtml-opacity:1;-moz-opacity:1;-ms-filter:alpha(opacity=100);filter:alpha(opacity=100);opacity:1}.note-dropdown{position:relative}.note-color .dropdown-toggle{width:30px;padding-left:5px}.note-dropdown-menu{display:none;min-width:100px;position:absolute;top:100%;left:0;z-index:1000;float:left;text-align:left;background:#fff;border:1px solid #e2e2e2;padding:5px;background-clip:padding-box;box-shadow:0 1px 1px rgba(0,0,0,.06)}.note-dropdown-menu>*:last-child{margin-right:0}.note-btn-group.open .note-dropdown-menu{display:block}.note-dropdown-item{display:block}.note-dropdown-item:hover{background-color:#ebebeb}a.note-dropdown-item,a.note-dropdown-item:hover{margin:5px 0;color:#000;text-decoration:none}.note-modal{position:fixed;left:0;right:0;top:0;bottom:0;z-index:1050;-webkit-opacity:1;-khtml-opacity:1;-moz-opacity:1;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);filter:alpha(opacity=100);display:none}.note-modal.open{display:block}.note-modal-content{position:relative;width:auto;margin:30px 20px;border:1px solid rgba(0,0,0,.2);background:#fff;background-clip:border-box;outline:0;border-radius:5px;box-shadow:0 3px 9px rgba(0,0,0,.5)}.note-modal-header{padding:10px 20px;border:1px solid #ededef}.note-modal-body{position:relative;padding:20px 30px}.note-modal-body kbd{border-radius:2px;background-color:#000;color:#fff;padding:3px 5px;font-weight:700;-ms-box-sizing:border-box;box-sizing:border-box}.note-modal-footer{height:40px;padding:10px;text-align:center}.note-modal-footer a{color:#337ab7;text-decoration:none}.note-modal-footer a:hover,.note-modal-footer a:focus{color:#23527c;text-decoration:underline}.note-modal-footer .note-btn{float:right}.note-modal-title{font-size:20px;color:#42515f;margin:0;line-height:1.4}.note-modal-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:1040;background:#000;-webkit-opacity:.5;-khtml-opacity:.5;-moz-opacity:.5;opacity:.5;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);filter:alpha(opacity=50);display:none}.note-modal-backdrop.open{display:block}@media(min-width: 768px){.note-modal-content{width:600px;margin:30px auto}}@media(min-width: 992px){.note-modal-content-large{width:900px}}.note-modal .note-help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}.note-modal .note-nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.note-modal .note-nav-link{display:block;padding:.5rem 1rem;color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}.note-modal .note-nav-link:focus,.note-modal .note-nav-link:hover{color:#0056b3;text-decoration:none}.note-modal .note-nav-link.disabled{color:#868e96}.note-modal .note-nav-tabs{border-bottom:1px solid #ddd}.note-modal .note-nav-tabs .note-nav-item{margin-bottom:-1px}.note-modal .note-nav-tabs .note-nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.note-modal .note-nav-tabs .note-nav-link:focus,.note-modal .note-nav-tabs .note-nav-link:hover{border-color:#e9ecef #e9ecef #ddd}.note-modal .note-nav-tabs .note-nav-link.disabled{color:#868e96;background-color:transparent;border-color:transparent}.note-modal .note-nav-tabs .note-nav-item.show .note-nav-link{color:#495057;background-color:#fff;border-color:#ddd #ddd #fff}.note-modal .note-tab-content{margin:15px auto}.note-modal .note-tab-content>.note-tab-pane:target~.note-tab-pane:last-child,.note-modal .note-tab-content>.note-tab-pane{display:none}.note-modal .note-tab-content>:last-child,.note-modal .note-tab-content>.note-tab-pane:target{display:block}.note-form-group{padding-bottom:20px}.note-form-group:last-child{padding-bottom:0}.note-form-label{display:block;width:100%;font-size:16px;color:#42515f;margin-bottom:10px;font-weight:700}.note-input{width:100%;display:block;border:1px solid #ededef;background:#fff;outline:0;padding:6px 4px;font-size:14px;-ms-box-sizing:border-box;box-sizing:border-box}.note-input::-webkit-input-placeholder{color:#eee}.note-input:-moz-placeholder{color:#eee}.note-input::-moz-placeholder{color:#eee}.note-input:-ms-input-placeholder{color:#eee}.note-tooltip{position:absolute;z-index:1070;display:block;font-size:13px;transition:opacity .15s;-webkit-opacity:0;-khtml-opacity:0;-moz-opacity:0;opacity:0;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);filter:alpha(opacity=0)}.note-tooltip.in{-webkit-opacity:.9;-khtml-opacity:.9;-moz-opacity:.9;opacity:.9;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=90);filter:alpha(opacity=90)}.note-tooltip.top{margin-top:-3px;padding:5px 0}.note-tooltip.right{margin-left:3px;padding:0 5px}.note-tooltip.bottom{margin-top:3px;padding:5px 0}.note-tooltip.left{margin-left:-3px;padding:0 5px}.note-tooltip.bottom .note-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.note-tooltip.top .note-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.note-tooltip.right .note-tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.note-tooltip.left .note-tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.note-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.note-tooltip-content{max-width:200px;font-family:sans-serif;padding:3px 8px;color:#fff;text-align:center;background-color:#000}.note-popover{position:absolute;z-index:1060;display:block;font-size:13px;font-family:sans-serif;display:none;background:#fff;border:1px solid rgba(0,0,0,.2);border:1px solid #ccc}.note-popover.in{display:block}.note-popover.top{margin-top:-10px;padding:5px 0}.note-popover.right{margin-left:10px;padding:0 5px}.note-popover.bottom{margin-top:10px;padding:5px 0}.note-popover.left{margin-left:-10px;padding:0 5px}.note-popover.bottom .note-popover-arrow{top:-11px;left:20px;margin-left:-10px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.note-popover.bottom .note-popover-arrow::after{top:1px;margin-left:-10px;content:\" \";border-top-width:0;border-bottom-color:#fff}.note-popover.top .note-popover-arrow{bottom:-11px;left:20px;margin-left:-10px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25)}.note-popover.top .note-popover-arrow::after{bottom:1px;margin-left:-10px;content:\" \";border-bottom-width:0;border-top-color:#fff}.note-popover.right .note-popover-arrow{top:50%;left:-11px;margin-top:-10px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.note-popover.right .note-popover-arrow::after{left:1px;margin-top:-10px;content:\" \";border-left-width:0;border-right-color:#fff}.note-popover.left .note-popover-arrow{top:50%;right:-11px;margin-top:-10px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.note-popover.left .note-popover-arrow::after{right:1px;margin-top:-10px;content:\" \";border-right-width:0;border-left-color:#fff}.note-popover-arrow{position:absolute;width:0;height:0;border:11px solid transparent}.note-popover-arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;content:\" \";border-width:10px}.note-popover-content{padding:3px 8px;color:#000;text-align:center;background-color:#fff;min-width:100px;min-height:30px}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;display:none;z-index:100;color:#87cefa;background-color:#fff;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;vertical-align:middle;text-align:center;font-size:28px;font-weight:700}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:none}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area .note-editable img.note-float-left{margin-right:10px}.note-editor .note-editing-area .note-editable img.note-float-right{margin-left:10px}.note-editor.note-frame,.note-editor.note-airframe{border:1px solid #00000032}.note-editor.note-frame.codeview .note-editing-area .note-editable,.note-editor.note-airframe.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable,.note-editor.note-airframe.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area,.note-editor.note-airframe .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable,.note-editor.note-airframe .note-editing-area .note-editable{padding:10px;overflow:auto;word-wrap:break-word}.note-editor.note-frame .note-editing-area .note-editable[contenteditable=false],.note-editor.note-airframe .note-editing-area .note-editable[contenteditable=false]{background-color:#8080801d}.note-editor.note-frame .note-editing-area .note-codable,.note-editor.note-airframe .note-editing-area .note-codable{display:none;width:100%;padding:10px;border:none;box-shadow:none;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;resize:none;outline:none;-ms-box-sizing:border-box;box-sizing:border-box;border-radius:0;margin-bottom:0}.note-editor.note-frame.fullscreen,.note-editor.note-airframe.fullscreen{position:fixed;top:0;left:0;width:100% !important;z-index:1050}.note-editor.note-frame.fullscreen .note-resizebar,.note-editor.note-airframe.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output,.note-editor.note-airframe .note-status-output{display:block;width:100%;font-size:14px;line-height:1.42857143;height:20px;margin-bottom:0;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty,.note-editor.note-airframe .note-status-output:empty{height:0;border-top:0 solid transparent}.note-editor.note-frame .note-status-output .pull-right,.note-editor.note-airframe .note-status-output .pull-right{float:right !important}.note-editor.note-frame .note-status-output .text-muted,.note-editor.note-airframe .note-status-output .text-muted{color:#777}.note-editor.note-frame .note-status-output .text-primary,.note-editor.note-airframe .note-status-output .text-primary{color:#286090}.note-editor.note-frame .note-status-output .text-success,.note-editor.note-airframe .note-status-output .text-success{color:#3c763d}.note-editor.note-frame .note-status-output .text-info,.note-editor.note-airframe .note-status-output .text-info{color:#31708f}.note-editor.note-frame .note-status-output .text-warning,.note-editor.note-airframe .note-status-output .text-warning{color:#8a6d3b}.note-editor.note-frame .note-status-output .text-danger,.note-editor.note-airframe .note-status-output .text-danger{color:#a94442}.note-editor.note-frame .note-status-output .alert,.note-editor.note-airframe .note-status-output .alert{margin:-7px 0 0 0;padding:7px 10px 2px 10px;border-radius:0;color:#000;background-color:#f5f5f5}.note-editor.note-frame .note-status-output .alert .note-icon,.note-editor.note-airframe .note-status-output .alert .note-icon{margin-right:5px}.note-editor.note-frame .note-status-output .alert-success,.note-editor.note-airframe .note-status-output .alert-success{color:#3c763d !important;background-color:#dff0d8 !important}.note-editor.note-frame .note-status-output .alert-info,.note-editor.note-airframe .note-status-output .alert-info{color:#31708f !important;background-color:#d9edf7 !important}.note-editor.note-frame .note-status-output .alert-warning,.note-editor.note-airframe .note-status-output .alert-warning{color:#8a6d3b !important;background-color:#fcf8e3 !important}.note-editor.note-frame .note-status-output .alert-danger,.note-editor.note-airframe .note-status-output .alert-danger{color:#a94442 !important;background-color:#f2dede !important}.note-editor.note-frame .note-statusbar,.note-editor.note-airframe .note-statusbar{background-color:#8080801d;border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top:1px solid #00000032}.note-editor.note-frame .note-statusbar .note-resizebar,.note-editor.note-airframe .note-statusbar .note-resizebar{padding-top:1px;height:9px;width:100%;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,.note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #00000032}.note-editor.note-frame .note-statusbar.locked .note-resizebar,.note-editor.note-airframe .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar,.note-editor.note-airframe .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder,.note-editor.note-airframe .note-placeholder{padding:10px}.note-editor.note-airframe{border:0}.note-editor.note-airframe .note-editing-area .note-editable{padding:0}.note-popover.popover{display:none;max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px !important}.note-toolbar{position:relative}.note-popover .popover-content,.note-editor .note-toolbar{margin:0;padding:0 0 5px 5px}.note-popover .popover-content>.note-btn-group,.note-editor .note-toolbar>.note-btn-group{margin-top:5px;margin-left:0;margin-right:5px}.note-popover .popover-content .note-btn-group .note-table,.note-editor .note-toolbar .note-btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute !important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative !important;z-index:1;width:5em;height:5em;background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute !important;z-index:2;width:1em;height:1em;background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.note-editor .note-toolbar .note-style .dropdown-style blockquote,.note-editor .note-toolbar .note-style .dropdown-style pre{margin:0;padding:5px 10px}.note-popover .popover-content .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.note-editor .note-toolbar .note-style .dropdown-style h1,.note-editor .note-toolbar .note-style .dropdown-style h2,.note-editor .note-toolbar .note-style .dropdown-style h3,.note-editor .note-toolbar .note-style .dropdown-style h4,.note-editor .note-toolbar .note-style .dropdown-style h5,.note-editor .note-toolbar .note-style .dropdown-style h6,.note-editor .note-toolbar .note-style .dropdown-style p{margin:0;padding:0}.note-popover .popover-content .note-color-all .note-dropdown-menu,.note-editor .note-toolbar .note-color-all .note-dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-toggle,.note-editor .note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette{display:inline-block;margin:0;width:160px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette:first-child,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title{font-size:12px;margin:2px 7px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select{font-size:11px;margin:3px;padding:0 3px;cursor:pointer;width:100%;border-radius:5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover{background:#eee}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-row,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select-btn,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select-btn{display:none}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn{border:1px solid #eee}.note-popover .popover-content .note-para .note-dropdown-menu,.note-editor .note-toolbar .note-para .note-dropdown-menu{min-width:228px;padding:5px}.note-popover .popover-content .note-para .note-dropdown-menu>div+div,.note-editor .note-toolbar .note-para .note-dropdown-menu>div+div{margin-left:5px}.note-popover .popover-content .note-dropdown-menu,.note-editor .note-toolbar .note-dropdown-menu{min-width:160px}.note-popover .popover-content .note-dropdown-menu.right,.note-editor .note-toolbar .note-dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .note-dropdown-menu.right::before,.note-editor .note-toolbar .note-dropdown-menu.right::before{right:9px;left:auto !important}.note-popover .popover-content .note-dropdown-menu.right::after,.note-editor .note-toolbar .note-dropdown-menu.right::after{right:10px;left:auto !important}.note-popover .popover-content .note-dropdown-menu.note-check a i,.note-editor .note-toolbar .note-dropdown-menu.note-check a i{color:#00bfff;visibility:hidden}.note-popover .popover-content .note-dropdown-menu.note-check a.checked i,.note-editor .note-toolbar .note-dropdown-menu.note-check a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.note-editor .note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.note-editor .note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.note-editor .note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:0;border-radius:0}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.note-editor .note-toolbar .note-color-palette div .note-color-btn:hover{transform:scale(1.2);transition:all .2s}.note-modal .modal-dialog{outline:0;border-radius:5px;box-shadow:0 3px 9px rgba(0,0,0,.5)}.note-modal .form-group{margin-left:0;margin-right:0}.note-modal .note-modal-form{margin:0}.note-modal .note-image-dialog .note-dropzone{min-height:100px;font-size:30px;line-height:4;color:#d3d3d3;text-align:center;border:4px dashed #d3d3d3;margin-bottom:10px}@-moz-document url-prefix(){.note-modal .note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid #000}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle,.note-handle .note-control-selection .note-control-sizing,.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-sizing{background-color:#000}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:none;border-bottom:none}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:none;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:none;border-right:none}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:none;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;color:#fff;background-color:#000;font-size:12px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{padding:3px;max-height:150px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block !important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;white-space:nowrap;text-decoration:none;background-color:#428bca;outline:0;cursor:pointer}.note-editor .note-editing-area .note-editable table{width:100%;border-collapse:collapse}.note-editor .note-editing-area .note-editable table td,.note-editor .note-editing-area .note-editable table th{border:1px solid #ececec;padding:5px 3px}.note-editor .note-editing-area .note-editable a{background-color:inherit;text-decoration:inherit;font-family:inherit;font-weight:inherit;color:#337ab7}.note-editor .note-editing-area .note-editable a:hover,.note-editor .note-editing-area .note-editable a:focus{color:#23527c;text-decoration:underline;outline:0}.note-editor .note-editing-area .note-editable figure{margin:0}.note-modal .note-modal-body label{margin-bottom:2px;padding:2px 5px;display:inline-block}.note-modal .note-modal-body .help-list-item:hover{background-color:#e0e0e0}@-moz-document url-prefix(){.note-modal .note-image-input{height:auto}}.help-list-item label{margin-bottom:5px;display:inline-block}\n"
  },
  {
    "path": "public/vendor/summernote/summernote-lite.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 51);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__0__;\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer(markup, children, options, callback) {\n    _classCallCheck(this, Renderer);\n\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n\n  _createClass(Renderer, [{\n    key: \"render\",\n    value: function render($parent) {\n      var $node = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.markup);\n\n      if (this.options && this.options.contents) {\n        $node.html(this.options.contents);\n      }\n\n      if (this.options && this.options.className) {\n        $node.addClass(this.options.className);\n      }\n\n      if (this.options && this.options.data) {\n        jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(this.options.data, function (k, v) {\n          $node.attr('data-' + k, v);\n        });\n      }\n\n      if (this.options && this.options.click) {\n        $node.on('click', this.options.click);\n      }\n\n      if (this.children) {\n        var $container = $node.find('.note-children-container');\n        this.children.forEach(function (child) {\n          child.render($container.length ? $container : $node);\n        });\n      }\n\n      if (this.callback) {\n        this.callback($node, this.options);\n      }\n\n      if (this.options && this.options.callback) {\n        this.options.callback($node);\n      }\n\n      if ($parent) {\n        $parent.append($node);\n      }\n\n      return $node;\n    }\n  }]);\n\n  return Renderer;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  create: function create(markup, callback) {\n    return function () {\n      var options = _typeof(arguments[1]) === 'object' ? arguments[1] : arguments[0];\n      var children = Array.isArray(arguments[0]) ? arguments[0] : [];\n\n      if (options && options.children) {\n        children = options.children;\n      }\n\n      return new Renderer(markup, children, options, callback);\n    };\n  }\n});\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n\n/* WEBPACK VAR INJECTION */}.call(this, {}))\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs2\":\"jquery\",\"commonjs\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_ = __webpack_require__(0);\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_);\n\n// CONCATENATED MODULE: ./src/js/base/summernote-en-US.js\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote || {\n  lang: {}\n};\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit'\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original'\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window',\n      useProtocol: 'Use default protocol'\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table'\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule'\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list'\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View'\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full'\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select'\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys'\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog'\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo'\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters'\n    },\n    output: {\n      noSelection: 'No Selection Made!'\n    }\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/env.js\n\nvar isSupportAmd = typeof define === 'function' && __webpack_require__(2); // eslint-disable-line\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\n\nvar genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\n\nfunction validFontName(fontName) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.inArray(fontName.toLowerCase(), genericFontFamilies) === -1 ? \"'\".concat(fontName, \"'\") : fontName;\n}\n\nfunction env_isFontInstalled(fontName) {\n  var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n  var testText = 'mmmmmmmmmmwwwww';\n  var testSize = '200px';\n  var canvas = document.createElement('canvas');\n  var context = canvas.getContext('2d');\n  context.font = testSize + \" '\" + testFontName + \"'\";\n  var originalWidth = context.measureText(testText).width;\n  context.font = testSize + ' ' + validFontName(fontName) + ', \"' + testFontName + '\"';\n  var width = context.measureText(testText).width;\n  return originalWidth !== width;\n}\n\nvar userAgent = navigator.userAgent;\nvar isMSIE = /MSIE|Trident/i.test(userAgent);\nvar browserVersion;\n\nif (isMSIE) {\n  var matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\n\nvar isEdge = /Edge\\/\\d+/.test(userAgent);\nvar isSupportTouch = 'ontouchstart' in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; // [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\n\nvar inputEventName = isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\n\n/* harmony default export */ var env = ({\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE: isMSIE,\n  isEdge: isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && !/chrome/i.test(userAgent),\n  browserVersion: browserVersion,\n  jqueryVersion: parseFloat(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.fn.jquery),\n  isSupportAmd: isSupportAmd,\n  isSupportTouch: isSupportTouch,\n  isFontInstalled: env_isFontInstalled,\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName: inputEventName,\n  genericFontFamilies: genericFontFamilies,\n  validFontName: validFontName\n});\n// CONCATENATED MODULE: ./src/js/base/core/func.js\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\n\nfunction eq(itemA) {\n  return function (itemB) {\n    return itemA === itemB;\n  };\n}\n\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\n\nfunction peq2(propName) {\n  return function (itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\n\nfunction ok() {\n  return true;\n}\n\nfunction fail() {\n  return false;\n}\n\nfunction not(f) {\n  return function () {\n    return !f.apply(f, arguments);\n  };\n}\n\nfunction and(fA, fB) {\n  return function (item) {\n    return fA(item) && fB(item);\n  };\n}\n\nfunction func_self(a) {\n  return a;\n}\n\nfunction func_invoke(obj, method) {\n  return function () {\n    return obj[method].apply(obj, arguments);\n  };\n}\n\nvar idCounter = 0;\n/**\n * reset globally-unique id\n *\n */\n\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\n\n\nfunction uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\n\n\nfunction rect2bnd(rect) {\n  var $document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n}\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\n\n\nfunction invertObject(obj) {\n  var inverted = {};\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n\n  return inverted;\n}\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\n\n\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function (name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\n\n\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n\n    var later = function later() {\n      timeout = null;\n\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\n\n\nfunction isValidUrl(url) {\n  var expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n\n/* harmony default export */ var func = ({\n  eq: eq,\n  eq2: eq2,\n  peq2: peq2,\n  ok: ok,\n  fail: fail,\n  self: func_self,\n  not: not,\n  and: and,\n  invoke: func_invoke,\n  resetUniqueId: resetUniqueId,\n  uniqueId: uniqueId,\n  rect2bnd: rect2bnd,\n  invertObject: invertObject,\n  namespaceToCamel: namespaceToCamel,\n  debounce: debounce,\n  isValidUrl: isValidUrl\n});\n// CONCATENATED MODULE: ./src/js/base/core/lists.js\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\n\nfunction lists_head(array) {\n  return array[0];\n}\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\n\n\nfunction lists_last(array) {\n  return array[array.length - 1];\n}\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\n\n\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\n\n\nfunction tail(array) {\n  return array.slice(1);\n}\n/**\n * returns item of array\n */\n\n\nfunction find(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    var item = array[idx];\n\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\n\n\nfunction lists_all(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n/**\n * returns true if the value is present in the list.\n */\n\n\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n\n  return false;\n}\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\n\n\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function (memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\n\n\nfunction from(collection) {\n  var result = [];\n  var length = collection.length;\n  var idx = -1;\n\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n\n  return result;\n}\n/**\n * returns whether list is empty or not\n */\n\n\nfunction lists_isEmpty(array) {\n  return !array || !array.length;\n}\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\n\n\nfunction clusterBy(array, fn) {\n  if (!array.length) {\n    return [];\n  }\n\n  var aTail = tail(array);\n  return aTail.reduce(function (memo, v) {\n    var aLast = lists_last(memo);\n\n    if (fn(lists_last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n\n    return memo;\n  }, [[lists_head(array)]]);\n}\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\n\n\nfunction compact(array) {\n  var aResult = [];\n\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) {\n      aResult.push(array[idx]);\n    }\n  }\n\n  return aResult;\n}\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\n\n\nfunction unique(array) {\n  var results = [];\n\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n\n  return results;\n}\n/**\n * returns next item.\n * @param {Array} array\n */\n\n\nfunction lists_next(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n\n  return null;\n}\n/**\n * returns prev item.\n * @param {Array} array\n */\n\n\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n\n  return null;\n}\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\n\n\n/* harmony default export */ var lists = ({\n  head: lists_head,\n  last: lists_last,\n  initial: initial,\n  tail: tail,\n  prev: prev,\n  next: lists_next,\n  find: find,\n  contains: contains,\n  all: lists_all,\n  sum: sum,\n  from: from,\n  isEmpty: lists_isEmpty,\n  clusterBy: clusterBy,\n  compact: compact,\n  unique: unique\n});\n// CONCATENATED MODULE: ./src/js/base/core/dom.js\n\n\n\n\nvar NBSP_CHAR = String.fromCharCode(160);\nvar ZERO_WIDTH_NBSP_CHAR = \"\\uFEFF\";\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\nfunction isEditable(node) {\n  return node && external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).hasClass('note-editable');\n}\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction isControlSizing(node) {\n  return node && external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).hasClass('note-control-sizing');\n}\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\n\n\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function (node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\n\n\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\n\n\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\n\n\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\n\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  } // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n\n\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nvar isPre = makePredByNodeName('PRE');\nvar isLi = makePredByNodeName('LI');\n\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\n\nvar isTable = makePredByNodeName('TABLE');\nvar isData = makePredByNodeName('DATA');\n\nfunction dom_isInline(node) {\n  return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node);\n}\n\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\n\nvar isHr = makePredByNodeName('HR');\n\nfunction dom_isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\n\nvar isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\nfunction isBodyContainer(node) {\n  return dom_isCell(node) || isBlockquote(node) || isEditable(node);\n}\n\nvar isAnchor = makePredByNodeName('A');\n\nfunction isParaInline(node) {\n  return dom_isInline(node) && !!dom_ancestor(node, isPara);\n}\n\nfunction isBodyInline(node) {\n  return dom_isInline(node) && !dom_ancestor(node, isPara);\n}\n\nvar isBody = makePredByNodeName('BODY');\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\n\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;\n}\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\n\n\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n  var siblings = [];\n\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n\n  siblings.push(node);\n\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n\n  return siblings;\n}\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\n\n\nvar blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\n\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n\n  if (node) {\n    return node.childNodes.length;\n  }\n\n  return 0;\n}\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while (node = node.firstElementChild);\n\n  return dom_isEmpty(node);\n}\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction dom_isEmpty(node) {\n  var len = nodeLength(node);\n\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n\n  return false;\n}\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\n\n\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\n\n\nfunction dom_ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) {\n      return node;\n    }\n\n    if (isEditable(node)) {\n      break;\n    }\n\n    node = node.parentNode;\n  }\n\n  return null;\n}\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\n\n\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n\n  while (node) {\n    if (nodeLength(node) !== 1) {\n      break;\n    }\n\n    if (pred(node)) {\n      return node;\n    }\n\n    if (isEditable(node)) {\n      break;\n    }\n\n    node = node.parentNode;\n  }\n\n  return null;\n}\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\n\n\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n  var ancestors = [];\n  dom_ancestor(node, function (el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n\n    return pred(el);\n  });\n  return ancestors;\n}\n/**\n * find farthest ancestor predicate hit\n */\n\n\nfunction lastAncestor(node, pred) {\n  var ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\n\n\nfunction dom_commonAncestor(nodeA, nodeB) {\n  var ancestors = listAncestor(nodeA);\n\n  for (var n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n\n  return null; // difference document area\n}\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\n\n\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n\n  return nodes;\n}\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\n\n\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n\n  return nodes;\n}\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\n\n\nfunction listDescendant(node, pred) {\n  var descendants = [];\n  pred = pred || func.ok; // start DFS(depth first search) with node\n\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n\n    for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n\n  return descendants;\n}\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\n\n\nfunction wrap(node, wrapperName) {\n  var parent = node.parentNode;\n  var wrapper = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<' + wrapperName + '>')[0];\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n  return wrapper;\n}\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\n\n\nfunction insertAfter(node, preceding) {\n  var next = preceding.nextSibling;\n  var parent = preceding.parentNode;\n\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n\n  return node;\n}\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\n\n\nfunction appendChildNodes(node, aChild) {\n  external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(aChild, function (idx, child) {\n    node.appendChild(child);\n  });\n  return node;\n}\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction dom_isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (dom_position(node) !== 0) {\n      return false;\n    }\n\n    node = node.parentNode;\n  }\n\n  return true;\n}\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n\n  while (node && node !== ancestor) {\n    if (dom_position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n\n    node = node.parentNode;\n  }\n\n  return true;\n}\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && dom_isLeftEdgeOf(point.node, ancestor);\n}\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\n\n\nfunction dom_position(node) {\n  var offset = 0;\n\n  while (node = node.previousSibling) {\n    offset += 1;\n  }\n\n  return offset;\n}\n\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction dom_prevPoint(point, isSkipInnerOffset) {\n  var node;\n  var offset;\n\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    node = point.node.parentNode;\n    offset = dom_position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction dom_nextPoint(point, isSkipInnerOffset) {\n  var node, offset;\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    var nextTextNode = getNextTextNode(point.node);\n\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = dom_position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/**\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  var node, offset; // if node is empty string node, return current node's sibling.\n\n  if (dom_isEmpty(point.node)) {\n    node = point.node.nextSibling;\n    offset = 0;\n    return {\n      node: node,\n      offset: offset\n    };\n  }\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    var nextTextNode = getNextTextNode(point.node);\n\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = dom_position(point.node) + 1;\n    } // if next node is editable, return current node's sibling node.\n\n\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n\n    if (dom_isEmpty(node)) {\n      return null;\n    }\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n\n    if (dom_isEmpty(node)) {\n      return null;\n    }\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/*\n* returns the next Text node index or 0 if not found.\n*/\n\n\nfunction getNextTextNode(actual) {\n  if (!actual.nextSibling) return undefined;\n  if (actual.parent !== actual.nextSibling.parent) return undefined;\n  if (isText(actual.nextSibling)) return actual.nextSibling;\n  return getNextTextNode(actual.nextSibling);\n}\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\n\n\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || dom_isEmpty(point.node)) {\n    return true;\n  }\n\n  var leftNode = point.node.childNodes[point.offset - 1];\n  var rightNode = point.node.childNodes[point.offset];\n\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {\n    return true;\n  }\n\n  return false;\n}\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\n\n\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = dom_prevPoint(point);\n  }\n\n  return null;\n}\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\n\n\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = dom_nextPoint(point);\n  }\n\n  return null;\n}\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\n\n\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && ch !== ' ' && ch !== NBSP_CHAR;\n}\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\n\n\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n/**\n * @method walkPoint\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\n\n\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  var point = startPoint;\n\n  while (point) {\n    handler(point);\n\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n\n    var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\n\n\nfunction makeOffsetPath(ancestor, node) {\n  var ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(dom_position).reverse();\n}\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\n\n\nfunction fromOffsetPath(ancestor, offsets) {\n  var current = ancestor;\n\n  for (var i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n\n  return current;\n}\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\n\n\nfunction splitNode(point, options) {\n  var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  var isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  } // edge case\n\n\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  } // split #text\n\n\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    var childNode = point.node.childNodes[point.offset];\n    var clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, listNext(childNode));\n\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n\n    if (isDiscardEmptySplits) {\n      if (dom_isEmpty(point.node)) {\n        remove(point.node);\n      }\n\n      if (dom_isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n\n    return clone;\n  }\n}\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\n\n\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  var ancestors = listAncestor(point.node, func.eq(root));\n\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n\n  return ancestors.reduce(function (node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n\n    return splitNode({\n      node: parent,\n      offset: node ? dom_position(node) : nodeLength(parent)\n    }, options);\n  });\n}\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\n\n\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  var pred = isInline ? isPara : isBodyContainer;\n  var ancestors = listAncestor(point.node, pred);\n  var topAncestor = lists.last(ancestors) || point.node;\n  var splitRoot, container;\n\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  } // if splitRoot is exists, split with splitTree\n\n\n  var pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline\n  }); // if container is point.node, find pivot with point.offset\n\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n\n  return {\n    rightNode: pivot,\n    container: container\n  };\n}\n\nfunction dom_create(nodeName) {\n  return document.createElement(nodeName);\n}\n\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\n\n\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) {\n    return;\n  }\n\n  if (node.removeNode) {\n    return node.removeNode(isRemoveChild);\n  }\n\n  var parent = node.parentNode;\n\n  if (!isRemoveChild) {\n    var nodes = [];\n\n    for (var i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n\n    for (var _i = 0, _len = nodes.length; _i < _len; _i++) {\n      parent.insertBefore(nodes[_i], node);\n    }\n  }\n\n  parent.removeChild(node);\n}\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\n\n\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n\n    var parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\n\n\nfunction dom_replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n\n  var newNode = dom_create(nodeName);\n\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n  return newNode;\n}\n\nvar isTextarea = makePredByNodeName('TEXTAREA');\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\n\nfunction dom_value($node, stripLinebreaks) {\n  var val = isTextarea($node[0]) ? $node.val() : $node.html();\n\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n\n  return val;\n}\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\n\n\nfunction dom_html($node, isNewlineOnBlock) {\n  var markup = dom_value($node);\n\n  if (isNewlineOnBlock) {\n    var regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function (match, endSlash, name) {\n      name = name.toUpperCase();\n      var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash;\n      var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n      return match + (isEndOfInlineContainer || isBlockNode ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n\n  return markup;\n}\n\nfunction posFromPlaceholder(placeholder) {\n  var $placeholder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(placeholder);\n  var pos = $placeholder.offset();\n  var height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height\n  };\n}\n\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.on(key, events[key]);\n  });\n}\n\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.off(key, events[key]);\n  });\n}\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\n\n\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n\n/* harmony default export */ var dom = ({\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR: NBSP_CHAR,\n\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,\n\n  /** @property {String} blank */\n  blank: blankHTML,\n\n  /** @property {String} emptyPara */\n  emptyPara: \"<p>\".concat(blankHTML, \"</p>\"),\n  makePredByNodeName: makePredByNodeName,\n  isEditable: isEditable,\n  isControlSizing: isControlSizing,\n  isText: isText,\n  isElement: isElement,\n  isVoid: isVoid,\n  isPara: isPara,\n  isPurePara: isPurePara,\n  isHeading: isHeading,\n  isInline: dom_isInline,\n  isBlock: func.not(dom_isInline),\n  isBodyInline: isBodyInline,\n  isBody: isBody,\n  isParaInline: isParaInline,\n  isPre: isPre,\n  isList: isList,\n  isTable: isTable,\n  isData: isData,\n  isCell: dom_isCell,\n  isBlockquote: isBlockquote,\n  isBodyContainer: isBodyContainer,\n  isAnchor: isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi: isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea: isTextarea,\n  deepestChildIsEmpty: deepestChildIsEmpty,\n  isEmpty: dom_isEmpty,\n  isEmptyAnchor: func.and(isAnchor, dom_isEmpty),\n  isClosestSibling: isClosestSibling,\n  withClosestSiblings: withClosestSiblings,\n  nodeLength: nodeLength,\n  isLeftEdgePoint: isLeftEdgePoint,\n  isRightEdgePoint: isRightEdgePoint,\n  isEdgePoint: isEdgePoint,\n  isLeftEdgeOf: dom_isLeftEdgeOf,\n  isRightEdgeOf: isRightEdgeOf,\n  isLeftEdgePointOf: isLeftEdgePointOf,\n  isRightEdgePointOf: isRightEdgePointOf,\n  prevPoint: dom_prevPoint,\n  nextPoint: dom_nextPoint,\n  nextPointWithEmptyNode: nextPointWithEmptyNode,\n  isSamePoint: isSamePoint,\n  isVisiblePoint: isVisiblePoint,\n  prevPointUntil: prevPointUntil,\n  nextPointUntil: nextPointUntil,\n  isCharPoint: isCharPoint,\n  isSpacePoint: isSpacePoint,\n  walkPoint: walkPoint,\n  ancestor: dom_ancestor,\n  singleChildAncestor: singleChildAncestor,\n  listAncestor: listAncestor,\n  lastAncestor: lastAncestor,\n  listNext: listNext,\n  listPrev: listPrev,\n  listDescendant: listDescendant,\n  commonAncestor: dom_commonAncestor,\n  wrap: wrap,\n  insertAfter: insertAfter,\n  appendChildNodes: appendChildNodes,\n  position: dom_position,\n  hasChildren: hasChildren,\n  makeOffsetPath: makeOffsetPath,\n  fromOffsetPath: fromOffsetPath,\n  splitTree: splitTree,\n  splitPoint: splitPoint,\n  create: dom_create,\n  createText: createText,\n  remove: remove,\n  removeWhile: removeWhile,\n  replace: dom_replace,\n  html: dom_html,\n  value: dom_value,\n  posFromPlaceholder: posFromPlaceholder,\n  attachEvents: attachEvents,\n  detachEvents: detachEvents,\n  isCustomStyleTag: isCustomStyleTag\n});\n// CONCATENATED MODULE: ./src/js/base/Context.js\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar Context_Context = /*#__PURE__*/function () {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  function Context($note, options) {\n    _classCallCheck(this, Context);\n\n    this.$note = $note;\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, options); // init ui with options\n\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui_template(this.options);\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.initialize();\n  }\n  /**\n   * create layout and initialize modules and other resources\n   */\n\n\n  _createClass(Context, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.layoutInfo = this.ui.createLayout(this.$note);\n\n      this._initialize();\n\n      this.$note.hide();\n      return this;\n    }\n    /**\n     * destroy modules and other resources and remove layout\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._destroy();\n\n      this.$note.removeData('summernote');\n      this.ui.removeLayout(this.$note, this.layoutInfo);\n    }\n    /**\n     * destory modules and other resources and initialize it again\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var disabled = this.isDisabled();\n      this.code(dom.emptyPara);\n\n      this._destroy();\n\n      this._initialize();\n\n      if (disabled) {\n        this.disable();\n      }\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\n      var _this = this;\n\n      // set own id\n      this.options.id = func.uniqueId(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.now()); // set default container for tooltips, popovers, and dialogs\n\n      this.options.container = this.options.container || this.layoutInfo.editor; // add optional buttons\n\n      var buttons = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, this.options.buttons);\n      Object.keys(buttons).forEach(function (key) {\n        _this.memo('button.' + key, buttons[key]);\n      });\n      var modules = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, this.options.modules, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.plugins || {}); // add and initialize modules\n\n      Object.keys(modules).forEach(function (key) {\n        _this.module(key, modules[key], true);\n      });\n      Object.keys(this.modules).forEach(function (key) {\n        _this.initializeModule(key);\n      });\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      var _this2 = this;\n\n      // destroy modules with reversed order\n      Object.keys(this.modules).reverse().forEach(function (key) {\n        _this2.removeModule(key);\n      });\n      Object.keys(this.memos).forEach(function (key) {\n        _this2.removeMemo(key);\n      }); // trigger custom onDestroy callback\n\n      this.triggerEvent('destroy', this);\n    }\n  }, {\n    key: \"code\",\n    value: function code(html) {\n      var isActivated = this.invoke('codeview.isActivated');\n\n      if (html === undefined) {\n        this.invoke('codeview.sync');\n        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n      } else {\n        if (isActivated) {\n          this.invoke('codeview.sync', html);\n        } else {\n          this.layoutInfo.editable.html(html);\n        }\n\n        this.$note.val(html);\n        this.triggerEvent('change', html, this.layoutInfo.editable);\n      }\n    }\n  }, {\n    key: \"isDisabled\",\n    value: function isDisabled() {\n      return this.layoutInfo.editable.attr('contenteditable') === 'false';\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      this.layoutInfo.editable.attr('contenteditable', true);\n      this.invoke('toolbar.activate', true);\n      this.triggerEvent('disable', false);\n      this.options.editing = true;\n    }\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      // close codeview if codeview is opend\n      if (this.invoke('codeview.isActivated')) {\n        this.invoke('codeview.deactivate');\n      }\n\n      this.layoutInfo.editable.attr('contenteditable', false);\n      this.options.editing = false;\n      this.invoke('toolbar.deactivate', true);\n      this.triggerEvent('disable', true);\n    }\n  }, {\n    key: \"triggerEvent\",\n    value: function triggerEvent() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n\n      if (callback) {\n        callback.apply(this.$note[0], args);\n      }\n\n      this.$note.trigger('summernote.' + namespace, args);\n    }\n  }, {\n    key: \"initializeModule\",\n    value: function initializeModule(key) {\n      var module = this.modules[key];\n      module.shouldInitialize = module.shouldInitialize || func.ok;\n\n      if (!module.shouldInitialize()) {\n        return;\n      } // initialize module\n\n\n      if (module.initialize) {\n        module.initialize();\n      } // attach events\n\n\n      if (module.events) {\n        dom.attachEvents(this.$note, module.events);\n      }\n    }\n  }, {\n    key: \"module\",\n    value: function module(key, ModuleClass, withoutIntialize) {\n      if (arguments.length === 1) {\n        return this.modules[key];\n      }\n\n      this.modules[key] = new ModuleClass(this);\n\n      if (!withoutIntialize) {\n        this.initializeModule(key);\n      }\n    }\n  }, {\n    key: \"removeModule\",\n    value: function removeModule(key) {\n      var module = this.modules[key];\n\n      if (module.shouldInitialize()) {\n        if (module.events) {\n          dom.detachEvents(this.$note, module.events);\n        }\n\n        if (module.destroy) {\n          module.destroy();\n        }\n      }\n\n      delete this.modules[key];\n    }\n  }, {\n    key: \"memo\",\n    value: function memo(key, obj) {\n      if (arguments.length === 1) {\n        return this.memos[key];\n      }\n\n      this.memos[key] = obj;\n    }\n  }, {\n    key: \"removeMemo\",\n    value: function removeMemo(key) {\n      if (this.memos[key] && this.memos[key].destroy) {\n        this.memos[key].destroy();\n      }\n\n      delete this.memos[key];\n    }\n    /**\n     * Some buttons need to change their visual style immediately once they get pressed\n     */\n\n  }, {\n    key: \"createInvokeHandlerAndUpdateState\",\n    value: function createInvokeHandlerAndUpdateState(namespace, value) {\n      var _this3 = this;\n\n      return function (event) {\n        _this3.createInvokeHandler(namespace, value)(event);\n\n        _this3.invoke('buttons.updateCurrentStyle');\n      };\n    }\n  }, {\n    key: \"createInvokeHandler\",\n    value: function createInvokeHandler(namespace, value) {\n      var _this4 = this;\n\n      return function (event) {\n        event.preventDefault();\n        var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target);\n\n        _this4.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n      };\n    }\n  }, {\n    key: \"invoke\",\n    value: function invoke() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var splits = namespace.split('.');\n      var hasSeparator = splits.length > 1;\n      var moduleName = hasSeparator && lists.head(splits);\n      var methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n      var module = this.modules[moduleName || 'editor'];\n\n      if (!moduleName && this[methodName]) {\n        return this[methodName].apply(this, args);\n      } else if (module && module[methodName] && module.shouldInitialize()) {\n        return module[methodName].apply(module, args);\n      }\n    }\n  }]);\n\n  return Context;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/summernote.js\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function summernote() {\n    var type = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.type(lists.head(arguments));\n    var isExternalAPICalled = type === 'string';\n    var hasInitOptions = type === 'object';\n    var options = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.options, hasInitOptions ? lists.head(arguments) : {}); // Update options\n\n    options.langInfo = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang['en-US'], external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang[options.lang]);\n    options.icons = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n    this.each(function (idx, note) {\n      var $note = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(note);\n\n      if (!$note.data('summernote')) {\n        var context = new Context_Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n    var $note = this.first();\n\n    if ($note.length) {\n      var context = $note.data('summernote');\n\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n\n    return this;\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/range.js\nfunction range_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction range_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction range_createClass(Constructor, protoProps, staticProps) { if (protoProps) range_defineProperties(Constructor.prototype, protoProps); if (staticProps) range_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\n\nfunction textRangeToPoint(textRange, isStart) {\n  var container = textRange.parentElement();\n  var offset;\n  var tester = document.body.createTextRange();\n  var prevContainer;\n  var childNodes = lists.from(container.childNodes);\n\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n\n    tester.moveToElementText(childNodes[offset]);\n\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n\n    prevContainer = childNodes[offset];\n  }\n\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    var textRangeStart = document.body.createTextRange();\n    var curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n    var pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    var textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    } // [workaround] enforce IE to re-reference curTextNode, hack\n\n\n    var dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    container = curTextNode;\n    offset = textCount;\n  }\n\n  return {\n    cont: container,\n    offset: offset\n  };\n}\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\n\n\nfunction pointToTextRange(point) {\n  var textRangeInfo = function textRangeInfo(container, offset) {\n    var node, isCollapseToStart;\n\n    if (dom.isText(container)) {\n      var prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      var prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n\n      offset = 0;\n      isCollapseToStart = false;\n    }\n\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset\n    };\n  };\n\n  var textRange = document.body.createTextRange();\n  var info = textRangeInfo(point.node, point.offset);\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\n\n\nvar range_WrappedRange = /*#__PURE__*/function () {\n  function WrappedRange(sc, so, ec, eo) {\n    range_classCallCheck(this, WrappedRange);\n\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo; // isOnEditable: judge whether range is on editable or not\n\n    this.isOnEditable = this.makeIsOn(dom.isEditable); // isOnList: judge whether range is on list node or not\n\n    this.isOnList = this.makeIsOn(dom.isList); // isOnAnchor: judge whether range is on anchor node or not\n\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor); // isOnCell: judge whether range is on cell node or not\n\n    this.isOnCell = this.makeIsOn(dom.isCell); // isOnData: judge whether range is on data node or not\n\n    this.isOnData = this.makeIsOn(dom.isData);\n  } // nativeRange: get nativeRange from sc, so, ec, eo\n\n\n  range_createClass(WrappedRange, [{\n    key: \"nativeRange\",\n    value: function nativeRange() {\n      if (env.isW3CRangeSupport) {\n        var w3cRange = document.createRange();\n        w3cRange.setStart(this.sc, this.so);\n        w3cRange.setEnd(this.ec, this.eo);\n        return w3cRange;\n      } else {\n        var textRange = pointToTextRange({\n          node: this.sc,\n          offset: this.so\n        });\n        textRange.setEndPoint('EndToEnd', pointToTextRange({\n          node: this.ec,\n          offset: this.eo\n        }));\n        return textRange;\n      }\n    }\n  }, {\n    key: \"getPoints\",\n    value: function getPoints() {\n      return {\n        sc: this.sc,\n        so: this.so,\n        ec: this.ec,\n        eo: this.eo\n      };\n    }\n  }, {\n    key: \"getStartPoint\",\n    value: function getStartPoint() {\n      return {\n        node: this.sc,\n        offset: this.so\n      };\n    }\n  }, {\n    key: \"getEndPoint\",\n    value: function getEndPoint() {\n      return {\n        node: this.ec,\n        offset: this.eo\n      };\n    }\n    /**\n     * select update visible range\n     */\n\n  }, {\n    key: \"select\",\n    value: function select() {\n      var nativeRng = this.nativeRange();\n\n      if (env.isW3CRangeSupport) {\n        var selection = document.getSelection();\n\n        if (selection.rangeCount > 0) {\n          selection.removeAllRanges();\n        }\n\n        selection.addRange(nativeRng);\n      } else {\n        nativeRng.select();\n      }\n\n      return this;\n    }\n    /**\n     * Moves the scrollbar to start container(sc) of current range\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"scrollIntoView\",\n    value: function scrollIntoView(container) {\n      var height = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(container).height();\n\n      if (container.scrollTop + height < this.sc.offsetTop) {\n        container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n      }\n\n      return this;\n    }\n    /**\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"normalize\",\n    value: function normalize() {\n      /**\n       * @param {BoundaryPoint} point\n       * @param {Boolean} isLeftToRight - true: prefer to choose right node\n       *                                - false: prefer to choose left node\n       * @return {BoundaryPoint}\n       */\n      var getVisiblePoint = function getVisiblePoint(point, isLeftToRight) {\n        if (!point) {\n          return point;\n        } // Just use the given point [XXX:Adhoc]\n        //  - case 01. if the point is on the middle of the node\n        //  - case 02. if the point is on the right edge and prefer to choose left node\n        //  - case 03. if the point is on the left edge and prefer to choose right node\n        //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n        //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n        //  - case 06. if the point is on the block node and there is no children\n\n\n        if (dom.isVisiblePoint(point)) {\n          if (!dom.isEdgePoint(point) || dom.isRightEdgePoint(point) && !isLeftToRight || dom.isLeftEdgePoint(point) && isLeftToRight || dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling) || dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling) || dom.isBlock(point.node) && dom.isEmpty(point.node)) {\n            return point;\n          }\n        } // point on block's edge\n\n\n        var block = dom.ancestor(point.node, dom.isBlock);\n        var hasRightNode = false;\n\n        if (!hasRightNode) {\n          var prevPoint = dom.prevPoint(point) || {\n            node: null\n          };\n          hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n        }\n\n        var hasLeftNode = false;\n\n        if (!hasLeftNode) {\n          var _nextPoint = dom.nextPoint(point) || {\n            node: null\n          };\n\n          hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(_nextPoint.node)) && isLeftToRight;\n        }\n\n        if (hasRightNode || hasLeftNode) {\n          // returns point already on visible point\n          if (dom.isVisiblePoint(point)) {\n            return point;\n          } // reverse direction\n\n\n          isLeftToRight = !isLeftToRight;\n        }\n\n        var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n        return nextPoint || point;\n      };\n\n      var endPoint = getVisiblePoint(this.getEndPoint(), false);\n      var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns matched nodes on range\n     *\n     * @param {Function} [pred] - predicate function\n     * @param {Object} [options]\n     * @param {Boolean} [options.includeAncestor]\n     * @param {Boolean} [options.fullyContains]\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"nodes\",\n    value: function nodes(pred, options) {\n      pred = pred || func.ok;\n      var includeAncestor = options && options.includeAncestor;\n      var fullyContains = options && options.fullyContains; // TODO compare points and sort\n\n      var startPoint = this.getStartPoint();\n      var endPoint = this.getEndPoint();\n      var nodes = [];\n      var leftEdgeNodes = [];\n      dom.walkPoint(startPoint, endPoint, function (point) {\n        if (dom.isEditable(point.node)) {\n          return;\n        }\n\n        var node;\n\n        if (fullyContains) {\n          if (dom.isLeftEdgePoint(point)) {\n            leftEdgeNodes.push(point.node);\n          }\n\n          if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n            node = point.node;\n          }\n        } else if (includeAncestor) {\n          node = dom.ancestor(point.node, pred);\n        } else {\n          node = point.node;\n        }\n\n        if (node && pred(node)) {\n          nodes.push(node);\n        }\n      }, true);\n      return lists.unique(nodes);\n    }\n    /**\n     * returns commonAncestor of range\n     * @return {Element} - commonAncestor\n     */\n\n  }, {\n    key: \"commonAncestor\",\n    value: function commonAncestor() {\n      return dom.commonAncestor(this.sc, this.ec);\n    }\n    /**\n     * returns expanded range by pred\n     *\n     * @param {Function} pred - predicate function\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"expand\",\n    value: function expand(pred) {\n      var startAncestor = dom.ancestor(this.sc, pred);\n      var endAncestor = dom.ancestor(this.ec, pred);\n\n      if (!startAncestor && !endAncestor) {\n        return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n      }\n\n      var boundaryPoints = this.getPoints();\n\n      if (startAncestor) {\n        boundaryPoints.sc = startAncestor;\n        boundaryPoints.so = 0;\n      }\n\n      if (endAncestor) {\n        boundaryPoints.ec = endAncestor;\n        boundaryPoints.eo = dom.nodeLength(endAncestor);\n      }\n\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n    /**\n     * @param {Boolean} isCollapseToStart\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"collapse\",\n    value: function collapse(isCollapseToStart) {\n      if (isCollapseToStart) {\n        return new WrappedRange(this.sc, this.so, this.sc, this.so);\n      } else {\n        return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n      }\n    }\n    /**\n     * splitText on range\n     */\n\n  }, {\n    key: \"splitText\",\n    value: function splitText() {\n      var isSameContainer = this.sc === this.ec;\n      var boundaryPoints = this.getPoints();\n\n      if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n        this.ec.splitText(this.eo);\n      }\n\n      if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n        boundaryPoints.sc = this.sc.splitText(this.so);\n        boundaryPoints.so = 0;\n\n        if (isSameContainer) {\n          boundaryPoints.ec = boundaryPoints.sc;\n          boundaryPoints.eo = this.eo - this.so;\n        }\n      }\n\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n    /**\n     * delete contents on range\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"deleteContents\",\n    value: function deleteContents() {\n      if (this.isCollapsed()) {\n        return this;\n      }\n\n      var rng = this.splitText();\n      var nodes = rng.nodes(null, {\n        fullyContains: true\n      }); // find new cursor point\n\n      var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {\n        return !lists.contains(nodes, point.node);\n      });\n      var emptyParents = [];\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(nodes, function (idx, node) {\n        // find empty parents\n        var parent = node.parentNode;\n\n        if (point.node !== parent && dom.nodeLength(parent) === 1) {\n          emptyParents.push(parent);\n        }\n\n        dom.remove(node, false);\n      }); // remove empty parents\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(emptyParents, function (idx, node) {\n        dom.remove(node, false);\n      });\n      return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize();\n    }\n    /**\n     * makeIsOn: return isOn(pred) function\n     */\n\n  }, {\n    key: \"makeIsOn\",\n    value: function makeIsOn(pred) {\n      return function () {\n        var ancestor = dom.ancestor(this.sc, pred);\n        return !!ancestor && ancestor === dom.ancestor(this.ec, pred);\n      };\n    }\n    /**\n     * @param {Function} pred\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isLeftEdgeOf\",\n    value: function isLeftEdgeOf(pred) {\n      if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n        return false;\n      }\n\n      var node = dom.ancestor(this.sc, pred);\n      return node && dom.isLeftEdgeOf(this.sc, node);\n    }\n    /**\n     * returns whether range was collapsed or not\n     */\n\n  }, {\n    key: \"isCollapsed\",\n    value: function isCollapsed() {\n      return this.sc === this.ec && this.so === this.eo;\n    }\n    /**\n     * wrap inline nodes which children of body with paragraph\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"wrapBodyInlineWithPara\",\n    value: function wrapBodyInlineWithPara() {\n      if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n        this.sc.innerHTML = dom.emptyPara;\n        return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n      }\n      /**\n       * [workaround] firefox often create range on not visible point. so normalize here.\n       *  - firefox: |<p>text</p>|\n       *  - chrome: <p>|text|</p>\n       */\n\n\n      var rng = this.normalize();\n\n      if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n        return rng;\n      } // find inline top ancestor\n\n\n      var topAncestor;\n\n      if (dom.isInline(rng.sc)) {\n        var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n        topAncestor = lists.last(ancestors);\n\n        if (!dom.isInline(topAncestor)) {\n          topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n        }\n      } else {\n        topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n      }\n\n      if (topAncestor) {\n        // siblings not in paragraph\n        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); // wrap with paragraph\n\n        if (inlineSiblings.length) {\n          var para = dom.wrap(lists.head(inlineSiblings), 'p');\n          dom.appendChildNodes(para, lists.tail(inlineSiblings));\n        }\n      }\n\n      return this.normalize();\n    }\n    /**\n     * insert node at current cursor\n     *\n     * @param {Node} node\n     * @return {Node}\n     */\n\n  }, {\n    key: \"insertNode\",\n    value: function insertNode(node) {\n      var rng = this;\n\n      if (dom.isText(node) || dom.isInline(node)) {\n        rng = this.wrapBodyInlineWithPara().deleteContents();\n      }\n\n      var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n\n      if (info.rightNode) {\n        info.rightNode.parentNode.insertBefore(node, info.rightNode);\n\n        if (dom.isEmpty(info.rightNode) && dom.isPara(node)) {\n          info.rightNode.parentNode.removeChild(info.rightNode);\n        }\n      } else {\n        info.container.appendChild(node);\n      }\n\n      return node;\n    }\n    /**\n     * insert html at current cursor\n     */\n\n  }, {\n    key: \"pasteHTML\",\n    value: function pasteHTML(markup) {\n      markup = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.trim(markup);\n      var contentsContainer = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div></div>').html(markup)[0];\n      var childNodes = lists.from(contentsContainer.childNodes); // const rng = this.wrapBodyInlineWithPara().deleteContents();\n\n      var rng = this;\n      var reversed = false;\n\n      if (rng.so >= 0) {\n        childNodes = childNodes.reverse();\n        reversed = true;\n      }\n\n      childNodes = childNodes.map(function (childNode) {\n        return rng.insertNode(childNode);\n      });\n\n      if (reversed) {\n        childNodes = childNodes.reverse();\n      }\n\n      return childNodes;\n    }\n    /**\n     * returns text in range\n     *\n     * @return {String}\n     */\n\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var nativeRng = this.nativeRange();\n      return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n    }\n    /**\n     * returns range for word before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getWordRange\",\n    value: function getWordRange(findAfter) {\n      var endPoint = this.getEndPoint();\n\n      if (!dom.isCharPoint(endPoint)) {\n        return this;\n      }\n\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        return !dom.isCharPoint(point);\n      });\n\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, function (point) {\n          return !dom.isCharPoint(point);\n        });\n      }\n\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns range for words before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getWordsRange\",\n    value: function getWordsRange(findAfter) {\n      var endPoint = this.getEndPoint();\n\n      var isNotTextPoint = function isNotTextPoint(point) {\n        return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n      };\n\n      if (isNotTextPoint(endPoint)) {\n        return this;\n      }\n\n      var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n      }\n\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns range for words before cursor that match with a Regex\n     *\n     * example:\n     *  range: 'hi @Peter Pan'\n     *  regex: '/@[a-z ]+/i'\n     *  return range: '@Peter Pan'\n     *\n     * @param {RegExp} [regex]\n     * @return {WrappedRange|null}\n     */\n\n  }, {\n    key: \"getWordsMatchRange\",\n    value: function getWordsMatchRange(regex) {\n      var endPoint = this.getEndPoint();\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n          return true;\n        }\n\n        var rng = new WrappedRange(point.node, point.offset, endPoint.node, endPoint.offset);\n        var result = regex.exec(rng.toString());\n        return result && result.index === 0;\n      });\n      var rng = new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n      var text = rng.toString();\n      var result = regex.exec(text);\n\n      if (result && result[0].length === text.length) {\n        return rng;\n      } else {\n        return null;\n      }\n    }\n    /**\n     * create offsetPath bookmark\n     *\n     * @param {Node} editable\n     */\n\n  }, {\n    key: \"bookmark\",\n    value: function bookmark(editable) {\n      return {\n        s: {\n          path: dom.makeOffsetPath(editable, this.sc),\n          offset: this.so\n        },\n        e: {\n          path: dom.makeOffsetPath(editable, this.ec),\n          offset: this.eo\n        }\n      };\n    }\n    /**\n     * create offsetPath bookmark base on paragraph\n     *\n     * @param {Node[]} paras\n     */\n\n  }, {\n    key: \"paraBookmark\",\n    value: function paraBookmark(paras) {\n      return {\n        s: {\n          path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n          offset: this.so\n        },\n        e: {\n          path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n          offset: this.eo\n        }\n      };\n    }\n    /**\n     * getClientRects\n     * @return {Rect[]}\n     */\n\n  }, {\n    key: \"getClientRects\",\n    value: function getClientRects() {\n      var nativeRng = this.nativeRange();\n      return nativeRng.getClientRects();\n    }\n  }]);\n\n  return WrappedRange;\n}();\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\n\n\n/* harmony default export */ var range = ({\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function create(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new range_WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) {\n      // collapsed\n      ec = sc;\n      eo = so;\n      return new range_WrappedRange(sc, so, ec, eo);\n    } else {\n      var wrappedRange = this.createFromSelection();\n\n      if (!wrappedRange && arguments.length === 1) {\n        var bodyElement = arguments[0];\n\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n\n      return wrappedRange;\n    }\n  },\n  createFromBodyElement: function createFromBodyElement(bodyElement) {\n    var isCollapseToStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n  createFromSelection: function createFromSelection() {\n    var sc, so, ec, eo;\n\n    if (env.isW3CRangeSupport) {\n      var selection = document.getSelection();\n\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n\n      var nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else {\n      // IE8: TextRange\n      var textRange = document.selection.createRange();\n      var textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      var textRangeStart = textRange;\n      textRangeStart.collapse(true);\n      var startPoint = textRangeToPoint(textRangeStart, true);\n      var endPoint = textRangeToPoint(textRangeEnd, false); // same visible point case: range was collapsed.\n\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n\n    return new range_WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function createFromNode(node) {\n    var sc = node;\n    var so = 0;\n    var ec = node;\n    var eo = dom.nodeLength(ec); // browsers can't target a picture or void node\n\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n\n    return this.create(sc, so, ec, eo);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function createFromNodeBefore(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function createFromNodeAfter(node) {\n    return this.createFromNode(node).collapse();\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function createFromBookmark(editable, bookmark) {\n    var sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    var so = bookmark.s.offset;\n    var ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    var eo = bookmark.e.offset;\n    return new range_WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function createFromParaBookmark(bookmark, paras) {\n    var so = bookmark.s.offset;\n    var eo = bookmark.e.offset;\n    var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n    return new range_WrappedRange(sc, so, ec, eo);\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/key.js\n\n\nvar KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34\n};\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\n\n/* harmony default export */ var core_key = ({\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: function isEdit(keyCode) {\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE], keyCode);\n  },\n\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: function isMove(keyCode) {\n    return lists.contains([KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN], keyCode);\n  },\n\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: function isNavigation(keyCode) {\n    return lists.contains([KEY_MAP.HOME, KEY_MAP.END, KEY_MAP.PAGEUP, KEY_MAP.PAGEDOWN], keyCode);\n  },\n\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP\n});\n// CONCATENATED MODULE: ./src/js/base/core/async.js\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\n\nfunction readFileAsDataURL(file) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(new FileReader(), {\n      onload: function onload(e) {\n        var dataURL = e.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: function onerror(err) {\n        deferred.reject(err);\n      }\n    }).readAsDataURL(file);\n  }).promise();\n}\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\n\nfunction createImage(url) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n    var $img = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<img>');\n    $img.one('load', function () {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', function () {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none'\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n// CONCATENATED MODULE: ./src/js/base/editing/History.js\nfunction History_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction History_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction History_createClass(Constructor, protoProps, staticProps) { if (protoProps) History_defineProperties(Constructor.prototype, protoProps); if (staticProps) History_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar History_History = /*#__PURE__*/function () {\n  function History(context) {\n    History_classCallCheck(this, History);\n\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n\n  History_createClass(History, [{\n    key: \"makeSnapshot\",\n    value: function makeSnapshot() {\n      var rng = range.create(this.editable);\n      var emptyBookmark = {\n        s: {\n          path: [],\n          offset: 0\n        },\n        e: {\n          path: [],\n          offset: 0\n        }\n      };\n      return {\n        contents: this.$editable.html(),\n        bookmark: rng && rng.isOnEditable() ? rng.bookmark(this.editable) : emptyBookmark\n      };\n    }\n  }, {\n    key: \"applySnapshot\",\n    value: function applySnapshot(snapshot) {\n      if (snapshot.contents !== null) {\n        this.$editable.html(snapshot.contents);\n      }\n\n      if (snapshot.bookmark !== null) {\n        range.createFromBookmark(this.editable, snapshot.bookmark).select();\n      }\n    }\n    /**\n    * @method rewind\n    * Rewinds the history stack back to the first snapshot taken.\n    * Leaves the stack intact, so that \"Redo\" can still be used.\n    */\n\n  }, {\n    key: \"rewind\",\n    value: function rewind() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      } // Return to the first available snapshot.\n\n\n      this.stackOffset = 0; // Apply that snapshot.\n\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n    /**\n    *  @method commit\n    *  Resets history stack, but keeps current editor's content.\n    */\n\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      // Clear the stack.\n      this.stack = []; // Restore stackOffset to its original value.\n\n      this.stackOffset = -1; // Record our first snapshot (of nothing).\n\n      this.recordUndo();\n    }\n    /**\n    * @method reset\n    * Resets the history stack completely; reverting to an empty editor.\n    */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      // Clear the stack.\n      this.stack = []; // Restore stackOffset to its original value.\n\n      this.stackOffset = -1; // Clear the editable area.\n\n      this.$editable.html(''); // Record our first snapshot (of nothing).\n\n      this.recordUndo();\n    }\n    /**\n     * undo\n     */\n\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      if (this.stackOffset > 0) {\n        this.stackOffset--;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n    /**\n     * redo\n     */\n\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.stack.length - 1 > this.stackOffset) {\n        this.stackOffset++;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n    /**\n     * recorded undo\n     */\n\n  }, {\n    key: \"recordUndo\",\n    value: function recordUndo() {\n      this.stackOffset++; // Wash out stack after stackOffset\n\n      if (this.stack.length > this.stackOffset) {\n        this.stack = this.stack.slice(0, this.stackOffset);\n      } // Create new snapshot and push it to the end\n\n\n      this.stack.push(this.makeSnapshot()); // If the stack size reachs to the limit, then slice it\n\n      if (this.stack.length > this.context.options.historyLimit) {\n        this.stack.shift();\n        this.stackOffset -= 1;\n      }\n    }\n  }]);\n\n  return History;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Style.js\nfunction Style_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Style_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Style_createClass(Constructor, protoProps, staticProps) { if (protoProps) Style_defineProperties(Constructor.prototype, protoProps); if (staticProps) Style_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar Style_Style = /*#__PURE__*/function () {\n  function Style() {\n    Style_classCallCheck(this, Style);\n  }\n\n  Style_createClass(Style, [{\n    key: \"jQueryCSS\",\n\n    /**\n     * @method jQueryCSS\n     *\n     * [workaround] for old jQuery\n     * passing an array of style properties to .css()\n     * will result in an object of property-value pairs.\n     * (compability with version < 1.9)\n     *\n     * @private\n     * @param  {jQuery} $obj\n     * @param  {Array} propertyNames - An array of one or more CSS properties.\n     * @return {Object}\n     */\n    value: function jQueryCSS($obj, propertyNames) {\n      if (env.jqueryVersion < 1.9) {\n        var result = {};\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(propertyNames, function (idx, propertyName) {\n          result[propertyName] = $obj.css(propertyName);\n        });\n        return result;\n      }\n\n      return $obj.css(propertyNames);\n    }\n    /**\n     * returns style object from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n\n  }, {\n    key: \"fromNode\",\n    value: function fromNode($node) {\n      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n      var styleInfo = this.jQueryCSS($node, properties) || {};\n      var fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n      styleInfo['font-size'] = parseInt(fontSize, 10);\n      styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n      return styleInfo;\n    }\n    /**\n     * paragraph level style\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} styleInfo\n     */\n\n  }, {\n    key: \"stylePara\",\n    value: function stylePara(rng, styleInfo) {\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(rng.nodes(dom.isPara, {\n        includeAncestor: true\n      }), function (idx, para) {\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css(styleInfo);\n      });\n    }\n    /**\n     * insert and returns styleNodes on range.\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} [options] - options for styleNodes\n     * @param {String} [options.nodeName] - default: `SPAN`\n     * @param {Boolean} [options.expandClosestSibling] - default: `false`\n     * @param {Boolean} [options.onlyPartialContains] - default: `false`\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"styleNodes\",\n    value: function styleNodes(rng, options) {\n      rng = rng.splitText();\n      var nodeName = options && options.nodeName || 'SPAN';\n      var expandClosestSibling = !!(options && options.expandClosestSibling);\n      var onlyPartialContains = !!(options && options.onlyPartialContains);\n\n      if (rng.isCollapsed()) {\n        return [rng.insertNode(dom.create(nodeName))];\n      }\n\n      var pred = dom.makePredByNodeName(nodeName);\n      var nodes = rng.nodes(dom.isText, {\n        fullyContains: true\n      }).map(function (text) {\n        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n      });\n\n      if (expandClosestSibling) {\n        if (onlyPartialContains) {\n          var nodesInRange = rng.nodes(); // compose with partial contains predication\n\n          pred = func.and(pred, function (node) {\n            return lists.contains(nodesInRange, node);\n          });\n        }\n\n        return nodes.map(function (node) {\n          var siblings = dom.withClosestSiblings(node, pred);\n          var head = lists.head(siblings);\n          var tails = lists.tail(siblings);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(tails, function (idx, elem) {\n            dom.appendChildNodes(head, elem.childNodes);\n            dom.remove(elem);\n          });\n          return lists.head(siblings);\n        });\n      } else {\n        return nodes;\n      }\n    }\n    /**\n     * get current style on cursor\n     *\n     * @param {WrappedRange} rng\n     * @return {Object} - object contains style properties.\n     */\n\n  }, {\n    key: \"current\",\n    value: function current(rng) {\n      var $cont = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n      var styleInfo = this.fromNode($cont); // document.queryCommandState for toggle state\n      // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n\n      try {\n        styleInfo = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(styleInfo, {\n          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n          'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n        });\n      } catch (e) {} // eslint-disable-next-line\n      // list-style-type to list-style(unordered, ordered)\n\n\n      if (!rng.isOnList()) {\n        styleInfo['list-style'] = 'none';\n      } else {\n        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n        var isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n      }\n\n      var para = dom.ancestor(rng.sc, dom.isPara);\n\n      if (para && para.style['line-height']) {\n        styleInfo['line-height'] = para.style.lineHeight;\n      } else {\n        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n        styleInfo['line-height'] = lineHeight.toFixed(1);\n      }\n\n      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n      styleInfo.range = rng;\n      return styleInfo;\n    }\n  }]);\n\n  return Style;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Bullet.js\nfunction Bullet_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Bullet_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Bullet_createClass(Constructor, protoProps, staticProps) { if (protoProps) Bullet_defineProperties(Constructor.prototype, protoProps); if (staticProps) Bullet_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar Bullet_Bullet = /*#__PURE__*/function () {\n  function Bullet() {\n    Bullet_classCallCheck(this, Bullet);\n  }\n\n  Bullet_createClass(Bullet, [{\n    key: \"insertOrderedList\",\n\n    /**\n     * toggle ordered list\n     */\n    value: function insertOrderedList(editable) {\n      this.toggleList('OL', editable);\n    }\n    /**\n     * toggle unordered list\n     */\n\n  }, {\n    key: \"insertUnorderedList\",\n    value: function insertUnorderedList(editable) {\n      this.toggleList('UL', editable);\n    }\n    /**\n     * indent\n     */\n\n  }, {\n    key: \"indent\",\n    value: function indent(editable) {\n      var _this = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n\n        if (dom.isLi(head)) {\n          var previousList = _this.findList(head.previousSibling);\n\n          if (previousList) {\n            paras.map(function (para) {\n              return previousList.appendChild(para);\n            });\n          } else {\n            _this.wrapList(paras, head.parentNode.nodeName);\n\n            paras.map(function (para) {\n              return para.parentNode;\n            }).map(function (para) {\n              return _this.appendToPrevious(para);\n            });\n          }\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(paras, function (idx, para) {\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              return (parseInt(val, 10) || 0) + 25;\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n    /**\n     * outdent\n     */\n\n  }, {\n    key: \"outdent\",\n    value: function outdent(editable) {\n      var _this2 = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n\n        if (dom.isLi(head)) {\n          _this2.releaseList([paras]);\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(paras, function (idx, para) {\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              val = parseInt(val, 10) || 0;\n              return val > 25 ? val - 25 : '';\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n    /**\n     * toggle list\n     *\n     * @param {String} listName - OL or UL\n     */\n\n  }, {\n    key: \"toggleList\",\n    value: function toggleList(listName, editable) {\n      var _this3 = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var bookmark = rng.paraBookmark(paras);\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list\n\n      if (lists.find(paras, dom.isPurePara)) {\n        var wrappedParas = [];\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n          wrappedParas = wrappedParas.concat(_this3.wrapList(paras, listName));\n        });\n        paras = wrappedParas; // list to paragraph or change list style\n      } else {\n        var diffLists = rng.nodes(dom.isList, {\n          includeAncestor: true\n        }).filter(function (listNode) {\n          return !external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.nodeName(listNode, listName);\n        });\n\n        if (diffLists.length) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(diffLists, function (idx, listNode) {\n            dom.replace(listNode, listName);\n          });\n        } else {\n          paras = this.releaseList(clustereds, true);\n        }\n      }\n\n      range.createFromParaBookmark(bookmark, paras).select();\n    }\n    /**\n     * @param {Node[]} paras\n     * @param {String} listName\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"wrapList\",\n    value: function wrapList(paras, listName) {\n      var head = lists.head(paras);\n      var last = lists.last(paras);\n      var prevList = dom.isList(head.previousSibling) && head.previousSibling;\n      var nextList = dom.isList(last.nextSibling) && last.nextSibling;\n      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); // P to LI\n\n      paras = paras.map(function (para) {\n        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n      }); // append to list(<ul>, <ol>)\n\n      dom.appendChildNodes(listNode, paras);\n\n      if (nextList) {\n        dom.appendChildNodes(listNode, lists.from(nextList.childNodes));\n        dom.remove(nextList);\n      }\n\n      return paras;\n    }\n    /**\n     * @method releaseList\n     *\n     * @param {Array[]} clustereds\n     * @param {Boolean} isEscapseToBody\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"releaseList\",\n    value: function releaseList(clustereds, isEscapseToBody) {\n      var _this4 = this;\n\n      var releasedParas = [];\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        var last = lists.last(paras);\n        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n        var parentItem = headList.parentNode;\n\n        if (headList.parentNode.nodeName === 'LI') {\n          paras.map(function (para) {\n            var newList = _this4.findNextSiblings(para);\n\n            if (parentItem.nextSibling) {\n              parentItem.parentNode.insertBefore(para, parentItem.nextSibling);\n            } else {\n              parentItem.parentNode.appendChild(para);\n            }\n\n            if (newList.length) {\n              _this4.wrapList(newList, headList.nodeName);\n\n              para.appendChild(newList[0].parentNode);\n            }\n          });\n\n          if (headList.children.length === 0) {\n            parentItem.removeChild(headList);\n          }\n\n          if (parentItem.childNodes.length === 0) {\n            parentItem.parentNode.removeChild(parentItem);\n          }\n        } else {\n          var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n            node: last.parentNode,\n            offset: dom.position(last) + 1\n          }, {\n            isSkipPaddingBlankHTML: true\n          }) : null;\n          var middleList = dom.splitTree(headList, {\n            node: head.parentNode,\n            offset: dom.position(head)\n          }, {\n            isSkipPaddingBlankHTML: true\n          });\n          paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi); // LI to P\n\n          if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n            paras = paras.map(function (para) {\n              return dom.replace(para, 'P');\n            });\n          }\n\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(lists.from(paras).reverse(), function (idx, para) {\n            dom.insertAfter(para, headList);\n          }); // remove empty lists\n\n          var rootLists = lists.compact([headList, middleList, lastList]);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(rootLists, function (idx, rootList) {\n            var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(listNodes.reverse(), function (idx, listNode) {\n              if (!dom.nodeLength(listNode)) {\n                dom.remove(listNode, true);\n              }\n            });\n          });\n        }\n\n        releasedParas = releasedParas.concat(paras);\n      });\n      return releasedParas;\n    }\n    /**\n     * @method appendToPrevious\n     *\n     * Appends list to previous list item, if\n     * none exist it wraps the list in a new list item.\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n\n  }, {\n    key: \"appendToPrevious\",\n    value: function appendToPrevious(node) {\n      return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');\n    }\n    /**\n     * @method findList\n     *\n     * Finds an existing list in list item\n     *\n     * @param {HTMLNode} ListItem\n     * @return {Array[]}\n     */\n\n  }, {\n    key: \"findList\",\n    value: function findList(node) {\n      return node ? lists.find(node.children, function (child) {\n        return ['OL', 'UL'].indexOf(child.nodeName) > -1;\n      }) : null;\n    }\n    /**\n     * @method findNextSiblings\n     *\n     * Finds all list item siblings that follow it\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n\n  }, {\n    key: \"findNextSiblings\",\n    value: function findNextSiblings(node) {\n      var siblings = [];\n\n      while (node.nextSibling) {\n        siblings.push(node.nextSibling);\n        node = node.nextSibling;\n      }\n\n      return siblings;\n    }\n  }]);\n\n  return Bullet;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Typing.js\nfunction Typing_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Typing_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Typing_createClass(Constructor, protoProps, staticProps) { if (protoProps) Typing_defineProperties(Constructor.prototype, protoProps); if (staticProps) Typing_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\n\nvar Typing_Typing = /*#__PURE__*/function () {\n  function Typing(context) {\n    Typing_classCallCheck(this, Typing);\n\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet_Bullet();\n    this.options = context.options;\n  }\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n\n\n  Typing_createClass(Typing, [{\n    key: \"insertTab\",\n    value: function insertTab(rng, tabsize) {\n      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n      rng = rng.deleteContents();\n      rng.insertNode(tab, true);\n      rng = range.create(tab, tabsize);\n      rng.select();\n    }\n    /**\n     * insert paragraph\n     *\n     * @param {jQuery} $editable\n     * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n     *\n     * blockquoteBreakingLevel\n     *   0 - No break, the new paragraph remains inside the quote\n     *   1 - Break the first blockquote in the ancestors list\n     *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n     */\n\n  }, {\n    key: \"insertParagraph\",\n    value: function insertParagraph(editable, rng) {\n      rng = rng || range.create(editable); // deleteContents on range.\n\n      rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph\n\n      rng = rng.wrapBodyInlineWithPara(); // finding paragraph\n\n      var splitRoot = dom.ancestor(rng.sc, dom.isPara);\n      var nextPara; // on paragraph: split paragraph\n\n      if (splitRoot) {\n        // if it is an empty line with li\n        if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n          // toggle UL/OL and escape\n          this.bullet.toggleList(splitRoot.parentNode.nodeName);\n          return;\n        } else {\n          var blockquote = null;\n\n          if (this.options.blockquoteBreakingLevel === 1) {\n            blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n          } else if (this.options.blockquoteBreakingLevel === 2) {\n            blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n          }\n\n          if (blockquote) {\n            // We're inside a blockquote and options ask us to break it\n            nextPara = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(dom.emptyPara)[0]; // If the split is right before a <br>, remove it so that there's no \"empty line\"\n            // after the split in the new blockquote created\n\n            if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(rng.sc.nextSibling).remove();\n            }\n\n            var split = dom.splitTree(blockquote, rng.getStartPoint(), {\n              isDiscardEmptySplits: true\n            });\n\n            if (split) {\n              split.parentNode.insertBefore(nextPara, split);\n            } else {\n              dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n            }\n          } else {\n            nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); // not a blockquote, just insert the paragraph\n\n            var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n            emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(emptyAnchors, function (idx, anchor) {\n              dom.remove(anchor);\n            }); // replace empty heading, pre or custom-made styleTag with P tag\n\n            if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n              nextPara = dom.replace(nextPara, 'p');\n            }\n          }\n        } // no paragraph: insert empty paragraph\n\n      } else {\n        var next = rng.sc.childNodes[rng.so];\n        nextPara = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(dom.emptyPara)[0];\n\n        if (next) {\n          rng.sc.insertBefore(nextPara, next);\n        } else {\n          rng.sc.appendChild(nextPara);\n        }\n      }\n\n      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n    }\n  }]);\n\n  return Typing;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Table.js\nfunction Table_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Table_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Table_createClass(Constructor, protoProps, staticProps) { if (protoProps) Table_defineProperties(Constructor.prototype, protoProps); if (staticProps) Table_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\n\nvar TableResultAction = function TableResultAction(startPoint, where, action, domTable) {\n  var _startPoint = {\n    'colPos': 0,\n    'rowPos': 0\n  };\n  var _virtualTable = [];\n  var _actionCellList = []; /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th') {\n      // Impossible to identify start Cell point\n      return;\n    }\n\n    _startPoint.colPos = startPoint.cellIndex;\n\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n\n\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    var objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell\n    };\n\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n\n\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition\n      }\n    };\n  }\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n\n\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n\n    var newCellIndex = cellIndex;\n\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n\n\n  function addCellInfoToVirtual(row, cell) {\n    var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    var cellHasColspan = cell.colSpan > 1;\n    var cellHasRowspan = cell.rowSpan > 1;\n    var isThisSelectedCell = row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos;\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); // Add span rows to virtual Table.\n\n    var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n\n    if (rowspanNumber > 1) {\n      for (var rp = 1; rp < rowspanNumber; rp++) {\n        var rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    } // Add span cols to virtual table.\n\n\n    var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n\n    if (colspanNumber > 1) {\n      for (var cp = 1; cp < colspanNumber; cp++) {\n        var cellspanIndex = recoverCellIndex(row.rowIndex, cellIndex + cp);\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n\n\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n\n\n  function createVirtualTable() {\n    var rows = domTable.rows;\n\n    for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      var cells = rows[rowIndex].cells;\n\n      for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n\n\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n\n        break;\n\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n\n        break;\n    }\n\n    return TableResultAction.resultAction.RemoveCell;\n  }\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n\n\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n\n        break;\n\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n\n        break;\n    }\n\n    return TableResultAction.resultAction.AddCell;\n  }\n\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  } /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n\n\n  this.getActionList = function () {\n    var fixedRow = where === TableResultAction.where.Row ? _startPoint.rowPos : -1;\n    var fixedCol = where === TableResultAction.where.Column ? _startPoint.colPos : -1;\n    var actualPosition = 0;\n    var canContinue = true;\n\n    while (canContinue) {\n      var rowPosition = fixedRow >= 0 ? fixedRow : actualPosition;\n      var colPosition = fixedCol >= 0 ? fixedCol : actualPosition;\n      var row = _virtualTable[rowPosition];\n\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      var cell = row[colPosition];\n\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      } // Define action to be applied in this cell\n\n\n      var resultAction = TableResultAction.resultAction.Ignore;\n\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n\n      actualPosition++;\n    }\n\n    return _actionCellList;\n  };\n\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\n\n\nTableResultAction.where = {\n  'Row': 0,\n  'Column': 1\n};\n/**\n*\n* Requested action to apply enum.\n*/\n\nTableResultAction.requestAction = {\n  'Add': 0,\n  'Delete': 1\n};\n/**\n*\n* Result action to be executed enum.\n*/\n\nTableResultAction.resultAction = {\n  'Ignore': 0,\n  'SubtractSpanCount': 1,\n  'RemoveCell': 2,\n  'AddCell': 3,\n  'SumSpanCount': 4\n};\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\n\nvar Table_Table = /*#__PURE__*/function () {\n  function Table() {\n    Table_classCallCheck(this, Table);\n  }\n\n  Table_createClass(Table, [{\n    key: \"tab\",\n\n    /**\n     * handle tab key\n     *\n     * @param {WrappedRange} rng\n     * @param {Boolean} isShift\n     */\n    value: function tab(rng, isShift) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var table = dom.ancestor(cell, dom.isTable);\n      var cells = dom.listDescendant(table, dom.isCell);\n      var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n\n      if (nextCell) {\n        range.create(nextCell, 0).select();\n      }\n    }\n    /**\n     * Add a new row\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (top/bottom)\n     * @return {Node}\n     */\n\n  }, {\n    key: \"addRow\",\n    value: function addRow(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var currentTr = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var trAttributes = this.recoverAttributes(currentTr);\n      var html = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<tr' + trAttributes + '></tr>');\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentTr).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var idCell = 0; idCell < actions.length; idCell++) {\n        var currentCell = actions[idCell];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            break;\n\n          case TableResultAction.resultAction.SumSpanCount:\n            {\n              if (position === 'top') {\n                var baseCellTr = currentCell.baseCell.parent;\n                var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n\n                if (isTopFromRowSpan) {\n                  var newTd = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div></div>').append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                  html.append(newTd);\n                  break;\n                }\n              }\n\n              var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n              rowspanNumber++;\n              currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n            }\n            break;\n        }\n      }\n\n      if (position === 'top') {\n        currentTr.before(html);\n      } else {\n        var cellHasRowspan = cell.rowSpan > 1;\n\n        if (cellHasRowspan) {\n          var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentTr).parent().find('tr')[lastTrIndex]).after(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(html));\n          return;\n        }\n\n        currentTr.after(html);\n      }\n    }\n    /**\n     * Add a new col\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (left/right)\n     * @return {Node}\n     */\n\n  }, {\n    key: \"addCol\",\n    value: function addCol(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var rowsGroup = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).siblings();\n      rowsGroup.push(row);\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        var currentCell = actions[actionIndex];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            if (position === 'right') {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n\n            break;\n\n          case TableResultAction.resultAction.SumSpanCount:\n            if (position === 'right') {\n              var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n              colspanNumber++;\n              currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n\n            break;\n        }\n      }\n    }\n    /*\n    * Copy attributes from element.\n    *\n    * @param {object} Element to recover attributes.\n    * @return {string} Copied string elements.\n    */\n\n  }, {\n    key: \"recoverAttributes\",\n    value: function recoverAttributes(el) {\n      var resultStr = '';\n\n      if (!el) {\n        return resultStr;\n      }\n\n      var attrList = el.attributes || [];\n\n      for (var i = 0; i < attrList.length; i++) {\n        if (attrList[i].name.toLowerCase() === 'id') {\n          continue;\n        }\n\n        if (attrList[i].specified) {\n          resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n        }\n      }\n\n      return resultStr;\n    }\n    /**\n     * Delete current row\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell));\n      var rowPos = row[0].rowIndex;\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n\n        var baseCell = actions[actionIndex].baseCell;\n        var virtualPosition = actions[actionIndex].virtualTable;\n        var hasRowspan = baseCell.rowSpan && baseCell.rowSpan > 1;\n        var rowspanNumber = hasRowspan ? parseInt(baseCell.rowSpan, 10) : 0;\n\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n\n          case TableResultAction.resultAction.AddCell:\n            {\n              var nextRow = row.next('tr')[0];\n\n              if (!nextRow) {\n                continue;\n              }\n\n              var cloneRow = row[0].cells[cellPos];\n\n              if (hasRowspan) {\n                if (rowspanNumber > 2) {\n                  rowspanNumber--;\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                  nextRow.cells[cellPos].innerHTML = '';\n                } else if (rowspanNumber === 2) {\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].removeAttribute('rowSpan');\n                  nextRow.cells[cellPos].innerHTML = '';\n                }\n              }\n            }\n            continue;\n\n          case TableResultAction.resultAction.SubtractSpanCount:\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                baseCell.setAttribute('rowSpan', rowspanNumber);\n\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              } else if (rowspanNumber === 2) {\n                baseCell.removeAttribute('rowSpan');\n\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              }\n            }\n\n            continue;\n\n          case TableResultAction.resultAction.RemoveCell:\n            // Do not need remove cell because row will be deleted.\n            continue;\n        }\n      }\n\n      row.remove();\n    }\n    /**\n     * Delete current col\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell));\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n\n          case TableResultAction.resultAction.SubtractSpanCount:\n            {\n              var baseCell = actions[actionIndex].baseCell;\n              var hasColspan = baseCell.colSpan && baseCell.colSpan > 1;\n\n              if (hasColspan) {\n                var colspanNumber = baseCell.colSpan ? parseInt(baseCell.colSpan, 10) : 0;\n\n                if (colspanNumber > 2) {\n                  colspanNumber--;\n                  baseCell.setAttribute('colSpan', colspanNumber);\n\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                } else if (colspanNumber === 2) {\n                  baseCell.removeAttribute('colSpan');\n\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                }\n              }\n            }\n            continue;\n\n          case TableResultAction.resultAction.RemoveCell:\n            dom.remove(actions[actionIndex].baseCell, true);\n            continue;\n        }\n      }\n    }\n    /**\n     * create empty table element\n     *\n     * @param {Number} rowCount\n     * @param {Number} colCount\n     * @return {Node}\n     */\n\n  }, {\n    key: \"createTable\",\n    value: function createTable(colCount, rowCount, options) {\n      var tds = [];\n      var tdHTML;\n\n      for (var idxCol = 0; idxCol < colCount; idxCol++) {\n        tds.push('<td>' + dom.blank + '</td>');\n      }\n\n      tdHTML = tds.join('');\n      var trs = [];\n      var trHTML;\n\n      for (var idxRow = 0; idxRow < rowCount; idxRow++) {\n        trs.push('<tr>' + tdHTML + '</tr>');\n      }\n\n      trHTML = trs.join('');\n      var $table = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<table>' + trHTML + '</table>');\n\n      if (options && options.tableClassName) {\n        $table.addClass(options.tableClassName);\n      }\n\n      return $table[0];\n    }\n    /**\n     * Delete current table\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('table').remove();\n    }\n  }]);\n\n  return Table;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Editor.js\nfunction Editor_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Editor_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Editor_createClass(Constructor, protoProps, staticProps) { if (protoProps) Editor_defineProperties(Constructor.prototype, protoProps); if (staticProps) Editor_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KEY_BOGUS = 'bogus';\n/**\n * @class Editor\n */\n\nvar Editor_Editor = /*#__PURE__*/function () {\n  function Editor(context) {\n    var _this = this;\n\n    Editor_classCallCheck(this, Editor);\n\n    this.context = context;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n    this.style = new Style_Style();\n    this.table = new Table_Table();\n    this.typing = new Typing_Typing(context);\n    this.bullet = new Bullet_Bullet();\n    this.history = new History_History(context);\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName); // native commands(with execCommand), generate function for execCommand\n\n    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor'];\n\n    for (var idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = function (sCmd) {\n        return function (value) {\n          _this.beforeCommand();\n\n          document.execCommand(sCmd, false, value);\n\n          _this.afterCommand(true);\n        };\n      }(commands[idx]);\n\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n\n    this.fontName = this.wrapCommand(function (value) {\n      return _this.fontStyling('font-family', env.validFontName(value));\n    });\n    this.fontSize = this.wrapCommand(function (value) {\n      var unit = _this.currentStyle()['font-size-unit'];\n\n      return _this.fontStyling('font-size', value + unit);\n    });\n    this.fontSizeUnit = this.wrapCommand(function (value) {\n      var size = _this.currentStyle()['font-size'];\n\n      return _this.fontStyling('font-size', size + value);\n    });\n\n    for (var _idx = 1; _idx <= 6; _idx++) {\n      this['formatH' + _idx] = function (idx) {\n        return function () {\n          _this.formatBlock('H' + idx);\n        };\n      }(_idx);\n\n      this.context.memo('help.formatH' + _idx, this.lang.help['formatH' + _idx]);\n    }\n\n    this.insertParagraph = this.wrapCommand(function () {\n      _this.typing.insertParagraph(_this.editable);\n    });\n    this.insertOrderedList = this.wrapCommand(function () {\n      _this.bullet.insertOrderedList(_this.editable);\n    });\n    this.insertUnorderedList = this.wrapCommand(function () {\n      _this.bullet.insertUnorderedList(_this.editable);\n    });\n    this.indent = this.wrapCommand(function () {\n      _this.bullet.indent(_this.editable);\n    });\n    this.outdent = this.wrapCommand(function () {\n      _this.bullet.outdent(_this.editable);\n    });\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n\n    this.insertNode = this.wrapCommand(function (node) {\n      if (_this.isLimited(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).text().length)) {\n        return;\n      }\n\n      var rng = _this.getLastRange();\n\n      rng.insertNode(node);\n\n      _this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n    /**\n     * insert text\n     * @param {String} text\n     */\n\n    this.insertText = this.wrapCommand(function (text) {\n      if (_this.isLimited(text.length)) {\n        return;\n      }\n\n      var rng = _this.getLastRange();\n\n      var textNode = rng.insertNode(dom.createText(text));\n\n      _this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n\n    this.pasteHTML = this.wrapCommand(function (markup) {\n      if (_this.isLimited(markup.length)) {\n        return;\n      }\n\n      markup = _this.context.invoke('codeview.purify', markup);\n\n      var contents = _this.getLastRange().pasteHTML(markup);\n\n      _this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n\n    this.formatBlock = this.wrapCommand(function (tagName, $target) {\n      var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle;\n\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock);\n      } else {\n        _this.onFormatBlock(tagName, $target);\n      }\n    });\n    /**\n     * insert horizontal rule\n     */\n\n    this.insertHorizontalRule = this.wrapCommand(function () {\n      var hrNode = _this.getLastRange().insertNode(dom.create('HR'));\n\n      if (hrNode.nextSibling) {\n        _this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n\n    this.lineHeight = this.wrapCommand(function (value) {\n      _this.style.stylePara(_this.getLastRange(), {\n        lineHeight: value\n      });\n    });\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n\n    this.createLink = this.wrapCommand(function (linkInfo) {\n      var linkUrl = linkInfo.url;\n      var linkText = linkInfo.text;\n      var isNewWindow = linkInfo.isNewWindow;\n      var checkProtocol = linkInfo.checkProtocol;\n\n      var rng = linkInfo.range || _this.getLastRange();\n\n      var additionalTextLength = linkText.length - rng.toString().length;\n\n      if (additionalTextLength > 0 && _this.isLimited(additionalTextLength)) {\n        return;\n      }\n\n      var isTextChanged = rng.toString() !== linkText; // handle spaced urls from input\n\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n\n      if (_this.options.onCreateLink) {\n        linkUrl = _this.options.onCreateLink(linkUrl);\n      } else if (checkProtocol) {\n        // if url doesn't have any protocol and not even a relative or a label, use http:// as default\n        linkUrl = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/.test(linkUrl) ? linkUrl : _this.options.defaultProtocol + linkUrl;\n      }\n\n      var anchors = [];\n\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        var anchor = rng.insertNode(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<A>' + linkText + '</A>')[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = _this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true\n        });\n      }\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(anchors, function (idx, anchor) {\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('href', linkUrl);\n\n        if (isNewWindow) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('target', '_blank');\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).removeAttr('target');\n        }\n      });\n\n      _this.setLastRange(_this.createRangeFromList(anchors).select());\n    });\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n\n    this.color = this.wrapCommand(function (colorInfo) {\n      var foreColor = colorInfo.foreColor;\n      var backColor = colorInfo.backColor;\n\n      if (foreColor) {\n        document.execCommand('foreColor', false, foreColor);\n      }\n\n      if (backColor) {\n        document.execCommand('backColor', false, backColor);\n      }\n    });\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n\n    this.foreColor = this.wrapCommand(function (colorInfo) {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n\n    this.insertTable = this.wrapCommand(function (dim) {\n      var dimension = dim.split('x');\n\n      var rng = _this.getLastRange().deleteContents();\n\n      rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options));\n    });\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n\n    this.removeMedia = this.wrapCommand(function () {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget()).parent();\n\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget()).detach();\n      }\n\n      _this.context.triggerEvent('media.delete', $target, _this.$editable);\n    });\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n\n    this.floatMe = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', value === 'none' ? '' : value);\n    });\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n\n    this.resize = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget());\n      value = parseFloat(value);\n\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: ''\n        });\n      }\n    });\n  }\n\n  Editor_createClass(Editor, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      // bind custom events\n      this.$editable.on('keydown', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          _this2.context.triggerEvent('enter', event);\n        }\n\n        _this2.context.triggerEvent('keydown', event); // keep a snapshot to limit text on input event\n\n\n        _this2.snapshot = _this2.history.makeSnapshot();\n        _this2.hasKeyShortCut = false;\n\n        if (!event.isDefaultPrevented()) {\n          if (_this2.options.shortcuts) {\n            _this2.hasKeyShortCut = _this2.handleKeyMap(event);\n          } else {\n            _this2.preventDefaultEditableShortCuts(event);\n          }\n        }\n\n        if (_this2.isLimited(1, event)) {\n          var lastRange = _this2.getLastRange();\n\n          if (lastRange.eo - lastRange.so === 0) {\n            return false;\n          }\n        }\n\n        _this2.setLastRange(); // record undo in the key event except keyMap.\n\n\n        if (_this2.options.recordEveryKeystroke) {\n          if (_this2.hasKeyShortCut === false) {\n            _this2.history.recordUndo();\n          }\n        }\n      }).on('keyup', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('keyup', event);\n      }).on('focus', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('focus', event);\n      }).on('blur', function (event) {\n        _this2.context.triggerEvent('blur', event);\n      }).on('mousedown', function (event) {\n        _this2.context.triggerEvent('mousedown', event);\n      }).on('mouseup', function (event) {\n        _this2.setLastRange();\n\n        _this2.history.recordUndo();\n\n        _this2.context.triggerEvent('mouseup', event);\n      }).on('scroll', function (event) {\n        _this2.context.triggerEvent('scroll', event);\n      }).on('paste', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('paste', event);\n      }).on('input', function () {\n        // To limit composition characters (e.g. Korean)\n        if (_this2.isLimited(0) && _this2.snapshot) {\n          _this2.history.applySnapshot(_this2.snapshot);\n        }\n      });\n      this.$editable.attr('spellcheck', this.options.spellCheck);\n      this.$editable.attr('autocorrect', this.options.spellCheck);\n\n      if (this.options.disableGrammar) {\n        this.$editable.attr('data-gramm', false);\n      } // init content before set event\n\n\n      this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n      this.$editable.on(env.inputEventName, func.debounce(function () {\n        _this2.context.triggerEvent('change', _this2.$editable.html(), _this2.$editable);\n      }, 10));\n      this.$editable.on('focusin', function (event) {\n        _this2.context.triggerEvent('focusin', event);\n      }).on('focusout', function (event) {\n        _this2.context.triggerEvent('focusout', event);\n      });\n\n      if (this.options.airMode) {\n        if (this.options.overrideContextMenu) {\n          this.$editor.on('contextmenu', function (event) {\n            _this2.context.triggerEvent('contextmenu', event);\n\n            return false;\n          });\n        }\n      } else {\n        if (this.options.width) {\n          this.$editor.outerWidth(this.options.width);\n        }\n\n        if (this.options.height) {\n          this.$editable.outerHeight(this.options.height);\n        }\n\n        if (this.options.maxHeight) {\n          this.$editable.css('max-height', this.options.maxHeight);\n        }\n\n        if (this.options.minHeight) {\n          this.$editable.css('min-height', this.options.minHeight);\n        }\n      }\n\n      this.history.recordUndo();\n      this.setLastRange();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$editable.off();\n    }\n  }, {\n    key: \"handleKeyMap\",\n    value: function handleKeyMap(event) {\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      var keys = [];\n\n      if (event.metaKey) {\n        keys.push('CMD');\n      }\n\n      if (event.ctrlKey && !event.altKey) {\n        keys.push('CTRL');\n      }\n\n      if (event.shiftKey) {\n        keys.push('SHIFT');\n      }\n\n      var keyName = core_key.nameFromCode[event.keyCode];\n\n      if (keyName) {\n        keys.push(keyName);\n      }\n\n      var eventName = keyMap[keys.join('+')];\n\n      if (keyName === 'TAB' && !this.options.tabDisable) {\n        this.afterCommand();\n      } else if (eventName) {\n        if (this.context.invoke(eventName) !== false) {\n          event.preventDefault(); // if keyMap action was invoked\n\n          return true;\n        }\n      } else if (core_key.isEdit(event.keyCode)) {\n        this.afterCommand();\n      }\n\n      return false;\n    }\n  }, {\n    key: \"preventDefaultEditableShortCuts\",\n    value: function preventDefaultEditableShortCuts(event) {\n      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n      if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) {\n        event.preventDefault();\n      }\n    }\n  }, {\n    key: \"isLimited\",\n    value: function isLimited(pad, event) {\n      pad = pad || 0;\n\n      if (typeof event !== 'undefined') {\n        if (core_key.isMove(event.keyCode) || core_key.isNavigation(event.keyCode) || event.ctrlKey || event.metaKey || lists.contains([core_key.code.BACKSPACE, core_key.code.DELETE], event.keyCode)) {\n          return false;\n        }\n      }\n\n      if (this.options.maxTextLength > 0) {\n        if (this.$editable.text().length + pad > this.options.maxTextLength) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n    /**\n     * create range\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"createRange\",\n    value: function createRange() {\n      this.focus();\n      this.setLastRange();\n      return this.getLastRange();\n    }\n    /**\n     * create a new range from the list of elements\n     *\n     * @param {list} dom element list\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"createRangeFromList\",\n    value: function createRangeFromList(lst) {\n      var startRange = range.createFromNodeBefore(lists.head(lst));\n      var startPoint = startRange.getStartPoint();\n      var endRange = range.createFromNodeAfter(lists.last(lst));\n      var endPoint = endRange.getEndPoint();\n      return range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * set the last range\n     *\n     * if given rng is exist, set rng as the last range\n     * or create a new range at the end of the document\n     *\n     * @param {WrappedRange} rng\n     */\n\n  }, {\n    key: \"setLastRange\",\n    value: function setLastRange(rng) {\n      if (rng) {\n        this.lastRange = rng;\n      } else {\n        this.lastRange = range.create(this.editable);\n\n        if (external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.lastRange.sc).closest('.note-editable').length === 0) {\n          this.lastRange = range.createFromBodyElement(this.editable);\n        }\n      }\n    }\n    /**\n     * get the last range\n     *\n     * if there is a saved last range, return it\n     * or create a new range and return it\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      if (!this.lastRange) {\n        this.setLastRange();\n      }\n\n      return this.lastRange;\n    }\n    /**\n     * saveRange\n     *\n     * save current range\n     *\n     * @param {Boolean} [thenCollapse=false]\n     */\n\n  }, {\n    key: \"saveRange\",\n    value: function saveRange(thenCollapse) {\n      if (thenCollapse) {\n        this.getLastRange().collapse().select();\n      }\n    }\n    /**\n     * restoreRange\n     *\n     * restore lately range\n     */\n\n  }, {\n    key: \"restoreRange\",\n    value: function restoreRange() {\n      if (this.lastRange) {\n        this.lastRange.select();\n        this.focus();\n      }\n    }\n  }, {\n    key: \"saveTarget\",\n    value: function saveTarget(node) {\n      this.$editable.data('target', node);\n    }\n  }, {\n    key: \"clearTarget\",\n    value: function clearTarget() {\n      this.$editable.removeData('target');\n    }\n  }, {\n    key: \"restoreTarget\",\n    value: function restoreTarget() {\n      return this.$editable.data('target');\n    }\n    /**\n     * currentStyle\n     *\n     * current style\n     * @return {Object|Boolean} unfocus\n     */\n\n  }, {\n    key: \"currentStyle\",\n    value: function currentStyle() {\n      var rng = range.create();\n\n      if (rng) {\n        rng = rng.normalize();\n      }\n\n      return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n    }\n    /**\n     * style from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n\n  }, {\n    key: \"styleFromNode\",\n    value: function styleFromNode($node) {\n      return this.style.fromNode($node);\n    }\n    /**\n     * undo\n     */\n\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.undo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /*\n    * commit\n    */\n\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.commit();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /**\n     * redo\n     */\n\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.redo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /**\n     * before command\n     */\n\n  }, {\n    key: \"beforeCommand\",\n    value: function beforeCommand() {\n      this.context.triggerEvent('before.command', this.$editable.html()); // Set styleWithCSS before run a command\n\n      document.execCommand('styleWithCSS', false, this.options.styleWithCSS); // keep focus on editable before command execution\n\n      this.focus();\n    }\n    /**\n     * after command\n     * @param {Boolean} isPreventTrigger\n     */\n\n  }, {\n    key: \"afterCommand\",\n    value: function afterCommand(isPreventTrigger) {\n      this.normalizeContent();\n      this.history.recordUndo();\n\n      if (!isPreventTrigger) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n    /**\n     * handle tab key\n     */\n\n  }, {\n    key: \"tab\",\n    value: function tab() {\n      var rng = this.getLastRange();\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n\n        if (!this.isLimited(this.options.tabSize)) {\n          this.beforeCommand();\n          this.typing.insertTab(rng, this.options.tabSize);\n          this.afterCommand();\n        }\n      }\n    }\n    /**\n     * handle shift+tab key\n     */\n\n  }, {\n    key: \"untab\",\n    value: function untab() {\n      var rng = this.getLastRange();\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng, true);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n      }\n    }\n    /**\n     * run given function between beforeCommand and afterCommand\n     */\n\n  }, {\n    key: \"wrapCommand\",\n    value: function wrapCommand(fn) {\n      return function () {\n        this.beforeCommand();\n        fn.apply(this, arguments);\n        this.afterCommand();\n      };\n    }\n    /**\n     * insert image\n     *\n     * @param {String} src\n     * @param {String|Function} param\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"insertImage\",\n    value: function insertImage(src, param) {\n      var _this3 = this;\n\n      return createImage(src, param).then(function ($image) {\n        _this3.beforeCommand();\n\n        if (typeof param === 'function') {\n          param($image);\n        } else {\n          if (typeof param === 'string') {\n            $image.attr('data-filename', param);\n          }\n\n          $image.css('width', Math.min(_this3.$editable.width(), $image.width()));\n        }\n\n        $image.show();\n\n        _this3.getLastRange().insertNode($image[0]);\n\n        _this3.setLastRange(range.createFromNodeAfter($image[0]).select());\n\n        _this3.afterCommand();\n      }).fail(function (e) {\n        _this3.context.triggerEvent('image.upload.error', e);\n      });\n    }\n    /**\n     * insertImages\n     * @param {File[]} files\n     */\n\n  }, {\n    key: \"insertImagesAsDataURL\",\n    value: function insertImagesAsDataURL(files) {\n      var _this4 = this;\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(files, function (idx, file) {\n        var filename = file.name;\n\n        if (_this4.options.maximumImageFileSize && _this4.options.maximumImageFileSize < file.size) {\n          _this4.context.triggerEvent('image.upload.error', _this4.lang.image.maximumFileSizeError);\n        } else {\n          readFileAsDataURL(file).then(function (dataURL) {\n            return _this4.insertImage(dataURL, filename);\n          }).fail(function () {\n            _this4.context.triggerEvent('image.upload.error');\n          });\n        }\n      });\n    }\n    /**\n     * insertImagesOrCallback\n     * @param {File[]} files\n     */\n\n  }, {\n    key: \"insertImagesOrCallback\",\n    value: function insertImagesOrCallback(files) {\n      var callbacks = this.options.callbacks; // If onImageUpload set,\n\n      if (callbacks.onImageUpload) {\n        this.context.triggerEvent('image.upload', files); // else insert Image as dataURL\n      } else {\n        this.insertImagesAsDataURL(files);\n      }\n    }\n    /**\n     * return selected plain text\n     * @return {String} text\n     */\n\n  }, {\n    key: \"getSelectedText\",\n    value: function getSelectedText() {\n      var rng = this.getLastRange(); // if range on anchor, expand range with anchor\n\n      if (rng.isOnAnchor()) {\n        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n      }\n\n      return rng.toString();\n    }\n  }, {\n    key: \"onFormatBlock\",\n    value: function onFormatBlock(tagName, $target) {\n      // [workaround] for MSIE, IE need `<`\n      document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName); // support custom class\n\n      if ($target && $target.length) {\n        // find the exact element has given tagName\n        if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n          $target = $target.find(tagName);\n        }\n\n        if ($target && $target.length) {\n          var className = $target[0].className || '';\n\n          if (className) {\n            var currentRange = this.createRange();\n            var $parent = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()([currentRange.sc, currentRange.ec]).closest(tagName);\n            $parent.addClass(className);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"formatPara\",\n    value: function formatPara() {\n      this.formatBlock('P');\n    }\n  }, {\n    key: \"fontStyling\",\n    value: function fontStyling(target, value) {\n      var rng = this.getLastRange();\n\n      if (rng !== '') {\n        var spans = this.style.styleNodes(rng);\n        this.$editor.find('.note-status-output').html('');\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(spans).css(target, value); // [workaround] added styled bogus span for style\n        //  - also bogus character needed for cursor position\n\n        if (rng.isCollapsed()) {\n          var firstSpan = lists.head(spans);\n\n          if (firstSpan && !dom.nodeLength(firstSpan)) {\n            firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n            range.createFromNode(firstSpan.firstChild).select();\n            this.setLastRange();\n            this.$editable.data(KEY_BOGUS, firstSpan);\n          }\n        } else {\n          this.setLastRange(this.createRangeFromList(spans).select());\n        }\n      } else {\n        var noteStatusOutput = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.now();\n        this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n        setTimeout(function () {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('#note-status-output-' + noteStatusOutput).remove();\n        }, 5000);\n      }\n    }\n    /**\n     * unlink\n     *\n     * @type command\n     */\n\n  }, {\n    key: \"unlink\",\n    value: function unlink() {\n      var rng = this.getLastRange();\n\n      if (rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        rng = range.createFromNode(anchor);\n        rng.select();\n        this.setLastRange();\n        this.beforeCommand();\n        document.execCommand('unlink');\n        this.afterCommand();\n      }\n    }\n    /**\n     * returns link info\n     *\n     * @return {Object}\n     * @return {WrappedRange} return.range\n     * @return {String} return.text\n     * @return {Boolean} [return.isNewWindow=true]\n     * @return {String} [return.url=\"\"]\n     */\n\n  }, {\n    key: \"getLinkInfo\",\n    value: function getLinkInfo() {\n      var rng = this.getLastRange().expand(dom.isAnchor); // Get the first anchor on range(for edit).\n\n      var $anchor = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(lists.head(rng.nodes(dom.isAnchor)));\n      var linkInfo = {\n        range: rng,\n        text: rng.toString(),\n        url: $anchor.length ? $anchor.attr('href') : ''\n      }; // When anchor exists,\n\n      if ($anchor.length) {\n        // Set isNewWindow by checking its target.\n        linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n      }\n\n      return linkInfo;\n    }\n  }, {\n    key: \"addRow\",\n    value: function addRow(position) {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addRow(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"addCol\",\n    value: function addCol(position) {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addCol(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteRow(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteCol(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteTable(rng);\n        this.afterCommand();\n      }\n    }\n    /**\n     * @param {Position} pos\n     * @param {jQuery} $target - target element\n     * @param {Boolean} [bKeepRatio] - keep ratio\n     */\n\n  }, {\n    key: \"resizeTo\",\n    value: function resizeTo(pos, $target, bKeepRatio) {\n      var imageSize;\n\n      if (bKeepRatio) {\n        var newRatio = pos.y / pos.x;\n        var ratio = $target.data('ratio');\n        imageSize = {\n          width: ratio > newRatio ? pos.x : pos.y / ratio,\n          height: ratio > newRatio ? pos.x * ratio : pos.y\n        };\n      } else {\n        imageSize = {\n          width: pos.x,\n          height: pos.y\n        };\n      }\n\n      $target.css(imageSize);\n    }\n    /**\n     * returns whether editable area has focus or not.\n     */\n\n  }, {\n    key: \"hasFocus\",\n    value: function hasFocus() {\n      return this.$editable.is(':focus');\n    }\n    /**\n     * set focus\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // [workaround] Screen will move when page is scolled in IE.\n      //  - do focus when not focused\n      if (!this.hasFocus()) {\n        this.$editable.focus();\n      }\n    }\n    /**\n     * returns whether contents is empty or not.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n    }\n    /**\n     * Removes all contents and restores the editable instance to an _emptyPara_.\n     */\n\n  }, {\n    key: \"empty\",\n    value: function empty() {\n      this.context.invoke('code', dom.emptyPara);\n    }\n    /**\n     * normalize content\n     */\n\n  }, {\n    key: \"normalizeContent\",\n    value: function normalizeContent() {\n      this.$editable[0].normalize();\n    }\n  }]);\n\n  return Editor;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Clipboard.js\nfunction Clipboard_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Clipboard_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Clipboard_createClass(Constructor, protoProps, staticProps) { if (protoProps) Clipboard_defineProperties(Constructor.prototype, protoProps); if (staticProps) Clipboard_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Clipboard_Clipboard = /*#__PURE__*/function () {\n  function Clipboard(context) {\n    Clipboard_classCallCheck(this, Clipboard);\n\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n  }\n\n  Clipboard_createClass(Clipboard, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.$editable.on('paste', this.pasteByEvent.bind(this));\n    }\n    /**\n     * paste by clipboard event\n     *\n     * @param {Event} event\n     */\n\n  }, {\n    key: \"pasteByEvent\",\n    value: function pasteByEvent(event) {\n      var _this = this;\n\n      var clipboardData = event.originalEvent.clipboardData;\n\n      if (clipboardData && clipboardData.items && clipboardData.items.length) {\n        var item = clipboardData.items.length > 1 ? clipboardData.items[1] : lists.head(clipboardData.items);\n\n        if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {\n          // paste img file\n          this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);\n          event.preventDefault();\n        } else if (item.kind === 'string') {\n          // paste text with maxTextLength check\n          if (this.context.invoke('editor.isLimited', clipboardData.getData('Text').length)) {\n            event.preventDefault();\n          }\n        }\n      } else if (window.clipboardData) {\n        // for IE\n        var text = window.clipboardData.getData('text');\n\n        if (this.context.invoke('editor.isLimited', text.length)) {\n          event.preventDefault();\n        }\n      } // Call editor.afterCommand after proceeding default event handler\n\n\n      setTimeout(function () {\n        _this.context.invoke('editor.afterCommand');\n      }, 10);\n    }\n  }]);\n\n  return Clipboard;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Dropzone.js\nfunction Dropzone_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Dropzone_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Dropzone_createClass(Constructor, protoProps, staticProps) { if (protoProps) Dropzone_defineProperties(Constructor.prototype, protoProps); if (staticProps) Dropzone_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Dropzone_Dropzone = /*#__PURE__*/function () {\n  function Dropzone(context) {\n    Dropzone_classCallCheck(this, Dropzone);\n\n    this.context = context;\n    this.$eventListener = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n    this.$dropzone = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(['<div class=\"note-dropzone\">', '<div class=\"note-dropzone-message\"></div>', '</div>'].join('')).prependTo(this.$editor);\n  }\n  /**\n   * attach Drag and Drop Events\n   */\n\n\n  Dropzone_createClass(Dropzone, [{\n    key: \"initialize\",\n    value: function initialize() {\n      if (this.options.disableDragAndDrop) {\n        // prevent default drop event\n        this.documentEventHandlers.onDrop = function (e) {\n          e.preventDefault();\n        }; // do not consider outside of dropzone\n\n\n        this.$eventListener = this.$dropzone;\n        this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n      } else {\n        this.attachDragAndDropEvent();\n      }\n    }\n    /**\n     * attach Drag and Drop Events\n     */\n\n  }, {\n    key: \"attachDragAndDropEvent\",\n    value: function attachDragAndDropEvent() {\n      var _this = this;\n\n      var collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n      var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n\n      this.documentEventHandlers.onDragenter = function (e) {\n        var isCodeview = _this.context.invoke('codeview.isActivated');\n\n        var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0;\n\n        if (!isCodeview && !collection.length && hasEditorSize) {\n          _this.$editor.addClass('dragover');\n\n          _this.$dropzone.width(_this.$editor.width());\n\n          _this.$dropzone.height(_this.$editor.height());\n\n          $dropzoneMessage.text(_this.lang.image.dragImageHere);\n        }\n\n        collection = collection.add(e.target);\n      };\n\n      this.documentEventHandlers.onDragleave = function (e) {\n        collection = collection.not(e.target); // If nodeName is BODY, then just make it over (fix for IE)\n\n        if (!collection.length || e.target.nodeName === 'BODY') {\n          collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n\n          _this.$editor.removeClass('dragover');\n        }\n      };\n\n      this.documentEventHandlers.onDrop = function () {\n        collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n\n        _this.$editor.removeClass('dragover');\n      }; // show dropzone on dragenter when dragging a object to document\n      // -but only if the editor is visible, i.e. has a positive width and height\n\n\n      this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter).on('dragleave', this.documentEventHandlers.onDragleave).on('drop', this.documentEventHandlers.onDrop); // change dropzone's message on hover.\n\n      this.$dropzone.on('dragenter', function () {\n        _this.$dropzone.addClass('hover');\n\n        $dropzoneMessage.text(_this.lang.image.dropImage);\n      }).on('dragleave', function () {\n        _this.$dropzone.removeClass('hover');\n\n        $dropzoneMessage.text(_this.lang.image.dragImageHere);\n      }); // attach dropImage\n\n      this.$dropzone.on('drop', function (event) {\n        var dataTransfer = event.originalEvent.dataTransfer; // stop the browser from opening the dropped content\n\n        event.preventDefault();\n\n        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n          _this.$editable.focus();\n\n          _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(dataTransfer.types, function (idx, type) {\n            // skip moz-specific types\n            if (type.toLowerCase().indexOf('_moz_') > -1) {\n              return;\n            }\n\n            var content = dataTransfer.getData(type);\n\n            if (type.toLowerCase().indexOf('text') > -1) {\n              _this.context.invoke('editor.pasteHTML', content);\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(content).each(function (idx, item) {\n                _this.context.invoke('editor.insertNode', item);\n              });\n            }\n          });\n        }\n      }).on('dragover', false); // prevent default dragover event\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n\n      Object.keys(this.documentEventHandlers).forEach(function (key) {\n        _this2.$eventListener.off(key.substr(2).toLowerCase(), _this2.documentEventHandlers[key]);\n      });\n      this.documentEventHandlers = {};\n    }\n  }]);\n\n  return Dropzone;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Codeview.js\nfunction _createForOfIteratorHelper(o) { if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Codeview_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Codeview_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Codeview_createClass(Constructor, protoProps, staticProps) { if (protoProps) Codeview_defineProperties(Constructor.prototype, protoProps); if (staticProps) Codeview_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n/**\n * @class Codeview\n */\n\nvar Codeview_CodeView = /*#__PURE__*/function () {\n  function CodeView(context) {\n    Codeview_classCallCheck(this, CodeView);\n\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n\n  Codeview_createClass(CodeView, [{\n    key: \"sync\",\n    value: function sync(html) {\n      var isCodeview = this.isActivated();\n      var CodeMirror = this.CodeMirrorConstructor;\n\n      if (isCodeview) {\n        if (html) {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').getDoc().setValue(html);\n          } else {\n            this.$codable.val(html);\n          }\n        } else {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').save();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      this.$codable.on('keyup', function (event) {\n        if (event.keyCode === core_key.code.ESCAPE) {\n          _this.deactivate();\n        }\n      });\n    }\n    /**\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isActivated\",\n    value: function isActivated() {\n      return this.$editor.hasClass('codeview');\n    }\n    /**\n     * toggle codeview\n     */\n\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.isActivated()) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n\n      this.context.triggerEvent('codeview.toggled');\n    }\n    /**\n     * purify input value\n     * @param value\n     * @returns {*}\n     */\n\n  }, {\n    key: \"purify\",\n    value: function purify(value) {\n      if (this.options.codeviewFilter) {\n        // filter code view regex\n        value = value.replace(this.options.codeviewFilterRegex, ''); // allow specific iframe tag\n\n        if (this.options.codeviewIframeFilter) {\n          var whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n          value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function (tag) {\n            // remove if src attribute is duplicated\n            if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n              return '';\n            }\n\n            var _iterator = _createForOfIteratorHelper(whitelist),\n                _step;\n\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var src = _step.value;\n\n                // pass if src is trusted\n                if (new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"').test(tag)) {\n                  return tag;\n                }\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n\n            return '';\n          });\n        }\n      }\n\n      return value;\n    }\n    /**\n     * activate code view\n     */\n\n  }, {\n    key: \"activate\",\n    value: function activate() {\n      var _this2 = this;\n\n      var CodeMirror = this.CodeMirrorConstructor;\n      this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n      this.$codable.height(this.$editable.height());\n      this.context.invoke('toolbar.updateCodeview', true);\n      this.context.invoke('airPopover.updateCodeview', true);\n      this.$editor.addClass('codeview');\n      this.$codable.focus(); // activate CodeMirror as codable\n\n      if (CodeMirror) {\n        var cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror); // CodeMirror TernServer\n\n        if (this.options.codemirror.tern) {\n          var server = new CodeMirror.TernServer(this.options.codemirror.tern);\n          cmEditor.ternServer = server;\n          cmEditor.on('cursorActivity', function (cm) {\n            server.updateArgHints(cm);\n          });\n        }\n\n        cmEditor.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n        });\n        cmEditor.on('change', function () {\n          _this2.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n        }); // CodeMirror hasn't Padding.\n\n        cmEditor.setSize(null, this.$editable.outerHeight());\n        this.$codable.data('cmEditor', cmEditor);\n      } else {\n        this.$codable.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', _this2.$codable.val(), event);\n        });\n        this.$codable.on('input', function () {\n          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);\n        });\n      }\n    }\n    /**\n     * deactivate code view\n     */\n\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      var CodeMirror = this.CodeMirrorConstructor; // deactivate CodeMirror as codable\n\n      if (CodeMirror) {\n        var cmEditor = this.$codable.data('cmEditor');\n        this.$codable.val(cmEditor.getValue());\n        cmEditor.toTextArea();\n      }\n\n      var value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n      var isChange = this.$editable.html() !== value;\n      this.$editable.html(value);\n      this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n      this.$editor.removeClass('codeview');\n\n      if (isChange) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n\n      this.$editable.focus();\n      this.context.invoke('toolbar.updateCodeview', false);\n      this.context.invoke('airPopover.updateCodeview', false);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isActivated()) {\n        this.deactivate();\n      }\n    }\n  }]);\n\n  return CodeView;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Statusbar.js\nfunction Statusbar_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Statusbar_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Statusbar_createClass(Constructor, protoProps, staticProps) { if (protoProps) Statusbar_defineProperties(Constructor.prototype, protoProps); if (staticProps) Statusbar_defineProperties(Constructor, staticProps); return Constructor; }\n\n\nvar EDITABLE_PADDING = 24;\n\nvar Statusbar_Statusbar = /*#__PURE__*/function () {\n  function Statusbar(context) {\n    Statusbar_classCallCheck(this, Statusbar);\n\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n  }\n\n  Statusbar_createClass(Statusbar, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      if (this.options.airMode || this.options.disableResizeEditor) {\n        this.destroy();\n        return;\n      }\n\n      this.$statusbar.on('mousedown', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        var editableTop = _this.$editable.offset().top - _this.$document.scrollTop();\n\n        var onMouseMove = function onMouseMove(event) {\n          var height = event.clientY - (editableTop + EDITABLE_PADDING);\n          height = _this.options.minheight > 0 ? Math.max(height, _this.options.minheight) : height;\n          height = _this.options.maxHeight > 0 ? Math.min(height, _this.options.maxHeight) : height;\n\n          _this.$editable.height(height);\n        };\n\n        _this.$document.on('mousemove', onMouseMove).one('mouseup', function () {\n          _this.$document.off('mousemove', onMouseMove);\n        });\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$statusbar.off();\n      this.$statusbar.addClass('locked');\n    }\n  }]);\n\n  return Statusbar;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Fullscreen.js\nfunction Fullscreen_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Fullscreen_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Fullscreen_createClass(Constructor, protoProps, staticProps) { if (protoProps) Fullscreen_defineProperties(Constructor.prototype, protoProps); if (staticProps) Fullscreen_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Fullscreen_Fullscreen = /*#__PURE__*/function () {\n  function Fullscreen(context) {\n    var _this = this;\n\n    Fullscreen_classCallCheck(this, Fullscreen);\n\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.$window = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(window);\n    this.$scrollbar = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('html, body');\n\n    this.onResize = function () {\n      _this.resizeTo({\n        h: _this.$window.height() - _this.$toolbar.outerHeight()\n      });\n    };\n  }\n\n  Fullscreen_createClass(Fullscreen, [{\n    key: \"resizeTo\",\n    value: function resizeTo(size) {\n      this.$editable.css('height', size.h);\n      this.$codable.css('height', size.h);\n\n      if (this.$codable.data('cmeditor')) {\n        this.$codable.data('cmeditor').setsize(null, size.h);\n      }\n    }\n    /**\n     * toggle fullscreen\n     */\n\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      this.$editor.toggleClass('fullscreen');\n\n      if (this.isFullscreen()) {\n        this.$editable.data('orgHeight', this.$editable.css('height'));\n        this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n        this.$editable.css('maxHeight', '');\n        this.$window.on('resize', this.onResize).trigger('resize');\n        this.$scrollbar.css('overflow', 'hidden');\n      } else {\n        this.$window.off('resize', this.onResize);\n        this.resizeTo({\n          h: this.$editable.data('orgHeight')\n        });\n        this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n        this.$scrollbar.css('overflow', 'visible');\n      }\n\n      this.context.invoke('toolbar.updateFullscreen', this.isFullscreen());\n    }\n  }, {\n    key: \"isFullscreen\",\n    value: function isFullscreen() {\n      return this.$editor.hasClass('fullscreen');\n    }\n  }]);\n\n  return Fullscreen;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Handle.js\nfunction Handle_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Handle_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Handle_createClass(Constructor, protoProps, staticProps) { if (protoProps) Handle_defineProperties(Constructor.prototype, protoProps); if (staticProps) Handle_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar Handle_Handle = /*#__PURE__*/function () {\n  function Handle(context) {\n    var _this = this;\n\n    Handle_classCallCheck(this, Handle);\n\n    this.context = context;\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        if (_this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n\n  Handle_createClass(Handle, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$handle = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(['<div class=\"note-handle\">', '<div class=\"note-control-selection\">', '<div class=\"note-control-selection-bg\"></div>', '<div class=\"note-control-holder note-control-nw\"></div>', '<div class=\"note-control-holder note-control-ne\"></div>', '<div class=\"note-control-holder note-control-sw\"></div>', '<div class=\"', this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing', ' note-control-se\"></div>', this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>', '</div>', '</div>'].join('')).prependTo(this.$editingArea);\n      this.$handle.on('mousedown', function (event) {\n        if (dom.isControlSizing(event.target)) {\n          event.preventDefault();\n          event.stopPropagation();\n\n          var $target = _this2.$handle.find('.note-control-selection').data('target');\n\n          var posStart = $target.offset();\n\n          var scrollTop = _this2.$document.scrollTop();\n\n          var onMouseMove = function onMouseMove(event) {\n            _this2.context.invoke('editor.resizeTo', {\n              x: event.clientX - posStart.left,\n              y: event.clientY - (posStart.top - scrollTop)\n            }, $target, !event.shiftKey);\n\n            _this2.update($target[0], event);\n          };\n\n          _this2.$document.on('mousemove', onMouseMove).one('mouseup', function (e) {\n            e.preventDefault();\n\n            _this2.$document.off('mousemove', onMouseMove);\n\n            _this2.context.invoke('editor.afterCommand');\n          });\n\n          if (!$target.data('ratio')) {\n            // original ratio.\n            $target.data('ratio', $target.height() / $target.width());\n          }\n        }\n      }); // Listen for scrolling on the handle overlay.\n\n      this.$handle.on('wheel', function (e) {\n        e.preventDefault();\n\n        _this2.update();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$handle.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n\n      var isImage = dom.isImg(target);\n      var $selection = this.$handle.find('.note-control-selection');\n      this.context.invoke('imagePopover.update', target, event);\n\n      if (isImage) {\n        var $image = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(target);\n        var position = $image.position();\n        var pos = {\n          left: position.left + parseInt($image.css('marginLeft'), 10),\n          top: position.top + parseInt($image.css('marginTop'), 10)\n        }; // exclude margin\n\n        var imageSize = {\n          w: $image.outerWidth(false),\n          h: $image.outerHeight(false)\n        };\n        $selection.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top,\n          width: imageSize.w,\n          height: imageSize.h\n        }).data('target', $image); // save current image element.\n\n        var origImageObj = new Image();\n        origImageObj.src = $image.attr('src');\n        var sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n        $selection.find('.note-control-selection-info').text(sizingText);\n        this.context.invoke('editor.saveTarget', target);\n      } else {\n        this.hide();\n      }\n\n      return isImage;\n    }\n    /**\n     * hide\n     *\n     * @param {jQuery} $handle\n     */\n\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.context.invoke('editor.clearTarget');\n      this.$handle.children().hide();\n    }\n  }]);\n\n  return Handle;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoLink.js\nfunction AutoLink_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoLink_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoLink_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoLink_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoLink_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar defaultScheme = 'http://';\nvar linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\nvar AutoLink_AutoLink = /*#__PURE__*/function () {\n  function AutoLink(context) {\n    var _this = this;\n\n    AutoLink_classCallCheck(this, AutoLink);\n\n    this.context = context;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      }\n    };\n  }\n\n  AutoLink_createClass(AutoLink, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWordRange) {\n        return;\n      }\n\n      var keyword = this.lastWordRange.toString();\n      var match = keyword.match(linkPattern);\n\n      if (match && (match[1] || match[2])) {\n        var link = match[1] ? keyword : defaultScheme + keyword;\n        var urlText = this.options.showDomainOnlyForAutolink ? keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:www\\.)?/i, '').split('/')[0] : keyword;\n        var node = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<a />').html(urlText).attr('href', link)[0];\n\n        if (this.context.options.linkTargetBlank) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).attr('target', '_blank');\n        }\n\n        this.lastWordRange.insertNode(node);\n        this.lastWordRange = null;\n        this.context.invoke('editor.focus');\n      }\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      if (lists.contains([core_key.code.ENTER, core_key.code.SPACE], e.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWordRange = wordRange;\n      }\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      if (lists.contains([core_key.code.ENTER, core_key.code.SPACE], e.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n\n  return AutoLink;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoSync.js\nfunction AutoSync_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoSync_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoSync_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoSync_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoSync_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n/**\n * textarea auto sync.\n */\n\nvar AutoSync_AutoSync = /*#__PURE__*/function () {\n  function AutoSync(context) {\n    var _this = this;\n\n    AutoSync_classCallCheck(this, AutoSync);\n\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': function summernoteChange() {\n        _this.$note.val(context.invoke('code'));\n      }\n    };\n  }\n\n  AutoSync_createClass(AutoSync, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return dom.isTextarea(this.$note[0]);\n    }\n  }]);\n\n  return AutoSync;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoReplace.js\nfunction AutoReplace_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoReplace_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoReplace_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoReplace_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoReplace_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar AutoReplace_AutoReplace = /*#__PURE__*/function () {\n  function AutoReplace(context) {\n    var _this = this;\n\n    AutoReplace_classCallCheck(this, AutoReplace);\n\n    this.context = context;\n    this.options = context.options.replace || {};\n    this.keys = [core_key.code.ENTER, core_key.code.SPACE, core_key.code.PERIOD, core_key.code.COMMA, core_key.code.SEMICOLON, core_key.code.SLASH];\n    this.previousKeydownCode = null;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      }\n    };\n  }\n\n  AutoReplace_createClass(AutoReplace, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.match;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWord) {\n        return;\n      }\n\n      var self = this;\n      var keyword = this.lastWord.toString();\n      this.options.match(keyword, function (match) {\n        if (match) {\n          var node = '';\n\n          if (typeof match === 'string') {\n            node = dom.createText(match);\n          } else if (match instanceof jQuery) {\n            node = match[0];\n          } else if (match instanceof Node) {\n            node = match;\n          }\n\n          if (!node) return;\n          self.lastWord.insertNode(node);\n          self.lastWord = null;\n          self.context.invoke('editor.focus');\n        }\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      // this forces it to remember the last whole word, even if multiple termination keys are pressed\n      // before the previous key is let go.\n      if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n        this.previousKeydownCode = e.keyCode;\n        return;\n      }\n\n      if (lists.contains(this.keys, e.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWord = wordRange;\n      }\n\n      this.previousKeydownCode = e.keyCode;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      if (lists.contains(this.keys, e.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n\n  return AutoReplace;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Placeholder.js\nfunction Placeholder_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Placeholder_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Placeholder_createClass(Constructor, protoProps, staticProps) { if (protoProps) Placeholder_defineProperties(Constructor.prototype, protoProps); if (staticProps) Placeholder_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Placeholder_Placeholder = /*#__PURE__*/function () {\n  function Placeholder(context) {\n    var _this = this;\n\n    Placeholder_classCallCheck(this, Placeholder);\n\n    this.context = context;\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n\n    this.events = {\n      'summernote.init summernote.change': function summernoteInitSummernoteChange() {\n        _this.update();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n\n  Placeholder_createClass(Placeholder, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.placeholder;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$placeholder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-placeholder\">');\n      this.$placeholder.on('click', function () {\n        _this2.context.invoke('focus');\n      }).html(this.options.placeholder).prependTo(this.$editingArea);\n      this.update();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$placeholder.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n      this.$placeholder.toggle(isShow);\n    }\n  }]);\n\n  return Placeholder;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Buttons.js\nfunction Buttons_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Buttons_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Buttons_createClass(Constructor, protoProps, staticProps) { if (protoProps) Buttons_defineProperties(Constructor.prototype, protoProps); if (staticProps) Buttons_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar Buttons_Buttons = /*#__PURE__*/function () {\n  function Buttons(context) {\n    Buttons_classCallCheck(this, Buttons);\n\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']);\n  }\n\n  Buttons_createClass(Buttons, [{\n    key: \"representShortcut\",\n    value: function representShortcut(editorMethod) {\n      var shortcut = this.invertedKeyMap[editorMethod];\n\n      if (!this.options.shortcuts || !shortcut) {\n        return '';\n      }\n\n      if (env.isMac) {\n        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n      }\n\n      shortcut = shortcut.replace('BACKSLASH', '\\\\').replace('SLASH', '/').replace('LEFTBRACKET', '[').replace('RIGHTBRACKET', ']');\n      return ' (' + shortcut + ')';\n    }\n  }, {\n    key: \"button\",\n    value: function button(o) {\n      if (!this.options.tooltip && o.tooltip) {\n        delete o.tooltip;\n      }\n\n      o.container = this.options.container;\n      return this.ui.button(o);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.addToolbarButtons();\n      this.addImagePopoverButtons();\n      this.addLinkPopoverButtons();\n      this.addTablePopoverButtons();\n      this.fontInstalledMap = {};\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      delete this.fontInstalledMap;\n    }\n  }, {\n    key: \"isFontInstalled\",\n    value: function isFontInstalled(name) {\n      if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n        this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name);\n      }\n\n      return this.fontInstalledMap[name];\n    }\n  }, {\n    key: \"isFontDeservedToAdd\",\n    value: function isFontDeservedToAdd(name) {\n      name = name.toLowerCase();\n      return name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1;\n    }\n  }, {\n    key: \"colorPalette\",\n    value: function colorPalette(className, tooltip, backColor, foreColor) {\n      var _this = this;\n\n      return this.ui.buttonGroup({\n        className: 'note-color ' + className,\n        children: [this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: function click(e) {\n            var $button = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget);\n\n            if (backColor && foreColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor')\n              });\n            } else if (backColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor')\n              });\n            } else if (foreColor) {\n              _this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor')\n              });\n            }\n          },\n          callback: function callback($button) {\n            var $recentColor = $button.find('.note-recent-color');\n\n            if (backColor) {\n              $recentColor.css('background-color', _this.options.colorButton.backColor);\n              $button.attr('data-backColor', _this.options.colorButton.backColor);\n            }\n\n            if (foreColor) {\n              $recentColor.css('color', _this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', _this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          }\n        }), this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), this.ui.dropdown({\n          items: (backColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">', this.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"backColorPicker\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette\">', '</div>', '<div class=\"note-holder-custom\" id=\"backColorPalette\" data-event=\"backColor\"></div>', '</div>'].join('') : '') + (foreColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">', this.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"foreColorPicker\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette\">', '</div>', // Fix missing Div, Commented to find easily if it's wrong\n          '<div class=\"note-holder-custom\" id=\"foreColorPalette\" data-event=\"foreColor\"></div>', '</div>'].join('') : ''),\n          callback: function callback($dropdown) {\n            $dropdown.find('.note-holder').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: _this.options.colors,\n                colorsName: _this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n\n            var customColors = [['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF']];\n            $dropdown.find('.note-holder-custom').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each(function (idx, item) {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item).change(function () {\n                var $chip = $dropdown.find('#' + external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this).data('event')).find('.note-color-btn').first();\n                var color = this.value.toUpperCase();\n                $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n                $chip.click();\n              });\n            });\n          },\n          click: function click(event) {\n            event.stopPropagation();\n            var $parent = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('.' + className).find('.note-dropdown-menu');\n            var $button = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target);\n            var eventName = $button.data('event');\n            var value = $button.attr('data-value');\n\n            if (eventName === 'openPalette') {\n              var $picker = $parent.find('#' + value);\n              var $palette = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]); // Shift palette chips\n\n              var $chip = $palette.find('.note-color-btn').last().detach(); // Set chip attributes\n\n              var color = $picker.val();\n              $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.click();\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                var key = eventName === 'backColor' ? 'background-color' : 'color';\n                var $color = $button.closest('.note-color').find('.note-recent-color');\n                var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n\n              _this.context.invoke('editor.' + eventName, value);\n            }\n          }\n        })]\n      }).render();\n    }\n  }, {\n    key: \"addToolbarButtons\",\n    value: function addToolbarButtons() {\n      var _this2 = this;\n\n      this.context.memo('button.style', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.magic), _this2.options),\n          tooltip: _this2.lang.style.style,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          className: 'dropdown-style',\n          items: _this2.options.styleTags,\n          title: _this2.lang.style.style,\n          template: function template(item) {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: Object.prototype.hasOwnProperty.call(_this2.lang.style, item) ? _this2.lang.style[item] : item\n              };\n            }\n\n            var tag = item.tag;\n            var title = item.title;\n            var style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            var className = item.className ? ' class=\"' + item.className + '\"' : '';\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: _this2.context.createInvokeHandler('editor.formatBlock')\n        })]).render();\n      });\n\n      var _loop = function _loop(styleIdx, styleLen) {\n        var item = _this2.options.styleTags[styleIdx];\n\n        _this2.context.memo('button.style.' + item, function () {\n          return _this2.button({\n            className: 'note-btn-style-' + item,\n            contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n            tooltip: _this2.lang.style[item],\n            click: _this2.context.createInvokeHandler('editor.formatBlock')\n          }).render();\n        });\n      };\n\n      for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n        _loop(styleIdx, styleLen);\n      }\n\n      this.context.memo('button.bold', function () {\n        return _this2.button({\n          className: 'note-btn-bold',\n          contents: _this2.ui.icon(_this2.options.icons.bold),\n          tooltip: _this2.lang.font.bold + _this2.representShortcut('bold'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.bold')\n        }).render();\n      });\n      this.context.memo('button.italic', function () {\n        return _this2.button({\n          className: 'note-btn-italic',\n          contents: _this2.ui.icon(_this2.options.icons.italic),\n          tooltip: _this2.lang.font.italic + _this2.representShortcut('italic'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.italic')\n        }).render();\n      });\n      this.context.memo('button.underline', function () {\n        return _this2.button({\n          className: 'note-btn-underline',\n          contents: _this2.ui.icon(_this2.options.icons.underline),\n          tooltip: _this2.lang.font.underline + _this2.representShortcut('underline'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.underline')\n        }).render();\n      });\n      this.context.memo('button.clear', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.eraser),\n          tooltip: _this2.lang.font.clear + _this2.representShortcut('removeFormat'),\n          click: _this2.context.createInvokeHandler('editor.removeFormat')\n        }).render();\n      });\n      this.context.memo('button.strikethrough', function () {\n        return _this2.button({\n          className: 'note-btn-strikethrough',\n          contents: _this2.ui.icon(_this2.options.icons.strikethrough),\n          tooltip: _this2.lang.font.strikethrough + _this2.representShortcut('strikethrough'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n        }).render();\n      });\n      this.context.memo('button.superscript', function () {\n        return _this2.button({\n          className: 'note-btn-superscript',\n          contents: _this2.ui.icon(_this2.options.icons.superscript),\n          tooltip: _this2.lang.font.superscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.superscript')\n        }).render();\n      });\n      this.context.memo('button.subscript', function () {\n        return _this2.button({\n          className: 'note-btn-subscript',\n          contents: _this2.ui.icon(_this2.options.icons.subscript),\n          tooltip: _this2.lang.font.subscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.subscript')\n        }).render();\n      });\n      this.context.memo('button.fontname', function () {\n        var styleInfo = _this2.context.invoke('editor.currentStyle');\n\n        if (_this2.options.addDefaultFonts) {\n          // Add 'default' fonts into the fontnames array if not exist\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(styleInfo['font-family'].split(','), function (idx, fontname) {\n            fontname = fontname.trim().replace(/['\"]+/g, '');\n\n            if (_this2.isFontDeservedToAdd(fontname)) {\n              if (_this2.options.fontNames.indexOf(fontname) === -1) {\n                _this2.options.fontNames.push(fontname);\n              }\n            }\n          });\n        }\n\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontname\"></span>', _this2.options),\n          tooltip: _this2.lang.font.name,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontNames.filter(_this2.isFontInstalled.bind(_this2)),\n          title: _this2.lang.font.name,\n          template: function template(item) {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontName')\n        })]).render();\n      });\n      this.context.memo('button.fontsize', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', _this2.options),\n          tooltip: _this2.lang.font.size,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizes,\n          title: _this2.lang.font.size,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n        })]).render();\n      });\n      this.context.memo('button.fontsizeunit', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', _this2.options),\n          tooltip: _this2.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizeUnits,\n          title: _this2.lang.font.sizeunit,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit')\n        })]).render();\n      });\n      this.context.memo('button.color', function () {\n        return _this2.colorPalette('note-color-all', _this2.lang.color.recent, true, true);\n      });\n      this.context.memo('button.forecolor', function () {\n        return _this2.colorPalette('note-color-fore', _this2.lang.color.foreground, false, true);\n      });\n      this.context.memo('button.backcolor', function () {\n        return _this2.colorPalette('note-color-back', _this2.lang.color.background, true, false);\n      });\n      this.context.memo('button.ul', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.unorderedlist),\n          tooltip: _this2.lang.lists.unordered + _this2.representShortcut('insertUnorderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertUnorderedList')\n        }).render();\n      });\n      this.context.memo('button.ol', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.orderedlist),\n          tooltip: _this2.lang.lists.ordered + _this2.representShortcut('insertOrderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertOrderedList')\n        }).render();\n      });\n      var justifyLeft = this.button({\n        contents: this.ui.icon(this.options.icons.alignLeft),\n        tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n        click: this.context.createInvokeHandler('editor.justifyLeft')\n      });\n      var justifyCenter = this.button({\n        contents: this.ui.icon(this.options.icons.alignCenter),\n        tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n        click: this.context.createInvokeHandler('editor.justifyCenter')\n      });\n      var justifyRight = this.button({\n        contents: this.ui.icon(this.options.icons.alignRight),\n        tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n        click: this.context.createInvokeHandler('editor.justifyRight')\n      });\n      var justifyFull = this.button({\n        contents: this.ui.icon(this.options.icons.alignJustify),\n        tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n        click: this.context.createInvokeHandler('editor.justifyFull')\n      });\n      var outdent = this.button({\n        contents: this.ui.icon(this.options.icons.outdent),\n        tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n        click: this.context.createInvokeHandler('editor.outdent')\n      });\n      var indent = this.button({\n        contents: this.ui.icon(this.options.icons.indent),\n        tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n        click: this.context.createInvokeHandler('editor.indent')\n      });\n      this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n      this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n      this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n      this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n      this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n      this.context.memo('button.indent', func.invoke(indent, 'render'));\n      this.context.memo('button.paragraph', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.alignLeft), _this2.options),\n          tooltip: _this2.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown([_this2.ui.buttonGroup({\n          className: 'note-align',\n          children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n        }), _this2.ui.buttonGroup({\n          className: 'note-list',\n          children: [outdent, indent]\n        })])]).render();\n      });\n      this.context.memo('button.height', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.textHeight), _this2.options),\n          tooltip: _this2.lang.font.height,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          items: _this2.options.lineHeights,\n          checkClassName: _this2.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: _this2.lang.font.height,\n          click: _this2.context.createInvokeHandler('editor.lineHeight')\n        })]).render();\n      });\n      this.context.memo('button.table', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.table), _this2.options),\n          tooltip: _this2.lang.table.table,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          title: _this2.lang.table.table,\n          className: 'note-table',\n          items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n        })], {\n          callback: function callback($node) {\n            var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n            $catcher.css({\n              width: _this2.options.insertTableMaxSize.col + 'em',\n              height: _this2.options.insertTableMaxSize.row + 'em'\n            }).mousedown(_this2.context.createInvokeHandler('editor.insertTable')).on('mousemove', _this2.tableMoveHandler.bind(_this2));\n          }\n        }).render();\n      });\n      this.context.memo('button.link', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.link),\n          tooltip: _this2.lang.link.link + _this2.representShortcut('linkDialog.show'),\n          click: _this2.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.picture', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.picture),\n          tooltip: _this2.lang.image.image,\n          click: _this2.context.createInvokeHandler('imageDialog.show')\n        }).render();\n      });\n      this.context.memo('button.video', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.video),\n          tooltip: _this2.lang.video.video,\n          click: _this2.context.createInvokeHandler('videoDialog.show')\n        }).render();\n      });\n      this.context.memo('button.hr', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.minus),\n          tooltip: _this2.lang.hr.insert + _this2.representShortcut('insertHorizontalRule'),\n          click: _this2.context.createInvokeHandler('editor.insertHorizontalRule')\n        }).render();\n      });\n      this.context.memo('button.fullscreen', function () {\n        return _this2.button({\n          className: 'btn-fullscreen note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.arrowsAlt),\n          tooltip: _this2.lang.options.fullscreen,\n          click: _this2.context.createInvokeHandler('fullscreen.toggle')\n        }).render();\n      });\n      this.context.memo('button.codeview', function () {\n        return _this2.button({\n          className: 'btn-codeview note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.code),\n          tooltip: _this2.lang.options.codeview,\n          click: _this2.context.createInvokeHandler('codeview.toggle')\n        }).render();\n      });\n      this.context.memo('button.redo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.redo),\n          tooltip: _this2.lang.history.redo + _this2.representShortcut('redo'),\n          click: _this2.context.createInvokeHandler('editor.redo')\n        }).render();\n      });\n      this.context.memo('button.undo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.undo),\n          tooltip: _this2.lang.history.undo + _this2.representShortcut('undo'),\n          click: _this2.context.createInvokeHandler('editor.undo')\n        }).render();\n      });\n      this.context.memo('button.help', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.question),\n          tooltip: _this2.lang.options.help,\n          click: _this2.context.createInvokeHandler('helpDialog.show')\n        }).render();\n      });\n    }\n    /**\n     * image: [\n     *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n     *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n     *   ['remove', ['removeMedia']],\n     * ],\n     */\n\n  }, {\n    key: \"addImagePopoverButtons\",\n    value: function addImagePopoverButtons() {\n      var _this3 = this;\n\n      // Image Size Buttons\n      this.context.memo('button.resizeFull', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">100%</span>',\n          tooltip: _this3.lang.image.resizeFull,\n          click: _this3.context.createInvokeHandler('editor.resize', '1')\n        }).render();\n      });\n      this.context.memo('button.resizeHalf', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">50%</span>',\n          tooltip: _this3.lang.image.resizeHalf,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.5')\n        }).render();\n      });\n      this.context.memo('button.resizeQuarter', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">25%</span>',\n          tooltip: _this3.lang.image.resizeQuarter,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.25')\n        }).render();\n      });\n      this.context.memo('button.resizeNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.resizeNone,\n          click: _this3.context.createInvokeHandler('editor.resize', '0')\n        }).render();\n      }); // Float Buttons\n\n      this.context.memo('button.floatLeft', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatLeft),\n          tooltip: _this3.lang.image.floatLeft,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'left')\n        }).render();\n      });\n      this.context.memo('button.floatRight', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatRight),\n          tooltip: _this3.lang.image.floatRight,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'right')\n        }).render();\n      });\n      this.context.memo('button.floatNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.floatNone,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'none')\n        }).render();\n      }); // Remove Buttons\n\n      this.context.memo('button.removeMedia', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.trash),\n          tooltip: _this3.lang.image.remove,\n          click: _this3.context.createInvokeHandler('editor.removeMedia')\n        }).render();\n      });\n    }\n  }, {\n    key: \"addLinkPopoverButtons\",\n    value: function addLinkPopoverButtons() {\n      var _this4 = this;\n\n      this.context.memo('button.linkDialogShow', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.link),\n          tooltip: _this4.lang.link.edit,\n          click: _this4.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.unlink', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.unlink),\n          tooltip: _this4.lang.link.unlink,\n          click: _this4.context.createInvokeHandler('editor.unlink')\n        }).render();\n      });\n    }\n    /**\n     * table : [\n     *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n     *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n     * ],\n     */\n\n  }, {\n    key: \"addTablePopoverButtons\",\n    value: function addTablePopoverButtons() {\n      var _this5 = this;\n\n      this.context.memo('button.addRowUp', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowAbove),\n          tooltip: _this5.lang.table.addRowAbove,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'top')\n        }).render();\n      });\n      this.context.memo('button.addRowDown', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowBelow),\n          tooltip: _this5.lang.table.addRowBelow,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'bottom')\n        }).render();\n      });\n      this.context.memo('button.addColLeft', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colBefore),\n          tooltip: _this5.lang.table.addColLeft,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'left')\n        }).render();\n      });\n      this.context.memo('button.addColRight', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colAfter),\n          tooltip: _this5.lang.table.addColRight,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'right')\n        }).render();\n      });\n      this.context.memo('button.deleteRow', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowRemove),\n          tooltip: _this5.lang.table.delRow,\n          click: _this5.context.createInvokeHandler('editor.deleteRow')\n        }).render();\n      });\n      this.context.memo('button.deleteCol', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colRemove),\n          tooltip: _this5.lang.table.delCol,\n          click: _this5.context.createInvokeHandler('editor.deleteCol')\n        }).render();\n      });\n      this.context.memo('button.deleteTable', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.trash),\n          tooltip: _this5.lang.table.delTable,\n          click: _this5.context.createInvokeHandler('editor.deleteTable')\n        }).render();\n      });\n    }\n  }, {\n    key: \"build\",\n    value: function build($container, groups) {\n      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n        var group = groups[groupIdx];\n        var groupName = Array.isArray(group) ? group[0] : group;\n        var buttons = Array.isArray(group) ? group.length === 1 ? [group[0]] : group[1] : [group];\n        var $group = this.ui.buttonGroup({\n          className: 'note-' + groupName\n        }).render();\n\n        for (var idx = 0, len = buttons.length; idx < len; idx++) {\n          var btn = this.context.memo('button.' + buttons[idx]);\n\n          if (btn) {\n            $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n          }\n        }\n\n        $group.appendTo($container);\n      }\n    }\n    /**\n     * @param {jQuery} [$container]\n     */\n\n  }, {\n    key: \"updateCurrentStyle\",\n    value: function updateCurrentStyle($container) {\n      var _this6 = this;\n\n      var $cont = $container || this.$toolbar;\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      this.updateBtnStates($cont, {\n        '.note-btn-bold': function noteBtnBold() {\n          return styleInfo['font-bold'] === 'bold';\n        },\n        '.note-btn-italic': function noteBtnItalic() {\n          return styleInfo['font-italic'] === 'italic';\n        },\n        '.note-btn-underline': function noteBtnUnderline() {\n          return styleInfo['font-underline'] === 'underline';\n        },\n        '.note-btn-subscript': function noteBtnSubscript() {\n          return styleInfo['font-subscript'] === 'subscript';\n        },\n        '.note-btn-superscript': function noteBtnSuperscript() {\n          return styleInfo['font-superscript'] === 'superscript';\n        },\n        '.note-btn-strikethrough': function noteBtnStrikethrough() {\n          return styleInfo['font-strikethrough'] === 'strikethrough';\n        }\n      });\n\n      if (styleInfo['font-family']) {\n        var fontNames = styleInfo['font-family'].split(',').map(function (name) {\n          return name.replace(/[\\'\\\"]/g, '').replace(/\\s+$/, '').replace(/^\\s+/, '');\n        });\n        var fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n        $cont.find('.dropdown-fontname a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item); // always compare string to avoid creating another func.\n\n          var isChecked = $item.data('value') + '' === fontName + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n      }\n\n      if (styleInfo['font-size']) {\n        var fontSize = styleInfo['font-size'];\n        $cont.find('.dropdown-fontsize a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item); // always compare with string to avoid creating another func.\n\n          var isChecked = $item.data('value') + '' === fontSize + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsize').text(fontSize);\n        var fontSizeUnit = styleInfo['font-size-unit'];\n        $cont.find('.dropdown-fontsizeunit a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n          var isChecked = $item.data('value') + '' === fontSizeUnit + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n      }\n\n      if (styleInfo['line-height']) {\n        var lineHeight = styleInfo['line-height'];\n        $cont.find('.dropdown-line-height li a').each(function (idx, item) {\n          // always compare with string to avoid creating another func.\n          var isChecked = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item).data('value') + '' === lineHeight + '';\n          _this6.className = isChecked ? 'checked' : '';\n        });\n      }\n    }\n  }, {\n    key: \"updateBtnStates\",\n    value: function updateBtnStates($container, infos) {\n      var _this7 = this;\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(infos, function (selector, pred) {\n        _this7.ui.toggleBtnActive($container.find(selector), pred());\n      });\n    }\n  }, {\n    key: \"tableMoveHandler\",\n    value: function tableMoveHandler(event) {\n      var PX_PER_EM = 18;\n      var $picker = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n\n      var $dimensionDisplay = $picker.next();\n      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n      var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n      var posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox\n\n      if (event.offsetX === undefined) {\n        var posCatcher = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target).offset();\n        posOffset = {\n          x: event.pageX - posCatcher.left,\n          y: event.pageY - posCatcher.top\n        };\n      } else {\n        posOffset = {\n          x: event.offsetX,\n          y: event.offsetY\n        };\n      }\n\n      var dim = {\n        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n        r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n      };\n      $highlighted.css({\n        width: dim.c + 'em',\n        height: dim.r + 'em'\n      });\n      $catcher.data('value', dim.c + 'x' + dim.r);\n\n      if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n        $unhighlighted.css({\n          width: dim.c + 1 + 'em'\n        });\n      }\n\n      if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n        $unhighlighted.css({\n          height: dim.r + 1 + 'em'\n        });\n      }\n\n      $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n    }\n  }]);\n\n  return Buttons;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Toolbar.js\nfunction Toolbar_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Toolbar_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Toolbar_createClass(Constructor, protoProps, staticProps) { if (protoProps) Toolbar_defineProperties(Constructor.prototype, protoProps); if (staticProps) Toolbar_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Toolbar_Toolbar = /*#__PURE__*/function () {\n  function Toolbar(context) {\n    Toolbar_classCallCheck(this, Toolbar);\n\n    this.context = context;\n    this.$window = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(window);\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n\n  Toolbar_createClass(Toolbar, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !this.options.airMode;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      this.options.toolbar = this.options.toolbar || [];\n\n      if (!this.options.toolbar.length) {\n        this.$toolbar.hide();\n      } else {\n        this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n      }\n\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n\n      this.changeContainer(false);\n      this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () {\n        _this.context.invoke('buttons.updateCurrentStyle');\n      });\n      this.context.invoke('buttons.updateCurrentStyle');\n\n      if (this.options.followingToolbar) {\n        this.$window.on('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$toolbar.children().remove();\n\n      if (this.options.followingToolbar) {\n        this.$window.off('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"followScroll\",\n    value: function followScroll() {\n      if (this.$editor.hasClass('fullscreen')) {\n        return false;\n      }\n\n      var editorHeight = this.$editor.outerHeight();\n      var editorWidth = this.$editor.width();\n      var toolbarHeight = this.$toolbar.height();\n      var statusbarHeight = this.$statusbar.height(); // check if the web app is currently using another static bar\n\n      var otherBarHeight = 0;\n\n      if (this.options.otherStaticBar) {\n        otherBarHeight = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.otherStaticBar).outerHeight();\n      }\n\n      var currentOffset = this.$document.scrollTop();\n      var editorOffsetTop = this.$editor.offset().top;\n      var editorOffsetBottom = editorOffsetTop + editorHeight;\n      var activateOffset = editorOffsetTop - otherBarHeight;\n      var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n\n      if (!this.isFollowing && currentOffset > activateOffset && currentOffset < deactivateOffsetBottom - toolbarHeight) {\n        this.isFollowing = true;\n        this.$editable.css({\n          marginTop: this.$toolbar.outerHeight()\n        });\n        this.$toolbar.css({\n          position: 'fixed',\n          top: otherBarHeight,\n          width: editorWidth,\n          zIndex: 1000\n        });\n      } else if (this.isFollowing && (currentOffset < activateOffset || currentOffset > deactivateOffsetBottom)) {\n        this.isFollowing = false;\n        this.$toolbar.css({\n          position: 'relative',\n          top: 0,\n          width: '100%',\n          zIndex: 'auto'\n        });\n        this.$editable.css({\n          marginTop: ''\n        });\n      }\n    }\n  }, {\n    key: \"changeContainer\",\n    value: function changeContainer(isFullscreen) {\n      if (isFullscreen) {\n        this.$toolbar.prependTo(this.$editor);\n      } else {\n        if (this.options.toolbarContainer) {\n          this.$toolbar.appendTo(this.options.toolbarContainer);\n        }\n      }\n\n      if (this.options.followingToolbar) {\n        this.followScroll();\n      }\n    }\n  }, {\n    key: \"updateFullscreen\",\n    value: function updateFullscreen(isFullscreen) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n      this.changeContainer(isFullscreen);\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n\n      if (isCodeview) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n    }\n  }, {\n    key: \"activate\",\n    value: function activate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n\n      this.ui.toggleBtn($btn, true);\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n\n      this.ui.toggleBtn($btn, false);\n    }\n  }]);\n\n  return Toolbar;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/LinkDialog.js\nfunction LinkDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction LinkDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LinkDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) LinkDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) LinkDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar LinkDialog_LinkDialog = /*#__PURE__*/function () {\n  function LinkDialog(context) {\n    LinkDialog_classCallCheck(this, LinkDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n\n  LinkDialog_createClass(LinkDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.textToDisplay, \"</label>\"), \"<input id=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-link-text form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>', '<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.url, \"</label>\"), \"<input id=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-link-url form-control note-form-control note-input\\\" type=\\\"text\\\" value=\\\"http://\\\"/>\"), '</div>', !this.options.disableLinkTarget ? external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div/>').append(this.ui.checkbox({\n        className: 'sn-checkbox-open-in-new-window',\n        text: this.lang.link.openInNewWindow,\n        checked: true\n      }).render()).html() : '', external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div/>').append(this.ui.checkbox({\n        className: 'sn-checkbox-use-protocol',\n        text: this.lang.link.useProtocol,\n        checked: true\n      }).render()).html()].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.link.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        className: 'link-dialog',\n        title: this.lang.link.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n    /**\n     * toggle update button\n     */\n\n  }, {\n    key: \"toggleLinkBtn\",\n    value: function toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n      this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n    }\n    /**\n     * Show link dialog and set event handlers on dialog controls.\n     *\n     * @param {Object} linkInfo\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showLinkDialog\",\n    value: function showLinkDialog(linkInfo) {\n      var _this = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $linkText = _this.$dialog.find('.note-link-text');\n\n        var $linkUrl = _this.$dialog.find('.note-link-url');\n\n        var $linkBtn = _this.$dialog.find('.note-link-btn');\n\n        var $openInNewWindow = _this.$dialog.find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n\n        var $useProtocol = _this.$dialog.find('.sn-checkbox-use-protocol input[type=checkbox]');\n\n        _this.ui.onDialogShown(_this.$dialog, function () {\n          _this.context.triggerEvent('dialog.shown'); // If no url was given and given text is valid URL then copy that into URL Field\n\n\n          if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n            linkInfo.url = linkInfo.text;\n          }\n\n          $linkText.on('input paste propertychange', function () {\n            // If linktext was modified by input events,\n            // cloning text from linkUrl will be stopped.\n            linkInfo.text = $linkText.val();\n\n            _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.text);\n          $linkUrl.on('input paste propertychange', function () {\n            // Display same text on `Text to display` as default\n            // when linktext has no text\n            if (!linkInfo.text) {\n              $linkText.val($linkUrl.val());\n            }\n\n            _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.url);\n\n          if (!env.isSupportTouch) {\n            $linkUrl.trigger('focus');\n          }\n\n          _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n\n          _this.bindEnterKey($linkUrl, $linkBtn);\n\n          _this.bindEnterKey($linkText, $linkBtn);\n\n          var isNewWindowChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this.context.options.linkTargetBlank;\n          $openInNewWindow.prop('checked', isNewWindowChecked);\n          var useProtocolChecked = linkInfo.url ? false : _this.context.options.useProtocol;\n          $useProtocol.prop('checked', useProtocolChecked);\n          $linkBtn.one('click', function (event) {\n            event.preventDefault();\n            deferred.resolve({\n              range: linkInfo.range,\n              url: $linkUrl.val(),\n              text: $linkText.val(),\n              isNewWindow: $openInNewWindow.is(':checked'),\n              checkProtocol: $useProtocol.is(':checked')\n            });\n\n            _this.ui.hideDialog(_this.$dialog);\n          });\n        });\n\n        _this.ui.onDialogHidden(_this.$dialog, function () {\n          // detach events\n          $linkText.off();\n          $linkUrl.off();\n          $linkBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this.ui.showDialog(_this.$dialog);\n      }).promise();\n    }\n    /**\n     * @param {Object} layoutInfo\n     */\n\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this2 = this;\n\n      var linkInfo = this.context.invoke('editor.getLinkInfo');\n      this.context.invoke('editor.saveRange');\n      this.showLinkDialog(linkInfo).then(function (linkInfo) {\n        _this2.context.invoke('editor.restoreRange');\n\n        _this2.context.invoke('editor.createLink', linkInfo);\n      }).fail(function () {\n        _this2.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n\n  return LinkDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/LinkPopover.js\nfunction LinkPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction LinkPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LinkPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) LinkPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) LinkPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar LinkPopover_LinkPopover = /*#__PURE__*/function () {\n  function LinkPopover(context) {\n    var _this = this;\n\n    LinkPopover_classCallCheck(this, LinkPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  LinkPopover_createClass(LinkPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.link);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-link-popover',\n        callback: function callback($node) {\n          var $content = $node.find('.popover-content,.note-popover-content');\n          $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n        }\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.link);\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!this.context.invoke('editor.hasFocus')) {\n        this.hide();\n        return;\n      }\n\n      var rng = this.context.invoke('editor.getLastRange');\n\n      if (rng.isCollapsed() && rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        var href = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('href');\n        this.$popover.find('a').attr('href', href).text(href);\n        var pos = dom.posFromPlaceholder(anchor);\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return LinkPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/ImageDialog.js\nfunction ImageDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction ImageDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ImageDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) ImageDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) ImageDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar ImageDialog_ImageDialog = /*#__PURE__*/function () {\n  function ImageDialog(context) {\n    ImageDialog_classCallCheck(this, ImageDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  ImageDialog_createClass(ImageDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var imageLimitation = '';\n\n      if (this.options.maximumImageFileSize) {\n        var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n        var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';\n        imageLimitation = \"<small>\".concat(this.lang.image.maximumFileSize + ' : ' + readableSize, \"</small>\");\n      }\n\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group note-group-select-from-files\">', '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>', '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ', ' type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>', imageLimitation, '</div>', '<div class=\"form-group note-group-image-url\">', '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>', '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>', '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.image.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.image.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n\n      this.context.invoke('editor.saveRange');\n      this.showImageDialog().then(function (data) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n\n        _this.context.invoke('editor.restoreRange');\n\n        if (typeof data === 'string') {\n          // image url\n          // If onImageLinkInsert set,\n          if (_this.options.callbacks.onImageLinkInsert) {\n            _this.context.triggerEvent('image.link.insert', data);\n          } else {\n            _this.context.invoke('editor.insertImage', data);\n          }\n        } else {\n          // array of files\n          _this.context.invoke('editor.insertImagesOrCallback', data);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showImageDialog\",\n    value: function showImageDialog() {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $imageInput = _this2.$dialog.find('.note-image-input');\n\n        var $imageUrl = _this2.$dialog.find('.note-image-url');\n\n        var $imageBtn = _this2.$dialog.find('.note-image-btn');\n\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown'); // Cloning imageInput to clear element.\n\n\n          $imageInput.replaceWith($imageInput.clone().on('change', function (event) {\n            deferred.resolve(event.target.files || event.target.value);\n          }).val(''));\n          $imageUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($imageBtn, $imageUrl.val());\n          }).val('');\n\n          if (!env.isSupportTouch) {\n            $imageUrl.trigger('focus');\n          }\n\n          $imageBtn.click(function (event) {\n            event.preventDefault();\n            deferred.resolve($imageUrl.val());\n          });\n\n          _this2.bindEnterKey($imageUrl, $imageBtn);\n        });\n\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $imageInput.off();\n          $imageUrl.off();\n          $imageBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n\n  return ImageDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/ImagePopover.js\nfunction ImagePopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction ImagePopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ImagePopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) ImagePopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) ImagePopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\n\nvar ImagePopover_ImagePopover = /*#__PURE__*/function () {\n  function ImagePopover(context) {\n    var _this = this;\n\n    ImagePopover_classCallCheck(this, ImagePopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n    this.events = {\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  ImagePopover_createClass(ImagePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.image);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-image-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.image);\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (dom.isImg(target)) {\n        var position = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(target).offset();\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        var pos = {};\n\n        if (this.options.popatmouse) {\n          pos.left = event.pageX - 20;\n          pos.top = event.pageY;\n        } else {\n          pos = position;\n        }\n\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return ImagePopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/TablePopover.js\nfunction TablePopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction TablePopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TablePopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) TablePopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) TablePopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar TablePopover_TablePopover = /*#__PURE__*/function () {\n  function TablePopover(context) {\n    var _this = this;\n\n    TablePopover_classCallCheck(this, TablePopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        _this.update(e.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': function summernoteKeyupSummernoteScrollSummernoteChange() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  TablePopover_createClass(TablePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.table);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-table-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.table); // [workaround] Disable Firefox's default table editor\n\n      if (env.isFF) {\n        document.execCommand('enableInlineTableEditing', false, false);\n      }\n\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n\n      var isCell = dom.isCell(target);\n\n      if (isCell) {\n        var pos = dom.posFromPlaceholder(target);\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n\n      return isCell;\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return TablePopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/VideoDialog.js\nfunction VideoDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction VideoDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction VideoDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) VideoDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) VideoDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar VideoDialog_VideoDialog = /*#__PURE__*/function () {\n  function VideoDialog(context) {\n    VideoDialog_classCallCheck(this, VideoDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  VideoDialog_createClass(VideoDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group row-fluid\">', \"<label for=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.video.url, \" <small class=\\\"text-muted\\\">\").concat(this.lang.video.providers, \"</small></label>\"), \"<input id=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-video-url form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.video.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.video.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"createVideoNode\",\n    value: function createVideoNode(url) {\n      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)\n      var ytRegExp = /\\/\\/(?:(?:www|m)\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))([\\w|-]{11})(?:(?:[\\?&]t=)(\\S+))?$/;\n      var ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n      var ytMatch = url.match(ytRegExp);\n      var igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/;\n      var igMatch = url.match(igRegExp);\n      var vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n      var vMatch = url.match(vRegExp);\n      var vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n      var vimMatch = url.match(vimRegExp);\n      var dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n      var dmMatch = url.match(dmRegExp);\n      var youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n      var youkuMatch = url.match(youkuRegExp);\n      var qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n      var qqMatch = url.match(qqRegExp);\n      var qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n      var qqMatch2 = url.match(qqRegExp2);\n      var mp4RegExp = /^.+.(mp4|m4v)$/;\n      var mp4Match = url.match(mp4RegExp);\n      var oggRegExp = /^.+.(ogg|ogv)$/;\n      var oggMatch = url.match(oggRegExp);\n      var webmRegExp = /^.+.(webm)$/;\n      var webmMatch = url.match(webmRegExp);\n      var fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n      var fbMatch = url.match(fbRegExp);\n      var $video;\n\n      if (ytMatch && ytMatch[1].length === 11) {\n        var youtubeId = ytMatch[1];\n        var start = 0;\n\n        if (typeof ytMatch[2] !== 'undefined') {\n          var ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n\n          if (ytMatchForStart) {\n            for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n              start += typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0;\n            }\n          }\n        }\n\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : '')).attr('width', '640').attr('height', '360');\n      } else if (igMatch && igMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/').attr('width', '612').attr('height', '710').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else if (vMatch && vMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', vMatch[0] + '/embed/simple').attr('width', '600').attr('height', '600').attr('class', 'vine-embed');\n      } else if (vimMatch && vimMatch[3].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('src', '//player.vimeo.com/video/' + vimMatch[3]).attr('width', '640').attr('height', '360');\n      } else if (dmMatch && dmMatch[2].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]).attr('width', '640').attr('height', '360');\n      } else if (youkuMatch && youkuMatch[1].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '498').attr('width', '510').attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n      } else if (qqMatch && qqMatch[1].length || qqMatch2 && qqMatch2[2].length) {\n        var vid = qqMatch && qqMatch[1].length ? qqMatch[1] : qqMatch2[2];\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '310').attr('width', '500').attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n      } else if (mp4Match || oggMatch || webmMatch) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<video controls>').attr('src', url).attr('width', '640').attr('height', '360');\n      } else if (fbMatch && fbMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560').attr('width', '560').attr('height', '301').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else {\n        // this is not a known video link. Now what, Cat? Now what?\n        return false;\n      }\n\n      $video.addClass('note-video-clip');\n      return $video[0];\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n\n      var text = this.context.invoke('editor.getSelectedText');\n      this.context.invoke('editor.saveRange');\n      this.showVideoDialog(text).then(function (url) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n\n        _this.context.invoke('editor.restoreRange'); // build node\n\n\n        var $node = _this.createVideoNode(url);\n\n        if ($node) {\n          // insert video node\n          _this.context.invoke('editor.insertNode', $node);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n    /**\n     * show video dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showVideoDialog\",\n    value: function showVideoDialog()\n    /* text */\n    {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $videoUrl = _this2.$dialog.find('.note-video-url');\n\n        var $videoBtn = _this2.$dialog.find('.note-video-btn');\n\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          $videoUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($videoBtn, $videoUrl.val());\n          });\n\n          if (!env.isSupportTouch) {\n            $videoUrl.trigger('focus');\n          }\n\n          $videoBtn.click(function (event) {\n            event.preventDefault();\n            deferred.resolve($videoUrl.val());\n          });\n\n          _this2.bindEnterKey($videoUrl, $videoBtn);\n        });\n\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $videoUrl.off();\n          $videoBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n\n  return VideoDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/HelpDialog.js\nfunction HelpDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction HelpDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HelpDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) HelpDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) HelpDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar HelpDialog_HelpDialog = /*#__PURE__*/function () {\n  function HelpDialog(context) {\n    HelpDialog_classCallCheck(this, HelpDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  HelpDialog_createClass(HelpDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<p class=\"text-center\">', '<a href=\"http://summernote.org/\" target=\"_blank\">Summernote 0.8.18</a> · ', '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\">Project</a> · ', '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\">Issues</a>', '</p>'].join('');\n      this.$dialog = this.ui.dialog({\n        title: this.lang.options.help,\n        fade: this.options.dialogsFade,\n        body: this.createShortcutList(),\n        footer: body,\n        callback: function callback($node) {\n          $node.find('.modal-body,.note-modal-body').css({\n            'max-height': 300,\n            'overflow': 'scroll'\n          });\n        }\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"createShortcutList\",\n    value: function createShortcutList() {\n      var _this = this;\n\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      return Object.keys(keyMap).map(function (key) {\n        var command = keyMap[key];\n        var $row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div><div class=\"help-list-item\"></div></div>');\n        $row.append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<label><kbd>' + key + '</kdb></label>').css({\n          'width': 180,\n          'margin-right': 10\n        })).append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<span/>').html(_this.context.memo('help.' + command) || command));\n        return $row.html();\n      }).join('');\n    }\n    /**\n     * show help dialog\n     *\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showHelpDialog\",\n    value: function showHelpDialog() {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          deferred.resolve();\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n\n      this.context.invoke('editor.saveRange');\n      this.showHelpDialog().then(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n\n  return HelpDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AirPopover.js\nfunction AirPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AirPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AirPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) AirPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) AirPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar AIRMODE_POPOVER_X_OFFSET = -5;\nvar AIRMODE_POPOVER_Y_OFFSET = 5;\n\nvar AirPopover_AirPopover = /*#__PURE__*/function () {\n  function AirPopover(context) {\n    var _this = this;\n\n    AirPopover_classCallCheck(this, AirPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n    this.events = {\n      'summernote.contextmenu': function summernoteContextmenu(e) {\n        if (_this.options.editing) {\n          e.preventDefault();\n          e.stopPropagation();\n          _this.onContextmenu = true;\n\n          _this.update(true);\n        }\n      },\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        _this.pageX = e.pageX;\n        _this.pageY = e.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteScroll(we, e) {\n        if (_this.options.editing && !_this.onContextmenu) {\n          _this.pageX = e.pageX;\n          _this.pageY = e.pageY;\n\n          _this.update();\n        }\n\n        _this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.focusout': function summernoteFocusout() {\n        if (!_this.$popover.is(':active,:focus')) {\n          _this.hide();\n        }\n      }\n    };\n  }\n\n  AirPopover_createClass(AirPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$popover = this.ui.popover({\n        className: 'note-air-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.air); // disable hiding this popover preemptively by 'summernote.blur' event.\n\n      this.$popover.on('mousedown', function () {\n        _this2.hidable = false;\n      }); // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n\n      this.$popover.on('mouseup', function () {\n        _this2.hidable = true;\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(forcelyOpen) {\n      var styleInfo = this.context.invoke('editor.currentStyle');\n\n      if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n        var rect = {\n          left: this.pageX,\n          top: this.pageY\n        };\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        rect.top -= containerOffset.top;\n        rect.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n          top: rect.top + AIRMODE_POPOVER_Y_OFFSET\n        });\n        this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n\n      if (isCodeview) {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (this.hidable) {\n        this.$popover.hide();\n      }\n    }\n  }]);\n\n  return AirPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/HintPopover.js\nfunction HintPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction HintPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HintPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) HintPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) HintPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar POPOVER_DIST = 5;\n\nvar HintPopover_HintPopover = /*#__PURE__*/function () {\n  function HintPopover(context) {\n    var _this = this;\n\n    HintPopover_classCallCheck(this, HintPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  HintPopover_createClass(HintPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.hints.length > 0;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.lastWordRange = null;\n      this.matchingWord = null;\n      this.$popover = this.ui.popover({\n        className: 'note-hint-popover',\n        hideArrow: true,\n        direction: ''\n      }).render().appendTo(this.options.container);\n      this.$popover.hide();\n      this.$content = this.$popover.find('.popover-content,.note-popover-content');\n      this.$content.on('click', '.note-hint-item', function (e) {\n        _this2.$content.find('.active').removeClass('active');\n\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget).addClass('active');\n\n        _this2.replace();\n      });\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"selectItem\",\n    value: function selectItem($item) {\n      this.$content.find('.active').removeClass('active');\n      $item.addClass('active');\n      this.$content[0].scrollTop = $item[0].offsetTop - this.$content.innerHeight() / 2;\n    }\n  }, {\n    key: \"moveDown\",\n    value: function moveDown() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $next = $current.next();\n\n      if ($next.length) {\n        this.selectItem($next);\n      } else {\n        var $nextGroup = $current.parent().next();\n\n        if (!$nextGroup.length) {\n          $nextGroup = this.$content.find('.note-hint-group').first();\n        }\n\n        this.selectItem($nextGroup.find('.note-hint-item').first());\n      }\n    }\n  }, {\n    key: \"moveUp\",\n    value: function moveUp() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $prev = $current.prev();\n\n      if ($prev.length) {\n        this.selectItem($prev);\n      } else {\n        var $prevGroup = $current.parent().prev();\n\n        if (!$prevGroup.length) {\n          $prevGroup = this.$content.find('.note-hint-group').last();\n        }\n\n        this.selectItem($prevGroup.find('.note-hint-item').last());\n      }\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      var $item = this.$content.find('.note-hint-item.active');\n\n      if ($item.length) {\n        var node = this.nodeFromItem($item); // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n\n        if (this.matchingWord !== null && this.matchingWord.length === 0) {\n          this.lastWordRange.so = this.lastWordRange.eo; // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n        } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n          var rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n\n          if (rangeCompute > 0) {\n            this.lastWordRange.so += rangeCompute;\n          }\n        }\n\n        this.lastWordRange.insertNode(node);\n\n        if (this.options.hintSelect === 'next') {\n          var blank = document.createTextNode('');\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).after(blank);\n          range.createFromNodeBefore(blank).select();\n        } else {\n          range.createFromNodeAfter(node).select();\n        }\n\n        this.lastWordRange = null;\n        this.hide();\n        this.context.invoke('editor.focus');\n      }\n    }\n  }, {\n    key: \"nodeFromItem\",\n    value: function nodeFromItem($item) {\n      var hint = this.hints[$item.data('index')];\n      var item = $item.data('item');\n      var node = hint.content ? hint.content(item) : item;\n\n      if (typeof node === 'string') {\n        node = dom.createText(node);\n      }\n\n      return node;\n    }\n  }, {\n    key: \"createItemTemplates\",\n    value: function createItemTemplates(hintIdx, items) {\n      var hint = this.hints[hintIdx];\n      return items.map(function (item\n      /*, idx */\n      ) {\n        var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-hint-item\"/>');\n        $item.append(hint.template ? hint.template(item) : item + '');\n        $item.data({\n          'index': hintIdx,\n          'item': item\n        });\n        return $item;\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      if (!this.$popover.is(':visible')) {\n        return;\n      }\n\n      if (e.keyCode === core_key.code.ENTER) {\n        e.preventDefault();\n        this.replace();\n      } else if (e.keyCode === core_key.code.UP) {\n        e.preventDefault();\n        this.moveUp();\n      } else if (e.keyCode === core_key.code.DOWN) {\n        e.preventDefault();\n        this.moveDown();\n      }\n    }\n  }, {\n    key: \"searchKeyword\",\n    value: function searchKeyword(index, keyword, callback) {\n      var hint = this.hints[index];\n\n      if (hint && hint.match.test(keyword) && hint.search) {\n        var matches = hint.match.exec(keyword);\n        this.matchingWord = matches[0];\n        hint.search(matches[1], callback);\n      } else {\n        callback();\n      }\n    }\n  }, {\n    key: \"createGroup\",\n    value: function createGroup(idx, keyword) {\n      var _this3 = this;\n\n      var $group = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n      this.searchKeyword(idx, keyword, function (items) {\n        items = items || [];\n\n        if (items.length) {\n          $group.html(_this3.createItemTemplates(idx, items));\n\n          _this3.show();\n        }\n      });\n      return $group;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      var _this4 = this;\n\n      if (!lists.contains([core_key.code.ENTER, core_key.code.UP, core_key.code.DOWN], e.keyCode)) {\n        var _range = this.context.invoke('editor.getLastRange');\n\n        var wordRange, keyword;\n\n        if (this.options.hintMode === 'words') {\n          wordRange = _range.getWordsRange(_range);\n          keyword = wordRange.toString();\n          this.hints.forEach(function (hint) {\n            if (hint.match.test(keyword)) {\n              wordRange = _range.getWordsMatchRange(hint.match);\n              return false;\n            }\n          });\n\n          if (!wordRange) {\n            this.hide();\n            return;\n          }\n\n          keyword = wordRange.toString();\n        } else {\n          wordRange = _range.getWordRange();\n          keyword = wordRange.toString();\n        }\n\n        if (this.hints.length && keyword) {\n          this.$content.empty();\n          var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n          var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n\n          if (bnd) {\n            bnd.top -= containerOffset.top;\n            bnd.left -= containerOffset.left;\n            this.$popover.hide();\n            this.lastWordRange = wordRange;\n            this.hints.forEach(function (hint, idx) {\n              if (hint.match.test(keyword)) {\n                _this4.createGroup(idx, keyword).appendTo(_this4.$content);\n              }\n            }); // select first .note-hint-item\n\n            this.$content.find('.note-hint-item:first').addClass('active'); // set position for popover after group is created\n\n            if (this.direction === 'top') {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n              });\n            } else {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top + bnd.height + POPOVER_DIST\n              });\n            }\n          }\n        } else {\n          this.hide();\n        }\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$popover.show();\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return HintPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/settings.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote, {\n  version: '0.8.18',\n  plugins: {},\n  dom: dom,\n  range: range,\n  lists: lists,\n  options: {\n    langInfo: external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor_Editor,\n      'clipboard': Clipboard_Clipboard,\n      'dropzone': Dropzone_Dropzone,\n      'codeview': Codeview_CodeView,\n      'statusbar': Statusbar_Statusbar,\n      'fullscreen': Fullscreen_Fullscreen,\n      'handle': Handle_Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover_HintPopover,\n      'autoLink': AutoLink_AutoLink,\n      'autoSync': AutoSync_AutoSync,\n      'autoReplace': AutoReplace_AutoReplace,\n      'placeholder': Placeholder_Placeholder,\n      'buttons': Buttons_Buttons,\n      'toolbar': Toolbar_Toolbar,\n      'linkDialog': LinkDialog_LinkDialog,\n      'linkPopover': LinkPopover_LinkPopover,\n      'imageDialog': ImageDialog_ImageDialog,\n      'imagePopover': ImagePopover_ImagePopover,\n      'tablePopover': TablePopover_TablePopover,\n      'videoDialog': VideoDialog_VideoDialog,\n      'helpDialog': HelpDialog_HelpDialog,\n      'airPopover': AirPopover_AirPopover\n    },\n    buttons: {},\n    lang: 'en-US',\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']]],\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']], ['float', ['floatLeft', 'floatRight', 'floatNone']], ['remove', ['removeMedia']]],\n      link: [['link', ['linkDialogShow', 'unlink']]],\n      table: [['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]],\n      air: [['color', ['color']], ['font', ['bold', 'underline', 'clear']], ['para', ['ul', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], ['view', ['fullscreen', 'codeview']]]\n    },\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false,\n    // TBD\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n    useProtocol: true,\n    defaultProtocol: 'http://',\n    focus: false,\n    tabDisabled: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n    fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana'],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n    fontSizeUnits: ['px', 'pt'],\n    // pallete colors(n x n)\n    colors: [['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']],\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']],\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00'\n    },\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n    tableClassName: 'table table-bordered',\n    insertTableMaxSize: {\n      col: 10,\n      row: 10\n    },\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n    maximumImageFileSize: null,\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null\n    },\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true\n    },\n    codeviewFilter: false,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: ['www.youtube.com', 'www.youtube-nocookie.com', 'www.facebook.com', 'vine.co', 'instagram.com', 'player.vimeo.com', 'www.dailymotion.com', 'player.youku.com', 'v.qq.com'],\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show'\n      },\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show'\n      }\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video'\n    }\n  }\n});\n\n/***/ }),\n\n/***/ 51:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs2\":\"jquery\",\"commonjs\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_ = __webpack_require__(0);\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_);\n\n// EXTERNAL MODULE: ./src/js/base/renderer.js\nvar renderer = __webpack_require__(1);\n\n// CONCATENATED MODULE: ./src/js/lite/ui/TooltipUI.js\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar TooltipUI_TooltipUI = /*#__PURE__*/function () {\n  function TooltipUI($node, options) {\n    _classCallCheck(this, TooltipUI);\n\n    this.$node = $node;\n    this.options = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, {\n      title: '',\n      target: options.container,\n      trigger: 'hover focus',\n      placement: 'bottom'\n    }, options); // create tooltip node\n\n    this.$tooltip = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(['<div class=\"note-tooltip\">', '<div class=\"note-tooltip-arrow\"></div>', '<div class=\"note-tooltip-content\"></div>', '</div>'].join('')); // define event\n\n    if (this.options.trigger !== 'manual') {\n      var showCallback = this.show.bind(this);\n      var hideCallback = this.hide.bind(this);\n      var toggleCallback = this.toggle.bind(this);\n      this.options.trigger.split(' ').forEach(function (eventName) {\n        if (eventName === 'hover') {\n          $node.off('mouseenter mouseleave');\n          $node.on('mouseenter', showCallback).on('mouseleave', hideCallback);\n        } else if (eventName === 'click') {\n          $node.on('click', toggleCallback);\n        } else if (eventName === 'focus') {\n          $node.on('focus', showCallback).on('blur', hideCallback);\n        }\n      });\n    }\n  }\n\n  _createClass(TooltipUI, [{\n    key: \"show\",\n    value: function show() {\n      var $node = this.$node;\n      var offset = $node.offset();\n      var targetOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.target).offset();\n      offset.top -= targetOffset.top;\n      offset.left -= targetOffset.left;\n      var $tooltip = this.$tooltip;\n      var title = this.options.title || $node.attr('title') || $node.data('title');\n      var placement = this.options.placement || $node.data('placement');\n      $tooltip.addClass(placement);\n      $tooltip.find('.note-tooltip-content').text(title);\n      $tooltip.appendTo(this.options.target);\n      var nodeWidth = $node.outerWidth();\n      var nodeHeight = $node.outerHeight();\n      var tooltipWidth = $tooltip.outerWidth();\n      var tooltipHeight = $tooltip.outerHeight();\n\n      if (placement === 'bottom') {\n        $tooltip.css({\n          top: offset.top + nodeHeight,\n          left: offset.left + (nodeWidth / 2 - tooltipWidth / 2)\n        });\n      } else if (placement === 'top') {\n        $tooltip.css({\n          top: offset.top - tooltipHeight,\n          left: offset.left + (nodeWidth / 2 - tooltipWidth / 2)\n        });\n      } else if (placement === 'left') {\n        $tooltip.css({\n          top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n          left: offset.left - tooltipWidth\n        });\n      } else if (placement === 'right') {\n        $tooltip.css({\n          top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n          left: offset.left + nodeWidth\n        });\n      }\n\n      $tooltip.addClass('in');\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this = this;\n\n      this.$tooltip.removeClass('in');\n      setTimeout(function () {\n        _this.$tooltip.remove();\n      }, 200);\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.$tooltip.hasClass('in')) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n  }]);\n\n  return TooltipUI;\n}();\n\n/* harmony default export */ var ui_TooltipUI = (TooltipUI_TooltipUI);\n// CONCATENATED MODULE: ./src/js/lite/ui/DropdownUI.js\nfunction DropdownUI_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction DropdownUI_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction DropdownUI_createClass(Constructor, protoProps, staticProps) { if (protoProps) DropdownUI_defineProperties(Constructor.prototype, protoProps); if (staticProps) DropdownUI_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar DropdownUI_DropdownUI = /*#__PURE__*/function () {\n  function DropdownUI($node, options) {\n    DropdownUI_classCallCheck(this, DropdownUI);\n\n    this.$button = $node;\n    this.options = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, {\n      target: options.container\n    }, options);\n    this.setEvent();\n  }\n\n  DropdownUI_createClass(DropdownUI, [{\n    key: \"setEvent\",\n    value: function setEvent() {\n      var _this = this;\n\n      this.$button.on('click', function (e) {\n        _this.toggle();\n\n        e.stopImmediatePropagation();\n      });\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var $parent = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('.note-btn-group.open');\n      $parent.find('.note-btn.active').removeClass('active');\n      $parent.removeClass('open');\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$button.addClass('active');\n      this.$button.parent().addClass('open');\n      var $dropdown = this.$button.next();\n      var offset = $dropdown.offset();\n      var width = $dropdown.outerWidth();\n      var windowWidth = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(window).width();\n      var targetMarginRight = parseFloat(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.target).css('margin-right'));\n\n      if (offset.left + width > windowWidth - targetMarginRight) {\n        $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width));\n      } else {\n        $dropdown.css('margin-left', '');\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$button.removeClass('active');\n      this.$button.parent().removeClass('open');\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      var isOpened = this.$button.parent().hasClass('open');\n      this.clear();\n\n      if (isOpened) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n  }]);\n\n  return DropdownUI;\n}();\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document).on('click', function (e) {\n  if (!external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.target).closest('.note-btn-group').length) {\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('.note-btn-group.open').removeClass('open');\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('.note-btn-group .note-btn.active').removeClass('active');\n  }\n});\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document).on('click.note-dropdown-menu', function (e) {\n  external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.target).closest('.note-dropdown-menu').parent().removeClass('open');\n  external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.target).closest('.note-dropdown-menu').parent().find('.note-btn.active').removeClass('active');\n});\n/* harmony default export */ var ui_DropdownUI = (DropdownUI_DropdownUI);\n// CONCATENATED MODULE: ./src/js/lite/ui/ModalUI.js\nfunction ModalUI_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction ModalUI_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ModalUI_createClass(Constructor, protoProps, staticProps) { if (protoProps) ModalUI_defineProperties(Constructor.prototype, protoProps); if (staticProps) ModalUI_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar ModalUI_ModalUI = /*#__PURE__*/function () {\n  function ModalUI($node\n  /*, options */\n  ) {\n    ModalUI_classCallCheck(this, ModalUI);\n\n    this.$modal = $node;\n    this.$backdrop = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-modal-backdrop\"/>');\n  }\n\n  ModalUI_createClass(ModalUI, [{\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n\n      this.$backdrop.appendTo(document.body).show();\n      this.$modal.addClass('open').show();\n      this.$modal.trigger('note.modal.show');\n      this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this));\n      this.$modal.on('keydown', function (event) {\n        if (event.which === 27) {\n          event.preventDefault();\n\n          _this.hide();\n        }\n      });\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$modal.removeClass('open').hide();\n      this.$backdrop.hide();\n      this.$modal.trigger('note.modal.hide');\n      this.$modal.off('keydown');\n    }\n  }]);\n\n  return ModalUI;\n}();\n\n/* harmony default export */ var ui_ModalUI = (ModalUI_ModalUI);\n// CONCATENATED MODULE: ./src/js/lite/ui.js\n\n\n\n\n\nvar editor = renderer[\"a\" /* default */].create('<div class=\"note-editor note-frame\"/>');\nvar toolbar = renderer[\"a\" /* default */].create('<div class=\"note-toolbar\" role=\"toolbar\"/>');\nvar editingArea = renderer[\"a\" /* default */].create('<div class=\"note-editing-area\"/>');\nvar codable = renderer[\"a\" /* default */].create('<textarea class=\"note-codable\" aria-multiline=\"true\"/>');\nvar editable = renderer[\"a\" /* default */].create('<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nvar statusbar = renderer[\"a\" /* default */].create(['<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>', '<div class=\"note-statusbar\" role=\"status\">', '<div class=\"note-resizebar\" aria-label=\"resize\">', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '</div>', '</div>'].join(''));\nvar airEditor = renderer[\"a\" /* default */].create('<div class=\"note-editor note-airframe\"/>');\nvar airEditable = renderer[\"a\" /* default */].create(['<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>', '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>'].join(''));\nvar buttonGroup = renderer[\"a\" /* default */].create('<div class=\"note-btn-group\">');\nvar ui_button = renderer[\"a\" /* default */].create('<button type=\"button\" class=\"note-btn\" tabindex=\"-1\">', function ($node, options) {\n  // set button type\n  if (options && options.tooltip) {\n    $node.attr({\n      'aria-label': options.tooltip\n    });\n    $node.data('_lite_tooltip', new ui_TooltipUI($node, {\n      title: options.tooltip,\n      container: options.container\n    })).on('click', function (e) {\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget).data('_lite_tooltip').hide();\n    });\n  }\n\n  if (options.contents) {\n    $node.html(options.contents);\n  }\n\n  if (options && options.data && options.data.toggle === 'dropdown') {\n    $node.data('_lite_dropdown', new ui_DropdownUI($node, {\n      container: options.container\n    }));\n  }\n\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dropdown = renderer[\"a\" /* default */].create('<div class=\"note-dropdown-menu\" role=\"list\">', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var $temp = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + value + '\"></a>');\n    $temp.html(content).data('item', item);\n    return $temp;\n  }) : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  $node.on('click', '> .note-dropdown-item', function (e) {\n    var $a = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this);\n    var item = $a.data('item');\n    var value = $a.data('value');\n\n    if (item.click) {\n      item.click($a);\n    } else if (options.itemClick) {\n      options.itemClick(e, item, value);\n    }\n  });\n\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dropdownCheck = renderer[\"a\" /* default */].create('<div class=\"note-dropdown-menu note-check\" role=\"list\">', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var $temp = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\"></a>');\n    $temp.html([icon(options.checkClassName), ' ', content]).data('item', item);\n    return $temp;\n  }) : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n  $node.on('click', '> .note-dropdown-item', function (e) {\n    var $a = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this);\n    var item = $a.data('item');\n    var value = $a.data('value');\n\n    if (item.click) {\n      item.click($a);\n    } else if (options.itemClick) {\n      options.itemClick(e, item, value);\n    }\n  });\n\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\n\nvar dropdownButtonContents = function dropdownButtonContents(contents, options) {\n  return contents + ' ' + icon(options.icons.caret, 'span');\n};\n\nvar dropdownButton = function dropdownButton(opt, callback) {\n  return buttonGroup([ui_button({\n    className: 'dropdown-toggle',\n    contents: opt.title + ' ' + icon('note-icon-caret'),\n    tooltip: opt.tooltip,\n    data: {\n      toggle: 'dropdown'\n    }\n  }), dropdown({\n    className: opt.className,\n    items: opt.items,\n    template: opt.template,\n    itemClick: opt.itemClick\n  })], {\n    callback: callback\n  }).render();\n};\n\nvar dropdownCheckButton = function dropdownCheckButton(opt, callback) {\n  return buttonGroup([ui_button({\n    className: 'dropdown-toggle',\n    contents: opt.title + ' ' + icon('note-icon-caret'),\n    tooltip: opt.tooltip,\n    data: {\n      toggle: 'dropdown'\n    }\n  }), dropdownCheck({\n    className: opt.className,\n    checkClassName: opt.checkClassName,\n    items: opt.items,\n    template: opt.template,\n    itemClick: opt.itemClick\n  })], {\n    callback: callback\n  }).render();\n};\n\nvar paragraphDropdownButton = function paragraphDropdownButton(opt) {\n  return buttonGroup([ui_button({\n    className: 'dropdown-toggle',\n    contents: opt.title + ' ' + icon('note-icon-caret'),\n    tooltip: opt.tooltip,\n    data: {\n      toggle: 'dropdown'\n    }\n  }), dropdown([buttonGroup({\n    className: 'note-align',\n    children: opt.items[0]\n  }), buttonGroup({\n    className: 'note-list',\n    children: opt.items[1]\n  })])]).render();\n};\n\nvar ui_tableMoveHandler = function tableMoveHandler(event, col, row) {\n  var PX_PER_EM = 18;\n  var $picker = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n\n  var $dimensionDisplay = $picker.next();\n  var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n  var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n  var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n  var posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox\n\n  if (event.offsetX === undefined) {\n    var posCatcher = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target).offset();\n    posOffset = {\n      x: event.pageX - posCatcher.left,\n      y: event.pageY - posCatcher.top\n    };\n  } else {\n    posOffset = {\n      x: event.offsetX,\n      y: event.offsetY\n    };\n  }\n\n  var dim = {\n    c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n    r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n  };\n  $highlighted.css({\n    width: dim.c + 'em',\n    height: dim.r + 'em'\n  });\n  $catcher.data('value', dim.c + 'x' + dim.r);\n\n  if (dim.c > 3 && dim.c < col) {\n    $unhighlighted.css({\n      width: dim.c + 1 + 'em'\n    });\n  }\n\n  if (dim.r > 3 && dim.r < row) {\n    $unhighlighted.css({\n      height: dim.r + 1 + 'em'\n    });\n  }\n\n  $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n};\n\nvar tableDropdownButton = function tableDropdownButton(opt) {\n  return buttonGroup([ui_button({\n    className: 'dropdown-toggle',\n    contents: opt.title + ' ' + icon('note-icon-caret'),\n    tooltip: opt.tooltip,\n    data: {\n      toggle: 'dropdown'\n    }\n  }), dropdown({\n    className: 'note-table',\n    items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n  })], {\n    callback: function callback($node) {\n      var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n      $catcher.css({\n        width: opt.col + 'em',\n        height: opt.row + 'em'\n      }).mousedown(opt.itemClick).mousemove(function (e) {\n        ui_tableMoveHandler(e, opt.col, opt.row);\n      });\n    }\n  }).render();\n};\n\nvar palette = renderer[\"a\" /* default */].create('<div class=\"note-color-palette\"/>', function ($node, options) {\n  var contents = [];\n\n  for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n    var eventName = options.eventName;\n    var colors = options.colors[row];\n    var colorsName = options.colorsName[row];\n    var buttons = [];\n\n    for (var col = 0, colSize = colors.length; col < colSize; col++) {\n      var color = colors[col];\n      var colorName = colorsName[col];\n      buttons.push(['<button type=\"button\" class=\"note-btn note-color-btn\"', 'style=\"background-color:', color, '\" ', 'data-event=\"', eventName, '\" ', 'data-value=\"', color, '\" ', 'data-title=\"', colorName, '\" ', 'aria-label=\"', colorName, '\" ', 'data-toggle=\"button\" tabindex=\"-1\"></button>'].join(''));\n    }\n\n    contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n  }\n\n  $node.html(contents.join(''));\n  $node.find('.note-color-btn').each(function () {\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this).data('_lite_tooltip', new ui_TooltipUI(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this), {\n      container: options.container\n    }));\n  });\n});\n\nvar ui_colorDropdownButton = function colorDropdownButton(opt, type) {\n  return buttonGroup({\n    className: 'note-color',\n    children: [ui_button({\n      className: 'note-current-color-button',\n      contents: opt.title,\n      tooltip: opt.lang.color.recent,\n      click: opt.currentClick,\n      callback: function callback($button) {\n        var $recentColor = $button.find('.note-recent-color');\n\n        if (type !== 'foreColor') {\n          $recentColor.css('background-color', '#FFFF00');\n          $button.attr('data-backColor', '#FFFF00');\n        }\n      }\n    }), ui_button({\n      className: 'dropdown-toggle',\n      contents: icon('note-icon-caret'),\n      tooltip: opt.lang.color.more,\n      data: {\n        toggle: 'dropdown'\n      }\n    }), dropdown({\n      items: ['<div>', '<div class=\"note-btn-group btn-background-color\">', '<div class=\"note-palette-title\">' + opt.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"backColor\" data-value=\"transparent\">', opt.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"></div>', '<div class=\"btn-sm\">', '<input type=\"color\" id=\"html5bcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">', '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"backColor\" data-value=\"cpbackColor\">', opt.lang.color.cpSelect, '</button>', '</div>', '</div>', '<div class=\"note-btn-group btn-foreground-color\">', '<div class=\"note-palette-title\">' + opt.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"removeFormat\" data-value=\"foreColor\">', opt.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"></div>', '<div class=\"btn-sm\">', '<input type=\"color\" id=\"html5fcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">', '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"foreColor\" data-value=\"cpforeColor\">', opt.lang.color.cpSelect, '</button>', '</div>', '</div>', '</div>'].join(''),\n      callback: function callback($dropdown) {\n        $dropdown.find('.note-holder').each(function () {\n          var $holder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this);\n          $holder.append(palette({\n            colors: opt.colors,\n            eventName: $holder.data('event')\n          }).render());\n        });\n\n        if (type === 'fore') {\n          $dropdown.find('.btn-background-color').hide();\n          $dropdown.css({\n            'min-width': '210px'\n          });\n        } else if (type === 'back') {\n          $dropdown.find('.btn-foreground-color').hide();\n          $dropdown.css({\n            'min-width': '210px'\n          });\n        }\n      },\n      click: function click(event) {\n        var $button = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target);\n        var eventName = $button.data('event');\n        var value = $button.data('value');\n        var foreinput = document.getElementById('html5fcp').value;\n        var backinput = document.getElementById('html5bcp').value;\n\n        if (value === 'cp') {\n          event.stopPropagation();\n        } else if (value === 'cpbackColor') {\n          value = backinput;\n        } else if (value === 'cpforeColor') {\n          value = foreinput;\n        }\n\n        if (eventName && value) {\n          var key = eventName === 'backColor' ? 'background-color' : 'color';\n          var $color = $button.closest('.note-color').find('.note-recent-color');\n          var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n          $color.css(key, value);\n          $currentButton.attr('data-' + eventName, value);\n\n          if (type === 'fore') {\n            opt.itemClick('foreColor', value);\n          } else if (type === 'back') {\n            opt.itemClick('backColor', value);\n          } else {\n            opt.itemClick(eventName, value);\n          }\n        }\n      }\n    })]\n  }).render();\n};\n\nvar dialog = renderer[\"a\" /* default */].create('<div class=\"note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"/>', function ($node, options) {\n  if (options.fade) {\n    $node.addClass('fade');\n  }\n\n  $node.attr({\n    'aria-label': options.title\n  });\n  $node.html(['<div class=\"note-modal-content\">', options.title ? '<div class=\"note-modal-header\"><button type=\"button\" class=\"close\" aria-label=\"Close\" aria-hidden=\"true\"><i class=\"note-icon-close\"></i></button><h4 class=\"note-modal-title\">' + options.title + '</h4></div>' : '', '<div class=\"note-modal-body\">' + options.body + '</div>', options.footer ? '<div class=\"note-modal-footer\">' + options.footer + '</div>' : '', '</div>'].join(''));\n  $node.data('modal', new ui_ModalUI($node, options));\n});\n\nvar videoDialog = function videoDialog(opt) {\n  var body = '<div class=\"note-form-group\">' + '<label for=\"note-dialog-video-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.video.url + ' <small class=\"text-muted\">' + opt.lang.video.providers + '</small></label>' + '<input id=\"note-dialog-video-url-' + opt.id + '\" class=\"note-video-url note-input\" type=\"text\"/>' + '</div>';\n  var footer = ['<button type=\"button\" href=\"#\" class=\"note-btn note-btn-primary note-video-btn disabled\" disabled>', opt.lang.video.insert, '</button>'].join('');\n  return dialog({\n    title: opt.lang.video.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer\n  }).render();\n};\n\nvar imageDialog = function imageDialog(opt) {\n  var body = '<div class=\"note-form-group note-group-select-from-files\">' + '<label for=\"note-dialog-image-file-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.image.selectFromFiles + '</label>' + '<input id=\"note-dialog-image-file-' + opt.id + '\" class=\"note-note-image-input note-input\" type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>' + opt.imageLimitation + '</div>' + '<div class=\"note-form-group\">' + '<label for=\"note-dialog-image-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.image.url + '</label>' + '<input id=\"note-dialog-image-url-' + opt.id + '\" class=\"note-image-url note-input\" type=\"text\"/>' + '</div>';\n  var footer = ['<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-btn-large note-image-btn disabled\" disabled>', opt.lang.image.insert, '</button>'].join('');\n  return dialog({\n    title: opt.lang.image.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer\n  }).render();\n};\n\nvar linkDialog = function linkDialog(opt) {\n  var body = '<div class=\"note-form-group\">' + '<label for=\"note-dialog-link-txt-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.link.textToDisplay + '</label>' + '<input id=\"note-dialog-link-txt-' + opt.id + '\" class=\"note-link-text note-input\" type=\"text\"/>' + '</div>' + '<div class=\"note-form-group\">' + '<label for=\"note-dialog-link-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.link.url + '</label>' + '<input id=\"note-dialog-link-url-' + opt.id + '\" class=\"note-link-url note-input\" type=\"text\" value=\"http://\"/>' + '</div>' + (!opt.disableLinkTarget ? '<div class=\"checkbox\"><label for=\"note-dialog-link-nw-' + opt.id + '\"><input id=\"note-dialog-link-nw-' + opt.id + '\" type=\"checkbox\" checked> ' + opt.lang.link.openInNewWindow + '</label></div>' : '') + '<div class=\"checkbox\"><label for=\"note-dialog-link-up-' + opt.id + '\"><input id=\"note-dialog-link-up-' + opt.id + '\" type=\"checkbox\" checked> ' + opt.lang.link.useProtocol + '</label></div>';\n  var footer = ['<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-link-btn disabled\" disabled>', opt.lang.link.insert, '</button>'].join('');\n  return dialog({\n    className: 'link-dialog',\n    title: opt.lang.link.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer\n  }).render();\n};\n\nvar popover = renderer[\"a\" /* default */].create(['<div class=\"note-popover bottom\">', '<div class=\"note-popover-arrow\"></div>', '<div class=\"popover-content note-children-container\"></div>', '</div>'].join(''), function ($node, options) {\n  var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n  $node.addClass(direction).hide();\n\n  if (options.hideArrow) {\n    $node.find('.note-popover-arrow').hide();\n  }\n});\nvar ui_checkbox = renderer[\"a\" /* default */].create('<div class=\"checkbox\"></div>', function ($node, options) {\n  $node.html(['<label' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>', '<input role=\"checkbox\" type=\"checkbox\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''), options.checked ? ' checked' : '', ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>', options.text ? options.text : '', '</label>'].join(''));\n});\n\nvar icon = function icon(iconClassName, tagName) {\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"/>';\n};\n\nvar ui = function ui(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    button: ui_button,\n    dropdown: dropdown,\n    dropdownCheck: dropdownCheck,\n    dropdownButton: dropdownButton,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheckButton: dropdownCheckButton,\n    paragraphDropdownButton: paragraphDropdownButton,\n    tableDropdownButton: tableDropdownButton,\n    colorDropdownButton: ui_colorDropdownButton,\n    palette: palette,\n    dialog: dialog,\n    videoDialog: videoDialog,\n    imageDialog: imageDialog,\n    linkDialog: linkDialog,\n    popover: popover,\n    checkbox: ui_checkbox,\n    icon: icon,\n    options: editorOptions,\n    toggleBtn: function toggleBtn($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n    toggleBtnActive: function toggleBtnActive($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n    check: function check($dom, value) {\n      $dom.find('.checked').removeClass('checked');\n      $dom.find('[data-value=\"' + value + '\"]').addClass('checked');\n    },\n    onDialogShown: function onDialogShown($dialog, handler) {\n      $dialog.one('note.modal.show', handler);\n    },\n    onDialogHidden: function onDialogHidden($dialog, handler) {\n      $dialog.one('note.modal.hide', handler);\n    },\n    showDialog: function showDialog($dialog) {\n      $dialog.data('modal').show();\n    },\n    hideDialog: function hideDialog($dialog) {\n      $dialog.data('modal').hide();\n    },\n\n    /**\n     * get popover content area\n     *\n     * @param $popover\n     * @returns {*}\n     */\n    getPopoverContent: function getPopoverContent($popover) {\n      return $popover.find('.note-popover-content');\n    },\n\n    /**\n     * get dialog's body area\n     *\n     * @param $dialog\n     * @returns {*}\n     */\n    getDialogBody: function getDialogBody($dialog) {\n      return $dialog.find('.note-modal-body');\n    },\n    createLayout: function createLayout($note) {\n      var $editor = (editorOptions.airMode ? airEditor([editingArea([codable(), airEditable()])]) : editorOptions.toolbarPosition === 'bottom' ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()]) : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])).render();\n      $editor.insertAfter($note);\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar')\n      };\n    },\n    removeLayout: function removeLayout($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.off('summernote'); // remove summernote custom event\n\n      $note.show();\n    }\n  };\n};\n\n/* harmony default export */ var lite_ui = (ui);\n// EXTERNAL MODULE: ./src/js/base/settings.js + 37 modules\nvar settings = __webpack_require__(3);\n\n// EXTERNAL MODULE: ./src/styles/summernote-lite.scss\nvar summernote_lite = __webpack_require__(6);\n\n// CONCATENATED MODULE: ./src/js/lite/settings.js\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote, {\n  ui_template: lite_ui,\n  \"interface\": 'lite'\n});\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, exports, __webpack_require__) {\n\n// extracted by mini-css-extract-plugin\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=summernote-lite.js.map"
  },
  {
    "path": "public/vendor/summernote/summernote-lite.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/summernote/summernote.css",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2020-05-20T18:09Z\n * \n */\n@font-face{font-family:\"summernote\";font-style:normal;font-weight:400;font-display:auto;src:url(font/summernote.eot);src:url(font/summernote.eot?#iefix) format(\"embedded-opentype\"),url(font/summernote.woff2) format(\"woff2\"),url(font/summernote.woff) format(\"woff\"),url(font/summernote.ttf) format(\"truetype\")}[class^=note-icon]:before,[class*=\" note-icon\"]:before{display:inline-block;font-family:summernote;font-style:normal;font-size:inherit;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;speak:none}.note-icon-fw{text-align:center;width:1.25em}.note-icon-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.note-icon-pull-left{float:left}.note-icon-pull-right{float:right}.note-icon.note-icon-pull-left{margin-right:.3em}.note-icon.note-icon-pull-right{margin-left:.3em}.note-icon-align::before{content:\"\"}.note-icon-align-center::before{content:\"\"}.note-icon-align-indent::before{content:\"\"}.note-icon-align-justify::before{content:\"\"}.note-icon-align-left::before{content:\"\"}.note-icon-align-outdent::before{content:\"\"}.note-icon-align-right::before{content:\"\"}.note-icon-arrow-circle-down::before{content:\"\"}.note-icon-arrow-circle-left::before{content:\"\"}.note-icon-arrow-circle-right::before{content:\"\"}.note-icon-arrow-circle-up::before{content:\"\"}.note-icon-arrows-alt::before{content:\"\"}.note-icon-arrows-h::before{content:\"\"}.note-icon-arrows-v::before{content:\"\"}.note-icon-bold::before{content:\"\"}.note-icon-caret::before{content:\"\"}.note-icon-chain-broken::before{content:\"\"}.note-icon-circle::before{content:\"\"}.note-icon-close::before{content:\"\"}.note-icon-code::before{content:\"\"}.note-icon-col-after::before{content:\"\"}.note-icon-col-before::before{content:\"\"}.note-icon-col-remove::before{content:\"\"}.note-icon-eraser::before{content:\"\"}.note-icon-float-left::before{content:\"\"}.note-icon-float-none::before{content:\"\"}.note-icon-float-right::before{content:\"\"}.note-icon-font::before{content:\"\"}.note-icon-frame::before{content:\"\"}.note-icon-italic::before{content:\"\"}.note-icon-link::before{content:\"\"}.note-icon-magic::before{content:\"\"}.note-icon-menu-check::before{content:\"\"}.note-icon-minus::before{content:\"\"}.note-icon-orderedlist::before{content:\"\"}.note-icon-pencil::before{content:\"\"}.note-icon-picture::before{content:\"\"}.note-icon-question::before{content:\"\"}.note-icon-redo::before{content:\"\"}.note-icon-rollback::before{content:\"\"}.note-icon-row-above::before{content:\"\"}.note-icon-row-below::before{content:\"\"}.note-icon-row-remove::before{content:\"\"}.note-icon-special-character::before{content:\"\"}.note-icon-square::before{content:\"\"}.note-icon-strikethrough::before{content:\"\"}.note-icon-subscript::before{content:\"\"}.note-icon-summernote::before{content:\"\"}.note-icon-superscript::before{content:\"\"}.note-icon-table::before{content:\"\"}.note-icon-text-height::before{content:\"\"}.note-icon-trash::before{content:\"\"}.note-icon-underline::before{content:\"\"}.note-icon-undo::before{content:\"\"}.note-icon-unorderedlist::before{content:\"\"}.note-icon-video::before{content:\"\"}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;display:none;z-index:100;color:#87cefa;background-color:#fff;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;vertical-align:middle;text-align:center;font-size:28px;font-weight:700}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:none}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area .note-editable img.note-float-left{margin-right:10px}.note-editor .note-editing-area .note-editable img.note-float-right{margin-left:10px}.note-editor.note-frame,.note-editor.note-airframe{border:1px solid #00000032}.note-editor.note-frame.codeview .note-editing-area .note-editable,.note-editor.note-airframe.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable,.note-editor.note-airframe.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area,.note-editor.note-airframe .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable,.note-editor.note-airframe .note-editing-area .note-editable{padding:10px;overflow:auto;word-wrap:break-word}.note-editor.note-frame .note-editing-area .note-editable[contenteditable=false],.note-editor.note-airframe .note-editing-area .note-editable[contenteditable=false]{background-color:#8080801d}.note-editor.note-frame .note-editing-area .note-codable,.note-editor.note-airframe .note-editing-area .note-codable{display:none;width:100%;padding:10px;border:none;box-shadow:none;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;resize:none;outline:none;-ms-box-sizing:border-box;box-sizing:border-box;border-radius:0;margin-bottom:0}.note-editor.note-frame.fullscreen,.note-editor.note-airframe.fullscreen{position:fixed;top:0;left:0;width:100% !important;z-index:1050}.note-editor.note-frame.fullscreen .note-resizebar,.note-editor.note-airframe.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output,.note-editor.note-airframe .note-status-output{display:block;width:100%;font-size:14px;line-height:1.42857143;height:20px;margin-bottom:0;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty,.note-editor.note-airframe .note-status-output:empty{height:0;border-top:0 solid transparent}.note-editor.note-frame .note-status-output .pull-right,.note-editor.note-airframe .note-status-output .pull-right{float:right !important}.note-editor.note-frame .note-status-output .text-muted,.note-editor.note-airframe .note-status-output .text-muted{color:#777}.note-editor.note-frame .note-status-output .text-primary,.note-editor.note-airframe .note-status-output .text-primary{color:#286090}.note-editor.note-frame .note-status-output .text-success,.note-editor.note-airframe .note-status-output .text-success{color:#3c763d}.note-editor.note-frame .note-status-output .text-info,.note-editor.note-airframe .note-status-output .text-info{color:#31708f}.note-editor.note-frame .note-status-output .text-warning,.note-editor.note-airframe .note-status-output .text-warning{color:#8a6d3b}.note-editor.note-frame .note-status-output .text-danger,.note-editor.note-airframe .note-status-output .text-danger{color:#a94442}.note-editor.note-frame .note-status-output .alert,.note-editor.note-airframe .note-status-output .alert{margin:-7px 0 0 0;padding:7px 10px 2px 10px;border-radius:0;color:#000;background-color:#f5f5f5}.note-editor.note-frame .note-status-output .alert .note-icon,.note-editor.note-airframe .note-status-output .alert .note-icon{margin-right:5px}.note-editor.note-frame .note-status-output .alert-success,.note-editor.note-airframe .note-status-output .alert-success{color:#3c763d !important;background-color:#dff0d8 !important}.note-editor.note-frame .note-status-output .alert-info,.note-editor.note-airframe .note-status-output .alert-info{color:#31708f !important;background-color:#d9edf7 !important}.note-editor.note-frame .note-status-output .alert-warning,.note-editor.note-airframe .note-status-output .alert-warning{color:#8a6d3b !important;background-color:#fcf8e3 !important}.note-editor.note-frame .note-status-output .alert-danger,.note-editor.note-airframe .note-status-output .alert-danger{color:#a94442 !important;background-color:#f2dede !important}.note-editor.note-frame .note-statusbar,.note-editor.note-airframe .note-statusbar{background-color:#8080801d;border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top:1px solid #00000032}.note-editor.note-frame .note-statusbar .note-resizebar,.note-editor.note-airframe .note-statusbar .note-resizebar{padding-top:1px;height:9px;width:100%;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,.note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #00000032}.note-editor.note-frame .note-statusbar.locked .note-resizebar,.note-editor.note-airframe .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar,.note-editor.note-airframe .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder,.note-editor.note-airframe .note-placeholder{padding:10px}.note-editor.note-airframe{border:0}.note-editor.note-airframe .note-editing-area .note-editable{padding:0}.note-popover.popover{display:none;max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px !important}.note-toolbar{position:relative}.note-popover .popover-content,.note-editor .note-toolbar{margin:0;padding:0 0 5px 5px}.note-popover .popover-content>.note-btn-group,.note-editor .note-toolbar>.note-btn-group{margin-top:5px;margin-left:0;margin-right:5px}.note-popover .popover-content .note-btn-group .note-table,.note-editor .note-toolbar .note-btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute !important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative !important;z-index:1;width:5em;height:5em;background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat}.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute !important;z-index:2;width:1em;height:1em;background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.note-editor .note-toolbar .note-style .dropdown-style blockquote,.note-editor .note-toolbar .note-style .dropdown-style pre{margin:0;padding:5px 10px}.note-popover .popover-content .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.note-editor .note-toolbar .note-style .dropdown-style h1,.note-editor .note-toolbar .note-style .dropdown-style h2,.note-editor .note-toolbar .note-style .dropdown-style h3,.note-editor .note-toolbar .note-style .dropdown-style h4,.note-editor .note-toolbar .note-style .dropdown-style h5,.note-editor .note-toolbar .note-style .dropdown-style h6,.note-editor .note-toolbar .note-style .dropdown-style p{margin:0;padding:0}.note-popover .popover-content .note-color-all .note-dropdown-menu,.note-editor .note-toolbar .note-color-all .note-dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-toggle,.note-editor .note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette{display:inline-block;margin:0;width:160px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette:first-child,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title{font-size:12px;margin:2px 7px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select{font-size:11px;margin:3px;padding:0 3px;cursor:pointer;width:100%;border-radius:5px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover{background:#eee}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-row,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select-btn,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select-btn{display:none}.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn,.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn{border:1px solid #eee}.note-popover .popover-content .note-para .note-dropdown-menu,.note-editor .note-toolbar .note-para .note-dropdown-menu{min-width:228px;padding:5px}.note-popover .popover-content .note-para .note-dropdown-menu>div+div,.note-editor .note-toolbar .note-para .note-dropdown-menu>div+div{margin-left:5px}.note-popover .popover-content .note-dropdown-menu,.note-editor .note-toolbar .note-dropdown-menu{min-width:160px}.note-popover .popover-content .note-dropdown-menu.right,.note-editor .note-toolbar .note-dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .note-dropdown-menu.right::before,.note-editor .note-toolbar .note-dropdown-menu.right::before{right:9px;left:auto !important}.note-popover .popover-content .note-dropdown-menu.right::after,.note-editor .note-toolbar .note-dropdown-menu.right::after{right:10px;left:auto !important}.note-popover .popover-content .note-dropdown-menu.note-check a i,.note-editor .note-toolbar .note-dropdown-menu.note-check a i{color:#00bfff;visibility:hidden}.note-popover .popover-content .note-dropdown-menu.note-check a.checked i,.note-editor .note-toolbar .note-dropdown-menu.note-check a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.note-editor .note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.note-editor .note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.note-editor .note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:0;border-radius:0}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.note-editor .note-toolbar .note-color-palette div .note-color-btn:hover{transform:scale(1.2);transition:all .2s}.note-modal .modal-dialog{outline:0;border-radius:5px;box-shadow:0 3px 9px rgba(0,0,0,.5)}.note-modal .form-group{margin-left:0;margin-right:0}.note-modal .note-modal-form{margin:0}.note-modal .note-image-dialog .note-dropzone{min-height:100px;font-size:30px;line-height:4;color:#d3d3d3;text-align:center;border:4px dashed #d3d3d3;margin-bottom:10px}@-moz-document url-prefix(){.note-modal .note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid #000}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle,.note-handle .note-control-selection .note-control-sizing,.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-sizing{background-color:#000}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:none;border-bottom:none}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:none;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:none;border-right:none}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:none;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;color:#fff;background-color:#000;font-size:12px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{padding:3px;max-height:150px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block !important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;white-space:nowrap;text-decoration:none;background-color:#428bca;outline:0;cursor:pointer}\n"
  },
  {
    "path": "public/vendor/summernote/summernote.js",
    "content": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license.\n * \n * Date: 2022-05-11T15:14Z\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 52);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__0__;\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer(markup, children, options, callback) {\n    _classCallCheck(this, Renderer);\n\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n\n  _createClass(Renderer, [{\n    key: \"render\",\n    value: function render($parent) {\n      var $node = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.markup);\n\n      if (this.options && this.options.contents) {\n        $node.html(this.options.contents);\n      }\n\n      if (this.options && this.options.className) {\n        $node.addClass(this.options.className);\n      }\n\n      if (this.options && this.options.data) {\n        jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(this.options.data, function (k, v) {\n          $node.attr('data-' + k, v);\n        });\n      }\n\n      if (this.options && this.options.click) {\n        $node.on('click', this.options.click);\n      }\n\n      if (this.children) {\n        var $container = $node.find('.note-children-container');\n        this.children.forEach(function (child) {\n          child.render($container.length ? $container : $node);\n        });\n      }\n\n      if (this.callback) {\n        this.callback($node, this.options);\n      }\n\n      if (this.options && this.options.callback) {\n        this.options.callback($node);\n      }\n\n      if ($parent) {\n        $parent.append($node);\n      }\n\n      return $node;\n    }\n  }]);\n\n  return Renderer;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  create: function create(markup, callback) {\n    return function () {\n      var options = _typeof(arguments[1]) === 'object' ? arguments[1] : arguments[0];\n      var children = Array.isArray(arguments[0]) ? arguments[0] : [];\n\n      if (options && options.children) {\n        children = options.children;\n      }\n\n      return new Renderer(markup, children, options, callback);\n    };\n  }\n});\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n\n/* WEBPACK VAR INJECTION */}.call(this, {}))\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs2\":\"jquery\",\"commonjs\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_ = __webpack_require__(0);\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_);\n\n// CONCATENATED MODULE: ./src/js/base/summernote-en-US.js\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote || {\n  lang: {}\n};\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit'\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original'\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window',\n      useProtocol: 'Use default protocol'\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table'\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule'\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6'\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list'\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View'\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full'\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select'\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys'\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog'\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo'\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters'\n    },\n    output: {\n      noSelection: 'No Selection Made!'\n    }\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/env.js\n\nvar isSupportAmd = typeof define === 'function' && __webpack_require__(2); // eslint-disable-line\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\n\nvar genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\n\nfunction validFontName(fontName) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.inArray(fontName.toLowerCase(), genericFontFamilies) === -1 ? \"'\".concat(fontName, \"'\") : fontName;\n}\n\nfunction env_isFontInstalled(fontName) {\n  var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n  var testText = 'mmmmmmmmmmwwwww';\n  var testSize = '200px';\n  var canvas = document.createElement('canvas');\n  var context = canvas.getContext('2d');\n  context.font = testSize + \" '\" + testFontName + \"'\";\n  var originalWidth = context.measureText(testText).width;\n  context.font = testSize + ' ' + validFontName(fontName) + ', \"' + testFontName + '\"';\n  var width = context.measureText(testText).width;\n  return originalWidth !== width;\n}\n\nvar userAgent = navigator.userAgent;\nvar isMSIE = /MSIE|Trident/i.test(userAgent);\nvar browserVersion;\n\nif (isMSIE) {\n  var matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\n\nvar isEdge = /Edge\\/\\d+/.test(userAgent);\nvar isSupportTouch = 'ontouchstart' in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; // [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\n\nvar inputEventName = isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\n\n/* harmony default export */ var env = ({\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE: isMSIE,\n  isEdge: isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && !/chrome/i.test(userAgent),\n  browserVersion: browserVersion,\n  jqueryVersion: parseFloat(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.fn.jquery),\n  isSupportAmd: isSupportAmd,\n  isSupportTouch: isSupportTouch,\n  isFontInstalled: env_isFontInstalled,\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName: inputEventName,\n  genericFontFamilies: genericFontFamilies,\n  validFontName: validFontName\n});\n// CONCATENATED MODULE: ./src/js/base/core/func.js\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\n\nfunction eq(itemA) {\n  return function (itemB) {\n    return itemA === itemB;\n  };\n}\n\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\n\nfunction peq2(propName) {\n  return function (itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\n\nfunction ok() {\n  return true;\n}\n\nfunction fail() {\n  return false;\n}\n\nfunction not(f) {\n  return function () {\n    return !f.apply(f, arguments);\n  };\n}\n\nfunction and(fA, fB) {\n  return function (item) {\n    return fA(item) && fB(item);\n  };\n}\n\nfunction func_self(a) {\n  return a;\n}\n\nfunction func_invoke(obj, method) {\n  return function () {\n    return obj[method].apply(obj, arguments);\n  };\n}\n\nvar idCounter = 0;\n/**\n * reset globally-unique id\n *\n */\n\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\n\n\nfunction uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\n\n\nfunction rect2bnd(rect) {\n  var $document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n}\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\n\n\nfunction invertObject(obj) {\n  var inverted = {};\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n\n  return inverted;\n}\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\n\n\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function (name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\n\n\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n\n    var later = function later() {\n      timeout = null;\n\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\n\n\nfunction isValidUrl(url) {\n  var expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n\n/* harmony default export */ var func = ({\n  eq: eq,\n  eq2: eq2,\n  peq2: peq2,\n  ok: ok,\n  fail: fail,\n  self: func_self,\n  not: not,\n  and: and,\n  invoke: func_invoke,\n  resetUniqueId: resetUniqueId,\n  uniqueId: uniqueId,\n  rect2bnd: rect2bnd,\n  invertObject: invertObject,\n  namespaceToCamel: namespaceToCamel,\n  debounce: debounce,\n  isValidUrl: isValidUrl\n});\n// CONCATENATED MODULE: ./src/js/base/core/lists.js\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\n\nfunction lists_head(array) {\n  return array[0];\n}\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\n\n\nfunction lists_last(array) {\n  return array[array.length - 1];\n}\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\n\n\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\n\n\nfunction tail(array) {\n  return array.slice(1);\n}\n/**\n * returns item of array\n */\n\n\nfunction find(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    var item = array[idx];\n\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\n\n\nfunction lists_all(array, pred) {\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n/**\n * returns true if the value is present in the list.\n */\n\n\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n\n  return false;\n}\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\n\n\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function (memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\n\n\nfunction from(collection) {\n  var result = [];\n  var length = collection.length;\n  var idx = -1;\n\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n\n  return result;\n}\n/**\n * returns whether list is empty or not\n */\n\n\nfunction lists_isEmpty(array) {\n  return !array || !array.length;\n}\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\n\n\nfunction clusterBy(array, fn) {\n  if (!array.length) {\n    return [];\n  }\n\n  var aTail = tail(array);\n  return aTail.reduce(function (memo, v) {\n    var aLast = lists_last(memo);\n\n    if (fn(lists_last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n\n    return memo;\n  }, [[lists_head(array)]]);\n}\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\n\n\nfunction compact(array) {\n  var aResult = [];\n\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) {\n      aResult.push(array[idx]);\n    }\n  }\n\n  return aResult;\n}\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\n\n\nfunction unique(array) {\n  var results = [];\n\n  for (var idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n\n  return results;\n}\n/**\n * returns next item.\n * @param {Array} array\n */\n\n\nfunction lists_next(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n\n  return null;\n}\n/**\n * returns prev item.\n * @param {Array} array\n */\n\n\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    var idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n\n  return null;\n}\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\n\n\n/* harmony default export */ var lists = ({\n  head: lists_head,\n  last: lists_last,\n  initial: initial,\n  tail: tail,\n  prev: prev,\n  next: lists_next,\n  find: find,\n  contains: contains,\n  all: lists_all,\n  sum: sum,\n  from: from,\n  isEmpty: lists_isEmpty,\n  clusterBy: clusterBy,\n  compact: compact,\n  unique: unique\n});\n// CONCATENATED MODULE: ./src/js/base/core/dom.js\n\n\n\n\nvar NBSP_CHAR = String.fromCharCode(160);\nvar ZERO_WIDTH_NBSP_CHAR = \"\\uFEFF\";\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\nfunction isEditable(node) {\n  return node && external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).hasClass('note-editable');\n}\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction isControlSizing(node) {\n  return node && external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).hasClass('note-control-sizing');\n}\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\n\n\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function (node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\n\n\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\n\n\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\n\n\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\n\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  } // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n\n\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nvar isPre = makePredByNodeName('PRE');\nvar isLi = makePredByNodeName('LI');\n\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\n\nvar isTable = makePredByNodeName('TABLE');\nvar isData = makePredByNodeName('DATA');\n\nfunction dom_isInline(node) {\n  return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node);\n}\n\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\n\nvar isHr = makePredByNodeName('HR');\n\nfunction dom_isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\n\nvar isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\nfunction isBodyContainer(node) {\n  return dom_isCell(node) || isBlockquote(node) || isEditable(node);\n}\n\nvar isAnchor = makePredByNodeName('A');\n\nfunction isParaInline(node) {\n  return dom_isInline(node) && !!dom_ancestor(node, isPara);\n}\n\nfunction isBodyInline(node) {\n  return dom_isInline(node) && !dom_ancestor(node, isPara);\n}\n\nvar isBody = makePredByNodeName('BODY');\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\n\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;\n}\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\n\n\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n  var siblings = [];\n\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n\n  siblings.push(node);\n\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n\n  return siblings;\n}\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\n\n\nvar blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\n\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n\n  if (node) {\n    return node.childNodes.length;\n  }\n\n  return 0;\n}\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while (node = node.firstElementChild);\n\n  return dom_isEmpty(node);\n}\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n\nfunction dom_isEmpty(node) {\n  var len = nodeLength(node);\n\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n\n  return false;\n}\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\n\n\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\n\n\nfunction dom_ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) {\n      return node;\n    }\n\n    if (isEditable(node)) {\n      break;\n    }\n\n    node = node.parentNode;\n  }\n\n  return null;\n}\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\n\n\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n\n  while (node) {\n    if (nodeLength(node) !== 1) {\n      break;\n    }\n\n    if (pred(node)) {\n      return node;\n    }\n\n    if (isEditable(node)) {\n      break;\n    }\n\n    node = node.parentNode;\n  }\n\n  return null;\n}\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\n\n\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n  var ancestors = [];\n  dom_ancestor(node, function (el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n\n    return pred(el);\n  });\n  return ancestors;\n}\n/**\n * find farthest ancestor predicate hit\n */\n\n\nfunction lastAncestor(node, pred) {\n  var ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\n\n\nfunction dom_commonAncestor(nodeA, nodeB) {\n  var ancestors = listAncestor(nodeA);\n\n  for (var n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n\n  return null; // difference document area\n}\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\n\n\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n\n  return nodes;\n}\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\n\n\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n  var nodes = [];\n\n  while (node) {\n    if (pred(node)) {\n      break;\n    }\n\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n\n  return nodes;\n}\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\n\n\nfunction listDescendant(node, pred) {\n  var descendants = [];\n  pred = pred || func.ok; // start DFS(depth first search) with node\n\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n\n    for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n\n  return descendants;\n}\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\n\n\nfunction wrap(node, wrapperName) {\n  var parent = node.parentNode;\n  var wrapper = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<' + wrapperName + '>')[0];\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n  return wrapper;\n}\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\n\n\nfunction insertAfter(node, preceding) {\n  var next = preceding.nextSibling;\n  var parent = preceding.parentNode;\n\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n\n  return node;\n}\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\n\n\nfunction appendChildNodes(node, aChild) {\n  external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(aChild, function (idx, child) {\n    node.appendChild(child);\n  });\n  return node;\n}\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction dom_isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (dom_position(node) !== 0) {\n      return false;\n    }\n\n    node = node.parentNode;\n  }\n\n  return true;\n}\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n\n  while (node && node !== ancestor) {\n    if (dom_position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n\n    node = node.parentNode;\n  }\n\n  return true;\n}\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && dom_isLeftEdgeOf(point.node, ancestor);\n}\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\n\n\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\n\n\nfunction dom_position(node) {\n  var offset = 0;\n\n  while (node = node.previousSibling) {\n    offset += 1;\n  }\n\n  return offset;\n}\n\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction dom_prevPoint(point, isSkipInnerOffset) {\n  var node;\n  var offset;\n\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    node = point.node.parentNode;\n    offset = dom_position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction dom_nextPoint(point, isSkipInnerOffset) {\n  var node, offset;\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    var nextTextNode = getNextTextNode(point.node);\n\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = dom_position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/**\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\n\n\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  var node, offset; // if node is empty string node, return current node's sibling.\n\n  if (dom_isEmpty(point.node)) {\n    node = point.node.nextSibling;\n    offset = 0;\n    return {\n      node: node,\n      offset: offset\n    };\n  }\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    node = point.node.parentNode;\n    offset = dom_position(point.node) + 1; // if next node is editable ,  return current node's sibling node.\n\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n\n    if (dom_isEmpty(node)) {\n      return null;\n    }\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n\n    if (dom_isEmpty(node)) {\n      return null;\n    }\n  }\n\n  return {\n    node: node,\n    offset: offset\n  };\n}\n/*\n* returns the next Text node index or 0 if not found.\n*/\n\n\nfunction getNextTextNode(actual) {\n  if (!actual.nextSibling) return undefined;\n  if (actual.parent !== actual.nextSibling.parent) return undefined;\n  if (isText(actual.nextSibling)) return actual.nextSibling;else return getNextTextNode(actual.nextSibling);\n}\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\n\n\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\n\n\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || dom_isEmpty(point.node)) {\n    return true;\n  }\n\n  var leftNode = point.node.childNodes[point.offset - 1];\n  var rightNode = point.node.childNodes[point.offset];\n\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {\n    return true;\n  }\n\n  return false;\n}\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\n\n\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = dom_prevPoint(point);\n  }\n\n  return null;\n}\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\n\n\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = dom_nextPoint(point);\n  }\n\n  return null;\n}\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\n\n\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && ch !== ' ' && ch !== NBSP_CHAR;\n}\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\n\n\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  var ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n/**\n * @method walkPoint\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\n\n\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  var point = startPoint;\n\n  while (point) {\n    handler(point);\n\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n\n    var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\n\n\nfunction makeOffsetPath(ancestor, node) {\n  var ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(dom_position).reverse();\n}\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\n\n\nfunction fromOffsetPath(ancestor, offsets) {\n  var current = ancestor;\n\n  for (var i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n\n  return current;\n}\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\n\n\nfunction splitNode(point, options) {\n  var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  var isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  } // edge case\n\n\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  } // split #text\n\n\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    var childNode = point.node.childNodes[point.offset];\n    var clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, listNext(childNode));\n\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n\n    if (isDiscardEmptySplits) {\n      if (dom_isEmpty(point.node)) {\n        remove(point.node);\n      }\n\n      if (dom_isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n\n    return clone;\n  }\n}\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\n\n\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  var ancestors = listAncestor(point.node, func.eq(root));\n\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n\n  return ancestors.reduce(function (node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n\n    return splitNode({\n      node: parent,\n      offset: node ? dom_position(node) : nodeLength(parent)\n    }, options);\n  });\n}\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\n\n\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  var pred = isInline ? isPara : isBodyContainer;\n  var ancestors = listAncestor(point.node, pred);\n  var topAncestor = lists.last(ancestors) || point.node;\n  var splitRoot, container;\n\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  } // if splitRoot is exists, split with splitTree\n\n\n  var pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline\n  }); // if container is point.node, find pivot with point.offset\n\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n\n  return {\n    rightNode: pivot,\n    container: container\n  };\n}\n\nfunction dom_create(nodeName) {\n  return document.createElement(nodeName);\n}\n\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\n\n\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) {\n    return;\n  }\n\n  if (node.removeNode) {\n    return node.removeNode(isRemoveChild);\n  }\n\n  var parent = node.parentNode;\n\n  if (!isRemoveChild) {\n    var nodes = [];\n\n    for (var i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n\n    for (var _i = 0, _len = nodes.length; _i < _len; _i++) {\n      parent.insertBefore(nodes[_i], node);\n    }\n  }\n\n  parent.removeChild(node);\n}\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\n\n\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n\n    var parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\n\n\nfunction dom_replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n\n  var newNode = dom_create(nodeName);\n\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n  return newNode;\n}\n\nvar isTextarea = makePredByNodeName('TEXTAREA');\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\n\nfunction dom_value($node, stripLinebreaks) {\n  var val = isTextarea($node[0]) ? $node.val() : $node.html();\n\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n\n  return val;\n}\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\n\n\nfunction dom_html($node, isNewlineOnBlock) {\n  var markup = dom_value($node);\n\n  if (isNewlineOnBlock) {\n    var regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function (match, endSlash, name) {\n      name = name.toUpperCase();\n      var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash;\n      var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n      return match + (isEndOfInlineContainer || isBlockNode ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n\n  return markup;\n}\n\nfunction posFromPlaceholder(placeholder) {\n  var $placeholder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(placeholder);\n  var pos = $placeholder.offset();\n  var height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height\n  };\n}\n\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.on(key, events[key]);\n  });\n}\n\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function (key) {\n    $node.off(key, events[key]);\n  });\n}\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\n\n\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n\n/* harmony default export */ var dom = ({\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR: NBSP_CHAR,\n\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,\n\n  /** @property {String} blank */\n  blank: blankHTML,\n\n  /** @property {String} emptyPara */\n  emptyPara: \"<p>\".concat(blankHTML, \"</p>\"),\n  makePredByNodeName: makePredByNodeName,\n  isEditable: isEditable,\n  isControlSizing: isControlSizing,\n  isText: isText,\n  isElement: isElement,\n  isVoid: isVoid,\n  isPara: isPara,\n  isPurePara: isPurePara,\n  isHeading: isHeading,\n  isInline: dom_isInline,\n  isBlock: func.not(dom_isInline),\n  isBodyInline: isBodyInline,\n  isBody: isBody,\n  isParaInline: isParaInline,\n  isPre: isPre,\n  isList: isList,\n  isTable: isTable,\n  isData: isData,\n  isCell: dom_isCell,\n  isBlockquote: isBlockquote,\n  isBodyContainer: isBodyContainer,\n  isAnchor: isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi: isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea: isTextarea,\n  deepestChildIsEmpty: deepestChildIsEmpty,\n  isEmpty: dom_isEmpty,\n  isEmptyAnchor: func.and(isAnchor, dom_isEmpty),\n  isClosestSibling: isClosestSibling,\n  withClosestSiblings: withClosestSiblings,\n  nodeLength: nodeLength,\n  isLeftEdgePoint: isLeftEdgePoint,\n  isRightEdgePoint: isRightEdgePoint,\n  isEdgePoint: isEdgePoint,\n  isLeftEdgeOf: dom_isLeftEdgeOf,\n  isRightEdgeOf: isRightEdgeOf,\n  isLeftEdgePointOf: isLeftEdgePointOf,\n  isRightEdgePointOf: isRightEdgePointOf,\n  prevPoint: dom_prevPoint,\n  nextPoint: dom_nextPoint,\n  nextPointWithEmptyNode: nextPointWithEmptyNode,\n  isSamePoint: isSamePoint,\n  isVisiblePoint: isVisiblePoint,\n  prevPointUntil: prevPointUntil,\n  nextPointUntil: nextPointUntil,\n  isCharPoint: isCharPoint,\n  isSpacePoint: isSpacePoint,\n  walkPoint: walkPoint,\n  ancestor: dom_ancestor,\n  singleChildAncestor: singleChildAncestor,\n  listAncestor: listAncestor,\n  lastAncestor: lastAncestor,\n  listNext: listNext,\n  listPrev: listPrev,\n  listDescendant: listDescendant,\n  commonAncestor: dom_commonAncestor,\n  wrap: wrap,\n  insertAfter: insertAfter,\n  appendChildNodes: appendChildNodes,\n  position: dom_position,\n  hasChildren: hasChildren,\n  makeOffsetPath: makeOffsetPath,\n  fromOffsetPath: fromOffsetPath,\n  splitTree: splitTree,\n  splitPoint: splitPoint,\n  create: dom_create,\n  createText: createText,\n  remove: remove,\n  removeWhile: removeWhile,\n  replace: dom_replace,\n  html: dom_html,\n  value: dom_value,\n  posFromPlaceholder: posFromPlaceholder,\n  attachEvents: attachEvents,\n  detachEvents: detachEvents,\n  isCustomStyleTag: isCustomStyleTag\n});\n// CONCATENATED MODULE: ./src/js/base/Context.js\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar Context_Context = /*#__PURE__*/function () {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  function Context($note, options) {\n    _classCallCheck(this, Context);\n\n    this.$note = $note;\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, options); // init ui with options\n\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui_template(this.options);\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.initialize();\n  }\n  /**\n   * create layout and initialize modules and other resources\n   */\n\n\n  _createClass(Context, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.layoutInfo = this.ui.createLayout(this.$note);\n\n      this._initialize();\n\n      this.$note.hide();\n      return this;\n    }\n    /**\n     * destroy modules and other resources and remove layout\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._destroy();\n\n      this.$note.removeData('summernote');\n      this.ui.removeLayout(this.$note, this.layoutInfo);\n    }\n    /**\n     * destory modules and other resources and initialize it again\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var disabled = this.isDisabled();\n      this.code(dom.emptyPara);\n\n      this._destroy();\n\n      this._initialize();\n\n      if (disabled) {\n        this.disable();\n      }\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\n      var _this = this;\n\n      // set own id\n      this.options.id = func.uniqueId(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.now()); // set default container for tooltips, popovers, and dialogs\n\n      this.options.container = this.options.container || this.layoutInfo.editor; // add optional buttons\n\n      var buttons = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, this.options.buttons);\n      Object.keys(buttons).forEach(function (key) {\n        _this.memo('button.' + key, buttons[key]);\n      });\n      var modules = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, this.options.modules, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.plugins || {}); // add and initialize modules\n\n      Object.keys(modules).forEach(function (key) {\n        _this.module(key, modules[key], true);\n      });\n      Object.keys(this.modules).forEach(function (key) {\n        _this.initializeModule(key);\n      });\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      var _this2 = this;\n\n      // destroy modules with reversed order\n      Object.keys(this.modules).reverse().forEach(function (key) {\n        _this2.removeModule(key);\n      });\n      Object.keys(this.memos).forEach(function (key) {\n        _this2.removeMemo(key);\n      }); // trigger custom onDestroy callback\n\n      this.triggerEvent('destroy', this);\n    }\n  }, {\n    key: \"code\",\n    value: function code(html) {\n      var isActivated = this.invoke('codeview.isActivated');\n\n      if (html === undefined) {\n        this.invoke('codeview.sync');\n        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n      } else {\n        if (isActivated) {\n          this.invoke('codeview.sync', html);\n        } else {\n          this.layoutInfo.editable.html(html);\n        }\n\n        this.$note.val(html);\n        this.triggerEvent('change', html, this.layoutInfo.editable);\n      }\n    }\n  }, {\n    key: \"isDisabled\",\n    value: function isDisabled() {\n      return this.layoutInfo.editable.attr('contenteditable') === 'false';\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      this.layoutInfo.editable.attr('contenteditable', true);\n      this.invoke('toolbar.activate', true);\n      this.triggerEvent('disable', false);\n      this.options.editing = true;\n    }\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      // close codeview if codeview is opend\n      if (this.invoke('codeview.isActivated')) {\n        this.invoke('codeview.deactivate');\n      }\n\n      this.layoutInfo.editable.attr('contenteditable', false);\n      this.options.editing = false;\n      this.invoke('toolbar.deactivate', true);\n      this.triggerEvent('disable', true);\n    }\n  }, {\n    key: \"triggerEvent\",\n    value: function triggerEvent() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n\n      if (callback) {\n        callback.apply(this.$note[0], args);\n      }\n\n      this.$note.trigger('summernote.' + namespace, args);\n    }\n  }, {\n    key: \"initializeModule\",\n    value: function initializeModule(key) {\n      var module = this.modules[key];\n      module.shouldInitialize = module.shouldInitialize || func.ok;\n\n      if (!module.shouldInitialize()) {\n        return;\n      } // initialize module\n\n\n      if (module.initialize) {\n        module.initialize();\n      } // attach events\n\n\n      if (module.events) {\n        dom.attachEvents(this.$note, module.events);\n      }\n    }\n  }, {\n    key: \"module\",\n    value: function module(key, ModuleClass, withoutIntialize) {\n      if (arguments.length === 1) {\n        return this.modules[key];\n      }\n\n      this.modules[key] = new ModuleClass(this);\n\n      if (!withoutIntialize) {\n        this.initializeModule(key);\n      }\n    }\n  }, {\n    key: \"removeModule\",\n    value: function removeModule(key) {\n      var module = this.modules[key];\n\n      if (module.shouldInitialize()) {\n        if (module.events) {\n          dom.detachEvents(this.$note, module.events);\n        }\n\n        if (module.destroy) {\n          module.destroy();\n        }\n      }\n\n      delete this.modules[key];\n    }\n  }, {\n    key: \"memo\",\n    value: function memo(key, obj) {\n      if (arguments.length === 1) {\n        return this.memos[key];\n      }\n\n      this.memos[key] = obj;\n    }\n  }, {\n    key: \"removeMemo\",\n    value: function removeMemo(key) {\n      if (this.memos[key] && this.memos[key].destroy) {\n        this.memos[key].destroy();\n      }\n\n      delete this.memos[key];\n    }\n    /**\n     * Some buttons need to change their visual style immediately once they get pressed\n     */\n\n  }, {\n    key: \"createInvokeHandlerAndUpdateState\",\n    value: function createInvokeHandlerAndUpdateState(namespace, value) {\n      var _this3 = this;\n\n      return function (event) {\n        _this3.createInvokeHandler(namespace, value)(event);\n\n        _this3.invoke('buttons.updateCurrentStyle');\n      };\n    }\n  }, {\n    key: \"createInvokeHandler\",\n    value: function createInvokeHandler(namespace, value) {\n      var _this4 = this;\n\n      return function (event) {\n        event.preventDefault();\n        var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target);\n\n        _this4.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n      };\n    }\n  }, {\n    key: \"invoke\",\n    value: function invoke() {\n      var namespace = lists.head(arguments);\n      var args = lists.tail(lists.from(arguments));\n      var splits = namespace.split('.');\n      var hasSeparator = splits.length > 1;\n      var moduleName = hasSeparator && lists.head(splits);\n      var methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n      var module = this.modules[moduleName || 'editor'];\n\n      if (!moduleName && this[methodName]) {\n        return this[methodName].apply(this, args);\n      } else if (module && module[methodName] && module.shouldInitialize()) {\n        return module[methodName].apply(module, args);\n      }\n    }\n  }]);\n\n  return Context;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/summernote.js\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function summernote() {\n    var type = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.type(lists.head(arguments));\n    var isExternalAPICalled = type === 'string';\n    var hasInitOptions = type === 'object';\n    var options = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend({}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.options, hasInitOptions ? lists.head(arguments) : {}); // Update options\n\n    options.langInfo = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang['en-US'], external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang[options.lang]);\n    options.icons = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(true, {}, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n    this.each(function (idx, note) {\n      var $note = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(note);\n\n      if (!$note.data('summernote')) {\n        var context = new Context_Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n    var $note = this.first();\n\n    if ($note.length) {\n      var context = $note.data('summernote');\n\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n\n    return this;\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/range.js\nfunction range_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction range_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction range_createClass(Constructor, protoProps, staticProps) { if (protoProps) range_defineProperties(Constructor.prototype, protoProps); if (staticProps) range_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\n\nfunction textRangeToPoint(textRange, isStart) {\n  var container = textRange.parentElement();\n  var offset;\n  var tester = document.body.createTextRange();\n  var prevContainer;\n  var childNodes = lists.from(container.childNodes);\n\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n\n    tester.moveToElementText(childNodes[offset]);\n\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n\n    prevContainer = childNodes[offset];\n  }\n\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    var textRangeStart = document.body.createTextRange();\n    var curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n    var pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    var textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    } // [workaround] enforce IE to re-reference curTextNode, hack\n\n\n    var dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    container = curTextNode;\n    offset = textCount;\n  }\n\n  return {\n    cont: container,\n    offset: offset\n  };\n}\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\n\n\nfunction pointToTextRange(point) {\n  var textRangeInfo = function textRangeInfo(container, offset) {\n    var node, isCollapseToStart;\n\n    if (dom.isText(container)) {\n      var prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      var prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n\n      offset = 0;\n      isCollapseToStart = false;\n    }\n\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset\n    };\n  };\n\n  var textRange = document.body.createTextRange();\n  var info = textRangeInfo(point.node, point.offset);\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\n\n\nvar range_WrappedRange = /*#__PURE__*/function () {\n  function WrappedRange(sc, so, ec, eo) {\n    range_classCallCheck(this, WrappedRange);\n\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo; // isOnEditable: judge whether range is on editable or not\n\n    this.isOnEditable = this.makeIsOn(dom.isEditable); // isOnList: judge whether range is on list node or not\n\n    this.isOnList = this.makeIsOn(dom.isList); // isOnAnchor: judge whether range is on anchor node or not\n\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor); // isOnCell: judge whether range is on cell node or not\n\n    this.isOnCell = this.makeIsOn(dom.isCell); // isOnData: judge whether range is on data node or not\n\n    this.isOnData = this.makeIsOn(dom.isData);\n  } // nativeRange: get nativeRange from sc, so, ec, eo\n\n\n  range_createClass(WrappedRange, [{\n    key: \"nativeRange\",\n    value: function nativeRange() {\n      if (env.isW3CRangeSupport) {\n        var w3cRange = document.createRange();\n        w3cRange.setStart(this.sc, this.so);\n        w3cRange.setEnd(this.ec, this.eo);\n        return w3cRange;\n      } else {\n        var textRange = pointToTextRange({\n          node: this.sc,\n          offset: this.so\n        });\n        textRange.setEndPoint('EndToEnd', pointToTextRange({\n          node: this.ec,\n          offset: this.eo\n        }));\n        return textRange;\n      }\n    }\n  }, {\n    key: \"getPoints\",\n    value: function getPoints() {\n      return {\n        sc: this.sc,\n        so: this.so,\n        ec: this.ec,\n        eo: this.eo\n      };\n    }\n  }, {\n    key: \"getStartPoint\",\n    value: function getStartPoint() {\n      return {\n        node: this.sc,\n        offset: this.so\n      };\n    }\n  }, {\n    key: \"getEndPoint\",\n    value: function getEndPoint() {\n      return {\n        node: this.ec,\n        offset: this.eo\n      };\n    }\n    /**\n     * select update visible range\n     */\n\n  }, {\n    key: \"select\",\n    value: function select() {\n      var nativeRng = this.nativeRange();\n\n      if (env.isW3CRangeSupport) {\n        var selection = document.getSelection();\n\n        if (selection.rangeCount > 0) {\n          selection.removeAllRanges();\n        }\n\n        selection.addRange(nativeRng);\n      } else {\n        nativeRng.select();\n      }\n\n      return this;\n    }\n    /**\n     * Moves the scrollbar to start container(sc) of current range\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"scrollIntoView\",\n    value: function scrollIntoView(container) {\n      var height = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(container).height();\n\n      if (container.scrollTop + height < this.sc.offsetTop) {\n        container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n      }\n\n      return this;\n    }\n    /**\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"normalize\",\n    value: function normalize() {\n      /**\n       * @param {BoundaryPoint} point\n       * @param {Boolean} isLeftToRight - true: prefer to choose right node\n       *                                - false: prefer to choose left node\n       * @return {BoundaryPoint}\n       */\n      var getVisiblePoint = function getVisiblePoint(point, isLeftToRight) {\n        if (!point) {\n          return point;\n        } // Just use the given point [XXX:Adhoc]\n        //  - case 01. if the point is on the middle of the node\n        //  - case 02. if the point is on the right edge and prefer to choose left node\n        //  - case 03. if the point is on the left edge and prefer to choose right node\n        //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n        //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n        //  - case 06. if the point is on the block node and there is no children\n\n\n        if (dom.isVisiblePoint(point)) {\n          if (!dom.isEdgePoint(point) || dom.isRightEdgePoint(point) && !isLeftToRight || dom.isLeftEdgePoint(point) && isLeftToRight || dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling) || dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling) || dom.isBlock(point.node) && dom.isEmpty(point.node)) {\n            return point;\n          }\n        } // point on block's edge\n\n\n        var block = dom.ancestor(point.node, dom.isBlock);\n        var hasRightNode = false;\n\n        if (!hasRightNode) {\n          var prevPoint = dom.prevPoint(point) || {\n            node: null\n          };\n          hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n        }\n\n        var hasLeftNode = false;\n\n        if (!hasLeftNode) {\n          var _nextPoint = dom.nextPoint(point) || {\n            node: null\n          };\n\n          hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(_nextPoint.node)) && isLeftToRight;\n        }\n\n        if (hasRightNode || hasLeftNode) {\n          // returns point already on visible point\n          if (dom.isVisiblePoint(point)) {\n            return point;\n          } // reverse direction\n\n\n          isLeftToRight = !isLeftToRight;\n        }\n\n        var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n        return nextPoint || point;\n      };\n\n      var endPoint = getVisiblePoint(this.getEndPoint(), false);\n      var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns matched nodes on range\n     *\n     * @param {Function} [pred] - predicate function\n     * @param {Object} [options]\n     * @param {Boolean} [options.includeAncestor]\n     * @param {Boolean} [options.fullyContains]\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"nodes\",\n    value: function nodes(pred, options) {\n      pred = pred || func.ok;\n      var includeAncestor = options && options.includeAncestor;\n      var fullyContains = options && options.fullyContains; // TODO compare points and sort\n\n      var startPoint = this.getStartPoint();\n      var endPoint = this.getEndPoint();\n      var nodes = [];\n      var leftEdgeNodes = [];\n      dom.walkPoint(startPoint, endPoint, function (point) {\n        if (dom.isEditable(point.node)) {\n          return;\n        }\n\n        var node;\n\n        if (fullyContains) {\n          if (dom.isLeftEdgePoint(point)) {\n            leftEdgeNodes.push(point.node);\n          }\n\n          if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n            node = point.node;\n          }\n        } else if (includeAncestor) {\n          node = dom.ancestor(point.node, pred);\n        } else {\n          node = point.node;\n        }\n\n        if (node && pred(node)) {\n          nodes.push(node);\n        }\n      }, true);\n      return lists.unique(nodes);\n    }\n    /**\n     * returns commonAncestor of range\n     * @return {Element} - commonAncestor\n     */\n\n  }, {\n    key: \"commonAncestor\",\n    value: function commonAncestor() {\n      return dom.commonAncestor(this.sc, this.ec);\n    }\n    /**\n     * returns expanded range by pred\n     *\n     * @param {Function} pred - predicate function\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"expand\",\n    value: function expand(pred) {\n      var startAncestor = dom.ancestor(this.sc, pred);\n      var endAncestor = dom.ancestor(this.ec, pred);\n\n      if (!startAncestor && !endAncestor) {\n        return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n      }\n\n      var boundaryPoints = this.getPoints();\n\n      if (startAncestor) {\n        boundaryPoints.sc = startAncestor;\n        boundaryPoints.so = 0;\n      }\n\n      if (endAncestor) {\n        boundaryPoints.ec = endAncestor;\n        boundaryPoints.eo = dom.nodeLength(endAncestor);\n      }\n\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n    /**\n     * @param {Boolean} isCollapseToStart\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"collapse\",\n    value: function collapse(isCollapseToStart) {\n      if (isCollapseToStart) {\n        return new WrappedRange(this.sc, this.so, this.sc, this.so);\n      } else {\n        return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n      }\n    }\n    /**\n     * splitText on range\n     */\n\n  }, {\n    key: \"splitText\",\n    value: function splitText() {\n      var isSameContainer = this.sc === this.ec;\n      var boundaryPoints = this.getPoints();\n\n      if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n        this.ec.splitText(this.eo);\n      }\n\n      if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n        boundaryPoints.sc = this.sc.splitText(this.so);\n        boundaryPoints.so = 0;\n\n        if (isSameContainer) {\n          boundaryPoints.ec = boundaryPoints.sc;\n          boundaryPoints.eo = this.eo - this.so;\n        }\n      }\n\n      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);\n    }\n    /**\n     * delete contents on range\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"deleteContents\",\n    value: function deleteContents() {\n      if (this.isCollapsed()) {\n        return this;\n      }\n\n      var rng = this.splitText();\n      var nodes = rng.nodes(null, {\n        fullyContains: true\n      }); // find new cursor point\n\n      var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {\n        return !lists.contains(nodes, point.node);\n      });\n      var emptyParents = [];\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(nodes, function (idx, node) {\n        // find empty parents\n        var parent = node.parentNode;\n\n        if (point.node !== parent && dom.nodeLength(parent) === 1) {\n          emptyParents.push(parent);\n        }\n\n        dom.remove(node, false);\n      }); // remove empty parents\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(emptyParents, function (idx, node) {\n        dom.remove(node, false);\n      });\n      return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize();\n    }\n    /**\n     * makeIsOn: return isOn(pred) function\n     */\n\n  }, {\n    key: \"makeIsOn\",\n    value: function makeIsOn(pred) {\n      return function () {\n        var ancestor = dom.ancestor(this.sc, pred);\n        return !!ancestor && ancestor === dom.ancestor(this.ec, pred);\n      };\n    }\n    /**\n     * @param {Function} pred\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isLeftEdgeOf\",\n    value: function isLeftEdgeOf(pred) {\n      if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n        return false;\n      }\n\n      var node = dom.ancestor(this.sc, pred);\n      return node && dom.isLeftEdgeOf(this.sc, node);\n    }\n    /**\n     * returns whether range was collapsed or not\n     */\n\n  }, {\n    key: \"isCollapsed\",\n    value: function isCollapsed() {\n      return this.sc === this.ec && this.so === this.eo;\n    }\n    /**\n     * wrap inline nodes which children of body with paragraph\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"wrapBodyInlineWithPara\",\n    value: function wrapBodyInlineWithPara() {\n      if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n        this.sc.innerHTML = dom.emptyPara;\n        return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n      }\n      /**\n       * [workaround] firefox often create range on not visible point. so normalize here.\n       *  - firefox: |<p>text</p>|\n       *  - chrome: <p>|text|</p>\n       */\n\n\n      var rng = this.normalize();\n\n      if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n        return rng;\n      } // find inline top ancestor\n\n\n      var topAncestor;\n\n      if (dom.isInline(rng.sc)) {\n        var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n        topAncestor = lists.last(ancestors);\n\n        if (!dom.isInline(topAncestor)) {\n          topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n        }\n      } else {\n        topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n      }\n\n      if (topAncestor) {\n        // siblings not in paragraph\n        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); // wrap with paragraph\n\n        if (inlineSiblings.length) {\n          var para = dom.wrap(lists.head(inlineSiblings), 'p');\n          dom.appendChildNodes(para, lists.tail(inlineSiblings));\n        }\n      }\n\n      return this.normalize();\n    }\n    /**\n     * insert node at current cursor\n     *\n     * @param {Node} node\n     * @return {Node}\n     */\n\n  }, {\n    key: \"insertNode\",\n    value: function insertNode(node) {\n      var rng = this;\n\n      if (dom.isText(node) || dom.isInline(node)) {\n        rng = this.wrapBodyInlineWithPara().deleteContents();\n      }\n\n      var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n\n      if (info.rightNode) {\n        info.rightNode.parentNode.insertBefore(node, info.rightNode);\n\n        if (dom.isEmpty(info.rightNode) && dom.isPara(node)) {\n          info.rightNode.parentNode.removeChild(info.rightNode);\n        }\n      } else {\n        info.container.appendChild(node);\n      }\n\n      return node;\n    }\n    /**\n     * insert html at current cursor\n     */\n\n  }, {\n    key: \"pasteHTML\",\n    value: function pasteHTML(markup) {\n      markup = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.trim(markup);\n      var contentsContainer = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div></div>').html(markup)[0];\n      var childNodes = lists.from(contentsContainer.childNodes); // const rng = this.wrapBodyInlineWithPara().deleteContents();\n\n      var rng = this;\n      var reversed = false;\n\n      if (rng.so >= 0) {\n        childNodes = childNodes.reverse();\n        reversed = true;\n      }\n\n      childNodes = childNodes.map(function (childNode) {\n        return rng.insertNode(childNode);\n      });\n\n      if (reversed) {\n        childNodes = childNodes.reverse();\n      }\n\n      return childNodes;\n    }\n    /**\n     * returns text in range\n     *\n     * @return {String}\n     */\n\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var nativeRng = this.nativeRange();\n      return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n    }\n    /**\n     * returns range for word before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getWordRange\",\n    value: function getWordRange(findAfter) {\n      var endPoint = this.getEndPoint();\n\n      if (!dom.isCharPoint(endPoint)) {\n        return this;\n      }\n\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        return !dom.isCharPoint(point);\n      });\n\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, function (point) {\n          return !dom.isCharPoint(point);\n        });\n      }\n\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns range for words before cursor\n     *\n     * @param {Boolean} [findAfter] - find after cursor, default: false\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getWordsRange\",\n    value: function getWordsRange(findAfter) {\n      var endPoint = this.getEndPoint();\n\n      var isNotTextPoint = function isNotTextPoint(point) {\n        return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n      };\n\n      if (isNotTextPoint(endPoint)) {\n        return this;\n      }\n\n      var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n\n      if (findAfter) {\n        endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n      }\n\n      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * returns range for words before cursor that match with a Regex\n     *\n     * example:\n     *  range: 'hi @Peter Pan'\n     *  regex: '/@[a-z ]+/i'\n     *  return range: '@Peter Pan'\n     *\n     * @param {RegExp} [regex]\n     * @return {WrappedRange|null}\n     */\n\n  }, {\n    key: \"getWordsMatchRange\",\n    value: function getWordsMatchRange(regex) {\n      var endPoint = this.getEndPoint();\n      var startPoint = dom.prevPointUntil(endPoint, function (point) {\n        if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n          return true;\n        }\n\n        var rng = new WrappedRange(point.node, point.offset, endPoint.node, endPoint.offset);\n        var result = regex.exec(rng.toString());\n        return result && result.index === 0;\n      });\n      var rng = new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n      var text = rng.toString();\n      var result = regex.exec(text);\n\n      if (result && result[0].length === text.length) {\n        return rng;\n      } else {\n        return null;\n      }\n    }\n    /**\n     * create offsetPath bookmark\n     *\n     * @param {Node} editable\n     */\n\n  }, {\n    key: \"bookmark\",\n    value: function bookmark(editable) {\n      return {\n        s: {\n          path: dom.makeOffsetPath(editable, this.sc),\n          offset: this.so\n        },\n        e: {\n          path: dom.makeOffsetPath(editable, this.ec),\n          offset: this.eo\n        }\n      };\n    }\n    /**\n     * create offsetPath bookmark base on paragraph\n     *\n     * @param {Node[]} paras\n     */\n\n  }, {\n    key: \"paraBookmark\",\n    value: function paraBookmark(paras) {\n      return {\n        s: {\n          path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n          offset: this.so\n        },\n        e: {\n          path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n          offset: this.eo\n        }\n      };\n    }\n    /**\n     * getClientRects\n     * @return {Rect[]}\n     */\n\n  }, {\n    key: \"getClientRects\",\n    value: function getClientRects() {\n      var nativeRng = this.nativeRange();\n      return nativeRng.getClientRects();\n    }\n  }]);\n\n  return WrappedRange;\n}();\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\n\n\n/* harmony default export */ var range = ({\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function create(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new range_WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) {\n      // collapsed\n      ec = sc;\n      eo = so;\n      return new range_WrappedRange(sc, so, ec, eo);\n    } else {\n      var wrappedRange = this.createFromSelection();\n\n      if (!wrappedRange && arguments.length === 1) {\n        var bodyElement = arguments[0];\n\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n\n      return wrappedRange;\n    }\n  },\n  createFromBodyElement: function createFromBodyElement(bodyElement) {\n    var isCollapseToStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n  createFromSelection: function createFromSelection() {\n    var sc, so, ec, eo;\n\n    if (env.isW3CRangeSupport) {\n      var selection = document.getSelection();\n\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n\n      var nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else {\n      // IE8: TextRange\n      var textRange = document.selection.createRange();\n      var textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      var textRangeStart = textRange;\n      textRangeStart.collapse(true);\n      var startPoint = textRangeToPoint(textRangeStart, true);\n      var endPoint = textRangeToPoint(textRangeEnd, false); // same visible point case: range was collapsed.\n\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n\n    return new range_WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function createFromNode(node) {\n    var sc = node;\n    var so = 0;\n    var ec = node;\n    var eo = dom.nodeLength(ec); // browsers can't target a picture or void node\n\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n\n    return this.create(sc, so, ec, eo);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function createFromNodeBefore(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function createFromNodeAfter(node) {\n    return this.createFromNode(node).collapse();\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function createFromBookmark(editable, bookmark) {\n    var sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    var so = bookmark.s.offset;\n    var ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    var eo = bookmark.e.offset;\n    return new range_WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function createFromParaBookmark(bookmark, paras) {\n    var so = bookmark.s.offset;\n    var eo = bookmark.e.offset;\n    var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n    return new range_WrappedRange(sc, so, ec, eo);\n  }\n});\n// CONCATENATED MODULE: ./src/js/base/core/key.js\n\n\nvar KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34\n};\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\n\n/* harmony default export */ var core_key = ({\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: function isEdit(keyCode) {\n    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE], keyCode);\n  },\n\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: function isMove(keyCode) {\n    return lists.contains([KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN], keyCode);\n  },\n\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: function isNavigation(keyCode) {\n    return lists.contains([KEY_MAP.HOME, KEY_MAP.END, KEY_MAP.PAGEUP, KEY_MAP.PAGEDOWN], keyCode);\n  },\n\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP\n});\n// CONCATENATED MODULE: ./src/js/base/core/async.js\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\n\nfunction readFileAsDataURL(file) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n    external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(new FileReader(), {\n      onload: function onload(e) {\n        var dataURL = e.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: function onerror(err) {\n        deferred.reject(err);\n      }\n    }).readAsDataURL(file);\n  }).promise();\n}\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\n\nfunction createImage(url) {\n  return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n    var $img = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<img>');\n    $img.one('load', function () {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', function () {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none'\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n// CONCATENATED MODULE: ./src/js/base/editing/History.js\nfunction History_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction History_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction History_createClass(Constructor, protoProps, staticProps) { if (protoProps) History_defineProperties(Constructor.prototype, protoProps); if (staticProps) History_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar History_History = /*#__PURE__*/function () {\n  function History(context) {\n    History_classCallCheck(this, History);\n\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n\n  History_createClass(History, [{\n    key: \"makeSnapshot\",\n    value: function makeSnapshot() {\n      var rng = range.create(this.editable);\n      var emptyBookmark = {\n        s: {\n          path: [],\n          offset: 0\n        },\n        e: {\n          path: [],\n          offset: 0\n        }\n      };\n      return {\n        contents: this.$editable.html(),\n        bookmark: rng && rng.isOnEditable() ? rng.bookmark(this.editable) : emptyBookmark\n      };\n    }\n  }, {\n    key: \"applySnapshot\",\n    value: function applySnapshot(snapshot) {\n      if (snapshot.contents !== null) {\n        this.$editable.html(snapshot.contents);\n      }\n\n      if (snapshot.bookmark !== null) {\n        range.createFromBookmark(this.editable, snapshot.bookmark).select();\n      }\n    }\n    /**\n    * @method rewind\n    * Rewinds the history stack back to the first snapshot taken.\n    * Leaves the stack intact, so that \"Redo\" can still be used.\n    */\n\n  }, {\n    key: \"rewind\",\n    value: function rewind() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      } // Return to the first available snapshot.\n\n\n      this.stackOffset = 0; // Apply that snapshot.\n\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n    /**\n    *  @method commit\n    *  Resets history stack, but keeps current editor's content.\n    */\n\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      // Clear the stack.\n      this.stack = []; // Restore stackOffset to its original value.\n\n      this.stackOffset = -1; // Record our first snapshot (of nothing).\n\n      this.recordUndo();\n    }\n    /**\n    * @method reset\n    * Resets the history stack completely; reverting to an empty editor.\n    */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      // Clear the stack.\n      this.stack = []; // Restore stackOffset to its original value.\n\n      this.stackOffset = -1; // Clear the editable area.\n\n      this.$editable.html(''); // Record our first snapshot (of nothing).\n\n      this.recordUndo();\n    }\n    /**\n     * undo\n     */\n\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      // Create snap shot if not yet recorded\n      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      if (this.stackOffset > 0) {\n        this.stackOffset--;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n    /**\n     * redo\n     */\n\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.stack.length - 1 > this.stackOffset) {\n        this.stackOffset++;\n        this.applySnapshot(this.stack[this.stackOffset]);\n      }\n    }\n    /**\n     * recorded undo\n     */\n\n  }, {\n    key: \"recordUndo\",\n    value: function recordUndo() {\n      this.stackOffset++; // Wash out stack after stackOffset\n\n      if (this.stack.length > this.stackOffset) {\n        this.stack = this.stack.slice(0, this.stackOffset);\n      } // Create new snapshot and push it to the end\n\n\n      this.stack.push(this.makeSnapshot()); // If the stack size reachs to the limit, then slice it\n\n      if (this.stack.length > this.context.options.historyLimit) {\n        this.stack.shift();\n        this.stackOffset -= 1;\n      }\n    }\n  }]);\n\n  return History;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Style.js\nfunction Style_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Style_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Style_createClass(Constructor, protoProps, staticProps) { if (protoProps) Style_defineProperties(Constructor.prototype, protoProps); if (staticProps) Style_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar Style_Style = /*#__PURE__*/function () {\n  function Style() {\n    Style_classCallCheck(this, Style);\n  }\n\n  Style_createClass(Style, [{\n    key: \"jQueryCSS\",\n\n    /**\n     * @method jQueryCSS\n     *\n     * [workaround] for old jQuery\n     * passing an array of style properties to .css()\n     * will result in an object of property-value pairs.\n     * (compability with version < 1.9)\n     *\n     * @private\n     * @param  {jQuery} $obj\n     * @param  {Array} propertyNames - An array of one or more CSS properties.\n     * @return {Object}\n     */\n    value: function jQueryCSS($obj, propertyNames) {\n      var result = {};\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(propertyNames, function (idx, propertyName) {\n        result[propertyName] = $obj.css(propertyName);\n      });\n      return result;\n    }\n    /**\n     * returns style object from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n\n  }, {\n    key: \"fromNode\",\n    value: function fromNode($node) {\n      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n      var styleInfo = this.jQueryCSS($node, properties) || {};\n      var fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n      styleInfo['font-size'] = parseInt(fontSize, 10);\n      styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n      return styleInfo;\n    }\n    /**\n     * paragraph level style\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} styleInfo\n     */\n\n  }, {\n    key: \"stylePara\",\n    value: function stylePara(rng, styleInfo) {\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(rng.nodes(dom.isPara, {\n        includeAncestor: true\n      }), function (idx, para) {\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css(styleInfo);\n      });\n    }\n    /**\n     * insert and returns styleNodes on range.\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} [options] - options for styleNodes\n     * @param {String} [options.nodeName] - default: `SPAN`\n     * @param {Boolean} [options.expandClosestSibling] - default: `false`\n     * @param {Boolean} [options.onlyPartialContains] - default: `false`\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"styleNodes\",\n    value: function styleNodes(rng, options) {\n      rng = rng.splitText();\n      var nodeName = options && options.nodeName || 'SPAN';\n      var expandClosestSibling = !!(options && options.expandClosestSibling);\n      var onlyPartialContains = !!(options && options.onlyPartialContains);\n\n      if (rng.isCollapsed()) {\n        return [rng.insertNode(dom.create(nodeName))];\n      }\n\n      var pred = dom.makePredByNodeName(nodeName);\n      var nodes = rng.nodes(dom.isText, {\n        fullyContains: true\n      }).map(function (text) {\n        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n      });\n\n      if (expandClosestSibling) {\n        if (onlyPartialContains) {\n          var nodesInRange = rng.nodes(); // compose with partial contains predication\n\n          pred = func.and(pred, function (node) {\n            return lists.contains(nodesInRange, node);\n          });\n        }\n\n        return nodes.map(function (node) {\n          var siblings = dom.withClosestSiblings(node, pred);\n          var head = lists.head(siblings);\n          var tails = lists.tail(siblings);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(tails, function (idx, elem) {\n            dom.appendChildNodes(head, elem.childNodes);\n            dom.remove(elem);\n          });\n          return lists.head(siblings);\n        });\n      } else {\n        return nodes;\n      }\n    }\n    /**\n     * get current style on cursor\n     *\n     * @param {WrappedRange} rng\n     * @return {Object} - object contains style properties.\n     */\n\n  }, {\n    key: \"current\",\n    value: function current(rng) {\n      var $cont = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n      var styleInfo = this.fromNode($cont); // document.queryCommandState for toggle state\n      // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n\n      try {\n        styleInfo = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(styleInfo, {\n          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n          'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n        });\n      } catch (e) {} // eslint-disable-next-line\n      // list-style-type to list-style(unordered, ordered)\n\n\n      if (!rng.isOnList()) {\n        styleInfo['list-style'] = 'none';\n      } else {\n        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n        var isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n      }\n\n      var para = dom.ancestor(rng.sc, dom.isPara);\n\n      if (para && para.style['line-height']) {\n        styleInfo['line-height'] = para.style.lineHeight;\n      } else {\n        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n        styleInfo['line-height'] = lineHeight.toFixed(1);\n      }\n\n      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n      styleInfo.range = rng;\n      return styleInfo;\n    }\n  }]);\n\n  return Style;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Bullet.js\nfunction Bullet_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Bullet_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Bullet_createClass(Constructor, protoProps, staticProps) { if (protoProps) Bullet_defineProperties(Constructor.prototype, protoProps); if (staticProps) Bullet_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar Bullet_Bullet = /*#__PURE__*/function () {\n  function Bullet() {\n    Bullet_classCallCheck(this, Bullet);\n  }\n\n  Bullet_createClass(Bullet, [{\n    key: \"insertOrderedList\",\n\n    /**\n     * toggle ordered list\n     */\n    value: function insertOrderedList(editable) {\n      this.toggleList('OL', editable);\n    }\n    /**\n     * toggle unordered list\n     */\n\n  }, {\n    key: \"insertUnorderedList\",\n    value: function insertUnorderedList(editable) {\n      this.toggleList('UL', editable);\n    }\n    /**\n     * indent\n     */\n\n  }, {\n    key: \"indent\",\n    value: function indent(editable) {\n      var _this = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n\n        if (dom.isLi(head)) {\n          var previousList = _this.findList(head.previousSibling);\n\n          if (previousList) {\n            paras.map(function (para) {\n              return previousList.appendChild(para);\n            });\n          } else {\n            _this.wrapList(paras, head.parentNode.nodeName);\n\n            paras.map(function (para) {\n              return para.parentNode;\n            }).map(function (para) {\n              return _this.appendToPrevious(para);\n            });\n          }\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(paras, function (idx, para) {\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              return (parseInt(val, 10) || 0) + 25;\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n    /**\n     * outdent\n     */\n\n  }, {\n    key: \"outdent\",\n    value: function outdent(editable) {\n      var _this2 = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n\n        if (dom.isLi(head)) {\n          _this2.releaseList([paras]);\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(paras, function (idx, para) {\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {\n              val = parseInt(val, 10) || 0;\n              return val > 25 ? val - 25 : '';\n            });\n          });\n        }\n      });\n      rng.select();\n    }\n    /**\n     * toggle list\n     *\n     * @param {String} listName - OL or UL\n     */\n\n  }, {\n    key: \"toggleList\",\n    value: function toggleList(listName, editable) {\n      var _this3 = this;\n\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n      var paras = rng.nodes(dom.isPara, {\n        includeAncestor: true\n      });\n      var bookmark = rng.paraBookmark(paras);\n      var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list\n\n      if (lists.find(paras, dom.isPurePara)) {\n        var wrappedParas = [];\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n          wrappedParas = wrappedParas.concat(_this3.wrapList(paras, listName));\n        });\n        paras = wrappedParas; // list to paragraph or change list style\n      } else {\n        var diffLists = rng.nodes(dom.isList, {\n          includeAncestor: true\n        }).filter(function (listNode) {\n          return !external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.nodeName(listNode, listName);\n        });\n\n        if (diffLists.length) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(diffLists, function (idx, listNode) {\n            dom.replace(listNode, listName);\n          });\n        } else {\n          paras = this.releaseList(clustereds, true);\n        }\n      }\n\n      range.createFromParaBookmark(bookmark, paras).select();\n    }\n    /**\n     * @param {Node[]} paras\n     * @param {String} listName\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"wrapList\",\n    value: function wrapList(paras, listName) {\n      var head = lists.head(paras);\n      var last = lists.last(paras);\n      var prevList = dom.isList(head.previousSibling) && head.previousSibling;\n      var nextList = dom.isList(last.nextSibling) && last.nextSibling;\n      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); // P to LI\n\n      paras = paras.map(function (para) {\n        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n      }); // append to list(<ul>, <ol>)\n\n      dom.appendChildNodes(listNode, paras);\n\n      if (nextList) {\n        dom.appendChildNodes(listNode, lists.from(nextList.childNodes));\n        dom.remove(nextList);\n      }\n\n      return paras;\n    }\n    /**\n     * @method releaseList\n     *\n     * @param {Array[]} clustereds\n     * @param {Boolean} isEscapseToBody\n     * @return {Node[]}\n     */\n\n  }, {\n    key: \"releaseList\",\n    value: function releaseList(clustereds, isEscapseToBody) {\n      var _this4 = this;\n\n      var releasedParas = [];\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(clustereds, function (idx, paras) {\n        var head = lists.head(paras);\n        var last = lists.last(paras);\n        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n        var parentItem = headList.parentNode;\n\n        if (headList.parentNode.nodeName === 'LI') {\n          paras.map(function (para) {\n            var newList = _this4.findNextSiblings(para);\n\n            if (parentItem.nextSibling) {\n              parentItem.parentNode.insertBefore(para, parentItem.nextSibling);\n            } else {\n              parentItem.parentNode.appendChild(para);\n            }\n\n            if (newList.length) {\n              _this4.wrapList(newList, headList.nodeName);\n\n              para.appendChild(newList[0].parentNode);\n            }\n          });\n\n          if (headList.children.length === 0) {\n            parentItem.removeChild(headList);\n          }\n\n          if (parentItem.childNodes.length === 0) {\n            parentItem.parentNode.removeChild(parentItem);\n          }\n        } else {\n          var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n            node: last.parentNode,\n            offset: dom.position(last) + 1\n          }, {\n            isSkipPaddingBlankHTML: true\n          }) : null;\n          var middleList = dom.splitTree(headList, {\n            node: head.parentNode,\n            offset: dom.position(head)\n          }, {\n            isSkipPaddingBlankHTML: true\n          });\n          paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi); // LI to P\n\n          if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n            paras = paras.map(function (para) {\n              return dom.replace(para, 'P');\n            });\n          }\n\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(lists.from(paras).reverse(), function (idx, para) {\n            dom.insertAfter(para, headList);\n          }); // remove empty lists\n\n          var rootLists = lists.compact([headList, middleList, lastList]);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(rootLists, function (idx, rootList) {\n            var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(listNodes.reverse(), function (idx, listNode) {\n              if (!dom.nodeLength(listNode)) {\n                dom.remove(listNode, true);\n              }\n            });\n          });\n        }\n\n        releasedParas = releasedParas.concat(paras);\n      });\n      return releasedParas;\n    }\n    /**\n     * @method appendToPrevious\n     *\n     * Appends list to previous list item, if\n     * none exist it wraps the list in a new list item.\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n\n  }, {\n    key: \"appendToPrevious\",\n    value: function appendToPrevious(node) {\n      return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');\n    }\n    /**\n     * @method findList\n     *\n     * Finds an existing list in list item\n     *\n     * @param {HTMLNode} ListItem\n     * @return {Array[]}\n     */\n\n  }, {\n    key: \"findList\",\n    value: function findList(node) {\n      return node ? lists.find(node.children, function (child) {\n        return ['OL', 'UL'].indexOf(child.nodeName) > -1;\n      }) : null;\n    }\n    /**\n     * @method findNextSiblings\n     *\n     * Finds all list item siblings that follow it\n     *\n     * @param {HTMLNode} ListItem\n     * @return {HTMLNode}\n     */\n\n  }, {\n    key: \"findNextSiblings\",\n    value: function findNextSiblings(node) {\n      var siblings = [];\n\n      while (node.nextSibling) {\n        siblings.push(node.nextSibling);\n        node = node.nextSibling;\n      }\n\n      return siblings;\n    }\n  }]);\n\n  return Bullet;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Typing.js\nfunction Typing_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Typing_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Typing_createClass(Constructor, protoProps, staticProps) { if (protoProps) Typing_defineProperties(Constructor.prototype, protoProps); if (staticProps) Typing_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\n\nvar Typing_Typing = /*#__PURE__*/function () {\n  function Typing(context) {\n    Typing_classCallCheck(this, Typing);\n\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet_Bullet();\n    this.options = context.options;\n  }\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n\n\n  Typing_createClass(Typing, [{\n    key: \"insertTab\",\n    value: function insertTab(rng, tabsize) {\n      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n      rng = rng.deleteContents();\n      rng.insertNode(tab, true);\n      rng = range.create(tab, tabsize);\n      rng.select();\n    }\n    /**\n     * insert paragraph\n     *\n     * @param {jQuery} $editable\n     * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n     *\n     * blockquoteBreakingLevel\n     *   0 - No break, the new paragraph remains inside the quote\n     *   1 - Break the first blockquote in the ancestors list\n     *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n     */\n\n  }, {\n    key: \"insertParagraph\",\n    value: function insertParagraph(editable, rng) {\n      rng = rng || range.create(editable); // deleteContents on range.\n\n      rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph\n\n      rng = rng.wrapBodyInlineWithPara(); // finding paragraph\n\n      var splitRoot = dom.ancestor(rng.sc, dom.isPara);\n      var nextPara; // on paragraph: split paragraph\n\n      if (splitRoot) {\n        // if it is an empty line with li\n        if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n          // toggle UL/OL and escape\n          this.bullet.toggleList(splitRoot.parentNode.nodeName);\n          return;\n        } else {\n          var blockquote = null;\n\n          if (this.options.blockquoteBreakingLevel === 1) {\n            blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n          } else if (this.options.blockquoteBreakingLevel === 2) {\n            blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n          }\n\n          if (blockquote) {\n            // We're inside a blockquote and options ask us to break it\n            nextPara = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(dom.emptyPara)[0]; // If the split is right before a <br>, remove it so that there's no \"empty line\"\n            // after the split in the new blockquote created\n\n            if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(rng.sc.nextSibling).remove();\n            }\n\n            var split = dom.splitTree(blockquote, rng.getStartPoint(), {\n              isDiscardEmptySplits: true\n            });\n\n            if (split) {\n              split.parentNode.insertBefore(nextPara, split);\n            } else {\n              dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n            }\n          } else {\n            nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); // not a blockquote, just insert the paragraph\n\n            var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n            emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(emptyAnchors, function (idx, anchor) {\n              dom.remove(anchor);\n            }); // replace empty heading, pre or custom-made styleTag with P tag\n\n            if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n              nextPara = dom.replace(nextPara, 'p');\n            }\n          }\n        } // no paragraph: insert empty paragraph\n\n      } else {\n        var next = rng.sc.childNodes[rng.so];\n        nextPara = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(dom.emptyPara)[0];\n\n        if (next) {\n          rng.sc.insertBefore(nextPara, next);\n        } else {\n          rng.sc.appendChild(nextPara);\n        }\n      }\n\n      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n    }\n  }]);\n\n  return Typing;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/editing/Table.js\nfunction Table_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Table_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Table_createClass(Constructor, protoProps, staticProps) { if (protoProps) Table_defineProperties(Constructor.prototype, protoProps); if (staticProps) Table_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\n\nvar TableResultAction = function TableResultAction(startPoint, where, action, domTable) {\n  var _startPoint = {\n    'colPos': 0,\n    'rowPos': 0\n  };\n  var _virtualTable = [];\n  var _actionCellList = []; /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th') {\n      // Impossible to identify start Cell point\n      return;\n    }\n\n    _startPoint.colPos = startPoint.cellIndex;\n\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n\n\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    var objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell\n    };\n\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n\n\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition\n      }\n    };\n  }\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n\n\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n\n    var newCellIndex = cellIndex;\n\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n\n\n  function addCellInfoToVirtual(row, cell) {\n    var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    var cellHasColspan = cell.colSpan > 1;\n    var cellHasRowspan = cell.rowSpan > 1;\n    var isThisSelectedCell = row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos;\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); // Add span rows to virtual Table.\n\n    var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n\n    if (rowspanNumber > 1) {\n      for (var rp = 1; rp < rowspanNumber; rp++) {\n        var rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    } // Add span cols to virtual table.\n\n\n    var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n\n    if (colspanNumber > 1) {\n      for (var cp = 1; cp < colspanNumber; cp++) {\n        var cellspanIndex = recoverCellIndex(row.rowIndex, cellIndex + cp);\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n\n\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n\n\n  function createVirtualTable() {\n    var rows = domTable.rows;\n\n    for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      var cells = rows[rowIndex].cells;\n\n      for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n\n\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n\n        break;\n\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n\n        break;\n    }\n\n    return TableResultAction.resultAction.RemoveCell;\n  }\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n\n\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n\n        break;\n\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n\n        break;\n    }\n\n    return TableResultAction.resultAction.AddCell;\n  }\n\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  } /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n\n\n  this.getActionList = function () {\n    var fixedRow = where === TableResultAction.where.Row ? _startPoint.rowPos : -1;\n    var fixedCol = where === TableResultAction.where.Column ? _startPoint.colPos : -1;\n    var actualPosition = 0;\n    var canContinue = true;\n\n    while (canContinue) {\n      var rowPosition = fixedRow >= 0 ? fixedRow : actualPosition;\n      var colPosition = fixedCol >= 0 ? fixedCol : actualPosition;\n      var row = _virtualTable[rowPosition];\n\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      var cell = row[colPosition];\n\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      } // Define action to be applied in this cell\n\n\n      var resultAction = TableResultAction.resultAction.Ignore;\n\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n\n      actualPosition++;\n    }\n\n    return _actionCellList;\n  };\n\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\n\n\nTableResultAction.where = {\n  'Row': 0,\n  'Column': 1\n};\n/**\n*\n* Requested action to apply enum.\n*/\n\nTableResultAction.requestAction = {\n  'Add': 0,\n  'Delete': 1\n};\n/**\n*\n* Result action to be executed enum.\n*/\n\nTableResultAction.resultAction = {\n  'Ignore': 0,\n  'SubtractSpanCount': 1,\n  'RemoveCell': 2,\n  'AddCell': 3,\n  'SumSpanCount': 4\n};\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\n\nvar Table_Table = /*#__PURE__*/function () {\n  function Table() {\n    Table_classCallCheck(this, Table);\n  }\n\n  Table_createClass(Table, [{\n    key: \"tab\",\n\n    /**\n     * handle tab key\n     *\n     * @param {WrappedRange} rng\n     * @param {Boolean} isShift\n     */\n    value: function tab(rng, isShift) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var table = dom.ancestor(cell, dom.isTable);\n      var cells = dom.listDescendant(table, dom.isCell);\n      var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n\n      if (nextCell) {\n        range.create(nextCell, 0).select();\n      }\n    }\n    /**\n     * Add a new row\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (top/bottom)\n     * @return {Node}\n     */\n\n  }, {\n    key: \"addRow\",\n    value: function addRow(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var currentTr = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var trAttributes = this.recoverAttributes(currentTr);\n      var html = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<tr' + trAttributes + '></tr>');\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentTr).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var idCell = 0; idCell < actions.length; idCell++) {\n        var currentCell = actions[idCell];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            break;\n\n          case TableResultAction.resultAction.SumSpanCount:\n            {\n              if (position === 'top') {\n                var baseCellTr = currentCell.baseCell.parent;\n                var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n\n                if (isTopFromRowSpan) {\n                  var newTd = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div></div>').append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                  html.append(newTd);\n                  break;\n                }\n              }\n\n              var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n              rowspanNumber++;\n              currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n            }\n            break;\n        }\n      }\n\n      if (position === 'top') {\n        currentTr.before(html);\n      } else {\n        var cellHasRowspan = cell.rowSpan > 1;\n\n        if (cellHasRowspan) {\n          var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentTr).parent().find('tr')[lastTrIndex]).after(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(html));\n          return;\n        }\n\n        currentTr.after(html);\n      }\n    }\n    /**\n     * Add a new col\n     *\n     * @param {WrappedRange} rng\n     * @param {String} position (left/right)\n     * @return {Node}\n     */\n\n  }, {\n    key: \"addCol\",\n    value: function addCol(rng, position) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var rowsGroup = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).siblings();\n      rowsGroup.push(row);\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        var currentCell = actions[actionIndex];\n        var tdAttributes = this.recoverAttributes(currentCell.baseCell);\n\n        switch (currentCell.action) {\n          case TableResultAction.resultAction.AddCell:\n            if (position === 'right') {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n\n            break;\n\n          case TableResultAction.resultAction.SumSpanCount:\n            if (position === 'right') {\n              var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n              colspanNumber++;\n              currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n            }\n\n            break;\n        }\n      }\n    }\n    /*\n    * Copy attributes from element.\n    *\n    * @param {object} Element to recover attributes.\n    * @return {string} Copied string elements.\n    */\n\n  }, {\n    key: \"recoverAttributes\",\n    value: function recoverAttributes(el) {\n      var resultStr = '';\n\n      if (!el) {\n        return resultStr;\n      }\n\n      var attrList = el.attributes || [];\n\n      for (var i = 0; i < attrList.length; i++) {\n        if (attrList[i].name.toLowerCase() === 'id') {\n          continue;\n        }\n\n        if (attrList[i].specified) {\n          resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n        }\n      }\n\n      return resultStr;\n    }\n    /**\n     * Delete current row\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell));\n      var rowPos = row[0].rowIndex;\n      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n\n        var baseCell = actions[actionIndex].baseCell;\n        var virtualPosition = actions[actionIndex].virtualTable;\n        var hasRowspan = baseCell.rowSpan && baseCell.rowSpan > 1;\n        var rowspanNumber = hasRowspan ? parseInt(baseCell.rowSpan, 10) : 0;\n\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n\n          case TableResultAction.resultAction.AddCell:\n            {\n              var nextRow = row.next('tr')[0];\n\n              if (!nextRow) {\n                continue;\n              }\n\n              var cloneRow = row[0].cells[cellPos];\n\n              if (hasRowspan) {\n                if (rowspanNumber > 2) {\n                  rowspanNumber--;\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                  nextRow.cells[cellPos].innerHTML = '';\n                } else if (rowspanNumber === 2) {\n                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                  nextRow.cells[cellPos].removeAttribute('rowSpan');\n                  nextRow.cells[cellPos].innerHTML = '';\n                }\n              }\n            }\n            continue;\n\n          case TableResultAction.resultAction.SubtractSpanCount:\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                baseCell.setAttribute('rowSpan', rowspanNumber);\n\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              } else if (rowspanNumber === 2) {\n                baseCell.removeAttribute('rowSpan');\n\n                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {\n                  baseCell.innerHTML = '';\n                }\n              }\n            }\n\n            continue;\n\n          case TableResultAction.resultAction.RemoveCell:\n            // Do not need remove cell because row will be deleted.\n            continue;\n        }\n      }\n\n      row.remove();\n    }\n    /**\n     * Delete current col\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('tr');\n      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell));\n      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(row).closest('table')[0]);\n      var actions = vTable.getActionList();\n\n      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n        if (!actions[actionIndex]) {\n          continue;\n        }\n\n        switch (actions[actionIndex].action) {\n          case TableResultAction.resultAction.Ignore:\n            continue;\n\n          case TableResultAction.resultAction.SubtractSpanCount:\n            {\n              var baseCell = actions[actionIndex].baseCell;\n              var hasColspan = baseCell.colSpan && baseCell.colSpan > 1;\n\n              if (hasColspan) {\n                var colspanNumber = baseCell.colSpan ? parseInt(baseCell.colSpan, 10) : 0;\n\n                if (colspanNumber > 2) {\n                  colspanNumber--;\n                  baseCell.setAttribute('colSpan', colspanNumber);\n\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                } else if (colspanNumber === 2) {\n                  baseCell.removeAttribute('colSpan');\n\n                  if (baseCell.cellIndex === cellPos) {\n                    baseCell.innerHTML = '';\n                  }\n                }\n              }\n            }\n            continue;\n\n          case TableResultAction.resultAction.RemoveCell:\n            dom.remove(actions[actionIndex].baseCell, true);\n            continue;\n        }\n      }\n    }\n    /**\n     * create empty table element\n     *\n     * @param {Number} rowCount\n     * @param {Number} colCount\n     * @return {Node}\n     */\n\n  }, {\n    key: \"createTable\",\n    value: function createTable(colCount, rowCount, options) {\n      var tds = [];\n      var tdHTML;\n\n      for (var idxCol = 0; idxCol < colCount; idxCol++) {\n        tds.push('<td>' + dom.blank + '</td>');\n      }\n\n      tdHTML = tds.join('');\n      var trs = [];\n      var trHTML;\n\n      for (var idxRow = 0; idxRow < rowCount; idxRow++) {\n        trs.push('<tr>' + tdHTML + '</tr>');\n      }\n\n      trHTML = trs.join('');\n      var $table = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<table>' + trHTML + '</table>');\n\n      if (options && options.tableClassName) {\n        $table.addClass(options.tableClassName);\n      }\n\n      return $table[0];\n    }\n    /**\n     * Delete current table\n     *\n     * @param {WrappedRange} rng\n     * @return {Node}\n     */\n\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable(rng) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(cell).closest('table').remove();\n    }\n  }]);\n\n  return Table;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Editor.js\nfunction Editor_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Editor_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Editor_createClass(Constructor, protoProps, staticProps) { if (protoProps) Editor_defineProperties(Constructor.prototype, protoProps); if (staticProps) Editor_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KEY_BOGUS = 'bogus';\n/**\n * @class Editor\n */\n\nvar Editor_Editor = /*#__PURE__*/function () {\n  function Editor(context) {\n    var _this = this;\n\n    Editor_classCallCheck(this, Editor);\n\n    this.context = context;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n    this.style = new Style_Style();\n    this.table = new Table_Table();\n    this.typing = new Typing_Typing(context);\n    this.bullet = new Bullet_Bullet();\n    this.history = new History_History(context);\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName); // native commands(with execCommand), generate function for execCommand\n\n    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor'];\n\n    for (var idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = function (sCmd) {\n        return function (value) {\n          _this.beforeCommand();\n\n          document.execCommand(sCmd, false, value);\n\n          _this.afterCommand(true);\n        };\n      }(commands[idx]);\n\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n\n    this.fontName = this.wrapCommand(function (value) {\n      return _this.fontStyling('font-family', env.validFontName(value));\n    });\n    this.fontSize = this.wrapCommand(function (value) {\n      var unit = _this.currentStyle()['font-size-unit'];\n\n      return _this.fontStyling('font-size', value + unit);\n    });\n    this.fontSizeUnit = this.wrapCommand(function (value) {\n      var size = _this.currentStyle()['font-size'];\n\n      return _this.fontStyling('font-size', size + value);\n    });\n\n    for (var _idx = 1; _idx <= 6; _idx++) {\n      this['formatH' + _idx] = function (idx) {\n        return function () {\n          _this.formatBlock('H' + idx);\n        };\n      }(_idx);\n\n      this.context.memo('help.formatH' + _idx, this.lang.help['formatH' + _idx]);\n    }\n\n    this.insertParagraph = this.wrapCommand(function () {\n      _this.typing.insertParagraph(_this.editable);\n    });\n    this.insertOrderedList = this.wrapCommand(function () {\n      _this.bullet.insertOrderedList(_this.editable);\n    });\n    this.insertUnorderedList = this.wrapCommand(function () {\n      _this.bullet.insertUnorderedList(_this.editable);\n    });\n    this.indent = this.wrapCommand(function () {\n      _this.bullet.indent(_this.editable);\n    });\n    this.outdent = this.wrapCommand(function () {\n      _this.bullet.outdent(_this.editable);\n    });\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n\n    this.insertNode = this.wrapCommand(function (node) {\n      if (_this.isLimited(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).text().length)) {\n        return;\n      }\n\n      var rng = _this.getLastRange();\n\n      rng.insertNode(node);\n\n      _this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n    /**\n     * insert text\n     * @param {String} text\n     */\n\n    this.insertText = this.wrapCommand(function (text) {\n      if (_this.isLimited(text.length)) {\n        return;\n      }\n\n      var rng = _this.getLastRange();\n\n      var textNode = rng.insertNode(dom.createText(text));\n\n      _this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n\n    this.pasteHTML = this.wrapCommand(function (markup) {\n      if (_this.isLimited(markup.length)) {\n        return;\n      }\n\n      markup = _this.context.invoke('codeview.purify', markup);\n\n      var contents = _this.getLastRange().pasteHTML(markup);\n\n      _this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n\n    this.formatBlock = this.wrapCommand(function (tagName, $target) {\n      var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle;\n\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock);\n      } else {\n        _this.onFormatBlock(tagName, $target);\n      }\n    });\n    /**\n     * insert horizontal rule\n     */\n\n    this.insertHorizontalRule = this.wrapCommand(function () {\n      var hrNode = _this.getLastRange().insertNode(dom.create('HR'));\n\n      if (hrNode.nextSibling) {\n        _this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n\n    this.lineHeight = this.wrapCommand(function (value) {\n      _this.style.stylePara(_this.getLastRange(), {\n        lineHeight: value\n      });\n    });\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n\n    this.createLink = this.wrapCommand(function (linkInfo) {\n      var linkUrl = linkInfo.url;\n      var linkText = linkInfo.text;\n      var isNewWindow = linkInfo.isNewWindow;\n      var checkProtocol = linkInfo.checkProtocol;\n\n      var rng = linkInfo.range || _this.getLastRange();\n\n      var additionalTextLength = linkText.length - rng.toString().length;\n\n      if (additionalTextLength > 0 && _this.isLimited(additionalTextLength)) {\n        return;\n      }\n\n      var isTextChanged = rng.toString() !== linkText; // handle spaced urls from input\n\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n\n      if (_this.options.onCreateLink) {\n        linkUrl = _this.options.onCreateLink(linkUrl);\n      } else if (checkProtocol) {\n        // if url doesn't have any protocol and not even a relative or a label, use http:// as default\n        linkUrl = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/.test(linkUrl) ? linkUrl : _this.options.defaultProtocol + linkUrl;\n      }\n\n      var anchors = [];\n\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        var anchor = rng.insertNode(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<A>' + linkText + '</A>')[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = _this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true\n        });\n      }\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(anchors, function (idx, anchor) {\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('href', linkUrl);\n\n        if (isNewWindow) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('target', '_blank');\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).removeAttr('target');\n        }\n      });\n\n      _this.setLastRange(_this.createRangeFromList(anchors).select());\n    });\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n\n    this.color = this.wrapCommand(function (colorInfo) {\n      var foreColor = colorInfo.foreColor;\n      var backColor = colorInfo.backColor;\n\n      if (foreColor) {\n        document.execCommand('foreColor', false, foreColor);\n      }\n\n      if (backColor) {\n        document.execCommand('backColor', false, backColor);\n      }\n    });\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n\n    this.foreColor = this.wrapCommand(function (colorInfo) {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n\n    this.insertTable = this.wrapCommand(function (dim) {\n      var dimension = dim.split('x');\n\n      var rng = _this.getLastRange().deleteContents();\n\n      rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options));\n    });\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n\n    this.removeMedia = this.wrapCommand(function () {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget()).parent();\n\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget()).detach();\n      }\n\n      _this.context.triggerEvent('media.delete', $target, _this.$editable);\n    });\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n\n    this.floatMe = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', value === 'none' ? '' : value);\n    });\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n\n    this.resize = this.wrapCommand(function (value) {\n      var $target = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(_this.restoreTarget());\n      value = parseFloat(value);\n\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: ''\n        });\n      }\n    });\n  }\n\n  Editor_createClass(Editor, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      // bind custom events\n      this.$editable.on('keydown', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          _this2.context.triggerEvent('enter', event);\n        }\n\n        _this2.context.triggerEvent('keydown', event); // keep a snapshot to limit text on input event\n\n\n        _this2.snapshot = _this2.history.makeSnapshot();\n        _this2.hasKeyShortCut = false;\n\n        if (!event.isDefaultPrevented()) {\n          if (_this2.options.shortcuts) {\n            _this2.hasKeyShortCut = _this2.handleKeyMap(event);\n          } else {\n            _this2.preventDefaultEditableShortCuts(event);\n          }\n        }\n\n        if (_this2.isLimited(1, event)) {\n          var lastRange = _this2.getLastRange();\n\n          if (lastRange.eo - lastRange.so === 0) {\n            return false;\n          }\n        }\n\n        _this2.setLastRange(); // record undo in the key event except keyMap.\n\n\n        if (_this2.options.recordEveryKeystroke) {\n          if (_this2.hasKeyShortCut === false) {\n            _this2.history.recordUndo();\n          }\n        }\n      }).on('keyup', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('keyup', event);\n      }).on('focus', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('focus', event);\n      }).on('blur', function (event) {\n        _this2.context.triggerEvent('blur', event);\n      }).on('mousedown', function (event) {\n        _this2.context.triggerEvent('mousedown', event);\n      }).on('mouseup', function (event) {\n        _this2.setLastRange();\n\n        _this2.history.recordUndo();\n\n        _this2.context.triggerEvent('mouseup', event);\n      }).on('scroll', function (event) {\n        _this2.context.triggerEvent('scroll', event);\n      }).on('paste', function (event) {\n        _this2.setLastRange();\n\n        _this2.context.triggerEvent('paste', event);\n      }).on('input', function () {\n        // To limit composition characters (e.g. Korean)\n        if (_this2.isLimited(0) && _this2.snapshot) {\n          _this2.history.applySnapshot(_this2.snapshot);\n        }\n      });\n      this.$editable.attr('spellcheck', this.options.spellCheck);\n      this.$editable.attr('autocorrect', this.options.spellCheck);\n\n      if (this.options.disableGrammar) {\n        this.$editable.attr('data-gramm', false);\n      } // init content before set event\n\n\n      this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n      this.$editable.on(env.inputEventName, func.debounce(function () {\n        _this2.context.triggerEvent('change', _this2.$editable.html(), _this2.$editable);\n      }, 10));\n      this.$editable.on('focusin', function (event) {\n        _this2.context.triggerEvent('focusin', event);\n      }).on('focusout', function (event) {\n        _this2.context.triggerEvent('focusout', event);\n      });\n\n      if (this.options.airMode) {\n        if (this.options.overrideContextMenu) {\n          this.$editor.on('contextmenu', function (event) {\n            _this2.context.triggerEvent('contextmenu', event);\n\n            return false;\n          });\n        }\n      } else {\n        if (this.options.width) {\n          this.$editor.outerWidth(this.options.width);\n        }\n\n        if (this.options.height) {\n          this.$editable.outerHeight(this.options.height);\n        }\n\n        if (this.options.maxHeight) {\n          this.$editable.css('max-height', this.options.maxHeight);\n        }\n\n        if (this.options.minHeight) {\n          this.$editable.css('min-height', this.options.minHeight);\n        }\n      }\n\n      this.history.recordUndo();\n      this.setLastRange();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$editable.off();\n    }\n  }, {\n    key: \"handleKeyMap\",\n    value: function handleKeyMap(event) {\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      var keys = [];\n\n      if (event.metaKey) {\n        keys.push('CMD');\n      }\n\n      if (event.ctrlKey && !event.altKey) {\n        keys.push('CTRL');\n      }\n\n      if (event.shiftKey) {\n        keys.push('SHIFT');\n      }\n\n      var keyName = core_key.nameFromCode[event.keyCode];\n\n      if (keyName) {\n        keys.push(keyName);\n      }\n\n      var eventName = keyMap[keys.join('+')];\n\n      if (keyName === 'TAB' && !this.options.tabDisable) {\n        this.afterCommand();\n      } else if (eventName) {\n        if (this.context.invoke(eventName) !== false) {\n          event.preventDefault(); // if keyMap action was invoked\n\n          return true;\n        }\n      } else if (core_key.isEdit(event.keyCode)) {\n        this.afterCommand();\n      }\n\n      return false;\n    }\n  }, {\n    key: \"preventDefaultEditableShortCuts\",\n    value: function preventDefaultEditableShortCuts(event) {\n      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n      if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) {\n        event.preventDefault();\n      }\n    }\n  }, {\n    key: \"isLimited\",\n    value: function isLimited(pad, event) {\n      pad = pad || 0;\n\n      if (typeof event !== 'undefined') {\n        if (core_key.isMove(event.keyCode) || core_key.isNavigation(event.keyCode) || event.ctrlKey || event.metaKey || lists.contains([core_key.code.BACKSPACE, core_key.code.DELETE], event.keyCode)) {\n          return false;\n        }\n      }\n\n      if (this.options.maxTextLength > 0) {\n        if (this.$editable.text().length + pad > this.options.maxTextLength) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n    /**\n     * create range\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"createRange\",\n    value: function createRange() {\n      this.focus();\n      this.setLastRange();\n      return this.getLastRange();\n    }\n    /**\n     * create a new range from the list of elements\n     *\n     * @param {list} dom element list\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"createRangeFromList\",\n    value: function createRangeFromList(lst) {\n      var startRange = range.createFromNodeBefore(lists.head(lst));\n      var startPoint = startRange.getStartPoint();\n      var endRange = range.createFromNodeAfter(lists.last(lst));\n      var endPoint = endRange.getEndPoint();\n      return range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);\n    }\n    /**\n     * set the last range\n     *\n     * if given rng is exist, set rng as the last range\n     * or create a new range at the end of the document\n     *\n     * @param {WrappedRange} rng\n     */\n\n  }, {\n    key: \"setLastRange\",\n    value: function setLastRange(rng) {\n      if (rng) {\n        this.lastRange = rng;\n      } else {\n        this.lastRange = range.create(this.editable);\n\n        if (external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.lastRange.sc).closest('.note-editable').length === 0) {\n          this.lastRange = range.createFromBodyElement(this.editable);\n        }\n      }\n    }\n    /**\n     * get the last range\n     *\n     * if there is a saved last range, return it\n     * or create a new range and return it\n     *\n     * @return {WrappedRange}\n     */\n\n  }, {\n    key: \"getLastRange\",\n    value: function getLastRange() {\n      if (!this.lastRange) {\n        this.setLastRange();\n      }\n\n      return this.lastRange;\n    }\n    /**\n     * saveRange\n     *\n     * save current range\n     *\n     * @param {Boolean} [thenCollapse=false]\n     */\n\n  }, {\n    key: \"saveRange\",\n    value: function saveRange(thenCollapse) {\n      if (thenCollapse) {\n        this.getLastRange().collapse().select();\n      }\n    }\n    /**\n     * restoreRange\n     *\n     * restore lately range\n     */\n\n  }, {\n    key: \"restoreRange\",\n    value: function restoreRange() {\n      if (this.lastRange) {\n        this.lastRange.select();\n        this.focus();\n      }\n    }\n  }, {\n    key: \"saveTarget\",\n    value: function saveTarget(node) {\n      this.$editable.data('target', node);\n    }\n  }, {\n    key: \"clearTarget\",\n    value: function clearTarget() {\n      this.$editable.removeData('target');\n    }\n  }, {\n    key: \"restoreTarget\",\n    value: function restoreTarget() {\n      return this.$editable.data('target');\n    }\n    /**\n     * currentStyle\n     *\n     * current style\n     * @return {Object|Boolean} unfocus\n     */\n\n  }, {\n    key: \"currentStyle\",\n    value: function currentStyle() {\n      var rng = range.create();\n\n      if (rng) {\n        rng = rng.normalize();\n      }\n\n      return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n    }\n    /**\n     * style from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n\n  }, {\n    key: \"styleFromNode\",\n    value: function styleFromNode($node) {\n      return this.style.fromNode($node);\n    }\n    /**\n     * undo\n     */\n\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.undo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /*\n    * commit\n    */\n\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.commit();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /**\n     * redo\n     */\n\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      this.context.triggerEvent('before.command', this.$editable.html());\n      this.history.redo();\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n    /**\n     * before command\n     */\n\n  }, {\n    key: \"beforeCommand\",\n    value: function beforeCommand() {\n      this.context.triggerEvent('before.command', this.$editable.html()); // Set styleWithCSS before run a command\n\n      document.execCommand('styleWithCSS', false, this.options.styleWithCSS); // keep focus on editable before command execution\n\n      this.focus();\n    }\n    /**\n     * after command\n     * @param {Boolean} isPreventTrigger\n     */\n\n  }, {\n    key: \"afterCommand\",\n    value: function afterCommand(isPreventTrigger) {\n      this.normalizeContent();\n      this.history.recordUndo();\n\n      if (!isPreventTrigger) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n    /**\n     * handle tab key\n     */\n\n  }, {\n    key: \"tab\",\n    value: function tab() {\n      var rng = this.getLastRange();\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n\n        if (!this.isLimited(this.options.tabSize)) {\n          this.beforeCommand();\n          this.typing.insertTab(rng, this.options.tabSize);\n          this.afterCommand();\n        }\n      }\n    }\n    /**\n     * handle shift+tab key\n     */\n\n  }, {\n    key: \"untab\",\n    value: function untab() {\n      var rng = this.getLastRange();\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.table.tab(rng, true);\n      } else {\n        if (this.options.tabSize === 0) {\n          return false;\n        }\n      }\n    }\n    /**\n     * run given function between beforeCommand and afterCommand\n     */\n\n  }, {\n    key: \"wrapCommand\",\n    value: function wrapCommand(fn) {\n      return function () {\n        this.beforeCommand();\n        fn.apply(this, arguments);\n        this.afterCommand();\n      };\n    }\n    /**\n     * insert image\n     *\n     * @param {String} src\n     * @param {String|Function} param\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"insertImage\",\n    value: function insertImage(src, param) {\n      var _this3 = this;\n\n      return createImage(src, param).then(function ($image) {\n        _this3.beforeCommand();\n\n        if (typeof param === 'function') {\n          param($image);\n        } else {\n          if (typeof param === 'string') {\n            $image.attr('data-filename', param);\n          }\n\n          $image.css('width', Math.min(_this3.$editable.width(), $image.width()));\n        }\n\n        $image.show();\n\n        _this3.getLastRange().insertNode($image[0]);\n\n        _this3.setLastRange(range.createFromNodeAfter($image[0]).select());\n\n        _this3.afterCommand();\n      }).fail(function (e) {\n        _this3.context.triggerEvent('image.upload.error', e);\n      });\n    }\n    /**\n     * insertImages\n     * @param {File[]} files\n     */\n\n  }, {\n    key: \"insertImagesAsDataURL\",\n    value: function insertImagesAsDataURL(files) {\n      var _this4 = this;\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(files, function (idx, file) {\n        var filename = file.name;\n\n        if (_this4.options.maximumImageFileSize && _this4.options.maximumImageFileSize < file.size) {\n          _this4.context.triggerEvent('image.upload.error', _this4.lang.image.maximumFileSizeError);\n        } else {\n          readFileAsDataURL(file).then(function (dataURL) {\n            return _this4.insertImage(dataURL, filename);\n          }).fail(function () {\n            _this4.context.triggerEvent('image.upload.error');\n          });\n        }\n      });\n    }\n    /**\n     * insertImagesOrCallback\n     * @param {File[]} files\n     */\n\n  }, {\n    key: \"insertImagesOrCallback\",\n    value: function insertImagesOrCallback(files) {\n      var callbacks = this.options.callbacks; // If onImageUpload set,\n\n      if (callbacks.onImageUpload) {\n        this.context.triggerEvent('image.upload', files); // else insert Image as dataURL\n      } else {\n        this.insertImagesAsDataURL(files);\n      }\n    }\n    /**\n     * return selected plain text\n     * @return {String} text\n     */\n\n  }, {\n    key: \"getSelectedText\",\n    value: function getSelectedText() {\n      var rng = this.getLastRange(); // if range on anchor, expand range with anchor\n\n      if (rng.isOnAnchor()) {\n        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n      }\n\n      return rng.toString();\n    }\n  }, {\n    key: \"onFormatBlock\",\n    value: function onFormatBlock(tagName, $target) {\n      // [workaround] for MSIE, IE need `<`\n      document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName); // support custom class\n\n      if ($target && $target.length) {\n        // find the exact element has given tagName\n        if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n          $target = $target.find(tagName);\n        }\n\n        if ($target && $target.length) {\n          var className = $target[0].className || '';\n\n          if (className) {\n            var currentRange = this.createRange();\n            var $parent = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()([currentRange.sc, currentRange.ec]).closest(tagName);\n            $parent.addClass(className);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"formatPara\",\n    value: function formatPara() {\n      this.formatBlock('P');\n    }\n  }, {\n    key: \"fontStyling\",\n    value: function fontStyling(target, value) {\n      var rng = this.getLastRange();\n\n      if (rng !== '') {\n        var spans = this.style.styleNodes(rng);\n        this.$editor.find('.note-status-output').html('');\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(spans).css(target, value); // [workaround] added styled bogus span for style\n        //  - also bogus character needed for cursor position\n\n        if (rng.isCollapsed()) {\n          var firstSpan = lists.head(spans);\n\n          if (firstSpan && !dom.nodeLength(firstSpan)) {\n            firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n            range.createFromNode(firstSpan.firstChild).select();\n            this.setLastRange();\n            this.$editable.data(KEY_BOGUS, firstSpan);\n          }\n        } else {\n          this.setLastRange(this.createRangeFromList(spans).select());\n        }\n      } else {\n        var noteStatusOutput = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.now();\n        this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n        setTimeout(function () {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('#note-status-output-' + noteStatusOutput).remove();\n        }, 5000);\n      }\n    }\n    /**\n     * unlink\n     *\n     * @type command\n     */\n\n  }, {\n    key: \"unlink\",\n    value: function unlink() {\n      var rng = this.getLastRange();\n\n      if (rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        rng = range.createFromNode(anchor);\n        rng.select();\n        this.setLastRange();\n        this.beforeCommand();\n        document.execCommand('unlink');\n        this.afterCommand();\n      }\n    }\n    /**\n     * returns link info\n     *\n     * @return {Object}\n     * @return {WrappedRange} return.range\n     * @return {String} return.text\n     * @return {Boolean} [return.isNewWindow=true]\n     * @return {String} [return.url=\"\"]\n     */\n\n  }, {\n    key: \"getLinkInfo\",\n    value: function getLinkInfo() {\n      var rng = this.getLastRange().expand(dom.isAnchor); // Get the first anchor on range(for edit).\n\n      var $anchor = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(lists.head(rng.nodes(dom.isAnchor)));\n      var linkInfo = {\n        range: rng,\n        text: rng.toString(),\n        url: $anchor.length ? $anchor.attr('href') : ''\n      }; // When anchor exists,\n\n      if ($anchor.length) {\n        // Set isNewWindow by checking its target.\n        linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n      }\n\n      return linkInfo;\n    }\n  }, {\n    key: \"addRow\",\n    value: function addRow(position) {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addRow(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"addCol\",\n    value: function addCol(position) {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.addCol(rng, position);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteRow\",\n    value: function deleteRow() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteRow(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteCol\",\n    value: function deleteCol() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteCol(rng);\n        this.afterCommand();\n      }\n    }\n  }, {\n    key: \"deleteTable\",\n    value: function deleteTable() {\n      var rng = this.getLastRange(this.$editable);\n\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        this.beforeCommand();\n        this.table.deleteTable(rng);\n        this.afterCommand();\n      }\n    }\n    /**\n     * @param {Position} pos\n     * @param {jQuery} $target - target element\n     * @param {Boolean} [bKeepRatio] - keep ratio\n     */\n\n  }, {\n    key: \"resizeTo\",\n    value: function resizeTo(pos, $target, bKeepRatio) {\n      var imageSize;\n\n      if (bKeepRatio) {\n        var newRatio = pos.y / pos.x;\n        var ratio = $target.data('ratio');\n        imageSize = {\n          width: ratio > newRatio ? pos.x : pos.y / ratio,\n          height: ratio > newRatio ? pos.x * ratio : pos.y\n        };\n      } else {\n        imageSize = {\n          width: pos.x,\n          height: pos.y\n        };\n      }\n\n      $target.css(imageSize);\n    }\n    /**\n     * returns whether editable area has focus or not.\n     */\n\n  }, {\n    key: \"hasFocus\",\n    value: function hasFocus() {\n      return this.$editable.is(':focus');\n    }\n    /**\n     * set focus\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // [workaround] Screen will move when page is scolled in IE.\n      //  - do focus when not focused\n      if (!this.hasFocus()) {\n        this.$editable.focus();\n      }\n    }\n    /**\n     * returns whether contents is empty or not.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n    }\n    /**\n     * Removes all contents and restores the editable instance to an _emptyPara_.\n     */\n\n  }, {\n    key: \"empty\",\n    value: function empty() {\n      this.context.invoke('code', dom.emptyPara);\n    }\n    /**\n     * normalize content\n     */\n\n  }, {\n    key: \"normalizeContent\",\n    value: function normalizeContent() {\n      this.$editable[0].normalize();\n    }\n  }]);\n\n  return Editor;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Clipboard.js\nfunction Clipboard_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Clipboard_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Clipboard_createClass(Constructor, protoProps, staticProps) { if (protoProps) Clipboard_defineProperties(Constructor.prototype, protoProps); if (staticProps) Clipboard_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Clipboard_Clipboard = /*#__PURE__*/function () {\n  function Clipboard(context) {\n    Clipboard_classCallCheck(this, Clipboard);\n\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n  }\n\n  Clipboard_createClass(Clipboard, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.$editable.on('paste', this.pasteByEvent.bind(this));\n    }\n    /**\n     * paste by clipboard event\n     *\n     * @param {Event} event\n     */\n\n  }, {\n    key: \"pasteByEvent\",\n    value: function pasteByEvent(event) {\n      var _this = this;\n\n      var clipboardData = event.originalEvent.clipboardData;\n\n      if (clipboardData && clipboardData.items && clipboardData.items.length) {\n        var item = clipboardData.items.length > 1 ? clipboardData.items[1] : lists.head(clipboardData.items);\n\n        if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {\n          // paste img file\n          this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);\n          event.preventDefault();\n        } else if (item.kind === 'string') {\n          // paste text with maxTextLength check\n          if (this.context.invoke('editor.isLimited', clipboardData.getData('Text').length)) {\n            event.preventDefault();\n          }\n        }\n      } else if (window.clipboardData) {\n        // for IE\n        var text = window.clipboardData.getData('text');\n\n        if (this.context.invoke('editor.isLimited', text.length)) {\n          event.preventDefault();\n        }\n      } // Call editor.afterCommand after proceeding default event handler\n\n\n      setTimeout(function () {\n        _this.context.invoke('editor.afterCommand');\n      }, 10);\n    }\n  }]);\n\n  return Clipboard;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Dropzone.js\nfunction Dropzone_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Dropzone_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Dropzone_createClass(Constructor, protoProps, staticProps) { if (protoProps) Dropzone_defineProperties(Constructor.prototype, protoProps); if (staticProps) Dropzone_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Dropzone_Dropzone = /*#__PURE__*/function () {\n  function Dropzone(context) {\n    Dropzone_classCallCheck(this, Dropzone);\n\n    this.context = context;\n    this.$eventListener = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n    this.$dropzone = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(['<div class=\"note-dropzone\">', '<div class=\"note-dropzone-message\"></div>', '</div>'].join('')).prependTo(this.$editor);\n  }\n  /**\n   * attach Drag and Drop Events\n   */\n\n\n  Dropzone_createClass(Dropzone, [{\n    key: \"initialize\",\n    value: function initialize() {\n      if (this.options.disableDragAndDrop) {\n        // prevent default drop event\n        this.documentEventHandlers.onDrop = function (e) {\n          e.preventDefault();\n        }; // do not consider outside of dropzone\n\n\n        this.$eventListener = this.$dropzone;\n        this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n      } else {\n        this.attachDragAndDropEvent();\n      }\n    }\n    /**\n     * attach Drag and Drop Events\n     */\n\n  }, {\n    key: \"attachDragAndDropEvent\",\n    value: function attachDragAndDropEvent() {\n      var _this = this;\n\n      var collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n      var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n\n      this.documentEventHandlers.onDragenter = function (e) {\n        var isCodeview = _this.context.invoke('codeview.isActivated');\n\n        var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0;\n\n        if (!isCodeview && !collection.length && hasEditorSize) {\n          _this.$editor.addClass('dragover');\n\n          _this.$dropzone.width(_this.$editor.width());\n\n          _this.$dropzone.height(_this.$editor.height());\n\n          $dropzoneMessage.text(_this.lang.image.dragImageHere);\n        }\n\n        collection = collection.add(e.target);\n      };\n\n      this.documentEventHandlers.onDragleave = function (e) {\n        collection = collection.not(e.target); // If nodeName is BODY, then just make it over (fix for IE)\n\n        if (!collection.length || e.target.nodeName === 'BODY') {\n          collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n\n          _this.$editor.removeClass('dragover');\n        }\n      };\n\n      this.documentEventHandlers.onDrop = function () {\n        collection = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()();\n\n        _this.$editor.removeClass('dragover');\n      }; // show dropzone on dragenter when dragging a object to document\n      // -but only if the editor is visible, i.e. has a positive width and height\n\n\n      this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter).on('dragleave', this.documentEventHandlers.onDragleave).on('drop', this.documentEventHandlers.onDrop); // change dropzone's message on hover.\n\n      this.$dropzone.on('dragenter', function () {\n        _this.$dropzone.addClass('hover');\n\n        $dropzoneMessage.text(_this.lang.image.dropImage);\n      }).on('dragleave', function () {\n        _this.$dropzone.removeClass('hover');\n\n        $dropzoneMessage.text(_this.lang.image.dragImageHere);\n      }); // attach dropImage\n\n      this.$dropzone.on('drop', function (event) {\n        var dataTransfer = event.originalEvent.dataTransfer; // stop the browser from opening the dropped content\n\n        event.preventDefault();\n\n        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n          _this.$editable.focus();\n\n          _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n        } else {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(dataTransfer.types, function (idx, type) {\n            // skip moz-specific types\n            if (type.toLowerCase().indexOf('_moz_') > -1) {\n              return;\n            }\n\n            var content = dataTransfer.getData(type);\n\n            if (type.toLowerCase().indexOf('text') > -1) {\n              _this.context.invoke('editor.pasteHTML', content);\n            } else {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(content).each(function (idx, item) {\n                _this.context.invoke('editor.insertNode', item);\n              });\n            }\n          });\n        }\n      }).on('dragover', false); // prevent default dragover event\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n\n      Object.keys(this.documentEventHandlers).forEach(function (key) {\n        _this2.$eventListener.off(key.substr(2).toLowerCase(), _this2.documentEventHandlers[key]);\n      });\n      this.documentEventHandlers = {};\n    }\n  }]);\n\n  return Dropzone;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Codeview.js\nfunction _createForOfIteratorHelper(o) { if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Codeview_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Codeview_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Codeview_createClass(Constructor, protoProps, staticProps) { if (protoProps) Codeview_defineProperties(Constructor.prototype, protoProps); if (staticProps) Codeview_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n/**\n * @class Codeview\n */\n\nvar Codeview_CodeView = /*#__PURE__*/function () {\n  function CodeView(context) {\n    Codeview_classCallCheck(this, CodeView);\n\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n\n  Codeview_createClass(CodeView, [{\n    key: \"sync\",\n    value: function sync(html) {\n      var isCodeview = this.isActivated();\n      var CodeMirror = this.CodeMirrorConstructor;\n\n      if (isCodeview) {\n        if (html) {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').getDoc().setValue(html);\n          } else {\n            this.$codable.val(html);\n          }\n        } else {\n          if (CodeMirror) {\n            this.$codable.data('cmEditor').save();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      this.$codable.on('keyup', function (event) {\n        if (event.keyCode === core_key.code.ESCAPE) {\n          _this.deactivate();\n        }\n      });\n    }\n    /**\n     * @return {Boolean}\n     */\n\n  }, {\n    key: \"isActivated\",\n    value: function isActivated() {\n      return this.$editor.hasClass('codeview');\n    }\n    /**\n     * toggle codeview\n     */\n\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.isActivated()) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n\n      this.context.triggerEvent('codeview.toggled');\n    }\n    /**\n     * purify input value\n     * @param value\n     * @returns {*}\n     */\n\n  }, {\n    key: \"purify\",\n    value: function purify(value) {\n      if (this.options.codeviewFilter) {\n        // filter code view regex\n        value = value.replace(this.options.codeviewFilterRegex, ''); // allow specific iframe tag\n\n        if (this.options.codeviewIframeFilter) {\n          var whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n          value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function (tag) {\n            // remove if src attribute is duplicated\n            if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n              return '';\n            }\n\n            var _iterator = _createForOfIteratorHelper(whitelist),\n                _step;\n\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var src = _step.value;\n\n                // pass if src is trusted\n                if (new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"').test(tag)) {\n                  return tag;\n                }\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n\n            return '';\n          });\n        }\n      }\n\n      return value;\n    }\n    /**\n     * activate code view\n     */\n\n  }, {\n    key: \"activate\",\n    value: function activate() {\n      var _this2 = this;\n\n      var CodeMirror = this.CodeMirrorConstructor;\n      this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n      this.$codable.height(this.$editable.height());\n      this.context.invoke('toolbar.updateCodeview', true);\n      this.context.invoke('airPopover.updateCodeview', true);\n      this.$editor.addClass('codeview');\n      this.$codable.focus(); // activate CodeMirror as codable\n\n      if (CodeMirror) {\n        var cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror); // CodeMirror TernServer\n\n        if (this.options.codemirror.tern) {\n          var server = new CodeMirror.TernServer(this.options.codemirror.tern);\n          cmEditor.ternServer = server;\n          cmEditor.on('cursorActivity', function (cm) {\n            server.updateArgHints(cm);\n          });\n        }\n\n        cmEditor.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n        });\n        cmEditor.on('change', function () {\n          _this2.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n        }); // CodeMirror hasn't Padding.\n\n        cmEditor.setSize(null, this.$editable.outerHeight());\n        this.$codable.data('cmEditor', cmEditor);\n      } else {\n        this.$codable.on('blur', function (event) {\n          _this2.context.triggerEvent('blur.codeview', _this2.$codable.val(), event);\n\n          var value = _this2.purify(dom.value(_this2.$codable, _this2.options.prettifyHtml) || dom.emptyPara);\n\n          _this2.$editable.html(value);\n\n          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);\n        });\n        this.$codable.on('input', function () {\n          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);\n        });\n      }\n    }\n    /**\n     * deactivate code view\n     */\n\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      var CodeMirror = this.CodeMirrorConstructor; // deactivate CodeMirror as codable\n\n      if (CodeMirror) {\n        var cmEditor = this.$codable.data('cmEditor');\n        this.$codable.val(cmEditor.getValue());\n        cmEditor.toTextArea();\n      }\n\n      var value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n      var isChange = this.$editable.html() !== value;\n      this.$editable.html(value);\n      this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n      this.$editor.removeClass('codeview');\n\n      if (isChange) {\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n\n      this.$editable.focus();\n      this.context.invoke('toolbar.updateCodeview', false);\n      this.context.invoke('airPopover.updateCodeview', false);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isActivated()) {\n        this.deactivate();\n      }\n    }\n  }]);\n\n  return CodeView;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Statusbar.js\nfunction Statusbar_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Statusbar_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Statusbar_createClass(Constructor, protoProps, staticProps) { if (protoProps) Statusbar_defineProperties(Constructor.prototype, protoProps); if (staticProps) Statusbar_defineProperties(Constructor, staticProps); return Constructor; }\n\n\nvar EDITABLE_PADDING = 24;\n\nvar Statusbar_Statusbar = /*#__PURE__*/function () {\n  function Statusbar(context) {\n    Statusbar_classCallCheck(this, Statusbar);\n\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n  }\n\n  Statusbar_createClass(Statusbar, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      if (this.options.airMode || this.options.disableResizeEditor) {\n        this.destroy();\n        return;\n      }\n\n      this.$statusbar.on('mousedown', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        var editableTop = _this.$editable.offset().top - _this.$document.scrollTop();\n\n        var onMouseMove = function onMouseMove(event) {\n          var height = event.clientY - (editableTop + EDITABLE_PADDING);\n          height = _this.options.minheight > 0 ? Math.max(height, _this.options.minheight) : height;\n          height = _this.options.maxHeight > 0 ? Math.min(height, _this.options.maxHeight) : height;\n\n          _this.$editable.height(height);\n        };\n\n        _this.$document.on('mousemove', onMouseMove).one('mouseup', function () {\n          _this.$document.off('mousemove', onMouseMove);\n        });\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$statusbar.off();\n      this.$statusbar.addClass('locked');\n    }\n  }]);\n\n  return Statusbar;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Fullscreen.js\nfunction Fullscreen_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Fullscreen_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Fullscreen_createClass(Constructor, protoProps, staticProps) { if (protoProps) Fullscreen_defineProperties(Constructor.prototype, protoProps); if (staticProps) Fullscreen_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Fullscreen_Fullscreen = /*#__PURE__*/function () {\n  function Fullscreen(context) {\n    var _this = this;\n\n    Fullscreen_classCallCheck(this, Fullscreen);\n\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.$window = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(window);\n    this.$scrollbar = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('html, body');\n\n    this.onResize = function () {\n      _this.resizeTo({\n        h: _this.$window.height() - _this.$toolbar.outerHeight()\n      });\n    };\n  }\n\n  Fullscreen_createClass(Fullscreen, [{\n    key: \"resizeTo\",\n    value: function resizeTo(size) {\n      this.$editable.css('height', size.h);\n      this.$codable.css('height', size.h);\n\n      if (this.$codable.data('cmeditor')) {\n        this.$codable.data('cmeditor').setsize(null, size.h);\n      }\n    }\n    /**\n     * toggle fullscreen\n     */\n\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      this.$editor.toggleClass('fullscreen');\n\n      if (this.isFullscreen()) {\n        this.$editable.data('orgHeight', this.$editable.css('height'));\n        this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n        this.$editable.css('maxHeight', '');\n        this.$window.on('resize', this.onResize).trigger('resize');\n        this.$scrollbar.css('overflow', 'hidden');\n      } else {\n        this.$window.off('resize', this.onResize);\n        this.resizeTo({\n          h: this.$editable.data('orgHeight')\n        });\n        this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n        this.$scrollbar.css('overflow', 'visible');\n      }\n\n      this.context.invoke('toolbar.updateFullscreen', this.isFullscreen());\n    }\n  }, {\n    key: \"isFullscreen\",\n    value: function isFullscreen() {\n      return this.$editor.hasClass('fullscreen');\n    }\n  }]);\n\n  return Fullscreen;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Handle.js\nfunction Handle_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Handle_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Handle_createClass(Constructor, protoProps, staticProps) { if (protoProps) Handle_defineProperties(Constructor.prototype, protoProps); if (staticProps) Handle_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar Handle_Handle = /*#__PURE__*/function () {\n  function Handle(context) {\n    var _this = this;\n\n    Handle_classCallCheck(this, Handle);\n\n    this.context = context;\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        if (_this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown() {\n        _this.update();\n      },\n      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n\n  Handle_createClass(Handle, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$handle = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(['<div class=\"note-handle\">', '<div class=\"note-control-selection\">', '<div class=\"note-control-selection-bg\"></div>', '<div class=\"note-control-holder note-control-nw\"></div>', '<div class=\"note-control-holder note-control-ne\"></div>', '<div class=\"note-control-holder note-control-sw\"></div>', '<div class=\"', this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing', ' note-control-se\"></div>', this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>', '</div>', '</div>'].join('')).prependTo(this.$editingArea);\n      this.$handle.on('mousedown', function (event) {\n        if (dom.isControlSizing(event.target)) {\n          event.preventDefault();\n          event.stopPropagation();\n\n          var $target = _this2.$handle.find('.note-control-selection').data('target');\n\n          var posStart = $target.offset();\n\n          var scrollTop = _this2.$document.scrollTop();\n\n          var onMouseMove = function onMouseMove(event) {\n            _this2.context.invoke('editor.resizeTo', {\n              x: event.clientX - posStart.left,\n              y: event.clientY - (posStart.top - scrollTop)\n            }, $target, !event.shiftKey);\n\n            _this2.update($target[0], event);\n          };\n\n          _this2.$document.on('mousemove', onMouseMove).one('mouseup', function (e) {\n            e.preventDefault();\n\n            _this2.$document.off('mousemove', onMouseMove);\n\n            _this2.context.invoke('editor.afterCommand');\n          });\n\n          if (!$target.data('ratio')) {\n            // original ratio.\n            $target.data('ratio', $target.height() / $target.width());\n          }\n        }\n      }); // Listen for scrolling on the handle overlay.\n\n      this.$handle.on('wheel', function (e) {\n        e.preventDefault();\n\n        _this2.update();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$handle.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n\n      var isImage = dom.isImg(target);\n      var $selection = this.$handle.find('.note-control-selection');\n      this.context.invoke('imagePopover.update', target, event);\n\n      if (isImage) {\n        var $image = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(target);\n        var position = $image.position();\n        var pos = {\n          left: position.left + parseInt($image.css('marginLeft'), 10),\n          top: position.top + parseInt($image.css('marginTop'), 10)\n        }; // exclude margin\n\n        var imageSize = {\n          w: $image.outerWidth(false),\n          h: $image.outerHeight(false)\n        };\n        $selection.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top,\n          width: imageSize.w,\n          height: imageSize.h\n        }).data('target', $image); // save current image element.\n\n        var origImageObj = new Image();\n        origImageObj.src = $image.attr('src');\n        var sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n        $selection.find('.note-control-selection-info').text(sizingText);\n        this.context.invoke('editor.saveTarget', target);\n      } else {\n        this.hide();\n      }\n\n      return isImage;\n    }\n    /**\n     * hide\n     *\n     * @param {jQuery} $handle\n     */\n\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.context.invoke('editor.clearTarget');\n      this.$handle.children().hide();\n    }\n  }]);\n\n  return Handle;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoLink.js\nfunction AutoLink_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoLink_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoLink_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoLink_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoLink_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar defaultScheme = 'http://';\nvar linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\nvar AutoLink_AutoLink = /*#__PURE__*/function () {\n  function AutoLink(context) {\n    var _this = this;\n\n    AutoLink_classCallCheck(this, AutoLink);\n\n    this.context = context;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      }\n    };\n  }\n\n  AutoLink_createClass(AutoLink, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWordRange = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWordRange) {\n        return;\n      }\n\n      var keyword = this.lastWordRange.toString();\n      var match = keyword.match(linkPattern);\n\n      if (match && (match[1] || match[2])) {\n        var link = match[1] ? keyword : defaultScheme + keyword;\n        var urlText = this.options.showDomainOnlyForAutolink ? keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:www\\.)?/i, '').split('/')[0] : keyword;\n        var node = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<a />').html(urlText).attr('href', link)[0];\n\n        if (this.context.options.linkTargetBlank) {\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).attr('target', '_blank');\n        }\n\n        this.lastWordRange.insertNode(node);\n        this.lastWordRange = null;\n        this.context.invoke('editor.focus');\n      }\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      if (lists.contains([core_key.code.ENTER, core_key.code.SPACE], e.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWordRange = wordRange;\n      }\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      if (lists.contains([core_key.code.ENTER, core_key.code.SPACE], e.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n\n  return AutoLink;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoSync.js\nfunction AutoSync_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoSync_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoSync_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoSync_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoSync_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n/**\n * textarea auto sync.\n */\n\nvar AutoSync_AutoSync = /*#__PURE__*/function () {\n  function AutoSync(context) {\n    var _this = this;\n\n    AutoSync_classCallCheck(this, AutoSync);\n\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': function summernoteChange() {\n        _this.$note.val(context.invoke('code'));\n      }\n    };\n  }\n\n  AutoSync_createClass(AutoSync, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return dom.isTextarea(this.$note[0]);\n    }\n  }]);\n\n  return AutoSync;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AutoReplace.js\nfunction AutoReplace_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AutoReplace_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AutoReplace_createClass(Constructor, protoProps, staticProps) { if (protoProps) AutoReplace_defineProperties(Constructor.prototype, protoProps); if (staticProps) AutoReplace_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar AutoReplace_AutoReplace = /*#__PURE__*/function () {\n  function AutoReplace(context) {\n    var _this = this;\n\n    AutoReplace_classCallCheck(this, AutoReplace);\n\n    this.context = context;\n    this.options = context.options.replace || {};\n    this.keys = [core_key.code.ENTER, core_key.code.SPACE, core_key.code.PERIOD, core_key.code.COMMA, core_key.code.SEMICOLON, core_key.code.SLASH];\n    this.previousKeydownCode = null;\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      }\n    };\n  }\n\n  AutoReplace_createClass(AutoReplace, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.match;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.lastWord = null;\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      if (!this.lastWord) {\n        return;\n      }\n\n      var self = this;\n      var keyword = this.lastWord.toString();\n      this.options.match(keyword, function (match) {\n        if (match) {\n          var node = '';\n\n          if (typeof match === 'string') {\n            node = dom.createText(match);\n          } else if (match instanceof jQuery) {\n            node = match[0];\n          } else if (match instanceof Node) {\n            node = match;\n          }\n\n          if (!node) return;\n          self.lastWord.insertNode(node);\n          self.lastWord = null;\n          self.context.invoke('editor.focus');\n        }\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      // this forces it to remember the last whole word, even if multiple termination keys are pressed\n      // before the previous key is let go.\n      if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n        this.previousKeydownCode = e.keyCode;\n        return;\n      }\n\n      if (lists.contains(this.keys, e.keyCode)) {\n        var wordRange = this.context.invoke('editor.createRange').getWordRange();\n        this.lastWord = wordRange;\n      }\n\n      this.previousKeydownCode = e.keyCode;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      if (lists.contains(this.keys, e.keyCode)) {\n        this.replace();\n      }\n    }\n  }]);\n\n  return AutoReplace;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Placeholder.js\nfunction Placeholder_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Placeholder_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Placeholder_createClass(Constructor, protoProps, staticProps) { if (protoProps) Placeholder_defineProperties(Constructor.prototype, protoProps); if (staticProps) Placeholder_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Placeholder_Placeholder = /*#__PURE__*/function () {\n  function Placeholder(context) {\n    var _this = this;\n\n    Placeholder_classCallCheck(this, Placeholder);\n\n    this.context = context;\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n\n    this.events = {\n      'summernote.init summernote.change': function summernoteInitSummernoteChange() {\n        _this.update();\n      },\n      'summernote.codeview.toggled': function summernoteCodeviewToggled() {\n        _this.update();\n      }\n    };\n  }\n\n  Placeholder_createClass(Placeholder, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !!this.options.placeholder;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$placeholder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-placeholder\">');\n      this.$placeholder.on('click', function () {\n        _this2.context.invoke('focus');\n      }).html(this.options.placeholder).prependTo(this.$editingArea);\n      this.update();\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$placeholder.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n      this.$placeholder.toggle(isShow);\n    }\n  }]);\n\n  return Placeholder;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Buttons.js\nfunction Buttons_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Buttons_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Buttons_createClass(Constructor, protoProps, staticProps) { if (protoProps) Buttons_defineProperties(Constructor.prototype, protoProps); if (staticProps) Buttons_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar Buttons_Buttons = /*#__PURE__*/function () {\n  function Buttons(context) {\n    Buttons_classCallCheck(this, Buttons);\n\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']);\n  }\n\n  Buttons_createClass(Buttons, [{\n    key: \"representShortcut\",\n    value: function representShortcut(editorMethod) {\n      var shortcut = this.invertedKeyMap[editorMethod];\n\n      if (!this.options.shortcuts || !shortcut) {\n        return '';\n      }\n\n      if (env.isMac) {\n        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n      }\n\n      shortcut = shortcut.replace('BACKSLASH', '\\\\').replace('SLASH', '/').replace('LEFTBRACKET', '[').replace('RIGHTBRACKET', ']');\n      return ' (' + shortcut + ')';\n    }\n  }, {\n    key: \"button\",\n    value: function button(o) {\n      if (!this.options.tooltip && o.tooltip) {\n        delete o.tooltip;\n      }\n\n      o.container = this.options.container;\n      return this.ui.button(o);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.addToolbarButtons();\n      this.addImagePopoverButtons();\n      this.addLinkPopoverButtons();\n      this.addTablePopoverButtons();\n      this.fontInstalledMap = {};\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      delete this.fontInstalledMap;\n    }\n  }, {\n    key: \"isFontInstalled\",\n    value: function isFontInstalled(name) {\n      if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n        this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name);\n      }\n\n      return this.fontInstalledMap[name];\n    }\n  }, {\n    key: \"isFontDeservedToAdd\",\n    value: function isFontDeservedToAdd(name) {\n      name = name.toLowerCase();\n      return name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1;\n    }\n  }, {\n    key: \"colorPalette\",\n    value: function colorPalette(className, tooltip, backColor, foreColor) {\n      var _this = this;\n\n      return this.ui.buttonGroup({\n        className: 'note-color ' + className,\n        children: [this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: function click(e) {\n            var $button = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget);\n\n            if (backColor && foreColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor')\n              });\n            } else if (backColor) {\n              _this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor')\n              });\n            } else if (foreColor) {\n              _this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor')\n              });\n            }\n          },\n          callback: function callback($button) {\n            var $recentColor = $button.find('.note-recent-color');\n\n            if (backColor) {\n              $recentColor.css('background-color', _this.options.colorButton.backColor);\n              $button.attr('data-backColor', _this.options.colorButton.backColor);\n            }\n\n            if (foreColor) {\n              $recentColor.css('color', _this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', _this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          }\n        }), this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), this.ui.dropdown({\n          items: (backColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">', this.lang.color.transparent, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"backColorPicker\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette\">', '</div>', '<div class=\"note-holder-custom\" id=\"backColorPalette\" data-event=\"backColor\"></div>', '</div>'].join('') : '') + (foreColor ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>', '<div>', '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">', this.lang.color.resetToDefault, '</button>', '</div>', '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>', '<div>', '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker\">', this.lang.color.cpSelect, '</button>', '<input type=\"color\" id=\"foreColorPicker\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette\">', '</div>', // Fix missing Div, Commented to find easily if it's wrong\n          '<div class=\"note-holder-custom\" id=\"foreColorPalette\" data-event=\"foreColor\"></div>', '</div>'].join('') : ''),\n          callback: function callback($dropdown) {\n            $dropdown.find('.note-holder').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: _this.options.colors,\n                colorsName: _this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n\n            var customColors = [['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF']];\n            $dropdown.find('.note-holder-custom').each(function (idx, item) {\n              var $holder = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n              $holder.append(_this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: _this.options.container,\n                tooltip: _this.options.tooltip\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each(function (idx, item) {\n              external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item).change(function () {\n                var $chip = $dropdown.find('#' + external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this).data('event')).find('.note-color-btn').first();\n                var color = this.value.toUpperCase();\n                $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n                $chip.click();\n              });\n            });\n          },\n          click: function click(event) {\n            event.stopPropagation();\n            var $parent = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('.' + className).find('.note-dropdown-menu');\n            var $button = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target);\n            var eventName = $button.data('event');\n            var value = $button.attr('data-value');\n\n            if (eventName === 'openPalette') {\n              var $picker = $parent.find('#' + value);\n              var $palette = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]); // Shift palette chips\n\n              var $chip = $palette.find('.note-color-btn').last().detach(); // Set chip attributes\n\n              var color = $picker.val();\n              $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.click();\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                var key = eventName === 'backColor' ? 'background-color' : 'color';\n                var $color = $button.closest('.note-color').find('.note-recent-color');\n                var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n\n              _this.context.invoke('editor.' + eventName, value);\n            }\n          }\n        })]\n      }).render();\n    }\n  }, {\n    key: \"addToolbarButtons\",\n    value: function addToolbarButtons() {\n      var _this2 = this;\n\n      this.context.memo('button.style', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.magic), _this2.options),\n          tooltip: _this2.lang.style.style,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          className: 'dropdown-style',\n          items: _this2.options.styleTags,\n          title: _this2.lang.style.style,\n          template: function template(item) {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: Object.prototype.hasOwnProperty.call(_this2.lang.style, item) ? _this2.lang.style[item] : item\n              };\n            }\n\n            var tag = item.tag;\n            var title = item.title;\n            var style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            var className = item.className ? ' class=\"' + item.className + '\"' : '';\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: _this2.context.createInvokeHandler('editor.formatBlock')\n        })]).render();\n      });\n\n      var _loop = function _loop(styleIdx, styleLen) {\n        var item = _this2.options.styleTags[styleIdx];\n\n        _this2.context.memo('button.style.' + item, function () {\n          return _this2.button({\n            className: 'note-btn-style-' + item,\n            contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n            tooltip: _this2.lang.style[item],\n            click: _this2.context.createInvokeHandler('editor.formatBlock')\n          }).render();\n        });\n      };\n\n      for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n        _loop(styleIdx, styleLen);\n      }\n\n      this.context.memo('button.bold', function () {\n        return _this2.button({\n          className: 'note-btn-bold',\n          contents: _this2.ui.icon(_this2.options.icons.bold),\n          tooltip: _this2.lang.font.bold + _this2.representShortcut('bold'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.bold')\n        }).render();\n      });\n      this.context.memo('button.italic', function () {\n        return _this2.button({\n          className: 'note-btn-italic',\n          contents: _this2.ui.icon(_this2.options.icons.italic),\n          tooltip: _this2.lang.font.italic + _this2.representShortcut('italic'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.italic')\n        }).render();\n      });\n      this.context.memo('button.underline', function () {\n        return _this2.button({\n          className: 'note-btn-underline',\n          contents: _this2.ui.icon(_this2.options.icons.underline),\n          tooltip: _this2.lang.font.underline + _this2.representShortcut('underline'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.underline')\n        }).render();\n      });\n      this.context.memo('button.clear', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.eraser),\n          tooltip: _this2.lang.font.clear + _this2.representShortcut('removeFormat'),\n          click: _this2.context.createInvokeHandler('editor.removeFormat')\n        }).render();\n      });\n      this.context.memo('button.strikethrough', function () {\n        return _this2.button({\n          className: 'note-btn-strikethrough',\n          contents: _this2.ui.icon(_this2.options.icons.strikethrough),\n          tooltip: _this2.lang.font.strikethrough + _this2.representShortcut('strikethrough'),\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n        }).render();\n      });\n      this.context.memo('button.superscript', function () {\n        return _this2.button({\n          className: 'note-btn-superscript',\n          contents: _this2.ui.icon(_this2.options.icons.superscript),\n          tooltip: _this2.lang.font.superscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.superscript')\n        }).render();\n      });\n      this.context.memo('button.subscript', function () {\n        return _this2.button({\n          className: 'note-btn-subscript',\n          contents: _this2.ui.icon(_this2.options.icons.subscript),\n          tooltip: _this2.lang.font.subscript,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.subscript')\n        }).render();\n      });\n      this.context.memo('button.fontname', function () {\n        var styleInfo = _this2.context.invoke('editor.currentStyle');\n\n        if (_this2.options.addDefaultFonts) {\n          // Add 'default' fonts into the fontnames array if not exist\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(styleInfo['font-family'].split(','), function (idx, fontname) {\n            fontname = fontname.trim().replace(/['\"]+/g, '');\n\n            if (_this2.isFontDeservedToAdd(fontname)) {\n              if (_this2.options.fontNames.indexOf(fontname) === -1) {\n                _this2.options.fontNames.push(fontname);\n              }\n            }\n          });\n        }\n\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontname\"></span>', _this2.options),\n          tooltip: _this2.lang.font.name,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontNames.filter(_this2.isFontInstalled.bind(_this2)),\n          title: _this2.lang.font.name,\n          template: function template(item) {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontName')\n        })]).render();\n      });\n      this.context.memo('button.fontsize', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', _this2.options),\n          tooltip: _this2.lang.font.size,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizes,\n          title: _this2.lang.font.size,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n        })]).render();\n      });\n      this.context.memo('button.fontsizeunit', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', _this2.options),\n          tooltip: _this2.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: _this2.options.icons.menuCheck,\n          items: _this2.options.fontSizeUnits,\n          title: _this2.lang.font.sizeunit,\n          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit')\n        })]).render();\n      });\n      this.context.memo('button.color', function () {\n        return _this2.colorPalette('note-color-all', _this2.lang.color.recent, true, true);\n      });\n      this.context.memo('button.forecolor', function () {\n        return _this2.colorPalette('note-color-fore', _this2.lang.color.foreground, false, true);\n      });\n      this.context.memo('button.backcolor', function () {\n        return _this2.colorPalette('note-color-back', _this2.lang.color.background, true, false);\n      });\n      this.context.memo('button.ul', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.unorderedlist),\n          tooltip: _this2.lang.lists.unordered + _this2.representShortcut('insertUnorderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertUnorderedList')\n        }).render();\n      });\n      this.context.memo('button.ol', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.orderedlist),\n          tooltip: _this2.lang.lists.ordered + _this2.representShortcut('insertOrderedList'),\n          click: _this2.context.createInvokeHandler('editor.insertOrderedList')\n        }).render();\n      });\n      var justifyLeft = this.button({\n        contents: this.ui.icon(this.options.icons.alignLeft),\n        tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n        click: this.context.createInvokeHandler('editor.justifyLeft')\n      });\n      var justifyCenter = this.button({\n        contents: this.ui.icon(this.options.icons.alignCenter),\n        tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n        click: this.context.createInvokeHandler('editor.justifyCenter')\n      });\n      var justifyRight = this.button({\n        contents: this.ui.icon(this.options.icons.alignRight),\n        tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n        click: this.context.createInvokeHandler('editor.justifyRight')\n      });\n      var justifyFull = this.button({\n        contents: this.ui.icon(this.options.icons.alignJustify),\n        tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n        click: this.context.createInvokeHandler('editor.justifyFull')\n      });\n      var outdent = this.button({\n        contents: this.ui.icon(this.options.icons.outdent),\n        tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n        click: this.context.createInvokeHandler('editor.outdent')\n      });\n      var indent = this.button({\n        contents: this.ui.icon(this.options.icons.indent),\n        tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n        click: this.context.createInvokeHandler('editor.indent')\n      }); // Outdent and Indent in toolbar\n\n      this.context.memo('button.kanka-outdent', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.outdent),\n          tooltip: _this2.lang.paragraph.outdent + _this2.representShortcut('outdent'),\n          click: _this2.context.createInvokeHandler('editor.outdent')\n        }).render();\n      });\n      this.context.memo('button.kanka-indent', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.indent),\n          tooltip: _this2.lang.paragraph.indent + _this2.representShortcut('indent'),\n          click: _this2.context.createInvokeHandler('editor.indent')\n        }).render();\n      });\n      this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n      this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n      this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n      this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n      this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n      this.context.memo('button.indent', func.invoke(indent, 'render'));\n      this.context.memo('button.paragraph', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.alignLeft), _this2.options),\n          tooltip: _this2.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown([_this2.ui.buttonGroup({\n          className: 'note-align',\n          children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n        }), _this2.ui.buttonGroup({\n          className: 'note-list',\n          children: [outdent, indent]\n        })])]).render();\n      });\n      this.context.memo('button.height', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.textHeight), _this2.options),\n          tooltip: _this2.lang.font.height,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdownCheck({\n          items: _this2.options.lineHeights,\n          checkClassName: _this2.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: _this2.lang.font.height,\n          click: _this2.context.createInvokeHandler('editor.lineHeight')\n        })]).render();\n      });\n      this.context.memo('button.table', function () {\n        return _this2.ui.buttonGroup([_this2.button({\n          className: 'dropdown-toggle',\n          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.table), _this2.options),\n          tooltip: _this2.lang.table.table,\n          data: {\n            toggle: 'dropdown'\n          }\n        }), _this2.ui.dropdown({\n          title: _this2.lang.table.table,\n          className: 'note-table',\n          items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', '</div>', '<div class=\"note-dimension-display\">1 x 1</div>'].join('')\n        })], {\n          callback: function callback($node) {\n            var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n            $catcher.css({\n              width: _this2.options.insertTableMaxSize.col + 'em',\n              height: _this2.options.insertTableMaxSize.row + 'em'\n            }).mousedown(_this2.context.createInvokeHandler('editor.insertTable')).on('mousemove', _this2.tableMoveHandler.bind(_this2));\n          }\n        }).render();\n      });\n      this.context.memo('button.link', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.link),\n          tooltip: _this2.lang.link.link + _this2.representShortcut('linkDialog.show'),\n          click: _this2.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.picture', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.picture),\n          tooltip: _this2.lang.image.image,\n          click: _this2.context.createInvokeHandler('imageDialog.show')\n        }).render();\n      });\n      this.context.memo('button.video', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.video),\n          tooltip: _this2.lang.video.video,\n          click: _this2.context.createInvokeHandler('videoDialog.show')\n        }).render();\n      });\n      this.context.memo('button.hr', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.minus),\n          tooltip: _this2.lang.hr.insert + _this2.representShortcut('insertHorizontalRule'),\n          click: _this2.context.createInvokeHandler('editor.insertHorizontalRule')\n        }).render();\n      });\n      this.context.memo('button.fullscreen', function () {\n        return _this2.button({\n          className: 'btn-fullscreen note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.arrowsAlt),\n          tooltip: _this2.lang.options.fullscreen,\n          click: _this2.context.createInvokeHandler('fullscreen.toggle')\n        }).render();\n      });\n      this.context.memo('button.codeview', function () {\n        return _this2.button({\n          className: 'btn-codeview note-codeview-keep',\n          contents: _this2.ui.icon(_this2.options.icons.code),\n          tooltip: _this2.lang.options.codeview,\n          click: _this2.context.createInvokeHandler('codeview.toggle')\n        }).render();\n      });\n      this.context.memo('button.redo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.redo),\n          tooltip: _this2.lang.history.redo + _this2.representShortcut('redo'),\n          click: _this2.context.createInvokeHandler('editor.redo')\n        }).render();\n      });\n      this.context.memo('button.undo', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.undo),\n          tooltip: _this2.lang.history.undo + _this2.representShortcut('undo'),\n          click: _this2.context.createInvokeHandler('editor.undo')\n        }).render();\n      });\n      this.context.memo('button.help', function () {\n        return _this2.button({\n          contents: _this2.ui.icon(_this2.options.icons.question),\n          tooltip: _this2.lang.options.help,\n          click: _this2.context.createInvokeHandler('helpDialog.show')\n        }).render();\n      });\n    }\n    /**\n     * image: [\n     *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n     *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n     *   ['remove', ['removeMedia']],\n     * ],\n     */\n\n  }, {\n    key: \"addImagePopoverButtons\",\n    value: function addImagePopoverButtons() {\n      var _this3 = this;\n\n      // Image Size Buttons\n      this.context.memo('button.resizeFull', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">100%</span>',\n          tooltip: _this3.lang.image.resizeFull,\n          click: _this3.context.createInvokeHandler('editor.resize', '1')\n        }).render();\n      });\n      this.context.memo('button.resizeHalf', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">50%</span>',\n          tooltip: _this3.lang.image.resizeHalf,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.5')\n        }).render();\n      });\n      this.context.memo('button.resizeQuarter', function () {\n        return _this3.button({\n          contents: '<span class=\"note-fontsize-10\">25%</span>',\n          tooltip: _this3.lang.image.resizeQuarter,\n          click: _this3.context.createInvokeHandler('editor.resize', '0.25')\n        }).render();\n      });\n      this.context.memo('button.resizeNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.resizeNone,\n          click: _this3.context.createInvokeHandler('editor.resize', '0')\n        }).render();\n      }); // Float Buttons\n\n      this.context.memo('button.floatLeft', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatLeft),\n          tooltip: _this3.lang.image.floatLeft,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'left')\n        }).render();\n      });\n      this.context.memo('button.floatRight', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.floatRight),\n          tooltip: _this3.lang.image.floatRight,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'right')\n        }).render();\n      });\n      this.context.memo('button.floatNone', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.rollback),\n          tooltip: _this3.lang.image.floatNone,\n          click: _this3.context.createInvokeHandler('editor.floatMe', 'none')\n        }).render();\n      }); // Remove Buttons\n\n      this.context.memo('button.removeMedia', function () {\n        return _this3.button({\n          contents: _this3.ui.icon(_this3.options.icons.trash),\n          tooltip: _this3.lang.image.remove,\n          click: _this3.context.createInvokeHandler('editor.removeMedia')\n        }).render();\n      });\n    }\n  }, {\n    key: \"addLinkPopoverButtons\",\n    value: function addLinkPopoverButtons() {\n      var _this4 = this;\n\n      this.context.memo('button.linkDialogShow', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.link),\n          tooltip: _this4.lang.link.edit,\n          click: _this4.context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n      this.context.memo('button.unlink', function () {\n        return _this4.button({\n          contents: _this4.ui.icon(_this4.options.icons.unlink),\n          tooltip: _this4.lang.link.unlink,\n          click: _this4.context.createInvokeHandler('editor.unlink')\n        }).render();\n      });\n    }\n    /**\n     * table : [\n     *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n     *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n     * ],\n     */\n\n  }, {\n    key: \"addTablePopoverButtons\",\n    value: function addTablePopoverButtons() {\n      var _this5 = this;\n\n      this.context.memo('button.addRowUp', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowAbove),\n          tooltip: _this5.lang.table.addRowAbove,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'top')\n        }).render();\n      });\n      this.context.memo('button.addRowDown', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowBelow),\n          tooltip: _this5.lang.table.addRowBelow,\n          click: _this5.context.createInvokeHandler('editor.addRow', 'bottom')\n        }).render();\n      });\n      this.context.memo('button.addColLeft', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colBefore),\n          tooltip: _this5.lang.table.addColLeft,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'left')\n        }).render();\n      });\n      this.context.memo('button.addColRight', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colAfter),\n          tooltip: _this5.lang.table.addColRight,\n          click: _this5.context.createInvokeHandler('editor.addCol', 'right')\n        }).render();\n      });\n      this.context.memo('button.deleteRow', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.rowRemove),\n          tooltip: _this5.lang.table.delRow,\n          click: _this5.context.createInvokeHandler('editor.deleteRow')\n        }).render();\n      });\n      this.context.memo('button.deleteCol', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.colRemove),\n          tooltip: _this5.lang.table.delCol,\n          click: _this5.context.createInvokeHandler('editor.deleteCol')\n        }).render();\n      });\n      this.context.memo('button.deleteTable', function () {\n        return _this5.button({\n          className: 'btn-md',\n          contents: _this5.ui.icon(_this5.options.icons.trash),\n          tooltip: _this5.lang.table.delTable,\n          click: _this5.context.createInvokeHandler('editor.deleteTable')\n        }).render();\n      });\n    }\n  }, {\n    key: \"build\",\n    value: function build($container, groups) {\n      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n        var group = groups[groupIdx];\n        var groupName = Array.isArray(group) ? group[0] : group;\n        var buttons = Array.isArray(group) ? group.length === 1 ? [group[0]] : group[1] : [group];\n        var $group = this.ui.buttonGroup({\n          className: 'note-' + groupName\n        }).render();\n\n        for (var idx = 0, len = buttons.length; idx < len; idx++) {\n          var btn = this.context.memo('button.' + buttons[idx]);\n\n          if (btn) {\n            $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n          }\n        }\n\n        $group.appendTo($container);\n      }\n    }\n    /**\n     * @param {jQuery} [$container]\n     */\n\n  }, {\n    key: \"updateCurrentStyle\",\n    value: function updateCurrentStyle($container) {\n      var _this6 = this;\n\n      var $cont = $container || this.$toolbar;\n      var styleInfo = this.context.invoke('editor.currentStyle');\n      this.updateBtnStates($cont, {\n        '.note-btn-bold': function noteBtnBold() {\n          return styleInfo['font-bold'] === 'bold';\n        },\n        '.note-btn-italic': function noteBtnItalic() {\n          return styleInfo['font-italic'] === 'italic';\n        },\n        '.note-btn-underline': function noteBtnUnderline() {\n          return styleInfo['font-underline'] === 'underline';\n        },\n        '.note-btn-subscript': function noteBtnSubscript() {\n          return styleInfo['font-subscript'] === 'subscript';\n        },\n        '.note-btn-superscript': function noteBtnSuperscript() {\n          return styleInfo['font-superscript'] === 'superscript';\n        },\n        '.note-btn-strikethrough': function noteBtnStrikethrough() {\n          return styleInfo['font-strikethrough'] === 'strikethrough';\n        }\n      });\n\n      if (styleInfo['font-family']) {\n        var fontNames = styleInfo['font-family'].split(',').map(function (name) {\n          return name.replace(/[\\'\\\"]/g, '').replace(/\\s+$/, '').replace(/^\\s+/, '');\n        });\n        var fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n        $cont.find('.dropdown-fontname a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item); // always compare string to avoid creating another func.\n\n          var isChecked = $item.data('value') + '' === fontName + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n      }\n\n      if (styleInfo['font-size']) {\n        var fontSize = styleInfo['font-size'];\n        $cont.find('.dropdown-fontsize a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item); // always compare with string to avoid creating another func.\n\n          var isChecked = $item.data('value') + '' === fontSize + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsize').text(fontSize);\n        var fontSizeUnit = styleInfo['font-size-unit'];\n        $cont.find('.dropdown-fontsizeunit a').each(function (idx, item) {\n          var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item);\n          var isChecked = $item.data('value') + '' === fontSizeUnit + '';\n          $item.toggleClass('checked', isChecked);\n        });\n        $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n      }\n\n      if (styleInfo['line-height']) {\n        var lineHeight = styleInfo['line-height'];\n        $cont.find('.dropdown-line-height li a').each(function (idx, item) {\n          // always compare with string to avoid creating another func.\n          var isChecked = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(item).data('value') + '' === lineHeight + '';\n          _this6.className = isChecked ? 'checked' : '';\n        });\n      }\n    }\n  }, {\n    key: \"updateBtnStates\",\n    value: function updateBtnStates($container, infos) {\n      var _this7 = this;\n\n      external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.each(infos, function (selector, pred) {\n        _this7.ui.toggleBtnActive($container.find(selector), pred());\n      });\n    }\n  }, {\n    key: \"tableMoveHandler\",\n    value: function tableMoveHandler(event) {\n      var PX_PER_EM = 18;\n      var $picker = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher\n\n      var $dimensionDisplay = $picker.next();\n      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n      var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n      var posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox\n\n      if (event.offsetX === undefined) {\n        var posCatcher = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(event.target).offset();\n        posOffset = {\n          x: event.pageX - posCatcher.left,\n          y: event.pageY - posCatcher.top\n        };\n      } else {\n        posOffset = {\n          x: event.offsetX,\n          y: event.offsetY\n        };\n      }\n\n      var dim = {\n        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n        r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n      };\n      $highlighted.css({\n        width: dim.c + 'em',\n        height: dim.r + 'em'\n      });\n      $catcher.data('value', dim.c + 'x' + dim.r);\n\n      if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n        $unhighlighted.css({\n          width: dim.c + 1 + 'em'\n        });\n      }\n\n      if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n        $unhighlighted.css({\n          height: dim.r + 1 + 'em'\n        });\n      }\n\n      $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n    }\n  }]);\n\n  return Buttons;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/Toolbar.js\nfunction Toolbar_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction Toolbar_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Toolbar_createClass(Constructor, protoProps, staticProps) { if (protoProps) Toolbar_defineProperties(Constructor.prototype, protoProps); if (staticProps) Toolbar_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar Toolbar_Toolbar = /*#__PURE__*/function () {\n  function Toolbar(context) {\n    Toolbar_classCallCheck(this, Toolbar);\n\n    this.context = context;\n    this.$window = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(window);\n    this.$document = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document);\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n\n  Toolbar_createClass(Toolbar, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !this.options.airMode;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this = this;\n\n      this.options.toolbar = this.options.toolbar || [];\n\n      if (!this.options.toolbar.length) {\n        this.$toolbar.hide();\n      } else {\n        this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n      }\n\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n\n      this.changeContainer(false);\n      this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () {\n        _this.context.invoke('buttons.updateCurrentStyle');\n      });\n      this.context.invoke('buttons.updateCurrentStyle');\n\n      if (this.options.followingToolbar) {\n        this.$window.on('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$toolbar.children().remove();\n\n      if (this.options.followingToolbar) {\n        this.$window.off('scroll resize', this.followScroll);\n      }\n    }\n  }, {\n    key: \"followScroll\",\n    value: function followScroll() {\n      if (this.$editor.hasClass('fullscreen')) {\n        return false;\n      }\n\n      var editorHeight = this.$editor.outerHeight();\n      var editorWidth = this.$editor.width();\n      var toolbarHeight = this.$toolbar.height();\n      var statusbarHeight = this.$statusbar.height(); // check if the web app is currently using another static bar\n\n      var otherBarHeight = 0;\n\n      if (this.options.otherStaticBar) {\n        otherBarHeight = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.otherStaticBar).outerHeight();\n      }\n\n      var currentOffset = this.$document.scrollTop();\n      var editorOffsetTop = this.$editor.offset().top;\n      var editorOffsetBottom = editorOffsetTop + editorHeight;\n      var activateOffset = editorOffsetTop - otherBarHeight;\n      var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n\n      if (!this.isFollowing && currentOffset > activateOffset && currentOffset < deactivateOffsetBottom - toolbarHeight) {\n        this.isFollowing = true;\n        this.$editable.css({\n          marginTop: this.$toolbar.outerHeight()\n        });\n        this.$toolbar.css({\n          position: 'fixed',\n          top: otherBarHeight,\n          width: editorWidth,\n          zIndex: 1000\n        });\n      } else if (this.isFollowing && (currentOffset < activateOffset || currentOffset > deactivateOffsetBottom)) {\n        this.isFollowing = false;\n        this.$toolbar.css({\n          position: 'relative',\n          top: 0,\n          width: '100%',\n          zIndex: 'auto'\n        });\n        this.$editable.css({\n          marginTop: ''\n        });\n      }\n    }\n  }, {\n    key: \"changeContainer\",\n    value: function changeContainer(isFullscreen) {\n      if (isFullscreen) {\n        this.$toolbar.prependTo(this.$editor);\n      } else {\n        if (this.options.toolbarContainer) {\n          this.$toolbar.appendTo(this.options.toolbarContainer);\n        }\n      }\n\n      if (this.options.followingToolbar) {\n        this.followScroll();\n      }\n    }\n  }, {\n    key: \"updateFullscreen\",\n    value: function updateFullscreen(isFullscreen) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n      this.changeContainer(isFullscreen);\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n\n      if (isCodeview) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n    }\n  }, {\n    key: \"activate\",\n    value: function activate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n\n      this.ui.toggleBtn($btn, true);\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate(isIncludeCodeview) {\n      var $btn = this.$toolbar.find('button');\n\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.note-codeview-keep');\n      }\n\n      this.ui.toggleBtn($btn, false);\n    }\n  }]);\n\n  return Toolbar;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/LinkDialog.js\nfunction LinkDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction LinkDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LinkDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) LinkDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) LinkDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar LinkDialog_LinkDialog = /*#__PURE__*/function () {\n  function LinkDialog(context) {\n    LinkDialog_classCallCheck(this, LinkDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n\n  LinkDialog_createClass(LinkDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.textToDisplay, \"</label>\"), \"<input id=\\\"note-dialog-link-txt-\".concat(this.options.id, \"\\\" class=\\\"note-link-text form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>', '<div class=\"form-group note-form-group\">', \"<label for=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.link.url, \"</label>\"), \"<input id=\\\"note-dialog-link-url-\".concat(this.options.id, \"\\\" class=\\\"note-link-url form-control note-form-control note-input\\\" type=\\\"text\\\" value=\\\"http://\\\"/>\"), '</div>', !this.options.disableLinkTarget ? external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div/>').append(this.ui.checkbox({\n        className: 'sn-checkbox-open-in-new-window',\n        text: this.lang.link.openInNewWindow,\n        checked: true\n      }).render()).html() : '', external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div/>').append(this.ui.checkbox({\n        className: 'sn-checkbox-use-protocol',\n        text: this.lang.link.useProtocol,\n        checked: true\n      }).render()).html()].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.link.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        className: 'link-dialog',\n        title: this.lang.link.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n    /**\n     * toggle update button\n     */\n\n  }, {\n    key: \"toggleLinkBtn\",\n    value: function toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n      this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n    }\n    /**\n     * Show link dialog and set event handlers on dialog controls.\n     *\n     * @param {Object} linkInfo\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showLinkDialog\",\n    value: function showLinkDialog(linkInfo) {\n      var _this = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $linkText = _this.$dialog.find('.note-link-text');\n\n        var $linkUrl = _this.$dialog.find('.note-link-url');\n\n        var $linkBtn = _this.$dialog.find('.note-link-btn');\n\n        var $openInNewWindow = _this.$dialog.find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n\n        var $useProtocol = _this.$dialog.find('.sn-checkbox-use-protocol input[type=checkbox]');\n\n        _this.ui.onDialogShown(_this.$dialog, function () {\n          _this.context.triggerEvent('dialog.shown'); // If no url was given and given text is valid URL then copy that into URL Field\n\n\n          if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n            linkInfo.url = linkInfo.text;\n          }\n\n          $linkText.on('input paste propertychange', function () {\n            // If linktext was modified by input events,\n            // cloning text from linkUrl will be stopped.\n            linkInfo.text = $linkText.val();\n\n            _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.text);\n          $linkUrl.on('input paste propertychange', function () {\n            // Display same text on `Text to display` as default\n            // when linktext has no text\n            if (!linkInfo.text) {\n              $linkText.val($linkUrl.val());\n            }\n\n            _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          }).val(linkInfo.url);\n\n          if (!env.isSupportTouch) {\n            $linkUrl.trigger('focus');\n          }\n\n          _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n\n          _this.bindEnterKey($linkUrl, $linkBtn);\n\n          _this.bindEnterKey($linkText, $linkBtn);\n\n          var isNewWindowChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this.context.options.linkTargetBlank;\n          $openInNewWindow.prop('checked', isNewWindowChecked);\n          var useProtocolChecked = linkInfo.url ? false : _this.context.options.useProtocol;\n          $useProtocol.prop('checked', useProtocolChecked);\n          $linkBtn.one('click', function (event) {\n            event.preventDefault();\n            deferred.resolve({\n              range: linkInfo.range,\n              url: $linkUrl.val(),\n              text: $linkText.val(),\n              isNewWindow: $openInNewWindow.is(':checked'),\n              checkProtocol: $useProtocol.is(':checked')\n            });\n\n            _this.ui.hideDialog(_this.$dialog);\n          });\n        });\n\n        _this.ui.onDialogHidden(_this.$dialog, function () {\n          // detach events\n          $linkText.off();\n          $linkUrl.off();\n          $linkBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this.ui.showDialog(_this.$dialog);\n      }).promise();\n    }\n    /**\n     * @param {Object} layoutInfo\n     */\n\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this2 = this;\n\n      var linkInfo = this.context.invoke('editor.getLinkInfo');\n      this.context.invoke('editor.saveRange');\n      this.showLinkDialog(linkInfo).then(function (linkInfo) {\n        _this2.context.invoke('editor.restoreRange');\n\n        _this2.context.invoke('editor.createLink', linkInfo);\n      }).fail(function () {\n        _this2.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n\n  return LinkDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/LinkPopover.js\nfunction LinkPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction LinkPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LinkPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) LinkPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) LinkPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar LinkPopover_LinkPopover = /*#__PURE__*/function () {\n  function LinkPopover(context) {\n    var _this = this;\n\n    LinkPopover_classCallCheck(this, LinkPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, e) {\n        if (e.originalEvent && e.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(e.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n\n  LinkPopover_createClass(LinkPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.link);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-link-popover',\n        callback: function callback($node) {\n          var $content = $node.find('.popover-content,.note-popover-content');\n          $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n        }\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.link);\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!this.context.invoke('editor.hasFocus')) {\n        this.hide();\n        return;\n      }\n\n      var rng = this.context.invoke('editor.getLastRange');\n\n      if (rng.isCollapsed() && rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        var href = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(anchor).attr('href');\n        this.$popover.find('a').attr('href', href).text(href);\n        var pos = dom.posFromPlaceholder(anchor);\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return LinkPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/ImageDialog.js\nfunction ImageDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction ImageDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ImageDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) ImageDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) ImageDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar ImageDialog_ImageDialog = /*#__PURE__*/function () {\n  function ImageDialog(context) {\n    ImageDialog_classCallCheck(this, ImageDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  ImageDialog_createClass(ImageDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var imageLimitation = '';\n\n      if (this.options.maximumImageFileSize) {\n        var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n        var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';\n        imageLimitation = \"<small>\".concat(this.lang.image.maximumFileSize + ' : ' + readableSize, \"</small>\");\n      }\n\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group note-group-select-from-files\">', '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>', '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ', ' type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>', imageLimitation, '</div>', '<div class=\"form-group note-group-image-url\">', '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>', '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>', '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.image.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.image.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n\n      this.context.invoke('editor.saveRange');\n      this.showImageDialog().then(function (data) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n\n        _this.context.invoke('editor.restoreRange');\n\n        if (typeof data === 'string') {\n          // image url\n          // If onImageLinkInsert set,\n          if (_this.options.callbacks.onImageLinkInsert) {\n            _this.context.triggerEvent('image.link.insert', data);\n          } else {\n            _this.context.invoke('editor.insertImage', data);\n          }\n        } else {\n          // array of files\n          _this.context.invoke('editor.insertImagesOrCallback', data);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showImageDialog\",\n    value: function showImageDialog() {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $imageInput = _this2.$dialog.find('.note-image-input');\n\n        var $imageUrl = _this2.$dialog.find('.note-image-url');\n\n        var $imageBtn = _this2.$dialog.find('.note-image-btn');\n\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown'); // Cloning imageInput to clear element.\n\n\n          $imageInput.replaceWith($imageInput.clone().on('change', function (event) {\n            deferred.resolve(event.target.files || event.target.value);\n          }).val(''));\n          $imageUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($imageBtn, $imageUrl.val());\n          }).val('');\n\n          if (!env.isSupportTouch) {\n            $imageUrl.trigger('focus');\n          }\n\n          $imageBtn.click(function (event) {\n            event.preventDefault();\n            deferred.resolve($imageUrl.val());\n          });\n\n          _this2.bindEnterKey($imageUrl, $imageBtn);\n        });\n\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $imageInput.off();\n          $imageUrl.off();\n          $imageBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n\n  return ImageDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/ImagePopover.js\nfunction ImagePopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction ImagePopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ImagePopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) ImagePopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) ImagePopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\n\nvar ImagePopover_ImagePopover = /*#__PURE__*/function () {\n  function ImagePopover(context) {\n    var _this = this;\n\n    ImagePopover_classCallCheck(this, ImagePopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n    this.events = {\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, e) {\n        if (e.originalEvent && e.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(e.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n\n  ImagePopover_createClass(ImagePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.image);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-image-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.image);\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, event) {\n      if (dom.isImg(target)) {\n        var position = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(target).offset();\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        var pos = {};\n\n        if (this.options.popatmouse) {\n          pos.left = event.pageX - 20;\n          pos.top = event.pageY;\n        } else {\n          pos = position;\n        }\n\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return ImagePopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/TablePopover.js\nfunction TablePopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction TablePopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TablePopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) TablePopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) TablePopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar TablePopover_TablePopover = /*#__PURE__*/function () {\n  function TablePopover(context) {\n    var _this = this;\n\n    TablePopover_classCallCheck(this, TablePopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        _this.update(e.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': function summernoteKeyupSummernoteScrollSummernoteChange() {\n        _this.update();\n      },\n      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {\n        _this.hide();\n      },\n      'summernote.blur': function summernoteBlur(we, e) {\n        if (e.originalEvent && e.originalEvent.relatedTarget) {\n          if (!_this.$popover[0].contains(e.originalEvent.relatedTarget)) {\n            _this.hide();\n          }\n        } else {\n          _this.hide();\n        }\n      }\n    };\n  }\n\n  TablePopover_createClass(TablePopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return !lists.isEmpty(this.options.popover.table);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.$popover = this.ui.popover({\n        className: 'note-table-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content,.note-popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.table); // [workaround] Disable Firefox's default table editor\n\n      if (env.isFF) {\n        document.execCommand('enableInlineTableEditing', false, false);\n      }\n\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(target) {\n      if (this.context.isDisabled()) {\n        return false;\n      }\n\n      var isCell = dom.isCell(target);\n\n      if (isCell) {\n        var pos = dom.posFromPlaceholder(target);\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        pos.top -= containerOffset.top;\n        pos.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n\n      return isCell;\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return TablePopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/VideoDialog.js\nfunction VideoDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction VideoDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction VideoDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) VideoDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) VideoDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar VideoDialog_VideoDialog = /*#__PURE__*/function () {\n  function VideoDialog(context) {\n    VideoDialog_classCallCheck(this, VideoDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  VideoDialog_createClass(VideoDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<div class=\"form-group note-form-group row-fluid\">', \"<label for=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-form-label\\\">\").concat(this.lang.video.url, \" <small class=\\\"text-muted\\\">\").concat(this.lang.video.providers, \"</small></label>\"), \"<input id=\\\"note-dialog-video-url-\".concat(this.options.id, \"\\\" class=\\\"note-video-url form-control note-form-control note-input\\\" type=\\\"text\\\"/>\"), '</div>'].join('');\n      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n      var footer = \"<input type=\\\"button\\\" href=\\\"#\\\" class=\\\"\".concat(buttonClass, \"\\\" value=\\\"\").concat(this.lang.video.insert, \"\\\" disabled>\");\n      this.$dialog = this.ui.dialog({\n        title: this.lang.video.insert,\n        fade: this.options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"bindEnterKey\",\n    value: function bindEnterKey($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === core_key.code.ENTER) {\n          event.preventDefault();\n          $btn.trigger('click');\n        }\n      });\n    }\n  }, {\n    key: \"createVideoNode\",\n    value: function createVideoNode(url) {\n      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)\n      var ytRegExp = /\\/\\/(?:(?:www|m)\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))([\\w|-]{11})(?:(?:[\\?&]t=)(\\S+))?$/;\n      var ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n      var ytMatch = url.match(ytRegExp);\n      var igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/;\n      var igMatch = url.match(igRegExp);\n      var vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n      var vMatch = url.match(vRegExp);\n      var vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n      var vimMatch = url.match(vimRegExp);\n      var dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n      var dmMatch = url.match(dmRegExp);\n      var youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n      var youkuMatch = url.match(youkuRegExp);\n      var qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n      var qqMatch = url.match(qqRegExp);\n      var qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n      var qqMatch2 = url.match(qqRegExp2);\n      var mp4RegExp = /^.+.(mp4|m4v)$/;\n      var mp4Match = url.match(mp4RegExp);\n      var oggRegExp = /^.+.(ogg|ogv)$/;\n      var oggMatch = url.match(oggRegExp);\n      var webmRegExp = /^.+.(webm)$/;\n      var webmMatch = url.match(webmRegExp);\n      var fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n      var fbMatch = url.match(fbRegExp);\n      var $video;\n\n      if (ytMatch && ytMatch[1].length === 11) {\n        var youtubeId = ytMatch[1];\n        var start = 0;\n\n        if (typeof ytMatch[2] !== 'undefined') {\n          var ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n\n          if (ytMatchForStart) {\n            for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n              start += typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0;\n            }\n          }\n        }\n\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : '')).attr('width', '640').attr('height', '360');\n      } else if (igMatch && igMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/').attr('width', '612').attr('height', '710').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else if (vMatch && vMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', vMatch[0] + '/embed/simple').attr('width', '600').attr('height', '600').attr('class', 'vine-embed');\n      } else if (vimMatch && vimMatch[3].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('src', '//player.vimeo.com/video/' + vimMatch[3]).attr('width', '640').attr('height', '360');\n      } else if (dmMatch && dmMatch[2].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]).attr('width', '640').attr('height', '360');\n      } else if (youkuMatch && youkuMatch[1].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '498').attr('width', '510').attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n      } else if (qqMatch && qqMatch[1].length || qqMatch2 && qqMatch2[2].length) {\n        var vid = qqMatch && qqMatch[1].length ? qqMatch[1] : qqMatch2[2];\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '310').attr('width', '500').attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n      } else if (mp4Match || oggMatch || webmMatch) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<video controls>').attr('src', url).attr('width', '640').attr('height', '360');\n      } else if (fbMatch && fbMatch[0].length) {\n        $video = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560').attr('width', '560').attr('height', '301').attr('scrolling', 'no').attr('allowtransparency', 'true');\n      } else {\n        // this is not a known video link. Now what, Cat? Now what?\n        return false;\n      }\n\n      $video.addClass('note-video-clip');\n      return $video[0];\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this = this;\n\n      var text = this.context.invoke('editor.getSelectedText');\n      this.context.invoke('editor.saveRange');\n      this.showVideoDialog(text).then(function (url) {\n        // [workaround] hide dialog before restore range for IE range focus\n        _this.ui.hideDialog(_this.$dialog);\n\n        _this.context.invoke('editor.restoreRange'); // build node\n\n\n        var $node = _this.createVideoNode(url);\n\n        if ($node) {\n          // insert video node\n          _this.context.invoke('editor.insertNode', $node);\n        }\n      }).fail(function () {\n        _this.context.invoke('editor.restoreRange');\n      });\n    }\n    /**\n     * show video dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showVideoDialog\",\n    value: function showVideoDialog()\n    /* text */\n    {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        var $videoUrl = _this2.$dialog.find('.note-video-url');\n\n        var $videoBtn = _this2.$dialog.find('.note-video-btn');\n\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          $videoUrl.on('input paste propertychange', function () {\n            _this2.ui.toggleBtn($videoBtn, $videoUrl.val());\n          });\n\n          if (!env.isSupportTouch) {\n            $videoUrl.trigger('focus');\n          }\n\n          $videoBtn.click(function (event) {\n            event.preventDefault();\n            deferred.resolve($videoUrl.val());\n          });\n\n          _this2.bindEnterKey($videoUrl, $videoBtn);\n        });\n\n        _this2.ui.onDialogHidden(_this2.$dialog, function () {\n          $videoUrl.off();\n          $videoBtn.off();\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      });\n    }\n  }]);\n\n  return VideoDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/HelpDialog.js\nfunction HelpDialog_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction HelpDialog_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HelpDialog_createClass(Constructor, protoProps, staticProps) { if (protoProps) HelpDialog_defineProperties(Constructor.prototype, protoProps); if (staticProps) HelpDialog_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar HelpDialog_HelpDialog = /*#__PURE__*/function () {\n  function HelpDialog(context) {\n    HelpDialog_classCallCheck(this, HelpDialog);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$body = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  HelpDialog_createClass(HelpDialog, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var $container = this.options.dialogsInBody ? this.$body : this.options.container;\n      var body = ['<p class=\"text-center\">', '<a href=\"http://summernote.org/\" target=\"_blank\">Summernote 0.8.18</a> · ', '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\">Project</a> · ', '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\">Issues</a>', '</p>'].join('');\n      this.$dialog = this.ui.dialog({\n        title: this.lang.options.help,\n        fade: this.options.dialogsFade,\n        body: this.createShortcutList(),\n        footer: body,\n        callback: function callback($node) {\n          $node.find('.modal-body,.note-modal-body').css({\n            'max-height': 300,\n            'overflow': 'scroll'\n          });\n        }\n      }).render().appendTo($container);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    }\n  }, {\n    key: \"createShortcutList\",\n    value: function createShortcutList() {\n      var _this = this;\n\n      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n      return Object.keys(keyMap).map(function (key) {\n        var command = keyMap[key];\n        var $row = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div><div class=\"help-list-item\"></div></div>');\n        $row.append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<label><kbd>' + key + '</kdb></label>').css({\n          'width': 180,\n          'margin-right': 10\n        })).append(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<span/>').html(_this.context.memo('help.' + command) || command));\n        return $row.html();\n      }).join('');\n    }\n    /**\n     * show help dialog\n     *\n     * @return {Promise}\n     */\n\n  }, {\n    key: \"showHelpDialog\",\n    value: function showHelpDialog() {\n      var _this2 = this;\n\n      return external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.Deferred(function (deferred) {\n        _this2.ui.onDialogShown(_this2.$dialog, function () {\n          _this2.context.triggerEvent('dialog.shown');\n\n          deferred.resolve();\n        });\n\n        _this2.ui.showDialog(_this2.$dialog);\n      }).promise();\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n\n      this.context.invoke('editor.saveRange');\n      this.showHelpDialog().then(function () {\n        _this3.context.invoke('editor.restoreRange');\n      });\n    }\n  }]);\n\n  return HelpDialog;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/AirPopover.js\nfunction AirPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction AirPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AirPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) AirPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) AirPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar AIRMODE_POPOVER_X_OFFSET = -5;\nvar AIRMODE_POPOVER_Y_OFFSET = 5;\n\nvar AirPopover_AirPopover = /*#__PURE__*/function () {\n  function AirPopover(context) {\n    var _this = this;\n\n    AirPopover_classCallCheck(this, AirPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.options = context.options;\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n    this.events = {\n      'summernote.contextmenu': function summernoteContextmenu(e) {\n        if (_this.options.editing) {\n          e.preventDefault();\n          e.stopPropagation();\n          _this.onContextmenu = true;\n\n          _this.update(true);\n        }\n      },\n      'summernote.mousedown': function summernoteMousedown(we, e) {\n        _this.pageX = e.pageX;\n        _this.pageY = e.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteScroll(we, e) {\n        if (_this.options.editing && !_this.onContextmenu) {\n          _this.pageX = e.pageX;\n          _this.pageY = e.pageY;\n\n          _this.update();\n        }\n\n        _this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      },\n      'summernote.focusout': function summernoteFocusout() {\n        if (!_this.$popover.is(':active,:focus')) {\n          _this.hide();\n        }\n      }\n    };\n  }\n\n  AirPopover_createClass(AirPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.$popover = this.ui.popover({\n        className: 'note-air-popover'\n      }).render().appendTo(this.options.container);\n      var $content = this.$popover.find('.popover-content');\n      this.context.invoke('buttons.build', $content, this.options.popover.air); // disable hiding this popover preemptively by 'summernote.blur' event.\n\n      this.$popover.on('mousedown', function () {\n        _this2.hidable = false;\n      }); // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n\n      this.$popover.on('mouseup', function () {\n        _this2.hidable = true;\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"update\",\n    value: function update(forcelyOpen) {\n      var styleInfo = this.context.invoke('editor.currentStyle');\n\n      if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n        var rect = {\n          left: this.pageX,\n          top: this.pageY\n        };\n        var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n        rect.top -= containerOffset.top;\n        rect.left -= containerOffset.left;\n        this.$popover.css({\n          display: 'block',\n          left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n          top: rect.top + AIRMODE_POPOVER_Y_OFFSET\n        });\n        this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n      } else {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"updateCodeview\",\n    value: function updateCodeview(isCodeview) {\n      this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n\n      if (isCodeview) {\n        this.hide();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (this.hidable) {\n        this.$popover.hide();\n      }\n    }\n  }]);\n\n  return AirPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/module/HintPopover.js\nfunction HintPopover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction HintPopover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HintPopover_createClass(Constructor, protoProps, staticProps) { if (protoProps) HintPopover_defineProperties(Constructor.prototype, protoProps); if (staticProps) HintPopover_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar POPOVER_DIST = 5;\n\nvar HintPopover_HintPopover = /*#__PURE__*/function () {\n  function HintPopover(context) {\n    var _this = this;\n\n    HintPopover_classCallCheck(this, HintPopover);\n\n    this.context = context;\n    this.ui = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n    this.events = {\n      'summernote.keyup': function summernoteKeyup(we, e) {\n        if (!e.isDefaultPrevented()) {\n          _this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function summernoteKeydown(we, e) {\n        _this.handleKeydown(e);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {\n        _this.hide();\n      }\n    };\n  }\n\n  HintPopover_createClass(HintPopover, [{\n    key: \"shouldInitialize\",\n    value: function shouldInitialize() {\n      return this.hints.length > 0;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      var _this2 = this;\n\n      this.lastWordRange = null;\n      this.matchingWord = null;\n      this.$popover = this.ui.popover({\n        className: 'note-hint-popover',\n        hideArrow: true,\n        direction: ''\n      }).render().appendTo(this.options.container);\n      this.$popover.hide();\n      this.$content = this.$popover.find('.popover-content,.note-popover-content');\n      this.$content.on('click', '.note-hint-item', function (e) {\n        _this2.$content.find('.active').removeClass('active');\n\n        external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget).addClass('active');\n\n        _this2.replace();\n      });\n      this.$popover.on('mousedown', function (e) {\n        e.preventDefault();\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.$popover.remove();\n    }\n  }, {\n    key: \"selectItem\",\n    value: function selectItem($item) {\n      this.$content.find('.active').removeClass('active');\n      $item.addClass('active');\n      this.$content[0].scrollTop = $item[0].offsetTop - this.$content.innerHeight() / 2;\n    }\n  }, {\n    key: \"moveDown\",\n    value: function moveDown() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $next = $current.next();\n\n      if ($next.length) {\n        this.selectItem($next);\n      } else {\n        var $nextGroup = $current.parent().next();\n\n        if (!$nextGroup.length) {\n          $nextGroup = this.$content.find('.note-hint-group').first();\n        }\n\n        this.selectItem($nextGroup.find('.note-hint-item').first());\n      }\n    }\n  }, {\n    key: \"moveUp\",\n    value: function moveUp() {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $prev = $current.prev();\n\n      if ($prev.length) {\n        this.selectItem($prev);\n      } else {\n        var $prevGroup = $current.parent().prev();\n\n        if (!$prevGroup.length) {\n          $prevGroup = this.$content.find('.note-hint-group').last();\n        }\n\n        this.selectItem($prevGroup.find('.note-hint-item').last());\n      }\n    }\n  }, {\n    key: \"replace\",\n    value: function replace() {\n      var $item = this.$content.find('.note-hint-item.active');\n\n      if ($item.length) {\n        var node = this.nodeFromItem($item); // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n\n        if (this.matchingWord !== null && this.matchingWord.length === 0) {\n          this.lastWordRange.so = this.lastWordRange.eo; // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n        } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n          var rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n\n          if (rangeCompute > 0) {\n            this.lastWordRange.so += rangeCompute;\n          }\n        }\n\n        this.lastWordRange.insertNode(node);\n\n        if (this.options.hintSelect === 'next') {\n          var blank = document.createTextNode('');\n          external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(node).after(blank);\n          range.createFromNodeBefore(blank).select();\n        } else {\n          range.createFromNodeAfter(node).select();\n        }\n\n        this.lastWordRange = null;\n        this.hide();\n        this.context.invoke('editor.focus');\n        this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n      }\n    }\n  }, {\n    key: \"nodeFromItem\",\n    value: function nodeFromItem($item) {\n      var hint = this.hints[$item.data('index')];\n      var item = $item.data('item');\n      var node = hint.content ? hint.content(item) : item;\n\n      if (typeof node === 'string') {\n        node = dom.createText(node);\n      }\n\n      return node;\n    }\n  }, {\n    key: \"createItemTemplates\",\n    value: function createItemTemplates(hintIdx, items) {\n      var hint = this.hints[hintIdx];\n      return items.map(function (item\n      /*, idx */\n      ) {\n        var $item = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-hint-item\"/>');\n        $item.append(hint.template ? hint.template(item) : item + '');\n        $item.data({\n          'index': hintIdx,\n          'item': item\n        });\n        return $item;\n      });\n    }\n  }, {\n    key: \"handleKeydown\",\n    value: function handleKeydown(e) {\n      if (!this.$popover.is(':visible')) {\n        return;\n      }\n\n      if (e.keyCode === core_key.code.ENTER) {\n        e.preventDefault();\n        this.replace();\n      } else if (e.keyCode === core_key.code.UP) {\n        e.preventDefault();\n        this.moveUp();\n      } else if (e.keyCode === core_key.code.DOWN) {\n        e.preventDefault();\n        this.moveDown();\n      }\n    }\n  }, {\n    key: \"searchKeyword\",\n    value: function searchKeyword(index, keyword, callback) {\n      var hint = this.hints[index];\n\n      if (hint && hint.match.test(keyword) && hint.search) {\n        var matches = hint.match.exec(keyword);\n        this.matchingWord = matches[0];\n        hint.search(matches[1], callback);\n      } else {\n        callback();\n      }\n    }\n  }, {\n    key: \"createGroup\",\n    value: function createGroup(idx, keyword) {\n      var _this3 = this;\n\n      var $group = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n      this.searchKeyword(idx, keyword, function (items) {\n        items = items || [];\n\n        if (items.length) {\n          $group.html(_this3.createItemTemplates(idx, items));\n\n          _this3.show();\n        }\n      });\n      return $group;\n    }\n  }, {\n    key: \"handleKeyup\",\n    value: function handleKeyup(e) {\n      var _this4 = this;\n\n      if (!lists.contains([core_key.code.ENTER, core_key.code.UP, core_key.code.DOWN], e.keyCode)) {\n        var _range = this.context.invoke('editor.getLastRange');\n\n        var wordRange, keyword;\n\n        if (this.options.hintMode === 'words') {\n          wordRange = _range.getWordsRange(_range);\n          keyword = wordRange.toString();\n          this.hints.forEach(function (hint) {\n            if (hint.match.test(keyword)) {\n              wordRange = _range.getWordsMatchRange(hint.match);\n              return false;\n            }\n          });\n\n          if (!wordRange) {\n            this.hide();\n            return;\n          }\n\n          keyword = wordRange.toString();\n        } else {\n          wordRange = _range.getWordRange();\n          keyword = wordRange.toString();\n        }\n\n        if (this.hints.length && keyword) {\n          this.$content.empty();\n          var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n          var containerOffset = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(this.options.container).offset();\n\n          if (bnd) {\n            bnd.top -= containerOffset.top;\n            bnd.left -= containerOffset.left;\n            this.$popover.hide();\n            this.lastWordRange = wordRange;\n            this.hints.forEach(function (hint, idx) {\n              if (hint.match.test(keyword)) {\n                _this4.createGroup(idx, keyword).appendTo(_this4.$content);\n              }\n            }); // select first .note-hint-item\n\n            this.$content.find('.note-hint-item:first').addClass('active'); // set position for popover after group is created\n\n            if (this.direction === 'top') {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n              });\n            } else {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top + bnd.height + POPOVER_DIST\n              });\n            }\n          }\n        } else {\n          this.hide();\n        }\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.$popover.show();\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.$popover.hide();\n    }\n  }]);\n\n  return HintPopover;\n}();\n\n\n// CONCATENATED MODULE: ./src/js/base/settings.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote, {\n  version: '0.8.18',\n  plugins: {},\n  dom: dom,\n  range: range,\n  lists: lists,\n  options: {\n    langInfo: external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor_Editor,\n      'clipboard': Clipboard_Clipboard,\n      'dropzone': Dropzone_Dropzone,\n      'codeview': Codeview_CodeView,\n      'statusbar': Statusbar_Statusbar,\n      'fullscreen': Fullscreen_Fullscreen,\n      'handle': Handle_Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover_HintPopover,\n      'autoLink': AutoLink_AutoLink,\n      'autoSync': AutoSync_AutoSync,\n      'autoReplace': AutoReplace_AutoReplace,\n      'placeholder': Placeholder_Placeholder,\n      'buttons': Buttons_Buttons,\n      'toolbar': Toolbar_Toolbar,\n      'linkDialog': LinkDialog_LinkDialog,\n      'linkPopover': LinkPopover_LinkPopover,\n      'imageDialog': ImageDialog_ImageDialog,\n      'imagePopover': ImagePopover_ImagePopover,\n      'tablePopover': TablePopover_TablePopover,\n      'videoDialog': VideoDialog_VideoDialog,\n      'helpDialog': HelpDialog_HelpDialog,\n      'airPopover': AirPopover_AirPopover\n    },\n    buttons: {},\n    lang: 'en-US',\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']]],\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']], ['float', ['floatLeft', 'floatRight', 'floatNone']], ['remove', ['removeMedia']]],\n      link: [['link', ['linkDialogShow', 'unlink']]],\n      table: [['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]],\n      air: [['color', ['color']], ['font', ['bold', 'underline', 'clear']], ['para', ['ul', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], ['view', ['fullscreen', 'codeview']]]\n    },\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false,\n    // TBD\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n    useProtocol: true,\n    defaultProtocol: 'http://',\n    focus: false,\n    tabDisabled: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n    fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana'],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n    fontSizeUnits: ['px', 'pt'],\n    // pallete colors(n x n)\n    colors: [['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']],\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']],\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00'\n    },\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n    tableClassName: 'table table-bordered',\n    insertTableMaxSize: {\n      col: 10,\n      row: 10\n    },\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n    maximumImageFileSize: null,\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null\n    },\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true\n    },\n    codeviewFilter: false,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: ['www.youtube.com', 'www.youtube-nocookie.com', 'www.facebook.com', 'vine.co', 'instagram.com', 'player.vimeo.com', 'www.dailymotion.com', 'player.youku.com', 'v.qq.com'],\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show'\n      },\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show'\n      }\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video'\n    }\n  }\n});\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports, __webpack_require__) {\n\n// extracted by mini-css-extract-plugin\n\n/***/ }),\n\n/***/ 52:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: external {\"root\":\"jQuery\",\"commonjs2\":\"jquery\",\"commonjs\":\"jquery\",\"amd\":\"jquery\"}\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_ = __webpack_require__(0);\nvar external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_);\n\n// EXTERNAL MODULE: ./src/js/base/renderer.js\nvar renderer = __webpack_require__(1);\n\n// CONCATENATED MODULE: ./src/js/bs3/ui.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\nvar editor = renderer[\"a\" /* default */].create('<div class=\"note-editor note-frame panel panel-default\"/>');\nvar toolbar = renderer[\"a\" /* default */].create('<div class=\"panel-heading note-toolbar\" role=\"toolbar\"/>');\nvar editingArea = renderer[\"a\" /* default */].create('<div class=\"note-editing-area\"/>');\nvar codable = renderer[\"a\" /* default */].create('<textarea class=\"note-codable\" aria-multiline=\"true\"/>');\nvar editable = renderer[\"a\" /* default */].create('<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nvar statusbar = renderer[\"a\" /* default */].create(['<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>', '<div class=\"note-statusbar\" role=\"status\">', '<div class=\"note-resizebar\" aria-label=\"Resize\">', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '</div>', '</div>'].join(''));\nvar airEditor = renderer[\"a\" /* default */].create('<div class=\"note-editor note-airframe\"/>');\nvar airEditable = renderer[\"a\" /* default */].create(['<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>', '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>'].join(''));\nvar buttonGroup = renderer[\"a\" /* default */].create('<div class=\"note-btn-group btn-group\">');\nvar dropdown = renderer[\"a\" /* default */].create('<ul class=\"note-dropdown-menu dropdown-menu\">', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    var option = _typeof(item) === 'object' ? item.option : undefined;\n    var dataValue = 'data-value=\"' + value + '\"';\n    var dataOption = option !== undefined ? ' data-option=\"' + option + '\"' : '';\n    return '<li aria-label=\"' + value + '\"><a href=\"#\" ' + (dataValue + dataOption) + '>' + content + '</a></li>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\n\nvar dropdownButtonContents = function dropdownButtonContents(contents, options) {\n  return contents + ' ' + icon(options.icons.caret, 'span');\n};\n\nvar dropdownCheck = renderer[\"a\" /* default */].create('<ul class=\"note-dropdown-menu dropdown-menu note-check\">', function ($node, options) {\n  var markup = Array.isArray(options.items) ? options.items.map(function (item) {\n    var value = typeof item === 'string' ? item : item.value || '';\n    var content = options.template ? options.template(item) : item;\n    return '<li aria-label=\"' + item + '\"><a href=\"#\" data-value=\"' + value + '\">' + icon(options.checkClassName) + ' ' + content + '</a></li>';\n  }).join('') : options.items;\n  $node.html(markup).attr({\n    'aria-label': options.title\n  });\n\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\nvar dialog = renderer[\"a\" /* default */].create('<div class=\"modal note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"/>', function ($node, options) {\n  if (options.fade) {\n    $node.addClass('fade');\n  }\n\n  $node.attr({\n    'aria-label': options.title\n  });\n  $node.html(['<div class=\"modal-dialog\">', '<div class=\"modal-content\">', options.title ? '<div class=\"modal-header\">' + '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" aria-hidden=\"true\">&times;</button>' + '<h4 class=\"modal-title\">' + options.title + '</h4>' + '</div>' : '', '<div class=\"modal-body\">' + options.body + '</div>', options.footer ? '<div class=\"modal-footer\">' + options.footer + '</div>' : '', '</div>', '</div>'].join(''));\n});\nvar popover = renderer[\"a\" /* default */].create(['<div class=\"note-popover popover in\">', '<div class=\"arrow\"></div>', '<div class=\"popover-content note-children-container\"></div>', '</div>'].join(''), function ($node, options) {\n  var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n  $node.addClass(direction);\n\n  if (options.hideArrow) {\n    $node.find('.arrow').hide();\n  }\n});\nvar ui_checkbox = renderer[\"a\" /* default */].create('<div class=\"checkbox\"></div>', function ($node, options) {\n  $node.html(['<label' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>', '<input type=\"checkbox\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''), options.checked ? ' checked' : '', ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>', options.text ? options.text : '', '</label>'].join(''));\n});\n\nvar icon = function icon(iconClassName, tagName) {\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"></' + tagName + '>';\n};\n\nvar ui_ui = function ui(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    dropdown: dropdown,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheck: dropdownCheck,\n    dialog: dialog,\n    popover: popover,\n    checkbox: ui_checkbox,\n    icon: icon,\n    options: editorOptions,\n    palette: function palette($node, options) {\n      return renderer[\"a\" /* default */].create('<div class=\"note-color-palette\"/>', function ($node, options) {\n        var contents = [];\n\n        for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n          var eventName = options.eventName;\n          var colors = options.colors[row];\n          var colorsName = options.colorsName[row];\n          var buttons = [];\n\n          for (var col = 0, colSize = colors.length; col < colSize; col++) {\n            var color = colors[col];\n            var colorName = colorsName[col];\n            buttons.push(['<button type=\"button\" class=\"note-color-btn\"', 'style=\"background-color:', color, '\" ', 'data-event=\"', eventName, '\" ', 'data-value=\"', color, '\" ', 'title=\"', colorName, '\" ', 'aria-label=\"', colorName, '\" ', 'data-toggle=\"button\" tabindex=\"-1\"></button>'].join(''));\n          }\n\n          contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n        }\n\n        $node.html(contents.join(''));\n\n        if (options.tooltip) {\n          $node.find('.note-color-btn').tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          });\n        }\n      })($node, options);\n    },\n    button: function button($node, options) {\n      return renderer[\"a\" /* default */].create('<button type=\"button\" class=\"note-btn btn btn-default btn-sm\" tabindex=\"-1\">', function ($node, options) {\n        if (options && options.tooltip) {\n          $node.attr({\n            title: options.tooltip,\n            'aria-label': options.tooltip\n          }).tooltip({\n            container: options.container || editorOptions.container,\n            trigger: 'hover',\n            placement: 'bottom'\n          }).on('click', function (e) {\n            external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default()(e.currentTarget).tooltip('hide');\n          });\n        }\n\n        if (options && options.codeviewButton) {\n          $node.addClass('note-codeview-keep');\n        }\n      })($node, options);\n    },\n    toggleBtn: function toggleBtn($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n    toggleBtnActive: function toggleBtnActive($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n    onDialogShown: function onDialogShown($dialog, handler) {\n      $dialog.one('shown.bs.modal', handler);\n    },\n    onDialogHidden: function onDialogHidden($dialog, handler) {\n      $dialog.one('hidden.bs.modal', handler);\n    },\n    showDialog: function showDialog($dialog) {\n      $dialog.modal('show');\n    },\n    hideDialog: function hideDialog($dialog) {\n      $dialog.modal('hide');\n    },\n    createLayout: function createLayout($note) {\n      var $editor = (editorOptions.airMode ? airEditor([editingArea([codable(), airEditable()])]) : editorOptions.toolbarPosition === 'bottom' ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()]) : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])).render();\n      $editor.insertAfter($note);\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar')\n      };\n    },\n    removeLayout: function removeLayout($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.show();\n    }\n  };\n};\n\n/* harmony default export */ var bs3_ui = (ui_ui);\n// EXTERNAL MODULE: ./src/js/base/settings.js + 37 modules\nvar settings = __webpack_require__(3);\n\n// EXTERNAL MODULE: ./src/styles/summernote-bs3.scss\nvar summernote_bs3 = __webpack_require__(4);\n\n// CONCATENATED MODULE: ./src/js/bs3/settings.js\n\n\n\n\nexternal_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote = external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.extend(external_root_jQuery_commonjs2_jquery_commonjs_jquery_amd_jquery_default.a.summernote, {\n  ui_template: bs3_ui,\n  \"interface\": 'bs3'\n});\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=summernote.js.map"
  },
  {
    "path": "public/vendor/summernote/summernote.min.js.LICENSE.txt",
    "content": "/*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */\n"
  },
  {
    "path": "public/vendor/telescope/app-dark.css",
    "content": "@charset \"UTF-8\";.form-control:-moz-focusring{text-shadow:none!important}\n\n/*!\n * Bootstrap v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#4b5563;--gray-dark:#1f2937;--primary:#4040c8;--secondary:#4b5563;--success:#059669;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--light:#f3f4f6;--dark:#1f2937;--breakpoint-xs:0;--breakpoint-sm:2px;--breakpoint-md:8px;--breakpoint-lg:9px;--breakpoint-xl:10px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-family:sans-serif;line-height:1.15}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{background-color:#111827;color:#f3f4f6;font-family:Figtree,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;margin:0;text-align:left}[tabindex=\"-1\"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;margin-top:0}p{margin-bottom:1rem;margin-top:0}abbr[data-original-title],abbr[title]{border-bottom:0;cursor:help;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{background-color:transparent;color:#818cf8;text-decoration:none}a:hover{color:#a5b4fc;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{-ms-overflow-style:scrollbar;margin-bottom:1rem;margin-top:0;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{caption-side:bottom;color:#9ca3af;padding-bottom:.75rem;padding-top:.75rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{color:inherit;display:block;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;max-width:100%;padding:0;white-space:normal;width:100%}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:none;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}summary{cursor:pointer;display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.2;margin-bottom:.5rem}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{border:0;border-top:1px solid rgba(0,0,0,.1);margin-bottom:1rem;margin-top:1rem}.small,small{font-size:.875em;font-weight:400}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote-footer{color:#4b5563;display:block;font-size:.875em}.blockquote-footer:before{content:\"— \"}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:#111827;border:1px solid #d1d5db;border-radius:.25rem;padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:#4b5563;font-size:90%}code{word-wrap:break-word;color:#e83e8c;font-size:87.5%}a>code{color:inherit}kbd{background-color:#111827;border-radius:.2rem;color:#fff;font-size:87.5%;padding:.2rem .4rem}kbd kbd{font-size:100%;font-weight:600;padding:0}pre{color:#111827;display:block;font-size:87.5%}pre code{color:inherit;font-size:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px;width:100%}@media (min-width:2px){.container,.container-sm{max-width:1137px}}@media (min-width:8px){.container,.container-md,.container-sm{max-width:1138px}}@media (min-width:9px){.container,.container-lg,.container-md,.container-sm{max-width:1139px}}@media (min-width:10px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-left:-15px;margin-right:-15px}.no-gutters{margin-left:0;margin-right:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-left:0;padding-right:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{padding-left:15px;padding-right:15px;position:relative;width:100%}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;max-width:100%;width:auto}.col-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}@media (min-width:2px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;max-width:100%;width:auto}.col-sm-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-sm-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-sm-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-sm-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-sm-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}}@media (min-width:8px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;max-width:100%;width:auto}.col-md-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-md-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-md-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-md-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-md-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}}@media (min-width:9px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;max-width:100%;width:auto}.col-lg-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-lg-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-lg-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-lg-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-lg-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}}@media (min-width:10px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;max-width:100%;width:auto}.col-xl-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-xl-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-xl-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-xl-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-xl-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}}.table{color:#f3f4f6;margin-bottom:1rem;width:100%}.table td,.table th{border-top:1px solid #374151;padding:.75rem;vertical-align:top}.table thead th{border-bottom:2px solid #374151;vertical-align:bottom}.table tbody+tbody{border-top:2px solid #374151}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #374151}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:#374151;color:#f3f4f6}.table-primary,.table-primary>td,.table-primary>th{background-color:#cacaf0}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#9c9ce2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b6b6ea}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#cdcfd3}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#a1a7ae}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#bfc2c7}.table-success,.table-success>td,.table-success>th{background-color:#b9e2d5}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#7dc8b1}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a7dbca}.table-info,.table-info>td,.table-info>th{background-color:#c2d3f9}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#8eaef5}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abc2f7}.table-warning,.table-warning>td,.table-warning>th{background-color:#f4d9b9}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ebb87e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f1cda3}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c2c2}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed8e8e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1acac}.table-light,.table-light>td,.table-light>th{background-color:#fcfcfc}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#f9f9fa}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#efefef}.table-dark,.table-dark>td,.table-dark>th{background-color:#c0c3c7}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8b9097}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b3b6bb}.table-active,.table-active>td,.table-active>th{background-color:#374151}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#2d3542}.table .thead-dark th{background-color:#1f2937;border-color:#2d3b4f;color:#fff}.table .thead-light th{background-color:#e5e7eb;border-color:#374151;color:#374151}.table-dark{background-color:#1f2937;color:#fff}.table-dark td,.table-dark th,.table-dark thead th{border-color:#2d3b4f}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075);color:#fff}@media (max-width:1.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:7.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-md>.table-bordered{border:0}}@media (max-width:8.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:9.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive>.table-bordered{border:0}.form-control{background-clip:padding-box;background-color:#1f2937;border:1px solid #4b5563;border-radius:.25rem;color:#e5e7eb;display:block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{background-color:#1f2937;border-color:#a3a3e5;box-shadow:0 0 0 .2rem rgba(64,64,200,.25);color:#e5e7eb;outline:0}.form-control::-moz-placeholder{color:#4b5563;opacity:1}.form-control::placeholder{color:#4b5563;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e5e7eb;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #e5e7eb}select.form-control:focus::-ms-value{background-color:#1f2937;color:#e5e7eb}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + 1px);padding-top:calc(.375rem + 1px)}.col-form-label-lg{font-size:1.25rem;line-height:1.5;padding-bottom:calc(.5rem + 1px);padding-top:calc(.5rem + 1px)}.col-form-label-sm{font-size:.875rem;line-height:1.5;padding-bottom:calc(.25rem + 1px);padding-top:calc(.25rem + 1px)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:1px 0;color:#f3f4f6;display:block;font-size:1rem;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:.2rem;font-size:.875rem;height:calc(1.5em + .5rem + 2px);line-height:1.5;padding:.25rem .5rem}.form-control-lg{border-radius:6px;font-size:1.25rem;height:calc(1.5em + 1rem + 2px);line-height:1.5;padding:.5rem 1rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-left:-5px;margin-right:-5px}.form-row>.col,.form-row>[class*=col-]{padding-left:5px;padding-right:5px}.form-check{display:block;padding-left:1.25rem;position:relative}.form-check-input{margin-left:-1.25rem;margin-top:.3rem;position:absolute}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#9ca3af}.form-check-label{margin-bottom:0}.form-check-inline{align-items:center;display:inline-flex;margin-right:.75rem;padding-left:0}.form-check-inline .form-check-input{margin-left:0;margin-right:.3125rem;margin-top:0;position:static}.valid-feedback{color:#059669;display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:rgba(5,150,105,.9);border-radius:.25rem;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23059669' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#059669;padding-right:calc(1.5em + .75rem)!important}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#059669;box-shadow:0 0 0 .2rem rgba(5,150,105,.25)}.was-validated select.form-control:valid,select.form-control.is-valid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-valid,.was-validated .custom-select:valid{background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%231f2937' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") right .75rem center/8px 10px no-repeat,#1f2937 url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23059669' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#059669;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#059669;box-shadow:0 0 0 .2rem rgba(5,150,105,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#059669}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#059669}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#059669}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#07c78c;border-color:#07c78c}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(5,150,105,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before{border-color:#059669}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#059669}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#059669;box-shadow:0 0 0 .2rem rgba(5,150,105,.25)}.invalid-feedback{color:#dc2626;display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:rgba(220,38,38,.9);border-radius:.25rem;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc2626'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc2626' stroke='none'/%3E%3C/svg%3E\");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#dc2626;padding-right:calc(1.5em + .75rem)!important}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc2626;box-shadow:0 0 0 .2rem rgba(220,38,38,.25)}.was-validated select.form-control:invalid,select.form-control.is-invalid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%231f2937' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") right .75rem center/8px 10px no-repeat,#1f2937 url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc2626'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc2626' stroke='none'/%3E%3C/svg%3E\") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#dc2626;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc2626;box-shadow:0 0 0 .2rem rgba(220,38,38,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc2626}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc2626}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc2626}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e35252;border-color:#e35252}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,38,38,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before{border-color:#dc2626}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc2626}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc2626;box-shadow:0 0 0 .2rem rgba(220,38,38,.25)}.form-inline{align-items:center;display:flex;flex-flow:row wrap}.form-inline .form-check{width:100%}@media (min-width:2px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{align-items:center;display:flex;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{align-items:center;display:flex;justify-content:center;padding-left:0;width:auto}.form-inline .form-check-input{flex-shrink:0;margin-left:0;margin-right:.25rem;margin-top:0;position:relative}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;color:#f3f4f6;display:inline-block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#f3f4f6;text-decoration:none}.btn.focus,.btn:focus{box-shadow:0 0 0 .2rem rgba(64,64,200,.25);outline:0}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{background-color:#4040c8;border-color:#4040c8;color:#fff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{background-color:#3232af;border-color:#3030a5;color:#fff}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(93,93,208,.5)}.btn-primary.disabled,.btn-primary:disabled{background-color:#4040c8;border-color:#4040c8;color:#fff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{background-color:#3030a5;border-color:#2d2d9b;color:#fff}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(93,93,208,.5)}.btn-secondary{background-color:#4b5563;border-color:#4b5563;color:#fff}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{background-color:#3b424d;border-color:#353c46;color:#fff}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem hsla(213,9%,44%,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#4b5563;border-color:#4b5563;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{background-color:#353c46;border-color:#30363f;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(213,9%,44%,.5)}.btn-success{background-color:#059669;border-color:#059669;color:#fff}.btn-success.focus,.btn-success:focus,.btn-success:hover{background-color:#04714f;border-color:#036546;color:#fff}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(43,166,128,.5)}.btn-success.disabled,.btn-success:disabled{background-color:#059669;border-color:#059669;color:#fff}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{background-color:#036546;border-color:#03583e;color:#fff}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(43,166,128,.5)}.btn-info{background-color:#2563eb;border-color:#2563eb;color:#fff}.btn-info.focus,.btn-info:focus,.btn-info:hover{background-color:#1451d6;border-color:#134cca;color:#fff}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(70,122,238,.5)}.btn-info.disabled,.btn-info:disabled{background-color:#2563eb;border-color:#2563eb;color:#fff}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{background-color:#134cca;border-color:#1248bf;color:#fff}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(70,122,238,.5)}.btn-warning{background-color:#d97706;border-color:#d97706;color:#fff}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{background-color:#b46305;border-color:#a75c05;color:#fff}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(223,139,43,.5)}.btn-warning.disabled,.btn-warning:disabled{background-color:#d97706;border-color:#d97706;color:#fff}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{background-color:#a75c05;border-color:#9b5504;color:#fff}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(223,139,43,.5)}.btn-danger{background-color:#dc2626;border-color:#dc2626;color:#fff}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{background-color:#bd1f1f;border-color:#b21d1d;color:#fff}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,71,71,.5)}.btn-danger.disabled,.btn-danger:disabled{background-color:#dc2626;border-color:#dc2626;color:#fff}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{background-color:#b21d1d;border-color:#a71b1b;color:#fff}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,71,71,.5)}.btn-light{background-color:#f3f4f6;border-color:#f3f4f6;color:#111827}.btn-light.focus,.btn-light:focus,.btn-light:hover{background-color:#dde0e6;border-color:#d6d9e0;color:#111827}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem hsla(220,7%,83%,.5)}.btn-light.disabled,.btn-light:disabled{background-color:#f3f4f6;border-color:#f3f4f6;color:#111827}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{background-color:#d6d9e0;border-color:#cfd3db;color:#111827}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(220,7%,83%,.5)}.btn-dark{background-color:#1f2937;border-color:#1f2937;color:#fff}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{background-color:#11171f;border-color:#0d1116;color:#fff}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(65,73,85,.5)}.btn-dark.disabled,.btn-dark:disabled{background-color:#1f2937;border-color:#1f2937;color:#fff}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{background-color:#0d1116;border-color:#080b0e;color:#fff}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(65,73,85,.5)}.btn-outline-primary{border-color:#4040c8;color:#4040c8}.btn-outline-primary:hover{background-color:#4040c8;border-color:#4040c8;color:#fff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(64,64,200,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{background-color:transparent;color:#4040c8}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{background-color:#4040c8;border-color:#4040c8;color:#fff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(64,64,200,.5)}.btn-outline-secondary{border-color:#4b5563;color:#4b5563}.btn-outline-secondary:hover{background-color:#4b5563;border-color:#4b5563;color:#fff}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(75,85,99,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{background-color:transparent;color:#4b5563}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{background-color:#4b5563;border-color:#4b5563;color:#fff}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(75,85,99,.5)}.btn-outline-success{border-color:#059669;color:#059669}.btn-outline-success:hover{background-color:#059669;border-color:#059669;color:#fff}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(5,150,105,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{background-color:transparent;color:#059669}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{background-color:#059669;border-color:#059669;color:#fff}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(5,150,105,.5)}.btn-outline-info{border-color:#2563eb;color:#2563eb}.btn-outline-info:hover{background-color:#2563eb;border-color:#2563eb;color:#fff}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(37,99,235,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{background-color:transparent;color:#2563eb}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{background-color:#2563eb;border-color:#2563eb;color:#fff}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(37,99,235,.5)}.btn-outline-warning{border-color:#d97706;color:#d97706}.btn-outline-warning:hover{background-color:#d97706;border-color:#d97706;color:#fff}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(217,119,6,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{background-color:transparent;color:#d97706}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{background-color:#d97706;border-color:#d97706;color:#fff}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(217,119,6,.5)}.btn-outline-danger{border-color:#dc2626;color:#dc2626}.btn-outline-danger:hover{background-color:#dc2626;border-color:#dc2626;color:#fff}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,38,38,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{background-color:transparent;color:#dc2626}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{background-color:#dc2626;border-color:#dc2626;color:#fff}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,38,38,.5)}.btn-outline-light{border-color:#f3f4f6;color:#f3f4f6}.btn-outline-light:hover{background-color:#f3f4f6;border-color:#f3f4f6;color:#111827}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(243,244,246,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{background-color:transparent;color:#f3f4f6}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{background-color:#f3f4f6;border-color:#f3f4f6;color:#111827}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(243,244,246,.5)}.btn-outline-dark{border-color:#1f2937;color:#1f2937}.btn-outline-dark:hover{background-color:#1f2937;border-color:#1f2937;color:#fff}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(31,41,55,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{background-color:transparent;color:#1f2937}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{background-color:#1f2937;border-color:#1f2937;color:#fff}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(31,41,55,.5)}.btn-link{color:#818cf8;font-weight:400;text-decoration:none}.btn-link:hover{color:#a5b4fc}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#4b5563;pointer-events:none}.btn-group-lg>.btn,.btn-lg{border-radius:6px;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.btn-group-sm>.btn,.btn-sm{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;position:relative;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.width{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.width{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:\"\";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{background-clip:padding-box;background-color:#374151;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;color:#f3f4f6;display:none;float:left;font-size:1rem;left:0;list-style:none;margin:.125rem 0 0;min-width:10rem;padding:.5rem 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu-left{left:0;right:auto}.dropdown-menu-right{left:auto;right:0}@media (min-width:2px){.dropdown-menu-sm-left{left:0;right:auto}.dropdown-menu-sm-right{left:auto;right:0}}@media (min-width:8px){.dropdown-menu-md-left{left:0;right:auto}.dropdown-menu-md-right{left:auto;right:0}}@media (min-width:9px){.dropdown-menu-lg-left{left:0;right:auto}.dropdown-menu-lg-right{left:auto;right:0}}@media (min-width:10px){.dropdown-menu-xl-left{left:0;right:auto}.dropdown-menu-xl-right{left:auto;right:0}}.dropup .dropdown-menu{bottom:100%;margin-bottom:.125rem;margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:\"\";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{left:100%;margin-left:.125rem;margin-top:0;right:auto;top:0}.dropright .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:\"\";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{left:auto;margin-right:.125rem;margin-top:0;right:100%;top:0}.dropleft .dropdown-toggle:after{content:\"\";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:\"\";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{bottom:auto;right:auto}.dropdown-divider{border-top:1px solid #e5e7eb;height:0;margin:.5rem 0;overflow:hidden}.dropdown-item{background-color:transparent;border:0;clear:both;color:#fff;display:block;font-weight:400;padding:.25rem 1.5rem;text-align:inherit;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:#e5e7eb;color:#090d15;text-decoration:none}.dropdown-item.active,.dropdown-item:active{background-color:#4040c8;color:#fff;text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:#6b7280;pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:#4b5563;display:block;font-size:.875rem;margin-bottom:0;padding:.5rem 1.5rem;white-space:nowrap}.dropdown-item-text{color:#fff;display:block;padding:.25rem 1.5rem}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{flex:1 1 auto;margin-bottom:0;min-width:0;position:relative;width:1%}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.custom-file{align-items:center;display:flex}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label:after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label:after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{align-items:center;background-color:#e5e7eb;border:1px solid #4b5563;border-radius:.25rem;color:#e5e7eb;display:flex;font-size:1rem;font-weight:400;line-height:1.5;margin-bottom:0;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{border-radius:6px;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-bottom-left-radius:0;border-top-left-radius:0}.custom-control{display:block;min-height:1.5rem;padding-left:1.5rem;position:relative;-webkit-print-color-adjust:exact;print-color-adjust:exact;z-index:1}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{height:1.25rem;left:0;opacity:0;position:absolute;width:1rem;z-index:-1}.custom-control-input:checked~.custom-control-label:before{background-color:#4040c8;border-color:#4040c8;color:#fff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(64,64,200,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#a3a3e5}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#cbcbf0;border-color:#cbcbf0;color:#fff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#4b5563}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e5e7eb}.custom-control-label{margin-bottom:0;position:relative;vertical-align:top}.custom-control-label:before{background-color:#1f2937;border:1px solid #6b7280;pointer-events:none}.custom-control-label:after,.custom-control-label:before{content:\"\";display:block;height:1rem;left:-1.5rem;position:absolute;top:.25rem;width:1rem}.custom-control-label:after{background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='m6.564.75-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#4040c8;border-color:#4040c8}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(64,64,200,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(64,64,200,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(64,64,200,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{border-radius:.5rem;left:-2.25rem;pointer-events:all;width:1.75rem}.custom-switch .custom-control-label:after{background-color:#6b7280;border-radius:.5rem;height:calc(1rem - 4px);left:calc(-2.25rem + 2px);top:calc(.25rem + 2px);transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:calc(1rem - 4px)}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#1f2937;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(64,64,200,.5)}.custom-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#1f2937 url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%231f2937' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") right .75rem center/8px 10px no-repeat;border:1px solid #4b5563;border-radius:.25rem;color:#e5e7eb;display:inline-block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem 1.75rem .375rem .75rem;vertical-align:middle;width:100%}.custom-select:focus{border-color:#a3a3e5;box-shadow:0 0 0 .2rem rgba(64,64,200,.25);outline:0}.custom-select:focus::-ms-value{background-color:#1f2937;color:#e5e7eb}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){background-image:none;height:auto;padding-right:.75rem}.custom-select:disabled{background-color:#e5e7eb;color:#4b5563}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #e5e7eb}.custom-select-sm{font-size:.875rem;height:calc(1.5em + .5rem + 2px);padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.custom-select-lg{font-size:1.25rem;height:calc(1.5em + 1rem + 2px);padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{height:calc(1.5em + .75rem + 2px);position:relative;width:100%}.custom-file-input{margin:0;opacity:0;overflow:hidden;z-index:2}.custom-file-input:focus~.custom-file-label{border-color:#a3a3e5;box-shadow:0 0 0 .2rem rgba(64,64,200,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e5e7eb}.custom-file-input:lang(en)~.custom-file-label:after{content:\"Browse\"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{background-color:#1f2937;border:1px solid #4b5563;border-radius:.25rem;font-weight:400;height:calc(1.5em + .75rem + 2px);left:0;overflow:hidden;z-index:1}.custom-file-label,.custom-file-label:after{color:#e5e7eb;line-height:1.5;padding:.375rem .75rem;position:absolute;right:0;top:0}.custom-file-label:after{background-color:#e5e7eb;border-left:inherit;border-radius:0 .25rem .25rem 0;bottom:0;content:\"Browse\";display:block;height:calc(1.5em + .75rem);z-index:3}.custom-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;height:1.4rem;padding:0;width:100%}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #111827,0 0 0 .2rem rgba(64,64,200,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #111827,0 0 0 .2rem rgba(64,64,200,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #111827,0 0 0 .2rem rgba(64,64,200,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:#4040c8;border:0;border-radius:1rem;height:1rem;margin-top:-.25rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#cbcbf0}.custom-range::-webkit-slider-runnable-track{background-color:#d1d5db;border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-moz-range-thumb{-moz-appearance:none;appearance:none;background-color:#4040c8;border:0;border-radius:1rem;height:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#cbcbf0}.custom-range::-moz-range-track{background-color:#d1d5db;border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-thumb{appearance:none;background-color:#4040c8;border:0;border-radius:1rem;height:1rem;margin-left:.2rem;margin-right:.2rem;margin-top:0;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#cbcbf0}.custom-range::-ms-track{background-color:transparent;border-color:transparent;border-width:.5rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#d1d5db;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#6b7280}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#6b7280}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#6b7280}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#4b5563;cursor:default;pointer-events:none}.nav-tabs{border-bottom:1px solid #d1d5db}.nav-tabs .nav-link{background-color:transparent;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem;margin-bottom:-1px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e5e7eb #e5e7eb #d1d5db;isolation:isolate}.nav-tabs .nav-link.disabled{background-color:transparent;border-color:transparent;color:#4b5563}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:#111827;border-color:#d1d5db #d1d5db #111827;color:#374151}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#1f2937;color:#fff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{padding:.5rem 1rem;position:relative}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between}.navbar-brand{display:inline-block;font-size:1.25rem;line-height:inherit;margin-right:1rem;padding-bottom:.3125rem;padding-top:.3125rem;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{float:none;position:static}.navbar-text{display:inline-block;padding-bottom:.5rem;padding-top:.5rem}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:1px solid transparent;border-radius:.25rem;font-size:1.25rem;line-height:1;padding:.25rem .75rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{background:50%/100% 100% no-repeat;content:\"\";display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:1.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-left:0;padding-right:0}}@media (min-width:2px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:7.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-left:0;padding-right:0}}@media (min-width:8px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:8.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-left:0;padding-right:0}}@media (min-width:9px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:9.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-left:0;padding-right:0}}@media (min-width:10px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-left:0;padding-right:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{border-color:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{word-wrap:break-word;background-clip:border-box;background-color:#1f2937;border:1px solid rgba(0,0,0,.125);border-radius:6px;display:flex;flex-direction:column;min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:5px;border-top-right-radius:5px;border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{background-color:#374151;border-bottom:1px solid rgba(0,0,0,.125);margin-bottom:0;padding:.75rem 1.25rem}.card-header:first-child{border-radius:5px 5px 0 0}.card-footer{background-color:#374151;border-top:1px solid rgba(0,0,0,.125);padding:.75rem 1.25rem}.card-footer:last-child{border-radius:0 0 5px 5px}.card-header-tabs{border-bottom:0;margin-bottom:-.75rem}.card-header-pills,.card-header-tabs{margin-left:-.625rem;margin-right:-.625rem}.card-img-overlay{border-radius:5px;bottom:0;left:0;padding:1.25rem;position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:5px;border-top-right-radius:5px}.card-img,.card-img-bottom{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.card-deck .card{margin-bottom:15px}@media (min-width:2px){.card-deck{display:flex;flex-flow:row wrap;margin-left:-15px;margin-right:-15px}.card-deck .card{flex:1 0 0%;margin-bottom:0;margin-left:15px;margin-right:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:2px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:2px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{background-color:#e5e7eb;border-radius:.25rem;display:flex;flex-wrap:wrap;list-style:none;margin-bottom:1rem;padding:.75rem 1rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{color:#4b5563;content:\"/\";float:left;padding-right:.5rem}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#4b5563}.pagination{border-radius:.25rem;display:flex;list-style:none;padding-left:0}.page-link{background-color:#fff;border:1px solid #d1d5db;color:#818cf8;display:block;line-height:1.25;margin-left:-1px;padding:.5rem .75rem;position:relative}.page-link:hover{background-color:#e5e7eb;border-color:#d1d5db;color:#a5b4fc;text-decoration:none;z-index:2}.page-link:focus{box-shadow:0 0 0 .2rem rgba(64,64,200,.25);outline:0;z-index:3}.page-item:first-child .page-link{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem;margin-left:0}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link{background-color:#4040c8;border-color:#4040c8;color:#fff;z-index:3}.page-item.disabled .page-link{background-color:#fff;border-color:#d1d5db;color:#4b5563;cursor:auto;pointer-events:none}.pagination-lg .page-link{font-size:1.25rem;line-height:1.5;padding:.75rem 1.5rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm .page-link{font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.badge{border-radius:.25rem;display:inline-block;font-size:.875rem;font-weight:600;line-height:1;padding:.25em .4em;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:baseline;white-space:nowrap}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{border-radius:10rem;padding-left:.6em;padding-right:.6em}.badge-primary{background-color:#4040c8;color:#fff}a.badge-primary:focus,a.badge-primary:hover{background-color:#3030a5;color:#fff}a.badge-primary.focus,a.badge-primary:focus{box-shadow:0 0 0 .2rem rgba(64,64,200,.5);outline:0}.badge-secondary{background-color:#4b5563;color:#fff}a.badge-secondary:focus,a.badge-secondary:hover{background-color:#353c46;color:#fff}a.badge-secondary.focus,a.badge-secondary:focus{box-shadow:0 0 0 .2rem rgba(75,85,99,.5);outline:0}.badge-success{background-color:#059669}a.badge-success:focus,a.badge-success:hover{background-color:#036546;color:#fff}a.badge-success.focus,a.badge-success:focus{box-shadow:0 0 0 .2rem rgba(5,150,105,.5);outline:0}.badge-info{background-color:#2563eb}a.badge-info:focus,a.badge-info:hover{background-color:#134cca;color:#fff}a.badge-info.focus,a.badge-info:focus{box-shadow:0 0 0 .2rem rgba(37,99,235,.5);outline:0}.badge-warning{background-color:#d97706}a.badge-warning:focus,a.badge-warning:hover{background-color:#a75c05;color:#fff}a.badge-warning.focus,a.badge-warning:focus{box-shadow:0 0 0 .2rem rgba(217,119,6,.5);outline:0}.badge-danger{background-color:#dc2626}a.badge-danger:focus,a.badge-danger:hover{background-color:#b21d1d;color:#fff}a.badge-danger.focus,a.badge-danger:focus{box-shadow:0 0 0 .2rem rgba(220,38,38,.5);outline:0}.badge-light{background-color:#f3f4f6;color:#111827}a.badge-light:focus,a.badge-light:hover{background-color:#d6d9e0;color:#111827}a.badge-light.focus,a.badge-light:focus{box-shadow:0 0 0 .2rem rgba(243,244,246,.5);outline:0}.badge-dark{background-color:#1f2937;color:#fff}a.badge-dark:focus,a.badge-dark:hover{background-color:#0d1116;color:#fff}a.badge-dark.focus,a.badge-dark:focus{box-shadow:0 0 0 .2rem rgba(31,41,55,.5);outline:0}.jumbotron{background-color:#e5e7eb;border-radius:6px;margin-bottom:2rem;padding:2rem 1rem}@media (min-width:2px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{border-radius:0;padding-left:0;padding-right:0}.alert{border:1px solid transparent;border-radius:.25rem;margin-bottom:1rem;padding:.75rem 1.25rem;position:relative}.alert-heading{color:inherit}.alert-link{font-weight:600}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{color:inherit;padding:.75rem 1.25rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{background-color:#d9d9f4;border-color:#cacaf0;color:#212168}.alert-primary hr{border-top-color:#b6b6ea}.alert-primary .alert-link{color:#151541}.alert-secondary{background-color:#dbdde0;border-color:#cdcfd3;color:#272c33}.alert-secondary hr{border-top-color:#bfc2c7}.alert-secondary .alert-link{color:#111316}.alert-success{background-color:#cdeae1;border-color:#b9e2d5;color:#034e37}.alert-success hr{border-top-color:#a7dbca}.alert-success .alert-link{color:#011d14}.alert-info{background-color:#d3e0fb;border-color:#c2d3f9;color:#13337a}.alert-info hr{border-top-color:#abc2f7}.alert-info .alert-link{color:#0c214e}.alert-warning{background-color:#f7e4cd;border-color:#f4d9b9;color:#713e03}.alert-warning hr{border-top-color:#f1cda3}.alert-warning .alert-link{color:#3f2302}.alert-danger{background-color:#f8d4d4;border-color:#f5c2c2;color:#721414}.alert-danger hr{border-top-color:#f1acac}.alert-danger .alert-link{color:#470c0c}.alert-light{background-color:#fdfdfd;border-color:#fcfcfc;color:#7e7f80}.alert-light hr{border-top-color:#efefef}.alert-light .alert-link{color:#656666}.alert-dark{background-color:#d2d4d7;border-color:#c0c3c7;color:#10151d}.alert-dark hr{border-top-color:#b3b6bb}.alert-dark .alert-link{color:#000}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{background-color:#e5e7eb;border-radius:.25rem;font-size:.75rem;height:1rem;line-height:0}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{background-color:#4040c8;color:#fff;flex-direction:column;justify-content:center;text-align:center;transition:width .6s ease;white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{align-items:flex-start;display:flex}.media-body{flex:1}.list-group{border-radius:.25rem;display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-item-action{color:#374151;text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:#f3f4f6;color:#374151;text-decoration:none;z-index:1}.list-group-item-action:active{background-color:#e5e7eb;color:#f3f4f6}.list-group-item{background-color:#fff;border:1px solid rgba(0,0,0,.125);display:block;padding:.75rem 1.25rem;position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:#fff;color:#4b5563;pointer-events:none}.list-group-item.active{background-color:#4040c8;border-color:#4040c8;color:#fff;z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:1px;margin-top:-1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}@media (min-width:2px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:8px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:9px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:10px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{background-color:#cacaf0;color:#212168}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{background-color:#b6b6ea;color:#212168}.list-group-item-primary.list-group-item-action.active{background-color:#212168;border-color:#212168;color:#fff}.list-group-item-secondary{background-color:#cdcfd3;color:#272c33}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{background-color:#bfc2c7;color:#272c33}.list-group-item-secondary.list-group-item-action.active{background-color:#272c33;border-color:#272c33;color:#fff}.list-group-item-success{background-color:#b9e2d5;color:#034e37}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{background-color:#a7dbca;color:#034e37}.list-group-item-success.list-group-item-action.active{background-color:#034e37;border-color:#034e37;color:#fff}.list-group-item-info{background-color:#c2d3f9;color:#13337a}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{background-color:#abc2f7;color:#13337a}.list-group-item-info.list-group-item-action.active{background-color:#13337a;border-color:#13337a;color:#fff}.list-group-item-warning{background-color:#f4d9b9;color:#713e03}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{background-color:#f1cda3;color:#713e03}.list-group-item-warning.list-group-item-action.active{background-color:#713e03;border-color:#713e03;color:#fff}.list-group-item-danger{background-color:#f5c2c2;color:#721414}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{background-color:#f1acac;color:#721414}.list-group-item-danger.list-group-item-action.active{background-color:#721414;border-color:#721414;color:#fff}.list-group-item-light{background-color:#fcfcfc;color:#7e7f80}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{background-color:#efefef;color:#7e7f80}.list-group-item-light.list-group-item-action.active{background-color:#7e7f80;border-color:#7e7f80;color:#fff}.list-group-item-dark{background-color:#c0c3c7;color:#10151d}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{background-color:#b3b6bb;color:#10151d}.list-group-item-dark.list-group-item-action.active{background-color:#10151d;border-color:#10151d;color:#fff}.close{color:#000;float:right;font-size:1.5rem;font-weight:600;line-height:1;opacity:.5;text-shadow:0 1px 0 #fff}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{background-color:transparent;border:0;padding:0}a.close.disabled{pointer-events:none}.toast{background-clip:padding-box;background-color:hsla(0,0%,100%,.85);border:1px solid rgba(0,0,0,.1);border-radius:.25rem;box-shadow:0 .25rem .75rem rgba(0,0,0,.1);flex-basis:350px;font-size:.875rem;max-width:350px;opacity:0}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{align-items:center;background-clip:padding-box;background-color:hsla(0,0%,100%,.85);border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px);color:#4b5563;display:flex;padding:.25rem .75rem}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{display:none;height:100%;left:0;outline:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:1050}.modal-dialog{margin:.5rem;pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{content:\"\";display:block;height:calc(100vh - 1rem);height:-moz-min-content;height:min-content}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;height:100%;justify-content:center}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{background-clip:padding-box;background-color:#1f2937;border:1px solid rgba(0,0,0,.2);border-radius:6px;display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{background-color:#4b5563;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{align-items:flex-start;border-bottom:1px solid #4b5563;border-top-left-radius:5px;border-top-right-radius:5px;display:flex;justify-content:space-between;padding:1rem}.modal-header .close{margin:-1rem -1rem -1rem auto;padding:1rem}.modal-title{line-height:1.5;margin-bottom:0}.modal-body{flex:1 1 auto;padding:1rem;position:relative}.modal-footer{align-items:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:1px solid #4b5563;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:.75rem}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:2px){.modal-dialog{margin:1.75rem auto;max-width:500px}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:9px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:10px){.modal-xl{max-width:1140px}}.tooltip{word-wrap:break-word;display:block;font-family:Figtree,sans-serif;font-size:.875rem;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:0;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.tooltip.show{opacity:.9}.tooltip .arrow{display:block;height:.4rem;position:absolute;width:.8rem}.tooltip .arrow:before{border-color:transparent;border-style:solid;content:\"\";position:absolute}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{border-top-color:#000;border-width:.4rem .4rem 0;top:0}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{height:.8rem;left:0;width:.4rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{border-right-color:#000;border-width:.4rem .4rem .4rem 0;right:0}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{border-bottom-color:#000;border-width:0 .4rem .4rem;bottom:0}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{height:.8rem;right:0;width:.4rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{border-left-color:#000;border-width:.4rem 0 .4rem .4rem;left:0}.tooltip-inner{background-color:#000;border-radius:.25rem;color:#fff;max-width:200px;padding:.25rem .5rem;text-align:center}.popover{word-wrap:break-word;background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:6px;font-family:Figtree,sans-serif;font-size:.875rem;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:276px;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1060}.popover,.popover .arrow{display:block;position:absolute}.popover .arrow{height:.5rem;margin:0 6px;width:1rem}.popover .arrow:after,.popover .arrow:before{border-color:transparent;border-style:solid;content:\"\";display:block;position:absolute}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{border-top-color:rgba(0,0,0,.25);border-width:.5rem .5rem 0;bottom:0}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{border-top-color:#fff;border-width:.5rem .5rem 0;bottom:1px}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{height:1rem;left:calc(-.5rem - 1px);margin:6px 0;width:.5rem}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{border-right-color:rgba(0,0,0,.25);border-width:.5rem .5rem .5rem 0;left:0}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{border-right-color:#fff;border-width:.5rem .5rem .5rem 0;left:1px}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{border-bottom-color:rgba(0,0,0,.25);border-width:0 .5rem .5rem;top:0}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{border-bottom-color:#fff;border-width:0 .5rem .5rem;top:1px}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:1px solid #f7f7f7;content:\"\";display:block;left:50%;margin-left:-.5rem;position:absolute;top:0;width:1rem}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{height:1rem;margin:6px 0;right:calc(-.5rem - 1px);width:.5rem}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{border-left-color:rgba(0,0,0,.25);border-width:.5rem 0 .5rem .5rem;right:0}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{border-left-color:#fff;border-width:.5rem 0 .5rem .5rem;right:1px}.popover-header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:5px;border-top-right-radius:5px;font-size:1rem;margin-bottom:0;padding:.5rem .75rem}.popover-header:empty{display:none}.popover-body{color:#f3f4f6;padding:.5rem .75rem}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:\"\";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background:50%/100% 100% no-repeat;display:inline-block;height:20px;width:20px}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='m5.25 0-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='m2.75 0-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;list-style:none;margin-left:15%;margin-right:15%;padding-left:0;position:absolute;right:0;z-index:15}.carousel-indicators li{background-clip:padding-box;background-color:#fff;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:20px;color:#fff;left:15%;padding-bottom:20px;padding-top:20px;position:absolute;right:15%;text-align:center;z-index:10}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{animation:spinner-border .75s linear infinite;border:.25em solid;border-radius:50%;border-right:.25em solid transparent;display:inline-block;height:2rem;vertical-align:-.125em;width:2rem}.spinner-border-sm{border-width:.2em;height:1rem;width:1rem}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{animation:spinner-grow .75s linear infinite;background-color:currentcolor;border-radius:50%;display:inline-block;height:2rem;opacity:0;vertical-align:-.125em;width:2rem}.spinner-grow-sm{height:1rem;width:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#4040c8!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#3030a5!important}.bg-secondary{background-color:#4b5563!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#353c46!important}.bg-success{background-color:#059669!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#036546!important}.bg-info{background-color:#2563eb!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#134cca!important}.bg-warning{background-color:#d97706!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#a75c05!important}.bg-danger{background-color:#dc2626!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#b21d1d!important}.bg-light{background-color:#f3f4f6!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#d6d9e0!important}.bg-dark{background-color:#1f2937!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0d1116!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #4b5563!important}.border-top{border-top:1px solid #4b5563!important}.border-right{border-right:1px solid #4b5563!important}.border-bottom{border-bottom:1px solid #4b5563!important}.border-left{border-left:1px solid #4b5563!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#4040c8!important}.border-secondary{border-color:#4b5563!important}.border-success{border-color:#059669!important}.border-info{border-color:#2563eb!important}.border-warning{border-color:#d97706!important}.border-danger{border-color:#dc2626!important}.border-light{border-color:#f3f4f6!important}.border-dark{border-color:#1f2937!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:6px!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{clear:both;content:\"\";display:block}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:2px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:8px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:9px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:10px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{display:block;overflow:hidden;padding:0;position:relative;width:100%}.embed-responsive:before{content:\"\";display:block}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.embed-responsive-21by9:before{padding-top:42.85714286%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:2px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:8px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:9px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:10px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:2px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:8px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:9px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:10px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;overflow:visible;position:static;white-space:normal;width:auto}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:2px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:8px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:9px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:10px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{background-color:transparent;bottom:0;content:\"\";left:0;pointer-events:auto;position:absolute;right:0;top:0;z-index:1}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:2px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:8px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:9px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:10px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:600!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#4040c8!important}a.text-primary:focus,a.text-primary:hover{color:#2a2a92!important}.text-secondary{color:#4b5563!important}a.text-secondary:focus,a.text-secondary:hover{color:#2a3037!important}.text-success{color:#059669!important}a.text-success:focus,a.text-success:hover{color:#034c35!important}.text-info{color:#2563eb!important}a.text-info:focus,a.text-info:hover{color:#1043b3!important}.text-warning{color:#d97706!important}a.text-warning:focus,a.text-warning:hover{color:#8f4e04!important}.text-danger{color:#dc2626!important}a.text-danger:focus,a.text-danger:hover{color:#9c1919!important}.text-light{color:#f3f4f6!important}a.text-light:focus,a.text-light:hover{color:#c7ccd5!important}.text-dark{color:#1f2937!important}a.text-dark:focus,a.text-dark:hover{color:#030506!important}.text-body{color:#f3f4f6!important}.text-muted{color:#9ca3af!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #6b7280}blockquote,img,pre,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:9px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #d1d5db!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#374151}.table .thead-dark th{border-color:#374151;color:inherit}}.vjs-tree{color:#bfc7d5!important;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.vjs-tree .vjs-tree__content{border-left:1px dotted hsla(0,0%,80%,.28)!important}.vjs-tree .vjs-tree__node{cursor:pointer}.vjs-tree .vjs-tree__node:hover{color:#20a0ff}.vjs-tree .vjs-checkbox{left:-30px;position:absolute}.vjs-tree .vjs-value__boolean,.vjs-tree .vjs-value__null,.vjs-tree .vjs-value__number{color:#a291f5!important}.vjs-tree .vjs-value__string{color:#c3e88d!important}.vjs-tree .vjs-key{color:#c3cbd3!important}.hljs-addition,.hljs-attr,.hljs-keyword,.hljs-selector-tag{color:#13ce66}.hljs-bullet,.hljs-meta,.hljs-name,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable{color:#c3e88d}.hljs-comment,.hljs-deletion,.hljs-quote{color:#bfcbd9}.hljs-literal,.hljs-number,.hljs-title{color:#a291f5!important}body{padding-bottom:20px}.container{max-width:1440px}html{min-width:1140px}[v-cloak]{display:none}svg.icon{height:1rem;width:1rem}.header{border-bottom:1px solid #374151}.header .logo{color:#e5e7eb;text-decoration:none}.header .logo svg{height:1.7rem;width:1.7rem}.sidebar .nav-item a{border-radius:6px;color:#9ca3af;margin-bottom:4px;padding:.5rem .75rem}.sidebar .nav-item a svg{fill:#6b7280;height:1.25rem;margin-right:15px;width:1.25rem}.sidebar .nav-item a:hover{background-color:#1f2937;color:#d1d5db}.sidebar .nav-item a.active{background-color:#1f2937;color:#818cf8}.sidebar .nav-item a.active svg{fill:#6366f1}.card{border:none;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1)}.card .bottom-radius{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.card .card-header{background-color:#374151;border-bottom:none;min-height:60px;padding-bottom:.7rem;padding-top:.7rem}.card .card-header .btn-group .btn{padding:.2rem .5rem}.card .card-header .form-control-with-icon{position:relative}.card .card-header .form-control-with-icon .icon-wrapper{jusify-content:center;align-items:center;bottom:0;display:flex;left:.75rem;position:absolute;top:0}.card .card-header .form-control-with-icon .icon-wrapper .icon{fill:#9ca3af}.card .card-header .form-control-with-icon .form-control{border-radius:9999px;font-size:.875rem;padding-left:2.25rem}.card .table td,.card .table th{padding:.75rem 1.25rem}.card .table th{background-color:#1f2937;border-bottom:0;font-size:.875rem;padding:.5rem 1.25rem}.card .table:not(.table-borderless) td{border-top:1px solid #374151}.card .table.penultimate-column-right td:nth-last-child(2),.card .table.penultimate-column-right th:nth-last-child(2){text-align:right}.card .table td.table-fit,.card .table th.table-fit{white-space:nowrap;width:1%}.fill-text-color{fill:#f3f4f6}.fill-danger{fill:#dc2626}.fill-warning{fill:#d97706}.fill-info{fill:#2563eb}.fill-success{fill:#059669}.fill-primary{fill:#4040c8}button:hover .fill-primary{fill:#fff}.btn-outline-primary.active .fill-primary{fill:#111827}.btn-outline-primary:not(:disabled):not(.disabled).active:focus{box-shadow:none!important}.btn-muted{background:#1f2937;color:#9ca3af}.btn-muted:focus,.btn-muted:hover{background:#374151;color:#d1d5db}.btn-muted.active{background:#4040c8;color:#fff}.badge-secondary{background:#d1d5db;color:#374151}.badge-success{background:#10b981;color:#fff}.badge-info{background:#3b82f6;color:#fff}.badge-warning{background:#f59e0b;color:#fff}.badge-danger{background:#ef4444;color:#fff}.control-action svg{fill:#6b7280;height:1.2rem;width:1.2rem}.control-action svg:hover{fill:#818cf8}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.spin{animation:spin 2s linear infinite}.card .nav-pills{background:#374151}.card .nav-pills .nav-link{border-radius:0;color:#9ca3af;font-size:.9rem;padding:.75rem 1.25rem}.card .nav-pills .nav-link:focus,.card .nav-pills .nav-link:hover{color:#e5e7eb}.card .nav-pills .nav-link.active{background:none;border-bottom:2px solid #a5b4fc;color:#a5b4fc}.list-enter-active:not(.dontanimate){transition:background 1s linear}.list-enter:not(.dontanimate),.list-leave-to:not(.dontanimate){background:#312e81}.code-bg .list-enter:not(.dontanimate),.code-bg .list-leave-to:not(.dontanimate){background:#4b5563}#indexScreen td{vertical-align:middle!important}.card-bg-secondary{background:#1f2937}.code-bg{background:#292d3e}.disabled-watcher{background:#dc2626;color:#fff;padding:.75rem}.copy-to-clipboard{--tw-text-opacity:1;color:rgb(231 232 242/var(--tw-text-opacity));opacity:.7;outline:2px solid transparent;outline-offset:2px;position:absolute;right:0;top:0;z-index:10}\n"
  },
  {
    "path": "public/vendor/telescope/app.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#4b5563;--gray-dark:#1f2937;--primary:#4040c8;--secondary:#4b5563;--success:#059669;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--light:#f3f4f6;--dark:#1f2937;--breakpoint-xs:0;--breakpoint-sm:2px;--breakpoint-md:8px;--breakpoint-lg:9px;--breakpoint-xl:10px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-family:sans-serif;line-height:1.15}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{background-color:#f3f4f6;color:#111827;font-family:Figtree,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;margin:0;text-align:left}[tabindex=\"-1\"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;margin-top:0}p{margin-bottom:1rem;margin-top:0}abbr[data-original-title],abbr[title]{border-bottom:0;cursor:help;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{background-color:transparent;color:#6366f1;text-decoration:none}a:hover{color:#4f46e5;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{-ms-overflow-style:scrollbar;margin-bottom:1rem;margin-top:0;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{caption-side:bottom;color:#6b7280;padding-bottom:.75rem;padding-top:.75rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{color:inherit;display:block;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;max-width:100%;padding:0;white-space:normal;width:100%}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:none;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}summary{cursor:pointer;display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.2;margin-bottom:.5rem}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{border:0;border-top:1px solid rgba(0,0,0,.1);margin-bottom:1rem;margin-top:1rem}.small,small{font-size:.875em;font-weight:400}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote-footer{color:#4b5563;display:block;font-size:.875em}.blockquote-footer:before{content:\"— \"}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:#f3f4f6;border:1px solid #d1d5db;border-radius:.25rem;padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:#4b5563;font-size:90%}code{word-wrap:break-word;color:#e83e8c;font-size:87.5%}a>code{color:inherit}kbd{background-color:#111827;border-radius:.2rem;color:#fff;font-size:87.5%;padding:.2rem .4rem}kbd kbd{font-size:100%;font-weight:600;padding:0}pre{color:#111827;display:block;font-size:87.5%}pre code{color:inherit;font-size:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px;width:100%}@media (min-width:2px){.container,.container-sm{max-width:1137px}}@media (min-width:8px){.container,.container-md,.container-sm{max-width:1138px}}@media (min-width:9px){.container,.container-lg,.container-md,.container-sm{max-width:1139px}}@media (min-width:10px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-left:-15px;margin-right:-15px}.no-gutters{margin-left:0;margin-right:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-left:0;padding-right:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{padding-left:15px;padding-right:15px;position:relative;width:100%}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;max-width:100%;width:auto}.col-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}@media (min-width:2px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;max-width:100%;width:auto}.col-sm-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-sm-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-sm-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-sm-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-sm-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}}@media (min-width:8px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;max-width:100%;width:auto}.col-md-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-md-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-md-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-md-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-md-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}}@media (min-width:9px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;max-width:100%;width:auto}.col-lg-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-lg-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-lg-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-lg-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-lg-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}}@media (min-width:10px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;max-width:100%;width:auto}.col-xl-1{flex:0 0 8.33333333%;max-width:8.33333333%}.col-xl-2{flex:0 0 16.66666667%;max-width:16.66666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333333%;max-width:33.33333333%}.col-xl-5{flex:0 0 41.66666667%;max-width:41.66666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333333%;max-width:58.33333333%}.col-xl-8{flex:0 0 66.66666667%;max-width:66.66666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333333%;max-width:83.33333333%}.col-xl-11{flex:0 0 91.66666667%;max-width:91.66666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}}.table{color:#111827;margin-bottom:1rem;width:100%}.table td,.table th{border-top:1px solid #e5e7eb;padding:.75rem;vertical-align:top}.table thead th{border-bottom:2px solid #e5e7eb;vertical-align:bottom}.table tbody+tbody{border-top:2px solid #e5e7eb}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #e5e7eb}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:#f3f4f6;color:#111827}.table-primary,.table-primary>td,.table-primary>th{background-color:#cacaf0}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#9c9ce2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b6b6ea}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#cdcfd3}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#a1a7ae}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#bfc2c7}.table-success,.table-success>td,.table-success>th{background-color:#b9e2d5}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#7dc8b1}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a7dbca}.table-info,.table-info>td,.table-info>th{background-color:#c2d3f9}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#8eaef5}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abc2f7}.table-warning,.table-warning>td,.table-warning>th{background-color:#f4d9b9}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ebb87e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f1cda3}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c2c2}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed8e8e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1acac}.table-light,.table-light>td,.table-light>th{background-color:#fcfcfc}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#f9f9fa}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#efefef}.table-dark,.table-dark>td,.table-dark>th{background-color:#c0c3c7}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8b9097}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b3b6bb}.table-active,.table-active>td,.table-active>th{background-color:#f3f4f6}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#e4e7eb}.table .thead-dark th{background-color:#1f2937;border-color:#2d3b4f;color:#fff}.table .thead-light th{background-color:#e5e7eb;border-color:#e5e7eb;color:#374151}.table-dark{background-color:#1f2937;color:#fff}.table-dark td,.table-dark th,.table-dark thead th{border-color:#2d3b4f}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075);color:#fff}@media (max-width:1.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:7.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-md>.table-bordered{border:0}}@media (max-width:8.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:9.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive>.table-bordered{border:0}.form-control{background-clip:padding-box;background-color:#fff;border:1px solid #d1d5db;border-radius:.25rem;color:#1f2937;display:block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{background-color:#fff;border-color:#a3a3e5;box-shadow:0 0 0 .2rem rgba(64,64,200,.25);color:#1f2937;outline:0}.form-control::-moz-placeholder{color:#4b5563;opacity:1}.form-control::placeholder{color:#4b5563;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e5e7eb;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #1f2937}select.form-control:focus::-ms-value{background-color:#fff;color:#1f2937}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + 1px);padding-top:calc(.375rem + 1px)}.col-form-label-lg{font-size:1.25rem;line-height:1.5;padding-bottom:calc(.5rem + 1px);padding-top:calc(.5rem + 1px)}.col-form-label-sm{font-size:.875rem;line-height:1.5;padding-bottom:calc(.25rem + 1px);padding-top:calc(.25rem + 1px)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:1px 0;color:#111827;display:block;font-size:1rem;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:.2rem;font-size:.875rem;height:calc(1.5em + .5rem + 2px);line-height:1.5;padding:.25rem .5rem}.form-control-lg{border-radius:6px;font-size:1.25rem;height:calc(1.5em + 1rem + 2px);line-height:1.5;padding:.5rem 1rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-left:-5px;margin-right:-5px}.form-row>.col,.form-row>[class*=col-]{padding-left:5px;padding-right:5px}.form-check{display:block;padding-left:1.25rem;position:relative}.form-check-input{margin-left:-1.25rem;margin-top:.3rem;position:absolute}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6b7280}.form-check-label{margin-bottom:0}.form-check-inline{align-items:center;display:inline-flex;margin-right:.75rem;padding-left:0}.form-check-inline .form-check-input{margin-left:0;margin-right:.3125rem;margin-top:0;position:static}.valid-feedback{color:#059669;display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:rgba(5,150,105,.9);border-radius:.25rem;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23059669' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#059669;padding-right:calc(1.5em + .75rem)!important}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#059669;box-shadow:0 0 0 .2rem rgba(5,150,105,.25)}.was-validated select.form-control:valid,select.form-control.is-valid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-valid,.was-validated .custom-select:valid{background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%231f2937' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") right .75rem center/8px 10px no-repeat,#fff url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23059669' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#059669;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#059669;box-shadow:0 0 0 .2rem rgba(5,150,105,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#059669}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#059669}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#059669}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#07c78c;border-color:#07c78c}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(5,150,105,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before{border-color:#059669}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#059669}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#059669;box-shadow:0 0 0 .2rem rgba(5,150,105,.25)}.invalid-feedback{color:#dc2626;display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:rgba(220,38,38,.9);border-radius:.25rem;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc2626'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc2626' stroke='none'/%3E%3C/svg%3E\");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#dc2626;padding-right:calc(1.5em + .75rem)!important}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc2626;box-shadow:0 0 0 .2rem rgba(220,38,38,.25)}.was-validated select.form-control:invalid,select.form-control.is-invalid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%231f2937' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") right .75rem center/8px 10px no-repeat,#fff url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc2626'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc2626' stroke='none'/%3E%3C/svg%3E\") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#dc2626;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc2626;box-shadow:0 0 0 .2rem rgba(220,38,38,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc2626}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc2626}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc2626}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e35252;border-color:#e35252}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,38,38,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before{border-color:#dc2626}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc2626}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc2626;box-shadow:0 0 0 .2rem rgba(220,38,38,.25)}.form-inline{align-items:center;display:flex;flex-flow:row wrap}.form-inline .form-check{width:100%}@media (min-width:2px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{align-items:center;display:flex;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{align-items:center;display:flex;justify-content:center;padding-left:0;width:auto}.form-inline .form-check-input{flex-shrink:0;margin-left:0;margin-right:.25rem;margin-top:0;position:relative}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;color:#111827;display:inline-block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#111827;text-decoration:none}.btn.focus,.btn:focus{box-shadow:0 0 0 .2rem rgba(64,64,200,.25);outline:0}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{background-color:#4040c8;border-color:#4040c8;color:#fff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{background-color:#3232af;border-color:#3030a5;color:#fff}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 0 rgba(93,93,208,.5)}.btn-primary.disabled,.btn-primary:disabled{background-color:#4040c8;border-color:#4040c8;color:#fff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{background-color:#3030a5;border-color:#2d2d9b;color:#fff}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(93,93,208,.5)}.btn-secondary{background-color:#4b5563;border-color:#4b5563;color:#fff}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{background-color:#3b424d;border-color:#353c46;color:#fff}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 0 hsla(213,9%,44%,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#4b5563;border-color:#4b5563;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{background-color:#353c46;border-color:#30363f;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 0 hsla(213,9%,44%,.5)}.btn-success{background-color:#059669;border-color:#059669;color:#fff}.btn-success.focus,.btn-success:focus,.btn-success:hover{background-color:#04714f;border-color:#036546;color:#fff}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 0 rgba(43,166,128,.5)}.btn-success.disabled,.btn-success:disabled{background-color:#059669;border-color:#059669;color:#fff}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{background-color:#036546;border-color:#03583e;color:#fff}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(43,166,128,.5)}.btn-info{background-color:#2563eb;border-color:#2563eb;color:#fff}.btn-info.focus,.btn-info:focus,.btn-info:hover{background-color:#1451d6;border-color:#134cca;color:#fff}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 0 rgba(70,122,238,.5)}.btn-info.disabled,.btn-info:disabled{background-color:#2563eb;border-color:#2563eb;color:#fff}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{background-color:#134cca;border-color:#1248bf;color:#fff}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(70,122,238,.5)}.btn-warning{background-color:#d97706;border-color:#d97706;color:#fff}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{background-color:#b46305;border-color:#a75c05;color:#fff}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 0 rgba(223,139,43,.5)}.btn-warning.disabled,.btn-warning:disabled{background-color:#d97706;border-color:#d97706;color:#fff}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{background-color:#a75c05;border-color:#9b5504;color:#fff}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(223,139,43,.5)}.btn-danger{background-color:#dc2626;border-color:#dc2626;color:#fff}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{background-color:#bd1f1f;border-color:#b21d1d;color:#fff}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 0 rgba(225,71,71,.5)}.btn-danger.disabled,.btn-danger:disabled{background-color:#dc2626;border-color:#dc2626;color:#fff}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{background-color:#b21d1d;border-color:#a71b1b;color:#fff}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(225,71,71,.5)}.btn-light{background-color:#f3f4f6;border-color:#f3f4f6;color:#111827}.btn-light.focus,.btn-light:focus,.btn-light:hover{background-color:#dde0e6;border-color:#d6d9e0;color:#111827}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 0 hsla(220,7%,83%,.5)}.btn-light.disabled,.btn-light:disabled{background-color:#f3f4f6;border-color:#f3f4f6;color:#111827}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{background-color:#d6d9e0;border-color:#cfd3db;color:#111827}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 0 hsla(220,7%,83%,.5)}.btn-dark{background-color:#1f2937;border-color:#1f2937;color:#fff}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{background-color:#11171f;border-color:#0d1116;color:#fff}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 0 rgba(65,73,85,.5)}.btn-dark.disabled,.btn-dark:disabled{background-color:#1f2937;border-color:#1f2937;color:#fff}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{background-color:#0d1116;border-color:#080b0e;color:#fff}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(65,73,85,.5)}.btn-outline-primary{border-color:#4040c8;color:#4040c8}.btn-outline-primary:hover{background-color:#4040c8;border-color:#4040c8;color:#fff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 0 rgba(64,64,200,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{background-color:transparent;color:#4040c8}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{background-color:#4040c8;border-color:#4040c8;color:#fff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(64,64,200,.5)}.btn-outline-secondary{border-color:#4b5563;color:#4b5563}.btn-outline-secondary:hover{background-color:#4b5563;border-color:#4b5563;color:#fff}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 0 rgba(75,85,99,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{background-color:transparent;color:#4b5563}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{background-color:#4b5563;border-color:#4b5563;color:#fff}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(75,85,99,.5)}.btn-outline-success{border-color:#059669;color:#059669}.btn-outline-success:hover{background-color:#059669;border-color:#059669;color:#fff}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 0 rgba(5,150,105,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{background-color:transparent;color:#059669}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{background-color:#059669;border-color:#059669;color:#fff}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(5,150,105,.5)}.btn-outline-info{border-color:#2563eb;color:#2563eb}.btn-outline-info:hover{background-color:#2563eb;border-color:#2563eb;color:#fff}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 0 rgba(37,99,235,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{background-color:transparent;color:#2563eb}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{background-color:#2563eb;border-color:#2563eb;color:#fff}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(37,99,235,.5)}.btn-outline-warning{border-color:#d97706;color:#d97706}.btn-outline-warning:hover{background-color:#d97706;border-color:#d97706;color:#fff}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 0 rgba(217,119,6,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{background-color:transparent;color:#d97706}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{background-color:#d97706;border-color:#d97706;color:#fff}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(217,119,6,.5)}.btn-outline-danger{border-color:#dc2626;color:#dc2626}.btn-outline-danger:hover{background-color:#dc2626;border-color:#dc2626;color:#fff}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 0 rgba(220,38,38,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{background-color:transparent;color:#dc2626}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{background-color:#dc2626;border-color:#dc2626;color:#fff}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(220,38,38,.5)}.btn-outline-light{border-color:#f3f4f6;color:#f3f4f6}.btn-outline-light:hover{background-color:#f3f4f6;border-color:#f3f4f6;color:#111827}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 0 rgba(243,244,246,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{background-color:transparent;color:#f3f4f6}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{background-color:#f3f4f6;border-color:#f3f4f6;color:#111827}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(243,244,246,.5)}.btn-outline-dark{border-color:#1f2937;color:#1f2937}.btn-outline-dark:hover{background-color:#1f2937;border-color:#1f2937;color:#fff}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 0 rgba(31,41,55,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{background-color:transparent;color:#1f2937}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{background-color:#1f2937;border-color:#1f2937;color:#fff}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(31,41,55,.5)}.btn-link{color:#6366f1;font-weight:400;text-decoration:none}.btn-link:hover{color:#4f46e5}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#4b5563;pointer-events:none}.btn-group-lg>.btn,.btn-lg{border-radius:6px;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.btn-group-sm>.btn,.btn-sm{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;position:relative;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.width{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.width{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:\"\";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;color:#111827;display:none;float:left;font-size:1rem;left:0;list-style:none;margin:.125rem 0 0;min-width:10rem;padding:.5rem 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu-left{left:0;right:auto}.dropdown-menu-right{left:auto;right:0}@media (min-width:2px){.dropdown-menu-sm-left{left:0;right:auto}.dropdown-menu-sm-right{left:auto;right:0}}@media (min-width:8px){.dropdown-menu-md-left{left:0;right:auto}.dropdown-menu-md-right{left:auto;right:0}}@media (min-width:9px){.dropdown-menu-lg-left{left:0;right:auto}.dropdown-menu-lg-right{left:auto;right:0}}@media (min-width:10px){.dropdown-menu-xl-left{left:0;right:auto}.dropdown-menu-xl-right{left:auto;right:0}}.dropup .dropdown-menu{bottom:100%;margin-bottom:.125rem;margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:\"\";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{left:100%;margin-left:.125rem;margin-top:0;right:auto;top:0}.dropright .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:\"\";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{left:auto;margin-right:.125rem;margin-top:0;right:100%;top:0}.dropleft .dropdown-toggle:after{content:\"\";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:\"\";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{bottom:auto;right:auto}.dropdown-divider{border-top:1px solid #e5e7eb;height:0;margin:.5rem 0;overflow:hidden}.dropdown-item{background-color:transparent;border:0;clear:both;color:#374151;display:block;font-weight:400;padding:.25rem 1.5rem;text-align:inherit;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:#e5e7eb;color:#090d15;text-decoration:none}.dropdown-item.active,.dropdown-item:active{background-color:#4040c8;color:#fff;text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:#6b7280;pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:#4b5563;display:block;font-size:.875rem;margin-bottom:0;padding:.5rem 1.5rem;white-space:nowrap}.dropdown-item-text{color:#374151;display:block;padding:.25rem 1.5rem}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{flex:1 1 auto;margin-bottom:0;min-width:0;position:relative;width:1%}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.custom-file{align-items:center;display:flex}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label:after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label:after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{align-items:center;background-color:#e5e7eb;border:1px solid #d1d5db;border-radius:.25rem;color:#1f2937;display:flex;font-size:1rem;font-weight:400;line-height:1.5;margin-bottom:0;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{border-radius:6px;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-bottom-left-radius:0;border-top-left-radius:0}.custom-control{display:block;min-height:1.5rem;padding-left:1.5rem;position:relative;-webkit-print-color-adjust:exact;print-color-adjust:exact;z-index:1}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{height:1.25rem;left:0;opacity:0;position:absolute;width:1rem;z-index:-1}.custom-control-input:checked~.custom-control-label:before{background-color:#4040c8;border-color:#4040c8;color:#fff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(64,64,200,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#a3a3e5}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#cbcbf0;border-color:#cbcbf0;color:#fff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#4b5563}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e5e7eb}.custom-control-label{margin-bottom:0;position:relative;vertical-align:top}.custom-control-label:before{background-color:#fff;border:1px solid #6b7280;pointer-events:none}.custom-control-label:after,.custom-control-label:before{content:\"\";display:block;height:1rem;left:-1.5rem;position:absolute;top:.25rem;width:1rem}.custom-control-label:after{background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='m6.564.75-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#4040c8;border-color:#4040c8}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(64,64,200,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(64,64,200,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(64,64,200,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{border-radius:.5rem;left:-2.25rem;pointer-events:all;width:1.75rem}.custom-switch .custom-control-label:after{background-color:#6b7280;border-radius:.5rem;height:calc(1rem - 4px);left:calc(-2.25rem + 2px);top:calc(.25rem + 2px);transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:calc(1rem - 4px)}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(64,64,200,.5)}.custom-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%231f2937' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") right .75rem center/8px 10px no-repeat;border:1px solid #d1d5db;border-radius:.25rem;color:#1f2937;display:inline-block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem 1.75rem .375rem .75rem;vertical-align:middle;width:100%}.custom-select:focus{border-color:#a3a3e5;box-shadow:0 0 0 .2rem rgba(64,64,200,.25);outline:0}.custom-select:focus::-ms-value{background-color:#fff;color:#1f2937}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){background-image:none;height:auto;padding-right:.75rem}.custom-select:disabled{background-color:#e5e7eb;color:#4b5563}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #1f2937}.custom-select-sm{font-size:.875rem;height:calc(1.5em + .5rem + 2px);padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.custom-select-lg{font-size:1.25rem;height:calc(1.5em + 1rem + 2px);padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{height:calc(1.5em + .75rem + 2px);position:relative;width:100%}.custom-file-input{margin:0;opacity:0;overflow:hidden;z-index:2}.custom-file-input:focus~.custom-file-label{border-color:#a3a3e5;box-shadow:0 0 0 .2rem rgba(64,64,200,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e5e7eb}.custom-file-input:lang(en)~.custom-file-label:after{content:\"Browse\"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{background-color:#fff;border:1px solid #d1d5db;border-radius:.25rem;font-weight:400;height:calc(1.5em + .75rem + 2px);left:0;overflow:hidden;z-index:1}.custom-file-label,.custom-file-label:after{color:#1f2937;line-height:1.5;padding:.375rem .75rem;position:absolute;right:0;top:0}.custom-file-label:after{background-color:#e5e7eb;border-left:inherit;border-radius:0 .25rem .25rem 0;bottom:0;content:\"Browse\";display:block;height:calc(1.5em + .75rem);z-index:3}.custom-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;height:1.4rem;padding:0;width:100%}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f3f4f6,0 0 0 .2rem rgba(64,64,200,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f3f4f6,0 0 0 .2rem rgba(64,64,200,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #f3f4f6,0 0 0 .2rem rgba(64,64,200,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:#4040c8;border:0;border-radius:1rem;height:1rem;margin-top:-.25rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#cbcbf0}.custom-range::-webkit-slider-runnable-track{background-color:#d1d5db;border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-moz-range-thumb{-moz-appearance:none;appearance:none;background-color:#4040c8;border:0;border-radius:1rem;height:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#cbcbf0}.custom-range::-moz-range-track{background-color:#d1d5db;border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-thumb{appearance:none;background-color:#4040c8;border:0;border-radius:1rem;height:1rem;margin-left:.2rem;margin-right:.2rem;margin-top:0;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#cbcbf0}.custom-range::-ms-track{background-color:transparent;border-color:transparent;border-width:.5rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#d1d5db;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#6b7280}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#6b7280}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#6b7280}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#4b5563;cursor:default;pointer-events:none}.nav-tabs{border-bottom:1px solid #d1d5db}.nav-tabs .nav-link{background-color:transparent;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem;margin-bottom:-1px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e5e7eb #e5e7eb #d1d5db;isolation:isolate}.nav-tabs .nav-link.disabled{background-color:transparent;border-color:transparent;color:#4b5563}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:#f3f4f6;border-color:#d1d5db #d1d5db #f3f4f6;color:#374151}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#e5e7eb;color:#fff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{padding:.5rem 1rem;position:relative}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between}.navbar-brand{display:inline-block;font-size:1.25rem;line-height:inherit;margin-right:1rem;padding-bottom:.3125rem;padding-top:.3125rem;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{float:none;position:static}.navbar-text{display:inline-block;padding-bottom:.5rem;padding-top:.5rem}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:1px solid transparent;border-radius:.25rem;font-size:1.25rem;line-height:1;padding:.25rem .75rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{background:50%/100% 100% no-repeat;content:\"\";display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:1.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-left:0;padding-right:0}}@media (min-width:2px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:7.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-left:0;padding-right:0}}@media (min-width:8px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:8.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-left:0;padding-right:0}}@media (min-width:9px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:9.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-left:0;padding-right:0}}@media (min-width:10px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-left:0;padding-right:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{border-color:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{word-wrap:break-word;background-clip:border-box;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:6px;display:flex;flex-direction:column;min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:5px;border-top-right-radius:5px;border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{background-color:#fff;border-bottom:1px solid rgba(0,0,0,.125);margin-bottom:0;padding:.75rem 1.25rem}.card-header:first-child{border-radius:5px 5px 0 0}.card-footer{background-color:#fff;border-top:1px solid rgba(0,0,0,.125);padding:.75rem 1.25rem}.card-footer:last-child{border-radius:0 0 5px 5px}.card-header-tabs{border-bottom:0;margin-bottom:-.75rem}.card-header-pills,.card-header-tabs{margin-left:-.625rem;margin-right:-.625rem}.card-img-overlay{border-radius:5px;bottom:0;left:0;padding:1.25rem;position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:5px;border-top-right-radius:5px}.card-img,.card-img-bottom{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.card-deck .card{margin-bottom:15px}@media (min-width:2px){.card-deck{display:flex;flex-flow:row wrap;margin-left:-15px;margin-right:-15px}.card-deck .card{flex:1 0 0%;margin-bottom:0;margin-left:15px;margin-right:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:2px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:2px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{background-color:#e5e7eb;border-radius:.25rem;display:flex;flex-wrap:wrap;list-style:none;margin-bottom:1rem;padding:.75rem 1rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{color:#4b5563;content:\"/\";float:left;padding-right:.5rem}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#4b5563}.pagination{border-radius:.25rem;display:flex;list-style:none;padding-left:0}.page-link{background-color:#fff;border:1px solid #d1d5db;color:#6366f1;display:block;line-height:1.25;margin-left:-1px;padding:.5rem .75rem;position:relative}.page-link:hover{background-color:#e5e7eb;border-color:#d1d5db;color:#4f46e5;text-decoration:none;z-index:2}.page-link:focus{box-shadow:0 0 0 .2rem rgba(64,64,200,.25);outline:0;z-index:3}.page-item:first-child .page-link{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem;margin-left:0}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link{background-color:#4040c8;border-color:#4040c8;color:#fff;z-index:3}.page-item.disabled .page-link{background-color:#fff;border-color:#d1d5db;color:#4b5563;cursor:auto;pointer-events:none}.pagination-lg .page-link{font-size:1.25rem;line-height:1.5;padding:.75rem 1.5rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm .page-link{font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.badge{border-radius:.25rem;display:inline-block;font-size:.875rem;font-weight:600;line-height:1;padding:.25em .4em;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:baseline;white-space:nowrap}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{border-radius:10rem;padding-left:.6em;padding-right:.6em}.badge-primary{background-color:#4040c8;color:#fff}a.badge-primary:focus,a.badge-primary:hover{background-color:#3030a5;color:#fff}a.badge-primary.focus,a.badge-primary:focus{box-shadow:0 0 0 .2rem rgba(64,64,200,.5);outline:0}.badge-secondary{background-color:#4b5563;color:#fff}a.badge-secondary:focus,a.badge-secondary:hover{background-color:#353c46;color:#fff}a.badge-secondary.focus,a.badge-secondary:focus{box-shadow:0 0 0 .2rem rgba(75,85,99,.5);outline:0}.badge-success{background-color:#059669;color:#fff}a.badge-success:focus,a.badge-success:hover{background-color:#036546;color:#fff}a.badge-success.focus,a.badge-success:focus{box-shadow:0 0 0 .2rem rgba(5,150,105,.5);outline:0}.badge-info{background-color:#2563eb;color:#fff}a.badge-info:focus,a.badge-info:hover{background-color:#134cca;color:#fff}a.badge-info.focus,a.badge-info:focus{box-shadow:0 0 0 .2rem rgba(37,99,235,.5);outline:0}.badge-warning{background-color:#d97706;color:#fff}a.badge-warning:focus,a.badge-warning:hover{background-color:#a75c05;color:#fff}a.badge-warning.focus,a.badge-warning:focus{box-shadow:0 0 0 .2rem rgba(217,119,6,.5);outline:0}.badge-danger{background-color:#dc2626;color:#fff}a.badge-danger:focus,a.badge-danger:hover{background-color:#b21d1d;color:#fff}a.badge-danger.focus,a.badge-danger:focus{box-shadow:0 0 0 .2rem rgba(220,38,38,.5);outline:0}.badge-light{background-color:#f3f4f6;color:#111827}a.badge-light:focus,a.badge-light:hover{background-color:#d6d9e0;color:#111827}a.badge-light.focus,a.badge-light:focus{box-shadow:0 0 0 .2rem rgba(243,244,246,.5);outline:0}.badge-dark{background-color:#1f2937;color:#fff}a.badge-dark:focus,a.badge-dark:hover{background-color:#0d1116;color:#fff}a.badge-dark.focus,a.badge-dark:focus{box-shadow:0 0 0 .2rem rgba(31,41,55,.5);outline:0}.jumbotron{background-color:#e5e7eb;border-radius:6px;margin-bottom:2rem;padding:2rem 1rem}@media (min-width:2px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{border-radius:0;padding-left:0;padding-right:0}.alert{border:1px solid transparent;border-radius:.25rem;margin-bottom:1rem;padding:.75rem 1.25rem;position:relative}.alert-heading{color:inherit}.alert-link{font-weight:600}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{color:inherit;padding:.75rem 1.25rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{background-color:#d9d9f4;border-color:#cacaf0;color:#212168}.alert-primary hr{border-top-color:#b6b6ea}.alert-primary .alert-link{color:#151541}.alert-secondary{background-color:#dbdde0;border-color:#cdcfd3;color:#272c33}.alert-secondary hr{border-top-color:#bfc2c7}.alert-secondary .alert-link{color:#111316}.alert-success{background-color:#cdeae1;border-color:#b9e2d5;color:#034e37}.alert-success hr{border-top-color:#a7dbca}.alert-success .alert-link{color:#011d14}.alert-info{background-color:#d3e0fb;border-color:#c2d3f9;color:#13337a}.alert-info hr{border-top-color:#abc2f7}.alert-info .alert-link{color:#0c214e}.alert-warning{background-color:#f7e4cd;border-color:#f4d9b9;color:#713e03}.alert-warning hr{border-top-color:#f1cda3}.alert-warning .alert-link{color:#3f2302}.alert-danger{background-color:#f8d4d4;border-color:#f5c2c2;color:#721414}.alert-danger hr{border-top-color:#f1acac}.alert-danger .alert-link{color:#470c0c}.alert-light{background-color:#fdfdfd;border-color:#fcfcfc;color:#7e7f80}.alert-light hr{border-top-color:#efefef}.alert-light .alert-link{color:#656666}.alert-dark{background-color:#d2d4d7;border-color:#c0c3c7;color:#10151d}.alert-dark hr{border-top-color:#b3b6bb}.alert-dark .alert-link{color:#000}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{background-color:#e5e7eb;border-radius:.25rem;font-size:.75rem;height:1rem;line-height:0}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{background-color:#4040c8;color:#fff;flex-direction:column;justify-content:center;text-align:center;transition:width .6s ease;white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{align-items:flex-start;display:flex}.media-body{flex:1}.list-group{border-radius:.25rem;display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-item-action{color:#374151;text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:#f3f4f6;color:#374151;text-decoration:none;z-index:1}.list-group-item-action:active{background-color:#e5e7eb;color:#111827}.list-group-item{background-color:#fff;border:1px solid rgba(0,0,0,.125);display:block;padding:.75rem 1.25rem;position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:#fff;color:#4b5563;pointer-events:none}.list-group-item.active{background-color:#4040c8;border-color:#4040c8;color:#fff;z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:1px;margin-top:-1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}@media (min-width:2px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:8px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:9px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:10px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{background-color:#cacaf0;color:#212168}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{background-color:#b6b6ea;color:#212168}.list-group-item-primary.list-group-item-action.active{background-color:#212168;border-color:#212168;color:#fff}.list-group-item-secondary{background-color:#cdcfd3;color:#272c33}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{background-color:#bfc2c7;color:#272c33}.list-group-item-secondary.list-group-item-action.active{background-color:#272c33;border-color:#272c33;color:#fff}.list-group-item-success{background-color:#b9e2d5;color:#034e37}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{background-color:#a7dbca;color:#034e37}.list-group-item-success.list-group-item-action.active{background-color:#034e37;border-color:#034e37;color:#fff}.list-group-item-info{background-color:#c2d3f9;color:#13337a}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{background-color:#abc2f7;color:#13337a}.list-group-item-info.list-group-item-action.active{background-color:#13337a;border-color:#13337a;color:#fff}.list-group-item-warning{background-color:#f4d9b9;color:#713e03}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{background-color:#f1cda3;color:#713e03}.list-group-item-warning.list-group-item-action.active{background-color:#713e03;border-color:#713e03;color:#fff}.list-group-item-danger{background-color:#f5c2c2;color:#721414}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{background-color:#f1acac;color:#721414}.list-group-item-danger.list-group-item-action.active{background-color:#721414;border-color:#721414;color:#fff}.list-group-item-light{background-color:#fcfcfc;color:#7e7f80}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{background-color:#efefef;color:#7e7f80}.list-group-item-light.list-group-item-action.active{background-color:#7e7f80;border-color:#7e7f80;color:#fff}.list-group-item-dark{background-color:#c0c3c7;color:#10151d}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{background-color:#b3b6bb;color:#10151d}.list-group-item-dark.list-group-item-action.active{background-color:#10151d;border-color:#10151d;color:#fff}.close{color:#000;float:right;font-size:1.5rem;font-weight:600;line-height:1;opacity:.5;text-shadow:0 1px 0 #fff}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{background-color:transparent;border:0;padding:0}a.close.disabled{pointer-events:none}.toast{background-clip:padding-box;background-color:hsla(0,0%,100%,.85);border:1px solid rgba(0,0,0,.1);border-radius:.25rem;box-shadow:0 .25rem .75rem rgba(0,0,0,.1);flex-basis:350px;font-size:.875rem;max-width:350px;opacity:0}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{align-items:center;background-clip:padding-box;background-color:hsla(0,0%,100%,.85);border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px);color:#4b5563;display:flex;padding:.25rem .75rem}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{display:none;height:100%;left:0;outline:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:1050}.modal-dialog{margin:.5rem;pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{content:\"\";display:block;height:calc(100vh - 1rem);height:-moz-min-content;height:min-content}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;height:100%;justify-content:center}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:6px;display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{background-color:#000;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{align-items:flex-start;border-bottom:1px solid #d1d5db;border-top-left-radius:5px;border-top-right-radius:5px;display:flex;justify-content:space-between;padding:1rem}.modal-header .close{margin:-1rem -1rem -1rem auto;padding:1rem}.modal-title{line-height:1.5;margin-bottom:0}.modal-body{flex:1 1 auto;padding:1rem;position:relative}.modal-footer{align-items:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:1px solid #d1d5db;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:.75rem}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:2px){.modal-dialog{margin:1.75rem auto;max-width:500px}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:9px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:10px){.modal-xl{max-width:1140px}}.tooltip{word-wrap:break-word;display:block;font-family:Figtree,sans-serif;font-size:.875rem;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:0;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.tooltip.show{opacity:.9}.tooltip .arrow{display:block;height:.4rem;position:absolute;width:.8rem}.tooltip .arrow:before{border-color:transparent;border-style:solid;content:\"\";position:absolute}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{border-top-color:#000;border-width:.4rem .4rem 0;top:0}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{height:.8rem;left:0;width:.4rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{border-right-color:#000;border-width:.4rem .4rem .4rem 0;right:0}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{border-bottom-color:#000;border-width:0 .4rem .4rem;bottom:0}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{height:.8rem;right:0;width:.4rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{border-left-color:#000;border-width:.4rem 0 .4rem .4rem;left:0}.tooltip-inner{background-color:#000;border-radius:.25rem;color:#fff;max-width:200px;padding:.25rem .5rem;text-align:center}.popover{word-wrap:break-word;background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:6px;font-family:Figtree,sans-serif;font-size:.875rem;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:276px;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1060}.popover,.popover .arrow{display:block;position:absolute}.popover .arrow{height:.5rem;margin:0 6px;width:1rem}.popover .arrow:after,.popover .arrow:before{border-color:transparent;border-style:solid;content:\"\";display:block;position:absolute}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{border-top-color:rgba(0,0,0,.25);border-width:.5rem .5rem 0;bottom:0}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{border-top-color:#fff;border-width:.5rem .5rem 0;bottom:1px}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{height:1rem;left:calc(-.5rem - 1px);margin:6px 0;width:.5rem}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{border-right-color:rgba(0,0,0,.25);border-width:.5rem .5rem .5rem 0;left:0}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{border-right-color:#fff;border-width:.5rem .5rem .5rem 0;left:1px}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{border-bottom-color:rgba(0,0,0,.25);border-width:0 .5rem .5rem;top:0}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{border-bottom-color:#fff;border-width:0 .5rem .5rem;top:1px}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:1px solid #f7f7f7;content:\"\";display:block;left:50%;margin-left:-.5rem;position:absolute;top:0;width:1rem}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{height:1rem;margin:6px 0;right:calc(-.5rem - 1px);width:.5rem}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{border-left-color:rgba(0,0,0,.25);border-width:.5rem 0 .5rem .5rem;right:0}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{border-left-color:#fff;border-width:.5rem 0 .5rem .5rem;right:1px}.popover-header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:5px;border-top-right-radius:5px;font-size:1rem;margin-bottom:0;padding:.5rem .75rem}.popover-header:empty{display:none}.popover-body{color:#111827;padding:.5rem .75rem}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:\"\";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background:50%/100% 100% no-repeat;display:inline-block;height:20px;width:20px}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='m5.25 0-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='m2.75 0-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;list-style:none;margin-left:15%;margin-right:15%;padding-left:0;position:absolute;right:0;z-index:15}.carousel-indicators li{background-clip:padding-box;background-color:#fff;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:20px;color:#fff;left:15%;padding-bottom:20px;padding-top:20px;position:absolute;right:15%;text-align:center;z-index:10}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{animation:spinner-border .75s linear infinite;border:.25em solid;border-radius:50%;border-right:.25em solid transparent;display:inline-block;height:2rem;vertical-align:-.125em;width:2rem}.spinner-border-sm{border-width:.2em;height:1rem;width:1rem}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{animation:spinner-grow .75s linear infinite;background-color:currentcolor;border-radius:50%;display:inline-block;height:2rem;opacity:0;vertical-align:-.125em;width:2rem}.spinner-grow-sm{height:1rem;width:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#4040c8!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#3030a5!important}.bg-secondary{background-color:#4b5563!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#353c46!important}.bg-success{background-color:#059669!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#036546!important}.bg-info{background-color:#2563eb!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#134cca!important}.bg-warning{background-color:#d97706!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#a75c05!important}.bg-danger{background-color:#dc2626!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#b21d1d!important}.bg-light{background-color:#f3f4f6!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#d6d9e0!important}.bg-dark{background-color:#1f2937!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0d1116!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #d1d5db!important}.border-top{border-top:1px solid #d1d5db!important}.border-right{border-right:1px solid #d1d5db!important}.border-bottom{border-bottom:1px solid #d1d5db!important}.border-left{border-left:1px solid #d1d5db!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#4040c8!important}.border-secondary{border-color:#4b5563!important}.border-success{border-color:#059669!important}.border-info{border-color:#2563eb!important}.border-warning{border-color:#d97706!important}.border-danger{border-color:#dc2626!important}.border-light{border-color:#f3f4f6!important}.border-dark{border-color:#1f2937!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:6px!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{clear:both;content:\"\";display:block}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:2px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:8px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:9px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:10px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{display:block;overflow:hidden;padding:0;position:relative;width:100%}.embed-responsive:before{content:\"\";display:block}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.embed-responsive-21by9:before{padding-top:42.85714286%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:2px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:8px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:9px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:10px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:2px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:8px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:9px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:10px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;overflow:visible;position:static;white-space:normal;width:auto}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:2px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:8px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:9px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:10px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{background-color:transparent;bottom:0;content:\"\";left:0;pointer-events:auto;position:absolute;right:0;top:0;z-index:1}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:2px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:8px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:9px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:10px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:600!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#4040c8!important}a.text-primary:focus,a.text-primary:hover{color:#2a2a92!important}.text-secondary{color:#4b5563!important}a.text-secondary:focus,a.text-secondary:hover{color:#2a3037!important}.text-success{color:#059669!important}a.text-success:focus,a.text-success:hover{color:#034c35!important}.text-info{color:#2563eb!important}a.text-info:focus,a.text-info:hover{color:#1043b3!important}.text-warning{color:#d97706!important}a.text-warning:focus,a.text-warning:hover{color:#8f4e04!important}.text-danger{color:#dc2626!important}a.text-danger:focus,a.text-danger:hover{color:#9c1919!important}.text-light{color:#f3f4f6!important}a.text-light:focus,a.text-light:hover{color:#c7ccd5!important}.text-dark{color:#1f2937!important}a.text-dark:focus,a.text-dark:hover{color:#030506!important}.text-body{color:#111827!important}.text-muted{color:#6b7280!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #6b7280}blockquote,img,pre,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:9px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #d1d5db!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#e5e7eb}.table .thead-dark th{border-color:#e5e7eb;color:inherit}}.vjs-tree{color:#bfc7d5!important;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.vjs-tree .vjs-tree__content{border-left:1px dotted hsla(0,0%,80%,.28)!important}.vjs-tree .vjs-tree__node{cursor:pointer}.vjs-tree .vjs-tree__node:hover{color:#20a0ff}.vjs-tree .vjs-checkbox{left:-30px;position:absolute}.vjs-tree .vjs-value__boolean,.vjs-tree .vjs-value__null,.vjs-tree .vjs-value__number{color:#a291f5!important}.vjs-tree .vjs-value__string{color:#c3e88d!important}.vjs-tree .vjs-key{color:#c3cbd3!important}.hljs-addition,.hljs-attr,.hljs-keyword,.hljs-selector-tag{color:#13ce66}.hljs-bullet,.hljs-meta,.hljs-name,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable{color:#c3e88d}.hljs-comment,.hljs-deletion,.hljs-quote{color:#bfcbd9}.hljs-literal,.hljs-number,.hljs-title{color:#a291f5!important}body{padding-bottom:20px}.container{max-width:1440px}html{min-width:1140px}[v-cloak]{display:none}svg.icon{height:1rem;width:1rem}.header{border-bottom:1px solid #e5e7eb}.header .logo{color:#374151;text-decoration:none}.header .logo svg{height:1.7rem;width:1.7rem}.sidebar .nav-item a{border-radius:6px;color:#4b5563;margin-bottom:4px;padding:.5rem .75rem}.sidebar .nav-item a svg{fill:#9ca3af;height:1.25rem;margin-right:15px;width:1.25rem}.sidebar .nav-item a.active,.sidebar .nav-item a:hover{background-color:#e5e7eb;color:#4040c8}.sidebar .nav-item a.active svg{fill:#4040c8}.card{border:none;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1)}.card .bottom-radius{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.card .card-header{background-color:#fff;border-bottom:none;min-height:60px;padding-bottom:.7rem;padding-top:.7rem}.card .card-header .btn-group .btn{padding:.2rem .5rem}.card .card-header .form-control-with-icon{position:relative}.card .card-header .form-control-with-icon .icon-wrapper{jusify-content:center;align-items:center;bottom:0;display:flex;left:.75rem;position:absolute;top:0}.card .card-header .form-control-with-icon .icon-wrapper .icon{fill:#6b7280}.card .card-header .form-control-with-icon .form-control{border-radius:9999px;font-size:.875rem;padding-left:2.25rem}.card .table td,.card .table th{padding:.75rem 1.25rem}.card .table th{background-color:#f3f4f6;border-bottom:0;font-size:.875rem;padding:.5rem 1.25rem}.card .table:not(.table-borderless) td{border-top:1px solid #e5e7eb}.card .table.penultimate-column-right td:nth-last-child(2),.card .table.penultimate-column-right th:nth-last-child(2){text-align:right}.card .table td.table-fit,.card .table th.table-fit{white-space:nowrap;width:1%}.fill-text-color{fill:#111827}.fill-danger{fill:#dc2626}.fill-warning{fill:#d97706}.fill-info{fill:#2563eb}.fill-success{fill:#059669}.fill-primary{fill:#4040c8}button:hover .fill-primary{fill:#fff}.btn-outline-primary.active .fill-primary{fill:#f3f4f6}.btn-outline-primary:not(:disabled):not(.disabled).active:focus{box-shadow:none!important}.btn-muted{background:#e5e7eb;color:#4b5563}.btn-muted:focus,.btn-muted:hover{background:#d1d5db;color:#111827}.btn-muted.active{background:#4040c8;color:#fff}.badge-secondary{background:#e5e7eb;color:#4b5563}.badge-success{background:#d1fae5;color:#059669}.badge-info{background:#dbeafe;color:#2563eb}.badge-warning{background:#fef3c7;color:#d97706}.badge-danger{background:#fee2e2;color:#dc2626}.control-action svg{fill:#d1d5db;height:1.2rem;width:1.2rem}.control-action svg:hover{fill:#4f46e5}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.spin{animation:spin 2s linear infinite}.card .nav-pills{background:#fff}.card .nav-pills .nav-link{border-radius:0;color:#4b5563;font-size:.9rem;padding:.75rem 1.25rem}.card .nav-pills .nav-link:focus,.card .nav-pills .nav-link:hover{color:#1f2937}.card .nav-pills .nav-link.active{background:none;border-bottom:2px solid #4f46e5;color:#4f46e5}.list-enter-active:not(.dontanimate){transition:background 1s linear}.list-enter:not(.dontanimate),.list-leave-to:not(.dontanimate){background:#eef2ff}.code-bg .list-enter:not(.dontanimate),.code-bg .list-leave-to:not(.dontanimate){background:#4b5563}#indexScreen td{vertical-align:middle!important}.card-bg-secondary{background:#f3f4f6}.code-bg{background:#292d3e}.disabled-watcher{background:#dc2626;color:#fff;padding:.75rem}.copy-to-clipboard{--tw-text-opacity:1;color:rgb(231 232 242/var(--tw-text-opacity));opacity:.7;outline:2px solid transparent;outline-offset:2px;position:absolute;right:0;top:0;z-index:10}\n"
  },
  {
    "path": "public/vendor/telescope/app.js",
    "content": "/*! For license information please see app.js.LICENSE.txt */\n(()=>{var e,t={9669:(e,t,n)=>{e.exports=n(1609)},5448:(e,t,n)=>{\"use strict\";var o=n(4867),p=n(6026),M=n(4372),b=n(5327),c=n(4097),z=n(4109),r=n(7985),a=n(5061);e.exports=function(e){return new Promise((function(t,n){var i=e.data,O=e.headers,s=e.responseType;o.isFormData(i)&&delete O[\"Content-Type\"];var A=new XMLHttpRequest;if(e.auth){var u=e.auth.username||\"\",d=e.auth.password?unescape(encodeURIComponent(e.auth.password)):\"\";O.Authorization=\"Basic \"+btoa(u+\":\"+d)}var l=c(e.baseURL,e.url);function f(){if(A){var o=\"getAllResponseHeaders\"in A?z(A.getAllResponseHeaders()):null,M={data:s&&\"text\"!==s&&\"json\"!==s?A.response:A.responseText,status:A.status,statusText:A.statusText,headers:o,config:e,request:A};p(t,n,M),A=null}}if(A.open(e.method.toUpperCase(),b(l,e.params,e.paramsSerializer),!0),A.timeout=e.timeout,\"onloadend\"in A?A.onloadend=f:A.onreadystatechange=function(){A&&4===A.readyState&&(0!==A.status||A.responseURL&&0===A.responseURL.indexOf(\"file:\"))&&setTimeout(f)},A.onabort=function(){A&&(n(a(\"Request aborted\",e,\"ECONNABORTED\",A)),A=null)},A.onerror=function(){n(a(\"Network Error\",e,null,A)),A=null},A.ontimeout=function(){var t=\"timeout of \"+e.timeout+\"ms exceeded\";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(a(t,e,e.transitional&&e.transitional.clarifyTimeoutError?\"ETIMEDOUT\":\"ECONNABORTED\",A)),A=null},o.isStandardBrowserEnv()){var q=(e.withCredentials||r(l))&&e.xsrfCookieName?M.read(e.xsrfCookieName):void 0;q&&(O[e.xsrfHeaderName]=q)}\"setRequestHeader\"in A&&o.forEach(O,(function(e,t){void 0===i&&\"content-type\"===t.toLowerCase()?delete O[t]:A.setRequestHeader(t,e)})),o.isUndefined(e.withCredentials)||(A.withCredentials=!!e.withCredentials),s&&\"json\"!==s&&(A.responseType=e.responseType),\"function\"==typeof e.onDownloadProgress&&A.addEventListener(\"progress\",e.onDownloadProgress),\"function\"==typeof e.onUploadProgress&&A.upload&&A.upload.addEventListener(\"progress\",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){A&&(A.abort(),n(e),A=null)})),i||(i=null),A.send(i)}))}},1609:(e,t,n)=>{\"use strict\";var o=n(4867),p=n(1849),M=n(321),b=n(7185);function c(e){var t=new M(e),n=p(M.prototype.request,t);return o.extend(n,M.prototype,t),o.extend(n,t),n}var z=c(n(5655));z.Axios=M,z.create=function(e){return c(b(z.defaults,e))},z.Cancel=n(5263),z.CancelToken=n(4972),z.isCancel=n(6502),z.all=function(e){return Promise.all(e)},z.spread=n(8713),z.isAxiosError=n(6268),e.exports=z,e.exports.default=z},5263:e=>{\"use strict\";function t(e){this.message=e}t.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},t.prototype.__CANCEL__=!0,e.exports=t},4972:(e,t,n)=>{\"use strict\";var o=n(5263);function p(e){if(\"function\"!=typeof e)throw new TypeError(\"executor must be a function.\");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new o(e),t(n.reason))}))}p.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},p.source=function(){var e;return{token:new p((function(t){e=t})),cancel:e}},e.exports=p},6502:e=>{\"use strict\";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,t,n)=>{\"use strict\";var o=n(4867),p=n(5327),M=n(782),b=n(3572),c=n(7185),z=n(4875),r=z.validators;function a(e){this.defaults=e,this.interceptors={request:new M,response:new M}}a.prototype.request=function(e){\"string\"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=c(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method=\"get\";var t=e.transitional;void 0!==t&&z.assertOptions(t,{silentJSONParsing:r.transitional(r.boolean,\"1.0.0\"),forcedJSONParsing:r.transitional(r.boolean,\"1.0.0\"),clarifyTimeoutError:r.transitional(r.boolean,\"1.0.0\")},!1);var n=[],o=!0;this.interceptors.request.forEach((function(t){\"function\"==typeof t.runWhen&&!1===t.runWhen(e)||(o=o&&t.synchronous,n.unshift(t.fulfilled,t.rejected))}));var p,M=[];if(this.interceptors.response.forEach((function(e){M.push(e.fulfilled,e.rejected)})),!o){var a=[b,void 0];for(Array.prototype.unshift.apply(a,n),a=a.concat(M),p=Promise.resolve(e);a.length;)p=p.then(a.shift(),a.shift());return p}for(var i=e;n.length;){var O=n.shift(),s=n.shift();try{i=O(i)}catch(e){s(e);break}}try{p=b(i)}catch(e){return Promise.reject(e)}for(;M.length;)p=p.then(M.shift(),M.shift());return p},a.prototype.getUri=function(e){return e=c(this.defaults,e),p(e.url,e.params,e.paramsSerializer).replace(/^\\?/,\"\")},o.forEach([\"delete\",\"get\",\"head\",\"options\"],(function(e){a.prototype[e]=function(t,n){return this.request(c(n||{},{method:e,url:t,data:(n||{}).data}))}})),o.forEach([\"post\",\"put\",\"patch\"],(function(e){a.prototype[e]=function(t,n,o){return this.request(c(o||{},{method:e,url:t,data:n}))}})),e.exports=a},782:(e,t,n)=>{\"use strict\";var o=n(4867);function p(){this.handlers=[]}p.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},p.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},p.prototype.forEach=function(e){o.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=p},4097:(e,t,n)=>{\"use strict\";var o=n(1793),p=n(7303);e.exports=function(e,t){return e&&!o(t)?p(e,t):t}},5061:(e,t,n)=>{\"use strict\";var o=n(481);e.exports=function(e,t,n,p,M){var b=new Error(e);return o(b,t,n,p,M)}},3572:(e,t,n)=>{\"use strict\";var o=n(4867),p=n(8527),M=n(6502),b=n(5655);function c(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=p.call(e,e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),o.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],(function(t){delete e.headers[t]})),(e.adapter||b.adapter)(e).then((function(t){return c(e),t.data=p.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return M(t)||(c(e),t&&t.response&&(t.response.data=p.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},481:e=>{\"use strict\";e.exports=function(e,t,n,o,p){return e.config=t,n&&(e.code=n),e.request=o,e.response=p,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},7185:(e,t,n)=>{\"use strict\";var o=n(4867);e.exports=function(e,t){t=t||{};var n={},p=[\"url\",\"method\",\"data\"],M=[\"headers\",\"auth\",\"proxy\",\"params\"],b=[\"baseURL\",\"transformRequest\",\"transformResponse\",\"paramsSerializer\",\"timeout\",\"timeoutMessage\",\"withCredentials\",\"adapter\",\"responseType\",\"xsrfCookieName\",\"xsrfHeaderName\",\"onUploadProgress\",\"onDownloadProgress\",\"decompress\",\"maxContentLength\",\"maxBodyLength\",\"maxRedirects\",\"transport\",\"httpAgent\",\"httpsAgent\",\"cancelToken\",\"socketPath\",\"responseEncoding\"],c=[\"validateStatus\"];function z(e,t){return o.isPlainObject(e)&&o.isPlainObject(t)?o.merge(e,t):o.isPlainObject(t)?o.merge({},t):o.isArray(t)?t.slice():t}function r(p){o.isUndefined(t[p])?o.isUndefined(e[p])||(n[p]=z(void 0,e[p])):n[p]=z(e[p],t[p])}o.forEach(p,(function(e){o.isUndefined(t[e])||(n[e]=z(void 0,t[e]))})),o.forEach(M,r),o.forEach(b,(function(p){o.isUndefined(t[p])?o.isUndefined(e[p])||(n[p]=z(void 0,e[p])):n[p]=z(void 0,t[p])})),o.forEach(c,(function(o){o in t?n[o]=z(e[o],t[o]):o in e&&(n[o]=z(void 0,e[o]))}));var a=p.concat(M).concat(b).concat(c),i=Object.keys(e).concat(Object.keys(t)).filter((function(e){return-1===a.indexOf(e)}));return o.forEach(i,r),n}},6026:(e,t,n)=>{\"use strict\";var o=n(5061);e.exports=function(e,t,n){var p=n.config.validateStatus;n.status&&p&&!p(n.status)?t(o(\"Request failed with status code \"+n.status,n.config,null,n.request,n)):e(n)}},8527:(e,t,n)=>{\"use strict\";var o=n(4867),p=n(5655);e.exports=function(e,t,n){var M=this||p;return o.forEach(n,(function(n){e=n.call(M,e,t)})),e}},5655:(e,t,n)=>{\"use strict\";var o=n(4155),p=n(4867),M=n(6016),b=n(481),c={\"Content-Type\":\"application/x-www-form-urlencoded\"};function z(e,t){!p.isUndefined(e)&&p.isUndefined(e[\"Content-Type\"])&&(e[\"Content-Type\"]=t)}var r,a={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:((\"undefined\"!=typeof XMLHttpRequest||void 0!==o&&\"[object process]\"===Object.prototype.toString.call(o))&&(r=n(5448)),r),transformRequest:[function(e,t){return M(t,\"Accept\"),M(t,\"Content-Type\"),p.isFormData(e)||p.isArrayBuffer(e)||p.isBuffer(e)||p.isStream(e)||p.isFile(e)||p.isBlob(e)?e:p.isArrayBufferView(e)?e.buffer:p.isURLSearchParams(e)?(z(t,\"application/x-www-form-urlencoded;charset=utf-8\"),e.toString()):p.isObject(e)||t&&\"application/json\"===t[\"Content-Type\"]?(z(t,\"application/json\"),function(e,t,n){if(p.isString(e))try{return(t||JSON.parse)(e),p.trim(e)}catch(e){if(\"SyntaxError\"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional,n=t&&t.silentJSONParsing,o=t&&t.forcedJSONParsing,M=!n&&\"json\"===this.responseType;if(M||o&&p.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(M){if(\"SyntaxError\"===e.name)throw b(e,this,\"E_JSON_PARSE\");throw e}}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300}};a.headers={common:{Accept:\"application/json, text/plain, */*\"}},p.forEach([\"delete\",\"get\",\"head\"],(function(e){a.headers[e]={}})),p.forEach([\"post\",\"put\",\"patch\"],(function(e){a.headers[e]=p.merge(c)})),e.exports=a},1849:e=>{\"use strict\";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),o=0;o<n.length;o++)n[o]=arguments[o];return e.apply(t,n)}}},5327:(e,t,n)=>{\"use strict\";var o=n(4867);function p(e){return encodeURIComponent(e).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}e.exports=function(e,t,n){if(!t)return e;var M;if(n)M=n(t);else if(o.isURLSearchParams(t))M=t.toString();else{var b=[];o.forEach(t,(function(e,t){null!=e&&(o.isArray(e)?t+=\"[]\":e=[e],o.forEach(e,(function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),b.push(p(t)+\"=\"+p(e))})))})),M=b.join(\"&\")}if(M){var c=e.indexOf(\"#\");-1!==c&&(e=e.slice(0,c)),e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+M}return e}},7303:e=>{\"use strict\";e.exports=function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}},4372:(e,t,n)=>{\"use strict\";var o=n(4867);e.exports=o.isStandardBrowserEnv()?{write:function(e,t,n,p,M,b){var c=[];c.push(e+\"=\"+encodeURIComponent(t)),o.isNumber(n)&&c.push(\"expires=\"+new Date(n).toGMTString()),o.isString(p)&&c.push(\"path=\"+p),o.isString(M)&&c.push(\"domain=\"+M),!0===b&&c.push(\"secure\"),document.cookie=c.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{\"use strict\";e.exports=function(e){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(e)}},6268:e=>{\"use strict\";e.exports=function(e){return\"object\"==typeof e&&!0===e.isAxiosError}},7985:(e,t,n)=>{\"use strict\";var o=n(4867);e.exports=o.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function p(e){var o=e;return t&&(n.setAttribute(\"href\",o),o=n.href),n.setAttribute(\"href\",o),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=p(window.location.href),function(t){var n=o.isString(t)?p(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},6016:(e,t,n)=>{\"use strict\";var o=n(4867);e.exports=function(e,t){o.forEach(e,(function(n,o){o!==t&&o.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[o])}))}},4109:(e,t,n)=>{\"use strict\";var o=n(4867),p=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];e.exports=function(e){var t,n,M,b={};return e?(o.forEach(e.split(\"\\n\"),(function(e){if(M=e.indexOf(\":\"),t=o.trim(e.substr(0,M)).toLowerCase(),n=o.trim(e.substr(M+1)),t){if(b[t]&&p.indexOf(t)>=0)return;b[t]=\"set-cookie\"===t?(b[t]?b[t]:[]).concat([n]):b[t]?b[t]+\", \"+n:n}})),b):b}},8713:e=>{\"use strict\";e.exports=function(e){return function(t){return e.apply(null,t)}}},4875:(e,t,n)=>{\"use strict\";var o=n(8593),p={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach((function(e,t){p[e]=function(n){return typeof n===e||\"a\"+(t<1?\"n \":\" \")+e}}));var M={},b=o.version.split(\".\");function c(e,t){for(var n=t?t.split(\".\"):b,o=e.split(\".\"),p=0;p<3;p++){if(n[p]>o[p])return!0;if(n[p]<o[p])return!1}return!1}p.transitional=function(e,t,n){var p=t&&c(t);return function(b,c,z){if(!1===e)throw new Error(function(e,t){return\"[Axios v\"+o.version+\"] Transitional option '\"+e+\"'\"+t+(n?\". \"+n:\"\")}(c,\" has been removed in \"+t));return p&&!M[c]&&(M[c]=!0),!e||e(b,c,z)}},e.exports={isOlderVersion:c,assertOptions:function(e,t,n){if(\"object\"!=typeof e)throw new TypeError(\"options must be an object\");for(var o=Object.keys(e),p=o.length;p-- >0;){var M=o[p],b=t[M];if(b){var c=e[M],z=void 0===c||b(c,M,e);if(!0!==z)throw new TypeError(\"option \"+M+\" must be \"+z)}else if(!0!==n)throw Error(\"Unknown option \"+M)}},validators:p}},4867:(e,t,n)=>{\"use strict\";var o=n(1849),p=Object.prototype.toString;function M(e){return\"[object Array]\"===p.call(e)}function b(e){return void 0===e}function c(e){return null!==e&&\"object\"==typeof e}function z(e){if(\"[object Object]\"!==p.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function r(e){return\"[object Function]\"===p.call(e)}function a(e,t){if(null!=e)if(\"object\"!=typeof e&&(e=[e]),M(e))for(var n=0,o=e.length;n<o;n++)t.call(null,e[n],n,e);else for(var p in e)Object.prototype.hasOwnProperty.call(e,p)&&t.call(null,e[p],p,e)}e.exports={isArray:M,isArrayBuffer:function(e){return\"[object ArrayBuffer]\"===p.call(e)},isBuffer:function(e){return null!==e&&!b(e)&&null!==e.constructor&&!b(e.constructor)&&\"function\"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return\"undefined\"!=typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return\"string\"==typeof e},isNumber:function(e){return\"number\"==typeof e},isObject:c,isPlainObject:z,isUndefined:b,isDate:function(e){return\"[object Date]\"===p.call(e)},isFile:function(e){return\"[object File]\"===p.call(e)},isBlob:function(e){return\"[object Blob]\"===p.call(e)},isFunction:r,isStream:function(e){return c(e)&&r(e.pipe)},isURLSearchParams:function(e){return\"undefined\"!=typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return(\"undefined\"==typeof navigator||\"ReactNative\"!==navigator.product&&\"NativeScript\"!==navigator.product&&\"NS\"!==navigator.product)&&(\"undefined\"!=typeof window&&\"undefined\"!=typeof document)},forEach:a,merge:function e(){var t={};function n(n,o){z(t[o])&&z(n)?t[o]=e(t[o],n):z(n)?t[o]=e({},n):M(n)?t[o]=n.slice():t[o]=n}for(var o=0,p=arguments.length;o<p;o++)a(arguments[o],n);return t},extend:function(e,t,n){return a(t,(function(t,p){e[p]=n&&\"function\"==typeof t?o(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\\s+|\\s+$/g,\"\")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}}},2110:(e,t,n)=>{\"use strict\";var o=Object.freeze({}),p=Array.isArray;function M(e){return null==e}function b(e){return null!=e}function c(e){return!0===e}function z(e){return\"string\"==typeof e||\"number\"==typeof e||\"symbol\"==typeof e||\"boolean\"==typeof e}function r(e){return\"function\"==typeof e}function a(e){return null!==e&&\"object\"==typeof e}var i=Object.prototype.toString;function O(e){return\"[object Object]\"===i.call(e)}function s(e){return\"[object RegExp]\"===i.call(e)}function A(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return b(e)&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}function d(e){return null==e?\"\":Array.isArray(e)||O(e)&&e.toString===i?JSON.stringify(e,null,2):String(e)}function l(e){var t=parseFloat(e);return isNaN(t)?e:t}function f(e,t){for(var n=Object.create(null),o=e.split(\",\"),p=0;p<o.length;p++)n[o[p]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var q=f(\"slot,component\",!0),W=f(\"key,ref,slot,slot-scope,is\");function h(e,t){var n=e.length;if(n){if(t===e[n-1])return void(e.length=n-1);var o=e.indexOf(t);if(o>-1)return e.splice(o,1)}}var v=Object.prototype.hasOwnProperty;function R(e,t){return v.call(e,t)}function m(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var g=/-(\\w)/g,L=m((function(e){return e.replace(g,(function(e,t){return t?t.toUpperCase():\"\"}))})),_=m((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),N=/\\B([A-Z])/g,y=m((function(e){return e.replace(N,\"-$1\").toLowerCase()}));var T=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var o=arguments.length;return o?o>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function E(e,t){t=t||0;for(var n=e.length-t,o=new Array(n);n--;)o[n]=e[n+t];return o}function B(e,t){for(var n in t)e[n]=t[n];return e}function C(e){for(var t={},n=0;n<e.length;n++)e[n]&&B(t,e[n]);return t}function X(e,t,n){}var w=function(e,t,n){return!1},S=function(e){return e};function x(e,t){if(e===t)return!0;var n=a(e),o=a(t);if(!n||!o)return!n&&!o&&String(e)===String(t);try{var p=Array.isArray(e),M=Array.isArray(t);if(p&&M)return e.length===t.length&&e.every((function(e,n){return x(e,t[n])}));if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(p||M)return!1;var b=Object.keys(e),c=Object.keys(t);return b.length===c.length&&b.every((function(n){return x(e[n],t[n])}))}catch(e){return!1}}function k(e,t){for(var n=0;n<e.length;n++)if(x(e[n],t))return n;return-1}function I(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}function D(e,t){return e===t?0===e&&1/e!=1/t:e==e||t==t}var P=\"data-server-rendered\",j=[\"component\",\"directive\",\"filter\"],U=[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\",\"errorCaptured\",\"serverPrefetch\",\"renderTracked\",\"renderTriggered\"],H={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:w,isReservedAttr:w,isUnknownElement:w,getTagNamespace:X,parsePlatformTagName:S,mustUseProp:w,async:!0,_lifecycleHooks:U},F=/a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;function G(e){var t=(e+\"\").charCodeAt(0);return 36===t||95===t}function $(e,t,n,o){Object.defineProperty(e,t,{value:n,enumerable:!!o,writable:!0,configurable:!0})}var V=new RegExp(\"[^\".concat(F.source,\".$_\\\\d]\"));var Y=\"__proto__\"in{},K=\"undefined\"!=typeof window,Z=K&&window.navigator.userAgent.toLowerCase(),Q=Z&&/msie|trident/.test(Z),J=Z&&Z.indexOf(\"msie 9.0\")>0,ee=Z&&Z.indexOf(\"edge/\")>0;Z&&Z.indexOf(\"android\");var te=Z&&/iphone|ipad|ipod|ios/.test(Z);Z&&/chrome\\/\\d+/.test(Z),Z&&/phantomjs/.test(Z);var ne,oe=Z&&Z.match(/firefox\\/(\\d+)/),pe={}.watch,Me=!1;if(K)try{var be={};Object.defineProperty(be,\"passive\",{get:function(){Me=!0}}),window.addEventListener(\"test-passive\",null,be)}catch(e){}var ce=function(){return void 0===ne&&(ne=!K&&void 0!==n.g&&(n.g.process&&\"server\"===n.g.process.env.VUE_ENV)),ne},ze=K&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return\"function\"==typeof e&&/native code/.test(e.toString())}var ae,ie=\"undefined\"!=typeof Symbol&&re(Symbol)&&\"undefined\"!=typeof Reflect&&re(Reflect.ownKeys);ae=\"undefined\"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var Oe=null;function se(e){void 0===e&&(e=null),e||Oe&&Oe._scope.off(),Oe=e,e&&e._scope.on()}var Ae=function(){function e(e,t,n,o,p,M,b,c){this.tag=e,this.data=t,this.children=n,this.text=o,this.elm=p,this.ns=void 0,this.context=M,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=b,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,\"child\",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),ue=function(e){void 0===e&&(e=\"\");var t=new Ae;return t.text=e,t.isComment=!0,t};function de(e){return new Ae(void 0,void 0,void 0,String(e))}function le(e){var t=new Ae(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var fe=0,qe=[],We=function(){for(var e=0;e<qe.length;e++){var t=qe[e];t.subs=t.subs.filter((function(e){return e})),t._pending=!1}qe.length=0},he=function(){function e(){this._pending=!1,this.id=fe++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,qe.push(this))},e.prototype.depend=function(t){e.target&&e.target.addDep(this)},e.prototype.notify=function(e){var t=this.subs.filter((function(e){return e}));for(var n=0,o=t.length;n<o;n++){0,t[n].update()}},e}();he.target=null;var ve=[];function Re(e){ve.push(e),he.target=e}function me(){ve.pop(),he.target=ve[ve.length-1]}var ge=Array.prototype,Le=Object.create(ge);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach((function(e){var t=ge[e];$(Le,e,(function(){for(var n=[],o=0;o<arguments.length;o++)n[o]=arguments[o];var p,M=t.apply(this,n),b=this.__ob__;switch(e){case\"push\":case\"unshift\":p=n;break;case\"splice\":p=n.slice(2)}return p&&b.observeArray(p),b.dep.notify(),M}))}));var _e=Object.getOwnPropertyNames(Le),Ne={},ye=!0;function Te(e){ye=e}var Ee={notify:X,depend:X,addSub:X,removeSub:X},Be=function(){function e(e,t,n){if(void 0===t&&(t=!1),void 0===n&&(n=!1),this.value=e,this.shallow=t,this.mock=n,this.dep=n?Ee:new he,this.vmCount=0,$(e,\"__ob__\",this),p(e)){if(!n)if(Y)e.__proto__=Le;else for(var o=0,M=_e.length;o<M;o++){$(e,c=_e[o],Le[c])}t||this.observeArray(e)}else{var b=Object.keys(e);for(o=0;o<b.length;o++){var c;Xe(e,c=b[o],Ne,void 0,t,n)}}}return e.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Ce(e[t],!1,this.mock)},e}();function Ce(e,t,n){return e&&R(e,\"__ob__\")&&e.__ob__ instanceof Be?e.__ob__:!ye||!n&&ce()||!p(e)&&!O(e)||!Object.isExtensible(e)||e.__v_skip||Pe(e)||e instanceof Ae?void 0:new Be(e,t,n)}function Xe(e,t,n,o,M,b){var c=new he,z=Object.getOwnPropertyDescriptor(e,t);if(!z||!1!==z.configurable){var r=z&&z.get,a=z&&z.set;r&&!a||n!==Ne&&2!==arguments.length||(n=e[t]);var i=!M&&Ce(n,!1,b);return Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=r?r.call(e):n;return he.target&&(c.depend(),i&&(i.dep.depend(),p(t)&&xe(t))),Pe(t)&&!M?t.value:t},set:function(t){var o=r?r.call(e):n;if(D(o,t)){if(a)a.call(e,t);else{if(r)return;if(!M&&Pe(o)&&!Pe(t))return void(o.value=t);n=t}i=!M&&Ce(t,!1,b),c.notify()}}}),c}}function we(e,t,n){if(!De(e)){var o=e.__ob__;return p(e)&&A(t)?(e.length=Math.max(e.length,t),e.splice(t,1,n),o&&!o.shallow&&o.mock&&Ce(n,!1,!0),n):t in e&&!(t in Object.prototype)?(e[t]=n,n):e._isVue||o&&o.vmCount?n:o?(Xe(o.value,t,n,void 0,o.shallow,o.mock),o.dep.notify(),n):(e[t]=n,n)}}function Se(e,t){if(p(e)&&A(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount||De(e)||R(e,t)&&(delete e[t],n&&n.dep.notify())}}function xe(e){for(var t=void 0,n=0,o=e.length;n<o;n++)(t=e[n])&&t.__ob__&&t.__ob__.dep.depend(),p(t)&&xe(t)}function ke(e){return Ie(e,!0),$(e,\"__v_isShallow\",!0),e}function Ie(e,t){if(!De(e)){Ce(e,t,ce());0}}function De(e){return!(!e||!e.__v_isReadonly)}function Pe(e){return!(!e||!0!==e.__v_isRef)}function je(e,t,n){Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){var e=t[n];if(Pe(e))return e.value;var o=e&&e.__ob__;return o&&o.dep.depend(),e},set:function(e){var o=t[n];Pe(o)&&!Pe(e)?o.value=e:t[n]=e}})}var Ue=m((function(e){var t=\"&\"===e.charAt(0),n=\"~\"===(e=t?e.slice(1):e).charAt(0),o=\"!\"===(e=n?e.slice(1):e).charAt(0);return{name:e=o?e.slice(1):e,once:n,capture:o,passive:t}}));function He(e,t){function n(){var e=n.fns;if(!p(e))return on(e,null,arguments,t,\"v-on handler\");for(var o=e.slice(),M=0;M<o.length;M++)on(o[M],null,arguments,t,\"v-on handler\")}return n.fns=e,n}function Fe(e,t,n,o,p,b){var z,r,a,i;for(z in e)r=e[z],a=t[z],i=Ue(z),M(r)||(M(a)?(M(r.fns)&&(r=e[z]=He(r,b)),c(i.once)&&(r=e[z]=p(i.name,r,i.capture)),n(i.name,r,i.capture,i.passive,i.params)):r!==a&&(a.fns=r,e[z]=a));for(z in t)M(e[z])&&o((i=Ue(z)).name,t[z],i.capture)}function Ge(e,t,n){var o;e instanceof Ae&&(e=e.data.hook||(e.data.hook={}));var p=e[t];function z(){n.apply(this,arguments),h(o.fns,z)}M(p)?o=He([z]):b(p.fns)&&c(p.merged)?(o=p).fns.push(z):o=He([p,z]),o.merged=!0,e[t]=o}function $e(e,t,n,o,p){if(b(t)){if(R(t,n))return e[n]=t[n],p||delete t[n],!0;if(R(t,o))return e[n]=t[o],p||delete t[o],!0}return!1}function Ve(e){return z(e)?[de(e)]:p(e)?Ke(e):void 0}function Ye(e){return b(e)&&b(e.text)&&!1===e.isComment}function Ke(e,t){var n,o,r,a,i=[];for(n=0;n<e.length;n++)M(o=e[n])||\"boolean\"==typeof o||(a=i[r=i.length-1],p(o)?o.length>0&&(Ye((o=Ke(o,\"\".concat(t||\"\",\"_\").concat(n)))[0])&&Ye(a)&&(i[r]=de(a.text+o[0].text),o.shift()),i.push.apply(i,o)):z(o)?Ye(a)?i[r]=de(a.text+o):\"\"!==o&&i.push(de(o)):Ye(o)&&Ye(a)?i[r]=de(a.text+o.text):(c(e._isVList)&&b(o.tag)&&M(o.key)&&b(t)&&(o.key=\"__vlist\".concat(t,\"_\").concat(n,\"__\")),i.push(o)));return i}var Ze=1,Qe=2;function Je(e,t,n,o,M,i){return(p(n)||z(n))&&(M=o,o=n,n=void 0),c(i)&&(M=Qe),function(e,t,n,o,M){if(b(n)&&b(n.__ob__))return ue();b(n)&&b(n.is)&&(t=n.is);if(!t)return ue();0;p(o)&&r(o[0])&&((n=n||{}).scopedSlots={default:o[0]},o.length=0);M===Qe?o=Ve(o):M===Ze&&(o=function(e){for(var t=0;t<e.length;t++)if(p(e[t]))return Array.prototype.concat.apply([],e);return e}(o));var c,z;if(\"string\"==typeof t){var i=void 0;z=e.$vnode&&e.$vnode.ns||H.getTagNamespace(t),c=H.isReservedTag(t)?new Ae(H.parsePlatformTagName(t),n,o,void 0,void 0,e):n&&n.pre||!b(i=Kn(e.$options,\"components\",t))?new Ae(t,n,o,void 0,void 0,e):Dn(i,n,e,o,t)}else c=Dn(t,n,e,o);return p(c)?c:b(c)?(b(z)&&et(c,z),b(n)&&function(e){a(e.style)&&qn(e.style);a(e.class)&&qn(e.class)}(n),c):ue()}(e,t,n,o,M)}function et(e,t,n){if(e.ns=t,\"foreignObject\"===e.tag&&(t=void 0,n=!0),b(e.children))for(var o=0,p=e.children.length;o<p;o++){var z=e.children[o];b(z.tag)&&(M(z.ns)||c(n)&&\"svg\"!==z.tag)&&et(z,t,n)}}function tt(e,t){var n,o,M,c,z=null;if(p(e)||\"string\"==typeof e)for(z=new Array(e.length),n=0,o=e.length;n<o;n++)z[n]=t(e[n],n);else if(\"number\"==typeof e)for(z=new Array(e),n=0;n<e;n++)z[n]=t(n+1,n);else if(a(e))if(ie&&e[Symbol.iterator]){z=[];for(var r=e[Symbol.iterator](),i=r.next();!i.done;)z.push(t(i.value,z.length)),i=r.next()}else for(M=Object.keys(e),z=new Array(M.length),n=0,o=M.length;n<o;n++)c=M[n],z[n]=t(e[c],c,n);return b(z)||(z=[]),z._isVList=!0,z}function nt(e,t,n,o){var p,M=this.$scopedSlots[e];M?(n=n||{},o&&(n=B(B({},o),n)),p=M(n)||(r(t)?t():t)):p=this.$slots[e]||(r(t)?t():t);var b=n&&n.slot;return b?this.$createElement(\"template\",{slot:b},p):p}function ot(e){return Kn(this.$options,\"filters\",e,!0)||S}function pt(e,t){return p(e)?-1===e.indexOf(t):e!==t}function Mt(e,t,n,o,p){var M=H.keyCodes[t]||n;return p&&o&&!H.keyCodes[t]?pt(p,o):M?pt(M,e):o?y(o)!==t:void 0===e}function bt(e,t,n,o,M){if(n)if(a(n)){p(n)&&(n=C(n));var b=void 0,c=function(p){if(\"class\"===p||\"style\"===p||W(p))b=e;else{var c=e.attrs&&e.attrs.type;b=o||H.mustUseProp(t,c,p)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var z=L(p),r=y(p);z in b||r in b||(b[p]=n[p],M&&((e.on||(e.on={}))[\"update:\".concat(p)]=function(e){n[p]=e}))};for(var z in n)c(z)}else;return e}function ct(e,t){var n=this._staticTrees||(this._staticTrees=[]),o=n[e];return o&&!t||rt(o=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,this._c,this),\"__static__\".concat(e),!1),o}function zt(e,t,n){return rt(e,\"__once__\".concat(t).concat(n?\"_\".concat(n):\"\"),!0),e}function rt(e,t,n){if(p(e))for(var o=0;o<e.length;o++)e[o]&&\"string\"!=typeof e[o]&&at(e[o],\"\".concat(t,\"_\").concat(o),n);else at(e,t,n)}function at(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function it(e,t){if(t)if(O(t)){var n=e.on=e.on?B({},e.on):{};for(var o in t){var p=n[o],M=t[o];n[o]=p?[].concat(p,M):M}}else;return e}function Ot(e,t,n,o){t=t||{$stable:!n};for(var M=0;M<e.length;M++){var b=e[M];p(b)?Ot(b,t,n):b&&(b.proxy&&(b.fn.proxy=!0),t[b.key]=b.fn)}return o&&(t.$key=o),t}function st(e,t){for(var n=0;n<t.length;n+=2){var o=t[n];\"string\"==typeof o&&o&&(e[t[n]]=t[n+1])}return e}function At(e,t){return\"string\"==typeof e?t+e:e}function ut(e){e._o=zt,e._n=l,e._s=d,e._l=tt,e._t=nt,e._q=x,e._i=k,e._m=ct,e._f=ot,e._k=Mt,e._b=bt,e._v=de,e._e=ue,e._u=Ot,e._g=it,e._d=st,e._p=At}function dt(e,t){if(!e||!e.length)return{};for(var n={},o=0,p=e.length;o<p;o++){var M=e[o],b=M.data;if(b&&b.attrs&&b.attrs.slot&&delete b.attrs.slot,M.context!==t&&M.fnContext!==t||!b||null==b.slot)(n.default||(n.default=[])).push(M);else{var c=b.slot,z=n[c]||(n[c]=[]);\"template\"===M.tag?z.push.apply(z,M.children||[]):z.push(M)}}for(var r in n)n[r].every(lt)&&delete n[r];return n}function lt(e){return e.isComment&&!e.asyncFactory||\" \"===e.text}function ft(e){return e.isComment&&e.asyncFactory}function qt(e,t,n,p){var M,b=Object.keys(n).length>0,c=t?!!t.$stable:!b,z=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(c&&p&&p!==o&&z===p.$key&&!b&&!p.$hasNormal)return p;for(var r in M={},t)t[r]&&\"$\"!==r[0]&&(M[r]=Wt(e,n,r,t[r]))}else M={};for(var a in n)a in M||(M[a]=ht(n,a));return t&&Object.isExtensible(t)&&(t._normalized=M),$(M,\"$stable\",c),$(M,\"$key\",z),$(M,\"$hasNormal\",b),M}function Wt(e,t,n,o){var M=function(){var t=Oe;se(e);var n=arguments.length?o.apply(null,arguments):o({}),M=(n=n&&\"object\"==typeof n&&!p(n)?[n]:Ve(n))&&n[0];return se(t),n&&(!M||1===n.length&&M.isComment&&!ft(M))?void 0:n};return o.proxy&&Object.defineProperty(t,n,{get:M,enumerable:!0,configurable:!0}),M}function ht(e,t){return function(){return e[t]}}function vt(e){return{get attrs(){if(!e._attrsProxy){var t=e._attrsProxy={};$(t,\"_v_attr_proxy\",!0),Rt(t,e.$attrs,o,e,\"$attrs\")}return e._attrsProxy},get listeners(){e._listenersProxy||Rt(e._listenersProxy={},e.$listeners,o,e,\"$listeners\");return e._listenersProxy},get slots(){return function(e){e._slotsProxy||gt(e._slotsProxy={},e.$scopedSlots);return e._slotsProxy}(e)},emit:T(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return je(e,t,n)}))}}}function Rt(e,t,n,o,p){var M=!1;for(var b in t)b in e?t[b]!==n[b]&&(M=!0):(M=!0,mt(e,b,o,p));for(var b in e)b in t||(M=!0,delete e[b]);return M}function mt(e,t,n,o){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return n[o][t]}})}function gt(e,t){for(var n in t)e[n]=t[n];for(var n in e)n in t||delete e[n]}var Lt,_t=null;function Nt(e,t){return(e.__esModule||ie&&\"Module\"===e[Symbol.toStringTag])&&(e=e.default),a(e)?t.extend(e):e}function yt(e){if(p(e))for(var t=0;t<e.length;t++){var n=e[t];if(b(n)&&(b(n.componentOptions)||ft(n)))return n}}function Tt(e,t){Lt.$on(e,t)}function Et(e,t){Lt.$off(e,t)}function Bt(e,t){var n=Lt;return function o(){null!==t.apply(null,arguments)&&n.$off(e,o)}}function Ct(e,t,n){Lt=e,Fe(t,n||{},Tt,Et,Bt,e),Lt=void 0}var Xt=null;function wt(e){var t=Xt;return Xt=e,function(){Xt=t}}function St(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function xt(e,t){if(t){if(e._directInactive=!1,St(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)xt(e.$children[n]);It(e,\"activated\")}}function kt(e,t){if(!(t&&(e._directInactive=!0,St(e))||e._inactive)){e._inactive=!0;for(var n=0;n<e.$children.length;n++)kt(e.$children[n]);It(e,\"deactivated\")}}function It(e,t,n,o){void 0===o&&(o=!0),Re();var p=Oe;o&&se(e);var M=e.$options[t],b=\"\".concat(t,\" hook\");if(M)for(var c=0,z=M.length;c<z;c++)on(M[c],e,n||null,e,b);e._hasHookEvent&&e.$emit(\"hook:\"+t),o&&se(p),me()}var Dt=[],Pt=[],jt={},Ut=!1,Ht=!1,Ft=0;var Gt=0,$t=Date.now;if(K&&!Q){var Vt=window.performance;Vt&&\"function\"==typeof Vt.now&&$t()>document.createEvent(\"Event\").timeStamp&&($t=function(){return Vt.now()})}var Yt=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function Kt(){var e,t;for(Gt=$t(),Ht=!0,Dt.sort(Yt),Ft=0;Ft<Dt.length;Ft++)(e=Dt[Ft]).before&&e.before(),t=e.id,jt[t]=null,e.run();var n=Pt.slice(),o=Dt.slice();Ft=Dt.length=Pt.length=0,jt={},Ut=Ht=!1,function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,xt(e[t],!0)}(n),function(e){var t=e.length;for(;t--;){var n=e[t],o=n.vm;o&&o._watcher===n&&o._isMounted&&!o._isDestroyed&&It(o,\"updated\")}}(o),We(),ze&&H.devtools&&ze.emit(\"flush\")}function Zt(e){var t=e.id;if(null==jt[t]&&(e!==he.target||!e.noRecurse)){if(jt[t]=!0,Ht){for(var n=Dt.length-1;n>Ft&&Dt[n].id>e.id;)n--;Dt.splice(n+1,0,e)}else Dt.push(e);Ut||(Ut=!0,dn(Kt))}}var Qt=\"watcher\";\"\".concat(Qt,\" callback\"),\"\".concat(Qt,\" getter\"),\"\".concat(Qt,\" cleanup\");var Jt;var en=function(){function e(e){void 0===e&&(e=!1),this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Jt,!e&&Jt&&(this.index=(Jt.scopes||(Jt.scopes=[])).push(this)-1)}return e.prototype.run=function(e){if(this.active){var t=Jt;try{return Jt=this,e()}finally{Jt=t}}else 0},e.prototype.on=function(){Jt=this},e.prototype.off=function(){Jt=this.parent},e.prototype.stop=function(e){if(this.active){var t=void 0,n=void 0;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].teardown();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){var o=this.parent.scopes.pop();o&&o!==this&&(this.parent.scopes[this.index]=o,o.index=this.index)}this.parent=void 0,this.active=!1}},e}();function tn(e){var t=e._provided,n=e.$parent&&e.$parent._provided;return n===t?e._provided=Object.create(n):t}function nn(e,t,n){Re();try{if(t)for(var o=t;o=o.$parent;){var p=o.$options.errorCaptured;if(p)for(var M=0;M<p.length;M++)try{if(!1===p[M].call(o,e,t,n))return}catch(e){pn(e,o,\"errorCaptured hook\")}}pn(e,t,n)}finally{me()}}function on(e,t,n,o,p){var M;try{(M=n?e.apply(t,n):e.call(t))&&!M._isVue&&u(M)&&!M._handled&&(M.catch((function(e){return nn(e,o,p+\" (Promise/async)\")})),M._handled=!0)}catch(e){nn(e,o,p)}return M}function pn(e,t,n){if(H.errorHandler)try{return H.errorHandler.call(null,e,t,n)}catch(t){t!==e&&Mn(t,null,\"config.errorHandler\")}Mn(e,t,n)}function Mn(e,t,n){if(!K||\"undefined\"==typeof console)throw e}var bn,cn=!1,zn=[],rn=!1;function an(){rn=!1;var e=zn.slice(0);zn.length=0;for(var t=0;t<e.length;t++)e[t]()}if(\"undefined\"!=typeof Promise&&re(Promise)){var On=Promise.resolve();bn=function(){On.then(an),te&&setTimeout(X)},cn=!0}else if(Q||\"undefined\"==typeof MutationObserver||!re(MutationObserver)&&\"[object MutationObserverConstructor]\"!==MutationObserver.toString())bn=\"undefined\"!=typeof setImmediate&&re(setImmediate)?function(){setImmediate(an)}:function(){setTimeout(an,0)};else{var sn=1,An=new MutationObserver(an),un=document.createTextNode(String(sn));An.observe(un,{characterData:!0}),bn=function(){sn=(sn+1)%2,un.data=String(sn)},cn=!0}function dn(e,t){var n;if(zn.push((function(){if(e)try{e.call(t)}catch(e){nn(e,t,\"nextTick\")}else n&&n(t)})),rn||(rn=!0,bn()),!e&&\"undefined\"!=typeof Promise)return new Promise((function(e){n=e}))}function ln(e){return function(t,n){if(void 0===n&&(n=Oe),n)return function(e,t,n){var o=e.$options;o[t]=Gn(o[t],n)}(n,e,t)}}ln(\"beforeMount\"),ln(\"mounted\"),ln(\"beforeUpdate\"),ln(\"updated\"),ln(\"beforeDestroy\"),ln(\"destroyed\"),ln(\"activated\"),ln(\"deactivated\"),ln(\"serverPrefetch\"),ln(\"renderTracked\"),ln(\"renderTriggered\"),ln(\"errorCaptured\");var fn=new ae;function qn(e){return Wn(e,fn),fn.clear(),e}function Wn(e,t){var n,o,M=p(e);if(!(!M&&!a(e)||e.__v_skip||Object.isFrozen(e)||e instanceof Ae)){if(e.__ob__){var b=e.__ob__.dep.id;if(t.has(b))return;t.add(b)}if(M)for(n=e.length;n--;)Wn(e[n],t);else if(Pe(e))Wn(e.value,t);else for(n=(o=Object.keys(e)).length;n--;)Wn(e[o[n]],t)}}var hn=0,vn=function(){function e(e,t,n,o,p){var M,b;M=this,void 0===(b=Jt&&!Jt._vm?Jt:e?e._scope:void 0)&&(b=Jt),b&&b.active&&b.effects.push(M),(this.vm=e)&&p&&(e._watcher=this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++hn,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ae,this.newDepIds=new ae,this.expression=\"\",r(t)?this.getter=t:(this.getter=function(e){if(!V.test(e)){var t=e.split(\".\");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}(t),this.getter||(this.getter=X)),this.value=this.lazy?void 0:this.get()}return e.prototype.get=function(){var e;Re(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;nn(e,t,'getter for watcher \"'.concat(this.expression,'\"'))}finally{this.deep&&qn(e),me(),this.cleanupDeps()}return e},e.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},e.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},e.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Zt(this)},e.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||a(e)||this.deep){var t=this.value;if(this.value=e,this.user){var n='callback for watcher \"'.concat(this.expression,'\"');on(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},e.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},e.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},e.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&h(this.vm._scope.effects,this),this.active){for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},e}(),Rn={enumerable:!0,configurable:!0,get:X,set:X};function mn(e,t,n){Rn.get=function(){return this[t][n]},Rn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Rn)}function gn(e){var t=e.$options;if(t.props&&function(e,t){var n=e.$options.propsData||{},o=e._props=ke({}),p=e.$options._propKeys=[],M=!e.$parent;M||Te(!1);var b=function(M){p.push(M);var b=Zn(M,t,n,e);Xe(o,M,b),M in e||mn(e,\"_props\",M)};for(var c in t)b(c);Te(!0)}(e,t.props),function(e){var t=e.$options,n=t.setup;if(n){var o=e._setupContext=vt(e);se(e),Re();var p=on(n,null,[e._props||ke({}),o],e,\"setup\");if(me(),se(),r(p))t.render=p;else if(a(p))if(e._setupState=p,p.__sfc){var M=e._setupProxy={};for(var b in p)\"__sfc\"!==b&&je(M,p,b)}else for(var b in p)G(b)||je(e,p,b)}}(e),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]=\"function\"!=typeof t[n]?X:T(t[n],e)}(e,t.methods),t.data)!function(e){var t=e.$options.data;t=e._data=r(t)?function(e,t){Re();try{return e.call(t,t)}catch(e){return nn(e,t,\"data()\"),{}}finally{me()}}(t,e):t||{},O(t)||(t={});var n=Object.keys(t),o=e.$options.props,p=(e.$options.methods,n.length);for(;p--;){var M=n[p];0,o&&R(o,M)||G(M)||mn(e,\"_data\",M)}var b=Ce(t);b&&b.vmCount++}(e);else{var n=Ce(e._data={});n&&n.vmCount++}t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),o=ce();for(var p in t){var M=t[p],b=r(M)?M:M.get;0,o||(n[p]=new vn(e,b||X,X,Ln)),p in e||_n(e,p,M)}}(e,t.computed),t.watch&&t.watch!==pe&&function(e,t){for(var n in t){var o=t[n];if(p(o))for(var M=0;M<o.length;M++)Tn(e,n,o[M]);else Tn(e,n,o)}}(e,t.watch)}var Ln={lazy:!0};function _n(e,t,n){var o=!ce();r(n)?(Rn.get=o?Nn(t):yn(n),Rn.set=X):(Rn.get=n.get?o&&!1!==n.cache?Nn(t):yn(n.get):X,Rn.set=n.set||X),Object.defineProperty(e,t,Rn)}function Nn(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),he.target&&t.depend(),t.value}}function yn(e){return function(){return e.call(this,this)}}function Tn(e,t,n,o){return O(n)&&(o=n,n=n.handler),\"string\"==typeof n&&(n=e[n]),e.$watch(t,n,o)}function En(e,t){if(e){for(var n=Object.create(null),o=ie?Reflect.ownKeys(e):Object.keys(e),p=0;p<o.length;p++){var M=o[p];if(\"__ob__\"!==M){var b=e[M].from;if(b in t._provided)n[M]=t._provided[b];else if(\"default\"in e[M]){var c=e[M].default;n[M]=r(c)?c.call(t):c}else 0}}return n}}var Bn=0;function Cn(e){var t=e.options;if(e.super){var n=Cn(e.super);if(n!==e.superOptions){e.superOptions=n;var o=function(e){var t,n=e.options,o=e.sealedOptions;for(var p in n)n[p]!==o[p]&&(t||(t={}),t[p]=n[p]);return t}(e);o&&B(e.extendOptions,o),(t=e.options=Yn(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function Xn(e,t,n,M,b){var z,r=this,a=b.options;R(M,\"_uid\")?(z=Object.create(M))._original=M:(z=M,M=M._original);var i=c(a._compiled),O=!i;this.data=e,this.props=t,this.children=n,this.parent=M,this.listeners=e.on||o,this.injections=En(a.inject,M),this.slots=function(){return r.$slots||qt(M,e.scopedSlots,r.$slots=dt(n,M)),r.$slots},Object.defineProperty(this,\"scopedSlots\",{enumerable:!0,get:function(){return qt(M,e.scopedSlots,this.slots())}}),i&&(this.$options=a,this.$slots=this.slots(),this.$scopedSlots=qt(M,e.scopedSlots,this.$slots)),a._scopeId?this._c=function(e,t,n,o){var b=Je(z,e,t,n,o,O);return b&&!p(b)&&(b.fnScopeId=a._scopeId,b.fnContext=M),b}:this._c=function(e,t,n,o){return Je(z,e,t,n,o,O)}}function wn(e,t,n,o,p){var M=le(e);return M.fnContext=n,M.fnOptions=o,t.slot&&((M.data||(M.data={})).slot=t.slot),M}function Sn(e,t){for(var n in t)e[L(n)]=t[n]}function xn(e){return e.name||e.__name||e._componentTag}ut(Xn.prototype);var kn={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var n=e;kn.prepatch(n,n)}else{var o=e.componentInstance=function(e,t){var n={_isComponent:!0,_parentVnode:e,parent:t},o=e.data.inlineTemplate;b(o)&&(n.render=o.render,n.staticRenderFns=o.staticRenderFns);return new e.componentOptions.Ctor(n)}(e,Xt);o.$mount(t?e.elm:void 0,t)}},prepatch:function(e,t){var n=t.componentOptions;!function(e,t,n,p,M){var b=p.data.scopedSlots,c=e.$scopedSlots,z=!!(b&&!b.$stable||c!==o&&!c.$stable||b&&e.$scopedSlots.$key!==b.$key||!b&&e.$scopedSlots.$key),r=!!(M||e.$options._renderChildren||z),a=e.$vnode;e.$options._parentVnode=p,e.$vnode=p,e._vnode&&(e._vnode.parent=p),e.$options._renderChildren=M;var i=p.data.attrs||o;e._attrsProxy&&Rt(e._attrsProxy,i,a.data&&a.data.attrs||o,e,\"$attrs\")&&(r=!0),e.$attrs=i,n=n||o;var O=e.$options._parentListeners;if(e._listenersProxy&&Rt(e._listenersProxy,n,O||o,e,\"$listeners\"),e.$listeners=e.$options._parentListeners=n,Ct(e,n,O),t&&e.$options.props){Te(!1);for(var s=e._props,A=e.$options._propKeys||[],u=0;u<A.length;u++){var d=A[u],l=e.$options.props;s[d]=Zn(d,l,t,e)}Te(!0),e.$options.propsData=t}r&&(e.$slots=dt(M,p.context),e.$forceUpdate())}(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){var t,n=e.context,o=e.componentInstance;o._isMounted||(o._isMounted=!0,It(o,\"mounted\")),e.data.keepAlive&&(n._isMounted?((t=o)._inactive=!1,Pt.push(t)):xt(o,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?kt(t,!0):t.$destroy())}},In=Object.keys(kn);function Dn(e,t,n,z,r){if(!M(e)){var i=n.$options._base;if(a(e)&&(e=i.extend(e)),\"function\"==typeof e){var O;if(M(e.cid)&&(e=function(e,t){if(c(e.error)&&b(e.errorComp))return e.errorComp;if(b(e.resolved))return e.resolved;var n=_t;if(n&&b(e.owners)&&-1===e.owners.indexOf(n)&&e.owners.push(n),c(e.loading)&&b(e.loadingComp))return e.loadingComp;if(n&&!b(e.owners)){var o=e.owners=[n],p=!0,z=null,r=null;n.$on(\"hook:destroyed\",(function(){return h(o,n)}));var i=function(e){for(var t=0,n=o.length;t<n;t++)o[t].$forceUpdate();e&&(o.length=0,null!==z&&(clearTimeout(z),z=null),null!==r&&(clearTimeout(r),r=null))},O=I((function(n){e.resolved=Nt(n,t),p?o.length=0:i(!0)})),s=I((function(t){b(e.errorComp)&&(e.error=!0,i(!0))})),A=e(O,s);return a(A)&&(u(A)?M(e.resolved)&&A.then(O,s):u(A.component)&&(A.component.then(O,s),b(A.error)&&(e.errorComp=Nt(A.error,t)),b(A.loading)&&(e.loadingComp=Nt(A.loading,t),0===A.delay?e.loading=!0:z=setTimeout((function(){z=null,M(e.resolved)&&M(e.error)&&(e.loading=!0,i(!1))}),A.delay||200)),b(A.timeout)&&(r=setTimeout((function(){r=null,M(e.resolved)&&s(null)}),A.timeout)))),p=!1,e.loading?e.loadingComp:e.resolved}}(O=e,i),void 0===e))return function(e,t,n,o,p){var M=ue();return M.asyncFactory=e,M.asyncMeta={data:t,context:n,children:o,tag:p},M}(O,t,n,z,r);t=t||{},Cn(e),b(t.model)&&function(e,t){var n=e.model&&e.model.prop||\"value\",o=e.model&&e.model.event||\"input\";(t.attrs||(t.attrs={}))[n]=t.model.value;var M=t.on||(t.on={}),c=M[o],z=t.model.callback;b(c)?(p(c)?-1===c.indexOf(z):c!==z)&&(M[o]=[z].concat(c)):M[o]=z}(e.options,t);var s=function(e,t,n){var o=t.options.props;if(!M(o)){var p={},c=e.attrs,z=e.props;if(b(c)||b(z))for(var r in o){var a=y(r);$e(p,z,r,a,!0)||$e(p,c,r,a,!1)}return p}}(t,e);if(c(e.options.functional))return function(e,t,n,M,c){var z=e.options,r={},a=z.props;if(b(a))for(var i in a)r[i]=Zn(i,a,t||o);else b(n.attrs)&&Sn(r,n.attrs),b(n.props)&&Sn(r,n.props);var O=new Xn(n,r,c,M,e),s=z.render.call(null,O._c,O);if(s instanceof Ae)return wn(s,n,O.parent,z);if(p(s)){for(var A=Ve(s)||[],u=new Array(A.length),d=0;d<A.length;d++)u[d]=wn(A[d],n,O.parent,z);return u}}(e,s,t,n,z);var A=t.on;if(t.on=t.nativeOn,c(e.options.abstract)){var d=t.slot;t={},d&&(t.slot=d)}!function(e){for(var t=e.hook||(e.hook={}),n=0;n<In.length;n++){var o=In[n],p=t[o],M=kn[o];p===M||p&&p._merged||(t[o]=p?Pn(M,p):M)}}(t);var l=xn(e.options)||r;return new Ae(\"vue-component-\".concat(e.cid).concat(l?\"-\".concat(l):\"\"),t,void 0,void 0,void 0,n,{Ctor:e,propsData:s,listeners:A,tag:r,children:z},O)}}}function Pn(e,t){var n=function(n,o){e(n,o),t(n,o)};return n._merged=!0,n}var jn=X,Un=H.optionMergeStrategies;function Hn(e,t,n){if(void 0===n&&(n=!0),!t)return e;for(var o,p,M,b=ie?Reflect.ownKeys(t):Object.keys(t),c=0;c<b.length;c++)\"__ob__\"!==(o=b[c])&&(p=e[o],M=t[o],n&&R(e,o)?p!==M&&O(p)&&O(M)&&Hn(p,M):we(e,o,M));return e}function Fn(e,t,n){return n?function(){var o=r(t)?t.call(n,n):t,p=r(e)?e.call(n,n):e;return o?Hn(o,p):p}:t?e?function(){return Hn(r(t)?t.call(this,this):t,r(e)?e.call(this,this):e)}:t:e}function Gn(e,t){var n=t?e?e.concat(t):p(t)?t:[t]:e;return n?function(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}function $n(e,t,n,o){var p=Object.create(e||null);return t?B(p,t):p}Un.data=function(e,t,n){return n?Fn(e,t,n):t&&\"function\"!=typeof t?e:Fn(e,t)},U.forEach((function(e){Un[e]=Gn})),j.forEach((function(e){Un[e+\"s\"]=$n})),Un.watch=function(e,t,n,o){if(e===pe&&(e=void 0),t===pe&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var M={};for(var b in B(M,e),t){var c=M[b],z=t[b];c&&!p(c)&&(c=[c]),M[b]=c?c.concat(z):p(z)?z:[z]}return M},Un.props=Un.methods=Un.inject=Un.computed=function(e,t,n,o){if(!e)return t;var p=Object.create(null);return B(p,e),t&&B(p,t),p},Un.provide=function(e,t){return e?function(){var n=Object.create(null);return Hn(n,r(e)?e.call(this):e),t&&Hn(n,r(t)?t.call(this):t,!1),n}:t};var Vn=function(e,t){return void 0===t?e:t};function Yn(e,t,n){if(r(t)&&(t=t.options),function(e,t){var n=e.props;if(n){var o,M,b={};if(p(n))for(o=n.length;o--;)\"string\"==typeof(M=n[o])&&(b[L(M)]={type:null});else if(O(n))for(var c in n)M=n[c],b[L(c)]=O(M)?M:{type:M};e.props=b}}(t),function(e,t){var n=e.inject;if(n){var o=e.inject={};if(p(n))for(var M=0;M<n.length;M++)o[n[M]]={from:n[M]};else if(O(n))for(var b in n){var c=n[b];o[b]=O(c)?B({from:b},c):{from:c}}}}(t),function(e){var t=e.directives;if(t)for(var n in t){var o=t[n];r(o)&&(t[n]={bind:o,update:o})}}(t),!t._base&&(t.extends&&(e=Yn(e,t.extends,n)),t.mixins))for(var o=0,M=t.mixins.length;o<M;o++)e=Yn(e,t.mixins[o],n);var b,c={};for(b in e)z(b);for(b in t)R(e,b)||z(b);function z(o){var p=Un[o]||Vn;c[o]=p(e[o],t[o],n,o)}return c}function Kn(e,t,n,o){if(\"string\"==typeof n){var p=e[t];if(R(p,n))return p[n];var M=L(n);if(R(p,M))return p[M];var b=_(M);return R(p,b)?p[b]:p[n]||p[M]||p[b]}}function Zn(e,t,n,o){var p=t[e],M=!R(n,e),b=n[e],c=to(Boolean,p.type);if(c>-1)if(M&&!R(p,\"default\"))b=!1;else if(\"\"===b||b===y(e)){var z=to(String,p.type);(z<0||c<z)&&(b=!0)}if(void 0===b){b=function(e,t,n){if(!R(t,\"default\"))return;var o=t.default;0;if(e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n])return e._props[n];return r(o)&&\"Function\"!==Jn(t.type)?o.call(e):o}(o,p,e);var a=ye;Te(!0),Ce(b),Te(a)}return b}var Qn=/^\\s*function (\\w+)/;function Jn(e){var t=e&&e.toString().match(Qn);return t?t[1]:\"\"}function eo(e,t){return Jn(e)===Jn(t)}function to(e,t){if(!p(t))return eo(t,e)?0:-1;for(var n=0,o=t.length;n<o;n++)if(eo(t[n],e))return n;return-1}function no(e){this._init(e)}function oo(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,o=n.cid,p=e._Ctor||(e._Ctor={});if(p[o])return p[o];var M=xn(e)||xn(n.options);var b=function(e){this._init(e)};return(b.prototype=Object.create(n.prototype)).constructor=b,b.cid=t++,b.options=Yn(n.options,e),b.super=n,b.options.props&&function(e){var t=e.options.props;for(var n in t)mn(e.prototype,\"_props\",n)}(b),b.options.computed&&function(e){var t=e.options.computed;for(var n in t)_n(e.prototype,n,t[n])}(b),b.extend=n.extend,b.mixin=n.mixin,b.use=n.use,j.forEach((function(e){b[e]=n[e]})),M&&(b.options.components[M]=b),b.superOptions=n.options,b.extendOptions=e,b.sealedOptions=B({},b.options),p[o]=b,b}}function po(e){return e&&(xn(e.Ctor.options)||e.tag)}function Mo(e,t){return p(e)?e.indexOf(t)>-1:\"string\"==typeof e?e.split(\",\").indexOf(t)>-1:!!s(e)&&e.test(t)}function bo(e,t){var n=e.cache,o=e.keys,p=e._vnode;for(var M in n){var b=n[M];if(b){var c=b.name;c&&!t(c)&&co(n,M,o,p)}}}function co(e,t,n,o){var p=e[t];!p||o&&p.tag===o.tag||p.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(e){e.prototype._init=function(e){var t=this;t._uid=Bn++,t._isVue=!0,t.__v_skip=!0,t._scope=new en(!0),t._scope._vm=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),o=t._parentVnode;n.parent=t.parent,n._parentVnode=o;var p=o.componentOptions;n.propsData=p.propsData,n._parentListeners=p.listeners,n._renderChildren=p.children,n._componentTag=p.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=Yn(Cn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._provided=n?n._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Ct(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,p=n&&n.context;e.$slots=dt(t._renderChildren,p),e.$scopedSlots=n?qt(e.$parent,n.data.scopedSlots,e.$slots):o,e._c=function(t,n,o,p){return Je(e,t,n,o,p,!1)},e.$createElement=function(t,n,o,p){return Je(e,t,n,o,p,!0)};var M=n&&n.data;Xe(e,\"$attrs\",M&&M.attrs||o,null,!0),Xe(e,\"$listeners\",t._parentListeners||o,null,!0)}(t),It(t,\"beforeCreate\",void 0,!1),function(e){var t=En(e.$options.inject,e);t&&(Te(!1),Object.keys(t).forEach((function(n){Xe(e,n,t[n])})),Te(!0))}(t),gn(t),function(e){var t=e.$options.provide;if(t){var n=r(t)?t.call(e):t;if(!a(n))return;for(var o=tn(e),p=ie?Reflect.ownKeys(n):Object.keys(n),M=0;M<p.length;M++){var b=p[M];Object.defineProperty(o,b,Object.getOwnPropertyDescriptor(n,b))}}}(t),It(t,\"created\"),t.$options.el&&t.$mount(t.$options.el)}}(no),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,\"$data\",t),Object.defineProperty(e.prototype,\"$props\",n),e.prototype.$set=we,e.prototype.$delete=Se,e.prototype.$watch=function(e,t,n){var o=this;if(O(t))return Tn(o,e,t,n);(n=n||{}).user=!0;var p=new vn(o,e,t,n);if(n.immediate){var M='callback for immediate watcher \"'.concat(p.expression,'\"');Re(),on(t,o,[p.value],o,M),me()}return function(){p.teardown()}}}(no),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var o=this;if(p(e))for(var M=0,b=e.length;M<b;M++)o.$on(e[M],n);else(o._events[e]||(o._events[e]=[])).push(n),t.test(e)&&(o._hasHookEvent=!0);return o},e.prototype.$once=function(e,t){var n=this;function o(){n.$off(e,o),t.apply(n,arguments)}return o.fn=t,n.$on(e,o),n},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(p(e)){for(var o=0,M=e.length;o<M;o++)n.$off(e[o],t);return n}var b,c=n._events[e];if(!c)return n;if(!t)return n._events[e]=null,n;for(var z=c.length;z--;)if((b=c[z])===t||b.fn===t){c.splice(z,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?E(n):n;for(var o=E(arguments,1),p='event handler for \"'.concat(e,'\"'),M=0,b=n.length;M<b;M++)on(n[M],t,o,t,p)}return t}}(no),function(e){e.prototype._update=function(e,t){var n=this,o=n.$el,p=n._vnode,M=wt(n);n._vnode=e,n.$el=p?n.__patch__(p,e):n.__patch__(n.$el,e,t,!1),M(),o&&(o.__vue__=null),n.$el&&(n.$el.__vue__=n);for(var b=n;b&&b.$vnode&&b.$parent&&b.$vnode===b.$parent._vnode;)b.$parent.$el=b.$el,b=b.$parent},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){It(e,\"beforeDestroy\"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||h(t.$children,e),e._scope.stop(),e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),It(e,\"destroyed\"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(no),function(e){ut(e.prototype),e.prototype.$nextTick=function(e){return dn(e,this)},e.prototype._render=function(){var e,t=this,n=t.$options,o=n.render,M=n._parentVnode;M&&t._isMounted&&(t.$scopedSlots=qt(t.$parent,M.data.scopedSlots,t.$slots,t.$scopedSlots),t._slotsProxy&&gt(t._slotsProxy,t.$scopedSlots)),t.$vnode=M;try{se(t),_t=t,e=o.call(t._renderProxy,t.$createElement)}catch(n){nn(n,t,\"render\"),e=t._vnode}finally{_t=null,se()}return p(e)&&1===e.length&&(e=e[0]),e instanceof Ae||(e=ue()),e.parent=M,e}}(no);var zo=[String,RegExp,Array],ro={name:\"keep-alive\",abstract:!0,props:{include:zo,exclude:zo,max:[String,Number]},methods:{cacheVNode:function(){var e=this,t=e.cache,n=e.keys,o=e.vnodeToCache,p=e.keyToCache;if(o){var M=o.tag,b=o.componentInstance,c=o.componentOptions;t[p]={name:po(c),tag:M,componentInstance:b},n.push(p),this.max&&n.length>parseInt(this.max)&&co(t,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)co(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch(\"include\",(function(t){bo(e,(function(e){return Mo(t,e)}))})),this.$watch(\"exclude\",(function(t){bo(e,(function(e){return!Mo(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=yt(e),n=t&&t.componentOptions;if(n){var o=po(n),p=this.include,M=this.exclude;if(p&&(!o||!Mo(p,o))||M&&o&&Mo(M,o))return t;var b=this.cache,c=this.keys,z=null==t.key?n.Ctor.cid+(n.tag?\"::\".concat(n.tag):\"\"):t.key;b[z]?(t.componentInstance=b[z].componentInstance,h(c,z),c.push(z)):(this.vnodeToCache=t,this.keyToCache=z),t.data.keepAlive=!0}return t||e&&e[0]}},ao={KeepAlive:ro};!function(e){var t={get:function(){return H}};Object.defineProperty(e,\"config\",t),e.util={warn:jn,extend:B,mergeOptions:Yn,defineReactive:Xe},e.set=we,e.delete=Se,e.nextTick=dn,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),j.forEach((function(t){e.options[t+\"s\"]=Object.create(null)})),e.options._base=e,B(e.options.components,ao),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=E(arguments,1);return n.unshift(this),r(e.install)?e.install.apply(e,n):r(e)&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=Yn(this.options,e),this}}(e),oo(e),function(e){j.forEach((function(t){e[t]=function(e,n){return n?(\"component\"===t&&O(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),\"directive\"===t&&r(n)&&(n={bind:n,update:n}),this.options[t+\"s\"][e]=n,n):this.options[t+\"s\"][e]}}))}(e)}(no),Object.defineProperty(no.prototype,\"$isServer\",{get:ce}),Object.defineProperty(no.prototype,\"$ssrContext\",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(no,\"FunctionalRenderContext\",{value:Xn}),no.version=\"2.7.14\";var io=f(\"style,class\"),Oo=f(\"input,textarea,option,select,progress\"),so=function(e,t,n){return\"value\"===n&&Oo(e)&&\"button\"!==t||\"selected\"===n&&\"option\"===e||\"checked\"===n&&\"input\"===e||\"muted\"===n&&\"video\"===e},Ao=f(\"contenteditable,draggable,spellcheck\"),uo=f(\"events,caret,typing,plaintext-only\"),lo=function(e,t){return vo(t)||\"false\"===t?\"false\":\"contenteditable\"===e&&uo(t)?t:\"true\"},fo=f(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible\"),qo=\"http://www.w3.org/1999/xlink\",Wo=function(e){return\":\"===e.charAt(5)&&\"xlink\"===e.slice(0,5)},ho=function(e){return Wo(e)?e.slice(6,e.length):\"\"},vo=function(e){return null==e||!1===e};function Ro(e){for(var t=e.data,n=e,o=e;b(o.componentInstance);)(o=o.componentInstance._vnode)&&o.data&&(t=mo(o.data,t));for(;b(n=n.parent);)n&&n.data&&(t=mo(t,n.data));return function(e,t){if(b(e)||b(t))return go(e,Lo(t));return\"\"}(t.staticClass,t.class)}function mo(e,t){return{staticClass:go(e.staticClass,t.staticClass),class:b(e.class)?[e.class,t.class]:t.class}}function go(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Lo(e){return Array.isArray(e)?function(e){for(var t,n=\"\",o=0,p=e.length;o<p;o++)b(t=Lo(e[o]))&&\"\"!==t&&(n&&(n+=\" \"),n+=t);return n}(e):a(e)?function(e){var t=\"\";for(var n in e)e[n]&&(t&&(t+=\" \"),t+=n);return t}(e):\"string\"==typeof e?e:\"\"}var _o={svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},No=f(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),yo=f(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),To=function(e){return No(e)||yo(e)};function Eo(e){return yo(e)?\"svg\":\"math\"===e?\"math\":void 0}var Bo=Object.create(null);var Co=f(\"text,number,password,search,email,tel,url\");function Xo(e){if(\"string\"==typeof e){var t=document.querySelector(e);return t||document.createElement(\"div\")}return e}var wo=Object.freeze({__proto__:null,createElement:function(e,t){var n=document.createElement(e);return\"select\"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute(\"multiple\",\"multiple\"),n},createElementNS:function(e,t){return document.createElementNS(_o[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,\"\")}}),So={create:function(e,t){xo(t)},update:function(e,t){e.data.ref!==t.data.ref&&(xo(e,!0),xo(t))},destroy:function(e){xo(e,!0)}};function xo(e,t){var n=e.data.ref;if(b(n)){var o=e.context,M=e.componentInstance||e.elm,c=t?null:M,z=t?void 0:M;if(r(n))on(n,o,[c],o,\"template ref function\");else{var a=e.data.refInFor,i=\"string\"==typeof n||\"number\"==typeof n,O=Pe(n),s=o.$refs;if(i||O)if(a){var A=i?s[n]:n.value;t?p(A)&&h(A,M):p(A)?A.includes(M)||A.push(M):i?(s[n]=[M],ko(o,n,s[n])):n.value=[M]}else if(i){if(t&&s[n]!==M)return;s[n]=z,ko(o,n,c)}else if(O){if(t&&n.value!==M)return;n.value=c}else 0}}}function ko(e,t,n){var o=e._setupState;o&&R(o,t)&&(Pe(o[t])?o[t].value=n:o[t]=n)}var Io=new Ae(\"\",{},[]),Do=[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"];function Po(e,t){return e.key===t.key&&e.asyncFactory===t.asyncFactory&&(e.tag===t.tag&&e.isComment===t.isComment&&b(e.data)===b(t.data)&&function(e,t){if(\"input\"!==e.tag)return!0;var n,o=b(n=e.data)&&b(n=n.attrs)&&n.type,p=b(n=t.data)&&b(n=n.attrs)&&n.type;return o===p||Co(o)&&Co(p)}(e,t)||c(e.isAsyncPlaceholder)&&M(t.asyncFactory.error))}function jo(e,t,n){var o,p,M={};for(o=t;o<=n;++o)b(p=e[o].key)&&(M[p]=o);return M}var Uo={create:Ho,update:Ho,destroy:function(e){Ho(e,Io)}};function Ho(e,t){(e.data.directives||t.data.directives)&&function(e,t){var n,o,p,M=e===Io,b=t===Io,c=Go(e.data.directives,e.context),z=Go(t.data.directives,t.context),r=[],a=[];for(n in z)o=c[n],p=z[n],o?(p.oldValue=o.value,p.oldArg=o.arg,Vo(p,\"update\",t,e),p.def&&p.def.componentUpdated&&a.push(p)):(Vo(p,\"bind\",t,e),p.def&&p.def.inserted&&r.push(p));if(r.length){var i=function(){for(var n=0;n<r.length;n++)Vo(r[n],\"inserted\",t,e)};M?Ge(t,\"insert\",i):i()}a.length&&Ge(t,\"postpatch\",(function(){for(var n=0;n<a.length;n++)Vo(a[n],\"componentUpdated\",t,e)}));if(!M)for(n in c)z[n]||Vo(c[n],\"unbind\",e,e,b)}(e,t)}var Fo=Object.create(null);function Go(e,t){var n,o,p=Object.create(null);if(!e)return p;for(n=0;n<e.length;n++){if((o=e[n]).modifiers||(o.modifiers=Fo),p[$o(o)]=o,t._setupState&&t._setupState.__sfc){var M=o.def||Kn(t,\"_setupState\",\"v-\"+o.name);o.def=\"function\"==typeof M?{bind:M,update:M}:M}o.def=o.def||Kn(t.$options,\"directives\",o.name)}return p}function $o(e){return e.rawName||\"\".concat(e.name,\".\").concat(Object.keys(e.modifiers||{}).join(\".\"))}function Vo(e,t,n,o,p){var M=e.def&&e.def[t];if(M)try{M(n.elm,e,n,o,p)}catch(o){nn(o,n.context,\"directive \".concat(e.name,\" \").concat(t,\" hook\"))}}var Yo=[So,Uo];function Ko(e,t){var n=t.componentOptions;if(!(b(n)&&!1===n.Ctor.options.inheritAttrs||M(e.data.attrs)&&M(t.data.attrs))){var o,p,z=t.elm,r=e.data.attrs||{},a=t.data.attrs||{};for(o in(b(a.__ob__)||c(a._v_attr_proxy))&&(a=t.data.attrs=B({},a)),a)p=a[o],r[o]!==p&&Zo(z,o,p,t.data.pre);for(o in(Q||ee)&&a.value!==r.value&&Zo(z,\"value\",a.value),r)M(a[o])&&(Wo(o)?z.removeAttributeNS(qo,ho(o)):Ao(o)||z.removeAttribute(o))}}function Zo(e,t,n,o){o||e.tagName.indexOf(\"-\")>-1?Qo(e,t,n):fo(t)?vo(n)?e.removeAttribute(t):(n=\"allowfullscreen\"===t&&\"EMBED\"===e.tagName?\"true\":t,e.setAttribute(t,n)):Ao(t)?e.setAttribute(t,lo(t,n)):Wo(t)?vo(n)?e.removeAttributeNS(qo,ho(t)):e.setAttributeNS(qo,t,n):Qo(e,t,n)}function Qo(e,t,n){if(vo(n))e.removeAttribute(t);else{if(Q&&!J&&\"TEXTAREA\"===e.tagName&&\"placeholder\"===t&&\"\"!==n&&!e.__ieph){var o=function(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",o)};e.addEventListener(\"input\",o),e.__ieph=!0}e.setAttribute(t,n)}}var Jo={create:Ko,update:Ko};function ep(e,t){var n=t.elm,o=t.data,p=e.data;if(!(M(o.staticClass)&&M(o.class)&&(M(p)||M(p.staticClass)&&M(p.class)))){var c=Ro(t),z=n._transitionClasses;b(z)&&(c=go(c,Lo(z))),c!==n._prevClass&&(n.setAttribute(\"class\",c),n._prevClass=c)}}var tp,np,op,pp,Mp,bp,cp={create:ep,update:ep},zp=/[\\w).+\\-_$\\]]/;function rp(e){var t,n,o,p,M,b=!1,c=!1,z=!1,r=!1,a=0,i=0,O=0,s=0;for(o=0;o<e.length;o++)if(n=t,t=e.charCodeAt(o),b)39===t&&92!==n&&(b=!1);else if(c)34===t&&92!==n&&(c=!1);else if(z)96===t&&92!==n&&(z=!1);else if(r)47===t&&92!==n&&(r=!1);else if(124!==t||124===e.charCodeAt(o+1)||124===e.charCodeAt(o-1)||a||i||O){switch(t){case 34:c=!0;break;case 39:b=!0;break;case 96:z=!0;break;case 40:O++;break;case 41:O--;break;case 91:i++;break;case 93:i--;break;case 123:a++;break;case 125:a--}if(47===t){for(var A=o-1,u=void 0;A>=0&&\" \"===(u=e.charAt(A));A--);u&&zp.test(u)||(r=!0)}}else void 0===p?(s=o+1,p=e.slice(0,o).trim()):d();function d(){(M||(M=[])).push(e.slice(s,o).trim()),s=o+1}if(void 0===p?p=e.slice(0,o).trim():0!==s&&d(),M)for(o=0;o<M.length;o++)p=ap(p,M[o]);return p}function ap(e,t){var n=t.indexOf(\"(\");if(n<0)return'_f(\"'.concat(t,'\")(').concat(e,\")\");var o=t.slice(0,n),p=t.slice(n+1);return'_f(\"'.concat(o,'\")(').concat(e).concat(\")\"!==p?\",\"+p:p)}function ip(e,t){}function Op(e,t){return e?e.map((function(e){return e[t]})).filter((function(e){return e})):[]}function sp(e,t,n,o,p){(e.props||(e.props=[])).push(vp({name:t,value:n,dynamic:p},o)),e.plain=!1}function Ap(e,t,n,o,p){(p?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(vp({name:t,value:n,dynamic:p},o)),e.plain=!1}function up(e,t,n,o){e.attrsMap[t]=n,e.attrsList.push(vp({name:t,value:n},o))}function dp(e,t,n,o,p,M,b,c){(e.directives||(e.directives=[])).push(vp({name:t,rawName:n,value:o,arg:p,isDynamicArg:M,modifiers:b},c)),e.plain=!1}function lp(e,t,n){return n?\"_p(\".concat(t,',\"').concat(e,'\")'):e+t}function fp(e,t,n,p,M,b,c,z){var r;(p=p||o).right?z?t=\"(\".concat(t,\")==='click'?'contextmenu':(\").concat(t,\")\"):\"click\"===t&&(t=\"contextmenu\",delete p.right):p.middle&&(z?t=\"(\".concat(t,\")==='click'?'mouseup':(\").concat(t,\")\"):\"click\"===t&&(t=\"mouseup\")),p.capture&&(delete p.capture,t=lp(\"!\",t,z)),p.once&&(delete p.once,t=lp(\"~\",t,z)),p.passive&&(delete p.passive,t=lp(\"&\",t,z)),p.native?(delete p.native,r=e.nativeEvents||(e.nativeEvents={})):r=e.events||(e.events={});var a=vp({value:n.trim(),dynamic:z},c);p!==o&&(a.modifiers=p);var i=r[t];Array.isArray(i)?M?i.unshift(a):i.push(a):r[t]=i?M?[a,i]:[i,a]:a,e.plain=!1}function qp(e,t,n){var o=Wp(e,\":\"+t)||Wp(e,\"v-bind:\"+t);if(null!=o)return rp(o);if(!1!==n){var p=Wp(e,t);if(null!=p)return JSON.stringify(p)}}function Wp(e,t,n){var o;if(null!=(o=e.attrsMap[t]))for(var p=e.attrsList,M=0,b=p.length;M<b;M++)if(p[M].name===t){p.splice(M,1);break}return n&&delete e.attrsMap[t],o}function hp(e,t){for(var n=e.attrsList,o=0,p=n.length;o<p;o++){var M=n[o];if(t.test(M.name))return n.splice(o,1),M}}function vp(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function Rp(e,t,n){var o=n||{},p=o.number,M=\"$$v\",b=M;o.trim&&(b=\"(typeof \".concat(M,\" === 'string'\")+\"? \".concat(M,\".trim()\")+\": \".concat(M,\")\")),p&&(b=\"_n(\".concat(b,\")\"));var c=mp(t,b);e.model={value:\"(\".concat(t,\")\"),expression:JSON.stringify(t),callback:\"function (\".concat(M,\") {\").concat(c,\"}\")}}function mp(e,t){var n=function(e){if(e=e.trim(),tp=e.length,e.indexOf(\"[\")<0||e.lastIndexOf(\"]\")<tp-1)return(pp=e.lastIndexOf(\".\"))>-1?{exp:e.slice(0,pp),key:'\"'+e.slice(pp+1)+'\"'}:{exp:e,key:null};np=e,pp=Mp=bp=0;for(;!Lp();)_p(op=gp())?yp(op):91===op&&Np(op);return{exp:e.slice(0,Mp),key:e.slice(Mp+1,bp)}}(e);return null===n.key?\"\".concat(e,\"=\").concat(t):\"$set(\".concat(n.exp,\", \").concat(n.key,\", \").concat(t,\")\")}function gp(){return np.charCodeAt(++pp)}function Lp(){return pp>=tp}function _p(e){return 34===e||39===e}function Np(e){var t=1;for(Mp=pp;!Lp();)if(_p(e=gp()))yp(e);else if(91===e&&t++,93===e&&t--,0===t){bp=pp;break}}function yp(e){for(var t=e;!Lp()&&(e=gp())!==t;);}var Tp,Ep=\"__r\",Bp=\"__c\";function Cp(e,t,n){var o=Tp;return function p(){null!==t.apply(null,arguments)&&Sp(e,p,n,o)}}var Xp=cn&&!(oe&&Number(oe[1])<=53);function wp(e,t,n,o){if(Xp){var p=Gt,M=t;t=M._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=p||e.timeStamp<=0||e.target.ownerDocument!==document)return M.apply(this,arguments)}}Tp.addEventListener(e,t,Me?{capture:n,passive:o}:n)}function Sp(e,t,n,o){(o||Tp).removeEventListener(e,t._wrapper||t,n)}function xp(e,t){if(!M(e.data.on)||!M(t.data.on)){var n=t.data.on||{},o=e.data.on||{};Tp=t.elm||e.elm,function(e){if(b(e[Ep])){var t=Q?\"change\":\"input\";e[t]=[].concat(e[Ep],e[t]||[]),delete e[Ep]}b(e[Bp])&&(e.change=[].concat(e[Bp],e.change||[]),delete e[Bp])}(n),Fe(n,o,wp,Sp,Cp,t.context),Tp=void 0}}var kp,Ip={create:xp,update:xp,destroy:function(e){return xp(e,Io)}};function Dp(e,t){if(!M(e.data.domProps)||!M(t.data.domProps)){var n,o,p=t.elm,z=e.data.domProps||{},r=t.data.domProps||{};for(n in(b(r.__ob__)||c(r._v_attr_proxy))&&(r=t.data.domProps=B({},r)),z)n in r||(p[n]=\"\");for(n in r){if(o=r[n],\"textContent\"===n||\"innerHTML\"===n){if(t.children&&(t.children.length=0),o===z[n])continue;1===p.childNodes.length&&p.removeChild(p.childNodes[0])}if(\"value\"===n&&\"PROGRESS\"!==p.tagName){p._value=o;var a=M(o)?\"\":String(o);Pp(p,a)&&(p.value=a)}else if(\"innerHTML\"===n&&yo(p.tagName)&&M(p.innerHTML)){(kp=kp||document.createElement(\"div\")).innerHTML=\"<svg>\".concat(o,\"</svg>\");for(var i=kp.firstChild;p.firstChild;)p.removeChild(p.firstChild);for(;i.firstChild;)p.appendChild(i.firstChild)}else if(o!==z[n])try{p[n]=o}catch(e){}}}}function Pp(e,t){return!e.composing&&(\"OPTION\"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,o=e._vModifiers;if(b(o)){if(o.number)return l(n)!==l(t);if(o.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var jp={create:Dp,update:Dp},Up=m((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach((function(e){if(e){var o=e.split(n);o.length>1&&(t[o[0].trim()]=o[1].trim())}})),t}));function Hp(e){var t=Fp(e.style);return e.staticStyle?B(e.staticStyle,t):t}function Fp(e){return Array.isArray(e)?C(e):\"string\"==typeof e?Up(e):e}var Gp,$p=/^--/,Vp=/\\s*!important$/,Yp=function(e,t,n){if($p.test(t))e.style.setProperty(t,n);else if(Vp.test(n))e.style.setProperty(y(t),n.replace(Vp,\"\"),\"important\");else{var o=Zp(t);if(Array.isArray(n))for(var p=0,M=n.length;p<M;p++)e.style[o]=n[p];else e.style[o]=n}},Kp=[\"Webkit\",\"Moz\",\"ms\"],Zp=m((function(e){if(Gp=Gp||document.createElement(\"div\").style,\"filter\"!==(e=L(e))&&e in Gp)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<Kp.length;n++){var o=Kp[n]+t;if(o in Gp)return o}}));function Qp(e,t){var n=t.data,o=e.data;if(!(M(n.staticStyle)&&M(n.style)&&M(o.staticStyle)&&M(o.style))){var p,c,z=t.elm,r=o.staticStyle,a=o.normalizedStyle||o.style||{},i=r||a,O=Fp(t.data.style)||{};t.data.normalizedStyle=b(O.__ob__)?B({},O):O;var s=function(e,t){var n,o={};if(t)for(var p=e;p.componentInstance;)(p=p.componentInstance._vnode)&&p.data&&(n=Hp(p.data))&&B(o,n);(n=Hp(e.data))&&B(o,n);for(var M=e;M=M.parent;)M.data&&(n=Hp(M.data))&&B(o,n);return o}(t,!0);for(c in i)M(s[c])&&Yp(z,c,\"\");for(c in s)(p=s[c])!==i[c]&&Yp(z,c,null==p?\"\":p)}}var Jp={create:Qp,update:Qp},eM=/\\s+/;function tM(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(eM).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=\" \".concat(e.getAttribute(\"class\")||\"\",\" \");n.indexOf(\" \"+t+\" \")<0&&e.setAttribute(\"class\",(n+t).trim())}}function nM(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(eM).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n=\" \".concat(e.getAttribute(\"class\")||\"\",\" \"),o=\" \"+t+\" \";n.indexOf(o)>=0;)n=n.replace(o,\" \");(n=n.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function oM(e){if(e){if(\"object\"==typeof e){var t={};return!1!==e.css&&B(t,pM(e.name||\"v\")),B(t,e),t}return\"string\"==typeof e?pM(e):void 0}}var pM=m((function(e){return{enterClass:\"\".concat(e,\"-enter\"),enterToClass:\"\".concat(e,\"-enter-to\"),enterActiveClass:\"\".concat(e,\"-enter-active\"),leaveClass:\"\".concat(e,\"-leave\"),leaveToClass:\"\".concat(e,\"-leave-to\"),leaveActiveClass:\"\".concat(e,\"-leave-active\")}})),MM=K&&!J,bM=\"transition\",cM=\"animation\",zM=\"transition\",rM=\"transitionend\",aM=\"animation\",iM=\"animationend\";MM&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(zM=\"WebkitTransition\",rM=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(aM=\"WebkitAnimation\",iM=\"webkitAnimationEnd\"));var OM=K?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function sM(e){OM((function(){OM(e)}))}function AM(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),tM(e,t))}function uM(e,t){e._transitionClasses&&h(e._transitionClasses,t),nM(e,t)}function dM(e,t,n){var o=fM(e,t),p=o.type,M=o.timeout,b=o.propCount;if(!p)return n();var c=p===bM?rM:iM,z=0,r=function(){e.removeEventListener(c,a),n()},a=function(t){t.target===e&&++z>=b&&r()};setTimeout((function(){z<b&&r()}),M+1),e.addEventListener(c,a)}var lM=/\\b(transform|all)(,|$)/;function fM(e,t){var n,o=window.getComputedStyle(e),p=(o[zM+\"Delay\"]||\"\").split(\", \"),M=(o[zM+\"Duration\"]||\"\").split(\", \"),b=qM(p,M),c=(o[aM+\"Delay\"]||\"\").split(\", \"),z=(o[aM+\"Duration\"]||\"\").split(\", \"),r=qM(c,z),a=0,i=0;return t===bM?b>0&&(n=bM,a=b,i=M.length):t===cM?r>0&&(n=cM,a=r,i=z.length):i=(n=(a=Math.max(b,r))>0?b>r?bM:cM:null)?n===bM?M.length:z.length:0,{type:n,timeout:a,propCount:i,hasTransform:n===bM&&lM.test(o[zM+\"Property\"])}}function qM(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map((function(t,n){return WM(t)+WM(e[n])})))}function WM(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function hM(e,t){var n=e.elm;b(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var o=oM(e.data.transition);if(!M(o)&&!b(n._enterCb)&&1===n.nodeType){for(var p=o.css,c=o.type,z=o.enterClass,i=o.enterToClass,O=o.enterActiveClass,s=o.appearClass,A=o.appearToClass,u=o.appearActiveClass,d=o.beforeEnter,f=o.enter,q=o.afterEnter,W=o.enterCancelled,h=o.beforeAppear,v=o.appear,R=o.afterAppear,m=o.appearCancelled,g=o.duration,L=Xt,_=Xt.$vnode;_&&_.parent;)L=_.context,_=_.parent;var N=!L._isMounted||!e.isRootInsert;if(!N||v||\"\"===v){var y=N&&s?s:z,T=N&&u?u:O,E=N&&A?A:i,B=N&&h||d,C=N&&r(v)?v:f,X=N&&R||q,w=N&&m||W,S=l(a(g)?g.enter:g);0;var x=!1!==p&&!J,k=mM(C),D=n._enterCb=I((function(){x&&(uM(n,E),uM(n,T)),D.cancelled?(x&&uM(n,y),w&&w(n)):X&&X(n),n._enterCb=null}));e.data.show||Ge(e,\"insert\",(function(){var t=n.parentNode,o=t&&t._pending&&t._pending[e.key];o&&o.tag===e.tag&&o.elm._leaveCb&&o.elm._leaveCb(),C&&C(n,D)})),B&&B(n),x&&(AM(n,y),AM(n,T),sM((function(){uM(n,y),D.cancelled||(AM(n,E),k||(RM(S)?setTimeout(D,S):dM(n,c,D)))}))),e.data.show&&(t&&t(),C&&C(n,D)),x||k||D()}}}function vM(e,t){var n=e.elm;b(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var o=oM(e.data.transition);if(M(o)||1!==n.nodeType)return t();if(!b(n._leaveCb)){var p=o.css,c=o.type,z=o.leaveClass,r=o.leaveToClass,i=o.leaveActiveClass,O=o.beforeLeave,s=o.leave,A=o.afterLeave,u=o.leaveCancelled,d=o.delayLeave,f=o.duration,q=!1!==p&&!J,W=mM(s),h=l(a(f)?f.leave:f);0;var v=n._leaveCb=I((function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[e.key]=null),q&&(uM(n,r),uM(n,i)),v.cancelled?(q&&uM(n,z),u&&u(n)):(t(),A&&A(n)),n._leaveCb=null}));d?d(R):R()}function R(){v.cancelled||(!e.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[e.key]=e),O&&O(n),q&&(AM(n,z),AM(n,i),sM((function(){uM(n,z),v.cancelled||(AM(n,r),W||(RM(h)?setTimeout(v,h):dM(n,c,v)))}))),s&&s(n,v),q||W||v())}}function RM(e){return\"number\"==typeof e&&!isNaN(e)}function mM(e){if(M(e))return!1;var t=e.fns;return b(t)?mM(Array.isArray(t)?t[0]:t):(e._length||e.length)>1}function gM(e,t){!0!==t.data.show&&hM(t)}var LM=function(e){var t,n,o={},r=e.modules,a=e.nodeOps;for(t=0;t<Do.length;++t)for(o[Do[t]]=[],n=0;n<r.length;++n)b(r[n][Do[t]])&&o[Do[t]].push(r[n][Do[t]]);function i(e){var t=a.parentNode(e);b(t)&&a.removeChild(t,e)}function O(e,t,n,p,M,z,r){if(b(e.elm)&&b(z)&&(e=z[r]=le(e)),e.isRootInsert=!M,!function(e,t,n,p){var M=e.data;if(b(M)){var z=b(e.componentInstance)&&M.keepAlive;if(b(M=M.hook)&&b(M=M.init)&&M(e,!1),b(e.componentInstance))return s(e,t),A(n,e.elm,p),c(z)&&function(e,t,n,p){var M,c=e;for(;c.componentInstance;)if(b(M=(c=c.componentInstance._vnode).data)&&b(M=M.transition)){for(M=0;M<o.activate.length;++M)o.activate[M](Io,c);t.push(c);break}A(n,e.elm,p)}(e,t,n,p),!0}}(e,t,n,p)){var i=e.data,O=e.children,d=e.tag;b(d)?(e.elm=e.ns?a.createElementNS(e.ns,d):a.createElement(d,e),q(e),u(e,O,t),b(i)&&l(e,t),A(n,e.elm,p)):c(e.isComment)?(e.elm=a.createComment(e.text),A(n,e.elm,p)):(e.elm=a.createTextNode(e.text),A(n,e.elm,p))}}function s(e,t){b(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,d(e)?(l(e,t),q(e)):(xo(e),t.push(e))}function A(e,t,n){b(e)&&(b(n)?a.parentNode(n)===e&&a.insertBefore(e,t,n):a.appendChild(e,t))}function u(e,t,n){if(p(t)){0;for(var o=0;o<t.length;++o)O(t[o],n,e.elm,null,!0,t,o)}else z(e.text)&&a.appendChild(e.elm,a.createTextNode(String(e.text)))}function d(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return b(e.tag)}function l(e,n){for(var p=0;p<o.create.length;++p)o.create[p](Io,e);b(t=e.data.hook)&&(b(t.create)&&t.create(Io,e),b(t.insert)&&n.push(e))}function q(e){var t;if(b(t=e.fnScopeId))a.setStyleScope(e.elm,t);else for(var n=e;n;)b(t=n.context)&&b(t=t.$options._scopeId)&&a.setStyleScope(e.elm,t),n=n.parent;b(t=Xt)&&t!==e.context&&t!==e.fnContext&&b(t=t.$options._scopeId)&&a.setStyleScope(e.elm,t)}function W(e,t,n,o,p,M){for(;o<=p;++o)O(n[o],M,e,t,!1,n,o)}function h(e){var t,n,p=e.data;if(b(p))for(b(t=p.hook)&&b(t=t.destroy)&&t(e),t=0;t<o.destroy.length;++t)o.destroy[t](e);if(b(t=e.children))for(n=0;n<e.children.length;++n)h(e.children[n])}function v(e,t,n){for(;t<=n;++t){var o=e[t];b(o)&&(b(o.tag)?(R(o),h(o)):i(o.elm))}}function R(e,t){if(b(t)||b(e.data)){var n,p=o.remove.length+1;for(b(t)?t.listeners+=p:t=function(e,t){function n(){0==--n.listeners&&i(e)}return n.listeners=t,n}(e.elm,p),b(n=e.componentInstance)&&b(n=n._vnode)&&b(n.data)&&R(n,t),n=0;n<o.remove.length;++n)o.remove[n](e,t);b(n=e.data.hook)&&b(n=n.remove)?n(e,t):t()}else i(e.elm)}function m(e,t,n,o){for(var p=n;p<o;p++){var M=t[p];if(b(M)&&Po(e,M))return p}}function g(e,t,n,p,z,r){if(e!==t){b(t.elm)&&b(p)&&(t=p[z]=le(t));var i=t.elm=e.elm;if(c(e.isAsyncPlaceholder))b(t.asyncFactory.resolved)?N(e.elm,t,n):t.isAsyncPlaceholder=!0;else if(c(t.isStatic)&&c(e.isStatic)&&t.key===e.key&&(c(t.isCloned)||c(t.isOnce)))t.componentInstance=e.componentInstance;else{var s,A=t.data;b(A)&&b(s=A.hook)&&b(s=s.prepatch)&&s(e,t);var u=e.children,l=t.children;if(b(A)&&d(t)){for(s=0;s<o.update.length;++s)o.update[s](e,t);b(s=A.hook)&&b(s=s.update)&&s(e,t)}M(t.text)?b(u)&&b(l)?u!==l&&function(e,t,n,o,p){var c,z,r,i=0,s=0,A=t.length-1,u=t[0],d=t[A],l=n.length-1,f=n[0],q=n[l],h=!p;for(;i<=A&&s<=l;)M(u)?u=t[++i]:M(d)?d=t[--A]:Po(u,f)?(g(u,f,o,n,s),u=t[++i],f=n[++s]):Po(d,q)?(g(d,q,o,n,l),d=t[--A],q=n[--l]):Po(u,q)?(g(u,q,o,n,l),h&&a.insertBefore(e,u.elm,a.nextSibling(d.elm)),u=t[++i],q=n[--l]):Po(d,f)?(g(d,f,o,n,s),h&&a.insertBefore(e,d.elm,u.elm),d=t[--A],f=n[++s]):(M(c)&&(c=jo(t,i,A)),M(z=b(f.key)?c[f.key]:m(f,t,i,A))?O(f,o,e,u.elm,!1,n,s):Po(r=t[z],f)?(g(r,f,o,n,s),t[z]=void 0,h&&a.insertBefore(e,r.elm,u.elm)):O(f,o,e,u.elm,!1,n,s),f=n[++s]);i>A?W(e,M(n[l+1])?null:n[l+1].elm,n,s,l,o):s>l&&v(t,i,A)}(i,u,l,n,r):b(l)?(b(e.text)&&a.setTextContent(i,\"\"),W(i,null,l,0,l.length-1,n)):b(u)?v(u,0,u.length-1):b(e.text)&&a.setTextContent(i,\"\"):e.text!==t.text&&a.setTextContent(i,t.text),b(A)&&b(s=A.hook)&&b(s=s.postpatch)&&s(e,t)}}}function L(e,t,n){if(c(n)&&b(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o<t.length;++o)t[o].data.hook.insert(t[o])}var _=f(\"attrs,class,staticClass,staticStyle,key\");function N(e,t,n,o){var p,M=t.tag,z=t.data,r=t.children;if(o=o||z&&z.pre,t.elm=e,c(t.isComment)&&b(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(b(z)&&(b(p=z.hook)&&b(p=p.init)&&p(t,!0),b(p=t.componentInstance)))return s(t,n),!0;if(b(M)){if(b(r))if(e.hasChildNodes())if(b(p=z)&&b(p=p.domProps)&&b(p=p.innerHTML)){if(p!==e.innerHTML)return!1}else{for(var a=!0,i=e.firstChild,O=0;O<r.length;O++){if(!i||!N(i,r[O],n,o)){a=!1;break}i=i.nextSibling}if(!a||i)return!1}else u(t,r,n);if(b(z)){var A=!1;for(var d in z)if(!_(d)){A=!0,l(t,n);break}!A&&z.class&&qn(z.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,t,n,p){if(!M(t)){var z,r=!1,i=[];if(M(e))r=!0,O(t,i);else{var s=b(e.nodeType);if(!s&&Po(e,t))g(e,t,i,null,null,p);else{if(s){if(1===e.nodeType&&e.hasAttribute(P)&&(e.removeAttribute(P),n=!0),c(n)&&N(e,t,i))return L(t,i,!0),e;z=e,e=new Ae(a.tagName(z).toLowerCase(),{},[],void 0,z)}var A=e.elm,u=a.parentNode(A);if(O(t,i,A._leaveCb?null:u,a.nextSibling(A)),b(t.parent))for(var l=t.parent,f=d(t);l;){for(var q=0;q<o.destroy.length;++q)o.destroy[q](l);if(l.elm=t.elm,f){for(var W=0;W<o.create.length;++W)o.create[W](Io,l);var R=l.data.hook.insert;if(R.merged)for(var m=1;m<R.fns.length;m++)R.fns[m]()}else xo(l);l=l.parent}b(u)?v([e],0,0):b(e.tag)&&h(e)}}return L(t,i,r),t.elm}b(e)&&h(e)}}({nodeOps:wo,modules:[Jo,cp,Ip,jp,Jp,K?{create:gM,activate:gM,remove:function(e,t){!0!==e.data.show?vM(e,t):t()}}:{}].concat(Yo)});J&&document.addEventListener(\"selectionchange\",(function(){var e=document.activeElement;e&&e.vmodel&&XM(e,\"input\")}));var _M={inserted:function(e,t,n,o){\"select\"===n.tag?(o.elm&&!o.elm._vOptions?Ge(n,\"postpatch\",(function(){_M.componentUpdated(e,t,n)})):NM(e,t,n.context),e._vOptions=[].map.call(e.options,EM)):(\"textarea\"===n.tag||Co(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener(\"compositionstart\",BM),e.addEventListener(\"compositionend\",CM),e.addEventListener(\"change\",CM),J&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if(\"select\"===n.tag){NM(e,t,n.context);var o=e._vOptions,p=e._vOptions=[].map.call(e.options,EM);if(p.some((function(e,t){return!x(e,o[t])})))(e.multiple?t.value.some((function(e){return TM(e,p)})):t.value!==t.oldValue&&TM(t.value,p))&&XM(e,\"change\")}}};function NM(e,t,n){yM(e,t,n),(Q||ee)&&setTimeout((function(){yM(e,t,n)}),0)}function yM(e,t,n){var o=t.value,p=e.multiple;if(!p||Array.isArray(o)){for(var M,b,c=0,z=e.options.length;c<z;c++)if(b=e.options[c],p)M=k(o,EM(b))>-1,b.selected!==M&&(b.selected=M);else if(x(EM(b),o))return void(e.selectedIndex!==c&&(e.selectedIndex=c));p||(e.selectedIndex=-1)}}function TM(e,t){return t.every((function(t){return!x(t,e)}))}function EM(e){return\"_value\"in e?e._value:e.value}function BM(e){e.target.composing=!0}function CM(e){e.target.composing&&(e.target.composing=!1,XM(e.target,\"input\"))}function XM(e,t){var n=document.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function wM(e){return!e.componentInstance||e.data&&e.data.transition?e:wM(e.componentInstance._vnode)}var SM={bind:function(e,t,n){var o=t.value,p=(n=wM(n)).data&&n.data.transition,M=e.__vOriginalDisplay=\"none\"===e.style.display?\"\":e.style.display;o&&p?(n.data.show=!0,hM(n,(function(){e.style.display=M}))):e.style.display=o?M:\"none\"},update:function(e,t,n){var o=t.value;!o!=!t.oldValue&&((n=wM(n)).data&&n.data.transition?(n.data.show=!0,o?hM(n,(function(){e.style.display=e.__vOriginalDisplay})):vM(n,(function(){e.style.display=\"none\"}))):e.style.display=o?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,o,p){p||(e.style.display=e.__vOriginalDisplay)}},xM={model:_M,show:SM},kM={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function IM(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?IM(yt(t.children)):e}function DM(e){var t={},n=e.$options;for(var o in n.propsData)t[o]=e[o];var p=n._parentListeners;for(var o in p)t[L(o)]=p[o];return t}function PM(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var jM=function(e){return e.tag||ft(e)},UM=function(e){return\"show\"===e.name},HM={name:\"transition\",props:kM,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(jM)).length){0;var o=this.mode;0;var p=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return p;var M=IM(p);if(!M)return p;if(this._leaving)return PM(e,p);var b=\"__transition-\".concat(this._uid,\"-\");M.key=null==M.key?M.isComment?b+\"comment\":b+M.tag:z(M.key)?0===String(M.key).indexOf(b)?M.key:b+M.key:M.key;var c=(M.data||(M.data={})).transition=DM(this),r=this._vnode,a=IM(r);if(M.data.directives&&M.data.directives.some(UM)&&(M.data.show=!0),a&&a.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(M,a)&&!ft(a)&&(!a.componentInstance||!a.componentInstance._vnode.isComment)){var i=a.data.transition=B({},c);if(\"out-in\"===o)return this._leaving=!0,Ge(i,\"afterLeave\",(function(){t._leaving=!1,t.$forceUpdate()})),PM(e,p);if(\"in-out\"===o){if(ft(M))return r;var O,s=function(){O()};Ge(c,\"afterEnter\",s),Ge(c,\"enterCancelled\",s),Ge(i,\"delayLeave\",(function(e){O=e}))}}return p}}},FM=B({tag:String,moveClass:String},kM);delete FM.mode;var GM={props:FM,beforeMount:function(){var e=this,t=this._update;this._update=function(n,o){var p=wt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,p(),t.call(e,n,o)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),o=this.prevChildren=this.children,p=this.$slots.default||[],M=this.children=[],b=DM(this),c=0;c<p.length;c++){if((a=p[c]).tag)if(null!=a.key&&0!==String(a.key).indexOf(\"__vlist\"))M.push(a),n[a.key]=a,(a.data||(a.data={})).transition=b;else;}if(o){var z=[],r=[];for(c=0;c<o.length;c++){var a;(a=o[c]).data.transition=b,a.data.pos=a.elm.getBoundingClientRect(),n[a.key]?z.push(a):r.push(a)}this.kept=e(t,null,z),this.removed=r}return e(t,null,M)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||\"v\")+\"-move\";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach($M),e.forEach(VM),e.forEach(YM),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var n=e.elm,o=n.style;AM(n,t),o.transform=o.WebkitTransform=o.transitionDuration=\"\",n.addEventListener(rM,n._moveCb=function e(o){o&&o.target!==n||o&&!/transform$/.test(o.propertyName)||(n.removeEventListener(rM,e),n._moveCb=null,uM(n,t))})}})))},methods:{hasMove:function(e,t){if(!MM)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){nM(n,e)})),tM(n,t),n.style.display=\"none\",this.$el.appendChild(n);var o=fM(n);return this.$el.removeChild(n),this._hasMove=o.hasTransform}}};function $M(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function VM(e){e.data.newPos=e.elm.getBoundingClientRect()}function YM(e){var t=e.data.pos,n=e.data.newPos,o=t.left-n.left,p=t.top-n.top;if(o||p){e.data.moved=!0;var M=e.elm.style;M.transform=M.WebkitTransform=\"translate(\".concat(o,\"px,\").concat(p,\"px)\"),M.transitionDuration=\"0s\"}}var KM={Transition:HM,TransitionGroup:GM};no.config.mustUseProp=so,no.config.isReservedTag=To,no.config.isReservedAttr=io,no.config.getTagNamespace=Eo,no.config.isUnknownElement=function(e){if(!K)return!0;if(To(e))return!1;if(e=e.toLowerCase(),null!=Bo[e])return Bo[e];var t=document.createElement(e);return e.indexOf(\"-\")>-1?Bo[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Bo[e]=/HTMLUnknownElement/.test(t.toString())},B(no.options.directives,xM),B(no.options.components,KM),no.prototype.__patch__=K?LM:X,no.prototype.$mount=function(e,t){return function(e,t,n){var o;e.$el=t,e.$options.render||(e.$options.render=ue),It(e,\"beforeMount\"),o=function(){e._update(e._render(),n)},new vn(e,o,X,{before:function(){e._isMounted&&!e._isDestroyed&&It(e,\"beforeUpdate\")}},!0),n=!1;var p=e._preWatchers;if(p)for(var M=0;M<p.length;M++)p[M].run();return null==e.$vnode&&(e._isMounted=!0,It(e,\"mounted\")),e}(this,e=e&&K?Xo(e):void 0,t)},K&&setTimeout((function(){H.devtools&&ze&&ze.emit(\"init\",no)}),0);var ZM=/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,QM=/[-.*+?^${}()|[\\]\\/\\\\]/g,JM=m((function(e){var t=e[0].replace(QM,\"\\\\$&\"),n=e[1].replace(QM,\"\\\\$&\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")}));var eb={staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n=Wp(e,\"class\");n&&(e.staticClass=JSON.stringify(n.replace(/\\s+/g,\" \").trim()));var o=qp(e,\"class\",!1);o&&(e.classBinding=o)},genData:function(e){var t=\"\";return e.staticClass&&(t+=\"staticClass:\".concat(e.staticClass,\",\")),e.classBinding&&(t+=\"class:\".concat(e.classBinding,\",\")),t}};var tb,nb={staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n=Wp(e,\"style\");n&&(e.staticStyle=JSON.stringify(Up(n)));var o=qp(e,\"style\",!1);o&&(e.styleBinding=o)},genData:function(e){var t=\"\";return e.staticStyle&&(t+=\"staticStyle:\".concat(e.staticStyle,\",\")),e.styleBinding&&(t+=\"style:(\".concat(e.styleBinding,\"),\")),t}},ob=function(e){return(tb=tb||document.createElement(\"div\")).innerHTML=e,tb.textContent},pb=f(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),Mb=f(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),bb=f(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),cb=/^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,zb=/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+?\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,rb=\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\".concat(F.source,\"]*\"),ab=\"((?:\".concat(rb,\"\\\\:)?\").concat(rb,\")\"),ib=new RegExp(\"^<\".concat(ab)),Ob=/^\\s*(\\/?)>/,sb=new RegExp(\"^<\\\\/\".concat(ab,\"[^>]*>\")),Ab=/^<!DOCTYPE [^>]+>/i,ub=/^<!\\--/,db=/^<!\\[/,lb=f(\"script,style,textarea\",!0),fb={},qb={\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&amp;\":\"&\",\"&#10;\":\"\\n\",\"&#9;\":\"\\t\",\"&#39;\":\"'\"},Wb=/&(?:lt|gt|quot|amp|#39);/g,hb=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,vb=f(\"pre,textarea\",!0),Rb=function(e,t){return e&&vb(e)&&\"\\n\"===t[0]};function mb(e,t){var n=t?hb:Wb;return e.replace(n,(function(e){return qb[e]}))}function gb(e,t){for(var n,o,p=[],M=t.expectHTML,b=t.isUnaryTag||w,c=t.canBeLeftOpenTag||w,z=0,r=function(){if(n=e,o&&lb(o)){var r=0,O=o.toLowerCase(),s=fb[O]||(fb[O]=new RegExp(\"([\\\\s\\\\S]*?)(</\"+O+\"[^>]*>)\",\"i\"));v=e.replace(s,(function(e,n,o){return r=o.length,lb(O)||\"noscript\"===O||(n=n.replace(/<!\\--([\\s\\S]*?)-->/g,\"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g,\"$1\")),Rb(O,n)&&(n=n.slice(1)),t.chars&&t.chars(n),\"\"}));z+=e.length-v.length,e=v,i(O,z-r,z)}else{var A=e.indexOf(\"<\");if(0===A){if(ub.test(e)){var u=e.indexOf(\"--\\x3e\");if(u>=0)return t.shouldKeepComment&&t.comment&&t.comment(e.substring(4,u),z,z+u+3),a(u+3),\"continue\"}if(db.test(e)){var d=e.indexOf(\"]>\");if(d>=0)return a(d+2),\"continue\"}var l=e.match(Ab);if(l)return a(l[0].length),\"continue\";var f=e.match(sb);if(f){var q=z;return a(f[0].length),i(f[1],q,z),\"continue\"}var W=function(){var t=e.match(ib);if(t){var n={tagName:t[1],attrs:[],start:z};a(t[0].length);for(var o=void 0,p=void 0;!(o=e.match(Ob))&&(p=e.match(zb)||e.match(cb));)p.start=z,a(p[0].length),p.end=z,n.attrs.push(p);if(o)return n.unarySlash=o[1],a(o[0].length),n.end=z,n}}();if(W)return function(e){var n=e.tagName,z=e.unarySlash;M&&(\"p\"===o&&bb(n)&&i(o),c(n)&&o===n&&i(n));for(var r=b(n)||!!z,a=e.attrs.length,O=new Array(a),s=0;s<a;s++){var A=e.attrs[s],u=A[3]||A[4]||A[5]||\"\",d=\"a\"===n&&\"href\"===A[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;O[s]={name:A[1],value:mb(u,d)}}r||(p.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:O,start:e.start,end:e.end}),o=n);t.start&&t.start(n,O,r,e.start,e.end)}(W),Rb(W.tagName,e)&&a(1),\"continue\"}var h=void 0,v=void 0,R=void 0;if(A>=0){for(v=e.slice(A);!(sb.test(v)||ib.test(v)||ub.test(v)||db.test(v)||(R=v.indexOf(\"<\",1))<0);)A+=R,v=e.slice(A);h=e.substring(0,A)}A<0&&(h=e),h&&a(h.length),t.chars&&h&&t.chars(h,z-h.length,z)}if(e===n)return t.chars&&t.chars(e),\"break\"};e;){if(\"break\"===r())break}function a(t){z+=t,e=e.substring(t)}function i(e,n,M){var b,c;if(null==n&&(n=z),null==M&&(M=z),e)for(c=e.toLowerCase(),b=p.length-1;b>=0&&p[b].lowerCasedTag!==c;b--);else b=0;if(b>=0){for(var r=p.length-1;r>=b;r--)t.end&&t.end(p[r].tag,n,M);p.length=b,o=b&&p[b-1].tag}else\"br\"===c?t.start&&t.start(e,[],!0,n,M):\"p\"===c&&(t.start&&t.start(e,[],!1,n,M),t.end&&t.end(e,n,M))}i()}var Lb,_b,Nb,yb,Tb,Eb,Bb,Cb,Xb=/^@|^v-on:/,wb=/^v-|^@|^:|^#/,Sb=/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,xb=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,kb=/^\\(|\\)$/g,Ib=/^\\[.*\\]$/,Db=/:(.*)$/,Pb=/^:|^\\.|^v-bind:/,jb=/\\.[^.\\]]+(?=[^\\]]*$)/g,Ub=/^v-slot(:|$)|^#/,Hb=/[\\r\\n]/,Fb=/[ \\f\\t\\r\\n]+/g,Gb=m(ob),$b=\"_empty_\";function Vb(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:tc(t),rawAttrsMap:{},parent:n,children:[]}}function Yb(e,t){Lb=t.warn||ip,Eb=t.isPreTag||w,Bb=t.mustUseProp||w,Cb=t.getTagNamespace||w;var n=t.isReservedTag||w;(function(e){return!(!(e.component||e.attrsMap[\":is\"]||e.attrsMap[\"v-bind:is\"])&&(e.attrsMap.is?n(e.attrsMap.is):n(e.tag)))}),Nb=Op(t.modules,\"transformNode\"),yb=Op(t.modules,\"preTransformNode\"),Tb=Op(t.modules,\"postTransformNode\"),_b=t.delimiters;var o,p,M=[],b=!1!==t.preserveWhitespace,c=t.whitespace,z=!1,r=!1;function a(e){if(i(e),z||e.processed||(e=Kb(e,t)),M.length||e===o||o.if&&(e.elseif||e.else)&&Qb(o,{exp:e.elseif,block:e}),p&&!e.forbidden)if(e.elseif||e.else)b=e,c=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];e.pop()}}(p.children),c&&c.if&&Qb(c,{exp:b.elseif,block:b});else{if(e.slotScope){var n=e.slotTarget||'\"default\"';(p.scopedSlots||(p.scopedSlots={}))[n]=e}p.children.push(e),e.parent=p}var b,c;e.children=e.children.filter((function(e){return!e.slotScope})),i(e),e.pre&&(z=!1),Eb(e.tag)&&(r=!1);for(var a=0;a<Tb.length;a++)Tb[a](e,t)}function i(e){if(!r)for(var t=void 0;(t=e.children[e.children.length-1])&&3===t.type&&\" \"===t.text;)e.children.pop()}return gb(e,{warn:Lb,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,n,b,c,i){var O=p&&p.ns||Cb(e);Q&&\"svg\"===O&&(n=function(e){for(var t=[],n=0;n<e.length;n++){var o=e[n];nc.test(o.name)||(o.name=o.name.replace(oc,\"\"),t.push(o))}return t}(n));var s,A=Vb(e,n,p);O&&(A.ns=O),\"style\"!==(s=A).tag&&(\"script\"!==s.tag||s.attrsMap.type&&\"text/javascript\"!==s.attrsMap.type)||ce()||(A.forbidden=!0);for(var u=0;u<yb.length;u++)A=yb[u](A,t)||A;z||(!function(e){null!=Wp(e,\"v-pre\")&&(e.pre=!0)}(A),A.pre&&(z=!0)),Eb(A.tag)&&(r=!0),z?function(e){var t=e.attrsList,n=t.length;if(n)for(var o=e.attrs=new Array(n),p=0;p<n;p++)o[p]={name:t[p].name,value:JSON.stringify(t[p].value)},null!=t[p].start&&(o[p].start=t[p].start,o[p].end=t[p].end);else e.pre||(e.plain=!0)}(A):A.processed||(Zb(A),function(e){var t=Wp(e,\"v-if\");if(t)e.if=t,Qb(e,{exp:t,block:e});else{null!=Wp(e,\"v-else\")&&(e.else=!0);var n=Wp(e,\"v-else-if\");n&&(e.elseif=n)}}(A),function(e){var t=Wp(e,\"v-once\");null!=t&&(e.once=!0)}(A)),o||(o=A),b?a(A):(p=A,M.push(A))},end:function(e,t,n){var o=M[M.length-1];M.length-=1,p=M[M.length-1],a(o)},chars:function(e,t,n){if(p&&(!Q||\"textarea\"!==p.tag||p.attrsMap.placeholder!==e)){var o,M=p.children;if(e=r||e.trim()?\"script\"===(o=p).tag||\"style\"===o.tag?e:Gb(e):M.length?c?\"condense\"===c&&Hb.test(e)?\"\":\" \":b?\" \":\"\":\"\"){r||\"condense\"!==c||(e=e.replace(Fb,\" \"));var a=void 0,i=void 0;!z&&\" \"!==e&&(a=function(e,t){var n=t?JM(t):ZM;if(n.test(e)){for(var o,p,M,b=[],c=[],z=n.lastIndex=0;o=n.exec(e);){(p=o.index)>z&&(c.push(M=e.slice(z,p)),b.push(JSON.stringify(M)));var r=rp(o[1].trim());b.push(\"_s(\".concat(r,\")\")),c.push({\"@binding\":r}),z=p+o[0].length}return z<e.length&&(c.push(M=e.slice(z)),b.push(JSON.stringify(M))),{expression:b.join(\"+\"),tokens:c}}}(e,_b))?i={type:2,expression:a.expression,tokens:a.tokens,text:e}:\" \"===e&&M.length&&\" \"===M[M.length-1].text||(i={type:3,text:e}),i&&M.push(i)}}},comment:function(e,t,n){if(p){var o={type:3,text:e,isComment:!0};0,p.children.push(o)}}}),o}function Kb(e,t){var n;!function(e){var t=qp(e,\"key\");if(t){e.key=t}}(e),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=qp(e,\"ref\");t&&(e.ref=t,e.refInFor=function(e){var t=e;for(;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;\"template\"===e.tag?(t=Wp(e,\"scope\"),e.slotScope=t||Wp(e,\"slot-scope\")):(t=Wp(e,\"slot-scope\"))&&(e.slotScope=t);var n=qp(e,\"slot\");n&&(e.slotTarget='\"\"'===n?'\"default\"':n,e.slotTargetDynamic=!(!e.attrsMap[\":slot\"]&&!e.attrsMap[\"v-bind:slot\"]),\"template\"===e.tag||e.slotScope||Ap(e,\"slot\",n,function(e,t){return e.rawAttrsMap[\":\"+t]||e.rawAttrsMap[\"v-bind:\"+t]||e.rawAttrsMap[t]}(e,\"slot\")));if(\"template\"===e.tag){if(b=hp(e,Ub)){0;var o=Jb(b),p=o.name,M=o.dynamic;e.slotTarget=p,e.slotTargetDynamic=M,e.slotScope=b.value||$b}}else{var b;if(b=hp(e,Ub)){0;var c=e.scopedSlots||(e.scopedSlots={}),z=Jb(b),r=z.name,a=(M=z.dynamic,c[r]=Vb(\"template\",[],e));a.slotTarget=r,a.slotTargetDynamic=M,a.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=a,!0})),a.slotScope=b.value||$b,e.children=[],e.plain=!1}}}(e),\"slot\"===(n=e).tag&&(n.slotName=qp(n,\"name\")),function(e){var t;(t=qp(e,\"is\"))&&(e.component=t);null!=Wp(e,\"inline-template\")&&(e.inlineTemplate=!0)}(e);for(var o=0;o<Nb.length;o++)e=Nb[o](e,t)||e;return function(e){var t,n,o,p,M,b,c,z,r=e.attrsList;for(t=0,n=r.length;t<n;t++){if(o=p=r[t].name,M=r[t].value,wb.test(o))if(e.hasBindings=!0,(b=ec(o.replace(wb,\"\")))&&(o=o.replace(jb,\"\")),Pb.test(o))o=o.replace(Pb,\"\"),M=rp(M),(z=Ib.test(o))&&(o=o.slice(1,-1)),b&&(b.prop&&!z&&\"innerHtml\"===(o=L(o))&&(o=\"innerHTML\"),b.camel&&!z&&(o=L(o)),b.sync&&(c=mp(M,\"$event\"),z?fp(e,'\"update:\"+('.concat(o,\")\"),c,null,!1,0,r[t],!0):(fp(e,\"update:\".concat(L(o)),c,null,!1,0,r[t]),y(o)!==L(o)&&fp(e,\"update:\".concat(y(o)),c,null,!1,0,r[t])))),b&&b.prop||!e.component&&Bb(e.tag,e.attrsMap.type,o)?sp(e,o,M,r[t],z):Ap(e,o,M,r[t],z);else if(Xb.test(o))o=o.replace(Xb,\"\"),(z=Ib.test(o))&&(o=o.slice(1,-1)),fp(e,o,M,b,!1,0,r[t],z);else{var a=(o=o.replace(wb,\"\")).match(Db),i=a&&a[1];z=!1,i&&(o=o.slice(0,-(i.length+1)),Ib.test(i)&&(i=i.slice(1,-1),z=!0)),dp(e,o,p,M,i,z,b,r[t])}else Ap(e,o,JSON.stringify(M),r[t]),!e.component&&\"muted\"===o&&Bb(e.tag,e.attrsMap.type,o)&&sp(e,o,\"true\",r[t])}}(e),e}function Zb(e){var t;if(t=Wp(e,\"v-for\")){var n=function(e){var t=e.match(Sb);if(!t)return;var n={};n.for=t[2].trim();var o=t[1].trim().replace(kb,\"\"),p=o.match(xb);p?(n.alias=o.replace(xb,\"\").trim(),n.iterator1=p[1].trim(),p[2]&&(n.iterator2=p[2].trim())):n.alias=o;return n}(t);n&&B(e,n)}}function Qb(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function Jb(e){var t=e.name.replace(Ub,\"\");return t||\"#\"!==e.name[0]&&(t=\"default\"),Ib.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'\"'.concat(t,'\"'),dynamic:!1}}function ec(e){var t=e.match(jb);if(t){var n={};return t.forEach((function(e){n[e.slice(1)]=!0})),n}}function tc(e){for(var t={},n=0,o=e.length;n<o;n++)t[e[n].name]=e[n].value;return t}var nc=/^xmlns:NS\\d+/,oc=/^NS\\d+:/;function pc(e){return Vb(e.tag,e.attrsList.slice(),e.parent)}var Mc={preTransformNode:function(e,t){if(\"input\"===e.tag){var n=e.attrsMap;if(!n[\"v-model\"])return;var o=void 0;if((n[\":type\"]||n[\"v-bind:type\"])&&(o=qp(e,\"type\")),n.type||o||!n[\"v-bind\"]||(o=\"(\".concat(n[\"v-bind\"],\").type\")),o){var p=Wp(e,\"v-if\",!0),M=p?\"&&(\".concat(p,\")\"):\"\",b=null!=Wp(e,\"v-else\",!0),c=Wp(e,\"v-else-if\",!0),z=pc(e);Zb(z),up(z,\"type\",\"checkbox\"),Kb(z,t),z.processed=!0,z.if=\"(\".concat(o,\")==='checkbox'\")+M,Qb(z,{exp:z.if,block:z});var r=pc(e);Wp(r,\"v-for\",!0),up(r,\"type\",\"radio\"),Kb(r,t),Qb(z,{exp:\"(\".concat(o,\")==='radio'\")+M,block:r});var a=pc(e);return Wp(a,\"v-for\",!0),up(a,\":type\",o),Kb(a,t),Qb(z,{exp:p,block:a}),b?z.else=!0:c&&(z.elseif=c),z}}}},bc=[eb,nb,Mc];var cc,zc,rc={model:function(e,t,n){n;var o=t.value,p=t.modifiers,M=e.tag,b=e.attrsMap.type;if(e.component)return Rp(e,o,p),!1;if(\"select\"===M)!function(e,t,n){var o=n&&n.number,p='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;'+\"return \".concat(o?\"_n(val)\":\"val\",\"})\"),M=\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\",b=\"var $$selectedVal = \".concat(p,\";\");b=\"\".concat(b,\" \").concat(mp(t,M)),fp(e,\"change\",b,null,!0)}(e,o,p);else if(\"input\"===M&&\"checkbox\"===b)!function(e,t,n){var o=n&&n.number,p=qp(e,\"value\")||\"null\",M=qp(e,\"true-value\")||\"true\",b=qp(e,\"false-value\")||\"false\";sp(e,\"checked\",\"Array.isArray(\".concat(t,\")\")+\"?_i(\".concat(t,\",\").concat(p,\")>-1\")+(\"true\"===M?\":(\".concat(t,\")\"):\":_q(\".concat(t,\",\").concat(M,\")\"))),fp(e,\"change\",\"var $$a=\".concat(t,\",\")+\"$$el=$event.target,\"+\"$$c=$$el.checked?(\".concat(M,\"):(\").concat(b,\");\")+\"if(Array.isArray($$a)){\"+\"var $$v=\".concat(o?\"_n(\"+p+\")\":p,\",\")+\"$$i=_i($$a,$$v);\"+\"if($$el.checked){$$i<0&&(\".concat(mp(t,\"$$a.concat([$$v])\"),\")}\")+\"else{$$i>-1&&(\".concat(mp(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\"),\")}\")+\"}else{\".concat(mp(t,\"$$c\"),\"}\"),null,!0)}(e,o,p);else if(\"input\"===M&&\"radio\"===b)!function(e,t,n){var o=n&&n.number,p=qp(e,\"value\")||\"null\";p=o?\"_n(\".concat(p,\")\"):p,sp(e,\"checked\",\"_q(\".concat(t,\",\").concat(p,\")\")),fp(e,\"change\",mp(t,p),null,!0)}(e,o,p);else if(\"input\"===M||\"textarea\"===M)!function(e,t,n){var o=e.attrsMap.type;0;var p=n||{},M=p.lazy,b=p.number,c=p.trim,z=!M&&\"range\"!==o,r=M?\"change\":\"range\"===o?Ep:\"input\",a=\"$event.target.value\";c&&(a=\"$event.target.value.trim()\");b&&(a=\"_n(\".concat(a,\")\"));var i=mp(t,a);z&&(i=\"if($event.target.composing)return;\".concat(i));sp(e,\"value\",\"(\".concat(t,\")\")),fp(e,r,i,null,!0),(c||b)&&fp(e,\"blur\",\"$forceUpdate()\")}(e,o,p);else{if(!H.isReservedTag(M))return Rp(e,o,p),!1}return!0},text:function(e,t){t.value&&sp(e,\"textContent\",\"_s(\".concat(t.value,\")\"),t)},html:function(e,t){t.value&&sp(e,\"innerHTML\",\"_s(\".concat(t.value,\")\"),t)}},ac={expectHTML:!0,modules:bc,directives:rc,isPreTag:function(e){return\"pre\"===e},isUnaryTag:pb,mustUseProp:so,canBeLeftOpenTag:Mb,isReservedTag:To,getTagNamespace:Eo,staticKeys:function(e){return e.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(\",\")}(bc)},ic=m((function(e){return f(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))}));function Oc(e,t){e&&(cc=ic(t.staticKeys||\"\"),zc=t.isReservedTag||w,sc(e),Ac(e,!1))}function sc(e){if(e.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||q(e.tag)||!zc(e.tag)||function(e){for(;e.parent;){if(\"template\"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(cc)))}(e),1===e.type){if(!zc(e.tag)&&\"slot\"!==e.tag&&null==e.attrsMap[\"inline-template\"])return;for(var t=0,n=e.children.length;t<n;t++){var o=e.children[t];sc(o),o.static||(e.static=!1)}if(e.ifConditions)for(t=1,n=e.ifConditions.length;t<n;t++){var p=e.ifConditions[t].block;sc(p),p.static||(e.static=!1)}}}function Ac(e,t){if(1===e.type){if((e.static||e.once)&&(e.staticInFor=t),e.static&&e.children.length&&(1!==e.children.length||3!==e.children[0].type))return void(e.staticRoot=!0);if(e.staticRoot=!1,e.children)for(var n=0,o=e.children.length;n<o;n++)Ac(e.children[n],t||!!e.for);if(e.ifConditions)for(n=1,o=e.ifConditions.length;n<o;n++)Ac(e.ifConditions[n].block,t)}}var uc=/^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function(?:\\s+[\\w$]+)?\\s*\\(/,dc=/\\([^)]*?\\);*$/,lc=/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,fc={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},qc={esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},Wc=function(e){return\"if(\".concat(e,\")return null;\")},hc={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:Wc(\"$event.target !== $event.currentTarget\"),ctrl:Wc(\"!$event.ctrlKey\"),shift:Wc(\"!$event.shiftKey\"),alt:Wc(\"!$event.altKey\"),meta:Wc(\"!$event.metaKey\"),left:Wc(\"'button' in $event && $event.button !== 0\"),middle:Wc(\"'button' in $event && $event.button !== 1\"),right:Wc(\"'button' in $event && $event.button !== 2\")};function vc(e,t){var n=t?\"nativeOn:\":\"on:\",o=\"\",p=\"\";for(var M in e){var b=Rc(e[M]);e[M]&&e[M].dynamic?p+=\"\".concat(M,\",\").concat(b,\",\"):o+='\"'.concat(M,'\":').concat(b,\",\")}return o=\"{\".concat(o.slice(0,-1),\"}\"),p?n+\"_d(\".concat(o,\",[\").concat(p.slice(0,-1),\"])\"):n+o}function Rc(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\".concat(e.map((function(e){return Rc(e)})).join(\",\"),\"]\");var t=lc.test(e.value),n=uc.test(e.value),o=lc.test(e.value.replace(dc,\"\"));if(e.modifiers){var p=\"\",M=\"\",b=[],c=function(t){if(hc[t])M+=hc[t],fc[t]&&b.push(t);else if(\"exact\"===t){var n=e.modifiers;M+=Wc([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter((function(e){return!n[e]})).map((function(e){return\"$event.\".concat(e,\"Key\")})).join(\"||\"))}else b.push(t)};for(var z in e.modifiers)c(z);b.length&&(p+=function(e){return\"if(!$event.type.indexOf('key')&&\"+\"\".concat(e.map(mc).join(\"&&\"),\")return null;\")}(b)),M&&(p+=M);var r=t?\"return \".concat(e.value,\".apply(null, arguments)\"):n?\"return (\".concat(e.value,\").apply(null, arguments)\"):o?\"return \".concat(e.value):e.value;return\"function($event){\".concat(p).concat(r,\"}\")}return t||n?e.value:\"function($event){\".concat(o?\"return \".concat(e.value):e.value,\"}\")}function mc(e){var t=parseInt(e,10);if(t)return\"$event.keyCode!==\".concat(t);var n=fc[e],o=qc[e];return\"_k($event.keyCode,\"+\"\".concat(JSON.stringify(e),\",\")+\"\".concat(JSON.stringify(n),\",\")+\"$event.key,\"+\"\".concat(JSON.stringify(o))+\")\"}var gc={on:function(e,t){e.wrapListeners=function(e){return\"_g(\".concat(e,\",\").concat(t.value,\")\")}},bind:function(e,t){e.wrapData=function(n){return\"_b(\".concat(n,\",'\").concat(e.tag,\"',\").concat(t.value,\",\").concat(t.modifiers&&t.modifiers.prop?\"true\":\"false\").concat(t.modifiers&&t.modifiers.sync?\",true\":\"\",\")\")}},cloak:X},Lc=function(e){this.options=e,this.warn=e.warn||ip,this.transforms=Op(e.modules,\"transformCode\"),this.dataGenFns=Op(e.modules,\"genData\"),this.directives=B(B({},gc),e.directives);var t=e.isReservedTag||w;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function _c(e,t){var n=new Lc(t),o=e?\"script\"===e.tag?\"null\":Nc(e,n):'_c(\"div\")';return{render:\"with(this){return \".concat(o,\"}\"),staticRenderFns:n.staticRenderFns}}function Nc(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return yc(e,t);if(e.once&&!e.onceProcessed)return Tc(e,t);if(e.for&&!e.forProcessed)return Cc(e,t);if(e.if&&!e.ifProcessed)return Ec(e,t);if(\"template\"!==e.tag||e.slotTarget||t.pre){if(\"slot\"===e.tag)return function(e,t){var n=e.slotName||'\"default\"',o=xc(e,t),p=\"_t(\".concat(n).concat(o?\",function(){return \".concat(o,\"}\"):\"\"),M=e.attrs||e.dynamicAttrs?Dc((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:L(e.name),value:e.value,dynamic:e.dynamic}}))):null,b=e.attrsMap[\"v-bind\"];!M&&!b||o||(p+=\",null\");M&&(p+=\",\".concat(M));b&&(p+=\"\".concat(M?\"\":\",null\",\",\").concat(b));return p+\")\"}(e,t);var n=void 0;if(e.component)n=function(e,t,n){var o=t.inlineTemplate?null:xc(t,n,!0);return\"_c(\".concat(e,\",\").concat(Xc(t,n)).concat(o?\",\".concat(o):\"\",\")\")}(e.component,e,t);else{var o=void 0,p=t.maybeComponent(e);(!e.plain||e.pre&&p)&&(o=Xc(e,t));var M=void 0,b=t.options.bindings;p&&b&&!1!==b.__isScriptSetup&&(M=function(e,t){var n=L(t),o=_(n),p=function(p){return e[t]===p?t:e[n]===p?n:e[o]===p?o:void 0},M=p(\"setup-const\")||p(\"setup-reactive-const\");if(M)return M;var b=p(\"setup-let\")||p(\"setup-ref\")||p(\"setup-maybe-ref\");if(b)return b}(b,e.tag)),M||(M=\"'\".concat(e.tag,\"'\"));var c=e.inlineTemplate?null:xc(e,t,!0);n=\"_c(\".concat(M).concat(o?\",\".concat(o):\"\").concat(c?\",\".concat(c):\"\",\")\")}for(var z=0;z<t.transforms.length;z++)n=t.transforms[z](e,n);return n}return xc(e,t)||\"void 0\"}function yc(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push(\"with(this){return \".concat(Nc(e,t),\"}\")),t.pre=n,\"_m(\".concat(t.staticRenderFns.length-1).concat(e.staticInFor?\",true\":\"\",\")\")}function Tc(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Ec(e,t);if(e.staticInFor){for(var n=\"\",o=e.parent;o;){if(o.for){n=o.key;break}o=o.parent}return n?\"_o(\".concat(Nc(e,t),\",\").concat(t.onceId++,\",\").concat(n,\")\"):Nc(e,t)}return yc(e,t)}function Ec(e,t,n,o){return e.ifProcessed=!0,Bc(e.ifConditions.slice(),t,n,o)}function Bc(e,t,n,o){if(!e.length)return o||\"_e()\";var p=e.shift();return p.exp?\"(\".concat(p.exp,\")?\").concat(M(p.block),\":\").concat(Bc(e,t,n,o)):\"\".concat(M(p.block));function M(e){return n?n(e,t):e.once?Tc(e,t):Nc(e,t)}}function Cc(e,t,n,o){var p=e.for,M=e.alias,b=e.iterator1?\",\".concat(e.iterator1):\"\",c=e.iterator2?\",\".concat(e.iterator2):\"\";return e.forProcessed=!0,\"\".concat(o||\"_l\",\"((\").concat(p,\"),\")+\"function(\".concat(M).concat(b).concat(c,\"){\")+\"return \".concat((n||Nc)(e,t))+\"})\"}function Xc(e,t){var n=\"{\",o=function(e,t){var n=e.directives;if(!n)return;var o,p,M,b,c=\"directives:[\",z=!1;for(o=0,p=n.length;o<p;o++){M=n[o],b=!0;var r=t.directives[M.name];r&&(b=!!r(e,M,t.warn)),b&&(z=!0,c+='{name:\"'.concat(M.name,'\",rawName:\"').concat(M.rawName,'\"').concat(M.value?\",value:(\".concat(M.value,\"),expression:\").concat(JSON.stringify(M.value)):\"\").concat(M.arg?\",arg:\".concat(M.isDynamicArg?M.arg:'\"'.concat(M.arg,'\"')):\"\").concat(M.modifiers?\",modifiers:\".concat(JSON.stringify(M.modifiers)):\"\",\"},\"))}if(z)return c.slice(0,-1)+\"]\"}(e,t);o&&(n+=o+\",\"),e.key&&(n+=\"key:\".concat(e.key,\",\")),e.ref&&(n+=\"ref:\".concat(e.ref,\",\")),e.refInFor&&(n+=\"refInFor:true,\"),e.pre&&(n+=\"pre:true,\"),e.component&&(n+='tag:\"'.concat(e.tag,'\",'));for(var p=0;p<t.dataGenFns.length;p++)n+=t.dataGenFns[p](e);if(e.attrs&&(n+=\"attrs:\".concat(Dc(e.attrs),\",\")),e.props&&(n+=\"domProps:\".concat(Dc(e.props),\",\")),e.events&&(n+=\"\".concat(vc(e.events,!1),\",\")),e.nativeEvents&&(n+=\"\".concat(vc(e.nativeEvents,!0),\",\")),e.slotTarget&&!e.slotScope&&(n+=\"slot:\".concat(e.slotTarget,\",\")),e.scopedSlots&&(n+=\"\".concat(function(e,t,n){var o=e.for||Object.keys(t).some((function(e){var n=t[e];return n.slotTargetDynamic||n.if||n.for||wc(n)})),p=!!e.if;if(!o)for(var M=e.parent;M;){if(M.slotScope&&M.slotScope!==$b||M.for){o=!0;break}M.if&&(p=!0),M=M.parent}var b=Object.keys(t).map((function(e){return Sc(t[e],n)})).join(\",\");return\"scopedSlots:_u([\".concat(b,\"]\").concat(o?\",null,true\":\"\").concat(!o&&p?\",null,false,\".concat(function(e){var t=5381,n=e.length;for(;n;)t=33*t^e.charCodeAt(--n);return t>>>0}(b)):\"\",\")\")}(e,e.scopedSlots,t),\",\")),e.model&&(n+=\"model:{value:\".concat(e.model.value,\",callback:\").concat(e.model.callback,\",expression:\").concat(e.model.expression,\"},\")),e.inlineTemplate){var M=function(e,t){var n=e.children[0];0;if(n&&1===n.type){var o=_c(n,t.options);return\"inlineTemplate:{render:function(){\".concat(o.render,\"},staticRenderFns:[\").concat(o.staticRenderFns.map((function(e){return\"function(){\".concat(e,\"}\")})).join(\",\"),\"]}\")}}(e,t);M&&(n+=\"\".concat(M,\",\"))}return n=n.replace(/,$/,\"\")+\"}\",e.dynamicAttrs&&(n=\"_b(\".concat(n,',\"').concat(e.tag,'\",').concat(Dc(e.dynamicAttrs),\")\")),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function wc(e){return 1===e.type&&(\"slot\"===e.tag||e.children.some(wc))}function Sc(e,t){var n=e.attrsMap[\"slot-scope\"];if(e.if&&!e.ifProcessed&&!n)return Ec(e,t,Sc,\"null\");if(e.for&&!e.forProcessed)return Cc(e,t,Sc);var o=e.slotScope===$b?\"\":String(e.slotScope),p=\"function(\".concat(o,\"){\")+\"return \".concat(\"template\"===e.tag?e.if&&n?\"(\".concat(e.if,\")?\").concat(xc(e,t)||\"undefined\",\":undefined\"):xc(e,t)||\"undefined\":Nc(e,t),\"}\"),M=o?\"\":\",proxy:true\";return\"{key:\".concat(e.slotTarget||'\"default\"',\",fn:\").concat(p).concat(M,\"}\")}function xc(e,t,n,o,p){var M=e.children;if(M.length){var b=M[0];if(1===M.length&&b.for&&\"template\"!==b.tag&&\"slot\"!==b.tag){var c=n?t.maybeComponent(b)?\",1\":\",0\":\"\";return\"\".concat((o||Nc)(b,t)).concat(c)}var z=n?function(e,t){for(var n=0,o=0;o<e.length;o++){var p=e[o];if(1===p.type){if(kc(p)||p.ifConditions&&p.ifConditions.some((function(e){return kc(e.block)}))){n=2;break}(t(p)||p.ifConditions&&p.ifConditions.some((function(e){return t(e.block)})))&&(n=1)}}return n}(M,t.maybeComponent):0,r=p||Ic;return\"[\".concat(M.map((function(e){return r(e,t)})).join(\",\"),\"]\").concat(z?\",\".concat(z):\"\")}}function kc(e){return void 0!==e.for||\"template\"===e.tag||\"slot\"===e.tag}function Ic(e,t){return 1===e.type?Nc(e,t):3===e.type&&e.isComment?function(e){return\"_e(\".concat(JSON.stringify(e.text),\")\")}(e):\"_v(\".concat(2===(n=e).type?n.expression:Pc(JSON.stringify(n.text)),\")\");var n}function Dc(e){for(var t=\"\",n=\"\",o=0;o<e.length;o++){var p=e[o],M=Pc(p.value);p.dynamic?n+=\"\".concat(p.name,\",\").concat(M,\",\"):t+='\"'.concat(p.name,'\":').concat(M,\",\")}return t=\"{\".concat(t.slice(0,-1),\"}\"),n?\"_d(\".concat(t,\",[\").concat(n.slice(0,-1),\"])\"):t}function Pc(e){return e.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\"),new RegExp(\"\\\\b\"+\"delete,typeof,void\".split(\",\").join(\"\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b\")+\"\\\\s*\\\\([^\\\\)]*\\\\)\");function jc(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),X}}function Uc(e){var t=Object.create(null);return function(n,o,p){(o=B({},o)).warn;delete o.warn;var M=o.delimiters?String(o.delimiters)+n:n;if(t[M])return t[M];var b=e(n,o);var c={},z=[];return c.render=jc(b.render,z),c.staticRenderFns=b.staticRenderFns.map((function(e){return jc(e,z)})),t[M]=c}}var Hc,Fc,Gc=(Hc=function(e,t){var n=Yb(e.trim(),t);!1!==t.optimize&&Oc(n,t);var o=_c(n,t);return{ast:n,render:o.render,staticRenderFns:o.staticRenderFns}},function(e){function t(t,n){var o=Object.create(e),p=[],M=[];if(n)for(var b in n.modules&&(o.modules=(e.modules||[]).concat(n.modules)),n.directives&&(o.directives=B(Object.create(e.directives||null),n.directives)),n)\"modules\"!==b&&\"directives\"!==b&&(o[b]=n[b]);o.warn=function(e,t,n){(n?M:p).push(e)};var c=Hc(t.trim(),o);return c.errors=p,c.tips=M,c}return{compile:t,compileToFunctions:Uc(t)}}),$c=Gc(ac).compileToFunctions;function Vc(e){return(Fc=Fc||document.createElement(\"div\")).innerHTML=e?'<a href=\"\\n\"/>':'<div a=\"\\n\"/>',Fc.innerHTML.indexOf(\"&#10;\")>0}var Yc=!!K&&Vc(!1),Kc=!!K&&Vc(!0),Zc=m((function(e){var t=Xo(e);return t&&t.innerHTML})),Qc=no.prototype.$mount;no.prototype.$mount=function(e,t){if((e=e&&Xo(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var o=n.template;if(o)if(\"string\"==typeof o)\"#\"===o.charAt(0)&&(o=Zc(o));else{if(!o.nodeType)return this;o=o.innerHTML}else e&&(o=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(o){0;var p=$c(o,{outputSourceRange:!1,shouldDecodeNewlines:Yc,shouldDecodeNewlinesForHref:Kc,delimiters:n.delimiters,comments:n.comments},this),M=p.render,b=p.staticRenderFns;n.render=M,n.staticRenderFns=b}}return Qc.call(this,e,t)},no.compile=$c;var Jc=n(6486),ez=n.n(Jc),tz=n(8),nz=n.n(tz);const oz={computed:{Telescope:function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(){return Telescope}))},methods:{timeAgo:function(e){nz().updateLocale(\"en\",{relativeTime:{future:\"in %s\",past:\"%s ago\",s:function(e){return e+\"s ago\"},ss:\"%ds ago\",m:\"1m ago\",mm:\"%dm ago\",h:\"1h ago\",hh:\"%dh ago\",d:\"1d ago\",dd:\"%dd ago\",M:\"a month ago\",MM:\"%d months ago\",y:\"a year ago\",yy:\"%d years ago\"}});var t=nz()().diff(e,\"seconds\"),n=nz()(\"2018-01-01\").startOf(\"day\").seconds(t);return t>300?nz()(e).fromNow(!0):t<60?n.format(\"s\")+\"s ago\":n.format(\"m:ss\")+\"m ago\"},localTime:function(e){return nz()(e).local().format(\"MMMM Do YYYY, h:mm:ss A\")},truncate:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:70;return ez().truncate(e,{length:t,separator:/,? +/})},debouncer:ez().debounce((function(e){return e()}),500),alertError:function(e){this.$root.alert.type=\"error\",this.$root.alert.autoClose=!1,this.$root.alert.message=e},alertSuccess:function(e,t){this.$root.alert.type=\"success\",this.$root.alert.autoClose=t,this.$root.alert.message=e},alertConfirm:function(e,t,n){this.$root.alert.type=\"confirmation\",this.$root.alert.autoClose=!1,this.$root.alert.message=e,this.$root.alert.confirmationProceed=t,this.$root.alert.confirmationCancel=n}}};var pz=n(9669),Mz=n.n(pz);const bz=[{path:\"/\",redirect:\"/requests\"},{path:\"/mail/:id\",name:\"mail-preview\",component:n(7776).Z},{path:\"/mail\",name:\"mail\",component:n(4456).Z},{path:\"/exceptions/:id\",name:\"exception-preview\",component:n(8882).Z},{path:\"/exceptions\",name:\"exceptions\",component:n(5323).Z},{path:\"/dumps\",name:\"dumps\",component:n(7208).Z},{path:\"/logs/:id\",name:\"log-preview\",component:n(8360).Z},{path:\"/logs\",name:\"logs\",component:n(1929).Z},{path:\"/notifications/:id\",name:\"notification-preview\",component:n(3590).Z},{path:\"/notifications\",name:\"notifications\",component:n(624).Z},{path:\"/jobs/:id\",name:\"job-preview\",component:n(4142).Z},{path:\"/jobs\",name:\"jobs\",component:n(558).Z},{path:\"/batches/:id\",name:\"batch-preview\",component:n(8159).Z},{path:\"/batches\",name:\"batches\",component:n(7374).Z},{path:\"/events/:id\",name:\"event-preview\",component:n(5701).Z},{path:\"/events\",name:\"events\",component:n(8814).Z},{path:\"/cache/:id\",name:\"cache-preview\",component:n(2246).Z},{path:\"/cache\",name:\"cache\",component:n(896).Z},{path:\"/queries/:id\",name:\"query-preview\",component:n(3992).Z},{path:\"/queries\",name:\"queries\",component:n(4652).Z},{path:\"/models/:id\",name:\"model-preview\",component:n(706).Z},{path:\"/models\",name:\"models\",component:n(1556).Z},{path:\"/requests/:id\",name:\"request-preview\",component:n(1619).Z},{path:\"/requests\",name:\"requests\",component:n(9751).Z},{path:\"/commands/:id\",name:\"command-preview\",component:n(1241).Z},{path:\"/commands\",name:\"commands\",component:n(7210).Z},{path:\"/schedule/:id\",name:\"schedule-preview\",component:n(4622).Z},{path:\"/schedule\",name:\"schedule\",component:n(8244).Z},{path:\"/redis/:id\",name:\"redis-preview\",component:n(5799).Z},{path:\"/redis\",name:\"redis\",component:n(7837).Z},{path:\"/monitored-tags\",name:\"monitored-tags\",component:n(5505).Z},{path:\"/gates/:id\",name:\"gate-preview\",component:n(6581).Z},{path:\"/gates\",name:\"gates\",component:n(4840).Z},{path:\"/views/:id\",name:\"view-preview\",component:n(6968).Z},{path:\"/views\",name:\"views\",component:n(3395).Z},{path:\"/client-requests/:id\",name:\"client-request-preview\",component:n(9101).Z},{path:\"/client-requests\",name:\"client-requests\",component:n(2935).Z}];function cz(e,t){for(var n in t)e[n]=t[n];return e}var zz=/[!'()*]/g,rz=function(e){return\"%\"+e.charCodeAt(0).toString(16)},az=/%2C/g,iz=function(e){return encodeURIComponent(e).replace(zz,rz).replace(az,\",\")};function Oz(e){try{return decodeURIComponent(e)}catch(e){0}return e}var sz=function(e){return null==e||\"object\"==typeof e?e:String(e)};function Az(e){var t={};return(e=e.trim().replace(/^(\\?|#|&)/,\"\"))?(e.split(\"&\").forEach((function(e){var n=e.replace(/\\+/g,\" \").split(\"=\"),o=Oz(n.shift()),p=n.length>0?Oz(n.join(\"=\")):null;void 0===t[o]?t[o]=p:Array.isArray(t[o])?t[o].push(p):t[o]=[t[o],p]})),t):t}function uz(e){var t=e?Object.keys(e).map((function(t){var n=e[t];if(void 0===n)return\"\";if(null===n)return iz(t);if(Array.isArray(n)){var o=[];return n.forEach((function(e){void 0!==e&&(null===e?o.push(iz(t)):o.push(iz(t)+\"=\"+iz(e)))})),o.join(\"&\")}return iz(t)+\"=\"+iz(n)})).filter((function(e){return e.length>0})).join(\"&\"):null;return t?\"?\"+t:\"\"}var dz=/\\/?$/;function lz(e,t,n,o){var p=o&&o.options.stringifyQuery,M=t.query||{};try{M=fz(M)}catch(e){}var b={name:t.name||e&&e.name,meta:e&&e.meta||{},path:t.path||\"/\",hash:t.hash||\"\",query:M,params:t.params||{},fullPath:hz(t,p),matched:e?Wz(e):[]};return n&&(b.redirectedFrom=hz(n,p)),Object.freeze(b)}function fz(e){if(Array.isArray(e))return e.map(fz);if(e&&\"object\"==typeof e){var t={};for(var n in e)t[n]=fz(e[n]);return t}return e}var qz=lz(null,{path:\"/\"});function Wz(e){for(var t=[];e;)t.unshift(e),e=e.parent;return t}function hz(e,t){var n=e.path,o=e.query;void 0===o&&(o={});var p=e.hash;return void 0===p&&(p=\"\"),(n||\"/\")+(t||uz)(o)+p}function vz(e,t,n){return t===qz?e===t:!!t&&(e.path&&t.path?e.path.replace(dz,\"\")===t.path.replace(dz,\"\")&&(n||e.hash===t.hash&&Rz(e.query,t.query)):!(!e.name||!t.name)&&(e.name===t.name&&(n||e.hash===t.hash&&Rz(e.query,t.query)&&Rz(e.params,t.params))))}function Rz(e,t){if(void 0===e&&(e={}),void 0===t&&(t={}),!e||!t)return e===t;var n=Object.keys(e).sort(),o=Object.keys(t).sort();return n.length===o.length&&n.every((function(n,p){var M=e[n];if(o[p]!==n)return!1;var b=t[n];return null==M||null==b?M===b:\"object\"==typeof M&&\"object\"==typeof b?Rz(M,b):String(M)===String(b)}))}function mz(e){for(var t=0;t<e.matched.length;t++){var n=e.matched[t];for(var o in n.instances){var p=n.instances[o],M=n.enteredCbs[o];if(p&&M){delete n.enteredCbs[o];for(var b=0;b<M.length;b++)p._isBeingDestroyed||M[b](p)}}}}var gz={name:\"RouterView\",functional:!0,props:{name:{type:String,default:\"default\"}},render:function(e,t){var n=t.props,o=t.children,p=t.parent,M=t.data;M.routerView=!0;for(var b=p.$createElement,c=n.name,z=p.$route,r=p._routerViewCache||(p._routerViewCache={}),a=0,i=!1;p&&p._routerRoot!==p;){var O=p.$vnode?p.$vnode.data:{};O.routerView&&a++,O.keepAlive&&p._directInactive&&p._inactive&&(i=!0),p=p.$parent}if(M.routerViewDepth=a,i){var s=r[c],A=s&&s.component;return A?(s.configProps&&Lz(A,M,s.route,s.configProps),b(A,M,o)):b()}var u=z.matched[a],d=u&&u.components[c];if(!u||!d)return r[c]=null,b();r[c]={component:d},M.registerRouteInstance=function(e,t){var n=u.instances[c];(t&&n!==e||!t&&n===e)&&(u.instances[c]=t)},(M.hook||(M.hook={})).prepatch=function(e,t){u.instances[c]=t.componentInstance},M.hook.init=function(e){e.data.keepAlive&&e.componentInstance&&e.componentInstance!==u.instances[c]&&(u.instances[c]=e.componentInstance),mz(z)};var l=u.props&&u.props[c];return l&&(cz(r[c],{route:z,configProps:l}),Lz(d,M,z,l)),b(d,M,o)}};function Lz(e,t,n,o){var p=t.props=function(e,t){switch(typeof t){case\"undefined\":return;case\"object\":return t;case\"function\":return t(e);case\"boolean\":return t?e.params:void 0}}(n,o);if(p){p=t.props=cz({},p);var M=t.attrs=t.attrs||{};for(var b in p)e.props&&b in e.props||(M[b]=p[b],delete p[b])}}function _z(e,t,n){var o=e.charAt(0);if(\"/\"===o)return e;if(\"?\"===o||\"#\"===o)return t+e;var p=t.split(\"/\");n&&p[p.length-1]||p.pop();for(var M=e.replace(/^\\//,\"\").split(\"/\"),b=0;b<M.length;b++){var c=M[b];\"..\"===c?p.pop():\".\"!==c&&p.push(c)}return\"\"!==p[0]&&p.unshift(\"\"),p.join(\"/\")}function Nz(e){return e.replace(/\\/(?:\\s*\\/)+/g,\"/\")}var yz=Array.isArray||function(e){return\"[object Array]\"==Object.prototype.toString.call(e)},Tz=Fz,Ez=Sz,Bz=function(e,t){return Iz(Sz(e,t),t)},Cz=Iz,Xz=Hz,wz=new RegExp([\"(\\\\\\\\.)\",\"([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))\"].join(\"|\"),\"g\");function Sz(e,t){for(var n,o=[],p=0,M=0,b=\"\",c=t&&t.delimiter||\"/\";null!=(n=wz.exec(e));){var z=n[0],r=n[1],a=n.index;if(b+=e.slice(M,a),M=a+z.length,r)b+=r[1];else{var i=e[M],O=n[2],s=n[3],A=n[4],u=n[5],d=n[6],l=n[7];b&&(o.push(b),b=\"\");var f=null!=O&&null!=i&&i!==O,q=\"+\"===d||\"*\"===d,W=\"?\"===d||\"*\"===d,h=n[2]||c,v=A||u;o.push({name:s||p++,prefix:O||\"\",delimiter:h,optional:W,repeat:q,partial:f,asterisk:!!l,pattern:v?Pz(v):l?\".*\":\"[^\"+Dz(h)+\"]+?\"})}}return M<e.length&&(b+=e.substr(M)),b&&o.push(b),o}function xz(e){return encodeURI(e).replace(/[\\/?#]/g,(function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()}))}function kz(e){return encodeURI(e).replace(/[?#]/g,(function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()}))}function Iz(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)\"object\"==typeof e[o]&&(n[o]=new RegExp(\"^(?:\"+e[o].pattern+\")$\",Uz(t)));return function(t,o){for(var p=\"\",M=t||{},b=(o||{}).pretty?xz:encodeURIComponent,c=0;c<e.length;c++){var z=e[c];if(\"string\"!=typeof z){var r,a=M[z.name];if(null==a){if(z.optional){z.partial&&(p+=z.prefix);continue}throw new TypeError('Expected \"'+z.name+'\" to be defined')}if(yz(a)){if(!z.repeat)throw new TypeError('Expected \"'+z.name+'\" to not repeat, but received `'+JSON.stringify(a)+\"`\");if(0===a.length){if(z.optional)continue;throw new TypeError('Expected \"'+z.name+'\" to not be empty')}for(var i=0;i<a.length;i++){if(r=b(a[i]),!n[c].test(r))throw new TypeError('Expected all \"'+z.name+'\" to match \"'+z.pattern+'\", but received `'+JSON.stringify(r)+\"`\");p+=(0===i?z.prefix:z.delimiter)+r}}else{if(r=z.asterisk?kz(a):b(a),!n[c].test(r))throw new TypeError('Expected \"'+z.name+'\" to match \"'+z.pattern+'\", but received \"'+r+'\"');p+=z.prefix+r}}else p+=z}return p}}function Dz(e){return e.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g,\"\\\\$1\")}function Pz(e){return e.replace(/([=!:$\\/()])/g,\"\\\\$1\")}function jz(e,t){return e.keys=t,e}function Uz(e){return e&&e.sensitive?\"\":\"i\"}function Hz(e,t,n){yz(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,p=!1!==n.end,M=\"\",b=0;b<e.length;b++){var c=e[b];if(\"string\"==typeof c)M+=Dz(c);else{var z=Dz(c.prefix),r=\"(?:\"+c.pattern+\")\";t.push(c),c.repeat&&(r+=\"(?:\"+z+r+\")*\"),M+=r=c.optional?c.partial?z+\"(\"+r+\")?\":\"(?:\"+z+\"(\"+r+\"))?\":z+\"(\"+r+\")\"}}var a=Dz(n.delimiter||\"/\"),i=M.slice(-a.length)===a;return o||(M=(i?M.slice(0,-a.length):M)+\"(?:\"+a+\"(?=$))?\"),M+=p?\"$\":o&&i?\"\":\"(?=\"+a+\"|$)\",jz(new RegExp(\"^\"+M,Uz(n)),t)}function Fz(e,t,n){return yz(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\\((?!\\?)/g);if(n)for(var o=0;o<n.length;o++)t.push({name:o,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return jz(e,t)}(e,t):yz(e)?function(e,t,n){for(var o=[],p=0;p<e.length;p++)o.push(Fz(e[p],t,n).source);return jz(new RegExp(\"(?:\"+o.join(\"|\")+\")\",Uz(n)),t)}(e,t,n):function(e,t,n){return Hz(Sz(e,n),t,n)}(e,t,n)}Tz.parse=Ez,Tz.compile=Bz,Tz.tokensToFunction=Cz,Tz.tokensToRegExp=Xz;var Gz=Object.create(null);function $z(e,t,n){t=t||{};try{var o=Gz[e]||(Gz[e]=Tz.compile(e));return\"string\"==typeof t.pathMatch&&(t[0]=t.pathMatch),o(t,{pretty:!0})}catch(e){return\"\"}finally{delete t[0]}}function Vz(e,t,n,o){var p=\"string\"==typeof e?{path:e}:e;if(p._normalized)return p;if(p.name){var M=(p=cz({},e)).params;return M&&\"object\"==typeof M&&(p.params=cz({},M)),p}if(!p.path&&p.params&&t){(p=cz({},p))._normalized=!0;var b=cz(cz({},t.params),p.params);if(t.name)p.name=t.name,p.params=b;else if(t.matched.length){var c=t.matched[t.matched.length-1].path;p.path=$z(c,b,t.path)}else 0;return p}var z=function(e){var t=\"\",n=\"\",o=e.indexOf(\"#\");o>=0&&(t=e.slice(o),e=e.slice(0,o));var p=e.indexOf(\"?\");return p>=0&&(n=e.slice(p+1),e=e.slice(0,p)),{path:e,query:n,hash:t}}(p.path||\"\"),r=t&&t.path||\"/\",a=z.path?_z(z.path,r,n||p.append):r,i=function(e,t,n){void 0===t&&(t={});var o,p=n||Az;try{o=p(e||\"\")}catch(e){o={}}for(var M in t){var b=t[M];o[M]=Array.isArray(b)?b.map(sz):sz(b)}return o}(z.query,p.query,o&&o.options.parseQuery),O=p.hash||z.hash;return O&&\"#\"!==O.charAt(0)&&(O=\"#\"+O),{_normalized:!0,path:a,query:i,hash:O}}var Yz,Kz=function(){},Zz={name:\"RouterLink\",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:\"a\"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:\"page\"},event:{type:[String,Array],default:\"click\"}},render:function(e){var t=this,n=this.$router,o=this.$route,p=n.resolve(this.to,o,this.append),M=p.location,b=p.route,c=p.href,z={},r=n.options.linkActiveClass,a=n.options.linkExactActiveClass,i=null==r?\"router-link-active\":r,O=null==a?\"router-link-exact-active\":a,s=null==this.activeClass?i:this.activeClass,A=null==this.exactActiveClass?O:this.exactActiveClass,u=b.redirectedFrom?lz(null,Vz(b.redirectedFrom),null,n):b;z[A]=vz(o,u,this.exactPath),z[s]=this.exact||this.exactPath?z[A]:function(e,t){return 0===e.path.replace(dz,\"/\").indexOf(t.path.replace(dz,\"/\"))&&(!t.hash||e.hash===t.hash)&&function(e,t){for(var n in t)if(!(n in e))return!1;return!0}(e.query,t.query)}(o,u);var d=z[A]?this.ariaCurrentValue:null,l=function(e){Qz(e)&&(t.replace?n.replace(M,Kz):n.push(M,Kz))},f={click:Qz};Array.isArray(this.event)?this.event.forEach((function(e){f[e]=l})):f[this.event]=l;var q={class:z},W=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:b,navigate:l,isActive:z[s],isExactActive:z[A]});if(W){if(1===W.length)return W[0];if(W.length>1||!W.length)return 0===W.length?e():e(\"span\",{},W)}if(\"a\"===this.tag)q.on=f,q.attrs={href:c,\"aria-current\":d};else{var h=Jz(this.$slots.default);if(h){h.isStatic=!1;var v=h.data=cz({},h.data);for(var R in v.on=v.on||{},v.on){var m=v.on[R];R in f&&(v.on[R]=Array.isArray(m)?m:[m])}for(var g in f)g in v.on?v.on[g].push(f[g]):v.on[g]=l;var L=h.data.attrs=cz({},h.data.attrs);L.href=c,L[\"aria-current\"]=d}else q.on=f}return e(this.tag,q,this.$slots.default)}};function Qz(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.defaultPrevented||void 0!==e.button&&0!==e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){var t=e.currentTarget.getAttribute(\"target\");if(/\\b_blank\\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Jz(e){if(e)for(var t,n=0;n<e.length;n++){if(\"a\"===(t=e[n]).tag)return t;if(t.children&&(t=Jz(t.children)))return t}}var er=\"undefined\"!=typeof window;function tr(e,t,n,o,p){var M=t||[],b=n||Object.create(null),c=o||Object.create(null);e.forEach((function(e){nr(M,b,c,e,p)}));for(var z=0,r=M.length;z<r;z++)\"*\"===M[z]&&(M.push(M.splice(z,1)[0]),r--,z--);return{pathList:M,pathMap:b,nameMap:c}}function nr(e,t,n,o,p,M){var b=o.path,c=o.name;var z=o.pathToRegexpOptions||{},r=function(e,t,n){n||(e=e.replace(/\\/$/,\"\"));if(\"/\"===e[0])return e;if(null==t)return e;return Nz(t.path+\"/\"+e)}(b,p,z.strict);\"boolean\"==typeof o.caseSensitive&&(z.sensitive=o.caseSensitive);var a={path:r,regex:or(r,z),components:o.components||{default:o.component},alias:o.alias?\"string\"==typeof o.alias?[o.alias]:o.alias:[],instances:{},enteredCbs:{},name:c,parent:p,matchAs:M,redirect:o.redirect,beforeEnter:o.beforeEnter,meta:o.meta||{},props:null==o.props?{}:o.components?o.props:{default:o.props}};if(o.children&&o.children.forEach((function(o){var p=M?Nz(M+\"/\"+o.path):void 0;nr(e,t,n,o,a,p)})),t[a.path]||(e.push(a.path),t[a.path]=a),void 0!==o.alias)for(var i=Array.isArray(o.alias)?o.alias:[o.alias],O=0;O<i.length;++O){0;var s={path:i[O],children:o.children};nr(e,t,n,s,p,a.path||\"/\")}c&&(n[c]||(n[c]=a))}function or(e,t){return Tz(e,[],t)}function pr(e,t){var n=tr(e),o=n.pathList,p=n.pathMap,M=n.nameMap;function b(e,n,b){var c=Vz(e,n,!1,t),r=c.name;if(r){var a=M[r];if(!a)return z(null,c);var i=a.regex.keys.filter((function(e){return!e.optional})).map((function(e){return e.name}));if(\"object\"!=typeof c.params&&(c.params={}),n&&\"object\"==typeof n.params)for(var O in n.params)!(O in c.params)&&i.indexOf(O)>-1&&(c.params[O]=n.params[O]);return c.path=$z(a.path,c.params),z(a,c,b)}if(c.path){c.params={};for(var s=0;s<o.length;s++){var A=o[s],u=p[A];if(Mr(u.regex,c.path,c.params))return z(u,c,b)}}return z(null,c)}function c(e,n){var o=e.redirect,p=\"function\"==typeof o?o(lz(e,n,null,t)):o;if(\"string\"==typeof p&&(p={path:p}),!p||\"object\"!=typeof p)return z(null,n);var c=p,r=c.name,a=c.path,i=n.query,O=n.hash,s=n.params;if(i=c.hasOwnProperty(\"query\")?c.query:i,O=c.hasOwnProperty(\"hash\")?c.hash:O,s=c.hasOwnProperty(\"params\")?c.params:s,r){M[r];return b({_normalized:!0,name:r,query:i,hash:O,params:s},void 0,n)}if(a){var A=function(e,t){return _z(e,t.parent?t.parent.path:\"/\",!0)}(a,e);return b({_normalized:!0,path:$z(A,s),query:i,hash:O},void 0,n)}return z(null,n)}function z(e,n,o){return e&&e.redirect?c(e,o||n):e&&e.matchAs?function(e,t,n){var o=b({_normalized:!0,path:$z(n,t.params)});if(o){var p=o.matched,M=p[p.length-1];return t.params=o.params,z(M,t)}return z(null,t)}(0,n,e.matchAs):lz(e,n,o,t)}return{match:b,addRoute:function(e,t){var n=\"object\"!=typeof e?M[e]:void 0;tr([t||e],o,p,M,n),n&&n.alias.length&&tr(n.alias.map((function(e){return{path:e,children:[t]}})),o,p,M,n)},getRoutes:function(){return o.map((function(e){return p[e]}))},addRoutes:function(e){tr(e,o,p,M)}}}function Mr(e,t,n){var o=t.match(e);if(!o)return!1;if(!n)return!0;for(var p=1,M=o.length;p<M;++p){var b=e.keys[p-1];b&&(n[b.name||\"pathMatch\"]=\"string\"==typeof o[p]?Oz(o[p]):o[p])}return!0}var br=er&&window.performance&&window.performance.now?window.performance:Date;function cr(){return br.now().toFixed(3)}var zr=cr();function rr(){return zr}function ar(e){return zr=e}var ir=Object.create(null);function Or(){\"scrollRestoration\"in window.history&&(window.history.scrollRestoration=\"manual\");var e=window.location.protocol+\"//\"+window.location.host,t=window.location.href.replace(e,\"\"),n=cz({},window.history.state);return n.key=rr(),window.history.replaceState(n,\"\",t),window.addEventListener(\"popstate\",ur),function(){window.removeEventListener(\"popstate\",ur)}}function sr(e,t,n,o){if(e.app){var p=e.options.scrollBehavior;p&&e.app.$nextTick((function(){var M=function(){var e=rr();if(e)return ir[e]}(),b=p.call(e,t,n,o?M:null);b&&(\"function\"==typeof b.then?b.then((function(e){Wr(e,M)})).catch((function(e){0})):Wr(b,M))}))}}function Ar(){var e=rr();e&&(ir[e]={x:window.pageXOffset,y:window.pageYOffset})}function ur(e){Ar(),e.state&&e.state.key&&ar(e.state.key)}function dr(e){return fr(e.x)||fr(e.y)}function lr(e){return{x:fr(e.x)?e.x:window.pageXOffset,y:fr(e.y)?e.y:window.pageYOffset}}function fr(e){return\"number\"==typeof e}var qr=/^#\\d/;function Wr(e,t){var n,o=\"object\"==typeof e;if(o&&\"string\"==typeof e.selector){var p=qr.test(e.selector)?document.getElementById(e.selector.slice(1)):document.querySelector(e.selector);if(p){var M=e.offset&&\"object\"==typeof e.offset?e.offset:{};t=function(e,t){var n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{x:o.left-n.left-t.x,y:o.top-n.top-t.y}}(p,M={x:fr((n=M).x)?n.x:0,y:fr(n.y)?n.y:0})}else dr(e)&&(t=lr(e))}else o&&dr(e)&&(t=lr(e));t&&(\"scrollBehavior\"in document.documentElement.style?window.scrollTo({left:t.x,top:t.y,behavior:e.behavior}):window.scrollTo(t.x,t.y))}var hr,vr=er&&((-1===(hr=window.navigator.userAgent).indexOf(\"Android 2.\")&&-1===hr.indexOf(\"Android 4.0\")||-1===hr.indexOf(\"Mobile Safari\")||-1!==hr.indexOf(\"Chrome\")||-1!==hr.indexOf(\"Windows Phone\"))&&window.history&&\"function\"==typeof window.history.pushState);function Rr(e,t){Ar();var n=window.history;try{if(t){var o=cz({},n.state);o.key=rr(),n.replaceState(o,\"\",e)}else n.pushState({key:ar(cr())},\"\",e)}catch(n){window.location[t?\"replace\":\"assign\"](e)}}function mr(e){Rr(e,!0)}var gr={redirected:2,aborted:4,cancelled:8,duplicated:16};function Lr(e,t){return Nr(e,t,gr.redirected,'Redirected when going from \"'+e.fullPath+'\" to \"'+function(e){if(\"string\"==typeof e)return e;if(\"path\"in e)return e.path;var t={};return yr.forEach((function(n){n in e&&(t[n]=e[n])})),JSON.stringify(t,null,2)}(t)+'\" via a navigation guard.')}function _r(e,t){return Nr(e,t,gr.cancelled,'Navigation cancelled from \"'+e.fullPath+'\" to \"'+t.fullPath+'\" with a new navigation.')}function Nr(e,t,n,o){var p=new Error(o);return p._isRouter=!0,p.from=e,p.to=t,p.type=n,p}var yr=[\"params\",\"query\",\"hash\"];function Tr(e){return Object.prototype.toString.call(e).indexOf(\"Error\")>-1}function Er(e,t){return Tr(e)&&e._isRouter&&(null==t||e.type===t)}function Br(e,t,n){var o=function(p){p>=e.length?n():e[p]?t(e[p],(function(){o(p+1)})):o(p+1)};o(0)}function Cr(e){return function(t,n,o){var p=!1,M=0,b=null;Xr(e,(function(e,t,n,c){if(\"function\"==typeof e&&void 0===e.cid){p=!0,M++;var z,r=xr((function(t){var p;((p=t).__esModule||Sr&&\"Module\"===p[Symbol.toStringTag])&&(t=t.default),e.resolved=\"function\"==typeof t?t:Yz.extend(t),n.components[c]=t,--M<=0&&o()})),a=xr((function(e){var t=\"Failed to resolve async component \"+c+\": \"+e;b||(b=Tr(e)?e:new Error(t),o(b))}));try{z=e(r,a)}catch(e){a(e)}if(z)if(\"function\"==typeof z.then)z.then(r,a);else{var i=z.component;i&&\"function\"==typeof i.then&&i.then(r,a)}}})),p||o()}}function Xr(e,t){return wr(e.map((function(e){return Object.keys(e.components).map((function(n){return t(e.components[n],e.instances[n],e,n)}))})))}function wr(e){return Array.prototype.concat.apply([],e)}var Sr=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.toStringTag;function xr(e){var t=!1;return function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];if(!t)return t=!0,e.apply(this,n)}}var kr=function(e,t){this.router=e,this.base=function(e){if(!e)if(er){var t=document.querySelector(\"base\");e=(e=t&&t.getAttribute(\"href\")||\"/\").replace(/^https?:\\/\\/[^\\/]+/,\"\")}else e=\"/\";\"/\"!==e.charAt(0)&&(e=\"/\"+e);return e.replace(/\\/$/,\"\")}(t),this.current=qz,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ir(e,t,n,o){var p=Xr(e,(function(e,o,p,M){var b=function(e,t){\"function\"!=typeof e&&(e=Yz.extend(e));return e.options[t]}(e,t);if(b)return Array.isArray(b)?b.map((function(e){return n(e,o,p,M)})):n(b,o,p,M)}));return wr(o?p.reverse():p)}function Dr(e,t){if(t)return function(){return e.apply(t,arguments)}}kr.prototype.listen=function(e){this.cb=e},kr.prototype.onReady=function(e,t){this.ready?e():(this.readyCbs.push(e),t&&this.readyErrorCbs.push(t))},kr.prototype.onError=function(e){this.errorCbs.push(e)},kr.prototype.transitionTo=function(e,t,n){var o,p=this;try{o=this.router.match(e,this.current)}catch(e){throw this.errorCbs.forEach((function(t){t(e)})),e}var M=this.current;this.confirmTransition(o,(function(){p.updateRoute(o),t&&t(o),p.ensureURL(),p.router.afterHooks.forEach((function(e){e&&e(o,M)})),p.ready||(p.ready=!0,p.readyCbs.forEach((function(e){e(o)})))}),(function(e){n&&n(e),e&&!p.ready&&(Er(e,gr.redirected)&&M===qz||(p.ready=!0,p.readyErrorCbs.forEach((function(t){t(e)}))))}))},kr.prototype.confirmTransition=function(e,t,n){var o=this,p=this.current;this.pending=e;var M,b,c=function(e){!Er(e)&&Tr(e)&&o.errorCbs.length&&o.errorCbs.forEach((function(t){t(e)})),n&&n(e)},z=e.matched.length-1,r=p.matched.length-1;if(vz(e,p)&&z===r&&e.matched[z]===p.matched[r])return this.ensureURL(),e.hash&&sr(this.router,p,e,!1),c(((b=Nr(M=p,e,gr.duplicated,'Avoided redundant navigation to current location: \"'+M.fullPath+'\".')).name=\"NavigationDuplicated\",b));var a=function(e,t){var n,o=Math.max(e.length,t.length);for(n=0;n<o&&e[n]===t[n];n++);return{updated:t.slice(0,n),activated:t.slice(n),deactivated:e.slice(n)}}(this.current.matched,e.matched),i=a.updated,O=a.deactivated,s=a.activated,A=[].concat(function(e){return Ir(e,\"beforeRouteLeave\",Dr,!0)}(O),this.router.beforeHooks,function(e){return Ir(e,\"beforeRouteUpdate\",Dr)}(i),s.map((function(e){return e.beforeEnter})),Cr(s)),u=function(t,n){if(o.pending!==e)return c(_r(p,e));try{t(e,p,(function(t){!1===t?(o.ensureURL(!0),c(function(e,t){return Nr(e,t,gr.aborted,'Navigation aborted from \"'+e.fullPath+'\" to \"'+t.fullPath+'\" via a navigation guard.')}(p,e))):Tr(t)?(o.ensureURL(!0),c(t)):\"string\"==typeof t||\"object\"==typeof t&&(\"string\"==typeof t.path||\"string\"==typeof t.name)?(c(Lr(p,e)),\"object\"==typeof t&&t.replace?o.replace(t):o.push(t)):n(t)}))}catch(e){c(e)}};Br(A,u,(function(){var n=function(e){return Ir(e,\"beforeRouteEnter\",(function(e,t,n,o){return function(e,t,n){return function(o,p,M){return e(o,p,(function(e){\"function\"==typeof e&&(t.enteredCbs[n]||(t.enteredCbs[n]=[]),t.enteredCbs[n].push(e)),M(e)}))}}(e,n,o)}))}(s);Br(n.concat(o.router.resolveHooks),u,(function(){if(o.pending!==e)return c(_r(p,e));o.pending=null,t(e),o.router.app&&o.router.app.$nextTick((function(){mz(e)}))}))}))},kr.prototype.updateRoute=function(e){this.current=e,this.cb&&this.cb(e)},kr.prototype.setupListeners=function(){},kr.prototype.teardown=function(){this.listeners.forEach((function(e){e()})),this.listeners=[],this.current=qz,this.pending=null};var Pr=function(e){function t(t,n){e.call(this,t,n),this._startLocation=jr(this.base)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var t=this.router,n=t.options.scrollBehavior,o=vr&&n;o&&this.listeners.push(Or());var p=function(){var n=e.current,p=jr(e.base);e.current===qz&&p===e._startLocation||e.transitionTo(p,(function(e){o&&sr(t,e,n,!0)}))};window.addEventListener(\"popstate\",p),this.listeners.push((function(){window.removeEventListener(\"popstate\",p)}))}},t.prototype.go=function(e){window.history.go(e)},t.prototype.push=function(e,t,n){var o=this,p=this.current;this.transitionTo(e,(function(e){Rr(Nz(o.base+e.fullPath)),sr(o.router,e,p,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var o=this,p=this.current;this.transitionTo(e,(function(e){mr(Nz(o.base+e.fullPath)),sr(o.router,e,p,!1),t&&t(e)}),n)},t.prototype.ensureURL=function(e){if(jr(this.base)!==this.current.fullPath){var t=Nz(this.base+this.current.fullPath);e?Rr(t):mr(t)}},t.prototype.getCurrentLocation=function(){return jr(this.base)},t}(kr);function jr(e){var t=window.location.pathname,n=t.toLowerCase(),o=e.toLowerCase();return!e||n!==o&&0!==n.indexOf(Nz(o+\"/\"))||(t=t.slice(e.length)),(t||\"/\")+window.location.search+window.location.hash}var Ur=function(e){function t(t,n,o){e.call(this,t,n),o&&function(e){var t=jr(e);if(!/^\\/#/.test(t))return window.location.replace(Nz(e+\"/#\"+t)),!0}(this.base)||Hr()}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var t=this.router.options.scrollBehavior,n=vr&&t;n&&this.listeners.push(Or());var o=function(){var t=e.current;Hr()&&e.transitionTo(Fr(),(function(o){n&&sr(e.router,o,t,!0),vr||Vr(o.fullPath)}))},p=vr?\"popstate\":\"hashchange\";window.addEventListener(p,o),this.listeners.push((function(){window.removeEventListener(p,o)}))}},t.prototype.push=function(e,t,n){var o=this,p=this.current;this.transitionTo(e,(function(e){$r(e.fullPath),sr(o.router,e,p,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var o=this,p=this.current;this.transitionTo(e,(function(e){Vr(e.fullPath),sr(o.router,e,p,!1),t&&t(e)}),n)},t.prototype.go=function(e){window.history.go(e)},t.prototype.ensureURL=function(e){var t=this.current.fullPath;Fr()!==t&&(e?$r(t):Vr(t))},t.prototype.getCurrentLocation=function(){return Fr()},t}(kr);function Hr(){var e=Fr();return\"/\"===e.charAt(0)||(Vr(\"/\"+e),!1)}function Fr(){var e=window.location.href,t=e.indexOf(\"#\");return t<0?\"\":e=e.slice(t+1)}function Gr(e){var t=window.location.href,n=t.indexOf(\"#\");return(n>=0?t.slice(0,n):t)+\"#\"+e}function $r(e){vr?Rr(Gr(e)):window.location.hash=e}function Vr(e){vr?mr(Gr(e)):window.location.replace(Gr(e))}var Yr=function(e){function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.push=function(e,t,n){var o=this;this.transitionTo(e,(function(e){o.stack=o.stack.slice(0,o.index+1).concat(e),o.index++,t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var o=this;this.transitionTo(e,(function(e){o.stack=o.stack.slice(0,o.index).concat(e),t&&t(e)}),n)},t.prototype.go=function(e){var t=this,n=this.index+e;if(!(n<0||n>=this.stack.length)){var o=this.stack[n];this.confirmTransition(o,(function(){var e=t.current;t.index=n,t.updateRoute(o),t.router.afterHooks.forEach((function(t){t&&t(o,e)}))}),(function(e){Er(e,gr.duplicated)&&(t.index=n)}))}},t.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:\"/\"},t.prototype.ensureURL=function(){},t}(kr),Kr=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=pr(e.routes||[],this);var t=e.mode||\"hash\";switch(this.fallback=\"history\"===t&&!vr&&!1!==e.fallback,this.fallback&&(t=\"hash\"),er||(t=\"abstract\"),this.mode=t,t){case\"history\":this.history=new Pr(this,e.base);break;case\"hash\":this.history=new Ur(this,e.base,this.fallback);break;case\"abstract\":this.history=new Yr(this,e.base)}},Zr={currentRoute:{configurable:!0}};Kr.prototype.match=function(e,t,n){return this.matcher.match(e,t,n)},Zr.currentRoute.get=function(){return this.history&&this.history.current},Kr.prototype.init=function(e){var t=this;if(this.apps.push(e),e.$once(\"hook:destroyed\",(function(){var n=t.apps.indexOf(e);n>-1&&t.apps.splice(n,1),t.app===e&&(t.app=t.apps[0]||null),t.app||t.history.teardown()})),!this.app){this.app=e;var n=this.history;if(n instanceof Pr||n instanceof Ur){var o=function(e){n.setupListeners(),function(e){var o=n.current,p=t.options.scrollBehavior;vr&&p&&\"fullPath\"in e&&sr(t,e,o,!1)}(e)};n.transitionTo(n.getCurrentLocation(),o,o)}n.listen((function(e){t.apps.forEach((function(t){t._route=e}))}))}},Kr.prototype.beforeEach=function(e){return Jr(this.beforeHooks,e)},Kr.prototype.beforeResolve=function(e){return Jr(this.resolveHooks,e)},Kr.prototype.afterEach=function(e){return Jr(this.afterHooks,e)},Kr.prototype.onReady=function(e,t){this.history.onReady(e,t)},Kr.prototype.onError=function(e){this.history.onError(e)},Kr.prototype.push=function(e,t,n){var o=this;if(!t&&!n&&\"undefined\"!=typeof Promise)return new Promise((function(t,n){o.history.push(e,t,n)}));this.history.push(e,t,n)},Kr.prototype.replace=function(e,t,n){var o=this;if(!t&&!n&&\"undefined\"!=typeof Promise)return new Promise((function(t,n){o.history.replace(e,t,n)}));this.history.replace(e,t,n)},Kr.prototype.go=function(e){this.history.go(e)},Kr.prototype.back=function(){this.go(-1)},Kr.prototype.forward=function(){this.go(1)},Kr.prototype.getMatchedComponents=function(e){var t=e?e.matched?e:this.resolve(e).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(e){return Object.keys(e.components).map((function(t){return e.components[t]}))}))):[]},Kr.prototype.resolve=function(e,t,n){var o=Vz(e,t=t||this.history.current,n,this),p=this.match(o,t),M=p.redirectedFrom||p.fullPath,b=function(e,t,n){var o=\"hash\"===n?\"#\"+t:t;return e?Nz(e+\"/\"+o):o}(this.history.base,M,this.mode);return{location:o,route:p,href:b,normalizedTo:o,resolved:p}},Kr.prototype.getRoutes=function(){return this.matcher.getRoutes()},Kr.prototype.addRoute=function(e,t){this.matcher.addRoute(e,t),this.history.current!==qz&&this.history.transitionTo(this.history.getCurrentLocation())},Kr.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==qz&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Kr.prototype,Zr);var Qr=Kr;function Jr(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}Kr.install=function e(t){if(!e.installed||Yz!==t){e.installed=!0,Yz=t;var n=function(e){return void 0!==e},o=function(e,t){var o=e.$options._parentVnode;n(o)&&n(o=o.data)&&n(o=o.registerRouteInstance)&&o(e,t)};t.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),t.util.defineReactive(this,\"_route\",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,o(this,this)},destroyed:function(){o(this)}}),Object.defineProperty(t.prototype,\"$router\",{get:function(){return this._routerRoot._router}}),Object.defineProperty(t.prototype,\"$route\",{get:function(){return this._routerRoot._route}}),t.component(\"RouterView\",gz),t.component(\"RouterLink\",Zz);var p=t.config.optionMergeStrategies;p.beforeRouteEnter=p.beforeRouteLeave=p.beforeRouteUpdate=p.created}},Kr.version=\"3.6.5\",Kr.isNavigationFailure=Er,Kr.NavigationFailureType=gr,Kr.START_LOCATION=qz,er&&window.Vue&&window.Vue.use(Kr);var ea=n(4566),ta=n.n(ea),na=n(3379),oa=n.n(na),pa=n(1991),Ma={insert:\"head\",singleton:!1};oa()(pa.Z,Ma);pa.Z.locals;n(3734);var ba=document.head.querySelector('meta[name=\"csrf-token\"]');ba&&(Mz().defaults.headers.common[\"X-CSRF-TOKEN\"]=ba.content),no.use(Qr),window.Popper=n(8981).default,nz().tz.setDefault(Telescope.timezone),window.Telescope.basePath=\"/\"+window.Telescope.path;var ca=window.Telescope.basePath+\"/\";\"\"!==window.Telescope.path&&\"/\"!==window.Telescope.path||(ca=\"/\",window.Telescope.basePath=\"\");var za=new Qr({routes:bz,mode:\"history\",base:ca});no.component(\"vue-json-pretty\",ta()),no.component(\"related-entries\",n(9932).Z),no.component(\"index-screen\",n(8106).Z),no.component(\"preview-screen\",n(2986).Z),no.component(\"alert\",n(4518).Z),no.component(\"copy-clipboard\",n(7973).Z),no.mixin(oz),new no({el:\"#telescope\",router:za,data:function(){return{alert:{type:null,autoClose:0,message:\"\",confirmationProceed:null,confirmationCancel:null},autoLoadsNewEntries:\"1\"===localStorage.autoLoadsNewEntries,recording:Telescope.recording}},created:function(){window.addEventListener(\"keydown\",this.keydownListener)},destroyed:function(){window.removeEventListener(\"keydown\",this.keydownListener)},methods:{autoLoadNewEntries:function(){this.autoLoadsNewEntries?(this.autoLoadsNewEntries=!1,localStorage.autoLoadsNewEntries=0):(this.autoLoadsNewEntries=!0,localStorage.autoLoadsNewEntries=1)},toggleRecording:function(){Mz().post(Telescope.basePath+\"/telescope-api/toggle-recording\"),window.Telescope.recording=!Telescope.recording,this.recording=!this.recording},clearEntries:function(){(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&!confirm(\"Are you sure you want to delete all Telescope data?\")||Mz().delete(Telescope.basePath+\"/telescope-api/entries\").then((function(e){return location.reload()}))},keydownListener:function(e){e.metaKey&&\"k\"===e.key&&this.clearEntries(!1)}}})},601:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>o});const o={methods:{cacheActionTypeClass:function(e){return\"hit\"===e?\"success\":\"set\"===e?\"info\":\"forget\"===e?\"warning\":\"missed\"===e?\"danger\":void 0},composerTypeClass:function(e){return\"composer\"===e?\"info\":\"creator\"===e?\"success\":void 0},gateResultClass:function(e){return\"allowed\"===e?\"success\":\"denied\"===e?\"danger\":void 0},jobStatusClass:function(e){return\"pending\"===e?\"secondary\":\"processed\"===e?\"success\":\"failed\"===e?\"danger\":void 0},logLevelClass:function(e){return\"debug\"===e?\"success\":\"info\"===e?\"info\":\"notice\"===e?\"secondary\":\"warning\"===e?\"warning\":\"error\"===e||\"critical\"===e||\"alert\"===e||\"emergency\"===e?\"danger\":void 0},modelActionClass:function(e){return\"created\"==e?\"success\":\"updated\"==e?\"info\":\"retrieved\"==e?\"secondary\":\"deleted\"==e||\"forceDeleted\"==e?\"danger\":void 0},requestStatusClass:function(e){return e?e<300?\"success\":e<400?\"info\":e<500?\"warning\":e>=500?\"danger\":void 0:\"danger\"},requestMethodClass:function(e){return\"GET\"==e||\"OPTIONS\"==e?\"secondary\":\"POST\"==e||\"PATCH\"==e||\"PUT\"==e?\"info\":\"DELETE\"==e?\"danger\":void 0}}}},3734:function(e,t,n){!function(e,t,n){\"use strict\";function o(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var p=o(t),M=o(n);function b(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function c(e,t,n){return t&&b(e.prototype,t),n&&b(e,n),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function z(){return z=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},z.apply(this,arguments)}function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}var i=\"transitionend\",O=1e6,s=1e3;function A(e){return null==e?\"\"+e:{}.toString.call(e).match(/\\s([a-z]+)/i)[1].toLowerCase()}function u(){return{bindType:i,delegateType:i,handle:function(e){if(p.default(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}}}function d(e){var t=this,n=!1;return p.default(this).one(f.TRANSITION_END,(function(){n=!0})),setTimeout((function(){n||f.triggerTransitionEnd(t)}),e),this}function l(){p.default.fn.emulateTransitionEnd=d,p.default.event.special[f.TRANSITION_END]=u()}var f={TRANSITION_END:\"bsTransitionEnd\",getUID:function(e){do{e+=~~(Math.random()*O)}while(document.getElementById(e));return e},getSelectorFromElement:function(e){var t=e.getAttribute(\"data-target\");if(!t||\"#\"===t){var n=e.getAttribute(\"href\");t=n&&\"#\"!==n?n.trim():\"\"}try{return document.querySelector(t)?t:null}catch(e){return null}},getTransitionDurationFromElement:function(e){if(!e)return 0;var t=p.default(e).css(\"transition-duration\"),n=p.default(e).css(\"transition-delay\"),o=parseFloat(t),M=parseFloat(n);return o||M?(t=t.split(\",\")[0],n=n.split(\",\")[0],(parseFloat(t)+parseFloat(n))*s):0},reflow:function(e){return e.offsetHeight},triggerTransitionEnd:function(e){p.default(e).trigger(i)},supportsTransitionEnd:function(){return Boolean(i)},isElement:function(e){return(e[0]||e).nodeType},typeCheckConfig:function(e,t,n){for(var o in n)if(Object.prototype.hasOwnProperty.call(n,o)){var p=n[o],M=t[o],b=M&&f.isElement(M)?\"element\":A(M);if(!new RegExp(p).test(b))throw new Error(e.toUpperCase()+': Option \"'+o+'\" provided type \"'+b+'\" but expected type \"'+p+'\".')}},findShadowRoot:function(e){if(!document.documentElement.attachShadow)return null;if(\"function\"==typeof e.getRootNode){var t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?f.findShadowRoot(e.parentNode):null},jQueryDetection:function(){if(void 0===p.default)throw new TypeError(\"Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.\");var e=p.default.fn.jquery.split(\" \")[0].split(\".\"),t=1,n=2,o=9,M=1,b=4;if(e[0]<n&&e[1]<o||e[0]===t&&e[1]===o&&e[2]<M||e[0]>=b)throw new Error(\"Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0\")}};f.jQueryDetection(),l();var q=\"alert\",W=\"4.6.2\",h=\"bs.alert\",v=\".\"+h,R=\".data-api\",m=p.default.fn[q],g=\"alert\",L=\"fade\",_=\"show\",N=\"close\"+v,y=\"closed\"+v,T=\"click\"+v+R,E='[data-dismiss=\"alert\"]',B=function(){function e(e){this._element=e}var t=e.prototype;return t.close=function(e){var t=this._element;e&&(t=this._getRootElement(e)),this._triggerCloseEvent(t).isDefaultPrevented()||this._removeElement(t)},t.dispose=function(){p.default.removeData(this._element,h),this._element=null},t._getRootElement=function(e){var t=f.getSelectorFromElement(e),n=!1;return t&&(n=document.querySelector(t)),n||(n=p.default(e).closest(\".\"+g)[0]),n},t._triggerCloseEvent=function(e){var t=p.default.Event(N);return p.default(e).trigger(t),t},t._removeElement=function(e){var t=this;if(p.default(e).removeClass(_),p.default(e).hasClass(L)){var n=f.getTransitionDurationFromElement(e);p.default(e).one(f.TRANSITION_END,(function(n){return t._destroyElement(e,n)})).emulateTransitionEnd(n)}else this._destroyElement(e)},t._destroyElement=function(e){p.default(e).detach().trigger(y).remove()},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this),o=n.data(h);o||(o=new e(this),n.data(h,o)),\"close\"===t&&o[t](this)}))},e._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},c(e,null,[{key:\"VERSION\",get:function(){return W}}]),e}();p.default(document).on(T,E,B._handleDismiss(new B)),p.default.fn[q]=B._jQueryInterface,p.default.fn[q].Constructor=B,p.default.fn[q].noConflict=function(){return p.default.fn[q]=m,B._jQueryInterface};var C=\"button\",X=\"4.6.2\",w=\"bs.button\",S=\".\"+w,x=\".data-api\",k=p.default.fn[C],I=\"active\",D=\"btn\",P=\"focus\",j=\"click\"+S+x,U=\"focus\"+S+x+\" blur\"+S+x,H=\"load\"+S+x,F='[data-toggle^=\"button\"]',G='[data-toggle=\"buttons\"]',$='[data-toggle=\"button\"]',V='[data-toggle=\"buttons\"] .btn',Y='input:not([type=\"hidden\"])',K=\".active\",Z=\".btn\",Q=function(){function e(e){this._element=e,this.shouldAvoidTriggerChange=!1}var t=e.prototype;return t.toggle=function(){var e=!0,t=!0,n=p.default(this._element).closest(G)[0];if(n){var o=this._element.querySelector(Y);if(o){if(\"radio\"===o.type)if(o.checked&&this._element.classList.contains(I))e=!1;else{var M=n.querySelector(K);M&&p.default(M).removeClass(I)}e&&(\"checkbox\"!==o.type&&\"radio\"!==o.type||(o.checked=!this._element.classList.contains(I)),this.shouldAvoidTriggerChange||p.default(o).trigger(\"change\")),o.focus(),t=!1}}this._element.hasAttribute(\"disabled\")||this._element.classList.contains(\"disabled\")||(t&&this._element.setAttribute(\"aria-pressed\",!this._element.classList.contains(I)),e&&p.default(this._element).toggleClass(I))},t.dispose=function(){p.default.removeData(this._element,w),this._element=null},e._jQueryInterface=function(t,n){return this.each((function(){var o=p.default(this),M=o.data(w);M||(M=new e(this),o.data(w,M)),M.shouldAvoidTriggerChange=n,\"toggle\"===t&&M[t]()}))},c(e,null,[{key:\"VERSION\",get:function(){return X}}]),e}();p.default(document).on(j,F,(function(e){var t=e.target,n=t;if(p.default(t).hasClass(D)||(t=p.default(t).closest(Z)[0]),!t||t.hasAttribute(\"disabled\")||t.classList.contains(\"disabled\"))e.preventDefault();else{var o=t.querySelector(Y);if(o&&(o.hasAttribute(\"disabled\")||o.classList.contains(\"disabled\")))return void e.preventDefault();\"INPUT\"!==n.tagName&&\"LABEL\"===t.tagName||Q._jQueryInterface.call(p.default(t),\"toggle\",\"INPUT\"===n.tagName)}})).on(U,F,(function(e){var t=p.default(e.target).closest(Z)[0];p.default(t).toggleClass(P,/^focus(in)?$/.test(e.type))})),p.default(window).on(H,(function(){for(var e=[].slice.call(document.querySelectorAll(V)),t=0,n=e.length;t<n;t++){var o=e[t],p=o.querySelector(Y);p.checked||p.hasAttribute(\"checked\")?o.classList.add(I):o.classList.remove(I)}for(var M=0,b=(e=[].slice.call(document.querySelectorAll($))).length;M<b;M++){var c=e[M];\"true\"===c.getAttribute(\"aria-pressed\")?c.classList.add(I):c.classList.remove(I)}})),p.default.fn[C]=Q._jQueryInterface,p.default.fn[C].Constructor=Q,p.default.fn[C].noConflict=function(){return p.default.fn[C]=k,Q._jQueryInterface};var J=\"carousel\",ee=\"4.6.2\",te=\"bs.carousel\",ne=\".\"+te,oe=\".data-api\",pe=p.default.fn[J],Me=37,be=39,ce=500,ze=40,re=\"carousel\",ae=\"active\",ie=\"slide\",Oe=\"carousel-item-right\",se=\"carousel-item-left\",Ae=\"carousel-item-next\",ue=\"carousel-item-prev\",de=\"pointer-event\",le=\"next\",fe=\"prev\",qe=\"left\",We=\"right\",he=\"slide\"+ne,ve=\"slid\"+ne,Re=\"keydown\"+ne,me=\"mouseenter\"+ne,ge=\"mouseleave\"+ne,Le=\"touchstart\"+ne,_e=\"touchmove\"+ne,Ne=\"touchend\"+ne,ye=\"pointerdown\"+ne,Te=\"pointerup\"+ne,Ee=\"dragstart\"+ne,Be=\"load\"+ne+oe,Ce=\"click\"+ne+oe,Xe=\".active\",we=\".active.carousel-item\",Se=\".carousel-item\",xe=\".carousel-item img\",ke=\".carousel-item-next, .carousel-item-prev\",Ie=\".carousel-indicators\",De=\"[data-slide], [data-slide-to]\",Pe='[data-ride=\"carousel\"]',je={interval:5e3,keyboard:!0,slide:!1,pause:\"hover\",wrap:!0,touch:!0},Ue={interval:\"(number|boolean)\",keyboard:\"boolean\",slide:\"(boolean|string)\",pause:\"(string|boolean)\",wrap:\"boolean\",touch:\"boolean\"},He={TOUCH:\"touch\",PEN:\"pen\"},Fe=function(){function e(e,t){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(t),this._element=e,this._indicatorsElement=this._element.querySelector(Ie),this._touchSupported=\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var t=e.prototype;return t.next=function(){this._isSliding||this._slide(le)},t.nextWhenVisible=function(){var e=p.default(this._element);!document.hidden&&e.is(\":visible\")&&\"hidden\"!==e.css(\"visibility\")&&this.next()},t.prev=function(){this._isSliding||this._slide(fe)},t.pause=function(e){e||(this._isPaused=!0),this._element.querySelector(ke)&&(f.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(e){e||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(e){var t=this;this._activeElement=this._element.querySelector(we);var n=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0))if(this._isSliding)p.default(this._element).one(ve,(function(){return t.to(e)}));else{if(n===e)return this.pause(),void this.cycle();var o=e>n?le:fe;this._slide(o,this._items[e])}},t.dispose=function(){p.default(this._element).off(ne),p.default.removeData(this._element,te),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(e){return e=z({},je,e),f.typeCheckConfig(J,e,Ue),e},t._handleSwipe=function(){var e=Math.abs(this.touchDeltaX);if(!(e<=ze)){var t=e/this.touchDeltaX;this.touchDeltaX=0,t>0&&this.prev(),t<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&p.default(this._element).on(Re,(function(t){return e._keydown(t)})),\"hover\"===this._config.pause&&p.default(this._element).on(me,(function(t){return e.pause(t)})).on(ge,(function(t){return e.cycle(t)})),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var e=this;if(this._touchSupported){var t=function(t){e._pointerEvent&&He[t.originalEvent.pointerType.toUpperCase()]?e.touchStartX=t.originalEvent.clientX:e._pointerEvent||(e.touchStartX=t.originalEvent.touches[0].clientX)},n=function(t){e.touchDeltaX=t.originalEvent.touches&&t.originalEvent.touches.length>1?0:t.originalEvent.touches[0].clientX-e.touchStartX},o=function(t){e._pointerEvent&&He[t.originalEvent.pointerType.toUpperCase()]&&(e.touchDeltaX=t.originalEvent.clientX-e.touchStartX),e._handleSwipe(),\"hover\"===e._config.pause&&(e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout((function(t){return e.cycle(t)}),ce+e._config.interval))};p.default(this._element.querySelectorAll(xe)).on(Ee,(function(e){return e.preventDefault()})),this._pointerEvent?(p.default(this._element).on(ye,(function(e){return t(e)})),p.default(this._element).on(Te,(function(e){return o(e)})),this._element.classList.add(de)):(p.default(this._element).on(Le,(function(e){return t(e)})),p.default(this._element).on(_e,(function(e){return n(e)})),p.default(this._element).on(Ne,(function(e){return o(e)})))}},t._keydown=function(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case Me:e.preventDefault(),this.prev();break;case be:e.preventDefault(),this.next()}},t._getItemIndex=function(e){return this._items=e&&e.parentNode?[].slice.call(e.parentNode.querySelectorAll(Se)):[],this._items.indexOf(e)},t._getItemByDirection=function(e,t){var n=e===le,o=e===fe,p=this._getItemIndex(t),M=this._items.length-1;if((o&&0===p||n&&p===M)&&!this._config.wrap)return t;var b=(p+(e===fe?-1:1))%this._items.length;return-1===b?this._items[this._items.length-1]:this._items[b]},t._triggerSlideEvent=function(e,t){var n=this._getItemIndex(e),o=this._getItemIndex(this._element.querySelector(we)),M=p.default.Event(he,{relatedTarget:e,direction:t,from:o,to:n});return p.default(this._element).trigger(M),M},t._setActiveIndicatorElement=function(e){if(this._indicatorsElement){var t=[].slice.call(this._indicatorsElement.querySelectorAll(Xe));p.default(t).removeClass(ae);var n=this._indicatorsElement.children[this._getItemIndex(e)];n&&p.default(n).addClass(ae)}},t._updateInterval=function(){var e=this._activeElement||this._element.querySelector(we);if(e){var t=parseInt(e.getAttribute(\"data-interval\"),10);t?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=t):this._config.interval=this._config.defaultInterval||this._config.interval}},t._slide=function(e,t){var n,o,M,b=this,c=this._element.querySelector(we),z=this._getItemIndex(c),r=t||c&&this._getItemByDirection(e,c),a=this._getItemIndex(r),i=Boolean(this._interval);if(e===le?(n=se,o=Ae,M=qe):(n=Oe,o=ue,M=We),r&&p.default(r).hasClass(ae))this._isSliding=!1;else if(!this._triggerSlideEvent(r,M).isDefaultPrevented()&&c&&r){this._isSliding=!0,i&&this.pause(),this._setActiveIndicatorElement(r),this._activeElement=r;var O=p.default.Event(ve,{relatedTarget:r,direction:M,from:z,to:a});if(p.default(this._element).hasClass(ie)){p.default(r).addClass(o),f.reflow(r),p.default(c).addClass(n),p.default(r).addClass(n);var s=f.getTransitionDurationFromElement(c);p.default(c).one(f.TRANSITION_END,(function(){p.default(r).removeClass(n+\" \"+o).addClass(ae),p.default(c).removeClass(ae+\" \"+o+\" \"+n),b._isSliding=!1,setTimeout((function(){return p.default(b._element).trigger(O)}),0)})).emulateTransitionEnd(s)}else p.default(c).removeClass(ae),p.default(r).addClass(ae),this._isSliding=!1,p.default(this._element).trigger(O);i&&this.cycle()}},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this).data(te),o=z({},je,p.default(this).data());\"object\"==typeof t&&(o=z({},o,t));var M=\"string\"==typeof t?t:o.slide;if(n||(n=new e(this,o),p.default(this).data(te,n)),\"number\"==typeof t)n.to(t);else if(\"string\"==typeof M){if(void 0===n[M])throw new TypeError('No method named \"'+M+'\"');n[M]()}else o.interval&&o.ride&&(n.pause(),n.cycle())}))},e._dataApiClickHandler=function(t){var n=f.getSelectorFromElement(this);if(n){var o=p.default(n)[0];if(o&&p.default(o).hasClass(re)){var M=z({},p.default(o).data(),p.default(this).data()),b=this.getAttribute(\"data-slide-to\");b&&(M.interval=!1),e._jQueryInterface.call(p.default(o),M),b&&p.default(o).data(te).to(b),t.preventDefault()}}},c(e,null,[{key:\"VERSION\",get:function(){return ee}},{key:\"Default\",get:function(){return je}}]),e}();p.default(document).on(Ce,De,Fe._dataApiClickHandler),p.default(window).on(Be,(function(){for(var e=[].slice.call(document.querySelectorAll(Pe)),t=0,n=e.length;t<n;t++){var o=p.default(e[t]);Fe._jQueryInterface.call(o,o.data())}})),p.default.fn[J]=Fe._jQueryInterface,p.default.fn[J].Constructor=Fe,p.default.fn[J].noConflict=function(){return p.default.fn[J]=pe,Fe._jQueryInterface};var Ge=\"collapse\",$e=\"4.6.2\",Ve=\"bs.collapse\",Ye=\".\"+Ve,Ke=\".data-api\",Ze=p.default.fn[Ge],Qe=\"show\",Je=\"collapse\",et=\"collapsing\",tt=\"collapsed\",nt=\"width\",ot=\"height\",pt=\"show\"+Ye,Mt=\"shown\"+Ye,bt=\"hide\"+Ye,ct=\"hidden\"+Ye,zt=\"click\"+Ye+Ke,rt=\".show, .collapsing\",at='[data-toggle=\"collapse\"]',it={toggle:!0,parent:\"\"},Ot={toggle:\"boolean\",parent:\"(string|element)\"},st=function(){function e(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle=\"collapse\"][href=\"#'+e.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+e.id+'\"]'));for(var n=[].slice.call(document.querySelectorAll(at)),o=0,p=n.length;o<p;o++){var M=n[o],b=f.getSelectorFromElement(M),c=[].slice.call(document.querySelectorAll(b)).filter((function(t){return t===e}));null!==b&&c.length>0&&(this._selector=b,this._triggerArray.push(M))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=e.prototype;return t.toggle=function(){p.default(this._element).hasClass(Qe)?this.hide():this.show()},t.show=function(){var t,n,o=this;if(!(this._isTransitioning||p.default(this._element).hasClass(Qe)||(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(rt)).filter((function(e){return\"string\"==typeof o._config.parent?e.getAttribute(\"data-parent\")===o._config.parent:e.classList.contains(Je)}))).length&&(t=null),t&&(n=p.default(t).not(this._selector).data(Ve))&&n._isTransitioning))){var M=p.default.Event(pt);if(p.default(this._element).trigger(M),!M.isDefaultPrevented()){t&&(e._jQueryInterface.call(p.default(t).not(this._selector),\"hide\"),n||p.default(t).data(Ve,null));var b=this._getDimension();p.default(this._element).removeClass(Je).addClass(et),this._element.style[b]=0,this._triggerArray.length&&p.default(this._triggerArray).removeClass(tt).attr(\"aria-expanded\",!0),this.setTransitioning(!0);var c=function(){p.default(o._element).removeClass(et).addClass(Je+\" \"+Qe),o._element.style[b]=\"\",o.setTransitioning(!1),p.default(o._element).trigger(Mt)},z=\"scroll\"+(b[0].toUpperCase()+b.slice(1)),r=f.getTransitionDurationFromElement(this._element);p.default(this._element).one(f.TRANSITION_END,c).emulateTransitionEnd(r),this._element.style[b]=this._element[z]+\"px\"}}},t.hide=function(){var e=this;if(!this._isTransitioning&&p.default(this._element).hasClass(Qe)){var t=p.default.Event(bt);if(p.default(this._element).trigger(t),!t.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+\"px\",f.reflow(this._element),p.default(this._element).addClass(et).removeClass(Je+\" \"+Qe);var o=this._triggerArray.length;if(o>0)for(var M=0;M<o;M++){var b=this._triggerArray[M],c=f.getSelectorFromElement(b);null!==c&&(p.default([].slice.call(document.querySelectorAll(c))).hasClass(Qe)||p.default(b).addClass(tt).attr(\"aria-expanded\",!1))}this.setTransitioning(!0);var z=function(){e.setTransitioning(!1),p.default(e._element).removeClass(et).addClass(Je).trigger(ct)};this._element.style[n]=\"\";var r=f.getTransitionDurationFromElement(this._element);p.default(this._element).one(f.TRANSITION_END,z).emulateTransitionEnd(r)}}},t.setTransitioning=function(e){this._isTransitioning=e},t.dispose=function(){p.default.removeData(this._element,Ve),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(e){return(e=z({},it,e)).toggle=Boolean(e.toggle),f.typeCheckConfig(Ge,e,Ot),e},t._getDimension=function(){return p.default(this._element).hasClass(nt)?nt:ot},t._getParent=function(){var t,n=this;f.isElement(this._config.parent)?(t=this._config.parent,void 0!==this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var o='[data-toggle=\"collapse\"][data-parent=\"'+this._config.parent+'\"]',M=[].slice.call(t.querySelectorAll(o));return p.default(M).each((function(t,o){n._addAriaAndCollapsedClass(e._getTargetFromElement(o),[o])})),t},t._addAriaAndCollapsedClass=function(e,t){var n=p.default(e).hasClass(Qe);t.length&&p.default(t).toggleClass(tt,!n).attr(\"aria-expanded\",n)},e._getTargetFromElement=function(e){var t=f.getSelectorFromElement(e);return t?document.querySelector(t):null},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this),o=n.data(Ve),M=z({},it,n.data(),\"object\"==typeof t&&t?t:{});if(!o&&M.toggle&&\"string\"==typeof t&&/show|hide/.test(t)&&(M.toggle=!1),o||(o=new e(this,M),n.data(Ve,o)),\"string\"==typeof t){if(void 0===o[t])throw new TypeError('No method named \"'+t+'\"');o[t]()}}))},c(e,null,[{key:\"VERSION\",get:function(){return $e}},{key:\"Default\",get:function(){return it}}]),e}();p.default(document).on(zt,at,(function(e){\"A\"===e.currentTarget.tagName&&e.preventDefault();var t=p.default(this),n=f.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(n));p.default(o).each((function(){var e=p.default(this),n=e.data(Ve)?\"toggle\":t.data();st._jQueryInterface.call(e,n)}))})),p.default.fn[Ge]=st._jQueryInterface,p.default.fn[Ge].Constructor=st,p.default.fn[Ge].noConflict=function(){return p.default.fn[Ge]=Ze,st._jQueryInterface};var At=\"dropdown\",ut=\"4.6.2\",dt=\"bs.dropdown\",lt=\".\"+dt,ft=\".data-api\",qt=p.default.fn[At],Wt=27,ht=32,vt=9,Rt=38,mt=40,gt=3,Lt=new RegExp(Rt+\"|\"+mt+\"|\"+Wt),_t=\"disabled\",Nt=\"show\",yt=\"dropup\",Tt=\"dropright\",Et=\"dropleft\",Bt=\"dropdown-menu-right\",Ct=\"position-static\",Xt=\"hide\"+lt,wt=\"hidden\"+lt,St=\"show\"+lt,xt=\"shown\"+lt,kt=\"click\"+lt,It=\"click\"+lt+ft,Dt=\"keydown\"+lt+ft,Pt=\"keyup\"+lt+ft,jt='[data-toggle=\"dropdown\"]',Ut=\".dropdown form\",Ht=\".dropdown-menu\",Ft=\".navbar-nav\",Gt=\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",$t=\"top-start\",Vt=\"top-end\",Yt=\"bottom-start\",Kt=\"bottom-end\",Zt=\"right-start\",Qt=\"left-start\",Jt={offset:0,flip:!0,boundary:\"scrollParent\",reference:\"toggle\",display:\"dynamic\",popperConfig:null},en={offset:\"(number|string|function)\",flip:\"boolean\",boundary:\"(string|element)\",reference:\"(string|element)\",display:\"string\",popperConfig:\"(null|object)\"},tn=function(){function e(e,t){this._element=e,this._popper=null,this._config=this._getConfig(t),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=e.prototype;return t.toggle=function(){if(!this._element.disabled&&!p.default(this._element).hasClass(_t)){var t=p.default(this._menu).hasClass(Nt);e._clearMenus(),t||this.show(!0)}},t.show=function(t){if(void 0===t&&(t=!1),!(this._element.disabled||p.default(this._element).hasClass(_t)||p.default(this._menu).hasClass(Nt))){var n={relatedTarget:this._element},o=p.default.Event(St,n),b=e._getParentFromElement(this._element);if(p.default(b).trigger(o),!o.isDefaultPrevented()){if(!this._inNavbar&&t){if(void 0===M.default)throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");var c=this._element;\"parent\"===this._config.reference?c=b:f.isElement(this._config.reference)&&(c=this._config.reference,void 0!==this._config.reference.jquery&&(c=this._config.reference[0])),\"scrollParent\"!==this._config.boundary&&p.default(b).addClass(Ct),this._popper=new M.default(c,this._menu,this._getPopperConfig())}\"ontouchstart\"in document.documentElement&&0===p.default(b).closest(Ft).length&&p.default(document.body).children().on(\"mouseover\",null,p.default.noop),this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),p.default(this._menu).toggleClass(Nt),p.default(b).toggleClass(Nt).trigger(p.default.Event(xt,n))}}},t.hide=function(){if(!this._element.disabled&&!p.default(this._element).hasClass(_t)&&p.default(this._menu).hasClass(Nt)){var t={relatedTarget:this._element},n=p.default.Event(Xt,t),o=e._getParentFromElement(this._element);p.default(o).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),p.default(this._menu).toggleClass(Nt),p.default(o).toggleClass(Nt).trigger(p.default.Event(wt,t)))}},t.dispose=function(){p.default.removeData(this._element,dt),p.default(this._element).off(lt),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;p.default(this._element).on(kt,(function(t){t.preventDefault(),t.stopPropagation(),e.toggle()}))},t._getConfig=function(e){return e=z({},this.constructor.Default,p.default(this._element).data(),e),f.typeCheckConfig(At,e,this.constructor.DefaultType),e},t._getMenuElement=function(){if(!this._menu){var t=e._getParentFromElement(this._element);t&&(this._menu=t.querySelector(Ht))}return this._menu},t._getPlacement=function(){var e=p.default(this._element.parentNode),t=Yt;return e.hasClass(yt)?t=p.default(this._menu).hasClass(Bt)?Vt:$t:e.hasClass(Tt)?t=Zt:e.hasClass(Et)?t=Qt:p.default(this._menu).hasClass(Bt)&&(t=Kt),t},t._detectNavbar=function(){return p.default(this._element).closest(\".navbar\").length>0},t._getOffset=function(){var e=this,t={};return\"function\"==typeof this._config.offset?t.fn=function(t){return t.offsets=z({},t.offsets,e._config.offset(t.offsets,e._element)),t}:t.offset=this._config.offset,t},t._getPopperConfig=function(){var e={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return\"static\"===this._config.display&&(e.modifiers.applyStyle={enabled:!1}),z({},e,this._config.popperConfig)},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this).data(dt);if(n||(n=new e(this,\"object\"==typeof t?t:null),p.default(this).data(dt,n)),\"string\"==typeof t){if(void 0===n[t])throw new TypeError('No method named \"'+t+'\"');n[t]()}}))},e._clearMenus=function(t){if(!t||t.which!==gt&&(\"keyup\"!==t.type||t.which===vt))for(var n=[].slice.call(document.querySelectorAll(jt)),o=0,M=n.length;o<M;o++){var b=e._getParentFromElement(n[o]),c=p.default(n[o]).data(dt),z={relatedTarget:n[o]};if(t&&\"click\"===t.type&&(z.clickEvent=t),c){var r=c._menu;if(p.default(b).hasClass(Nt)&&!(t&&(\"click\"===t.type&&/input|textarea/i.test(t.target.tagName)||\"keyup\"===t.type&&t.which===vt)&&p.default.contains(b,t.target))){var a=p.default.Event(Xt,z);p.default(b).trigger(a),a.isDefaultPrevented()||(\"ontouchstart\"in document.documentElement&&p.default(document.body).children().off(\"mouseover\",null,p.default.noop),n[o].setAttribute(\"aria-expanded\",\"false\"),c._popper&&c._popper.destroy(),p.default(r).removeClass(Nt),p.default(b).removeClass(Nt).trigger(p.default.Event(wt,z)))}}}},e._getParentFromElement=function(e){var t,n=f.getSelectorFromElement(e);return n&&(t=document.querySelector(n)),t||e.parentNode},e._dataApiKeydownHandler=function(t){if(!(/input|textarea/i.test(t.target.tagName)?t.which===ht||t.which!==Wt&&(t.which!==mt&&t.which!==Rt||p.default(t.target).closest(Ht).length):!Lt.test(t.which))&&!this.disabled&&!p.default(this).hasClass(_t)){var n=e._getParentFromElement(this),o=p.default(n).hasClass(Nt);if(o||t.which!==Wt){if(t.preventDefault(),t.stopPropagation(),!o||t.which===Wt||t.which===ht)return t.which===Wt&&p.default(n.querySelector(jt)).trigger(\"focus\"),void p.default(this).trigger(\"click\");var M=[].slice.call(n.querySelectorAll(Gt)).filter((function(e){return p.default(e).is(\":visible\")}));if(0!==M.length){var b=M.indexOf(t.target);t.which===Rt&&b>0&&b--,t.which===mt&&b<M.length-1&&b++,b<0&&(b=0),M[b].focus()}}}},c(e,null,[{key:\"VERSION\",get:function(){return ut}},{key:\"Default\",get:function(){return Jt}},{key:\"DefaultType\",get:function(){return en}}]),e}();p.default(document).on(Dt,jt,tn._dataApiKeydownHandler).on(Dt,Ht,tn._dataApiKeydownHandler).on(It+\" \"+Pt,tn._clearMenus).on(It,jt,(function(e){e.preventDefault(),e.stopPropagation(),tn._jQueryInterface.call(p.default(this),\"toggle\")})).on(It,Ut,(function(e){e.stopPropagation()})),p.default.fn[At]=tn._jQueryInterface,p.default.fn[At].Constructor=tn,p.default.fn[At].noConflict=function(){return p.default.fn[At]=qt,tn._jQueryInterface};var nn=\"modal\",on=\"4.6.2\",pn=\"bs.modal\",Mn=\".\"+pn,bn=\".data-api\",cn=p.default.fn[nn],zn=27,rn=\"modal-dialog-scrollable\",an=\"modal-scrollbar-measure\",On=\"modal-backdrop\",sn=\"modal-open\",An=\"fade\",un=\"show\",dn=\"modal-static\",ln=\"hide\"+Mn,fn=\"hidePrevented\"+Mn,qn=\"hidden\"+Mn,Wn=\"show\"+Mn,hn=\"shown\"+Mn,vn=\"focusin\"+Mn,Rn=\"resize\"+Mn,mn=\"click.dismiss\"+Mn,gn=\"keydown.dismiss\"+Mn,Ln=\"mouseup.dismiss\"+Mn,_n=\"mousedown.dismiss\"+Mn,Nn=\"click\"+Mn+bn,yn=\".modal-dialog\",Tn=\".modal-body\",En='[data-toggle=\"modal\"]',Bn='[data-dismiss=\"modal\"]',Cn=\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",Xn=\".sticky-top\",wn={backdrop:!0,keyboard:!0,focus:!0,show:!0},Sn={backdrop:\"(boolean|string)\",keyboard:\"boolean\",focus:\"boolean\",show:\"boolean\"},xn=function(){function e(e,t){this._config=this._getConfig(t),this._element=e,this._dialog=e.querySelector(yn),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var t=e.prototype;return t.toggle=function(e){return this._isShown?this.hide():this.show(e)},t.show=function(e){var t=this;if(!this._isShown&&!this._isTransitioning){var n=p.default.Event(Wn,{relatedTarget:e});p.default(this._element).trigger(n),n.isDefaultPrevented()||(this._isShown=!0,p.default(this._element).hasClass(An)&&(this._isTransitioning=!0),this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),p.default(this._element).on(mn,Bn,(function(e){return t.hide(e)})),p.default(this._dialog).on(_n,(function(){p.default(t._element).one(Ln,(function(e){p.default(e.target).is(t._element)&&(t._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return t._showElement(e)})))}},t.hide=function(e){var t=this;if(e&&e.preventDefault(),this._isShown&&!this._isTransitioning){var n=p.default.Event(ln);if(p.default(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var o=p.default(this._element).hasClass(An);if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),p.default(document).off(vn),p.default(this._element).removeClass(un),p.default(this._element).off(mn),p.default(this._dialog).off(_n),o){var M=f.getTransitionDurationFromElement(this._element);p.default(this._element).one(f.TRANSITION_END,(function(e){return t._hideModal(e)})).emulateTransitionEnd(M)}else this._hideModal()}}},t.dispose=function(){[window,this._element,this._dialog].forEach((function(e){return p.default(e).off(Mn)})),p.default(document).off(vn),p.default.removeData(this._element,pn),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(e){return e=z({},wn,e),f.typeCheckConfig(nn,e,Sn),e},t._triggerBackdropTransition=function(){var e=this,t=p.default.Event(fn);if(p.default(this._element).trigger(t),!t.isDefaultPrevented()){var n=this._element.scrollHeight>document.documentElement.clientHeight;n||(this._element.style.overflowY=\"hidden\"),this._element.classList.add(dn);var o=f.getTransitionDurationFromElement(this._dialog);p.default(this._element).off(f.TRANSITION_END),p.default(this._element).one(f.TRANSITION_END,(function(){e._element.classList.remove(dn),n||p.default(e._element).one(f.TRANSITION_END,(function(){e._element.style.overflowY=\"\"})).emulateTransitionEnd(e._element,o)})).emulateTransitionEnd(o),this._element.focus()}},t._showElement=function(e){var t=this,n=p.default(this._element).hasClass(An),o=this._dialog?this._dialog.querySelector(Tn):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display=\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),p.default(this._dialog).hasClass(rn)&&o?o.scrollTop=0:this._element.scrollTop=0,n&&f.reflow(this._element),p.default(this._element).addClass(un),this._config.focus&&this._enforceFocus();var M=p.default.Event(hn,{relatedTarget:e}),b=function(){t._config.focus&&t._element.focus(),t._isTransitioning=!1,p.default(t._element).trigger(M)};if(n){var c=f.getTransitionDurationFromElement(this._dialog);p.default(this._dialog).one(f.TRANSITION_END,b).emulateTransitionEnd(c)}else b()},t._enforceFocus=function(){var e=this;p.default(document).off(vn).on(vn,(function(t){document!==t.target&&e._element!==t.target&&0===p.default(e._element).has(t.target).length&&e._element.focus()}))},t._setEscapeEvent=function(){var e=this;this._isShown?p.default(this._element).on(gn,(function(t){e._config.keyboard&&t.which===zn?(t.preventDefault(),e.hide()):e._config.keyboard||t.which!==zn||e._triggerBackdropTransition()})):this._isShown||p.default(this._element).off(gn)},t._setResizeEvent=function(){var e=this;this._isShown?p.default(window).on(Rn,(function(t){return e.handleUpdate(t)})):p.default(window).off(Rn)},t._hideModal=function(){var e=this;this._element.style.display=\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning=!1,this._showBackdrop((function(){p.default(document.body).removeClass(sn),e._resetAdjustments(),e._resetScrollbar(),p.default(e._element).trigger(qn)}))},t._removeBackdrop=function(){this._backdrop&&(p.default(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(e){var t=this,n=p.default(this._element).hasClass(An)?An:\"\";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement(\"div\"),this._backdrop.className=On,n&&this._backdrop.classList.add(n),p.default(this._backdrop).appendTo(document.body),p.default(this._element).on(mn,(function(e){t._ignoreBackdropClick?t._ignoreBackdropClick=!1:e.target===e.currentTarget&&(\"static\"===t._config.backdrop?t._triggerBackdropTransition():t.hide())})),n&&f.reflow(this._backdrop),p.default(this._backdrop).addClass(un),!e)return;if(!n)return void e();var o=f.getTransitionDurationFromElement(this._backdrop);p.default(this._backdrop).one(f.TRANSITION_END,e).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){p.default(this._backdrop).removeClass(un);var M=function(){t._removeBackdrop(),e&&e()};if(p.default(this._element).hasClass(An)){var b=f.getTransitionDurationFromElement(this._backdrop);p.default(this._backdrop).one(f.TRANSITION_END,M).emulateTransitionEnd(b)}else M()}else e&&e()},t._adjustDialog=function(){var e=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+\"px\"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+\"px\")},t._resetAdjustments=function(){this._element.style.paddingLeft=\"\",this._element.style.paddingRight=\"\"},t._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(e.left+e.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var e=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(Cn)),n=[].slice.call(document.querySelectorAll(Xn));p.default(t).each((function(t,n){var o=n.style.paddingRight,M=p.default(n).css(\"padding-right\");p.default(n).data(\"padding-right\",o).css(\"padding-right\",parseFloat(M)+e._scrollbarWidth+\"px\")})),p.default(n).each((function(t,n){var o=n.style.marginRight,M=p.default(n).css(\"margin-right\");p.default(n).data(\"margin-right\",o).css(\"margin-right\",parseFloat(M)-e._scrollbarWidth+\"px\")}));var o=document.body.style.paddingRight,M=p.default(document.body).css(\"padding-right\");p.default(document.body).data(\"padding-right\",o).css(\"padding-right\",parseFloat(M)+this._scrollbarWidth+\"px\")}p.default(document.body).addClass(sn)},t._resetScrollbar=function(){var e=[].slice.call(document.querySelectorAll(Cn));p.default(e).each((function(e,t){var n=p.default(t).data(\"padding-right\");p.default(t).removeData(\"padding-right\"),t.style.paddingRight=n||\"\"}));var t=[].slice.call(document.querySelectorAll(\"\"+Xn));p.default(t).each((function(e,t){var n=p.default(t).data(\"margin-right\");void 0!==n&&p.default(t).css(\"margin-right\",n).removeData(\"margin-right\")}));var n=p.default(document.body).data(\"padding-right\");p.default(document.body).removeData(\"padding-right\"),document.body.style.paddingRight=n||\"\"},t._getScrollbarWidth=function(){var e=document.createElement(\"div\");e.className=an,document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t},e._jQueryInterface=function(t,n){return this.each((function(){var o=p.default(this).data(pn),M=z({},wn,p.default(this).data(),\"object\"==typeof t&&t?t:{});if(o||(o=new e(this,M),p.default(this).data(pn,o)),\"string\"==typeof t){if(void 0===o[t])throw new TypeError('No method named \"'+t+'\"');o[t](n)}else M.show&&o.show(n)}))},c(e,null,[{key:\"VERSION\",get:function(){return on}},{key:\"Default\",get:function(){return wn}}]),e}();p.default(document).on(Nn,En,(function(e){var t,n=this,o=f.getSelectorFromElement(this);o&&(t=document.querySelector(o));var M=p.default(t).data(pn)?\"toggle\":z({},p.default(t).data(),p.default(this).data());\"A\"!==this.tagName&&\"AREA\"!==this.tagName||e.preventDefault();var b=p.default(t).one(Wn,(function(e){e.isDefaultPrevented()||b.one(qn,(function(){p.default(n).is(\":visible\")&&n.focus()}))}));xn._jQueryInterface.call(p.default(t),M,this)})),p.default.fn[nn]=xn._jQueryInterface,p.default.fn[nn].Constructor=xn,p.default.fn[nn].noConflict=function(){return p.default.fn[nn]=cn,xn._jQueryInterface};var kn=[\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"],In={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Dn=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Pn=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;function jn(e,t){var n=e.nodeName.toLowerCase();if(-1!==t.indexOf(n))return-1===kn.indexOf(n)||Boolean(Dn.test(e.nodeValue)||Pn.test(e.nodeValue));for(var o=t.filter((function(e){return e instanceof RegExp})),p=0,M=o.length;p<M;p++)if(o[p].test(n))return!0;return!1}function Un(e,t,n){if(0===e.length)return e;if(n&&\"function\"==typeof n)return n(e);for(var o=(new window.DOMParser).parseFromString(e,\"text/html\"),p=Object.keys(t),M=[].slice.call(o.body.querySelectorAll(\"*\")),b=function(e,n){var o=M[e],b=o.nodeName.toLowerCase();if(-1===p.indexOf(o.nodeName.toLowerCase()))return o.parentNode.removeChild(o),\"continue\";var c=[].slice.call(o.attributes),z=[].concat(t[\"*\"]||[],t[b]||[]);c.forEach((function(e){jn(e,z)||o.removeAttribute(e.nodeName)}))},c=0,z=M.length;c<z;c++)b(c);return o.body.innerHTML}var Hn=\"tooltip\",Fn=\"4.6.2\",Gn=\"bs.tooltip\",$n=\".\"+Gn,Vn=p.default.fn[Hn],Yn=\"bs-tooltip\",Kn=new RegExp(\"(^|\\\\s)\"+Yn+\"\\\\S+\",\"g\"),Zn=[\"sanitize\",\"whiteList\",\"sanitizeFn\"],Qn=\"fade\",Jn=\"show\",eo=\"show\",to=\"out\",no=\".tooltip-inner\",oo=\".arrow\",po=\"hover\",Mo=\"focus\",bo=\"click\",co=\"manual\",zo={AUTO:\"auto\",TOP:\"top\",RIGHT:\"right\",BOTTOM:\"bottom\",LEFT:\"left\"},ro={animation:!0,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,selector:!1,placement:\"top\",offset:0,container:!1,fallbackPlacement:\"flip\",boundary:\"scrollParent\",customClass:\"\",sanitize:!0,sanitizeFn:null,whiteList:In,popperConfig:null},ao={animation:\"boolean\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\",delay:\"(number|object)\",html:\"boolean\",selector:\"(string|boolean)\",placement:\"(string|function)\",offset:\"(number|string|function)\",container:\"(string|element|boolean)\",fallbackPlacement:\"(string|array)\",boundary:\"(string|element)\",customClass:\"(string|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",whiteList:\"object\",popperConfig:\"(null|object)\"},io={HIDE:\"hide\"+$n,HIDDEN:\"hidden\"+$n,SHOW:\"show\"+$n,SHOWN:\"shown\"+$n,INSERTED:\"inserted\"+$n,CLICK:\"click\"+$n,FOCUSIN:\"focusin\"+$n,FOCUSOUT:\"focusout\"+$n,MOUSEENTER:\"mouseenter\"+$n,MOUSELEAVE:\"mouseleave\"+$n},Oo=function(){function e(e,t){if(void 0===M.default)throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");this._isEnabled=!0,this._timeout=0,this._hoverState=\"\",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var t=e.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=p.default(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),p.default(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p.default(this.getTipElement()).hasClass(Jn))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),p.default.removeData(this.element,this.constructor.DATA_KEY),p.default(this.element).off(this.constructor.EVENT_KEY),p.default(this.element).closest(\".modal\").off(\"hide.bs.modal\",this._hideModalHandler),this.tip&&p.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if(\"none\"===p.default(this.element).css(\"display\"))throw new Error(\"Please use show on visible elements\");var t=p.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p.default(this.element).trigger(t);var n=f.findShadowRoot(this.element),o=p.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!o)return;var b=this.getTipElement(),c=f.getUID(this.constructor.NAME);b.setAttribute(\"id\",c),this.element.setAttribute(\"aria-describedby\",c),this.setContent(),this.config.animation&&p.default(b).addClass(Qn);var z=\"function\"==typeof this.config.placement?this.config.placement.call(this,b,this.element):this.config.placement,r=this._getAttachment(z);this.addAttachmentClass(r);var a=this._getContainer();p.default(b).data(this.constructor.DATA_KEY,this),p.default.contains(this.element.ownerDocument.documentElement,this.tip)||p.default(b).appendTo(a),p.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new M.default(this.element,b,this._getPopperConfig(r)),p.default(b).addClass(Jn),p.default(b).addClass(this.config.customClass),\"ontouchstart\"in document.documentElement&&p.default(document.body).children().on(\"mouseover\",null,p.default.noop);var i=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,p.default(e.element).trigger(e.constructor.Event.SHOWN),t===to&&e._leave(null,e)};if(p.default(this.tip).hasClass(Qn)){var O=f.getTransitionDurationFromElement(this.tip);p.default(this.tip).one(f.TRANSITION_END,i).emulateTransitionEnd(O)}else i()}},t.hide=function(e){var t=this,n=this.getTipElement(),o=p.default.Event(this.constructor.Event.HIDE),M=function(){t._hoverState!==eo&&n.parentNode&&n.parentNode.removeChild(n),t._cleanTipClass(),t.element.removeAttribute(\"aria-describedby\"),p.default(t.element).trigger(t.constructor.Event.HIDDEN),null!==t._popper&&t._popper.destroy(),e&&e()};if(p.default(this.element).trigger(o),!o.isDefaultPrevented()){if(p.default(n).removeClass(Jn),\"ontouchstart\"in document.documentElement&&p.default(document.body).children().off(\"mouseover\",null,p.default.noop),this._activeTrigger[bo]=!1,this._activeTrigger[Mo]=!1,this._activeTrigger[po]=!1,p.default(this.tip).hasClass(Qn)){var b=f.getTransitionDurationFromElement(n);p.default(n).one(f.TRANSITION_END,M).emulateTransitionEnd(b)}else M();this._hoverState=\"\"}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(e){p.default(this.getTipElement()).addClass(Yn+\"-\"+e)},t.getTipElement=function(){return this.tip=this.tip||p.default(this.config.template)[0],this.tip},t.setContent=function(){var e=this.getTipElement();this.setElementContent(p.default(e.querySelectorAll(no)),this.getTitle()),p.default(e).removeClass(Qn+\" \"+Jn)},t.setElementContent=function(e,t){\"object\"!=typeof t||!t.nodeType&&!t.jquery?this.config.html?(this.config.sanitize&&(t=Un(t,this.config.whiteList,this.config.sanitizeFn)),e.html(t)):e.text(t):this.config.html?p.default(t).parent().is(e)||e.empty().append(t):e.text(p.default(t).text())},t.getTitle=function(){var e=this.element.getAttribute(\"data-original-title\");return e||(e=\"function\"==typeof this.config.title?this.config.title.call(this.element):this.config.title),e},t._getPopperConfig=function(e){var t=this;return z({},{placement:e,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:oo},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){return t._handlePopperPlacementChange(e)}},this.config.popperConfig)},t._getOffset=function(){var e=this,t={};return\"function\"==typeof this.config.offset?t.fn=function(t){return t.offsets=z({},t.offsets,e.config.offset(t.offsets,e.element)),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:f.isElement(this.config.container)?p.default(this.config.container):p.default(document).find(this.config.container)},t._getAttachment=function(e){return zo[e.toUpperCase()]},t._setListeners=function(){var e=this;this.config.trigger.split(\" \").forEach((function(t){if(\"click\"===t)p.default(e.element).on(e.constructor.Event.CLICK,e.config.selector,(function(t){return e.toggle(t)}));else if(t!==co){var n=t===po?e.constructor.Event.MOUSEENTER:e.constructor.Event.FOCUSIN,o=t===po?e.constructor.Event.MOUSELEAVE:e.constructor.Event.FOCUSOUT;p.default(e.element).on(n,e.config.selector,(function(t){return e._enter(t)})).on(o,e.config.selector,(function(t){return e._leave(t)}))}})),this._hideModalHandler=function(){e.element&&e.hide()},p.default(this.element).closest(\".modal\").on(\"hide.bs.modal\",this._hideModalHandler),this.config.selector?this.config=z({},this.config,{trigger:\"manual\",selector:\"\"}):this._fixTitle()},t._fixTitle=function(){var e=typeof this.element.getAttribute(\"data-original-title\");(this.element.getAttribute(\"title\")||\"string\"!==e)&&(this.element.setAttribute(\"data-original-title\",this.element.getAttribute(\"title\")||\"\"),this.element.setAttribute(\"title\",\"\"))},t._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p.default(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p.default(e.currentTarget).data(n,t)),e&&(t._activeTrigger[\"focusin\"===e.type?Mo:po]=!0),p.default(t.getTipElement()).hasClass(Jn)||t._hoverState===eo?t._hoverState=eo:(clearTimeout(t._timeout),t._hoverState=eo,t.config.delay&&t.config.delay.show?t._timeout=setTimeout((function(){t._hoverState===eo&&t.show()}),t.config.delay.show):t.show())},t._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p.default(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p.default(e.currentTarget).data(n,t)),e&&(t._activeTrigger[\"focusout\"===e.type?Mo:po]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState=to,t.config.delay&&t.config.delay.hide?t._timeout=setTimeout((function(){t._hoverState===to&&t.hide()}),t.config.delay.hide):t.hide())},t._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},t._getConfig=function(e){var t=p.default(this.element).data();return Object.keys(t).forEach((function(e){-1!==Zn.indexOf(e)&&delete t[e]})),\"number\"==typeof(e=z({},this.constructor.Default,t,\"object\"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),\"number\"==typeof e.title&&(e.title=e.title.toString()),\"number\"==typeof e.content&&(e.content=e.content.toString()),f.typeCheckConfig(Hn,e,this.constructor.DefaultType),e.sanitize&&(e.template=Un(e.template,e.whiteList,e.sanitizeFn)),e},t._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},t._cleanTipClass=function(){var e=p.default(this.getTipElement()),t=e.attr(\"class\").match(Kn);null!==t&&t.length&&e.removeClass(t.join(\"\"))},t._handlePopperPlacementChange=function(e){this.tip=e.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},t._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute(\"x-placement\")&&(p.default(e).removeClass(Qn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this),o=n.data(Gn),M=\"object\"==typeof t&&t;if((o||!/dispose|hide/.test(t))&&(o||(o=new e(this,M),n.data(Gn,o)),\"string\"==typeof t)){if(void 0===o[t])throw new TypeError('No method named \"'+t+'\"');o[t]()}}))},c(e,null,[{key:\"VERSION\",get:function(){return Fn}},{key:\"Default\",get:function(){return ro}},{key:\"NAME\",get:function(){return Hn}},{key:\"DATA_KEY\",get:function(){return Gn}},{key:\"Event\",get:function(){return io}},{key:\"EVENT_KEY\",get:function(){return $n}},{key:\"DefaultType\",get:function(){return ao}}]),e}();p.default.fn[Hn]=Oo._jQueryInterface,p.default.fn[Hn].Constructor=Oo,p.default.fn[Hn].noConflict=function(){return p.default.fn[Hn]=Vn,Oo._jQueryInterface};var so=\"popover\",Ao=\"4.6.2\",uo=\"bs.popover\",lo=\".\"+uo,fo=p.default.fn[so],qo=\"bs-popover\",Wo=new RegExp(\"(^|\\\\s)\"+qo+\"\\\\S+\",\"g\"),ho=\"fade\",vo=\"show\",Ro=\".popover-header\",mo=\".popover-body\",go=z({},Oo.Default,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'}),Lo=z({},Oo.DefaultType,{content:\"(string|element|function)\"}),_o={HIDE:\"hide\"+lo,HIDDEN:\"hidden\"+lo,SHOW:\"show\"+lo,SHOWN:\"shown\"+lo,INSERTED:\"inserted\"+lo,CLICK:\"click\"+lo,FOCUSIN:\"focusin\"+lo,FOCUSOUT:\"focusout\"+lo,MOUSEENTER:\"mouseenter\"+lo,MOUSELEAVE:\"mouseleave\"+lo},No=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.isWithContent=function(){return this.getTitle()||this._getContent()},n.addAttachmentClass=function(e){p.default(this.getTipElement()).addClass(qo+\"-\"+e)},n.getTipElement=function(){return this.tip=this.tip||p.default(this.config.template)[0],this.tip},n.setContent=function(){var e=p.default(this.getTipElement());this.setElementContent(e.find(Ro),this.getTitle());var t=this._getContent();\"function\"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find(mo),t),e.removeClass(ho+\" \"+vo)},n._getContent=function(){return this.element.getAttribute(\"data-content\")||this.config.content},n._cleanTipClass=function(){var e=p.default(this.getTipElement()),t=e.attr(\"class\").match(Wo);null!==t&&t.length>0&&e.removeClass(t.join(\"\"))},t._jQueryInterface=function(e){return this.each((function(){var n=p.default(this).data(uo),o=\"object\"==typeof e?e:null;if((n||!/dispose|hide/.test(e))&&(n||(n=new t(this,o),p.default(this).data(uo,n)),\"string\"==typeof e)){if(void 0===n[e])throw new TypeError('No method named \"'+e+'\"');n[e]()}}))},c(t,null,[{key:\"VERSION\",get:function(){return Ao}},{key:\"Default\",get:function(){return go}},{key:\"NAME\",get:function(){return so}},{key:\"DATA_KEY\",get:function(){return uo}},{key:\"Event\",get:function(){return _o}},{key:\"EVENT_KEY\",get:function(){return lo}},{key:\"DefaultType\",get:function(){return Lo}}]),t}(Oo);p.default.fn[so]=No._jQueryInterface,p.default.fn[so].Constructor=No,p.default.fn[so].noConflict=function(){return p.default.fn[so]=fo,No._jQueryInterface};var yo=\"scrollspy\",To=\"4.6.2\",Eo=\"bs.scrollspy\",Bo=\".\"+Eo,Co=\".data-api\",Xo=p.default.fn[yo],wo=\"dropdown-item\",So=\"active\",xo=\"activate\"+Bo,ko=\"scroll\"+Bo,Io=\"load\"+Bo+Co,Do=\"offset\",Po=\"position\",jo='[data-spy=\"scroll\"]',Uo=\".nav, .list-group\",Ho=\".nav-link\",Fo=\".nav-item\",Go=\".list-group-item\",$o=\".dropdown\",Vo=\".dropdown-item\",Yo=\".dropdown-toggle\",Ko={offset:10,method:\"auto\",target:\"\"},Zo={offset:\"number\",method:\"string\",target:\"(string|element)\"},Qo=function(){function e(e,t){var n=this;this._element=e,this._scrollElement=\"BODY\"===e.tagName?window:e,this._config=this._getConfig(t),this._selector=this._config.target+\" \"+Ho+\",\"+this._config.target+\" \"+Go+\",\"+this._config.target+\" \"+Vo,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p.default(this._scrollElement).on(ko,(function(e){return n._process(e)})),this.refresh(),this._process()}var t=e.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?Do:Po,n=\"auto\"===this._config.method?t:this._config.method,o=n===Po?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(e){var t,M=f.getSelectorFromElement(e);if(M&&(t=document.querySelector(M)),t){var b=t.getBoundingClientRect();if(b.width||b.height)return[p.default(t)[n]().top+o,M]}return null})).filter(Boolean).sort((function(e,t){return e[0]-t[0]})).forEach((function(t){e._offsets.push(t[0]),e._targets.push(t[1])}))},t.dispose=function(){p.default.removeData(this._element,Eo),p.default(this._scrollElement).off(Bo),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(e){if(\"string\"!=typeof(e=z({},Ko,\"object\"==typeof e&&e?e:{})).target&&f.isElement(e.target)){var t=p.default(e.target).attr(\"id\");t||(t=f.getUID(yo),p.default(e.target).attr(\"id\",t)),e.target=\"#\"+t}return f.typeCheckConfig(yo,e,Zo),e},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var e=this._getScrollTop()+this._config.offset,t=this._getScrollHeight(),n=this._config.offset+t-this._getOffsetHeight();if(this._scrollHeight!==t&&this.refresh(),e>=n){var o=this._targets[this._targets.length-1];this._activeTarget!==o&&this._activate(o)}else{if(this._activeTarget&&e<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var p=this._offsets.length;p--;)this._activeTarget!==this._targets[p]&&e>=this._offsets[p]&&(void 0===this._offsets[p+1]||e<this._offsets[p+1])&&this._activate(this._targets[p])}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(\",\").map((function(t){return t+'[data-target=\"'+e+'\"],'+t+'[href=\"'+e+'\"]'})),n=p.default([].slice.call(document.querySelectorAll(t.join(\",\"))));n.hasClass(wo)?(n.closest($o).find(Yo).addClass(So),n.addClass(So)):(n.addClass(So),n.parents(Uo).prev(Ho+\", \"+Go).addClass(So),n.parents(Uo).prev(Fo).children(Ho).addClass(So)),p.default(this._scrollElement).trigger(xo,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(e){return e.classList.contains(So)})).forEach((function(e){return e.classList.remove(So)}))},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this).data(Eo);if(n||(n=new e(this,\"object\"==typeof t&&t),p.default(this).data(Eo,n)),\"string\"==typeof t){if(void 0===n[t])throw new TypeError('No method named \"'+t+'\"');n[t]()}}))},c(e,null,[{key:\"VERSION\",get:function(){return To}},{key:\"Default\",get:function(){return Ko}}]),e}();p.default(window).on(Io,(function(){for(var e=[].slice.call(document.querySelectorAll(jo)),t=e.length;t--;){var n=p.default(e[t]);Qo._jQueryInterface.call(n,n.data())}})),p.default.fn[yo]=Qo._jQueryInterface,p.default.fn[yo].Constructor=Qo,p.default.fn[yo].noConflict=function(){return p.default.fn[yo]=Xo,Qo._jQueryInterface};var Jo=\"tab\",ep=\"4.6.2\",tp=\"bs.tab\",np=\".\"+tp,op=\".data-api\",pp=p.default.fn[Jo],Mp=\"dropdown-menu\",bp=\"active\",cp=\"disabled\",zp=\"fade\",rp=\"show\",ap=\"hide\"+np,ip=\"hidden\"+np,Op=\"show\"+np,sp=\"shown\"+np,Ap=\"click\"+np+op,up=\".dropdown\",dp=\".nav, .list-group\",lp=\".active\",fp=\"> li > .active\",qp='[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',Wp=\".dropdown-toggle\",hp=\"> .dropdown-menu .active\",vp=function(){function e(e){this._element=e}var t=e.prototype;return t.show=function(){var e=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&p.default(this._element).hasClass(bp)||p.default(this._element).hasClass(cp)||this._element.hasAttribute(\"disabled\"))){var t,n,o=p.default(this._element).closest(dp)[0],M=f.getSelectorFromElement(this._element);if(o){var b=\"UL\"===o.nodeName||\"OL\"===o.nodeName?fp:lp;n=(n=p.default.makeArray(p.default(o).find(b)))[n.length-1]}var c=p.default.Event(ap,{relatedTarget:this._element}),z=p.default.Event(Op,{relatedTarget:n});if(n&&p.default(n).trigger(c),p.default(this._element).trigger(z),!z.isDefaultPrevented()&&!c.isDefaultPrevented()){M&&(t=document.querySelector(M)),this._activate(this._element,o);var r=function(){var t=p.default.Event(ip,{relatedTarget:e._element}),o=p.default.Event(sp,{relatedTarget:n});p.default(n).trigger(t),p.default(e._element).trigger(o)};t?this._activate(t,t.parentNode,r):r()}}},t.dispose=function(){p.default.removeData(this._element,tp),this._element=null},t._activate=function(e,t,n){var o=this,M=(!t||\"UL\"!==t.nodeName&&\"OL\"!==t.nodeName?p.default(t).children(lp):p.default(t).find(fp))[0],b=n&&M&&p.default(M).hasClass(zp),c=function(){return o._transitionComplete(e,M,n)};if(M&&b){var z=f.getTransitionDurationFromElement(M);p.default(M).removeClass(rp).one(f.TRANSITION_END,c).emulateTransitionEnd(z)}else c()},t._transitionComplete=function(e,t,n){if(t){p.default(t).removeClass(bp);var o=p.default(t.parentNode).find(hp)[0];o&&p.default(o).removeClass(bp),\"tab\"===t.getAttribute(\"role\")&&t.setAttribute(\"aria-selected\",!1)}p.default(e).addClass(bp),\"tab\"===e.getAttribute(\"role\")&&e.setAttribute(\"aria-selected\",!0),f.reflow(e),e.classList.contains(zp)&&e.classList.add(rp);var M=e.parentNode;if(M&&\"LI\"===M.nodeName&&(M=M.parentNode),M&&p.default(M).hasClass(Mp)){var b=p.default(e).closest(up)[0];if(b){var c=[].slice.call(b.querySelectorAll(Wp));p.default(c).addClass(bp)}e.setAttribute(\"aria-expanded\",!0)}n&&n()},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this),o=n.data(tp);if(o||(o=new e(this),n.data(tp,o)),\"string\"==typeof t){if(void 0===o[t])throw new TypeError('No method named \"'+t+'\"');o[t]()}}))},c(e,null,[{key:\"VERSION\",get:function(){return ep}}]),e}();p.default(document).on(Ap,qp,(function(e){e.preventDefault(),vp._jQueryInterface.call(p.default(this),\"show\")})),p.default.fn[Jo]=vp._jQueryInterface,p.default.fn[Jo].Constructor=vp,p.default.fn[Jo].noConflict=function(){return p.default.fn[Jo]=pp,vp._jQueryInterface};var Rp=\"toast\",mp=\"4.6.2\",gp=\"bs.toast\",Lp=\".\"+gp,_p=p.default.fn[Rp],Np=\"fade\",yp=\"hide\",Tp=\"show\",Ep=\"showing\",Bp=\"click.dismiss\"+Lp,Cp=\"hide\"+Lp,Xp=\"hidden\"+Lp,wp=\"show\"+Lp,Sp=\"shown\"+Lp,xp='[data-dismiss=\"toast\"]',kp={animation:!0,autohide:!0,delay:500},Ip={animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},Dp=function(){function e(e,t){this._element=e,this._config=this._getConfig(t),this._timeout=null,this._setListeners()}var t=e.prototype;return t.show=function(){var e=this,t=p.default.Event(wp);if(p.default(this._element).trigger(t),!t.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add(Np);var n=function(){e._element.classList.remove(Ep),e._element.classList.add(Tp),p.default(e._element).trigger(Sp),e._config.autohide&&(e._timeout=setTimeout((function(){e.hide()}),e._config.delay))};if(this._element.classList.remove(yp),f.reflow(this._element),this._element.classList.add(Ep),this._config.animation){var o=f.getTransitionDurationFromElement(this._element);p.default(this._element).one(f.TRANSITION_END,n).emulateTransitionEnd(o)}else n()}},t.hide=function(){if(this._element.classList.contains(Tp)){var e=p.default.Event(Cp);p.default(this._element).trigger(e),e.isDefaultPrevented()||this._close()}},t.dispose=function(){this._clearTimeout(),this._element.classList.contains(Tp)&&this._element.classList.remove(Tp),p.default(this._element).off(Bp),p.default.removeData(this._element,gp),this._element=null,this._config=null},t._getConfig=function(e){return e=z({},kp,p.default(this._element).data(),\"object\"==typeof e&&e?e:{}),f.typeCheckConfig(Rp,e,this.constructor.DefaultType),e},t._setListeners=function(){var e=this;p.default(this._element).on(Bp,xp,(function(){return e.hide()}))},t._close=function(){var e=this,t=function(){e._element.classList.add(yp),p.default(e._element).trigger(Xp)};if(this._element.classList.remove(Tp),this._config.animation){var n=f.getTransitionDurationFromElement(this._element);p.default(this._element).one(f.TRANSITION_END,t).emulateTransitionEnd(n)}else t()},t._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},e._jQueryInterface=function(t){return this.each((function(){var n=p.default(this),o=n.data(gp);if(o||(o=new e(this,\"object\"==typeof t&&t),n.data(gp,o)),\"string\"==typeof t){if(void 0===o[t])throw new TypeError('No method named \"'+t+'\"');o[t](this)}}))},c(e,null,[{key:\"VERSION\",get:function(){return mp}},{key:\"DefaultType\",get:function(){return Ip}},{key:\"Default\",get:function(){return kp}}]),e}();p.default.fn[Rp]=Dp._jQueryInterface,p.default.fn[Rp].Constructor=Dp,p.default.fn[Rp].noConflict=function(){return p.default.fn[Rp]=_p,Dp._jQueryInterface},e.Alert=B,e.Button=Q,e.Carousel=Fe,e.Collapse=st,e.Dropdown=tn,e.Modal=xn,e.Popover=No,e.Scrollspy=Qo,e.Tab=vp,e.Toast=Dp,e.Tooltip=Oo,e.Util=f,Object.defineProperty(e,\"__esModule\",{value:!0})}(t,n(9755),n(8981))},640:(e,t,n)=>{\"use strict\";var o=n(1742),p={\"text/plain\":\"Text\",\"text/html\":\"Url\",default:\"Text\"};e.exports=function(e,t){var n,M,b,c,z,r=!1;t||(t={}),t.debug;try{if(M=o(),b=document.createRange(),c=document.getSelection(),(z=document.createElement(\"span\")).textContent=e,z.ariaHidden=\"true\",z.style.all=\"unset\",z.style.position=\"fixed\",z.style.top=0,z.style.clip=\"rect(0, 0, 0, 0)\",z.style.whiteSpace=\"pre\",z.style.webkitUserSelect=\"text\",z.style.MozUserSelect=\"text\",z.style.msUserSelect=\"text\",z.style.userSelect=\"text\",z.addEventListener(\"copy\",(function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),void 0===n.clipboardData){window.clipboardData.clearData();var o=p[t.format]||p.default;window.clipboardData.setData(o,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))})),document.body.appendChild(z),b.selectNodeContents(z),c.addRange(b),!document.execCommand(\"copy\"))throw new Error(\"copy command was unsuccessful\");r=!0}catch(o){try{window.clipboardData.setData(t.format||\"text\",e),t.onCopy&&t.onCopy(window.clipboardData),r=!0}catch(o){n=function(e){var t=(/mac os x/i.test(navigator.userAgent)?\"⌘\":\"Ctrl\")+\"+C\";return e.replace(/#{\\s*key\\s*}/g,t)}(\"message\"in t?t.message:\"Copy to clipboard: #{key}, Enter\"),window.prompt(n,e)}}finally{c&&(\"function\"==typeof c.removeRange?c.removeRange(b):c.removeAllRanges()),z&&document.body.removeChild(z),M()}return r}},9755:function(e,t){var n;!function(t,n){\"use strict\";\"object\"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(t)}(\"undefined\"!=typeof window?window:this,(function(o,p){\"use strict\";var M=[],b=Object.getPrototypeOf,c=M.slice,z=M.flat?function(e){return M.flat.call(e)}:function(e){return M.concat.apply([],e)},r=M.push,a=M.indexOf,i={},O=i.toString,s=i.hasOwnProperty,A=s.toString,u=A.call(Object),d={},l=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType&&\"function\"!=typeof e.item},f=function(e){return null!=e&&e===e.window},q=o.document,W={type:!0,src:!0,nonce:!0,noModule:!0};function h(e,t,n){var o,p,M=(n=n||q).createElement(\"script\");if(M.text=e,t)for(o in W)(p=t[o]||t.getAttribute&&t.getAttribute(o))&&M.setAttribute(o,p);n.head.appendChild(M).parentNode.removeChild(M)}function v(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?i[O.call(e)]||\"object\":typeof e}var R=\"3.7.1\",m=/HTML$/i,g=function(e,t){return new g.fn.init(e,t)};function L(e){var t=!!e&&\"length\"in e&&e.length,n=v(e);return!l(e)&&!f(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function _(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}g.fn=g.prototype={jquery:R,constructor:g,length:0,toArray:function(){return c.call(this)},get:function(e){return null==e?c.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=g.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return g.each(this,e)},map:function(e){return this.pushStack(g.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(c.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(g.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(g.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:r,sort:M.sort,splice:M.splice},g.extend=g.fn.extend=function(){var e,t,n,o,p,M,b=arguments[0]||{},c=1,z=arguments.length,r=!1;for(\"boolean\"==typeof b&&(r=b,b=arguments[c]||{},c++),\"object\"==typeof b||l(b)||(b={}),c===z&&(b=this,c--);c<z;c++)if(null!=(e=arguments[c]))for(t in e)o=e[t],\"__proto__\"!==t&&b!==o&&(r&&o&&(g.isPlainObject(o)||(p=Array.isArray(o)))?(n=b[t],M=p&&!Array.isArray(n)?[]:p||g.isPlainObject(n)?n:{},p=!1,b[t]=g.extend(r,M,o)):void 0!==o&&(b[t]=o));return b},g.extend({expando:\"jQuery\"+(R+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==O.call(e))&&(!(t=b(e))||\"function\"==typeof(n=s.call(t,\"constructor\")&&t.constructor)&&A.call(n)===u)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){h(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,o=0;if(L(e))for(n=e.length;o<n&&!1!==t.call(e[o],o,e[o]);o++);else for(o in e)if(!1===t.call(e[o],o,e[o]))break;return e},text:function(e){var t,n=\"\",o=0,p=e.nodeType;if(!p)for(;t=e[o++];)n+=g.text(t);return 1===p||11===p?e.textContent:9===p?e.documentElement.textContent:3===p||4===p?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(L(Object(e))?g.merge(n,\"string\"==typeof e?[e]:e):r.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:a.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!m.test(t||n&&n.nodeName||\"HTML\")},merge:function(e,t){for(var n=+t.length,o=0,p=e.length;o<n;o++)e[p++]=t[o];return e.length=p,e},grep:function(e,t,n){for(var o=[],p=0,M=e.length,b=!n;p<M;p++)!t(e[p],p)!==b&&o.push(e[p]);return o},map:function(e,t,n){var o,p,M=0,b=[];if(L(e))for(o=e.length;M<o;M++)null!=(p=t(e[M],M,n))&&b.push(p);else for(M in e)null!=(p=t(e[M],M,n))&&b.push(p);return z(b)},guid:1,support:d}),\"function\"==typeof Symbol&&(g.fn[Symbol.iterator]=M[Symbol.iterator]),g.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),(function(e,t){i[\"[object \"+t+\"]\"]=t.toLowerCase()}));var N=M.pop,y=M.sort,T=M.splice,E=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",B=new RegExp(\"^\"+E+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+E+\"+$\",\"g\");g.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var C=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;function X(e,t){return t?\"\\0\"===e?\"�\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e}g.escapeSelector=function(e){return(e+\"\").replace(C,X)};var w=q,S=r;!function(){var e,t,n,p,b,z,r,i,O,A,u=S,l=g.expando,f=0,q=0,W=ee(),h=ee(),v=ee(),R=ee(),m=function(e,t){return e===t&&(b=!0),0},L=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",C=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+E+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",X=\"\\\\[\"+E+\"*(\"+C+\")(?:\"+E+\"*([*^$|!~]?=)\"+E+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+C+\"))|)\"+E+\"*\\\\]\",x=\":(\"+C+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+X+\")*)|.*)\\\\)|)\",k=new RegExp(E+\"+\",\"g\"),I=new RegExp(\"^\"+E+\"*,\"+E+\"*\"),D=new RegExp(\"^\"+E+\"*([>+~]|\"+E+\")\"+E+\"*\"),P=new RegExp(E+\"|>\"),j=new RegExp(x),U=new RegExp(\"^\"+C+\"$\"),H={ID:new RegExp(\"^#(\"+C+\")\"),CLASS:new RegExp(\"^\\\\.(\"+C+\")\"),TAG:new RegExp(\"^(\"+C+\"|[*])\"),ATTR:new RegExp(\"^\"+X),PSEUDO:new RegExp(\"^\"+x),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+E+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+E+\"*(?:([+-]|)\"+E+\"*(\\\\d+)|))\"+E+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+L+\")$\",\"i\"),needsContext:new RegExp(\"^\"+E+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+E+\"*((?:-\\\\d)?\\\\d*)\"+E+\"*\\\\)|)(?=[^-]|$)\",\"i\")},F=/^(?:input|select|textarea|button)$/i,G=/^h\\d$/i,$=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,V=/[+~]/,Y=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+E+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),K=function(e,t){var n=\"0x\"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},Z=function(){ze()},Q=Oe((function(e){return!0===e.disabled&&_(e,\"fieldset\")}),{dir:\"parentNode\",next:\"legend\"});try{u.apply(M=c.call(w.childNodes),w.childNodes),M[w.childNodes.length].nodeType}catch(e){u={apply:function(e,t){S.apply(e,c.call(t))},call:function(e){S.apply(e,c.call(arguments,1))}}}function J(e,t,n,o){var p,M,b,c,r,a,s,A=t&&t.ownerDocument,f=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==f&&9!==f&&11!==f)return n;if(!o&&(ze(t),t=t||z,i)){if(11!==f&&(r=$.exec(e)))if(p=r[1]){if(9===f){if(!(b=t.getElementById(p)))return n;if(b.id===p)return u.call(n,b),n}else if(A&&(b=A.getElementById(p))&&J.contains(t,b)&&b.id===p)return u.call(n,b),n}else{if(r[2])return u.apply(n,t.getElementsByTagName(e)),n;if((p=r[3])&&t.getElementsByClassName)return u.apply(n,t.getElementsByClassName(p)),n}if(!(R[e+\" \"]||O&&O.test(e))){if(s=e,A=t,1===f&&(P.test(e)||D.test(e))){for((A=V.test(e)&&ce(t.parentNode)||t)==t&&d.scope||((c=t.getAttribute(\"id\"))?c=g.escapeSelector(c):t.setAttribute(\"id\",c=l)),M=(a=ae(e)).length;M--;)a[M]=(c?\"#\"+c:\":scope\")+\" \"+ie(a[M]);s=a.join(\",\")}try{return u.apply(n,A.querySelectorAll(s)),n}catch(t){R(e,!0)}finally{c===l&&t.removeAttribute(\"id\")}}}return fe(e.replace(B,\"$1\"),t,n,o)}function ee(){var e=[];return function n(o,p){return e.push(o+\" \")>t.cacheLength&&delete n[e.shift()],n[o+\" \"]=p}}function te(e){return e[l]=!0,e}function ne(e){var t=z.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function oe(e){return function(t){return _(t,\"input\")&&t.type===e}}function pe(e){return function(t){return(_(t,\"input\")||_(t,\"button\"))&&t.type===e}}function Me(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Q(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function be(e){return te((function(t){return t=+t,te((function(n,o){for(var p,M=e([],n.length,t),b=M.length;b--;)n[p=M[b]]&&(n[p]=!(o[p]=n[p]))}))}))}function ce(e){return e&&void 0!==e.getElementsByTagName&&e}function ze(e){var n,o=e?e.ownerDocument||e:w;return o!=z&&9===o.nodeType&&o.documentElement?(r=(z=o).documentElement,i=!g.isXMLDoc(z),A=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&w!=z&&(n=z.defaultView)&&n.top!==n&&n.addEventListener(\"unload\",Z),d.getById=ne((function(e){return r.appendChild(e).id=g.expando,!z.getElementsByName||!z.getElementsByName(g.expando).length})),d.disconnectedMatch=ne((function(e){return A.call(e,\"*\")})),d.scope=ne((function(){return z.querySelectorAll(\":scope\")})),d.cssHas=ne((function(){try{return z.querySelector(\":has(*,:jqfake)\"),!1}catch(e){return!0}})),d.getById?(t.filter.ID=function(e){var t=e.replace(Y,K);return function(e){return e.getAttribute(\"id\")===t}},t.find.ID=function(e,t){if(void 0!==t.getElementById&&i){var n=t.getElementById(e);return n?[n]:[]}}):(t.filter.ID=function(e){var t=e.replace(Y,K);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},t.find.ID=function(e,t){if(void 0!==t.getElementById&&i){var n,o,p,M=t.getElementById(e);if(M){if((n=M.getAttributeNode(\"id\"))&&n.value===e)return[M];for(p=t.getElementsByName(e),o=0;M=p[o++];)if((n=M.getAttributeNode(\"id\"))&&n.value===e)return[M]}return[]}}),t.find.TAG=function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},t.find.CLASS=function(e,t){if(void 0!==t.getElementsByClassName&&i)return t.getElementsByClassName(e)},O=[],ne((function(e){var t;r.appendChild(e).innerHTML=\"<a id='\"+l+\"' href='' disabled='disabled'></a><select id='\"+l+\"-\\r\\\\' disabled='disabled'><option selected=''></option></select>\",e.querySelectorAll(\"[selected]\").length||O.push(\"\\\\[\"+E+\"*(?:value|\"+L+\")\"),e.querySelectorAll(\"[id~=\"+l+\"-]\").length||O.push(\"~=\"),e.querySelectorAll(\"a#\"+l+\"+*\").length||O.push(\".#.+[+~]\"),e.querySelectorAll(\":checked\").length||O.push(\":checked\"),(t=z.createElement(\"input\")).setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&O.push(\":enabled\",\":disabled\"),(t=z.createElement(\"input\")).setAttribute(\"name\",\"\"),e.appendChild(t),e.querySelectorAll(\"[name='']\").length||O.push(\"\\\\[\"+E+\"*name\"+E+\"*=\"+E+\"*(?:''|\\\"\\\")\")})),d.cssHas||O.push(\":has\"),O=O.length&&new RegExp(O.join(\"|\")),m=function(e,t){if(e===t)return b=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===z||e.ownerDocument==w&&J.contains(w,e)?-1:t===z||t.ownerDocument==w&&J.contains(w,t)?1:p?a.call(p,e)-a.call(p,t):0:4&n?-1:1)},z):z}for(e in J.matches=function(e,t){return J(e,null,null,t)},J.matchesSelector=function(e,t){if(ze(e),i&&!R[t+\" \"]&&(!O||!O.test(t)))try{var n=A.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){R(t,!0)}return J(t,z,null,[e]).length>0},J.contains=function(e,t){return(e.ownerDocument||e)!=z&&ze(e),g.contains(e,t)},J.attr=function(e,n){(e.ownerDocument||e)!=z&&ze(e);var o=t.attrHandle[n.toLowerCase()],p=o&&s.call(t.attrHandle,n.toLowerCase())?o(e,n,!i):void 0;return void 0!==p?p:e.getAttribute(n)},J.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},g.uniqueSort=function(e){var t,n=[],o=0,M=0;if(b=!d.sortStable,p=!d.sortStable&&c.call(e,0),y.call(e,m),b){for(;t=e[M++];)t===e[M]&&(o=n.push(M));for(;o--;)T.call(e,n[o],1)}return p=null,e},g.fn.uniqueSort=function(){return this.pushStack(g.uniqueSort(c.apply(this)))},t=g.expr={cacheLength:50,createPseudo:te,match:H,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Y,K),e[3]=(e[3]||e[4]||e[5]||\"\").replace(Y,K),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||J.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&J.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return H.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&j.test(n)&&(t=ae(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Y,K).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return _(e,t)}},CLASS:function(e){var t=W[e+\" \"];return t||(t=new RegExp(\"(^|\"+E+\")\"+e+\"(\"+E+\"|$)\"))&&W(e,(function(e){return t.test(\"string\"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute(\"class\")||\"\")}))},ATTR:function(e,t,n){return function(o){var p=J.attr(o,e);return null==p?\"!=\"===t:!t||(p+=\"\",\"=\"===t?p===n:\"!=\"===t?p!==n:\"^=\"===t?n&&0===p.indexOf(n):\"*=\"===t?n&&p.indexOf(n)>-1:\"$=\"===t?n&&p.slice(-n.length)===n:\"~=\"===t?(\" \"+p.replace(k,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(p===n||p.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,o,p){var M=\"nth\"!==e.slice(0,3),b=\"last\"!==e.slice(-4),c=\"of-type\"===t;return 1===o&&0===p?function(e){return!!e.parentNode}:function(t,n,z){var r,a,i,O,s,A=M!==b?\"nextSibling\":\"previousSibling\",u=t.parentNode,d=c&&t.nodeName.toLowerCase(),q=!z&&!c,W=!1;if(u){if(M){for(;A;){for(i=t;i=i[A];)if(c?_(i,d):1===i.nodeType)return!1;s=A=\"only\"===e&&!s&&\"nextSibling\"}return!0}if(s=[b?u.firstChild:u.lastChild],b&&q){for(W=(O=(r=(a=u[l]||(u[l]={}))[e]||[])[0]===f&&r[1])&&r[2],i=O&&u.childNodes[O];i=++O&&i&&i[A]||(W=O=0)||s.pop();)if(1===i.nodeType&&++W&&i===t){a[e]=[f,O,W];break}}else if(q&&(W=O=(r=(a=t[l]||(t[l]={}))[e]||[])[0]===f&&r[1]),!1===W)for(;(i=++O&&i&&i[A]||(W=O=0)||s.pop())&&(!(c?_(i,d):1===i.nodeType)||!++W||(q&&((a=i[l]||(i[l]={}))[e]=[f,W]),i!==t)););return(W-=p)===o||W%o==0&&W/o>=0}}},PSEUDO:function(e,n){var o,p=t.pseudos[e]||t.setFilters[e.toLowerCase()]||J.error(\"unsupported pseudo: \"+e);return p[l]?p(n):p.length>1?(o=[e,e,\"\",n],t.setFilters.hasOwnProperty(e.toLowerCase())?te((function(e,t){for(var o,M=p(e,n),b=M.length;b--;)e[o=a.call(e,M[b])]=!(t[o]=M[b])})):function(e){return p(e,0,o)}):p}},pseudos:{not:te((function(e){var t=[],n=[],o=le(e.replace(B,\"$1\"));return o[l]?te((function(e,t,n,p){for(var M,b=o(e,null,p,[]),c=e.length;c--;)(M=b[c])&&(e[c]=!(t[c]=M))})):function(e,p,M){return t[0]=e,o(t,null,M,n),t[0]=null,!n.pop()}})),has:te((function(e){return function(t){return J(e,t).length>0}})),contains:te((function(e){return e=e.replace(Y,K),function(t){return(t.textContent||g.text(t)).indexOf(e)>-1}})),lang:te((function(e){return U.test(e||\"\")||J.error(\"unsupported lang: \"+e),e=e.replace(Y,K).toLowerCase(),function(t){var n;do{if(n=i?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(e){var t=o.location&&o.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return z.activeElement}catch(e){}}()&&z.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:Me(!1),disabled:Me(!0),checked:function(e){return _(e,\"input\")&&!!e.checked||_(e,\"option\")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!t.pseudos.empty(e)},header:function(e){return G.test(e.nodeName)},input:function(e){return F.test(e.nodeName)},button:function(e){return _(e,\"input\")&&\"button\"===e.type||_(e,\"button\")},text:function(e){var t;return _(e,\"input\")&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:be((function(){return[0]})),last:be((function(e,t){return[t-1]})),eq:be((function(e,t,n){return[n<0?n+t:n]})),even:be((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:be((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:be((function(e,t,n){var o;for(o=n<0?n+t:n>t?t:n;--o>=0;)e.push(o);return e})),gt:be((function(e,t,n){for(var o=n<0?n+t:n;++o<t;)e.push(o);return e}))}},t.pseudos.nth=t.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})t.pseudos[e]=oe(e);for(e in{submit:!0,reset:!0})t.pseudos[e]=pe(e);function re(){}function ae(e,n){var o,p,M,b,c,z,r,a=h[e+\" \"];if(a)return n?0:a.slice(0);for(c=e,z=[],r=t.preFilter;c;){for(b in o&&!(p=I.exec(c))||(p&&(c=c.slice(p[0].length)||c),z.push(M=[])),o=!1,(p=D.exec(c))&&(o=p.shift(),M.push({value:o,type:p[0].replace(B,\" \")}),c=c.slice(o.length)),t.filter)!(p=H[b].exec(c))||r[b]&&!(p=r[b](p))||(o=p.shift(),M.push({value:o,type:b,matches:p}),c=c.slice(o.length));if(!o)break}return n?c.length:c?J.error(e):h(e,z).slice(0)}function ie(e){for(var t=0,n=e.length,o=\"\";t<n;t++)o+=e[t].value;return o}function Oe(e,t,n){var o=t.dir,p=t.next,M=p||o,b=n&&\"parentNode\"===M,c=q++;return t.first?function(t,n,p){for(;t=t[o];)if(1===t.nodeType||b)return e(t,n,p);return!1}:function(t,n,z){var r,a,i=[f,c];if(z){for(;t=t[o];)if((1===t.nodeType||b)&&e(t,n,z))return!0}else for(;t=t[o];)if(1===t.nodeType||b)if(a=t[l]||(t[l]={}),p&&_(t,p))t=t[o]||t;else{if((r=a[M])&&r[0]===f&&r[1]===c)return i[2]=r[2];if(a[M]=i,i[2]=e(t,n,z))return!0}return!1}}function se(e){return e.length>1?function(t,n,o){for(var p=e.length;p--;)if(!e[p](t,n,o))return!1;return!0}:e[0]}function Ae(e,t,n,o,p){for(var M,b=[],c=0,z=e.length,r=null!=t;c<z;c++)(M=e[c])&&(n&&!n(M,o,p)||(b.push(M),r&&t.push(c)));return b}function ue(e,t,n,o,p,M){return o&&!o[l]&&(o=ue(o)),p&&!p[l]&&(p=ue(p,M)),te((function(M,b,c,z){var r,i,O,s,A=[],d=[],l=b.length,f=M||function(e,t,n){for(var o=0,p=t.length;o<p;o++)J(e,t[o],n);return n}(t||\"*\",c.nodeType?[c]:c,[]),q=!e||!M&&t?f:Ae(f,A,e,c,z);if(n?n(q,s=p||(M?e:l||o)?[]:b,c,z):s=q,o)for(r=Ae(s,d),o(r,[],c,z),i=r.length;i--;)(O=r[i])&&(s[d[i]]=!(q[d[i]]=O));if(M){if(p||e){if(p){for(r=[],i=s.length;i--;)(O=s[i])&&r.push(q[i]=O);p(null,s=[],r,z)}for(i=s.length;i--;)(O=s[i])&&(r=p?a.call(M,O):A[i])>-1&&(M[r]=!(b[r]=O))}}else s=Ae(s===b?s.splice(l,s.length):s),p?p(null,b,s,z):u.apply(b,s)}))}function de(e){for(var o,p,M,b=e.length,c=t.relative[e[0].type],z=c||t.relative[\" \"],r=c?1:0,i=Oe((function(e){return e===o}),z,!0),O=Oe((function(e){return a.call(o,e)>-1}),z,!0),s=[function(e,t,p){var M=!c&&(p||t!=n)||((o=t).nodeType?i(e,t,p):O(e,t,p));return o=null,M}];r<b;r++)if(p=t.relative[e[r].type])s=[Oe(se(s),p)];else{if((p=t.filter[e[r].type].apply(null,e[r].matches))[l]){for(M=++r;M<b&&!t.relative[e[M].type];M++);return ue(r>1&&se(s),r>1&&ie(e.slice(0,r-1).concat({value:\" \"===e[r-2].type?\"*\":\"\"})).replace(B,\"$1\"),p,r<M&&de(e.slice(r,M)),M<b&&de(e=e.slice(M)),M<b&&ie(e))}s.push(p)}return se(s)}function le(e,o){var p,M=[],b=[],c=v[e+\" \"];if(!c){for(o||(o=ae(e)),p=o.length;p--;)(c=de(o[p]))[l]?M.push(c):b.push(c);c=v(e,function(e,o){var p=o.length>0,M=e.length>0,b=function(b,c,r,a,O){var s,A,d,l=0,q=\"0\",W=b&&[],h=[],v=n,R=b||M&&t.find.TAG(\"*\",O),m=f+=null==v?1:Math.random()||.1,L=R.length;for(O&&(n=c==z||c||O);q!==L&&null!=(s=R[q]);q++){if(M&&s){for(A=0,c||s.ownerDocument==z||(ze(s),r=!i);d=e[A++];)if(d(s,c||z,r)){u.call(a,s);break}O&&(f=m)}p&&((s=!d&&s)&&l--,b&&W.push(s))}if(l+=q,p&&q!==l){for(A=0;d=o[A++];)d(W,h,c,r);if(b){if(l>0)for(;q--;)W[q]||h[q]||(h[q]=N.call(a));h=Ae(h)}u.apply(a,h),O&&!b&&h.length>0&&l+o.length>1&&g.uniqueSort(a)}return O&&(f=m,n=v),W};return p?te(b):b}(b,M)),c.selector=e}return c}function fe(e,n,o,p){var M,b,c,z,r,a=\"function\"==typeof e&&e,O=!p&&ae(e=a.selector||e);if(o=o||[],1===O.length){if((b=O[0]=O[0].slice(0)).length>2&&\"ID\"===(c=b[0]).type&&9===n.nodeType&&i&&t.relative[b[1].type]){if(!(n=(t.find.ID(c.matches[0].replace(Y,K),n)||[])[0]))return o;a&&(n=n.parentNode),e=e.slice(b.shift().value.length)}for(M=H.needsContext.test(e)?0:b.length;M--&&(c=b[M],!t.relative[z=c.type]);)if((r=t.find[z])&&(p=r(c.matches[0].replace(Y,K),V.test(b[0].type)&&ce(n.parentNode)||n))){if(b.splice(M,1),!(e=p.length&&ie(b)))return u.apply(o,p),o;break}}return(a||le(e,O))(p,n,!i,o,!n||V.test(e)&&ce(n.parentNode)||n),o}re.prototype=t.filters=t.pseudos,t.setFilters=new re,d.sortStable=l.split(\"\").sort(m).join(\"\")===l,ze(),d.sortDetached=ne((function(e){return 1&e.compareDocumentPosition(z.createElement(\"fieldset\"))})),g.find=J,g.expr[\":\"]=g.expr.pseudos,g.unique=g.uniqueSort,J.compile=le,J.select=fe,J.setDocument=ze,J.tokenize=ae,J.escape=g.escapeSelector,J.getText=g.text,J.isXML=g.isXMLDoc,J.selectors=g.expr,J.support=g.support,J.uniqueSort=g.uniqueSort}();var x=function(e,t,n){for(var o=[],p=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(p&&g(e).is(n))break;o.push(e)}return o},k=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},I=g.expr.match.needsContext,D=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function P(e,t,n){return l(t)?g.grep(e,(function(e,o){return!!t.call(e,o,e)!==n})):t.nodeType?g.grep(e,(function(e){return e===t!==n})):\"string\"!=typeof t?g.grep(e,(function(e){return a.call(t,e)>-1!==n})):g.filter(t,e,n)}g.filter=function(e,t,n){var o=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===o.nodeType?g.find.matchesSelector(o,e)?[o]:[]:g.find.matches(e,g.grep(t,(function(e){return 1===e.nodeType})))},g.fn.extend({find:function(e){var t,n,o=this.length,p=this;if(\"string\"!=typeof e)return this.pushStack(g(e).filter((function(){for(t=0;t<o;t++)if(g.contains(p[t],this))return!0})));for(n=this.pushStack([]),t=0;t<o;t++)g.find(e,p[t],n);return o>1?g.uniqueSort(n):n},filter:function(e){return this.pushStack(P(this,e||[],!1))},not:function(e){return this.pushStack(P(this,e||[],!0))},is:function(e){return!!P(this,\"string\"==typeof e&&I.test(e)?g(e):e||[],!1).length}});var j,U=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(g.fn.init=function(e,t,n){var o,p;if(!e)return this;if(n=n||j,\"string\"==typeof e){if(!(o=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:U.exec(e))||!o[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(o[1]){if(t=t instanceof g?t[0]:t,g.merge(this,g.parseHTML(o[1],t&&t.nodeType?t.ownerDocument||t:q,!0)),D.test(o[1])&&g.isPlainObject(t))for(o in t)l(this[o])?this[o](t[o]):this.attr(o,t[o]);return this}return(p=q.getElementById(o[2]))&&(this[0]=p,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):l(e)?void 0!==n.ready?n.ready(e):e(g):g.makeArray(e,this)}).prototype=g.fn,j=g(q);var H=/^(?:parents|prev(?:Until|All))/,F={children:!0,contents:!0,next:!0,prev:!0};function G(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}g.fn.extend({has:function(e){var t=g(e,this),n=t.length;return this.filter((function(){for(var e=0;e<n;e++)if(g.contains(this,t[e]))return!0}))},closest:function(e,t){var n,o=0,p=this.length,M=[],b=\"string\"!=typeof e&&g(e);if(!I.test(e))for(;o<p;o++)for(n=this[o];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(b?b.index(n)>-1:1===n.nodeType&&g.find.matchesSelector(n,e))){M.push(n);break}return this.pushStack(M.length>1?g.uniqueSort(M):M)},index:function(e){return e?\"string\"==typeof e?a.call(g(e),this[0]):a.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(g.uniqueSort(g.merge(this.get(),g(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),g.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x(e,\"parentNode\")},parentsUntil:function(e,t,n){return x(e,\"parentNode\",n)},next:function(e){return G(e,\"nextSibling\")},prev:function(e){return G(e,\"previousSibling\")},nextAll:function(e){return x(e,\"nextSibling\")},prevAll:function(e){return x(e,\"previousSibling\")},nextUntil:function(e,t,n){return x(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return x(e,\"previousSibling\",n)},siblings:function(e){return k((e.parentNode||{}).firstChild,e)},children:function(e){return k(e.firstChild)},contents:function(e){return null!=e.contentDocument&&b(e.contentDocument)?e.contentDocument:(_(e,\"template\")&&(e=e.content||e),g.merge([],e.childNodes))}},(function(e,t){g.fn[e]=function(n,o){var p=g.map(this,t,n);return\"Until\"!==e.slice(-5)&&(o=n),o&&\"string\"==typeof o&&(p=g.filter(o,p)),this.length>1&&(F[e]||g.uniqueSort(p),H.test(e)&&p.reverse()),this.pushStack(p)}}));var $=/[^\\x20\\t\\r\\n\\f]+/g;function V(e){return e}function Y(e){throw e}function K(e,t,n,o){var p;try{e&&l(p=e.promise)?p.call(e).done(t).fail(n):e&&l(p=e.then)?p.call(e,t,n):t.apply(void 0,[e].slice(o))}catch(e){n.apply(void 0,[e])}}g.Callbacks=function(e){e=\"string\"==typeof e?function(e){var t={};return g.each(e.match($)||[],(function(e,n){t[n]=!0})),t}(e):g.extend({},e);var t,n,o,p,M=[],b=[],c=-1,z=function(){for(p=p||e.once,o=t=!0;b.length;c=-1)for(n=b.shift();++c<M.length;)!1===M[c].apply(n[0],n[1])&&e.stopOnFalse&&(c=M.length,n=!1);e.memory||(n=!1),t=!1,p&&(M=n?[]:\"\")},r={add:function(){return M&&(n&&!t&&(c=M.length-1,b.push(n)),function t(n){g.each(n,(function(n,o){l(o)?e.unique&&r.has(o)||M.push(o):o&&o.length&&\"string\"!==v(o)&&t(o)}))}(arguments),n&&!t&&z()),this},remove:function(){return g.each(arguments,(function(e,t){for(var n;(n=g.inArray(t,M,n))>-1;)M.splice(n,1),n<=c&&c--})),this},has:function(e){return e?g.inArray(e,M)>-1:M.length>0},empty:function(){return M&&(M=[]),this},disable:function(){return p=b=[],M=n=\"\",this},disabled:function(){return!M},lock:function(){return p=b=[],n||t||(M=n=\"\"),this},locked:function(){return!!p},fireWith:function(e,n){return p||(n=[e,(n=n||[]).slice?n.slice():n],b.push(n),t||z()),this},fire:function(){return r.fireWith(this,arguments),this},fired:function(){return!!o}};return r},g.extend({Deferred:function(e){var t=[[\"notify\",\"progress\",g.Callbacks(\"memory\"),g.Callbacks(\"memory\"),2],[\"resolve\",\"done\",g.Callbacks(\"once memory\"),g.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",g.Callbacks(\"once memory\"),g.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",p={state:function(){return n},always:function(){return M.done(arguments).fail(arguments),this},catch:function(e){return p.then(null,e)},pipe:function(){var e=arguments;return g.Deferred((function(n){g.each(t,(function(t,o){var p=l(e[o[4]])&&e[o[4]];M[o[1]]((function(){var e=p&&p.apply(this,arguments);e&&l(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+\"With\"](this,p?[e]:arguments)}))})),e=null})).promise()},then:function(e,n,p){var M=0;function b(e,t,n,p){return function(){var c=this,z=arguments,r=function(){var o,r;if(!(e<M)){if((o=n.apply(c,z))===t.promise())throw new TypeError(\"Thenable self-resolution\");r=o&&(\"object\"==typeof o||\"function\"==typeof o)&&o.then,l(r)?p?r.call(o,b(M,t,V,p),b(M,t,Y,p)):(M++,r.call(o,b(M,t,V,p),b(M,t,Y,p),b(M,t,V,t.notifyWith))):(n!==V&&(c=void 0,z=[o]),(p||t.resolveWith)(c,z))}},a=p?r:function(){try{r()}catch(o){g.Deferred.exceptionHook&&g.Deferred.exceptionHook(o,a.error),e+1>=M&&(n!==Y&&(c=void 0,z=[o]),t.rejectWith(c,z))}};e?a():(g.Deferred.getErrorHook?a.error=g.Deferred.getErrorHook():g.Deferred.getStackHook&&(a.error=g.Deferred.getStackHook()),o.setTimeout(a))}}return g.Deferred((function(o){t[0][3].add(b(0,o,l(p)?p:V,o.notifyWith)),t[1][3].add(b(0,o,l(e)?e:V)),t[2][3].add(b(0,o,l(n)?n:Y))})).promise()},promise:function(e){return null!=e?g.extend(e,p):p}},M={};return g.each(t,(function(e,o){var b=o[2],c=o[5];p[o[1]]=b.add,c&&b.add((function(){n=c}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),b.add(o[3].fire),M[o[0]]=function(){return M[o[0]+\"With\"](this===M?void 0:this,arguments),this},M[o[0]+\"With\"]=b.fireWith})),p.promise(M),e&&e.call(M,M),M},when:function(e){var t=arguments.length,n=t,o=Array(n),p=c.call(arguments),M=g.Deferred(),b=function(e){return function(n){o[e]=this,p[e]=arguments.length>1?c.call(arguments):n,--t||M.resolveWith(o,p)}};if(t<=1&&(K(e,M.done(b(n)).resolve,M.reject,!t),\"pending\"===M.state()||l(p[n]&&p[n].then)))return M.then();for(;n--;)K(p[n],b(n),M.reject);return M.promise()}});var Z=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;g.Deferred.exceptionHook=function(e,t){o.console&&o.console.warn&&e&&Z.test(e.name)&&o.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},g.readyException=function(e){o.setTimeout((function(){throw e}))};var Q=g.Deferred();function J(){q.removeEventListener(\"DOMContentLoaded\",J),o.removeEventListener(\"load\",J),g.ready()}g.fn.ready=function(e){return Q.then(e).catch((function(e){g.readyException(e)})),this},g.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--g.readyWait:g.isReady)||(g.isReady=!0,!0!==e&&--g.readyWait>0||Q.resolveWith(q,[g]))}}),g.ready.then=Q.then,\"complete\"===q.readyState||\"loading\"!==q.readyState&&!q.documentElement.doScroll?o.setTimeout(g.ready):(q.addEventListener(\"DOMContentLoaded\",J),o.addEventListener(\"load\",J));var ee=function(e,t,n,o,p,M,b){var c=0,z=e.length,r=null==n;if(\"object\"===v(n))for(c in p=!0,n)ee(e,t,c,n[c],!0,M,b);else if(void 0!==o&&(p=!0,l(o)||(b=!0),r&&(b?(t.call(e,o),t=null):(r=t,t=function(e,t,n){return r.call(g(e),n)})),t))for(;c<z;c++)t(e[c],n,b?o:o.call(e[c],c,t(e[c],n)));return p?e:r?t.call(e):z?t(e[0],n):M},te=/^-ms-/,ne=/-([a-z])/g;function oe(e,t){return t.toUpperCase()}function pe(e){return e.replace(te,\"ms-\").replace(ne,oe)}var Me=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function be(){this.expando=g.expando+be.uid++}be.uid=1,be.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Me(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var o,p=this.cache(e);if(\"string\"==typeof t)p[pe(t)]=n;else for(o in t)p[pe(o)]=t[o];return p},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][pe(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,o=e[this.expando];if(void 0!==o){if(void 0!==t){n=(t=Array.isArray(t)?t.map(pe):(t=pe(t))in o?[t]:t.match($)||[]).length;for(;n--;)delete o[t[n]]}(void 0===t||g.isEmptyObject(o))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!g.isEmptyObject(t)}};var ce=new be,ze=new be,re=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,ae=/[A-Z]/g;function ie(e,t,n){var o;if(void 0===n&&1===e.nodeType)if(o=\"data-\"+t.replace(ae,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(o))){try{n=function(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:re.test(e)?JSON.parse(e):e)}(n)}catch(e){}ze.set(e,t,n)}else n=void 0;return n}g.extend({hasData:function(e){return ze.hasData(e)||ce.hasData(e)},data:function(e,t,n){return ze.access(e,t,n)},removeData:function(e,t){ze.remove(e,t)},_data:function(e,t,n){return ce.access(e,t,n)},_removeData:function(e,t){ce.remove(e,t)}}),g.fn.extend({data:function(e,t){var n,o,p,M=this[0],b=M&&M.attributes;if(void 0===e){if(this.length&&(p=ze.get(M),1===M.nodeType&&!ce.get(M,\"hasDataAttrs\"))){for(n=b.length;n--;)b[n]&&0===(o=b[n].name).indexOf(\"data-\")&&(o=pe(o.slice(5)),ie(M,o,p[o]));ce.set(M,\"hasDataAttrs\",!0)}return p}return\"object\"==typeof e?this.each((function(){ze.set(this,e)})):ee(this,(function(t){var n;if(M&&void 0===t)return void 0!==(n=ze.get(M,e))||void 0!==(n=ie(M,e))?n:void 0;this.each((function(){ze.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){ze.remove(this,e)}))}}),g.extend({queue:function(e,t,n){var o;if(e)return t=(t||\"fx\")+\"queue\",o=ce.get(e,t),n&&(!o||Array.isArray(n)?o=ce.access(e,t,g.makeArray(n)):o.push(n)),o||[]},dequeue:function(e,t){t=t||\"fx\";var n=g.queue(e,t),o=n.length,p=n.shift(),M=g._queueHooks(e,t);\"inprogress\"===p&&(p=n.shift(),o--),p&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete M.stop,p.call(e,(function(){g.dequeue(e,t)}),M)),!o&&M&&M.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return ce.get(e,n)||ce.access(e,n,{empty:g.Callbacks(\"once memory\").add((function(){ce.remove(e,[t+\"queue\",n])}))})}}),g.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?g.queue(this[0],e):void 0===t?this:this.each((function(){var n=g.queue(this,e,t);g._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&g.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){g.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,o=1,p=g.Deferred(),M=this,b=this.length,c=function(){--o||p.resolveWith(M,[M])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";b--;)(n=ce.get(M[b],e+\"queueHooks\"))&&n.empty&&(o++,n.empty.add(c));return c(),p.promise(t)}});var Oe=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,se=new RegExp(\"^(?:([+-])=|)(\"+Oe+\")([a-z%]*)$\",\"i\"),Ae=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ue=q.documentElement,de=function(e){return g.contains(e.ownerDocument,e)},le={composed:!0};ue.getRootNode&&(de=function(e){return g.contains(e.ownerDocument,e)||e.getRootNode(le)===e.ownerDocument});var fe=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&de(e)&&\"none\"===g.css(e,\"display\")};function qe(e,t,n,o){var p,M,b=20,c=o?function(){return o.cur()}:function(){return g.css(e,t,\"\")},z=c(),r=n&&n[3]||(g.cssNumber[t]?\"\":\"px\"),a=e.nodeType&&(g.cssNumber[t]||\"px\"!==r&&+z)&&se.exec(g.css(e,t));if(a&&a[3]!==r){for(z/=2,r=r||a[3],a=+z||1;b--;)g.style(e,t,a+r),(1-M)*(1-(M=c()/z||.5))<=0&&(b=0),a/=M;a*=2,g.style(e,t,a+r),n=n||[]}return n&&(a=+a||+z||0,p=n[1]?a+(n[1]+1)*n[2]:+n[2],o&&(o.unit=r,o.start=a,o.end=p)),p}var We={};function he(e){var t,n=e.ownerDocument,o=e.nodeName,p=We[o];return p||(t=n.body.appendChild(n.createElement(o)),p=g.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===p&&(p=\"block\"),We[o]=p,p)}function ve(e,t){for(var n,o,p=[],M=0,b=e.length;M<b;M++)(o=e[M]).style&&(n=o.style.display,t?(\"none\"===n&&(p[M]=ce.get(o,\"display\")||null,p[M]||(o.style.display=\"\")),\"\"===o.style.display&&fe(o)&&(p[M]=he(o))):\"none\"!==n&&(p[M]=\"none\",ce.set(o,\"display\",n)));for(M=0;M<b;M++)null!=p[M]&&(e[M].style.display=p[M]);return e}g.fn.extend({show:function(){return ve(this,!0)},hide:function(){return ve(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each((function(){fe(this)?g(this).show():g(this).hide()}))}});var Re,me,ge=/^(?:checkbox|radio)$/i,Le=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,_e=/^$|^module$|\\/(?:java|ecma)script/i;Re=q.createDocumentFragment().appendChild(q.createElement(\"div\")),(me=q.createElement(\"input\")).setAttribute(\"type\",\"radio\"),me.setAttribute(\"checked\",\"checked\"),me.setAttribute(\"name\",\"t\"),Re.appendChild(me),d.checkClone=Re.cloneNode(!0).cloneNode(!0).lastChild.checked,Re.innerHTML=\"<textarea>x</textarea>\",d.noCloneChecked=!!Re.cloneNode(!0).lastChild.defaultValue,Re.innerHTML=\"<option></option>\",d.option=!!Re.lastChild;var Ne={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function ye(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):void 0!==e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&_(e,t)?g.merge([e],n):n}function Te(e,t){for(var n=0,o=e.length;n<o;n++)ce.set(e[n],\"globalEval\",!t||ce.get(t[n],\"globalEval\"))}Ne.tbody=Ne.tfoot=Ne.colgroup=Ne.caption=Ne.thead,Ne.th=Ne.td,d.option||(Ne.optgroup=Ne.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var Ee=/<|&#?\\w+;/;function Be(e,t,n,o,p){for(var M,b,c,z,r,a,i=t.createDocumentFragment(),O=[],s=0,A=e.length;s<A;s++)if((M=e[s])||0===M)if(\"object\"===v(M))g.merge(O,M.nodeType?[M]:M);else if(Ee.test(M)){for(b=b||i.appendChild(t.createElement(\"div\")),c=(Le.exec(M)||[\"\",\"\"])[1].toLowerCase(),z=Ne[c]||Ne._default,b.innerHTML=z[1]+g.htmlPrefilter(M)+z[2],a=z[0];a--;)b=b.lastChild;g.merge(O,b.childNodes),(b=i.firstChild).textContent=\"\"}else O.push(t.createTextNode(M));for(i.textContent=\"\",s=0;M=O[s++];)if(o&&g.inArray(M,o)>-1)p&&p.push(M);else if(r=de(M),b=ye(i.appendChild(M),\"script\"),r&&Te(b),n)for(a=0;M=b[a++];)_e.test(M.type||\"\")&&n.push(M);return i}var Ce=/^([^.]*)(?:\\.(.+)|)/;function Xe(){return!0}function we(){return!1}function Se(e,t,n,o,p,M){var b,c;if(\"object\"==typeof t){for(c in\"string\"!=typeof n&&(o=o||n,n=void 0),t)Se(e,c,n,o,t[c],M);return e}if(null==o&&null==p?(p=n,o=n=void 0):null==p&&(\"string\"==typeof n?(p=o,o=void 0):(p=o,o=n,n=void 0)),!1===p)p=we;else if(!p)return e;return 1===M&&(b=p,p=function(e){return g().off(e),b.apply(this,arguments)},p.guid=b.guid||(b.guid=g.guid++)),e.each((function(){g.event.add(this,t,p,o,n)}))}function xe(e,t,n){n?(ce.set(e,t,!1),g.event.add(e,t,{namespace:!1,handler:function(e){var n,o=ce.get(this,t);if(1&e.isTrigger&&this[t]){if(o)(g.event.special[t]||{}).delegateType&&e.stopPropagation();else if(o=c.call(arguments),ce.set(this,t,o),this[t](),n=ce.get(this,t),ce.set(this,t,!1),o!==n)return e.stopImmediatePropagation(),e.preventDefault(),n}else o&&(ce.set(this,t,g.event.trigger(o[0],o.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Xe)}})):void 0===ce.get(e,t)&&g.event.add(e,t,Xe)}g.event={global:{},add:function(e,t,n,o,p){var M,b,c,z,r,a,i,O,s,A,u,d=ce.get(e);if(Me(e))for(n.handler&&(n=(M=n).handler,p=M.selector),p&&g.find.matchesSelector(ue,p),n.guid||(n.guid=g.guid++),(z=d.events)||(z=d.events=Object.create(null)),(b=d.handle)||(b=d.handle=function(t){return void 0!==g&&g.event.triggered!==t.type?g.event.dispatch.apply(e,arguments):void 0}),r=(t=(t||\"\").match($)||[\"\"]).length;r--;)s=u=(c=Ce.exec(t[r])||[])[1],A=(c[2]||\"\").split(\".\").sort(),s&&(i=g.event.special[s]||{},s=(p?i.delegateType:i.bindType)||s,i=g.event.special[s]||{},a=g.extend({type:s,origType:u,data:o,handler:n,guid:n.guid,selector:p,needsContext:p&&g.expr.match.needsContext.test(p),namespace:A.join(\".\")},M),(O=z[s])||((O=z[s]=[]).delegateCount=0,i.setup&&!1!==i.setup.call(e,o,A,b)||e.addEventListener&&e.addEventListener(s,b)),i.add&&(i.add.call(e,a),a.handler.guid||(a.handler.guid=n.guid)),p?O.splice(O.delegateCount++,0,a):O.push(a),g.event.global[s]=!0)},remove:function(e,t,n,o,p){var M,b,c,z,r,a,i,O,s,A,u,d=ce.hasData(e)&&ce.get(e);if(d&&(z=d.events)){for(r=(t=(t||\"\").match($)||[\"\"]).length;r--;)if(s=u=(c=Ce.exec(t[r])||[])[1],A=(c[2]||\"\").split(\".\").sort(),s){for(i=g.event.special[s]||{},O=z[s=(o?i.delegateType:i.bindType)||s]||[],c=c[2]&&new RegExp(\"(^|\\\\.)\"+A.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),b=M=O.length;M--;)a=O[M],!p&&u!==a.origType||n&&n.guid!==a.guid||c&&!c.test(a.namespace)||o&&o!==a.selector&&(\"**\"!==o||!a.selector)||(O.splice(M,1),a.selector&&O.delegateCount--,i.remove&&i.remove.call(e,a));b&&!O.length&&(i.teardown&&!1!==i.teardown.call(e,A,d.handle)||g.removeEvent(e,s,d.handle),delete z[s])}else for(s in z)g.event.remove(e,s+t[r],n,o,!0);g.isEmptyObject(z)&&ce.remove(e,\"handle events\")}},dispatch:function(e){var t,n,o,p,M,b,c=new Array(arguments.length),z=g.event.fix(e),r=(ce.get(this,\"events\")||Object.create(null))[z.type]||[],a=g.event.special[z.type]||{};for(c[0]=z,t=1;t<arguments.length;t++)c[t]=arguments[t];if(z.delegateTarget=this,!a.preDispatch||!1!==a.preDispatch.call(this,z)){for(b=g.event.handlers.call(this,z,r),t=0;(p=b[t++])&&!z.isPropagationStopped();)for(z.currentTarget=p.elem,n=0;(M=p.handlers[n++])&&!z.isImmediatePropagationStopped();)z.rnamespace&&!1!==M.namespace&&!z.rnamespace.test(M.namespace)||(z.handleObj=M,z.data=M.data,void 0!==(o=((g.event.special[M.origType]||{}).handle||M.handler).apply(p.elem,c))&&!1===(z.result=o)&&(z.preventDefault(),z.stopPropagation()));return a.postDispatch&&a.postDispatch.call(this,z),z.result}},handlers:function(e,t){var n,o,p,M,b,c=[],z=t.delegateCount,r=e.target;if(z&&r.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;r!==this;r=r.parentNode||this)if(1===r.nodeType&&(\"click\"!==e.type||!0!==r.disabled)){for(M=[],b={},n=0;n<z;n++)void 0===b[p=(o=t[n]).selector+\" \"]&&(b[p]=o.needsContext?g(p,this).index(r)>-1:g.find(p,this,null,[r]).length),b[p]&&M.push(o);M.length&&c.push({elem:r,handlers:M})}return r=this,z<t.length&&c.push({elem:r,handlers:t.slice(z)}),c},addProp:function(e,t){Object.defineProperty(g.Event.prototype,e,{enumerable:!0,configurable:!0,get:l(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[g.expando]?e:new g.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return ge.test(t.type)&&t.click&&_(t,\"input\")&&xe(t,\"click\",!0),!1},trigger:function(e){var t=this||e;return ge.test(t.type)&&t.click&&_(t,\"input\")&&xe(t,\"click\"),!0},_default:function(e){var t=e.target;return ge.test(t.type)&&t.click&&_(t,\"input\")&&ce.get(t,\"click\")||_(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},g.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},g.Event=function(e,t){if(!(this instanceof g.Event))return new g.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Xe:we,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&g.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[g.expando]=!0},g.Event.prototype={constructor:g.Event,isDefaultPrevented:we,isPropagationStopped:we,isImmediatePropagationStopped:we,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Xe,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Xe,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Xe,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},g.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},g.event.addProp),g.each({focus:\"focusin\",blur:\"focusout\"},(function(e,t){function n(e){if(q.documentMode){var n=ce.get(this,\"handle\"),o=g.event.fix(e);o.type=\"focusin\"===e.type?\"focus\":\"blur\",o.isSimulated=!0,n(e),o.target===o.currentTarget&&n(o)}else g.event.simulate(t,e.target,g.event.fix(e))}g.event.special[e]={setup:function(){var o;if(xe(this,e,!0),!q.documentMode)return!1;(o=ce.get(this,t))||this.addEventListener(t,n),ce.set(this,t,(o||0)+1)},trigger:function(){return xe(this,e),!0},teardown:function(){var e;if(!q.documentMode)return!1;(e=ce.get(this,t)-1)?ce.set(this,t,e):(this.removeEventListener(t,n),ce.remove(this,t))},_default:function(t){return ce.get(t.target,e)},delegateType:t},g.event.special[t]={setup:function(){var o=this.ownerDocument||this.document||this,p=q.documentMode?this:o,M=ce.get(p,t);M||(q.documentMode?this.addEventListener(t,n):o.addEventListener(e,n,!0)),ce.set(p,t,(M||0)+1)},teardown:function(){var o=this.ownerDocument||this.document||this,p=q.documentMode?this:o,M=ce.get(p,t)-1;M?ce.set(p,t,M):(q.documentMode?this.removeEventListener(t,n):o.removeEventListener(e,n,!0),ce.remove(p,t))}}})),g.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},(function(e,t){g.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,o=e.relatedTarget,p=e.handleObj;return o&&(o===this||g.contains(this,o))||(e.type=p.origType,n=p.handler.apply(this,arguments),e.type=t),n}}})),g.fn.extend({on:function(e,t,n,o){return Se(this,e,t,n,o)},one:function(e,t,n,o){return Se(this,e,t,n,o,1)},off:function(e,t,n){var o,p;if(e&&e.preventDefault&&e.handleObj)return o=e.handleObj,g(e.delegateTarget).off(o.namespace?o.origType+\".\"+o.namespace:o.origType,o.selector,o.handler),this;if(\"object\"==typeof e){for(p in e)this.off(p,t,e[p]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=we),this.each((function(){g.event.remove(this,e,n,t)}))}});var ke=/<script|<style|<link/i,Ie=/checked\\s*(?:[^=]|=\\s*.checked.)/i,De=/^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;function Pe(e,t){return _(e,\"table\")&&_(11!==t.nodeType?t:t.firstChild,\"tr\")&&g(e).children(\"tbody\")[0]||e}function je(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Ue(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function He(e,t){var n,o,p,M,b,c;if(1===t.nodeType){if(ce.hasData(e)&&(c=ce.get(e).events))for(p in ce.remove(t,\"handle events\"),c)for(n=0,o=c[p].length;n<o;n++)g.event.add(t,p,c[p][n]);ze.hasData(e)&&(M=ze.access(e),b=g.extend({},M),ze.set(t,b))}}function Fe(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&ge.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function Ge(e,t,n,o){t=z(t);var p,M,b,c,r,a,i=0,O=e.length,s=O-1,A=t[0],u=l(A);if(u||O>1&&\"string\"==typeof A&&!d.checkClone&&Ie.test(A))return e.each((function(p){var M=e.eq(p);u&&(t[0]=A.call(this,p,M.html())),Ge(M,t,n,o)}));if(O&&(M=(p=Be(t,e[0].ownerDocument,!1,e,o)).firstChild,1===p.childNodes.length&&(p=M),M||o)){for(c=(b=g.map(ye(p,\"script\"),je)).length;i<O;i++)r=p,i!==s&&(r=g.clone(r,!0,!0),c&&g.merge(b,ye(r,\"script\"))),n.call(e[i],r,i);if(c)for(a=b[b.length-1].ownerDocument,g.map(b,Ue),i=0;i<c;i++)r=b[i],_e.test(r.type||\"\")&&!ce.access(r,\"globalEval\")&&g.contains(a,r)&&(r.src&&\"module\"!==(r.type||\"\").toLowerCase()?g._evalUrl&&!r.noModule&&g._evalUrl(r.src,{nonce:r.nonce||r.getAttribute(\"nonce\")},a):h(r.textContent.replace(De,\"\"),r,a))}return e}function $e(e,t,n){for(var o,p=t?g.filter(t,e):e,M=0;null!=(o=p[M]);M++)n||1!==o.nodeType||g.cleanData(ye(o)),o.parentNode&&(n&&de(o)&&Te(ye(o,\"script\")),o.parentNode.removeChild(o));return e}g.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var o,p,M,b,c=e.cloneNode(!0),z=de(e);if(!(d.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||g.isXMLDoc(e)))for(b=ye(c),o=0,p=(M=ye(e)).length;o<p;o++)Fe(M[o],b[o]);if(t)if(n)for(M=M||ye(e),b=b||ye(c),o=0,p=M.length;o<p;o++)He(M[o],b[o]);else He(e,c);return(b=ye(c,\"script\")).length>0&&Te(b,!z&&ye(e,\"script\")),c},cleanData:function(e){for(var t,n,o,p=g.event.special,M=0;void 0!==(n=e[M]);M++)if(Me(n)){if(t=n[ce.expando]){if(t.events)for(o in t.events)p[o]?g.event.remove(n,o):g.removeEvent(n,o,t.handle);n[ce.expando]=void 0}n[ze.expando]&&(n[ze.expando]=void 0)}}}),g.fn.extend({detach:function(e){return $e(this,e,!0)},remove:function(e){return $e(this,e)},text:function(e){return ee(this,(function(e){return void 0===e?g.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Ge(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Pe(this,e).appendChild(e)}))},prepend:function(){return Ge(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Pe(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Ge(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Ge(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(g.cleanData(ye(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return g.clone(this,e,t)}))},html:function(e){return ee(this,(function(e){var t=this[0]||{},n=0,o=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!ke.test(e)&&!Ne[(Le.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=g.htmlPrefilter(e);try{for(;n<o;n++)1===(t=this[n]||{}).nodeType&&(g.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=[];return Ge(this,arguments,(function(t){var n=this.parentNode;g.inArray(this,e)<0&&(g.cleanData(ye(this)),n&&n.replaceChild(t,this))}),e)}}),g.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},(function(e,t){g.fn[e]=function(e){for(var n,o=[],p=g(e),M=p.length-1,b=0;b<=M;b++)n=b===M?this:this.clone(!0),g(p[b])[t](n),r.apply(o,n.get());return this.pushStack(o)}}));var Ve=new RegExp(\"^(\"+Oe+\")(?!px)[a-z%]+$\",\"i\"),Ye=/^--/,Ke=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=o),t.getComputedStyle(e)},Ze=function(e,t,n){var o,p,M={};for(p in t)M[p]=e.style[p],e.style[p]=t[p];for(p in o=n.call(e),t)e.style[p]=M[p];return o},Qe=new RegExp(Ae.join(\"|\"),\"i\");function Je(e,t,n){var o,p,M,b,c=Ye.test(t),z=e.style;return(n=n||Ke(e))&&(b=n.getPropertyValue(t)||n[t],c&&b&&(b=b.replace(B,\"$1\")||void 0),\"\"!==b||de(e)||(b=g.style(e,t)),!d.pixelBoxStyles()&&Ve.test(b)&&Qe.test(t)&&(o=z.width,p=z.minWidth,M=z.maxWidth,z.minWidth=z.maxWidth=z.width=b,b=n.width,z.width=o,z.minWidth=p,z.maxWidth=M)),void 0!==b?b+\"\":b}function et(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(a){r.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",a.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",ue.appendChild(r).appendChild(a);var e=o.getComputedStyle(a);n=\"1%\"!==e.top,z=12===t(e.marginLeft),a.style.right=\"60%\",b=36===t(e.right),p=36===t(e.width),a.style.position=\"absolute\",M=12===t(a.offsetWidth/3),ue.removeChild(r),a=null}}function t(e){return Math.round(parseFloat(e))}var n,p,M,b,c,z,r=q.createElement(\"div\"),a=q.createElement(\"div\");a.style&&(a.style.backgroundClip=\"content-box\",a.cloneNode(!0).style.backgroundClip=\"\",d.clearCloneStyle=\"content-box\"===a.style.backgroundClip,g.extend(d,{boxSizingReliable:function(){return e(),p},pixelBoxStyles:function(){return e(),b},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),z},scrollboxSize:function(){return e(),M},reliableTrDimensions:function(){var e,t,n,p;return null==c&&(e=q.createElement(\"table\"),t=q.createElement(\"tr\"),n=q.createElement(\"div\"),e.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",t.style.cssText=\"box-sizing:content-box;border:1px solid\",t.style.height=\"1px\",n.style.height=\"9px\",n.style.display=\"block\",ue.appendChild(e).appendChild(t).appendChild(n),p=o.getComputedStyle(t),c=parseInt(p.height,10)+parseInt(p.borderTopWidth,10)+parseInt(p.borderBottomWidth,10)===t.offsetHeight,ue.removeChild(e)),c}}))}();var tt=[\"Webkit\",\"Moz\",\"ms\"],nt=q.createElement(\"div\").style,ot={};function pt(e){var t=g.cssProps[e]||ot[e];return t||(e in nt?e:ot[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=tt.length;n--;)if((e=tt[n]+t)in nt)return e}(e)||e)}var Mt=/^(none|table(?!-c[ea]).+)/,bt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},ct={letterSpacing:\"0\",fontWeight:\"400\"};function zt(e,t,n){var o=se.exec(t);return o?Math.max(0,o[2]-(n||0))+(o[3]||\"px\"):t}function rt(e,t,n,o,p,M){var b=\"width\"===t?1:0,c=0,z=0,r=0;if(n===(o?\"border\":\"content\"))return 0;for(;b<4;b+=2)\"margin\"===n&&(r+=g.css(e,n+Ae[b],!0,p)),o?(\"content\"===n&&(z-=g.css(e,\"padding\"+Ae[b],!0,p)),\"margin\"!==n&&(z-=g.css(e,\"border\"+Ae[b]+\"Width\",!0,p))):(z+=g.css(e,\"padding\"+Ae[b],!0,p),\"padding\"!==n?z+=g.css(e,\"border\"+Ae[b]+\"Width\",!0,p):c+=g.css(e,\"border\"+Ae[b]+\"Width\",!0,p));return!o&&M>=0&&(z+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-M-z-c-.5))||0),z+r}function at(e,t,n){var o=Ke(e),p=(!d.boxSizingReliable()||n)&&\"border-box\"===g.css(e,\"boxSizing\",!1,o),M=p,b=Je(e,t,o),c=\"offset\"+t[0].toUpperCase()+t.slice(1);if(Ve.test(b)){if(!n)return b;b=\"auto\"}return(!d.boxSizingReliable()&&p||!d.reliableTrDimensions()&&_(e,\"tr\")||\"auto\"===b||!parseFloat(b)&&\"inline\"===g.css(e,\"display\",!1,o))&&e.getClientRects().length&&(p=\"border-box\"===g.css(e,\"boxSizing\",!1,o),(M=c in e)&&(b=e[c])),(b=parseFloat(b)||0)+rt(e,t,n||(p?\"border\":\"content\"),M,o,b)+\"px\"}function it(e,t,n,o,p){return new it.prototype.init(e,t,n,o,p)}g.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Je(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,o){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var p,M,b,c=pe(t),z=Ye.test(t),r=e.style;if(z||(t=pt(c)),b=g.cssHooks[t]||g.cssHooks[c],void 0===n)return b&&\"get\"in b&&void 0!==(p=b.get(e,!1,o))?p:r[t];\"string\"===(M=typeof n)&&(p=se.exec(n))&&p[1]&&(n=qe(e,t,p),M=\"number\"),null!=n&&n==n&&(\"number\"!==M||z||(n+=p&&p[3]||(g.cssNumber[c]?\"\":\"px\")),d.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(r[t]=\"inherit\"),b&&\"set\"in b&&void 0===(n=b.set(e,n,o))||(z?r.setProperty(t,n):r[t]=n))}},css:function(e,t,n,o){var p,M,b,c=pe(t);return Ye.test(t)||(t=pt(c)),(b=g.cssHooks[t]||g.cssHooks[c])&&\"get\"in b&&(p=b.get(e,!0,n)),void 0===p&&(p=Je(e,t,o)),\"normal\"===p&&t in ct&&(p=ct[t]),\"\"===n||n?(M=parseFloat(p),!0===n||isFinite(M)?M||0:p):p}}),g.each([\"height\",\"width\"],(function(e,t){g.cssHooks[t]={get:function(e,n,o){if(n)return!Mt.test(g.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?at(e,t,o):Ze(e,bt,(function(){return at(e,t,o)}))},set:function(e,n,o){var p,M=Ke(e),b=!d.scrollboxSize()&&\"absolute\"===M.position,c=(b||o)&&\"border-box\"===g.css(e,\"boxSizing\",!1,M),z=o?rt(e,t,o,c,M):0;return c&&b&&(z-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(M[t])-rt(e,t,\"border\",!1,M)-.5)),z&&(p=se.exec(n))&&\"px\"!==(p[3]||\"px\")&&(e.style[t]=n,n=g.css(e,t)),zt(0,n,z)}}})),g.cssHooks.marginLeft=et(d.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(Je(e,\"marginLeft\"))||e.getBoundingClientRect().left-Ze(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+\"px\"})),g.each({margin:\"\",padding:\"\",border:\"Width\"},(function(e,t){g.cssHooks[e+t]={expand:function(n){for(var o=0,p={},M=\"string\"==typeof n?n.split(\" \"):[n];o<4;o++)p[e+Ae[o]+t]=M[o]||M[o-2]||M[0];return p}},\"margin\"!==e&&(g.cssHooks[e+t].set=zt)})),g.fn.extend({css:function(e,t){return ee(this,(function(e,t,n){var o,p,M={},b=0;if(Array.isArray(t)){for(o=Ke(e),p=t.length;b<p;b++)M[t[b]]=g.css(e,t[b],!1,o);return M}return void 0!==n?g.style(e,t,n):g.css(e,t)}),e,t,arguments.length>1)}}),g.Tween=it,it.prototype={constructor:it,init:function(e,t,n,o,p,M){this.elem=e,this.prop=n,this.easing=p||g.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=o,this.unit=M||(g.cssNumber[n]?\"\":\"px\")},cur:function(){var e=it.propHooks[this.prop];return e&&e.get?e.get(this):it.propHooks._default.get(this)},run:function(e){var t,n=it.propHooks[this.prop];return this.options.duration?this.pos=t=g.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):it.propHooks._default.set(this),this}},it.prototype.init.prototype=it.prototype,it.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=g.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){g.fx.step[e.prop]?g.fx.step[e.prop](e):1!==e.elem.nodeType||!g.cssHooks[e.prop]&&null==e.elem.style[pt(e.prop)]?e.elem[e.prop]=e.now:g.style(e.elem,e.prop,e.now+e.unit)}}},it.propHooks.scrollTop=it.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},g.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},g.fx=it.prototype.init,g.fx.step={};var Ot,st,At=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function dt(){st&&(!1===q.hidden&&o.requestAnimationFrame?o.requestAnimationFrame(dt):o.setTimeout(dt,g.fx.interval),g.fx.tick())}function lt(){return o.setTimeout((function(){Ot=void 0})),Ot=Date.now()}function ft(e,t){var n,o=0,p={height:e};for(t=t?1:0;o<4;o+=2-t)p[\"margin\"+(n=Ae[o])]=p[\"padding\"+n]=e;return t&&(p.opacity=p.width=e),p}function qt(e,t,n){for(var o,p=(Wt.tweeners[t]||[]).concat(Wt.tweeners[\"*\"]),M=0,b=p.length;M<b;M++)if(o=p[M].call(n,t,e))return o}function Wt(e,t,n){var o,p,M=0,b=Wt.prefilters.length,c=g.Deferred().always((function(){delete z.elem})),z=function(){if(p)return!1;for(var t=Ot||lt(),n=Math.max(0,r.startTime+r.duration-t),o=1-(n/r.duration||0),M=0,b=r.tweens.length;M<b;M++)r.tweens[M].run(o);return c.notifyWith(e,[r,o,n]),o<1&&b?n:(b||c.notifyWith(e,[r,1,0]),c.resolveWith(e,[r]),!1)},r=c.promise({elem:e,props:g.extend({},t),opts:g.extend(!0,{specialEasing:{},easing:g.easing._default},n),originalProperties:t,originalOptions:n,startTime:Ot||lt(),duration:n.duration,tweens:[],createTween:function(t,n){var o=g.Tween(e,r.opts,t,n,r.opts.specialEasing[t]||r.opts.easing);return r.tweens.push(o),o},stop:function(t){var n=0,o=t?r.tweens.length:0;if(p)return this;for(p=!0;n<o;n++)r.tweens[n].run(1);return t?(c.notifyWith(e,[r,1,0]),c.resolveWith(e,[r,t])):c.rejectWith(e,[r,t]),this}}),a=r.props;for(!function(e,t){var n,o,p,M,b;for(n in e)if(p=t[o=pe(n)],M=e[n],Array.isArray(M)&&(p=M[1],M=e[n]=M[0]),n!==o&&(e[o]=M,delete e[n]),(b=g.cssHooks[o])&&\"expand\"in b)for(n in M=b.expand(M),delete e[o],M)n in e||(e[n]=M[n],t[n]=p);else t[o]=p}(a,r.opts.specialEasing);M<b;M++)if(o=Wt.prefilters[M].call(r,e,a,r.opts))return l(o.stop)&&(g._queueHooks(r.elem,r.opts.queue).stop=o.stop.bind(o)),o;return g.map(a,qt,r),l(r.opts.start)&&r.opts.start.call(e,r),r.progress(r.opts.progress).done(r.opts.done,r.opts.complete).fail(r.opts.fail).always(r.opts.always),g.fx.timer(g.extend(z,{elem:e,anim:r,queue:r.opts.queue})),r}g.Animation=g.extend(Wt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return qe(n.elem,e,se.exec(t),n),n}]},tweener:function(e,t){l(e)?(t=e,e=[\"*\"]):e=e.match($);for(var n,o=0,p=e.length;o<p;o++)n=e[o],Wt.tweeners[n]=Wt.tweeners[n]||[],Wt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var o,p,M,b,c,z,r,a,i=\"width\"in t||\"height\"in t,O=this,s={},A=e.style,u=e.nodeType&&fe(e),d=ce.get(e,\"fxshow\");for(o in n.queue||(null==(b=g._queueHooks(e,\"fx\")).unqueued&&(b.unqueued=0,c=b.empty.fire,b.empty.fire=function(){b.unqueued||c()}),b.unqueued++,O.always((function(){O.always((function(){b.unqueued--,g.queue(e,\"fx\").length||b.empty.fire()}))}))),t)if(p=t[o],At.test(p)){if(delete t[o],M=M||\"toggle\"===p,p===(u?\"hide\":\"show\")){if(\"show\"!==p||!d||void 0===d[o])continue;u=!0}s[o]=d&&d[o]||g.style(e,o)}if((z=!g.isEmptyObject(t))||!g.isEmptyObject(s))for(o in i&&1===e.nodeType&&(n.overflow=[A.overflow,A.overflowX,A.overflowY],null==(r=d&&d.display)&&(r=ce.get(e,\"display\")),\"none\"===(a=g.css(e,\"display\"))&&(r?a=r:(ve([e],!0),r=e.style.display||r,a=g.css(e,\"display\"),ve([e]))),(\"inline\"===a||\"inline-block\"===a&&null!=r)&&\"none\"===g.css(e,\"float\")&&(z||(O.done((function(){A.display=r})),null==r&&(a=A.display,r=\"none\"===a?\"\":a)),A.display=\"inline-block\")),n.overflow&&(A.overflow=\"hidden\",O.always((function(){A.overflow=n.overflow[0],A.overflowX=n.overflow[1],A.overflowY=n.overflow[2]}))),z=!1,s)z||(d?\"hidden\"in d&&(u=d.hidden):d=ce.access(e,\"fxshow\",{display:r}),M&&(d.hidden=!u),u&&ve([e],!0),O.done((function(){for(o in u||ve([e]),ce.remove(e,\"fxshow\"),s)g.style(e,o,s[o])}))),z=qt(u?d[o]:0,o,O),o in d||(d[o]=z.start,u&&(z.end=z.start,z.start=0))}],prefilter:function(e,t){t?Wt.prefilters.unshift(e):Wt.prefilters.push(e)}}),g.speed=function(e,t,n){var o=e&&\"object\"==typeof e?g.extend({},e):{complete:n||!n&&t||l(e)&&e,duration:e,easing:n&&t||t&&!l(t)&&t};return g.fx.off?o.duration=0:\"number\"!=typeof o.duration&&(o.duration in g.fx.speeds?o.duration=g.fx.speeds[o.duration]:o.duration=g.fx.speeds._default),null!=o.queue&&!0!==o.queue||(o.queue=\"fx\"),o.old=o.complete,o.complete=function(){l(o.old)&&o.old.call(this),o.queue&&g.dequeue(this,o.queue)},o},g.fn.extend({fadeTo:function(e,t,n,o){return this.filter(fe).css(\"opacity\",0).show().end().animate({opacity:t},e,n,o)},animate:function(e,t,n,o){var p=g.isEmptyObject(e),M=g.speed(t,n,o),b=function(){var t=Wt(this,g.extend({},e),M);(p||ce.get(this,\"finish\"))&&t.stop(!0)};return b.finish=b,p||!1===M.queue?this.each(b):this.queue(M.queue,b)},stop:function(e,t,n){var o=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&this.queue(e||\"fx\",[]),this.each((function(){var t=!0,p=null!=e&&e+\"queueHooks\",M=g.timers,b=ce.get(this);if(p)b[p]&&b[p].stop&&o(b[p]);else for(p in b)b[p]&&b[p].stop&&ut.test(p)&&o(b[p]);for(p=M.length;p--;)M[p].elem!==this||null!=e&&M[p].queue!==e||(M[p].anim.stop(n),t=!1,M.splice(p,1));!t&&n||g.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each((function(){var t,n=ce.get(this),o=n[e+\"queue\"],p=n[e+\"queueHooks\"],M=g.timers,b=o?o.length:0;for(n.finish=!0,g.queue(this,e,[]),p&&p.stop&&p.stop.call(this,!0),t=M.length;t--;)M[t].elem===this&&M[t].queue===e&&(M[t].anim.stop(!0),M.splice(t,1));for(t=0;t<b;t++)o[t]&&o[t].finish&&o[t].finish.call(this);delete n.finish}))}}),g.each([\"toggle\",\"show\",\"hide\"],(function(e,t){var n=g.fn[t];g.fn[t]=function(e,o,p){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ft(t,!0),e,o,p)}})),g.each({slideDown:ft(\"show\"),slideUp:ft(\"hide\"),slideToggle:ft(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},(function(e,t){g.fn[e]=function(e,n,o){return this.animate(t,e,n,o)}})),g.timers=[],g.fx.tick=function(){var e,t=0,n=g.timers;for(Ot=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||g.fx.stop(),Ot=void 0},g.fx.timer=function(e){g.timers.push(e),g.fx.start()},g.fx.interval=13,g.fx.start=function(){st||(st=!0,dt())},g.fx.stop=function(){st=null},g.fx.speeds={slow:600,fast:200,_default:400},g.fn.delay=function(e,t){return e=g.fx&&g.fx.speeds[e]||e,t=t||\"fx\",this.queue(t,(function(t,n){var p=o.setTimeout(t,e);n.stop=function(){o.clearTimeout(p)}}))},function(){var e=q.createElement(\"input\"),t=q.createElement(\"select\").appendChild(q.createElement(\"option\"));e.type=\"checkbox\",d.checkOn=\"\"!==e.value,d.optSelected=t.selected,(e=q.createElement(\"input\")).value=\"t\",e.type=\"radio\",d.radioValue=\"t\"===e.value}();var ht,vt=g.expr.attrHandle;g.fn.extend({attr:function(e,t){return ee(this,g.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){g.removeAttr(this,e)}))}}),g.extend({attr:function(e,t,n){var o,p,M=e.nodeType;if(3!==M&&8!==M&&2!==M)return void 0===e.getAttribute?g.prop(e,t,n):(1===M&&g.isXMLDoc(e)||(p=g.attrHooks[t.toLowerCase()]||(g.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void g.removeAttr(e,t):p&&\"set\"in p&&void 0!==(o=p.set(e,n,t))?o:(e.setAttribute(t,n+\"\"),n):p&&\"get\"in p&&null!==(o=p.get(e,t))?o:null==(o=g.find.attr(e,t))?void 0:o)},attrHooks:{type:{set:function(e,t){if(!d.radioValue&&\"radio\"===t&&_(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,o=0,p=t&&t.match($);if(p&&1===e.nodeType)for(;n=p[o++];)e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?g.removeAttr(e,n):e.setAttribute(n,n),n}},g.each(g.expr.match.bool.source.match(/\\w+/g),(function(e,t){var n=vt[t]||g.find.attr;vt[t]=function(e,t,o){var p,M,b=t.toLowerCase();return o||(M=vt[b],vt[b]=p,p=null!=n(e,t,o)?b:null,vt[b]=M),p}}));var Rt=/^(?:input|select|textarea|button)$/i,mt=/^(?:a|area)$/i;function gt(e){return(e.match($)||[]).join(\" \")}function Lt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function _t(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match($)||[]}g.fn.extend({prop:function(e,t){return ee(this,g.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[g.propFix[e]||e]}))}}),g.extend({prop:function(e,t,n){var o,p,M=e.nodeType;if(3!==M&&8!==M&&2!==M)return 1===M&&g.isXMLDoc(e)||(t=g.propFix[t]||t,p=g.propHooks[t]),void 0!==n?p&&\"set\"in p&&void 0!==(o=p.set(e,n,t))?o:e[t]=n:p&&\"get\"in p&&null!==(o=p.get(e,t))?o:e[t]},propHooks:{tabIndex:{get:function(e){var t=g.find.attr(e,\"tabindex\");return t?parseInt(t,10):Rt.test(e.nodeName)||mt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),d.optSelected||(g.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),g.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){g.propFix[this.toLowerCase()]=this})),g.fn.extend({addClass:function(e){var t,n,o,p,M,b;return l(e)?this.each((function(t){g(this).addClass(e.call(this,t,Lt(this)))})):(t=_t(e)).length?this.each((function(){if(o=Lt(this),n=1===this.nodeType&&\" \"+gt(o)+\" \"){for(M=0;M<t.length;M++)p=t[M],n.indexOf(\" \"+p+\" \")<0&&(n+=p+\" \");b=gt(n),o!==b&&this.setAttribute(\"class\",b)}})):this},removeClass:function(e){var t,n,o,p,M,b;return l(e)?this.each((function(t){g(this).removeClass(e.call(this,t,Lt(this)))})):arguments.length?(t=_t(e)).length?this.each((function(){if(o=Lt(this),n=1===this.nodeType&&\" \"+gt(o)+\" \"){for(M=0;M<t.length;M++)for(p=t[M];n.indexOf(\" \"+p+\" \")>-1;)n=n.replace(\" \"+p+\" \",\" \");b=gt(n),o!==b&&this.setAttribute(\"class\",b)}})):this:this.attr(\"class\",\"\")},toggleClass:function(e,t){var n,o,p,M,b=typeof e,c=\"string\"===b||Array.isArray(e);return l(e)?this.each((function(n){g(this).toggleClass(e.call(this,n,Lt(this),t),t)})):\"boolean\"==typeof t&&c?t?this.addClass(e):this.removeClass(e):(n=_t(e),this.each((function(){if(c)for(M=g(this),p=0;p<n.length;p++)o=n[p],M.hasClass(o)?M.removeClass(o):M.addClass(o);else void 0!==e&&\"boolean\"!==b||((o=Lt(this))&&ce.set(this,\"__className__\",o),this.setAttribute&&this.setAttribute(\"class\",o||!1===e?\"\":ce.get(this,\"__className__\")||\"\"))})))},hasClass:function(e){var t,n,o=0;for(t=\" \"+e+\" \";n=this[o++];)if(1===n.nodeType&&(\" \"+gt(Lt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var Nt=/\\r/g;g.fn.extend({val:function(e){var t,n,o,p=this[0];return arguments.length?(o=l(e),this.each((function(n){var p;1===this.nodeType&&(null==(p=o?e.call(this,n,g(this).val()):e)?p=\"\":\"number\"==typeof p?p+=\"\":Array.isArray(p)&&(p=g.map(p,(function(e){return null==e?\"\":e+\"\"}))),(t=g.valHooks[this.type]||g.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,p,\"value\")||(this.value=p))}))):p?(t=g.valHooks[p.type]||g.valHooks[p.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(p,\"value\"))?n:\"string\"==typeof(n=p.value)?n.replace(Nt,\"\"):null==n?\"\":n:void 0}}),g.extend({valHooks:{option:{get:function(e){var t=g.find.attr(e,\"value\");return null!=t?t:gt(g.text(e))}},select:{get:function(e){var t,n,o,p=e.options,M=e.selectedIndex,b=\"select-one\"===e.type,c=b?null:[],z=b?M+1:p.length;for(o=M<0?z:b?M:0;o<z;o++)if(((n=p[o]).selected||o===M)&&!n.disabled&&(!n.parentNode.disabled||!_(n.parentNode,\"optgroup\"))){if(t=g(n).val(),b)return t;c.push(t)}return c},set:function(e,t){for(var n,o,p=e.options,M=g.makeArray(t),b=p.length;b--;)((o=p[b]).selected=g.inArray(g.valHooks.option.get(o),M)>-1)&&(n=!0);return n||(e.selectedIndex=-1),M}}}}),g.each([\"radio\",\"checkbox\"],(function(){g.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=g.inArray(g(e).val(),t)>-1}},d.checkOn||(g.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}));var yt=o.location,Tt={guid:Date.now()},Et=/\\?/;g.parseXML=function(e){var t,n;if(!e||\"string\"!=typeof e)return null;try{t=(new o.DOMParser).parseFromString(e,\"text/xml\")}catch(e){}return n=t&&t.getElementsByTagName(\"parsererror\")[0],t&&!n||g.error(\"Invalid XML: \"+(n?g.map(n.childNodes,(function(e){return e.textContent})).join(\"\\n\"):e)),t};var Bt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};g.extend(g.event,{trigger:function(e,t,n,p){var M,b,c,z,r,a,i,O,A=[n||q],u=s.call(e,\"type\")?e.type:e,d=s.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(b=O=c=n=n||q,3!==n.nodeType&&8!==n.nodeType&&!Bt.test(u+g.event.triggered)&&(u.indexOf(\".\")>-1&&(d=u.split(\".\"),u=d.shift(),d.sort()),r=u.indexOf(\":\")<0&&\"on\"+u,(e=e[g.expando]?e:new g.Event(u,\"object\"==typeof e&&e)).isTrigger=p?2:3,e.namespace=d.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:g.makeArray(t,[e]),i=g.event.special[u]||{},p||!i.trigger||!1!==i.trigger.apply(n,t))){if(!p&&!i.noBubble&&!f(n)){for(z=i.delegateType||u,Bt.test(z+u)||(b=b.parentNode);b;b=b.parentNode)A.push(b),c=b;c===(n.ownerDocument||q)&&A.push(c.defaultView||c.parentWindow||o)}for(M=0;(b=A[M++])&&!e.isPropagationStopped();)O=b,e.type=M>1?z:i.bindType||u,(a=(ce.get(b,\"events\")||Object.create(null))[e.type]&&ce.get(b,\"handle\"))&&a.apply(b,t),(a=r&&b[r])&&a.apply&&Me(b)&&(e.result=a.apply(b,t),!1===e.result&&e.preventDefault());return e.type=u,p||e.isDefaultPrevented()||i._default&&!1!==i._default.apply(A.pop(),t)||!Me(n)||r&&l(n[u])&&!f(n)&&((c=n[r])&&(n[r]=null),g.event.triggered=u,e.isPropagationStopped()&&O.addEventListener(u,Ct),n[u](),e.isPropagationStopped()&&O.removeEventListener(u,Ct),g.event.triggered=void 0,c&&(n[r]=c)),e.result}},simulate:function(e,t,n){var o=g.extend(new g.Event,n,{type:e,isSimulated:!0});g.event.trigger(o,null,t)}}),g.fn.extend({trigger:function(e,t){return this.each((function(){g.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return g.event.trigger(e,t,n,!0)}});var Xt=/\\[\\]$/,wt=/\\r?\\n/g,St=/^(?:submit|button|image|reset|file)$/i,xt=/^(?:input|select|textarea|keygen)/i;function kt(e,t,n,o){var p;if(Array.isArray(t))g.each(t,(function(t,p){n||Xt.test(e)?o(e,p):kt(e+\"[\"+(\"object\"==typeof p&&null!=p?t:\"\")+\"]\",p,n,o)}));else if(n||\"object\"!==v(t))o(e,t);else for(p in t)kt(e+\"[\"+p+\"]\",t[p],n,o)}g.param=function(e,t){var n,o=[],p=function(e,t){var n=l(t)?t():t;o[o.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!g.isPlainObject(e))g.each(e,(function(){p(this.name,this.value)}));else for(n in e)kt(n,e[n],t,p);return o.join(\"&\")},g.fn.extend({serialize:function(){return g.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=g.prop(this,\"elements\");return e?g.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!g(this).is(\":disabled\")&&xt.test(this.nodeName)&&!St.test(e)&&(this.checked||!ge.test(e))})).map((function(e,t){var n=g(this).val();return null==n?null:Array.isArray(n)?g.map(n,(function(e){return{name:t.name,value:e.replace(wt,\"\\r\\n\")}})):{name:t.name,value:n.replace(wt,\"\\r\\n\")}})).get()}});var It=/%20/g,Dt=/#.*$/,Pt=/([?&])_=[^&]*/,jt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Ut=/^(?:GET|HEAD)$/,Ht=/^\\/\\//,Ft={},Gt={},$t=\"*/\".concat(\"*\"),Vt=q.createElement(\"a\");function Yt(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var o,p=0,M=t.toLowerCase().match($)||[];if(l(n))for(;o=M[p++];)\"+\"===o[0]?(o=o.slice(1)||\"*\",(e[o]=e[o]||[]).unshift(n)):(e[o]=e[o]||[]).push(n)}}function Kt(e,t,n,o){var p={},M=e===Gt;function b(c){var z;return p[c]=!0,g.each(e[c]||[],(function(e,c){var r=c(t,n,o);return\"string\"!=typeof r||M||p[r]?M?!(z=r):void 0:(t.dataTypes.unshift(r),b(r),!1)})),z}return b(t.dataTypes[0])||!p[\"*\"]&&b(\"*\")}function Zt(e,t){var n,o,p=g.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((p[n]?e:o||(o={}))[n]=t[n]);return o&&g.extend(!0,e,o),e}Vt.href=yt.href,g.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yt.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(yt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":g.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Zt(Zt(e,g.ajaxSettings),t):Zt(g.ajaxSettings,e)},ajaxPrefilter:Yt(Ft),ajaxTransport:Yt(Gt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var n,p,M,b,c,z,r,a,i,O,s=g.ajaxSetup({},t),A=s.context||s,u=s.context&&(A.nodeType||A.jquery)?g(A):g.event,d=g.Deferred(),l=g.Callbacks(\"once memory\"),f=s.statusCode||{},W={},h={},v=\"canceled\",R={readyState:0,getResponseHeader:function(e){var t;if(r){if(!b)for(b={};t=jt.exec(M);)b[t[1].toLowerCase()+\" \"]=(b[t[1].toLowerCase()+\" \"]||[]).concat(t[2]);t=b[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return r?M:null},setRequestHeader:function(e,t){return null==r&&(e=h[e.toLowerCase()]=h[e.toLowerCase()]||e,W[e]=t),this},overrideMimeType:function(e){return null==r&&(s.mimeType=e),this},statusCode:function(e){var t;if(e)if(r)R.always(e[R.status]);else for(t in e)f[t]=[f[t],e[t]];return this},abort:function(e){var t=e||v;return n&&n.abort(t),m(0,t),this}};if(d.promise(R),s.url=((e||s.url||yt.href)+\"\").replace(Ht,yt.protocol+\"//\"),s.type=t.method||t.type||s.method||s.type,s.dataTypes=(s.dataType||\"*\").toLowerCase().match($)||[\"\"],null==s.crossDomain){z=q.createElement(\"a\");try{z.href=s.url,z.href=z.href,s.crossDomain=Vt.protocol+\"//\"+Vt.host!=z.protocol+\"//\"+z.host}catch(e){s.crossDomain=!0}}if(s.data&&s.processData&&\"string\"!=typeof s.data&&(s.data=g.param(s.data,s.traditional)),Kt(Ft,s,t,R),r)return R;for(i in(a=g.event&&s.global)&&0==g.active++&&g.event.trigger(\"ajaxStart\"),s.type=s.type.toUpperCase(),s.hasContent=!Ut.test(s.type),p=s.url.replace(Dt,\"\"),s.hasContent?s.data&&s.processData&&0===(s.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(s.data=s.data.replace(It,\"+\")):(O=s.url.slice(p.length),s.data&&(s.processData||\"string\"==typeof s.data)&&(p+=(Et.test(p)?\"&\":\"?\")+s.data,delete s.data),!1===s.cache&&(p=p.replace(Pt,\"$1\"),O=(Et.test(p)?\"&\":\"?\")+\"_=\"+Tt.guid+++O),s.url=p+O),s.ifModified&&(g.lastModified[p]&&R.setRequestHeader(\"If-Modified-Since\",g.lastModified[p]),g.etag[p]&&R.setRequestHeader(\"If-None-Match\",g.etag[p])),(s.data&&s.hasContent&&!1!==s.contentType||t.contentType)&&R.setRequestHeader(\"Content-Type\",s.contentType),R.setRequestHeader(\"Accept\",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+(\"*\"!==s.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):s.accepts[\"*\"]),s.headers)R.setRequestHeader(i,s.headers[i]);if(s.beforeSend&&(!1===s.beforeSend.call(A,R,s)||r))return R.abort();if(v=\"abort\",l.add(s.complete),R.done(s.success),R.fail(s.error),n=Kt(Gt,s,t,R)){if(R.readyState=1,a&&u.trigger(\"ajaxSend\",[R,s]),r)return R;s.async&&s.timeout>0&&(c=o.setTimeout((function(){R.abort(\"timeout\")}),s.timeout));try{r=!1,n.send(W,m)}catch(e){if(r)throw e;m(-1,e)}}else m(-1,\"No Transport\");function m(e,t,b,z){var i,O,q,W,h,v=t;r||(r=!0,c&&o.clearTimeout(c),n=void 0,M=z||\"\",R.readyState=e>0?4:0,i=e>=200&&e<300||304===e,b&&(W=function(e,t,n){for(var o,p,M,b,c=e.contents,z=e.dataTypes;\"*\"===z[0];)z.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(o)for(p in c)if(c[p]&&c[p].test(o)){z.unshift(p);break}if(z[0]in n)M=z[0];else{for(p in n){if(!z[0]||e.converters[p+\" \"+z[0]]){M=p;break}b||(b=p)}M=M||b}if(M)return M!==z[0]&&z.unshift(M),n[M]}(s,R,b)),!i&&g.inArray(\"script\",s.dataTypes)>-1&&g.inArray(\"json\",s.dataTypes)<0&&(s.converters[\"text script\"]=function(){}),W=function(e,t,n,o){var p,M,b,c,z,r={},a=e.dataTypes.slice();if(a[1])for(b in e.converters)r[b.toLowerCase()]=e.converters[b];for(M=a.shift();M;)if(e.responseFields[M]&&(n[e.responseFields[M]]=t),!z&&o&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),z=M,M=a.shift())if(\"*\"===M)M=z;else if(\"*\"!==z&&z!==M){if(!(b=r[z+\" \"+M]||r[\"* \"+M]))for(p in r)if((c=p.split(\" \"))[1]===M&&(b=r[z+\" \"+c[0]]||r[\"* \"+c[0]])){!0===b?b=r[p]:!0!==r[p]&&(M=c[0],a.unshift(c[1]));break}if(!0!==b)if(b&&e.throws)t=b(t);else try{t=b(t)}catch(e){return{state:\"parsererror\",error:b?e:\"No conversion from \"+z+\" to \"+M}}}return{state:\"success\",data:t}}(s,W,R,i),i?(s.ifModified&&((h=R.getResponseHeader(\"Last-Modified\"))&&(g.lastModified[p]=h),(h=R.getResponseHeader(\"etag\"))&&(g.etag[p]=h)),204===e||\"HEAD\"===s.type?v=\"nocontent\":304===e?v=\"notmodified\":(v=W.state,O=W.data,i=!(q=W.error))):(q=v,!e&&v||(v=\"error\",e<0&&(e=0))),R.status=e,R.statusText=(t||v)+\"\",i?d.resolveWith(A,[O,v,R]):d.rejectWith(A,[R,v,q]),R.statusCode(f),f=void 0,a&&u.trigger(i?\"ajaxSuccess\":\"ajaxError\",[R,s,i?O:q]),l.fireWith(A,[R,v]),a&&(u.trigger(\"ajaxComplete\",[R,s]),--g.active||g.event.trigger(\"ajaxStop\")))}return R},getJSON:function(e,t,n){return g.get(e,t,n,\"json\")},getScript:function(e,t){return g.get(e,void 0,t,\"script\")}}),g.each([\"get\",\"post\"],(function(e,t){g[t]=function(e,n,o,p){return l(n)&&(p=p||o,o=n,n=void 0),g.ajax(g.extend({url:e,type:t,dataType:p,data:n,success:o},g.isPlainObject(e)&&e))}})),g.ajaxPrefilter((function(e){var t;for(t in e.headers)\"content-type\"===t.toLowerCase()&&(e.contentType=e.headers[t]||\"\")})),g._evalUrl=function(e,t,n){return g.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){g.globalEval(e,t,n)}})},g.fn.extend({wrapAll:function(e){var t;return this[0]&&(l(e)&&(e=e.call(this[0])),t=g(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return l(e)?this.each((function(t){g(this).wrapInner(e.call(this,t))})):this.each((function(){var t=g(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=l(e);return this.each((function(n){g(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not(\"body\").each((function(){g(this).replaceWith(this.childNodes)})),this}}),g.expr.pseudos.hidden=function(e){return!g.expr.pseudos.visible(e)},g.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},g.ajaxSettings.xhr=function(){try{return new o.XMLHttpRequest}catch(e){}};var Qt={0:200,1223:204},Jt=g.ajaxSettings.xhr();d.cors=!!Jt&&\"withCredentials\"in Jt,d.ajax=Jt=!!Jt,g.ajaxTransport((function(e){var t,n;if(d.cors||Jt&&!e.crossDomain)return{send:function(p,M){var b,c=e.xhr();if(c.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(b in e.xhrFields)c[b]=e.xhrFields[b];for(b in e.mimeType&&c.overrideMimeType&&c.overrideMimeType(e.mimeType),e.crossDomain||p[\"X-Requested-With\"]||(p[\"X-Requested-With\"]=\"XMLHttpRequest\"),p)c.setRequestHeader(b,p[b]);t=function(e){return function(){t&&(t=n=c.onload=c.onerror=c.onabort=c.ontimeout=c.onreadystatechange=null,\"abort\"===e?c.abort():\"error\"===e?\"number\"!=typeof c.status?M(0,\"error\"):M(c.status,c.statusText):M(Qt[c.status]||c.status,c.statusText,\"text\"!==(c.responseType||\"text\")||\"string\"!=typeof c.responseText?{binary:c.response}:{text:c.responseText},c.getAllResponseHeaders()))}},c.onload=t(),n=c.onerror=c.ontimeout=t(\"error\"),void 0!==c.onabort?c.onabort=n:c.onreadystatechange=function(){4===c.readyState&&o.setTimeout((function(){t&&n()}))},t=t(\"abort\");try{c.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),g.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),g.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return g.globalEval(e),e}}}),g.ajaxPrefilter(\"script\",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")})),g.ajaxTransport(\"script\",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(o,p){t=g(\"<script>\").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&p(\"error\"===e.type?404:200,e.type)}),q.head.appendChild(t[0])},abort:function(){n&&n()}}}));var en,tn=[],nn=/(=)\\?(?=&|$)|\\?\\?/;g.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=tn.pop()||g.expando+\"_\"+Tt.guid++;return this[e]=!0,e}}),g.ajaxPrefilter(\"json jsonp\",(function(e,t,n){var p,M,b,c=!1!==e.jsonp&&(nn.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&nn.test(e.data)&&\"data\");if(c||\"jsonp\"===e.dataTypes[0])return p=e.jsonpCallback=l(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,c?e[c]=e[c].replace(nn,\"$1\"+p):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+p),e.converters[\"script json\"]=function(){return b||g.error(p+\" was not called\"),b[0]},e.dataTypes[0]=\"json\",M=o[p],o[p]=function(){b=arguments},n.always((function(){void 0===M?g(o).removeProp(p):o[p]=M,e[p]&&(e.jsonpCallback=t.jsonpCallback,tn.push(p)),b&&l(M)&&M(b[0]),b=M=void 0})),\"script\"})),d.createHTMLDocument=((en=q.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===en.childNodes.length),g.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(d.createHTMLDocument?((o=(t=q.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=q.location.href,t.head.appendChild(o)):t=q),M=!n&&[],(p=D.exec(e))?[t.createElement(p[1])]:(p=Be([e],t,M),M&&M.length&&g(M).remove(),g.merge([],p.childNodes)));var o,p,M},g.fn.load=function(e,t,n){var o,p,M,b=this,c=e.indexOf(\" \");return c>-1&&(o=gt(e.slice(c)),e=e.slice(0,c)),l(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(p=\"POST\"),b.length>0&&g.ajax({url:e,type:p||\"GET\",dataType:\"html\",data:t}).done((function(e){M=arguments,b.html(o?g(\"<div>\").append(g.parseHTML(e)).find(o):e)})).always(n&&function(e,t){b.each((function(){n.apply(this,M||[e.responseText,t,e])}))}),this},g.expr.pseudos.animated=function(e){return g.grep(g.timers,(function(t){return e===t.elem})).length},g.offset={setOffset:function(e,t,n){var o,p,M,b,c,z,r=g.css(e,\"position\"),a=g(e),i={};\"static\"===r&&(e.style.position=\"relative\"),c=a.offset(),M=g.css(e,\"top\"),z=g.css(e,\"left\"),(\"absolute\"===r||\"fixed\"===r)&&(M+z).indexOf(\"auto\")>-1?(b=(o=a.position()).top,p=o.left):(b=parseFloat(M)||0,p=parseFloat(z)||0),l(t)&&(t=t.call(e,n,g.extend({},c))),null!=t.top&&(i.top=t.top-c.top+b),null!=t.left&&(i.left=t.left-c.left+p),\"using\"in t?t.using.call(e,i):a.css(i)}},g.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){g.offset.setOffset(this,e,t)}));var t,n,o=this[0];return o?o.getClientRects().length?(t=o.getBoundingClientRect(),n=o.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,o=this[0],p={top:0,left:0};if(\"fixed\"===g.css(o,\"position\"))t=o.getBoundingClientRect();else{for(t=this.offset(),n=o.ownerDocument,e=o.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&\"static\"===g.css(e,\"position\");)e=e.parentNode;e&&e!==o&&1===e.nodeType&&((p=g(e).offset()).top+=g.css(e,\"borderTopWidth\",!0),p.left+=g.css(e,\"borderLeftWidth\",!0))}return{top:t.top-p.top-g.css(o,\"marginTop\",!0),left:t.left-p.left-g.css(o,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&\"static\"===g.css(e,\"position\");)e=e.offsetParent;return e||ue}))}}),g.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(e,t){var n=\"pageYOffset\"===t;g.fn[e]=function(o){return ee(this,(function(e,o,p){var M;if(f(e)?M=e:9===e.nodeType&&(M=e.defaultView),void 0===p)return M?M[t]:e[o];M?M.scrollTo(n?M.pageXOffset:p,n?p:M.pageYOffset):e[o]=p}),e,o,arguments.length)}})),g.each([\"top\",\"left\"],(function(e,t){g.cssHooks[t]=et(d.pixelPosition,(function(e,n){if(n)return n=Je(e,t),Ve.test(n)?g(e).position()[t]+\"px\":n}))})),g.each({Height:\"height\",Width:\"width\"},(function(e,t){g.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},(function(n,o){g.fn[o]=function(p,M){var b=arguments.length&&(n||\"boolean\"!=typeof p),c=n||(!0===p||!0===M?\"margin\":\"border\");return ee(this,(function(t,n,p){var M;return f(t)?0===o.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(M=t.documentElement,Math.max(t.body[\"scroll\"+e],M[\"scroll\"+e],t.body[\"offset\"+e],M[\"offset\"+e],M[\"client\"+e])):void 0===p?g.css(t,n,c):g.style(t,n,p,c)}),t,b?p:void 0,b)}}))})),g.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],(function(e,t){g.fn[t]=function(e){return this.on(t,e)}})),g.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,o){return this.on(t,e,n,o)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.on(\"mouseenter\",e).on(\"mouseleave\",t||e)}}),g.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(e,t){g.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}));var on=/^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;g.proxy=function(e,t){var n,o,p;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),l(e))return o=c.call(arguments,2),p=function(){return e.apply(t||this,o.concat(c.call(arguments)))},p.guid=e.guid=e.guid||g.guid++,p},g.holdReady=function(e){e?g.readyWait++:g.ready(!0)},g.isArray=Array.isArray,g.parseJSON=JSON.parse,g.nodeName=_,g.isFunction=l,g.isWindow=f,g.camelCase=pe,g.type=v,g.now=Date.now,g.isNumeric=function(e){var t=g.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},g.trim=function(e){return null==e?\"\":(e+\"\").replace(on,\"$1\")},void 0===(n=function(){return g}.apply(t,[]))||(e.exports=n);var pn=o.jQuery,Mn=o.$;return g.noConflict=function(e){return o.$===g&&(o.$=Mn),e&&o.jQuery===g&&(o.jQuery=pn),g},void 0===p&&(o.jQuery=o.$=g),g}))},1991:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>M});var o=n(1519),p=n.n(o)()((function(e){return e[1]}));p.push([e.id,'.vjs-tree-brackets{cursor:pointer}.vjs-tree-brackets:hover{color:#1890ff}.vjs-check-controller{left:0;position:absolute}.vjs-check-controller.is-checked .vjs-check-controller-inner{background-color:#1890ff;border-color:#0076e4}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-checkbox:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-radio:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.vjs-check-controller .vjs-check-controller-inner{background-color:#fff;border:1px solid #bfcbd9;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block;height:16px;position:relative;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);vertical-align:middle;width:16px;z-index:1}.vjs-check-controller .vjs-check-controller-inner:after{border:2px solid #fff;border-left:0;border-top:0;-webkit-box-sizing:content-box;box-sizing:content-box;content:\"\";height:8px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);-webkit-transform-origin:center;transform-origin:center;-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;width:4px}.vjs-check-controller .vjs-check-controller-inner.is-radio{border-radius:100%}.vjs-check-controller .vjs-check-controller-inner.is-radio:after{background-color:#fff;border-radius:100%;height:4px;left:50%;top:50%}.vjs-check-controller .vjs-check-controller-original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.vjs-carets{cursor:pointer;position:absolute;right:0}.vjs-carets svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.vjs-carets:hover{color:#1890ff}.vjs-carets-close{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.vjs-tree-node{display:-webkit-box;display:-ms-flexbox;display:flex;line-height:20px;position:relative}.vjs-tree-node.has-carets{padding-left:15px}.vjs-tree-node.has-carets.has-selector,.vjs-tree-node.has-selector{padding-left:30px}.vjs-tree-node.is-highlight,.vjs-tree-node:hover{background-color:#e6f7ff}.vjs-tree-node .vjs-indent{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.vjs-tree-node .vjs-indent-unit{width:1em}.vjs-tree-node .vjs-indent-unit.has-line{border-left:1px dashed #bfcbd9}.vjs-node-index{margin-right:4px;position:absolute;right:100%}.vjs-colon{white-space:pre}.vjs-comment{color:#bfcbd9}.vjs-value{word-break:break-word}.vjs-value-null,.vjs-value-undefined{color:#d55fde}.vjs-value-boolean,.vjs-value-number{color:#1d8ce0}.vjs-value-string{color:#13ce66}.vjs-tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace;font-size:14px;text-align:left}.vjs-tree.is-virtual{overflow:auto}.vjs-tree.is-virtual .vjs-tree-node{white-space:nowrap}',\"\"]);const M=p},4254:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>M});var o=n(1519),p=n.n(o)()((function(e){return e[1]}));p.push([e.id,\"#alertModal{background:rgba(0,0,0,.5);z-index:99999}\",\"\"]);const M=p},8078:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>M});var o=n(1519),p=n.n(o)()((function(e){return e[1]}));p.push([e.id,\".highlight[data-v-71bb8c56]{background-color:#ff647a}\",\"\"]);const M=p},5802:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>M});var o=n(1519),p=n.n(o)()((function(e){return e[1]}));p.push([e.id,\"td[data-v-d49b0942]{vertical-align:middle!important}\",\"\"]);const M=p},7184:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>M});var o=n(1519),p=n.n(o)()((function(e){return e[1]}));p.push([e.id,\"pre.sf-dump,pre.sf-dump .sf-dump-default{background:none!important}pre.sf-dump{margin-bottom:0!important;padding-left:0!important}.entryPointDescription a{color:#fff;font:12px Menlo,Monaco,Consolas,monospace;text-decoration:underline}\",\"\"]);const M=p},4287:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>M});var o=n(1519),p=n.n(o)()((function(e){return e[1]}));p.push([e.id,\"iframe[data-v-aee1481a]{border:none}\",\"\"]);const M=p},1519:e=>{\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?\"@media \".concat(t[2],\" {\").concat(n,\"}\"):n})).join(\"\")},t.i=function(e,n,o){\"string\"==typeof e&&(e=[[null,e,\"\"]]);var p={};if(o)for(var M=0;M<this.length;M++){var b=this[M][0];null!=b&&(p[b]=!0)}for(var c=0;c<e.length;c++){var z=[].concat(e[c]);o&&p[z[0]]||(n&&(z[2]?z[2]=\"\".concat(n,\" and \").concat(z[2]):z[2]=n),t.push(z))}},t}},6486:function(e,t,n){var o;e=n.nmd(e),function(){var p,M=\"Expected a function\",b=\"__lodash_hash_undefined__\",c=\"__lodash_placeholder__\",z=16,r=32,a=64,i=128,O=256,s=1/0,A=9007199254740991,u=NaN,d=4294967295,l=[[\"ary\",i],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",z],[\"flip\",512],[\"partial\",r],[\"partialRight\",a],[\"rearg\",O]],f=\"[object Arguments]\",q=\"[object Array]\",W=\"[object Boolean]\",h=\"[object Date]\",v=\"[object Error]\",R=\"[object Function]\",m=\"[object GeneratorFunction]\",g=\"[object Map]\",L=\"[object Number]\",_=\"[object Object]\",N=\"[object Promise]\",y=\"[object RegExp]\",T=\"[object Set]\",E=\"[object String]\",B=\"[object Symbol]\",C=\"[object WeakMap]\",X=\"[object ArrayBuffer]\",w=\"[object DataView]\",S=\"[object Float32Array]\",x=\"[object Float64Array]\",k=\"[object Int8Array]\",I=\"[object Int16Array]\",D=\"[object Int32Array]\",P=\"[object Uint8Array]\",j=\"[object Uint8ClampedArray]\",U=\"[object Uint16Array]\",H=\"[object Uint32Array]\",F=/\\b__p \\+= '';/g,G=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,V=/&(?:amp|lt|gt|quot|#39);/g,Y=/[&<>\"']/g,K=RegExp(V.source),Z=RegExp(Y.source),Q=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,ee=/<%=([\\s\\S]+?)%>/g,te=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,ne=/^\\w*$/,oe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,pe=/[\\\\^$.*+?()[\\]{}|]/g,Me=RegExp(pe.source),be=/^\\s+/,ce=/\\s/,ze=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,re=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ae=/,? & /,ie=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,Oe=/[()=,{}\\[\\]\\/\\s]/,se=/\\\\(\\\\)?/g,Ae=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ue=/\\w*$/,de=/^[-+]0x[0-9a-f]+$/i,le=/^0b[01]+$/i,fe=/^\\[object .+?Constructor\\]$/,qe=/^0o[0-7]+$/i,We=/^(?:0|[1-9]\\d*)$/,he=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,ve=/($^)/,Re=/['\\n\\r\\u2028\\u2029\\\\]/g,me=\"\\\\ud800-\\\\udfff\",ge=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Le=\"\\\\u2700-\\\\u27bf\",_e=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ne=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",ye=\"\\\\ufe0e\\\\ufe0f\",Te=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ee=\"['’]\",Be=\"[\"+me+\"]\",Ce=\"[\"+Te+\"]\",Xe=\"[\"+ge+\"]\",we=\"\\\\d+\",Se=\"[\"+Le+\"]\",xe=\"[\"+_e+\"]\",ke=\"[^\"+me+Te+we+Le+_e+Ne+\"]\",Ie=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",De=\"[^\"+me+\"]\",Pe=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",je=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ue=\"[\"+Ne+\"]\",He=\"\\\\u200d\",Fe=\"(?:\"+xe+\"|\"+ke+\")\",Ge=\"(?:\"+Ue+\"|\"+ke+\")\",$e=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Ve=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Ye=\"(?:\"+Xe+\"|\"+Ie+\")\"+\"?\",Ke=\"[\"+ye+\"]?\",Ze=Ke+Ye+(\"(?:\"+He+\"(?:\"+[De,Pe,je].join(\"|\")+\")\"+Ke+Ye+\")*\"),Qe=\"(?:\"+[Se,Pe,je].join(\"|\")+\")\"+Ze,Je=\"(?:\"+[De+Xe+\"?\",Xe,Pe,je,Be].join(\"|\")+\")\",et=RegExp(Ee,\"g\"),tt=RegExp(Xe,\"g\"),nt=RegExp(Ie+\"(?=\"+Ie+\")|\"+Je+Ze,\"g\"),ot=RegExp([Ue+\"?\"+xe+\"+\"+$e+\"(?=\"+[Ce,Ue,\"$\"].join(\"|\")+\")\",Ge+\"+\"+Ve+\"(?=\"+[Ce,Ue+Fe,\"$\"].join(\"|\")+\")\",Ue+\"?\"+Fe+\"+\"+$e,Ue+\"+\"+Ve,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",we,Qe].join(\"|\"),\"g\"),pt=RegExp(\"[\"+He+me+ge+ye+\"]\"),Mt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,bt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ct=-1,zt={};zt[S]=zt[x]=zt[k]=zt[I]=zt[D]=zt[P]=zt[j]=zt[U]=zt[H]=!0,zt[f]=zt[q]=zt[X]=zt[W]=zt[w]=zt[h]=zt[v]=zt[R]=zt[g]=zt[L]=zt[_]=zt[y]=zt[T]=zt[E]=zt[C]=!1;var rt={};rt[f]=rt[q]=rt[X]=rt[w]=rt[W]=rt[h]=rt[S]=rt[x]=rt[k]=rt[I]=rt[D]=rt[g]=rt[L]=rt[_]=rt[y]=rt[T]=rt[E]=rt[B]=rt[P]=rt[j]=rt[U]=rt[H]=!0,rt[v]=rt[R]=rt[C]=!1;var at={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},it=parseFloat,Ot=parseInt,st=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,At=\"object\"==typeof self&&self&&self.Object===Object&&self,ut=st||At||Function(\"return this\")(),dt=t&&!t.nodeType&&t,lt=dt&&e&&!e.nodeType&&e,ft=lt&&lt.exports===dt,qt=ft&&st.process,Wt=function(){try{var e=lt&&lt.require&&lt.require(\"util\").types;return e||qt&&qt.binding&&qt.binding(\"util\")}catch(e){}}(),ht=Wt&&Wt.isArrayBuffer,vt=Wt&&Wt.isDate,Rt=Wt&&Wt.isMap,mt=Wt&&Wt.isRegExp,gt=Wt&&Wt.isSet,Lt=Wt&&Wt.isTypedArray;function _t(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Nt(e,t,n,o){for(var p=-1,M=null==e?0:e.length;++p<M;){var b=e[p];t(o,b,n(b),e)}return o}function yt(e,t){for(var n=-1,o=null==e?0:e.length;++n<o&&!1!==t(e[n],n,e););return e}function Tt(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Et(e,t){for(var n=-1,o=null==e?0:e.length;++n<o;)if(!t(e[n],n,e))return!1;return!0}function Bt(e,t){for(var n=-1,o=null==e?0:e.length,p=0,M=[];++n<o;){var b=e[n];t(b,n,e)&&(M[p++]=b)}return M}function Ct(e,t){return!!(null==e?0:e.length)&&Ut(e,t,0)>-1}function Xt(e,t,n){for(var o=-1,p=null==e?0:e.length;++o<p;)if(n(t,e[o]))return!0;return!1}function wt(e,t){for(var n=-1,o=null==e?0:e.length,p=Array(o);++n<o;)p[n]=t(e[n],n,e);return p}function St(e,t){for(var n=-1,o=t.length,p=e.length;++n<o;)e[p+n]=t[n];return e}function xt(e,t,n,o){var p=-1,M=null==e?0:e.length;for(o&&M&&(n=e[++p]);++p<M;)n=t(n,e[p],p,e);return n}function kt(e,t,n,o){var p=null==e?0:e.length;for(o&&p&&(n=e[--p]);p--;)n=t(n,e[p],p,e);return n}function It(e,t){for(var n=-1,o=null==e?0:e.length;++n<o;)if(t(e[n],n,e))return!0;return!1}var Dt=$t(\"length\");function Pt(e,t,n){var o;return n(e,(function(e,n,p){if(t(e,n,p))return o=n,!1})),o}function jt(e,t,n,o){for(var p=e.length,M=n+(o?1:-1);o?M--:++M<p;)if(t(e[M],M,e))return M;return-1}function Ut(e,t,n){return t==t?function(e,t,n){var o=n-1,p=e.length;for(;++o<p;)if(e[o]===t)return o;return-1}(e,t,n):jt(e,Ft,n)}function Ht(e,t,n,o){for(var p=n-1,M=e.length;++p<M;)if(o(e[p],t))return p;return-1}function Ft(e){return e!=e}function Gt(e,t){var n=null==e?0:e.length;return n?Kt(e,t)/n:u}function $t(e){return function(t){return null==t?p:t[e]}}function Vt(e){return function(t){return null==e?p:e[t]}}function Yt(e,t,n,o,p){return p(e,(function(e,p,M){n=o?(o=!1,e):t(n,e,p,M)})),n}function Kt(e,t){for(var n,o=-1,M=e.length;++o<M;){var b=t(e[o]);b!==p&&(n=n===p?b:n+b)}return n}function Zt(e,t){for(var n=-1,o=Array(e);++n<e;)o[n]=t(n);return o}function Qt(e){return e?e.slice(0,dn(e)+1).replace(be,\"\"):e}function Jt(e){return function(t){return e(t)}}function en(e,t){return wt(t,(function(t){return e[t]}))}function tn(e,t){return e.has(t)}function nn(e,t){for(var n=-1,o=e.length;++n<o&&Ut(t,e[n],0)>-1;);return n}function on(e,t){for(var n=e.length;n--&&Ut(t,e[n],0)>-1;);return n}var pn=Vt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),Mn=Vt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function bn(e){return\"\\\\\"+at[e]}function cn(e){return pt.test(e)}function zn(e){var t=-1,n=Array(e.size);return e.forEach((function(e,o){n[++t]=[o,e]})),n}function rn(e,t){return function(n){return e(t(n))}}function an(e,t){for(var n=-1,o=e.length,p=0,M=[];++n<o;){var b=e[n];b!==t&&b!==c||(e[n]=c,M[p++]=n)}return M}function On(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}function sn(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=[e,e]})),n}function An(e){return cn(e)?function(e){var t=nt.lastIndex=0;for(;nt.test(e);)++t;return t}(e):Dt(e)}function un(e){return cn(e)?function(e){return e.match(nt)||[]}(e):function(e){return e.split(\"\")}(e)}function dn(e){for(var t=e.length;t--&&ce.test(e.charAt(t)););return t}var ln=Vt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"});var fn=function e(t){var n,o=(t=null==t?ut:fn.defaults(ut.Object(),t,fn.pick(ut,bt))).Array,ce=t.Date,me=t.Error,ge=t.Function,Le=t.Math,_e=t.Object,Ne=t.RegExp,ye=t.String,Te=t.TypeError,Ee=o.prototype,Be=ge.prototype,Ce=_e.prototype,Xe=t[\"__core-js_shared__\"],we=Be.toString,Se=Ce.hasOwnProperty,xe=0,ke=(n=/[^.]+$/.exec(Xe&&Xe.keys&&Xe.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Ie=Ce.toString,De=we.call(_e),Pe=ut._,je=Ne(\"^\"+we.call(Se).replace(pe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Ue=ft?t.Buffer:p,He=t.Symbol,Fe=t.Uint8Array,Ge=Ue?Ue.allocUnsafe:p,$e=rn(_e.getPrototypeOf,_e),Ve=_e.create,Ye=Ce.propertyIsEnumerable,Ke=Ee.splice,Ze=He?He.isConcatSpreadable:p,Qe=He?He.iterator:p,Je=He?He.toStringTag:p,nt=function(){try{var e=sM(_e,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),pt=t.clearTimeout!==ut.clearTimeout&&t.clearTimeout,at=ce&&ce.now!==ut.Date.now&&ce.now,st=t.setTimeout!==ut.setTimeout&&t.setTimeout,At=Le.ceil,dt=Le.floor,lt=_e.getOwnPropertySymbols,qt=Ue?Ue.isBuffer:p,Wt=t.isFinite,Dt=Ee.join,Vt=rn(_e.keys,_e),qn=Le.max,Wn=Le.min,hn=ce.now,vn=t.parseInt,Rn=Le.random,mn=Ee.reverse,gn=sM(t,\"DataView\"),Ln=sM(t,\"Map\"),_n=sM(t,\"Promise\"),Nn=sM(t,\"Set\"),yn=sM(t,\"WeakMap\"),Tn=sM(_e,\"create\"),En=yn&&new yn,Bn={},Cn=IM(gn),Xn=IM(Ln),wn=IM(_n),Sn=IM(Nn),xn=IM(yn),kn=He?He.prototype:p,In=kn?kn.valueOf:p,Dn=kn?kn.toString:p;function Pn(e){if(nc(e)&&!Fb(e)&&!(e instanceof Fn)){if(e instanceof Hn)return e;if(Se.call(e,\"__wrapped__\"))return DM(e)}return new Hn(e)}var jn=function(){function e(){}return function(t){if(!tc(t))return{};if(Ve)return Ve(t);e.prototype=t;var n=new e;return e.prototype=p,n}}();function Un(){}function Hn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=p}function Fn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=d,this.__views__=[]}function Gn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function $n(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function Vn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function Yn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Vn;++t<n;)this.add(e[t])}function Kn(e){var t=this.__data__=new $n(e);this.size=t.size}function Zn(e,t){var n=Fb(e),o=!n&&Hb(e),p=!n&&!o&&Yb(e),M=!n&&!o&&!p&&ac(e),b=n||o||p||M,c=b?Zt(e.length,ye):[],z=c.length;for(var r in e)!t&&!Se.call(e,r)||b&&(\"length\"==r||p&&(\"offset\"==r||\"parent\"==r)||M&&(\"buffer\"==r||\"byteLength\"==r||\"byteOffset\"==r)||WM(r,z))||c.push(r);return c}function Qn(e){var t=e.length;return t?e[Ko(0,t-1)]:p}function Jn(e,t){return SM(Ep(e),zo(t,0,e.length))}function eo(e){return SM(Ep(e))}function to(e,t,n){(n!==p&&!Pb(e[t],n)||n===p&&!(t in e))&&bo(e,t,n)}function no(e,t,n){var o=e[t];Se.call(e,t)&&Pb(o,n)&&(n!==p||t in e)||bo(e,t,n)}function oo(e,t){for(var n=e.length;n--;)if(Pb(e[n][0],t))return n;return-1}function po(e,t,n,o){return so(e,(function(e,p,M){t(o,e,n(e),M)})),o}function Mo(e,t){return e&&Bp(t,Bc(t),e)}function bo(e,t,n){\"__proto__\"==t&&nt?nt(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function co(e,t){for(var n=-1,M=t.length,b=o(M),c=null==e;++n<M;)b[n]=c?p:_c(e,t[n]);return b}function zo(e,t,n){return e==e&&(n!==p&&(e=e<=n?e:n),t!==p&&(e=e>=t?e:t)),e}function ro(e,t,n,o,M,b){var c,z=1&t,r=2&t,a=4&t;if(n&&(c=M?n(e,o,M,b):n(e)),c!==p)return c;if(!tc(e))return e;var i=Fb(e);if(i){if(c=function(e){var t=e.length,n=new e.constructor(t);t&&\"string\"==typeof e[0]&&Se.call(e,\"index\")&&(n.index=e.index,n.input=e.input);return n}(e),!z)return Ep(e,c)}else{var O=dM(e),s=O==R||O==m;if(Yb(e))return gp(e,z);if(O==_||O==f||s&&!M){if(c=r||s?{}:fM(e),!z)return r?function(e,t){return Bp(e,uM(e),t)}(e,function(e,t){return e&&Bp(t,Cc(t),e)}(c,e)):function(e,t){return Bp(e,AM(e),t)}(e,Mo(c,e))}else{if(!rt[O])return M?e:{};c=function(e,t,n){var o=e.constructor;switch(t){case X:return Lp(e);case W:case h:return new o(+e);case w:return function(e,t){var n=t?Lp(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case S:case x:case k:case I:case D:case P:case j:case U:case H:return _p(e,n);case g:return new o;case L:case E:return new o(e);case y:return function(e){var t=new e.constructor(e.source,ue.exec(e));return t.lastIndex=e.lastIndex,t}(e);case T:return new o;case B:return p=e,In?_e(In.call(p)):{}}var p}(e,O,z)}}b||(b=new Kn);var A=b.get(e);if(A)return A;b.set(e,c),cc(e)?e.forEach((function(o){c.add(ro(o,t,n,o,e,b))})):oc(e)&&e.forEach((function(o,p){c.set(p,ro(o,t,n,p,e,b))}));var u=i?p:(a?r?bM:MM:r?Cc:Bc)(e);return yt(u||e,(function(o,p){u&&(o=e[p=o]),no(c,p,ro(o,t,n,p,e,b))})),c}function ao(e,t,n){var o=n.length;if(null==e)return!o;for(e=_e(e);o--;){var M=n[o],b=t[M],c=e[M];if(c===p&&!(M in e)||!b(c))return!1}return!0}function io(e,t,n){if(\"function\"!=typeof e)throw new Te(M);return BM((function(){e.apply(p,n)}),t)}function Oo(e,t,n,o){var p=-1,M=Ct,b=!0,c=e.length,z=[],r=t.length;if(!c)return z;n&&(t=wt(t,Jt(n))),o?(M=Xt,b=!1):t.length>=200&&(M=tn,b=!1,t=new Yn(t));e:for(;++p<c;){var a=e[p],i=null==n?a:n(a);if(a=o||0!==a?a:0,b&&i==i){for(var O=r;O--;)if(t[O]===i)continue e;z.push(a)}else M(t,i,o)||z.push(a)}return z}Pn.templateSettings={escape:Q,evaluate:J,interpolate:ee,variable:\"\",imports:{_:Pn}},Pn.prototype=Un.prototype,Pn.prototype.constructor=Pn,Hn.prototype=jn(Un.prototype),Hn.prototype.constructor=Hn,Fn.prototype=jn(Un.prototype),Fn.prototype.constructor=Fn,Gn.prototype.clear=function(){this.__data__=Tn?Tn(null):{},this.size=0},Gn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Gn.prototype.get=function(e){var t=this.__data__;if(Tn){var n=t[e];return n===b?p:n}return Se.call(t,e)?t[e]:p},Gn.prototype.has=function(e){var t=this.__data__;return Tn?t[e]!==p:Se.call(t,e)},Gn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Tn&&t===p?b:t,this},$n.prototype.clear=function(){this.__data__=[],this.size=0},$n.prototype.delete=function(e){var t=this.__data__,n=oo(t,e);return!(n<0)&&(n==t.length-1?t.pop():Ke.call(t,n,1),--this.size,!0)},$n.prototype.get=function(e){var t=this.__data__,n=oo(t,e);return n<0?p:t[n][1]},$n.prototype.has=function(e){return oo(this.__data__,e)>-1},$n.prototype.set=function(e,t){var n=this.__data__,o=oo(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this},Vn.prototype.clear=function(){this.size=0,this.__data__={hash:new Gn,map:new(Ln||$n),string:new Gn}},Vn.prototype.delete=function(e){var t=iM(this,e).delete(e);return this.size-=t?1:0,t},Vn.prototype.get=function(e){return iM(this,e).get(e)},Vn.prototype.has=function(e){return iM(this,e).has(e)},Vn.prototype.set=function(e,t){var n=iM(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this},Yn.prototype.add=Yn.prototype.push=function(e){return this.__data__.set(e,b),this},Yn.prototype.has=function(e){return this.__data__.has(e)},Kn.prototype.clear=function(){this.__data__=new $n,this.size=0},Kn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Kn.prototype.get=function(e){return this.__data__.get(e)},Kn.prototype.has=function(e){return this.__data__.has(e)},Kn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof $n){var o=n.__data__;if(!Ln||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new Vn(o)}return n.set(e,t),this.size=n.size,this};var so=wp(vo),Ao=wp(Ro,!0);function uo(e,t){var n=!0;return so(e,(function(e,o,p){return n=!!t(e,o,p)})),n}function lo(e,t,n){for(var o=-1,M=e.length;++o<M;){var b=e[o],c=t(b);if(null!=c&&(z===p?c==c&&!rc(c):n(c,z)))var z=c,r=b}return r}function fo(e,t){var n=[];return so(e,(function(e,o,p){t(e,o,p)&&n.push(e)})),n}function qo(e,t,n,o,p){var M=-1,b=e.length;for(n||(n=qM),p||(p=[]);++M<b;){var c=e[M];t>0&&n(c)?t>1?qo(c,t-1,n,o,p):St(p,c):o||(p[p.length]=c)}return p}var Wo=Sp(),ho=Sp(!0);function vo(e,t){return e&&Wo(e,t,Bc)}function Ro(e,t){return e&&ho(e,t,Bc)}function mo(e,t){return Bt(t,(function(t){return Qb(e[t])}))}function go(e,t){for(var n=0,o=(t=hp(t,e)).length;null!=e&&n<o;)e=e[kM(t[n++])];return n&&n==o?e:p}function Lo(e,t,n){var o=t(e);return Fb(e)?o:St(o,n(e))}function _o(e){return null==e?e===p?\"[object Undefined]\":\"[object Null]\":Je&&Je in _e(e)?function(e){var t=Se.call(e,Je),n=e[Je];try{e[Je]=p;var o=!0}catch(e){}var M=Ie.call(e);o&&(t?e[Je]=n:delete e[Je]);return M}(e):function(e){return Ie.call(e)}(e)}function No(e,t){return e>t}function yo(e,t){return null!=e&&Se.call(e,t)}function To(e,t){return null!=e&&t in _e(e)}function Eo(e,t,n){for(var M=n?Xt:Ct,b=e[0].length,c=e.length,z=c,r=o(c),a=1/0,i=[];z--;){var O=e[z];z&&t&&(O=wt(O,Jt(t))),a=Wn(O.length,a),r[z]=!n&&(t||b>=120&&O.length>=120)?new Yn(z&&O):p}O=e[0];var s=-1,A=r[0];e:for(;++s<b&&i.length<a;){var u=O[s],d=t?t(u):u;if(u=n||0!==u?u:0,!(A?tn(A,d):M(i,d,n))){for(z=c;--z;){var l=r[z];if(!(l?tn(l,d):M(e[z],d,n)))continue e}A&&A.push(d),i.push(u)}}return i}function Bo(e,t,n){var o=null==(e=yM(e,t=hp(t,e)))?e:e[kM(ZM(t))];return null==o?p:_t(o,e,n)}function Co(e){return nc(e)&&_o(e)==f}function Xo(e,t,n,o,M){return e===t||(null==e||null==t||!nc(e)&&!nc(t)?e!=e&&t!=t:function(e,t,n,o,M,b){var c=Fb(e),z=Fb(t),r=c?q:dM(e),a=z?q:dM(t),i=(r=r==f?_:r)==_,O=(a=a==f?_:a)==_,s=r==a;if(s&&Yb(e)){if(!Yb(t))return!1;c=!0,i=!1}if(s&&!i)return b||(b=new Kn),c||ac(e)?oM(e,t,n,o,M,b):function(e,t,n,o,p,M,b){switch(n){case w:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case X:return!(e.byteLength!=t.byteLength||!M(new Fe(e),new Fe(t)));case W:case h:case L:return Pb(+e,+t);case v:return e.name==t.name&&e.message==t.message;case y:case E:return e==t+\"\";case g:var c=zn;case T:var z=1&o;if(c||(c=On),e.size!=t.size&&!z)return!1;var r=b.get(e);if(r)return r==t;o|=2,b.set(e,t);var a=oM(c(e),c(t),o,p,M,b);return b.delete(e),a;case B:if(In)return In.call(e)==In.call(t)}return!1}(e,t,r,n,o,M,b);if(!(1&n)){var A=i&&Se.call(e,\"__wrapped__\"),u=O&&Se.call(t,\"__wrapped__\");if(A||u){var d=A?e.value():e,l=u?t.value():t;return b||(b=new Kn),M(d,l,n,o,b)}}if(!s)return!1;return b||(b=new Kn),function(e,t,n,o,M,b){var c=1&n,z=MM(e),r=z.length,a=MM(t),i=a.length;if(r!=i&&!c)return!1;var O=r;for(;O--;){var s=z[O];if(!(c?s in t:Se.call(t,s)))return!1}var A=b.get(e),u=b.get(t);if(A&&u)return A==t&&u==e;var d=!0;b.set(e,t),b.set(t,e);var l=c;for(;++O<r;){var f=e[s=z[O]],q=t[s];if(o)var W=c?o(q,f,s,t,e,b):o(f,q,s,e,t,b);if(!(W===p?f===q||M(f,q,n,o,b):W)){d=!1;break}l||(l=\"constructor\"==s)}if(d&&!l){var h=e.constructor,v=t.constructor;h==v||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof h&&h instanceof h&&\"function\"==typeof v&&v instanceof v||(d=!1)}return b.delete(e),b.delete(t),d}(e,t,n,o,M,b)}(e,t,n,o,Xo,M))}function wo(e,t,n,o){var M=n.length,b=M,c=!o;if(null==e)return!b;for(e=_e(e);M--;){var z=n[M];if(c&&z[2]?z[1]!==e[z[0]]:!(z[0]in e))return!1}for(;++M<b;){var r=(z=n[M])[0],a=e[r],i=z[1];if(c&&z[2]){if(a===p&&!(r in e))return!1}else{var O=new Kn;if(o)var s=o(a,i,r,e,t,O);if(!(s===p?Xo(i,a,3,o,O):s))return!1}}return!0}function So(e){return!(!tc(e)||(t=e,ke&&ke in t))&&(Qb(e)?je:fe).test(IM(e));var t}function xo(e){return\"function\"==typeof e?e:null==e?pz:\"object\"==typeof e?Fb(e)?Uo(e[0],e[1]):jo(e):sz(e)}function ko(e){if(!gM(e))return Vt(e);var t=[];for(var n in _e(e))Se.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function Io(e){if(!tc(e))return function(e){var t=[];if(null!=e)for(var n in _e(e))t.push(n);return t}(e);var t=gM(e),n=[];for(var o in e)(\"constructor\"!=o||!t&&Se.call(e,o))&&n.push(o);return n}function Do(e,t){return e<t}function Po(e,t){var n=-1,p=$b(e)?o(e.length):[];return so(e,(function(e,o,M){p[++n]=t(e,o,M)})),p}function jo(e){var t=OM(e);return 1==t.length&&t[0][2]?_M(t[0][0],t[0][1]):function(n){return n===e||wo(n,e,t)}}function Uo(e,t){return vM(e)&&LM(t)?_M(kM(e),t):function(n){var o=_c(n,e);return o===p&&o===t?Nc(n,e):Xo(t,o,3)}}function Ho(e,t,n,o,M){e!==t&&Wo(t,(function(b,c){if(M||(M=new Kn),tc(b))!function(e,t,n,o,M,b,c){var z=TM(e,n),r=TM(t,n),a=c.get(r);if(a)return void to(e,n,a);var i=b?b(z,r,n+\"\",e,t,c):p,O=i===p;if(O){var s=Fb(r),A=!s&&Yb(r),u=!s&&!A&&ac(r);i=r,s||A||u?Fb(z)?i=z:Vb(z)?i=Ep(z):A?(O=!1,i=gp(r,!0)):u?(O=!1,i=_p(r,!0)):i=[]:Mc(r)||Hb(r)?(i=z,Hb(z)?i=fc(z):tc(z)&&!Qb(z)||(i=fM(r))):O=!1}O&&(c.set(r,i),M(i,r,o,b,c),c.delete(r));to(e,n,i)}(e,t,c,n,Ho,o,M);else{var z=o?o(TM(e,c),b,c+\"\",e,t,M):p;z===p&&(z=b),to(e,c,z)}}),Cc)}function Fo(e,t){var n=e.length;if(n)return WM(t+=t<0?n:0,n)?e[t]:p}function Go(e,t,n){t=t.length?wt(t,(function(e){return Fb(e)?function(t){return go(t,1===e.length?e[0]:e)}:e})):[pz];var o=-1;t=wt(t,Jt(aM()));var p=Po(e,(function(e,n,p){var M=wt(t,(function(t){return t(e)}));return{criteria:M,index:++o,value:e}}));return function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}(p,(function(e,t){return function(e,t,n){var o=-1,p=e.criteria,M=t.criteria,b=p.length,c=n.length;for(;++o<b;){var z=Np(p[o],M[o]);if(z)return o>=c?z:z*(\"desc\"==n[o]?-1:1)}return e.index-t.index}(e,t,n)}))}function $o(e,t,n){for(var o=-1,p=t.length,M={};++o<p;){var b=t[o],c=go(e,b);n(c,b)&&tp(M,hp(b,e),c)}return M}function Vo(e,t,n,o){var p=o?Ht:Ut,M=-1,b=t.length,c=e;for(e===t&&(t=Ep(t)),n&&(c=wt(e,Jt(n)));++M<b;)for(var z=0,r=t[M],a=n?n(r):r;(z=p(c,a,z,o))>-1;)c!==e&&Ke.call(c,z,1),Ke.call(e,z,1);return e}function Yo(e,t){for(var n=e?t.length:0,o=n-1;n--;){var p=t[n];if(n==o||p!==M){var M=p;WM(p)?Ke.call(e,p,1):sp(e,p)}}return e}function Ko(e,t){return e+dt(Rn()*(t-e+1))}function Zo(e,t){var n=\"\";if(!e||t<1||t>A)return n;do{t%2&&(n+=e),(t=dt(t/2))&&(e+=e)}while(t);return n}function Qo(e,t){return CM(NM(e,t,pz),e+\"\")}function Jo(e){return Qn(Pc(e))}function ep(e,t){var n=Pc(e);return SM(n,zo(t,0,n.length))}function tp(e,t,n,o){if(!tc(e))return e;for(var M=-1,b=(t=hp(t,e)).length,c=b-1,z=e;null!=z&&++M<b;){var r=kM(t[M]),a=n;if(\"__proto__\"===r||\"constructor\"===r||\"prototype\"===r)return e;if(M!=c){var i=z[r];(a=o?o(i,r,z):p)===p&&(a=tc(i)?i:WM(t[M+1])?[]:{})}no(z,r,a),z=z[r]}return e}var np=En?function(e,t){return En.set(e,t),e}:pz,op=nt?function(e,t){return nt(e,\"toString\",{configurable:!0,enumerable:!1,value:tz(t),writable:!0})}:pz;function pp(e){return SM(Pc(e))}function Mp(e,t,n){var p=-1,M=e.length;t<0&&(t=-t>M?0:M+t),(n=n>M?M:n)<0&&(n+=M),M=t>n?0:n-t>>>0,t>>>=0;for(var b=o(M);++p<M;)b[p]=e[p+t];return b}function bp(e,t){var n;return so(e,(function(e,o,p){return!(n=t(e,o,p))})),!!n}function cp(e,t,n){var o=0,p=null==e?o:e.length;if(\"number\"==typeof t&&t==t&&p<=2147483647){for(;o<p;){var M=o+p>>>1,b=e[M];null!==b&&!rc(b)&&(n?b<=t:b<t)?o=M+1:p=M}return p}return zp(e,t,pz,n)}function zp(e,t,n,o){var M=0,b=null==e?0:e.length;if(0===b)return 0;for(var c=(t=n(t))!=t,z=null===t,r=rc(t),a=t===p;M<b;){var i=dt((M+b)/2),O=n(e[i]),s=O!==p,A=null===O,u=O==O,d=rc(O);if(c)var l=o||u;else l=a?u&&(o||s):z?u&&s&&(o||!A):r?u&&s&&!A&&(o||!d):!A&&!d&&(o?O<=t:O<t);l?M=i+1:b=i}return Wn(b,4294967294)}function rp(e,t){for(var n=-1,o=e.length,p=0,M=[];++n<o;){var b=e[n],c=t?t(b):b;if(!n||!Pb(c,z)){var z=c;M[p++]=0===b?0:b}}return M}function ap(e){return\"number\"==typeof e?e:rc(e)?u:+e}function ip(e){if(\"string\"==typeof e)return e;if(Fb(e))return wt(e,ip)+\"\";if(rc(e))return Dn?Dn.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function Op(e,t,n){var o=-1,p=Ct,M=e.length,b=!0,c=[],z=c;if(n)b=!1,p=Xt;else if(M>=200){var r=t?null:Zp(e);if(r)return On(r);b=!1,p=tn,z=new Yn}else z=t?[]:c;e:for(;++o<M;){var a=e[o],i=t?t(a):a;if(a=n||0!==a?a:0,b&&i==i){for(var O=z.length;O--;)if(z[O]===i)continue e;t&&z.push(i),c.push(a)}else p(z,i,n)||(z!==c&&z.push(i),c.push(a))}return c}function sp(e,t){return null==(e=yM(e,t=hp(t,e)))||delete e[kM(ZM(t))]}function Ap(e,t,n,o){return tp(e,t,n(go(e,t)),o)}function up(e,t,n,o){for(var p=e.length,M=o?p:-1;(o?M--:++M<p)&&t(e[M],M,e););return n?Mp(e,o?0:M,o?M+1:p):Mp(e,o?M+1:0,o?p:M)}function dp(e,t){var n=e;return n instanceof Fn&&(n=n.value()),xt(t,(function(e,t){return t.func.apply(t.thisArg,St([e],t.args))}),n)}function lp(e,t,n){var p=e.length;if(p<2)return p?Op(e[0]):[];for(var M=-1,b=o(p);++M<p;)for(var c=e[M],z=-1;++z<p;)z!=M&&(b[M]=Oo(b[M]||c,e[z],t,n));return Op(qo(b,1),t,n)}function fp(e,t,n){for(var o=-1,M=e.length,b=t.length,c={};++o<M;){var z=o<b?t[o]:p;n(c,e[o],z)}return c}function qp(e){return Vb(e)?e:[]}function Wp(e){return\"function\"==typeof e?e:pz}function hp(e,t){return Fb(e)?e:vM(e,t)?[e]:xM(qc(e))}var vp=Qo;function Rp(e,t,n){var o=e.length;return n=n===p?o:n,!t&&n>=o?e:Mp(e,t,n)}var mp=pt||function(e){return ut.clearTimeout(e)};function gp(e,t){if(t)return e.slice();var n=e.length,o=Ge?Ge(n):new e.constructor(n);return e.copy(o),o}function Lp(e){var t=new e.constructor(e.byteLength);return new Fe(t).set(new Fe(e)),t}function _p(e,t){var n=t?Lp(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Np(e,t){if(e!==t){var n=e!==p,o=null===e,M=e==e,b=rc(e),c=t!==p,z=null===t,r=t==t,a=rc(t);if(!z&&!a&&!b&&e>t||b&&c&&r&&!z&&!a||o&&c&&r||!n&&r||!M)return 1;if(!o&&!b&&!a&&e<t||a&&n&&M&&!o&&!b||z&&n&&M||!c&&M||!r)return-1}return 0}function yp(e,t,n,p){for(var M=-1,b=e.length,c=n.length,z=-1,r=t.length,a=qn(b-c,0),i=o(r+a),O=!p;++z<r;)i[z]=t[z];for(;++M<c;)(O||M<b)&&(i[n[M]]=e[M]);for(;a--;)i[z++]=e[M++];return i}function Tp(e,t,n,p){for(var M=-1,b=e.length,c=-1,z=n.length,r=-1,a=t.length,i=qn(b-z,0),O=o(i+a),s=!p;++M<i;)O[M]=e[M];for(var A=M;++r<a;)O[A+r]=t[r];for(;++c<z;)(s||M<b)&&(O[A+n[c]]=e[M++]);return O}function Ep(e,t){var n=-1,p=e.length;for(t||(t=o(p));++n<p;)t[n]=e[n];return t}function Bp(e,t,n,o){var M=!n;n||(n={});for(var b=-1,c=t.length;++b<c;){var z=t[b],r=o?o(n[z],e[z],z,n,e):p;r===p&&(r=e[z]),M?bo(n,z,r):no(n,z,r)}return n}function Cp(e,t){return function(n,o){var p=Fb(n)?Nt:po,M=t?t():{};return p(n,e,aM(o,2),M)}}function Xp(e){return Qo((function(t,n){var o=-1,M=n.length,b=M>1?n[M-1]:p,c=M>2?n[2]:p;for(b=e.length>3&&\"function\"==typeof b?(M--,b):p,c&&hM(n[0],n[1],c)&&(b=M<3?p:b,M=1),t=_e(t);++o<M;){var z=n[o];z&&e(t,z,o,b)}return t}))}function wp(e,t){return function(n,o){if(null==n)return n;if(!$b(n))return e(n,o);for(var p=n.length,M=t?p:-1,b=_e(n);(t?M--:++M<p)&&!1!==o(b[M],M,b););return n}}function Sp(e){return function(t,n,o){for(var p=-1,M=_e(t),b=o(t),c=b.length;c--;){var z=b[e?c:++p];if(!1===n(M[z],z,M))break}return t}}function xp(e){return function(t){var n=cn(t=qc(t))?un(t):p,o=n?n[0]:t.charAt(0),M=n?Rp(n,1).join(\"\"):t.slice(1);return o[e]()+M}}function kp(e){return function(t){return xt(Qc(Hc(t).replace(et,\"\")),e,\"\")}}function Ip(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=jn(e.prototype),o=e.apply(n,t);return tc(o)?o:n}}function Dp(e){return function(t,n,o){var M=_e(t);if(!$b(t)){var b=aM(n,3);t=Bc(t),n=function(e){return b(M[e],e,M)}}var c=e(t,n,o);return c>-1?M[b?t[c]:c]:p}}function Pp(e){return pM((function(t){var n=t.length,o=n,b=Hn.prototype.thru;for(e&&t.reverse();o--;){var c=t[o];if(\"function\"!=typeof c)throw new Te(M);if(b&&!z&&\"wrapper\"==zM(c))var z=new Hn([],!0)}for(o=z?o:n;++o<n;){var r=zM(c=t[o]),a=\"wrapper\"==r?cM(c):p;z=a&&RM(a[0])&&424==a[1]&&!a[4].length&&1==a[9]?z[zM(a[0])].apply(z,a[3]):1==c.length&&RM(c)?z[r]():z.thru(c)}return function(){var e=arguments,o=e[0];if(z&&1==e.length&&Fb(o))return z.plant(o).value();for(var p=0,M=n?t[p].apply(this,e):o;++p<n;)M=t[p].call(this,M);return M}}))}function jp(e,t,n,M,b,c,z,r,a,O){var s=t&i,A=1&t,u=2&t,d=24&t,l=512&t,f=u?p:Ip(e);return function i(){for(var q=arguments.length,W=o(q),h=q;h--;)W[h]=arguments[h];if(d)var v=rM(i),R=function(e,t){for(var n=e.length,o=0;n--;)e[n]===t&&++o;return o}(W,v);if(M&&(W=yp(W,M,b,d)),c&&(W=Tp(W,c,z,d)),q-=R,d&&q<O){var m=an(W,v);return Yp(e,t,jp,i.placeholder,n,W,m,r,a,O-q)}var g=A?n:this,L=u?g[e]:e;return q=W.length,r?W=function(e,t){var n=e.length,o=Wn(t.length,n),M=Ep(e);for(;o--;){var b=t[o];e[o]=WM(b,n)?M[b]:p}return e}(W,r):l&&q>1&&W.reverse(),s&&a<q&&(W.length=a),this&&this!==ut&&this instanceof i&&(L=f||Ip(L)),L.apply(g,W)}}function Up(e,t){return function(n,o){return function(e,t,n,o){return vo(e,(function(e,p,M){t(o,n(e),p,M)})),o}(n,e,t(o),{})}}function Hp(e,t){return function(n,o){var M;if(n===p&&o===p)return t;if(n!==p&&(M=n),o!==p){if(M===p)return o;\"string\"==typeof n||\"string\"==typeof o?(n=ip(n),o=ip(o)):(n=ap(n),o=ap(o)),M=e(n,o)}return M}}function Fp(e){return pM((function(t){return t=wt(t,Jt(aM())),Qo((function(n){var o=this;return e(t,(function(e){return _t(e,o,n)}))}))}))}function Gp(e,t){var n=(t=t===p?\" \":ip(t)).length;if(n<2)return n?Zo(t,e):t;var o=Zo(t,At(e/An(t)));return cn(t)?Rp(un(o),0,e).join(\"\"):o.slice(0,e)}function $p(e){return function(t,n,M){return M&&\"number\"!=typeof M&&hM(t,n,M)&&(n=M=p),t=Ac(t),n===p?(n=t,t=0):n=Ac(n),function(e,t,n,p){for(var M=-1,b=qn(At((t-e)/(n||1)),0),c=o(b);b--;)c[p?b:++M]=e,e+=n;return c}(t,n,M=M===p?t<n?1:-1:Ac(M),e)}}function Vp(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=lc(t),n=lc(n)),e(t,n)}}function Yp(e,t,n,o,M,b,c,z,i,O){var s=8&t;t|=s?r:a,4&(t&=~(s?a:r))||(t&=-4);var A=[e,t,M,s?b:p,s?c:p,s?p:b,s?p:c,z,i,O],u=n.apply(p,A);return RM(e)&&EM(u,A),u.placeholder=o,XM(u,e,t)}function Kp(e){var t=Le[e];return function(e,n){if(e=lc(e),(n=null==n?0:Wn(uc(n),292))&&Wt(e)){var o=(qc(e)+\"e\").split(\"e\");return+((o=(qc(t(o[0]+\"e\"+(+o[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+o[1]-n))}return t(e)}}var Zp=Nn&&1/On(new Nn([,-0]))[1]==s?function(e){return new Nn(e)}:rz;function Qp(e){return function(t){var n=dM(t);return n==g?zn(t):n==T?sn(t):function(e,t){return wt(t,(function(t){return[t,e[t]]}))}(t,e(t))}}function Jp(e,t,n,b,s,A,u,d){var l=2&t;if(!l&&\"function\"!=typeof e)throw new Te(M);var f=b?b.length:0;if(f||(t&=-97,b=s=p),u=u===p?u:qn(uc(u),0),d=d===p?d:uc(d),f-=s?s.length:0,t&a){var q=b,W=s;b=s=p}var h=l?p:cM(e),v=[e,t,n,b,s,q,W,A,u,d];if(h&&function(e,t){var n=e[1],o=t[1],p=n|o,M=p<131,b=o==i&&8==n||o==i&&n==O&&e[7].length<=t[8]||384==o&&t[7].length<=t[8]&&8==n;if(!M&&!b)return e;1&o&&(e[2]=t[2],p|=1&n?0:4);var z=t[3];if(z){var r=e[3];e[3]=r?yp(r,z,t[4]):z,e[4]=r?an(e[3],c):t[4]}(z=t[5])&&(r=e[5],e[5]=r?Tp(r,z,t[6]):z,e[6]=r?an(e[5],c):t[6]);(z=t[7])&&(e[7]=z);o&i&&(e[8]=null==e[8]?t[8]:Wn(e[8],t[8]));null==e[9]&&(e[9]=t[9]);e[0]=t[0],e[1]=p}(v,h),e=v[0],t=v[1],n=v[2],b=v[3],s=v[4],!(d=v[9]=v[9]===p?l?0:e.length:qn(v[9]-f,0))&&24&t&&(t&=-25),t&&1!=t)R=8==t||t==z?function(e,t,n){var M=Ip(e);return function b(){for(var c=arguments.length,z=o(c),r=c,a=rM(b);r--;)z[r]=arguments[r];var i=c<3&&z[0]!==a&&z[c-1]!==a?[]:an(z,a);return(c-=i.length)<n?Yp(e,t,jp,b.placeholder,p,z,i,p,p,n-c):_t(this&&this!==ut&&this instanceof b?M:e,this,z)}}(e,t,d):t!=r&&33!=t||s.length?jp.apply(p,v):function(e,t,n,p){var M=1&t,b=Ip(e);return function t(){for(var c=-1,z=arguments.length,r=-1,a=p.length,i=o(a+z),O=this&&this!==ut&&this instanceof t?b:e;++r<a;)i[r]=p[r];for(;z--;)i[r++]=arguments[++c];return _t(O,M?n:this,i)}}(e,t,n,b);else var R=function(e,t,n){var o=1&t,p=Ip(e);return function t(){return(this&&this!==ut&&this instanceof t?p:e).apply(o?n:this,arguments)}}(e,t,n);return XM((h?np:EM)(R,v),e,t)}function eM(e,t,n,o){return e===p||Pb(e,Ce[n])&&!Se.call(o,n)?t:e}function tM(e,t,n,o,M,b){return tc(e)&&tc(t)&&(b.set(t,e),Ho(e,t,p,tM,b),b.delete(t)),e}function nM(e){return Mc(e)?p:e}function oM(e,t,n,o,M,b){var c=1&n,z=e.length,r=t.length;if(z!=r&&!(c&&r>z))return!1;var a=b.get(e),i=b.get(t);if(a&&i)return a==t&&i==e;var O=-1,s=!0,A=2&n?new Yn:p;for(b.set(e,t),b.set(t,e);++O<z;){var u=e[O],d=t[O];if(o)var l=c?o(d,u,O,t,e,b):o(u,d,O,e,t,b);if(l!==p){if(l)continue;s=!1;break}if(A){if(!It(t,(function(e,t){if(!tn(A,t)&&(u===e||M(u,e,n,o,b)))return A.push(t)}))){s=!1;break}}else if(u!==d&&!M(u,d,n,o,b)){s=!1;break}}return b.delete(e),b.delete(t),s}function pM(e){return CM(NM(e,p,GM),e+\"\")}function MM(e){return Lo(e,Bc,AM)}function bM(e){return Lo(e,Cc,uM)}var cM=En?function(e){return En.get(e)}:rz;function zM(e){for(var t=e.name+\"\",n=Bn[t],o=Se.call(Bn,t)?n.length:0;o--;){var p=n[o],M=p.func;if(null==M||M==e)return p.name}return t}function rM(e){return(Se.call(Pn,\"placeholder\")?Pn:e).placeholder}function aM(){var e=Pn.iteratee||Mz;return e=e===Mz?xo:e,arguments.length?e(arguments[0],arguments[1]):e}function iM(e,t){var n,o,p=e.__data__;return(\"string\"==(o=typeof(n=t))||\"number\"==o||\"symbol\"==o||\"boolean\"==o?\"__proto__\"!==n:null===n)?p[\"string\"==typeof t?\"string\":\"hash\"]:p.map}function OM(e){for(var t=Bc(e),n=t.length;n--;){var o=t[n],p=e[o];t[n]=[o,p,LM(p)]}return t}function sM(e,t){var n=function(e,t){return null==e?p:e[t]}(e,t);return So(n)?n:p}var AM=lt?function(e){return null==e?[]:(e=_e(e),Bt(lt(e),(function(t){return Ye.call(e,t)})))}:dz,uM=lt?function(e){for(var t=[];e;)St(t,AM(e)),e=$e(e);return t}:dz,dM=_o;function lM(e,t,n){for(var o=-1,p=(t=hp(t,e)).length,M=!1;++o<p;){var b=kM(t[o]);if(!(M=null!=e&&n(e,b)))break;e=e[b]}return M||++o!=p?M:!!(p=null==e?0:e.length)&&ec(p)&&WM(b,p)&&(Fb(e)||Hb(e))}function fM(e){return\"function\"!=typeof e.constructor||gM(e)?{}:jn($e(e))}function qM(e){return Fb(e)||Hb(e)||!!(Ze&&e&&e[Ze])}function WM(e,t){var n=typeof e;return!!(t=null==t?A:t)&&(\"number\"==n||\"symbol\"!=n&&We.test(e))&&e>-1&&e%1==0&&e<t}function hM(e,t,n){if(!tc(n))return!1;var o=typeof t;return!!(\"number\"==o?$b(n)&&WM(t,n.length):\"string\"==o&&t in n)&&Pb(n[t],e)}function vM(e,t){if(Fb(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!rc(e))||(ne.test(e)||!te.test(e)||null!=t&&e in _e(t))}function RM(e){var t=zM(e),n=Pn[t];if(\"function\"!=typeof n||!(t in Fn.prototype))return!1;if(e===n)return!0;var o=cM(n);return!!o&&e===o[0]}(gn&&dM(new gn(new ArrayBuffer(1)))!=w||Ln&&dM(new Ln)!=g||_n&&dM(_n.resolve())!=N||Nn&&dM(new Nn)!=T||yn&&dM(new yn)!=C)&&(dM=function(e){var t=_o(e),n=t==_?e.constructor:p,o=n?IM(n):\"\";if(o)switch(o){case Cn:return w;case Xn:return g;case wn:return N;case Sn:return T;case xn:return C}return t});var mM=Xe?Qb:lz;function gM(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||Ce)}function LM(e){return e==e&&!tc(e)}function _M(e,t){return function(n){return null!=n&&(n[e]===t&&(t!==p||e in _e(n)))}}function NM(e,t,n){return t=qn(t===p?e.length-1:t,0),function(){for(var p=arguments,M=-1,b=qn(p.length-t,0),c=o(b);++M<b;)c[M]=p[t+M];M=-1;for(var z=o(t+1);++M<t;)z[M]=p[M];return z[t]=n(c),_t(e,this,z)}}function yM(e,t){return t.length<2?e:go(e,Mp(t,0,-1))}function TM(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var EM=wM(np),BM=st||function(e,t){return ut.setTimeout(e,t)},CM=wM(op);function XM(e,t,n){var o=t+\"\";return CM(e,function(e,t){var n=t.length;if(!n)return e;var o=n-1;return t[o]=(n>1?\"& \":\"\")+t[o],t=t.join(n>2?\", \":\" \"),e.replace(ze,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(o,function(e,t){return yt(l,(function(n){var o=\"_.\"+n[0];t&n[1]&&!Ct(e,o)&&e.push(o)})),e.sort()}(function(e){var t=e.match(re);return t?t[1].split(ae):[]}(o),n)))}function wM(e){var t=0,n=0;return function(){var o=hn(),M=16-(o-n);if(n=o,M>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(p,arguments)}}function SM(e,t){var n=-1,o=e.length,M=o-1;for(t=t===p?o:t;++n<t;){var b=Ko(n,M),c=e[b];e[b]=e[n],e[n]=c}return e.length=t,e}var xM=function(e){var t=wb(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(oe,(function(e,n,o,p){t.push(o?p.replace(se,\"$1\"):n||e)})),t}));function kM(e){if(\"string\"==typeof e||rc(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function IM(e){if(null!=e){try{return we.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function DM(e){if(e instanceof Fn)return e.clone();var t=new Hn(e.__wrapped__,e.__chain__);return t.__actions__=Ep(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var PM=Qo((function(e,t){return Vb(e)?Oo(e,qo(t,1,Vb,!0)):[]})),jM=Qo((function(e,t){var n=ZM(t);return Vb(n)&&(n=p),Vb(e)?Oo(e,qo(t,1,Vb,!0),aM(n,2)):[]})),UM=Qo((function(e,t){var n=ZM(t);return Vb(n)&&(n=p),Vb(e)?Oo(e,qo(t,1,Vb,!0),p,n):[]}));function HM(e,t,n){var o=null==e?0:e.length;if(!o)return-1;var p=null==n?0:uc(n);return p<0&&(p=qn(o+p,0)),jt(e,aM(t,3),p)}function FM(e,t,n){var o=null==e?0:e.length;if(!o)return-1;var M=o-1;return n!==p&&(M=uc(n),M=n<0?qn(o+M,0):Wn(M,o-1)),jt(e,aM(t,3),M,!0)}function GM(e){return(null==e?0:e.length)?qo(e,1):[]}function $M(e){return e&&e.length?e[0]:p}var VM=Qo((function(e){var t=wt(e,qp);return t.length&&t[0]===e[0]?Eo(t):[]})),YM=Qo((function(e){var t=ZM(e),n=wt(e,qp);return t===ZM(n)?t=p:n.pop(),n.length&&n[0]===e[0]?Eo(n,aM(t,2)):[]})),KM=Qo((function(e){var t=ZM(e),n=wt(e,qp);return(t=\"function\"==typeof t?t:p)&&n.pop(),n.length&&n[0]===e[0]?Eo(n,p,t):[]}));function ZM(e){var t=null==e?0:e.length;return t?e[t-1]:p}var QM=Qo(JM);function JM(e,t){return e&&e.length&&t&&t.length?Vo(e,t):e}var eb=pM((function(e,t){var n=null==e?0:e.length,o=co(e,t);return Yo(e,wt(t,(function(e){return WM(e,n)?+e:e})).sort(Np)),o}));function tb(e){return null==e?e:mn.call(e)}var nb=Qo((function(e){return Op(qo(e,1,Vb,!0))})),ob=Qo((function(e){var t=ZM(e);return Vb(t)&&(t=p),Op(qo(e,1,Vb,!0),aM(t,2))})),pb=Qo((function(e){var t=ZM(e);return t=\"function\"==typeof t?t:p,Op(qo(e,1,Vb,!0),p,t)}));function Mb(e){if(!e||!e.length)return[];var t=0;return e=Bt(e,(function(e){if(Vb(e))return t=qn(e.length,t),!0})),Zt(t,(function(t){return wt(e,$t(t))}))}function bb(e,t){if(!e||!e.length)return[];var n=Mb(e);return null==t?n:wt(n,(function(e){return _t(t,p,e)}))}var cb=Qo((function(e,t){return Vb(e)?Oo(e,t):[]})),zb=Qo((function(e){return lp(Bt(e,Vb))})),rb=Qo((function(e){var t=ZM(e);return Vb(t)&&(t=p),lp(Bt(e,Vb),aM(t,2))})),ab=Qo((function(e){var t=ZM(e);return t=\"function\"==typeof t?t:p,lp(Bt(e,Vb),p,t)})),ib=Qo(Mb);var Ob=Qo((function(e){var t=e.length,n=t>1?e[t-1]:p;return n=\"function\"==typeof n?(e.pop(),n):p,bb(e,n)}));function sb(e){var t=Pn(e);return t.__chain__=!0,t}function Ab(e,t){return t(e)}var ub=pM((function(e){var t=e.length,n=t?e[0]:0,o=this.__wrapped__,M=function(t){return co(t,e)};return!(t>1||this.__actions__.length)&&o instanceof Fn&&WM(n)?((o=o.slice(n,+n+(t?1:0))).__actions__.push({func:Ab,args:[M],thisArg:p}),new Hn(o,this.__chain__).thru((function(e){return t&&!e.length&&e.push(p),e}))):this.thru(M)}));var db=Cp((function(e,t,n){Se.call(e,n)?++e[n]:bo(e,n,1)}));var lb=Dp(HM),fb=Dp(FM);function qb(e,t){return(Fb(e)?yt:so)(e,aM(t,3))}function Wb(e,t){return(Fb(e)?Tt:Ao)(e,aM(t,3))}var hb=Cp((function(e,t,n){Se.call(e,n)?e[n].push(t):bo(e,n,[t])}));var vb=Qo((function(e,t,n){var p=-1,M=\"function\"==typeof t,b=$b(e)?o(e.length):[];return so(e,(function(e){b[++p]=M?_t(t,e,n):Bo(e,t,n)})),b})),Rb=Cp((function(e,t,n){bo(e,n,t)}));function mb(e,t){return(Fb(e)?wt:Po)(e,aM(t,3))}var gb=Cp((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var Lb=Qo((function(e,t){if(null==e)return[];var n=t.length;return n>1&&hM(e,t[0],t[1])?t=[]:n>2&&hM(t[0],t[1],t[2])&&(t=[t[0]]),Go(e,qo(t,1),[])})),_b=at||function(){return ut.Date.now()};function Nb(e,t,n){return t=n?p:t,t=e&&null==t?e.length:t,Jp(e,i,p,p,p,p,t)}function yb(e,t){var n;if(\"function\"!=typeof t)throw new Te(M);return e=uc(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=p),n}}var Tb=Qo((function(e,t,n){var o=1;if(n.length){var p=an(n,rM(Tb));o|=r}return Jp(e,o,t,n,p)})),Eb=Qo((function(e,t,n){var o=3;if(n.length){var p=an(n,rM(Eb));o|=r}return Jp(t,o,e,n,p)}));function Bb(e,t,n){var o,b,c,z,r,a,i=0,O=!1,s=!1,A=!0;if(\"function\"!=typeof e)throw new Te(M);function u(t){var n=o,M=b;return o=b=p,i=t,z=e.apply(M,n)}function d(e){var n=e-a;return a===p||n>=t||n<0||s&&e-i>=c}function l(){var e=_b();if(d(e))return f(e);r=BM(l,function(e){var n=t-(e-a);return s?Wn(n,c-(e-i)):n}(e))}function f(e){return r=p,A&&o?u(e):(o=b=p,z)}function q(){var e=_b(),n=d(e);if(o=arguments,b=this,a=e,n){if(r===p)return function(e){return i=e,r=BM(l,t),O?u(e):z}(a);if(s)return mp(r),r=BM(l,t),u(a)}return r===p&&(r=BM(l,t)),z}return t=lc(t)||0,tc(n)&&(O=!!n.leading,c=(s=\"maxWait\"in n)?qn(lc(n.maxWait)||0,t):c,A=\"trailing\"in n?!!n.trailing:A),q.cancel=function(){r!==p&&mp(r),i=0,o=a=b=r=p},q.flush=function(){return r===p?z:f(_b())},q}var Cb=Qo((function(e,t){return io(e,1,t)})),Xb=Qo((function(e,t,n){return io(e,lc(t)||0,n)}));function wb(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new Te(M);var n=function(){var o=arguments,p=t?t.apply(this,o):o[0],M=n.cache;if(M.has(p))return M.get(p);var b=e.apply(this,o);return n.cache=M.set(p,b)||M,b};return n.cache=new(wb.Cache||Vn),n}function Sb(e){if(\"function\"!=typeof e)throw new Te(M);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}wb.Cache=Vn;var xb=vp((function(e,t){var n=(t=1==t.length&&Fb(t[0])?wt(t[0],Jt(aM())):wt(qo(t,1),Jt(aM()))).length;return Qo((function(o){for(var p=-1,M=Wn(o.length,n);++p<M;)o[p]=t[p].call(this,o[p]);return _t(e,this,o)}))})),kb=Qo((function(e,t){var n=an(t,rM(kb));return Jp(e,r,p,t,n)})),Ib=Qo((function(e,t){var n=an(t,rM(Ib));return Jp(e,a,p,t,n)})),Db=pM((function(e,t){return Jp(e,O,p,p,p,t)}));function Pb(e,t){return e===t||e!=e&&t!=t}var jb=Vp(No),Ub=Vp((function(e,t){return e>=t})),Hb=Co(function(){return arguments}())?Co:function(e){return nc(e)&&Se.call(e,\"callee\")&&!Ye.call(e,\"callee\")},Fb=o.isArray,Gb=ht?Jt(ht):function(e){return nc(e)&&_o(e)==X};function $b(e){return null!=e&&ec(e.length)&&!Qb(e)}function Vb(e){return nc(e)&&$b(e)}var Yb=qt||lz,Kb=vt?Jt(vt):function(e){return nc(e)&&_o(e)==h};function Zb(e){if(!nc(e))return!1;var t=_o(e);return t==v||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!Mc(e)}function Qb(e){if(!tc(e))return!1;var t=_o(e);return t==R||t==m||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Jb(e){return\"number\"==typeof e&&e==uc(e)}function ec(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=A}function tc(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function nc(e){return null!=e&&\"object\"==typeof e}var oc=Rt?Jt(Rt):function(e){return nc(e)&&dM(e)==g};function pc(e){return\"number\"==typeof e||nc(e)&&_o(e)==L}function Mc(e){if(!nc(e)||_o(e)!=_)return!1;var t=$e(e);if(null===t)return!0;var n=Se.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&we.call(n)==De}var bc=mt?Jt(mt):function(e){return nc(e)&&_o(e)==y};var cc=gt?Jt(gt):function(e){return nc(e)&&dM(e)==T};function zc(e){return\"string\"==typeof e||!Fb(e)&&nc(e)&&_o(e)==E}function rc(e){return\"symbol\"==typeof e||nc(e)&&_o(e)==B}var ac=Lt?Jt(Lt):function(e){return nc(e)&&ec(e.length)&&!!zt[_o(e)]};var ic=Vp(Do),Oc=Vp((function(e,t){return e<=t}));function sc(e){if(!e)return[];if($b(e))return zc(e)?un(e):Ep(e);if(Qe&&e[Qe])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Qe]());var t=dM(e);return(t==g?zn:t==T?On:Pc)(e)}function Ac(e){return e?(e=lc(e))===s||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function uc(e){var t=Ac(e),n=t%1;return t==t?n?t-n:t:0}function dc(e){return e?zo(uc(e),0,d):0}function lc(e){if(\"number\"==typeof e)return e;if(rc(e))return u;if(tc(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=tc(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=Qt(e);var n=le.test(e);return n||qe.test(e)?Ot(e.slice(2),n?2:8):de.test(e)?u:+e}function fc(e){return Bp(e,Cc(e))}function qc(e){return null==e?\"\":ip(e)}var Wc=Xp((function(e,t){if(gM(t)||$b(t))Bp(t,Bc(t),e);else for(var n in t)Se.call(t,n)&&no(e,n,t[n])})),hc=Xp((function(e,t){Bp(t,Cc(t),e)})),vc=Xp((function(e,t,n,o){Bp(t,Cc(t),e,o)})),Rc=Xp((function(e,t,n,o){Bp(t,Bc(t),e,o)})),mc=pM(co);var gc=Qo((function(e,t){e=_e(e);var n=-1,o=t.length,M=o>2?t[2]:p;for(M&&hM(t[0],t[1],M)&&(o=1);++n<o;)for(var b=t[n],c=Cc(b),z=-1,r=c.length;++z<r;){var a=c[z],i=e[a];(i===p||Pb(i,Ce[a])&&!Se.call(e,a))&&(e[a]=b[a])}return e})),Lc=Qo((function(e){return e.push(p,tM),_t(wc,p,e)}));function _c(e,t,n){var o=null==e?p:go(e,t);return o===p?n:o}function Nc(e,t){return null!=e&&lM(e,t,To)}var yc=Up((function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=Ie.call(t)),e[t]=n}),tz(pz)),Tc=Up((function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=Ie.call(t)),Se.call(e,t)?e[t].push(n):e[t]=[n]}),aM),Ec=Qo(Bo);function Bc(e){return $b(e)?Zn(e):ko(e)}function Cc(e){return $b(e)?Zn(e,!0):Io(e)}var Xc=Xp((function(e,t,n){Ho(e,t,n)})),wc=Xp((function(e,t,n,o){Ho(e,t,n,o)})),Sc=pM((function(e,t){var n={};if(null==e)return n;var o=!1;t=wt(t,(function(t){return t=hp(t,e),o||(o=t.length>1),t})),Bp(e,bM(e),n),o&&(n=ro(n,7,nM));for(var p=t.length;p--;)sp(n,t[p]);return n}));var xc=pM((function(e,t){return null==e?{}:function(e,t){return $o(e,t,(function(t,n){return Nc(e,n)}))}(e,t)}));function kc(e,t){if(null==e)return{};var n=wt(bM(e),(function(e){return[e]}));return t=aM(t),$o(e,n,(function(e,n){return t(e,n[0])}))}var Ic=Qp(Bc),Dc=Qp(Cc);function Pc(e){return null==e?[]:en(e,Bc(e))}var jc=kp((function(e,t,n){return t=t.toLowerCase(),e+(n?Uc(t):t)}));function Uc(e){return Zc(qc(e).toLowerCase())}function Hc(e){return(e=qc(e))&&e.replace(he,pn).replace(tt,\"\")}var Fc=kp((function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()})),Gc=kp((function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()})),$c=xp(\"toLowerCase\");var Vc=kp((function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}));var Yc=kp((function(e,t,n){return e+(n?\" \":\"\")+Zc(t)}));var Kc=kp((function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()})),Zc=xp(\"toUpperCase\");function Qc(e,t,n){return e=qc(e),(t=n?p:t)===p?function(e){return Mt.test(e)}(e)?function(e){return e.match(ot)||[]}(e):function(e){return e.match(ie)||[]}(e):e.match(t)||[]}var Jc=Qo((function(e,t){try{return _t(e,p,t)}catch(e){return Zb(e)?e:new me(e)}})),ez=pM((function(e,t){return yt(t,(function(t){t=kM(t),bo(e,t,Tb(e[t],e))})),e}));function tz(e){return function(){return e}}var nz=Pp(),oz=Pp(!0);function pz(e){return e}function Mz(e){return xo(\"function\"==typeof e?e:ro(e,1))}var bz=Qo((function(e,t){return function(n){return Bo(n,e,t)}})),cz=Qo((function(e,t){return function(n){return Bo(e,n,t)}}));function zz(e,t,n){var o=Bc(t),p=mo(t,o);null!=n||tc(t)&&(p.length||!o.length)||(n=t,t=e,e=this,p=mo(t,Bc(t)));var M=!(tc(n)&&\"chain\"in n&&!n.chain),b=Qb(e);return yt(p,(function(n){var o=t[n];e[n]=o,b&&(e.prototype[n]=function(){var t=this.__chain__;if(M||t){var n=e(this.__wrapped__);return(n.__actions__=Ep(this.__actions__)).push({func:o,args:arguments,thisArg:e}),n.__chain__=t,n}return o.apply(e,St([this.value()],arguments))})})),e}function rz(){}var az=Fp(wt),iz=Fp(Et),Oz=Fp(It);function sz(e){return vM(e)?$t(kM(e)):function(e){return function(t){return go(t,e)}}(e)}var Az=$p(),uz=$p(!0);function dz(){return[]}function lz(){return!1}var fz=Hp((function(e,t){return e+t}),0),qz=Kp(\"ceil\"),Wz=Hp((function(e,t){return e/t}),1),hz=Kp(\"floor\");var vz,Rz=Hp((function(e,t){return e*t}),1),mz=Kp(\"round\"),gz=Hp((function(e,t){return e-t}),0);return Pn.after=function(e,t){if(\"function\"!=typeof t)throw new Te(M);return e=uc(e),function(){if(--e<1)return t.apply(this,arguments)}},Pn.ary=Nb,Pn.assign=Wc,Pn.assignIn=hc,Pn.assignInWith=vc,Pn.assignWith=Rc,Pn.at=mc,Pn.before=yb,Pn.bind=Tb,Pn.bindAll=ez,Pn.bindKey=Eb,Pn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Fb(e)?e:[e]},Pn.chain=sb,Pn.chunk=function(e,t,n){t=(n?hM(e,t,n):t===p)?1:qn(uc(t),0);var M=null==e?0:e.length;if(!M||t<1)return[];for(var b=0,c=0,z=o(At(M/t));b<M;)z[c++]=Mp(e,b,b+=t);return z},Pn.compact=function(e){for(var t=-1,n=null==e?0:e.length,o=0,p=[];++t<n;){var M=e[t];M&&(p[o++]=M)}return p},Pn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=o(e-1),n=arguments[0],p=e;p--;)t[p-1]=arguments[p];return St(Fb(n)?Ep(n):[n],qo(t,1))},Pn.cond=function(e){var t=null==e?0:e.length,n=aM();return e=t?wt(e,(function(e){if(\"function\"!=typeof e[1])throw new Te(M);return[n(e[0]),e[1]]})):[],Qo((function(n){for(var o=-1;++o<t;){var p=e[o];if(_t(p[0],this,n))return _t(p[1],this,n)}}))},Pn.conforms=function(e){return function(e){var t=Bc(e);return function(n){return ao(n,e,t)}}(ro(e,1))},Pn.constant=tz,Pn.countBy=db,Pn.create=function(e,t){var n=jn(e);return null==t?n:Mo(n,t)},Pn.curry=function e(t,n,o){var M=Jp(t,8,p,p,p,p,p,n=o?p:n);return M.placeholder=e.placeholder,M},Pn.curryRight=function e(t,n,o){var M=Jp(t,z,p,p,p,p,p,n=o?p:n);return M.placeholder=e.placeholder,M},Pn.debounce=Bb,Pn.defaults=gc,Pn.defaultsDeep=Lc,Pn.defer=Cb,Pn.delay=Xb,Pn.difference=PM,Pn.differenceBy=jM,Pn.differenceWith=UM,Pn.drop=function(e,t,n){var o=null==e?0:e.length;return o?Mp(e,(t=n||t===p?1:uc(t))<0?0:t,o):[]},Pn.dropRight=function(e,t,n){var o=null==e?0:e.length;return o?Mp(e,0,(t=o-(t=n||t===p?1:uc(t)))<0?0:t):[]},Pn.dropRightWhile=function(e,t){return e&&e.length?up(e,aM(t,3),!0,!0):[]},Pn.dropWhile=function(e,t){return e&&e.length?up(e,aM(t,3),!0):[]},Pn.fill=function(e,t,n,o){var M=null==e?0:e.length;return M?(n&&\"number\"!=typeof n&&hM(e,t,n)&&(n=0,o=M),function(e,t,n,o){var M=e.length;for((n=uc(n))<0&&(n=-n>M?0:M+n),(o=o===p||o>M?M:uc(o))<0&&(o+=M),o=n>o?0:dc(o);n<o;)e[n++]=t;return e}(e,t,n,o)):[]},Pn.filter=function(e,t){return(Fb(e)?Bt:fo)(e,aM(t,3))},Pn.flatMap=function(e,t){return qo(mb(e,t),1)},Pn.flatMapDeep=function(e,t){return qo(mb(e,t),s)},Pn.flatMapDepth=function(e,t,n){return n=n===p?1:uc(n),qo(mb(e,t),n)},Pn.flatten=GM,Pn.flattenDeep=function(e){return(null==e?0:e.length)?qo(e,s):[]},Pn.flattenDepth=function(e,t){return(null==e?0:e.length)?qo(e,t=t===p?1:uc(t)):[]},Pn.flip=function(e){return Jp(e,512)},Pn.flow=nz,Pn.flowRight=oz,Pn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,o={};++t<n;){var p=e[t];o[p[0]]=p[1]}return o},Pn.functions=function(e){return null==e?[]:mo(e,Bc(e))},Pn.functionsIn=function(e){return null==e?[]:mo(e,Cc(e))},Pn.groupBy=hb,Pn.initial=function(e){return(null==e?0:e.length)?Mp(e,0,-1):[]},Pn.intersection=VM,Pn.intersectionBy=YM,Pn.intersectionWith=KM,Pn.invert=yc,Pn.invertBy=Tc,Pn.invokeMap=vb,Pn.iteratee=Mz,Pn.keyBy=Rb,Pn.keys=Bc,Pn.keysIn=Cc,Pn.map=mb,Pn.mapKeys=function(e,t){var n={};return t=aM(t,3),vo(e,(function(e,o,p){bo(n,t(e,o,p),e)})),n},Pn.mapValues=function(e,t){var n={};return t=aM(t,3),vo(e,(function(e,o,p){bo(n,o,t(e,o,p))})),n},Pn.matches=function(e){return jo(ro(e,1))},Pn.matchesProperty=function(e,t){return Uo(e,ro(t,1))},Pn.memoize=wb,Pn.merge=Xc,Pn.mergeWith=wc,Pn.method=bz,Pn.methodOf=cz,Pn.mixin=zz,Pn.negate=Sb,Pn.nthArg=function(e){return e=uc(e),Qo((function(t){return Fo(t,e)}))},Pn.omit=Sc,Pn.omitBy=function(e,t){return kc(e,Sb(aM(t)))},Pn.once=function(e){return yb(2,e)},Pn.orderBy=function(e,t,n,o){return null==e?[]:(Fb(t)||(t=null==t?[]:[t]),Fb(n=o?p:n)||(n=null==n?[]:[n]),Go(e,t,n))},Pn.over=az,Pn.overArgs=xb,Pn.overEvery=iz,Pn.overSome=Oz,Pn.partial=kb,Pn.partialRight=Ib,Pn.partition=gb,Pn.pick=xc,Pn.pickBy=kc,Pn.property=sz,Pn.propertyOf=function(e){return function(t){return null==e?p:go(e,t)}},Pn.pull=QM,Pn.pullAll=JM,Pn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?Vo(e,t,aM(n,2)):e},Pn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?Vo(e,t,p,n):e},Pn.pullAt=eb,Pn.range=Az,Pn.rangeRight=uz,Pn.rearg=Db,Pn.reject=function(e,t){return(Fb(e)?Bt:fo)(e,Sb(aM(t,3)))},Pn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var o=-1,p=[],M=e.length;for(t=aM(t,3);++o<M;){var b=e[o];t(b,o,e)&&(n.push(b),p.push(o))}return Yo(e,p),n},Pn.rest=function(e,t){if(\"function\"!=typeof e)throw new Te(M);return Qo(e,t=t===p?t:uc(t))},Pn.reverse=tb,Pn.sampleSize=function(e,t,n){return t=(n?hM(e,t,n):t===p)?1:uc(t),(Fb(e)?Jn:ep)(e,t)},Pn.set=function(e,t,n){return null==e?e:tp(e,t,n)},Pn.setWith=function(e,t,n,o){return o=\"function\"==typeof o?o:p,null==e?e:tp(e,t,n,o)},Pn.shuffle=function(e){return(Fb(e)?eo:pp)(e)},Pn.slice=function(e,t,n){var o=null==e?0:e.length;return o?(n&&\"number\"!=typeof n&&hM(e,t,n)?(t=0,n=o):(t=null==t?0:uc(t),n=n===p?o:uc(n)),Mp(e,t,n)):[]},Pn.sortBy=Lb,Pn.sortedUniq=function(e){return e&&e.length?rp(e):[]},Pn.sortedUniqBy=function(e,t){return e&&e.length?rp(e,aM(t,2)):[]},Pn.split=function(e,t,n){return n&&\"number\"!=typeof n&&hM(e,t,n)&&(t=n=p),(n=n===p?d:n>>>0)?(e=qc(e))&&(\"string\"==typeof t||null!=t&&!bc(t))&&!(t=ip(t))&&cn(e)?Rp(un(e),0,n):e.split(t,n):[]},Pn.spread=function(e,t){if(\"function\"!=typeof e)throw new Te(M);return t=null==t?0:qn(uc(t),0),Qo((function(n){var o=n[t],p=Rp(n,0,t);return o&&St(p,o),_t(e,this,p)}))},Pn.tail=function(e){var t=null==e?0:e.length;return t?Mp(e,1,t):[]},Pn.take=function(e,t,n){return e&&e.length?Mp(e,0,(t=n||t===p?1:uc(t))<0?0:t):[]},Pn.takeRight=function(e,t,n){var o=null==e?0:e.length;return o?Mp(e,(t=o-(t=n||t===p?1:uc(t)))<0?0:t,o):[]},Pn.takeRightWhile=function(e,t){return e&&e.length?up(e,aM(t,3),!1,!0):[]},Pn.takeWhile=function(e,t){return e&&e.length?up(e,aM(t,3)):[]},Pn.tap=function(e,t){return t(e),e},Pn.throttle=function(e,t,n){var o=!0,p=!0;if(\"function\"!=typeof e)throw new Te(M);return tc(n)&&(o=\"leading\"in n?!!n.leading:o,p=\"trailing\"in n?!!n.trailing:p),Bb(e,t,{leading:o,maxWait:t,trailing:p})},Pn.thru=Ab,Pn.toArray=sc,Pn.toPairs=Ic,Pn.toPairsIn=Dc,Pn.toPath=function(e){return Fb(e)?wt(e,kM):rc(e)?[e]:Ep(xM(qc(e)))},Pn.toPlainObject=fc,Pn.transform=function(e,t,n){var o=Fb(e),p=o||Yb(e)||ac(e);if(t=aM(t,4),null==n){var M=e&&e.constructor;n=p?o?new M:[]:tc(e)&&Qb(M)?jn($e(e)):{}}return(p?yt:vo)(e,(function(e,o,p){return t(n,e,o,p)})),n},Pn.unary=function(e){return Nb(e,1)},Pn.union=nb,Pn.unionBy=ob,Pn.unionWith=pb,Pn.uniq=function(e){return e&&e.length?Op(e):[]},Pn.uniqBy=function(e,t){return e&&e.length?Op(e,aM(t,2)):[]},Pn.uniqWith=function(e,t){return t=\"function\"==typeof t?t:p,e&&e.length?Op(e,p,t):[]},Pn.unset=function(e,t){return null==e||sp(e,t)},Pn.unzip=Mb,Pn.unzipWith=bb,Pn.update=function(e,t,n){return null==e?e:Ap(e,t,Wp(n))},Pn.updateWith=function(e,t,n,o){return o=\"function\"==typeof o?o:p,null==e?e:Ap(e,t,Wp(n),o)},Pn.values=Pc,Pn.valuesIn=function(e){return null==e?[]:en(e,Cc(e))},Pn.without=cb,Pn.words=Qc,Pn.wrap=function(e,t){return kb(Wp(t),e)},Pn.xor=zb,Pn.xorBy=rb,Pn.xorWith=ab,Pn.zip=ib,Pn.zipObject=function(e,t){return fp(e||[],t||[],no)},Pn.zipObjectDeep=function(e,t){return fp(e||[],t||[],tp)},Pn.zipWith=Ob,Pn.entries=Ic,Pn.entriesIn=Dc,Pn.extend=hc,Pn.extendWith=vc,zz(Pn,Pn),Pn.add=fz,Pn.attempt=Jc,Pn.camelCase=jc,Pn.capitalize=Uc,Pn.ceil=qz,Pn.clamp=function(e,t,n){return n===p&&(n=t,t=p),n!==p&&(n=(n=lc(n))==n?n:0),t!==p&&(t=(t=lc(t))==t?t:0),zo(lc(e),t,n)},Pn.clone=function(e){return ro(e,4)},Pn.cloneDeep=function(e){return ro(e,5)},Pn.cloneDeepWith=function(e,t){return ro(e,5,t=\"function\"==typeof t?t:p)},Pn.cloneWith=function(e,t){return ro(e,4,t=\"function\"==typeof t?t:p)},Pn.conformsTo=function(e,t){return null==t||ao(e,t,Bc(t))},Pn.deburr=Hc,Pn.defaultTo=function(e,t){return null==e||e!=e?t:e},Pn.divide=Wz,Pn.endsWith=function(e,t,n){e=qc(e),t=ip(t);var o=e.length,M=n=n===p?o:zo(uc(n),0,o);return(n-=t.length)>=0&&e.slice(n,M)==t},Pn.eq=Pb,Pn.escape=function(e){return(e=qc(e))&&Z.test(e)?e.replace(Y,Mn):e},Pn.escapeRegExp=function(e){return(e=qc(e))&&Me.test(e)?e.replace(pe,\"\\\\$&\"):e},Pn.every=function(e,t,n){var o=Fb(e)?Et:uo;return n&&hM(e,t,n)&&(t=p),o(e,aM(t,3))},Pn.find=lb,Pn.findIndex=HM,Pn.findKey=function(e,t){return Pt(e,aM(t,3),vo)},Pn.findLast=fb,Pn.findLastIndex=FM,Pn.findLastKey=function(e,t){return Pt(e,aM(t,3),Ro)},Pn.floor=hz,Pn.forEach=qb,Pn.forEachRight=Wb,Pn.forIn=function(e,t){return null==e?e:Wo(e,aM(t,3),Cc)},Pn.forInRight=function(e,t){return null==e?e:ho(e,aM(t,3),Cc)},Pn.forOwn=function(e,t){return e&&vo(e,aM(t,3))},Pn.forOwnRight=function(e,t){return e&&Ro(e,aM(t,3))},Pn.get=_c,Pn.gt=jb,Pn.gte=Ub,Pn.has=function(e,t){return null!=e&&lM(e,t,yo)},Pn.hasIn=Nc,Pn.head=$M,Pn.identity=pz,Pn.includes=function(e,t,n,o){e=$b(e)?e:Pc(e),n=n&&!o?uc(n):0;var p=e.length;return n<0&&(n=qn(p+n,0)),zc(e)?n<=p&&e.indexOf(t,n)>-1:!!p&&Ut(e,t,n)>-1},Pn.indexOf=function(e,t,n){var o=null==e?0:e.length;if(!o)return-1;var p=null==n?0:uc(n);return p<0&&(p=qn(o+p,0)),Ut(e,t,p)},Pn.inRange=function(e,t,n){return t=Ac(t),n===p?(n=t,t=0):n=Ac(n),function(e,t,n){return e>=Wn(t,n)&&e<qn(t,n)}(e=lc(e),t,n)},Pn.invoke=Ec,Pn.isArguments=Hb,Pn.isArray=Fb,Pn.isArrayBuffer=Gb,Pn.isArrayLike=$b,Pn.isArrayLikeObject=Vb,Pn.isBoolean=function(e){return!0===e||!1===e||nc(e)&&_o(e)==W},Pn.isBuffer=Yb,Pn.isDate=Kb,Pn.isElement=function(e){return nc(e)&&1===e.nodeType&&!Mc(e)},Pn.isEmpty=function(e){if(null==e)return!0;if($b(e)&&(Fb(e)||\"string\"==typeof e||\"function\"==typeof e.splice||Yb(e)||ac(e)||Hb(e)))return!e.length;var t=dM(e);if(t==g||t==T)return!e.size;if(gM(e))return!ko(e).length;for(var n in e)if(Se.call(e,n))return!1;return!0},Pn.isEqual=function(e,t){return Xo(e,t)},Pn.isEqualWith=function(e,t,n){var o=(n=\"function\"==typeof n?n:p)?n(e,t):p;return o===p?Xo(e,t,p,n):!!o},Pn.isError=Zb,Pn.isFinite=function(e){return\"number\"==typeof e&&Wt(e)},Pn.isFunction=Qb,Pn.isInteger=Jb,Pn.isLength=ec,Pn.isMap=oc,Pn.isMatch=function(e,t){return e===t||wo(e,t,OM(t))},Pn.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:p,wo(e,t,OM(t),n)},Pn.isNaN=function(e){return pc(e)&&e!=+e},Pn.isNative=function(e){if(mM(e))throw new me(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return So(e)},Pn.isNil=function(e){return null==e},Pn.isNull=function(e){return null===e},Pn.isNumber=pc,Pn.isObject=tc,Pn.isObjectLike=nc,Pn.isPlainObject=Mc,Pn.isRegExp=bc,Pn.isSafeInteger=function(e){return Jb(e)&&e>=-9007199254740991&&e<=A},Pn.isSet=cc,Pn.isString=zc,Pn.isSymbol=rc,Pn.isTypedArray=ac,Pn.isUndefined=function(e){return e===p},Pn.isWeakMap=function(e){return nc(e)&&dM(e)==C},Pn.isWeakSet=function(e){return nc(e)&&\"[object WeakSet]\"==_o(e)},Pn.join=function(e,t){return null==e?\"\":Dt.call(e,t)},Pn.kebabCase=Fc,Pn.last=ZM,Pn.lastIndexOf=function(e,t,n){var o=null==e?0:e.length;if(!o)return-1;var M=o;return n!==p&&(M=(M=uc(n))<0?qn(o+M,0):Wn(M,o-1)),t==t?function(e,t,n){for(var o=n+1;o--;)if(e[o]===t)return o;return o}(e,t,M):jt(e,Ft,M,!0)},Pn.lowerCase=Gc,Pn.lowerFirst=$c,Pn.lt=ic,Pn.lte=Oc,Pn.max=function(e){return e&&e.length?lo(e,pz,No):p},Pn.maxBy=function(e,t){return e&&e.length?lo(e,aM(t,2),No):p},Pn.mean=function(e){return Gt(e,pz)},Pn.meanBy=function(e,t){return Gt(e,aM(t,2))},Pn.min=function(e){return e&&e.length?lo(e,pz,Do):p},Pn.minBy=function(e,t){return e&&e.length?lo(e,aM(t,2),Do):p},Pn.stubArray=dz,Pn.stubFalse=lz,Pn.stubObject=function(){return{}},Pn.stubString=function(){return\"\"},Pn.stubTrue=function(){return!0},Pn.multiply=Rz,Pn.nth=function(e,t){return e&&e.length?Fo(e,uc(t)):p},Pn.noConflict=function(){return ut._===this&&(ut._=Pe),this},Pn.noop=rz,Pn.now=_b,Pn.pad=function(e,t,n){e=qc(e);var o=(t=uc(t))?An(e):0;if(!t||o>=t)return e;var p=(t-o)/2;return Gp(dt(p),n)+e+Gp(At(p),n)},Pn.padEnd=function(e,t,n){e=qc(e);var o=(t=uc(t))?An(e):0;return t&&o<t?e+Gp(t-o,n):e},Pn.padStart=function(e,t,n){e=qc(e);var o=(t=uc(t))?An(e):0;return t&&o<t?Gp(t-o,n)+e:e},Pn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),vn(qc(e).replace(be,\"\"),t||0)},Pn.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&hM(e,t,n)&&(t=n=p),n===p&&(\"boolean\"==typeof t?(n=t,t=p):\"boolean\"==typeof e&&(n=e,e=p)),e===p&&t===p?(e=0,t=1):(e=Ac(e),t===p?(t=e,e=0):t=Ac(t)),e>t){var o=e;e=t,t=o}if(n||e%1||t%1){var M=Rn();return Wn(e+M*(t-e+it(\"1e-\"+((M+\"\").length-1))),t)}return Ko(e,t)},Pn.reduce=function(e,t,n){var o=Fb(e)?xt:Yt,p=arguments.length<3;return o(e,aM(t,4),n,p,so)},Pn.reduceRight=function(e,t,n){var o=Fb(e)?kt:Yt,p=arguments.length<3;return o(e,aM(t,4),n,p,Ao)},Pn.repeat=function(e,t,n){return t=(n?hM(e,t,n):t===p)?1:uc(t),Zo(qc(e),t)},Pn.replace=function(){var e=arguments,t=qc(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Pn.result=function(e,t,n){var o=-1,M=(t=hp(t,e)).length;for(M||(M=1,e=p);++o<M;){var b=null==e?p:e[kM(t[o])];b===p&&(o=M,b=n),e=Qb(b)?b.call(e):b}return e},Pn.round=mz,Pn.runInContext=e,Pn.sample=function(e){return(Fb(e)?Qn:Jo)(e)},Pn.size=function(e){if(null==e)return 0;if($b(e))return zc(e)?An(e):e.length;var t=dM(e);return t==g||t==T?e.size:ko(e).length},Pn.snakeCase=Vc,Pn.some=function(e,t,n){var o=Fb(e)?It:bp;return n&&hM(e,t,n)&&(t=p),o(e,aM(t,3))},Pn.sortedIndex=function(e,t){return cp(e,t)},Pn.sortedIndexBy=function(e,t,n){return zp(e,t,aM(n,2))},Pn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var o=cp(e,t);if(o<n&&Pb(e[o],t))return o}return-1},Pn.sortedLastIndex=function(e,t){return cp(e,t,!0)},Pn.sortedLastIndexBy=function(e,t,n){return zp(e,t,aM(n,2),!0)},Pn.sortedLastIndexOf=function(e,t){if(null==e?0:e.length){var n=cp(e,t,!0)-1;if(Pb(e[n],t))return n}return-1},Pn.startCase=Yc,Pn.startsWith=function(e,t,n){return e=qc(e),n=null==n?0:zo(uc(n),0,e.length),t=ip(t),e.slice(n,n+t.length)==t},Pn.subtract=gz,Pn.sum=function(e){return e&&e.length?Kt(e,pz):0},Pn.sumBy=function(e,t){return e&&e.length?Kt(e,aM(t,2)):0},Pn.template=function(e,t,n){var o=Pn.templateSettings;n&&hM(e,t,n)&&(t=p),e=qc(e),t=vc({},t,o,eM);var M,b,c=vc({},t.imports,o.imports,eM),z=Bc(c),r=en(c,z),a=0,i=t.interpolate||ve,O=\"__p += '\",s=Ne((t.escape||ve).source+\"|\"+i.source+\"|\"+(i===ee?Ae:ve).source+\"|\"+(t.evaluate||ve).source+\"|$\",\"g\"),A=\"//# sourceURL=\"+(Se.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ct+\"]\")+\"\\n\";e.replace(s,(function(t,n,o,p,c,z){return o||(o=p),O+=e.slice(a,z).replace(Re,bn),n&&(M=!0,O+=\"' +\\n__e(\"+n+\") +\\n'\"),c&&(b=!0,O+=\"';\\n\"+c+\";\\n__p += '\"),o&&(O+=\"' +\\n((__t = (\"+o+\")) == null ? '' : __t) +\\n'\"),a=z+t.length,t})),O+=\"';\\n\";var u=Se.call(t,\"variable\")&&t.variable;if(u){if(Oe.test(u))throw new me(\"Invalid `variable` option passed into `_.template`\")}else O=\"with (obj) {\\n\"+O+\"\\n}\\n\";O=(b?O.replace(F,\"\"):O).replace(G,\"$1\").replace($,\"$1;\"),O=\"function(\"+(u||\"obj\")+\") {\\n\"+(u?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(M?\", __e = _.escape\":\"\")+(b?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+O+\"return __p\\n}\";var d=Jc((function(){return ge(z,A+\"return \"+O).apply(p,r)}));if(d.source=O,Zb(d))throw d;return d},Pn.times=function(e,t){if((e=uc(e))<1||e>A)return[];var n=d,o=Wn(e,d);t=aM(t),e-=d;for(var p=Zt(o,t);++n<e;)t(n);return p},Pn.toFinite=Ac,Pn.toInteger=uc,Pn.toLength=dc,Pn.toLower=function(e){return qc(e).toLowerCase()},Pn.toNumber=lc,Pn.toSafeInteger=function(e){return e?zo(uc(e),-9007199254740991,A):0===e?e:0},Pn.toString=qc,Pn.toUpper=function(e){return qc(e).toUpperCase()},Pn.trim=function(e,t,n){if((e=qc(e))&&(n||t===p))return Qt(e);if(!e||!(t=ip(t)))return e;var o=un(e),M=un(t);return Rp(o,nn(o,M),on(o,M)+1).join(\"\")},Pn.trimEnd=function(e,t,n){if((e=qc(e))&&(n||t===p))return e.slice(0,dn(e)+1);if(!e||!(t=ip(t)))return e;var o=un(e);return Rp(o,0,on(o,un(t))+1).join(\"\")},Pn.trimStart=function(e,t,n){if((e=qc(e))&&(n||t===p))return e.replace(be,\"\");if(!e||!(t=ip(t)))return e;var o=un(e);return Rp(o,nn(o,un(t))).join(\"\")},Pn.truncate=function(e,t){var n=30,o=\"...\";if(tc(t)){var M=\"separator\"in t?t.separator:M;n=\"length\"in t?uc(t.length):n,o=\"omission\"in t?ip(t.omission):o}var b=(e=qc(e)).length;if(cn(e)){var c=un(e);b=c.length}if(n>=b)return e;var z=n-An(o);if(z<1)return o;var r=c?Rp(c,0,z).join(\"\"):e.slice(0,z);if(M===p)return r+o;if(c&&(z+=r.length-z),bc(M)){if(e.slice(z).search(M)){var a,i=r;for(M.global||(M=Ne(M.source,qc(ue.exec(M))+\"g\")),M.lastIndex=0;a=M.exec(i);)var O=a.index;r=r.slice(0,O===p?z:O)}}else if(e.indexOf(ip(M),z)!=z){var s=r.lastIndexOf(M);s>-1&&(r=r.slice(0,s))}return r+o},Pn.unescape=function(e){return(e=qc(e))&&K.test(e)?e.replace(V,ln):e},Pn.uniqueId=function(e){var t=++xe;return qc(e)+t},Pn.upperCase=Kc,Pn.upperFirst=Zc,Pn.each=qb,Pn.eachRight=Wb,Pn.first=$M,zz(Pn,(vz={},vo(Pn,(function(e,t){Se.call(Pn.prototype,t)||(vz[t]=e)})),vz),{chain:!1}),Pn.VERSION=\"4.17.21\",yt([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],(function(e){Pn[e].placeholder=Pn})),yt([\"drop\",\"take\"],(function(e,t){Fn.prototype[e]=function(n){n=n===p?1:qn(uc(n),0);var o=this.__filtered__&&!t?new Fn(this):this.clone();return o.__filtered__?o.__takeCount__=Wn(n,o.__takeCount__):o.__views__.push({size:Wn(n,d),type:e+(o.__dir__<0?\"Right\":\"\")}),o},Fn.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}})),yt([\"filter\",\"map\",\"takeWhile\"],(function(e,t){var n=t+1,o=1==n||3==n;Fn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:aM(e,3),type:n}),t.__filtered__=t.__filtered__||o,t}})),yt([\"head\",\"last\"],(function(e,t){var n=\"take\"+(t?\"Right\":\"\");Fn.prototype[e]=function(){return this[n](1).value()[0]}})),yt([\"initial\",\"tail\"],(function(e,t){var n=\"drop\"+(t?\"\":\"Right\");Fn.prototype[e]=function(){return this.__filtered__?new Fn(this):this[n](1)}})),Fn.prototype.compact=function(){return this.filter(pz)},Fn.prototype.find=function(e){return this.filter(e).head()},Fn.prototype.findLast=function(e){return this.reverse().find(e)},Fn.prototype.invokeMap=Qo((function(e,t){return\"function\"==typeof e?new Fn(this):this.map((function(n){return Bo(n,e,t)}))})),Fn.prototype.reject=function(e){return this.filter(Sb(aM(e)))},Fn.prototype.slice=function(e,t){e=uc(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Fn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==p&&(n=(t=uc(t))<0?n.dropRight(-t):n.take(t-e)),n)},Fn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Fn.prototype.toArray=function(){return this.take(d)},vo(Fn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),o=/^(?:head|last)$/.test(t),M=Pn[o?\"take\"+(\"last\"==t?\"Right\":\"\"):t],b=o||/^find/.test(t);M&&(Pn.prototype[t]=function(){var t=this.__wrapped__,c=o?[1]:arguments,z=t instanceof Fn,r=c[0],a=z||Fb(t),i=function(e){var t=M.apply(Pn,St([e],c));return o&&O?t[0]:t};a&&n&&\"function\"==typeof r&&1!=r.length&&(z=a=!1);var O=this.__chain__,s=!!this.__actions__.length,A=b&&!O,u=z&&!s;if(!b&&a){t=u?t:new Fn(this);var d=e.apply(t,c);return d.__actions__.push({func:Ab,args:[i],thisArg:p}),new Hn(d,O)}return A&&u?e.apply(this,c):(d=this.thru(i),A?o?d.value()[0]:d.value():d)})})),yt([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],(function(e){var t=Ee[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",o=/^(?:pop|shift)$/.test(e);Pn.prototype[e]=function(){var e=arguments;if(o&&!this.__chain__){var p=this.value();return t.apply(Fb(p)?p:[],e)}return this[n]((function(n){return t.apply(Fb(n)?n:[],e)}))}})),vo(Fn.prototype,(function(e,t){var n=Pn[t];if(n){var o=n.name+\"\";Se.call(Bn,o)||(Bn[o]=[]),Bn[o].push({name:t,func:n})}})),Bn[jp(p,2).name]=[{name:\"wrapper\",func:p}],Fn.prototype.clone=function(){var e=new Fn(this.__wrapped__);return e.__actions__=Ep(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Ep(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Ep(this.__views__),e},Fn.prototype.reverse=function(){if(this.__filtered__){var e=new Fn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Fn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Fb(e),o=t<0,p=n?e.length:0,M=function(e,t,n){var o=-1,p=n.length;for(;++o<p;){var M=n[o],b=M.size;switch(M.type){case\"drop\":e+=b;break;case\"dropRight\":t-=b;break;case\"take\":t=Wn(t,e+b);break;case\"takeRight\":e=qn(e,t-b)}}return{start:e,end:t}}(0,p,this.__views__),b=M.start,c=M.end,z=c-b,r=o?c:b-1,a=this.__iteratees__,i=a.length,O=0,s=Wn(z,this.__takeCount__);if(!n||!o&&p==z&&s==z)return dp(e,this.__actions__);var A=[];e:for(;z--&&O<s;){for(var u=-1,d=e[r+=t];++u<i;){var l=a[u],f=l.iteratee,q=l.type,W=f(d);if(2==q)d=W;else if(!W){if(1==q)continue e;break e}}A[O++]=d}return A},Pn.prototype.at=ub,Pn.prototype.chain=function(){return sb(this)},Pn.prototype.commit=function(){return new Hn(this.value(),this.__chain__)},Pn.prototype.next=function(){this.__values__===p&&(this.__values__=sc(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?p:this.__values__[this.__index__++]}},Pn.prototype.plant=function(e){for(var t,n=this;n instanceof Un;){var o=DM(n);o.__index__=0,o.__values__=p,t?M.__wrapped__=o:t=o;var M=o;n=n.__wrapped__}return M.__wrapped__=e,t},Pn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Fn){var t=e;return this.__actions__.length&&(t=new Fn(this)),(t=t.reverse()).__actions__.push({func:Ab,args:[tb],thisArg:p}),new Hn(t,this.__chain__)}return this.thru(tb)},Pn.prototype.toJSON=Pn.prototype.valueOf=Pn.prototype.value=function(){return dp(this.__wrapped__,this.__actions__)},Pn.prototype.first=Pn.prototype.head,Qe&&(Pn.prototype[Qe]=function(){return this}),Pn}();ut._=fn,(o=function(){return fn}.call(t,n,t,e))===p||(e.exports=o)}.call(this)},6609:()=>{},3229:()=>{},8:(e,t,n)=>{(e.exports=n(5177)).tz.load(n(1128))},5177:function(e,t,n){var o,p,M;!function(b,c){\"use strict\";e.exports?e.exports=c(n(381)):(p=[n(381)],void 0===(M=\"function\"==typeof(o=c)?o.apply(t,p):o)||(e.exports=M))}(0,(function(e){\"use strict\";void 0===e.version&&e.default&&(e=e.default);var t,n={},o={},p={},M={},b={};e&&\"string\"==typeof e.version||y(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\");var c=e.version.split(\".\"),z=+c[0],r=+c[1];function a(e){return e>96?e-87:e>64?e-29:e-48}function i(e){var t=0,n=e.split(\".\"),o=n[0],p=n[1]||\"\",M=1,b=0,c=1;for(45===e.charCodeAt(0)&&(t=1,c=-1);t<o.length;t++)b=60*b+a(o.charCodeAt(t));for(t=0;t<p.length;t++)M/=60,b+=a(p.charCodeAt(t))*M;return b*c}function O(e){for(var t=0;t<e.length;t++)e[t]=i(e[t])}function s(e,t){var n,o=[];for(n=0;n<t.length;n++)o[n]=e[t[n]];return o}function A(e){var t=e.split(\"|\"),n=t[2].split(\" \"),o=t[3].split(\"\"),p=t[4].split(\" \");return O(n),O(o),O(p),function(e,t){for(var n=0;n<t;n++)e[n]=Math.round((e[n-1]||0)+6e4*e[n]);e[t-1]=1/0}(p,o.length),{name:t[0],abbrs:s(t[1].split(\" \"),o),offsets:s(n,o),untils:p,population:0|t[5]}}function u(e){e&&this._set(A(e))}function d(e,t){this.name=e,this.zones=t}function l(e){var t=e.toTimeString(),n=t.match(/\\([a-z ]+\\)/i);\"GMT\"===(n=n&&n[0]?(n=n[0].match(/[A-Z]/g))?n.join(\"\"):void 0:(n=t.match(/[A-Z]{3,5}/g))?n[0]:void 0)&&(n=void 0),this.at=+e,this.abbr=n,this.offset=e.getTimezoneOffset()}function f(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function q(e,t){for(var n,o;o=6e4*((t.at-e.at)/12e4|0);)(n=new l(new Date(e.at+o))).offset===e.offset?e=n:t=n;return e}function W(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:e.zone.population!==t.zone.population?t.zone.population-e.zone.population:t.zone.name.localeCompare(e.zone.name)}function h(e,t){var n,o;for(O(t),n=0;n<t.length;n++)o=t[n],b[o]=b[o]||{},b[o][e]=!0}function v(e){var t,n,o,p=e.length,c={},z=[];for(t=0;t<p;t++)for(n in o=b[e[t].offset]||{})o.hasOwnProperty(n)&&(c[n]=!0);for(t in c)c.hasOwnProperty(t)&&z.push(M[t]);return z}function R(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e&&e.length>3){var t=M[m(e)];if(t)return t;y(\"Moment Timezone found \"+e+\" from the Intl api, but did not have that data loaded.\")}}catch(e){}var n,o,p,b=function(){var e,t,n,o=(new Date).getFullYear()-2,p=new l(new Date(o,0,1)),M=[p];for(n=1;n<48;n++)(t=new l(new Date(o,n,1))).offset!==p.offset&&(e=q(p,t),M.push(e),M.push(new l(new Date(e.at+6e4)))),p=t;for(n=0;n<4;n++)M.push(new l(new Date(o+n,0,1))),M.push(new l(new Date(o+n,6,1)));return M}(),c=b.length,z=v(b),r=[];for(o=0;o<z.length;o++){for(n=new f(L(z[o]),c),p=0;p<c;p++)n.scoreOffsetAt(b[p]);r.push(n)}return r.sort(W),r.length>0?r[0].zone.name:void 0}function m(e){return(e||\"\").toLowerCase().replace(/\\//g,\"_\")}function g(e){var t,o,p,b;for(\"string\"==typeof e&&(e=[e]),t=0;t<e.length;t++)b=m(o=(p=e[t].split(\"|\"))[0]),n[b]=e[t],M[b]=o,h(b,p[2].split(\" \"))}function L(e,t){e=m(e);var p,b=n[e];return b instanceof u?b:\"string\"==typeof b?(b=new u(b),n[e]=b,b):o[e]&&t!==L&&(p=L(o[e],L))?((b=n[e]=new u)._set(p),b.name=M[e],b):null}function _(e){var t,n,p,b;for(\"string\"==typeof e&&(e=[e]),t=0;t<e.length;t++)p=m((n=e[t].split(\"|\"))[0]),b=m(n[1]),o[p]=b,M[p]=n[0],o[b]=p,M[b]=n[1]}function N(e){var t=\"X\"===e._f||\"x\"===e._f;return!(!e._a||void 0!==e._tzm||t)}function y(e){\"undefined\"!=typeof console&&console.error}function T(t){var n=Array.prototype.slice.call(arguments,0,-1),o=arguments[arguments.length-1],p=L(o),M=e.utc.apply(null,n);return p&&!e.isMoment(t)&&N(M)&&M.add(p.parse(M),\"minutes\"),M.tz(o),M}(z<2||2===z&&r<6)&&y(\"Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js \"+e.version+\". See momentjs.com\"),u.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,n=+e,o=this.untils;for(t=0;t<o.length;t++)if(n<o[t])return t},countries:function(){var e=this.name;return Object.keys(p).filter((function(t){return-1!==p[t].zones.indexOf(e)}))},parse:function(e){var t,n,o,p,M=+e,b=this.offsets,c=this.untils,z=c.length-1;for(p=0;p<z;p++)if(t=b[p],n=b[p+1],o=b[p?p-1:p],t<n&&T.moveAmbiguousForward?t=n:t>o&&T.moveInvalidForward&&(t=o),M<c[p]-6e4*t)return b[p];return b[z]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return y(\"zone.offset has been deprecated in favor of zone.utcOffset\"),this.offsets[this._index(e)]},utcOffset:function(e){return this.offsets[this._index(e)]}},f.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.utcOffset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,\"\")!==e.abbr&&this.abbrScore++},T.version=\"0.5.43\",T.dataVersion=\"\",T._zones=n,T._links=o,T._names=M,T._countries=p,T.add=g,T.link=_,T.load=function(e){g(e.zones),_(e.links),function(e){var t,n,o,M;if(e&&e.length)for(t=0;t<e.length;t++)n=(M=e[t].split(\"|\"))[0].toUpperCase(),o=M[1].split(\" \"),p[n]=new d(n,o)}(e.countries),T.dataVersion=e.version},T.zone=L,T.zoneExists=function e(t){return e.didShowError||(e.didShowError=!0,y(\"moment.tz.zoneExists('\"+t+\"') has been deprecated in favor of !moment.tz.zone('\"+t+\"')\")),!!L(t)},T.guess=function(e){return t&&!e||(t=R()),t},T.names=function(){var e,t=[];for(e in M)M.hasOwnProperty(e)&&(n[e]||n[o[e]])&&M[e]&&t.push(M[e]);return t.sort()},T.Zone=u,T.unpack=A,T.unpackBase60=i,T.needsOffset=N,T.moveInvalidForward=!0,T.moveAmbiguousForward=!1,T.countries=function(){return Object.keys(p)},T.zonesForCountry=function(e,t){var n;if(n=(n=e).toUpperCase(),!(e=p[n]||null))return null;var o=e.zones.sort();return t?o.map((function(e){return{name:e,offset:L(e).utcOffset(new Date)}})):o};var E,B=e.fn;function C(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function X(e){return function(){return this._z=null,e.apply(this,arguments)}}e.tz=T,e.defaultZone=null,e.updateOffset=function(t,n){var o,p=e.defaultZone;if(void 0===t._z&&(p&&N(t)&&!t._isUTC&&(t._d=e.utc(t._a)._d,t.utc().add(p.parse(t),\"minutes\")),t._z=p),t._z)if(o=t._z.utcOffset(t),Math.abs(o)<16&&(o/=60),void 0!==t.utcOffset){var M=t._z;t.utcOffset(-o,n),t._z=M}else t.zone(o,n)},B.tz=function(t,n){if(t){if(\"string\"!=typeof t)throw new Error(\"Time zone name must be a string, got \"+t+\" [\"+typeof t+\"]\");return this._z=L(t),this._z?e.updateOffset(this,n):y(),this}if(this._z)return this._z.name},B.zoneName=C(B.zoneName),B.zoneAbbr=C(B.zoneAbbr),B.utc=X(B.utc),B.local=X(B.local),B.utcOffset=(E=B.utcOffset,function(){return arguments.length>0&&(this._z=null),E.apply(this,arguments)}),e.tz.setDefault=function(t){return(z<2||2===z&&r<9)&&y(e.version),e.defaultZone=t?L(t):null,e};var w=e.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(w)?(w.push(\"_z\"),w.push(\"_a\")):w&&(w._z=null),e}))},381:function(e,t,n){(e=n.nmd(e)).exports=function(){\"use strict\";var t,n;function o(){return t.apply(null,arguments)}function p(e){t=e}function M(e){return e instanceof Array||\"[object Array]\"===Object.prototype.toString.call(e)}function b(e){return null!=e&&\"[object Object]\"===Object.prototype.toString.call(e)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function z(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(c(e,t))return!1;return!0}function r(e){return void 0===e}function a(e){return\"number\"==typeof e||\"[object Number]\"===Object.prototype.toString.call(e)}function i(e){return e instanceof Date||\"[object Date]\"===Object.prototype.toString.call(e)}function O(e,t){var n,o=[],p=e.length;for(n=0;n<p;++n)o.push(t(e[n],n));return o}function s(e,t){for(var n in t)c(t,n)&&(e[n]=t[n]);return c(t,\"toString\")&&(e.toString=t.toString),c(t,\"valueOf\")&&(e.valueOf=t.valueOf),e}function A(e,t,n,o){return Vn(e,t,n,o,!0).utc()}function u(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function d(e){return null==e._pf&&(e._pf=u()),e._pf}function l(e){if(null==e._isValid){var t=d(e),o=n.call(t.parsedDateParts,(function(e){return null!=e})),p=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&o);if(e._strict&&(p=p&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return p;e._isValid=p}return e._isValid}function f(e){var t=A(NaN);return null!=e?s(d(t),e):d(t).userInvalidated=!0,t}n=Array.prototype.some?Array.prototype.some:function(e){var t,n=Object(this),o=n.length>>>0;for(t=0;t<o;t++)if(t in n&&e.call(this,n[t],t,n))return!0;return!1};var q=o.momentProperties=[],W=!1;function h(e,t){var n,o,p,M=q.length;if(r(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),r(t._i)||(e._i=t._i),r(t._f)||(e._f=t._f),r(t._l)||(e._l=t._l),r(t._strict)||(e._strict=t._strict),r(t._tzm)||(e._tzm=t._tzm),r(t._isUTC)||(e._isUTC=t._isUTC),r(t._offset)||(e._offset=t._offset),r(t._pf)||(e._pf=d(t)),r(t._locale)||(e._locale=t._locale),M>0)for(n=0;n<M;n++)r(p=t[o=q[n]])||(e[o]=p);return e}function v(e){h(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===W&&(W=!0,o.updateOffset(this),W=!1)}function R(e){return e instanceof v||null!=e&&null!=e._isAMomentObject}function m(e){!1===o.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn}function g(e,t){var n=!0;return s((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,e),n){var p,M,b,z=[],r=arguments.length;for(M=0;M<r;M++){if(p=\"\",\"object\"==typeof arguments[M]){for(b in p+=\"\\n[\"+M+\"] \",arguments[0])c(arguments[0],b)&&(p+=b+\": \"+arguments[0][b]+\", \");p=p.slice(0,-2)}else p=arguments[M];z.push(p)}m(e+\"\\nArguments: \"+Array.prototype.slice.call(z).join(\"\")+\"\\n\"+(new Error).stack),n=!1}return t.apply(this,arguments)}),t)}var L,_={};function N(e,t){null!=o.deprecationHandler&&o.deprecationHandler(e,t),_[e]||(m(t),_[e]=!0)}function y(e){return\"undefined\"!=typeof Function&&e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}function T(e){var t,n;for(n in e)c(e,n)&&(y(t=e[n])?this[n]=t:this[\"_\"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)}function E(e,t){var n,o=s({},e);for(n in t)c(t,n)&&(b(e[n])&&b(t[n])?(o[n]={},s(o[n],e[n]),s(o[n],t[n])):null!=t[n]?o[n]=t[n]:delete o[n]);for(n in e)c(e,n)&&!c(t,n)&&b(e[n])&&(o[n]=s({},o[n]));return o}function B(e){null!=e&&this.set(e)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,L=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)c(e,t)&&n.push(t);return n};var C={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"};function X(e,t,n){var o=this._calendar[e]||this._calendar.sameElse;return y(o)?o.call(t,n):o}function w(e,t,n){var o=\"\"+Math.abs(e),p=t-o.length;return(e>=0?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,p)).toString().substr(1)+o}var S=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,x=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,k={},I={};function D(e,t,n,o){var p=o;\"string\"==typeof o&&(p=function(){return this[o]()}),e&&(I[e]=p),t&&(I[t[0]]=function(){return w(p.apply(this,arguments),t[1],t[2])}),n&&(I[n]=function(){return this.localeData().ordinal(p.apply(this,arguments),e)})}function P(e){return e.match(/\\[[\\s\\S]/)?e.replace(/^\\[|\\]$/g,\"\"):e.replace(/\\\\/g,\"\")}function j(e){var t,n,o=e.match(S);for(t=0,n=o.length;t<n;t++)I[o[t]]?o[t]=I[o[t]]:o[t]=P(o[t]);return function(t){var p,M=\"\";for(p=0;p<n;p++)M+=y(o[p])?o[p].call(t,e):o[p];return M}}function U(e,t){return e.isValid()?(t=H(t,e.localeData()),k[t]=k[t]||j(t),k[t](e)):e.localeData().invalidDate()}function H(e,t){var n=5;function o(e){return t.longDateFormat(e)||e}for(x.lastIndex=0;n>=0&&x.test(e);)e=e.replace(x,o),x.lastIndex=0,n-=1;return e}var F={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};function G(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(S).map((function(e){return\"MMMM\"===e||\"MM\"===e||\"DD\"===e||\"dddd\"===e?e.slice(1):e})).join(\"\"),this._longDateFormat[e])}var $=\"Invalid date\";function V(){return this._invalidDate}var Y=\"%d\",K=/\\d{1,2}/;function Z(e){return this._ordinal.replace(\"%d\",e)}var Q={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function J(e,t,n,o){var p=this._relativeTime[n];return y(p)?p(e,t,n,o):p.replace(/%d/i,e)}function ee(e,t){var n=this._relativeTime[e>0?\"future\":\"past\"];return y(n)?n(t):n.replace(/%s/i,t)}var te={};function ne(e,t){var n=e.toLowerCase();te[n]=te[n+\"s\"]=te[t]=e}function oe(e){return\"string\"==typeof e?te[e]||te[e.toLowerCase()]:void 0}function pe(e){var t,n,o={};for(n in e)c(e,n)&&(t=oe(n))&&(o[t]=e[n]);return o}var Me={};function be(e,t){Me[e]=t}function ce(e){var t,n=[];for(t in e)c(e,t)&&n.push({unit:t,priority:Me[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}function ze(e){return e%4==0&&e%100!=0||e%400==0}function re(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function ae(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=re(t)),n}function ie(e,t){return function(n){return null!=n?(se(this,e,n),o.updateOffset(this,t),this):Oe(this,e)}}function Oe(e,t){return e.isValid()?e._d[\"get\"+(e._isUTC?\"UTC\":\"\")+t]():NaN}function se(e,t,n){e.isValid()&&!isNaN(n)&&(\"FullYear\"===t&&ze(e.year())&&1===e.month()&&29===e.date()?(n=ae(n),e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n,e.month(),Je(n,e.month()))):e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n))}function Ae(e){return y(this[e=oe(e)])?this[e]():this}function ue(e,t){if(\"object\"==typeof e){var n,o=ce(e=pe(e)),p=o.length;for(n=0;n<p;n++)this[o[n].unit](e[o[n].unit])}else if(y(this[e=oe(e)]))return this[e](t);return this}var de,le=/\\d/,fe=/\\d\\d/,qe=/\\d{3}/,We=/\\d{4}/,he=/[+-]?\\d{6}/,ve=/\\d\\d?/,Re=/\\d\\d\\d\\d?/,me=/\\d\\d\\d\\d\\d\\d?/,ge=/\\d{1,3}/,Le=/\\d{1,4}/,_e=/[+-]?\\d{1,6}/,Ne=/\\d+/,ye=/[+-]?\\d+/,Te=/Z|[+-]\\d\\d:?\\d\\d/gi,Ee=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,Be=/[+-]?\\d+(\\.\\d{1,3})?/,Ce=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;function Xe(e,t,n){de[e]=y(t)?t:function(e,o){return e&&n?n:t}}function we(e,t){return c(de,e)?de[e](t._strict,t._locale):new RegExp(Se(e))}function Se(e){return xe(e.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,(function(e,t,n,o,p){return t||n||o||p})))}function xe(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}de={};var ke={};function Ie(e,t){var n,o,p=t;for(\"string\"==typeof e&&(e=[e]),a(t)&&(p=function(e,n){n[t]=ae(e)}),o=e.length,n=0;n<o;n++)ke[e[n]]=p}function De(e,t){Ie(e,(function(e,n,o,p){o._w=o._w||{},t(e,o._w,o,p)}))}function Pe(e,t,n){null!=t&&c(ke,e)&&ke[e](t,n._a,n,e)}var je,Ue=0,He=1,Fe=2,Ge=3,$e=4,Ve=5,Ye=6,Ke=7,Ze=8;function Qe(e,t){return(e%t+t)%t}function Je(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=Qe(t,12);return e+=(t-n)/12,1===n?ze(e)?29:28:31-n%7%2}je=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},D(\"M\",[\"MM\",2],\"Mo\",(function(){return this.month()+1})),D(\"MMM\",0,0,(function(e){return this.localeData().monthsShort(this,e)})),D(\"MMMM\",0,0,(function(e){return this.localeData().months(this,e)})),ne(\"month\",\"M\"),be(\"month\",8),Xe(\"M\",ve),Xe(\"MM\",ve,fe),Xe(\"MMM\",(function(e,t){return t.monthsShortRegex(e)})),Xe(\"MMMM\",(function(e,t){return t.monthsRegex(e)})),Ie([\"M\",\"MM\"],(function(e,t){t[He]=ae(e)-1})),Ie([\"MMM\",\"MMMM\"],(function(e,t,n,o){var p=n._locale.monthsParse(e,o,n._strict);null!=p?t[He]=p:d(n).invalidMonth=e}));var et=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),tt=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),nt=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,ot=Ce,pt=Ce;function Mt(e,t){return e?M(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||nt).test(t)?\"format\":\"standalone\"][e.month()]:M(this._months)?this._months:this._months.standalone}function bt(e,t){return e?M(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[nt.test(t)?\"format\":\"standalone\"][e.month()]:M(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ct(e,t,n){var o,p,M,b=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)M=A([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(M,\"\").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(M,\"\").toLocaleLowerCase();return n?\"MMM\"===t?-1!==(p=je.call(this._shortMonthsParse,b))?p:null:-1!==(p=je.call(this._longMonthsParse,b))?p:null:\"MMM\"===t?-1!==(p=je.call(this._shortMonthsParse,b))||-1!==(p=je.call(this._longMonthsParse,b))?p:null:-1!==(p=je.call(this._longMonthsParse,b))||-1!==(p=je.call(this._shortMonthsParse,b))?p:null}function zt(e,t,n){var o,p,M;if(this._monthsParseExact)return ct.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(p=A([2e3,o]),n&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp(\"^\"+this.months(p,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[o]=new RegExp(\"^\"+this.monthsShort(p,\"\").replace(\".\",\"\")+\"$\",\"i\")),n||this._monthsParse[o]||(M=\"^\"+this.months(p,\"\")+\"|^\"+this.monthsShort(p,\"\"),this._monthsParse[o]=new RegExp(M.replace(\".\",\"\"),\"i\")),n&&\"MMMM\"===t&&this._longMonthsParse[o].test(e))return o;if(n&&\"MMM\"===t&&this._shortMonthsParse[o].test(e))return o;if(!n&&this._monthsParse[o].test(e))return o}}function rt(e,t){var n;if(!e.isValid())return e;if(\"string\"==typeof t)if(/^\\d+$/.test(t))t=ae(t);else if(!a(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Je(e.year(),t)),e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+\"Month\"](t,n),e}function at(e){return null!=e?(rt(this,e),o.updateOffset(this,!0),this):Oe(this,\"Month\")}function it(){return Je(this.year(),this.month())}function Ot(e){return this._monthsParseExact?(c(this,\"_monthsRegex\")||At.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,\"_monthsShortRegex\")||(this._monthsShortRegex=ot),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function st(e){return this._monthsParseExact?(c(this,\"_monthsRegex\")||At.call(this),e?this._monthsStrictRegex:this._monthsRegex):(c(this,\"_monthsRegex\")||(this._monthsRegex=pt),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function At(){function e(e,t){return t.length-e.length}var t,n,o=[],p=[],M=[];for(t=0;t<12;t++)n=A([2e3,t]),o.push(this.monthsShort(n,\"\")),p.push(this.months(n,\"\")),M.push(this.months(n,\"\")),M.push(this.monthsShort(n,\"\"));for(o.sort(e),p.sort(e),M.sort(e),t=0;t<12;t++)o[t]=xe(o[t]),p[t]=xe(p[t]);for(t=0;t<24;t++)M[t]=xe(M[t]);this._monthsRegex=new RegExp(\"^(\"+M.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+p.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\")}function ut(e){return ze(e)?366:365}D(\"Y\",0,0,(function(){var e=this.year();return e<=9999?w(e,4):\"+\"+e})),D(0,[\"YY\",2],0,(function(){return this.year()%100})),D(0,[\"YYYY\",4],0,\"year\"),D(0,[\"YYYYY\",5],0,\"year\"),D(0,[\"YYYYYY\",6,!0],0,\"year\"),ne(\"year\",\"y\"),be(\"year\",1),Xe(\"Y\",ye),Xe(\"YY\",ve,fe),Xe(\"YYYY\",Le,We),Xe(\"YYYYY\",_e,he),Xe(\"YYYYYY\",_e,he),Ie([\"YYYYY\",\"YYYYYY\"],Ue),Ie(\"YYYY\",(function(e,t){t[Ue]=2===e.length?o.parseTwoDigitYear(e):ae(e)})),Ie(\"YY\",(function(e,t){t[Ue]=o.parseTwoDigitYear(e)})),Ie(\"Y\",(function(e,t){t[Ue]=parseInt(e,10)})),o.parseTwoDigitYear=function(e){return ae(e)+(ae(e)>68?1900:2e3)};var dt=ie(\"FullYear\",!0);function lt(){return ze(this.year())}function ft(e,t,n,o,p,M,b){var c;return e<100&&e>=0?(c=new Date(e+400,t,n,o,p,M,b),isFinite(c.getFullYear())&&c.setFullYear(e)):c=new Date(e,t,n,o,p,M,b),c}function qt(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Wt(e,t,n){var o=7+t-n;return-(7+qt(e,0,o).getUTCDay()-t)%7+o-1}function ht(e,t,n,o,p){var M,b,c=1+7*(t-1)+(7+n-o)%7+Wt(e,o,p);return c<=0?b=ut(M=e-1)+c:c>ut(e)?(M=e+1,b=c-ut(e)):(M=e,b=c),{year:M,dayOfYear:b}}function vt(e,t,n){var o,p,M=Wt(e.year(),t,n),b=Math.floor((e.dayOfYear()-M-1)/7)+1;return b<1?o=b+Rt(p=e.year()-1,t,n):b>Rt(e.year(),t,n)?(o=b-Rt(e.year(),t,n),p=e.year()+1):(p=e.year(),o=b),{week:o,year:p}}function Rt(e,t,n){var o=Wt(e,t,n),p=Wt(e+1,t,n);return(ut(e)-o+p)/7}function mt(e){return vt(e,this._week.dow,this._week.doy).week}D(\"w\",[\"ww\",2],\"wo\",\"week\"),D(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),ne(\"week\",\"w\"),ne(\"isoWeek\",\"W\"),be(\"week\",5),be(\"isoWeek\",5),Xe(\"w\",ve),Xe(\"ww\",ve,fe),Xe(\"W\",ve),Xe(\"WW\",ve,fe),De([\"w\",\"ww\",\"W\",\"WW\"],(function(e,t,n,o){t[o.substr(0,1)]=ae(e)}));var gt={dow:0,doy:6};function Lt(){return this._week.dow}function _t(){return this._week.doy}function Nt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),\"d\")}function yt(e){var t=vt(this,1,4).week;return null==e?t:this.add(7*(e-t),\"d\")}function Tt(e,t){return\"string\"!=typeof e?e:isNaN(e)?\"number\"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function Et(e,t){return\"string\"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Bt(e,t){return e.slice(t,7).concat(e.slice(0,t))}D(\"d\",0,\"do\",\"day\"),D(\"dd\",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),D(\"ddd\",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),D(\"dddd\",0,0,(function(e){return this.localeData().weekdays(this,e)})),D(\"e\",0,0,\"weekday\"),D(\"E\",0,0,\"isoWeekday\"),ne(\"day\",\"d\"),ne(\"weekday\",\"e\"),ne(\"isoWeekday\",\"E\"),be(\"day\",11),be(\"weekday\",11),be(\"isoWeekday\",11),Xe(\"d\",ve),Xe(\"e\",ve),Xe(\"E\",ve),Xe(\"dd\",(function(e,t){return t.weekdaysMinRegex(e)})),Xe(\"ddd\",(function(e,t){return t.weekdaysShortRegex(e)})),Xe(\"dddd\",(function(e,t){return t.weekdaysRegex(e)})),De([\"dd\",\"ddd\",\"dddd\"],(function(e,t,n,o){var p=n._locale.weekdaysParse(e,o,n._strict);null!=p?t.d=p:d(n).invalidWeekday=e})),De([\"d\",\"e\",\"E\"],(function(e,t,n,o){t[o]=ae(e)}));var Ct=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Xt=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),wt=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),St=Ce,xt=Ce,kt=Ce;function It(e,t){var n=M(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?\"format\":\"standalone\"];return!0===e?Bt(n,this._week.dow):e?n[e.day()]:n}function Dt(e){return!0===e?Bt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Pt(e){return!0===e?Bt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function jt(e,t,n){var o,p,M,b=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)M=A([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(M,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(M,\"\").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(M,\"\").toLocaleLowerCase();return n?\"dddd\"===t?-1!==(p=je.call(this._weekdaysParse,b))?p:null:\"ddd\"===t?-1!==(p=je.call(this._shortWeekdaysParse,b))?p:null:-1!==(p=je.call(this._minWeekdaysParse,b))?p:null:\"dddd\"===t?-1!==(p=je.call(this._weekdaysParse,b))||-1!==(p=je.call(this._shortWeekdaysParse,b))||-1!==(p=je.call(this._minWeekdaysParse,b))?p:null:\"ddd\"===t?-1!==(p=je.call(this._shortWeekdaysParse,b))||-1!==(p=je.call(this._weekdaysParse,b))||-1!==(p=je.call(this._minWeekdaysParse,b))?p:null:-1!==(p=je.call(this._minWeekdaysParse,b))||-1!==(p=je.call(this._weekdaysParse,b))||-1!==(p=je.call(this._shortWeekdaysParse,b))?p:null}function Ut(e,t,n){var o,p,M;if(this._weekdaysParseExact)return jt.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(p=A([2e3,1]).day(o),n&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp(\"^\"+this.weekdays(p,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[o]=new RegExp(\"^\"+this.weekdaysShort(p,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[o]=new RegExp(\"^\"+this.weekdaysMin(p,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[o]||(M=\"^\"+this.weekdays(p,\"\")+\"|^\"+this.weekdaysShort(p,\"\")+\"|^\"+this.weekdaysMin(p,\"\"),this._weekdaysParse[o]=new RegExp(M.replace(\".\",\"\"),\"i\")),n&&\"dddd\"===t&&this._fullWeekdaysParse[o].test(e))return o;if(n&&\"ddd\"===t&&this._shortWeekdaysParse[o].test(e))return o;if(n&&\"dd\"===t&&this._minWeekdaysParse[o].test(e))return o;if(!n&&this._weekdaysParse[o].test(e))return o}}function Ht(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Tt(e,this.localeData()),this.add(e-t,\"d\")):t}function Ft(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,\"d\")}function Gt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=Et(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function $t(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||Kt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,\"_weekdaysRegex\")||(this._weekdaysRegex=St),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Vt(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||Kt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=xt),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Yt(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||Kt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=kt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Kt(){function e(e,t){return t.length-e.length}var t,n,o,p,M,b=[],c=[],z=[],r=[];for(t=0;t<7;t++)n=A([2e3,1]).day(t),o=xe(this.weekdaysMin(n,\"\")),p=xe(this.weekdaysShort(n,\"\")),M=xe(this.weekdays(n,\"\")),b.push(o),c.push(p),z.push(M),r.push(o),r.push(p),r.push(M);b.sort(e),c.sort(e),z.sort(e),r.sort(e),this._weekdaysRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+z.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+b.join(\"|\")+\")\",\"i\")}function Zt(){return this.hours()%12||12}function Qt(){return this.hours()||24}function Jt(e,t){D(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function en(e,t){return t._meridiemParse}function tn(e){return\"p\"===(e+\"\").toLowerCase().charAt(0)}D(\"H\",[\"HH\",2],0,\"hour\"),D(\"h\",[\"hh\",2],0,Zt),D(\"k\",[\"kk\",2],0,Qt),D(\"hmm\",0,0,(function(){return\"\"+Zt.apply(this)+w(this.minutes(),2)})),D(\"hmmss\",0,0,(function(){return\"\"+Zt.apply(this)+w(this.minutes(),2)+w(this.seconds(),2)})),D(\"Hmm\",0,0,(function(){return\"\"+this.hours()+w(this.minutes(),2)})),D(\"Hmmss\",0,0,(function(){return\"\"+this.hours()+w(this.minutes(),2)+w(this.seconds(),2)})),Jt(\"a\",!0),Jt(\"A\",!1),ne(\"hour\",\"h\"),be(\"hour\",13),Xe(\"a\",en),Xe(\"A\",en),Xe(\"H\",ve),Xe(\"h\",ve),Xe(\"k\",ve),Xe(\"HH\",ve,fe),Xe(\"hh\",ve,fe),Xe(\"kk\",ve,fe),Xe(\"hmm\",Re),Xe(\"hmmss\",me),Xe(\"Hmm\",Re),Xe(\"Hmmss\",me),Ie([\"H\",\"HH\"],Ge),Ie([\"k\",\"kk\"],(function(e,t,n){var o=ae(e);t[Ge]=24===o?0:o})),Ie([\"a\",\"A\"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),Ie([\"h\",\"hh\"],(function(e,t,n){t[Ge]=ae(e),d(n).bigHour=!0})),Ie(\"hmm\",(function(e,t,n){var o=e.length-2;t[Ge]=ae(e.substr(0,o)),t[$e]=ae(e.substr(o)),d(n).bigHour=!0})),Ie(\"hmmss\",(function(e,t,n){var o=e.length-4,p=e.length-2;t[Ge]=ae(e.substr(0,o)),t[$e]=ae(e.substr(o,2)),t[Ve]=ae(e.substr(p)),d(n).bigHour=!0})),Ie(\"Hmm\",(function(e,t,n){var o=e.length-2;t[Ge]=ae(e.substr(0,o)),t[$e]=ae(e.substr(o))})),Ie(\"Hmmss\",(function(e,t,n){var o=e.length-4,p=e.length-2;t[Ge]=ae(e.substr(0,o)),t[$e]=ae(e.substr(o,2)),t[Ve]=ae(e.substr(p))}));var nn=/[ap]\\.?m?\\.?/i,on=ie(\"Hours\",!0);function pn(e,t,n){return e>11?n?\"pm\":\"PM\":n?\"am\":\"AM\"}var Mn,bn={calendar:C,longDateFormat:F,invalidDate:$,ordinal:Y,dayOfMonthOrdinalParse:K,relativeTime:Q,months:et,monthsShort:tt,week:gt,weekdays:Ct,weekdaysMin:wt,weekdaysShort:Xt,meridiemParse:nn},cn={},zn={};function rn(e,t){var n,o=Math.min(e.length,t.length);for(n=0;n<o;n+=1)if(e[n]!==t[n])return n;return o}function an(e){return e?e.toLowerCase().replace(\"_\",\"-\"):e}function On(e){for(var t,n,o,p,M=0;M<e.length;){for(t=(p=an(e[M]).split(\"-\")).length,n=(n=an(e[M+1]))?n.split(\"-\"):null;t>0;){if(o=An(p.slice(0,t).join(\"-\")))return o;if(n&&n.length>=t&&rn(p,n)>=t-1)break;t--}M++}return Mn}function sn(e){return null!=e.match(\"^[^/\\\\\\\\]*$\")}function An(t){var n=null;if(void 0===cn[t]&&e&&e.exports&&sn(t))try{n=Mn._abbr,Object(function(){var e=new Error(\"Cannot find module 'undefined'\");throw e.code=\"MODULE_NOT_FOUND\",e}()),un(n)}catch(e){cn[t]=null}return cn[t]}function un(e,t){var n;return e&&((n=r(t)?fn(e):dn(e,t))?Mn=n:\"undefined\"!=typeof console&&console.warn),Mn._abbr}function dn(e,t){if(null!==t){var n,o=bn;if(t.abbr=e,null!=cn[e])N(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),o=cn[e]._config;else if(null!=t.parentLocale)if(null!=cn[t.parentLocale])o=cn[t.parentLocale]._config;else{if(null==(n=An(t.parentLocale)))return zn[t.parentLocale]||(zn[t.parentLocale]=[]),zn[t.parentLocale].push({name:e,config:t}),null;o=n._config}return cn[e]=new B(E(o,t)),zn[e]&&zn[e].forEach((function(e){dn(e.name,e.config)})),un(e),cn[e]}return delete cn[e],null}function ln(e,t){if(null!=t){var n,o,p=bn;null!=cn[e]&&null!=cn[e].parentLocale?cn[e].set(E(cn[e]._config,t)):(null!=(o=An(e))&&(p=o._config),t=E(p,t),null==o&&(t.abbr=e),(n=new B(t)).parentLocale=cn[e],cn[e]=n),un(e)}else null!=cn[e]&&(null!=cn[e].parentLocale?(cn[e]=cn[e].parentLocale,e===un()&&un(e)):null!=cn[e]&&delete cn[e]);return cn[e]}function fn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Mn;if(!M(e)){if(t=An(e))return t;e=[e]}return On(e)}function qn(){return L(cn)}function Wn(e){var t,n=e._a;return n&&-2===d(e).overflow&&(t=n[He]<0||n[He]>11?He:n[Fe]<1||n[Fe]>Je(n[Ue],n[He])?Fe:n[Ge]<0||n[Ge]>24||24===n[Ge]&&(0!==n[$e]||0!==n[Ve]||0!==n[Ye])?Ge:n[$e]<0||n[$e]>59?$e:n[Ve]<0||n[Ve]>59?Ve:n[Ye]<0||n[Ye]>999?Ye:-1,d(e)._overflowDayOfYear&&(t<Ue||t>Fe)&&(t=Fe),d(e)._overflowWeeks&&-1===t&&(t=Ke),d(e)._overflowWeekday&&-1===t&&(t=Ze),d(e).overflow=t),e}var hn=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,vn=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,Rn=/Z|[+-]\\d\\d(?::?\\d\\d)?/,mn=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],gn=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],Ln=/^\\/?Date\\((-?\\d+)/i,_n=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,Nn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function yn(e){var t,n,o,p,M,b,c=e._i,z=hn.exec(c)||vn.exec(c),r=mn.length,a=gn.length;if(z){for(d(e).iso=!0,t=0,n=r;t<n;t++)if(mn[t][1].exec(z[1])){p=mn[t][0],o=!1!==mn[t][2];break}if(null==p)return void(e._isValid=!1);if(z[3]){for(t=0,n=a;t<n;t++)if(gn[t][1].exec(z[3])){M=(z[2]||\" \")+gn[t][0];break}if(null==M)return void(e._isValid=!1)}if(!o&&null!=M)return void(e._isValid=!1);if(z[4]){if(!Rn.exec(z[4]))return void(e._isValid=!1);b=\"Z\"}e._f=p+(M||\"\")+(b||\"\"),Pn(e)}else e._isValid=!1}function Tn(e,t,n,o,p,M){var b=[En(e),tt.indexOf(t),parseInt(n,10),parseInt(o,10),parseInt(p,10)];return M&&b.push(parseInt(M,10)),b}function En(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function Bn(e){return e.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function Cn(e,t,n){return!e||Xt.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(d(n).weekdayMismatch=!0,n._isValid=!1,!1)}function Xn(e,t,n){if(e)return Nn[e];if(t)return 0;var o=parseInt(n,10),p=o%100;return(o-p)/100*60+p}function wn(e){var t,n=_n.exec(Bn(e._i));if(n){if(t=Tn(n[4],n[3],n[2],n[5],n[6],n[7]),!Cn(n[1],t,e))return;e._a=t,e._tzm=Xn(n[8],n[9],n[10]),e._d=qt.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),d(e).rfc2822=!0}else e._isValid=!1}function Sn(e){var t=Ln.exec(e._i);null===t?(yn(e),!1===e._isValid&&(delete e._isValid,wn(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:o.createFromInputFallback(e)))):e._d=new Date(+t[1])}function xn(e,t,n){return null!=e?e:null!=t?t:n}function kn(e){var t=new Date(o.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function In(e){var t,n,o,p,M,b=[];if(!e._d){for(o=kn(e),e._w&&null==e._a[Fe]&&null==e._a[He]&&Dn(e),null!=e._dayOfYear&&(M=xn(e._a[Ue],o[Ue]),(e._dayOfYear>ut(M)||0===e._dayOfYear)&&(d(e)._overflowDayOfYear=!0),n=qt(M,0,e._dayOfYear),e._a[He]=n.getUTCMonth(),e._a[Fe]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=b[t]=o[t];for(;t<7;t++)e._a[t]=b[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Ge]&&0===e._a[$e]&&0===e._a[Ve]&&0===e._a[Ye]&&(e._nextDay=!0,e._a[Ge]=0),e._d=(e._useUTC?qt:ft).apply(null,b),p=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==p&&(d(e).weekdayMismatch=!0)}}function Dn(e){var t,n,o,p,M,b,c,z,r;null!=(t=e._w).GG||null!=t.W||null!=t.E?(M=1,b=4,n=xn(t.GG,e._a[Ue],vt(Yn(),1,4).year),o=xn(t.W,1),((p=xn(t.E,1))<1||p>7)&&(z=!0)):(M=e._locale._week.dow,b=e._locale._week.doy,r=vt(Yn(),M,b),n=xn(t.gg,e._a[Ue],r.year),o=xn(t.w,r.week),null!=t.d?((p=t.d)<0||p>6)&&(z=!0):null!=t.e?(p=t.e+M,(t.e<0||t.e>6)&&(z=!0)):p=M),o<1||o>Rt(n,M,b)?d(e)._overflowWeeks=!0:null!=z?d(e)._overflowWeekday=!0:(c=ht(n,o,p,M,b),e._a[Ue]=c.year,e._dayOfYear=c.dayOfYear)}function Pn(e){if(e._f!==o.ISO_8601)if(e._f!==o.RFC_2822){e._a=[],d(e).empty=!0;var t,n,p,M,b,c,z,r=\"\"+e._i,a=r.length,i=0;for(z=(p=H(e._f,e._locale).match(S)||[]).length,t=0;t<z;t++)M=p[t],(n=(r.match(we(M,e))||[])[0])&&((b=r.substr(0,r.indexOf(n))).length>0&&d(e).unusedInput.push(b),r=r.slice(r.indexOf(n)+n.length),i+=n.length),I[M]?(n?d(e).empty=!1:d(e).unusedTokens.push(M),Pe(M,n,e)):e._strict&&!n&&d(e).unusedTokens.push(M);d(e).charsLeftOver=a-i,r.length>0&&d(e).unusedInput.push(r),e._a[Ge]<=12&&!0===d(e).bigHour&&e._a[Ge]>0&&(d(e).bigHour=void 0),d(e).parsedDateParts=e._a.slice(0),d(e).meridiem=e._meridiem,e._a[Ge]=jn(e._locale,e._a[Ge],e._meridiem),null!==(c=d(e).era)&&(e._a[Ue]=e._locale.erasConvertYear(c,e._a[Ue])),In(e),Wn(e)}else wn(e);else yn(e)}function jn(e,t,n){var o;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((o=e.isPM(n))&&t<12&&(t+=12),o||12!==t||(t=0),t):t}function Un(e){var t,n,o,p,M,b,c=!1,z=e._f.length;if(0===z)return d(e).invalidFormat=!0,void(e._d=new Date(NaN));for(p=0;p<z;p++)M=0,b=!1,t=h({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[p],Pn(t),l(t)&&(b=!0),M+=d(t).charsLeftOver,M+=10*d(t).unusedTokens.length,d(t).score=M,c?M<o&&(o=M,n=t):(null==o||M<o||b)&&(o=M,n=t,b&&(c=!0));s(e,n||t)}function Hn(e){if(!e._d){var t=pe(e._i),n=void 0===t.day?t.date:t.day;e._a=O([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),In(e)}}function Fn(e){var t=new v(Wn(Gn(e)));return t._nextDay&&(t.add(1,\"d\"),t._nextDay=void 0),t}function Gn(e){var t=e._i,n=e._f;return e._locale=e._locale||fn(e._l),null===t||void 0===n&&\"\"===t?f({nullInput:!0}):(\"string\"==typeof t&&(e._i=t=e._locale.preparse(t)),R(t)?new v(Wn(t)):(i(t)?e._d=t:M(n)?Un(e):n?Pn(e):$n(e),l(e)||(e._d=null),e))}function $n(e){var t=e._i;r(t)?e._d=new Date(o.now()):i(t)?e._d=new Date(t.valueOf()):\"string\"==typeof t?Sn(e):M(t)?(e._a=O(t.slice(0),(function(e){return parseInt(e,10)})),In(e)):b(t)?Hn(e):a(t)?e._d=new Date(t):o.createFromInputFallback(e)}function Vn(e,t,n,o,p){var c={};return!0!==t&&!1!==t||(o=t,t=void 0),!0!==n&&!1!==n||(o=n,n=void 0),(b(e)&&z(e)||M(e)&&0===e.length)&&(e=void 0),c._isAMomentObject=!0,c._useUTC=c._isUTC=p,c._l=n,c._i=e,c._f=t,c._strict=o,Fn(c)}function Yn(e,t,n,o){return Vn(e,t,n,o,!1)}o.createFromInputFallback=g(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",(function(e){e._d=new Date(e._i+(e._useUTC?\" UTC\":\"\"))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var Kn=g(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",(function(){var e=Yn.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:f()})),Zn=g(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",(function(){var e=Yn.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:f()}));function Qn(e,t){var n,o;if(1===t.length&&M(t[0])&&(t=t[0]),!t.length)return Yn();for(n=t[0],o=1;o<t.length;++o)t[o].isValid()&&!t[o][e](n)||(n=t[o]);return n}function Jn(){return Qn(\"isBefore\",[].slice.call(arguments,0))}function eo(){return Qn(\"isAfter\",[].slice.call(arguments,0))}var to=function(){return Date.now?Date.now():+new Date},no=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function oo(e){var t,n,o=!1,p=no.length;for(t in e)if(c(e,t)&&(-1===je.call(no,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<p;++n)if(e[no[n]]){if(o)return!1;parseFloat(e[no[n]])!==ae(e[no[n]])&&(o=!0)}return!0}function po(){return this._isValid}function Mo(){return yo(NaN)}function bo(e){var t=pe(e),n=t.year||0,o=t.quarter||0,p=t.month||0,M=t.week||t.isoWeek||0,b=t.day||0,c=t.hour||0,z=t.minute||0,r=t.second||0,a=t.millisecond||0;this._isValid=oo(t),this._milliseconds=+a+1e3*r+6e4*z+1e3*c*60*60,this._days=+b+7*M,this._months=+p+3*o+12*n,this._data={},this._locale=fn(),this._bubble()}function co(e){return e instanceof bo}function zo(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function ro(e,t,n){var o,p=Math.min(e.length,t.length),M=Math.abs(e.length-t.length),b=0;for(o=0;o<p;o++)(n&&e[o]!==t[o]||!n&&ae(e[o])!==ae(t[o]))&&b++;return b+M}function ao(e,t){D(e,0,0,(function(){var e=this.utcOffset(),n=\"+\";return e<0&&(e=-e,n=\"-\"),n+w(~~(e/60),2)+t+w(~~e%60,2)}))}ao(\"Z\",\":\"),ao(\"ZZ\",\"\"),Xe(\"Z\",Ee),Xe(\"ZZ\",Ee),Ie([\"Z\",\"ZZ\"],(function(e,t,n){n._useUTC=!0,n._tzm=Oo(Ee,e)}));var io=/([\\+\\-]|\\d\\d)/gi;function Oo(e,t){var n,o,p=(t||\"\").match(e);return null===p?null:0===(o=60*(n=((p[p.length-1]||[])+\"\").match(io)||[\"-\",0,0])[1]+ae(n[2]))?0:\"+\"===n[0]?o:-o}function so(e,t){var n,p;return t._isUTC?(n=t.clone(),p=(R(e)||i(e)?e.valueOf():Yn(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+p),o.updateOffset(n,!1),n):Yn(e).local()}function Ao(e){return-Math.round(e._d.getTimezoneOffset())}function uo(e,t,n){var p,M=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if(\"string\"==typeof e){if(null===(e=Oo(Ee,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(p=Ao(this)),this._offset=e,this._isUTC=!0,null!=p&&this.add(p,\"m\"),M!==e&&(!t||this._changeInProgress?Xo(this,yo(e-M,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?M:Ao(this)}function lo(e,t){return null!=e?(\"string\"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function fo(e){return this.utcOffset(0,e)}function qo(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ao(this),\"m\")),this}function Wo(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\"string\"==typeof this._i){var e=Oo(Te,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function ho(e){return!!this.isValid()&&(e=e?Yn(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function vo(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ro(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,t={};return h(t,this),(t=Gn(t))._a?(e=t._isUTC?A(t._a):Yn(t._a),this._isDSTShifted=this.isValid()&&ro(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function mo(){return!!this.isValid()&&!this._isUTC}function go(){return!!this.isValid()&&this._isUTC}function Lo(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var _o=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,No=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function yo(e,t){var n,o,p,M=e,b=null;return co(e)?M={ms:e._milliseconds,d:e._days,M:e._months}:a(e)||!isNaN(+e)?(M={},t?M[t]=+e:M.milliseconds=+e):(b=_o.exec(e))?(n=\"-\"===b[1]?-1:1,M={y:0,d:ae(b[Fe])*n,h:ae(b[Ge])*n,m:ae(b[$e])*n,s:ae(b[Ve])*n,ms:ae(zo(1e3*b[Ye]))*n}):(b=No.exec(e))?(n=\"-\"===b[1]?-1:1,M={y:To(b[2],n),M:To(b[3],n),w:To(b[4],n),d:To(b[5],n),h:To(b[6],n),m:To(b[7],n),s:To(b[8],n)}):null==M?M={}:\"object\"==typeof M&&(\"from\"in M||\"to\"in M)&&(p=Bo(Yn(M.from),Yn(M.to)),(M={}).ms=p.milliseconds,M.M=p.months),o=new bo(M),co(e)&&c(e,\"_locale\")&&(o._locale=e._locale),co(e)&&c(e,\"_isValid\")&&(o._isValid=e._isValid),o}function To(e,t){var n=e&&parseFloat(e.replace(\",\",\".\"));return(isNaN(n)?0:n)*t}function Eo(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,\"M\").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,\"M\"),n}function Bo(e,t){var n;return e.isValid()&&t.isValid()?(t=so(t,e),e.isBefore(t)?n=Eo(e,t):((n=Eo(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Co(e,t){return function(n,o){var p;return null===o||isNaN(+o)||(N(t,\"moment().\"+t+\"(period, number) is deprecated. Please use moment().\"+t+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),p=n,n=o,o=p),Xo(this,yo(n,o),e),this}}function Xo(e,t,n,p){var M=t._milliseconds,b=zo(t._days),c=zo(t._months);e.isValid()&&(p=null==p||p,c&&rt(e,Oe(e,\"Month\")+c*n),b&&se(e,\"Date\",Oe(e,\"Date\")+b*n),M&&e._d.setTime(e._d.valueOf()+M*n),p&&o.updateOffset(e,b||c))}yo.fn=bo.prototype,yo.invalid=Mo;var wo=Co(1,\"add\"),So=Co(-1,\"subtract\");function xo(e){return\"string\"==typeof e||e instanceof String}function ko(e){return R(e)||i(e)||xo(e)||a(e)||Do(e)||Io(e)||null==e}function Io(e){var t,n,o=b(e)&&!z(e),p=!1,M=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],r=M.length;for(t=0;t<r;t+=1)n=M[t],p=p||c(e,n);return o&&p}function Do(e){var t=M(e),n=!1;return t&&(n=0===e.filter((function(t){return!a(t)&&xo(e)})).length),t&&n}function Po(e){var t,n,o=b(e)&&!z(e),p=!1,M=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"];for(t=0;t<M.length;t+=1)n=M[t],p=p||c(e,n);return o&&p}function jo(e,t){var n=e.diff(t,\"days\",!0);return n<-6?\"sameElse\":n<-1?\"lastWeek\":n<0?\"lastDay\":n<1?\"sameDay\":n<2?\"nextDay\":n<7?\"nextWeek\":\"sameElse\"}function Uo(e,t){1===arguments.length&&(arguments[0]?ko(arguments[0])?(e=arguments[0],t=void 0):Po(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||Yn(),p=so(n,this).startOf(\"day\"),M=o.calendarFormat(this,p)||\"sameElse\",b=t&&(y(t[M])?t[M].call(this,n):t[M]);return this.format(b||this.localeData().calendar(M,this,Yn(n)))}function Ho(){return new v(this)}function Fo(e,t){var n=R(e)?e:Yn(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=oe(t)||\"millisecond\")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())}function Go(e,t){var n=R(e)?e:Yn(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=oe(t)||\"millisecond\")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())}function $o(e,t,n,o){var p=R(e)?e:Yn(e),M=R(t)?t:Yn(t);return!!(this.isValid()&&p.isValid()&&M.isValid())&&(\"(\"===(o=o||\"()\")[0]?this.isAfter(p,n):!this.isBefore(p,n))&&(\")\"===o[1]?this.isBefore(M,n):!this.isAfter(M,n))}function Vo(e,t){var n,o=R(e)?e:Yn(e);return!(!this.isValid()||!o.isValid())&&(\"millisecond\"===(t=oe(t)||\"millisecond\")?this.valueOf()===o.valueOf():(n=o.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))}function Yo(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function Ko(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Zo(e,t,n){var o,p,M;if(!this.isValid())return NaN;if(!(o=so(e,this)).isValid())return NaN;switch(p=6e4*(o.utcOffset()-this.utcOffset()),t=oe(t)){case\"year\":M=Qo(this,o)/12;break;case\"month\":M=Qo(this,o);break;case\"quarter\":M=Qo(this,o)/3;break;case\"second\":M=(this-o)/1e3;break;case\"minute\":M=(this-o)/6e4;break;case\"hour\":M=(this-o)/36e5;break;case\"day\":M=(this-o-p)/864e5;break;case\"week\":M=(this-o-p)/6048e5;break;default:M=this-o}return n?M:re(M)}function Qo(e,t){if(e.date()<t.date())return-Qo(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(n,\"months\");return-(n+(t-o<0?(t-o)/(o-e.clone().add(n-1,\"months\")):(t-o)/(e.clone().add(n+1,\"months\")-o)))||0}function Jo(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function ep(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?U(n,t?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):y(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\"Z\",U(n,\"Z\")):U(n,t?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")}function tp(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var e,t,n,o,p=\"moment\",M=\"\";return this.isLocal()||(p=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",M=\"Z\"),e=\"[\"+p+'(\"]',t=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",n=\"-MM-DD[T]HH:mm:ss.SSS\",o=M+'[\")]',this.format(e+t+n+o)}function np(e){e||(e=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var t=U(this,e);return this.localeData().postformat(t)}function op(e,t){return this.isValid()&&(R(e)&&e.isValid()||Yn(e).isValid())?yo({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function pp(e){return this.from(Yn(),e)}function Mp(e,t){return this.isValid()&&(R(e)&&e.isValid()||Yn(e).isValid())?yo({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function bp(e){return this.to(Yn(),e)}function cp(e){var t;return void 0===e?this._locale._abbr:(null!=(t=fn(e))&&(this._locale=t),this)}o.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",o.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var zp=g(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",(function(e){return void 0===e?this.localeData():this.locale(e)}));function rp(){return this._locale}var ap=1e3,ip=60*ap,Op=60*ip,sp=3506328*Op;function Ap(e,t){return(e%t+t)%t}function up(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-sp:new Date(e,t,n).valueOf()}function dp(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-sp:Date.UTC(e,t,n)}function lp(e){var t,n;if(void 0===(e=oe(e))||\"millisecond\"===e||!this.isValid())return this;switch(n=this._isUTC?dp:up,e){case\"year\":t=n(this.year(),0,1);break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3,1);break;case\"month\":t=n(this.year(),this.month(),1);break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date());break;case\"hour\":t=this._d.valueOf(),t-=Ap(t+(this._isUTC?0:this.utcOffset()*ip),Op);break;case\"minute\":t=this._d.valueOf(),t-=Ap(t,ip);break;case\"second\":t=this._d.valueOf(),t-=Ap(t,ap)}return this._d.setTime(t),o.updateOffset(this,!0),this}function fp(e){var t,n;if(void 0===(e=oe(e))||\"millisecond\"===e||!this.isValid())return this;switch(n=this._isUTC?dp:up,e){case\"year\":t=n(this.year()+1,0,1)-1;break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":t=n(this.year(),this.month()+1,1)-1;break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":t=this._d.valueOf(),t+=Op-Ap(t+(this._isUTC?0:this.utcOffset()*ip),Op)-1;break;case\"minute\":t=this._d.valueOf(),t+=ip-Ap(t,ip)-1;break;case\"second\":t=this._d.valueOf(),t+=ap-Ap(t,ap)-1}return this._d.setTime(t),o.updateOffset(this,!0),this}function qp(){return this._d.valueOf()-6e4*(this._offset||0)}function Wp(){return Math.floor(this.valueOf()/1e3)}function hp(){return new Date(this.valueOf())}function vp(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function Rp(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function mp(){return this.isValid()?this.toISOString():null}function gp(){return l(this)}function Lp(){return s({},d(this))}function _p(){return d(this).overflow}function Np(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function yp(e,t){var n,p,M,b=this._eras||fn(\"en\")._eras;for(n=0,p=b.length;n<p;++n)switch(\"string\"==typeof b[n].since&&(M=o(b[n].since).startOf(\"day\"),b[n].since=M.valueOf()),typeof b[n].until){case\"undefined\":b[n].until=1/0;break;case\"string\":M=o(b[n].until).startOf(\"day\").valueOf(),b[n].until=M.valueOf()}return b}function Tp(e,t,n){var o,p,M,b,c,z=this.eras();for(e=e.toUpperCase(),o=0,p=z.length;o<p;++o)if(M=z[o].name.toUpperCase(),b=z[o].abbr.toUpperCase(),c=z[o].narrow.toUpperCase(),n)switch(t){case\"N\":case\"NN\":case\"NNN\":if(b===e)return z[o];break;case\"NNNN\":if(M===e)return z[o];break;case\"NNNNN\":if(c===e)return z[o]}else if([M,b,c].indexOf(e)>=0)return z[o]}function Ep(e,t){var n=e.since<=e.until?1:-1;return void 0===t?o(e.since).year():o(e.since).year()+(t-e.offset)*n}function Bp(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e){if(n=this.clone().startOf(\"day\").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].name;if(o[e].until<=n&&n<=o[e].since)return o[e].name}return\"\"}function Cp(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e){if(n=this.clone().startOf(\"day\").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].narrow;if(o[e].until<=n&&n<=o[e].since)return o[e].narrow}return\"\"}function Xp(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e){if(n=this.clone().startOf(\"day\").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].abbr;if(o[e].until<=n&&n<=o[e].since)return o[e].abbr}return\"\"}function wp(){var e,t,n,p,M=this.localeData().eras();for(e=0,t=M.length;e<t;++e)if(n=M[e].since<=M[e].until?1:-1,p=this.clone().startOf(\"day\").valueOf(),M[e].since<=p&&p<=M[e].until||M[e].until<=p&&p<=M[e].since)return(this.year()-o(M[e].since).year())*n+M[e].offset;return this.year()}function Sp(e){return c(this,\"_erasNameRegex\")||Up.call(this),e?this._erasNameRegex:this._erasRegex}function xp(e){return c(this,\"_erasAbbrRegex\")||Up.call(this),e?this._erasAbbrRegex:this._erasRegex}function kp(e){return c(this,\"_erasNarrowRegex\")||Up.call(this),e?this._erasNarrowRegex:this._erasRegex}function Ip(e,t){return t.erasAbbrRegex(e)}function Dp(e,t){return t.erasNameRegex(e)}function Pp(e,t){return t.erasNarrowRegex(e)}function jp(e,t){return t._eraYearOrdinalRegex||Ne}function Up(){var e,t,n=[],o=[],p=[],M=[],b=this.eras();for(e=0,t=b.length;e<t;++e)o.push(xe(b[e].name)),n.push(xe(b[e].abbr)),p.push(xe(b[e].narrow)),M.push(xe(b[e].name)),M.push(xe(b[e].abbr)),M.push(xe(b[e].narrow));this._erasRegex=new RegExp(\"^(\"+M.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+n.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+p.join(\"|\")+\")\",\"i\")}function Hp(e,t){D(0,[e,e.length],0,t)}function Fp(e){return Zp.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Gp(e){return Zp.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function $p(){return Rt(this.year(),1,4)}function Vp(){return Rt(this.isoWeekYear(),1,4)}function Yp(){var e=this.localeData()._week;return Rt(this.year(),e.dow,e.doy)}function Kp(){var e=this.localeData()._week;return Rt(this.weekYear(),e.dow,e.doy)}function Zp(e,t,n,o,p){var M;return null==e?vt(this,o,p).year:(t>(M=Rt(e,o,p))&&(t=M),Qp.call(this,e,t,n,o,p))}function Qp(e,t,n,o,p){var M=ht(e,t,n,o,p),b=qt(M.year,0,M.dayOfYear);return this.year(b.getUTCFullYear()),this.month(b.getUTCMonth()),this.date(b.getUTCDate()),this}function Jp(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}D(\"N\",0,0,\"eraAbbr\"),D(\"NN\",0,0,\"eraAbbr\"),D(\"NNN\",0,0,\"eraAbbr\"),D(\"NNNN\",0,0,\"eraName\"),D(\"NNNNN\",0,0,\"eraNarrow\"),D(\"y\",[\"y\",1],\"yo\",\"eraYear\"),D(\"y\",[\"yy\",2],0,\"eraYear\"),D(\"y\",[\"yyy\",3],0,\"eraYear\"),D(\"y\",[\"yyyy\",4],0,\"eraYear\"),Xe(\"N\",Ip),Xe(\"NN\",Ip),Xe(\"NNN\",Ip),Xe(\"NNNN\",Dp),Xe(\"NNNNN\",Pp),Ie([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],(function(e,t,n,o){var p=n._locale.erasParse(e,o,n._strict);p?d(n).era=p:d(n).invalidEra=e})),Xe(\"y\",Ne),Xe(\"yy\",Ne),Xe(\"yyy\",Ne),Xe(\"yyyy\",Ne),Xe(\"yo\",jp),Ie([\"y\",\"yy\",\"yyy\",\"yyyy\"],Ue),Ie([\"yo\"],(function(e,t,n,o){var p;n._locale._eraYearOrdinalRegex&&(p=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[Ue]=n._locale.eraYearOrdinalParse(e,p):t[Ue]=parseInt(e,10)})),D(0,[\"gg\",2],0,(function(){return this.weekYear()%100})),D(0,[\"GG\",2],0,(function(){return this.isoWeekYear()%100})),Hp(\"gggg\",\"weekYear\"),Hp(\"ggggg\",\"weekYear\"),Hp(\"GGGG\",\"isoWeekYear\"),Hp(\"GGGGG\",\"isoWeekYear\"),ne(\"weekYear\",\"gg\"),ne(\"isoWeekYear\",\"GG\"),be(\"weekYear\",1),be(\"isoWeekYear\",1),Xe(\"G\",ye),Xe(\"g\",ye),Xe(\"GG\",ve,fe),Xe(\"gg\",ve,fe),Xe(\"GGGG\",Le,We),Xe(\"gggg\",Le,We),Xe(\"GGGGG\",_e,he),Xe(\"ggggg\",_e,he),De([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],(function(e,t,n,o){t[o.substr(0,2)]=ae(e)})),De([\"gg\",\"GG\"],(function(e,t,n,p){t[p]=o.parseTwoDigitYear(e)})),D(\"Q\",0,\"Qo\",\"quarter\"),ne(\"quarter\",\"Q\"),be(\"quarter\",7),Xe(\"Q\",le),Ie(\"Q\",(function(e,t){t[He]=3*(ae(e)-1)})),D(\"D\",[\"DD\",2],\"Do\",\"date\"),ne(\"date\",\"D\"),be(\"date\",9),Xe(\"D\",ve),Xe(\"DD\",ve,fe),Xe(\"Do\",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Ie([\"D\",\"DD\"],Fe),Ie(\"Do\",(function(e,t){t[Fe]=ae(e.match(ve)[0])}));var eM=ie(\"Date\",!0);function tM(e){var t=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==e?t:this.add(e-t,\"d\")}D(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),ne(\"dayOfYear\",\"DDD\"),be(\"dayOfYear\",4),Xe(\"DDD\",ge),Xe(\"DDDD\",qe),Ie([\"DDD\",\"DDDD\"],(function(e,t,n){n._dayOfYear=ae(e)})),D(\"m\",[\"mm\",2],0,\"minute\"),ne(\"minute\",\"m\"),be(\"minute\",14),Xe(\"m\",ve),Xe(\"mm\",ve,fe),Ie([\"m\",\"mm\"],$e);var nM=ie(\"Minutes\",!1);D(\"s\",[\"ss\",2],0,\"second\"),ne(\"second\",\"s\"),be(\"second\",15),Xe(\"s\",ve),Xe(\"ss\",ve,fe),Ie([\"s\",\"ss\"],Ve);var oM,pM,MM=ie(\"Seconds\",!1);for(D(\"S\",0,0,(function(){return~~(this.millisecond()/100)})),D(0,[\"SS\",2],0,(function(){return~~(this.millisecond()/10)})),D(0,[\"SSS\",3],0,\"millisecond\"),D(0,[\"SSSS\",4],0,(function(){return 10*this.millisecond()})),D(0,[\"SSSSS\",5],0,(function(){return 100*this.millisecond()})),D(0,[\"SSSSSS\",6],0,(function(){return 1e3*this.millisecond()})),D(0,[\"SSSSSSS\",7],0,(function(){return 1e4*this.millisecond()})),D(0,[\"SSSSSSSS\",8],0,(function(){return 1e5*this.millisecond()})),D(0,[\"SSSSSSSSS\",9],0,(function(){return 1e6*this.millisecond()})),ne(\"millisecond\",\"ms\"),be(\"millisecond\",16),Xe(\"S\",ge,le),Xe(\"SS\",ge,fe),Xe(\"SSS\",ge,qe),oM=\"SSSS\";oM.length<=9;oM+=\"S\")Xe(oM,Ne);function bM(e,t){t[Ye]=ae(1e3*(\"0.\"+e))}for(oM=\"S\";oM.length<=9;oM+=\"S\")Ie(oM,bM);function cM(){return this._isUTC?\"UTC\":\"\"}function zM(){return this._isUTC?\"Coordinated Universal Time\":\"\"}pM=ie(\"Milliseconds\",!1),D(\"z\",0,0,\"zoneAbbr\"),D(\"zz\",0,0,\"zoneName\");var rM=v.prototype;function aM(e){return Yn(1e3*e)}function iM(){return Yn.apply(null,arguments).parseZone()}function OM(e){return e}rM.add=wo,rM.calendar=Uo,rM.clone=Ho,rM.diff=Zo,rM.endOf=fp,rM.format=np,rM.from=op,rM.fromNow=pp,rM.to=Mp,rM.toNow=bp,rM.get=Ae,rM.invalidAt=_p,rM.isAfter=Fo,rM.isBefore=Go,rM.isBetween=$o,rM.isSame=Vo,rM.isSameOrAfter=Yo,rM.isSameOrBefore=Ko,rM.isValid=gp,rM.lang=zp,rM.locale=cp,rM.localeData=rp,rM.max=Zn,rM.min=Kn,rM.parsingFlags=Lp,rM.set=ue,rM.startOf=lp,rM.subtract=So,rM.toArray=vp,rM.toObject=Rp,rM.toDate=hp,rM.toISOString=ep,rM.inspect=tp,\"undefined\"!=typeof Symbol&&null!=Symbol.for&&(rM[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),rM.toJSON=mp,rM.toString=Jo,rM.unix=Wp,rM.valueOf=qp,rM.creationData=Np,rM.eraName=Bp,rM.eraNarrow=Cp,rM.eraAbbr=Xp,rM.eraYear=wp,rM.year=dt,rM.isLeapYear=lt,rM.weekYear=Fp,rM.isoWeekYear=Gp,rM.quarter=rM.quarters=Jp,rM.month=at,rM.daysInMonth=it,rM.week=rM.weeks=Nt,rM.isoWeek=rM.isoWeeks=yt,rM.weeksInYear=Yp,rM.weeksInWeekYear=Kp,rM.isoWeeksInYear=$p,rM.isoWeeksInISOWeekYear=Vp,rM.date=eM,rM.day=rM.days=Ht,rM.weekday=Ft,rM.isoWeekday=Gt,rM.dayOfYear=tM,rM.hour=rM.hours=on,rM.minute=rM.minutes=nM,rM.second=rM.seconds=MM,rM.millisecond=rM.milliseconds=pM,rM.utcOffset=uo,rM.utc=fo,rM.local=qo,rM.parseZone=Wo,rM.hasAlignedHourOffset=ho,rM.isDST=vo,rM.isLocal=mo,rM.isUtcOffset=go,rM.isUtc=Lo,rM.isUTC=Lo,rM.zoneAbbr=cM,rM.zoneName=zM,rM.dates=g(\"dates accessor is deprecated. Use date instead.\",eM),rM.months=g(\"months accessor is deprecated. Use month instead\",at),rM.years=g(\"years accessor is deprecated. Use year instead\",dt),rM.zone=g(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",lo),rM.isDSTShifted=g(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",Ro);var sM=B.prototype;function AM(e,t,n,o){var p=fn(),M=A().set(o,t);return p[n](M,e)}function uM(e,t,n){if(a(e)&&(t=e,e=void 0),e=e||\"\",null!=t)return AM(e,t,n,\"month\");var o,p=[];for(o=0;o<12;o++)p[o]=AM(e,o,n,\"month\");return p}function dM(e,t,n,o){\"boolean\"==typeof e?(a(t)&&(n=t,t=void 0),t=t||\"\"):(n=t=e,e=!1,a(t)&&(n=t,t=void 0),t=t||\"\");var p,M=fn(),b=e?M._week.dow:0,c=[];if(null!=n)return AM(t,(n+b)%7,o,\"day\");for(p=0;p<7;p++)c[p]=AM(t,(p+b)%7,o,\"day\");return c}function lM(e,t){return uM(e,t,\"months\")}function fM(e,t){return uM(e,t,\"monthsShort\")}function qM(e,t,n){return dM(e,t,n,\"weekdays\")}function WM(e,t,n){return dM(e,t,n,\"weekdaysShort\")}function hM(e,t,n){return dM(e,t,n,\"weekdaysMin\")}sM.calendar=X,sM.longDateFormat=G,sM.invalidDate=V,sM.ordinal=Z,sM.preparse=OM,sM.postformat=OM,sM.relativeTime=J,sM.pastFuture=ee,sM.set=T,sM.eras=yp,sM.erasParse=Tp,sM.erasConvertYear=Ep,sM.erasAbbrRegex=xp,sM.erasNameRegex=Sp,sM.erasNarrowRegex=kp,sM.months=Mt,sM.monthsShort=bt,sM.monthsParse=zt,sM.monthsRegex=st,sM.monthsShortRegex=Ot,sM.week=mt,sM.firstDayOfYear=_t,sM.firstDayOfWeek=Lt,sM.weekdays=It,sM.weekdaysMin=Pt,sM.weekdaysShort=Dt,sM.weekdaysParse=Ut,sM.weekdaysRegex=$t,sM.weekdaysShortRegex=Vt,sM.weekdaysMinRegex=Yt,sM.isPM=tn,sM.meridiem=pn,un(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===ae(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")}}),o.lang=g(\"moment.lang is deprecated. Use moment.locale instead.\",un),o.langData=g(\"moment.langData is deprecated. Use moment.localeData instead.\",fn);var vM=Math.abs;function RM(){var e=this._data;return this._milliseconds=vM(this._milliseconds),this._days=vM(this._days),this._months=vM(this._months),e.milliseconds=vM(e.milliseconds),e.seconds=vM(e.seconds),e.minutes=vM(e.minutes),e.hours=vM(e.hours),e.months=vM(e.months),e.years=vM(e.years),this}function mM(e,t,n,o){var p=yo(t,n);return e._milliseconds+=o*p._milliseconds,e._days+=o*p._days,e._months+=o*p._months,e._bubble()}function gM(e,t){return mM(this,e,t,1)}function LM(e,t){return mM(this,e,t,-1)}function _M(e){return e<0?Math.floor(e):Math.ceil(e)}function NM(){var e,t,n,o,p,M=this._milliseconds,b=this._days,c=this._months,z=this._data;return M>=0&&b>=0&&c>=0||M<=0&&b<=0&&c<=0||(M+=864e5*_M(TM(c)+b),b=0,c=0),z.milliseconds=M%1e3,e=re(M/1e3),z.seconds=e%60,t=re(e/60),z.minutes=t%60,n=re(t/60),z.hours=n%24,b+=re(n/24),c+=p=re(yM(b)),b-=_M(TM(p)),o=re(c/12),c%=12,z.days=b,z.months=c,z.years=o,this}function yM(e){return 4800*e/146097}function TM(e){return 146097*e/4800}function EM(e){if(!this.isValid())return NaN;var t,n,o=this._milliseconds;if(\"month\"===(e=oe(e))||\"quarter\"===e||\"year\"===e)switch(t=this._days+o/864e5,n=this._months+yM(t),e){case\"month\":return n;case\"quarter\":return n/3;case\"year\":return n/12}else switch(t=this._days+Math.round(TM(this._months)),e){case\"week\":return t/7+o/6048e5;case\"day\":return t+o/864e5;case\"hour\":return 24*t+o/36e5;case\"minute\":return 1440*t+o/6e4;case\"second\":return 86400*t+o/1e3;case\"millisecond\":return Math.floor(864e5*t)+o;default:throw new Error(\"Unknown unit \"+e)}}function BM(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*ae(this._months/12):NaN}function CM(e){return function(){return this.as(e)}}var XM=CM(\"ms\"),wM=CM(\"s\"),SM=CM(\"m\"),xM=CM(\"h\"),kM=CM(\"d\"),IM=CM(\"w\"),DM=CM(\"M\"),PM=CM(\"Q\"),jM=CM(\"y\");function UM(){return yo(this)}function HM(e){return e=oe(e),this.isValid()?this[e+\"s\"]():NaN}function FM(e){return function(){return this.isValid()?this._data[e]:NaN}}var GM=FM(\"milliseconds\"),$M=FM(\"seconds\"),VM=FM(\"minutes\"),YM=FM(\"hours\"),KM=FM(\"days\"),ZM=FM(\"months\"),QM=FM(\"years\");function JM(){return re(this.days()/7)}var eb=Math.round,tb={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function nb(e,t,n,o,p){return p.relativeTime(t||1,!!n,e,o)}function ob(e,t,n,o){var p=yo(e).abs(),M=eb(p.as(\"s\")),b=eb(p.as(\"m\")),c=eb(p.as(\"h\")),z=eb(p.as(\"d\")),r=eb(p.as(\"M\")),a=eb(p.as(\"w\")),i=eb(p.as(\"y\")),O=M<=n.ss&&[\"s\",M]||M<n.s&&[\"ss\",M]||b<=1&&[\"m\"]||b<n.m&&[\"mm\",b]||c<=1&&[\"h\"]||c<n.h&&[\"hh\",c]||z<=1&&[\"d\"]||z<n.d&&[\"dd\",z];return null!=n.w&&(O=O||a<=1&&[\"w\"]||a<n.w&&[\"ww\",a]),(O=O||r<=1&&[\"M\"]||r<n.M&&[\"MM\",r]||i<=1&&[\"y\"]||[\"yy\",i])[2]=t,O[3]=+e>0,O[4]=o,nb.apply(null,O)}function pb(e){return void 0===e?eb:\"function\"==typeof e&&(eb=e,!0)}function Mb(e,t){return void 0!==tb[e]&&(void 0===t?tb[e]:(tb[e]=t,\"s\"===e&&(tb.ss=t-1),!0))}function bb(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,o,p=!1,M=tb;return\"object\"==typeof e&&(t=e,e=!1),\"boolean\"==typeof e&&(p=e),\"object\"==typeof t&&(M=Object.assign({},tb,t),null!=t.s&&null==t.ss&&(M.ss=t.s-1)),o=ob(this,!p,M,n=this.localeData()),p&&(o=n.pastFuture(+this,o)),n.postformat(o)}var cb=Math.abs;function zb(e){return(e>0)-(e<0)||+e}function rb(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,o,p,M,b,c,z=cb(this._milliseconds)/1e3,r=cb(this._days),a=cb(this._months),i=this.asSeconds();return i?(e=re(z/60),t=re(e/60),z%=60,e%=60,n=re(a/12),a%=12,o=z?z.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",p=i<0?\"-\":\"\",M=zb(this._months)!==zb(i)?\"-\":\"\",b=zb(this._days)!==zb(i)?\"-\":\"\",c=zb(this._milliseconds)!==zb(i)?\"-\":\"\",p+\"P\"+(n?M+n+\"Y\":\"\")+(a?M+a+\"M\":\"\")+(r?b+r+\"D\":\"\")+(t||e||z?\"T\":\"\")+(t?c+t+\"H\":\"\")+(e?c+e+\"M\":\"\")+(z?c+o+\"S\":\"\")):\"P0D\"}var ab=bo.prototype;return ab.isValid=po,ab.abs=RM,ab.add=gM,ab.subtract=LM,ab.as=EM,ab.asMilliseconds=XM,ab.asSeconds=wM,ab.asMinutes=SM,ab.asHours=xM,ab.asDays=kM,ab.asWeeks=IM,ab.asMonths=DM,ab.asQuarters=PM,ab.asYears=jM,ab.valueOf=BM,ab._bubble=NM,ab.clone=UM,ab.get=HM,ab.milliseconds=GM,ab.seconds=$M,ab.minutes=VM,ab.hours=YM,ab.days=KM,ab.weeks=JM,ab.months=ZM,ab.years=QM,ab.humanize=bb,ab.toISOString=rb,ab.toString=rb,ab.toJSON=rb,ab.locale=cp,ab.localeData=rp,ab.toIsoString=g(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",rb),ab.lang=zp,D(\"X\",0,0,\"unix\"),D(\"x\",0,0,\"valueOf\"),Xe(\"x\",ye),Xe(\"X\",Be),Ie(\"X\",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),Ie(\"x\",(function(e,t,n){n._d=new Date(ae(e))})),o.version=\"2.29.4\",p(Yn),o.fn=rM,o.min=Jn,o.max=eo,o.now=to,o.utc=A,o.unix=aM,o.months=lM,o.isDate=i,o.locale=un,o.invalid=f,o.duration=yo,o.isMoment=R,o.weekdays=qM,o.parseZone=iM,o.localeData=fn,o.isDuration=co,o.monthsShort=fM,o.weekdaysMin=hM,o.defineLocale=dn,o.updateLocale=ln,o.locales=qn,o.weekdaysShort=WM,o.normalizeUnits=oe,o.relativeTimeRounding=pb,o.relativeTimeThreshold=Mb,o.calendarFormat=jo,o.prototype=rM,o.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},o}()},8981:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>be});var o=\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&\"undefined\"!=typeof navigator,p=function(){for(var e=[\"Edge\",\"Trident\",\"Firefox\"],t=0;t<e.length;t+=1)if(o&&navigator.userAgent.indexOf(e[t])>=0)return 1;return 0}();var M=o&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then((function(){t=!1,e()})))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout((function(){t=!1,e()}),p))}};function b(e){return e&&\"[object Function]\"==={}.toString.call(e)}function c(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function z(e){return\"HTML\"===e.nodeName?e:e.parentNode||e.host}function r(e){if(!e)return document.body;switch(e.nodeName){case\"HTML\":case\"BODY\":return e.ownerDocument.body;case\"#document\":return e.body}var t=c(e),n=t.overflow,o=t.overflowX,p=t.overflowY;return/(auto|scroll|overlay)/.test(n+p+o)?e:r(z(e))}function a(e){return e&&e.referenceNode?e.referenceNode:e}var i=o&&!(!window.MSInputMethodContext||!document.documentMode),O=o&&/MSIE 10/.test(navigator.userAgent);function s(e){return 11===e?i:10===e?O:i||O}function A(e){if(!e)return document.documentElement;for(var t=s(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var o=n&&n.nodeName;return o&&\"BODY\"!==o&&\"HTML\"!==o?-1!==[\"TH\",\"TD\",\"TABLE\"].indexOf(n.nodeName)&&\"static\"===c(n,\"position\")?A(n):n:e?e.ownerDocument.documentElement:document.documentElement}function u(e){return null!==e.parentNode?u(e.parentNode):e}function d(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,o=n?e:t,p=n?t:e,M=document.createRange();M.setStart(o,0),M.setEnd(p,0);var b,c,z=M.commonAncestorContainer;if(e!==z&&t!==z||o.contains(p))return\"BODY\"===(c=(b=z).nodeName)||\"HTML\"!==c&&A(b.firstElementChild)!==b?A(z):z;var r=u(e);return r.host?d(r.host,t):d(e,u(t).host)}function l(e){var t=\"top\"===(arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"top\")?\"scrollTop\":\"scrollLeft\",n=e.nodeName;if(\"BODY\"===n||\"HTML\"===n){var o=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||o)[t]}return e[t]}function f(e,t){var n=\"x\"===t?\"Left\":\"Top\",o=\"Left\"===n?\"Right\":\"Bottom\";return parseFloat(e[\"border\"+n+\"Width\"])+parseFloat(e[\"border\"+o+\"Width\"])}function q(e,t,n,o){return Math.max(t[\"offset\"+e],t[\"scroll\"+e],n[\"client\"+e],n[\"offset\"+e],n[\"scroll\"+e],s(10)?parseInt(n[\"offset\"+e])+parseInt(o[\"margin\"+(\"Height\"===e?\"Top\":\"Left\")])+parseInt(o[\"margin\"+(\"Height\"===e?\"Bottom\":\"Right\")]):0)}function W(e){var t=e.body,n=e.documentElement,o=s(10)&&getComputedStyle(n);return{height:q(\"Height\",t,n,o),width:q(\"Width\",t,n,o)}}var h=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),v=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},R=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function m(e){return R({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var t={};try{if(s(10)){t=e.getBoundingClientRect();var n=l(e,\"top\"),o=l(e,\"left\");t.top+=n,t.left+=o,t.bottom+=n,t.right+=o}else t=e.getBoundingClientRect()}catch(e){}var p={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},M=\"HTML\"===e.nodeName?W(e.ownerDocument):{},b=M.width||e.clientWidth||p.width,z=M.height||e.clientHeight||p.height,r=e.offsetWidth-b,a=e.offsetHeight-z;if(r||a){var i=c(e);r-=f(i,\"x\"),a-=f(i,\"y\"),p.width-=r,p.height-=a}return m(p)}function L(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=s(10),p=\"HTML\"===t.nodeName,M=g(e),b=g(t),z=r(e),a=c(t),i=parseFloat(a.borderTopWidth),O=parseFloat(a.borderLeftWidth);n&&p&&(b.top=Math.max(b.top,0),b.left=Math.max(b.left,0));var A=m({top:M.top-b.top-i,left:M.left-b.left-O,width:M.width,height:M.height});if(A.marginTop=0,A.marginLeft=0,!o&&p){var u=parseFloat(a.marginTop),d=parseFloat(a.marginLeft);A.top-=i-u,A.bottom-=i-u,A.left-=O-d,A.right-=O-d,A.marginTop=u,A.marginLeft=d}return(o&&!n?t.contains(z):t===z&&\"BODY\"!==z.nodeName)&&(A=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=l(t,\"top\"),p=l(t,\"left\"),M=n?-1:1;return e.top+=o*M,e.bottom+=o*M,e.left+=p*M,e.right+=p*M,e}(A,t)),A}function _(e){var t=e.nodeName;if(\"BODY\"===t||\"HTML\"===t)return!1;if(\"fixed\"===c(e,\"position\"))return!0;var n=z(e);return!!n&&_(n)}function N(e){if(!e||!e.parentElement||s())return document.documentElement;for(var t=e.parentElement;t&&\"none\"===c(t,\"transform\");)t=t.parentElement;return t||document.documentElement}function y(e,t,n,o){var p=arguments.length>4&&void 0!==arguments[4]&&arguments[4],M={top:0,left:0},b=p?N(e):d(e,a(t));if(\"viewport\"===o)M=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,o=L(e,n),p=Math.max(n.clientWidth,window.innerWidth||0),M=Math.max(n.clientHeight,window.innerHeight||0),b=t?0:l(n),c=t?0:l(n,\"left\");return m({top:b-o.top+o.marginTop,left:c-o.left+o.marginLeft,width:p,height:M})}(b,p);else{var c=void 0;\"scrollParent\"===o?\"BODY\"===(c=r(z(t))).nodeName&&(c=e.ownerDocument.documentElement):c=\"window\"===o?e.ownerDocument.documentElement:o;var i=L(c,b,p);if(\"HTML\"!==c.nodeName||_(b))M=i;else{var O=W(e.ownerDocument),s=O.height,A=O.width;M.top+=i.top-i.marginTop,M.bottom=s+i.top,M.left+=i.left-i.marginLeft,M.right=A+i.left}}var u=\"number\"==typeof(n=n||0);return M.left+=u?n:n.left||0,M.top+=u?n:n.top||0,M.right-=u?n:n.right||0,M.bottom-=u?n:n.bottom||0,M}function T(e,t,n,o,p){var M=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf(\"auto\"))return e;var b=y(n,o,M,p),c={top:{width:b.width,height:t.top-b.top},right:{width:b.right-t.right,height:b.height},bottom:{width:b.width,height:b.bottom-t.bottom},left:{width:t.left-b.left,height:b.height}},z=Object.keys(c).map((function(e){return R({key:e},c[e],{area:(t=c[e],t.width*t.height)});var t})).sort((function(e,t){return t.area-e.area})),r=z.filter((function(e){var t=e.width,o=e.height;return t>=n.clientWidth&&o>=n.clientHeight})),a=r.length>0?r[0].key:z[0].key,i=e.split(\"-\")[1];return a+(i?\"-\"+i:\"\")}function E(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return L(n,o?N(t):d(t,a(n)),o)}function B(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),o=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+o,height:e.offsetHeight+n}}function C(e){var t={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function X(e,t,n){n=n.split(\"-\")[0];var o=B(e),p={width:o.width,height:o.height},M=-1!==[\"right\",\"left\"].indexOf(n),b=M?\"top\":\"left\",c=M?\"left\":\"top\",z=M?\"height\":\"width\",r=M?\"width\":\"height\";return p[b]=t[b]+t[z]/2-o[z]/2,p[c]=n===c?t[c]-o[r]:t[C(c)],p}function w(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function S(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===n}));var o=w(e,(function(e){return e[t]===n}));return e.indexOf(o)}(e,\"name\",n))).forEach((function(e){e.function;var n=e.function||e.fn;e.enabled&&b(n)&&(t.offsets.popper=m(t.offsets.popper),t.offsets.reference=m(t.offsets.reference),t=n(t,e))})),t}function x(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=E(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=T(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=X(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?\"fixed\":\"absolute\",e=S(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function k(e,t){return e.some((function(e){var n=e.name;return e.enabled&&n===t}))}function I(e){for(var t=[!1,\"ms\",\"Webkit\",\"Moz\",\"O\"],n=e.charAt(0).toUpperCase()+e.slice(1),o=0;o<t.length;o++){var p=t[o],M=p?\"\"+p+n:e;if(void 0!==document.body.style[M])return M}return null}function D(){return this.state.isDestroyed=!0,k(this.modifiers,\"applyStyle\")&&(this.popper.removeAttribute(\"x-placement\"),this.popper.style.position=\"\",this.popper.style.top=\"\",this.popper.style.left=\"\",this.popper.style.right=\"\",this.popper.style.bottom=\"\",this.popper.style.willChange=\"\",this.popper.style[I(\"transform\")]=\"\"),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function P(e){var t=e.ownerDocument;return t?t.defaultView:window}function j(e,t,n,o){var p=\"BODY\"===e.nodeName,M=p?e.ownerDocument.defaultView:e;M.addEventListener(t,n,{passive:!0}),p||j(r(M.parentNode),t,n,o),o.push(M)}function U(e,t,n,o){n.updateBound=o,P(e).addEventListener(\"resize\",n.updateBound,{passive:!0});var p=r(e);return j(p,\"scroll\",n.updateBound,n.scrollParents),n.scrollElement=p,n.eventsEnabled=!0,n}function H(){this.state.eventsEnabled||(this.state=U(this.reference,this.options,this.state,this.scheduleUpdate))}function F(){var e,t;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(e=this.reference,t=this.state,P(e).removeEventListener(\"resize\",t.updateBound),t.scrollParents.forEach((function(e){e.removeEventListener(\"scroll\",t.updateBound)})),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t))}function G(e){return\"\"!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function $(e,t){Object.keys(t).forEach((function(n){var o=\"\";-1!==[\"width\",\"height\",\"top\",\"right\",\"bottom\",\"left\"].indexOf(n)&&G(t[n])&&(o=\"px\"),e.style[n]=t[n]+o}))}var V=o&&/Firefox/i.test(navigator.userAgent);function Y(e,t,n){var o=w(e,(function(e){return e.name===t})),p=!!o&&e.some((function(e){return e.name===n&&e.enabled&&e.order<o.order}));if(!p);return p}var K=[\"auto-start\",\"auto\",\"auto-end\",\"top-start\",\"top\",\"top-end\",\"right-start\",\"right\",\"right-end\",\"bottom-end\",\"bottom\",\"bottom-start\",\"left-end\",\"left\",\"left-start\"],Z=K.slice(3);function Q(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Z.indexOf(e),o=Z.slice(n+1).concat(Z.slice(0,n));return t?o.reverse():o}var J=\"flip\",ee=\"clockwise\",te=\"counterclockwise\";function ne(e,t,n,o){var p=[0,0],M=-1!==[\"right\",\"left\"].indexOf(o),b=e.split(/(\\+|\\-)/).map((function(e){return e.trim()})),c=b.indexOf(w(b,(function(e){return-1!==e.search(/,|\\s/)})));b[c]&&b[c].indexOf(\",\");var z=/\\s*,\\s*|\\s+/,r=-1!==c?[b.slice(0,c).concat([b[c].split(z)[0]]),[b[c].split(z)[1]].concat(b.slice(c+1))]:[b];return r=r.map((function(e,o){var p=(1===o?!M:M)?\"height\":\"width\",b=!1;return e.reduce((function(e,t){return\"\"===e[e.length-1]&&-1!==[\"+\",\"-\"].indexOf(t)?(e[e.length-1]=t,b=!0,e):b?(e[e.length-1]+=t,b=!1,e):e.concat(t)}),[]).map((function(e){return function(e,t,n,o){var p=e.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/),M=+p[1],b=p[2];if(!M)return e;if(0===b.indexOf(\"%\")){return m(\"%p\"===b?n:o)[t]/100*M}if(\"vh\"===b||\"vw\"===b)return(\"vh\"===b?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*M;return M}(e,p,t,n)}))})),r.forEach((function(e,t){e.forEach((function(n,o){G(n)&&(p[t]+=n*(\"-\"===e[o-1]?-1:1))}))})),p}var oe={shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split(\"-\")[0],o=t.split(\"-\")[1];if(o){var p=e.offsets,M=p.reference,b=p.popper,c=-1!==[\"bottom\",\"top\"].indexOf(n),z=c?\"left\":\"top\",r=c?\"width\":\"height\",a={start:v({},z,M[z]),end:v({},z,M[z]+M[r]-b[r])};e.offsets.popper=R({},b,a[o])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,o=e.placement,p=e.offsets,M=p.popper,b=p.reference,c=o.split(\"-\")[0],z=void 0;return z=G(+n)?[+n,0]:ne(n,M,b,c),\"left\"===c?(M.top+=z[0],M.left-=z[1]):\"right\"===c?(M.top+=z[0],M.left+=z[1]):\"top\"===c?(M.left+=z[0],M.top-=z[1]):\"bottom\"===c&&(M.left+=z[0],M.top+=z[1]),e.popper=M,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||A(e.instance.popper);e.instance.reference===n&&(n=A(n));var o=I(\"transform\"),p=e.instance.popper.style,M=p.top,b=p.left,c=p[o];p.top=\"\",p.left=\"\",p[o]=\"\";var z=y(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);p.top=M,p.left=b,p[o]=c,t.boundaries=z;var r=t.priority,a=e.offsets.popper,i={primary:function(e){var n=a[e];return a[e]<z[e]&&!t.escapeWithReference&&(n=Math.max(a[e],z[e])),v({},e,n)},secondary:function(e){var n=\"right\"===e?\"left\":\"top\",o=a[n];return a[e]>z[e]&&!t.escapeWithReference&&(o=Math.min(a[n],z[e]-(\"right\"===e?a.width:a.height))),v({},n,o)}};return r.forEach((function(e){var t=-1!==[\"left\",\"top\"].indexOf(e)?\"primary\":\"secondary\";a=R({},a,i[t](e))})),e.offsets.popper=a,e},priority:[\"left\",\"right\",\"top\",\"bottom\"],padding:5,boundariesElement:\"scrollParent\"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,o=t.reference,p=e.placement.split(\"-\")[0],M=Math.floor,b=-1!==[\"top\",\"bottom\"].indexOf(p),c=b?\"right\":\"bottom\",z=b?\"left\":\"top\",r=b?\"width\":\"height\";return n[c]<M(o[z])&&(e.offsets.popper[z]=M(o[z])-n[r]),n[z]>M(o[c])&&(e.offsets.popper[z]=M(o[c])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!Y(e.instance.modifiers,\"arrow\",\"keepTogether\"))return e;var o=t.element;if(\"string\"==typeof o){if(!(o=e.instance.popper.querySelector(o)))return e}else if(!e.instance.popper.contains(o))return e;var p=e.placement.split(\"-\")[0],M=e.offsets,b=M.popper,z=M.reference,r=-1!==[\"left\",\"right\"].indexOf(p),a=r?\"height\":\"width\",i=r?\"Top\":\"Left\",O=i.toLowerCase(),s=r?\"left\":\"top\",A=r?\"bottom\":\"right\",u=B(o)[a];z[A]-u<b[O]&&(e.offsets.popper[O]-=b[O]-(z[A]-u)),z[O]+u>b[A]&&(e.offsets.popper[O]+=z[O]+u-b[A]),e.offsets.popper=m(e.offsets.popper);var d=z[O]+z[a]/2-u/2,l=c(e.instance.popper),f=parseFloat(l[\"margin\"+i]),q=parseFloat(l[\"border\"+i+\"Width\"]),W=d-e.offsets.popper[O]-f-q;return W=Math.max(Math.min(b[a]-u,W),0),e.arrowElement=o,e.offsets.arrow=(v(n={},O,Math.round(W)),v(n,s,\"\"),n),e},element:\"[x-arrow]\"},flip:{order:600,enabled:!0,fn:function(e,t){if(k(e.instance.modifiers,\"inner\"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=y(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),o=e.placement.split(\"-\")[0],p=C(o),M=e.placement.split(\"-\")[1]||\"\",b=[];switch(t.behavior){case J:b=[o,p];break;case ee:b=Q(o);break;case te:b=Q(o,!0);break;default:b=t.behavior}return b.forEach((function(c,z){if(o!==c||b.length===z+1)return e;o=e.placement.split(\"-\")[0],p=C(o);var r=e.offsets.popper,a=e.offsets.reference,i=Math.floor,O=\"left\"===o&&i(r.right)>i(a.left)||\"right\"===o&&i(r.left)<i(a.right)||\"top\"===o&&i(r.bottom)>i(a.top)||\"bottom\"===o&&i(r.top)<i(a.bottom),s=i(r.left)<i(n.left),A=i(r.right)>i(n.right),u=i(r.top)<i(n.top),d=i(r.bottom)>i(n.bottom),l=\"left\"===o&&s||\"right\"===o&&A||\"top\"===o&&u||\"bottom\"===o&&d,f=-1!==[\"top\",\"bottom\"].indexOf(o),q=!!t.flipVariations&&(f&&\"start\"===M&&s||f&&\"end\"===M&&A||!f&&\"start\"===M&&u||!f&&\"end\"===M&&d),W=!!t.flipVariationsByContent&&(f&&\"start\"===M&&A||f&&\"end\"===M&&s||!f&&\"start\"===M&&d||!f&&\"end\"===M&&u),h=q||W;(O||l||h)&&(e.flipped=!0,(O||l)&&(o=b[z+1]),h&&(M=function(e){return\"end\"===e?\"start\":\"start\"===e?\"end\":e}(M)),e.placement=o+(M?\"-\"+M:\"\"),e.offsets.popper=R({},e.offsets.popper,X(e.instance.popper,e.offsets.reference,e.placement)),e=S(e.instance.modifiers,e,\"flip\"))})),e},behavior:\"flip\",padding:5,boundariesElement:\"viewport\",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split(\"-\")[0],o=e.offsets,p=o.popper,M=o.reference,b=-1!==[\"left\",\"right\"].indexOf(n),c=-1===[\"top\",\"left\"].indexOf(n);return p[b?\"left\":\"top\"]=M[n]-(c?p[b?\"width\":\"height\"]:0),e.placement=C(t),e.offsets.popper=m(p),e}},hide:{order:800,enabled:!0,fn:function(e){if(!Y(e.instance.modifiers,\"hide\",\"preventOverflow\"))return e;var t=e.offsets.reference,n=w(e.instance.modifiers,(function(e){return\"preventOverflow\"===e.name})).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes[\"x-out-of-boundaries\"]=\"\"}else{if(!1===e.hide)return e;e.hide=!1,e.attributes[\"x-out-of-boundaries\"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,o=t.y,p=e.offsets.popper,M=w(e.instance.modifiers,(function(e){return\"applyStyle\"===e.name})).gpuAcceleration,b=void 0!==M?M:t.gpuAcceleration,c=A(e.instance.popper),z=g(c),r={position:p.position},a=function(e,t){var n=e.offsets,o=n.popper,p=n.reference,M=Math.round,b=Math.floor,c=function(e){return e},z=M(p.width),r=M(o.width),a=-1!==[\"left\",\"right\"].indexOf(e.placement),i=-1!==e.placement.indexOf(\"-\"),O=t?a||i||z%2==r%2?M:b:c,s=t?M:c;return{left:O(z%2==1&&r%2==1&&!i&&t?o.left-1:o.left),top:s(o.top),bottom:s(o.bottom),right:O(o.right)}}(e,window.devicePixelRatio<2||!V),i=\"bottom\"===n?\"top\":\"bottom\",O=\"right\"===o?\"left\":\"right\",s=I(\"transform\"),u=void 0,d=void 0;if(d=\"bottom\"===i?\"HTML\"===c.nodeName?-c.clientHeight+a.bottom:-z.height+a.bottom:a.top,u=\"right\"===O?\"HTML\"===c.nodeName?-c.clientWidth+a.right:-z.width+a.right:a.left,b&&s)r[s]=\"translate3d(\"+u+\"px, \"+d+\"px, 0)\",r[i]=0,r[O]=0,r.willChange=\"transform\";else{var l=\"bottom\"===i?-1:1,f=\"right\"===O?-1:1;r[i]=d*l,r[O]=u*f,r.willChange=i+\", \"+O}var q={\"x-placement\":e.placement};return e.attributes=R({},q,e.attributes),e.styles=R({},r,e.styles),e.arrowStyles=R({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:\"bottom\",y:\"right\"},applyStyle:{order:900,enabled:!0,fn:function(e){var t,n;return $(e.instance.popper,e.styles),t=e.instance.popper,n=e.attributes,Object.keys(n).forEach((function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)})),e.arrowElement&&Object.keys(e.arrowStyles).length&&$(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,o,p){var M=E(p,t,e,n.positionFixed),b=T(n.placement,M,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute(\"x-placement\",b),$(t,{position:n.positionFixed?\"fixed\":\"absolute\"}),n},gpuAcceleration:void 0}},pe={placement:\"bottom\",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:oe},Me=function(){function e(t,n){var o=this,p=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(o.update)},this.update=M(this.update.bind(this)),this.options=R({},e.Defaults,p),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(R({},e.Defaults.modifiers,p.modifiers)).forEach((function(t){o.options.modifiers[t]=R({},e.Defaults.modifiers[t]||{},p.modifiers?p.modifiers[t]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(e){return R({name:e},o.options.modifiers[e])})).sort((function(e,t){return e.order-t.order})),this.modifiers.forEach((function(e){e.enabled&&b(e.onLoad)&&e.onLoad(o.reference,o.popper,o.options,e,o.state)})),this.update();var c=this.options.eventsEnabled;c&&this.enableEventListeners(),this.state.eventsEnabled=c}return h(e,[{key:\"update\",value:function(){return x.call(this)}},{key:\"destroy\",value:function(){return D.call(this)}},{key:\"enableEventListeners\",value:function(){return H.call(this)}},{key:\"disableEventListeners\",value:function(){return F.call(this)}}]),e}();Me.Utils=(\"undefined\"!=typeof window?window:n.g).PopperUtils,Me.placements=K,Me.Defaults=pe;const be=Me},4155:e=>{var t,n,o=e.exports={};function p(){throw new Error(\"setTimeout has not been defined\")}function M(){throw new Error(\"clearTimeout has not been defined\")}function b(e){if(t===setTimeout)return setTimeout(e,0);if((t===p||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t=\"function\"==typeof setTimeout?setTimeout:p}catch(e){t=p}try{n=\"function\"==typeof clearTimeout?clearTimeout:M}catch(e){n=M}}();var c,z=[],r=!1,a=-1;function i(){r&&c&&(r=!1,c.length?z=c.concat(z):a=-1,z.length&&O())}function O(){if(!r){var e=b(i);r=!0;for(var t=z.length;t;){for(c=z,z=[];++a<t;)c&&c[a].run();a=-1,t=z.length}c=null,r=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===M||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function s(e,t){this.fun=e,this.array=t}function A(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];z.push(new s(e,t)),1!==z.length||r||b(O)},s.prototype.run=function(){this.fun.apply(null,this.array)},o.title=\"browser\",o.browser=!0,o.env={},o.argv=[],o.version=\"\",o.versions={},o.on=A,o.addListener=A,o.once=A,o.off=A,o.removeListener=A,o.removeAllListeners=A,o.emit=A,o.prependListener=A,o.prependOnceListener=A,o.listeners=function(e){return[]},o.binding=function(e){throw new Error(\"process.binding is not supported\")},o.cwd=function(){return\"/\"},o.chdir=function(e){throw new Error(\"process.chdir is not supported\")},o.umask=function(){return 0}},7107:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=z(n(4417)),p=z(n(4199)),M=z(n(7326)),b=z(n(8329)),c=z(n(1530));function z(e){return e&&e.__esModule?e:{default:e}}function r(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=function(e){return e.replace(/[\\t ]+$/,\"\")},O=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.cfg=t||{},this.indentation=new p.default(this.cfg.indent),this.inlineBlock=new M.default,this.params=new b.default(this.cfg.params),this.previousReservedToken={},this.tokens=[],this.index=0}var t,n,c;return t=e,n=[{key:\"tokenOverride\",value:function(){}},{key:\"format\",value:function(e){return this.tokens=this.constructor.tokenizer.tokenize(e),this.getFormattedQueryFromTokens().trim()}},{key:\"getFormattedQueryFromTokens\",value:function(){var e=this,t=\"\";return this.tokens.forEach((function(n,p){e.index=p,(n=e.tokenOverride(n)||n).type===o.default.WHITESPACE||(n.type===o.default.LINE_COMMENT?t=e.formatLineComment(n,t):n.type===o.default.BLOCK_COMMENT?t=e.formatBlockComment(n,t):n.type===o.default.RESERVED_TOP_LEVEL?(t=e.formatTopLevelReservedWord(n,t),e.previousReservedToken=n):n.type===o.default.RESERVED_TOP_LEVEL_NO_INDENT?(t=e.formatTopLevelReservedWordNoIndent(n,t),e.previousReservedToken=n):n.type===o.default.RESERVED_NEWLINE?(t=e.formatNewlineReservedWord(n,t),e.previousReservedToken=n):n.type===o.default.RESERVED?(t=e.formatWithSpaces(n,t),e.previousReservedToken=n):t=n.type===o.default.OPEN_PAREN?e.formatOpeningParentheses(n,t):n.type===o.default.CLOSE_PAREN?e.formatClosingParentheses(n,t):n.type===o.default.PLACEHOLDER?e.formatPlaceholder(n,t):\",\"===n.value?e.formatComma(n,t):\":\"===n.value?e.formatWithSpaceAfter(n,t):\".\"===n.value?e.formatWithoutSpaces(n,t):\";\"===n.value?e.formatQuerySeparator(n,t):e.formatWithSpaces(n,t))})),t}},{key:\"formatLineComment\",value:function(e,t){return this.addNewline(t+e.value)}},{key:\"formatBlockComment\",value:function(e,t){return this.addNewline(this.addNewline(t)+this.indentComment(e.value))}},{key:\"indentComment\",value:function(e){return e.replace(/\\n[\\t ]*/g,\"\\n\"+this.indentation.getIndent()+\" \")}},{key:\"formatTopLevelReservedWordNoIndent\",value:function(e,t){return this.indentation.decreaseTopLevel(),t=this.addNewline(t)+this.equalizeWhitespace(this.formatReservedWord(e.value)),this.addNewline(t)}},{key:\"formatTopLevelReservedWord\",value:function(e,t){return this.indentation.decreaseTopLevel(),t=this.addNewline(t),this.indentation.increaseTopLevel(),t+=this.equalizeWhitespace(this.formatReservedWord(e.value)),this.addNewline(t)}},{key:\"formatNewlineReservedWord\",value:function(e,t){return this.addNewline(t)+this.equalizeWhitespace(this.formatReservedWord(e.value))+\" \"}},{key:\"equalizeWhitespace\",value:function(e){return e.replace(/[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]+/g,\" \")}},{key:\"formatOpeningParentheses\",value:function(e,t){var n;return(a(n={},o.default.WHITESPACE,!0),a(n,o.default.OPEN_PAREN,!0),a(n,o.default.LINE_COMMENT,!0),a(n,o.default.OPERATOR,!0),n)[this.previousToken().type]||(t=i(t)),t+=this.cfg.uppercase?e.value.toUpperCase():e.value,this.inlineBlock.beginIfPossible(this.tokens,this.index),this.inlineBlock.isActive()||(this.indentation.increaseBlockLevel(),t=this.addNewline(t)),t}},{key:\"formatClosingParentheses\",value:function(e,t){return e.value=this.cfg.uppercase?e.value.toUpperCase():e.value,this.inlineBlock.isActive()?(this.inlineBlock.end(),this.formatWithSpaceAfter(e,t)):(this.indentation.decreaseBlockLevel(),this.formatWithSpaces(e,this.addNewline(t)))}},{key:\"formatPlaceholder\",value:function(e,t){return t+this.params.get(e)+\" \"}},{key:\"formatComma\",value:function(e,t){return t=i(t)+e.value+\" \",this.inlineBlock.isActive()||/^LIMIT$/i.test(this.previousReservedToken.value)?t:this.addNewline(t)}},{key:\"formatWithSpaceAfter\",value:function(e,t){return i(t)+e.value+\" \"}},{key:\"formatWithoutSpaces\",value:function(e,t){return i(t)+e.value}},{key:\"formatWithSpaces\",value:function(e,t){return t+(\"reserved\"===e.type?this.formatReservedWord(e.value):e.value)+\" \"}},{key:\"formatReservedWord\",value:function(e){return this.cfg.uppercase?e.toUpperCase():e}},{key:\"formatQuerySeparator\",value:function(e,t){return this.indentation.resetIndentation(),i(t)+e.value+\"\\n\".repeat(this.cfg.linesBetweenQueries||1)}},{key:\"addNewline\",value:function(e){return(e=i(e)).endsWith(\"\\n\")||(e+=\"\\n\"),e+this.indentation.getIndent()}},{key:\"previousToken\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return this.tokens[this.index-e]||{}}},{key:\"tokenLookBack\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5,t=Math.max(0,this.index-e),n=this.index;return this.tokens.slice(t,n).reverse()}},{key:\"tokenLookAhead\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5,t=this.index+1,n=this.index+e+1;return this.tokens.slice(t,n)}}],n&&r(t.prototype,n),c&&r(t,c),e}();t.default=O,a(O,\"tokenizer\",new c.default({reservedWords:[],reservedTopLevelWords:[],reservedNewlineWords:[],reservedTopLevelWordsNoIndent:[],stringTypes:[],openParens:[],closeParens:[],indexedPlaceholderTypes:[],namedPlaceholderTypes:[],lineCommentTypes:[],specialWordChars:[]})),e.exports=t.default},4199:(e,t)=>{\"use strict\";function n(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=\"top-level\",p=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.indent=t||\"  \",this.indentTypes=[]}var t,p,M;return t=e,(p=[{key:\"getIndent\",value:function(){return this.indent.repeat(this.indentTypes.length)}},{key:\"increaseTopLevel\",value:function(){this.indentTypes.push(o)}},{key:\"increaseBlockLevel\",value:function(){this.indentTypes.push(\"block-level\")}},{key:\"decreaseTopLevel\",value:function(){this.indentTypes.length>0&&this.indentTypes[this.indentTypes.length-1]===o&&this.indentTypes.pop()}},{key:\"decreaseBlockLevel\",value:function(){for(;this.indentTypes.length>0&&this.indentTypes.pop()===o;);}},{key:\"resetIndentation\",value:function(){this.indentTypes=[]}}])&&n(t.prototype,p),M&&n(t,M),e}();t.default=p,e.exports=t.default},7326:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o,p=(o=n(4417))&&o.__esModule?o:{default:o};function M(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}var b=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.level=0}var t,n,o;return t=e,(n=[{key:\"beginIfPossible\",value:function(e,t){0===this.level&&this.isInlineBlock(e,t)?this.level=1:this.level>0?this.level++:this.level=0}},{key:\"end\",value:function(){this.level--}},{key:\"isActive\",value:function(){return this.level>0}},{key:\"isInlineBlock\",value:function(e,t){for(var n=0,o=0,M=t;M<e.length;M++){var b=e[M];if((n+=b.value.length)>50)return!1;if(b.type===p.default.OPEN_PAREN)o++;else if(b.type===p.default.CLOSE_PAREN&&0==--o)return!0;if(this.isForbiddenToken(b))return!1}return!1}},{key:\"isForbiddenToken\",value:function(e){var t=e.type,n=e.value;return t===p.default.RESERVED_TOP_LEVEL||t===p.default.RESERVED_NEWLINE||t===p.default.COMMENT||t===p.default.BLOCK_COMMENT||\";\"===n}}])&&M(t.prototype,n),o&&M(t,o),e}();t.default=b,e.exports=t.default},8329:(e,t)=>{\"use strict\";function n(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.params=t,this.index=0}var t,o,p;return t=e,(o=[{key:\"get\",value:function(e){var t=e.key,n=e.value;return this.params?t?this.params[t]:this.params[this.index++]:n}}])&&n(t.prototype,o),p&&n(t,p),e}();t.default=o,e.exports=t.default},1530:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var o,p=(o=n(4417))&&o.__esModule?o:{default:o};function M(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function b(e){return e.replace(/[\\$\\(-\\+\\.\\?\\[-\\^\\{-\\}]/g,\"\\\\$&\")}var c=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.WHITESPACE_REGEX=/^([\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]+)/,this.NUMBER_REGEX=/^((\\x2D[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*)?[0-9]+(\\.[0-9]+)?([Ee]\\x2D?[0-9]+(\\.[0-9]+)?)?|0x[0-9A-Fa-f]+|0b[01]+)\\b/,this.OPERATOR_REGEX=/^(!=|<<|>>|<>|==|<=|>=|!<|!>|\\|\\|\\/|\\|\\/|\\|\\||::|\\x2D>>|\\x2D>|~~\\*|~~|!~~\\*|!~~|~\\*|!~\\*|!~|@|:=|(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))/,this.BLOCK_COMMENT_REGEX=/^(\\/\\*(?:(?![])[\\s\\S])*?(?:\\*\\/|$))/,this.LINE_COMMENT_REGEX=this.createLineCommentRegex(t.lineCommentTypes),this.RESERVED_TOP_LEVEL_REGEX=this.createReservedWordRegex(t.reservedTopLevelWords),this.RESERVED_TOP_LEVEL_NO_INDENT_REGEX=this.createReservedWordRegex(t.reservedTopLevelWordsNoIndent),this.RESERVED_NEWLINE_REGEX=this.createReservedWordRegex(t.reservedNewlineWords),this.RESERVED_PLAIN_REGEX=this.createReservedWordRegex(t.reservedWords),this.WORD_REGEX=this.createWordRegex(t.specialWordChars),this.STRING_REGEX=this.createStringRegex(t.stringTypes),this.OPEN_PAREN_REGEX=this.createParenRegex(t.openParens),this.CLOSE_PAREN_REGEX=this.createParenRegex(t.closeParens),this.INDEXED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(t.indexedPlaceholderTypes,\"[0-9]*\"),this.IDENT_NAMED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(t.namedPlaceholderTypes,\"[a-zA-Z0-9._$]+\"),this.STRING_NAMED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(t.namedPlaceholderTypes,this.createStringPattern(t.stringTypes))}var t,n,o;return t=e,n=[{key:\"createLineCommentRegex\",value:function(e){return new RegExp(\"^((?:\".concat(e.map((function(e){return b(e)})).join(\"|\"),\").*?(?:\\r\\n|\\r|\\n|$))\"),\"u\")}},{key:\"createReservedWordRegex\",value:function(e){if(0===e.length)return new RegExp(\"^\\b$\",\"u\");var t=(e=e.sort((function(e,t){return t.length-e.length||e.localeCompare(t)}))).join(\"|\").replace(/ /g,\"\\\\s+\");return new RegExp(\"^(\".concat(t,\")\\\\b\"),\"iu\")}},{key:\"createWordRegex\",value:function(){return new RegExp(\"^([\\\\p{Alphabetic}\\\\p{Mark}\\\\p{Decimal_Number}\\\\p{Connector_Punctuation}\\\\p{Join_Control}\".concat((arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).join(\"\"),\"]+)\"),\"u\")}},{key:\"createStringRegex\",value:function(e){return new RegExp(\"^(\"+this.createStringPattern(e)+\")\",\"u\")}},{key:\"createStringPattern\",value:function(e){var t={\"``\":\"((`[^`]*($|`))+)\",\"{}\":\"((\\\\{[^\\\\}]*($|\\\\}))+)\",\"[]\":\"((\\\\[[^\\\\]]*($|\\\\]))(\\\\][^\\\\]]*($|\\\\]))*)\",'\"\"':'((\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*(\"|$))+)',\"''\":\"(('[^'\\\\\\\\]*(?:\\\\\\\\.[^'\\\\\\\\]*)*('|$))+)\",\"N''\":\"((N'[^N'\\\\\\\\]*(?:\\\\\\\\.[^N'\\\\\\\\]*)*('|$))+)\"};return e.map((function(e){return t[e]})).join(\"|\")}},{key:\"createParenRegex\",value:function(e){var t=this;return new RegExp(\"^(\"+e.map((function(e){return t.escapeParen(e)})).join(\"|\")+\")\",\"iu\")}},{key:\"escapeParen\",value:function(e){return 1===e.length?b(e):\"\\\\b\"+e+\"\\\\b\"}},{key:\"createPlaceholderRegex\",value:function(e,t){if(n=e,!Array.isArray(n)||0===n.length)return!1;var n,o=e.map(b).join(\"|\");return new RegExp(\"^((?:\".concat(o,\")(?:\").concat(t,\"))\"),\"u\")}},{key:\"tokenize\",value:function(e){for(var t,n=[];e.length;)t=this.getNextToken(e,t),e=e.substring(t.value.length),n.push(t);return n}},{key:\"getNextToken\",value:function(e,t){return this.getWhitespaceToken(e)||this.getCommentToken(e)||this.getStringToken(e)||this.getOpenParenToken(e)||this.getCloseParenToken(e)||this.getPlaceholderToken(e)||this.getNumberToken(e)||this.getReservedWordToken(e,t)||this.getWordToken(e)||this.getOperatorToken(e)}},{key:\"getWhitespaceToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.WHITESPACE,regex:this.WHITESPACE_REGEX})}},{key:\"getCommentToken\",value:function(e){return this.getLineCommentToken(e)||this.getBlockCommentToken(e)}},{key:\"getLineCommentToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.LINE_COMMENT,regex:this.LINE_COMMENT_REGEX})}},{key:\"getBlockCommentToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.BLOCK_COMMENT,regex:this.BLOCK_COMMENT_REGEX})}},{key:\"getStringToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.STRING,regex:this.STRING_REGEX})}},{key:\"getOpenParenToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.OPEN_PAREN,regex:this.OPEN_PAREN_REGEX})}},{key:\"getCloseParenToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.CLOSE_PAREN,regex:this.CLOSE_PAREN_REGEX})}},{key:\"getPlaceholderToken\",value:function(e){return this.getIdentNamedPlaceholderToken(e)||this.getStringNamedPlaceholderToken(e)||this.getIndexedPlaceholderToken(e)}},{key:\"getIdentNamedPlaceholderToken\",value:function(e){return this.getPlaceholderTokenWithKey({input:e,regex:this.IDENT_NAMED_PLACEHOLDER_REGEX,parseKey:function(e){return e.slice(1)}})}},{key:\"getStringNamedPlaceholderToken\",value:function(e){var t=this;return this.getPlaceholderTokenWithKey({input:e,regex:this.STRING_NAMED_PLACEHOLDER_REGEX,parseKey:function(e){return t.getEscapedPlaceholderKey({key:e.slice(2,-1),quoteChar:e.slice(-1)})}})}},{key:\"getIndexedPlaceholderToken\",value:function(e){return this.getPlaceholderTokenWithKey({input:e,regex:this.INDEXED_PLACEHOLDER_REGEX,parseKey:function(e){return e.slice(1)}})}},{key:\"getPlaceholderTokenWithKey\",value:function(e){var t=e.input,n=e.regex,o=e.parseKey,M=this.getTokenOnFirstMatch({input:t,regex:n,type:p.default.PLACEHOLDER});return M&&(M.key=o(M.value)),M}},{key:\"getEscapedPlaceholderKey\",value:function(e){var t=e.key,n=e.quoteChar;return t.replace(new RegExp(b(\"\\\\\"+n),\"gu\"),n)}},{key:\"getNumberToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.NUMBER,regex:this.NUMBER_REGEX})}},{key:\"getOperatorToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.OPERATOR,regex:this.OPERATOR_REGEX})}},{key:\"getReservedWordToken\",value:function(e,t){if(!t||!t.value||\".\"!==t.value)return this.getTopLevelReservedToken(e)||this.getNewlineReservedToken(e)||this.getTopLevelReservedTokenNoIndent(e)||this.getPlainReservedToken(e)}},{key:\"getTopLevelReservedToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.RESERVED_TOP_LEVEL,regex:this.RESERVED_TOP_LEVEL_REGEX})}},{key:\"getNewlineReservedToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.RESERVED_NEWLINE,regex:this.RESERVED_NEWLINE_REGEX})}},{key:\"getTopLevelReservedTokenNoIndent\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.RESERVED_TOP_LEVEL_NO_INDENT,regex:this.RESERVED_TOP_LEVEL_NO_INDENT_REGEX})}},{key:\"getPlainReservedToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.RESERVED,regex:this.RESERVED_PLAIN_REGEX})}},{key:\"getWordToken\",value:function(e){return this.getTokenOnFirstMatch({input:e,type:p.default.WORD,regex:this.WORD_REGEX})}},{key:\"getTokenOnFirstMatch\",value:function(e){var t=e.input,n=e.type,o=e.regex,p=t.match(o);return p?{type:n,value:p[1]}:void 0}}],n&&M(t.prototype,n),o&&M(t,o),e}();t.default=c,e.exports=t.default},4417:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;t.default={WHITESPACE:\"whitespace\",WORD:\"word\",STRING:\"string\",RESERVED:\"reserved\",RESERVED_TOP_LEVEL:\"reserved-top-level\",RESERVED_TOP_LEVEL_NO_INDENT:\"reserved-top-level-no-indent\",RESERVED_NEWLINE:\"reserved-newline\",OPERATOR:\"operator\",OPEN_PAREN:\"open-paren\",CLOSE_PAREN:\"close-paren\",LINE_COMMENT:\"line-comment\",BLOCK_COMMENT:\"block-comment\",NUMBER:\"number\",PLACEHOLDER:\"placeholder\"},e.exports=t.default},10:(e,t,n)=>{\"use strict\";function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var p=b(n(7107)),M=b(n(1530));function b(e){return e&&e.__esModule?e:{default:e}}function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}function z(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,p=r(e);if(t){var M=r(this).constructor;n=Reflect.construct(p,arguments,M)}else n=p.apply(this,arguments);return function(e,t){if(t&&(\"object\"===o(t)||\"function\"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(this,n)}}function r(e){return r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},r(e)}var a,i,O,s=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(n,e);var t=z(n);function n(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,n),t.apply(this,arguments)}return n}(p.default);t.default=s,a=s,i=\"tokenizer\",O=new M.default({reservedWords:[\"ABS\",\"ACTIVATE\",\"ALIAS\",\"ALL\",\"ALLOCATE\",\"ALLOW\",\"ALTER\",\"ANY\",\"ARE\",\"ARRAY\",\"AS\",\"ASC\",\"ASENSITIVE\",\"ASSOCIATE\",\"ASUTIME\",\"ASYMMETRIC\",\"AT\",\"ATOMIC\",\"ATTRIBUTES\",\"AUDIT\",\"AUTHORIZATION\",\"AUX\",\"AUXILIARY\",\"AVG\",\"BEFORE\",\"BEGIN\",\"BETWEEN\",\"BIGINT\",\"BINARY\",\"BLOB\",\"BOOLEAN\",\"BOTH\",\"BUFFERPOOL\",\"BY\",\"CACHE\",\"CALL\",\"CALLED\",\"CAPTURE\",\"CARDINALITY\",\"CASCADED\",\"CASE\",\"CAST\",\"CCSID\",\"CEIL\",\"CEILING\",\"CHAR\",\"CHARACTER\",\"CHARACTER_LENGTH\",\"CHAR_LENGTH\",\"CHECK\",\"CLOB\",\"CLONE\",\"CLOSE\",\"CLUSTER\",\"COALESCE\",\"COLLATE\",\"COLLECT\",\"COLLECTION\",\"COLLID\",\"COLUMN\",\"COMMENT\",\"COMMIT\",\"CONCAT\",\"CONDITION\",\"CONNECT\",\"CONNECTION\",\"CONSTRAINT\",\"CONTAINS\",\"CONTINUE\",\"CONVERT\",\"CORR\",\"CORRESPONDING\",\"COUNT\",\"COUNT_BIG\",\"COVAR_POP\",\"COVAR_SAMP\",\"CREATE\",\"CROSS\",\"CUBE\",\"CUME_DIST\",\"CURRENT\",\"CURRENT_DATE\",\"CURRENT_DEFAULT_TRANSFORM_GROUP\",\"CURRENT_LC_CTYPE\",\"CURRENT_PATH\",\"CURRENT_ROLE\",\"CURRENT_SCHEMA\",\"CURRENT_SERVER\",\"CURRENT_TIME\",\"CURRENT_TIMESTAMP\",\"CURRENT_TIMEZONE\",\"CURRENT_TRANSFORM_GROUP_FOR_TYPE\",\"CURRENT_USER\",\"CURSOR\",\"CYCLE\",\"DATA\",\"DATABASE\",\"DATAPARTITIONNAME\",\"DATAPARTITIONNUM\",\"DATE\",\"DAY\",\"DAYS\",\"DB2GENERAL\",\"DB2GENRL\",\"DB2SQL\",\"DBINFO\",\"DBPARTITIONNAME\",\"DBPARTITIONNUM\",\"DEALLOCATE\",\"DEC\",\"DECIMAL\",\"DECLARE\",\"DEFAULT\",\"DEFAULTS\",\"DEFINITION\",\"DELETE\",\"DENSERANK\",\"DENSE_RANK\",\"DEREF\",\"DESCRIBE\",\"DESCRIPTOR\",\"DETERMINISTIC\",\"DIAGNOSTICS\",\"DISABLE\",\"DISALLOW\",\"DISCONNECT\",\"DISTINCT\",\"DO\",\"DOCUMENT\",\"DOUBLE\",\"DROP\",\"DSSIZE\",\"DYNAMIC\",\"EACH\",\"EDITPROC\",\"ELEMENT\",\"ELSE\",\"ELSEIF\",\"ENABLE\",\"ENCODING\",\"ENCRYPTION\",\"END\",\"END-EXEC\",\"ENDING\",\"ERASE\",\"ESCAPE\",\"EVERY\",\"EXCEPTION\",\"EXCLUDING\",\"EXCLUSIVE\",\"EXEC\",\"EXECUTE\",\"EXISTS\",\"EXIT\",\"EXP\",\"EXPLAIN\",\"EXTENDED\",\"EXTERNAL\",\"EXTRACT\",\"FALSE\",\"FENCED\",\"FETCH\",\"FIELDPROC\",\"FILE\",\"FILTER\",\"FINAL\",\"FIRST\",\"FLOAT\",\"FLOOR\",\"FOR\",\"FOREIGN\",\"FREE\",\"FULL\",\"FUNCTION\",\"FUSION\",\"GENERAL\",\"GENERATED\",\"GET\",\"GLOBAL\",\"GOTO\",\"GRANT\",\"GRAPHIC\",\"GROUP\",\"GROUPING\",\"HANDLER\",\"HASH\",\"HASHED_VALUE\",\"HINT\",\"HOLD\",\"HOUR\",\"HOURS\",\"IDENTITY\",\"IF\",\"IMMEDIATE\",\"IN\",\"INCLUDING\",\"INCLUSIVE\",\"INCREMENT\",\"INDEX\",\"INDICATOR\",\"INDICATORS\",\"INF\",\"INFINITY\",\"INHERIT\",\"INNER\",\"INOUT\",\"INSENSITIVE\",\"INSERT\",\"INT\",\"INTEGER\",\"INTEGRITY\",\"INTERSECTION\",\"INTERVAL\",\"INTO\",\"IS\",\"ISOBID\",\"ISOLATION\",\"ITERATE\",\"JAR\",\"JAVA\",\"KEEP\",\"KEY\",\"LABEL\",\"LANGUAGE\",\"LARGE\",\"LATERAL\",\"LC_CTYPE\",\"LEADING\",\"LEAVE\",\"LEFT\",\"LIKE\",\"LINKTYPE\",\"LN\",\"LOCAL\",\"LOCALDATE\",\"LOCALE\",\"LOCALTIME\",\"LOCALTIMESTAMP\",\"LOCATOR\",\"LOCATORS\",\"LOCK\",\"LOCKMAX\",\"LOCKSIZE\",\"LONG\",\"LOOP\",\"LOWER\",\"MAINTAINED\",\"MATCH\",\"MATERIALIZED\",\"MAX\",\"MAXVALUE\",\"MEMBER\",\"MERGE\",\"METHOD\",\"MICROSECOND\",\"MICROSECONDS\",\"MIN\",\"MINUTE\",\"MINUTES\",\"MINVALUE\",\"MOD\",\"MODE\",\"MODIFIES\",\"MODULE\",\"MONTH\",\"MONTHS\",\"MULTISET\",\"NAN\",\"NATIONAL\",\"NATURAL\",\"NCHAR\",\"NCLOB\",\"NEW\",\"NEW_TABLE\",\"NEXTVAL\",\"NO\",\"NOCACHE\",\"NOCYCLE\",\"NODENAME\",\"NODENUMBER\",\"NOMAXVALUE\",\"NOMINVALUE\",\"NONE\",\"NOORDER\",\"NORMALIZE\",\"NORMALIZED\",\"NOT\",\"NULL\",\"NULLIF\",\"NULLS\",\"NUMERIC\",\"NUMPARTS\",\"OBID\",\"OCTET_LENGTH\",\"OF\",\"OFFSET\",\"OLD\",\"OLD_TABLE\",\"ON\",\"ONLY\",\"OPEN\",\"OPTIMIZATION\",\"OPTIMIZE\",\"OPTION\",\"ORDER\",\"OUT\",\"OUTER\",\"OVER\",\"OVERLAPS\",\"OVERLAY\",\"OVERRIDING\",\"PACKAGE\",\"PADDED\",\"PAGESIZE\",\"PARAMETER\",\"PART\",\"PARTITION\",\"PARTITIONED\",\"PARTITIONING\",\"PARTITIONS\",\"PASSWORD\",\"PATH\",\"PERCENTILE_CONT\",\"PERCENTILE_DISC\",\"PERCENT_RANK\",\"PIECESIZE\",\"PLAN\",\"POSITION\",\"POWER\",\"PRECISION\",\"PREPARE\",\"PREVVAL\",\"PRIMARY\",\"PRIQTY\",\"PRIVILEGES\",\"PROCEDURE\",\"PROGRAM\",\"PSID\",\"PUBLIC\",\"QUERY\",\"QUERYNO\",\"RANGE\",\"RANK\",\"READ\",\"READS\",\"REAL\",\"RECOVERY\",\"RECURSIVE\",\"REF\",\"REFERENCES\",\"REFERENCING\",\"REFRESH\",\"REGR_AVGX\",\"REGR_AVGY\",\"REGR_COUNT\",\"REGR_INTERCEPT\",\"REGR_R2\",\"REGR_SLOPE\",\"REGR_SXX\",\"REGR_SXY\",\"REGR_SYY\",\"RELEASE\",\"RENAME\",\"REPEAT\",\"RESET\",\"RESIGNAL\",\"RESTART\",\"RESTRICT\",\"RESULT\",\"RESULT_SET_LOCATOR\",\"RETURN\",\"RETURNS\",\"REVOKE\",\"RIGHT\",\"ROLE\",\"ROLLBACK\",\"ROLLUP\",\"ROUND_CEILING\",\"ROUND_DOWN\",\"ROUND_FLOOR\",\"ROUND_HALF_DOWN\",\"ROUND_HALF_EVEN\",\"ROUND_HALF_UP\",\"ROUND_UP\",\"ROUTINE\",\"ROW\",\"ROWNUMBER\",\"ROWS\",\"ROWSET\",\"ROW_NUMBER\",\"RRN\",\"RUN\",\"SAVEPOINT\",\"SCHEMA\",\"SCOPE\",\"SCRATCHPAD\",\"SCROLL\",\"SEARCH\",\"SECOND\",\"SECONDS\",\"SECQTY\",\"SECURITY\",\"SENSITIVE\",\"SEQUENCE\",\"SESSION\",\"SESSION_USER\",\"SIGNAL\",\"SIMILAR\",\"SIMPLE\",\"SMALLINT\",\"SNAN\",\"SOME\",\"SOURCE\",\"SPECIFIC\",\"SPECIFICTYPE\",\"SQL\",\"SQLEXCEPTION\",\"SQLID\",\"SQLSTATE\",\"SQLWARNING\",\"SQRT\",\"STACKED\",\"STANDARD\",\"START\",\"STARTING\",\"STATEMENT\",\"STATIC\",\"STATMENT\",\"STAY\",\"STDDEV_POP\",\"STDDEV_SAMP\",\"STOGROUP\",\"STORES\",\"STYLE\",\"SUBMULTISET\",\"SUBSTRING\",\"SUM\",\"SUMMARY\",\"SYMMETRIC\",\"SYNONYM\",\"SYSFUN\",\"SYSIBM\",\"SYSPROC\",\"SYSTEM\",\"SYSTEM_USER\",\"TABLE\",\"TABLESAMPLE\",\"TABLESPACE\",\"THEN\",\"TIME\",\"TIMESTAMP\",\"TIMEZONE_HOUR\",\"TIMEZONE_MINUTE\",\"TO\",\"TRAILING\",\"TRANSACTION\",\"TRANSLATE\",\"TRANSLATION\",\"TREAT\",\"TRIGGER\",\"TRIM\",\"TRUE\",\"TRUNCATE\",\"TYPE\",\"UESCAPE\",\"UNDO\",\"UNIQUE\",\"UNKNOWN\",\"UNNEST\",\"UNTIL\",\"UPPER\",\"USAGE\",\"USER\",\"USING\",\"VALIDPROC\",\"VALUE\",\"VARCHAR\",\"VARIABLE\",\"VARIANT\",\"VARYING\",\"VAR_POP\",\"VAR_SAMP\",\"VCAT\",\"VERSION\",\"VIEW\",\"VOLATILE\",\"VOLUMES\",\"WHEN\",\"WHENEVER\",\"WHILE\",\"WIDTH_BUCKET\",\"WINDOW\",\"WITH\",\"WITHIN\",\"WITHOUT\",\"WLM\",\"WRITE\",\"XMLELEMENT\",\"XMLEXISTS\",\"XMLNAMESPACES\",\"YEAR\",\"YEARS\"],reservedTopLevelWords:[\"ADD\",\"AFTER\",\"ALTER COLUMN\",\"ALTER TABLE\",\"DELETE FROM\",\"EXCEPT\",\"FETCH FIRST\",\"FROM\",\"GROUP BY\",\"GO\",\"HAVING\",\"INSERT INTO\",\"INTERSECT\",\"LIMIT\",\"ORDER BY\",\"SELECT\",\"SET CURRENT SCHEMA\",\"SET SCHEMA\",\"SET\",\"UPDATE\",\"VALUES\",\"WHERE\"],reservedNewlineWords:[\"AND\",\"CROSS JOIN\",\"INNER JOIN\",\"JOIN\",\"LEFT JOIN\",\"LEFT OUTER JOIN\",\"OR\",\"OUTER JOIN\",\"RIGHT JOIN\",\"RIGHT OUTER JOIN\"],reservedTopLevelWordsNoIndent:[\"INTERSECT\",\"INTERSECT ALL\",\"MINUS\",\"UNION\",\"UNION ALL\"],stringTypes:['\"\"',\"''\",\"``\",\"[]\"],openParens:[\"(\"],closeParens:[\")\"],indexedPlaceholderTypes:[\"?\"],namedPlaceholderTypes:[\":\"],lineCommentTypes:[\"--\"],specialWordChars:[\"#\",\"@\"]}),i in a?Object.defineProperty(a,i,{value:O,enumerable:!0,configurable:!0,writable:!0}):a[i]=O,e.exports=t.default},4453:(e,t,n)=>{\"use strict\";function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var p=b(n(7107)),M=b(n(1530));function b(e){return e&&e.__esModule?e:{default:e}}function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}function z(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,p=r(e);if(t){var M=r(this).constructor;n=Reflect.construct(p,arguments,M)}else n=p.apply(this,arguments);return function(e,t){if(t&&(\"object\"===o(t)||\"function\"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(this,n)}}function r(e){return r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},r(e)}var a,i,O,s=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(n,e);var t=z(n);function n(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,n),t.apply(this,arguments)}return n}(p.default);t.default=s,a=s,i=\"tokenizer\",O=new M.default({reservedWords:[\"ALL\",\"ALTER\",\"ANALYZE\",\"AND\",\"ANY\",\"ARRAY\",\"AS\",\"ASC\",\"BEGIN\",\"BETWEEN\",\"BINARY\",\"BOOLEAN\",\"BREAK\",\"BUCKET\",\"BUILD\",\"BY\",\"CALL\",\"CASE\",\"CAST\",\"CLUSTER\",\"COLLATE\",\"COLLECTION\",\"COMMIT\",\"CONNECT\",\"CONTINUE\",\"CORRELATE\",\"COVER\",\"CREATE\",\"DATABASE\",\"DATASET\",\"DATASTORE\",\"DECLARE\",\"DECREMENT\",\"DELETE\",\"DERIVED\",\"DESC\",\"DESCRIBE\",\"DISTINCT\",\"DO\",\"DROP\",\"EACH\",\"ELEMENT\",\"ELSE\",\"END\",\"EVERY\",\"EXCEPT\",\"EXCLUDE\",\"EXECUTE\",\"EXISTS\",\"EXPLAIN\",\"FALSE\",\"FETCH\",\"FIRST\",\"FLATTEN\",\"FOR\",\"FORCE\",\"FROM\",\"FUNCTION\",\"GRANT\",\"GROUP\",\"GSI\",\"HAVING\",\"IF\",\"IGNORE\",\"ILIKE\",\"IN\",\"INCLUDE\",\"INCREMENT\",\"INDEX\",\"INFER\",\"INLINE\",\"INNER\",\"INSERT\",\"INTERSECT\",\"INTO\",\"IS\",\"JOIN\",\"KEY\",\"KEYS\",\"KEYSPACE\",\"KNOWN\",\"LAST\",\"LEFT\",\"LET\",\"LETTING\",\"LIKE\",\"LIMIT\",\"LSM\",\"MAP\",\"MAPPING\",\"MATCHED\",\"MATERIALIZED\",\"MERGE\",\"MISSING\",\"NAMESPACE\",\"NEST\",\"NOT\",\"NULL\",\"NUMBER\",\"OBJECT\",\"OFFSET\",\"ON\",\"OPTION\",\"OR\",\"ORDER\",\"OUTER\",\"OVER\",\"PARSE\",\"PARTITION\",\"PASSWORD\",\"PATH\",\"POOL\",\"PREPARE\",\"PRIMARY\",\"PRIVATE\",\"PRIVILEGE\",\"PROCEDURE\",\"PUBLIC\",\"RAW\",\"REALM\",\"REDUCE\",\"RENAME\",\"RETURN\",\"RETURNING\",\"REVOKE\",\"RIGHT\",\"ROLE\",\"ROLLBACK\",\"SATISFIES\",\"SCHEMA\",\"SELECT\",\"SELF\",\"SEMI\",\"SET\",\"SHOW\",\"SOME\",\"START\",\"STATISTICS\",\"STRING\",\"SYSTEM\",\"THEN\",\"TO\",\"TRANSACTION\",\"TRIGGER\",\"TRUE\",\"TRUNCATE\",\"UNDER\",\"UNION\",\"UNIQUE\",\"UNKNOWN\",\"UNNEST\",\"UNSET\",\"UPDATE\",\"UPSERT\",\"USE\",\"USER\",\"USING\",\"VALIDATE\",\"VALUE\",\"VALUED\",\"VALUES\",\"VIA\",\"VIEW\",\"WHEN\",\"WHERE\",\"WHILE\",\"WITH\",\"WITHIN\",\"WORK\",\"XOR\"],reservedTopLevelWords:[\"DELETE FROM\",\"EXCEPT ALL\",\"EXCEPT\",\"EXPLAIN DELETE FROM\",\"EXPLAIN UPDATE\",\"EXPLAIN UPSERT\",\"FROM\",\"GROUP BY\",\"HAVING\",\"INFER\",\"INSERT INTO\",\"LET\",\"LIMIT\",\"MERGE\",\"NEST\",\"ORDER BY\",\"PREPARE\",\"SELECT\",\"SET CURRENT SCHEMA\",\"SET SCHEMA\",\"SET\",\"UNNEST\",\"UPDATE\",\"UPSERT\",\"USE KEYS\",\"VALUES\",\"WHERE\"],reservedNewlineWords:[\"AND\",\"INNER JOIN\",\"JOIN\",\"LEFT JOIN\",\"LEFT OUTER JOIN\",\"OR\",\"OUTER JOIN\",\"RIGHT JOIN\",\"RIGHT OUTER JOIN\",\"XOR\"],reservedTopLevelWordsNoIndent:[\"INTERSECT\",\"INTERSECT ALL\",\"MINUS\",\"UNION\",\"UNION ALL\"],stringTypes:['\"\"',\"''\",\"``\"],openParens:[\"(\",\"[\",\"{\"],closeParens:[\")\",\"]\",\"}\"],namedPlaceholderTypes:[\"$\"],lineCommentTypes:[\"#\",\"--\"]}),i in a?Object.defineProperty(a,i,{value:O,enumerable:!0,configurable:!0,writable:!0}):a[i]=O,e.exports=t.default},1193:(e,t,n)=>{\"use strict\";function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var p=c(n(7107)),M=c(n(1530)),b=c(n(4417));function c(e){return e&&e.__esModule?e:{default:e}}function z(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}function a(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,p=i(e);if(t){var M=i(this).constructor;n=Reflect.construct(p,arguments,M)}else n=p.apply(this,arguments);return function(e,t){if(t&&(\"object\"===o(t)||\"function\"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(this,n)}}function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}var O,s,A,u=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}(M,e);var t,n,o,p=a(M);function M(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,M),p.apply(this,arguments)}return t=M,(n=[{key:\"tokenOverride\",value:function(e){if(e.type===b.default.RESERVED_TOP_LEVEL&&\"SET\"===e.value.toUpperCase()&&\"BY\"===this.previousReservedToken.value.toUpperCase())return e.type=b.default.RESERVED,e}}])&&z(t.prototype,n),o&&z(t,o),M}(p.default);t.default=u,O=u,s=\"tokenizer\",A=new M.default({reservedWords:[\"A\",\"ACCESSIBLE\",\"AGENT\",\"AGGREGATE\",\"ALL\",\"ALTER\",\"ANY\",\"ARRAY\",\"AS\",\"ASC\",\"AT\",\"ATTRIBUTE\",\"AUTHID\",\"AVG\",\"BETWEEN\",\"BFILE_BASE\",\"BINARY_INTEGER\",\"BINARY\",\"BLOB_BASE\",\"BLOCK\",\"BODY\",\"BOOLEAN\",\"BOTH\",\"BOUND\",\"BREADTH\",\"BULK\",\"BY\",\"BYTE\",\"C\",\"CALL\",\"CALLING\",\"CASCADE\",\"CASE\",\"CHAR_BASE\",\"CHAR\",\"CHARACTER\",\"CHARSET\",\"CHARSETFORM\",\"CHARSETID\",\"CHECK\",\"CLOB_BASE\",\"CLONE\",\"CLOSE\",\"CLUSTER\",\"CLUSTERS\",\"COALESCE\",\"COLAUTH\",\"COLLECT\",\"COLUMNS\",\"COMMENT\",\"COMMIT\",\"COMMITTED\",\"COMPILED\",\"COMPRESS\",\"CONNECT\",\"CONSTANT\",\"CONSTRUCTOR\",\"CONTEXT\",\"CONTINUE\",\"CONVERT\",\"COUNT\",\"CRASH\",\"CREATE\",\"CREDENTIAL\",\"CURRENT\",\"CURRVAL\",\"CURSOR\",\"CUSTOMDATUM\",\"DANGLING\",\"DATA\",\"DATE_BASE\",\"DATE\",\"DAY\",\"DECIMAL\",\"DEFAULT\",\"DEFINE\",\"DELETE\",\"DEPTH\",\"DESC\",\"DETERMINISTIC\",\"DIRECTORY\",\"DISTINCT\",\"DO\",\"DOUBLE\",\"DROP\",\"DURATION\",\"ELEMENT\",\"ELSIF\",\"EMPTY\",\"END\",\"ESCAPE\",\"EXCEPTIONS\",\"EXCLUSIVE\",\"EXECUTE\",\"EXISTS\",\"EXIT\",\"EXTENDS\",\"EXTERNAL\",\"EXTRACT\",\"FALSE\",\"FETCH\",\"FINAL\",\"FIRST\",\"FIXED\",\"FLOAT\",\"FOR\",\"FORALL\",\"FORCE\",\"FROM\",\"FUNCTION\",\"GENERAL\",\"GOTO\",\"GRANT\",\"GROUP\",\"HASH\",\"HEAP\",\"HIDDEN\",\"HOUR\",\"IDENTIFIED\",\"IF\",\"IMMEDIATE\",\"IN\",\"INCLUDING\",\"INDEX\",\"INDEXES\",\"INDICATOR\",\"INDICES\",\"INFINITE\",\"INSTANTIABLE\",\"INT\",\"INTEGER\",\"INTERFACE\",\"INTERVAL\",\"INTO\",\"INVALIDATE\",\"IS\",\"ISOLATION\",\"JAVA\",\"LANGUAGE\",\"LARGE\",\"LEADING\",\"LENGTH\",\"LEVEL\",\"LIBRARY\",\"LIKE\",\"LIKE2\",\"LIKE4\",\"LIKEC\",\"LIMITED\",\"LOCAL\",\"LOCK\",\"LONG\",\"MAP\",\"MAX\",\"MAXLEN\",\"MEMBER\",\"MERGE\",\"MIN\",\"MINUTE\",\"MLSLABEL\",\"MOD\",\"MODE\",\"MONTH\",\"MULTISET\",\"NAME\",\"NAN\",\"NATIONAL\",\"NATIVE\",\"NATURAL\",\"NATURALN\",\"NCHAR\",\"NEW\",\"NEXTVAL\",\"NOCOMPRESS\",\"NOCOPY\",\"NOT\",\"NOWAIT\",\"NULL\",\"NULLIF\",\"NUMBER_BASE\",\"NUMBER\",\"OBJECT\",\"OCICOLL\",\"OCIDATE\",\"OCIDATETIME\",\"OCIDURATION\",\"OCIINTERVAL\",\"OCILOBLOCATOR\",\"OCINUMBER\",\"OCIRAW\",\"OCIREF\",\"OCIREFCURSOR\",\"OCIROWID\",\"OCISTRING\",\"OCITYPE\",\"OF\",\"OLD\",\"ON\",\"ONLY\",\"OPAQUE\",\"OPEN\",\"OPERATOR\",\"OPTION\",\"ORACLE\",\"ORADATA\",\"ORDER\",\"ORGANIZATION\",\"ORLANY\",\"ORLVARY\",\"OTHERS\",\"OUT\",\"OVERLAPS\",\"OVERRIDING\",\"PACKAGE\",\"PARALLEL_ENABLE\",\"PARAMETER\",\"PARAMETERS\",\"PARENT\",\"PARTITION\",\"PASCAL\",\"PCTFREE\",\"PIPE\",\"PIPELINED\",\"PLS_INTEGER\",\"PLUGGABLE\",\"POSITIVE\",\"POSITIVEN\",\"PRAGMA\",\"PRECISION\",\"PRIOR\",\"PRIVATE\",\"PROCEDURE\",\"PUBLIC\",\"RAISE\",\"RANGE\",\"RAW\",\"READ\",\"REAL\",\"RECORD\",\"REF\",\"REFERENCE\",\"RELEASE\",\"RELIES_ON\",\"REM\",\"REMAINDER\",\"RENAME\",\"RESOURCE\",\"RESULT_CACHE\",\"RESULT\",\"RETURN\",\"RETURNING\",\"REVERSE\",\"REVOKE\",\"ROLLBACK\",\"ROW\",\"ROWID\",\"ROWNUM\",\"ROWTYPE\",\"SAMPLE\",\"SAVE\",\"SAVEPOINT\",\"SB1\",\"SB2\",\"SB4\",\"SEARCH\",\"SECOND\",\"SEGMENT\",\"SELF\",\"SEPARATE\",\"SEQUENCE\",\"SERIALIZABLE\",\"SHARE\",\"SHORT\",\"SIZE_T\",\"SIZE\",\"SMALLINT\",\"SOME\",\"SPACE\",\"SPARSE\",\"SQL\",\"SQLCODE\",\"SQLDATA\",\"SQLERRM\",\"SQLNAME\",\"SQLSTATE\",\"STANDARD\",\"START\",\"STATIC\",\"STDDEV\",\"STORED\",\"STRING\",\"STRUCT\",\"STYLE\",\"SUBMULTISET\",\"SUBPARTITION\",\"SUBSTITUTABLE\",\"SUBTYPE\",\"SUCCESSFUL\",\"SUM\",\"SYNONYM\",\"SYSDATE\",\"TABAUTH\",\"TABLE\",\"TDO\",\"THE\",\"THEN\",\"TIME\",\"TIMESTAMP\",\"TIMEZONE_ABBR\",\"TIMEZONE_HOUR\",\"TIMEZONE_MINUTE\",\"TIMEZONE_REGION\",\"TO\",\"TRAILING\",\"TRANSACTION\",\"TRANSACTIONAL\",\"TRIGGER\",\"TRUE\",\"TRUSTED\",\"TYPE\",\"UB1\",\"UB2\",\"UB4\",\"UID\",\"UNDER\",\"UNIQUE\",\"UNPLUG\",\"UNSIGNED\",\"UNTRUSTED\",\"USE\",\"USER\",\"USING\",\"VALIDATE\",\"VALIST\",\"VALUE\",\"VARCHAR\",\"VARCHAR2\",\"VARIABLE\",\"VARIANCE\",\"VARRAY\",\"VARYING\",\"VIEW\",\"VIEWS\",\"VOID\",\"WHENEVER\",\"WHILE\",\"WITH\",\"WORK\",\"WRAPPED\",\"WRITE\",\"YEAR\",\"ZONE\"],reservedTopLevelWords:[\"ADD\",\"ALTER COLUMN\",\"ALTER TABLE\",\"BEGIN\",\"CONNECT BY\",\"DECLARE\",\"DELETE FROM\",\"DELETE\",\"END\",\"EXCEPT\",\"EXCEPTION\",\"FETCH FIRST\",\"FROM\",\"GROUP BY\",\"HAVING\",\"INSERT INTO\",\"INSERT\",\"LIMIT\",\"LOOP\",\"MODIFY\",\"ORDER BY\",\"SELECT\",\"SET CURRENT SCHEMA\",\"SET SCHEMA\",\"SET\",\"START WITH\",\"UPDATE\",\"VALUES\",\"WHERE\"],reservedNewlineWords:[\"AND\",\"CROSS APPLY\",\"CROSS JOIN\",\"ELSE\",\"END\",\"INNER JOIN\",\"JOIN\",\"LEFT JOIN\",\"LEFT OUTER JOIN\",\"OR\",\"OUTER APPLY\",\"OUTER JOIN\",\"RIGHT JOIN\",\"RIGHT OUTER JOIN\",\"WHEN\",\"XOR\"],reservedTopLevelWordsNoIndent:[\"INTERSECT\",\"INTERSECT ALL\",\"MINUS\",\"UNION\",\"UNION ALL\"],stringTypes:['\"\"',\"N''\",\"''\",\"``\"],openParens:[\"(\",\"CASE\"],closeParens:[\")\",\"END\"],indexedPlaceholderTypes:[\"?\"],namedPlaceholderTypes:[\":\"],lineCommentTypes:[\"--\"],specialWordChars:[\"_\",\"$\",\"#\",\".\",\"@\"]}),s in O?Object.defineProperty(O,s,{value:A,enumerable:!0,configurable:!0,writable:!0}):O[s]=A,e.exports=t.default},1757:(e,t,n)=>{\"use strict\";function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var p=b(n(7107)),M=b(n(1530));function b(e){return e&&e.__esModule?e:{default:e}}function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}function z(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,p=r(e);if(t){var M=r(this).constructor;n=Reflect.construct(p,arguments,M)}else n=p.apply(this,arguments);return function(e,t){if(t&&(\"object\"===o(t)||\"function\"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(this,n)}}function r(e){return r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},r(e)}var a,i,O,s=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(n,e);var t=z(n);function n(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,n),t.apply(this,arguments)}return n}(p.default);t.default=s,a=s,i=\"tokenizer\",O=new M.default({reservedWords:[\"AES128\",\"AES256\",\"ALLOWOVERWRITE\",\"ANALYSE\",\"ARRAY\",\"AS\",\"ASC\",\"AUTHORIZATION\",\"BACKUP\",\"BINARY\",\"BLANKSASNULL\",\"BOTH\",\"BYTEDICT\",\"BZIP2\",\"CAST\",\"CHECK\",\"COLLATE\",\"COLUMN\",\"CONSTRAINT\",\"CREATE\",\"CREDENTIALS\",\"CURRENT_DATE\",\"CURRENT_TIME\",\"CURRENT_TIMESTAMP\",\"CURRENT_USER\",\"CURRENT_USER_ID\",\"DEFAULT\",\"DEFERRABLE\",\"DEFLATE\",\"DEFRAG\",\"DELTA\",\"DELTA32K\",\"DESC\",\"DISABLE\",\"DISTINCT\",\"DO\",\"ELSE\",\"EMPTYASNULL\",\"ENABLE\",\"ENCODE\",\"ENCRYPT\",\"ENCRYPTION\",\"END\",\"EXPLICIT\",\"FALSE\",\"FOR\",\"FOREIGN\",\"FREEZE\",\"FULL\",\"GLOBALDICT256\",\"GLOBALDICT64K\",\"GRANT\",\"GZIP\",\"IDENTITY\",\"IGNORE\",\"ILIKE\",\"INITIALLY\",\"INTO\",\"LEADING\",\"LOCALTIME\",\"LOCALTIMESTAMP\",\"LUN\",\"LUNS\",\"LZO\",\"LZOP\",\"MINUS\",\"MOSTLY13\",\"MOSTLY32\",\"MOSTLY8\",\"NATURAL\",\"NEW\",\"NULLS\",\"OFF\",\"OFFLINE\",\"OFFSET\",\"OLD\",\"ON\",\"ONLY\",\"OPEN\",\"ORDER\",\"OVERLAPS\",\"PARALLEL\",\"PARTITION\",\"PERCENT\",\"PERMISSIONS\",\"PLACING\",\"PRIMARY\",\"RAW\",\"READRATIO\",\"RECOVER\",\"REFERENCES\",\"REJECTLOG\",\"RESORT\",\"RESTORE\",\"SESSION_USER\",\"SIMILAR\",\"SYSDATE\",\"SYSTEM\",\"TABLE\",\"TAG\",\"TDES\",\"TEXT255\",\"TEXT32K\",\"THEN\",\"TIMESTAMP\",\"TO\",\"TOP\",\"TRAILING\",\"TRUE\",\"TRUNCATECOLUMNS\",\"UNIQUE\",\"USER\",\"USING\",\"VERBOSE\",\"WALLET\",\"WHEN\",\"WITH\",\"WITHOUT\",\"PREDICATE\",\"COLUMNS\",\"COMPROWS\",\"COMPRESSION\",\"COPY\",\"FORMAT\",\"DELIMITER\",\"FIXEDWIDTH\",\"AVRO\",\"JSON\",\"ENCRYPTED\",\"BZIP2\",\"GZIP\",\"LZOP\",\"PARQUET\",\"ORC\",\"ACCEPTANYDATE\",\"ACCEPTINVCHARS\",\"BLANKSASNULL\",\"DATEFORMAT\",\"EMPTYASNULL\",\"ENCODING\",\"ESCAPE\",\"EXPLICIT_IDS\",\"FILLRECORD\",\"IGNOREBLANKLINES\",\"IGNOREHEADER\",\"NULL AS\",\"REMOVEQUOTES\",\"ROUNDEC\",\"TIMEFORMAT\",\"TRIMBLANKS\",\"TRUNCATECOLUMNS\",\"COMPROWS\",\"COMPUPDATE\",\"MAXERROR\",\"NOLOAD\",\"STATUPDATE\",\"MANIFEST\",\"REGION\",\"IAM_ROLE\",\"MASTER_SYMMETRIC_KEY\",\"SSH\",\"ACCEPTANYDATE\",\"ACCEPTINVCHARS\",\"ACCESS_KEY_ID\",\"SECRET_ACCESS_KEY\",\"AVRO\",\"BLANKSASNULL\",\"BZIP2\",\"COMPROWS\",\"COMPUPDATE\",\"CREDENTIALS\",\"DATEFORMAT\",\"DELIMITER\",\"EMPTYASNULL\",\"ENCODING\",\"ENCRYPTED\",\"ESCAPE\",\"EXPLICIT_IDS\",\"FILLRECORD\",\"FIXEDWIDTH\",\"FORMAT\",\"IAM_ROLE\",\"GZIP\",\"IGNOREBLANKLINES\",\"IGNOREHEADER\",\"JSON\",\"LZOP\",\"MANIFEST\",\"MASTER_SYMMETRIC_KEY\",\"MAXERROR\",\"NOLOAD\",\"NULL AS\",\"READRATIO\",\"REGION\",\"REMOVEQUOTES\",\"ROUNDEC\",\"SSH\",\"STATUPDATE\",\"TIMEFORMAT\",\"SESSION_TOKEN\",\"TRIMBLANKS\",\"TRUNCATECOLUMNS\",\"EXTERNAL\",\"DATA CATALOG\",\"HIVE METASTORE\",\"CATALOG_ROLE\",\"VACUUM\",\"COPY\",\"UNLOAD\",\"EVEN\",\"ALL\"],reservedTopLevelWords:[\"ADD\",\"AFTER\",\"ALTER COLUMN\",\"ALTER TABLE\",\"DELETE FROM\",\"EXCEPT\",\"FROM\",\"GROUP BY\",\"HAVING\",\"INSERT INTO\",\"INSERT\",\"INTERSECT\",\"TOP\",\"LIMIT\",\"MODIFY\",\"ORDER BY\",\"SELECT\",\"SET CURRENT SCHEMA\",\"SET SCHEMA\",\"SET\",\"UNION ALL\",\"UNION\",\"UPDATE\",\"VALUES\",\"WHERE\",\"VACUUM\",\"COPY\",\"UNLOAD\",\"ANALYZE\",\"ANALYSE\",\"DISTKEY\",\"SORTKEY\",\"COMPOUND\",\"INTERLEAVED\",\"FORMAT\",\"DELIMITER\",\"FIXEDWIDTH\",\"AVRO\",\"JSON\",\"ENCRYPTED\",\"BZIP2\",\"GZIP\",\"LZOP\",\"PARQUET\",\"ORC\",\"ACCEPTANYDATE\",\"ACCEPTINVCHARS\",\"BLANKSASNULL\",\"DATEFORMAT\",\"EMPTYASNULL\",\"ENCODING\",\"ESCAPE\",\"EXPLICIT_IDS\",\"FILLRECORD\",\"IGNOREBLANKLINES\",\"IGNOREHEADER\",\"NULL AS\",\"REMOVEQUOTES\",\"ROUNDEC\",\"TIMEFORMAT\",\"TRIMBLANKS\",\"TRUNCATECOLUMNS\",\"COMPROWS\",\"COMPUPDATE\",\"MAXERROR\",\"NOLOAD\",\"STATUPDATE\",\"MANIFEST\",\"REGION\",\"IAM_ROLE\",\"MASTER_SYMMETRIC_KEY\",\"SSH\",\"ACCEPTANYDATE\",\"ACCEPTINVCHARS\",\"ACCESS_KEY_ID\",\"SECRET_ACCESS_KEY\",\"AVRO\",\"BLANKSASNULL\",\"BZIP2\",\"COMPROWS\",\"COMPUPDATE\",\"CREDENTIALS\",\"DATEFORMAT\",\"DELIMITER\",\"EMPTYASNULL\",\"ENCODING\",\"ENCRYPTED\",\"ESCAPE\",\"EXPLICIT_IDS\",\"FILLRECORD\",\"FIXEDWIDTH\",\"FORMAT\",\"IAM_ROLE\",\"GZIP\",\"IGNOREBLANKLINES\",\"IGNOREHEADER\",\"JSON\",\"LZOP\",\"MANIFEST\",\"MASTER_SYMMETRIC_KEY\",\"MAXERROR\",\"NOLOAD\",\"NULL AS\",\"READRATIO\",\"REGION\",\"REMOVEQUOTES\",\"ROUNDEC\",\"SSH\",\"STATUPDATE\",\"TIMEFORMAT\",\"SESSION_TOKEN\",\"TRIMBLANKS\",\"TRUNCATECOLUMNS\",\"EXTERNAL\",\"DATA CATALOG\",\"HIVE METASTORE\",\"CATALOG_ROLE\"],reservedNewlineWords:[\"AND\",\"CROSS JOIN\",\"ELSE\",\"INNER JOIN\",\"JOIN\",\"LEFT JOIN\",\"LEFT OUTER JOIN\",\"OR\",\"OUTER APPLY\",\"OUTER JOIN\",\"RIGHT JOIN\",\"RIGHT OUTER JOIN\",\"WHEN\",\"VACUUM\",\"COPY\",\"UNLOAD\",\"ANALYZE\",\"ANALYSE\",\"DISTKEY\",\"SORTKEY\",\"COMPOUND\",\"INTERLEAVED\"],reservedTopLevelWordsNoIndent:[],stringTypes:['\"\"',\"''\",\"``\"],openParens:[\"(\"],closeParens:[\")\"],indexedPlaceholderTypes:[\"?\"],namedPlaceholderTypes:[\"@\",\"#\",\"$\"],lineCommentTypes:[\"--\"]}),i in a?Object.defineProperty(a,i,{value:O,enumerable:!0,configurable:!0,writable:!0}):a[i]=O,e.exports=t.default},5089:(e,t,n)=>{\"use strict\";function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var p=c(n(7107)),M=c(n(1530)),b=c(n(4417));function c(e){return e&&e.__esModule?e:{default:e}}function z(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function r(e,t){return r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}function a(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,p=i(e);if(t){var M=i(this).constructor;n=Reflect.construct(p,arguments,M)}else n=p.apply(this,arguments);return function(e,t){if(t&&(\"object\"===o(t)||\"function\"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(this,n)}}function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}var O,s,A,u=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}(M,e);var t,n,o,p=a(M);function M(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,M),p.apply(this,arguments)}return t=M,(n=[{key:\"tokenOverride\",value:function(e){if(e.type===b.default.RESERVED_TOP_LEVEL&&\"WINDOW\"===e.value.toUpperCase())for(var t=this.tokenLookAhead(),n=0;n<t.length;n++)return t[n].type===b.default.OPEN_PAREN&&(e.type=b.default.RESERVED),e;if(e.type===b.default.CLOSE_PAREN&&\"END\"===e.value.toUpperCase())for(var o=this.tokenLookBack(),p=0;p<o.length;p++){var M=o[p];return M.type===b.default.OPERATOR&&\".\"===M.value&&(e.type=b.default.WORD),e}}}])&&z(t.prototype,n),o&&z(t,o),M}(p.default);t.default=u,O=u,s=\"tokenizer\",A=new M.default({reservedWords:[\"ALL\",\"ALTER\",\"ANALYSE\",\"ANALYZE\",\"ARRAY_ZIP\",\"ARRAY\",\"AS\",\"ASC\",\"AVG\",\"BETWEEN\",\"CASCADE\",\"CASE\",\"CAST\",\"COALESCE\",\"COLLECT_LIST\",\"COLLECT_SET\",\"COLUMN\",\"COLUMNS\",\"COMMENT\",\"CONSTRAINT\",\"CONTAINS\",\"CONVERT\",\"COUNT\",\"CUME_DIST\",\"CURRENT ROW\",\"CURRENT_DATE\",\"CURRENT_TIMESTAMP\",\"DATABASE\",\"DATABASES\",\"DATE_ADD\",\"DATE_SUB\",\"DATE_TRUNC\",\"DAY_HOUR\",\"DAY_MINUTE\",\"DAY_SECOND\",\"DAY\",\"DAYS\",\"DECODE\",\"DEFAULT\",\"DELETE\",\"DENSE_RANK\",\"DESC\",\"DESCRIBE\",\"DISTINCT\",\"DISTINCTROW\",\"DIV\",\"DROP\",\"ELSE\",\"ENCODE\",\"END\",\"EXISTS\",\"EXPLAIN\",\"EXPLODE_OUTER\",\"EXPLODE\",\"FILTER\",\"FIRST_VALUE\",\"FIRST\",\"FIXED\",\"FLATTEN\",\"FOLLOWING\",\"FROM_UNIXTIME\",\"FULL\",\"GREATEST\",\"GROUP_CONCAT\",\"HOUR_MINUTE\",\"HOUR_SECOND\",\"HOUR\",\"HOURS\",\"IF\",\"IFNULL\",\"IN\",\"INSERT\",\"INTERVAL\",\"INTO\",\"IS\",\"LAG\",\"LAST_VALUE\",\"LAST\",\"LEAD\",\"LEADING\",\"LEAST\",\"LEVEL\",\"LIKE\",\"MAX\",\"MERGE\",\"MIN\",\"MINUTE_SECOND\",\"MINUTE\",\"MONTH\",\"NATURAL\",\"NOT\",\"NOW()\",\"NTILE\",\"NULL\",\"NULLIF\",\"OFFSET\",\"ON DELETE\",\"ON UPDATE\",\"ON\",\"ONLY\",\"OPTIMIZE\",\"OVER\",\"PERCENT_RANK\",\"PRECEDING\",\"RANGE\",\"RANK\",\"REGEXP\",\"RENAME\",\"RLIKE\",\"ROW\",\"ROWS\",\"SECOND\",\"SEPARATOR\",\"SEQUENCE\",\"SIZE\",\"STRING\",\"STRUCT\",\"SUM\",\"TABLE\",\"TABLES\",\"TEMPORARY\",\"THEN\",\"TO_DATE\",\"TO_JSON\",\"TO\",\"TRAILING\",\"TRANSFORM\",\"TRUE\",\"TRUNCATE\",\"TYPE\",\"TYPES\",\"UNBOUNDED\",\"UNIQUE\",\"UNIX_TIMESTAMP\",\"UNLOCK\",\"UNSIGNED\",\"USING\",\"VARIABLES\",\"VIEW\",\"WHEN\",\"WITH\",\"YEAR_MONTH\"],reservedTopLevelWords:[\"ADD\",\"AFTER\",\"ALTER COLUMN\",\"ALTER DATABASE\",\"ALTER SCHEMA\",\"ALTER TABLE\",\"CLUSTER BY\",\"CLUSTERED BY\",\"DELETE FROM\",\"DISTRIBUTE BY\",\"FROM\",\"GROUP BY\",\"HAVING\",\"INSERT INTO\",\"INSERT\",\"LIMIT\",\"OPTIONS\",\"ORDER BY\",\"PARTITION BY\",\"PARTITIONED BY\",\"RANGE\",\"ROWS\",\"SELECT\",\"SET CURRENT SCHEMA\",\"SET SCHEMA\",\"SET\",\"TBLPROPERTIES\",\"UPDATE\",\"USING\",\"VALUES\",\"WHERE\",\"WINDOW\"],reservedNewlineWords:[\"AND\",\"ANTI JOIN\",\"CREATE OR\",\"CREATE\",\"CROSS JOIN\",\"ELSE\",\"FULL OUTER JOIN\",\"INNER JOIN\",\"JOIN\",\"LATERAL VIEW\",\"LEFT ANTI JOIN\",\"LEFT JOIN\",\"LEFT OUTER JOIN\",\"LEFT SEMI JOIN\",\"NATURAL ANTI JOIN\",\"NATURAL FULL OUTER JOIN\",\"NATURAL INNER JOIN\",\"NATURAL JOIN\",\"NATURAL LEFT ANTI JOIN\",\"NATURAL LEFT OUTER JOIN\",\"NATURAL LEFT SEMI JOIN\",\"NATURAL OUTER JOIN\",\"NATURAL RIGHT OUTER JOIN\",\"NATURAL RIGHT SEMI JOIN\",\"NATURAL SEMI JOIN\",\"OR\",\"OUTER APPLY\",\"OUTER JOIN\",\"RIGHT JOIN\",\"RIGHT OUTER JOIN\",\"RIGHT SEMI JOIN\",\"SEMI JOIN\",\"WHEN\",\"XOR\"],reservedTopLevelWordsNoIndent:[\"EXCEPT ALL\",\"EXCEPT\",\"INTERSECT ALL\",\"INTERSECT\",\"UNION ALL\",\"UNION\"],stringTypes:['\"\"',\"''\",\"``\",\"{}\"],openParens:[\"(\",\"CASE\"],closeParens:[\")\",\"END\"],indexedPlaceholderTypes:[\"?\"],namedPlaceholderTypes:[\"$\"],lineCommentTypes:[\"--\"]}),s in O?Object.defineProperty(O,s,{value:A,enumerable:!0,configurable:!0,writable:!0}):O[s]=A,e.exports=t.default},3963:(e,t,n)=>{\"use strict\";function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var p=b(n(7107)),M=b(n(1530));function b(e){return e&&e.__esModule?e:{default:e}}function c(e,t){return c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},c(e,t)}function z(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,p=r(e);if(t){var M=r(this).constructor;n=Reflect.construct(p,arguments,M)}else n=p.apply(this,arguments);return function(e,t){if(t&&(\"object\"===o(t)||\"function\"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(this,n)}}function r(e){return r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},r(e)}var a,i,O,s=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(n,e);var t=z(n);function n(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,n),t.apply(this,arguments)}return n}(p.default);t.default=s,a=s,i=\"tokenizer\",O=new M.default({reservedWords:[\"ACCESSIBLE\",\"ACTION\",\"AGAINST\",\"AGGREGATE\",\"ALGORITHM\",\"ALL\",\"ALTER\",\"ANALYSE\",\"ANALYZE\",\"AS\",\"ASC\",\"AUTOCOMMIT\",\"AUTO_INCREMENT\",\"BACKUP\",\"BEGIN\",\"BETWEEN\",\"BINLOG\",\"BOTH\",\"CASCADE\",\"CHANGE\",\"CHANGED\",\"CHARACTER SET\",\"CHARSET\",\"CHECK\",\"CHECKSUM\",\"COLLATE\",\"COLLATION\",\"COLUMN\",\"COLUMNS\",\"COMMENT\",\"COMMIT\",\"COMMITTED\",\"COMPRESSED\",\"CONCURRENT\",\"CONSTRAINT\",\"CONTAINS\",\"CONVERT\",\"CREATE\",\"CROSS\",\"CURRENT_TIMESTAMP\",\"DATABASE\",\"DATABASES\",\"DAY\",\"DAY_HOUR\",\"DAY_MINUTE\",\"DAY_SECOND\",\"DEFAULT\",\"DEFINER\",\"DELAYED\",\"DELETE\",\"DESC\",\"DESCRIBE\",\"DETERMINISTIC\",\"DISTINCT\",\"DISTINCTROW\",\"DIV\",\"DO\",\"DROP\",\"DUMPFILE\",\"DUPLICATE\",\"DYNAMIC\",\"ELSE\",\"ENCLOSED\",\"ENGINE\",\"ENGINES\",\"ENGINE_TYPE\",\"ESCAPE\",\"ESCAPED\",\"EVENTS\",\"EXEC\",\"EXECUTE\",\"EXISTS\",\"EXPLAIN\",\"EXTENDED\",\"FAST\",\"FETCH\",\"FIELDS\",\"FILE\",\"FIRST\",\"FIXED\",\"FLUSH\",\"FOR\",\"FORCE\",\"FOREIGN\",\"FULL\",\"FULLTEXT\",\"FUNCTION\",\"GLOBAL\",\"GRANT\",\"GRANTS\",\"GROUP_CONCAT\",\"HEAP\",\"HIGH_PRIORITY\",\"HOSTS\",\"HOUR\",\"HOUR_MINUTE\",\"HOUR_SECOND\",\"IDENTIFIED\",\"IF\",\"IFNULL\",\"IGNORE\",\"IN\",\"INDEX\",\"INDEXES\",\"INFILE\",\"INSERT\",\"INSERT_ID\",\"INSERT_METHOD\",\"INTERVAL\",\"INTO\",\"INVOKER\",\"IS\",\"ISOLATION\",\"KEY\",\"KEYS\",\"KILL\",\"LAST_INSERT_ID\",\"LEADING\",\"LEVEL\",\"LIKE\",\"LINEAR\",\"LINES\",\"LOAD\",\"LOCAL\",\"LOCK\",\"LOCKS\",\"LOGS\",\"LOW_PRIORITY\",\"MARIA\",\"MASTER\",\"MASTER_CONNECT_RETRY\",\"MASTER_HOST\",\"MASTER_LOG_FILE\",\"MATCH\",\"MAX_CONNECTIONS_PER_HOUR\",\"MAX_QUERIES_PER_HOUR\",\"MAX_ROWS\",\"MAX_UPDATES_PER_HOUR\",\"MAX_USER_CONNECTIONS\",\"MEDIUM\",\"MERGE\",\"MINUTE\",\"MINUTE_SECOND\",\"MIN_ROWS\",\"MODE\",\"MODIFY\",\"MONTH\",\"MRG_MYISAM\",\"MYISAM\",\"NAMES\",\"NATURAL\",\"NOT\",\"NOW()\",\"NULL\",\"OFFSET\",\"ON DELETE\",\"ON UPDATE\",\"ON\",\"ONLY\",\"OPEN\",\"OPTIMIZE\",\"OPTION\",\"OPTIONALLY\",\"OUTFILE\",\"PACK_KEYS\",\"PAGE\",\"PARTIAL\",\"PARTITION\",\"PARTITIONS\",\"PASSWORD\",\"PRIMARY\",\"PRIVILEGES\",\"PROCEDURE\",\"PROCESS\",\"PROCESSLIST\",\"PURGE\",\"QUICK\",\"RAID0\",\"RAID_CHUNKS\",\"RAID_CHUNKSIZE\",\"RAID_TYPE\",\"RANGE\",\"READ\",\"READ_ONLY\",\"READ_WRITE\",\"REFERENCES\",\"REGEXP\",\"RELOAD\",\"RENAME\",\"REPAIR\",\"REPEATABLE\",\"REPLACE\",\"REPLICATION\",\"RESET\",\"RESTORE\",\"RESTRICT\",\"RETURN\",\"RETURNS\",\"REVOKE\",\"RLIKE\",\"ROLLBACK\",\"ROW\",\"ROWS\",\"ROW_FORMAT\",\"SECOND\",\"SECURITY\",\"SEPARATOR\",\"SERIALIZABLE\",\"SESSION\",\"SHARE\",\"SHOW\",\"SHUTDOWN\",\"SLAVE\",\"SONAME\",\"SOUNDS\",\"SQL\",\"SQL_AUTO_IS_NULL\",\"SQL_BIG_RESULT\",\"SQL_BIG_SELECTS\",\"SQL_BIG_TABLES\",\"SQL_BUFFER_RESULT\",\"SQL_CACHE\",\"SQL_CALC_FOUND_ROWS\",\"SQL_LOG_BIN\",\"SQL_LOG_OFF\",\"SQL_LOG_UPDATE\",\"SQL_LOW_PRIORITY_UPDATES\",\"SQL_MAX_JOIN_SIZE\",\"SQL_NO_CACHE\",\"SQL_QUOTE_SHOW_CREATE\",\"SQL_SAFE_UPDATES\",\"SQL_SELECT_LIMIT\",\"SQL_SLAVE_SKIP_COUNTER\",\"SQL_SMALL_RESULT\",\"SQL_WARNINGS\",\"START\",\"STARTING\",\"STATUS\",\"STOP\",\"STORAGE\",\"STRAIGHT_JOIN\",\"STRING\",\"STRIPED\",\"SUPER\",\"TABLE\",\"TABLES\",\"TEMPORARY\",\"TERMINATED\",\"THEN\",\"TO\",\"TRAILING\",\"TRANSACTIONAL\",\"TRUE\",\"TRUNCATE\",\"TYPE\",\"TYPES\",\"UNCOMMITTED\",\"UNIQUE\",\"UNLOCK\",\"UNSIGNED\",\"USAGE\",\"USE\",\"USING\",\"VARIABLES\",\"VIEW\",\"WITH\",\"WORK\",\"WRITE\",\"YEAR_MONTH\"],reservedTopLevelWords:[\"ADD\",\"AFTER\",\"ALTER COLUMN\",\"ALTER TABLE\",\"CASE\",\"DELETE FROM\",\"END\",\"EXCEPT\",\"FETCH FIRST\",\"FROM\",\"GROUP BY\",\"GO\",\"HAVING\",\"INSERT INTO\",\"INSERT\",\"LIMIT\",\"MODIFY\",\"ORDER BY\",\"SELECT\",\"SET CURRENT SCHEMA\",\"SET SCHEMA\",\"SET\",\"UPDATE\",\"VALUES\",\"WHERE\"],reservedNewlineWords:[\"AND\",\"CROSS APPLY\",\"CROSS JOIN\",\"ELSE\",\"INNER JOIN\",\"JOIN\",\"LEFT JOIN\",\"LEFT OUTER JOIN\",\"OR\",\"OUTER APPLY\",\"OUTER JOIN\",\"RIGHT JOIN\",\"RIGHT OUTER JOIN\",\"WHEN\",\"XOR\"],reservedTopLevelWordsNoIndent:[\"INTERSECT\",\"INTERSECT ALL\",\"MINUS\",\"UNION\",\"UNION ALL\"],stringTypes:['\"\"',\"N''\",\"''\",\"``\",\"[]\"],openParens:[\"(\",\"CASE\"],closeParens:[\")\",\"END\"],indexedPlaceholderTypes:[\"?\"],namedPlaceholderTypes:[\"@\",\":\"],lineCommentTypes:[\"#\",\"--\"]}),i in a?Object.defineProperty(a,i,{value:O,enumerable:!0,configurable:!0,writable:!0}):a[i]=O,e.exports=t.default},4008:(e,t,n)=>{\"use strict\";t.WU=void 0;var o=r(n(10)),p=r(n(4453)),M=r(n(1193)),b=r(n(1757)),c=r(n(5089)),z=r(n(3963));function r(e){return e&&e.__esModule?e:{default:e}}function a(e){return a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},a(e)}var i={db2:o.default,n1ql:p.default,\"pl/sql\":M.default,plsql:M.default,redshift:b.default,spark:c.default,sql:z.default};var O=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"string\"!=typeof e)throw new Error(\"Invalid query argument. Extected string, instead got \"+a(e));var n=z.default;if(void 0!==t.language&&(n=i[t.language]),void 0===n)throw Error(\"Unsupported SQL dialect: \".concat(t.language));return new n(t).format(e)};t.WU=O},3379:(e,t,n)=>{\"use strict\";var o,p=function(){return void 0===o&&(o=Boolean(window&&document&&document.all&&!window.atob)),o},M=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),b=[];function c(e){for(var t=-1,n=0;n<b.length;n++)if(b[n].identifier===e){t=n;break}return t}function z(e,t){for(var n={},o=[],p=0;p<e.length;p++){var M=e[p],z=t.base?M[0]+t.base:M[0],r=n[z]||0,a=\"\".concat(z,\" \").concat(r);n[z]=r+1;var i=c(a),O={css:M[1],media:M[2],sourceMap:M[3]};-1!==i?(b[i].references++,b[i].updater(O)):b.push({identifier:a,updater:d(O,t),references:1}),o.push(a)}return o}function r(e){var t=document.createElement(\"style\"),o=e.attributes||{};if(void 0===o.nonce){var p=n.nc;p&&(o.nonce=p)}if(Object.keys(o).forEach((function(e){t.setAttribute(e,o[e])})),\"function\"==typeof e.insert)e.insert(t);else{var b=M(e.insert||\"head\");if(!b)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");b.appendChild(t)}return t}var a,i=(a=[],function(e,t){return a[e]=t,a.filter(Boolean).join(\"\\n\")});function O(e,t,n,o){var p=n?\"\":o.media?\"@media \".concat(o.media,\" {\").concat(o.css,\"}\"):o.css;if(e.styleSheet)e.styleSheet.cssText=i(t,p);else{var M=document.createTextNode(p),b=e.childNodes;b[t]&&e.removeChild(b[t]),b.length?e.insertBefore(M,b[t]):e.appendChild(M)}}function s(e,t,n){var o=n.css,p=n.media,M=n.sourceMap;if(p?e.setAttribute(\"media\",p):e.removeAttribute(\"media\"),M&&\"undefined\"!=typeof btoa&&(o+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(M)))),\" */\")),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}var A=null,u=0;function d(e,t){var n,o,p;if(t.singleton){var M=u++;n=A||(A=r(t)),o=O.bind(null,n,M,!1),p=O.bind(null,n,M,!0)}else n=r(t),o=s.bind(null,n,t),p=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else p()}}e.exports=function(e,t){(t=t||{}).singleton||\"boolean\"==typeof t.singleton||(t.singleton=p());var n=z(e=e||[],t);return function(e){if(e=e||[],\"[object Array]\"===Object.prototype.toString.call(e)){for(var o=0;o<n.length;o++){var p=c(n[o]);b[p].references--}for(var M=z(e,t),r=0;r<n.length;r++){var a=c(n[r]);0===b[a].references&&(b[a].updater(),b.splice(a,1))}n=M}}}},1742:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],o=0;o<e.rangeCount;o++)n.push(e.getRangeAt(o));switch(t.tagName.toUpperCase()){case\"INPUT\":case\"TEXTAREA\":t.blur();break;default:t=null}return e.removeAllRanges(),function(){\"Caret\"===e.type&&e.removeAllRanges(),e.rangeCount||n.forEach((function(t){e.addRange(t)})),t&&t.focus()}}},3159:(e,t,n)=>{\"use strict\";var o,p=n(640),M=(o=p)&&o.__esModule?o:{default:o};var b={name:\"VueCopyToClipboard\",functional:!0,props:{text:{type:String,required:!0},options:{type:Object,default:function(){return null}}},render:function(e,t){var n=t.props,o=t.listeners.copy,p=t.children,b=n||{},c=b.text,z=b.options;return e(\"span\",{on:{click:function(e){e.preventDefault(),e.stopPropagation();var t=(0,M.default)(c,z);o&&o(c,t)}}},p)},install:function(e){e.component(b.name,b)}};t.Z=b},4566:function(e){e.exports=function(){var e={228:function(e){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}},858:function(e){e.exports=function(e){if(Array.isArray(e))return e}},646:function(e,t,n){var o=n(228);e.exports=function(e){if(Array.isArray(e))return o(e)}},713:function(e){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},860:function(e){e.exports=function(e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}},884:function(e){e.exports=function(e,t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],o=!0,p=!1,M=void 0;try{for(var b,c=e[Symbol.iterator]();!(o=(b=c.next()).done)&&(n.push(b.value),!t||n.length!==t);o=!0);}catch(e){p=!0,M=e}finally{try{o||null==c.return||c.return()}finally{if(p)throw M}}return n}}},521:function(e){e.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}},206:function(e){e.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}},38:function(e,t,n){var o=n(858),p=n(884),M=n(379),b=n(521);e.exports=function(e,t){return o(e)||p(e,t)||M(e,t)||b()}},319:function(e,t,n){var o=n(646),p=n(860),M=n(379),b=n(206);e.exports=function(e){return o(e)||p(e)||M(e)||b()}},8:function(e){function t(n){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?e.exports=t=function(e){return typeof e}:e.exports=t=function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},t(n)}e.exports=t},379:function(e,t,n){var o=n(228);e.exports=function(e,t){if(e){if(\"string\"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}},629:function(e,t,n){\"use strict\";n.r(t),n.d(t,{default:function(){return R}});var o=n(38),p=n.n(o),M=n(319),b=n.n(M),c=n(713),z=n.n(c);function r(e,t,n,o,p,M,b,c){var z,r=\"function\"==typeof e?e.options:e;if(t&&(r.render=t,r.staticRenderFns=n,r._compiled=!0),o&&(r.functional=!0),M&&(r._scopeId=\"data-v-\"+M),b?(z=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),p&&p.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(b)},r._ssrRegister=z):p&&(z=c?function(){p.call(this,(r.functional?this.parent:this).$root.$options.shadowRoot)}:p),z)if(r.functional){r._injectStyles=z;var a=r.render;r.render=function(e,t){return z.call(t),a(e,t)}}else{var i=r.beforeCreate;r.beforeCreate=i?[].concat(i,z):[z]}return{exports:e,options:r}}var a=r({props:{data:{required:!0,type:String}},methods:{toggleBrackets:function(e){this.$emit(\"click\",e)}}},(function(){var e=this,t=e.$createElement;return(e._self._c||t)(\"span\",{staticClass:\"vjs-tree-brackets\",on:{click:function(t){return t.stopPropagation(),e.toggleBrackets(t)}}},[e._v(e._s(e.data))])}),[],!1,null,null,null).exports,i=r({props:{checked:{type:Boolean,default:!1},isMultiple:Boolean},computed:{uiType:function(){return this.isMultiple?\"checkbox\":\"radio\"},model:{get:function(){return this.checked},set:function(e){this.$emit(\"input\",e)}}}},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"label\",{class:[\"vjs-check-controller\",e.checked?\"is-checked\":\"\"],on:{click:function(e){e.stopPropagation()}}},[n(\"span\",{class:\"vjs-check-controller-inner is-\"+e.uiType}),n(\"input\",{class:\"vjs-check-controller-original is-\"+e.uiType,attrs:{type:e.uiType},domProps:{checked:e.model},on:{change:function(t){return e.$emit(\"change\",e.model)}}})])}),[],!1,null,null,null).exports,O=r({props:{nodeType:{type:String,required:!0}},computed:{isOpen:function(){return\"objectStart\"===this.nodeType||\"arrayStart\"===this.nodeType},isClose:function(){return\"objectCollapsed\"===this.nodeType||\"arrayCollapsed\"===this.nodeType}},methods:{handleClick:function(){this.$emit(\"click\")}}},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.isOpen||e.isClose?n(\"span\",{class:\"vjs-carets vjs-carets-\"+(e.isOpen?\"open\":\"close\"),on:{click:e.handleClick}},[n(\"svg\",{attrs:{viewBox:\"0 0 1024 1024\",focusable:\"false\",\"data-icon\":\"caret-down\",width:\"1em\",height:\"1em\",fill:\"currentColor\",\"aria-hidden\":\"true\"}},[n(\"path\",{attrs:{d:\"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z\"}})])]):e._e()}),[],!1,null,null,null).exports,s=n(8),A=n.n(s);function u(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"root\",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},p=o.key,M=o.index,b=o.type,c=void 0===b?\"content\":b,z=o.showComma,r=void 0!==z&&z,a=o.length,i=void 0===a?1:a,O=u(e);if(\"array\"===O){var s=l(e.map((function(e,o,p){return d(e,\"\".concat(t,\"[\").concat(o,\"]\"),n+1,{index:o,showComma:o!==p.length-1,length:i,type:c})})));return[d(\"[\",t,n,{key:p,length:e.length,type:\"arrayStart\"})[0]].concat(s,d(\"]\",t,n,{showComma:r,length:e.length,type:\"arrayEnd\"})[0])}if(\"object\"===O){var A=Object.keys(e),f=l(A.map((function(o,p,M){return d(e[o],/^[a-zA-Z_]\\w*$/.test(o)?\"\".concat(t,\".\").concat(o):\"\".concat(t,'[\"').concat(o,'\"]'),n+1,{key:o,showComma:p!==M.length-1,length:i,type:c})})));return[d(\"{\",t,n,{key:p,index:M,length:A.length,type:\"objectStart\"})[0]].concat(f,d(\"}\",t,n,{showComma:r,length:A.length,type:\"objectEnd\"})[0])}return[{content:e,level:n,key:p,index:M,path:t,showComma:r,length:i,type:c}]}function l(e){if(\"function\"==typeof Array.prototype.flat)return e.flat();for(var t=b()(e),n=[];t.length;){var o=t.shift();Array.isArray(o)?t.unshift.apply(t,b()(o)):n.push(o)}return n}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakMap;if(null==e)return e;if(e instanceof Date)return new Date(e);if(e instanceof RegExp)return new RegExp(e);if(\"object\"!==A()(e))return e;if(t.get(e))return t.get(e);if(Array.isArray(e)){var n=e.map((function(e){return f(e,t)}));return t.set(e,n),n}var o={};for(var p in e)o[p]=f(e[p],t);return t.set(e,o),o}var q=r({components:{Brackets:a,CheckController:i,Carets:O},props:{node:{required:!0,type:Object},collapsed:Boolean,showDoubleQuotes:Boolean,showLength:Boolean,checked:Boolean,selectableType:{type:String,default:\"\"},showSelectController:{type:Boolean,default:!1},showLine:{type:Boolean,default:!0},showLineNumber:{type:Boolean,default:!1},selectOnClickNode:{type:Boolean,default:!0},nodeSelectable:{type:Function,default:function(){return!0}},highlightSelectedNode:{type:Boolean,default:!0},showIcon:{type:Boolean,default:!1},showKeyValueSpace:{type:Boolean,default:!0},editable:{type:Boolean,default:!1},editableTrigger:{type:String,default:\"click\"}},data:function(){return{editing:!1}},computed:{valueClass:function(){return\"vjs-value vjs-value-\".concat(this.dataType)},dataType:function(){return u(this.node.content)},prettyKey:function(){return this.showDoubleQuotes?'\"'.concat(this.node.key,'\"'):this.node.key},selectable:function(){return this.nodeSelectable(this.node)&&(this.isMultiple||this.isSingle)},isMultiple:function(){return\"multiple\"===this.selectableType},isSingle:function(){return\"single\"===this.selectableType},defaultValue:function(){var e,t=null===(e=this.node)||void 0===e?void 0:e.content;return null==t&&(t+=\"\"),\"string\"===this.dataType?'\"'.concat(t,'\"'):t}},methods:{handleInputChange:function(e){var t,n,o=\"null\"===(n=null===(t=e.target)||void 0===t?void 0:t.value)?null:\"undefined\"===n?void 0:\"true\"===n||\"false\"!==n&&(n[0]+n[n.length-1]==='\"\"'||n[0]+n[n.length-1]===\"''\"?n.slice(1,-1):\"number\"==typeof Number(n)&&!isNaN(Number(n))||\"NaN\"===n?Number(n):n);this.$emit(\"value-change\",o,this.node.path)},handleIconClick:function(){this.$emit(\"icon-click\",!this.collapsed,this.node.path)},handleBracketsClick:function(){this.$emit(\"brackets-click\",!this.collapsed,this.node.path)},handleSelectedChange:function(){this.$emit(\"selected-change\",this.node)},handleNodeClick:function(){this.$emit(\"node-click\",this.node),this.selectable&&this.selectOnClickNode&&this.$emit(\"selected-change\",this.node)},handleValueEdit:function(e){var t=this;if(this.editable&&!this.editing){this.editing=!0;var n=function n(o){var p;o.target!==e.target&&(null===(p=o.target)||void 0===p?void 0:p.parentElement)!==e.target&&(t.editing=!1,document.removeEventListener(\"click\",n))};document.removeEventListener(\"click\",n),document.addEventListener(\"click\",n)}}}},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{class:{\"vjs-tree-node\":!0,\"has-selector\":e.showSelectController,\"has-carets\":e.showIcon,\"is-highlight\":e.highlightSelectedNode&&e.checked},on:{click:e.handleNodeClick}},[e.showLineNumber?n(\"span\",{staticClass:\"vjs-node-index\"},[e._v(\"\\n    \"+e._s(e.node.id+1)+\"\\n  \")]):e._e(),e.showSelectController&&e.selectable&&\"objectEnd\"!==e.node.type&&\"arrayEnd\"!==e.node.type?n(\"check-controller\",{attrs:{\"is-multiple\":e.isMultiple,checked:e.checked},on:{change:e.handleSelectedChange}}):e._e(),n(\"div\",{staticClass:\"vjs-indent\"},[e._l(e.node.level,(function(t,o){return n(\"div\",{key:o,class:{\"vjs-indent-unit\":!0,\"has-line\":e.showLine}})})),e.showIcon?n(\"carets\",{attrs:{\"node-type\":e.node.type},on:{click:e.handleIconClick}}):e._e()],2),e.node.key?n(\"span\",{staticClass:\"vjs-key\"},[e._t(\"key\",[e._v(e._s(e.prettyKey))],{node:e.node,defaultKey:e.prettyKey}),n(\"span\",{staticClass:\"vjs-colon\"},[e._v(e._s(\":\"+(e.showKeyValueSpace?\" \":\"\")))])],2):e._e(),n(\"span\",[\"content\"!==e.node.type?n(\"brackets\",{attrs:{data:e.node.content},on:{click:e.handleBracketsClick}}):n(\"span\",{class:e.valueClass,on:{click:function(t){!e.editable||e.editableTrigger&&\"click\"!==e.editableTrigger||e.handleValueEdit(t)},dblclick:function(t){e.editable&&\"dblclick\"===e.editableTrigger&&e.handleValueEdit(t)}}},[e.editable&&e.editing?n(\"input\",{style:{padding:\"3px 8px\",border:\"1px solid #eee\",boxShadow:\"none\",boxSizing:\"border-box\",borderRadius:5,fontFamily:\"inherit\"},domProps:{value:e.defaultValue},on:{change:e.handleInputChange}}):e._t(\"value\",[e._v(e._s(e.defaultValue))],{node:e.node,defaultValue:e.defaultValue})],2),e.node.showComma?n(\"span\",[e._v(\",\")]):e._e(),e.showLength&&e.collapsed?n(\"span\",{staticClass:\"vjs-comment\"},[e._v(\" // \"+e._s(e.node.length)+\" items \")]):e._e()],1)],1)}),[],!1,null,null,null);function W(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?W(Object(n),!0).forEach((function(t){z()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):W(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var v=r({name:\"VueJsonPretty\",components:{TreeNode:q.exports},model:{prop:\"data\"},props:{data:{type:[String,Number,Boolean,Array,Object],default:null},deep:{type:Number,default:1/0},rootPath:{type:String,default:\"root\"},virtual:{type:Boolean,default:!1},height:{type:Number,default:400},itemHeight:{type:Number,default:20},showLength:{type:Boolean,default:!1},showDoubleQuotes:{type:Boolean,default:!0},selectableType:{type:String,default:\"\"},showSelectController:{type:Boolean,default:!1},showLine:{type:Boolean,default:!0},showLineNumber:{type:Boolean,default:!1},selectOnClickNode:{type:Boolean,default:!0},selectedValue:{type:[Array,String],default:function(){return\"\"}},nodeSelectable:{type:Function,default:function(){return!0}},highlightSelectedNode:{type:Boolean,default:!0},collapsedOnClickBrackets:{type:Boolean,default:!0},showIcon:{type:Boolean,default:!1},showKeyValueSpace:{type:Boolean,default:!0},editable:{type:Boolean,default:!1},editableTrigger:{type:String,default:\"click\"}},data:function(){return{translateY:0,visibleData:null,hiddenPaths:this.initHiddenPaths(d(this.data,this.rootPath),this.deep)}},computed:{originFlatData:function(){return d(this.data,this.rootPath)},flatData:function(e){for(var t=e.originFlatData,n=e.hiddenPaths,o=null,p=[],M=t.length,b=0;b<M;b++){var c=h(h({},t[b]),{},{id:b}),z=n[c.path];if(o&&o.path===c.path){var r=\"objectStart\"===o.type,a=h(h(h({},c),o),{},{showComma:c.showComma,content:r?\"{...}\":\"[...]\",type:r?\"objectCollapsed\":\"arrayCollapsed\"});o=null,p.push(a)}else{if(z&&!o){o=c;continue}if(o)continue;p.push(c)}}return p},selectedPaths:{get:function(){var e=this.selectedValue;return e&&\"multiple\"===this.selectableType&&Array.isArray(e)?e:[e]},set:function(e){this.$emit(\"update:selectedValue\",e)}},propsError:function(){return!this.selectableType||this.selectOnClickNode||this.showSelectController?\"\":\"When selectableType is not null, selectOnClickNode and showSelectController cannot be false at the same time, because this will cause the selection to fail.\"}},watch:{propsError:{handler:function(e){if(e)throw new Error(\"[VueJsonPretty] \".concat(e))},immediate:!0},flatData:{handler:function(e){this.updateVisibleData(e)},immediate:!0},deep:{handler:function(e){this.hiddenPaths=this.initHiddenPaths(this.originFlatData,e)}}},methods:{initHiddenPaths:function(e,t){return e.reduce((function(e,n){var o=n.level>=t;return\"objectStart\"!==n.type&&\"arrayStart\"!==n.type||!o?e:h(h({},e),{},z()({},n.path,1))}),{})},updateVisibleData:function(e){if(this.virtual){var t=this.height/this.itemHeight,n=this.$refs.tree&&this.$refs.tree.scrollTop||0,o=Math.floor(n/this.itemHeight),p=o<0?0:o+t>e.length?e.length-t:o;p<0&&(p=0);var M=p+t;this.translateY=p*this.itemHeight,this.visibleData=e.filter((function(e,t){return t>=p&&t<M}))}else this.visibleData=e},handleTreeScroll:function(){this.updateVisibleData(this.flatData)},handleSelectedChange:function(e){var t=e.path,n=this.selectableType;if(\"multiple\"===n){var o=this.selectedPaths.findIndex((function(e){return e===t})),M=b()(this.selectedPaths);-1!==o?this.selectedPaths.splice(o,1):this.selectedPaths.push(t),this.$emit(\"selected-change\",this.selectedPaths,M)}else if(\"single\"===n&&this.selectedPaths[0]!==t){var c=p()(this.selectedPaths,1)[0],z=t;this.selectedPaths=z,this.$emit(\"selected-change\",z,c)}},handleNodeClick:function(e){this.$emit(\"node-click\",e)},updateCollapsedPaths:function(e,t){if(e)this.hiddenPaths=h(h({},this.hiddenPaths),{},z()({},t,1));else{var n=h({},this.hiddenPaths);delete n[t],this.hiddenPaths=n}},handleBracketsClick:function(e,t){this.collapsedOnClickBrackets&&this.updateCollapsedPaths(e,t),this.$emit(\"brackets-click\",e)},handleIconClick:function(e,t){this.updateCollapsedPaths(e,t),this.$emit(\"icon-click\",e)},handleValueChange:function(e,t){var n=f(this.data),o=this.rootPath;new Function(\"data\",\"val\",\"data\".concat(t.slice(o.length),\"=val\"))(n,e),this.$emit(\"input\",n)}}},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{ref:\"tree\",class:{\"vjs-tree\":!0,\"is-virtual\":e.virtual},style:e.showLineNumber?{paddingLeft:12*Number(e.originFlatData.length.toString().length)+\"px\"}:{},on:{scroll:function(t){e.virtual&&e.handleTreeScroll()}}},[n(\"div\",{staticClass:\"vjs-tree-list\",style:e.virtual&&{height:e.height+\"px\"}},[n(\"div\",{staticClass:\"vjs-tree-list-holder\",style:e.virtual&&{height:e.flatData.length*e.itemHeight+\"px\"}},[n(\"div\",{staticClass:\"vjs-tree-list-holder-inner\",style:e.virtual&&{transform:\"translateY(\"+e.translateY+\"px)\"}},e._l(e.visibleData,(function(t){return n(\"tree-node\",{key:t.id,style:e.itemHeight&&20!==e.itemHeight?{lineHeight:e.itemHeight+\"px\"}:{},attrs:{node:t,collapsed:!!e.hiddenPaths[t.path],\"show-double-quotes\":e.showDoubleQuotes,\"show-length\":e.showLength,\"collapsed-on-click-brackets\":e.collapsedOnClickBrackets,checked:e.selectedPaths.includes(t.path),\"selectable-type\":e.selectableType,\"show-line\":e.showLine,\"show-line-number\":e.showLineNumber,\"show-select-controller\":e.showSelectController,\"select-on-click-node\":e.selectOnClickNode,\"node-selectable\":e.nodeSelectable,\"highlight-selected-node\":e.highlightSelectedNode,\"show-icon\":e.showIcon,\"show-key-value-space\":e.showKeyValueSpace,editable:e.editable,\"editable-trigger\":e.editableTrigger},on:{\"node-click\":e.handleNodeClick,\"brackets-click\":e.handleBracketsClick,\"icon-click\":e.handleIconClick,\"selected-change\":e.handleSelectedChange,\"value-change\":e.handleValueChange},scopedSlots:e._u([{key:\"key\",fn:function(t){return[e._t(\"nodeKey\",null,{node:t.node,defaultKey:t.defaultKey})]}},{key:\"value\",fn:function(t){return[e._t(\"nodeValue\",null,{node:t.node,defaultValue:t.defaultValue})]}}],null,!0)})})),1)])])])}),[],!1,null,null,null).exports,R=Object.assign({},v,{version:\"1.9.4\"})}},t={};function n(o){if(t[o])return t[o].exports;var p=t[o]={exports:{}};return e[o](p,p.exports,n),p.exports}return n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n(629)}()},4518:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>a});var o=n(9755),p=n.n(o);const M={props:[\"type\",\"message\",\"autoClose\",\"confirmationProceed\",\"confirmationCancel\"],data:function(){return{timeout:null,anotherModalOpened:p()(\"body\").hasClass(\"modal-open\")}},mounted:function(){var e=this;p()(\"#alertModal\").modal({backdrop:\"static\"}),p()(\"#alertModal\").on(\"hidden.bs.modal\",(function(t){e.$root.alert.type=null,e.$root.alert.autoClose=!1,e.$root.alert.message=\"\",e.$root.alert.confirmationProceed=null,e.$root.alert.confirmationCancel=null,e.anotherModalOpened&&p()(\"body\").addClass(\"modal-open\")})),this.autoClose&&(this.timeout=setTimeout((function(){e.close()}),this.autoClose))},methods:{close:function(){clearTimeout(this.timeout),p()(\"#alertModal\").modal(\"hide\")},confirm:function(){this.confirmationProceed(),this.close()},cancel:function(){this.confirmationCancel&&this.confirmationCancel(),this.close()}}};var b=n(3379),c=n.n(b),z=n(4254),r={insert:\"head\",singleton:!1};c()(z.Z,r);z.Z.locals;const a=(0,n(1900).Z)(M,(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"modal\",attrs:{id:\"alertModal\",tabindex:\"-1\",role:\"dialog\",\"aria-labelledby\":\"alertModalLabel\",\"aria-hidden\":\"true\"}},[t(\"div\",{staticClass:\"modal-dialog\",attrs:{role:\"document\"}},[t(\"div\",{staticClass:\"modal-content\"},[t(\"div\",{staticClass:\"modal-body\"},[t(\"p\",{staticClass:\"m-0 py-4\"},[e._v(e._s(e.message))])]),e._v(\" \"),t(\"div\",{staticClass:\"modal-footer justify-content-start flex-row-reverse\"},[\"error\"==e.type?t(\"button\",{staticClass:\"btn btn-primary\",on:{click:e.close}},[e._v(\"\\n                    Close\\n                \")]):e._e(),e._v(\" \"),\"success\"==e.type?t(\"button\",{staticClass:\"btn btn-primary\",on:{click:e.close}},[e._v(\"\\n                    Okay\\n                \")]):e._e(),e._v(\" \"),\"confirmation\"==e.type?t(\"button\",{staticClass:\"btn btn-danger\",on:{click:e.confirm}},[e._v(\"\\n                    Yes\\n                \")]):e._e(),e._v(\" \"),\"confirmation\"==e.type?t(\"button\",{staticClass:\"btn\",on:{click:e.cancel}},[e._v(\"\\n                    Cancel\\n                \")]):e._e()])])])])}),[],!1,null,null,null).exports},7973:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>c});function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}function p(){p=function(){return t};var e,t={},n=Object.prototype,M=n.hasOwnProperty,b=Object.defineProperty||function(e,t,n){e[t]=n.value},c=\"function\"==typeof Symbol?Symbol:{},z=c.iterator||\"@@iterator\",r=c.asyncIterator||\"@@asyncIterator\",a=c.toStringTag||\"@@toStringTag\";function i(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{i({},\"\")}catch(e){i=function(e,t,n){return e[t]=n}}function O(e,t,n,o){var p=t&&t.prototype instanceof q?t:q,M=Object.create(p.prototype),c=new B(o||[]);return b(M,\"_invoke\",{value:N(e,n,c)}),M}function s(e,t,n){try{return{type:\"normal\",arg:e.call(t,n)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=O;var A=\"suspendedStart\",u=\"suspendedYield\",d=\"executing\",l=\"completed\",f={};function q(){}function W(){}function h(){}var v={};i(v,z,(function(){return this}));var R=Object.getPrototypeOf,m=R&&R(R(C([])));m&&m!==n&&M.call(m,z)&&(v=m);var g=h.prototype=q.prototype=Object.create(v);function L(e){[\"next\",\"throw\",\"return\"].forEach((function(t){i(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function n(p,b,c,z){var r=s(e[p],e,b);if(\"throw\"!==r.type){var a=r.arg,i=a.value;return i&&\"object\"==o(i)&&M.call(i,\"__await\")?t.resolve(i.__await).then((function(e){n(\"next\",e,c,z)}),(function(e){n(\"throw\",e,c,z)})):t.resolve(i).then((function(e){a.value=e,c(a)}),(function(e){return n(\"throw\",e,c,z)}))}z(r.arg)}var p;b(this,\"_invoke\",{value:function(e,o){function M(){return new t((function(t,p){n(e,o,t,p)}))}return p=p?p.then(M,M):M()}})}function N(t,n,o){var p=A;return function(M,b){if(p===d)throw new Error(\"Generator is already running\");if(p===l){if(\"throw\"===M)throw b;return{value:e,done:!0}}for(o.method=M,o.arg=b;;){var c=o.delegate;if(c){var z=y(c,o);if(z){if(z===f)continue;return z}}if(\"next\"===o.method)o.sent=o._sent=o.arg;else if(\"throw\"===o.method){if(p===A)throw p=l,o.arg;o.dispatchException(o.arg)}else\"return\"===o.method&&o.abrupt(\"return\",o.arg);p=d;var r=s(t,n,o);if(\"normal\"===r.type){if(p=o.done?l:u,r.arg===f)continue;return{value:r.arg,done:o.done}}\"throw\"===r.type&&(p=l,o.method=\"throw\",o.arg=r.arg)}}}function y(t,n){var o=n.method,p=t.iterator[o];if(p===e)return n.delegate=null,\"throw\"===o&&t.iterator.return&&(n.method=\"return\",n.arg=e,y(t,n),\"throw\"===n.method)||\"return\"!==o&&(n.method=\"throw\",n.arg=new TypeError(\"The iterator does not provide a '\"+o+\"' method\")),f;var M=s(p,t.iterator,n.arg);if(\"throw\"===M.type)return n.method=\"throw\",n.arg=M.arg,n.delegate=null,f;var b=M.arg;return b?b.done?(n[t.resultName]=b.value,n.next=t.nextLoc,\"return\"!==n.method&&(n.method=\"next\",n.arg=e),n.delegate=null,f):b:(n.method=\"throw\",n.arg=new TypeError(\"iterator result is not an object\"),n.delegate=null,f)}function T(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function B(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(T,this),this.reset(!0)}function C(t){if(t||\"\"===t){var n=t[z];if(n)return n.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var p=-1,b=function n(){for(;++p<t.length;)if(M.call(t,p))return n.value=t[p],n.done=!1,n;return n.value=e,n.done=!0,n};return b.next=b}}throw new TypeError(o(t)+\" is not iterable\")}return W.prototype=h,b(g,\"constructor\",{value:h,configurable:!0}),b(h,\"constructor\",{value:W,configurable:!0}),W.displayName=i(h,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===W||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,i(e,a,\"GeneratorFunction\")),e.prototype=Object.create(g),e},t.awrap=function(e){return{__await:e}},L(_.prototype),i(_.prototype,r,(function(){return this})),t.AsyncIterator=_,t.async=function(e,n,o,p,M){void 0===M&&(M=Promise);var b=new _(O(e,n,o,p),M);return t.isGeneratorFunction(n)?b:b.next().then((function(e){return e.done?e.value:b.next()}))},L(g),i(g,a,\"Generator\"),i(g,z,(function(){return this})),i(g,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),n=[];for(var o in t)n.push(o);return n.reverse(),function e(){for(;n.length;){var o=n.pop();if(o in t)return e.value=o,e.done=!1,e}return e.done=!0,e}},t.values=C,B.prototype={constructor:B,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(E),!t)for(var n in this)\"t\"===n.charAt(0)&&M.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function o(o,p){return c.type=\"throw\",c.arg=t,n.next=o,p&&(n.method=\"next\",n.arg=e),!!p}for(var p=this.tryEntries.length-1;p>=0;--p){var b=this.tryEntries[p],c=b.completion;if(\"root\"===b.tryLoc)return o(\"end\");if(b.tryLoc<=this.prev){var z=M.call(b,\"catchLoc\"),r=M.call(b,\"finallyLoc\");if(z&&r){if(this.prev<b.catchLoc)return o(b.catchLoc,!0);if(this.prev<b.finallyLoc)return o(b.finallyLoc)}else if(z){if(this.prev<b.catchLoc)return o(b.catchLoc,!0)}else{if(!r)throw new Error(\"try statement without catch or finally\");if(this.prev<b.finallyLoc)return o(b.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&M.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var p=o;break}}p&&(\"break\"===e||\"continue\"===e)&&p.tryLoc<=t&&t<=p.finallyLoc&&(p=null);var b=p?p.completion:{};return b.type=e,b.arg=t,p?(this.method=\"next\",this.next=p.finallyLoc,f):this.complete(b)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),f},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if(\"throw\"===o.type){var p=o.arg;E(n)}return p}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,n,o){return this.delegate={iterator:C(t),resultName:n,nextLoc:o},\"next\"===this.method&&(this.arg=e),f}},t}function M(e,t,n,o,p,M,b){try{var c=e[M](b),z=c.value}catch(e){return void n(e)}c.done?t(z):Promise.resolve(z).then(o,p)}const b={props:[\"data\"],components:{CopyToClipboard:n(3159).Z},data:function(){return{copying:!1}},methods:{handleCopy:function(){var e,t=this;return(e=p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t.copying=!0,setTimeout((function(){return t.copying=!1}),1e3);case 2:case\"end\":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(o,p){var b=e.apply(t,n);function c(e){M(b,o,p,c,z,\"next\",e)}function z(e){M(b,o,p,c,z,\"throw\",e)}c(void 0)}))})()}},computed:{copyText:function(){return\"string\"==typeof this.data?this.data:JSON.stringify(this.data,null,\"\\t\")}}};const c=(0,n(1900).Z)(b,(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"position-relative\"},[t(\"div\",{staticClass:\"copy-to-clipboard\"},[e.copying?t(\"span\",{staticStyle:{color:\"#ffffff\"}},[t(\"svg\",{staticStyle:{width:\"1.25rem\",height:\"1.25rem\"},attrs:{fill:\"currentColor\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{d:\"M9 2a1 1 0 000 2h2a1 1 0 100-2H9z\"}}),e._v(\" \"),t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\",\"clip-rule\":\"evenodd\"}})])]):t(\"copy-to-clipboard\",{attrs:{text:e.copyText},on:{copy:e.handleCopy}},[t(\"a\",{attrs:{href:\"#\"}},[t(\"svg\",{staticStyle:{width:\"1.25rem\",height:\"1.25rem\"},attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\",fill:\"currentColor\"}},[t(\"path\",{attrs:{d:\"M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z\"}}),e._v(\" \"),t(\"path\",{attrs:{d:\"M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z\"}})])])])],1),e._v(\" \"),e._t(\"default\")],2)}),[],!1,null,null,null).exports},8597:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>r});var o=n(837);o.Z.registerLanguage(\"php\",(function(e){const t=e.regex,n=/(?![A-Za-z0-9])(?![$])/,o=t.concat(/[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,n),p=t.concat(/(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,n),M={scope:\"variable\",match:\"\\\\$+\"+o},b={scope:\"subst\",variants:[{begin:/\\$\\w+/},{begin:/\\{\\$/,end:/\\}/}]},c=e.inherit(e.APOS_STRING_MODE,{illegal:null}),z=\"[ \\t\\n]\",r={scope:\"string\",variants:[e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(b)}),c,{begin:/<<<[ \\t]*(?:(\\w+)|\"(\\w+)\")\\n/,end:/[ \\t]*(\\w+)\\b/,contains:e.QUOTE_STRING_MODE.contains.concat(b),\"on:begin\":(e,t)=>{t.data._beginMatch=e[1]||e[2]},\"on:end\":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}},e.END_SAME_AS_BEGIN({begin:/<<<[ \\t]*'(\\w+)'\\n/,end:/[ \\t]*(\\w+)\\b/})]},a={scope:\"number\",variants:[{begin:\"\\\\b0[bB][01]+(?:_[01]+)*\\\\b\"},{begin:\"\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b\"},{begin:\"\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b\"},{begin:\"(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?\"}],relevance:0},i=[\"false\",\"null\",\"true\"],O=[\"__CLASS__\",\"__DIR__\",\"__FILE__\",\"__FUNCTION__\",\"__COMPILER_HALT_OFFSET__\",\"__LINE__\",\"__METHOD__\",\"__NAMESPACE__\",\"__TRAIT__\",\"die\",\"echo\",\"exit\",\"include\",\"include_once\",\"print\",\"require\",\"require_once\",\"array\",\"abstract\",\"and\",\"as\",\"binary\",\"bool\",\"boolean\",\"break\",\"callable\",\"case\",\"catch\",\"class\",\"clone\",\"const\",\"continue\",\"declare\",\"default\",\"do\",\"double\",\"else\",\"elseif\",\"empty\",\"enddeclare\",\"endfor\",\"endforeach\",\"endif\",\"endswitch\",\"endwhile\",\"enum\",\"eval\",\"extends\",\"final\",\"finally\",\"float\",\"for\",\"foreach\",\"from\",\"global\",\"goto\",\"if\",\"implements\",\"instanceof\",\"insteadof\",\"int\",\"integer\",\"interface\",\"isset\",\"iterable\",\"list\",\"match|0\",\"mixed\",\"new\",\"never\",\"object\",\"or\",\"private\",\"protected\",\"public\",\"readonly\",\"real\",\"return\",\"string\",\"switch\",\"throw\",\"trait\",\"try\",\"unset\",\"use\",\"var\",\"void\",\"while\",\"xor\",\"yield\"],s=[\"Error|0\",\"AppendIterator\",\"ArgumentCountError\",\"ArithmeticError\",\"ArrayIterator\",\"ArrayObject\",\"AssertionError\",\"BadFunctionCallException\",\"BadMethodCallException\",\"CachingIterator\",\"CallbackFilterIterator\",\"CompileError\",\"Countable\",\"DirectoryIterator\",\"DivisionByZeroError\",\"DomainException\",\"EmptyIterator\",\"ErrorException\",\"Exception\",\"FilesystemIterator\",\"FilterIterator\",\"GlobIterator\",\"InfiniteIterator\",\"InvalidArgumentException\",\"IteratorIterator\",\"LengthException\",\"LimitIterator\",\"LogicException\",\"MultipleIterator\",\"NoRewindIterator\",\"OutOfBoundsException\",\"OutOfRangeException\",\"OuterIterator\",\"OverflowException\",\"ParentIterator\",\"ParseError\",\"RangeException\",\"RecursiveArrayIterator\",\"RecursiveCachingIterator\",\"RecursiveCallbackFilterIterator\",\"RecursiveDirectoryIterator\",\"RecursiveFilterIterator\",\"RecursiveIterator\",\"RecursiveIteratorIterator\",\"RecursiveRegexIterator\",\"RecursiveTreeIterator\",\"RegexIterator\",\"RuntimeException\",\"SeekableIterator\",\"SplDoublyLinkedList\",\"SplFileInfo\",\"SplFileObject\",\"SplFixedArray\",\"SplHeap\",\"SplMaxHeap\",\"SplMinHeap\",\"SplObjectStorage\",\"SplObserver\",\"SplPriorityQueue\",\"SplQueue\",\"SplStack\",\"SplSubject\",\"SplTempFileObject\",\"TypeError\",\"UnderflowException\",\"UnexpectedValueException\",\"UnhandledMatchError\",\"ArrayAccess\",\"BackedEnum\",\"Closure\",\"Fiber\",\"Generator\",\"Iterator\",\"IteratorAggregate\",\"Serializable\",\"Stringable\",\"Throwable\",\"Traversable\",\"UnitEnum\",\"WeakReference\",\"WeakMap\",\"Directory\",\"__PHP_Incomplete_Class\",\"parent\",\"php_user_filter\",\"self\",\"static\",\"stdClass\"],A={keyword:O,literal:(e=>{const t=[];return e.forEach((e=>{t.push(e),e.toLowerCase()===e?t.push(e.toUpperCase()):t.push(e.toLowerCase())})),t})(i),built_in:s},u=e=>e.map((e=>e.replace(/\\|\\d+$/,\"\"))),d={variants:[{match:[/new/,t.concat(z,\"+\"),t.concat(\"(?!\",u(s).join(\"\\\\b|\"),\"\\\\b)\"),p],scope:{1:\"keyword\",4:\"title.class\"}}]},l=t.concat(o,\"\\\\b(?!\\\\()\"),f={variants:[{match:[t.concat(/::/,t.lookahead(/(?!class\\b)/)),l],scope:{2:\"variable.constant\"}},{match:[/::/,/class/],scope:{2:\"variable.language\"}},{match:[p,t.concat(/::/,t.lookahead(/(?!class\\b)/)),l],scope:{1:\"title.class\",3:\"variable.constant\"}},{match:[p,t.concat(\"::\",t.lookahead(/(?!class\\b)/))],scope:{1:\"title.class\"}},{match:[p,/::/,/class/],scope:{1:\"title.class\",3:\"variable.language\"}}]},q={scope:\"attr\",match:t.concat(o,t.lookahead(\":\"),t.lookahead(/(?!::)/))},W={relevance:0,begin:/\\(/,end:/\\)/,keywords:A,contains:[q,M,f,e.C_BLOCK_COMMENT_MODE,r,a,d]},h={relevance:0,match:[/\\b/,t.concat(\"(?!fn\\\\b|function\\\\b|\",u(O).join(\"\\\\b|\"),\"|\",u(s).join(\"\\\\b|\"),\"\\\\b)\"),o,t.concat(z,\"*\"),t.lookahead(/(?=\\()/)],scope:{3:\"title.function.invoke\"},contains:[W]};W.contains.push(h);const v=[q,f,e.C_BLOCK_COMMENT_MODE,r,a,d];return{case_insensitive:!1,keywords:A,contains:[{begin:t.concat(/#\\[\\s*/,p),beginScope:\"meta\",end:/]/,endScope:\"meta\",keywords:{literal:i,keyword:[\"new\",\"array\"]},contains:[{begin:/\\[/,end:/]/,keywords:{literal:i,keyword:[\"new\",\"array\"]},contains:[\"self\",...v]},...v,{scope:\"meta\",match:p}]},e.HASH_COMMENT_MODE,e.COMMENT(\"//\",\"$\"),e.COMMENT(\"/\\\\*\",\"\\\\*/\",{contains:[{scope:\"doctag\",match:\"@[A-Za-z]+\"}]}),{match:/__halt_compiler\\(\\);/,keywords:\"__halt_compiler\",starts:{scope:\"comment\",end:e.MATCH_NOTHING_RE,contains:[{match:/\\?>/,scope:\"meta\",endsParent:!0}]}},{scope:\"meta\",variants:[{begin:/<\\?php/,relevance:10},{begin:/<\\?=/},{begin:/<\\?/,relevance:.1},{begin:/\\?>/}]},{scope:\"variable.language\",match:/\\$this\\b/},M,h,f,{match:[/const/,/\\s/,o],scope:{1:\"keyword\",3:\"variable.constant\"}},d,{scope:\"function\",relevance:0,beginKeywords:\"fn function\",end:/[;{]/,excludeEnd:!0,illegal:\"[$%\\\\[]\",contains:[{beginKeywords:\"use\"},e.UNDERSCORE_TITLE_MODE,{begin:\"=>\",endsParent:!0},{scope:\"params\",begin:\"\\\\(\",end:\"\\\\)\",excludeBegin:!0,excludeEnd:!0,keywords:A,contains:[\"self\",M,f,e.C_BLOCK_COMMENT_MODE,r,a]}]},{scope:\"class\",variants:[{beginKeywords:\"enum\",illegal:/[($\"]/},{beginKeywords:\"class interface trait\",illegal:/[:($\"]/}],relevance:0,end:/\\{/,excludeEnd:!0,contains:[{beginKeywords:\"extends implements\"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:\"namespace\",relevance:0,end:\";\",illegal:/[.']/,contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:\"title.class\"})]},{beginKeywords:\"use\",relevance:0,end:\";\",contains:[{match:/\\b(as|const|function)\\b/,scope:\"keyword\"},e.UNDERSCORE_TITLE_MODE]},r,a]}}));const p={props:[\"lines\",\"highlightedLine\"],methods:{highlight:function(e,t){return t==this.highlightedLine?e:o.Z.highlight(e,{language:\"php\"}).value}}};var M=n(3379),b=n.n(M),c=n(8078),z={insert:\"head\",singleton:!1};b()(c.Z,z);c.Z.locals;const r=(0,n(1900).Z)(p,(function(){var e=this,t=e._self._c;return t(\"pre\",{staticClass:\"code-bg px-4 mb-0 text-white\"},[e._v(\"    \"),e._l(e.lines,(function(n,o){return t(\"p\",{key:o,staticClass:\"mb-0\",class:{highlight:o==e.highlightedLine}},[t(\"span\",{staticClass:\"mr-4\"},[e._v(e._s(o))]),e._v(\" \"),t(\"span\",{domProps:{innerHTML:e._s(e.highlight(n,o))}})])})),e._v(\"\\n\")],2)}),[],!1,null,\"71bb8c56\",null).exports},8106:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>O});var o=n(9755),p=n.n(o),M=n(6486),b=n.n(M),c=n(9669),z=n.n(c);function r(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(!e)return;if(\"string\"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===n&&e.constructor&&(n=e.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(e);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}const i={props:[\"resource\",\"title\",\"showAllFamily\",\"hideSearch\"],data:function(){return{tag:\"\",familyHash:\"\",entries:[],ready:!1,recordingStatus:\"enabled\",lastEntryIndex:\"\",hasMoreEntries:!0,hasNewEntries:!1,entriesPerRequest:50,loadingNewEntries:!1,loadingMoreEntries:!1,updateTimeAgoTimeout:null,newEntriesTimeout:null,newEntriesTimer:2500,updateEntriesTimeout:null,updateEntriesTimer:2500}},mounted:function(){var e=this;document.title=this.title+\" - Telescope\",this.familyHash=this.$route.query.family_hash||\"\",this.tag=this.$route.query.tag||\"\",this.loadEntries((function(t){e.entries=t,e.checkForNewEntries(),e.ready=!0})),this.updateEntries(),this.updateTimeAgo(),this.focusOnSearch()},destroyed:function(){clearTimeout(this.newEntriesTimeout),clearTimeout(this.updateEntriesTimeout),clearTimeout(this.updateTimeAgoTimeout),document.onkeyup=null},watch:{\"$route.query\":function(){var e=this;clearTimeout(this.newEntriesTimeout),this.hasNewEntries=!1,this.lastEntryIndex=\"\",this.$route.query.family_hash||(this.familyHash=\"\"),this.$route.query.tag||(this.tag=\"\"),this.ready=!1,this.loadEntries((function(t){e.entries=t,e.checkForNewEntries(),e.ready=!0}))}},methods:{loadEntries:function(e){var t=this;z().post(Telescope.basePath+\"/telescope-api/\"+this.resource+\"?tag=\"+this.tag+\"&before=\"+this.lastEntryIndex+\"&take=\"+this.entriesPerRequest+\"&family_hash=\"+this.familyHash).then((function(n){t.lastEntryIndex=n.data.entries.length?b().last(n.data.entries).sequence:t.lastEntryIndex,t.hasMoreEntries=n.data.entries.length>=t.entriesPerRequest,t.recordingStatus=n.data.status,b().isFunction(e)&&e(t.familyHash||t.showAllFamily?n.data.entries:b().uniqBy(n.data.entries,(function(e){return e.family_hash||b().uniqueId()})))}))},checkForNewEntries:function(){var e=this;this.newEntriesTimeout=setTimeout((function(){z().post(Telescope.basePath+\"/telescope-api/\"+e.resource+\"?tag=\"+e.tag+\"&take=1&family_hash=\"+e.familyHash).then((function(t){e._isDestroyed||(e.recordingStatus=t.data.status,t.data.entries.length&&!e.entries.length?e.loadNewEntries():t.data.entries.length&&b().first(t.data.entries).id!==b().first(e.entries).id?e.$root.autoLoadsNewEntries?e.loadNewEntries():e.hasNewEntries=!0:e.checkForNewEntries())}))}),this.newEntriesTimer)},updateTimeAgo:function(){var e=this;this.updateTimeAgoTimeout=setTimeout((function(){b().each(p()(\"[data-timeago]\"),(function(t){p()(t).html(e.timeAgo(p()(t).data(\"timeago\")))})),e.updateTimeAgo()}),6e4)},search:function(){var e=this;this.debouncer((function(){e.hasNewEntries=!1,e.lastEntryIndex=\"\",clearTimeout(e.newEntriesTimeout),e.$router.push({query:b().assign({},e.$route.query,{tag:e.tag})})}))},loadOlderEntries:function(){var e=this;this.loadingMoreEntries=!0,this.loadEntries((function(t){var n;(n=e.entries).push.apply(n,r(t)),e.loadingMoreEntries=!1}))},loadNewEntries:function(){var e=this;this.hasMoreEntries=!0,this.hasNewEntries=!1,this.lastEntryIndex=\"\",this.loadingNewEntries=!0,clearTimeout(this.newEntriesTimeout),this.loadEntries((function(t){e.entries=t,e.loadingNewEntries=!1,e.checkForNewEntries()}))},updateEntries:function(){var e=this;\"jobs\"===this.resource&&(this.updateEntriesTimeout=setTimeout((function(){var t=b().chain(e.entries).filter((function(e){return\"pending\"===e.content.status})).map(\"id\").value();t.length&&z().post(Telescope.basePath+\"/telescope-api/\"+e.resource,{uuids:t}).then((function(n){e.recordingStatus=n.data.status,e.entries=b().map(e.entries,(function(e){return b().includes(t,e.id)?b().find(n.data.entries,{id:e.id}):e}))})),e.updateEntries()}),this.updateEntriesTimer))},focusOnSearch:function(){document.onkeyup=function(e){if(191===e.which||191===e.keyCode){var t=document.getElementById(\"searchInput\");t&&t.focus()}}}}};const O=(0,n(1900).Z)(i,(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"card overflow-hidden\"},[t(\"div\",{staticClass:\"card-header d-flex align-items-center justify-content-between\"},[t(\"h2\",{staticClass:\"h6 m-0\"},[e._v(e._s(this.title))]),e._v(\" \"),!e.hideSearch&&(e.tag||e.entries.length>0)?t(\"div\",{staticClass:\"form-control-with-icon w-25\"},[t(\"div\",{staticClass:\"icon-wrapper\"},[t(\"svg\",{staticClass:\"icon\",attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\",\"clip-rule\":\"evenodd\"}})])]),e._v(\" \"),t(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.tag,expression:\"tag\"}],staticClass:\"form-control w-100\",attrs:{type:\"text\",id:\"searchInput\",placeholder:\"Search Tag\"},domProps:{value:e.tag},on:{input:[function(t){t.target.composing||(e.tag=t.target.value)},function(t){return t.stopPropagation(),e.search.apply(null,arguments)}]}})]):e._e()]),e._v(\" \"),\"enabled\"!==e.recordingStatus?t(\"p\",{staticClass:\"mt-0 mb-0 disabled-watcher d-flex align-items-center\"},[t(\"svg\",{staticClass:\"mr-2\",attrs:{xmlns:\"http://www.w3.org/2000/svg\",x:\"0px\",y:\"0px\",width:\"20px\",height:\"20px\",viewBox:\"0 0 90 90\"}},[t(\"path\",{attrs:{fill:\"#FFFFFF\",d:\"M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z\"}})]),e._v(\" \"),\"disabled\"==e.recordingStatus?t(\"span\",{staticClass:\"ml-1\"},[e._v(\"Telescope is currently disabled.\")]):e._e(),e._v(\" \"),\"paused\"==e.recordingStatus?t(\"span\",{staticClass:\"ml-1\"},[e._v(\"Telescope recording is paused.\")]):e._e(),e._v(\" \"),\"off\"==e.recordingStatus?t(\"span\",{staticClass:\"ml-1\"},[e._v(\"This watcher is turned off.\")]):e._e()]):e._e(),e._v(\" \"),e.ready?e._e():t(\"div\",{staticClass:\"d-flex align-items-center justify-content-center card-bg-secondary p-5 bottom-radius\"},[t(\"svg\",{staticClass:\"icon spin mr-2 fill-text-color\",attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{d:\"M12 10a2 2 0 0 1-3.41 1.41A2 2 0 0 1 10 8V0a9.97 9.97 0 0 1 10 10h-8zm7.9 1.41A10 10 0 1 1 8.59.1v2.03a8 8 0 1 0 9.29 9.29h2.02zm-4.07 0a6 6 0 1 1-7.25-7.25v2.1a3.99 3.99 0 0 0-1.4 6.57 4 4 0 0 0 6.56-1.42h2.1z\"}})]),e._v(\" \"),t(\"span\",[e._v(\"Scanning...\")])]),e._v(\" \"),e.ready&&0==e.entries.length?t(\"div\",{staticClass:\"d-flex flex-column align-items-center justify-content-center card-bg-secondary p-5 bottom-radius\"},[t(\"svg\",{staticClass:\"fill-text-color\",staticStyle:{width:\"200px\"},attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 60 60\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M7 10h41a11 11 0 0 1 0 22h-8a3 3 0 0 0 0 6h6a6 6 0 1 1 0 12H10a4 4 0 1 1 0-8h2a2 2 0 1 0 0-4H7a5 5 0 0 1 0-10h3a3 3 0 0 0 0-6H7a6 6 0 1 1 0-12zm14 19a1 1 0 0 1-1-1 1 1 0 0 0-2 0 1 1 0 0 1-1 1 1 1 0 0 0 0 2 1 1 0 0 1 1 1 1 1 0 0 0 2 0 1 1 0 0 1 1-1 1 1 0 0 0 0-2zm-5.5-11a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm24 10a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm1 18a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm-14-3a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm22-23a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM33 18a1 1 0 0 1-1-1v-1a1 1 0 0 0-2 0v1a1 1 0 0 1-1 1h-1a1 1 0 0 0 0 2h1a1 1 0 0 1 1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 0-2h-1z\"}})]),e._v(\" \"),t(\"span\",[e._v(\"We didn't find anything - just empty space.\")])]):e._e(),e._v(\" \"),e.ready&&e.entries.length>0?t(\"table\",{staticClass:\"table table-hover mb-0 penultimate-column-right\",attrs:{id:\"indexScreen\"}},[t(\"thead\",[e._t(\"table-header\")],2),e._v(\" \"),t(\"transition-group\",{attrs:{tag:\"tbody\",name:\"list\"}},[e.hasNewEntries?t(\"tr\",{key:\"newEntries\",staticClass:\"dontanimate\"},[t(\"td\",{staticClass:\"text-center card-bg-secondary py-2\",attrs:{colspan:\"100\"}},[t(\"small\",[e.loadingNewEntries?e._e():t(\"a\",{attrs:{href:\"#\"},on:{click:function(t){return t.preventDefault(),e.loadNewEntries.apply(null,arguments)}}},[e._v(\"Load New Entries\")])]),e._v(\" \"),e.loadingNewEntries?t(\"small\",[e._v(\"Loading...\")]):e._e()])]):e._e(),e._v(\" \"),e._l(e.entries,(function(n){return t(\"tr\",{key:n.id},[e._t(\"row\",null,{entry:n})],2)})),e._v(\" \"),e.hasMoreEntries?t(\"tr\",{key:\"olderEntries\",staticClass:\"dontanimate\"},[t(\"td\",{staticClass:\"text-center card-bg-secondary py-2\",attrs:{colspan:\"100\"}},[t(\"small\",[e.loadingMoreEntries?e._e():t(\"a\",{attrs:{href:\"#\"},on:{click:function(t){return t.preventDefault(),e.loadOlderEntries.apply(null,arguments)}}},[e._v(\"Load Older Entries\")])]),e._v(\" \"),e.loadingMoreEntries?t(\"small\",[e._v(\"Loading...\")]):e._e()])]):e._e()],2)],1):e._e()])}),[],!1,null,null,null).exports},2986:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>z});var o=n(6486),p=n.n(o),M=n(9669),b=n.n(M);const c={props:{resource:{required:!0},title:{required:!0},id:{required:!0},entryPoint:{default:!1}},data:function(){return{entry:null,batch:null,ready:!1,updateEntryTimeout:null,updateEntryTimer:2500}},watch:{id:function(){this.prepareEntry()}},mounted:function(){this.prepareEntry()},destroyed:function(){clearTimeout(this.updateEntryTimeout)},computed:{job:function(){return p().find(this.batch,{type:\"job\"})},request:function(){return p().find(this.batch,{type:\"request\"})},command:function(){return p().find(this.batch,{type:\"command\"})}},methods:{prepareEntry:function(){var e=this;document.title=this.title+\" - Telescope\",this.ready=!1;var t=this.$watch(\"ready\",(function(n){n&&(e.$emit(\"ready\"),t())}));this.loadEntry((function(t){e.entry=t.data.entry,e.batch=t.data.batch,e.$parent.entry=t.data.entry,e.$parent.batch=t.data.batch,e.ready=!0,e.updateEntry()}))},loadEntry:function(e){var t=this;b().get(Telescope.basePath+\"/telescope-api/\"+this.resource+\"/\"+this.id).then((function(t){p().isFunction(e)&&e(t)})).catch((function(e){t.ready=!0}))},updateEntry:function(){var e=this;\"jobs\"==this.resource&&\"pending\"===this.entry.content.status&&(this.updateEntryTimeout=setTimeout((function(){e.loadEntry((function(t){e.entry=t.data.entry,e.batch=t.data.batch,e.$parent.entry=t.data.entry,e.$parent.batch=t.data.batch,e.ready=!0})),e.updateEntry()}),this.updateEntryTimer))}}};const z=(0,n(1900).Z)(c,(function(){var e=this,t=e._self._c;return t(\"div\",[t(\"div\",{staticClass:\"card overflow-hidden\"},[t(\"div\",{staticClass:\"card-header d-flex align-items-center justify-content-between\"},[t(\"h2\",{staticClass:\"h6 m-0\"},[e._v(e._s(this.title))])]),e._v(\" \"),e.ready?e._e():t(\"div\",{staticClass:\"d-flex align-items-center justify-content-center card-bg-secondary p-5 bottom-radius\"},[t(\"svg\",{staticClass:\"icon spin mr-2\",attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{d:\"M12 10a2 2 0 0 1-3.41 1.41A2 2 0 0 1 10 8V0a9.97 9.97 0 0 1 10 10h-8zm7.9 1.41A10 10 0 1 1 8.59.1v2.03a8 8 0 1 0 9.29 9.29h2.02zm-4.07 0a6 6 0 1 1-7.25-7.25v2.1a3.99 3.99 0 0 0-1.4 6.57 4 4 0 0 0 6.56-1.42h2.1z\"}})]),e._v(\" \"),t(\"span\",[e._v(\"Fetching...\")])]),e._v(\" \"),e.ready&&!e.entry?t(\"div\",{staticClass:\"d-flex align-items-center justify-content-center card-bg-secondary p-5 bottom-radius\"},[t(\"span\",[e._v(\"No entry found.\")])]):e._e(),e._v(\" \"),t(\"div\",{staticClass:\"table-responsive border-top\"},[e.ready&&e.entry?t(\"table\",{staticClass:\"table mb-0 card-bg-secondary table-borderless\"},[t(\"tbody\",[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Time\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                        \"+e._s(e.localTime(e.entry.created_at))+\" (\"+e._s(e.timeAgo(e.entry.created_at))+\")\\n                    \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Hostname\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                        \"+e._s(e.entry.content.hostname)+\"\\n                    \")])]),e._v(\" \"),e._t(\"table-parameters\",null,{entry:e.entry}),e._v(\" \"),!e.entryPoint&&e.job?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Job\")]),e._v(\" \"),t(\"td\",[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"job-preview\",params:{id:e.job.id}}}},[e._v(\"\\n                            View Job\\n                        \")])],1)]):e._e(),e._v(\" \"),!e.entryPoint&&e.request?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Request\")]),e._v(\" \"),t(\"td\",[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"request-preview\",params:{id:e.request.id}}}},[e._v(\"\\n                            View Request\\n                        \")])],1)]):e._e(),e._v(\" \"),!e.entryPoint&&e.command?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Command\")]),e._v(\" \"),t(\"td\",[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"command-preview\",params:{id:e.command.id}}}},[e._v(\"\\n                            View Command\\n                        \")])],1)]):e._e(),e._v(\" \"),e.entry.tags.length?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Tags\")]),e._v(\" \"),t(\"td\",e._l(e.entry.tags,(function(n){return t(\"router-link\",{key:n,staticClass:\"badge badge-info mr-1\",attrs:{to:{name:e.resource,query:{tag:n}}}},[e._v(\"\\n                            \"+e._s(n)+\"\\n                        \")])})),1)]):e._e()],2)]):e._e()]),e._v(\" \"),e.ready&&e.entry?e._t(\"below-table\",null,{entry:e.entry}):e._e()],2),e._v(\" \"),e.ready&&e.entry&&e.entry.content.user&&e.entry.content.user.id?t(\"div\",{staticClass:\"card mt-5\"},[e._m(0),e._v(\" \"),t(\"table\",{staticClass:\"table mb-0 card-bg-secondary table-borderless\"},[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"ID\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                    \"+e._s(e.entry.content.user.id)+\"\\n                \")])]),e._v(\" \"),e.entry.content.user.name?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted align-middle\"},[e._v(\"Name\")]),e._v(\" \"),t(\"td\",{staticClass:\"align-middle\"},[e.entry.content.user.avatar?t(\"img\",{staticClass:\"mr-2 rounded-circle\",attrs:{src:e.entry.content.user.avatar,alt:e.entry.content.user.name,height:\"40\",width:\"40\"}}):e._e(),e._v(\"\\n                    \"+e._s(e.entry.content.user.name)+\"\\n                \")])]):e._e(),e._v(\" \"),e.entry.content.user.email?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Email Address\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                    \"+e._s(e.entry.content.user.email)+\"\\n                \")])]):e._e()])]):e._e(),e._v(\" \"),e.ready&&e.entry?e._t(\"after-attributes-card\",null,{entry:e.entry}):e._e()],2)}),[function(){var e=this._self._c;return e(\"div\",{staticClass:\"card-header d-flex align-items-center justify-content-between\"},[e(\"h5\",[this._v(\"Authenticated User\")])])}],!1,null,null,null).exports},9932:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>z});const o={props:[\"entry\",\"batch\"],mixins:[n(601).Z],data:function(){return{currentTab:\"exceptions\"}},mounted:function(){this.activateFirstTab()},watch:{entry:function(){this.activateFirstTab()}},methods:{activateFirstTab:function(){window.location.hash?this.currentTab=window.location.hash.substring(1):this.exceptions.length?this.currentTab=\"exceptions\":this.logs.length?this.currentTab=\"logs\":this.views.length?this.currentTab=\"views\":this.queries.length?this.currentTab=\"queries\":this.models.length?this.currentTab=\"models\":this.jobs.length?this.currentTab=\"jobs\":this.mails.length?this.currentTab=\"mails\":this.notifications.length?this.currentTab=\"notifications\":this.events.length?this.currentTab=\"events\":this.cache.length?this.currentTab=\"cache\":this.gates.length?this.currentTab=\"gates\":this.redis.length?this.currentTab=\"redis\":this.clientRequests.length&&(this.currentTab=\"client_requests\")},activateTab:function(e){this.currentTab=e,window.history.replaceState&&window.history.replaceState(null,null,\"#\"+this.currentTab)}},computed:{hasRelatedEntries:function(){return!!_.reject(this.batch,(function(e){return _.includes([\"request\",\"command\"],e.type)})).length},entryTypesAvailable:function(){return _.uniqBy(this.batch,\"type\").length},exceptions:function(){return _.filter(this.batch,{type:\"exception\"})},gates:function(){return _.filter(this.batch,{type:\"gate\"})},logs:function(){return _.filter(this.batch,{type:\"log\"})},queries:function(){return _.filter(this.batch,{type:\"query\"})},models:function(){return _.filter(this.batch,{type:\"model\"})},jobs:function(){return _.filter(this.batch,{type:\"job\"})},events:function(){return _.filter(this.batch,{type:\"event\"})},cache:function(){return _.filter(this.batch,{type:\"cache\"})},redis:function(){return _.filter(this.batch,{type:\"redis\"})},mails:function(){return _.filter(this.batch,{type:\"mail\"})},notifications:function(){return _.filter(this.batch,{type:\"notification\"})},views:function(){return _.filter(this.batch,{type:\"view\"})},clientRequests:function(){return _.filter(this.batch,{type:\"client_request\"})},queriesSummary:function(){return{time:_.reduce(this.queries,(function(e,t){return e+parseFloat(t.content.time)}),0).toFixed(2),duplicated:this.queries.length-_.size(_.groupBy(this.queries,(function(e){return\"\".concat(e.content.hash,\"-\").concat(e.content.connection)})))}},tabs:function(){return _.filter([{title:\"Exceptions\",type:\"exceptions\",count:this.exceptions.length},{title:\"Logs\",type:\"logs\",count:this.logs.length},{title:\"Views\",type:\"views\",count:this.views.length},{title:\"Queries\",type:\"queries\",count:this.queries.length},{title:\"Models\",type:\"models\",count:this.models.length},{title:\"Gates\",type:\"gates\",count:this.gates.length},{title:\"Jobs\",type:\"jobs\",count:this.jobs.length},{title:\"Mail\",type:\"mails\",count:this.mails.length},{title:\"Notifications\",type:\"notifications\",count:this.notifications.length},{title:\"Events\",type:\"events\",count:this.events.length},{title:\"Cache\",type:\"cache\",count:this.cache.length},{title:\"Redis\",type:\"redis\",count:this.redis.length},{title:\"HTTP Client\",type:\"client_requests\",count:this.clientRequests.length}],(function(e){return e.count>0}))},separateTabs:function(){return _.slice(this.tabs,0,7)},dropdownTabs:function(){return _.slice(this.tabs,7,10)},dropdownTabSelected:function(){return _.includes(_.map(this.dropdownTabs,\"type\"),this.currentTab)}}};var p=n(3379),M=n.n(p),b=n(5802),c={insert:\"head\",singleton:!1};M()(b.Z,c);b.Z.locals;const z=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return e.hasRelatedEntries?t(\"div\",{staticClass:\"card overflow-hidden mt-5\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[e._l(e.separateTabs,(function(n){return t(\"li\",{staticClass:\"nav-item\"},[n.count?t(\"a\",{staticClass:\"nav-link\",class:{active:e.currentTab==n.type},attrs:{href:\"#\"},on:{click:function(t){return t.preventDefault(),e.activateTab(n.type)}}},[e._v(\"\\n                \"+e._s(n.title)+\" (\"+e._s(n.count)+\")\\n            \")]):e._e()])})),e._v(\" \"),e.dropdownTabs.length?t(\"li\",{staticClass:\"nav-item dropdown\"},[t(\"a\",{staticClass:\"nav-link dropdown-toggle\",class:{active:e.dropdownTabSelected},attrs:{\"data-toggle\":\"dropdown\",href:\"#\",role:\"button\",\"aria-haspopup\":\"true\",\"aria-expanded\":\"false\"}},[e._v(\"More\")]),e._v(\" \"),t(\"div\",{staticClass:\"dropdown-menu\"},e._l(e.dropdownTabs,(function(n){return t(\"a\",{staticClass:\"dropdown-item\",class:{active:e.currentTab==n.type},attrs:{href:\"#\"},on:{click:function(t){return t.preventDefault(),e.activateTab(n.type)}}},[e._v(e._s(n.title)+\" (\"+e._s(n.count)+\")\")])})),0)]):e._e()],2),e._v(\" \"),t(\"div\",[t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"exceptions\"==e.currentTab&&e.exceptions.length,expression:\"currentTab=='exceptions' && exceptions.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(0),e._v(\" \"),t(\"tbody\",e._l(e.exceptions,(function(n){return t(\"tr\",[t(\"td\",{attrs:{title:n.content.class}},[e._v(\"\\n                        \"+e._s(e.truncate(n.content.class,70))),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted text-break\"},[e._v(e._s(e.truncate(n.content.message,200)))])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"exception-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"logs\"==e.currentTab&&e.logs.length,expression:\"currentTab=='logs' && logs.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(1),e._v(\" \"),t(\"tbody\",e._l(e.logs,(function(n){return t(\"tr\",[t(\"td\",{attrs:{title:n.content.message}},[e._v(e._s(e.truncate(n.content.message,90)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.logLevelClass(n.content.level)},[e._v(\"\\n                        \"+e._s(n.content.level)+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"log-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"queries\"==e.currentTab&&e.queries.length,expression:\"currentTab=='queries' && queries.length\"}],staticClass:\"table table-hover mb-0\"},[t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Query\"),t(\"br\"),t(\"small\",[e._v(e._s(e.queries.length)+\" queries, \"+e._s(e.queriesSummary.duplicated)+\" of which are duplicated.\")])]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\"},[e._v(\"Duration\"),t(\"br\"),t(\"small\",[e._v(e._s(e.queriesSummary.time)+\"ms\")])]),e._v(\" \"),t(\"th\")])]),e._v(\" \"),t(\"tbody\",e._l(e.queries,(function(n){return t(\"tr\",[t(\"td\",{attrs:{title:n.content.sql}},[t(\"code\",[e._v(e._s(e.truncate(n.content.sql,110)))])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right\"},[n.content.slow?t(\"span\",{staticClass:\"badge badge-danger\"},[e._v(\"\\n                        \"+e._s(n.content.time)+\"ms\\n                    \")]):t(\"span\",{staticClass:\"text-muted\"},[e._v(\"\\n                        \"+e._s(n.content.time)+\"ms\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"query-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"models\"==e.currentTab&&e.models.length,expression:\"currentTab=='models' && models.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(2),e._v(\" \"),t(\"tbody\",e._l(e.models,(function(n){return t(\"tr\",[t(\"td\",{attrs:{title:n.content.model}},[e._v(e._s(e.truncate(n.content.model,100)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.modelActionClass(n.content.action)},[e._v(\"\\n                        \"+e._s(n.content.action)+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"model-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"gates\"==e.currentTab&&e.gates.length,expression:\"currentTab=='gates' && gates.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(3),e._v(\" \"),t(\"tbody\",e._l(e.gates,(function(n){return t(\"tr\",[t(\"td\",{attrs:{title:n.content.ability}},[e._v(e._s(e.truncate(n.content.ability,80)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.gateResultClass(n.content.result)},[e._v(\"\\n                        \"+e._s(n.content.result)+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"gate-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"jobs\"==e.currentTab&&e.jobs.length,expression:\"currentTab=='jobs' && jobs.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(4),e._v(\" \"),t(\"tbody\",e._l(e.jobs,(function(n){return t(\"tr\",[t(\"td\",[t(\"span\",{attrs:{title:n.content.name}},[e._v(e._s(e.truncate(n.content.name,68)))]),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\"},[e._v(\"\\n                        Connection: \"+e._s(n.content.connection)+\" | Queue: \"+e._s(n.content.queue)+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.jobStatusClass(n.content.status)},[e._v(\"\\n                        \"+e._s(n.content.status)+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"job-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"events\"==e.currentTab&&e.events.length,expression:\"currentTab=='events' && events.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(5),e._v(\" \"),t(\"tbody\",e._l(e.events,(function(n){return t(\"tr\",[t(\"td\",{attrs:{title:n.content.name}},[e._v(\"\\n                    \"+e._s(e.truncate(n.content.name,80))+\"\\n\\n                    \"),n.content.broadcast?t(\"span\",{staticClass:\"badge badge-info ml-2\"},[e._v(\"\\n                        Broadcast\\n                    \")]):e._e()]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[e._v(e._s(n.content.listeners.length))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"event-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"cache\"==e.currentTab&&e.cache.length,expression:\"currentTab=='cache' && cache.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(6),e._v(\" \"),t(\"tbody\",e._l(e.cache,(function(n){return t(\"tr\",[t(\"td\",{attrs:{title:n.content.key}},[e._v(e._s(e.truncate(n.content.key,100)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.cacheActionTypeClass(n.content.type)},[e._v(\"\\n                        \"+e._s(n.content.type)+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"cache-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"redis\"==e.currentTab&&e.redis.length,expression:\"currentTab=='redis' && redis.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(7),e._v(\" \"),t(\"tbody\",e._l(e.redis,(function(n){return t(\"tr\",[t(\"td\",{attrs:{title:n.content.command}},[e._v(e._s(e.truncate(n.content.command,100)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[e._v(e._s(n.content.time)+\"ms\")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"redis-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"mails\"==e.currentTab&&e.mails.length,expression:\"currentTab=='mails' && mails.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(8),e._v(\" \"),t(\"tbody\",e._l(e.mails,(function(n){return t(\"tr\",[t(\"td\",[t(\"span\",{attrs:{title:n.content.mailable}},[e._v(e._s(e.truncate(n.content.mailable||\"-\",70)))]),e._v(\" \"),n.content.queued?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                        Queued\\n                    \")]):e._e(),e._v(\" \"),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\",attrs:{title:n.content.subject}},[e._v(\"\\n                        Subject: \"+e._s(e.truncate(n.content.subject,90))+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"mail-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"notifications\"==e.currentTab&&e.notifications.length,expression:\"currentTab=='notifications' && notifications.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(9),e._v(\" \"),t(\"tbody\",e._l(e.notifications,(function(n){return t(\"tr\",[t(\"td\",[t(\"span\",{attrs:{title:n.content.notification}},[e._v(e._s(e.truncate(n.content.notification||\"-\",70)))]),e._v(\" \"),n.content.queued?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                        Queued\\n                    \")]):e._e(),e._v(\" \"),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\",attrs:{title:n.content.notifiable}},[e._v(\"\\n                        Recipient: \"+e._s(e.truncate(n.content.notifiable,90))+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(e._s(e.truncate(n.content.channel,20)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"notification-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"views\"==e.currentTab&&e.views.length,expression:\"currentTab=='views' && views.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(10),e._v(\" \"),t(\"tbody\",e._l(e.views,(function(n){return t(\"tr\",[t(\"td\",[e._v(\"\\n                    \"+e._s(n.content.name)+\" \"),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\"},[e._v(e._s(e.truncate(n.content.path,100)))])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[e._v(\"\\n                    \"+e._s(n.content.composers?n.content.composers.length:0)+\"\\n                \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"view-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)]),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"client_requests\"==e.currentTab&&e.clientRequests.length,expression:\"currentTab=='client_requests' && clientRequests.length\"}],staticClass:\"table table-hover mb-0\"},[e._m(11),e._v(\" \"),t(\"tbody\",e._l(e.clientRequests,(function(n){return t(\"tr\",[t(\"td\",{staticClass:\"table-fit pr-0\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestMethodClass(n.content.method)},[e._v(\"\\n                        \"+e._s(n.content.method)+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{attrs:{title:n.content.uri}},[e._v(e._s(e.truncate(n.content.uri,60)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestStatusClass(void 0!==n.content.response_status?n.content.response_status:null)},[e._v(\"\\n                        \"+e._s(void 0!==n.content.response_status?n.content.response_status:\"N/A\")+\"\\n                    \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\",attrs:{\"data-timeago\":n.created_at,title:n.created_at}},[e._v(\"\\n                    \"+e._s(e.timeAgo(n.created_at))+\"\\n                \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"client-request-preview\",params:{id:n.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)])})),0)])])]):e._e()}),[function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Message\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Message\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Level\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Model\")]),e._v(\" \"),t(\"th\",[e._v(\"Action\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Ability\")]),e._v(\" \"),t(\"th\",[e._v(\"Result\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Job\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Status\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Name\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\"},[e._v(\"Listeners\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Key\")]),e._v(\" \"),t(\"th\",[e._v(\"Action\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Command\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\"},[e._v(\"Duration\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Mailable\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Notification\")]),e._v(\" \"),t(\"th\",[e._v(\"Channel\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Name\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\"},[e._v(\"Composers\")]),e._v(\" \"),t(\"th\")])])},function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Verb\")]),e._v(\" \"),t(\"th\",[e._v(\"URI\")]),e._v(\" \"),t(\"th\",[e._v(\"Status\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\"},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\")])])}],!1,null,\"d49b0942\",null).exports},7076:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>b});var o=n(6486),p=n.n(o);const M={props:[\"trace\"],data:function(){return{minimumLines:5,showAll:!1}},computed:{lines:function(){return this.showAll?p().take(this.trace,1e3):p().take(this.trace,this.minimumLines)}}};const b=(0,n(1900).Z)(M,(function(){var e=this,t=e._self._c;return t(\"table\",{staticClass:\"table mb-0\"},[t(\"tbody\",[e._l(e.lines,(function(n){return t(\"tr\",[t(\"td\",{staticClass:\"card-bg-secondary\"},[t(\"code\",[e._v(e._s(n.file)+\":\"+e._s(n.line))])])])})),e._v(\" \"),e.showAll?e._e():t(\"tr\",[t(\"td\",{staticClass:\"card-bg-secondary\"},[t(\"a\",{attrs:{href:\"*\"},on:{click:function(t){t.preventDefault(),e.showAll=!0}}},[e._v(\"Show All\")])])])],2)])}),[],!1,null,\"c2d498e6\",null).exports},7374:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Batches\",resource:\"batches\",\"hide-search\":\"true\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[t(\"span\",{attrs:{title:n.entry.content.name}},[e._v(e._s(e.truncate(n.entry.content.name||n.entry.content.id,68)))]),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\"},[e._v(\"\\n                Connection: \"+e._s(n.entry.content.connection)+\" | Queue: \"+e._s(n.entry.content.queue)+\"\\n            \")])]),e._v(\" \"),t(\"td\",[n.entry.content.failedJobs>0&&n.entry.content.progress<100?t(\"small\",{staticClass:\"badge badge-danger badge-sm\"},[e._v(\"\\n                Failures\\n            \")]):e._e(),e._v(\" \"),100==n.entry.content.progress?t(\"small\",{staticClass:\"badge badge-success badge-sm\"},[e._v(\"\\n                Finished\\n            \")]):e._e(),e._v(\" \"),0==n.entry.content.totalJobs||n.entry.content.pendingJobs>0&&!n.entry.content.failedJobs?t(\"small\",{staticClass:\"badge badge-secondary badge-sm\"},[e._v(\"\\n                Pending\\n            \")]):e._e()]),e._v(\" \"),t(\"td\",{staticClass:\"text-right text-muted\"},[e._v(e._s(n.entry.content.totalJobs))]),e._v(\" \"),t(\"td\",{staticClass:\"text-right text-muted\"},[e._v(e._s(n.entry.content.progress)+\"%\")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"batch-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Batch\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Status\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Size\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Completion\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},8159:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});n(9669);const o={components:{},mixins:[n(601).Z],data:function(){return{entry:null,batch:[],currentTab:\"data\"}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Batch Details\",resource:\"batches\",id:e.$route.params.id,\"entry-point\":\"true\"},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Status\")]),e._v(\" \"),t(\"td\",[n.entry.content.failedJobs>0&&n.entry.content.progress<100?t(\"small\",{staticClass:\"badge badge-danger badge-sm\"},[e._v(\"\\n                    Failures\\n                \")]):e._e(),e._v(\" \"),100==n.entry.content.progress?t(\"small\",{staticClass:\"badge badge-success badge-sm\"},[e._v(\"\\n                    Finished\\n                \")]):e._e(),e._v(\" \"),0==n.entry.content.totalJobs||n.entry.content.pendingJobs>0&&!n.entry.content.failedJobs?t(\"small\",{staticClass:\"badge badge-secondary badge-sm\"},[e._v(\"\\n                    Pending\\n                \")]):e._e()])]),e._v(\" \"),n.entry.content.cancelledAt?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Cancelled At\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(e.localTime(n.entry.content.cancelledAt))+\" (\"+e._s(e.timeAgo(n.entry.content.cancelledAt))+\")\\n            \")])]):e._e(),e._v(\" \"),n.entry.content.finishedAt?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Finished At\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(e.localTime(n.entry.content.finishedAt))+\" (\"+e._s(e.timeAgo(n.entry.content.finishedAt))+\")\\n            \")])]):e._e(),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Batch\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.name||n.entry.content.id)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Connection\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.connection)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Queue\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.queue)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Size\")]),e._v(\" \"),t(\"td\",[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"jobs\",query:{family_hash:n.entry.family_hash}}}},[e._v(\"\\n                    \"+e._s(n.entry.content.totalJobs)+\" Jobs\\n                \")])],1)]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Pending\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.pendingJobs)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Progress\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.progress)+\"%\\n            \")])])]}}])})}),[],!1,null,\"6f82c40a\",null).exports},896:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Cache\",resource:\"cache\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[e._v(e._s(e.truncate(n.entry.content.key,80)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.cacheActionTypeClass(n.entry.content.type)},[e._v(\"\\n                \"+e._s(n.entry.content.type)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"cache-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Key\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Action\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},2246:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z],data:function(){return{entry:null,batch:[]}},methods:{formatExpiration:function(e){return e+\" seconds\"}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Cache Details\",resource:\"cache\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Action\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.cacheActionTypeClass(n.entry.content.type)},[e._v(\"\\n                    \"+e._s(n.entry.content.type)+\"\\n                \")])])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Key\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.key)+\"\\n            \")])]),e._v(\" \"),n.entry.content.expiration?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Expiration\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(e.formatExpiration(n.entry.content.expiration))+\"\\n            \")])]):e._e()]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[n.entry.content.value?t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link active\"},[e._v(\"Value\")])])]),e._v(\" \"),t(\"pre\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[e._v(e._s(n.entry.content.value))])]):e._e()])}}])})}),[],!1,null,null,null).exports},2935:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"HTTP Client\",resource:\"client-requests\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",{staticClass:\"table-fit pr-0\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestMethodClass(n.entry.content.method)},[e._v(\"\\n                \"+e._s(n.entry.content.method)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{attrs:{title:n.entry.content.uri}},[e._v(e._s(e.truncate(n.entry.content.uri,60)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestStatusClass(void 0!==n.entry.content.response_status?n.entry.content.response_status:null)},[e._v(\"\\n                \"+e._s(void 0!==n.entry.content.response_status?n.entry.content.response_status:\"N/A\")+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[n.entry.content.duration?t(\"span\",[e._v(e._s(n.entry.content.duration)+\"ms\")]):t(\"span\",[e._v(\"-\")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"client-request-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Verb\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"URI\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Status\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Duration\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},9101:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z],data:function(){return{entry:null,batch:[],currentRequestTab:\"payload\",currentResponseTab:\"response\"}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"HTTP Client Request Details\",resource:\"client-requests\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Method\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestMethodClass(n.entry.content.method)},[e._v(\"\\n                \"+e._s(n.entry.content.method)+\"\\n            \")])])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"URI\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.uri)+\"\\n        \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Status\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestStatusClass(void 0!==n.entry.content.response_status?n.entry.content.response_status:null)},[e._v(\"\\n                \"+e._s(void 0!==n.entry.content.response_status?n.entry.content.response_status:\"N/A\")+\"\\n            \")])])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Duration\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.duration||\"-\")+\"ms\\n        \")])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"payload\"==e.currentRequestTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentRequestTab=\"payload\"}}},[e._v(\"Payload\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"headers\"==e.currentRequestTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentRequestTab=\"headers\"}}},[e._v(\"Headers\")])])]),e._v(\" \"),t(\"div\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content[e.currentRequestTab]}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content[e.currentRequestTab]}})],1)],1)]),e._v(\" \"),n.entry.content.response_status?t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"response\"==e.currentResponseTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentResponseTab=\"response\"}}},[e._v(\"Response\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"headers\"==e.currentResponseTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentResponseTab=\"headers\"}}},[e._v(\"Headers\")])])]),e._v(\" \"),t(\"div\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[\"response\"==e.currentResponseTab?[t(\"copy-clipboard\",{attrs:{data:n.entry.content.response}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.response}})],1)]:e._e(),e._v(\" \"),\"headers\"==e.currentResponseTab?[t(\"copy-clipboard\",{attrs:{data:n.entry.content.response_headers}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.response_headers}})],1)]:e._e()],2)]):e._e()])}}])})}),[],!1,null,null,null).exports},7210:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Commands\",resource:\"commands\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",{attrs:{title:n.entry.content.command}},[t(\"code\",[e._v(e._s(e.truncate(n.entry.content.command,90)))])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-center text-muted\"},[e._v(e._s(n.entry.content.exit_code))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"command-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Command\")]),e._v(\" \"),t(\"th\",{staticClass:\"table-fit\",attrs:{scope:\"col\"}},[e._v(\"Exit Code\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},1241:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});n(9669);const o={data:function(){return{entry:null,batch:[],currentTab:\"arguments\"}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Command Details\",resource:\"commands\",id:e.$route.params.id,\"entry-point\":\"true\"},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Command\")]),e._v(\" \"),t(\"td\",[t(\"code\",[e._v(e._s(n.entry.content.command))])])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Exit Code\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.exit_code)+\"\\n            \")])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"arguments\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"arguments\"}}},[e._v(\"Arguments\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"options\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"options\"}}},[e._v(\"Options\")])])]),e._v(\" \"),t(\"div\",[t(\"div\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content[e.currentTab]}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content[e.currentTab]}})],1)],1)])]),e._v(\" \"),t(\"related-entries\",{attrs:{entry:e.entry,batch:e.batch}})],1)}}])})}),[],!1,null,null,null).exports},7208:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>i});var o=n(9669),p=n.n(o);function M(e){var t=e.createElement(\"style\"),n=/([.*+?^${}()|\\[\\]\\/\\\\])/g,o=/\\bsf-dump-\\d+-ref[012]\\w+\\b/,p=0<=navigator.platform.toUpperCase().indexOf(\"MAC\")?\"Cmd\":\"Ctrl\",M=function(e,t,n){e.addEventListener(t,n,!1)};function b(t,n){var o,p,M=t.nextSibling||{},b=M.className;if(/\\bsf-dump-compact\\b/.test(b))o=\"▼\",p=\"sf-dump-expanded\";else{if(!/\\bsf-dump-expanded\\b/.test(b))return!1;o=\"▶\",p=\"sf-dump-compact\"}if(e.createEvent&&M.dispatchEvent){var c=e.createEvent(\"Event\");c.initEvent(\"sf-dump-expanded\"===p?\"sfbeforedumpexpand\":\"sfbeforedumpcollapse\",!0,!1),M.dispatchEvent(c)}if(t.lastChild.innerHTML=o,M.className=M.className.replace(/\\bsf-dump-(compact|expanded)\\b/,p),n)try{for(t=M.querySelectorAll(\".\"+b),M=0;M<t.length;++M)-1==t[M].className.indexOf(p)&&(t[M].className=p,t[M].previousSibling.lastChild.innerHTML=o)}catch(e){}return!0}function c(e,t){var n=(e.nextSibling||{}).className;return!!/\\bsf-dump-compact\\b/.test(n)&&(b(e,t),!0)}function z(e){var t=e.querySelector(\"a.sf-dump-toggle\");return!!t&&(function(e,t){var n=(e.nextSibling||{}).className;!!/\\bsf-dump-expanded\\b/.test(n)&&b(e,t)}(t,!0),c(t),!0)}function r(e){Array.from(e.querySelectorAll(\".sf-dump-str, .sf-dump-key, .sf-dump-public, .sf-dump-protected, .sf-dump-private\")).forEach((function(e){e.className=e.className.replace(/\\bsf-dump-highlight\\b/,\"\"),e.className=e.className.replace(/\\bsf-dump-highlight-active\\b/,\"\")}))}return(e.documentElement.firstElementChild||e.documentElement.children[0]).appendChild(t),e.addEventListener||(M=function(e,t,n){e.attachEvent(\"on\"+t,(function(e){e.preventDefault=function(){e.returnValue=!1},e.target=e.srcElement,n(e)}))}),function(a,i){a=e.getElementById(a);for(var O,s,A=new RegExp(\"^(\"+(a.getAttribute(\"data-indent-pad\")||\"  \").replace(n,\"\\\\$1\")+\")+\",\"m\"),u={maxDepth:1,maxStringLength:160,fileLinkFormat:!1},d=a.getElementsByTagName(\"A\"),l=d.length,f=0,q=[];f<l;)q.push(d[f++]);for(f in i)u[f]=i[f];function W(e,t){M(a,e,(function(e,n){\"A\"==e.target.tagName?t(e.target,e):\"A\"==e.target.parentNode.tagName?t(e.target.parentNode,e):(n=(n=/\\bsf-dump-ellipsis\\b/.test(e.target.className)?e.target.parentNode:e.target).nextElementSibling)&&\"A\"==n.tagName&&(/\\bsf-dump-toggle\\b/.test(n.className)||(n=n.nextElementSibling||n),t(n,e,!0))}))}function h(e){return e.ctrlKey||e.metaKey}function v(e){return\"concat(\"+e.match(/[^'\"]+|['\"]/g).map((function(e){return\"'\"==e?'\"\\'\"':'\"'==e?\"'\\\"'\":\"'\"+e+\"'\"})).join(\",\")+\", '')\"}function R(e){return\"contains(concat(' ', normalize-space(@class), ' '), ' \"+e+\" ')\"}for(M(a,\"mouseover\",(function(e){\"\"!=t.innerHTML&&(t.innerHTML=\"\")})),W(\"mouseover\",(function(e,n,p){if(p)n.target.style.cursor=\"pointer\";else if(e=o.exec(e.className))try{t.innerHTML=\"pre.sf-dump .\"+e[0]+\"{background-color: #B729D9; color: #FFF !important; border-radius: 2px}\"}catch(n){}})),W(\"click\",(function(t,o,p){if(/\\bsf-dump-toggle\\b/.test(t.className)){if(o.preventDefault(),!b(t,h(o))){var M=e.getElementById(t.getAttribute(\"href\").substr(1)),c=M.previousSibling,z=M.parentNode,r=t.parentNode;r.replaceChild(M,t),z.replaceChild(t,c),r.insertBefore(c,M),z=z.firstChild.nodeValue.match(A),r=r.firstChild.nodeValue.match(A),z&&r&&z[0]!==r[0]&&(M.innerHTML=M.innerHTML.replace(new RegExp(\"^\"+z[0].replace(n,\"\\\\$1\"),\"mg\"),r[0])),/\\bsf-dump-compact\\b/.test(M.className)&&b(c,h(o))}if(p);else if(e.getSelection)try{e.getSelection().removeAllRanges()}catch(o){e.getSelection().empty()}else e.selection.empty()}else/\\bsf-dump-str-toggle\\b/.test(t.className)&&(o.preventDefault(),(o=t.parentNode.parentNode).className=o.className.replace(/\\bsf-dump-str-(expand|collapse)\\b/,t.parentNode.className))})),l=(d=a.getElementsByTagName(\"SAMP\")).length,f=0;f<l;)q.push(d[f++]);for(l=q.length,f=0;f<l;++f)if(\"SAMP\"==(d=q[f]).tagName){\"A\"!=(W=d.previousSibling||{}).tagName?((W=e.createElement(\"A\")).className=\"sf-dump-ref\",d.parentNode.insertBefore(W,d)):W.innerHTML+=\" \",W.title=(W.title?W.title+\"\\n[\":\"[\")+p+\"+click] Expand all children\",W.innerHTML+=\"<span>▼</span>\",W.className+=\" sf-dump-toggle\",i=1,\"sf-dump\"!=d.parentNode.className&&(i+=d.parentNode.getAttribute(\"data-depth\")/1),d.setAttribute(\"data-depth\",i);var m=d.className;d.className=\"sf-dump-expanded\",(m?\"sf-dump-expanded\"!==m:i>u.maxDepth)&&b(W)}else if(/\\bsf-dump-ref\\b/.test(d.className)&&(W=d.getAttribute(\"href\"))&&(W=W.substr(1),d.className+=\" \"+W,/[\\[{]$/.test(d.previousSibling.nodeValue))){W=W!=d.nextSibling.id&&e.getElementById(W);try{O=W.nextSibling,d.appendChild(W),O.parentNode.insertBefore(W,O),/^[@#]/.test(d.innerHTML)?d.innerHTML+=\" <span>▶</span>\":(d.innerHTML=\"<span>▶</span>\",d.className=\"sf-dump-ref\"),d.className+=\" sf-dump-toggle\"}catch(e){\"&\"==d.innerHTML.charAt(0)&&(d.innerHTML=\"…\",d.className=\"sf-dump-ref\")}}if(e.evaluate&&Array.from&&a.children.length>1){var g=function(e){var t,n,o=e.current();o&&(!function(e){for(var t,n=[];(e=e.parentNode||{})&&(t=e.previousSibling)&&\"A\"===t.tagName;)n.push(t);0!==n.length&&n.forEach((function(e){c(e)}))}(o),function(e,t,n){r(e),Array.from(n||[]).forEach((function(e){/\\bsf-dump-highlight\\b/.test(e.className)||(e.className=e.className+\" sf-dump-highlight\")})),/\\bsf-dump-highlight-active\\b/.test(t.className)||(t.className=t.className+\" sf-dump-highlight-active\")}(a,o,e.nodes),\"scrollIntoView\"in o&&(o.scrollIntoView(!0),t=o.getBoundingClientRect(),n=_.getBoundingClientRect(),t.top<n.top+n.height&&window.scrollBy(0,-(n.top+n.height+5)))),T.textContent=(e.isEmpty()?0:e.idx+1)+\" of \"+e.count()};a.setAttribute(\"tabindex\",0);var L=function(){this.nodes=[],this.idx=0};L.prototype={next:function(){return this.isEmpty()||(this.idx=this.idx<this.nodes.length-1?this.idx+1:0),this.current()},previous:function(){return this.isEmpty()||(this.idx=this.idx>0?this.idx-1:this.nodes.length-1),this.current()},isEmpty:function(){return 0===this.count()},current:function(){return this.isEmpty()?null:this.nodes[this.idx]},reset:function(){this.nodes=[],this.idx=0},count:function(){return this.nodes.length}};var _=e.createElement(\"div\");_.className=\"sf-dump-search-wrapper sf-dump-search-hidden\",_.innerHTML='\\n                <input type=\"text\" class=\"sf-dump-search-input\">\\n                <span class=\"sf-dump-search-count\">0 of 0</span>\\n                <button type=\"button\" class=\"sf-dump-search-input-previous\" tabindex=\"-1\">\\n                    <svg viewBox=\"0 0 1792 1792\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1683 1331l-166 165q-19 19-45 19t-45-19L896 965l-531 531q-19 19-45 19t-45-19l-166-165q-19-19-19-45.5t19-45.5l742-741q19-19 45-19t45 19l742 741q19 19 19 45.5t-19 45.5z\"/></svg>\\n                </button>\\n                <button type=\"button\" class=\"sf-dump-search-input-next\" tabindex=\"-1\">\\n                    <svg viewBox=\"0 0 1792 1792\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1683 808l-742 741q-19 19-45 19t-45-19L109 808q-19-19-19-45.5t19-45.5l166-165q19-19 45-19t45 19l531 531 531-531q19-19 45-19t45 19l166 165q19 19 19 45.5t-19 45.5z\"/></svg>\\n                </button>\\n            ',a.insertBefore(_,a.firstChild);var N=new L,y=_.querySelector(\".sf-dump-search-input\"),T=_.querySelector(\".sf-dump-search-count\"),E=0,B=\"\";M(y,\"keyup\",(function(t){var n=t.target.value;n!==B&&(B=n,clearTimeout(E),E=setTimeout((function(){if(N.reset(),z(a),r(a),\"\"!==n){for(var t,o=[\"sf-dump-str\",\"sf-dump-key\",\"sf-dump-public\",\"sf-dump-protected\",\"sf-dump-private\"].map(R).join(\" or \"),p=e.evaluate(\".//span[\"+o+\"][contains(translate(child::text(), \"+v(n.toUpperCase())+\", \"+v(n.toLowerCase())+\"), \"+v(n.toLowerCase())+\")]\",a,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);t=p.iterateNext();)N.nodes.push(t);g(N)}else T.textContent=\"0 of 0\"}),400))})),Array.from(_.querySelectorAll(\".sf-dump-search-input-next, .sf-dump-search-input-previous\")).forEach((function(e){M(e,\"click\",(function(e){e.preventDefault(),-1!==e.target.className.indexOf(\"next\")?N.next():N.previous(),y.focus(),z(a),g(N)}))})),M(a,\"keydown\",(function(e){var t=!/\\bsf-dump-search-hidden\\b/.test(_.className);if(114===e.keyCode&&!t||h(e)&&70===e.keyCode){if(70===e.keyCode&&document.activeElement===y)return;e.preventDefault(),_.className=_.className.replace(/\\bsf-dump-search-hidden\\b/,\"\"),y.focus()}else t&&(27===e.keyCode?(_.className+=\" sf-dump-search-hidden\",e.preventDefault(),r(a),y.value=\"\"):(h(e)&&71===e.keyCode||13===e.keyCode||114===e.keyCode)&&(e.preventDefault(),e.shiftKey?N.previous():N.next(),z(a),g(N)))}))}if(!(0>=u.maxStringLength))try{for(l=(d=a.querySelectorAll(\".sf-dump-str\")).length,f=0,q=[];f<l;)q.push(d[f++]);for(l=q.length,f=0;f<l;++f)0<(i=(O=(d=q[f]).innerText||d.textContent).length-u.maxStringLength)&&(s=d.innerHTML,d[d.innerText?\"innerText\":\"textContent\"]=O.substring(0,u.maxStringLength),d.className+=\" sf-dump-str-collapse\",d.innerHTML=\"<span class=sf-dump-str-collapse>\"+s+'<a class=\"sf-dump-ref sf-dump-str-toggle\" title=\"Collapse\"> ◀</a></span><span class=sf-dump-str-expand>'+d.innerHTML+'<a class=\"sf-dump-ref sf-dump-str-toggle\" title=\"'+i+' remaining characters\"> ▶</a></span>')}catch(e){}}}const b={data:function(){return{dump:null,entries:[],ready:!1,newEntriesTimeout:null,newEntriesTimer:2e3,recordingStatus:\"enabled\",sfDump:null,triggered:[]}},mounted:function(){document.title=\"Dumps - Telescope\",this.initDumperJs(),this.loadEntries()},destroyed:function(){clearTimeout(this.newEntriesTimeout)},methods:{loadEntries:function(){var e=this;p().post(Telescope.basePath+\"/telescope-api/dumps\").then((function(t){e.ready=!0,e.dump=t.data.dump,e.entries=t.data.entries,e.recordingStatus=t.data.status,e.$nextTick((function(){return e.triggerDumps()})),e.checkForNewEntries()}))},checkForNewEntries:function(){var e=this;this.newEntriesTimeout=setTimeout((function(){p().post(Telescope.basePath+\"/telescope-api/dumps?take=1\").then((function(t){e.recordingStatus=t.data.status,t.data.entries.length&&!e.entries.length||t.data.entries.length&&_.first(t.data.entries).id!==_.first(e.entries).id?e.loadEntries():e.checkForNewEntries()}))}),this.newEntriesTimer)},initDumperJs:function(){this.sfDump=M(document)},triggerDumps:function(){var e=this,t=this.$refs.dumps;t&&t.forEach((function(t){var n=t.children[0].id;e.triggered.includes(n)||(e.sfDump(n),e.triggered.push(n))}))}}};var c=n(3379),z=n.n(c),r=n(7184),a={insert:\"head\",singleton:!1};z()(r.Z,a);r.Z.locals;const i=(0,n(1900).Z)(b,(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"card overflow-hidden\"},[e._m(0),e._v(\" \"),\"enabled\"!==e.recordingStatus?t(\"p\",{staticClass:\"mt-0 mb-0 disabled-watcher\"},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",x:\"0px\",y:\"0px\",width:\"20px\",height:\"20px\",viewBox:\"0 0 90 90\"}},[t(\"path\",{attrs:{fill:\"#FFFFFF\",d:\"M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z\"}})]),e._v(\" \"),\"disabled\"==e.recordingStatus?t(\"span\",{staticClass:\"ml-1\"},[e._v(\"Telescope is currently disabled.\")]):e._e(),e._v(\" \"),\"paused\"==e.recordingStatus?t(\"span\",{staticClass:\"ml-1\"},[e._v(\"Telescope recording is paused.\")]):e._e(),e._v(\" \"),\"off\"==e.recordingStatus?t(\"span\",{staticClass:\"ml-1\"},[e._v(\"This watcher is turned off.\")]):e._e(),e._v(\" \"),\"wrong-cache\"==e.recordingStatus?t(\"span\",{staticClass:\"ml-1\"},[e._v(\"The 'array' cache cannot be used. Please use a persistent cache.\")]):e._e()]):e._e(),e._v(\" \"),e.ready?e._e():t(\"div\",{staticClass:\"d-flex align-items-center justify-content-center card-bg-secondary p-5 bottom-radius\"},[t(\"svg\",{staticClass:\"icon spin mr-2 fill-text-color\",attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{d:\"M12 10a2 2 0 0 1-3.41 1.41A2 2 0 0 1 10 8V0a9.97 9.97 0 0 1 10 10h-8zm7.9 1.41A10 10 0 1 1 8.59.1v2.03a8 8 0 1 0 9.29 9.29h2.02zm-4.07 0a6 6 0 1 1-7.25-7.25v2.1a3.99 3.99 0 0 0-1.4 6.57 4 4 0 0 0 6.56-1.42h2.1z\"}})]),e._v(\" \"),t(\"span\",[e._v(\"Scanning...\")])]),e._v(\" \"),e.ready&&0==e.entries.length?t(\"div\",{staticClass:\"d-flex flex-column align-items-center justify-content-center card-bg-secondary p-5 bottom-radius\"},[t(\"svg\",{staticClass:\"fill-text-color\",staticStyle:{width:\"200px\"},attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 60 60\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M7 10h41a11 11 0 0 1 0 22h-8a3 3 0 0 0 0 6h6a6 6 0 1 1 0 12H10a4 4 0 1 1 0-8h2a2 2 0 1 0 0-4H7a5 5 0 0 1 0-10h3a3 3 0 0 0 0-6H7a6 6 0 1 1 0-12zm14 19a1 1 0 0 1-1-1 1 1 0 0 0-2 0 1 1 0 0 1-1 1 1 1 0 0 0 0 2 1 1 0 0 1 1 1 1 1 0 0 0 2 0 1 1 0 0 1 1-1 1 1 0 0 0 0-2zm-5.5-11a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm24 10a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm1 18a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm-14-3a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm22-23a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM33 18a1 1 0 0 1-1-1v-1a1 1 0 0 0-2 0v1a1 1 0 0 1-1 1h-1a1 1 0 0 0 0 2h1a1 1 0 0 1 1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 0-2h-1z\"}})]),e._v(\" \"),t(\"span\",[e._v(\"We didn't find anything - just empty space.\")])]):e._e(),e._v(\" \"),e.dump?t(\"div\",{staticStyle:{display:\"none\"}},[t(\"div\",{domProps:{innerHTML:e._s(e.dump)}})]):e._e(),e._v(\" \"),e.ready&&e.entries.length>0?t(\"div\",{staticClass:\"code-bg\"},[t(\"transition-group\",{attrs:{tag:\"div\",name:\"list\"}},e._l(e.entries,(function(n){return t(\"div\",{key:n.id,staticClass:\"p-3\"},[t(\"div\",{staticClass:\"entryPointDescription d-flex justify-content-between align-items-center\"},[\"request\"==n.content.entry_point_type?t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"request-preview\",params:{id:n.content.entry_point_uuid}}}},[e._v(\"\\n                        Request: \"+e._s(n.content.entry_point_description)+\"\\n                    \")]):e._e(),e._v(\" \"),\"job\"==n.content.entry_point_type?t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"job-preview\",params:{id:n.content.entry_point_uuid}}}},[e._v(\"\\n                        Job: \"+e._s(n.content.entry_point_description)+\"\\n                    \")]):e._e(),e._v(\" \"),\"command\"==n.content.entry_point_type?t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"command-preview\",params:{id:n.content.entry_point_uuid}}}},[e._v(\"\\n                        Command: \"+e._s(n.content.entry_point_description)+\"\\n                    \")]):e._e(),e._v(\" \"),t(\"span\",{staticClass:\"text-white text-monospace\",staticStyle:{\"font-size\":\"12px\"}},[e._v(e._s(e.timeAgo(n.created_at)))])],1),e._v(\" \"),t(\"div\",{ref:\"dumps\",refInFor:!0,staticClass:\"mt-2\",domProps:{innerHTML:e._s(n.content.dump)}})])})),0)],1):e._e()])}),[function(){var e=this._self._c;return e(\"div\",{staticClass:\"card-header d-flex align-items-center justify-content-between\"},[e(\"h2\",{staticClass:\"h6 m-0\"},[this._v(\"Dumps\")])])}],!1,null,null,null).exports},8814:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Events\",resource:\"events\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",{attrs:{title:n.entry.content.name}},[e._v(\"\\n            \"+e._s(e.truncate(n.entry.content.name,80))+\"\\n\\n            \"),n.entry.content.broadcast?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                Broadcast\\n            \")]):e._e()]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[e._v(e._s(n.entry.content.listeners.length))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"event-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Name\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Listeners\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},5701:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={data:function(){return{entry:null,batch:[],currentTab:\"data\"}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Event Details\",resource:\"events\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Event\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.name)+\"\\n\\n                \"),n.entry.content.broadcast?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                    Broadcast\\n                \")]):e._e()])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"data\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"data\"}}},[e._v(\"Event Data\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"listeners\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"listeners\"}}},[e._v(\"Listeners\")])])]),e._v(\" \"),t(\"div\",[t(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"data\"==e.currentTab,expression:\"currentTab=='data'\"}],staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content.payload}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.payload}})],1)],1),e._v(\" \"),t(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"listeners\"==e.currentTab,expression:\"currentTab=='listeners'\"}]},[0===n.entry.content.listeners.length?t(\"p\",{staticClass:\"text-muted m-0 p-4\"},[e._v(\"\\n                        No listeners\\n                    \")]):t(\"table\",{staticClass:\"table mb-0\"},[t(\"tbody\",e._l(n.entry.content.listeners,(function(n){return t(\"tr\",[t(\"td\",{staticClass:\"card-bg-secondary\"},[e._v(\"\\n                                \"+e._s(n.name)+\"\\n\\n                                \"),n.queued?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                                    Queued\\n                                \")]):e._e()])])})),0)])])])])])}}])})}),[],!1,null,null,null).exports},5323:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Exceptions\",resource:\"exceptions\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[e.$route.query.family_hash?e._e():t(\"td\",{attrs:{title:n.entry.content.class}},[e._v(\"\\n            \"+e._s(e.truncate(n.entry.content.class,70))),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\"},[e._v(e._s(e.truncate(n.entry.content.message,100)))])]),e._v(\" \"),e.$route.query.family_hash||e.$route.query.tag?e._e():t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[t(\"span\",[e._v(e._s(n.entry.content.occurrences))])]),e._v(\" \"),e.$route.query.family_hash?t(\"td\",{attrs:{title:n.entry.content.message}},[e._v(\"\\n            \"+e._s(e.truncate(n.entry.content.message,80))),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\"},[n.entry.content.user&&n.entry.content.user.email?t(\"span\",[e._v(\"\\n                    User: \"+e._s(n.entry.content.user.email)+\" (\"+e._s(n.entry.content.user.id)+\")\\n                \")]):t(\"span\",[e._v(\"\\n                    User: N/A\\n                \")])])]):e._e(),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[n.entry.content.resolved_at?t(\"div\",{attrs:{\"data-timeago\":n.entry.content.resolved_at,title:n.entry.content.resolved_at}},[e._v(\"\\n                 \"+e._s(e.timeAgo(n.entry.content.resolved_at))+\"\\n            \")]):e._e(),e._v(\" \"),n.entry.content.resolved_at?e._e():t(\"div\",{staticClass:\"control-action text-center\"},[t(\"svg\",{attrs:{viewBox:\"0 0 20 20\",version:\"1.1\",xmlns:\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\"}},[t(\"path\",{attrs:{fill:\"#ef5753\",d:\"M2.92893219,17.0710678 C6.83417511,20.9763107 13.1658249,20.9763107 17.0710678,17.0710678 C20.9763107,13.1658249 20.9763107,6.83417511 17.0710678,2.92893219 C13.1658249,-0.976310729 6.83417511,-0.976310729 2.92893219,2.92893219 C-0.976310729,6.83417511 -0.976310729,13.1658249 2.92893219,17.0710678 Z M9,5 L11,5 L11,11 L9,11 L9,5 Z M9,13 L11,13 L11,15 L9,15 L9,13 Z\",id:\"Combined-Shape\"}})])])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"exception-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[e.$route.query.family_hash?e._e():t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Type\")]),e._v(\" \"),e.$route.query.family_hash||e.$route.query.tag?e._e():t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"#\")]),e._v(\" \"),e.$route.query.family_hash?t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Message\")]):e._e(),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Resolved\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},8882:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>b});var o=n(9669),p=n.n(o);const M={components:{\"code-preview\":n(8597).Z,\"stack-trace\":n(7076).Z},data:function(){return{entry:null,batch:[],currentTab:\"message\"}},methods:{hasContext:function(){return this.entry.content.hasOwnProperty(\"context\")&&null!==this.entry.content.context},markExceptionAsResolved:function(e){var t=this;this.alertConfirm(\"Are you sure you want to mark this exception as resolved?\",(function(){p().put(Telescope.basePath+\"/telescope-api/exceptions/\"+e.id,{resolved_at:\"now\"}).then((function(e){t.entry=e.data.entry}))}))}}};const b=(0,n(1900).Z)(M,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Exception Details\",resource:\"exceptions\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Type\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.class)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Location\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.file)+\":\"+e._s(n.entry.content.line)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Occurrences\")]),e._v(\" \"),t(\"td\",[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"exceptions\",query:{family_hash:n.entry.family_hash}}}},[e._v(\"\\n                    View Other Occurrences\\n                \")])],1)]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Resolved at\")]),e._v(\" \"),t(\"td\",[e.entry.content.resolved_at?t(\"span\",[e._v(\"\\n                    \"+e._s(e.localTime(e.entry.content.resolved_at))+\" (\"+e._s(e.timeAgo(e.entry.content.resolved_at))+\")\\n                \")]):e._e(),e._v(\" \"),e.entry.content.resolved_at?e._e():t(\"span\",[t(\"button\",{staticClass:\"btn btn-sm btn-success\",on:{click:function(t){return t.preventDefault(),e.markExceptionAsResolved(e.entry)}}},[e._v(\"Mark as resolved\")])])])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{staticClass:\"mt-5\"},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"message\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"message\"}}},[e._v(\"Message\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"location\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"location\"}}},[e._v(\"Location\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.hasContext(),expression:\"hasContext()\"}],staticClass:\"nav-link\",class:{active:\"context\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"context\"}}},[e._v(\"Context\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"trace\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"trace\"}}},[e._v(\"Stacktrace\")])])]),e._v(\" \"),t(\"div\",[t(\"pre\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"message\"==e.currentTab,expression:\"currentTab=='message'\"}],staticClass:\"code-bg p-4 mb-0 text-white\"},[e._v(e._s(n.entry.content.message))]),e._v(\" \"),t(\"code-preview\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"location\"==e.currentTab,expression:\"currentTab=='location'\"}],attrs:{lines:n.entry.content.line_preview,\"highlighted-line\":n.entry.content.line}}),e._v(\" \"),t(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"context\"==e.currentTab,expression:\"currentTab=='context'\"}],staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content.context}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.context}})],1)],1),e._v(\" \"),t(\"stack-trace\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"trace\"==e.currentTab,expression:\"currentTab=='trace'\"}],attrs:{trace:n.entry.content.trace}})],1)])])}}])})}),[],!1,null,\"70e1de6c\",null).exports},4840:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Gates\",resource:\"gates\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[e._v(e._s(e.truncate(n.entry.content.ability,80)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.gateResultClass(n.entry.content.result)},[e._v(\"\\n                \"+e._s(n.entry.content.result)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"gate-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Ability\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Result\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},6581:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z],data:function(){return{entry:null,batch:[]}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Gate Details\",resource:\"gates\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Ability\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.ability)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Result\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.gateResultClass(n.entry.content.result)},[e._v(\"\\n                    \"+e._s(n.entry.content.result)+\"\\n                \")])])]),e._v(\" \"),n.entry.content.file?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Location\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.file)+\":\"+e._s(n.entry.content.line)+\"\\n            \")])]):e._e()]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link active\"},[e._v(\"Arguments\")])])]),e._v(\" \"),t(\"div\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content.arguments}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.arguments}})],1)],1)])])}}])})}),[],!1,null,null,null).exports},558:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Jobs\",resource:\"jobs\",\"show-all-family\":\"true\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[t(\"span\",{attrs:{title:n.entry.content.name}},[e._v(e._s(e.truncate(n.entry.content.name,68)))]),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\"},[e._v(\"\\n                Connection: \"+e._s(n.entry.content.connection)+\" | Queue: \"+e._s(n.entry.content.queue)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.jobStatusClass(n.entry.content.status)},[e._v(\"\\n                \"+e._s(n.entry.content.status)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"job-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Job\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Status\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},4142:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>M});n(9669);var o=n(601);const p={components:{\"code-preview\":n(8597).Z,\"stack-trace\":n(7076).Z},mixins:[o.Z],data:function(){return{entry:null,batch:[],currentTab:\"data\"}}};const M=(0,n(1900).Z)(p,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Job Details\",resource:\"jobs\",id:e.$route.params.id,\"entry-point\":\"true\"},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Status\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.jobStatusClass(n.entry.content.status)},[e._v(\"\\n                    \"+e._s(n.entry.content.status)+\"\\n                \")])])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Job\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.name)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Connection\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.connection)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Queue\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.queue)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Tries\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.tries||\"-\")+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Timeout\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.timeout||\"-\")+\"\\n            \")])]),e._v(\" \"),n.entry.content.data.batchId?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Batch\")]),e._v(\" \"),t(\"td\",[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"batch-preview\",params:{id:n.entry.content.data.batchId}}}},[e._v(\"\\n                    \"+e._s(n.entry.content.data.batchId)+\"\\n                \")])],1)]):e._e()]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"data\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"data\"}}},[e._v(\"Data\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[n.entry.content.exception?t(\"a\",{staticClass:\"nav-link\",class:{active:\"exception\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"exception\"}}},[e._v(\"Exception Message\")]):e._e()]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[n.entry.content.exception?t(\"a\",{staticClass:\"nav-link\",class:{active:\"preview\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"preview\"}}},[e._v(\"Exception Location\")]):e._e()]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[n.entry.content.exception?t(\"a\",{staticClass:\"nav-link\",class:{active:\"trace\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"trace\"}}},[e._v(\"Stacktrace\")]):e._e()])]),e._v(\" \"),t(\"div\",[t(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"data\"==e.currentTab,expression:\"currentTab=='data'\"}],staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content.data}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.data}})],1)],1),e._v(\" \"),n.entry.content.exception?t(\"pre\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"exception\"==e.currentTab,expression:\"currentTab=='exception'\"}],staticClass:\"code-bg p-4 mb-0 text-white\"},[e._v(e._s(n.entry.content.exception.message))]):e._e(),e._v(\" \"),n.entry.content.exception?t(\"stack-trace\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"trace\"==e.currentTab,expression:\"currentTab=='trace'\"}],attrs:{trace:n.entry.content.exception.trace}}):e._e(),e._v(\" \"),n.entry.content.exception?t(\"code-preview\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"preview\"==e.currentTab,expression:\"currentTab=='preview'\"}],attrs:{lines:n.entry.content.exception.line_preview,\"highlighted-line\":n.entry.content.exception.line}}):e._e()],1)]),e._v(\" \"),t(\"related-entries\",{attrs:{entry:e.entry,batch:e.batch}})],1)}}])})}),[],!1,null,\"435ff718\",null).exports},1929:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Logs\",resource:\"logs\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",{attrs:{title:n.entry.content.message}},[e._v(e._s(e.truncate(n.entry.content.message,50)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.logLevelClass(n.entry.content.level)},[e._v(\"\\n                \"+e._s(n.entry.content.level)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"log-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Message\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Level\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},8360:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>M});var o=n(601);const p={components:{\"code-preview\":n(8597).Z,\"stack-trace\":n(7076).Z},mixins:[o.Z],data:function(){return{entry:null,batch:[],currentTab:\"message\"}}};const M=(0,n(1900).Z)(p,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Log Details\",resource:\"logs\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Level\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.logLevelClass(n.entry.content.level)},[e._v(\"\\n                    \"+e._s(n.entry.content.level)+\"\\n                \")])])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{staticClass:\"mt-5\"},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"message\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"message\"}}},[e._v(\"Log Message\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"context\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"context\"}}},[e._v(\"Context\")])])]),e._v(\" \"),t(\"div\",[t(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"message\"==e.currentTab,expression:\"currentTab=='message'\"}]},[t(\"copy-clipboard\",{attrs:{data:n.entry.content.message}},[t(\"pre\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[e._v(e._s(n.entry.content.message))])])],1),e._v(\" \"),t(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"context\"==e.currentTab,expression:\"currentTab=='context'\"}],staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content.context}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.context}})],1)],1)])])])}}])})}),[],!1,null,\"9bb70870\",null).exports},4456:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={methods:{recipientsCount:function(e){return _.union(e.content.to?Object.keys(e.content.to):[],e.content.cc?Object.keys(e.content.cc):[],e.content.bcc?Object.keys(e.content.bcc):[],e.content.replyTo?Object.keys(e.content.replyTo):[]).length}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Mail\",resource:\"mail\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[t(\"span\",{attrs:{title:n.entry.content.mailable}},[e._v(e._s(e.truncate(n.entry.content.mailable||\"-\",70)))]),e._v(\" \"),n.entry.content.queued?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                Queued\\n            \")]):e._e(),e._v(\" \"),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\",attrs:{title:n.entry.content.subject}},[e._v(\"\\n                Subject: \"+e._s(e.truncate(n.entry.content.subject,90))+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[e._v(e._s(e.recipientsCount(n.entry)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"mail-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Mailable\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Recipients\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},7776:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>z});const o={methods:{formatAddresses:function(e){return _.chain(e).map((function(e,t){return(e?\"<\"+e+\"> \":\"\")+t})).join(\", \").value()}},data:function(){return{entry:null,batch:[]}}};var p=n(3379),M=n.n(p),b=n(4287),c={insert:\"head\",singleton:!1};M()(b.Z,c);b.Z.locals;const z=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Mail Details\",resource:\"mail\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Mailable\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.mailable)+\"\\n\\n                \"),n.entry.content.queued?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                    Queued\\n                \")]):e._e()])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"From\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(e.formatAddresses(n.entry.content.from))+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"To\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(e.formatAddresses(n.entry.content.to))+\"\\n            \")])]),e._v(\" \"),n.entry.replyTo?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Reply-To\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(e.formatAddresses(n.entry.content.replyTo))+\"\\n            \")])]):e._e(),e._v(\" \"),n.entry.cc?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"CC\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(e.formatAddresses(n.entry.content.cc))+\"\\n            \")])]):e._e(),e._v(\" \"),n.entry.bcc?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"BCC\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(e.formatAddresses(n.entry.content.bcc))+\"\\n            \")])]):e._e(),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Subject\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.subject)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Download\")]),e._v(\" \"),t(\"td\",[t(\"a\",{attrs:{href:e.Telescope.basePath+\"/telescope-api/mail/\"+e.$route.params.id+\"/download\"}},[e._v(\"Download .eml file\")])])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{staticClass:\"mt-5\"},[t(\"div\",{staticClass:\"card\"},[t(\"iframe\",{attrs:{src:e.Telescope.basePath+\"/telescope-api/mail/\"+e.$route.params.id+\"/preview\",width:\"100%\",height:\"400\"}})])])}}])})}),[],!1,null,\"aee1481a\",null).exports},1556:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Models\",resource:\"models\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[e._v(e._s(e.truncate(n.entry.content.model,70)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.modelActionClass(n.entry.content.action)},[e._v(\"\\n                \"+e._s(n.entry.content.action)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"model-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Model\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Action\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},706:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});n(6486);const o={mixins:[n(601).Z],data:function(){return{entry:null,batch:[]}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Model Action\",resource:\"models\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Model\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.model)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Action\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.modelActionClass(n.entry.content.action)},[e._v(\"\\n                    \"+e._s(n.entry.content.action)+\"\\n                \")])])]),e._v(\" \"),n.entry.content.count?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Hydrated\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.count)+\"\\n            \")])]):e._e()]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[\"deleted\"!=n.entry.content.action&&n.entry.content.changes?t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link active\"},[e._v(\"Changes\")])])]),e._v(\" \"),t(\"div\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content.changes}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.changes}})],1)],1)]):e._e()])}}])})}),[],!1,null,null,null).exports},5505:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>z});var o=n(9755),p=n.n(o),M=n(9669),b=n.n(M);const c={data:function(){return{tags:[],ready:!1,newTag:\"\"}},mounted:function(){var e=this;document.title=\"Monitoring - Telescope\",b().get(Telescope.basePath+\"/telescope-api/monitored-tags\").then((function(t){e.tags=t.data.tags,e.ready=!0}))},methods:{removeTag:function(e){var t=this;this.alertConfirm(\"Are you sure you want to remove this tag?\",(function(){t.tags=_.reject(t.tags,(function(t){return t===e})),b().post(Telescope.basePath+\"/telescope-api/monitored-tags/delete\",{tag:e})}))},openNewTagModal:function(){p()(\"#addTagModel\").modal({backdrop:\"static\"}),p()(\"#newTagInput\").focus()},monitorNewTag:function(){this.newTag.length&&(b().post(Telescope.basePath+\"/telescope-api/monitored-tags\",{tag:this.newTag}),this.tags.push(this.newTag)),p()(\"#addTagModel\").modal(\"hide\"),this.newTag=\"\"},cancelNewTag:function(){p()(\"#addTagModel\").modal(\"hide\"),this.newTag=\"\"}}};const z=(0,n(1900).Z)(c,(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"card\"},[t(\"div\",{staticClass:\"card-header d-flex align-items-center justify-content-between\"},[t(\"h2\",{staticClass:\"h6 m-0\"},[e._v(\"Monitoring\")]),e._v(\" \"),t(\"button\",{staticClass:\"btn btn-primary\",on:{click:function(t){return t.preventDefault(),e.openNewTagModal.apply(null,arguments)}}},[e._v(\"Monitor\")])]),e._v(\" \"),e.ready?e._e():t(\"div\",{staticClass:\"d-flex align-items-center justify-content-center card-bg-secondary p-5 bottom-radius\"},[t(\"svg\",{staticClass:\"icon spin mr-2 fill-text-color\",attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{d:\"M12 10a2 2 0 0 1-3.41 1.41A2 2 0 0 1 10 8V0a9.97 9.97 0 0 1 10 10h-8zm7.9 1.41A10 10 0 1 1 8.59.1v2.03a8 8 0 1 0 9.29 9.29h2.02zm-4.07 0a6 6 0 1 1-7.25-7.25v2.1a3.99 3.99 0 0 0-1.4 6.57 4 4 0 0 0 6.56-1.42h2.1z\"}})]),e._v(\" \"),t(\"span\",[e._v(\"Scanning...\")])]),e._v(\" \"),e.ready&&0==e.tags.length?t(\"div\",{staticClass:\"d-flex align-items-center justify-content-center card-bg-secondary p-5 bottom-radius\"},[t(\"span\",[e._v(\"No tags are currently being monitored.\")])]):e._e(),e._v(\" \"),e.ready&&e.tags.length>0?t(\"table\",{staticClass:\"table table-hover mb-0\"},[e._m(0),e._v(\" \"),t(\"tbody\",e._l(e.tags,(function(n){return t(\"tr\",{key:n.tag},[t(\"td\",[e._v(e._s(e.truncate(n,140)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"a\",{staticClass:\"control-action\",attrs:{href:\"#\"},on:{click:function(t){return t.preventDefault(),e.removeTag(n)}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{d:\"M6 2l2-2h4l2 2h4v2H2V2h4zM3 6h14l-1 14H4L3 6zm5 2v10h1V8H8zm3 0v10h1V8h-1z\"}})])])])])})),0)]):e._e(),e._v(\" \"),t(\"div\",{staticClass:\"modal\",attrs:{id:\"addTagModel\",tabindex:\"-1\",role:\"dialog\",\"aria-labelledby\":\"alertModalLabel\",\"aria-hidden\":\"true\"}},[t(\"div\",{staticClass:\"modal-dialog\",attrs:{role:\"document\"}},[t(\"div\",{staticClass:\"modal-content\"},[t(\"div\",{staticClass:\"modal-header\"},[e._v(\"Monitor New Tag\")]),e._v(\" \"),t(\"div\",{staticClass:\"modal-body\"},[t(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.newTag,expression:\"newTag\"}],staticClass:\"form-control\",attrs:{type:\"text\",placeholder:\"Project:6352\",id:\"newTagInput\"},domProps:{value:e.newTag},on:{keyup:function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"enter\",13,t.key,\"Enter\")?null:e.monitorNewTag.apply(null,arguments)},input:function(t){t.target.composing||(e.newTag=t.target.value)}}})]),e._v(\" \"),t(\"div\",{staticClass:\"modal-footer justify-content-start flex-row-reverse\"},[t(\"button\",{staticClass:\"btn btn-primary\",on:{click:e.monitorNewTag}},[e._v(\"\\n                        Monitor\\n                    \")]),e._v(\" \"),t(\"button\",{staticClass:\"btn\",on:{click:e.cancelNewTag}},[e._v(\"\\n                        Cancel\\n                    \")])])])])])])}),[function(){var e=this,t=e._self._c;return t(\"thead\",[t(\"th\",[e._v(\"Tag\")]),e._v(\" \"),t(\"th\")])}],!1,null,null,null).exports},624:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Notifications\",resource:\"notifications\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[t(\"span\",{attrs:{title:n.entry.content.notification}},[e._v(e._s(e.truncate(n.entry.content.notification||\"-\",70)))]),e._v(\" \"),n.entry.content.queued?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                Queued\\n            \")]):e._e(),e._v(\" \"),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\",attrs:{title:n.entry.content.notifiable}},[e._v(\"\\n                Recipient: \"+e._s(e.truncate(n.entry.content.notifiable,90))+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(e._s(e.truncate(n.entry.content.channel,20)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"notification-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Notification\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Channel\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},3590:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={data:function(){return{entry:null,batch:[]}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Notification Details\",resource:\"notifications\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Channel\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.channel)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Notification\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.notification)+\"\\n\\n                \"),n.entry.content.queued?t(\"span\",{staticClass:\"badge badge-secondary ml-2\"},[e._v(\"\\n                    Queued\\n                \")]):e._e()])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Notifiable\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.notifiable)+\"\\n            \")])])]}}])})}),[],!1,null,null,null).exports},4652:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Queries\",resource:\"queries\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",{attrs:{title:n.entry.content.sql}},[t(\"code\",[e._v(e._s(e.truncate(n.entry.content.sql,90)))])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[n.entry.content.slow?t(\"span\",{staticClass:\"badge badge-danger\"},[e._v(\"\\n                \"+e._s(n.entry.content.time)+\"ms\\n            \")]):t(\"span\",[e._v(\"\\n                \"+e._s(n.entry.content.time)+\"ms\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"query-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Query\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Duration\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},3992:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>c});var o=n(837);var p=n(4008);o.Z.registerLanguage(\"sql\",(function(e){const t=e.regex,n=e.COMMENT(\"--\",\"$\"),o=[\"true\",\"false\",\"unknown\"],p=[\"bigint\",\"binary\",\"blob\",\"boolean\",\"char\",\"character\",\"clob\",\"date\",\"dec\",\"decfloat\",\"decimal\",\"float\",\"int\",\"integer\",\"interval\",\"nchar\",\"nclob\",\"national\",\"numeric\",\"real\",\"row\",\"smallint\",\"time\",\"timestamp\",\"varchar\",\"varying\",\"varbinary\"],M=[\"abs\",\"acos\",\"array_agg\",\"asin\",\"atan\",\"avg\",\"cast\",\"ceil\",\"ceiling\",\"coalesce\",\"corr\",\"cos\",\"cosh\",\"count\",\"covar_pop\",\"covar_samp\",\"cume_dist\",\"dense_rank\",\"deref\",\"element\",\"exp\",\"extract\",\"first_value\",\"floor\",\"json_array\",\"json_arrayagg\",\"json_exists\",\"json_object\",\"json_objectagg\",\"json_query\",\"json_table\",\"json_table_primitive\",\"json_value\",\"lag\",\"last_value\",\"lead\",\"listagg\",\"ln\",\"log\",\"log10\",\"lower\",\"max\",\"min\",\"mod\",\"nth_value\",\"ntile\",\"nullif\",\"percent_rank\",\"percentile_cont\",\"percentile_disc\",\"position\",\"position_regex\",\"power\",\"rank\",\"regr_avgx\",\"regr_avgy\",\"regr_count\",\"regr_intercept\",\"regr_r2\",\"regr_slope\",\"regr_sxx\",\"regr_sxy\",\"regr_syy\",\"row_number\",\"sin\",\"sinh\",\"sqrt\",\"stddev_pop\",\"stddev_samp\",\"substring\",\"substring_regex\",\"sum\",\"tan\",\"tanh\",\"translate\",\"translate_regex\",\"treat\",\"trim\",\"trim_array\",\"unnest\",\"upper\",\"value_of\",\"var_pop\",\"var_samp\",\"width_bucket\"],b=[\"create table\",\"insert into\",\"primary key\",\"foreign key\",\"not null\",\"alter table\",\"add constraint\",\"grouping sets\",\"on overflow\",\"character set\",\"respect nulls\",\"ignore nulls\",\"nulls first\",\"nulls last\",\"depth first\",\"breadth first\"],c=M,z=[\"abs\",\"acos\",\"all\",\"allocate\",\"alter\",\"and\",\"any\",\"are\",\"array\",\"array_agg\",\"array_max_cardinality\",\"as\",\"asensitive\",\"asin\",\"asymmetric\",\"at\",\"atan\",\"atomic\",\"authorization\",\"avg\",\"begin\",\"begin_frame\",\"begin_partition\",\"between\",\"bigint\",\"binary\",\"blob\",\"boolean\",\"both\",\"by\",\"call\",\"called\",\"cardinality\",\"cascaded\",\"case\",\"cast\",\"ceil\",\"ceiling\",\"char\",\"char_length\",\"character\",\"character_length\",\"check\",\"classifier\",\"clob\",\"close\",\"coalesce\",\"collate\",\"collect\",\"column\",\"commit\",\"condition\",\"connect\",\"constraint\",\"contains\",\"convert\",\"copy\",\"corr\",\"corresponding\",\"cos\",\"cosh\",\"count\",\"covar_pop\",\"covar_samp\",\"create\",\"cross\",\"cube\",\"cume_dist\",\"current\",\"current_catalog\",\"current_date\",\"current_default_transform_group\",\"current_path\",\"current_role\",\"current_row\",\"current_schema\",\"current_time\",\"current_timestamp\",\"current_path\",\"current_role\",\"current_transform_group_for_type\",\"current_user\",\"cursor\",\"cycle\",\"date\",\"day\",\"deallocate\",\"dec\",\"decimal\",\"decfloat\",\"declare\",\"default\",\"define\",\"delete\",\"dense_rank\",\"deref\",\"describe\",\"deterministic\",\"disconnect\",\"distinct\",\"double\",\"drop\",\"dynamic\",\"each\",\"element\",\"else\",\"empty\",\"end\",\"end_frame\",\"end_partition\",\"end-exec\",\"equals\",\"escape\",\"every\",\"except\",\"exec\",\"execute\",\"exists\",\"exp\",\"external\",\"extract\",\"false\",\"fetch\",\"filter\",\"first_value\",\"float\",\"floor\",\"for\",\"foreign\",\"frame_row\",\"free\",\"from\",\"full\",\"function\",\"fusion\",\"get\",\"global\",\"grant\",\"group\",\"grouping\",\"groups\",\"having\",\"hold\",\"hour\",\"identity\",\"in\",\"indicator\",\"initial\",\"inner\",\"inout\",\"insensitive\",\"insert\",\"int\",\"integer\",\"intersect\",\"intersection\",\"interval\",\"into\",\"is\",\"join\",\"json_array\",\"json_arrayagg\",\"json_exists\",\"json_object\",\"json_objectagg\",\"json_query\",\"json_table\",\"json_table_primitive\",\"json_value\",\"lag\",\"language\",\"large\",\"last_value\",\"lateral\",\"lead\",\"leading\",\"left\",\"like\",\"like_regex\",\"listagg\",\"ln\",\"local\",\"localtime\",\"localtimestamp\",\"log\",\"log10\",\"lower\",\"match\",\"match_number\",\"match_recognize\",\"matches\",\"max\",\"member\",\"merge\",\"method\",\"min\",\"minute\",\"mod\",\"modifies\",\"module\",\"month\",\"multiset\",\"national\",\"natural\",\"nchar\",\"nclob\",\"new\",\"no\",\"none\",\"normalize\",\"not\",\"nth_value\",\"ntile\",\"null\",\"nullif\",\"numeric\",\"octet_length\",\"occurrences_regex\",\"of\",\"offset\",\"old\",\"omit\",\"on\",\"one\",\"only\",\"open\",\"or\",\"order\",\"out\",\"outer\",\"over\",\"overlaps\",\"overlay\",\"parameter\",\"partition\",\"pattern\",\"per\",\"percent\",\"percent_rank\",\"percentile_cont\",\"percentile_disc\",\"period\",\"portion\",\"position\",\"position_regex\",\"power\",\"precedes\",\"precision\",\"prepare\",\"primary\",\"procedure\",\"ptf\",\"range\",\"rank\",\"reads\",\"real\",\"recursive\",\"ref\",\"references\",\"referencing\",\"regr_avgx\",\"regr_avgy\",\"regr_count\",\"regr_intercept\",\"regr_r2\",\"regr_slope\",\"regr_sxx\",\"regr_sxy\",\"regr_syy\",\"release\",\"result\",\"return\",\"returns\",\"revoke\",\"right\",\"rollback\",\"rollup\",\"row\",\"row_number\",\"rows\",\"running\",\"savepoint\",\"scope\",\"scroll\",\"search\",\"second\",\"seek\",\"select\",\"sensitive\",\"session_user\",\"set\",\"show\",\"similar\",\"sin\",\"sinh\",\"skip\",\"smallint\",\"some\",\"specific\",\"specifictype\",\"sql\",\"sqlexception\",\"sqlstate\",\"sqlwarning\",\"sqrt\",\"start\",\"static\",\"stddev_pop\",\"stddev_samp\",\"submultiset\",\"subset\",\"substring\",\"substring_regex\",\"succeeds\",\"sum\",\"symmetric\",\"system\",\"system_time\",\"system_user\",\"table\",\"tablesample\",\"tan\",\"tanh\",\"then\",\"time\",\"timestamp\",\"timezone_hour\",\"timezone_minute\",\"to\",\"trailing\",\"translate\",\"translate_regex\",\"translation\",\"treat\",\"trigger\",\"trim\",\"trim_array\",\"true\",\"truncate\",\"uescape\",\"union\",\"unique\",\"unknown\",\"unnest\",\"update\",\"upper\",\"user\",\"using\",\"value\",\"values\",\"value_of\",\"var_pop\",\"var_samp\",\"varbinary\",\"varchar\",\"varying\",\"versioning\",\"when\",\"whenever\",\"where\",\"width_bucket\",\"window\",\"with\",\"within\",\"without\",\"year\",\"add\",\"asc\",\"collation\",\"desc\",\"final\",\"first\",\"last\",\"view\"].filter((e=>!M.includes(e))),r={begin:t.concat(/\\b/,t.either(...c),/\\s*\\(/),relevance:0,keywords:{built_in:c}};return{name:\"SQL\",case_insensitive:!0,illegal:/[{}]|<\\//,keywords:{$pattern:/\\b[\\w\\.]+/,keyword:function(e,{exceptions:t,when:n}={}){const o=n;return t=t||[],e.map((e=>e.match(/\\|\\d+$/)||t.includes(e)?e:o(e)?`${e}|0`:e))}(z,{when:e=>e.length<3}),literal:o,type:p,built_in:[\"current_catalog\",\"current_date\",\"current_default_transform_group\",\"current_path\",\"current_role\",\"current_schema\",\"current_transform_group_for_type\",\"current_user\",\"session_user\",\"system_time\",\"system_user\",\"current_time\",\"localtime\",\"current_timestamp\",\"localtimestamp\"]},contains:[{begin:t.either(...b),relevance:0,keywords:{$pattern:/[\\w\\.]+/,keyword:z.concat(b),literal:o,type:p}},{className:\"type\",begin:t.either(\"double precision\",\"large object\",\"with timezone\",\"without timezone\")},r,{className:\"variable\",begin:/@[a-z0-9][a-z0-9_]*/},{className:\"string\",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/\"/,end:/\"/,contains:[{begin:/\"\"/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:\"operator\",begin:/[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}));const M={methods:{highlightSQL:function(){var e=this;this.$nextTick((function(){o.Z.highlightElement(e.$refs.sqlcode)}))},formatSql:function(e){return(0,p.WU)(e)}}},b=M;const c=(0,n(1900).Z)(b,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Query Details\",resource:\"queries\",id:e.$route.params.id},on:{ready:function(t){return e.highlightSQL()}},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Connection\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.connection)+\"\\n            \")])]),e._v(\" \"),n.entry.content.file?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Location\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.file)+\":\"+e._s(n.entry.content.line)+\"\\n            \")])]):e._e(),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Duration\")]),e._v(\" \"),t(\"td\",[n.entry.content.slow?t(\"span\",{staticClass:\"badge badge-danger\"},[e._v(\"\\n                    \"+e._s(n.entry.content.time)+\"ms\\n                \")]):t(\"span\",[e._v(\"\\n                    \"+e._s(n.entry.content.time)+\"ms\\n                \")])])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link active\"},[e._v(\"Query\")])])]),e._v(\" \"),t(\"div\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:e.formatSql(n.entry.content.sql)}},[t(\"pre\",{ref:\"sqlcode\",staticClass:\"code-bg text-white\"},[e._v(e._s(e.formatSql(n.entry.content.sql)))])])],1)])])}}])})}),[],!1,null,null,null).exports},7837:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Redis\",resource:\"redis\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[t(\"code\",[e._v(e._s(e.truncate(n.entry.content.command,80)))])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[e._v(e._s(n.entry.content.time)+\"ms\")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"redis-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Command\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Duration\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},5799:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={data:function(){return{entry:null,batch:[]}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Redis Command Details\",resource:\"redis\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Connection\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.connection)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Duration\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.time)+\"ms\\n            \")])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link active\"},[e._v(\"Command\")])])]),e._v(\" \"),t(\"pre\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[e._v(e._s(n.entry.content.command))])])])}}])})}),[],!1,null,null,null).exports},9751:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Requests\",resource:\"requests\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",{staticClass:\"table-fit pr-0\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestMethodClass(n.entry.content.method)},[e._v(\"\\n                \"+e._s(n.entry.content.method)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{attrs:{title:n.entry.content.uri}},[e._v(e._s(e.truncate(n.entry.content.uri,50)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-center\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestStatusClass(n.entry.content.response_status)},[e._v(\"\\n                \"+e._s(n.entry.content.response_status)+\"\\n            \")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[n.entry.content.duration?t(\"span\",[e._v(e._s(n.entry.content.duration)+\"ms\")]):t(\"span\",[e._v(\"-\")])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"request-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Verb\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Path\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-center\",attrs:{scope:\"col\"}},[e._v(\"Status\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Duration\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},1619:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z],data:function(){return{entry:null,batch:[],currentTab:\"payload\"}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Request Details\",resource:\"requests\",id:e.$route.params.id,\"entry-point\":\"true\"},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Method\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestMethodClass(n.entry.content.method)},[e._v(\"\\n                \"+e._s(n.entry.content.method)+\"\\n            \")])])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Controller Action\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.controller_action)+\"\\n        \")])]),e._v(\" \"),n.entry.content.middleware?t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Middleware\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.middleware.join(\", \"))+\"\\n        \")])]):e._e(),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Path\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.uri)+\"\\n        \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Status\")]),e._v(\" \"),t(\"td\",[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.requestStatusClass(n.entry.content.response_status)},[e._v(\"\\n                \"+e._s(n.entry.content.response_status)+\"\\n            \")])])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Duration\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.duration||\"-\")+\" ms\\n        \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"IP Address\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.ip_address||\"-\")+\"\\n        \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Memory usage\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.memory||\"-\")+\" MB\\n        \")])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"payload\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"payload\"}}},[e._v(\"Payload\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"headers\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"headers\"}}},[e._v(\"Headers\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"session\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"session\"}}},[e._v(\"Session\")])]),e._v(\" \"),t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"response\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"response\"}}},[e._v(\"Response\")])])]),e._v(\" \"),t(\"div\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content[e.currentTab]}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content[e.currentTab]}})],1)],1)]),e._v(\" \"),t(\"related-entries\",{attrs:{entry:e.entry,batch:e.batch}})],1)}}])})}),[],!1,null,null,null).exports},8244:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Schedule\",resource:\"schedule\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[t(\"code\",[e._v(e._s(e.truncate(n.entry.content.description,85)||e.truncate(n.entry.content.command,85)))])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(e._s(n.entry.content.expression))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at,title:n.entry.created_at}},[e._v(\"\\n            \"+e._s(e.timeAgo(n.entry.created_at))+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"schedule-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Command\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Expression\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},4622:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={data:function(){return{entry:null,batch:[]}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"Scheduled Command Details\",resource:\"requests\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Description\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.description||\"-\")+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Command\")]),e._v(\" \"),t(\"td\",[t(\"code\",[e._v(e._s(n.entry.content.command||\"-\"))])])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Expression\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.expression)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"User\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.user||\"-\")+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Timezone\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.timezone||\"-\")+\"\\n            \")])])]}},{key:\"after-attributes-card\",fn:function(n){return n.entry.content.output?t(\"div\",{},[t(\"div\",{staticClass:\"card mt-5 overflow-hidden\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link active\"},[e._v(\"Output\")])])]),e._v(\" \"),t(\"copy-clipboard\",{attrs:{data:n.entry.content.output}},[t(\"pre\",{staticClass:\"code-bg p-4 mb-0 text-white\"},[e._v(e._s(n.entry.content.output))])])],1)]):e._e()}}],null,!0)})}),[],!1,null,null,null).exports},3395:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});const o={mixins:[n(601).Z]};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"index-screen\",{attrs:{title:\"Views\",resource:\"views\"},scopedSlots:e._u([{key:\"row\",fn:function(n){return[t(\"td\",[e._v(\"\\n            \"+e._s(n.entry.content.name)+\" \"),t(\"br\"),e._v(\" \"),t(\"small\",{staticClass:\"text-muted\"},[e._v(e._s(e.truncate(n.entry.content.path,100)))])]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-right text-muted\"},[e._v(\"\\n            \"+e._s(n.entry.content.composers?n.entry.content.composers.length:0)+\"\\n        \")]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit text-muted\",attrs:{\"data-timeago\":n.entry.created_at}},[e._v(e._s(e.timeAgo(n.entry.created_at)))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"router-link\",{staticClass:\"control-action\",attrs:{to:{name:\"view-preview\",params:{id:n.entry.id}}}},[t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\"}},[t(\"path\",{attrs:{\"fill-rule\":\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zM6.75 9.25a.75.75 0 000 1.5h4.59l-2.1 1.95a.75.75 0 001.02 1.1l3.5-3.25a.75.75 0 000-1.1l-3.5-3.25a.75.75 0 10-1.02 1.1l2.1 1.95H6.75z\",\"clip-rule\":\"evenodd\"}})])])],1)]}}])},[t(\"tr\",{attrs:{slot:\"table-header\"},slot:\"table-header\"},[t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Name\")]),e._v(\" \"),t(\"th\",{staticClass:\"text-right\",attrs:{scope:\"col\"}},[e._v(\"Composers\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}},[e._v(\"Happened\")]),e._v(\" \"),t(\"th\",{attrs:{scope:\"col\"}})])])}),[],!1,null,null,null).exports},6968:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>p});n(6486);const o={mixins:[n(601).Z],data:function(){return{entry:null,batch:[],currentTab:\"data\"}}};const p=(0,n(1900).Z)(o,(function(){var e=this,t=e._self._c;return t(\"preview-screen\",{attrs:{title:\"View Action\",resource:\"views\",id:e.$route.params.id},scopedSlots:e._u([{key:\"table-parameters\",fn:function(n){return[t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"View\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.name)+\"\\n            \")])]),e._v(\" \"),t(\"tr\",[t(\"td\",{staticClass:\"table-fit text-muted\"},[e._v(\"Path\")]),e._v(\" \"),t(\"td\",[e._v(\"\\n                \"+e._s(n.entry.content.path)+\"\\n            \")])])]}},{key:\"after-attributes-card\",fn:function(n){return t(\"div\",{},[n.entry.content.data?t(\"div\",{staticClass:\"card mt-5\"},[t(\"ul\",{staticClass:\"nav nav-pills\"},[t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"data\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"data\"}}},[e._v(\"Data\")])]),e._v(\" \"),n.entry.content.composers?t(\"li\",{staticClass:\"nav-item\"},[t(\"a\",{staticClass:\"nav-link\",class:{active:\"composers\"==e.currentTab},attrs:{href:\"#\"},on:{click:function(t){t.preventDefault(),e.currentTab=\"composers\"}}},[e._v(\"Composers\")])]):e._e()]),e._v(\" \"),t(\"div\",[t(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"data\"==e.currentTab,expression:\"currentTab=='data'\"}],staticClass:\"code-bg p-4 mb-0 text-white\"},[t(\"copy-clipboard\",{attrs:{data:n.entry.content.data}},[t(\"vue-json-pretty\",{attrs:{data:n.entry.content.data}})],1)],1),e._v(\" \"),t(\"table\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"composers\"==e.currentTab,expression:\"currentTab=='composers'\"}],staticClass:\"table table-hover mb-0\"},[t(\"thead\",[t(\"tr\",[t(\"th\",[e._v(\"Composer\")]),e._v(\" \"),t(\"th\",[e._v(\"Type\")])])]),e._v(\" \"),t(\"tbody\",e._l(n.entry.content.composers,(function(n,o){return t(\"tr\",{key:o},[t(\"td\",{attrs:{title:n.name}},[e._v(e._s(n.name))]),e._v(\" \"),t(\"td\",{staticClass:\"table-fit\"},[t(\"span\",{staticClass:\"badge\",class:\"badge-\"+e.composerTypeClass(n.type)},[e._v(\"\\n                                \"+e._s(n.type)+\"\\n                            \")])])])})),0)])])]):e._e()])}}])})}),[],!1,null,null,null).exports},1900:(e,t,n)=>{\"use strict\";function o(e,t,n,o,p,M,b,c){var z,r=\"function\"==typeof e?e.options:e;if(t&&(r.render=t,r.staticRenderFns=n,r._compiled=!0),o&&(r.functional=!0),M&&(r._scopeId=\"data-v-\"+M),b?(z=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),p&&p.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(b)},r._ssrRegister=z):p&&(z=c?function(){p.call(this,(r.functional?this.parent:this).$root.$options.shadowRoot)}:p),z)if(r.functional){r._injectStyles=z;var a=r.render;r.render=function(e,t){return z.call(t),a(e,t)}}else{var i=r.beforeCreate;r.beforeCreate=i?[].concat(i,z):[z]}return{exports:e,options:r}}n.d(t,{Z:()=>o})},3390:e=>{function t(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error(\"map is read-only\")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error(\"set is read-only\")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((n=>{const o=e[n],p=typeof o;\"object\"!==p&&\"function\"!==p||Object.isFrozen(o)||t(o)})),e}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function o(e){return e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\")}function p(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const M=e=>!!e.scope;class b{constructor(e,t){this.buffer=\"\",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=o(e)}openNode(e){if(!M(e))return;const t=((e,{prefix:t})=>{if(e.startsWith(\"language:\"))return e.replace(\"language:\",\"language-\");if(e.includes(\".\")){const n=e.split(\".\");return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${\"_\".repeat(t+1)}`))].join(\" \")}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)}closeNode(e){M(e)&&(this.buffer+=\"</span>\")}value(){return this.buffer}span(e){this.buffer+=`<span class=\"${e}\">`}}const c=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class z{constructor(){this.rootNode=c(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t=c({scope:e});this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return\"string\"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){\"string\"!=typeof e&&e.children&&(e.children.every((e=>\"string\"==typeof e))?e.children=[e.children.join(\"\")]:e.children.forEach((e=>{z._collapse(e)})))}}class r extends z{constructor(e){super(),this.options=e}addText(e){\"\"!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){this.closeNode()}__addSublanguage(e,t){const n=e.root;t&&(n.scope=`language:${t}`),this.add(n)}toHTML(){return new b(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function a(e){return e?\"string\"==typeof e?e:e.source:null}function i(e){return A(\"(?=\",e,\")\")}function O(e){return A(\"(?:\",e,\")*\")}function s(e){return A(\"(?:\",e,\")?\")}function A(...e){return e.map((e=>a(e))).join(\"\")}function u(...e){const t=function(e){const t=e[e.length-1];return\"object\"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}(e);return\"(\"+(t.capture?\"\":\"?:\")+e.map((e=>a(e))).join(\"|\")+\")\"}function d(e){return new RegExp(e.toString()+\"|\").exec(\"\").length-1}const l=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;function f(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n;let o=a(e),p=\"\";for(;o.length>0;){const e=l.exec(o);if(!e){p+=o;break}p+=o.substring(0,e.index),o=o.substring(e.index+e[0].length),\"\\\\\"===e[0][0]&&e[1]?p+=\"\\\\\"+String(Number(e[1])+t):(p+=e[0],\"(\"===e[0]&&n++)}return p})).map((e=>`(${e})`)).join(t)}const q=\"[a-zA-Z]\\\\w*\",W=\"[a-zA-Z_]\\\\w*\",h=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",v=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",R=\"\\\\b(0b[01]+)\",m={begin:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},g={scope:\"string\",begin:\"'\",end:\"'\",illegal:\"\\\\n\",contains:[m]},L={scope:\"string\",begin:'\"',end:'\"',illegal:\"\\\\n\",contains:[m]},_=function(e,t,n={}){const o=p({scope:\"comment\",begin:e,end:t,contains:[]},n);o.contains.push({scope:\"doctag\",begin:\"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)\",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const M=u(\"I\",\"a\",\"is\",\"so\",\"us\",\"to\",\"at\",\"if\",\"in\",\"it\",\"on\",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return o.contains.push({begin:A(/[ ]+/,\"(\",M,/[.]?[:]?([.][ ]|[ ])/,\"){3}\")}),o},N=_(\"//\",\"$\"),y=_(\"/\\\\*\",\"\\\\*/\"),T=_(\"#\",\"$\"),E={scope:\"number\",begin:h,relevance:0},B={scope:\"number\",begin:v,relevance:0},C={scope:\"number\",begin:R,relevance:0},X={begin:/(?=\\/[^/\\n]*\\/)/,contains:[{scope:\"regexp\",begin:/\\//,end:/\\/[gimuy]*/,illegal:/\\n/,contains:[m,{begin:/\\[/,end:/\\]/,relevance:0,contains:[m]}]}]},w={scope:\"title\",begin:q,relevance:0},S={scope:\"title\",begin:W,relevance:0},x={begin:\"\\\\.\\\\s*\"+W,relevance:0};var k=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\\b\\B/,IDENT_RE:q,UNDERSCORE_IDENT_RE:W,NUMBER_RE:h,C_NUMBER_RE:v,BINARY_NUMBER_RE:R,RE_STARTERS_RE:\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",SHEBANG:(e={})=>{const t=/^#![ ]*\\//;return e.binary&&(e.begin=A(t,/.*\\b/,e.binary,/\\b.*/)),p({scope:\"meta\",begin:t,end:/$/,relevance:0,\"on:begin\":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:m,APOS_STRING_MODE:g,QUOTE_STRING_MODE:L,PHRASAL_WORDS_MODE:{begin:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/},COMMENT:_,C_LINE_COMMENT_MODE:N,C_BLOCK_COMMENT_MODE:y,HASH_COMMENT_MODE:T,NUMBER_MODE:E,C_NUMBER_MODE:B,BINARY_NUMBER_MODE:C,REGEXP_MODE:X,TITLE_MODE:w,UNDERSCORE_TITLE_MODE:S,METHOD_GUARD:x,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{\"on:begin\":(e,t)=>{t.data._beginMatch=e[1]},\"on:end\":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function I(e,t){\".\"===e.input[e.index-1]&&t.ignoreMatch()}function D(e,t){void 0!==e.className&&(e.scope=e.className,delete e.className)}function P(e,t){t&&e.beginKeywords&&(e.begin=\"\\\\b(\"+e.beginKeywords.split(\" \").join(\"|\")+\")(?!\\\\.)(?=\\\\b|\\\\s)\",e.__beforeBegin=I,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function j(e,t){Array.isArray(e.illegal)&&(e.illegal=u(...e.illegal))}function U(e,t){if(e.match){if(e.begin||e.end)throw new Error(\"begin & end are not supported with match\");e.begin=e.match,delete e.match}}function H(e,t){void 0===e.relevance&&(e.relevance=1)}const F=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error(\"beforeMatch cannot be used with starts\");const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]})),e.keywords=n.keywords,e.begin=A(n.beforeMatch,i(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},G=[\"of\",\"and\",\"for\",\"in\",\"not\",\"or\",\"if\",\"then\",\"parent\",\"list\",\"value\"],$=\"keyword\";function V(e,t,n=$){const o=Object.create(null);return\"string\"==typeof e?p(n,e.split(\" \")):Array.isArray(e)?p(n,e):Object.keys(e).forEach((function(n){Object.assign(o,V(e[n],t,n))})),o;function p(e,n){t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((function(t){const n=t.split(\"|\");o[n[0]]=[e,Y(n[0],n[1])]}))}}function Y(e,t){return t?Number(t):function(e){return G.includes(e.toLowerCase())}(e)?0:1}const K={},Z=e=>{},Q=(e,t)=>{K[`${e}/${t}`]||(K[`${e}/${t}`]=!0)},J=new Error;function ee(e,t,{key:n}){let o=0;const p=e[n],M={},b={};for(let e=1;e<=t.length;e++)b[e+o]=p[e],M[e+o]=!0,o+=d(t[e-1]);e[n]=b,e[n]._emit=M,e[n]._multi=!0}function te(e){!function(e){e.scope&&\"object\"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,delete e.scope)}(e),\"string\"==typeof e.beginScope&&(e.beginScope={_wrap:e.beginScope}),\"string\"==typeof e.endScope&&(e.endScope={_wrap:e.endScope}),function(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw Z(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\"),J;if(\"object\"!=typeof e.beginScope||null===e.beginScope)throw Z(\"beginScope must be object\"),J;ee(e,e.begin,{key:\"beginScope\"}),e.begin=f(e.begin,{joinWith:\"\"})}}(e),function(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw Z(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\"),J;if(\"object\"!=typeof e.endScope||null===e.endScope)throw Z(\"endScope must be object\"),J;ee(e,e.end,{key:\"endScope\"}),e.end=f(e.end,{joinWith:\"\"})}}(e)}function ne(e){function t(t,n){return new RegExp(a(t),\"m\"+(e.case_insensitive?\"i\":\"\")+(e.unicodeRegex?\"u\":\"\")+(n?\"g\":\"\"))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=d(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=t(f(e,{joinWith:\"|\"}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),o=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,o)}}class o{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),\"begin\"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes(\"self\"))throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");return e.classNameAliases=p(e.classNameAliases||{}),function n(M,b){const c=M;if(M.isCompiled)return c;[D,U,te,F].forEach((e=>e(M,b))),e.compilerExtensions.forEach((e=>e(M,b))),M.__beforeBegin=null,[P,j,H].forEach((e=>e(M,b))),M.isCompiled=!0;let z=null;return\"object\"==typeof M.keywords&&M.keywords.$pattern&&(M.keywords=Object.assign({},M.keywords),z=M.keywords.$pattern,delete M.keywords.$pattern),z=z||/\\w+/,M.keywords&&(M.keywords=V(M.keywords,e.case_insensitive)),c.keywordPatternRe=t(z,!0),b&&(M.begin||(M.begin=/\\B|\\b/),c.beginRe=t(c.begin),M.end||M.endsWithParent||(M.end=/\\B|\\b/),M.end&&(c.endRe=t(c.end)),c.terminatorEnd=a(c.end)||\"\",M.endsWithParent&&b.terminatorEnd&&(c.terminatorEnd+=(M.end?\"|\":\"\")+b.terminatorEnd)),M.illegal&&(c.illegalRe=t(M.illegal)),M.contains||(M.contains=[]),M.contains=[].concat(...M.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return p(e,{variants:null},t)})));if(e.cachedVariants)return e.cachedVariants;if(oe(e))return p(e,{starts:e.starts?p(e.starts):null});if(Object.isFrozen(e))return p(e);return e}(\"self\"===e?M:e)}))),M.contains.forEach((function(e){n(e,c)})),M.starts&&n(M.starts,b),c.matcher=function(e){const t=new o;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:\"begin\"}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:\"end\"}),e.illegal&&t.addRule(e.illegal,{type:\"illegal\"}),t}(c),c}(e)}function oe(e){return!!e&&(e.endsWithParent||oe(e.starts))}class pe extends Error{constructor(e,t){super(e),this.name=\"HTMLInjectionError\",this.html=t}}const Me=o,be=p,ce=Symbol(\"nomatch\"),ze=function(e){const o=Object.create(null),p=Object.create(null),M=[];let b=!0;const c=\"Could not find the language '{}', did you forget to load/include a language module?\",z={disableAutodetect:!0,name:\"Plain text\",contains:[]};let a={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\\blang(?:uage)?-([\\w-]+)\\b/i,classPrefix:\"hljs-\",cssSelector:\"pre code\",languages:null,__emitter:r};function d(e){return a.noHighlightRe.test(e)}function l(e,t,n){let o=\"\",p=\"\";\"object\"==typeof t?(o=e,n=t.ignoreIllegals,p=t.language):(Q(\"10.7.0\",\"highlight(lang, code, ...args) has been deprecated.\"),Q(\"10.7.0\",\"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\"),p=e,o=t),void 0===n&&(n=!0);const M={code:o,language:p};L(\"before:highlight\",M);const b=M.result?M.result:f(M.language,M.code,n);return b.code=M.code,L(\"after:highlight\",b),b}function f(e,t,p,M){const z=Object.create(null);function r(){if(!L.keywords)return void N.addText(y);let e=0;L.keywordPatternRe.lastIndex=0;let t=L.keywordPatternRe.exec(y),n=\"\";for(;t;){n+=y.substring(e,t.index);const p=v.case_insensitive?t[0].toLowerCase():t[0],M=(o=p,L.keywords[o]);if(M){const[e,o]=M;if(N.addText(n),n=\"\",z[p]=(z[p]||0)+1,z[p]<=7&&(T+=o),e.startsWith(\"_\"))n+=t[0];else{const n=v.classNameAliases[e]||e;O(t[0],n)}}else n+=t[0];e=L.keywordPatternRe.lastIndex,t=L.keywordPatternRe.exec(y)}var o;n+=y.substring(e),N.addText(n)}function i(){null!=L.subLanguage?function(){if(\"\"===y)return;let e=null;if(\"string\"==typeof L.subLanguage){if(!o[L.subLanguage])return void N.addText(y);e=f(L.subLanguage,y,!0,_[L.subLanguage]),_[L.subLanguage]=e._top}else e=q(y,L.subLanguage.length?L.subLanguage:null);L.relevance>0&&(T+=e.relevance),N.__addSublanguage(e._emitter,e.language)}():r(),y=\"\"}function O(e,t){\"\"!==e&&(N.startScope(t),N.addText(e),N.endScope())}function s(e,t){let n=1;const o=t.length-1;for(;n<=o;){if(!e._emit[n]){n++;continue}const o=v.classNameAliases[e[n]]||e[n],p=t[n];o?O(p,o):(y=p,r(),y=\"\"),n++}}function A(e,t){return e.scope&&\"string\"==typeof e.scope&&N.openNode(v.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(O(y,v.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),y=\"\"):e.beginScope._multi&&(s(e.beginScope,t),y=\"\")),L=Object.create(e,{parent:{value:L}}),L}function u(e,t,o){let p=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,o);if(p){if(e[\"on:end\"]){const o=new n(e);e[\"on:end\"](t,o),o.isMatchIgnored&&(p=!1)}if(p){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return u(e.parent,t,o)}function d(e){return 0===L.matcher.regexIndex?(y+=e[0],1):(C=!0,0)}function l(e){const n=e[0],o=t.substring(e.index),p=u(L,e,o);if(!p)return ce;const M=L;L.endScope&&L.endScope._wrap?(i(),O(n,L.endScope._wrap)):L.endScope&&L.endScope._multi?(i(),s(L.endScope,e)):M.skip?y+=n:(M.returnEnd||M.excludeEnd||(y+=n),i(),M.excludeEnd&&(y=n));do{L.scope&&N.closeNode(),L.skip||L.subLanguage||(T+=L.relevance),L=L.parent}while(L!==p.parent);return p.starts&&A(p.starts,e),M.returnEnd?0:n.length}let W={};function h(o,M){const c=M&&M[0];if(y+=o,null==c)return i(),0;if(\"begin\"===W.type&&\"end\"===M.type&&W.index===M.index&&\"\"===c){if(y+=t.slice(M.index,M.index+1),!b){const t=new Error(`0 width match regex (${e})`);throw t.languageName=e,t.badRule=W.rule,t}return 1}if(W=M,\"begin\"===M.type)return function(e){const t=e[0],o=e.rule,p=new n(o),M=[o.__beforeBegin,o[\"on:begin\"]];for(const n of M)if(n&&(n(e,p),p.isMatchIgnored))return d(t);return o.skip?y+=t:(o.excludeBegin&&(y+=t),i(),o.returnBegin||o.excludeBegin||(y=t)),A(o,e),o.returnBegin?0:t.length}(M);if(\"illegal\"===M.type&&!p){const e=new Error('Illegal lexeme \"'+c+'\" for mode \"'+(L.scope||\"<unnamed>\")+'\"');throw e.mode=L,e}if(\"end\"===M.type){const e=l(M);if(e!==ce)return e}if(\"illegal\"===M.type&&\"\"===c)return 1;if(B>1e5&&B>3*M.index){throw new Error(\"potential infinite loop, way more iterations than matches\")}return y+=c,c.length}const v=R(e);if(!v)throw Z(c.replace(\"{}\",e)),new Error('Unknown language: \"'+e+'\"');const m=ne(v);let g=\"\",L=M||m;const _={},N=new a.__emitter(a);!function(){const e=[];for(let t=L;t!==v;t=t.parent)t.scope&&e.unshift(t.scope);e.forEach((e=>N.openNode(e)))}();let y=\"\",T=0,E=0,B=0,C=!1;try{if(v.__emitTokens)v.__emitTokens(t,N);else{for(L.matcher.considerAll();;){B++,C?C=!1:L.matcher.considerAll(),L.matcher.lastIndex=E;const e=L.matcher.exec(t);if(!e)break;const n=h(t.substring(E,e.index),e);E=e.index+n}h(t.substring(E))}return N.finalize(),g=N.toHTML(),{language:e,value:g,relevance:T,illegal:!1,_emitter:N,_top:L}}catch(n){if(n.message&&n.message.includes(\"Illegal\"))return{language:e,value:Me(t),illegal:!0,relevance:0,_illegalBy:{message:n.message,index:E,context:t.slice(E-100,E+100),mode:n.mode,resultSoFar:g},_emitter:N};if(b)return{language:e,value:Me(t),illegal:!1,relevance:0,errorRaised:n,_emitter:N,_top:L};throw n}}function q(e,t){t=t||a.languages||Object.keys(o);const n=function(e){const t={value:Me(e),illegal:!1,relevance:0,_top:z,_emitter:new a.__emitter(a)};return t._emitter.addText(e),t}(e),p=t.filter(R).filter(g).map((t=>f(t,e,!1)));p.unshift(n);const M=p.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(R(e.language).supersetOf===t.language)return 1;if(R(t.language).supersetOf===e.language)return-1}return 0})),[b,c]=M,r=b;return r.secondBest=c,r}function W(e){let t=null;const n=function(e){let t=e.className+\" \";t+=e.parentNode?e.parentNode.className:\"\";const n=a.languageDetectRe.exec(t);if(n){const e=R(n[1]);return e||c.replace(\"{}\",n[1]),e?n[1]:\"no-highlight\"}return t.split(/\\s+/).find((e=>d(e)||R(e)))}(e);if(d(n))return;if(L(\"before:highlightElement\",{el:e,language:n}),e.children.length>0&&(a.ignoreUnescapedHTML,a.throwUnescapedHTML)){throw new pe(\"One of your code blocks includes unescaped HTML.\",e.innerHTML)}t=e;const o=t.textContent,M=n?l(o,{language:n,ignoreIllegals:!0}):q(o);e.innerHTML=M.value,function(e,t,n){const o=t&&p[t]||n;e.classList.add(\"hljs\"),e.classList.add(`language-${o}`)}(e,n,M.language),e.result={language:M.language,re:M.relevance,relevance:M.relevance},M.secondBest&&(e.secondBest={language:M.secondBest.language,relevance:M.secondBest.relevance}),L(\"after:highlightElement\",{el:e,result:M,text:o})}let h=!1;function v(){if(\"loading\"===document.readyState)return void(h=!0);document.querySelectorAll(a.cssSelector).forEach(W)}function R(e){return e=(e||\"\").toLowerCase(),o[e]||o[p[e]]}function m(e,{languageName:t}){\"string\"==typeof e&&(e=[e]),e.forEach((e=>{p[e.toLowerCase()]=t}))}function g(e){const t=R(e);return t&&!t.disableAutodetect}function L(e,t){const n=e;M.forEach((function(e){e[n]&&e[n](t)}))}\"undefined\"!=typeof window&&window.addEventListener&&window.addEventListener(\"DOMContentLoaded\",(function(){h&&v()}),!1),Object.assign(e,{highlight:l,highlightAuto:q,highlightAll:v,highlightElement:W,highlightBlock:function(e){return Q(\"10.7.0\",\"highlightBlock will be removed entirely in v12.0\"),Q(\"10.7.0\",\"Please use highlightElement now.\"),W(e)},configure:function(e){a=be(a,e)},initHighlighting:()=>{v(),Q(\"10.6.0\",\"initHighlighting() deprecated.  Use highlightAll() now.\")},initHighlightingOnLoad:function(){v(),Q(\"10.6.0\",\"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\")},registerLanguage:function(t,n){let p=null;try{p=n(e)}catch(e){if(Z(\"Language definition for '{}' could not be registered.\".replace(\"{}\",t)),!b)throw e;Z(e),p=z}p.name||(p.name=t),o[t]=p,p.rawDefinition=n.bind(null,e),p.aliases&&m(p.aliases,{languageName:t})},unregisterLanguage:function(e){delete o[e];for(const t of Object.keys(p))p[t]===e&&delete p[t]},listLanguages:function(){return Object.keys(o)},getLanguage:R,registerAliases:m,autoDetection:g,inherit:be,addPlugin:function(e){!function(e){e[\"before:highlightBlock\"]&&!e[\"before:highlightElement\"]&&(e[\"before:highlightElement\"]=t=>{e[\"before:highlightBlock\"](Object.assign({block:t.el},t))}),e[\"after:highlightBlock\"]&&!e[\"after:highlightElement\"]&&(e[\"after:highlightElement\"]=t=>{e[\"after:highlightBlock\"](Object.assign({block:t.el},t))})}(e),M.push(e)},removePlugin:function(e){const t=M.indexOf(e);-1!==t&&M.splice(t,1)}}),e.debugMode=function(){b=!1},e.safeMode=function(){b=!0},e.versionString=\"11.8.0\",e.regex={concat:A,lookahead:i,either:u,optional:s,anyNumberOfTimes:O};for(const e in k)\"object\"==typeof k[e]&&t(k[e]);return Object.assign(e,k),e},re=ze({});re.newInstance=()=>ze({}),e.exports=re,re.HighlightJS=re,re.default=re},837:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>o});const o=n(3390)},8593:e=>{\"use strict\";e.exports=JSON.parse('{\"name\":\"axios\",\"version\":\"0.21.4\",\"description\":\"Promise based HTTP client for the browser and node.js\",\"main\":\"index.js\",\"scripts\":{\"test\":\"grunt test\",\"start\":\"node ./sandbox/server.js\",\"build\":\"NODE_ENV=production grunt build\",\"preversion\":\"npm test\",\"version\":\"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\",\"postversion\":\"git push && git push --tags\",\"examples\":\"node ./examples/server.js\",\"coveralls\":\"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\"fix\":\"eslint --fix lib/**/*.js\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/axios/axios.git\"},\"keywords\":[\"xhr\",\"http\",\"ajax\",\"promise\",\"node\"],\"author\":\"Matt Zabriskie\",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/axios/axios/issues\"},\"homepage\":\"https://axios-http.com\",\"devDependencies\":{\"coveralls\":\"^3.0.0\",\"es6-promise\":\"^4.2.4\",\"grunt\":\"^1.3.0\",\"grunt-banner\":\"^0.6.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-clean\":\"^1.1.0\",\"grunt-contrib-watch\":\"^1.0.0\",\"grunt-eslint\":\"^23.0.0\",\"grunt-karma\":\"^4.0.0\",\"grunt-mocha-test\":\"^0.13.3\",\"grunt-ts\":\"^6.0.0-beta.19\",\"grunt-webpack\":\"^4.0.2\",\"istanbul-instrumenter-loader\":\"^1.0.0\",\"jasmine-core\":\"^2.4.1\",\"karma\":\"^6.3.2\",\"karma-chrome-launcher\":\"^3.1.0\",\"karma-firefox-launcher\":\"^2.1.0\",\"karma-jasmine\":\"^1.1.1\",\"karma-jasmine-ajax\":\"^0.1.13\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-sauce-launcher\":\"^4.3.6\",\"karma-sinon\":\"^1.0.5\",\"karma-sourcemap-loader\":\"^0.3.8\",\"karma-webpack\":\"^4.0.2\",\"load-grunt-tasks\":\"^3.5.2\",\"minimist\":\"^1.2.0\",\"mocha\":\"^8.2.1\",\"sinon\":\"^4.5.0\",\"terser-webpack-plugin\":\"^4.2.3\",\"typescript\":\"^4.0.5\",\"url-search-params\":\"^0.10.0\",\"webpack\":\"^4.44.2\",\"webpack-dev-server\":\"^3.11.0\"},\"browser\":{\"./lib/adapters/http.js\":\"./lib/adapters/xhr.js\"},\"jsdelivr\":\"dist/axios.min.js\",\"unpkg\":\"dist/axios.min.js\",\"typings\":\"./index.d.ts\",\"dependencies\":{\"follow-redirects\":\"^1.14.0\"},\"bundlesize\":[{\"path\":\"./dist/axios.min.js\",\"threshold\":\"5kB\"}]}')},1128:e=>{\"use strict\";e.exports=JSON.parse('{\"version\":\"2023c\",\"zones\":[\"Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5\",\"Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5\",\"Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5\",\"Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6\",\"Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4\",\"Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5\",\"Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6\",\"Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5\",\"Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3\",\"Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4\",\"Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5\",\"Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|\",\"Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5\",\"Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5\",\"Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5\",\"Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|\",\"Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5\",\"Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5\",\"Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326\",\"America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4\",\"America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5\",\"America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4\",\"America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|\",\"America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|\",\"America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|\",\"America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|\",\"America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|\",\"America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0|28e5\",\"America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5\",\"America/Bahia_Banderas|LMT MST CST MDT PST CDT|71 70 60 60 80 50|0121312141313131313131313131313131313152525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3\",\"America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5\",\"America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4\",\"America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5\",\"America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3\",\"America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2\",\"America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5\",\"America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4\",\"America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2\",\"America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5\",\"America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3\",\"America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|\",\"America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5\",\"America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5\",\"America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4\",\"America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8\",\"America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3\",\"America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2\",\"America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5\",\"America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5\",\"America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5\",\"America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3\",\"America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5\",\"America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5\",\"America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5\",\"America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3\",\"America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3\",\"America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2\",\"America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2\",\"America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5\",\"America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5\",\"America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4\",\"America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4\",\"America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5\",\"America/Hermosillo|LMT MST CST MDT PST|7n.Q 70 60 60 80|0121312141313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4\",\"America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|01212134121212121212121212121512121212121212121212125212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|01212134121212121212121212121212156565212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2\",\"America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2\",\"America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4\",\"America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3\",\"America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5\",\"America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6\",\"America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6\",\"America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4\",\"America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5\",\"America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5\",\"America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4\",\"America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4\",\"America/Mazatlan|LMT MST CST MDT PST|75.E 70 60 60 80|0121312141313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4\",\"America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2\",\"America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5\",\"America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2\",\"America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2\",\"America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3\",\"America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5\",\"America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5\",\"America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6\",\"America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2\",\"America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2\",\"America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|012121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0|\",\"America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3\",\"America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4\",\"America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4\",\"America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4\",\"America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|\",\"America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4\",\"America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2\",\"America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5\",\"America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4\",\"America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229\",\"America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4\",\"America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5\",\"America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5\",\"America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452\",\"America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2\",\"America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4\",\"America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3\",\"America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5\",\"America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656\",\"America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642\",\"Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212121212|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10\",\"Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70\",\"Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4\",\"Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1\",\"Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60\",\"Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"Antarctica/Rothera|-00 -03|0 30|01|gOo0|130\",\"Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5\",\"Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40\",\"Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5\",\"Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5\",\"Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5\",\"Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3\",\"Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4\",\"Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4\",\"Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4\",\"Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|\",\"Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5\",\"Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4\",\"Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6\",\"Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|\",\"Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5\",\"Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4\",\"Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4\",\"Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6\",\"Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4\",\"Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3\",\"Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6\",\"Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5\",\"Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6\",\"Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4\",\"Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5\",\"Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4\",\"Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|\",\"Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|01212121212121212121212121212121212343434343434343434343434343434312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 e10 2L0 WN0 14n0 gN0 5z0 11B0 WL0 e10 bb0 11B0 TX0 e10 dX0 11B0 On0 gN0 gL0 11B0 Lz0 e10 pb0 WN0 IL0 e10 rX0 WN0 Db0 gN0 uL0 11B0 xz0 e10 An0 11B0 rX0 gN0 Db0 11B0 pb0 e10 Lz0 WN0 mn0 e10 On0 WN0 gL0 gN0 Rb0 11B0 bb0 e10 WL0 11B0 5z0 gN0 11z0 11B0 2L0 gN0 14n0 1fB0 1cL0 1a10 1fz0 14p0 1lb0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 e10 28L0 e10 25X0 gN0 25X0 e10 gL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5\",\"Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 e10 2L0 WN0 14n0 gN0 5z0 11B0 WL0 e10 bb0 11B0 TX0 e10 dX0 11B0 On0 gN0 gL0 11B0 Lz0 e10 pb0 WN0 IL0 e10 rX0 WN0 Db0 gN0 uL0 11B0 xz0 e10 An0 11B0 rX0 gN0 Db0 11B0 pb0 e10 Lz0 WN0 mn0 e10 On0 WN0 gL0 gN0 Rb0 11B0 bb0 e10 WL0 11B0 5z0 gN0 11z0 11B0 2L0 gN0 14n0 1fB0 1cL0 1a10 1fz0 14p0 1lb0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 e10 28L0 e10 25X0 gN0 25X0 e10 gL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4\",\"Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5\",\"Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5\",\"Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6\",\"Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4\",\"Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4\",\"Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5\",\"Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4\",\"Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6\",\"Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5\",\"Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2\",\"Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5\",\"Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5\",\"Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4\",\"Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3\",\"Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5\",\"Asia/Manila|LMT LMT PST PDT JST|fU -84 -80 -90 -90|01232423232|-54m84 2clc0 1vfc4 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6\",\"Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4\",\"Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4\",\"Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5\",\"Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5\",\"Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4\",\"Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4\",\"Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5\",\"Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|\",\"Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4\",\"Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5\",\"Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4\",\"Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4\",\"Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6\",\"Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2\",\"Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5\",\"Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5\",\"Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5\",\"Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 XA0 Wou JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3\",\"Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6\",\"Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5\",\"Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2\",\"Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4\",\"Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5\",\"Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5\",\"Atlantic/Azores|LMT HMT -02 -01 +00 WET|1G.E 1S.w 20 10 0 0|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232343434343434343434343434343434345434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4\",\"Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3\",\"Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4\",\"Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4\",\"Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3\",\"Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4\",\"Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30\",\"Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2\",\"Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5\",\"Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3\",\"Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4\",\"Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4\",\"Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368\",\"Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10\",\"Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5\",\"Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5\",\"CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|\",\"Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2\",\"CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|\",\"Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"EST|EST|50|0||\",\"EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"Etc/GMT-0|GMT|0|0||\",\"Etc/GMT-1|+01|-10|0||\",\"Etc/GMT-10|+10|-a0|0||\",\"Etc/GMT-11|+11|-b0|0||\",\"Etc/GMT-12|+12|-c0|0||\",\"Etc/GMT-13|+13|-d0|0||\",\"Etc/GMT-14|+14|-e0|0||\",\"Etc/GMT-2|+02|-20|0||\",\"Etc/GMT-3|+03|-30|0||\",\"Etc/GMT-4|+04|-40|0||\",\"Etc/GMT-5|+05|-50|0||\",\"Etc/GMT-6|+06|-60|0||\",\"Etc/GMT-7|+07|-70|0||\",\"Etc/GMT-8|+08|-80|0||\",\"Etc/GMT-9|+09|-90|0||\",\"Etc/GMT+1|-01|10|0||\",\"Etc/GMT+10|-10|a0|0||\",\"Etc/GMT+11|-11|b0|0||\",\"Etc/GMT+12|-12|c0|0||\",\"Etc/GMT+2|-02|20|0||\",\"Etc/GMT+3|-03|30|0||\",\"Etc/GMT+4|-04|40|0||\",\"Etc/GMT+5|-05|50|0||\",\"Etc/GMT+6|-06|60|0||\",\"Etc/GMT+7|-07|70|0||\",\"Etc/GMT+8|-08|80|0||\",\"Etc/GMT+9|-09|90|0||\",\"Etc/UTC|UTC|0|0||\",\"Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5\",\"Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3\",\"Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5\",\"Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5\",\"Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6\",\"Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5\",\"Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5\",\"Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5\",\"Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4\",\"Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4\",\"Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3\",\"Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4\",\"Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5\",\"Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4\",\"Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5\",\"Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4\",\"Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5\",\"Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6\",\"Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6\",\"Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4\",\"Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5\",\"Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5\",\"Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|\",\"Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4\",\"Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4\",\"Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5\",\"Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5\",\"Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4\",\"Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5\",\"Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5\",\"HST|HST|a0|0||\",\"Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2\",\"Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4\",\"Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4\",\"Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3\",\"MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|\",\"MST|MST|70|0||\",\"MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4\",\"Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3\",\"Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1\",\"Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483\",\"Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4\",\"Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3\",\"Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3\",\"Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125\",\"Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4\",\"Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4\",\"Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4\",\"Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2\",\"Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2\",\"Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2\",\"Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2\",\"Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3\",\"Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2\",\"Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3\",\"Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3\",\"Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56\",\"Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3\",\"Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4\",\"Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3\",\"PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|\"],\"links\":[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Iceland\",\"Africa/Cairo|Egypt\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|US/Alaska\",\"America/Argentina/Buenos_Aires|America/Buenos_Aires\",\"America/Argentina/Catamarca|America/Argentina/ComodRivadavia\",\"America/Argentina/Catamarca|America/Catamarca\",\"America/Argentina/Cordoba|America/Cordoba\",\"America/Argentina/Cordoba|America/Rosario\",\"America/Argentina/Jujuy|America/Jujuy\",\"America/Argentina/Mendoza|America/Mendoza\",\"America/Chicago|US/Central\",\"America/Denver|America/Shiprock\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Detroit|US/Michigan\",\"America/Edmonton|America/Yellowknife\",\"America/Edmonton|Canada/Mountain\",\"America/Fort_Wayne|America/Indiana/Indianapolis\",\"America/Fort_Wayne|America/Indianapolis\",\"America/Fort_Wayne|US/East-Indiana\",\"America/Godthab|America/Nuuk\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/Indiana/Knox|America/Knox_IN\",\"America/Indiana/Knox|US/Indiana-Starke\",\"America/Iqaluit|America/Pangnirtung\",\"America/Jamaica|Jamaica\",\"America/Kentucky/Louisville|America/Louisville\",\"America/Los_Angeles|US/Pacific\",\"America/Manaus|Brazil/West\",\"America/Mazatlan|Mexico/BajaSur\",\"America/Mexico_City|Mexico/General\",\"America/New_York|US/Eastern\",\"America/Noronha|Brazil/DeNoronha\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Phoenix|America/Creston\",\"America/Phoenix|US/Arizona\",\"America/Puerto_Rico|America/Anguilla\",\"America/Puerto_Rico|America/Antigua\",\"America/Puerto_Rico|America/Aruba\",\"America/Puerto_Rico|America/Blanc-Sablon\",\"America/Puerto_Rico|America/Curacao\",\"America/Puerto_Rico|America/Dominica\",\"America/Puerto_Rico|America/Grenada\",\"America/Puerto_Rico|America/Guadeloupe\",\"America/Puerto_Rico|America/Kralendijk\",\"America/Puerto_Rico|America/Lower_Princes\",\"America/Puerto_Rico|America/Marigot\",\"America/Puerto_Rico|America/Montserrat\",\"America/Puerto_Rico|America/Port_of_Spain\",\"America/Puerto_Rico|America/St_Barthelemy\",\"America/Puerto_Rico|America/St_Kitts\",\"America/Puerto_Rico|America/St_Lucia\",\"America/Puerto_Rico|America/St_Thomas\",\"America/Puerto_Rico|America/St_Vincent\",\"America/Puerto_Rico|America/Tortola\",\"America/Puerto_Rico|America/Virgin\",\"America/Regina|Canada/Saskatchewan\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Tijuana|America/Ensenada\",\"America/Tijuana|America/Santa_Isabel\",\"America/Tijuana|Mexico/BajaNorte\",\"America/Toronto|America/Montreal\",\"America/Toronto|America/Nassau\",\"America/Toronto|America/Nipigon\",\"America/Toronto|America/Thunder_Bay\",\"America/Toronto|Canada/Eastern\",\"America/Vancouver|Canada/Pacific\",\"America/Whitehorse|Canada/Yukon\",\"America/Winnipeg|America/Rainy_River\",\"America/Winnipeg|Canada/Central\",\"Asia/Ashgabat|Asia/Ashkhabad\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Brunei|Asia/Kuching\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Ho_Chi_Minh|Asia/Saigon\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Macau|Asia/Macao\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Nicosia|Europe/Nicosia\",\"Asia/Qatar|Asia/Bahrain\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Riyadh|Antarctica/Syowa\",\"Asia/Riyadh|Asia/Aden\",\"Asia/Riyadh|Asia/Kuwait\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|PRC\",\"Asia/Taipei|ROC\",\"Asia/Tehran|Iran\",\"Asia/Thimphu|Asia/Thimbu\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Urumqi|Antarctica/Vostok\",\"Asia/Urumqi|Asia/Kashgar\",\"Atlantic/Faroe|Atlantic/Faeroe\",\"Australia/Adelaide|Australia/South\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Broken_Hill|Australia/Yancowinna\",\"Australia/Darwin|Australia/North\",\"Australia/Hobart|Australia/Currie\",\"Australia/Hobart|Australia/Tasmania\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Melbourne|Australia/Victoria\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/NSW\",\"Etc/GMT-0|Etc/GMT\",\"Etc/GMT-0|Etc/GMT+0\",\"Etc/GMT-0|Etc/GMT0\",\"Etc/GMT-0|Etc/Greenwich\",\"Etc/GMT-0|GMT\",\"Etc/GMT-0|GMT+0\",\"Etc/GMT-0|GMT-0\",\"Etc/GMT-0|GMT0\",\"Etc/GMT-0|Greenwich\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Belgrade|Europe/Ljubljana\",\"Europe/Belgrade|Europe/Podgorica\",\"Europe/Belgrade|Europe/Sarajevo\",\"Europe/Belgrade|Europe/Skopje\",\"Europe/Belgrade|Europe/Zagreb\",\"Europe/Berlin|Arctic/Longyearbyen\",\"Europe/Berlin|Atlantic/Jan_Mayen\",\"Europe/Berlin|Europe/Copenhagen\",\"Europe/Berlin|Europe/Oslo\",\"Europe/Berlin|Europe/Stockholm\",\"Europe/Brussels|Europe/Amsterdam\",\"Europe/Brussels|Europe/Luxembourg\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Helsinki|Europe/Mariehamn\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Kiev|Europe/Kyiv\",\"Europe/Kiev|Europe/Uzhgorod\",\"Europe/Kiev|Europe/Zaporozhye\",\"Europe/Lisbon|Portugal\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Europe/Monaco\",\"Europe/Prague|Europe/Bratislava\",\"Europe/Rome|Europe/San_Marino\",\"Europe/Rome|Europe/Vatican\",\"Europe/Warsaw|Poland\",\"Europe/Zurich|Europe/Busingen\",\"Europe/Zurich|Europe/Vaduz\",\"Indian/Maldives|Indian/Kerguelen\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Enderbury|Pacific/Kanton\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kwajalein|Kwajalein\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tarawa|Pacific/Funafuti\",\"Pacific/Tarawa|Pacific/Majuro\",\"Pacific/Tarawa|Pacific/Wake\",\"Pacific/Tarawa|Pacific/Wallis\"],\"countries\":[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Puerto_Rico America/Antigua\",\"AI|America/Puerto_Rico America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla\",\"AW|America/Puerto_Rico America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Puerto_Rico America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Kuching Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Puerto_Rico America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Toronto America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston\",\"CC|Asia/Yangon Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Puerto_Rico America/Curacao\",\"CX|Asia/Bangkok Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Berlin Europe/Copenhagen\",\"DM|America/Puerto_Rico America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Puerto_Rico America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Abidjan Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Puerto_Rico America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Africa/Abidjan Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Puerto_Rico America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Puerto_Rico America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Brussels Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Paris Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Puerto_Rico America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Puerto_Rico America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana\",\"MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Brussels Europe/Amsterdam\",\"NO|Europe/Berlin Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Asia/Dubai Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Asia/Dubai Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Berlin Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Berlin Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Puerto_Rico America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Asia/Dubai Indian/Maldives Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Puerto_Rico America/Port_of_Spain\",\"TV|Pacific/Tarawa Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kyiv\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Puerto_Rico America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Puerto_Rico America/Tortola\",\"VI|America/Puerto_Rico America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Tarawa Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}')}},n={};function o(e){var p=n[e];if(void 0!==p)return p.exports;var M=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(M.exports,M,M.exports,o),M.loaded=!0,M.exports}o.m=t,e=[],o.O=(t,n,p,M)=>{if(!n){var b=1/0;for(a=0;a<e.length;a++){for(var[n,p,M]=e[a],c=!0,z=0;z<n.length;z++)(!1&M||b>=M)&&Object.keys(o.O).every((e=>o.O[e](n[z])))?n.splice(z--,1):(c=!1,M<b&&(b=M));if(c){e.splice(a--,1);var r=p();void 0!==r&&(t=r)}}return t}M=M||0;for(var a=e.length;a>0&&e[a-1][2]>M;a--)e[a]=e[a-1];e[a]=[n,p,M]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={260:0,725:0,143:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var p,M,[b,c,z]=n,r=0;if(b.some((t=>0!==e[t]))){for(p in c)o.o(c,p)&&(o.m[p]=c[p]);if(z)var a=z(o)}for(t&&t(n);r<b.length;r++)M=b[r],o.o(e,M)&&e[M]&&e[M][0](),e[M]=0;return o.O(a)},n=self.webpackChunk=self.webpackChunk||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),o.nc=void 0,o.O(void 0,[725,143],(()=>o(2110))),o.O(void 0,[725,143],(()=>o(6609)));var p=o.O(void 0,[725,143],(()=>o(3229)));p=o.O(p)})();"
  },
  {
    "path": "public/vendor/telescope/mix-manifest.json",
    "content": "{\n    \"/app.js\": \"/app.js?id=140ed4bc5b10bc99492b97668c59272d\",\n    \"/app-dark.css\": \"/app-dark.css?id=b11fa9a28e9d3aeb8c92986f319b3c44\",\n    \"/app.css\": \"/app.css?id=b3ccfbe68f24cff776f83faa8dead721\"\n}\n"
  },
  {
    "path": "resources/api-docs/1.0/abilities.md",
    "content": "# Abilities\n\n---\n\n- [All abilities](#all-abilities)\n\n- [Single ability](#ability)\n- [Create an ability](#create-ability)\n- [Update an ability](#update-ability)\n- [Delete an ability](#delete-ability)\n\n<a name=\"all-abilities\"></a>\n## All abilities\n\nYou can get a list of all the abilities of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI            | Headers |\n| :- |:---------------|  :-  |\n| GET/HEAD | `abilities` | Default |\n\n### URL parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Fireball\",\n            \"entry\": \"\\n<p>Lorem Ipsum [character:123] .</p>\\n\",\n            \"entry_parsed\": \"\\n<p>Lorem Ipsum <a href=\\\"...\\\">Adam Morley</a>.</p>\\n\",\n            \"tooltip\": null,\n            \"type\": \"3rd level\",\n            \"image\": \"{path}\",\n            \"focus_x\": null,\n            \"focus_y\": null,\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"image_uuid\": null,\n            \"header_uuid\": null,\n            \"is_private\": true,\n            \"is_template\": false,\n            \"is_attributes_private\": false,\n            \"entity_id\": 17,\n            \"tags\": [],\n            \"created_at\": \"2020-03-25T13:52:42.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\": \"2020-05-15T08:35:56.000000Z\",\n            \"updated_by\": 1,\n            \"ability_id\": null,\n            \"charges\": 3,\n            \"abilities\": []\n        }\n    ]\n}\n```\n\n\n<a name=\"ability\"></a>\n## Single ability\n\nTo get the details of a single ability, use the following endpoint.\n\n| Method | URI                         | Headers |\n| :- |:----------------------------|  :-  |\n| GET/HEAD | `abilities/{ability.id}` | Default |\n\n### Results\n```json\n{\n    \"data\":\n    {\n        \"id\": 1,\n        \"name\": \"Fireball\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 17,\n        \"tags\": [],\n        \"created_at\": \"2020-03-25T13:52:42.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\": \"2020-05-15T08:35:56.000000Z\",\n        \"updated_by\": 1,\n        \"type\": \"3rd level\",\n        \"ability_id\": null,\n        \"charges\": 3,\n        \"abilities\": []\n    }\n\n}\n```\n\n\n<a name=\"create-ability\"></a>\n## Create an ability\n\nTo create an ability, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `abilities` | Default |\n\n### Body\n\n| Parameter            | Type | Detail                                                              |\n|:---------------------|   :-   |:--------------------------------------------------------------------|\n| `name`               | `string` (Required) | Name of the ability                                                 |\n| `entry`              | `string` | The html description of the ability                                 |\n| `type`               | `string` | The ability's type                                                  |\n| `ability_id`         | `integer` | The ability's parent ability                                        |\n| `charges`            | `string` | How many charges the ability has                                    |\n| `tags`               | `array` | Array of tag ids                                                    |\n| `entity_image_uuid`  | `string` | Gallery image UUID for the entity image                             |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The ability's tooltip (premium campaign feature)                   |\n| `is_private`         | `boolean` | If the ability is only visible to `admin` members of the campaign   |\n\n### Results\n\n> {success} Code 200 with JSON body of the new ability.\n\n\n<a name=\"update-ability\"></a>\n## Update an ability\n\nTo update an ability, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `abilities/{ability.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating an ability.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated ability.\n\n\n<a name=\"delete-ability\"></a>\n## Delete an ability\n\nTo delete an ability, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `abilities/{ability.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/archives.md",
    "content": "# Archives\n\n---\n\n- [All Archived entities](#all-archives)\n- [Archive/Unarchive an entity](#switch-archive)\n\n<a name=\"all-archives\"></a>\n## All Archives\n\nYou can get a list of entities marked as archived by calling the following API endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/archived` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 5,\n            \"name\": \"Dagger of Darkness\",\n            \"type\": \"item\",\n            \"child_id\": 1,\n            \"tags\": [],\n            \"is_private\": false,\n            \"is_template\": false,\n            \"campaign_id\": 1,\n            \"is_attributes_private\": false,\n            \"tooltip\": \"\",\n            \"header_image\": null,\n            \"image_uuid\": null,\n            \"created_at\": \"2020-06-03T11:04:30.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\": \"2021-06-16T08:01:02.000000Z\",\n            \"updated_by\": 1,\n            \"archived_at\": \"2022-03-11T08:02:02.000000Z\",\n        }\n    ]\n}\n```\n\n\n<a name=\"switch-archive\"></a>\n## Switch archival status\n\nTo toggle the archival status of an entity, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/archive` | Default |\n\n### Body\n\n`empty`\n\n\n### Results\n\n> {success} Code 200 with JSON body of the entity.\n\n"
  },
  {
    "path": "resources/api-docs/1.0/attribute-templates.md",
    "content": "# Attributes\n\n---\n\n- [All Attribute Templates](#all-attribute-templates)\n- [Single Attribute Template](#attribute-template)\n- [Create an Attribute Template](#create-attribute-template)\n- [Update an Attribute Template](#update-attribute-template)\n- [Delete an Attribute Template](#delete-attribute-template)\n\n<a name=\"all-attribute-templates\"></a>\n## All Attribute Templates\n\nYou can get a list of all the attribute templates of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI                                  | Headers |\n| :- |:-------------------------------------|  :-  |\n| GET/HEAD | `attribute_templates` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 3,\n        \"name\": \"Default Hero\",\n        \"entry\": null,\n        \"entry_parsed\": null,\n        \"tooltip\": null,\n        \"type\": null,\n        \"image\": null,\n        \"focus_x\": null,\n        \"focus_y\": null,\n        \"image_full\": \"\",\n        \"image_thumb\": \"http://kanka.io/example.png\",\n        \"has_custom_image\": false,\n        \"image_uuid\": null,\n        \"header_full\": null,\n        \"header_uuid\": null,\n        \"has_custom_header\": false,\n        \"is_private\": false,\n        \"is_template\": false,\n        \"is_attributes_private\": false,\n        \"entity_id\": 1778,\n        \"tags\": [],\n        \"created_at\": \"2025-04-10T07:20:02.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\": \"2025-04-10T07:30:16.000000Z\",\n        \"updated_by\": 1,\n        \"urls\": {\n            \"view\": \"http://kanka.io/w/1/entities/1778\",\n            \"api\": null\n        },\n        \"entity_type_id\": null,\n        \"attribute_template\": null\n    }\n}\n```\n\n\n<a name=\"attribute-template\"></a>\n## Attribute Template\n\nTo get the details of a single attribute template, use the following endpoint.\n\n| Method | URI                                                 | Headers |\n| :- |:----------------------------------------------------|  :-  |\n| GET/HEAD | `attribute_templates/{attribute_template.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 3,\n        \"name\": \"Default Hero\",\n        \"entry\": null,\n        \"entry_parsed\": null,\n        \"tooltip\": null,\n        \"type\": null,\n        \"image\": null,\n        \"focus_x\": null,\n        \"focus_y\": null,\n        \"image_full\": \"\",\n        \"image_thumb\": \"http://kanka.io/example.png\",\n        \"has_custom_image\": false,\n        \"image_uuid\": null,\n        \"header_full\": null,\n        \"header_uuid\": null,\n        \"has_custom_header\": false,\n        \"is_private\": false,\n        \"is_template\": false,\n        \"is_attributes_private\": false,\n        \"entity_id\": 1778,\n        \"tags\": [],\n        \"created_at\": \"2025-04-10T07:20:02.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\": \"2025-04-10T07:30:16.000000Z\",\n        \"updated_by\": 1,\n        \"urls\": {\n            \"view\": \"http://kanka.io/w/1/entities/1778\",\n            \"api\": null\n        },\n        \"entity_type_id\": null,\n        \"attribute_template\": null\n    }\n}\n```\n\n\n<a name=\"create-attribute-template\"></a>\n## Create an attribute template\n\nTo create an attribute template, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `attribute_templates` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the attribute template |\n| `attribute_template_id` | `integer` | The parent attribute template's id |\n| `is_private` | `boolean` | If the attribute template is only visible to `admin` members of the campaign |\n| `is_enabled` | `boolean` | If the attribute template is enabled on the campaign |\n| `entity_type_id` | `int` | Automatically apply this template's attributes to new entities of the given type id. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new attribute template.\n\n\n<a name=\"update-attribute-template\"></a>\n## Update an attribute template\n\nTo update an attribute template, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `attribute_templates/{attribute_template.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating an attribute template. The `name` field is required.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated attribute template.\n\n\n<a name=\"delete-attribute-template\"></a>\n## Delete an attribute template\n\nTo delete an attribute template, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `attribute_templates/{attribute_template.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/bookmarks.md",
    "content": "# Bookmarks\n\n---\n\n- [All Bookmarks](#all-bookmarks)\n- [Bookmark](#bookmark)\n- [Create a Bookmark](#create-bookmark)\n- [Update a Bookmark](#update-bookmark)\n- [Delete a Bookmark](#delete-bookmark)\n\n<a name=\"all-bookmarks\"></a>\n## All Bookmarks\n\nYou can get a list of all the bookmarks of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI            | Headers |\n| :- |:---------------|  :-  |\n| GET/HEAD | `bookmarks` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n           \"id\": 2,\n           \"name\": \"Random Chara\",\n           \"entity_id\": null,\n           \"filters\": null,\n           \"icon\": null,\n           \"is_private\": 0,\n           \"is_active\": 1,\n           \"menu\": null,\n           \"random_entity_type\": \"character\",\n           \"type\": null,\n           \"tab\": \"\",\n           \"target\": null,\n           \"dashboard_id\": null,\n           \"created_at\": \"2020-12-24T00:38:49.000000Z\",\n           \"updated_at\": \"2020-12-24T00:41:20.000000Z\",\n           \"created_by\": 420,\n           \"updated_by\": 422,\n           \"options\": {\"is_nested\": \"1\"}\n        }\n    ]\n}\n```\n\n\n<a name=\"bookmark\"></a>\n## Bookmark\n\nTo get the details of a single bookmark, use the following endpoint.\n\n| Method | URI                          | Headers |\n| :- |:-----------------------------|  :-  |\n| GET/HEAD | `bookmarks/{bookmark.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 2,\n        \"name\": \"Random Chara\",\n        \"entity_id\": null,\n        \"filters\": null,\n        \"icon\": null,\n        \"is_private\": 0,\n        \"is_active\": 1,\n        \"menu\": null,\n        \"random_entity_type\": \"character\",\n        \"type\": null,\n        \"tab\": \"\",\n        \"target\": null,\n        \"dashboard_id\": null,\n        \"created_at\": \"2020-12-24T00:38:49.000000Z\",\n        \"updated_at\": \"2020-12-24T00:41:20.000000Z\",\n        \"created_by\": 420,\n        \"updated_by\": 422,\n        \"options\": {\"is_nested\": \"1\"}\n    }\n\n}\n```\n\n\n<a name=\"create-bookmark\"></a>\n## Create a Bookmark\n\nTo create a bookmark, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `bookmarks` | Default |\n\n### Body\n\n| Parameter | Type | Detail                                                                                |\n| :- |   :-   |:--------------------------------------------------------------------------------------|\n| `name` | `string` (Required) | Name of the bookmark                                                                  |\n| `entity_id` | `int` (Required without type, random_entity_type, dashboard_id) | Entity id of the bookmark                                                             |\n| `type` | `int` (Required without entity_id, random_entity_type, dashboard_id) | The bookmark entity type id                                                           |\n| `random_entity_type` | `string` (Required without entity_id, type, dashboard_id) | The entity type (singular) for a random entity of that type                           |\n| `dashboard_id` | `int` (Required without entity_id, type, random_entity_type) | The dashboard id                                                                      |\n| `icon` | `string` | Custom icon for premium campaigns                                                     |\n| `tab` | `string` | Tab options for the link                                                              |\n| `filters` | `string` | Filter options for the link                                                           |\n| `menu` | `string` | Menu options for the link                                                             |\n| `position` | `int` | Position of the link                                                                  |\n| `is_private` | `boolean` | If the bookmark is only visible to admin members of the campaign                      |\n| `is_active` | `boolean` | If the bookmark is visible                                                            |\n| `options`| `object` | Key/Value pairs for optional parameters, currently allowed Keys : `is_nested:boolean` |\n\n### Results\n\n> {success} Code 200 with JSON body of the new bookmark.\n\n\n<a name=\"update-bookmark\"></a>\n## Update a Bookmark\n\nTo update a bookmark, use the following endpoint.\n\n| Method | URI                       | Headers |\n| :- |:--------------------------|  :-  |\n| PUT/PATCH | `bookmarks/{bookmark.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a bookmark.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated bookmark.\n\n\n<a name=\"delete-bookmark\"></a>\n## Delete a Bookmark\n\nTo delete a bookmark, use the following endpoint.\n\n| Method | URI                            | Headers |\n| :- |:-------------------------------|  :-  |\n| DELETE | `bookmarks/{bookmark.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/calendar-weathers.md",
    "content": "# Calendars Weathers\n\n---\n\n- [All Calendar Weathers](#all-calendar-weathers)\n- [Single Calendar Weather](#calendar-weather)\n- [Create a Calendar Weather](#create-calendar-weather)\n- [Update a Calendar Weather](#update-calendar-weather)\n- [Delete a Calendar Weather](#delete-calendar-weather)\n\n<a name=\"all-calendar-weathers\"></a>\n## All Calendar Weathers\n\nYou can get a list of all the weather effects of a calendar by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI                                           | Headers |\n| :- |:----------------------------------------------|  :-  |\n| GET/HEAD | `calendars/{calendar.id}/calendar_weather` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 2,\n            \"calendar_id\": 3,\n            \"created_by\": 1,\n            \"weather\": \"bolt\",\n            \"temperature\": \"asdasd\",\n            \"precipitation\": \"\",\n            \"wind\": \"\",\n            \"effect\": \"\",\n            \"day\": 3,\n            \"month\": 2,\n            \"year\": 110,\n            \"created_at\": \"2020-01-27 14:32:59\",\n            \"updated_at\": \"2020-01-27 14:33:22\",\n            \"visibility_id\": 1,\n        }\n    ],\n    \"links\": {\n        \"first\": \"https://api.kanka.io/{{version}}/campaigns/1/calendars/1/calendar_weather?page=1\",\n        \"last\": \"https://api.kanka.io/{{version}}/campaigns/1/calendars/1/calendar_weather?page=1\",\n        \"prev\": null,\n        \"next\": null\n    },\n    \"meta\": {\n        \"current_page\": 1,\n        \"from\": 1,\n        \"last_page\": 1,\n        \"path\": \"https://api.kanka.io/{{version}}/campaigns/1/calendars/1/calendar_weather\",\n        \"per_page\": 15,\n        \"to\": 1,\n        \"total\": 1\n    }\n}\n```\n\n\n<a name=\"calendar-weather\"></a>\n## Calendar Weather\n\nTo get the details of a single weather effect, use the following endpoint.\n\n| Method | URI                                                                 | Headers |\n| :- |:--------------------------------------------------------------------|  :-  |\n| GET/HEAD | `calendars/{calendar.id}/calendar_weather/{calendar_weather.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 2,\n        \"calendar_id\": 3,\n        \"created_by\": 1,\n        \"weather\": \"bolt\",\n        \"temperature\": \"asdasd\",\n        \"precipitation\": \"\",\n        \"wind\": \"\",\n        \"effect\": \"\",\n        \"day\": 3,\n        \"month\": 2,\n        \"year\": 110,\n        \"created_at\": \"2020-01-27 14:32:59\",\n        \"updated_at\": \"2020-01-27 14:33:22\",\n        \"visibility_id\": 1\n    }\n\n}\n```\n\n\n<a name=\"create-calendar-weather\"></a>\n## Create a Calendar Weather\n\nTo create a calendar weather, use the following endpoint.\n\n| Method | URI                                        | Headers |\n| :- |:-------------------------------------------|  :-  |\n| POST | `calendars/{calendar.id}/calendar_weather` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `year` | `integer` (Required) | Year for the weather |\n| `month` | `integer` (Required) | Month for the weather |\n| `day` | `integer` (Required) | Day for the weather |\n| `weather` | `string` (Required) | Weather type |\n| `temperature` | `string` | The Temperature |\n| `precipitation` | `string` | The precipitation |\n| `wind` | `string` | The wind |\n| `effect` | `string` | The effect |\n| `visibility_id` | `integer` | The visibility: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new calendar weather.\n\n\n<a name=\"update-calendar-weather\"></a>\n## Update a Calendar Weather\n\nTo update a calendar, use the following endpoint.\n\n| Method | URI                                                              | Headers |\n| :- |:-----------------------------------------------------------------|  :-  |\n| PUT/PATCH | `calendars/{calendar.id}/calendar_weather/{calendar_weather.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a calendar weather.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated calendar weather.\n\n\n<a name=\"delete-calendar-weather\"></a>\n## Delete a Calendar Weather\n\nTo delete a calendar weather, use the following endpoint.\n\n| Method | URI                                                              | Headers |\n| :- |:-----------------------------------------------------------------|  :-  |\n| DELETE | `calendars/{calendar.id}/calendar_weather/{calendar_weather.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/calendars.md",
    "content": "month_length# Calendars\n\n---\n\n- [All Calendars](#all-calendars)\n- [Single Calendar](#calendar)\n- [Create a Calendar](#create-calendar)\n- [Update a Calendar](#update-calendar)\n- [Delete a Calendar](#delete-calendar)\n- [Reminders](#reminders)\n- [Advance Date](#advance)\n- [Retreat Date](#retreat)\n- [Weather](#weather)\n\n<a name=\"all-calendars\"></a>\n## All Calendars\n\nYou can get a list of all the calendars of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI            | Headers |\n| :- |:---------------|  :-  |\n| GET/HEAD | `calendars` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 3,\n            \"name\": \"Georgian Calendar\",\n            \"entry\": \"\\n<p>Lorem Ipsum</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": false,\n            \"entity_id\": 78,\n            \"tags\": [],\n            \"created_at\": \"2019-01-28T06:29:29.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\": \"2020-01-30T17:30:52.000000Z\",\n            \"updated_by\": 1,\n            \"type\": \"Primary\",\n            \"date\": \"311-2-3\",\n            \"parameters\": null,\n            \"months\": [\n              {\n                \"name\": \"January\",\n                \"length\": 31,\n                \"type\": \"standard\"\n              },\n              {\n                \"name\": \"February\",\n                \"length\": 5,\n                \"type\": \"intercalary\"\n              }\n            ],\n            \"start_offset\": 0,\n            \"weekdays\": [\n                \"Sul\",\n                \"Mol\",\n                \"Zol\",\n                \"Wir\",\n                \"Zor\",\n                \"Far\",\n                \"Sar\"\n            ],\n            \"years\": {\n                \"299\": \"Year of Blood and Fire\",\n                \"300\": \"Year of Water and Bone\"\n            },\n            \"seasons\": [\n              {\n                  \"name\": \"Spring\",\n                  \"month\": 1,\n                  \"day\": 1\n              },\n              {\n                  \"name\": \"Summer\",\n                  \"month\": 4,\n                  \"day\": 1\n              }\n            ],\n            \"moons\": [\n              {\n                  \"name\": \"Zarantyr\",\n                  \"fullmoon\": \"13\",\n                  \"offset\": 0,\n                  \"colour\": \"aqua\"\n              },\n              {\n                  \"name\": \"Olarune\",\n                  \"fullmoon\": \"17\",\n                  \"offset\": 0,\n                  \"colour\": \"brown\"\n              }\n            ],\n            \"suffix\": \"BC\",\n            \"format\": \"d M, y s\",\n            \"has_leap_year\": true,\n            \"leap_year_amount\": 4,\n            \"leap_year_month\": 2,\n            \"leap_year_offset\": 3,\n            \"leap_year_start\": 233,\n            \"skip_year_zero\": true\n        }\n    ],\n    \"links\": {\n        \"first\": \"https://api.kanka.io/{{version}}/campaigns/1/calendars?page=1\",\n        \"last\": \"https://api.kanka.io/{{version}}/campaigns/1/calendars?page=1\",\n        \"prev\": null,\n        \"next\": null\n    },\n    \"meta\": {\n        \"current_page\": 1,\n        \"from\": 1,\n        \"last_page\": 1,\n        \"path\": \"https://api.kanka.io/{{version}}/campaigns/1/calendars\",\n        \"per_page\": 100,\n        \"to\": 1,\n        \"total\": 1\n    }\n}\n```\n\n<a name=\"calendar\"></a>\n## Calendar\n\nTo get the details of a single calendar, use the following endpoint.\n\n| Method | URI                          | Headers |\n| :- |:-----------------------------|  :-  |\n| GET/HEAD | `calendars/{calendar.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 3,\n        \"name\": \"Georgian Calendar\",\n        \"entry\": \"\\n<p>Lorem Ipsum</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": false,\n        \"entity_id\": 78,\n        \"tags\": [],\n        \"created_at\": \"2019-01-28T06:29:29.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\": \"2020-01-30T17:30:52.000000Z\",\n        \"updated_by\": 1,\n        \"type\": \"Primary\",\n        \"date\": \"311-2-3\",\n        \"parameters\": null,\n        \"months\": [\n          {\n            \"name\": \"January\",\n            \"length\": 31,\n            \"type\": \"standard\"\n          },\n          {\n            \"name\": \"February\",\n            \"length\": 5,\n            \"type\": \"intercalary\"\n          }\n        ],\n        \"start_offset\": 0,\n        \"weekdays\": [\n            \"Sul\",\n            \"Mol\",\n            \"Zol\",\n            \"Wir\",\n            \"Zor\",\n            \"Far\",\n            \"Sar\"\n        ],\n        \"years\": {\n            \"299\": \"Year of Blood and Fire\",\n            \"300\": \"Year of Water and Bone\"\n        },\n        \"seasons\": [\n          {\n              \"name\": \"Spring\",\n              \"month\": 1,\n              \"day\": 1\n          },\n          {\n              \"name\": \"Summer\",\n              \"month\": 4,\n              \"day\": 1\n          }\n        ],\n        \"moons\": [\n          {\n              \"name\": \"Zarantyr\",\n              \"fullmoon\": \"13\",\n              \"offset\": 0,\n              \"colour\": \"aqua\"\n          },\n          {\n              \"name\": \"Olarune\",\n              \"fullmoon\": \"17\",\n              \"offset\": 0,\n              \"colour\": \"brown\"\n          }\n        ],\n        \"suffix\": \"BC\",\n        \"format\": \"d M, y s\",\n        \"has_leap_year\": true,\n        \"leap_year_amount\": 4,\n        \"leap_year_month\": 2,\n        \"leap_year_offset\": 3,\n        \"leap_year_start\": 233,\n        \"skip_year_zero\": true\n    }\n\n}\n```\n\n\n<a name=\"create-calendar\"></a>\n## Create a Calendar\n\nTo create a calendar, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `calendars` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the calendar |\n| `entry` | `string` | The html description of the calendar |\n| `type` | `string` | The calendar's type |\n| `current_year` | `integer` | The current calendar year |\n| `current_month` | `integer` | The current calendar month |\n| `current_day` | `integer` | The current calendar day |\n| `tags` | `array` | Array of tag ids |\n| `month_name` | `array` | Array of month names |\n| `month_length` | `array` | Array of month lengths |\n| `month_type` | `array` | Array of month types (standard or intercalary) |\n| `weekday` | `array` (required, min 2) | Array of weekday names |\n| `year_name` | `array` | Array of year names |\n| `year_number` | `array` | Array of year numbers |\n| `moon_name` | `array` | Array of moon names |\n| `moon_fullmoon` | `array` | Array of when (every how many days) a full moon occurs |\n| `moon_offset` | `array` | Array of days when the first full moon if offset |\n| `moon_colour` | `array` | Array of hex colours of each moon |\n| `moon_id` | `array` | Array of each moon's id |\n| `epoch_name` | `array` | Array of epoch names |\n| `season_name` | `array` | Array of season names |\n| `season_month` | `array` | Array of seasons month start |\n| `season_day` | `array` | Array of seasons day start |\n| `format` | `string` | The rendering format for the calendar dates |\n| `has_leap_year` | `boolean` | Whether the calendar has leap years |\n| `leap_year_amount` | `integer` | The amount of leap days |\n| `leap_year_offset` | `integer` | Every how many years the leap days occur |\n| `leap_year_start` | `integer` | The year from which the leap days start occurring  |\n| `tags` | `array` | Array of tag ids |\n| `skip_year_zero` | `boolean` | Whether the calendar skips year zero to start in year one |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The calendar's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the calendar is only visible to `admin` members of the campaign |\n\n### Results\n\n> {success} Code 200 with JSON body of the new calendar.\n\n\n<a name=\"update-calendar\"></a>\n## Update a Calendar\n\nTo update a calendar, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `calendars/{calendar.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a calendar.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated calendar.\n\n\n<a name=\"delete-calendar\"></a>\n## Delete a Calendar\n\nTo delete a calendar, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `calendars/{calendar.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n\n<a name=\"reminders\"></a>\n## Reminders\n\nYou can get a list of all the reminders of a calendar by using the following endpoint.\n\n| Method | URI                                    | Headers |\n| :- |:---------------------------------------|  :-  |\n| GET/HEAD | `calendars/{calendar.id}/reminders` | Default |\n\n### Results\n```json\n{\n\"data\": [\n        {\n            \"calendar_id\": 2,\n            \"colour\": \"#cccccc\",\n            \"comment\": null,\n            \"created_at\": \"2022-08-25T20:24:40.000000Z\",\n            \"created_by\": 2,\n            \"date\": \"1-3-1\",\n            \"day\": 1,\n            \"entity_id\": 299,\n            \"id\": 9,\n            \"is_private\": false,\n            \"is_recurring\": false,\n            \"length\": 1,\n            \"month\": 3,\n            \"recurring_periodicity\": null,\n            \"recurring_until\": null,\n            \"type_id\": 4,\n            \"updated_at\": \"2023-04-19T18:40:16.000000Z\",\n            \"updated_by\": null,\n            \"visibility_id\": 1,\n            \"year\": 1\n        },\n        {\n            \"calendar_id\": 2,\n            \"colour\": \"#ff8000\",\n            \"comment\": \"Harvest Season\",\n            \"created_at\": \"2022-12-12T22:12:54.000000Z\",\n            \"created_by\": 2,\n            \"date\": \"1-1-5\",\n            \"day\": 5,\n            \"entity_id\": 298,\n            \"id\": 13,\n            \"is_private\": false,\n            \"is_recurring\": true,\n            \"length\": 8,\n            \"month\": 1,\n            \"recurring_periodicity\": \"month\",\n            \"recurring_until\": \"2\",\n            \"type_id\": null,\n            \"updated_at\": \"2023-02-14T21:38:13.000000Z\",\n            \"updated_by\": null,\n            \"visibility_id\": 1,\n            \"year\": 1\n        },\n}\n```\n\n<a name=\"advance\"></a>\n## Advance Date\n\nYou can advance the date of the calendar by one day using the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `calendars/{calendar.id}/advance` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n<a name=\"retreat\"></a>\n## Retreat Date\n\nYou can turn back the date of the calendar by one day using the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `calendars/{calendar.id}/retreat` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n<a name=\"weather\"></a>\n## Weather\n\nYou can control the weather of the calendar with the following docs: [Calendar Weather](/api-docs/{{version}}/calendar-weathers)\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/applications.md",
    "content": "# Campaign Applications\n\n---\n\n- [Campaign Applications](#campaign-applications)\n- [Campaign Application](#campaign-application)\n- [Approve an Application](#approve-an-application)\n- [Reject an Application](#reject-an-application)\n\n<a name=\"campaign-applications\"></a>\n## Campaign applications\n\nTo get a list of all the current applications to a campaign, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `{{version}}/campaigns/{id}/applications` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 114,\n            \"user_id\": 1526,\n            \"text\": \"I'm someone who plays a lone wolf rogue with a dark past\",\n            \"created_at\": \"2020-11-15T10:42:38.000000Z\",\n            \"updated_at\": \"2020-11-15T10:42:38.000000Z\",\n        },\n        {\n            \"id\": 117,\n            \"user_id\": 5325,\n            \"text\": \"Can I join?\",\n            \"created_at\": \"2020-11-15T10:42:38.000000Z\",\n            \"updated_at\": \"2020-11-15T10:42:38.000000Z\",\n        },\n        {\n            \"id\": 118,\n            \"user_id\": 6326,\n            \"text\": \"I'm your old mate bob, pls approve\",\n            \"created_at\": \"2020-11-15T10:42:38.000000Z\",\n            \"updated_at\": \"2020-11-15T10:42:38.000000Z\",\n        }\n    ]\n}\n```\n<a name=\"campaign-application\"></a>\n## Campaign application\n\nTo get a single application to a campaign, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `{{version}}/campaigns/{id}/applications/{application.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 114,\n            \"user_id\": 1526,\n            \"text\": \"I'm someone who plays a lone wolf rogue with a dark past\",\n            \"created_at\": \"2020-11-15T10:42:38.000000Z\",\n            \"updated_at\": \"2020-11-15T10:42:38.000000Z\",\n        },\n    ]\n}\n```\n\n\n<a name=\"approve-an-application\"></a>\n## Approve an Application\n\nTo approve an application, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `{{version}}/campaigns/{id}/applications/{application.id}/approve` | Default |\n\n### Body\n\n| Parameter         | Type     | Detail                   |\n|:------------------|:---------|:-------------------------|\n| `role_id`       | `int`    | The role to be assigned to the approved user   |\n| `reason`        | `string` | Message for the user who was approved  |\n\n\n### Results\n\n> {success} Code 200 with JSON message.\n\n\n<a name=\"reject-an-application\"></a>\n## Reject an Application\n\nTo reject an application, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `{{version}}/campaigns/{id}/applications/{application.id}/approve` | Default |\n\n### Body\n\n| Parameter         | Type     | Detail                   |\n|:------------------|:---------|:-------------------------|\n| `reason`        | `string` | Message for the user who was rejected  |\n\n\n### Results\n\n> {success} Code 200 with JSON message.\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/categories.md",
    "content": "- [All Categories](#all-categories)\n- [Create a Category](#create-category)\n- [Update a Category](#update-category)\n- [Delete a Category](#delete-category)\n- [Category entries](#category-entries)\n\n# Categories\n\nCategories, previously known as Modules or Entity Types, are how data is stored in Kanka. Characters is a category. Locations is a category. Gods is a custom categoriy.\n\n\n\n<a name=\"all-categories\"></a>\n## Campaign categories\n\nSince campaigns have their own configuration, enabling/disabling categories, renaming them, and adding custom categories, you need to pass the campaign ID in the URL.\n\n| Method | URI                                    | Headers |\n| :- |:---------------------------------------|  :-  |\n| GET/HEAD | `campaigns/{campaign.id}/entity_types` | Default |\n\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"code\": \"character\",\n            \"singular\": \"Character\",\n            \"plural\": \"Characters\",\n            \"icon\": \"\",\n            \"is_custom\": false,\n            \"is_enabled\": true,\n            \"is_nested\": false,\n            \"has_table\": false\n        },\n        {\n            \"id\": 25,\n            \"code\": \"god\",\n            \"singular\": \"God\",\n            \"plural\": \"Gods\",\n            \"icon\": \"fa-duotone fa-user-beard-bolt\",\n            \"is_custom\": true,\n            \"is_enabled\": true,\n            \"is_nested\": true,\n            \"has_table\": true\n        }\n    ]\n}\n```\n\nIf the campaign has given a category a custom name, it will appear in the Singular and Plural fields. Same for a custom icon (`\"\"` if none is set).\n\nThe `is_custom` field is used to determine if the category is a custom category.\n\nThe `is_enabled` field is a Kanka internal field, unrelated to if a category is enabled.\n\nThe `is_nested` field is used to determine if entries in the category have a `parent` nesting concept.\n\n<a name=\"create-category\"></a>\n## Create a Category\n\nTo create a category, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entity_types` | Default |\n\n### Body\n\n| Parameter            | Type                | Detail                                                                            |\n|:---------------------|:--------------------|:----------------------------------------------------------------------------------|\n| `singular`           | `string` (Required) | Singular name of entities in this category                                          |\n| `plural`             | `string` (Required) | Plural name of entities in this category                                            |\n| `icon`               | `string` (Required) | FontAwesome icon for entities in this category                                      |\n| `roles`              | `array`   | Pass a bunch of campaign role IDs that get read access to entities of this category |\n\n### Results\n\n> {success} Code 200 with JSON body of the new category.\n\n\n<a name=\"update-category\"></a>\n## Update a category\n\nTo update a category, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `entity_types/{entity_type.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a category.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated category.\n\n\n<a name=\"delete-category\"></a>\n## Delete a category\n\nTo delete a category, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entity_types/{entity_type.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n\n\n<a name=\"category-entries\"></a>\n## Category entries\n\nTo get a list of entries belongs to the category, call the entities endpoint with the [correct filtering](/api-docs/{{version}}/entities#filtering).\n\n| Method | URI                                   | Headers |\n| :- |:--------------------------------------|  :-  |\n| DELETE | `entities?type_id[]={entity_type.id}` | Default |\n\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/dashboard-widgets.md",
    "content": "# Dashboard Widgets\n\n---\n\n- [All Dashboard Widgets](#all-dashboard-widgets)\n- [Single Dashboard Widget](#dashboard-widget)\n- [Create a Dashboard Widget](#create-dashboard-widget)\n- [Update a Dashboard Widget](#update-dashboard-widget)\n- [Delete a Dashboard Widget](#delete-dashboard-widget)\n\n<a name=\"all-dashboard-widgets\"></a>\n## All Dashboard Widgets\n\nYou can get a list of all the dashboard Widgets of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `campaign_dashboard_widgets` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"campaign_id\": 1,\n            \"entity_id\": 6,\n            \"widget\": \"preview\",\n            \"config\": {\n              \"full\": \"1\"\n            },\n            \"width\": 6,\n            \"position\": 2,\n            \"tags\": [],\n            \"created_at\": \"2020-06-03T11:04:31.000000Z\",\n            \"updated_at\": \"2020-09-06T08:59:07.000000Z\",\n            \"created_by\": 420,\n            \"updated_by\": 422\n        }\n    ]\n}\n```\n\n\n<a name=\"dashboard-widget\"></a>\n## Dashboard Widget\n\nTo get the details of a single dashboard Widget, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `campaign_dashboard_widgets/{campaign-dashboard-widget.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"campaign_id\": 1,\n        \"entity_id\": 6,\n        \"widget\": \"preview\",\n        \"config\": {\n          \"full\": \"1\"\n        },\n        \"width\": 6,\n        \"position\": 2,\n        \"tags\": [],\n        \"created_at\": \"2020-06-03T11:04:31.000000Z\",\n        \"updated_at\": \"2020-09-06T08:59:07.000000Z\",\n        \"created_by\": 420,\n        \"updated_by\": 422\n    }\n\n}\n```\n\n\n<a name=\"create-dashboard Widget\"></a>\n## Create a Dashboard Widget\n\nTo create a dashboard Widget, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `campaign_dashboard_widgets` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `widget` | `string` (Required) | The widget type: `preview`, `recent`, `random`, `calendar`, `header` or `campaign`'  |\n| `entity_id` | `int` | The related entity ID (required for preview and calendar) |\n| `config` | `object` | Config of the widget: boolean `singular`, boolean `full`, boolean `entity-header` |\n| `position` | `int` | Position of the widget. If empty, placed at end |\n| `tags` | `array` | Array of tag ids |\n| `save_tags` | `boolean` | Required to save tags |\nWidget |\n\n### Results\n\n> {success} Code 200 with JSON body of the new dashboard Widget.\n\n\n<a name=\"update-dashboard-widget\"></a>\n## Update a Dashboard Widget\n\nTo update a dashboard widget, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `campaign_dashboard_widgets/{campaign-dashboard-widget.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a dashboard Widget.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated dashboard Widget.\n\n\n<a name=\"delete-dashboard Widget\"></a>\n## Delete a Dashboard Widget\n\nTo delete a dashboard widget, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `campaign_dashboard_widgets/{campaign-dashboard-widget.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/default-thumbnails.md",
    "content": "# Campaign Thumbnails\n\n---\n\n- [All Default Thumbnails](#all-thumbnails)\n- [Create a Image](#create-image)\n- [Delete a Image](#delete-image)\n\n<a name=\"all-thumbnails\"></a>\n## All Thumbnails\n\nYou can get a list of all the default thumbnails of a campaign by using the following endpoint. This is a premium campaign feature! If the campaign isn't premium, this API endpoint will result in a 404.\n\n\n| Method | URI                                                      | Headers |\n| :- |:---------------------------------------------------------|  :-  |\n| GET/HEAD | `{{version}}/campaigns/{id}/default-thumbnails` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"entity_type\": \"abilities\",\n            \"url\": \"https://th.kanka.io/gR8y1nxfEhBC1nVYdQpr2pUW3lY=/48x48/smart/src/app/logos/logo.png\",\n        },\n        {\n            \"entity_type\": \"gods\",\n            \"url\": \"https://th.kanka.io/gR8y1nxfEhBC1nVYdQpr2pUW3lY=/48x48/smart/src/app/logos/logo.png\",\n        }\n    ]\n}\n```\n\n<a name=\"create-image\"></a>\n## Create a Default Image\n\nTo create a default image, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `default-thumbnails` | Default |\n\n### Body\n\n| Parameter              | Type | Detail |\n|:-----------------------|   :-   |  :-  |\n| `entity_type_id`       | `integer`(required) | The entity type id |\n| `default_entity_image` | `file` | File uploaded |\n\n\n### Results\n\n> {success} Code 200 with JSON.\n\n<a name=\"delete-image\"></a>\n## Delete a Default Image\n\nTo delete a default image, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `default-thumbnails` | Default |\n\n### Body\n\n| Parameter   | Type | Detail |\n|:------------|   :-   |  :-  |\n| `entity_type_id` | `integer`(required) | The entity type id |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/images.md",
    "content": "# Images\n\n---\n\n- [All Gallery Images](#all-images)\n- [Single Image](#image)\n- [Create a Image](#create-image)\n- [Update a Image](#update-image)\n- [Delete a Image](#delete-image)\n- [Create a folder](#create-folder)\n\n<a name=\"all-images\"></a>\n## All Gallery Images\n\nYou can get a list of all the images of a campaign by using the following endpoint.\n\n\n| Method | URI                               | Headers |\n| :- |:----------------------------------|  :-  |\n| GET/HEAD | `{{version}}/campaigns/{id}/images` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": \"037494f8-1875-4e88-9de9-72efa4bfae11\",\n            \"name\": \"attr\",\n            \"is_folder\": false,\n            \"folder_id\": null,\n            \"path\": \"{url}\",\n            \"ext\": \"png\",\n            \"size\": 1147,\n            \"created_at\": \"2020-11-15T10:42:38.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\": \"2020-11-15T10:42:38.000000Z\",\n            \"focus_x\": 473,\n            \"focus_y\": 17\n        },\n        {\n            \"id\": \"0acd32f5-3286-4ffe-b82a-4e1e61c455c4\",\n            \"name\": \"Blablabla Q&amp;A\",\n            \"is_folder\": false,\n            \"folder_id\": null,\n            \"path\": \"{url}\",\n            \"ext\": \"jpeg\",\n            \"size\": 7201,\n            \"created_at\": \"2020-11-15T10:39:11.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\": \"2020-11-15T10:39:20.000000Z\",\n            \"focus_x\": null,\n            \"focus_y\": null\n        }\n    ]\n}\n```\n\n\n<a name=\"image\"></a>\n## Image\n\nTo get the details of a single image, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `{{version}}/campaigns/{id}/images/{image.id}` | Default |\n\n### Results\n```json\n{\n    \"data\":\n    {\n        \"id\": \"0acd32f5-3286-4ffe-b82a-4e1e61c455c4\",\n        \"name\": \"Blablabla Q&amp;A\",\n        \"is_folder\": false,\n        \"folder_id\": null,\n        \"path\": \"{url}\",\n        \"ext\": \"jpeg\",\n        \"size\": 7201,\n        \"created_at\": \"2020-11-15T10:39:11.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\": \"2020-11-15T10:39:20.000000Z\",\n        \"focus_x\": null,\n        \"focus_y\": null\n    }\n\n}\n```\n\n\n<a name=\"create-image\"></a>\n## Create a Image\n\nTo create a image, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `{{version}}/campaigns/{id}/images` | Default |\n\n### Body\n\n| Parameter         | Type     | Detail                   |\n|:------------------|:---------|:-------------------------|\n| `folder_id`       | `int`    | The image's folder id    |\n| `file[]`          | `stream` | Stream to file uploaded  |\n| `visibility_id` | `int`    | Visibility of the image  |\n\n\n### Results\n\n> {success} Code 200 with JSON body of the new image.\n\n\n<a name=\"update-image\"></a>\n## Update a Image\n\nTo update a image, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `{{version}}/campaigns/{id}/images/{image.id}` | Default |\n\n### Body\n\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `folder_id` | `integer` | The image's folder id |\n| `name` | `string` | The image's name |\n\n### Results\n\n> {success} Code 200 with JSON body of the updated image.\n\n\n<a name=\"delete-image\"></a>\n## Delete a Image\n\nTo delete a image, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `{{version}}/campaigns/{id}/images/{image.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n\n<a name=\"create-folder\"></a>\n## Create a folder\n\nCreating a folder is currently not supported by the Kanka API.\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/members.md",
    "content": "# Campaign Members\n\n---\n\n- [Campaign Members](#campaign-members)\n- [Campaign Member](#campaign-member)\n- [Add Role To Member](#add-role-to-member)\n- [Remove Role From Member](#remove-role-from-member)\n\n<a name=\"campaign-members\"></a>\n## Campaign Members\n\nTo get a list of all the members of a campaign, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `{{version}}/campaigns/{id}/users` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Ilestis\",\n            \"avatar\": \"{url}\"\n        },\n        {\n            \"id\": 2,\n            \"name\": \"Ilestis Jr.\",\n            \"avatar\": \"{url}\"\n        }\n    ]\n}\n```\n\n<a name=\"campaign-member\"></a>\n## Campaign Member\n\nTo get the info of an specific member of a campaign, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `{{version}}/campaigns/{id}/users/{user_id}` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Ilestis\",\n            \"avatar\": \"{url}\"\n        }\n    ]\n}\n```\n<a name=\"add-role-to-member\"></a>\n## Add Role To Member\n\nTo add a role to a member of the campaign, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `{{version}}/campaigns/{id}/users` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `user_id` | `integer` (Required) | The user's id |\n| `role_id` | `integer` (Required) | The role's id |\n\n\n### Results\n```json\n{\n    \"data\": \"role successfully added to user\"\n}\n```\n\n<a name=\"remove-role-from-member\"></a>\n## Remove Role From Member\n\nTo remove a role from a member of the campaign, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `{{version}}/campaigns/{id}/users` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `user_id` | `integer` (Required) | The user's id |\n| `role_id` | `integer` (Required) | The role's id |\n\n### Results\n```json\n{\n    \"data\": \"role successfully removed from user\"\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/modules.md",
    "content": "Renamed to [categoties](/api-docs/{{version}}/campaigns/categories)"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/roles.md",
    "content": "# Campaign Roles\n\n---\n\n- [Campaign Roles](#campaign-roles)\n\n<a name=\"campaign-roles\"></a>\n## Campaign roles\n\nTo get a list of all the roles of a campaign, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `{{version}}/campaigns/{id}/roles` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 114,\n            \"name\": \"Admin\",\n            \"is_admin\": true\n        },\n        {\n            \"id\": 115,\n            \"name\": \"Public\",\n            \"is_admin\": false\n        },\n        {\n            \"id\": 116,\n            \"name\": \"Player\",\n            \"is_admin\": false\n        }\n    ]\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/statuses.md",
    "content": "- [All statuses](#all-statuses)\n\n# Statuses\n\nEntries of some categories have a status_id property, which designates which status they have.\n\n\n<a name=\"all-statuses\"></a>\n## All Statuses\n\nIn the cuture, campaigns will be able to define their own statuses. \n\n| Method | URI                                    | Headers |\n| :- |:---------------------------------------|  :-  |\n| GET/HEAD | `campaigns/{campaign.id}/entity_types` | Default |\n\n\n### Results\n```json\n{\n    \"data\": [\n        {\n          \"data\": [\n            {\n              \"id\": 1,\n              \"key\": \"alive\",\n              \"is_default\": true,\n              \"category_id\": 1\n            },\n            {\n              \"id\": 2,\n              \"key\": \"missing\",\n              \"is_default\": false,\n              \"category_id\": 1\n            },\n            {\n              \"id\": 3,\n              \"key\": \"dead\",\n              \"is_default\": false,\n              \"category_id\": 1\n            },\n            {\n              \"id\": 4,\n              \"key\": \"dead\",\n              \"is_default\": false,\n              \"category_id\": 20\n            },\n            {\n              \"id\": 5,\n              \"key\": \"extinct\",\n              \"is_default\": false,\n              \"category_id\": 20\n            },\n            {\n              \"id\": 6,\n              \"key\": \"destroyed\",\n              \"is_default\": false,\n              \"category_id\": 3\n            }\n          ]\n        }\n    ]\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns/styles.md",
    "content": "# Campaign Styles\n\n---\n\n- [All Campaign Styles](#all-campaign-styles)\n- [Single Campaign Style](#campaign-style)\n- [Create a Campaign Style](#create-campaign-style)\n- [Update a Campaign Style](#update-campaign-style)\n- [Delete a Campaign Style](#delete-campaign-style)\n\n<a name=\"all-campaign-styles\"></a>\n## All Campaign Styles\n\nYou can get a list of all the campaign styles of a campaign by using the following endpoint. Note that this feature is reserved to premium campaigns.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `{{version}}/campaigns/{id}/campaign_styles` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Campaign style\",\n            \"content\": \"css content\",\n            \"is_enabled\": 1,\n            \"is_theme\": 0,\n            \"created_by\": \"1\",\n            \"created_at\": \"2021-09-27T11:04:31.000000Z\",\n            \"updated_at\": \"2021-09-27T11:04:31.000000Z\"\n        }\n    ]\n}\n```\n\n\n<a name=\"campaign-style\"></a>\n## Campaign Style\n\nTo get the details of a single campaign Style, use the following endpoint.\n\n| Method | URI                                                              | Headers |\n| :- |:-----------------------------------------------------------------|  :-  |\n| GET/HEAD | `{{version}}/campaigns/{id}/campaign_styles/{campaign_style.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Campaign style\",\n        \"content\": \"css content\",\n        \"is_enabled\": 1,\n        \"is_theme\": 0,\n        \"created_by\": \"1\",\n        \"created_at\": \"2021-09-27T11:04:31.000000Z\",\n        \"updated_at\": \"2021-09-27T11:04:31.000000Z\"\n    }\n\n}\n```\n\n\n<a name=\"create-campaign Style\"></a>\n## Create a Campaign Style\n\nTo create a campaign Style, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `{{version}}/campaigns/{id}/campaign_styles` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | The style name |\n| `content` | `string` (Required) | The css rules |\n| `is_enabled` | `boolean` | If the style is enabled or not  |\n\n### Results\n\n> {success} Code 200 with JSON body of the new campaign Style.\n\n\n<a name=\"update-campaign-style\"></a>\n## Update a Campaign Style\n\nTo update a campaign style, use the following endpoint.\n\n| Method | URI                                                              | Headers |\n| :- |:-----------------------------------------------------------------|  :-  |\n| PUT/PATCH | `{{version}}/campaigns/{id}/campaign_styles/{campaign_style.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a campaign Style.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated campaign Style.\n\n\n<a name=\"delete-campaign Style\"></a>\n## Delete a Campaign Style\n\nTo delete a campaign style, use the following endpoint.\n\n| Method | URI                                   | Headers |\n| :- |:--------------------------------------|  :-  |\n| DELETE | `campaign_styles/{campaign_style.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/campaigns.md",
    "content": "# Campaigns\n\n---\n\n- [User's Campaigns](#user-campaigns)\n- [Single Campaign](#campaign)\n- [Campaign Roles](#campaign-roles)\n\n<a name=\"user-campaigns\"></a>\n## User's Campaigns\n\nYou can get a list of all the campaigns the user has access to using the following endpoint.\n\n| Method | URI         | Headers |\n| :- |:------------|  :-  |\n| GET | `{{version}}/campaigns` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Thaelia\",\n            \"locale\": \"en\",\n            \"description_raw\": \"\\r\\n<p>Aenean sit amet vehicula.</p>\\r\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"visibility\": \"public\",\n            \"visibility_id\": 2,\n            \"created_at\": \"2017-11-02T16:29:34.000000Z\",\n            \"updated_at\": \"2020-05-23T22:00:02.000000Z\",\n            \"members\": [\n                {\n                    \"id\": 1,\n                    \"user\": {\n                        \"id\": 1,\n                        \"name\": \"Ilestis\",\n                        \"avatar\": \"{url}\"\n                    }\n                }\n            ],\n            \"setting\": [],\n            \"ui_settings\": [],\n            \"default_images\": [],\n            \"css\": \"...\"\n        }\n    ],\n    \"links\": {\n        \"first\": \"https://api.kanka.io/{{version}}/campaigns?page=1\",\n        \"last\": \"https://api.kanka.io/{{version}}/campaigns?page=1\",\n        \"prev\": null,\n        \"next\": null\n    },\n    \"meta\": {\n        \"current_page\": 1,\n        \"from\": 1,\n        \"last_page\": 1,\n        \"path\": \"http://api.kanka.io/{{version}}/campaigns\",\n        \"per_page\": 15,\n        \"to\": 3,\n        \"total\": 3\n    }\n}\n```\n\n<a name=\"campaign\"></a>\n## Single Campaign\n\nGetting a single campaign is straightforward. `{id}` is to be replaced with the campaign's id returned in the `campaigns` call.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `{{version}}/campaigns/{id}` | Default |\n\nThis endpoint also includes the `description` property with `[entity:123]` mentions transformed into `<a href=\"\">` link elements. The raw, unparsed content is available as `description_raw`.\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Thaelia\",\n        \"locale\": \"fr\",\n        \"description\": \"<p>Aenean sit amet vehicula <a href=\\\"...\\\">Lorem Ipsum</a>.</p>\",\n        \"description_raw\": \"<p>Aenean sit amet vehicula [entity:10].</p>\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"visibility\": \"public\",\n        \"visibility_id\": 2,\n        \"created_at\": \"2017-11-02T16:29:34.000000Z\",\n        \"updated_at\": \"2020-05-23T22:00:02.000000Z\",\n        \"members\": [\n            {\n                \"id\": 1,\n                \"user\": {\n                    \"id\": 1,\n                    \"name\": \"Ilestis\",\n                    \"avatar\": \"{url}\"\n                }\n            }\n        ],\n        \"setting\": [],\n        \"ui_settings\": [],\n        \"default_images\": [],\n        \"css\": \"...\"\n    }\n}\n```\n\n\n<a name=\"campaign-roles\"></a>\n## Campaign roles\n\nTo get a list of all the roles of a campaign, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `{{version}}/campaigns/{id}/roles` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 114,\n            \"name\": \"Admin\",\n            \"is_admin\": true\n        },\n        {\n            \"id\": 115,\n            \"name\": \"Public\",\n            \"is_admin\": false\n        },\n        {\n            \"id\": 116,\n            \"name\": \"Player\",\n            \"is_admin\": false\n        }\n    ]\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/characters.md",
    "content": "# Characters\n\n---\n\n- [All Characters](#all-characters)\n\n- [Single Character](#character)\n- [Create a Character](#create-character)\n- [Update a Character](#update-character)\n- [Delete a Character](#delete-character)\n\n<a name=\"all-characters\"></a>\n## All Characters\n\nYou can get a list of all the characters of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI          | Headers |\n| :- |:-------------|  :-  |\n| GET/HEAD | `characters` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n\n### Results\n\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Jonathan Green\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"is_personality_visible\": true,\n            \"is_template\": false,\n            \"entity_id\": 4,\n            \"tags\": [],\n            \"created_at\": \"2019-01-29T16:40:34.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\": \"2019-08-29T13:38:46.000000Z\",\n            \"updated_by\": 1,\n            \"location_id\": 4,\n            \"title\": null,\n            \"age\": \"39\",\n            \"sex\": \"Male\",\n            \"pronouns\": null,\n            \"races\": [3],\n            \"private_races\": [2, 5],\n            \"type\": null,\n            \"families\": [34],\n            \"private_families\": [4, 14],\n            \"status_id\": 1,\n            \"traits\": [\n                {\n                    \"id\": 33,\n                    \"name\": \"Goals\",\n                    \"entry\": \"Become a Paladin.\",\n                    \"entry\": \"Become a Paladin before [character:76]\",\n                    \"entry_parsed\": \"Become a Paladin before <a href=\\\"https://app.kanka.io/w/13423/entities/76\\\" class=\\\"entity-mention\\\" data-entity-type=\\\"character\\\" data-toggle=\\\"tooltip-ajax\\\" data-id=\\\"76\\\" data-url=\\\"https://app.kanka.io:8081/w/13423/entities/76/tooltip\\\">Baldur Gates</a></p><p></p>\",\n                    \"section\": \"personality\",\n                    \"section_id\": 1,\n                    \"default_order\": 0\n                }\n            ]\n        }\n    ]\n}\n```\n\n\n<a name=\"character\"></a>\n## Character\n\nTo get the details of a single character, use the following endpoint.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `characters/{character.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Jonathan Green\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"is_personality_visible\": true,\n        \"is_template\": false,\n        \"entity_id\": 4,\n        \"tags\": [],\n        \"created_at\": \"2019-01-29T16:40:34.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\": \"2019-08-29T13:38:46.000000Z\",\n        \"updated_by\": 1,\n        \"location_id\": 4,\n        \"title\": null,\n        \"age\": \"39\",\n        \"sex\": \"Male\",\n        \"pronouns\": null,\n        \"races\": [3],\n        \"private_races\": [2, 5],\n        \"type\": null,\n        \"families\": [34],\n        \"status_id\": 1,\n        \"traits\": [\n            {\n                \"id\": 33,\n                \"name\": \"Goals\",\n                \"entry\": \"Become a Paladin before [character:76]\",\n                \"entry_parsed\": \"Become a Paladin before <a href=\\\"https://app.kanka.io/w/13423/entities/76\\\" class=\\\"entity-mention\\\" data-entity-type=\\\"character\\\" data-toggle=\\\"tooltip-ajax\\\" data-id=\\\"76\\\" data-url=\\\"https://app.kanka.io:8081/w/13423/entities/76/tooltip\\\">Baldur Gates</a></p><p></p>\",\n                \"section\": \"personality\",\n                \"section_id\": 1,\n                \"is_private\": false,\n                \"default_order\": 0\n            }\n        ]\n    }\n\n}\n```\n\n\n\n<a name=\"create-character\"></a>\n## Create a Character\n\nTo create a character, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `characters` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the character |\n| `entry` | `string` | The html description of the character. |\n| `title` | `string`  | Title of the character |\n| `age` | `string`  | Age of the character |\n| `sex` | `string`  | Gender of the character |\n| `pronouns` | `string`  | Prefered pronouns of the character |\n| `type` | `string`  | Type of the character |\n| `families` | `array` | Array of family ids |\n| `location_id` | `integer` | Location id |\n| `races` | `array` | Array of race ids |\n| `tags` | `array` | Array of tag ids |\n| `status_id` | `integer` | The id of the entity's status from `category_statuses` |\n| `is_private` | `boolean` | If the character is only visible to `admin` members of the campaign |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The character's tooltip (premium campaign feature)                   |\n| `personality_name` | `array` | An array representing the name of personality traits. For example ```[\"Goals\", \"Fears\"]```  |\n| `personality_entry` | `array` | An array representing the values of personality traits. For example ```[\"To become a King\", \"Quiet places\"]```  |\n| `appearance_name` | `array` | An array representing the name of appearance traits. For example ```[\"Hair\", \"Eyes\"]```  |\n| `appearance_entry` | `array` | An array representing the values of appearance traits. For example ```[\"Curly black\", \"Light Green\"]```  |\n| `is_personality_visible` | `bool` | If the personality traits should be visible to all (true) or just admins (false) |\n| `is_personality_pinned` | `bool` | If the personality traits are visible on the overview page |\n| `is_appearance_pinned` | `bool` | If the appearance traits are visible on the overview page |\n\n### Results\n\n> {success} Code 200 with JSON body of the new character.\n\n\n<a name=\"update-character\"></a>\n## Update a Character\n\nTo update a character, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `characters/{character.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a character.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated character.\n\n\n<a name=\"delete-character\"></a>\n## Delete a Character\n\nTo delete a character, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `characters/{character.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/conversations.md",
    "content": "# Conversations\n\n---\n\n- [All Conversations](#all-conversations)\n- [Conversation](#conversation)\n- [Conversation Participants](#conversation-participants)\n- [Conversation Messages](#conversation-messages)\n- [Create a Conversation](#create-conversation)\n- [Update a Conversation](#update-conversation)\n- [Delete a Conversation](#delete-conversation)\n\n<a name=\"all-conversations\"></a>\n## All Conversations\n\nYou can get a list of all the conversations of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `conversations` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n         {\n            \"id\": 1,\n            \"name\": \"Bob's Tavern\",\n            \"entry\": null,\n            \"image\": \"conversations/ORn3vytRVIGkWHAAfdLqgf4xN9NHdtgjRxQbf0ef.jpeg\",\n            \"image_full\": \"http://kanka.loc/storage/conversations/ORn3vytRVIGkWHAAfdLqgf4xN9NHdtgjRxQbf0ef.jpeg\",\n            \"image_thumb\": \"http://kanka.loc/storage/conversations/ORn3vytRVIGkWHAAfdLqgf4xN9NHdtgjRxQbf0ef_thumb.jpeg\",\n            \"is_closed\": false,\n            \"is_private\": false,\n            \"entity_id\": 335,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"type\": \"In Game\",\n            \"target\": \"members\",\n            \"target_id\": 1,\n            \"participants\": 3,\n            \"messages\": 6\n        }\n    ]\n}\n```\n\n<a name=\"conversation\"></a>\n## Conversation\n\nTo get the details of a single conversation, use the following endpoint.\n\n| Method | URI                               | Headers |\n| :- |:----------------------------------|  :-  |\n| GET/HEAD | `conversations/{conversation.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Bob's Tavern\",\n        \"entry\": null,\n        \"image\": \"conversations/ORn3vytRVIGkWHAAfdLqgf4xN9NHdtgjRxQbf0ef.jpeg\",\n        \"image_full\": \"http://kanka.loc/storage/conversations/ORn3vytRVIGkWHAAfdLqgf4xN9NHdtgjRxQbf0ef.jpeg\",\n        \"image_thumb\": \"http://kanka.loc/storage/conversations/ORn3vytRVIGkWHAAfdLqgf4xN9NHdtgjRxQbf0ef_thumb.jpeg\",\n        \"is_closed\": false,\n        \"is_private\": false,\n        \"entity_id\": 335,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"type\": \"In Game\",\n        \"target\": \"members\",\n        \"target_id\": 1,\n        \"participants\": 3,\n        \"messages\": 6\n    }\n}\n```\n\n\n<a name=\"conversation-participants\"></a>\n## Conversation Participants\n\nTo get the participants of an conversation, use the following endpoint.\n\n| Method | URI                                                         | Headers |\n| :- |:------------------------------------------------------------|  :-  |\n| GET/HEAD | `conversations/{conversation.id}/conversation_participants` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"conversation_id\": 1,\n            \"created_by\": null,\n            \"character_id\": null,\n            \"user_id\": 1\n        },\n        {\n            \"conversation_id\": 1,\n            \"created_by\": null,\n            \"character_id\": null,\n            \"user_id\": 31\n        },\n        {\n            \"conversation_id\": 1,\n            \"created_by\": null,\n            \"character_id\": null,\n            \"user_id\": 2\n        }\n    ]\n}\n```\n\n> {info} Adding (`POST`), Updating (`PUT`, `PATCH`) and Deleting (`DELETE`) a participant from an conversation can also be done using the same patterns as for other endpoints.\n\n\n<a name=\"conversation-messages\"></a>\n## Conversation Messages\n\nTo get the messages of an conversation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `conversations/{conversation.id}/conversation_messages` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"conversation_id\": 1,\n            \"created_by\": null,\n            \"character_id\": 63,\n            \"user_id\": null,\n            \"message\": \"Hey! I'm thirsty.\"\n        },\n        {\n            \"conversation_id\": 1,\n            \"created_by\": null,\n            \"character_id\": null,\n            \"user_id\": null,\n            \"message\": \"Wadayawant?\"\n        },\n        {\n            \"conversation_id\": 1,\n            \"created_by\": null,\n            \"character_id\": 70,\n            \"user_id\": null,\n            \"message\": \"Cookies!\"\n        },\n    ]\n}\n```\n\n> {info} Adding (`POST`), Updating (`PUT`, `PATCH`) and Deleting (`DELETE`) a messages from an conversation can also be done using the same patterns as for other endpoints.\n\n\n<a name=\"create-conversation\"></a>\n## Create a Conversation\n\nTo create a conversation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `conversations` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the conversation |\n| `type` | `string` | Type of conversation |\n| `target_id` | `int` | Available options: 1 for `users` and 2 for `characters`  |\n| `tags` | `array` | Array of tag ids |\n| `is_closed` | `boolean` | If the conversation is closed |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The conversation's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the conversation is only visible to `admin` members of the campaign |\n\n### Results\n\n> {success} Code 200 with JSON body of the new conversation.\n\n\n<a name=\"update-conversation\"></a>\n## Update a Conversation\n\nTo update a conversation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `conversations/{conversation.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a conversation.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated conversation.\n\n\n<a name=\"delete-conversation\"></a>\n## Delete a Conversation\n\nTo delete a conversation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `conversations/{conversation.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/creatures.md",
    "content": "# Creatures\n\n---\n\n- [All Creatures](#all-creatures)\n\n- [Single Creature](#creature)\n- [Create a Creature](#create-creature)\n- [Update a Creature](#update-creature)\n- [Delete a Creature](#delete-creature)\n\n<a name=\"all-creatures\"></a>\n## All Creatures\n\nYou can get a list of all the creatures of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `creatures` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Raven\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 7,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"creature_id\": null,\n            \"type\": \"Bird\",\n            \"status_id\": 1,\n            \"locations\": [\n                67,\n                66,\n                65\n            ]\n        }\n    ]\n}\n```\n\n<a name=\"creature\"></a>\n## Creature\n\nTo get the details of a single creature, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `creatures/{creature.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Raven\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 7,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"creature_id\": null,\n        \"type\": \"Bird\",\n        \"status_id\": 1,\n        \"locations\": [\n            67,\n            66,\n            65\n        ]\n    }\n\n}\n```\n\n\n<a name=\"create-creature\"></a>\n## Create a Creature\n\nTo create a creature, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `creatures` | Default |\n\n### Body\n\n| Parameter | Type | Detail                                                              |\n| :- |   :-   |:--------------------------------------------------------------------|\n| `name` | `string` (Required) | Name of the creature                                                |\n| `entry` | `string` | The html description of the creature                                |\n| `type` | `string` | The creature's type                                                 |\n| `creature_id` | `string` | Parent creature of the creature                                     |\n| `tags` | `array` | Array of tag ids                                                    |\n| `locations` | `array` | Array of location ids                                               |\n| `status_id` | `integer` | The id of the entity's status from `category_statuses`              |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                             |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The creature's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the creature is only visible to `admin` members of the campaign  |\n| `locations` | `array` | Array of locations.ids to attach to the creature.                   |\n\n### Results\n\n> {success} Code 200 with JSON body of the new creature.\n\n\n<a name=\"update-creature\"></a>\n## Update a Creature\n\nTo update a creature, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `creatures/{creature.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a creature.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated creature.\n\n\n<a name=\"delete-creature\"></a>\n## Delete a Creature\n\nTo delete a creature, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `creatures/{creature.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/dice-rolls.md",
    "content": "# Dice Rolls\n\n- [All Dice Rolls](#all-dice-rolls)\n- [Single Dice Roll](#dice-roll)\n- [Create a Dice Roll](#create-dice-roll)\n- [Update a Dice Roll](#update-dice-roll)\n- [Delete a Dice Roll](#delete-dice-roll)\n\n<a name=\"all-dice-rolls\"></a>\n## All Dice Rolls\n\nYou can get a list of all the dice-rolls of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `dice_rolls` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Super Dice\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"is_private\": false,\n            \"entity_id\": 302,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"character_id\": 1,\n            \"system\": \"standard\",\n            \"parameters\": \"2d2\",\n            \"rolls\": [\n              \"2\",\n              \"4\",\n              \"2\"\n            ]\n        }\n    ]\n}\n```\n\n<a name=\"dice-roll\"></a>\n## Dice Roll\n\nTo get the details of a single dice-roll, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `dice_rolls/{dice_roll.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Super Dice\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"is_private\": false,\n        \"entity_id\": 302,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"character_id\": 1,\n        \"system\": \"standard\",\n        \"parameters\": \"2d2\",\n        \"rolls\": [\n          \"2\",\n          \"4\",\n          \"2\"\n        ]\n    }\n\n}\n```\n\n\n<a name=\"create-dice-roll\"></a>\n## Create a Dice Roll\n\nTo create a dice-roll, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `dice_rolls` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the dice-roll |\n| `parameters` | `string` (required) | The dice-roll's parameters (dice roll config) |\n| `system` | `string` | The dice-roll's system (always standard) |\n| `character_id` | `integer` | The dice-roll's owner |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (limited to premium campaigns) |\n| `is_private` | `boolean` | If the dice-roll is only visible to `admin` members of the campaign |\n\n### Results\n\n> {success} Code 200 with JSON body of the new dice-roll.\n\n\n<a name=\"update-dice-roll\"></a>\n## Update a Dice Roll\n\nTo update a dice-roll, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `dice_rolls/{dice_roll.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a dice-roll.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated dice-roll.\n\n\n<a name=\"delete-dice-roll\"></a>\n## Delete a Dice Roll\n\nTo delete a dice-roll, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `dice_rolls/{dice_roll.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/attributes.md",
    "content": "# Properties\n\n---\n\n- [All Properties](#all-attributes)\n- [Single property](#attribute)\n- [Create a property](#create-attribute)\n- [Update a property](#update-attribute)\n- [Delete a property](#delete-attribute)\n- [Patch properties](#patch-attributes)\n- [Put properties](#put-attributes)\n\n<a name=\"all-attributes\"></a>\n## All properties\n\nYou can get a list all the properties of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI                                  | Headers |\n| :- |:-------------------------------------|  :-  |\n| GET/HEAD | `entities/{entity.id}/attributes` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"api_key\": \"\",\n            \"created_at\": \"2019-07-09T19:55:13.000000Z\",\n            \"created_by\": null,\n            \"default_order\": 0,\n            \"entity_id\": 4,\n            \"id\": 151,\n            \"is_private\": false,\n            \"is_pinned\": false,\n            \"name\": \"Force Strength\",\n            \"type_id\": 1,\n            \"updated_at\": \"2020-03-11T13:31:34.000000Z\",\n            \"updated_by\": null,\n            \"created_by\": 420,\n            \"updated_by\": 422,\n            \"value\": \"5\",\n            \"parsed\": \"5\"\n        }\n    ]\n}\n```\n\n\n<a name=\"attribute\"></a>\n## Property\n\nTo get the details of a single property, use the following endpoint.\n\n| Method | URI                                                 | Headers |\n| :- |:----------------------------------------------------|  :-  |\n| GET/HEAD | `entities/{entity.id}/attributes/{attribute.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"api_key\": \"\",\n        \"created_at\": \"2019-07-09T19:55:13.000000Z\",\n        \"created_by\": 420,\n        \"default_order\": 0,\n        \"entity_id\": 4,\n        \"id\": 151,\n        \"is_private\": false,\n        \"is_pinned\": false,\n        \"name\": \"Force Strength\",\n        \"type_id\": 1,\n        \"updated_at\": \"2020-03-11T13:31:34.000000Z\",\n        \"updated_by\": 420,\n        \"value\": \"5\",\n        \"parsed\": \"5\"\n    }\n}\n```\n\n\n<a name=\"create-attribute\"></a>\n## Create a property\n\nTo create a property, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/attributes` | Default |\n\n### Body\n\n| Parameter | Type | Detail                                                                                                                                                                             |\n| :- |   :-   |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `name` | `string` (Required) | Name of the property                                                                                                                                                               |\n| `value` | `string` | The property's value                                                                                                                                                               |\n| `default_order` | `integer` | The property's order                                                                                                                                                               |\n| `type_id` | `int` | The property's type ID: `1` for standard, `2` for a multiline text block, `3` for a checkbox, `4` for a section, `5` for a random number, `6` for a number, `7` for a list choice. |\n| `is_private` | `boolean` | If the property is only visible to `admin` members of the campaign                                                                                                                 |\n| `is_pinned` | `boolean` | If the property is \"pinned\" to the overview                                                                                                                                       |\n| `api_key` | `string` (max 20) | A custom field only shown in the API for you to link properties to your system ids.                                                                                                |\n\n### Results\n\n> {success} Code 200 with JSON body of the new property.\n\n\n<a name=\"update-attribute\"></a>\n## Update a property\n\nTo update a property, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `entities/{entity.id}/attributes/{attribute.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a property. The `name` field is required.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated property.\n\n\n<a name=\"delete-attribute\"></a>\n## Delete a property\n\nTo delete a property, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/attributes/{attribute.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n<a name=\"patch-attributes\"></a>\n## Patch properties\n\nTo PATCH properties, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PATCH | `entities/{entity.id}/attributes` | Default |\n\n### Body\n\n| Parameter | Type | Detail                                                                                                                                                                             |\n| :- |   :-   |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `attribute` | `array` (Required) | Array containing properties                                                                                                                                                        |\n| `attribute.*.name` | `string` (Required) | Name of the property                                                                                                                                                               |\n| `attribute.*.id` | `int` | The property's id if it exists                                                                                                                                                     |\n| `attribute.*.value` | `string` | The property's value                                                                                                                                                               |\n| `attribute.*.default_order` | `integer` | The property's order                                                                                                                                                               |\n| `attribute.*.type_id` | `int` | The property's type ID: `1` for standard, `2` for a multiline text block, `3` for a checkbox, `4` for a section, `5` for a random number, `6` for a number, `7` for a list choice. |\n| `attribute.*.is_private` | `boolean` | If the property is only visible to `admin` members of the campaign                                                                                                                 |\n| `attribute.*.is_pinned` | `boolean` | If the property is \"pinned\" to the overview                                                                                                                                        |\n| `attribute.*.api_key` | `string` (max 20) | A custom field only shown in the API for you to link properties to your system ids.                                                                                                |\n\n### Example\n```json\n{\n    \"attribute\": [\n        {\n            \"id\": 444,\n            \"name\": \"Mana potions\",\n            \"value\": 3,\n            \"type_id\": 1\n        },\n        {\n            \"name\": \"Gold coins\",\n            \"value\": 10,\n            \"type_id\": 1\n        }\n    ]\n}\n```\n\n### Results\n\n> {success} Code 200 with JSON body of the all of the entity's properties.\n\n<a name=\"put-attributes\"></a>\n## Put properties\n\nTo PUT properties, use the following endpoint, keep in mind that any other properties for the corresponding entity will be deleted unless they are included on the body of the request, sending an empty PUT request will result in the deletion every properties of the entity.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT | `entities/{entity.id}/attributes` | Default |\n\n### Body\n\n| Parameter | Type | Detail                                                                                                                                                                              |\n| :- |   :-   |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `attribute` | `array` (Required) | Array containing properties                                                                                                                                                         |\n| `attribute.*.name` | `string` (Required) | Name of the property                                                                                                                                                                |\n| `attribute.*.id` | `int` | The property's id if it exists                                                                                                                                                     |\n| `attribute.*.value` | `string` | The property's value                                                                                                                                                               |\n| `attribute.*.default_order` | `integer` | The property's order                                                                                                                                                               |\n| `attribute.*.type_id` | `int` | The property's type ID: `1` for standard, `2` for a multiline text block, `3` for a checkbox, `4` for a section, `5` for a random number, `6` for a number, `7` for a list choice. |\n| `attribute.*.is_private` | `boolean` | If the property is only visible to `admin` members of the campaign                                                                                                                 |\n| `attribute.*.is_pinned` | `boolean` | If the property is \"pinned\" on the entity view                                                                                                                                     |\n| `attribute.*.api_key` | `string` (max 20) | A custom field only shown in the API for you to link properties to your system ids.                                                                                                 |\n\n### Example\n```json\n{\n    \"attribute\": [\n        {\n            \"id\": 444,\n            \"name\": \"Mana potions\",\n            \"value\": 3,\n            \"type_id\": 1\n        },\n        {\n            \"name\": \"Gold coins\",\n            \"value\": 10,\n            \"type_id\": 1,\n            \"is_pinned\": true\n        }\n        \n    ]\n}\n```\n\n### Results\n\n> {success} Code 200 with JSON body of the all of the entity's properties.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/connections.md",
    "content": "# Relations\n\n\n- [All Relations](#all-relations)\n- [Single Relation](#relation)\n- [Create a relation](#create-relation)\n- [Update a relation](#update-relation)\n- [Delete a relation](#delete-relation)\n- [All Campaign Relations](#all-campaign-relations)\n\n<a name=\"all-relations\"></a>\n## All Relations\n\nYou can get a list all the relations of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/relations` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"owner_id\": 168,\n            \"target_id\": 72,\n            \"relation\": \"Just Friends\",\n            \"attitude\": 22,\n            \"visibility_id\": 1,\n            \"is_pinned\": false,\n            \"colour\": null,\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\"\n        }\n    ]\n}\n```\n\n\n<a name=\"relation\"></a>\n## Relation\n\nTo get the details of a single relation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/relations/{relation.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"owner_id\": 168,\n        \"target_id\": 72,\n        \"relation\": \"Just Friends\",\n        \"attitude\": 22,\n        \"visibility_id\": 1,\n        \"is_pinned\": false,\n        \"colour\": \"#22bbff\",\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\"\n    }\n}\n```\n\n\n<a name=\"create-relation\"></a>\n## Create a relation\n\nTo create a relation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/relations` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `relation` | `string` (Required, max 255) | Description of the relation |\n| `owner_id` | `int` (Required) | The relation's entity |\n| `target_id` | `int` (Required if `targets` is not set) | The relation's target entity |\n| `targets` | `array` (Required if `target_id` is not set) | An array of the relation's target entities |\n| `attitude` | `int` | -100 to 100 |\n| `colour` | `string` | Hex colour of the attitude (with or without the `#`) |\n| `two_way` | `boolean` | If set, will duplicate the relation but in the other direction |\n| `is_pinned` | `boolean` | If the relation is visible on the entity's submenu |\n| `visibility_id` | `int` | The visibility ID: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new relations.\n\n\n<a name=\"update-relation\"></a>\n## Update a relation\n\nTo update a relation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `entities/{entity.id}/relations/{relation.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a relation.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated relation.\n\n\n<a name=\"delete-relation\"></a>\n## Delete a relation\n\nTo delete a relation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/relations/{relation.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n\n<a name=\"all-campaign-relations\"></a>\n## All Campaign Relations\n\nYou can get a list of all the relations of a campaign by using the following endpoint.\n\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `relations` | Default |\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-abilities.md",
    "content": "# Entity Abilities\n\n---\n\n- [All Entity Abilities](#all-entity-abilities)\n- [Single Entity Ability](#entity-ability)\n- [Create an Entity Ability](#create-entity-ability)\n- [Update an Entity Ability](#update-entity-ability)\n- [Delete an Entity Ability](#delete-entity-ability)\n\n<a name=\"all-entity-abilities\"></a>\n## All Entity Abilities\n\nYou can get a list of all the entity-abilities of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_abilities` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"ability_id\": 33,\n            \"created_at\": \"2019-01-28 19:42:33.000000Z\",\n            \"created_by\": 1,\n            \"entity_id\": 70,\n            \"id\": 31,\n            \"visibility_id\": 1,\n            \"updated_at\": \"2019-01-28 19:42:33.000000Z\",\n            \"updated_by\": 1,\n            \"charges\": 3,\n            \"position\": 0,\n            \"note\": null\n        }\n    ]\n}\n```\n\n\n<a name=\"entity-ability\"></a>\n## Entity Ability\n\nTo get the details of a single entity-ability, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_abilities/{entity_ability.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"ability_id\": 33,\n        \"created_at\": \"2019-01-28 19:42:33.000000Z\",\n        \"created_by\": 1,\n        \"entity_id\": 70,\n        \"id\": 31,\n        \"visibility_id\": 1,\n        \"updated_at\": \"2019-01-28 19:42:33.000000Z\",\n        \"updated_by\": 1,\n        \"charges\": 3,\n        \"position\": 0,\n        \"note\": null\n    }\n}\n```\n\n\n<a name=\"create-entity-ability\"></a>\n## Create an Entity Ability\n\nTo create an entity-ability, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/entity_abilities` | Default |\n\n### Body\n\n| Parameter       | Type               | Detail                                                                              |\n|:----------------|:-------------------|:------------------------------------------------------------------------------------|\n| `abilities`     | `array` (Required) | An array containing ability ids                                                     |\n| `visibility_id` | `int`              | The visibility ID: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n| `charges`       | `int`              | How many times the ability was used.                                                |\n| `note`          | `string`           | Custom note attached to the ability.                                                |\n| `position`      | `int`              | Position of the ability in the list                                                 |\n\n### Results\n\n> {success} Code 200 with JSON body of the new entity-ability.\n\n\n<a name=\"update-entity-ability\"></a>\n## Update an Entity Ability\n\nTo update an entity-ability, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `entities/{entity.id}/entity_abilities/{entity_ability.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating an entity-ability.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated entity-ability.\n\n\n<a name=\"delete-entity-ability\"></a>\n## Delete an Entity Ability\n\nTo delete an entity-ability, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/entity_abilities/{entity_ability.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-aliases.md",
    "content": "# Entity Aliases\n\n---\n\n- [All Entity Aliases](#all-entity-aliases)\n- [Single Entity Alias](#entity-alias)\n- [Create an Entity Alias](#create-entity-alias)\n- [Delete an Entity Alias](#delete-entity-alias)\n\n<a name=\"all-entity-aliases\"></a>\n## All Entity Aliases\n\nYou can get a list of all the entity-aliases of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_aliases` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"created_at\":  \"2022-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"entity_id\": 309,\n            \"id\": 2,\n            \"visibility_id\": \"1\",\n            \"name\": \"The BEST\",\n            \"updated_at\":  \"2022-01-31T13:48:54.000000Z\",\n            \"updated_by\": null\n        }\n    ]\n}\n```\n\n\n<a name=\"entity-alias\"></a>\n## Entity Alias\n\nTo get the details of a single entity-alias, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_aliases/{entity_alias.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"created_at\":  \"2022-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"entity_id\": 309,\n        \"id\": 2,\n        \"visibility_id\": \"1\",\n        \"name\": \"The BEST\",\n        \"updated_at\":  \"2022-01-31T13:48:54.000000Z\",\n        \"updated_by\": null\n    }\n}\n```\n\n\n<a name=\"create-entity-alias\"></a>\n## Create an Entity Alias\n\nTo create an entity-alias, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/entity_aliases` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` | The name of the alias (max 45) |\n| `visibility_id` | `int` | The visibility id: 1 `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new entity-alias.\n\n\n<a name=\"delete-entity-alias\"></a>\n## Delete an Entity Alias\n\nTo delete an entity-alias, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/entity_aliases/{entity_alias.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-assets.md",
    "content": "# Entity Assets\n\n---\n\n- [Introduction](#introduction)\n- [All Entity Assets](#all-entity-assets)\n- [Create an Entity Asset](#create-entity-asset)\n- [Delete an Entity Asset](#delete-entity-asset)\n\n<a name=\"introduction\"></a>\n## Introduction\n\nThis new endpoint and model merges the previous `entity files`, `entity links` and `entity aliases` endpoints and models into a single unit.\n\nAlias unique IDs keep their same IDs in this new endpoint, but files and links all get a new one.\n\n### Type IDs\n\nTo differenciate between the three types of assets, use the following reference\n| Type | Type ID |\n| :- | :- |\n| File | 1 |\n| Link | 2 |\n| Alias | 3 |\n\n<a name=\"all-entity-assets\"></a>\n## All Entity Assets\n\nYou can get a list of all the assets of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_assets` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"created_at\":  \"2022-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"entity_id\": 309,\n            \"id\": 2,\n            \"is_pinned\": false,\n            \"visibility_id\": \"1\",\n            \"name\": \"The BEST\",\n            \"metadata\": [],\n            \"type_id\": 3,\n            \"updated_at\":  \"2022-01-31T13:48:54.000000Z\",\n            \"updated_by\": null\n        }\n    ]\n}\n```\n\n## Virtual properties\n\nAssets also contain the following virtual properties provided by the API.\n\n| Property | Type | Value |\n| :- |   :-   |  :-  |\n|`_file` | `boolean` | If the asset is of the file type |\n|`_link` | `boolean` | If the asset is of the link type |\n|`_alias` | `boolean` | If the asset is of the alias type |\n|`_url` | `null|string` | If it's a file, the fullpath URL |\n\n\n<a name=\"entity-asset\"></a>\n## Entity Asset\n\nTo get the details of a single entity-asset, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_assets/{entity_asset.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"created_at\":  \"2022-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"entity_id\": 309,\n        \"id\": 2,\n        \"is_pinned\": false,\n        \"visibility_id\": \"1\",\n        \"name\": \"The BEST\",\n        \"updated_at\":  \"2022-01-31T13:48:54.000000Z\",\n        \"updated_by\": null\n    }\n}\n```\n\n\n<a name=\"create-entity-asset\"></a>\n## Create an Entity Asset\n\nTo create an asset, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/entity_assets` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` | The name of the asset (max 45) |\n| `type_id` | `int`  (Required) | The type of asset being created.\n| `files` | `file` | The file or files to be uploaded as an asset/assets, exclusive and required for file assets (`type_id: 1`). |\n| `visibility_id` | `int` | The visibility id: 1 `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n| `metadata` | `array` | `metadata.icon` and `metadata.url` are required for `links`. |\n| `is_pinned` | `bool` | Controls wether or not an asset is shown and linked to on the pins tab in the overview of the entity, exclusive to file assets (`type_id: 1`). |\n\n### Results\n\n> {success} Code 200 with JSON body of the new entity-asset.\n\n\n<a name=\"delete-entity-asset\"></a>\n## Delete an Entity Asset\n\nTo delete an entity-asset, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/entity_assets/{entity_asset.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-files.md",
    "content": "# Entity Files\n\n---\n\n- [All Entity Files](#all-entity-files)\n- [Single Entity File](#entity-file)\n- [Create an Entity File](#create-entity-file)\n- [Delete an Entity File](#delete-entity-file)\n\n<a name=\"all-entity-files\"></a>\n## All Entity Files\n\nYou can get a list of all the entity-files of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_files` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"entity_id\": 69,\n            \"entry\": \"Lorem Ipsum\",\n            \"id\": 31,\n            \"visibility_id\": 1,\n            \"name\": \"Secret File\",\n            \"path\": \"{url}\",\n            \"size\": \"44420\",\n            \"type\": \"image/jpeg\",\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": null\n        }\n    ]\n}\n```\n\n\n<a name=\"entity-file\"></a>\n## Entity File\n\nTo get the details of a single entity-file, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_files/{entity_file.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"entity_id\": 69,\n        \"entry\": \"Lorem Ipsum\",\n        \"id\": 31,\n        \"visibility_1\": 3,\n        \"name\": \"Secret File\",\n        \"path\": \"{url}\",\n        \"size\": \"44420\",\n        \"type\": \"image/jpeg\",\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": null\n    }\n}\n```\n\n\n<a name=\"create-entity-file\"></a>\n## Create an Entity File\n\nTo create an entity-file, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/entity_files` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `file` | `stream` | The uploaded file (max 2mb or 8mb for subscribers) |\n| `visibility_id` | `int` | The visibility ID: 1 for `all`, 2 `self`, 3 `members`, 4 `admin` or 5 for `self-admin`. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new entity-file.\n\n\n<a name=\"delete-entity-file\"></a>\n## Delete an Entity File\n\nTo delete an entity-file, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/entity_files/{entity_file.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-image.md",
    "content": "## Entity Image\n\nTo upload or replace an image of an entity, use the following endpoints.\n\n- [Get Images](#get-image)\n- [Upload Image](#upload-image)\n- [Remove Image](#remove-image)\n\n<a name=\"get-image\"></a>\n## Get an entity's images\n\nTo get an entity's images.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n|:-------|   :-   |  :-  |\n| GET    | `entities/{entity.id}/image` | Default |\n\n\n### Results\n\n```json\n{\n    \"image\": {\n        \"uuid\": \"aaaa-bbbb-0000\",\n        \"full\": \"{url}\",\n        \"thumbnail\": \"{40x40 url}\"\n    },\n    \"header\": {\n        \"uuid\": \"aaaa-bbbb-0000\",\n        \"full\": \"{url}\",\n        \"thumbnail\": \"{40x40 url}\"\n    }\n}\n```\n\n<a name=\"upload-image\"></a>\n## Upload an image\n\nUploading an image to the entity will store it in the campaign's [Gallery](/api-docs/{{version}}/campaigns/images).\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/image` | Default |\n\n\n### Body\n\n| Parameter | Type | Detail |\n|:----------|   :-   |  :-  |\n| `file`    | `stream` | Stream to file uploaded to the timeline |\n| `is_header` | `boolean` | If set to `true`, will save the image as the entity's header (premium campaign feature) |\n\n### Example\n\n```\ncurl --location --request POST 'https://api.kanka.io/1.0/campaigns/{campaign.id}/entities/{entity.id}/image' \\\n--header 'accept: application/json' \\\n-- header 'content-type: multipart/form-data' \\\n--header 'Authorization: Bearer {bearer-token}' \\\n--form 'file=@\"/path/to/image.png\"'\n```\n\n### Results\n\n```json\n{\n    \"image\": {\n        \"uuid\": \"aaaa-bbbb-0000\",\n        \"full\": \"{url}\",\n        \"thumbnail\": \"{40x40 url}\"\n    },\n    \"header\": {\n        \"uuid\": \"aaaa-bbbb-0000\",\n        \"full\": \"{url}\",\n        \"thumbnail\": \"{40x40 url}\"\n    }\n}\n```\n\n\n<a name=\"remove-image\"></a>\n## Remove an image\n\nYou can unlink an entity from its image. This won't delete the image from the gallery.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/image` | Default |\n\n### Parameters\n\n| Parameter | Type | Detail                                         |\n|:----------|   :-   |:-----------------------------------------------|\n| `is_header` | `boolean` | If set to `true`, will unlink the header image |\n\n\n### Results\n\n> {success} Code 200 with JSON body containing the new path to the image and thumbnail\n>\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-inventory.md",
    "content": "# Entity Inventory\n\n---\n\n- [All Entity Inventories](#all-entity-inventory)\n- [Create an Entity Inventory](#create-inventory)\n- [Update an Entity Inventory](#update-inventory)\n- [Delete an Entity Inventory](#delete-inventory)\n\n<a name=\"all-entity-inventory\"></a>\n## All Entity Inventories\n\nYou can get a list of all objects of an entity's inventory by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/inventory` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"entity_id\": 34,\n            \"item_id\": 12,\n            \"amount\": 3,\n            \"is_equipped\": false,\n            \"is_private\": false,\n            \"item\": {},\n            \"name\": null,\n            \"position\":  \"hand\",\n            \"visibility\": \"all\"\n        }\n    ]\n}\n```\n\n\n<a name=\"create-inventory\"></a>\n## Create an Entity Inventory\n\nTo create an inventory, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/inventory` | Default |\n\n### Body\n\n| Parameter | Type | Detail                                           |\n| :- |   :-   |:-------------------------------------------------|\n| `entity_id` | `integer` (Required) | The inventory's parent entity                    |\n| `item_id` | `integer` (Required without `name`) | The inventory's object id                          |\n| `name` | `string` (Required without `item_id`) | The inventory's object name                        |\n| `amount` | `string` (Required) | The amount of times the object is in the inventory |\n| `position` | `string` | Where the object is being stored                 |\n| `visiblity` | `string` | `all`, `admin`, `self` Who can view              |\n| `is_equipped` | `boolean` | If the object is equipped                          |\n\n\n### Results\n\n> {success} Code 200 with JSON body of the new inventory.\n\n\n<a name=\"update-inventory\"></a>\n## Update an Entity Inventory\n\nTo update an inventory, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `entities/{entity.id}/inventory/{entity.inventory.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating an inventory.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated inventory.\n\n\n<a name=\"delete-inventory\"></a>\n## Delete an Entity Inventory\n\nTo delete an inventory, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/entity_inventory/{entity.inventory.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-links.md",
    "content": "# Entity Links\n\n---\n\n- [All Entity Links](#all-entity-links)\n- [Single Entity Link](#entity-link)\n- [Create an Entity Link](#create-entity-link)\n- [Delete an Entity Link](#delete-entity-link)\n\n<a name=\"all-entity-links\"></a>\n## All Entity Links\n\nYou can get a list of all the entity-links of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_links` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"created_at\":  \"2021-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"entity_id\": 69,\n            \"id\": 31,\n            \"visibility_id\": 1,\n            \"name\": \"DNDbeyond\",\n            \"url\": \"{url}\",\n            \"icon\": \"\",\n            \"position\": 1,\n            \"updated_at\":  \"2021-01-31T13:48:54.000000Z\",\n            \"updated_by\": null\n        }\n    ]\n}\n```\n\n\n<a name=\"entity-link\"></a>\n## Entity Link\n\nTo get the details of a single entity-link, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_links/{entity_link.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"created_at\":  \"2021-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"entity_id\": 69,\n        \"id\": 31,\n        \"visibility_id\": 1,\n        \"name\": \"DNDbeyond\",\n        \"url\": \"{url}\",\n        \"icon\": \"\",\n        \"position\": 1,\n        \"updated_at\":  \"2021-01-31T13:48:54.000000Z\",\n        \"updated_by\": null\n    }\n}\n```\n\n\n<a name=\"create-entity-link\"></a>\n## Create an Entity Link\n\nTo create an entity-link, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/entity_links` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` | The name of the link |\n| `icon` | `string` | The icon of the link |\n| `url` | `string` | The url of the link |\n| `position` | `int` | Optional position of the entity link |\n| `visibility_id` | `integer` | The visibility: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new entity-link.\n\n\n<a name=\"delete-entity-link\"></a>\n## Delete an Entity Link\n\nTo delete an entity-link, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/entity_links/{entity_link.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-mentions.md",
    "content": "# Entity Mentions\n\n---\n\n- [All Entity Mentions](#all-entity-mentions)\n\n<a name=\"all-entity-mentions\"></a>\n## All Entity Mentions\n\nYou can get a list of all the mentions of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/mentions` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"entity_id\": 10,\n            \"post_id\": null,\n            \"campaign_id\": null,\n            \"target_id\": 36\n        }\n    ]\n}\n```\n\n\n| Field | References |\n| :- |   :-   |  :-  |\n| `entity_id` | The current entity |\n| `post_id` | The post id that mentions this entity |\n| `campaign_id` | The campaign ID mentioning this entity. This will always be the entity's campaign ID |\n| `target_id` | The entity ID that mentions this entity |\n\nOnly one of `post_id`, `campaign_id` or `target_id` will ever be filled out for a mention. If an entity is mentioned several times by another entity, only one mention object is saved.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-permissions.md",
    "content": "# Entity Permissions\n\n---\n\n- [All Entity Permissions](#all-entity-permissions)\n- [Create an Entity Permission](#create-entity-permissions)\n\n<a name=\"all-entity-permissions\"></a>\n## All Entity Permissions\n\nYou can get a list of all the entity-permissions of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_permissions` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 37,\n            \"campaign_role_id\": 115,\n            \"user_id\": null,\n            \"action\": 1,\n            \"access\": true,\n            \"created_at\": \"2022-07-25T16:21:38.000000Z\",\n            \"updated_at\": \"2022-07-25T17:36:21.000000Z\"\n        },\n}\n```\n<a name=\"create-entity-permissions\"></a>\n## Creating entity permissions\n\nTo create an entity permission, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/entity_permissions` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `campaign_role_id` | `integer` (Required) | The campaign role id affected by the permission, only required when there's no user id |\n| `user_id` | `integer` (Required) | The id of the user affected by the permission, only required when there's no campaign role id|\n| `action` | `integer` (Required) | The code of the action controller by the permission |\n| `access` | `boolean` (Required) | Determines if the permission is allowed or forbidden |\n\n### Actions\n\n| ID | Action |\n| :- |   :-   |\n| `1` | `Read` | \n| `2` | `Edit` | \n| `3` | `Add` | \n| `4` | `Delete` | \n| `5` | `Posts` | \n| `6` | `Perms` |\n### Results\n\n> {success} Array with all the newly created permissions.\n\n```json\n{\n    \"data\": [\n        {\n            \"id\": 37,\n            \"campaign_role_id\": 115,\n            \"user_id\": null,\n            \"action\": 1,\n            \"access\": true,\n            \"created_at\": \"2022-07-25T16:21:38.000000Z\",\n            \"updated_at\": \"2022-07-25T17:36:21.000000Z\"\n        }\n    ],\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-tags.md",
    "content": "# Entity Tags\n\n---\n\n- [All Entity Tags](#all-entity-tags)\n- [Single Entity Tag](#entity-tag)\n- [Create an Entity Tag](#create-entity-tag)\n- [Update an Entity Tag](#update-entity-tag)\n- [Delete an Entity Tag](#delete-entity-tag)\n\n<a name=\"all-entity-tags\"></a>\n## All Entity Tags\n\nYou can get a list of all the entity-tags of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_tags` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"tag_id\": 12,\n        }\n    ]\n}\n```\n\n\n<a name=\"entity-tag\"></a>\n## Entity Tag\n\nTo get the details of a single entity-tag, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_tags/{entity_tag.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"tag_id\": \"12\"\n    }\n}\n```\n\n\n<a name=\"create-entity-tag\"></a>\n## Create an Entity Tag\n\nTo create an entity-tag, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/entity_tags` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `tag_id` | `integer` (Required) | The entity-tag's parent tag |\n\n\n### Results\n\n> {success} Code 200 with JSON body of the new entity-tag.\n\n\n<a name=\"update-entity-tag\"></a>\n## Update an Entity Tag\n\nTo update an entity-tag, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `entities/{entity.id}/entity_tags/{entity_tag.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating an entity-tag.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated entity-tag.\n\n\n<a name=\"delete-entity-tag\"></a>\n## Delete an Entity Tag\n\nTo delete an entity-tag, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/entity_tags/{entity_tag.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/entity-types.md",
    "content": "# Entity Types\n\n---\n\n- [All Entity Types](#all-entity-types)\n\n<a name=\"all-entity-types\"></a>\n## All Entity Types\n\nYou can get a list of all the entity types an entity can be by using the following endpoint.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entity-types` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"code\": \"character\"\n        },\n        {\n            \"id\": 2,\n            \"code\": \"family\"\n        },\n    ]\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/posts.md",
    "content": "# Posts\n\n---\n\n- [All Posts](#all-posts)\n- [Single Post](#post)\n- [Create a Post](#create-post)\n- [Update a Post](#update-post)\n- [Delete a Post](#delete-post)\n- [Deleted Posts](#deleted-posts)\n- [Recover Deleted Posts](#recover-posts)\n\n<a name=\"all-posts\"></a>\n## All Posts\n\nYou can get a list of all the posts of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/posts` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"entity_id\": 69,\n            \"entry\": \"Lorem Ipsum\",\n            \"entry_parsed\": \"Lorem Ipsum\",\n            \"id\": 31,\n            \"position\": null,\n            \"visibility_id\": 1,\n            \"name\": \"Secret Note\",\n            \"settings\": [],\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": null,\n            \"permissions\": [],\n            \"layout_id\": 3,\n            \"tags\": [],\n            \"calendar_id\": 102,\n            \"calendar_year\": 2020,\n            \"calendar_month\": 3,\n            \"calendar_day\": 2,\n            \"calendar_reminder_length\": 3\n        }\n    ]\n}\n```\n\n\n<a name=\"post\"></a>\n## Post\n\nTo get the details of a single post, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/posts/{post.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"entity_id\": 69,\n        \"entry\": \"Lorem Ipsum\",\n        \"entry_parsed\": \"Lorem Ipsum\",\n        \"id\": 31,\n        \"position\": null,\n        \"visibility_id\": 1,\n        \"name\": \"Secret Note\",\n        \"settings\": [],\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": null,\n        \"permissions\": [],\n        \"layout_id\": 3,\n        \"tags\": [],\n        \"calendar_id\": 102,\n        \"calendar_year\": 2020,\n        \"calendar_month\": 3,\n        \"calendar_day\": 2,\n        \"calendar_reminder_length\": 3\n    }\n}\n```\n\n\n<a name=\"create-post\"></a>\n## Create a Post\n\nTo create a post, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/posts` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the post |\n| `entry` | `string` | The post's entry (html) |\n| `entity_id` | `integer` (Required) | The post's parent entity |\n| `visibility_id` | `integer` | The visibility: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n| `position` | `int|null` (optional) | Position for ordering pinned posts |\n| `settings` | `object` (optional) | `collapsed:1` if the pinned post should be collapsed on page load |\n| `layout_id` | `integer` (optional) | The type of [Post Layout](/api-docs/{{version}}/post-layout) the post will render (Only for Premium campaigns) |\n| `tags` | `array` | Array of tag ids |\n| `save_tags` | `boolean` | Required to save tags |\n\n\n### Results\n\n> {success} Code 200 with JSON body of the new post.\n\n\n<a name=\"update-post\"></a>\n## Update a Post\n\nTo update a post, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `entities/{entity.id}/posts/{post.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a post.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated post.\n\n\n<a name=\"delete-post\"></a>\n## Delete a Post\n\nTo delete a post, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/posts/{post.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n\n## Permissions\n\nPost permissions are exposed with each call. A permission typically looks like this\n```json\n{\n    \"user_id\": 1,\n    \"role_id\": null,\n    \"permission\": 1,\n    \"permission-text\": \"update\"\n}\n```\n\nA permission is either attached to a `user_id` or a `role_id`, but never to both.\n\nThe permission integer is set to `0` for `Read`, `1` for `Update`, and `2` for `Deny`.\n\n<a name=\"deleted-posts\"></a>\n## Deleted Posts\n\nYou can view the recoverable deleted posts on the `/recovery/posts` endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `/recovery/posts` | Default |\n\n### Result\n\n```json\n{\n \"data\": [\n        {\n            \"created_at\": \"2024-06-05T02:29:03.000000Z\",\n            \"created_by\": 1563,\n            \"entity_id\": 193,\n            \"entry\": null,\n            \"entry_parsed\": \"\",\n            \"id\": 4042,\n            \"layout_id\": null,\n            \"name\": \"First Encounter\",\n            \"permissions\": [],\n            \"position\": 1,\n            \"settings\": {\n                \"collapsed\": \"0\",\n                \"class\": null\n            },\n            \"updated_at\": \"2024-06-05T03:53:09.000000Z\",\n            \"updated_by\": 1,\n            \"visibility_id\": 1\n        }\n    ],\n}\n```\n\n<a name=\"recover-posts\"></a>\n## Recover Deleted Posts\n\nYou can post an array with the ids of the posts you want to recover to the `/recover/posts` endpoint to undo the deletion (this is a premium only feature).\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `/recover/posts` | Default |\n\n| Parameter | Type | Description\n| :- | :- | :- |\n| `posts` | `array` | The ids of the posts to recover. |\n\n### Result\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/reminders.md",
    "content": "# Reminders\n\n---\n\n- [All Reminders](#all-entity-events)\n- [Single Reminder](#entity-event)\n- [Create an Reminder](#create-entity-event)\n- [Update an Reminder](#update-entity-event)\n- [Delete an Reminder](#delete-entity-event)\n\n<a name=\"all-entity-events\"></a>\n## All Reminders\n\nYou can get a list of all the entity-events of an entity by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/reminders` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"calendar_id\": 7,\n            \"comment\": \"Recurring event\",\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": null,\n            \"date\": \"2-1-5\",\n            \"remindable_id\": 1085,\n            \"remindable_type\": \"App/Models/Entity\",\n            \"id\": 60,\n            \"is_private\": false,\n            \"is_recurring\": true,\n            \"recurring_periodicity\": \"yearly\",\n            \"length\": 1,\n            \"recurring_until\": null,\n            \"type_id\": null,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": null,\n            \"visibility_id\": 1,\n            \"year\": 1\n        }\n    ]\n}\n```\n\n\n<a name=\"entity-event\"></a>\n## Reminder\n\nTo get the details of a single entity-event, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}/entity_events/{entity_event.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"calendar_id\": 7,\n        \"comment\": \"Recurring event\",\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": null,\n        \"date\": \"2-1-5\",\n        \"remindable_id\": 1085,\n        \"remindable_type\": \"App/Models/Entity\",\n        \"id\": 60,\n        \"is_private\": false,\n        \"is_recurring\": true,\n        \"recurring_periodicity\": \"yearly\",\n        \"length\": 1,\n        \"recurring_until\": null,\n        \"type_id\": null,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": null,\n        \"visibility_id\": 1,\n        \"year\": 1\n    }\n}\n```\n\n\n<a name=\"create-entity-event\"></a>\n## Create an Reminder\n\nTo create an entity-event, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/{entity.id}/entity_events` | Default |\n\n### Body\n\n| Parameter               | Type | Detail                                                                                 |\n|:------------------------|   :-   |:---------------------------------------------------------------------------------------|\n| `name`                  | `string` (Required) | Name of the reminder                                                               |\n| `day`                   | `integer` (Required) | Day on which the event takes place                                                     |\n| `month`                 | `integer` (Required) | Month (id) on which the event takes place                                              |\n| `year`                  | `integer` (Required) | Year on which the event takes place                                                    |\n| `length`                | `integer` (Required) | Duration in days of the event                                                          |\n| `recurring_periodicity` | `string` | Null if the event isn't recurring. `yearly`, `monthly` or `{moon.id}_(f                |n)` where `f` is full moon and `n` is new moon |\n| `recurring_until`       | `integer` | Year until the event reoccurs                                                          |\n| `colour`                | `string` | Colour of the reminder in the calendar                                             |\n| `comment`               | `string` | Comment of the reminder                                                            |\n| `calendar_id`           | `integer` (Required) | The calendar\\'s id                                                                     |\n| `is_private`            | `boolean` | If the reminder is only visible to `admin` members of the campaign                 |\n| `type_id`               | `null` or `int` | Special field for calculating the age of a character. `2` for birthday, `3` for death. |\n| `visibility_id`         | `int` | The visibility ID: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`.    |\n\n### Results\n\n> {success} Code 200 with JSON body of the new entity-event.\n\n\n<a name=\"update-entity-event\"></a>\n## Update an Reminder\n\nTo update an entity-event, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `entities/{entity.id}/entity_events/{entity_event.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating an entity-event.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated entity-event.\n\n\n<a name=\"delete-entity-event\"></a>\n## Delete an Reminder\n\nTo delete an entity-event, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `entities/{entity.id}/entity_events/{entity_event.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/entities/templates.md",
    "content": "# Archetypes\n\n---\n\n- [All archetypes](#all-templates)\n- [Toggle a archetypes](#switch-template)\n\n<a name=\"all-templates\"></a>\n## All archetypes\n\nYou can get a list of entities marked as archetypes by calling the following API endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/templates` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 5,\n            \"name\": \"Dagger of Darkness\",\n            \"type\": \"item\",\n            \"child_id\": 1,\n            \"tags\": [],\n            \"is_private\": false,\n            \"is_template\": true,\n            \"campaign_id\": 1,\n            \"is_attributes_private\": false,\n            \"tooltip\": \"\",\n            \"header_image\": null,\n            \"image_uuid\": null,\n            \"created_at\": \"2020-06-03T11:04:30.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\": \"2021-06-16T08:01:02.000000Z\",\n            \"updated_by\": 1\n        }\n    ]\n}\n```\n\n\n<a name=\"switch-template\"></a>\n## Toggle archetype\n\nTo change the archetype status of an entity, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities/template/{entity.id}/switch` | Default |\n\n### Body\n\n`empty`\n\n\n### Results\n\n> {success} Code 200 with JSON body of the entity.\n\n"
  },
  {
    "path": "resources/api-docs/1.0/entities.md",
    "content": "# Entities\n\n- [Entities](#entities)\n- [Entity Types](#entity-types)\n- [Single Entity](#entity)\n- [Filtering Entities](#filtering-entities)\n- [Related Entities](#related-entities)\n- [Recently Edited Entities](#recent-entities)\n- [Create Entities](#create-entities)\n- [Patching an Entity](#patch-entities)\n- [Transform Entities](#transform-entities)\n- [Transfer Entities](#transfer-entities)\n- [Deleted Entities](#deleted-entities)\n- [Recover Deleted Entities](#recover-entities)\n\n\n<a name=\"entities\"></a>\n## Entities\n\nNearly all models in Kanka are based on the concept of entities. A character is an entity, but because of historical choices, there are two actual models.\nA `character` is a singular model and endpoint, and a character has both an `id` and an `entity_id` value. The `id` identifies the character against all other **characters**, while the `entity_id` identifies the character against all other **entities**. This can be confusing at first, but should not be an issue with the help of this documentation.\n\n> {warning} Please note that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{id}`. For example, if an endpoint is listed as `characters`, you should use `api.kanka.io/{{version}}/campaigns/{id}/characters`.\n\nSome common entities include:\n\n* [Characters](/api-docs/{{version}}/characters)\n* [Locations](/api-docs/{{version}}/locations)\n\n### Common Attributes\n\nMost entities have the following attributes.\n\n| Attribute               | Type | Description                                                                                                                                                                           \n|:------------------------| :- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `id`                    | `integer` | The id identifying the object against all other objects of the same type.                                                                                                             |\n| `name`                  | `string` | The name representing the object.                                                                                                                                                     |\n| `type`                  | `string` | The entity's type field.                                                                                                                                                              |\n| `type_id`               | `integer` | The type of entity as an integer.                                                                                                                                                     |\n| `entity_type_code`      | `integer` | The type of entity as a code (character, map).                                                                                                                                        |\n| `child_id`              | `integer` | The id identifying the entity against all other entities of the same type (ie unique character id).                                                                                   |\n| `image`                 | `string` | The local path to the picture of the object.                                                                                                                                          |\n| `image_full`            | `string` | The url to the picture of the object.                                                                                                                                                 |\n| `image_thumb`           | `string` | The url to the thumbnail of the object.                                                                                                                                               |\n| `image_uuid`            | `uuid` | The image gallery uuid of the entity                                                                                                                                                  |\n| `header_uuid`           | `uuid` | The image gallery uuid of the entity header                                                                                                                                           |\n| `is_private`            | `boolean` | Determines if the object is only visible by `admin` members of the campaign.<br /> If the user requesting the API isn't a member of the `admin` role, such objects won't be returned. |\n| `is_template`           | `boolean` | Determines if the object is a template.                                                                                                                                               |\n| `is_attributes_private` | `boolean` | Determines if the entity's attributes are only visible to members of the campaign's admin role.                                                                                       |\n| `status_id`             | `integer` | The id of the entity's status from `category_statuses`. `null` if no status is set.                                                                                                  |\n| `tags`                  | `array` | An array of tags that the object is related to.                                                                                                                                       |\n| `created_at`            | `object` | An object representing when the object was created (server time)                                                                                                                      |\n| `created_by`            | `integer` | The `users`.`id` who created the object.                                                                                                                                              \n| `updated_at`            | `object` | An object representing when the object was updated (server time)                                                                                                                      |\n| `updated_by`            | `integer` | The `users`.`id` who last updated the object.                                                                                                                                         \n\n\n<a name=\"entity-types\"></a>\n## Entity Types / Modules\n\nYou can see all entity types/modules and their ID's on the following endpoint: [Entity Types](/api-docs/{{version}}/campaigns/modules)\n\n\n<a name=\"entity\"></a>\n## Single Entity\n\nTo get the details of a single entity, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `entities/{entity.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 95,\n        \"name\": \"Redkeep\",\n        \"type\": \"A castle in the sky\",\n        \"type_id\": 2,\n        \"entity_type\": \"location\",\n        \"child_id\": 95,\n        \"tags\": [],\n        \"is_private\": false,\n        \"campaign_id\": 1,\n        \"is_attributes_private\": false,\n        \"status_id\": null,\n        \"tooltip\": null,\n        \"header_image\": null,\n        \"header_uuid\": null,\n        \"image_uuid\": null,\n        \"created_at\": \"2017-12-07T14:23:57.000000Z\",\n        \"created_by\": null,\n        \"updated_at\": \"2017-12-07T14:23:57.000000Z\",\n        \"updated_by\": null,\n        \"archived_at\": null\n    }\n}\n```\n\nThe `child_id` property in this case is the location's id. So if you want to get the whole location based on this entity, call `locations/95`.\n\n<a name=\"filtering-entities\"></a>\n## Filtering Entities\n\nYou can filter the returned entities on the `entities/` endpoint with the following options.\n\n| Parameter     | Values             | Description                                                                                                                    |\n|:--------------|:-------------------|:-------------------------------------------------------------------------------------------------------------------------------||\n| `type_id[]`   | `array`            | Filter the returned entities by their [type_id](/api-docs/{{version}}/campaigns/modules) field. Ex `type_id[]=1&type_id[]=420`            |\n| `name`        | `string`           | The name of the entity (like %% search)                                                                                        |\n| `type`        | `string`           | The type of the entity, for exmaple \"NPC\" on a character (like %% search)                                                      |\n| `is_private`  | `bool`             | Search for private entities with `is_private=true`                                                                             |\n| `is_template` | `bool`             | Search for entities that are set as templates                                                                                  |\n| `created_by`  | `int`              | User ID of entities created by that user                                                                                       |\n| `updated_by`  | `int`              | User ID of entities updated by that user                                                                                       |\n| `tags[]`        | `array`            | Filter on tags. Ex `tags[]=5&tags[]=13`                                                                                        |\n\n\nFor example, call `entities?type_id[]=5&type_id[]=10` to get entities of the Object and Quest modules.\n\n<a name=\"related-entities\"></a>\n## Related Entities\n\nYou can call this endpoint with the `?related` option described below to get the entity's related objects. This parameter works for both the `entities/` endpoints and the individual \"child\" endpoints (ie `characters/`).\n\nThere are several models in Kanka which represent objects attached to `entities`.\n\n* [Attributes](/api-docs/{{version}}/entities/attributes)\n* [Reminders](/api-docs/{{version}}/entities/reminders)\n* [Entity Files](/api-docs/{{version}}/entities/entity-files)\n* [Entity Mentions](/api-docs/{{version}}/entities/entity-mentions)\n* [Entity Tags](/api-docs/{{version}}/entities/entity-tags)\n* [Entity Connections](/api-docs/{{version}}/entities/connections)\n* [Inventory](/api-docs/{{version}}/entities/entity-inventory)\n* [Entity Abilities](/api-docs/{{version}}/entities/entity-abilities)\n* [Entity Links](/api-docs/{{version}}/entities/entity-links)\n* [Posts](/api-docs/{{version}}/entities/posts)\n\nWith each request to an object (ie. `character`, `location`, etc), you can include the following parameter to get those related objects directly.\n\n\n| Parameter | Type | Description\n| :- | :- | :- |\n| `related` | `integer` | Set to `1` if you want the entity's related objects |\n\n### Examples\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `characters?related=1` | Default |\n| GET/HEAD | `characters/1?related=1` | Default |\n\n### Result\n\n\n```json\n{\n    \"data\": [\n        {\n            \"id\": 44,\n            \"name\": \"Frejya\",\n            \"entry\": \"Lorem Ipsum\",\n            \"image\": null,\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"is_private\": false,\n            \"entity_id\": 76,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": null,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": null,\n            \"location_id\": 2,\n            \"attributes\": [],\n            \"posts\": [],\n            \"entity_events\": [\n                {\n                    \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n                    \"created_by\": null,\n                    \"default_order\": null,\n                    \"entity_id\": 76,\n                    \"id\": 22,\n                    \"is_private\": false,\n                    \"name\": null,\n                    \"type\": null,\n                    \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n                    \"updated_by\": null,\n                    \"value\": null\n                }\n            ],\n            \"entity_files\": [],\n            \"entity_abilities\": [],\n            \"entity_links\": [],\n            \"relations\": [],\n            \"title\": null,\n            \"age\": null,\n            \"sex\": null,\n            \"races\": [],\n            \"type\": null,\n            \"families\": [],\n            \"status_id\": null,\n            \"traits\": [],\n            \"archived_at\": null\n        }\n    ]\n}\n```\n\nNotice the new array objects `attributes`, `entity_files`, `entity_events`, `posts`, `entity_abilities` and `relations`.\n\n<a name=\"recent-entities\"></a>\n## Recently modified Entities\n\nYou can see the 10 most recently edited entities on the `entities/recent` endpoint with the following option.\n\n| Parameter | Values | Description |\n| :- | :- | :- |\n| `amount` | `int` | Number of most recently edited entities to show, has to be a value from 1 to 10, 1 being the default |\n\n### Result\n\n\n```json\n{\n    \"data\": [\n        {\n            \"id\": 8,\n            \"name\": \"Sword of Cebolla\",\n            \"type\": \"item\",\n            \"type_id\": 5,\n            \"child_id\": 1,\n            \"tags\": [],\n            \"is_private\": false,\n            \"is_template\": false,\n            \"campaign_id\": 1,\n            \"is_attributes_private\": false,\n            \"tooltip\": null,\n            \"header_image\": null,\n            \"image_uuid\": null,\n            \"created_at\": \"2023-08-22T20:22:21.000000Z\",\n            \"created_by\": null,\n            \"updated_at\": \"2024-08-22T20:22:21.000000Z\",\n            \"updated_by\": null,\n            \"archived_at\": null,\n            \"urls\": {\n                \"view\": \"{url}\",\n                \"api\": \"{url}\"\n            }\n        }\n    ],\n}\n```\n\n<a name=\"create-entities\"></a>\n## Create Entities\n\nTo create up to 20 entities at once, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `entities` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `entities` | `array` (Required) | An array containing all the entities |\n| `entities.*.name` | `string` (Required) | Name of the entity |\n| `entities.*.module` | `int`  (Required) | Id of the module to which the entity will belong to|\n| `entities.*.entry` | `string` | The html description of the entity. |\n| `entities.*.type` | `string`  | Type of the entity |\n| `entities.*.tags` | `array`  | An array containing the ids of tags to apply to the entity|\n\n\n### Example\n\n\n```json\n{\n    \"entities\": [\n        {\n            \"name\": \"Frejya\",\n            \"module\": 1,\n            \"type\": \"Legendary Warrior\",\n            \"tags\": [\n            2, 3\n            ]\n        },\n        {\n            \"name\": \"Frejya's tabern\",\n            \"module\": 3,\n            \"type\": \"Tabern\",\n            \"entry\": \"Lorem ipsum\"\n        },       \n        {\n            \"name\": \"Goblin\",\n            \"module\": 20,\n            \"entry\": \"Lorem ipsum\"\n        }\n    ]\n}\n```\n\n### Results\n\n> {success} Code 200 with JSON body of the new entities.\n\n\n<a name=\"patch-entities\"></a>\n## Patching an Entity\n\nTo patch an entity, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PATCH | `entities` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` | Name of the entity. |\n| `type` | `string` | The type of the entity. |\n| `is_private` | `boolean` | If the entity is only visible to `admin` members of the campaign. |\n| `is_template` | `boolean` | If the entity is set as a template. |\n| `tooltip` | `string`  | The entity's tooltip (premium campaign feature). |\n| `entry` | `string`  | The html description of the entity. |\n| `image_uuid` | `uuid` | The image gallery uuid of the entity. |   \n| `header_uuid` | `uuid` | The image gallery uuid of the entity's header. |\n| `parent_id` | `int` | The id of the entity's parent entity (only for custom modules). |\n\n\n### Example\n\n\n```json\n{\n    \"name\": \"Frejya\",\n    \"type\": \"Legendary Warrior\",\n    \"is_private\": 0,\n    \"is_template\": 1,\n    \"tooltip\": \"Warrior from ancient times\",\n    \"entry\": \"One of the strongest warriors of the land\",\n    \"image_uuid\": \"00000000-0000-0000-0000-000000000000\",\n    \"header_uuid\": \"00000000-0000-0000-0000-000000000000\"\n}\n\n\n```\n\n### Results\n\n> {success} Code 200 with JSON body of the patched entity.\n\n\n<a name=\"transform-entities\"></a>\n## Transform Entities\n\nYou can post an array with the ids of the entities you want to transform to the `/transform` endpoint to transform them into a different entity type that exists in the campaign.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `transform` | Default |\n\n| Parameter | Type | Description\n| :- | :- | :- |\n| `entities` | `array`(required) | The ids of the entities to transform. |\n| `entity_type` | `string`(required) | The type of entity the entity will be transformed to. |\n\n### Result\n\n> {success} Code 200 with JSON.\n\n<a name=\"transfer-entities\"></a>\n## Transfer Entities\n\nYou can post an array with the ids of the entities you want to transfer to another campaign to the `/transfer` endpoint to transfer or copy them.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `transfer` | Default |\n\n| Parameter | Type | Description\n| :- | :- | :- |\n| `entities` | `array`(required) | The ids of the entities to transfer or copy. |\n| `campaign_id` | `integer`(required) | The id of the campaign the entity will be transfered or copied to. |\n| `copy` | `boolean` | True if the entity will be copied, false if the entity will be transfered, defaults to false if left empty |\n\n### Result\n\n> {success} Code 200 with JSON.\n\n<a name=\"deleted-entities\"></a>\n## Deleted Entities\n\nYou can view the recoverable deleted entities on the `/recovery` endpoint\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `recovery` | Default |\n\n### Result\n\n```json\n{\n \"data\": [\n        {\n            \"id\": 2,\n            \"name\": \"Thaelia\",\n            \"type\": \"location\",\n            \"type_id\": 3,\n            \"child_id\": 2,\n            \"tags\": [],\n            \"is_private\": false,\n            \"is_template\": false,\n            \"campaign_id\": 1,\n            \"is_attributes_private\": false,\n            \"tooltip\": null,\n            \"header_image\": null,\n            \"image_uuid\": null,\n            \"created_at\": \"2023-08-22T20:01:48.000000Z\",\n            \"created_by\": null,\n            \"updated_at\": \"2023-08-22T23:19:07.000000Z\",\n            \"updated_by\": 1,\n            \"archived_at\": null,\n            \"urls\": {\n                \"view\": \"http://app.kanka.test:8081/w/1/entities/2\",\n                \"api\": \"http://api.kanka.test:8081/1.0/campaigns/1/locations/2\"\n            }\n        },\n        {\n            \"id\": 23,\n            \"name\": \"Middle Earth\",\n            \"type\": \"location\",\n            \"type_id\": 3,\n            \"child_id\": 16,\n            \"tags\": [],\n            \"is_private\": false,\n            \"is_template\": false,\n            \"campaign_id\": 1,\n            \"is_attributes_private\": false,\n            \"tooltip\": null,\n            \"header_image\": null,\n            \"image_uuid\": null,\n            \"created_at\": \"2023-08-22T20:22:21.000000Z\",\n            \"created_by\": null,\n            \"updated_at\": \"2023-08-22T23:19:07.000000Z\",\n            \"updated_by\": null,\n            \"archived_at\": null,\n            \"urls\": {\n                \"view\": \"http://app.kanka.test:8081/w/1/entities/23\",\n                \"api\": \"http://api.kanka.test:8081/1.0/campaigns/1/locations/16\"\n            }\n        }\n    ],\n}\n```\n\n<a name=\"recover-entities\"></a>\n## Recover Deleted Entities\n\nYou can post an array with the ids of the entities you want to recover to the `/recover` endpoint to undo the deletion (this is a premium only feature).\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `recover` | Default |\n\n| Parameter | Type | Description\n| :- | :- | :- |\n| `entities` | `array` | The ids of the entities to recover. |\n\n### Result\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/events.md",
    "content": "# Events\n\n---\n\n- [All Events](#all-events)\n\n- [Single Event](#event)\n- [Create a Event](#create-event)\n- [Update a Event](#update-event)\n- [Delete a Event](#delete-event)\n\n<a name=\"all-events\"></a>\n## All Events\n\nYou can get a list of all the events of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `events` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Battle of Hadish\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 7,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"locations\": [4, 12],\n            \"date\": \"44-3-16\",\n            \"type\": \"Battle\",\n            \"calendar_id\": 2,\n            \"calendar_year\": 2,\n            \"calendar_month\": 4,\n            \"calendar_day\": 3\n        }\n    ]\n}\n```\n\n<a name=\"event\"></a>\n## Event\n\nTo get the details of a single event, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `events/{event.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Battle of Hadish\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 7,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"location_id\": 4,\n        \"locations\": [4, 12],\n        \"date\": \"44-3-16\",\n        \"type\": \"Battle\",\n        \"calendar_id\": 2,\n        \"calendar_year\": 2,\n        \"calendar_month\": 4,\n        \"calendar_day\": 3\n    }\n\n}\n```\n\n\n<a name=\"create-event\"></a>\n## Create a Event\n\nTo create a event, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `events` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the event |\n| `entry` | `string` | The html description of the event |\n| `type` | `string` | The event's type |\n| `date` | `string` | Fictional date at which the event took place |\n| `locations` | `array` | Array of location ids |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The event's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the event is only visible to `admin` members of the campaign |\n### Results\n\n> {success} Code 200 with JSON body of the new event.\n\n\n<a name=\"update-event\"></a>\n## Update a Event\n\nTo update a event, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `events/{event.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a event.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated event.\n\n\n<a name=\"delete-event\"></a>\n## Delete a Event\n\nTo delete a event, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `events/{event.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/families.md",
    "content": "# Families\n\n---\n\n- [All Families](#all-families)\n\n- [Single Family](#family)\n- [Create a Family](#create-family)\n- [Update a Family](#update-family)\n- [Delete a Family](#delete-family)\n- [Family Tree](#family-tree)\n- [Create a Family Tree](#create-family-tree)\n- [Update a Family Tree](#update-family-tree)\n- [Delete a Family Tree](#delete-family-tree)\n\n<a name=\"all-families\"></a>\n## All Families\n\nYou can get a list of all the families of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `families` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Adams\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 5,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"location_id\": 4,\n            \"status_id\": 1,\n            \"type\": \"\",\n            \"family_id\": 2,\n            \"members\": [\n              \"3\"\n            ]\n        }\n    ]\n}\n```\n\n<a name=\"family\"></a>\n## Family\n\nTo get the details of a single family, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `families/{family.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Adams\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 5,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"location_id\": 1,\n        \"status_id\": 1,\n        \"type\": \"\",\n        \"family_id\": 2,\n        \"members\": [\n          \"3\"\n        ]\n    }\n\n}\n```\n\n> {info} Additional note: `members` represents an array of `characters`.`id`.\n\n\n\n<a name=\"create-family\"></a>\n## Create a Family\n\nTo create a family, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `families` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the family |\n| `entry` | `string` | The html description of the family |\n| `type` | `string` | The type of family |\n| `location_id` | `integer` | The family's location id |\n| `family_id` | `integer` | The parent family id |\n| `status_id` | `integer` | The id of the entity's status from `category_statuses` |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The family's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the family is only visible to `admin` members of the campaign |\n\n### Results\n\n> {success} Code 200 with JSON body of the new family.\n\n\n<a name=\"update-family\"></a>\n## Update a Family\n\nTo update a family, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `families/{family.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a family.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated family.\n\n\n<a name=\"delete-family\"></a>\n## Delete a Family\n\nTo delete a family, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `families/{family.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n\n<a name=\"family-tree\"></a>\n## Family Tree\n\nTo get the details of a family tree, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `families/{family.id}/tree` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"entity_id\": 76,\n            \"uuid\": \"7d06c3b9-31d3-4131-b7a9-da4e3b62099f\",\n            \"relations\": [\n                {\n                    \"entity_id\": 188,\n                    \"uuid\": \"c1aa22cd-c2e1-47c3-ad3b-d8b09ad60dd9\",\n                    \"children\": [\n                        {\n                            \"entity_id\": 185,\n                            \"colour\": \"#af5454\",\n                            \"uuid\": \"2d42132a-f95b-41f4-9668-37f76b6f6c01\"\n                        }\n                    ]\n                },\n                {\n                    \"entity_id\": 26,\n                    \"role\": \"Wife\",\n                    \"colour\": \"#731515\",\n                    \"visibility\": \"1\",\n                    \"uuid\": \"d6af7644-e70d-43ef-a327-79a1f60c75d9\",\n                    \"children\": [\n                        {\n                            \"entity_id\": 7,\n                            \"uuid\": \"15119f77-559b-4b95-9db6-9839783b5358\"\n                        },\n                        {\n                            \"entity_id\": 13,\n                            \"uuid\": \"5df4f99c-a192-4b02-a0de-6380a0dbd99a\"\n                        }\n                    ]\n                }\n            ]\n        }\n    ]\n}\n```\n\n\n<a name=\"create-family-tree\"></a>\n## Create a Family Tree\n\nTo create a family tree, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT | `families/{family.id}/tree` | Default |\n\n### Body\n\nBecause of the recursive nature of the family trees, they work differently than the rest of the entities in Kanka, a tree consists of an array of nodes which in turn can contain an array of child nodes, for offsprings, and relation nodes.\n\nA family tree has to have a parent node, which in turn contains an array with with its related nodes, this nodes can have their respective relations arrays and child arrays, that also contain nodes.\n\nIts worth noting that children can only come from a relation, meaning that only relation nodes can have children arrays, and that only the founder and children can have relations, meaning that only the founder and children nodes can have relations.\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `tree` | `array` (Required) | Array containing all the nodes for the family tree|\n| `*.entity_id` | `int` (Required) | The id of the entity represented by the node |\n| `*.uuid` | `string` (Required) | A string that identifies the node, this can be left empty or filled with a string, but the array key is required |\n| `*.role` | `string` | The relation role of the node |\n| `*.colour` | `string` | The hex value of the node's colour |\n| `*.cssClass` | `string` | The CSS class for the node |\n| `*.visibility` | `integer` | The visibility id for the node, 1 for all, 2 for admins, 3 for admins and self, 4 for self, 5 for campaign members, note that the visibility of the node also applies to all its descendant relations and children |\n| `*.isUnknown` | `bool` | If the node shows \"Unknown\" instead of its entity |\n| `*.relations` | `array` (Exclusive to children/founder nodes) | Array containing a node's related nodes |\n| `*.children` | `array` (Exclusive to relation nodes) | Array containing the child nodes of a relation |\n\n### Example\n```json\n{\n    \"tree\": [\n        {\n            \"entity_id\": 76,\n            \"uuid\": \"1\",\n            \"relations\": [\n                {\n                    \"entity_id\": 24,\n                    \"role\": \"Partner\",\n                    \"uuid\": \"2\",\n                    \"cssClass\": \"classname\",\n                    \"children\": [\n                        {\n                            \"entity_id\": 20,\n                            \"uuid\": \"3\",\n                            \"role\": \"Husband\",\n                            \"relations\": [\n                                {\n                                    \"entity_id\": 14,\n                                    \"uuid\": \"string\",\n                                    \"role\": \"Partner\",\n                                    \"children\": [\n                                        {\n                                            \"entity_id\": 26,\n                                            \"uuid\": \"\"\n                                        },\n                                        {\n                                            \"entity_id\": 108,\n                                            \"uuid\": \"\"\n                                        }\n                                    ]\n                                }\n                            ]\n                        }\n                    ]\n                }\n            ]\n        }\n    ]\n}\n```\n### Results\n\n> {success} Code 200 with JSON body of the new family tree.\n\n<a name=\"update-family-tree\"></a>\n## Update a Family Tree\n\nTo update a family tree, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `families/{family.id}/tree` | Default |\n\n### Body\n\nThe update endpoint for the family tree follows the same rules as the creation endpoint.\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `tree` | `array` (Required) | Array containing all the nodes for the family tree|\n| `*.entity_id` | `int` (Required) | The id of the entity represented by the node |\n| `*.uuid` | `string` (Required) | A string that identifies the node, this can be left empty or filled with a string, but the array key is required |\n| `*.role` | `string` | The relation role of the node |\n| `*.colour` | `string` | The hex value of the node's colour |\n| `*.cssClass` | `string` | The CSS class for the node |\n| `*.visibility` | `integer` | The visibility id for the node, 1 for all, 2 for admins, 3 for admins and self, 4 for self, 5 for campaign members, note that the visibility of the node also applies to all its descendant relations and children |\n| `*.isUnknown` | `bool` | If the node shows \"Unknown\" instead of its entity |\n| `*.relations` | `array` (Exclusive to children/founder nodes) | Array containing a node's related nodes |\n| `*.children` | `array` (Exclusive to relation nodes) | Array containing the child nodes of a relation |\n\n### Results\n\n> {success} Code 200 with JSON body of the new family tree.\n\n<a name=\"delete-family-tree\"></a>\n## Delete a Family Tree\n\nTo delete a family tree, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `families/{family.id}/tree` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/index.md",
    "content": "- ## Get Started\n  - [Overview](/api-docs/{{version}}/overview)\n  - [Setup](/api-docs/{{version}}/setup)\n\n\n- ## User\n  - [Profile](/api-docs/{{version}}/profile)\n\n- ## Campaigns\n  - [Campaigns](/api-docs/{{version}}/campaigns)\n  - [Campaign Applications](/api-docs/{{version}}/campaigns/applications)\n  - [Campaign Members](/api-docs/{{version}}/campaigns/members)\n  - [Campaign Roles](/api-docs/{{version}}/campaigns/roles)\n  - [Default Thumbnails](/api-docs/{{version}}/campaigns/default-thumbnails)\n  - [Campaign Styles](/api-docs/{{version}}/campaigns/styles)\n  - [Dashboard Widgets](/api-docs/{{version}}/campaigns/dashboard-widgets)\n  - [Gallery](/api-docs/{{version}}/campaigns/images)\n  - [Categories](/api-docs/{{version}}/campaigns/categories)\n  - [Statuses](/api-docs/{{version}}/campaigns/statuses)\n\n- ## Core Objects\n  - [Entities](/api-docs/{{version}}/entities)\n  - [Characters](/api-docs/{{version}}/characters)\n  - [Locations](/api-docs/{{version}}/locations)\n  - [Families](/api-docs/{{version}}/families)\n  - [Organisations](/api-docs/{{version}}/organisations)\n      - [Members](/api-docs/{{version}}/organisation-members)\n  - [Objects](/api-docs/{{version}}/items)\n  - [Notes](/api-docs/{{version}}/notes)\n  - [Events](/api-docs/{{version}}/events)\n  - [Calendars](/api-docs/{{version}}/calendars)\n  - [Timelines](/api-docs/{{version}}/timelines)\n  - [Creatures](/api-docs/{{version}}/creatures)\n  - [Races](/api-docs/{{version}}/races)\n  - [Quests](/api-docs/{{version}}/quests)\n  - [Maps](/api-docs/{{version}}/maps)\n      - [Map Markers](/api-docs/{{version}}/map_markers)\n      - [Map Groups](/api-docs/{{version}}/map_groups)\n      - [Map Layers](/api-docs/{{version}}/map_layers)\n  - [Journals](/api-docs/{{version}}/journals)\n  - [Abilities](/api-docs/{{version}}/abilities)\n  - [Tags](/api-docs/{{version}}/tags)\n  - [Conversations](/api-docs/{{version}}/conversations)\n  - [Dice Rolls](/api-docs/{{version}}/dice-rolls)\n  - [Property Kits](/api-docs/{{version}}/attribute-templates)\n\n- ## Entities\n  - [Abilities](/api-docs/{{version}}/entities/entity-abilities)\n  - [Properties](/api-docs/{{version}}/entities/attributes)\n  - [Assets](/api-docs/{{version}}/entities/entity-assets)\n  - [Image](/api-docs/{{version}}/entities/entity-image)\n  - [Inventory](/api-docs/{{version}}/entities/entity-inventory)\n  - [Mentions](/api-docs/{{version}}/entities/entity-mentions)\n  - [Permissions](/api-docs/{{version}}/entities/entity-permissions)\n  - [Posts](/api-docs/{{version}}/entities/posts)\n  - [Connections](/api-docs/{{version}}/entities/connections)\n  - [Reminders](/api-docs/{{version}}/entities/reminders)\n  - [Tags](/api-docs/{{version}}/entities/entity-tags)\n  - [Archetypes](/api-docs/{{version}}/entities/templates)\n\n- ## Search\n  - [Search](/api-docs/{{version}}/search)\n  - [Archives](/api-docs/{{version}}/archives)\n\n- ## Other Concepts\n  - [Last Sync](/api-docs/{{version}}/misc/last-sync)\n  - [Filters](/api-docs/{{version}}/misc/filters)\n  - [Pagination](/api-docs/{{version}}/misc/pagination)\n  - [Visibilities](/api-docs/{{version}}/misc/visibilities)\n  - [Permissions Test](/api-docs/{{version}}/misc/permissions-test)\n\n- ## Help\n  - [Troubleshooting](/api-docs/{{version}}/troubleshooting)\n"
  },
  {
    "path": "resources/api-docs/1.0/items.md",
    "content": "# Objects\n\n---\n\n- [All Objects](#all-items)\n\n- [Single object](#item)\n- [Create an object](#create-item)\n- [Update an object](#update-item)\n- [Delete an object](#delete-item)\n\n<a name=\"all-items\"></a>\n## All objects\n\nYou can get a list of all the items of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `items` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Spear\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 7,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"location_id\": 4,\n            \"creators\": [2],\n            \"type\": \"Weapon\",\n            \"price\": \"25 gp\",\n            \"size\": \"40 in.\",\n            \"weight\": \"1 lb.\",\n            \"item_id\": 2\n        }\n    ]\n}\n```\n\n<a name=\"item\"></a>\n## Object\n\nTo get the details of a single item, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `items/{item.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Spear\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 7,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"location_id\": 4,\n        \"creator_id\": 2,\n        \"type\": \"Weapon\",\n        \"price\": \"25 gp\",\n        \"size\": \"30 in.\",\n        \"weight\": \"1 lb.\",\n        \"item_id\": 2\n    }\n\n}\n```\n\n\n<a name=\"create-item\"></a>\n## Create an object\n\nTo create a item, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `items` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the item |\n| `entry` | `string` | The html description of the item |\n| `type` | `string` | The item's type |\n| `location_id` | `integer` | The item's location |\n| `creators` | `array` | Array of entity ids of the item's creators |\n| `price` | `string` | The item's price |\n| `size` | `string` | The item's size |\n| `weight` | `string` | The item's weight |\n| `tags` | `array` | Array of tag ids |\n| `is_private` | `boolean` | If the item is only visible to `admin` members of the campaign |\n| `item_id` | `integer` | The ID of the item's parent item, if it has one |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The item's tooltip (premium campaign feature)                   |\n\n### Results\n\n> {success} Code 200 with JSON body of the new item.\n\n\n<a name=\"update-item\"></a>\n## Update an object\n\nTo update a item, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `items/{item.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a item.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated item.\n\n\n<a name=\"delete-item\"></a>\n## Delete an object\n\nTo delete a item, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `items/{item.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/journals.md",
    "content": "# Journals\n\n---\n\n- [All Journals](#all-journals)\n- [Single Journal](#journal)\n- [Create a Journal](#create-journal)\n- [Update a Journal](#update-journal)\n- [Delete a Journal](#delete-journal)\n\n<a name=\"all-journals\"></a>\n## All Journals\n\nYou can get a list of all the journals of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `{{version}}/journals` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 3,\n            \"name\": \"Session 2 - Descent into the Abyss\",\n            \"entry\": \"\\n<p>Lorem Ipsum</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"journal_id\": null,\n            \"entity_id\": 42,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": null,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"author_id\": 11,\n            \"date\": \"2017-11-02\",\n            \"type\": \"Session\",\n            \"calendar_id\": 102,\n            \"calendar_year\": 2020,\n            \"calendar_month\": 3,\n            \"calendar_day\": 2,\n            \"calendar_event_length\": 3\n        }\n    ]\n}\n```\n\n\n<a name=\"journal\"></a>\n## Journal\n\nTo get the details of a single journal, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `{{version}}/journals/{journal.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 3,\n        \"name\": \"Session 2 - Descent into the Abyss\",\n        \"entry\": \"\\n<p>Lorem Ipsum</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 42,\n        \"journal_id\": null,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": null,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"author_id\": 11,\n        \"date\": \"2017-11-02\",\n        \"type\": \"Session\",\n        \"calendar_id\": 102,\n        \"calendar_year\": 2020,\n        \"calendar_month\": 3,\n        \"calendar_day\": 2,\n        \"calendar_event_length\": 3,\n    }\n\n}\n```\n\n\n<a name=\"create-journal\"></a>\n## Create a Journal\n\nTo create a journal, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `journals` | Default |\n\n### Body\n\n| Parameter | Type | Detail                                                                  |\n| :- |   :-   |:------------------------------------------------------------------------|\n| `name` | `string` (Required) | Name of the journal                                                     |\n| `entry` | `string` | The html description of the journal                                     |\n| `type` | `string` | The journal's type                                                      |\n| `date` | `string` | The date of the session                                                 |\n| `journal_id` | `integer` | The ID of the journal's parent journal, if it has one                   |\n| `author_id` | `integer` | The \"author\" of the journal (entity id)                                 |\n| `tags` | `array` | Array of tag ids                                                        |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The journal's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the journal is only visible to `admin` members of the campaign       |\n### Results\n\n> {success} Code 200 with JSON body of the new journal.\n\n\n<a name=\"update-journal\"></a>\n## Update a Journal\n\nTo update a journal, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `journals/{journal.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a journal.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated journal.\n\n\n<a name=\"delete-journal\"></a>\n## Delete a Journal\n\nTo delete a journal, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `journals/{journal.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/locations.md",
    "content": "# Locations\n\n---\n\n- [All Locations](#all-locations)\n\n- [Single Location](#location)\n- [Create a Location](#create-location)\n- [Update a Location](#update-location)\n- [Delete a Location](#delete-location)\n\n<a name=\"all-locations\"></a>\n## All Locations\n\nYou can get a list of all the locations of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `locations` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Mordor\",\n            \"title\": \"The Dark Land\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"status_id\": 1,\n            \"is_private\": true,\n            \"location_id\": null,\n            \"entity_id\": 5,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"location_id\": 4,\n            \"type\": \"Kingdom\"\n        }\n    ]\n}\n```\n\n\n<a name=\"location\"></a>\n## Location\n\nTo get the details of a single location, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `locations/{location.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Mordor\",\n        \"title\": \"The Dark Land\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"status_id\": 1,\n        \"is_private\": true,\n        \"location_id\": null,\n        \"entity_id\": 5,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"location_id\": 4,\n        \"type\": \"Kingdom\"\n    }\n\n}\n```\n\n\n<a name=\"create-location\"></a>\n## Create a Location\n\nTo create a location, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `locations` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the location |\n| `title` | `string` | Title of the location |\n| `entry` | `string` | The html description of the location |\n| `type` | `string` | Type of location |\n| `location_id` | `integer` | The parent location id (where this location is located)|\n| `tags` | `array` | Array of tag ids |\n| `status_id` | `integer` | The id of the entity's status from `category_statuses` |\n| `is_private` | `boolean` | If the location is only visible to `admin` members of the campaign |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The location's tooltip (premium campaign feature)                   |\n\n\n### Results\n\n> {success} Code 200 with JSON body of the new location.\n\n\n<a name=\"update-location\"></a>\n## Update a Location\n\nTo update a location, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `locations/{location.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a location.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated location.\n\n\n<a name=\"delete-location\"></a>\n## Delete a Location\n\nTo delete a location, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `locations/{location.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/map_groups.md",
    "content": "# Map Groups\n\n---\n\n- [All Map Groups](#all-map-groups)\n- [Create a Map Group](#create-map-group)\n- [Update a Map Group](#update-map-group)\n- [Delete a Map Group](#delete-map-group)\n\n<a name=\"all-map-groups\"></a>\n## All Map-groups\n\nYou can get a list of all the map-groups of a map by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `maps/{map.id}/map_groups` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"created_at\": \"2020-07-25T16:24:34.000000Z\",\n            \"created_by\": 1,\n            \"id\": 3,\n            \"parent_id\": 43,\n            \"is_private\": false,\n            \"is_shown\": true,\n            \"map_id\": 1,\n            \"name\": \"Spoon\",\n            \"position\": 1,\n            \"updated_at\": \"2020-07-25T16:24:34.000000Z\",\n            \"updated_by\": null,\n            \"visibility_id\": 1\n        }\n    ]\n}\n```\n\n\n<a name=\"create-map-group\"></a>\n## Create a Map Group\n\nTo create a map group, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `maps/{map.id}/map-groups` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required without `entity_id`) | Name of the map group |\n| `map_id` | `int` (Required) | The parent map |\n| `parent_id` | `int` | The parent map group, must be different than self |\n| `is_shown` | `boolean` | If the layer is shown on map load |\n| `position` | `int` | Position in the list of groups |\n| `visibility_id` | `integer` | The visibility: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new map.\n\n\n<a name=\"update-map-group\"></a>\n## Update a Map Group\n\nTo update a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `maps/{map.id}/map-groups/{map.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a map.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated map.\n\n\n<a name=\"delete-map-group\"></a>\n## Delete a Map Group\n\nTo delete a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `maps/{map.id}/map-groups/{map.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/map_layers.md",
    "content": "# Map Layers\n\n---\n\n- [All Map Layers](#all-map-layers)\n- [Create a Map Layer](#create-map-layer)\n- [Update a Map Layer](#update-map-layer)\n- [Delete a Map Layer](#delete-map-layer)\n\n<a name=\"all-map-layers\"></a>\n## All Map-layers\n\nYou can get a list of all the map-layers of a map by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `maps/{map.id}/map_layers` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"created_at\": \"2020-07-03T14:12:45.000000Z\",\n            \"created_by\": 1,\n            \"height\": 1080,\n            \"id\": 2,\n            \"is_private\": false,\n            \"map_id\": 1,\n            \"name\": \"Prague\",\n            \"position\": 0,\n            \"type\": \"standard\",\n            \"type_id\": false,\n            \"updated_at\": \"2020-07-03T14:12:45.000000Z\",\n            \"updated_by\": null,\n            \"visibility_id\": 1,\n            \"width\": 1920\n        }\n    ]\n}\n```\n\n\n<a name=\"create-map-layer\"></a>\n## Create a Map Layer\n\nTo create a map layer, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `maps/{map.id}/map-layers` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required without `entity_id`) | Name of the map layer |\n| `map_id` | `int` (Required) | The parent map |\n| `image_url` | `string` (Required without `image`) | URL to a picture to be used for the map |\n| `entry` | `string` | Entry of the layer |\n| `type_id` | `int` | `null` and 0 for `standard`, 1 for `overlay`, 2 for `overlay_shown` |\n| `position` | `int` | Position in the list of layers |\n| `visibility_id` | `integer` | The visibility: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new map.\n\n\n<a name=\"update-map-layer\"></a>\n## Update a Map Layer\n\nTo update a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `maps/{map.id}/map-layers/{map.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a map.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated map.\n\n\n<a name=\"delete-map-layer\"></a>\n## Delete a Map Layer\n\nTo delete a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `maps/{map.id}/map-layers/{map.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/map_markers.md",
    "content": "# Map Markers\n\n---\n\n- [All Map Markers](#all-map-markers)\n- [Create a Map Marker](#create-map-marker)\n- [Update a Map Marker](#update-map-marker)\n- [Delete a Map Marker](#delete-map-marker)\n\n<a name=\"all-map-markers\"></a>\n## All Map-markers\n\nYou can get a list of all the map-markers of a map by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `maps/{map.id}/map_markers` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"circle_radius\": null,\n            \"colour\": \"#008000\",\n            \"created_at\": \"2020-07-25T10:10:30.000000Z\",\n            \"created_by\": null,\n            \"custom_icon\": null,\n            \"custom_shape\": \"500,500 500,600, 600,600 600,500\",\n            \"entity_id\": null,\n            \"font_colour\": null,\n            \"icon\": \"1\",\n            \"id\": 31,\n            \"is_draggable\": false,\n            \"is_private\": false,\n            \"is_popupless\": false,\n            \"latitude\": \"422.857\",\n            \"longitude\": \"499.000\",\n            \"map_id\": 2,\n            \"name\": \"Shape\",\n            \"opacity\": 100,\n            \"polygon_style\": array,\n            \"shape_id\": 5,\n            \"size_id\": 1,\n            \"updated_at\": \"2020-07-25T10:10:30.000000Z\",\n            \"updated_by\": null,\n            \"visibility_id\": 1,\n            \"css\": \"bright\"\n        }\n    ]\n}\n```\n\n\n<a name=\"create-map-marker\"></a>\n## Create a Map Marker\n\nTo create a map marker, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `maps/{map.id}/map_markers` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required without `entity_id`) | Name of the map marker |\n| `entity_id` | `string` (Required without `name`) | Entity linked to the map marker |\n| `map_id` | `integer` (Required) | The parent map |\n| `latitude` | `float` (Required) | Latitude of the marker |\n| `longitude` | `float` (Required) | Longitude of the marker |\n| `shape_id` | `int` (Required) | Shape of the marker (`1` for Marker, `2` for Label, `3` for Circle, `4` for Polygon) |\n| `icon` | `int` (Required) | `1` for Marker, `2` for Exclamation, `3` for Interrogation, `4` for Entity |\n| `group_id` | `int` | ID of the marker group |\n| `is_draggable` | `boolean` | If the marker is draggable on the map |\n| `is_popupless` | `boolean` | Disable the marker tooltip popping up on mouse hover |\n| `custom_shape` | `string` | Polygon coordinates |\n| `custom_icon` | `string` | HTML of the custom icon |\n| `size_id` | `int` | 1 to 6 for size (used by circles, 6 being custom) |\n| `opacity` | `int` | 0 to 100 opacity |\n| `visibility_id` | `integer` | The visibility: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n| `colour` | `string` | Hex colour code with leading `#` |\n| `font_colour` | `string` | Hex colour code with leading `#` |\n| `circle_radius` | `null` or `int` | If the shape_id is 3 (circle) and size_id is 6 (cursom), can provide a custom circle radius size |\n| `polygon_style` | `null` or `array` | Polygon rendering options include `stroke`, `stroke-width` and `stroke-opacity` |\n| `css` | `string` | A custom css class for the map marker |\n\n\n### Results\n\n> {success} Code 200 with JSON body of the new map.\n\n\n<a name=\"update-map-marker\"></a>\n## Update a Map Marker\n\nTo update a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `maps/{map.id}/map_markers/{map.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a map.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated map.\n\n\n<a name=\"delete-map-marker\"></a>\n## Delete a Map Marker\n\nTo delete a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `maps/{map.id}/map_markers/{map.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/maps.md",
    "content": "# Maps\n\n---\n\n- [All Maps](#all-maps)\n- [Single Map](#map)\n- [Create a Map](#create-map)\n- [Update a Map](#update-map)\n- [Delete a Map](#delete-map)\n\n<a name=\"all-maps\"></a>\n## All Maps\n\nYou can get a list of all the maps of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `maps` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Pelor's Map\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"entry_parsed\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"is_real\": false,\n            \"entity_id\": 164,\n            \"tags\": [],\n            \"created_at\":  \"2020-09-18T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2020-09-18T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"location_id\": 4,\n            \"type\": \"Continent\",\n            \"height\": 1080,\n            \"width\": 1920,\n            \"map_id\": null,\n            \"grid\": 0,\n            \"min_zoom\": -1,\n            \"max_zoom\": 10,\n            \"initial_zoom\": -1,\n            \"center_marker_id\": null,\n            \"center_x\": null,\n            \"center_y\": null,\n            \"layers\": \"<array of map Map Layers>\",\n            \"groups\": \"<array of map Map Groups>\"\n        }\n    ]\n}\n```\n\n\n<a name=\"map\"></a>\n## Map\n\nTo get the details of a single map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `maps/{map.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Pelor's Map\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"entry_parsed\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"is_real\": false,\n        \"entity_id\": 164,\n        \"tags\": [],\n        \"created_at\":  \"2020-09-18T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2020-09-18T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"location_id\": 4,\n        \"type\": \"Continent\",\n        \"height\": 1080,\n        \"width\": 1920,\n        \"map_id\": null,\n        \"grid\": 0,\n        \"min_zoom\": -1,\n        \"max_zoom\": 10,\n        \"initial_zoom\": -1,\n        \"center_marker_id\": null,\n        \"center_x\": null,\n        \"center_y\": null,\n        \"layers\": \"<array of map Map Layers>\",\n        \"groups\": \"<array of map Map Groups>\"\n    }\n\n}\n```\n\n<a name=\"create-map\"></a>\n## Create a Map\n\nTo create a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `maps` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the map |\n| `entry` | `string` | The html description of the map |\n| `type` | `string` | Type of map |\n| `map_id` | `integer` | The parent map |\n| `location_id` | `integer` | The related location id |\n| `center_marker_id` | `integer` | The map marker the map will center on page load |\n| `center_x` | `float` | The custom longitude on page load |\n| `center_y` | `float` | The custom latitude on page load |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The map's tooltip (premium campaign feature)                   |\n| `is_real` | `boolean` | If the map uses openmaps (the real world) |\n| `is_private` | `boolean` | If the map is only visible to `admin` members of the campaign |\n\n### Results\n\n> {success} Code 200 with JSON body of the new map.\n\n\n<a name=\"update-map\"></a>\n## Update a Map\n\nTo update a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `maps/{map.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a map.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated map.\n\n\n<a name=\"delete-map\"></a>\n## Delete a Map\n\nTo delete a map, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `maps/{map.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/misc/filters.md",
    "content": "# Filters\n\nThe various entity endpoints like `/characters`, `/locations` etc support many filters.\n\nTo get a list of filters, first call `/filters` to get the endpoint for each [entity type](/api-docs/{{version}}/entity-types.md).\n\n| Method | URI                   | Headers |\n| :- |:----------------------|  :-  |\n| GET/HEAD | `{{version}}/filters` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"code\": \"character\",\n            \"url\": \".../filters/1\"\n        },\n        {\n            \"code\": \"family\",\n            \"url\": \".../filters/2\"\n        },\n    ]\n}\n```\n\n## Filtering\n\nYou can add filters to multiple endpoints, to do so you can add the fields you wish to keep separated by commas under the fields key to the query, note that this feature works when viewing a single of most entity types and entities.\n\n| Method | URI                   | Headers |\n| :- |:----------------------|  :-  |\n| GET/HEAD | `...entities/{entity.id}?fields=id,name,type...` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1324,\n        \"name\": \"War on a death world\",\n        \"type\": \"Global conflict\",\n    }\n}\n```\n\n\n## Character filters\n\nTo get a list of available filters for the characters endpoint, call the following endpoint.\n\n\n| Method | URI               | Headers |\n| :- |:------------------|  :-  |\n| GET/HEAD | `{{version}}/filters/1` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        \"title\",\n        \"age\",\n        \"sex\",\n        \"pronouns\",\n        \"location_id\",\n        \"is_dead\",\n        \"member_id\",\n        \"race_id\",\n        \"family_id\",\n        \"races\",\n        \"name\",\n        \"type\",\n        \"is_private\",\n        \"template\",\n        \"tag_id\",\n        \"tags\",\n        \"has_image\",\n        \"has_posts\",\n        \"has_entity_files\",\n        \"has_attributes\",\n        \"created_by\",\n        \"updated_by\",\n        \"attribute_name\",\n        \"attribute_value\"\n    ]\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/misc/last-sync.md",
    "content": "# Last Sync\n\n---\n\nInstead of calling the API several times with each execution, it is recommended to cache the results in your application and use the `lastSync` parameter on API calls.\n\n### Saving the last sync time\n\nEach API result on `index` endpoint of entities contain a `sync` attribute. This value is based on the Kanka server times (UTC+0).\n\n```json\n{\n    \"data\": [],\n    \"sync\": \"2020-12-24T19:17:42.207577Z\",\n    \"links\": {\n    },\n    \"meta\": {\n    }\n}\n```\n\n### lastSync Parameter\n\nWhen calling an `index` enpoint, for example the `items` endpoint, you can provide the `lastSync` parameter and only get items which have been changed since your last call.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `items/?lastSync=2019-03-21T19:17:42.207577Z` | Default |\n\n### Results\n\n```json\n{\n    \"data\": [\n        {\n            \"id\": \"4\",\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\"\n        }\n    ],\n    \"sync\": \"2020-12-24T19:32:42.222036Z\",\n    \"links\": {\n    },\n    \"meta\": {\n    }\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/misc/pagination.md",
    "content": "# Pagination\n\n---\n\nAll endpoint which give a list of entities are automatically paginated. For example, when asking for all [Locations](/api-docs/{{version}}/locations) of a campaign, 15 locations are sent back. A `links` property in the response give you information about the pagination options.\n\n```json\n{\n  \"data\": [\n      // up to 15 locations\n  ],\n   \"links\": {\n        \"first\": \"/{{version}}/campaigns/123/locations?page=1\",\n        \"last\": \"/{{version}}/campaigns/123/locations?page=5\",\n        \"prev\": null,\n        \"next\": \"/{{version}}/campaigns/123/locations?page=2\"\n    }\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/misc/permissions-test.md",
    "content": "# Permission Tests\n\n---\n\n- [Test Permissions](#test-permissions)\n\n\n<a name=\"test-permissions\"></a>\n## Test Permissions\n\nYou can test a campaign user's permissions for an entity or an entity type by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `permissions/test` | Default |\n\n\n### Body\n\nA JSON body containing multiple objects.\n\n```\n[\n    {\n        //Read a specific entity\n        \"user_id\": 3,\n        \"entity_id\": 52,\n        \"action\": 1\n    },\n    {\n        // Create a new character\n        \"user_id\": 3,\n        \"entity_type_id\": 1,\n        \"action\": 3\n    }\n]\n```\n\n| Parameter | Type | Details |\n| :- |   :-   |  :-  |\n| `user_id` | `integer` | The ID number of the user |\n| `entity_type_id` | `integer` | The ID of the entity type, required only when there's no `entity_id` |\n| `entity_id` | `integer` | The entity's ID, required only when there's no `entity_type_id` |\n| `action` | `integer` | ID of the action to test |\n\n### Actions\n\n| Action | Details |\n| :- |  :-  |\n| `1` | The user is able to `read` the entity/entity type  |\n| `2` | The user is able to `edit` the entity/entity type  |\n| `3` | The user is able to `create` the entity type |\n| `4` | The user is able to `delete` the entity/entity type |\n\n\n### Results\n\n```json\n{\n    \"data\": [\n        {\n            \"entity_type_id\": 1,\n            \"entity_id\": 273,\n            \"user_id\": 30,\n            \"action\": 2,\n            \"can\": 1\n        },\n        {\n            \"entity_type_id\": 1,\n            \"entity_id\": 273,\n            \"user_id\": 30,\n            \"action\": 1,\n            \"can\": 1\n        },\n        {\n            \"entity_type_id\": 1,\n            \"entity_id\": null,\n            \"user_id\": 30,\n            \"action\": 1,\n            \"can\": false\n        }\n    ],\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/misc/visibilities.md",
    "content": "# Visibilities\n\n---\n\n- [Concept](#concept)\n- [Endpoint](#endpoint)\n\n<a name=\"concept\"></a>\n## Concept\n\nMost elements in Kanka that aren't [entities](/api-docs/{{version}}/entities) have a `visiblity_id` property, which indicates who can see the element.\n\n| Integer | Code | Description |\n| :- |   :-   |  :-  |\n| `1` | `all` | Everyone can access this element. |\n| `2` | `admin` | Only members of the campaign's admin role can access this element. |\n| `3` | `admin-self` | Combination of the `admin` and `self` visibilities. |\n| `4` | `self` | Only the user who created the element (`created_by`) can access this element. |\n| `5` | `members` | Only members of the campaign can access this element. Useful for public campaigns. |\n\n<a name=\"endpoint\"></a>\n### Endpoint\n\n> {warning} Please note that all endpoints documented here need to be prefixed with `{{version}}/`. For example, if an endpoint is listed as `visibilities`, you should use `https://api.kanka.io/{{version}}/visibilities`.\n\nTo access the list of visibilities, make the following request.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `visibilities` | None |\n\n"
  },
  {
    "path": "resources/api-docs/1.0/notes.md",
    "content": "# Notes\n\n---\n\n- [All Notes](#all-notes)\n\n- [Single Note](#note)\n- [Create a Note](#create-note)\n- [Update a Note](#update-note)\n- [Delete a Note](#delete-note)\n\n<a name=\"all-notes\"></a>\n## All Notes\n\nYou can get a list of all the notes of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `notes` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Legends of the World\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 7,\n            \"note_id\": null,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"type\": \"Lore\",\n            \"is_pinned\": 0\n        }\n    ]\n}\n```\n\n\n<a name=\"note\"></a>\n## Note\n\nTo get the details of a single note, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `notes/{note.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Legends of the World\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 7,\n        \"note_id\": null,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"type\": \"Lore\",\n        \"is_pinned\": 0\n    }\n\n}\n```\n\n\n<a name=\"create-note\"></a>\n## Create a Note\n\nTo create a note, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `notes` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the note |\n| `entry` | `string` | The html description of the note |\n| `type` | `string` | The note's type |\n| `note_id` | `integer` | The parent note id |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The note's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the note is only visible to `admin` members of the campaign |\n\n### Results\n\n> {success} Code 200 with JSON body of the new note.\n\n\n<a name=\"update-note\"></a>\n## Update a Note\n\nTo update a note, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `notes/{note.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a note.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated note.\n\n\n<a name=\"delete-note\"></a>\n## Delete a Note\n\nTo delete a note, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `notes/{note.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/organisation-members.md",
    "content": "# Organisation Members\n\n---\n\n- [Organisation Members](#organisation-members)\n- [Create an Organisation Member](#create-organisation-member)\n- [Update an Organisation Member](#update-organisation-member)\n- [Delete an Organisation Member](#delete-organisation-member)\n\n\n<a name=\"create-organisation-member\"></a>\n## Create an Organisation Member\n\nTo create an organisation Member, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `organisations/{organisation.id}/organisation_members` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `organisation_id` | `integer` (required) | The organisation id |\n| `character_id` | `integer` (required) | The character id organisation |\n| `role` | `string` | The member's role |\n| `is_private` | `boolean` | If the member is only visible to `admin` members of the campaign |\n| `pin_id` | `integer` | 0, 1 if the member is pinned to the character, 2 if pinned to the org, 3 if both |\n| `status_id` | `integer` | 0 for active member, 1 for past, 2 for unknown |\n| `parent_id` | `integer` | parent organisation member (boss) |\n\n### Results\n\n> {success} Code 200 with JSON body of the new organisation.\n\n\n<a name=\"update-organisation-member\"></a>\n## Update a Organisation\n\nTo update a organisation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `organisations/{organisation.id}/organisation_members/{organisation-member.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating an organisation member.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated organisation.\n\n\n<a name=\"delete-organisation-member\"></a>\n## Delete an Organisation Member\n\nTo delete an organisation member, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `/{organisation.id}/organisation_members/{organisation-member.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/organisations.md",
    "content": "# Organisations\n\n---\n\n- [All Organisations](#all-organisations)\n\n- [Single Organisation](#organisation)\n- [Organisation Members](#organisation-members)\n- [Create an organisation](#create-organisation)\n- [Update an organisation](#update-organisation)\n- [Delete an organisation](#delete-organisation)\n\n<a name=\"all-organisations\"></a>\n## All Organisations\n\nYou can get a list of all the organisations of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `organisations` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Tiamat Cultists\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 5,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"organisation_id\": 4,\n            \"type\": \"Kingdom\",\n            \"status_id\": 1,\n            \"members\": [],\n            \"locations\": [\n                67,\n                66,\n                65\n            ]\n        }\n    ]\n}\n```\n\n<a name=\"organisation\"></a>\n## Organisation\n\nTo get the details of a single organisation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `organisations/{organisation.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Tiamat Cultists\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 5,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"organisation_id\": 4,\n        \"type\": \"Kingdom\",\n        \"status_id\": 1,\n        \"members\": [],\n        \"locations\": [\n                67,\n                66,\n                65\n        ]\n    }\n\n}\n```\n\n\n<a name=\"organisation-members\"></a>\n## Organisation Members\n\nTo get the members of an organisation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `organisations/{organisation.id}/organisation_members` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"character_id\": 11,\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"id\": 6,\n        \"is_private\": false,\n        \"organisation_id\": 1,\n        \"role\": \"Leader\",\n        \"pin_id\": null,\n        \"status_id\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1\n    }\n}\n```\n\n> {info} Adding (`POST`), Updating (`PUT`, `PATCH`) and Deleting (`DELETE`) a member from an organisation can also be done using the same patterns as for other endpoints.\n\n\n<a name=\"create-organisation\"></a>\n## Create an organisation\n\nTo create an organisation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `organisations` | Default |\n\n### Body\n\n| Parameter | Type | Detail                                                                 |\n| :- |   :-   |:-----------------------------------------------------------------------|\n| `name` | `string` (Required) | Name of the organisation                                               |\n| `entry` | `string` | The html description of the organisation                               |\n| `type` | `string` | Type of organisation                                                   |\n| `organisation_id` | `integer` | The parent organisation                                                |\n| `locations` | `array` | Array of location ids                                                  |\n| `tags` | `array` | Array of tag ids                                                       |\n| `status_id` | `integer` | The id of the entity's status from `category_statuses`                 |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature)    |\n| `tooltip`            | `string` | The organisation's tooltip (premium campaign feature)                  |\n| `is_private` | `boolean` | If the organisation is only visible to `admin` members of the campaign |\n| `locations` | `array` | Array of locations.ids to attach to the organisation.                  |\n\n### Results\n\n> {success} Code 200 with JSON body of the new organisation.\n\n\n<a name=\"update-organisation\"></a>\n## Update an organisation\n\nTo update an organisation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `organisations/{organisation.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating an organisation.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated organisation.\n\n\n<a name=\"delete-organisation\"></a>\n## Delete an organisation\n\nTo delete an organisation, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `organisations/{organisation.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/overview.md",
    "content": "# Overview\n\nAPI documentation for Kanka\n\n---\n\n- [Welcome](#welcome)\n- [Key Concepts](#key-concepts)\n\n<a name=\"welcome\"></a>\n## Welcome\n\nWelcome to the Kanka's API documentation. Kanka is a free online worldbuilding and RPG campaign management tool. The primary aim of this documentation is to provide context for the Kanka REST API.\n\n<a name=\"key-concepts\"></a>\n## Key Concepts\n\nKanka revolves around core `entities`. These are `characters`, `locations`, `items` and so forth.\n\nThe API mostly follows the REST principles with some variation which is described in each document.\n\n---\nNext up: [Setup](/api-docs/{{version}}/setup)\n"
  },
  {
    "path": "resources/api-docs/1.0/post-layout.md",
    "content": "# Posts\n\n---\n\n- [All Post Layouts](#post-layouts)\n\n<a name=\"post-layouts\"></a>\n## All Post Layouts\n\nYou can get a list of all the available post layouts by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `post-layouts` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"code\": \"abilities\",\n            \"entity_type_id\": null,\n            \"config\": null\n        },\n        {\n            \"id\": 2,\n            \"code\": \"assets\",\n            \"entity_type_id\": null,\n            \"config\": null\n        }\n    ]\n}\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/profile.md",
    "content": "# Profile\n\n---\n\nThe following endpoint provides simple data about the current user.\n\n\n| Method | URI                   | Headers |\n| :- |:----------------------|  :-  |\n| GET/HEAD | `{{version}}/profile` | Default |\n\n### Results\n\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"User Name\",\n        \"avatar\": \"{url}\",\n        \"avatar_thumb\": \"{40x40 url}\",\n        \"locale\": \"en\",\n        \"timezone\": \"UTC\",\n        \"date_format\": \"d.m.Y\",\n        \"default_pagination\": 15,\n        \"last_campaign_id\": 1,\n        \"is_subscriber\": true,\n        \"rate_limit\": 30\n    }\n}\n```\n\n---\nNext up: [Campaigns](/api-docs/{{version}}/campaigns)\n"
  },
  {
    "path": "resources/api-docs/1.0/quests.md",
    "content": "# Quests\n\n---\n\n- [All Quests](#all-quests)\n\n- [Single Quest](#quest)\n- [Quest Elements](#quest-elements)\n- [Create a Quest](#create-quest)\n- [Update a Quest](#update-quest)\n- [Delete a Quest](#delete-quest)\n\n<a name=\"all-quests\"></a>\n## All Quests\n\nYou can get a list of all the quests of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `quests` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Pelor's Quest\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 164,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"date\": \"2020-04-20\",\n            \"type\": \"Main\",\n            \"status_id\": null,\n            \"quest_id\": null,\n            \"elements\": [],\n            \"calendar_id\": 102,\n            \"calendar_year\": 2020,\n            \"calendar_month\": 3,\n            \"calendar_day\": 2,\n            \"calendar_event_length\": 3,\n        }\n    ]\n}\n```\n\n<a name=\"quest\"></a>\n## Quest\n\nTo get the details of a single quest, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `quests/{quest.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Pelor's Quest\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"instigator_id\": null,\n        \"location_id\": null,\n        \"entity_id\": 164,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"type\": \"Main\",\n        \"date\": \"2020-04-20\",\n        \"status_id\": null,\n        \"quest_id\": null,\n        \"elements\": [],\n        \"calendar_id\": 102,\n        \"calendar_year\": 2020,\n        \"calendar_month\": 3,\n        \"calendar_day\": 2,\n        \"calendar_event_length\": 3,\n    }\n\n}\n```\n\n<a name=\"quest-elements\"></a>\n## Quest Elements\n\nTo get the elements of a quest, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `quests/{quest.id}/quest_elements` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"entity_id\": 33,\n        \"name\": null,\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": null,\n        \"instigator_id\": null,\n        \"location_id\": null,\n        \"role\": \"Target\",\n        \"description\": \"Lorem Ipsum\",\n        \"description_parsed\": \"Lorem Ipsum\",\n        \"id\": 2,\n        \"visibility_id\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": null\n    }\n}\n```\n\n> {info} Adding (`POST`), Updating (`PUT`, `PATCH`) and Deleting (`DELETE`) an element from a quest can also be done using the same patterns as for other endpoints.\n>\n> The `entity_id` or `name` field has to be provided when creating a quest element.\n\n\n<a name=\"create-quest\"></a>\n## Create a Quest\n\nTo create a quest, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `quests` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the quest |\n| `entry` | `string` | The html description of the quest |\n| `type` | `string` | Type of quest |\n| `quest_id` | `integer` | The parent quest |\n| `instigator_id` | `integer` | The quest's instigator (entity) |\n| `location_id` | `integer` | The quest's starting location (location) |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The quest's tooltip (premium campaign feature)                   |\n| `status_id` | `integer` | The id of the entity's status from `category_statuses` |\n| `is_private` | `boolean` | If the quest is only visible to `admin` members of the campaign |\n\n### Results\n\n> {success} Code 200 with JSON body of the new quest.\n\n\n<a name=\"update-quest\"></a>\n## Update a Quest\n\nTo update a quest, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `quests/{quest.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a quest.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated quest.\n\n\n<a name=\"delete-quest\"></a>\n## Delete a Quest\n\nTo delete a quest, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `quests/{quest.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/races.md",
    "content": "# Races\n\n---\n\n- [All Races](#all-races)\n\n- [Single Race](#race)\n- [Create a Race](#create-race)\n- [Update a Race](#update-race)\n- [Delete a Race](#delete-race)\n\n<a name=\"all-races\"></a>\n## All Races\n\nYou can get a list of all the races of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `races` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Goblin\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 7,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"race_id\": 3,\n            \"type\": null,\n            \"status_id\": 1,\n            \"locations\": [\n                67,\n                66,\n                65\n            ]\n        }\n    ]\n}\n```\n\n<a name=\"race\"></a>\n## Race\n\nTo get the details of a single race, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `races/{race.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Goblin\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 7,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"race_id\": 3,\n        \"type\": \"Humanoid\",\n        \"status_id\": 1,\n        \"locations\": [\n            67,\n            66,\n            65\n        ]\n    }\n\n}\n```\n\n\n<a name=\"create-race\"></a>\n## Create a Race\n\nTo create a race, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `races` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the race |\n| `entry` | `string` | The html description of the race |\n| `type` | `string` | The race's type |\n| `status_id` | `integer` | The id of the entity's status from `category_statuses` |\n| `race_id` | `string` | Parent race of the race |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The race's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the race is only visible to `admin` members of the campaign |\n| `locations` | `array` | Array of locations.ids to attach to the race. |\n\n### Results\n\n> {success} Code 200 with JSON body of the new race.\n\n\n<a name=\"update-race\"></a>\n## Update a Race\n\nTo update a race, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `races/{race.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a race.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated race.\n\n\n<a name=\"delete-race\"></a>\n## Delete a Race\n\nTo delete a race, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `races/{race.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/relations.md",
    "content": "# Relations\n\nFind the documentation under the [Connections](/api-docs/{{version}}/entities/connections) page.\n"
  },
  {
    "path": "resources/api-docs/1.0/search.md",
    "content": "# Search\n\n---\n\nA search API is available at the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET | `search/{search_term}` | Default |\n\n### Results\n\n```json\n    {\n        \"data\": [\n            {\n                \"id\": 5,\n                \"entity_id\": 1,\n                \"name\": \"Tyrion Lannister\",\n                \"image\": \"{url}\",\n                \"image_thumb\": \"{url}\",\n                \"type\": \"character\",\n                \"tooltip\": \"Lorem Ipsum\",\n                \"url\": \"{url}\",\n                \"is_private\": false,\n                \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n                \"created_by\": null,\n                \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n                \"updated_by\": null\n            }\n        ]\n    }\n```\n"
  },
  {
    "path": "resources/api-docs/1.0/setup.md",
    "content": "# Setup\n\n---\n\n- [API Request](#request)\n- [Authentication](#authentication)\n- [Endpoints](#endpoints)\n\n<a name=\"request\"></a>\n## API Request\n\nBefore you can start interacting with the Kanka API, you need to generate a Key by navigating to your [Profile > API](https://app.kanka.io/settings/api) page in the app to generate a `key`.\n\n> {warning} Tokens are valid for 365 days, after which they still show up in your keys but are no longer valid. Never share your tokens with anyone, not even the Kanka team!\n\n\n<a name=\"authentication\"></a>\n## Authentication\n\nEach request to the api requires an `oAuth 2.0` token to identify the user. Tokens can be generated in the user's [profile page](/settings/api).\n\nWhen calling the API, add the following headers:\n\n```json\n    Authorization: Bearer user_token_here\n    Content-type: application/json\n```\n\n<a name=\"endpoints\"></a>\n### Endpoints\n\n> {warning} Please note that all endpoints documented here need to be prefixed with `{{version}}/`. For example, if an endpoint is listed as `campaigns`, you should use `https://api.kanka.io/{{version}}/campaigns`.\n\n### Throttling\n\nThe API is set up to allow a maximum of `30` requests per minute per client. When you exceed this limit, you will be greeted with a `429` error code.\n\n[Subscribers](https://kanka.io/pricing) automatically get their limit increased to `90` requests per minute per client..\n\n---\nNext up: [Profile](/api-docs/{{version}}/profile)\n"
  },
  {
    "path": "resources/api-docs/1.0/tags.md",
    "content": "# Tags\n\n---\n\n- [All Tags](#all-tags)\n\n- [Single Tag](#tag)\n- [Create a Tag](#create-tag)\n- [Update a Tag](#update-tag)\n- [Delete a Tag](#delete-tag)\n\n<a name=\"all-tags\"></a>\n## All Tags\n\nYou can get a list of all the tags of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `tags` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Religion\",\n            \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": true,\n            \"entity_id\": 11,\n            \"tags\": [],\n            \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n            \"updated_by\": 1,\n            \"type\": \"Lore\",\n            \"tag_id\": null,\n            \"colour\": \"#058943\",\n            \"entities\": [\n              352,\n              440\n            ],\n            \"is_auto_applied\": false,\n            \"is_hidden\": false\n\n        }\n    ]\n}\n```\n\n<a name=\"tag\"></a>\n## Tag\n\nTo get the details of a single tag, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `tags/{tag.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Religion\",\n        \"entry\": \"\\n<p>Lorem Ipsum.</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": true,\n        \"entity_id\": 11,\n        \"tags\": [],\n        \"created_at\":  \"2019-01-30T00:01:44.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\":  \"2019-08-29T13:48:54.000000Z\",\n        \"updated_by\": 1,\n        \"type\": \"Lore\",\n        \"colour\": \"#058943\",\n        \"tag_id\": null,\n        \"entities\": [\n          352, 440\n        ],\n        \"is_auto_applied\": false,\n        \"is_hidden\": false\n\n    }\n\n}\n```\n\n\n<a name=\"create-tag\"></a>\n## Create a Tag\n\nTo create a tag, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `tags` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the tag |\n| `entry` | `string` | The html description of the tag |\n| `type` | `string` | The tag's type |\n| `colour` | `string` | The tag's hex colour (e.g. `#058943`) |\n| `tag_id` | `integer` | The parent tag |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The tag's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the tag is only visible to `admin` members of the campaign |\n| `is_auto_applied` | `boolean` | If the tag is automatically applied to new entities in the campaign |\n| `is_hidden` | `boolean` | If the tag won't be displayed in an entity's header or tooltip |\n### Results\n\n> {success} Code 200 with JSON body of the new tag.\n\n\n<a name=\"update-tag\"></a>\n## Update a Tag\n\nTo update a tag, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `tags/{tag.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a tag.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated tag.\n\n\n<a name=\"delete-tag\"></a>\n## Delete a Tag\n\nTo delete a tag, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `tags/{tag.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/timeline-elements.md",
    "content": "# Timelines Elements\n\n---\n\n- [All Timeline Elements](#all-timeline-elements)\n- [Single Timeline Element](#timeline-element)\n- [Create a Timeline Element](#create-timeline-element)\n- [Update a Timeline Element](#update-timeline-element)\n- [Delete a Timeline Element](#delete-timeline-element)\n\n<a name=\"all-timeline-elements\"></a>\n## All Timeline Elements\n\nYou can get a list of all the element effects of a timeline by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `timelines/{timeline.id}/timeline_elements` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"timeline_id\": 1,\n            \"era_id\": 1,\n            \"name\": \"Kemali Uprising\",\n            \"entity_id\": 56,\n            \"entry\": \"...\",\n            \"entry_parsed\": \"...\",\n            \"date\": \"3rd of Appen 114\",\n            \"colour\": \"blue\",\n            \"position\": 1,\n            \"visibilility_id\": 1,\n            \"created_by\": 1,\n            \"created_at\": \"2020-08-05 14:32:59\",\n            \"updated_at\": \"2020-08-05 14:33:22\"\n        }\n    ],\n    \"links\": {\n        \"first\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines/1/timeline_elements?page=1\",\n        \"last\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines/1/timeline_elements?page=1\",\n        \"prev\": null,\n        \"next\": null\n    },\n    \"meta\": {\n        \"current_page\": 1,\n        \"from\": 1,\n        \"last_page\": 1,\n        \"path\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines/1/timeline_elements\",\n        \"per_page\": 15,\n        \"to\": 1,\n        \"total\": 1\n    }\n}\n```\n\n\n<a name=\"timeline-element\"></a>\n## Timeline Element\n\nTo get the details of a single element effect, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `timelines/{timeline.id}/timeline_elements/{timeline_element.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"timeline_id\": 1,\n        \"era_id\": 1,\n        \"name\": \"Kemali Uprising\",\n        \"entity_id\": 56,\n        \"entry\": \"...\",\n        \"entry_parsed\": \"...\",\n        \"date\": \"3rd of Appen 114\",\n        \"colour\": \"blue\",\n        \"position\": 1,\n        \"visibilility_id\": 1,\n        \"created_by\": 1,\n        \"created_at\": \"2020-08-05 14:32:59\",\n        \"updated_at\": \"2020-08-05 14:33:22\"\n    }\n\n}\n```\n\n\n<a name=\"create-timeline-element\"></a>\n## Create a Timeline Element\n\nTo create a timeline element, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `timelines/{timeline.id}/timeline_elements` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required if no entity) | Name of the element |\n| `entity_id` | `int` (Required if no name) | Entity ID |\n| `era_id` | `int` (Required) | Timeline Era ID |\n| `entry` | `string` | Entry of the element |\n| `date` | `string` | Date of the element |\n| `colour` | `string` | Colour of the element |\n| `position` | `int` | Position in the list of elements of the era |\n| `visibility_id` | `int` | The visibility ID: 1 for `all`, 2 `self`, 3 `admin`, 4 `self-admin` or 5 `members`. |\n\n\n### Results\n\n> {success} Code 200 with JSON body of the new timeline element.\n\n\n<a name=\"update-timeline-element\"></a>\n## Update a Timeline Element\n\nTo update a timeline, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `timelines/{timeline.id}/timeline_elements/{timeline_element.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a timeline element.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated timeline element.\n\n\n<a name=\"delete-timeline-element\"></a>\n## Delete a Timeline Element\n\nTo delete a timeline element, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `timelines/{timeline.id}/timeline_elements/{timeline_element.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/timeline-eras.md",
    "content": "# Timelines Eras\n\n---\n\n- [All Timeline Eras](#all-timeline-eras)\n- [Single Timeline Era](#timeline-era)\n- [Create a Timeline Era](#create-timeline-era)\n- [Update a Timeline Era](#update-timeline-era)\n- [Delete a Timeline Era](#delete-timeline-era)\n\n<a name=\"all-timeline-eras\"></a>\n## All Timeline Eras\n\nYou can get a list of all the era effects of a timeline by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `timelines/{timeline.id}/timeline_eras` | Default |\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"timeline_id\": 1,\n            \"name\": \"Anno Domani\",\n            \"abbreviation\": \"AD\",\n            \"start_year\": null,\n            \"end_year\": 0,\n            \"visibility\": \"all\",\n            \"elements\": [],,\n            \"created_by\": 1,\n            \"created_at\": \"2020-08-05 14:32:59\",\n            \"updated_at\": \"2020-08-05 14:33:22\"\n        }\n    ],\n    \"links\": {\n        \"first\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines/1/timeline_eras?page=1\",\n        \"last\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines/1/timeline_eras?page=1\",\n        \"prev\": null,\n        \"next\": null\n    },\n    \"meta\": {\n        \"current_page\": 1,\n        \"from\": 1,\n        \"last_page\": 1,\n        \"path\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines/1/timeline_eras\",\n        \"per_page\": 15,\n        \"to\": 1,\n        \"total\": 1\n    }\n}\n```\n\n\n<a name=\"timeline-era\"></a>\n## Timeline Era\n\nTo get the details of a single era effect, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `timelines/{timeline.id}/timeline_eras/{timeline_era.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 26,\n        \"name\": \"Third era\",\n        \"abbreviation\": null,\n        \"start_year\": null,\n        \"entry\": \"<p>Lorem ipsum dolor sit amet</p>\",\n        \"entry_parsed\": \"<p>Lorem ipsum dolor sit amet</p>\",\n        \"end_year\": null,\n        \"elements\": [],\n        \"is_collapsed\": false,\n        \"position\": 2\n    }\n\n}\n```\n\n\n<a name=\"create-timeline-era\"></a>\n## Create a Timeline Era\n\nTo create a timeline era, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `timelines/{timeline.id}/timeline_eras` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `era` | `string` (Required) | Name of the era |\n| `abbreviation` | `string` | Abbreviation of the era |\n| `start_year` | `integer` | Year the era starts |\n| `end_year` | `integer` | Year the era ends |\n| `visiblity` | `string` | `all`, `admin`, `self` Who can view |\n\n\n### Results\n\n> {success} Code 200 with JSON body of the new timeline era.\n\n\n<a name=\"update-timeline-era\"></a>\n## Update a Timeline Era\n\nTo update a timeline, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `timelines/{timeline.id}/timeline_eras/{timeline_era.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a timeline era.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated timeline era.\n\n\n<a name=\"delete-timeline-era\"></a>\n## Delete a Timeline Era\n\nTo delete a timeline era, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `timelines/{timeline.id}/timeline_eras/{timeline_era.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n"
  },
  {
    "path": "resources/api-docs/1.0/timelines.md",
    "content": "# Timelines\n\n---\n\n- [All Timelines](#all-timelines)\n\n- [Single Timeline](#timeline)\n- [Create a Timeline](#create-timeline)\n- [Update a Timeline](#update-timeline)\n- [Delete a Timeline](#delete-timeline)\n- [Eras](#era)\n- [Elements](#element)\n\n<a name=\"all-timelines\"></a>\n## All Timelines\n\nYou can get a list of all the timelines of a campaign by using the following endpoint.\n\n> {warning} Remember that all endpoints documented here need to be prefixed with `{{version}}/campaigns/{campaign.id}/`.\n\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `timelines` | Default |\n\n### URL Parameters\n\nThe list of returned entities can be filtered. The available filters are [available here](/api-docs/{{version}}/misc/filters)\n\n### Results\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Thaelian Timeline\",\n            \"entry\": \"\\n<p>Lorem Ipsum</p>\\n\",\n            \"image\": \"{path}\",\n            \"image_full\": \"{url}\",\n            \"image_thumb\": \"{url}\",\n            \"has_custom_image\": false,\n            \"is_private\": false,\n            \"entity_id\": 112,\n            \"tags\": [],\n            \"created_at\": \"2019-01-28T06:29:29.000000Z\",\n            \"created_by\": 1,\n            \"updated_at\": \"2020-01-30T17:30:52.000000Z\",\n            \"updated_by\": 1,\n            \"type\": \"Primary\",\n            \"eras\": [\n              {\n                \"name\": \"Anno Domani\",\n                \"abbreviation\": \"AD\",\n                \"start_year\": 0,\n                \"end_year\": null,\n                \"elements\": [],\n                \"position\": 1\n              },\n              {\n                \"name\": \"Before Christ\",\n                \"abbreviation\": \"BC\",\n                \"start_year\": null,\n                \"end_year\": 0,\n                \"elements\": [],\n                \"position\": 2\n\n              }\n            ]\n        }\n    ],\n    \"links\": {\n        \"first\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines?page=1\",\n        \"last\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines?page=1\",\n        \"prev\": null,\n        \"next\": null\n    },\n    \"meta\": {\n        \"current_page\": 1,\n        \"from\": 1,\n        \"last_page\": 1,\n        \"path\": \"https://api.kanka.io/{{version}}/campaigns/1/timelines\",\n        \"per_page\": 100,\n        \"to\": 1,\n        \"total\": 1\n    }\n}\n```\n\n<a name=\"timeline\"></a>\n## Timeline\n\nTo get the details of a single timeline, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| GET/HEAD | `timelines/{timeline.id}` | Default |\n\n### Results\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Thaelian Timeline\",\n        \"entry\": \"\\n<p>Lorem Ipsum</p>\\n\",\n        \"image\": \"{path}\",\n        \"image_full\": \"{url}\",\n        \"image_thumb\": \"{url}\",\n        \"has_custom_image\": false,\n        \"is_private\": false,\n        \"entity_id\": 112,\n        \"tags\": [],\n        \"created_at\": \"2019-01-28T06:29:29.000000Z\",\n        \"created_by\": 1,\n        \"updated_at\": \"2020-01-30T17:30:52.000000Z\",\n        \"updated_by\": 1,\n        \"type\": \"Primary\",\n        \"eras\": [\n          {\n            \"name\": \"Anno Domani\",\n            \"abbreviation\": \"AD\",\n            \"start_year\": 0,\n            \"end_year\": null,\n            \"elements\": [],\n            \"position\": 1\n\n          },\n          {\n            \"name\": \"Before Christ\",\n            \"abbreviation\": \"BC\",\n            \"start_year\": null,\n            \"end_year\": 0,\n            \"elements\": [],\n            \"position\": 1\n\n          }\n        ]\n    }\n\n}\n```\n\n\n<a name=\"create-timeline\"></a>\n## Create a Timeline\n\nTo create a timeline, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| POST | `timelines` | Default |\n\n### Body\n\n| Parameter | Type | Detail |\n| :- |   :-   |  :-  |\n| `name` | `string` (Required) | Name of the timeline |\n| `entry` | `string` | The html description of the timeline |\n| `type` | `string` | The timeline's type |\n| `tags` | `array` | Array of tag ids |\n| `entity_image_uuid` | `string` | Gallery image UUID for the entity image                                 |\n| `entity_header_uuid` | `string` | Gallery image UUID for the entity header (premium campaign feature) |\n| `tooltip`            | `string` | The timeline's tooltip (premium campaign feature)                   |\n| `is_private` | `boolean` | If the timeline is only visible to `admin` members of the campaign |\n\n### Results\n\n> {success} Code 200 with JSON body of the new timeline.\n\n\n<a name=\"update-timeline\"></a>\n## Update a Timeline\n\nTo update a timeline, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| PUT/PATCH | `timelines/{timeline.id}` | Default |\n\n### Body\n\nThe same body parameters are available as for when creating a timeline.\n\n### Results\n\n> {success} Code 200 with JSON body of the updated timeline.\n\n\n<a name=\"delete-timeline\"></a>\n## Delete a Timeline\n\nTo delete a timeline, use the following endpoint.\n\n| Method | URI | Headers |\n| :- |   :-   |  :-  |\n| DELETE | `timelines/{timeline.id}` | Default |\n\n### Results\n\n> {success} Code 200 with JSON.\n\n<a name=\"era\"></a>\n## Timeline Eras\n\nYou can control the era of the timeline with the following docs: [Timeline Era](/api-docs/{{version}}/timeline-eras)\n\n<a name=\"element\"></a>\n## Timeline Elements\n\nYou can control the elements of the timeline with the following docs: [Timeline Element](/api-docs/{{version}}/timeline-elements)\n"
  },
  {
    "path": "resources/api-docs/1.0/troubleshooting.md",
    "content": "# Troubleshooting\n\nWhen working wit the Kanka API, several issues can arrise. We've detailed the most common ones on this page.\n\nPlease note that the API can't be accessed through your browser by calling the endpoints.\n\n## HTML response instead of JSON\n\nWhen requesting an endpoint, you will sometimes get HTML instead of a Json response.\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n\n...\n```\n\nThe most common case is missing the `content-type: application/json` header.\n\nAnother one is if the `Authorization: Bearer <token>` header is missing.\n\nIf your request has both of these headers, and you still get HTML as a response, add `accept: application/json` as a header. This might lead to the following `unauthorized` error.\n\n## Unauthorized\n\nIf your token is invalid or malformed, you will get the following response.\n\n```json\n{\n    \"message\": \"Unauthenticated.\"\n}\n```\n\nGenerate a new token in your [Api settings](https://app.kanka.io/settings/api) and use that new token for your request.\n\n### What causes an invalid token?\n\nKanka tokens are valid for 1 year by default. All tokens get invalidated when we add more servers to Kanka, which happens less than once a year.\n\n## 422 Unprocessable Entity\nIf your `POST`, `PUT` or `PATCH` requests to the API are returning something about a missing required field, even when your body has a the field:\n```json\n{\"message\":\"The given data was invalid.\",\n  \"errors\":{\n    \"name\":[\"The name field is required.\"]\n  }\n}\n```\n\nYou are probably hitting the kanka.io domain in `http` instead of `https`. For example, the Postman application defaults to http when no scheme is provided.\n\n## Image upload not working\n\nAs of 1.15, fixed. See [Entity Image](/api-docs/{{version}}/entity-image).\n\n## Other issues\n\nFor all other issues, join us on [Discord](http://discord.gg/rhsyZJ4) and ask in the `#development-talk` channel where someone from the team or the community will help you out.\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/.scss-lint.yml",
    "content": "# Default application configuration that all configurations inherit from.\nlinters:\n  BorderZero:\n    enabled: true\n\n  CapitalizationInSelector:\n    enabled: true\n\n  ColorKeyword:\n    enabled: false\n\n  Comment:\n    enabled: false\n\n  DebugStatement:\n    enabled: true\n\n  DeclarationOrder:\n    enabled: true\n\n  EmptyLineBetweenBlocks:\n    enabled: true\n    ignore_single_line_blocks: true\n\n  EmptyRule:\n    enabled: true\n\n  FinalNewline:\n    enabled: true\n    present: true\n\n  HexLength:\n    enabled: true\n    style: short # or 'long'\n\n  HexNotation:\n    enabled: true\n    style: lowercase # or 'uppercase'\n\n  HexValidation:\n    enabled: true\n\n  IdWithExtraneousSelector:\n    enabled: true\n\n  IdSelector:\n    enabled: false\n\n  Indentation:\n    enabled: true\n    width: 2\n\n  LeadingZero:\n    enabled: true\n    style: exclude_zero # or 'include_zero'\n\n  MergeableSelector:\n    enabled: true\n    force_nesting: true\n\n  NameFormat:\n    enabled: true\n    convention: hyphenated_lowercase # or 'BEM', or a regex pattern\n\n  NestingDepth:\n    enabled: false\n\n  PlaceholderInExtend:\n    enabled: true\n\n  PropertySortOrder:\n    enabled: true\n\n  PropertySpelling:\n    enabled: true\n    extra_properties: []\n\n  QualifyingElement:\n    enabled: false\n\n  SelectorDepth:\n    enabled: false\n\n  Shorthand:\n    enabled: true\n\n  SingleLinePerSelector:\n    enabled: true\n\n  SpaceAfterComma:\n    enabled: true\n\n  SpaceAfterPropertyColon:\n    enabled: true\n\n  SpaceAfterPropertyName:\n    enabled: true\n\n  SpaceBeforeBrace:\n    enabled: true\n    allow_single_line_padding: false\n\n  SpaceBetweenParens:\n    enabled: true\n    spaces: 0\n\n  StringQuotes:\n    enabled: true\n    style: single_quotes # or double_quotes\n\n  TrailingSemicolonAfterPropertyValue:\n    enabled: true\n\n  UnnecessaryMantissa:\n    enabled: true\n\n  UrlFormat:\n    enabled: true\n\n  UrlQuotes:\n    enabled: true\n\n  VendorPrefix:\n    enabled: false\n\n  ZeroUnit:\n    enabled: true\n\n  Compass::*:\n    enabled: false"
  },
  {
    "path": "resources/assets/components/rpg/scss/_bordered-pulled.scss",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.#{$ra-css-prefix}-border {\n  border: solid .08em $ra-border-color;\n  border-radius: .1em;\n  padding: .2em .25em .15em;\n}\n\n.#{$ra-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_core.scss",
    "content": "// Base Class Definition\n// -------------------------\n\n.#{$ra-css-prefix} {\n  font-family: RPGAwesome;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  line-height: 1;\n  speak: none;\n  text-transform: none;\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_fixed-width.scss",
    "content": "// Fixed Width Icons\n// -------------------------\n.#{$ra-css-prefix}-fw {\n  text-align: center;\n  width: (18em / 14);\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_icons.scss",
    "content": "// Icons\n// --------------------------\n\n\n.#{$ra-css-prefix}-acid:before {\n  content: $ra-var-icon-acid;\n}\n\n.#{$ra-css-prefix}-zigzag-leaf:before {\n  content: $ra-var-icon-zigzag-leaf;\n}\n\n.#{$ra-css-prefix}-archer:before {\n  content: $ra-var-icon-archer;\n}\n\n.#{$ra-css-prefix}-archery-target:before {\n  content: $ra-var-icon-archery-target;\n}\n\n.#{$ra-css-prefix}-arena:before {\n  content: $ra-var-icon-arena;\n}\n\n.#{$ra-css-prefix}-aries:before {\n  content: $ra-var-icon-aries;\n}\n\n.#{$ra-css-prefix}-arrow-cluster:before {\n  content: $ra-var-icon-arrow-cluster;\n}\n\n.#{$ra-css-prefix}-arrow-flights:before {\n  content: $ra-var-icon-arrow-flights;\n}\n\n.#{$ra-css-prefix}-arson:before {\n  content: $ra-var-icon-arson;\n}\n\n.#{$ra-css-prefix}-aura:before {\n  content: $ra-var-icon-aura;\n}\n\n.#{$ra-css-prefix}-aware:before {\n  content: $ra-var-icon-aware;\n}\n\n.#{$ra-css-prefix}-axe:before {\n  content: $ra-var-icon-axe;\n}\n\n.#{$ra-css-prefix}-axe-swing:before {\n  content: $ra-var-icon-axe-swing;\n}\n\n.#{$ra-css-prefix}-ball:before {\n  content: $ra-var-icon-ball;\n}\n\n.#{$ra-css-prefix}-barbed-arrow:before {\n  content: $ra-var-icon-barbed-arrow;\n}\n\n.#{$ra-css-prefix}-barrier:before {\n  content: $ra-var-icon-barrier;\n}\n\n.#{$ra-css-prefix}-bat-sword:before {\n  content: $ra-var-icon-bat-sword;\n}\n\n.#{$ra-css-prefix}-battered-axe:before {\n  content: $ra-var-icon-battered-axe;\n}\n\n.#{$ra-css-prefix}-batteries:before {\n  content: $ra-var-icon-batteries;\n}\n\n.#{$ra-css-prefix}-battery-0:before {\n  content: $ra-var-icon-battery-0;\n}\n\n.#{$ra-css-prefix}-battery-25:before {\n  content: $ra-var-icon-battery-25;\n}\n\n.#{$ra-css-prefix}-battery-50:before {\n  content: $ra-var-icon-battery-50;\n}\n\n.#{$ra-css-prefix}-battery-75:before {\n  content: $ra-var-icon-battery-75;\n}\n\n.#{$ra-css-prefix}-battery-100:before {\n  content: $ra-var-icon-battery-100;\n}\n\n.#{$ra-css-prefix}-battery-black:before {\n  content: $ra-var-icon-battery-black;\n}\n\n.#{$ra-css-prefix}-battery-negative:before {\n  content: $ra-var-icon-battery-negative;\n}\n\n.#{$ra-css-prefix}-battery-positive:before {\n  content: $ra-var-icon-battery-positive;\n}\n\n.#{$ra-css-prefix}-battery-white:before {\n  content: $ra-var-icon-battery-white;\n}\n\n.#{$ra-css-prefix}-batwings:before {\n  content: $ra-var-icon-batwings;\n}\n\n.#{$ra-css-prefix}-beam-wake:before {\n  content: $ra-var-icon-beam-wake;\n}\n\n.#{$ra-css-prefix}-bear-trap:before {\n  content: $ra-var-icon-bear-trap;\n}\n\n.#{$ra-css-prefix}-beer:before {\n  content: $ra-var-icon-beer;\n}\n\n.#{$ra-css-prefix}-beetle:before {\n  content: $ra-var-icon-beetle;\n}\n\n.#{$ra-css-prefix}-bell:before {\n  content: $ra-var-icon-bell;\n}\n\n.#{$ra-css-prefix}-biohazard:before {\n  content: $ra-var-icon-biohazard;\n}\n\n.#{$ra-css-prefix}-bird-claw:before {\n  content: $ra-var-icon-bird-claw;\n}\n\n.#{$ra-css-prefix}-bird-mask:before {\n  content: $ra-var-icon-bird-mask;\n}\n\n.#{$ra-css-prefix}-blade-bite:before {\n  content: $ra-var-icon-blade-bite;\n}\n\n.#{$ra-css-prefix}-blast:before {\n  content: $ra-var-icon-blast;\n}\n\n.#{$ra-css-prefix}-blaster:before {\n  content: $ra-var-icon-blaster;\n}\n\n.#{$ra-css-prefix}-bleeding-eye:before {\n  content: $ra-var-icon-bleeding-eye;\n}\n\n.#{$ra-css-prefix}-bleeding-hearts:before {\n  content: $ra-var-icon-bleeding-hearts;\n}\n\n.#{$ra-css-prefix}-bolt-shield:before {\n  content: $ra-var-icon-bolt-shield;\n}\n\n.#{$ra-css-prefix}-bomb-explosion:before {\n  content: $ra-var-icon-bomb-explosion;\n}\n\n.#{$ra-css-prefix}-bombs:before {\n  content: $ra-var-icon-bombs;\n}\n\n.#{$ra-css-prefix}-bone-bite:before {\n  content: $ra-var-icon-bone-bite;\n}\n\n.#{$ra-css-prefix}-bone-knife:before {\n  content: $ra-var-icon-bone-knife;\n}\n\n.#{$ra-css-prefix}-book:before {\n  content: $ra-var-icon-book;\n}\n\n.#{$ra-css-prefix}-boomerang:before {\n  content: $ra-var-icon-boomerang;\n}\n\n.#{$ra-css-prefix}-boot-stomp:before {\n  content: $ra-var-icon-boot-stomp;\n}\n\n.#{$ra-css-prefix}-bottle-vapors:before {\n  content: $ra-var-icon-bottle-vapors;\n}\n\n.#{$ra-css-prefix}-bottled-bolt:before {\n  content: $ra-var-icon-bottled-bolt;\n}\n\n.#{$ra-css-prefix}-bottom-right:before {\n  content: $ra-var-icon-bottom-right;\n}\n\n.#{$ra-css-prefix}-bowie-knife:before {\n  content: $ra-var-icon-bowie-knife;\n}\n\n.#{$ra-css-prefix}-bowling-pin:before {\n  content: $ra-var-icon-bowling-pin;\n}\n\n.#{$ra-css-prefix}-brain-freeze:before {\n  content: $ra-var-icon-brain-freeze;\n}\n\n.#{$ra-css-prefix}-brandy-bottle:before {\n  content: $ra-var-icon-brandy-bottle;\n}\n\n.#{$ra-css-prefix}-bridge:before {\n  content: $ra-var-icon-bridge;\n}\n\n.#{$ra-css-prefix}-broadhead-arrow:before {\n  content: $ra-var-icon-broadhead-arrow;\n}\n\n.#{$ra-css-prefix}-sword:before,\n.#{$ra-css-prefix}-broadsword:before {\n  content: $ra-var-icon-broadsword;\n}\n\n.#{$ra-css-prefix}-broken-bone:before {\n  content: $ra-var-icon-broken-bone;\n}\n\n.#{$ra-css-prefix}-broken-bottle:before {\n  content: $ra-var-icon-broken-bottle;\n}\n\n.#{$ra-css-prefix}-broken-heart:before {\n  content: $ra-var-icon-broken-bottle;\n}\n\n.#{$ra-css-prefix}-broken-shield:before {\n  content: $ra-var-icon-broken-shield;\n}\n\n.#{$ra-css-prefix}-broken-skull:before {\n  content: $ra-var-icon-broken-skull;\n}\n\n.#{$ra-css-prefix}-bubbling-potion:before {\n  content: $ra-var-icon-bubbling-potion;\n}\n\n.#{$ra-css-prefix}-bullets:before {\n  content: $ra-var-icon-bullets;\n}\n\n.#{$ra-css-prefix}-burning-book:before {\n  content: $ra-var-icon-burning-book;\n}\n\n.#{$ra-css-prefix}-burning-embers:before {\n  content: $ra-var-icon-burning-embers;\n}\n\n.#{$ra-css-prefix}-burning-eye:before {\n  content: $ra-var-icon-burning-eye;\n}\n\n.#{$ra-css-prefix}-burning-meteor:before {\n  content: $ra-var-icon-burning-meteor;\n}\n\n.#{$ra-css-prefix}-burst-blob:before {\n  content: $ra-var-icon-burst-blob;\n}\n\n.#{$ra-css-prefix}-butterfly:before {\n  content: $ra-var-icon-butterfly;\n}\n\n.#{$ra-css-prefix}-campfire:before {\n  content: $ra-var-icon-campfire;\n}\n\n.#{$ra-css-prefix}-cancel:before {\n  content: $ra-var-icon-cancel;\n}\n\n.#{$ra-css-prefix}-cancer:before {\n  content: $ra-var-icon-cancer;\n}\n\n.#{$ra-css-prefix}-candle:before {\n  content: $ra-var-icon-candle;\n}\n\n.#{$ra-css-prefix}-candle-fire:before {\n  content: $ra-var-icon-candle-fire;\n}\n\n.#{$ra-css-prefix}-cannon-shot:before {\n  content: $ra-var-icon-cannon-shot;\n}\n\n.#{$ra-css-prefix}-capitol:before {\n  content: $ra-var-icon-capitol;\n}\n\n.#{$ra-css-prefix}-capricorn:before {\n  content: $ra-var-icon-capricorn;\n}\n\n.#{$ra-css-prefix}-carrot:before {\n  content: $ra-var-icon-carrot;\n}\n\n.#{$ra-css-prefix}-castle-emblem:before {\n  content: $ra-var-icon-castle-emblem;\n}\n\n.#{$ra-css-prefix}-castle-flag:before {\n  content: $ra-var-icon-castle-flag;\n}\n\n.#{$ra-css-prefix}-cat:before {\n  content: $ra-var-icon-cat;\n}\n\n.#{$ra-css-prefix}-chain:before {\n  content: $ra-var-icon-chain;\n}\n\n.#{$ra-css-prefix}-cheese:before {\n  content: $ra-var-icon-cheese;\n}\n\n.#{$ra-css-prefix}-chemical-arrow:before {\n  content: $ra-var-icon-chemical-arrow;\n}\n\n.#{$ra-css-prefix}-chessboard:before {\n  content: $ra-var-icon-chessboard;\n}\n\n.#{$ra-css-prefix}-chicken-leg:before {\n  content: $ra-var-icon-chicken-leg;\n}\n\n.#{$ra-css-prefix}-circle-of-circles:before {\n  content: $ra-var-icon-circle-of-circles;\n}\n\n.#{$ra-css-prefix}-circular-saw:before {\n  content: $ra-var-icon-circular-saw;\n}\n\n.#{$ra-css-prefix}-circular-shield:before {\n  content: $ra-var-icon-circular-shield;\n}\n\n.#{$ra-css-prefix}-cloak-and-dagger:before {\n  content: $ra-var-icon-cloak-and-dagger;\n}\n\n.#{$ra-css-prefix}-clockwork:before {\n  content: $ra-var-icon-clockwork;\n}\n\n.#{$ra-css-prefix}-clover:before {\n  content: $ra-var-icon-clover;\n}\n\n.#{$ra-css-prefix}-clovers:before {\n  content: $ra-var-icon-clovers;\n}\n\n.#{$ra-css-prefix}-clovers-card:before {\n  content: $ra-var-icon-clovers-card;\n}\n\n.#{$ra-css-prefix}-cluster-bomb:before {\n  content: $ra-var-icon-cluster-bomb;\n}\n\n.#{$ra-css-prefix}-coffee-mug:before {\n  content: $ra-var-icon-coffee-mug;\n}\n\n.#{$ra-css-prefix}-cog:before {\n  content: $ra-var-icon-cog;\n}\n\n.#{$ra-css-prefix}-cog-wheel:before {\n  content: $ra-var-icon-cog-wheel;\n}\n\n.#{$ra-css-prefix}-cold-heart:before {\n  content: $ra-var-icon-cold-heart;\n}\n\n.#{$ra-css-prefix}-compass:before {\n  content: $ra-var-icon-compass;\n}\n\n.#{$ra-css-prefix}-corked-tube:before {\n  content: $ra-var-icon-corked-tube;\n}\n\n.#{$ra-css-prefix}-crab-claw:before {\n  content: $ra-var-icon-crab-claw;\n}\n\n.#{$ra-css-prefix}-cracked-helm:before {\n  content: $ra-var-icon-cracked-helm;\n}\n\n.#{$ra-css-prefix}-cracked-shield:before {\n  content: $ra-var-icon-cracked-shield;\n}\n\n.#{$ra-css-prefix}-croc-sword:before {\n  content: $ra-var-icon-croc-sword;\n}\n\n.#{$ra-css-prefix}-crossbow:before {\n  content: $ra-var-icon-crossbow;\n}\n\n.#{$ra-css-prefix}-crossed-axes:before {\n  content: $ra-var-icon-crossed-axes;\n}\n\n.#{$ra-css-prefix}-crossed-bones:before {\n  content: $ra-var-icon-crossed-bones;\n}\n\n.#{$ra-css-prefix}-crossed-pistols:before {\n  content: $ra-var-icon-crossed-pistols;\n}\n\n.#{$ra-css-prefix}-crossed-sabres:before {\n  content: $ra-var-icon-crossed-sabres;\n}\n\n.#{$ra-css-prefix}-crossed-swords:before {\n  content: $ra-var-icon-crossed-swords;\n}\n\n.#{$ra-css-prefix}-crown:before {\n  content: $ra-var-icon-crown;\n}\n\n.#{$ra-css-prefix}-crown-of-thorns:before {\n  content: $ra-var-icon-crown-of-thorns;\n}\n\n.#{$ra-css-prefix}-crowned-heart:before {\n  content: $ra-var-icon-crowned-heart;\n}\n\n.#{$ra-css-prefix}-crush:before {\n  content: $ra-var-icon-crush;\n}\n\n.#{$ra-css-prefix}-crystal-ball:before {\n  content: $ra-var-icon-crystal-ball;\n}\n\n.#{$ra-css-prefix}-crystal-cluster:before {\n  content: $ra-var-icon-crystal-cluster;\n}\n\n.#{$ra-css-prefix}-crystal-wand:before {\n  content: $ra-var-icon-crystal-wand;\n}\n\n.#{$ra-css-prefix}-crystals:before {\n  content: $ra-var-icon-crystals;\n}\n\n.#{$ra-css-prefix}-cubes:before {\n  content: $ra-var-icon-cubes;\n}\n\n.#{$ra-css-prefix}-cut-palm:before {\n  content: $ra-var-icon-cut-palm;\n}\n\n.#{$ra-css-prefix}-cycle:before {\n  content: $ra-var-icon-cycle;\n}\n\n.#{$ra-css-prefix}-daggers:before {\n  content: $ra-var-icon-daggers;\n}\n\n.#{$ra-css-prefix}-daisy:before {\n  content: $ra-var-icon-daisy;\n}\n\n.#{$ra-css-prefix}-dead-tree:before {\n  content: $ra-var-icon-dead-tree;\n}\n\n.#{$ra-css-prefix}-death-skull:before {\n  content: $ra-var-icon-death-skull;\n}\n\n.#{$ra-css-prefix}-decapitation:before {\n  content: $ra-var-icon-decapitation;\n}\n\n.#{$ra-css-prefix}-defibrillate:before {\n  content: $ra-var-icon-defibrillate;\n}\n\n.#{$ra-css-prefix}-demolish:before {\n  content: $ra-var-icon-demolish;\n}\n\n.#{$ra-css-prefix}-dervish-swords:before {\n  content: $ra-var-icon-dervish-swords;\n}\n\n.#{$ra-css-prefix}-desert-skull:before {\n  content: $ra-var-icon-desert-skull;\n}\n\n.#{$ra-css-prefix}-diamond:before {\n  content: $ra-var-icon-diamond;\n}\n\n.#{$ra-css-prefix}-diamonds:before {\n  content: $ra-var-icon-diamonds;\n}\n\n.#{$ra-css-prefix}-diamonds-card:before {\n  content: $ra-var-icon-diamonds-card;\n}\n\n.#{$ra-css-prefix}-dice-five:before {\n  content: $ra-var-icon-dice-five;\n}\n\n.#{$ra-css-prefix}-dice-four:before {\n  content: $ra-var-icon-dice-four;\n}\n\n.#{$ra-css-prefix}-dice-one:before {\n  content: $ra-var-icon-dice-one;\n}\n\n.#{$ra-css-prefix}-dice-six:before {\n  content: $ra-var-icon-dice-six;\n}\n\n.#{$ra-css-prefix}-dice-three:before {\n  content: $ra-var-icon-dice-three;\n}\n\n.#{$ra-css-prefix}-dice-two:before {\n  content: $ra-var-icon-dice-two;\n}\n\n.#{$ra-css-prefix}-dinosaur:before {\n  content: $ra-var-icon-dinosaur;\n}\n\n.#{$ra-css-prefix}-divert:before {\n  content: $ra-var-icon-divert;\n}\n\n.#{$ra-css-prefix}-diving-dagger:before {\n  content: $ra-var-icon-diving-dagger;\n}\n\n.#{$ra-css-prefix}-double-team:before {\n  content: $ra-var-icon-double-team;\n}\n\n.#{$ra-css-prefix}-doubled:before {\n  content: $ra-var-icon-doubled;\n}\n\n.#{$ra-css-prefix}-dragon:before {\n  content: $ra-var-icon-dragon;\n}\n\n.#{$ra-css-prefix}-dragon-breath:before {\n  content: $ra-var-icon-dragon-breath;\n}\n\n.#{$ra-css-prefix}-dragon-wing:before {\n  content: $ra-var-icon-dragon-wing;\n}\n\n.#{$ra-css-prefix}-dragonfly:before {\n  content: $ra-var-icon-dragonfly;\n}\n\n.#{$ra-css-prefix}-drill:before {\n  content: $ra-var-icon-drill;\n}\n\n.#{$ra-css-prefix}-dripping-blade:before {\n  content: $ra-var-icon-dripping-blade;\n}\n\n.#{$ra-css-prefix}-dripping-knife:before {\n  content: $ra-var-icon-dripping-knife;\n}\n\n.#{$ra-css-prefix}-dripping-sword:before {\n  content: $ra-var-icon-dripping-sword;\n}\n\n.#{$ra-css-prefix}-droplet:before {\n  content: $ra-var-icon-droplet;\n}\n\n.#{$ra-css-prefix}-droplet-splash:before {\n  content: $ra-var-icon-droplet-splash;\n}\n\n.#{$ra-css-prefix}-droplets:before {\n  content: $ra-var-icon-droplets;\n}\n\n.#{$ra-css-prefix}-duel:before {\n  content: $ra-var-icon-duel;\n}\n\n.#{$ra-css-prefix}-egg:before {\n  content: $ra-var-icon-egg;\n}\n\n.#{$ra-css-prefix}-egg-pod:before {\n  content: $ra-var-icon-egg-pod;\n}\n\n.#{$ra-css-prefix}-eggplant:before {\n  content: $ra-var-icon-eggplant;\n}\n\n.#{$ra-css-prefix}-emerald:before {\n  content: $ra-var-icon-emerald;\n}\n\n.#{$ra-css-prefix}-energise:before {\n  content: $ra-var-icon-energise;\n}\n\n.#{$ra-css-prefix}-explosion:before {\n  content: $ra-var-icon-explosion;\n}\n\n.#{$ra-css-prefix}-explosive-materials:before {\n  content: $ra-var-icon-explosive-materials;\n}\n\n.#{$ra-css-prefix}-eye-monster:before {\n  content: $ra-var-icon-eye-monster;\n}\n\n.#{$ra-css-prefix}-eye-shield:before {\n  content: $ra-var-icon-eye-shield;\n}\n\n.#{$ra-css-prefix}-eyeball:before {\n  content: $ra-var-icon-eyeball;\n}\n\n.#{$ra-css-prefix}-fairy:before {\n  content: $ra-var-icon-fairy;\n}\n\n.#{$ra-css-prefix}-fairy-wand:before {\n  content: $ra-var-icon-fairy-wand;\n}\n\n.#{$ra-css-prefix}-fall-down:before {\n  content: $ra-var-icon-fall-down;\n}\n\n.#{$ra-css-prefix}-falling:before {\n  content: $ra-var-icon-falling;\n}\n\n.#{$ra-css-prefix}-fast-ship:before {\n  content: $ra-var-icon-fast-ship;\n}\n\n.#{$ra-css-prefix}-feather-wing:before {\n  content: $ra-var-icon-feather-wing;\n}\n\n.#{$ra-css-prefix}-feathered-wing:before {\n  content: $ra-var-icon-feathered-wing;\n}\n\n.#{$ra-css-prefix}-fedora:before {\n  content: $ra-var-icon-fedora;\n}\n\n.#{$ra-css-prefix}-fire:before {\n  content: $ra-var-icon-fire;\n}\n\n.#{$ra-css-prefix}-fire-bomb:before {\n  content: $ra-var-icon-fire-bomb;\n}\n\n.#{$ra-css-prefix}-fire-breath:before {\n  content: $ra-var-icon-fire-breath;\n}\n\n.#{$ra-css-prefix}-fire-ring:before {\n  content: $ra-var-icon-fire-ring;\n}\n\n.#{$ra-css-prefix}-fire-shield:before {\n  content: $ra-var-icon-fire-shield;\n}\n\n.#{$ra-css-prefix}-fire-symbol:before {\n  content: $ra-var-icon-fire-symbol;\n}\n\n.#{$ra-css-prefix}-fireball-sword:before {\n  content: $ra-var-icon-fireball-sword;\n}\n\n.#{$ra-css-prefix}-fish:before {\n  content: $ra-var-icon-fish;\n}\n\n.#{$ra-css-prefix}-fizzing-flask:before {\n  content: $ra-var-icon-fizzing-flask;\n}\n\n.#{$ra-css-prefix}-flame-symbol:before {\n  content: $ra-var-icon-flame-symbol;\n}\n\n.#{$ra-css-prefix}-flaming-arrow:before {\n  content: $ra-var-icon-flaming-arrow;\n}\n\n.#{$ra-css-prefix}-flaming-claw:before {\n  content: $ra-var-icon-flaming-claw;\n}\n\n.#{$ra-css-prefix}-flaming-trident:before {\n  content: $ra-var-icon-flaming-trident;\n}\n\n.#{$ra-css-prefix}-flask:before {\n  content: $ra-var-icon-flask;\n}\n\n.#{$ra-css-prefix}-flat-hammer:before {\n  content: $ra-var-icon-flat-hammer;\n}\n\n.#{$ra-css-prefix}-flower:before {\n  content: $ra-var-icon-flower;\n}\n\n.#{$ra-css-prefix}-flowers:before {\n  content: $ra-var-icon-flowers;\n}\n\n.#{$ra-css-prefix}-fluffy-swirl:before {\n  content: $ra-var-icon-fluffy-swirl;\n}\n\n.#{$ra-css-prefix}-focused-lightning:before {\n  content: $ra-var-icon-focused-lightning;\n}\n\n.#{$ra-css-prefix}-food-chain:before {\n  content: $ra-var-icon-food-chain;\n}\n\n.#{$ra-css-prefix}-footprint:before {\n  content: $ra-var-icon-footprint;\n}\n\n.#{$ra-css-prefix}-forging:before {\n  content: $ra-var-icon-forging;\n}\n\n.#{$ra-css-prefix}-forward:before {\n  content: $ra-var-icon-forward;\n}\n\n.#{$ra-css-prefix}-fox:before {\n  content: $ra-var-icon-fox;\n}\n\n.#{$ra-css-prefix}-frost-emblem:before {\n  content: $ra-var-icon-frost-emblem;\n}\n\n.#{$ra-css-prefix}-frostfire:before {\n  content: $ra-var-icon-frostfire;\n}\n\n.#{$ra-css-prefix}-frozen-arrow:before {\n  content: $ra-var-icon-frozen-arrow;\n}\n\n.#{$ra-css-prefix}-gamepad-cross:before {\n  content: $ra-var-icon-gamepad-cross;\n}\n\n.#{$ra-css-prefix}-gavel:before {\n  content: $ra-var-icon-gavel;\n}\n\n.#{$ra-css-prefix}-gear-hammer:before {\n  content: $ra-var-icon-gear-hammer;\n}\n\n.#{$ra-css-prefix}-gear-heart:before {\n  content: $ra-var-icon-gear-heart;\n}\n\n.#{$ra-css-prefix}-gears:before {\n  content: $ra-var-icon-gears;\n}\n\n.#{$ra-css-prefix}-gecko:before {\n  content: $ra-var-icon-gecko;\n}\n\n.#{$ra-css-prefix}-gem:before {\n  content: $ra-var-icon-gem;\n}\n\n.#{$ra-css-prefix}-gem-pendant:before {\n  content: $ra-var-icon-gem-pendant;\n}\n\n.#{$ra-css-prefix}-gemini:before {\n  content: $ra-var-icon-gemini;\n}\n\n.#{$ra-css-prefix}-glass-heart:before {\n  content: $ra-var-icon-glass-heart;\n}\n\n.#{$ra-css-prefix}-gloop:before {\n  content: $ra-var-icon-gloop;\n}\n\n.#{$ra-css-prefix}-gold-bar:before {\n  content: $ra-var-icon-gold-bar;\n}\n\n.#{$ra-css-prefix}-grappling-hook:before {\n  content: $ra-var-icon-grappling-hook;\n}\n\n.#{$ra-css-prefix}-grass:before {\n  content: $ra-var-icon-grass;\n}\n\n.#{$ra-css-prefix}-grass-patch:before {\n  content: $ra-var-icon-grass-patch;\n}\n\n.#{$ra-css-prefix}-grenade:before {\n  content: $ra-var-icon-grenade;\n}\n\n.#{$ra-css-prefix}-groundbreaker:before {\n  content: $ra-var-icon-groundbreaker;\n}\n\n.#{$ra-css-prefix}-guarded-tower:before {\n  content: $ra-var-icon-guarded-tower;\n}\n\n.#{$ra-css-prefix}-guillotine:before {\n  content: $ra-var-icon-guillotine;\n}\n\n.#{$ra-css-prefix}-halberd:before {\n  content: $ra-var-icon-halberd;\n}\n\n.#{$ra-css-prefix}-hammer:before {\n  content: $ra-var-icon-hammer;\n}\n\n.#{$ra-css-prefix}-hammer-drop:before {\n  content: $ra-var-icon-hammer-drop;\n}\n\n.#{$ra-css-prefix}-hand:before {\n  content: $ra-var-icon-hand;\n}\n\n.#{$ra-css-prefix}-hand-emblem:before {\n  content: $ra-var-icon-hand-emblem;\n}\n\n.#{$ra-css-prefix}-hand-saw:before {\n  content: $ra-var-icon-hand-saw;\n}\n\n.#{$ra-css-prefix}-harpoon-trident:before {\n  content: $ra-var-icon-harpoon-trident;\n}\n\n.#{$ra-css-prefix}-health:before {\n  content: $ra-var-icon-health;\n}\n\n.#{$ra-css-prefix}-health-decrease:before {\n  content: $ra-var-icon-health-decrease;\n}\n\n.#{$ra-css-prefix}-health-increase:before {\n  content: $ra-var-icon-health-increase;\n}\n\n.#{$ra-css-prefix}-heart-bottle:before {\n  content: $ra-var-icon-heart-bottle;\n}\n\n.#{$ra-css-prefix}-heart-tower:before {\n  content: $ra-var-icon-heart-tower;\n}\n\n.#{$ra-css-prefix}-heartburn:before {\n  content: $ra-var-icon-heartburn;\n}\n\n.#{$ra-css-prefix}-hearts:before {\n  content: $ra-var-icon-hearts;\n}\n\n.#{$ra-css-prefix}-hearts-card:before {\n  content: $ra-var-icon-hearts-card;\n}\n\n.#{$ra-css-prefix}-heat-haze:before {\n  content: $ra-var-icon-heat-haze;\n}\n\n.#{$ra-css-prefix}-heavy-fall:before {\n  content: $ra-var-icon-heavy-fall;\n}\n\n.#{$ra-css-prefix}-heavy-shield:before {\n  content: $ra-var-icon-heavy-shield;\n}\n\n.#{$ra-css-prefix}-helmet:before {\n  content: $ra-var-icon-helmet;\n}\n\n.#{$ra-css-prefix}-help:before {\n  content: $ra-var-icon-help;\n}\n\n.#{$ra-css-prefix}-hive-emblem:before {\n  content: $ra-var-icon-hive-emblem;\n}\n\n.#{$ra-css-prefix}-hole-ladder:before {\n  content: $ra-var-icon-hole-ladder;\n}\n\n.#{$ra-css-prefix}-honeycomb:before {\n  content: $ra-var-icon-honeycomb;\n}\n\n.#{$ra-css-prefix}-hood:before {\n  content: $ra-var-icon-hood;\n}\n\n.#{$ra-css-prefix}-horn-call:before {\n  content: $ra-var-icon-horn-call;\n}\n\n.#{$ra-css-prefix}-horns:before {\n  content: $ra-var-icon-horns;\n}\n\n.#{$ra-css-prefix}-horseshoe:before {\n  content: $ra-var-icon-horseshoe;\n}\n\n.#{$ra-css-prefix}-hospital-cross:before {\n  content: $ra-var-icon-hospital-cross;\n}\n\n.#{$ra-css-prefix}-hot-surface:before {\n  content: $ra-var-icon-hot-surface;\n}\n\n.#{$ra-css-prefix}-hourglass:before {\n  content: $ra-var-icon-hourglass;\n}\n\n.#{$ra-css-prefix}-hydra:before {\n  content: $ra-var-icon-hydra;\n}\n\n.#{$ra-css-prefix}-hydra-shot:before {\n  content: $ra-var-icon-hydra-shot;\n}\n\n.#{$ra-css-prefix}-ice-cube:before {\n  content: $ra-var-icon-ice-cube;\n}\n\n.#{$ra-css-prefix}-implosion:before {\n  content: $ra-var-icon-implosion;\n}\n\n.#{$ra-css-prefix}-incense:before {\n  content: $ra-var-icon-incense;\n}\n\n.#{$ra-css-prefix}-insect-jaws:before {\n  content: $ra-var-icon-insect-jaws;\n}\n\n.#{$ra-css-prefix}-interdiction:before {\n  content: $ra-var-icon-interdiction;\n}\n\n.#{$ra-css-prefix}-jetpack:before {\n  content: $ra-var-icon-jetpack;\n}\n\n.#{$ra-css-prefix}-jigsaw-piece:before {\n  content: $ra-var-icon-jigsaw-piece;\n}\n\n.#{$ra-css-prefix}-kaleidoscope:before {\n  content: $ra-var-icon-kaleidoscope;\n}\n\n.#{$ra-css-prefix}-kettlebell:before {\n  content: $ra-var-icon-kettlebell;\n}\n\n.#{$ra-css-prefix}-key:before {\n  content: $ra-var-icon-key;\n}\n\n.#{$ra-css-prefix}-key-basic:before {\n  content: $ra-var-icon-key-basic;\n}\n\n.#{$ra-css-prefix}-kitchen-knives:before {\n  content: $ra-var-icon-kitchen-knives;\n}\n\n.#{$ra-css-prefix}-knife:before {\n  content: $ra-var-icon-knife;\n}\n\n.#{$ra-css-prefix}-knife-fork:before {\n  content: $ra-var-icon-knife-fork;\n}\n\n.#{$ra-css-prefix}-knight-helmet:before {\n  content: $ra-var-icon-knight-helmet;\n}\n\n.#{$ra-css-prefix}-kunai:before {\n  content: $ra-var-icon-kunai;\n}\n\n.#{$ra-css-prefix}-lantern-flame:before {\n  content: $ra-var-icon-lantern-flame;\n}\n\n.#{$ra-css-prefix}-large-hammer:before {\n  content: $ra-var-icon-large-hammer;\n}\n\n.#{$ra-css-prefix}-laser-blast:before {\n  content: $ra-var-icon-laser-blast;\n}\n\n.#{$ra-css-prefix}-laser-site:before {\n  content: $ra-var-icon-laser-site;\n}\n\n.#{$ra-css-prefix}-lava:before {\n  content: $ra-var-icon-lava;\n}\n\n.#{$ra-css-prefix}-leaf:before {\n  content: $ra-var-icon-leaf;\n}\n\n.#{$ra-css-prefix}-leo:before {\n  content: $ra-var-icon-leo;\n}\n\n.#{$ra-css-prefix}-level-four:before {\n  content: $ra-var-icon-level-four;\n}\n\n.#{$ra-css-prefix}-level-four-advanced:before {\n  content: $ra-var-icon-level-four-advanced;\n}\n\n.#{$ra-css-prefix}-level-three:before {\n  content: $ra-var-icon-level-three;\n}\n\n.#{$ra-css-prefix}-level-three-advanced:before {\n  content: $ra-var-icon-level-three-advanced;\n}\n\n.#{$ra-css-prefix}-level-two:before {\n  content: $ra-var-icon-level-two;\n}\n\n.#{$ra-css-prefix}-level-two-advanced:before {\n  content: $ra-var-icon-level-two-advanced;\n}\n\n.#{$ra-css-prefix}-lever:before {\n  content: $ra-var-icon-lever;\n}\n\n.#{$ra-css-prefix}-libra:before {\n  content: $ra-var-icon-libra;\n}\n\n.#{$ra-css-prefix}-light-bulb:before {\n  content: $ra-var-icon-light-bulb;\n}\n\n.#{$ra-css-prefix}-lighthouse:before {\n  content: $ra-var-icon-lighthouse;\n}\n\n.#{$ra-css-prefix}-lightning:before {\n  content: $ra-var-icon-lightning;\n}\n\n.#{$ra-css-prefix}-lightning-bolt:before {\n  content: $ra-var-icon-lightning-bolt;\n}\n\n.#{$ra-css-prefix}-lightning-storm:before {\n  content: $ra-var-icon-lightning-storm;\n}\n\n.#{$ra-css-prefix}-lightning-sword:before {\n  content: $ra-var-icon-lightning-sword;\n}\n\n.#{$ra-css-prefix}-lightning-trio:before {\n  content: $ra-var-icon-lightning-trio;\n}\n\n.#{$ra-css-prefix}-lion:before {\n  content: $ra-var-icon-lion;\n}\n\n.#{$ra-css-prefix}-lit-candelabra:before {\n  content: $ra-var-icon-lit-candelabra;\n}\n\n.#{$ra-css-prefix}-load:before {\n  content: $ra-var-icon-load;\n}\n\n.#{$ra-css-prefix}-locked-fortress:before {\n  content: $ra-var-icon-locked-fortress;\n}\n\n.#{$ra-css-prefix}-love-howl:before {\n  content: $ra-var-icon-love-howl;\n}\n\n.#{$ra-css-prefix}-maggot:before {\n  content: $ra-var-icon-maggot;\n}\n\n.#{$ra-css-prefix}-magnet:before {\n  content: $ra-var-icon-magnet;\n}\n\n.#{$ra-css-prefix}-mass-driver:before {\n  content: $ra-var-icon-mass-driver;\n}\n\n.#{$ra-css-prefix}-match:before {\n  content: $ra-var-icon-match;\n}\n\n.#{$ra-css-prefix}-meat:before {\n  content: $ra-var-icon-meat;\n}\n\n.#{$ra-css-prefix}-meat-hook:before {\n  content: $ra-var-icon-meat-hook;\n}\n\n.#{$ra-css-prefix}-medical-pack:before {\n  content: $ra-var-icon-medical-pack;\n}\n\n.#{$ra-css-prefix}-metal-gate:before {\n  content: $ra-var-icon-metal-gate;\n}\n\n.#{$ra-css-prefix}-microphone:before {\n  content: $ra-var-icon-microphone;\n}\n\n.#{$ra-css-prefix}-mine-wagon:before {\n  content: $ra-var-icon-mine-wagon;\n}\n\n.#{$ra-css-prefix}-mining-diamonds:before {\n  content: $ra-var-icon-mining-diamonds;\n}\n\n.#{$ra-css-prefix}-mirror:before {\n  content: $ra-var-icon-mirror;\n}\n\n.#{$ra-css-prefix}-monster-skull:before {\n  content: $ra-var-icon-monster-skull;\n}\n\n.#{$ra-css-prefix}-mountains:before {\n  content: $ra-var-icon-mountains;\n}\n\n.#{$ra-css-prefix}-moon-sun:before {\n  content: $ra-var-icon-moon-sun;\n}\n\n.#{$ra-css-prefix}-mp5:before {\n  content: $ra-var-icon-mp5;\n}\n\n.#{$ra-css-prefix}-muscle-fat:before {\n  content: $ra-var-icon-muscle-fat;\n}\n\n.#{$ra-css-prefix}-muscle-up:before {\n  content: $ra-var-icon-muscle-up;\n}\n\n.#{$ra-css-prefix}-musket:before {\n  content: $ra-var-icon-musket;\n}\n\n.#{$ra-css-prefix}-nails:before {\n  content: $ra-var-icon-nails;\n}\n\n.#{$ra-css-prefix}-nodular:before {\n  content: $ra-var-icon-nodular;\n}\n\n.#{$ra-css-prefix}-noose:before {\n  content: $ra-var-icon-noose;\n}\n\n.#{$ra-css-prefix}-nuclear:before {\n  content: $ra-var-icon-nuclear;\n}\n\n.#{$ra-css-prefix}-ocarina:before {\n  content: $ra-var-icon-ocarina;\n}\n\n.#{$ra-css-prefix}-ocean-emblem:before {\n  content: $ra-var-icon-ocean-emblem;\n}\n\n.#{$ra-css-prefix}-octopus:before {\n  content: $ra-var-icon-octopus;\n}\n\n.#{$ra-css-prefix}-omega:before {\n  content: $ra-var-icon-omega;\n}\n\n.#{$ra-css-prefix}-on-target:before {\n  content: $ra-var-icon-on-target;\n}\n\n.#{$ra-css-prefix}-ophiuchus:before {\n  content: $ra-var-icon-ophiuchus;\n}\n\n.#{$ra-css-prefix}-overhead:before {\n  content: $ra-var-icon-overhead;\n}\n\n.#{$ra-css-prefix}-overmind:before {\n  content: $ra-var-icon-overmind;\n}\n\n.#{$ra-css-prefix}-palm-tree:before {\n  content: $ra-var-icon-palm-tree;\n}\n\n.#{$ra-css-prefix}-pawn:before {\n  content: $ra-var-icon-pawn;\n}\n\n.#{$ra-css-prefix}-pawprint:before {\n  content: $ra-var-icon-pawprint;\n}\n\n.#{$ra-css-prefix}-perspective-dice-five:before {\n  content: $ra-var-icon-perspective-dice-five;\n}\n\n.#{$ra-css-prefix}-perspective-dice-four:before {\n  content: $ra-var-icon-perspective-dice-four;\n}\n\n.#{$ra-css-prefix}-perspective-dice-one:before {\n  content: $ra-var-icon-perspective-dice-one;\n}\n\n.#{$ra-css-prefix}-perspective-dice-random:before {\n  content: $ra-var-icon-perspective-dice-random;\n}\n\n.#{$ra-css-prefix}-perspective-dice-six:before {\n  content: $ra-var-icon-perspective-dice-six;\n}\n\n.#{$ra-css-prefix}-perspective-dice-two:before {\n  content: $ra-var-icon-perspective-dice-two;\n}\n\n.#{$ra-css-prefix}-perspective-dice-three:before {\n  content: $ra-var-icon-perspective-dice-three;\n}\n\n.#{$ra-css-prefix}-pill:before {\n  content: $ra-var-icon-pill;\n}\n\n.#{$ra-css-prefix}-pills:before {\n  content: $ra-var-icon-pills;\n}\n\n.#{$ra-css-prefix}-pine-tree:before {\n  content: $ra-var-icon-pine-tree;\n}\n\n.#{$ra-css-prefix}-ping-pong:before {\n  content: $ra-var-icon-ping-pong;\n}\n\n.#{$ra-css-prefix}-pisces:before {\n  content: $ra-var-icon-pisces;\n}\n\n.#{$ra-css-prefix}-plain-dagger:before {\n  content: $ra-var-icon-plain-dagger;\n}\n\n.#{$ra-css-prefix}-player:before {\n  content: $ra-var-icon-player;\n}\n\n.#{$ra-css-prefix}-player-despair:before {\n  content: $ra-var-icon-player-despair;\n}\n\n.#{$ra-css-prefix}-player-dodge:before {\n  content: $ra-var-icon-player-dodge;\n}\n\n.#{$ra-css-prefix}-player-king:before {\n  content: $ra-var-icon-player-king;\n}\n\n.#{$ra-css-prefix}-player-lift:before {\n  content: $ra-var-icon-player-lift;\n}\n\n.#{$ra-css-prefix}-player-pain:before {\n  content: $ra-var-icon-player-pain;\n}\n\n.#{$ra-css-prefix}-player-pyromaniac:before {\n  content: $ra-var-icon-player-pyromaniac;\n}\n\n.#{$ra-css-prefix}-player-shot:before {\n  content: $ra-var-icon-player-shot;\n}\n\n.#{$ra-css-prefix}-player-teleport:before {\n  content: $ra-var-icon-player-teleport;\n}\n\n.#{$ra-css-prefix}-player-thunder-struck:before {\n  content: $ra-var-icon-player-thunder-struck;\n}\n\n.#{$ra-css-prefix}-podium:before {\n  content: $ra-var-icon-podium;\n}\n\n.#{$ra-css-prefix}-poison-cloud:before {\n  content: $ra-var-icon-poison-cloud;\n}\n\n.#{$ra-css-prefix}-potion:before {\n  content: $ra-var-icon-potion;\n}\n\n.#{$ra-css-prefix}-pyramids:before {\n  content: $ra-var-icon-pyramids;\n}\n\n.#{$ra-css-prefix}-queen-crown:before {\n  content: $ra-var-icon-queen-crown;\n}\n\n.#{$ra-css-prefix}-quill-ink:before {\n  content: $ra-var-icon-quill-ink;\n}\n\n.#{$ra-css-prefix}-rabbit:before {\n  content: $ra-var-icon-rabbit;\n}\n\n.#{$ra-css-prefix}-radar-dish:before {\n  content: $ra-var-icon-radar-dish;\n}\n\n.#{$ra-css-prefix}-radial-balance:before {\n  content: $ra-var-icon-radial-balance;\n}\n\n.#{$ra-css-prefix}-radioactive:before {\n  content: $ra-var-icon-radioactive;\n}\n\n.#{$ra-css-prefix}-raven:before {\n  content: $ra-var-icon-raven;\n}\n\n.#{$ra-css-prefix}-reactor:before {\n  content: $ra-var-icon-reactor;\n}\n\n.#{$ra-css-prefix}-recycle:before {\n  content: $ra-var-icon-recycle;\n}\n\n.#{$ra-css-prefix}-regeneration:before {\n  content: $ra-var-icon-regeneration;\n}\n\n.#{$ra-css-prefix}-relic-blade:before {\n  content: $ra-var-icon-relic-blade;\n}\n\n.#{$ra-css-prefix}-repair:before {\n  content: $ra-var-icon-repair;\n}\n\n.#{$ra-css-prefix}-reverse:before {\n  content: $ra-var-icon-reverse;\n}\n\n.#{$ra-css-prefix}-revolver:before {\n  content: $ra-var-icon-revolver;\n}\n\n.#{$ra-css-prefix}-rifle:before {\n  content: $ra-var-icon-rifle;\n}\n\n.#{$ra-css-prefix}-ringing-bell:before {\n  content: $ra-var-icon-ringing-bell;\n}\n\n.#{$ra-css-prefix}-roast-chicken:before {\n  content: $ra-var-icon-roast-chicken;\n}\n\n.#{$ra-css-prefix}-robot-arm:before {\n  content: $ra-var-icon-robot-arm;\n}\n\n.#{$ra-css-prefix}-round-bottom-flask:before {\n  content: $ra-var-icon-round-bottom-flask;\n}\n\n.#{$ra-css-prefix}-round-shield:before {\n  content: $ra-var-icon-round-shield;\n}\n\n.#{$ra-css-prefix}-rss:before {\n  content: $ra-var-icon-rss;\n}\n\n.#{$ra-css-prefix}-rune-stone:before {\n  content: $ra-var-icon-rune-stone;\n}\n\n.#{$ra-css-prefix}-sagittarius:before {\n  content: $ra-var-icon-sagittarius;\n}\n\n.#{$ra-css-prefix}-sapphire:before {\n  content: $ra-var-icon-sapphire;\n}\n\n.#{$ra-css-prefix}-satellite:before {\n  content: $ra-var-icon-satellite;\n}\n\n.#{$ra-css-prefix}-save:before {\n  content: $ra-var-icon-save;\n}\n\n.#{$ra-css-prefix}-scorpio:before {\n  content: $ra-var-icon-scorpio;\n}\n\n.#{$ra-css-prefix}-scroll-unfurled:before {\n  content: $ra-var-icon-scroll-unfurled;\n}\n\n.#{$ra-css-prefix}-scythe:before {\n  content: $ra-var-icon-scythe;\n}\n\n.#{$ra-css-prefix}-sea-serpent:before {\n  content: $ra-var-icon-sea-serpent;\n}\n\n.#{$ra-css-prefix}-seagull:before {\n  content: $ra-var-icon-seagull;\n}\n\n.#{$ra-css-prefix}-shark:before {\n  content: $ra-var-icon-shark;\n}\n\n.#{$ra-css-prefix}-sheep:before {\n  content: $ra-var-icon-sheep;\n}\n\n.#{$ra-css-prefix}-sheriff:before {\n  content: $ra-var-icon-sheriff;\n}\n\n.#{$ra-css-prefix}-shield:before {\n  content: $ra-var-icon-shield;\n}\n\n.#{$ra-css-prefix}-ship-emblem:before {\n  content: $ra-var-icon-ship-emblem;\n}\n\n.#{$ra-css-prefix}-shoe-prints:before {\n  content: $ra-var-icon-shoe-prints;\n}\n\n.#{$ra-css-prefix}-shot-through-the-heart:before {\n  content: $ra-var-icon-shot-through-the-heart;\n}\n\n.#{$ra-css-prefix}-shotgun-shell:before {\n  content: $ra-var-icon-shotgun-shell;\n}\n\n.#{$ra-css-prefix}-shovel:before {\n  content: $ra-var-icon-shovel;\n}\n\n.#{$ra-css-prefix}-shuriken:before {\n  content: $ra-var-icon-shuriken;\n}\n\n.#{$ra-css-prefix}-sickle:before {\n  content: $ra-var-icon-sickle;\n}\n\n.#{$ra-css-prefix}-sideswipe:before {\n  content: $ra-var-icon-sideswipe;\n}\n\n.#{$ra-css-prefix}-site:before {\n  content: $ra-var-icon-site;\n}\n\n.#{$ra-css-prefix}-skull:before {\n  content: $ra-var-icon-skull;\n}\n\n.#{$ra-css-prefix}-skull-trophy:before {\n  content: $ra-var-icon-skull-trophy;\n}\n\n.#{$ra-css-prefix}-slash-ring:before {\n  content: $ra-var-icon-slash-ring;\n}\n\n.#{$ra-css-prefix}-small-fire:before {\n  content: $ra-var-icon-small-fire;\n}\n\n.#{$ra-css-prefix}-snail:before {\n  content: $ra-var-icon-snail;\n}\n\n.#{$ra-css-prefix}-snake:before {\n  content: $ra-var-icon-snake;\n}\n\n.#{$ra-css-prefix}-snorkel:before {\n  content: $ra-var-icon-snorkel;\n}\n\n.#{$ra-css-prefix}-snowflake:before {\n  content: $ra-var-icon-snowflake;\n}\n\n.#{$ra-css-prefix}-soccer-ball:before {\n  content: $ra-var-icon-soccer-ball;\n}\n\n.#{$ra-css-prefix}-spades:before {\n  content: $ra-var-icon-spades;\n}\n\n.#{$ra-css-prefix}-spades-card:before {\n  content: $ra-var-icon-spades-card;\n}\n\n.#{$ra-css-prefix}-spawn-node:before {\n  content: $ra-var-icon-spawn-node;\n}\n\n.#{$ra-css-prefix}-spear-head:before {\n  content: $ra-var-icon-spear-head;\n}\n\n.#{$ra-css-prefix}-speech-bubble:before {\n  content: $ra-var-icon-speech-bubble;\n}\n\n.#{$ra-css-prefix}-speech-bubbles:before {\n  content: $ra-var-icon-speech-bubbles;\n}\n\n.#{$ra-css-prefix}-spider-face:before {\n  content: $ra-var-icon-spider-face;\n}\n\n.#{$ra-css-prefix}-spikeball:before {\n  content: $ra-var-icon-spikeball;\n}\n\n.#{$ra-css-prefix}-spiked-mace:before {\n  content: $ra-var-icon-spiked-mace;\n}\n\n.#{$ra-css-prefix}-spiked-tentacle:before {\n  content: $ra-var-icon-spiked-tentacle;\n}\n\n.#{$ra-css-prefix}-spinning-sword:before {\n  content: $ra-var-icon-spinning-sword;\n}\n\n.#{$ra-css-prefix}-spiral-shell:before {\n  content: $ra-var-icon-spiral-shell;\n}\n\n.#{$ra-css-prefix}-splash:before {\n  content: $ra-var-icon-splash;\n}\n\n.#{$ra-css-prefix}-spray-can:before {\n  content: $ra-var-icon-spray-can;\n}\n\n.#{$ra-css-prefix}-sprout:before {\n  content: $ra-var-icon-sprout;\n}\n\n.#{$ra-css-prefix}-sprout-emblem:before {\n  content: $ra-var-icon-sprout-emblem;\n}\n\n.#{$ra-css-prefix}-stopwatch:before {\n  content: $ra-var-icon-stopwatch;\n}\n\n.#{$ra-css-prefix}-suckered-tentacle:before {\n  content: $ra-var-icon-suckered-tentacle;\n}\n\n.#{$ra-css-prefix}-suits:before {\n  content: $ra-var-icon-suits;\n}\n\n.#{$ra-css-prefix}-sun:before {\n  content: $ra-var-icon-sun;\n}\n\n.#{$ra-css-prefix}-sun-symbol:before {\n  content: $ra-var-icon-sun-symbol;\n}\n\n.#{$ra-css-prefix}-sunbeams:before {\n  content: $ra-var-icon-sunbeams;\n}\n\n.#{$ra-css-prefix}-super-mushroom:before {\n  content: $ra-var-icon-super-mushroom;\n}\n\n.#{$ra-css-prefix}-supersonic-arrow:before {\n  content: $ra-var-icon-supersonic-arrow;\n}\n\n.#{$ra-css-prefix}-surveillance-camera:before {\n  content: $ra-var-icon-surveillance-camera;\n}\n\n.#{$ra-css-prefix}-syringe:before {\n  content: $ra-var-icon-syringe;\n}\n\n.#{$ra-css-prefix}-target-arrows:before {\n  content: $ra-var-icon-target-arrows;\n}\n\n.#{$ra-css-prefix}-target-laser:before {\n  content: $ra-var-icon-target-laser;\n}\n\n.#{$ra-css-prefix}-targeted:before {\n  content: $ra-var-icon-targeted;\n}\n\n.#{$ra-css-prefix}-taurus:before {\n  content: $ra-var-icon-taurus;\n}\n\n.#{$ra-css-prefix}-telescope:before {\n  content: $ra-var-icon-telescope;\n}\n\n.#{$ra-css-prefix}-tentacle:before {\n  content: $ra-var-icon-tentacle;\n}\n\n.#{$ra-css-prefix}-tesla:before {\n  content: $ra-var-icon-tesla;\n}\n\n.#{$ra-css-prefix}-thorn-arrow:before {\n  content: $ra-var-icon-thorn-arrow;\n}\n\n.#{$ra-css-prefix}-thorny-vine:before {\n  content: $ra-var-icon-thorny-vine;\n}\n\n.#{$ra-css-prefix}-three-keys:before {\n  content: $ra-var-icon-three-keys;\n}\n\n.#{$ra-css-prefix}-tic-tac-toe:before {\n  content: $ra-var-icon-tic-tac-toe;\n}\n\n.#{$ra-css-prefix}-toast:before {\n  content: $ra-var-icon-toast;\n}\n\n.#{$ra-css-prefix}-tombstone:before {\n  content: $ra-var-icon-tombstone;\n}\n\n.#{$ra-css-prefix}-tooth:before {\n  content: $ra-var-icon-tooth;\n}\n\n.#{$ra-css-prefix}-torch:before {\n  content: $ra-var-icon-torch;\n}\n\n.#{$ra-css-prefix}-tower:before {\n  content: $ra-var-icon-tower;\n}\n\n.#{$ra-css-prefix}-trail:before {\n  content: $ra-var-icon-trail;\n}\n\n.#{$ra-css-prefix}-trefoil-lily:before {\n  content: $ra-var-icon-trefoil-lily;\n}\n\n.#{$ra-css-prefix}-trident:before {\n  content: $ra-var-icon-trident;\n}\n\n.#{$ra-css-prefix}-triforce:before {\n  content: $ra-var-icon-triforce;\n}\n\n.#{$ra-css-prefix}-trophy:before {\n  content: $ra-var-icon-trophy;\n}\n\n.#{$ra-css-prefix}-turd:before {\n  content: $ra-var-icon-turd;\n}\n\n.#{$ra-css-prefix}-two-dragons:before {\n  content: $ra-var-icon-two-dragons;\n}\n\n.#{$ra-css-prefix}-two-hearts:before {\n  content: $ra-var-icon-two-hearts;\n}\n\n.#{$ra-css-prefix}-uncertainty:before {\n  content: $ra-var-icon-uncertainty;\n}\n\n.#{$ra-css-prefix}-underhand:before {\n  content: $ra-var-icon-underhand;\n}\n\n.#{$ra-css-prefix}-unplugged:before {\n  content: $ra-var-icon-unplugged;\n}\n\n.#{$ra-css-prefix}-vase:before {\n  content: $ra-var-icon-vase;\n}\n\n.#{$ra-css-prefix}-venomous-snake:before {\n  content: $ra-var-icon-venomous-snake;\n}\n\n.#{$ra-css-prefix}-vest:before {\n  content: $ra-var-icon-vest;\n}\n\n.#{$ra-css-prefix}-vial:before {\n  content: $ra-var-icon-vial;\n}\n\n.#{$ra-css-prefix}-vine-whip:before {\n  content: $ra-var-icon-vine-whip;\n}\n\n.#{$ra-css-prefix}-virgo:before {\n  content: $ra-var-icon-virgo;\n}\n\n.#{$ra-css-prefix}-water-drop:before {\n  content: $ra-var-icon-water-drop;\n}\n\n.#{$ra-css-prefix}-wifi:before {\n  content: $ra-var-icon-wifi;\n}\n\n.#{$ra-css-prefix}-wireless-signal:before {\n  content: $ra-var-icon-wireless-signal;\n}\n\n.#{$ra-css-prefix}-wolf-head:before {\n  content: $ra-var-icon-wolf-head;\n}\n\n.#{$ra-css-prefix}-wolf-howl:before {\n  content: $ra-var-icon-wolf-howl;\n}\n\n.#{$ra-css-prefix}-wooden-sign:before {\n  content: $ra-var-icon-wooden-sign;\n}\n\n.#{$ra-css-prefix}-wrench:before {\n  content: $ra-var-icon-wrench;\n}\n\n.#{$ra-css-prefix}-wyvern:before {\n  content: $ra-var-icon-wyvern;\n}\n\n.#{$ra-css-prefix}-x-mark:before {\n  content: $ra-var-icon-x-mark;\n}\n\n.#{$ra-css-prefix}-zebra-shield:before {\n  content: $ra-var-icon-zebra-shield;\n}\n\n.#{$ra-css-prefix}-arcane-mask:before {\n  content: $ra-var-icon-arcane-mask;\n}\n\n.#{$ra-css-prefix}-aquarius:before {\n  content: $ra-var-icon-aquarius;\n}\n\n.#{$ra-css-prefix}-apple:before {\n  content: $ra-var-icon-apple;\n}\n\n.#{$ra-css-prefix}-anvil:before {\n  content: $ra-var-icon-anvil;\n}\n\n.#{$ra-css-prefix}-ankh:before {\n  content: $ra-var-icon-ankh;\n}\n\n.#{$ra-css-prefix}-angel-wings:before {\n  content: $ra-var-icon-angel-wings;\n}\n\n.#{$ra-css-prefix}-anchor:before {\n  content: $ra-var-icon-anchor;\n}\n\n.#{$ra-css-prefix}-ammo-bag:before {\n  content: $ra-var-icon-ammo-bag;\n}\n\n.#{$ra-css-prefix}-alligator-clip:before {\n  content: $ra-var-icon-alligator-clip;\n}\n\n.#{$ra-css-prefix}-all-for-one:before {\n  content: $ra-var-icon-all-for-one;\n}\n\n.#{$ra-css-prefix}-alien-fire:before {\n  content: $ra-var-icon-alien-fire;\n}\n\n.#{$ra-css-prefix}-acorn:before {\n  content: $ra-var-icon-acorn;\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_larger.scss",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$ra-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n\n.#{$ra-css-prefix}-2x { font-size: 2em; }\n.#{$ra-css-prefix}-3x { font-size: 3em; }\n.#{$ra-css-prefix}-4x { font-size: 4em; }\n.#{$ra-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_list.scss",
    "content": "// List Icons\n// -------------------------\n\n.#{$ra-css-prefix}-ul {\n  list-style-type: none;\n  margin-left: $ra-li-width;\n  padding-left: 0;\n  > li { position: relative; }\n}\n\n.#{$ra-css-prefix}-li {\n  left: -$ra-li-width;\n  position: absolute;\n  text-align: center;\n  top: (2em / 14);\n  width: $ra-li-width;\n\n  &.#{$ra-css-prefix}-lg {\n    left: -$ra-li-width + (4em / 14);\n  }\n\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_mixins.scss",
    "content": "// Mixins\n// --------------------------\n\n@mixin ra-icon() {\n  display: inline-block;\n  font: normal normal normal 14px/1 RPGAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n@mixin ra-icon-rotate($degrees, $rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});\n  -webkit-transform: rotate($degrees);\n  -ms-transform: rotate($degrees);\n  transform: rotate($degrees);\n}\n\n@mixin ra-icon-flip($horiz, $vert, $rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});\n  -webkit-transform: scale($horiz, $vert);\n  -ms-transform: scale($horiz, $vert);\n  transform: scale($horiz, $vert);\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_path.scss",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'RPGAwesome';\n  src: url('#{$ra-font-path}/rpgawesome-webfont.eot?v=#{$ra-version}');\n  src: url('#{$ra-font-path}/rpgawesome-webfont.eot?#iefix&v=#{$ra-version}') format('embedded-opentype'),\n    url('#{$ra-font-path}/rpgawesome-webfont.woff?v=#{$ra-version}') format('woff'),\n    url('#{$ra-font-path}/rpgawesome-webfont.ttf?v=#{$ra-version}') format('truetype'),\n    url('#{$ra-font-path}/rpgawesome-webfont.svg?v=#{$ra-version}#rpg-awesome') format('svg');\n  //src: url('#{$ra-font-path}/RPGAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_rotated-flipped.scss",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$ra-css-prefix}-rotate-90 { @include ra-icon-rotate(90deg, 1);  }\n.#{$ra-css-prefix}-rotate-180 { @include ra-icon-rotate(180deg, 2); }\n.#{$ra-css-prefix}-rotate-270 { @include ra-icon-rotate(270deg, 3); }\n\n.#{$ra-css-prefix}-flip-horizontal { @include ra-icon-flip(-1, 1, 0); }\n.#{$ra-css-prefix}-flip-vertical { @include ra-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$ra-css-prefix}-rotate-90,\n:root .#{$ra-css-prefix}-rotate-180,\n:root .#{$ra-css-prefix}-rotate-270,\n:root .#{$ra-css-prefix}-flip-horizontal,\n:root .#{$ra-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_spinning.scss",
    "content": "// Spinning Icons\n// --------------------------\n\n.#{$ra-css-prefix}-spin {\n  -webkit-animation: ra-spin 2s infinite linear;\n  animation: ra-spin 2s infinite linear;\n}\n\n@-webkit-keyframes ra-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes ra-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_stacked.scss",
    "content": "// Stacked Icons\n// -------------------------\n\n.#{$ra-css-prefix}-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em;\n}\n\n.#{$ra-css-prefix}-stack-1x, .#{$ra-css-prefix}-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%;\n}\n\n.#{$ra-css-prefix}-stack-1x { line-height: inherit; }\n.#{$ra-css-prefix}-stack-2x { font-size: 2em; }\n.#{$ra-css-prefix}-inverse { color: $ra-inverse; }\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/_variables.scss",
    "content": "// Variables\n// --------------------------\n\n$ra-font-path:        '../fonts' !default;\n$ra-css-prefix:       ra !default;\n$ra-version:          '0.1.0' !default;\n$ra-border-color:     #eee !default;\n$ra-inverse:          #fff !default;\n$ra-li-width:         (30em / 14) !default;\n\n$ra-var-icon-acid: '\\e900';\n$ra-var-icon-acorn: '\\e901';\n$ra-var-icon-alien-fire: '\\e902';\n$ra-var-icon-all-for-one: '\\e903';\n$ra-var-icon-alligator-clip: '\\e904';\n$ra-var-icon-ammo-bag: '\\e905';\n$ra-var-icon-anchor: '\\e906';\n$ra-var-icon-angel-wings: '\\e907';\n$ra-var-icon-ankh: '\\e908';\n$ra-var-icon-anvil: '\\e909';\n$ra-var-icon-apple: '\\e90a';\n$ra-var-icon-aquarius: '\\e90b';\n$ra-var-icon-arcane-mask: '\\e90c';\n$ra-var-icon-archer: '\\e90d';\n$ra-var-icon-archery-target: '\\e90e';\n$ra-var-icon-arena: '\\e90f';\n$ra-var-icon-aries: '\\e910';\n$ra-var-icon-arrow-cluster: '\\e911';\n$ra-var-icon-arrow-flights: '\\e912';\n$ra-var-icon-arson: '\\e913';\n$ra-var-icon-aura: '\\e914';\n$ra-var-icon-aware: '\\e915';\n$ra-var-icon-axe-swing: '\\e916';\n$ra-var-icon-axe: '\\e917';\n$ra-var-icon-ball: '\\e918';\n$ra-var-icon-barbed-arrow: '\\e919';\n$ra-var-icon-barrier: '\\e91a';\n$ra-var-icon-bat-sword: '\\e91b';\n$ra-var-icon-battered-axe: '\\e91c';\n$ra-var-icon-batteries: '\\e91d';\n$ra-var-icon-battery-0: '\\e91e';\n$ra-var-icon-battery-25: '\\e91f';\n$ra-var-icon-battery-50: '\\e920';\n$ra-var-icon-battery-75: '\\e921';\n$ra-var-icon-battery-100: '\\e922';\n$ra-var-icon-battery-black: '\\e923';\n$ra-var-icon-battery-negative: '\\e924';\n$ra-var-icon-battery-positive: '\\e925';\n$ra-var-icon-battery-white: '\\e926';\n$ra-var-icon-batwings: '\\e927';\n$ra-var-icon-beam-wake: '\\e928';\n$ra-var-icon-bear-trap: '\\e929';\n$ra-var-icon-beer: '\\e92a';\n$ra-var-icon-beetle: '\\e92b';\n$ra-var-icon-bell: '\\e92c';\n$ra-var-icon-biohazard: '\\e92d';\n$ra-var-icon-bird-claw: '\\e92e';\n$ra-var-icon-bird-mask: '\\e92f';\n$ra-var-icon-blade-bite: '\\e930';\n$ra-var-icon-blast: '\\e931';\n$ra-var-icon-blaster: '\\e932';\n$ra-var-icon-bleeding-eye: '\\e933';\n$ra-var-icon-bleeding-hearts: '\\e934';\n$ra-var-icon-bolt-shield: '\\e935';\n$ra-var-icon-bomb-explosion: '\\e936';\n$ra-var-icon-bombs: '\\e937';\n$ra-var-icon-bone-bite: '\\e938';\n$ra-var-icon-bone-knife: '\\e939';\n$ra-var-icon-book: '\\e93a';\n$ra-var-icon-boomerang: '\\e93b';\n$ra-var-icon-boot-stomp: '\\e93c';\n$ra-var-icon-bottle-vapors: '\\e93d';\n$ra-var-icon-bottled-bolt: '\\e93e';\n$ra-var-icon-bottom-right: '\\e93f';\n$ra-var-icon-bowie-knife: '\\e940';\n$ra-var-icon-bowling-pin: '\\e941';\n$ra-var-icon-brain-freeze: '\\e942';\n$ra-var-icon-brandy-bottle: '\\e943';\n$ra-var-icon-bridge: '\\e944';\n$ra-var-icon-broadhead-arrow: '\\e945';\n$ra-var-icon-broadsword: '\\e946';\n$ra-var-icon-broken-bone: '\\e947';\n$ra-var-icon-broken-bottle: '\\e948';\n$ra-var-icon-broken-heart: '\\e949';\n$ra-var-icon-broken-shield: '\\e94a';\n$ra-var-icon-broken-skull: '\\e94b';\n$ra-var-icon-bubbling-potion: '\\e94c';\n$ra-var-icon-bullets: '\\e94d';\n$ra-var-icon-burning-book: '\\e94e';\n$ra-var-icon-burning-embers: '\\e94f';\n$ra-var-icon-burning-eye: '\\e950';\n$ra-var-icon-burning-meteor: '\\e951';\n$ra-var-icon-burst-blob: '\\e952';\n$ra-var-icon-butterfly: '\\e953';\n$ra-var-icon-campfire: '\\e954';\n$ra-var-icon-cancel: '\\e955';\n$ra-var-icon-cancer: '\\e956';\n$ra-var-icon-candle-fire: '\\e957';\n$ra-var-icon-candle: '\\e958';\n$ra-var-icon-cannon-shot: '\\e959';\n$ra-var-icon-capitol: '\\e95a';\n$ra-var-icon-capricorn: '\\e95b';\n$ra-var-icon-carrot: '\\e95c';\n$ra-var-icon-castle-emblem: '\\e95d';\n$ra-var-icon-castle-flag: '\\e95e';\n$ra-var-icon-cat: '\\e95f';\n$ra-var-icon-chain: '\\e960';\n$ra-var-icon-cheese: '\\e961';\n$ra-var-icon-chemical-arrow: '\\e962';\n$ra-var-icon-chessboard: '\\e963';\n$ra-var-icon-chicken-leg: '\\e964';\n$ra-var-icon-circle-of-circles: '\\e965';\n$ra-var-icon-circular-saw: '\\e966';\n$ra-var-icon-circular-shield: '\\e967';\n$ra-var-icon-cloak-and-dagger: '\\e968';\n$ra-var-icon-clockwork: '\\e969';\n$ra-var-icon-clover: '\\e96a';\n$ra-var-icon-clovers-card: '\\e96b';\n$ra-var-icon-clovers: '\\e96c';\n$ra-var-icon-cluster-bomb: '\\e96d';\n$ra-var-icon-coffee-mug: '\\e96e';\n$ra-var-icon-cog-wheel: '\\e96f';\n$ra-var-icon-cog: '\\e970';\n$ra-var-icon-cold-heart: '\\e971';\n$ra-var-icon-compass: '\\e972';\n$ra-var-icon-corked-tube: '\\e973';\n$ra-var-icon-crab-claw: '\\e974';\n$ra-var-icon-cracked-helm: '\\e975';\n$ra-var-icon-cracked-shield: '\\e976';\n$ra-var-icon-croc-sword: '\\e977';\n$ra-var-icon-crossbow: '\\e978';\n$ra-var-icon-crossed-axes: '\\e979';\n$ra-var-icon-crossed-bones: '\\e97a';\n$ra-var-icon-crossed-pistols: '\\e97b';\n$ra-var-icon-crossed-sabres: '\\e97c';\n$ra-var-icon-crossed-swords: '\\e97d';\n$ra-var-icon-crown-of-thorns: '\\e97e';\n$ra-var-icon-crown: '\\e97f';\n$ra-var-icon-crowned-heart: '\\e980';\n$ra-var-icon-crush: '\\e981';\n$ra-var-icon-crystal-ball: '\\e982';\n$ra-var-icon-crystal-cluster: '\\e983';\n$ra-var-icon-crystal-wand: '\\e984';\n$ra-var-icon-crystals: '\\e985';\n$ra-var-icon-cubes: '\\e986';\n$ra-var-icon-cut-palm: '\\e987';\n$ra-var-icon-cycle: '\\e988';\n$ra-var-icon-daggers: '\\e989';\n$ra-var-icon-daisy: '\\e98a';\n$ra-var-icon-dead-tree: '\\e98b';\n$ra-var-icon-death-skull: '\\e98c';\n$ra-var-icon-decapitation: '\\e98d';\n$ra-var-icon-defibrillate: '\\e98e';\n$ra-var-icon-demolish: '\\e98f';\n$ra-var-icon-dervish-swords: '\\e990';\n$ra-var-icon-desert-skull: '\\e991';\n$ra-var-icon-diamond: '\\e992';\n$ra-var-icon-diamonds-card: '\\e993';\n$ra-var-icon-diamonds: '\\e994';\n$ra-var-icon-dice-five: '\\e995';\n$ra-var-icon-dice-four: '\\e996';\n$ra-var-icon-dice-one: '\\e997';\n$ra-var-icon-dice-six: '\\e998';\n$ra-var-icon-dice-three: '\\e999';\n$ra-var-icon-dice-two: '\\e99a';\n$ra-var-icon-dinosaur: '\\e99b';\n$ra-var-icon-divert: '\\e99c';\n$ra-var-icon-diving-dagger: '\\e99d';\n$ra-var-icon-double-team: '\\e99e';\n$ra-var-icon-doubled: '\\e99f';\n$ra-var-icon-dragon-breath: '\\e9a0';\n$ra-var-icon-dragon-wing: '\\e9a1';\n$ra-var-icon-dragon: '\\e9a2';\n$ra-var-icon-dragonfly: '\\e9a3';\n$ra-var-icon-drill: '\\e9a4';\n$ra-var-icon-dripping-blade: '\\e9a5';\n$ra-var-icon-dripping-knife: '\\e9a6';\n$ra-var-icon-dripping-sword: '\\e9a7';\n$ra-var-icon-droplet-splash: '\\e9a8';\n$ra-var-icon-droplet: '\\e9a9';\n$ra-var-icon-droplets: '\\e9aa';\n$ra-var-icon-duel: '\\e9ab';\n$ra-var-icon-egg-pod: '\\e9ac';\n$ra-var-icon-egg: '\\e9ad';\n$ra-var-icon-eggplant: '\\e9ae';\n$ra-var-icon-emerald: '\\e9af';\n$ra-var-icon-energise: '\\e9b0';\n$ra-var-icon-explosion: '\\e9b1';\n$ra-var-icon-explosive-materials: '\\e9b2';\n$ra-var-icon-eye-monster: '\\e9b3';\n$ra-var-icon-eye-shield: '\\e9b4';\n$ra-var-icon-eyeball: '\\e9b5';\n$ra-var-icon-fairy-wand: '\\e9b6';\n$ra-var-icon-fairy: '\\e9b7';\n$ra-var-icon-fall-down: '\\e9b8';\n$ra-var-icon-falling: '\\e9b9';\n$ra-var-icon-fast-ship: '\\e9ba';\n$ra-var-icon-feather-wing: '\\e9bb';\n$ra-var-icon-feathered-wing: '\\e9bc';\n$ra-var-icon-fedora: '\\e9bd';\n$ra-var-icon-fire-bomb: '\\e9be';\n$ra-var-icon-fire-breath: '\\e9bf';\n$ra-var-icon-fire-ring: '\\e9c0';\n$ra-var-icon-fire-shield: '\\e9c1';\n$ra-var-icon-fire-symbol: '\\e9c2';\n$ra-var-icon-fire: '\\e9c3';\n$ra-var-icon-fireball-sword: '\\e9c4';\n$ra-var-icon-fish: '\\e9c5';\n$ra-var-icon-fizzing-flask: '\\e9c6';\n$ra-var-icon-flame-symbol: '\\e9c7';\n$ra-var-icon-flaming-arrow: '\\e9c8';\n$ra-var-icon-flaming-claw: '\\e9c9';\n$ra-var-icon-flaming-trident: '\\e9ca';\n$ra-var-icon-flask: '\\e9cb';\n$ra-var-icon-flat-hammer: '\\e9cc';\n$ra-var-icon-flower: '\\e9cd';\n$ra-var-icon-flowers: '\\e9ce';\n$ra-var-icon-fluffy-swirl: '\\e9cf';\n$ra-var-icon-focused-lightning: '\\e9d0';\n$ra-var-icon-food-chain: '\\e9d1';\n$ra-var-icon-footprint: '\\e9d2';\n$ra-var-icon-forging: '\\e9d3';\n$ra-var-icon-forward: '\\e9d4';\n$ra-var-icon-fox: '\\e9d5';\n$ra-var-icon-frost-emblem: '\\e9d6';\n$ra-var-icon-frostfire: '\\e9d7';\n$ra-var-icon-frozen-arrow: '\\e9d8';\n$ra-var-icon-gamepad-cross: '\\e9d9';\n$ra-var-icon-gavel: '\\e9da';\n$ra-var-icon-gear-hammer: '\\e9db';\n$ra-var-icon-gear-heart: '\\e9dc';\n$ra-var-icon-gears: '\\e9dd';\n$ra-var-icon-gecko: '\\e9de';\n$ra-var-icon-gem-pendant: '\\e9df';\n$ra-var-icon-gem: '\\e9e0';\n$ra-var-icon-gemini: '\\e9e1';\n$ra-var-icon-glass-heart: '\\e9e2';\n$ra-var-icon-gloop: '\\e9e3';\n$ra-var-icon-gold-bar: '\\e9e4';\n$ra-var-icon-grappling-hook: '\\e9e5';\n$ra-var-icon-grass-patch: '\\e9e6';\n$ra-var-icon-grass: '\\e9e7';\n$ra-var-icon-grenade: '\\e9e8';\n$ra-var-icon-groundbreaker: '\\e9e9';\n$ra-var-icon-guarded-tower: '\\e9ea';\n$ra-var-icon-guillotine: '\\e9eb';\n$ra-var-icon-halberd: '\\e9ec';\n$ra-var-icon-hammer-drop: '\\e9ed';\n$ra-var-icon-hammer: '\\e9ee';\n$ra-var-icon-hand-emblem: '\\e9ef';\n$ra-var-icon-hand-saw: '\\e9f0';\n$ra-var-icon-hand: '\\e9f1';\n$ra-var-icon-harpoon-trident: '\\e9f2';\n$ra-var-icon-health-decrease: '\\e9f3';\n$ra-var-icon-health-increase: '\\e9f4';\n$ra-var-icon-health: '\\e9f5';\n$ra-var-icon-heart-bottle: '\\e9f6';\n$ra-var-icon-heart-tower: '\\e9f7';\n$ra-var-icon-heartburn: '\\e9f8';\n$ra-var-icon-hearts-card: '\\e9f9';\n$ra-var-icon-hearts: '\\e9fa';\n$ra-var-icon-heat-haze: '\\e9fb';\n$ra-var-icon-heavy-fall: '\\e9fc';\n$ra-var-icon-heavy-shield: '\\e9fd';\n$ra-var-icon-helmet: '\\e9fe';\n$ra-var-icon-help: '\\e9ff';\n$ra-var-icon-hive-emblem: '\\ea00';\n$ra-var-icon-hole-ladder: '\\ea01';\n$ra-var-icon-honeycomb: '\\ea02';\n$ra-var-icon-hood: '\\ea03';\n$ra-var-icon-horn-call: '\\ea04';\n$ra-var-icon-horns: '\\ea05';\n$ra-var-icon-horseshoe: '\\ea06';\n$ra-var-icon-hospital-cross: '\\ea07';\n$ra-var-icon-hot-surface: '\\ea08';\n$ra-var-icon-hourglass: '\\ea09';\n$ra-var-icon-hydra-shot: '\\ea0a';\n$ra-var-icon-hydra: '\\ea0b';\n$ra-var-icon-ice-cube: '\\ea0c';\n$ra-var-icon-implosion: '\\ea0d';\n$ra-var-icon-incense: '\\ea0e';\n$ra-var-icon-insect-jaws: '\\ea0f';\n$ra-var-icon-interdiction: '\\ea10';\n$ra-var-icon-jetpack: '\\ea11';\n$ra-var-icon-jigsaw-piece: '\\ea12';\n$ra-var-icon-kaleidoscope: '\\ea13';\n$ra-var-icon-kettlebell: '\\ea14';\n$ra-var-icon-key-basic: '\\ea15';\n$ra-var-icon-key: '\\ea16';\n$ra-var-icon-kitchen-knives: '\\ea17';\n$ra-var-icon-knife-fork: '\\ea18';\n$ra-var-icon-knife: '\\ea19';\n$ra-var-icon-knight-helmet: '\\ea1a';\n$ra-var-icon-kunai: '\\ea1b';\n$ra-var-icon-lantern-flame: '\\ea1c';\n$ra-var-icon-large-hammer: '\\ea1d';\n$ra-var-icon-laser-blast: '\\ea1e';\n$ra-var-icon-laser-site: '\\ea1f';\n$ra-var-icon-lava: '\\ea20';\n$ra-var-icon-leaf: '\\ea21';\n$ra-var-icon-leo: '\\ea22';\n$ra-var-icon-level-four-advanced: '\\ea23';\n$ra-var-icon-level-four: '\\ea24';\n$ra-var-icon-level-three-advanced: '\\ea25';\n$ra-var-icon-level-three: '\\ea26';\n$ra-var-icon-level-two-advanced: '\\ea27';\n$ra-var-icon-level-two: '\\ea28';\n$ra-var-icon-lever: '\\ea29';\n$ra-var-icon-libra: '\\ea2a';\n$ra-var-icon-light-bulb: '\\ea2b';\n$ra-var-icon-lighthouse: '\\ea2c';\n$ra-var-icon-lightning-bolt: '\\ea2d';\n$ra-var-icon-lightning-storm: '\\ea2e';\n$ra-var-icon-lightning-sword: '\\ea2f';\n$ra-var-icon-lightning-trio: '\\ea30';\n$ra-var-icon-lightning: '\\ea31';\n$ra-var-icon-lion: '\\ea32';\n$ra-var-icon-lit-candelabra: '\\ea33';\n$ra-var-icon-load: '\\ea34';\n$ra-var-icon-locked-fortress: '\\ea35';\n$ra-var-icon-love-howl: '\\ea36';\n$ra-var-icon-maggot: '\\ea37';\n$ra-var-icon-magnet: '\\ea38';\n$ra-var-icon-mass-driver: '\\ea39';\n$ra-var-icon-match: '\\ea3a';\n$ra-var-icon-meat-hook: '\\ea3b';\n$ra-var-icon-meat: '\\ea3c';\n$ra-var-icon-medical-pack: '\\ea3d';\n$ra-var-icon-metal-gate: '\\ea3e';\n$ra-var-icon-microphone: '\\ea3f';\n$ra-var-icon-mine-wagon: '\\ea40';\n$ra-var-icon-mining-diamonds: '\\ea41';\n$ra-var-icon-mirror: '\\ea42';\n$ra-var-icon-monster-skull: '\\ea43';\n$ra-var-icon-moon-sun: '\\ea45';\n$ra-var-icon-mountains: '\\ea44';\n$ra-var-icon-mp5: '\\ea46';\n$ra-var-icon-muscle-fat: '\\ea47';\n$ra-var-icon-muscle-up: '\\ea48';\n$ra-var-icon-musket: '\\ea49';\n$ra-var-icon-nails: '\\ea4a';\n$ra-var-icon-nodular: '\\ea4b';\n$ra-var-icon-noose: '\\ea4c';\n$ra-var-icon-nuclear: '\\ea4d';\n$ra-var-icon-ocarina: '\\ea4e';\n$ra-var-icon-ocean-emblem: '\\ea4f';\n$ra-var-icon-octopus: '\\ea50';\n$ra-var-icon-omega: '\\ea51';\n$ra-var-icon-on-target: '\\ea52';\n$ra-var-icon-ophiuchus: '\\ea53';\n$ra-var-icon-overhead: '\\ea54';\n$ra-var-icon-overmind: '\\ea55';\n$ra-var-icon-palm-tree: '\\ea56';\n$ra-var-icon-pawn: '\\ea57';\n$ra-var-icon-pawprint: '\\ea58';\n$ra-var-icon-perspective-dice-five: '\\ea59';\n$ra-var-icon-perspective-dice-four: '\\ea5a';\n$ra-var-icon-perspective-dice-one: '\\ea5b';\n$ra-var-icon-perspective-dice-random: '\\ea5c';\n$ra-var-icon-perspective-dice-two: '\\ea5d';\n$ra-var-icon-perspective-dice-six: '\\ea5e';\n$ra-var-icon-perspective-dice-three: '\\ea5f';\n$ra-var-icon-pill: '\\ea60';\n$ra-var-icon-pills: '\\ea61';\n$ra-var-icon-pine-tree: '\\ea62';\n$ra-var-icon-ping-pong: '\\ea63';\n$ra-var-icon-pisces: '\\ea64';\n$ra-var-icon-plain-dagger: '\\ea65';\n$ra-var-icon-player-despair: '\\ea66';\n$ra-var-icon-player-dodge: '\\ea67';\n$ra-var-icon-player-king: '\\ea68';\n$ra-var-icon-player-lift: '\\ea69';\n$ra-var-icon-player-pain: '\\ea6a';\n$ra-var-icon-player-pyromaniac: '\\ea6b';\n$ra-var-icon-player-shot: '\\ea6c';\n$ra-var-icon-player-teleport: '\\ea6d';\n$ra-var-icon-player-thunder-struck: '\\ea6e';\n$ra-var-icon-player: '\\ea6f';\n$ra-var-icon-podium: '\\ea70';\n$ra-var-icon-poison-cloud: '\\ea71';\n$ra-var-icon-potion: '\\ea72';\n$ra-var-icon-pyramids: '\\ea73';\n$ra-var-icon-queen-crown: '\\ea74';\n$ra-var-icon-quill-ink: '\\ea75';\n$ra-var-icon-rabbit: '\\ea76';\n$ra-var-icon-radar-dish: '\\ea77';\n$ra-var-icon-radial-balance: '\\ea78';\n$ra-var-icon-radioactive: '\\ea79';\n$ra-var-icon-raven: '\\ea7a';\n$ra-var-icon-reactor: '\\ea7b';\n$ra-var-icon-recycle: '\\ea7c';\n$ra-var-icon-regeneration: '\\ea7d';\n$ra-var-icon-relic-blade: '\\ea7e';\n$ra-var-icon-repair: '\\ea7f';\n$ra-var-icon-reverse: '\\ea80';\n$ra-var-icon-revolver: '\\ea81';\n$ra-var-icon-rifle: '\\ea82';\n$ra-var-icon-ringing-bell: '\\ea83';\n$ra-var-icon-roast-chicken: '\\ea84';\n$ra-var-icon-robot-arm: '\\ea85';\n$ra-var-icon-round-bottom-flask: '\\ea86';\n$ra-var-icon-round-shield: '\\ea87';\n$ra-var-icon-rss: '\\ea88';\n$ra-var-icon-rune-stone: '\\ea89';\n$ra-var-icon-sagittarius: '\\ea8a';\n$ra-var-icon-sapphire: '\\ea8b';\n$ra-var-icon-satellite: '\\ea8c';\n$ra-var-icon-save: '\\ea8d';\n$ra-var-icon-scorpio: '\\ea8e';\n$ra-var-icon-scroll-unfurled: '\\ea8f';\n$ra-var-icon-scythe: '\\ea90';\n$ra-var-icon-sea-serpent: '\\ea91';\n$ra-var-icon-seagull: '\\ea92';\n$ra-var-icon-shark: '\\ea93';\n$ra-var-icon-sheep: '\\ea94';\n$ra-var-icon-sheriff: '\\ea95';\n$ra-var-icon-shield: '\\ea96';\n$ra-var-icon-ship-emblem: '\\ea97';\n$ra-var-icon-shoe-prints: '\\ea98';\n$ra-var-icon-shot-through-the-heart: '\\ea99';\n$ra-var-icon-shotgun-shell: '\\ea9a';\n$ra-var-icon-shovel: '\\ea9b';\n$ra-var-icon-shuriken: '\\ea9c';\n$ra-var-icon-sickle: '\\ea9d';\n$ra-var-icon-sideswipe: '\\ea9e';\n$ra-var-icon-site: '\\ea9f';\n$ra-var-icon-skull-trophy: '\\eaa0';\n$ra-var-icon-skull: '\\eaa1';\n$ra-var-icon-slash-ring: '\\eaa2';\n$ra-var-icon-small-fire: '\\eaa3';\n$ra-var-icon-snail: '\\eaa4';\n$ra-var-icon-snake: '\\eaa5';\n$ra-var-icon-snorkel: '\\eaa6';\n$ra-var-icon-snowflake: '\\eaa7';\n$ra-var-icon-soccer-ball: '\\eaa8';\n$ra-var-icon-spades-card: '\\eaa9';\n$ra-var-icon-spades: '\\eaaa';\n$ra-var-icon-spawn-node: '\\eaab';\n$ra-var-icon-spear-head: '\\eaac';\n$ra-var-icon-speech-bubble: '\\eaad';\n$ra-var-icon-speech-bubbles: '\\eaae';\n$ra-var-icon-spider-face: '\\eaaf';\n$ra-var-icon-spikeball: '\\eab0';\n$ra-var-icon-spiked-mace: '\\eab1';\n$ra-var-icon-spiked-tentacle: '\\eab2';\n$ra-var-icon-spinning-sword: '\\eab3';\n$ra-var-icon-spiral-shell: '\\eab4';\n$ra-var-icon-splash: '\\eab5';\n$ra-var-icon-spray-can: '\\eab6';\n$ra-var-icon-sprout-emblem: '\\eab7';\n$ra-var-icon-sprout: '\\eab8';\n$ra-var-icon-stopwatch: '\\eab9';\n$ra-var-icon-suckered-tentacle: '\\eaba';\n$ra-var-icon-suits: '\\eabb';\n$ra-var-icon-sun-symbol: '\\eabc';\n$ra-var-icon-sun: '\\eabd';\n$ra-var-icon-sunbeams: '\\eabe';\n$ra-var-icon-super-mushroom: '\\eabf';\n$ra-var-icon-supersonic-arrow: '\\eac0';\n$ra-var-icon-surveillance-camera: '\\eac1';\n$ra-var-icon-syringe: '\\eac2';\n$ra-var-icon-target-arrows: '\\eac3';\n$ra-var-icon-target-laser: '\\eac4';\n$ra-var-icon-targeted: '\\eac5';\n$ra-var-icon-taurus: '\\eac6';\n$ra-var-icon-telescope: '\\eac7';\n$ra-var-icon-tentacle: '\\eac8';\n$ra-var-icon-tesla: '\\eac9';\n$ra-var-icon-thorn-arrow: '\\eaca';\n$ra-var-icon-thorny-vine: '\\eacb';\n$ra-var-icon-three-keys: '\\eacc';\n$ra-var-icon-tic-tac-toe: '\\eacd';\n$ra-var-icon-toast: '\\eace';\n$ra-var-icon-tombstone: '\\eacf';\n$ra-var-icon-tooth: '\\ead0';\n$ra-var-icon-torch: '\\ead1';\n$ra-var-icon-tower: '\\ead2';\n$ra-var-icon-trail: '\\ead3';\n$ra-var-icon-trefoil-lily: '\\ead4';\n$ra-var-icon-trident: '\\ead5';\n$ra-var-icon-triforce: '\\ead6';\n$ra-var-icon-trophy: '\\ead7';\n$ra-var-icon-turd: '\\ead8';\n$ra-var-icon-two-dragons: '\\ead9';\n$ra-var-icon-two-hearts: '\\eada';\n$ra-var-icon-uncertainty: '\\eadb';\n$ra-var-icon-underhand: '\\eadc';\n$ra-var-icon-unplugged: '\\eadd';\n$ra-var-icon-vase: '\\eade';\n$ra-var-icon-venomous-snake: '\\eadf';\n$ra-var-icon-vest: '\\eae0';\n$ra-var-icon-vial: '\\eae1';\n$ra-var-icon-vine-whip: '\\eae2';\n$ra-var-icon-virgo: '\\eae3';\n$ra-var-icon-water-drop: '\\eae4';\n$ra-var-icon-wifi: '\\eae5';\n$ra-var-icon-wireless-signal: '\\eae6';\n$ra-var-icon-wolf-head: '\\eae7';\n$ra-var-icon-wolf-howl: '\\eae8';\n$ra-var-icon-wooden-sign: '\\eae9';\n$ra-var-icon-wrench: '\\eaea';\n$ra-var-icon-wyvern: '\\eaeb';\n$ra-var-icon-x-mark: '\\eaec';\n$ra-var-icon-zebra-shield: '\\eaed';\n$ra-var-icon-zigzag-leaf: '\\eaee';\n"
  },
  {
    "path": "resources/assets/components/rpg/scss/rpg-awesome.scss",
    "content": "/*!\n * RPG Awesome 0.0.2 by Daniela Howe, Ivan Montiel\n * License - https://github.com/nagoshiashumari/Rpg-Awesome/blob/master/LICENSE.md\n * (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n\n\n@import 'variables';\n@import 'mixins';\n@import 'path';\n@import 'core';\n@import 'larger';\n@import 'fixed-width';\n@import 'list';\n@import 'bordered-pulled';\n@import 'spinning';\n@import 'rotated-flipped';\n@import 'stacked';\n@import 'icons';\n"
  },
  {
    "path": "resources/css/alerts.css",
    "content": ".alert {\n    background-color: var(--alert-bg);\n    --tw-text-opacity: 1;\n    color: hsl(var(--bc)/var(--tw-text-opacity));\n\n    /* Last paragraphs should have no bottom margin and just use the alert's padding */\n    p:last-of-type {\n        margin-bottom: 0;\n    }\n\n    a {\n        text-decoration: underline;\n        color: inherit;\n    }\n}\n\n.alert-success {\n    color: hsl(var(--suc)/var(--tw-text-opacity));\n    --alert-bg: hsl(var(--su));\n}\n.alert-error {\n    color: hsl(var(--erc)/var(--tw-text-opacity));\n    --alert-bg: hsl(var(--er));\n}\n.alert-warning {\n    color: hsl(var(--wac)/var(--tw-text-opacity));\n    --alert-bg: hsl(var(--wa));\n}\n.alert-info {\n    color: hsl(var(--inc)/var(--tw-text-opacity));\n    --alert-bg: hsl(var(--in));\n}\n"
  },
  {
    "path": "resources/css/app.css",
    "content": "@import 'tailwindcss';\n\n\n@import \"./themes/base.css\";\n@import \"./typography.css\";\n@import \"./alerts.css\";\n@import \"./buttons.css\";\n@import \"./badge.css\";\n@import \"./calendar.css\";\n@import \"./code.css\";\n@import \"./tooltip.css\";\n@import \"./timeline.css\";\n@import \"./mobile.css\";\n@import \"./premium.css\";\n@import \"./entity.css\";\n/*@import \"./box.css\";*/\n@import \"./quest.css\";\n@import \"./quick-creator.css\";\n@import \"./sortable.css\";\n@import \"./campaign.css\";\n@import \"./attributes/attributes.css\";\n@import \"./toggle.css\";\n@import \"./range.css\";\n@import \"./tabs.css\";\n@import \"./vendors/editor.css\";\n@import \"./vendors/adminlte.css\";\n@import \"./print/general.css\";\n@import \"./html/table.css\";\n@import \"./html/dialog.css\";\n@import \"./html/dl.css\";\n@import \"./html/summary.css\";\n@import './freyja/freyja.css';\n@import 'cookieconsent/build/cookieconsent.min.css';\n@import '@fontsource-variable/roboto/wdth.css';\n\n:root {\n    --kanka-boost-accent: 338 78% 48%;\n}\n\n.content-header {\n    .breadcrumb {\n        overflow-x: auto;\n        max-width: 100%;\n        padding-block: 0.5rem;\n        > li + ::before {\n            content: \"\";\n            opacity: .4;\n            background-color: #0000;\n            border-top: 1px solid;\n            border-right: 1px solid;\n            width: .375rem;\n            height: .375rem;\n            margin-left: .5rem;\n            margin-right: .75rem;\n            display: block;\n            rotate: 45deg;\n        }\n    }\n}\n\n\n/** required form fields **/\ndiv.required label:after {\n    content: \" *\";\n    color: var(--input-required-text, var(--error, 'red'));\n}\n\n.tab-content, .box-body {\n    table {\n        max-width: 100% !important;\n    }\n\n    img {\n        max-width: 100%;\n    }\n}\n\n.entity-image {\n    border-radius: 50%;\n    display: block;\n}\n.cover-background {\n    background-size: cover;\n    background-repeat: no-repeat;\n    background-position: 50% 50%;\n}\n\ntr.tr-hover {\n    font-weight: 700;\n\n    &:hover {\n        background-color: rgba(0, 0, 0, 0.1) !important;\n    }\n}\n\n.field {\n    > input, > select, > textarea {\n        padding: 0.6rem 0.8rem;\n        &:placeholder-shown {\n            text-overflow: ellipsis;\n        }\n    }\n}\n\n\n/* Attributes in entities and text area */\n.attribute, .note-editing-area > .attribute {\n    border-radius: 0.25rem;\n    --tw-border-opacity: 1;\n    background-color: hsl(var(--n)/var(--tw-border-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--nc)/var(--tw-text-opacity));\n    font-style: italic;\n    padding: .1rem .25rem;\n}\n\n/* Bootstrap3 sets summary to display:block which isn't correct */\nsummary { display: list-item; }\n\n/* RPG awesome dropdown icon margin */\n.dropdown-menu > li > a > :is(.fas, .fab, .far, .ra, .fa-solid, .fa-light, .fa-thin, .fa-regular) {\n    margin-right: 10px;\n    width: 14px;\n}\nbutton.dropdown-item {\n    background: none;\n    border: none;\n    padding: 3px 20px;\n    display: block;\n    width: 100%;\n    font-weight: 400;\n    line-height: 1.6;\n    white-space: nowrap;\n    color: var(--dropdown-link);\n    text-align: left;\n\n    &:hover {\n        background-color: var(--dropdown-hover-background);\n    }\n}\n.dropdown-menu-top {\n    top: unset;\n    bottom: 100%;\n}\n\n.banner-notification {\n    a {\n        color: hsl(var(--ac)/1);\n    }\n}\n\n/* UX */\n.skip-nav-link {\n    transform: translateY(-120%);\n    transition: transform 325ms ease-in;\n    z-index: 1040;\n\n    &:focus {\n        transform: translateY(0);\n        color: var(--link-text);\n    }\n}\n\n.bg-boost {\n    background-color: hsl(var(--kanka-boost-accent)/1);\n    --b1: var(--kanka-boost-accent);\n    --b2: var(--kanka-boost-accent);\n    --bc: 0 0% 100%;\n}\n.text-boost {\n    color: hsl(var(--kanka-boost-accent)/1);\n}\n\n/* Helper block in forms, closer to field */\n.form-group > .help-block {\n    margin-top: 0;\n}\n.grid > .form-group {\n    margin: 0;\n}\n\nbutton.loading {\n    cursor: wait;\n}\n.loading, .loading:hover {\n    pointer-events: none;\n}\n.loading:before {\n    margin-right: .5rem;\n    display: inline-block;\n    font-family: \"Font Awesome 6 Pro\";\n    font-weight: 900;\n    animation: fa-spin 2s linear infinite;\n    content: \"\\f110\";\n}\n\n.bg-box {\n    --tw-bg-opacity: 1;\n    background-color: var(--box-background, hsl(var(--b1)/var(--tw-bg-opacity)));\n}\n\n.stack > * {\n    grid-column-start: 1;\n    grid-row-start: 1;\n    transform: translateY(10%) translateX(10%) scale(0.9);\n    z-index: 1;\n}\n.stack > :nth-child(1) {\n    transform: unset;\n    z-index: 3;\n}\n/** As of July 2023, firefox doesn't yet support the :has selector, but chrome does **/\n/** We need this to avoid the tooltip being behind the next in row stacked block **/\n.stack > :nth-child(1):has(.tooltip) {\n    z-index:4\n}\n.stack > :nth-child(2) {\n    transform: translateY(05%) translateX(05%) scale(0.95);\n    z-index: 2;\n}\n\n.entity-story-block :is(.box-entity-entry, .entity-content.collapse.in) {\n    display: flow-root;\n}\n\n/** Old DatagridRenderer **/\n.table-entities {\n    td {\n        vertical-align: middle !important;\n    }\n}\n\n.input-error {\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--er)/var(--tw-border-opacity));\n}\n\nul.entity-menu {\n    li {\n        a {\n            color: hsl(var(--bc)/0.8);\n            &:hover {\n                background-color: hsl(var(--b2)/1);\n                color: hsl(var(--bc)/1);\n            }\n        }\n    }\n    li.active {\n        a {\n            background-color: hsl(var(--b2)/1);\n            color: hsl(var(--bc)/1);\n        }\n    }\n}\n\n.glass, .glass.btn-active {\n    border: none;\n    -webkit-backdrop-filter: blur(var(--glass-blur,40px));\n    backdrop-filter: blur(var(--glass-blur,40px));\n    background-color: transparent;\n    background-image: linear-gradient(135deg,rgb(255 255 255/var(--glass-opacity,30%)) 0%,rgb(0 0 0/0%) 100%),linear-gradient(var(--glass-reflex-degree,100deg),rgb(255 255 255/var(--glass-reflex-opacity,10%)) 25%,rgb(0 0 0/0%) 25%);\n    box-shadow: 0 0 0 1px rgb(255 255 255/var(--glass-border-opacity,10%)) inset,0 0 0 2px #0000000d;\n    text-shadow: 0 1px rgb(0 0 0/var(--glass-text-shadow-opacity,5%));\n}\n"
  },
  {
    "path": "resources/css/attributes/attributes.css",
    "content": ".live-edit {\n    min-width: 1rem;\n    min-height: 1rem;\n    display: inline-block;\n}\n.live-edit-parsed {\n    cursor: pointer;\n\n    &:after {\n        -webkit-font-smoothing: antialiased;\n        font-family: \"Font Awesome 6 Pro\";\n        font-weight: 900;\n        font-style: normal;\n        font-variant: normal;\n        line-height: 1;\n        text-rendering: auto;\n        color: var(--link-hover);\n    }\n\n    &:hover {\n        &:after {\n            content: \" \\f303\";\n        }\n    }\n}\n.live-edit.empty-value {\n    width: 24px;\n    display: inline-block;\n    --tw-border-opacity: .2;\n    border-bottom: 1px dotted hsl(var(--bc)/var(--tw-border-opacity));\n}\n\n/** Mobile support **/\n@media(max-width: 767px) {\n    .live-edit-parsed:after {\n        content: \" \\f303\";\n    }\n}\n"
  },
  {
    "path": "resources/css/auth.css",
    "content": "@import 'tailwindcss';\n@import 'cookieconsent/build/cookieconsent.min.css';\n\n\n.login-page, .register-page {\n    background-color: #eef1f4;\n    background-position: 50% 50%;\n    background-size: cover;\n    background-repeat: no-repeat;\n    background-attachment: fixed;\n\n    background-image: url('https://th.kanka.io/smu57gaTzoPAMo9OQYfsHFTi-fA=/560x600/smart/src/app/backgrounds/mountain-background-desktop.jp');\n}\n\n\n/* Hover Effects on Card */\n\n@media (min-width: 992px) {\n  .login-box, .register-box {\n    width: 450px;\n  }\n\n  .login-page, .register-page, header.masthead-img {\n    background-image: url('https://th.kanka.io/9764KQH7QXGYsnWsRGVKTCzQWgA=/1050x600/smart/src/app/backgrounds/mountain-background-desktop.jpg');\n  }\n}\n\n"
  },
  {
    "path": "resources/css/badge.css",
    "content": ".badge {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    height: 1.5rem;\n    font-size: .875rem;\n    line-height: 1.25rem;\n    width: fit-content;\n    padding-left: .5rem;\n    padding-right: .5rem;\n    overflow: hidden;\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--n)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--bc)/var(--tw-text-opacity));\n    border-radius: var(--rounded-badge, 1rem);\n}\n\n.badge-accent {\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--a)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--a)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--ac)/var(--tw-text-opacity));\n}\n.badge-primary {\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--p)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--p)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--pc)/var(--tw-text-opacity));\n}\n.badge-secondary {\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--s)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--s)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--sc)/var(--tw-text-opacity));\n}\n\n\n.badge-xs {\n    height:.75rem;\n    font-size:.75rem;\n    line-height:.75rem;\n    padding-left:.313rem;\n    padding-right:.313rem\n}\n.badge-sm {\n    height:1rem;\n    font-size:.75rem;\n    line-height:1rem;\n    padding-left:.438rem;\n    padding-right:.438rem\n}\n.badge-md {\n    height:1.25rem;\n    font-size:.875rem;\n    line-height:1.25rem;\n    padding-left:.563rem;\n    padding-right:.563rem\n}\n.badge-lg {\n    height:1.5rem;\n    font-size:1rem;\n    line-height:1.5rem;\n    padding-left:.688rem;\n    padding-right:.688rem\n}\n"
  },
  {
    "path": "resources/css/buttons.css",
    "content": ".join {\n    display: inline-flex;\n    align-items: stretch;\n    border-radius: var(--rounded-btn, .5rem);\n\n    > .join-item:first-child:not(:last-child), :first-child:not(:last-child) .join-item {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n    }\n    .join-item:not(:first-child):not(:last-child), :not(:first-child):not(:last-child) .join-item {\n        border-radius: 0;\n    }\n    .join-item:last-child:not(:first-child), :last-child:not(:first-child) .join-item {\n        border-bottom-left-radius: 0;\n        border-top-left-radius: 0;\n    }\n\n    .ts-wrapper .ts-control {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n        border-right: none;\n        min-height: 2.3rem;\n    }\n\n}\n\n.btn2 {\n    display: inline-flex;\n    flex-shrink: 0;\n    cursor: pointer;\n    -webkit-user-select: none;\n    user-select: none;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n    min-height: 2.25rem;\n    transition-property: color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;\n    transition-duration: .2s;\n    transition-timing-function: cubic-bezier(.4,0,.2,1);\n    border-radius: var(--rounded-btn,.25rem);\n    padding: 0.5rem 1rem;\n    line-height: 1.25rem;\n    gap: .5rem;\n    font-size: 0.875rem;\n    text-decoration-line: none;\n    border-width: var(--border-btn, 0px);\n    border-color: hsl(var(--b3)/var(--tw-border-opacity, 1));\n    animation: button-pop var(--animation-btn,.25s) ease-out;\n    text-transform: var(--btn-text-case, inherit);\n    --tw-border-opacity: 1;\n    background-color:hsl(var(--b1)/var(--tw-bg-opacity, 1));\n    color:hsl(var(--bc)/var(--tw-text-opacity, 1))\n}\n.btn2.btn-disabled,\n.btn2.btn[disabled],\n.btn2.btn:disabled {\n    pointer-events:none;\n    --tw-border-opacity: 0;\n    background-color:hsl(var(--n)/var(--tw-bg-opacity));\n    --tw-bg-opacity: .2;\n    color:hsl(var(--bc)/var(--tw-text-opacity));\n    --tw-text-opacity: .2\n}\n.btn2.btn-square {\n    height:3rem;\n    width:3rem;\n    padding:0\n}\n.btn2.btn-circle {\n    height:3rem;\n    width:3rem;\n    border-radius:9999px;\n    padding:0\n}\n.btn2.btn-group {\n    display:inline-flex\n}\n.btn2.btn-group>input[type=radio].btn {\n    -webkit-appearance:none;\n    appearance:none\n}\n.btn2.btn-group>input[type=radio].btn:before {\n    content:attr(data-title)\n}\n.btn2.btn:is(input[type=checkbox]),\n.btn2.btn:is(input[type=radio]) {\n    -webkit-appearance:none;\n    appearance:none\n}\n.btn2.btn:is(input[type=checkbox]):after,\n.btn2.btn:is(input[type=radio]):after {\n    --tw-content: attr(aria-label);\n    content:var(--tw-content)\n}\n\n@media (hover: hover) {\n    .btn2:hover {\n        --tw-border-opacity: 1;\n        border-color: hsl(var(--b3)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color: hsl(var(--b2)/var(--tw-bg-opacity));\n        color: hsl(var(--bc)/var(--tw-text-opacity));\n    }\n    .btn2.btn-primary:hover {\n        --tw-border-opacity: 1;\n        border-color: hsl(var(--pf)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color: hsl(var(--pf)/var(--tw-bg-opacity));\n        color: hsl(var(--pc)/var(--tw-text-opacity));\n    }\n    .btn2.btn-secondary:hover {\n        --tw-border-opacity: 1;\n        border-color: hsl(var(--sf)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--sf)/var(--tw-bg-opacity));\n        color:hsl(var(--sc)/var(--tw-text-opacity));\n    }\n    .btn2.btn-accent:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--af)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--af)/var(--tw-bg-opacity));\n        color:hsl(var(--ac)/var(--tw-text-opacity));\n    }\n    .btn2.btn-neutral:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--nf)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--nf)/var(--tw-bg-opacity));\n        color:hsl(var(--fc)/var(--tw-text-opacity));\n    }\n    .btn2.btn-info:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--in)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--in)/var(--tw-bg-opacity))\n    }\n    .btn2.btn-success:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--su)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--su)/var(--tw-bg-opacity))\n    }\n    .btn2.btn-warning:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--wa)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--wa)/var(--tw-bg-opacity))\n    }\n    .btn2.btn-error:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--er)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--er)/var(--tw-bg-opacity))\n    }\n    .btn2.btn-glass:hover {\n        --glass-opacity: 25%;\n        --glass-border-opacity: 15%\n    }\n    .btn2.btn-ghost:hover {\n        --tw-border-opacity: 0;\n        background-color:hsl(var(--bc)/var(--tw-bg-opacity));\n        --tw-bg-opacity: .2\n    }\n    .btn2.btn-link:hover {\n        border-color:transparent;\n        background-color:transparent;\n        text-decoration-line:underline;\n        color: hsl(var(--pf)/1);\n    }\n    .btn2.btn-outline:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--b2)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--b2)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color:hsl(var(--bc)/var(--tw-text-opacity))\n    }\n    .btn2.btn-outline.btn-primary:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--pf)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--pf)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color:hsl(var(--pc)/var(--tw-text-opacity))\n    }\n    .btn2.btn-outline.btn-secondary:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--sf)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--sf)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color:hsl(var(--sc)/var(--tw-text-opacity))\n    }\n    .btn2.btn-outline.btn-accent:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--af)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--af)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color:hsl(var(--ac)/var(--tw-text-opacity))\n    }\n    .btn2.btn-outline.btn-success:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--su)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--su)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color:hsl(var(--suc)/var(--tw-text-opacity))\n    }\n    .btn2.btn-outline.btn-info:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--in)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--in)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color:hsl(var(--inc)/var(--tw-text-opacity))\n    }\n    .btn2.btn-outline.btn-warning:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--wa)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--wa)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color:hsl(var(--wac)/var(--tw-text-opacity))\n    }\n    .btn2.btn-outline.btn-error:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--er)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--er)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color:hsl(var(--erc)/var(--tw-text-opacity))\n    }\n    .btn2.btn-disabled:hover,\n    .btn2.btn[disabled]:hover,\n    .btn2.btn:disabled:hover {\n        --tw-border-opacity: 0;\n        background-color:hsl(var(--n)/var(--tw-bg-opacity));\n        --tw-bg-opacity: .2;\n        color:hsl(var(--bc)/var(--tw-text-opacity));\n        --tw-text-opacity: .2\n    }\n    .btn2.btn:is(input[type=checkbox]:checked):hover,\n    .btn2.btn:is(input[type=radio]:checked):hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--pf)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--pf)/var(--tw-bg-opacity))\n    }\n}\n\n\n.btn2.btn:active:hover,\n.btn2.btn:active:focus {\n    animation: button-pop 0s ease-out;\n    transform: scale(var(--btn-focus-scale,.97))\n}\n.btn2.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--b3)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--b3)/var(--tw-bg-opacity))\n}\n.btn2:focus-visible {\n    outline-style: solid;\n    outline-width: 2px;\n    outline-offset: 2px;\n    outline-color: hsl(var(--bc)/1)\n}\n.btn2.btn-primary {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--p)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--p)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--pc)/var(--tw-text-opacity));\n    font-weight: 500;\n}\n.btn2.btn-primary.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--pf)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--pf)/var(--tw-bg-opacity))\n}\n.btn2.btn-primary:focus-visible {\n    outline-color: hsl(var(--p)/1)\n}\n.btn2.btn-secondary {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--s)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--s)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--sc)/var(--tw-text-opacity));\n    font-weight: 500;\n}\n.btn2.btn-secondary.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--sf)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--sf)/var(--tw-bg-opacity))\n}\n.btn2.btn-secondary:focus-visible {\n    outline-color: hsl(var(--s)/1)\n}\n.btn2.btn-accent {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--a)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--a)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--ac)/var(--tw-text-opacity))\n}\n.btn2.btn-accent.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--af)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--af)/var(--tw-bg-opacity))\n}\n.btn2.btn-accent:focus-visible {\n    outline-color: hsl(var(--a)/1)\n}\n.btn2.btn-neutral {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--n)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--n)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--nc)/var(--tw-text-opacity))\n}\n.btn2.btn-neutral.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--nf)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--nf)/var(--tw-bg-opacity))\n}\n.btn2.btn-neutral:focus-visible {\n    outline-color:hsl(var(--n)/1)\n}\n.btn2.btn-info {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--in)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--in)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--inc)/var(--tw-text-opacity))\n}\n.btn2.btn-info.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--in)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--in)/var(--tw-bg-opacity))\n}\n.btn2.btn-info:focus-visible {\n    outline-color:hsl(var(--in)/1)\n}\n.btn2.btn-success {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--su)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--su)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--suc)/var(--tw-text-opacity))\n}\n.btn2.btn-success.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--su)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--su)/var(--tw-bg-opacity))\n}\n.btn2.btn-success:focus-visible {\n    outline-color:hsl(var(--su)/1)\n}\n.btn2.btn-warning {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--wa)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--wa)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--wac)/var(--tw-text-opacity))\n}\n.btn2.btn-warning.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--wa)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--wa)/var(--tw-bg-opacity))\n}\n.btn2.btn-warning:focus-visible {\n    outline-color:hsl(var(--wa)/1)\n}\n.btn2.btn-error {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--er)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--er)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--erc)/var(--tw-text-opacity))\n}\n.btn2.btn-error.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--er)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--er)/var(--tw-bg-opacity))\n}\n.btn2.btn-error:focus-visible {\n    outline-color:hsl(var(--er)/1)\n}\n.btn2.btn-glass {\n    --tw-shadow: 0 0 #0000;\n    --tw-shadow-colored: 0 0 #0000;\n    box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);\n    backdrop-filter: blur(8px);\n    background-color: unset;\n    --bc: var(--n);\n}\n.btn2.btn-glass.btn-active {\n    --glass-opacity: 25%;\n    --glass-border-opacity: 15%\n}\n.btn2.btn-glass:focus-visible {\n    outline-color:currentColor\n}\n.btn2.btn-ghost {\n    border-width:1px;\n    border-color:transparent;\n    background-color:transparent;\n    color:currentColor;\n    --tw-shadow: 0 0 #0000;\n    --tw-shadow-colored: 0 0 #0000;\n    box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)\n}\n.btn2.btn-ghost.btn-active {\n    --tw-border-opacity: 0;\n    background-color:hsl(var(--bc)/var(--tw-bg-opacity));\n    --tw-bg-opacity: .2\n}\n.btn2.btn-ghost:focus-visible {\n    outline-color:currentColor\n}\n.btn2.btn-link {\n    border-color:transparent;\n    background-color:transparent;\n    --tw-text-opacity: 1;\n    color:hsl(var(--p)/var(--tw-text-opacity));\n    text-decoration-line:underline;\n    --tw-shadow: 0 0 #0000;\n    --tw-shadow-colored: 0 0 #0000;\n    box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)\n}\n.btn2.btn-link.btn-active {\n    border-color:transparent;\n    background-color:transparent;\n    text-decoration-line:underline\n}\n.btn2.btn-link:focus-visible {\n    outline-color:currentColor\n}\n.btn2.btn-outline {\n    background-color:transparent;\n    --tw-text-opacity: 1;\n    color:hsl(var(--bc)/var(--tw-text-opacity));\n    --tw-shadow: 0 0 #0000;\n    --tw-shadow-colored: 0 0 #0000;\n    box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);\n    --border-btn: 1px;\n}\n.btn2.btn-outline.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--b2)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--b2)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--bc)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-primary {\n    --tw-text-opacity: 1;\n    color:hsl(var(--p)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-primary.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--pf)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--pf)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--pc)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-secondary {\n    --tw-text-opacity: 1;\n    color:hsl(var(--s)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-secondary.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--sf)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--sf)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--sc)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-accent {\n    --tw-text-opacity: 1;\n    color:hsl(var(--a)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-accent.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--af)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--af)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--ac)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-success {\n    --tw-text-opacity: 1;\n    color:hsl(var(--su)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-success.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--su)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--su)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--suc)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-info {\n    --tw-text-opacity: 1;\n    color:hsl(var(--in)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-info.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--in)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--in)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--inc)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-warning {\n    --tw-text-opacity: 1;\n    color:hsl(var(--wa)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-warning.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--wa)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--wa)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--wac)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-error {\n    --tw-text-opacity: 1;\n    color:hsl(var(--erc)/var(--tw-text-opacity))\n}\n.btn2.btn-outline.btn-error.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--er)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--er)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--erc)/var(--tw-text-opacity))\n}\n.btn2.btn-group>input[type=radio]:checked.btn,\n.btn2.btn-group>.btn-active {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--p)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--p)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--pc)/var(--tw-text-opacity))\n}\n.btn2.btn-group>input[type=radio]:checked.btn:focus-visible,\n.btn2.btn-group>.btn-active:focus-visible {\n    outline-style:solid;\n    outline-width:2px;\n    outline-color:hsl(var(--p)/1)\n}\n.btn2.btn:is(input[type=checkbox]:checked),\n.btn2.btn:is(input[type=radio]:checked) {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--p)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--p)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--pc)/var(--tw-text-opacity))\n}\n.btn2.btn:is(input[type=checkbox]:checked):focus-visible,\n.btn2.btn:is(input[type=radio]:checked):focus-visible {\n    outline-color:hsl(var(--p)/1)\n}\n\n\n\n\n/** Sizes **/\n.btn2.btn-xs {\n    padding-left:.5rem;\n    padding-right:.5rem;\n    min-height:1.5rem;\n    font-size:.75rem\n}\n.btn2.btn-sm {\n    padding: 0.375rem .75rem;\n    min-height: 2rem;\n    font-size:.75rem;\n    font-weight: 400;\n}\n.btn2.btn-lg {\n    padding-left:1.5rem;\n    padding-right:1.5rem;\n    min-height:4rem;\n    font-size:1.125rem\n}\n.btn2.btn-wide {\n    width:16rem\n}\n.btn2.btn-block {\n    width:100%\n}\n.btn2.btn-square:where(.btn-xs) {\n    height:1.5rem;\n    width:1.5rem;\n    padding:0\n}\n.btn2.btn-square:where(.btn-sm) {\n    height:2rem;\n    width:2rem;\n    padding:0\n}\n.btn2.btn-square:where(.btn-md) {\n    height:3rem;\n    width:3rem;\n    padding:0\n}\n.btn2.btn-square:where(.btn-lg) {\n    height:4rem;\n    width:4rem;\n    padding:0\n}\n.btn2.btn-circle:where(.btn-xs) {\n    height:1.5rem;\n    width:1.5rem;\n    border-radius:9999px;\n    padding:0\n}\n.btn2.btn-circle:where(.btn-sm) {\n    height:2rem;\n    width:2rem;\n    border-radius:9999px;\n    padding:0\n}\n.btn2.btn-circle:where(.btn-md) {\n    height:3rem;\n    width:3rem;\n    border-radius:9999px;\n    padding:0\n}\n.btn2.btn-circle:where(.btn-lg) {\n    height:4rem;\n    width:4rem;\n    border-radius:9999px;\n    padding:0\n}\n\n[role=\"button\"] {\n    cursor: pointer;\n}\n"
  },
  {
    "path": "resources/css/calendar.css",
    "content": "/**\n * Calendars\n */\n.bg-season {\n    --tw-bg-opacity: .5;\n    background-color: hsl(var(--a)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--ac)/var(--tw-text-opacity));\n}\n.bg-week {\n    --tw-bg-opacity: .3;\n    background-color: hsl(var(--a)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--ac)/var(--tw-text-opacity));\n}\n\n.calendar tbody td {\n    .julian-number {\n        display: var(--calendar-julian, none);\n    }\n\n    .day-number {\n        display: var(--calendar-monthday, inline);\n    }\n}\n\n"
  },
  {
    "path": "resources/css/campaign.css",
    "content": "/**\n * Rules for specific campaign interfaces\n */\n.public-permission {\n    border: 1px solid var(--box-border, none);\n    background-color: var(--box-background, hsl(var(--b3)/1));\n    --tw-text-opacity: 1;\n    color:hsl(var(--bc)/var(--tw-text-opacity));\n    transition: all 0.3s ease-in-out;\n\n    flex-flow: row wrap;\n    flex-direction: column;\n}\n.public-permission.enabled {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--p)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color:hsl(var(--p)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color:hsl(var(--pc)/var(--tw-text-opacity));\n}\n.public-permission:hover {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--pf)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    --tw-text-opacity: 1;\n    background-color:hsl(var(--pf)/var(--tw-bg-opacity));\n    color:hsl(var(--pc)/var(--tw-text-opacity));\n}\n\n#campaign-modules {\n    .module-actions {\n        .btn-module-disable {\n            display: none;\n        }\n    }\n    .module-enabled {\n        .header {\n            background-color: hsl(var(--p)/1);\n            color: hsl(var(--pc)/1);\n        }\n        .module-actions {\n            .btn-module-enable {\n                display: none;\n            }\n            .btn-module-disable {\n                display: block;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "resources/css/code.css",
    "content": "code, kbd, samp, pre {\n    font-family: var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);\n    font-feature-settings: var(--default-mono-font-feature-settings,normal);\n    font-variation-settings: var(--default-mono-font-variation-settings,normal);\n    font-size: 1em;\n}\n\n/* Inline code */\ncode, samp, kbd {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--n)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--nc)/var(--tw-text-opacity));\n    padding: 0.2rem 0.4rem;\n    border-radius: var(--rounded-btn);\n    direction: ltr;\n}\n\n/* Code blocks */\npre {\n    display: block;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n    padding: .5rem;\n    overflow-x: auto;\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--n)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--nc)/var(--tw-text-opacity));\n    border-radius: var(--rounded-btn);\n}\n\n/* Reset inline styles inside code blocks */\npre code {\n    padding: 0;\n    background-color: transparent;\n    border-radius: 0;\n}\n"
  },
  {
    "path": "resources/css/dashboard.css",
    "content": ".widget {\n    table {\n        max-width: 100% !important;\n        word-break: break-all;\n    }\n    iframe, img {\n        max-width: 100% !important;\n    }\n    .entity-attributes {\n        min-height: 24rem;\n    }\n}\n"
  },
  {
    "path": "resources/css/entity.css",
    "content": "/**\n * Contains styling for an entity's submenu and various elements related.\n * For styling regarding the general layout of entities, check boosted.scss.\n */\n\n.entity-posts, .entity-notes {\n    img {\n        max-width: 100%;\n    }\n\n    .post-details {\n        .post-detail-element:not(:last-child) {\n            &:after {\n                content: \"|\";\n            }\n        }\n    }\n\n    .post-footer {\n        .post-updated {\n            &:before {\n                content: \"|\";\n            }\n        }\n    }\n}\n\n/** Collapsed / Expanded elements **/\n.element-toggle, .post-block {\n    .icon-hide {\n        display: none;\n    }\n}\n.element-toggle.collapsed, .post-block .collapsed, .element-toggle.animate-collapsed {\n    .icon-hide {\n        display: inline-block;\n    }\n    .icon-show {\n        display: none;\n    }\n}\n\n.collapsed\\:show {\n    --fa-display: none;\n}\n.animate-collapsed {\n    .collapsed\\:flip {\n        rotate: 180deg ;\n    }\n}\n"
  },
  {
    "path": "resources/css/families/tree.css",
    "content": "#family-tree {\n    display: block;\n    width: 100%;\n    height: 100%;\n\n    --family-tree-column-width: 220px;\n    --family-tree-row-height: 110px;\n}\n\n.family-node-entity {\n    border: 1px solid hsl(var(--nc)/1);\n    --tw-background-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-background-opacity));\n    width: var(--family-tree-entity-width, 200px);\n    height: var(--family-tree-entity-height, 60px);\n}\n.family-node-entity-founder {\n    --tw-background-opacity: 1;\n    background-color: var(--family-tree-founder, hsl(var(--pc)/var(--tw-background-opacity)));\n    color: hsl(var(--p)/1);\n}\n.family-node-entity-relation {\n    --tw-background-opacity: 1;\n    background-color: hsl(var(--b3)/var(--tw-background-opacity));\n}\n\n.family-tree-line {\n    background-color: var(--family-tree-line, #333);\n}\n.family-tree-child-line {\n    background-color: var(--family-tree-line, #333);\n}\n.family-tree-child-parent-line {\n    background-color: var(--family-tree-line, #333);\n}\n.family-tree-relation {\n\n}\n\n"
  },
  {
    "path": "resources/css/freyja/freyja.css",
    "content": "@import \"./sidebar.css\";\n@import \"./header.css\";\n\n"
  },
  {
    "path": "resources/css/freyja/header.css",
    "content": ".bg-entity-focus {\n    --tw-bg-opacity: 1;\n    background-color: var(--lookup-entity-background, hsl(var(--b3)/var(--tw-bg-opacity)));\n}\n\n.navigation-drawer {\n    width: 82%;\n    z-index: 20;\n\n    .header {\n        .inactive {\n            min-width: 72px;\n\n            &:hover {\n                color: var(--header-block-hover-text, #2b2e2e);\n            }\n            .profile-box:hover {\n                background-color: var(--header-profile-hover, #2b2e2e);\n            }\n        }\n\n\n        .profile-box {\n            background-color: var(--header-profile-background, #333);\n            color: var(--header-profile-text, white);\n        }\n    }\n\n    .campaigns {\n        .campaign {\n            background-image: url('https://th.kanka.io/c26cVXHRNnJXThmKZry4xpUuBS8=/100x96/smart/src/app/backgrounds/mountain-background-medium.jpg');\n\n            .name {\n                background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, hsl(var(--b2)/1) 100%);\n                color: var(--campaign-switcher-text, hsl(var(--bc)/1));\n            }\n        }\n    }\n    .profile {\n        .marketplace {\n            .icon {\n                color: var(--link-text);\n            }\n        }\n    }\n\n    .link {\n        color: var(--link-text);\n    }\n}\n.nav-switcher {\n    .profile .profile-box {\n        background-color: var(--header-profile-background, #333);\n        color: var(--header-profile-text, white);\n\n        &:hover {\n            background-color: var(--header-profile-hover, #2b2e2e);\n        }\n    }\n}\n\n\n@media (min-width: 768px) {\n    .sidebar-collapse .main-header .navbar {\n        margin-left: 0;\n    }\n    .navigation-drawer {\n        width: 380px;\n    }\n\n    .toggle-and-search .w-sidebar {\n        width: 300px;\n    }\n}\n\n.indicator {\n    .notification-badge {\n        right: -0.2rem;\n        bottom: -0.2rem;\n        --tw-translate-x: 50%;\n        transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n\n        --tw-bg-opacity: 1;\n        background-color: hsl(var(--boosted)/var(--tw-bg-opacity));\n        --tw-text-opacity: 1;\n        color: hsl(var(--boosted)/var(--tw-text-opacity));\n        line-height: 0.5rem;\n        padding: 0.3rem;\n        border-radius: var(--rounded-badge,1.9rem);\n    }\n}\n\n\n/**\n * Lookup\n */\n.search-recent, .search-preview {\n    box-shadow: 0 10px 10px 0 rgba(0, 0, 0, 0.3);\n    color: var(--lookup-text, hsl(var(--bc)/1));\n}\n.hover\\:lookup-entity:hover {\n    background-color: var(--lookup-entity-hover, rgba(0, 0, 0, 0.1));\n}\n"
  },
  {
    "path": "resources/css/freyja/sidebar.css",
    "content": ":root {\n    --sidebar-width: 15rem; /* 240px */\n    --sidebar-expanded: 16rem; /* 256px */\n}\n\n.content-wrapper {\n    margin-left: var(--sidebar-width);\n}\n\n.w-sidebar {\n    width: min(var(--sidebar-width), 90vw);\n}\n.h-sidebar {\n    height: calc(100vh - 3rem);\n}\n\n.main-sidebar {\n    width: var(--sidebar-width);\n    --tw-bg-opacity: 1;\n    background-color: var(--sidebar-background, hsl(var(--si)/var(--tw-bg-opacity)));\n    --tw-text-opacity: 1;\n    color: var(--sidebar-text, hsl(var(--sic)/var(--tw-text-opacity)));\n\n    background-size: var(--sidebar-width) 208px;\n    background-repeat: no-repeat;\n    transition: all 0.3s ease-in-out, width 0.3s ease-in-out;\n\n    .campaign-updated {\n        color: hsl(var(--sic)/var(--tw-text-opacity, 0.7));\n    }\n\n    .sidebar-menu {\n        color: var(--sidebar-text, hsl(var(--sic)/var(--tw-text-opacity, 1)));\n        li {\n            a, span {\n                color: var(--sidebar-text, hsl(var(--sic)/var(--tw-text-opacity, 1)));\n                letter-spacing: 1.5px;\n            }\n\n            a {\n                &:hover {\n                    --tw-bg-opacity: .7;\n                    background: hsl(var(--sif)/var(--tw-bg-opacity));\n                    color: var(--sidebar-text, hsl(var(--sic)/var(--tw-text-opacity, 1)));\n                }\n            }\n        }\n\n        li.active > a, li.active.sidebar-section {\n            background: hsl(var(--sif)/var(--tw-bg-opacity, .7));\n        }\n    }\n}\n.main-sidebar-placeholder {\n    background-image: var(--sidebar-placeholder, url('https://th.kanka.io/kZFdGAs5iN41r9mDqNqix8BxaAA=/240x208/smart/src/app/backgrounds/mountain-background-medium.jpg'));\n}\n\nsection.sidebar-campaign {\n    background: linear-gradient(180deg, rgba(51, 51, 51, 0) 0%, var(--sidebar-background, hsl(var(--si)/var(--tw-bg-opacity, 1))) 100%);\n}\n.bg-sidebar {\n    background: var(--sidebar-background, hsl(var(--si)/var(--tw-bg-opacity, 1)));\n}\n\n.main-footer {\n    margin-left: var(--sidebar-width);\n}\n\n\n.sidebar-toggle [data-sidebar=\"collapse\"] {\n    display: none;\n}\n.sidebar-toggle [data-sidebar=\"expand\"] {\n    display: unset;\n}\n\nbody.sidebar-collapse .sidebar-toggle [data-sidebar=\"collapse\"] {\n    display: unset;\n}\nbody.sidebar-collapse .sidebar-toggle [data-sidebar=\"expand\"] {\n    display: none;\n}\n\n\n/** Mobile **/\n@media (max-width: 767px) {\n    .main-sidebar {\n        margin-left: calc(0px - var(--sidebar-width));\n    }\n    .content-wrapper, .main-footer {\n        margin-left: 0;\n    }\n\n\n    .sidebar-collapse .main-sidebar {\n        margin-left: 0;\n    }\n    .sidebar-collapse .content-wrapper, .sidebar-collapse .main-footer {\n        margin-left: 0;\n    }\n}\n@media (min-width: 768px) {\n    .md\\:w-sidebar {\n        width: min(var(--sidebar-width), 90vw);\n    }\n    .sidebar-collapse .main-sidebar {\n        margin-left: calc(0px - var(--sidebar-width));\n        z-index: 850;\n    }\n    .sidebar-collapse .content-wrapper, .sidebar-collapse .right-side, .sidebar-collapse .main-footer {\n        margin-left: 0 !important;\n        /*z-index: 840;*/\n    }\n\n    .sidebar-toggle [data-sidebar=\"collapse\"] {\n        display: unset;\n    }\n    .sidebar-toggle [data-sidebar=\"expand\"] {\n        display: none;\n    }\n\n    body.sidebar-collapse .sidebar-toggle [data-sidebar=\"collapse\"] {\n        display: none;\n    }\n    body.sidebar-collapse .sidebar-toggle [data-sidebar=\"expand\"] {\n        display: unset;\n    }\n}\n"
  },
  {
    "path": "resources/css/front.css",
    "content": "@import 'tailwindcss';\n\n@import \"./html/dialog.css\";\n\n:root {\n    --dark: #112B6B;\n    --purple: #40479e;\n    --light: #95B5D8;\n    --blue: #4A58FF;\n    --switcher: #D8DBFF;\n}\n\n.bg-dark {\n    background-color: var(--dark);\n}\n.bg-purple {\n    background-color: var(--purple);\n}\n.bg-light {\n    background-color: var(--light);\n}\n.bg-blue {\n    background-color: var(--blue);\n}\n.bg-switcher {\n    background-color: var(--switcher);\n}\n.border-dark {\n    border-color: var(--dark);\n}\n.border-blue {\n    border-color: var(--blue);\n}\n.hover\\:bg-light {\n    &:hover {\n        background-color: var(--light);\n    }\n}\n.hover\\:text-light {\n    &:hover {\n        color: var(--light);\n    }\n}\n.hover\\:text-dark {\n    &:hover {\n        color: var(--dark);\n    }\n}\n.hover\\:text-purple {\n    &:hover {\n        color: var(--purple);\n    }\n}\n.hover\\:text-blue {\n    &:hover {\n        color: var(--blue);\n    }\n}\n\n.link, .link-light {\n    color: var(--dark);\n    font-weight: 500;\n    transition: all 0.2s;\n\n    &:hover, &:focus {\n        color: var(--light);\n    }\n    &.active {\n        font-weight: 700;\n    }\n}\n.link-light {\n    color: var(--light);\n    &:hover, &:focus {\n        color: var(--blue);\n    }\n}\n.link-blue {\n    color: var(--blue);\n}\n\n.btn-round {\n    padding: 1rem 2rem;\n    background-color: var(--blue);\n    color: white;\n    font-size: 1rem;\n    font-weight: 500;\n    transition: all 0.2s;\n    display: flex;\n    gap: 0.5rem;\n    align-items: center;\n\n    &:hover, &:focus {\n        background-color: var(--dark);\n        color: white;\n    }\n}\n.btn-sm {\n    padding: 0.8rem 1.3rem;\n    font-size: 0.875rem;\n}\n\n.block-input, .block-btn {\n    border: 1px solid var(--purple);\n    color: var(--purple);\n    padding: 1rem 2rem;\n    transition: all 0.2s;\n}\n.block-btn {\n    &:hover, &:focus {\n        background-color: var(--purple);\n        color: white;\n    }\n}\n\n.btn-register, .btn-login {\n    padding: 0.45rem 1.88rem;\n    border-radius: 2rem;\n    font-size: 1rem;\n}\n.btn-register {\n    color: white;\n    background-color: var(--purple);\n    &:hover {\n        background-color: var(--dark);\n    }\n}\n.btn-login {\n    border: 1px solid var(--purple);\n    color: var(--purple);\n    &:hover {\n        background-color: var(--purple);\n        color: white;\n    }\n}\n\n.btn-primary {\n    border-radius: 0.2rem;\n    padding: 13px 32px;\n    background-color: var(--dark);\n    color: white;\n    text-align: center;\n\n    &:hover {\n        background-color: var(--purple);\n    }\n}\n\nnav.text-nav a {\n    &:hover {\n        color: var(--blue);\n    }\n    &.active, .active {\n        color: var(--light);\n    }\n}\n\n\n.text-dark {\n    color: var(--dark);\n}\n.text-light {\n    color: var(--light);\n}\n.text-blue {\n    color: var(--blue);\n}\n.text-purple {\n    color: var(--purple);\n}\n\n@layer base {\n    h1, .text-xl {\n        font-weight: 700;\n        font-size: 2.1875rem;\n        line-height: 2.89875rem;\n    }\n    h2, .text-lg {\n        font-weight: 700;\n        font-size: 1.8125rem;\n        line-height: 2.71875rem;\n    }\n    h3, .text-md {\n        font-weight: 800;\n        font-size: 1.375rem;\n        line-height: 1.664375rem;\n    }\n    h4, .text-sm {\n        font-weight: 600;\n        font-size: 1.175rem;\n        line-height: 1.464375rem;\n    }\n    p, li {\n        font-weight: 400;\n        font-size: 0.875rem;\n        line-height: 1.413125rem;\n    }\n\n    .text-nav {\n        font-weight: 500;\n        font-size: 1.25rem;\n        line-height: 1.875rem;\n    }\n\n    @media (min-width: 768px) {\n        h1, .text-xl {\n            font-weight: 700;\n            font-size: 3.125rem;\n            line-height: 4.6875rem;\n        }\n        h2, .text-lg {\n            font-weight: 700;\n            font-size: 2.8125rem;\n            line-height: 4.21875rem;\n        }\n        h3, .text-md {\n            font-weight: 800;\n            font-size: 1.5625rem;\n            line-height: 1.89125rem;\n        }\n\n        p, li {\n            font-weight: 400;\n            font-size: 1rem;\n            line-height: 1.615rem;\n        }\n    }\n}\n\n.text-sm {\n    font-weight: 400;\n    font-size: 0.875rem;\n    line-height: 1.413125rem;\n}\n\n\n.btn {\n    font-weight: 500;\n    font-size: 1rem;\n    line-height: 1.615rem;\n}\n\ncode {\n    color: var(--light);\n}\nhtml {\n    scroll-behavior: smooth;\n}\n\n/** Hamburger menu **/\n#nav-mobile-toggler {\n    .close, .mobile-menu {\n        display: none;\n    }\n}\n#nav-mobile-toggler.open {\n    .open {\n        display: none;\n    }\n    .close, .mobile-menu {\n        display: unset;\n    }\n}\n\n"
  },
  {
    "path": "resources/css/html/dialog.css",
    "content": "dialog {\n    display: flex;\n    flex-direction: column;\n    max-inline-size: min(90vw, var(--size-content-3));\n    max-block-size: min(80dvh, 100%);\n    padding: 0;\n    position: fixed;\n    margin: auto;\n    inset: 0;\n    z-index: 1050;\n    border: 0;\n    transition: opacity .5s ease-in-out;\n\n    > form {\n        display: flex;\n        flex-direction: column;\n        min-block-size: 0;\n        overflow: hidden;\n    }\n\n    header {\n        flex-shrink: 0;\n    }\n\n    article {\n        overflow-y: auto;\n        overscroll-behavior-y: contain;\n        min-block-size: 0;\n    }\n\n    footer {\n        flex-shrink: 0;\n\n        menu:only-child {\n            margin-inline-start: auto;\n        }\n    }\n}\n\ndialog:not([open]) {\n    pointer-events: none;\n    opacity: 0;\n}\n\ndialog::backdrop {\n    backdrop-filter: blur(5px);\n    transition: backdrop-filter .3s ease;\n}\n\nhtml:has(dialog[open]) {\n    overflow: hidden;\n}\n\n@media (max-width: 768px) {\n    dialog {\n        margin-block-end: 0;\n        border-end-end-radius: 0;\n        border-end-start-radius: 0;\n\n        article {\n            flex: initial;\n            max-height: 70dvh;\n        }\n    }\n}\n"
  },
  {
    "path": "resources/css/html/dl.css",
    "content": ".dl-horizontal dd:after,.dl-horizontal dd:before {\n    display: table;\n    content: \" \"\n}\n.dl-horizontal dd:after {\n    clear: both\n}\n@media (min-width:768px) {\n    .dl-horizontal dt {\n        float: left;\n        width: 160px;\n        clear: left;\n        text-align: right;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap\n    }\n    .dl-horizontal dd {\n        margin-left: 180px\n    }\n}\n"
  },
  {
    "path": "resources/css/html/summary.css",
    "content": ".details {\n    display: flex;\n    flex-direction: column;\n    gap: 0.25rem;\n    margin: 1.5rem 0;\n    border: 1px solid hsl(var(--bc)/var(--tw-bg-opacity));\n    --tw-bg-opacity: .1;\n    border-radius: var(--rounded-btn);\n    padding: 0.5rem;\n\n    summary {\n        font-weight: 600;\n        &:hover {\n            cursor: pointer;\n        }\n    }\n\n    /** Just for tiptap **/\n    > button {\n        align-items: center;\n        background: transparent;\n        border-radius: 4px;\n        display: flex;\n        font-size: 0.625rem;\n        height: 1.25rem;\n        justify-content: center;\n        line-height: 1;\n        margin-top: 0.1rem;\n        padding: 0;\n        width: 1.25rem;\n\n        &:hover {\n            background-color: var(--gray-3);\n        }\n\n        &::before {\n            content: '\\25B6';\n        }\n    }\n\n\n    /** Just for tiptap **/\n    &.is-open > button::before {\n        transform: rotate(90deg);\n    }\n\n\n    /** Just for tiptap **/\n    > div {\n        display: flex;\n        flex-direction: column;\n        gap: 0.5rem;\n        width: 100%;\n\n        > [data-type='detailsContent'] > :last-child {\n            margin-bottom: 0.5rem;\n        }\n    }\n\n    .details {\n        margin: 0.5rem 0;\n    }\n}\n"
  },
  {
    "path": "resources/css/html/table.css",
    "content": ".table {\n    width: 100%;\n    th, td {\n        line-height: 1.5rem;\n        padding: .5rem;\n    }\n    th {\n        border-bottom-width: 1px;\n    }\n    tr:not(:last-of-type) {\n        td {\n            border-bottom-width: 1px;\n        }\n    }\n    tbody {\n        td {\n            border-color: hsl(var(--bc)/var(--tw-border-opacity));\n            --tw-border-opacity: 0.2;\n        }\n    }\n\n    thead {\n        th {\n            text-align: left;\n            border-color: hsl(var(--bc)/var(--tw-border-opacity));\n            --tw-border-opacity: 0.2;\n        }\n    }\n}\n\n.entity-content table, .tiptap-editor table {\n    width: inherit;\n    border-collapse: collapse;\n    border: 1px solid hsl(var(--bc)/var(--tw-border-opacity));\n    overflow: hidden;\n    table-layout: fixed;\n\n    & th, & td {\n        line-height: 1.5rem;\n        padding: .5rem;\n        min-width: 1em;\n    }\n\n    th, td {\n        --tw-border-opacity: 0.2;\n        border: 1px solid hsl(var(--bc)/var(--tw-border-opacity));\n        position: relative;\n\n        > * {\n            margin-bottom: 0;\n        }\n    }\n\n    th {\n        vertical-align: top;\n    }\n\n    tr:not(:last-of-type) {\n        td {\n            border-bottom-width: 1px;\n        }\n    }\n}\n\n\n.table-bordered {\n    --tw-border-opacity: .2;\n    border-width: 1px;\n    border-color: hsl(var(--bc)/var(--tw-border-opacity));\n    th, td {\n        border-color: hsl(var(--bc)/var(--tw-border-opacity));\n        border-width: 1px;\n    }\n}\n\n.table tr.warning :is(td, th) {\n    background-color: hsl(var(--a)/1);\n    color: hsl(var(--ac)/1);\n}\n.table tr.warning:hover :is(td, th) {\n    background-color: hsl(var(--af)/1);\n    color: hsl(var(--ac)/1);\n}\n\n.table-responsive {\n    overflow-x: unset;\n}\n.table-compact {\n    width: auto;\n}\n.table-left {\n    width: auto;\n    float: left;\n    margin-right: 1rem;\n    margin-bottom: 0.5rem;\n}\n.table-right {\n    width: auto;\n    float: right;\n    margin-left: 1rem;\n    margin-bottom: 0.5rem;\n}\n.table-centered {\n    margin-left: auto;\n    margin-right: auto;\n}\n\n\n.table-condensed > :is(thead, tbody, tfoot) > tr > :is(th, td) {\n    padding: .25rem;\n}\n\n/** Old bootstrap 3.4 stuff to keep people happy? **/\nlegend {\n    display: block;\n    width: 100%;\n    margin-bottom: 22px;\n    font-size: 21px;\n    line-height: inherit;\n    color: hsl(var(--nc)/1);\n    border-bottom: 1px solid hsl(var(--n)/1)\n}\n\n.entity-content, .note-editing-area {\n    table {\n        margin-bottom: 0.75rem;\n    }\n}\n"
  },
  {
    "path": "resources/css/maps/leaflet.zoomdisplay.css",
    "content": ".leaflet-control-zoom-display {\n    background-color: rgba(255, 255, 255, 0.7);\n    border-bottom: 1px solid #333;\n    display: block;\n    text-align: center;\n    text-decoration: none;\n    color: black;\n    padding: 0.15rem 0.35rem;\n}\n"
  },
  {
    "path": "resources/css/maps/maps.css",
    "content": "@import \"leaflet.markercluster/dist/MarkerCluster.css\";\n@import \"leaflet.markercluster/dist/MarkerCluster.Default.css\";\n@import \"./leaflet.zoomdisplay.css\";\n\n:root {\n    --map-hero-ratio: 2/1;\n    --map-ruler-color: #de0000;\n}\n\n.map {\n    width: 100%;\n    min-height: calc(50vh);\n}\n\n.map-explore {\n    min-height: calc(100vh - 50px) !important;\n}\n\n.map-dashboard {\n    min-height: calc(30vh);\n}\n\n.map-preview {\n    min-height: calc(100vh);\n}\n\n.marker {\n    color: white;\n    background-color: unset;\n    text-align: center;\n}\n\n.marker-pin {\n    width: 40px;\n    height: 40px;\n    border-radius: 50% 50% 50% 0;\n    position: absolute;\n    transform: rotate(-45deg);\n    left: 50%;\n    top: 50%;\n    margin: -20px 0 0 -20px;\n    box-shadow: 0 6px 6px rgba(50, 50, 93, 0.31), 0 1px 3px rgba(0, 0, 0, 0.08);;\n\n    &:after {\n        content: '';\n        width: 36px;\n        height: 36px;\n        margin: 2px 0 0 -18px;\n        position: absolute;\n        border-radius: 50%;\n        background-position: 50% 50%;\n        background-size: cover;\n        background-repeat: no-repeat;\n        transform: rotate(45deg);\n    }\n}\n\n.btn-map-explore {\n    color: hsl(var(--pc)/1) !important;\n}\n\n.marker.size-1 {\n    font-size: 0.5em;\n}\n\n.marker.size-2 {\n    font-size: 1em;\n}\n\n.marker.size-3 {\n    font-size: 2em;\n}\n\n.marker.size-4 {\n    font-size: 3em;\n}\n\n.marker.size-5 {\n    font-size: 4em;\n}\n\n.marker {\n    i {\n        font-size: 1.25rem;\n        margin: 0;\n        /* Sometimes FA does weird stuff like putting position: relative, breaking markers */\n        position: absolute !important;\n        top: 50%;\n        left: 50%;\n        -ms-transform: translate(-50%, -50%);\n        transform: translate(-50%, -50%);\n    }\n}\n\n.toast-container {\n    bottom: 60px;\n    z-index: 910;\n}\n\n.map-actions {\n    z-index: 500;\n\n    .btn-mode-enable {\n        display: inline-block;\n    }\n\n    .btn-mode-disable, .btn-mode-drawing {\n        display: none;\n    }\n}\n#map-body {\n    #sidebar-content {\n        padding: 0;\n        overflow: auto;\n        max-height: calc(100vh);\n        white-space: unset;\n        \n        a {\n            color: hsl(var(--pc)/1);\n        }\n    }\n\n\n    .search-drawer, nav {\n        z-index: 1050;\n    }\n\n    .main-sidebar {\n        padding-top: 0;\n        z-index: 1040;\n        --sidebar-link: hsl(var(--bc)/1);\n\n    }\n    header {\n        z-index: 1050;\n    }\n\n    .marker-header.with-image {\n        aspect-ratio: var(--map-hero-ratio);\n        --tw-bg-opacity: 1;\n        background: linear-gradient(180deg, rgba(51, 51, 51, 0) 0%, var(--sidebar-background, hsl(var(--si)/var(--tw-bg-opacity))) 100%);\n\n        .marker-header-fade {\n            --tw-bg-opacity: 1;\n            background: linear-gradient(180deg, rgba(51, 51, 51, 0) 0%, var(--sidebar-background, hsl(var(--si)/var(--tw-bg-opacity))) 100%);\n        }\n    }\n}\n\nbody.map-edit-mode {\n    .map-actions {\n        .btn-mode-enable {\n            display: none;\n        }\n\n        .btn-mode-disable {\n            display: inline-block;\n        }\n    }\n}\n\nbody.map-drawing-mode {\n    .map-actions {\n        .btn-mode-enable, .btn-mode-disable {\n            display: none;\n        }\n\n        .btn-mode-drawing {\n            display: inline-block;\n        }\n    }\n}\n\n\n.marker-close {\n    font-size: 2rem;\n    margin: 0.325rem;\n\n    &:hover {\n        cursor: pointer;\n    }\n}\n\n.leaflet-top, .leaflet-bottom {\n    z-index: 800;\n}\n\n.leaflet-popup img, #sidebar-marker img {\n    max-width: 100%;\n    height: auto;\n}\n\n@media (min-width: 768px) {\n    #map-body {\n        --sidebar-width: 24rem; /* 384px */\n    }\n}\n\n/** Theming of the leaflet stuff **/\n.leaflet-popup-content-wrapper,\n.leaflet-popup-tip,\n.leaflet-control-layers-expanded,\n.leaflet-control-layers,\n.leaflet-bar a {\n    background-color: var(--leaflet-popup-background, hsl(var(--b1)/1)) !important;\n    color: var(--leaflet-popup-text, hsl(var(--bc)/1)) !important;\n}\n\n.leaflet-bar a {\n    &:hover {\n        background: var(--leaflet-popup-background, hsl(var(--b1)/1));\n    }\n}\n\n.leaflet-popup-content-wrapper, .leaflet-popup-tip {\n    background: var(--leaflet-popup-background, hsl(var(--b1)/1));\n}\n\n.leaflet-container {\n    background: transparent !important;\n}\n\n/** Used by the ruler plugin */\n.leaflet-ruler {\n    height: 48px;\n    width: 48px;\n    background-image: url(/resources/images/leaflet/icon.png); /* <div>Icons made by <a href=\"http://www.freepik.com\" title=\"Freepik\">Freepik</a> from <a href=\"http://www.flaticon.com\" title=\"Flaticon\">www.flaticon.com</a> is licensed by <a href=\"http://creativecommons.org/licenses/by/3.0/\" title=\"Creative Commons BY 3.0\" target=\"_blank\">CC 3.0 BY</a></div> */\n    background-repeat: no-repeat;\n    background-position: center;\n}\n\n.leaflet-ruler:hover {\n    background-image: url(/resources/images/leaflet/icon-colored.png); /* <div>Icons made by <a href=\"http://www.freepik.com\" title=\"Freepik\">Freepik</a> from <a href=\"http://www.flaticon.com\" title=\"Flaticon\">www.flaticon.com</a> is licensed by <a href=\"http://creativecommons.org/licenses/by/3.0/\" title=\"Creative Commons BY 3.0\" target=\"_blank\">CC 3.0 BY</a></div> */\n}\n\n.leaflet-ruler-clicked {\n    height: 48px;\n    width: 48px;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-image: url(/resources/images/leaflet/icon-colored.png);\n}\n.leaflet-bar {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n}\n\n.result-tooltip {\n    background-color: white;\n    border-width: medium;\n    border-color: var(--map-ruler-color);\n    font-size: smaller;\n}\n\n.moving-tooltip {\n    background-color: rgba(255, 255, 255, .7);\n    background-clip: padding-box;\n    opacity: 0.5;\n    border: dotted;\n    border-color: var(--map-ruler-color);\n    font-size: smaller;\n}\n\n.plus-length {\n    padding-left: 45px;\n}\n/** END Used by the ruler plugin */\n\n/** Provided by Salvatos **/\n.leaflet-control-layers-overlays .leaflet-layerstree-node:not(:has(.leaflet-layerstree-header-pointer)) {\n    .leaflet-control-layers-selector {\n        display: none;\n    }\n    .leaflet-layerstree-header-name {\n        font-weight: bold;\n    }\n}\n/** Tweaks **/\n.leaflet-layerstree-header {\n    display: flex;\n    gap: 0.5rem;\n}\n.leaflet-layerstree-header-label {\n    display: flex !important;\n    gap: 0.25rem;\n    align-items: center;\n    &:hover {\n        font-weight: bold;\n    }\n}\n"
  },
  {
    "path": "resources/css/mobile.css",
    "content": "@media (max-width: 767px) {\n    .content-header {\n        padding-top: 5px;\n    }\n\n    .table-responsive {\n        overflow-x: auto;\n        overflow-y: auto;\n        border: none;\n    }\n    .keyboard-shortcut {\n        display: none;\n    }\n}\n"
  },
  {
    "path": "resources/css/premium.css",
    "content": "/**\n * Entity\n * Contains all the stuff for the entity's overview and subpages.\n */\n\n/* Dynamically control which privacy status icon is shown based on the page's class */\n.entity-privacy-icon {\n    .fa-lock-open {\n        display: inline-block;\n    }\n\n    .fa-lock {\n        display: none;\n    }\n}\n.kanka-entity-private {\n    .entity-privacy-icon {\n        .fa-lock-open {\n            display: none;\n        }\n\n        .fa-lock {\n            display: inline-block;\n        }\n    }\n}\n\n.sidebar-section-box {\n    background: var(--sidebar-section-background, none);\n    padding: var(--sidebar-section-padding, 0);\n}\n\n.entity-header {\n    .entity-breadcrumb {\n        li + li:before {\n            content: \">\\A0\";\n            padding: 0 5px;\n            --tw-text-opacity: .6;\n            color: hsl(var(--bc)/var(--tw-text-opacity));\n        }\n    }\n}\n.entity-grid > .entity-header.with-entity-banner {\n    .entity-name-header {\n        > .entity-name, > .entity-title {\n            text-shadow: rgba(0, 0, 0, 0.5) 0 1px 4px;\n            color: white;\n        }\n        > .entity-icons {\n            color: white;\n        }\n    }\n\n\n    .entity-header-sub {\n        color: white;\n        .entity-header-sub-element > a {\n            color: white;\n            text-decoration: underline;\n            text-underline-offset: 0.2rem;\n        }\n    }\n\n    .entity-breadcrumb {\n        color: white;\n\n        a {\n            color: white;\n        }\n        li:before {\n            color: white;\n        }\n    }\n}\n\n/** Stop tables from being stupid wide **/\n.entity-content {\n    table {\n        max-width: 100%;\n    }\n    ul {\n        list-style: disc;\n        padding: 0 1.5rem;\n    }\n    ol {\n        list-style: decimal;\n        padding: 0 1.5rem;\n    }\n    > ol, > ul {\n        margin-top: 0;\n        margin-bottom: 0.5rem;\n    }\n}\n\n.comma-separated {\n  .element ~ .element::before {\n    content: ', ';\n  }\n}\n\n/**\n * Everything is a grid now\n */\nbody.entity-with-banner .content-wrapper > .content {\n    padding-top: 0;\n    padding-left: 0;\n    padding-right: 0;\n\n    .entity-body {\n        padding-left: 1rem;\n        padding-right: 1rem;\n    }\n\n    > .alert {\n        border-radius: 0;\n        margin-bottom: -0.5rem;\n    }\n}\n\n\n/* Task list specific styles */\nul[data-type='taskList'] {\n    list-style: none;\n    margin-left: 0;\n    padding: 0;\n\n    li {\n        align-items: flex-start;\n        display: flex;\n        p {\n            margin-bottom: unset;\n        }\n\n        > label {\n            flex: 0 0 auto;\n            margin-right: 0.5rem;\n            user-select: none;\n        }\n\n        > div {\n            flex: 1 1 auto;\n        }\n    }\n\n    input[type='checkbox'] {\n        cursor: pointer;\n        position: relative;\n        padding: 0.5rem;\n        &:checked::after {\n            left: 0.1rem;\n            font-size: 1.2rem;\n        }\n    }\n\n    ul[data-type='taskList'] {\n        margin: 0;\n    }\n}\n"
  },
  {
    "path": "resources/css/print/general.css",
    "content": "\n@media print {\n    body {\n        -webkit-print-color-adjust: exact;\n    }\n}\n"
  },
  {
    "path": "resources/css/print/print.css",
    "content": "/**\n * SASS file for all that is print related.\n * This file contains all the stuff to hide when printing\n */\n:root {\n    --header-text: inherit;\n}\n\n.entity-image.hidden-xs {\n  display: none !important;\n}\n.entity-print-image {\n  width: 100%;\n}\n.entity-header {\n    background-image: none !important;\n}\n.entity-header .entity-header-text .entity-header-line:nth-last-child(2) {\n  display: block;\n}\n.entity-content .p-4, .entity-content {\n    padding-left: 0;\n    padding-right: 0;\n}\n\n@media print {\n\n    .print-none, .entity-empty-pin {\n        display: none;\n    }\n    body {\n        -webkit-print-color-adjust: exact;\n    }\n    .main-footer {\n        display: none !important;\n    }\n\n    .btn, .btn2 {\n        display: none !important;\n    }\n\n    a[href]:after {\n        content: none !important;\n    }\n\n\n    .entity-image {\n        -webkit-print-color-adjust: exact;\n    }\n\n    .collapse {\n        display: block;\n    }\n\n    .box-solid.character-appearances, .box-solid.character-personalities {\n        display: none;\n    }\n    .dropdown {\n        display: none;\n    }\n\n    tr,\n    img {\n        page-break-inside: avoid;\n    }\n\n    img {\n        max-width: 100% !important;\n    }\n\n    .col-sm-4 {\n        width: 33.333333%;\n    }\n\n    .col-md-3 {\n        width: 25%;\n    }\n\n    .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n        float: left;\n    }\n    .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n        float: left;\n    }\n}\nbody, #app.wrapper, .wrapper, .content-wrapper, .box {\n    background: unset;\n    background-image: unset;\n    background-color: unset;\n    box-shadow: unset;\n}\n\n.shadow-xs, .shadow-sm {\n    box-shadow: unset;\n}\n\n.content-wrapper {\n    margin-left: 0;\n    background-color: white;\n\n    .content-header {\n        padding-top: 0;\n    }\n\n    .content {\n        padding-top: 0;\n    }\n}\n\n.entity-grid {\n    grid-template-columns: 16% minmax(auto, calc(100% - 32%)) 16%;\n\n    .entity-submenu {\n        display: none;\n    }\n\n    .entity-print-image {\n        display: unset;\n    }\n\n    .entity-image {\n        display: none;\n    }\n\n\n    .entity-story-block {\n        grid-column: 1 / span 2;\n        width: 100%;\n        padding-left: 0;\n    }\n\n    .entity-sidebar-pins {\n        display: none;\n\n        .fa-question-circle {\n            display: none;\n        }\n    }\n\n    .btn, .btn2 {\n        display: none;\n    }\n\n    .entity-modification-history, .entity-mentions-box {\n        display: none;\n    }\n\n    .entity-header {\n        .entity-header-image {\n            padding-left: 0;\n        }\n        .dropdown {\n            display: none;\n        }\n\n        .entity-grid .entity-header .entity-header-image + .entity-header-text {\n            padding-left: 0;\n        }\n\n        .entity-image-col {\n            .entity-image {\n                display: none;\n            }\n        }\n\n        .fa-cog {\n            display: none;\n        }\n\n        .entity-breadcrumb {\n            display: none;\n        }\n    }\n}\n\n.fa-solid.fa-chevron-up, .fa-solid.fa-chevron-down, .fa-solid.fa-question-circle {\n    display: none;\n}\n\n\n.btn-primary, .btn-xs, .btn-secondary, .btn-warning, .fa-solid.fa-edit {\n    display: none;\n}\n.btn-print {\n    z-index: 9999;\n    display: unset;\n}\n\n.pagebreak { page-break-before: always; }\n"
  },
  {
    "path": "resources/css/quest.css",
    "content": ".box-quest-element {\n    /* Quest panels */\n    .widget-user-username {\n        a {\n            color: white;\n        }\n    }\n\n    .bg-gray, .bg-none {\n        .widget-user-username {\n            a {\n                color: hsl(var(--p)/1);\n            }\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "resources/css/quick-creator.css",
    "content": "@media (min-width: 768px) {\n    .quick-creator-body {\n        .selection .option {\n            .full-form {\n                display: none;\n            }\n\n            &:hover {\n                .full-form {\n                    display: inline;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "resources/css/range.css",
    "content": "input[type=\"range\"] {\n    --range-fill: 50%;\n\n    -webkit-appearance: none;\n    accent-color: hsl(var(--p));\n    appearance: none;\n    height: 6px;\n    border-radius: 3px;\n    background: hsl(var(--bc) / 0.15);\n    outline: none;\n    cursor: pointer;\n    padding: 0;\n\n    &:focus {\n        outline: none;\n    }\n\n    &::-moz-range-progress {\n        background: hsl(var(--p));\n        border-radius: 3px;\n        height: 6px;\n    }\n\n    &::-moz-range-track {\n        background: hsl(var(--bc) / 0.15);\n        border-radius: 3px;\n        height: 6px;\n    }\n\n    &::-webkit-slider-thumb {\n        -webkit-appearance: none;\n        appearance: none;\n        width: 18px;\n        height: 18px;\n        border-radius: 50%;\n        background: hsl(var(--p));\n        border: 2px solid hsl(var(--b1));\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n        transition: transform 0.15s ease;\n    }\n\n    &::-moz-range-thumb {\n        width: 18px;\n        height: 18px;\n        border-radius: 50%;\n        background: hsl(var(--p));\n        border: 2px solid hsl(var(--b1));\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n        transition: transform 0.15s ease;\n    }\n\n    &:hover::-webkit-slider-thumb {\n        transform: scale(1.15);\n    }\n\n    &:hover::-moz-range-thumb {\n        transform: scale(1.15);\n    }\n}\n"
  },
  {
    "path": "resources/css/relations.css",
    "content": "@import 'cytoscape-panzoom/cytoscape.js-panzoom.css';\n.cy-panzoom {\n    z-index: 800;\n}\n\n"
  },
  {
    "path": "resources/css/sortable.css",
    "content": "/**\n * Layout rendering for reorderable elements (posts, timeline elements)\n * 95% can be migrated to tw\n */\n.element-live-reorder {\n    .element {\n        cursor: grab;\n\n        select {\n            height: 28px;\n            padding: 3px 6px;\n        }\n\n        .children {\n            flex: 0 0 100%;\n        }\n    }\n}\n"
  },
  {
    "path": "resources/css/subscription.css",
    "content": "\n.tiers {\n    table-layout: fixed;\n\n    .tier {\n        display: flex;\n        align-items: center;\n        position: relative;\n\n        .text {\n            font-size: 1.2em;\n\n            .price {\n                --tw-text-opacity: .5;\n                color: hsl(var(--bc)/var(--tw-text-opacity));\n                font-size: 0.8em;\n                display: block;\n\n                sup {\n                    top: .5em;\n                }\n            }\n        }\n    }\n\n    .btn-block {\n        white-space: normal !important;\n        word-wrap: break-word;\n    }\n\n    .align-middle {\n        vertical-align: middle !important;\n    }\n\n    .fa-check {\n        color: green;\n    }\n}\n\n.card {\n    .card-element {\n        --tw-border-opacity: .2;\n        border: 1px solid hsl(var(--bc)/var(--tw-border-opacity));\n        background-color: white;\n    }\n}\n\n.StripeElement {\n    --tw-border-opacity: .2;\n    border: 1px solid hsl(var(--bc)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n    padding: 9px 12px;\n    line-height: 1.5;\n    box-shadow: none;\n    color: inherit;\n    border-radius: var(--rounded-btn, .5rem);\n}\n\nbody {\n    #pricing-overview.period-year {\n        .price-monthly {\n            display: none;\n        }\n\n        .price-yearly {\n            display: inline-flex;\n        }\n    }\n\n    #pricing-overview.period-month {\n        .price-monthly {\n            display: inline-flex;\n        }\n\n        .price-yearly {\n            display: none;\n        }\n    }\n\n    .btn-block.price-yearly {\n        margin-top: 0;\n    }\n\n    .ribbon {\n        display: block;\n    }\n}\n\n@media (max-width: 991px) {\n  table.tiers {\n    .tier {\n      text-align: center;\n      display: block;\n      .img {\n        text-align: center;\n        justify-content: unset;\n      }\n    }\n  }\n}\n\n\n/* common */\n.ribbon {\n  width: 70px;\n  height: 70px;\n  overflow: hidden;\n  position: absolute;\n  display: none;\n}\n.ribbon span {\n    position: absolute;\n    display: block;\n    width: 105px;\n    padding: 3px 0;\n    box-shadow: 0 2px 5px rgba(0, 0, 0, .1);\n\n    font: 700 8px/1 'Lato', sans-serif;\n    text-shadow: 0 1px 1px rgba(0, 0, 0, .2);\n    text-transform: uppercase;\n    text-align: center;\n}\n\n/* top left*/\n.ribbon-top-left {\n    top: -10px;\n    left: -10px;\n}\n.ribbon-top-left span {\n    right: -25px;\n    top: 30px;\n    transform: rotate(-45deg);\n}\n\n/* top right*/\n.ribbon-top-right {\n    top: 0;\n    right: 0;\n}\n.ribbon-top-right span {\n    left: -10px;\n    bottom: 35px;\n    transform: rotate(45deg);\n}\n\n/* bottom left*/\n.ribbon-bottom-left {\n    bottom: 0;\n    left: 0;\n}\n.ribbon-bottom-left span {\n    right: -25px;\n    bottom: 30px;\n    transform: rotate(225deg);\n}\n\n/* bottom right*/\n.ribbon-bottom-right {\n  bottom: -10px;\n  right: -10px;\n}\n.ribbon-bottom-right span {\n    left: -25px;\n    bottom: 25px;\n    transform: rotate(-225deg);\n}\n\n/** Promo code **/\n.alert-coupon {\n    display: none;\n}\n.valid-coupon .alert-coupon {\n    display: block;\n}\n"
  },
  {
    "path": "resources/css/tabs.css",
    "content": ".nav-tabs {\n    margin: 0;\n    padding: 0;\n    display: flex;\n    list-style: none;\n}\n.nav-tabs>li{\n    margin: 0;\n}\n.nav-tabs>li>a{\n    line-height:1.25rem;\n    border-radius:var(--tab-radius, .25rem) var(--tab-radius, .25rem) 0 0;\n    padding: 0.4rem 0.6rem;\n    display: block;\n    border-width: var(--tab-border, 0);\n    --tw-bg-opacity: 0.5;\n    --tab-bg: hsl(var(--b1) / var(--tw-bg-opacity, 1));\n    background-color: var(--tab-bg);\n\n    --tw-text-opacity: .5;\n    --tab-color: hsl(var(--bc) / var(--tw-text-opacity, 1));\n    color:var(--tab-color);\n}\n.nav-tabs>li.active {\n    color: hsl(var(--p)/var(--tw-text-opacity));\n    font-weight: 500;\n}\n.nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover{\n    --tw-bg-opacity: 1;\n    --tw-text-opacity: 1;\n}\n.nav-tabs>li>a:hover {\n    cursor: pointer;\n    --tw-text-opacity: 1;\n}\n.tab-content>.tab-pane {\n    display:none\n}\n.tab-content>.active {\n    display:block\n}\n"
  },
  {
    "path": "resources/css/themes/base.css",
    "content": "@import \"./light.css\";\n@import \"./colour.css\";\n\nbody {\n    --tw-background-opacity: 1;\n    background-color: var(--body-background, var(--content-wrapper-background, hsl(var(--b1)/var(--tw-background-opacity))));\n    --tw-text-opacity: 1;\n    color: var(--body-text, hsl(var(--bc)/var(--tw-text-opacity)));\n}\n\nhr {\n    border-color: hsl(var(--bc)/var(--tw-border-opacity));\n    --tw-border-opacity: 0.1;\n}\n.entity-content a, .text-link {\n    --tw-text-opacity: 1;\n    color: var(--link-text, hsl(var(--p)/var(--tw-text-opacity)));\n\n    &:hover {\n        --tw-text-opacity: 1;\n        color: var(--link-text, hsl(var(--pf)/var(--tw-text-opacity)));\n    }\n\n    &:focus {\n        --tw-text-opacity: 1;\n        color: var(--link-focus, hsl(var(--pf)/var(--tw-text-opacity)));\n    }\n}\na.neutral-link {\n    --tw-text-opacity: 1;\n    color: hsl(var(--nc)/var(--tw-text-opacity));\n    &:hover, &:focus {\n        --tw-text-opacity: 1;\n        color: hsl(var(--nc)/var(--tw-text-opacity));\n    }\n}\n\nh1, h2, h3, h4, h5, h6, h1 > small, .panel-title {\n    --tw-text-opacity: 1;\n    color: var(--header-text, hsl(var(--bc)/var(--tw-text-opacity)));\n}\n\n.bg-wrapper {\n    background-color: var(--content-wrapper-background, hsl(var(--b1)/var(--tw-background-opacity)));\n    --tw-background-opacity: 1;\n}\n\n\ninput, textarea, .ts-wrapper, select, .form-control {\n    border-width: 1px;\n    border-color: hsl(var(--bc)/var(--tw-border-opacity));\n    --tw-border-opacity: 0.1;\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n    border-radius: var(--rounded-btn,.5rem);\n    line-height: normal;\n    box-shadow: none;\n    color: inherit;\n}\ninput, textarea, select {\n    padding: 0.6rem 0.8rem;\n}\ninput::placeholder, textarea::placeholder, select::placeholder, .form-control::placeholder {\n    --tw-text-opacity: .4;\n    color: hsl(var(--bc)/var(--tw-text-opacity));\n}\ninput[type=\"text\"], input[type=\"date\"], input[type=\"number\"], input[type=\"file\"], select {\n    min-height: 2.1rem;\n}\ninput:focus, select:focus, .textarea:focus, .form-control:focus {\n    outline-style: solid;\n    outline-width: 2px;\n    outline-offset: 2px;\n    outline-color: hsl(var(--p)/0.3);\n    box-shadow: none;\n    border-color: transparent;\n}\n.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--b2)/var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b2)/var(--tw-bg-opacity));\n    --tw-text-opacity: .2;\n}\ninput[type=\"checkbox\"] {\n    -webkit-appearance: none;\n    --tw-accent-opacity: 1;\n    accent-color: hsl(var(--p)/var(--tw-accent-opacity));\n    position: relative;\n    margin: 0;\n    padding: 0.8rem;\n}\ninput[type=\"checkbox\"]:checked {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--p)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--pc)/var(--tw-text-opacity));\n}\ninput[type=\"checkbox\"]:checked:after {\n    content: var(--checkbox-content, '\\2714');\n    font-size: 1.4rem;\n    position: absolute;\n    top: 0;\n    left: 0.2rem;\n}\n/**, ::before, ::after {\n    --tw-border-opacity: 0.2;\n    border-color: hsl(var(--bc)/var(--tw-border-opacity));\n}*/\n.ts-wrapper {\n    border: none;\n    padding: 0;\n}\n\n.modal-content {\n    .modal-body {\n        background-color: hsl(var(--b1)/1);\n    }\n    .modal-header, .modal-footer {\n        background-color: hsl(var(--b1)/1);\n        border-color: hsl(var(--bc)/var(--tw-border-opacity, 1));\n        --tw-border-opacity: .1;\n    }\n}\n\n\n/** Buttons **/\n.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus, .pagination > li > a {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b2)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--bc)/var(--tw-text-opacity));\n    border-color: hsl(var(--b2)/var(--tw-border-opacity));\n    border-width: 0;\n    &:hover {\n        --tw-border-opacity: 1;\n        border-color: hsl(var(--b3)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color: hsl(var(--b3)/var(--tw-bg-opacity));\n        border-width: 0;\n        --tw-text-opacity: 1;\n        color: hsl(var(--bc)/var(--tw-text-opacity));\n    }\n}\n.pagination > .active > a, .pagination > .active > a:focus, .pagination > .active > a:hover, .pagination > .active > span, .pagination > .active > span:focus, .pagination > .active > span:hover {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--p)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--pc)/var(--tw-text-opacity));\n    border-width: 0;\n\n}\n\n/**\n * All of the boxes follow a similar design in our themes\n */\n.box, .panel {\n    border: var(--box-border, none);\n    --tw-background-opacity: 1;\n    background-color: var(--box-background, hsl(var(--b1)/1));\n\n    .box-header, .panel-heading {\n        background-color: var(--box-header-background, transparent);\n        color: var(--box-header-text);\n    }\n\n    .box-footer {\n        background: var(--box-footer-background);\n        --tw-border-opacity: 0.1;\n        border-top-color: hsl(var(--bc)/var(--tw-border-opacity));\n    }\n}\n\n.panel-default > .panel-heading {\n    --tw-border-opacity: 0.1;\n    border-color: hsl(var(--bc)/var(--tw-border-opacity));\n}\nblockquote {\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--b3)/var(--tw-border-opacity));\n    padding: 0.6rem 1.1rem;\n    font-size: 1.1rem;\n    border-left-style: solid;\n    border-left-width: 0.25rem;\n}\n.dd-menu {\n    min-width: 160px;\n}\n\n\n/** Tables */\n\n.table-striped tbody > tr:nth-of-type(odd) {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b2)/var(--tw-bg-opacity));\n}\n.table-hover {\n    tbody {\n        tr {\n            &:hover {\n                --tw-bg-opacity: 1;\n                background-color: hsl(var(--b2)/var(--tw-bg-opacity));\n            }\n        }\n    }\n}\n\n/** borders **/\n/*.border-base-100 {*/\n/*    --tw-border-opacity: 1;*/\n/*    border-color:hsl(var(--b1)/var(--tw-border-opacity))*/\n/*}*/\n/*.border-base-200 {*/\n/*    --tw-border-opacity: 1;*/\n/*    border-color:hsl(var(--b2)/var(--tw-border-opacity))*/\n/*}*/\n/*.border-base-300 {*/\n/*    --tw-border-opacity: 1;*/\n/*    border-color:hsl(var(--b3)/var(--tw-border-opacity))*/\n/*}*/\n.border-base-content {\n    --tw-border-opacity: 1;\n    border-color:hsl(var(--bc)/var(--tw-border-opacity))\n}\n\n/** hovers **/\n/*.hover\\:bg-base-100:hover {*/\n/*    --tw-bg-opacity: 1;*/\n/*    background-color:hsl(var(--b1)/var(--tw-bg-opacity))*/\n/*}*/\n/*.hover\\:bg-base-200:hover {*/\n/*    --tw-bg-opacity: 1;*/\n/*    background-color:hsl(var(--b2)/var(--tw-bg-opacity))*/\n/*}*/\n/*.hover\\:bg-base-300:hover {*/\n/*    --tw-bg-opacity: 1;*/\n/*    background-color:hsl(var(--b3)/var(--tw-bg-opacity))*/\n/*}*/\n\n.bg-opacity-50 {\n    --tw-bg-opacity: 0.5;\n}\n.bg-opacity-60 {\n    --tw-bg-opacity: 0.6;\n}\n.bg-opacity-70 {\n    --tw-bg-opacity: 0.7;\n}\n.bg-opacity-80 {\n    --tw-bg-opacity: 0.8;\n}\n.bg-opacity-90 {\n    --tw-bg-opacity: 0.9;\n}\n"
  },
  {
    "path": "resources/css/themes/colour.css",
    "content": "\n.text-red {\n    color:#dd4b39 !important\n}\n.text-yellow {\n    color:#f39c12 !important\n}\n.text-black {\n    color:#111 !important\n}\n.text-white {\n    color:#fff !important\n}\n\n\n@theme {\n    --color-base-100: hsl(var(--b1)/1);\n    --color-base-200: hsl(var(--b2)/1);\n    --color-base-300: hsl(var(--b3)/1);\n    --color-base-content: hsl(var(--bc)/1);\n    --color-error: hsl(var(--er)/1);\n    --color-error-content: hsl(var(--erc)/1);\n    --color-primary: hsl(var(--p)/1);\n    --color-primary-content: hsl(var(--pc)/1);\n    --color-primary-focus: hsl(var(--pf)/1);\n    --color-secondary: hsl(var(--s)/1);\n    --color-secondary-content: hsl(var(--sc)/1);\n    --color-secondary-focus: hsl(var(--sf)/1);\n    --color-accent: hsl(var(--a)/1);\n    --color-accent-content: hsl(var(--ac)/1);\n    --color-accent-focus: hsl(var(--af)/1);\n    --color-neutral: hsl(var(--n)/1);\n    --color-neutral-content: hsl(var(--nc)/1);\n    --color-neutral-focus: hsl(var(--nf)/1);\n    --color-success: hsl(var(--su)/1);\n    --color-success-content: hsl(var(--suc)/1);\n    --color-warning: hsl(var(--wa)/1);\n    --color-warning-content: hsl(var(--wac)/1);\n    --color-info: hsl(var(--in)/1);\n    --color-info-content: hsl(var(--inc)/1);\n}\n\n.text-sidebar-content {\n    --tw-text-opacity: 1;\n    color:hsl(var(--sic)/var(--tw-text-opacity));\n}\n.\\!text-sidebar-content {\n    /* Can be removed when we remove `main-sidebar a` from app.scss */\n    --tw-text-opacity: 1;\n    color:hsl(var(--sic)/var(--tw-text-opacity)) !important;\n}\n\n.help-block {\n    --tw-text-opacity: 1;\n    color:hsl(var(--nc)/var(--tw-text-opacity))\n}\n\n\n/** background colours **/\n.gradient-to-base-100 {\n    background: linear-gradient(transparent 0px, var(--dashboard-preview-gradient, hsl(var(--b1)/1)));\n}\n\n\n\n"
  },
  {
    "path": "resources/css/themes/dark.css",
    "content": "@layer theme {\n    html {\n        color-scheme: dark;\n        accent-color: hsl(var(--a)/1);\n    }\n    :root {\n        /* General background color */\n        --base: 240 21% 15%;\n        --crust: 240 23% 9%;\n        --mantle: 240 21% 12%;\n        --content-wrapper-background: hsl(var(--base)/1);\n        --surface0: 237 16% 23%;\n        --surface1: 234 13% 31%;\n        --surface2: 233 12% 39%;\n        --text: 226 64% 88%;\n        --subtext0: 228 24% 72%;\n        --subtext1: 227 35% 80%;\n        --mauve: 287 84% 81%;\n        --pink: 316 72% 86%;\n\n        /* For the legacy editor, make it compatible with dark mode */\n        --tinymce-filter: invert(90%) !important;\n        --body-background: hsl(var(--base)/1);\n        --sf: 316 70% 43%;\n        --af: 175 70% 34%;\n        --su: 144 31% 76%;\n        --wa: 23 92% 75%;\n        --inc: 199 76% 89%;\n        --in: 223 61.8% 20.8%;\n        --suc: 163 88.1% 15.8%;\n        --wac: 26 90.5% 17.1%;\n        --p: 287 84% 81%;\n        --pc: 287 78% 1%;\n        --pf: 287 88% 62%;\n        --s: 316 70% 50%;\n        --sc: var(--text);\n        --a: 175 70% 41%;\n        --ac: var(--text);\n        --n: 213 18% 20%;\n        --nf: 212 17% 17%;\n        --nc: 228 17% 64%;\n        --b1: var(--mantle);\n        --b2: var(--base);\n        --b3: 240 23% 9%;\n        --bc: var(--text);\n\n        --si: var(--mantle);\n        --sif: var(--surface1);\n    }\n\n}\n.alert {\n    border: 1px solid var(--alert-bg);\n    /*--alert-bg: hsl(var(--b1)/1);*/\n}\n"
  },
  {
    "path": "resources/css/themes/light.css",
    "content": "@layer theme {\n    html {\n        color-scheme: light;\n        accent-color: hsl(var(--a)/1);\n    }\n    :root {\n        /* Background colour behind the UI elements */\n        --content-wrapper-background: #f6f6f6;\n        --boosted: 338 78% 48%;\n\n        /* Primary colour, used for buttons and links */\n        --p: 223 73% 24%;\n        /* Primary colour when focused */\n        --pf: 213 100% 24.9%;\n        /* Foreground content colour to use on primary colour */\n        --pc: 255 0% 100%;\n\n        /* Secondary colour, currently unused */\n        --s: 210 50% 96.1%;\n        /* Secondary colour when focused */\n        --sf: 210 52.2% 91%;\n        /* Foreground content colour to use on secondary colour */\n        --sc: 223 61.8% 30.8%;\n\n        /* Accent colour, used for some important buttons like \"new post\" */\n        --a: 41 74% 53%;\n        /* Accent colour when focused */\n        --af: 41 74% 46%;\n        /* Text colour for accent */\n        --ac: 151 21% 13%;\n\n        /* Neutral colour, for example for default tags, code and pre elements, tooltip borders */\n        --n: 220 22% 92%;\n        /* Neutral colour when focused */\n        --nf: 227 12% 71%;\n        /* Text colour for elements with the neutral colour background */\n        --nc: 218 14.6% 54.9%;\n\n        /* Base background colours, used for boxes, panels, modals */\n        --b1: 0 0% 100%;\n        --b2: 0 0% 93%;\n        --b3: 0 0% 86%;\n        /* Text colour for elements on a base background */\n        --bc: 233 27% 13%;\n\n        /* Info messages background and foreground */\n        --in: 210 50% 93.1%;\n        --inc: 223 61.8% 30.8%;\n\n        /* Warning messages */\n        --wa: 48 96.5% 88.8%;\n        --wac: 26 90.5% 37.1%;\n\n        /* Error messages */\n        --er: 352.65 96.08% 90%;\n        --erc: 350 89.2% 60.2%;\n\n        /* Success messages */\n        --su: 152 81% 95.9%;\n        --suc: 163 88.1% 19.8%;\n\n        /* Sidebar */\n        --si: 0 0% 20%;\n        --sif: 0 0% 10%;\n        --sic: 0 0% 90%;\n\n        /* Border radius for buttons */\n        --rounded-btn: .678rem;\n        /* Border radius for badges (tags) */\n        --rounded-badge: .25rem;\n        /* Animation duration when a button is focused */\n        --animation-btn: 0;\n        /* Scale effect on buttons when focused */\n        --btn-focus-scale: 1;\n\n        /* Button text transform */\n        --btn-text-case: inherit;\n\n        /* Border radius for tabs */\n        --tab-radius: .25rem;\n\n        /* Border thickness for tabs */\n        --tab-border: 0px;\n    }\n}\n"
  },
  {
    "path": "resources/css/themes/midnight.css",
    "content": "@layer theme {\n    html {\n        color-scheme: dark;\n        accent-color: hsl(var(--a)/1);\n    }\n    :root {\n        /* Background color */\n        --content-wrapper-background: hsl(var(--b3)/1);\n\n        /* Make the legacy editor work with dark mode */\n        --tinymce-filter: invert(90%) !important;\n\n        --pf: 198 93% 53%;\n        --sf: 234 89% 67%;\n        --af: 175 70% 34%;\n        --b1: 212 46% 7%;\n        --b2: 222 47% 7%;\n        --b3: 228 45% 5%;\n        --bc: 229 7% 80%;\n        --pc: 202 34% 14%;\n        --sc: 239 22% 15%;\n        --a: 175 70% 41%;\n        --ac: 0 0% 100%;\n        --nc: 221 7% 82%;\n        --inc: 208 79% 92%;\n        --suc: 169 31% 13%;\n        --wac: 39 36% 14%;\n        --p: 198 93% 60%;\n        --s: 234 89% 74%;\n        --n: 217 33% 17%;\n        --nf: 217 30% 22%;\n        --in: 198 90% 28%;\n        --su: 172 66% 50%;\n        --wa: 41 88% 64%;\n\n        --si: var(--b2);\n        --sif: var(--pf);\n    }\n}\n\n"
  },
  {
    "path": "resources/css/timeline.css",
    "content": "/**\n * Timelines\n */\n\n.timeline > li > i:is(.ra, .fa, .fab, .far, .fas, .fa-solid, .fa-regular, .fa-brands, .fa-thin, .fa-duotone) {\n    line-height: 30px;\n    --tw-text-opacity: 1;\n    color: hsl(var(--bc)/var(--tw-text-opacity));\n    --tw-background-opacity: 1;\n    background: hsl(var(--b1)/var(--tw-background-opacity));\n    left: 18px;\n}\n\n\n/*\n * Component: Timeline\n * -------------------\n */\n.timeline > li {\n    &:before {\n        content: '';\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        width: 4px;\n        background: hsl(var(--b1)/1);\n        left: 31px;\n        margin: 0;\n        border-radius: 2px;\n    }\n\n    &:last-of-type {\n        &:before {\n            content: ' ';\n            display: table;\n        }\n    }\n\n    &:after {\n        content: \" \";\n        display: table;\n        clear: both;\n    }\n}\n"
  },
  {
    "path": "resources/css/toast.css",
    "content": "/** Toast **/\n.toast-container {\n    .toast-success, .toast-error {\n        .toast-message {\n            background-color: var(--toast-background, #00a65a);\n            color: var(--toast-text, white);\n        }\n    }\n    .toast-error .toast-message {\n        background-color: var(--toast-background-error, #d73925);\n    }\n}\n"
  },
  {
    "path": "resources/css/toggle.css",
    "content": ":root {\n    --toggle-width: 60px;\n    --toggle-height: calc(var(--toggle-width) / 3);\n}\n.toggle {\n    position: relative;\n    display: inline-block;\n    width: var(--toggle-width);\n    height: var(--toggle-height);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n    border-radius: var(--toggle-height);\n    cursor: pointer;\n    margin-bottom: 0;\n\n    .slider {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        border-radius: .5rem;\n        background-color: hsl(var(--n)/.1);\n        transition: all 0.4s ease-in-out;\n    }\n\n    .slider::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: calc(var(--toggle-height));\n        height: calc(var(--toggle-height));\n        border-radius: calc(var(--toggle-height) / 2);\n        background-color: hsl(var(--p)/1);\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n        transition: all 0.4s ease-in-out;\n    }\n\n    /* hiding checkbox */\n    input {\n        display: none;\n    }\n\n    input:checked + .slider {\n        --tw-bg-opacity: .7;\n        background-color: hsl(var(--p)/var(--tw-bg-opacity));\n    }\n\n    input:checked + .slider::before {\n        transform: translateX(calc(var(--toggle-width) - var(--toggle-height)));\n    }\n}\n"
  },
  {
    "path": "resources/css/tooltip.css",
    "content": "/**\n * Control the way tooltips appear. Boosted campaigns can have entity images displayed in tooltips.\n */\n.tooltip-content {\n    max-width: 378px !important;\n    .tooltip-header {\n        background:\n            linear-gradient(180deg, rgba(51, 51, 51, 0) 0%, hsl(var(--b1)/var(--tw-bg-opacity, 1)) 100%),\n            var(--tooltip-background);\n            background-size: cover;\n            background-position: center;\n            background-repeat: no-repeat;\n    }\n    .tooltip-text {\n        /* Boosted campaigns can set a custom tooltip WITH html, including headers, so we need to make them way smaller here */\n        h1 {\n            font-size: 1.16rem;\n        }\n        h2 {\n            font-size: 1.12rem;\n        }\n        h3 {\n            font-size: 1.09rem;\n        }\n        h4, h5, h6 {\n            font-size: 0.95rem;\n        }\n    }\n}\n\n\n\n/** Change positioning of various elements so tooltips can extend beyond overflow:hidden containers **/\n\n/* Dashboard widgets */\n.panel .panel-body .preview {\n    position: unset;\n}\n\n.keyboard-shortcut {\n    padding: 0.1rem 0.4rem;\n    font-size: 0.75rem;\n    --tw-border-opacity: .2;\n    border: 1px solid hsl(var(--bc)/var(--tw-border-opacity));\n    border-radius: 5px;\n    margin-right: 5px;\n    pointer-events: unset;\n}\n.keyboard-shortcut.form-control-feedback {\n    line-height: 24px;\n    height: 30px;\n    width: 30px;\n    margin-top: 3px;\n}\n.dropdown-menu .keyboard-shortcut {\n    font-size: 0.75rem;\n    line-height: 1rem;\n    margin-right: 0;\n}\n\n\n/** tippy **/\n.tippy-box {\n    border-radius: var(--rounded-btn, .25rem);\n    --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n    --tw-text-opacity: 1;\n    color: hsl(var(--bc)/var(--tw-text-opacity));\n\n    .tippy-content {\n        padding: .5rem;\n        font-size: 0.8rem;\n    }\n}\n.tippy-box[data-placement^='top'] > .tippy-arrow::before {\n    --tw-bg-opacity: 1;\n    border-top-color: hsl(var(--b1)/var(--tw-bg-opacity));\n}\n.tippy-box[data-placement^='bottom'] > .tippy-arrow::before {\n    --tw-bg-opacity: 1;\n    border-bottom-color: hsl(var(--b1)/var(--tw-bg-opacity));\n}\n.tippy-box[data-placement^='left'] > .tippy-arrow::before {\n    --tw-bg-opacity: 1;\n    border-left-color: hsl(var(--b1)/var(--tw-bg-opacity));\n}\n.tippy-box[data-placement^='right'] > .tippy-arrow::before {\n    --tw-bg-opacity: 1;\n    border-right-color: hsl(var(--b1)/var(--tw-bg-opacity));\n}\n.tippy-box[data-theme~=\"kanka-dropdown\"] {\n    --n: var(--b1);\n}\n\n.tippy-box[data-theme~=\"entity-tooltip\"] {\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n\n    .tippy-content {\n        padding: 0;\n    }\n}\n/*.tippy-box[data-theme~=\"kanka\"] {*/\n/*    background-color: hsl(var(--b1)/var(--tw-bg-opacity));*/\n/*    color: hsl(var(--bc)/var(--tw-text-opacity));*/\n/*}*/\n"
  },
  {
    "path": "resources/css/typography.css",
    "content": "body, a, h1, h2, h3, h4, h5, h6 {\n    font-family: 'Roboto Variable', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\nhtml {\n    font-size: 16px;\n}\nbody {\n    font-style: normal;\n    font-weight: normal;\n    font-size: 14px;\n\n    letter-spacing: 0.5px;\n}\n\n@layer base {\n    h1 {\n        font-weight: 300;\n        font-size: 2rem;\n        letter-spacing: -0.5px;\n    }\n\n    h2 {\n        font-weight: 300;\n        font-size: 1.8rem;\n        letter-spacing: -0.5px;\n    }\n\n    h3 {\n        font-style: normal;\n        font-weight: normal;\n        font-size: 1.5rem;\n    }\n\n    h4 {\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: 0.25px;\n        font-size: 1.1rem;\n    }\n\n    h5 {\n        font-style: normal;\n        font-weight: normal;\n        font-size: 1rem;\n    }\n}\na:hover, a:active, a:focus {\n    outline: none;\n    text-decoration: none;\n}\n.entity-content, .note-editing-area {\n    p {\n        margin-bottom: 0.75rem;\n    }\n    p:last-child,\n    td > p:last-of-type,\n    th > p:last-of-type {\n        margin-bottom: 0;\n    }\n\n    hr {\n        margin-top: 1.1rem;\n        margin-bottom: 1.1rem;\n        border-color: hsl(var(--bc)/var(--tw-bg-opacity));\n        --tw-bg-opacity: .1;\n    }\n\n    h1 {\n        margin-top: 1rem;\n    }\n    h2 {\n        margin-top: 0.9rem;\n    }\n    h3 {\n        margin-top: 0.8rem;\n    }\n    h4 {\n        margin-top: 0.7rem;\n    }\n    h5 {\n        margin-top: 0.6rem;\n    }\n    h6 {\n        margin-top: 0.5rem;\n    }\n}\n"
  },
  {
    "path": "resources/css/vendor.css",
    "content": "@import \"tom-select/dist/css/tom-select.css\";\n@import \"rpg-awesome/css/rpg-awesome.min.css\";\n@import 'tippy.js/animations/scale.css';\n@import 'tippy.js/dist/tippy.css';\n\n.clr-clear, .clr-close {\n    color: hsl(var(--bc)/1);\n    background-color: hsl(var(--b2)/1);\n    letter-spacing: normal;\n}\n.clr-picker {\n    background-color: hsl(var(--b1)/1);\n}\n.clr-field button {\n    height: 2.1rem;\n    padding: 0.6rem 0.8rem;\n}\n\n.note-hint-group {\n    .note-hint-item {\n        min-width: 200px;\n        min-height: 30px;\n        display: block;\n        padding: 5px;\n\n        &:hover {\n            border-radius: 5px;\n            background: rgba(0, 0, 0, 0.05);\n        }\n    }\n\n    .active {\n        border-radius: 5px;\n        background: #3c8dbc;\n        color: white;\n    }\n}\n\n/** Spectrum */\n.sp-replacer {\n    border-color: hsl(var(--n)/var(--tw-border-opacity));\n    --tw-border-opacity: .2;\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n\n    &:active, &:hover {\n        border-color: hsl(var(--n)/var(--tw-border-opacity));\n        --tw-border-opacity: .2;\n    }\n}\n.sp-light {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b2)/var(--tw-bg-opacity));\n    --tw-border-opacity: .2;\n    border-color: hsl(var(--b2)/var(--tw-border-opacity));\n\n    .sp-input {\n        --tw-text-opacity: 1;\n        color: hsl(var(--bc)/var(--tw-text-opacity));\n    }\n}\n.sp-palette-container {\n    --tw-border-opacity: .2;\n    border-right-color: hsl(var(--b2)/var(--tw-border-opacity));\n}\n.sp-picker-container {\n    --tw-border-opacity: .2;\n    border-left-color: hsl(var(--b2)/var(--tw-border-opacity));\n}\n\n\n/**\n * Tom Select theme\n */\n.ts-wrapper {\n    color: inherit;\n    min-width: 80px;\n}\n.ts-wrapper.single .ts-control {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n    padding: 0.6rem 0.8rem;\n    min-height: 2.1rem;\n    cursor: pointer;\n}\n.ts-control, .ts-wrapper.single.input-active .ts-control {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n}\n.ts-dropdown, .ts-control, .ts-control input {\n    color: hsl(var(--bc)/1);\n}\n.ts-wrapper.multi .ts-control {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n    --tw-border-opacity: .1;\n    border-color: hsl(var(--bc)/var(--tw-border-opacity));\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: 0.2rem;\n    padding: 0.6rem 0.8rem;\n    min-height: 2.1rem;\n}\n.ts-wrapper .ts-control {\n    border-width: 1px;\n    border-color: hsl(var(--bc)/0.1);\n    border-radius: var(--rounded-btn, 0.5rem);\n    background-color: hsl(var(--b1)/1);\n    box-shadow: none;\n    color: inherit;\n    padding-right: 2rem !important;\n}\n.ts-wrapper:not(.has-items) .ts-control::after {\n    content: '';\n    position: absolute;\n    right: 0.7rem;\n    top: 50%;\n    width: 0.45rem;\n    height: 0.45rem;\n    border-right: 1.5px solid currentColor;\n    border-bottom: 1.5px solid currentColor;\n    transform: translateY(-70%) rotate(45deg);\n    pointer-events: none;\n    opacity: 0.5;\n    transition: transform 0.15s ease;\n}\n.ts-wrapper.dropdown-active:not(.has-items) .ts-control::after {\n    transform: translateY(-30%) rotate(225deg);\n}\n.ts-wrapper.focus .ts-control {\n    outline-style: solid;\n    outline-width: 2px;\n    outline-offset: 2px;\n    outline-color: hsl(var(--p)/0.3);\n    border-color: transparent;\n    box-shadow: none;\n}\n.plugin-dropdown_input.focus.dropdown-active .ts-control {\n    border-color: transparent;\n}\n.ts-dropdown {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n    border-width: 1px;\n    border-color: hsl(var(--bc)/0.1);\n    border-radius: var(--rounded-btn, 0.5rem);\n    box-shadow: none;\n    z-index: 9961;\n    overflow: hidden;\n    min-width: 220px;\n}\n.ts-dropdown .ts-dropdown-content {\n    padding: 0.25rem 0;\n}\n.ts-dropdown .option {\n    padding: 0.4rem 0.6rem;\n    color: inherit;\n}\n.ts-dropdown .option.selected {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--p)/var(--tw-bg-opacity));\n    color: hsl(var(--pc));\n}\n.ts-dropdown .option.active {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--p)/var(--tw-bg-opacity));\n    color: hsl(var(--pc));\n}\n.ts-dropdown .option:disabled,\n.ts-dropdown .option.disabled {\n    color: hsl(var(--bc)/0.4);\n}\n.ts-wrapper.multi .ts-control .item {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--n)/var(--tw-bg-opacity));\n    border-radius: var(--rounded-btn, 0.5rem);\n    --tw-text-opacity: 1;\n    color: hsl(var(--bc)/var(--tw-text-opacity));\n    line-height: 1.2rem;\n    border-width: 0;\n    padding: 0.3rem 0.6rem;\n    margin: 0;\n}\n.ts-wrapper.multi .ts-control .item .remove {\n    --tw-text-opacity: 1;\n    color: hsl(var(--nc)/var(--tw-text-opacity));\n    border-left: none;\n    padding-left: 0.3rem;\n}\n.ts-wrapper.single .ts-control .item {\n    background: none;\n    padding: 0;\n    border-radius: 0;\n}\n.ts-dropdown input,\n.ts-dropdown .dropdown-input {\n    background-color: hsl(var(--b1)/1);\n    color: inherit;\n    border-color: hsl(var(--bc)/0.1) !important;\n    border-width: 1px;\n    padding: 0.5rem 0.6rem;\n    width: 100%;\n    box-sizing: border-box;\n    &:focus {\n        outline: none;\n    }\n}\n.ts-dropdown .dropdown-input-wrap {\n    padding: 0.4rem;\n}\n.ts-wrapper .ts-control input::placeholder {\n    --tw-text-opacity: .4;\n    color: hsl(var(--bc)/var(--tw-text-opacity));\n}\n.ts-wrapper .ts-control .clear-button {\n    color: hsl(var(--bc)/0.6);\n}\n.ts-wrapper .badge {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    margin-right: 6px;\n    border-radius: 2px;\n}\n.ts-dropdown,\n.ts-control,\n.ts-control input {\n    font-size: 14px;\n    color: hsl(var(--bc)/1);\n}\n.ts-wrapper .no-results {\n    color: hsl(var(--nc)/.6);\n}\n\n.ts-wrapper.loading:before {\n    display: none;\n}\n\n@media (max-width: 767px) {\n    .note-popover {\n        left: 0 !important;\n        width: 100% !important;\n    }\n}\n"
  },
  {
    "path": "resources/css/vendors/adminlte.css",
    "content": "\n\n.bg-red,\n.bg-yellow,\n.bg-brown,\n.bg-aqua,\n.bg-blue,\n.bg-light-blue,\n.bg-green,\n.bg-navy,\n.bg-teal,\n.bg-orange,\n.bg-purple,\n.bg-maroon,\n.bg-gray,\n.bg-pink,\n.bg-black {\n    color:#fff !important\n}\n.bg-gray {\n    background-color: #797676 !important\n}\n.bg-black {\n    background-color:#111 !important\n}\n.bg-red {\n    background-color: #D93D33 !important\n}\n.bg-yellow {\n    background-color:#f39c12 !important\n}\n.bg-aqua {\n    background-color: #00829B !important;\n}\n.bg-blue {\n    background-color:#0073b7 !important\n}\n.bg-light-blue {\n    background-color: #3A7CAD !important\n}\n.bg-green {\n    background-color: #058943 !important\n}\n.bg-navy {\n    background-color:#001F3F !important\n}\n.bg-teal {\n    background-color: #2D8289 !important\n}\n.bg-orange {\n    background-color: #C85208 !important\n}\n.bg-purple {\n    background-color:#605ca8 !important\n}\n.bg-maroon {\n    background-color:#D81B60 !important\n}\n.bg-pink {\n    background-color: #C822D7 !important;\n}\n.bg-brown {\n    background-color: #a35831 !important;\n}\n"
  },
  {
    "path": "resources/css/vendors/editor.css",
    "content": "/**\n * Code for tinymce and summernote.\n */\n\n/**\n * vendor layout fix for ckeditor full screen mode\n */\ndiv.mce-fullscreen {\n  z-index: 1400;\n}\n\n.editor-panel {\n  padding: 5px;\n\n  .form-group {\n    margin-bottom: 0;\n\n    .mce-container {\n      border: 0;\n      box-shadow: none;\n    }\n  }\n}\n\n/**\n * Summernote\n */\n/* Chrome bug: merging lines when the body or p elements have a font-size in \"em\" break stuff */\n.note-editable p {\n  font-size: 14px;\n}\n/* Avoid floating images in summernote to be too large */\n.note-editable img {\n  max-width: 100%;\n}\n.note-editor.note-airframe, .note-editor.note-frame {\n    border: none;\n}\n.note-editable {\n    ul, ol {\n        margin-top: 0;\n        padding: 0 1.5rem;\n        list-style: outside;\n    }\n    ul {\n        list-style-type: disc;\n    }\n    ol {\n        list-style-type: decimal;\n    }\n    > ul:first-of-type {\n        margin-bottom: .5rem;\n    }\n    > ol:first-of-type {\n        margin-bottom: .5rem;\n    }\n    a {\n        color: var(--link-text, hsl(var(--p)/var(--tw-text-opacity)));\n    }\n}\n.note-popover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    display: none;\n    padding: 1px;\n    z-index: 99;\n}\n\nimg.note-float-right {\n    float: right;\n    padding-left: 0.5rem;\n}\nimg.note-float-left {\n    float: left;\n    padding-right: 0.5rem;\n}\n\n.note-btn i.fa, .note-btn i.fas, .note-btn i.fa-brands, .note-btn i.far, .note-btn i.fa-solid, .note-btn i.fa-sharp, .note-icon-code {\n    min-height: 18px;\n    line-height: 20px;\n    height: 18px;\n    display: inline-block;\n    &:before {\n        height: 20px;\n        display: inline-block;\n        font-style: normal;\n        font-size: inherit;\n        text-decoration: inherit;\n        text-rendering: auto;\n        text-transform: none;\n        vertical-align: middle;\n    }\n}\n.note-hint-popover {\n    background-color: hsl(var(--b1)/1);\n}\n.note-hint-item {\n    .entity-hint {\n        display: grid;\n        align-items: center;\n        grid-template-columns: 45px auto;\n    }\n}\n\n.note-editing-area {\n    .mention, .attribute, .post-mention {\n        background-color: var(--mention-background, hsl(var(--in)/1));\n        padding: 3px 5px;\n        border-radius: 0.25rem;\n        color: var(--mention-text, hsl(var(--inc)/1));\n        text-decoration: none;\n    }\n}\n/* Gallery */\n.images-list {\n    .img-item {\n        .img-thumbnail {\n            .text {\n                display: inline-block;\n                vertical-align: middle;\n                line-height: normal;\n\n                i {\n                    display: block;\n                }\n            }\n        }\n    }\n}\n\n.note-editor .note-popover {\n    box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n}\n.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover, .note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover, .note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover {\n  color: hsl(var(--bc)/1);\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item.active, .note-hint-popover .popover-content .note-hint-group .note-hint-item:hover {\n    white-space: normal !important;\n}\n.note-hint-popover .popover-content .note-hint-group .note-hint-item.active, .note-hint-popover .popover-content .note-hint-group .note-hint-item:hover {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b2)/var(--tw-bg-opacity)) !important;\n    color: hsl(var(--bc)) !important;\n    line-height: inherit !important;\n}\n.note-placeholder {\n    --tw-text-opacity: .5;\n    color: hsl(var(--bc)/var(--tw-text-opacity)) !important;\n}\n.note-editor.fullscreen {\n    background-color: hsl(var(--b1)/1);\n}\n.note-editor.panel {\n    margin-bottom: 0;\n    border-radius: var(--rounded-btn);\n}\n.note-editor.note-airframe,\n.note-editor.note-frame {\n    border:1px solid hsl(var(--bc)/.1) !important;\n}\n\n\n/**\n * Tinymce\n */\n.mce-btn-group:not(:first-child) {\n    border-left: none !important;\n}\n\n.mce-btn-group:not(:first-child) {\n    border-left: none !important;\n}\n/* Tinymce stuff for dark mode */\n.mce-edit-area, .mce-content-body {\n  filter: var(--tinymce-filter, none) !important; /* set to invert(90%) for dark mode */\n}\n.mce-panel {\n    --tw-bg-opacity: 1;\n    background-color: var(--tinymce-background, hsl(var(--b1)/var(--tw-bg-opacity))) !important;\n\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--b2)/var(--tw-border-opacity)) !important;\n    border: 0 solid hsl(var(--b2)/var(--tw-border-opacity)) !important;\n}\n.mce-menubar {\n    border: none;\n}\n.mce-edit-area, .mce-content-body {\n    --tw-bg-opacity: 1;\n    background-color: var(--tinymce-background, hsl(var(--b1)/var(--tw-bg-opacity))) !important;\n}\n.mce-btn {\n    border-color: transparent !important;\n    background: none !important;\n\n    .mce-txt {\n        --tw-text-opacity: 1;\n        color: var(--tinymce-input-text, hsl(var(--bc)/var(--tw-text-opacity))) !important;\n    }\n}\n.mce-btn.mce-active, .mce-btn.mce-active:hover, .mce-btn.mce-active:focus, .mce-btn.mce-active:active {\n  i {\n    text-shadow: 1px 1px 0 black;\n  }\n}\n.mce-menubtn button, .mce-menubtn button span, .mce-ico {\n}\n.mce-tabs, .mce-tabs+.mce-container-body, .mce-tab {\n  background: none !important;\n}\n.mce-textbox {\n    --tw-bg-opacity: 1;\n    background-color: var(--tinymce-background, hsl(var(--b1)/var(--tw-bg-opacity))) !important;\n    --tw-text-opacity: 1;\n    color: var(--tinymce-input-text, hsl(var(--bc)/var(--tw-text-opacity))) !important;\n    --tw-border-opacity: .2;\n    border-color: var(--tinymce-input-border, hsl(var(--bc)/var(--tw-border-opacity))) !important;\n}\n#mce-modal-block {\n    --tw-bg-opacity: 1;\n    background-color: var(--tinymce-background, hsl(var(--b2)/var(--tw-bg-opacity))) !important;\n}\n.mce-label {\n    text-shadow: none !important;\n}\n\n/* Tinymce mentions dropdown */\n.rte-autocomplete {\n    z-index: 9920;\n}\n\n/** Code mirror **/\n.CodeMirror {\n    resize: vertical;\n}\n\n.advanced-mention-name {\n    text-decoration: none;\n\n    &:after {\n        margin-left: 0.1rem;\n        content: attr(data-name);\n        font-size: 0.7rem;\n        background-color: var(--advanced-mention-background, hsl(var(--in)/1));\n        color: var(--mention-text, hsl(var(--inc)/1));\n        padding: 0.15rem;\n        border-radius: 0.25rem;\n    }\n}\n\n.btn-default {\n    border-width: 1px;\n    border-color: hsl(var(--bc)/var(--tw-border-opacity));\n    --tw-border-opacity: 0.2;\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--b1)/var(--tw-bg-opacity));\n    border-radius: var(--rounded-btn,.5rem);\n    line-height: 1.5rem;\n    box-shadow: none;\n    color: inherit;\n\n    &:hover, &:focus, &:active {\n        box-shadow: none;\n        border-color: transparent;\n        background-color: hsl(var(--b2)/1);\n        color: hsl(var(--bc)/1);\n    }\n}\n.btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus, .open > .btn-default.dropdown-toggle:hover, .open > .btn-default.dropdown-toggle:focus, .open > .btn-default.dropdown-toggle.focus, .btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle {\n    background-color: hsl(var(--b2)/1);\n    border-color: hsl(var(--b2)/1);\n    color: hsl(var(--bc)/1);\n}\n.btn.btn-primary {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--p)/var(--tw-bg-opacity));\n    --tw-border-opacity: 1;\n    border-color: hsl(var(--p)/var(--tw-border-opacity));\n    color: hsl(var(--pc)/1);\n\n    &:hover {\n        --tw-border-opacity: 1;\n        border-color:hsl(var(--pf)/var(--tw-border-opacity));\n        --tw-bg-opacity: 1;\n        background-color:hsl(var(--pf)/var(--tw-bg-opacity));\n        color:hsl(var(--pc)/var(--tw-text-opacity));\n    }\n}\n.modal-content .modal-header .close {\n    float: right;\n    font-size: 1.2rem;\n}\n"
  },
  {
    "path": "resources/css/vendors/tinymce.css",
    "content": ".mention, .attribute {\n    background-color: var(--mention-background, hsl(var(--p)/1));\n    padding: 3px 5px;\n    border-radius: 0.25rem;\n    color: var(--mention-text, hsl(var(--pc)/1));\n    text-decoration: none;\n}\n.attribute {\n    font-style: italic;\n}\n\nimg {\n    display: block;\n}\n"
  },
  {
    "path": "resources/js/abilities.js",
    "content": "import { createApp } from 'vue'\nimport Abilities from \"./components/abilities/Abilities.vue\";\n\nconst app = createApp({})\napp.component('abilities', Abilities)\napp.mount('#abilities');\n"
  },
  {
    "path": "resources/js/ads.js",
    "content": "const initAdManager = () => {\n    const ads = document.querySelectorAll('.nativead-manager');\n    if (ads.length === 0) {\n        return;\n    }\n\n    ads.forEach(function (ad) {\n        //console.log('found an ad', ad);\n        let video = document.createElement('video');\n        video.id = 'webmvid';\n        video.source.src = ad.dataset.src;\n        video.type = 'video/webm';\n        video.control = false;\n        video.removeAttribute(\"poster\");\n        ad.parentNode.insertBefore(video, ad.nextSibling);\n    });\n};\ninitAdManager();\n"
  },
  {
    "path": "resources/js/animations.js",
    "content": "const initAnimations = () => {\n    const collapsers = document.querySelectorAll('[data-animate=\"collapse\"]');\n    collapsers.forEach((e) => {\n        e.addEventListener('click', toggle);\n    });\n\n    const revelers = document.querySelectorAll('[data-animate=\"reveal\"]');\n    revelers.forEach((e) => {\n        e.addEventListener('change', change);\n    });\n\n    const pulses = document.querySelectorAll('[data-pulse]');\n    pulses.forEach((e) => {\n        e.addEventListener('click', clickWelcomePulse);\n    });\n\n    const permissions = document.querySelectorAll('select.permission-control');\n    permissions.forEach(e => {\n        changePermissionColour(e);\n        e.addEventListener('change', changePermission);\n    });\n};\n\nconst clickWelcomePulse = (e) => {\n    e.preventDefault();\n    let target = document.querySelector(e.currentTarget.dataset.pulse);\n    let content = e.currentTarget.dataset.content;\n\n    window.showTooltip(target, {\n        content: content,\n        theme: 'kanka',\n        placement: e.currentTarget.dataset.placement ?? 'bottom',\n        allowHTML: true,\n        arrow: true,\n        interactive: true,\n        trigger: 'manual',\n    });\n};\n\nfunction toggle(e) {\n    if (e.target.type !== 'checkbox' && e.target.closest('a') === null) {\n        e.preventDefault();\n    }\n\n    let selector = this.dataset.target;\n    if (!selector) {\n        selector = this.hash;\n    }\n    let targets = document.querySelectorAll(selector);\n    targets.forEach((e) => {\n        e.classList.toggle('hidden');\n    });\n    this.classList.toggle('animate-collapsed');\n};\n\nfunction change (e) {\n    let target = document.querySelector(this.dataset.target);\n    //console.log('target', target, this.dataset.target);\n    if (!this.value) {\n        target.classList.add('hidden');\n    } else {\n        target.classList.remove('hidden');\n    }\n}\n\nfunction changePermission(e) {\n    changePermissionColour(this);\n}\n\nfunction changePermissionColour(select) {\n    select.classList.remove('text-red-500', 'text-green-500');\n    if (select.value === 'deny') {\n        select.classList.add('text-red-500');\n    } else if (select.value === 'allow') {\n        select.classList.add('text-green-500');\n    }\n}\n\nwindow.onEvent(function() {\n    initAnimations();\n});\ninitAnimations();\n"
  },
  {
    "path": "resources/js/app.js",
    "content": "import './events';\nimport './tags';\nimport './components/select2.js';\nimport './keyboard';\nimport './crud';\nimport './entities';\nimport './post';\nimport './calendar';\nimport './forms/calendar-date';\nimport './keep-alive';\nimport './quick-creator';\nimport './datagrids';\nimport './datagrids2';\nimport './animations';\nimport './bookmarks';\nimport './webhooks';\nimport './members';\nimport './campaign';\nimport './clipboard';\nimport './toast';\nimport './banner';\nimport './timelines';\nimport './utility/sortable';\nimport './utility/formError';\nimport './utility/dialog';\nimport './utility/colour-picker';\nimport './share';\nimport './visibility-picker';\n\n// VueJS elements\nimport './header';\nimport './gallery/selection';\nimport './forms/entity-name';\nimport './utility/tippy';\nimport './maintenance';\n\nimport.meta.glob([\n    '../images/**',\n]);\n\n\n/**\n * Whenever a modal or popover is shown, we'll need to re-bind various helpers we have.\n */\nwindow.onEvent(function() {\n    // Also re-bind select2 elements on modal show\n    window.initForeignSelect();\n    window.initTags();\n    window.initDialogs();\n    window.initTooltips();\n    window.ajaxTooltip();\n    window.initDropdowns();\n    window.initSortable();\n    initAjaxPagination();\n    initDynamicDelete();\n    initImageRemoval();\n    initDismissible();\n    initPermBtn();\n});\n\nfunction initAdblocker() {\n    let adscript = document.getElementById('ad-client');\n    if (!adscript)  return;\n\n    fetch(adscript.src, { method: 'HEAD', mode: 'no-cors' })\n        .catch(() => {\n            document.getElementById('adblock-plea')?.classList.remove('hidden');\n        });\n}\n\n/**\n * Save and manage tabs for when refreshing\n * Move this to crud or forms\n */\nconst manageTabs = () => {\n    const tabs = document.querySelectorAll('.nav-tabs li a');\n    tabs?.forEach(function (tab) {\n        tab.addEventListener('click', function (e) {\n            e.preventDefault();\n            const parent = tab.closest('.nav-tabs-custom');\n\n            // 1. Deactivate current active elements within this container\n            parent.querySelector('.nav-tabs li.active')?.classList.remove('active');\n            parent.querySelector('.tab-pane.active')?.classList.remove('active');\n\n            // 2. Activate new elements\n            tab.parentElement.classList.add('active');\n            const target = document.querySelector(tab.getAttribute('href'));\n            target?.classList.add('active');\n        });\n    });\n}\n\nconst initImageRemoval = () => {\n    document.querySelectorAll('[data-img=\"delete\"]')?.forEach(function (preview) {\n        preview.addEventListener('click', function (e) {\n            e.preventDefault();\n            document.querySelector('input[name=' + preview.dataset.target + ']').value = 1;\n            preview.closest('.preview').classList.add('hidden');\n        });\n    });\n};\n\n/**\n * Replace pagination for ajax links\n */\nconst initAjaxPagination = () => {\n    document.querySelectorAll('.pagination-ajax-links a').forEach(function (link) {\n        if (link.dataset.loaded === '1') {\n            return\n        }\n        link.dataset.loaded = '1';\n        link.addEventListener('click', function (e) {\n            e.preventDefault();\n            const paginationAjaxBody = document.querySelector('.pagination-ajax-body');\n            paginationAjaxBody.querySelector('.modal-loading').classList.remove('hidden');\n            paginationAjaxBody.querySelector('.pagination-ajax-content').classList.add('hidden');\n\n            fetch(link.getAttribute('href'))\n                .then(response => response.text())\n                .then(response => {\n                    paginationAjaxBody.parentNode.innerHTML = response;\n                    initAjaxPagination();\n                    window.triggerEvent();\n                });\n        });\n    });\n};\n\n/**\n * Popover delete confirmation with button, rather than a modal. Used for displaying a confirmation\n * in a modal.\n */\nconst initDynamicDelete = () => {\n    document.querySelectorAll('[data-toggle=\"confirm-delete\"]')?.forEach(function (ele) {\n        if (ele.dataset.loaded === '1') {\n            return;\n        }\n        ele.dataset.loaded = '1';\n        ele.addEventListener('click', function (e) {\n            e.preventDefault();\n            if (ele.dataset.confirming === '1') {\n                // ... existing submission logic ...\n                ele.classList.add('loading');\n                ele.innerHTML = '';\n                const target = document.querySelector(ele.dataset.target);\n                if (!target) {\n                    console.error('Unknown target', target);\n                } else {\n                    target.requestSubmit();\n                }\n\n                return;\n            }\n\n            // Save original text to restore it later\n            const originalText = ele.innerHTML;\n\n            ele.dataset.confirming = '1';\n            ele.querySelector('span').classList.add('md:inline');\n            ele.querySelector('span').innerHTML = ele.dataset.confirm;\n\n            // Reset if user clicks away (loses focus)\n            ele.addEventListener('blur', function() {\n                ele.dataset.confirming = '0';\n                ele.innerHTML = originalText;\n            }, { once: true });\n        });\n\n    });\n    document.querySelectorAll('a[data-toggle=\"delete-form\"]')?.forEach(function (ele) {\n        if (ele.dataset.loaded === '1') {\n            return;\n        }\n        ele.dataset.loaded = '1';\n        ele.addEventListener('click', function (e) {\n            e.preventDefault();\n\n            const target = document.querySelector(ele.dataset.target);\n            target.requestSubmit();\n        });\n    });\n};\n\n\nconst initSubmenuSwitcher = () => {\n    document.querySelector('.submenu-switcher')?.addEventListener('change', function (e) {\n        e.preventDefault();\n        const ele = e.target;\n        const selected = ele.options[ele.selectedIndex];\n        window.location.href = selected.dataset.route;\n    });\n};\n\n\nconst initDismissible = () => {\n    const elements = document.querySelectorAll('[data-dismisses]');\n    elements.forEach(el => {\n        el.addEventListener('click', function (e) {\n            e.preventDefault();\n            let target = document.querySelector(this.dataset.dismisses);\n            target.classList.remove('opacity-100');\n            target.classList.add('opacity-0');\n\n            target.addEventListener('transitionend', () => {\n                target.remove();\n            }, { once: true });\n        });\n    });\n};\n\nconst initPermBtn = () => {\n    const btn = document.querySelector('.btn-manage-perm');\n    if (!btn) {\n        return;\n    }\n    btn.addEventListener('click', function (e) {\n        e.preventDefault();\n        window.closeDialog('primary-dialog');\n        let permTarget = btn.dataset.target;\n        document.querySelector(permTarget).click();\n    });\n};\n\n\nwindow.initForeignSelect();\nwindow.initDialogs();\ninitSubmenuSwitcher();\n\nmanageTabs();\n\ninitAjaxPagination();\ninitDynamicDelete();\ninitImageRemoval();\ninitDismissible();\ninitAdblocker();\n"
  },
  {
    "path": "resources/js/attributes-manager.js",
    "content": "import { createApp } from 'vue'\nimport Manager from \"./components/attributes/Manager.vue\";\nimport Form from \"./components/attributes/Form.vue\";\nimport Attribute from \"./components/attributes/Attribute.vue\";\nimport MentionField from \"./components/attributes/MentionField.vue\";\nimport { VueDraggableNext } from 'vue-draggable-next'\nimport vClickOutside from \"click-outside-vue3\"\n\n\nconst app = createApp({})\napp.component('attributes-manager', Manager)\napp.component('attributes-manager-form', Form)\napp.component('attributes-manager-attribute', Attribute)\napp.component('attributes-manager-mention-field', MentionField)\napp.component('draggable', VueDraggableNext)\napp.use(vClickOutside)\napp.mount('#attributes-manager');\n"
  },
  {
    "path": "resources/js/attributes.js",
    "content": "let maxFields = false;\nlet liveEditURL, liveEditModal;\n\nconst init = () => {\n    initLiveAttributes();\n    if (!document.getElementById('add_attribute_target')) {\n        return;\n    }\n\n    const maxConfig = document.querySelector('[data-max-fields]');\n    if (maxConfig) {\n        maxFields = maxConfig.dataset.maxFields;\n    }\n};\n\nconst initLiveAttributes = () => {\n    const config = document.querySelector('[name=\"live-attribute-config\"]');\n    if (!config) {\n        return;\n    }\n\n    liveEditURL = config.dataset.live;\n    liveEditModal = document.getElementById('live-attribute-dialog');\n\n    // Add the live-edit-parsed attribute to variables to confirm that they are valid\n    let uid = 1;\n    const fields = document.querySelectorAll('.live-edit');\n    fields.forEach(field => {\n        field.classList.add('live-edit-parsed');\n        field.dataset.uid = uid;\n        uid++;\n    });\n\n    const parsedFields = document.querySelectorAll('.live-edit-parsed');\n    parsedFields.forEach(field => {\n        field.addEventListener('click', function (e) {\n            // If clicking on a link inside the live-edit link, just follow the link, don't open the editor\n            if (e.target.tagName === 'A') {\n                return;\n            }\n            const id = field.dataset.id;\n            const url = liveEditURL + '?id=' + id + '&uid=' + field.dataset.uid;\n\n            window.onEvent(function() {\n                listenToLiveForm();\n            });\n            window.openDialog('live-attribute-dialog', url);\n\n        });\n    });\n\n    window.onEvent(function() {\n        initNewLiveAttributeForm();\n    });\n};\n\nconst listenToLiveForm = () => {\n    liveEditModal.querySelector('form').onsubmit = function(e) {\n        e.preventDefault();\n        const form = e.target;\n        const formData = new FormData(form);\n        axios.post(form.getAttribute('action'), formData)\n            .then(result => {\n                liveEditModal.querySelector('article').innerHTML = '';\n                const dialog = document.getElementById('live-attribute-dialog');\n                dialog.close();\n\n                const target = document.querySelector('[data-uid=\"' + result.data.uid + '\"]');\n                //console.log('looking for', '[data-uid=\"' + result.uid + '\"]', target);\n                target.dataset.attribute = result.data.attribute;\n                target.innerHTML = result.data.value;\n                if (result.data.value) {\n                    target.classList.remove('empty-value');\n                } else {\n                    target.classList.add('empty-value');\n                }\n\n                window.showToast(result.data.success);\n            })\n            .catch (() => {\n                //alert('error! check console logs');\n                //console.error('live-edit-error', result);\n                document.getElementById('live-attribute-dialog').close();\n            });\n\n        return false;\n    };\n};\n\nconst initNewLiveAttributeForm = () => {\n    const forms = document.querySelectorAll('form.live-attribute-form');\n    const primaryModal = document.getElementById('primary-dialog');\n    forms.forEach(function (form) {\n        form.onsubmit = (e) => {\n            e.preventDefault();\n            const formData = new FormData(form);\n            axios.post(form.getAttribute('action'), formData)\n                .then(res => {\n                    primaryModal.querySelector('article').innerHTML = '';\n                    primaryModal.close();\n\n                    const target = document.querySelector('[data-live-id=\"' + res.data.id + '\"]');\n                    //console.log('looking for', '[data-uid=\"' + result.uid + '\"]', target);\n                    target.dataset.dataAttribute = res.data.attribute;\n                    target.innerHTML = res.data.value;\n\n                    window.showToast(res.data.success);\n                })\n                .catch(err => {\n                    if (err.response.data.message) {\n                        window.showToast(err.response.data.message, 'error');\n                    }\n                    primaryModal.close();\n                });\n        };\n    });\n};\n\ninit();\n"
  },
  {
    "path": "resources/js/auth.js",
    "content": "//window.$ = window.jQuery = require('jquery');\n\n    initTogglePasswordFields();\n    initFormBlocker();\n\n/**\n * Disable a form to avoid it being submitted twice\n */\nfunction initFormBlocker() {\n    let forms = document.getElementsByClassName('submit-lock');\n    for (const form of forms) {\n        form.onsubmit = function () {\n            document.getElementById('btn-save').style.display = 'none';\n            document.getElementById('btn-wait').style.display = '';\n        };\n    }\n}\n\n/**\n * Show/Hide password field helpers\n */\nfunction initTogglePasswordFields() {\n    let passwordField = document.getElementById('password');\n    var passwordToggleIcon = document.getElementById('toggle-password-icon');\n    var toggler = document.getElementById('toggle-password');\n    if (!toggler) {\n        return;\n    }\n    toggler.onclick = function (e) {\n        e.preventDefault();\n        if (passwordField.type === 'text') {\n            passwordField.type = 'password';\n        } else {\n            passwordField.type = 'text';\n        }\n        return false;\n    };\n}\n"
  },
  {
    "path": "resources/js/banner.js",
    "content": "/**\n * We sometimes run promotions or warnings at the top of pages. This allows the user to dismiss them\n */\nconst initDismissableBanners = () => {\n    document.querySelectorAll('.banner-notification-dismiss')\n        .forEach((el) => {\n       el.addEventListener('click', dismissPromo, false);\n    });\n    document.querySelectorAll('[data-dismiss=\"tutorial\"]')\n        .forEach((el) => {\n       el.addEventListener('click', dismissTutorial, false);\n    });\n};\n\nfunction dismissPromo(e) {\n    e.preventDefault();\n\n    let target = this.dataset.dismiss;\n    axios.post(this.dataset.url)\n        .then(() => {\n            if (!target) {\n                return;\n            }\n            let el = document.querySelector(target);\n            if (!el) {\n                return;\n            }\n            el.classList.add('hidden');\n        });\n}\nfunction dismissTutorial(e) {\n    e.preventDefault();\n    let target = this.dataset.target;\n    let btn = e.currentTarget;\n    btn.classList.add('loading');\n    btn.disabled = true;\n    btn.querySelector('i')?.remove();\n\n    axios.post(this.dataset.url)\n        .then(() => {\n            if (!target) {\n                return;\n            }\n            let el = document.querySelector(target);\n            if (!el) {\n                return;\n            }\n            el.classList.add('hidden');\n        });\n}\n\ninitDismissableBanners();\n"
  },
  {
    "path": "resources/js/billing.js",
    "content": "import { createApp } from 'vue'\nconst app = createApp({})\nimport BillingManagement from \"./components/subscription/BillingManagement.vue\";\n\napp.component('billing-management', BillingManagement)\napp.mount('#billing');\n"
  },
  {
    "path": "resources/js/bookmarks.js",
    "content": "const initQuickLinksForm = () => {\n    const selector = document.getElementById('bookmark-selector');\n    if (!selector) {\n        return false;\n    }\n    selector.addEventListener('change', function (e) {\n        e.preventDefault();\n        const selected = selector.options[selector.selectedIndex];\n\n        const subforms = document.querySelectorAll('.bookmark-subform');\n        subforms.forEach(subform => {\n            subform.classList.add('opacity-0', 'invisible', 'h-0');\n        });\n        let target = document.querySelector(selected.dataset.target);\n        if (target) {\n            target.classList.remove('opacity-0', 'invisible', 'h-0');\n        }\n    });\n};\n\nconst showFilterField = () => {\n    const selector = document.getElementById('entity-selector');\n    if (!selector) {\n        return false;\n    } else if (selector.value !== '') {\n        document.getElementById('filter-subform').style.removeProperty('display');\n    }\n    selector.addEventListener('change', function () {\n        if (selector.value === '') {\n            document.getElementById('filter-subform').style.display = 'none';\n        } else {\n            document.getElementById('filter-subform').style.removeProperty('display');\n        }\n    });\n};\n\ninitQuickLinksForm();\n//showFilterField();\n"
  },
  {
    "path": "resources/js/calendar.js",
    "content": "\nconst initCalendarEventBlock = () => {\n    if (!document.querySelector('#calendar-year-switcher')) {\n        return;\n    }\n    const blocks = document.querySelectorAll('.calendar-event-block');\n    blocks.forEach(block => {\n        if (block.dataset.toggle !== 'dialog' && block.dataset.url) {\n            block.addEventListener('click', function () {\n                window.location = block.dataset.url;\n            });\n        }\n    });\n    document.querySelectorAll(\"[data-dbclick]\").forEach(function (td) {\n        td.addEventListener(\"dblclick\", function () {\n            window.openDialog('primary-dialog', td.dataset.url);\n        });\n    });\n};\n\nconst initCalendarEventModal = () => {\n    const recurring = document.querySelector('select[name=\"recurring_periodicity\"]');\n    if (!recurring) {\n        return;\n    }\n    // Logic extracted to a function so it can be run on init and on change\n    const toggleUntil = () => {\n        const until = document.querySelector('.field-recurring-until');\n        // Safety check in case the field is missing in specific forms\n        if (!until) return;\n\n        if (recurring.value) {\n            until.classList.remove('hidden');\n        } else {\n            until.classList.add('hidden');\n        }\n    };\n\n    // Use addEventListener instead of onchange property\n    recurring.addEventListener('change', toggleUntil);\n\n    // Run immediately to sync UI with current value (e.g. editing an existing event)\n    toggleUntil();\n};\n\n/**\n * Register keyboard shortcuts for previous/next view\n */\nconst registerKeyboardShortcuts = () => {\n    const hasNav = document.querySelector('[data-calendar-nav=\"previous\"]') || document.querySelector('[data-calendar-nav=\"next\"]');\n    if (!hasNav) {\n        return;\n    }\n\n    document.addEventListener('keydown', function(e) {\n        // Ctrl + <- for previous, Ctrl + -> for next\n        if (e.ctrlKey || e.metaKey) {\n            // Modern replacement for deprecated e.which\n            if (e.key === 'ArrowLeft') {\n                const previous = document.querySelector('[data-calendar-nav=\"previous\"]');\n                // Safety check: element might not exist (e.g. first page)\n                if (previous) {\n                    previous.classList.add('loading');\n                    previous.click();\n                }\n            } else if (e.key === 'ArrowRight') {\n                const next = document.querySelector('[data-calendar-nav=\"next\"]');\n                if (next) {\n                    next.classList.add('loading');\n                    next.click();\n                }\n            }\n        }\n    });\n};\n\n\ninitCalendarEventBlock();\nregisterKeyboardShortcuts();\ninitCalendarEventModal();\n\nwindow.onEvent(function() {\n    initCalendarEventModal();\n});\n"
  },
  {
    "path": "resources/js/campaign.js",
    "content": "import Sortable from \"sortablejs\";\n\n/**\n * Register Modules change for campaign settings\n */\nconst registerModules = () => {\n    const modulePage = document.getElementById('campaign-modules');\n    if (!modulePage) {\n        return;\n    }\n    const fields = document.querySelectorAll('input[name=\"enabled\"]');\n    fields.forEach(function (field) {\n        registerModuleChange(field);\n    });\n};\n\nconst registerModuleChange = (field) => {\n    field.addEventListener('change', function (event) {\n        event.preventDefault();\n        field.closest('.toggle').classList.add('hidden!');\n        field.closest('.box-module').querySelector('.action-loading').classList.remove('hidden');\n\n        axios\n            .post(field.dataset.url)\n            .then(response => {\n                field.closest('.toggle').classList.remove('hidden!');\n                field.closest('.box-module').querySelector('.action-loading').classList.add('hidden');\n                if (!response.data.success) {\n                    return;\n                }\n                if (response.data.status) {\n                    field.closest('.box-module').classList.add('module-enabled');\n                } else {\n                    field.closest('.box-module').classList.remove('module-enabled');\n                }\n                window.showToast(response.data.toast);\n            });\n    });\n};\n\n/** Toggling an action on a permission **/\nconst registerRoles = () =>  {\n    let elements = document.querySelectorAll('.public-permission');\n    elements.forEach(el => {\n        el.addEventListener('click', togglePublicRole);\n    });\n};\n\nconst togglePublicRole = (e) => {\n    e.preventDefault();\n    let target = e.currentTarget;\n    target.querySelector('.module-icon').classList.add('hidden');\n    target.querySelector('.loading-animation').classList.remove('hidden');\n\n    axios.post(target.dataset.url)\n        .then(res => {\n            target.querySelector('.module-icon').classList.remove('hidden');\n            target.querySelector('.loading-animation').classList.add('hidden');\n            if (res.data.success) {\n                if (res.data.status) {\n                    target.classList.add('enabled');\n                } else {\n                    target.classList.remove('enabled');\n                }\n                window.showToast(res.data.toast);\n            }\n        });\n};\n\n/**\n * Initiate codemirror editor in the theming section\n */\nconst registerCodeMirror = () => {\n    const editors = document.querySelectorAll('.codemirror');\n    editors.forEach(function (editor) {\n        CodeMirror.fromTextArea(document.getElementById(editor.id), {\n            extraKeys: {\"Ctrl-Space\": \"autocomplete\"},\n            lineNumbers: true,\n            lineWrapping: true,\n            theme: 'dracula',\n        });\n    });\n};\n\nconst registerSidebarSetup = () => {\n    let nestedSortables = [].slice.call(document.querySelectorAll('.nested-sortable'));\n\n    // Loop through each nested sortable element\n    for (let i = 0; i < nestedSortables.length; i++) {\n        new Sortable(nestedSortables[i], {\n            group: 'nested',\n            handle: '.dnd-handle',\n            animation: 150,\n            fallbackOnBody: true,\n            swapThreshold: 0.65,\n\n            // Attempt to drag a filtered element\n            onMove: function (/**Event*/evt, /**Event*/originalEvent) {\n                let self = evt.dragged;\n                let target = evt.related;\n                let targetParentIsFixed = target.parentNode.closest('.fixed-position') != null;\n                if (self.classList.contains('fixed-position') && targetParentIsFixed) {\n                    return false;\n                }\n                return true;\n            },\n        });\n    }\n};\n\n\n/**\n * Register events for campaign themes, notably the max size of a css field\n */\nconst registerCampaignThemes = () => {\n    const form = document.querySelector('form#campaign-style');\n    if (!form) {\n        return;\n    }\n\n    form.addEventListener('submit', function (e) {\n        let error = document.querySelector(form.dataset.error);\n        const content = document.querySelector('textarea[name=\"content\"]');\n        let length = content.value.length;\n        if (length < form.dataset.maxContent) {\n            error.classList.add('hidden');\n            return true;\n        }\n\n        // Show a custom error message to the user\n        error.classList.remove('hidden');\n        e.preventDefault();\n        return false;\n    });\n};\n\nconst registerVanityUrl = () => {\n    const vanityField = document.querySelector('input[name=\"vanity\"]');\n    if (!vanityField) {\n        return;\n    }\n    vanityField.addEventListener('focusout', function (e) {\n        let vanity = this.value;\n        let errBlock = document.getElementById('vanity-error');\n        let successBlock = document.getElementById('vanity-success');\n        let loading = document.getElementById('vanity-loading');\n        errBlock.innerHTML = '';\n        errBlock.classList.add('hidden');\n        successBlock.classList.add('hidden');\n        if (!vanity) {\n            return;\n        }\n\n        successBlock.classList.remove('hidden');\n        let data = {};\n        data.vanity = vanity;\n\n        axios\n            .post(this.dataset.url, data)\n            .then(res => {\n                vanityField.value = res.data.vanity;\n                successBlock.querySelector('code').innerHTML = res.data.vanity;\n                errBlock.classList.add('hidden');\n                loading.classList.add('hidden');\n                successBlock.classList.remove('hidden');\n            })\n            .catch((err) => {\n                let errorString = '';\n                err.response.data.errors.vanity.forEach(error => errorString += error + ' ');\n                errBlock.innerHTML = errorString;\n                errBlock.classList.remove('hidden');\n                successBlock.classList.add('hidden');\n                loading.classList.add('hidden');\n            });\n    });\n};\n\n\nconst registerPermissionToggleAll = () => {\n    const togglers = document.querySelectorAll('.permission-toggle');\n    togglers.forEach(toggler => {\n        toggler.addEventListener('click', function (e) {\n            e.preventDefault();\n            let action = this.dataset.action;\n            let selector = document.querySelectorAll('input[data-action=\"' + action + '\"]');\n            let checked = this.dataset.checked === \"1\" ? false : true;\n            this.dataset.checked = checked ? 1 : 0;\n            selector.forEach(checkbox => {\n                if (checked) {\n                    checkbox.checked = true;\n                } else {\n                    checkbox.checked = false;\n                }\n            });\n        });\n    });\n};\n\n\nregisterModules();\nregisterCodeMirror();\nregisterSidebarSetup();\nregisterRoles();\nregisterCampaignThemes();\nregisterVanityUrl();\nregisterPermissionToggleAll();\n"
  },
  {
    "path": "resources/js/campaigns/import.js",
    "content": "import axios from \"axios\";\n\n\nconst progressUploading = document.querySelector('.progress-uploading');\nconst progressValidating = document.querySelector('.progress-validating');\nlet fileProgress;\n\nconst initExport = () => {\n    const form = document.getElementById('campaign-import-form');\n    if (!form) {\n        return;\n    }\n\n    fileProgress = document.querySelector('.progress');\n\n    form.onsubmit = (e) => {\n        e.preventDefault();\n\n        let count = 0;\n        let data = new FormData();\n        let files = document.getElementById('export-files');\n        Array.from(files.files).forEach(file => {\n            if (file.name.endsWith('.zip') || file.name.endsWith('.csv')) {\n                count++;\n                data.append('files[]', file);\n            }\n        });\n        let campaign =  document.querySelector('input[name=\"campaign\"]');\n        data.append('campaign', campaign.value);\n        let token =  document.querySelector('input[name=\"token\"]');\n        data.append('token', token.value);\n\n        // Two files submitted? Do the thing\n        if (count > 0 && count < 2) {\n            startProcess(form, data);\n        } else {\n            alert('Please select the campaign export zip files.');\n            let loading = document.querySelector('.loading');\n            if (loading) {\n                loading.classList.remove('loading');\n            }\n            return false;\n        }\n    };\n};\n\nconst startProcess = (form, data) => {\n    form.classList.add('hidden');\n\n    // Now upload to the real endpoint\n    let config = {\n        headers: {\n            'Content-Type': 'multipart/form-data'\n        },\n        onUploadProgress: function (progressEvent) {\n            let percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);\n            document.querySelector('[role=\"progressbar\"]').style.width = percentCompleted + '%';\n\n            if (percentCompleted === 100) {\n                progressUploading.classList.add('hidden');\n                progressValidating.classList.remove('hidden');\n            }\n            const progress = document.querySelector('.progress-percent');\n            progress.classList.remove('hidden');\n            progress.innerHTML = percentCompleted;\n        }\n    };\n\n    fileProgress.classList.remove('hidden');\n    progressUploading.classList.remove('hidden');\n    progressValidating.classList.add('hidden');\n\n    axios\n        .post(form.action, data, config)\n        .then(function (res) {\n            fileProgress.classList.add('hidden');\n\n            if (res.data.success) {\n                window.location.reload();\n            }\n        })\n        .catch(function (err) {\n            form.classList.remove('hidden');\n            fileProgress.classList.add('hidden');\n\n            if (err.status === 413) {\n                window.showToast(\"File is too big for our servers to handle.\", 'error');\n            }\n            else if (err.code == 'ERR_NETWORK') {\n                window.showToast(\"Network error, the upload server seems to be down.\", 'error');\n            }\n            else if (err.response && err.response.data.errors) {\n                //fileError.text(err.response.data.message).fadeToggle();\n\n                let errors = err.response.data.errors;\n                let errorKeys = Object.keys(errors);\n                errorKeys.forEach(k => {\n                    window.showToast(errors[k], 'error');\n                });\n            }\n\n            let loading = document.querySelector('.loading');\n            if (loading) {\n                loading.classList.remove('loading');\n            }\n        });\n};\n\ninitExport();\n"
  },
  {
    "path": "resources/js/campaigns/theme-builder.js",
    "content": "import { colord } from \"colord\";\nimport tippy from \"tippy.js\";\nimport Coloris from \"@melloware/coloris\";\n\nconst fieldTheme = document.getElementById('field-theme');\nlet theme = {};\n\n\nconst init = () => {\n    loadPreviousConfig();\n\n    Coloris({\n        el: '.picker',\n        format: 'hsl',\n        wrap: false,\n        defaultColor: '#cccccc'\n    });\n\n    document.querySelectorAll('.picker').forEach(input => {\n        input.addEventListener('click', function (e) {\n            this.value = window.getComputedStyle(input).backgroundColor;\n        });\n    });\n    document.addEventListener('coloris:pick', event => {\n        colourPicked(event);\n    });\n\n    const form = document.getElementById('theme-builder');\n    form.onsubmit = (e) => {\n        const btn = document.getElementById('form-submit-main');\n        btn.classList.add('loading');\n        btn.setAttribute('disabled', 'disabled');\n\n        // Grab the data from\n        fieldTheme.value = JSON.stringify(theme);\n        return true;\n    };\n};\n\nconst colourPicked = (event) => {\n    updateColour(colord(event.detail.color), event.detail.currentEl.dataset.target);\n    event.detail.currentEl.value = '';\n};\n\nconst loadPreviousConfig = () => {\n    let val = fieldTheme.value;\n    if (!val) {\n        console.log('no config');\n        return;\n    }\n    let json = JSON.parse(val);\n    Object.entries(json).forEach(([variable, value]) => {\n        theme[variable] = value;\n    });\n};\n\nconst updateColour = (colour, target) => {\n\n    let base = colour.toHslString().replace(\"hsl(\", '').replaceAll(\",\", '').replace(\")\", '');\n    let focus = darken(colour.toHslString()).toHsl();\n    let content = contrast(colour.toHslString()).toHsl();\n\n    // Generates background + focus + content\n    let withFocus = ['a', 's', 'p', 'n', 'si'];\n    // Generates only background + content\n    let alerts = ['in', 'su', 'wa', 'er'];\n\n    if (withFocus.indexOf(target) !== -1) {\n        change(target, base);\n        change(target + 'f', focus.h + ' ' + focus.s + '% ' + focus.l + '%');\n        change(target + 'c', content.h + ' ' + content.s + '% ' + content.l + '%');\n    }\n    else if (alerts.indexOf(target) !== -1) {\n        change(target, base);\n        change(target + 'c', content.h + ' ' + content.s + '% ' + content.l + '%');\n    }\n    else if (target === 'b') {\n        let darker = darken(colour.toHslString(), 0.1).toHsl();\n        let darkest = darken(colour.toHslString(), 0.2).toHsl();\n        change(target + '1', base);\n        change(target + '2', darker.h + ' ' + darker.s + '% ' + darker.l + '%');\n        change(target + '3', darkest.h + ' ' + darkest.s + '% ' + darkest.l + '%');\n        change(target + 'c', content.h + ' ' + content.s + '% ' + content.l + '%');\n    }\n    else if (target === 'w') {\n        let content = contrast(colour.toHslString());\n        change('content-wrapper-background', colour.toHex());\n        change('theme-main-text', '' + content.toHex());\n        change('header-text', '' + content.toHex());\n    }\n};\n\nconst change = (variable, value) => {\n    theme[variable] = value;\n    //theme['tb-' + variable] = value;\n    document.documentElement.style.setProperty('--' + variable, value);\n   //document.documentElement.style.setProperty('--tb-' + variable, value);\n    fieldTheme.value = JSON.stringify(theme);\n};\n\nconst contrast = (hsl, percentage = 0.8) => {\n    if (colord(hsl).isDark()) {\n        return colord(hsl).lighten(percentage);\n    } else {\n        return colord(hsl).darken(percentage);\n    }\n};\n\nconst darken = (hsl, percentage = 0.2) => {\n    return colord(hsl).darken(percentage);\n};\n\nconst initDemoTooltip = () => {\n    let e = document.querySelector('[data-toggle=\"tooltip-demo\"]');\n    tippy(e, {\n        content: '<div class=\"dd-menu flex flex-col gap-1 max-w-2xl\">' + tooltipContent() + '</div>',\n        theme: 'kanka',\n        delay: 250,\n        placement: e.dataset.direction ?? 'bottom',\n        arrow: true,\n        allowHTML: true,\n        interactive: true,\n    });\n};\n\nconst tooltipContent = () => {\n    let str = '';\n\n    str += '<div class=\"tooltip-content p-1\">' +\n        '<div class=\"flex gap-2 items-center mb-1\">' +\n        '<div class=\"grow entity-names\">' +\n        ' <span class=\"entity-name text-xl block\">Demo tooltip</span>' +\n        '<span class=\"entity-subtitle text-base block\">Subtitle</span>' +\n        '</div>' +\n        '</div>' +\n        '<div class=\"tooltip-text text-sm\">' +\n        '<p>Rutrum adipiscing enim pellentesque mi rutrum lacus eget amet nisl dolor maecenas adipiscing diam orci commodo suspendisse tincidunt tristique gravida leo arcu condimentum fusce nunc.</p>' +\n        '</div>' +\n        '</div>'\n    ;\n    return str;\n};\n\n\ninit();\ninitDemoTooltip();\n"
  },
  {
    "path": "resources/js/clipboard.js",
    "content": "/**\n * Handler for copying content to the clipboard\n */\nconst initCopyToClipboard = () => {\n    const elements = document.querySelectorAll('[data-clipboard]');\n    elements.forEach((el) => {\n        /*if (el.dataset.loaded == 1) {\n            return;\n        }\n        el.dataset.loaded = 1;*/\n        el.addEventListener('click', clickToastHandler, false);\n    });\n};\n\nfunction clickToastHandler (e) {\n    e.preventDefault();\n    copyToClipboard(this.dataset.clipboard, this);\n\n    let toast = this.dataset.toast;\n    if (toast) {\n        window.showToast(toast);\n        return false;\n    }\n    return false;\n}\n\nasync function copyToClipboard(textToCopy, el) {\n    // Navigator clipboard api needs a secure context (https)\n    if (navigator.clipboard && window.isSecureContext) {\n        await navigator.clipboard.writeText(textToCopy);\n    } else {\n        // Use the 'out of viewport hidden text area' trick\n        const textArea = document.createElement(\"textarea\");\n        textArea.value = textToCopy;\n\n        // Move textarea out of the viewport so it's not visible\n        textArea.style.position = \"absolute\";\n        textArea.style.left = \"-999999px\";\n\n        el.append(textArea);\n        //document.body.prepend(textArea);\n        textArea.select();\n\n        try {\n            document.execCommand('copy');\n        } catch (error) {\n            console.error(error);\n        } finally {\n            textArea.remove();\n        }\n    }\n}\n\ninitCopyToClipboard();\nwindow.onEvent(function() {\n    initCopyToClipboard();\n});\n"
  },
  {
    "path": "resources/js/components/Dropdown.vue",
    "content": "<template>\n    <div :do=\"handleClickOutside\">\n      <div class=\"relative mx-auto\">\n        <div role=\"button\" class=\"inline-block select-none\" @click=\"open = !open\">\n          <slot name=\"link\"></slot>\n        </div>\n        <div class=\"absolute pin-l mt-px\" v-show=\"open\">\n          <slot name=\"dropdown\"></slot>\n        </div>\n      </div>\n    </div>\n</template>\n\n<script>\n\n    export default {\n        /*\n         * The component's data.\n         */\n        data() {\n            return {\n                open: false\n            };\n        },\n        methods: {\n            handleClickOutside() {\n                if (this.open) {\n                    this.open = false;\n                }\n            }\n        }\n    }\n</script>\n"
  },
  {
    "path": "resources/js/components/abilities/Abilities.vue",
    "content": "<template>\n    <div class=\"viewport box-abilities relative flex flex-col gap-5\">\n        <div v-if=\"loading\" class=\"load more text-center text-2xl\">\n            <i class=\"fa-solid fa-spin fa-spinner\" aria-hidden=\"true\"></i>\n        </div>\n\n        <div class=\"flex gap-5 flex-wrap\">\n            <parent v-for=\"group in groups\"\n                :key=\"group.id\"\n                :group=\"group\"\n                :permission=\"permission\"\n                :meta=\"meta\">\n            </parent>\n        </div>\n    </div>\n</template>\n\n\n<script setup lang=\"ts\">\nimport Parent from \"./Parent.vue\";\n\nimport {onMounted, onUpdated, ref} from \"vue\"\n\nconst props = defineProps<{\n    id: Number,\n    api: String,\n    permission: String,\n}>()\n\nconst groups = ref([])\nconst meta = ref([])\nconst loading = ref(true)\nconst waiting = ref(true)\n\nconst getAbilities = () => {\n    axios.get(props.api).then(res => {\n        groups.value = res.data.data.groups;\n        meta.value = res.data.data.meta;\n        loading.value = false;\n        waiting.value = false;\n    })\n}\n\n\nonMounted(() => {\n    getAbilities()\n})\n\nonUpdated(() => {\n    // Add the ajax tooltip listener when the dom is updated (for example when displaying\n    // children abilities)\n    window.ajaxTooltip();\n    window.initTooltips();\n})\n\n</script>\n"
  },
  {
    "path": "resources/js/components/abilities/Ability.vue",
    "content": "\n\n<template>\n    <div class=\"ability\" v-bind:data-tags=\"ability.class\">\n        <div class=\"ability-box p-4 rounded-lg bg-box shadow-xs flex flex-col md:flex-row items-center md:items-start gap-2 md:gap-4\">\n            <div class=\"\" v-if=\"ability.images.has\">\n                <a class=\"ability-image rounded-lg block w-40 h-40 cover-background\"\n                   v-bind:href=\"ability.images.url\"\n                   v-bind:style=\"backgroundImage()\">\n                </a>\n            </div>\n            <div class=\"flex flex-col gap-4 w-full\">\n                <div class=\"flex gap-2 md:gap-4 items-center w-full\">\n                    <div class=\"flex gap-2 items-center text-lg grow\">\n                        <a v-bind:href=\"ability.actions.view\" class=\"ability-name text-lg text-link\" v-html=\"ability.name\"></a>\n                        <i class=\"fa-regular fa-lock\" v-if=\"ability.visibility_id === 2\" v-bind:title=\"ability.visibility\"></i>\n                        <i class=\"fa-regular fa-user-lock\" v-if=\"ability.visibility_id === 3\" v-bind:title=\"ability.visibility\"></i>\n                        <i class=\"fa-regular fa-users\" v-if=\"ability.visibility_id === 5\" v-bind:title=\"ability.visibility\"></i>\n                        <i class=\"fa-regular fa-user-secret\" v-if=\"ability.visibility_id === 4\" v-bind:title=\"ability.visibility\"></i>\n                        <i class=\"fa-regular fa-eye\" v-if=\"ability.visibility_id === 1\" v-bind:title=\"ability.visibility\"></i>\n                    </div>\n                    <div v-if=\"ability.type\" class=\"hidden md:inline bg-base-200 p-2 px-3  rounded-2xl flex-none\" v-html=\"ability.type\"></div>\n\n                    <div v-if=\"permission\" class=\"\">\n                        <a role=\"button\"\n                            v-on:click=\"updateAbility(ability)\"\n                            v-if=\"canDelete\"\n                            class=\"btn2 btn-ghost btn-sm\"\n                            v-bind:title=\"ability.i18n.edit\">\n                            <i class=\"fa-regular fa-pencil \" aria-hidden=\"true\"></i>\n                            <span class=\"sr-only\" v-html=\"ability.i18n.edit\"></span>\n                        </a>\n                    </div>\n                </div>\n\n                <div v-if=\"ability.type\" class=\"visible md:hidden\">\n                    <div class=\"inline-block bg-base-200 p-2 rounded-xl\" v-html=\"ability.type\"></div>\n                </div>\n                <div class=\"entity-content\" v-if=\"ability.entry\" v-html=\"ability.entry\"></div>\n                <div class=\"flex gap-2 items-center ability-tags\" v-if=\"ability.tags\">\n                    <a v-for=\"tag in ability.tags\"\n                       v-bind:class=\"tagClass(tag)\"\n                       v-bind:style=\"tag.style || ''\"\n                       v-bind:href=\"tag.url\"\n                       data-toggle=\"tooltip-ajax\"\n                       v-bind:data-url=\"tag.tooltip\"\n\n                       v-html=\"tag.name\">\n                    </a>\n                </div>\n                <div class=\"entity-content text-sm text-neutral-content\" v-if=\"ability.note\" v-html=\"ability.note\">\n                </div>\n\n                <div v-if=\"ability.charges && permission\" class=\"flex gap-2 md:gap-4 ability-charges w-full items-end\">\n                    <div class=\"flex gap-1 flex-wrap grow\">\n                        <div class=\"charge cursor-pointer rounded-full p-2 hover:bg-accent hover:text-accent-content w-8 h-8 flex items-center justify-center\" v-for=\"n in ability.charges\" v-on:click=\"useCharge(ability, n)\"\n                            v-bind:class=\"{ 'bg-base-200 charge-used': ability.used_charges >= n }\">\n                            <span v-html=\"n\"></span>\n                        </div>\n                    </div>\n                    <div class=\"flex-none\">\n                        <span class=\"text-lg\" v-html=\"remainingNumber()\"></span>\n                        <span v-html=\"remainingText()\"></span>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\n\nimport {ref} from \"vue\"\n\nconst details = ref(false)\n\nconst props = defineProps<{\n    ability: Object,\n    permission: String,\n}>()\n\nconst hasAttribute = () => {\n    return props.ability.attributes.length > 0;\n}\n\nconst canDelete = () => {\n    return props.permission.value;\n}\n\nconst backgroundImage = () => {\n    if (props.ability.images.thumb) {\n        return {\n            backgroundImage: 'url(' + props.ability.images.thumb + ')'\n        }\n    }\n    return {}\n}\n\nconst updateAbility = (ability) => {\n    window.openDialog('abilities-dialog', ability.actions.edit);\n}\n\nconst remainingNumber = () => {\n    return props.ability.charges - props.ability.used_charges;\n}\n\nconst remainingText = () => {\n    return props.ability.i18n.left.replace(/:amount/, '');\n}\n\nconst tagClass = (tag) => {\n   let css = 'rounded-xl bg-base-200 text-xs py-1 px-3 text-base-content';\n   return css += ' ' + tag.class;\n};\n\nconst useCharge = (ability, charge) => {\n    if (charge > ability.used_charges) {\n        ability.used_charges += 1;\n    } else {\n        ability.used_charges -= 1;\n    }\n\n    axios.post(ability.actions.use, {'used': ability.used_charges})\n        .then((res) => {\n            if (!res.data.success) {\n                ability.used_charges -= 1;\n            }\n        })\n        .catch(() => {\n            ability.used_charges -= 1;\n        });\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/abilities/Parent.vue",
    "content": "\n\n<template>\n    <div class=\"ability-parent flex flex-col gap-5 w-full\"\n    >\n        <div class=\"parent-head flex gap-2 md:gap-5 items-center\">\n            <div\n                class=\"parent-image rounded-full w-12 h-12 md:w-16 md:h-16 cover-background flex-none\"\n                v-if=\"group.has_image\"\n                v-bind:style=\"backgroundImage()\">\n            </div>\n            <div class=\"flex flex-col gap-1 grow overflow-hidden\">\n                <div v-if=\"group.url\">\n                    <a v-bind:href=\"group.url\" v-html=\"group.name\" class=\"parent-name text-xl\"></a>\n                </div>\n                <span v-else class=\"parent-name text-xl\" v-html=\"group.name\"></span>\n                <p class=\"truncate\" v-html=\"group.type\" data-toggle=\"tooltip\" :data-title=\"group.type\"></p>\n            </div>\n            <div class=\"flex-none self-end\">\n                <span role=\"button\" @click=\"click(group)\" class=\"cursor-pointer inline-block\">\n                    <i v-if=\"!collapsed\" aria-hidden=\"true\" class=\"fa-thin fa-chevron-circle-up fa-2x\"></i>\n                    <i v-else aria-hidden=\"true\" class=\"fa-thin fa-chevron-circle-down fa-2x\"></i>\n                    <span class=\"sr-only\" v-if=\"!collapsed\">Expand section</span>\n                    <span class=\"sr-only\" v-else>Collapse section</span>\n                </span>\n            </div>\n        </div>\n        <div class=\"parent-abilities flex flex-col gap-5\" v-if=\"!collapsed\">\n            <ability v-for=\"ability in group.abilities\"\n                    :key=\"ability.id\"\n                    :ability=\"ability\"\n                     :permission=\"permission\"\n                     :meta=\"meta\">\n            </ability>\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\n\nimport Ability from \"./Ability.vue\";\nimport {ref} from \"vue\"\n\n\nconst props = defineProps<{\n    group: Object,\n    permission: String,\n    meta: Object,\n}>()\n\nconst collapsed = ref(false)\n\nconst backgroundImage = () => {\n    if (props.group.has_image) {\n        return {\n            backgroundImage: 'url(' + props.group.image + ')'\n        }\n    }\n    return {}\n}\n\nconst click = (group) => {\n    collapsed.value = !collapsed.value;\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/attributes/Attribute.vue",
    "content": "<template>\n    <div v-bind:class=\"rowClass(attribute)\">\n        <div v-if=\"attribute.template\" class=\"basis-full w-full\">\n            <p v-html=\"attribute.template.text\" class=\"text-neutral-content\"></p>\n        </div>\n        <div class=\"w-6 md:w-8 pt-2\" v-if=\"!attribute.is_hidden\">\n            <i class=\"fa-light fa-grip-vertical handle cursor-move\" aria-hidden=\"true\"/>\n        </div>\n        <div class=\"w-6 md:w-8 pt-2\" v-else>\n            <i class=\"fa-regular fa-user-secret\" aria-hidden=\"true\"/>\n        </div>\n        <div class=\"w-6 md:w-8 pt-2\">\n            <input type=\"checkbox\"\n                   v-model=\"attribute.is_checked\"\n                   tabindex=\"-1\"\n                   v-bind:value=\"attribute.id\"\n                   v-bind:placeholder=\"placeholderName(attribute)\" />\n        </div>\n        <div class=\"grow flex flex-col md:flex-row gap-2\">\n            <div v-if=\"attribute.is_section\" class=\"grow\">\n                <input type=\"text\"\n                       class=\"w-full\"\n                       v-model=\"attribute.name\"\n                       :id=\"'name-' + attribute.id\"\n                       v-bind:placeholder=\"placeholderName(attribute)\" />\n            </div>\n            <div v-else-if=\"attribute.is_hidden\" class=\"md:w-40 flex-none bg-base-200 rounded flex items-center\">\n                <div class=\"w-full break-normal px-2\" v-html=\"attribute.name\"></div>\n            </div>\n            <div v-else class=\"md:w-40 flex-none\">\n                <attributes-manager-mention-field\n                    :attribute=\"attribute\"\n                    :placeholder=\"placeholderName(attribute)\"\n                    type=\"text\"\n                    property=\"name\"\n                    :mentionApi=\"mentionApi\"\n                    @field-blur=\"checkIfRanged()\"\n                />\n            </div>\n\n            <div v-if=\"attribute.is_multiline\" class=\"grow\">\n                <attributes-manager-mention-field\n                    :attribute=\"attribute\"\n                    :placeholder=\"placeholderValue(attribute)\"\n                    type=\"textarea\"\n                    property=\"value\"\n                    :mentionApi=\"mentionApi\"\n                />\n            </div>\n            <div v-else-if=\"attribute.is_checkbox\" class=\"grow flex items-center\">\n                <input type=\"checkbox\"\n                       v-model=\"attribute.value\"\n                       :id=\"'value-' + attribute.id\"\n                       v-bind:placeholder=\"placeholderValue(attribute)\" />\n            </div>\n            <div v-else-if=\"attribute.is_number\" class=\"grow relative\">\n                <input\n                    type=\"number\"\n                    class=\"w-full\"\n                    v-model=\"attribute.value\"\n                    :id=\"'value-' + attribute.id\"\n                    v-bind:placeholder=\"placeholderValue(attribute)\"\n                    v-bind:min=\"attributeMin(attribute)\"\n                    v-bind:max=\"attributeMax(attribute)\"\n                />\n            </div>\n            <div v-else-if=\"isDisabled(attribute)\" class=\"grow bg-base-200 rounded flex items-center select-none\">\n                <div class=\"w-full break-normal px-2 text-xs\" v-html=\"attribute.value\"></div>\n            </div>\n            <div v-else-if=\"!attribute.is_section\" class=\"grow\">\n                <attributes-manager-mention-field\n                    :attribute=\"attribute\"\n                    :placeholder=\"placeholderValue(attribute)\"\n                    type=\"text\"\n                    property=\"value\"\n                    :mentionApi=\"mentionApi\"\n                    v-if=\"!isRanged\"\n                />\n                <select\n                    v-else\n                    class=\"w-full\"\n                    v-model=\"attribute.value\"\n                    :id=\"'value-' + attribute.id\">\n                    <option v-for=\"(value, index) in rangedOptions(attribute)\" :key=\"index\" v-bind:value=\"value\" v-html=\"value\"></option>\n                </select>\n            </div>\n        </div>\n\n        <div class=\"flex gap-2 pt-2 flex-none\">\n            <a role=\"button\" @click=\"pinnedToggle(attribute)\" class=\"w-6 lg:w-16 text-center inline-block cursor-pointer text-base-content hover:text-accent\" v-if=\"!attribute.is_hidden\">\n                <i v-bind:class=\"pinnedClass(attribute)\"  v-bind:aria-label=\"pinnedLabel(attribute)\" />\n            </a>\n            <a v-if=\"props.isAdmin && !attribute.is_hidden\" role=\"button\" @click=\"privateToggle(attribute)\" class=\"w-6 lg:w-16 inline-block text-center cursor-pointer text-base-content hover:text-accent\" >\n                <i v-bind:class=\"privateClass(attribute)\" v-bind:aria-label=\"privateLabel(attribute)\" />\n            </a>\n            <a role=\"button\" class=\"w-6 lg:w-16 inline-block text-center flex-none cursor-pointer hover:text-error-content text-base-content\" @click=\"$emit('remove', attribute)\" v-if=\"!attribute.is_hidden\">\n                <i class=\"fa-regular fa-trash-can\" v-bind:aria-label=\"trans('columns.delete')\" v-bind:title=\"trans('columns.delete')\" />\n            </a>\n        </div>\n\n        <input type=\"hidden\" name=\"attribute[]\" :value=\"configValue(attribute)\" />\n    </div>\n</template>\n\n<script setup lang=\"ts\">\n\nimport {onMounted, ref} from \"vue\"\n\nconst props = defineProps<{\n    attribute: Object,\n    attributes: Object\n    i18n,\n    isAdmin: Boolean,\n    showHidden: Boolean,\n    searchTerm: String,\n    mentionApi: String,\n}>()\n\nconst emit = defineEmits(['remove'])\nconst isRanged = ref(false)\n\n\nonMounted(() => {\n    checkIfRanged()\n})\n\nconst trans = (k) => {\n    if (!k.includes('.')) {\n        return k\n    }\n    let blocks = k.split('.')\n    return props.i18n[blocks[0]][blocks[1]]\n}\n\nconst attributeName = (attribute) => {\n    return 'attr_name[' + attribute.id + ']'\n}\nconst attributeValue = (attribute) => {\n    return 'attr_value[' + attribute.id + ']'\n}\n\nconst rowClass = (attribute) => {\n    if (props.searchTerm) {\n        let lowerCase = props.searchTerm.toLowerCase()\n        if (!attribute.name.toLowerCase().includes(lowerCase) &&\n            !(attribute.value ? attribute.value.toLowerCase().includes(lowerCase) : false)) {\n            return 'hidden'\n        }\n    }\n    if (!props.showHidden && attribute.is_hidden) {\n        return 'hidden'\n    }\n    return 'flex gap-2 w-full px-4 ' + (attribute.template ? 'flex-wrap' : null)\n}\n\nconst typeName = (attribute) => {\n    return 'attr_type[' + attribute.id + ']'\n}\n\n\nconst placeholderName = (attribute) => {\n    if (attribute.is_checkbox) {\n        return trans('placeholders.checkbox_name')\n    } else if (attribute.is_section) {\n        return trans('placeholders.section_name')\n    } else if (attribute.is_multiline) {\n        return trans('placeholders.multiline_name')\n    }\n    return trans('placeholders.name')\n}\n\nconst placeholderValue = (attribute) => {\n    if (attribute.placeholder) {\n        return attribute.placeholder;\n    }\n    return trans('placeholders.value')\n}\n\nconst typeValue = (attribute) => {\n    if (attribute.is_checkbox) {\n        return 3\n    } else if (attribute.is_multiline) {\n        return 2\n    } else if (attribute.is_section) {\n        return 4\n    } else if (attribute.is_random) {\n        return 5\n    } else if (attribute.is_number) {\n        return 6\n    }\n    return 1\n}\n\nconst pinnedClass = (attribute) => {\n    if (attribute.is_pinned) {\n        return 'fa-solid fa-thumbtack rotate-45 transition-all'\n    }\n    return 'fa-regular fa-thumbtack transition-all'\n}\n\nconst pinnedLabel = (attribute) => {\n    if (attribute.is_pinned) {\n        return 'Pinned'\n    }\n    return 'Unpinned'\n}\n\nconst pinnedToggle = (attribute) => {\n    attribute.is_pinned = !attribute.is_pinned\n    /*const attribute = attributes.value.find(attribute => attribute.id === id);\n    if (attribute) {\n        attribute.is_pinned = !attribute.is_pinned;\n    }*/\n}\n\nconst privateClass = (attribute) => {\n    if (attribute.is_private) {\n        return 'fa-solid fa-lock-keyhole'\n    }\n    return 'fa-regular fa-unlock-keyhole'\n}\n\nconst privateLabel = (attribute) => {\n    if (attribute.is_private) {\n        return 'Private'\n    }\n    return 'Public'\n}\n\nconst privateToggle = (attribute) => {\n    attribute.is_private = !attribute.is_private\n}\n\nconst isDisabled = (attribute) => {\n    return attribute.is_hidden || attribute.name === '_layout'\n}\n\nconst configValue = (attribute) => {\n    return JSON.stringify({\n        id: attribute.id,\n        name: attribute.name,\n        value: attribute.value,\n        type: typeValue(attribute),\n        is_private: attribute.is_private,\n        is_pinned: attribute.is_pinned,\n        is_hidden: attribute.is_hidden,\n        source_id: attribute.source_id,\n    })\n}\n\nconst attributeMin = (attribute) => {\n    const regex = /\\[range:(\\d+),(\\d+)\\]/\n    const match = attribute.name.match(regex)\n    if (!match) {\n        return null\n    }\n    return parseInt(match[1])\n}\n\nconst attributeMax = (attribute) => {\n    const regex = /\\[range:(\\d+),(\\d+)\\]/\n    const match = attribute.name.match(regex)\n    if (!match) {\n        return null\n    }\n    return parseInt(match[2])\n}\n\nconst checkIfRanged = () => {\n    const regex = /\\[range:(.*)+\\]/\n    const match = props.attribute.name.match(regex)\n    if (match) {\n        isRanged.value = true\n    } else {\n        isRanged.value = false\n    }\n}\n\nconst rangedOptions = (attribute) => {\n    const regex = /\\[range:(.*)+\\]/\n    const match = attribute.name.match(regex)\n    let rangedOptions = []\n    if (match) {\n        rangedOptions = match[1].split(',').map(value => value.trim()).map(value => parseMentions(value))\n        rangedOptions.unshift([])\n    }\n    return rangedOptions\n}\n\nconst parseMentions = (value) => {\n    const regex = /\\{(.*)+\\}/\n    const match = value.match(regex)\n    if (!match) {\n        return value\n    }\n    // look for an attribute names like that\n    const mentionName = match[1]\n    const mentionedAttribute = props.attributes.filter(attribute => attribute.name == mentionName)\n    if (mentionedAttribute.length === 0) {\n        return value\n    }\n\n    return mentionedAttribute[0].value.trim()\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/components/attributes/Form.vue",
    "content": "<template>\n    <div class=\"flex gap-4 justify-between flex-wrap text-xs\">\n        <div class=\"flex items-center flex-wrap  gap-4\">\n            <button @click=\"addAttribute($event, '')\" :class=\"btnClass()\">\n                <i class=\"fa-regular fa-shield md:text-xl\" aria-hidden=\"true\" />\n                <span v-html=\"trans('types.attribute')\"></span>\n            </button>\n\n            <button @click=\"addAttribute($event, 'multiline')\" :class=\"btnClass()\">\n                <i class=\"fa-regular fa-align-justify md:text-xl\" aria-hidden=\"true\" />\n                <span v-html=\"trans('types.multiline')\"></span>\n            </button>\n\n            <button @click=\"addAttribute($event, 'number')\" :class=\"btnClass()\">\n                <i class=\"fa-regular fa-hashtag md:text-xl\" aria-hidden=\"true\" />\n                <span v-html=\"trans('types.number')\"></span>\n            </button>\n\n            <button @click=\"addAttribute($event, 'section')\" :class=\"btnClass()\">\n                <i class=\"fa-regular fa-layer-group md:text-xl\" aria-hidden=\"true\" />\n                <span v-html=\"trans('types.section')\"></span>\n            </button>\n\n            <button @click=\"addAttribute($event, 'checkbox')\" :class=\"secondaryBtnClass()\">\n                <i class=\"fa-regular fa-check-square md:text-xl\" aria-hidden=\"true\" />\n                <span v-html=\"trans('types.checkbox')\"></span>\n            </button>\n\n            <button @click=\"addAttribute($event, 'random')\" :class=\"secondaryBtnClass()\">\n                <i class=\"fa-regular fa-question-circle md:text-xl\" aria-hidden=\"true\" />\n                <span v-html=\"trans('types.random')\" class=\"text-xs truncate\"></span>\n            </button>\n        </div>\n\n        <button @click=\"openTemplates($event)\" :class=\"secondaryBtnClass()\" data-tooltip :data-title=\"trans('actions.load')\">\n            <i class=\"fa-regular fa-file-import md:text-xl\" aria-hidden=\"true\" />\n            <span v-html=\"trans('types.templates')\" class=\"text-xs truncate\"></span>\n        </button>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\n\nimport {ref, onMounted} from \"vue\";\n\nconst props = defineProps<{\n    attributes,\n    visibleAttributes,\n    i18n,\n    newAttributeID,\n    max\n}>()\n\nconst emit = defineEmits(['incrementNewAttributeID', 'openTemplates'])\n\nonMounted(() => {\n    window.initTooltips();\n})\n\nconst trans = (k) => {\n    if (!k.includes('.')) {\n        return k;\n    }\n    let blocks = k.split('.');\n    return props.i18n[blocks[0]][blocks[1]];\n};\n\nconst addAttribute = (event, type) => {\n    event.preventDefault()\n    if (reachedMax(event)) {\n        return;\n    }\n    emit('incrementNewAttributeID')\n    let attribute = {\n        id: props.newAttributeID,\n        name: '',\n        value: '',\n        is_deleted: false,\n        is_hidden: false,\n        is_pinned: false,\n        is_private: false,\n        is_checked: false,\n\n        is_section: type === 'section',\n        is_number: type === 'number',\n        is_multiline: type === 'multiline',\n        is_checkbox: type === 'checkbox',\n        is_random: type === 'random',\n    }\n\n    props.attributes.push(attribute)\n    props.visibleAttributes.push(attribute)\n}\n\nconst openTemplates = (event) => {\n    event.preventDefault()\n    emit('openTemplates')\n}\n\nconst btnClass = () => {\n    return 'flex flex-col gap-1 items-center hover:bg-base-200 text-xs border border-base-200 rounded-xl px-4 py-3 cursor-pointer';\n}\nconst secondaryBtnClass = (extra = '') => {\n    return 'flex flex-col gap-1 items-center hover:bg-base-200 text-xs border border-base-300 rounded-xl px-4 py-3 cursor-pointer text-neutral-content ' + extra  ;\n}\n\n/**\n * Check if the form has space for some extra fields to be send\n * @param event\n */\nconst reachedMax = (event) => {\n    const form = event.target.closest('form')\n    const inputFields = form.getElementsByTagName('input')\n    const selectFields = form.getElementsByTagName('select')\n    const buttonFields = form.getElementsByTagName('button')\n\n    // Exclude unnamed fields, as attributes have multiple fields but are\n    // compressed into a single json input field to allow more attributes\n    const namedInputFields = Array.from(inputFields).filter(input => input.hasAttribute('name'));\n    const namedSelectFields = Array.from(selectFields).filter(input => input.hasAttribute('name'));\n    const namedButtonFields = Array.from(buttonFields).filter(input => input.hasAttribute('name'));\n\n    const totalFields = namedInputFields.length + namedSelectFields.length + namedButtonFields.length\n    if (totalFields >= (props.max - 1)) {\n        window.showToast(props.i18n['toasts']['max_reached'].replace(/:count/, totalFields), 'error')\n        return true;\n    }\n    return false;\n}\n\n</script>\n\n\n"
  },
  {
    "path": "resources/js/components/attributes/Manager.vue",
    "content": "\n<template>\n    <div class=\"text-center text-4xl p-4\" v-if=\"loading\">\n        <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\" />\n    </div>\n    <div class=\"flex flex-col gap-2 lg:gap-5 relative h-full min-h-0 \" v-else>\n        <!-- Toolbar -->\n        <div class=\"attributes-toolbar flex gap-2 lg:gap-2 items-center flex-wrap flex-none\">\n            <a role=\"button\" v-bind:class=\"deleteClass()\" @click=\"deleteAll()\" v-if=\"hasSelected()\">\n                <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\" />\n                <span v-html=\"trans('columns.delete')\"></span>\n                <span v-html=\"countSelected()\" class=\"font-extrabold\"></span>\n            </a>\n            <a role=\"button\" @click=\"togglePrivate()\" v-bind:class=\"togglePrivateClass()\" v-if=\"isAdmin() && hasSelected()\" >\n                <i class=\"fa-regular fa-lock-open\" aria-hidden=\"true\" />\n                <span v-html=\"trans('actions.toggle')\"></span>\n                <span v-html=\"countSelected()\" class=\"font-extrabold\"></span>\n            </a>\n            <input type=\"text\" v-bind:placeholder=\"trans('actions.search')\" class=\"grow md:flex-none md:w-80\" v-model=\"searchTerm\" v-if=\"!hasSelected()\" />\n            <div class=\"relative\" v-if=\"!hasSelected()\">\n                <a role=\"button\" @click=\"toggleFilters()\" class=\"btn2 btn-outline btn-sm\">\n                    <i class=\"fa-regular fa-bars-filter\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('actions.filters')\"></span>\n                </a>\n                <div class=\"border border-base-300 shadow-sm rounded bg-base-100 p-4 absolute right-0 flex flex-col gap-5 w-60\" v-if=\"showFilters\"  v-click-outside=\"onClickOutside\">\n                    <div class=\"flex gap-2\">\n                        <div>\n                            <input type=\"checkbox\" v-model=\"showHidden\" value=\"1\" id=\"_show_hidden_attributes\" />\n                        </div>\n                        <label for=\"_show_hidden_attributes\" v-html=\"trans('filters.show_hidden')\"></label>\n                    </div>\n                </div>\n            </div>\n            <a href=\"https://docs.kanka.io/en/latest/features/properties.html\" class=\"btn2 btn-ghost btn-sm\" v-if=\"!hasSelected()\">\n                <i class=\"fa-regular fa-question-circle\" aria-hidden=\"true\" />\n                <span v-html=\"trans('actions.help')\"></span>\n            </a>\n        </div>\n\n        <!-- Middle -->\n        <div class=\"w-full flex flex-col gap-2 flex-1 min-h-0 overflow-hidden\">\n            <div class=\"flex gap-2 border-b border-base-300 text-neutral-content items-center text-xs font-light px-4 flex-none\">\n                <div class=\"w-6 md:w-8 flex-none\"></div>\n                <div class=\"w-6 md:w-8 flex-none\">\n                    <input type=\"checkbox\" @change=\"toggleAll()\" v-model=\"checkedAll\" />\n                </div>\n                <div class=\"grow md:w-40 md:grow-0 flex-none\" v-html=\"trans('columns.attribute')\"></div>\n                <div class=\"hidden md:block grow\" v-html=\"trans('columns.value')\"></div>\n                <div class=\"hidden lg:block w-16 flex-none text-center\">\n                    <span class=\"truncate inline-block\" v-html=\"trans('columns.pinned')\"></span>\n                </div>\n                <div class=\"hidden lg:block w-16 flex-none text-center\" v-if=\"isAdmin()\" >\n                    <span class=\"truncate inline-block\" v-html=\"trans('columns.private')\"></span>\n                </div>\n                <div class=\"hidden lg:block w-16 flex-none text-center\">\n                    <span class=\"truncate inline-block\" v-html=\"trans('columns.delete')\"></span>\n                </div>\n                <div class=\"lg:hidden flex-none text-center\" v-html=\"trans('columns.preferences')\">\n                </div>\n            </div>\n            <div class=\"flex-1 min-h-0 overflow-y-auto\">\n                <draggable v-model=\"visibleAttributes\" handle=\".handle\" class=\"w-full flex flex-col gap-2\">\n                    <attributes-manager-attribute\n                        v-for=\"attribute in visibleAttributes\"\n                        :key=\"attribute.id\"\n                        :attribute=\"attribute\"\n                        :attributes=\"attributes\"\n                        :isAdmin=\"isAdmin()\"\n                        :showHidden=\"showHidden\"\n                        :i18n=\"i18n\"\n                        :search-term=\"searchTerm\"\n                        :mention-api=\"meta.mentions\"\n                        @remove=\"removeAttribute\"\n                    >\n                    </attributes-manager-attribute>\n                </draggable>\n            </div>\n            <div v-if=\"visibleAttributes.length === 0\" class=\"w-full px-5 italic\" v-html=\"trans('filters.no_results')\">\n            </div>\n        </div>\n\n        <div class=\"flex-none\">\n            <attributes-manager-form\n                :attributes=\"attributes\"\n                :visible-attributes=\"visibleAttributes\"\n                :i18n=\"i18n\"\n                :newAttributeID=\"newAttributeID\"\n                :max=\"meta.max\"\n                @incrementNewAttributeID=\"incrementNewAttributeID\"\n                @openTemplates=\"toggleTemplates\"\n            >\n            </attributes-manager-form>\n        </div>\n    </div>\n\n    <dialog class=\"dialog rounded-top md:rounded-2xl bg-base-100 min-w-fit shadow-md text-base-content\" id=\"templates-dialog\" aria-modal=\"true\" v-if=\"!loading\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans('templates.title')\" class=\"text-lg font-normal\"></h4>\n\n            <button autofocus type=\"button\" class=\"text-xl opacity-50 hover:opacity-100 focus:opacity-100 cursor-pointer text-decoration-none\" aria-label=\"Close\" v-on:click=\"closeModal()\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">Close</span>\n            </button>\n        </header>\n        <article class=\"flex flex-col gap-4 p-4 md:p-6\">\n            <p class=\"text-neutral-content\" v-html=\"trans('templates.helper')\"></p>\n            <label for=\"template_id\" v-html=\"trans('templates.template')\"></label>\n            <select v-model=\"template\" class=\"w-full\" id=\"template_id\">\n                <optgroup v-for=\"(group, key) in templates\" v-bind:label=\"key\">\n                    <option v-for=\"(option, id) in group\" v-bind:value=\"id\" v-html=\"option\"></option>\n                </optgroup>\n            </select>\n        </article>\n        <footer class=\"flex flex-wrap gap-3 justify-end items-center p-4 md:px-6\">\n            <menu class=\"flex flex-wrap gap-3 ps-0\">\n                <div class=\"submit-group\">\n                    <a role=\"button\" class=\"btn2 btn-primary\" @click=\"loadTemplate()\" v-html=\"trans('templates.load')\">\n                    </a>\n                </div>\n            </menu>\n        </footer>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref, onMounted, onBeforeUnmount} from 'vue'\n\nconst props = defineProps<{\n    api: string,\n}>()\n\n\nconst attributes = ref([])\nconst visibleAttributes = ref([])\nlet i18n = []\nlet meta = []\nlet templates = []\nconst loading = ref(true)\nconst checkedAll = ref(false)\nconst deletedAttributes = ref([])\nconst dragging = ref(false)\nconst showHidden = ref(false)\nconst showFilters = ref(false)\nconst showTemplates = ref(false)\nconst searchTerm = ref(null)\nconst template = ref(null)\nconst newAttributeID = ref(0)\n\nonMounted(() => {\n    fetch(props.api)\n        .then(response => response.json())\n        .then(response => {\n            response.attributes.forEach(a => {\n                attributes.value.push(a)\n                visibleAttributes.value.push(a)\n            })\n            meta = response.meta;\n            i18n = response.i18n;\n            templates = response.templates;\n            loading.value = false;\n        });\n    window.addEventListener('keydown', handleKeyDown);\n});\n\nonBeforeUnmount(() => {\n    window.removeEventListener('keydown', handleKeyDown);\n});\n\nconst handleKeyDown = (event) => {\n    const activeElement = document.activeElement;\n    const tagName = activeElement.tagName.toLowerCase();\n    // Don't listen to keydown events if the user is focused on a field\n    if (['select', 'input', 'textarea', 'button'].includes(tagName)) {\n        return\n    }\n    if (event.ctrlKey && event.key === 'z') {\n        if (deletedAttributes.value.length === 0) {\n            return\n        }\n        // Undo the last delete\n        event.preventDefault();\n        let id = deletedAttributes.value.pop();\n        let attribute = attributes.value.find(attribute => attribute.id === id);\n        if (attribute) {\n            attribute.is_deleted = false;\n        }\n        refreshVisibleAttributes()\n    }\n};\n\nconst trans = (k) => {\n    if (!k.includes('.')) {\n        return k;\n    }\n    let blocks = k.split('.');\n    return i18n[blocks[0]][blocks[1]];\n};\n\nconst toggleAll = () => {\n    let checked = checkedAll.value;\n    attributes.value.forEach(attribute => {\n        if (attribute.is_hidden && !showHidden.value) {\n            return\n        }\n        attribute.is_checked = checked;\n    });\n}\nconst remove = (attribute) => {\n    attribute.is_deleted = true\n    attribute.is_checked = false\n    deletedAttributes.value.push(attribute.id);\n}\nconst removeAttribute = (attribute) => {\n    remove(attribute)\n    refreshVisibleAttributes()\n}\n\nconst deleteClass = () => {\n    let checked = attributes.value.find(attribute => attribute.is_checked == true);\n    if (!checked) {\n        return 'btn2 btn-ghost  btn-sm'\n    }\n    return 'btn2 btn-error btn-outline  btn-sm'\n}\n\nconst getSelected = () => {\n    return attributes.value.filter(attribute => attribute.is_checked == true);\n}\nconst hasSelected = () => {\n    return getSelected().length > 0;\n}\nconst countSelected = () => {\n    let selected = getSelected();\n    return selected.length;\n}\n\nconst deleteAll = () => {\n    let selected = getSelected();\n    if (selected.length === 0) {\n        return window.showToast(trans('toasts.no_attributes_selected'),\n        'error');\n    }\n    selected.forEach(attribute => {\n        remove(attribute);\n    });\n    refreshVisibleAttributes()\n    checkedAll.value = false;\n    window.showToast(trans('toasts.toggle_deleted'));\n}\n\nconst togglePrivateClass = () => {\n    let checked = attributes.value.find(attribute => attribute.is_checked == true);\n    if (!checked) {\n        return 'btn2 btn-ghost btn-sm'\n    }\n    return 'btn2 btn-outline  btn-sm'\n}\nconst togglePrivate = () => {\n    let selected = attributes.value.filter(attribute => attribute.is_checked);\n\n    if (selected.length === 0) {\n        return window.showToast(trans('toasts.no_attributes_selected'),\n            'error');\n    }\n    let newState = null\n    selected.forEach(attribute => {\n        if (newState === null)\n            newState = !attribute.is_private\n        attribute.is_private = newState\n    });\n    window.showToast(trans('toasts.toggled_privacy'));\n}\n\nconst refreshVisibleAttributes = () => {\n    visibleAttributes.value = undeletedAttributes()\n}\n\n\nconst isAdmin = () => {\n    return meta.is_admin;\n}\n\nconst undeletedAttributes = () => {\n    return attributes.value.filter(attr => !attr.is_deleted)\n}\n\nconst toggleFilters = () => {\n    showFilters.value = true\n}\n\nconst toggleTemplates = () => {\n    showTemplates.value = true\n    window.openDialog('templates-dialog')\n}\n\nconst closeModal = () => {\n    window.closeDialog('templates-dialog')\n}\n\nconst onClickOutside = () => {\n    showFilters.value = false\n    showTemplates.value = false\n}\n\nconst loadTemplate = () => {\n    if (!template.value) {\n        closeModal()\n        return\n    }\n\n    let url = meta.template + '?template=' + template.value\n    fetch(url)\n        .then(response => response.json())\n        .then(response => {\n            response.forEach(attr => importAttribute(attr))\n            closeModal()\n            window.showToast(trans('toasts.template'))\n            template.value = null\n        })\n}\n\nconst importAttribute = (attribute) => {\n    // Don't re-import existing attributes, unless they've been deleted\n    let ex = attributes.value.find(attr => attr.name == attribute.name)\n    if (ex && !ex.is_deleted) {\n        return\n    }\n\n    attribute['id'] = newAttributeID.value--\n    attributes.value.push(attribute)\n    visibleAttributes.value.push(attribute)\n}\n\nconst incrementNewAttributeID = () => {\n    newAttributeID.value--\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/components/attributes/MentionField.vue",
    "content": "<template>\n    <div class=\"relative\">\n        <input\n            type=\"text\"\n            class=\"w-full\"\n            v-if=\"type === 'text'\"\n            v-model=\"attribute[property]\"\n            :id=\"property + '-' + attribute.id\"\n            v-bind:placeholder=\"placeholder\"\n            @input=\"onInput\"\n            ref=\"textarea\"\n            @keydown.down.prevent=\"highlightNext\"\n            @keydown.up.prevent=\"highlightPrev\"\n            @keydown.enter.prevent=\"selectMention\"\n            @keydown.esc=\"hideSuggestions\"\n            @blur=\"onBlur\"\n        />\n        <textarea\n            type=\"text\"\n            class=\"w-full\"\n            v-else-if=\"type === 'textarea'\"\n            v-model=\"attribute[property]\"\n            :id=\"property + '-' + attribute.id\"\n            v-bind:placeholder=\"placeholder\"\n            @input=\"onInput\"\n            rows=\"3\"\n            ref=\"textarea\"\n            @keydown.down=\"highlightNext\"\n            @keydown.up=\"highlightPrev\"\n            @keydown.enter=\"handleEnter\"\n            @keydown.esc=\"hideSuggestions\"\n            @blur=\"onBlur\"\n        ></textarea>\n        <ul class=\"absolute w-full left-0 bg-base-100 shadow-sm list-none p-2 m-0 z-1000\" v-if=\"suggestions.length\" v-click-outside=\"hideSuggestions\">\n            <li\n                v-for=\"(suggestion, id) in suggestions\"\n                :key=\"suggestion.id\"\n                :class=\"suggestionClass(id)\"\n                @click=\"selectSuggestion(suggestion)\"\n                v-html=\"suggestion.name\">\n            </li>\n        </ul>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\n\nimport { ref, nextTick } from 'vue';\n\nconst props = defineProps<{\n    attribute: Object\n    placeholder: String,\n    type: String,\n    property: String,\n    mentionApi: String,\n}>()\n\nconst suggestions = ref([])\nconst highlightedIndex = ref(-1)\nconst mentionTargetField = ref(null)\nconst textarea = ref(null)\n\nconst emit = defineEmits(['update:modelValue', 'field-blur'])\n\nconst onInput = (event) => {\n    const value = event.target.value\n    const cursorPos = event.target.selectionStart;\n    const textBeforeCursor = value.substring(0, cursorPos);\n    const mentionMatch = textBeforeCursor.match(/@(\\w{3,})$/);\n\n    mentionTargetField.value = event.target.dataset.type;\n    if (mentionMatch) {\n        let url = props.mentionApi + '?q=' +  mentionMatch[1];\n        fetch (url)\n            .then(response => response.json())\n            .then(response => {\n                suggestions.value = response\n                highlightedIndex.value = 0\n            });\n    } else {\n        suggestions.value = []\n    }\n}\n\nconst highlightNext = (event) => {\n    if (highlightedIndex.value === -1) {\n        return;\n    }\n    event.preventDefault();\n    if (highlightedIndex.value < suggestions.value.length - 1) {\n        highlightedIndex.value++;\n    } else if (suggestions.value.length > 0) {\n        highlightedIndex.value = 0;\n    }\n};\n\nconst highlightPrev = (event) => {\n    if (highlightedIndex.value === -1) {\n        return;\n    }\n    event.preventDefault();\n    if (highlightedIndex.value > 0) {\n        highlightedIndex.value--;\n    } else if (suggestions.value.length > 0) {\n        highlightedIndex.value = suggestions.value.length - 1;\n    }\n};\n\nconst handleEnter = (event) => {\n    if (suggestions.value.length > 0 && highlightedIndex.value >= 0) {\n        event.preventDefault();\n        selectMention();\n    }\n};\n\nconst selectMention = () => {\n    if (highlightedIndex.value >= 0 && highlightedIndex.value < suggestions.value.length) {\n        selectSuggestion(suggestions.value[highlightedIndex.value]);\n    }\n};\n\nconst suggestionClass = (index) => {\n    if (index === highlightedIndex.value) {\n        return \"p-1 bg-primary text-primary-content\"\n    }\n    return 'p-1'\n}\n\nconst hideSuggestions = () => {\n    suggestions.value = [];\n    highlightedIndex.value = -1;\n};\n\nconst selectSuggestion = (suggestion) => {\n    const cursorPos = textarea.value.selectionStart;\n    const textBeforeCursor = props.attribute[props.property].substring(0, cursorPos);\n    const mentionMatch = textBeforeCursor.match(/@(\\w{3,})$/);\n    if (mentionMatch) {\n        const mentionText = `@${mentionMatch[1]}`;\n        const start = textBeforeCursor.lastIndexOf(mentionText);\n\n        const replace = `[${suggestion.model_type}:${suggestion.id}] `\n        props.attribute[props.property] = props.attribute[props.property].replace(mentionText, replace);\n        suggestions.value = [];\n        highlightedIndex.value = -1;\n\n        nextTick(() => {\n            textarea.value.setSelectionRange(start + replace.length, start + replace.length);\n            textarea.value.focus();\n        });\n    }\n};\n\nconst onBlur = () => {\n    emit('field-blur');\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/components/connections/Web.vue",
    "content": "<template>\n    <!-- Back button (top-left floating) -->\n\n\n    <!-- Bottom toolbar -->\n    <div v-if=\"ready\" class=\"fixed bottom-4 left-1/2 -translate-x-1/2 z-700 flex items-center gap-1.5 bg-base-100/80 backdrop-blur rounded-xl shadow-lg px-2 py-1.5\">\n        <a v-if=\"ready\" :href=\"urls.back\" :title=\"trans('back')\" class=\"btn2 btn-ghost\" tabindex=\"0\">\n            <i class=\"fa-regular fa-home\" aria-hidden=\"true\"></i>\n        </a>\n\n        <!-- Zone 1: Plus FAB -->\n        <div v-if=\"props.creator\" class=\"relative\">\n            <button @click.prevent=\"fabDropdown = !fabDropdown\" class=\"btn2 btn-primary\" :title=\"trans('create')\">\n                <i class=\"fa-regular fa-plus\" aria-hidden=\"true\"></i>\n            </button>\n            <div\n                v-if=\"fabDropdown\"\n                v-click-outside=\"() => fabDropdown = false\"\n                class=\"absolute bottom-full mb-2 left-0 flex flex-col gap-1 bg-base-100 shadow-lg p-2 rounded-lg z-10 min-w-max\"\n                role=\"menu\"\n            >\n                <a href=\"#\" @click.prevent=\"fabDropdown = false; openQQ()\" class=\"flex items-center gap-2 px-3 py-1.5 rounded hover:bg-base-200 cursor-pointer whitespace-nowrap\">\n                    <i class=\"fa-regular fa-bolt w-5\" aria-hidden=\"true\"></i>\n                    <span v-html=\"trans('create')\"></span>\n                </a>\n                <a href=\"#\" @click.prevent=\"fabDropdown = false; openCreate()\" class=\"flex items-center gap-2 px-3 py-1.5 rounded hover:bg-base-200 cursor-pointer whitespace-nowrap\">\n                    <i class=\"fa-regular fa-link w-5\" aria-hidden=\"true\"></i>\n                    <span v-html=\"trans('add')\"></span>\n                </a>\n            </div>\n        </div>\n\n        <!-- Zone 2: View controls -->\n        <button @click.prevent=\"zoomToFit()\" class=\"btn2 btn-ghost rounded-lg\" :title=\"trans('zoom-fit')\">\n            <i class=\"fa-regular fa-arrows-maximize\" aria-hidden=\"true\"></i>\n        </button>\n        <button @click.prevent=\"resetLayout()\" class=\"btn2 btn-ghost\" :title=\"trans('reset-layout')\">\n            <i class=\"fa-regular fa-grid-round\" aria-hidden=\"true\"></i>\n        </button>\n\n        <div class=\"w-px h-6 bg-base-content/20\"></div>\n\n        <!-- Zone 3: Export -->\n        <div class=\"relative\">\n            <button @click.prevent=\"downloadDropdown = !downloadDropdown\" class=\"btn2 btn-ghost\" :title=\"trans('download')\">\n                <i class=\"fa-regular fa-download\" aria-hidden=\"true\"></i>\n            </button>\n            <div\n                v-if=\"downloadDropdown\"\n                v-click-outside=\"() => downloadDropdown = false\"\n                class=\"absolute bottom-full mb-2 right-0 flex flex-col gap-1 bg-base-100 shadow-lg p-2 rounded-2xl z-10 min-w-max\"\n                role=\"menu\"\n            >\n                <a @click.prevent=\"downloadPng()\" class=\"flex items-center gap-2 px-3 py-1.5 rounded-xl hover:bg-base-200 cursor-pointer whitespace-nowrap\">\n                    <i class=\"fa-regular fa-image w-5\" aria-hidden=\"true\"></i>\n                    <span v-html=\"trans('download-png')\"></span>\n                </a>\n                <a @click.prevent=\"downloadPdf()\" class=\"flex items-center gap-2 px-3 py-1.5 rounded-xl hover:bg-base-200 cursor-pointer whitespace-nowrap\">\n                    <i class=\"fa-regular fa-file-pdf w-5\" aria-hidden=\"true\"></i>\n                    <span v-html=\"trans('download-pdf')\"></span>\n                </a>\n            </div>\n        </div>\n    </div>\n\n    <div v-if=\"!ready\" class=\"w-full h-screen flex items-center justify-center text-4xl gap-2 absolute bg-base-100 transition-all duration-300 top-0 bottom-0 left-0 right-0 z-900\">\n        <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n        <span v-if=\"loading\">Loading</span>\n        <span v-else-if=\"parsing\">Parsing web</span>\n        <span v-else-if=\"drawing\">Drawing web</span>\n    </div>\n    <div ref=\"cyContainer\" class=\"min-h-screen text-base-content cy-map bg-base-100\">\n    </div>\n\n</template>\n<style>\n@import 'cytoscape-panzoom/cytoscape.js-panzoom.css';\n.cy-panzoom {\n    z-index: 800;\n    left: unset;\n    right: 3.7rem;\n    top: 0.7rem;\n}\n</style>\n\n<script setup lang=\"ts\">\n\nimport { ref, onMounted, onBeforeUnmount} from 'vue';\nimport tippy, { Instance, ReferenceElement } from 'tippy.js'\nimport { cssVariable } from '../../utility/colours';\n\n\nconst props = defineProps<{\n    api: String,\n    premium: Boolean,\n    creator: Boolean,\n}>()\n\nconst ready = ref(false)\nconst loading = ref(false)\nconst parsing = ref(false)\nconst drawing = ref(false)\nconst elements = ref([])\nconst cy = ref(null)\nconst currentEntity = ref(null)\nconst relation = ref(null)\nconst cyContainer = ref()\nconst entityTooltips = ref(Array)\nlet nodeTippy: Instance | null = null\nconst downloadDropdown = ref(false)\nconst fabDropdown = ref(false)\nconst i18n = ref(null)\nconst urls = ref(null)\n\nonMounted(async () => {\n    await initCytoscape()\n    await loadData()\n    await addToCy()\n    ready.value = true\n\n    // Attach listener for *capturing* submit events\n    document.addEventListener('submit', handleDialogFormSubmit, true)\n\n    window.initTooltips();\n\n    if (!props.premium) {\n        window.openDialog('web-premium')\n    }\n})\n\nonBeforeUnmount(() => {\n    if (cy.value) {\n        cy.value.destroy();\n        cy.value = null;\n    }\n\n    document.removeEventListener('submit', handleDialogFormSubmit, true)\n})\n\nconst parseData = (data) => {\n    parsing.value = true\n\n    Object.values(data.entities).forEach((entity: any) => {\n        addEntity(entity)\n    });\n    data.nodes.forEach((node: any) => {\n        addNode(node)\n    })\n    i18n.value = data.i18n\n    urls.value = data.urls\n\n    parsing.value = false\n}\n\nconst addEntity = (entity) => {\n    // Already loaded entity\n    if (elements.value.find(e => e.data.id == entity.id)) {\n        return;\n    }\n\n    const element = {\n        group: 'nodes',\n        data: {\n            id: entity.id,\n            name: entity.name,\n            image: entity.image,\n            link: entity.link,\n            tooltip: entity.tooltip,\n        }\n    };\n    elements.value.push(element);\n\n    if (ready.value && cy.value) {\n        cy.value.add(element);\n    }\n}\n\nconst addNode = (node) => {\n    let element = {\n        group: 'edges',\n        data: {\n            id: node.id,\n            source: node.source,\n            target: node.target,\n            name: node.text,\n            colour: node.colour,\n            attitude: node.attitude,\n            shape: node.shape,\n            url: node.url,\n        }\n    };\n    // if the relation does not have a colour, use the default\n    if (!element.data.colour) {\n        element.data.colour = '#777777';\n    }\n    if (!element.data.attitude) {\n        element.data.attitude = 0;\n    }\n    element.data.attitude = getWidthFromAttitude(element.data.attitude);\n    elements.value.push(element);\n}\n\n\nconst getWidthFromAttitude = (attitude: any) => {\n    return (((attitude + 100) / 100) * 2) + 2;\n}\n\nconst initCytoscape = async () => {\n\n    const { default: cytoscape } = await import('cytoscape')\n    const { default: coseBilkent } = await import('cytoscape-cose-bilkent')\n    const { default: panzoom } = await import('cytoscape-panzoom')\n\n\n    // Libraries\n    cytoscape.use( coseBilkent )\n    cytoscape.use( panzoom )\n\n    const container = cyContainer.value\n    const parent = container.parentNode as HTMLElement\n    const containerStyles = window.getComputedStyle(container)\n    const parentStyles = window.getComputedStyle(parent)\n\n    cy.value = cytoscape({\n        container: cyContainer.value,\n        style: cytoscape.stylesheet()\n            .selector('node')\n            .css({\n                'label': 'data(name)',\n                'background-image': 'data(image)',\n                'height': 80,\n                'width': 80,\n                'background-fit': 'cover',\n                'border-color': parentStyles.color,\n                'border-width': 3,\n                'color': containerStyles.color,\n                'text-wrap': 'wrap',\n                'text-margin-y': '-8px',\n                'text-background-opacity': 1,\n                'text-background-color': containerStyles.backgroundColor,\n                'text-border-color': containerStyles.backgroundColor,\n                'text-border-width': 3,\n                'text-border-opacity': 1\n            })\n            .selector('edge')\n            .css({\n                'line-color': 'data(colour)',\n                'curve-style': 'bezier',\n                'control-point-step-size': 40,\n                'target-arrow-shape': 'data(shape)',\n                'target-arrow-color': 'data(colour)',\n                'width': 'data(attitude)',\n                'text-background-opacity': 1,\n                'color': containerStyles.color,\n                'text-background-color': containerStyles.backgroundColor,\n                'text-border-color': containerStyles.backgroundColor,\n                'text-border-width': 3,\n                'text-border-opacity': 1\n            }),\n    });\n\n    // enable pan/zoom buttons\n    const minZoom = 0.1\n    const maxZoom = 1.2\n    cy.value.panzoom({\n        maxZoom: maxZoom,\n        minZoom: minZoom,\n    });\n    cy.value.minZoom(minZoom);\n    cy.value.maxZoom(maxZoom);\n}\n\nconst loadData = async () => {\n    loading.value = true\n    const res = await axios.get(props.api)\n    loading.value = false;\n\n    const data = res.data;\n    parseData(data);\n\n}\nconst addToCy = async () => {\n    if (!cy.value) return\n\n    drawing.value = true;\n    drawing.value = true;\n\n    // add all of the elements (nodes and edges) to the graph. Remove orphans to keep the graph clean.\n    cy.value.add(elements.value);\n    cy.value.nodes().forEach(function(node) {\n        if (node.connectedEdges().length == 0) {\n            addEntityToOrphans(node);\n        }\n    });\n\n    // organize and display the elements\n    runLayout();\n\n    // add user input events to the elements\n    addListeners();\n\n    // wait until images load to display graph\n    await finishDrawing();\n}\n\nconst addEntityToOrphans = (node: any) => {\n    node.hide();\n}\n\nconst runLayout = () => {\n    // use an automatic layout. fcose is decently fast and looks nice\n    const layout = cy.value.elements().layout({\n        name: 'cose-bilkent',\n        idealEdgeLength: 130,\n        nodeDimensionsIncludeLabels: true,\n    });\n    layout.run();\n}\n\nconst addListeners = () => {\n    cy.value.on('tap', 'node', function (evt) {\n        const node = evt.target\n        showNodeTooltip(node)\n    });\n\n    cy.value.nodes().on('mouseover', function(e) {\n        currentEntity.value = cy.value.getElementById(e.target.id());\n        currentEntity.value.addClass('node-hover');\n    });\n\n    cy.value.nodes().on('mouseout', function() {\n        if (!currentEntity.value) return;\n        currentEntity.value.removeClass('node-hover');\n        currentEntity.value = null;\n    });\n\n    // Double-click on an edge to edit it\n    cy.value.on('tap', 'edge', function (e) {\n        let editUrl = e.target.data().url;\n        if (!editUrl) {\n            return;\n        }\n\n        window.openDialog('primary-dialog', editUrl);\n    });\n\n    cy.value.edges().on('mouseover', function(e) {\n        relation.value = cy.value.getElementById(e.target.id());\n        relation.value.style('label', relation.value._private.data.name);\n        relation.value.style('overlay-opacity', 0.1);\n    });\n\n    cy.value.edges().on('mouseout', function() {\n        if (!relation.value) return;\n        relation.value.style('label', '');\n        relation.value.style('overlay-opacity', 0);\n        relation.value = null;\n    });\n}\n\nconst finishDrawing = async () => {\n    let backgrounding = true;\n    while (backgrounding) {\n        if (cy.value.nodes(':backgrounding').length == 0) {\n            backgrounding = false;\n        } else {\n            await sleep(200);\n        }\n    }\n\n    drawing.value = false;\n}\n\nconst showNodeTooltip = (node: any) => {\n    const cyInstance = cy.value;\n    if (!cyInstance) return;\n\n    const container = cyInstance.container();\n    if (!container) return;\n\n    // Position of the node in rendered pixel coordinates\n    const pos = node.renderedPosition();\n    const rect = container.getBoundingClientRect();\n\n    // Function returning the virtual rect for this tooltip\n    const getReferenceClientRect = () => {\n        const x = rect.left + pos.x;\n        const y = rect.top + pos.y;\n\n        return {\n            x,\n            y,\n            left: x,\n            top: y,\n            right: x,\n            bottom: y,\n            width: 0,\n            height: 0,\n        } as DOMRect;\n    };\n\n    // Kill any previous tooltip\n    if (nodeTippy) {\n        nodeTippy.destroy();\n        nodeTippy = null;\n    }\n\n    nodeTippy = tippy(document.body, {\n        trigger: 'manual',\n        // This is the key bit for virtual positioning in Tippy v6+\n        getReferenceClientRect,\n\n        theme: 'entity-tooltip',\n        placement: 'bottom',\n        hideOnClick: true,\n        allowHTML: true,\n        interactive: true,\n        content: 'Loading...',\n        appendTo: () => document.body, // keep it simple & safe\n        onShow(instance) {\n            const id = String(node.id());\n            if (id in entityTooltips.value) {\n                instance.setContent(entityTooltips.value[id]);\n                return;\n            }\n            axios.get(node.data().tooltip)\n                .then((res) => {\n                    const html = res.data;\n                    instance.setContent(html);\n                    entityTooltips.value[id] = html;\n                })\n                .catch((error) => {\n                        instance.setContent(`Failed loading tooltip. ${error}`);\n                    }\n                );\n        },\n    });\n\n    nodeTippy.show();\n};\n\nconst handleDialogFormSubmit = async (event: SubmitEvent) => {\n    const form = event.target as HTMLFormElement | null\n    if (!form) return\n\n    event.preventDefault()\n\n    try {\n        const method = (form.method || 'POST').toUpperCase()\n        const url = form.action\n        const formData = new FormData(form)\n\n        const response = await axios({\n            url,\n            method,\n            data: formData,\n            headers: {\n                'X-Requested-With': 'XMLHttpRequest',\n            },\n        })\n\n        if (response.data.created) {\n            handleRelationCreate(response.data)\n        } else {\n            handleRelationUpdate(response.data)\n        }\n\n        if (window.closeDialog) {\n            window.closeDialog('primary-dialog')\n        }\n    } catch (error) {\n        if (error.response && error.response.status === 422 && error.response.data?.errors) {\n            showDialogErrors(form, error.response.data.errors)\n        } else {\n            console.error(error)\n        }\n    }\n}\n\nconst showDialogErrors = (form: HTMLFormElement, errors: Record<string, string[]>) => {\n    const article = form.closest('article')\n    if (!article) return\n\n    // Remove any previous error alert\n    article.querySelector('.alert.alert-error.js-web-errors')?.remove()\n\n    const messages = Object.values(errors).flat()\n    const alert = document.createElement('div')\n    alert.className = 'alert alert-error border-0 rounded-lg p-4 flex shadow-xs gap-2 items-center js-web-errors'\n    const list = document.createElement('ul')\n    messages.forEach((msg) => {\n        const li = document.createElement('li')\n        li.textContent = msg\n        list.appendChild(li)\n    })\n    alert.appendChild(list)\n    article.prepend(alert)\n}\n\nconst handleRelationUpdate = async (data) => {\n    if (!cy.value || !data || !data.id) return\n\n\n    // however you address edges; for example by some id\n    const edge = cy.value.edges().filter(`[id = \"${data.id}\"]`)\n\n    if (!edge || edge.length === 0) {\n        console.warn('Updated unknown edge', data.id);\n        return\n    }\n\n    if (data.deleted) {\n        edge.remove();\n    }\n\n    // Reuse your existing logic for width\n    const width = getWidthFromAttitude(data.attitude ?? 0)\n\n    // Cytoscape edges are immutable (source/target), so if the target changes, we need to re-create the edge\n    if (edge.data().target != data.target.id) {\n        // Maybe import the new entity\n        addEntity(data.target);\n        await finishDrawing();\n\n        const newEdge = {\n            group: 'edges',\n            data: {\n                ...edge.data(),\n                name: data.text,\n                target: data.target.id,\n                colour: data.colour || '#777777',\n                attitude: width,\n            }\n        };\n        edge.remove();\n        cy.value.add(newEdge);\n    } else {\n        edge.data({\n            ...edge.data(),\n            name: data.text,\n            colour: data.colour || '#777777',\n            attitude: width,\n        })\n    }\n}\n\nconst handleRelationCreate = async (data) => {\n    if (!cy.value || !data) return\n\n    // Add both source and target entities (they may already exist)\n    addEntity(data.target);\n    if (data.source) {\n        const sourceNode = cy.value.getElementById(data.source);\n        if (sourceNode.length === 0) {\n            // Source entity not in graph yet, reload to get it\n            await reloadData();\n            return;\n        }\n    }\n    await finishDrawing();\n\n    const width = getWidthFromAttitude(data.attitude ?? 0)\n    const edge = {\n        group: 'edges',\n        data: {\n            id: data.id,\n            source: data.source,\n            target: data.target.id,\n            name: data.text,\n            colour: data.colour || '#777777',\n            attitude: width,\n            shape: data.shape || 'triangle',\n            url: data.url,\n        }\n    };\n    cy.value.add(edge);\n\n    // Show the target node if it was hidden as an orphan\n    const targetNode = cy.value.getElementById(data.target.id);\n    if (targetNode.length > 0 && targetNode.hidden()) {\n        targetNode.show();\n    }\n\n    runLayout();\n}\n\nconst reloadData = async () => {\n    elements.value = [];\n    await loadData();\n    cy.value.elements().remove();\n    cy.value.add(elements.value);\n    cy.value.nodes().forEach(function(node) {\n        if (node.connectedEdges().length == 0) {\n            addEntityToOrphans(node);\n        }\n    });\n    runLayout();\n    addListeners();\n    await finishDrawing();\n}\n\nconst openCreate = () => {\n    window.openDialog(\"primary-dialog\", urls.value.create)\n}\n\nconst openQQ = () => {\n    window.openDialog(\"primary-dialog\", urls.value.creator)\n}\n\nconst zoomToFit = () => {\n    if (!cy.value) return\n    cy.value.fit(undefined, 30)\n}\n\nconst resetLayout = () => {\n    if (!cy.value) return\n    runLayout()\n}\n\nconst trans = (key: string) => {\n    return i18n.value[key] || key\n}\n\nconst downloadPng = () => {\n    downloadDropdown.value = false\n    if (!cy.value) {\n        return\n    }\n    const options = {\n        full: true,\n        bg: cssVariable('--b1'),\n    };\n    const base64 = cy.value.png(options);\n\n    const link = document.createElement('a');\n    link.href = base64;\n    link.download = `${trans('campaign')}-web-${Date.now()}.png`;\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n}\n\nconst downloadPdf = async () => {\n    downloadDropdown.value = false\n    if (!cy.value) {\n        return\n    }\n\n    const { jsPDF } = await import('jspdf')\n\n    const base64 = cy.value.png({\n        full: true,\n        bg: cssVariable('--b1'),\n    });\n\n    const img = new Image();\n    img.src = base64;\n    await new Promise((resolve) => { img.onload = resolve; });\n\n    const landscape = img.width > img.height;\n    const doc = new jsPDF({\n        orientation: landscape ? 'landscape' : 'portrait',\n        unit: 'px',\n        format: [img.width, img.height],\n    });\n\n    doc.addImage(base64, 'PNG', 0, 0, img.width, img.height);\n    doc.save(`${trans('campaign')}-web-${Date.now()}.pdf`);\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/components/conversation/Conversation.vue",
    "content": "<template>\n  <div class=\"viewport box-conversation p-2 flex flex-col gap-2\">\n    <div class=\"flex flex-col gap-2 box-comments overflow-auto\" ref=\"messageBox\">\n      <div class=\"load-more cursor-pointer text-center hover:text-primary\" v-if=\"previous && !loadingPrevious\" v-on:click=\"getPrevious\">\n        {{ translate('load_previous') }}\n      </div>\n      <div class=\"load-more text-center text-2xl\" v-if=\"loadingPrevious || initializing\">\n        <i class=\"fa-solid fa-spin fa-spinner\" aria-label=\"Loading\"></i>\n      </div>\n      <Message\n          v-for=\"message in messages\"\n          :key=\"message.id\"\n          :message=\"message\"\n          :trans=\"json_trans\"\n          @delete_message=\"deletedMessage\"\n          @edit_message=\"editMessage\"\n\n      >\n      </Message>\n\n      <div v-if=\"sending\" class=\"text-center\">\n        <i class=\"fa-solid fa-spin fa-spinner\"></i>\n      </div>\n    </div>\n\n    <Form\n        :api=\"send\"\n        :target=\"target\"\n        :targets=\"targets\"\n        :disabled=\"disabled\"\n        :trans=\"json_trans\"\n        :current_message=\"currentMessage\"\n        @sending_message=\"sendingMessage\"\n        @edited_message=\"editedMessage\"\n        @sent_message=\"sentMessage\"\n    >\n    </Form>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Message from './Message.vue';\nimport Form from './Form.vue';\nimport {onMounted, ref} from \"vue\";\n/**\n * This is just a placeholder that builds the convo module.\n * All the juicy stuff is in Messages\n */\n\nconst props = defineProps<{\n  id: undefined,\n  send: undefined,\n  target: undefined,\n  api: undefined,\n  targets: undefined,\n  trans: undefined,\n  disabled: false\n}>()\n\nconst json_trans = ref()\n\nconst messages = ref([])\n// Show a small spinner below the messages\nconst sending = ref(false)\n// The highest message id\nconst newest = ref(null)\n// The lowest message id\nconst previous = ref(false)\n// Show the \"load previous\" button above messages if there are previous entries on the server\nconst loadingPrevious = ref(false)\n// Show a spinner while getting the first messages\nconst initializing = ref(true)\n\nconst messageBox = ref(null)\nconst currentMessage = ref(null)\n\n\nconst getMessages = () => {\n  axios.get(props.api, {params: {newest: newest.value}}).then(response => {\n    sending.value = false;\n    messages.value.push(...response.data.data.messages);\n    previous.value = response.data.data.previous;\n    initializing.value = false;\n    scrollToBottom();\n  });\n}\n/**\n * When a new message comes, we want to scroll to the bottom of the messages\n */\nconst scrollToBottom = () => {\n  setTimeout(() => {\n    messageBox.value.scrollTop = messageBox.value.scrollHeight;\n  }, 50);\n\n  if(messages.value.length > 0)\n    newest.value = messages.value[messages.value.length - 1].id;\n  else\n    newest.value = undefined;\n}\n/**\n * Load previous messages that are on the server but not in memory.\n * This might need some optimizing in the future for large datasets.\n */\nconst getPrevious = () => {\n  loadingPrevious.value = true;\n  axios.get(props.api, {params: {oldest: messages.value[0].id}}).then(response => {\n    messages.value.unshift(...response.data.data.messages);\n    previous.value = response.data.data.previous;\n    loadingPrevious.value = false;\n  });\n}\n/**\n * Delete a message from the dataset. This sends a delete request to the api and\n * splices the message out of the dataset.\n * @param message\n */\nconst deleteMessage = (message) => {\n  axios.delete(message.delete_url)\n      .then(() => {\n        const index = messages.value.findIndex(msg => msg.id === message.id);\n        messages.value.splice(index, 1);\n      });\n}\nconst translate = (key) => {\n  return json_trans.value[key] ?? 'unknown'\n}\n\nconst sendingMessage = (message) => {\n  sending.value = true\n}\nconst editMessage = (message) => {\n  currentMessage.value = message\n}\nconst editedMessage = (message) => {\n  const index = messages.value.findIndex(msg => msg.id === message.id)\n  messages.value[index] = message\n}\nconst sentMessage = (message) => {\n  currentMessage.value = null\n  getMessages()\n}\nconst deletedMessage = (message) => {\n    deleteMessage(message)\n}\n\n\nonMounted(() => {\n  json_trans.value = JSON.parse(props.trans)\n  getMessages()\n})\n</script>\n"
  },
  {
    "path": "resources/js/components/conversation/Form.vue",
    "content": "<template>\n    <div :class=\"boxClass()\" v-if=\"commentable\">\n        <div class=\"flex items-center gap-2\">\n            <div class=\"max-w-xs\" v-if=\"targetCharacter\">\n                <select class=\"w-full\" v-model=\"character_id\">\n                    <option v-for=\"(name, key) in targets\" :value=\"key\" :key=\"key\">\n                        {{ name }}\n                    </option>\n                </select>\n            </div>\n            <div class=\"field grow\">\n                <input\n                        type=\"text\"\n                        id=\"message\"\n                        maxlength=\"1000\"\n                        autocomplete=\"off\"\n                        class=\"w-full\"\n                        @keydown=\"typing\"\n                        v-model=\"body\"\n                        :placeholder=\" disabled ? translate('is_closed') : ''\"\n                        :disabled=\"(inputFormDisabled || disabled)\"\n                />\n            </div>\n        </div>\n    </div>\n</template>\n\n<script>\n  /**\n   * The form to send messages to a conversation.\n   * Messy party: we can have a list of characters that the user can edit, or send as the current user.\n   */\n    export default {\n        props: {\n            target: undefined,\n            api: undefined,\n            targets: undefined,\n            disabled: {\n                type: Boolean\n            },\n            current_message: {\n              type: Object,\n              default: null\n            },\n            trans: undefined\n        },\n        emits: [\n            'sending_message',\n            'edited_message',\n            'sent_message'\n        ],\n\n        data() {\n            return {\n                body: null,\n                sending: false,\n                character_id: null,\n                message_id: null,\n                edit_message: null\n            }\n        },\n        methods: {\n            /**\n             * We don't want a \"send\" button, so listen to the enter key. No multi-line support here.\n             * @param e\n             */\n            typing(e) {\n                if (e.keyCode === 13 && !e.shiftKey) {\n                    e.preventDefault();\n                    this.sendMessage();\n                }\n            },\n            editMessage(message) {\n                this.message_id = message.id;\n                this.edit_message = message;\n                this.body = message.message;\n                this.character_id = message.from_id;\n                document.getElementById(\"message\").focus();\n            },\n            /**\n             * Sending a message. This might be better off in Messages to keep all\n             * api requests in a single place.\n             */\n            sendMessage() {\n                if (!this.body || this.body.trim() === '') {\n                    return;\n                }\n                if (this.targetCharacter && this.character_id === null) {\n                    return;\n                }\n                this.sending = true;\n                this.$emit('sending_message');\n\n                let url = this.api;\n                let data = {\n                    message: this.body.trim(),\n                };\n                if (this.targetCharacter) {\n                    data.character_id = this.character_id;\n                }\n                if (this.message_id) {\n                    url += '/' + this.message_id;\n\n                    axios.put(url, data).then((res) => {\n                        this.$emit('edited_message', res.data.data);\n                        this.messageHandler();\n                    }).catch(() => {\n                        this.sending = false;\n                    });\n                } else {\n                    axios.post(url, data).then(() => {\n                        this.messageHandler();\n                    }).catch(() => {\n                        this.sending = false;\n                    });\n                }\n            },\n            messageHandler() {\n                this.sending = false;\n                this.body = null;\n                this.message_id = null;\n                this.$emit('sent_message');\n            },\n\n            translate(key) {\n                return this.json_trans[key] ?? 'unknown';\n            },\n            boxClass() {\n              let bg = 'bg-base-100';\n              if (this.current_message) {\n                bg = 'bg-accent';\n              }\n              return 'rounded p-2 ' + bg;\n            }\n        },\n\n        computed: {\n            targetCharacter: function() {\n                return this.target === 'character';\n            },\n            inputFormDisabled: function() {\n                return this.sending;\n            },\n            commentable: function() {\n                if (this.targetCharacter) {\n                    return this.targets !== null;\n                }\n                return true;\n            }\n        },\n\n        watch: {\n          current_message: {\n              handler(newValue, oldValue) {\n                if (newValue !== oldValue && newValue) {\n                  this.editMessage(newValue)\n                }\n              }\n            }\n        }\n    }\n</script>\n"
  },
  {
    "path": "resources/js/components/conversation/Message.vue",
    "content": "<template>\n    <div v-bind:class=\"boxClasses(message)\">\n        <div class=\"flex items-center gap-1\" v-if=\"!message.group\">\n            <div class=\"message-author\">\n                <strong class=\"user\" v-if=\"isUser\">{{ message.user }}</strong>\n                <strong class=\"character\" v-else-if=\"isCharacter\">\n                    <span>{{ message.character }}</span>\n                </strong>\n                <strong class=\"unknown\" v-else>\n                    {{ translate('user_unknown') }}\n                </strong>\n            </div>\n\n            <div class=\"grow\">\n                <span class=\"text-xs text-neutral-content\" v-if=\"!message.group\">\n                    {{ message.created_at }}\n                </span>\n            </div>\n\n            <div class=\"message-options\" v-if=\"message.can_delete\">\n                <div class=\"\" v-click-outside=\"onClickOutside\">\n                    <a v-on:click=\"openDropdown()\" role=\"button\" v-if=\"!this.openedDropdown\">\n                        <i class=\"fa-solid fa-caret-down\" aria-hidden=\"true\" />\n                    </a>\n                    <div class=\"flex gap-1\" v-else >\n                        <a class=\"btn2 btn-xs btn-default\" v-on:click=\"editMessage(message)\">\n                          {{ translate('edit') }}\n                        </a>\n                        <a class=\"btn2 btn-xs btn-error\" v-on:click=\"deleteMessage(message)\">\n                          {{ translate('remove') }}\n                        </a>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n\n        <div class=\"comment-text\">\n            {{ message.message }}\n            <span class=\"text-xs text-neutral-content italic float-right\" v-if=\"message.is_updated\" v-bind:title=\"message.updated_at\">\n              {{ translate('is_updated') }}\n            </span>\n        </div>\n    </div>\n</template>\n\n<script>\n    import vClickOutside from \"click-outside-vue3\"\n    /**\n     * Don't do any of the heavy lifting here, just send some events to Messages for figuring stuff out\n     */\n    export default {\n        directives: {\n            clickOutside: vClickOutside.directive\n        },\n        props: [\n            'message',\n            'trans',\n        ],\n        data() {\n            return {\n                openedDropdown: false\n            }\n        },\n        computed: {\n            isUser: function() {\n                return this.message.user !== null;\n            },\n            isCharacter: function() {\n                return this.message.character !== null;\n            },\n        },\n      emits: [\n          'delete_message',\n          'edit_message',\n      ],\n\n        methods: {\n            deleteMessage: function(message) {\n                this.$emit('delete_message', message);\n              this.onClickOutside();\n            },\n            editMessage: function(message) {\n                this.$emit('edit_message', message);\n                this.onClickOutside();\n            },\n            translate(key) {\n                return this.trans[key] ?? 'unknown';\n            },\n            dropdownClass() {\n                return this.openedDropdown ? 'open dropdown relative' : 'dropdown relative';\n            },\n            openDropdown() {\n                return this.openedDropdown = true;\n            },\n            boxClasses: function (message) {\n                let classes = 'box-comment bg-base-100 p-2 flex flex-col gap-1';\n                classes += ' message-author-' + message.from_id;\n                classes += ' message-real-author-' + message.created_by;\n\n                if (message.group) {\n                    classes += ' message-followup';\n                } else {\n                    classes += ' message-first rounded-t-lg'\n                }\n                return classes;\n            },\n            onClickOutside (event) {\n                this.openedDropdown = false;\n            },\n        },\n    }\n</script>\n"
  },
  {
    "path": "resources/js/components/conversation/Messages.vue",
    "content": "<template>\n\n</template>\n\n<script>\n    /**\n     * The core of the convo module. This is where the magic happens.\n     * Events are fired from Message (delete) and Form (sending)\n     */\n    export default {\n        props: [\n            'api',\n            'trans',\n            'sending_message',\n            'edited_message',\n            'send_message'\n        ],\n        components: {\n            Message,\n        },\n        data() {\n            return {\n                // Our messages to be displayed\n\n            }\n        },\n        methods: {\n            /**\n             * Our main loop to get messages.\n             * Using newest we just get what has been added since\n             */\n\n        },\n        mounted() {\n            this.getMessages();\n        }\n    }\n</script>\n"
  },
  {
    "path": "resources/js/components/delete-confirm.js",
    "content": "export default function deleteConfirm() {\n    // Submit modal form\n    const elements = document.querySelectorAll('.delete-confirm-submit');\n    elements.forEach(btn => {\n        if(btn.dataset.deleteInit === '1') {\n            return;\n        }\n        btn.dataset.deleteInit = '1';\n        btn.addEventListener('click', function (e) {\n            let target = this.dataset.target;\n            //console.log('Submit delete confirmation', target);\n            if (target) {\n                document.querySelector('#' + target + ' input[name=remove_mirrored]').value =\n                document.getElementById('delete-confirm-mirror-checkbox').checked ? 1 : 0;\n                document.getElementById(target).requestSubmit();\n            } else {\n                document.getElementById('delete-confirm-form').requestSubmit();\n            }\n        });\n    });\n}\n"
  },
  {
    "path": "resources/js/components/families/ChildrenLine.vue",
    "content": "<template>\n    <div class=\"family-tree-line family-tree-child-line family-tree-line-vertical absolute\" v-bind:style=\"vertical()\" v-bind:data-row=\"row\" v-bind:data-col=\"column\"></div>\n    <div class=\"family-tree-line family-tree-child-line family-tree-line-horizontal absolute\" v-bind:style=\"horizontal()\" v-bind:data-ori-x=\"originX\" v-bind:data-tar-x=\"targetX\" v-bind:data-row=\"row\" v-bind:data-col=\"column\"></div>\n</template>\n\n<script>\n\nexport default {\n    props: {\n        node: undefined,\n        index: 0,\n        originX: 0,\n        originY: 0,\n        targetX: 0,\n        column: 0,\n        row: 0,\n    },\n\n    data() {\n        return {\n            height: '15',\n            left: 100,\n        }\n    },\n\n    methods: {\n        vertical() {\n            let css = 'width: 1px; height: ' + this.height + 'px;' +\n                'left: ' + (this.targetX + this.left) + 'px; ' +\n                'top: ' + (this.originY - 15) + 'px;';\n                if (this.node.colour) {\n                    css += ' background-color:' + this.node.colour + ';';\n                }\n            return css;\n        },\n        horizontal() {\n            // Calc width based on target to source\n            let width = 110;\n            let left = this.targetX - 10;\n\n            // Source if further along, we need to \"go back\" a bit\n            if (this.originX > this.targetX) {\n                left = this.originX - 120;\n            }\n\n            // If we're further than 1 away\n            let diff = this.targetX - this.originX;\n            if (diff >= (this.entityWidth + 20)) {\n                //width = 300;\n                width = diff + ((this.entityWidth + 20) / 2);\n                left = this.originX - 10; // place it at the beginning\n            }\n\n            return 'height: 1px;' +\n                'width: ' + (width) + 'px;' +\n                'left: ' + left + 'px; ' +\n                'top: ' + (this.originY - 15) + 'px; ' +\n                'background-color:' + this.node.colour + ';'\n            ;\n        },\n    },\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/families/FamilyChildren.vue",
    "content": "<template>\n\n    <FamilyParentChildrenLine\n        v-for=\"(child, i) in children\"\n        :node=\"child\"\n        :sourceX=\"getLineX(index)\"\n        :sourceY=\"drawY\"\n        :index=\"index\"\n        :column=\"column\"\n        :row=\"row\"\n    >\n    </FamilyParentChildrenLine>\n\n    <FamilyNode\n        v-for=\"(child, i) in children\"\n        :node=\"child\"\n        :entities=\"entities\"\n\n        :sourceX=\"this.startX\"\n        :sourceY=\"this.startY\"\n        :drawX=\"getDrawX(i)\"\n        :drawY=\"this.drawY\"\n\n        :sourceColumn=\"startColumn\"\n        :sourceRow=\"startRow\"\n        :column=\"getColumn(i)\"\n        :row=\"row\"\n\n        :drawLine=\"true\"\n        :lineX=\"getLineX(index)\"\n        :isEditing=\"this.isEditing\"\n        :offset=\"getNodeSize(i)\"\n    >\n    </FamilyNode>\n</template>\n\n<script>\n\nexport default {\n    props: {\n        children: {\n            type: Array\n        },\n        entities: undefined,\n\n        sourceX: 0,\n        sourceY: 0,\n        drawX: 0,\n        drawY: 0,\n        startX: 0,\n        startY: 0,\n\n        sourceColumn: 0,\n        sourceRow: 0,\n        row: 0,\n        column: 0,\n        startColumn: 0,\n        startRow: 0,\n\n        lineX: 0,\n        index: 0,\n        isEditing: false,\n    },\n\n    /*data() {\n        let nextDrawX = this.drawX;\n        let nodeOffset = 0;\n        let x = 0;\n        return {\n            nextDrawX,\n            nodeOffset,\n            x\n        };\n    },*/\n    methods: {\n        getLineX(index) {\n            if (index === 0) {\n                return this.sourceX + this.entityWidth + 20;\n            }\n            return this.drawX;\n        },\n        getColumn(index) {\n            let x = this.column;\n            let offset = this.getNodeSize(index);\n            return x + offset;\n        },\n        getDrawX(index) {\n            return this.getRealDrawX(index);\n        },\n        getRealDrawX(index) {\n            let x = this.drawX;\n            let offset = this.getNodeSize(index);\n            x += offset * (this.entityWidth + 20);\n            return x;\n        },\n        getNodeSize(index) {\n            let offset = 0;\n            // Get size of previous children\n            for (let i = 0; i < index; i++) {\n                let node = this.children[i];\n                offset += window.familyTreeChildWidth(node, i);\n            }\n            return offset;\n        },\n    },\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/families/FamilyEntity.vue",
    "content": "<template>\n    <div v-bind:class=\"boxClasses()\" v-bind:style=\"position()\" v-bind:data-uuid=\"uuid\" v-bind:data-entity=\"entity ? entity.id : undefined\" v-bind:data-tags=\"tags()\">\n        <div class=\"flex items-center gap-1 max-w-full\">\n            <div class=\"flex-none\">\n                <span class=\"truncate\" v-if=\"node.isUnknown\">\n                    <i class=\"fa-regular fa-3x fa-question\" aria-hidden=\"true\"/>\n                </span>\n                <a v-bind:href=\"entity.url\" v-if=\"!node.isUnknown\">\n                    <img v-bind:src=\"entity.thumb\" class=\"rounded-full entity-image w-10 h-10\" v-bind:alt=\"entity.name\" />\n                </a>\n            </div>\n            <div class=\"grow justify-center truncate\">\n                <a v-bind:href=\"entity.url\" v-bind:class=\"cssClasses()\" v-bind:title=\"entity.name\" v-if=\"!node.isUnknown\">\n                    <span class=\"truncate\">\n                        {{ entity.name }}\n                    </span>\n                    <span class=\"self-end\" v-if=\"entity.status\">\n                        <i v-bind:class=\"entity.status.icon\" v-bind:title=\"entity.status.name\" aria-hidden=\"true\"></i>\n                    </span>\n                </a>\n                <span v-bind:class=\"cssClasses()\" v-if=\"node.isUnknown\">\n                    <i>{{ fields('unknown') }}</i>\n                </span>\n                <span class=\"text-xs\" v-show=\"entity ? entity.birth : undefined\">\n                    {{ entity ? entity.birth : ''}}\n                </span>\n                <span class=\"text-xs\" v-if=\"entity && entity.birth && entity.death\">\n                    -\n                </span>\n                <span class=\"text-xs\" v-show=\"entity ? entity.death : undefined\">\n                    ✝ {{ entity ? entity.death : ''}}\n                </span>\n                <span class=\"text-xs\" v-if=\"!isEditing && false\">\n                    (#{{ entity ? entity.id : '' }})\n                </span>\n                <div class=\"flex gap-1\" v-if=\"isEditing\">\n                    <a v-on:click=\"editEntity(uuid, node)\" class=\"cursor-pointer\" v-bind:title=\"i18n('entity', 'edit')\">\n                        <i class=\"fa-regular fa-pencil\" aria-hidden=\"true\"></i>\n                        <span class=\"sr-only\">{{ i18n('entity', 'edit') }}</span>\n                    </a>\n                    <a v-if=\"!isRelation\" v-on:click=\"addRelation(uuid)\" class=\"cursor-pointer\" v-bind:title=\"i18n('relation', 'add')\">\n                        <i class=\"fa-regular fa-user-plus\" aria-hidden=\"true\"></i>\n                        <span class=\"sr-only\">{{ i18n('relation', 'add') }}</span>\n                    </a>\n                    <a v-on:click=\"deleteEntity(uuid)\" class=\"align-end cursor-pointer\" v-bind:title=\"i18n('entity', 'remove')\">\n                        <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n                        <span class=\"sr-only\">{{  i18n('entity', 'remove') }}</span>\n                    </a>\n                </div>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script>\n\nexport default {\n    props: {\n        entity: undefined,\n        uuid: undefined,\n        drawX: 0,\n        drawY: 0,\n        column: 0,\n        row: 0,\n        isRelation: false,\n        isFounder: false,\n        isEditing: undefined,\n        node: undefined,\n    },\n\n    methods: {\n        boxClasses() {\n            let css = 'family-node-entity rounded-2xl px-2 flex items-center absolute overflow-hidden ' +\n                'text-base leading-none ft-col-' + this.column + ' ft-row-' + this.row;\n            if (this.isRelation) {\n                css += ' family-node-entity-relation';\n            }\n            if (this.isFounder) {\n                css += ' family-node-entity-founder';\n            }\n            if (this.entity) {\n                if (this.entity.status) {\n                    css += ' kanka-status-' + this.entity.status.key;\n                }\n                this.entity.tags.forEach(function (tag) {\n                    css += ' ' + tag;\n                });\n            }\n\n            if (this.node.isUnknown) {\n                css += ' unknown-character'\n            }\n\n            if (this.node.cssClass) {\n                css += ' ' + this.node.cssClass;\n            }\n\n            return css;\n        },\n        position() {\n            return {\n                left: `calc(${this.column} * var(--family-tree-column-width))`,\n                top: `calc(${this.row} * var(--family-tree-row-height))`,\n            };\n        },\n        editEntity(uuid, node) {\n            this.emitter.emit('editEntity', {uuid: uuid, relation: node});\n        },\n        //editEntity(uuid) {\n        //    this.emitter.emit('editEntity', uuid);\n       // },\n        deleteEntity(uuid) {\n            this.emitter.emit('deleteEntity', uuid);\n        },\n        addRelation(uuid) {\n            this.emitter.emit('addRelation', uuid);\n        },\n        cssClasses() {\n            let classes = '';\n            if (this.entity && this.entity.status) {\n                classes += 'flex grid-cols-2 items-center gap-1'\n            } else {\n                classes += 'block'\n            }\n            if (this.isEditing) {\n                classes += ' font-bold';\n            }\n            return classes;\n        },\n        tags() {\n            return '';\n        },\n        i18n(group, action) {\n            return window.ftTexts.modals[group][action].title\n        },\n        fields(field) {\n            return window.ftTexts.modals.fields[field]\n        },\n    },\n\n    mounted() {\n        this.emitter.emit('trackX', this.drawX);\n        this.emitter.emit('trackY', this.drawY);\n        //console.log('entity', this.entity);\n    }\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/families/FamilyNode.vue",
    "content": "<template>\n\n    <ChildrenLine\n        v-if=\"drawChildrenLine()\"\n        :originX=\"lineX\"\n        :originY=\"sourceY\"\n        :targetX=\"drawX\"\n        :column=\"column\"\n        :row=\"row\"\n        :node =\"node\"\n    ></ChildrenLine>\n\n    <FamilyEntity\n        :entity=\"entity(node.entity_id)\"\n        :uuid=\"node.uuid\"\n        :drawX=\"drawX\"\n        :drawY=\"drawY\"\n        :column=\"column\"\n        :row=\"row\"\n        :isEditing=\"isEditing\"\n        :node=\"node\"\n        :isFounder=\"isFirst\"\n    ></FamilyEntity>\n\n    <FamilyRelations v-if=\"hasRelations()\"\n        :relations=\"node.relations\"\n        :entities=\"entities\"\n\n        :sourceX=\"sourceX\"\n        :sourceY=\"sourceY\"\n        :drawX=\"drawX\"\n        :drawY=\"drawY\"\n\n        :sourceColumn=\"sourceColumn\"\n        :sourceRow=\"sourceRow\"\n        :column=\"column\"\n        :row=\"row\"\n\n        :isEditing=\"isEditing\"\n    >\n    </FamilyRelations>\n</template>\n\n<script>\n\nexport default {\n    props: {\n        node: undefined,\n        entities: undefined,\n\n        sourceColumn: 0,\n        sourceRow: 0,\n        column: 0,\n        row: 0,\n\n        sourceX: 0,\n        sourceY: 0,\n        drawX: 0,\n        drawY: 0,\n\n        drawLine: false,\n        lineX: 0,\n        isEditing: undefined,\n        isFirst: false,\n        offset: undefined,\n    },\n\n    methods: {\n        drawChildrenLine() {\n            return this.drawLine;\n        },\n        entity(id) {\n            //console.log(this.entities[id]);\n            return this.entities[id];\n        },\n        hasRelations() {\n            return this.node.relations && this.node.relations.length > 0;\n        },\n    }\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/families/FamilyParentChildrenLine.vue",
    "content": "<template>\n    <div\n        class=\"family-tree-line family-tree-child-parent-line family-tree-line-vertical absolute\"\n        v-bind:style=\"vertical()\"\n        v-bind:data-row=\"row\"\n        v-bind:data-col=\"column\" />\n</template>\n\n<script>\n\nexport default {\n    props: {\n        sourceX: 0,\n        sourceY: 0,\n        index: 0,\n        column: undefined,\n        row: undefined,\n        node: undefined,\n    },\n\n    data() {\n        return {\n            height: 20,\n        }\n    },\n\n    methods: {\n        vertical() {\n            let top =  this.sourceY - 35;\n            let left = this.sourceX - 10;\n\n            return 'width: 1px; height: ' + this.height + 'px;' +\n                'left: ' + left + 'px; ' +\n                'top: ' + top + 'px;' +\n                'background-color:' + this.node.colour + ';'\n            ;\n        },\n    },\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/families/FamilyRelation.vue",
    "content": "<template>\n    <FamilyEntity\n        :entity=\"entity(relation.entity_id)\"\n        :uuid=\"relation.uuid\"\n        :drawX=\"drawX\"\n        :drawY=\"drawY\"\n\n        :column=\"column\"\n        :row=\"row\"\n\n        :isRelation=\"true\"\n        :isEditing=\"isEditing\"\n        :node=\"relation\"\n    >\n    </FamilyEntity>\n\n    <RelationLine\n        :drawX=\"drawX\"\n        :drawY=\"drawY\"\n        :sourceX=\"sourceX\"\n        :sourceY=\"sourceY\"\n\n        :column=\"column\"\n        :row=\"row\"\n        :sourceColumn=\"sourceColumn\"\n        :sourceRow=\"sourceRow\"\n\n        :relation=\"relation\"\n        :uuid=\"relation.uuid\"\n        :isEditing=\"isEditing\"\n    ></RelationLine>\n\n\n    <FamilyChildren\n        v-if=\"hasChildren()\"\n        :children=\"relation.children\"\n        :entities=\"entities\"\n\n        :sourceX=\"sourceX\"\n        :sourceY=\"sourceY\"\n        :drawX=\"nextX(index)\"\n        :drawY=\"startY()\"\n        :startX=\"sourceX\"\n        :startY=\"startY()\"\n\n        :sourceColumn=\"sourceColumn\"\n        :sourceRow=\"sourceRow\"\n        :column=\"nextCol(index)\"\n        :row=\"startRow()\"\n        :startColumn=\"sourceColumn\"\n        :startRow=\"startRow()\"\n\n        :index=\"index\"\n        :lineX=\"this.lineX()\"\n        :isEditing=\"this.isEditing\"\n    >\n    </FamilyChildren>\n</template>\n\n<script>\n\nexport default {\n    props: {\n        relation: undefined,\n        entities: undefined,\n\n        sourceX: 0,\n        sourceY: 0,\n        drawX: 0,\n        drawY: 0,\n\n        sourceColumn: 0,\n        sourceRow: 0,\n        column: 0,\n        row: 0,\n\n        index: 0,\n        isEditing: false,\n    },\n    methods: {\n        entity(id) {\n            return this.entities[id];\n        },\n        hasChildren() {\n            //console.log('check children', this.relation, this.relation.children && this.relation.children.length > 0);\n            return this.relation.children && this.relation.children.length > 0;\n        },\n        nextX(index) {\n            //console.log('next X', index === 0 ? this.sourceX : this.drawX);\n            return index === 0 ? this.sourceX : this.drawX;\n        },\n        startY() {\n            return this.sourceY + this.entityHeight + 50;\n        },\n        nextCol(index) {\n            return index === 0 ? this.sourceColumn : this.column;\n        },\n        startRow() {\n            return this.sourceRow + 1;\n        },\n        lineX() {\n            return this.index === 0 ? this.drawX + this.entityWidth + 20 : this.sourceX;\n        },\n    },\n    mounted() {\n        //console.log('FamilyRelation', this.relation);\n        //console.error('FamilyRelation', this.relation.children);\n    }\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/families/FamilyRelations.vue",
    "content": "<template>\n    <FamilyRelation\n        v-for=\"(relation, index) in relations\"\n        :relation=\"relation\"\n        :index=\"index\"\n        :entities=\"entities\"\n\n        :sourceX=\"drawX\"\n        :sourceY=\"sourceY\"\n        :drawX=\"nextDrawX(relation, index)\"\n        :drawY=\"drawY\"\n\n        :sourceColumn=\"column\"\n        :sourceRow=\"sourceRow\"\n        :column=\"nextColumn(relation, index)\"\n        :row=\"row\"\n\n        :isEditing=\"this.isEditing\"\n    ></FamilyRelation>\n</template>\n\n<script>\n//import FamilyRelation from \"./FamilyRelation.vue\";\n\nexport default {\n    props: {\n        relations: undefined,\n        entities: undefined,\n        isEditing: undefined,\n\n        sourceX: 0,\n        sourceY: 0,\n        drawX: 0,\n        drawY: 0,\n\n        sourceColumn: 0,\n        sourceRow: 0,\n        column: 0,\n        row: 0,\n\n    },\n\n    data() {\n        return {\n        }\n    },\n\n    methods: {\n        nextDrawX(rel, index) {\n\n            return this.calcPreviousRelations(index);\n        },\n        calcPreviousRelations(index) {\n            let nodeOffset = 0;\n            if (index === 0) {\n                nodeOffset = 1;\n            }\n            let tmpOffsetX = this.entityWidth + 20;\n\n            for(let i = 0; i < index; i++) {\n                let relWidth = window.familyTreeRelationWidth(this.relations[i], i);\n                nodeOffset += relWidth;\n            }\n\n            tmpOffsetX *= nodeOffset;\n            return this.drawX + tmpOffsetX;\n        },\n        nextColumn(rel, index) {\n            return this.calcPreviousRelationsCol(index);\n        },\n        calcPreviousRelationsCol(index) {\n            let nodeOffset = 0;\n            if (index === 0) {\n                nodeOffset = 1;\n            }\n            for(let i = 0; i < index; i++) {\n                let relWidth = window.familyTreeRelationWidth(this.relations[i], i);\n                nodeOffset += relWidth;\n            }\n\n            return this.column + nodeOffset;\n        },\n\n    },\n    mounted() {\n        //console.info('FamilyRelations', this.relations);\n    }\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/families/FamilyTree.vue",
    "content": "<template>\n    <div class=\"flex gap-2 mb-5 justify-end items-center align-right\" v-if=\"!isLoading && permission\">\n        <button class=\"btn2 btn-sm btn-primary\" v-if=\"!isEditing\" v-on:click=\"startEditing()\">\n            <i class=\"fa-regular fa-edit\" aria-hidden=\"true\"></i>\n            {{ this.texts.actions.edit }}\n        </button>\n        <button class=\"btn2 btn-sm \" v-if=\"showEditFounder()\" v-on:click=\"createNewFounder()\">\n            <i class=\"fa-regular fa-user\" aria-hidden=\"true\"></i>\n            {{ this.texts.actions.founder }}\n        </button>\n        <button class=\"btn2 btn-sm \" v-if=\"isEditing\" v-on:click=\"resetTree()\">\n            <i class=\"fa-regular fa-redo\" aria-hidden=\"true\"></i>\n            {{ this.texts.actions.reset }}\n        </button>\n        <button class=\"btn2 btn-sm \" v-if=\"isEditing\" v-on:click=\"clearTree()\">\n            <i class=\"fa-regular fa-eraser\" aria-hidden=\"true\"></i>\n            {{ this.texts.actions.clear }}\n        </button>\n        <button class=\"btn2 btn-primary\" v-if=\"isEditing && (isDirty)\" v-on:click=\"saveTree()\">\n            <i class=\"fa-regular fa-save\" aria-hidden=\"true\"></i>\n            {{ this.texts.actions.save }}\n        </button>\n    </div>\n    <div class=\"family-tree overflow-auto w-full h-full min-h-50 block relative\" ref=\"familytree\">\n        <div class=\"absolute top-0 right-0 z-10\">\n            <button class=\"btn2 btn-ghost btn-sm\" aria-label=\"Close\" v-on:click=\"zoom()\">\n                <i class=\"fa-regular fa-square-plus\" aria-hidden=\"true\"></i>\n            </button>\n            <button class=\"btn-sm btn2 btn-ghost\" aria-label=\"Close\" v-on:click=\"unzoom()\">\n                <i class=\"fa-regular fa-square-minus\" aria-hidden=\"true\"></i>\n            </button>\n        </div>\n        <div class=\"text-center px-5\" v-if=\"isLoading\">\n            <i class=\"fa-solid fa-spinner fa-spin fa-2x\" aria-hidden=\"true\"></i>\n            <span class=\"sr-only\">Loading...</span>\n        </div>\n        <div v-else class=\"relative\" v-bind:style=\"{width: '100%'}\">\n            <PinchScrollZoom\n                id=\"treeMap\"\n                ref=\"zoomer\"\n                key-actions\n                :width=\"pincherWidth()\"\n                :height=\"pincherHeight()\"\n                :contentWidth=\"dragWidth()\"\n                :contentHeight=\"dragHeight()\"\n                :scale=\"1\"\n                :maxScale=\"3\"\n                :within=\"false\"\n                class=\"cursor-move!\"\n                >\n                <div class=\"relative\" v-bind:style=\"{width: dragWidth() + 'px', height: dragHeight() + 'px'}\">\n                    <a class=\"btn2 btn-primary\" v-on:click=\"createNode()\" v-if=\"showCreateNode()\">\n                        <i class=\"fa-regular fa-plus\" aria-hidden=\"true\"></i>\n                        {{ this.texts.actions.first }}\n                    </a>\n\n                    <FamilyNode v-for=\"node in nodes\"\n                                :node=\"node\"\n                                :entities=\"entities\"\n                                :sourceX=\"0\"\n                                :sourceY=\"0\"\n                                :drawX=\"0\"\n                                :drawY=\"0\"\n                                :column=\"0\"\n                                :row=\"0\"\n                                :sourceColumn=\"0\"\n                                :sourceRow=\"0\"\n                                :isEditing=\"isEditing\"\n                                :isFirst=\"true\"\n                    >\n                    </FamilyNode>\n                </div>\n            </PinchScrollZoom>\n        </div>\n    </div>\n\n  <dialog class=\"dialog rounded-top md:rounded-2xl bg-base-100 min-w-fit shadow-md text-base-content\" id=\"family-tree-modal\" aria-modal=\"true\" v-if=\"!isLoading\">\n    <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n      <h4 v-if=\"isAddingChild\" class=\"text-lg font-normal\">{{ this.texts.modals.entity.child.title }}</h4>\n      <h4 v-else-if=\"isAddingCharacter\" class=\"text-lg font-normal\">{{ this.texts.modals.entity.add.title }}</h4>\n      <h4 v-else-if=\"isEditingEntity\" class=\"text-lg font-normal\">{{ this.texts.modals.entity.edit.title }}</h4>\n      <h4 v-else-if=\"isAddingRelation\" class=\"text-lg font-normal\">{{ this.texts.modals.relation.add.title }}</h4>\n      <h4 v-else-if=\"isEditingRelation\" class=\"text-lg font-normal\">{{ this.texts.modals.relation.edit.title }}</h4>\n      <h4 v-else-if=\"isAddingNewFounder\" class=\"text-lg font-normal\">{{ this.texts.modals.entity.founder.title }}</h4>\n\n      <button autofocus type=\"button\" class=\"text-xl opacity-50 hover:opacity-100 focus:opacity-100 cursor-pointer text-decoration-none\" aria-label=\"Close\" v-on:click=\"closeModal()\">\n        <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n        <span class=\"sr-only\">Close</span>\n      </button>\n    </header>\n    <article class=\"max-w-2xl py-4 px-4 md:px-6\">\n      <div class=\"flex flex-col gap-5 w-full\">\n        <div class=\"field field-founder flex flex-col gap-1 w-full\" v-show=\"isAddingNewFounder\">\n          <label>{{ this.texts.modals.fields.founder }}</label>\n          <select class=\"select2 w-full\" style=\"width: 100%\" v-bind:data-url=\"this.search_api\" data-placeholder=\"Choose a character\" data-language=\"en\" data-allow-clear=\"true\" name=\"founder_id_ft\" data-dropdown-parent=\"#family-tree-modal\" tabindex=\"-1\" aria-hidden=\"true\"></select>\n        </div>\n        <div class=\"field field-character flex flex-col gap-1 w-full\" v-show=\"isAddingRelation || isAddingChild || isEditingEntity || isAddingCharacter || isAddingNewFounder\">\n          <label>{{ this.texts.modals.fields.character }}</label>\n          <select class=\"select2 w-full\" style=\"width: 100%\" v-bind:data-url=\"this.search_api\" data-placeholder=\"Choose a character\" data-language=\"en\" data-allow-clear=\"true\" name=\"character_id_ft\" data-dropdown-parent=\"#family-tree-modal\" tabindex=\"-1\" aria-hidden=\"true\"></select>\n        </div>\n        <div class=\"field field-member flex flex-col gap-1\" v-show=\"isAddingCharacter && this.showMembers()\">\n          <label>{{ this.texts.modals.fields.member }}</label>\n          <ul>\n            <li v-for=\"(suggestion) in this.suggestions\"\n            >\n              <a class=\"cursor-pointer\" v-on:click=\"this.saveSuggestion(suggestion.id)\"> {{ suggestion.name }} </a>\n            </li>\n          </ul>\n        </div>\n      </div>\n      <div class=\"flex flex-col gap-5 w-full\" v-show=\"isEditingRelation || isAddingRelation || isAddingChild || isEditingEntity || isAddingNewFounder\">\n        <div v-if=\"isAddingRelation || isEditingEntity || isAddingNewFounder\" class=\"field field-unknown checkbox flex flex-col gap-1\">\n          <label>\n            <input type=\"checkbox\" v-model=\"isUnknown\" id=\"family_tree_unknown\" name=\"isUnknown\" value=\"isUnknown\" />\n            {{ this.texts.modals.fields.unknown }}\n          </label>\n          <p class=\"help-block text-neutral-content\">{{ this.texts.modals.entity.edit.helper }}</p>\n        </div>\n\n        <div v-if=\"!isAddingChild\" class=\"field field-relation flex flex-col gap-1\">\n          <label>{{ this.texts.modals.fields.relation }}</label>\n          <input v-model=\"relation\" type=\"text\" maxlength=\"70\" class=\"w-full\" id=\"family_tree_relation\" @keyup.enter=\"saveModal()\"/>\n        </div>\n\n        <div class=\"grid grid-cols-2 gap-5\" v-show=\"isAddingRelation || isAddingNewFounder || isAddingChild || isEditingEntity\">\n          <div class=\"field field field-colour flex flex-col gap-1\">\n            <label>{{ this.texts.modals.fields.colour }}</label>\n            <div>\n              <input v-model=\"colour\" name=\"colour\" type=\"text\" maxlength=\"7\" data-append-to=\"#family-tree-modal\" class=\"w-full spectrum\" id=\"family_tree_colour\" @keyup.enter=\"saveModal()\" ref=\"colour\" />\n            </div>\n          </div>\n\n          <div class=\"field field-visibility flex flex-col gap-1\">\n            <label>{{ this.texts.modals.fields.visibility.title }}</label>\n            <select v-model=\"visibility\" name=\"visibility\" id=\"family_tree_visibility\" class=\"w-full\">\n              <option value=\"1\">{{ this.texts.modals.fields.visibility.all }}</option>\n              <option value=\"2\">{{ this.texts.modals.fields.visibility.admins }}</option>\n              <option value=\"5\">{{ this.texts.modals.fields.visibility.members }}</option>\n            </select>\n          </div>\n\n          <div class=\"field field-css flex flex-col gap-1\">\n            <label>{{ this.texts.modals.fields.css }}</label>\n            <input v-model=\"cssClass\" type=\"text\" maxlength=\"70\" class=\"w-full\" id=\"family_tree_class\" @keyup.enter=\"saveModal()\"/>\n          </div>\n        </div>\n      </div>\n    </article>\n      <footer class=\"flex flex-wrap gap-3 justify-end items-center p-4 md:px-6\">\n          <menu class=\"flex flex-wrap gap-3 ps-0\" >\n              <div class=\"submit-group\">\n                  <button class=\"btn2 btn-primary\" @click=\"saveModal()\" v-html=\"texts.actions.save\"></button>\n              </div>\n          </menu>\n      </footer>\n  </dialog>\n    <dialog class=\"dialog rounded-top md:rounded-2xl bg-base-100 min-w-fit shadow-md text-base-content\" id=\"family-tree-pitch\" aria-modal=\"true\" v-if=\"!isLoading\">\n      <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n          <h4 class=\"text-lg font-normal\" v-html=\"texts.modals.pitch.title\"></h4>\n\n          <button autofocus type=\"button\" class=\"text-xl opacity-50 hover:opacity-100 focus:opacity-100 cursor-pointer text-decoration-none\" aria-label=\"Close\" v-on:click=\"closePitchModal()\">\n              <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n              <span class=\"sr-only\">Close</span>\n          </button>\n      </header>\n      <article class=\"max-w-2xl py-4 px-4 md:px-6\">\n          <p v-html=\"texts.modals.pitch.content\" class=\"text-neutral-content\"></p>\n          <div class=\"flex flex-col sm:flex-row gap-3 flex-wrap w-full\">\n              <a href=\"https://kanka.io/premium\" class=\"btn2 btn-outline btn-sm\" v-html=\"texts.modals.pitch.more\"></a>\n              <a :href=this.subscribe_url class=\"btn2 bg-boost text-white btn-sm\" v-html=\"texts.modals.pitch.subscription\">\n              </a>\n          </div>\n      </article>\n    </dialog>\n</template>\n\n<script>\nimport axios from \"axios\";\nimport PinchScrollZoom from \"@coddicat/vue-pinch-scroll-zoom\";\n\nexport default {\n    props: {\n        api: undefined,\n        save_api: undefined,\n        entity_api: undefined,\n        search_api: undefined,\n        permission: undefined,\n        subscribe_url: undefined,\n    },\n    components: {\n        PinchScrollZoom,\n    },\n\n    data() {\n        return {\n            nodes: [],\n            entities: [],\n            texts: undefined,\n            suggestions: [],\n            isEditing: false,\n            isLoading: true,\n            isDirty: false,\n            originalNodes: undefined,\n            originalEntities: undefined,\n\n            currentUuid: undefined,\n            isAddingRelation: false,\n            isAddingChild: false,\n            isEditingEntity: false,\n            isAddingCharacter: false,\n            isEditingRelation: false,\n            isAddingNewFounder: false,\n            isNotPremium: false,\n\n            relation: undefined,\n            entity: undefined,\n            cssClass: undefined,\n            colour: undefined,\n            visibility: undefined,\n            isUnknown: undefined,\n\n            maxX: 0,\n            maxY: 0,\n\n            modal: 'family-tree-modal',\n            pitchModal: 'family-tree-pitch',\n            founderField: 'select[name=\"founder_id_ft\"]',\n            entityField: 'select[name=\"character_id_ft\"]',\n            newUuid: 1,\n        }\n    },\n\n    methods: {\n\n        zoom() {\n            // create a new keyboard event and set the key to \"Enter\"\n            const event = new KeyboardEvent('keydown', {\n            key: '+',\n            code: 'Equal',\n            which: 187,\n            keyCode: 187,\n            });\n\n            // dispatch the event on some DOM element\n            document.getElementById('treeMap').dispatchEvent(event);\n        },\n\n        unzoom() {\n            //zoomer.value?.manualZoom(0.5);\n\n            // create a new keyboard event and set the key to \"Enter\"\n            const event = new KeyboardEvent('keydown', {\n            key: '-',\n            code: 'Minus',\n            which: 189,\n            keyCode: 189,\n            });\n\n            // dispatch the event on some DOM element\n            document.getElementById('treeMap').dispatchEvent(event);\n        },\n\n        startEditing() {\n            this.isEditing = true;\n        },\n        resetTree() {\n            if (!this.isDirty || confirm(this.texts.modals.reset.confirm)) {\n                this.isEditing = false;\n                this.isDirty = false;\n\n                this.nodes = JSON.parse(JSON.stringify(this.originalNodes));\n                this.entities = JSON.parse(JSON.stringify(this.originalEntities));\n\n                window.showToast(this.texts.toasts.reseted);\n            }\n        },\n        saveTree() {\n            axios.post(this.save_api, {data: this.nodes})\n                .then((resp) => {\n                    if (resp.status === 204) {\n                        this.showPitchDialog();\n                        return;\n                    }\n                    window.showToast(this.texts.toasts.saved);\n                    this.isDirty = false;\n                }).catch((err) => {\n                    console.log('save tree error', err);\n                this.showPitchDialog();\n            });\n\n        },\n        clearTree() {\n            if (confirm(this.texts.modals.clear.confirm)) {\n                this.nodes = [];\n                this.entities = [];\n                this.isDirty = this.originalNodes.length > 0;\n                this.resetVariables();\n                window.showToast(this.texts.toasts.cleared);\n            }\n        },\n        deleteUuid(uuid) {\n            if (confirm(this.texts.modals.entity.remove.confirm)) {\n                this.deleteUuidFromNodes(uuid);\n                window.showToast(this.texts.toasts.entity.removed);\n                this.isDirty = true;\n            }\n        },\n        deleteUuidFromNodes(uuid) {\n            this.nodes = this.filter(this.nodes, uuid);\n        },\n        filter(array, uuid) {\n            //console.log('filter', array, uuid);\n            const getNodes = (result, object) => {\n                // If it's the uuid we're looking for, return an empty array\n                if (object.uuid === uuid) {\n                    return result;\n                }\n                if (Array.isArray(object.children)) {\n                    const children = object.children.reduce(getNodes, []);\n                    object.children = children;\n                }\n                else if (Array.isArray(object.relations)) {\n                    const relations = object.relations.reduce(getNodes, []);\n                    object.relations = relations;\n                }\n                result.push(object);\n                return result;\n            };\n            // If the first node is the uuid, delete everything\n            if (array[0].uuid === uuid) {\n                return [];\n            }\n            return array.reduce(getNodes, []);\n        },\n        closePitchModal() {\n            window.closeDialog(this.pitchModal);\n        },\n        closeModal() {\n            this.isAddingChild = false;\n            this.isAddingRelation = false;\n            this.isEditingRelation = false;\n            this.isEditingEntity = false;\n            this.isAddingCharacter = false;\n            this.isAddingNewFounder = false;\n            this.currentUuid = undefined;\n            this.relation = undefined;\n            this.cssClass = undefined;\n            this.colour = undefined;\n            this.entity = undefined;\n            this.visibility = 1;\n            this.isUnknown = undefined;\n\n            window.closeDialog(this.modal);\n            document.querySelector(this.entityField)?.tomselect?.clear();\n            document.querySelector(this.founderField)?.tomselect?.clear();\n        },\n        showDialog() {\n            window.openDialog(this.modal);\n            window.initForeignSelect();\n            window.triggerEvent();\n        },\n        showPitchDialog() {\n            window.openDialog(this.pitchModal);\n        },\n        resetVariables() {\n            this.isAddingChild = false;\n            this.isAddingRelation = false;\n            this.isEditingRelation = false;\n            this.isEditingEntity = false;\n            this.isAddingCharacter = false;\n            this.isAddingNewFounder = false;\n            this.currentUuid = undefined;\n            this.relation = undefined;\n            this.cssClass = undefined;\n            this.colour = undefined;\n            this.visibility = 1;\n            this.isUnknown = undefined;\n            this.entity = undefined;\n\n            window.closeDialog(this.modal);\n            document.querySelector(this.founderField)?.tomselect?.clear();\n            document.querySelector(this.entityField)?.tomselect?.clear();\n        },\n        saveSuggestion: function(character) {\n            this.emitter.emit('saveModal', [character]);\n            this.saveModal(character);\n        },\n        saveModal(character = null) {\n            if (this.isEditingRelation) {\n                this.editRelation();\n            } else if(this.isAddingRelation) {\n                this.addRelation();\n            } else if(this.isAddingChild) {\n                this.addChild();\n            } else if(this.isEditingEntity) {\n                this.editEntity();\n            } else if(this.isAddingCharacter) {\n                this.editEntity(character);\n            } else if(this.isAddingNewFounder) {\n                this.addFounder();\n            }\n        },\n        showCreateNode() {\n            return this.nodes.length === 0 && this.isEditing;\n        },\n        showEditFounder() {\n            return this.nodes.length > 0 && this.isEditing;\n        },\n        showMembers() {\n            //console.log('this', this.suggestions.length, this.suggestions)\n            return this.suggestions.length > 0;\n        },\n        createNode() {\n            this.isAddingCharacter = true;\n            this.currentUuid = 0;\n            this.showDialog();\n        },\n        createNewFounder() {\n            this.resetVariables();\n            this.isAddingNewFounder = true;\n            this.currentUuid = 0;\n            this.showDialog();\n        },\n        editRelation() {\n            this.isDirty = true;\n            //console.log('edit relation', this.currentUuid, this.relation);\n            const getRelationNodes = (result, object) => {\n                if (object.uuid === this.currentUuid) {\n                    object.role = this.relation;\n                    object.cssClass = this.cssClass;\n                    object.colour = this.colour;\n                    object.visibility = this.visibility;\n                    object.isUnknown = this.isUnknown;\n                    result.push(object);\n                    return result;\n                }\n\n                if (Array.isArray(object.children)) {\n                    const children = object.children.reduce(getRelationNodes, []);\n                    object.children = children;\n                }\n                else if (Array.isArray(object.relations)) {\n                    const relations = object.relations.reduce(getRelationNodes, []);\n                    object.relations = relations;\n                }\n\n                result.push(object);\n                return result;\n            };\n            this.nodes = this.nodes.reduce(getRelationNodes, []);\n\n            window.showToast(this.texts.toasts.relations.edit);\n            this.closeModal();\n        },\n        addRelation() {\n            let entity_id = document.querySelector(this.entityField)?.tomselect?.getValue();\n            if (this.isUnknown) {\n                this.insertUnknownRelation();\n                this.isDirty = true;\n                window.showToast(this.texts.toasts.relations.add);\n                this.closeModal();\n            }\n\n            if (entity_id && !this.isUnknown) {\n                let url = this.entity_api.replace('/0', '/' + entity_id);\n                axios.get(url).then((res) => {\n                    let entity = res.data;\n                    //console.log('add relation then', entity);\n                    this.insertRelation(entity);\n                    this.isDirty = true;\n                    window.showToast(this.texts.toasts.relations.add);\n                    this.closeModal();\n                });\n            }\n        },\n        insertUnknownRelation() {\n            let entity_id = '';\n\n            const getRelationNodes = (result, object) => {\n                if (object.uuid === this.currentUuid) {\n                    if (Array.isArray(object.relations)) {\n                        object.relations.push({entity_id: entity_id, role: this.relation, cssClass: this.cssClass, colour: this.colour, isUnknown: this.isUnknown, visibility: this.visibility, uuid: JSON.stringify(this.newUuid)});\n                    } else {\n                        object.relations = [{entity_id: entity_id, role: this.relation, cssClass: this.cssClass, colour: this.colour, isUnknown: this.isUnknown, visibility: this.visibility, uuid: JSON.stringify(this.newUuid)}];\n                    }\n                    this.newUuid++;\n                    result.push(object);\n                    return result;\n                }\n                if (Array.isArray(object.children)) {\n                    const children = object.children.reduce(getRelationNodes, []);\n                    object.children = children;\n                }\n                else if (Array.isArray(object.relations)) {\n                    const relations = object.relations.reduce(getRelationNodes, []);\n                    object.relations = relations;\n                }\n                result.push(object);\n                return result;\n            };\n            this.nodes = this.nodes.reduce(getRelationNodes, []);\n        },\n        insertRelation(entity) {\n            let entity_id = entity.id;\n            if (!this.entities[entity.id]) {\n                //console.log('adding entity', entity);\n                this.entities[entity.id] = entity;\n                //console.log('entities', this.entities);\n            }\n\n            const getRelationNodes = (result, object) => {\n                if (object.uuid === this.currentUuid) {\n                    if (Array.isArray(object.relations)) {\n                        object.relations.push({entity_id: entity_id, role: this.relation, cssClass: this.cssClass, colour: this.colour, isUnknown: this.isUnknown, visibility: this.visibility, uuid: JSON.stringify(this.newUuid)});\n                    } else {\n                        object.relations = [{entity_id: entity_id, role: this.relation, cssClass: this.cssClass, colour: this.colour, isUnknown: this.isUnknown, visibility: this.visibility, uuid: JSON.stringify(this.newUuid)}];\n                    }\n                    this.newUuid++;\n                    result.push(object);\n                    return result;\n                }\n                if (Array.isArray(object.children)) {\n                    const children = object.children.reduce(getRelationNodes, []);\n                    object.children = children;\n                }\n                else if (Array.isArray(object.relations)) {\n                    const relations = object.relations.reduce(getRelationNodes, []);\n                    object.relations = relations;\n                }\n                result.push(object);\n                return result;\n            };\n            this.nodes = this.nodes.reduce(getRelationNodes, []);\n        },\n        addChild() {\n            //console.log('child');\n            let entity_id = document.querySelector(this.entityField)?.tomselect?.getValue();\n            if (!entity_id) {\n                // Nothing, ignore\n                this.closeModal();\n                return;\n            }\n\n            let url = this.entity_api.replace('/0', '/' + entity_id);\n            axios.get(url).then((res) => {\n                let entity = res.data;\n                this.insertChild(entity);\n                window.showToast(this.texts.toasts.entity.child);\n                this.isDirty = true;\n                this.closeModal();\n            });\n        },\n        insertChild(entity) {\n            var entity_id = entity.id;\n            if (!this.entities[entity.id]) {\n                this.entities[entity.id] = entity;\n            }\n\n            const getRelationNodes = (result, object) => {\n                if (object.uuid === this.currentUuid) {\n                    //console.log(object);\n\n                    if (Array.isArray(object.children)) {\n                        object.children.push({entity_id: entity_id, role: this.relation, cssClass: this.cssClass, colour: this.colour, visibility: this.visibility, uuid: JSON.stringify(this.newUuid)});\n                    } else {\n                        object.children = [{entity_id: entity_id, role: this.relation, cssClass: this.cssClass, colour: this.colour, visibility: this.visibility, uuid: JSON.stringify(this.newUuid)}];\n                    }\n                    this.newUuid++;\n                    result.push(object);\n                    return result;\n                }\n                if (Array.isArray(object.children)) {\n                    const children = object.children.reduce(getRelationNodes, []);\n                    object.children = children;\n                }\n                else if (Array.isArray(object.relations)) {\n                    const relations = object.relations.reduce(getRelationNodes, []);\n                    object.relations = relations;\n                }\n                result.push(object);\n                return result;\n            };\n            return this.nodes = this.nodes.reduce(getRelationNodes, []);\n        },\n        editEntity(character = null) {\n            let entity_id = document.querySelector(this.entityField)?.tomselect?.getValue();\n            if (character) {\n                entity_id = character;\n            }\n            if (!entity_id) {\n                if (!(this.currentUuid === 0)) {\n                    this.editEntityNode();\n                    window.showToast(this.texts.toasts.entity.edit);\n                    this.isDirty = true;\n                }\n                // Nothing, ignore\n                this.closeModal();\n                return;\n            }\n\n            let url = this.entity_api.replace('/0', '/' + entity_id);\n            axios.get(url).then((res) => {\n                let entity = res.data;\n                if (this.currentUuid === 0) {\n                    this.newUuid = 1;\n                    this.addEntity(entity);\n                    window.showToast(this.texts.toasts.entity.add);\n                } else {\n                    this.replaceEntity(entity);\n                    window.showToast(this.texts.toasts.entity.edit);\n                }\n                this.isDirty = true;\n                this.closeModal();\n            });\n        },\n\n        addFounder() {\n            let founder_id = document.querySelector(this.founderField)?.tomselect?.getValue();\n            let entity_id = document.querySelector(this.entityField)?.tomselect?.getValue();\n\n            if (!founder_id) {\n                // Nothing, ignore\n                this.closeModal();\n                return;\n            }\n\n            let url2 = this.entity_api.replace('/0', '/' + founder_id);\n            axios.get(url2).then((res) => {\n                let founder = res.data;\n                if (entity_id) {\n                    let url = this.entity_api.replace('/0', '/' + entity_id);\n                    axios.get(url).then((res) => {\n                        let entity = res.data;\n                        this.addFounderEntity(founder, entity);\n                        this.isDirty = true;\n                        window.showToast(this.texts.toasts.entity.add);\n                        this.closeModal();\n                    });\n                    return;\n                }\n                this.addFounderEntity(founder);\n                this.isDirty = true;\n                window.showToast(this.texts.toasts.entity.add);\n                this.closeModal();\n            });\n        },\n        addFounderEntity(founder, entity = null) {\n            let entity_id = '';\n            this.entities[founder.id] = Object.freeze(founder);\n            if (entity) {\n                this.entities[entity.id] = Object.freeze(entity);\n                entity_id = entity.id;\n            }\n\n            this.nodes = [{entity_id: entity_id, role: this.relation, cssClass: this.cssClass, colour: this.colour, visibility: this.visibility, uuid: JSON.stringify(this.newUuid), children: this.nodes, isUnknown: this.isUnknown}];\n            this.newUuid++;\n            this.nodes = [{entity_id: founder.id, role: this.relation, cssClass: this.cssClass, colour: this.colour, visibility: this.visibility, uuid: JSON.stringify(this.newUuid), relations: this.nodes}];\n            this.newUuid++;\n        },\n        addEntity(entity) {\n            this.entities[entity.id] = Object.freeze(entity);\n            this.nodes.push({entity_id: entity.id, role: this.relation, cssClass: this.cssClass, colour: this.colour, visibility: this.visibility, uuid: JSON.stringify(this.newUuid)});\n            this.newUuid++;\n        },\n        editEntityNode() {\n            const getRelationNodes = (result, object) => {\n                if (object.uuid === this.currentUuid) {\n                    object.role = this.relation;\n                    object.isUnknown = this.isUnknown;\n                    object.cssClass = this.cssClass;\n                    object.colour = this.colour;\n                    object.visibility = this.visibility;\n                    object.entity_id = object.entity_id;\n                    result.push(object);\n                    return result;\n                }\n\n                if (Array.isArray(object.children)) {\n                    const children = object.children.reduce(getRelationNodes, []);\n                    object.children = children;\n                }\n                else if (Array.isArray(object.relations)) {\n                    const relations = object.relations.reduce(getRelationNodes, []);\n                    object.relations = relations;\n                }\n\n                result.push(object);\n                return result;\n            };\n            return this.nodes = this.nodes.reduce(getRelationNodes, []);\n        },\n\n        replaceEntity(entity) {\n            let entity_id = entity.id;\n            if (!this.entities[entity.id]) {\n                this.entities[entity.id] = entity;\n            }\n\n            const getRelationNodes = (result, object) => {\n                if (object.uuid === this.currentUuid) {\n                    if (object.uuid === 0) {\n                        object.uuid = JSON.stringify(this.newUuid);\n                        this.newUuid++;\n                    }\n                    object.role = this.relation;\n                    object.cssClass = this.cssClass;\n                    object.colour = this.colour;\n                    object.visibility = this.visibility;\n                    object.isUnknown = this.isUnknown;\n                    object.entity_id = entity_id;\n                    result.push(object);\n                    return result;\n                }\n\n                if (Array.isArray(object.children)) {\n                    const children = object.children.reduce(getRelationNodes, []);\n                    object.children = children;\n                }\n                else if (Array.isArray(object.relations)) {\n                    const relations = object.relations.reduce(getRelationNodes, []);\n                    object.relations = relations;\n                }\n\n                result.push(object);\n                return result;\n            };\n            return this.nodes = this.nodes.reduce(getRelationNodes, []);\n        },\n        dragHeight() {\n            return this.maxY + 80;\n        },\n        dragWidth() {\n            return this.maxX + 200;\n        },\n        pincherWidth() {\n            let drag = this.dragWidth();\n            let me = this.$refs.familytree.clientWidth;\n            return Math.max(drag, me);\n        },\n        pincherHeight() {\n            let drag = this.dragHeight();\n            let me = this.$refs.familytree.clientHeight;\n            return Math.max(drag, me);\n        },\n    },\n\n    mounted() {\n        axios.get(this.api).then((resp) => {\n            this.nodes = resp.data.nodes;\n            this.entities = resp.data.entities;\n            this.texts = resp.data.texts;\n            this.suggestions = resp.data.suggestions;\n            window.ftTexts = this.texts;\n\n            this.originalNodes = JSON.parse(JSON.stringify(resp.data.nodes));\n            this.originalEntities = JSON.parse(JSON.stringify(resp.data.entities));\n            this.isLoading = false;\n        });\n\n        this.emitter.on('editEntity', (data) => {\n            this.resetVariables();\n            this.entity = data.relation.entity_id;\n            this.currentUuid = data.uuid;\n            this.relation = data.relation.role;\n            this.cssClass = data.relation.cssClass;\n            this.colour = data.relation.colour;\n            this.visibility = data.relation.visibility;\n            this.isUnknown = data.relation.isUnknown,\n            this.isEditingEntity = true;\n            if (this.entity) {\n                const ts = document.querySelector(this.entityField)?.tomselect;\n                if (ts) {\n                    ts.addOption({ id: this.entity, text: this.entities[this.entity].name });\n                    ts.setValue(this.entity);\n                }\n            }\n            this.showDialog();\n        });\n\n        this.emitter.on('deleteEntity', (uuid) => {\n            this.resetVariables();\n            this.deleteUuid(uuid);\n        });\n\n        this.emitter.on('addRelation', (uuid) => {\n            this.resetVariables();\n            this.currentUuid = uuid;\n            this.isAddingRelation = true;\n            this.showDialog();\n        });\n        this.emitter.on('editRelation', (data) => {\n            //console.log(data.relation);\n            this.resetVariables();\n            this.currentUuid = data.uuid;\n            this.relation = data.relation.role;\n            this.cssClass = data.relation.cssClass;\n            this.colour = data.relation.colour;\n            this.visibility = data.relation.visibility;\n            this.isUnknown = data.relation.isUnknown,\n            this.isEditingRelation = true;\n            this.showDialog();\n        });\n\n        this.emitter.on('addChild', (uuid) => {\n            this.resetVariables();\n            this.currentUuid = uuid;\n            this.isAddingChild = true;\n            this.showDialog();\n        });\n\n        this.emitter.on('trackX', (x) => {\n            if (x > this.maxX) {\n                this.maxX = x;\n            }\n        });\n        this.emitter.on('trackY', (y) => {\n            if (y > this.maxY) {\n                this.maxY = y;\n            }\n        });\n    },\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/families/RelationLine.vue",
    "content": "<template>\n    <div v-bind:class=\"cssClass('vertical')\" v-bind:style=\"verticalSource()\" v-bind:data-row=\"row\" v-bind:data-col=\"column\"></div>\n    <div v-bind:class=\"cssClass('horizontal')\" v-bind:style=\"horizontal()\" v-bind:data-row=\"row\" v-bind:data-col=\"column\"></div>\n    <div class=\"family-tree-line family-tree-relation-line family-tree-line-vertical absolute\" v-bind:style=\"verticalTarget()\" v-bind:data-row=\"row\" v-bind:data-col=\"column\"></div>\n    <div class=\"family-tree-relation text-center absolute text-sm\" v-bind:style=\"relationBox()\" v-bind:data-row=\"row\" v-bind:data-col=\"column\">\n        <a v-if=\"isEditing\" v-on:click=\"editRelation(uuid, relation)\" class=\"cursor-pointer\" v-bind:title=\"i18n('relation', 'edit')\">\n            <span class=\"truncate\">{{ relationText() }}</span>\n            <i class=\"fa-regular fa-pencil\" aria-hidden=\"true\">\n                <span class=\"sr-only\">{{ i18n('relation', 'edit') }}</span>\n            </i>\n        </a>\n        <span v-else>{{ relationText() }}</span>\n        <br />\n\n        <a v-if=\"isEditing\" v-on:click=\"addChild(uuid)\" class=\"cursor-pointer\" v-bind:title=\"i18n('entity', 'child')\">\n            <i class=\"fa-regular fa-baby\" aria-hidden=\"true\"></i>\n            <i class=\"fa-regular fa-plus\" aria-hidden=\"true\"></i>\n            <span class=\"sr-only\">{{ i18n('entity', 'child') }}</span>\n        </a>\n    </div>\n</template>\n\n<script>\n\nexport default {\n    props: {\n        relation: '',\n        uuid: undefined,\n        sourceX: 0,\n        sourceY: 0,\n        drawX: 0,\n        drawY: 0,\n        sourceColumn: 0,\n        sourceRow: 0,\n        column: 0,\n        row: 0,\n        isEditing: false,\n\n        /*node: undefined,\n        isRelation: false,*/\n    },\n\n    data() {\n        return {\n            height: 15,\n        }\n    },\n\n    methods: {\n        cssClass(type) {\n            let css = 'family-tree-line family-tree-relation-line absolute';\n            if (type === 'vertical') {\n                css += ' family-tree-line-vertical';\n            } else if(type === 'horizontal') {\n                css += ' family-tree-line-horizontal';\n            }\n            return css;\n        },\n        verticalSource() {\n            return (this.relation.colour ? '--family-tree-line: ' + this.relation.colour + ';': '') +\n                'width: 1px; height: ' + this.height + 'px;' +\n                'left: ' + (this.sourceX + (this.entityWidth / 2)) + 'px; ' +\n                'top: ' + (this.sourceY + (this.entityHeight)) + 'px;' +\n                'background-color:' + this.relation.colour + ';'\n            ;\n        },\n        verticalTarget() {\n            return (this.relation.colour ? '--family-tree-line: ' + this.relation.colour + ';': '') +\n                'width: 1px; height: ' + this.height + 'px;' +\n                'left: ' + (this.drawX + (this.entityWidth / 2)) + 'px; ' +\n                'top: ' + (this.drawY + (this.entityHeight)) + 'px; ' +\n                'background-color:' + this.relation.colour + ';'\n            ;\n        },\n        horizontal() {\n            return (this.relation.colour ? '--family-tree-line: ' + this.relation.colour + ';': '') +\n                'height: 1px;' +\n                'left: ' + (this.sourceX + (this.entityWidth / 2)) + 'px; ' +\n                'width: ' + (this.drawX - this.sourceX) + 'px; ' +\n                'top: ' + (this.drawY + this.entityHeight + 15) + 'px'\n            ;\n        },\n        relationBox() {\n            return 'height: 10px;' +\n                'left: ' + (this.drawX - (this.entityWidth / 2 + 20)) + 'px; ' +\n                'width: ' + (this.entityWidth + 20) + 'px; ' +\n                'top: ' + (this.drawY + 57) + 'px'\n                ;\n        },\n        relationText() {\n            return this.relation.role ? this.relation.role : window.ftTexts.unknown;\n        },\n        editRelation(uuid, relation) {\n            this.emitter.emit('editRelation', {uuid: uuid, relation: relation});\n        },\n        addChild(uuid) {\n            this.emitter.emit('addChild', uuid);\n        },\n        i18n(group, action) {\n            return window.ftTexts.modals[group][action].title\n        },\n    },\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/fields/AliasPill.vue",
    "content": "<template>\n    <Tippy\n        placement=\"bottom-start\"\n        trigger=\"click\"\n        :interactive=\"true\"\n        :arrow=\"false\"\n        theme=\"kanka\"\n        @show=\"onShow\"\n        ref=\"tippyRef\"\n    >\n        <button type=\"button\" :class=\"pillClass\">\n            <span class=\"max-w-28 truncate\">{{ alias.name }}</span>\n            <span class=\"opacity-60 text-[10px]\">{{ visibilityLabel }}</span>\n            <span\n                class=\"leading-none flex-none opacity-60 hover:opacity-100 border border-inherit rounded-full flex items-center align-middle w-4 h-4 justify-center\"\n                @click.stop=\"emit('delete', alias)\"\n                :aria-label=\"deleteLabel\"\n            >&times;</span>\n        </button>\n\n        <template #content=\"{ hide }\">\n            <div class=\"flex flex-col gap-4 p-3 w-52\">\n                <div class=\"flex flex-col gap-2\">\n                    <label class=\"text-xs font-medium opacity-80\">{{ aliasNameLabel }}</label>\n                    <input\n                        v-model=\"editName\"\n                        type=\"text\"\n                        class=\"w-full text-sm\"\n                        maxlength=\"45\"\n                        ref=\"popoverInput\"\n                        @keydown.enter.prevent=\"() => { save(); hide() }\"\n                        @keydown.esc=\"hide\"\n                    />\n                </div>\n                <div class=\"flex flex-col gap-2\">\n                    <label class=\"text-xs font-medium opacity-80\">{{ visibleToLabel }}</label>\n                    <select v-model=\"editVisibility\" class=\"w-full text-sm\">\n                        <option v-for=\"opt in visibilityOptions\" :key=\"opt.value\" :value=\"opt.value\">\n                            {{ opt.label }}\n                        </option>\n                    </select>\n                </div>\n                <div class=\"flex gap-1 justify-between\">\n                    <button\n                        type=\"button\"\n                        class=\"btn2 btn-error btn-xs btn-outline\"\n                        @click=\"() => { removeAlias(); hide() }\"\n                    >{{ deleteLabel }}</button>\n                    <button\n                        type=\"button\"\n                        class=\"btn2 btn-primary btn-xs\"\n                        @click=\"() => { save(); hide() }\"\n                    >{{ saveLabel }}</button>\n                </div>\n            </div>\n        </template>\n    </Tippy>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { Tippy } from 'vue-tippy'\n\ntype Alias = { id: number | string; name: string; visibility: string }\n\nconst props = defineProps<{\n    alias: Alias,\n    visibilityOptions: Array<{ value: string; label: string }>,\n    saveLabel: string,\n    deleteLabel: string,\n    aliasNameLabel: string,\n    visibleToLabel: string,\n}>()\n\nconst emit = defineEmits<{\n    update: [alias: Alias],\n    delete: [alias: Alias],\n}>()\n\nconst tippyRef = ref()\nconst popoverInput = ref<HTMLInputElement | null>(null)\nconst editName = ref(props.alias.name)\nconst editVisibility = ref(props.alias.visibility)\n\nconst colorMap: Record<string, string> = {\n    all: 'bg-sky-100 text-sky-700',\n    members: 'bg-stone-200 text-stone-700',\n    admin: 'bg-amber-100 text-amber-700',\n    'admin-self': 'bg-orange-100 text-orange-700',\n    self: 'bg-purple-100 text-purple-700',\n}\n\nconst pillClass = computed(() => {\n    const base = 'flex items-center gap-2 px-3 py-1 rounded-full text-xs cursor-pointer select-none'\n    const color = colorMap[props.alias.visibility] ?? 'bg-base-200 text-base-content'\n    return `${base} ${color}`\n})\n\nconst visibilityLabel = computed(() =>\n    props.visibilityOptions.find(o => o.value === props.alias.visibility)?.label ?? props.alias.visibility\n)\n\nconst onShow = () => {\n    editName.value = props.alias.name\n    editVisibility.value = props.alias.visibility\n    setTimeout(() => popoverInput.value?.focus(), 50)\n}\n\nconst save = () => {\n    if (!editName.value.trim()) {\n        return\n    }\n    emit('update', { ...props.alias, name: editName.value.trim(), visibility: editVisibility.value })\n}\n\nconst removeAlias = () => {\n    emit('delete', props.alias)\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/fields/EntityName.vue",
    "content": "<template>\n    <div class=\"flex flex-col gap-2\">\n        <!-- Label row with + Alias button -->\n        <div class=\"flex items-center justify-between\" :class=\"{ required: required }\">\n            <label :for=\"inputId\" class=\"text-xs font-medium opacity-80\">{{ label }}</label>\n            <button\n                v-if=\"aliasesEnabled\"\n                type=\"button\"\n                :disabled=\"isAliasLimitReached\"\n                :class=\"addBtnClass\"\n                @click=\"toggleAddForm\"\n            >\n                <i class=\"fa-regular fa-plus\" aria-hidden=\"true\" />\n                {{ i18n.addAlias }}\n            </button>\n        </div>\n\n        <!-- Name input -->\n        <input\n            :id=\"inputId\"\n            type=\"text\"\n            name=\"name\"\n            :value=\"name\"\n            :placeholder=\"placeholder\"\n            :required=\"required\"\n            maxlength=\"191\"\n            class=\"w-full\"\n            data-1p-ignore=\"true\"\n            @input=\"onNameInput\"\n        />\n\n        <!-- Similarity alert -->\n        <similar-entity-alert\n            :entities=\"similarEntities\"\n            :label=\"i18n.duplicateWarning\"\n        />\n\n        <!-- Inline add alias form -->\n        <div\n            v-if=\"showAddForm\"\n            class=\"flex flex-wrap gap-1 items-center\"\n        >\n            <input\n                v-model=\"newAliasName\"\n                type=\"text\"\n                class=\"grow min-w-0 text-sm !min-h-3 !py-0.5\"\n                maxlength=\"45\"\n                :placeholder=\"i18n.aliasPlaceholder\"\n                ref=\"addInput\"\n                @keydown.enter.prevent=\"confirmAdd\"\n                @keydown.esc=\"cancelAdd\"\n            />\n            <div class=\"flex gap-2\">\n                <select v-model=\"newAliasVisibility\" class=\"text-sm !min-h-3 !py-0.5\">\n                    <option v-for=\"opt in visibilityOptions\" :key=\"opt.value\" :value=\"opt.value\">\n                        {{ opt.label }}\n                    </option>\n                </select>\n                <div class=\"flex gap-1 flex-none\">\n                    <button\n                        type=\"button\"\n                        class=\"px-3 py-2 rounded-lg bg-primary text-primary-content text-sm hover:opacity-80\"\n                        @click=\"confirmAdd\"\n                    >\n                        <span>Add</span>\n                    </button>\n                    <button\n                        type=\"button\"\n                        class=\"px-2 py-1 rounded-lg hover:bg-base-300 text-xs text-neutral-content\"\n                        @click=\"cancelAdd\"\n                    >\n                        <i class=\"fa-regular fa-xmark\" aria-hidden=\"true\" />\n                    </button>\n                </div>\n            </div>\n        </div>\n\n        <!-- Alias pills -->\n        <div v-if=\"aliasesList.length > 0\" class=\"flex flex-wrap gap-1\">\n            <alias-pill\n                v-for=\"alias in aliasesList\"\n                :key=\"alias.id\"\n                :alias=\"alias\"\n                :visibility-options=\"visibilityOptions\"\n                :save-label=\"i18n.save\"\n                :delete-label=\"i18n.delete\"\n                :alias-name-label=\"i18n.aliasNameLabel\"\n                :visible-to-label=\"i18n.visibleToLabel\"\n                @update=\"updateAlias\"\n                @delete=\"deleteAlias\"\n            />\n        </div>\n\n        <!-- Quota pips & limit warning for non-premium campaigns -->\n        <template v-if=\"aliasLimit !== null && aliasLimit !== undefined\">\n            <div v-if=\"!isAliasLimitReached\" class=\"flex gap-0.5 items-center\">\n                <span\n                    v-for=\"n in aliasLimit\"\n                    :key=\"n\"\n                    :class=\"n <= aliasesList.length ? 'bg-accent' : 'bg-base-300'\"\n                    class=\"h-1.5 w-4 rounded-full transition-colors\"\n                />\n            </div>\n            <div v-if=\"isAliasLimitReached\" class=\"bg-amber-100 text-amber-700 border-amber-700 p-3 rounded-xl text-xs flex gap-1 \">\n                <i class=\"fa-regular fa-warning text-base\" aria-hidden=\"true\"></i>\n                <span v-html=\"i18n.aliasLimitReached\"></span>\n            </div>\n        </template>\n\n        <!-- Serialised aliases for form submission -->\n        <input type=\"hidden\" name=\"aliases\" :value=\"JSON.stringify(aliasesList)\" />\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, nextTick, onMounted } from 'vue'\nimport AliasPill from './AliasPill.vue'\nimport SimilarEntityAlert from './SimilarEntityAlert.vue'\nimport { useEntitySimilarity } from '../../composables/useEntitySimilarity.js'\n\ntype Alias = { id: number | string; name: string; visibility: string }\n\nconst props = defineProps<{\n    label: string,\n    placeholder?: string,\n    modelValue?: string,\n    endPoint?: string,\n    entityId?: string,\n    aliases?: string,\n    aliasLimit?: number | null,\n    upgradeUrl?: string,\n    required?: boolean,\n    i18n?: string,\n}>()\n\nconst emit = defineEmits<{\n    'update:modelValue': [value: string],\n    'update:aliases': [aliases: Alias[]],\n}>()\n\nconst inputId = `entity-name-${Math.random().toString(36).slice(2)}`\n\nconst defaultI18n: Record<string, string> = {\n    addAlias: '+ Alias',\n    aliasPlaceholder: 'Alias name',\n    aliasNameLabel: 'Alias name',\n    visibleToLabel: 'Visible to',\n    duplicateWarning: 'Similar entities found:',\n    save: 'Save',\n    delete: 'Delete',\n    aliasLimitReached: 'Alias limit reached.',\n    upgrade: 'Upgrade',\n    visibilityAll: 'All',\n    visibilityMembers: 'Members',\n    visibilityAdmin: 'Admins',\n    visibilityAdminSelf: 'Me & Admins',\n    visibilitySelf: 'Only me',\n}\n\nconst i18n = computed(() => {\n    const parsed: Record<string, string> = props.i18n ? JSON.parse(props.i18n) : {}\n    return { ...defaultI18n, ...parsed }\n})\n\nconst visibilityOptions = computed(() => [\n    { value: 'all', label: i18n.value.visibilityAll },\n    { value: 'members', label: i18n.value.visibilityMembers },\n    { value: 'admin', label: i18n.value.visibilityAdmin },\n    { value: 'admin-self', label: i18n.value.visibilityAdminSelf },\n    { value: 'self', label: i18n.value.visibilitySelf },\n])\n\n// Whether alias management is surfaced at all (endPoint must be set for the name field check)\nconst aliasesEnabled = computed(() => props.aliases !== undefined)\n\n// Name state\nconst name = ref(props.modelValue ?? '')\n\n// Alias state\nconst aliasesList = ref<Alias[]>(props.aliases ? JSON.parse(props.aliases) : [])\n\n// Add form state\nconst showAddForm = ref(false)\nconst newAliasName = ref('')\nconst newAliasVisibility = ref('all')\nconst addInput = ref<HTMLInputElement | null>(null)\n\nlet nextTempId = -1\n\nconst isAliasLimitReached = computed(() =>\n    props.aliasLimit !== null &&\n    props.aliasLimit !== undefined &&\n    aliasesList.value.length >= (props.aliasLimit as number)\n)\n\nconst addBtnClass = computed(() => {\n    const base = 'text-link text-xs'\n    return isAliasLimitReached.value\n        ? `${base} opacity-40 cursor-not-allowed`\n        : base\n})\n\n// Similarity check\nconst { similarEntities, setup: setupSimilarity, setName } = useEntitySimilarity()\n\nonMounted(() => {\n    if (props.endPoint) {\n        setupSimilarity(props.endPoint, props.entityId ?? null)\n    }\n})\n\nconst onNameInput = (e: Event) => {\n    const value = (e.target as HTMLInputElement).value\n    name.value = value\n    emit('update:modelValue', value)\n    if (props.endPoint) {\n        setName(value)\n    }\n}\n\n// Add alias\nconst toggleAddForm = () => {\n    if (isAliasLimitReached.value) {\n        return\n    }\n    showAddForm.value = !showAddForm.value\n    if (showAddForm.value) {\n        newAliasName.value = ''\n        newAliasVisibility.value = 'all'\n        nextTick(() => addInput.value?.focus())\n    }\n}\n\nconst confirmAdd = () => {\n    const trimmed = newAliasName.value.trim()\n    if (!trimmed) {\n        return\n    }\n    aliasesList.value = [\n        ...aliasesList.value,\n        { id: nextTempId--, name: trimmed, visibility: newAliasVisibility.value },\n    ]\n    emit('update:aliases', aliasesList.value)\n    cancelAdd()\n}\n\nconst cancelAdd = () => {\n    showAddForm.value = false\n    newAliasName.value = ''\n}\n\n// Edit alias (from popover)\nconst updateAlias = (updated: Alias) => {\n    aliasesList.value = aliasesList.value.map(a => a.id === updated.id ? updated : a)\n    emit('update:aliases', aliasesList.value)\n}\n\n// Delete alias\nconst deleteAlias = (alias: Alias) => {\n    aliasesList.value = aliasesList.value.filter(a => a.id !== alias.id)\n    emit('update:aliases', aliasesList.value)\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/fields/SimilarEntityAlert.vue",
    "content": "<template>\n    <div v-if=\"entities.length > 0\" class=\"flex items-start gap-1.5 text-warning-content text-xs\">\n        <i class=\"fa-regular fa-triangle-exclamation mt-0.5 flex-none\" aria-hidden=\"true\" />\n        <span>\n            {{ label }}\n            <span class=\"flex flex-wrap gap-1 mt-0.5\">\n                <a\n                    v-for=\"entity in entities\"\n                    :key=\"entity.url\"\n                    :href=\"entity.url\"\n                    target=\"_blank\"\n                    class=\"text-link underline\"\n                >{{ entity.name }}</a>\n            </span>\n        </span>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps<{\n    entities: Array<{ name: string; url: string }>,\n    label: string,\n}>()\n</script>\n"
  },
  {
    "path": "resources/js/components/icons/GridSvg.vue",
    "content": "<template>\n    <svg v-bind:class=\"iconClass()\" viewBox=\"0 -0.5 21 21\"  xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" aria-hidden=\"true\">\n        <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n            <g transform=\"translate(-219.000000, -200.000000)\" fill=\"currentcolor\">\n                <g id=\"icons\" transform=\"translate(56.000000, 160.000000)\">\n                    <path d=\"M181.9,54 L179.8,54 C178.63975,54 177.7,54.895 177.7,56 L177.7,58 C177.7,59.105 178.63975,60 179.8,60 L181.9,60 C183.06025,60 184,59.105 184,58 L184,56 C184,54.895 183.06025,54 181.9,54 M174.55,54 L172.45,54 C171.28975,54 170.35,54.895 170.35,56 L170.35,58 C170.35,59.105 171.28975,60 172.45,60 L174.55,60 C175.71025,60 176.65,59.105 176.65,58 L176.65,56 C176.65,54.895 175.71025,54 174.55,54 M167.2,54 L165.1,54 C163.93975,54 163,54.895 163,56 L163,58 C163,59.105 163.93975,60 165.1,60 L167.2,60 C168.36025,60 169.3,59.105 169.3,58 L169.3,56 C169.3,54.895 168.36025,54 167.2,54 M181.9,47 L179.8,47 C178.63975,47 177.7,47.895 177.7,49 L177.7,51 C177.7,52.105 178.63975,53 179.8,53 L181.9,53 C183.06025,53 184,52.105 184,51 L184,49 C184,47.895 183.06025,47 181.9,47 M174.55,47 L172.45,47 C171.28975,47 170.35,47.895 170.35,49 L170.35,51 C170.35,52.105 171.28975,53 172.45,53 L174.55,53 C175.71025,53 176.65,52.105 176.65,51 L176.65,49 C176.65,47.895 175.71025,47 174.55,47 M167.2,47 L165.1,47 C163.93975,47 163,47.895 163,49 L163,51 C163,52.105 163.93975,53 165.1,53 L167.2,53 C168.36025,53 169.3,52.105 169.3,51 L169.3,49 C169.3,47.895 168.36025,47 167.2,47 M181.9,40 L179.8,40 C178.63975,40 177.7,40.895 177.7,42 L177.7,44 C177.7,45.105 178.63975,46 179.8,46 L181.9,46 C183.06025,46 184,45.105 184,44 L184,42 C184,40.895 183.06025,40 181.9,40 M174.55,40 L172.45,40 C171.28975,40 170.35,40.895 170.35,42 L170.35,44 C170.35,45.105 171.28975,46 172.45,46 L174.55,46 C175.71025,46 176.65,45.105 176.65,44 L176.65,42 C176.65,40.895 175.71025,40 174.55,40 M169.3,42 L169.3,44 C169.3,45.105 168.36025,46 167.2,46 L165.1,46 C163.93975,46 163,45.105 163,44 L163,42 C163,40.895 163.93975,40 165.1,40 L167.2,40 C168.36025,40 169.3,40.895 169.3,42\">\n                    </path>\n                </g>\n            </g>\n        </g>\n    </svg>\n</template>\n<script setup>\nconst props = defineProps({\n    size: Number\n});\n\nfunction iconClass() {\n    return 'w-' + props.size + ' h-' + props.size;\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/Campaign.vue",
    "content": "<template>\n    <a :class=\"campaignClass()\" v-bind:href=\"campaign.url\" :style=\"{backgroundImage: backgroundImage()}\" :title=\"campaign.name\">\n        <div class=\"absolute top-2 right-2 text-sm text-boost\" v-if=\"campaign.is_boosted\">\n            <i class=\"fa-regular fa-gem\" aria-label=\"Premium campaign\"></i>\n        </div>\n        <div class=\"flex items-end justify-center name w-full text-xs p-2 pt-6 text-center\" v-html=\"campaign.name\">\n        </div>\n    </a>\n</template>\n\n\n<script setup lang=\"ts\">\n\nconst props = defineProps<{\n    campaign: Object,\n}>()\nconst backgroundImage = () => {\n    return props.campaign.image ? 'url(' + props.campaign.image + ')' : '';\n}\nconst campaignClass = () => {\n    return 'campaign flex items-end border border-solid rounded-lg cover-background relative h-24 overflow-hidden text-break shadow-xs hover:shadow-md border-0'\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/Lookup/EntityPreview.vue",
    "content": "<template>\n    <div class=\"entity-header p-3 bg-entity-focus\">\n        <div class=\"w-full flex items-center\">\n\n            <a class=\"text-2xl font-extrabold entity-name\" v-bind:href=\"entity.link\" :title=\"entity.name\" v-html=\"entity.name\">\n            </a>\n\n            <i v-if=\"entity.status\" :class=\"entity.status.icon + ' mx-2'\" aria-hidden=\"true\" :title=\"entity.status.tooltip\"></i>\n\n            <a class=\"ml-2 text-xs\" target=\"_blank\" v-bind:href=\"entity.link\">\n                <i class=\"fa-regular fa-external-link\" aria-hidden=\"true\" aria-label=\"Open in a new window\"></i>\n            </a>\n        </div>\n        <div class=\"block w-full\" v-if=\"hasTitle()\" v-html=\"entity.title\">\n        </div>\n        <div class=\"my-1 w-full flex flex-wrap gap-1\" v-if=\"entity.tags.length > 0\">\n            <a :class=\"tagClass(tag)\" :style=\"tag.style || ''\" v-for=\"tag in entity.tags\"\n                v-bind:href=\"tag.link\"\n               :data-tag-id=\"tag.id\"\n               :data-tag-slug=\"tag.slug\"\n                >\n                <i v-if=\"tag.icon\" :class=\"tag.icon\" aria-hidden=\"true\"></i>\n                <span v-else v-html=\"tag.name\"></span>\n            </a>\n        </div>\n        <a class=\"block w-full cursor-pointer my-2\"\n           v-if=\"entity.location\"\n           v-bind:href=\"entity.location.link\"\n           :data-tag=\"entity.id\"\n        >\n            <i class=\"fa-duotone circle-location-arrow\" aria-hidden=\"true\" aria-label=\"Location\"></i>\n            <span v-html=\"entity.location.name\"></span>\n        </a>\n        <div class=\"flex gap-1 items-center my-2\" v-else-if=\"entity.locations\">\n            <a class=\"cursor-pointer\"\n               v-for=\"location in entity.locations\"\n               v-bind:href=\"location.link\"\n               :data-tag=\"location.id\"\n            >\n                <i class=\"fa-duotone circle-location-arrow\" aria-hidden=\"true\" aria-label=\"Location\"></i>\n                <span v-html=\"location.name\"></span>\n            </a>\n        </div>\n        <a\n            v-if=\"entity.image\"\n            v-bind:href=\"entity.link\"\n            v-bind:style=\"{backgroundImage: backgroundImage()}\"\n            :title=\"entity.name\"\n            class=\"rounded cover-background block w-full aspect-square\">\n        </a>\n    </div>\n    <div class=\"entity-sections\">\n        <div class=\"tabs flex my-2 justify-center items-center border-solid border-slate-600 border-b-2 border-r-0 border-t-0 border-l-0\">\n            <div v-bind:class=\"tabClass('profile')\" v-on:click=\"switchTab('profile')\">{{ entity.texts.profile }}</div>\n            <div v-bind:class=\"tabClass('links')\" v-on:click=\"switchTab('links')\">{{ entity.texts.connections }}</div>\n            <div v-bind:class=\"tabClass('access')\" v-on:click=\"switchTab('access')\"></div>\n        </div>\n        <div class=\"tab-profile p-5 flex flex-col gap-5\" v-if=\"focus_profile\">\n            <div class=\"entity-pinned-attributes flex flex-col gap-3\" v-if=\"entity.attributes.length > 0\">\n                <div v-for=\"attribute in entity.attributes\" class=\"\" v-bind:data-attribute=\"attribute.name\" v-bind:data-target=\"attribute.id\">\n                    <span class=\"inline-block uppercase font-extrabold mr-1\" v-html=\"attribute.name\"></span>\n                    <span v-html=\"attribute.value\"></span>\n                </div>\n            </div>\n          <hr  v-if=\"entity.attributes.length > 0\" />\n          <div class=\"flex flex-col gap-3\">\n            <div v-for=\"profile in entity.profile\" class=\"\" v-bind:class=\"profileClass(profile)\">\n                <div class=\"uppercase font-extrabold truncate\" v-html=\"profile.field\"></div>\n                <div v-html=\"profile.value\"></div>\n            </div>\n          </div>\n        </div>\n        <div class=\"tab-links p-3\" v-if=\"focus_pins\">\n            <LookupEntity  v-for=\"relation in entity.connections\"\n                :entity=\"relation\">\n            </LookupEntity>\n            <p class=\"text-center italic\" v-if=\"entity.connections.length === 0\">\n                {{ entity.texts['no-connections'] }}\n            </p>\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport LookupEntity from \"./LookupEntity.vue\";\nimport {ref} from \"vue\";\n\nconst props = defineProps<{\n  entity: Object,\n}>()\n\nconst focus_profile = ref(true);\nconst focus_pins = ref(false);\nconst focus_access = ref(false);\n\nconst hasTitle = () => {\n    return props.entity.title;\n}\nconst tagClass = (tag) => {\n    return 'inline-block rounded-xl px-3 py-1 bg-base-100 text-base-content text-xs';\n}\n\nconst backgroundImage = () => {\n    return 'url(\\'' + props.entity.image + '\\')';\n}\n\nconst tabClass = (tab) => {\n    let cls = 'p-1 px-1 mx-1 pt-2 select-none text-center truncate border-b-2 border-solid border-r-0 border-t-0 border-l-0';\n    if ((tab === 'profile' && focus_profile.value) || (tab === 'links' && focus_pins.value) || (tab === 'access' && focus_access.value)) {\n        cls += ' font-black border-slate-600';\n    } else {\n        cls += ' cursor-pointer border-base-100';\n    }\n\n    return cls;\n}\n\nconst switchTab = (tab) => {\n    focus_profile.value = false;\n    focus_pins.value = false;\n    focus_access.value = false;\n    if (tab === 'profile') {\n        focus_profile.value = true;\n    } else if (tab === 'links') {\n        focus_pins.value = true;\n    } else if (tab === 'access') {\n        focus_access.value = true;\n    }\n}\n\nconst profileClass = (profile) => {\n    return 'entity-profile-' + profile.slug;\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/Lookup/LookupEntity.vue",
    "content": "<template>\n    <a :class=\"boxCss()\"\n       v-bind:data-id=\"entity.id\"\n       v-bind:href=\"entity.link\"\n    >\n        <div class=\"flex-none\">\n            <div\n                v-bind:style=\"{backgroundImage: backgroundImage(entity)}\"\n                :title=\"entity.name\"\n                class=\"rounded cover-background block h-16 w-16\" />\n        </div>\n        <div class=\"grow truncate pl-1 text-base-content\"  @click=\"preview\">\n            <div class=\"font-extrabold entity-name truncate\" :title=\"entity.name\" v-html=\"entity.name\">\n            </div>\n            <div class=\"entity-type text-xs\" v-html=\"entity.type\">\n            </div>\n        </div>\n    </a>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits(['preview'])\n\nconst props = defineProps<{\n    entity: undefined,\n}>()\n\nconst backgroundImage = (entity) => {\n    return 'url(\\'' + entity.image + '\\')';\n}\nconst preview = (event) => {\n    event.stopPropagation(); // Prevent the click event from propagating to the <a>\n    event.preventDefault();\n    // console.log('preview', entity);\n    emit('preview', props.entity);\n}\n\nconst boxCss = () => {\n    let css = 'flex justify-center gap-1 cursor-pointer hover:bg-base-200 rounded w-full focus:bg-base-200';\n    return css;\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/Lookup/LookupPage.vue",
    "content": "<template>\n    <a :class=\"boxCss()\" :href=\"page.url\" tabindex=\"0\">\n        <div class=\"flex-none h-4 w-4\">\n            <i class=\"fa-solid fa-angles-right\" aria-hidden=\"true\" />\n        </div>\n        <div class=\"grow truncate\">\n            <div class=\"entity-name truncate\" :title=\"page.name\" v-html=\"page.name\">\n            </div>\n        </div>\n    </a>\n</template>\n\n<script setup lang=\"ts\">\n\nconst props = defineProps<{\n    page: undefined,\n}>()\n\nconst boxCss = () => {\n    let css = 'flex justify-center gap-2 cursor-pointer w-full text-link';\n    return css;\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/NavSearch.vue",
    "content": "<template>\n    <div v-click-outside=\"onClickOutside\" class=\"flex grow mr-2\">\n        <div class=\"relative grow field flex items-center\">\n            <input type=\"text\" class=\"leading-4 w-20 md:w-full\" maxlength=\"25\"\n                ref=\"searchField\"\n                id=\"entity-lookup\"\n                data-shortcut=\"k\"\n                data-shortcut-action=\"focus\"\n                v-model=\"term\"\n                v-on:click=\"focus()\"\n                @focus=\"focus()\"\n                @keydown.esc=\"escape()\"\n                :placeholder=\"placeholder\"\n            />\n            <span class=\"absolute right-1  hidden md:inline\">\n                <span class=\"flex-none keyboard-shortcut py-1\" id=\"lookup-kb-shortcut\" data-toggle=\"tooltip\" v-bind:data-title=\"keyboard_tooltip\" data-html=\"true\" data-placement=\"bottom\">\n                    K\n                </span>\n            </span>\n        </div>\n\n        <aside class=\"search-drawer absolute top-0 left-0 mt-12 h-sidebar w-sidebar bg-navbar bg-base-100 shadow-r overflow-y-auto  \" tabindex=\"-1\" v-if=\"show_recent || show_loading || show_preview\">\n            <div class=\"text-center\" v-if=\"show_loading\">\n                <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\" aria-label=\"Loading\"></i>\n            </div>\n            <div class=\"search-recent bg-lookup p-2 min-h-full shadow-r flex flex-col items-stretch\" v-if=\"show_recent\">\n                <div class=\"flex-none\" v-if=\"!show_results\">\n                    <p class=\"italic text-xs text-center\">\n                        {{ texts.hint}}\n                    </p>\n                </div>\n                <div class=\"grow flex flex-col gap-5 p-2\">\n                    <div class=\"search-results flex flex-col gap-2\" v-if=\"show_results\">\n                        <div class=\"text-sm uppercase\">{{ texts.results }}</div>\n\n                        <div class=\"text-neutral-content text-sm\" v-if=\"results.length === 0 && pages.length === 0\">\n                            {{ texts.empty_results }}\n                        </div>\n                        <div v-else class=\"flex flex-col gap-2\">\n                            <LookupEntity\n                                v-for=\"entity in results\"\n                                :entity=\"entity\"\n                                @keydown.esc=\"escape()\"\n                                @preview=\"loadPreview\"\n                            >\n                            </LookupEntity>\n                            <LookupPage\n                                v-for=\"page in pages\"\n                                :page=\"page\">\n                            </LookupPage>\n                        </div>\n\n                        <a class=\"grow text-sm uppercase hover:underline text-link\" v-bind:href=\"searchFullTextUrl()\">\n                            {{ texts.fulltext }}\n                        </a>\n\n                    </div>\n                    <div class=\"recent-searches flex flex-col gap-2\" v-if=\"recent.length > 0\">\n                        <div class=\"text-sm uppercase \">{{ texts.recents }}</div>\n\n                        <LookupEntity\n                            v-for=\"entity in recent\"\n                            :entity=\"entity\"\n                            @preview=\"loadPreview\"\n                            @keydown.esc=\"escape()\"\n                        >\n                        </LookupEntity>\n                    </div>\n\n                    <div class=\"flex gap-5 justify-center\" v-if=\"bookmarks.length > 0\">\n                        <button class=\"grow text-sm uppercase hover:underline\"\n                                v-bind:class=\"this.modeClass(true)\"\n                                v-if=\"bookmarks.length > 0\"\n                                @click=\"showBookmarks()\">{{ texts.bookmarks }}\n                        </button>\n                        <button class=\"grow text-sm uppercase hover:underline\"\n                                v-bind:class=\"this.modeClass(false)\"\n                                @click=\"showIndexes()\">\n                            {{ texts.index }}\n                        </button>\n                    </div>\n\n                    <div class=\"flex flex-col gap-4\" v-if=\"show_bookmarks\">\n                        <a\n                            v-for=\"bookmark in bookmarks\"\n                            v-bind:href=\"bookmark.url\"\n                            v-on:click.stop\n                            :title=\"bookmark.text\"\n                            class=\"flex gap-2 items-center text-link \">\n                            <i class=\"w-4\" v-bind:class=\"bookmark.icon\" aria-hidden=\"true\"></i>\n                            <span v-html=\"bookmark.text\"></span>\n                        </a>\n                    </div>\n                    <div class=\"flex flex-col gap-4\" v-else>\n                        <a\n                            v-for=\"link in indexes\"\n                            v-bind:href=\"link.url\"\n                            v-on:click.stop\n                            :title=\"link.name\"\n                            class=\"flex gap-2 items-center text-link \">\n                            <i class=\"w-4 text-center\" v-bind:class=\"link.icon\" aria-hidden=\"true\"></i>\n                            <span v-html=\"link.name\"></span>\n                        </a>\n                    </div>\n                </div>\n\n                <div class=\"flex-none text-xs text-center\" v-if=\"!show_loading\">\n                    <hr />\n                    <p class=\"italic text-xs text-center\" v-html=\"texts.keyboard\" />\n                </div>\n            </div>\n            <div class=\"search-preview bg-lookup min-h-full shadow-r\" v-if=\"show_preview\">\n                <EntityPreview\n                    :entity=\"preview_entity\">\n                </EntityPreview>\n            </div>\n        </aside>\n    </div>\n\n</template>\n\n<script>\nimport LookupEntity from \"./Lookup/LookupEntity.vue\";\nimport LookupPage from \"./Lookup/LookupPage.vue\";\nimport EntityPreview from \"./Lookup/EntityPreview.vue\";\nimport vClickOutside from \"click-outside-vue3\";\nexport default {\n    directives: {\n        clickOutside: vClickOutside.directive\n    },\n    /* Properties provided by the html component initialisation */\n    props: {\n        /* API used for making searches */\n        api_lookup: String,\n        /* API used to load recently viewed entities from the user */\n        api_recent: String,\n        /* Placeholder text for the search field */\n        placeholder: String,\n        /** Tooltip for the keyboard shortcut **/\n        keyboard_tooltip: String,\n    },\n    components: {\n        LookupEntity,\n        EntityPreview,\n        LookupPage,\n    },\n    data() {\n        return {\n            has_drawer: false,\n            term: null,\n            show_loading: false,\n            show_recent: false,\n            show_preview: false,\n            show_results: false,\n            show_bookmarks: false,\n            recent: [],\n            bookmarks: [],\n            indexes: [],\n            results: [],\n            pages: [],\n            cached: {},\n            cachedPages: {},\n            has_recent: false,\n            texts: {},\n            timeout_id: null,\n            preview_entity: null,\n        }\n    },\n    watch: {\n        term(after, before) {\n            this.termChanged();\n        }\n    },\n    methods: {\n        termChanged() {\n            let lookup = this.term.trim();\n            if (lookup.length < 3) {\n                return;\n            }\n\n            // Cancel previous timeout if it's set\n            if (this.timeout_id !== undefined) {\n                clearTimeout(this.timeout_id);\n            }\n            // Start a timer to get data from the db\n            this.show_loading = true;\n            this.timeout_id = setTimeout(() => this.lookup(), 500);\n        },\n        lookup() {\n            let term = this.term.trim();\n\n            let cacheKey = term.toLowerCase ().replace (/ /g,'-').replace (/ [^\\w-]+/g,'');\n            if (this.cached[cacheKey]) {\n                return this.displayCached(cacheKey);\n            }\n\n            fetch(this.api_lookup + '?' + new URLSearchParams({q: term, v2: true}))\n                .then(response => response.json())\n                .then(response => this.parseLookupResponse(response, cacheKey));\n        },\n        focus() {\n            // Unlogged in users don't get a recent list pop out when focusing on the search field\n            if (!this.api_recent) {\n                //console.log('no recent');\n                return;\n            }\n            this.show_preview = false;\n            this.has_drawer = true;\n            this.fetch();\n        },\n        // User pressed ESC while focused on the search field\n        escape() {\n            if (this.timeout_id !== undefined) {\n                clearTimeout(this.timeout_id);\n            }\n            this.close();\n        },\n        // Get the recent searches from the user\n        fetch() {\n            if (this.has_recent) {\n                this.show_recent = true;\n                return;\n            }\n\n            this.show_loading = true;\n            fetch(this.api_recent)\n                .then(response => response.json())\n                .then(response => {\n                this.recent = response.recent;\n                this.bookmarks = response.bookmarks;\n                this.indexes = response.indexes;\n                this.texts.recents = response.texts.recents;\n                this.texts.results = response.texts.results;\n                this.texts.hint = response.texts.hint;\n                this.texts.bookmarks = response.texts.bookmarks;\n                this.texts.index = response.texts.index;\n                this.texts.keyboard = response.texts.keyboard;\n                this.texts.empty_results = response.texts.empty_results;\n                this.texts.fulltext = response.texts.fulltext;\n                this.texts.fulltext_route = response.fulltext_route;\n                this.show_loading = false;\n                this.show_recent = true;\n                this.has_recent = true;\n                this.show_bookmarks = this.bookmarks.length > 0;\n            }).catch(error => {\n                // Probably un-logged user\n                this.show_loading = false;\n                this.show_recent = true;\n                this.has_recent = false;\n            });\n        },\n        // Load results from a search\n        parseLookupResponse(response, cacheKey) {\n            this.results = response.entities;\n            this.pages = response.pages;\n            this.cached[cacheKey] = response.entities;\n            this.cachedPages[cacheKey] = response.pages;\n            this.showResults();\n        },\n        displayCached(key) {\n            this.results = this.cached[key];\n            this.pages = this.cachedPages[key];\n            this.showResults();\n        },\n        showResults() {\n            this.timeout_id = null;\n            this.show_preview = false;\n            this.show_loading = false;\n            this.show_results = true;\n        },\n        // Preview an entity\n        loadPreview(entity) {\n          this.show_loading = true;\n          fetch(entity.preview)\n              .then(response => response.json())\n              .then(response => this.parsePreviewResponse(response));\n        },\n        parsePreviewResponse(response) {\n            this.preview_entity = response;\n            //console.log('preview_entity', this.preview_entity);\n            this.show_loading = false;\n            this.show_preview = true;\n            this.show_recent = false;\n        },\n        // When clicking outside  the area, close the search panel\n        onClickOutside (event) {\n            //console.log('Clicked outside. Event: ', event)\n            this.close();\n        },\n        close() {\n            this.show_recent = false;\n            this.show_loading = false;\n            this.show_preview = false;\n            this.$refs.searchField.blur();\n        },\n        showBookmarks() {\n            this.show_bookmarks = true;\n        },\n        searchFullTextUrl() {\n            return `${this.texts.fulltext_route}?term=${this.term}`;\n        },\n        showIndexes() {\n            this.show_bookmarks = false;\n        },\n        modeClass(bookmark) {\n            if (bookmark && this.show_bookmarks) {\n                return ' underline';\n            } else if (!bookmark && !this.show_bookmarks) {\n                return ' underline';\n            }\n            return '';\n        }\n    },\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/NavSwitcher.vue",
    "content": "<template>\n    <div class=\"nav-switcher flex items-center justify-center align-middle h-12 gap-2\">\n        <div class=\"campaigns inline cursor-pointer text-center text-2xl hover:text-primary-focus\" v-on:click=\"openCampaigns()\" aria-label=\"Switch campaigns\" tabindex=\"0\" role=\"button\">\n            <GridSvg :size=\"7\" />\n            <span class=\"sr-only\">Campaigns</span>\n        </div>\n        <div class=\"profile flex items-center cursor-pointer text-center uppercase\" v-on:click=\"openProfile()\" aria-label=\"Profile settings\" tabindex=\"0\" role=\"button\">\n            <div class=\"indicator relative inline-flex w-max\">\n                <span class=\"notification-badge left-auto top-auto w-fit inline-flex absolute content-center items-center z-10\" v-if=\"show_alerts\"></span>\n                <div class=\"profile-box rounded-lg p-2 text-center font-bold\" v-if=\"showInitials()\">\n                    {{ initials }}\n                </div>\n                <div class=\"w-9 h-9 rounded-lg cover-background\" v-bind:style=\"{backgroundImage: profilePictureUrl()}\" v-else></div>\n            </div>\n        </div>\n    </div>\n    <div class=\"navigation-drawer bg-base-100 h-full fixed top-0 right-0 rounded-l-2xl shadow-lg flex flex-col\" v-if=\"is_expanded\" v-click-outside=\"onClickOutside\">\n        <div class=\"temporary p-8 text-center\" v-if=\"is_loading\">\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n        </div>\n        <template v-else>\n            <div class=\"header flex flex-none\">\n                <div :class=\"blockClass(view_campaigns)\" v-on:click=\"openCampaigns()\" tabindex=\"0\" role=\"button\" aria-label=\"Campaign list\">\n                    <div class=\"full flex items-center gap-4\" v-if=\"view_campaigns\">\n                        <div class=\"flex-none\">\n                            <GridSvg :size=\"6\" />\n                        </div>\n                        <div class=\"grow\">\n                            <div class=\"text-sm font-semibold\">{{ campaigns.texts.campaigns }}</div>\n                            <div class=\"text-xs text-neutral-content\">{{campaigns.texts.count }}</div>\n                        </div>\n                    </div>\n                    <div class=\"flex items-center justify-center h-full\" :title=\"campaigns.texts.campaigns\" v-else>\n                        <GridSvg :size=\"6\" />\n                    </div>\n                </div>\n                <div :class=\"blockClass(view_profile)\" v-on:click=\"openProfile()\" tabindex=\"0\" role=\"button\" aria-label=\"Profile pane\">\n                    <div class=\"full flex items-center gap-4\" v-if=\"view_profile\">\n                        <div class=\"flex-none profile-box rounded-lg p-2 text-center uppercase font-bold\" v-if=\"showInitials()\">\n                            {{ initials }}\n                        </div>\n                        <div class=\"flex-none w-9 h-9 rounded-lg cover-background\" v-bind:style=\"{backgroundImage: profilePictureUrl()}\" v-else></div>\n\n                        <div class=\"grow\">\n                            <div class=\"text-sm font-semibold\">{{ profile.name }}</div>\n                            <div class=\"text-xs text-neutral-content\">{{ profile.email }}</div>\n                        </div>\n                    </div>\n                    <div class=\"\" v-else :title=\"profile.your_profile\">\n                        <div class=\"flex-none profile-box rounded-lg p-2 text-center uppercase font-bold\" v-if=\"showInitials()\">\n                            {{ initials }}\n                        </div>\n                        <div class=\"flex-none w-9 h-9 rounded-lg cover-background\" v-bind:style=\"{backgroundImage: profilePictureUrl()}\" v-else></div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"grow overflow-y-auto\">\n                <div class=\"profile p-5 flex flex-col gap-5\" v-if=\"view_profile\">\n                    <div class=\"notifications\" v-if=\"notifications.title\">\n                        <div class=\"flex w-full py-2 items-center text-xs justify-between\">\n                            <div class=\"font-semibold text-neutral-content uppercase\">\n                                {{ notifications.title }}\n                            </div>\n                            <a v-bind:href=\"notifications.all.url\" class=\"text-link\">\n                                {{ notifications.all.text}}\n                            </a>\n                        </div>\n\n                        <div class=\"flex flex-col gap-2\">\n                            <Notification\n                                v-for=\"notification in notifications.messages\"\n                                :notification=\"notification\"\n                                @read=\"readNotification\">\n                            </Notification>\n                        </div>\n                        <div class=\"no-notifications help-block text-neutral-content italic\" v-if=\"notifications.messages.length === 0\">\n                            {{  notifications.none }}\n                        </div>\n                    </div>\n\n                    <div class=\"releases\" v-if=\"releases.title && releases.releases.length > 0\">\n                        <div class=\"flex w-full py-2 text-xs\">\n                            <div class=\"font-semibold text-neutral-content uppercase\">\n                                {{ releases.title }}\n                            </div>\n                        </div>\n\n                        <div class=\"flex flex-col gap-2\">\n                            <Release\n                                v-for=\"release in releases.releases\"\n                                :release=\"release\"\n                                @read=\"readRelease\">\n                            </Release>\n                        </div>\n                    </div>\n\n\n                    <div class=\"subscription\" v-if=\"!profile.is_impersonating && profile.subscription\">\n                        <div class=\"uppercase font-bold py-2 text-xs font-semibold text-neutral-content\">{{ profile.subscription.title }}</div>\n                        <a class=\"border rounded-lg flex justify-center items-center hover:shadow-md border-base-300 text-link\" v-bind:href=\"profile.urls.subscription\">\n                            <div class=\"flex-none p-2\">\n                                <img class=\"w-16 h-16\" v-bind:src=\"profile.subscription.image\" v-bind:alt=\"profile.subscription.tier\">\n                            </div>\n                            <div class=\"grow p-2\">\n                                <div class=\"font-semibold text-md\">\n                                    {{ profile.subscription.tier}}\n                                </div>\n                                <div class=\"text-base-content\" v-if=\"profile.subscription.tier !== 'Kobold'\">\n                                    {{ profile.subscription.created }}<br />\n                                    {{ profile.subscription.boosters }}\n                                </div>\n                                <div class=\"text-base-content\" v-else>\n                                    {{ profile.subscription.call_to_action }}\n                                    <div class=\"link flex gap-1 items-center\">{{ profile.subscription.call_to_action_2 }}\n                                        <i class=\"fa-duotone fa-credit-card\" aria-hidden=\"true\" v-if=\"pro\"></i>\n                                        <i class=\"fa-regular fa-credit-card\" aria-hidden=\"true\" v-else></i>\n                                        <i class=\"fa-brands fa-paypal\" aria-hidden=\"true\"></i>\n                                    </div>\n                                </div>\n                            </div>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"campaigns p-5\" v-else>\n                    <div v-if=\"!profile.is_impersonating\" class=\"campaigns flex flex-col gap-5\">\n                      <div class=\"flex flex-col gap-2\">\n                        <div class=\"flex w-full gap-2 text-xs justify-between\">\n                            <div class=\"uppercase font-semibold text-neutral-content\">\n                              {{campaigns.texts.campaigns }}\n                            </div>\n                            <a v-bind:href=\"campaigns.urls.reorder\" class=\"text-link\" v-if=\"campaigns.member.length > 0\">\n                                <i class=\"fa-regular fa-arrow-up-arrow-down\" aria-hidden=\"true\"></i>\n                                {{ campaigns.texts.reorder}}\n                            </a>\n                        </div>\n\n                        <div class=\"grid grid-cols-2 md:grid-cols-3 gap-5\">\n                            <Campaign v-for=\"campaign in campaigns.member\"\n                                      :campaign=\"campaign\">\n                            </Campaign>\n\n                            <a v-bind:href=\"campaigns.urls.new\" class=\"new-campaign flex items-center text-center border-dashed border rounded-lg h-24 p-2 overflow-hidden text-link\">\n                                <span class=\"text-xs text-break uppercase\">\n                                    <i class=\"fa-regular fa-plus\" aria-hidden=\"true\" style=\"display: none\"></i>\n                                    {{ campaigns.texts.new }}\n                                </span>\n                            </a>\n                        </div>\n                      </div>\n\n                      <div class=\"flex flex-col gap-2\">\n                        <p class=\"uppercase text-xs font-semibold text-neutral-content\" v-if=\"!profile.is_impersonating\">\n                            {{ campaigns.texts.followed }}\n                        </p>\n\n                        <div class=\"grid grid-cols-2 md:grid-cols-3 gap-5 following\"  v-if=\"!profile.is_impersonating\">\n                            <Campaign v-for=\"campaign in campaigns.following\"\n                                      :campaign=\"campaign\">\n                            </Campaign>\n\n\n                            <a v-bind:href=\"campaigns.urls.follow\" class=\"new-campaign flex items-center text-center border-dashed border rounded-lg h-24 p-2 overflow-hidden text-link\">\n                            <span class=\"text-xs uppercase text-break\">\n                                {{ campaigns.texts.follow }}\n                            </span>\n                            </a>\n                        </div>\n                      </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"flex-none p-5\" v-if=\"view_profile\">\n                <div class=\"flex flex-col\" v-if=\"!profile.is_impersonating\">\n                    <a v-bind:href=\"profile.urls.settings.url\" class=\"p-2 text-link flex items-center gap-3\">\n                        <i class=\"fa-regular fa-cog text-neutral-content\" aria-hidden=\"true\"></i>\n                        {{ profile.urls.settings.name }}\n                    </a>\n                    <a v-bind:href=\"profile.urls.profile.url\" class=\"p-2 text-link flex items-center gap-3\">\n                        <i class=\"fa-regular fa-user text-neutral-content\" aria-hidden=\"true\"></i>\n                        {{ profile.urls.profile.name }}\n                    </a>\n                    <a href=\"https://plugins.kanka.io\"  class=\"p-2 text-link flex items-center gap-3\">\n                        <i class=\"fa-regular fa-puzzle-piece text-neutral-content\" aria-hidden=\"true\"></i>\n                        {{ marketplace.title }}\n                    </a>\n                    <a href=\"https://docs.kanka.io/en/latest/\" class=\"p-2 text-link flex items-center gap-3\" target=\"_blank\">\n                        <i class=\"fa-regular fa-question-circle text-neutral-content\" aria-hidden=\"true\"></i>\n                        {{ profile.urls.help.name }}\n                    </a>\n\n                    <hr class=\"my-2\" />\n\n                    <a href=\"#\" v-on:click=\"logout()\" class=\"p-2 text-link flex items-center gap-3\">\n                        <i class=\"fa-regular fa-sign-out \" aria-hidden=\"true\"></i>\n                        {{ profile.urls.logout.name }}\n                    </a>\n                </div>\n                <div class=\"flex flex-col\" v-else>\n                    <a v-bind:href=\"profile.return.url\" class=\"p-2 text-link flex items-center gap-3\">\n                        <i class=\"fa-regular fa-sign-out-alt\" aria-hidden=\"true\"></i>\n                        {{ profile.return.name }}\n                    </a>\n                </div>\n            </div>\n        </template>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Campaign from './Campaign.vue';\nimport Notification from './Notification.vue';\nimport Release from './Release.vue';\nimport GridSvg from \"../icons/GridSvg.vue\";\nimport {onMounted, ref} from \"vue\";\n\n\nconst props = defineProps<{\n    /* The user ID */\n    user_id: String,\n    /* Route to the API to get info for the navbar */\n    api: String,\n    /* Route to the API to get new notifications */\n    fetch: String,\n    /* User's initials for when they have no picture */\n    initials: String,\n    /* User's profile picture link */\n    avatar: String,\n    /* The campaign ID (not used?) */\n    campaign_id: undefined,\n    /* Bool to define if there are unread notifications */\n    has_alerts: Boolean,\n}>();\n\n// Check for updates in the localstorage every minute for new alerts\nconst alert_delta = ref( 60 * 1000)\n// Determine if waiting for data to load (show spinning wheel)\nconst is_loading = ref( false)\n// Determine if the pop-out menu is out\nconst is_expanded = ref( false)\n// Determine if the api data has been loaded\nconst has_data = ref( false)\n// Determine if the campaign list is being shown\nconst view_campaigns = ref( false)\n// Determine if the profile box is being shown\nconst view_profile = ref( false)\nconst profile = ref( {})\nconst campaigns = ref( {})\nconst notifications = ref( {})\nconst marketplace = ref( {})\nconst releases = ref( {})\nconst show_alerts = ref( false)\n// Determine if data from the api has been loaded\nconst is_loaded = ref( false)\nconst pro = ref( false)\n\nconst openCampaigns = () => {\n    view_campaigns.value = true;\n    view_profile.value = false;\n    loadData();\n}\nconst openProfile = () => {\n    view_profile.value = true;\n    view_campaigns.value = false;\n    loadData();\n}\nconst loadData = () => {\n    is_expanded.value = true;\n    if (has_data.value) {\n        return;\n    }\n    is_loading.value = true;\n    axios.get(props.api)\n        .then(response => {\n        profile.value = response.data.profile;\n        campaigns.value = response.data.campaigns;\n        notifications.value = response.data.notifications;\n        marketplace.value = response.data.marketplace;\n        releases.value = response.data.releases;\n        show_alerts.value = response.data.has_unread;\n        has_data.value = true;\n        is_loading.value = false;\n        is_loaded.value = true;\n        pro.value = response.data.fontawesome_pro;\n    });\n}\nconst blockClass = (active) => {\n    if (active) {\n        return 'block p-4 grow items-center focus:box-shadow';\n    }\n    return 'block p-4  items-center bg-base-200 cursor-pointer flex-none focus:box-shadow';\n}\nconst logout = () => {\n    //console.info('loging out');\n    document.getElementById('logout-form').submit();\n}\nconst onClickOutside = (event) => {\n    //console.log('Clicked outside. Event: ', event)\n    is_expanded.value = false;\n}\nconst readRelease = (release) => {\n    let index = releases.value.releases.findIndex(msg => msg.id === release.id);\n    releases.value.releases.slice(index, 1);\n    updateUnread();\n}\nconst readNotification = (notification) => {\n    let index = notifications.value.messages.findIndex(msg => msg.id == notification.id);\n    notifications.value.messages.slice(index, 1);\n    updateUnread();\n}\n// Figure out if the unread notification is removed\nconst updateUnread = () => {\n    //console.log('test', this.notifications.messages.length, this.releases.releases.length);\n    if (notifications.value.messages.length === 0 && releases.value.releases.length === 0) {\n        show_alerts.value = false;\n    }\n}\nconst updateAlerts = () => {\n    //console.log('updateAlerts');\n    // Only do an ajax call if we haven't done one in a while  by looking at the local storage\n    let last = localStorage.getItem('last_notification-' + props.user_id);\n    let now = new Date().getTime();\n    let delay = now - (60 * 5000); // Wait 5 minutes between each request on the db\n\n    if (!last || last < delay) {\n        fetchAlerts();\n    } else {\n        //console.log('updating alerts', this.user_id);\n        // If we have up to date info, show it to the user\n        show_alerts.value = localStorage.getItem('notification-has-alerts-' + props.user_id) === 'true';\n        queueFetch();\n\n        // If the user hasn't opened the menu, don't bother with more details\n        if (!is_loaded.value) {\n            //console.log('hasnt loaded yet');\n            return;\n        }\n        /*let releases = localStorage.getItem('notification-releases-' + this.user_id);\n        if (releases && releases.length != this.releases.releases.length) {\n            console.log('new releases', releases);\n            this.releases.releases = releases;\n            console.log('now', this.releases.releases);\n        }\n        let notifications = localStorage.getItem('notification-notifications-' + this.user_id);;\n        if (notifications && notifications.length != this.notifications.messages.length) {\n            console.log('new notifications', notifications);\n            this.notifications.messages = notifications;\n        }*/\n    }\n}\nconst fetchAlerts = () => {\n    //console.log('fetchAlerts');\n    let now = new Date().getTime();\n    localStorage.setItem('last_notification-' + props.user_id, now);\n\n    //console.log('fetch', this.fetch);\n    axios.get(props.fetch)\n        .then(response => {\n        //console.log('responses', response);\n        /*localStorage.setItem('notification-notifications-' + this.user_id, response.data.notifications);\n        localStorage.setItem('notification-releases-' + this.user_id, response.data.releases);*/\n        localStorage.setItem('notification-has-alerts-' + props.user_id, response.data.has_alerts);\n        updateAlerts();\n    });\n}\nconst queueFetch = () => {\n    //console.log('queue fetch');\n    setTimeout(function () { updateAlerts() }, props.alert_delta);\n}\nconst showInitials = () => {\n    return props.avatar.startsWith('/images/');\n}\nconst profilePictureUrl = () => {\n    return 'url(' + props.avatar + ')'\n}\nonMounted(() => {\n  show_alerts.value = props.has_alerts;\n  queueFetch();\n})\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/NavToggler.vue",
    "content": "<template>\n    <div class=\"\">\n        <span role=\"button\" class=\"sidebar-toggle text-center cursor-pointer fill-current hover:text-primary-focus\" data-toggle=\"tooltip\" :data-title=\"props.title\" data-placement=\"right\" data-html=\"true\" tabindex=\"\" data-shortcut=\"]\" @click=\"toggleSidebar()\">\n          <svg class=\"h-6 w-6 transition-all duration-150 hover:rotate-45\" data-sidebar=\"collapse\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0 0 50 50\">\n<path d=\"M 7.71875 6.28125 L 6.28125 7.71875 L 23.5625 25 L 6.28125 42.28125 L 7.71875 43.71875 L 25 26.4375 L 42.28125 43.71875 L 43.71875 42.28125 L 26.4375 25 L 43.71875 7.71875 L 42.28125 6.28125 L 25 23.5625 Z\"></path>\n</svg>\n          <svg class=\"h-6 w-6 transition-all duration-150 hover:rotate-90\" data-sidebar=\"expand\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0 0 50 50\">\n<path d=\"M 0 9 L 0 11 L 50 11 L 50 9 Z M 0 24 L 0 26 L 50 26 L 50 24 Z M 0 39 L 0 41 L 50 41 L 50 39 Z\"></path>\n</svg>\n            <span class=\"sr-only\">{{ props.text }}</span>\n        </span>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {onMounted} from 'vue'\n\nconst props = defineProps<{\n    text: String,\n    title: String\n}>()\n\nconst toggleSidebar = () => {\n    const  body = document.querySelector('body');\n    if (body.classList.contains('sidebar-collapse')) {\n        body.classList.remove('sidebar-collapse');\n        saveToCookie(false);\n    } else {\n        body.classList.add('sidebar-collapse');\n        saveToCookie(true);\n    }\n}\n\nconst saveToCookie = (collapsed: boolean) => {\n    let date = new Date();\n    const days = 90;\n    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n    let expires = \" expires=\" + date.toGMTString();\n    let secure = location.protocol === 'https:' ? 'secure; ' : '';\n    document.cookie = \"toggleState=\"+(collapsed ? 'collapsed' : 'open')+\"; path=/; \" + secure + \"samesite=lax; \" + expires;\n}\n\n\nconst isMobile = (): boolean => {\n    return window.innerWidth < 768;\n}\n\nconst loadFromCookie = () => {\n    if (isMobile()) {\n        document.body.classList.remove('sidebar-collapse');\n        return;\n    }\n\n    let re = new RegExp('toggleState' + \"=([^;]+)\");\n    let value = re.exec(document.cookie);\n    let toggleState = (value != null) ? decodeURI(value[1]) : null;\n    if (toggleState === 'collapsed') {\n        const  body = document.querySelector('body');\n        body.classList.add('sidebar-collapse');\n    }\n}\n\nonMounted(() => {\n    loadFromCookie();\n});\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/Notification.vue",
    "content": "<template>\n    <div :class=\"backgroundClass(notification)\" v-if=\"notification.url && !is_dismissed\" :data-id=\"notification.id\">\n        <div class=\"flex-none p-2\">\n            <i :class=\"iconClass(notification)\" aria-hidden=\"true\"></i>\n        </div>\n        <a class=\"grow p-2 break-all text-link\" v-html=\"notification.text\" v-bind:href=\"notification.url\" ></a>\n\n        <div class=\"flex-none p-2 cursor-pointer dismissable\" v-on:click=\"dismiss(notification)\" v-if=\"!is_loading\" :title=\"notification.dismiss_text\">\n            <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n        </div>\n        <div class=\"flex-none p-2\" v-else>\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n        </div>\n    </div>\n    <div :class=\"backgroundClass(notification)\" :data-id=\"notification.id\" v-else-if=\"!is_dismissed\">\n        <div class=\"flex-none p-2\">\n            <i :class=\"iconClass(notification)\" aria-hidden=\"true\"></i>\n        </div>\n        <div class=\"grow p-2\" v-html=\"notification.text\"></div>\n\n        <div class=\"flex-none p-2 cursor-pointer dismissable\" v-on:click=\"dismiss(notification)\" v-if=\"!is_loading\" :title=\"notification.dismiss_text\">\n            <i class=\"fa-regular fa-times\" aria-hidden=\"true\"></i>\n        </div>\n        <div class=\"flex-none p-2\" v-else>\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n        </div>\n    </div>\n</template>\n\n\n<script setup lang=\"ts\">\n\nconst emit = defineEmits(['read'])\n\nimport {ref} from 'vue'\n\nconst props = defineProps<{\n    notification: undefined\n}>()\n\nconst is_dismissed = ref(false)\nconst is_loading = ref(false)\n\nconst backgroundClass = (notification) => {\n    let css = 'notification bg-base-200 flex justify-center items-center p-2 rounded-md';\n    if (notification.is_read) {\n        return css;\n    }\n    return css + ' unread';\n};\nconst iconClass = (notification) => {\n    let icon = 'fa-regular fa-' + notification.icon;\n    if (notification.colour === 'red') {\n        icon += ' text-red';\n    }\n    return icon;\n};\nconst dismiss = (notification) => {\n    is_loading.value = true;\n    axios.post(notification.dismiss)\n        .then(() => {\n            is_dismissed.value = true;\n            emit('read', notification);\n        });\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/layout/Release.vue",
    "content": "<template>\n    <div :class=\"backgroundClass(release)\" v-if=\"!is_dismissed\" :data-id=\"release.id\">\n        <div class=\"grow p-2\">\n            <a v-html=\"release.title\" class=\"font-bold cursor-pointer block w-full text-link\" v-bind:href=\"release.url\" target=\"_blank\"></a>\n            <p v-html=\"release.text\"></p>\n        </div>\n        <div class=\"flex-none p-2 cursor-pointer dismissable\" v-on:click=\"dismiss(release)\" v-if=\"!is_loading\" :title=\"release.dismiss_text\">\n            <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n        </div>\n        <div class=\"flex-none p-2\" v-else>\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n        </div>\n\n    </div>\n</template>\n\n\n<script setup lang=\"ts\">\n\nimport {ref} from \"vue\";\n\nconst emit = defineEmits(['read'])\n\nconst props = defineProps<{\n    release: undefined\n}>()\n\nconst is_dismissed = ref(false)\nconst is_loading = ref(false)\n\nconst backgroundClass = (release) => {\n    let css = 'release bg-base-200 flex justify-center items-center p-2  rounded-md';\n    return css;\n};\nconst dismiss = (release) => {\n    is_loading.value = true;\n    axios.post(release.dismiss)\n        .then(() => {\n            is_dismissed.value = true;\n            emit('read', release);\n        });\n};\n</script>\n"
  },
  {
    "path": "resources/js/components/select2.js",
    "content": "import TomSelect from 'tom-select';\n\nconst tsCache = {};\nconst tsPending = {};\n\nconst fetchWithCache = (url, query) => {\n    const key = url + (url.includes('?') ? '&' : '?') + 'q=' + query;\n    if (tsCache[key] !== undefined) {\n        return Promise.resolve(tsCache[key]);\n    }\n    if (tsPending[key]) {\n        return tsPending[key];\n    }\n    const promise = fetch(key, {\n        headers: { 'X-Requested-With': 'XMLHttpRequest' }\n    }).then(r => {\n        if (!r.ok) {\n            if (r.status === 503) {\n                r.json().then(data => window.showToast(data.message, 'error'));\n            }\n            return [];\n        }\n        return r.json();\n    }).then(data => {\n        tsCache[key] = data;\n        delete tsPending[key];\n        return data;\n    }).catch(() => {\n        delete tsPending[key];\n        return [];\n    });\n    tsPending[key] = promise;\n    return promise;\n};\n\nwindow.initForeignSelect = function () {\n    document.querySelectorAll('select.select2').forEach(field => {\n        if (field.tomselect) {\n            return;\n        }\n\n        if (field.classList.contains('campaign-genres')) {\n            new TomSelect(field, {\n                maxItems: 3,\n                plugins: ['remove_button'],\n            });\n            return;\n        }\n\n        const url = field.dataset.url;\n        const allowClear = field.dataset.allowClear === 'true';\n        const placeholder = field.dataset.placeholder || '';\n        const allowNew = field.dataset.allowNew === 'true';\n        const dropdownParent = field.dataset.dropdownParent || null;\n        const plugins = ['dropdown_input'];\n\n        if (field.multiple) {\n            plugins.push('remove_button');\n        }\n        if (allowClear) {\n            plugins.push('clear_button');\n        }\n\n        const baseOptions = {\n            plugins,\n            placeholder,\n            allowEmptyOption: true,\n            valueField: 'id',\n            labelField: 'text',\n            searchField: 'text',\n        };\n\n        if (!url) {\n            new TomSelect(field, { ...baseOptions });\n            return;\n        }\n\n        new TomSelect(field, {\n            ...baseOptions,\n            preload: 'focus',\n            loadThrottle: 500,\n            create: allowNew ? function (input, callback) {\n                const term = input.trim();\n                if (!term) { return; }\n                callback({ id: 'new:' + term, text: term + ' (' + (field.dataset.newTag || '') + ')' });\n            } : false,\n            load: function (query, callback) {\n                fetchWithCache(url, query.trim())\n                    .then(data => callback(data))\n                    .catch(() => callback());\n            },\n            render: {\n                option: function (data, escape) {\n                    if (data.image) {\n                        return '<div class=\"flex gap-2 items-center text-left\">'\n                            + '<img src=\"' + escape(data.image) + '\" class=\"rounded-full flex-none w-6 h-6\"/>'\n                            + '<span class=\"grow\">' + escape(data.text) + '</span>'\n                            + '</div>';\n                    }\n                    return '<div>' + escape(data.text) + '</div>';\n                },\n                item: function (data, escape) {\n                    return '<div>' + escape(data.text) + '</div>';\n                },\n            },\n        });\n    });\n\n    initLocalSelects();\n    initColourSelects();\n};\n\nconst initLocalSelects = () => {\n    document.querySelectorAll('select.select2-local').forEach(field => {\n        if (field.tomselect) {\n            return;\n        }\n        new TomSelect(field, {\n            placeholder: field.dataset.placeholder || '',\n            allowEmptyOption: true,\n            plugins: ['clear_button'],\n        });\n    });\n};\n\nconst initColourSelects = () => {\n    document.querySelectorAll('select.select2-colour').forEach(field => {\n        if (field.tomselect) {\n            return;\n        }\n        new TomSelect(field, {\n            placeholder: field.dataset.placeholder || '',\n            allowEmptyOption: true,\n            render: {\n                option: function (data, escape) {\n                    if (data.value === 'none' || !data.value) {\n                        return '<div>' + escape(data.text) + '</div>';\n                    }\n                    return '<div class=\"flex items-center gap-2\"><span class=\"badge label bg-' + escape(data.value) + ' inline-block w-4 h-4 rounded-sm mr-1\"> </span>' + escape(data.text) + '</div>';\n                },\n                item: function (data, escape) {\n                    if (data.value === 'none' || !data.value) {\n                        return '<div>' + escape(data.text) + '</div>';\n                    }\n                    return '<div class=\"flex items-center gap-2\"><span class=\"badge label bg-' + escape(data.value) + ' inline-block w-4 h-4 rounded-sm mr-1\"> </span>' + escape(data.text) + '</div>';\n                },\n            },\n        });\n    });\n};\n"
  },
  {
    "path": "resources/js/components/subscription/BillingManagement.vue",
    "content": "<template>\n    <div>\n\n        <div v-show=\"paymentMethodsLoadStatus != 2\" class=\"text-center\">\n            <i class=\"fa-solid fa-spin fa-spinner\"></i>\n        </div>\n        <div v-show=\"paymentMethodsLoadStatus == 2\n    && paymentMethods.length > 0\">\n            <div v-for=\"(method, key) in paymentMethods\"\n                 v-bind:key=\"'method-'+key\"\n                 class=\"bg-box shadow-xs mb-5 p-4 rounded flex gap-2 md:gap-4\"\n            >\n                <div class=\"grow\">\n                    <div class=\"font-extrabold\">\n                        {{ method.brand.charAt(0).toUpperCase() }}{{ method.brand.slice(1) }} ending in {{ method.last_four }}\n                    </div>\n                    <div class=\"\">\n                        Expires {{ method.exp_month }} {{ method.exp_year }}\n                    </div>\n                </div>\n                <div class=\"\">\n                    <button role=\"button\" v-on:click.stop=\"removePaymentMethod( method.id )\" title=\"Remove\" class=\"btn2 btn-outline btn-error btn-sm\">\n                        Remove card\n                    </button>\n                </div>\n            </div>\n        </div>\n        <div v-show=\"paymentMethodsLoadStatus == 2 && paymentMethods.length == 0\" class=\"flex gap-2 mb-5\">\n            <p class=\"help-block text-neutral-content grow\">\n                {{ translate('add_one') }}\n            </p>\n            <a href=\"#\" v-on:click.close=\"toggleShowNewPaymentMethod\" class=\"btn2 btn-outline\">\n                <i class=\"fa-regular fa-credit-card\" aria-hidden=\"true\"></i> {{ translate('actions.add_new') }}\n            </a>\n        </div>\n        <dialog class=\"dialog rounded-2xl text-center\" id=\"modal-card\" ref=\"cardModal\" aria-modal=\"true\" aria-labelledby=\"modal-card-label\">\n            <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between  w-full\">\n                <h4 id=\"modal-card-label\" class=\"text-lg font-normal\">\n                    {{ translate('new_card') }}\n                </h4>\n                <button type=\"button\" class=\"rounded-full\" @click=\"closeModal('cardModal')\" title=\"Close\">\n                    <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">Close</span>\n                </button>\n            </header>\n            <article class=\"text-justify py-4 px-4 md:px-6\">\n                <div class=\"mb-2 w-full field text-left\">\n                    <label>{{ translate('card_name') }}</label>\n                    <input id=\"card-holder-name\" type=\"text\" v-model=\"name\" class=\"w-full\">\n                </div>\n\n                <div class=\"mb-2 w-full\">\n                    <label>{{ translate('card') }}</label>\n                    <div id=\"card-element\">\n                    </div>\n\n                    <p class=\"text-red-500 my-2\" v-html=\"addPaymentStatusError\" v-if=\"addPaymentStatusError\">\n                    </p>\n                </div>\n\n                <p class=\"help-block text-neutral-content mb-2\">\n                    {{ translate('helper') }}\n                </p>\n\n                <div class=\"flex justify-between items-center gap-2 w-full\">\n                    <button type=\"button\" class=\"btn2 btn-outline\" @click=\"closeModal('cardModal')\">Close</button>\n\n                    <button type=\"button\" v-bind:class=\"saveBtnClass()\" @click=\"submitPaymentMethod\" ref=\"formBtn\">\n                        {{ translate('actions.save') }}\n                    </button>\n                </div>\n            </article>\n        </dialog>\n    </div>\n</template>\n\n<script>\n    export default {\n        props: [\n            'api_token',\n            'trans'\n        ],\n\n        data(){\n            return {\n                stripe: '',\n                elements: '',\n                card: '',\n                intentToken: '',\n\n                name: '',\n                addPaymentStatus: 0,\n                addPaymentStatusError: '',\n\n                paymentMethods: [],\n                paymentMethodsLoadStatus: 0,\n                paymentMethodSelected: 0,\n\n                showNewPaymentMethod: false,\n                savePaymentMethodStatus: 0,\n                deletingPaymentMethodStatus: 0,\n                json_trans: [],\n\n                isLoading: false,\n            }\n        },\n\n\n        mounted(){\n            this.includeStripe('js.stripe.com/v3/', function(){\n                this.configureStripe();\n            }.bind(this) );\n\n            this.loadIntent();\n            this.loadPaymentMethods();\n\n            this.json_trans = JSON.parse(this.trans);\n        },\n\n        methods: {\n            /*\n                Includes Stripe.js dynamically\n            */\n            includeStripe(URL, callback) {\n                let documentTag = document, tag = 'script',\n                        object = documentTag.createElement(tag),\n                        scriptTag = documentTag.getElementsByTagName(tag)[0];\n                object.src = 'https://' + URL;\n                if (callback) {\n                    object.addEventListener('load', function (e) {\n                        callback(null, e);\n                    }, false);\n                }\n                scriptTag.parentNode.insertBefore(object, scriptTag);\n            },\n\n            /*\n                Configures Stripe by setting up the elements and\n                creating the card element.\n            */\n            configureStripe() {\n                this.stripe = Stripe(this.api_token);\n\n                this.elements = this.stripe.elements();\n                this.card = this.elements.create('card', {\n                    hidePostalCode: true\n                });\n\n                this.card.mount('#card-element');\n            },\n\n            /*\n                Loads the payment intent key for the user to pay.\n            */\n            loadIntent() {\n                axios.get('/subscription-api/setup-intent')\n                        .then(function (response) {\n                            this.intentToken = response.data;\n                        }.bind(this));\n            },\n\n            submitPaymentMethod() {\n                this.addPaymentStatus = 1;\n                this.savePaymentMethodStatus = 1;\n                this.isLoading = true;\n\n                console.log('wa');\n\n                this.stripe.confirmCardSetup(\n                    this.intentToken.client_secret, {\n                        payment_method: {\n                            card: this.card,\n                            billing_details: {\n                                name: this.name\n                            }\n                        }\n                    }\n                ).then(function (result) {\n                    this.savePaymentMethodStatus = 0;\n\n                    this.isLoading = false;\n                    if (result.error) {\n                        console.log('error', result.error.message);\n                        this.addPaymentStatus = 3;\n                        this.addPaymentStatusError = result.error.message;\n                    } else {\n                        this.savePaymentMethod(result.setupIntent.payment_method);\n                        this.addPaymentStatus = 2;\n                        this.addPaymentStatusError = '';\n                        this.card.clear();\n                        this.name = '';\n                        this.closeModal('cardModal');\n                    }\n                }.bind(this));\n            },\n\n            /*  Saves the payment method for the user and re-loads the payment methods.*/\n            savePaymentMethod(method) {\n                console.log('save?');\n                this.paymentMethodsLoadStatus = 0;\n                axios.post('/subscription-api/payments', {\n                    payment_method: method\n                }).then(function () {\n                    this.loadPaymentMethods();\n                }.bind(this));\n            },\n\n            /*\n                Loads all of the payment methods for the\n                user.\n            */\n            loadPaymentMethods() {\n                this.paymentMethodsLoadStatus = 1;\n                axios.get('/subscription-api/payment-methods')\n                        .then(function (response) {\n                            this.paymentMethods = response.data;\n                            this.paymentMethodsLoadStatus = 2;\n                        }.bind(this));\n            },\n\n            removePaymentMethod(paymentID) {\n                this.paymentMethodsLoadStatus = 0;\n                axios.post('/subscription-api/remove-payment', {\n                    id: paymentID\n                }).then(function (response) {\n                    this.loadPaymentMethods();\n                }.bind(this));\n            },\n\n            toggleShowNewPaymentMethod() {\n                this.openModal('cardModal');\n                this.showNewPaymentMethod = !this.showNewPaymentMethod;\n            },\n\n            translate(key) {\n                return this.json_trans[key] ?? 'unknown';\n            },\n\n            openModal(ref) {\n                this.$refs[ref].showModal();\n                this.$refs[ref].addEventListener('click', function (event) {\n                    let rect = this.getBoundingClientRect();\n                    let isInDialog = (rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n                        rect.left <= event.clientX && event.clientX <= rect.left + rect.width);\n                    if (!isInDialog && event.target.tagName === 'DIALOG') {\n                        this.close();\n                    }\n                });\n            },\n            closeModal(ref) {\n                this.$refs[ref].close();\n            },\n\n            saveBtnClass() {\n                let cls = 'btn2 btn-primary';\n                if (this.isLoading) {\n                    cls += ' loading';\n                }\n                return cls;\n            }\n        },\n    }\n</script>\n"
  },
  {
    "path": "resources/js/components/whiteboards/Entity.vue",
    "content": "<template>\n    <v-rect\n        :config=\"{\n            x: 0, y: 0,\n            width: shape.width,\n            height: shape.height + nameHeight,\n            fill: cssVariable('--b1'),\n            cornerRadius: radius,\n            opacity: shape.opacity || 1,\n        }\">\n\n    </v-rect>\n    <v-image\n        :config=\"{\n            width: shape.width,\n            height: shape.height,\n            image: imageEl,\n            cornerRadius: radius,\n            opacity: shape.opacity || 1,\n         }\">\n    </v-image>\n    <v-text\n        @click=\"handleClick\"\n        @mouseenter=\"handleMouseEnter\"\n        @mouseleave=\"handleMouseLeave\"\n        :config=\"\n{\n            x: 0,\n            y: shape.height,\n            width: shape.width,\n            height: nameHeight,\n            text: entity.name || 'Unknown untity',\n            padding: 6,\n            fontSize: 14,\n            fontFamily: shape.fontFamily || 'Arial',\n            fill: shape.fill || cssVariable('--bc'),\n            align: 'center',\n            verticalAlign: 'middle',\n            draggable: false,\n            listening: true,\n            opacity: shape.opacity || 1,\n        }\"\n    />\n</template>\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { cssVariable } from '../../utility/colours';\n\nconst radius = ref(2);\nconst nameHeight = ref(26);\n\n\nconst props = defineProps<{\n    shape: any,\n    // function that receives shape and returns HTMLImageElement|null\n    getImageEl: (shape: any) => HTMLImageElement | null,\n    // function that opens entity link, receives shape\n    entity: any\n}>();\n\nconst imageEl = computed(() => {\n    // call provided helper to get image element; keep compatible with previous approach\n    return props.getImageEl ? props.getImageEl(props.shape) : null;\n});\n\n\nconst handleClick = (e: Event) => {\n    if (!props.entity?.link) return;\n    try {\n        window.open(props.entity.link, '_blank', 'noopener');\n    } catch (e) {\n        // Fallback: set location\n        window.location.href = props.entity.link;\n    }\n}\n\nconst handleMouseEnter = (e: any) => {\n    try {\n        const konvaNode = e.target;\n        const stage = konvaNode.getStage?.();\n        const container = stage?.container?.();\n        if (container) container.style.cursor = 'pointer';\n    } catch (err) {\n        // ignore\n    }\n};\n\nconst handleMouseLeave = (e: any) => {\n    try {\n        const konvaNode = e.target;\n        const stage = konvaNode.getStage?.();\n        const container = stage?.container?.();\n        if (container) container.style.cursor = '';\n    } catch (err) {\n        // ignore\n    }\n};\n\n\n</script>\n"
  },
  {
    "path": "resources/js/components/whiteboards/EntitySearch.vue",
    "content": "<template>\n    <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\" v-if=\"loading\" />\n\n    <dialog class=\"dialog rounded-2xl text-center bg-base-100 text-base-content\" id=\"gallery-dialog\" ref=\"dialog\" aria-modal=\"true\" aria-labelledby=\"modal-card-label\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans('entity-search')\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"closeDialog()\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">trans('close')</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl p-4\">\n\n            <div class=\"flex gap-0.5 w-full\" v-if=\"!loading\">\n                <div class=\"grow\">\n                    <input\n                        type=\"text\"\n                        class=\"w-full\"\n                        :placeholder=\"trans('search-placeholder')\"\n                        @input=\"handleInput\" ref=\"searchInput\"\n                        @keydown.down.prevent=\"highlightNext\"\n                        @keydown.up.prevent=\"highlightPrev\"\n                        @keydown.enter=\"handleEnter\"\n                    />\n                </div>\n            </div>\n\n            <div class=\"text-center flex items-center justify-center w-full\" v-if=\"loading || searching\">\n                <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\"></i>\n            </div>\n\n            <div class=\"flex flex-col gap-0.5 w-full\" v-if=\"!loading && !searching\">\n                <div v-for=\"(entity, id) in entities\" :key=\"entity.id\" :class=\"entityClass(entity, id)\" @click=\"select(entity)\">\n                    <div class=\"cover-background rounded-full h-6 w-6\" :style=\"{ backgroundImage: backgroundImage(entity) }\" v-if=\"entity.image\"></div>\n                    <span v-html=\"entity.name\"></span>\n                </div>\n            </div>\n        </article>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\n\nimport { ref, onMounted, nextTick, watch} from 'vue';\n\nconst props = defineProps<{\n    api: String,\n    opened: boolean,\n    i18n: undefined,\n}>()\n\nconst loading = ref(false);\nconst searching = ref(false)\nconst dialog = ref();\nconst searchInput = ref();\nconst entities = ref();\nconst term = ref('')\nconst lastTerm = ref('')\nconst typingTimeout = ref(null);\nconst debounceDelay = 300\nconst highlightedIndex = ref(-1)\n\n\nconst emit = defineEmits(['selected', 'closed'])\n\nconst open = () => {\n    loading.value = true;\n    highlightedIndex.value = 0\n    dialog.value.showModal()\n    dialog.value.addEventListener('click', function (event) {\n        let rect = this.getBoundingClientRect()\n        let isInDialog = (rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n            rect.left <= event.clientX && event.clientX <= rect.left + rect.width)\n        if (!isInDialog && event.target.tagName === 'DIALOG') {\n            closeDialog()\n        }\n    });\n\n    axios.get(props.api + '?v2=true&thumb=256')\n        .then(res => {\n            entities.value = res.data.entities\n            loading.value = false\n\n            nextTick(() => {\n                searchInput.value?.focus()\n            })\n\n        })\n        .catch(err => {\n            loading.value = false\n        })\n}\n\nconst closeDialog = () => {\n    dialog.value.close()\n    highlightedIndex.value = -1;\n    emit('closed')\n}\n\nconst trans = (key: string) => {\n    return props.i18n[key] || key\n}\n\n\nwatch(() => props.opened, (newVal, oldVal) => {\n    if (newVal) {\n        open()\n    }\n})\n\nconst handleInput = (event) => {\n    term.value = event.target.value\n    if (typingTimeout.value) {\n        clearTimeout(typingTimeout.value)\n    }\n\n    typingTimeout.value = setTimeout(() => {\n        search()\n    }, debounceDelay)\n}\n\nconst search = () => {\n    if (lastTerm.value == term.value) {\n        return\n    }\n\n    lastTerm.value = term.value\n    searching.value = true\n\n    axios.get(props.api + '?v2=true&thumb=256&q=' + lastTerm.value).then(res => {\n        entities.value = res.data.entities\n        searching.value = false\n        highlightedIndex.value = 0\n    })\n}\n\nconst backgroundImage = (entity) => {\n    return 'url(\\'' + entity.image + '\\')';\n}\n\nconst entityClass = (entity, id) => {\n    let css = 'flex gap-2 items-center cursor-pointer hover:bg-base-200 w-full rounded p-1';\n    if (highlightedIndex.value == id) {\n        css += ' bg-base-300';\n    }\n    return css;\n}\n\nconst highlightNext = (event) => {\n    if (highlightedIndex.value === -1) {\n        return;\n    }\n    event.preventDefault();\n    if (highlightedIndex.value < entities.value.length - 1) {\n        highlightedIndex.value++;\n    } else if (entities.value.length > 0) {\n        highlightedIndex.value = 0;\n    }\n};\n\nconst highlightPrev = (event) => {\n    if (highlightedIndex.value === -1) {\n        return;\n    }\n    event.preventDefault();\n    if (highlightedIndex.value > 0) {\n        highlightedIndex.value--;\n    } else if (entities.value.length > 0) {\n        highlightedIndex.value = entities.value.length - 1;\n    }\n};\n\nconst handleEnter = (event) => {\n    if (entities.value.length > 0 && highlightedIndex.value >= 0) {\n        event.preventDefault();\n        select(entities.value[highlightedIndex.value]);\n    }\n};\n\nconst select = (entity) => {\n    emit('selected', entity)\n    closeDialog()\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/components/whiteboards/Reset.vue",
    "content": "<template>\n    <dialog class=\"dialog rounded-2xl bg-base-100 text-base-content\" id=\"reset-dialog\" ref=\"dialog\" aria-modal=\"true\" aria-labelledby=\"modal-card-label\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans('reset-title')\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"closeDialog()\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">trans('close')</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl p-4\">\n            {{ trans('reset-helper') }}\n        </article>\n        <div class=\"mt-5 flex gap-2 md:gap-5 text-left w-full justify-between p-4 md:p-6\">\n            <menu class=\"flex flex-wrap gap-3 ps-0 ms-0\">\n            </menu>\n            <button class=\"btn2 btn-primary\" @click=\"confirmReset()\" v-html=\"trans('reset')\"></button>\n        </div>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\n\nimport { ref, onMounted, watch} from 'vue';\n\nconst props = defineProps<{\n    opened: boolean,\n    i18n: undefined,\n}>()\n\nconst emit = defineEmits(['closed'])\n\nconst dialog = ref();\n\n\nwatch(() => props.opened, () => {\n    open()\n})\n\nconst open = () => {\n    dialog.value.showModal()\n\n    dialog.value.addEventListener('click', function (event) {\n        let rect = this.getBoundingClientRect()\n        let isInDialog = (rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n            rect.left <= event.clientX && event.clientX <= rect.left + rect.width)\n        if (!isInDialog && event.target.tagName === 'DIALOG') {\n            closeDialog()\n        }\n    });\n}\n\nconst trans = (key: string) => {\n    return props.i18n[key] || key\n}\n\nconst confirmReset = () => {\n    closeDialog()\n    emit('closed')\n}\n\nconst closeDialog = () => {\n    dialog.value.close()\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/whiteboards/Settings.vue",
    "content": "<template>\n    <dialog class=\"dialog rounded-2xl bg-base-100 text-base-content\" id=\"gallery-dialog\" ref=\"dialog\" aria-modal=\"true\" aria-labelledby=\"modal-card-label\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans('whiteboard-settings')\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"closeDialog()\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">trans('close')</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl p-4\">\n\n            <div class=\"flex gap-1 w-full\">\n                <div class=\"flex flex-col gap-1 grow\">\n                    <label v-html=\"trans('name')\"></label>\n                    <input\n                        type=\"text\"\n                        class=\"w-full\"\n                        v-model=\"localName\"\n                        @input=\"updateName\"\n                    />\n                </div>\n            </div>\n        </article>\n        <div class=\"mt-5 flex gap-2 md:gap-5 text-left w-full justify-between p-4 md:p-6\">\n            <menu class=\"flex flex-wrap gap-3 ps-0 ms-0\">\n            </menu>\n            <button class=\"btn2 btn-primary\" @click=\"closeDialog()\" v-html=\"trans('save')\"></button>\n        </div>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\n\nimport { ref, onMounted, watch} from 'vue';\n\nconst props = defineProps<{\n    name: String,\n    opened: boolean,\n    i18n: undefined,\n}>()\n\nconst emit = defineEmits(['closed'])\n\nconst dialog = ref();\nconst localName = ref(props.name)\n\n\nwatch(() => props.opened, (newVal, oldVal) => {\n    if (newVal) {\n        open()\n    }\n})\nwatch(() => props.name, (newVal) => {\n    localName.value = newVal;\n});\n\nconst trans = (key) => {\n    return key;\n}\n\nconst open = () => {\n    dialog.value.showModal()\n\n    dialog.value.addEventListener('click', function (event) {\n        let rect = this.getBoundingClientRect()\n        let isInDialog = (rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n            rect.left <= event.clientX && event.clientX <= rect.left + rect.width)\n        if (!isInDialog && event.target.tagName === 'DIALOG') {\n            closeDialog()\n        }\n    });\n}\n\nconst closeDialog = () => {\n    dialog.value.close()\n    emit('closed', localName.value)\n}\n</script>\n"
  },
  {
    "path": "resources/js/components/whiteboards/Whiteboard.vue",
    "content": "<template>\n    <div class=\"w-full h-screen flex items-center justify-center align-middle text-2xl\" v-if=\"loading || error\">\n\n        <div class=\"flex items-center gap-2\" v-if=\"loading && !error\">\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\" />\n            <span>Joining the whiteboard</span>\n        </div>\n        <div class=\"flex flex-col gap-2 text-error-content\" v-else-if=\"error\">\n            <i class=\"fa-reguar fa-circle-exclamation\" aria-hidden=\"true\" />\n            <span v-html=\"error\"></span>\n            <button class=\"btn2 btn-default btn-sm\" @click=\"reload()\">\n                <i class=\"fa-regular fa-rotate-right\" aria-hidden=\"true\"></i>\n                <span>Retry</span>\n            </button>\n        </div>\n    </div>\n\n    <div class=\"toolbar fixed w-full bg-base-100 p-2 flex items-center justify-between gap-2 z-50\" v-if=\"!loading && !error\">\n        <div class=\"flex gap-1 items-center\">\n            <a :href=\"urls.overview\" :title=\"trans('back')\" class=\"flex items-center gap-1\">\n                <i class=\"fa-regular fa-left-to-bracket\" aria-hidden=\"true\"></i>\n                <span v-html=\"name\"></span>\n            </a>\n\n            <div v-if=\"props.creator\" class=\"relative\">\n                <button @click=\"settingsOpen = !settingsOpen\"\n                        v-show=\"false\"\n                        class=\"btn2 btn-default btn-sm flex items-center gap-1\">\n                    <i class=\"fa-regular fa-gear\" aria-hidden=\"true\"></i>\n                </button>\n\n                <div v-if=\"settingsOpen\" class=\"absolute left-0 mt-1 border shadow-md bg-base-100 rounded z-20 w-36\">\n                    <button\n                        class=\"px-3 py-2 w-full hover:bg-base-200 rounded flex items-center gap-1.5 text-sm text-base-content transition-all duration-150\"\n                        @click=\"openResetDialog\" v-html=\"trans('reset')\">\n                    </button>\n\n                    <button disabled class=\"px-3 py-2 w-full hover:bg-base-200 rounded flex items-center gap-1.5 text-sm text-base-content transition-all duration-150\">\n                        Placeholder 1\n                    </button>\n\n                    <button disabled class=\"px-3 py-2 w-full hover:bg-base-200 rounded flex items-center gap-1.5 text-sm text-base-content transition-all duration-150\">\n                        Placeholder 2\n                    </button>\n                </div>\n            </div>\n\n            <a v-if=\"props.creator\" href=\"#\" @click=\"openQQ()\"  class=\"quick-creator-button btn2 btn-primary btn-sm\"\n               tabindex=\"0\">\n                <i class=\"flex-none fa-regular fa-plus\" aria-hidden=\"true\"></i>\n                <span class=\"grow hidden sm:inline-block\" v-html=\"trans('create')\"></span>\n                <span class=\"flex-none keyboard-shortcut\" id=\"qq-kb-shortcut\" data-toggle=\"tooltip\" :data-title=\"trans('qq-keyboard-shortcut')\" data-html=\"true\" data-placement=\"bottom\" >N</span>\n            </a>\n\n\n        </div>\n        <div class=\"flex gap-1 overflow-hidden\">\n            <span v-for=\"user in activeUsers\"\n               :key=\"user.id\"\n               :aria-label=\"user.name\"\n               class=\"bg-base-200 text-neutral-content rounded-full h-8 w-8 overflow-hidden flex items-center justify-center cursor-pointer\"\n               v-tippy=\"getUserTooltip(user)\"\n            >\n                <img :src=\"user.image\" v-if=\"user.image\" class=\"w-8 h-8\">\n                <span v-else>\n                    {{ user.name.substring(0, 2).toUpperCase() }}\n                </span>\n            </span>\n        </div>\n    </div>\n\n    <v-stage v-if=\"!loading && !error\"\n        ref=\"stage\"\n        :config=\"stageSize\"\n        @click=\"handleStageClick\"\n        @mousedown=\"handleMouseDown\"\n        @mousemove=\"draw\"\n        @mouseup=\"handleMouseUp\"\n         @wheel=\"handleWheel\"\n    >\n        <v-layer ref=\"layer\">\n            <v-group\n                v-for=\"shape in shapes\"\n                :key=\"shape.id\"\n                :config=\"{\n                    id: `group-${shape.id}`,\n                    draggable: !shape.is_locked,\n                    x: shape.x,\n                    y: shape.y,\n                    scaleX: shape.scaleX || 1,\n                    scaleY: shape.scaleY || 1,\n                    rotation: shape.rotation || 0\n                }\"\n                @dragstart=\"handleDragstart(shape)\"\n                @dragmove=\"handleDragmove(shape)\"\n                @dragend=\"handleDragend($event, shape)\"\n                @click=\"selectShape(shape, $event)\"\n            >\n                <v-rect v-if=\"shape.type==='rect'\"\n                        :config=\"{\n                            x: 0,\n                            y: 0,\n                            width: shape.width,\n                            height: shape.height,\n                            fill: shape.fill || 'lightblue',\n                            cornerRadius: 6,\n                            opacity: shape.opacity || 1\n                        }\"\n                />\n                <v-circle v-if=\"shape.type==='circle'\"\n                          :config=\"{\n                            x: shape.radius,\n                            y: shape.radius,\n                            radius: shape.radius,\n                            fill: shape.fill || 'lightgreen',\n                            opacity: shape.opacity || 1\n                        }\"\n                />\n                <v-line v-if=\"shape.type === 'drawing'\" v-for=\"line in shape.children\"\n                        :key=\"line.id\"\n                        :config=\"{\n                            points: line.points,\n                            stroke: line.fill,\n                            strokeWidth: line.strokeWidth,\n                            hitStrokeWidth: hitStrokeWidth,\n                            lineCap: 'round',\n                            lineJoin: 'round',\n                            opacity: shape.opacity || 1\n                        }\" />\n\n                <v-image v-if=\"shape.type === 'image'\"\n                         :config=\"{\n                            width: shape.width,\n                            height: shape.height,\n                            image: getImageEl(shape),\n                            cornerRadius: 4,\n                            opacity: shape.opacity || 1\n                         }\" />\n\n\n                <Entity\n                    v-if=\"shape.type === 'entity'\"\n                    :shape=\"shape\"\n                    :entity=\"entityRefs[shape.entity] || {}\"\n                    :get-image-el=\"getImageEl\">\n                </Entity>\n\n\n                <v-text\n                    v-if=\"shape.type === 'text' && (!editingTextId || editingTextId !== shape.id)\"\n                    :config=\"{\n                        x: getTextPadding(shape),\n                        y: getTextPadding(shape),\n                        width: shape.width - (getTextPadding(shape) * 2),\n                        height: shape.height - (getTextPadding(shape) * 2),\n                        opacity: shape.opacity || 1,\n                        text: shape.text,\n                        fontSize: getTextSize(shape),\n                        fontFamily: shape.fontFamily || 'Arial',\n                        fill: getTextColor(shape),\n                        align: 'center',\n                        verticalAlign: 'middle',\n                        wrap: 'word',\n                    }\"\n                />\n\n                <!-- Selection outline overlays (pointerEvents disabled so they don't block clicks) -->\n                <v-rect\n                    v-if=\"isSelected(shape.id) && selectedIds.length > 1 && shape.type !== 'circle'\"\n                    :config=\"{\n                            x: shape.x,\n                            y: shape.y,\n                            width: shape.width,\n                            height: shape.height,\n                            stroke: cssVariable('--p'),\n                            strokeWidth: 2,\n                            strokeScaleEnabled: false,\n                            dash: [6,4],\n                            opacity: shape.opacity || 1,\n                            listening: false\n                        }\"\n                />\n                <v-circle\n                    v-if=\"isSelected(shape.id) && selectedIds.length > 1 && shape.type === 'circle'\"\n                    :config=\"{\n                            x: shape.radius,\n                            y: shape.radius,\n                            radius: shape.radius + 2,\n                            stroke: cssVariable('--p'),\n                            strokeWidth: 2,\n                            strokeScaleEnabled: false,\n                            opacity: shape.opacity || 1,\n                            dash: [6,4],\n                            listening: false\n                        }\"\n                />\n\n            </v-group>\n\n            <v-group v-if=\"tempGroup\" :key=\"tempGroup.id\" :config=\"{ id: `temp-group-${tempGroup.id}` }\">\n                <v-line v-for=\"line in tempGroup.children\"\n                        :key=\"line.id\"\n                        :config=\"{\n                            points: line.points,\n                            stroke: line.fill,\n                            strokeWidth: line.strokeWidth,\n                            lineCap: 'round',\n                            lineJoin: 'round',\n                        }\" />\n            </v-group>\n\n            <v-group v-if=\"tempRect\" :key=\"tempRect.id\" :config=\"{ id: `temp-rect-${tempRect.id}` }\">\n                <v-rect\n                    :config=\"{\n                        x: tempRect.x || 0,\n                        y: tempRect.y || 0,\n                        width: tempRect.width || 0,\n                        height: tempRect.height || 0,\n                        fill: currentBgColor,\n                        stroke: cssVariable('--p'),\n                        strokeWidth: 2,\n                        listening: false\n                    }\"\n                />\n            </v-group>\n            <v-group v-if=\"tempCircle\" :key=\"tempCircle.id\" :config=\"{ id: `temp-circle-${tempCircle.id}` }\">\n                <v-circle\n                    :config=\"{\n                        x: tempCircle.cx || 0,\n                        y: tempCircle.cy || 0,\n                        radius: tempCircle.radius || 0,\n                        fill: currentBgColor,\n                        stroke: cssVariable('--p'),\n                        strokeWidth: 2,\n                        listening: false\n                    }\"\n                />\n            </v-group>\n\n\n\n\n            <v-transformer\n                ref=\"transformer\"\n                :config=\"{\n                    resizeEnabled: true,\n                    rotateEnabled: true,\n                    borderEnabled: true,\n                    borderStroke: cssVariable('--p'),\n                    borderStrokeWidth: 1,\n                    anchorStroke: cssVariable('--p'),\n                    anchorFill: cssVariable('--pc'),\n                    anchorSize: 8,\n                    keepRatio: true,\n                }\"\n            />\n        </v-layer>\n    </v-stage>\n\n    <textarea\n        v-if=\"editingTextId && !loading\"\n        ref=\"textInput\"\n        v-model=\"editingText\"\n        :style=\"inputStyle\"\n        class=\"absolute bg-transparent border-2 border-accent rounded resize-none outline-none z-50\"\n        @blur=\"saveText\"\n        @keydown.enter.exact=\"saveText\"\n        @keydown.escape=\"cancelTextEdit\"\n        @input=\"updateTextPreview\"\n    ></textarea>\n\n    <div\n        v-if=\"!loading && !error\"\n        :style=\"toolbarStyle\"\n        class=\"fixed z-50 flex items-center justify-center inset-x-0 gap-1 bottom-8 tools\"\n        @mousedown.stop\n        @click.stop\n    >\n        <div v-if=\"toolbarMode === 'drawing'\" class=\"flex items-center gap-2 main-toolbar\">\n            <div class=\"join\">\n\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('thin-stroke')\"\n                    :class=\"{ 'btn-disabled': strokeSize === 1 }\"\n                    @click.stop=\"strokeSize = 1\"\n                >\n                    <i class=\"fa-regular fa-paintbrush-fine\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\" v-html=\"trans('thin-stroke')\"></span>\n                </button>\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('large-stroke')\"\n                    :class=\"{ 'btn-disabled': strokeSize === 3 }\"\n                    @click.stop=\"strokeSize = 3\"\n                >\n                    <i class=\"fa-regular fa-paintbrush\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\" v-html=\"trans('large-stroke')\"></span>\n                </button>\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('color')\"\n                    :style=\"{'color': currentColor}\"\n                    @click.stop=\"openColorPicker\"\n                >\n                    <i class=\"fa-regular fa-palette\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\" v-html=\"trans('color')\"></span>\n                </button>\n                <button\n                    @click=\"toggleDrawing\"\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('end-drawing')\">\n                    <i class=\"fa-regular fa-check\" aria-hidden=\"true\" />\n                    <span class=\"sr-only\" v-html=\"trans('end-drawing')\"></span>\n                </button>\n            </div>\n        </div>\n        <div class=\"flex items-center gap-2 shape-toolbar \" v-else-if=\"selectedShape\">\n            <div class=\"join\">\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :class=\"selectedShape.is_locked ? 'btn-warning' : ''\"\n                    :title=\"selectedShape.is_locked ? trans('unlock') : trans('lock')\"\n                    @click.stop=\"toggleLock\"\n                >\n                    <i class=\"fa-regular\" :class=\"selectedShape.is_locked ? 'fa-lock' : 'fa-lock-open'\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">{{ selectedShape.is_locked ? trans('unlock') : trans('lock') }}</span>\n                </button>\n\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('duplicate')\"\n                    @click.stop=\"duplicateSelected\"\n                >\n                    <i class=\"fa-regular fa-copy\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">{{ trans('duplicate') }}</span>\n                </button>\n\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('color')\"\n                    @click.stop=\"openColorPicker\"\n                >\n                    <i class=\"fa-regular fa-palette\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\" v-html=\"trans('color')\"></span>\n                </button>\n\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :class=\"{'btn-disabled': nothingToRotate()}\"\n                    :title=\"trans('reset-rotation')\"\n                    @click.stop=\"resetRotation()\"\n                >\n                    <i class=\"fa-regular fa-rotate\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">{{ trans('reset-rotation') }}</span>\n                </button>\n            </div>\n\n            <div class=\"join\" v-if=\"selectedShape.type === 'text'\">\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :class=\"{'btn-disabled': editingTextId}\"\n                    :title=\"trans('auto-font')\"\n                    @click.stop=\"autoFont()\"\n                >\n                    <i class=\"fa-regular fa-text-size\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">{{ trans('auto-font') }}</span>\n                </button>\n\n\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :class=\"{'btn-disabled': editingTextId || selectedShape.fontSize === 2}\"\n                    :title=\"trans('fmaller-font')\"\n                    @click.stop=\"smallerFont()\"\n                >\n                    <i class=\"fa-regular fa-minus\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">{{ trans('smaller-font') }}</span>\n                </button>\n\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :class=\"{'btn-disabled': editingTextId || selectedShape.fontSize === 12}\"\n                    :title=\"trans('larger-font')\"\n                    @click.stop=\"biggerFont()\"\n                >\n                    <i class=\"fa-regular fa-plus\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">{{ trans('larger-font') }}</span>\n                </button>\n            </div>\n\n            <div class=\"join\">\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('push-to-front')\"\n                    @click.stop=\"pushTo('front')\"\n                >\n                    <i class=\"fa-regular fa-up-to-line\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\" v-html=\"trans('push-to-front')\"></span>\n                </button>\n                <button\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('push-to-back')\"\n                    @click.stop=\"pushTo('back')\"\n                >\n                    <i class=\"fa-regular fa-down-to-line\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\" v-html=\"trans('push-to-back')\"></span>\n                </button>\n            </div>\n            <button\n                class=\"btn2 btn-sm text-error-content\"\n                :title=\"trans('delete')\"\n                @click.stop=\"deleteSelected\"\n            >\n                <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\" v-html=\"trans('delete')\"></span>\n            </button>\n        </div>\n        <div v-else-if=\"toolbarMode !== 'drawing' && !readonly\" class=\"flex items-center gap-2 main-toolbar\">\n            <div class=\"join\">\n                <button\n                    @click=\"startSelect()\"\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('select-shapes')\"\n                    :class=\"{ 'btn-disabled': toolbarMode === 'select' }\">\n                    <i class=\"fa-regular fa-mouse-pointer\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\" v-html=\"trans('select-shapes')\"></span>\n                </button>\n                <button\n                    @click=\"startShapeDraw('rect')\"\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('add-square')\"\n                    :class=\"{ 'btn-disabled': toolbarMode === 'rect' }\">\n                    <i class=\"fa-regular fa-square\" aria-hidden=\"true\" />\n                    <span class=\"sr-only\" v-html=\"trans('add-square')\"></span>\n                </button>\n                <button\n                    @click=\"startShapeDraw('circle')\"\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('add-circle')\"\n                    :class=\"{ 'btn-disabled': toolbarMode === 'circle' }\">\n                    <i class=\"fa-regular fa-circle\" aria-hidden=\"true\" />\n                    <span class=\"sr-only\" v-html=\"trans('add-circle')\"></span>\n                </button>\n                <button\n                    @click=\"startShapeDraw('text')\"\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('add-text')\"\n                    :class=\"{ 'btn-disabled': toolbarMode === 'text' }\">\n                    <i class=\"fa-regular fa-text\" aria-hidden=\"true\" />\n                    <span class=\"sr-only\" v-html=\"trans('add-text')\"></span>\n                </button>\n                <button\n                    @click=\"toggleDrawing\"\n                    :title=\"trans('start-drawing')\"\n                    class=\"btn2 btn-sm join-item\">\n                    <i class=\"fa-regular fa-scribble\" aria-hidden=\"true\" />\n                    <span class=\"sr-only\" v-html=\"trans('start-drawing')\"></span>\n                </button>\n            </div>\n            <div class=\"join\">\n                <button\n                    @click=\"openSearch\"\n                    class=\"btn2 btn-sm join-item\"\n                    :title=\"trans('add-entity')\"\n                    :class=\"{ 'btn-disabled': toolbarMode === 'drawing' }\">\n                    <i class=\"fa-regular fa-search\" aria-hidden=\"true\" />\n                    <span class=\"sr-only\" v-html=\"trans('add-entity')\"></span>\n                </button>\n                <button\n                    @click=\"openGallery\"\n                    :title=\"trans('add-image')\"\n                    class=\"btn2 btn-sm join-item\"\n                    :class=\"{ 'btn-disabled': toolbarMode === 'drawing' }\">\n                    <i class=\"fa-regular fa-file-image\" aria-hidden=\"true\" />\n                    <span class=\"sr-only\" v-html=\"trans('add-image')\"></span>\n                </button>\n            </div>\n        </div>\n        <div v-else-if=\"readonly\">\n            <i v-html=\"trans('readonly')\"></i>\n        </div>\n    </div>\n\n    <input\n        v-if=\"!loading\"\n        ref=\"colorInput\"\n        type=\"color\"\n        class=\"hidden\"\n        :value=\"currentColor\"\n        @change=\"onPickColor\"\n    />\n\n    <Browser\n        v-if=\"!loading\"\n        :api=\"props.gallery\"\n        :opened=\"galleryOpened\"\n        :i18n=\"i18n\"\n        @selected=\"selectImage\"\n        @closed=\"closedGallery\"\n    ></Browser>\n\n    <Settings\n        v-if=\"!loading\"\n        :name=\"name\"\n        :opened=\"settingsOpened\"\n        @closed=\"closedSettings\"\n        :i18n=\"i18n\"\n    ></Settings>\n\n    <Reset\n        v-if=\"!loading\"\n        :opened=\"resetOpen\"\n        @closed=\"confirmReset\"\n        :i18n=\"i18n\"\n    ></Reset>\n\n    <EntitySearch\n        v-if=\"!loading\"\n        :api=\"props.search\"\n        :opened=\"searchOpened\"\n        :i18n=\"i18n\"\n        @selected=\"selectEntity\"\n        @closed=\"closedSearch\">\n    </EntitySearch>\n\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, nextTick, computed, watch, onBeforeUnmount} from 'vue';\nimport { hslFromVar, readCssVar, hslString, tweakHsl } from '../../utility/colours';\nimport Browser from \"../../gallery/Browser.vue\";\nimport EntitySearch from \"./EntitySearch.vue\";\nimport Entity from \"./Entity.vue\";\nimport Settings from \"./Settings.vue\";\nimport Reset from './Reset.vue';\nimport Echo from 'laravel-echo';\nimport { configureEcho } from \"@laravel/echo-vue\"\n\nconst props = defineProps<{\n    save: string,\n    load: string,\n    gallery: string,\n    search: string,\n    readonly: Boolean,\n    creator: Boolean,\n    entity: string,\n    whiteboard: number,\n    user: Boolean,\n}>()\n\n\nconst shapes = ref([]);\nconst dragItemId = ref(null);\nconst selectedIds = ref([]);\nconst selectedId = ref(null);\nconst name = ref('My whiteboard');\nconst stage = ref(null);\nconst transformer = ref(null);\nconst layer = ref(null);\nconst i18n = ref(null);\nconst urls = ref(null);\n\n// Select mode\nconst toolbarMode = ref('select')\n\n// Saving\nconst loading = ref(true)\nconst error = ref()\nconst savingUrl = ref()\n\n// Text editing state\nconst editingTextId = ref(null);\nconst editingText = ref('');\nconst textInput = ref(null);\n\n// UI tick to re-compute overlay position on Konva events without syncing geometry to Vue\nconst uiTick = ref(0);\nconst moving = ref(false);\n\n//Check if there are any unsaved changes.\nconst isDirty = ref(false);\nlet initialState = null;\n\n// Toolbar refs and helpers\nconst colorInput = ref<HTMLInputElement|null>(null);\nconst selectedShape = computed(() => {\n    // If multiple selected, prefer the primary selectedId for single-shape UI.\n    if (selectedId.value) {\n        return getShape(selectedId.value);\n    }\n    // fallback to first of selectedIds when primary isn't set\n    if (selectedIds.value.length > 0) {\n        return getShape(selectedIds.value[0]);\n    }\n    return null;\n});\n\n// Shape mode drawing\nconst tempRect = ref<any>(null);\nconst tempCircle = ref<any>(null);\nconst shapeDrawStart = ref<{ x: number; y: number } | null>(null);\n\n\n// Drawing\nconst isDrawing = ref(false)\nconst tempGroup = ref(null)\nconst strokeSize = ref(1)\nconst currentColor = ref(null)\nconst currentBgColor = ref(null)\nconst hitStrokeWidth = ref(12)\n\n// Gallery\nconst galleryOpened = ref(false)\nconst imageRefs = ref({})\n\n// Search\nconst searchOpened = ref(false)\n\n// Entities\nconst entityRefs = ref({})\n\n// Settings\nconst settingsOpened = ref(false)\n\nconst settingsOpen = ref(false);\nconst resetOpen = ref(false);\n\n// Present users\nlet channel\nconst activeUsers = ref([]);\n\n// Hidden clipboard fallback element (used for dev)\nlet hiddenClipboardEl: HTMLTextAreaElement | null = null;\n\nconst persistShape = (shape) => {\n    if (props.readonly || (shape.urls && shape.urls.edit)) {\n        return Promise.resolve({ data: {  success: true, id: shape.id, urls: shape.urls } });\n    };\n\n    const payload = {\n        type: shape.type,\n        x: shape.x,\n        y: shape.y,\n        width: shape.width,\n        height: shape.height,\n        scale_x: shape.scaleX,\n        scale_y: shape.scaleY,\n        rotation: shape.rotation,\n        fill: shape.fill,\n        text: shape.text,\n        uuid: shape.uuid,\n        entity_id: shape.entity,\n        is_locked: shape.is_locked ? 1 : 0,\n        children: shape.children ?? [],\n        // Add other fields as per your WhiteboardShape model\n        shape: JSON.stringify(shape)\n    };\n\n    axios.put(props.save, payload)\n        .then(res => {\n            if (res.data.success) {\n                const oldId = shape.id;\n                shape.id = res.data.id;\n                shape.urls = res.data.urls;\n\n                // Manually update the Konva node ID if it exists\n                const stageNode = stage.value?.getNode();\n                const groupNode = stageNode?.findOne(`#group-${oldId}`);\n                if (groupNode) {\n                    groupNode.id(`group-${shape.id}`);\n                }\n\n                uiTick.value++;\n            }\n        })\n        .catch(err => {\n            window.showToast(trans('error-saving-shape'), 'error');\n        });\n}\n\n// Reactive input style that updates automatically\nconst inputStyle = computed(() => {\n    // depend on uiTick so Konva drag/transform events can refresh this computed\n    void uiTick.value;\n\n    if (!editingTextId.value) return {};\n\n    const shape = getShape(editingTextId.value);\n    if (!shape) return {};\n\n    const stageNode = stage.value?.getNode();\n    if (!stageNode) return {};\n\n    // Get current position from the actual Konva node\n    const groupNode = stageNode.findOne(`#group-${editingTextId.value}`);\n    if (!groupNode) return {};\n\n    const stageContainer = stageNode.container();\n    const containerRect = stageContainer.getBoundingClientRect();\n\n    // Use getClientRect() of the actual node so transforms/scale are accounted for\n    let rect: { x: number; y: number; width: number; height: number } | null = null;\n\n    const r = groupNode.getClientRect();\n    rect = { x: r.x, y: r.y, width: r.width, height: r.height };\n    const padding = Math.max(5, Math.min(rect.width, rect.height) * 0.1);\n    const fontSize = Math.max(10, Math.min(rect.height * 0.15, rect.width * 0.08, 24));\n\n    return {\n        left: (containerRect.left + rect.x + padding) + 'px',\n        top: (containerRect.top + rect.y + padding) + 'px',\n        width: (rect.width - (padding * 2)) + 'px',\n        height: (rect.height - (padding * 2)) + 'px',\n        fontSize: fontSize + 'px',\n        textAlign: 'center',\n        fontFamily: 'Arial',\n        color: getTextColor(shape),\n    };\n});\n\n\nconst toolbarStyle = computed(() => {\n\n});\n\nconst openResetDialog = () => {\n    settingsOpen.value = false;\n    resetOpen.value = true;};\n\n// Clears board and saves\nconst confirmReset = () => {\n    shapes.value = [];\n};\n\nconst handleDragstart = (shape) => {\n    dragItemId.value = shape.id;\n    shape.moving = true;\n    moving.value = true;\n    shape.opacity = 0.9;\n\n    // Move the dragged group visually on top without mutating shapes array\n    const stageNode = stage.value?.getNode();\n    const groupNode = stageNode?.findOne(`#group-${shape.id}`);\n    groupNode?.moveToTop();\n\n};\n\nconst handleDragend = (e, shape) => {\n    dragItemId.value = null;\n    shape.moving = false;\n    moving.value = false;\n    shape.opacity = 1;\n\n    const pos = {\n        x: e.target.x(),\n        y: e.target.y()\n    };\n    shape.x = pos.x;\n    shape.y = pos.y;\n\n    // If the shape has an update URL, save its new position\n    patch(shape, {\n        x: shape.x,\n        y: shape.y\n    })\n};\n\nconst handleDragmove = () => {\n    if (editingTextId.value) {\n        uiTick.value++; // refresh inputStyle without syncing geometry into shapes\n    }\n};\n\nconst startSelect = () => {\n    toolbarMode.value = 'select';\n    tempRect.value = null;\n    tempCircle.value = null;\n}\n\n// Called from UI when user clicks the \"add square\" toolbar button.\nconst startShapeDraw = (type: 'rect'|'circle'|'text') => {\n    // Cancel other modes\n    toolbarMode.value = type;\n    tempRect.value = null;\n    tempCircle.value = null;\n    shapeDrawStart.value = null;\n\n    // Prevent stage panning while drawing a shape\n    const stageNode = stage.value?.getNode();\n    if (stageNode) {\n        stageNode.draggable(false);\n    }\n};\n\n\nconst setupTransformerEvents = () => {\n    const transformerNode = transformer.value?.getNode();\n    if (!transformerNode) return;\n\n    // Recompute textarea overlay while transforming\n    transformerNode.off('transform.transformer'); // prevent duplicate handlers\n    transformerNode.off('dragmove.transformer');\n    transformerNode.off('transformend.transformer');\n    transformerNode.off('dragend.transformer');\n\n    transformerNode.on('transformend.transformer', (e) => {\n        if (!selectedIds.value || !selectedIds.value.length) return;\n        const nodes = transformerNode.nodes() || [];\n        if (!nodes.length) return;\n\n        // When multiple nodes are selected, persist each node's transform back to its shape model.\n        nodes.forEach((group) => {\n            // group.id() is `group-<shapeId>`; extract the shape id suffix.\n            const gid = group.id();\n            const match = gid && gid.toString().match(/^group-(.+)$/);\n            if (!match) return;\n            const sid = match[1];\n            const shape = getShape(sid);\n            if (!shape) return;\n\n            const scaleX = group.scaleX() || 1;\n            const scaleY = group.scaleY() || 1;\n\n            // Persist transforms/position/rotation\n            if (shape.type === 'circle') {\n                // For circles, we normalize the radius based on scale\n                // Since keepRatio is true, we can just use scaleX\n                shape.radius = (shape.radius || (shape.width / 2)) * scaleX;\n                shape.width = shape.radius * 2;\n                shape.height = shape.radius * 2;\n            } else {\n                shape.width = (shape.width || 0) * scaleX;\n                shape.height = (shape.height || 0) * scaleY;\n            }\n\n            shape.scaleX = 1;\n            shape.scaleY = 1;\n            shape.rotation = group.rotation() || 0;\n            shape.x = group.x();\n            shape.y = group.y();\n\n            // Reset the node scale so it doesn't double-up visually\n            group.scaleX(1);\n            group.scaleY(1);\n\n            // Persist changes if URL exists\n            patch(shape, {\n                x: shape.x,\n                y: shape.y,\n                width: shape.width,\n                height: shape.height,\n                scale_x: 1,\n                scale_y: 1,\n                rotation: shape.rotation\n            })\n        });\n\n        // Force redraw and update overlays\n        uiTick.value++;\n        transformerNode.getLayer().batchDraw();\n    });\n};\n\n\nconst selectShape = (shape: any, event?: MouseEvent) => {\n    if (props.readonly) return\n    // Don't do any selection while in drawing mode to avoid confusion\n    if (toolbarMode.value === 'drawing') {\n        return;\n    }\n    toolbarMode.value = 'select';\n\n        // If clicking a second time on a text, edit the text\n    let editingText = false;\n    if (shape.text && selectedId.value === shape.id) {\n        editText(shape)\n        editingText = true;\n    }\n\n    // Shift-click: add/remove from multi-selection\n    if (event && event.evt && event.evt.shiftKey) {\n        const idx = selectedIds.value.indexOf(shape.id);\n        if (idx === -1) {\n            // add\n            selectedIds.value.push(shape.id);\n            // if no primary selectedId set, make this primary\n            if (!selectedId.value) selectedId.value = shape.id;\n        } else {\n            // remove\n            selectedIds.value.splice(idx, 1);\n            // if it was primary, clear or pick next\n            if (selectedId.value === shape.id) {\n                selectedId.value = selectedIds.value.length ? selectedIds.value[0] : null;\n            }\n        }\n\n        // update transformer to reflect multiple selection\n        nextTick(() => {\n            updateTransformer(false);\n            setupTransformerEvents();\n        });\n        return;\n    }\n\n    // Regular click: select only this shape\n    selectedIds.value = [shape.id];\n    selectedId.value = shape.id;\n\n    if (shape.fill) {\n        currentColor.value = shape.fill;\n    }\n    nextTick(() => {\n        updateTransformer(editingText);\n        setupTransformerEvents();\n    });\n};\n\n// Helper used by the template to check whether a shape is in current multi-selection\nconst isSelected = (id: string) => {\n    return selectedIds.value.indexOf(id) !== -1;\n};\n\n\nconst updateTransformer = (editingText: boolean = false) => {\n    const transformerNode = transformer.value?.getNode();\n    const stageNode = stage.value?.getNode();\n\n    if (!transformerNode || !stageNode) {\n        return;\n    }\n\n    // Build node list from selectedIds\n    const nodeList = selectedIds.value\n        .map(id => stageNode.findOne(`#group-${id}`))\n        .filter(n => !!n);\n\n    // If nothing selected, clear transformer\n    if (!nodeList.length) {\n        transformerNode.nodes([]);\n        transformerNode.getLayer().batchDraw();\n        return;\n    }\n\n    // If any of selected shapes are locked or editing text -> disable transformer\n    const anyLocked = selectedIds.value.some(id => {\n        const s = getShape(id);\n        return s && s.is_locked;\n    });\n    if (anyLocked || editingText) {\n        transformerNode.nodes([]);\n        transformerNode.getLayer().batchDraw();\n        return;\n    }\n\n    transformerNode.nodes(nodeList);\n    transformerNode.getLayer().batchDraw();\n};\n\n\n// Actions: delete, lock, color\nconst deleteSelected = () => {\n    if (!selectedIds.value.length) return;\n    // Remove all selected shapes from shapes array\n    const idsToRemove = new Set(selectedIds.value);\n    for (let i = shapes.value.length - 1; i >= 0; i--) {\n        const shape = shapes.value[i];\n        if (idsToRemove.has(shape.id)) {\n            // If the shape is persisted, call the delete API\n            if (shape.urls?.delete) {\n                axios.delete(shape.urls.delete);\n            }\n            shapes.value.splice(i, 1);\n        }\n    }\n\n    // Clear selection state\n    selectedIds.value = [];\n    selectedId.value = null;\n    editingTextId.value = null;\n    uiTick.value++;\n\n    // Ensure transformer no longer references removed nodes\n    updateTransformer();\n};\n\nconst duplicateSelected = () => {\n    if (!selectedIds.value.length) return;\n\n    const offset = 30;\n    const newShapes = [];\n\n    // Duplicate each selected shape\n    for (const id of selectedIds.value) {\n        const shape = getShape(id);\n        if (!shape) continue;\n\n        const clone = JSON.parse(JSON.stringify(shape));\n\n        // Generate new unique ID and remove\n        clone.id = tempID();\n        delete clone.urls;\n\n        // For drawings, we need to delete the strokes\n        if (clone.children && Array.isArray(clone.children)) {\n            clone.children.forEach(stroke => {\n                delete stroke.id;\n            });\n        }\n\n        // Offset position\n        if (typeof clone.x === 'number') clone.x += offset;\n        if (typeof clone.y === 'number') clone.y += offset;\n\n        shapes.value.push(clone);\n        newShapes.push(clone);\n\n        persistShape(clone);\n    }\n\n    // Update selection to new clones\n    selectedIds.value = newShapes.map(s => s.id);\n    selectedId.value = newShapes.length === 1 ? newShapes[0].id : null;\n    editingTextId.value = null;\n\n    // update transformer to reflect multiple selection\n    nextTick(() => {\n        updateTransformer(false);\n        setupTransformerEvents();\n    });\n\n    uiTick.value++;\n};\n\n// Action: toggle select all shapes (Ctrl+A or Cmd+A)\nconst toggleSelectAll = () => {\n    // If all shapes are already selected, deselect them\n    const allSelected = selectedIds.value.length === shapes.value.length && shapes.value.length > 0;\n\n    if (allSelected) {\n        selectedIds.value = [];\n        selectedId.value = null;\n    } else {\n        selectedIds.value = shapes.value.map(s => s.id);\n        selectedId.value = null; // multiple selection\n    }\n\n    editingTextId.value = null;\n\n    // Trigger re-render and update transformer to reflect selection state\n    uiTick.value++;\n    updateTransformer();\n};\n\n// Action: move selected shapes using arrow keys\nconst moveSelectedByArrowKey = (key: string) => {\n    if (!selectedIds.value.length) return;\n\n    const reposition = 10;\n\n    for (const id of selectedIds.value) {\n        const shape = getShape(id);\n        if (!shape || shape.is_locked) continue;\n        switch (key) {\n            case 'ArrowUp':\n                shape.y = (shape.y ?? 0) - reposition;\n                break;\n            case 'ArrowDown':\n                shape.y = (shape.y ?? 0) + reposition;\n                break;\n            case 'ArrowLeft':\n                shape.x = (shape.x ?? 0) - reposition;\n                break;\n            case 'ArrowRight':\n                shape.x = (shape.x ?? 0) + reposition;\n                break;\n        }\n    }\n\n    uiTick.value++;\n    updateTransformer();\n};\n\nconst ensureHiddenClipboard = () => {\n    if (!hiddenClipboardEl) {\n        hiddenClipboardEl = document.createElement('textarea');\n        hiddenClipboardEl.id = 'hidden-clipboard';\n        hiddenClipboardEl.style.position = 'fixed';\n        hiddenClipboardEl.style.opacity = '0';\n        hiddenClipboardEl.style.pointerEvents = 'none';\n        hiddenClipboardEl.style.zIndex = '-1';\n\n        // hiddenClipboardEl.style.top = '50px';\n        // hiddenClipboardEl.style.left = '50px';\n        // hiddenClipboardEl.style.width = '300px';\n        // hiddenClipboardEl.style.opacity = '1';\n        // hiddenClipboardEl.style.zIndex = '1';\n        // hiddenClipboardEl.rows = 8\n\n        hiddenClipboardEl.setAttribute('aria-hidden', 'true');\n        hiddenClipboardEl.readOnly = true;\n        hiddenClipboardEl.tabIndex = -1;\n\n        // Ensure it cannot receive or react to keyboard input\n        hiddenClipboardEl.addEventListener('keydown', (ev) => {\n            ev.stopImmediatePropagation();\n            ev.preventDefault();\n        }, { capture: true });\n\n        // Also block focus attempts\n        hiddenClipboardEl.addEventListener('focus', (ev) => {\n            ev.preventDefault();\n            hiddenClipboardEl.blur();\n        });\n\n        document.body.appendChild(hiddenClipboardEl);\n    }\n    return hiddenClipboardEl;\n};\n\nconst selectedShapes = computed(() => {\n    return shapes.value.filter(s => selectedIds.value.includes(s.id));\n});\n\nconst copySelectedToClipboard = () => {\n    try {\n        if (!selectedIds.value.length) return;\n\n        const selectedShapes = selectedShapes();\n        const json = JSON.stringify(selectedShapes);\n\n        const isSecure = window.isSecureContext && navigator.clipboard;\n\n        if (isSecure) {\n            navigator.clipboard.writeText(json).then(() => {\n                //console.log('Shapes copied to clipboard');\n                window.showToast(trans('copy-success'));\n            }).catch(err => {\n                //console.warn('Clipboard write failed:', err);\n                // fallback to hidden textarea\n                const el = ensureHiddenClipboard();\n                el.value = json;\n            });\n        } else {\n            // Localhost/dev fallback\n            const el = ensureHiddenClipboard();\n            //Testing link and text pasting on dev enviroment:\n            //el.value = 'This is text';\n            el.value = json;\n            //el.value = 'http://app.kanka.test:8081/w/1/entities/1650';\n            // Also try classic execCommand for good measure\n            try {\n                el.focus();\n                el.select();\n                document.execCommand('copy');\n            } catch (err) {\n                //console.warn('execCommand copy failed (fallback stored only):', err);\n            }\n\n            console.log('Shapes copied via hidden clipboard fallback');\n            window.showToast(trans('copy-success'));\n        }\n    } catch (err) {\n        console.error('Failed to copy shapes:', err);\n    }\n};\nconst pasteFromClipboard = async () => {\n    try {\n        let text = '';\n\n        // Use modern API if possible\n        if (navigator.clipboard && window.isSecureContext) {\n            text = await navigator.clipboard.readText();\n        } else {\n            // Fallback for localhost/dev\n            const el = ensureHiddenClipboard();\n            text = el.value;\n        }\n\n        if (!text) return;\n\n        console.log('pasted text', text);\n\n        // Regex to detect /w/{{campaign_id}}/entities/{{id}}\n        const entityUrlRegex = /\\/w\\/\\d+\\/entities\\/(\\d+)$/;\n        const match = text.match(entityUrlRegex);\n\n        if (match) {\n            const entityId = match[1];\n\n            try {\n                // Replace the first occurrence\n                const res = await axios.get(props.entity.replace(\"/0.json\", `/${entityId}.json`));\n                const entityData = res.data.data;\n\n                // Create the entity shape\n                createEntityShape(entityData);\n            } catch (err) {\n                console.error('Failed to fetch entity:', err);\n                window.showToast(trans('paste-error') + ': ' + err.message, 'error');\n            }\n            // update transformer to reflect multiple selection\n            nextTick(() => {\n                updateTransformer(false);\n                setupTransformerEvents();\n            });\n            return;\n        }\n\n        let pasted = [];\n\n        // Attempt to parse shapes JSON first\n        try {\n            const copiedShapes = JSON.parse(text);\n            if (Array.isArray(copiedShapes) && copiedShapes.length) {\n                const stageNode = stage.value?.getNode?.();\n                if (!stageNode) return;\n\n                // Compute bounding box\n                const minX = Math.min(...copiedShapes.map(s => s.x ?? 0));\n                const minY = Math.min(...copiedShapes.map(s => s.y ?? 0));\n                const maxX = Math.max(...copiedShapes.map(s => (s.x ?? 0) + (s.width ?? 0)));\n                const maxY = Math.max(...copiedShapes.map(s => (s.y ?? 0) + (s.height ?? 0)));\n\n                const copiedWidth = maxX - minX;\n                const copiedHeight = maxY - minY;\n\n                // Stage center\n                const stageCenter = stageNode.getPointerPosition?.() || {\n                    x: stageNode.width() / 2,\n                    y: stageNode.height() / 2,\n                };\n\n                const offsetX = stageCenter.x - (minX + copiedWidth / 2);\n                const offsetY = stageCenter.y - (minY + copiedHeight / 2);\n\n                pasted = copiedShapes.map(shape => {\n                    const newShape = { ...shape };\n                    newShape.id = tempID();\n\n                    if (typeof newShape.x === 'number') newShape.x += offsetX;\n                    if (typeof newShape.y === 'number') newShape.y += offsetY;\n\n                    return newShape;\n                });\n            } else {\n                pasted = [createTextShapeFromClipboard(text)];\n            }\n        } catch {\n            // Plain text fallback\n            pasted = [createTextShapeFromClipboard(text)];\n        }\n\n        if (!pasted.length) return;\n\n        shapes.value.push(...pasted);\n        selectedIds.value = pasted.map(s => s.id);\n        selectedId.value = pasted.length === 1 ? pasted[0].id : null;\n\n        updateTransformer();\n        uiTick.value++;\n    } catch (err) {\n        console.error('Failed to paste:', err);\n    }\n\n    // update transformer to reflect multiple selection\n    nextTick(() => {\n        updateTransformer(false);\n        setupTransformerEvents();\n    });\n};\n\nconst createTextShapeFromClipboard = (textValue: string) => {\n\n    const stageNode = stage.value?.getNode?.();\n    if (!stageNode) return;\n\n    // Get the mouse pointer position; fallback to center if unavailable\n    const pointer = stageNode.getPointerPosition?.();\n    const x = pointer?.x ?? stageNode.width() / 2;\n    const y = pointer?.y ?? stageNode.height() / 2;\n\n    return {\n        id: tempID(),\n        type: 'text',\n        x: x,\n        y: y,\n        scaleX: 1,\n        scaleY: 1,\n        width: 100,\n        height: 50,\n        radius: null,\n        fill: currentColor.value,\n        text: textValue, // use clipboard text here\n        fontFamily: 'Arial',\n        locked: false,\n        moving: false,\n    };\n};\n\nconst reload = () => {\n    window.location.reload();\n}\n\nconst createEntityShape = (entity: any) => {\n    loadImage(entity.image_thumb, entity.id);\n\n    const stageNode = stage.value?.getNode?.();\n    if (!stageNode) return;\n\n    // Get the mouse pointer position; fallback to center if unavailable\n    const pointer = stageNode.getPointerPosition?.();\n    const x = pointer?.x ?? stageNode.width() / 2;\n    const y = pointer?.y ?? stageNode.height() / 2;\n\n    const id = tempID();\n\n    const newShape = {\n        id: id,\n        type: \"entity\",\n        x: x,\n        y: y,\n        width: 128,\n        height: 128,\n        scaleX: 1,\n        scaleY: 1,\n        entity: entity.id,\n        fill: currentColor.value,\n        locked: false,\n        moving: false,\n    };\n\n    shapes.value.push(newShape);\n    persistShape(newShape);\n\n    // Select the newly added entity\n    selectedIds.value = [id];\n    selectedId.value = id;\n    updateTransformer();\n\n    uiTick.value++;\n};\n\nconst toggleLock = () => {\n    if (!selectedIds.value.length) return;\n\n    selectedShapes.value.forEach(shape => {\n        shape.is_locked = !shape.is_locked;\n        patch(shape, { is_locked: shape.is_locked });\n    });\n    updateTransformer();\n    uiTick.value++;\n};\n\nconst patch = (shape: any, fields: object) => {\n    if (!shape.urls?.edit) {\n        return;\n    }\n    axios.patch(shape.urls.edit, fields);\n\n}\n\nconst openColorPicker = () => {\n    colorInput.value?.click();\n};\n\nconst onPickColor = (e: Event) => {\n    const input = e.target as HTMLInputElement\n    if (!input) return\n    if (toolbarMode.value === 'drawing') {\n        tempGroup.value.fill = input.value\n        currentColor.value = input.value\n        currentBgColor.value = input.value\n        return\n    }\n    if (selectedIds.value.length) {\n        selectedShapes.value.forEach(shape => {\n            shape.fill = input.value;\n            patch(shape, { fill: shape.fill });\n        });\n        currentColor.value = input.value;\n        currentBgColor.value = input.value\n        uiTick.value++;\n    }\n};\n\nconst getTextSize = (shape) => {\n    if (!shape) return 14;\n\n    if (shape.fontSize) {\n        return shape.fontSize;\n    }\n\n    let fontSize = 42;\n    const text = (shape.text || '').toString();\n\n    // Decrease font size until fits\n    while (true) {\n        const tmp = new Konva.Text({\n            text,\n            fontSize,\n            fontFamily: shape.fontFamily,\n        });\n        const { width, height } = tmp.getClientRect();\n\n        if (width <= shape.width && height <= shape.height) break;\n        fontSize -= 1;\n        if (fontSize <= 1) break;\n    }\n    return fontSize;\n};\n\nconst getTextPadding = (shape) => {\n    return 5;\n};\n\nconst editText = (shape) => {;\n    if (!shape || shape.is_locked) return;\n    editingTextId.value = shape.id;\n    editingText.value = shape.text || '';\n    nextTick(() => {\n        textInput.value?.focus();\n    });\n};\n\nconst updateTextPreview = () => {\n    if (editingTextId.value) {\n        const shape = getShape(editingTextId.value);\n        if (shape) {\n            shape.text = editingText.value;\n        }\n    }\n};\n\nconst saveText = () => {\n    if (editingTextId.value) {\n        const shape = getShape(editingTextId.value);\n        if (shape) {\n            shape.text = editingText.value;\n            patch(shape, {\n                text: shape.text\n            });\n        }\n    }\n    cancelTextEdit();\n};\n\nconst cancelTextEdit = () => {\n    editingTextId.value = null;\n    editingText.value = '';\n};\n\nconst handleStageClick = (e) => {\n    if (toolbarMode.value === 'drawing' || props.readonly) {\n        return;\n    }\n    if (e.target === e.target.getStage()) {\n        selectedId.value = null;\n        selectedIds.value = [];\n        updateTransformer();\n        if (editingTextId.value) {\n            cancelTextEdit();\n        }\n    }\n};\n\nconst getTextColor = (shape) => {\n    return (shape.fill || '#000').toString();\n};\n\nconst toggleDrawing = () => {\n    // Start\n    if (toolbarMode.value !== 'drawing') {\n        toolbarMode.value = 'drawing';\n        return;\n    }\n\n    // Finalize\n    toolbarMode.value = 'select';\n    if (tempGroup.value) {\n\n        const stageNode = stage.value?.getNode();\n        const node = stageNode?.findOne(`#temp-group-${tempGroup.value.id}`);\n\n        if (node) {\n            const r = node.getClientRect();\n\n            // Normalize points from stage-space to group-local space\n            tempGroup.value.children = tempGroup.value.children.map((line) => {\n                const pts = line.points;\n                const normalized = pts.map((v, idx) => (idx % 2 === 0 ? v - r.x : v - r.y));\n                return { ...line, points: normalized };\n            });\n\n            // Set final geometry\n            tempGroup.value.x = r.x;\n            tempGroup.value.y = r.y;\n            tempGroup.value.width = r.width;\n            tempGroup.value.height = r.height;\n\n            // Update the backend with the final bounds and normalized points\n            patch(tempGroup.value, {\n                x: tempGroup.value.x,\n                y: tempGroup.value.y,\n                width: tempGroup.value.width,\n                height: tempGroup.value.height,\n            });\n        }\n\n        tempGroup.value.moving = false;\n        tempGroup.value.is_locked = false;\n        tempGroup.value.draggable = true;\n\n        shapes.value.push(tempGroup.value);\n        tempGroup.value = null;\n    }\n}\n\nconst resetSelection = () => {\n    // If currently in freehand drawing and there is a tempGroup, discard it and stop drawing\n    if (toolbarMode.value === 'drawing') {\n        isDrawing.value = false;\n        tempGroup.value = null;\n        // exit drawing mode\n        toolbarMode.value = 'select';\n        uiTick.value++;\n        return;\n    }\n\n    // If in rectangle or circle draw mode: cancel the temporary rect/circle and exit to select\n    if (toolbarMode.value === 'rect' || toolbarMode.value === 'circle' || toolbarMode.value === 'text') {\n        tempRect.value = null;\n        shapeDrawStart.value = null;\n        toolbarMode.value = 'select';\n        uiTick.value++;\n        return;\n    }\n\n    // If any shapes are selected, clear selection\n    if (selectedIds.value && selectedIds.value.length) {\n        selectedIds.value = [];\n        selectedId.value = null;\n        updateTransformer();\n        uiTick.value++;\n        return;\n    }\n}\n\nconst handleMouseDown = (e) => {\n    // Ignore mousedown when clicking on an existing shape/group so Konva's drag handling\n    // can proceed without us starting a new temporary drawing stroke/shape.\n    try {\n        const node = e.target;\n        // If the event target or any of its parent groups is a shape group (id starts with 'group-'),\n        // bail out — this is a user interacting with an existing shape (drag/transform/etc).\n        if (node && typeof node.getParent === 'function') {\n            let p = node;\n            while (p) {\n                const id = typeof p.id === 'function' ? p.id() : (p.id ?? null);\n                if (id && id.toString().startsWith('group-')) {\n                    return;\n                }\n                p = p.getParent ? p.getParent() : null;\n                // stop when we reach the stage\n                if (p && p.getStage && p.getStage() === p) break;\n            }\n        }\n    } catch (err) {\n        // ignore any unexpected shape of the event object and continue normally\n    }\n\n    // If freehand drawing mode\n    if (toolbarMode.value === 'drawing') {\n        isDrawing.value = true;\n\n        const pos = getPointerInLayerSpace();\n        if (!pos) return;\n\n        const strokeID = Date.now() + \"-lin\";\n        const strokeData = {\n            id: strokeID,\n            points: [pos.x, pos.y],\n            fill: currentColor.value,\n            strokeWidth: strokeSize.value,\n        }\n\n        if (!tempGroup.value) {\n            tempGroup.value = {\n                id: tempID(),\n                type: \"drawing\",\n                children: [strokeData],\n                scaleX: 1,\n                scaleY: 1,\n                x: 0,\n                y: 0,\n                width: 0,\n                height: 0,\n            };\n        } else {\n            tempGroup.value.children.push(strokeData);\n        }\n        return;\n    }\n\n    // If shape-draw (rectangle) mode\n    if (toolbarMode.value === 'rect' || toolbarMode.value === 'text') {\n        const pos = getPointerInLayerSpace();\n        if (!pos) return;\n        shapeDrawStart.value = pos;\n\n        // Create a temporary visual rect\n        tempRect.value = {\n            id: 'temp-rect-' + Date.now(),\n            type: toolbarMode.value,\n            x: pos.x,\n            y: pos.y,\n            width: 0,\n            height: 0,\n            scaleX: 1,\n            scaleY: 1,\n            fill: currentBgColor.value || cssVariable('--b1'),\n            stroke: null,\n            locked: false,\n            moving: false,\n        };\n        return;\n    }\n\n    // If shape-draw (circle) mode\n    if (toolbarMode.value === 'circle') {\n        const pos = getPointerInLayerSpace();\n        if (!pos) return;\n        shapeDrawStart.value = pos;\n\n        // Create a temporary visual circle (center at start point, radius 0 initially)\n        tempCircle.value = {\n            id: 'temp-circle-' + Date.now(),\n            type: 'circle',\n            x: pos.x,\n            y: pos.y,\n            radius: 0,\n            scaleX: 1,\n            scaleY: 1,\n            fill: currentBgColor.value || cssVariable('--b1'),\n            stroke: null,\n            locked: false,\n            moving: false,\n        };\n        return;\n    }\n\n\n\n    if (toolbarMode.value === 'select') return;\n\n    const pos = getPointerInLayerSpace();\n    if (!pos) return;\n\n    if (!tempGroup.value) {\n        tempGroup.value = {\n            id: Date.now(),\n            type: \"group\",\n            children: [],\n            scaleX: 1,\n            scaleY: 1,\n        }\n    }\n\n    tempGroup.value.children.push({\n        id: Date.now() + \"-lin\",\n        type: \"draw\",\n        points: [pos.x, pos.y],\n        fill: currentColor.value,\n        strokeWidth: strokeSize.value,\n        hitStrokeWidth: hitStrokeWidth.value,\n    });\n}\n\n// Add this helper to convert pointer position into the layer's local coordinates\nfunction getPointerInLayerSpace() {\n    const stageNode = stage.value?.getNode();\n    const layerNode = (stageNode && stageNode.findOne('Layer')) || layer.value?.getNode();\n    if (!stageNode || !layerNode) return null;\n\n    const p = stageNode.getPointerPosition();\n    if (!p) return null;\n\n    // Transform pointer from screen/stage space into this layer's local space\n    const tr = layerNode.getAbsoluteTransform().copy();\n    tr.invert();\n    const local = tr.point(p);\n    return { x: local.x, y: local.y };\n}\n\n\nconst draw = (e) => {\n    // Freehand drawing\n    if (isDrawing.value && toolbarMode.value === 'drawing') {\n        const pos = getPointerInLayerSpace();\n        if (!pos) return;\n\n        const last = tempGroup.value.children[tempGroup.value.children.length - 1];\n        last.points = last.points.concat([pos.x, pos.y]);\n        return;\n    }\n\n    // Rectangle live preview\n    if ((toolbarMode.value === 'rect' || toolbarMode.value === 'text' ) && shapeDrawStart.value && tempRect.value) {\n        const pos = getPointerInLayerSpace();\n        if (!pos) return;\n\n        // Compute box that supports dragging in any direction\n        const sx = shapeDrawStart.value.x;\n        const sy = shapeDrawStart.value.y;\n        const x = Math.min(sx, pos.x);\n        const y = Math.min(sy, pos.y);\n        const w = Math.abs(pos.x - sx);\n        const h = Math.abs(pos.y - sy);\n\n        tempRect.value.x = x;\n        tempRect.value.y = y;\n        tempRect.value.width = Math.max(1, w);\n        tempRect.value.height = Math.max(1, h);\n        // request overlay update\n        uiTick.value++;\n    }\n\n    // Circle live preview\n    if (toolbarMode.value === 'circle' && shapeDrawStart.value && tempCircle.value) {\n        const pos = getPointerInLayerSpace();\n        if (!pos) return;\n\n        const sx = shapeDrawStart.value.x;\n        const sy = shapeDrawStart.value.y;\n        const dx = pos.x - sx;\n        const dy = pos.y - sy;\n        const r = Math.max(1, Math.sqrt(dx * dx + dy * dy));\n\n        tempCircle.value.cx = sx;\n        tempCircle.value.cy = sy;\n        tempCircle.value.radius = r;\n        uiTick.value++;\n    }\n}\n\nconst handleMouseUp = (e) => {\n    // Finalize freehand drawing\n    if (toolbarMode.value === 'drawing') {\n        if (isDrawing.value) {\n            const lastStroke = tempGroup.value.children[tempGroup.value.children.length - 1];\n\n            if (!tempGroup.value.persistencePromise && !tempGroup.value.urls?.stroke) {\n                tempGroup.value.persistencePromise = persistShape(tempGroup.value);\n            }\n            const parentReady = tempGroup.value.persistencePromise || Promise.resolve();\n\n            parentReady.then(() => {\n                // Send only the newest stroke to the API\n                axios.post(tempGroup.value.urls.stroke, {\n                    points: lastStroke.points,\n                    width: lastStroke.strokeWidth,\n                    fill: lastStroke.fill,\n                }).then(res => {\n                    if (res.data.success) {\n                        lastStroke.id = res.data.id;\n                    }\n                })\n                    .catch(() => {\n                        window.showToast(trans('error-saving-stroke'), 'error');\n                    });\n            });\n        }\n\n        uiTick.value++;\n        isDrawing.value = false;\n        return;\n    }\n\n    // Finalize rectangle drawing\n    if (toolbarMode.value === 'rect') {\n        if (tempRect.value && tempRect.value.width > 1) {\n            // Push normalized rect into shapes\n            const newRect = {\n                id: tempID(),\n                type: 'rect',\n                x: tempRect.value.x,\n                y: tempRect.value.y,\n                scaleX: 1,\n                scaleY: 1,\n                width: tempRect.value.width,\n                height: tempRect.value.height,\n                fill: tempRect.value.fill || cssVariable('--b1'),\n                locked: false,\n                moving: false,\n            };\n\n            shapes.value.push(newRect);\n            persistShape(newRect);\n            uiTick.value++;\n            nextTick(() => {\n                updateTransformer();\n                uiTick.value++;\n            });\n        }\n\n        // Clear temporary state and exit shape draw mode\n        tempRect.value = null;\n        return;\n    }\n\n    // Finalize text drawing\n    if (toolbarMode.value === 'text') {\n        if (tempRect.value) {\n            // Push normalized rect into shapes\n            const newText = {\n                id: tempID(),\n                type: 'text',\n                x: tempRect.value.x,\n                y: tempRect.value.y,\n                scaleX: 1,\n                scaleY: 1,\n                width: tempRect.value.width,\n                height: tempRect.value.height,\n                fill: cssVariable('--bc'),\n                text: \"Click to edit\",\n                fontFamily: 'Arial',\n                locked: false,\n                moving: false,\n            };\n\n            shapes.value.push(newText);\n            persistShape(newText);\n            uiTick.value++;\n        }\n\n        // Clear temporary state and exit shape draw mode\n        tempRect.value = null;\n        return;\n    }\n\n    // Finalize circle drawing\n    if (toolbarMode.value === 'circle') {\n        if (tempCircle.value && tempCircle.value.radius > 1) {\n            const newCircle = {\n                id: tempID(),\n                type: 'circle',\n                x: tempCircle.value.cx - tempCircle.value.radius,\n                y: tempCircle.value.cy - tempCircle.value.radius,\n                scaleX: 1,\n                scaleY: 1,\n                width: tempCircle.value.radius * 2,\n                height: tempCircle.value.radius * 2,\n                radius: tempCircle.value.radius,\n                fill: tempCircle.value.fill || cssVariable('--b1'),\n                locked: false,\n                moving: false,\n            };\n\n            shapes.value.push(newCircle);\n            persistShape(newCircle);\n            uiTick.value++;\n        }\n\n        tempCircle.value = null;\n        return;\n    }\n}\n\n\n// Disable stage dragging while in drawing mode\nwatch(toolbarMode, (isOn) => {\n    const stageNode = stage.value?.getNode();\n    if (stageNode) {\n        stageNode.draggable(!isOn);\n        stageNode.getLayer()?.batchDraw?.();\n    }\n});\n\n//Check for unsaved changes\n// watch(\n//     [shapes, name],\n//     () => {\n//         if (loading.value || !initialState) return;\n//\n//         const current = JSON.stringify({\n//             shapes: shapes.value,\n//             name: name.value,\n//         });\n//\n//         isDirty.value = current !== JSON.stringify(initialState);\n//     },\n//     { deep: true }\n// );\n\nconst tempID = () => {\n    return  'local-' + Date.now() + '-' + Math.floor(Math.random() * 1000);\n}\n\n// Compute the visible top-left of the stage in stage coordinates\nfunction getStageVisibleTopLeft() {\n    const stageNode = stage.value?.getNode();\n    if (!stageNode) return { x: 0, y: 0, scaleX: 1, scaleY: 1 };\n\n    const scaleX = stageNode.scaleX() || 1;\n    const scaleY = stageNode.scaleY() || 1;\n\n    // When the stage is panned to (stage.x(), stage.y()), the visible top-left\n    // in stage coordinates is (-x/scaleX, -y/scaleY)\n    const x = -stageNode.x() / scaleX;\n    const y = -stageNode.y() / scaleY;\n\n    return { x, y, scaleX, scaleY };\n}\n\nconst openGallery = () => {\n    galleryOpened.value = true\n}\n\n// Force redraw when an image finishes loading\nfunction watchImage(uuid: string, shapeId: string) {\n    const r = imageRefs.value[uuid];\n    if (!r) return;\n\n    watch(\n        () => r,\n        (imgEl) => {\n            if (imgEl) {\n                // If you want the shape to match the real image size the first time it loads:\n                const shape = getShape(shapeId);\n                if (shape && (!shape.width || !shape.height)) {\n                    // Use natural size on first load if width/height were falsy\n                    shape.width = imgEl.naturalWidth || 100;\n                    shape.height = imgEl.naturalHeight || 80;\n\n                    // Now that we have dimensions, persist to backend\n                    persistShape(shape);\n                }\n\n                // Force Konva to repaint immediately\n                const layerNode = layer.value?.getNode();\n                layerNode?.batchDraw?.();\n            }\n        },\n        { immediate: true }\n    );\n}\n\n\nconst selectImage = (image) => {\n    loadImage(image.src, image.uuid);\n\n    const { x: tlx, y: tly, scaleX, scaleY } = getStageVisibleTopLeft();\n    // Convert 50px screen offset into stage-space offset\n    const offsetX = 50 / scaleX;\n    const offsetY = 50 / scaleY;\n\n    const id = tempID();\n\n    const newShape = {\n        id: id,\n        type: \"image\",\n        x: tlx + offsetX,\n        y: tly + offsetY,\n        scaleX: 1,\n        scaleY: 1,\n        width: null,\n        height: null,\n        uuid: image.uuid,\n        locked: false,\n        moving: false,\n    };\n\n    shapes.value.push(newShape);\n    watchImage(image.uuid, id);\n}\n\nconst closedGallery = () => {\n    galleryOpened.value = false\n}\n\n// Return the actual HTMLImageElement (or null) for Konva\nconst getImageEl = (shape) => {\n    if (shape.type === 'entity') {\n        return imageRefs.value[shape.entity] || null;\n    }\n    return imageRefs.value[shape.uuid] || null;\n}\n\nconst openSearch = () => {\n    searchOpened.value = true\n}\n\nconst closedSearch = () => {\n    searchOpened.value = false\n}\n\nconst getShape = (id: string|number) => {\n    return shapes.value.find(s => s.id == id) || null;\n}\nconst selectEntity = (entity) => {\n    searchOpened.value = false;\n\n    loadImage(entity.image, entity.id);\n    console.log('selected entity', entity);\n    loadEntity(entity);\n\n    const { x: tlx, y: tly, scaleX, scaleY } = getStageVisibleTopLeft();\n    // Convert 50px screen offset into stage-space offset\n    const offsetX = 50 / scaleX;\n    const offsetY = 50 / scaleY;\n\n    const id = tempID();\n\n    const newShape = {\n        id: id,\n        type: \"entity\",\n        x: tlx + offsetX,\n        y: tly + offsetY,\n        width: 128,\n        height: 128,\n        scaleX: 1,\n        scaleY: 1,\n        entity: entity.id,\n        fill: cssVariable('--bc'),\n        locked: false,\n        moving: false,\n    };\n\n    shapes.value.push(newShape);\n    persistShape(newShape);\n}\n\nconst resetRotation = () => {\n    if (!selectedIds.value || !selectedIds.value.length) return;\n    selectedIds.value.forEach(id => {\n        const shape = getShape(id);\n        if (shape) {\n            shape.rotation = 0;\n            patch(shape, {rotation: 0})\n        }\n    })\n}\n\nconst nothingToRotate = () => {\n    if (!selectedIds.value || !selectedIds.value.length) {\n        console.log('nothing selected');\n        return true;\n    }\n    let rotatable = false;\n    selectedIds.value.forEach(id => {\n        const shape = getShape(id);\n        if (shape && shape.rotation) {\n            rotatable = true;\n        }\n    })\n    return !rotatable;\n}\n\nconst pushTo = (where: 'front' | 'back') => {\n    if (!selectedIds.value || !selectedIds.value.length) return;\n\n    // Build a map for quick lookup of selected ids\n    const selectedSet = new Set(selectedIds.value);\n\n    // Extract selected items preserving their current relative order\n    const selectedItems = shapes.value.filter(s => selectedSet.has(s.id));\n\n    // Remove selected items from shapes array in-place (iterate backwards)\n    for (let i = shapes.value.length - 1; i >= 0; i--) {\n        if (selectedSet.has(shapes.value[i].id)) {\n            shapes.value.splice(i, 1);\n        }\n    }\n    if (where === 'front') {\n        // Append selected items in their original relative order -> top of canvas\n        selectedItems.forEach(item => shapes.value.push(item));\n    } else {\n        // Prepend selected items in their original relative order -> bottom of canvas\n        // To maintain original relative order when unshifting, insert them in reverse.\n        for (let i = selectedItems.length - 1; i >= 0; i--) {\n            shapes.value.unshift(selectedItems[i]);\n        }\n    }\n\n\n    // Force UI refresh for overlays and transformer\n    uiTick.value++;\n\n}\n\nconst cssVariable = (variable: string) => {\n    const base = hslFromVar(variable);\n    if (!base) return `hsl(${readCssVar('--p')})`;\n    return hslString(base);\n}\n\nconst loadImages = (images: any) => {\n    //console.log(images);\n    Object.entries(images).forEach(([id, src]) => {\n        loadImage(src, id);\n    })\n}\n\nconst loadEntities = (entities: any) => {\n    Object.entries(entities).forEach(([id, entity]) => {\n        loadEntity(entity);\n    });\n}\n\nconst loadEntity = (entity: any) => {\n    entityRefs.value[entity.id] = entity;\n}\n\nconst loadImage = (url, id) => {\n    const img = new Image();\n    img.crossOrigin = 'anonymous';\n    img.src = url;\n    img.onload = () => {\n        imageRefs.value[id] = img;\n        uiTick.value++;\n\n        // If this image belongs to a specific shape, check for natural size\n        const shape = shapes.value.find(s => s.uuid === id || s.entity === id || s.id === id);\n        if (shape && (!shape.width || !shape.height)) {\n            shape.width = img.naturalWidth;\n            shape.height = img.naturalHeight;\n            persistShape(shape);\n        }\n    };\n}\n\n\n\nconst openSettings = () => {\n    settingsOpened.value = true\n}\nconst closedSettings = (newName) => {\n    settingsOpened.value = false\n    name.value = newName;\n}\n\n\nconst stageSize = {\n    width: window.innerWidth,\n    height: window.innerHeight,\n    draggable: true,\n};\n\n\n// Zoom state and helpers\nconst minScale = 0.2;\nconst maxScale = 3;\nconst zoomStep = 1.15; // multiplicative step for smooth zooming\n\nfunction setStageScale(newScale: number, pointer?: { x: number; y: number }) {\n    const stageNode = stage.value?.getNode();\n    if (!stageNode) return;\n\n    // Clamp\n    const scale = Math.max(minScale, Math.min(maxScale, newScale));\n\n    if (pointer) {\n        // Zoom to pointer: compute position in stage coords before changing scale\n        const mousePointTo = {\n            x: (pointer.x - stageNode.x()) / (stageNode.scaleX() || 1),\n            y: (pointer.y - stageNode.y()) / (stageNode.scaleY() || 1),\n        };\n\n        stageNode.scale({ x: scale, y: scale });\n\n        // after scale, adjust stage position so that the pointer stays pointing at same stage coordinate\n        const newPos = {\n            x: pointer.x - mousePointTo.x * scale,\n            y: pointer.y - mousePointTo.y * scale,\n        };\n        stageNode.x(newPos.x);\n        stageNode.y(newPos.y);\n    } else {\n        // center-preserving fallback: keep center in place\n        const container = stageNode.container();\n        const rect = container.getBoundingClientRect();\n        const stageCenter = { x: rect.width / 2, y: rect.height / 2 };\n        setStageScale(newScale, stageCenter);\n        return;\n    }\n\n    stageNode.getLayer()?.batchDraw?.();\n    uiTick.value++; // update overlays\n}\n\nconst zoomBy = (factor: number, pointer?: { x: number; y: number }) => {\n    const stageNode = stage.value?.getNode();\n    if (!stageNode) return;\n    const current = stageNode.scaleX() || 1;\n    setStageScale(current * factor, pointer);\n};\n\nconst zoomIn = (ev?: MouseEvent) => {\n    const stageNode = stage.value?.getNode();\n    if (!stageNode) return;\n    const pointer = ev ? { x: ev.clientX, y: ev.clientY } : undefined;\n    zoomBy(zoomStep, pointer);\n};\n\nconst zoomOut = (ev?: MouseEvent) => {\n    const stageNode = stage.value?.getNode();\n    if (!stageNode) return;\n    const pointer = ev ? { x: ev.clientX, y: ev.clientY } : undefined;\n    zoomBy(1 / zoomStep, pointer);\n};\n\n// Wheel handler: when Shift is pressed, zoom; otherwise default behavior (we keep stage draggable)\nconst handleWheel = (e) => {\n    // Only act if shift key is held. This avoids interfering with normal panning or other interactions.\n    //if (!e.shiftKey) return;\n\n    // Prevent page scroll\n    e.evt.preventDefault();\n\n    const stageNode = stage.value?.getNode();\n    if (!stageNode) return;\n\n    const pointer = { x: e.evt.clientX, y: e.evt.clientY };\n\n    // Use deltaY to determine zoom direction; normalize sign.\n    const zoomDirection = e.evt.deltaY > 0 ? 1 / zoomStep : zoomStep;\n    zoomBy(zoomDirection, pointer);\n};\n\nconst trans = (key: string) => {\n    return i18n.value[key] || key\n}\n\n\n\nonMounted(async () => {\n\n    currentColor.value = cssVariable('--bc')\n    currentBgColor.value = cssVariable('--b1')\n    savingUrl.value = props.save\n\n    try {\n        const res = await axios.get(props.load);\n        if (res.data) {\n            name.value = res.data.name\n            shapes.value = res.data.data\n            i18n.value = res.data.i18n\n            urls.value = res.data.urls\n\n            if (res.data.images) {\n                loadImages(res.data.images)\n            }\n\n            if (res.data.entities) {\n                loadEntities(res.data.entities)\n            }\n\n            if (res.data.interactive) {\n                try {\n                    setupWebsockets(res.data.interactive)\n                } catch (wsSetupError) {\n                    console.error('Failed to initialize websocket', wsSetupError);\n                }\n            } else {\n                loading.value = false\n            }\n        }\n        initialState = JSON.parse(JSON.stringify({\n            shapes: shapes.value,\n            name: name.value,\n        }));\n\n        window.addEventListener('keydown', handleKeyDown);\n        window.addEventListener('mousedown', handleClick);\n        window.addEventListener('contextmenu', e => e.preventDefault());\n\n        // Clean up listener on unmount\n        onBeforeUnmount(() => {\n            cleanupBeforeUnmount();\n            if (echo) {\n                echo.leave(`whiteboard.${props.whiteboard}`)\n            }\n        });\n    } catch (err)  {\n        console.error('Failed to load whiteboard data:', err);\n        error.value = 'Error loading whiteboard.';\n    }\n\n\n\n})\n\n// Mouse handler\nconst handleClick = (e: MouseEvent) => {\n    if (e.button === 2) {\n        e.preventDefault();\n        resetSelection();\n    }\n}\n\nconst setupWebsockets = (data: any) => {\n\n    configureEcho({\n        broadcaster: 'reverb'\n    })\n\n    const echo = new Echo({\n        broadcaster: 'reverb',\n        key: data.key,\n        wsHost: data.host,\n        wsPort: data.port,\n        wssPort: data.port,\n        forceTLS: data.schema == 'https',\n        enabledTransports: ['ws', 'wss'],\n    });\n\n    // Listen if the connection to the websocket fails at init\n    echo.connector.pusher.connection.bind('unavailable', () => {\n        console.error('Websocket unavailable');\n        error.value = trans('websocket-server-unavailable');\n        loading.value = false\n    });\n\n    echo.connector.pusher.connection.bind('error', (err) => {\n        console.error('Websocket error', err);\n        // If the handshake fails (bad auth, bad key)\n        error.value = trans('error-connecting-websocket');\n        loading.value = false\n    });\n\n    channel = echo.join(`whiteboard.${props.whiteboard}`);\n\n    channel.here((users: any) => {\n        activeUsers.value = users\n        loading.value = false\n    })\n    channel.joining((user: any) => {\n        activeUsers.value.push(user)\n    })\n    channel.leaving((user: any) => {\n        activeUsers.value = activeUsers.value.filter(u => u.id !== user.id)\n    })\n\n    channel.listen('.shape', (e: any) => {\n        handleRemoteShape(e);\n    })\n\n    channel.error((err: any) => {\n        console.error('Websocket lost connection', err);\n        // If the handshake fails (bad auth, bad key)\n        error.value = trans('websocket-disconnected');\n    });\n}\n\nconst handleRemoteShape = (e) => {\n    const { action, shape, image, entity } = e;\n    const index = shapes.value.findIndex(s => s.id === shape.id || (s.uuid && s.uuid === shape.uuid));\n\n    //console.info('Shape arrived', action, shape);\n\n    if (action === 'deleted') {\n        if (index !== -1) {\n            shapes.value.splice(index, 1);\n            // If the deleted shape was selected, clear selection\n            if (selectedIds.value.includes(shape.id)) {\n                selectedIds.value = selectedIds.value.filter(id => id !== shape.id);\n                if (selectedId.value === shape.id) selectedId.value = null;\n            }\n        }\n    } else if (action === 'created' || action === 'updated') {\n        if (index !== -1) {\n            // Update existing shape\n            // We merge properties to avoid losing local-only state like 'moving' if necessary\n            Object.assign(shapes.value[index], shape);\n        } else {\n            // Add new shape\n            shapes.value.push(shape);\n\n            // If it's an image or entity, trigger image loading\n            if (shape.type === 'entity') {\n                if (!entityRefs.value[shape.entity]) {\n                    entityRefs.value[shape.entity] = entity;\n                }\n                loadImage(image, shape.entity);\n            }\n            if (shape.type === 'image') {\n                const id = shape.uuid;\n                const url = image;\n                if (url) loadImage(url, id);\n            }\n        }\n    }\n\n    // Force Konva redraw and transformer update\n    uiTick.value++;\n    nextTick(() => {\n        updateTransformer();\n    });\n}\n\n// Keyboard handler: delete selected shape when Delete key pressed\nconst handleKeyDown = (e: KeyboardEvent) => {\n    // Ignore if readonly, or currently editing text (we don't want to delete while typing),\n    // or if focus is inside an input/textarea (native behavior)\n    const active = document.activeElement;\n    const inputFocused = active && (\n        active.tagName === 'INPUT' ||\n        active.tagName === 'TEXTAREA' ||\n        (active as HTMLElement).isContentEditable\n    );\n\n    if (props.readonly || editingTextId.value || inputFocused) return;\n\n    // Support both 'Delete' and legacy keyCode 46\n    if (e.key === 'Delete' || (e as any).keyCode === 46) {\n        e.preventDefault();\n        deleteSelected();\n    }\n\n    // Support duplicating selected shapes with Ctrl+D or Cmd+D\n    if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'd') {\n        e.preventDefault(); // Prevent browser \"bookmark\" shortcut\n        duplicateSelected();\n    }\n\n    // Select or deselect all shapes with Ctrl+A or Cmd+A\n    if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'a') {\n        e.preventDefault(); // Prevent browser \"Select All\" in page\n        toggleSelectAll();\n    }\n\n    // Move selected shapes with arrow keys\n    if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n        e.preventDefault(); // Prevent page scrolling\n\n        moveSelectedByArrowKey(e.key);\n    }\n\n    // Save whiteboard with Ctrl+S or Cmd+S\n    if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 's') {\n        e.preventDefault(); // prevent browser \"Save page\" dialog\n        saveWhiteboard();\n    }\n\n    // Copy selected shapes to clipboard with Ctrl+C or Cmd+C\n    if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'c') {\n\n        // Don't override native copy when editing text\n        if (editingTextId.value) return;\n\n        e.preventDefault(); // prevent browser \"Copy\" action\n        copySelectedToClipboard();\n    }\n\n    // Paste shapes from clipboard with Ctrl+V or Cmd+V\n    if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'v') {\n        // Don't override native paste when editing text\n        if (editingTextId.value) return;\n\n        e.preventDefault(); // prevent browser \"Paste\" action\n        pasteFromClipboard();\n    }\n\n    if (e.key === 'Escape' || (e as any).keyCode === 27) {\n        e.preventDefault();\n        resetSelection();\n        return;\n    }\n    if (e.key === 'Enter' || (e as any).keyCode === 13) {\n        if (toolbarMode.value === 'drawing') {\n            e.preventDefault();\n            // Reuse the same finalization as the UI toggle: push tempGroup into shapes\n            toggleDrawing();\n            return;\n        }\n    }\n\n    // Undo (Ctrl/Cmd+Z)\n    if ((e.ctrlKey || e.metaKey) && !e.shiftKey && e.key.toLowerCase() === 'z') {\n        e.preventDefault();\n        if (toolbarMode.value === 'drawing') {\n            undoStroke();\n        } else {\n            undo();\n        }\n    }\n\n    // Redo (Ctrl/Cmd+Y) or (Ctrl+Shift+Z)\n    if ((e.ctrlKey || e.metaKey) && (e.key.toLowerCase() === 'y' || ((e.shiftKey) && e.key.toLowerCase() === 'z'))) {\n        e.preventDefault();\n        if (toolbarMode.value === 'drawing') {\n            redoStroke();\n        } else {\n            redo();\n        }\n    }\n};\n\nconst autoFont = () => {\n    if (!selectedShape.value || selectedShape.value.type !== 'text') return\n    delete selectedShape.value.fontSize;\n    patch(selectedShape.value, {\n        fontSize: null\n    });\n}\n\nconst biggerFont = () => {\n    if (!selectedShape.value || selectedShape.value.type !== 'text') return\n    selectedShape.value.fontSize = (selectedShape.value.fontSize || 10) + 2;\n    patch(selectedShape.value, {\n        fontSize: selectedShape.value.fontSize\n    });\n}\n\nconst smallerFont = () => {\n    if (!selectedShape.value || selectedShape.value.type !== 'text') return\n    selectedShape.value.fontSize = (selectedShape.value.fontSize || 12) - 2;\n    patch(selectedShape.value, {\n        fontSize: selectedShape.value.fontSize\n    });\n}\n\nconst openQQ = () => {\n    window.openDialog(\"primary-dialog\", urls.value.creator)\n}\n\n\nconst cleanupBeforeUnmount = () => {\n    window.removeEventListener('keydown', handleKeyDown);\n}\n\nconst getUserTooltip = (user: any) => {\n    let role = user.role == 'edit' ? trans('role-edit') : trans('role-view');\n    return '<div class=\"flex flex-col gap-1\">' +\n    '<a class=\"text-link text-lg\" href=\"' + user.link + '\">' + user.name + '</a>' +\n    '<span class=\"text-neutral-content text-xs\">' + role + '</span></div>';\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/composables/useEntitySimilarity.js",
    "content": "import { ref } from 'vue'\n\nexport function useEntitySimilarity() {\n    const similarEntities = ref([])\n    const isChecking = ref(false)\n\n    let debounceTimer = null\n    let lastChecked = ''\n    let endPoint = ''\n    let entityId = null\n\n    const setup = (endpoint, id) => {\n        endPoint = endpoint\n        entityId = id\n    }\n\n    const setName = (name) => {\n        if (debounceTimer) {\n            clearTimeout(debounceTimer)\n        }\n\n        if (!name || name.length < 3) {\n            similarEntities.value = []\n            return\n        }\n\n        debounceTimer = setTimeout(() => {\n            if (name === lastChecked) {\n                return\n            }\n            lastChecked = name\n            isChecking.value = true\n\n            const url = endPoint + '?q=' + encodeURIComponent(name) + '&exclude=' + (entityId || '')\n\n            fetch(url)\n                .then(r => r.json())\n                .then(res => {\n                    similarEntities.value = res\n                    isChecking.value = false\n                })\n                .catch(() => {\n                    isChecking.value = false\n                })\n        }, 400)\n    }\n\n    const clear = () => {\n        similarEntities.value = []\n        lastChecked = ''\n    }\n\n    return { similarEntities, isChecking, setup, setName, clear }\n}\n"
  },
  {
    "path": "resources/js/connections/web.js",
    "content": "import { createApp } from 'vue';\nimport vClickOutside from \"click-outside-vue3\"\nimport Web from \"../components/connections/Web.vue\";\n\nconst app = createApp({});\napp.use(vClickOutside);\napp.component('connections-web', Web);\napp.mount('#web');\n"
  },
  {
    "path": "resources/js/conversation.js",
    "content": "import { createApp } from 'vue'\nimport Conversation from \"./components/conversation/Conversation.vue\";\n\nconst app = createApp({})\napp.component('conversation', Conversation)\napp.mount('#conversation');\n"
  },
  {
    "path": "resources/js/cookieconsent.js",
    "content": "import 'cookieconsent/build/cookieconsent.min.js';\nconst field = document.getElementById('cookieconsent');\nlet setup, api;\n\nconst initCookieConsent = () => {\n    if (!field) {\n        return;\n    }\n    setup = field.dataset.setup;\n\n    api = field.dataset.api;\n\n    //console.log('init cookie consent');\n    window.cookieconsent.initialise({\n        type: 'opt-in',\n        layout: 'basic',\n        content: JSON.parse(setup),\n        // location: {\n        //     timeout: 5000,\n        //     services: ['kanka'],\n        //     serviceDefinitions: {\n        //         kanka: function () {\n        //             return {\n        //                 // This service responds with JSON, so we simply need to parse it and return the country code\n        //                 url: api,\n        //                 headers: ['Accept: application/json'],\n        //                 callback: function (done, response) {\n        //                     try {\n        //                         var json = JSON.parse(response);\n        //                         return json.error\n        //                             ? toError(json)\n        //                             : {\n        //                                 code: json.country\n        //                             };\n        //                     } catch (err) {\n        //                         return toError({error: 'Invalid response (' + err + ')'});\n        //                     }\n        //                 }\n        //             };\n        //         },\n        //     },\n        // },\n        law: {\n            countryCode: field.dataset.country\n        },\n        palette: {\n            \"popup\": { \"background\": \"#08083c\", \"text\": \"#ffffff\" },\n            \"button\": { \"background\": \"#007bff\", \"text\": \"#ffffff\" },\n        },\n        onPopupOpen: function () {\n            //console.log('<em>onPopupOpen()</em> called');\n        },\n        onPopupClose: function () {\n            //console.log('<em>onPopupClose()</em> called');\n        },\n        onInitialise: function (status) {\n            //console.log('<em>onInitialise()</em> called with status <em>' + status + '</em>');\n            if (status === 'allow') {\n                initTracking();\n            }\n        },\n        onStatusChange: function (status) {\n            //console.log('<em>onStatusChange()</em> called with status <em>' + status + '</em>');\n            if (status === 'allow') {\n                initTracking();\n            }\n        },\n        onRevokeChoice: function () {\n            //console.log('<em>onRevokeChoice()</em> called');\n        },\n        onNoCookieLaw: function () {\n            initTracking();\n        }\n    });\n};\n\nconst toError = (obj) => {\n    return new Error('Error [' + (obj.code || 'UNKNOWN') + ']: ' + obj.error);\n};\n\nconst initTracking = () => {\n    // console.log('initTracking', field.dataset);\n    if (field.dataset.gtag) {\n        // console.log('add gtag');\n        allConsentGranted();\n    }\n    if (field.dataset.gtm) {\n        // console.log('add gtm');\n        initGTM(window,document,'script','dataLayer', field.dataset.gtm);\n    }\n};\n\nconst initGTM = (w,d,s,l,i) => {\n    w[l]=w[l]||[];\n    w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});\n    var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';\n    j.async=true;\n    j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;\n    f.parentNode.insertBefore(j,f);\n};\n\nconst allConsentGranted = () => {\n    gtag('consent', 'update', {\n        'ad_user_data': 'granted',\n        'ad_personalization': 'granted',\n        'ad_storage': 'granted',\n        'analytics_storage': 'granted'\n    });\n};\n\ninitCookieConsent();\n"
  },
  {
    "path": "resources/js/crud.js",
    "content": "/**\n * Re-register any events that need to be bound when a modal is loaded\n */\nfunction registerModalLoad() {\n    window.onEvent(function() {\n        registerDropdownFormActions();\n    });\n}\n\nfunction registerEntityNameCheck() {\n    const field = document.querySelector('#form-entry input[name=\"name\"]');\n    if (!field) {\n        return;\n    }\n    if (field.dataset.liveDisabled) {\n        return;\n    }\n\n    let lastCheckedValue = '';\n    field.addEventListener('focusout', function (event) {\n        // Don't bother if the user didn't set any value or value hasn't changed\n        if (!field.value || field.value === lastCheckedValue) {\n            return;\n        }\n        lastCheckedValue = field.value;\n\n        const block = this.dataset.duplicate;\n        const entityCreatorDuplicateWarning = document.querySelector(block);\n        if (!entityCreatorDuplicateWarning) {\n            return;\n        }\n        const url = this.dataset.live +\n            '?q=' + encodeURIComponent(this.value) +\n            '&exclude=' + this.dataset.id;\n        entityCreatorDuplicateWarning.classList.add('hidden');\n        const duplicates = entityCreatorDuplicateWarning.querySelector('.duplicates');\n\n        // Check if an entity of the same type already exists, and warn when it does.\n        fetch(url)\n            .then((response) => response.json())\n            .then((res) => {\n                duplicates.innerHTML = '';\n                res.forEach(entity => {\n                    const link = document.createElement('a');\n                    link.href = entity.url;\n                    link.text = entity.name;\n                    duplicates.appendChild(link);\n                });\n                if (res.length > 0) {\n                    entityCreatorDuplicateWarning.classList.remove('hidden');\n                }\n            });\n    });\n}\n\n/**\n * Forms have dropdown actions to select which submit is being\n * done. Instead of using submit buttons like normal people,\n * we use links that set the main action's name.\n */\nconst registerDropdownFormActions = () => {\n    // Return early if there are no elements in the page to be handled\n    const entityFormActions = document.querySelectorAll('.form-submit-actions');\n    if (entityFormActions.length === 0) {\n        return;\n    }\n    let entityFormMainButton = document.getElementById('form-submit-main');\n    let entityFormSubmitMode = document.getElementById('submit-mode');\n    if (entityFormSubmitMode === undefined) {\n        throw new Error(\"No submit mode hidden input found\");\n    }\n\n    // Register click on each sub action\n    entityFormActions.forEach(action => {\n        // if(action.dataset.loaded === '1') {\n        //     return;\n        // }\n        // action.dataset.loaded = '1';\n        action.addEventListener('click', function (event) {\n            event.preventDefault();\n            entityFormSubmitMode.name = action.dataset.action;\n            entityFormMainButton.click();\n            return false;\n        });\n    });\n};\n\n\n/**\n * If we change something on a form, avoid losing data when going away.\n */\nfunction registerUnsavedChanges() {\n    // Return early if we have no elements to handle\n    const forms = document.querySelectorAll('form[data-unload=\"1\"]');\n    if (forms.length === 0) {\n        return;\n    }\n    const save = document.querySelector('#form-submit-main');\n\n    // Save every input change\n    const inputs = document.querySelectorAll('form[data-unload=\"1\"] input, form[data-unload=\"1\"] select, form[data-unload=\"1\"] textarea');\n    inputs.forEach(input => {\n        // Skip based on a data property, of it its old bootstrap fields (summernote)\n        if (input.dataset.skipUnsaved || input.classList.contains('form-control')) {\n            return;\n        }\n        // Standard input fields are simple\n        input.addEventListener('change', function () {\n            window.entityFormHasUnsavedChanges = true;\n        });\n    });\n\n    if (!save) {\n        return;\n    }\n    // Another way to bind the event\n    window.addEventListener('beforeunload', function (e) {\n        if (window.entityFormHasUnsavedChanges) {\n            e.preventDefault();\n            e.returnValue = 'Unsaved data warning';\n        }\n    });\n}\n\n/**\n * Register a listened to add dynamic rows in the forms\n * Used in the calendar forms extensively\n */\nconst registerDynamicRows = () => {\n    const rows = document.querySelectorAll('.dynamic-row-add');\n    rows.forEach(row => {\n        row.addEventListener('click', function (e) {\n            e.preventDefault();\n\n            const target = row.dataset.target;\n            const template = row.dataset.template;\n            const child = document.createElement('div');\n            child.innerHTML = document.querySelector('#' + template).innerHTML;\n            document.querySelector('.' + target).append(child);\n\n            registerDynamicRowDelete();\n            window.triggerEvent();\n            return false;\n        });\n    });\n    registerDynamicRowDelete();\n};\n\n/**\n * Register a listener to delete a dynamically added row in the forms\n */\nconst registerDynamicRowDelete = () => {\n    const rows = document.querySelectorAll('.dynamic-row-delete');\n    rows.forEach(row => {\n        if (row.dataset.init === 1) {\n            return;\n        }\n        row.dataset.init = 1;\n        row.addEventListener('click', function (e) {\n            e.preventDefault();\n            row.closest('.parent-delete-row').remove();\n        });\n        row.addEventListener('keydown', function (e) {\n            // Support for pressing enter on a span\n            if (e.key !== 'Enter') {\n                return;\n            }\n            row.click();\n        });\n    });\n};\n\n\nregisterDynamicRows();\nregisterDropdownFormActions();\nregisterUnsavedChanges();\nregisterModalLoad();\nregisterEntityNameCheck();\n"
  },
  {
    "path": "resources/js/dashboard.js",
    "content": "import Sortable from \"sortablejs\"\nimport { createApp } from 'vue'\nimport VueTippy from 'vue-tippy'\nimport Onboarding from \"./dashboards/onboarding/Onboarding.vue\"\nimport GettingStarted from \"./dashboards/widgets/getting-started/GettingStarted.vue\"\nimport vClickOutside from \"click-outside-vue3\"\n\nclass DashboardManager {\n    constructor() {\n        this.init();\n    }\n\n    init() {\n        // Initialize one-time setups\n        this.initDashboardCalendars(); // Sets up delegation\n        this.initPreviewExpander();    // Sets up delegation\n        this.initDashboardAdminUI();\n        this.initFollow();\n        this.initOnboarding();\n        this.initGettingStarted();\n\n        // Start observing widgets\n        this.initLazyLoader();\n    }\n\n    /**\n     * Initialize lazy loading for widgets using IntersectionObserver.\n     * Fixes bug where widgets were rendered multiple times.\n     */\n    initLazyLoader() {\n        const observer = new IntersectionObserver((entries) => {\n            entries.forEach(entry => {\n                if (entry.isIntersecting) {\n                    const widget = entry.target;\n                    this.renderWidget(widget);\n\n                    // Important: Stop observing once loaded to prevent re-fetching\n                    observer.unobserve(widget);\n                }\n            });\n        }, { threshold: [0] });\n\n        document.querySelectorAll('[data-render]')?.forEach((widget) => {\n            observer.observe(widget);\n        });\n    }\n\n    /**\n     * Render an deferred-rendering widget\n     */\n    renderWidget(widget) {\n        axios.get(widget.dataset.render)\n            .then(res => {\n                const id = widget.dataset.id;\n                this.renderCalendar(id, res.data);\n            })\n            .catch(error => console.error(`Error loading widget ${widget.dataset.id}:`, error));\n    }\n\n    renderCalendar(id, html) {\n        const loadingEl = document.querySelector('#widget-loading-' + id);\n        const bodyEl = document.querySelector('#widget-body-' + id);\n\n        if (loadingEl) loadingEl.classList.add('hidden');\n        if (bodyEl) {\n            bodyEl.innerHTML = html;\n            bodyEl.classList.remove('hidden');\n        }\n\n        if (window.triggerEvent) {\n            window.triggerEvent();\n        }\n\n        // Note: We no longer call initDashboardCalendars() here because\n        // we use event delegation now.\n    }\n\n    /**\n     * Handle Calendar Switchers using Event Delegation.\n     * This replaces the need to re-bind listeners after every AJAX call.\n     */\n    initDashboardCalendars() {\n        document.addEventListener('click', (e) => {\n            const switcher = e.target.closest('.widget-calendar-switch');\n            if (!switcher) return;\n\n            e.preventDefault();\n\n            const url = switcher.dataset.url;\n            const id = switcher.dataset.widget;\n            const bodyEl = document.querySelector('#widget-body-' + id);\n            const loadingEl = document.querySelector('#widget-loading-' + id);\n\n            if (bodyEl) bodyEl.classList.add('hidden');\n            if (loadingEl) loadingEl.classList.remove('hidden');\n\n            axios.post(url)\n                .then(res => {\n                    this.renderCalendar(id, res.data);\n                })\n                .catch(error => console.error('Error switching calendar:', error));\n        });\n    }\n\n    /**\n     * Admin UI initialization (Sortable, Summernote, Deletions)\n     */\n    initDashboardAdminUI() {\n        const widgetsContainer = document.getElementById('widgets');\n        if (widgetsContainer) {\n            this.initSortable(widgetsContainer);\n        }\n\n        // Event delegation for delete buttons\n        document.addEventListener('click', (e) => {\n            const img = e.target.closest('[data-img=\"delete\"]');\n            if (!img) return;\n\n            e.preventDefault();\n            const targetInput = document.querySelector('input[name=\"' + img.dataset.target + '\"]');\n            if (targetInput) {\n                targetInput.value = 1;\n            }\n\n            const preview = img.closest('.preview');\n            if (preview) {\n                preview.classList.add('hidden');\n            }\n        });\n\n        // Window event hook (likely for external triggers)\n        if (window.onEvent) {\n            window.onEvent(() => {\n                const summernoteConfig = document.getElementById('summernote-config');\n                if (summernoteConfig && window.initSummernote) {\n                    window.initSummernote();\n                }\n                // Delete listeners handled by delegation above, so removed from here.\n            });\n        }\n    }\n\n    initSortable(el) {\n        new Sortable(el, {\n            handle: '.handle',\n            onEnd: () => {\n                const url = el.dataset.url;\n                // Use URLSearchParams for cleaner serialization\n                const params = new URLSearchParams();\n                document.querySelectorAll('input[name=\"widgets[]\"]').forEach(input => {\n                    params.append(input.name, input.value);\n                });\n\n                axios.post(url, params)\n                    .then(res => {\n                        if (res.data.success && res.data.message && window.showToast) {\n                            window.showToast(res.data.message);\n                        }\n                    })\n                    .catch(err => console.error('Error saving order:', err));\n            }\n        });\n    }\n\n    initFollow() {\n        const btn = document.querySelector('#campaign-follow');\n        const text = document.querySelector('#campaign-follow-text');\n\n        if (!btn || !text) return;\n\n        const updateButtonState = (isFollowing) => {\n            text.innerHTML = isFollowing ? btn.dataset.unfollow : btn.dataset.follow;\n        };\n\n        // Set initial state\n        updateButtonState(!!btn.dataset.following);\n        btn.classList.remove('hidden');\n\n        btn.addEventListener('click', (e) => {\n            e.preventDefault();\n            btn.classList.add('loading');\n\n            axios.post(btn.dataset.url)\n                .then(res => {\n                    btn.classList.remove('loading');\n                    updateButtonState(res.data.following);\n                })\n                .catch(() => btn.classList.remove('loading'));\n        });\n    }\n\n    initPreviewExpander() {\n        // Use Event Delegation for expanders\n        document.addEventListener('click', (e) => {\n            const preview = e.target.closest('.preview-switch');\n            if (!preview) return;\n\n            e.preventDefault();\n            const overlay = document.querySelector('#widget-preview-body-' + preview.dataset.widget);\n            if (!overlay) return;\n\n            const gradient = preview.parentNode.querySelector('.gradient-to-base-100');\n            const isCollapsed = !overlay.classList.contains('max-h-52');\n\n            if (isCollapsed) {\n                // Collapse\n                overlay.classList.add('max-h-52');\n                preview.innerHTML = '<i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>';\n                if (gradient) gradient.classList.remove('hidden');\n            } else {\n                // Expand\n                overlay.classList.remove('max-h-52');\n                preview.innerHTML = '<i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>';\n                if (gradient) gradient.classList.add('hidden');\n            }\n        });\n    }\n\n    initOnboarding() {\n        const el = document.getElementById('onboarding');\n        if (!el) return;\n\n        const app = createApp({});\n        app.component('onboarding', Onboarding);\n        app.use(vClickOutside);\n        app.mount('#onboarding');\n    }\n\n    initGettingStarted() {\n        const el = document.getElementById('getting-started');\n        if (!el) return;\n\n        const app = createApp({});\n        app.component('getting-started', GettingStarted);\n        app.use(vClickOutside);\n        app.use(VueTippy, { theme: 'kanka' });\n        app.mount('#getting-started');\n    }\n}\n\n// Initialize the dashboard\nnew DashboardManager();\n"
  },
  {
    "path": "resources/js/dashboards/onboarding/Onboarding.vue",
    "content": "<template>\n    <dialog\n        v-if=\"loaded\"\n        class=\"dialog rounded-2xl bg-base-100 text-base-content\" id=\"onboarding-dialog\" ref=\"onboardingDialog\" aria-modal=\"true\" aria-labelledby=\"modal-card-label\"\n        @click=\"onBackdropClick\"\n        @cancel.prevent=\"dismiss('esc')\"\n>\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans('title')\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"close()\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">Close</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl p-4\">\n            <div class=\"flex flex-col gap-4 lg:gap-6\">\n                <p class=\"text-neutral-content\" v-html=\"trans('intro')\"></p>\n\n                <div class=\"flex flex-col gap-1\">\n                    <label for=\"name\" v-html=\"trans('name')\"></label>\n                    <input\n                        type=\"text\"\n                        name=\"name\"\n                        id=\"name\"\n                        ref=\"nameField\"\n                        class=\"\"\n                        v-model=\"name\"\n                        :placeholder=\"trans('name')\"\n                        data-1p-ignore=\"true\"\n                    />\n                        <p class=\"text-xs text-neutral-content\" v-html=\"trans('placeholder')\"></p>\n                    <p v-if=\"errorMessage\" v-html=\"errorMessage\" class=\"text-error-content\"></p>\n                </div>\n\n                <div class=\"flex flex-col gap-2\">\n                    <h3 v-html=\"trans('type-title')\">\n                    </h3>\n                    <p v-html=\"trans('type-intro')\"></p>\n\n                    <div class=\"flex flex-col gap-4\">\n                        <div :class=\"typeClass('worldbuilding')\" @click=\"select('worldbuilding')\" tabindex=\"0\" @keydown=\"handleKeydown($event, 'worldbuilding')\">\n                            <i class=\"fa-regular fa-check-square text-xl\" aria-label=\"Selected\" v-if=\"selected === 'worldbuilding'\"></i>\n                            <i class=\"fa-regular fa-globe text-xl\" aria-hidden=\"true\" v-else></i>\n                            <div class=\"flex flex-col gap-1\">\n                                <span class=\"text-lg\" v-html=\"trans('worldbuilding')\"></span>\n                                <p class=\"text-xs text-neutral-content\" v-html=\"trans('worldbuilding-description')\"></p>\n                            </div>\n                        </div>\n                        <div :class=\"typeClass('campaign')\" @click=\"select('campaign')\" tabindex=\"0\" @keydown=\"handleKeydown($event, 'campaign')\">\n                            <i class=\"fa-regular fa-check-square text-xl\" aria-label=\"Selected\" v-if=\"selected === 'campaign'\"></i>\n                            <i class=\"fa-regular fa-dice-d20 text-xl\" aria-hidden=\"true\" v-else></i>\n                            <div class=\"flex flex-col gap-1\">\n                                <span class=\"text-lg\" v-html=\"trans('campaign')\"></span>\n                                <p class=\"text-xs text-neutral-content\" v-html=\"trans('campaign-description')\"></p>\n                            </div>\n                        </div>\n                        <div :class=\"typeClass('story')\" @click=\"select('story')\" tabindex=\"0\" @keydown=\"handleKeydown($event, 'story')\">\n                            <i class=\"fa-regular fa-check-square text-xl\" aria-label=\"Selected\" v-if=\"selected === 'story'\"></i>\n                            <i class=\"fa-regular fa-pen-fancy text-xl\" aria-hidden=\"true\" v-else></i>\n                            <div class=\"flex flex-col gap-1\">\n                                <span class=\"text-lg\" v-html=\"trans('story')\"></span>\n                                <p class=\"text-xs text-neutral-content\" v-html=\"trans('story-description')\"></p>\n                            </div>\n                        </div>\n                    </div>\n\n                    <p class=\"text-xs text-neutral-content\" v-html=\"trans('type-helper')\">\n                    </p>\n                </div>\n            </div>\n\n            <div class=\"flex justify-between w-full gap-4 items-center mt-6\">\n                <button class=\"btn2 btn-sm btn-outline\" @click=\"skip()\" v-html=\"trans('skip')\">\n                </button>\n\n                <button\n                    class=\"btn2 btn-primary\"\n                    @click=\"save()\"\n                    v-if=\"!saving\"\n                    v-html=\"trans('continue')\">\n                </button>\n                <span\n                    class=\"btn2 btn-primary btn-disabled\"\n                    disabled=\"disabled\"\n                    v-else>\n                    <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Saving\"></i>\n                </span>\n            </div>\n        </article>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport {onMounted, ref, nextTick} from \"vue\"\n\nconst props = defineProps<{\n    api: undefined,\n    skip: undefined,\n    i18n: undefined,\n    campaign: undefined,\n}>()\n\nconst onboardingDialog = ref(null)\nconst name = ref('')\nconst nameField = ref(null)\nconst translations = ref()\nconst loaded = ref(false)\nconst selected = ref()\nconst saving = ref(false)\nconst errorMessage = ref()\n\nconst trans = (key) => {\n    return translations.value[key] ?? 'unknown'\n}\n\n\nconst close = () => {\n    dismiss('x');\n}\nconst closeDialog = () => {\n    window.closeDialog('onboarding-dialog')\n}\n\nconst dismiss = (reason: string) => {\n    axios.post(props.skip, {reason: reason})\n    closeDialog()\n}\n\nconst onBackdropClick = (event) => {\n    if (event.target === onboardingDialog.value) {\n        dismiss('backdrop')\n    }\n}\n\n\nconst skip = () =>  {\n    dismiss('skip')\n    closeDialog()\n}\n\nconst save = () => {\n    if (saving.value) {\n        return;\n    }\n    saving.value = true;\n\n    let data = {\n        name: name.value,\n        type: selected.value,\n    }\n    axios.post(props.api, data)\n        .then(response => {\n            if (response.data.redirect) {\n                window.location.href = response.data.redirect;\n            } else {\n                closeDialog();\n            }\n        })\n        .catch(error => {\n            if (error.response.data.message) {\n                errorMessage.value = error.response.data.message;\n                nameField.value.focus();\n                nameField.value.scrollIntoView({ behavior: 'smooth' });\n            } else {\n                console.error('onboarding saving error', error);\n            }\n            saving.value = false;\n        })\n}\n\nconst select = (type) => {\n    selected.value = type;\n}\n\nconst typeClass = (type) => {\n    let css = 'flex items-center gap-4 rounded-xl border p-2 px-4 hover:border-primary hover:text-primary focus:border-primary focus:text-primary';\n    if (selected.value !== type) {\n        return css + ' cursor-pointer';\n    }\n\n    return css + 'border-primary text-primary';\n}\n\nconst handleKeydown = (event, type) => {\n    if (event.key === 'Enter' || event.key === ' ') {\n        event.preventDefault(); // Prevent page scroll on space\n        select(type);\n    }\n}\n\n\nonMounted(async () => {\n    translations.value = JSON.parse(props.i18n)\n    name.value = props.campaign\n    loaded.value = true\n    await nextTick()\n    onboardingDialog.value.showModal()\n})\n</script>\n"
  },
  {
    "path": "resources/js/dashboards/onboarding/onboarding.js",
    "content": "import { createApp } from 'vue'\nimport Onboarding from \"./Onboarding.vue\"\nimport vClickOutside from \"click-outside-vue3\"\n\nconst app = createApp({})\napp.component('onboarding-dialog', Onboarding)\napp.use(vClickOutside)\n\napp.mount('#onboarding');\n"
  },
  {
    "path": "resources/js/dashboards/widgets/getting-started/GettingStarted.vue",
    "content": "<template>\n    <div v-if=\"loading\" class=\"flex items-center align-middle\">\n        <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading tasks\"></i>\n    </div>\n    <div\n        v-else\n        class=\"flex flex-col gap-2\">\n        <div class=\"flex items-center justify-between gap-2 mb-3\">\n\n            <span\n                class=\"widget-title block text-lg \"\n                v-html=\"name\"></span>\n            <span\n                class=\"text-xs text-neutral-content\"\n                v-html=\"progress()\">\n            </span>\n        </div>\n\n        <div class=\"tasks flex flex-col gap-2 lg:gap-3 xl:gap-4\">\n            <div\n                v-for=\"task in tasks\"\n            class=\"flex items-center gap-2 task\"\n            v-tippy=\"task.helper\">\n                <div class=\"task-icon\">\n                    <i class=\"fa-regular fa-square-check\" aria-label=\"Completed\" v-if=\"task.completed\"></i>\n                    <i class=\"fa-regular fa-square\" aria-label=\"Pending\" v-else></i>\n                </div>\n                <a\n                    v-if=\"!task.completed\"\n                    :href=\"task.url\"\n                    v-html=\"task.name\"></a>\n                <span\n                    v-else\n                    v-html=\"task.name\"\n                    class=\"line-through\"></span>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref, onMounted} from \"vue\";\n\nconst props = defineProps<{\n    api: undefined,\n    name: String,\n}>()\n\nconst loading = ref(true)\nconst tasks = ref([])\n\n\nonMounted(() => {\n    axios.get(props.api).then(res => {\n        tasks.value = res.data\n        loading.value = false\n    })\n})\n\nconst progress = () => {\n    let str = '';\n\n    let total = tasks.value.length;\n    let completed = tasks.value.filter(s => { return s.completed }).length;\n\n    if (total == completed) {\n        return '';\n    }\n\n    return completed + ' / ' + total;\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/datagrids.js",
    "content": "/**\n * Register button handling for bulk actions\n */\nconst registerBulkActions = () => {\n    const actions = document.querySelectorAll('[data-bulk-action]');\n    actions?.forEach(action => {\n        // These fields are in tippy, and duplicated in the dom when clicked\n        action.addEventListener('click', (e) => {\n            e.preventDefault();\n            setBulkModels(action.dataset.bulkAction);\n        });\n    });\n    const prints = document.querySelectorAll('.bulk-print');\n    prints?.forEach(print => {\n        print.addEventListener('click', (e) => {\n            e.preventDefault();\n            const form = print.closest('form');\n            form.requestSubmit();\n        });\n    });\n};\n\n/**\n * Register the handler for checking the bulk-delete checkboxes\n */\nconst registerBulkDelete = () => {\n    registerDeleteAllToggler();\n\n    const checkboxes = document.querySelectorAll(\"input[name='model[]']\");\n    checkboxes?.forEach(checkbox => {\n        if (checkbox.dataset.initiated === '1') {\n            return;\n        }\n        checkbox.dataset.initiated = '1';\n        checkbox.addEventListener('change', (e) => {\n            console.log('change');\n            e.preventDefault();\n            toggleCrudMultiDelete();\n        });\n    });\n};\n\nconst registerDeleteAllToggler = () => {\n    const field = document.querySelector('#datagrid-select-all');\n    if (!field) {\n        return;\n    }\n    if (field.dataset.loaded === '1') {\n        return;\n    }\n    field.dataset.loaded = '1';\n    field.addEventListener('click', function (e) {\n        const checkboxes = document.querySelectorAll(\"input[name='model[]']\");\n        if (field.checked) {\n            checkboxes?.forEach(checkbox => {\n                checkbox.checked = true;\n            });\n        } else {\n            checkboxes?.forEach(checkbox => {\n                checkbox.checked = false;\n            });\n        }\n        toggleCrudMultiDelete();\n    });\n};\n\n/**\n * Set the datagrid bulk models\n * @param modelField\n */\nconst setBulkModels = (modelField) => {\n    let values = [];\n    const checkboxes = document.querySelectorAll(\"input[name='model[]']\");\n    checkboxes?.forEach(element => {\n        if (element.checked) {\n            values.push(element.value);\n        }\n    });\n\n    if (modelField === 'ajax') {\n        window.onEvent(function() {\n            document.querySelector('#primary-dialog input[name=\"models\"]').value = values.toString();\n        });\n    } else {\n        document.querySelector('#datagrid-bulk-' + modelField + '-models').value = values.toString();\n    }\n};\n\n\n/**\n *\n */\nconst toggleCrudMultiDelete = () => {\n    let hide = true;\n\n    const checkboxes = document.querySelectorAll(\"input[name='model[]']\");\n    checkboxes?.forEach(checkbox => {\n        if (checkbox.checked) {\n            hide = false;\n        }\n    });\n\n    const btn = document.querySelectorAll('.datagrid-bulk-actions .btn2');\n    btn?.forEach(btn => {\n        if (hide) {\n            btn.disabled = true;\n            btn.classList.add('btn-disabled');\n        } else {\n            btn.disabled = false;\n            btn.classList.remove('btn-disabled', 'disabled');\n        }\n    });\n};\n\n/**\n * Go through table trs to add on click support\n */\nconst treeViewInit = () => {\n    const treeViewLoader = document.querySelector('.list-treeview');\n    if (!treeViewLoader) {\n        return;\n    }\n\n    let link = treeViewLoader.dataset.url;\n\n    const rows = document.querySelectorAll('.table-nested > tbody > tr');\n    rows.forEach(function (row) {\n        let children = row.dataset.children;\n        if (parseInt(children) > 0) {\n            row.classList.add('tr-hover');\n            row.classList.add('cursor-pointer');\n            row.addEventListener('click', function (event) {\n                const target = event.target;\n                // Don't trigger the click on the checkbox (used for bulk actions)\n                //console.log('click tr', target);\n                if (event.target.type !== 'checkbox' && target.dataset.tree !== 'escape') {\n                    window.location = link + '?parent_id=' + row.dataset.id + '&m=table';\n                }\n            });\n        }\n    });\n};\n\n\nregisterBulkDelete();\nregisterBulkActions();\ntoggleCrudMultiDelete();\ntreeViewInit();\n\nwindow.onEvent(function() {\n    registerBulkActions();\n    registerBulkDelete();\n});\n"
  },
  {
    "path": "resources/js/datagrids2.js",
    "content": "let datagrid2DeleteConfirm = false;\nlet form;\n\nconst datagridObserver = new IntersectionObserver(function(entries) {\n    entries.forEach(entry => {\n        if (entry.isIntersecting === true) {\n            initDatagrid(entry.target);\n        }\n    });\n}, { threshold: [0] });\n\nconst initDatagrids = () => {\n    const datagrids = document.querySelectorAll('table[data-render=\"datagrid2\"]');\n    datagrids?.forEach(datagrid => {\n        initDatagrid(datagrid);\n    });\n};\n\nconst initDatagrid = (datagrid) => {\n    registerBulk(datagrid);\n    if (datagrid.dataset.initiated === '1') {\n        return;\n    }\n    datagrid.dataset.initiated = '1';\n    registerHeaders(datagrid);\n    if (datagrid.dataset.url) {\n        loadDatagrid(datagrid, datagrid);\n    }\n};\n\nconst registerHeaders = (datagrid) => {\n    datagrid.querySelectorAll('thead a')?.forEach(ele => {\n        if (ele.dataset.loaded === '1') {\n            return;\n        }\n        ele.dataset.loaded = '1';\n        ele.addEventListener('click', function (e) {\n            e.preventDefault();\n            loadDatagrid(ele, datagrid);\n        });\n    });\n    // Pagination\n    datagrid.parentNode\n        .querySelectorAll('nav[role=\"navigation\"] a')\n        ?.forEach(ele => {\n            if (ele.dataset.loaded === '1') {\n                return;\n            }\n            ele.dataset.loaded = '1';\n            ele.addEventListener('click', (e) => {\n                e.preventDefault();\n                loadDatagrid(ele, datagrid);\n            });\n        });\n};\n\n\n/**\n *\n */\nconst initOnloadDatagrids = () => {\n    const datagrids = document.querySelectorAll('[data-render=\"datagrid2-onload\"]');\n    if (datagrids.length === 0) {\n        return;\n    }\n    datagrids.forEach(datagrid => {\n        datagridObserver.observe(datagrid);\n    });\n};\n\n/**\n * When a datagrid header is clicked, reorder it\n */\nconst loadDatagrid = (element, datagrid) => {\n    datagrid.querySelector('thead')?.classList.add('hidden');\n    datagrid.querySelector('tbody')?.classList.add('hidden');\n    datagrid.querySelector('tfoot')?.classList.remove('hidden');\n\n    let url = element.getAttribute('href');\n    if (element.dataset.url) {\n        url = element.dataset.url;\n    }\n\n    // It's sometimes possible to have no parent node when the datagrid is already removed from the dom\n    // but some user action is still referencing it.\n    if (!datagrid.parentNode) {\n        return;\n    }\n\n\n    axios.get(url)\n        .then(res => {\n            const target = datagrid.parentNode;\n            if (res.data.html) {\n                target.innerHTML = res.data.html;\n            }\n            if (res.data.deletes) {\n                const forms = document.querySelector('#datagrid-delete-forms');\n                if (forms) forms.innerHTML = res.data.deletes;\n            }\n            if (res.data.url) {\n                window.history.pushState({}, \"\", res.data.url);\n            }\n            const newDatagrid = target.querySelector('[data-render=\"datagrid2\"]');\n            initDatagrid(newDatagrid);\n            window.triggerEvent();\n        })\n        .catch(err => {\n            //console.error('datagrid2 error', datagrid, datagrid.parentNode);\n            //datagrid.querySelector('tfoot')?.classList.add('bg-danger');\n        });\n};\n\nconst registerBulk = (datagrid) => {\n    // Bulk edit multiple models at the same time\n    const parent = datagrid.parentNode;\n    const bulks = parent.querySelectorAll('.datagrid-bulk');\n    bulks?.forEach(bulk => {\n        registerBulkClick(datagrid, bulk);\n    });\n\n    // Other bulk actions\n    const submits = parent.querySelectorAll('.datagrid-submit');\n    submits?.forEach(submit => {\n        registerBulkSubmit(datagrid, submit);\n    });\n\n    // Register elements inside tippy popups created from this datagrid's bulk actions.\n    // Tippy copies dropdown innerHTML as a string, creating new DOM elements without event\n    // listeners, appended outside the datagrid parent (typically document.body).\n    parent.querySelectorAll('.datagrid-bulk-actions [data-dropdown]')?.forEach(trigger => {\n        if (trigger._tippy?.popper) {\n            trigger._tippy.popper.querySelectorAll('.datagrid-bulk')?.forEach(bulk => {\n                registerBulkClick(datagrid, bulk);\n            });\n            trigger._tippy.popper.querySelectorAll('.datagrid-submit')?.forEach(submit => {\n                registerBulkSubmit(datagrid, submit);\n            });\n        }\n    });\n\n    document.querySelector('#datagrid-action-confirm')?.addEventListener('click', function () {\n        window.closeDialog('datagrid-bulk-delete');\n        form.submit();\n    });\n};\n\nconst registerBulkSubmit = (datagrid, submit) => {\n    if (submit.parentNode.classList.contains('hidden')) {\n        return;\n    }\n    if (submit.dataset.loaded === '1') {\n        return;\n    }\n    submit.dataset.loaded = '1';\n    console.log('register bulk submit', submit, submit.parentNode);\n    submit.addEventListener('click', function (e) {\n        e.preventDefault();\n        form = submit.closest('form') || datagrid.closest('form');\n\n        const action = form.querySelector('input[name=\"action\"]');\n        action.value = submit.dataset.action;\n\n        if (submit.dataset.action === 'delete') {\n            if (datagrid2DeleteConfirm === false) {\n                window.openDialog('datagrid-bulk-delete');\n                return false;\n            }\n        }\n\n        // Disable the whole dropdown and replace it with a spinning wheel\n        datagrid.parentNode.querySelectorAll('.datagrid-bulk-actions .btn2')?.forEach(ele => ele.classList.add('btn-disabled'));\n        datagrid.parentNode.querySelector('.datagrid-bulk-actions .btn2').classList.add('loading');\n        form.submit();\n    });\n};\n\nconst registerBulkClick = (datagrid, element) => {\n    // Don't add events on the hidden div, trippy creates a new one on each click\n    if (element.parentNode.classList.contains('hidden')) {\n        return;\n    }\n    if (element.dataset.loaded === '1') {\n        return;\n    }\n    element.dataset.loaded = '1';\n\n    element.addEventListener('click', function (e) {\n        console.log('real click');\n        e.preventDefault();\n        form = datagrid.closest('form');\n\n        //console.log('models', models);\n        axios.post(\n            form.getAttribute('action') + '?action=edit',\n            {model: checkedModels(datagrid)}\n        )\n        .then(res => {\n            const target = document.getElementById('primary-dialog');\n            target.innerHTML = res.data;\n            window.openDialog('primary-dialog');\n            window.triggerEvent();\n        });\n    });\n};\n\nconst checkedModels = (datagrid) => {\n    let models = [];\n    const checkboxes = datagrid.querySelectorAll(\"input[name='model[]']\");\n    checkboxes?.forEach(element => {\n        if (element.checked) {\n            models.push(element.value);\n        }\n    });\n    return models;\n};\n\ninitOnloadDatagrids();\ninitDatagrids();\n\nwindow.onEvent(function() {\n    initDatagrids();\n});\n"
  },
  {
    "path": "resources/js/echo.js",
    "content": "import Echo from 'laravel-echo';\n\nimport Pusher from 'pusher-js';\nwindow.Pusher = Pusher;\n\nwindow.Echo = new Echo({\n    broadcaster: 'reverb',\n    key: import.meta.env.VITE_REVERB_APP_KEY,\n    wsHost: import.meta.env.VITE_REVERB_HOST,\n    wsPort: import.meta.env.VITE_REVERB_PORT ?? 80,\n    wssPort: import.meta.env.VITE_REVERB_PORT ?? 443,\n    forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? 'https') === 'https',\n    enabledTransports: ['ws', 'wss'],\n});\n"
  },
  {
    "path": "resources/js/editors/summernote.js",
    "content": "const summernoteConfig = document.querySelector('#summernote-config');\nlet advancedRequest = false;\n\n\n/**\n * Initialize summernote when available\n */\nwindow.initSummernote = function() {\n    document.querySelectorAll('.html-editor')?.forEach(function (field) {\n        initField(field);\n    });\n};\n\nconst initField = (field) => {\n    $(field).summernote({\n        height: '300px',\n        maximumImageFileSize: parseInt(summernoteConfig.dataset.filesize) * 1024,\n        lang: editorLang(summernoteConfig.dataset.locale),\n        hintSelect: 'next',\n        placeholder: summernoteConfig.dataset.placeholder,\n        dialogsInBody: summernoteConfig.dataset.dialogs === 1,\n        toolbar: [\n            ['style', ['style']],\n            ['font', ['bold', 'italic', 'underline', 'strikethrough', 'clear']],\n            ['color', ['color']],\n            ['kanka', ['aroba', (summernoteConfig.dataset.bragi !== undefined ? 'bragi' : null)]],\n            ['para', ['ul', 'ol', 'kanka-indent', 'kanka-outdent', 'paragraph']],\n            ['table', ['table', 'tableofcontent']],\n            ['insert', ['link', 'picture', (summernoteConfig.dataset.gallery !== undefined ? 'summernoteGallery' : null), 'video', 'embed', 'hr']],\n            //['dir', ['ltr', 'rtl']],\n            ['view', ['fullscreen', 'codeview', 'prettify']],\n            ['extensions', ['help']],\n        ],\n\n        popover: {\n            table: [\n                ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n                ['delete', ['deleteRow', 'deleteCol', 'deleteTable']],\n                ['custom', ['tableHeaders']],\n                ['custom', ['tableStyles']]\n            ],\n            image: [\n                ['image', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n                ['float', ['floatLeft', 'floatRight', 'floatNone']],\n                ['remove', ['removeMedia']],\n                ['custom', ['imageAttributes']],\n            ],\n        },\n        callbacks: {\n            onImageUpload: function (files) {\n                uploadImage($(field), files[0]);\n            },\n            onChange: function() {\n                window.entityFormHasUnsavedChanges = true;\n            },\n            onChangeCodeview: function(contents, $editable) {\n                $(field).summernote('code', contents);\n            },\n            /*onBlur: function() {\n                console.log('blury');\n            },*/\n        },\n        summernoteGallery: {\n            buttonLabel: '<i class=\"fa-regular fa-folder-image\"></i>',\n            tooltip: summernoteConfig.dataset.galleryTitle,\n            source: {\n                // data: [],\n                url: summernoteConfig.dataset.gallery,\n                responseDataKey: 'data',\n                nextPageKey: 'links.next',\n            },\n            modal: {\n                loadOnScroll: true,\n                maxHeight: 350,\n                title: summernoteConfig.dataset.galleryTitle,\n                close_text: summernoteConfig.dataset.galleryClose,\n                ok_text: summernoteConfig.dataset.galleryAdd,\n                selectAll_text: summernoteConfig.dataset.gallerySelectAll,\n                deselectAll_text: summernoteConfig.dataset.galleryDeselectAll,\n                noImageSelected_msg: summernoteConfig.dataset.galleryError,\n            }\n        },\n        bragi: {\n            source: {\n                url: summernoteConfig.dataset.bragi,\n            },\n            buttonLabel: '<i class=\"fa-brands fa-pied-piper-hat\"></i>',\n        },\n        hint: [\n            {\n                match: /\\B::(\\S*)$/,\n                search: function (keyword, callback) {\n                    if (keyword.length < 3) {\n                        return [];\n                    }\n                    return hintPosts(keyword, callback);\n                },\n                template: function (item) {\n                    return hintPostTemplate(item);\n                },\n                content: function (item) {\n                    advancedRequest = false;\n                    return hintContent(item);\n                }\n            },\n            {\n                match: /\\B@(\\S*)$/,\n                search: function (keyword, callback) {\n                    if (keyword.length < 3) {\n                        return [];\n                    }\n                    return hintEntities(keyword, callback);\n                },\n                template: function (item) {\n                    return hintTemplate(item);\n                },\n                content: function (item) {\n                    advancedRequest = false;\n                    return hintContent(item);\n                }\n            },\n            {\n                match: /\\B\\[(\\S[^:]*)$/,\n                search: function (keyword, callback) {\n                    if (keyword.length < 3) {\n                        return [];\n                    }\n                    return hintEntities(keyword, callback);\n                },\n                template: function (item) {\n                    return hintTemplate(item);\n                },\n                content: function (item) {\n                    advancedRequest = true;\n                    return hintContent(item);\n                }\n            },\n            {\n                match: /\\B\\#(\\S*)$/,\n                search: function (keyword, callback) {\n                    return hintMonths(keyword, callback);\n                },\n                template: function (item) {\n                    return hintTemplate(item);\n                },\n                content: function (item) {\n                    advancedRequest = false;\n                    return hintContent(item);\n                }\n            },\n            {\n                match: /\\B{(\\S[^:]*)$/,\n                search: function (keyword, callback) {\n                    return attributeSearch(keyword, callback);\n                },\n                template: function (item) {\n                    return attributeTemplate(item);\n                },\n                content: function (item) {\n                    return attributeContent(item);\n                }\n            },\n        ],\n        keyMap: {\n            pc: {\n                'ESC': 'escape',\n                'ENTER': 'insertParagraph',\n                'CTRL+Z': 'undo',\n                'CTRL+Y': 'redo',\n                'TAB': 'tab',\n                'SHIFT+TAB': 'untab',\n                'CTRL+B': 'bold',\n                'CTRL+I': 'italic',\n                'CTRL+U': 'underline',\n                'CTRL+SHIFT+I': 'strikethrough',\n                'CTRL+BACKSLASH': 'removeFormat',\n                'CTRL+SHIFT+L': 'justifyLeft',\n                'CTRL+SHIFT+E': 'justifyCenter',\n                'CTRL+SHIFT+R': 'justifyRight',\n                'CTRL+SHIFT+J': 'justifyFull',\n                'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n                'CTRL+SHIFT+NUM8': 'insertOrderedList',\n                'CTRL+LEFTBRACKET': 'outdent',\n                'CTRL+RIGHTBRACKET': 'indent',\n                'CTRL+NUM0': 'formatPara',\n                'CTRL+NUM1': 'formatH1',\n                'CTRL+NUM2': 'formatH2',\n                'CTRL+NUM3': 'formatH3',\n                'CTRL+NUM4': 'formatH4',\n                'CTRL+NUM5': 'formatH5',\n                'CTRL+NUM6': 'formatH6',\n                'CTRL+ENTER': 'insertHorizontalRule',\n                'CTRL+K': 'linkDialog.show',\n            },\n\n            mac: {\n                'ESC': 'escape',\n                'ENTER': 'insertParagraph',\n                'CMD+Z': 'undo',\n                'CMD+SHIFT+Z': 'redo',\n                'TAB': 'tab',\n                'SHIFT+TAB': 'untab',\n                'CMD+B': 'bold',\n                'CMD+I': 'italic',\n                'CMD+U': 'underline',\n                'CMD+SHIFT+I': 'strikethrough',\n                'CMD+BACKSLASH': 'removeFormat',\n                'CMD+SHIFT+L': 'justifyLeft',\n                'CMD+SHIFT+E': 'justifyCenter',\n                'CMD+SHIFT+R': 'justifyRight',\n                'CMD+SHIFT+J': 'justifyFull',\n                'CMD+SHIFT+NUM7': 'insertUnorderedList',\n                'CMD+SHIFT+NUM8': 'insertOrderedList',\n                'CMD+LEFTBRACKET': 'outdent',\n                'CMD+RIGHTBRACKET': 'indent',\n                'CMD+NUM0': 'formatPara',\n                'CMD+NUM1': 'formatH1',\n                'CMD+NUM2': 'formatH2',\n                'CMD+NUM3': 'formatH3',\n                'CMD+NUM4': 'formatH4',\n                'CMD+NUM5': 'formatH5',\n                'CMD+NUM6': 'formatH6',\n                'CMD+ENTER': 'insertHorizontalRule',\n                'CMD+K': 'linkDialog.show',\n            },\n        },\n    });\n};\n\n/**\n * Search for entities\n * @param keyword\n * @param callback\n */\nfunction hintEntities(keyword, callback) {\n    axios.get(summernoteConfig.dataset.mention + '?q=' + keyword + '&new=1')\n        .then(res => callback(res.data))\n        .catch(err => {\n            if (err.resonse.status === 503) {\n                window.showToast(err.response.data.message, 'error');\n            }\n        })\n    ;\n}\n\n/**\n * Search for posts\n * @param keyword\n * @param callback\n */\nfunction hintPosts(keyword, callback) {\n    axios.get(summernoteConfig.dataset.mention + '?q=' + keyword + '&posts=1')\n        .then(res => callback(res.data))\n        .catch(err => {\n            if (err.resonse.status === 503) {\n                window.showToast(err.response.data.message, 'error');\n            }\n        })\n    ;\n}\n\n/**\n * Search for months\n * @param keyword\n * @param callback\n */\nfunction hintMonths(keyword, callback) {\n    axios.get(summernoteConfig.dataset.months + '?q=' + keyword)\n        .then(res => callback(res.data));\n}\n\n/**\n * Search for attributes\n * @param keyword\n * @param callback\n */\nfunction attributeSearch(keyword, callback) {\n    if (!summernoteConfig.dataset.attributes) {\n        //console.log('entity not yet created');\n        return false;\n    }\n    axios.get(summernoteConfig.dataset.attributes + '?q=' + keyword)\n        .then(res => callback(res.data));\n}\n\n/**\n * Hint template (results displayed in dropdown)\n * @param item\n * @returns {string}\n */\nfunction hintTemplate(item) {\n    let type = (item.type ? ' (' + item.type + ')' : '');\n    if (item.image) {\n        const div = document.createElement('div');\n        div.classList.add('entity-hint');\n        div.innerHTML = item.image +\n            '<div class=\"entity-hint-name\">' +\n            item.fullname +\n            type +\n            '</div>';\n        return div;\n    }\n    return item.fullname + type;\n}\n\n\nfunction hintPostTemplate(item) {\n    if (item.type) {\n        return hintTemplate(item);\n    }\n\n    return '<div class=\"post flex items-center gap-1\"><i class=\"fa-regular fa-chevron-right\" aria-hidden=\"true\"></i>' + item.fullname + '</div>';\n}\n\n/**\n * Attribute template\n * @param item\n * @returns {string}\n */\nfunction attributeTemplate(item) {\n    return item.name +  (item.value ? ' (' + item.value + ')' : '');\n}\n\n/**\n * Hint content that is injected in the editor\n * @param item\n * @returns {string|*}\n */\nconst hintContent = (item) => {\n    if (item.id) {\n        const span = document.createElement('span');\n        let mention = '[' + item.model_type + ':' + item.id + item.fullname + ']';\n        let advancedMention = '[' + item.model_type + ':' + item.id + item.advanced_mention + ']';\n        if (item.alias_id) {\n            mention = '[' + item.model_type + ':' + item.id + item.advanced_mention + '|alias:' + item.alias_id + item.advanced_mention_alias + ']';\n            span.innerHTML = mention;\n            return span;\n        }\n        if (summernoteConfig.dataset.advancedMention) {\n            span.innerHTML = advancedMention;\n            return span;\n        }\n        if (advancedRequest) {\n            span.innerHTML = advancedMention;\n            return span;\n        }\n        //console.log('standard');\n        const link = document.createElement('a');\n        link.text = item.fullname;\n        link.href = '#';\n        link.classList.add('mention');\n        link.dataset.name = item.fullname;\n        link.dataset.mention = '[' + item.model_type + ':' + item.id + ']';\n        return link;\n    } else if (item.url) {\n        const mention = document.createElement('a');\n        mention.text = item.fullname;\n        mention.href = item.url;\n        if (item.tooltip) {\n            mention.title = item.tooltip.replace(/[\"]/g, '\\'');\n            mention.dataset.toggle = 'tooltip';\n            mention.dataset.html = true;\n            return mention;\n        }\n        return mention;\n    } else if (item.inject) {\n        return item.inject;\n    }\n    return item.fullname;\n};\n\n/**\n *\n * @param item\n * @returns {jQuery|HTMLElement}\n */\nfunction attributeContent(item)\n{\n    if (summernoteConfig.dataset.advancedMention) {\n        return '{attribute:' + item.id + '}';\n    }\n    const link = document.createElement('a');\n    link.href = '#';\n    link.classList.add('attribute', 'attribute-mention');\n    link.text = '{' + item.name + '}';\n    link.dataset.attribute =  '{attribute:' + item.id + '}';\n    return link;\n}\n\n/**\n * Editor locale\n * @param locale\n * @returns {string}\n */\nfunction editorLang(locale) {\n    if (!locale) {\n        return 'en-US';\n    }\n\n    if (locale == 'he') {\n        return 'he-IL';\n    } else if (locale == 'ca') {\n        return 'ca-ES';\n    } else if (locale == 'el') {\n        return 'el-GR';\n    } else if(locale == 'en') {\n        return 'en-US';\n    } else {\n        return locale + '-' + locale.toUpperCase();\n    }\n}\n\n/**\n * Upload a file through summernote\n * @param file\n */\nconst uploadImage = ($summernote, file) => {\n    const modal = document.querySelector('#campaign-imageupload-modal');\n    // Check if the campaign is superboosted\n    if (!summernoteConfig.dataset.galleryUpload) {\n        $(modal).modal();\n        console.warn('Campaign isn\\'t superboosted');\n        return;\n    }\n\n    let formData = new FormData();\n    formData.append(\"file[]\", file);\n    axios.post(summernoteConfig.dataset.galleryUpload, formData)\n        .then(res => {\n            //console.log('result', res.data);\n            $summernote.summernote('insertImage', res.data.url, function ($image) {\n                $image.attr('src', res.data.url);\n                $image.attr('data-gallery-id', res.data.id);\n            });\n        })\n        .catch(err => {\n            // Depending on the error, we need to handle the user differently\n            //console.log(textStatus + \" \" + errorThrown);\n            //console.log(jqXHR);\n            let error = document.querySelector('#campaign-imageupload-error');\n            let permission = document.querySelector('#campaign-imageupload-permission');\n\n            error.classList.add('hidden');\n            permission.classList.add('hidden');\n\n            if (err.response.status === 422) {\n                error.innerHTML = buildErrors(err.response.data.errors);\n                error.classList.remove('hidden');\n            } else if (err.response.status === 403) {\n                permission.classList.remove('hidden');\n            }\n            $(modal).modal();\n        });\n};\n\n/**\n *\n * @param data\n * @returns {string}\n */\nconst buildErrors = (data) => {\n    let errors = '';\n    for (let key in data) {\n        // skip loop if the property is from prototype\n        if (!data.hasOwnProperty(key)) continue;\n\n        errors += data[key] + \"\\n\";\n    }\n    return errors;\n};\n\n// We have to wait for ready to load all of summernote, otherwise our plugins won't register\n$(document).ready(function () {\n    if (summernoteConfig) {\n        window.initSummernote();\n    }\n});\n"
  },
  {
    "path": "resources/js/editors/tiptap/SourceEditor.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount, watch } from 'vue'\nimport { EditorView, basicSetup } from 'codemirror'\nimport { html } from '@codemirror/lang-html'\nimport { oneDark } from '@codemirror/theme-one-dark'\nimport { EditorState } from '@codemirror/state'\nimport { indentWithTab } from '@codemirror/commands'\nimport { keymap } from '@codemirror/view'\n\nconst props = defineProps<{\n    modelValue: string\n}>()\n\nconst emit = defineEmits<{\n    'update:modelValue': [value: string]\n    'exit': []\n}>()\n\nconst editorContainer = ref<HTMLElement | null>(null)\nlet editorView: EditorView | null = null\n\nconst isDarkMode = () => {\n    return document.documentElement.getAttribute('data-theme')?.includes('dark') ||\n           window.matchMedia('(prefers-color-scheme: dark)').matches\n}\n\n// Convert mention spans back to bracket notation\nconst convertMentionsToText = (html: string): string => {\n    const parser = new DOMParser()\n    const doc = parser.parseFromString(html, 'text/html')\n\n    // Find all mention elements\n    const mentions = doc.querySelectorAll('a[data-type=\"mention\"]')\n\n    mentions.forEach(mention => {\n        const dataMention = mention.getAttribute('data-mention')\n        if (dataMention) {\n            // Replace the element with the text representation\n            const textNode = doc.createTextNode(dataMention)\n            mention.parentNode?.replaceChild(textNode, mention)\n        }\n    })\n\n    return doc.body.innerHTML\n}\n\n// Simple HTML formatter\nconst formatHtml = (html: string): string => {\n    const tab = '    '\n    let result = ''\n    let indent = 0\n\n    // Self-closing and inline tags that shouldn't add newlines\n    const inlineTags = ['a', 'span', 'strong', 'em', 'b', 'i', 'u', 's', 'mark', 'small', 'sub', 'sup', 'code', 'br', 'img']\n    const selfClosingTags = ['br', 'hr', 'img', 'input', 'meta', 'link', 'area', 'base', 'col', 'embed', 'param', 'source', 'track', 'wbr']\n\n    // Normalize whitespace first\n    html = html.replace(/>\\s+</g, '><').trim()\n\n    // Split into tokens (tags and text)\n    const tokens = html.split(/(<[^>]+>)/g).filter(t => t.trim())\n\n    for (const token of tokens) {\n        if (token.startsWith('</')) {\n            // Closing tag\n            indent = Math.max(0, indent - 1)\n            const tagName = token.match(/<\\/([a-zA-Z0-9]+)/)?.[1]?.toLowerCase()\n            if (tagName && !inlineTags.includes(tagName)) {\n                result += '\\n' + tab.repeat(indent)\n            }\n            result += token\n        } else if (token.startsWith('<')) {\n            // Opening or self-closing tag\n            const tagName = token.match(/<([a-zA-Z0-9]+)/)?.[1]?.toLowerCase()\n            const isSelfClosing = selfClosingTags.includes(tagName || '') || token.endsWith('/>')\n\n            if (tagName && !inlineTags.includes(tagName)) {\n                if (result) {\n                    result += '\\n' + tab.repeat(indent)\n                }\n            }\n            result += token\n\n            if (!isSelfClosing && tagName && !inlineTags.includes(tagName)) {\n                indent++\n            }\n        } else {\n            // Text content\n            result += token\n        }\n    }\n\n    return result.trim()\n}\n\nonMounted(() => {\n    if (!editorContainer.value) return\n\n    // Convert mentions to text notation and format\n    const withMentionsAsText = convertMentionsToText(props.modelValue)\n    const formattedHtml = formatHtml(withMentionsAsText)\n\n    const extensions = [\n        basicSetup,\n        html(),\n        keymap.of([indentWithTab]),\n        EditorView.updateListener.of((update) => {\n            if (update.docChanged) {\n                emit('update:modelValue', update.state.doc.toString())\n            }\n        }),\n        EditorView.lineWrapping,\n    ]\n\n    if (isDarkMode()) {\n        extensions.push(oneDark)\n    }\n\n    const state = EditorState.create({\n        doc: formattedHtml,\n        extensions,\n    })\n\n    editorView = new EditorView({\n        state,\n        parent: editorContainer.value,\n    })\n\n    // Emit the formatted HTML so it syncs\n    emit('update:modelValue', formattedHtml)\n})\n\nwatch(() => props.modelValue, (newValue) => {\n    if (editorView && newValue !== editorView.state.doc.toString()) {\n        editorView.dispatch({\n            changes: {\n                from: 0,\n                to: editorView.state.doc.length,\n                insert: newValue,\n            },\n        })\n    }\n})\n\nonBeforeUnmount(() => {\n    editorView?.destroy()\n})\n\nconst exitSourceMode = () => {\n    emit('exit')\n}\n</script>\n\n<template>\n    <div class=\"source-editor\">\n        <div class=\"source-editor-toolbar\">\n            <span class=\"text-xs text-neutral-content\">Source Mode</span>\n            <button\n                type=\"button\"\n                @click=\"exitSourceMode\"\n                class=\"btn btn-xs btn-ghost\"\n                title=\"Exit source mode\"\n            >\n                <i class=\"fa-regular fa-eye\" aria-hidden=\"true\" />\n                Visual Editor\n            </button>\n        </div>\n        <div ref=\"editorContainer\" class=\"source-editor-content\" />\n    </div>\n</template>\n\n<style scoped>\n.source-editor {\n    border: 1px solid hsl(var(--bc)/.1);\n    border-radius: var(--rounded-btn);\n    overflow: hidden;\n}\n\n.source-editor-toolbar {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 0.5rem 0.75rem;\n    background: hsl(var(--b2));\n    border-bottom: 1px solid hsl(var(--bc)/.1);\n}\n\n.source-editor-content {\n    min-height: 200px;\n    max-height: 70vh;\n    overflow-y: auto;\n}\n\n.source-editor-content :deep(.cm-editor) {\n    height: 100%;\n    min-height: 200px;\n    max-height: calc(70vh - 40px);\n    font-size: 0.875rem;\n}\n\n.source-editor-content :deep(.cm-scroller) {\n    overflow: auto;\n}\n\n.source-editor-content :deep(.cm-content) {\n    padding: 0.5rem;\n}\n\n.source-editor-content :deep(.cm-focused) {\n    outline: none;\n}\n</style>\n"
  },
  {
    "path": "resources/js/editors/tiptap/Tiptap.vue",
    "content": "<script setup lang=\"ts\">\n    import { useEditor, EditorContent } from '@tiptap/vue-3'\n    import StarterKit from '@tiptap/starter-kit'\n    import { Placeholder } from '@tiptap/extensions'\n    import { BubbleMenu, FloatingMenu } from '@tiptap/vue-3/menus'\n    import Link from '@tiptap/extension-link'\n    import TableRow from '@tiptap/extension-table-row'\n    import { CustomTableCell } from './extensions/table/CustomTableCell'\n    import { CustomTableHeader } from './extensions/table/CustomTableHeader'\n    import { TableWithControls } from './extensions/table/TableWithControls'\n    import { ListKit } from '@tiptap/extension-list'\n    import { TableKit } from \"@tiptap/extension-table\"\n    import { CellSelection } from '@tiptap/pm/tables'\n    import { ref, computed, onMounted, onBeforeUnmount, defineAsyncComponent, getCurrentInstance } from 'vue'\n    import { Mention } from './extensions/mentions/Mention'\n    import suggestion from './extensions/mentions/suggestion'\n    import { MentionParser } from './extensions/mentions/MentionParser'\n    import { SlashCommand } from './extensions/slashcommand/SlashCommand'\n    import slashCommandSuggestion from './extensions/slashcommand/suggestion'\n    import { Gallery } from './extensions/gallery/Gallery'\n    const GalleryDialog = defineAsyncComponent(() => import('./extensions/gallery/GalleryDialog.vue'))\n    import { CustomImage } from './extensions/CustomImage'\n    import { Iframe } from './extensions/Iframe'\n    import { Div } from './extensions/Div'\n    import { CustomHeading } from './extensions/CustomHeading'\n    import { Details, DetailsContent, DetailsSummary } from '@tiptap/extension-details'\n    import { TextStyle } from '@tiptap/extension-text-style'\n    import { Color } from '@tiptap/extension-color'\n    import Highlight from '@tiptap/extension-highlight'\n    import TextAlign from '@tiptap/extension-text-align'\n\n    // Bubble menus\n    import MentionBubbleMenu from './bubblemenus/MentionBubbleMenu.vue'\n    import LinkBubbleMenu from './bubblemenus/LinkBubbleMenu.vue'\n    import TableBubbleMenu from './bubblemenus/TableBubbleMenu.vue'\n    import ImageBubbleMenu from './bubblemenus/ImageBubbleMenu.vue'\n    import TextBubbleMenu from './bubblemenus/TextBubbleMenu.vue'\n    const SourceEditor = defineAsyncComponent(() => import('./SourceEditor.vue'))\n\n    const props = withDefaults(defineProps<{\n        modelValue?: string\n        content?: string\n        gallery?: string\n        mentions?: string\n        galleryUpload?: string\n        fieldName?: string\n    }>(), {\n        fieldName: 'entry'\n    })\n\n    declare global {\n        interface Window {\n            showToast: (message: string, type?: string) => void\n        }\n    }\n\n    const galleryId = getCurrentInstance()!.uid.toString()\n\n    const html = ref(props.content ?? props.modelValue ?? '')\n    const mentions = ref([])\n    const isFocused = ref(false)\n    const hasReceivedInput = ref(false)\n    const sourceMode = ref(false)\n\n    const showHelperText = computed(() => {\n        return isFocused.value && !hasReceivedInput.value && editor.value?.isEmpty\n    })\n\n    const enterSourceMode = () => {\n        sourceMode.value = true\n    }\n\n    const exitSourceMode = () => {\n        // Sync HTML back to editor when exiting source mode\n        editor.value?.commands.setContent(html.value)\n        sourceMode.value = false\n        // Focus the editor after a short delay to ensure it's mounted\n        setTimeout(() => {\n            editor.value?.commands.focus()\n        }, 50)\n    }\n\n    // Refs for bubble menu components\n    const mentionBubbleRef = ref<InstanceType<typeof MentionBubbleMenu> | null>(null)\n\n    const addEntityToMentions = (entity: any) => {\n        const exists = mentions.value.find(e => e.id === entity.id)\n        if (!exists) {\n            mentions.value.push(entity)\n        }\n    }\n\n    const extensions = [\n        StarterKit.configure({\n            link: false,\n            bulletList: false,\n            orderedList: false,\n            listItem: false,\n            listKeymap: false,\n            heading: false,\n        }),\n        CustomHeading,\n        Placeholder.configure({\n            placeholder: 'Start writing...',\n        }),\n        Link.configure({\n            openOnClick: false,\n            defaultProtocol: 'https',\n            HTMLAttributes: {\n                class: 'text-link',\n            },\n        }),\n        ListKit.configure({\n            taskItem: {\n                nested: true,\n            },\n        }),\n        TableWithControls.configure({\n            resizable: true,\n            allowTableNodeSelection: true,\n        }),\n        TableRow,\n        CustomTableCell.configure({\n        }),\n        CustomTableHeader.configure({\n        }),\n        SlashCommand.configure({\n            suggestion: slashCommandSuggestion(),\n        }),\n        CustomImage.configure({\n            inline: true,\n            allowBase64: false,\n            resize: {\n                enabled: true,\n                minWidth: 20,\n                minHeight: 20,\n                alwaysPreserveAspectRatio: true,\n            }\n        }),\n        Iframe,\n        Div,\n        Details.configure({\n            persist: true,\n            HTMLAttributes: {\n                class: 'details',\n            },\n        }),\n        DetailsSummary,\n        DetailsContent,\n        TextStyle,\n        Color,\n        Highlight.configure({\n            multicolor: true,\n        }),\n        TextAlign.configure({\n            types: ['heading', 'paragraph'],\n        }),\n        window.tiptapCustomExtensions ?? [],\n    ];\n\n    if (props.gallery) {\n        extensions.push(\n            Gallery.configure({\n                galleryUrl: props.gallery as string,\n                galleryId,\n            })\n        )\n    }\n\n    if (props.mentions) {\n        extensions.push(\n            Mention.configure({\n                HTMLAttributes: {\n                    class: 'mention',\n                },\n                suggestion: suggestion(props.mentions, addEntityToMentions),\n                renderText({ node }) {\n                    const mention = node.attrs.mention\n                    const label = node.attrs.label\n                    const id = node.attrs.id\n                    const config = node.attrs.config\n\n                    const mentionMatch = mention?.match(/\\[([^:]+):(\\d+)/)\n                    const type = mentionMatch ? mentionMatch[1] : null\n\n                    if (type && id) {\n                        const entity = mentions.value.find(e => e.id === parseInt(id))\n                        const entityName = entity ? entity.name : null\n                        const parts = [`${type}:${id}`]\n\n                        if (label && entityName && label !== entityName) {\n                            parts.push(label)\n                        }\n\n                        if (config) {\n                            parts.push(config)\n                        }\n\n                        return `[${parts.join('|')}]`\n                    }\n\n                    return mention || `[${label}]`\n                },\n            }),\n            MentionParser.configure({\n                entities: mentions\n            })\n        )\n    }\n\n    const editor = useEditor({\n        content: html.value,\n        extensions: extensions,\n        onFocus: () => {\n            isFocused.value = true\n        },\n        onBlur: () => {\n            isFocused.value = false\n        },\n        onUpdate: ({ editor }) => {\n            // Convert data-table-class to class for new tables, preserve existing classes\n            html.value = editor.getHTML().replace(\n                /<table([^>]*) data-table-class=\"([^\"]+)\"([^>]*)>/g,\n                '<table$1 class=\"$2\"$3>'\n            )\n            if (!hasReceivedInput.value && !editor.isEmpty) {\n                hasReceivedInput.value = true\n            }\n        },\n        onSelectionUpdate: ({ editor }) => {\n            if (editor.isActive('mention')) {\n                mentionBubbleRef.value?.syncLabel()\n            }\n        },\n        editorProps: {\n            clipboardTextSerializer: (slice) => {\n                let text = ''\n                slice.content.forEach(node => {\n                    text += serializeNodeToText(node)\n                })\n                return text\n            },\n            handlePaste: (view, event, slice) => {\n                if (props.galleryUpload) {\n                    const items = Array.from(event.clipboardData?.items || [])\n                    const imageItem = items.find(item => item.type.startsWith('image/'))\n                    if (imageItem) {\n                        const file = imageItem.getAsFile()\n                        if (file) {\n                            const formData = new FormData()\n                            formData.append('file[]', file)\n                            axios.post(props.galleryUpload, formData).then(response => {\n                                if (response.data?.url) {\n                                    editor.value?.chain().focus().setImage({\n                                        src: response.data.url,\n                                        'data-gallery-id': String(response.data.id),\n                                    }).run()\n                                }\n                            }).catch(() => {\n                                window.showToast('Image upload failed', 'error')\n                            })\n                            return true\n                        }\n                    }\n                }\n\n                const plainText = event.clipboardData?.getData('text/plain') || ''\n                const htmlText = event.clipboardData?.getData('text/html') || ''\n\n                const iframeMatch = (htmlText || plainText).match(/<iframe[^>]*src=[\"']([^\"']+)[\"'][^>]*>/i)\n                if (iframeMatch || plainText.includes('<iframe')) {\n                    const content = htmlText || plainText\n                    editor.value?.commands.insertContent(content, {\n                        parseOptions: {\n                            preserveWhitespace: false,\n                        },\n                    })\n                    return true\n                }\n\n                const trimmedText = plainText.trim()\n                const isPlainUrl = /^https?:\\/\\/\\S+$/i.test(trimmedText)\n                if (isPlainUrl && !htmlText) {\n                    try {\n                        const url = new URL(trimmedText)\n                        const imageExtensions = /\\.(jpe?g|png|gif|webp|svg|bmp|avif|tiff?)$/i\n                        if (imageExtensions.test(url.pathname)) {\n                            editor.value?.chain().focus().setImage({ src: trimmedText }).run()\n                            return true\n                        }\n                    } catch {\n                        // Not a valid URL, fall through\n                    }\n                }\n\n                const mentionPattern = /\\[([a-zA-Z_]+):(\\d+)(?:\\|[^\\]]+)?\\]/\n                if (mentionPattern.test(plainText)) {\n                    editor.value?.commands.insertContent(plainText)\n                    return true\n                }\n\n                return false\n            },\n            handleKeyDown: (view, event) => {\n                if ((event.ctrlKey || event.metaKey) && event.key === 'k') {\n                    if (!view.state.selection.empty) {\n                        event.preventDefault()\n                        openLinkBubble()\n                        return true\n                    }\n                }\n                return false\n            },\n        },\n    })\n\n    const serializeNodeToText = (node: any): string => {\n        if (node.type.name === 'mention') {\n            return serializeMentionToText(node)\n        }\n\n        if (node.isText) {\n            return node.text || ''\n        }\n\n        let text = ''\n        if (node.content) {\n            node.content.forEach((child: any) => {\n                text += serializeNodeToText(child)\n            })\n        }\n\n        if (node.isBlock && text) {\n            text += '\\n'\n        }\n\n        return text\n    }\n\n    const serializeMentionToText = (node: any): string => {\n        const config = node.attrs.config\n        const id = node.attrs.id\n        const type = node.attrs.type\n\n        const parts = [`${type}:${id}`]\n\n        if (config) {\n            parts.push(config)\n        }\n\n        return `[${parts.join('|')}]`\n    }\n\n    const openLinkBubble = () => {\n        if (!editor.value) return\n        const existingHref = editor.value.getAttributes('link').href || ''\n        const { to } = editor.value.state.selection\n        editor.value.chain()\n            .focus()\n            .setLink({ href: existingHref })\n            .setTextSelection(to)\n            .run()\n    }\n\n    const parseMentionsFromContent = (content: string) => {\n        const entityIds: number[] = []\n        const postIds: number[] = []\n\n        // Match patterns like [entity_type:123] or [entity_type:123|label] or [entity_type:123|label|config]\n        const mentionPattern = /\\[([a-zA-Z_]+):(\\d+)(?:\\|[^\\]]+)?\\]/g\n        let match\n\n        while ((match = mentionPattern.exec(content)) !== null) {\n            const type = match[1]\n            const id = parseInt(match[2], 10)\n\n            if (type === 'post') {\n                if (!postIds.includes(id)) {\n                    postIds.push(id)\n                }\n            } else {\n                // All other types are entities (character, location, item, etc.)\n                if (!entityIds.includes(id)) {\n                    entityIds.push(id)\n                }\n            }\n        }\n\n        return { entityIds, postIds }\n    }\n\n    onMounted(() => {\n        // Listen for source mode event\n        window.addEventListener('tiptap:source-mode', enterSourceMode)\n\n        // Parse content for mentions and load their data\n        if (props.mentions && props.content) {\n            const { entityIds, postIds } = parseMentionsFromContent(props.content)\n\n            if (entityIds.length > 0 || postIds.length > 0) {\n                axios.post(props.mentions, {\n                    entities: entityIds,\n                    posts: postIds,\n                }).then(res => {\n                    mentions.value = res.data\n                    // Re-set content to trigger MentionParser with loaded mentions\n                    editor.value?.commands.setContent(props.content)\n                })\n            }\n        }\n    })\n\n    onBeforeUnmount(() => {\n        window.removeEventListener('tiptap:source-mode', enterSourceMode)\n        editor?.value.destroy()\n    })\n</script>\n\n<template>\n    <SourceEditor\n        v-if=\"sourceMode\"\n        v-model=\"html\"\n        @exit=\"exitSourceMode\"\n    />\n\n    <template v-else>\n        <template v-if=\"editor\">\n            <bubble-menu\n                :editor=\"editor\"\n                plugin-key=\"mentionBubbleMenu\"\n                :should-show=\"({ editor }) => editor.isActive('mention')\"\n            >\n                <div class=\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\">\n                    <MentionBubbleMenu\n                        ref=\"mentionBubbleRef\"\n                        :editor=\"editor\"\n                        :mentions=\"mentions\"\n                    />\n                </div>\n            </bubble-menu>\n\n            <bubble-menu\n                :editor=\"editor\"\n                plugin-key=\"linkBubbleMenu\"\n                :should-show=\"({ editor }) => editor.isActive('link') && editor.state.selection.empty\"\n            >\n                <div class=\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\">\n                    <LinkBubbleMenu :editor=\"editor\" />\n                </div>\n            </bubble-menu>\n\n            <bubble-menu\n                :editor=\"editor\"\n                plugin-key=\"tableBubbleMenu\"\n                :should-show=\"({ editor }) => editor.state.selection instanceof CellSelection\"\n            >\n                <div class=\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\">\n                    <TableBubbleMenu :editor=\"editor\" />\n                </div>\n            </bubble-menu>\n\n            <bubble-menu\n                :editor=\"editor\"\n                plugin-key=\"imageBubbleMenu\"\n                :should-show=\"({ editor }) => editor.isActive('image')\"\n            >\n                <div class=\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\">\n                    <ImageBubbleMenu :editor=\"editor\" />\n                </div>\n            </bubble-menu>\n\n            <bubble-menu\n                :editor=\"editor\"\n                plugin-key=\"textBubbleMenu\"\n                :should-show=\"({ editor }) => {\n                    if (editor.state.selection.empty) return false\n                    if (editor.isActive('mention')) return false\n                    if (editor.state.selection instanceof CellSelection) return false\n                    if (editor.isActive('image')) return false\n                    return true\n                }\"\n            >\n                <div class=\"bubble-menu bg-base-100 shadow rounded-2xl flex gap-0.5 items-center px-2 py-2\">\n                    <TextBubbleMenu\n                        :editor=\"editor\"\n                        @open-link=\"openLinkBubble\"\n                    />\n                </div>\n            </bubble-menu>\n        </template>\n\n        <editor-content :editor=\"editor\" class=\"\" />\n\n        <p v-if=\"showHelperText\" class=\"text-neutral-content text-xs mt-2 flex items-center gap-5\">\n            <span>\n                Use <kbd>@</kbd> to reference entities\n            </span>\n            <span>\n                <kbd>/</kbd> for commands\n            </span>\n        </p>\n    </template>\n\n    <input type=\"hidden\" :name=\"props.fieldName\" :value=\"html\" />\n\n    <GalleryDialog v-if=\"gallery\" :gallery-id=\"galleryId\" />\n</template>\n\n<style scoped>\n.bubble-menu {\n    z-index: 845;\n    position: relative;\n}\n\n:deep(.ProseMirror) {\n    min-height: 200px;\n    max-height: 70vh;\n    overflow-y: auto;\n    border: 1px solid hsl(var(--bc)/.1);\n    border-radius: var(--rounded-btn);\n    background-color: hsl(var(--b1)/1);\n    padding: 0.6rem 0.8rem;\n    margin-bottom: 1rem;\n    &:focus {\n        outline-style: solid;\n        outline-width: 2px;\n        outline-offset: 2px;\n        outline-color: hsl(var(--p)/0.3);\n        border-color: transparent;\n    }\n\n    p.is-editor-empty:first-child::before {\n        content: attr(data-placeholder);\n        --tw-text-opacity: .4;\n        color: hsl(var(--bc)/var(--tw-text-opacity));\n        pointer-events: none;\n        float: left;\n        height: 0;\n    }\n}\n\n\n:deep(.iframe-wrapper) {\n    margin: 1rem 0;\n}\n\n:deep(.iframe-wrapper iframe) {\n    max-width: 100%;\n    border: 0;\n}\n\n:deep(.details) {\n    flex-direction: row;\n    summary {\n        display: inline;\n    }\n}\n</style>\n<style>\n.tiptap-editor {\n    table {\n\n        td, th {\n            box-sizing: border-box;\n        }\n\n        .selectedCell {\n            background: hsl(var(--p)/1);\n            color: hsl(var(--pc)/1);\n        }\n        .selectedCell:after {\n            content: '';\n            left: 0;\n            right: 0;\n            top: 0;\n            bottom: 0;\n            pointer-events: none;\n            position: absolute;\n            z-index: 2;\n        }\n\n        .column-resize-handle {\n            background: hsl(var(--p)/1);\n            bottom: -2px;\n            margin: 0;\n            pointer-events: none;\n            position: absolute;\n            right: -2px;\n            top: 0;\n            width: 4px;\n        }\n    }\n\n    .tableWrapper {\n        margin: 1.5rem 0;\n        overflow-x: auto;\n    }\n\n    &.resize-cursor {\n        cursor: ew-resize;\n        cursor: col-resize;\n    }\n\n    .ProseMirror-selectednode img {\n        outline: 2px solid hsl(var(--p)/1);\n    }\n\n    [data-resize-handle] {\n        position: absolute;\n        background: hsl(var(--pc)/1);\n        border: 1px solid hsl(var(--pc)/1);\n        border-radius: 2px;\n        z-index: 10;\n\n        &:hover {\n            background: hsl(var(--p)/1);\n        }\n\n        /* Corner handles */\n        &[data-resize-handle='top-left'],\n        &[data-resize-handle='top-right'],\n        &[data-resize-handle='bottom-left'],\n        &[data-resize-handle='bottom-right'] {\n            width: 8px;\n            height: 8px;\n        }\n\n        &[data-resize-handle='top-left'] {\n            top: -4px;\n            left: -4px;\n            cursor: nwse-resize;\n        }\n\n        &[data-resize-handle='top-right'] {\n            top: -4px;\n            right: -4px;\n            cursor: nesw-resize;\n        }\n\n        &[data-resize-handle='bottom-left'] {\n            bottom: -4px;\n            left: -4px;\n            cursor: nesw-resize;\n        }\n\n        &[data-resize-handle='bottom-right'] {\n            bottom: -4px;\n            right: -4px;\n            cursor: nwse-resize;\n        }\n\n        /* Edge handles */\n        &[data-resize-handle='top'],\n        &[data-resize-handle='bottom'] {\n            height: 6px;\n            left: 8px;\n            right: 8px;\n        }\n\n        &[data-resize-handle='top'] {\n            top: -3px;\n            cursor: ns-resize;\n        }\n\n        &[data-resize-handle='bottom'] {\n            bottom: -3px;\n            cursor: ns-resize;\n        }\n\n        &[data-resize-handle='left'],\n        &[data-resize-handle='right'] {\n            width: 6px;\n            top: 8px;\n            bottom: 8px;\n        }\n\n        &[data-resize-handle='left'] {\n            left: -3px;\n            cursor: ew-resize;\n        }\n\n        &[data-resize-handle='right'] {\n            right: -3px;\n            cursor: ew-resize;\n        }\n    }\n\n    [data-resize-state='true'] [data-resize-wrapper] {\n        outline: 2px solid hsl(var(--p)/1);\n        border-radius: 0.125rem;\n    }\n\n}\n</style>\n"
  },
  {
    "path": "resources/js/editors/tiptap/bubblemenus/ColorPicker.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount, computed } from 'vue'\nimport { buttonClass } from '../utils'\n\nconst props = defineProps<{\n    currentColor: string | null\n    icon: string\n    title: string\n}>()\n\nconst emit = defineEmits<{\n    select: [color: string | null]\n}>()\n\nconst RECENT_COLORS_KEY = 'recent_colors'\nconst MAX_COLORS = 10\n\nconst pickerId = Math.random().toString(36).substring(7)\nconst showPicker = ref(false)\nconst customColor = ref('')\nconst recentColors = ref<string[]>([])\n\nconst presetColors = [\n    '#000000', '#434343', '#666666', '#999999', '#cccccc', '#efefef', '#ffffff',\n    '#FB0300', '#FF9900', '#FFFF01', '#00FF00', '#00FFFF', '#0000FF', '#9900FF',\n    '#FB3533', '#FFAD33', '#FFFF34', '#33FF33', '#33FFFF', '#3333FF', '#AD33FF',\n    '#FC6866', '#FFC266', '#FFFF67', '#66FF66', '#66FFFF', '#6666FF', '#C266FF',\n    '#FD9B99', '#FFD699', '#FFFF9A', '#99FF99', '#99FFFF', '#9999FF', '#D699FF',\n    '#FECECC', '#FFEBCC', '#FFFFCD', '#CCFFCC', '#CCFFFF', '#CCCCFF', '#EBCCFF',\n    '#FEE1E0', '#FFF3E0', '#FFFFE1', '#E0FFE0', '#E0FFFF', '#E0E0FF', '#F3E0FF',\n    '#FFF5F4', '#FFF9F4', '#FFFFF5', '#F4FFF4', '#F4FFFF', '#F4F4FF', '#F9F4FF',\n]\n\nconst getCookies = () => {\n    return document.cookie.split(';').reduce((cookies: Record<string, string>, cookie) => {\n        const [key, value] = cookie.split('=').map(c => c.trim())\n        if (key && value) cookies[key] = decodeURIComponent(value)\n        return cookies\n    }, {})\n}\n\nconst setCookie = (name: string, value: string, days = 30) => {\n    const date = new Date()\n    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000))\n    document.cookie = `${name}=${encodeURIComponent(value)}; expires=${date.toUTCString()}; path=/`\n}\n\nconst loadRecentColors = () => {\n    const cookies = getCookies()\n    recentColors.value = cookies[RECENT_COLORS_KEY] ? JSON.parse(cookies[RECENT_COLORS_KEY]) : []\n}\n\nconst saveRecentColor = (color: string) => {\n    recentColors.value = [color, ...recentColors.value.filter(c => c !== color)]\n    if (recentColors.value.length > MAX_COLORS) {\n        recentColors.value = recentColors.value.slice(0, MAX_COLORS)\n    }\n    setCookie(RECENT_COLORS_KEY, JSON.stringify(recentColors.value))\n}\n\nconst selectColor = (color: string) => {\n    saveRecentColor(color)\n    emit('select', color)\n    showPicker.value = false\n}\n\nconst selectCustomColor = () => {\n    if (customColor.value && /^#[0-9A-Fa-f]{6}$/.test(customColor.value)) {\n        selectColor(customColor.value)\n        customColor.value = ''\n    }\n}\n\nconst clearColor = () => {\n    emit('select', null)\n    showPicker.value = false\n}\n\nconst handleCloseOthers = (event: CustomEvent) => {\n    if (event.detail !== pickerId) {\n        showPicker.value = false\n    }\n}\n\nconst togglePicker = () => {\n    if (!showPicker.value) {\n        // Close other color pickers\n        window.dispatchEvent(new CustomEvent('colorpicker:close', { detail: pickerId }))\n        loadRecentColors()\n    }\n    showPicker.value = !showPicker.value\n}\n\nconst hasColor = computed(() => !!props.currentColor)\n\nonMounted(() => {\n    loadRecentColors()\n    window.addEventListener('colorpicker:close', handleCloseOthers as EventListener)\n})\n\nonBeforeUnmount(() => {\n    window.removeEventListener('colorpicker:close', handleCloseOthers as EventListener)\n})\n</script>\n\n<template>\n    <div class=\"relative\">\n        <button\n            @click.prevent=\"togglePicker\"\n            :class=\"buttonClass(hasColor)\"\n            class=\"flex items-center gap-0.5\"\n            :title=\"title\"\n        >\n            <i :class=\"icon\" aria-hidden=\"true\"></i>\n            <span\n                v-if=\"currentColor\"\n                class=\"w-2 h-2 rounded-full border border-base-300\"\n                :style=\"{ backgroundColor: currentColor }\"\n            ></span>\n        </button>\n\n        <div\n            v-show=\"showPicker\"\n            class=\"absolute top-full left-0 mt-1 bg-base-100 shadow-lg rounded-lg p-3 z-50 w-[220px]\"\n        >\n            <!-- Recent colors -->\n            <div v-if=\"recentColors.length > 0\" class=\"mb-2\">\n                <div class=\"text-xs text-neutral-content mb-1\">Recent</div>\n                <div class=\"flex flex-wrap gap-1\">\n                    <button\n                        v-for=\"color in recentColors\"\n                        :key=\"color\"\n                        @mousedown.prevent=\"selectColor(color)\"\n                        class=\"w-5 h-5 rounded border border-base-300 hover:scale-110 transition-transform\"\n                        :style=\"{ backgroundColor: color }\"\n                        :title=\"color\"\n                    ></button>\n                </div>\n            </div>\n\n            <!-- Preset colors -->\n            <div class=\"mb-2\">\n                <div class=\"text-xs text-neutral-content mb-1\">Colors</div>\n                <div class=\"grid grid-cols-7 gap-1\">\n                    <button\n                        v-for=\"color in presetColors\"\n                        :key=\"color\"\n                        @mousedown.prevent=\"selectColor(color)\"\n                        class=\"w-5 h-5 rounded border border-base-300 hover:scale-110 transition-transform\"\n                        :style=\"{ backgroundColor: color }\"\n                        :title=\"color\"\n                    ></button>\n                </div>\n            </div>\n\n            <!-- Custom color input -->\n            <div class=\"mb-2\">\n                <input\n                    v-model=\"customColor\"\n                    type=\"text\"\n                    placeholder=\"#000000\"\n                    maxlength=\"7\"\n                    class=\"w-full p-1 text-xs rounded border border-base-300 outline-none focus:ring-1 focus:ring-primary\"\n                    @keydown.enter.prevent=\"selectCustomColor\"\n                    @blur=\"selectCustomColor\"\n                />\n            </div>\n\n            <!-- Clear button -->\n            <button\n                @mousedown.prevent=\"clearColor\"\n                class=\"w-full text-xs text-neutral-content hover:text-error-content py-1 flex items-center justify-center gap-1 cursor-pointer\"\n            >\n                <i class=\"fa-regular fa-eraser\" aria-hidden=\"true\"></i>\n                Remove color\n            </button>\n        </div>\n    </div>\n</template>\n"
  },
  {
    "path": "resources/js/editors/tiptap/bubblemenus/ImageBubbleMenu.vue",
    "content": "<script setup lang=\"ts\">\nimport type { Editor } from '@tiptap/core'\nimport { buttonClass } from '../utils'\n\nconst props = defineProps<{\n    editor: Editor\n}>()\n\nconst setImageWidth = (width: string | null) => {\n    props.editor.commands.setImageWidth(width)\n}\n\nconst setImageFloat = (float: 'left' | 'right' | null) => {\n    props.editor.commands.setImageFloat(float)\n}\n\nconst deleteImage = () => {\n    props.editor.chain().focus().deleteSelection().run()\n}\n\nconst getImageWidth = (): string | null => {\n    return props.editor.getAttributes('image').widthStyle || null\n}\n\nconst getImageFloat = (): 'left' | 'right' | null => {\n    return props.editor.getAttributes('image').floatStyle || null\n}\n</script>\n\n<template>\n    <div class=\"flex gap-1 items-center text-xs text-neutral-content px-2\">\n        <!-- Width controls -->\n        <div class=\"flex items-center gap-0.5 border-r border-base-300 pr-2 mr-1\">\n            <button\n                @click.prevent=\"setImageWidth('25%')\"\n                :class=\"buttonClass(getImageWidth() === '25%')\"\n                title=\"25% width\"\n            >\n                25%\n            </button>\n            <button\n                @click.prevent=\"setImageWidth('50%')\"\n                :class=\"buttonClass(getImageWidth() === '50%')\"\n                title=\"50% width\"\n            >\n                50%\n            </button>\n            <button\n                @click.prevent=\"setImageWidth('100%')\"\n                :class=\"buttonClass(getImageWidth() === '100%')\"\n                title=\"100% width\"\n            >\n                100%\n            </button>\n            <button\n                @click.prevent=\"setImageWidth(null)\"\n                :class=\"buttonClass(getImageWidth() === null)\"\n                title=\"Reset width\"\n            >\n                <i class=\"fa-regular fa-undo\" aria-hidden=\"true\" />\n            </button>\n        </div>\n        <!-- Float controls -->\n        <div class=\"flex items-center gap-0.5 border-r border-base-300 pr-2 mr-1\">\n            <button\n                @click.prevent=\"setImageFloat('left')\"\n                :class=\"buttonClass(getImageFloat() === 'left')\"\n                title=\"Float left\"\n            >\n                <i class=\"fa-regular fa-align-left\" aria-hidden=\"true\" />\n            </button>\n            <button\n                @click.prevent=\"setImageFloat('right')\"\n                :class=\"buttonClass(getImageFloat() === 'right')\"\n                title=\"Float right\"\n            >\n                <i class=\"fa-regular fa-align-right\" aria-hidden=\"true\" />\n            </button>\n            <button\n                @click.prevent=\"setImageFloat(null)\"\n                :class=\"buttonClass(getImageFloat() === null)\"\n                title=\"No float\"\n            >\n                <i class=\"fa-regular fa-align-justify\" aria-hidden=\"true\" />\n            </button>\n        </div>\n        <!-- Delete -->\n        <button\n            @click.prevent=\"deleteImage\"\n            class=\"hover:text-error-content px-2 py-1\"\n            title=\"Delete image\"\n        >\n            <i class=\"fa-regular fa-trash\" aria-hidden=\"true\" />\n        </button>\n    </div>\n</template>\n"
  },
  {
    "path": "resources/js/editors/tiptap/bubblemenus/LinkBubbleMenu.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport type { Editor } from '@tiptap/core'\n\nconst props = defineProps<{\n    editor: Editor\n}>()\n\nconst linkInputRef = ref<HTMLInputElement | null>(null)\nconst linkUrl = ref('')\n\n// Keep input in sync with the active link's href\nwatch(\n    () => props.editor.getAttributes('link').href,\n    (href) => { linkUrl.value = href || '' },\n    { immediate: true }\n)\n\n// Focus the input whenever the bubble becomes visible\nwatch(\n    () => props.editor.isActive('link') && props.editor.state.selection.empty,\n    (visible) => {\n        if (visible) {\n            setTimeout(() => linkInputRef.value?.focus(), 10)\n        }\n    }\n)\n\nconst setLink = () => {\n    if (!linkUrl.value) {\n        // Empty URL submitted — remove the link\n        props.editor.chain().focus().extendMarkRange('link').unsetLink().run()\n        return\n    }\n\n    let url = linkUrl.value\n    if (!/^https?:\\/\\//i.test(url)) {\n        url = 'https://' + url\n    }\n\n    props.editor\n        .chain()\n        .focus()\n        .extendMarkRange('link')\n        .setLink({ href: url })\n        .run()\n}\n\nconst removeLink = () => {\n    props.editor.chain().focus().extendMarkRange('link').unsetLink().run()\n}\n\nconst closeLinkInput = () => {\n    if (!props.editor.getAttributes('link').href) {\n        // Link was never saved (empty href) — remove it so the bubble closes\n        props.editor.chain().focus().extendMarkRange('link').unsetLink().run()\n    } else {\n        props.editor.commands.focus()\n    }\n}\n\nconst handleLinkKeydown = (event: KeyboardEvent) => {\n    if (event.key === 'Enter') {\n        event.preventDefault()\n        setLink()\n    } else if (event.key === 'Escape') {\n        event.preventDefault()\n        closeLinkInput()\n    }\n}\n</script>\n\n<template>\n    <div class=\"flex gap-2 items-center text-xs text-neutral-content px-2\">\n        <input\n            ref=\"linkInputRef\"\n            v-model=\"linkUrl\"\n            type=\"text\"\n            placeholder=\"Enter URL...\"\n            class=\"p-0 px-1 rounded text-xs outline-none focus:ring-1 focus:ring-primary min-w-[200px]\"\n            @keydown=\"handleLinkKeydown\"\n        />\n        <a\n            v-if=\"editor.isActive('link')\"\n            :href=\"editor.getAttributes('link').href\"\n            target=\"_blank\"\n            class=\"hover:text-base-content\"\n            title=\"Open in a new window\"\n        >\n            <i class=\"fa-regular fa-external-link-alt\" />\n        </a>\n        <button\n            v-if=\"editor.isActive('link')\"\n            @click.prevent=\"removeLink\"\n            class=\"hover:text-error-content\"\n            title=\"Remove link\"\n        >\n            <i class=\"fa-regular fa-unlink\" aria-label=\"Removal icon\" />\n        </button>\n    </div>\n</template>\n"
  },
  {
    "path": "resources/js/editors/tiptap/bubblemenus/MentionBubbleMenu.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport type { Editor } from '@tiptap/core'\n\nconst props = defineProps<{\n    editor: Editor\n    mentions: any[]\n}>()\n\nconst mentionLabelInput = ref<HTMLInputElement | null>(null)\nconst editingMentionLabel = ref('')\nconst mentionConfigInput = ref<HTMLInputElement | null>(null)\nconst editingMentionConfig = ref('')\nconst showMentionConfig = ref(false)\n\n// Sync label when selection changes\nconst syncLabel = () => {\n    const mentionAttrs = props.editor.getAttributes('mention')\n    if (mentionAttrs?.entity) {\n        editingMentionLabel.value = mentionAttrs?.label || ''\n    }\n}\n\ndefineExpose({ syncLabel })\n\nconst deleteMention = () => {\n    props.editor.chain().focus().deleteSelection().run()\n}\n\nconst startEditingMentionLabel = () => {\n    // Value is pre-filled by syncLabel, nothing to do here\n}\n\nconst updateMentionLabel = () => {\n    let trimmedLabel = editingMentionLabel.value.trim()\n    const mentionAttrs = props.editor.getAttributes('mention')\n    const entityId = mentionAttrs?.id\n\n    // If the new name matches the entity's default name, clear the label\n    const entity = props.mentions.find(e => e.id === parseInt(entityId))\n    if (trimmedLabel === entity?.name) {\n        trimmedLabel = ''\n    }\n\n    // Update the label (empty string will cause renderLabel to fall back to name)\n    props.editor\n        .chain()\n        .focus()\n        .updateAttributes('mention', {\n            label: trimmedLabel\n        })\n        .run()\n\n    editingMentionLabel.value = ''\n}\n\nconst handleMentionLabelBlur = (event: FocusEvent) => {\n    const relatedTarget = event.relatedTarget as HTMLElement\n    if (relatedTarget && relatedTarget.closest('.bubble-menu')) {\n        return\n    }\n    updateMentionLabel()\n}\n\nconst handleMentionLabelKeydown = (event: KeyboardEvent) => {\n    if (event.key === 'Enter') {\n        event.preventDefault()\n        updateMentionLabel()\n    } else if (event.key === 'Escape') {\n        event.preventDefault()\n        editingMentionLabel.value = ''\n        props.editor.commands.focus()\n    }\n}\n\nconst openMentionConfig = () => {\n    const mentionAttrs = props.editor.getAttributes('mention')\n    editingMentionConfig.value = mentionAttrs?.config || ''\n    showMentionConfig.value = true\n\n    setTimeout(() => {\n        mentionConfigInput.value?.focus()\n        mentionConfigInput.value?.select()\n    }, 10)\n}\n\nconst updateMentionConfig = () => {\n    const trimmedConfig = editingMentionConfig.value.trim()\n\n    props.editor\n        .chain()\n        .focus()\n        .updateAttributes('mention', {\n            config: trimmedConfig || null\n        })\n        .run()\n\n    showMentionConfig.value = false\n    editingMentionConfig.value = ''\n}\n\nconst handleMentionConfigBlur = (event: FocusEvent) => {\n    const relatedTarget = event.relatedTarget as HTMLElement\n    if (relatedTarget && relatedTarget.closest('.bubble-menu')) {\n        return\n    }\n    updateMentionConfig()\n}\n\nconst clearMentionConfig = () => {\n    props.editor\n        .chain()\n        .focus()\n        .updateAttributes('mention', {\n            config: null\n        })\n        .run()\n\n    showMentionConfig.value = false\n    editingMentionConfig.value = ''\n}\n\nconst handleMentionConfigKeydown = (event: KeyboardEvent) => {\n    if (event.key === 'Enter') {\n        event.preventDefault()\n        updateMentionConfig()\n    } else if (event.key === 'Escape') {\n        event.preventDefault()\n        showMentionConfig.value = false\n        editingMentionConfig.value = ''\n        props.editor.commands.focus()\n    }\n}\n</script>\n\n<template>\n    <div class=\"flex items-center gap-2 text-xs text-neutral-content px-2\">\n        <template v-if=\"showMentionConfig\">\n            <input\n                ref=\"mentionConfigInput\"\n                v-model=\"editingMentionConfig\"\n                type=\"text\"\n                placeholder=\"page:abilities|anchor:#ability-1\"\n                class=\"p-0 px-1 rounded text-xs outline-none focus:ring-1 focus:ring-primary min-w-[250px]\"\n                @blur=\"handleMentionConfigBlur\"\n                @keydown=\"handleMentionConfigKeydown\"\n            />\n            <button\n                v-if=\"editor.getAttributes('mention').config\"\n                @click.prevent=\"clearMentionConfig\"\n                class=\"hover:text-warning\"\n                title=\"Clear config\"\n            >\n                <i class=\"fa-regular fa-times\" />\n            </button>\n        </template>\n        <template v-else>\n            <!-- Valid entity: show editable label and link -->\n            <template v-if=\"editor.getAttributes('mention').entity\">\n                <input\n                    ref=\"mentionLabelInput\"\n                    v-model=\"editingMentionLabel\"\n                    type=\"text\"\n                    :placeholder=\"editor.getAttributes('mention').entity.name\"\n                    class=\"p-0 px-1 rounded text-xs outline-none focus:ring-1 focus:ring-primary min-w-[150px]\"\n                    @focus=\"startEditingMentionLabel\"\n                    @blur=\"handleMentionLabelBlur\"\n                    @keydown=\"handleMentionLabelKeydown\"\n                />\n                <a\n                    v-if=\"editor.getAttributes('mention').url\"\n                    class=\"text-link\"\n                    :href=\"editor.getAttributes('mention').url\"\n                    title=\"Go to entity\"\n                >\n                    <i class=\"fa-regular fa-external-link-alt\" aria-hidden=\"true\" />\n                </a>\n            </template>\n            <!-- Unknown entity: show warning -->\n            <template v-else>\n                <span class=\"text-neutral-content flex items-center gap-1\">\n                    <i class=\"fa-regular fa-exclamation-triangle\" aria-hidden=\"true\" />\n                    Unknown entity\n                </span>\n            </template>\n            <button\n                @click.prevent=\"openMentionConfig\"\n                class=\"hover:text-primary\"\n                :class=\"{ 'text-primary': editor.getAttributes('mention').config }\"\n                title=\"Customize mention\"\n            >\n                <i class=\"fa-regular fa-cog\" aria-hidden=\"true\" />\n            </button>\n            <button\n                @click.prevent=\"deleteMention\"\n                class=\"hover:text-error-content\"\n                title=\"Remove mention\"\n            >\n                <i class=\"fa-regular fa-trash\" aria-hidden=\"true\" />\n            </button>\n        </template>\n    </div>\n</template>\n"
  },
  {
    "path": "resources/js/editors/tiptap/bubblemenus/TableBubbleMenu.vue",
    "content": "<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { Editor } from '@tiptap/core'\nimport { buttonClass } from '../utils'\n\nconst props = defineProps<{\n    editor: Editor\n}>()\n\n// Get the current table node and position\nconst getTableInfo = () => {\n    const { selection } = props.editor.state\n    const { $from } = selection\n\n    for (let depth = $from.depth; depth > 0; depth--) {\n        const node = $from.node(depth)\n        if (node.type.name === 'table') {\n            return { node, pos: $from.before(depth) }\n        }\n    }\n    return null\n}\n\n// Parse class string into array\nconst getClassList = () => {\n    const info = getTableInfo()\n    const classStr = info?.node.attrs.class || ''\n    return classStr.split(' ').filter(Boolean)\n}\n\n// Check if table has a specific class\nconst hasClass = (className: string) => {\n    return getClassList().includes(className)\n}\n\n// Computed properties for button states\nconst hasBordered = computed(() => hasClass('table-bordered'))\nconst hasStriped = computed(() => hasClass('table-striped'))\nconst hasLeft = computed(() => hasClass('table-left'))\nconst hasRight = computed(() => hasClass('table-right'))\n\n// Update table class attribute\nconst updateTableClass = (newClassList: string[]) => {\n    const info = getTableInfo()\n    if (!info) return\n\n    // Ensure 'table' is always first if there are other table-* classes\n    if (newClassList.some(c => c.startsWith('table-')) && !newClassList.includes('table')) {\n        newClassList.unshift('table')\n    }\n\n    const { tr } = props.editor.state\n    tr.setNodeMarkup(info.pos, undefined, {\n        ...info.node.attrs,\n        class: newClassList.join(' ') || null,\n    })\n    props.editor.view.dispatch(tr)\n}\n\n// Toggle a class on/off\nconst toggleClass = (className: string, removeClasses: string[] = []) => {\n    const classList = getClassList()\n\n    // Remove any classes that should be removed\n    const filtered = classList.filter(c => !removeClasses.includes(c))\n\n    if (classList.includes(className)) {\n        // Remove the class\n        updateTableClass(filtered.filter(c => c !== className))\n    } else {\n        // Add the class\n        updateTableClass([...filtered, className])\n    }\n}\n\nconst toggleBordered = () => toggleClass('table-bordered')\nconst toggleStriped = () => toggleClass('table-striped')\nconst toggleLeft = () => toggleClass('table-left', ['table-right'])\nconst toggleRight = () => toggleClass('table-right', ['table-left'])\n\nconst addColumnAfter = () => {\n    props.editor.chain().focus().addColumnAfter().run()\n}\n\nconst addRowAfter = () => {\n    props.editor.chain().focus().addRowAfter().run()\n}\n\nconst deleteTable = () => {\n    props.editor.chain().focus().deleteTable().run()\n}\n\nconst deleteRow = () => {\n    props.editor.chain().focus().deleteRow().run()\n}\n\nconst deleteColumn = () => {\n    props.editor.chain().focus().deleteColumn().run()\n}\n\nconst toggleHeaderRow = () => {\n    props.editor.chain().focus().toggleHeaderRow().run()\n}\n</script>\n\n<template>\n    <div class=\"flex gap-1 items-center text-xs text-neutral-content px-2\">\n        <button\n            @click.prevent=\"addColumnAfter\"\n            :class=\"buttonClass(false)\"\n            title=\"Add column\"\n        >\n            <i class=\"fa-regular fa-table-columns\" aria-hidden=\"true\" />\n            <i class=\"fa-regular fa-plus text-[8px]\" aria-hidden=\"true\" />\n        </button>\n        <button\n            @click.prevent=\"addRowAfter\"\n            :class=\"buttonClass(false)\"\n            title=\"Add row\"\n        >\n            <i class=\"fa-regular fa-table-rows\" aria-hidden=\"true\" />\n            <i class=\"fa-regular fa-plus text-[8px]\" aria-hidden=\"true\" />\n        </button>\n        <button\n            @click.prevent=\"deleteColumn\"\n            :class=\"buttonClass(false)\"\n            title=\"Delete column\"\n        >\n            <i class=\"fa-regular fa-table-columns\" aria-hidden=\"true\" />\n            <i class=\"fa-regular fa-minus text-[8px]\" aria-hidden=\"true\" />\n        </button>\n        <button\n            @click.prevent=\"deleteRow\"\n            :class=\"buttonClass(false)\"\n            title=\"Delete row\"\n        >\n            <i class=\"fa-regular fa-table-rows\" aria-hidden=\"true\" />\n            <i class=\"fa-regular fa-minus text-[8px]\" aria-hidden=\"true\" />\n        </button>\n        <button\n            @click.prevent=\"toggleHeaderRow\"\n            :class=\"buttonClass(false)\"\n            title=\"Toggle header row\"\n        >\n            <i class=\"fa-regular fa-heading\" aria-hidden=\"true\" />\n        </button>\n\n        <span class=\"w-px h-4 bg-base-content/20 mx-1\" />\n\n        <button\n            @click.prevent=\"toggleBordered\"\n            :class=\"buttonClass(hasBordered)\"\n            title=\"Toggle bordered\"\n        >\n            <i class=\"fa-regular fa-border-all\" aria-hidden=\"true\" />\n        </button>\n        <button\n            @click.prevent=\"toggleStriped\"\n            :class=\"buttonClass(hasStriped)\"\n            title=\"Toggle striped\"\n        >\n            <i class=\"fa-regular fa-bars\" aria-hidden=\"true\" />\n        </button>\n        <button\n            @click.prevent=\"toggleLeft\"\n            :class=\"buttonClass(hasLeft)\"\n            title=\"Align left\"\n        >\n            <i class=\"fa-regular fa-align-left\" aria-hidden=\"true\" />\n        </button>\n        <button\n            @click.prevent=\"toggleRight\"\n            :class=\"buttonClass(hasRight)\"\n            title=\"Align right\"\n        >\n            <i class=\"fa-regular fa-align-right\" aria-hidden=\"true\" />\n        </button>\n\n        <span class=\"w-px h-4 bg-base-content/20 mx-1\" />\n\n        <button\n            @click.prevent=\"deleteTable\"\n            class=\"hover:text-error-content px-2 py-1\"\n            title=\"Delete table\"\n        >\n            <i class=\"fa-regular fa-trash\" aria-hidden=\"true\" />\n        </button>\n    </div>\n</template>\n"
  },
  {
    "path": "resources/js/editors/tiptap/bubblemenus/TextBubbleMenu.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport type { Editor } from '@tiptap/core'\nimport { buttonClass } from '../utils'\nimport ColorPicker from './ColorPicker.vue'\n\nconst props = defineProps<{\n    editor: Editor\n}>()\n\nconst emit = defineEmits<{\n    openLink: []\n}>()\n\nconst showHeadingDropdown = ref(false)\nconst showListDropdown = ref(false)\n\nconst currentTextColor = computed(() => {\n    return props.editor.getAttributes('textStyle').color || null\n})\n\nconst currentHighlightColor = computed(() => {\n    return props.editor.getAttributes('highlight').color || null\n})\n\nconst setTextColor = (color: string | null) => {\n    if (color) {\n        props.editor.chain().focus().setColor(color).run()\n    } else {\n        props.editor.chain().focus().unsetColor().run()\n    }\n}\n\nconst setHighlightColor = (color: string | null) => {\n    if (color) {\n        props.editor.chain().focus().setHighlight({ color }).run()\n    } else {\n        props.editor.chain().focus().unsetHighlight().run()\n    }\n}\n\nconst currentHeadingIcon = computed(() => {\n    if (!props.editor) return 'fa-regular fa-paragraph'\n    if (props.editor.isActive('paragraph')) return 'fa-regular fa-paragraph'\n    return 'fa-regular fa-heading'\n})\n\nconst currentHeadingLevel = () => {\n    if (props.editor.isActive('heading', { level: 1 })) return '1'\n    if (props.editor.isActive('heading', { level: 2 })) return '2'\n    if (props.editor.isActive('heading', { level: 3 })) return '3'\n    if (props.editor.isActive('heading', { level: 4 })) return '4'\n    if (props.editor.isActive('heading', { level: 5 })) return '5'\n    return 0\n}\n\nconst setHeading = (level: number | null) => {\n    if (level === null) {\n        props.editor.chain().focus().setParagraph().run()\n    } else {\n        props.editor.chain().focus().toggleHeading({ level }).run()\n    }\n    showHeadingDropdown.value = false\n}\n\nconst toggleDropdown = () => {\n    showHeadingDropdown.value = !showHeadingDropdown.value\n}\n\nconst closeDropdown = () => {\n    showHeadingDropdown.value = false\n}\n\nconst getCurrentListIcon = computed(() => {\n    if (!props.editor) return 'fa-regular fa-list-ol'\n    if (props.editor.isActive('bulletList')) return 'fa-regular fa-list-ul'\n    if (props.editor.isActive('orderedList')) return 'fa-regular fa-list-ol'\n    return 'fa-regular fa-list-ul'\n})\n\nconst toggleList = (type: 'bullet' | 'ordered') => {\n    if (type === 'bullet') {\n        props.editor.chain().focus().toggleBulletList().run()\n    } else {\n        props.editor.chain().focus().toggleOrderedList().run()\n    }\n    showListDropdown.value = false\n}\n\nconst toggleListDropdown = () => {\n    showListDropdown.value = !showListDropdown.value\n}\n\nconst closeListDropdown = () => {\n    showListDropdown.value = false\n}\n\nconst currentAlignIcon = computed(() => {\n    if (props.editor.isActive({ textAlign: 'center' })) return 'fa-regular fa-align-center'\n    if (props.editor.isActive({ textAlign: 'right' })) return 'fa-regular fa-align-right'\n    return 'fa-regular fa-align-left'\n})\n\nconst cycleAlignment = () => {\n    if (props.editor.isActive({ textAlign: 'center' })) {\n        props.editor.chain().focus().setTextAlign('right').run()\n    } else if (props.editor.isActive({ textAlign: 'right' })) {\n        props.editor.chain().focus().setTextAlign('left').run()\n    } else {\n        props.editor.chain().focus().setTextAlign('center').run()\n    }\n}\n\nconst clearFormatting = () => {\n    props.editor.chain().focus().unsetAllMarks().clearNodes().run()\n}\n</script>\n\n<template>\n    <div class=\"relative\">\n        <button\n            @click.prevent=\"toggleDropdown\"\n            :class=\"buttonClass(false)\"\n            class=\"flex items-center gap-0.5\"\n            @blur=\"closeDropdown\"\n        >\n            <i :class=\"currentHeadingIcon\"></i>\n            <sub v-if=\"editor.isActive('heading')\" class=\"text-xs\">\n                <span v-html=\"currentHeadingLevel()\"></span>\n            </sub>\n            <i class=\"fa-regular fa-chevron-down\" aria-label=\"Toggle paragraph styles\"></i>\n        </button>\n        <div\n            v-show=\"showHeadingDropdown\"\n            class=\"absolute top-full left-0 mt-1 bg-base-100 shadow-lg rounded-lg py-1 z-50 min-w-[200px]\"\n            @mousedown.prevent\n        >\n            <button\n                @click.prevent=\"setHeading(null)\"\n                class=\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1\"\n                :class=\"{ 'text-semibold text-base-content': editor.isActive('paragraph') }\"\n            >\n                Paragraph\n                <i class=\"fa-regular fa-check\" v-if=\"editor.isActive('paragraph')\"></i>\n            </button>\n            <button\n                @click.prevent=\"setHeading(1)\"\n                class=\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content flex items-center justify-between gap-1 text-[1.4rem]\"\n                :class=\"{ 'font-semibold text-base-content': editor.isActive('heading', { level: 1 }) }\"\n            >\n                Heading 1\n                <i class=\"fa-regular fa-check\" v-if=\"editor.isActive('heading', { level: 1 })\"></i>\n            </button>\n            <button\n                @click.prevent=\"setHeading(2)\"\n                class=\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content flex items-center justify-between gap-1 text-[1.3rem]\"\n                :class=\"{ 'font-semibold text-base-content': editor.isActive('heading', { level: 2 }) }\"\n            >\n                Heading 2\n                <i class=\"fa-regular fa-check\" v-if=\"editor.isActive('heading', { level: 2 })\"></i>\n            </button>\n            <button\n                @click.prevent=\"setHeading(3)\"\n                class=\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content flex items-center justify-between gap-1 text-[1.2rem]\"\n                :class=\"{ 'font-semibold text-base-content': editor.isActive('heading', { level: 3 }) }\"\n            >\n                Heading 3\n                <i class=\"fa-regular fa-check\" v-if=\"editor.isActive('heading', { level: 3 })\"></i>\n            </button>\n            <button\n                @click.prevent=\"setHeading(4)\"\n                class=\"w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1 text[1.1rem]\"\n                :class=\"{ 'font-semibold text-base-content': editor.isActive('heading', { level: 4 }) }\"\n            >\n                Heading 4\n                <i class=\"fa-regular fa-check\" v-if=\"editor.isActive('heading', { level: 4 })\"></i>\n            </button>\n            <button\n                @click.prevent=\"setHeading(5)\"\n                class=\"w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1\"\n                :class=\"{ 'font-semibold text-base-content': editor.isActive('heading', { level: 5 }) }\"\n            >\n                Heading 5\n                <i class=\"fa-regular fa-check\" v-if=\"editor.isActive('heading', { level: 5 })\"></i>\n            </button>\n        </div>\n    </div>\n\n    <button\n        @click.prevent=\"editor.chain().focus().toggleBold().run()\"\n        :class=\"buttonClass(editor.isActive('bold'))\"\n    >\n        <i class=\"fa-regular fa-bold\" aria-label=\"Bold\" />\n    </button>\n    <button\n        @click.prevent=\"editor.chain().focus().toggleItalic().run()\"\n        :class=\"buttonClass(editor.isActive('italic'))\"\n    >\n        <i class=\"fa-regular fa-italic\" aria-label=\"Italic\" />\n    </button>\n    <button\n        @click.prevent=\"editor.chain().focus().toggleStrike().run()\"\n        :class=\"buttonClass(editor.isActive('strike'))\"\n    >\n        <i class=\"fa-regular fa-strikethrough\" aria-label=\"Strikethrough\" />\n    </button>\n    <button\n        @click.prevent=\"editor.chain().focus().toggleUnderline().run()\"\n        :class=\"buttonClass(editor.isActive('underline'))\"\n    >\n        <i class=\"fa-regular fa-underline\" aria-label=\"Underline\" />\n    </button>\n\n    <div class=\"flex items-center gap-0.5 border-r border-base-300 pr-2 mr-1\">\n        <ColorPicker\n            :current-color=\"currentTextColor\"\n            icon=\"fa-regular fa-font\"\n            title=\"Text color\"\n            @select=\"setTextColor\"\n        />\n\n        <ColorPicker\n            :current-color=\"currentHighlightColor\"\n            icon=\"fa-regular fa-fill\"\n            title=\"Highlight color\"\n            @select=\"setHighlightColor\"\n        />\n    </div>\n\n    <div class=\"flex items-center gap-0.5 border-r border-base-300 pr-2 mr-1\">\n        <button\n            @click.prevent=\"emit('openLink')\"\n            :class=\"buttonClass(editor.isActive('link'))\"\n        >\n            <i class=\"fa-regular fa-link\" aria-label=\"Link\" />\n        </button>\n        <button\n            @click.prevent=\"editor.chain().focus().toggleBlockquote().run()\"\n            :class=\"buttonClass(editor.isActive('blockquote'))\"\n        >\n            <i class=\"fa-regular fa-quote-right\" aria-label=\"Quote\" />\n        </button>\n        <button\n            @click.prevent=\"cycleAlignment\"\n            :class=\"buttonClass(editor.isActive({ textAlign: 'center' }) || editor.isActive({ textAlign: 'right' }))\"\n            title=\"Text alignment\"\n        >\n            <i :class=\"currentAlignIcon\" aria-label=\"Text alignment\" />\n        </button>\n\n    <div class=\"relative\">\n            <button\n                @click.prevent=\"toggleListDropdown\"\n                :class=\"buttonClass(false)\"\n                class=\"flex items-center gap-0.5\"\n                @blur=\"closeListDropdown\"\n            >\n                <i :class=\"getCurrentListIcon\"></i>\n                <i class=\"fa-regular fa-chevron-down\" aria-label=\"Toggle paragraph styles\"></i>\n            </button>\n            <div\n                v-show=\"showListDropdown\"\n                class=\"absolute top-full left-0 mt-1 bg-base-100 shadow-lg rounded-lg py-1 z-50 min-w-[200px]\"\n                @mousedown.prevent\n            >\n                <button\n                    @click.prevent=\"toggleList('bullet')\"\n                    class=\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1\"\n                    :class=\"{ 'text-semibold text-base-content': editor.isActive('bulletList') }\"\n                >\n                    <div class=\"flex gap-1 items-center\">\n                        <i class=\"fa-regular fa-list-ul\" aria-hidden=\"true\"></i>\n                        List\n                    </div>\n                    <i class=\"fa-regular fa-check\" v-if=\"editor.isActive('bulletList')\"></i>\n                </button>\n                <button\n                    @click.prevent=\"toggleList('ordered')\"\n                    class=\"block w-full text-left px-3 py-2 hover:bg-base-200 text-neutral-content text-xs flex items-center justify-between gap-1\"\n                    :class=\"{ 'text-semibold text-base-content': editor.isActive('orderedList') }\"\n                >\n                    <div class=\"flex gap-1 items-center\">\n                        <i class=\"fa-regular fa-list-ol\" aria-hidden=\"true\"></i>\n                        Numbered list\n                    </div>\n                    <i class=\"fa-regular fa-check\" v-if=\"editor.isActive('orderedList')\"></i>\n                </button>\n            </div>\n        </div>\n\n    </div>\n\n    <button\n        @click.prevent=\"clearFormatting\"\n        :class=\"buttonClass(false)\"\n        title=\"Clear formatting\"\n    >\n        <i class=\"fa-regular fa-paint-roller\" aria-label=\"Clear formatting\" />\n    </button>\n</template>\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/CustomHeading.ts",
    "content": "import Heading from '@tiptap/extension-heading'\n\nexport const CustomHeading = Heading.extend({\n    addAttributes() {\n        return {\n            ...this.parent?.(),\n            style: {\n                default: null,\n                parseHTML: (element: HTMLElement) => element.getAttribute('style') || null,\n                renderHTML: (attributes: Record<string, any>) => {\n                    if (!attributes.style) {\n                        return {}\n                    }\n\n                    return { style: attributes.style }\n                },\n            },\n        }\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/CustomImage.ts",
    "content": "import { Image } from '@tiptap/extension-image'\nimport { mergeAttributes, ResizableNodeView } from '@tiptap/core'\n\ndeclare module '@tiptap/core' {\n    interface Commands<ReturnType> {\n        customImage: {\n            setImageWidth: (width: string | null) => ReturnType\n            setImageFloat: (float: 'left' | 'right' | null) => ReturnType\n        }\n    }\n}\n\nexport const CustomImage = Image.extend({\n    name: 'image',\n\n    addAttributes() {\n        return {\n            src: { default: null },\n            alt: { default: null },\n            title: { default: null },\n            'data-gallery-id': { default: null },\n            class: {\n                default: null,\n                parseHTML: (element: HTMLElement) => {\n                    const classes = element.getAttribute('class') || ''\n                    const filtered = classes\n                        .split(/\\s+/)\n                        .filter(c => !['note-float-left', 'note-float-right', 'float-left', 'float-right'].includes(c))\n                        .join(' ')\n                        .trim()\n                    return filtered || null\n                },\n            },\n            width: {\n                default: null,\n                parseHTML: (element: HTMLElement) => {\n                    const style = element.getAttribute('style') || ''\n                    const match = style.match(/width:\\s*(\\d+(?:\\.\\d+)?)px/)\n                    if (match) return parseFloat(match[1])\n\n                    const attr = element.getAttribute('width')\n                    if (attr) return parseFloat(attr)\n\n                    return null\n                },\n                renderHTML: () => ({}),\n            },\n            height: {\n                default: null,\n                parseHTML: (element: HTMLElement) => {\n                    const style = element.getAttribute('style') || ''\n                    const match = style.match(/height:\\s*(\\d+(?:\\.\\d+)?)px/)\n                    if (match) return parseFloat(match[1])\n\n                    const attr = element.getAttribute('height')\n                    if (attr) return parseFloat(attr)\n\n                    return null\n                },\n                renderHTML: () => ({}),\n            },\n            widthStyle: {\n                default: null,\n                parseHTML: (element: HTMLElement) => {\n                    const style = element.getAttribute('style') || ''\n                    const match = style.match(/width:\\s*(\\d+%)/)\n                    return match ? match[1] : null\n                },\n                renderHTML: () => ({}),\n            },\n            floatStyle: {\n                default: null,\n                parseHTML: (element: HTMLElement) => {\n                    const style = element.getAttribute('style') || ''\n                    const match = style.match(/float:\\s*(left|right)/)\n                    if (match) return match[1]\n\n                    const classes = element.getAttribute('class') || ''\n                    if (classes.includes('note-float-left') || classes.includes('float-left')) return 'left'\n                    if (classes.includes('note-float-right') || classes.includes('float-right')) return 'right'\n\n                    return null\n                },\n                renderHTML: () => ({}),\n            },\n        }\n    },\n\n    renderHTML({ node, HTMLAttributes }) {\n        const { width, height, widthStyle, floatStyle } = node.attrs\n        const styleParts: string[] = []\n\n        if (widthStyle) {\n            styleParts.push(`width: ${widthStyle}`)\n        } else if (width != null) {\n            styleParts.push(`width: ${typeof width === 'number' ? `${width}px` : width}`)\n        }\n\n        if (!widthStyle && height != null) {\n            styleParts.push(`height: ${typeof height === 'number' ? `${height}px` : height}`)\n        }\n\n        if (floatStyle) {\n            styleParts.push(`float: ${floatStyle}`)\n            if (floatStyle === 'left') styleParts.push('margin-right: 0.5rem')\n            if (floatStyle === 'right') styleParts.push('margin-left: 0.5rem')\n        }\n\n        const styleAttr = styleParts.length > 0 ? { style: styleParts.join('; ') } : {}\n\n        return ['img', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, styleAttr)]\n    },\n\n    addCommands() {\n        return {\n            ...this.parent?.(),\n            setImageWidth: (width: string | null) => ({ commands }) => {\n                return commands.updateAttributes('image', {\n                    widthStyle: width,\n                    width: null,\n                    height: null,\n                })\n            },\n            setImageFloat: (float: 'left' | 'right' | null) => ({ commands }) => {\n                return commands.updateAttributes('image', { floatStyle: float })\n            },\n        }\n    },\n\n    addNodeView() {\n        if (!this.options.resize?.enabled || typeof document === 'undefined') {\n            return null\n        }\n\n        const { directions, minWidth, minHeight, alwaysPreserveAspectRatio } = this.options.resize\n\n        return ({ node, getPos, HTMLAttributes, editor }: any) => {\n            const el = document.createElement('img')\n\n            Object.entries(HTMLAttributes).forEach(([key, value]) => {\n                if (value != null) {\n                    switch (key) {\n                        case 'width':\n                        case 'height':\n                            break\n                        default:\n                            el.setAttribute(key, value as string)\n                            break\n                    }\n                }\n            })\n\n            el.src = HTMLAttributes.src\n\n            const applyCustomStyles = (attrs: any, container: HTMLElement) => {\n                const { widthStyle, floatStyle } = attrs\n\n                if (widthStyle) {\n                    container.style.width = widthStyle\n                    el.style.width = '100%'\n                    el.style.height = 'auto'\n                } else {\n                    container.style.width = ''\n                }\n\n                container.style.float = floatStyle || ''\n                container.style.marginRight = floatStyle === 'left' ? '0.5rem' : ''\n                container.style.marginLeft = floatStyle === 'right' ? '0.5rem' : ''\n            }\n\n            const nodeView = new ResizableNodeView({\n                element: el,\n                editor,\n                node,\n                getPos,\n                onResize: (width: number, height: number) => {\n                    el.style.width = `${width}px`\n                    el.style.height = `${height}px`\n                },\n                onCommit: (width: number, height: number) => {\n                    const pos = getPos()\n                    if (pos === undefined) return\n\n                    this.editor.chain().setNodeSelection(pos).updateAttributes(this.name, {\n                        width,\n                        height,\n                        widthStyle: null,\n                    }).run()\n                },\n                onUpdate: (updatedNode: any) => {\n                    if (updatedNode.type !== node.type) return false\n\n                    applyCustomStyles(updatedNode.attrs, nodeView.dom as HTMLElement)\n                    return true\n                },\n                options: {\n                    directions,\n                    min: { width: minWidth, height: minHeight },\n                    preserveAspectRatio: alwaysPreserveAspectRatio === true,\n                },\n            })\n\n            const dom = nodeView.dom as HTMLElement\n            dom.style.visibility = 'hidden'\n            dom.style.pointerEvents = 'none'\n\n            el.onload = () => {\n                dom.style.visibility = ''\n                dom.style.pointerEvents = ''\n            }\n\n            applyCustomStyles(node.attrs, dom)\n\n            return nodeView\n        }\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/Details.ts",
    "content": "import { Node, mergeAttributes } from '@tiptap/core'\nimport { VueNodeViewRenderer } from '@tiptap/vue-3'\nimport DetailsWrapper from './DetailsWrapper.vue'\n\nexport const Details = Node.create({\n    name: 'details',\n    group: 'block',\n    content: 'detailsSummary block+',\n    defining: true,\n\n    addAttributes() {\n        return {\n            open: {\n                default: null,\n                parseHTML: element => element.hasAttribute('open'),\n                renderHTML: attributes => {\n                    if (!attributes.open) {\n                        return {}\n                    }\n                    return { open: '' }\n                },\n            },\n            class: {\n                default: null,\n                parseHTML: element => element.getAttribute('class'),\n                renderHTML: attributes => {\n                    if (!attributes.class) {\n                        return {}\n                    }\n                    return { class: attributes.class }\n                },\n            },\n            style: {\n                default: null,\n                parseHTML: element => element.getAttribute('style'),\n                renderHTML: attributes => {\n                    if (!attributes.style) {\n                        return {}\n                    }\n                    return { style: attributes.style }\n                },\n            },\n        }\n    },\n\n    parseHTML() {\n        return [{ tag: 'details' }]\n    },\n\n    renderHTML({ HTMLAttributes }) {\n        return ['details', mergeAttributes(HTMLAttributes), 0]\n    },\n\n    addNodeView() {\n        return VueNodeViewRenderer(DetailsWrapper)\n    },\n})\n\nexport const DetailsSummary = Node.create({\n    name: 'detailsSummary',\n    group: 'block',\n    content: 'inline*',\n    defining: true,\n\n    addAttributes() {\n        return {\n            class: {\n                default: null,\n                parseHTML: element => element.getAttribute('class'),\n                renderHTML: attributes => {\n                    if (!attributes.class) {\n                        return {}\n                    }\n                    return { class: attributes.class }\n                },\n            },\n            style: {\n                default: null,\n                parseHTML: element => element.getAttribute('style'),\n                renderHTML: attributes => {\n                    if (!attributes.style) {\n                        return {}\n                    }\n                    return { style: attributes.style }\n                },\n            },\n        }\n    },\n\n    parseHTML() {\n        return [{ tag: 'summary' }]\n    },\n\n    renderHTML({ HTMLAttributes }) {\n        return ['summary', mergeAttributes(HTMLAttributes), 0]\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/DetailsWrapper.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport { NodeViewWrapper, NodeViewContent } from '@tiptap/vue-3'\n\nconst props = defineProps<{\n    editor: any\n    node: any\n    getPos: () => number\n    updateAttributes: (attrs: Record<string, any>) => void\n}>()\n\nconst detailsRef = ref<InstanceType<typeof NodeViewWrapper> | null>(null)\n\nconst isOpen = computed(() => props.node.attrs.open)\n\nconst onToggle = (event: Event) => {\n    const details = event.target as HTMLDetailsElement\n    props.updateAttributes({ open: details.open })\n}\n\nonMounted(() => {\n    const el = detailsRef.value?.$el as HTMLDetailsElement\n    el?.addEventListener('toggle', onToggle)\n})\n\nonBeforeUnmount(() => {\n    const el = detailsRef.value?.$el as HTMLDetailsElement\n    el?.removeEventListener('toggle', onToggle)\n})\n</script>\n\n<template>\n    <NodeViewWrapper\n        ref=\"detailsRef\"\n        as=\"details\"\n        :open=\"isOpen || undefined\"\n        :class=\"node.attrs.class\"\n        :style=\"node.attrs.style\"\n    >\n        <NodeViewContent />\n    </NodeViewWrapper>\n</template>\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/Div.ts",
    "content": "import { Node, mergeAttributes } from '@tiptap/core'\n\nexport const Div = Node.create({\n    name: 'div',\n\n    group: 'block',\n\n    content: 'block+',\n\n    defining: true,\n\n    addAttributes() {\n        return {\n            class: {\n                default: null,\n                parseHTML: element => element.getAttribute('class'),\n            },\n            style: {\n                default: null,\n                parseHTML: element => element.getAttribute('style'),\n            },\n        }\n    },\n\n    parseHTML() {\n        return [\n            {\n                tag: 'div',\n                getAttrs: (node) => {\n                    const el = node as HTMLElement\n                    // Skip the content-wrapper div inside task items to avoid\n                    // it being parsed as a block that drifts outside the list\n                    if (el.parentElement?.getAttribute('data-type') === 'taskItem') {\n                        return false\n                    }\n                    return {}\n                },\n            },\n        ]\n    },\n\n    renderHTML({ HTMLAttributes }) {\n        return ['div', mergeAttributes(HTMLAttributes), 0]\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/Iframe.ts",
    "content": "import { Node } from '@tiptap/core'\n\nexport interface IframeOptions {\n    allowFullscreen: boolean\n    HTMLAttributes: Record<string, any>\n}\n\ndeclare module '@tiptap/core' {\n    interface Commands<ReturnType> {\n        iframe: {\n            setIframe: (options: { src: string }) => ReturnType\n        }\n    }\n}\n\nexport const Iframe = Node.create<IframeOptions>({\n    name: 'iframe',\n\n    group: 'block',\n\n    atom: true,\n\n    addOptions() {\n        return {\n            allowFullscreen: true,\n            HTMLAttributes: {\n                class: 'iframe-wrapper relative overflow-hidden max-w-full h-fit',\n            },\n        }\n    },\n\n    addAttributes() {\n        return {\n            src: {\n                default: null,\n                parseHTML: element => element.getAttribute('src'),\n            },\n            frameborder: {\n                default: 0,\n                parseHTML: element => element.getAttribute('frameborder') || 0,\n            },\n            allowfullscreen: {\n                default: this.options.allowFullscreen,\n                parseHTML: element => element.hasAttribute('allowfullscreen'),\n            },\n            width: {\n                default: '100%',\n                parseHTML: element => element.getAttribute('width') || '100%',\n            },\n            height: {\n                default: 315,\n                parseHTML: element => element.getAttribute('height') || 315,\n            },\n            allow: {\n                default: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share',\n                parseHTML: element => element.getAttribute('allow'),\n            },\n            title: {\n                default: null,\n                parseHTML: element => element.getAttribute('title'),\n            },\n            style: {\n                default: null,\n                parseHTML: element => element.getAttribute('style'),\n            },\n        }\n    },\n\n    parseHTML() {\n        return [\n            {\n                tag: 'iframe',\n            },\n        ]\n    },\n\n    renderHTML({ HTMLAttributes }) {\n        return ['div', this.options.HTMLAttributes, ['iframe', HTMLAttributes]]\n    },\n\n    addCommands() {\n        return {\n            setIframe:\n                (options: { src: string }) =>\n                ({ tr, dispatch }) => {\n                    const { selection } = tr\n                    const node = this.type.create(options)\n\n                    if (dispatch) {\n                        tr.replaceRangeWith(selection.from, selection.to, node)\n                    }\n\n                    return true\n                },\n        }\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/gallery/Gallery.ts",
    "content": "\nimport { Extension } from '@tiptap/core'\nimport axios from 'axios'\n\ndeclare global {\n    interface Window {\n        showToast: (message: string, type?: string) => void\n    }\n}\n\nexport interface GalleryOptions {\n    galleryUrl: string\n    galleryId: string\n}\n\ndeclare module '@tiptap/core' {\n    interface Commands<ReturnType> {\n        gallery: {\n            openGallery: () => ReturnType\n            uploadMedia: () => ReturnType\n        }\n    }\n}\n\nexport const Gallery = Extension.create<GalleryOptions>({\n    name: 'gallery',\n\n    addOptions() {\n        return {\n            galleryUrl: '',\n            galleryId: '',\n        }\n    },\n\n    addCommands() {\n        return {\n            openGallery: () => ({ editor }) => {\n                // Dispatch custom event to open the gallery dialog\n                const event = new CustomEvent('tiptap:open-gallery', {\n                    detail: { editor, galleryUrl: this.options.galleryUrl, galleryId: this.options.galleryId }\n                })\n                window.dispatchEvent(event)\n                return true\n            },\n            uploadMedia: () => ({ editor }) => {\n                const galleryUrl = this.options.galleryUrl\n                const input = document.createElement('input')\n                input.type = 'file'\n                input.accept = 'image/png,image/jpg,image/jpeg,image/gif,image/webp'\n\n                input.onchange = async () => {\n                    const file = input.files?.[0]\n                    if (!file) return\n\n                    const formData = new FormData()\n                    formData.append('file', file)\n\n                    try {\n                        const response = await axios.post(galleryUrl, formData)\n                        if (response.status === 200 && response.data) {\n                            editor\n                                .chain()\n                                .focus()\n                                .setImage({\n                                    src: response.data.src,\n                                    'data-uuid': response.data.uuid,\n                                })\n                                .run()\n                        }\n                    } catch (error: any) {\n                        if (error.response?.status === 204 || error.response?.data) {\n                            const errors = error.response?.data?.errors || error.response?.data || 'Upload failed'\n                            window.showToast(errors, 'error')\n                        } else {\n                            window.showToast('Upload failed', 'error')\n                        }\n                    }\n                }\n\n                input.click()\n                return true\n            },\n        }\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/gallery/GalleryDialog.vue",
    "content": "\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onBeforeUnmount } from 'vue'\nimport axios from 'axios'\n\ninterface GalleryImage {\n    src: string\n    name: string\n    folder: boolean\n    uuid: string\n    icon: string\n    url: string | null\n    thumbnail: string\n}\n\ninterface PaginationLinks {\n    first: string | null\n    last: string | null\n    prev: string | null\n    next: string | null\n}\n\nconst props = defineProps<{ galleryId: string }>()\n\nconst dialogRef = ref<HTMLDialogElement | null>(null)\nconst images = ref<GalleryImage[]>([])\nconst loading = ref(false)\nconst searchTerm = ref('')\nconst currentUrl = ref('')\nconst baseUrl = ref('')\nconst pagination = ref<PaginationLinks>({\n    first: null,\n    last: null,\n    prev: null,\n    next: null,\n})\nconst folderStack = ref<{ url: string; name: string }[]>([])\nconst editorRef = ref<any>(null)\nlet abortController: AbortController | null = null\nlet searchTimeout: ReturnType<typeof setTimeout> | null = null\n\nconst openGallery = (event: CustomEvent) => {\n    if (event.detail.galleryId !== props.galleryId) return\n\n    editorRef.value = event.detail.editor\n    baseUrl.value = event.detail.galleryUrl\n    currentUrl.value = `${event.detail.galleryUrl}?setup`\n    folderStack.value = []\n    searchTerm.value = ''\n    loadImages(currentUrl.value)\n    dialogRef.value?.showModal()\n}\n\nconst closeGallery = () => {\n    // Clean up pending requests and timeouts\n    if (searchTimeout) {\n        clearTimeout(searchTimeout)\n        searchTimeout = null\n    }\n    if (abortController) {\n        abortController.abort()\n        abortController = null\n    }\n    dialogRef.value?.close()\n}\n\nconst loadImages = async (url: string) => {\n    // Cancel any pending request\n    if (abortController) {\n        abortController.abort()\n    }\n    abortController = new AbortController()\n\n    loading.value = true\n    try {\n        const response = await axios.get(url, {\n            signal: abortController.signal\n        })\n        images.value = response.data.data || []\n        pagination.value = {\n            first: response.data.links?.first || null,\n            last: response.data.links?.last || null,\n            prev: response.data.links?.prev || null,\n            next: response.data.links?.next || null,\n        }\n    } catch (error) {\n        // Ignore aborted requests\n        if (axios.isCancel(error)) {\n            return\n        }\n        console.error('Failed to load gallery images:', error)\n        images.value = []\n    } finally {\n        loading.value = false\n    }\n}\n\nconst search = () => {\n    // Clear any pending debounced search\n    if (searchTimeout) {\n        clearTimeout(searchTimeout)\n        searchTimeout = null\n    }\n\n    folderStack.value = []\n    const url = new URL(baseUrl.value)\n    url.searchParams.set('setup', '')\n    if (searchTerm.value) {\n        url.searchParams.set('term', searchTerm.value)\n    }\n    currentUrl.value = url.toString()\n    loadImages(currentUrl.value)\n}\n\nconst debouncedSearch = () => {\n    // Clear any pending debounced search\n    if (searchTimeout) {\n        clearTimeout(searchTimeout)\n    }\n\n    searchTimeout = setTimeout(() => {\n        search()\n    }, 500)\n}\n\nconst handleSearchKeydown = (event: KeyboardEvent) => {\n    if (event.key === 'Enter') {\n        event.preventDefault()\n        search()\n    }\n}\n\nconst clearSearch = () => {\n    searchTerm.value = ''\n    search()\n}\n\n// Watch searchTerm for debounced auto-search\nwatch(searchTerm, (newValue, oldValue) => {\n    // Only trigger debounced search if user is typing (not on clear or programmatic changes)\n    if (newValue !== oldValue) {\n        debouncedSearch()\n    }\n})\n\nconst openFolder = (image: GalleryImage) => {\n    if (!image.folder || !image.url) return\n\n    folderStack.value.push({\n        url: currentUrl.value,\n        name: image.name,\n    })\n    currentUrl.value = image.url\n    loadImages(image.url)\n}\n\nconst goBack = () => {\n    if (folderStack.value.length === 0) return\n\n    const previous = folderStack.value.pop()\n    if (previous) {\n        currentUrl.value = previous.url\n        loadImages(previous.url)\n    }\n}\n\nconst goToRoot = () => {\n    folderStack.value = []\n    const url = new URL(baseUrl.value)\n    currentUrl.value = url.toString()\n    loadImages(currentUrl.value)\n}\n\nconst loadPage = (url: string | null) => {\n    if (!url) return\n    currentUrl.value = url\n    loadImages(url)\n}\n\nconst selectImage = (image: GalleryImage) => {\n    if (image.folder) {\n        openFolder(image)\n        return\n    }\n\n    // Insert image into editor with uuid\n    editorRef.value?.chain().focus().setImage({\n        src: image.src,\n        alt: image.name,\n        'data-gallery-id': image.uuid,\n    }).run()\n    closeGallery()\n}\n\nonMounted(() => {\n    window.addEventListener('tiptap:open-gallery', openGallery as EventListener)\n})\n\nonBeforeUnmount(() => {\n    window.removeEventListener('tiptap:open-gallery', openGallery as EventListener)\n    // Clean up pending requests and timeouts\n    if (searchTimeout) {\n        clearTimeout(searchTimeout)\n    }\n    if (abortController) {\n        abortController.abort()\n    }\n})\n</script>\n\n<template>\n    <dialog\n        ref=\"dialogRef\"\n        class=\"gallery-dialog rounded-2xl bg-base-100 p-0 backdrop:bg-black/50\"\n        @click.self=\"closeGallery\"\n    >\n        <div class=\"gallery-container w-[800px] max-w-[90vw] max-h-[80vh] flex flex-col\">\n            <!-- Header -->\n            <div class=\"gallery-header flex items-center justify-between p-4\">\n                <h2 class=\"\">Gallery</h2>\n                <button @click.prevent=\"closeGallery\" class=\"btn2 btn-ghost\">\n                    <i class=\"fa-regular fa-times\" aria-hidden=\"true\"></i>\n                </button>\n            </div>\n\n            <!-- Search & Navigation -->\n            <div class=\"p-4 space-y-3\">\n                <!-- Search -->\n                <div class=\"flex gap-2\">\n                    <div class=\"relative flex-1\">\n                        <input\n                            v-model=\"searchTerm\"\n                            type=\"text\"\n                            placeholder=\"Search images...\"\n                            class=\"input input-bordered w-full pr-10\"\n                            @keydown=\"handleSearchKeydown\"\n                        />\n                        <button\n                            v-if=\"searchTerm\"\n                            @click.prevent=\"clearSearch\"\n                            class=\"absolute right-3 top-1/2 -translate-y-1/2 text-base-content/50 hover:text-base-content\"\n                        >\n                            <i class=\"fa-regular fa-times\" aria-hidden=\"true\"></i>\n                        </button>\n                    </div>\n                    <button @click.prevent=\"search\" class=\"btn2 btn-primary\">\n                        <i class=\"fa-regular fa-search\" aria-hidden=\"true\"></i>\n                        Search\n                    </button>\n                </div>\n\n                <!-- Breadcrumb / Back navigation -->\n                <div v-if=\"folderStack.length > 0\" class=\"flex items-center gap-2 text-sm\">\n                    <button @click.prevent=\"goToRoot\" class=\"btn2 btn-ghost btn-xs\">\n                        <i class=\"fa-regular fa-home\" aria-hidden=\"true\"></i>\n                    </button>\n                    <span class=\"text-base-content/50\">/</span>\n                    <template v-for=\"(folder, index) in folderStack\" :key=\"index\">\n                        <span class=\"text-base-content/70\">{{ folder.name }}</span>\n                        <span class=\"text-base-content/50\">/</span>\n                    </template>\n                    <button @click.prevent=\"goBack\" class=\"btn2 btn-ghost btn-xs\">\n                        <i class=\"fa-regular fa-arrow-left\" aria-hidden=\"true\"></i>\n                        Back\n                    </button>\n                </div>\n            </div>\n\n            <!-- Gallery Grid -->\n            <div class=\"gallery-content flex-1 min-h-0 overflow-y-auto p-4\">\n                <div v-if=\"loading\" class=\"flex items-center justify-center py-12\">\n                    <i class=\"fa-solid fa-spinner fa-spin text-2xl\" aria-hidden=\"true\"></i>\n                </div>\n\n                <div v-else-if=\"images.length === 0\" class=\"flex items-center justify-center py-12 text-base-content/50\">\n                    No images found\n                </div>\n\n                <div v-else class=\"grid grid-cols-4 gap-4\">\n                    <button\n                        v-for=\"image in images\"\n                        :key=\"image.uuid\"\n                        @click.prevent=\"selectImage(image)\"\n                        class=\"gallery-item group relative aspect-square rounded-lg overflow-hidden border border-base-300 hover:border-primary transition-colors cursor-pointer bg-base-200\"\n                    >\n                        <template v-if=\"image.folder\">\n                            <div class=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n                                <i :class=\"image.icon\" class=\"text-4xl text-neutral-content\" aria-hidden=\"true\"></i>\n                                <span class=\"text-sm text-neutral-content truncate max-w-full px-2\">{{ image.name }}</span>\n                            </div>\n                        </template>\n                        <template v-else>\n                            <img\n                                :src=\"image.thumbnail\"\n                                :alt=\"image.name\"\n                                class=\"absolute inset-0 w-full h-full object-cover\"\n                                loading=\"lazy\"\n                            />\n                            <div class=\"absolute inset-x-0 bottom-0 bg-gradient-to-t from-black/70 to-transparent p-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n                                <span class=\"text-white text-xs truncate block\">{{ image.name }}</span>\n                            </div>\n                        </template>\n                    </button>\n                </div>\n            </div>\n\n            <!-- Pagination -->\n            <div v-if=\"pagination.prev || pagination.next\" class=\"gallery-footer flex items-center justify-center gap-2 p-4 border-t border-base-300\">\n                <button\n                    @click.prevent=\"loadPage(pagination.prev)\"\n                    :disabled=\"!pagination.prev\"\n                    class=\"btn2 btn-ghost btn-xs\"\n                >\n                    <i class=\"fa-regular fa-chevron-left\" aria-hidden=\"true\"></i>\n                    Previous\n                </button>\n                <button\n                    @click.prevent=\"loadPage(pagination.next)\"\n                    :disabled=\"!pagination.next\"\n                    class=\"btn2 btn-ghost btn-xs\"\n                >\n                    Next\n                    <i class=\"fa-regular fa-chevron-right\" aria-hidden=\"true\"></i>\n                </button>\n            </div>\n        </div>\n    </dialog>\n</template>\n\n<style scoped>\n.gallery-dialog::backdrop {\n    background: rgba(0, 0, 0, 0.5);\n}\n\n.gallery-dialog[open] {\n    display: flex;\n}\n\n.gallery-item:focus {\n    outline: 2px solid oklch(var(--p));\n    outline-offset: 2px;\n}\n</style>\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/images/Image.ts",
    "content": ""
  },
  {
    "path": "resources/js/editors/tiptap/extensions/images/Images.vue",
    "content": "<template>\n\n</template>\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/mentions/Mention.ts",
    "content": "\nimport { Node, mergeAttributes } from '@tiptap/core'\nimport { PluginKey } from '@tiptap/pm/state'\nimport { Suggestion } from '@tiptap/suggestion'\n\nexport interface MentionOptions {\n    HTMLAttributes: Record<string, any>\n    renderLabel: (props: { options: MentionOptions; node: any }) => string\n    suggestion: any\n}\n\nexport const MentionPluginKey = new PluginKey('mention')\n\nexport const Mention = Node.create<MentionOptions>({\n    name: 'mention',\n\n    addOptions() {\n        return {\n            HTMLAttributes: {},\n            renderLabel({ options, node }) {\n                // Use label if set, otherwise fall back to name (from data-name attribute)\n                return node.attrs.label || node.attrs.name || node.attrs.id\n            },\n            suggestion: {\n                char: '@',\n                pluginKey: MentionPluginKey,\n                command: ({ editor, range, props }) => {\n                    // increase range.to by one when the next node is of type \"text\"\n                    // and starts with a space character\n                    const nodeAfter = editor.view.state.selection.$to.nodeAfter\n                    const overrideSpace = nodeAfter?.text?.startsWith(' ')\n\n                    if (overrideSpace) {\n                        range.to += 1\n                    }\n\n                    // Use inject for posts, new, and attributes; mention for entities\n                    const textToInsert = props.section === 'entities' ? props.mention : props.inject\n\n                    editor\n                        .chain()\n                        .focus()\n                        .insertContentAt(range, [\n                            {\n                                type: 'text',\n                                text: textToInsert,\n                            },\n                            {\n                                type: 'text',\n                                text: ' ',\n                            },\n                        ])\n                        .run()\n\n                    window.getSelection()?.collapseToEnd()\n                },\n                allow: ({ state, range }) => {\n                    const $from = state.doc.resolve(range.from)\n                    const type = state.schema.nodes[this.name]\n                    const allow = !!$from.parent.type.contentMatch.matchType(type)\n\n                    return allow\n                },\n            },\n        }\n    },\n\n    group: 'inline',\n\n    inline: true,\n\n    selectable: true,\n\n    atom: true,\n\n    draggable: true,\n\n    addAttributes() {\n        return {\n            id: {\n                default: null,\n                parseHTML: element => element.getAttribute('data-id'),\n                renderHTML: attributes => {\n                    if (!attributes.id) {\n                        return {}\n                    }\n\n                    return {\n                        'data-id': attributes.id,\n                    }\n                },\n            },\n\n            label: {\n                default: null,\n                parseHTML: element => element.getAttribute('data-label'),\n                renderHTML: attributes => {\n                    return {}\n                    if (!attributes.label) {\n                        return {}\n                    }\n\n                    return {\n                        'data-label': attributes.label,\n                    }\n                },\n            },\n\n            name: {\n                default: null,\n                parseHTML: element => element.getAttribute('data-name'),\n                renderHTML: attributes => {\n                    if (!attributes.name) {\n                        return {}\n                    }\n\n                    return {\n                        'data-name': attributes.name,\n                    }\n                },\n            },\n\n            mention: {\n                default: null,\n                parseHTML: element => {\n                    const val = element.getAttribute('data-mention')\n                    if (!val) return null\n                    // Extract just \"type:id\" from \"[type:id]\" or \"[type:id|config...]\"\n                    const match = val.match(/\\[?([a-zA-Z_]+:\\d+)/)\n                    return match ? match[1] : val\n                },\n                renderHTML: attributes => {\n                    if (!attributes.mention) {\n                        return {}\n                    }\n\n                    return {\n                        'data-mention': `[${attributes.mention}]`\n                    }\n                },\n            },\n\n            image: {\n                default: null,\n                parseHTML: element => element.getAttribute('data-image'),\n                renderHTML: attributes => {\n                    return {}\n                    if (!attributes.image) {\n                        return {}\n                    }\n\n                    return {\n                        'data-image': attributes.image,\n                    }\n                },\n            },\n\n            entity: {\n                default: null,\n                parseHTML: element => element.getAttribute('data-entity'),\n                renderHTML: attributes => {\n                    return {}\n                }\n            },\n\n            url: {\n                default: null,\n                parseHTML: element => element.getAttribute('data-url'),\n                renderHTML: attributes => {\n                    return {}\n                    if (!attributes.url) {\n                        return {}\n                    }\n\n                    return {\n                        'data-url': attributes.url,\n                    }\n                },\n            },\n            config: {\n                default: null,\n                parseHTML: element => element.getAttribute('data-config'),\n                renderHTML: attributes => {\n                    if (!attributes.config) {\n                        return {\n                            'data-config': ''\n                        }\n                    }\n\n                    return {\n                        'data-config': attributes.config,\n                    }\n                },\n            },\n        }\n    },\n\n    parseHTML() {\n        return [\n            {\n                tag: `span[data-mention]`,\n            },\n        ]\n    },\n\n    renderHTML({ node, HTMLAttributes }) {\n        const label = this.options.renderLabel({\n            options: this.options,\n            node,\n        })\n\n        // Build inner content wrapper with styling\n        const innerContent: any[] = []\n\n        if (node.attrs.image) {\n            innerContent.push([\n                'img',\n                {\n                    src: node.attrs.image,\n                    class: 'inline-block w-4 h-4 rounded-full object-cover mr-1 align-middle',\n                    alt: label,\n                },\n            ])\n        }\n\n        innerContent.push(label)\n\n        // If the node has a config with an \"alias:id\" property, show an alias icon\n        if (node.attrs.config) {\n            const aliasPart = node.attrs.config.split('|').find((part: string) => part.startsWith('alias:'))\n            if (aliasPart) {\n                innerContent.push([\n                    'i',\n                    {\n                        class: 'fa-regular fa-masks-theater',\n                    }\n                ])\n            }\n        }\n\n        return [\n            'a',\n            mergeAttributes(\n                { 'data-type': 'mention' },\n                this.options.HTMLAttributes,\n                HTMLAttributes\n            ),\n            [\n                'span',\n                {\n                    class: 'rounded-xl bg-base-200 hover:bg-base-300 text-base-content px-2 py-0.5 inline-flex items-center gap-1 cursor-pointer'\n                },\n                ...innerContent\n            ]\n        ]\n    },\n\n    renderText({ node }) {\n        return node.attrs.mention || `[${node.attrs.label}]`\n    },\n\n    addKeyboardShortcuts() {\n        return {\n            Backspace: () =>\n                this.editor.commands.command(({ tr, state }) => {\n                    let isMention = false\n                    const { selection } = state\n                    const { empty, anchor } = selection\n\n                    if (!empty) {\n                        return false\n                    }\n\n                    state.doc.nodesBetween(anchor - 1, anchor, (node, pos) => {\n                        if (node.type.name === this.name) {\n                            isMention = true\n                            tr.insertText(\n                                this.options.suggestion.char || '',\n                                pos,\n                                pos + node.nodeSize\n                            )\n\n                            return false\n                        }\n                    })\n\n                    return isMention\n                }),\n        }\n    },\n\n    addProseMirrorPlugins() {\n        return [\n            Suggestion({\n                editor: this.editor,\n                ...this.options.suggestion,\n            }),\n        ]\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/mentions/MentionList.vue",
    "content": "\n<script setup lang=\"ts\">\nimport { ref, watch, computed } from 'vue'\n\ntype SectionType = 'entities' | 'posts' | 'new' | 'attributes'\n\ninterface MentionItem {\n    id?: string\n    name: string\n    image?: string\n    url?: string\n    mention?: string\n    type?: string\n    alias_name?: string\n    alias_id?: number\n    inject?: string\n    value?: string\n    section: SectionType\n}\n\ninterface Section {\n    key: SectionType\n    label: string\n    icon: string\n    items: MentionItem[]\n}\n\nconst props = defineProps<{\n    items: MentionItem[]\n    command: (item: MentionItem) => void\n    loading: boolean\n    query: string\n}>()\n\nconst selectedIndex = ref(0)\n\nwatch(() => props.items, () => {\n    selectedIndex.value = 0\n})\n\nconst sectionConfig: Record<SectionType, { label: string; icon: string }> = {\n    entities: { label: 'Entries', icon: 'fa-regular fa-bookmark' },\n    posts: { label: 'Articles', icon: 'fa-regular fa-newspaper' },\n    attributes: { label: 'Properties', icon: 'fa-regular fa-heart' },\n    new: { label: 'Create New', icon: 'fa-regular fa-plus' },\n}\n\nconst sections = computed<Section[]>(() => {\n    const sectionOrder: SectionType[] = ['entities', 'posts', 'attributes', 'new']\n\n    return sectionOrder\n        .map(key => ({\n            key,\n            label: sectionConfig[key].label,\n            icon: sectionConfig[key].icon,\n            items: props.items.filter(item => item.section === key),\n        }))\n        .filter(section => section.items.length > 0)\n})\n\nconst showMinCharacterMessage = computed(() => {\n    return props.query.length < 3\n})\n\nconst showLoading = computed(() => {\n    return !showMinCharacterMessage.value && props.loading\n})\n\nconst showNoResults = computed(() => {\n    return !showMinCharacterMessage.value && !props.loading && props.items.length === 0\n})\n\nconst onKeyDown = ({ event }: { event: KeyboardEvent }): boolean => {\n    if (event.key === 'ArrowUp') {\n        upHandler()\n        return true\n    }\n\n    if (event.key === 'ArrowDown') {\n        downHandler()\n        return true\n    }\n\n    if (event.key === 'Enter') {\n        enterHandler()\n        return true\n    }\n\n    return false\n}\n\nconst upHandler = () => {\n    selectedIndex.value = ((selectedIndex.value + props.items.length) - 1) % props.items.length\n}\n\nconst downHandler = () => {\n    selectedIndex.value = (selectedIndex.value + 1) % props.items.length\n}\n\nconst enterHandler = () => {\n    selectItem(selectedIndex.value)\n}\n\nconst selectItem = (index: number) => {\n    const item = props.items[index]\n\n    if (item) {\n        props.command(item)\n    }\n}\n\n// Get the flat index for an item within a section\nconst getFlatIndex = (sectionKey: SectionType, itemIndex: number): number => {\n    let flatIndex = 0\n    for (const section of sections.value) {\n        if (section.key === sectionKey) {\n            return flatIndex + itemIndex\n        }\n        flatIndex += section.items.length\n    }\n    return flatIndex\n}\n\ndefineExpose({\n    onKeyDown,\n})\n</script>\n\n<template>\n    <div class=\"mention-list bg-base-100 shadow-lg rounded-lg z-50 max-h-[300px] overflow-y-auto\">\n        <template v-if=\"items.length\">\n            <div v-for=\"section in sections\" :key=\"section.key\" class=\"mention-section\">\n                <!-- Section header -->\n                <div class=\"section-header px-3 py-1 text-xs font-semibold text-neutral-content/70 bg-base-200/50 flex items-center gap-2\">\n                    <i :class=\"section.icon\" aria-hidden=\"true\"></i>\n                    {{ section.label }}\n                </div>\n\n                <!-- Section items -->\n                <button\n                    v-for=\"(item, itemIndex) in section.items\"\n                    :key=\"item.id ?? `${section.key}-${itemIndex}`\"\n                    @click=\"selectItem(getFlatIndex(section.key, itemIndex))\"\n                    class=\"mention-item flex items-center gap-2 w-full text-left px-3 py-2 hover:bg-base-200 text-xs justify-between cursor-pointer\"\n                    :class=\"{ 'bg-base-200': getFlatIndex(section.key, itemIndex) === selectedIndex }\"\n                >\n                    <div class=\"flex gap-2 items-center\">\n                        <template v-if=\"section.key === 'new'\">\n                            <i class=\"fa-regular fa-plus text-success\" aria-hidden=\"true\"></i>\n                        </template>\n                        <img\n                            v-else-if=\"item.image\"\n                            :src=\"item.image\"\n                            :alt=\"item.name\"\n                            loading=\"lazy\"\n                            class=\"w-6 h-6 rounded-full object-cover\"\n                        />\n                        <span class=\"mention-name flex gap-1\">\n                            <span v-html=\"item.name\"></span>\n                            <template v-if=\"item.alias_name\">\n                                <i class=\"fa-regular fa-masks-theater\" aria-hidden=\"true\"></i>\n                                ({{ item.alias_name }})\n                            </template>\n                        </span>\n                    </div>\n                    <span v-if=\"item.type\" class=\"mention-type text-neutral-content\" v-html=\"item.type\"></span>\n                    <span v-if=\"item.value\" class=\"text-neutral-content\" v-html=\"item.value\"></span>\n                </button>\n            </div>\n        </template>\n        <div v-else class=\"px-3 py-2 text-neutral-content text-xs\">\n            <span v-if=\"showMinCharacterMessage\">\n                Type at least 3 characters\n            </span>\n            <span v-else-if=\"showLoading\">\n                <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n                Loading...\n            </span>\n            <span v-else-if=\"showNoResults\">\n                No results\n            </span>\n        </div>\n    </div>\n</template>\n\n<style scoped>\n.mention-list {\n    min-width: 200px;\n}\n\n.mention-item {\n    transition: background-color 0.1s;\n}\n</style>\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/mentions/MentionParser.ts",
    "content": "\nimport { Plugin, PluginKey } from '@tiptap/pm/state'\nimport { Extension } from '@tiptap/core'\nimport type { Ref } from 'vue'\n\n/**\n * Parse mentions from text in the format [moduleName:id] or [moduleName:id|page:inventory|alias:456]\n * and convert them to mention nodes\n */\nexport const MentionParserPluginKey = new PluginKey('mentionParser')\n\nexport interface MentionParserOptions {\n    entities?: Array<{ id: number; name: string; type: string; image?: string, url?: string, aliases?: any[] }> | Ref<Array<{ id: number; name: string; type: string; image?: string, url?: string, aliases?: any[] }>>\n}\n\nexport const MentionParser = Extension.create<MentionParserOptions>({\n    name: 'mentionParser',\n\n    addOptions() {\n        return {\n            entities: [],\n        }\n    },\n\n    addProseMirrorPlugins() {\n        return [\n            new Plugin({\n                key: MentionParserPluginKey,\n\n                appendTransaction: (transactions, oldState, newState) => {\n                    // Check if document has changed\n                    const docChanged = transactions.some(transaction => transaction.docChanged)\n                    if (!docChanged) {\n                        return null\n                    }\n\n                    // Support both plain arrays and Vue refs\n                    const entities = 'value' in this.options.entities\n                        ? this.options.entities.value\n                        : this.options.entities || []\n\n                    const tr = newState.tr\n                    let modified = false\n\n                    // Regular expression to match mentions like [moduleName:id] or [moduleName:id|page:inventory|alias:456]\n                    const mentionRegex = /\\[([a-zA-Z_]+):(\\d+)(?:\\|[^\\]]+)?\\]/g\n\n                    newState.doc.descendants((node, pos) => {\n                        if (node.isText && node.text) {\n                            const text = node.text\n                            let match: RegExpExecArray | null\n                            const matches: Array<{ start: number; end: number; mention: string; module: string; id: string; customLabel?: string; config?: string }> = []\n\n                            // Collect all matches first to avoid position issues\n                            while ((match = mentionRegex.exec(text)) !== null) {\n                                const fullMention = match[0]\n                                const module = match[1]\n                                const id = match[2]\n\n                                if (module === 'post') {\n                                    continue\n                                }\n\n                                const baseMention = `${module}:${id}`\n\n                                // Parse the parts after the pipe separator\n                                // Format: [type:id|CustomName|page:abilities|anchor:#post-1]\n                                let customLabel: string | undefined\n                                let config: string | undefined\n\n                                // Extract everything after the first pipe if it exists\n                                const pipeIndex = fullMention.indexOf('|')\n                                if (pipeIndex !== -1) {\n                                    // Get all parts after type:id\n                                    const parts = fullMention.substring(pipeIndex + 1, fullMention.length - 1).split('|')\n\n                                    const configParts: string[] = []\n\n                                    for (const part of parts) {\n                                        // Check if this part is a config (contains a colon)\n                                        if (part.includes(':')) {\n                                            configParts.push(part)\n                                        } else if (!customLabel) {\n                                            // First non-config part is the custom label\n                                            customLabel = part\n                                        }\n                                    }\n\n                                    if (configParts.length > 0) {\n                                        config = configParts.join('|')\n                                    }\n                                }\n\n                                matches.push({\n                                    start: pos + match.index,\n                                    end: pos + match.index + match[0].length,\n                                    mention: baseMention,\n                                    module: module,\n                                    id: id,\n                                    customLabel: customLabel,\n                                    config: config\n                                })\n                            }\n\n                            // Process matches in reverse order to maintain correct positions\n                            for (let i = matches.length - 1; i >= 0; i--) {\n                                const { start, end, mention, module, id, customLabel, config } = matches[i]\n\n                                // Map positions through the transaction to account for previous changes\n                                const mappedStart = tr.mapping.map(start)\n                                const mappedEnd = tr.mapping.map(end)\n\n                                // Check if this position isn't already a mention node\n                                const $pos = tr.doc.resolve(mappedStart)\n                                const nodeAtPos = tr.doc.nodeAt(mappedStart)\n\n                                if (nodeAtPos?.type.name !== 'mention') {\n                                    // Check if mention node type exists\n                                    const mentionType = newState.schema.nodes.mention\n                                    if (mentionType) {\n                                        // Find entity by id to get the name and image\n                                        const entity = entities.find(e => e.id === parseInt(id))\n                                        const defaultLabel = entity ? entity.name : `${module}:${id}`\n                                        const label = customLabel || ''\n                                        const image = entity?.image || null\n                                        const url = entity?.url || null\n\n                                        // If config contains alias:X, use alias name as the display name\n                                        let nameToUse = entity ? entity.name : `${module}:${id}`\n                                        if (config && entity?.aliases) {\n                                            const aliasMatch = config.match(/alias:(\\d+)/)\n                                            if (aliasMatch) {\n                                                const alias = entity.aliases.find(a => a.id === parseInt(aliasMatch[1]))\n                                                if (alias) {\n                                                    nameToUse = alias.name\n                                                }\n                                            }\n                                        }\n\n                                        // Replace text with mention node\n                                        const mentionNode = mentionType.create({\n                                            id: id,\n                                            name: nameToUse,\n                                            label: label,\n                                            mention: mention,\n                                            image: image,\n                                            url: url,\n                                            config: config || null,\n                                            entity: entity\n                                        })\n\n                                        tr.replaceWith(mappedStart, mappedEnd, mentionNode)\n                                        modified = true\n                                    }\n                                }\n                            }\n                        }\n                    })\n\n                    return modified ? tr : null\n                },\n            }),\n        ]\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/mentions/suggestion.ts",
    "content": "\nimport { computePosition, flip, shift } from '@floating-ui/dom'\nimport { posToDOMRect, VueRenderer } from '@tiptap/vue-3'\nimport MentionList from './MentionList.vue'\n\ninterface MentionItem {\n    id?: string\n    name: string\n    image?: string\n    url?: string\n    mention?: string\n    type?: string\n    aliases?: any\n    alias_name?: string\n    alias_id?: number\n    inject?: string\n    value?: string\n    section: 'entities' | 'posts' | 'new' | 'attributes'\n}\n\nconst updatePosition = (editor, element) => {\n    const virtualElement = {\n        getBoundingClientRect: () => posToDOMRect(editor.view, editor.state.selection.from, editor.state.selection.to),\n    }\n\n    computePosition(virtualElement, element, {\n        placement: 'bottom-start',\n        strategy: 'absolute',\n        middleware: [shift(), flip()],\n    }).then(({ x, y, strategy }) => {\n        element.style.width = 'max-content'\n        element.style.position = strategy\n        element.style.left = `${x}px`\n        element.style.top = `${y}px`\n    })\n}\n\nexport default (mentionsUrl: string, onEntityAdded?: (entity: any) => void) => {\n    let abortController: AbortController | null = null\n\n    return {\n        char: '@',\n\n        items: async ({ query }: { query: string }): Promise<MentionItem[]> => {\n            // Only query if we have at least 3 characters\n            if (query.length < 3) {\n                return []\n            }\n\n            // Cancel previous request if it exists\n            if (abortController) {\n                abortController.abort()\n            }\n\n            abortController = new AbortController()\n\n            try {\n                const url = new URL(mentionsUrl)\n                url.searchParams.set('q', query)\n\n                const response = await fetch(url.toString(), {\n                    signal: abortController.signal,\n                })\n\n                if (!response.ok) {\n                    return []\n                }\n\n                const data = await response.json()\n                const items: MentionItem[] = []\n\n                // Map entities\n                if (data.entities?.length) {\n                    data.entities.forEach((item: any) => {\n                        items.push({\n                            id: item.id,\n                            name: item.name,\n                            image: item.image,\n                            url: item.url,\n                            aliases: item.aliases,\n                            alias_name: item.alias_name,\n                            alias_id: item.alias_id,\n                            mention: item.mention,\n                            type: item.type,\n                            section: 'entities',\n                        })\n                    })\n                }\n\n                // Map posts\n                if (data.posts?.length) {\n                    data.posts.forEach((item: any) => {\n                        items.push({\n                            id: item.id,\n                            name: item.name,\n                            inject: item.inject,\n                            section: 'posts',\n                        })\n                    })\n                }\n\n                // Map attributes\n                if (data.attributes?.length) {\n                    data.attributes.forEach((item: any) => {\n                        items.push({\n                            id: item.id,\n                            name: item.name,\n                            value: item.value,\n                            inject: item.inject,\n                            section: 'attributes',\n                        })\n                    })\n                }\n\n                // Map new entity suggestions\n                if (data.new?.length) {\n                    data.new.forEach((item: any) => {\n                        items.push({\n                            name: item.name,\n                            type: item.type,\n                            inject: item.inject,\n                            section: 'new',\n                        })\n                    })\n                }\n\n                return items\n            } catch (error: any) {\n                // Ignore abort errors\n                if (error.name === 'AbortError') {\n                    return []\n                }\n                console.error('Error fetching mentions:', error)\n                return []\n            }\n        },\n\n        render: () => {\n            let component\n\n            return {\n                onStart: (props: any) => {\n                    component = new VueRenderer(MentionList, {\n                        props: {\n                            items: props.items,\n                            command: (item: MentionItem) => {\n                                // Add entity to the mentions array if callback provided\n                                // Only for actual entities (not posts, new, or attributes)\n                                if (onEntityAdded && item.section === 'entities') {\n                                    onEntityAdded({\n                                        id: parseInt(item.id),\n                                        name: item.name,\n                                        type: item.type,\n                                        image: item.image,\n                                        url: item.url,\n                                        aliases: item.aliases,\n                                    })\n                                }\n\n                                // Execute the original command\n                                props.command(item)\n                            },\n                            loading: props.query && props.query.length >= 3,\n                            query: props.query || '',\n                        },\n                        editor: props.editor,\n                    })\n\n                    if (!props.clientRect) {\n                        return\n                    }\n\n                    component.element.style.position = 'absolute'\n\n                    document.body.appendChild(component.element)\n\n                    updatePosition(props.editor, component.element)\n                },\n\n                onUpdate(props: any) {\n                    // Determine loading state: loading if query is >= 3 chars and items haven't loaded yet\n                    const isLoading = props.query && props.query.length >= 3 && props.items.length === 0\n\n                    // Update the command wrapper with the new command\n                    const wrappedCommand = (item: MentionItem) => {\n                        // Only add to mentions for actual entities\n                        if (onEntityAdded && item.section === 'entities') {\n                            onEntityAdded({\n                                id: parseInt(item.id),\n                                name: item.name,\n                                type: item.type,\n                                image: item.image,\n                                url: item.url,\n                                aliases: item.aliases,\n                            })\n                        }\n                        props.command(item)\n                    }\n\n                    component.updateProps({\n                        items: props.items,\n                        command: wrappedCommand,\n                        loading: isLoading,\n                        query: props.query || '',\n                    })\n\n                    if (!props.clientRect) {\n                        return\n                    }\n\n                    updatePosition(props.editor, component.element)\n                },\n\n                onKeyDown(props: any) {\n                    if (props.event.key === 'Escape') {\n                        component.destroy()\n\n                        return true\n                    }\n\n                    return component.ref?.onKeyDown(props)\n                },\n\n                onExit() {\n                    component.destroy()\n                },\n            }\n        },\n    }\n}\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/slashcommand/SlashCommand.ts",
    "content": "\nimport { Extension } from '@tiptap/core'\nimport { PluginKey } from '@tiptap/pm/state'\nimport { Suggestion } from '@tiptap/suggestion'\n\nexport interface SlashCommandOptions {\n    suggestion: any\n}\n\nexport const SlashCommandPluginKey = new PluginKey('slashCommand')\n\nexport const SlashCommand = Extension.create<SlashCommandOptions>({\n    name: 'slashCommand',\n\n    addOptions() {\n        return {\n            suggestion: {\n                char: '/',\n                pluginKey: SlashCommandPluginKey,\n                command: ({ editor, range, props }) => {\n                    // Delete the slash command text\n                    editor.chain().focus().deleteRange(range).run()\n\n                    // Execute the command\n                    props.command(editor)\n                },\n            },\n        }\n    },\n\n    addProseMirrorPlugins() {\n        return [\n            Suggestion({\n                editor: this.editor,\n                ...this.options.suggestion,\n            }),\n        ]\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/slashcommand/SlashCommandList.vue",
    "content": "\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\n\ninterface SlashCommandItem {\n    title: string\n    description: string\n    icon: string\n    command: (editor: any) => void\n}\n\nconst props = defineProps<{\n    items: SlashCommandItem[]\n    command: (item: SlashCommandItem) => void\n}>()\n\nconst selectedIndex = ref(0)\n\nwatch(() => props.items, () => {\n    selectedIndex.value = 0\n})\n\nconst onKeyDown = ({ event }: { event: KeyboardEvent }): boolean => {\n    if (event.key === 'ArrowUp') {\n        upHandler()\n        return true\n    }\n\n    if (event.key === 'ArrowDown') {\n        downHandler()\n        return true\n    }\n\n    if (event.key === 'Enter') {\n        enterHandler()\n        return true\n    }\n\n    return false\n}\n\nconst upHandler = () => {\n    selectedIndex.value = ((selectedIndex.value + props.items.length) - 1) % props.items.length\n}\n\nconst downHandler = () => {\n    selectedIndex.value = (selectedIndex.value + 1) % props.items.length\n}\n\nconst enterHandler = () => {\n    selectItem(selectedIndex.value)\n}\n\nconst selectItem = (index: number) => {\n    const item = props.items[index]\n\n    if (item) {\n        props.command(item)\n    }\n}\n\ndefineExpose({\n    onKeyDown,\n})\n</script>\n\n<template>\n    <div class=\"slash-command-list bg-base-100 shadow-lg rounded-lg z-50 max-h-[300px] overflow-y-auto min-w-[200px]\">\n        <template v-if=\"items.length\">\n            <button\n                v-for=\"(item, index) in items\"\n                :key=\"item.title\"\n                @click=\"selectItem(index)\"\n                class=\"slash-command-item flex items-center gap-2 w-full text-left px-3 py-2 hover:bg-base-300 text-sm cursor-pointer\"\n                :class=\"{ 'bg-base-300': index === selectedIndex }\"\n            >\n                <div class=\"w-6 h-6 rounded bg-base-200 flex items-center justify-center\">\n                    <i :class=\"item.icon\" class=\"text-xs\" aria-hidden=\"true\"></i>\n                </div>\n                <div class=\"flex flex-col\">\n                    <span class=\"font-medium text-sm\">{{ item.title }}</span>\n                    <span class=\"text-xs text-neutral-content\">{{ item.description }}</span>\n                </div>\n            </button>\n        </template>\n        <div v-else class=\"px-3 py-2 text-neutral-content text-sm\">\n            No commands found\n        </div>\n    </div>\n</template>\n\n<style scoped>\n.slash-command-item {\n    transition: background-color 0.1s;\n}\n</style>\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/slashcommand/suggestion.ts",
    "content": "\nimport { computePosition, flip, shift } from '@floating-ui/dom'\nimport { posToDOMRect, VueRenderer } from '@tiptap/vue-3'\nimport SlashCommandList from './SlashCommandList.vue'\nimport type { Editor } from '@tiptap/core'\n\nexport interface SlashCommandItem {\n    title: string\n    description: string\n    icon: string\n    searchTerms?: string[]\n    command: (editor: Editor) => void\n}\n\nconst updatePosition = (editor: Editor, element: HTMLElement) => {\n    const virtualElement = {\n        getBoundingClientRect: () => posToDOMRect(editor.view, editor.state.selection.from, editor.state.selection.to),\n    }\n\n    computePosition(virtualElement, element, {\n        placement: 'bottom-start',\n        strategy: 'absolute',\n        middleware: [shift(), flip()],\n    }).then(({ x, y, strategy }) => {\n        element.style.width = 'max-content'\n        element.style.position = strategy\n        element.style.left = `${x}px`\n        element.style.top = `${y}px`\n    })\n}\n\nconst tableHTML = `\n  <table class=\"table table-striped table-bordered\" style=\"width: 200px;\">\n    <thead>\n        <tr>\n            <th><p></p></th>\n            <th><p></p></th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n          <td><p></p></td>\n          <td><p></p></td>\n        </tr>\n        <tr>\n          <td><p></p></td>\n          <td><p></p></td>\n        </tr>\n    </tbody>\n  </table>`\n\nconst commands: SlashCommandItem[] = [\n    {\n        title: 'Source',\n        description: 'Edit raw HTML source',\n        icon: 'fa-regular fa-code',\n        command: (editor: Editor) => {\n            window.dispatchEvent(new CustomEvent('tiptap:source-mode'))\n        },\n    },\n    {\n        title: 'Gallery',\n        description: 'Insert an image from gallery',\n        icon: 'fa-regular fa-images',\n        searchTerms: ['image', 'photo', 'picture', 'media'],\n        command: (editor: Editor) => {\n            editor.commands.openGallery()\n        },\n    },\n    {\n        title: 'Insert Media',\n        description: 'Upload an image from your device',\n        icon: 'fa-regular fa-upload',\n        searchTerms: ['image', 'photo', 'picture', 'media', 'upload', 'file'],\n        command: (editor: Editor) => {\n            editor.commands.uploadMedia()\n        },\n    },\n    {\n        title: 'Table',\n        description: 'Insert a table',\n        icon: 'fa-regular fa-table',\n        command: (editor: Editor) => {\n            editor\n                .chain()\n                .focus()\n                .insertContent(tableHTML, { parseOptions: { preserveWhitespace: true } })\n                .run()\n        },\n    },\n    {\n        title: 'Heading 1',\n        description: 'Huge heading',\n        icon: 'fa-regular fa-heading',\n        command: (editor: Editor) => {\n            editor.chain().focus().toggleHeading({ level: 1 }).run()\n        },\n    },\n    {\n        title: 'Heading 2',\n        description: 'Large heading',\n        icon: 'fa-regular fa-heading',\n        command: (editor: Editor) => {\n            editor.chain().focus().toggleHeading({ level: 2 }).run()\n        },\n    },\n    {\n        title: 'Heading 3',\n        description: 'Medium heading',\n        icon: 'fa-regular fa-heading',\n        command: (editor: Editor) => {\n            editor.chain().focus().toggleHeading({ level: 3 }).run()\n        },\n    },\n    {\n        title: 'Bullet List',\n        description: 'Create a bullet list',\n        icon: 'fa-regular fa-list-ul',\n        command: (editor: Editor) => {\n            editor.chain().focus().toggleBulletList().run()\n        },\n    },\n    {\n        title: 'Numbered List',\n        description: 'Create a numbered list',\n        icon: 'fa-regular fa-list-ol',\n        command: (editor: Editor) => {\n            editor.chain().focus().toggleOrderedList().run()\n        },\n    },\n    {\n        title: 'Task List',\n        description: 'Create a checklist',\n        icon: 'fa-regular fa-square-check',\n        searchTerms: ['checkbox', 'checklist', 'todo', 'task'],\n        command: (editor: Editor) => {\n            editor.chain().focus().toggleTaskList().run()\n        },\n    },\n    {\n        title: 'Quote',\n        description: 'Insert a quote block',\n        icon: 'fa-regular fa-quote-right',\n        command: (editor: Editor) => {\n            editor.chain().focus().toggleBlockquote().run()\n        },\n    },\n    {\n        title: 'Code Block',\n        description: 'Insert a code block',\n        icon: 'fa-regular fa-code',\n        command: (editor: Editor) => {\n            editor.chain().focus().toggleCodeBlock().run()\n        },\n    },\n    {\n        title: 'Horizontal Rule',\n        description: 'Insert a divider',\n        icon: 'fa-regular fa-minus',\n        command: (editor: Editor) => {\n            editor.chain().focus().setHorizontalRule().run()\n        },\n    },\n]\n\nexport default () => {\n    return {\n        items: ({ query }: { query: string }): SlashCommandItem[] => {\n            const q = query.toLowerCase()\n            return commands.filter(item =>\n                item.title.toLowerCase().includes(q)\n                || item.searchTerms?.some(term => term.includes(q))\n            )\n        },\n\n        render: () => {\n            let component: VueRenderer\n\n            return {\n                onStart: (props: any) => {\n                    component = new VueRenderer(SlashCommandList, {\n                        props: {\n                            items: props.items,\n                            command: props.command,\n                        },\n                        editor: props.editor,\n                    })\n\n                    if (!props.clientRect) {\n                        return\n                    }\n\n                    component.element.style.position = 'absolute'\n                    document.body.appendChild(component.element)\n                    updatePosition(props.editor, component.element)\n                },\n\n                onUpdate(props: any) {\n                    component.updateProps({\n                        items: props.items,\n                        command: props.command,\n                    })\n\n                    if (!props.clientRect) {\n                        return\n                    }\n\n                    updatePosition(props.editor, component.element)\n                },\n\n                onKeyDown(props: any) {\n                    if (props.event.key === 'Escape') {\n                        component.destroy()\n                        return true\n                    }\n\n                    return component.ref?.onKeyDown(props)\n                },\n\n                onExit() {\n                    component.destroy()\n                },\n            }\n        },\n    }\n}\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/table/CustomTableCell.ts",
    "content": "import { TableCell } from '@tiptap/extension-table-cell'\n\nexport const CustomTableCell = TableCell.extend({\n    addAttributes() {\n        return {\n            ...this.parent?.(),\n            colwidth: {\n                default: null,\n                parseHTML: (element: HTMLElement) => {\n                    // First try the colwidth attribute (editor's native format)\n                    const colwidth = element.getAttribute('colwidth')\n                    if (colwidth) {\n                        return colwidth.split(',').map((w: string) => parseInt(w, 10))\n                    }\n                    // Fall back to inline width style\n                    const width = element.style.width\n                    if (width && width.endsWith('px')) {\n                        return [parseInt(width, 10)]\n                    }\n                    return null\n                },\n                renderHTML: (attributes: Record<string, any>) => {\n                    if (!attributes.colwidth) {\n                        return {}\n                    }\n                    return {\n                        colwidth: attributes.colwidth.join(','),\n                        style: `width: ${attributes.colwidth[0]}px`,\n                    }\n                },\n            },\n        }\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/table/CustomTableHeader.ts",
    "content": "import { TableHeader } from '@tiptap/extension-table-header'\n\nexport const CustomTableHeader = TableHeader.extend({\n    addAttributes() {\n        return {\n            ...this.parent?.(),\n            colwidth: {\n                default: null,\n                parseHTML: (element: HTMLElement) => {\n                    const colwidth = element.getAttribute('colwidth')\n                    if (colwidth) {\n                        return colwidth.split(',').map((w: string) => parseInt(w, 10))\n                    }\n                    const width = element.style.width\n                    if (width && width.endsWith('px')) {\n                        return [parseInt(width, 10)]\n                    }\n                    return null\n                },\n                renderHTML: (attributes: Record<string, any>) => {\n                    if (!attributes.colwidth) {\n                        return {}\n                    }\n                    return {\n                        colwidth: attributes.colwidth.join(','),\n                        style: `width: ${attributes.colwidth[0]}px`,\n                    }\n                },\n            },\n        }\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/extensions/table/TableWithControls.ts",
    "content": "\nimport { Table } from '@tiptap/extension-table'\nimport { mergeAttributes } from '@tiptap/core'\n\nexport const TableWithControls = Table.extend({\n    addAttributes() {\n        return {\n            ...this.parent?.(),\n            class: {\n                default: null,\n                parseHTML: element => element.getAttribute('class'),\n                renderHTML: attributes => {\n                    if (!attributes.class) {\n                        return {}\n                    }\n                    return { class: attributes.class }\n                },\n            },\n        }\n    },\n\n    renderHTML({ HTMLAttributes }) {\n        return [\n            'table',\n            mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n            ['tbody', 0],\n        ]\n    },\n})\n"
  },
  {
    "path": "resources/js/editors/tiptap/index.js",
    "content": "import { createApp, h, defineAsyncComponent } from 'vue'\n\nconst TiptapComponent = defineAsyncComponent(() => import(\"./Tiptap.vue\"))\n\nconst loadWidget = () => {\n\n    const elements = document.querySelectorAll('.tiptap-editor')\n    elements.forEach(el => {\n        // Don't re-mount if already mounted\n        if (el.dataset.init === '1') {\n            return\n        }\n        el.dataset.init = '1'\n\n        // Get content and field name from data attributes\n        const content = el.dataset.content || ''\n        const fieldName = el.dataset.fieldName || 'entry'\n\n        // Get props from the tiptap element\n        const tiptapEl = el.querySelector('tiptap')\n        const props = {\n            content,\n            fieldName,\n            mentions: tiptapEl?.getAttribute('mentions') || undefined,\n            gallery: tiptapEl?.getAttribute('gallery') || undefined,\n            galleryUpload: tiptapEl?.getAttribute('galleryUpload') || undefined,\n        }\n\n        // Remove the placeholder tiptap element\n        if (tiptapEl) {\n            tiptapEl.remove()\n        }\n\n        const app = createApp({\n            render() {\n                return h(TiptapComponent, props)\n            }\n        })\n        app.mount(el)\n    })\n};\n\nloadWidget();\n\nwindow.onEvent(function() {\n    loadWidget();\n});\n"
  },
  {
    "path": "resources/js/editors/tiptap/toolbar/Button.vue",
    "content": "<template>\n    <button\n        @click.prevent\n"
  },
  {
    "path": "resources/js/editors/tiptap/utils.ts",
    "content": "export const buttonClass = (active: boolean): string => {\n    const base = 'px-2 py-1 rounded-lg hover:bg-base-200 block hover:text-base-content '\n    const state = active ? 'bg-base-300 border-primary text-base-content' : 'text-neutral-content '\n    return base + ' ' + state\n}\n"
  },
  {
    "path": "resources/js/entities/EntityAdSlot.vue",
    "content": "<template>\n    <div\n        :id=\"adId\"\n        class=\"w-[47%] xs:w-[25%] sm:w-48 aspect-square flex items-center justify-center overflow-hidden\"\n    ></div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, computed } from 'vue'\n\nconst props = defineProps<{\n    idx: number\n}>()\n\nconst adId = computed(() => `nitro-grid-${props.idx}`)\n\nconst isDemo = new URLSearchParams(window.location.search).has('nitro_demo')\n\nonMounted(() => {\n    if (!(window as any)['nitroAds']) {\n        return\n    }\n    ;(window as any)['nitroAds'].createAd(adId.value, {\n        sizes: [['180', '150']],\n        report: {\n            enabled: true,\n            icon: true,\n            wording: 'Report Ad',\n            position: 'bottom-right',\n        },\n        demo: isDemo,\n    })\n})\n</script>\n"
  },
  {
    "path": "resources/js/entities/EntityCard.vue",
    "content": "<template>\n    <div v-if=\"stacked\" class=\"stack inline-grid items-center align-items-end w-[47%] xs:w-[25%] sm:w-48\"\n         @pointerdown=\"lpStart\" @pointerup=\"lpCancel\" @pointermove=\"lpMove\" @pointercancel=\"lpCancel\"\n         @contextmenu=\"handleContextMenu\">\n        <div class=\"entity overflow-hidden rounded shadow-xs hover:shadow-md aspect-square w-full flex flex-col bg-box\" v-bind=\"dataAttributes\">\n            <a :href=\"entity.urls.show\" :title=\"entity.name\"\n               class=\"block avatar grow relative cover-background overflow-hidden text-center text-link\"\n               :style=\"entityImage\" @click.prevent=\"handleImageClick\">\n                <div v-if=\"entity.is_private && !selecting\"\n                     class=\"bubble-private absolute left-1.5 top-1.5 text-xs shadow-xs flex justify-center items-center aspect-square rounded-full w-6 h-6 bg-box opacity-80 text-base-content\"\n                     :title=\"i18n.is_private\">\n                    <i class=\"fa-regular fa-lock\" :aria-label=\"i18n.is_private\" />\n                </div>\n                <div v-else-if=\"selecting\" :class=\"selectorClass\">\n                    <i v-if=\"entity.selected\" class=\"fa-regular fa-check\" aria-label=\"selected\" />\n                </div>\n                <!-- Avatar bubbles for children -->\n                <div v-if=\"nested && entity.children_preview?.length\" class=\"absolute bottom-2 right-2 flex flex-row-reverse\">\n                    <div v-if=\"entity.children > 3\"\n                         class=\"w-7 h-7 rounded-full bg-primary border-1 border-box flex items-center justify-center text-primary-content font-bold ml-[-8px] z-0\">\n                        +{{ entity.children - 3 }}\n                    </div>\n                    <div v-for=\"(child, idx) in entity.children_preview.slice(0, 3)\" :key=\"child.id\"\n                         class=\"w-7 h-7 rounded-full border-1 border-box flex items-center justify-center ml-[-8px] cover-background\"\n                         :style=\"childStyle(child, idx)\"\n                         :class=\"child.image ? '' : 'bg-base-200 text-base-content'\"\n                         :title=\"child.name\">\n                        <span v-if=\"!child.image\">{{ initials(child.name) }}</span>\n                    </div>\n                </div>\n            </a>\n            <a :href=\"entity.urls.show\" class=\"block text-center relative truncate h-12 p-4 text-link\"\n               data-toggle=\"tooltip-ajax\" :data-id=\"entity.id\" :data-url=\"entity.urls.tooltip\"\n               v-html=\"entity.name\" @click=\"handleNameClick\" />\n        </div>\n        <div v-for=\"s in Math.min(entity.children, 2)\" :key=\"s\"\n             class=\"entity entity-stack bg-base-300 w-full overflow-hidden rounded aspect-square flex flex-col shadow-xs\">\n            <div class=\"block grow\"></div>\n            <div class=\"block h-12 p-4 bg-box\"></div>\n        </div>\n    </div>\n    <div v-else :class=\"entityClass\" v-bind=\"dataAttributes\"\n         @pointerdown=\"lpStart\" @pointerup=\"lpCancel\" @pointermove=\"lpMove\" @pointercancel=\"lpCancel\"\n         @contextmenu=\"handleContextMenu\">\n        <a :href=\"entity.urls.show\" class=\"block avatar grow relative cover-background\" :style=\"entityImage\"\n           :title=\"entity.name\" @click.prevent=\"handleImageClick\">\n            <div v-if=\"entity.is_private && !selecting\"\n                 class=\"bubble-private absolute left-1.5 top-1.5 text-xs shadow-xs flex justify-center items-center aspect-square rounded-full w-6 h-6 bg-box opacity-80 text-base-content\"\n                 :title=\"i18n.is_private\">\n                <i class=\"fa-regular fa-lock\" :aria-label=\"i18n.is_private\" />\n            </div>\n            <div v-else-if=\"selecting\" :class=\"selectorClass\">\n                <i v-if=\"entity.selected\" class=\"fa-regular fa-check\" aria-label=\"selected\" />\n            </div>\n        </a>\n        <a :href=\"entity.urls.show\" class=\"block text-center relative truncate h-12 p-4 text-link\"\n           data-toggle=\"tooltip-ajax\" :data-id=\"entity.id\" :data-url=\"entity.urls.tooltip\"\n           v-html=\"entity.name\" @click=\"handleNameClick\" />\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useLongPress } from './composables/useLongPress'\n\nconst props = defineProps<{\n    entity: any\n    selecting: boolean\n    nested: boolean\n    i18n: any\n}>()\n\nconst emit = defineEmits<{\n    navigate: [entityId: number, childrenUrl: string]\n    startSelecting: [entityId: number]\n}>()\n\nlet suppressNextClick = false\nlet lastPointerType = 'mouse'\n\nconst handleContextMenu = (e: MouseEvent) => {\n    // Only suppress the context menu on touch/pen devices (long-press simulation)\n    if (lastPointerType !== 'mouse') {\n        e.preventDefault()\n    }\n}\n\nconst { start: lpStartInner, cancel: lpCancel, move: lpMove } = useLongPress(() => {\n    if (!props.selecting) {\n        suppressNextClick = true\n        emit('startSelecting', props.entity.id)\n    }\n})\n\nconst lpStart = (e: PointerEvent) => {\n    lastPointerType = e.pointerType\n    lpStartInner(e)\n}\n\nconst stacked = computed(() => props.nested && props.entity.children > 0)\n\nconst entityImage = computed(() => ({\n    backgroundImage: `url('${props.entity.images.thumb}')`\n}))\n\nconst entityClass = computed(() => {\n    return 'entity overflow-hidden rounded shadow-xs hover:shadow-md w-[47%] xs:w-[25%] sm:w-48 aspect-square flex flex-col bg-box'\n})\n\nconst selectorClass = computed(() => {\n    const base = 'rounded-full opacity-80 h-6 w-6 absolute left-1.5 top-1.5 border border-primary flex items-center justify-center text-xl'\n    return props.entity.selected\n        ? base + ' bg-primary text-primary-content'\n        : base + ' bg-base-100'\n})\n\nconst dataAttributes = computed(() => {\n    const attrs: Record<string, any> = {\n        'data-entity': props.entity.id,\n        'data-entity-type': props.entity.entityType?.code,\n        'data-type': props.entity.type_slug || props.entity.type,\n    }\n    props.entity.attributes?.forEach((a: string) => {\n        attrs[`data-${a}`] = true\n    })\n    return attrs\n})\n\nconst initials = (name: string): string => {\n    return name.split(' ').map(w => w[0]).join('').slice(0, 2).toUpperCase()\n}\n\nconst childStyle = (child: any, idx: number) => {\n    const style: Record<string, any> = { zIndex: 3 - idx }\n    if (child.image) {\n        style.backgroundImage = `url('${child.image}')`\n    }\n    return style\n}\n\n// Image area: navigates into children when nested and entity has children\nconst handleImageClick = (event: Event) => {\n    if (suppressNextClick) {\n        event.preventDefault()\n        suppressNextClick = false\n        return\n    }\n    if (props.selecting) {\n        event.preventDefault()\n        props.entity.selected = !props.entity.selected\n        return\n    }\n    if (props.nested && props.entity.children > 0) {\n        event.preventDefault()\n        emit('navigate', props.entity.id, props.entity.urls.children_api)\n        return\n    }\n    // No children or not nested: follow the <a> href normally\n    window.location.href = (event.currentTarget as HTMLAnchorElement).href\n}\n\n// Name area: always navigates to the entity page, never into children\nconst handleNameClick = (event: Event) => {\n    if (suppressNextClick) {\n        event.preventDefault()\n        suppressNextClick = false\n        return\n    }\n    if (props.selecting) {\n        event.preventDefault()\n        props.entity.selected = !props.entity.selected\n    }\n    // Otherwise: let the <a href> navigate normally\n}\n</script>\n"
  },
  {
    "path": "resources/js/entities/EntityGrid.vue",
    "content": "<template>\n    <div class=\"flex flex-wrap gap-3 lg:gap-5 w-full\">\n        <!-- Back card when viewing children -->\n        <a v-if=\"parent\" :href=\"parent.urls.parent\"\n           class=\"entity w-[47%] xs:w-[25%] sm:w-48 overflow-hidden rounded flex flex-col shadow-xs hover:shadow-md text-link\"\n           @click.prevent=\"$emit('back')\">\n            <div class=\"flex items-center justify-center grow text-6xl\">\n                <i class=\"fa-regular fa-arrow-left\" aria-hidden=\"true\"></i>\n            </div>\n            <div class=\"block text-center p-4 h-12 bg-box\">\n                <span v-html=\"parent.links.back\"></span>\n            </div>\n        </a>\n\n        <template v-for=\"(entity, idx) in entities\" :key=\"entity.id\">\n            <EntityCard\n                :entity=\"entity\"\n                :selecting=\"selecting\"\n                :nested=\"nested\"\n                :i18n=\"i18n\"\n                @navigate=\"(id, url) => $emit('navigate', id, url)\"\n                @start-selecting=\"(id) => $emit('startSelecting', id)\"\n            />\n            <EntityAdSlot\n                v-if=\"ads.enabled && (idx + 1) % ads.frequency === 0\"\n                :idx=\"idx\"\n            />\n        </template>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport EntityCard from './EntityCard.vue'\nimport EntityAdSlot from './EntityAdSlot.vue'\n\ndefineProps<{\n    entities: any[]\n    parent: any\n    selecting: boolean\n    nested: boolean\n    i18n: any\n    ads: { enabled: boolean; frequency: number }\n}>()\n\ndefineEmits<{\n    navigate: [entityId: number, childrenUrl: string]\n    back: []\n    startSelecting: [entityId: number]\n}>()\n</script>\n"
  },
  {
    "path": "resources/js/entities/EntityListing.vue",
    "content": "<template>\n    <div v-if=\"loading\" class=\"flex flex-col gap-4 w-full\">\n        <div class=\"flex gap-2 justify-between items-center\">\n            <h1\n                class=\"grow text-2xl category-title truncate\"\n                v-html=\"props.module\"\n            ></h1>\n            <div class=\"flex gap-2 items-center\">\n                <button class=\"btn2 btn-disabled\" disabled=\"disabled\">\n                    <i\n                        class=\"fa-solid fa-spinner fa-spin\"\n                        aria-label=\"Loading\"\n                    ></i>\n                </button>\n            </div>\n        </div>\n        <div class=\"flex gap-2 items-start\">\n            <div\n                class=\"rounded shadow-xs w-[47%] xs:w-[25%] sm:w-48 aspect-square flex items-center justify-center text-xl text-neutral-content\"\n            >\n                <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\"></i>\n            </div>\n        </div>\n    </div>\n    <div class=\"flex flex-col gap-4 w-full\" v-else ref=\"listingRef\">\n        <!-- Toolbar -->\n        <div class=\"flex gap-2 justify-between items-center flex-wrap\">\n            <!-- Left: title + filters -->\n            <div\n                class=\"flex gap-2 items-center flex-wrap\"\n                v-if=\"!bulkActions.selecting.value\"\n            >\n                <h1\n                    class=\"text-2xl category-title truncate\"\n                    v-html=\"props.module\"\n                ></h1>\n\n                <!-- Filter button: no active filters -->\n                <button\n                    v-if=\"!bulkActions.selecting.value && filters === 0\"\n                    class=\"btn2 btn-sm\"\n                    :aria-label=\"i18n.filters\"\n                    :title=\"i18n.filters\"\n                    @click=\"openFilters\"\n                >\n                    <i class=\"fa-regular fa-filter\" aria-hidden=\"true\"></i>\n                    <span class=\"hidden sm:inline\" v-html=\"i18n.filters\"></span>\n                </button>\n\n                <!-- Filter pill: active filters -->\n                <div\n                    v-else-if=\"!bulkActions.selecting.value && filters > 0\"\n                    class=\"join\"\n                >\n                    <button class=\"btn2 btn-sm join-item\" @click=\"openFilters\">\n                        <i class=\"fa-regular fa-filter\" aria-hidden=\"true\"></i>\n                        <span\n                            class=\"hidden sm:inline\"\n                            v-html=\"i18n.filters\"\n                        ></span>\n                        <span\n                            class=\"rounded-full bg-primary text-primary-content px-1.5 text-xs font-bold leading-5\"\n                            >{{ filters }}</span\n                        >\n                    </button>\n                    <button\n                        v-if=\"bookmarkable\"\n                        class=\"btn2 btn-sm join-item\"\n                        :title=\"i18n.bookmark\"\n                        @click=\"bookmark\"\n                    >\n                        <i\n                            class=\"fa-regular fa-bookmark\"\n                            aria-hidden=\"true\"\n                        ></i>\n                    </button>\n                    <button\n                        class=\"btn2 btn-sm join-item\"\n                        :title=\"i18n.clearFilters\"\n                        @click=\"clearFilters\"\n                    >\n                        <i class=\"fa-regular fa-times\" aria-hidden=\"true\"></i>\n                    </button>\n                </div>\n            </div>\n\n            <!-- Right: view controls + create (not in bulk mode) -->\n            <div\n                class=\"flex gap-2 items-center flex-wrap\"\n                v-if=\"!bulkActions.selecting.value\"\n            >\n                <!-- Loading spinner during ordering or per-page change -->\n                <button\n                    class=\"btn2 btn-disabled\"\n                    disabled\n                    v-if=\"\n                        orderingComposable.ordering.value ||\n                        perPageComposable.loading.value\n                    \"\n                >\n                    <i\n                        class=\"fa-solid fa-spinner fa-spin\"\n                        aria-label=\"Loading\"\n                    ></i>\n                </button>\n\n                <!-- Nesting toggle (unchanged behaviour) -->\n                <div\n                    v-if=\"\n                        entityType.is_nested &&\n                        !orderingComposable.ordering.value\n                    \"\n                    class=\"flex items-center rounded-xl bg-base-200 overflow-hidden p-0.5 gap-0.5\"\n                >\n                    <button\n                        @click=\"nestingComposable.switchMode()\"\n                        class=\"flex items-center justify-center rounded-lg px-2 py-2 text-sm transition-all\"\n                        :class=\"\n                            nestingComposable.nested.value\n                                ? 'bg-base-100 text-base-content shadow-xs'\n                                : 'text-neutral-content cursor-pointer hover:text-base-content'\n                        \"\n                        v-tippy=\"i18n.nest\"\n                    >\n                        <i\n                            class=\"fa-regular fa-layer-group\"\n                            aria-hidden=\"true\"\n                        ></i>\n                    </button>\n                    <button\n                        @click=\"nestingComposable.switchMode()\"\n                        class=\"flex items-center justify-center rounded-lg px-2 py-2 text-sm transition-all\"\n                        :class=\"\n                            !nestingComposable.nested.value\n                                ? 'bg-base-100 text-base-content shadow-xs'\n                                : 'text-neutral-content cursor-pointer hover:text-base-content'\n                        \"\n                        v-tippy=\"i18n.flatten\"\n                    >\n                        <i\n                            class=\"fa-regular fa-boxes-stacked\"\n                            aria-hidden=\"true\"\n                        ></i>\n                    </button>\n                </div>\n\n                <!-- Layout toggle (grid / table) — only when entity type has table -->\n                <div\n                    v-if=\"\n                        entityType.has_table &&\n                        !orderingComposable.ordering.value\n                    \"\n                    class=\"flex items-center rounded-xl bg-base-200 overflow-hidden p-0.5 gap-0.5\"\n                >\n                    <button\n                        @click=\"\n                            !layoutComposable.isGrid() &&\n                            layoutComposable.switchLayout()\n                        \"\n                        class=\"flex items-center justify-center rounded-lg px-2 py-2 text-sm transition-all\"\n                        :class=\"\n                            layoutComposable.isGrid()\n                                ? 'bg-base-100 text-base-content shadow-xs'\n                                : 'text-neutral-content cursor-pointer hover:text-base-content'\n                        \"\n                        v-tippy=\"i18n.layout_grid\"\n                    >\n                        <i class=\"fa-regular fa-grid-2\" aria-hidden=\"true\"></i>\n                    </button>\n                    <button\n                        @click=\"\n                            layoutComposable.isGrid() &&\n                            layoutComposable.switchLayout()\n                        \"\n                        class=\"flex items-center justify-center rounded-lg px-2 py-2 text-sm transition-all\"\n                        :class=\"\n                            !layoutComposable.isGrid()\n                                ? 'bg-base-100 text-base-content shadow-xs'\n                                : 'text-neutral-content cursor-pointer hover:text-base-content'\n                        \"\n                        v-tippy=\"i18n.layout_table\"\n                    >\n                        <i class=\"fa-regular fa-list-ul\" aria-hidden=\"true\"></i>\n                    </button>\n                </div>\n\n                <!-- Display dropdown button -->\n                <div>\n                    <button\n                        ref=\"displayBtn\"\n                        class=\"btn2 btn-sm\"\n                        :title=\"i18n.display\"\n                    >\n                        <i class=\"fa-regular fa-gear\" aria-hidden=\"true\"></i>\n                        <span\n                            class=\"hidden sm:inline\"\n                            v-html=\"i18n.display\"\n                        ></span>\n                    </button>\n                </div>\n\n                <!-- Select button (hidden on mobile) -->\n                <button\n                    v-if=\"hasPermissions()\"\n                    @click=\"bulkActions.toggleSelecting()\"\n                    class=\"btn2 hidden btn-sm sm:flex\"\n                >\n                    <i\n                        class=\"fa-regular fa-check-square\"\n                        aria-hidden=\"true\"\n                    ></i>\n                    <span class=\"hidden sm:inline\" v-html=\"i18n.select\"></span>\n                </button>\n\n                <!-- Create + template caret -->\n                <div class=\"join\" v-if=\"hasPermissions() && permissions.create\">\n                    <a\n                        :href=\"urls.create\"\n                        class=\"btn2 btn-primary btn-sm join-item btn-new-entity\"\n                    >\n                        <i class=\"fa-regular fa-plus\" aria-hidden=\"true\"></i>\n                        <span\n                            class=\"hidden md:inline\"\n                            v-html=\"entityType.singular\"\n                        ></span>\n                    </a>\n                    <div v-if=\"permissions.template\">\n                        <button\n                            ref=\"templateBtn\"\n                            type=\"button\"\n                            class=\"btn2 btn-primary btn-sm join-item\"\n                            aria-expanded=\"false\"\n                            aria-label=\"Create from template\"\n                            aria-haspopup=\"menu\"\n                        >\n                            <i\n                                class=\"fa-regular fa-caret-down\"\n                                aria-hidden=\"true\"\n                            ></i>\n                        </button>\n                    </div>\n                </div>\n            </div>\n\n            <!-- Bulk action bar (selecting mode) -->\n            <div class=\"flex gap-2 items-center flex-wrap w-full\" v-else>\n                <span\n                    class=\"rounded-full bg-primary text-primary-content px-3 py-1 text-xs font-bold\"\n                >\n                    {{ bulkActions.selectedEntityIds().length }}\n                    {{ i18n.selected }}\n                </span>\n                <button\n                    @click=\"bulkActions.toggleAll()\"\n                    class=\"btn2 btn-sm\"\n                    v-html=\"i18n.selectAll\"\n                ></button>\n                <div class=\"flex-1\"></div>\n                <!-- Admin primary action: batch edit -->\n                <div class=\"join\" v-if=\"permissions.admin\">\n                    <button\n                        class=\"btn2 btn-primary btn-sm join-item\"\n                        @click=\"bulkActions.bulkDialog(urls.batch, actionsBtn)\"\n                    >\n                        <i class=\"fa-regular fa-pencil\" aria-hidden=\"true\"></i>\n                        <span\n                            class=\"hidden md:inline\"\n                            v-html=\"i18n.bulkEdit\"\n                        ></span>\n                    </button>\n                    <div>\n                        <button\n                            ref=\"actionsBtn\"\n                            type=\"button\"\n                            class=\"btn2 btn-primary btn-sm join-item\"\n                            aria-expanded=\"false\"\n                            aria-label=\"More bulk actions\"\n                            aria-haspopup=\"menu\"\n                        >\n                            <i\n                                class=\"fa-regular fa-caret-down\"\n                                aria-hidden=\"true\"\n                            ></i>\n                        </button>\n                    </div>\n                </div>\n                <!-- Non-admin primary action: print -->\n                <div class=\"join\" v-else>\n                    <button\n                        class=\"btn2 btn-primary join-item\"\n                        @click=\"bulkActions.bulkPrint(printForm, actionsBtn)\"\n                    >\n                        <i class=\"fa-regular fa-print\" aria-hidden=\"true\"></i>\n                        <span\n                            class=\"hidden md:inline\"\n                            v-html=\"i18n.bulkPrint\"\n                        ></span>\n                    </button>\n                    <div>\n                        <button\n                            ref=\"actionsBtn\"\n                            type=\"button\"\n                            class=\"btn2 btn-primary join-item\"\n                            aria-expanded=\"false\"\n                            aria-label=\"More bulk actions\"\n                            aria-haspopup=\"menu\"\n                        >\n                            <i\n                                class=\"fa-regular fa-caret-down\"\n                                aria-hidden=\"true\"\n                            ></i>\n                        </button>\n                    </div>\n                </div>\n                <button\n                    @click=\"bulkActions.toggleSelecting()\"\n                    class=\"btn2 btn-ghost btn-sm\"\n                >\n                    <i class=\"fa-regular fa-times\" aria-hidden=\"true\"></i>\n                    <span v-html=\"i18n.done\"></span>\n                </button>\n            </div>\n        </div>\n\n        <!-- Content area -->\n        <div class=\"flex gap-1 items-start\">\n            <div\n                v-if=\"entityApi.apiError.value\"\n                class=\"flex flex-col gap-2 items-center justify-center w-full py-12 text-center text-neutral-content\"\n            >\n                <i class=\"fa-regular fa-triangle-exclamation text-2xl\" aria-hidden=\"true\"></i>\n                <p v-html=\"i18n.loadError || 'Something went wrong loading this list. Please try refreshing the page.'\"></p>\n            </div>\n            <EntityGrid\n                v-else-if=\"layoutComposable.isGrid()\"\n                :entities=\"entityApi.entities.value\"\n                :parent=\"entityApi.parent.value\"\n                :selecting=\"bulkActions.selecting.value\"\n                :nested=\"nestingComposable.nested.value\"\n                :i18n=\"i18n\"\n                :ads=\"entityApi.ads.value\"\n                @navigate=\"handleGridNavigate\"\n                @back=\"handleGridBack\"\n                @start-selecting=\"handleStartSelecting\"\n            />\n            <EntityTable\n                v-else\n                :entities=\"entityApi.entities.value\"\n                :visible-columns=\"columnsComposable.visibleColumns.value\"\n                :selecting=\"bulkActions.selecting.value\"\n                :all-selected=\"bulkActions.allSelected()\"\n                :nested=\"nestingComposable.nested.value\"\n                :i18n=\"i18n\"\n                :entity-type=\"entityType\"\n                :features=\"features\"\n                :ads=\"entityApi.ads.value\"\n                :is-ordering=\"orderingComposable.isOrdering\"\n                :order-by-icon=\"orderingComposable.orderByIcon\"\n                :on-toggle-child=\"bulkActions.toggleChildId\"\n                @order-by=\"handleOrderBy\"\n                @toggle-all=\"bulkActions.toggleAll()\"\n                @start-selecting=\"handleStartSelecting\"\n            />\n        </div>\n\n        <!-- Pagination -->\n        <div\n            v-if=\"(entityApi.entitiesData.value?.meta.last_page ?? 1) > 1\"\n            class=\"flex items-center justify-end gap-1 h-12\"\n        >\n            <TailwindPagination\n                v-if=\"!entityApi.paginating.value\"\n                :data=\"entityApi.entitiesData.value\"\n                :limit=\"2\"\n                :itemClasses=\"[\n                    'bg-base-200',\n                    'text-base-content',\n                    'border-none',\n                    'hover:bg-base-300',\n                ]\"\n                :activeClasses=\"[\n                    'bg-base-100',\n                    'border-none',\n                    'text-base-content',\n                ]\"\n                @pagination-change-page=\"getEntities\"\n            />\n            <div v-else class=\"flex items-center\">\n                <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\"></i>\n            </div>\n        </div>\n        <!-- Empty state -->\n        <div\n            v-if=\"entityApi.entities.value.length === 0 && emptyState && !entityApi.apiError.value\"\n            class=\"flex flex-col gap-4 items-center justify-center mx-auto text-center\"\n        >\n            <h2 v-html=\"emptyState.title\"></h2>\n            <p class=\"help-block max-w-sm\" v-html=\"emptyState.helper\"\n            v-if=\"entityType.is_standard\"></p>\n            <a\n                v-if=\"hasPermissions() && permissions.create\"\n                :href=\"urls.create\"\n                class=\"btn2 btn-primary mb-2\"\n            >\n                <i class=\"fa-regular fa-plus\" aria-hidden=\"true\"></i>\n                <span v-html=\"entityType.singular\"></span>\n            </a>\n            <div class=\"flex gap-4 items-center justify-center flex-wrap\">\n                <a\n                    :href=\"emptyState.publicUrl\"\n                    class=\"text-link flex gap-1 items-center\"\n                >\n                    <i class=\"fa-regular fa-sparkles\" aria-hidden=\"true\"></i>\n                    <span v-html=\"emptyState.public\"></span>\n                </a>\n                <a\n                    v-if=\"entityType.is_standard\"\n                    :href=\"emptyState.docsUrl\"\n                    class=\"text-link flex gap-1 items-center\"\n                    target=\"_blank\"\n                >\n                    <i class=\"fa-regular fa-book\" aria-hidden=\"true\"></i>\n                    <span v-html=\"emptyState.learn\"></span>\n                </a>\n            </div>\n        </div>\n        <p\n            v-else-if=\"entityApi.entities.value.length === 0 && !entityApi.apiError.value\"\n            class=\"help-text italic\"\n            v-html=\"i18n.noResults\"\n        ></p>\n\n        <!-- Hidden tippy menus -->\n        <div ref=\"hiddenMenus\" style=\"display: none\">\n            <!-- Display menu: sort + per page + columns -->\n            <div ref=\"displayMenu\" class=\"flex flex-col gap-3 p-1 min-w-56\">\n                <!-- Sort by -->\n                <div v-if=\"sortableColumns.length > 0\">\n                    <div\n                        class=\"text-xs uppercase tracking-wide text-neutral-content px-1 mb-1.5\"\n                        v-html=\"i18n.sortBy\"\n                    ></div>\n                    <div class=\"flex flex-wrap gap-1.5\">\n                        <button\n                            v-for=\"col in sortableColumns\"\n                            :key=\"col.key\"\n                            @click=\"handleOrderBy(col.key, col.sortKey)\"\n                            class=\"px-2.5 py-1 rounded-full text-xs border transition-all cursor-pointer\"\n                            :class=\"\n                                orderingComposable.isOrdering(\n                                    col.sortKey || col.key,\n                                )\n                                    ? 'bg-primary text-primary-content border-primary font-semibold'\n                                    : 'bg-base-200 border-base-300 text-base-content hover:border-primary'\n                            \"\n                        >\n                            <i\n                                v-if=\"\n                                    orderingComposable.isOrdering(\n                                        col.sortKey || col.key,\n                                    )\n                                \"\n                                :class=\"\n                                    orderingComposable.orderByIcon(\n                                        col.sortKey || col.key,\n                                    )\n                                \"\n                                class=\"mr-1\"\n                            ></i>\n                            <span v-html=\"col.label\"></span>\n                        </button>\n                    </div>\n                </div>\n\n                <!-- Results per page -->\n                <div>\n                    <div\n                        class=\"text-xs uppercase tracking-wide text-neutral-content px-1 mb-1.5\"\n                        v-html=\"i18n.perPage\"\n                    ></div>\n                    <div class=\"flex gap-1.5\">\n                        <button\n                            v-for=\"n in perPageComposable.perPageOptions.value\"\n                            :key=\"n\"\n                            @click=\"handleSelectPerPage(n)\"\n                            class=\"px-3 py-1 rounded-md text-xs border transition-all\"\n                            :class=\"[\n                                perPageComposable.perPage.value === n\n                                    ? 'bg-primary text-primary-content border-primary font-semibold'\n                                    : 'bg-base-200 border-base-300 text-base-content hover:border-primary',\n                                perPageComposable.isSubscriberOnly(n) &&\n                                !perPageComposable.isSubscriber.value\n                                    ? 'opacity-60'\n                                    : '',\n                            ]\"\n                        >\n                            {{ n\n                            }}<i\n                                v-if=\"\n                                    perPageComposable.isSubscriberOnly(n) &&\n                                    !perPageComposable.isSubscriber.value\n                                \"\n                                class=\"fa-regular fa-gem ml-1\"\n                                aria-hidden=\"true\"\n                            ></i>\n                        </button>\n                    </div>\n                </div>\n\n                <!-- Visible columns (table mode only) -->\n                <div\n                    v-if=\"\n                        !layoutComposable.isGrid() &&\n                        entityType.has_table &&\n                        toggleableColumns.length > 0\n                    \"\n                >\n                    <hr class=\"border-base-300 -mx-1 mb-3\" />\n                    <div\n                        class=\"text-xs uppercase tracking-wide text-neutral-content px-1 mb-1.5\"\n                        v-html=\"i18n.columns\"\n                    ></div>\n                    <div class=\"flex flex-col gap-0.5\">\n                        <div\n                            v-for=\"col in toggleableColumns\"\n                            :key=\"col.key\"\n                            class=\"px-2 py-1.5 hover:bg-base-200 rounded-lg flex items-center justify-between gap-2 text-xs cursor-pointer text-base-content\"\n                            :class=\"\n                                columnsComposable.isColumnVisible(col.key)\n                                    ? 'text-primary'\n                                    : ''\n                            \"\n                            @click=\"columnsComposable.toggleColumn(col.key)\"\n                        >\n                            <span v-html=\"col.label\"></span>\n                            <i\n                                :class=\"\n                                    columnsComposable.isColumnVisible(col.key)\n                                        ? 'fa-regular fa-check text-primary'\n                                        : 'fa-regular fa-circle text-neutral-content'\n                                \"\n                            ></i>\n                        </div>\n                    </div>\n                    <button\n                        @click=\"columnsComposable.resetToDefaults()\"\n                        class=\"mt-1.5 px-2 py-1.5 hover:bg-base-200 rounded-lg flex items-center gap-2 text-xs text-base-content w-full\"\n                    >\n                        <i\n                            class=\"fa-regular fa-rotate-left\"\n                            aria-hidden=\"true\"\n                        ></i>\n                        <span v-html=\"i18n.resetDefaults\"></span>\n                    </button>\n                </div>\n            </div>\n\n            <!-- Template/archetype menu (unchanged) -->\n            <div ref=\"templateMenu\" class=\"flex flex-col gap-1\">\n                <a\n                    v-for=\"template in templates\"\n                    :href=\"template.url\"\n                    :key=\"template.id\"\n                    class=\"px-2 py-2 hover:bg-base-200 rounded-xl flex items-center gap-1.5 text-xs transition-all duration-150 text-base-content\"\n                >\n                    <i\n                        class=\"fa-regular fa-star text-neutral-content w-5\"\n                        aria-hidden=\"true\"\n                    ></i>\n                    <span v-html=\"template.name\"></span>\n                </a>\n                <hr class=\"m-0\" v-if=\"templates.length > 0\" />\n                <a\n                    href=\"https://docs.kanka.io/en/latest/guides/templates.html\"\n                    class=\"px-2 py-2 hover:bg-base-200 rounded-xl flex items-center gap-1.5 transition-all duration-150 text-base-content text-xs\"\n                >\n                    <i\n                        class=\"fa-regular fa-external-link text-neutral-content w-5\"\n                        aria-hidden=\"true\"\n                    ></i>\n                    <span class=\"text-nowrap\" v-html=\"i18n.templates\"></span>\n                </a>\n            </div>\n\n            <!-- Bulk actions menu (unchanged) -->\n            <div\n                ref=\"actionsMenu\"\n                v-if=\"permissions\"\n                class=\"flex flex-col gap-1\"\n            >\n                <button\n                    v-if=\"permissions?.admin\"\n                    @click=\"\n                        bulkActions.bulkDialog(urls.permissions, actionsBtn)\n                    \"\n                    class=\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"\n                >\n                    <i class=\"fa-regular fa-lock\" aria-hidden=\"true\"></i>\n                    <span v-html=\"i18n.bulkPermissions\"></span>\n                </button>\n                <button\n                    v-if=\"permissions?.admin\"\n                    @click=\"bulkActions.bulkDialog(urls.transform, actionsBtn)\"\n                    class=\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"\n                >\n                    <i\n                        class=\"fa-regular fa-exchange-alt\"\n                        aria-hidden=\"true\"\n                    ></i>\n                    <span v-html=\"i18n.bulkTransform\"></span>\n                </button>\n                <button\n                    @click=\"bulkActions.bulkDialog(urls.copy, actionsBtn)\"\n                    class=\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"\n                >\n                    <i class=\"fa-regular fa-clone\" aria-hidden=\"true\"></i>\n                    <span v-html=\"i18n.bulkCopy\"></span>\n                </button>\n                <button\n                    v-if=\"permissions?.admin\"\n                    @click=\"bulkActions.bulkDialog(urls.template, actionsBtn)\"\n                    class=\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"\n                >\n                    <i class=\"fa-regular fa-table\" aria-hidden=\"true\"></i>\n                    <span v-html=\"i18n.bulkTemplate\"></span>\n                </button>\n                <button\n                    v-if=\"permissions?.admin\"\n                    @click=\"bulkActions.bulkPrint(printForm, actionsBtn)\"\n                    class=\"flex items-center gap-2 px-2 py-1 cursor-pointer text-nowrap hover:text-primary\"\n                >\n                    <i class=\"fa-regular fa-print\" aria-hidden=\"true\"></i>\n                    <span v-html=\"i18n.bulkPrint\"></span>\n                </button>\n                <button\n                    v-if=\"permissions?.delete\"\n                    @click=\"bulkActions.bulkDialog(urls.delete, actionsBtn)\"\n                    class=\"flex items-center gap-2 px-2 py-1 cursor-pointer text-error-content hover:bg-error rounded\"\n                >\n                    <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n                    <span v-html=\"i18n.bulkDelete\"></span>\n                </button>\n            </div>\n        </div>\n\n        <!-- Print form -->\n        <form method=\"POST\" :action=\"urls.print\" ref=\"printForm\">\n            <input\n                v-for=\"selected in bulkActions.selectedEntityIds()\"\n                type=\"hidden\"\n                name=\"model[]\"\n                :value=\"selected\"\n                :key=\"selected\"\n            />\n            <input type=\"hidden\" name=\"_token\" :value=\"entityApi.csrf.value\" />\n        </form>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n    ref,\n    computed,\n    onMounted,\n    onBeforeUnmount,\n    onUpdated,\n    nextTick,\n    watch,\n} from \"vue\";\nimport { TailwindPagination } from \"laravel-vue-pagination\";\nimport tippy from \"tippy.js\";\nimport EntityGrid from \"./EntityGrid.vue\";\nimport EntityTable from \"./EntityTable.vue\";\nimport { useEntityApi } from \"./composables/useEntityApi\";\nimport { useBulkActions } from \"./composables/useBulkActions\";\nimport { useOrdering } from \"./composables/useOrdering\";\nimport { useLayout } from \"./composables/useLayout\";\nimport { useNesting } from \"./composables/useNesting\";\nimport { useColumns } from \"./composables/useColumns\";\nimport { usePerPage } from \"./composables/usePerPage\";\n\nconst props = defineProps<{\n    api: string;\n    module: string;\n    mode: string;\n}>();\n\n// State not in composables\nconst permissions = ref<any>(null);\nconst entityType = ref<any>({});\nconst urls = ref<any>({});\nconst templates = ref<any[]>([]);\nconst filters = ref(0);\nconst filterUrls = ref<any>({});\nconst bookmarkable = ref(false);\nconst features = ref<any>({});\nconst i18n = ref<any>({});\nconst emptyState = ref<any>(null);\nconst loading = ref(true);\n\n// Template refs\nconst listingRef = ref<HTMLElement | null>(null);\nconst displayBtn = ref();\nconst displayMenu = ref();\nconst templateBtn = ref();\nconst templateMenu = ref();\nconst actionsBtn = ref();\nconst actionsMenu = ref();\nconst hiddenMenus = ref();\nconst printForm = ref();\n\n// Composables\nconst entityApi = useEntityApi({ api: props.api });\nconst bulkActions = useBulkActions(entityApi.entities);\n\n// Options objects are kept as references so their properties can be mutated\n// after the API response provides the preferences URL and CSRF token\nconst layoutOptions = {\n    initialMode: props.mode,\n    api: props.api,\n    preferencesUrl: \"\",\n    csrf: \"\",\n    fetchEntities: (url: string) => entityApi.fetchEntities(url),\n    addToUrl: entityApi.addToUrl,\n};\n\nconst nestingOptions = {\n    api: props.api,\n    preferencesUrl: \"\",\n    csrf: \"\",\n    fetchEntities: (url: string) => entityApi.fetchEntities(url),\n    addToUrl: entityApi.addToUrl,\n};\n\nconst columnsOptions = {\n    preferencesUrl: \"\",\n    csrf: \"\",\n};\n\nconst perPageOptions = {\n    api: props.api,\n    preferencesUrl: \"\",\n    csrf: \"\",\n    fetchEntities: (url: string) => entityApi.fetchEntities(url),\n    addToUrl: entityApi.addToUrl,\n    subscribeUrl: \"\",\n    isSubscriber: false,\n};\n\nconst orderingComposable = useOrdering({\n    api: props.api,\n    fetchEntities: (url: string) => entityApi.fetchEntities(url),\n    addToUrl: entityApi.addToUrl,\n});\n\nconst layoutComposable = useLayout(layoutOptions);\nconst nestingComposable = useNesting(nestingOptions);\nconst columnsComposable = useColumns(columnsOptions);\nconst perPageComposable = usePerPage(perPageOptions);\n\n// Computed\nconst sortableColumns = computed(() => {\n    return entityApi.columns.value.filter(\n        (col: any) => col.sortable && col.label,\n    );\n});\n\nconst toggleableColumns = computed(() => {\n    return entityApi.columns.value.filter(\n        (col: any) => !col.alwaysVisible && col.label,\n    );\n});\n\n// Methods\nconst hasPermissions = () => permissions.value;\n\nconst openFilters = () => {\n    (window as any).openDialog(\"datagrid-filters\", filterUrls.value.form);\n};\n\nconst bookmark = () => {\n    (window as any).openDialog(\"primary-dialog\", urls.value.bookmark);\n};\n\n// Full page navigation: filterUrls.clear is a page URL, not a JSON API endpoint\nconst clearFilters = () => {\n    window.location.href = filterUrls.value.clear;\n};\n\nconst getEntities = async (page = 1) => {\n    entityApi.loadPage(page);\n    listingRef.value?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n};\n\nconst handleOrderBy = (field: string, sortKey?: string | null) => {\n    orderingComposable.orderBy(field, sortKey);\n};\n\nconst handleSelectPerPage = (n: number) => {\n    perPageComposable.selectPerPage(n);\n};\n\nconst handleGridNavigate = (entityId: number, childrenUrl: string) => {\n    // Navigate into children without page reload\n    entityApi.fetchEntities(childrenUrl).then((response: any) => {\n        entityApi.parent.value = response.parent;\n    });\n\n    // Update browser URL\n    const currentUrl = new URL(window.location.href);\n    currentUrl.searchParams.set(\"parent_id\", String(entityId));\n    window.history.pushState({}, \"\", currentUrl);\n};\n\nconst handleStartSelecting = (entityId: number) => {\n    bulkActions.toggleSelecting();\n    const entity = entityApi.entities.value.find((e: any) => e.id === entityId);\n    if (entity) {\n        entity.selected = true;\n    } else {\n        bulkActions.toggleChildId(entityId);\n    }\n};\n\nconst handleGridBack = () => {\n    const parent = entityApi.parent.value;\n    if (!parent) return;\n\n    // Update the browser URL immediately (before async fetch) so any\n    // subsequent currentApiUrl() calls in composables don't pick up the old parent_id\n    const currentUrl = new URL(window.location.href);\n    if (parent.parent_id) {\n        currentUrl.searchParams.set(\"parent_id\", String(parent.parent_id));\n    } else {\n        currentUrl.searchParams.delete(\"parent_id\");\n    }\n    window.history.pushState({}, \"\", currentUrl);\n\n    // Build the fetch URL from the now-updated browser URL so sort/filters are preserved\n    entityApi.fetchEntities(entityApi.currentApiUrl()).then((response: any) => {\n        entityApi.parent.value = response.parent;\n    });\n};\n\n// Tippy dropdowns\nlet tippyInstances: any[] = [];\n\nconst destroyAllTippy = () => {\n    tippyInstances.forEach((instance) => {\n        const content = instance.props.content;\n        if (content instanceof Element && hiddenMenus.value) {\n            hiddenMenus.value.appendChild(content);\n        }\n        instance.destroy();\n    });\n    tippyInstances = [];\n};\n\nconst initTippyDropdown = (btnRef: any, menuRef: any, placement = \"bottom\") => {\n    if (!btnRef.value || !menuRef.value) return;\n    const instance = tippy(btnRef.value, {\n        content: menuRef.value,\n        theme: \"kanka-dropdown\",\n        placement: placement,\n        interactive: true,\n        trigger: \"click\",\n        allowHTML: true,\n        arrow: true,\n        zIndex: 890,\n    });\n    tippyInstances.push(instance);\n};\n\nconst initAllDropdowns = () => {\n    destroyAllTippy();\n    initTippyDropdown(displayBtn, displayMenu, \"bottom-end\");\n    initTippyDropdown(templateBtn, templateMenu, \"bottom-end\");\n    initTippyDropdown(actionsBtn, actionsMenu, \"bottom-end\");\n};\n\n// Lifecycle\nonMounted(() => {\n    entityApi.loadInitial().then((response: any) => {\n        if (!response) {\n            loading.value = false;\n            return;\n        }\n        // Import state from API response\n        filters.value = response.filters?.count ?? 0;\n        filterUrls.value = response.filters?.urls ?? {};\n        i18n.value = response.i18n;\n        entityApi.parent.value = response.parent;\n        templates.value = response.templates;\n        permissions.value = response.permissions;\n        bookmarkable.value = response.bookmarkable;\n        features.value = response.features ?? {};\n        urls.value = response.urls;\n        entityType.value = response.entityType;\n        emptyState.value = response.emptyState ?? null;\n\n        // Initialize composables with API data\n        nestingComposable.setNested(response.nested);\n        orderingComposable.setOrder(response.order);\n        columnsComposable.setColumns(\n            response.columns ?? [],\n            response.columnPreferences ?? [],\n        );\n\n        // Update composable options with preference URLs from API response\n        if (response.urls?.preferences) {\n            layoutOptions.preferencesUrl = response.urls.preferences;\n            layoutOptions.csrf = response.csrf;\n            nestingOptions.preferencesUrl = response.urls.preferences;\n            nestingOptions.csrf = response.csrf;\n            columnsOptions.preferencesUrl = response.urls.preferences;\n            columnsOptions.csrf = response.csrf;\n        }\n\n        // Wire per-page composable\n        perPageComposable.setPerPage(response.preferences?.per_page ?? 25);\n        perPageComposable.setSubscriber(\n            response.subscription?.isSubscriber ?? false,\n        );\n        perPageComposable.setOptions(\n            response.perPageOptions ?? [],\n            response.subscriberPerPageOptions ?? [],\n        );\n        if (response.urls?.preferences) {\n            perPageOptions.preferencesUrl = response.urls.preferences;\n            perPageOptions.csrf = response.csrf;\n            perPageOptions.subscribeUrl = response.subscription?.url ?? \"\";\n        }\n\n        loading.value = false;\n    });\n    window.addEventListener(\"keydown\", handleKeydown);\n});\n\nwatch(loading, (val) => {\n    if (!val)\n        nextTick(() => {\n            initAllDropdowns();\n        });\n});\n\nwatch(\n    () => bulkActions.selecting.value,\n    () => {\n        nextTick(initAllDropdowns);\n    },\n);\n\nwatch(\n    () => layoutComposable.layout.value,\n    () => {\n        nextTick(initAllDropdowns);\n    },\n);\n\nconst handleKeydown = (e: KeyboardEvent) => {\n    if (e.key === \"Escape\" && bulkActions.selecting.value) {\n        bulkActions.toggleSelecting();\n    }\n};\n\nonBeforeUnmount(() => {\n    window.removeEventListener(\"keydown\", handleKeydown);\n    destroyAllTippy();\n});\n\nonUpdated(() => {\n    (window as any).ajaxTooltip?.();\n});\n</script>\n"
  },
  {
    "path": "resources/js/entities/EntityRow.vue",
    "content": "<template>\n    <tr :data-id=\"entity.id\" v-bind=\"dataAttributes\"\n        @pointerdown=\"lpStart\" @pointerup=\"lpCancel\" @pointermove=\"lpMove\" @pointercancel=\"lpCancel\"\n        @contextmenu=\"handleContextMenu\" @click.capture=\"handleRowClick\">\n        <!-- Checkbox -->\n        <td class=\"w-8\" :class=\"selecting ? '' : 'hidden sm:table-cell'\">\n            <input\n                type=\"checkbox\"\n                :checked=\"entity.selected\"\n                @change=\"handleCheckboxChange\"\n            />\n        </td>\n\n        <!-- Expand/collapse arrow (nested mode only) -->\n        <td v-if=\"showExpandColumn\" class=\"w-8 text-center\">\n            <button v-if=\"entity.children > 0 && depth < maxDepth\" @click=\"toggleExpand\" class=\"text-link hover:text-primary\">\n                <i v-if=\"loadingChildren\" class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n                <i v-else-if=\"expanded\" class=\"fa-regular fa-angle-down\" aria-hidden=\"true\"></i>\n                <i v-else class=\"fa-regular fa-angle-right\" aria-hidden=\"true\"></i>\n            </button>\n            <a v-else-if=\"entity.children > 0\" :href=\"entity.urls.children\" class=\"text-link text-xs\">\n                <i class=\"fa-regular fa-arrow-right\" aria-hidden=\"true\"></i>\n            </a>\n        </td>\n\n        <!-- Dynamic columns -->\n        <td v-for=\"col in visibleColumns\" :key=\"col.key\" :class=\"cellClass(col)\">\n            <!-- Avatar -->\n            <template v-if=\"col.type === 'avatar'\">\n                <a :href=\"entity.urls.show\" class=\"block avatar w-8 h-8 rounded-full cover-background\"\n                   :style=\"{ backgroundImage: `url('${entity.images.thumb}')` }\" :title=\"entity.name\" />\n            </template>\n\n            <!-- Name -->\n            <template v-else-if=\"col.type === 'name'\">\n                <a :href=\"entity.urls.show\" class=\"text-link truncate\"\n                   data-toggle=\"tooltip-ajax\" :data-id=\"entity.id\" :data-url=\"entity.urls.tooltip\">\n                    <span v-if=\"depth > 0\" class=\"text-neutral-content mr-1\" v-html=\"indentPrefix\"></span>\n                    <span v-html=\"entity.name\"></span>\n                </a>\n            </template>\n\n            <!-- Text -->\n            <template v-else-if=\"col.type === 'text'\">\n                <span class=\"truncate\" v-html=\"entity[col.key]\"></span>\n            </template>\n\n            <!-- Icon (boolean or mapped status) -->\n            <template v-else-if=\"col.type === 'icon'\">\n                <i v-if=\"entity[col.key]?.icon\" :class=\"entity[col.key].icon\" v-tippy=\"entity[col.key].tooltip\" aria-hidden=\"true\"></i>\n                <i v-else-if=\"col.icons && col.icons[entity[col.key]]\" :class=\"col.icons[entity[col.key]].icon\" v-tippy=\"col.icons[entity[col.key]].tooltip\" aria-hidden=\"true\"></i>\n                <i v-else-if=\"!col.icons && entity[col.key]\" :class=\"col.icon\" v-tippy=\"col.tooltip\" aria-hidden=\"true\"></i>\n            </template>\n\n            <!-- Single entity link -->\n            <template v-else-if=\"col.type === 'entity'\">\n                <a v-if=\"entityFieldValue(col.key)\" :href=\"entityFieldValue(col.key).url\" class=\"text-link truncate\" v-html=\"entityFieldValue(col.key).name\"></a>\n            </template>\n\n            <!-- Multiple entity links -->\n            <template v-else-if=\"col.type === 'entities'\">\n                <span v-if=\"entity[col.key]?.length\">\n                    <template v-for=\"(item, idx) in entity[col.key]\" :key=\"item.id\">\n                        <a :href=\"item.url\" class=\"text-link\" v-html=\"item.name\"></a>\n                        <span v-if=\"idx < entity[col.key].length - 1\">, </span>\n                    </template>\n                </span>\n            </template>\n\n            <!-- Tags -->\n            <template v-else-if=\"col.type === 'tags'\">\n                <div class=\"flex items-center gap-1 flex-wrap\">\n                    <a v-for=\"tag in entity.tags\" :key=\"tag.id\" :href=\"tag.urls.show\"\n                       :class=\"'tag rounded-full text-xs badge cursor-pointer hover:shadow-xs ' + tag.colour\"\n                       :style=\"tag.colour_style || ''\"\n                       v-html=\"tag.shortname\" :title=\"tag.name\" />\n                </div>\n            </template>\n\n            <!-- Private lock -->\n            <template v-else-if=\"col.type === 'private'\">\n                <i v-if=\"entity.is_private\" class=\"fa-regular fa-lock\" :aria-label=\"i18n.is_private\" :title=\"i18n.is_private\" />\n            </template>\n\n            <!-- Count -->\n            <template v-else-if=\"col.type === 'count'\">\n                <span v-html=\"entity[col.key]\"></span>\n            </template>\n\n            <!-- Calendar date -->\n            <template v-else-if=\"col.type === 'calendar_date'\">\n                <a v-if=\"entity.calendar_date\" :href=\"entity.calendar_date.url\" class=\"text-link\" v-html=\"entity.calendar_date.date\"></a>\n            </template>\n\n            <!-- Map explore link -->\n            <template v-else-if=\"col.type === 'explore'\">\n                <a v-if=\"entity.explore?.url\" :href=\"entity.explore.url\" target=\"_blank\" class=\"text-link\" :title=\"col.tooltip\">\n                    <i class=\"fa-regular fa-map\" aria-hidden=\"true\"></i>\n                </a>\n                <i v-else-if=\"entity.explore?.status === 'error'\" class=\"fa-regular fa-exclamation-triangle text-warning\" :title=\"col.tooltip\" aria-hidden=\"true\"></i>\n                <i v-else-if=\"entity.explore?.status === 'running'\" class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n            </template>\n\n            <!-- Whiteboard draw link -->\n            <template v-else-if=\"col.type === 'draw'\">\n                <a v-if=\"entity.draw?.url\" :href=\"entity.draw.url\" target=\"_blank\" class=\"text-link\" :title=\"col.tooltip\">\n                    <i class=\"fa-regular fa-chalkboard\" aria-hidden=\"true\"></i>\n                </a>\n            </template>\n        </td>\n\n        <!-- Row actions -->\n        <td class=\"w-10 text-center\">\n            <div class=\"dropdown\">\n                <button class=\"cursor-pointer rounded-full w-8 h-8 aspect-square hover:bg-base-200 flex items-center justify-center\"\n                        :ref=\"el => actionsBtnRef = el\"\n                        data-tree=\"escape\">\n                    <i class=\"fa-regular fa-ellipsis-v\" data-tree=\"escape\" aria-hidden=\"true\"></i>\n                </button>\n                <div ref=\"actionsMenuRef\" class=\"flex flex-col gap-1\" >\n                    <a :href=\"entity.urls.relations\" class=\"flex items-center gap-2 px-2 py-1.5 hover:bg-base-200 rounded-xl text-xs text-base-content\">\n                        <i class=\"fa-regular fa-circle-nodes w-5 text-center text-neutral-content\" aria-hidden=\"true\"></i>\n                        <span v-html=\"i18n.relations\"></span>\n                    </a>\n                    <a v-if=\"features?.inventories\" :href=\"entity.urls.inventory\" class=\"flex items-center gap-2 px-2 py-1.5 hover:bg-base-200 rounded-xl text-xs text-base-content\">\n                        <i class=\"fa-regular fa-gem w-5 text-center text-neutral-content\" aria-hidden=\"true\"></i>\n                        <span v-html=\"i18n.inventory\"></span>\n                    </a>\n                    <template v-if=\"entity.can_edit\">\n                        <hr class=\"m-0\" />\n                        <a :href=\"entity.urls.edit\" class=\"flex items-center gap-2 px-2 py-1.5 hover:bg-base-200 rounded-xl text-xs text-base-content\">\n                            <i class=\"fa-regular fa-pencil w-5 text-center text-neutral-content\" aria-hidden=\"true\"></i>\n                            <span v-html=\"i18n.edit\"></span>\n                        </a>\n                    </template>\n                </div>\n            </div>\n        </td>\n    </tr>\n\n    <!-- Expanded children rows -->\n    <template v-if=\"expanded && children.length\">\n        <EntityRow\n            v-for=\"child in children\"\n            :key=\"child.id\"\n            :entity=\"child\"\n            :visible-columns=\"visibleColumns\"\n            :selecting=\"selecting\"\n            :nested=\"nested\"\n            :i18n=\"i18n\"\n            :features=\"features\"\n            :depth=\"depth + 1\"\n            :max-depth=\"maxDepth\"\n            :show-expand-column=\"showExpandColumn\"\n            :on-toggle-child=\"onToggleChild\"\n            @start-selecting=\"emit('startSelecting', $event)\"\n        />\n        <tr v-if=\"hasMoreChildren\">\n            <td :colspan=\"loadMoreColspan\" class=\"text-center py-1\">\n                <button\n                    class=\"btn2 btn-sm btn-ghost text-xs\"\n                    :disabled=\"loadingMoreChildren\"\n                    @click=\"loadMoreChildren\"\n                >\n                    <i v-if=\"loadingMoreChildren\" class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n                    <span v-html=\"i18n.loadMore || 'Load more'\"></span>\n                </button>\n            </td>\n        </tr>\n    </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onBeforeUnmount } from 'vue'\nimport tippy from 'tippy.js'\nimport { useLongPress } from './composables/useLongPress'\n\nconst emit = defineEmits<{\n    startSelecting: [entityId: number]\n}>()\n\nconst props = withDefaults(defineProps<{\n    entity: any\n    visibleColumns: any[]\n    selecting: boolean\n    nested: boolean\n    i18n: any\n    features: any\n    depth?: number\n    maxDepth?: number\n    showExpandColumn: boolean\n    onToggleChild?: (id: number) => void\n}>(), {\n    depth: 0,\n    maxDepth: 3,\n})\n\nconst expanded = ref(false)\nconst children = ref<any[]>([])\nconst loadingChildren = ref(false)\nconst loadingMoreChildren = ref(false)\nconst childrenMeta = ref<{ current_page: number; last_page: number } | null>(null)\n\nconst actionsBtnRef = ref<HTMLElement | null>(null)\nconst actionsMenuRef = ref<HTMLElement | null>(null)\nlet actionsInstance: any = null\n\nonMounted(() => {\n    if (actionsBtnRef.value && actionsMenuRef.value) {\n        actionsMenuRef.value.style.display = ''\n        actionsInstance = tippy(actionsBtnRef.value, {\n            content: actionsMenuRef.value,\n            theme: 'kanka-dropdown',\n            placement: 'bottom-end',\n            interactive: true,\n            trigger: 'click',\n            allowHTML: true,\n            arrow: true,\n            zIndex: 890,\n        })\n    }\n})\n\nonBeforeUnmount(() => {\n    actionsInstance?.destroy()\n})\n\nconst dataAttributes = computed(() => {\n    const attrs: Record<string, any> = {\n        'data-entity-id': props.entity.id,\n        'data-entity-type': props.entity.entityType?.code,\n    }\n    if (props.nested && props.depth > 0) {\n        attrs['aria-level'] = props.depth + 1\n    }\n    if (props.entity.children > 0 && props.nested) {\n        attrs['aria-expanded'] = expanded.value\n    }\n    return attrs\n})\n\nconst indentPrefix = computed(() => {\n    if (props.depth <= 0) return ''\n    let prefix = ''\n    for (let i = 0; i < props.depth; i++) {\n        prefix += '&nbsp;&nbsp;'\n    }\n    return prefix + '└'\n})\n\nconst cellClass = (col: any): string => {\n    if (col.type === 'avatar') return 'w-10'\n    if (col.type === 'name') return 'truncate max-w-fit'\n    if (col.type === 'private') return 'w-10 text-center'\n    if (col.type === 'icon') return 'w-10 text-center'\n    if (col.type === 'explore') return 'w-10 text-center'\n    if (col.type === 'draw') return 'w-10 text-center'\n    return 'hidden lg:table-cell truncate max-w-fit'\n}\n\nconst entityFieldValue = (key: string) => {\n    // For 'parent' column, the API returns 'parent_entity'\n    if (key === 'parent') {\n        return props.entity.parent_entity || null\n    }\n    return props.entity[key] || null\n}\n\nconst handleCheckboxChange = () => {\n    if (!props.selecting) {\n        if (props.depth > 0) {\n            props.entity.selected = true\n        }\n        emit('startSelecting', props.entity.id)\n        return\n    }\n    props.entity.selected = !props.entity.selected\n    if (props.depth > 0) {\n        props.onToggleChild?.(props.entity.id)\n    }\n}\n\nwatch(() => props.selecting, (newVal) => {\n    if (!newVal) {\n        children.value.forEach(c => { c.selected = false })\n    }\n})\n\nlet suppressNextClick = false\nlet lastPointerType = 'mouse'\n\nconst handleContextMenu = (e: MouseEvent) => {\n    if (lastPointerType !== 'mouse') {\n        e.preventDefault()\n    }\n}\n\nconst { start: lpStartInner, cancel: lpCancel, move: lpMove } = useLongPress(() => {\n    if (!props.selecting) {\n        suppressNextClick = true\n        emit('startSelecting', props.entity.id)\n    }\n})\n\nconst lpStart = (e: PointerEvent) => {\n    lastPointerType = e.pointerType\n    lpStartInner(e)\n}\n\nconst handleRowClick = (event: MouseEvent) => {\n    if (suppressNextClick) {\n        event.preventDefault()\n        event.stopPropagation()\n        suppressNextClick = false\n        return\n    }\n    if (props.selecting) {\n        if ((event.target as HTMLElement).closest('input[type=\"checkbox\"]')) {\n            return\n        }\n        event.preventDefault()\n        event.stopPropagation()\n        props.entity.selected = !props.entity.selected\n        if (props.depth > 0) {\n            props.onToggleChild?.(props.entity.id)\n        }\n    }\n}\n\nconst hasMoreChildren = computed(() => {\n    return childrenMeta.value !== null && childrenMeta.value.current_page < childrenMeta.value.last_page\n})\n\nconst loadMoreColspan = computed(() => {\n    let count = props.visibleColumns.length + 1 // +1 for actions column\n    count++ // checkbox column\n    if (props.showExpandColumn) {\n        count++\n    }\n    return count\n})\n\nconst toggleExpand = async () => {\n    if (expanded.value) {\n        expanded.value = false\n        return\n    }\n\n    loadingChildren.value = true\n    try {\n        const response = await fetch(props.entity.urls.children_api)\n        if (!response.ok) {\n            return\n        }\n        const data = await response.json()\n        children.value = data.entities?.data ?? []\n        childrenMeta.value = data.entities?.meta ?? null\n        expanded.value = true\n    } catch {\n        // Network error — silently fail, user can retry\n    } finally {\n        loadingChildren.value = false\n    }\n}\n\nconst loadMoreChildren = async () => {\n    if (!childrenMeta.value || loadingMoreChildren.value) {\n        return\n    }\n    loadingMoreChildren.value = true\n    try {\n        const url = new URL(props.entity.urls.children_api, window.location.origin)\n        url.searchParams.set('page', String(childrenMeta.value.current_page + 1))\n        const response = await fetch(url.toString())\n        if (!response.ok) {\n            return\n        }\n        const data = await response.json()\n        children.value = [...children.value, ...(data.entities?.data ?? [])]\n        childrenMeta.value = data.entities?.meta ?? null\n    } catch {\n        // Network error — silently fail, user can retry\n    } finally {\n        loadingMoreChildren.value = false\n    }\n}\n</script>\n"
  },
  {
    "path": "resources/js/entities/EntityTable.vue",
    "content": "<template>\n    <div class=\"w-full overflow-x-auto\">\n        <table class=\"table table-striped table-entities mb-0 w-full bg-base-100 rounded-2xl\"\n               :role=\"nested ? 'treegrid' : 'grid'\">\n            <thead>\n                <tr>\n                    <th class=\"w-8\" :class=\"selecting ? '' : 'hidden sm:table-cell'\">\n                        <input v-if=\"selecting\" type=\"checkbox\" :checked=\"allSelected\" @change=\"$emit('toggleAll')\" />\n                    </th>\n                    <th v-if=\"nested && entityType?.is_nested\" class=\"w-8\"></th>\n                    <th v-for=\"col in visibleColumns\" :key=\"col.key\"\n                        :class=\"headerClass(col)\">\n                        <button v-if=\"col.sortable\" @click=\"$emit('orderBy', col.key, col.sortKey)\"\n                                class=\"text-link flex items-center gap-1\">\n                            <span v-html=\"col.label\"></span>\n                            <i v-if=\"isOrdering(col.sortKey || col.key)\" :class=\"orderByIcon(col.sortKey || col.key)\"></i>\n                            <i v-else class=\"fa-regular fa-sort text-neutral-content\" aria-hidden=\"true\"></i>\n                        </button>\n                        <span v-else v-html=\"col.label\"></span>\n                    </th>\n                    <th class=\"w-10\"></th>\n                </tr>\n            </thead>\n            <tbody>\n                <template v-for=\"(entity, idx) in entities\" :key=\"entity.id\">\n                    <EntityRow\n                        :entity=\"entity\"\n                        :visible-columns=\"visibleColumns\"\n                        :selecting=\"selecting\"\n                        :nested=\"nested\"\n                        :i18n=\"i18n\"\n                        :features=\"features\"\n                        :show-expand-column=\"nested && entityType?.is_nested\"\n                        :on-toggle-child=\"onToggleChild\"\n                        @start-selecting=\"(id: number) => $emit('startSelecting', id)\"\n                    />\n                    <!-- Ad row -->\n                    <tr v-if=\"ads.enabled && (idx + 1) % ads.frequency === 0\" class=\"adrow\">\n                        <td :colspan=\"totalColumns\" class=\"adrow\" v-html=\"adContent\"></td>\n                    </tr>\n                </template>\n                <tr v-if=\"entities.length === 0\">\n                    <td :colspan=\"totalColumns\" class=\"italic\" v-html=\"i18n.noResults\"></td>\n                </tr>\n            </tbody>\n        </table>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport EntityRow from './EntityRow.vue'\n\nconst props = defineProps<{\n    entities: any[]\n    visibleColumns: any[]\n    selecting: boolean\n    allSelected: boolean\n    nested: boolean\n    i18n: any\n    entityType: any\n    features: any\n    ads: { enabled: boolean; frequency: number }\n    isOrdering: (field: string) => boolean\n    orderByIcon: (field: string) => string\n    adContent?: string\n    onToggleChild?: (id: number) => void\n}>()\n\ndefineEmits<{\n    orderBy: [field: string, sortKey?: string | null]\n    toggleAll: []\n    startSelecting: [entityId: number]\n}>()\n\nconst totalColumns = computed(() => {\n    let count = props.visibleColumns.length + 1 // +1 for actions column\n    count++ // checkbox column is always rendered (hidden on desktop when not selecting)\n    if (props.nested && props.entityType?.is_nested) count++\n    return count\n})\n\nconst headerClass = (col: any): string => {\n    if (col.type === 'avatar') return 'w-10'\n    if (col.type === 'name') return 'dg-name'\n    if (col.type === 'private') return 'w-10 text-center'\n    if (col.type === 'icon') return 'w-10 text-center'\n    if (col.type === 'explore') return 'w-10 text-center'\n    if (col.type === 'draw') return 'w-10 text-center'\n    return 'hidden lg:table-cell'\n}\n</script>\n"
  },
  {
    "path": "resources/js/entities/composables/useBulkActions.ts",
    "content": "import { ref, type Ref } from 'vue'\n\nexport function useBulkActions(entities: Ref<any[]>) {\n    const selecting = ref(false)\n    const childSelectedIds = ref<Set<number>>(new Set())\n\n    const toggleSelecting = () => {\n        selecting.value = !selecting.value\n        entities.value.forEach(e => {\n            e.selected = false\n        })\n        childSelectedIds.value = new Set()\n    }\n\n    const allSelected = (): boolean =>\n        entities.value.length > 0 && entities.value.every(e => e.selected)\n\n    const toggleAll = () => {\n        if (!entities.value.length) return\n        const shouldSelect = !allSelected()\n        entities.value.forEach(e => {\n            e.selected = shouldSelect\n        })\n        if (!shouldSelect) {\n            childSelectedIds.value = new Set()\n        }\n    }\n\n    const toggleChildId = (id: number) => {\n        const ids = new Set(childSelectedIds.value)\n        if (ids.has(id)) {\n            ids.delete(id)\n        } else {\n            ids.add(id)\n        }\n        childSelectedIds.value = ids\n    }\n\n    const selectedEntityIds = (): number[] => {\n        const topLevel = entities.value.filter(e => e.selected).map(e => e.id)\n        return [...new Set([...topLevel, ...childSelectedIds.value])]\n    }\n\n    const bulkDialog = (url: string, actionsBtn?: HTMLElement) => {\n        (actionsBtn as any)?._tippy?.hide()\n        const ids = selectedEntityIds()\n        if (ids.length === 0) return\n\n        const parsedUrl = new URL(url, window.location.origin)\n        ids.forEach(id => {\n            parsedUrl.searchParams.append('entities[]', String(id))\n        })\n\n        ;(window as any).openDialog('primary-dialog', parsedUrl.toString())\n    }\n\n    const bulkPrint = (printForm: HTMLFormElement | null, actionsBtn?: HTMLElement) => {\n        (actionsBtn as any)?._tippy?.hide()\n        const ids = selectedEntityIds()\n        if (ids.length === 0) return\n        printForm?.submit()\n    }\n\n    return {\n        selecting,\n        toggleSelecting,\n        toggleAll,\n        allSelected,\n        selectedEntityIds,\n        toggleChildId,\n        bulkDialog,\n        bulkPrint,\n    }\n}\n"
  },
  {
    "path": "resources/js/entities/composables/useColumns.ts",
    "content": "import { ref, computed, type Ref } from 'vue'\n\nexport interface ColumnsOptions {\n    preferencesUrl: string\n    csrf: string\n}\n\ninterface ColumnDefinition {\n    key: string\n    type: string\n    label: string | null\n    sortable: boolean\n    sortKey?: string | null\n    alwaysVisible?: boolean\n    adminOnly?: boolean\n    moduleGate?: string | null\n    icon?: string | null\n    tooltip?: string | null\n}\n\nexport function useColumns(options: ColumnsOptions) {\n    const availableColumns: Ref<ColumnDefinition[]> = ref([])\n    const visibleColumnKeys: Ref<string[]> = ref([])\n    let debounceTimer: ReturnType<typeof setTimeout> | null = null\n\n    const setColumns = (columns: ColumnDefinition[], preferences: string[]) => {\n        availableColumns.value = columns\n        visibleColumnKeys.value = preferences\n    }\n\n    const visibleColumns = computed(() => {\n        return availableColumns.value.filter(\n            col => col.alwaysVisible || visibleColumnKeys.value.includes(col.key)\n        )\n    })\n\n    const isColumnVisible = (key: string): boolean => {\n        const col = availableColumns.value.find(c => c.key === key)\n        if (col?.alwaysVisible) return true\n        return visibleColumnKeys.value.includes(key)\n    }\n\n    const toggleColumn = (key: string) => {\n        const col = availableColumns.value.find(c => c.key === key)\n        if (col?.alwaysVisible) return\n\n        const idx = visibleColumnKeys.value.indexOf(key)\n        if (idx > -1) {\n            visibleColumnKeys.value.splice(idx, 1)\n        } else {\n            visibleColumnKeys.value.push(key)\n        }\n\n        persistPreferences()\n    }\n\n    const resetToDefaults = () => {\n        if (!options.preferencesUrl) return\n\n        fetch(options.preferencesUrl, {\n            method: 'DELETE',\n            headers: {\n                'X-CSRF-TOKEN': options.csrf,\n            },\n        }).then(() => {\n            window.location.reload()\n        })\n    }\n\n    const persistPreferences = () => {\n        if (!options.preferencesUrl) return\n\n        if (debounceTimer) clearTimeout(debounceTimer)\n        debounceTimer = setTimeout(() => {\n            fetch(options.preferencesUrl, {\n                method: 'PATCH',\n                headers: {\n                    'Content-Type': 'application/json',\n                    'X-CSRF-TOKEN': options.csrf,\n                },\n                body: JSON.stringify({ columns: visibleColumnKeys.value }),\n            })\n        }, 500)\n    }\n\n    return {\n        availableColumns,\n        visibleColumnKeys,\n        visibleColumns,\n        setColumns,\n        isColumnVisible,\n        toggleColumn,\n        resetToDefaults,\n    }\n}\n"
  },
  {
    "path": "resources/js/entities/composables/useEntityApi.ts",
    "content": "import { ref, type Ref } from 'vue'\n\ninterface EntityApiOptions {\n    api: string\n}\n\nexport function useEntityApi(options: EntityApiOptions) {\n    const entities: Ref<any[]> = ref([])\n    const entitiesData: Ref<any> = ref(null)\n    const parent: Ref<any> = ref(null)\n    const csrf: Ref<string> = ref('')\n    const loading = ref(true)\n    const paginating = ref(false)\n    const apiError = ref(false)\n    const columns: Ref<any[]> = ref([])\n    const columnPreferences: Ref<string[]> = ref([])\n    const ads: Ref<{ enabled: boolean; frequency: number }> = ref({ enabled: false, frequency: 7 })\n\n    const importEntities = (response: any) => {\n        entities.value = []\n        entitiesData.value = response.entities\n        response.entities.data.forEach((a: any) => {\n            entities.value.push(a)\n        })\n        csrf.value = response.csrf\n        columns.value = response.columns ?? []\n        columnPreferences.value = response.columnPreferences ?? []\n        ads.value = response.ads ?? { enabled: false, frequency: 7 }\n    }\n\n    const fetchEntities = (url: string) => {\n        return fetch(url)\n            .then(response => response.json())\n            .then(response => {\n                if (response.error) {\n                    apiError.value = true\n                    return response\n                }\n                apiError.value = false\n                importEntities(response)\n                return response\n            })\n            .catch(() => {\n                apiError.value = true\n            })\n    }\n\n    const loadInitial = () => {\n        return fetchEntities(currentApiUrl())\n    }\n\n    const currentApiUrl = (): string => {\n        const apiUrl = new URL(options.api, window.location.origin)\n        // Use only browser URL params — do not carry over any params baked into options.api\n        // (e.g. parent_id from a bookmarked URL), so back-navigation correctly clears parent_id.\n        apiUrl.search = ''\n        const browserParams = new URLSearchParams(window.location.search)\n        browserParams.forEach((value, key) => {\n            apiUrl.searchParams.append(key, value)\n        })\n        return apiUrl.toString()\n    }\n\n    const loadPage = (page: number) => {\n        paginating.value = true\n        const url = addToUrl(currentApiUrl(), 'page', String(page))\n        return fetchEntities(url).then(() => {\n            paginating.value = false\n        })\n    }\n\n    const addToUrl = (url: string, param: string, value: string): string => {\n        const urlObject = new URL(url, window.location.origin)\n        urlObject.searchParams.set(param, value)\n        return urlObject.toString()\n    }\n\n    return {\n        entities,\n        entitiesData,\n        parent,\n        csrf,\n        loading,\n        paginating,\n        apiError,\n        columns,\n        columnPreferences,\n        ads,\n        fetchEntities,\n        loadInitial,\n        loadPage,\n        addToUrl,\n        currentApiUrl,\n    }\n}\n"
  },
  {
    "path": "resources/js/entities/composables/useLayout.ts",
    "content": "import { ref } from 'vue'\n\ninterface LayoutOptions {\n    initialMode: string\n    api: string\n    preferencesUrl: string\n    csrf: string\n    fetchEntities: (url: string) => Promise<any>\n    addToUrl: (url: string, param: string, value: string) => string\n}\n\nexport function useLayout(options: LayoutOptions) {\n    const layout = ref(options.initialMode)\n\n    const isGrid = (): boolean => layout.value === 'grid'\n\n    const currentApiUrl = (): string => {\n        const apiUrl = new URL(options.api, window.location.origin)\n        const browserParams = new URLSearchParams(window.location.search)\n        browserParams.forEach((value, key) => {\n            apiUrl.searchParams.set(key, value)\n        })\n        return apiUrl.toString()\n    }\n\n    const switchLayout = () => {\n        layout.value = isGrid() ? 'table' : 'grid'\n\n        const url = options.addToUrl(currentApiUrl(), 'm', layout.value)\n        options.fetchEntities(url)\n\n        // Sync browser URL\n        const currentUrl = new URL(window.location.href)\n        currentUrl.searchParams.set('m', layout.value)\n        window.history.pushState({}, '', currentUrl)\n\n        // Persist preference\n        if (options.preferencesUrl) {\n            fetch(options.preferencesUrl, {\n                method: 'PATCH',\n                headers: {\n                    'Content-Type': 'application/json',\n                    'X-CSRF-TOKEN': options.csrf,\n                },\n                body: JSON.stringify({ layout: layout.value }),\n            })\n        }\n    }\n\n    return {\n        layout,\n        isGrid,\n        switchLayout,\n    }\n}\n"
  },
  {
    "path": "resources/js/entities/composables/useLongPress.ts",
    "content": "const LONG_PRESS_DELAY = 500\nconst MOVE_THRESHOLD = 10\n\nexport function useLongPress(onLongPress: () => void) {\n    let timer: ReturnType<typeof setTimeout> | null = null\n    let startX = 0\n    let startY = 0\n\n    const start = (e: PointerEvent) => {\n        if (e.pointerType === 'mouse') return\n        startX = e.clientX\n        startY = e.clientY\n        timer = setTimeout(() => {\n            timer = null\n            onLongPress()\n        }, LONG_PRESS_DELAY)\n    }\n\n    const cancel = () => {\n        if (timer !== null) {\n            clearTimeout(timer)\n            timer = null\n        }\n    }\n\n    const move = (e: PointerEvent) => {\n        if (Math.abs(e.clientX - startX) > MOVE_THRESHOLD || Math.abs(e.clientY - startY) > MOVE_THRESHOLD) {\n            cancel()\n        }\n    }\n\n    return { start, cancel, move }\n}\n"
  },
  {
    "path": "resources/js/entities/composables/useNesting.ts",
    "content": "import { ref } from 'vue'\n\ninterface NestingOptions {\n    api: string\n    preferencesUrl: string\n    csrf: string\n    fetchEntities: (url: string) => Promise<any>\n    addToUrl: (url: string, param: string, value: string) => string\n}\n\nexport function useNesting(options: NestingOptions) {\n    const nested = ref(true)\n    const nesting = ref(false)\n\n    const setNested = (value: boolean) => {\n        nested.value = value\n    }\n\n    const currentApiUrl = (): string => {\n        const apiUrl = new URL(options.api, window.location.origin)\n        const browserParams = new URLSearchParams(window.location.search)\n        browserParams.forEach((value, key) => {\n            apiUrl.searchParams.set(key, value)\n        })\n        return apiUrl.toString()\n    }\n\n    const switchMode = () => {\n        nesting.value = true\n        nested.value = !nested.value\n\n        const url = options.addToUrl(currentApiUrl(), 'n', nested.value ? '1' : '0')\n        options.fetchEntities(url).then(() => {\n            nesting.value = false\n        })\n\n        // Sync browser URL\n        const currentUrl = new URL(window.location.href)\n        currentUrl.searchParams.set('n', nested.value ? '1' : '0')\n        window.history.pushState({}, '', currentUrl)\n\n        // Persist preference\n        if (options.preferencesUrl) {\n            fetch(options.preferencesUrl, {\n                method: 'PATCH',\n                headers: {\n                    'Content-Type': 'application/json',\n                    'X-CSRF-TOKEN': options.csrf,\n                },\n                body: JSON.stringify({ nested: nested.value }),\n            })\n        }\n    }\n\n    return {\n        nested,\n        nesting,\n        setNested,\n        switchMode,\n    }\n}\n"
  },
  {
    "path": "resources/js/entities/composables/useOrdering.ts",
    "content": "import { ref, type Ref } from 'vue'\n\ninterface OrderingOptions {\n    api: string\n    fetchEntities: (url: string) => Promise<any>\n    addToUrl: (url: string, param: string, value: string) => string\n}\n\nexport function useOrdering(options: OrderingOptions) {\n    const order: Ref<Record<string, string>> = ref({})\n    const ordering = ref(false)\n\n    const setOrder = (orderData: Record<string, string>) => {\n        order.value = orderData\n    }\n\n    const currentApiUrl = (): string => {\n        const apiUrl = new URL(options.api, window.location.origin)\n        const browserParams = new URLSearchParams(window.location.search)\n        browserParams.forEach((value, key) => {\n            apiUrl.searchParams.set(key, value)\n        })\n        return apiUrl.toString()\n    }\n\n    const orderBy = (field: string, sortKey?: string | null) => {\n        ordering.value = true\n        const sortField = sortKey || field\n\n        const url = new URL(currentApiUrl())\n        const currentUrl = new URL(window.location.href)\n\n        url.searchParams.delete('reset-filter')\n        currentUrl.searchParams.delete('reset-filter')\n\n        if (isOrderingAscending(sortField)) {\n            // ASC → DESC\n            url.searchParams.set('order', sortField)\n            url.searchParams.set('desc', '1')\n            currentUrl.searchParams.set('order', sortField)\n            currentUrl.searchParams.set('desc', '1')\n            order.value = { [sortField]: 'DESC' }\n        } else if (isOrdering(sortField)) {\n            // DESC → reset (clear sort)\n            url.searchParams.set('order', 'clear')\n            url.searchParams.delete('desc')\n            currentUrl.searchParams.delete('order')\n            currentUrl.searchParams.delete('desc')\n            order.value = {}\n        } else {\n            // Not sorted → ASC\n            url.searchParams.set('order', sortField)\n            url.searchParams.delete('desc')\n            currentUrl.searchParams.set('order', sortField)\n            currentUrl.searchParams.delete('desc')\n            order.value = { [sortField]: 'ASC' }\n        }\n\n        options.fetchEntities(url.toString()).then(() => {\n            ordering.value = false\n        })\n\n        window.history.pushState({}, '', currentUrl)\n    }\n\n    const isOrdering = (field: string): boolean => {\n        return !!order.value[field]\n    }\n\n    const isOrderingAscending = (field: string): boolean => {\n        return order.value[field] === 'ASC'\n    }\n\n    const orderByClass = (field: string): string => {\n        const css = 'flex items-center gap-2 px-2'\n        return isOrdering(field) ? css + ' font-extrabold' : css\n    }\n\n    const orderByIcon = (field: string): string => {\n        return isOrderingAscending(field)\n            ? 'fa-regular fa-arrow-down-a-z'\n            : 'fa-regular fa-arrow-down-z-a'\n    }\n\n    return {\n        order,\n        ordering,\n        setOrder,\n        orderBy,\n        isOrdering,\n        isOrderingAscending,\n        orderByClass,\n        orderByIcon,\n    }\n}\n"
  },
  {
    "path": "resources/js/entities/composables/usePerPage.ts",
    "content": "import { ref, type Ref } from 'vue'\n\ninterface PerPageOptions {\n    api: string\n    preferencesUrl: string\n    csrf: string\n    fetchEntities: (url: string) => Promise<any>\n    addToUrl: (url: string, param: string, value: string) => string\n    subscribeUrl: string\n    isSubscriber: boolean\n}\n\nexport function usePerPage(options: PerPageOptions) {\n    const perPage: Ref<number> = ref(25)\n    const isSubscriber: Ref<boolean> = ref(options.isSubscriber)\n    const loading: Ref<boolean> = ref(false)\n    const perPageOptions: Ref<number[]> = ref([])\n    const subscriberPerPageOptions: Ref<number[]> = ref([])\n\n    const setPerPage = (value: number) => {\n        perPage.value = value\n    }\n\n    const setSubscriber = (value: boolean) => {\n        isSubscriber.value = value\n    }\n\n    const setOptions = (opts: number[], subscriberOpts: number[]) => {\n        perPageOptions.value = opts\n        subscriberPerPageOptions.value = subscriberOpts\n    }\n\n    const isSubscriberOnly = (value: number): boolean => {\n        return subscriberPerPageOptions.value.includes(value)\n    }\n\n    // Mirrors the currentApiUrl() pattern used in useNesting and useLayout:\n    // start from options.api, layer in all current browser params so filters/order etc. are preserved.\n    const currentApiUrl = (): string => {\n        const apiUrl = new URL(options.api, window.location.origin)\n        const browserParams = new URLSearchParams(window.location.search)\n        browserParams.forEach((value, key) => {\n            apiUrl.searchParams.set(key, value)\n        })\n        return apiUrl.toString()\n    }\n\n    const selectPerPage = (value: number) => {\n        if (!perPageOptions.value.includes(value)) return\n\n        if (isSubscriberOnly(value) && !isSubscriber.value) {\n            ;(window as any).openDialog('primary-dialog', options.subscribeUrl)\n            return\n        }\n\n        perPage.value = value\n\n        // Re-fetch from page 1 with the new per_page param\n        const fetchUrl = options.addToUrl(\n            options.addToUrl(currentApiUrl(), 'pp', String(value)),\n            'page', '1'\n        )\n        loading.value = true\n        options.fetchEntities(fetchUrl).finally(() => {\n            loading.value = false\n        })\n\n        // Sync browser URL\n        const currentUrl = new URL(window.location.href)\n        currentUrl.searchParams.set('pp', String(value))\n        currentUrl.searchParams.delete('page')\n        window.history.pushState({}, '', currentUrl)\n\n        // Persist preference\n        if (options.preferencesUrl) {\n            fetch(options.preferencesUrl, {\n                method: 'PATCH',\n                headers: {\n                    'Content-Type': 'application/json',\n                    'Accept': 'application/json',\n                    'X-CSRF-TOKEN': options.csrf,\n                },\n                body: JSON.stringify({ per_page: value }),\n            })\n        }\n    }\n\n    return {\n        perPage,\n        isSubscriber,\n        loading,\n        perPageOptions,\n        subscriberPerPageOptions,\n        setPerPage,\n        setSubscriber,\n        setOptions,\n        isSubscriberOnly,\n        selectPerPage,\n    }\n}\n"
  },
  {
    "path": "resources/js/entities/explore.js",
    "content": "import { createApp } from 'vue'\nimport VueTippy from 'vue-tippy'\nimport EntityListing from './EntityListing.vue'\n\nconst app = createApp({})\napp.use(VueTippy, { theme: 'kanka' })\napp.component('entities-explorer', EntityListing)\napp.mount('#entities-explorer')\n"
  },
  {
    "path": "resources/js/entities.js",
    "content": "/**\n * Expand/Collapse all posts on the overview of an entity\n */\nconst registerStoryActions = () => {\n    const collapse = document.querySelector('.btn-post-collapse');\n    collapse?.addEventListener('click', function (e) {\n        e.preventDefault();\n        let elements = document.querySelectorAll('.element-toggle');\n        elements.forEach((e) => {\n            e.classList.add('animate-collapsed');\n            let target = document.querySelector(e.dataset.target);\n            target.classList.add('hidden');\n        });\n    });\n\n    const expand = document.querySelector('.btn-post-expand');\n    expand?.addEventListener('click', function (e) {\n        e.preventDefault();\n        let elements = document.querySelectorAll('.element-toggle');\n        elements.forEach((e) => {\n            e.classList.remove('animate-collapsed');\n            let target = document.querySelector(e.dataset.target);\n            target.classList.remove('hidden');\n        });\n    });\n};\n\n\n/*\n *\n */\nconst registerStoryLoadMore = () => {\n    const more = document.querySelector('.story-load-more');\n    more?.addEventListener('click', function (e) {\n        e.preventDefault();\n\n        this.classList.add('loading');\n\n        axios.get(this.dataset.url)\n            .then(result => {\n                more.parentNode.remove();\n                console.log(result);\n                document.querySelector('.entity-posts').insertAdjacentHTML('beforeend', result.data);\n                registerStoryLoadMore();\n                registerStoryActions();\n                window.triggerEvent();\n            })\n            .catch(() => {\n                more.classList.remove('loading');\n            });\n        return false;\n    });\n};\n\n/**\n * When clicking on an entity link to an external domain, give the user the opportunity\n * to trust the domain to not be asked again in the future if they are okay with leaving kanka.\n */\nconst registerTrustDomain = () => {\n    const btn = document.querySelector('.domain-trust');\n    if (!btn) {\n        return;\n    }\n    btn.addEventListener('click', function (e) {\n        const cookieName = 'kanka_trusted_domains';\n\n        let keyValue = document.cookie.match('(^|;) ?' + cookieName + '=([^;]*)(;|$)');\n        keyValue = keyValue ? keyValue[2] : '';\n\n        // If not yet in it\n        const newDomain = btn.dataset.domain;\n        if (!keyValue.includes(newDomain)) {\n            if (keyValue) {\n                keyValue += '|';\n            }\n            keyValue += newDomain;\n        }\n\n        let expires = new Date();\n        expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000));\n        document.cookie = cookieName + '=' + keyValue + ';path=/;expires=' + expires.toUTCString() + ';sameSite=Strict';\n    });\n};\n\n/**\n * When loading an entity, a post anchor might be set but not visible due to pagination\n */\nconst registerLoadAnchorPost = () => {\n    let postId = window.location.hash.substring(1); // Remove the '#' character\n    if (!postId) {\n        return;\n    }\n    let selector = document.getElementById(postId);\n    if (selector) {\n        return;\n    }\n\n    // Try loading from the backend\n    let config = document.getElementById('post-anchor-loader');\n    if (!config) {\n        return;\n    }\n\n    let realPostId = postId.match(/\\d+$/);\n    let url = config.dataset.url.replace('/0', '/' + realPostId);\n    axios.get(url)\n        .then(res => {\n            config.insertAdjacentHTML('afterbegin', res.data);\n\n            selector = document.getElementById(postId);\n            window.scrollTo({\n                top: selector.offsetTop,\n                behavior: 'smooth'\n            });\n        });\n};\n\n\nregisterStoryActions();\nregisterStoryLoadMore();\nregisterTrustDomain();\nregisterLoadAnchorPost();\n"
  },
  {
    "path": "resources/js/events.js",
    "content": "const defaultKey = 'kanka.default';\nwindow.triggerEvent = function (key) {\n    key = key || defaultKey;\n    const event = new Event(key);\n    document.dispatchEvent(event);\n};\n\nwindow.onEvent = function(callback, key) {\n    key = key || defaultKey;\n    document.addEventListener(key, callback);\n};\n\n// Sometimes we want assets to finish loading, like an image\nwindow.onReady = function (fn) {\n    // see if DOM is already available\n    if (document.readyState === \"complete\" || document.readyState === \"interactive\") {\n        // call on next available tick\n        setTimeout(fn, 1);\n    } else {\n        document.addEventListener(\"DOMContentLoaded\", fn);\n    }\n};\n"
  },
  {
    "path": "resources/js/family-tree-vue.js",
    "content": "import { createApp } from 'vue'\nimport mitt from 'mitt'\nimport FamilyTree from \"./components/families/FamilyTree.vue\";\nimport FamilyNode from \"./components/families/FamilyNode.vue\";\nimport FamilyEntity from \"./components/families/FamilyEntity.vue\";\nimport FamilyRelations from \"./components/families/FamilyRelations.vue\";\nimport FamilyRelation from \"./components/families/FamilyRelation.vue\";\nimport FamilyChildren from \"./components/families/FamilyChildren.vue\";\nimport RelationLine from \"./components/families/RelationLine.vue\";\nimport ChildrenLine from \"./components/families/ChildrenLine.vue\";\nimport FamilyParentChildrenLine from \"./components/families/FamilyParentChildrenLine.vue\";\nconst emitter = mitt()\n\nconst app = createApp({})\napp.config.globalProperties.emitter = emitter\napp.config.globalProperties.entityHeight = 60\napp.config.globalProperties.entityWidth = 200\napp.component('family-tree', FamilyTree)\napp.component('FamilyNode', FamilyNode)\napp.component('FamilyEntity', FamilyEntity)\napp.component('FamilyRelations', FamilyRelations)\napp.component('FamilyRelation', FamilyRelation)\napp.component('FamilyChildren', FamilyChildren)\napp.component('RelationLine', RelationLine)\napp.component('ChildrenLine', ChildrenLine)\napp.component('FamilyParentChildrenLine', FamilyParentChildrenLine)\napp.mount('#family-tree');\n\n\nwindow.ftTexts = {};\n\n/**\n * Figure out the width of a child (when drawing a relation). This is used when calculating where to draw the next node\n * (the next relation)\n * @param child\n * @param index\n */\nwindow.familyTreeChildWidth = function(child, index) {\n    if (child.relations === undefined || child.relations.length === 0) {\n        return 1;\n    }\n    // The minimum width based on the topmost elements. Since the first child starts below the first parent, we go\n    // back 1\n    let size = -1;\n\n    /**\n     * Loop on each of the child's relations, making this node wider (for each relation's size)\n     * If it's just 3 relations, the node is 1+3 (relations) wide\n     */\n    child.relations.forEach(rel => {\n        // Relation ads at least 1 width\n        size++;\n        if (rel.children !== undefined && rel.children.length > 0) {\n            // If there are children, we start back at 0 because the node + rel already counts as two\n            /*if (rel.children.length > 1) {\n                min -= 2;\n            } else if (rel.children.length > 0 && index === 0) {\n                min -= 1;\n            }*/\n            /**\n             * Loop each child of the relation, looking for the \"widest\" one\n             * On each child, we need to get its total width (child + relation + children) and add it to the width\n             * of the current child\n             */\n            rel.children.forEach((c, i) => {\n                // Get each child's width, (child + relations + their children) and add it to the size.\n                // Deduct one because each child starts on a new line and is pushed left\n                let childWidth = window.familyTreeChildWidth(c, index);\n                //console.log(c.entity_id, 'childWidth', childWidth);\n                size += childWidth;\n            });\n        }\n    });\n\n    // The minimum width, in case a child has two relations but no children, if the amount of relations + itself\n    let minWidth = child.relations.length + 1;\n    // Get the largest calculated size\n    return Math.max(minWidth, size);\n};\n\n/**\n * Count how wide a relation is, counting itself + all of its children\n */\nwindow.familyTreeRelationWidth = function(relation, index) {\n    // The first relation counts for 2 spaces (the source + itself), while any more relations could for just one\n    let min = index === 0 ? 2 : 1;\n    // If a relation has no children, then it's simple, we use the \"min\" size of the relation\n    if (relation.children === undefined || relation.children.length === 0) {\n        return min;\n    }\n\n    // Since we have a minimum size, we start at 0\n    let size = 0;\n\n    let directSize = 0;\n    let hasSubBranch = false;\n\n    // Let's find out just how wide this relation is\n    relation.children.forEach((child, i) => {\n        directSize++;\n        // Each relation increases the size by at least one\n        if (i > 0) {\n            size++;\n        }\n        if (child.relations !== undefined && child.relations.length > 0) {\n            // For each of the relation's children, calculate their width, and add that to the current size\n            child.relations.forEach((c, i2) => {\n                directSize++;\n\n\n                if (c.children !== undefined && c.children.length > 0) {\n                    hasSubBranch = true;\n                }\n                let tmp = window.familyTreeRelationWidth(c, i2);\n\n                //console.log(i2, c.entity_id, 'relWidth', '(min: ', min, ')', 'tmp', tmp);\n\n                // No idea why this works, but it does. It sometimes makes too much space\n                if (i === 0 && tmp > 2) {\n                    directSize += (tmp - 2);\n                } /*else if (i > 0 && tmp > 1) {\n                    directSize += (tmp - 1);\n                }*/\n                size += tmp;\n                //size += tmp;\n            });\n        }\n    });\n\n    // If this branch has no subbranches, use the easy count as the value, otherwise it can get tricky\n    if (!hasSubBranch) {\n        return Math.max(directSize, min);\n    }\n\n    // Return the size of the tree, or the size of the children,\n    // if none of the children have relations and their own children\n    min = Math.max(directSize, min);\n\n    let final = Math.max(min, size);\n    return Math.max(min, size);\n};\n\n"
  },
  {
    "path": "resources/js/forms/calendar-date.js",
    "content": "\nlet calendarAdd, calendarForm, calendarField, calendarHiddenField;\nlet calendarMonthField, calendarYearField, calendarDayField;\nlet calendarCancel, calendarLoading, calendarSubForm;\nlet calendarModalForm;\n\nwindow.onEvent(function() {\n    registercalendarModal();\n});\n\nconst registerReminderForm = () => {\n    calendarAdd = document.querySelector('#entity-calendar-form-add');\n    calendarField = document.querySelector('select[name=\"calendar_id\"]');\n    calendarHiddenField = document.querySelector('[name=\"calendar_id\"]'); // Campaigns with a single calendar\n    calendarModalForm = document.querySelector('.entity-calendar-modal-form');\n    calendarSubForm = document.querySelector('.entity-calendar-subform');\n    calendarCancel = document.querySelector('#entity-calendar-form-cancel');\n    calendarForm = document.querySelector('.entity-calendar-form');\n    calendarYearField = document.querySelector('input[name=\"calendar_year\"]');\n    calendarMonthField = document.querySelector('[name=\"calendar_month\"]');\n    calendarDayField = document.querySelector('#reminder_day');\n    calendarLoading = document.querySelector('.entity-calendar-loading');\n\n    if (calendarAdd) {\n        calendarAdd.addEventListener('click', function (e) {\n            e.preventDefault();\n\n            let defaultCalendarId = calendarAdd.dataset.defaultCalendar;\n            if (defaultCalendarId) {\n                calendarHiddenField.value = defaultCalendarId;\n                calendarSubForm.classList.remove('hidden');\n                loadCalendarDates(defaultCalendarId);\n            }\n            return false;\n        });\n\n        calendarCancel.addEventListener('click', function (e) {\n            e.preventDefault();\n            if (calendarField) {\n                calendarField.value = null;\n            }\n            calendarHiddenField.value = null;\n        });\n    }\n\n    if (calendarField) {\n        calendarField.onchange = element => {\n            // No new calendar selected? hide everything again\n            console.log('hello mlord');\n            if (!calendarField.value) {\n                calendarSubForm.classList.add('hidden');\n                return false;\n            }\n            calendarSubForm.classList.remove('hidden');\n            // Load month list\n            calendarYearField = document.querySelector('input[name=\"calendar_year\"]');\n            calendarMonthField = document.querySelector('[name=\"calendar_month\"]');\n            calendarDayField = document.querySelector('#reminder_day');\n\n            if (!calendarYearField && document.querySelector('input[name=\"year\"]')) {\n                calendarYearField = document.querySelector('input[name=\"year\"]');\n                calendarMonthField = document.querySelector('select[name=\"month\"]');\n                calendarDayField = document.querySelector('#reminder_day');\n            }\n            loadCalendarDates(calendarField.value);\n        };\n    }\n\n    registerMonthChange();\n};\n\nconst registercalendarModal = () => {\n    if (!document.getElementById('entity-calendar-modal-add')) {\n        return;\n    }\n    calendarAdd = document.querySelector('input[name=calendar-data-url]');\n    calendarField = document.querySelector('[name=\"calendar_id\"]');\n    calendarYearField = document.querySelector('input[name=\"year\"]');\n    calendarMonthField = document.querySelector('select[name=\"month\"]');\n    calendarDayField = document.querySelector('#reminder_day');\n    calendarLoading = document.querySelector('.entity-calendar-loading');\n    calendarSubForm = document.querySelector('.entity-calendar-subform');\n\n    if (calendarField) {\n        calendarField.onchange = event => {\n            // No new calendar selected? hide everything again\n            if (!calendarField.value) {\n                calendarSubForm.classList.add('hidden');\n                return;\n            }\n            // Load month list\n            loadCalendarDates(calendarField.value);\n            calendarSubForm.classList.remove('hidden');\n        };\n\n        //var defaultCalendarId = calendarAdd.data('default-calendar');\n        if (calendarField?.value) {\n            loadCalendarDates(calendarField.value);\n        }\n    }\n\n\n    const lengthField = document.querySelector('.entity-calendar-subform input[name=\"length\"]');\n    if (lengthField) {\n        lengthField.addEventListener('focusout', function () {\n            if (!this.value) {\n                return;\n            }\n            const url = this.dataset.url.replace('/0/', '/' + calendarField.value + '/');\n\n            const params = {\n                day: calendarDayField.value,\n                month: calendarMonthField.value,\n                year: calendarYearField.value,\n                length: this.value,\n            };\n\n            axios.get(url, {data: params}).then(res => {\n                const warning = document.querySelector('.length-warning');\n                if (res.data.overflow == true) {\n                    warning.classList.remove('hidden');\n                } else {\n                    warning.classList.add('hidden');\n                }\n            });\n        });\n    }\n    registerMonthChange();\n};\n\n/**\n *\n * @param calendarID\n */\nconst loadCalendarDates = (calendarID) => {\n    calendarLoading.classList.remove('hidden');\n\n    calendarID = parseInt(calendarID);\n    const url = document.querySelector('input[name=\"calendar-data-url\"]').dataset.url.replace('/0/', '/' + calendarID + '/');\n    fetch(url)\n        .then((response) => response.json())\n        .then(data => {\n            let selectedDay = calendarDayField.value;\n            calendarYearField.innerHTML = '';\n            calendarMonthField.innerHTML = '';\n            calendarDayField.innerHTML = '';\n            let id = 1;\n            let monthLength = 1;\n            if (!selectedDay) {\n                selectedDay = data.current.day;\n            }\n            let currentMonth = parseInt(data.current.month);\n            const months = Object.entries(data.months);\n            months.forEach((position, i) => {\n                const option = document.createElement('option');\n                option.text = position[1].name;\n                option.value = i + 1;\n                if (position[0] === currentMonth) {\n                    option.selected = true;\n                }\n                option.dataset.length = position[1].length;\n                calendarMonthField.appendChild(option);\n\n                if (id === currentMonth) {\n                    monthLength = position[1].length;\n                }\n                id++;\n            });\n\n            for (let d = 1; d <= monthLength; d++) {\n                const option = document.createElement('option');\n                option.text = d;\n                option.value = d;\n                if (d == selectedDay) {\n                    option.selected = true;\n                }\n                calendarDayField.appendChild(option);\n            }\n            calendarLoading.classList.add('hidden');\n\n            calendarYearField.value = data.current.year;\n\n            // Put new options\n            const periodField = document.querySelector('select.reminder-periodicity');\n            while (periodField.options.length > 0) {\n                periodField.options.remove(0);\n            }\n\n            const options = Object.entries(data.recurring);\n            options.forEach((position, i) => {\n                //console.log('moon', key, value);\n                const option = document.createElement('option');\n                option.value = position[0];\n                option.text = position[1];\n                periodField.appendChild(option);\n            });\n\n            document.querySelector('#reminder_length').value = 1;\n\n            // However, if there is only one result, select id.\n            if (data.length === 1) {\n                calendarMonthField.value = data[0].id;\n            }\n        });\n};\n\n/**\n * Fire an event whenever the month field is changed\n */\nconst registerMonthChange = () => {\n    const field = document.querySelector('#reminder_month');\n    if (!field) {\n        return;\n    }\n    field.addEventListener('change', function (event) {\n        const selected = field.options[field.selectedIndex];\n        const length = selected.dataset.length;\n        rebuildCalendarDayList(length);\n    });\n};\n\n/**\n * Rebuild the calendar day select, and select the current date\n * @param max\n */\nconst rebuildCalendarDayList = (max) => {\n    let selectedDay = parseInt(calendarDayField.value);\n    max = parseInt(max);\n    if (selectedDay > max) {\n        selectedDay = max;\n    }\n\n    calendarDayField.innerHTML = '';\n    for (let d = 1; d <= max; d++) {\n        const newOption = document.createElement('option');\n        newOption.text = d;\n        newOption.value = d;\n        if (d === selectedDay) {\n            newOption.selected = true;\n        }\n        calendarDayField.appendChild(newOption);\n    }\n};\n\nregisterReminderForm();\n"
  },
  {
    "path": "resources/js/forms/calendar.js",
    "content": "\nconst field = document.querySelector('input#has_leap_year');\n\nfield.addEventListener('change', function () {\n    const target = document.getElementById('calendar-leap-year');\n    console.log('me', field.checked);\n    if (field.checked) {\n        target.classList.remove('hidden');\n    } else {\n        target.classList.add('hidden');\n    }\n});\n"
  },
  {
    "path": "resources/js/forms/character.js",
    "content": "const organisations = document.querySelector('.character-organisations');\nconst addBtn = document.querySelector('#add_organisation');\nconst template = document.querySelector('#template_organisation')\n\n/**\n *\n */\nconst initCharacterOrganisation = () => {\n    if (!organisations) {\n        return;\n    }\n    addBtn.addEventListener('click', function (e) {\n        e.preventDefault();\n\n        const child = document.createElement('div');\n        child.classList.add('parent-row');\n        child.innerHTML = template.innerHTML;\n        organisations.append(child);\n\n        // Replace the temp class with the real class. We need this to avoid having two select2 fields\n        organisations.querySelectorAll('.tmp-org')?.forEach(child => {\n            child.classList.remove('tmp-org');\n            child.classList.add('select2');\n        });\n\n        // Handle deleting already loaded blocks\n        characterDeleteRowHandler();\n\n        // Fake a modal loaded to re-register the togglers\n        window.triggerEvent();\n        return false;\n    });\n\n    characterDeleteRowHandler();\n};\n\n/**\n *\n */\nconst characterDeleteRowHandler = () => {\n\n    const deletes = document.querySelectorAll('.member-delete');\n    deletes?.forEach((ele) => {\n        if (ele.dataset.init === '1') {\n            return;\n        }\n        ele.dataset.init = '1';\n        ele.addEventListener('click', (e) => {\n            e.preventDefault();\n            ele.closest(ele.dataset.target).remove();\n        });\n        ele.addEventListener('keydown', (e) => {\n            if (e.key !== 'Enter') {\n                return;\n            }\n            ele.click();\n        });\n    });\n\n    // Always re-calc the sortable traits\n    window.initSortable();\n    window.initForeignSelect();\n};\n\nwindow.onReady(() => {\n    initCharacterOrganisation();\n})\n"
  },
  {
    "path": "resources/js/forms/entity-name.js",
    "content": "import { createApp } from 'vue'\nimport VueTippy from 'vue-tippy'\nimport EntityName from \"../components/fields/EntityName.vue\"\n\n\nconst loadWidget = () => {\n\n    const elements = document.querySelectorAll('.field-entity-name')\n    elements.forEach(el => {\n        // Don't re-mount if already mounted\n        if (el.dataset.init === '1') {\n            return\n        }\n        el.dataset.init = '1'\n        const app = createApp({})\n        app.use(VueTippy, { defaultProps: { interactive: true } })\n        app.component('entity-name', EntityName)\n        app.mount(el)\n    })\n};\n\nloadWidget();\n\nwindow.onEvent(function() {\n    loadWidget();\n});\n"
  },
  {
    "path": "resources/js/front.js",
    "content": "\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\nimport axios from 'axios';\nwindow.axios = axios;\n\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Next we will register the CSRF Token as a common header with Axios so that\n * all outgoing HTTP requests automatically have it attached. This is just\n * a simple convenience so we don't have to attach every token manually.\n */\n\nlet token = document.head.querySelector('meta[name=\"csrf-token\"]');\nif (token) {\n    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;\n}\n\nwindow.onload = function (event) {\n    const wrapper = document.getElementById('nav-mobile-toggler');\n\n    wrapper.addEventListener('click', () => {\n        wrapper.classList.toggle('open');\n    });\n\n    window.initDialogs();\n    initRoadmap();\n};\n\nconst initRoadmap = () => {\n    const loadedModal = document.querySelector('[name=\"open-dialog\"]');\n\n    if (loadedModal) {\n        window.openDialog(loadedModal.value);\n    }\n};\n\nimport './utility/dialog';\n"
  },
  {
    "path": "resources/js/gallery/Browser.vue",
    "content": "<template>\n\n    <dialog class=\"dialog rounded-2xl text-center bg-base-100 text-base-content\" id=\"gallery-dialog\" ref=\"galleryDialog\" aria-modal=\"true\" aria-labelledby=\"modal-card-label\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans.browse.title\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"closeBrowser()\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">Close</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl p-4\">\n            <div class=\"flex gap-1 w-full\" v-if=\"!loading && !error\">\n                <div class=\"grow\">\n                    <input type=\"text\" class=\"w-full\" :placeholder=\"trans.browse.search.placeholder\" @input=\"handleInput\" />\n                </div>\n                <div class=\"flex-none cursor-pointer btn2 btn-ghost btn-sm\" v-if=\"mode !== 'large'\" @click=\"toggle('large')\" :title=\"trans.browse.layouts.large\">\n                    <i class=\"fa-regular fa-grid-2\" aria-label=\"Large previews\"></i>\n                </div>\n                <div class=\"flex-none cursor-pointer btn2 btn-ghost btn-sm\" v-if=\"mode !== 'small'\" @click=\"toggle('small')\" :title=\"trans.browse.layouts.small\">\n                    <i class=\"fa-regular fa-grid-4\" aria-label=\"Small previews\"></i>\n                </div>\n            </div>\n\n            <div class=\"md:h-36 md:w-80 text-center flex items-center justify-center w-full\" v-if=\"loading || searching\">\n                <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\"></i>\n            </div>\n\n            <div :class=\"gridClass()\" v-else>\n                <div v-for=\"image in images\" class=\"cursor-pointer shadow-sm rounded hover:shadow-lg overflow-hidden\" @click=\"selectImage(image)\">\n                    <div :class=\"previewSize('cover-background')\" :style=\"{'backgroundImage': 'url(\\'' + image.thumbnail + '\\')'}\" v-if=\"!image.folder\" />\n                    <div :class=\"previewSize('flex items-center align-middle justify-center text-4xl')\" v-else>\n                        <i :class=\"image.icon\" aria-label=\"Folder\" />\n                    </div>\n                    <div :class=\"widthSize('truncate px-2 py-1 ')\" :title=\"image.name\">\n                        <span v-html=\"image.name\"></span>\n                    </div>\n                </div>\n                <div class=\"alert alert-error p-2 rounded\" v-if=\"error\" v-html=\"error\"></div>\n            </div>\n        </article>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref, onMounted, watch, onBeforeMount} from 'vue'\n\nconst props = defineProps<{\n    api: string,\n    opened: boolean,\n    i18n: undefined,\n}>()\n\nconst trans = ref(null)\n\nonBeforeMount(() => {\n    // if props.i18n is a string, it's a JSON string\n    if (props.i18n && typeof props.i18n === 'string') {\n        trans.value = JSON.parse(props.i18n)\n    } else {\n        trans.value = props.i18n;\n    }\n})\n\nconst emit = defineEmits(['selected', 'closed'])\n\nconst loading = ref(true)\nconst searching = ref(false)\nconst galleryDialog = ref()\nconst images = ref([])\nconst term = ref('')\nconst lastTerm = ref('')\nconst typingTimeout = ref(null)\nconst error = ref(null)\nconst debounceDelay = 300\nconst mode = ref('large')\n\nconst open = () => {\n    loading.value = true\n    galleryDialog.value.showModal()\n    galleryDialog.value.addEventListener('click', function (event) {\n        let rect = this.getBoundingClientRect()\n        let isInDialog = (rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n            rect.left <= event.clientX && event.clientX <= rect.left + rect.width)\n        if (!isInDialog && event.target.tagName === 'DIALOG') {\n            closeBrowser()\n        }\n    });\n\n    axios.get(props.api)\n        .then(res => {\n            images.value = res.data.images\n            loading.value = false\n        })\n        .catch(err => {\n            loading.value = false\n            if (err.response.status === 403) {\n                error.value = err.response.data.message //You aren\\'t a member of any roles that have access to the gallery'\n                // Let's give more hints to the users confused by this\n                error.value += '<p>' + trans.value.browse.unauthorized + '</p>'\n            }\n        })\n}\n\nconst closeBrowser = () => {\n    galleryDialog.value.close()\n    emit('closed')\n}\n\nconst previewSize = (extra) => {\n    extra = extra ?? ''\n    if (mode.value === 'large') {\n        return 'w-40 h-28 md:w-48 md:h-36 ' + extra\n    }\n    return 'w-20 h-16 ' + extra\n}\n\nconst widthSize = (extra) => {\n    extra = extra ?? ''\n    if (mode.value === 'large') {\n        return 'w-40 md:w-48 ' + extra\n    }\n    return 'w-20 text-xs ' + extra\n}\n\nconst gridClass = () => {\n    if (mode.value === 'small') {\n        return 'flex flex-wrap justify-center gap-2 md:gap-3'\n    }\n    return 'flex flex-wrap justify-center gap-2 md:gap-5'\n}\n\nconst selectImage = (image) => {\n    if (image.folder) {\n        loading.value = true\n        axios.get(image.url).then(res => {\n            images.value = res.data.images\n            loading.value = false\n        })\n        return;\n    }\n\n    emit('selected', image)\n    closeBrowser()\n}\n\nwatch(() => props.opened, (newVal, oldVal) => {\n    if (newVal) {\n        open()\n    }\n})\n\nconst handleInput = (event) => {\n    term.value = event.target.value\n    if (typingTimeout.value) {\n        clearTimeout(typingTimeout.value)\n    }\n\n    typingTimeout.value = setTimeout(() => {\n        search()\n    }, debounceDelay)\n}\n\nconst search = () => {\n    if (lastTerm.value == term.value) {\n        return\n    }\n\n    lastTerm.value = term.value\n    searching.value= true\n\n    axios.get(props.api + '?term=' + lastTerm.value).then(res => {\n        images.value = res.data.images\n        searching.value = false\n    })\n}\n\nconst toggle = (layout) => {\n    mode.value = layout\n}\n</script>\n"
  },
  {
    "path": "resources/js/gallery/File.vue",
    "content": "<template>\n    <div class=\"bg-base-100 p-2 md:p-4 rounded flex flex-col gap-2 md:gap-4 md:sticky md:top-24\">\n        <div\n            v-if=\"loading\"\n            class=\"text-2xl flex items-center justify-center h-32\"\n        >\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\"></i>\n        </div>\n        <div class=\"flex flex-col gap-4\" v-else-if=\"!focusing\">\n            <div class=\"flex items-center gap-2\">\n                <div class=\"flex items-center gap-1 grow\">\n                    <i class=\"fa-regular fa-clipboard\" aria-hidden=\"true\"></i>\n                    <span class=\"font-extrabold\" v-html=\"trans('details')\"></span>\n                </div>\n                <div class=\"cursor-pointer\" @click=\"closeFile\">\n                    <i class=\"fa-solid fa-xmark\" aria-label=\"Close\" />\n                </div>\n            </div>\n\n            <div class=\"flex flex-col gap-1\">\n                <label class=\"font-extrabold\" v-html=\"trans('name')\"></label>\n                <input\n                    type=\"text\"\n                    class=\"\"\n                    maxlength=\"191\"\n                    v-model=\"name\"\n                    @change=\"updateName\"\n                    v-if=\"canManage\"\n                />\n                <span v-else v-html=\"name\"></span>\n            </div>\n\n            <div class=\"flex flex-col gap-1\" v-if=\"canManage\">\n                <label class=\"font-extrabold flex gap-1 items-center\">\n                    <i class=\"fa-regular fa-users\" aria-hidden=\"true\" />\n                    <span  v-html=\"trans('visibility')\"></span>\n                </label>\n                <select\n                    class=\"w-full\"\n                    v-model=\"visibility\"\n                    @change=\"updateVisibility\"\n                >\n                    <option\n                        v-for=\"(name, id) in visibilities\"\n                        :value=\"id\"\n                        v-html=\"name\"\n                    ></option>\n                </select>\n            </div>\n\n            <div class=\"flex flex-col gap-1\" v-if=\"!props.file.is_folder\">\n                <div\n                    class=\"flex gap-2 items-center cursor-pointer\"\n                    @click=\"toggleMentions\"\n                >\n                    <div class=\"grow font-bold flex gap-1 items-center\">\n                        <i class=\"fa-regular fa-cubes\" aria-hidden=\"true\" />\n                        <span v-html=\"trans('used_in')\"></span>\n                    </div>\n                    <i\n                        class=\"fa-solid fa-chevron-up\"\n                        v-if=\"showMentions\"\n                        aria-label=\"Hide mentions\"\n                    />\n                    <i\n                        class=\"fa-solid fa-chevron-down\"\n                        v-else\n                        aria-label=\"Show mentions\"\n                    />\n                </div>\n\n                <div class=\"flex flex-wrap gap-2\" v-if=\"showMentions\">\n                    <a\n                        v-for=\"mention in mentions\"\n                        :href=\"mention.url\"\n                        class=\"rounded-xl bg-base-200 px-4 py-1 flex gap-1 items-center\"\n                    >\n                        <i\n                            class=\"fa-regular fa-image\"\n                            v-if=\"mention.type === 'image'\"\n                            aria-hidden=\"true\"\n                        />\n                        <i class=\"fa-regular fa-pen\" v-else aria-hidden=\"true\" />\n                        <span class=\"truncate\" v-html=\"mention.name\"></span>\n                    </a>\n                    <span class=\"text-neutral-content\" v-if=\"!hasMentions()\" v-html=\"trans('unused')\"></span>\n                </div>\n            </div>\n\n            <div class=\"grid grid-cols-2 gap-2\" v-if=\"!props.file.is_folder\">\n                <div class=\"text-neutral-content\" v-html=\"trans('size')\"></div>\n                <div class=\"text-right\" v-html=\"file.size\"></div>\n\n                <div class=\"text-neutral-content\" v-html=\"trans('uploaded_by')\"></div>\n                <div class=\"text-right\" v-html=\"file.creator\"></div>\n\n                <div class=\"text-neutral-content\" v-html=\"trans('file_type')\"></div>\n                <div class=\"text-right uppercase\" v-html=\"file.ext\"></div>\n\n                <div class=\"text-neutral-content\" v-html=\"trans('link')\"></div>\n                <a :href=\"file.link\" class=\"flex gap-1 items-center justify-end text-link\" target=\"_blank\">\n                    <i class=\"fa-solid fa-external-link\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('open')\"></span>\n                </a>\n            </div>\n\n            <div class=\"flex gap-2 items-center justify-between\">\n                <i\n                    class=\"fa-solid fa-spinner fa-spin text-error-content\"\n                    v-if=\"deleting\"\n                    aria-label=\"Deleting\"\n                ></i>\n                <span role=\"button\"\n                    class=\"text-neutral-content hover:text-error-content hover:bg-error flex items-center gap-1 p-2 rounded\"\n                    @click=\"deleteFile\"\n                    v-else-if=\"canManage\"\n                >\n                    <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\" />\n                    <span v-if=\"!confirmed\" v-html=\"trans('delete')\"></span>\n                    <span v-else v-html=\"trans('confirm')\"></span>\n                </span>\n\n                <button v-if=\"!props.file.is_folder && canManage\"\n                    @click=\"focus\"\n                    class=\"rounded border p-2 flex gap-1 items-center\"\n                >\n                    <i class=\"fa-regular fa-bullseye\" aria-hidden=\"true\" />\n                    <span class=\"truncate\" v-html=\"trans('focus_point')\"></span>\n                </button>\n\n                <div class=\"grow text-right text-neutral-content\" v-if=\"saving\">\n                    <i\n                        class=\"fa-solid fa-spinner fa-spin\"\n                        aria-hidden=\"true\"\n                    ></i>\n                    <span  v-html=\"trans('saving')\"></span>\n                </div>\n            </div>\n            <div\n                class=\"text-right text-neutral-content flex gap-1 self-end items-center text-xs\"\n                v-if=\"saved\"\n            >\n                <i class=\"fa-regular fa-check-double\" aria-hidden=\"true\"></i>\n                <span v-html=\"trans('saved')\"></span>\n            </div>\n        </div>\n        <div v-else class=\"flex flex-col gap-4 overflow-hidden\">\n            <div class=\"alert alert-warning p-4 flex flex-col gap-2\" v-if=\"!props.premium\">\n                <p v-html=\"trans('focus_locked')\"></p>\n                <a href=\"https://kanka.io/premium\" class=\"text-link\">Learn more</a>\n            </div>\n            <div v-else class=\"max-w-32 flex items-center justify-center\">\n                <div class=\"relative inline-block\">\n                    <div\n                        class=\"absolute cursor-pointer text-4xl text-accent \"\n                        :style=\"focusStyle()\"\n                        @click=\"resetFocus\"\n                    >\n                        <i\n                            class=\"fa-duotone fa-arrow-up-left-from-circle hover:text-error-content\"\n                            aria-label=\"Focus point\"\n                        />\n                    </div>\n\n                    <img\n                        class=\"cursor-crosshair\"\n                        :src=\"props.file.original\"\n                        alt=\"img\"\n                        ref=\"focusImage\"\n                        @click=\"setFocus\"\n                    />\n                </div>\n            </div>\n\n            <div class=\"flex gap-2 items-center flex-wrap justify-between\">\n                <button class=\"btn2 btn-primary btn-sm\"\n                    @click=\"saveFocus\"\n                        v-if=\"premium\"\n                >\n                    <span v-html=\"trans('save')\"></span>\n                </button>\n                <button class=\"btn2 btn-ghost btn-sm\" @click=\"cancelFocus\"  v-html=\"trans('cancel')\">\n                </button>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, watch } from \"vue\";\n\nconst props = defineProps<{\n    file: Object;\n    visibilities: Object;\n    i18n: Object;\n    premium: Boolean;\n    canManage: Boolean;\n}>();\n\nconst emit = defineEmits([\"updated\", \"deleted\", \"moved\", \"closed\"]);\n\nconst mentions = ref();\nconst name = ref();\nconst saving = ref(false);\nconst saved = ref(false);\nconst visibility = ref();\nconst loading = ref(true);\nconst deleting = ref(false);\nconst confirmed = ref(false);\nconst showMentions = ref(true);\nconst focusing = ref(false);\nconst focusImage = ref();\nconst focusX = ref();\nconst focusY = ref();\n\nwatch(\n    () => props.file,\n    (newVal, oldVal) => {\n        if (newVal) {\n            open();\n        }\n    },\n);\n\nonMounted(() => {\n    open();\n});\n\nconst trans = (key) => {\n    if (props.i18n[key]) {\n        return props.i18n[key];\n    }\n    return '_' + key + '_';\n}\n\nconst open = () => {\n    loading.value = true;\n    saving.value = false;\n    saved.value = false;\n    name.value = props.file.name;\n    visibility.value = props.file.visibility_id;\n    focusX.value = props.file.focus_x;\n    focusY.value = props.file.focus_y;\n    deleting.value = false;\n    confirmed.value = false;\n    focusing.value = false;\n    axios.get(props.file.api.show).then((res) => {\n        mentions.value = res.data.data.mentions;\n        loading.value = false;\n    });\n};\n\nconst updateName = () => {\n    if (name.value === props.file.name) {\n        return;\n    }\n    update();\n};\nconst updateVisibility = () => {\n    if (visibility.value === props.file.visibility_id) {\n        return;\n    }\n    update();\n};\n\nconst update = () => {\n    if (saving.value) {\n        return;\n    }\n    saving.value = true;\n    const data = {\n        name: name.value,\n        visibility_id: visibility.value,\n    };\n    axios.post(props.file.api.update, data).then((res) => {\n        props.file.name = name.value;\n        props.file.visibility_id = visibility.value;\n        props.file.visibility = res.data.data.visibility;\n        saving.value = false;\n        saved.value = true;\n        emit(\"updated\", props.file);\n    });\n};\n\nconst toggleMentions = () => {\n    showMentions.value = !showMentions.value;\n};\n\nconst hasMentions = () => {\n    return mentions.value.length > 0;\n};\n\nconst deleteFile = () => {\n    if (deleting.value) {\n        return;\n    } else if (!confirmed.value) {\n        confirmed.value = true;\n        return;\n    }\n\n    deleting.value = true;\n    axios.post(props.file.api.delete, {'_method': 'delete'}).then((res) => {\n        window.showToast(\"Removed \" + props.file.name);\n        emit(\"deleted\", props.file, res.data.used);\n    });\n};\n\nconst closeFile = () => {\n    emit(\"closed\");\n};\n\nconst focus = () => {\n    focusing.value = true;\n};\n\nconst cancelFocus = () => {\n    focusing.value = false;\n};\n\nconst setFocus = (event) => {\n    // Get the original dimensions of the image\n    const originalWidth = focusImage.value.naturalWidth;\n    const originalHeight = focusImage.value.naturalHeight;\n\n    // Get the click coordinates\n    const clickX =\n        event.clientX - focusImage.value.getBoundingClientRect().left;\n    const clickY = event.clientY - focusImage.value.getBoundingClientRect().top;\n\n    // Calculate the coordinates with respect to the original size\n    const originalX = (clickX / focusImage.value.clientWidth) * originalWidth;\n    const originalY = (clickY / focusImage.value.clientHeight) * originalHeight;\n\n    // Calculate the coordinates as a percentage, so that the focus point can be placed correctly to scale\n    const percentageX = (originalX / originalWidth) * 100;\n    const percentageY = (originalY / originalHeight) * 100;\n\n    focusX.value = parseInt(String(originalX), 10);\n    focusY.value = parseInt(String(originalY), 10);\n};\n\nconst focusStyle = (event) => {\n    if (!focusX.value || !focusImage.value) {\n        return \"display: none;\";\n    }\n\n    // Get the original dimensions of the image\n    const originalWidth = focusImage.value.naturalWidth;\n    const originalHeight = focusImage.value.naturalHeight;\n\n    // Calculate the coordinates as a percentage, so that the focus point can be placed correctly to scale\n    const percentageX = (focusX.value / originalWidth) * 100;\n    const percentageY = (focusY.value / originalHeight) * 100;\n\n    return \"left: \" + percentageX + \"%; top: \" + percentageY + \"%\";\n};\n\nconst resetFocus = () => {\n    focusX.value = null;\n    focusY.value = null;\n    saveNewFocus();\n}\n\nconst saveFocus = () => {\n    saveNewFocus();\n}\n\nconst saveNewFocus = () => {\n    if (saving.value) {\n        return;\n    }\n    saving.value = true;\n    focusing.value = false;\n\n    const data = {\n        focus_x: focusX.value,\n        focus_y: focusY.value,\n    };\n    axios.post(props.file.api.focus, data).then((res) => {\n        saving.value = false;\n        saved.value = true;\n        props.file.focus_x = focusX.value;\n        props.file.focus_y = focusY.value;\n        console.log(res.data);\n        props.file.thumbnail = res.data.data.thumbnail\n        emit(\"updated\", props.file);\n    });\n}\n</script>\n"
  },
  {
    "path": "resources/js/gallery/Gallery.vue",
    "content": "<template>\n    <div v-if=\"!initiated\" class=\"text-center text-4xl p-4\">\n        <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\" />\n    </div>\n    <div v-else class=\"flex flex-col gap-4 md:gap-5\">\n        <div class=\"flex gap-4 items-end\">\n            <div class=\"flex flex-col gap-1 grow\">\n                <div class=\"flex gap-1 items-center\">\n                    <i class=\"fa-regular fa-cloud text-xl\" aria-hidden=\"true\"></i>\n                    <span class=\"font-extrabold\" v-html=\"trans('storage')\"></span>\n                </div>\n                <div class=\"flex gap-1 items-center\">\n                    <span v-html=\"usedSpace()\"></span>\n                    <span v-html=\"trans('of')\"></span>\n                    <span v-html=\"totalSpace()\"></span>\n                </div>\n                <div class=\"bg-base-300 rounded h-2 w-full overflow-hidden transition-all duration-300 \">\n                    <div :class=\"usedClasses()\" :style=\"{width: usedPercentage() + '%'}\"></div>\n                </div>\n            </div>\n            <div v-if=\"!premium || (usedPercentage() > 89) && (isWyvern || isElemental)\">\n                <a :href=\"upgradeLink\" v-html=\"trans('upgrade')\" class=\"btn2 btn-default\"></a>\n            </div>\n        </div>\n\n        <div class=\"flex gap-4 flex-wrap sticky top-14 z-50\">\n            <div class=\"flex gap-2 grow\">\n                <div class=\"flex gap-0.5\">\n                    <input type=\"text\" placeholder=\"Search\" @input=\"handleSearchInput\" />\n                </div>\n                <div class=\"relative\">\n                    <button class=\"btn2 btn-default btn-sm\" @click=\"toggleFilters\">\n                        <i class=\"fa-regular fa-filter\" aria-hidden=\"true\" />\n                        <span v-html=\"trans('filters')\" class=\"hidden md:inline\"></span>\n                        <span v-if=\"showUnused\">(1)</span>\n                    </button>\n                    <div class=\"border shadow-sm rounded bg-base-100 p-4 absolute right-0 flex flex-col gap-5 w-60\" v-if=\"showFilters\"  v-click-outside=\"onClickOutside\">\n                        <div class=\"flex gap-2 items-center\">\n                            <input type=\"checkbox\" v-model=\"showUnused\" value=\"1\" id=\"_show_unused\" @change=\"toggleUnused\" />\n                            <label for=\"_show_unused\" class=\"cursor-pointer\" v-html=\"trans('filter_only_unused')\">\n                            </label>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"relative\">\n                    <button class=\"btn2 btn-default btn-sm\" @click=\"toggleSort\">\n                        <i class=\"fa-regular fa-arrow-up-arrow-down\" aria-hidden=\"true\" />\n                        <span v-html=\"trans('sort')\" class=\"hidden md:inline\"></span>\n                        <span v-if=\"sortAsc || sortDesc\">(1)</span>\n                    </button>\n                    <div\n                        class=\"border shadow-sm rounded bg-base-100 p-4 absolute right-0 top-full mt-2 flex flex-col gap-1 w-60 z-50\"\n                        v-if=\"showSort\"\n                        v-click-outside=\"onClickOutside\"\n                    >\n                        <ul class=\"flex flex-col gap-1 list-none m-0 p-0\">\n                            <li>\n                            <span class=\"cursor-pointer flex items-center gap-2 px-2 py-2 rounded hover:bg-gray-100 transition\" @click=\"sort('default')\">\n                                <i v-if=\"sortDefault\" class=\"fa-regular fa-check\" aria-hidden=\"true\" />\n                                <span v-html=\"trans('sort_default')\" class=\"inline\"></span>\n                            </span>\n                            </li>\n\n                            <li>\n                            <span class=\"cursor-pointer flex items-center gap-2 px-2 py-2 rounded hover:bg-gray-100 transition\" @click=\"sort('asc')\">\n                                <i v-if=\"sortAsc\" class=\"fa-regular fa-check\" aria-hidden=\"true\" />\n                                <span v-html=\"trans('sort_asc')\" class=\"inline\"></span>\n                            </span>\n                            </li>\n\n                            <li>\n                            <span class=\"cursor-pointer flex items-center gap-2 px-2 py-2 rounded hover:bg-gray-100 transition\" @click=\"sort('desc')\">\n                                <i v-if=\"sortDesc\" class=\"fa-regular fa-check\" aria-hidden=\"true\" />\n                                <span v-html=\"trans('sort_desc')\" class=\"inline\"></span>\n                            </span>\n                            </li>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n            <div class=\"flex gap-2 self-end flex-wrap\">\n\n                <button class=\"btn2 btn-default btn-sm\" v-if=\"!isBulking && folder\" @click=\"openFolderDetails\">\n                    <i class=\"fa-regular fa-clipboard\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('details')\"></span>\n                </button>\n                <button class=\"btn2 btn-default btn-sm\" v-if=\"!isBulking && canManage\" @click=\"openNewFolder\">\n                    <i class=\"fa-regular fa-plus\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('new_folder')\"></span>\n                </button>\n                <button class=\"btn2 btn-default btn-sm\" v-if=\"!isBulking && canManage\" @click=\"startBulking\">\n                    <i class=\"fa-regular fa-list-check\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('select')\"></span>\n                </button>\n                <button class=\"btn2 btn-primary btn-sm\" v-if=\"isBulking\" @click=\"openUpdate\">\n                    <i class=\"fa-regular fa-pencil\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('update')\"></span>\n                    <span v-html=\"countSelected()\"></span>\n                </button>\n                <button class=\"btn2 btn-error btn-sm\" v-if=\"isBulking\" @click=\"deleteBulk\">\n                    <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('remove')\"></span>\n                    <span v-html=\"countSelected()\"></span>\n                </button>\n                <button class=\"btn2 btn-default btn-sm\" v-if=\"isBulking\" @click=\"stopBulking\" >\n                    <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('cancel')\"></span>\n                </button>\n\n            </div>\n        </div>\n\n        <div class=\"text-center text-4xl p-4\" v-if=\"loading\">\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\" />\n        </div>\n        <div class=\"flex flex-col gap-4\" v-else>\n            <div v-if=\"folder\" class=\"flex gap-1 flex-wrap text-xl\">\n                <a @click=\"home\" v-html=\"trans('home')\" class=\"text-base-content cursor-pointer\"></a>\n                <span class=\"flex gap-1 items-center\" v-for=\"(breadcrumb, index) in breadcrumbs\">\n                    <i class=\"fa-solid fa-chevron-right text-base\" aria-hidden=\"true\" />\n                    <a @click=\"openFolder(breadcrumb)\" v-html=\"breadcrumb.name\" class=\"text-base-content cursor-pointer\"></a>\n                </span>\n            </div>\n            <div class=\"flex gap-2 flex-row\">\n                <div :class=\"gridClass()\">\n                    <div v-if=\"canUpload && !showUnused\" class=\"rounded-xl shadow bg-base-100 overflow-hidden col-span-2 sm:col-span-3 md:w-48 cursor-pointer flex justify-center items-center flex-col gap-4\" @click=\"selectFiles\">\n                        <div class=\"flex flex-col gap-4 p-2\" v-if=\"!uploading\">\n                            <div class=\"flex flex-col gap-2 items-center\">\n                                <i class=\"fa-regular fa-image text-4xl text-neutral-content\" aria-hidden=\"true\"></i>\n                                <span>Upload files</span>\n                            </div>\n                            <div class=\"text-center text-xs\">\n                                <i class=\"fa-regular fa-info-circle mr-1 text-base\" aria-hidden=\"true\" />\n                                <span v-html=\"trans('upload_hint')\" class=\"text-neutral-content\"></span>\n                            </div>\n                        </div>\n                        <div v-else-if=\"hasPreview()\" class=\"cover-background w-full h-full flex p-2\" :style=\"{backgroundImage: 'url(\\'' + imagePreview + '\\')'}\">\n                            <div class=\"progress h-1 w-full self-end\">\n                                <div class=\"h-1 bg-accent shadow-xs\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\" :style=\"{'width': progressPercentage()}\">\n                                    <span class=\"sr-only\"></span>\n                                </div>\n                            </div>\n                        </div>\n                        <input type=\"file\" multiple accept=\"image/*, font/woff2\" class=\"hidden\" @change=\"filesSelected\" ref=\"fileField\" />\n                    </div>\n\n                    <Preview\n                        v-for=\"file in files\"\n                        :file=\"file\"\n                        :isBulking=\"isBulking\"\n                        :i18n=\"i18n\"\n                        @select=\"selectFile(file)\"\n                    >\n                    </Preview>\n                </div>\n\n                <div class=\"fixed bottom-0 w-full left-0 right-0 shadow-md md:shadow-none md:relative md:basis-1/4 \" v-if=\"currentFile\">\n                    <File\n                        :file=\"currentFile\"\n                        :visibilities=\"visibilities\"\n                        :premium=\"premium\"\n                        :canManage=\"canManage\"\n                        :i18n=\"i18n\"\n                        @updated=\"updatedFile\"\n                        @deleted=\"deletedFile\"\n                        @closed=\"closeFile\"\n                    ></File>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div ref=\"infiniteScrollTrigger\" class=\"h-4\">\n        <div v-if=\"loadingMore\" class=\"text-center text-4xl p-4\">\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\" />\n        </div>\n    </div>\n\n    <dialog ref=\"newDialog\" class=\"dialog rounded-2xl text-center bg-base-100 text-base-content\" v-if=\"initiated\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans('new_folder')\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"closeModal(newDialog)\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">Close</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl flex flex-col gap-2 text-left p-4 md:px-6\">\n            <div class=\"flex flex-col gap-1 w-full\">\n                <label v-html=\"trans('name')\"></label>\n                <input type=\"text\" class=\"w-full\" v-model=\"folderName\" ref=\"folderNameField\" @keyup.enter=\"createFolder\">\n            </div>\n            <div class=\"flex flex-col gap-1 w-full\">\n                <label v-html=\"trans('visibility')\"></label>\n                <select class=\"w-full\" v-model=\"folderVisibility\">\n                    <option v-for=\"(name, id) in visibilities\" :value=\"id\" v-html=\"name\"></option>\n                </select>\n            </div>\n        </article>\n        <footer class=\"bp-4 md:px-6\">\n            <menu class=\"\">\n                <button type=\"submit\" class=\"btn2 btn-primary\" @click=\"createFolder\" v-html=\"trans('create')\">\n                </button>\n            </menu>\n        </footer>\n    </dialog>\n\n    <dialog ref=\"updateDialog\" class=\"dialog rounded-2xl text-center bg-base-100 text-base-content\" v-if=\"initiated\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans('update')\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"closeModal(updateDialog)\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">Close</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl flex flex-col gap-2 text-left p-4 md:px-6\">\n            <div class=\"flex flex-col gap-1 w-full\">\n                <label v-html=\"trans('visibility')\"></label>\n                <select class=\"w-full\" v-model=\"bulkVisibility\">\n                    <option v-for=\"(name, id) in bulkVisibilities\" :value=\"id\" v-html=\"name\"></option>\n                </select>\n            </div>\n            <div class=\"flex flex-col gap-1 w-full\">\n                <label v-html=\"trans('folder')\"></label>\n                <select class=\"w-full\" v-model=\"bulkFolder\">\n                    <option v-for=\"(name, id) in folders\" :value=\"id\" v-html=\"name\"></option>\n                </select>\n            </div>\n        </article>\n        <footer class=\"bg-base-200 p-2\">\n            <menu class=\"\">\n                <button type=\"submit\" class=\"btn2 btn-primary\" @click=\"updateFiles\" v-html=\"trans('change')\">\n                </button>\n            </menu>\n        </footer>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\n\nimport {onMounted, onUnmounted, onBeforeUnmount, ref, nextTick} from \"vue\";\nimport Preview from \"./Preview.vue\";\nimport File from \"./File.vue\";\n\nconst props = defineProps<{\n    api: String\n}>()\n\nconst initiated = ref(false)\nconst loading = ref(false)\nconst deleteApi = ref()\nconst deleting = ref(false)\nconst loadingMore = ref(false)\nconst canUpload = ref(false)\nconst isBulking = ref(false)\nconst premium = ref(false)\nconst isWyvern = ref(false)\nconst isElemental = ref(false)\nconst canManage = ref(false)\nconst breadcrumbs = ref()\nconst nextPage = ref()\nconst currentFile = ref()\n\n// Search stuff\nconst searchTerm = ref()\nconst lastTerm = ref()\nconst searching = ref(false)\nconst typingTimeout = ref(null)\nconst searchApi = ref()\nconst apiParameters = ref([])\n\nconst files = ref([])\nconst homeFiles = ref([])\nconst folder = ref()\nconst i18n = ref()\nconst isHome = ref(true)\nconst homeUrl = ref()\n\n// New folder\nconst creating = ref(false)\nconst createApi = ref()\nconst newDialog = ref()\nconst folderName = ref()\nconst folderNameField = ref()\nconst folderVisibility = ref(1)\nconst visibilities = ref()\nconst bulkVisibilities = ref()\n\n// Visibility folder\nconst updateDialog = ref()\nconst bulkVisibility = ref()\nconst bulkFolder = ref()\n\n// Move\nconst folders = ref()\nconst updateApi = ref()\n\n// Upload\nconst moving = ref(false)\nconst uploadApi = ref()\nconst fileField = ref()\nconst uploading = ref(false)\nconst imagePreview = ref(null)\nconst cancelTokenSource = ref(null)\nconst progress = ref(0)\n\n// Filters\nconst showFilters = ref(false)\nconst showUnused = ref(false)\nconst showSort = ref(false)\nconst sortAsc = ref(false)\nconst sortDesc = ref(false)\nconst sortDefault = ref(true)\n\n// Space\nconst total = ref()\nconst used = ref()\nconst upgradeLink = ref()\n\n//Infinite Scrolling\nconst infiniteScrollTrigger = ref(null)\nlet observer: IntersectionObserver | null = null\n\nonMounted(() => {\n    axios.get(props.api)\n        .then((res) => {\n            initiated.value = true\n            files.value = res.data.files\n            homeFiles.value = res.data.files\n            homeUrl.value = res.data.url\n            i18n.value = res.data.i18n\n            searchApi.value = res.data.api.search\n            deleteApi.value = res.data.api.delete\n            updateApi.value = res.data.api.update\n            createApi.value = res.data.api.create\n            uploadApi.value = res.data.api.upload\n            nextPage.value = res.data.next\n            visibilities.value = res.data.visibilities\n            bulkVisibilities.value = res.data.bulkVisibilities\n            canUpload.value = res.data.acl.upload\n            premium.value = res.data.acl.premium\n            isWyvern.value = res.data.acl.wyvern\n            isElemental.value = res.data.acl.elemental\n            canManage.value = res.data.acl.manage\n            folders.value = res.data.folders\n\n            total.value = res.data.space.total\n            used.value = res.data.space.used\n            upgradeLink.value = res.data.upgrade\n\n            // Set up infinite scroll observer after data is loaded\n            nextTick(() => {\n                observer = new IntersectionObserver(entries => {\n                    entries.forEach(entry => {\n                        if (entry.isIntersecting) {\n                            openNextPage()\n                        }\n                    })\n                })\n\n                if (infiniteScrollTrigger.value) {\n                    observer.observe(infiniteScrollTrigger.value)\n                }\n            })\n        })\n\n    window.addEventListener('keydown', handleEscapeKey)\n})\n\nonBeforeUnmount(() => {\n  if (observer && infiniteScrollTrigger.value) {\n    observer.unobserve(infiniteScrollTrigger.value)\n  }\n})\n\nonUnmounted(() => {\n    window.removeEventListener('keydown', handleEscapeKey);\n})\n\nconst handleEscapeKey = (event) => {\n    if (event.key === 'Escape' || event.key === 'Esc') {\n        if (uploading.value) {\n            cancelUpload()\n        }\n        if (currentFile.value) {\n            currentFile.value = null\n        }\n        if (isBulking.value) {\n            isBulking.value = null\n        }\n        else if (showFilters.value) {\n            showFilters.value = false\n        }\n    }\n}\n\n\nconst trans = (key) => {\n    if (!i18n.value[key]) {\n        console.error('Missing trans', key, i18n)\n        return 'MISSING'\n    }\n    return i18n.value[key]\n}\n\nconst startBulking = () => {\n    isBulking.value = true;\n}\n\nconst stopBulking = () => {\n    isBulking.value = false;\n}\n\nconst openUpdate = () => {\n    openDialog(updateDialog.value)\n    bulkVisibility.value = null\n    bulkFolder.value = null\n}\n\nconst gridClass = () => {\n    let css = 'grid grid-cols-2 sm:grid-cols-3 md:flex gap-2 sm:gap-3 md:gap-4 md:flex-wrap'\n    if (currentFile.value) {\n        css += ' basis-2/4 md:basis-3/4'\n    }\n    return css\n}\n\nconst deleteBulk = () => {\n    let ids = files.value.filter(f => f.is_selected).map(f => f.id)\n    if (ids.length === 0) {\n        return\n    }\n\n    deleting.value = true\n    axios\n        .post(deleteApi.value, {images: ids})\n        .then(res => {\n            files.value = files.value.filter(i => !i.is_selected)\n            // If we are on the home page, reset the home files\n            if (isHome.value) {\n                homeFiles.value = files.value\n            }\n            used.value = res.data.used;\n\n            isBulking.value = false\n            window.showToast(res.data.toast)\n        })\n}\n\nconst selectFile = (file) => {\n    // Bulking? Do nothing\n    if (isBulking.value) {\n        let f = files.value.find(f => f.id === file.id)\n        f.is_selected = !f.is_selected\n        return;\n    }\n    // Open a folder\n    if (file.is_folder) {\n        openFolder(file);\n        return;\n    }\n\n    // Open a file\n    if (currentFile.value && currentFile.value.id === file.id) {\n        currentFile.value = null\n    } else {\n        currentFile.value = file;\n    }\n}\n\nconst openFolder = (file) => {\n    loading.value = true\n    axios.get(file.open)\n        .then(res => {\n            folder.value = file\n            breadcrumbs.value = res.data.breadcrumbs\n            files.value = res.data.files\n            nextPage.value = res.data.next\n            loading.value = false\n            isHome.value = false\n\n            //window.history.pushState({}, \"\", res.data.url);\n        })\n}\n\nconst home = () => {\n    loading.value = true\n    files.value = homeFiles.value\n    currentFile.value = null\n    folder.value = null\n    loading.value = false\n    isHome.value = true\n    isBulking.value = false\n\n    //window.history.pushState({}, \"\", homeUrl.value);\n}\n\nconst handleSearchInput = (event) => {\n    searchTerm.value = event.target.value\n    if (typingTimeout.value) {\n        clearTimeout(typingTimeout.value)\n    }\n\n    typingTimeout.value = setTimeout(() => {\n        search()\n    }, 300)\n}\n\nconst search = () => {\n    if (lastTerm.value == searchTerm.value) {\n        return\n    }\n    lastTerm.value = searchTerm.value\n\n    // Nothing? Go back home\n    if (!searchTerm.value) {\n        apiParameters.value['searchParam'] = '';\n        home()\n        return;\n    }\n\n    loading.value = true\n\n    apiParameters.value['searchParam'] = 'term=' + searchTerm.value;\n\n    var params = '';\n\n    if (apiParameters.value['searchParam']) {\n        params += apiParameters.value['searchParam'] + '&';\n    }\n\n    if (apiParameters.value['sortParam']) {\n        params += apiParameters.value['sortParam'] + '&';\n    }\n\n    if (apiParameters.value['toggleParam']) {\n        params += apiParameters.value['toggleParam'] + '&';\n    }\n\n    axios.get(searchApi.value + '/?' + params).then(res => {\n        showSearchResults(res.data)\n    })\n}\n\nconst openNextPage = () => {\n    if (nextPage.value == null || loadingMore.value == true) {\n        return\n    }\n    loadingMore.value = true\n\n    var params = '';\n\n    if (apiParameters.value['searchParam']) {\n        params += apiParameters.value['searchParam'] + '&';\n    }\n\n    if (apiParameters.value['sortParam']) {\n        params += apiParameters.value['sortParam'] + '&';\n    }\n\n    if (apiParameters.value['toggleParam']) {\n        params += apiParameters.value['toggleParam'] + '&';\n    }\n\n    axios.get(nextPage.value + '&' + params).then(res => {\n        res.data.files.forEach(file => {\n            files.value.push(file)\n        })\n        nextPage.value = res.data.next\n        loadingMore.value = false\n    })\n}\n\nconst openNewFolder = () => {\n    openDialog(newDialog.value)\n    folderNameField.value.focus()\n}\n\nconst openDialog = (dialog) => {\n    dialog.showModal()\n    dialog.addEventListener('click', clickOutside);\n}\n\nconst clickOutside = (event) => {\n    let rect = event.target.getBoundingClientRect()\n    let isInDialog = (rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n        rect.left <= event.clientX && event.clientX <= rect.left + rect.width)\n    if (!isInDialog && event.target.tagName === 'DIALOG') {\n        closeModal(event.target)\n    }\n}\n\nconst closeModal = (modal) => {\n    // DOn't close the modal while it's thinking\n    if (creating.value) {\n        return\n    }\n    modal.removeEventListener('click', clickOutside)\n    modal.close()\n}\n\nconst createFolder = () => {\n    if (creating.value) {\n        return\n    }\n    let data = {}\n    creating.value = true\n    data.name = folderName.value\n    data.visibility_id = folderVisibility.value\n    if (folder.value) {\n        data.folder_id = folder.value.id\n    }\n\n    axios.post(createApi.value, data).then(res => {\n        folderName.value = null\n        folderVisibility.value = 1\n        creating.value = false\n\n        files.value.unshift(res.data.folder)\n        folders.value[res.data.folder.id] = res.data.folder.name\n        closeModal(newDialog.value)\n    })\n}\n\n// const moveFiles = () => {\n//     if (moving.value) {\n//         return\n//     }\n//     let ids = files.value.filter(f => f.is_selected).map(f => f.id)\n//     if (ids.length === 0) {\n//         alert('select at least one image')\n//     }\n//\n//     moving.value = true\n//     let data = {}\n//     data.folder_id = targetFolder.value\n//     data.images = ids\n//\n//     axios.post(moveApi.value, data).then(res => {\n//         targetFolder.value = null\n//         moving.value = false\n//\n//         // Remove selected files from current folder\n//         files.value = files.value.filter(i => !i.is_selected)\n//\n//         // If the files were moved to the homepage... do something?\n//         isBulking.value = false\n//\n//         window.showToast(res.data.toast)\n//         closeModal(moveDialog.value)\n//     })\n// }\nconst updateFiles = () => {\n    if (moving.value) {\n        return\n    }\n    let ids = files.value.filter(f => f.is_selected).map(f => f.id)\n    if (ids.length === 0) {\n        return\n    }\n\n    moving.value = true\n    let data = {}\n    if (bulkFolder.value) {\n        if (bulkFolder.value === '0') {\n            data.folder_home = 1\n        } else {\n            data.folder_id = bulkFolder.value\n        }\n    }\n    if (bulkVisibility.value) {\n        data.visibility_id = bulkVisibility.value\n    }\n    data.files = ids\n\n    axios.post(updateApi.value, data).then(res => {\n        moving.value = false\n\n\n        // If the files were moved to the homepage... do something?\n        if (data.folder_home) {\n            console.log(\n                'move home'\n            )\n            let selectedFiles = files.value.filter(i => i.is_selected)\n            selectedFiles.forEach(f => {\n                homeFiles.value.unshift(f)\n            })\n        }\n\n        // Remove selected files from current folder\n        if (bulkFolder.value) {\n            files.value = files.value.filter(i => !i.is_selected)\n            // If we're currently on the home folder, remove if\n            if (isHome.value) {\n                homeFiles.value = homeFiles.value.filter(i => !i.is_selected)\n            }\n        }\n        if (bulkVisibility.value) {\n            files.value.forEach(f => {\n                if (ids.includes(f.id)) {\n                    f.visibility_id = bulkVisibility.value\n                }\n            })\n        }\n\n        bulkFolder.value = null\n        bulkVisibility.value = null\n        isBulking.value = false\n\n        // Remove old selected files from the home folder\n        let selectedFiles = homeFiles.value.filter(i => i.is_selected)\n        selectedFiles.forEach(f => {\n            f.is_selected = false\n        })\n\n        window.showToast(res.data.toast)\n        closeModal(updateDialog.value)\n    })\n}\n\nconst selectFiles = () => {\n    fileField.value.click()\n}\n\nconst filesSelected = async (event) => {\n    const file = event.target.files[0]\n    const selectedFiles = event.target.files\n    if (!selectedFiles) {\n        uploading.value = false\n        return\n    }\n    const reader = new FileReader()\n    reader.onload = (e) => {\n        imagePreview.value = e.target.result\n    }\n    reader.readAsDataURL(file)\n\n    uploading.value = true\n\n    cancelTokenSource.value = axios.CancelToken.source()\n    fileField.value.disabled = true\n\n    const formData = new FormData()\n    if (folder.value) {\n        formData.append('folder_id', folder.value.id)\n    }\n    Array.from(selectedFiles).forEach(f => {\n        formData.append('files[]', f)\n    })\n\n    axios.post(uploadApi.value, formData, {\n        headers: {\n            'Content-Type': 'multipart/form-data',\n        },\n        cancelToken: cancelTokenSource.value.token,\n        onUploadProgress: function (progressEvent) {\n            progress.value = Math.round((progressEvent.loaded * 100) / progressEvent.total)\n        }\n    })\n        .then(res => {\n            uploading.value = false\n            fileField.value.disabled = false\n            fileField.value = null\n            imagePreview.value = null\n            // Find the index of the last folder\n            const matchCriterion = f => f.is_folder;\n            const lastIndex = files.value.map((file, index) => matchCriterion(file) ? index : -1)\n                .filter(index => index !== -1)\n                .pop();\n\n            res.data.files.forEach(f => {\n                if (lastIndex !== undefined) {\n                    files.value.splice(lastIndex + 1, 0, f);\n                } else {\n                    // If no match is found, you can push the item to the end or handle accordingly\n                    files.value.push(f);\n                }\n            })\n\n            used.value = res.data.used\n            //console.log(used.value, res.data.used)\n        })\n        .catch (err => {\n            console.error(err)\n            uploading.value = false\n            fileField.value.disabled = false\n            imagePreview.value = null\n            if (axios.isCancel(err)) {\n                // User cancelled\n                fileField.value = null\n            } else {\n                showErrors(err)\n            }\n        })\n}\n\nconst showErrors = (err) => {\n    if (!err.response) {\n        return\n    }\n    if (err.response.data.error) {\n        window.showToast(err.response.data.error, 'error')\n        return\n    }\n\n    if (err.response && err.response.status === 403 && err.response.data.message) {\n        window.showToast(trans.value.unauthorized, 'error')\n        return\n    }\n\n    const errorKeys = Object.keys(err.response.data.errors)\n    errorKeys.forEach(i => {\n        window.showToast(err.response.data.errors[i][0], 'error')\n    })\n}\n\nconst countSelected = () => {\n    let count = files.value.filter(f => f.is_selected).length\n    if (count === 0) {\n        return\n    }\n    return '(' + count + ')'\n}\n\nconst progressPercentage = () => {\n    return progress.value + '%'\n}\n\n\nconst cancelUpload = () => {\n    cancelTokenSource.value.cancel('Upload canceled by user.')\n}\n\n// A file has been updated in the side panel, update our main reference?\nconst updatedFile = (file) => {\n    // No need as it's editing the reactive component, apparently\n}\n\nconst deletedFile = (file, newSpace) => {\n    files.value = files.value.filter(f => f.id !== file.id)\n    currentFile.value = null\n\n    if (file.is_folder) {\n        if (file.folder_id) {\n\n        } else {\n            home()\n        }\n    }\n\n    used.value = newSpace\n}\n\nconst closeFile = () => {\n    currentFile.value = null\n}\n\nconst openFolderDetails = () => {\n    if (currentFile.value === folder.value) {\n        currentFile.value = null\n        return\n    }\n    currentFile.value = folder.value;\n}\n\nconst toggleFilters = () => {\n    showFilters.value = !showFilters.value;\n}\n\nconst toggleSort = () => {\n    showSort.value = !showSort.value;\n}\n\nconst onClickOutside = () => {\n    showFilters.value = false;\n    showSort.value = false;\n}\n\nconst toggleUnused = () => {\n    if (!showUnused.value) {\n        apiParameters.value['toggleParam'] = '';\n        home()\n        return\n    }\n    console.log('filter')\n    loading.value = true\n\n    apiParameters.value['toggleParam'] = 'unused=1';\n\n    var params = '';\n\n    if (apiParameters.value['searchParam']) {\n        params += apiParameters.value['searchParam'] + '&';\n    }\n\n    if (apiParameters.value['sortParam']) {\n        params += apiParameters.value['sortParam'] + '&';\n    }\n\n    if (apiParameters.value['toggleParam']) {\n        params += apiParameters.value['toggleParam'] + '&';\n    }\n\n    axios.get(searchApi.value + '/?' + params).then(res => {\n        showSearchResults(res.data)\n    })\n}\n\nconst sort = (order = 'default') => {\n\n    if (order == 'asc') {\n        sortDesc.value = false;\n        sortDefault.value = false;\n        sortAsc.value = true;\n    } else if (order == 'desc') {\n        sortAsc.value = false;\n        sortDefault.value = false;\n        sortDesc.value = true;\n    } else if (order == 'default') {\n        sortAsc.value = false;\n        sortDesc.value = false;\n        sortDefault.value = true;\n    }\n\n    loading.value = true\n\n    apiParameters.value['sortParam'] = 'sort=' + order;\n\n    var params = '';\n\n    if (apiParameters.value['searchParam']) {\n        params += apiParameters.value['searchParam'] + '&';\n    }\n\n    if (apiParameters.value['sortParam']) {\n        params += apiParameters.value['sortParam'] + '&';\n    }\n\n    if (apiParameters.value['toggleParam']) {\n        params += apiParameters.value['toggleParam'] + '&';\n    }\n\n    let api = searchApi.value\n\n    if (folder.value?.open) {\n        api = folder.value.open\n    }\n\n    axios.get(api + '/?' + params).then(res => {\n        showFilterResults(res.data)\n    })\n}\n\nconst showFilterResults = (data) => {\n    files.value = data.files\n    nextPage.value = data.next\n    loading.value = false\n}\n\nconst showSearchResults = (data) => {\n    files.value = data.files\n    nextPage.value = data.next\n    folder.value = null\n    loading.value = false\n}\n\nconst usedSpace = () => {\n    return human(used.value)\n}\nconst totalSpace = () => {\n    if (total.value === 0) {\n        return '∞'\n    }\n    return human(total.value)\n}\n\nconst human = (kb) => {\n    if (kb == 0) {\n        return '0';\n    }\n    else if (kb > 1000000) {\n        return (kb / (1024 * 1024)).toFixed(2) + ' GiB'\n    }\n    else if (kb > 1000) {\n        return (kb / (1024)).toFixed(2) + ' MiB'\n    }\n    return (kb * 1).toFixed(2) + ' KiB'\n}\n\nconst usedClasses = () => {\n    let css = 'rounded h-2 transition-all duration-300'\n    let per = usedPercentage()\n    if (per < 60) {\n        return css + ' bg-primary'\n    } else if (per < 90) {\n        return css + ' bg-orange-400'\n    }\n    return css + ' bg-red-500';\n}\nconst usedPercentage = () => {\n    if (total.value === 0) {\n        return 0\n    }\n    return Math.round((used.value / total.value) * 100)\n}\n\nconst hasPreview = () => {\n    return imagePreview.value !== null\n}\n</script>\n"
  },
  {
    "path": "resources/js/gallery/Preview.vue",
    "content": "<template>\n    <div :class=\"fileClass()\" @click=\"click\">\n        <input type=\"checkbox\" v-model=\"file.is_selected\" v-if=\"isBulking\" class=\"absolute! top-4 left-4\" />\n        <div class=\"flex-none w-20 md:w-full h-16 md:h-32\" v-if=\"file.is_folder\">\n\n            <div class=\"w-full h-full\" v-if=\"file.thumbnails.length === 1\"  :style=\"{backgroundImage: previewImage(file.thumbnails[0])}\"></div>\n            <div class=\"w-full h-full flex gap-0.5\" v-else-if=\"file.thumbnails.length === 2\">\n                <div class=\"w-1/2 h-full cover-background\" :style=\"{backgroundImage: previewImage(file.thumbnails[0])}\"></div>\n                <div class=\"w-1/2 h-full cover-background\" :style=\"{backgroundImage: previewImage(file.thumbnails[1])}\"></div>\n            </div>\n            <div class=\"w-full h-full flex gap-0.5\" v-else-if=\"file.thumbnails.length === 3\">\n                <div class=\"w-1/2 h-full cover-background\" :style=\"{backgroundImage: previewImage(file.thumbnails[0])}\"></div>\n                <div class=\"flex flex-col gap-0.5 w-1/2 h-full\">\n                    <div class=\"w-full h-1/2 cover-background\" :style=\"{backgroundImage: previewImage(file.thumbnails[1])}\"></div>\n                    <div class=\"w-full h-1/2 cover-background\" :style=\"{backgroundImage: previewImage(file.thumbnails[2])}\"></div>\n                </div>\n            </div>\n            <div v-else class=\"h-full w-full flex items-center justify-center align-middle text-6xl text-neutral-content\">\n                <i class=\"fa-regular fa-folder\" aria-hidden=\"true\" />\n            </div>\n        </div>\n        <div class=\"flex-none w-20 md:w-full h-16 md:h-32 cover-background\" v-else-if=\"hasThumbnail()\" :style=\"{backgroundImage: previewImage(file.thumbnail)}\">\n\n        </div>\n        <div v-else class=\"w-full h-20 md:h-32\">\n\n        </div>\n        <div class=\"flex gap-1 md:gap-2 items-center md:p-4 truncate\">\n            <div class=\"grow-0 md:hidden\" v-if=\"file.visibility_id > 1\">\n                <i :class=\"visibilityClass()\" aria-hidden=\"true\" :title=\"visibilityTitle()\"></i>\n            </div>\n            <div class=\"grow truncate\">\n                <span v-html=\"file.name\" class=\"\"></span>\n            </div>\n            <div class=\"hidden md:block grow-0\" v-if=\"file.visibility_id > 1\">\n                <i :class=\"visibilityClass()\" aria-hidden=\"true\" :title=\"visibilityTitle()\"></i>\n            </div>\n        </div>\n    </div>\n\n</template>\n\n<script setup lang=\"ts\">\nimport {ref, onMounted, watch, onBeforeMount} from 'vue'\n\nconst emit = defineEmits(['select'])\n\n\nconst props = defineProps<{\n    file: Object,\n    isBulking: Boolean,\n    i18n: Object\n}>()\n\nconst hasThumbnail = () => {\n    return props.file.thumbnail !== null\n}\n\nconst previewClass = () => {\n    return\n}\nconst previewImage = (url) => {\n    return \"url('\" + url + \"')\"\n}\n\nconst click = () => {\n    emit('select', props.file)\n}\n\nconst fileClass = () => {\n    let css = 'rounded-xl shadow-sm bg-base-100 overflow-hidden sm:w-48 cursor-pointer hover:shadow-lg relative flex flex-row md:flex-col gap-2 md:gap-0';\n\n    if (!props.file.is_selected || !props.isBulking) {\n        return css + '  '\n    }\n    return css + ' bg-base-300'\n}\n\nconst visibilityClass = () => {\n    switch(parseInt(props.file.visibility_id)) {\n        case 2:\n            return 'fa-regular fa-lock'\n        case 3: // admin-self\n            return 'fa-regular fa-user-lock'\n        case 4:\n            return 'fa-regular fa-user-secret'\n        case 5:\n            return 'fa-regular fa-users'\n        default:\n            return 'fa-regular fa-eye'\n    }\n}\n\nconst visibilityTitle = () => {\n    return props.i18n['visibility.' + props.file.visibility_id]\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/gallery/Selection.vue",
    "content": "<template>\n    <div v-if=\"loading\">\n        <i class=\"fa-solid fa-spin fa-spinner\" aria-label=\"Loading\"></i>\n    </div>\n    <div v-else :class=\"backgroundClass()\" :style=\"{'backgroundImage': backgroundImage()}\">\n        <div :class=\"buttonsClass()\">\n            <div class=\"rounded p-2 cursor-pointer backdrop-blur-sm backdrop-opacity-30 bg-red-700/50 text-white hover:backdrop-opacity-100 transition\" v-if=\"hasPreview()\" @click=\"removeImage()\" v-html=\"trans.remove\">\n            </div>\n            <div class=\"flex items-center gap-1\" v-if=\"!hasImage()\">\n                <input type=\"file\" v-bind:accept=\"props.accepts\" class=\"w-full\" @change=\"upload\" ref=\"fileField\" />\n            </div>\n            <div class=\"flex items-center gap-1\" v-if=\"!hasImage()\">\n                <input ref=\"urlField\" type=\"text\" class=\"w-full\" v-model=\"imageUrl\" @blur=\"download()\" @paste=\"pasteUrl\" :placeholder=\"trans.url\" />\n                <i class=\"fa-solid fa-spin fa-spinner\" v-if=\"downloading\" aria-label=\"Downloading\" />\n            </div>\n            <div class=\"flex items-center gap-1\" v-if=\"!hasImage()\">\n                <span role=\"button\" class=\"btn2 btn-outline btn-sm\" @click=\"openGallery()\" v-html=\"trans.gallery\"></span>\n            </div>\n        </div>\n        <div v-if=\"uploading\" class=\"flex gap-2 flex-col w-full\">\n            <div class=\"progress h-1 w-full\">\n                <div class=\"h-1 bg-accent shadow-xs\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\" :style=\"{'width': progressPercentage()}\">\n                    <span class=\"sr-only\"></span>\n                </div>\n            </div>\n            <div class=\"rounded p-2 cursor-pointer backdrop-blur-sm backdrop-opacity-30 bg-red-700/50 text-white hover:backdrop-opacity-100 transition flex items-center gap-2\" @click=\"cancelUpload()\">\n                <span class=\"grow\" v-html=\"trans.cancel\"></span>\n                <span class=\"text-xs flex-none\" v-html=\"progressPercentage()\"></span>\n            </div>\n        </div>\n    </div>\n    <input type=\"hidden\" :name=\"props.field\" v-model=\"currentUuid\" />\n    <input type=\"hidden\" :name=\"'remove-image'\" value=\"1\" v-if=\"removedOld\" />\n\n    <Browser\n        :api=\"props.browse\"\n        :opened=\"galleryOpened\"\n        :i18n=\"i18n\"\n        @selected=\"selectImage\"\n        @closed=\"closedGallery\"\n    ></Browser>\n\n    <dialog ref=\"cta\" class=\"dialog rounded-2xl text-center\" v-if=\"!loading\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans.cta_title\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"closeDialog(cta)\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">Close</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl flex flex-col gap-2 text-left p-4 md:px-6\">\n            <div class=\"flex flex-col gap-1 w-full\">\n                <p v-html=\"storageFull\"></p>\n                <p v-html=\"trans.cta_helper\" v-if=\"!hasPremium\"></p>\n            </div>\n        </article>\n        <footer class=\"p-4 md:px-6\" v-if=\"!hasPremium\">\n            <menu class=\"\">\n                <a v-bind:href=\"props.cta\" class=\"btn2 btn-primary\">\n                    <i class=\"fa-regular fa-gem\" aria-hidden=\"true\" />\n                    <span v-html=\"trans.cta_action\"></span>\n                </a>\n            </menu>\n        </footer>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref, onMounted, onBeforeUnmount} from 'vue'\nimport Browser from \"./Browser.vue\"\n\nconst props = defineProps<{\n    file: string,\n    url: string,\n    accepts: string,\n    uuid: string,\n    thumbnail: string,\n    browse: string,\n    field: string,\n    old: string, // Using the old system\n    i18n: undefined,\n    cta: string,\n    premium: string\n}>()\n\n\nconst loading = ref(true)\nconst downloading = ref(false)\nconst uploading = ref(false)\nconst imageUrl = ref()\nconst urlField = ref()\nconst fileField = ref()\nconst currentThumbnail = ref()\nconst currentUuid = ref()\nconst galleryOpened = ref(false)\nconst progress = ref(0)\nconst imagePreview = ref(null)\nlet lastImageUrl\nconst cancelTokenSource = ref(null)\nconst hasOld = ref(false)\nconst hasPremium = ref(false)\nconst removedOld = ref(false)\nconst trans = ref(null)\nconst cta = ref()\nconst storageFull = ref()\n\nonMounted(() => {\n    loading.value = false\n    currentThumbnail.value = props.thumbnail\n    currentUuid.value = props.uuid\n    if (props.old === 'true') {\n        hasOld.value = true\n    }\n    if (props.premium === 'true') {\n        hasPremium.value = true\n    }\n\n    trans.value = JSON.parse(props.i18n)\n});\n\nconst backgroundClass = () => {\n    let css = 'relative flex items-end align-middle rounded overflow-hidden bg-no-repeat '\n\n    if (!hasPreview()) {\n        css += 'w-full'\n    } else {\n        css += ' cover-background preview-bg w-48 h-36 p-2 '\n    }\n    return css\n}\n\nconst buttonsClass = () => {\n    return uploading.value ? 'hidden' : 'flex gap-2 flex-col w-full'\n}\n\nconst hasImage = () => {\n    return hasOld.value || currentUuid.value !== null && currentUuid.value !== ''\n}\n\nconst hasPreview = () => {\n    if (imagePreview.value || hasOld.value) {\n        return true\n    }\n    return currentUuid.value !== null && currentUuid.value !== ''\n}\n\nconst removeImage = () => {\n    currentUuid.value = null\n    currentThumbnail.value = null\n    if (hasOld.value) {\n        hasOld.value = false\n        removedOld.value = true\n    }\n}\n\nconst backgroundImage = () => {\n    if (imagePreview.value) {\n        return 'url(\\'' + imagePreview.value + '\\')'\n    }\n    if (!currentThumbnail.value) {\n        return ''\n    }\n    return 'url(\\'' + currentThumbnail.value + '\\')'\n}\n\nconst progressPercentage = () => {\n    return progress.value + '%'\n}\n\nconst openGallery = () => {\n    galleryOpened.value = true\n}\n\nconst pasteUrl = (event) => {\n    imageUrl.value = event.clipboardData.getData('text')\n    download()\n}\n\nconst download = () => {\n    if (!imageUrl.value || imageUrl.value == lastImageUrl) {\n        return\n    }\n    lastImageUrl = imageUrl.value\n    downloading.value = true\n    urlField.value.disabled = true\n\n    axios.post(props.url, {url: imageUrl.value})\n        .then(res => {\n            urlField.value.disabled = false\n            downloading.value = false\n            imageUrl.value = null\n\n            currentThumbnail.value = res.data.thumbnail\n            currentUuid.value = res.data.uuid\n        })\n        .catch(err => {\n            urlField.value.disabled = false\n            downloading.value = false\n            urlField.value.focus()\n\n            showErrors(err)\n        })\n}\n\nconst upload = async (event) => {\n    const file = event.target.files[0]\n    if (!file) {\n        uploading.value = false\n        return\n    }\n    const reader = new FileReader()\n    reader.onload = (e) => {\n        imagePreview.value = e.target.result\n    }\n    reader.readAsDataURL(file)\n\n    uploading.value = true\n    document.addEventListener('keydown', handleEscape)\n    cancelTokenSource.value = axios.CancelToken.source()\n    fileField.value.disabled = true\n\n    const formData = new FormData()\n    formData.append('file', file)\n\n    axios.post(props.file, formData, {\n        headers: {\n            'Content-Type': 'multipart/form-data',\n        },\n        cancelToken: cancelTokenSource.value.token,\n        onUploadProgress: function (progressEvent) {\n            progress.value = Math.round((progressEvent.loaded * 100) / progressEvent.total)\n        }\n    })\n        .then(res => {\n            uploading.value = false\n            fileField.value.disabled = false\n            fileField.value = null\n            currentThumbnail.value = res.data.thumbnail\n            currentUuid.value = res.data.uuid\n            imagePreview.value = null\n            document.removeEventListener('keydown', handleEscape)\n        })\n        .catch (err => {\n            uploading.value = false\n            fileField.value.disabled = false\n            imagePreview.value = null\n            if (axios.isCancel(err)) {\n                // User cancelled\n                fileField.value = null\n            } else {\n                showErrors(err)\n            }\n            document.removeEventListener('keydown', handleEscape)\n        })\n}\n\nconst showErrors = (err) => {\n    if (!err.response) {\n        return\n    }\n    if (err.response.data.error) {\n        window.showToast(err.response.data.error, 'error')\n        return\n    }\n\n    if (err.response && err.response.status === 403 && err.response.data.message) {\n        window.showToast(trans.value.unauthorized, 'error')\n        return\n    }\n\n    const errorKeys = Object.keys(err.response.data.errors)\n    errorKeys.forEach(i => {\n        if (err.response.data.errors[i][0].includes('(storage_full)')) {\n            storageFull.value = err.response.data.errors[i][0].replace('(storage_full)', '')\n            openDialog(cta.value);\n            return;\n        }\n        window.showToast(err.response.data.errors[i][0], 'error')\n    })\n}\n\nconst selectImage = (image) => {\n    currentUuid.value = image.uuid\n    currentThumbnail.value = image.thumbnail\n}\n\nconst closedGallery = () => {\n    galleryOpened.value = false\n}\n\nconst handleEscape = (event) => {\n    if (event.key === 'Escape' && uploading.value) {\n        cancelUpload()\n    }\n}\n\nconst cancelUpload = (event) => {\n    cancelTokenSource.value.cancel('Upload canceled by user.')\n}\n\nconst openDialog = (dialog) => {\n    dialog.showModal()\n    dialog.addEventListener('click', clickOutside);\n}\n\nconst closeDialog = (modal) => {\n    modal.removeEventListener('click', clickOutside)\n    modal.close()\n}\n\nconst clickOutside = (event) => {\n    let rect = event.target.getBoundingClientRect()\n    let isInDialog = (rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n        rect.left <= event.clientX && event.clientX <= rect.left + rect.width)\n    if (!isInDialog && event.target.tagName === 'DIALOG') {\n        closeDialog(event.target)\n    }\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/gallery/gallery.js",
    "content": "import { createApp } from 'vue'\nimport Gallery from \"./Gallery.vue\"\nimport vClickOutside from \"click-outside-vue3\"\n\nconst app = createApp({})\napp.component('gallery', Gallery)\napp.use(vClickOutside)\n\napp.mount('#gallery');\n"
  },
  {
    "path": "resources/js/gallery/selection.js",
    "content": "import { createApp } from 'vue'\nimport Selection from \"./Selection.vue\"\n\nconst loadGalleryWidget = () => {\n\n    const elements = document.querySelectorAll('.gallery-selection')\n    elements.forEach(el => {\n        // Don't re-mount if already mounted\n        if (el.dataset.init === '1') {\n            return\n        }\n        el.dataset.init = '1'\n        const app = createApp({})\n        app.component('gallery-selection', Selection)\n        app.mount(el)\n    })\n};\n\nloadGalleryWidget();\n\nwindow.onEvent(function() {\n    loadGalleryWidget();\n});\n"
  },
  {
    "path": "resources/js/header.js",
    "content": "import { createApp } from 'vue';\nimport NavToggler from \"./components/layout/NavToggler.vue\";\nimport NavSearch from \"./components/layout/NavSearch.vue\";\nimport NavSwitcher from \"./components/layout/NavSwitcher.vue\";\nimport vClickOutside from \"click-outside-vue3\";\n\nconst app = createApp({});\napp.component('nav-toggler', NavToggler);\napp.component('nav-search', NavSearch);\napp.component('nav-switcher', NavSwitcher);\napp.use(vClickOutside);\napp.mount('header');\n"
  },
  {
    "path": "resources/js/history.js",
    "content": "\nconst initHistoryFilters = () => {\n    const form = document.querySelector('form.history-filters');\n    const filters = document.querySelectorAll('.history-filters select');\n    filters.forEach(filter => {\n        filter.addEventListener('change', function () {\n            document.querySelector('.filters-loading').classList.remove('hidden');\n            form.requestSubmit();\n            filters.disabled = true;\n        });\n    });\n};\ninitHistoryFilters();\n"
  },
  {
    "path": "resources/js/keep-alive.js",
    "content": "const multiEditingModal = document.querySelector('dialog#edit-warning');\nconst keepAliveTimer = 300 * 1000; // 5 minutes\nlet config = document.querySelector('input[name=\"edit-warning\"]');\nlet keepAliveUrl;\nlet keepAliveEnabled = true;\n\n\nconst init = () => {\n    if (!multiEditingModal) {\n        return;\n    }\n\n    window.openDialog('edit-warning', config.dataset.url);\n\n    window.onEvent(function() {\n        registerEditWarning();\n    });\n    registerEditKeepAlive();\n};\n\n/**\n *\n */\nfunction registerEditWarning() {\n    // Don't enable keep alive until the user has confirmed\n    keepAliveEnabled = false;\n\n    // Handle clicks\n    const field = document.getElementById('entity-edit-warning-ignore');\n    field.addEventListener('click', function (e) {\n        e.preventDefault();\n        keepAliveEnabled = true;\n\n        axios\n            .post(field.dataset.url)\n            .then(() => {\n                multiEditingModal.close();\n            });\n    });\n}\n\n/**\n * Set up the keep alive pulse configuration\n */\nconst registerEditKeepAlive = () => {\n    const field = document.getElementById('editing-keep-alive');\n    if (!field) {\n        return;\n    }\n    keepAliveUrl = field.dataset.url;\n    setTimeout(keepAlivePulse, keepAliveTimer);\n};\n\n/**\n * Send a pulse to the backend that the user is still editing the entity\n */\nconst keepAlivePulse = () => {\n    if (!keepAliveEnabled) {\n        setTimeout(keepAlivePulse, keepAliveTimer);\n        return;\n    }\n\n    axios.post(keepAliveUrl)\n        .then(() => {\n            //console.log('kept alive');\n            setTimeout(keepAlivePulse, keepAliveTimer);\n        });\n};\n\nwindow.onReady(() => {\n    init();\n})\n"
  },
  {
    "path": "resources/js/keyboard.js",
    "content": "/**\n * Parse a shortcut string like \"ctrl+shift+delete\" into a descriptor object.\n * Supports: ctrl, alt, shift, meta (or cmd) as modifiers + any key name.\n * Key names are matched against event.key (case-insensitive for letters).\n */\nconst parseShortcut = (shortcut) => {\n    const parts = shortcut.toLowerCase().split('+').map(p => p.trim());\n    return {\n        ctrl: parts.includes('ctrl') || parts.includes('cmd') || parts.includes('meta'),\n        alt: parts.includes('alt'),\n        shift: parts.includes('shift'),\n        key: parts.filter(p => !['ctrl', 'cmd', 'meta', 'alt', 'shift'].includes(p))[0] || null,\n    };\n};\n\n/**\n * Check if a keyboard event matches a parsed shortcut descriptor.\n */\nconst matchesShortcut = (event, desc) => {\n    if (!desc.key) {\n        return false;\n    }\n    const ctrlMatch = desc.ctrl === (event.ctrlKey || event.metaKey);\n    const altMatch = desc.alt === event.altKey;\n    const shiftMatch = desc.shift === event.shiftKey;\n    const keyMatch = event.key.toLowerCase() === desc.key;\n    return ctrlMatch && altMatch && shiftMatch && keyMatch;\n};\n\n/**\n * Scan the DOM for elements with data-shortcut and register a single\n * keydown listener that dispatches clicks to matching elements.\n *\n * Format examples:\n *   data-shortcut=\"e\"              → press E (no modifiers)\n *   data-shortcut=\"ctrl+delete\"    → Ctrl+Delete\n *   data-shortcut=\"ctrl+shift+s\"   → Ctrl+Shift+S\n *   data-shortcut=\"ctrl+alt+c\"     → Ctrl+Alt+C\n */\nconst initKeyboardShortcuts = () => {\n    document.addEventListener('keydown', function (event) {\n        const target = event.target;\n        const entityModal = document.getElementById('primary-dialog');\n\n        // Escape to close quick creator selection modal\n        if (event.key === 'Escape') {\n            if (entityModal?.classList.contains('qq-modal-selection')) {\n                window.closeDialog(entityModal);\n            }\n            return;\n        }\n\n        // Collect all shortcut elements currently in the DOM\n        const elements = document.querySelectorAll('[data-shortcut]');\n        for (const el of elements) {\n            // Skip form elements — they use initKeyboardSave instead\n            if (el.tagName.toLowerCase() === 'form') {\n                continue;\n            }\n\n            const desc = parseShortcut(el.dataset.shortcut);\n            if (!matchesShortcut(event, desc)) {\n                continue;\n            }\n\n            // For shortcuts without modifiers, skip if user is typing in a field or modal is open\n            if (!desc.ctrl && !desc.alt && !desc.shift) {\n                if (isInputField(target) || entityModal?.open) {\n                    return;\n                }\n            }\n\n            event.preventDefault();\n\n            // Focus for inputs, click for everything else\n            if (el.dataset.shortcutAction === 'focus') {\n                el.focus();\n            } else {\n                el.click();\n                el.blur();\n            }\n            return;\n        }\n\n    });\n};\n\nconst isInputField = (target) => {\n    if (!target || target.length === 0) {\n        return false;\n    }\n    const tagNames = ['input', 'textarea', 'select'];\n    if (tagNames.includes(target.tagName.toLowerCase())) {\n        return true;\n    }\n    else if (target.getAttribute('contentEditable') === 'true') {\n        return true;\n    }\n    else if (target.classList.contains('CodeMirror')) {\n        return true;\n    }\n    return false;\n};\n\nconst initKeyboardSave = () => {\n    let fields = document.querySelectorAll('form[data-shortcut]');\n    fields.forEach(function (e) {\n        initSaveKeyboardShortcut(e);\n    });\n};\n\n/**\n * Handle saving form\n * @param form\n */\nconst initSaveKeyboardShortcut = (form) => {\n    if (form.dataset.shortcutInit) {\n        return;\n    }\n    form.dataset.shortcutInit = 1;\n    document.addEventListener('keydown', function(e) {\n        // Need to check on lowercase key, because shift will uppercase it\n        if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 's') {\n            e.preventDefault();\n            if (form.dataset.unload) {\n                window.entityFormHasUnsavedChanges = false;\n            }\n\n            if (e.shiftKey) {\n                setFormAction('submit-update');\n            } else if (e.altKey) {\n                setFormAction('submit-new');\n            }\n            form.requestSubmit();\n            return false;\n        }\n        // Save & Copy\n        if ((e.ctrlKey || e.metaKey) && e.altKey && e.key === 'c') {\n            if (form.dataset.unload) {\n                window.entityFormHasUnsavedChanges = false;\n            }\n            setFormAction('submit-copy');\n            form.submit();\n            return false;\n        }\n    });\n};\n\n/**\n * Change the default action to follow after the form submission\n * @param action\n */\nconst setFormAction = (action) => {\n    const entityFormDefaultAction = document.getElementById('form-submit-main');\n    if (!entityFormDefaultAction) {\n        return;\n    }\n\n    entityFormDefaultAction.name = action;\n    document.getElementById('submit-mode').name = action;\n};\n\n/**\n * Strip HTML from fontAwesome or RPGAwesome and just keep the class to make people's lives\n * easier.\n */\nconst initPasting = () => {\n    const fields = document.querySelectorAll('input[data-paste=\"fontawesome\"]');\n    fields.forEach(function (field) {\n        field.addEventListener('paste', function (e) {\n            e.preventDefault();\n            // window.clipboardData is used for older browsers\n            const pasteData = (e.clipboardData || window.clipboardData).getData('text');\n\n            if (pasteData.startsWith('<i class=\"fa') || pasteData.startsWith('<i class=\"ra')) {\n                // Create a temporary container to parse the HTML\n                const tempDiv = document.createElement('div');\n                tempDiv.innerHTML = pasteData;\n\n                // Find the FontAwesome or RPGAwesome icon in the pasted HTML\n                const icon = tempDiv.querySelector('i');\n\n                let iconClass = icon.getAttribute('class');\n                if (iconClass) {\n                    field.value = iconClass;\n                    return;\n                }\n            }\n            field.value = pasteData;\n        });\n    });\n};\n\ninitKeyboardSave();\ninitKeyboardShortcuts();\ninitPasting();\n\nwindow.onEvent(function() {\n    initPasting();\n    initKeyboardShortcuts();\n    initKeyboardSave();\n});\n"
  },
  {
    "path": "resources/js/location/map-v3.js",
    "content": "const mapPageBody = document.querySelector('#map-body');\n\nconst sidebarMap = document.querySelector('#sidebar-map');\nconst sidebarMarker = document.querySelector('#sidebar-marker');\nconst markerModal = document.querySelector('#map-marker-modal');\n\n// Polygon layout style\nlet eraseTempPolygonBtn;\nlet polygonStrokeWeight, polygonStrokeColour, polygonStrokeOpacity, polygonColour, polygonOpacity;\n\nlet tickerTimeout, tickerUrl, tickerTs;\n\nconst isMobile = window.matchMedia(\"only screen and (max-width: 760px)\");\n\nconst shapeField = document.querySelector('input[name=\"shape_id\"]');\n\nconst initTabs = () => {\n    const pin = document.querySelector('a[href=\"#marker-pin\"]');\n    if (!pin) {\n        return;\n    }\n    pin.addEventListener('click', function () {\n        shapeField.value = 1;\n        document.querySelector('#map-marker-bg-colour').classList.remove('hidden');\n        showMainFields();\n    });\n    document.querySelector('a[href=\"#marker-label\"]').addEventListener('click', function () {\n        shapeField.value = 2;\n        document.querySelector('#map-marker-bg-colour').classList.add('hidden');\n        showMainFields();\n    });\n    document.querySelector('a[href=\"#marker-circle\"]').addEventListener('click', function () {\n        shapeField.value = 3;\n        document.querySelector('#map-marker-bg-colour').classList.remove('hidden');\n        showMainFields();\n    });\n    document.querySelector('a[href=\"#marker-poly\"]').addEventListener('click', function () {\n        shapeField.value = 5;\n        document.querySelector('#map-marker-bg-colour').classList.remove('hidden');\n        showMainFields();\n    });\n    document.querySelector('a[href=\"#presets\"]')?.addEventListener('click', function (e) {\n        let target = e.currentTarget;\n        loadPresets(target.dataset.presets);\n    });\n    document.querySelector('a[href=\"#form-markers\"]')?.addEventListener('click', function () {\n        window.map.invalidateSize();\n    });\n};\n\n/**\n *\n */\nconst initMapExplore = () => {\n    //console.log('initMapExplore', '');\n    if (!mapPageBody) {\n        //console.log('initMapExplore', 'no explore mode');\n        return;\n    }\n\n    window.markerDetails = function(url) {\n        showSidebar();\n        if (isMobile.matches) {\n            url = url + '?mobile=1';\n            window.openDialog('map-marker-modal', url);\n            return;\n        }\n\n        fetch(url)\n            .then((response) => response.json())\n            .then((result) => {\n                sidebarMarker.innerHTML = result.body;\n                sidebarMarker.classList.remove('hidden');\n                sidebarMarker.parentNode.querySelector('.spinner').classList.add('hidden');\n\n                handleCloseMarker();\n                mapPageBody.classList.add('sidebar-open');\n\n                window.triggerEvent();\n            });\n    };\n\n    initTicker();\n    initLegend();\n    initZoom();\n\n    // When the sidebar gets triggers, we need to tell the map that its bounds have changed\n    $(document).on('expanded.pushMenu collapsed.pushMenu', function () {\n        window.map.invalidateSize();\n    });\n};\n\n/**\n * When submitting the layer or marker form from the map modal, disable the map form unsaved changed\n * alert.\n */\nconst initForms = () => {\n    initTabs();\n    initCircle();\n    initPolygonDrawing();\n\n    //console.info('mapsv3', 'initMapForms');\n    const markerForm = document.querySelector('#map-marker-form');\n    const markerEditForm = document.querySelector('.map-marker-edit-form');\n    if (!markerForm && !markerEditForm) {\n        //console.info('initMapForms empty');\n        return;\n    }\n\n    markerForm.onsubmit = function() {\n        window.entityFormHasUnsavedChanges = false;\n    };\n\n    initLegend();\n};\n\nconst initCircle = () => {\n    const size = document.querySelector('select[name=\"size_id\"]');\n    if (!size) {\n        return;\n    }\n    size.addEventListener('change', function (e) {\n        if (size.value == 6) {\n            document.querySelector('.map-marker-circle-helper').classList.add('hidden');\n            document.querySelector('.map-marker-circle-radius').classList.remove('hidden');\n        } else {\n            document.querySelector('.map-marker-circle-radius').classList.add('hidden');\n            document.querySelector('.map-marker-circle-helper').classList.remove('hidden');\n        }\n    });\n};\n\nconst showSidebar = () =>\n{\n    // On mobile use the modal instead of the sidebar\n    if (isMobile.matches) {\n        return;\n    }\n\n    //window.map.invalidateSize();\n    mapPageBody.classList.remove('sidebar-collapse');\n    mapPageBody.classList.add('sidebar-open');\n    sidebarMap.classList.add('hidden');\n    sidebarMarker.innerHTML = '';\n    sidebarMarker.classList.remove('hidden');\n    sidebarMarker.parentNode.querySelector('.spinner').classList.remove('hidden');\n    invalidateMapOnSidebar();\n};\n\nconst handleCloseMarker = () =>\n{\n    document.querySelector('.marker-close')?.addEventListener('click', function () {\n        sidebarMarker.classList.add('hidden');\n        sidebarMap.classList.remove('hidden');\n    });\n};\n\nconst initTicker = () => {\n    const config = document.getElementById('ticker-config');\n    tickerTimeout = config.dataset.timeout;\n    tickerUrl = config.dataset.url;\n    tickerTs = config.dataset.ts;\n    setTimeout(mapTicker, tickerTimeout);\n};\n\nconst mapTicker = () => {\n    fetch(tickerUrl + '?ts=' + tickerTs)\n        .then(response => response.json())\n        .then(data => {\n            tickerTs = data.ts;\n            for (let id in data.markers) {\n                let changedMarker = data.markers[id];\n                //console.log('moving', 'marker' + changedMarker.id, changedMarker);\n                if (!window['marker' + changedMarker.id]) {\n                    continue;\n                }\n                window['marker' + changedMarker.id].setLatLng({\n                    lon: changedMarker.longitude,\n                    lat: changedMarker.latitude\n                });\n            }\n            setTimeout(mapTicker, tickerTimeout);\n        });\n};\n\nconst initLegend = () => {\n    document.querySelectorAll('.map-legend-marker')?.forEach(el => {\n        el.addEventListener('click', function (ev) {\n            ev.preventDefault();\n            window.map.panTo(L.latLng(el.dataset.lat, el.dataset.lng));\n            window[el.dataset.id].openPopup();\n        });\n    });\n\n    document.querySelector('a.sidebar-toggle')?.addEventListener('click', function () {\n        invalidateMapOnSidebar();\n    });\n};\n\nconst invalidateMapOnSidebar = () => {\n    setTimeout(() => {\n        // Invalidate the map size when the sidebar is rendered/hidden\n        window.map.invalidateSize();\n    }, 500);\n};\n\nconst initZoom = () => {\n    LControlZoomDisplay.default(L, {\n        position: 'bottomleft',\n        prefix: 'Zoom : ',\n    });\n    L.control.zoomDisplay().addTo(window.map);\n};\nconst initMapEntryClick = () => {\n    document.querySelector('.map-marker-entry-click')?.addEventListener('click', function (e) {\n        e.preventDefault();\n        const el = e.target;\n        el.parentNode.classList.add('hidden');\n        document.querySelector('.map-marker-entry-entry').classList.remove('hidden');\n    });\n};\n\n/**\n * Register switching in and out of edit mode\n */\nconst registerModes = () => {\n    const enable = document.querySelector('.btn-mode-enable');\n    enable?.addEventListener('click', function (e) {\n        e.preventDefault();\n        window.exploreEditMode = true;\n        document.querySelector('body').classList.add('map-edit-mode');\n    });\n    document.querySelector('.btn-mode-disable')?.addEventListener('click', function (e) {\n        e.preventDefault();\n        window.exploreEditMode = false;\n        document.querySelector('body').classList.remove('map-edit-mode');\n        if (window.polygon) {\n            window.map.removeLayer(window.polygon);\n        }\n    });\n    document.querySelector('.btn-mode-drawing')?.addEventListener('click', function (e) {\n        e.preventDefault();\n        endDrawing();\n    });\n};\n\nconst endDrawing = () => {\n    window.drawingPolygon = false;\n    document.querySelector('body').classList.remove('map-drawing-mode');\n    window.openDialog('marker-modal');\n};\n\nconst initPolygonDrawing = () => {\n    const start = document.querySelector('#start-drawing-polygon');\n    if (!start) {\n        return;\n    }\n    start.addEventListener('click', function (e) {\n        e.preventDefault();\n        window.exploreEditMode = false;\n        window.startNewPolygon();\n        window.showToast(e.currentTarget.dataset.toast);\n        document.querySelector('body').classList.add('map-drawing-mode');\n\n        window.closeDialog('marker-modal');\n    });\n\n    eraseTempPolygonBtn = document.querySelector('#reset-polygon');\n    eraseTempPolygonBtn.addEventListener('click', function (e) {\n        e.preventDefault();\n        if (window.polygon) {\n            window.map.removeLayer(window.polygon);\n        }\n        document.querySelector('textarea[name=\"custom_shape\"]').value = '';\n        eraseTempPolygonBtn.classList.add('hidden');\n\n        window.startNewPolygon();\n    });\n\n    window.map.on('editable:editing', function (e) {\n        if (!isPolygon()) {\n            return;\n        }\n        getPolygonStyle();\n        e.layer.setStyle({\n            weight: polygonStrokeWeight,\n            color: polygonStrokeColour,\n            opacity: polygonStrokeOpacity,\n            fillColor: polygonColour,\n            fillOpacity: polygonOpacity,\n        });\n    });\n};\n\nwindow.startNewPolygon = function () {\n    window.polygon = window.map.editTools.startPolygon();\n    let drawing = true;\n    window.polygon.on('editable:dragend', window.markerUpdateHandler);\n    window.polygon.on('editable:vertex:new', window.markerUpdateHandler);\n    window.polygon.on('editable:vertex:dragend', window.markerUpdateHandler);\n    window.polygon.on('editable:vertex:dragend', window.markerUpdateHandler);\n    window.polygon.on('editable:drawing:end', function (e) {\n        drawing = false;\n    });\n    // Open the modal when clicking on\n    window.polygon.on('click', function (e) {\n        if (drawing) {\n            return;\n        }\n        endDrawing();\n    });\n};\n\nwindow.setPolygonPosition = function (coords) {\n    let shape = document.querySelector('textarea[name=\"custom_shape\"]');\n    shape.value = coords;\n};\n\n\nwindow.markerUpdateHandler = function (data) {\n    if (isPolygon()) {\n        updatePolygon(data);\n    }\n    else if (isLabel()) {\n        updateLabel(data);\n    }\n};\n\nconst updatePolygon = (data) => {\n    //console.log('polygon updated', data);\n    let points = data.target.getLatLngs();\n    if (points.length === 0) {\n        return;\n    }\n\n    let coords = [];\n    points[0].forEach((i) => {\n        coords.push(i.lat.toFixed(3) + ',' + i.lng.toFixed(3));\n    });\n    window.setPolygonPosition(coords.join(' '));\n};\n\nconst updateLabel = (data) => {\n    //console.log('label updated', data);\n    let points = data.target._latlng;\n    if (!points) {\n        return;\n    }\n    document.querySelector('#marker-latitude').value = points.lat.toFixed(3);\n    document.querySelector('#marker-longitude').value = points.lng.toFixed(3);\n};\n\nconst isPolygon = () => {\n    return Number(shapeField.value) === 5;\n};\nconst isLabel = () => {\n    return Number(shapeField.value) === 2;\n};\n\nwindow.addPolygonPosition = function(lat, lng) {\n    const shape = document.querySelector('textarea[name=\"custom_shape\"]');\n    let current = shape.value;\n    if (current.length > 0) {\n        current += ' ';\n    }\n    shape.value = current + lat + ',' + lng;\n\n    // Redraw the polygon\n    let coords = shape.value;\n    let blocks = coords.trim(\" \").split(\" \");\n    let coordsData = [];\n\n    blocks.forEach((block) => {\n        let segments = block.split(',');\n        coordsData.push([segments[0], segments[1]]);\n    }, coordsData);\n\n    // Remove previous polygon if it was already drawn\n    if (window.polygon) {\n        window.map.removeLayer(window.polygon);\n    }\n\n    // Background colour as defined by the user if they are so far?\n    getPolygonStyle();\n\n    window.polygon = L.polygon(coordsData, {\n        weight: polygonStrokeWeight,\n        color: polygonStrokeColour,\n        opacity: polygonStrokeOpacity,\n        fillColor: polygonColour,\n        fillOpacity: polygonOpacity,\n        linecap: 'round',\n        linejoin: 'round',\n    });\n    window.polygon.addTo(window.map);\n    eraseTempPolygonBtn.classList.remove('hidden');\n};\n\nconst getPolygonStyle = () => {\n    polygonStrokeColour = document.querySelector('input[name=\"polygon_style[stroke]\"]')?.value;\n    if (!polygonStrokeColour || polygonStrokeColour.length < 7) {\n        polygonStrokeColour = 'red';\n    }\n\n    polygonStrokeOpacity = document.querySelector('input[name=\"polygon_style[stroke-opacity]\"]').value;\n    if (isNaN(polygonStrokeOpacity) || !polygonStrokeOpacity) {\n        polygonStrokeOpacity = 1;\n    } else {\n        polygonStrokeOpacity = polygonStrokeOpacity / 100;\n    }\n\n    polygonColour = document.querySelector('input[name=\"colour\"]').value;\n    if (!polygonColour || polygonColour.length < 7) {\n        polygonColour = 'red';\n    }\n\n    polygonOpacity = document.querySelector('input[name=\"opacity\"]').value;\n    if (isNaN(polygonOpacity)) {\n        polygonOpacity = 0.5;\n    } else {\n        polygonOpacity = polygonOpacity / 100;\n    }\n\n    polygonStrokeWeight = document.querySelector('input[name=\"polygon_style[stroke-width]\"]').value;\n    if (isNaN(polygonStrokeWeight) || !polygonStrokeWeight) {\n        polygonStrokeWeight = 1;\n    }\n};\n\nconst showMainFields = () => {\n    document.querySelector('#marker-main-fields')?.classList.remove('hidden');\n    document.querySelector('#marker-footer')?.classList.remove('hidden');\n};\n\nconst loadPresets = (url) => {\n    if (!url) {\n        console.log('aaa');\n        return;\n    }\n    document.querySelector('#marker-main-fields')?.classList.add('hidden');\n    document.querySelector('#marker-footer')?.classList.add('hidden');\n\n    // If presets have already been loaded, skip loading/rendering of the list\n    const list = document.querySelector('.marker-preset-list');\n    if (list.dataset.loaded === '1') {\n        return;\n    }\n    list.dataset.loaded = '1';\n\n    fetch(url)\n        .then(response => response.text())\n        .then(response => {\n            list.innerHTML = response;\n            handlePresetClick();\n        });\n};\n\nconst handlePresetClick = () => {\n    document.querySelectorAll('.preset-use')?.forEach(preset => {\n        preset.addEventListener('click', function (e) {\n            e.preventDefault();\n\n            let url =   preset.dataset.url;\n            preset.classList.add('loading');\n\n            axios.get(url).then(res => {\n                // Switch stuff around\n                preset.classList.remove('loading');\n\n                Object.keys(res.data.preset).forEach(key => {\n                    let val = res.data.preset[key];\n\n                    let field = document.querySelector('[name=\"' + key + '\"]');\n                    if (!field) {\n                        //console.info('markerPreset', 'unknown field', key);\n                        return;\n                    }\n                    if (key.endsWith('colour')) {\n                        field.value = val;\n                        document.querySelector('[name=\"' + key + '\"]').dispatchEvent(new Event('input',));\n                    } else {\n                        field.value = val;\n                    }\n                });\n                document.querySelector('a[href=\"#marker-pin\"]').click();\n            });\n        });\n    });\n};\n\n/**\n * Why is this here?\n */\nfunction handleExploreMapClick(ev) {\n    if (!window.exploreEditMode) {\n        return;\n    }\n    // return false;\n    let position = ev.latlng;\n\n    let lat = position.lat.toFixed(3);\n    let lng = position.lng.toFixed(3);\n    if (window.drawingPolygon) {\n        window.addPolygonPosition(lat, lng);\n        return;\n    }\n    //console.log('Click', 'lat', position.lat, 'lng', position.lng);\n    // AJAX request\n    document.querySelector('#marker-latitude').value = lat;\n    document.querySelector('#marker-longitude').value = lng;\n    window.openDialog('marker-modal');\n}\n\nwindow.handleExploreMapClick = handleExploreMapClick;\n\nwindow.map.invalidateSize();\n\nwindow.map.on('popupopen', function (ev) {\n    window.initDialogs();\n});\n\ninitMapExplore();\ninitForms();\ninitMapEntryClick();\nregisterModes();\n"
  },
  {
    "path": "resources/js/maintenance.js",
    "content": "/**\n * To avoid users losing data while Kanka is in maintenance mode,\n * we force all forms to do an ajax request to the server first,\n * making sure the app is properly running. If an error comes\n * back, errors are displayed to the user.\n */\n\nconst initMaintenanceForms = () => {\n    const subForms = document.querySelectorAll('form[data-maintenance=\"1\"]');\n    subForms.forEach(function(subform) {\n        subform.addEventListener('submit', onMaintenanceFormSubmit);\n    });\n};\n\nconst onMaintenanceFormSubmit = (event) => {\n    // Disable global alert when redirection occurs\n    window.entityFormHasUnsavedChanges = false;\n    event.preventDefault();\n    const form = event.target;\n    startAnimation(form);\n\n    // This will put the summernote image file field in the form,\n    // and the browser console logs will complain, but we can\n    // ignore that error completely.\n    let formData = new FormData(form);\n\n    // If the submit button has an action name, we need to add that (for forms with multiple action buttons)\n    // if (event.submitter && event.submitter.name === 'action' && event.submitter.value) {\n    //     formData.append('action', event.submitter.value);\n    // }\n\n    axios.post(form.getAttribute('action'), formData)\n        .then(() => {\n            // The check succeeded, submit the form for real. By doing .submit, it skips any event listeners on submit\n            // This doesn't include the action of who submitted the form\n            form.submit();\n        })\n        .catch(err => {\n            // Result with a response, hopefully a 422 error\n            if (err.response) {\n                window.formErrorHandler(err.response, form);\n            }\n            stopAnimation(form);\n        })\n    ;\n};\n\n\nconst startAnimation = (form) => {\n    const btns = form.querySelectorAll('.btn-primary');\n    btns.forEach((btn, index) => {\n        if (index === 0) {\n            btn.classList.add('loading');\n        }\n        btn.classList.add('btn-disabled');\n    });\n};\n\n/**\n * Reset the \"loading\" animation that disables the submit buttons\n * @param form\n */\nconst stopAnimation = (form) => {\n    const btns = form.querySelectorAll('.btn-primary');\n    btns.forEach(btn => {\n        btn.classList.remove('btn-disabled', 'loading');\n    });\n};\n\ninitMaintenanceForms();\nwindow.onEvent(function() {\n    initMaintenanceForms();\n});\n"
  },
  {
    "path": "resources/js/members.js",
    "content": "import TomSelect from 'tom-select';\n\nwindow.onEvent(function () {\n    initFormMembersSelect();\n});\n\nconst initFormMembersSelect = () => {\n    document.querySelectorAll('.form-members').forEach((form) => {\n        if (form.tomselect) {\n            return;\n        }\n\n        const plugins = ['remove_button'];\n        if (form.dataset.allowClear === 'true') {\n            plugins.push('clear_button');\n        }\n\n        new TomSelect(form, {\n            plugins,\n            placeholder: form.dataset.placeholder || '',\n            allowEmptyOption: true,\n            loadThrottle: 500,\n            shouldLoad: function (query) {\n                return query.length >= 2;\n            },\n            valueField: 'id',\n            labelField: 'text',\n            searchField: 'text',\n            create: false,\n            load: function (query, callback) {\n                if (query.length < 2) { callback(); return; }\n                fetch(form.dataset.url + '?q=' + encodeURIComponent(query.trim()), {\n                    headers: { 'X-Requested-With': 'XMLHttpRequest' }\n                })\n                    .then(r => r.json())\n                    .then(data => callback(data))\n                    .catch(() => callback());\n            },\n            render: {\n                item: function (data, escape) {\n                    return '<div>' + escape(data.text) + '</div>';\n                },\n            },\n        });\n    });\n};\n\ninitFormMembersSelect();\n"
  },
  {
    "path": "resources/js/post.js",
    "content": "const addPermBtn = document.querySelectorAll('.post-perm-add');\n\nconst init = () => {\n    window.onEvent(function() {\n        initPostVisibility();\n    });\n\n    if (addPermBtn.length === 0) {\n        return;\n    }\n    registerAdvancedPermissions();\n    registerPermissionDeleteEvents();\n};\n\n/**\n* Add advanced permissions on a post\n*/\nconst registerAdvancedPermissions = () => {\n    addPermBtn.forEach((btn) => {\n        btn.addEventListener('click', function (ev) {\n            ev.preventDefault();\n            let type = this.dataset.type;\n            let selectElement = document.querySelector('select[name=\"' + type + '\"]');\n\n            if (!selectElement || !selectElement.selectedOptions) {\n                return false;\n            }\n            let template = document.getElementById(this.dataset.template);\n\n            // Support for tag (multiple) select elements (you're welcome Spitfire)\n            for (const option of selectElement.selectedOptions) {\n                // Add a block\n                const clone = template.cloneNode(true);\n                clone.classList.remove('hidden');\n                clone.removeAttribute('id');\n                clone.innerHTML = clone.innerHTML\n                    .replace(/\\$SELECTEDID\\$/g, option.value)\n                    .replace(/\\$SELECTEDNAME\\$/g, option.text);\n\n                const target = document.getElementById('post-perm-target');\n                target.insertAdjacentElement('beforebegin', clone);\n            }\n\n\n            let dialog = document.getElementById(this.dataset.dialog);\n            dialog.close();\n\n            registerPermissionDeleteEvents();\n\n            // Reset all options to unselected\n            for (const option of selectElement.options) {\n                option.selected = false;\n            }\n            selectElement.value = null;\n            selectElement.dispatchEvent(new Event('change'));\n            return false;\n        });\n    });\n};\n\n/**\n * Remove an advanced permission from a post\n */\nconst registerPermissionDeleteEvents = () => {\n    const deletes = document.querySelectorAll('.post-delete-perm');\n    //console.log(deletes);\n    deletes.forEach((btn) => {\n        if (btn.closest('.hidden')) {\n            return;\n        }\n        if (btn.dataset.init === '1') {\n            return;\n        }\n        btn.dataset.init = '1';\n        btn.addEventListener('click', function (e) {\n            console.log('clicking', btn, btn.closest('.perm-row'));\n            btn.closest('.perm-row').remove();\n            e.preventDefault();\n\n            //btn.removeEventListener('click', arguments.callee);\n        });\n    });\n};\n\nconst initPostVisibility = () => {\n    const form = document.querySelector('form.post-visibility');\n    if (!form) {\n        return;\n    }\n    form.onsubmit = function (e) {\n        e.preventDefault();\n        axios\n            .post(this.getAttribute('action'), {visibility_id: this.querySelector('[name=\"visibility_id\"]').value})\n            .then((res) => {\n                document.getElementById('primary-dialog').close();\n                document.getElementById('visibility-icon-' + res.data.post_id).firstElementChild.className = res.data.icon.class;\n                window.showToast(res.data.toast);\n            });\n        return false;\n    };\n};\n\ninit();\n"
  },
  {
    "path": "resources/js/profile.js",
    "content": "const api = document.getElementById('newsletter-api');\nconst init = () => {\n    if (!api) {\n        return;\n    }\n\n    const fields = document.querySelectorAll('input[name=\"mail_release\"]');\n    fields.forEach(field => {\n        field.addEventListener('change', function (e) {\n            let name = this.name;\n            let data = {};\n            data[name] = this.checked ? 1 : 0;\n\n            axios.post(api.value, data)\n                .then(res => {\n                    window.showToast(res.data.message);\n                });\n        });\n    });\n};\ninit();\n\n\n"
  },
  {
    "path": "resources/js/quick-creator.js",
    "content": "let quickCreatorSubmitBtns;\n\nlet loadingArticle, selectionArticle, formArticle;\n\n\n/**\n * Quick Entity Creator UI\n */\nconst quickCreatorUI = () => {\n    loadingArticle = document.querySelector('#qq-modal-loading');\n    selectionArticle = document.querySelector('#qq-modal-selection');\n    formArticle = document.querySelector('#qq-modal-form');\n    document.querySelectorAll('[data-toggle=\"entity-creator\"]').forEach(element => {\n        element.addEventListener('click', buildEntityForm);\n    });\n};\n\nconst buildEntityForm = (event) => {\n    event.preventDefault();\n    const element = event.currentTarget;\n\n    const type = element.dataset.type;\n    if (type === 'inline') {\n        document.querySelector('.quick-creator-body').classList.add('hidden');\n        document.querySelector('.quick-creator-footer')?.classList.add('hidden');\n        document.querySelector('.quick-creator-loading').classList.remove('hidden!');\n    } else {\n        quickCreatorLoadingModal();\n    }\n\n    axios.get(element.dataset.url)\n        .then(res => {\n            document.querySelector('#primary-dialog').innerHTML = res.data;\n            // loadingArticle.classList.add('hidden!');\n            // selectionArticle.classList.add('hidden!');\n            // formArticle.innerHTML = res.data;\n            // formArticle.classList.remove('hidden!');\n\n            quickCreatorSubformHandler();\n            quickCreatorToggles();\n            window.triggerEvent();\n        });\n\n    return false;\n};\n\nconst quickCreatorDuplicateName = () => {\n    const field = document.querySelector('#qq-name-field');\n    if (!field || field.dataset.init === '1') {\n        return;\n    }\n    field.dataset.init = '1';\n    field.addEventListener('focusout', function () {\n        // Don't bother if the user didn't set any value\n        if (!this.value) {\n            return;\n        }\n\n        const warning = this.parentNode.querySelector('.duplicate-entity-warning');\n        if (!warning) {\n            return;\n        }\n        warning.classList.add('hidden');\n        // Check if an entity of the same type already exists, and warn when it does.\n        const url = this.dataset.live + '?q=' + this.value + '&type=' + this.dataset.type;\n        axios.get(url)\n            .then(res => {\n            if (res.data.length === 0) {\n                warning.classList.add('hidden');\n                return;\n            }\n            const entities = Object.keys(res.data)\n                .map(function (k) { return '<a href=\"' + res.data[k].url + '\" class=\"text-link\">' + res.data[k].name + '</a>'; })\n                .join(', ');\n            field.parentNode.querySelector('.duplicate-entities').innerHTML = entities;\n            warning.classList.remove('hidden');\n        });\n    });\n};\n\nconst quickCreatorLoadingModal = () => {\n    document.querySelector('#qq-modal-form')?.classList.add('hidden!');\n    document.querySelector('#qq-modal-selection')?.classList.add('hidden!');\n    document.querySelector('#qq-modal-loading')?.classList.remove('hidden!');\n};\n\n/**\n *\n */\nconst quickCreatorSubformHandler = () => {\n\n    quickCreatorSubmitBtns = document.querySelectorAll('.quick-creator-submit');\n    if (quickCreatorSubmitBtns.length === 0) {\n        return;\n    }\n\n    quickCreatorDuplicateName();\n    quickCreatorToggles();\n\n    // If we click on edit, we want to be redirected afterwards. This is because the form's onsubmit re-casts the\n    // form as a formdata object\n    quickCreatorSubmitBtns.forEach(btn => {\n        btn.addEventListener('click', function (e) {\n            let action = this.value;\n            if (!action) {\n                return true;\n            }\n\n            document.querySelector('#entity-creator-form [name=\"action\"]').value = action;\n            return true;\n        });\n    });\n\n    document.getElementById('entity-creator-form').onsubmit = function (e) {\n\n        const form = e.target;\n        e.preventDefault();\n        quickCreatorSubmitBtns.forEach(btn => btn.classList.add('btn-disabled', 'loading'));\n\n        const errors = document.querySelectorAll('div.text-error-content');\n        errors.forEach(error => error.remove());\n\n        const data = new FormData(form);\n        axios.post(form.getAttribute('action'), data)\n            .then(res => {\n                // New entity was created, let's follow that redirect\n                //console.log('result', result);\n                if (typeof res.data === 'object') {\n                    if (res.data.redirect) {\n                        window.location.replace(res.data.redirect);\n                        return;\n                    }\n                    let option = new Option(res.data._name, res.data._id, true, true);\n                    let field = document.querySelector('#' + res.data._target);\n                    field.appendChild(option);\n                    field.dispatchEvent(new Event('change'));\n\n                    const form = document.querySelector('#qq-modal-form');\n                    if (form) {\n                        form.innerHTML = '';\n                        form.classList.remove('hidden!');\n                    }\n\n                    document.querySelector('#qq-modal-loading')?.classList.add('hidden!');\n                    document.querySelector('#qq-modal-selection')?.classList.remove('hidden!');\n\n                    const target = document.getElementById('primary-dialog');\n                    target.close();\n\n                    quickCreatorHandleEvents();\n\n                    return;\n                }\n\n                let target = document.getElementById('primary-dialog');\n                target.innerHTML = res.data;\n                window.triggerEvent();\n                Alpine.initTree(target);\n\n                quickCreatorUI();\n                quickCreatorHandleEvents();\n            })\n            .catch(err => {\n                if (err.response) {\n                    window.formErrorHandler(err.response, form);\n                }\n                quickCreatorSubmitBtns.forEach(btn => btn.classList.remove('btn-disabled', 'loading'));\n                document.querySelector('#entity-creator-form [name=\"action\"]').value = '';\n            })\n        ;\n    };\n};\n\nconst quickCreatorToggles = () => {\n\n    quickCreatorUI();\n};\n\nconst quickCreatorHandleEvents = () => {\n    quickCreatorToggles();\n    quickCreatorDuplicateName();\n    quickCreatorSubformHandler();\n};\n\nwindow.onEvent(function() {\n    quickCreatorUI();\n    quickCreatorSubformHandler();\n});\n"
  },
  {
    "path": "resources/js/recovery/Element.vue",
    "content": "<template>\n    <div v-if=\"!model.is_hidden && !model.url\" :class=\"modelClass()\" @click=\"click\">\n        <div class=\"flex gap-2 items-center\">\n            <div class=\"flex-none flex items-center\">\n                <input v-if=\"!model.url\" type=\"checkbox\" v-model=\"model.is_selected\" @click=\"startBulking\"/>\n            </div>\n            <div class=\"grow font-extrabold truncate\" v-html=\"model.name\"></div>\n            <div class=\"rounded-xl px-3 py-1 text-xs bg-base-200\" v-html=\"model.type_name\"></div>\n        </div>\n        <hr />\n        <div class=\"flex items-center gap-2 md:gap-4\">\n            <div class=\"grow text-neutral-content\">\n                <span class=\"text-xs\" v-html=\"trans('deleted_at', [model.date, model.deleted_name])\"></span>\n            </div>\n            <div v-if=\"!model.url\" class=\"flex-none\">\n                <button :class=\"buttonClass()\" @click=\"restoreElement()\" v-html=\"trans('recover')\" ></button>\n            </div>\n        </div>\n    </div>\n\n    <div v-if=\"!model.is_hidden && model.url\" class=\"rounded shadow-sm p-4 flex gap-2 items-center bg-base-200 hover:shadow-lg\">\n        <div class=\"flex-none\">\n            <i class=\"fa-solid text-green-500 fa-circle-check\" aria-hidden=\"true\" />\n        </div>\n        <div class=\"grow\" v-html=\"trans('recovery_success', [model.url, model.name])\"></div>\n        <div class=\"rounded-xl px-3 py-1 text-xs bg-base-300\" v-html=\"model.type_name\"></div>\n    </div>\n\n</template>\n\n<script setup lang=\"ts\">\nimport {ref, onMounted, watch, onBeforeMount} from 'vue'\n\nconst emit = defineEmits(['recover'])\n\nconst props = defineProps<{\n    model: Object,\n    i18n: Object\n}>()\n\nconst click = () => {\n    if (!props.model.url) {\n        props.model.is_selected = !props.model.is_selected\n    }\n}\n\nconst modelClass = () => {\n    let css = 'rounded-xl shadow-xs bg-base-100 flex flex-col gap-2 md:gap-4 p-4 hover:shadow'\n\n    if (!props.model.url) {\n        css = css + ' cursor-pointer'\n    }\n\n    if (!props.model.is_selected) {\n        return css + '  '\n    }\n\n    return css + ' bg-base-200'\n}\n\nconst trans = (key, replace = []) => {\n    if (!props.i18n[key]) {\n        console.error('Missing trans', key, props.i18n)\n        return 'MISSING'\n    }\n\n    let translation = props.i18n[key]\n    replace.forEach(f => {\n        translation = translation.replace(\"placeholder\", f)\n    })\n\n    return translation\n}\n\nconst buttonClass = () => {\n    let css = 'btn2 btn-default btn-sm'\n    if (props.model.is_recovering) {\n        css += ' loading btn-disabled'\n    }\n    return css\n}\n\nconst restoreElement = () => {\n    emit('recover', props.model)\n}\n\n</script>\n"
  },
  {
    "path": "resources/js/recovery/Recovery.vue",
    "content": "<template>\n    <div v-if=\"!initiated\" class=\"text-center text-4xl p-4\">\n        <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\" />\n    </div>\n    <div v-else class=\"flex flex-col gap-4 md:gap-5\">\n        <div class=\"flex gap-4 flex-wrap sticky top-14 z-50\">\n            <div class=\"flex gap-2 grow\">\n                <div class=\"flex gap-0.5\">\n                    <input type=\"text\" placeholder=\"Search\" @input=\"handleSearchInput\" />\n                </div>\n                <div class=\"relative\">\n                    <button class=\"btn2 btn-default btn-sm\" @click=\"toggleFilters\">\n                        <i class=\"fa-regular fa-filter\" aria-hidden=\"true\" />\n                        <span v-html=\"trans('order_by_' + filter)\" class=\"hidden md:inline\"></span>\n                    </button>\n                    <div class=\"border shadow-sm rounded bg-base-100 p-4 absolute right-0 flex flex-col gap-5 w-60\" v-if=\"showFilters\"  v-click-outside=\"onClickOutside\">\n                        <label @click=\"orderByNew\" class=\"cursor-pointer\" v-html=\"trans('newest')\"></label>\n                        <label @click=\"orderByOld\" class=\"cursor-pointer\" v-html=\"trans('oldest')\"></label>\n                        <label @click=\"orderByType\" class=\"cursor-pointer\" v-html=\"trans('type')\"></label>\n                    </div>\n                </div>\n            </div>\n            <div class=\"flex gap-2 self-end flex-wrap\">\n\n                <button class=\"btn2 btn-default btn-sm\" v-if=\"!hasSelection()\" @click=\"selectAll\">\n                    <i class=\"fa-regular fa-list-check\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('select_all')\"></span>\n                </button>\n                <button class=\"btn2 btn-default btn-sm\" v-if=\"hasSelection()\" @click=\"deselectAll\">\n                    <i class=\"fa-regular fa-xmark\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('deselect_all')\"></span>\n                </button>\n                <button class=\"btn2 btn-primary btn-sm\" v-if=\"hasSelection()\" @click=\"bulkRecover\">\n                    <i class=\"fa-regular fa-plus\" aria-hidden=\"true\" />\n                    <span v-html=\"trans('restore_selected')\"></span>\n                    <span v-html=\"countSelected()\"></span>\n                </button>\n\n            </div>\n        </div>\n\n        <div class=\"text-center text-4xl p-4\" v-if=\"loading\">\n            <i class=\"fa-solid fa-spinner fa-spin\" aria-label=\"Loading\" />\n        </div>\n        <div class=\"flex flex-col gap-4\" v-else>\n            <div class=\"flex gap-2 flex-row\">\n                <div class=\"grid grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-5\">\n                    <Element\n                        v-for=\"model in models\"\n                        :model=\"model\"\n                        :i18n=\"i18n\"\n                        @recover=\"recoverElement(model)\"\n                    >\n                    </element>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <dialog ref=\"premiumDialog\" class=\"dialog rounded-2xl text-center\" v-if=\"initiated\">\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 v-html=\"trans('premium_title')\" class=\"text-lg font-normal\"></h4>\n            <button type=\"button\" class=\"text-base-content\" @click=\"closeModal(premiumDialog)\" title=\"Close\">\n                <i class=\"fa-regular fa-circle-xmark\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">Close</span>\n            </button>\n        </header>\n        <article class=\"max-w-4xl flex flex-col gap-2 text-left p-4 md:px-6\">\n            <div class=\"flex flex-col gap-1 w-full\">\n                <label v-html=\"trans('premium')\"></label>\n            </div>\n        </article>\n        <footer class=\"p-4 md:px-6\">\n            <menu class=\"\">\n                <a :href=\"upgradeLink\" v-html=\"trans('upgrade')\" class=\"btn2 btn-default\"></a>\n            </menu>\n        </footer>\n    </dialog>\n</template>\n\n<script setup lang=\"ts\">\n\nimport {onMounted, ref} from \"vue\";\nimport Element from \"./Element.vue\";\n\nconst props = defineProps<{\n    api: String\n}>()\n\nconst initiated = ref(false)\nconst loading = ref(false)\nconst premium = ref(false)\nconst searchTerm = ref()\nconst lastTerm = ref()\nconst typingTimeout = ref(null)\nconst models = ref([])\nconst filter = ref('newest')\nconst i18n = ref()\nconst premiumDialog = ref()\nconst recoveryApi = ref()\nconst recovering = ref(false)\nconst showFilters = ref(false)\nconst upgradeLink = ref()\n\nonMounted(() => {\n    axios.get(props.api)\n        .then((res) => {\n            initiated.value = true\n            models.value = res.data.elements\n            i18n.value = res.data.i18n\n            recoveryApi.value = res.data.api.recovery\n            premium.value = res.data.acl.premium\n            upgradeLink.value = res.data.upgrade\n        })\n\n})\n\nconst trans = (key) => {\n    if (!i18n.value[key]) {\n        console.error('Missing trans', key, i18n)\n        return 'MISSING'\n    }\n    return i18n.value[key]\n}\n\nconst selectElements = (model) => {\n    let f = models.value.find(f => f.id === model.id)\n    if (!f.url && !f.is_hidden) {\n        f.is_selected = true\n    }\n    return;\n}\n\nconst deselectElements = (model) => {\n    let f = models.value.find(f => f.id === model.id)\n    f.is_selected = false\n    return;\n}\n\nconst recoverElement = (model) => {\n\n    if (!premium.value) {\n        openDialog(premiumDialog.value)\n        return\n    }\n\n    let f = models.value.find(f => f.id === model.id)\n    f.is_recovering = true\n\n    if (recovering.value) {\n        return\n    }\n\n    recovering.value = true\n    let data = {}\n\n    if (f.type === 'post') {\n        data.posts = [f.id]\n        data.entities = []\n    } else {\n        data.entities = [f.id]\n        data.posts = []\n    }\n\n    axios.post(recoveryApi.value, data).then(res => {\n        recovering.value = false\n\n        const entities = Object.keys(res.data.entities).map(\n            key => res.data.entities[key]\n        );\n\n        let ids = models.value.filter(f => f.is_recovering && f.type == 'entity')\n        let postIds = models.value.filter(f => f.is_recovering && f.type == 'post')\n\n        ids.forEach(f => {\n            f.is_selected = false\n            f.is_recovering = false\n            if (res.data.entities[f.id]) {\n                f.url = res.data.entities[f.id]\n            }\n        })\n        postIds.forEach(f => {\n            f.is_selected = false\n            f.is_recovering = false\n            if (res.data.posts[f.id]) {\n                f.url = res.data.posts[f.id]\n            }\n        })\n\n        window.showToast(res.data.toast)\n    })\n\n    return;\n}\n\nconst selectAll = () => {\n    models.value.forEach(selectElements)\n    return\n}\n\nconst deselectAll = () => {\n    models.value.forEach(deselectElements)\n    return\n}\n\nconst handleSearchInput = (event) => {\n    searchTerm.value = event.target.value.toLowerCase()\n    if (typingTimeout.value) {\n        clearTimeout(typingTimeout.value)\n    }\n\n    typingTimeout.value = setTimeout(() => {\n        search()\n    }, 300)\n}\n\nconst search = () => {\n    if (lastTerm.value == searchTerm.value) {\n        return\n    }\n    lastTerm.value = searchTerm.value\n\n    if (!searchTerm.value) {\n        models.value.forEach(f => {\n            f.is_hidden = false\n        })\n        return;\n    }\n\n    loading.value = true\n    showSearchResults()\n\n}\n\nconst hasSelection = () => {\n    let count = models.value.filter(f => f.is_selected).length\n    if (count === 0) {\n        return false\n    }\n    return true\n}\n\nconst bulkRecover = () => {\n\n    if (!premium.value) {\n        openDialog(premiumDialog.value)\n        return\n    }\n\n    if (recovering.value) {\n        return\n    }\n    let ids = models.value.filter(f => f.is_selected && f.type == 'entity').map(f => f.id)\n    let postIds = models.value.filter(f => f.is_selected && f.type == 'post').map(f => f.id)\n    if (ids.length === 0 && postIds.length === 0) {\n        return\n    }\n\n    recovering.value = true\n    let data = {}\n\n    data.entities = ids\n    data.posts = postIds\n\n    axios.post(recoveryApi.value, data).then(res => {\n        recovering.value = false\n\n        const entities = Object.keys(res.data.entities).map(\n            key => res.data.entities[key]\n        );\n\n        let ids = models.value.filter(f => f.is_selected && f.type == 'entity')\n        let postIds = models.value.filter(f => f.is_selected && f.type == 'post')\n\n        ids.forEach(f => {\n            f.is_selected = false\n            if (res.data.entities[f.id]) {\n                f.url = res.data.entities[f.id]\n            }\n        })\n        postIds.forEach(f => {\n            f.is_selected = false\n            if (res.data.posts[f.id]) {\n                f.url = res.data.posts[f.id]\n            }\n        })\n\n\n        window.showToast(res.data.toast)\n    })\n}\n\nconst countSelected = () => {\n    let count = models.value.filter(f => f.is_selected).length\n    if (count === 0) {\n        return\n    }\n    return '(' + count + ')'\n}\n\nconst toggleFilters = () => {\n    showFilters.value = !showFilters.value;\n}\n\nconst onClickOutside = () => {\n    showFilters.value = false\n}\n\nconst showSearchResults = () => {\n    models.value.forEach(f => {\n        const slug = f.name.toLowerCase()\n        if (slug.includes(searchTerm.value)) {\n            f.is_hidden = false\n        } else {\n            f.is_hidden = true\n        }\n    })\n    loading.value = false\n}\n\nconst orderByNew = () => {\n    loading.value = true\n    models.value.sort(function(a, b){\n        return a.position - b.position\n    });\n    loading.value = false\n    showFilters.value = false\n    filter.value = 'newest'\n}\n\nconst orderByOld = () => {\n    loading.value = true\n    models.value.sort(function(a, b){\n        return b.position - a.position\n    });\n    loading.value = false\n    showFilters.value = false\n    filter.value = 'oldest'\n}\n\nconst orderByType = () => {\n    loading.value = true\n    models.value.sort(function(a, b){\n        return a.type_name.localeCompare(b.type_name)\n    });\n    loading.value = false\n    showFilters.value = false\n    filter.value = 'type'\n}\n\nconst openDialog = (dialog) => {\n    dialog.showModal()\n    dialog.addEventListener('click', clickOutside);\n}\n\nconst clickOutside = (event) => {\n    let rect = event.target.getBoundingClientRect()\n    let isInDialog = (rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n        rect.left <= event.clientX && event.clientX <= rect.left + rect.width)\n    if (!isInDialog && event.target.tagName === 'DIALOG') {\n        closeModal(event.target)\n    }\n}\n\nconst closeModal = (modal) => {\n    modal.removeEventListener('click', clickOutside)\n    modal.close()\n}\n</script>\n"
  },
  {
    "path": "resources/js/recovery/recovery.js",
    "content": "import { createApp } from 'vue'\nimport Recovery from \"./Recovery.vue\"\nimport vClickOutside from \"click-outside-vue3\"\n\nconst app = createApp({})\napp.component('recovery', Recovery)\napp.use(vClickOutside)\n\napp.mount('#recovery');\n"
  },
  {
    "path": "resources/js/relations.js",
    "content": "let cy;\nlet entity, relation;\nlet elementList = [];\nconst DEFAULT_COLOUR = '#777777';\n\nconst cySelector = document.getElementById('cy');\n\nconst initCytoscape = async () => {\n    if(!cySelector) {\n        return;\n    }\n\n    // Dynamically import cytoscape plugins\n    const { default: cytoscape } = await import('cytoscape');\n\n    const { default: coseBilkent } = await import('cytoscape-cose-bilkent');\n    const { default: panzoom } = await import('cytoscape-panzoom');\n    const { default: dblclick } = await import('cytoscape-dblclick');\n\n\n    // Libraries\n    cytoscape.use( dblclick );\n    cytoscape.use( coseBilkent );\n    cytoscape.use( panzoom );\n\n    cy = cytoscape({\n        container: cySelector,\n        wheelSensitivity: 0.5,\n        style: cytoscape.stylesheet()\n            .selector('node')\n            .css({\n                'label': 'data(name)',\n                'background-image': 'data(image)',\n                'height': 80,\n                'width': 80,\n                'background-fit': 'cover',\n                'border-color': window.getComputedStyle(cySelector.parentNode).color,\n                'border-width': 3,\n                'color': window.getComputedStyle(cySelector).color,\n                'text-wrap': 'wrap',\n                'text-margin-y': '-8px',\n                'text-background-opacity': 1,\n                'text-background-color': window.getComputedStyle(cySelector).backgroundColor,\n                'text-border-color': window.getComputedStyle(cySelector).backgroundColor,\n                'text-border-width': 3,\n                'text-border-opacity': 1\n            })\n            .selector('edge')\n            .css({\n                'line-color': 'data(colour)',\n                'curve-style': 'bezier',\n                'control-point-step-size': 40,\n                'target-arrow-shape': 'data(shape)',\n                'target-arrow-color': 'data(colour)',\n                'width': 'data(attitude)',\n                'text-background-opacity': 1,\n                'color': window.getComputedStyle(cySelector).color,\n                'text-background-color': window.getComputedStyle(cySelector).backgroundColor,\n                'text-border-color': window.getComputedStyle(cySelector).backgroundColor,\n                'text-border-width': 3,\n                'text-border-opacity': 1\n            }),\n    });\n\n    // enable pan/zoom buttons\n    cy.panzoom({\n        maxZoom: 2,\n        minZoom: 0.3,\n    });\n    cy.minZoom(0.3);\n    cy.maxZoom(2);\n\n    // enable double-click event\n    cy.dblclick();\n\n    loadMap();\n};\n\nconst loadMap = () => {\n    fetch(cySelector.dataset.url)\n        .then((response) => response.json())\n        .then((res) => {\n            parseMap(res);\n        });\n};\n\nconst parseMap = (res) => {\n    //console.log('result from map api', res);\n\n    for(entity in res.entities) {\n        let element = {\n            group: 'nodes',\n            data: {\n                id: res.entities[entity].id,\n                name: res.entities[entity].name,\n                image: res.entities[entity].image,\n                link: res.entities[entity].link,\n                //tooltip: json.entities[entity].tooltip,\n            }\n        };\n        elementList.push(element);\n    }\n\n    for (relation in res.relations) {\n        let element = {\n            group: 'edges',\n            data: {\n                source: res.relations[relation].source,\n                target: res.relations[relation].target,\n                name: res.relations[relation].text,\n                colour: res.relations[relation].colour,\n                attitude: res.relations[relation].attitude,\n                shape: res.relations[relation].shape,\n                edit_url: res.relations[relation].edit_url,\n            }\n        };\n        // if the relation does not have a colour, use the default\n        if (!element.data.colour) {\n            element.data.colour = DEFAULT_COLOUR;\n        }\n        if (!element.data.attitude) {\n            element.data.attitude = 0;\n        }\n        element.data.attitude = getWidthFromAttitude(element.data.attitude);\n        elementList.push(element);\n    }\n    renderRelations();\n};\n\nconst renderRelations = () => {\n    // add all of the elements (nodes and edges) to the graph. Remove orphans to keep the graph clean.\n    cy.add(elementList);\n    cy.nodes().forEach(function(node) {\n        if (node.connectedEdges().length == 0) {\n            addEntityToOrphans(node);\n        }\n    });\n\n    // organize and display the elements\n    runLayout();\n\n    // add user input events to the elements\n    addListeners();\n\n    // wait until images load to display graph\n    displayOnLoad();\n};\n\nfunction addEntityToOrphans(node) {\n    // hide the node, we dont want to show orphans unless asked\n    node.hide();\n}\n\nfunction runLayout() {\n    // use an automatic layout. fcose is decently fast and looks nice\n    let layout = cy.elements().layout({\n        name: 'cose-bilkent',\n        idealEdgeLength: 130,\n        nodeDimensionsIncludeLabels: true,\n    });\n    layout.run();\n}\n\nfunction addListeners() {\n    // open on simple click\n    cy.on('tap', 'node', function (evt) {\n        let data = evt.target.data();\n        if (data.link) {\n            window.location = data.link;\n        }\n    });\n\n\n    // highlight on hover\n    cy.nodes().on('mouseover', function(e) {\n        entity = cy.getElementById(e.target.id());\n        entity.addClass('node-hover');\n    });\n\n    // stop highlight on hover\n    cy.nodes().on('mouseout', function() {\n        entity.removeClass('node-hover');\n    });\n\n    // Double-click on an edge to edit it\n    cy.on('tap', 'edge', function (e) {\n        let editUrl = e.target.data().edit_url;\n        if (!editUrl) {\n            return;\n        }\n\n        window.openDialog('primary-dialog', editUrl);\n    });\n\n    // highlight edges on hover to show relation\n    cy.edges().on('mouseover', function(e) {\n        relation = cy.getElementById(e.target.id());\n        relation.style('label', relation._private.data.name);\n        relation.style('overlay-opacity', 0.1);\n    });\n\n    // stop highlight on hover\n    cy.edges().on('mouseout', function() {\n        relation.style('label', '');\n        relation.style('overlay-opacity', 0);\n    });\n}\n\n\n/*function getAttitudeFromWidth(width) {\n    return (((width - 2) / 2) * 100) - 100;\n}*/\n\nfunction getWidthFromAttitude(attitude) {\n    return (((attitude + 100) / 100) * 2) + 2;\n}\n\nasync function displayOnLoad() {\n    let loading = true;\n    while (loading) {\n        if (cy.nodes(':backgrounding').length == 0) {\n            loading = false;\n        } else {\n            await sleep(300);\n        }\n    }\n    document.getElementById(\"spinner\").classList.add('hidden');\n    cySelector.classList.remove('hidden');\n}\n\ninitCytoscape();\n"
  },
  {
    "path": "resources/js/settings.js",
    "content": "/** Included on various settings subpages **/\n\nconst registerBoosters = () => {\n    const focusModal = document.getElementById('focus-modal');\n    if (focusModal) {\n        window.openDialog(focusModal.dataset.target, focusModal.dataset.url);\n    }\n};\nregisterBoosters();\n"
  },
  {
    "path": "resources/js/share.js",
    "content": "import { createApp } from 'vue';\nimport EntityShareModal from './utility/EntityShareModal.vue';\nimport CampaignShareModal from './utility/CampaignShareModal.vue';\n\nconst mountShareModals = () => {\n    const entityContainer = document.getElementById('entity-share-container');\n    if (entityContainer && entityContainer.dataset.init !== '1') {\n        entityContainer.dataset.init = '1';\n        const app = createApp({});\n        app.component('entity-share-modal', EntityShareModal);\n        app.mount(entityContainer);\n    }\n\n    const campaignContainer = document.getElementById('campaign-share-container');\n    if (campaignContainer && campaignContainer.dataset.init !== '1') {\n        campaignContainer.dataset.init = '1';\n        const app = createApp({});\n        app.component('campaign-share-modal', CampaignShareModal);\n        app.mount(campaignContainer);\n    }\n};\n\ndocument.addEventListener('dialog.loaded', mountShareModals);\n"
  },
  {
    "path": "resources/js/story.js",
    "content": "\nwindow.onEvent(function() {\n    initImageFocus();\n});\n\nlet bullseye;\nlet scaledImage;\n\nconst initImageFocus = () => {\n    bullseye = document.querySelector('.focus');\n    scaledImage = document.querySelector('.focus-image');\n    if (!scaledImage) {\n        return;\n    }\n\n    scaledImage.addEventListener('click', function (e) {\n        // Get the original dimensions of the image\n        const originalWidth = scaledImage.naturalWidth;\n        const originalHeight = scaledImage.naturalHeight;\n\n        // Get the click coordinates\n        const clickX = e.clientX - scaledImage.getBoundingClientRect().left;\n        const clickY = e.clientY - scaledImage.getBoundingClientRect().top;\n\n        // Calculate the coordinates with respect to the original size\n        const originalX = (clickX / scaledImage.clientWidth) * originalWidth;\n        const originalY = (clickY / scaledImage.clientHeight) * originalHeight;\n\n        // Calculate the coordinates as a percentage, so that the focus point can be placed correctly to scale\n        const percentageX = (originalX / originalWidth) * 100;\n        const percentageY = (originalY / originalHeight) * 100;\n\n        drawBullseye(percentageY, percentageX);\n        document.querySelector('input[name=\"focus_x\"]').value = parseInt(originalX);\n        document.querySelector('input[name=\"focus_y\"]').value = parseInt(originalY);\n    });\n\n    bullseye.addEventListener('click', function () {\n        bullseye.classList.add('hidden');\n        document.querySelector('input[name=\"focus_x\"]').value = '';\n        document.querySelector('input[name=\"focus_y\"]').value = '';\n    });\n\n    // Place the bullseye on the page\n    if (bullseye.dataset.focusX > 0 && bullseye.dataset.focusY > 0) {\n        initBullseye();\n    }\n};\n\nconst drawBullseye = (top, left) => {\n    bullseye.style.top = (top) + '%';\n    bullseye.style.left = (left) + '%';\n    bullseye.classList.remove('hidden');\n};\n\nconst initBullseye = () => {\n    // Get the original dimensions of the image\n    const originalWidth = scaledImage.naturalWidth;\n    const originalHeight = scaledImage.naturalHeight;\n    if (originalWidth === 0) {\n        // Wait for the image to finish loading\n        setTimeout(initBullseye, 100);\n    }\n    bullseye.classList.remove('loading');\n\n    // Calculate the coordinates as a percentage, so that the focus point can be placed correctly to scale\n    const left = (bullseye.dataset.focusX / originalWidth) * 100;\n    const top = (bullseye.dataset.focusY / originalHeight) * 100;\n\n\n    drawBullseye(top, left);\n};\n\ninitImageFocus();\n"
  },
  {
    "path": "resources/js/subscription.js",
    "content": "// Strip variables for the page\nlet stripe, elements, card;\n\n// Form status\nlet formSubmitBtn;\n\n// Coupon stuff\nlet couponField, couponSuccess, couponError, couponId, couponValidating, paypalCoupon, cancelField;\n\nconst subscribeModal = document.getElementById('subscribe-confirm');\n\nconst init = () => {\n    initStripe();\n    initPeriodToggle();\n    initAnalytics();\n    window.onEvent(function() {\n        initConfirmListener();\n    });\n};\n\n// Initialize the stripe API\nconst initStripe = () => {\n    const token = document.getElementById('stripe-token');\n    stripe = Stripe(token.value);\n\n    // Create an instance of Elements.\n    elements = stripe.elements();\n};\n\n// When the modal is opened and loaded, inject stripe if needed and the form validator\nconst initConfirmListener = ()=> {\n    formSubmitBtn = document.querySelector('.subscription-confirm-button');\n\n    let cardSelector = document.getElementById('card-element');\n    if (cardSelector) {\n        // First time opening the modal, initiate a new card\n        if (!card) {\n            // Custom styling can be passed to options when creating an Element.\n            // (Note that this demo uses a wider set of styles than the guide below.)\n            let style = {\n                base: {\n                    color: '#555555',\n                    fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\n                    fontSmoothing: 'antialiased',\n                    fontSize: '14px',\n                    '::placeholder': {\n                        color: '#777777'\n                    }\n                },\n                invalid: {\n                    color: '#fa755a',\n                    iconColor: '#fa755a'\n                }\n            };\n\n            // Create an instance of the card Element.\n            card = elements.create('card', {hidePostalCode: true, style: style});\n        }\n\n        // Add an instance of the card Element into the `card-element` <div>.\n        card.mount('#card-element');\n    }\n\n    document.getElementById('subscription-confirm')?.addEventListener('submit', subscribe);\n\n    couponField = document.getElementById('coupon-check');\n    if (couponField) {\n        couponSuccess = document.getElementById('coupon-success');\n        couponError = document.getElementById('coupon-invalid');\n        couponId = document.getElementById('coupon');\n        couponValidating = document.getElementById('coupon-validating');\n        paypalCoupon = document.querySelector('.paypal-coupon');\n        couponField.addEventListener('change', checkCoupon);\n        couponField.addEventListener('focusout', checkCoupon);\n    }\n\n    const selectMethod = document.querySelector('select[name=\"select-method\"]');\n    if (selectMethod) {\n        selectMethod.addEventListener('change', changeMethod);\n    }\n};\n\nconst changeMethod = (event) => {\n    //console.log('changing method to', event.target.value);\n    const card = document.querySelector('#card-panel');\n    const paypal = document.querySelector('#paypal-panel');\n    if (event.target.value === 'paypal') {\n        card.classList.add('hidden');\n        paypal.classList.remove('hidden');\n    } else {\n        card.classList.remove('hidden');\n        paypal.classList.add('hidden');\n    }\n}\n\nconst checkCoupon = (event) => {\n    const element = event.target;\n    const coupon = element.value;\n    const url = element.dataset.url;\n\n    if (!coupon) {\n        formSubmitBtn.classList.remove('btn-disabled', 'loading');\n        formSubmitBtn.disabled = false;\n    }\n    couponValidating.classList.remove('hidden');\n    fetch(url + '?coupon=' + coupon)\n        .then((response) => response.json())\n        .then((result) => {\n            formSubmitBtn.classList.remove('btn-disabled', 'loading');\n            formSubmitBtn.disabled = false;\n            couponValidating.classList.add('hidden');\n\n            if (!result.valid) {\n                couponSuccess.classList.add('hidden');\n                couponError.innerHTML = result.error;\n                couponError.classList.remove('hidden');\n                couponId.value = '';\n                subscribeModal.classList.remove('valid-coupon');\n                paypalCoupon.classList.add('hidden');\n                return;\n            }\n\n            document.getElementById('pricing-now').innerHTML = result.price;\n            couponError.classList.add('hidden');\n            couponSuccess.innerHTML = result.discount;\n            couponSuccess.classList.remove('hidden');\n            couponId.value = result.coupon;\n            subscribeModal.classList.add('valid-coupon');\n            paypalCoupon.classList.remove('hidden');\n        }).catch((result) => {\n            couponValidating.classList.add('hidden');\n            if (result.responseJSON) {\n                couponError.innerHTML = result.responseJSON.message;\n                couponError.classList.remove('hidden');\n            }\n            paypalCoupon.classList.add('hidden');\n        });\n};\n\nconst subscribe = (event) => {\n    const form = event.target;\n    event.preventDefault();\n    disableSubmit(event);\n\n    const intentToken = document.querySelector('input[name=\"subscription-intent-token\"]');\n    const errorMessage = document.querySelector('.alert-error');\n    errorMessage.classList.add('hidden');\n\n    // If the form already has a payment id, we don't need stripe to add the new one\n    const cardID = document.querySelector('input[name=\"payment_id\"]');\n    if (cardID.value) {\n        // Let the animation handler do its thing\n        form.submit();\n        return false;\n    }\n\n    stripe.confirmCardSetup(\n        intentToken.value, {\n            payment_method: {\n                card: card,\n                billing_details: {\n                    name: document.querySelector('input[name=\"card-holder-name\"]').value\n                }\n            }\n        }\n    ).then(function (result) {\n        if (result.error) {\n            formSubmitBtn.classList.remove('disabled', 'loading');\n            formSubmitBtn.disabled = '';\n            errorMessage.innerHTML = result.error.message;\n            errorMessage.classList.remove('hidden');\n            return false;\n        } else {\n            cardID.value = result.setupIntent.payment_method;\n            // Let the animation handler do its thing\n            form.submit();\n        }\n    }.bind(this));\n};\n\nconst initPeriodToggle = () => {\n    const pricingOverview = document.getElementById('pricing-overview');\n    const yearly = document.querySelector('[data-period=\"yearly\"]');\n    const monthly = document.querySelector('[data-period=\"monthly\"]');\n\n    const togglers = document.querySelectorAll('[data-period]');\n\n    togglers?.forEach((toggler) => {\n        toggler.addEventListener('click', function () {\n            if (this.dataset.period === 'monthly') {\n                yearly.classList.remove('bg-base-100');\n                yearly.classList.add('text-neutral-content');\n                monthly.classList.add('bg-base-100');\n                monthly.classList.remove('text-neutral-content');\n                pricingOverview.classList.remove('period-year');\n                pricingOverview.classList.add('period-month');\n            } else if (this.dataset.period === 'yearly') {\n                monthly.classList.remove('bg-base-100');\n                monthly.classList.add('text-neutral-content');\n                yearly.classList.add('bg-base-100');\n                yearly.classList.remove('text-neutral-content');\n                pricingOverview.classList.remove('period-month');\n                pricingOverview.classList.add('period-year');\n            }\n        });\n    });\n};\n\n\nconst disableSubmit = (event) => {\n    const form = event.target;\n    const submitBtn = form.querySelector('.subscription-confirm-button');\n    submitBtn.classList.add('disabled', 'loading');\n    submitBtn.disabled = true;\n    return true;\n};\n\n\n// Send a gtag event when .price-monthly and .price-yearly buttons are clicked\nconst initAnalytics = () => {\n    // Select all elements with .price-monthly and .price-yearly classes\n    const monthlyButtons = document.querySelectorAll('.price-monthly');\n    const yearlyButtons = document.querySelectorAll('.price-yearly');\n\n    // Attach click event listener to each .price-monthly button\n    monthlyButtons.forEach((button) => {\n        button.addEventListener('click', () => {\n            let item = {\n                item_id: button.dataset.id,\n                item_name: button.dataset.name,\n                item_price: button.dataset.price\n            };\n            gtag('event', 'select_item', {\n                items: [item]\n            });\n        });\n    });\n\n    // Attach click event listener to each .price-yearly button\n    yearlyButtons.forEach((button) => {\n        button.addEventListener('click', () => {\n            let item = {\n                item_id: button.dataset.id,\n                item_name: button.dataset.name,\n                item_price: button.dataset.price\n            };\n            gtag('event', 'select_item', {\n                items: [item]\n            });\n        });\n    });\n\n}\n\ninit();\n"
  },
  {
    "path": "resources/js/tags.js",
    "content": "import TomSelect from 'tom-select';\n\nwindow.initTags = function () {\n    document.querySelectorAll('select.form-tags')?.forEach(function (ele) {\n        if (ele.tomselect) {\n            return;\n        }\n\n        const allowNew = ele.dataset.allowNew === 'true';\n        const plugins = ['dropdown_input', 'remove_button'];\n        if (ele.dataset.allowClear === 'true') {\n            plugins.push('clear_button');\n        }\n\n        const ts = new TomSelect(ele, {\n            plugins,\n            allowEmptyOption: true,\n            preload: 'focus',\n            loadThrottle: 500,\n            valueField: 'id',\n            labelField: 'text',\n            searchField: 'text',\n            placeholder: ele.dataset.placeholder || '',\n            create: allowNew ? function (input, callback) {\n                const term = input.trim();\n                if (!term) { return; }\n                callback({ id: term, text: term, newTag: true });\n            } : false,\n            load: function (query, callback) {\n                fetch(ele.dataset.url + (ele.dataset.url.includes('?') ? '&' : '?') + 'q=' + encodeURIComponent(query.trim()), {\n                    headers: { 'X-Requested-With': 'XMLHttpRequest' }\n                })\n                    .then(r => r.json())\n                    .then(data => callback(data))\n                    .catch(() => callback());\n            },\n            render: {\n                option: function (data, escape) {\n                    if (data.colour) {\n                        const style = data.colour_style || ('background-color: ' + escape(data.colour) + '; color: #fff;');\n                        return '<div class=\"flex gap-2 items-center text-left\">'\n                            + '<span class=\"rounded-full flex-none w-6 h-6\" style=\"' + style + '\"></span>'\n                            + '<span class=\"grow\">' + escape(data.text) + '</span>'\n                            + '</div>';\n                    }\n                    return '<div class=\"block grow text-left\">' + escape(data.text) + '</div>';\n                },\n                item: function (data, escape) {\n                    const div = document.createElement('div');\n                    if (data.newTag) {\n                        div.title = ele.dataset.newTag || '';\n                        div.innerHTML = escape(data.text) + ' <i class=\"fa-solid fa-flag\" aria-hidden=\"true\"></i>';\n                    } else {\n                        div.innerHTML = escape(data.text);\n                    }\n                    if (data.colour_style) {\n                        div.setAttribute('style', data.colour_style);\n                    } else if (data.colour) {\n                        div.style.backgroundColor = data.colour;\n                        div.style.color = '#fff';\n                    }\n                    div.classList.add('text-left');\n                    return div;\n                },\n            },\n        });\n    });\n\n    document.querySelectorAll('select.position-dropdown')?.forEach(function (ele) {\n        if (ele.tomselect) {\n            return;\n        }\n        new TomSelect(ele, {\n            plugins: ['remove_button', 'clear_button'],\n            placeholder: ele.dataset.placeholder || '',\n            allowEmptyOption: true,\n            dropdownParent: ele.dataset.dropdownParent || null,\n            create: function (input, callback) {\n                const term = input.trim();\n                if (!term) { return; }\n                callback({ value: term, text: term });\n            },\n        });\n    });\n};\n\nwindow.initTags();\n"
  },
  {
    "path": "resources/js/timelines.js",
    "content": "let oldEra;\n\n/**\n * Dynamically update the element's \"position\" dropdown field based on the selected era.\n */\nconst registerElementForm = () => {\n    const field = document.getElementById('element-era-id');\n    if (!field) {\n        return;\n    }\n    oldEra = field.value;\n    field.addEventListener('change', function () {\n        // Load era list\n        loadTimelineEra(field.value);\n    });\n};\n\n/**\n *\n * @param eraID\n */\nconst loadTimelineEra = (eraID) => {\n    eraID = parseInt(eraID);\n    let url = document.querySelector('input[name=\"era-data-url\"]').dataset.url.replace('/0/', '/' + eraID + '/');\n    let oldPosition = document.querySelector('input[name=\"oldPosition\"]').dataset.url;\n\n    axios.get(url)\n        .then(res => {\n            let eraField = document.querySelector('select[name=\"position\"]');\n            eraField.innerHTML = '';\n            let id = 1;\n            const options = Object.entries(res.data.positions);\n            options.forEach(function (position, i) {\n                const newOption = document.createElement('option');\n                newOption.text = position[1];\n                if (oldPosition && !i && (oldEra == eraID)) {\n                    newOption.value = 1;\n                    eraField.appendChild(newOption);\n                }\n                if (i) {\n                    newOption.value = id;\n                    eraField.appendChild(newOption);\n                }\n                id++;\n            });\n        });\n};\n\nregisterElementForm();\n"
  },
  {
    "path": "resources/js/toast.js",
    "content": "/** Handle closing of a toast **/\nconst registerToastDismiss = () => {\n    const dismisses = document.querySelectorAll('.toast-container [data-toggle=\"dismiss\"]');\n    dismisses.forEach(element => {\n        if (element.dataset.init === '1') {\n            return;\n        }\n        element.dataset.init = '1';\n        element.addEventListener('click', function (e) {\n            e.preventDefault();\n            let target= element.closest('.toast-message');\n            target.classList.remove('opacity-100');\n            target.classList.add('opacity-0');\n\n            setTimeout(function () {\n                target.remove();\n            }, 150);\n        });\n    });\n};\n\n/** Show an expiring message at the bottom right of the page **/\nwindow.showToast = function(message, css) {\n    css = css || 'bg-success text-success-content';\n    if (css === 'error') {\n        css = 'bg-error text-error-content';\n    }\n    const container = document.createElement('div');\n    container.classList.add('opacity-100', 'duration-150', 'transition-opacity', 'rounded-lg', 'px-1');\n    if (css) {\n        const classes = css.split(' ');\n        classes.forEach(cssClass => {\n            container.classList.add(cssClass);\n        })\n    }\n    container.innerHTML = '<div class=\"toast-message p-2 flex gap-2 items-center\">'\n        + '<span class=\"grow\"> ' + message + '</span>'\n        + '<span class=\"flex-none\"><i class=\"fa-regular fa-circle-xmark cursor-pointer \" data-toggle=\"dismiss\"></i></span>'\n        + '</div>';\n\n    document.querySelector('.toast-container').appendChild(container);\n    setTimeout(function() {\n        container.classList.remove('opacity-100');\n        container.classList.add('opacity-0');\n        setTimeout(function () {\n            container.remove();\n        }, 150);\n    }, 3000);\n    registerToastDismiss();\n};\n\n\nregisterToastDismiss();\n\n"
  },
  {
    "path": "resources/js/utility/CampaignShareModal.vue",
    "content": "<template>\n    <div>\n        <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n            <h4 class=\"text-lg font-normal\">{{ trans.title }}</h4>\n            <button type=\"button\" class=\"text-2xl opacity-60 hover:opacity-100 hover:bg-base-200 focus:bg-base-200 cursor-pointer w-8 h-8 flex items-center justify-center rounded-lg\" :title=\"trans.btn_close\" @click=\"closeModal\" aria-label=\"Close dialog\">\n                <svg class=\"w-3 h-3\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\">\n                    <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\"></path>\n                </svg>\n            </button>\n        </header>\n\n        <article class=\"max-w-2xl flex flex-col gap-4 py-4 px-4 md:px-6\">\n            <div v-if=\"errorMessage\" class=\"alert alert-error p-4 flex gap-2 rounded-2xl\">\n                <i class=\"fa-solid fa-circle-exclamation shrink-0\"></i>\n                <span>{{ errorMessage }}</span>\n            </div>\n\n            <!-- Private campaign -->\n            <div v-if=\"!isCampaignPublic\" class=\"flex flex-col gap-4\">\n                <div class=\"alert alert-info p-4 flex gap-2 rounded-2xl\">\n                    <i class=\"fa-solid fa-lock shrink-0 mt-0.5\"></i>\n                    <div class=\"flex flex-col gap-1\">\n                        <span class=\"text-sm font-bold\">{{ trans.status_private }}</span>\n                        <p class=\"text-xs\">{{ trans.helper_private }}</p>\n                    </div>\n                </div>\n\n                <!-- Member link -->\n                <div class=\"flex flex-col gap-1\">\n                    <label class=\"font-normal text-sm\">{{ trans.label_member_link }}</label>\n                    <div class=\"flex items-center gap-2\">\n                        <input\n                            type=\"text\"\n                            class=\"input input-bordered w-full text-sm font-mono bg-base-200\"\n                            readonly\n                            :value=\"url\"\n                        />\n                        <button\n                            class=\"btn2 btn-sm btn-outline shrink-0\"\n                            :data-clipboard=\"url\"\n                            :data-toast=\"trans.success_copied_members\"\n                            :title=\"trans.btn_copy\"\n                        >\n                            <i class=\"fa-solid fa-copy\"></i>\n                        </button>\n                    </div>\n                </div>\n            </div>\n\n            <!-- Unlisted or public campaign -->\n            <div v-else class=\"flex flex-col gap-4\">\n                <!-- Unlisted status -->\n                <div v-if=\"isCampaignUnlisted\" class=\"alert alert-success p-4 flex gap-2 rounded-2xl\">\n                    <i class=\"fa-solid fa-link shrink-0 mt-0.5\"></i>\n                    <div class=\"flex flex-col gap-1\">\n                        <span class=\"text-sm font-bold\">{{ trans.status_unlisted }}</span>\n                        <p class=\"text-xs\">{{ trans.helper_unlisted }}</p>\n                    </div>\n                </div>\n                <!-- Public status -->\n                <div v-else class=\"alert alert-success p-4 flex gap-2 rounded-2xl\">\n                    <i class=\"fa-solid fa-globe shrink-0 mt-0.5\"></i>\n                    <div class=\"flex flex-col gap-1\">\n                        <span class=\"text-sm font-bold\">{{ trans.status_public }}</span>\n                        <p class=\"text-xs\">{{ trans.helper_public }}</p>\n                    </div>\n                </div>\n\n                <!-- Public/unlisted link -->\n                <div class=\"flex flex-col gap-1\">\n                    <label class=\"font-normal text-sm\">{{ trans.label_public_link }}</label>\n                    <div class=\"flex items-center gap-2\">\n                        <input\n                            type=\"text\"\n                            class=\"input input-bordered w-full text-sm font-mono bg-base-200\"\n                            readonly\n                            :value=\"url\"\n                        />\n                        <button\n                            class=\"btn2 btn-sm btn-outline shrink-0\"\n                            :data-clipboard=\"url\"\n                            :data-toast=\"trans.success_copied_public\"\n                            :title=\"trans.btn_copy\"\n                        >\n                            <i class=\"fa-solid fa-copy\"></i>\n                        </button>\n                    </div>\n                </div>\n            </div>\n        </article>\n\n        <footer class=\"p-4 md:px-6\">\n            <menu class=\"flex justify-end gap-3\">\n                <button\n                    v-if=\"isCampaignPublic\"\n                    type=\"button\"\n                    class=\"btn2 btn-sm btn-outline\"\n                    @click=\"openVisibilityDialog\"\n                >\n                    {{ trans.btn_change_visibility }}\n                </button>\n                <button\n                    v-if=\"!isCampaignPublic\"\n                    type=\"submit\"\n                    class=\"btn2 btn-primary\"\n                    :disabled=\"loading\"\n                    @click=\"makePublic\"\n                >\n                    <span v-if=\"loading\" class=\"loading loading-spinner loading-xs mr-2\"></span>\n                    {{ trans.btn_make_public }}\n                </button>\n                <button\n                    v-else\n                    type=\"button\"\n                    class=\"btn2 btn-primary\"\n                    :data-clipboard=\"url\"\n                    :data-toast=\"trans.success_copied_public\"\n                    @click=\"closeModal\"\n                >\n                    {{ trans.btn_copy_public_link }}\n                </button>\n            </menu>\n        </footer>\n    </div>\n</template>\n\n<script>\nimport axios from 'axios';\n\nexport default {\n    props: {\n        initialVisibility: { type: String, required: true }, // 'private', 'public', 'unlisted'\n        url: { type: String, required: true },\n        saveEndpoint: { type: String, required: true },\n        settingsUrl: { type: String, required: true },\n        trans: { type: Object, required: true }\n    },\n    data() {\n        return {\n            loading: false,\n            errorMessage: null,\n            visibility: this.initialVisibility,\n        };\n    },\n    computed: {\n        isCampaignPublic() {\n            return this.visibility === 'public' || this.visibility === 'unlisted';\n        },\n        isCampaignUnlisted() {\n            return this.visibility === 'unlisted';\n        },\n    },\n    mounted() {\n        window.triggerEvent?.();\n    },\n    methods: {\n        async makePublic() {\n            this.loading = true;\n            this.errorMessage = null;\n\n            try {\n                await axios.post(this.saveEndpoint, { campaign_visibility: 'public' });\n\n                this.visibility = 'public';\n\n                // Copy the link to clipboard and show toast\n                if (navigator.clipboard) {\n                    await navigator.clipboard.writeText(this.url);\n                } else {\n                    const el = document.createElement('textarea');\n                    el.value = this.url;\n                    document.body.appendChild(el);\n                    el.select();\n                    document.execCommand('copy');\n                    document.body.removeChild(el);\n                }\n\n                window.showToast(this.trans.success_copied_public);\n                this.closeModal();\n\n            } catch (error) {\n                console.error(error);\n                this.errorMessage = error.response?.data?.message || this.trans.error_generic;\n            } finally {\n                this.loading = false;\n            }\n        },\n        openVisibilityDialog() {\n            window.openDialog('primary-dialog', this.settingsUrl);\n        },\n        closeModal() {\n            const dialog = this.$el.closest('dialog');\n            if (dialog) {\n                dialog.close();\n            }\n        },\n    }\n}\n</script>\n"
  },
  {
    "path": "resources/js/utility/EntityShareModal.vue",
    "content": "<template>\n    <header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n        <h4 class=\"text-lg font-normal\">{{ trans.title }}</h4>\n        <button type=\"button\" class=\"text-2xl opacity-60 hover:opacity-100 hover:bg-base-200 focus:bg-base-200 cursor-pointer w-8 h-8 flex items-center justify-center rounded-lg\" :title=\"trans.btn_close\" @click=\"closeModal\" aria-label=\"Close dialog\">\n            <svg class=\"w-3 h-3\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\">\n                <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\"></path>\n            </svg>\n        </button>\n    </header>\n\n    <div class=\"container\">\n        <article class=\"max-w-2xl flex flex-col gap-4 py-4 px-4 md:px-6\">\n            <div v-if=\"errorMessage\" class=\"alert alert-error p-4 flex gap-2 rounded-2xl\">\n                <i class=\"fa-solid fa-circle-exclamation shrink-0\"></i>\n                <span>{{ errorMessage }}</span>\n            </div>\n\n            <div v-if=\"justMadeCampaignPublic\" class=\"alert alert-info p-4 flex gap-2 rounded-2xl\">\n                <i class=\"fa-solid fa-circle-info shrink-0 mt-0.5\"></i>\n                <p class=\"text-sm\">{{ trans.warning_entity_permissions }}</p>\n            </div>\n\n            <!-- Public campaign -->\n            <template v-if=\"isCampaignPublic\">\n                <!-- Entity not readable by public -->\n                <template v-if=\"isEntityPrivate\">\n                    <div class=\"alert alert-warning p-4 flex gap-2 rounded-2xl\">\n                        <i class=\"fa-solid fa-eye-slash shrink-0 mt-0.5\"></i>\n                        <div class=\"flex flex-col gap-1\">\n                            <span class=\"text-sm font-bold\">{{ trans.status_hidden }}</span>\n                            <p class=\"text-xs\">{{ entityHiddenHelper }}</p>\n                        </div>\n                    </div>\n\n                    <div class=\"flex flex-col gap-1 w-full\">\n                        <label class=\"font-semibold text-xs opacity-80\">{{ trans.field_visibility_mode }}</label>\n                        <div class=\"flex flex-col gap-2\">\n                            <label class=\"flex items-center gap-3 p-3 border border-base-300 rounded-xl cursor-pointer hover:bg-base-200 transition\">\n                                <input type=\"radio\" name=\"visibility_mode\" value=\"entity\" class=\"radio radio-primary radio-sm\" v-model=\"form.visibility_mode\">\n                                <span class=\"text-sm\">{{ trans.option_entity_public }}</span>\n                            </label>\n                            <label class=\"flex items-center gap-3 p-3 border border-base-300 rounded-xl cursor-pointer hover:bg-base-200 transition\">\n                                <input type=\"radio\" name=\"visibility_mode\" value=\"global\" class=\"radio radio-primary radio-sm\" v-model=\"form.visibility_mode\">\n                                <span class=\"text-sm\">{{ trans.option_global_public }}</span>\n                            </label>\n                        </div>\n                    </div>\n                </template>\n\n                <!-- Entity is visible -->\n                <div v-else class=\"alert alert-success p-4 flex gap-2 rounded-2xl\">\n                    <i :class=\"isCampaignUnlisted ? 'fa-solid fa-link' : 'fa-solid fa-globe'\" class=\"shrink-0 mt-0.5\"></i>\n                    <div class=\"flex flex-col gap-1\">\n                        <span class=\"text-sm font-bold\">{{ entityVisibleStatus }}</span>\n                        <p class=\"text-xs\">{{ entityVisibleHelper }}</p>\n                    </div>\n                </div>\n            </template>\n\n            <!-- Private campaign -->\n            <template v-else>\n                <div class=\"alert alert-warning p-4 flex gap-2 rounded-2xl\">\n                    <i class=\"fa-solid fa-lock shrink-0 mt-0.5\"></i>\n                    <div class=\"flex flex-col gap-1\">\n                        <span class=\"text-sm font-bold\">{{ trans.status_private }}</span>\n                        <p class=\"text-xs\">{{ trans.helper_private }}</p>\n                    </div>\n                </div>\n\n                <div class=\"alert alert-info p-4 flex gap-2 rounded-2xl\">\n                    <i class=\"fa-solid fa-circle-info shrink-0 mt-0.5\"></i>\n                    <p class=\"text-sm\">{{ trans.warning_entity_permissions }}</p>\n                </div>\n            </template>\n\n            <!-- Link section (always visible) -->\n            <div class=\"flex flex-col gap-1 w-full\">\n                <label class=\"font-semibold text-xs opacity-80\">{{ isEntityPublic ? trans.label_public_link : trans.label_member_link }}</label>\n                <div class=\"flex items-center gap-2\">\n                    <input\n                        type=\"text\"\n                        class=\"input input-bordered w-full text-sm font-mono bg-base-200\"\n                        readonly\n                        :value=\"url\"\n                    />\n                    <button class=\"btn2 btn-sm btn-outline shrink-0\" :data-clipboard=\"url\" :data-toast=\"clipboardToast\" :title=\"trans.btn_copy\">\n                        <i class=\"fa-solid fa-copy\"></i>\n                    </button>\n                </div>\n                <p class=\"text-xs text-neutral-content\" v-if=\"!isEntityPublic\" v-html=\"trans.helper_member_link\"></p>\n            </div>\n        </article>\n\n    </div>\n    <footer class=\"p-4 md:px-6\">\n        <menu class=\"flex justify-end gap-3\">\n            <button\n                v-if=\"showSaveButton\"\n                type=\"submit\"\n                class=\"btn2 btn-primary\"\n                :disabled=\"loading\"\n                @click=\"saveChanges\"\n            >\n                <span v-if=\"loading\" class=\"loading loading-spinner loading-xs mr-2\"></span>\n                {{ isCampaignPublic ? trans.btn_save : trans.btn_make_public }}\n            </button>\n        </menu>\n    </footer>\n</template>\n\n<script>\nimport axios from 'axios';\n\nexport default {\n    props: {\n        initialCampaignVisibility: { type: String, required: true }, // 'private', 'public', 'unlisted'\n        initialEntityPrivate: { type: Boolean, required: true },\n        url: { type: String, required: true },\n        saveEndpoint: { type: String, required: true },\n        trans: { type: Object, required: true }\n    },\n    data() {\n        return {\n            loading: false,\n            errorMessage: null,\n            justMadeCampaignPublic: false,\n            campaignVisibility: this.initialCampaignVisibility,\n            isEntityPrivate: this.initialEntityPrivate,\n            form: {\n                visibility_mode: 'entity',\n            }\n        };\n    },\n    mounted() {\n        window.triggerEvent?.();\n    },\n    computed: {\n        isCampaignPublic() {\n            return this.campaignVisibility === 'public' || this.campaignVisibility === 'unlisted';\n        },\n        isEntityPublic() {\n            return this.isCampaignPublic && !this.isEntityPrivate;\n        },\n        clipboardToast() {\n            return this.isEntityPublic\n                ? this.trans.success_copied_public\n                : this.trans.success_copied_members;\n        },\n        isCampaignUnlisted() {\n            return this.campaignVisibility === 'unlisted';\n        },\n        entityVisibleStatus() {\n            return this.isCampaignUnlisted ? this.trans.status_unlisted : this.trans.status_public;\n        },\n        entityVisibleHelper() {\n            return this.isCampaignUnlisted ? this.trans.helper_unlisted : this.trans.helper_public;\n        },\n        entityHiddenHelper() {\n            return this.isCampaignUnlisted ? this.trans.helper_hidden_unlisted : this.trans.helper_hidden;\n        },\n        showSaveButton() {\n            // Public campaign with private entity: always show (radio defaults to 'entity')\n            if (this.isCampaignPublic) {\n                return this.isEntityPrivate;\n            }\n            // Private campaign: always show \"Make campaign public\" action\n            return true;\n        },\n    },\n    methods: {\n        async saveChanges() {\n            this.loading = true;\n            this.errorMessage = null;\n\n            try {\n                let payload = {};\n\n                if (this.isCampaignPublic) {\n                    payload.visibility_mode = this.form.visibility_mode;\n                } else {\n                    payload.campaign_visibility = 'public';\n                }\n\n                const response = await axios.post(this.saveEndpoint, payload);\n\n                if (this.isCampaignPublic) {\n                    this.isEntityPrivate = false;\n                } else {\n                    this.campaignVisibility = 'public';\n                    this.isEntityPrivate = true;\n                    this.justMadeCampaignPublic = true;\n                }\n\n                window.showToast(this.trans.success_updated);\n\n                this.$emit('updated', response.data);\n\n            } catch (error) {\n                console.error(error);\n                this.errorMessage = error.response?.data?.message || this.trans.error_generic;\n            } finally {\n                this.loading = false;\n            }\n        },\n        closeModal() {\n            const dialog = this.$el.closest('dialog');\n            if (dialog) {\n                dialog.close();\n            }\n        },\n    }\n}\n</script>\n"
  },
  {
    "path": "resources/js/utility/colour-picker.js",
    "content": "import \"@melloware/coloris/dist/coloris.css\";\nimport Coloris from \"@melloware/coloris\";\n\n// Key to store colors in the cookie\nconst RECENT_COLORS_KEY = 'recent_colors';\nconst MAX_COLORS = 10;\n\n// Function to get cookies as an object\nfunction getCookies() {\n    return document.cookie.split(';').reduce((cookies, cookie) => {\n        const [key, value] = cookie.split('=').map(c => c.trim());\n        if (key && value) cookies[key] = decodeURIComponent(value);\n        return cookies;\n    }, {});\n}\n\n// Function to set a cookie\nfunction setCookie(name, value, days = 30) {\n    const date = new Date();\n    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n    document.cookie = `${name}=${encodeURIComponent(value)}; expires=${date.toUTCString()}; path=/`;\n}\n\n// Function to update the swatches in Coloris\nfunction updateSwatches(colors) {\n    Coloris({\n        swatches: colors,\n    });\n}\n\n\n/**\n * Initiate color for the various fields\n */\nfunction initColourPicker() {\n    // Load recent colors from cookie\n    const cookies = getCookies();\n    let recentColors = cookies[RECENT_COLORS_KEY] ? JSON.parse(cookies[RECENT_COLORS_KEY]) : [];\n\n    // Set initial swatches\n    //updateSwatches(recentColors);\n\n    Coloris.init();\n    Coloris({\n        el: '.spectrum',\n        format: 'hex',\n        alpha: false,\n        theme: 'pill',\n        clearButton: true,\n        closeButton: true,\n        swatches: recentColors\n    });\n\n    document.querySelectorAll('.spectrum').forEach(input => {\n        if (input.dataset.init === \"1\") {\n            return;\n        }\n        input.dataset.init = 1;\n        input.addEventListener('click', function (e) {\n            Coloris({\n                parent: input.dataset.appendTo ?? '.container',\n            });\n        });\n        input.addEventListener('change', function (e) {\n            const color = event.target.value;\n\n            // Add the new color to the beginning of the array, avoiding duplicates\n            recentColors = [color, ...recentColors.filter(c => c !== color)];\n\n            // Limit the array to MAX_COLORS\n            if (recentColors.length > MAX_COLORS) {\n                recentColors = recentColors.slice(0, MAX_COLORS);\n            }\n\n            // Save updated colors to the cookie\n            setCookie(RECENT_COLORS_KEY, JSON.stringify(recentColors));\n\n            // Update the swatches\n            updateSwatches(recentColors);\n        });\n        // Don't close the dialog backdrop\n        input.addEventListener('close', e => {\n            e.stopPropagation();\n        });\n    });\n}\n\n\nwindow.onEvent(function() {\n    initColourPicker();\n});\ninitColourPicker();\n"
  },
  {
    "path": "resources/js/utility/colours.ts",
    "content": "// language: typescript\ntype HSL = { h: number; s: number; l: number; a?: number };\n\nfunction readCssVar(name: string): string {\n    return getComputedStyle(document.documentElement).getPropertyValue(name).trim();\n}\n\nfunction hslFromVar(varName: string): HSL | null {\n    // Expect var to be like: \"215 56% 59%\" or possibly \"215 56% 59% / 0.9\"\n    const raw = readCssVar(varName);\n    if (!raw) return null;\n    // Normalize spaces and split by '/' for alpha if present\n    const [main, alpha] = raw.split('/').map(s => s.trim());\n    const parts = main.split(/\\s+/);\n    if (parts.length < 3) return null;\n    const h = Number(parts[0]);\n    const s = Number(parts[1].replace('%', ''));\n    const l = Number(parts[2].replace('%', ''));\n    return { h, s, l, a: alpha ? Number(alpha) : undefined };\n}\n\nfunction hslString(hsl: HSL) {\n    if (typeof hsl.a === 'number') {\n        return `hsl(${hsl.h} ${hsl.s}% ${hsl.l}% / ${hsl.a})`;\n    }\n    return `hsl(${hsl.h} ${hsl.s}% ${hsl.l}%)`;\n}\n\nfunction tweakHsl(hsl: HSL, { dh = 0, ds = 0, dl = 0, a }: { dh?: number; ds?: number; dl?: number; a?: number } = {}) {\n    const clamp = (v: number, lo = 0, hi = 100) => Math.min(hi, Math.max(lo, v));\n    return {\n        h: (hsl.h + dh + 360) % 360,\n        s: clamp(hsl.s + ds),\n        l: clamp(hsl.l + dl),\n        a: typeof a === 'number' ? a : hsl.a,\n    } as HSL;\n}\n\n\nfunction cssVariable (variable: string){\n    const base = hslFromVar(variable);\n    if (!base) return `hsl(${readCssVar('--p')})`;\n    return hslString(base);\n}\n\nexport { hslFromVar, hslString, tweakHsl, readCssVar, cssVariable };\n"
  },
  {
    "path": "resources/js/utility/dialog.js",
    "content": "/**\n * Heavily inspired by the amazing https://web.dev/building-a-dialog-component/\n */\nconst backdrop = document.getElementById('dialog-backdrop');\nlet loadingContent;\n\nconst initDialogs = () => {\n    document.querySelectorAll('[data-toggle=\"dialog\"]').forEach(el => {\n        el.addEventListener('click', openingDialog);\n    });\n\n    document.querySelectorAll('[data-toggle=\"dialog-ajax\"]').forEach(el => {\n        el.addEventListener('click', openingDialog);\n    });\n};\n\nconst dialogLoadedEvent = new Event('dialog.loaded');\n\nfunction openingDialog(e) {\n    e.preventDefault();\n    let target = this.dataset.target ?? 'primary-dialog';\n    let url = this.dataset.url ?? this.url;\n    let focus = this.dataset.focus;\n    openDialog(target, url, focus);\n}\n\nconst openDialog = (target, url, focus) => {\n    target = document.getElementById(target);\n    target.removeAttribute('open');\n    target.setAttribute('aria-hidden', false);\n    target.show();\n    document.addEventListener('keydown', handleKeydown);\n\n    backdrop.classList.remove('hidden');\n    if (target.dataset.dismissible !== 'false') {\n        backdrop.addEventListener('click', function (event) {\n            target.close();\n        });\n    }\n\n    target.addEventListener('click', function (event) {\n        let rect = target.getBoundingClientRect();\n        let isInDialog=(rect.top <= event.clientY && event.clientY <= rect.top + rect.height &&\n            rect.left <= event.clientX && event.clientX <= rect.left + rect.width);\n        if (!isInDialog && event.target.tagName === 'DIALOG') {\n            target.close();\n        }\n    });\n    target.addEventListener('close', function (event) {\n        backdrop.classList.add('hidden');\n        target.setAttribute('aria-hidden', true);\n        document.removeEventListener('keydown', handleKeydown);\n    });\n    //document.addEventListener('keydown', handleEscape);\n\n    if (url) {\n        loadDialogContent(url, target);\n    } else if(focus) {\n        let focusEle = document.querySelector(focus);\n        if (!focusEle) {\n            return;\n        }\n        focusEle.focus();\n    }\n};\n\nconst handleKeydown = (event) => {\n    if (event.key === 'Escape') {\n        const activeElement = document.activeElement;\n        const focusableTags = ['INPUT', 'SELECT', 'TEXTAREA'];\n        if (focusableTags.includes(activeElement.tagName)) {\n            document.activeElement.blur();\n            return;\n        }\n        const openDialog = document.querySelector('dialog[aria-hidden=\"false\"]');\n        if (!openDialog) {\n            document.removeEventListener('keydown', handleKeydown);\n        }\n        openDialog.close();\n    }\n};\n\nconst loadDialogContent = (url, target) => {\n    // When re-opening the dialog, show again the loading animation\n    if (!loadingContent) {\n        loadingContent = target.innerHTML;\n    } else {\n        target.innerHTML = loadingContent;\n    }\n\n    fetch(url, {headers: {'X-Requested-With': 'XMLHttpRequest'}})\n        .then(response => response.text())\n        .then(response => {\n            target.innerHTML = response;\n            target.show();\n            window.triggerEvent();\n            document.dispatchEvent(dialogLoadedEvent);\n            Alpine.initTree(target);\n            //console.log('alpine triggered on', target);\n        });\n};\n\nconst closeDialog = (target) => {\n    let el = document.getElementById(target);\n    el.close();\n};\n\nwindow.initDialogs = initDialogs;\nwindow.openDialog = openDialog;\nwindow.closeDialog = closeDialog;"
  },
  {
    "path": "resources/js/utility/formError.js",
    "content": "\nwindow.formErrorHandler = function(err, form) {\n    // Remove any existing errors from the form\n    const existingErrors = document.querySelectorAll('.input-error');\n    existingErrors.forEach(field => {\n        field.classList.remove('input-error');\n    });\n    const textError = document.querySelector('.text-error-content');\n    if (textError) {\n        textError.remove();\n    }\n\n    // Re-enable the submit button\n    const submitBtn = form.querySelector('.btn-primary');\n    if (submitBtn) {\n        submitBtn.disabled = false;\n        submitBtn.classList.remove('loading');\n    }\n\n    // If we have a 503 error status, let's assume it's from cloudflare and help the user\n    // properly save their data.\n    if (err.status === 503) {\n        window.showToast(err.data.message, 'error');\n        return;\n    }\n\n    // If it's 403, the session is gone\n    if (err.status === 403) {\n        document.querySelector('#entity-form-403-error').classList.remove('hidden');\n        return;\n    }\n\n    // No errors? Probably a backend error\n    if (!err.data.errors) {\n        window.showToast('Backend error', 'error');\n        return;\n    }\n    // Loop through the errors to add the class and error message\n    const errors = err.data.errors;\n    let logs = [];\n\n    const errorKeys = Object.keys(errors);\n    let foundAllErrors = true;\n    errorKeys.forEach(function (i) {\n        let errorSelector = document.querySelector('[name=\"' + i + '\"]');\n        if (errorSelector) {\n            errorSelector.classList.add('input-error');\n            const errorElement = document.createElement('div');\n            errorElement.classList.add('text-error-content');\n            errorElement.innerHTML = errors[i][0];\n            errorSelector.parentNode.append(errorElement);\n        } else {\n            foundAllErrors = false;\n            logs.push(errors[i][0]);\n        }\n\n        window.showToast(errors[i][0], 'error');\n    });\n\n    // If not all error fields could be found, show a generic error message on top of the form.\n    const genericError = document.querySelector('#entity-form-generic-error .error-logs');\n    if (!foundAllErrors && genericError) {\n        genericError.innerHTML = '';\n        logs.forEach(function (i) {\n            genericError.append(i);\n        });\n        document.querySelector('#entity-form-generic-error').classList.remove('hidden');\n    }\n\n    jumpToError(form, errors);\n};\n\nconst jumpToError = (form, errors) => {\n    // Find the first error and if it has an associated field\n    const firstErrorName = Object.keys(errors)[0];\n    const firstErrorField = form.querySelector('[name=\"' + firstErrorName + '\"]');\n    // It's a generic error unrelated to a field? End it here\n    if (!firstErrorField) {\n        return;\n    }\n\n    // No tabs? Try and focus on the field directly\n    if (!form.querySelector('.tab-content')) {\n        focusOnField(firstErrorField);\n        return;\n    }\n\n    // If we can actually find the first element, switch to it and the correct tab.\n    document.querySelector('.tab-content .active').classList.remove('active');\n    document.querySelector('.nav-tabs li.active').classList.remove('active');\n    const firstPane = document.querySelector('[name=\"' + firstErrorName + '\"').closest('.tab-pane');\n    if (firstPane) {\n        firstPane.classList.add('active');\n        document.querySelector('a[href=\"#' + firstPane.id + '\"]').closest('li').classList.add('active');\n    }\n\n    focusOnField(firstErrorField);\n};\n\nconst focusOnField = (field) => {\n    field.focus();\n    field.scrollIntoView({ behavior: 'smooth' });\n};\n"
  },
  {
    "path": "resources/js/utility/sortable.js",
    "content": "import Sortable from 'sortablejs';\n\nwindow.initSortable = function() {\n    let dragndropArea = document.querySelectorAll('.sortable-elements');\n    if (dragndropArea.length === 0) {\n        return;\n    }\n    dragndropArea.forEach((el) => {\n        let options = {};\n\n        // Handle?\n        let handle = el.dataset.handle;\n        if (handle) {\n            options.handle = handle;\n        }\n\n        Sortable.create(el, options);\n    });\n};\n\nwindow.initSortable();\n\n"
  },
  {
    "path": "resources/js/utility/tippy.js",
    "content": "import tippy from \"tippy.js\";\nconst entityTooltips = Array();\n\n/**\n * For ajax tooltips, we cache the result (typical for dashboards)\n */\nconst initAjaxTooltips = () => {\n    if (window.innerWidth < 768) {\n        return;\n    }\n    const elementsAjax = document.querySelectorAll(\n        '[data-toggle=\"tooltip-ajax\"]',\n    );\n    elementsAjax.forEach((e) => {\n        if (e._tippy) {\n            return;\n        }\n        tippy(e, {\n            theme: \"entity-tooltip\",\n            placement: e.dataset.direction ?? \"bottom\",\n            allowHTML: true,\n            interactive: true,\n            delay: 500,\n            appendTo: e.dataset.append ?? document.body,\n            content:\n                '<i class=\"fa-solid fa-spin fa-spinner\" aria-hidden=\"true\" aria-label=\"loading...\" />',\n            arrow: true,\n            onShow(instance) {\n                let id = e.dataset.id;\n                if (id && id in entityTooltips) {\n                    instance.setContent(entityTooltips[id]);\n                    return;\n                }\n                fetch(e.dataset.url)\n                    .then((response) => response.json())\n                    .then((json) => {\n                        instance.setContent(json[0]);\n                        entityTooltips[id] = json[0];\n                    })\n                    .catch((error) => {\n                        instance.setContent(`Failed loading tooltip. ${error}`);\n                    });\n            },\n        });\n    });\n};\n\nconst initTooltips = () => {\n    let elements = document.querySelectorAll('[data-toggle=\"tooltip\"]');\n    elements.forEach((e) => {\n        initTooltip(e);\n    });\n\n    elements = document.querySelectorAll(\"[data-tooltip]\");\n    elements.forEach((e) => {\n        initTooltip(e);\n    });\n};\n\nconst initTooltip = (e) => {\n    if (e._tippy) {\n        return;\n    }\n\n    tippy(e, {\n        content: e.dataset.title ?? e.title,\n        theme: \"kanka\",\n        delay: 250,\n        placement: e.dataset.direction ?? \"bottom\",\n        allowHTML: e.dataset.html ?? false,\n        appendTo: e.dataset.append\n            ? document.querySelector(e.dataset.append)\n            : document.body,\n        arrow: true,\n    });\n};\n\nconst initDropdowns = () => {\n    const elements = document.querySelectorAll(\"[data-dropdown]\");\n\n    elements.forEach((e) => {\n        if (e._tippy) {\n            return;\n        }\n        let dropdown = e.parentNode.querySelectorAll(\".dropdown-menu\")[0];\n        tippy(e, {\n            content:\n                '<div class=\"dd-menu flex flex-col max-w-2xl\">' +\n                dropdown.innerHTML +\n                \"</div>\",\n            theme: \"kanka-dropdown\",\n            placement: e.dataset.direction ?? \"bottom\",\n            appendTo: e.dataset.append\n                ? document.querySelector(e.dataset.append)\n                : document.body,\n            zIndex: 1060,\n            allowHTML: true,\n            arrow: true,\n            interactive: true,\n            trigger: \"click\",\n            onShown(instance) {\n                window.triggerEvent();\n            },\n        });\n    });\n};\n\nconst showTooltip = (el, options) => {\n    let tooltip = tippy(el, options);\n    tooltip.show();\n};\n\ninitTooltips();\ninitAjaxTooltips();\ninitDropdowns();\n\nwindow.initTooltips = initTooltips;\nwindow.ajaxTooltip = initAjaxTooltips;\nwindow.showTooltip = showTooltip;\nwindow.initDropdowns = initDropdowns;\n"
  },
  {
    "path": "resources/js/vendor-final.js",
    "content": "/*! For license information please see vendor.js.LICENSE.txt */\n(()=>{var t={669:(t,e,n)=>{t.exports=n(609)},448:(t,e,n)=>{\"use strict\";var r=n(867),i=n(26),o=n(372),s=n(327),a=n(97),u=n(109),l=n(985),c=n(61);t.exports=function(t){return new Promise((function(e,n){var f=t.data,p=t.headers,h=t.responseType;r.isFormData(f)&&delete p[\"Content-Type\"];var d=new XMLHttpRequest;if(t.auth){var g=t.auth.username||\"\",v=t.auth.password?unescape(encodeURIComponent(t.auth.password)):\"\";p.Authorization=\"Basic \"+btoa(g+\":\"+v)}var m=a(t.baseURL,t.url);function y(){if(d){var r=\"getAllResponseHeaders\"in d?u(d.getAllResponseHeaders()):null,o={data:h&&\"text\"!==h&&\"json\"!==h?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:r,config:t,request:d};i(e,n,o),d=null}}if(d.open(t.method.toUpperCase(),s(m,t.params,t.paramsSerializer),!0),d.timeout=t.timeout,\"onloadend\"in d?d.onloadend=y:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf(\"file:\"))&&setTimeout(y)},d.onabort=function(){d&&(n(c(\"Request aborted\",t,\"ECONNABORTED\",d)),d=null)},d.onerror=function(){n(c(\"Network Error\",t,null,d)),d=null},d.ontimeout=function(){var e=\"timeout of \"+t.timeout+\"ms exceeded\";t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(c(e,t,t.transitional&&t.transitional.clarifyTimeoutError?\"ETIMEDOUT\":\"ECONNABORTED\",d)),d=null},r.isStandardBrowserEnv()){var b=(t.withCredentials||l(m))&&t.xsrfCookieName?o.read(t.xsrfCookieName):void 0;b&&(p[t.xsrfHeaderName]=b)}\"setRequestHeader\"in d&&r.forEach(p,(function(t,e){void 0===f&&\"content-type\"===e.toLowerCase()?delete p[e]:d.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(d.withCredentials=!!t.withCredentials),h&&\"json\"!==h&&(d.responseType=t.responseType),\"function\"==typeof t.onDownloadProgress&&d.addEventListener(\"progress\",t.onDownloadProgress),\"function\"==typeof t.onUploadProgress&&d.upload&&d.upload.addEventListener(\"progress\",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){d&&(d.abort(),n(t),d=null)})),f||(f=null),d.send(f)}))}},609:(t,e,n)=>{\"use strict\";var r=n(867),i=n(849),o=n(321),s=n(185);function a(t){var e=new o(t),n=i(o.prototype.request,e);return r.extend(n,o.prototype,e),r.extend(n,e),n}var u=a(n(655));u.Axios=o,u.create=function(t){return a(s(u.defaults,t))},u.Cancel=n(263),u.CancelToken=n(972),u.isCancel=n(502),u.all=function(t){return Promise.all(t)},u.spread=n(713),u.isAxiosError=n(268),t.exports=u,t.exports.default=u},263:t=>{\"use strict\";function e(t){this.message=t}e.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},e.prototype.__CANCEL__=!0,t.exports=e},972:(t,e,n)=>{\"use strict\";var r=n(263);function i(t){if(\"function\"!=typeof t)throw new TypeError(\"executor must be a function.\");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var t;return{token:new i((function(e){t=e})),cancel:t}},t.exports=i},502:t=>{\"use strict\";t.exports=function(t){return!(!t||!t.__CANCEL__)}},321:(t,e,n)=>{\"use strict\";var r=n(867),i=n(327),o=n(782),s=n(572),a=n(185),u=n(875),l=u.validators;function c(t){this.defaults=t,this.interceptors={request:new o,response:new o}}c.prototype.request=function(t){\"string\"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method=\"get\";var e=t.transitional;void 0!==e&&u.assertOptions(e,{silentJSONParsing:l.transitional(l.boolean,\"1.0.0\"),forcedJSONParsing:l.transitional(l.boolean,\"1.0.0\"),clarifyTimeoutError:l.transitional(l.boolean,\"1.0.0\")},!1);var n=[],r=!0;this.interceptors.request.forEach((function(e){\"function\"==typeof e.runWhen&&!1===e.runWhen(t)||(r=r&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var i,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!r){var c=[s,void 0];for(Array.prototype.unshift.apply(c,n),c=c.concat(o),i=Promise.resolve(t);c.length;)i=i.then(c.shift(),c.shift());return i}for(var f=t;n.length;){var p=n.shift(),h=n.shift();try{f=p(f)}catch(t){h(t);break}}try{i=s(f)}catch(t){return Promise.reject(t)}for(;o.length;)i=i.then(o.shift(),o.shift());return i},c.prototype.getUri=function(t){return t=a(this.defaults,t),i(t.url,t.params,t.paramsSerializer).replace(/^\\?/,\"\")},r.forEach([\"delete\",\"get\",\"head\",\"options\"],(function(t){c.prototype[t]=function(e,n){return this.request(a(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach([\"post\",\"put\",\"patch\"],(function(t){c.prototype[t]=function(e,n,r){return this.request(a(r||{},{method:t,url:e,data:n}))}})),t.exports=c},782:(t,e,n)=>{\"use strict\";var r=n(867);function i(){this.handlers=[]}i.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},i.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},i.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=i},97:(t,e,n)=>{\"use strict\";var r=n(793),i=n(303);t.exports=function(t,e){return t&&!r(e)?i(t,e):e}},61:(t,e,n)=>{\"use strict\";var r=n(481);t.exports=function(t,e,n,i,o){var s=new Error(t);return r(s,e,n,i,o)}},572:(t,e,n)=>{\"use strict\";var r=n(867),i=n(527),o=n(502),s=n(655);function a(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return a(t),t.headers=t.headers||{},t.data=i.call(t,t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],(function(e){delete t.headers[e]})),(t.adapter||s.adapter)(t).then((function(e){return a(t),e.data=i.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return o(e)||(a(t),e&&e.response&&(e.response.data=i.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},481:t=>{\"use strict\";t.exports=function(t,e,n,r,i){return t.config=e,n&&(t.code=n),t.request=r,t.response=i,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t}},185:(t,e,n)=>{\"use strict\";var r=n(867);t.exports=function(t,e){e=e||{};var n={},i=[\"url\",\"method\",\"data\"],o=[\"headers\",\"auth\",\"proxy\",\"params\"],s=[\"baseURL\",\"transformRequest\",\"transformResponse\",\"paramsSerializer\",\"timeout\",\"timeoutMessage\",\"withCredentials\",\"adapter\",\"responseType\",\"xsrfCookieName\",\"xsrfHeaderName\",\"onUploadProgress\",\"onDownloadProgress\",\"decompress\",\"maxContentLength\",\"maxBodyLength\",\"maxRedirects\",\"transport\",\"httpAgent\",\"httpsAgent\",\"cancelToken\",\"socketPath\",\"responseEncoding\"],a=[\"validateStatus\"];function u(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function l(i){r.isUndefined(e[i])?r.isUndefined(t[i])||(n[i]=u(void 0,t[i])):n[i]=u(t[i],e[i])}r.forEach(i,(function(t){r.isUndefined(e[t])||(n[t]=u(void 0,e[t]))})),r.forEach(o,l),r.forEach(s,(function(i){r.isUndefined(e[i])?r.isUndefined(t[i])||(n[i]=u(void 0,t[i])):n[i]=u(void 0,e[i])})),r.forEach(a,(function(r){r in e?n[r]=u(t[r],e[r]):r in t&&(n[r]=u(void 0,t[r]))}));var c=i.concat(o).concat(s).concat(a),f=Object.keys(t).concat(Object.keys(e)).filter((function(t){return-1===c.indexOf(t)}));return r.forEach(f,l),n}},26:(t,e,n)=>{\"use strict\";var r=n(61);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r(\"Request failed with status code \"+n.status,n.config,null,n.request,n)):t(n)}},527:(t,e,n)=>{\"use strict\";var r=n(867),i=n(655);t.exports=function(t,e,n){var o=this||i;return r.forEach(n,(function(n){t=n.call(o,t,e)})),t}},655:(t,e,n)=>{\"use strict\";var r=n(155),i=n(867),o=n(16),s=n(481),a={\"Content-Type\":\"application/x-www-form-urlencoded\"};function u(t,e){!i.isUndefined(t)&&i.isUndefined(t[\"Content-Type\"])&&(t[\"Content-Type\"]=e)}var l,c={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:((\"undefined\"!=typeof XMLHttpRequest||void 0!==r&&\"[object process]\"===Object.prototype.toString.call(r))&&(l=n(448)),l),transformRequest:[function(t,e){return o(e,\"Accept\"),o(e,\"Content-Type\"),i.isFormData(t)||i.isArrayBuffer(t)||i.isBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(u(e,\"application/x-www-form-urlencoded;charset=utf-8\"),t.toString()):i.isObject(t)||e&&\"application/json\"===e[\"Content-Type\"]?(u(e,\"application/json\"),function(t,e,n){if(i.isString(t))try{return(e||JSON.parse)(t),i.trim(t)}catch(t){if(\"SyntaxError\"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional,n=e&&e.silentJSONParsing,r=e&&e.forcedJSONParsing,o=!n&&\"json\"===this.responseType;if(o||r&&i.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(o){if(\"SyntaxError\"===t.name)throw s(t,this,\"E_JSON_PARSE\");throw t}}return t}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300}};c.headers={common:{Accept:\"application/json, text/plain, */*\"}},i.forEach([\"delete\",\"get\",\"head\"],(function(t){c.headers[t]={}})),i.forEach([\"post\",\"put\",\"patch\"],(function(t){c.headers[t]=i.merge(a)})),t.exports=c},849:t=>{\"use strict\";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},327:(t,e,n)=>{\"use strict\";var r=n(867);function i(t){return encodeURIComponent(t).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(r.isURLSearchParams(e))o=e.toString();else{var s=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)?e+=\"[]\":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),s.push(i(e)+\"=\"+i(t))})))})),o=s.join(\"&\")}if(o){var a=t.indexOf(\"#\");-1!==a&&(t=t.slice(0,a)),t+=(-1===t.indexOf(\"?\")?\"?\":\"&\")+o}return t}},303:t=>{\"use strict\";t.exports=function(t,e){return e?t.replace(/\\/+$/,\"\")+\"/\"+e.replace(/^\\/+/,\"\"):t}},372:(t,e,n)=>{\"use strict\";var r=n(867);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,i,o,s){var a=[];a.push(t+\"=\"+encodeURIComponent(e)),r.isNumber(n)&&a.push(\"expires=\"+new Date(n).toGMTString()),r.isString(i)&&a.push(\"path=\"+i),r.isString(o)&&a.push(\"domain=\"+o),!0===s&&a.push(\"secure\"),document.cookie=a.join(\"; \")},read:function(t){var e=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+t+\")=([^;]*)\"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},793:t=>{\"use strict\";t.exports=function(t){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(t)}},268:t=>{\"use strict\";t.exports=function(t){return\"object\"==typeof t&&!0===t.isAxiosError}},985:(t,e,n)=>{\"use strict\";var r=n(867);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function i(t){var r=t;return e&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return t=i(window.location.href),function(e){var n=r.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},16:(t,e,n)=>{\"use strict\";var r=n(867);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},109:(t,e,n)=>{\"use strict\";var r=n(867),i=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];t.exports=function(t){var e,n,o,s={};return t?(r.forEach(t.split(\"\\n\"),(function(t){if(o=t.indexOf(\":\"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e){if(s[e]&&i.indexOf(e)>=0)return;s[e]=\"set-cookie\"===e?(s[e]?s[e]:[]).concat([n]):s[e]?s[e]+\", \"+n:n}})),s):s}},713:t=>{\"use strict\";t.exports=function(t){return function(e){return t.apply(null,e)}}},875:(t,e,n)=>{\"use strict\";var r=n(593),i={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach((function(t,e){i[t]=function(n){return typeof n===t||\"a\"+(e<1?\"n \":\" \")+t}}));var o={},s=r.version.split(\".\");function a(t,e){for(var n=e?e.split(\".\"):s,r=t.split(\".\"),i=0;i<3;i++){if(n[i]>r[i])return!0;if(n[i]<r[i])return!1}return!1}i.transitional=function(t,e,n){var i=e&&a(e);function s(t,e){return\"[Axios v\"+r.version+\"] Transitional option '\"+t+\"'\"+e+(n?\". \"+n:\"\")}return function(n,r,a){if(!1===t)throw new Error(s(r,\" has been removed in \"+e));return i&&!o[r]&&(o[r]=!0,console.warn(s(r,\" has been deprecated since v\"+e+\" and will be removed in the near future\"))),!t||t(n,r,a)}},t.exports={isOlderVersion:a,assertOptions:function(t,e,n){if(\"object\"!=typeof t)throw new TypeError(\"options must be an object\");for(var r=Object.keys(t),i=r.length;i-- >0;){var o=r[i],s=e[o];if(s){var a=t[o],u=void 0===a||s(a,o,t);if(!0!==u)throw new TypeError(\"option \"+o+\" must be \"+u)}else if(!0!==n)throw Error(\"Unknown option \"+o)}},validators:i}},867:(t,e,n)=>{\"use strict\";var r=n(849),i=Object.prototype.toString;function o(t){return\"[object Array]\"===i.call(t)}function s(t){return void 0===t}function a(t){return null!==t&&\"object\"==typeof t}function u(t){if(\"[object Object]\"!==i.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function l(t){return\"[object Function]\"===i.call(t)}function c(t,e){if(null!=t)if(\"object\"!=typeof t&&(t=[t]),o(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}t.exports={isArray:o,isArrayBuffer:function(t){return\"[object ArrayBuffer]\"===i.call(t)},isBuffer:function(t){return null!==t&&!s(t)&&null!==t.constructor&&!s(t.constructor)&&\"function\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return\"undefined\"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return\"string\"==typeof t},isNumber:function(t){return\"number\"==typeof t},isObject:a,isPlainObject:u,isUndefined:s,isDate:function(t){return\"[object Date]\"===i.call(t)},isFile:function(t){return\"[object File]\"===i.call(t)},isBlob:function(t){return\"[object Blob]\"===i.call(t)},isFunction:l,isStream:function(t){return a(t)&&l(t.pipe)},isURLSearchParams:function(t){return\"undefined\"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return(\"undefined\"==typeof navigator||\"ReactNative\"!==navigator.product&&\"NativeScript\"!==navigator.product&&\"NS\"!==navigator.product)&&(\"undefined\"!=typeof window&&\"undefined\"!=typeof document)},forEach:c,merge:function t(){var e={};function n(n,r){u(e[r])&&u(n)?e[r]=t(e[r],n):u(n)?e[r]=t({},n):o(n)?e[r]=n.slice():e[r]=n}for(var r=0,i=arguments.length;r<i;r++)c(arguments[r],n);return e},extend:function(t,e,n){return c(e,(function(e,i){t[i]=n&&\"function\"==typeof e?r(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\\s+|\\s+$/g,\"\")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}}},2:()=>{if(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");!function(t){\"use strict\";var e=jQuery.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(),function(t){\"use strict\";t.fn.emulateTransitionEnd=function(e){var n=!1,r=this;t(this).one(\"bsTransitionEnd\",(function(){n=!0}));return setTimeout((function(){n||t(r).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement(\"bootstrap\"),e={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}(jQuery),function(t){\"use strict\";var e='[data-dismiss=\"alert\"]',n=function(n){t(n).on(\"click\",e,this.close)};n.VERSION=\"3.4.1\",n.TRANSITION_DURATION=150,n.prototype.close=function(e){var r=t(this),i=r.attr(\"data-target\");i||(i=(i=r.attr(\"href\"))&&i.replace(/.*(?=#[^\\s]*$)/,\"\")),i=\"#\"===i?[]:i;var o=t(document).find(i);function s(){o.detach().trigger(\"closed.bs.alert\").remove()}e&&e.preventDefault(),o.length||(o=r.closest(\".alert\")),o.trigger(e=t.Event(\"close.bs.alert\")),e.isDefaultPrevented()||(o.removeClass(\"in\"),t.support.transition&&o.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",s).emulateTransitionEnd(n.TRANSITION_DURATION):s())};var r=t.fn.alert;t.fn.alert=function(e){return this.each((function(){var r=t(this),i=r.data(\"bs.alert\");i||r.data(\"bs.alert\",i=new n(this)),\"string\"==typeof e&&i[e].call(r)}))},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=r,this},t(document).on(\"click.bs.alert.data-api\",e,n.prototype.close)}(jQuery),function(t){\"use strict\";var e=function(n,r){this.$element=t(n),this.options=t.extend({},e.DEFAULTS,r),this.isLoading=!1};function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.button\"),o=\"object\"==typeof n&&n;i||r.data(\"bs.button\",i=new e(this,o)),\"toggle\"==n?i.toggle():n&&i.setState(n)}))}e.VERSION=\"3.4.1\",e.DEFAULTS={loadingText:\"loading...\"},e.prototype.setState=function(e){var n=\"disabled\",r=this.$element,i=r.is(\"input\")?\"val\":\"html\",o=r.data();e+=\"Text\",null==o.resetText&&r.data(\"resetText\",r[i]()),setTimeout(t.proxy((function(){r[i](null==o[e]?this.options[e]:o[e]),\"loadingText\"==e?(this.isLoading=!0,r.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,r.removeClass(n).removeAttr(n).prop(n,!1))}),this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle=\"buttons\"]');if(e.length){var n=this.$element.find(\"input\");\"radio\"==n.prop(\"type\")?(n.prop(\"checked\")&&(t=!1),e.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==n.prop(\"type\")&&(n.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(t=!1),this.$element.toggleClass(\"active\")),n.prop(\"checked\",this.$element.hasClass(\"active\")),t&&n.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var r=t.fn.button;t.fn.button=n,t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=r,this},t(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',(function(e){var r=t(e.target).closest(\".btn\");n.call(r,\"toggle\"),t(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(e.preventDefault(),r.is(\"input,button\")?r.trigger(\"focus\"):r.find(\"input:visible,button:visible\").first().trigger(\"focus\"))})).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',(function(e){t(e.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(e.type))}))}(jQuery),function(t){\"use strict\";var e=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",t.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",t.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",t.proxy(this.cycle,this))};function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.carousel\"),o=t.extend({},e.DEFAULTS,r.data(),\"object\"==typeof n&&n),s=\"string\"==typeof n?n:o.slide;i||r.data(\"bs.carousel\",i=new e(this,o)),\"number\"==typeof n?i.to(n):s?i[s]():o.interval&&i.pause().cycle()}))}e.VERSION=\"3.4.1\",e.TRANSITION_DURATION=600,e.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},e.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getItemIndex=function(t){return this.$items=t.parent().children(\".item\"),this.$items.index(t||this.$active)},e.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e);if((\"prev\"==t&&0===n||\"next\"==t&&n==this.$items.length-1)&&!this.options.wrap)return e;var r=(n+(\"prev\"==t?-1:1))%this.$items.length;return this.$items.eq(r)},e.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",(function(){e.to(t)})):n==t?this.pause().cycle():this.slide(t>n?\"next\":\"prev\",this.$items.eq(t))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(\".next, .prev\").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},e.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},e.prototype.slide=function(n,r){var i=this.$element.find(\".item.active\"),o=r||this.getItemForDirection(n,i),s=this.interval,a=\"next\"==n?\"left\":\"right\",u=this;if(o.hasClass(\"active\"))return this.sliding=!1;var l=o[0],c=t.Event(\"slide.bs.carousel\",{relatedTarget:l,direction:a});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var f=t(this.$indicators.children()[this.getItemIndex(o)]);f&&f.addClass(\"active\")}var p=t.Event(\"slid.bs.carousel\",{relatedTarget:l,direction:a});return t.support.transition&&this.$element.hasClass(\"slide\")?(o.addClass(n),\"object\"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(a),o.addClass(a),i.one(\"bsTransitionEnd\",(function(){o.removeClass([n,a].join(\" \")).addClass(\"active\"),i.removeClass([\"active\",a].join(\" \")),u.sliding=!1,setTimeout((function(){u.$element.trigger(p)}),0)})).emulateTransitionEnd(e.TRANSITION_DURATION)):(i.removeClass(\"active\"),o.addClass(\"active\"),this.sliding=!1,this.$element.trigger(p)),s&&this.cycle(),this}};var r=t.fn.carousel;t.fn.carousel=n,t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=r,this};var i=function(e){var r=t(this),i=r.attr(\"href\");i&&(i=i.replace(/.*(?=#[^\\s]+$)/,\"\"));var o=r.attr(\"data-target\")||i,s=t(document).find(o);if(s.hasClass(\"carousel\")){var a=t.extend({},s.data(),r.data()),u=r.attr(\"data-slide-to\");u&&(a.interval=!1),n.call(s,a),u&&s.data(\"bs.carousel\").to(u),e.preventDefault()}};t(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",i).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",i),t(window).on(\"load\",(function(){t('[data-ride=\"carousel\"]').each((function(){var e=t(this);n.call(e,e.data())}))}))}(jQuery),function(t){\"use strict\";var e=function(n,r){this.$element=t(n),this.options=t.extend({},e.DEFAULTS,r),this.$trigger=t('[data-toggle=\"collapse\"][href=\"#'+n.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+n.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(e){var n,r=e.attr(\"data-target\")||(n=e.attr(\"href\"))&&n.replace(/.*(?=#[^\\s]+$)/,\"\");return t(document).find(r)}function r(n){return this.each((function(){var r=t(this),i=r.data(\"bs.collapse\"),o=t.extend({},e.DEFAULTS,r.data(),\"object\"==typeof n&&n);!i&&o.toggle&&/show|hide/.test(n)&&(o.toggle=!1),i||r.data(\"bs.collapse\",i=new e(this,o)),\"string\"==typeof n&&i[n]()}))}e.VERSION=\"3.4.1\",e.TRANSITION_DURATION=350,e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){return this.$element.hasClass(\"width\")?\"width\":\"height\"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var n,i=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(i&&i.length&&(n=i.data(\"bs.collapse\"))&&n.transitioning)){var o=t.Event(\"show.bs.collapse\");if(this.$element.trigger(o),!o.isDefaultPrevented()){i&&i.length&&(r.call(i,\"hide\"),n||i.data(\"bs.collapse\",null));var s=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[s](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var a=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[s](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!t.support.transition)return a.call(this);var u=t.camelCase([\"scroll\",s].join(\"-\"));this.$element.one(\"bsTransitionEnd\",t.proxy(a,this)).emulateTransitionEnd(e.TRANSITION_DURATION)[s](this.$element[0][u])}}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var n=t.Event(\"hide.bs.collapse\");if(this.$element.trigger(n),!n.isDefaultPrevented()){var r=this.dimension();this.$element[r](this.$element[r]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};if(!t.support.transition)return i.call(this);this.$element[r](0).one(\"bsTransitionEnd\",t.proxy(i,this)).emulateTransitionEnd(e.TRANSITION_DURATION)}}},e.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},e.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(t.proxy((function(e,r){var i=t(r);this.addAriaAndCollapsedClass(n(i),i)}),this)).end()},e.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass(\"in\");t.attr(\"aria-expanded\",n),e.toggleClass(\"collapsed\",!n).attr(\"aria-expanded\",n)};var i=t.fn.collapse;t.fn.collapse=r,t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',(function(e){var i=t(this);i.attr(\"data-target\")||e.preventDefault();var o=n(i),s=o.data(\"bs.collapse\")?\"toggle\":i.data();r.call(o,s)}))}(jQuery),function(t){\"use strict\";var e=\".dropdown-backdrop\",n='[data-toggle=\"dropdown\"]',r=function(e){t(e).on(\"click.bs.dropdown\",this.toggle)};function i(e){var n=e.attr(\"data-target\");n||(n=(n=e.attr(\"href\"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\\s]*$)/,\"\"));var r=\"#\"!==n?t(document).find(n):null;return r&&r.length?r:e.parent()}function o(r){r&&3===r.which||(t(e).remove(),t(n).each((function(){var e=t(this),n=i(e),o={relatedTarget:this};n.hasClass(\"open\")&&(r&&\"click\"==r.type&&/input|textarea/i.test(r.target.tagName)&&t.contains(n[0],r.target)||(n.trigger(r=t.Event(\"hide.bs.dropdown\",o)),r.isDefaultPrevented()||(e.attr(\"aria-expanded\",\"false\"),n.removeClass(\"open\").trigger(t.Event(\"hidden.bs.dropdown\",o)))))})))}r.VERSION=\"3.4.1\",r.prototype.toggle=function(e){var n=t(this);if(!n.is(\".disabled, :disabled\")){var r=i(n),s=r.hasClass(\"open\");if(o(),!s){\"ontouchstart\"in document.documentElement&&!r.closest(\".navbar-nav\").length&&t(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(t(this)).on(\"click\",o);var a={relatedTarget:this};if(r.trigger(e=t.Event(\"show.bs.dropdown\",a)),e.isDefaultPrevented())return;n.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),r.toggleClass(\"open\").trigger(t.Event(\"shown.bs.dropdown\",a))}return!1}},r.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var r=t(this);if(e.preventDefault(),e.stopPropagation(),!r.is(\".disabled, :disabled\")){var o=i(r),s=o.hasClass(\"open\");if(!s&&27!=e.which||s&&27==e.which)return 27==e.which&&o.find(n).trigger(\"focus\"),r.trigger(\"click\");var a=o.find(\".dropdown-menu li:not(.disabled):visible a\");if(a.length){var u=a.index(e.target);38==e.which&&u>0&&u--,40==e.which&&u<a.length-1&&u++,~u||(u=0),a.eq(u).trigger(\"focus\")}}}};var s=t.fn.dropdown;t.fn.dropdown=function(e){return this.each((function(){var n=t(this),i=n.data(\"bs.dropdown\");i||n.data(\"bs.dropdown\",i=new r(this)),\"string\"==typeof e&&i[e].call(n)}))},t.fn.dropdown.Constructor=r,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=s,this},t(document).on(\"click.bs.dropdown.data-api\",o).on(\"click.bs.dropdown.data-api\",\".dropdown form\",(function(t){t.stopPropagation()})).on(\"click.bs.dropdown.data-api\",n,r.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",n,r.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",r.prototype.keydown)}(jQuery),function(t){\"use strict\";var e=function(e,n){this.options=n,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=\".navbar-fixed-top, .navbar-fixed-bottom\",this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,t.proxy((function(){this.$element.trigger(\"loaded.bs.modal\")}),this))};function n(n,r){return this.each((function(){var i=t(this),o=i.data(\"bs.modal\"),s=t.extend({},e.DEFAULTS,i.data(),\"object\"==typeof n&&n);o||i.data(\"bs.modal\",o=new e(this,s)),\"string\"==typeof n?o[n](r):s.show&&o.show(r)}))}e.VERSION=\"3.4.1\",e.TRANSITION_DURATION=300,e.BACKDROP_TRANSITION_DURATION=150,e.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},e.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},e.prototype.show=function(n){var r=this,i=t.Event(\"show.bs.modal\",{relatedTarget:n});this.$element.trigger(i),this.isShown||i.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',t.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",(function(){r.$element.one(\"mouseup.dismiss.bs.modal\",(function(e){t(e.target).is(r.$element)&&(r.ignoreBackdropClick=!0)}))})),this.backdrop((function(){var i=t.support.transition&&r.$element.hasClass(\"fade\");r.$element.parent().length||r.$element.appendTo(r.$body),r.$element.show().scrollTop(0),r.adjustDialog(),i&&r.$element[0].offsetWidth,r.$element.addClass(\"in\"),r.enforceFocus();var o=t.Event(\"shown.bs.modal\",{relatedTarget:n});i?r.$dialog.one(\"bsTransitionEnd\",(function(){r.$element.trigger(\"focus\").trigger(o)})).emulateTransitionEnd(e.TRANSITION_DURATION):r.$element.trigger(\"focus\").trigger(o)})))},e.prototype.hide=function(n){n&&n.preventDefault(),n=t.Event(\"hide.bs.modal\"),this.$element.trigger(n),this.isShown&&!n.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),t.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",t.proxy(this.hideModal,this)).emulateTransitionEnd(e.TRANSITION_DURATION):this.hideModal())},e.prototype.enforceFocus=function(){t(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",t.proxy((function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger(\"focus\")}),this))},e.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",t.proxy((function(t){27==t.which&&this.hide()}),this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},e.prototype.resize=function(){this.isShown?t(window).on(\"resize.bs.modal\",t.proxy(this.handleUpdate,this)):t(window).off(\"resize.bs.modal\")},e.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop((function(){t.$body.removeClass(\"modal-open\"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger(\"hidden.bs.modal\")}))},e.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},e.prototype.backdrop=function(n){var r=this,i=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&i;if(this.$backdrop=t(document.createElement(\"div\")).addClass(\"modal-backdrop \"+i).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",t.proxy((function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide())}),this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!n)return;o?this.$backdrop.one(\"bsTransitionEnd\",n).emulateTransitionEnd(e.BACKDROP_TRANSITION_DURATION):n()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var s=function(){r.removeBackdrop(),n&&n()};t.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",s).emulateTransitionEnd(e.BACKDROP_TRANSITION_DURATION):s()}else n&&n()},e.prototype.handleUpdate=function(){this.adjustDialog()},e.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:\"\"})},e.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},e.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},e.prototype.setScrollbar=function(){var e=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css(\"padding-right\",e+n),t(this.fixedContent).each((function(e,r){var i=r.style.paddingRight,o=t(r).css(\"padding-right\");t(r).data(\"padding-right\",i).css(\"padding-right\",parseFloat(o)+n+\"px\")})))},e.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad),t(this.fixedContent).each((function(e,n){var r=t(n).data(\"padding-right\");t(n).removeData(\"padding-right\"),n.style.paddingRight=r||\"\"}))},e.prototype.measureScrollbar=function(){var t=document.createElement(\"div\");t.className=\"modal-scrollbar-measure\",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var r=t.fn.modal;t.fn.modal=n,t.fn.modal.Constructor=e,t.fn.modal.noConflict=function(){return t.fn.modal=r,this},t(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',(function(e){var r=t(this),i=r.attr(\"href\"),o=r.attr(\"data-target\")||i&&i.replace(/.*(?=#[^\\s]+$)/,\"\"),s=t(document).find(o),a=s.data(\"bs.modal\")?\"toggle\":t.extend({remote:!/#/.test(i)&&i},s.data(),r.data());r.is(\"a\")&&e.preventDefault(),s.one(\"show.bs.modal\",(function(t){t.isDefaultPrevented()||s.one(\"hidden.bs.modal\",(function(){r.is(\":visible\")&&r.trigger(\"focus\")}))})),n.call(s,a,this)}))}(jQuery),function(t){\"use strict\";var e=[\"sanitize\",\"whiteList\",\"sanitizeFn\"],n=[\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"],r={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},i=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,o=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function s(e,r){var s=e.nodeName.toLowerCase();if(-1!==t.inArray(s,r))return-1===t.inArray(s,n)||Boolean(e.nodeValue.match(i)||e.nodeValue.match(o));for(var a=t(r).filter((function(t,e){return e instanceof RegExp})),u=0,l=a.length;u<l;u++)if(s.match(a[u]))return!0;return!1}function a(e,n,r){if(0===e.length)return e;if(r&&\"function\"==typeof r)return r(e);if(!document.implementation||!document.implementation.createHTMLDocument)return e;var i=document.implementation.createHTMLDocument(\"sanitization\");i.body.innerHTML=e;for(var o=t.map(n,(function(t,e){return e})),a=t(i.body).find(\"*\"),u=0,l=a.length;u<l;u++){var c=a[u],f=c.nodeName.toLowerCase();if(-1!==t.inArray(f,o))for(var p=t.map(c.attributes,(function(t){return t})),h=[].concat(n[\"*\"]||[],n[f]||[]),d=0,g=p.length;d<g;d++)s(p[d],h)||c.removeAttribute(p[d].nodeName);else c.parentNode.removeChild(c)}return i.body.innerHTML}var u=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",t,e)};u.VERSION=\"3.4.1\",u.TRANSITION_DURATION=150,u.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0},sanitize:!0,sanitizeFn:null,whiteList:r},u.prototype.init=function(e,n,r){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var i=this.options.trigger.split(\" \"),o=i.length;o--;){var s=i[o];if(\"click\"==s)this.$element.on(\"click.\"+this.type,this.options.selector,t.proxy(this.toggle,this));else if(\"manual\"!=s){var a=\"hover\"==s?\"mouseenter\":\"focusin\",u=\"hover\"==s?\"mouseleave\":\"focusout\";this.$element.on(a+\".\"+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(u+\".\"+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},u.prototype.getDefaults=function(){return u.DEFAULTS},u.prototype.getOptions=function(n){var r=this.$element.data();for(var i in r)r.hasOwnProperty(i)&&-1!==t.inArray(i,e)&&delete r[i];return(n=t.extend({},this.getDefaults(),r,n)).delay&&\"number\"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=a(n.template,n.whiteList,n.sanitizeFn)),n},u.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,(function(t,r){n[t]!=r&&(e[t]=r)})),e},u.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n)),e instanceof t.Event&&(n.inState[\"focusin\"==e.type?\"focus\":\"hover\"]=!0),n.tip().hasClass(\"in\")||\"in\"==n.hoverState)n.hoverState=\"in\";else{if(clearTimeout(n.timeout),n.hoverState=\"in\",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){\"in\"==n.hoverState&&n.show()}),n.options.delay.show)}},u.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},u.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n)),e instanceof t.Event&&(n.inState[\"focusout\"==e.type?\"focus\":\"hover\"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState=\"out\",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){\"out\"==n.hoverState&&n.hide()}),n.options.delay.hide)}},u.prototype.show=function(){var e=t.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!n)return;var r=this,i=this.tip(),o=this.getUID(this.type);this.setContent(),i.attr(\"id\",o),this.$element.attr(\"aria-describedby\",o),this.options.animation&&i.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,i[0],this.$element[0]):this.options.placement,a=/\\s?auto?\\s?/i,l=a.test(s);l&&(s=s.replace(a,\"\")||\"top\"),i.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?i.appendTo(t(document).find(this.options.container)):i.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var c=this.getPosition(),f=i[0].offsetWidth,p=i[0].offsetHeight;if(l){var h=s,d=this.getPosition(this.$viewport);s=\"bottom\"==s&&c.bottom+p>d.bottom?\"top\":\"top\"==s&&c.top-p<d.top?\"bottom\":\"right\"==s&&c.right+f>d.width?\"left\":\"left\"==s&&c.left-f<d.left?\"right\":s,i.removeClass(h).addClass(s)}var g=this.getCalculatedOffset(s,c,f,p);this.applyPlacement(g,s);var v=function(){var t=r.hoverState;r.$element.trigger(\"shown.bs.\"+r.type),r.hoverState=null,\"out\"==t&&r.leave(r)};t.support.transition&&this.$tip.hasClass(\"fade\")?i.one(\"bsTransitionEnd\",v).emulateTransitionEnd(u.TRANSITION_DURATION):v()}},u.prototype.applyPlacement=function(e,n){var r=this.tip(),i=r[0].offsetWidth,o=r[0].offsetHeight,s=parseInt(r.css(\"margin-top\"),10),a=parseInt(r.css(\"margin-left\"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),e.top+=s,e.left+=a,t.offset.setOffset(r[0],t.extend({using:function(t){r.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),r.addClass(\"in\");var u=r[0].offsetWidth,l=r[0].offsetHeight;\"top\"==n&&l!=o&&(e.top=e.top+o-l);var c=this.getViewportAdjustedDelta(n,e,u,l);c.left?e.left+=c.left:e.top+=c.top;var f=/top|bottom/.test(n),p=f?2*c.left-i+u:2*c.top-o+l,h=f?\"offsetWidth\":\"offsetHeight\";r.offset(e),this.replaceArrow(p,r[0][h],f)},u.prototype.replaceArrow=function(t,e,n){this.arrow().css(n?\"left\":\"top\",50*(1-t/e)+\"%\").css(n?\"top\":\"left\",\"\")},u.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=a(e,this.options.whiteList,this.options.sanitizeFn)),t.find(\".tooltip-inner\").html(e)):t.find(\".tooltip-inner\").text(e),t.removeClass(\"fade in top bottom left right\")},u.prototype.hide=function(e){var n=this,r=t(this.$tip),i=t.Event(\"hide.bs.\"+this.type);function o(){\"in\"!=n.hoverState&&r.detach(),n.$element&&n.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+n.type),e&&e()}if(this.$element.trigger(i),!i.isDefaultPrevented())return r.removeClass(\"in\"),t.support.transition&&r.hasClass(\"fade\")?r.one(\"bsTransitionEnd\",o).emulateTransitionEnd(u.TRANSITION_DURATION):o(),this.hoverState=null,this},u.prototype.fixTitle=function(){var t=this.$element;(t.attr(\"title\")||\"string\"!=typeof t.attr(\"data-original-title\"))&&t.attr(\"data-original-title\",t.attr(\"title\")||\"\").attr(\"title\",\"\")},u.prototype.hasContent=function(){return this.getTitle()},u.prototype.getPosition=function(e){var n=(e=e||this.$element)[0],r=\"BODY\"==n.tagName,i=n.getBoundingClientRect();null==i.width&&(i=t.extend({},i,{width:i.right-i.left,height:i.bottom-i.top}));var o=window.SVGElement&&n instanceof window.SVGElement,s=r?{top:0,left:0}:o?null:e.offset(),a={scroll:r?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},u=r?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},i,a,u,s)},u.prototype.getCalculatedOffset=function(t,e,n,r){return\"bottom\"==t?{top:e.top+e.height,left:e.left+e.width/2-n/2}:\"top\"==t?{top:e.top-r,left:e.left+e.width/2-n/2}:\"left\"==t?{top:e.top+e.height/2-r/2,left:e.left-n}:{top:e.top+e.height/2-r/2,left:e.left+e.width}},u.prototype.getViewportAdjustedDelta=function(t,e,n,r){var i={top:0,left:0};if(!this.$viewport)return i;var o=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-o-s.scroll,u=e.top+o-s.scroll+r;a<s.top?i.top=s.top-a:u>s.top+s.height&&(i.top=s.top+s.height-u)}else{var l=e.left-o,c=e.left+o+n;l<s.left?i.left=s.left-l:c>s.right&&(i.left=s.left+s.width-c)}return i},u.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr(\"data-original-title\")||(\"function\"==typeof e.title?e.title.call(t[0]):e.title)},u.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},u.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},u.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},u.prototype.enable=function(){this.enabled=!0},u.prototype.disable=function(){this.enabled=!1},u.prototype.toggleEnabled=function(){this.enabled=!this.enabled},u.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data(\"bs.\"+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass(\"in\")?n.leave(n):n.enter(n)},u.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide((function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null}))},u.prototype.sanitizeHtml=function(t){return a(t,this.options.whiteList,this.options.sanitizeFn)};var l=t.fn.tooltip;t.fn.tooltip=function(e){return this.each((function(){var n=t(this),r=n.data(\"bs.tooltip\"),i=\"object\"==typeof e&&e;!r&&/destroy|hide/.test(e)||(r||n.data(\"bs.tooltip\",r=new u(this,i)),\"string\"==typeof e&&r[e]())}))},t.fn.tooltip.Constructor=u,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=l,this}}(jQuery),function(t){\"use strict\";var e=function(t,e){this.init(\"popover\",t,e)};if(!t.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");e.VERSION=\"3.4.1\",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();if(this.options.html){var r=typeof n;this.options.sanitize&&(e=this.sanitizeHtml(e),\"string\"===r&&(n=this.sanitizeHtml(n))),t.find(\".popover-title\").html(e),t.find(\".popover-content\").children().detach().end()[\"string\"===r?\"html\":\"append\"](n)}else t.find(\".popover-title\").text(e),t.find(\".popover-content\").children().detach().end().text(n);t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr(\"data-content\")||(\"function\"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var n=t.fn.popover;t.fn.popover=function(n){return this.each((function(){var r=t(this),i=r.data(\"bs.popover\"),o=\"object\"==typeof n&&n;!i&&/destroy|hide/.test(n)||(i||r.data(\"bs.popover\",i=new e(this,o)),\"string\"==typeof n&&i[n]())}))},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=n,this}}(jQuery),function(t){\"use strict\";function e(n,r){this.$body=t(document.body),this.$scrollElement=t(n).is(document.body)?t(window):t(n),this.options=t.extend({},e.DEFAULTS,r),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.scrollspy\"),o=\"object\"==typeof n&&n;i||r.data(\"bs.scrollspy\",i=new e(this,o)),\"string\"==typeof n&&i[n]()}))}e.VERSION=\"3.4.1\",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n=\"offset\",r=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n=\"position\",r=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map((function(){var e=t(this),i=e.data(\"target\")||e.attr(\"href\"),o=/^#./.test(i)&&t(i);return o&&o.length&&o.is(\":visible\")&&[[o[n]().top+r,i]]||null})).sort((function(t,e){return t[0]-e[0]})).each((function(){e.offsets.push(this[0]),e.targets.push(this[1])}))},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),r=this.options.offset+n-this.$scrollElement.height(),i=this.offsets,o=this.targets,s=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=r)return s!=(t=o[o.length-1])&&this.activate(t);if(s&&e<i[0])return this.activeTarget=null,this.clear();for(t=i.length;t--;)s!=o[t]&&e>=i[t]&&(void 0===i[t+1]||e<i[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var n=this.selector+'[data-target=\"'+e+'\"],'+this.selector+'[href=\"'+e+'\"]',r=t(n).parents(\"li\").addClass(\"active\");r.parent(\".dropdown-menu\").length&&(r=r.closest(\"li.dropdown\").addClass(\"active\")),r.trigger(\"activate.bs.scrollspy\")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var r=t.fn.scrollspy;t.fn.scrollspy=n,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=r,this},t(window).on(\"load.bs.scrollspy.data-api\",(function(){t('[data-spy=\"scroll\"]').each((function(){var e=t(this);n.call(e,e.data())}))}))}(jQuery),function(t){\"use strict\";var e=function(e){this.element=t(e)};function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.tab\");i||r.data(\"bs.tab\",i=new e(this)),\"string\"==typeof n&&i[n]()}))}e.VERSION=\"3.4.1\",e.TRANSITION_DURATION=150,e.prototype.show=function(){var e=this.element,n=e.closest(\"ul:not(.dropdown-menu)\"),r=e.data(\"target\");if(r||(r=(r=e.attr(\"href\"))&&r.replace(/.*(?=#[^\\s]*$)/,\"\")),!e.parent(\"li\").hasClass(\"active\")){var i=n.find(\".active:last a\"),o=t.Event(\"hide.bs.tab\",{relatedTarget:e[0]}),s=t.Event(\"show.bs.tab\",{relatedTarget:i[0]});if(i.trigger(o),e.trigger(s),!s.isDefaultPrevented()&&!o.isDefaultPrevented()){var a=t(document).find(r);this.activate(e.closest(\"li\"),n),this.activate(a,a.parent(),(function(){i.trigger({type:\"hidden.bs.tab\",relatedTarget:e[0]}),e.trigger({type:\"shown.bs.tab\",relatedTarget:i[0]})}))}}},e.prototype.activate=function(n,r,i){var o=r.find(\"> .active\"),s=i&&t.support.transition&&(o.length&&o.hasClass(\"fade\")||!!r.find(\"> .fade\").length);function a(){o.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),n.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),s?(n[0].offsetWidth,n.addClass(\"in\")):n.removeClass(\"fade\"),n.parent(\".dropdown-menu\").length&&n.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),i&&i()}o.length&&s?o.one(\"bsTransitionEnd\",a).emulateTransitionEnd(e.TRANSITION_DURATION):a(),o.removeClass(\"in\")};var r=t.fn.tab;t.fn.tab=n,t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=r,this};var i=function(e){e.preventDefault(),n.call(t(this),\"show\")};t(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',i).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',i)}(jQuery),function(t){\"use strict\";var e=function(n,r){this.options=t.extend({},e.DEFAULTS,r);var i=this.options.target===e.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=i.on(\"scroll.bs.affix.data-api\",t.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each((function(){var r=t(this),i=r.data(\"bs.affix\"),o=\"object\"==typeof n&&n;i||r.data(\"bs.affix\",i=new e(this,o)),\"string\"==typeof n&&i[n]()}))}e.VERSION=\"3.4.1\",e.RESET=\"affix affix-top affix-bottom\",e.DEFAULTS={offset:0,target:window},e.prototype.getState=function(t,e,n,r){var i=this.$target.scrollTop(),o=this.$element.offset(),s=this.$target.height();if(null!=n&&\"top\"==this.affixed)return i<n&&\"top\";if(\"bottom\"==this.affixed)return null!=n?!(i+this.unpin<=o.top)&&\"bottom\":!(i+s<=t-r)&&\"bottom\";var a=null==this.affixed,u=a?i:o.top;return null!=n&&i<=n?\"top\":null!=r&&u+(a?s:e)>=t-r&&\"bottom\"},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass(\"affix\");var t=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var n=this.$element.height(),r=this.options.offset,i=r.top,o=r.bottom,s=Math.max(t(document).height(),t(document.body).height());\"object\"!=typeof r&&(o=i=r),\"function\"==typeof i&&(i=r.top(this.$element)),\"function\"==typeof o&&(o=r.bottom(this.$element));var a=this.getState(s,n,i,o);if(this.affixed!=a){null!=this.unpin&&this.$element.css(\"top\",\"\");var u=\"affix\"+(a?\"-\"+a:\"\"),l=t.Event(u+\".bs.affix\");if(this.$element.trigger(l),l.isDefaultPrevented())return;this.affixed=a,this.unpin=\"bottom\"==a?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(u).trigger(u.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==a&&this.$element.offset({top:s-n-o})}};var r=t.fn.affix;t.fn.affix=n,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on(\"load\",(function(){t('[data-spy=\"affix\"]').each((function(){var e=t(this),r=e.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),n.call(e,r)}))}))}(jQuery)},755:function(t,e){var n;!function(e,n){\"use strict\";\"object\"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error(\"jQuery requires a window with a document\");return n(t)}:n(e)}(\"undefined\"!=typeof window?window:this,(function(r,i){\"use strict\";var o=[],s=Object.getPrototypeOf,a=o.slice,u=o.flat?function(t){return o.flat.call(t)}:function(t){return o.concat.apply([],t)},l=o.push,c=o.indexOf,f={},p=f.toString,h=f.hasOwnProperty,d=h.toString,g=d.call(Object),v={},m=function(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType&&\"function\"!=typeof t.item},y=function(t){return null!=t&&t===t.window},b=r.document,w={type:!0,src:!0,nonce:!0,noModule:!0};function _(t,e,n){var r,i,o=(n=n||b).createElement(\"script\");if(o.text=t,e)for(r in w)(i=e[r]||e.getAttribute&&e.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(t){return null==t?t+\"\":\"object\"==typeof t||\"function\"==typeof t?f[p.call(t)]||\"object\":typeof t}var T=\"3.6.4\",C=function(t,e){return new C.fn.init(t,e)};function A(t){var e=!!t&&\"length\"in t&&t.length,n=x(t);return!m(t)&&!y(t)&&(\"array\"===n||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}C.fn=C.prototype={jquery:T,constructor:C,length:0,toArray:function(){return a.call(this)},get:function(t){return null==t?a.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=C.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return C.each(this,t)},map:function(t){return this.pushStack(C.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(C.grep(this,(function(t,e){return(e+1)%2})))},odd:function(){return this.pushStack(C.grep(this,(function(t,e){return e%2})))},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n<e?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:l,sort:o.sort,splice:o.splice},C.extend=C.fn.extend=function(){var t,e,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for(\"boolean\"==typeof s&&(l=s,s=arguments[a]||{},a++),\"object\"==typeof s||m(s)||(s={}),a===u&&(s=this,a--);a<u;a++)if(null!=(t=arguments[a]))for(e in t)r=t[e],\"__proto__\"!==e&&s!==r&&(l&&r&&(C.isPlainObject(r)||(i=Array.isArray(r)))?(n=s[e],o=i&&!Array.isArray(n)?[]:i||C.isPlainObject(n)?n:{},i=!1,s[e]=C.extend(l,o,r)):void 0!==r&&(s[e]=r));return s},C.extend({expando:\"jQuery\"+(T+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isPlainObject:function(t){var e,n;return!(!t||\"[object Object]\"!==p.call(t))&&(!(e=s(t))||\"function\"==typeof(n=h.call(e,\"constructor\")&&e.constructor)&&d.call(n)===g)},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},globalEval:function(t,e,n){_(t,{nonce:e&&e.nonce},n)},each:function(t,e){var n,r=0;if(A(t))for(n=t.length;r<n&&!1!==e.call(t[r],r,t[r]);r++);else for(r in t)if(!1===e.call(t[r],r,t[r]))break;return t},makeArray:function(t,e){var n=e||[];return null!=t&&(A(Object(t))?C.merge(n,\"string\"==typeof t?[t]:t):l.call(n,t)),n},inArray:function(t,e,n){return null==e?-1:c.call(e,t,n)},merge:function(t,e){for(var n=+e.length,r=0,i=t.length;r<n;r++)t[i++]=e[r];return t.length=i,t},grep:function(t,e,n){for(var r=[],i=0,o=t.length,s=!n;i<o;i++)!e(t[i],i)!==s&&r.push(t[i]);return r},map:function(t,e,n){var r,i,o=0,s=[];if(A(t))for(r=t.length;o<r;o++)null!=(i=e(t[o],o,n))&&s.push(i);else for(o in t)null!=(i=e(t[o],o,n))&&s.push(i);return u(s)},guid:1,support:v}),\"function\"==typeof Symbol&&(C.fn[Symbol.iterator]=o[Symbol.iterator]),C.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),(function(t,e){f[\"[object \"+e+\"]\"]=e.toLowerCase()}));var S=function(t){var e,n,r,i,o,s,a,u,l,c,f,p,h,d,g,v,m,y,b,w=\"sizzle\"+1*new Date,_=t.document,x=0,T=0,C=ut(),A=ut(),S=ut(),$=ut(),E=function(t,e){return t===e&&(f=!0),0},k={}.hasOwnProperty,D=[],j=D.pop,O=D.push,N=D.push,R=D.slice,I=function(t,e){for(var n=0,r=t.length;n<r;n++)if(t[n]===e)return n;return-1},L=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",P=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",q=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+P+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",H=\"\\\\[\"+P+\"*(\"+q+\")(?:\"+P+\"*([*^$|!~]?=)\"+P+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+q+\"))|)\"+P+\"*\\\\]\",M=\":(\"+q+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+H+\")*)|.*)\\\\)|)\",U=new RegExp(P+\"+\",\"g\"),F=new RegExp(\"^\"+P+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+P+\"+$\",\"g\"),z=new RegExp(\"^\"+P+\"*,\"+P+\"*\"),B=new RegExp(\"^\"+P+\"*([>+~]|\"+P+\")\"+P+\"*\"),W=new RegExp(P+\"|>\"),G=new RegExp(M),V=new RegExp(\"^\"+q+\"$\"),K={ID:new RegExp(\"^#(\"+q+\")\"),CLASS:new RegExp(\"^\\\\.(\"+q+\")\"),TAG:new RegExp(\"^(\"+q+\"|[*])\"),ATTR:new RegExp(\"^\"+H),PSEUDO:new RegExp(\"^\"+M),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+P+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+P+\"*(?:([+-]|)\"+P+\"*(\\\\d+)|))\"+P+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+L+\")$\",\"i\"),needsContext:new RegExp(\"^\"+P+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+P+\"*((?:-\\\\d)?\\\\d*)\"+P+\"*\\\\)|)(?=[^-]|$)\",\"i\")},X=/HTML$/i,Y=/^(?:input|select|textarea|button)$/i,Q=/^h\\d$/i,J=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,tt=/[+~]/,et=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+P+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),nt=function(t,e){var n=\"0x\"+t.slice(1)-65536;return e||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},rt=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,it=function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},ot=function(){p()},st=wt((function(t){return!0===t.disabled&&\"fieldset\"===t.nodeName.toLowerCase()}),{dir:\"parentNode\",next:\"legend\"});try{N.apply(D=R.call(_.childNodes),_.childNodes),D[_.childNodes.length].nodeType}catch(t){N={apply:D.length?function(t,e){O.apply(t,R.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function at(t,e,r,i){var o,a,l,c,f,d,m,y=e&&e.ownerDocument,_=e?e.nodeType:9;if(r=r||[],\"string\"!=typeof t||!t||1!==_&&9!==_&&11!==_)return r;if(!i&&(p(e),e=e||h,g)){if(11!==_&&(f=Z.exec(t)))if(o=f[1]){if(9===_){if(!(l=e.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(y&&(l=y.getElementById(o))&&b(e,l)&&l.id===o)return r.push(l),r}else{if(f[2])return N.apply(r,e.getElementsByTagName(t)),r;if((o=f[3])&&n.getElementsByClassName&&e.getElementsByClassName)return N.apply(r,e.getElementsByClassName(o)),r}if(n.qsa&&!$[t+\" \"]&&(!v||!v.test(t))&&(1!==_||\"object\"!==e.nodeName.toLowerCase())){if(m=t,y=e,1===_&&(W.test(t)||B.test(t))){for((y=tt.test(t)&&mt(e.parentNode)||e)===e&&n.scope||((c=e.getAttribute(\"id\"))?c=c.replace(rt,it):e.setAttribute(\"id\",c=w)),a=(d=s(t)).length;a--;)d[a]=(c?\"#\"+c:\":scope\")+\" \"+bt(d[a]);m=d.join(\",\")}try{return N.apply(r,y.querySelectorAll(m)),r}catch(e){$(t,!0)}finally{c===w&&e.removeAttribute(\"id\")}}}return u(t.replace(F,\"$1\"),e,r,i)}function ut(){var t=[];return function e(n,i){return t.push(n+\" \")>r.cacheLength&&delete e[t.shift()],e[n+\" \"]=i}}function lt(t){return t[w]=!0,t}function ct(t){var e=h.createElement(\"fieldset\");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function ft(t,e){for(var n=t.split(\"|\"),i=n.length;i--;)r.attrHandle[n[i]]=e}function pt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ht(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function dt(t){return function(e){var n=e.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&e.type===t}}function gt(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&st(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function vt(t){return lt((function(e){return e=+e,lt((function(n,r){for(var i,o=t([],n.length,e),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))}))}))}function mt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=at.support={},o=at.isXML=function(t){var e=t&&t.namespaceURI,n=t&&(t.ownerDocument||t).documentElement;return!X.test(e||n&&n.nodeName||\"HTML\")},p=at.setDocument=function(t){var e,i,s=t?t.ownerDocument||t:_;return s!=h&&9===s.nodeType&&s.documentElement?(d=(h=s).documentElement,g=!o(h),_!=h&&(i=h.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",ot,!1):i.attachEvent&&i.attachEvent(\"onunload\",ot)),n.scope=ct((function(t){return d.appendChild(t).appendChild(h.createElement(\"div\")),void 0!==t.querySelectorAll&&!t.querySelectorAll(\":scope fieldset div\").length})),n.cssHas=ct((function(){try{return h.querySelector(\":has(*,:jqfake)\"),!1}catch(t){return!0}})),n.attributes=ct((function(t){return t.className=\"i\",!t.getAttribute(\"className\")})),n.getElementsByTagName=ct((function(t){return t.appendChild(h.createComment(\"\")),!t.getElementsByTagName(\"*\").length})),n.getElementsByClassName=J.test(h.getElementsByClassName),n.getById=ct((function(t){return d.appendChild(t).id=w,!h.getElementsByName||!h.getElementsByName(w).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){return t.getAttribute(\"id\")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode(\"id\");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if(\"*\"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&g)return e.getElementsByClassName(t)},m=[],v=[],(n.qsa=J.test(h.querySelectorAll))&&(ct((function(t){var e;d.appendChild(t).innerHTML=\"<a id='\"+w+\"'></a><select id='\"+w+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",t.querySelectorAll(\"[msallowcapture^='']\").length&&v.push(\"[*^$]=\"+P+\"*(?:''|\\\"\\\")\"),t.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[\"+P+\"*(?:value|\"+L+\")\"),t.querySelectorAll(\"[id~=\"+w+\"-]\").length||v.push(\"~=\"),(e=h.createElement(\"input\")).setAttribute(\"name\",\"\"),t.appendChild(e),t.querySelectorAll(\"[name='']\").length||v.push(\"\\\\[\"+P+\"*name\"+P+\"*=\"+P+\"*(?:''|\\\"\\\")\"),t.querySelectorAll(\":checked\").length||v.push(\":checked\"),t.querySelectorAll(\"a#\"+w+\"+*\").length||v.push(\".#.+[+~]\"),t.querySelectorAll(\"\\\\\\f\"),v.push(\"[\\\\r\\\\n\\\\f]\")})),ct((function(t){t.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var e=h.createElement(\"input\");e.setAttribute(\"type\",\"hidden\"),t.appendChild(e).setAttribute(\"name\",\"D\"),t.querySelectorAll(\"[name=d]\").length&&v.push(\"name\"+P+\"*[*^$|!~]?=\"),2!==t.querySelectorAll(\":enabled\").length&&v.push(\":enabled\",\":disabled\"),d.appendChild(t).disabled=!0,2!==t.querySelectorAll(\":disabled\").length&&v.push(\":enabled\",\":disabled\"),t.querySelectorAll(\"*,:x\"),v.push(\",.*:\")}))),(n.matchesSelector=J.test(y=d.matches||d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct((function(t){n.disconnectedMatch=y.call(t,\"*\"),y.call(t,\"[s!='']:x\"),m.push(\"!=\",M)})),n.cssHas||v.push(\":has\"),v=v.length&&new RegExp(v.join(\"|\")),m=m.length&&new RegExp(m.join(\"|\")),e=J.test(d.compareDocumentPosition),b=e||J.test(d.contains)?function(t,e){var n=9===t.nodeType&&t.documentElement||t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},E=e?function(t,e){if(t===e)return f=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t==h||t.ownerDocument==_&&b(_,t)?-1:e==h||e.ownerDocument==_&&b(_,e)?1:c?I(c,t)-I(c,e):0:4&r?-1:1)}:function(t,e){if(t===e)return f=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,s=[t],a=[e];if(!i||!o)return t==h?-1:e==h?1:i?-1:o?1:c?I(c,t)-I(c,e):0;if(i===o)return pt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?pt(s[r],a[r]):s[r]==_?-1:a[r]==_?1:0},h):h},at.matches=function(t,e){return at(t,null,null,e)},at.matchesSelector=function(t,e){if(p(t),n.matchesSelector&&g&&!$[e+\" \"]&&(!m||!m.test(e))&&(!v||!v.test(e)))try{var r=y.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){$(e,!0)}return at(e,h,null,[t]).length>0},at.contains=function(t,e){return(t.ownerDocument||t)!=h&&p(t),b(t,e)},at.attr=function(t,e){(t.ownerDocument||t)!=h&&p(t);var i=r.attrHandle[e.toLowerCase()],o=i&&k.call(r.attrHandle,e.toLowerCase())?i(t,e,!g):void 0;return void 0!==o?o:n.attributes||!g?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},at.escape=function(t){return(t+\"\").replace(rt,it)},at.error=function(t){throw new Error(\"Syntax error, unrecognized expression: \"+t)},at.uniqueSort=function(t){var e,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&t.slice(0),t.sort(E),f){for(;e=t[o++];)e===t[o]&&(i=r.push(o));for(;i--;)t.splice(r[i],1)}return c=null,t},i=at.getText=function(t){var e,n=\"\",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=i(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=i(e);return n},r=at.selectors={cacheLength:50,createPseudo:lt,match:K,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(et,nt),t[3]=(t[3]||t[4]||t[5]||\"\").replace(et,nt),\"~=\"===t[2]&&(t[3]=\" \"+t[3]+\" \"),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),\"nth\"===t[1].slice(0,3)?(t[3]||at.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*(\"even\"===t[3]||\"odd\"===t[3])),t[5]=+(t[7]+t[8]||\"odd\"===t[3])):t[3]&&at.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return K.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||\"\":n&&G.test(n)&&(e=s(n,!0))&&(e=n.indexOf(\")\",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(et,nt).toLowerCase();return\"*\"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=C[t+\" \"];return e||(e=new RegExp(\"(^|\"+P+\")\"+t+\"(\"+P+\"|$)\"))&&C(t,(function(t){return e.test(\"string\"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute(\"class\")||\"\")}))},ATTR:function(t,e,n){return function(r){var i=at.attr(r,t);return null==i?\"!=\"===e:!e||(i+=\"\",\"=\"===e?i===n:\"!=\"===e?i!==n:\"^=\"===e?n&&0===i.indexOf(n):\"*=\"===e?n&&i.indexOf(n)>-1:\"$=\"===e?n&&i.slice(-n.length)===n:\"~=\"===e?(\" \"+i.replace(U,\" \")+\" \").indexOf(n)>-1:\"|=\"===e&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(t,e,n,r,i){var o=\"nth\"!==t.slice(0,3),s=\"last\"!==t.slice(-4),a=\"of-type\"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,u){var l,c,f,p,h,d,g=o!==s?\"nextSibling\":\"previousSibling\",v=e.parentNode,m=a&&e.nodeName.toLowerCase(),y=!u&&!a,b=!1;if(v){if(o){for(;g;){for(p=e;p=p[g];)if(a?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;d=g=\"only\"===t&&!d&&\"nextSibling\"}return!0}if(d=[s?v.firstChild:v.lastChild],s&&y){for(b=(h=(l=(c=(f=(p=v)[w]||(p[w]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]||[])[0]===x&&l[1])&&l[2],p=h&&v.childNodes[h];p=++h&&p&&p[g]||(b=h=0)||d.pop();)if(1===p.nodeType&&++b&&p===e){c[t]=[x,h,b];break}}else if(y&&(b=h=(l=(c=(f=(p=e)[w]||(p[w]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]||[])[0]===x&&l[1]),!1===b)for(;(p=++h&&p&&p[g]||(b=h=0)||d.pop())&&((a?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++b||(y&&((c=(f=p[w]||(p[w]={}))[p.uniqueID]||(f[p.uniqueID]={}))[t]=[x,b]),p!==e)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(t,e){var n,i=r.pseudos[t]||r.setFilters[t.toLowerCase()]||at.error(\"unsupported pseudo: \"+t);return i[w]?i(e):i.length>1?(n=[t,t,\"\",e],r.setFilters.hasOwnProperty(t.toLowerCase())?lt((function(t,n){for(var r,o=i(t,e),s=o.length;s--;)t[r=I(t,o[s])]=!(n[r]=o[s])})):function(t){return i(t,0,n)}):i}},pseudos:{not:lt((function(t){var e=[],n=[],r=a(t.replace(F,\"$1\"));return r[w]?lt((function(t,e,n,i){for(var o,s=r(t,null,i,[]),a=t.length;a--;)(o=s[a])&&(t[a]=!(e[a]=o))})):function(t,i,o){return e[0]=t,r(e,null,o,n),e[0]=null,!n.pop()}})),has:lt((function(t){return function(e){return at(t,e).length>0}})),contains:lt((function(t){return t=t.replace(et,nt),function(e){return(e.textContent||i(e)).indexOf(t)>-1}})),lang:lt((function(t){return V.test(t||\"\")||at.error(\"unsupported lang: \"+t),t=t.replace(et,nt).toLowerCase(),function(e){var n;do{if(n=g?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(n=n.toLowerCase())===t||0===n.indexOf(t+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===d},focus:function(t){return t===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:gt(!1),disabled:gt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&!!t.checked||\"option\"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return Q.test(t.nodeName)},input:function(t){return Y.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&\"button\"===t.type||\"button\"===e},text:function(t){var e;return\"input\"===t.nodeName.toLowerCase()&&\"text\"===t.type&&(null==(e=t.getAttribute(\"type\"))||\"text\"===e.toLowerCase())},first:vt((function(){return[0]})),last:vt((function(t,e){return[e-1]})),eq:vt((function(t,e,n){return[n<0?n+e:n]})),even:vt((function(t,e){for(var n=0;n<e;n+=2)t.push(n);return t})),odd:vt((function(t,e){for(var n=1;n<e;n+=2)t.push(n);return t})),lt:vt((function(t,e,n){for(var r=n<0?n+e:n>e?e:n;--r>=0;)t.push(r);return t})),gt:vt((function(t,e,n){for(var r=n<0?n+e:n;++r<e;)t.push(r);return t}))}},r.pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[e]=ht(e);for(e in{submit:!0,reset:!0})r.pseudos[e]=dt(e);function yt(){}function bt(t){for(var e=0,n=t.length,r=\"\";e<n;e++)r+=t[e].value;return r}function wt(t,e,n){var r=e.dir,i=e.next,o=i||r,s=n&&\"parentNode\"===o,a=T++;return e.first?function(e,n,i){for(;e=e[r];)if(1===e.nodeType||s)return t(e,n,i);return!1}:function(e,n,u){var l,c,f,p=[x,a];if(u){for(;e=e[r];)if((1===e.nodeType||s)&&t(e,n,u))return!0}else for(;e=e[r];)if(1===e.nodeType||s)if(c=(f=e[w]||(e[w]={}))[e.uniqueID]||(f[e.uniqueID]={}),i&&i===e.nodeName.toLowerCase())e=e[r]||e;else{if((l=c[o])&&l[0]===x&&l[1]===a)return p[2]=l[2];if(c[o]=p,p[2]=t(e,n,u))return!0}return!1}}function _t(t){return t.length>1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function xt(t,e,n,r,i){for(var o,s=[],a=0,u=t.length,l=null!=e;a<u;a++)(o=t[a])&&(n&&!n(o,r,i)||(s.push(o),l&&e.push(a)));return s}function Tt(t,e,n,r,i,o){return r&&!r[w]&&(r=Tt(r)),i&&!i[w]&&(i=Tt(i,o)),lt((function(o,s,a,u){var l,c,f,p=[],h=[],d=s.length,g=o||function(t,e,n){for(var r=0,i=e.length;r<i;r++)at(t,e[r],n);return n}(e||\"*\",a.nodeType?[a]:a,[]),v=!t||!o&&e?g:xt(g,p,t,a,u),m=n?i||(o?t:d||r)?[]:s:v;if(n&&n(v,m,a,u),r)for(l=xt(m,h),r(l,[],a,u),c=l.length;c--;)(f=l[c])&&(m[h[c]]=!(v[h[c]]=f));if(o){if(i||t){if(i){for(l=[],c=m.length;c--;)(f=m[c])&&l.push(v[c]=f);i(null,m=[],l,u)}for(c=m.length;c--;)(f=m[c])&&(l=i?I(o,f):p[c])>-1&&(o[l]=!(s[l]=f))}}else m=xt(m===s?m.splice(d,m.length):m),i?i(null,s,m,u):N.apply(s,m)}))}function Ct(t){for(var e,n,i,o=t.length,s=r.relative[t[0].type],a=s||r.relative[\" \"],u=s?1:0,c=wt((function(t){return t===e}),a,!0),f=wt((function(t){return I(e,t)>-1}),a,!0),p=[function(t,n,r){var i=!s&&(r||n!==l)||((e=n).nodeType?c(t,n,r):f(t,n,r));return e=null,i}];u<o;u++)if(n=r.relative[t[u].type])p=[wt(_t(p),n)];else{if((n=r.filter[t[u].type].apply(null,t[u].matches))[w]){for(i=++u;i<o&&!r.relative[t[i].type];i++);return Tt(u>1&&_t(p),u>1&&bt(t.slice(0,u-1).concat({value:\" \"===t[u-2].type?\"*\":\"\"})).replace(F,\"$1\"),n,u<i&&Ct(t.slice(u,i)),i<o&&Ct(t=t.slice(i)),i<o&&bt(t))}p.push(n)}return _t(p)}return yt.prototype=r.filters=r.pseudos,r.setFilters=new yt,s=at.tokenize=function(t,e){var n,i,o,s,a,u,l,c=A[t+\" \"];if(c)return e?0:c.slice(0);for(a=t,u=[],l=r.preFilter;a;){for(s in n&&!(i=z.exec(a))||(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),n=!1,(i=B.exec(a))&&(n=i.shift(),o.push({value:n,type:i[0].replace(F,\" \")}),a=a.slice(n.length)),r.filter)!(i=K[s].exec(a))||l[s]&&!(i=l[s](i))||(n=i.shift(),o.push({value:n,type:s,matches:i}),a=a.slice(n.length));if(!n)break}return e?a.length:a?at.error(t):A(t,u).slice(0)},a=at.compile=function(t,e){var n,i=[],o=[],a=S[t+\" \"];if(!a){for(e||(e=s(t)),n=e.length;n--;)(a=Ct(e[n]))[w]?i.push(a):o.push(a);a=S(t,function(t,e){var n=e.length>0,i=t.length>0,o=function(o,s,a,u,c){var f,d,v,m=0,y=\"0\",b=o&&[],w=[],_=l,T=o||i&&r.find.TAG(\"*\",c),C=x+=null==_?1:Math.random()||.1,A=T.length;for(c&&(l=s==h||s||c);y!==A&&null!=(f=T[y]);y++){if(i&&f){for(d=0,s||f.ownerDocument==h||(p(f),a=!g);v=t[d++];)if(v(f,s||h,a)){u.push(f);break}c&&(x=C)}n&&((f=!v&&f)&&m--,o&&b.push(f))}if(m+=y,n&&y!==m){for(d=0;v=e[d++];)v(b,w,s,a);if(o){if(m>0)for(;y--;)b[y]||w[y]||(w[y]=j.call(u));w=xt(w)}N.apply(u,w),c&&!o&&w.length>0&&m+e.length>1&&at.uniqueSort(u)}return c&&(x=C,l=_),b};return n?lt(o):o}(o,i)),a.selector=t}return a},u=at.select=function(t,e,n,i){var o,u,l,c,f,p=\"function\"==typeof t&&t,h=!i&&s(t=p.selector||t);if(n=n||[],1===h.length){if((u=h[0]=h[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===e.nodeType&&g&&r.relative[u[1].type]){if(!(e=(r.find.ID(l.matches[0].replace(et,nt),e)||[])[0]))return n;p&&(e=e.parentNode),t=t.slice(u.shift().value.length)}for(o=K.needsContext.test(t)?0:u.length;o--&&(l=u[o],!r.relative[c=l.type]);)if((f=r.find[c])&&(i=f(l.matches[0].replace(et,nt),tt.test(u[0].type)&&mt(e.parentNode)||e))){if(u.splice(o,1),!(t=i.length&&bt(u)))return N.apply(n,i),n;break}}return(p||a(t,h))(i,e,!g,n,!e||tt.test(t)&&mt(e.parentNode)||e),n},n.sortStable=w.split(\"\").sort(E).join(\"\")===w,n.detectDuplicates=!!f,p(),n.sortDetached=ct((function(t){return 1&t.compareDocumentPosition(h.createElement(\"fieldset\"))})),ct((function(t){return t.innerHTML=\"<a href='#'></a>\",\"#\"===t.firstChild.getAttribute(\"href\")}))||ft(\"type|href|height|width\",(function(t,e,n){if(!n)return t.getAttribute(e,\"type\"===e.toLowerCase()?1:2)})),n.attributes&&ct((function(t){return t.innerHTML=\"<input/>\",t.firstChild.setAttribute(\"value\",\"\"),\"\"===t.firstChild.getAttribute(\"value\")}))||ft(\"value\",(function(t,e,n){if(!n&&\"input\"===t.nodeName.toLowerCase())return t.defaultValue})),ct((function(t){return null==t.getAttribute(\"disabled\")}))||ft(L,(function(t,e,n){var r;if(!n)return!0===t[e]?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null})),at}(r);C.find=S,C.expr=S.selectors,C.expr[\":\"]=C.expr.pseudos,C.uniqueSort=C.unique=S.uniqueSort,C.text=S.getText,C.isXMLDoc=S.isXML,C.contains=S.contains,C.escapeSelector=S.escape;var $=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&C(t).is(n))break;r.push(t)}return r},E=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},k=C.expr.match.needsContext;function D(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var j=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function O(t,e,n){return m(e)?C.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?C.grep(t,(function(t){return t===e!==n})):\"string\"!=typeof e?C.grep(t,(function(t){return c.call(e,t)>-1!==n})):C.filter(e,t,n)}C.filter=function(t,e,n){var r=e[0];return n&&(t=\":not(\"+t+\")\"),1===e.length&&1===r.nodeType?C.find.matchesSelector(r,t)?[r]:[]:C.find.matches(t,C.grep(e,(function(t){return 1===t.nodeType})))},C.fn.extend({find:function(t){var e,n,r=this.length,i=this;if(\"string\"!=typeof t)return this.pushStack(C(t).filter((function(){for(e=0;e<r;e++)if(C.contains(i[e],this))return!0})));for(n=this.pushStack([]),e=0;e<r;e++)C.find(t,i[e],n);return r>1?C.uniqueSort(n):n},filter:function(t){return this.pushStack(O(this,t||[],!1))},not:function(t){return this.pushStack(O(this,t||[],!0))},is:function(t){return!!O(this,\"string\"==typeof t&&k.test(t)?C(t):t||[],!1).length}});var N,R=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(C.fn.init=function(t,e,n){var r,i;if(!t)return this;if(n=n||N,\"string\"==typeof t){if(!(r=\"<\"===t[0]&&\">\"===t[t.length-1]&&t.length>=3?[null,t,null]:R.exec(t))||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof C?e[0]:e,C.merge(this,C.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:b,!0)),j.test(r[1])&&C.isPlainObject(e))for(r in e)m(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return(i=b.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):m(t)?void 0!==n.ready?n.ready(t):t(C):C.makeArray(t,this)}).prototype=C.fn,N=C(b);var I=/^(?:parents|prev(?:Until|All))/,L={children:!0,contents:!0,next:!0,prev:!0};function P(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}C.fn.extend({has:function(t){var e=C(t,this),n=e.length;return this.filter((function(){for(var t=0;t<n;t++)if(C.contains(this,e[t]))return!0}))},closest:function(t,e){var n,r=0,i=this.length,o=[],s=\"string\"!=typeof t&&C(t);if(!k.test(t))for(;r<i;r++)for(n=this[r];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&C.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?C.uniqueSort(o):o)},index:function(t){return t?\"string\"==typeof t?c.call(C(t),this[0]):c.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(C.uniqueSort(C.merge(this.get(),C(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),C.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return $(t,\"parentNode\")},parentsUntil:function(t,e,n){return $(t,\"parentNode\",n)},next:function(t){return P(t,\"nextSibling\")},prev:function(t){return P(t,\"previousSibling\")},nextAll:function(t){return $(t,\"nextSibling\")},prevAll:function(t){return $(t,\"previousSibling\")},nextUntil:function(t,e,n){return $(t,\"nextSibling\",n)},prevUntil:function(t,e,n){return $(t,\"previousSibling\",n)},siblings:function(t){return E((t.parentNode||{}).firstChild,t)},children:function(t){return E(t.firstChild)},contents:function(t){return null!=t.contentDocument&&s(t.contentDocument)?t.contentDocument:(D(t,\"template\")&&(t=t.content||t),C.merge([],t.childNodes))}},(function(t,e){C.fn[t]=function(n,r){var i=C.map(this,e,n);return\"Until\"!==t.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=C.filter(r,i)),this.length>1&&(L[t]||C.uniqueSort(i),I.test(t)&&i.reverse()),this.pushStack(i)}}));var q=/[^\\x20\\t\\r\\n\\f]+/g;function H(t){return t}function M(t){throw t}function U(t,e,n,r){var i;try{t&&m(i=t.promise)?i.call(t).done(e).fail(n):t&&m(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}C.Callbacks=function(t){t=\"string\"==typeof t?function(t){var e={};return C.each(t.match(q)||[],(function(t,n){e[n]=!0})),e}(t):C.extend({},t);var e,n,r,i,o=[],s=[],a=-1,u=function(){for(i=i||t.once,r=e=!0;s.length;a=-1)for(n=s.shift();++a<o.length;)!1===o[a].apply(n[0],n[1])&&t.stopOnFalse&&(a=o.length,n=!1);t.memory||(n=!1),e=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!e&&(a=o.length-1,s.push(n)),function e(n){C.each(n,(function(n,r){m(r)?t.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==x(r)&&e(r)}))}(arguments),n&&!e&&u()),this},remove:function(){return C.each(arguments,(function(t,e){for(var n;(n=C.inArray(e,o,n))>-1;)o.splice(n,1),n<=a&&a--})),this},has:function(t){return t?C.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||e||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},C.extend({Deferred:function(t){var e=[[\"notify\",\"progress\",C.Callbacks(\"memory\"),C.Callbacks(\"memory\"),2],[\"resolve\",\"done\",C.Callbacks(\"once memory\"),C.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",C.Callbacks(\"once memory\"),C.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return i.then(null,t)},pipe:function(){var t=arguments;return C.Deferred((function(n){C.each(e,(function(e,r){var i=m(t[r[4]])&&t[r[4]];o[r[1]]((function(){var t=i&&i.apply(this,arguments);t&&m(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,i?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,i){var o=0;function s(t,e,n,i){return function(){var a=this,u=arguments,l=function(){var r,l;if(!(t<o)){if((r=n.apply(a,u))===e.promise())throw new TypeError(\"Thenable self-resolution\");l=r&&(\"object\"==typeof r||\"function\"==typeof r)&&r.then,m(l)?i?l.call(r,s(o,e,H,i),s(o,e,M,i)):(o++,l.call(r,s(o,e,H,i),s(o,e,M,i),s(o,e,H,e.notifyWith))):(n!==H&&(a=void 0,u=[r]),(i||e.resolveWith)(a,u))}},c=i?l:function(){try{l()}catch(r){C.Deferred.exceptionHook&&C.Deferred.exceptionHook(r,c.stackTrace),t+1>=o&&(n!==M&&(a=void 0,u=[r]),e.rejectWith(a,u))}};t?c():(C.Deferred.getStackHook&&(c.stackTrace=C.Deferred.getStackHook()),r.setTimeout(c))}}return C.Deferred((function(r){e[0][3].add(s(0,r,m(i)?i:H,r.notifyWith)),e[1][3].add(s(0,r,m(t)?t:H)),e[2][3].add(s(0,r,m(n)?n:M))})).promise()},promise:function(t){return null!=t?C.extend(t,i):i}},o={};return C.each(e,(function(t,r){var s=r[2],a=r[5];i[r[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(r[3].fire),o[r[0]]=function(){return o[r[0]+\"With\"](this===o?void 0:this,arguments),this},o[r[0]+\"With\"]=s.fireWith})),i.promise(o),t&&t.call(o,o),o},when:function(t){var e=arguments.length,n=e,r=Array(n),i=a.call(arguments),o=C.Deferred(),s=function(t){return function(n){r[t]=this,i[t]=arguments.length>1?a.call(arguments):n,--e||o.resolveWith(r,i)}};if(e<=1&&(U(t,o.done(s(n)).resolve,o.reject,!e),\"pending\"===o.state()||m(i[n]&&i[n].then)))return o.then();for(;n--;)U(i[n],s(n),o.reject);return o.promise()}});var F=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;C.Deferred.exceptionHook=function(t,e){r.console&&r.console.warn&&t&&F.test(t.name)&&r.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,e)},C.readyException=function(t){r.setTimeout((function(){throw t}))};var z=C.Deferred();function B(){b.removeEventListener(\"DOMContentLoaded\",B),r.removeEventListener(\"load\",B),C.ready()}C.fn.ready=function(t){return z.then(t).catch((function(t){C.readyException(t)})),this},C.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--C.readyWait:C.isReady)||(C.isReady=!0,!0!==t&&--C.readyWait>0||z.resolveWith(b,[C]))}}),C.ready.then=z.then,\"complete\"===b.readyState||\"loading\"!==b.readyState&&!b.documentElement.doScroll?r.setTimeout(C.ready):(b.addEventListener(\"DOMContentLoaded\",B),r.addEventListener(\"load\",B));var W=function(t,e,n,r,i,o,s){var a=0,u=t.length,l=null==n;if(\"object\"===x(n))for(a in i=!0,n)W(t,e,a,n[a],!0,o,s);else if(void 0!==r&&(i=!0,m(r)||(s=!0),l&&(s?(e.call(t,r),e=null):(l=e,e=function(t,e,n){return l.call(C(t),n)})),e))for(;a<u;a++)e(t[a],n,s?r:r.call(t[a],a,e(t[a],n)));return i?t:l?e.call(t):u?e(t[0],n):o},G=/^-ms-/,V=/-([a-z])/g;function K(t,e){return e.toUpperCase()}function X(t){return t.replace(G,\"ms-\").replace(V,K)}var Y=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType};function Q(){this.expando=C.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(t){var e=t[this.expando];return e||(e={},Y(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,n){var r,i=this.cache(t);if(\"string\"==typeof e)i[X(e)]=n;else for(r in e)i[X(r)]=e[r];return i},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][X(e)]},access:function(t,e,n){return void 0===e||e&&\"string\"==typeof e&&void 0===n?this.get(t,e):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,r=t[this.expando];if(void 0!==r){if(void 0!==e){n=(e=Array.isArray(e)?e.map(X):(e=X(e))in r?[e]:e.match(q)||[]).length;for(;n--;)delete r[e[n]]}(void 0===e||C.isEmptyObject(r))&&(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&&!C.isEmptyObject(e)}};var J=new Q,Z=new Q,tt=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,et=/[A-Z]/g;function nt(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r=\"data-\"+e.replace(et,\"-$&\").toLowerCase(),\"string\"==typeof(n=t.getAttribute(r))){try{n=function(t){return\"true\"===t||\"false\"!==t&&(\"null\"===t?null:t===+t+\"\"?+t:tt.test(t)?JSON.parse(t):t)}(n)}catch(t){}Z.set(t,e,n)}else n=void 0;return n}C.extend({hasData:function(t){return Z.hasData(t)||J.hasData(t)},data:function(t,e,n){return Z.access(t,e,n)},removeData:function(t,e){Z.remove(t,e)},_data:function(t,e,n){return J.access(t,e,n)},_removeData:function(t,e){J.remove(t,e)}}),C.fn.extend({data:function(t,e){var n,r,i,o=this[0],s=o&&o.attributes;if(void 0===t){if(this.length&&(i=Z.get(o),1===o.nodeType&&!J.get(o,\"hasDataAttrs\"))){for(n=s.length;n--;)s[n]&&0===(r=s[n].name).indexOf(\"data-\")&&(r=X(r.slice(5)),nt(o,r,i[r]));J.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof t?this.each((function(){Z.set(this,t)})):W(this,(function(e){var n;if(o&&void 0===e)return void 0!==(n=Z.get(o,t))||void 0!==(n=nt(o,t))?n:void 0;this.each((function(){Z.set(this,t,e)}))}),null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each((function(){Z.remove(this,t)}))}}),C.extend({queue:function(t,e,n){var r;if(t)return e=(e||\"fx\")+\"queue\",r=J.get(t,e),n&&(!r||Array.isArray(n)?r=J.access(t,e,C.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||\"fx\";var n=C.queue(t,e),r=n.length,i=n.shift(),o=C._queueHooks(t,e);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===e&&n.unshift(\"inprogress\"),delete o.stop,i.call(t,(function(){C.dequeue(t,e)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+\"queueHooks\";return J.get(t,n)||J.access(t,n,{empty:C.Callbacks(\"once memory\").add((function(){J.remove(t,[e+\"queue\",n])}))})}}),C.fn.extend({queue:function(t,e){var n=2;return\"string\"!=typeof t&&(e=t,t=\"fx\",n--),arguments.length<n?C.queue(this[0],t):void 0===e?this:this.each((function(){var n=C.queue(this,t,e);C._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==n[0]&&C.dequeue(this,t)}))},dequeue:function(t){return this.each((function(){C.dequeue(this,t)}))},clearQueue:function(t){return this.queue(t||\"fx\",[])},promise:function(t,e){var n,r=1,i=C.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof t&&(e=t,t=void 0),t=t||\"fx\";s--;)(n=J.get(o[s],t+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(e)}});var rt=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,it=new RegExp(\"^(?:([+-])=|)(\"+rt+\")([a-z%]*)$\",\"i\"),ot=[\"Top\",\"Right\",\"Bottom\",\"Left\"],st=b.documentElement,at=function(t){return C.contains(t.ownerDocument,t)},ut={composed:!0};st.getRootNode&&(at=function(t){return C.contains(t.ownerDocument,t)||t.getRootNode(ut)===t.ownerDocument});var lt=function(t,e){return\"none\"===(t=e||t).style.display||\"\"===t.style.display&&at(t)&&\"none\"===C.css(t,\"display\")};function ct(t,e,n,r){var i,o,s=20,a=r?function(){return r.cur()}:function(){return C.css(t,e,\"\")},u=a(),l=n&&n[3]||(C.cssNumber[e]?\"\":\"px\"),c=t.nodeType&&(C.cssNumber[e]||\"px\"!==l&&+u)&&it.exec(C.css(t,e));if(c&&c[3]!==l){for(u/=2,l=l||c[3],c=+u||1;s--;)C.style(t,e,c+l),(1-o)*(1-(o=a()/u||.5))<=0&&(s=0),c/=o;c*=2,C.style(t,e,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ft={};function pt(t){var e,n=t.ownerDocument,r=t.nodeName,i=ft[r];return i||(e=n.body.appendChild(n.createElement(r)),i=C.css(e,\"display\"),e.parentNode.removeChild(e),\"none\"===i&&(i=\"block\"),ft[r]=i,i)}function ht(t,e){for(var n,r,i=[],o=0,s=t.length;o<s;o++)(r=t[o]).style&&(n=r.style.display,e?(\"none\"===n&&(i[o]=J.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&lt(r)&&(i[o]=pt(r))):\"none\"!==n&&(i[o]=\"none\",J.set(r,\"display\",n)));for(o=0;o<s;o++)null!=i[o]&&(t[o].style.display=i[o]);return t}C.fn.extend({show:function(){return ht(this,!0)},hide:function(){return ht(this)},toggle:function(t){return\"boolean\"==typeof t?t?this.show():this.hide():this.each((function(){lt(this)?C(this).show():C(this).hide()}))}});var dt,gt,vt=/^(?:checkbox|radio)$/i,mt=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,yt=/^$|^module$|\\/(?:java|ecma)script/i;dt=b.createDocumentFragment().appendChild(b.createElement(\"div\")),(gt=b.createElement(\"input\")).setAttribute(\"type\",\"radio\"),gt.setAttribute(\"checked\",\"checked\"),gt.setAttribute(\"name\",\"t\"),dt.appendChild(gt),v.checkClone=dt.cloneNode(!0).cloneNode(!0).lastChild.checked,dt.innerHTML=\"<textarea>x</textarea>\",v.noCloneChecked=!!dt.cloneNode(!0).lastChild.defaultValue,dt.innerHTML=\"<option></option>\",v.option=!!dt.lastChild;var bt={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function wt(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||\"*\"):void 0!==t.querySelectorAll?t.querySelectorAll(e||\"*\"):[],void 0===e||e&&D(t,e)?C.merge([t],n):n}function _t(t,e){for(var n=0,r=t.length;n<r;n++)J.set(t[n],\"globalEval\",!e||J.get(e[n],\"globalEval\"))}bt.tbody=bt.tfoot=bt.colgroup=bt.caption=bt.thead,bt.th=bt.td,v.option||(bt.optgroup=bt.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var xt=/<|&#?\\w+;/;function Tt(t,e,n,r,i){for(var o,s,a,u,l,c,f=e.createDocumentFragment(),p=[],h=0,d=t.length;h<d;h++)if((o=t[h])||0===o)if(\"object\"===x(o))C.merge(p,o.nodeType?[o]:o);else if(xt.test(o)){for(s=s||f.appendChild(e.createElement(\"div\")),a=(mt.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=bt[a]||bt._default,s.innerHTML=u[1]+C.htmlPrefilter(o)+u[2],c=u[0];c--;)s=s.lastChild;C.merge(p,s.childNodes),(s=f.firstChild).textContent=\"\"}else p.push(e.createTextNode(o));for(f.textContent=\"\",h=0;o=p[h++];)if(r&&C.inArray(o,r)>-1)i&&i.push(o);else if(l=at(o),s=wt(f.appendChild(o),\"script\"),l&&_t(s),n)for(c=0;o=s[c++];)yt.test(o.type||\"\")&&n.push(o);return f}var Ct=/^([^.]*)(?:\\.(.+)|)/;function At(){return!0}function St(){return!1}function $t(t,e){return t===function(){try{return b.activeElement}catch(t){}}()==(\"focus\"===e)}function Et(t,e,n,r,i,o){var s,a;if(\"object\"==typeof e){for(a in\"string\"!=typeof n&&(r=r||n,n=void 0),e)Et(t,a,n,r,e[a],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=St;else if(!i)return t;return 1===o&&(s=i,i=function(t){return C().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=C.guid++)),t.each((function(){C.event.add(this,e,i,r,n)}))}function kt(t,e,n){n?(J.set(t,e,!1),C.event.add(t,e,{namespace:!1,handler:function(t){var r,i,o=J.get(this,e);if(1&t.isTrigger&&this[e]){if(o.length)(C.event.special[e]||{}).delegateType&&t.stopPropagation();else if(o=a.call(arguments),J.set(this,e,o),r=n(this,e),this[e](),o!==(i=J.get(this,e))||r?J.set(this,e,!1):i={},o!==i)return t.stopImmediatePropagation(),t.preventDefault(),i&&i.value}else o.length&&(J.set(this,e,{value:C.event.trigger(C.extend(o[0],C.Event.prototype),o.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===J.get(t,e)&&C.event.add(t,e,At)}C.event={global:{},add:function(t,e,n,r,i){var o,s,a,u,l,c,f,p,h,d,g,v=J.get(t);if(Y(t))for(n.handler&&(n=(o=n).handler,i=o.selector),i&&C.find.matchesSelector(st,i),n.guid||(n.guid=C.guid++),(u=v.events)||(u=v.events=Object.create(null)),(s=v.handle)||(s=v.handle=function(e){return void 0!==C&&C.event.triggered!==e.type?C.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(q)||[\"\"]).length;l--;)h=g=(a=Ct.exec(e[l])||[])[1],d=(a[2]||\"\").split(\".\").sort(),h&&(f=C.event.special[h]||{},h=(i?f.delegateType:f.bindType)||h,f=C.event.special[h]||{},c=C.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&C.expr.match.needsContext.test(i),namespace:d.join(\".\")},o),(p=u[h])||((p=u[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,d,s)||t.addEventListener&&t.addEventListener(h,s)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),C.event.global[h]=!0)},remove:function(t,e,n,r,i){var o,s,a,u,l,c,f,p,h,d,g,v=J.hasData(t)&&J.get(t);if(v&&(u=v.events)){for(l=(e=(e||\"\").match(q)||[\"\"]).length;l--;)if(h=g=(a=Ct.exec(e[l])||[])[1],d=(a[2]||\"\").split(\".\").sort(),h){for(f=C.event.special[h]||{},p=u[h=(r?f.delegateType:f.bindType)||h]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(t,c));s&&!p.length&&(f.teardown&&!1!==f.teardown.call(t,d,v.handle)||C.removeEvent(t,h,v.handle),delete u[h])}else for(h in u)C.event.remove(t,h+e[l],n,r,!0);C.isEmptyObject(u)&&J.remove(t,\"handle events\")}},dispatch:function(t){var e,n,r,i,o,s,a=new Array(arguments.length),u=C.event.fix(t),l=(J.get(this,\"events\")||Object.create(null))[u.type]||[],c=C.event.special[u.type]||{};for(a[0]=u,e=1;e<arguments.length;e++)a[e]=arguments[e];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){for(s=C.event.handlers.call(this,u,l),e=0;(i=s[e++])&&!u.isPropagationStopped();)for(u.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!u.isImmediatePropagationStopped();)u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((C.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(t,e){var n,r,i,o,s,a=[],u=e.delegateCount,l=t.target;if(u&&l.nodeType&&!(\"click\"===t.type&&t.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==t.type||!0!==l.disabled)){for(o=[],s={},n=0;n<u;n++)void 0===s[i=(r=e[n]).selector+\" \"]&&(s[i]=r.needsContext?C(i,this).index(l)>-1:C.find(i,this,null,[l]).length),s[i]&&o.push(r);o.length&&a.push({elem:l,handlers:o})}return l=this,u<e.length&&a.push({elem:l,handlers:e.slice(u)}),a},addProp:function(t,e){Object.defineProperty(C.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(t){return t[C.expando]?t:new C.Event(t)},special:{load:{noBubble:!0},click:{setup:function(t){var e=this||t;return vt.test(e.type)&&e.click&&D(e,\"input\")&&kt(e,\"click\",At),!1},trigger:function(t){var e=this||t;return vt.test(e.type)&&e.click&&D(e,\"input\")&&kt(e,\"click\"),!0},_default:function(t){var e=t.target;return vt.test(e.type)&&e.click&&D(e,\"input\")&&J.get(e,\"click\")||D(e,\"a\")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}}},C.removeEvent=function(t,e,n){t.removeEventListener&&t.removeEventListener(e,n)},C.Event=function(t,e){if(!(this instanceof C.Event))return new C.Event(t,e);t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&!1===t.returnValue?At:St,this.target=t.target&&3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&&C.extend(this,e),this.timeStamp=t&&t.timeStamp||Date.now(),this[C.expando]=!0},C.Event.prototype={constructor:C.Event,isDefaultPrevented:St,isPropagationStopped:St,isImmediatePropagationStopped:St,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=At,t&&!this.isSimulated&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=At,t&&!this.isSimulated&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=At,t&&!this.isSimulated&&t.stopImmediatePropagation(),this.stopPropagation()}},C.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},C.event.addProp),C.each({focus:\"focusin\",blur:\"focusout\"},(function(t,e){C.event.special[t]={setup:function(){return kt(this,t,$t),!1},trigger:function(){return kt(this,t),!0},_default:function(e){return J.get(e.target,t)},delegateType:e}})),C.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},(function(t,e){C.event.special[t]={delegateType:e,bindType:e,handle:function(t){var n,r=t.relatedTarget,i=t.handleObj;return r&&(r===this||C.contains(this,r))||(t.type=i.origType,n=i.handler.apply(this,arguments),t.type=e),n}}})),C.fn.extend({on:function(t,e,n,r){return Et(this,t,e,n,r)},one:function(t,e,n,r){return Et(this,t,e,n,r,1)},off:function(t,e,n){var r,i;if(t&&t.preventDefault&&t.handleObj)return r=t.handleObj,C(t.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof t){for(i in t)this.off(i,e,t[i]);return this}return!1!==e&&\"function\"!=typeof e||(n=e,e=void 0),!1===n&&(n=St),this.each((function(){C.event.remove(this,t,n,e)}))}});var Dt=/<script|<style|<link/i,jt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Ot=/^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;function Nt(t,e){return D(t,\"table\")&&D(11!==e.nodeType?e:e.firstChild,\"tr\")&&C(t).children(\"tbody\")[0]||t}function Rt(t){return t.type=(null!==t.getAttribute(\"type\"))+\"/\"+t.type,t}function It(t){return\"true/\"===(t.type||\"\").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute(\"type\"),t}function Lt(t,e){var n,r,i,o,s,a;if(1===e.nodeType){if(J.hasData(t)&&(a=J.get(t).events))for(i in J.remove(e,\"handle events\"),a)for(n=0,r=a[i].length;n<r;n++)C.event.add(e,i,a[i][n]);Z.hasData(t)&&(o=Z.access(t),s=C.extend({},o),Z.set(e,s))}}function Pt(t,e){var n=e.nodeName.toLowerCase();\"input\"===n&&vt.test(t.type)?e.checked=t.checked:\"input\"!==n&&\"textarea\"!==n||(e.defaultValue=t.defaultValue)}function qt(t,e,n,r){e=u(e);var i,o,s,a,l,c,f=0,p=t.length,h=p-1,d=e[0],g=m(d);if(g||p>1&&\"string\"==typeof d&&!v.checkClone&&jt.test(d))return t.each((function(i){var o=t.eq(i);g&&(e[0]=d.call(this,i,o.html())),qt(o,e,n,r)}));if(p&&(o=(i=Tt(e,t[0].ownerDocument,!1,t,r)).firstChild,1===i.childNodes.length&&(i=o),o||r)){for(a=(s=C.map(wt(i,\"script\"),Rt)).length;f<p;f++)l=i,f!==h&&(l=C.clone(l,!0,!0),a&&C.merge(s,wt(l,\"script\"))),n.call(t[f],l,f);if(a)for(c=s[s.length-1].ownerDocument,C.map(s,It),f=0;f<a;f++)l=s[f],yt.test(l.type||\"\")&&!J.access(l,\"globalEval\")&&C.contains(c,l)&&(l.src&&\"module\"!==(l.type||\"\").toLowerCase()?C._evalUrl&&!l.noModule&&C._evalUrl(l.src,{nonce:l.nonce||l.getAttribute(\"nonce\")},c):_(l.textContent.replace(Ot,\"\"),l,c))}return t}function Ht(t,e,n){for(var r,i=e?C.filter(e,t):t,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||C.cleanData(wt(r)),r.parentNode&&(n&&at(r)&&_t(wt(r,\"script\")),r.parentNode.removeChild(r));return t}C.extend({htmlPrefilter:function(t){return t},clone:function(t,e,n){var r,i,o,s,a=t.cloneNode(!0),u=at(t);if(!(v.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||C.isXMLDoc(t)))for(s=wt(a),r=0,i=(o=wt(t)).length;r<i;r++)Pt(o[r],s[r]);if(e)if(n)for(o=o||wt(t),s=s||wt(a),r=0,i=o.length;r<i;r++)Lt(o[r],s[r]);else Lt(t,a);return(s=wt(a,\"script\")).length>0&&_t(s,!u&&wt(t,\"script\")),a},cleanData:function(t){for(var e,n,r,i=C.event.special,o=0;void 0!==(n=t[o]);o++)if(Y(n)){if(e=n[J.expando]){if(e.events)for(r in e.events)i[r]?C.event.remove(n,r):C.removeEvent(n,r,e.handle);n[J.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),C.fn.extend({detach:function(t){return Ht(this,t,!0)},remove:function(t){return Ht(this,t)},text:function(t){return W(this,(function(t){return void 0===t?C.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return qt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Nt(this,t).appendChild(t)}))},prepend:function(){return qt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Nt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return qt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return qt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(C.cleanData(wt(t,!1)),t.textContent=\"\");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return C.clone(this,t,e)}))},html:function(t){return W(this,(function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if(\"string\"==typeof t&&!Dt.test(t)&&!bt[(mt.exec(t)||[\"\",\"\"])[1].toLowerCase()]){t=C.htmlPrefilter(t);try{for(;n<r;n++)1===(e=this[n]||{}).nodeType&&(C.cleanData(wt(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)}),null,t,arguments.length)},replaceWith:function(){var t=[];return qt(this,arguments,(function(e){var n=this.parentNode;C.inArray(this,t)<0&&(C.cleanData(wt(this)),n&&n.replaceChild(e,this))}),t)}}),C.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},(function(t,e){C.fn[t]=function(t){for(var n,r=[],i=C(t),o=i.length-1,s=0;s<=o;s++)n=s===o?this:this.clone(!0),C(i[s])[e](n),l.apply(r,n.get());return this.pushStack(r)}}));var Mt=new RegExp(\"^(\"+rt+\")(?!px)[a-z%]+$\",\"i\"),Ut=/^--/,Ft=function(t){var e=t.ownerDocument.defaultView;return e&&e.opener||(e=r),e.getComputedStyle(t)},zt=function(t,e,n){var r,i,o={};for(i in e)o[i]=t.style[i],t.style[i]=e[i];for(i in r=n.call(t),e)t.style[i]=o[i];return r},Bt=new RegExp(ot.join(\"|\"),\"i\"),Wt=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",Gt=new RegExp(\"^\"+Wt+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+Wt+\"+$\",\"g\");function Vt(t,e,n){var r,i,o,s,a=Ut.test(e),u=t.style;return(n=n||Ft(t))&&(s=n.getPropertyValue(e)||n[e],a&&s&&(s=s.replace(Gt,\"$1\")||void 0),\"\"!==s||at(t)||(s=C.style(t,e)),!v.pixelBoxStyles()&&Mt.test(s)&&Bt.test(e)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=s,s=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==s?s+\"\":s}function Kt(t,e){return{get:function(){if(!t())return(this.get=e).apply(this,arguments);delete this.get}}}!function(){function t(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",st.appendChild(l).appendChild(c);var t=r.getComputedStyle(c);n=\"1%\"!==t.top,u=12===e(t.marginLeft),c.style.right=\"60%\",s=36===e(t.right),i=36===e(t.width),c.style.position=\"absolute\",o=12===e(c.offsetWidth/3),st.removeChild(l),c=null}}function e(t){return Math.round(parseFloat(t))}var n,i,o,s,a,u,l=b.createElement(\"div\"),c=b.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",v.clearCloneStyle=\"content-box\"===c.style.backgroundClip,C.extend(v,{boxSizingReliable:function(){return t(),i},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),n},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),o},reliableTrDimensions:function(){var t,e,n,i;return null==a&&(t=b.createElement(\"table\"),e=b.createElement(\"tr\"),n=b.createElement(\"div\"),t.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",e.style.cssText=\"border:1px solid\",e.style.height=\"1px\",n.style.height=\"9px\",n.style.display=\"block\",st.appendChild(t).appendChild(e).appendChild(n),i=r.getComputedStyle(e),a=parseInt(i.height,10)+parseInt(i.borderTopWidth,10)+parseInt(i.borderBottomWidth,10)===e.offsetHeight,st.removeChild(t)),a}}))}();var Xt=[\"Webkit\",\"Moz\",\"ms\"],Yt=b.createElement(\"div\").style,Qt={};function Jt(t){var e=C.cssProps[t]||Qt[t];return e||(t in Yt?t:Qt[t]=function(t){for(var e=t[0].toUpperCase()+t.slice(1),n=Xt.length;n--;)if((t=Xt[n]+e)in Yt)return t}(t)||t)}var Zt=/^(none|table(?!-c[ea]).+)/,te={position:\"absolute\",visibility:\"hidden\",display:\"block\"},ee={letterSpacing:\"0\",fontWeight:\"400\"};function ne(t,e,n){var r=it.exec(e);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):e}function re(t,e,n,r,i,o){var s=\"width\"===e?1:0,a=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;s<4;s+=2)\"margin\"===n&&(u+=C.css(t,n+ot[s],!0,i)),r?(\"content\"===n&&(u-=C.css(t,\"padding\"+ot[s],!0,i)),\"margin\"!==n&&(u-=C.css(t,\"border\"+ot[s]+\"Width\",!0,i))):(u+=C.css(t,\"padding\"+ot[s],!0,i),\"padding\"!==n?u+=C.css(t,\"border\"+ot[s]+\"Width\",!0,i):a+=C.css(t,\"border\"+ot[s]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(t[\"offset\"+e[0].toUpperCase()+e.slice(1)]-o-u-a-.5))||0),u}function ie(t,e,n){var r=Ft(t),i=(!v.boxSizingReliable()||n)&&\"border-box\"===C.css(t,\"boxSizing\",!1,r),o=i,s=Vt(t,e,r),a=\"offset\"+e[0].toUpperCase()+e.slice(1);if(Mt.test(s)){if(!n)return s;s=\"auto\"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&D(t,\"tr\")||\"auto\"===s||!parseFloat(s)&&\"inline\"===C.css(t,\"display\",!1,r))&&t.getClientRects().length&&(i=\"border-box\"===C.css(t,\"boxSizing\",!1,r),(o=a in t)&&(s=t[a])),(s=parseFloat(s)||0)+re(t,e,n||(i?\"border\":\"content\"),o,r,s)+\"px\"}function oe(t,e,n,r,i){return new oe.prototype.init(t,e,n,r,i)}C.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Vt(t,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var i,o,s,a=X(e),u=Ut.test(e),l=t.style;if(u||(e=Jt(a)),s=C.cssHooks[e]||C.cssHooks[a],void 0===n)return s&&\"get\"in s&&void 0!==(i=s.get(t,!1,r))?i:l[e];\"string\"===(o=typeof n)&&(i=it.exec(n))&&i[1]&&(n=ct(t,e,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(C.cssNumber[a]?\"\":\"px\")),v.clearCloneStyle||\"\"!==n||0!==e.indexOf(\"background\")||(l[e]=\"inherit\"),s&&\"set\"in s&&void 0===(n=s.set(t,n,r))||(u?l.setProperty(e,n):l[e]=n))}},css:function(t,e,n,r){var i,o,s,a=X(e);return Ut.test(e)||(e=Jt(a)),(s=C.cssHooks[e]||C.cssHooks[a])&&\"get\"in s&&(i=s.get(t,!0,n)),void 0===i&&(i=Vt(t,e,r)),\"normal\"===i&&e in ee&&(i=ee[e]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),C.each([\"height\",\"width\"],(function(t,e){C.cssHooks[e]={get:function(t,n,r){if(n)return!Zt.test(C.css(t,\"display\"))||t.getClientRects().length&&t.getBoundingClientRect().width?ie(t,e,r):zt(t,te,(function(){return ie(t,e,r)}))},set:function(t,n,r){var i,o=Ft(t),s=!v.scrollboxSize()&&\"absolute\"===o.position,a=(s||r)&&\"border-box\"===C.css(t,\"boxSizing\",!1,o),u=r?re(t,e,r,a,o):0;return a&&s&&(u-=Math.ceil(t[\"offset\"+e[0].toUpperCase()+e.slice(1)]-parseFloat(o[e])-re(t,e,\"border\",!1,o)-.5)),u&&(i=it.exec(n))&&\"px\"!==(i[3]||\"px\")&&(t.style[e]=n,n=C.css(t,e)),ne(0,n,u)}}})),C.cssHooks.marginLeft=Kt(v.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Vt(t,\"marginLeft\"))||t.getBoundingClientRect().left-zt(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+\"px\"})),C.each({margin:\"\",padding:\"\",border:\"Width\"},(function(t,e){C.cssHooks[t+e]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[t+ot[r]+e]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==t&&(C.cssHooks[t+e].set=ne)})),C.fn.extend({css:function(t,e){return W(this,(function(t,e,n){var r,i,o={},s=0;if(Array.isArray(e)){for(r=Ft(t),i=e.length;s<i;s++)o[e[s]]=C.css(t,e[s],!1,r);return o}return void 0!==n?C.style(t,e,n):C.css(t,e)}),t,e,arguments.length>1)}}),C.Tween=oe,oe.prototype={constructor:oe,init:function(t,e,n,r,i,o){this.elem=t,this.prop=n,this.easing=i||C.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=o||(C.cssNumber[n]?\"\":\"px\")},cur:function(){var t=oe.propHooks[this.prop];return t&&t.get?t.get(this):oe.propHooks._default.get(this)},run:function(t){var e,n=oe.propHooks[this.prop];return this.options.duration?this.pos=e=C.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):oe.propHooks._default.set(this),this}},oe.prototype.init.prototype=oe.prototype,oe.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=C.css(t.elem,t.prop,\"\"))&&\"auto\"!==e?e:0},set:function(t){C.fx.step[t.prop]?C.fx.step[t.prop](t):1!==t.elem.nodeType||!C.cssHooks[t.prop]&&null==t.elem.style[Jt(t.prop)]?t.elem[t.prop]=t.now:C.style(t.elem,t.prop,t.now+t.unit)}}},oe.propHooks.scrollTop=oe.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},C.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:\"swing\"},C.fx=oe.prototype.init,C.fx.step={};var se,ae,ue=/^(?:toggle|show|hide)$/,le=/queueHooks$/;function ce(){ae&&(!1===b.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(ce):r.setTimeout(ce,C.fx.interval),C.fx.tick())}function fe(){return r.setTimeout((function(){se=void 0})),se=Date.now()}function pe(t,e){var n,r=0,i={height:t};for(e=e?1:0;r<4;r+=2-e)i[\"margin\"+(n=ot[r])]=i[\"padding\"+n]=t;return e&&(i.opacity=i.width=t),i}function he(t,e,n){for(var r,i=(de.tweeners[e]||[]).concat(de.tweeners[\"*\"]),o=0,s=i.length;o<s;o++)if(r=i[o].call(n,e,t))return r}function de(t,e,n){var r,i,o=0,s=de.prefilters.length,a=C.Deferred().always((function(){delete u.elem})),u=function(){if(i)return!1;for(var e=se||fe(),n=Math.max(0,l.startTime+l.duration-e),r=1-(n/l.duration||0),o=0,s=l.tweens.length;o<s;o++)l.tweens[o].run(r);return a.notifyWith(t,[l,r,n]),r<1&&s?n:(s||a.notifyWith(t,[l,1,0]),a.resolveWith(t,[l]),!1)},l=a.promise({elem:t,props:C.extend({},e),opts:C.extend(!0,{specialEasing:{},easing:C.easing._default},n),originalProperties:e,originalOptions:n,startTime:se||fe(),duration:n.duration,tweens:[],createTween:function(e,n){var r=C.Tween(t,l.opts,e,n,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(r),r},stop:function(e){var n=0,r=e?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return e?(a.notifyWith(t,[l,1,0]),a.resolveWith(t,[l,e])):a.rejectWith(t,[l,e]),this}}),c=l.props;for(!function(t,e){var n,r,i,o,s;for(n in t)if(i=e[r=X(n)],o=t[n],Array.isArray(o)&&(i=o[1],o=t[n]=o[0]),n!==r&&(t[r]=o,delete t[n]),(s=C.cssHooks[r])&&\"expand\"in s)for(n in o=s.expand(o),delete t[r],o)n in t||(t[n]=o[n],e[n]=i);else e[r]=i}(c,l.opts.specialEasing);o<s;o++)if(r=de.prefilters[o].call(l,t,c,l.opts))return m(r.stop)&&(C._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return C.map(c,he,l),m(l.opts.start)&&l.opts.start.call(t,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),C.fx.timer(C.extend(u,{elem:t,anim:l,queue:l.opts.queue})),l}C.Animation=C.extend(de,{tweeners:{\"*\":[function(t,e){var n=this.createTween(t,e);return ct(n.elem,t,it.exec(e),n),n}]},tweener:function(t,e){m(t)?(e=t,t=[\"*\"]):t=t.match(q);for(var n,r=0,i=t.length;r<i;r++)n=t[r],de.tweeners[n]=de.tweeners[n]||[],de.tweeners[n].unshift(e)},prefilters:[function(t,e,n){var r,i,o,s,a,u,l,c,f=\"width\"in e||\"height\"in e,p=this,h={},d=t.style,g=t.nodeType&&lt(t),v=J.get(t,\"fxshow\");for(r in n.queue||(null==(s=C._queueHooks(t,\"fx\")).unqueued&&(s.unqueued=0,a=s.empty.fire,s.empty.fire=function(){s.unqueued||a()}),s.unqueued++,p.always((function(){p.always((function(){s.unqueued--,C.queue(t,\"fx\").length||s.empty.fire()}))}))),e)if(i=e[r],ue.test(i)){if(delete e[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}h[r]=v&&v[r]||C.style(t,r)}if((u=!C.isEmptyObject(e))||!C.isEmptyObject(h))for(r in f&&1===t.nodeType&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],null==(l=v&&v.display)&&(l=J.get(t,\"display\")),\"none\"===(c=C.css(t,\"display\"))&&(l?c=l:(ht([t],!0),l=t.style.display||l,c=C.css(t,\"display\"),ht([t]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===C.css(t,\"float\")&&(u||(p.done((function(){d.display=l})),null==l&&(c=d.display,l=\"none\"===c?\"\":c)),d.display=\"inline-block\")),n.overflow&&(d.overflow=\"hidden\",p.always((function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}))),u=!1,h)u||(v?\"hidden\"in v&&(g=v.hidden):v=J.access(t,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&ht([t],!0),p.done((function(){for(r in g||ht([t]),J.remove(t,\"fxshow\"),h)C.style(t,r,h[r])}))),u=he(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(t,e){e?de.prefilters.unshift(t):de.prefilters.push(t)}}),C.speed=function(t,e,n){var r=t&&\"object\"==typeof t?C.extend({},t):{complete:n||!n&&e||m(t)&&t,duration:t,easing:n&&e||e&&!m(e)&&e};return C.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in C.fx.speeds?r.duration=C.fx.speeds[r.duration]:r.duration=C.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&C.dequeue(this,r.queue)},r},C.fn.extend({fadeTo:function(t,e,n,r){return this.filter(lt).css(\"opacity\",0).show().end().animate({opacity:e},t,n,r)},animate:function(t,e,n,r){var i=C.isEmptyObject(t),o=C.speed(e,n,r),s=function(){var e=de(this,C.extend({},t),o);(i||J.get(this,\"finish\"))&&e.stop(!0)};return s.finish=s,i||!1===o.queue?this.each(s):this.queue(o.queue,s)},stop:function(t,e,n){var r=function(t){var e=t.stop;delete t.stop,e(n)};return\"string\"!=typeof t&&(n=e,e=t,t=void 0),e&&this.queue(t||\"fx\",[]),this.each((function(){var e=!0,i=null!=t&&t+\"queueHooks\",o=C.timers,s=J.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&le.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=t&&o[i].queue!==t||(o[i].anim.stop(n),e=!1,o.splice(i,1));!e&&n||C.dequeue(this,t)}))},finish:function(t){return!1!==t&&(t=t||\"fx\"),this.each((function(){var e,n=J.get(this),r=n[t+\"queue\"],i=n[t+\"queueHooks\"],o=C.timers,s=r?r.length:0;for(n.finish=!0,C.queue(this,t,[]),i&&i.stop&&i.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<s;e++)r[e]&&r[e].finish&&r[e].finish.call(this);delete n.finish}))}}),C.each([\"toggle\",\"show\",\"hide\"],(function(t,e){var n=C.fn[e];C.fn[e]=function(t,r,i){return null==t||\"boolean\"==typeof t?n.apply(this,arguments):this.animate(pe(e,!0),t,r,i)}})),C.each({slideDown:pe(\"show\"),slideUp:pe(\"hide\"),slideToggle:pe(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},(function(t,e){C.fn[t]=function(t,n,r){return this.animate(e,t,n,r)}})),C.timers=[],C.fx.tick=function(){var t,e=0,n=C.timers;for(se=Date.now();e<n.length;e++)(t=n[e])()||n[e]!==t||n.splice(e--,1);n.length||C.fx.stop(),se=void 0},C.fx.timer=function(t){C.timers.push(t),C.fx.start()},C.fx.interval=13,C.fx.start=function(){ae||(ae=!0,ce())},C.fx.stop=function(){ae=null},C.fx.speeds={slow:600,fast:200,_default:400},C.fn.delay=function(t,e){return t=C.fx&&C.fx.speeds[t]||t,e=e||\"fx\",this.queue(e,(function(e,n){var i=r.setTimeout(e,t);n.stop=function(){r.clearTimeout(i)}}))},function(){var t=b.createElement(\"input\"),e=b.createElement(\"select\").appendChild(b.createElement(\"option\"));t.type=\"checkbox\",v.checkOn=\"\"!==t.value,v.optSelected=e.selected,(t=b.createElement(\"input\")).value=\"t\",t.type=\"radio\",v.radioValue=\"t\"===t.value}();var ge,ve=C.expr.attrHandle;C.fn.extend({attr:function(t,e){return W(this,C.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each((function(){C.removeAttr(this,t)}))}}),C.extend({attr:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?C.prop(t,e,n):(1===o&&C.isXMLDoc(t)||(i=C.attrHooks[e.toLowerCase()]||(C.expr.match.bool.test(e)?ge:void 0)),void 0!==n?null===n?void C.removeAttr(t,e):i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:(t.setAttribute(e,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(t,e))?r:null==(r=C.find.attr(t,e))?void 0:r)},attrHooks:{type:{set:function(t,e){if(!v.radioValue&&\"radio\"===e&&D(t,\"input\")){var n=t.value;return t.setAttribute(\"type\",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,i=e&&e.match(q);if(i&&1===t.nodeType)for(;n=i[r++];)t.removeAttribute(n)}}),ge={set:function(t,e,n){return!1===e?C.removeAttr(t,n):t.setAttribute(n,n),n}},C.each(C.expr.match.bool.source.match(/\\w+/g),(function(t,e){var n=ve[e]||C.find.attr;ve[e]=function(t,e,r){var i,o,s=e.toLowerCase();return r||(o=ve[s],ve[s]=i,i=null!=n(t,e,r)?s:null,ve[s]=o),i}}));var me=/^(?:input|select|textarea|button)$/i,ye=/^(?:a|area)$/i;function be(t){return(t.match(q)||[]).join(\" \")}function we(t){return t.getAttribute&&t.getAttribute(\"class\")||\"\"}function _e(t){return Array.isArray(t)?t:\"string\"==typeof t&&t.match(q)||[]}C.fn.extend({prop:function(t,e){return W(this,C.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[C.propFix[t]||t]}))}}),C.extend({prop:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&C.isXMLDoc(t)||(e=C.propFix[e]||e,i=C.propHooks[e]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:t[e]=n:i&&\"get\"in i&&null!==(r=i.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=C.find.attr(t,\"tabindex\");return e?parseInt(e,10):me.test(t.nodeName)||ye.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),v.optSelected||(C.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),C.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){C.propFix[this.toLowerCase()]=this})),C.fn.extend({addClass:function(t){var e,n,r,i,o,s;return m(t)?this.each((function(e){C(this).addClass(t.call(this,e,we(this)))})):(e=_e(t)).length?this.each((function(){if(r=we(this),n=1===this.nodeType&&\" \"+be(r)+\" \"){for(o=0;o<e.length;o++)i=e[o],n.indexOf(\" \"+i+\" \")<0&&(n+=i+\" \");s=be(n),r!==s&&this.setAttribute(\"class\",s)}})):this},removeClass:function(t){var e,n,r,i,o,s;return m(t)?this.each((function(e){C(this).removeClass(t.call(this,e,we(this)))})):arguments.length?(e=_e(t)).length?this.each((function(){if(r=we(this),n=1===this.nodeType&&\" \"+be(r)+\" \"){for(o=0;o<e.length;o++)for(i=e[o];n.indexOf(\" \"+i+\" \")>-1;)n=n.replace(\" \"+i+\" \",\" \");s=be(n),r!==s&&this.setAttribute(\"class\",s)}})):this:this.attr(\"class\",\"\")},toggleClass:function(t,e){var n,r,i,o,s=typeof t,a=\"string\"===s||Array.isArray(t);return m(t)?this.each((function(n){C(this).toggleClass(t.call(this,n,we(this),e),e)})):\"boolean\"==typeof e&&a?e?this.addClass(t):this.removeClass(t):(n=_e(t),this.each((function(){if(a)for(o=C(this),i=0;i<n.length;i++)r=n[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&\"boolean\"!==s||((r=we(this))&&J.set(this,\"__className__\",r),this.setAttribute&&this.setAttribute(\"class\",r||!1===t?\"\":J.get(this,\"__className__\")||\"\"))})))},hasClass:function(t){var e,n,r=0;for(e=\" \"+t+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+be(we(n))+\" \").indexOf(e)>-1)return!0;return!1}});var xe=/\\r/g;C.fn.extend({val:function(t){var e,n,r,i=this[0];return arguments.length?(r=m(t),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?t.call(this,n,C(this).val()):t)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=C.map(i,(function(t){return null==t?\"\":t+\"\"}))),(e=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&\"set\"in e&&void 0!==e.set(this,i,\"value\")||(this.value=i))}))):i?(e=C.valHooks[i.type]||C.valHooks[i.nodeName.toLowerCase()])&&\"get\"in e&&void 0!==(n=e.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(xe,\"\"):null==n?\"\":n:void 0}}),C.extend({valHooks:{option:{get:function(t){var e=C.find.attr(t,\"value\");return null!=e?e:be(C.text(t))}},select:{get:function(t){var e,n,r,i=t.options,o=t.selectedIndex,s=\"select-one\"===t.type,a=s?null:[],u=s?o+1:i.length;for(r=o<0?u:s?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!D(n.parentNode,\"optgroup\"))){if(e=C(n).val(),s)return e;a.push(e)}return a},set:function(t,e){for(var n,r,i=t.options,o=C.makeArray(e),s=i.length;s--;)((r=i[s]).selected=C.inArray(C.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),C.each([\"radio\",\"checkbox\"],(function(){C.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=C.inArray(C(t).val(),e)>-1}},v.checkOn||(C.valHooks[this].get=function(t){return null===t.getAttribute(\"value\")?\"on\":t.value})})),v.focusin=\"onfocusin\"in r;var Te=/^(?:focusinfocus|focusoutblur)$/,Ce=function(t){t.stopPropagation()};C.extend(C.event,{trigger:function(t,e,n,i){var o,s,a,u,l,c,f,p,d=[n||b],g=h.call(t,\"type\")?t.type:t,v=h.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=p=a=n=n||b,3!==n.nodeType&&8!==n.nodeType&&!Te.test(g+C.event.triggered)&&(g.indexOf(\".\")>-1&&(v=g.split(\".\"),g=v.shift(),v.sort()),l=g.indexOf(\":\")<0&&\"on\"+g,(t=t[C.expando]?t:new C.Event(g,\"object\"==typeof t&&t)).isTrigger=i?2:3,t.namespace=v.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+v.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:C.makeArray(e,[t]),f=C.event.special[g]||{},i||!f.trigger||!1!==f.trigger.apply(n,e))){if(!i&&!f.noBubble&&!y(n)){for(u=f.delegateType||g,Te.test(u+g)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(n.ownerDocument||b)&&d.push(a.defaultView||a.parentWindow||r)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)p=s,t.type=o>1?u:f.bindType||g,(c=(J.get(s,\"events\")||Object.create(null))[t.type]&&J.get(s,\"handle\"))&&c.apply(s,e),(c=l&&s[l])&&c.apply&&Y(s)&&(t.result=c.apply(s,e),!1===t.result&&t.preventDefault());return t.type=g,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(d.pop(),e)||!Y(n)||l&&m(n[g])&&!y(n)&&((a=n[l])&&(n[l]=null),C.event.triggered=g,t.isPropagationStopped()&&p.addEventListener(g,Ce),n[g](),t.isPropagationStopped()&&p.removeEventListener(g,Ce),C.event.triggered=void 0,a&&(n[l]=a)),t.result}},simulate:function(t,e,n){var r=C.extend(new C.Event,n,{type:t,isSimulated:!0});C.event.trigger(r,null,e)}}),C.fn.extend({trigger:function(t,e){return this.each((function(){C.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return C.event.trigger(t,e,n,!0)}}),v.focusin||C.each({focus:\"focusin\",blur:\"focusout\"},(function(t,e){var n=function(t){C.event.simulate(e,t.target,C.event.fix(t))};C.event.special[e]={setup:function(){var r=this.ownerDocument||this.document||this,i=J.access(r,e);i||r.addEventListener(t,n,!0),J.access(r,e,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,i=J.access(r,e)-1;i?J.access(r,e,i):(r.removeEventListener(t,n,!0),J.remove(r,e))}}}));var Ae=r.location,Se={guid:Date.now()},$e=/\\?/;C.parseXML=function(t){var e,n;if(!t||\"string\"!=typeof t)return null;try{e=(new r.DOMParser).parseFromString(t,\"text/xml\")}catch(t){}return n=e&&e.getElementsByTagName(\"parsererror\")[0],e&&!n||C.error(\"Invalid XML: \"+(n?C.map(n.childNodes,(function(t){return t.textContent})).join(\"\\n\"):t)),e};var Ee=/\\[\\]$/,ke=/\\r?\\n/g,De=/^(?:submit|button|image|reset|file)$/i,je=/^(?:input|select|textarea|keygen)/i;function Oe(t,e,n,r){var i;if(Array.isArray(e))C.each(e,(function(e,i){n||Ee.test(t)?r(t,i):Oe(t+\"[\"+(\"object\"==typeof i&&null!=i?e:\"\")+\"]\",i,n,r)}));else if(n||\"object\"!==x(e))r(t,e);else for(i in e)Oe(t+\"[\"+i+\"]\",e[i],n,r)}C.param=function(t,e){var n,r=[],i=function(t,e){var n=m(e)?e():e;r[r.length]=encodeURIComponent(t)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==t)return\"\";if(Array.isArray(t)||t.jquery&&!C.isPlainObject(t))C.each(t,(function(){i(this.name,this.value)}));else for(n in t)Oe(n,t[n],e,i);return r.join(\"&\")},C.fn.extend({serialize:function(){return C.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=C.prop(this,\"elements\");return t?C.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!C(this).is(\":disabled\")&&je.test(this.nodeName)&&!De.test(t)&&(this.checked||!vt.test(t))})).map((function(t,e){var n=C(this).val();return null==n?null:Array.isArray(n)?C.map(n,(function(t){return{name:e.name,value:t.replace(ke,\"\\r\\n\")}})):{name:e.name,value:n.replace(ke,\"\\r\\n\")}})).get()}});var Ne=/%20/g,Re=/#.*$/,Ie=/([?&])_=[^&]*/,Le=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pe=/^(?:GET|HEAD)$/,qe=/^\\/\\//,He={},Me={},Ue=\"*/\".concat(\"*\"),Fe=b.createElement(\"a\");function ze(t){return function(e,n){\"string\"!=typeof e&&(n=e,e=\"*\");var r,i=0,o=e.toLowerCase().match(q)||[];if(m(n))for(;r=o[i++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(t[r]=t[r]||[]).unshift(n)):(t[r]=t[r]||[]).push(n)}}function Be(t,e,n,r){var i={},o=t===Me;function s(a){var u;return i[a]=!0,C.each(t[a]||[],(function(t,a){var l=a(e,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(e.dataTypes.unshift(l),s(l),!1)})),u}return s(e.dataTypes[0])||!i[\"*\"]&&s(\"*\")}function We(t,e){var n,r,i=C.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((i[n]?t:r||(r={}))[n]=e[n]);return r&&C.extend(!0,t,r),t}Fe.href=Ae.href,C.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ae.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ae.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Ue,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":C.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?We(We(t,C.ajaxSettings),e):We(C.ajaxSettings,t)},ajaxPrefilter:ze(He),ajaxTransport:ze(Me),ajax:function(t,e){\"object\"==typeof t&&(e=t,t=void 0),e=e||{};var n,i,o,s,a,u,l,c,f,p,h=C.ajaxSetup({},e),d=h.context||h,g=h.context&&(d.nodeType||d.jquery)?C(d):C.event,v=C.Deferred(),m=C.Callbacks(\"once memory\"),y=h.statusCode||{},w={},_={},x=\"canceled\",T={readyState:0,getResponseHeader:function(t){var e;if(l){if(!s)for(s={};e=Le.exec(o);)s[e[1].toLowerCase()+\" \"]=(s[e[1].toLowerCase()+\" \"]||[]).concat(e[2]);e=s[t.toLowerCase()+\" \"]}return null==e?null:e.join(\", \")},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(t,e){return null==l&&(t=_[t.toLowerCase()]=_[t.toLowerCase()]||t,w[t]=e),this},overrideMimeType:function(t){return null==l&&(h.mimeType=t),this},statusCode:function(t){var e;if(t)if(l)T.always(t[T.status]);else for(e in t)y[e]=[y[e],t[e]];return this},abort:function(t){var e=t||x;return n&&n.abort(e),A(0,e),this}};if(v.promise(T),h.url=((t||h.url||Ae.href)+\"\").replace(qe,Ae.protocol+\"//\"),h.type=e.method||e.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(q)||[\"\"],null==h.crossDomain){u=b.createElement(\"a\");try{u.href=h.url,u.href=u.href,h.crossDomain=Fe.protocol+\"//\"+Fe.host!=u.protocol+\"//\"+u.host}catch(t){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=C.param(h.data,h.traditional)),Be(He,h,e,T),l)return T;for(f in(c=C.event&&h.global)&&0==C.active++&&C.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Pe.test(h.type),i=h.url.replace(Re,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(Ne,\"+\")):(p=h.url.slice(i.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(i+=($e.test(i)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(i=i.replace(Ie,\"$1\"),p=($e.test(i)?\"&\":\"?\")+\"_=\"+Se.guid+++p),h.url=i+p),h.ifModified&&(C.lastModified[i]&&T.setRequestHeader(\"If-Modified-Since\",C.lastModified[i]),C.etag[i]&&T.setRequestHeader(\"If-None-Match\",C.etag[i])),(h.data&&h.hasContent&&!1!==h.contentType||e.contentType)&&T.setRequestHeader(\"Content-Type\",h.contentType),T.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+Ue+\"; q=0.01\":\"\"):h.accepts[\"*\"]),h.headers)T.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(!1===h.beforeSend.call(d,T,h)||l))return T.abort();if(x=\"abort\",m.add(h.complete),T.done(h.success),T.fail(h.error),n=Be(Me,h,e,T)){if(T.readyState=1,c&&g.trigger(\"ajaxSend\",[T,h]),l)return T;h.async&&h.timeout>0&&(a=r.setTimeout((function(){T.abort(\"timeout\")}),h.timeout));try{l=!1,n.send(w,A)}catch(t){if(l)throw t;A(-1,t)}}else A(-1,\"No Transport\");function A(t,e,s,u){var f,p,b,w,_,x=e;l||(l=!0,a&&r.clearTimeout(a),n=void 0,o=u||\"\",T.readyState=t>0?4:0,f=t>=200&&t<300||304===t,s&&(w=function(t,e,n){for(var r,i,o,s,a=t.contents,u=t.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader(\"Content-Type\"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||t.converters[i+\" \"+u[0]]){o=i;break}s||(s=i)}o=o||s}if(o)return o!==u[0]&&u.unshift(o),n[o]}(h,T,s)),!f&&C.inArray(\"script\",h.dataTypes)>-1&&C.inArray(\"json\",h.dataTypes)<0&&(h.converters[\"text script\"]=function(){}),w=function(t,e,n,r){var i,o,s,a,u,l={},c=t.dataTypes.slice();if(c[1])for(s in t.converters)l[s.toLowerCase()]=t.converters[s];for(o=c.shift();o;)if(t.responseFields[o]&&(n[t.responseFields[o]]=e),!u&&r&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(s=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((a=i.split(\" \"))[1]===o&&(s=l[u+\" \"+a[0]]||l[\"* \"+a[0]])){!0===s?s=l[i]:!0!==l[i]&&(o=a[0],c.unshift(a[1]));break}if(!0!==s)if(s&&t.throws)e=s(e);else try{e=s(e)}catch(t){return{state:\"parsererror\",error:s?t:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:e}}(h,w,T,f),f?(h.ifModified&&((_=T.getResponseHeader(\"Last-Modified\"))&&(C.lastModified[i]=_),(_=T.getResponseHeader(\"etag\"))&&(C.etag[i]=_)),204===t||\"HEAD\"===h.type?x=\"nocontent\":304===t?x=\"notmodified\":(x=w.state,p=w.data,f=!(b=w.error))):(b=x,!t&&x||(x=\"error\",t<0&&(t=0))),T.status=t,T.statusText=(e||x)+\"\",f?v.resolveWith(d,[p,x,T]):v.rejectWith(d,[T,x,b]),T.statusCode(y),y=void 0,c&&g.trigger(f?\"ajaxSuccess\":\"ajaxError\",[T,h,f?p:b]),m.fireWith(d,[T,x]),c&&(g.trigger(\"ajaxComplete\",[T,h]),--C.active||C.event.trigger(\"ajaxStop\")))}return T},getJSON:function(t,e,n){return C.get(t,e,n,\"json\")},getScript:function(t,e){return C.get(t,void 0,e,\"script\")}}),C.each([\"get\",\"post\"],(function(t,e){C[e]=function(t,n,r,i){return m(n)&&(i=i||r,r=n,n=void 0),C.ajax(C.extend({url:t,type:e,dataType:i,data:n,success:r},C.isPlainObject(t)&&t))}})),C.ajaxPrefilter((function(t){var e;for(e in t.headers)\"content-type\"===e.toLowerCase()&&(t.contentType=t.headers[e]||\"\")})),C._evalUrl=function(t,e,n){return C.ajax({url:t,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(t){C.globalEval(t,e,n)}})},C.fn.extend({wrapAll:function(t){var e;return this[0]&&(m(t)&&(t=t.call(this[0])),e=C(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return m(t)?this.each((function(e){C(this).wrapInner(t.call(this,e))})):this.each((function(){var e=C(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=m(t);return this.each((function(n){C(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not(\"body\").each((function(){C(this).replaceWith(this.childNodes)})),this}}),C.expr.pseudos.hidden=function(t){return!C.expr.pseudos.visible(t)},C.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},C.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(t){}};var Ge={0:200,1223:204},Ve=C.ajaxSettings.xhr();v.cors=!!Ve&&\"withCredentials\"in Ve,v.ajax=Ve=!!Ve,C.ajaxTransport((function(t){var e,n;if(v.cors||Ve&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];for(s in t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\"),i)a.setRequestHeader(s,i[s]);e=function(t){return function(){e&&(e=n=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,\"abort\"===t?a.abort():\"error\"===t?\"number\"!=typeof a.status?o(0,\"error\"):o(a.status,a.statusText):o(Ge[a.status]||a.status,a.statusText,\"text\"!==(a.responseType||\"text\")||\"string\"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=e(),n=a.onerror=a.ontimeout=e(\"error\"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&r.setTimeout((function(){e&&n()}))},e=e(\"abort\");try{a.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}})),C.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),C.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(t){return C.globalEval(t),t}}}),C.ajaxPrefilter(\"script\",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type=\"GET\")})),C.ajaxTransport(\"script\",(function(t){var e,n;if(t.crossDomain||t.scriptAttrs)return{send:function(r,i){e=C(\"<script>\").attr(t.scriptAttrs||{}).prop({charset:t.scriptCharset,src:t.url}).on(\"load error\",n=function(t){e.remove(),n=null,t&&i(\"error\"===t.type?404:200,t.type)}),b.head.appendChild(e[0])},abort:function(){n&&n()}}}));var Ke,Xe=[],Ye=/(=)\\?(?=&|$)|\\?\\?/;C.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var t=Xe.pop()||C.expando+\"_\"+Se.guid++;return this[t]=!0,t}}),C.ajaxPrefilter(\"json jsonp\",(function(t,e,n){var i,o,s,a=!1!==t.jsonp&&(Ye.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ye.test(t.data)&&\"data\");if(a||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=m(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(Ye,\"$1\"+i):!1!==t.jsonp&&(t.url+=($e.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return s||C.error(i+\" was not called\"),s[0]},t.dataTypes[0]=\"json\",o=r[i],r[i]=function(){s=arguments},n.always((function(){void 0===o?C(r).removeProp(i):r[i]=o,t[i]&&(t.jsonpCallback=e.jsonpCallback,Xe.push(i)),s&&m(o)&&o(s[0]),s=o=void 0})),\"script\"})),v.createHTMLDocument=((Ke=b.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Ke.childNodes.length),C.parseHTML=function(t,e,n){return\"string\"!=typeof t?[]:(\"boolean\"==typeof e&&(n=e,e=!1),e||(v.createHTMLDocument?((r=(e=b.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=b.location.href,e.head.appendChild(r)):e=b),o=!n&&[],(i=j.exec(t))?[e.createElement(i[1])]:(i=Tt([t],e,o),o&&o.length&&C(o).remove(),C.merge([],i.childNodes)));var r,i,o},C.fn.load=function(t,e,n){var r,i,o,s=this,a=t.indexOf(\" \");return a>-1&&(r=be(t.slice(a)),t=t.slice(0,a)),m(e)?(n=e,e=void 0):e&&\"object\"==typeof e&&(i=\"POST\"),s.length>0&&C.ajax({url:t,type:i||\"GET\",dataType:\"html\",data:e}).done((function(t){o=arguments,s.html(r?C(\"<div>\").append(C.parseHTML(t)).find(r):t)})).always(n&&function(t,e){s.each((function(){n.apply(this,o||[t.responseText,e,t])}))}),this},C.expr.pseudos.animated=function(t){return C.grep(C.timers,(function(e){return t===e.elem})).length},C.offset={setOffset:function(t,e,n){var r,i,o,s,a,u,l=C.css(t,\"position\"),c=C(t),f={};\"static\"===l&&(t.style.position=\"relative\"),a=c.offset(),o=C.css(t,\"top\"),u=C.css(t,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&(o+u).indexOf(\"auto\")>-1?(s=(r=c.position()).top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),m(e)&&(e=e.call(t,n,C.extend({},a))),null!=e.top&&(f.top=e.top-a.top+s),null!=e.left&&(f.left=e.left-a.left+i),\"using\"in e?e.using.call(t,f):c.css(f)}},C.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each((function(e){C.offset.setOffset(this,t,e)}));var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,n,r=this[0],i={top:0,left:0};if(\"fixed\"===C.css(r,\"position\"))e=r.getBoundingClientRect();else{for(e=this.offset(),n=r.ownerDocument,t=r.offsetParent||n.documentElement;t&&(t===n.body||t===n.documentElement)&&\"static\"===C.css(t,\"position\");)t=t.parentNode;t&&t!==r&&1===t.nodeType&&((i=C(t).offset()).top+=C.css(t,\"borderTopWidth\",!0),i.left+=C.css(t,\"borderLeftWidth\",!0))}return{top:e.top-i.top-C.css(r,\"marginTop\",!0),left:e.left-i.left-C.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent;t&&\"static\"===C.css(t,\"position\");)t=t.offsetParent;return t||st}))}}),C.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(t,e){var n=\"pageYOffset\"===e;C.fn[t]=function(r){return W(this,(function(t,r,i){var o;if(y(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===i)return o?o[e]:t[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):t[r]=i}),t,r,arguments.length)}})),C.each([\"top\",\"left\"],(function(t,e){C.cssHooks[e]=Kt(v.pixelPosition,(function(t,n){if(n)return n=Vt(t,e),Mt.test(n)?C(t).position()[e]+\"px\":n}))})),C.each({Height:\"height\",Width:\"width\"},(function(t,e){C.each({padding:\"inner\"+t,content:e,\"\":\"outer\"+t},(function(n,r){C.fn[r]=function(i,o){var s=arguments.length&&(n||\"boolean\"!=typeof i),a=n||(!0===i||!0===o?\"margin\":\"border\");return W(this,(function(e,n,i){var o;return y(e)?0===r.indexOf(\"outer\")?e[\"inner\"+t]:e.document.documentElement[\"client\"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body[\"scroll\"+t],o[\"scroll\"+t],e.body[\"offset\"+t],o[\"offset\"+t],o[\"client\"+t])):void 0===i?C.css(e,n,a):C.style(e,n,i,a)}),e,s?i:void 0,s)}}))})),C.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],(function(t,e){C.fn[e]=function(t){return this.on(e,t)}})),C.fn.extend({bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,r){return this.on(e,t,n,r)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,\"**\"):this.off(e,t||\"**\",n)},hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),C.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(t,e){C.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}));var Qe=/^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;C.proxy=function(t,e){var n,r,i;if(\"string\"==typeof e&&(n=t[e],e=t,t=n),m(t))return r=a.call(arguments,2),i=function(){return t.apply(e||this,r.concat(a.call(arguments)))},i.guid=t.guid=t.guid||C.guid++,i},C.holdReady=function(t){t?C.readyWait++:C.ready(!0)},C.isArray=Array.isArray,C.parseJSON=JSON.parse,C.nodeName=D,C.isFunction=m,C.isWindow=y,C.camelCase=X,C.type=x,C.now=Date.now,C.isNumeric=function(t){var e=C.type(t);return(\"number\"===e||\"string\"===e)&&!isNaN(t-parseFloat(t))},C.trim=function(t){return null==t?\"\":(t+\"\").replace(Qe,\"$1\")},void 0===(n=function(){return C}.apply(e,[]))||(t.exports=n);var Je=r.jQuery,Ze=r.$;return C.noConflict=function(t){return r.$===C&&(r.$=Ze),t&&r.jQuery===C&&(r.jQuery=Je),C},void 0===i&&(r.jQuery=r.$=C),C}))},486:function(t,e,n){var r;t=n.nmd(t),function(){var i,o=\"Expected a function\",s=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",u=16,l=32,c=64,f=128,p=256,h=1/0,d=9007199254740991,g=NaN,v=4294967295,m=[[\"ary\",f],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",u],[\"flip\",512],[\"partial\",l],[\"partialRight\",c],[\"rearg\",p]],y=\"[object Arguments]\",b=\"[object Array]\",w=\"[object Boolean]\",_=\"[object Date]\",x=\"[object Error]\",T=\"[object Function]\",C=\"[object GeneratorFunction]\",A=\"[object Map]\",S=\"[object Number]\",$=\"[object Object]\",E=\"[object Promise]\",k=\"[object RegExp]\",D=\"[object Set]\",j=\"[object String]\",O=\"[object Symbol]\",N=\"[object WeakMap]\",R=\"[object ArrayBuffer]\",I=\"[object DataView]\",L=\"[object Float32Array]\",P=\"[object Float64Array]\",q=\"[object Int8Array]\",H=\"[object Int16Array]\",M=\"[object Int32Array]\",U=\"[object Uint8Array]\",F=\"[object Uint8ClampedArray]\",z=\"[object Uint16Array]\",B=\"[object Uint32Array]\",W=/\\b__p \\+= '';/g,G=/\\b(__p \\+=) '' \\+/g,V=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,K=/&(?:amp|lt|gt|quot|#39);/g,X=/[&<>\"']/g,Y=RegExp(K.source),Q=RegExp(X.source),J=/<%-([\\s\\S]+?)%>/g,Z=/<%([\\s\\S]+?)%>/g,tt=/<%=([\\s\\S]+?)%>/g,et=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,nt=/^\\w*$/,rt=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,it=/[\\\\^$.*+?()[\\]{}|]/g,ot=RegExp(it.source),st=/^\\s+/,at=/\\s/,ut=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,lt=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ct=/,? & /,ft=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,pt=/[()=,{}\\[\\]\\/\\s]/,ht=/\\\\(\\\\)?/g,dt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,gt=/\\w*$/,vt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,yt=/^\\[object .+?Constructor\\]$/,bt=/^0o[0-7]+$/i,wt=/^(?:0|[1-9]\\d*)$/,_t=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,xt=/($^)/,Tt=/['\\n\\r\\u2028\\u2029\\\\]/g,Ct=\"\\\\ud800-\\\\udfff\",At=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",St=\"\\\\u2700-\\\\u27bf\",$t=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Et=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",kt=\"\\\\ufe0e\\\\ufe0f\",Dt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",jt=\"['’]\",Ot=\"[\"+Ct+\"]\",Nt=\"[\"+Dt+\"]\",Rt=\"[\"+At+\"]\",It=\"\\\\d+\",Lt=\"[\"+St+\"]\",Pt=\"[\"+$t+\"]\",qt=\"[^\"+Ct+Dt+It+St+$t+Et+\"]\",Ht=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Mt=\"[^\"+Ct+\"]\",Ut=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ft=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",zt=\"[\"+Et+\"]\",Bt=\"\\\\u200d\",Wt=\"(?:\"+Pt+\"|\"+qt+\")\",Gt=\"(?:\"+zt+\"|\"+qt+\")\",Vt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Kt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Xt=\"(?:\"+Rt+\"|\"+Ht+\")\"+\"?\",Yt=\"[\"+kt+\"]?\",Qt=Yt+Xt+(\"(?:\"+Bt+\"(?:\"+[Mt,Ut,Ft].join(\"|\")+\")\"+Yt+Xt+\")*\"),Jt=\"(?:\"+[Lt,Ut,Ft].join(\"|\")+\")\"+Qt,Zt=\"(?:\"+[Mt+Rt+\"?\",Rt,Ut,Ft,Ot].join(\"|\")+\")\",te=RegExp(jt,\"g\"),ee=RegExp(Rt,\"g\"),ne=RegExp(Ht+\"(?=\"+Ht+\")|\"+Zt+Qt,\"g\"),re=RegExp([zt+\"?\"+Pt+\"+\"+Vt+\"(?=\"+[Nt,zt,\"$\"].join(\"|\")+\")\",Gt+\"+\"+Kt+\"(?=\"+[Nt,zt+Wt,\"$\"].join(\"|\")+\")\",zt+\"?\"+Wt+\"+\"+Vt,zt+\"+\"+Kt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",It,Jt].join(\"|\"),\"g\"),ie=RegExp(\"[\"+Bt+Ct+At+kt+\"]\"),oe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,se=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ae=-1,ue={};ue[L]=ue[P]=ue[q]=ue[H]=ue[M]=ue[U]=ue[F]=ue[z]=ue[B]=!0,ue[y]=ue[b]=ue[R]=ue[w]=ue[I]=ue[_]=ue[x]=ue[T]=ue[A]=ue[S]=ue[$]=ue[k]=ue[D]=ue[j]=ue[N]=!1;var le={};le[y]=le[b]=le[R]=le[I]=le[w]=le[_]=le[L]=le[P]=le[q]=le[H]=le[M]=le[A]=le[S]=le[$]=le[k]=le[D]=le[j]=le[O]=le[U]=le[F]=le[z]=le[B]=!0,le[x]=le[T]=le[N]=!1;var ce={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},fe=parseFloat,pe=parseInt,he=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,de=\"object\"==typeof self&&self&&self.Object===Object&&self,ge=he||de||Function(\"return this\")(),ve=e&&!e.nodeType&&e,me=ve&&t&&!t.nodeType&&t,ye=me&&me.exports===ve,be=ye&&he.process,we=function(){try{var t=me&&me.require&&me.require(\"util\").types;return t||be&&be.binding&&be.binding(\"util\")}catch(t){}}(),_e=we&&we.isArrayBuffer,xe=we&&we.isDate,Te=we&&we.isMap,Ce=we&&we.isRegExp,Ae=we&&we.isSet,Se=we&&we.isTypedArray;function $e(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ee(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var s=t[i];e(r,s,n(s),t)}return r}function ke(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function De(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function je(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Oe(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var s=t[n];e(s,n,t)&&(o[i++]=s)}return o}function Ne(t,e){return!!(null==t?0:t.length)&&ze(t,e,0)>-1}function Re(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Ie(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Le(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Pe(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function qe(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function He(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Me=Ve(\"length\");function Ue(t,e,n){var r;return n(t,(function(t,n,i){if(e(t,n,i))return r=n,!1})),r}function Fe(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function ze(t,e,n){return e==e?function(t,e,n){var r=n-1,i=t.length;for(;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Fe(t,We,n)}function Be(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function We(t){return t!=t}function Ge(t,e){var n=null==t?0:t.length;return n?Ye(t,e)/n:g}function Ve(t){return function(e){return null==e?i:e[t]}}function Ke(t){return function(e){return null==t?i:t[e]}}function Xe(t,e,n,r,i){return i(t,(function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)})),n}function Ye(t,e){for(var n,r=-1,o=t.length;++r<o;){var s=e(t[r]);s!==i&&(n=n===i?s:n+s)}return n}function Qe(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Je(t){return t?t.slice(0,vn(t)+1).replace(st,\"\"):t}function Ze(t){return function(e){return t(e)}}function tn(t,e){return Ie(e,(function(e){return t[e]}))}function en(t,e){return t.has(e)}function nn(t,e){for(var n=-1,r=t.length;++n<r&&ze(e,t[n],0)>-1;);return n}function rn(t,e){for(var n=t.length;n--&&ze(e,t[n],0)>-1;);return n}var on=Ke({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),sn=Ke({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function an(t){return\"\\\\\"+ce[t]}function un(t){return ie.test(t)}function ln(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function cn(t,e){return function(n){return t(e(n))}}function fn(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var s=t[n];s!==e&&s!==a||(t[n]=a,o[i++]=n)}return o}function pn(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}function hn(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=[t,t]})),n}function dn(t){return un(t)?function(t){var e=ne.lastIndex=0;for(;ne.test(t);)++e;return e}(t):Me(t)}function gn(t){return un(t)?function(t){return t.match(ne)||[]}(t):function(t){return t.split(\"\")}(t)}function vn(t){for(var e=t.length;e--&&at.test(t.charAt(e)););return e}var mn=Ke({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"});var yn=function t(e){var n,r=(e=null==e?ge:yn.defaults(ge.Object(),e,yn.pick(ge,se))).Array,at=e.Date,Ct=e.Error,At=e.Function,St=e.Math,$t=e.Object,Et=e.RegExp,kt=e.String,Dt=e.TypeError,jt=r.prototype,Ot=At.prototype,Nt=$t.prototype,Rt=e[\"__core-js_shared__\"],It=Ot.toString,Lt=Nt.hasOwnProperty,Pt=0,qt=(n=/[^.]+$/.exec(Rt&&Rt.keys&&Rt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Ht=Nt.toString,Mt=It.call($t),Ut=ge._,Ft=Et(\"^\"+It.call(Lt).replace(it,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),zt=ye?e.Buffer:i,Bt=e.Symbol,Wt=e.Uint8Array,Gt=zt?zt.allocUnsafe:i,Vt=cn($t.getPrototypeOf,$t),Kt=$t.create,Xt=Nt.propertyIsEnumerable,Yt=jt.splice,Qt=Bt?Bt.isConcatSpreadable:i,Jt=Bt?Bt.iterator:i,Zt=Bt?Bt.toStringTag:i,ne=function(){try{var t=po($t,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ie=e.clearTimeout!==ge.clearTimeout&&e.clearTimeout,ce=at&&at.now!==ge.Date.now&&at.now,he=e.setTimeout!==ge.setTimeout&&e.setTimeout,de=St.ceil,ve=St.floor,me=$t.getOwnPropertySymbols,be=zt?zt.isBuffer:i,we=e.isFinite,Me=jt.join,Ke=cn($t.keys,$t),bn=St.max,wn=St.min,_n=at.now,xn=e.parseInt,Tn=St.random,Cn=jt.reverse,An=po(e,\"DataView\"),Sn=po(e,\"Map\"),$n=po(e,\"Promise\"),En=po(e,\"Set\"),kn=po(e,\"WeakMap\"),Dn=po($t,\"create\"),jn=kn&&new kn,On={},Nn=Ho(An),Rn=Ho(Sn),In=Ho($n),Ln=Ho(En),Pn=Ho(kn),qn=Bt?Bt.prototype:i,Hn=qn?qn.valueOf:i,Mn=qn?qn.toString:i;function Un(t){if(na(t)&&!Ws(t)&&!(t instanceof Wn)){if(t instanceof Bn)return t;if(Lt.call(t,\"__wrapped__\"))return Mo(t)}return new Bn(t)}var Fn=function(){function t(){}return function(e){if(!ea(e))return{};if(Kt)return Kt(e);t.prototype=e;var n=new t;return t.prototype=i,n}}();function zn(){}function Bn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=i}function Wn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=v,this.__views__=[]}function Gn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Kn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Xn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Kn;++e<n;)this.add(t[e])}function Yn(t){var e=this.__data__=new Vn(t);this.size=e.size}function Qn(t,e){var n=Ws(t),r=!n&&Bs(t),i=!n&&!r&&Xs(t),o=!n&&!r&&!i&&ca(t),s=n||r||i||o,a=s?Qe(t.length,kt):[],u=a.length;for(var l in t)!e&&!Lt.call(t,l)||s&&(\"length\"==l||i&&(\"offset\"==l||\"parent\"==l)||o&&(\"buffer\"==l||\"byteLength\"==l||\"byteOffset\"==l)||wo(l,u))||a.push(l);return a}function Jn(t){var e=t.length;return e?t[Xr(0,e-1)]:i}function Zn(t,e){return Lo(Di(t),ur(e,0,t.length))}function tr(t){return Lo(Di(t))}function er(t,e,n){(n!==i&&!Us(t[e],n)||n===i&&!(e in t))&&sr(t,e,n)}function nr(t,e,n){var r=t[e];Lt.call(t,e)&&Us(r,n)&&(n!==i||e in t)||sr(t,e,n)}function rr(t,e){for(var n=t.length;n--;)if(Us(t[n][0],e))return n;return-1}function ir(t,e,n,r){return hr(t,(function(t,i,o){e(r,t,n(t),o)})),r}function or(t,e){return t&&ji(e,Oa(e),t)}function sr(t,e,n){\"__proto__\"==e&&ne?ne(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ar(t,e){for(var n=-1,o=e.length,s=r(o),a=null==t;++n<o;)s[n]=a?i:$a(t,e[n]);return s}function ur(t,e,n){return t==t&&(n!==i&&(t=t<=n?t:n),e!==i&&(t=t>=e?t:e)),t}function lr(t,e,n,r,o,s){var a,u=1&e,l=2&e,c=4&e;if(n&&(a=o?n(t,r,o,s):n(t)),a!==i)return a;if(!ea(t))return t;var f=Ws(t);if(f){if(a=function(t){var e=t.length,n=new t.constructor(e);e&&\"string\"==typeof t[0]&&Lt.call(t,\"index\")&&(n.index=t.index,n.input=t.input);return n}(t),!u)return Di(t,a)}else{var p=vo(t),h=p==T||p==C;if(Xs(t))return Ci(t,u);if(p==$||p==y||h&&!o){if(a=l||h?{}:yo(t),!u)return l?function(t,e){return ji(t,go(t),e)}(t,function(t,e){return t&&ji(e,Na(e),t)}(a,t)):function(t,e){return ji(t,ho(t),e)}(t,or(a,t))}else{if(!le[p])return o?t:{};a=function(t,e,n){var r=t.constructor;switch(e){case R:return Ai(t);case w:case _:return new r(+t);case I:return function(t,e){var n=e?Ai(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case L:case P:case q:case H:case M:case U:case F:case z:case B:return Si(t,n);case A:return new r;case S:case j:return new r(t);case k:return function(t){var e=new t.constructor(t.source,gt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case D:return new r;case O:return i=t,Hn?$t(Hn.call(i)):{}}var i}(t,p,u)}}s||(s=new Yn);var d=s.get(t);if(d)return d;s.set(t,a),aa(t)?t.forEach((function(r){a.add(lr(r,e,n,r,t,s))})):ra(t)&&t.forEach((function(r,i){a.set(i,lr(r,e,n,i,t,s))}));var g=f?i:(c?l?oo:io:l?Na:Oa)(t);return ke(g||t,(function(r,i){g&&(r=t[i=r]),nr(a,i,lr(r,e,n,i,t,s))})),a}function cr(t,e,n){var r=n.length;if(null==t)return!r;for(t=$t(t);r--;){var o=n[r],s=e[o],a=t[o];if(a===i&&!(o in t)||!s(a))return!1}return!0}function fr(t,e,n){if(\"function\"!=typeof t)throw new Dt(o);return Oo((function(){t.apply(i,n)}),e)}function pr(t,e,n,r){var i=-1,o=Ne,s=!0,a=t.length,u=[],l=e.length;if(!a)return u;n&&(e=Ie(e,Ze(n))),r?(o=Re,s=!1):e.length>=200&&(o=en,s=!1,e=new Xn(e));t:for(;++i<a;){var c=t[i],f=null==n?c:n(c);if(c=r||0!==c?c:0,s&&f==f){for(var p=l;p--;)if(e[p]===f)continue t;u.push(c)}else o(e,f,r)||u.push(c)}return u}Un.templateSettings={escape:J,evaluate:Z,interpolate:tt,variable:\"\",imports:{_:Un}},Un.prototype=zn.prototype,Un.prototype.constructor=Un,Bn.prototype=Fn(zn.prototype),Bn.prototype.constructor=Bn,Wn.prototype=Fn(zn.prototype),Wn.prototype.constructor=Wn,Gn.prototype.clear=function(){this.__data__=Dn?Dn(null):{},this.size=0},Gn.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Gn.prototype.get=function(t){var e=this.__data__;if(Dn){var n=e[t];return n===s?i:n}return Lt.call(e,t)?e[t]:i},Gn.prototype.has=function(t){var e=this.__data__;return Dn?e[t]!==i:Lt.call(e,t)},Gn.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=Dn&&e===i?s:e,this},Vn.prototype.clear=function(){this.__data__=[],this.size=0},Vn.prototype.delete=function(t){var e=this.__data__,n=rr(e,t);return!(n<0)&&(n==e.length-1?e.pop():Yt.call(e,n,1),--this.size,!0)},Vn.prototype.get=function(t){var e=this.__data__,n=rr(e,t);return n<0?i:e[n][1]},Vn.prototype.has=function(t){return rr(this.__data__,t)>-1},Vn.prototype.set=function(t,e){var n=this.__data__,r=rr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Kn.prototype.clear=function(){this.size=0,this.__data__={hash:new Gn,map:new(Sn||Vn),string:new Gn}},Kn.prototype.delete=function(t){var e=co(this,t).delete(t);return this.size-=e?1:0,e},Kn.prototype.get=function(t){return co(this,t).get(t)},Kn.prototype.has=function(t){return co(this,t).has(t)},Kn.prototype.set=function(t,e){var n=co(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Xn.prototype.add=Xn.prototype.push=function(t){return this.__data__.set(t,s),this},Xn.prototype.has=function(t){return this.__data__.has(t)},Yn.prototype.clear=function(){this.__data__=new Vn,this.size=0},Yn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Yn.prototype.get=function(t){return this.__data__.get(t)},Yn.prototype.has=function(t){return this.__data__.has(t)},Yn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Vn){var r=n.__data__;if(!Sn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Kn(r)}return n.set(t,e),this.size=n.size,this};var hr=Ri(_r),dr=Ri(xr,!0);function gr(t,e){var n=!0;return hr(t,(function(t,r,i){return n=!!e(t,r,i)})),n}function vr(t,e,n){for(var r=-1,o=t.length;++r<o;){var s=t[r],a=e(s);if(null!=a&&(u===i?a==a&&!la(a):n(a,u)))var u=a,l=s}return l}function mr(t,e){var n=[];return hr(t,(function(t,r,i){e(t,r,i)&&n.push(t)})),n}function yr(t,e,n,r,i){var o=-1,s=t.length;for(n||(n=bo),i||(i=[]);++o<s;){var a=t[o];e>0&&n(a)?e>1?yr(a,e-1,n,r,i):Le(i,a):r||(i[i.length]=a)}return i}var br=Ii(),wr=Ii(!0);function _r(t,e){return t&&br(t,e,Oa)}function xr(t,e){return t&&wr(t,e,Oa)}function Tr(t,e){return Oe(e,(function(e){return Js(t[e])}))}function Cr(t,e){for(var n=0,r=(e=wi(e,t)).length;null!=t&&n<r;)t=t[qo(e[n++])];return n&&n==r?t:i}function Ar(t,e,n){var r=e(t);return Ws(t)?r:Le(r,n(t))}function Sr(t){return null==t?t===i?\"[object Undefined]\":\"[object Null]\":Zt&&Zt in $t(t)?function(t){var e=Lt.call(t,Zt),n=t[Zt];try{t[Zt]=i;var r=!0}catch(t){}var o=Ht.call(t);r&&(e?t[Zt]=n:delete t[Zt]);return o}(t):function(t){return Ht.call(t)}(t)}function $r(t,e){return t>e}function Er(t,e){return null!=t&&Lt.call(t,e)}function kr(t,e){return null!=t&&e in $t(t)}function Dr(t,e,n){for(var o=n?Re:Ne,s=t[0].length,a=t.length,u=a,l=r(a),c=1/0,f=[];u--;){var p=t[u];u&&e&&(p=Ie(p,Ze(e))),c=wn(p.length,c),l[u]=!n&&(e||s>=120&&p.length>=120)?new Xn(u&&p):i}p=t[0];var h=-1,d=l[0];t:for(;++h<s&&f.length<c;){var g=p[h],v=e?e(g):g;if(g=n||0!==g?g:0,!(d?en(d,v):o(f,v,n))){for(u=a;--u;){var m=l[u];if(!(m?en(m,v):o(t[u],v,n)))continue t}d&&d.push(v),f.push(g)}}return f}function jr(t,e,n){var r=null==(t=ko(t,e=wi(e,t)))?t:t[qo(Qo(e))];return null==r?i:$e(r,t,n)}function Or(t){return na(t)&&Sr(t)==y}function Nr(t,e,n,r,o){return t===e||(null==t||null==e||!na(t)&&!na(e)?t!=t&&e!=e:function(t,e,n,r,o,s){var a=Ws(t),u=Ws(e),l=a?b:vo(t),c=u?b:vo(e),f=(l=l==y?$:l)==$,p=(c=c==y?$:c)==$,h=l==c;if(h&&Xs(t)){if(!Xs(e))return!1;a=!0,f=!1}if(h&&!f)return s||(s=new Yn),a||ca(t)?no(t,e,n,r,o,s):function(t,e,n,r,i,o,s){switch(n){case I:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case R:return!(t.byteLength!=e.byteLength||!o(new Wt(t),new Wt(e)));case w:case _:case S:return Us(+t,+e);case x:return t.name==e.name&&t.message==e.message;case k:case j:return t==e+\"\";case A:var a=ln;case D:var u=1&r;if(a||(a=pn),t.size!=e.size&&!u)return!1;var l=s.get(t);if(l)return l==e;r|=2,s.set(t,e);var c=no(a(t),a(e),r,i,o,s);return s.delete(t),c;case O:if(Hn)return Hn.call(t)==Hn.call(e)}return!1}(t,e,l,n,r,o,s);if(!(1&n)){var d=f&&Lt.call(t,\"__wrapped__\"),g=p&&Lt.call(e,\"__wrapped__\");if(d||g){var v=d?t.value():t,m=g?e.value():e;return s||(s=new Yn),o(v,m,n,r,s)}}if(!h)return!1;return s||(s=new Yn),function(t,e,n,r,o,s){var a=1&n,u=io(t),l=u.length,c=io(e),f=c.length;if(l!=f&&!a)return!1;var p=l;for(;p--;){var h=u[p];if(!(a?h in e:Lt.call(e,h)))return!1}var d=s.get(t),g=s.get(e);if(d&&g)return d==e&&g==t;var v=!0;s.set(t,e),s.set(e,t);var m=a;for(;++p<l;){var y=t[h=u[p]],b=e[h];if(r)var w=a?r(b,y,h,e,t,s):r(y,b,h,t,e,s);if(!(w===i?y===b||o(y,b,n,r,s):w)){v=!1;break}m||(m=\"constructor\"==h)}if(v&&!m){var _=t.constructor,x=e.constructor;_==x||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof _&&_ instanceof _&&\"function\"==typeof x&&x instanceof x||(v=!1)}return s.delete(t),s.delete(e),v}(t,e,n,r,o,s)}(t,e,n,r,Nr,o))}function Rr(t,e,n,r){var o=n.length,s=o,a=!r;if(null==t)return!s;for(t=$t(t);o--;){var u=n[o];if(a&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++o<s;){var l=(u=n[o])[0],c=t[l],f=u[1];if(a&&u[2]){if(c===i&&!(l in t))return!1}else{var p=new Yn;if(r)var h=r(c,f,l,t,e,p);if(!(h===i?Nr(f,c,3,r,p):h))return!1}}return!0}function Ir(t){return!(!ea(t)||(e=t,qt&&qt in e))&&(Js(t)?Ft:yt).test(Ho(t));var e}function Lr(t){return\"function\"==typeof t?t:null==t?iu:\"object\"==typeof t?Ws(t)?Fr(t[0],t[1]):Ur(t):hu(t)}function Pr(t){if(!Ao(t))return Ke(t);var e=[];for(var n in $t(t))Lt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function qr(t){if(!ea(t))return function(t){var e=[];if(null!=t)for(var n in $t(t))e.push(n);return e}(t);var e=Ao(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Lt.call(t,r))&&n.push(r);return n}function Hr(t,e){return t<e}function Mr(t,e){var n=-1,i=Vs(t)?r(t.length):[];return hr(t,(function(t,r,o){i[++n]=e(t,r,o)})),i}function Ur(t){var e=fo(t);return 1==e.length&&e[0][2]?$o(e[0][0],e[0][1]):function(n){return n===t||Rr(n,t,e)}}function Fr(t,e){return xo(t)&&So(e)?$o(qo(t),e):function(n){var r=$a(n,t);return r===i&&r===e?Ea(n,t):Nr(e,r,3)}}function zr(t,e,n,r,o){t!==e&&br(e,(function(s,a){if(o||(o=new Yn),ea(s))!function(t,e,n,r,o,s,a){var u=Do(t,n),l=Do(e,n),c=a.get(l);if(c)return void er(t,n,c);var f=s?s(u,l,n+\"\",t,e,a):i,p=f===i;if(p){var h=Ws(l),d=!h&&Xs(l),g=!h&&!d&&ca(l);f=l,h||d||g?Ws(u)?f=u:Ks(u)?f=Di(u):d?(p=!1,f=Ci(l,!0)):g?(p=!1,f=Si(l,!0)):f=[]:oa(l)||Bs(l)?(f=u,Bs(u)?f=ya(u):ea(u)&&!Js(u)||(f=yo(l))):p=!1}p&&(a.set(l,f),o(f,l,r,s,a),a.delete(l));er(t,n,f)}(t,e,a,n,zr,r,o);else{var u=r?r(Do(t,a),s,a+\"\",t,e,o):i;u===i&&(u=s),er(t,a,u)}}),Na)}function Br(t,e){var n=t.length;if(n)return wo(e+=e<0?n:0,n)?t[e]:i}function Wr(t,e,n){e=e.length?Ie(e,(function(t){return Ws(t)?function(e){return Cr(e,1===t.length?t[0]:t)}:t})):[iu];var r=-1;e=Ie(e,Ze(lo()));var i=Mr(t,(function(t,n,i){var o=Ie(e,(function(e){return e(t)}));return{criteria:o,index:++r,value:t}}));return function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}(i,(function(t,e){return function(t,e,n){var r=-1,i=t.criteria,o=e.criteria,s=i.length,a=n.length;for(;++r<s;){var u=$i(i[r],o[r]);if(u)return r>=a?u:u*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)}))}function Gr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var s=e[r],a=Cr(t,s);n(a,s)&&ti(o,wi(s,t),a)}return o}function Vr(t,e,n,r){var i=r?Be:ze,o=-1,s=e.length,a=t;for(t===e&&(e=Di(e)),n&&(a=Ie(t,Ze(n)));++o<s;)for(var u=0,l=e[o],c=n?n(l):l;(u=i(a,c,u,r))>-1;)a!==t&&Yt.call(a,u,1),Yt.call(t,u,1);return t}function Kr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;wo(i)?Yt.call(t,i,1):pi(t,i)}}return t}function Xr(t,e){return t+ve(Tn()*(e-t+1))}function Yr(t,e){var n=\"\";if(!t||e<1||e>d)return n;do{e%2&&(n+=t),(e=ve(e/2))&&(t+=t)}while(e);return n}function Qr(t,e){return No(Eo(t,e,iu),t+\"\")}function Jr(t){return Jn(Ua(t))}function Zr(t,e){var n=Ua(t);return Lo(n,ur(e,0,n.length))}function ti(t,e,n,r){if(!ea(t))return t;for(var o=-1,s=(e=wi(e,t)).length,a=s-1,u=t;null!=u&&++o<s;){var l=qo(e[o]),c=n;if(\"__proto__\"===l||\"constructor\"===l||\"prototype\"===l)return t;if(o!=a){var f=u[l];(c=r?r(f,l,u):i)===i&&(c=ea(f)?f:wo(e[o+1])?[]:{})}nr(u,l,c),u=u[l]}return t}var ei=jn?function(t,e){return jn.set(t,e),t}:iu,ni=ne?function(t,e){return ne(t,\"toString\",{configurable:!0,enumerable:!1,value:eu(e),writable:!0})}:iu;function ri(t){return Lo(Ua(t))}function ii(t,e,n){var i=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var s=r(o);++i<o;)s[i]=t[i+e];return s}function oi(t,e){var n;return hr(t,(function(t,r,i){return!(n=e(t,r,i))})),!!n}function si(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,s=t[o];null!==s&&!la(s)&&(n?s<=e:s<e)?r=o+1:i=o}return i}return ai(t,e,iu,n)}function ai(t,e,n,r){var o=0,s=null==t?0:t.length;if(0===s)return 0;for(var a=(e=n(e))!=e,u=null===e,l=la(e),c=e===i;o<s;){var f=ve((o+s)/2),p=n(t[f]),h=p!==i,d=null===p,g=p==p,v=la(p);if(a)var m=r||g;else m=c?g&&(r||h):u?g&&h&&(r||!d):l?g&&h&&!d&&(r||!v):!d&&!v&&(r?p<=e:p<e);m?o=f+1:s=f}return wn(s,4294967294)}function ui(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var s=t[n],a=e?e(s):s;if(!n||!Us(a,u)){var u=a;o[i++]=0===s?0:s}}return o}function li(t){return\"number\"==typeof t?t:la(t)?g:+t}function ci(t){if(\"string\"==typeof t)return t;if(Ws(t))return Ie(t,ci)+\"\";if(la(t))return Mn?Mn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function fi(t,e,n){var r=-1,i=Ne,o=t.length,s=!0,a=[],u=a;if(n)s=!1,i=Re;else if(o>=200){var l=e?null:Yi(t);if(l)return pn(l);s=!1,i=en,u=new Xn}else u=e?[]:a;t:for(;++r<o;){var c=t[r],f=e?e(c):c;if(c=n||0!==c?c:0,s&&f==f){for(var p=u.length;p--;)if(u[p]===f)continue t;e&&u.push(f),a.push(c)}else i(u,f,n)||(u!==a&&u.push(f),a.push(c))}return a}function pi(t,e){return null==(t=ko(t,e=wi(e,t)))||delete t[qo(Qo(e))]}function hi(t,e,n,r){return ti(t,e,n(Cr(t,e)),r)}function di(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ii(t,r?0:o,r?o+1:i):ii(t,r?o+1:0,r?i:o)}function gi(t,e){var n=t;return n instanceof Wn&&(n=n.value()),Pe(e,(function(t,e){return e.func.apply(e.thisArg,Le([t],e.args))}),n)}function vi(t,e,n){var i=t.length;if(i<2)return i?fi(t[0]):[];for(var o=-1,s=r(i);++o<i;)for(var a=t[o],u=-1;++u<i;)u!=o&&(s[o]=pr(s[o]||a,t[u],e,n));return fi(yr(s,1),e,n)}function mi(t,e,n){for(var r=-1,o=t.length,s=e.length,a={};++r<o;){var u=r<s?e[r]:i;n(a,t[r],u)}return a}function yi(t){return Ks(t)?t:[]}function bi(t){return\"function\"==typeof t?t:iu}function wi(t,e){return Ws(t)?t:xo(t,e)?[t]:Po(ba(t))}var _i=Qr;function xi(t,e,n){var r=t.length;return n=n===i?r:n,!e&&n>=r?t:ii(t,e,n)}var Ti=ie||function(t){return ge.clearTimeout(t)};function Ci(t,e){if(e)return t.slice();var n=t.length,r=Gt?Gt(n):new t.constructor(n);return t.copy(r),r}function Ai(t){var e=new t.constructor(t.byteLength);return new Wt(e).set(new Wt(t)),e}function Si(t,e){var n=e?Ai(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function $i(t,e){if(t!==e){var n=t!==i,r=null===t,o=t==t,s=la(t),a=e!==i,u=null===e,l=e==e,c=la(e);if(!u&&!c&&!s&&t>e||s&&a&&l&&!u&&!c||r&&a&&l||!n&&l||!o)return 1;if(!r&&!s&&!c&&t<e||c&&n&&o&&!r&&!s||u&&n&&o||!a&&o||!l)return-1}return 0}function Ei(t,e,n,i){for(var o=-1,s=t.length,a=n.length,u=-1,l=e.length,c=bn(s-a,0),f=r(l+c),p=!i;++u<l;)f[u]=e[u];for(;++o<a;)(p||o<s)&&(f[n[o]]=t[o]);for(;c--;)f[u++]=t[o++];return f}function ki(t,e,n,i){for(var o=-1,s=t.length,a=-1,u=n.length,l=-1,c=e.length,f=bn(s-u,0),p=r(f+c),h=!i;++o<f;)p[o]=t[o];for(var d=o;++l<c;)p[d+l]=e[l];for(;++a<u;)(h||o<s)&&(p[d+n[a]]=t[o++]);return p}function Di(t,e){var n=-1,i=t.length;for(e||(e=r(i));++n<i;)e[n]=t[n];return e}function ji(t,e,n,r){var o=!n;n||(n={});for(var s=-1,a=e.length;++s<a;){var u=e[s],l=r?r(n[u],t[u],u,n,t):i;l===i&&(l=t[u]),o?sr(n,u,l):nr(n,u,l)}return n}function Oi(t,e){return function(n,r){var i=Ws(n)?Ee:ir,o=e?e():{};return i(n,t,lo(r,2),o)}}function Ni(t){return Qr((function(e,n){var r=-1,o=n.length,s=o>1?n[o-1]:i,a=o>2?n[2]:i;for(s=t.length>3&&\"function\"==typeof s?(o--,s):i,a&&_o(n[0],n[1],a)&&(s=o<3?i:s,o=1),e=$t(e);++r<o;){var u=n[r];u&&t(e,u,r,s)}return e}))}function Ri(t,e){return function(n,r){if(null==n)return n;if(!Vs(n))return t(n,r);for(var i=n.length,o=e?i:-1,s=$t(n);(e?o--:++o<i)&&!1!==r(s[o],o,s););return n}}function Ii(t){return function(e,n,r){for(var i=-1,o=$t(e),s=r(e),a=s.length;a--;){var u=s[t?a:++i];if(!1===n(o[u],u,o))break}return e}}function Li(t){return function(e){var n=un(e=ba(e))?gn(e):i,r=n?n[0]:e.charAt(0),o=n?xi(n,1).join(\"\"):e.slice(1);return r[t]()+o}}function Pi(t){return function(e){return Pe(Ja(Ba(e).replace(te,\"\")),t,\"\")}}function qi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Fn(t.prototype),r=t.apply(n,e);return ea(r)?r:n}}function Hi(t){return function(e,n,r){var o=$t(e);if(!Vs(e)){var s=lo(n,3);e=Oa(e),n=function(t){return s(o[t],t,o)}}var a=t(e,n,r);return a>-1?o[s?e[a]:a]:i}}function Mi(t){return ro((function(e){var n=e.length,r=n,s=Bn.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if(\"function\"!=typeof a)throw new Dt(o);if(s&&!u&&\"wrapper\"==ao(a))var u=new Bn([],!0)}for(r=u?r:n;++r<n;){var l=ao(a=e[r]),c=\"wrapper\"==l?so(a):i;u=c&&To(c[0])&&424==c[1]&&!c[4].length&&1==c[9]?u[ao(c[0])].apply(u,c[3]):1==a.length&&To(a)?u[l]():u.thru(a)}return function(){var t=arguments,r=t[0];if(u&&1==t.length&&Ws(r))return u.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}}))}function Ui(t,e,n,o,s,a,u,l,c,p){var h=e&f,d=1&e,g=2&e,v=24&e,m=512&e,y=g?i:qi(t);return function f(){for(var b=arguments.length,w=r(b),_=b;_--;)w[_]=arguments[_];if(v)var x=uo(f),T=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(w,x);if(o&&(w=Ei(w,o,s,v)),a&&(w=ki(w,a,u,v)),b-=T,v&&b<p){var C=fn(w,x);return Ki(t,e,Ui,f.placeholder,n,w,C,l,c,p-b)}var A=d?n:this,S=g?A[t]:t;return b=w.length,l?w=function(t,e){var n=t.length,r=wn(e.length,n),o=Di(t);for(;r--;){var s=e[r];t[r]=wo(s,n)?o[s]:i}return t}(w,l):m&&b>1&&w.reverse(),h&&c<b&&(w.length=c),this&&this!==ge&&this instanceof f&&(S=y||qi(S)),S.apply(A,w)}}function Fi(t,e){return function(n,r){return function(t,e,n,r){return _r(t,(function(t,i,o){e(r,n(t),i,o)})),r}(n,t,e(r),{})}}function zi(t,e){return function(n,r){var o;if(n===i&&r===i)return e;if(n!==i&&(o=n),r!==i){if(o===i)return r;\"string\"==typeof n||\"string\"==typeof r?(n=ci(n),r=ci(r)):(n=li(n),r=li(r)),o=t(n,r)}return o}}function Bi(t){return ro((function(e){return e=Ie(e,Ze(lo())),Qr((function(n){var r=this;return t(e,(function(t){return $e(t,r,n)}))}))}))}function Wi(t,e){var n=(e=e===i?\" \":ci(e)).length;if(n<2)return n?Yr(e,t):e;var r=Yr(e,de(t/dn(e)));return un(e)?xi(gn(r),0,t).join(\"\"):r.slice(0,t)}function Gi(t){return function(e,n,o){return o&&\"number\"!=typeof o&&_o(e,n,o)&&(n=o=i),e=da(e),n===i?(n=e,e=0):n=da(n),function(t,e,n,i){for(var o=-1,s=bn(de((e-t)/(n||1)),0),a=r(s);s--;)a[i?s:++o]=t,t+=n;return a}(e,n,o=o===i?e<n?1:-1:da(o),t)}}function Vi(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=ma(e),n=ma(n)),t(e,n)}}function Ki(t,e,n,r,o,s,a,u,f,p){var h=8&e;e|=h?l:c,4&(e&=~(h?c:l))||(e&=-4);var d=[t,e,o,h?s:i,h?a:i,h?i:s,h?i:a,u,f,p],g=n.apply(i,d);return To(t)&&jo(g,d),g.placeholder=r,Ro(g,t,e)}function Xi(t){var e=St[t];return function(t,n){if(t=ma(t),(n=null==n?0:wn(ga(n),292))&&we(t)){var r=(ba(t)+\"e\").split(\"e\");return+((r=(ba(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Yi=En&&1/pn(new En([,-0]))[1]==h?function(t){return new En(t)}:lu;function Qi(t){return function(e){var n=vo(e);return n==A?ln(e):n==D?hn(e):function(t,e){return Ie(e,(function(e){return[e,t[e]]}))}(e,t(e))}}function Ji(t,e,n,s,h,d,g,v){var m=2&e;if(!m&&\"function\"!=typeof t)throw new Dt(o);var y=s?s.length:0;if(y||(e&=-97,s=h=i),g=g===i?g:bn(ga(g),0),v=v===i?v:ga(v),y-=h?h.length:0,e&c){var b=s,w=h;s=h=i}var _=m?i:so(t),x=[t,e,n,s,h,b,w,d,g,v];if(_&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,s=r==f&&8==n||r==f&&n==p&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!s)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var u=e[3];if(u){var l=t[3];t[3]=l?Ei(l,u,e[4]):u,t[4]=l?fn(t[3],a):e[4]}(u=e[5])&&(l=t[5],t[5]=l?ki(l,u,e[6]):u,t[6]=l?fn(t[5],a):e[6]);(u=e[7])&&(t[7]=u);r&f&&(t[8]=null==t[8]?e[8]:wn(t[8],e[8]));null==t[9]&&(t[9]=e[9]);t[0]=e[0],t[1]=i}(x,_),t=x[0],e=x[1],n=x[2],s=x[3],h=x[4],!(v=x[9]=x[9]===i?m?0:t.length:bn(x[9]-y,0))&&24&e&&(e&=-25),e&&1!=e)T=8==e||e==u?function(t,e,n){var o=qi(t);return function s(){for(var a=arguments.length,u=r(a),l=a,c=uo(s);l--;)u[l]=arguments[l];var f=a<3&&u[0]!==c&&u[a-1]!==c?[]:fn(u,c);return(a-=f.length)<n?Ki(t,e,Ui,s.placeholder,i,u,f,i,i,n-a):$e(this&&this!==ge&&this instanceof s?o:t,this,u)}}(t,e,v):e!=l&&33!=e||h.length?Ui.apply(i,x):function(t,e,n,i){var o=1&e,s=qi(t);return function e(){for(var a=-1,u=arguments.length,l=-1,c=i.length,f=r(c+u),p=this&&this!==ge&&this instanceof e?s:t;++l<c;)f[l]=i[l];for(;u--;)f[l++]=arguments[++a];return $e(p,o?n:this,f)}}(t,e,n,s);else var T=function(t,e,n){var r=1&e,i=qi(t);return function e(){return(this&&this!==ge&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return Ro((_?ei:jo)(T,x),t,e)}function Zi(t,e,n,r){return t===i||Us(t,Nt[n])&&!Lt.call(r,n)?e:t}function to(t,e,n,r,o,s){return ea(t)&&ea(e)&&(s.set(e,t),zr(t,e,i,to,s),s.delete(e)),t}function eo(t){return oa(t)?i:t}function no(t,e,n,r,o,s){var a=1&n,u=t.length,l=e.length;if(u!=l&&!(a&&l>u))return!1;var c=s.get(t),f=s.get(e);if(c&&f)return c==e&&f==t;var p=-1,h=!0,d=2&n?new Xn:i;for(s.set(t,e),s.set(e,t);++p<u;){var g=t[p],v=e[p];if(r)var m=a?r(v,g,p,e,t,s):r(g,v,p,t,e,s);if(m!==i){if(m)continue;h=!1;break}if(d){if(!He(e,(function(t,e){if(!en(d,e)&&(g===t||o(g,t,n,r,s)))return d.push(e)}))){h=!1;break}}else if(g!==v&&!o(g,v,n,r,s)){h=!1;break}}return s.delete(t),s.delete(e),h}function ro(t){return No(Eo(t,i,Go),t+\"\")}function io(t){return Ar(t,Oa,ho)}function oo(t){return Ar(t,Na,go)}var so=jn?function(t){return jn.get(t)}:lu;function ao(t){for(var e=t.name+\"\",n=On[e],r=Lt.call(On,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function uo(t){return(Lt.call(Un,\"placeholder\")?Un:t).placeholder}function lo(){var t=Un.iteratee||ou;return t=t===ou?Lr:t,arguments.length?t(arguments[0],arguments[1]):t}function co(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function fo(t){for(var e=Oa(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,So(i)]}return e}function po(t,e){var n=function(t,e){return null==t?i:t[e]}(t,e);return Ir(n)?n:i}var ho=me?function(t){return null==t?[]:(t=$t(t),Oe(me(t),(function(e){return Xt.call(t,e)})))}:vu,go=me?function(t){for(var e=[];t;)Le(e,ho(t)),t=Vt(t);return e}:vu,vo=Sr;function mo(t,e,n){for(var r=-1,i=(e=wi(e,t)).length,o=!1;++r<i;){var s=qo(e[r]);if(!(o=null!=t&&n(t,s)))break;t=t[s]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&ta(i)&&wo(s,i)&&(Ws(t)||Bs(t))}function yo(t){return\"function\"!=typeof t.constructor||Ao(t)?{}:Fn(Vt(t))}function bo(t){return Ws(t)||Bs(t)||!!(Qt&&t&&t[Qt])}function wo(t,e){var n=typeof t;return!!(e=null==e?d:e)&&(\"number\"==n||\"symbol\"!=n&&wt.test(t))&&t>-1&&t%1==0&&t<e}function _o(t,e,n){if(!ea(n))return!1;var r=typeof e;return!!(\"number\"==r?Vs(n)&&wo(e,n.length):\"string\"==r&&e in n)&&Us(n[e],t)}function xo(t,e){if(Ws(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!la(t))||(nt.test(t)||!et.test(t)||null!=e&&t in $t(e))}function To(t){var e=ao(t),n=Un[e];if(\"function\"!=typeof n||!(e in Wn.prototype))return!1;if(t===n)return!0;var r=so(n);return!!r&&t===r[0]}(An&&vo(new An(new ArrayBuffer(1)))!=I||Sn&&vo(new Sn)!=A||$n&&vo($n.resolve())!=E||En&&vo(new En)!=D||kn&&vo(new kn)!=N)&&(vo=function(t){var e=Sr(t),n=e==$?t.constructor:i,r=n?Ho(n):\"\";if(r)switch(r){case Nn:return I;case Rn:return A;case In:return E;case Ln:return D;case Pn:return N}return e});var Co=Rt?Js:mu;function Ao(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Nt)}function So(t){return t==t&&!ea(t)}function $o(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==i||t in $t(n)))}}function Eo(t,e,n){return e=bn(e===i?t.length-1:e,0),function(){for(var i=arguments,o=-1,s=bn(i.length-e,0),a=r(s);++o<s;)a[o]=i[e+o];o=-1;for(var u=r(e+1);++o<e;)u[o]=i[o];return u[e]=n(a),$e(t,this,u)}}function ko(t,e){return e.length<2?t:Cr(t,ii(e,0,-1))}function Do(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var jo=Io(ei),Oo=he||function(t,e){return ge.setTimeout(t,e)},No=Io(ni);function Ro(t,e,n){var r=e+\"\";return No(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(ut,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return ke(m,(function(n){var r=\"_.\"+n[0];e&n[1]&&!Ne(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(lt);return e?e[1].split(ct):[]}(r),n)))}function Io(t){var e=0,n=0;return function(){var r=_n(),o=16-(r-n);if(n=r,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(i,arguments)}}function Lo(t,e){var n=-1,r=t.length,o=r-1;for(e=e===i?r:e;++n<e;){var s=Xr(n,o),a=t[s];t[s]=t[n],t[n]=a}return t.length=e,t}var Po=function(t){var e=Is(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(rt,(function(t,n,r,i){e.push(r?i.replace(ht,\"$1\"):n||t)})),e}));function qo(t){if(\"string\"==typeof t||la(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Ho(t){if(null!=t){try{return It.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Mo(t){if(t instanceof Wn)return t.clone();var e=new Bn(t.__wrapped__,t.__chain__);return e.__actions__=Di(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Uo=Qr((function(t,e){return Ks(t)?pr(t,yr(e,1,Ks,!0)):[]})),Fo=Qr((function(t,e){var n=Qo(e);return Ks(n)&&(n=i),Ks(t)?pr(t,yr(e,1,Ks,!0),lo(n,2)):[]})),zo=Qr((function(t,e){var n=Qo(e);return Ks(n)&&(n=i),Ks(t)?pr(t,yr(e,1,Ks,!0),i,n):[]}));function Bo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ga(n);return i<0&&(i=bn(r+i,0)),Fe(t,lo(e,3),i)}function Wo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=r-1;return n!==i&&(o=ga(n),o=n<0?bn(r+o,0):wn(o,r-1)),Fe(t,lo(e,3),o,!0)}function Go(t){return(null==t?0:t.length)?yr(t,1):[]}function Vo(t){return t&&t.length?t[0]:i}var Ko=Qr((function(t){var e=Ie(t,yi);return e.length&&e[0]===t[0]?Dr(e):[]})),Xo=Qr((function(t){var e=Qo(t),n=Ie(t,yi);return e===Qo(n)?e=i:n.pop(),n.length&&n[0]===t[0]?Dr(n,lo(e,2)):[]})),Yo=Qr((function(t){var e=Qo(t),n=Ie(t,yi);return(e=\"function\"==typeof e?e:i)&&n.pop(),n.length&&n[0]===t[0]?Dr(n,i,e):[]}));function Qo(t){var e=null==t?0:t.length;return e?t[e-1]:i}var Jo=Qr(Zo);function Zo(t,e){return t&&t.length&&e&&e.length?Vr(t,e):t}var ts=ro((function(t,e){var n=null==t?0:t.length,r=ar(t,e);return Kr(t,Ie(e,(function(t){return wo(t,n)?+t:t})).sort($i)),r}));function es(t){return null==t?t:Cn.call(t)}var ns=Qr((function(t){return fi(yr(t,1,Ks,!0))})),rs=Qr((function(t){var e=Qo(t);return Ks(e)&&(e=i),fi(yr(t,1,Ks,!0),lo(e,2))})),is=Qr((function(t){var e=Qo(t);return e=\"function\"==typeof e?e:i,fi(yr(t,1,Ks,!0),i,e)}));function os(t){if(!t||!t.length)return[];var e=0;return t=Oe(t,(function(t){if(Ks(t))return e=bn(t.length,e),!0})),Qe(e,(function(e){return Ie(t,Ve(e))}))}function ss(t,e){if(!t||!t.length)return[];var n=os(t);return null==e?n:Ie(n,(function(t){return $e(e,i,t)}))}var as=Qr((function(t,e){return Ks(t)?pr(t,e):[]})),us=Qr((function(t){return vi(Oe(t,Ks))})),ls=Qr((function(t){var e=Qo(t);return Ks(e)&&(e=i),vi(Oe(t,Ks),lo(e,2))})),cs=Qr((function(t){var e=Qo(t);return e=\"function\"==typeof e?e:i,vi(Oe(t,Ks),i,e)})),fs=Qr(os);var ps=Qr((function(t){var e=t.length,n=e>1?t[e-1]:i;return n=\"function\"==typeof n?(t.pop(),n):i,ss(t,n)}));function hs(t){var e=Un(t);return e.__chain__=!0,e}function ds(t,e){return e(t)}var gs=ro((function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return ar(e,t)};return!(e>1||this.__actions__.length)&&r instanceof Wn&&wo(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:ds,args:[o],thisArg:i}),new Bn(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(i),t}))):this.thru(o)}));var vs=Oi((function(t,e,n){Lt.call(t,n)?++t[n]:sr(t,n,1)}));var ms=Hi(Bo),ys=Hi(Wo);function bs(t,e){return(Ws(t)?ke:hr)(t,lo(e,3))}function ws(t,e){return(Ws(t)?De:dr)(t,lo(e,3))}var _s=Oi((function(t,e,n){Lt.call(t,n)?t[n].push(e):sr(t,n,[e])}));var xs=Qr((function(t,e,n){var i=-1,o=\"function\"==typeof e,s=Vs(t)?r(t.length):[];return hr(t,(function(t){s[++i]=o?$e(e,t,n):jr(t,e,n)})),s})),Ts=Oi((function(t,e,n){sr(t,n,e)}));function Cs(t,e){return(Ws(t)?Ie:Mr)(t,lo(e,3))}var As=Oi((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]}));var Ss=Qr((function(t,e){if(null==t)return[];var n=e.length;return n>1&&_o(t,e[0],e[1])?e=[]:n>2&&_o(e[0],e[1],e[2])&&(e=[e[0]]),Wr(t,yr(e,1),[])})),$s=ce||function(){return ge.Date.now()};function Es(t,e,n){return e=n?i:e,e=t&&null==e?t.length:e,Ji(t,f,i,i,i,i,e)}function ks(t,e){var n;if(\"function\"!=typeof e)throw new Dt(o);return t=ga(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=i),n}}var Ds=Qr((function(t,e,n){var r=1;if(n.length){var i=fn(n,uo(Ds));r|=l}return Ji(t,r,e,n,i)})),js=Qr((function(t,e,n){var r=3;if(n.length){var i=fn(n,uo(js));r|=l}return Ji(e,r,t,n,i)}));function Os(t,e,n){var r,s,a,u,l,c,f=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new Dt(o);function g(e){var n=r,o=s;return r=s=i,f=e,u=t.apply(o,n)}function v(t){var n=t-c;return c===i||n>=e||n<0||h&&t-f>=a}function m(){var t=$s();if(v(t))return y(t);l=Oo(m,function(t){var n=e-(t-c);return h?wn(n,a-(t-f)):n}(t))}function y(t){return l=i,d&&r?g(t):(r=s=i,u)}function b(){var t=$s(),n=v(t);if(r=arguments,s=this,c=t,n){if(l===i)return function(t){return f=t,l=Oo(m,e),p?g(t):u}(c);if(h)return Ti(l),l=Oo(m,e),g(c)}return l===i&&(l=Oo(m,e)),u}return e=ma(e)||0,ea(n)&&(p=!!n.leading,a=(h=\"maxWait\"in n)?bn(ma(n.maxWait)||0,e):a,d=\"trailing\"in n?!!n.trailing:d),b.cancel=function(){l!==i&&Ti(l),f=0,r=c=s=l=i},b.flush=function(){return l===i?u:y($s())},b}var Ns=Qr((function(t,e){return fr(t,1,e)})),Rs=Qr((function(t,e,n){return fr(t,ma(e)||0,n)}));function Is(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Dt(o);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=t.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Is.Cache||Kn),n}function Ls(t){if(\"function\"!=typeof t)throw new Dt(o);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Is.Cache=Kn;var Ps=_i((function(t,e){var n=(e=1==e.length&&Ws(e[0])?Ie(e[0],Ze(lo())):Ie(yr(e,1),Ze(lo()))).length;return Qr((function(r){for(var i=-1,o=wn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return $e(t,this,r)}))})),qs=Qr((function(t,e){var n=fn(e,uo(qs));return Ji(t,l,i,e,n)})),Hs=Qr((function(t,e){var n=fn(e,uo(Hs));return Ji(t,c,i,e,n)})),Ms=ro((function(t,e){return Ji(t,p,i,i,i,e)}));function Us(t,e){return t===e||t!=t&&e!=e}var Fs=Vi($r),zs=Vi((function(t,e){return t>=e})),Bs=Or(function(){return arguments}())?Or:function(t){return na(t)&&Lt.call(t,\"callee\")&&!Xt.call(t,\"callee\")},Ws=r.isArray,Gs=_e?Ze(_e):function(t){return na(t)&&Sr(t)==R};function Vs(t){return null!=t&&ta(t.length)&&!Js(t)}function Ks(t){return na(t)&&Vs(t)}var Xs=be||mu,Ys=xe?Ze(xe):function(t){return na(t)&&Sr(t)==_};function Qs(t){if(!na(t))return!1;var e=Sr(t);return e==x||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!oa(t)}function Js(t){if(!ea(t))return!1;var e=Sr(t);return e==T||e==C||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Zs(t){return\"number\"==typeof t&&t==ga(t)}function ta(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=d}function ea(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function na(t){return null!=t&&\"object\"==typeof t}var ra=Te?Ze(Te):function(t){return na(t)&&vo(t)==A};function ia(t){return\"number\"==typeof t||na(t)&&Sr(t)==S}function oa(t){if(!na(t)||Sr(t)!=$)return!1;var e=Vt(t);if(null===e)return!0;var n=Lt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&It.call(n)==Mt}var sa=Ce?Ze(Ce):function(t){return na(t)&&Sr(t)==k};var aa=Ae?Ze(Ae):function(t){return na(t)&&vo(t)==D};function ua(t){return\"string\"==typeof t||!Ws(t)&&na(t)&&Sr(t)==j}function la(t){return\"symbol\"==typeof t||na(t)&&Sr(t)==O}var ca=Se?Ze(Se):function(t){return na(t)&&ta(t.length)&&!!ue[Sr(t)]};var fa=Vi(Hr),pa=Vi((function(t,e){return t<=e}));function ha(t){if(!t)return[];if(Vs(t))return ua(t)?gn(t):Di(t);if(Jt&&t[Jt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Jt]());var e=vo(t);return(e==A?ln:e==D?pn:Ua)(t)}function da(t){return t?(t=ma(t))===h||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ga(t){var e=da(t),n=e%1;return e==e?n?e-n:e:0}function va(t){return t?ur(ga(t),0,v):0}function ma(t){if(\"number\"==typeof t)return t;if(la(t))return g;if(ea(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=ea(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Je(t);var n=mt.test(t);return n||bt.test(t)?pe(t.slice(2),n?2:8):vt.test(t)?g:+t}function ya(t){return ji(t,Na(t))}function ba(t){return null==t?\"\":ci(t)}var wa=Ni((function(t,e){if(Ao(e)||Vs(e))ji(e,Oa(e),t);else for(var n in e)Lt.call(e,n)&&nr(t,n,e[n])})),_a=Ni((function(t,e){ji(e,Na(e),t)})),xa=Ni((function(t,e,n,r){ji(e,Na(e),t,r)})),Ta=Ni((function(t,e,n,r){ji(e,Oa(e),t,r)})),Ca=ro(ar);var Aa=Qr((function(t,e){t=$t(t);var n=-1,r=e.length,o=r>2?e[2]:i;for(o&&_o(e[0],e[1],o)&&(r=1);++n<r;)for(var s=e[n],a=Na(s),u=-1,l=a.length;++u<l;){var c=a[u],f=t[c];(f===i||Us(f,Nt[c])&&!Lt.call(t,c))&&(t[c]=s[c])}return t})),Sa=Qr((function(t){return t.push(i,to),$e(Ia,i,t)}));function $a(t,e,n){var r=null==t?i:Cr(t,e);return r===i?n:r}function Ea(t,e){return null!=t&&mo(t,e,kr)}var ka=Fi((function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ht.call(e)),t[e]=n}),eu(iu)),Da=Fi((function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ht.call(e)),Lt.call(t,e)?t[e].push(n):t[e]=[n]}),lo),ja=Qr(jr);function Oa(t){return Vs(t)?Qn(t):Pr(t)}function Na(t){return Vs(t)?Qn(t,!0):qr(t)}var Ra=Ni((function(t,e,n){zr(t,e,n)})),Ia=Ni((function(t,e,n,r){zr(t,e,n,r)})),La=ro((function(t,e){var n={};if(null==t)return n;var r=!1;e=Ie(e,(function(e){return e=wi(e,t),r||(r=e.length>1),e})),ji(t,oo(t),n),r&&(n=lr(n,7,eo));for(var i=e.length;i--;)pi(n,e[i]);return n}));var Pa=ro((function(t,e){return null==t?{}:function(t,e){return Gr(t,e,(function(e,n){return Ea(t,n)}))}(t,e)}));function qa(t,e){if(null==t)return{};var n=Ie(oo(t),(function(t){return[t]}));return e=lo(e),Gr(t,n,(function(t,n){return e(t,n[0])}))}var Ha=Qi(Oa),Ma=Qi(Na);function Ua(t){return null==t?[]:tn(t,Oa(t))}var Fa=Pi((function(t,e,n){return e=e.toLowerCase(),t+(n?za(e):e)}));function za(t){return Qa(ba(t).toLowerCase())}function Ba(t){return(t=ba(t))&&t.replace(_t,on).replace(ee,\"\")}var Wa=Pi((function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()})),Ga=Pi((function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()})),Va=Li(\"toLowerCase\");var Ka=Pi((function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}));var Xa=Pi((function(t,e,n){return t+(n?\" \":\"\")+Qa(e)}));var Ya=Pi((function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()})),Qa=Li(\"toUpperCase\");function Ja(t,e,n){return t=ba(t),(e=n?i:e)===i?function(t){return oe.test(t)}(t)?function(t){return t.match(re)||[]}(t):function(t){return t.match(ft)||[]}(t):t.match(e)||[]}var Za=Qr((function(t,e){try{return $e(t,i,e)}catch(t){return Qs(t)?t:new Ct(t)}})),tu=ro((function(t,e){return ke(e,(function(e){e=qo(e),sr(t,e,Ds(t[e],t))})),t}));function eu(t){return function(){return t}}var nu=Mi(),ru=Mi(!0);function iu(t){return t}function ou(t){return Lr(\"function\"==typeof t?t:lr(t,1))}var su=Qr((function(t,e){return function(n){return jr(n,t,e)}})),au=Qr((function(t,e){return function(n){return jr(t,n,e)}}));function uu(t,e,n){var r=Oa(e),i=Tr(e,r);null!=n||ea(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Tr(e,Oa(e)));var o=!(ea(n)&&\"chain\"in n&&!n.chain),s=Js(t);return ke(i,(function(n){var r=e[n];t[n]=r,s&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Di(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Le([this.value()],arguments))})})),t}function lu(){}var cu=Bi(Ie),fu=Bi(je),pu=Bi(He);function hu(t){return xo(t)?Ve(qo(t)):function(t){return function(e){return Cr(e,t)}}(t)}var du=Gi(),gu=Gi(!0);function vu(){return[]}function mu(){return!1}var yu=zi((function(t,e){return t+e}),0),bu=Xi(\"ceil\"),wu=zi((function(t,e){return t/e}),1),_u=Xi(\"floor\");var xu,Tu=zi((function(t,e){return t*e}),1),Cu=Xi(\"round\"),Au=zi((function(t,e){return t-e}),0);return Un.after=function(t,e){if(\"function\"!=typeof e)throw new Dt(o);return t=ga(t),function(){if(--t<1)return e.apply(this,arguments)}},Un.ary=Es,Un.assign=wa,Un.assignIn=_a,Un.assignInWith=xa,Un.assignWith=Ta,Un.at=Ca,Un.before=ks,Un.bind=Ds,Un.bindAll=tu,Un.bindKey=js,Un.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Ws(t)?t:[t]},Un.chain=hs,Un.chunk=function(t,e,n){e=(n?_o(t,e,n):e===i)?1:bn(ga(e),0);var o=null==t?0:t.length;if(!o||e<1)return[];for(var s=0,a=0,u=r(de(o/e));s<o;)u[a++]=ii(t,s,s+=e);return u},Un.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Un.concat=function(){var t=arguments.length;if(!t)return[];for(var e=r(t-1),n=arguments[0],i=t;i--;)e[i-1]=arguments[i];return Le(Ws(n)?Di(n):[n],yr(e,1))},Un.cond=function(t){var e=null==t?0:t.length,n=lo();return t=e?Ie(t,(function(t){if(\"function\"!=typeof t[1])throw new Dt(o);return[n(t[0]),t[1]]})):[],Qr((function(n){for(var r=-1;++r<e;){var i=t[r];if($e(i[0],this,n))return $e(i[1],this,n)}}))},Un.conforms=function(t){return function(t){var e=Oa(t);return function(n){return cr(n,t,e)}}(lr(t,1))},Un.constant=eu,Un.countBy=vs,Un.create=function(t,e){var n=Fn(t);return null==e?n:or(n,e)},Un.curry=function t(e,n,r){var o=Ji(e,8,i,i,i,i,i,n=r?i:n);return o.placeholder=t.placeholder,o},Un.curryRight=function t(e,n,r){var o=Ji(e,u,i,i,i,i,i,n=r?i:n);return o.placeholder=t.placeholder,o},Un.debounce=Os,Un.defaults=Aa,Un.defaultsDeep=Sa,Un.defer=Ns,Un.delay=Rs,Un.difference=Uo,Un.differenceBy=Fo,Un.differenceWith=zo,Un.drop=function(t,e,n){var r=null==t?0:t.length;return r?ii(t,(e=n||e===i?1:ga(e))<0?0:e,r):[]},Un.dropRight=function(t,e,n){var r=null==t?0:t.length;return r?ii(t,0,(e=r-(e=n||e===i?1:ga(e)))<0?0:e):[]},Un.dropRightWhile=function(t,e){return t&&t.length?di(t,lo(e,3),!0,!0):[]},Un.dropWhile=function(t,e){return t&&t.length?di(t,lo(e,3),!0):[]},Un.fill=function(t,e,n,r){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&_o(t,e,n)&&(n=0,r=o),function(t,e,n,r){var o=t.length;for((n=ga(n))<0&&(n=-n>o?0:o+n),(r=r===i||r>o?o:ga(r))<0&&(r+=o),r=n>r?0:va(r);n<r;)t[n++]=e;return t}(t,e,n,r)):[]},Un.filter=function(t,e){return(Ws(t)?Oe:mr)(t,lo(e,3))},Un.flatMap=function(t,e){return yr(Cs(t,e),1)},Un.flatMapDeep=function(t,e){return yr(Cs(t,e),h)},Un.flatMapDepth=function(t,e,n){return n=n===i?1:ga(n),yr(Cs(t,e),n)},Un.flatten=Go,Un.flattenDeep=function(t){return(null==t?0:t.length)?yr(t,h):[]},Un.flattenDepth=function(t,e){return(null==t?0:t.length)?yr(t,e=e===i?1:ga(e)):[]},Un.flip=function(t){return Ji(t,512)},Un.flow=nu,Un.flowRight=ru,Un.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r},Un.functions=function(t){return null==t?[]:Tr(t,Oa(t))},Un.functionsIn=function(t){return null==t?[]:Tr(t,Na(t))},Un.groupBy=_s,Un.initial=function(t){return(null==t?0:t.length)?ii(t,0,-1):[]},Un.intersection=Ko,Un.intersectionBy=Xo,Un.intersectionWith=Yo,Un.invert=ka,Un.invertBy=Da,Un.invokeMap=xs,Un.iteratee=ou,Un.keyBy=Ts,Un.keys=Oa,Un.keysIn=Na,Un.map=Cs,Un.mapKeys=function(t,e){var n={};return e=lo(e,3),_r(t,(function(t,r,i){sr(n,e(t,r,i),t)})),n},Un.mapValues=function(t,e){var n={};return e=lo(e,3),_r(t,(function(t,r,i){sr(n,r,e(t,r,i))})),n},Un.matches=function(t){return Ur(lr(t,1))},Un.matchesProperty=function(t,e){return Fr(t,lr(e,1))},Un.memoize=Is,Un.merge=Ra,Un.mergeWith=Ia,Un.method=su,Un.methodOf=au,Un.mixin=uu,Un.negate=Ls,Un.nthArg=function(t){return t=ga(t),Qr((function(e){return Br(e,t)}))},Un.omit=La,Un.omitBy=function(t,e){return qa(t,Ls(lo(e)))},Un.once=function(t){return ks(2,t)},Un.orderBy=function(t,e,n,r){return null==t?[]:(Ws(e)||(e=null==e?[]:[e]),Ws(n=r?i:n)||(n=null==n?[]:[n]),Wr(t,e,n))},Un.over=cu,Un.overArgs=Ps,Un.overEvery=fu,Un.overSome=pu,Un.partial=qs,Un.partialRight=Hs,Un.partition=As,Un.pick=Pa,Un.pickBy=qa,Un.property=hu,Un.propertyOf=function(t){return function(e){return null==t?i:Cr(t,e)}},Un.pull=Jo,Un.pullAll=Zo,Un.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?Vr(t,e,lo(n,2)):t},Un.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?Vr(t,e,i,n):t},Un.pullAt=ts,Un.range=du,Un.rangeRight=gu,Un.rearg=Ms,Un.reject=function(t,e){return(Ws(t)?Oe:mr)(t,Ls(lo(e,3)))},Un.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=lo(e,3);++r<o;){var s=t[r];e(s,r,t)&&(n.push(s),i.push(r))}return Kr(t,i),n},Un.rest=function(t,e){if(\"function\"!=typeof t)throw new Dt(o);return Qr(t,e=e===i?e:ga(e))},Un.reverse=es,Un.sampleSize=function(t,e,n){return e=(n?_o(t,e,n):e===i)?1:ga(e),(Ws(t)?Zn:Zr)(t,e)},Un.set=function(t,e,n){return null==t?t:ti(t,e,n)},Un.setWith=function(t,e,n,r){return r=\"function\"==typeof r?r:i,null==t?t:ti(t,e,n,r)},Un.shuffle=function(t){return(Ws(t)?tr:ri)(t)},Un.slice=function(t,e,n){var r=null==t?0:t.length;return r?(n&&\"number\"!=typeof n&&_o(t,e,n)?(e=0,n=r):(e=null==e?0:ga(e),n=n===i?r:ga(n)),ii(t,e,n)):[]},Un.sortBy=Ss,Un.sortedUniq=function(t){return t&&t.length?ui(t):[]},Un.sortedUniqBy=function(t,e){return t&&t.length?ui(t,lo(e,2)):[]},Un.split=function(t,e,n){return n&&\"number\"!=typeof n&&_o(t,e,n)&&(e=n=i),(n=n===i?v:n>>>0)?(t=ba(t))&&(\"string\"==typeof e||null!=e&&!sa(e))&&!(e=ci(e))&&un(t)?xi(gn(t),0,n):t.split(e,n):[]},Un.spread=function(t,e){if(\"function\"!=typeof t)throw new Dt(o);return e=null==e?0:bn(ga(e),0),Qr((function(n){var r=n[e],i=xi(n,0,e);return r&&Le(i,r),$e(t,this,i)}))},Un.tail=function(t){var e=null==t?0:t.length;return e?ii(t,1,e):[]},Un.take=function(t,e,n){return t&&t.length?ii(t,0,(e=n||e===i?1:ga(e))<0?0:e):[]},Un.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?ii(t,(e=r-(e=n||e===i?1:ga(e)))<0?0:e,r):[]},Un.takeRightWhile=function(t,e){return t&&t.length?di(t,lo(e,3),!1,!0):[]},Un.takeWhile=function(t,e){return t&&t.length?di(t,lo(e,3)):[]},Un.tap=function(t,e){return e(t),t},Un.throttle=function(t,e,n){var r=!0,i=!0;if(\"function\"!=typeof t)throw new Dt(o);return ea(n)&&(r=\"leading\"in n?!!n.leading:r,i=\"trailing\"in n?!!n.trailing:i),Os(t,e,{leading:r,maxWait:e,trailing:i})},Un.thru=ds,Un.toArray=ha,Un.toPairs=Ha,Un.toPairsIn=Ma,Un.toPath=function(t){return Ws(t)?Ie(t,qo):la(t)?[t]:Di(Po(ba(t)))},Un.toPlainObject=ya,Un.transform=function(t,e,n){var r=Ws(t),i=r||Xs(t)||ca(t);if(e=lo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:ea(t)&&Js(o)?Fn(Vt(t)):{}}return(i?ke:_r)(t,(function(t,r,i){return e(n,t,r,i)})),n},Un.unary=function(t){return Es(t,1)},Un.union=ns,Un.unionBy=rs,Un.unionWith=is,Un.uniq=function(t){return t&&t.length?fi(t):[]},Un.uniqBy=function(t,e){return t&&t.length?fi(t,lo(e,2)):[]},Un.uniqWith=function(t,e){return e=\"function\"==typeof e?e:i,t&&t.length?fi(t,i,e):[]},Un.unset=function(t,e){return null==t||pi(t,e)},Un.unzip=os,Un.unzipWith=ss,Un.update=function(t,e,n){return null==t?t:hi(t,e,bi(n))},Un.updateWith=function(t,e,n,r){return r=\"function\"==typeof r?r:i,null==t?t:hi(t,e,bi(n),r)},Un.values=Ua,Un.valuesIn=function(t){return null==t?[]:tn(t,Na(t))},Un.without=as,Un.words=Ja,Un.wrap=function(t,e){return qs(bi(e),t)},Un.xor=us,Un.xorBy=ls,Un.xorWith=cs,Un.zip=fs,Un.zipObject=function(t,e){return mi(t||[],e||[],nr)},Un.zipObjectDeep=function(t,e){return mi(t||[],e||[],ti)},Un.zipWith=ps,Un.entries=Ha,Un.entriesIn=Ma,Un.extend=_a,Un.extendWith=xa,uu(Un,Un),Un.add=yu,Un.attempt=Za,Un.camelCase=Fa,Un.capitalize=za,Un.ceil=bu,Un.clamp=function(t,e,n){return n===i&&(n=e,e=i),n!==i&&(n=(n=ma(n))==n?n:0),e!==i&&(e=(e=ma(e))==e?e:0),ur(ma(t),e,n)},Un.clone=function(t){return lr(t,4)},Un.cloneDeep=function(t){return lr(t,5)},Un.cloneDeepWith=function(t,e){return lr(t,5,e=\"function\"==typeof e?e:i)},Un.cloneWith=function(t,e){return lr(t,4,e=\"function\"==typeof e?e:i)},Un.conformsTo=function(t,e){return null==e||cr(t,e,Oa(e))},Un.deburr=Ba,Un.defaultTo=function(t,e){return null==t||t!=t?e:t},Un.divide=wu,Un.endsWith=function(t,e,n){t=ba(t),e=ci(e);var r=t.length,o=n=n===i?r:ur(ga(n),0,r);return(n-=e.length)>=0&&t.slice(n,o)==e},Un.eq=Us,Un.escape=function(t){return(t=ba(t))&&Q.test(t)?t.replace(X,sn):t},Un.escapeRegExp=function(t){return(t=ba(t))&&ot.test(t)?t.replace(it,\"\\\\$&\"):t},Un.every=function(t,e,n){var r=Ws(t)?je:gr;return n&&_o(t,e,n)&&(e=i),r(t,lo(e,3))},Un.find=ms,Un.findIndex=Bo,Un.findKey=function(t,e){return Ue(t,lo(e,3),_r)},Un.findLast=ys,Un.findLastIndex=Wo,Un.findLastKey=function(t,e){return Ue(t,lo(e,3),xr)},Un.floor=_u,Un.forEach=bs,Un.forEachRight=ws,Un.forIn=function(t,e){return null==t?t:br(t,lo(e,3),Na)},Un.forInRight=function(t,e){return null==t?t:wr(t,lo(e,3),Na)},Un.forOwn=function(t,e){return t&&_r(t,lo(e,3))},Un.forOwnRight=function(t,e){return t&&xr(t,lo(e,3))},Un.get=$a,Un.gt=Fs,Un.gte=zs,Un.has=function(t,e){return null!=t&&mo(t,e,Er)},Un.hasIn=Ea,Un.head=Vo,Un.identity=iu,Un.includes=function(t,e,n,r){t=Vs(t)?t:Ua(t),n=n&&!r?ga(n):0;var i=t.length;return n<0&&(n=bn(i+n,0)),ua(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&ze(t,e,n)>-1},Un.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ga(n);return i<0&&(i=bn(r+i,0)),ze(t,e,i)},Un.inRange=function(t,e,n){return e=da(e),n===i?(n=e,e=0):n=da(n),function(t,e,n){return t>=wn(e,n)&&t<bn(e,n)}(t=ma(t),e,n)},Un.invoke=ja,Un.isArguments=Bs,Un.isArray=Ws,Un.isArrayBuffer=Gs,Un.isArrayLike=Vs,Un.isArrayLikeObject=Ks,Un.isBoolean=function(t){return!0===t||!1===t||na(t)&&Sr(t)==w},Un.isBuffer=Xs,Un.isDate=Ys,Un.isElement=function(t){return na(t)&&1===t.nodeType&&!oa(t)},Un.isEmpty=function(t){if(null==t)return!0;if(Vs(t)&&(Ws(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Xs(t)||ca(t)||Bs(t)))return!t.length;var e=vo(t);if(e==A||e==D)return!t.size;if(Ao(t))return!Pr(t).length;for(var n in t)if(Lt.call(t,n))return!1;return!0},Un.isEqual=function(t,e){return Nr(t,e)},Un.isEqualWith=function(t,e,n){var r=(n=\"function\"==typeof n?n:i)?n(t,e):i;return r===i?Nr(t,e,i,n):!!r},Un.isError=Qs,Un.isFinite=function(t){return\"number\"==typeof t&&we(t)},Un.isFunction=Js,Un.isInteger=Zs,Un.isLength=ta,Un.isMap=ra,Un.isMatch=function(t,e){return t===e||Rr(t,e,fo(e))},Un.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:i,Rr(t,e,fo(e),n)},Un.isNaN=function(t){return ia(t)&&t!=+t},Un.isNative=function(t){if(Co(t))throw new Ct(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Ir(t)},Un.isNil=function(t){return null==t},Un.isNull=function(t){return null===t},Un.isNumber=ia,Un.isObject=ea,Un.isObjectLike=na,Un.isPlainObject=oa,Un.isRegExp=sa,Un.isSafeInteger=function(t){return Zs(t)&&t>=-9007199254740991&&t<=d},Un.isSet=aa,Un.isString=ua,Un.isSymbol=la,Un.isTypedArray=ca,Un.isUndefined=function(t){return t===i},Un.isWeakMap=function(t){return na(t)&&vo(t)==N},Un.isWeakSet=function(t){return na(t)&&\"[object WeakSet]\"==Sr(t)},Un.join=function(t,e){return null==t?\"\":Me.call(t,e)},Un.kebabCase=Wa,Un.last=Qo,Un.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=r;return n!==i&&(o=(o=ga(n))<0?bn(r+o,0):wn(o,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Fe(t,We,o,!0)},Un.lowerCase=Ga,Un.lowerFirst=Va,Un.lt=fa,Un.lte=pa,Un.max=function(t){return t&&t.length?vr(t,iu,$r):i},Un.maxBy=function(t,e){return t&&t.length?vr(t,lo(e,2),$r):i},Un.mean=function(t){return Ge(t,iu)},Un.meanBy=function(t,e){return Ge(t,lo(e,2))},Un.min=function(t){return t&&t.length?vr(t,iu,Hr):i},Un.minBy=function(t,e){return t&&t.length?vr(t,lo(e,2),Hr):i},Un.stubArray=vu,Un.stubFalse=mu,Un.stubObject=function(){return{}},Un.stubString=function(){return\"\"},Un.stubTrue=function(){return!0},Un.multiply=Tu,Un.nth=function(t,e){return t&&t.length?Br(t,ga(e)):i},Un.noConflict=function(){return ge._===this&&(ge._=Ut),this},Un.noop=lu,Un.now=$s,Un.pad=function(t,e,n){t=ba(t);var r=(e=ga(e))?dn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Wi(ve(i),n)+t+Wi(de(i),n)},Un.padEnd=function(t,e,n){t=ba(t);var r=(e=ga(e))?dn(t):0;return e&&r<e?t+Wi(e-r,n):t},Un.padStart=function(t,e,n){t=ba(t);var r=(e=ga(e))?dn(t):0;return e&&r<e?Wi(e-r,n)+t:t},Un.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),xn(ba(t).replace(st,\"\"),e||0)},Un.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&_o(t,e,n)&&(e=n=i),n===i&&(\"boolean\"==typeof e?(n=e,e=i):\"boolean\"==typeof t&&(n=t,t=i)),t===i&&e===i?(t=0,e=1):(t=da(t),e===i?(e=t,t=0):e=da(e)),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var o=Tn();return wn(t+o*(e-t+fe(\"1e-\"+((o+\"\").length-1))),e)}return Xr(t,e)},Un.reduce=function(t,e,n){var r=Ws(t)?Pe:Xe,i=arguments.length<3;return r(t,lo(e,4),n,i,hr)},Un.reduceRight=function(t,e,n){var r=Ws(t)?qe:Xe,i=arguments.length<3;return r(t,lo(e,4),n,i,dr)},Un.repeat=function(t,e,n){return e=(n?_o(t,e,n):e===i)?1:ga(e),Yr(ba(t),e)},Un.replace=function(){var t=arguments,e=ba(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Un.result=function(t,e,n){var r=-1,o=(e=wi(e,t)).length;for(o||(o=1,t=i);++r<o;){var s=null==t?i:t[qo(e[r])];s===i&&(r=o,s=n),t=Js(s)?s.call(t):s}return t},Un.round=Cu,Un.runInContext=t,Un.sample=function(t){return(Ws(t)?Jn:Jr)(t)},Un.size=function(t){if(null==t)return 0;if(Vs(t))return ua(t)?dn(t):t.length;var e=vo(t);return e==A||e==D?t.size:Pr(t).length},Un.snakeCase=Ka,Un.some=function(t,e,n){var r=Ws(t)?He:oi;return n&&_o(t,e,n)&&(e=i),r(t,lo(e,3))},Un.sortedIndex=function(t,e){return si(t,e)},Un.sortedIndexBy=function(t,e,n){return ai(t,e,lo(n,2))},Un.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=si(t,e);if(r<n&&Us(t[r],e))return r}return-1},Un.sortedLastIndex=function(t,e){return si(t,e,!0)},Un.sortedLastIndexBy=function(t,e,n){return ai(t,e,lo(n,2),!0)},Un.sortedLastIndexOf=function(t,e){if(null==t?0:t.length){var n=si(t,e,!0)-1;if(Us(t[n],e))return n}return-1},Un.startCase=Xa,Un.startsWith=function(t,e,n){return t=ba(t),n=null==n?0:ur(ga(n),0,t.length),e=ci(e),t.slice(n,n+e.length)==e},Un.subtract=Au,Un.sum=function(t){return t&&t.length?Ye(t,iu):0},Un.sumBy=function(t,e){return t&&t.length?Ye(t,lo(e,2)):0},Un.template=function(t,e,n){var r=Un.templateSettings;n&&_o(t,e,n)&&(e=i),t=ba(t),e=xa({},e,r,Zi);var o,s,a=xa({},e.imports,r.imports,Zi),u=Oa(a),l=tn(a,u),c=0,f=e.interpolate||xt,p=\"__p += '\",h=Et((e.escape||xt).source+\"|\"+f.source+\"|\"+(f===tt?dt:xt).source+\"|\"+(e.evaluate||xt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Lt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ae+\"]\")+\"\\n\";t.replace(h,(function(e,n,r,i,a,u){return r||(r=i),p+=t.slice(c,u).replace(Tt,an),n&&(o=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),a&&(s=!0,p+=\"';\\n\"+a+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),c=u+e.length,e})),p+=\"';\\n\";var g=Lt.call(e,\"variable\")&&e.variable;if(g){if(pt.test(g))throw new Ct(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(W,\"\"):p).replace(G,\"$1\").replace(V,\"$1;\"),p=\"function(\"+(g||\"obj\")+\") {\\n\"+(g?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(o?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var v=Za((function(){return At(u,d+\"return \"+p).apply(i,l)}));if(v.source=p,Qs(v))throw v;return v},Un.times=function(t,e){if((t=ga(t))<1||t>d)return[];var n=v,r=wn(t,v);e=lo(e),t-=v;for(var i=Qe(r,e);++n<t;)e(n);return i},Un.toFinite=da,Un.toInteger=ga,Un.toLength=va,Un.toLower=function(t){return ba(t).toLowerCase()},Un.toNumber=ma,Un.toSafeInteger=function(t){return t?ur(ga(t),-9007199254740991,d):0===t?t:0},Un.toString=ba,Un.toUpper=function(t){return ba(t).toUpperCase()},Un.trim=function(t,e,n){if((t=ba(t))&&(n||e===i))return Je(t);if(!t||!(e=ci(e)))return t;var r=gn(t),o=gn(e);return xi(r,nn(r,o),rn(r,o)+1).join(\"\")},Un.trimEnd=function(t,e,n){if((t=ba(t))&&(n||e===i))return t.slice(0,vn(t)+1);if(!t||!(e=ci(e)))return t;var r=gn(t);return xi(r,0,rn(r,gn(e))+1).join(\"\")},Un.trimStart=function(t,e,n){if((t=ba(t))&&(n||e===i))return t.replace(st,\"\");if(!t||!(e=ci(e)))return t;var r=gn(t);return xi(r,nn(r,gn(e))).join(\"\")},Un.truncate=function(t,e){var n=30,r=\"...\";if(ea(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?ga(e.length):n,r=\"omission\"in e?ci(e.omission):r}var s=(t=ba(t)).length;if(un(t)){var a=gn(t);s=a.length}if(n>=s)return t;var u=n-dn(r);if(u<1)return r;var l=a?xi(a,0,u).join(\"\"):t.slice(0,u);if(o===i)return l+r;if(a&&(u+=l.length-u),sa(o)){if(t.slice(u).search(o)){var c,f=l;for(o.global||(o=Et(o.source,ba(gt.exec(o))+\"g\")),o.lastIndex=0;c=o.exec(f);)var p=c.index;l=l.slice(0,p===i?u:p)}}else if(t.indexOf(ci(o),u)!=u){var h=l.lastIndexOf(o);h>-1&&(l=l.slice(0,h))}return l+r},Un.unescape=function(t){return(t=ba(t))&&Y.test(t)?t.replace(K,mn):t},Un.uniqueId=function(t){var e=++Pt;return ba(t)+e},Un.upperCase=Ya,Un.upperFirst=Qa,Un.each=bs,Un.eachRight=ws,Un.first=Vo,uu(Un,(xu={},_r(Un,(function(t,e){Lt.call(Un.prototype,e)||(xu[e]=t)})),xu),{chain:!1}),Un.VERSION=\"4.17.21\",ke([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],(function(t){Un[t].placeholder=Un})),ke([\"drop\",\"take\"],(function(t,e){Wn.prototype[t]=function(n){n=n===i?1:bn(ga(n),0);var r=this.__filtered__&&!e?new Wn(this):this.clone();return r.__filtered__?r.__takeCount__=wn(n,r.__takeCount__):r.__views__.push({size:wn(n,v),type:t+(r.__dir__<0?\"Right\":\"\")}),r},Wn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}})),ke([\"filter\",\"map\",\"takeWhile\"],(function(t,e){var n=e+1,r=1==n||3==n;Wn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:lo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}})),ke([\"head\",\"last\"],(function(t,e){var n=\"take\"+(e?\"Right\":\"\");Wn.prototype[t]=function(){return this[n](1).value()[0]}})),ke([\"initial\",\"tail\"],(function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Wn.prototype[t]=function(){return this.__filtered__?new Wn(this):this[n](1)}})),Wn.prototype.compact=function(){return this.filter(iu)},Wn.prototype.find=function(t){return this.filter(t).head()},Wn.prototype.findLast=function(t){return this.reverse().find(t)},Wn.prototype.invokeMap=Qr((function(t,e){return\"function\"==typeof t?new Wn(this):this.map((function(n){return jr(n,t,e)}))})),Wn.prototype.reject=function(t){return this.filter(Ls(lo(t)))},Wn.prototype.slice=function(t,e){t=ga(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Wn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==i&&(n=(e=ga(e))<0?n.dropRight(-e):n.take(e-t)),n)},Wn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Wn.prototype.toArray=function(){return this.take(v)},_r(Wn.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),o=Un[r?\"take\"+(\"last\"==e?\"Right\":\"\"):e],s=r||/^find/.test(e);o&&(Un.prototype[e]=function(){var e=this.__wrapped__,a=r?[1]:arguments,u=e instanceof Wn,l=a[0],c=u||Ws(e),f=function(t){var e=o.apply(Un,Le([t],a));return r&&p?e[0]:e};c&&n&&\"function\"==typeof l&&1!=l.length&&(u=c=!1);var p=this.__chain__,h=!!this.__actions__.length,d=s&&!p,g=u&&!h;if(!s&&c){e=g?e:new Wn(this);var v=t.apply(e,a);return v.__actions__.push({func:ds,args:[f],thisArg:i}),new Bn(v,p)}return d&&g?t.apply(this,a):(v=this.thru(f),d?r?v.value()[0]:v.value():v)})})),ke([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],(function(t){var e=jt[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Un.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(Ws(i)?i:[],t)}return this[n]((function(n){return e.apply(Ws(n)?n:[],t)}))}})),_r(Wn.prototype,(function(t,e){var n=Un[e];if(n){var r=n.name+\"\";Lt.call(On,r)||(On[r]=[]),On[r].push({name:e,func:n})}})),On[Ui(i,2).name]=[{name:\"wrapper\",func:i}],Wn.prototype.clone=function(){var t=new Wn(this.__wrapped__);return t.__actions__=Di(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Di(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Di(this.__views__),t},Wn.prototype.reverse=function(){if(this.__filtered__){var t=new Wn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Wn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Ws(t),r=e<0,i=n?t.length:0,o=function(t,e,n){var r=-1,i=n.length;for(;++r<i;){var o=n[r],s=o.size;switch(o.type){case\"drop\":t+=s;break;case\"dropRight\":e-=s;break;case\"take\":e=wn(e,t+s);break;case\"takeRight\":t=bn(t,e-s)}}return{start:t,end:e}}(0,i,this.__views__),s=o.start,a=o.end,u=a-s,l=r?a:s-1,c=this.__iteratees__,f=c.length,p=0,h=wn(u,this.__takeCount__);if(!n||!r&&i==u&&h==u)return gi(t,this.__actions__);var d=[];t:for(;u--&&p<h;){for(var g=-1,v=t[l+=e];++g<f;){var m=c[g],y=m.iteratee,b=m.type,w=y(v);if(2==b)v=w;else if(!w){if(1==b)continue t;break t}}d[p++]=v}return d},Un.prototype.at=gs,Un.prototype.chain=function(){return hs(this)},Un.prototype.commit=function(){return new Bn(this.value(),this.__chain__)},Un.prototype.next=function(){this.__values__===i&&(this.__values__=ha(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?i:this.__values__[this.__index__++]}},Un.prototype.plant=function(t){for(var e,n=this;n instanceof zn;){var r=Mo(n);r.__index__=0,r.__values__=i,e?o.__wrapped__=r:e=r;var o=r;n=n.__wrapped__}return o.__wrapped__=t,e},Un.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Wn){var e=t;return this.__actions__.length&&(e=new Wn(this)),(e=e.reverse()).__actions__.push({func:ds,args:[es],thisArg:i}),new Bn(e,this.__chain__)}return this.thru(es)},Un.prototype.toJSON=Un.prototype.valueOf=Un.prototype.value=function(){return gi(this.__wrapped__,this.__actions__)},Un.prototype.first=Un.prototype.head,Jt&&(Un.prototype[Jt]=function(){return this}),Un}();ge._=yn,(r=function(){return yn}.call(e,n,e,t))===i||(t.exports=r)}.call(this)},155:t=>{var e,n,r=t.exports={};function i(){throw new Error(\"setTimeout has not been defined\")}function o(){throw new Error(\"clearTimeout has not been defined\")}function s(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(n){try{return e.call(null,t,0)}catch(n){return e.call(this,t,0)}}}!function(){try{e=\"function\"==typeof setTimeout?setTimeout:i}catch(t){e=i}try{n=\"function\"==typeof clearTimeout?clearTimeout:o}catch(t){n=o}}();var a,u=[],l=!1,c=-1;function f(){l&&a&&(l=!1,a.length?u=a.concat(u):c=-1,u.length&&p())}function p(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c<e;)a&&a[c].run();c=-1,e=u.length}a=null,l=!1,function(t){if(n===clearTimeout)return clearTimeout(t);if((n===o||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(t);try{return n(t)}catch(e){try{return n.call(null,t)}catch(e){return n.call(this,t)}}}(t)}}function h(t,e){this.fun=t,this.array=e}function d(){}r.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new h(t,e)),1!==u.length||l||s(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},r.title=\"browser\",r.browser=!0,r.env={},r.argv=[],r.version=\"\",r.versions={},r.on=d,r.addListener=d,r.once=d,r.off=d,r.removeListener=d,r.removeAllListeners=d,r.emit=d,r.prependListener=d,r.prependOnceListener=d,r.listeners=function(t){return[]},r.binding=function(t){throw new Error(\"process.binding is not supported\")},r.cwd=function(){return\"/\"},r.chdir=function(t){throw new Error(\"process.chdir is not supported\")},r.umask=function(){return 0}},686:(t,e,n)=>{var r,i,o;i=[n(755)],void 0===(o=\"function\"==typeof(r=function(t){var e=function(){if(t&&t.fn&&t.fn.select2&&t.fn.select2.amd)var e=t.fn.select2.amd;var n,r,i;return e&&e.requirejs||(e?r=e:e={},function(t){var e,o,s,a,u={},l={},c={},f={},p=Object.prototype.hasOwnProperty,h=[].slice,d=/\\.js$/;function g(t,e){return p.call(t,e)}function v(t,e){var n,r,i,o,s,a,u,l,f,p,h,g=e&&e.split(\"/\"),v=c.map,m=v&&v[\"*\"]||{};if(t){for(s=(t=t.split(\"/\")).length-1,c.nodeIdCompat&&d.test(t[s])&&(t[s]=t[s].replace(d,\"\")),\".\"===t[0].charAt(0)&&g&&(t=g.slice(0,g.length-1).concat(t)),f=0;f<t.length;f++)if(\".\"===(h=t[f]))t.splice(f,1),f-=1;else if(\"..\"===h){if(0===f||1===f&&\"..\"===t[2]||\"..\"===t[f-1])continue;f>0&&(t.splice(f-1,2),f-=2)}t=t.join(\"/\")}if((g||m)&&v){for(f=(n=t.split(\"/\")).length;f>0;f-=1){if(r=n.slice(0,f).join(\"/\"),g)for(p=g.length;p>0;p-=1)if((i=v[g.slice(0,p).join(\"/\")])&&(i=i[r])){o=i,a=f;break}if(o)break;!u&&m&&m[r]&&(u=m[r],l=f)}!o&&u&&(o=u,a=l),o&&(n.splice(0,a,o),t=n.join(\"/\"))}return t}function m(e,n){return function(){var r=h.call(arguments,0);return\"string\"!=typeof r[0]&&1===r.length&&r.push(null),o.apply(t,r.concat([e,n]))}}function y(t){return function(e){return v(e,t)}}function b(t){return function(e){u[t]=e}}function w(n){if(g(l,n)){var r=l[n];delete l[n],f[n]=!0,e.apply(t,r)}if(!g(u,n)&&!g(f,n))throw new Error(\"No \"+n);return u[n]}function _(t){var e,n=t?t.indexOf(\"!\"):-1;return n>-1&&(e=t.substring(0,n),t=t.substring(n+1,t.length)),[e,t]}function x(t){return t?_(t):[]}function T(t){return function(){return c&&c.config&&c.config[t]||{}}}s=function(t,e){var n,r=_(t),i=r[0],o=e[1];return t=r[1],i&&(n=w(i=v(i,o))),i?t=n&&n.normalize?n.normalize(t,y(o)):v(t,o):(i=(r=_(t=v(t,o)))[0],t=r[1],i&&(n=w(i))),{f:i?i+\"!\"+t:t,n:t,pr:i,p:n}},a={require:function(t){return m(t)},exports:function(t){var e=u[t];return void 0!==e?e:u[t]={}},module:function(t){return{id:t,uri:\"\",exports:u[t],config:T(t)}}},e=function(e,n,r,i){var o,c,p,h,d,v,y,_=[],T=typeof r;if(v=x(i=i||e),\"undefined\"===T||\"function\"===T){for(n=!n.length&&r.length?[\"require\",\"exports\",\"module\"]:n,d=0;d<n.length;d+=1)if(\"require\"===(c=(h=s(n[d],v)).f))_[d]=a.require(e);else if(\"exports\"===c)_[d]=a.exports(e),y=!0;else if(\"module\"===c)o=_[d]=a.module(e);else if(g(u,c)||g(l,c)||g(f,c))_[d]=w(c);else{if(!h.p)throw new Error(e+\" missing \"+c);h.p.load(h.n,m(i,!0),b(c),{}),_[d]=u[c]}p=r?r.apply(u[e],_):void 0,e&&(o&&o.exports!==t&&o.exports!==u[e]?u[e]=o.exports:p===t&&y||(u[e]=p))}else e&&(u[e]=r)},n=r=o=function(n,r,i,u,l){if(\"string\"==typeof n)return a[n]?a[n](r):w(s(n,x(r)).f);if(!n.splice){if((c=n).deps&&o(c.deps,c.callback),!r)return;r.splice?(n=r,r=i,i=null):n=t}return r=r||function(){},\"function\"==typeof i&&(i=u,u=l),u?e(t,n,r,i):setTimeout((function(){e(t,n,r,i)}),4),o},o.config=function(t){return o(t)},n._defined=u,(i=function(t,e,n){if(\"string\"!=typeof t)throw new Error(\"See almond README: incorrect module build, no module name\");e.splice||(n=e,e=[]),g(u,t)||g(l,t)||(l[t]=[t,e,n])}).amd={jQuery:!0}}(),e.requirejs=n,e.require=r,e.define=i),e.define(\"almond\",(function(){})),e.define(\"jquery\",[],(function(){var e=t||$;return null==e&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),e})),e.define(\"select2/utils\",[\"jquery\"],(function(t){var e={};function n(t){var e=t.prototype,n=[];for(var r in e)\"function\"==typeof e[r]&&\"constructor\"!==r&&n.push(r);return n}e.Extend=function(t,e){var n={}.hasOwnProperty;function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},e.Decorate=function(t,e){var r=n(e),i=n(t);function o(){var n=Array.prototype.unshift,r=e.prototype.constructor.length,i=t.prototype.constructor;r>0&&(n.call(arguments,t.prototype.constructor),i=e.prototype.constructor),i.apply(this,arguments)}function s(){this.constructor=o}e.displayName=t.displayName,o.prototype=new s;for(var a=0;a<i.length;a++){var u=i[a];o.prototype[u]=t.prototype[u]}for(var l=function(t){var n=function(){};t in o.prototype&&(n=o.prototype[t]);var r=e.prototype[t];return function(){return Array.prototype.unshift.call(arguments,n),r.apply(this,arguments)}},c=0;c<r.length;c++){var f=r[c];o.prototype[f]=l(f)}return o};var r=function(){this.listeners={}};r.prototype.on=function(t,e){this.listeners=this.listeners||{},t in this.listeners?this.listeners[t].push(e):this.listeners[t]=[e]},r.prototype.trigger=function(t){var e=Array.prototype.slice,n=e.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),n[0]._type=t,t in this.listeners&&this.invoke(this.listeners[t],e.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},r.prototype.invoke=function(t,e){for(var n=0,r=t.length;n<r;n++)t[n].apply(this,e)},e.Observable=r,e.generateChars=function(t){for(var e=\"\",n=0;n<t;n++)e+=Math.floor(36*Math.random()).toString(36);return e},e.bind=function(t,e){return function(){t.apply(e,arguments)}},e._convertData=function(t){for(var e in t){var n=e.split(\"-\"),r=t;if(1!==n.length){for(var i=0;i<n.length;i++){var o=n[i];(o=o.substring(0,1).toLowerCase()+o.substring(1))in r||(r[o]={}),i==n.length-1&&(r[o]=t[e]),r=r[o]}delete t[e]}}return t},e.hasScroll=function(e,n){var r=t(n),i=n.style.overflowX,o=n.style.overflowY;return(i!==o||\"hidden\"!==o&&\"visible\"!==o)&&(\"scroll\"===i||\"scroll\"===o||r.innerHeight()<n.scrollHeight||r.innerWidth()<n.scrollWidth)},e.escapeMarkup=function(t){var e={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#47;\"};return\"string\"!=typeof t?t:String(t).replace(/[&<>\"'\\/\\\\]/g,(function(t){return e[t]}))},e.appendMany=function(e,n){if(\"1.7\"===t.fn.jquery.substr(0,3)){var r=t();t.map(n,(function(t){r=r.add(t)})),n=r}e.append(n)},e.__cache={};var i=0;return e.GetUniqueElementId=function(t){var e=t.getAttribute(\"data-select2-id\");return null==e&&(t.id?(e=t.id,t.setAttribute(\"data-select2-id\",e)):(t.setAttribute(\"data-select2-id\",++i),e=i.toString())),e},e.StoreData=function(t,n,r){var i=e.GetUniqueElementId(t);e.__cache[i]||(e.__cache[i]={}),e.__cache[i][n]=r},e.GetData=function(n,r){var i=e.GetUniqueElementId(n);return r?e.__cache[i]&&null!=e.__cache[i][r]?e.__cache[i][r]:t(n).data(r):e.__cache[i]},e.RemoveData=function(t){var n=e.GetUniqueElementId(t);null!=e.__cache[n]&&delete e.__cache[n],t.removeAttribute(\"data-select2-id\")},e})),e.define(\"select2/results\",[\"jquery\",\"./utils\"],(function(t,e){function n(t,e,r){this.$element=t,this.data=r,this.options=e,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');return this.options.get(\"multiple\")&&e.attr(\"aria-multiselectable\",\"true\"),this.$results=e,e},n.prototype.clear=function(){this.$results.empty()},n.prototype.displayMessage=function(e){var n=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var r=t('<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'),i=this.options.get(\"translations\").get(e.message);r.append(n(i(e.args))),r[0].className+=\" select2-results__message\",this.$results.append(r)},n.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},n.prototype.append=function(t){this.hideLoading();var e=[];if(null!=t.results&&0!==t.results.length){t.results=this.sort(t.results);for(var n=0;n<t.results.length;n++){var r=t.results[n],i=this.option(r);e.push(i)}this.$results.append(e)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},n.prototype.position=function(t,e){e.find(\".select2-results\").append(t)},n.prototype.sort=function(t){return this.options.get(\"sorter\")(t)},n.prototype.highlightFirstItem=function(){var t=this.$results.find(\".select2-results__option[aria-selected]\"),e=t.filter(\"[aria-selected=true]\");e.length>0?e.first().trigger(\"mouseenter\"):t.first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},n.prototype.setClasses=function(){var n=this;this.data.current((function(r){var i=t.map(r,(function(t){return t.id.toString()}));n.$results.find(\".select2-results__option[aria-selected]\").each((function(){var n=t(this),r=e.GetData(this,\"data\"),o=\"\"+r.id;null!=r.element&&r.element.selected||null==r.element&&t.inArray(o,i)>-1?n.attr(\"aria-selected\",\"true\"):n.attr(\"aria-selected\",\"false\")}))}))},n.prototype.showLoading=function(t){this.hideLoading();var e={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(t)},n=this.option(e);n.className+=\" loading-results\",this.$results.prepend(n)},n.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},n.prototype.option=function(n){var r=document.createElement(\"li\");r.className=\"select2-results__option\";var i={role:\"option\",\"aria-selected\":\"false\"},o=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var s in(null!=n.element&&o.call(n.element,\":disabled\")||null==n.element&&n.disabled)&&(delete i[\"aria-selected\"],i[\"aria-disabled\"]=\"true\"),null==n.id&&delete i[\"aria-selected\"],null!=n._resultId&&(r.id=n._resultId),n.title&&(r.title=n.title),n.children&&(i.role=\"group\",i[\"aria-label\"]=n.text,delete i[\"aria-selected\"]),i){var a=i[s];r.setAttribute(s,a)}if(n.children){var u=t(r),l=document.createElement(\"strong\");l.className=\"select2-results__group\",t(l),this.template(n,l);for(var c=[],f=0;f<n.children.length;f++){var p=n.children[f],h=this.option(p);c.push(h)}var d=t(\"<ul></ul>\",{class:\"select2-results__options select2-results__options--nested\"});d.append(c),u.append(l),u.append(d)}else this.template(n,r);return e.StoreData(r,\"data\",n),r},n.prototype.bind=function(n,r){var i=this,o=n.id+\"-results\";this.$results.attr(\"id\",o),n.on(\"results:all\",(function(t){i.clear(),i.append(t.data),n.isOpen()&&(i.setClasses(),i.highlightFirstItem())})),n.on(\"results:append\",(function(t){i.append(t.data),n.isOpen()&&i.setClasses()})),n.on(\"query\",(function(t){i.hideMessages(),i.showLoading(t)})),n.on(\"select\",(function(){n.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())})),n.on(\"unselect\",(function(){n.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())})),n.on(\"open\",(function(){i.$results.attr(\"aria-expanded\",\"true\"),i.$results.attr(\"aria-hidden\",\"false\"),i.setClasses(),i.ensureHighlightVisible()})),n.on(\"close\",(function(){i.$results.attr(\"aria-expanded\",\"false\"),i.$results.attr(\"aria-hidden\",\"true\"),i.$results.removeAttr(\"aria-activedescendant\")})),n.on(\"results:toggle\",(function(){var t=i.getHighlightedResults();0!==t.length&&t.trigger(\"mouseup\")})),n.on(\"results:select\",(function(){var t=i.getHighlightedResults();if(0!==t.length){var n=e.GetData(t[0],\"data\");\"true\"==t.attr(\"aria-selected\")?i.trigger(\"close\",{}):i.trigger(\"select\",{data:n})}})),n.on(\"results:previous\",(function(){var t=i.getHighlightedResults(),e=i.$results.find(\"[aria-selected]\"),n=e.index(t);if(!(n<=0)){var r=n-1;0===t.length&&(r=0);var o=e.eq(r);o.trigger(\"mouseenter\");var s=i.$results.offset().top,a=o.offset().top,u=i.$results.scrollTop()+(a-s);0===r?i.$results.scrollTop(0):a-s<0&&i.$results.scrollTop(u)}})),n.on(\"results:next\",(function(){var t=i.getHighlightedResults(),e=i.$results.find(\"[aria-selected]\"),n=e.index(t)+1;if(!(n>=e.length)){var r=e.eq(n);r.trigger(\"mouseenter\");var o=i.$results.offset().top+i.$results.outerHeight(!1),s=r.offset().top+r.outerHeight(!1),a=i.$results.scrollTop()+s-o;0===n?i.$results.scrollTop(0):s>o&&i.$results.scrollTop(a)}})),n.on(\"results:focus\",(function(t){t.element.addClass(\"select2-results__option--highlighted\")})),n.on(\"results:message\",(function(t){i.displayMessage(t)})),t.fn.mousewheel&&this.$results.on(\"mousewheel\",(function(t){var e=i.$results.scrollTop(),n=i.$results.get(0).scrollHeight-e+t.deltaY,r=t.deltaY>0&&e-t.deltaY<=0,o=t.deltaY<0&&n<=i.$results.height();r?(i.$results.scrollTop(0),t.preventDefault(),t.stopPropagation()):o&&(i.$results.scrollTop(i.$results.get(0).scrollHeight-i.$results.height()),t.preventDefault(),t.stopPropagation())})),this.$results.on(\"mouseup\",\".select2-results__option[aria-selected]\",(function(n){var r=t(this),o=e.GetData(this,\"data\");\"true\"!==r.attr(\"aria-selected\")?i.trigger(\"select\",{originalEvent:n,data:o}):i.options.get(\"multiple\")?i.trigger(\"unselect\",{originalEvent:n,data:o}):i.trigger(\"close\",{})})),this.$results.on(\"mouseenter\",\".select2-results__option[aria-selected]\",(function(n){var r=e.GetData(this,\"data\");i.getHighlightedResults().removeClass(\"select2-results__option--highlighted\"),i.trigger(\"results:focus\",{data:r,element:t(this)})}))},n.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},n.prototype.destroy=function(){this.$results.remove()},n.prototype.ensureHighlightVisible=function(){var t=this.getHighlightedResults();if(0!==t.length){var e=this.$results.find(\"[aria-selected]\").index(t),n=this.$results.offset().top,r=t.offset().top,i=this.$results.scrollTop()+(r-n),o=r-n;i-=2*t.outerHeight(!1),e<=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o<0)&&this.$results.scrollTop(i)}},n.prototype.template=function(e,n){var r=this.options.get(\"templateResult\"),i=this.options.get(\"escapeMarkup\"),o=r(e,n);null==o?n.style.display=\"none\":\"string\"==typeof o?n.innerHTML=i(o):t(n).append(o)},n})),e.define(\"select2/keys\",[],(function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}})),e.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],(function(t,e,n){function r(t,e){this.$element=t,this.options=e,r.__super__.constructor.call(this)}return e.Extend(r,e.Observable),r.prototype.render=function(){var n=t('<span class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\"></span>');return this._tabindex=0,null!=e.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=e.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),n.attr(\"title\",this.$element.attr(\"title\")),n.attr(\"tabindex\",this._tabindex),n.attr(\"aria-disabled\",\"false\"),this.$selection=n,n},r.prototype.bind=function(t,e){var r=this,i=t.id+\"-results\";this.container=t,this.$selection.on(\"focus\",(function(t){r.trigger(\"focus\",t)})),this.$selection.on(\"blur\",(function(t){r._handleBlur(t)})),this.$selection.on(\"keydown\",(function(t){r.trigger(\"keypress\",t),t.which===n.SPACE&&t.preventDefault()})),t.on(\"results:focus\",(function(t){r.$selection.attr(\"aria-activedescendant\",t.data._resultId)})),t.on(\"selection:update\",(function(t){r.update(t.data)})),t.on(\"open\",(function(){r.$selection.attr(\"aria-expanded\",\"true\"),r.$selection.attr(\"aria-owns\",i),r._attachCloseHandler(t)})),t.on(\"close\",(function(){r.$selection.attr(\"aria-expanded\",\"false\"),r.$selection.removeAttr(\"aria-activedescendant\"),r.$selection.removeAttr(\"aria-owns\"),r.$selection.trigger(\"focus\"),r._detachCloseHandler(t)})),t.on(\"enable\",(function(){r.$selection.attr(\"tabindex\",r._tabindex),r.$selection.attr(\"aria-disabled\",\"false\")})),t.on(\"disable\",(function(){r.$selection.attr(\"tabindex\",\"-1\"),r.$selection.attr(\"aria-disabled\",\"true\")}))},r.prototype._handleBlur=function(e){var n=this;window.setTimeout((function(){document.activeElement==n.$selection[0]||t.contains(n.$selection[0],document.activeElement)||n.trigger(\"blur\",e)}),1)},r.prototype._attachCloseHandler=function(n){t(document.body).on(\"mousedown.select2.\"+n.id,(function(n){var r=t(n.target).closest(\".select2\");t(\".select2.select2-container--open\").each((function(){this!=r[0]&&e.GetData(this,\"element\").select2(\"close\")}))}))},r.prototype._detachCloseHandler=function(e){t(document.body).off(\"mousedown.select2.\"+e.id)},r.prototype.position=function(t,e){e.find(\".selection\").append(t)},r.prototype.destroy=function(){this._detachCloseHandler(this.container)},r.prototype.update=function(t){throw new Error(\"The `update` method must be defined in child classes.\")},r.prototype.isEnabled=function(){return!this.isDisabled()},r.prototype.isDisabled=function(){return this.options.get(\"disabled\")},r})),e.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],(function(t,e,n,r){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,e),i.prototype.render=function(){var t=i.__super__.render.call(this);return t.addClass(\"select2-selection--single\"),t.html('<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'),t},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var r=t.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",r).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",r),this.$selection.on(\"mousedown\",(function(t){1===t.which&&n.trigger(\"toggle\",{originalEvent:t})})),this.$selection.on(\"focus\",(function(t){})),this.$selection.on(\"blur\",(function(t){})),t.on(\"focus\",(function(e){t.isOpen()||n.$selection.trigger(\"focus\")}))},i.prototype.clear=function(){var t=this.$selection.find(\".select2-selection__rendered\");t.empty(),t.removeAttr(\"title\")},i.prototype.display=function(t,e){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(t,e))},i.prototype.selectionContainer=function(){return t(\"<span></span>\")},i.prototype.update=function(t){if(0!==t.length){var e=t[0],n=this.$selection.find(\".select2-selection__rendered\"),r=this.display(e,n);n.empty().append(r);var i=e.title||e.text;i?n.attr(\"title\",i):n.removeAttr(\"title\")}else this.clear()},i})),e.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],(function(t,e,n){function r(t,e){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,e),r.prototype.render=function(){var t=r.__super__.render.call(this);return t.addClass(\"select2-selection--multiple\"),t.html('<ul class=\"select2-selection__rendered\"></ul>'),t},r.prototype.bind=function(e,i){var o=this;r.__super__.bind.apply(this,arguments),this.$selection.on(\"click\",(function(t){o.trigger(\"toggle\",{originalEvent:t})})),this.$selection.on(\"click\",\".select2-selection__choice__remove\",(function(e){if(!o.isDisabled()){var r=t(this).parent(),i=n.GetData(r[0],\"data\");o.trigger(\"unselect\",{originalEvent:e,data:i})}}))},r.prototype.clear=function(){var t=this.$selection.find(\".select2-selection__rendered\");t.empty(),t.removeAttr(\"title\")},r.prototype.display=function(t,e){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(t,e))},r.prototype.selectionContainer=function(){return t('<li class=\"select2-selection__choice\"><span class=\"select2-selection__choice__remove\" role=\"presentation\">&times;</span></li>')},r.prototype.update=function(t){if(this.clear(),0!==t.length){for(var e=[],r=0;r<t.length;r++){var i=t[r],o=this.selectionContainer(),s=this.display(i,o);o.append(s);var a=i.title||i.text;a&&o.attr(\"title\",a),n.StoreData(o[0],\"data\",i),e.push(o)}var u=this.$selection.find(\".select2-selection__rendered\");n.appendMany(u,e)}},r})),e.define(\"select2/selection/placeholder\",[\"../utils\"],(function(t){function e(t,e,n){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),t.call(this,e,n)}return e.prototype.normalizePlaceholder=function(t,e){return\"string\"==typeof e&&(e={id:\"\",text:e}),e},e.prototype.createPlaceholder=function(t,e){var n=this.selectionContainer();return n.html(this.display(e)),n.addClass(\"select2-selection__placeholder\").removeClass(\"select2-selection__choice\"),n},e.prototype.update=function(t,e){var n=1==e.length&&e[0].id!=this.placeholder.id;if(e.length>1||n)return t.call(this,e);this.clear();var r=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(r)},e})),e.define(\"select2/selection/allowClear\",[\"jquery\",\"../keys\",\"../utils\"],(function(t,e,n){function r(){}return r.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",(function(t){r._handleClear(t)})),e.on(\"keypress\",(function(t){r._handleKeyboardClear(t,e)}))},r.prototype._handleClear=function(t,e){if(!this.isDisabled()){var r=this.$selection.find(\".select2-selection__clear\");if(0!==r.length){e.stopPropagation();var i=n.GetData(r[0],\"data\"),o=this.$element.val();this.$element.val(this.placeholder.id);var s={data:i};if(this.trigger(\"clear\",s),s.prevented)this.$element.val(o);else{for(var a=0;a<i.length;a++)if(s={data:i[a]},this.trigger(\"unselect\",s),s.prevented)return void this.$element.val(o);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},r.prototype._handleKeyboardClear=function(t,n,r){r.isOpen()||n.which!=e.DELETE&&n.which!=e.BACKSPACE||this._handleClear(n)},r.prototype.update=function(e,r){if(e.call(this,r),!(this.$selection.find(\".select2-selection__placeholder\").length>0||0===r.length)){var i=this.options.get(\"translations\").get(\"removeAllItems\"),o=t('<span class=\"select2-selection__clear\" title=\"'+i()+'\">&times;</span>');n.StoreData(o[0],\"data\",r),this.$selection.find(\".select2-selection__rendered\").prepend(o)}},r})),e.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],(function(t,e,n){function r(t,e,n){t.call(this,e,n)}return r.prototype.render=function(e){var n=t('<li class=\"select2-search select2-search--inline\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></li>');this.$searchContainer=n,this.$search=n.find(\"input\");var r=e.call(this);return this._transferTabIndex(),r},r.prototype.bind=function(t,r,i){var o=this,s=r.id+\"-results\";t.call(this,r,i),r.on(\"open\",(function(){o.$search.attr(\"aria-controls\",s),o.$search.trigger(\"focus\")})),r.on(\"close\",(function(){o.$search.val(\"\"),o.$search.removeAttr(\"aria-controls\"),o.$search.removeAttr(\"aria-activedescendant\"),o.$search.trigger(\"focus\")})),r.on(\"enable\",(function(){o.$search.prop(\"disabled\",!1),o._transferTabIndex()})),r.on(\"disable\",(function(){o.$search.prop(\"disabled\",!0)})),r.on(\"focus\",(function(t){o.$search.trigger(\"focus\")})),r.on(\"results:focus\",(function(t){t.data._resultId?o.$search.attr(\"aria-activedescendant\",t.data._resultId):o.$search.removeAttr(\"aria-activedescendant\")})),this.$selection.on(\"focusin\",\".select2-search--inline\",(function(t){o.trigger(\"focus\",t)})),this.$selection.on(\"focusout\",\".select2-search--inline\",(function(t){o._handleBlur(t)})),this.$selection.on(\"keydown\",\".select2-search--inline\",(function(t){if(t.stopPropagation(),o.trigger(\"keypress\",t),o._keyUpPrevented=t.isDefaultPrevented(),t.which===n.BACKSPACE&&\"\"===o.$search.val()){var r=o.$searchContainer.prev(\".select2-selection__choice\");if(r.length>0){var i=e.GetData(r[0],\"data\");o.searchRemoveChoice(i),t.preventDefault()}}})),this.$selection.on(\"click\",\".select2-search--inline\",(function(t){o.$search.val()&&t.stopPropagation()}));var a=document.documentMode,u=a&&a<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",(function(t){u?o.$selection.off(\"input.search input.searchcheck\"):o.$selection.off(\"keyup.search\")})),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",(function(t){if(u&&\"input\"===t.type)o.$selection.off(\"input.search input.searchcheck\");else{var e=t.which;e!=n.SHIFT&&e!=n.CTRL&&e!=n.ALT&&e!=n.TAB&&o.handleSearch(t)}}))},r.prototype._transferTabIndex=function(t){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},r.prototype.createPlaceholder=function(t,e){this.$search.attr(\"placeholder\",e.text)},r.prototype.update=function(t,e){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),t.call(this,e),this.$selection.find(\".select2-selection__rendered\").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},r.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var t=this.$search.val();this.trigger(\"query\",{term:t})}this._keyUpPrevented=!1},r.prototype.searchRemoveChoice=function(t,e){this.trigger(\"unselect\",{data:e}),this.$search.val(e.text),this.handleSearch()},r.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var t=\"\";t=\"\"!==this.$search.attr(\"placeholder\")?this.$selection.find(\".select2-selection__rendered\").width():.75*(this.$search.val().length+1)+\"em\",this.$search.css(\"width\",t)},r})),e.define(\"select2/selection/eventRelay\",[\"jquery\"],(function(t){function e(){}return e.prototype.bind=function(e,n,r){var i=this,o=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],s=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];e.call(this,n,r),n.on(\"*\",(function(e,n){if(-1!==t.inArray(e,o)){n=n||{};var r=t.Event(\"select2:\"+e,{params:n});i.$element.trigger(r),-1!==t.inArray(e,s)&&(n.prevented=r.isDefaultPrevented())}}))},e})),e.define(\"select2/translation\",[\"jquery\",\"require\"],(function(t,e){function n(t){this.dict=t||{}}return n.prototype.all=function(){return this.dict},n.prototype.get=function(t){return this.dict[t]},n.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},n._cache={},n.loadPath=function(t){if(!(t in n._cache)){var r=e(t);n._cache[t]=r}return new n(n._cache[t])},n})),e.define(\"select2/diacritics\",[],(function(){return{\"Ⓐ\":\"A\",Ａ:\"A\",À:\"A\",Á:\"A\",Â:\"A\",Ầ:\"A\",Ấ:\"A\",Ẫ:\"A\",Ẩ:\"A\",Ã:\"A\",Ā:\"A\",Ă:\"A\",Ằ:\"A\",Ắ:\"A\",Ẵ:\"A\",Ẳ:\"A\",Ȧ:\"A\",Ǡ:\"A\",Ä:\"A\",Ǟ:\"A\",Ả:\"A\",Å:\"A\",Ǻ:\"A\",Ǎ:\"A\",Ȁ:\"A\",Ȃ:\"A\",Ạ:\"A\",Ậ:\"A\",Ặ:\"A\",Ḁ:\"A\",Ą:\"A\",Ⱥ:\"A\",Ɐ:\"A\",Ꜳ:\"AA\",Æ:\"AE\",Ǽ:\"AE\",Ǣ:\"AE\",Ꜵ:\"AO\",Ꜷ:\"AU\",Ꜹ:\"AV\",Ꜻ:\"AV\",Ꜽ:\"AY\",\"Ⓑ\":\"B\",Ｂ:\"B\",Ḃ:\"B\",Ḅ:\"B\",Ḇ:\"B\",Ƀ:\"B\",Ƃ:\"B\",Ɓ:\"B\",\"Ⓒ\":\"C\",Ｃ:\"C\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",Ç:\"C\",Ḉ:\"C\",Ƈ:\"C\",Ȼ:\"C\",Ꜿ:\"C\",\"Ⓓ\":\"D\",Ｄ:\"D\",Ḋ:\"D\",Ď:\"D\",Ḍ:\"D\",Ḑ:\"D\",Ḓ:\"D\",Ḏ:\"D\",Đ:\"D\",Ƌ:\"D\",Ɗ:\"D\",Ɖ:\"D\",Ꝺ:\"D\",Ǳ:\"DZ\",Ǆ:\"DZ\",ǲ:\"Dz\",ǅ:\"Dz\",\"Ⓔ\":\"E\",Ｅ:\"E\",È:\"E\",É:\"E\",Ê:\"E\",Ề:\"E\",Ế:\"E\",Ễ:\"E\",Ể:\"E\",Ẽ:\"E\",Ē:\"E\",Ḕ:\"E\",Ḗ:\"E\",Ĕ:\"E\",Ė:\"E\",Ë:\"E\",Ẻ:\"E\",Ě:\"E\",Ȅ:\"E\",Ȇ:\"E\",Ẹ:\"E\",Ệ:\"E\",Ȩ:\"E\",Ḝ:\"E\",Ę:\"E\",Ḙ:\"E\",Ḛ:\"E\",Ɛ:\"E\",Ǝ:\"E\",\"Ⓕ\":\"F\",Ｆ:\"F\",Ḟ:\"F\",Ƒ:\"F\",Ꝼ:\"F\",\"Ⓖ\":\"G\",Ｇ:\"G\",Ǵ:\"G\",Ĝ:\"G\",Ḡ:\"G\",Ğ:\"G\",Ġ:\"G\",Ǧ:\"G\",Ģ:\"G\",Ǥ:\"G\",Ɠ:\"G\",Ꞡ:\"G\",Ᵹ:\"G\",Ꝿ:\"G\",\"Ⓗ\":\"H\",Ｈ:\"H\",Ĥ:\"H\",Ḣ:\"H\",Ḧ:\"H\",Ȟ:\"H\",Ḥ:\"H\",Ḩ:\"H\",Ḫ:\"H\",Ħ:\"H\",Ⱨ:\"H\",Ⱶ:\"H\",Ɥ:\"H\",\"Ⓘ\":\"I\",Ｉ:\"I\",Ì:\"I\",Í:\"I\",Î:\"I\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",İ:\"I\",Ï:\"I\",Ḯ:\"I\",Ỉ:\"I\",Ǐ:\"I\",Ȉ:\"I\",Ȋ:\"I\",Ị:\"I\",Į:\"I\",Ḭ:\"I\",Ɨ:\"I\",\"Ⓙ\":\"J\",Ｊ:\"J\",Ĵ:\"J\",Ɉ:\"J\",\"Ⓚ\":\"K\",Ｋ:\"K\",Ḱ:\"K\",Ǩ:\"K\",Ḳ:\"K\",Ķ:\"K\",Ḵ:\"K\",Ƙ:\"K\",Ⱪ:\"K\",Ꝁ:\"K\",Ꝃ:\"K\",Ꝅ:\"K\",Ꞣ:\"K\",\"Ⓛ\":\"L\",Ｌ:\"L\",Ŀ:\"L\",Ĺ:\"L\",Ľ:\"L\",Ḷ:\"L\",Ḹ:\"L\",Ļ:\"L\",Ḽ:\"L\",Ḻ:\"L\",Ł:\"L\",Ƚ:\"L\",Ɫ:\"L\",Ⱡ:\"L\",Ꝉ:\"L\",Ꝇ:\"L\",Ꞁ:\"L\",Ǉ:\"LJ\",ǈ:\"Lj\",\"Ⓜ\":\"M\",Ｍ:\"M\",Ḿ:\"M\",Ṁ:\"M\",Ṃ:\"M\",Ɱ:\"M\",Ɯ:\"M\",\"Ⓝ\":\"N\",Ｎ:\"N\",Ǹ:\"N\",Ń:\"N\",Ñ:\"N\",Ṅ:\"N\",Ň:\"N\",Ṇ:\"N\",Ņ:\"N\",Ṋ:\"N\",Ṉ:\"N\",Ƞ:\"N\",Ɲ:\"N\",Ꞑ:\"N\",Ꞥ:\"N\",Ǌ:\"NJ\",ǋ:\"Nj\",\"Ⓞ\":\"O\",Ｏ:\"O\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Ồ:\"O\",Ố:\"O\",Ỗ:\"O\",Ổ:\"O\",Õ:\"O\",Ṍ:\"O\",Ȭ:\"O\",Ṏ:\"O\",Ō:\"O\",Ṑ:\"O\",Ṓ:\"O\",Ŏ:\"O\",Ȯ:\"O\",Ȱ:\"O\",Ö:\"O\",Ȫ:\"O\",Ỏ:\"O\",Ő:\"O\",Ǒ:\"O\",Ȍ:\"O\",Ȏ:\"O\",Ơ:\"O\",Ờ:\"O\",Ớ:\"O\",Ỡ:\"O\",Ở:\"O\",Ợ:\"O\",Ọ:\"O\",Ộ:\"O\",Ǫ:\"O\",Ǭ:\"O\",Ø:\"O\",Ǿ:\"O\",Ɔ:\"O\",Ɵ:\"O\",Ꝋ:\"O\",Ꝍ:\"O\",Œ:\"OE\",Ƣ:\"OI\",Ꝏ:\"OO\",Ȣ:\"OU\",\"Ⓟ\":\"P\",Ｐ:\"P\",Ṕ:\"P\",Ṗ:\"P\",Ƥ:\"P\",Ᵽ:\"P\",Ꝑ:\"P\",Ꝓ:\"P\",Ꝕ:\"P\",\"Ⓠ\":\"Q\",Ｑ:\"Q\",Ꝗ:\"Q\",Ꝙ:\"Q\",Ɋ:\"Q\",\"Ⓡ\":\"R\",Ｒ:\"R\",Ŕ:\"R\",Ṙ:\"R\",Ř:\"R\",Ȑ:\"R\",Ȓ:\"R\",Ṛ:\"R\",Ṝ:\"R\",Ŗ:\"R\",Ṟ:\"R\",Ɍ:\"R\",Ɽ:\"R\",Ꝛ:\"R\",Ꞧ:\"R\",Ꞃ:\"R\",\"Ⓢ\":\"S\",Ｓ:\"S\",ẞ:\"S\",Ś:\"S\",Ṥ:\"S\",Ŝ:\"S\",Ṡ:\"S\",Š:\"S\",Ṧ:\"S\",Ṣ:\"S\",Ṩ:\"S\",Ș:\"S\",Ş:\"S\",Ȿ:\"S\",Ꞩ:\"S\",Ꞅ:\"S\",\"Ⓣ\":\"T\",Ｔ:\"T\",Ṫ:\"T\",Ť:\"T\",Ṭ:\"T\",Ț:\"T\",Ţ:\"T\",Ṱ:\"T\",Ṯ:\"T\",Ŧ:\"T\",Ƭ:\"T\",Ʈ:\"T\",Ⱦ:\"T\",Ꞇ:\"T\",Ꜩ:\"TZ\",\"Ⓤ\":\"U\",Ｕ:\"U\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ũ:\"U\",Ṹ:\"U\",Ū:\"U\",Ṻ:\"U\",Ŭ:\"U\",Ü:\"U\",Ǜ:\"U\",Ǘ:\"U\",Ǖ:\"U\",Ǚ:\"U\",Ủ:\"U\",Ů:\"U\",Ű:\"U\",Ǔ:\"U\",Ȕ:\"U\",Ȗ:\"U\",Ư:\"U\",Ừ:\"U\",Ứ:\"U\",Ữ:\"U\",Ử:\"U\",Ự:\"U\",Ụ:\"U\",Ṳ:\"U\",Ų:\"U\",Ṷ:\"U\",Ṵ:\"U\",Ʉ:\"U\",\"Ⓥ\":\"V\",Ｖ:\"V\",Ṽ:\"V\",Ṿ:\"V\",Ʋ:\"V\",Ꝟ:\"V\",Ʌ:\"V\",Ꝡ:\"VY\",\"Ⓦ\":\"W\",Ｗ:\"W\",Ẁ:\"W\",Ẃ:\"W\",Ŵ:\"W\",Ẇ:\"W\",Ẅ:\"W\",Ẉ:\"W\",Ⱳ:\"W\",\"Ⓧ\":\"X\",Ｘ:\"X\",Ẋ:\"X\",Ẍ:\"X\",\"Ⓨ\":\"Y\",Ｙ:\"Y\",Ỳ:\"Y\",Ý:\"Y\",Ŷ:\"Y\",Ỹ:\"Y\",Ȳ:\"Y\",Ẏ:\"Y\",Ÿ:\"Y\",Ỷ:\"Y\",Ỵ:\"Y\",Ƴ:\"Y\",Ɏ:\"Y\",Ỿ:\"Y\",\"Ⓩ\":\"Z\",Ｚ:\"Z\",Ź:\"Z\",Ẑ:\"Z\",Ż:\"Z\",Ž:\"Z\",Ẓ:\"Z\",Ẕ:\"Z\",Ƶ:\"Z\",Ȥ:\"Z\",Ɀ:\"Z\",Ⱬ:\"Z\",Ꝣ:\"Z\",\"ⓐ\":\"a\",ａ:\"a\",ẚ:\"a\",à:\"a\",á:\"a\",â:\"a\",ầ:\"a\",ấ:\"a\",ẫ:\"a\",ẩ:\"a\",ã:\"a\",ā:\"a\",ă:\"a\",ằ:\"a\",ắ:\"a\",ẵ:\"a\",ẳ:\"a\",ȧ:\"a\",ǡ:\"a\",ä:\"a\",ǟ:\"a\",ả:\"a\",å:\"a\",ǻ:\"a\",ǎ:\"a\",ȁ:\"a\",ȃ:\"a\",ạ:\"a\",ậ:\"a\",ặ:\"a\",ḁ:\"a\",ą:\"a\",ⱥ:\"a\",ɐ:\"a\",ꜳ:\"aa\",æ:\"ae\",ǽ:\"ae\",ǣ:\"ae\",ꜵ:\"ao\",ꜷ:\"au\",ꜹ:\"av\",ꜻ:\"av\",ꜽ:\"ay\",\"ⓑ\":\"b\",ｂ:\"b\",ḃ:\"b\",ḅ:\"b\",ḇ:\"b\",ƀ:\"b\",ƃ:\"b\",ɓ:\"b\",\"ⓒ\":\"c\",ｃ:\"c\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",ç:\"c\",ḉ:\"c\",ƈ:\"c\",ȼ:\"c\",ꜿ:\"c\",ↄ:\"c\",\"ⓓ\":\"d\",ｄ:\"d\",ḋ:\"d\",ď:\"d\",ḍ:\"d\",ḑ:\"d\",ḓ:\"d\",ḏ:\"d\",đ:\"d\",ƌ:\"d\",ɖ:\"d\",ɗ:\"d\",ꝺ:\"d\",ǳ:\"dz\",ǆ:\"dz\",\"ⓔ\":\"e\",ｅ:\"e\",è:\"e\",é:\"e\",ê:\"e\",ề:\"e\",ế:\"e\",ễ:\"e\",ể:\"e\",ẽ:\"e\",ē:\"e\",ḕ:\"e\",ḗ:\"e\",ĕ:\"e\",ė:\"e\",ë:\"e\",ẻ:\"e\",ě:\"e\",ȅ:\"e\",ȇ:\"e\",ẹ:\"e\",ệ:\"e\",ȩ:\"e\",ḝ:\"e\",ę:\"e\",ḙ:\"e\",ḛ:\"e\",ɇ:\"e\",ɛ:\"e\",ǝ:\"e\",\"ⓕ\":\"f\",ｆ:\"f\",ḟ:\"f\",ƒ:\"f\",ꝼ:\"f\",\"ⓖ\":\"g\",ｇ:\"g\",ǵ:\"g\",ĝ:\"g\",ḡ:\"g\",ğ:\"g\",ġ:\"g\",ǧ:\"g\",ģ:\"g\",ǥ:\"g\",ɠ:\"g\",ꞡ:\"g\",ᵹ:\"g\",ꝿ:\"g\",\"ⓗ\":\"h\",ｈ:\"h\",ĥ:\"h\",ḣ:\"h\",ḧ:\"h\",ȟ:\"h\",ḥ:\"h\",ḩ:\"h\",ḫ:\"h\",ẖ:\"h\",ħ:\"h\",ⱨ:\"h\",ⱶ:\"h\",ɥ:\"h\",ƕ:\"hv\",\"ⓘ\":\"i\",ｉ:\"i\",ì:\"i\",í:\"i\",î:\"i\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",ï:\"i\",ḯ:\"i\",ỉ:\"i\",ǐ:\"i\",ȉ:\"i\",ȋ:\"i\",ị:\"i\",į:\"i\",ḭ:\"i\",ɨ:\"i\",ı:\"i\",\"ⓙ\":\"j\",ｊ:\"j\",ĵ:\"j\",ǰ:\"j\",ɉ:\"j\",\"ⓚ\":\"k\",ｋ:\"k\",ḱ:\"k\",ǩ:\"k\",ḳ:\"k\",ķ:\"k\",ḵ:\"k\",ƙ:\"k\",ⱪ:\"k\",ꝁ:\"k\",ꝃ:\"k\",ꝅ:\"k\",ꞣ:\"k\",\"ⓛ\":\"l\",ｌ:\"l\",ŀ:\"l\",ĺ:\"l\",ľ:\"l\",ḷ:\"l\",ḹ:\"l\",ļ:\"l\",ḽ:\"l\",ḻ:\"l\",ſ:\"l\",ł:\"l\",ƚ:\"l\",ɫ:\"l\",ⱡ:\"l\",ꝉ:\"l\",ꞁ:\"l\",ꝇ:\"l\",ǉ:\"lj\",\"ⓜ\":\"m\",ｍ:\"m\",ḿ:\"m\",ṁ:\"m\",ṃ:\"m\",ɱ:\"m\",ɯ:\"m\",\"ⓝ\":\"n\",ｎ:\"n\",ǹ:\"n\",ń:\"n\",ñ:\"n\",ṅ:\"n\",ň:\"n\",ṇ:\"n\",ņ:\"n\",ṋ:\"n\",ṉ:\"n\",ƞ:\"n\",ɲ:\"n\",ŉ:\"n\",ꞑ:\"n\",ꞥ:\"n\",ǌ:\"nj\",\"ⓞ\":\"o\",ｏ:\"o\",ò:\"o\",ó:\"o\",ô:\"o\",ồ:\"o\",ố:\"o\",ỗ:\"o\",ổ:\"o\",õ:\"o\",ṍ:\"o\",ȭ:\"o\",ṏ:\"o\",ō:\"o\",ṑ:\"o\",ṓ:\"o\",ŏ:\"o\",ȯ:\"o\",ȱ:\"o\",ö:\"o\",ȫ:\"o\",ỏ:\"o\",ő:\"o\",ǒ:\"o\",ȍ:\"o\",ȏ:\"o\",ơ:\"o\",ờ:\"o\",ớ:\"o\",ỡ:\"o\",ở:\"o\",ợ:\"o\",ọ:\"o\",ộ:\"o\",ǫ:\"o\",ǭ:\"o\",ø:\"o\",ǿ:\"o\",ɔ:\"o\",ꝋ:\"o\",ꝍ:\"o\",ɵ:\"o\",œ:\"oe\",ƣ:\"oi\",ȣ:\"ou\",ꝏ:\"oo\",\"ⓟ\":\"p\",ｐ:\"p\",ṕ:\"p\",ṗ:\"p\",ƥ:\"p\",ᵽ:\"p\",ꝑ:\"p\",ꝓ:\"p\",ꝕ:\"p\",\"ⓠ\":\"q\",ｑ:\"q\",ɋ:\"q\",ꝗ:\"q\",ꝙ:\"q\",\"ⓡ\":\"r\",ｒ:\"r\",ŕ:\"r\",ṙ:\"r\",ř:\"r\",ȑ:\"r\",ȓ:\"r\",ṛ:\"r\",ṝ:\"r\",ŗ:\"r\",ṟ:\"r\",ɍ:\"r\",ɽ:\"r\",ꝛ:\"r\",ꞧ:\"r\",ꞃ:\"r\",\"ⓢ\":\"s\",ｓ:\"s\",ß:\"s\",ś:\"s\",ṥ:\"s\",ŝ:\"s\",ṡ:\"s\",š:\"s\",ṧ:\"s\",ṣ:\"s\",ṩ:\"s\",ș:\"s\",ş:\"s\",ȿ:\"s\",ꞩ:\"s\",ꞅ:\"s\",ẛ:\"s\",\"ⓣ\":\"t\",ｔ:\"t\",ṫ:\"t\",ẗ:\"t\",ť:\"t\",ṭ:\"t\",ț:\"t\",ţ:\"t\",ṱ:\"t\",ṯ:\"t\",ŧ:\"t\",ƭ:\"t\",ʈ:\"t\",ⱦ:\"t\",ꞇ:\"t\",ꜩ:\"tz\",\"ⓤ\":\"u\",ｕ:\"u\",ù:\"u\",ú:\"u\",û:\"u\",ũ:\"u\",ṹ:\"u\",ū:\"u\",ṻ:\"u\",ŭ:\"u\",ü:\"u\",ǜ:\"u\",ǘ:\"u\",ǖ:\"u\",ǚ:\"u\",ủ:\"u\",ů:\"u\",ű:\"u\",ǔ:\"u\",ȕ:\"u\",ȗ:\"u\",ư:\"u\",ừ:\"u\",ứ:\"u\",ữ:\"u\",ử:\"u\",ự:\"u\",ụ:\"u\",ṳ:\"u\",ų:\"u\",ṷ:\"u\",ṵ:\"u\",ʉ:\"u\",\"ⓥ\":\"v\",ｖ:\"v\",ṽ:\"v\",ṿ:\"v\",ʋ:\"v\",ꝟ:\"v\",ʌ:\"v\",ꝡ:\"vy\",\"ⓦ\":\"w\",ｗ:\"w\",ẁ:\"w\",ẃ:\"w\",ŵ:\"w\",ẇ:\"w\",ẅ:\"w\",ẘ:\"w\",ẉ:\"w\",ⱳ:\"w\",\"ⓧ\":\"x\",ｘ:\"x\",ẋ:\"x\",ẍ:\"x\",\"ⓨ\":\"y\",ｙ:\"y\",ỳ:\"y\",ý:\"y\",ŷ:\"y\",ỹ:\"y\",ȳ:\"y\",ẏ:\"y\",ÿ:\"y\",ỷ:\"y\",ẙ:\"y\",ỵ:\"y\",ƴ:\"y\",ɏ:\"y\",ỿ:\"y\",\"ⓩ\":\"z\",ｚ:\"z\",ź:\"z\",ẑ:\"z\",ż:\"z\",ž:\"z\",ẓ:\"z\",ẕ:\"z\",ƶ:\"z\",ȥ:\"z\",ɀ:\"z\",ⱬ:\"z\",ꝣ:\"z\",Ά:\"Α\",Έ:\"Ε\",Ή:\"Η\",Ί:\"Ι\",Ϊ:\"Ι\",Ό:\"Ο\",Ύ:\"Υ\",Ϋ:\"Υ\",Ώ:\"Ω\",ά:\"α\",έ:\"ε\",ή:\"η\",ί:\"ι\",ϊ:\"ι\",ΐ:\"ι\",ό:\"ο\",ύ:\"υ\",ϋ:\"υ\",ΰ:\"υ\",ώ:\"ω\",ς:\"σ\",\"’\":\"'\"}})),e.define(\"select2/data/base\",[\"../utils\"],(function(t){function e(t,n){e.__super__.constructor.call(this)}return t.Extend(e,t.Observable),e.prototype.current=function(t){throw new Error(\"The `current` method must be defined in child classes.\")},e.prototype.query=function(t,e){throw new Error(\"The `query` method must be defined in child classes.\")},e.prototype.bind=function(t,e){},e.prototype.destroy=function(){},e.prototype.generateResultId=function(e,n){var r=e.id+\"-result-\";return r+=t.generateChars(4),null!=n.id?r+=\"-\"+n.id.toString():r+=\"-\"+t.generateChars(4),r},e})),e.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],(function(t,e,n){function r(t,e){this.$element=t,this.options=e,r.__super__.constructor.call(this)}return e.Extend(r,t),r.prototype.current=function(t){var e=[],r=this;this.$element.find(\":selected\").each((function(){var t=n(this),i=r.item(t);e.push(i)})),t(e)},r.prototype.select=function(t){var e=this;if(t.selected=!0,n(t.element).is(\"option\"))return t.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");if(this.$element.prop(\"multiple\"))this.current((function(r){var i=[];(t=[t]).push.apply(t,r);for(var o=0;o<t.length;o++){var s=t[o].id;-1===n.inArray(s,i)&&i.push(s)}e.$element.val(i),e.$element.trigger(\"input\").trigger(\"change\")}));else{var r=t.id;this.$element.val(r),this.$element.trigger(\"input\").trigger(\"change\")}},r.prototype.unselect=function(t){var e=this;if(this.$element.prop(\"multiple\")){if(t.selected=!1,n(t.element).is(\"option\"))return t.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current((function(r){for(var i=[],o=0;o<r.length;o++){var s=r[o].id;s!==t.id&&-1===n.inArray(s,i)&&i.push(s)}e.$element.val(i),e.$element.trigger(\"input\").trigger(\"change\")}))}},r.prototype.bind=function(t,e){var n=this;this.container=t,t.on(\"select\",(function(t){n.select(t.data)})),t.on(\"unselect\",(function(t){n.unselect(t.data)}))},r.prototype.destroy=function(){this.$element.find(\"*\").each((function(){e.RemoveData(this)}))},r.prototype.query=function(t,e){var r=[],i=this;this.$element.children().each((function(){var e=n(this);if(e.is(\"option\")||e.is(\"optgroup\")){var o=i.item(e),s=i.matches(t,o);null!==s&&r.push(s)}})),e({results:r})},r.prototype.addOptions=function(t){e.appendMany(this.$element,t)},r.prototype.option=function(t){var r;t.children?(r=document.createElement(\"optgroup\")).label=t.text:void 0!==(r=document.createElement(\"option\")).textContent?r.textContent=t.text:r.innerText=t.text,void 0!==t.id&&(r.value=t.id),t.disabled&&(r.disabled=!0),t.selected&&(r.selected=!0),t.title&&(r.title=t.title);var i=n(r),o=this._normalizeItem(t);return o.element=r,e.StoreData(r,\"data\",o),i},r.prototype.item=function(t){var r={};if(null!=(r=e.GetData(t[0],\"data\")))return r;if(t.is(\"option\"))r={id:t.val(),text:t.text(),disabled:t.prop(\"disabled\"),selected:t.prop(\"selected\"),title:t.prop(\"title\")};else if(t.is(\"optgroup\")){r={text:t.prop(\"label\"),children:[],title:t.prop(\"title\")};for(var i=t.children(\"option\"),o=[],s=0;s<i.length;s++){var a=n(i[s]),u=this.item(a);o.push(u)}r.children=o}return(r=this._normalizeItem(r)).element=t[0],e.StoreData(t[0],\"data\",r),r},r.prototype._normalizeItem=function(t){t!==Object(t)&&(t={id:t,text:t});var e={selected:!1,disabled:!1};return null!=(t=n.extend({},{text:\"\"},t)).id&&(t.id=t.id.toString()),null!=t.text&&(t.text=t.text.toString()),null==t._resultId&&t.id&&null!=this.container&&(t._resultId=this.generateResultId(this.container,t)),n.extend({},e,t)},r.prototype.matches=function(t,e){return this.options.get(\"matcher\")(t,e)},r})),e.define(\"select2/data/array\",[\"./select\",\"../utils\",\"jquery\"],(function(t,e,n){function r(t,e){this._dataToConvert=e.get(\"data\")||[],r.__super__.constructor.call(this,t,e)}return e.Extend(r,t),r.prototype.bind=function(t,e){r.__super__.bind.call(this,t,e),this.addOptions(this.convertToOptions(this._dataToConvert))},r.prototype.select=function(t){var e=this.$element.find(\"option\").filter((function(e,n){return n.value==t.id.toString()}));0===e.length&&(e=this.option(t),this.addOptions(e)),r.__super__.select.call(this,t)},r.prototype.convertToOptions=function(t){var r=this,i=this.$element.find(\"option\"),o=i.map((function(){return r.item(n(this)).id})).get(),s=[];function a(t){return function(){return n(this).val()==t.id}}for(var u=0;u<t.length;u++){var l=this._normalizeItem(t[u]);if(n.inArray(l.id,o)>=0){var c=i.filter(a(l)),f=this.item(c),p=n.extend(!0,{},l,f),h=this.option(p);c.replaceWith(h)}else{var d=this.option(l);if(l.children){var g=this.convertToOptions(l.children);e.appendMany(d,g)}s.push(d)}}return s},r})),e.define(\"select2/data/ajax\",[\"./array\",\"../utils\",\"jquery\"],(function(t,e,n){function r(t,e){this.ajaxOptions=this._applyDefaults(e.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),r.__super__.constructor.call(this,t,e)}return e.Extend(r,t),r.prototype._applyDefaults=function(t){var e={data:function(t){return n.extend({},t,{q:t.term})},transport:function(t,e,r){var i=n.ajax(t);return i.then(e),i.fail(r),i}};return n.extend({},e,t,!0)},r.prototype.processResults=function(t){return t},r.prototype.query=function(t,e){var r=this;null!=this._request&&(n.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var i=n.extend({type:\"GET\"},this.ajaxOptions);function o(){var o=i.transport(i,(function(i){var o=r.processResults(i,t);r.options.get(\"debug\")&&window.console&&console.error&&(o&&o.results&&n.isArray(o.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),e(o)}),(function(){(!(\"status\"in o)||0!==o.status&&\"0\"!==o.status)&&r.trigger(\"results:message\",{message:\"errorLoading\"})}));r._request=o}\"function\"==typeof i.url&&(i.url=i.url.call(this.$element,t)),\"function\"==typeof i.data&&(i.data=i.data.call(this.$element,t)),this.ajaxOptions.delay&&null!=t.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(o,this.ajaxOptions.delay)):o()},r})),e.define(\"select2/data/tags\",[\"jquery\"],(function(t){function e(e,n,r){var i=r.get(\"tags\"),o=r.get(\"createTag\");void 0!==o&&(this.createTag=o);var s=r.get(\"insertTag\");if(void 0!==s&&(this.insertTag=s),e.call(this,n,r),t.isArray(i))for(var a=0;a<i.length;a++){var u=i[a],l=this._normalizeItem(u),c=this.option(l);this.$element.append(c)}}return e.prototype.query=function(t,e,n){var r=this;function i(t,o){for(var s=t.results,a=0;a<s.length;a++){var u=s[a],l=null!=u.children&&!i({results:u.children},!0);if((u.text||\"\").toUpperCase()===(e.term||\"\").toUpperCase()||l)return!o&&(t.data=s,void n(t))}if(o)return!0;var c=r.createTag(e);if(null!=c){var f=r.option(c);f.attr(\"data-select2-tag\",!0),r.addOptions([f]),r.insertTag(s,c)}t.results=s,n(t)}this._removeOldTags(),null!=e.term&&null==e.page?t.call(this,e,i):t.call(this,e,n)},e.prototype.createTag=function(e,n){var r=t.trim(n.term);return\"\"===r?null:{id:r,text:r}},e.prototype.insertTag=function(t,e,n){e.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find(\"option[data-select2-tag]\").each((function(){this.selected||t(this).remove()}))},e})),e.define(\"select2/data/tokenizer\",[\"jquery\"],(function(t){function e(t,e,n){var r=n.get(\"tokenizer\");void 0!==r&&(this.tokenizer=r),t.call(this,e,n)}return e.prototype.bind=function(t,e,n){t.call(this,e,n),this.$search=e.dropdown.$search||e.selection.$search||n.find(\".select2-search__field\")},e.prototype.query=function(e,n,r){var i=this;function o(e){var n=i._normalizeItem(e);if(!i.$element.find(\"option\").filter((function(){return t(this).val()===n.id})).length){var r=i.option(n);r.attr(\"data-select2-tag\",!0),i._removeOldTags(),i.addOptions([r])}s(n)}function s(t){i.trigger(\"select\",{data:t})}n.term=n.term||\"\";var a=this.tokenizer(n,this.options,o);a.term!==n.term&&(this.$search.length&&(this.$search.val(a.term),this.$search.trigger(\"focus\")),n.term=a.term),e.call(this,n,r)},e.prototype.tokenizer=function(e,n,r,i){for(var o=r.get(\"tokenSeparators\")||[],s=n.term,a=0,u=this.createTag||function(t){return{id:t.term,text:t.term}};a<s.length;){var l=s[a];if(-1!==t.inArray(l,o)){var c=s.substr(0,a),f=u(t.extend({},n,{term:c}));null!=f?(i(f),s=s.substr(a+1)||\"\",a=0):a++}else a++}return{term:s}},e})),e.define(\"select2/data/minimumInputLength\",[],(function(){function t(t,e,n){this.minimumInputLength=n.get(\"minimumInputLength\"),t.call(this,e,n)}return t.prototype.query=function(t,e,n){e.term=e.term||\"\",e.term.length<this.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:e.term,params:e}}):t.call(this,e,n)},t})),e.define(\"select2/data/maximumInputLength\",[],(function(){function t(t,e,n){this.maximumInputLength=n.get(\"maximumInputLength\"),t.call(this,e,n)}return t.prototype.query=function(t,e,n){e.term=e.term||\"\",this.maximumInputLength>0&&e.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:e.term,params:e}}):t.call(this,e,n)},t})),e.define(\"select2/data/maximumSelectionLength\",[],(function(){function t(t,e,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),t.call(this,e,n)}return t.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"select\",(function(){r._checkIfMaximumSelected()}))},t.prototype.query=function(t,e,n){var r=this;this._checkIfMaximumSelected((function(){t.call(r,e,n)}))},t.prototype._checkIfMaximumSelected=function(t,e){var n=this;this.current((function(t){var r=null!=t?t.length:0;n.maximumSelectionLength>0&&r>=n.maximumSelectionLength?n.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:n.maximumSelectionLength}}):e&&e()}))},t})),e.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],(function(t,e){function n(t,e){this.$element=t,this.options=e,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=e,e},n.prototype.bind=function(){},n.prototype.position=function(t,e){},n.prototype.destroy=function(){this.$dropdown.remove()},n})),e.define(\"select2/dropdown/search\",[\"jquery\",\"../utils\"],(function(t,e){function n(){}return n.prototype.render=function(e){var n=e.call(this),r=t('<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>');return this.$searchContainer=r,this.$search=r.find(\"input\"),n.prepend(r),n},n.prototype.bind=function(e,n,r){var i=this,o=n.id+\"-results\";e.call(this,n,r),this.$search.on(\"keydown\",(function(t){i.trigger(\"keypress\",t),i._keyUpPrevented=t.isDefaultPrevented()})),this.$search.on(\"input\",(function(e){t(this).off(\"keyup\")})),this.$search.on(\"keyup input\",(function(t){i.handleSearch(t)})),n.on(\"open\",(function(){i.$search.attr(\"tabindex\",0),i.$search.attr(\"aria-controls\",o),i.$search.trigger(\"focus\"),window.setTimeout((function(){i.$search.trigger(\"focus\")}),0)})),n.on(\"close\",(function(){i.$search.attr(\"tabindex\",-1),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.val(\"\"),i.$search.trigger(\"blur\")})),n.on(\"focus\",(function(){n.isOpen()||i.$search.trigger(\"focus\")})),n.on(\"results:all\",(function(t){null!=t.query.term&&\"\"!==t.query.term||(i.showSearch(t)?i.$searchContainer.removeClass(\"select2-search--hide\"):i.$searchContainer.addClass(\"select2-search--hide\"))})),n.on(\"results:focus\",(function(t){t.data._resultId?i.$search.attr(\"aria-activedescendant\",t.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")}))},n.prototype.handleSearch=function(t){if(!this._keyUpPrevented){var e=this.$search.val();this.trigger(\"query\",{term:e})}this._keyUpPrevented=!1},n.prototype.showSearch=function(t,e){return!0},n})),e.define(\"select2/dropdown/hidePlaceholder\",[],(function(){function t(t,e,n,r){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),t.call(this,e,n,r)}return t.prototype.append=function(t,e){e.results=this.removePlaceholder(e.results),t.call(this,e)},t.prototype.normalizePlaceholder=function(t,e){return\"string\"==typeof e&&(e={id:\"\",text:e}),e},t.prototype.removePlaceholder=function(t,e){for(var n=e.slice(0),r=e.length-1;r>=0;r--){var i=e[r];this.placeholder.id===i.id&&n.splice(r,1)}return n},t})),e.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],(function(t){function e(t,e,n,r){this.lastParams={},t.call(this,e,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(t,e){this.$loadingMore.remove(),this.loading=!1,t.call(this,e),this.showLoadingMore(e)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"query\",(function(t){r.lastParams=t,r.loading=!0})),e.on(\"query:append\",(function(t){r.lastParams=t,r.loading=!0})),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=t.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&e&&this.$results.offset().top+this.$results.outerHeight(!1)+50>=this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)&&this.loadMore()},e.prototype.loadMore=function(){this.loading=!0;var e=t.extend({},{page:1},this.lastParams);e.page++,this.trigger(\"query:append\",e)},e.prototype.showLoadingMore=function(t,e){return e.pagination&&e.pagination.more},e.prototype.createLoadingMore=function(){var e=t('<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'),n=this.options.get(\"translations\").get(\"loadingMore\");return e.html(n(this.lastParams)),e},e})),e.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],(function(t,e){function n(e,n,r){this.$dropdownParent=t(r.get(\"dropdownParent\")||document.body),e.call(this,n,r)}return n.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"open\",(function(){r._showDropdown(),r._attachPositioningHandler(e),r._bindContainerResultHandlers(e)})),e.on(\"close\",(function(){r._hideDropdown(),r._detachPositioningHandler(e)})),this.$dropdownContainer.on(\"mousedown\",(function(t){t.stopPropagation()}))},n.prototype.destroy=function(t){t.call(this),this.$dropdownContainer.remove()},n.prototype.position=function(t,e,n){e.attr(\"class\",n.attr(\"class\")),e.removeClass(\"select2\"),e.addClass(\"select2-container--open\"),e.css({position:\"absolute\",top:-999999}),this.$container=n},n.prototype.render=function(e){var n=t(\"<span></span>\"),r=e.call(this);return n.append(r),this.$dropdownContainer=n,n},n.prototype._hideDropdown=function(t){this.$dropdownContainer.detach()},n.prototype._bindContainerResultHandlers=function(t,e){if(!this._containerResultsHandlersBound){var n=this;e.on(\"results:all\",(function(){n._positionDropdown(),n._resizeDropdown()})),e.on(\"results:append\",(function(){n._positionDropdown(),n._resizeDropdown()})),e.on(\"results:message\",(function(){n._positionDropdown(),n._resizeDropdown()})),e.on(\"select\",(function(){n._positionDropdown(),n._resizeDropdown()})),e.on(\"unselect\",(function(){n._positionDropdown(),n._resizeDropdown()})),this._containerResultsHandlersBound=!0}},n.prototype._attachPositioningHandler=function(n,r){var i=this,o=\"scroll.select2.\"+r.id,s=\"resize.select2.\"+r.id,a=\"orientationchange.select2.\"+r.id,u=this.$container.parents().filter(e.hasScroll);u.each((function(){e.StoreData(this,\"select2-scroll-position\",{x:t(this).scrollLeft(),y:t(this).scrollTop()})})),u.on(o,(function(n){var r=e.GetData(this,\"select2-scroll-position\");t(this).scrollTop(r.y)})),t(window).on(o+\" \"+s+\" \"+a,(function(t){i._positionDropdown(),i._resizeDropdown()}))},n.prototype._detachPositioningHandler=function(n,r){var i=\"scroll.select2.\"+r.id,o=\"resize.select2.\"+r.id,s=\"orientationchange.select2.\"+r.id;this.$container.parents().filter(e.hasScroll).off(i),t(window).off(i+\" \"+o+\" \"+s)},n.prototype._positionDropdown=function(){var e=t(window),n=this.$dropdown.hasClass(\"select2-dropdown--above\"),r=this.$dropdown.hasClass(\"select2-dropdown--below\"),i=null,o=this.$container.offset();o.bottom=o.top+this.$container.outerHeight(!1);var s={height:this.$container.outerHeight(!1)};s.top=o.top,s.bottom=o.top+s.height;var a={height:this.$dropdown.outerHeight(!1)},u={top:e.scrollTop(),bottom:e.scrollTop()+e.height()},l=u.top<o.top-a.height,c=u.bottom>o.bottom+a.height,f={left:o.left,top:s.bottom},p=this.$dropdownParent;\"static\"===p.css(\"position\")&&(p=p.offsetParent());var h={top:0,left:0};(t.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),f.top-=h.top,f.left-=h.left,n||r||(i=\"below\"),c||!l||n?!l&&c&&n&&(i=\"below\"):i=\"above\",(\"above\"==i||n&&\"below\"!==i)&&(f.top=s.top-h.top-a.height),null!=i&&(this.$dropdown.removeClass(\"select2-dropdown--below select2-dropdown--above\").addClass(\"select2-dropdown--\"+i),this.$container.removeClass(\"select2-container--below select2-container--above\").addClass(\"select2-container--\"+i)),this.$dropdownContainer.css(f)},n.prototype._resizeDropdown=function(){var t={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(t.minWidth=t.width,t.position=\"relative\",t.width=\"auto\"),this.$dropdown.css(t)},n.prototype._showDropdown=function(t){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},n})),e.define(\"select2/dropdown/minimumResultsForSearch\",[],(function(){function t(e){for(var n=0,r=0;r<e.length;r++){var i=e[r];i.children?n+=t(i.children):n++}return n}function e(t,e,n,r){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),t.call(this,e,n,r)}return e.prototype.showSearch=function(e,n){return!(t(n.data.results)<this.minimumResultsForSearch)&&e.call(this,n)},e})),e.define(\"select2/dropdown/selectOnClose\",[\"../utils\"],(function(t){function e(){}return e.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"close\",(function(t){r._handleSelectOnClose(t)}))},e.prototype._handleSelectOnClose=function(e,n){if(n&&null!=n.originalSelect2Event){var r=n.originalSelect2Event;if(\"select\"===r._type||\"unselect\"===r._type)return}var i=this.getHighlightedResults();if(!(i.length<1)){var o=t.GetData(i[0],\"data\");null!=o.element&&o.element.selected||null==o.element&&o.selected||this.trigger(\"select\",{data:o})}},e})),e.define(\"select2/dropdown/closeOnSelect\",[],(function(){function t(){}return t.prototype.bind=function(t,e,n){var r=this;t.call(this,e,n),e.on(\"select\",(function(t){r._selectTriggered(t)})),e.on(\"unselect\",(function(t){r._selectTriggered(t)}))},t.prototype._selectTriggered=function(t,e){var n=e.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger(\"close\",{originalEvent:n,originalSelect2Event:e})},t})),e.define(\"select2/i18n/en\",[],(function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(t){var e=t.input.length-t.maximum,n=\"Please delete \"+e+\" character\";return 1!=e&&(n+=\"s\"),n},inputTooShort:function(t){return\"Please enter \"+(t.minimum-t.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(t){var e=\"You can only select \"+t.maximum+\" item\";return 1!=t.maximum&&(e+=\"s\"),e},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"}}})),e.define(\"select2/defaults\",[\"jquery\",\"require\",\"./results\",\"./selection/single\",\"./selection/multiple\",\"./selection/placeholder\",\"./selection/allowClear\",\"./selection/search\",\"./selection/eventRelay\",\"./utils\",\"./translation\",\"./diacritics\",\"./data/select\",\"./data/array\",\"./data/ajax\",\"./data/tags\",\"./data/tokenizer\",\"./data/minimumInputLength\",\"./data/maximumInputLength\",\"./data/maximumSelectionLength\",\"./dropdown\",\"./dropdown/search\",\"./dropdown/hidePlaceholder\",\"./dropdown/infiniteScroll\",\"./dropdown/attachBody\",\"./dropdown/minimumResultsForSearch\",\"./dropdown/selectOnClose\",\"./dropdown/closeOnSelect\",\"./i18n/en\"],(function(t,e,n,r,i,o,s,a,u,l,c,f,p,h,d,g,v,m,y,b,w,_,x,T,C,A,S,$,E){function k(){this.reset()}return k.prototype.apply=function(c){if(null==(c=t.extend(!0,{},this.defaults,c)).dataAdapter){if(null!=c.ajax?c.dataAdapter=d:null!=c.data?c.dataAdapter=h:c.dataAdapter=p,c.minimumInputLength>0&&(c.dataAdapter=l.Decorate(c.dataAdapter,m)),c.maximumInputLength>0&&(c.dataAdapter=l.Decorate(c.dataAdapter,y)),c.maximumSelectionLength>0&&(c.dataAdapter=l.Decorate(c.dataAdapter,b)),c.tags&&(c.dataAdapter=l.Decorate(c.dataAdapter,g)),null==c.tokenSeparators&&null==c.tokenizer||(c.dataAdapter=l.Decorate(c.dataAdapter,v)),null!=c.query){var f=e(c.amdBase+\"compat/query\");c.dataAdapter=l.Decorate(c.dataAdapter,f)}if(null!=c.initSelection){var E=e(c.amdBase+\"compat/initSelection\");c.dataAdapter=l.Decorate(c.dataAdapter,E)}}if(null==c.resultsAdapter&&(c.resultsAdapter=n,null!=c.ajax&&(c.resultsAdapter=l.Decorate(c.resultsAdapter,T)),null!=c.placeholder&&(c.resultsAdapter=l.Decorate(c.resultsAdapter,x)),c.selectOnClose&&(c.resultsAdapter=l.Decorate(c.resultsAdapter,S))),null==c.dropdownAdapter){if(c.multiple)c.dropdownAdapter=w;else{var k=l.Decorate(w,_);c.dropdownAdapter=k}if(0!==c.minimumResultsForSearch&&(c.dropdownAdapter=l.Decorate(c.dropdownAdapter,A)),c.closeOnSelect&&(c.dropdownAdapter=l.Decorate(c.dropdownAdapter,$)),null!=c.dropdownCssClass||null!=c.dropdownCss||null!=c.adaptDropdownCssClass){var D=e(c.amdBase+\"compat/dropdownCss\");c.dropdownAdapter=l.Decorate(c.dropdownAdapter,D)}c.dropdownAdapter=l.Decorate(c.dropdownAdapter,C)}if(null==c.selectionAdapter){if(c.multiple?c.selectionAdapter=i:c.selectionAdapter=r,null!=c.placeholder&&(c.selectionAdapter=l.Decorate(c.selectionAdapter,o)),c.allowClear&&(c.selectionAdapter=l.Decorate(c.selectionAdapter,s)),c.multiple&&(c.selectionAdapter=l.Decorate(c.selectionAdapter,a)),null!=c.containerCssClass||null!=c.containerCss||null!=c.adaptContainerCssClass){var j=e(c.amdBase+\"compat/containerCss\");c.selectionAdapter=l.Decorate(c.selectionAdapter,j)}c.selectionAdapter=l.Decorate(c.selectionAdapter,u)}c.language=this._resolveLanguage(c.language),c.language.push(\"en\");for(var O=[],N=0;N<c.language.length;N++){var R=c.language[N];-1===O.indexOf(R)&&O.push(R)}return c.language=O,c.translations=this._processTranslations(c.language,c.debug),c},k.prototype.reset=function(){function e(t){function e(t){return f[t]||t}return t.replace(/[^\\u0000-\\u007E]/g,e)}function n(r,i){if(\"\"===t.trim(r.term))return i;if(i.children&&i.children.length>0){for(var o=t.extend(!0,{},i),s=i.children.length-1;s>=0;s--)null==n(r,i.children[s])&&o.children.splice(s,1);return o.children.length>0?o:n(r,o)}var a=e(i.text).toUpperCase(),u=e(r.term).toUpperCase();return a.indexOf(u)>-1?i:null}this.defaults={amdBase:\"./\",amdLanguageBase:\"./i18n/\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:l.escapeMarkup,language:{},matcher:n,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(t){return t},templateResult:function(t){return t.text},templateSelection:function(t){return t.text},theme:\"default\",width:\"resolve\"}},k.prototype.applyFromElement=function(t,e){var n=t.language,r=this.defaults.language,i=e.prop(\"lang\"),o=e.closest(\"[lang]\").prop(\"lang\"),s=Array.prototype.concat.call(this._resolveLanguage(i),this._resolveLanguage(n),this._resolveLanguage(r),this._resolveLanguage(o));return t.language=s,t},k.prototype._resolveLanguage=function(e){if(!e)return[];if(t.isEmptyObject(e))return[];if(t.isPlainObject(e))return[e];var n;n=t.isArray(e)?e:[e];for(var r=[],i=0;i<n.length;i++)if(r.push(n[i]),\"string\"==typeof n[i]&&n[i].indexOf(\"-\")>0){var o=n[i].split(\"-\")[0];r.push(o)}return r},k.prototype._processTranslations=function(e,n){for(var r=new c,i=0;i<e.length;i++){var o=new c,s=e[i];if(\"string\"==typeof s)try{o=c.loadPath(s)}catch(t){try{s=this.defaults.amdLanguageBase+s,o=c.loadPath(s)}catch(t){n&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+s+'\" could not be automatically loaded. A fallback will be used instead.')}}else o=t.isPlainObject(s)?new c(s):s;r.extend(o)}return r},k.prototype.set=function(e,n){var r={};r[t.camelCase(e)]=n;var i=l._convertData(r);t.extend(!0,this.defaults,i)},new k})),e.define(\"select2/options\",[\"require\",\"jquery\",\"./defaults\",\"./utils\"],(function(t,e,n,r){function i(e,i){if(this.options=e,null!=i&&this.fromElement(i),null!=i&&(this.options=n.applyFromElement(this.options,i)),this.options=n.apply(this.options),i&&i.is(\"input\")){var o=t(this.get(\"amdBase\")+\"compat/inputData\");this.options.dataAdapter=r.Decorate(this.options.dataAdapter,o)}}return i.prototype.fromElement=function(t){var n=[\"select2\"];null==this.options.multiple&&(this.options.multiple=t.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=t.prop(\"disabled\")),null==this.options.dir&&(t.prop(\"dir\")?this.options.dir=t.prop(\"dir\"):t.closest(\"[dir]\").prop(\"dir\")?this.options.dir=t.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),t.prop(\"disabled\",this.options.disabled),t.prop(\"multiple\",this.options.multiple),r.GetData(t[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),r.StoreData(t[0],\"data\",r.GetData(t[0],\"select2Tags\")),r.StoreData(t[0],\"tags\",!0)),r.GetData(t[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),t.attr(\"ajax--url\",r.GetData(t[0],\"ajaxUrl\")),r.StoreData(t[0],\"ajax-Url\",r.GetData(t[0],\"ajaxUrl\")));var i={};function o(t,e){return e.toUpperCase()}for(var s=0;s<t[0].attributes.length;s++){var a=t[0].attributes[s].name,u=\"data-\";if(a.substr(0,u.length)==u){var l=a.substring(u.length),c=r.GetData(t[0],l);i[l.replace(/-([a-z])/g,o)]=c}}e.fn.jquery&&\"1.\"==e.fn.jquery.substr(0,2)&&t[0].dataset&&(i=e.extend(!0,{},t[0].dataset,i));var f=e.extend(!0,{},r.GetData(t[0]),i);for(var p in f=r._convertData(f))e.inArray(p,n)>-1||(e.isPlainObject(this.options[p])?e.extend(this.options[p],f[p]):this.options[p]=f[p]);return this},i.prototype.get=function(t){return this.options[t]},i.prototype.set=function(t,e){this.options[t]=e},i})),e.define(\"select2/core\",[\"jquery\",\"./options\",\"./utils\",\"./keys\"],(function(t,e,n,r){var i=function(t,r){null!=n.GetData(t[0],\"select2\")&&n.GetData(t[0],\"select2\").destroy(),this.$element=t,this.id=this._generateId(t),r=r||{},this.options=new e(r,t),i.__super__.constructor.call(this);var o=t.attr(\"tabindex\")||0;n.StoreData(t[0],\"old-tabindex\",o),t.attr(\"tabindex\",\"-1\");var s=this.options.get(\"dataAdapter\");this.dataAdapter=new s(t,this.options);var a=this.render();this._placeContainer(a);var u=this.options.get(\"selectionAdapter\");this.selection=new u(t,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,a);var l=this.options.get(\"dropdownAdapter\");this.dropdown=new l(t,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,a);var c=this.options.get(\"resultsAdapter\");this.results=new c(t,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var f=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current((function(t){f.trigger(\"selection:update\",{data:t})})),t.addClass(\"select2-hidden-accessible\"),t.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),n.StoreData(t[0],\"select2\",this),t.data(\"select2\",this)};return n.Extend(i,n.Observable),i.prototype._generateId=function(t){return\"select2-\"+(null!=t.attr(\"id\")?t.attr(\"id\"):null!=t.attr(\"name\")?t.attr(\"name\")+\"-\"+n.generateChars(2):n.generateChars(4)).replace(/(:|\\.|\\[|\\]|,)/g,\"\")},i.prototype._placeContainer=function(t){t.insertAfter(this.$element);var e=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=e&&t.css(\"width\",e)},i.prototype._resolveWidth=function(t,e){var n=/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(\"resolve\"==e){var r=this._resolveWidth(t,\"style\");return null!=r?r:this._resolveWidth(t,\"element\")}if(\"element\"==e){var i=t.outerWidth(!1);return i<=0?\"auto\":i+\"px\"}if(\"style\"==e){var o=t.attr(\"style\");if(\"string\"!=typeof o)return null;for(var s=o.split(\";\"),a=0,u=s.length;a<u;a+=1){var l=s[a].replace(/\\s/g,\"\").match(n);if(null!==l&&l.length>=1)return l[1]}return null}return\"computedstyle\"==e?window.getComputedStyle(t[0]).width:e},i.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},i.prototype._registerDomEvents=function(){var t=this;this.$element.on(\"change.select2\",(function(){t.dataAdapter.current((function(e){t.trigger(\"selection:update\",{data:e})}))})),this.$element.on(\"focus.select2\",(function(e){t.trigger(\"focus\",e)})),this._syncA=n.bind(this._syncAttributes,this),this._syncS=n.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent(\"onpropertychange\",this._syncA);var e=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=e?(this._observer=new e((function(e){t._syncA(),t._syncS(null,e)})),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener(\"DOMAttrModified\",t._syncA,!1),this.$element[0].addEventListener(\"DOMNodeInserted\",t._syncS,!1),this.$element[0].addEventListener(\"DOMNodeRemoved\",t._syncS,!1))},i.prototype._registerDataEvents=function(){var t=this;this.dataAdapter.on(\"*\",(function(e,n){t.trigger(e,n)}))},i.prototype._registerSelectionEvents=function(){var e=this,n=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",(function(){e.toggleDropdown()})),this.selection.on(\"focus\",(function(t){e.focus(t)})),this.selection.on(\"*\",(function(r,i){-1===t.inArray(r,n)&&e.trigger(r,i)}))},i.prototype._registerDropdownEvents=function(){var t=this;this.dropdown.on(\"*\",(function(e,n){t.trigger(e,n)}))},i.prototype._registerResultsEvents=function(){var t=this;this.results.on(\"*\",(function(e,n){t.trigger(e,n)}))},i.prototype._registerEvents=function(){var t=this;this.on(\"open\",(function(){t.$container.addClass(\"select2-container--open\")})),this.on(\"close\",(function(){t.$container.removeClass(\"select2-container--open\")})),this.on(\"enable\",(function(){t.$container.removeClass(\"select2-container--disabled\")})),this.on(\"disable\",(function(){t.$container.addClass(\"select2-container--disabled\")})),this.on(\"blur\",(function(){t.$container.removeClass(\"select2-container--focus\")})),this.on(\"query\",(function(e){t.isOpen()||t.trigger(\"open\",{}),this.dataAdapter.query(e,(function(n){t.trigger(\"results:all\",{data:n,query:e})}))})),this.on(\"query:append\",(function(e){this.dataAdapter.query(e,(function(n){t.trigger(\"results:append\",{data:n,query:e})}))})),this.on(\"keypress\",(function(e){var n=e.which;t.isOpen()?n===r.ESC||n===r.TAB||n===r.UP&&e.altKey?(t.close(e),e.preventDefault()):n===r.ENTER?(t.trigger(\"results:select\",{}),e.preventDefault()):n===r.SPACE&&e.ctrlKey?(t.trigger(\"results:toggle\",{}),e.preventDefault()):n===r.UP?(t.trigger(\"results:previous\",{}),e.preventDefault()):n===r.DOWN&&(t.trigger(\"results:next\",{}),e.preventDefault()):(n===r.ENTER||n===r.SPACE||n===r.DOWN&&e.altKey)&&(t.open(),e.preventDefault())}))},i.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},i.prototype._isChangeMutation=function(e,n){var r=!1,i=this;if(!e||!e.target||\"OPTION\"===e.target.nodeName||\"OPTGROUP\"===e.target.nodeName){if(n)if(n.addedNodes&&n.addedNodes.length>0)for(var o=0;o<n.addedNodes.length;o++)n.addedNodes[o].selected&&(r=!0);else n.removedNodes&&n.removedNodes.length>0?r=!0:t.isArray(n)&&t.each(n,(function(t,e){if(i._isChangeMutation(t,e))return r=!0,!1}));else r=!0;return r}},i.prototype._syncSubtree=function(t,e){var n=this._isChangeMutation(t,e),r=this;n&&this.dataAdapter.current((function(t){r.trigger(\"selection:update\",{data:t})}))},i.prototype.trigger=function(t,e){var n=i.__super__.trigger,r={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===e&&(e={}),t in r){var o=r[t],s={prevented:!1,name:t,args:e};if(n.call(this,o,s),s.prevented)return void(e.prevented=!0)}n.call(this,t,e)},i.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},i.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},i.prototype.close=function(t){this.isOpen()&&this.trigger(\"close\",{originalEvent:t})},i.prototype.isEnabled=function(){return!this.isDisabled()},i.prototype.isDisabled=function(){return this.options.get(\"disabled\")},i.prototype.isOpen=function(){return this.$container.hasClass(\"select2-container--open\")},i.prototype.hasFocus=function(){return this.$container.hasClass(\"select2-container--focus\")},i.prototype.focus=function(t){this.hasFocus()||(this.$container.addClass(\"select2-container--focus\"),this.trigger(\"focus\",{}))},i.prototype.enable=function(t){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'),null!=t&&0!==t.length||(t=[!0]);var e=!t[0];this.$element.prop(\"disabled\",e)},i.prototype.data=function(){this.options.get(\"debug\")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current((function(e){t=e})),t},i.prototype.val=function(e){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var n=e[0];t.isArray(n)&&(n=t.map(n,(function(t){return t.toString()}))),this.$element.val(n).trigger(\"input\").trigger(\"change\")},i.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent(\"onpropertychange\",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener(\"DOMAttrModified\",this._syncA,!1),this.$element[0].removeEventListener(\"DOMNodeInserted\",this._syncS,!1),this.$element[0].removeEventListener(\"DOMNodeRemoved\",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",n.GetData(this.$element[0],\"old-tabindex\")),this.$element.removeClass(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),n.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},i.prototype.render=function(){var e=t('<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$container=e,this.$container.addClass(\"select2-container--\"+this.options.get(\"theme\")),n.StoreData(e[0],\"element\",this.$element),e},i})),e.define(\"jquery-mousewheel\",[\"jquery\"],(function(t){return t})),e.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],(function(t,e,n,r,i){if(null==t.fn.select2){var o=[\"open\",\"close\",\"destroy\"];t.fn.select2=function(e){if(\"object\"==typeof(e=e||{}))return this.each((function(){var r=t.extend(!0,{},e);new n(t(this),r)})),this;if(\"string\"==typeof e){var r,s=Array.prototype.slice.call(arguments,1);return this.each((function(){var t=i.GetData(this,\"select2\");null==t&&window.console&&console.error&&console.error(\"The select2('\"+e+\"') method was called on an element that is not using Select2.\"),r=t[e].apply(t,s)})),t.inArray(e,o)>-1?this:r}throw new Error(\"Invalid arguments for Select2: \"+e)}}return null==t.fn.select2.defaults&&(t.fn.select2.defaults=r),n})),{define:e.define,require:e.require}}(),n=e.require(\"jquery.select2\");return t.fn.select2.amd=e,n})?r.apply(e,i):r)||(t.exports=o)},911:(t,e,n)=>{var r,i,o;!function(s){\"use strict\";i=[n(755)],r=function(t,e){var n={beforeShow:h,move:h,change:h,show:h,hide:h,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:\"body\",maxSelectionSize:7,cancelText:\"cancel\",chooseText:\"choose\",togglePaletteMoreText:\"more\",togglePaletteLessText:\"less\",clearText:\"Clear Color Selection\",noColorSelectedText:\"No Color Selected\",preferredFormat:!1,className:\"\",containerClassName:\"\",replacerClassName:\"\",showAlpha:!1,theme:\"sp-light\",palette:[[\"#ffffff\",\"#000000\",\"#ff0000\",\"#ff8000\",\"#ffff00\",\"#008000\",\"#0000ff\",\"#4b0082\",\"#9400d3\"]],selectionPalette:[],disabled:!1,offset:null},r=[],i=!!/msie/i.exec(window.navigator.userAgent),o=function(){function t(t,e){return!!~(\"\"+t).indexOf(e)}var e=document.createElement(\"div\").style;return e.cssText=\"background-color:rgba(0,0,0,.5)\",t(e.backgroundColor,\"rgba\")||t(e.backgroundColor,\"hsla\")}(),s=[\"<div class='sp-replacer'>\",\"<div class='sp-preview'><div class='sp-preview-inner'></div></div>\",\"<div class='sp-dd'>&#9660;</div>\",\"</div>\"].join(\"\"),a=function(){var t=\"\";if(i)for(var e=1;e<=6;e++)t+=\"<div class='sp-\"+e+\"'></div>\";return[\"<div class='sp-container sp-hidden'>\",\"<div class='sp-palette-container'>\",\"<div class='sp-palette sp-thumb sp-cf'></div>\",\"<div class='sp-palette-button-container sp-cf'>\",\"<button type='button' class='sp-palette-toggle'></button>\",\"</div>\",\"</div>\",\"<div class='sp-picker-container'>\",\"<div class='sp-top sp-cf'>\",\"<div class='sp-fill'></div>\",\"<div class='sp-top-inner'>\",\"<div class='sp-color'>\",\"<div class='sp-sat'>\",\"<div class='sp-val'>\",\"<div class='sp-dragger'></div>\",\"</div>\",\"</div>\",\"</div>\",\"<div class='sp-clear sp-clear-display'>\",\"</div>\",\"<div class='sp-hue'>\",\"<div class='sp-slider'></div>\",t,\"</div>\",\"</div>\",\"<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>\",\"</div>\",\"<div class='sp-input-container sp-cf'>\",\"<input class='sp-input' type='text' spellcheck='false'  />\",\"</div>\",\"<div class='sp-initial sp-thumb sp-cf'></div>\",\"<div class='sp-button-container sp-cf'>\",\"<a class='sp-cancel' href='#'></a>\",\"<button type='button' class='sp-choose'></button>\",\"</div>\",\"</div>\",\"</div>\"].join(\"\")}();function u(e,n,r,i){for(var s=[],a=0;a<e.length;a++){var u=e[a];if(u){var l=tinycolor(u),c=l.toHsl().l<.5?\"sp-thumb-el sp-thumb-dark\":\"sp-thumb-el sp-thumb-light\";c+=tinycolor.equals(n,u)?\" sp-thumb-active\":\"\";var f=l.toString(i.preferredFormat||\"rgb\"),p=o?\"background-color:\"+l.toRgbString():\"filter:\"+l.toFilter();s.push('<span title=\"'+f+'\" data-color=\"'+l.toRgbString()+'\" class=\"'+c+'\"><span class=\"sp-thumb-inner\" style=\"'+p+';\"></span></span>')}else{var h=\"sp-clear-display\";s.push(t(\"<div />\").append(t('<span data-color=\"\" style=\"background-color:transparent;\" class=\"'+h+'\"></span>').attr(\"title\",i.noColorSelectedText)).html())}}return\"<div class='sp-cf \"+r+\"'>\"+s.join(\"\")+\"</div>\"}function l(){for(var t=0;t<r.length;t++)r[t]&&r[t].hide()}function c(e,r){var i=t.extend({},n,e);return i.callbacks={move:g(i.move,r),change:g(i.change,r),show:g(i.show,r),hide:g(i.hide,r),beforeShow:g(i.beforeShow,r)},i}function f(n,f){var h=c(f,n),g=h.flat,b=h.showSelectionPalette,w=h.localStorageKey,_=h.theme,x=h.callbacks,T=m(Bt,10),C=!1,A=!1,S=0,$=0,E=0,k=0,D=0,j=0,O=0,N=0,R=0,I=0,L=1,P=[],q=[],H={},M=h.selectionPalette.slice(0),U=h.maxSelectionSize,F=\"sp-dragging\",z=null,B=n.ownerDocument,W=(B.body,t(n)),G=!1,V=t(a,B).addClass(_),K=V.find(\".sp-picker-container\"),X=V.find(\".sp-color\"),Y=V.find(\".sp-dragger\"),Q=V.find(\".sp-hue\"),J=V.find(\".sp-slider\"),Z=V.find(\".sp-alpha-inner\"),tt=V.find(\".sp-alpha\"),et=V.find(\".sp-alpha-handle\"),nt=V.find(\".sp-input\"),rt=V.find(\".sp-palette\"),it=V.find(\".sp-initial\"),ot=V.find(\".sp-cancel\"),st=V.find(\".sp-clear\"),at=V.find(\".sp-choose\"),ut=V.find(\".sp-palette-toggle\"),lt=W.is(\"input\"),ct=lt&&\"color\"===W.attr(\"type\")&&y(),ft=lt&&!g,pt=ft?t(s).addClass(_).addClass(h.className).addClass(h.replacerClassName):t([]),ht=ft?pt:W,dt=pt.find(\".sp-preview-inner\"),gt=h.color||lt&&W.val(),vt=!1,mt=h.preferredFormat,yt=!h.showButtons||h.clickoutFiresChange,bt=!gt,wt=h.allowEmpty&&!ct;function _t(){if(h.showPaletteOnly&&(h.showPalette=!0),ut.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),h.palette){P=h.palette.slice(0),q=t.isArray(P[0])?P:[P],H={};for(var e=0;e<q.length;e++)for(var n=0;n<q[e].length;n++){var r=tinycolor(q[e][n]).toRgbString();H[r]=!0}}V.toggleClass(\"sp-flat\",g),V.toggleClass(\"sp-input-disabled\",!h.showInput),V.toggleClass(\"sp-alpha-enabled\",h.showAlpha),V.toggleClass(\"sp-clear-enabled\",wt),V.toggleClass(\"sp-buttons-disabled\",!h.showButtons),V.toggleClass(\"sp-palette-buttons-disabled\",!h.togglePaletteOnly),V.toggleClass(\"sp-palette-disabled\",!h.showPalette),V.toggleClass(\"sp-palette-only\",h.showPaletteOnly),V.toggleClass(\"sp-initial-disabled\",!h.showInitial),V.addClass(h.className).addClass(h.containerClassName),Bt()}function xt(){if(i&&V.find(\"*:not(input)\").attr(\"unselectable\",\"on\"),_t(),ft&&W.after(pt).hide(),wt||st.hide(),g)W.after(V).hide();else{var e=\"parent\"===h.appendTo?W.parent():t(h.appendTo);1!==e.length&&(e=t(\"body\")),e.append(V)}function n(e){return e.data&&e.data.ignore?(Pt(t(e.target).closest(\".sp-thumb-el\").data(\"color\")),Mt()):(Pt(t(e.target).closest(\".sp-thumb-el\").data(\"color\")),Mt(),h.hideAfterPaletteSelect?(zt(!0),It()):zt()),!1}Tt(),ht.on(\"click.spectrum touchstart.spectrum\",(function(e){G||jt(),e.stopPropagation(),t(e.target).is(\"input\")||e.preventDefault()})),(W.is(\":disabled\")||!0===h.disabled)&&Kt(),V.click(d),nt.change(Dt),nt.on(\"paste\",(function(){setTimeout(Dt,1)})),nt.keydown((function(t){13==t.keyCode&&Dt()})),ot.text(h.cancelText),ot.on(\"click.spectrum\",(function(t){t.stopPropagation(),t.preventDefault(),Lt(),It()})),st.attr(\"title\",h.clearText),st.on(\"click.spectrum\",(function(t){t.stopPropagation(),t.preventDefault(),bt=!0,Mt(),g&&zt(!0)})),at.text(h.chooseText),at.on(\"click.spectrum\",(function(t){t.stopPropagation(),t.preventDefault(),i&&nt.is(\":focus\")&&nt.trigger(\"change\"),Ht()&&(zt(!0),It())})),ut.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),ut.on(\"click.spectrum\",(function(t){t.stopPropagation(),t.preventDefault(),h.showPaletteOnly=!h.showPaletteOnly,h.showPaletteOnly||g||V.css(\"left\",\"-=\"+(K.outerWidth(!0)+5)),_t()})),v(tt,(function(t,e,n){L=t/D,bt=!1,n.shiftKey&&(L=Math.round(10*L)/10),Mt()}),Et,kt),v(Q,(function(t,e){N=parseFloat(e/k),bt=!1,h.showAlpha||(L=1),Mt()}),Et,kt),v(X,(function(t,e,n){if(n.shiftKey){if(!z){var r=R*S,i=$-I*$,o=Math.abs(t-r)>Math.abs(e-i);z=o?\"x\":\"y\"}}else z=null;var s=!z||\"y\"===z;(!z||\"x\"===z)&&(R=parseFloat(t/S)),s&&(I=parseFloat(($-e)/$)),bt=!1,h.showAlpha||(L=1),Mt()}),Et,kt),gt?(Pt(gt),Ut(),mt=h.preferredFormat||tinycolor(gt).format,Ct(gt)):Ut(),g&&Ot();var r=i?\"mousedown.spectrum\":\"click.spectrum touchstart.spectrum\";rt.on(r,\".sp-thumb-el\",n),it.on(r,\".sp-thumb-el:nth-child(1)\",{ignore:!0},n)}function Tt(){if(w&&window.localStorage){try{var e=window.localStorage[w].split(\",#\");e.length>1&&(delete window.localStorage[w],t.each(e,(function(t,e){Ct(e)})))}catch(t){}try{M=window.localStorage[w].split(\";\")}catch(t){}}}function Ct(e){if(b){var n=tinycolor(e).toRgbString();if(!H[n]&&-1===t.inArray(n,M))for(M.push(n);M.length>U;)M.shift();if(w&&window.localStorage)try{window.localStorage[w]=M.join(\";\")}catch(t){}}}function At(){var t=[];if(h.showPalette)for(var e=0;e<M.length;e++){var n=tinycolor(M[e]).toRgbString();H[n]||t.push(M[e])}return t.reverse().slice(0,h.maxSelectionSize)}function St(){var e=qt(),n=t.map(q,(function(t,n){return u(t,e,\"sp-palette-row sp-palette-row-\"+n,h)}));Tt(),M&&n.push(u(At(),e,\"sp-palette-row sp-palette-row-selection\",h)),rt.html(n.join(\"\"))}function $t(){if(h.showInitial){var t=vt,e=qt();it.html(u([t,e],e,\"sp-palette-row-initial\",h))}}function Et(){($<=0||S<=0||k<=0)&&Bt(),A=!0,V.addClass(F),z=null,W.trigger(\"dragstart.spectrum\",[qt()])}function kt(){A=!1,V.removeClass(F),W.trigger(\"dragstop.spectrum\",[qt()])}function Dt(){var t=nt.val();if(null!==t&&\"\"!==t||!wt){var e=tinycolor(t);e.isValid()?(Pt(e),Mt(),zt()):nt.addClass(\"sp-validation-error\")}else Pt(null),Mt(),zt()}function jt(){C?It():Ot()}function Ot(){var e=t.Event(\"beforeShow.spectrum\");C?Bt():(W.trigger(e,[qt()]),!1===x.beforeShow(qt())||e.isDefaultPrevented()||(l(),C=!0,t(B).on(\"keydown.spectrum\",Nt),t(B).on(\"click.spectrum\",Rt),t(window).on(\"resize.spectrum\",T),pt.addClass(\"sp-active\"),V.removeClass(\"sp-hidden\"),Bt(),Ut(),vt=qt(),$t(),x.show(vt),W.trigger(\"show.spectrum\",[vt])))}function Nt(t){27===t.keyCode&&It()}function Rt(t){2!=t.button&&(A||(yt?zt(!0):Lt(),It()))}function It(){C&&!g&&(C=!1,t(B).off(\"keydown.spectrum\",Nt),t(B).off(\"click.spectrum\",Rt),t(window).off(\"resize.spectrum\",T),pt.removeClass(\"sp-active\"),V.addClass(\"sp-hidden\"),x.hide(qt()),W.trigger(\"hide.spectrum\",[qt()]))}function Lt(){Pt(vt,!0),zt(!0)}function Pt(t,e){var n,r;tinycolor.equals(t,qt())?Ut():(!t&&wt?bt=!0:(bt=!1,r=(n=tinycolor(t)).toHsv(),N=r.h%360/360,R=r.s,I=r.v,L=r.a),Ut(),n&&n.isValid()&&!e&&(mt=h.preferredFormat||n.getFormat()))}function qt(t){return t=t||{},wt&&bt?null:tinycolor.fromRatio({h:N,s:R,v:I,a:Math.round(1e3*L)/1e3},{format:t.format||mt})}function Ht(){return!nt.hasClass(\"sp-validation-error\")}function Mt(){Ut(),x.move(qt()),W.trigger(\"move.spectrum\",[qt()])}function Ut(){nt.removeClass(\"sp-validation-error\"),Ft();var t=tinycolor.fromRatio({h:N,s:1,v:1});X.css(\"background-color\",t.toHexString());var e=mt;L<1&&(0!==L||\"name\"!==e)&&(\"hex\"!==e&&\"hex3\"!==e&&\"hex6\"!==e&&\"name\"!==e||(e=\"rgb\"));var n=qt({format:e}),r=\"\";if(dt.removeClass(\"sp-clear-display\"),dt.css(\"background-color\",\"transparent\"),!n&&wt)dt.addClass(\"sp-clear-display\");else{var s=n.toHexString(),a=n.toRgbString();if(o||1===n.alpha?dt.css(\"background-color\",a):(dt.css(\"background-color\",\"transparent\"),dt.css(\"filter\",n.toFilter())),h.showAlpha){var u=n.toRgb();u.a=0;var l=tinycolor(u).toRgbString(),c=\"linear-gradient(left, \"+l+\", \"+s+\")\";i?Z.css(\"filter\",tinycolor(l).toFilter({gradientType:1},s)):(Z.css(\"background\",\"-webkit-\"+c),Z.css(\"background\",\"-moz-\"+c),Z.css(\"background\",\"-ms-\"+c),Z.css(\"background\",\"linear-gradient(to right, \"+l+\", \"+s+\")\"))}r=n.toString(e)}h.showInput&&nt.val(r),h.showPalette&&St(),$t()}function Ft(){var t=R,e=I;if(wt&&bt)et.hide(),J.hide(),Y.hide();else{et.show(),J.show(),Y.show();var n=t*S,r=$-e*$;n=Math.max(-E,Math.min(S-E,n-E)),r=Math.max(-E,Math.min($-E,r-E)),Y.css({top:r+\"px\",left:n+\"px\"});var i=L*D;et.css({left:i-j/2+\"px\"});var o=N*k;J.css({top:o-O+\"px\"})}}function zt(t){var e=qt(),n=\"\",r=!tinycolor.equals(e,vt);e&&(n=e.toString(mt),Ct(e)),lt&&W.val(n),t&&r&&(x.change(e),W.trigger(\"change\",[e]))}function Bt(){C&&(S=X.width(),$=X.height(),E=Y.height(),Q.width(),k=Q.height(),O=J.height(),D=tt.width(),j=et.width(),g||(V.css(\"position\",\"absolute\"),h.offset?V.offset(h.offset):V.offset(p(V,ht))),Ft(),h.showPalette&&St(),W.trigger(\"reflow.spectrum\"))}function Wt(){W.show(),ht.off(\"click.spectrum touchstart.spectrum\"),V.remove(),pt.remove(),r[Yt.id]=null}function Gt(n,r){return n===e?t.extend({},h):r===e?h[n]:(h[n]=r,\"preferredFormat\"===n&&(mt=h.preferredFormat),void _t())}function Vt(){G=!1,W.attr(\"disabled\",!1),ht.removeClass(\"sp-disabled\")}function Kt(){It(),G=!0,W.attr(\"disabled\",!0),ht.addClass(\"sp-disabled\")}function Xt(t){h.offset=t,Bt()}xt();var Yt={show:Ot,hide:It,toggle:jt,reflow:Bt,option:Gt,enable:Vt,disable:Kt,offset:Xt,set:function(t){Pt(t),zt()},get:qt,destroy:Wt,container:V};return Yt.id=r.push(Yt)-1,Yt}function p(e,n){var r=0,i=e.outerWidth(),o=e.outerHeight(),s=n.outerHeight(),a=e[0].ownerDocument,u=a.documentElement,l=u.clientWidth+t(a).scrollLeft(),c=u.clientHeight+t(a).scrollTop(),f=n.offset(),p=f.left,h=f.top;return h+=s,p-=Math.min(p,p+i>l&&l>i?Math.abs(p+i-l):0),{top:h-=Math.min(h,h+o>c&&c>o?Math.abs(o+s-r):r),bottom:f.bottom,left:p,right:f.right,width:f.width,height:f.height}}function h(){}function d(t){t.stopPropagation()}function g(t,e){var n=Array.prototype.slice,r=n.call(arguments,2);return function(){return t.apply(e,r.concat(n.call(arguments)))}}function v(e,n,r,o){n=n||function(){},r=r||function(){},o=o||function(){};var s=document,a=!1,u={},l=0,c=0,f=\"ontouchstart\"in window,p={};function h(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function d(t){if(a){if(i&&s.documentMode<9&&!t.button)return v();var r=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],o=r&&r.pageX||t.pageX,p=r&&r.pageY||t.pageY,d=Math.max(0,Math.min(o-u.left,c)),g=Math.max(0,Math.min(p-u.top,l));f&&h(t),n.apply(e,[d,g,t])}}function g(n){(n.which?3==n.which:2==n.button)||a||!1!==r.apply(e,arguments)&&(a=!0,l=t(e).height(),c=t(e).width(),u=t(e).offset(),t(s).on(p),t(s.body).addClass(\"sp-dragging\"),d(n),h(n))}function v(){a&&(t(s).off(p),t(s.body).removeClass(\"sp-dragging\"),setTimeout((function(){o.apply(e,arguments)}),0)),a=!1}p.selectstart=h,p.dragstart=h,p[\"touchmove mousemove\"]=d,p[\"touchend mouseup\"]=v,t(e).on(\"touchstart mousedown\",g)}function m(t,e,n){var r;return function(){var i=this,o=arguments,s=function(){r=null,t.apply(i,o)};n&&clearTimeout(r),!n&&r||(r=setTimeout(s,e))}}function y(){return t.fn.spectrum.inputTypeColorSupport()}var b=\"spectrum.id\";t.fn.spectrum=function(e,n){if(\"string\"==typeof e){var i=this,o=Array.prototype.slice.call(arguments,1);return this.each((function(){var n=r[t(this).data(b)];if(n){var s=n[e];if(!s)throw new Error(\"Spectrum: no such method: '\"+e+\"'\");\"get\"==e?i=n.get():\"container\"==e?i=n.container:\"option\"==e?i=n.option.apply(n,o):\"destroy\"==e?(n.destroy(),t(this).removeData(b)):s.apply(n,o)}})),i}return this.spectrum(\"destroy\").each((function(){var n=f(this,t.extend({},t(this).data(),e));t(this).data(b,n.id)}))},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=v,t.fn.spectrum.defaults=n,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var n=t(\"<input type='color'/>\")[0];e._cachedResult=\"color\"===n.type&&\"\"!==n.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t(\"input[type=color]\");e.length&&!y()&&e.spectrum({preferredFormat:\"hex6\"})},function(){var t=/^[\\s,#]+/,e=/\\s+$/,n=0,r=Math,i=r.round,o=r.min,s=r.max,a=r.random,u=function(t,e){if(e=e||{},(t=t||\"\")instanceof u)return t;if(!(this instanceof u))return new u(t,e);var r=l(t);this._originalInput=t,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=i(1e3*this._a)/1e3,this._format=e.format||r.format,this._gradientType=e.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=r.ok,this._tc_id=n++};function l(t){var e={r:0,g:0,b:0},n=1,r=!1,i=!1;return\"string\"==typeof t&&(t=V(t)),\"object\"==typeof t&&(t.hasOwnProperty(\"r\")&&t.hasOwnProperty(\"g\")&&t.hasOwnProperty(\"b\")?(e=c(t.r,t.g,t.b),r=!0,i=\"%\"===String(t.r).substr(-1)?\"prgb\":\"rgb\"):t.hasOwnProperty(\"h\")&&t.hasOwnProperty(\"s\")&&t.hasOwnProperty(\"v\")?(t.s=M(t.s),t.v=M(t.v),e=d(t.h,t.s,t.v),r=!0,i=\"hsv\"):t.hasOwnProperty(\"h\")&&t.hasOwnProperty(\"s\")&&t.hasOwnProperty(\"l\")&&(t.s=M(t.s),t.l=M(t.l),e=p(t.h,t.s,t.l),r=!0,i=\"hsl\"),t.hasOwnProperty(\"a\")&&(n=t.a)),n=N(n),{ok:r,format:t.format||i,r:o(255,s(e.r,0)),g:o(255,s(e.g,0)),b:o(255,s(e.b,0)),a:n}}function c(t,e,n){return{r:255*R(t,255),g:255*R(e,255),b:255*R(n,255)}}function f(t,e,n){t=R(t,255),e=R(e,255),n=R(n,255);var r,i,a=s(t,e,n),u=o(t,e,n),l=(a+u)/2;if(a==u)r=i=0;else{var c=a-u;switch(i=l>.5?c/(2-a-u):c/(a+u),a){case t:r=(e-n)/c+(e<n?6:0);break;case e:r=(n-t)/c+2;break;case n:r=(t-e)/c+4}r/=6}return{h:r,s:i,l}}function p(t,e,n){var r,i,o;function s(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}if(t=R(t,360),e=R(e,100),n=R(n,100),0===e)r=i=o=n;else{var a=n<.5?n*(1+e):n+e-n*e,u=2*n-a;r=s(u,a,t+1/3),i=s(u,a,t),o=s(u,a,t-1/3)}return{r:255*r,g:255*i,b:255*o}}function h(t,e,n){t=R(t,255),e=R(e,255),n=R(n,255);var r,i,a=s(t,e,n),u=o(t,e,n),l=a,c=a-u;if(i=0===a?0:c/a,a==u)r=0;else{switch(a){case t:r=(e-n)/c+(e<n?6:0);break;case e:r=(n-t)/c+2;break;case n:r=(t-e)/c+4}r/=6}return{h:r,s:i,v:l}}function d(t,e,n){t=6*R(t,360),e=R(e,100),n=R(n,100);var i=r.floor(t),o=t-i,s=n*(1-e),a=n*(1-o*e),u=n*(1-(1-o)*e),l=i%6;return{r:255*[n,a,s,s,u,n][l],g:255*[u,n,n,a,s,s][l],b:255*[s,s,u,n,n,a][l]}}function g(t,e,n,r){var o=[H(i(t).toString(16)),H(i(e).toString(16)),H(i(n).toString(16))];return r&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0):o.join(\"\")}function v(t,e,n,r){return[H(U(r)),H(i(t).toString(16)),H(i(e).toString(16)),H(i(n).toString(16))].join(\"\")}function m(t,e){e=0===e?0:e||10;var n=u(t).toHsl();return n.s-=e/100,n.s=I(n.s),u(n)}function y(t,e){e=0===e?0:e||10;var n=u(t).toHsl();return n.s+=e/100,n.s=I(n.s),u(n)}function b(t){return u(t).desaturate(100)}function w(t,e){e=0===e?0:e||10;var n=u(t).toHsl();return n.l+=e/100,n.l=I(n.l),u(n)}function _(t,e){e=0===e?0:e||10;var n=u(t).toRgb();return n.r=s(0,o(255,n.r-i(-e/100*255))),n.g=s(0,o(255,n.g-i(-e/100*255))),n.b=s(0,o(255,n.b-i(-e/100*255))),u(n)}function x(t,e){e=0===e?0:e||10;var n=u(t).toHsl();return n.l-=e/100,n.l=I(n.l),u(n)}function T(t,e){var n=u(t).toHsl(),r=(i(n.h)+e)%360;return n.h=r<0?360+r:r,u(n)}function C(t){var e=u(t).toHsl();return e.h=(e.h+180)%360,u(e)}function A(t){var e=u(t).toHsl(),n=e.h;return[u(t),u({h:(n+120)%360,s:e.s,l:e.l}),u({h:(n+240)%360,s:e.s,l:e.l})]}function S(t){var e=u(t).toHsl(),n=e.h;return[u(t),u({h:(n+90)%360,s:e.s,l:e.l}),u({h:(n+180)%360,s:e.s,l:e.l}),u({h:(n+270)%360,s:e.s,l:e.l})]}function $(t){var e=u(t).toHsl(),n=e.h;return[u(t),u({h:(n+72)%360,s:e.s,l:e.l}),u({h:(n+216)%360,s:e.s,l:e.l})]}function E(t,e,n){e=e||6,n=n||30;var r=u(t).toHsl(),i=360/n,o=[u(t)];for(r.h=(r.h-(i*e>>1)+720)%360;--e;)r.h=(r.h+i)%360,o.push(u(r));return o}function k(t,e){e=e||6;for(var n=u(t).toHsv(),r=n.h,i=n.s,o=n.v,s=[],a=1/e;e--;)s.push(u({h:r,s:i,v:o})),o=(o+a)%1;return s}u.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=N(t),this._roundA=i(1e3*this._a)/1e3,this},toHsv:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=h(this._r,this._g,this._b),e=i(360*t.h),n=i(100*t.s),r=i(100*t.v);return 1==this._a?\"hsv(\"+e+\", \"+n+\"%, \"+r+\"%)\":\"hsva(\"+e+\", \"+n+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHsl:function(){var t=f(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=f(this._r,this._g,this._b),e=i(360*t.h),n=i(100*t.s),r=i(100*t.l);return 1==this._a?\"hsl(\"+e+\", \"+n+\"%, \"+r+\"%)\":\"hsla(\"+e+\", \"+n+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHex:function(t){return g(this._r,this._g,this._b,t)},toHexString:function(t){return\"#\"+this.toHex(t)},toHex8:function(){return v(this._r,this._g,this._b,this._a)},toHex8String:function(){return\"#\"+this.toHex8()},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\"rgb(\"+i(this._r)+\", \"+i(this._g)+\", \"+i(this._b)+\")\":\"rgba(\"+i(this._r)+\", \"+i(this._g)+\", \"+i(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:i(100*R(this._r,255))+\"%\",g:i(100*R(this._g,255))+\"%\",b:i(100*R(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\"rgb(\"+i(100*R(this._r,255))+\"%, \"+i(100*R(this._g,255))+\"%, \"+i(100*R(this._b,255))+\"%)\":\"rgba(\"+i(100*R(this._r,255))+\"%, \"+i(100*R(this._g,255))+\"%, \"+i(100*R(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return 0===this._a?\"transparent\":!(this._a<1)&&(j[g(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e=\"#\"+v(this._r,this._g,this._b,this._a),n=e,r=this._gradientType?\"GradientType = 1, \":\"\";t&&(n=u(t).toHex8String());return\"progid:DXImageTransform.Microsoft.gradient(\"+r+\"startColorstr=\"+e+\",endColorstr=\"+n+\")\"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,r=this._a<1&&this._a>=0;return e||!r||\"hex\"!==t&&\"hex6\"!==t&&\"hex3\"!==t&&\"name\"!==t?(\"rgb\"===t&&(n=this.toRgbString()),\"prgb\"===t&&(n=this.toPercentageRgbString()),\"hex\"!==t&&\"hex6\"!==t||(n=this.toHexString()),\"hex3\"===t&&(n=this.toHexString(!0)),\"hex8\"===t&&(n=this.toHex8String()),\"name\"===t&&(n=this.toName()),\"hsl\"===t&&(n=this.toHslString()),\"hsv\"===t&&(n=this.toHsvString()),n||this.toHexString()):\"name\"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(w,arguments)},brighten:function(){return this._applyModification(_,arguments)},darken:function(){return this._applyModification(x,arguments)},desaturate:function(){return this._applyModification(m,arguments)},saturate:function(){return this._applyModification(y,arguments)},greyscale:function(){return this._applyModification(b,arguments)},spin:function(){return this._applyModification(T,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(C,arguments)},monochromatic:function(){return this._applyCombination(k,arguments)},splitcomplement:function(){return this._applyCombination($,arguments)},triad:function(){return this._applyCombination(A,arguments)},tetrad:function(){return this._applyCombination(S,arguments)}},u.fromRatio=function(t,e){if(\"object\"==typeof t){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]=\"a\"===r?t[r]:M(t[r]));t=n}return u(t,e)},u.equals=function(t,e){return!(!t||!e)&&u(t).toRgbString()==u(e).toRgbString()},u.random=function(){return u.fromRatio({r:a(),g:a(),b:a()})},u.mix=function(t,e,n){n=0===n?0:n||50;var r,i=u(t).toRgb(),o=u(e).toRgb(),s=n/100,a=2*s-1,l=o.a-i.a,c=1-(r=((r=a*l==-1?a:(a+l)/(1+a*l))+1)/2),f={r:o.r*r+i.r*c,g:o.g*r+i.g*c,b:o.b*r+i.b*c,a:o.a*s+i.a*(1-s)};return u(f)},u.readability=function(t,e){var n=u(t),r=u(e),i=n.toRgb(),o=r.toRgb(),s=n.getBrightness(),a=r.getBrightness(),l=Math.max(i.r,o.r)-Math.min(i.r,o.r)+Math.max(i.g,o.g)-Math.min(i.g,o.g)+Math.max(i.b,o.b)-Math.min(i.b,o.b);return{brightness:Math.abs(s-a),color:l}},u.isReadable=function(t,e){var n=u.readability(t,e);return n.brightness>125&&n.color>500},u.mostReadable=function(t,e){for(var n=null,r=0,i=!1,o=0;o<e.length;o++){var s=u.readability(t,e[o]),a=s.brightness>125&&s.color>500,l=s.brightness/125*3+s.color/500;(a&&!i||a&&i&&l>r||!a&&!i&&l>r)&&(i=a,r=l,n=u(e[o]))}return n};var D=u.names={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},j=u.hexNames=O(D);function O(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}function N(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function R(t,e){P(t)&&(t=\"100%\");var n=q(t);return t=o(e,s(0,parseFloat(t))),n&&(t=parseInt(t*e,10)/100),r.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function I(t){return o(1,s(0,t))}function L(t){return parseInt(t,16)}function P(t){return\"string\"==typeof t&&-1!=t.indexOf(\".\")&&1===parseFloat(t)}function q(t){return\"string\"==typeof t&&-1!=t.indexOf(\"%\")}function H(t){return 1==t.length?\"0\"+t:\"\"+t}function M(t){return t<=1&&(t=100*t+\"%\"),t}function U(t){return Math.round(255*parseFloat(t)).toString(16)}function F(t){return L(t)/255}var z,B,W,G=(B=\"[\\\\s|\\\\(]+(\"+(z=\"(?:[-\\\\+]?\\\\d*\\\\.\\\\d+%?)|(?:[-\\\\+]?\\\\d+%?)\")+\")[,|\\\\s]+(\"+z+\")[,|\\\\s]+(\"+z+\")\\\\s*\\\\)?\",W=\"[\\\\s|\\\\(]+(\"+z+\")[,|\\\\s]+(\"+z+\")[,|\\\\s]+(\"+z+\")[,|\\\\s]+(\"+z+\")\\\\s*\\\\)?\",{rgb:new RegExp(\"rgb\"+B),rgba:new RegExp(\"rgba\"+W),hsl:new RegExp(\"hsl\"+B),hsla:new RegExp(\"hsla\"+W),hsv:new RegExp(\"hsv\"+B),hsva:new RegExp(\"hsva\"+W),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function V(n){n=n.replace(t,\"\").replace(e,\"\").toLowerCase();var r,i=!1;if(D[n])n=D[n],i=!0;else if(\"transparent\"==n)return{r:0,g:0,b:0,a:0,format:\"name\"};return(r=G.rgb.exec(n))?{r:r[1],g:r[2],b:r[3]}:(r=G.rgba.exec(n))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=G.hsl.exec(n))?{h:r[1],s:r[2],l:r[3]}:(r=G.hsla.exec(n))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=G.hsv.exec(n))?{h:r[1],s:r[2],v:r[3]}:(r=G.hsva.exec(n))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=G.hex8.exec(n))?{a:F(r[1]),r:L(r[2]),g:L(r[3]),b:L(r[4]),format:i?\"name\":\"hex8\"}:(r=G.hex6.exec(n))?{r:L(r[1]),g:L(r[2]),b:L(r[3]),format:i?\"name\":\"hex\"}:!!(r=G.hex3.exec(n))&&{r:L(r[1]+\"\"+r[1]),g:L(r[2]+\"\"+r[2]),b:L(r[3]+\"\"+r[3]),format:i?\"name\":\"hex\"}}window.tinycolor=u}(),t((function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()}))},void 0===(o=\"function\"==typeof r?r.apply(e,i):r)||(t.exports=o)}()},593:t=>{\"use strict\";t.exports=JSON.parse('{\"name\":\"axios\",\"version\":\"0.21.4\",\"description\":\"Promise based HTTP client for the browser and node.js\",\"main\":\"index.js\",\"scripts\":{\"test\":\"grunt test\",\"start\":\"node ./sandbox/server.js\",\"build\":\"NODE_ENV=production grunt build\",\"preversion\":\"npm test\",\"version\":\"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\",\"postversion\":\"git push && git push --tags\",\"examples\":\"node ./examples/server.js\",\"coveralls\":\"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\"fix\":\"eslint --fix lib/**/*.js\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/axios/axios.git\"},\"keywords\":[\"xhr\",\"http\",\"ajax\",\"promise\",\"node\"],\"author\":\"Matt Zabriskie\",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/axios/axios/issues\"},\"homepage\":\"https://axios-http.com\",\"devDependencies\":{\"coveralls\":\"^3.0.0\",\"es6-promise\":\"^4.2.4\",\"grunt\":\"^1.3.0\",\"grunt-banner\":\"^0.6.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-clean\":\"^1.1.0\",\"grunt-contrib-watch\":\"^1.0.0\",\"grunt-eslint\":\"^23.0.0\",\"grunt-karma\":\"^4.0.0\",\"grunt-mocha-test\":\"^0.13.3\",\"grunt-ts\":\"^6.0.0-beta.19\",\"grunt-webpack\":\"^4.0.2\",\"istanbul-instrumenter-loader\":\"^1.0.0\",\"jasmine-core\":\"^2.4.1\",\"karma\":\"^6.3.2\",\"karma-chrome-launcher\":\"^3.1.0\",\"karma-firefox-launcher\":\"^2.1.0\",\"karma-jasmine\":\"^1.1.1\",\"karma-jasmine-ajax\":\"^0.1.13\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-sauce-launcher\":\"^4.3.6\",\"karma-sinon\":\"^1.0.5\",\"karma-sourcemap-loader\":\"^0.3.8\",\"karma-webpack\":\"^4.0.2\",\"load-grunt-tasks\":\"^3.5.2\",\"minimist\":\"^1.2.0\",\"mocha\":\"^8.2.1\",\"sinon\":\"^4.5.0\",\"terser-webpack-plugin\":\"^4.2.3\",\"typescript\":\"^4.0.5\",\"url-search-params\":\"^0.10.0\",\"webpack\":\"^4.44.2\",\"webpack-dev-server\":\"^3.11.0\"},\"browser\":{\"./lib/adapters/http.js\":\"./lib/adapters/xhr.js\"},\"jsdelivr\":\"dist/axios.min.js\",\"unpkg\":\"dist/axios.min.js\",\"typings\":\"./index.d.ts\",\"dependencies\":{\"follow-redirects\":\"^1.14.0\"},\"bundlesize\":[{\"path\":\"./dist/axios.min.js\",\"threshold\":\"5kB\"}]}')}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),(()=>{\"use strict\";var t=n(486),e=n.n(t),r=(n(686),n(911),n(669)),i=n.n(r);window._=e();try{window.$=window.jQuery=n(755),n(2)}catch(t){}window.axios=i(),window.axios.defaults.headers.common[\"X-Requested-With\"]=\"XMLHttpRequest\";var o=document.head.querySelector('meta[name=\"csrf-token\"]');o?(window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"]=o.content,$.ajaxSetup({headers:{\"X-CSRF-TOKEN\":o.content}})):null,$(document).ready((function(){$(document).on(\"focus\",\".select2.select2-container\",(function(t){t.originalEvent&&$(this).find(\".select2-selection--single\").length>0&&$(this).siblings(\"select\").select2(\"open\")}))})),$(document).on(\"select2:open\",(function(){var t=document.querySelectorAll(\".select2-container--open .select2-search__field\");t[t.length-1].focus()}))})()})();\n"
  },
  {
    "path": "resources/js/vendor.js",
    "content": "/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\nimport axios from 'axios';\nwindow.axios = axios;\n\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Next we will register the CSRF Token as a common header with Axios so that\n * all outgoing HTTP requests automatically have it attached. This is just\n * a simple convenience so we don't have to attach every token manually.\n */\n\nlet token = document.head.querySelector('meta[name=\"csrf-token\"]');\nif (token) {\n    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;\n}\n"
  },
  {
    "path": "resources/js/visibility-picker.js",
    "content": "import tippy from 'tippy.js';\n\nconst initVisibilityPickers = () => {\n    document.querySelectorAll('.visibility-picker').forEach((picker) => {\n        const trigger = picker.querySelector('.visibility-picker-trigger');\n        const dropdown = picker.querySelector('.visibility-picker-dropdown');\n\n        if (!trigger || !dropdown || trigger._vPickerInit) {\n            return;\n        }\n        trigger._vPickerInit = true;\n\n        const instance = tippy(trigger, {\n            content: dropdown,\n            theme: 'kanka-dropdown',\n            placement: 'bottom',\n            allowHTML: true,\n            interactive: true,\n            trigger: 'click',\n            zIndex: 890,\n            appendTo: picker,\n            onShow: () => dropdown.classList.remove('hidden'),\n            onHide: () => dropdown.classList.add('hidden'),\n        });\n\n        dropdown.querySelectorAll('.visibility-picker-option').forEach((option) => {\n            option.addEventListener('click', () => {\n                const visibilityId = parseInt(option.dataset.value);\n                const currentSelected = parseInt(picker.dataset.selected);\n                const url = picker.dataset.url;\n\n                if (visibilityId === currentSelected || option.dataset.loading === '1') {\n                    return;\n                }\n\n                // Show spinner on clicked option\n                option.dataset.loading = '1';\n                const statusEl = option.querySelector('.visibility-picker-status');\n                statusEl.innerHTML = '<i class=\"fa-solid fa-spinner fa-spin text-primary\" aria-hidden=\"true\"></i>';\n\n                // Remove check from previous selection\n                const prevOption = dropdown.querySelector('.visibility-picker-option[aria-checked=\"true\"]');\n                if (prevOption && prevOption !== option) {\n                    prevOption.querySelector('.visibility-picker-status').innerHTML = '';\n                }\n\n                axios.post(url, { visibility_id: visibilityId })\n                    .then((res) => {\n                        // Update state\n                        picker.dataset.selected = visibilityId;\n\n                        // Update trigger icon\n                        const triggerIcon = trigger.querySelector('i');\n                        triggerIcon.className = option.dataset.icon;\n\n                        // Update aria + styling on all options\n                        dropdown.querySelectorAll('.visibility-picker-option').forEach((opt) => {\n                            const isSelected = parseInt(opt.dataset.value) === visibilityId;\n                            opt.setAttribute('aria-checked', isSelected ? 'true' : 'false');\n                            opt.classList.toggle('bg-primary/5', isSelected);\n                            opt.classList.toggle('ring-1', isSelected);\n                            opt.classList.toggle('ring-primary/30', isSelected);\n\n                            const status = opt.querySelector('.visibility-picker-status');\n                            status.innerHTML = isSelected\n                                ? '<i class=\"fa-regular fa-check text-primary\" aria-hidden=\"true\"></i>'\n                                : '';\n                        });\n\n                        option.dataset.loading = '0';\n                    })\n                    .catch(() => {\n                        // Revert: restore check on previous selection\n                        option.dataset.loading = '0';\n                        statusEl.innerHTML = '';\n\n                        if (prevOption) {\n                            prevOption.querySelector('.visibility-picker-status').innerHTML =\n                                '<i class=\"fa-regular fa-check text-primary\" aria-hidden=\"true\"></i>';\n                        }\n\n                        window.showToast('Failed to update visibility.', 'error');\n                    });\n            });\n        });\n    });\n};\n\nconst initVisibilityPickerFields = () => {\n    document.querySelectorAll('.visibility-picker-field').forEach((picker) => {\n        const trigger = picker.querySelector('.visibility-picker-field-trigger');\n        const dropdown = picker.querySelector('.visibility-picker-field-dropdown');\n        const hiddenInput = picker.querySelector('input[name=\"visibility_id\"]');\n\n        if (!trigger || !dropdown || !hiddenInput || trigger._vPickerFieldInit) {\n            return;\n        }\n        trigger._vPickerFieldInit = true;\n\n        const instance = tippy(trigger, {\n            content: dropdown,\n            theme: 'kanka-dropdown',\n            placement: 'bottom',\n            allowHTML: true,\n            interactive: true,\n            trigger: 'click',\n            zIndex: 890,\n            appendTo: picker,\n            onShow: () => dropdown.classList.remove('hidden'),\n            onHide: () => dropdown.classList.add('hidden'),\n        });\n\n        dropdown.querySelectorAll('.visibility-picker-field-option').forEach((option) => {\n            option.addEventListener('click', () => {\n                const visibilityId = parseInt(option.dataset.value);\n                const currentSelected = parseInt(picker.dataset.selected);\n\n                if (visibilityId === currentSelected) {\n                    instance.hide();\n                    return;\n                }\n\n                // Update hidden input and state\n                hiddenInput.value = visibilityId;\n                picker.dataset.selected = visibilityId;\n\n                // Update trigger icon\n                const triggerIcon = trigger.querySelector('i');\n                triggerIcon.className = option.dataset.icon;\n\n                // Update aria + styling on all options\n                dropdown.querySelectorAll('.visibility-picker-field-option').forEach((opt) => {\n                    const isSelected = parseInt(opt.dataset.value) === visibilityId;\n                    opt.setAttribute('aria-checked', isSelected ? 'true' : 'false');\n                    opt.classList.toggle('bg-primary/5', isSelected);\n                    opt.classList.toggle('ring-1', isSelected);\n                    opt.classList.toggle('ring-primary/30', isSelected);\n\n                    const status = opt.querySelector('.visibility-picker-field-status');\n                    status.innerHTML = isSelected\n                        ? '<i class=\"fa-regular fa-check text-primary\" aria-hidden=\"true\"></i>'\n                        : '';\n                });\n\n                instance.hide();\n            });\n        });\n    });\n};\n\ninitVisibilityPickers();\ninitVisibilityPickerFields();\n\nwindow.onEvent(function () {\n    initVisibilityPickers();\n    initVisibilityPickerFields();\n});\n"
  },
  {
    "path": "resources/js/webhooks.js",
    "content": "const initWebhooksForm = () => {\n    let selector = document.getElementById('webhook-selector');\n    if (!selector) {\n        return false;\n    }\n    selector.addEventListener('change', function (e) {\n        e.preventDefault();\n        let selected = this.options[this.selectedIndex];\n        document.querySelector('.webhook-subform').classList.add('hidden');\n        document.querySelector(selected.dataset.target)?.classList.remove('hidden');\n    });\n};\ninitWebhooksForm();\n"
  },
  {
    "path": "resources/js/whiteboards.js",
    "content": "import { createApp } from 'vue';\nimport VueKonva from 'vue-konva';\nimport Whiteboard from './components/whiteboards/Whiteboard.vue';\nimport VueTippy from 'vue-tippy';\n\nconst app = createApp({});\napp.use(VueKonva);\napp.use(VueTippy, {\n    defaultProps: {\n        interactive: true,\n        allowHTML: true,\n    }\n});\napp.component('whiteboard', Whiteboard);\napp.mount('#whiteboard');\n"
  },
  {
    "path": "resources/vendor/tinymce/langs/ca.js",
    "content": "tinymce.addI18n('ca',{\n\"Redo\": \"Refer\",\n\"Undo\": \"Desfer\",\n\"Cut\": \"Retalla\",\n\"Copy\": \"Copia\",\n\"Paste\": \"Enganxa\",\n\"Select all\": \"Seleccionar-ho tot\",\n\"New document\": \"Nou document\",\n\"Ok\": \"Acceptar\",\n\"Cancel\": \"Cancel\\u00b7la\",\n\"Visual aids\": \"Assist\\u00e8ncia visual\",\n\"Bold\": \"Negreta\",\n\"Italic\": \"Cursiva\",\n\"Underline\": \"Subratllat\",\n\"Strikethrough\": \"Barrat\",\n\"Superscript\": \"Super\\u00edndex\",\n\"Subscript\": \"Sub\\u00edndex\",\n\"Clear formatting\": \"Eliminar format\",\n\"Align left\": \"Alinea a l'esquerra\",\n\"Align center\": \"Alinea al centre\",\n\"Align right\": \"Alinea a la dreta\",\n\"Justify\": \"Justificat\",\n\"Bullet list\": \"Llista no ordenada\",\n\"Numbered list\": \"Llista enumerada\",\n\"Decrease indent\": \"Disminuir sagnat\",\n\"Increase indent\": \"Augmentar sagnat\",\n\"Close\": \"Tancar\",\n\"Formats\": \"Formats\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"El vostre navegador no suporta l'acc\\u00e9s directe al portaobjectes. Si us plau, feu servir les dreceres de teclat Ctrl+X\\/C\\/V.\",\n\"Headers\": \"Encap\\u00e7alaments\",\n\"Header 1\": \"Encap\\u00e7alament 1\",\n\"Header 2\": \"Encap\\u00e7alament 2\",\n\"Header 3\": \"Encap\\u00e7alament 3\",\n\"Header 4\": \"Encap\\u00e7alament 4\",\n\"Header 5\": \"Encap\\u00e7alament 5\",\n\"Header 6\": \"Encap\\u00e7alament 6\",\n\"Headings\": \"Encap\\u00e7alaments\",\n\"Heading 1\": \"Encap\\u00e7alament 1\",\n\"Heading 2\": \"Encap\\u00e7alament 2\",\n\"Heading 3\": \"Encap\\u00e7alament 3\",\n\"Heading 4\": \"Encap\\u00e7alament 4\",\n\"Heading 5\": \"Encap\\u00e7alament 5\",\n\"Heading 6\": \"Encap\\u00e7alament 6\",\n\"Preformatted\": \"Preformatat\",\n\"Div\": \"Div\",\n\"Pre\": \"Pre\",\n\"Code\": \"Codi\",\n\"Paragraph\": \"Par\\u00e0graf\",\n\"Blockquote\": \"Cita\",\n\"Inline\": \"En l\\u00ednia\",\n\"Blocks\": \"Blocs\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Enganxar ara est\\u00e0 en mode text pla. Els continguts s'enganxaran com a text pla fins que desactivis aquesta opci\\u00f3. \",\n\"Fonts\": \"Fonts\",\n\"Font Sizes\": \"Mides de la font\",\n\"Class\": \"Classe\",\n\"Browse for an image\": \"Explorar per cercar una imatge\",\n\"OR\": \"O\",\n\"Drop an image here\": \"Deixar anar una imatge aqu\\u00ed\",\n\"Upload\": \"Pujar\",\n\"Block\": \"Bloc\",\n\"Align\": \"Alinea\",\n\"Default\": \"Per defecte\",\n\"Circle\": \"Cercle\",\n\"Disc\": \"Disc\",\n\"Square\": \"Quadrat\",\n\"Lower Alpha\": \"Alfa menor\",\n\"Lower Greek\": \"Grec menor\",\n\"Lower Roman\": \"Roman menor\",\n\"Upper Alpha\": \"Alfa major\",\n\"Upper Roman\": \"Roman major\",\n\"Anchor...\": \"Ancoratge...\",\n\"Name\": \"Nom\",\n\"Id\": \"Id\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"La Id ha de comen\\u00e7ar amb una lletra, seguida d'altres lletres, n\\u00fameros, punts, ratlles, comes, o guions baixos\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"Teniu canvis sense desar, esteu segur que voleu deixar-ho ara?\",\n\"Restore last draft\": \"Restaurar l'\\u00faltim esborrany\",\n\"Special character...\": \"Car\\u00e0cters especials\\u2026\",\n\"Source code\": \"Codi font\",\n\"Insert\\/Edit code sample\": \"Inserir\\/Editar tros de codi\",\n\"Language\": \"Idioma\",\n\"Code sample...\": \"Mostra de codi...\",\n\"Color Picker\": \"Selector de colors\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"B\": \"B\",\n\"Left to right\": \"D'esquerra a dreta\",\n\"Right to left\": \"De dreta a esquerra\",\n\"Emoticons...\": \"Emoticones...\",\n\"Metadata and Document Properties\": \"Metadades i propietats del document\",\n\"Title\": \"T\\u00edtol\",\n\"Keywords\": \"Paraules clau\",\n\"Description\": \"Descripci\\u00f3\",\n\"Robots\": \"Robots\",\n\"Author\": \"Autor\",\n\"Encoding\": \"Codificaci\\u00f3\",\n\"Fullscreen\": \"Pantalla completa\",\n\"Action\": \"Acci\\u00f3\",\n\"Shortcut\": \"Drecera\",\n\"Help\": \"Ajuda\",\n\"Address\": \"Adre\\u00e7a\",\n\"Focus to menubar\": \"Enfocar la barra de men\\u00fa\",\n\"Focus to toolbar\": \"Enfocar la barra d'eines\",\n\"Focus to element path\": \"Enfocar la ruta d'elements\",\n\"Focus to contextual toolbar\": \"Enfocar la barra d'eines contextual\",\n\"Insert link (if link plugin activated)\": \"Inserir enlla\\u00e7 (si el complement d'enlla\\u00e7 est\\u00e0 activat)\",\n\"Save (if save plugin activated)\": \"Desar (si el complement desar est\\u00e0 activat)\",\n\"Find (if searchreplace plugin activated)\": \"Cercar (si el complement cercar-reempla\\u00e7ar est\\u00e0 activat)\",\n\"Plugins installed ({0}):\": \"Complements instal\\u00b7lats ({0}):\",\n\"Premium plugins:\": \"Complements premium\",\n\"Learn more...\": \"Apr\\u00e8n m\\u00e9s...\",\n\"You are using {0}\": \"Est\\u00e0s utilitzant {0}\",\n\"Plugins\": \"Complements\",\n\"Handy Shortcuts\": \"Dreceres a m\\u00e0\",\n\"Horizontal line\": \"L\\u00ednia horitzontal\",\n\"Insert\\/edit image\": \"Inserir\\/editar imatge\",\n\"Image description\": \"Descripci\\u00f3 de la imatge\",\n\"Source\": \"Font\",\n\"Dimensions\": \"Dimensions\",\n\"Constrain proportions\": \"Mantenir proporcions\",\n\"General\": \"General\",\n\"Advanced\": \"Avan\\u00e7at\",\n\"Style\": \"Estil\",\n\"Vertical space\": \"Espai vertical\",\n\"Horizontal space\": \"Espai horitzontal\",\n\"Border\": \"Vora\",\n\"Insert image\": \"Inserir imatge\",\n\"Image...\": \"Imatge...\",\n\"Image list\": \"Llista d'imatges\",\n\"Rotate counterclockwise\": \"Girar a l'esquerra\",\n\"Rotate clockwise\": \"Girar a la dreta\",\n\"Flip vertically\": \"Capgirar verticalment\",\n\"Flip horizontally\": \"Capgirar horitzontalment\",\n\"Edit image\": \"Editar imatge\",\n\"Image options\": \"Opcions d'imatge\",\n\"Zoom in\": \"Ampliar\",\n\"Zoom out\": \"Empetitir\",\n\"Crop\": \"Escap\\u00e7ar\",\n\"Resize\": \"Canviar mida\",\n\"Orientation\": \"Orientaci\\u00f3\",\n\"Brightness\": \"Brillantor\",\n\"Sharpen\": \"Remarcar vores\",\n\"Contrast\": \"Contrast\",\n\"Color levels\": \"Nivells de color\",\n\"Gamma\": \"Gamma\",\n\"Invert\": \"Invertir\",\n\"Apply\": \"Aplicar\",\n\"Back\": \"Tornar\",\n\"Insert date\\/time\": \"Inserir data\\/hora\",\n\"Date\\/time\": \"Data\\/hora\",\n\"Insert\\/Edit Link\": \"Inserir\\/editar l'enlla\\u00e7\",\n\"Insert\\/edit link\": \"Inserir\\/editar enlla\\u00e7\",\n\"Text to display\": \"Text per mostrar\",\n\"Url\": \"URL\",\n\"Open link in...\": \"Obrir l'enlla\\u00e7 a...\",\n\"Current window\": \"Finestra actual\",\n\"None\": \"Cap\",\n\"New window\": \"Finestra nova\",\n\"Remove link\": \"Treure enlla\\u00e7\",\n\"Anchors\": \"\\u00c0ncores\",\n\"Link...\": \"Enlla\\u00e7...\",\n\"Paste or type a link\": \"Enganxa o escriu un enlla\\u00e7\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"L'URL que has escrit sembla una adre\\u00e7a de correu electr\\u00f2nic. Vols afegir-li el prefix obligatori mailto: ?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"L'URL que has escrit sembla un enlla\\u00e7 extern. Vols afegir-li el prefix obligatori http:\\/\\/ ?\",\n\"Link list\": \"Llista d'enlla\\u00e7os\",\n\"Insert video\": \"Inserir v\\u00eddeo\",\n\"Insert\\/edit video\": \"Inserir\\/editar v\\u00eddeo\",\n\"Insert\\/edit media\": \"Inserir\\/editar mitj\\u00e0\",\n\"Alternative source\": \"Font alternativa\",\n\"Alternative source URL\": \"URL de font alternativa\",\n\"Media poster (Image URL)\": \"Cartell de multim\\u00e8dia (URL d'imatge)\",\n\"Paste your embed code below:\": \"Enganxau el codi a sota:\",\n\"Embed\": \"Incloure\",\n\"Media...\": \"Multim\\u00e8dia...\",\n\"Nonbreaking space\": \"Espai fixe\",\n\"Page break\": \"Salt de p\\u00e0gina\",\n\"Paste as text\": \"Enganxar com a text\",\n\"Preview\": \"Previsualitzaci\\u00f3\",\n\"Print...\": \"Imprimir...\",\n\"Save\": \"Desa\",\n\"Find\": \"Buscar\",\n\"Replace with\": \"Rempla\\u00e7ar amb\",\n\"Replace\": \"Rempla\\u00e7ar\",\n\"Replace all\": \"Rempla\\u00e7ar-ho tot\",\n\"Previous\": \"Anterior\",\n\"Next\": \"Seg\\u00fcent\",\n\"Find and replace...\": \"Cercar i reempla\\u00e7ar...\",\n\"Could not find the specified string.\": \"No es pot trobar el text especificat.\",\n\"Match case\": \"Coincidir maj\\u00fascules\",\n\"Find whole words only\": \"Cercar nom\\u00e9s paraules completes\",\n\"Spell check\": \"Corrector ortogr\\u00e0fic\",\n\"Ignore\": \"Ignorar\",\n\"Ignore all\": \"Ignorar tots\",\n\"Finish\": \"Finalitzar\",\n\"Add to Dictionary\": \"Afegir al diccionari\",\n\"Insert table\": \"Inserir taula\",\n\"Table properties\": \"Propietats de taula\",\n\"Delete table\": \"Esborrar taula\",\n\"Cell\": \"Cel\\u00b7la\",\n\"Row\": \"Fila\",\n\"Column\": \"Columna\",\n\"Cell properties\": \"Propietats de cel\\u00b7la\",\n\"Merge cells\": \"Fusionar cel\\u00b7les\",\n\"Split cell\": \"Dividir cel\\u00b7les\",\n\"Insert row before\": \"Inserir fila a sobre\",\n\"Insert row after\": \"Inserir fila a sota\",\n\"Delete row\": \"Esborrar fila\",\n\"Row properties\": \"Propietats de fila\",\n\"Cut row\": \"Retallar fila\",\n\"Copy row\": \"Copiar fila\",\n\"Paste row before\": \"Enganxar fila a sobre\",\n\"Paste row after\": \"Enganxar fila a sota\",\n\"Insert column before\": \"Inserir columna abans\",\n\"Insert column after\": \"Inserir columna despr\\u00e9s\",\n\"Delete column\": \"Esborrar columna\",\n\"Cols\": \"Cols\",\n\"Rows\": \"Files\",\n\"Width\": \"Amplada\",\n\"Height\": \"Al\\u00e7ada\",\n\"Cell spacing\": \"Espai entre cel\\u00b7les\",\n\"Cell padding\": \"Marge intern\",\n\"Show caption\": \"Mostrar encap\\u00e7alament\",\n\"Left\": \"A l'esquerra\",\n\"Center\": \"Centrat\",\n\"Right\": \"A la dreta\",\n\"Cell type\": \"Tipus de cel\\u00b7la\",\n\"Scope\": \"\\u00c0mbit\",\n\"Alignment\": \"Aliniament\",\n\"H Align\": \"Al\\u00edniament H\",\n\"V Align\": \"Al\\u00edniament V\",\n\"Top\": \"Superior\",\n\"Middle\": \"Mitj\\u00e0\",\n\"Bottom\": \"Inferior\",\n\"Header cell\": \"Cel\\u00b7la de cap\\u00e7alera\",\n\"Row group\": \"Grup de fila\",\n\"Column group\": \"Grup de columna\",\n\"Row type\": \"Tipus de fila\",\n\"Header\": \"Cap\\u00e7alera\",\n\"Body\": \"Cos\",\n\"Footer\": \"Peu\",\n\"Border color\": \"Color de vora\",\n\"Insert template...\": \"Inserir plantilla...\",\n\"Templates\": \"Plantilles\",\n\"Template\": \"Plantilla\",\n\"Text color\": \"Color del text\",\n\"Background color\": \"Color del fons\",\n\"Custom...\": \"Personalitzar...\",\n\"Custom color\": \"Personalitzar el color\",\n\"No color\": \"Sense color\",\n\"Remove color\": \"Eliminar el color\",\n\"Table of Contents\": \"Taula de continguts\",\n\"Show blocks\": \"Mostrar blocs\",\n\"Show invisible characters\": \"Mostrar car\\u00e0cters invisibles\",\n\"Word count\": \"Recompte de paraules\",\n\"Count\": \"Compta\",\n\"Document\": \"Document\",\n\"Selection\": \"Selecci\\u00f3\",\n\"Words\": \"Paraules\",\n\"Words: {0}\": \"Paraules: {0}\",\n\"{0} words\": \"{0} paraules\",\n\"File\": \"Arxiu\",\n\"Edit\": \"Edici\\u00f3\",\n\"Insert\": \"Inserir\",\n\"View\": \"Veure\",\n\"Format\": \"Format\",\n\"Table\": \"Taula\",\n\"Tools\": \"Eines\",\n\"Powered by {0}\": \"Impulsat per {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"\\u00c0rea de text amb format. Premeu ALT-F9 per mostrar el men\\u00fa, ALT F10 per la barra d'eines i ALT-0 per ajuda.\",\n\"Image title\": \"T\\u00edtol de la imatge\",\n\"Border width\": \"Amplada de la vora\",\n\"Border style\": \"Estil de la vora\",\n\"Error\": \"Error\",\n\"Warn\": \"Alerta\",\n\"Valid\": \"V\\u00e0lid\",\n\"To open the popup, press Shift+Enter\": \"Per obrir la finestra emergent, premeu Maj.+Retorn\",\n\"Rich Text Area. Press ALT-0 for help.\": \"\\u00c0rea de Text enriquit. Premeu ALT-0 per obtenir ajuda.\",\n\"System Font\": \"Font del sistema\",\n\"Failed to upload image: {0}\": \"No s'ha pogut carregar la imatge: {0}\",\n\"Failed to load plugin: {0} from url {1}\": \"No s'ha pogut carregar el complement: {0} de l\\u2019URL {1}\",\n\"Failed to load plugin url: {0}\": \"No s'ha pogut carregar l\\u2019URL del complement: {0}\",\n\"Failed to initialize plugin: {0}\": \"No s'ha pogut inicialitzar el complement: {0}\",\n\"example\": \"exemple\",\n\"Search\": \"Cerca\",\n\"All\": \"Tot\",\n\"Currency\": \"Moneda\",\n\"Text\": \"Text\",\n\"Quotations\": \"Cites\",\n\"Mathematical\": \"S\\u00edmbols matem\\u00e0tics\",\n\"Extended Latin\": \"Llat\\u00ed ampliat\",\n\"Symbols\": \"S\\u00edmbols\",\n\"Arrows\": \"Fletxes\",\n\"User Defined\": \"Definit per l'usuari\",\n\"dollar sign\": \"signe del d\\u00f2lar\",\n\"currency sign\": \"signe de la moneda\",\n\"euro-currency sign\": \"signe de l'euro\",\n\"colon sign\": \"signe del col\\u00f3n\",\n\"cruzeiro sign\": \"signe del cruzeiro\",\n\"french franc sign\": \"signe del franc franc\\u00e8s\",\n\"lira sign\": \"signe de la lira\",\n\"mill sign\": \"signe del mill\",\n\"naira sign\": \"signe de la naira\",\n\"peseta sign\": \"signe de la pesseta\",\n\"rupee sign\": \"signe de la rupia\",\n\"won sign\": \"signe del won\",\n\"new sheqel sign\": \"signe del nou x\\u00e9quel\",\n\"dong sign\": \"signe del dong\",\n\"kip sign\": \"signe del kip\",\n\"tugrik sign\": \"signe del t\\u00f6gr\\u00f6g\",\n\"drachma sign\": \"signe del dracma\",\n\"german penny symbol\": \"signe del penic alemany\",\n\"peso sign\": \"signe del peso\",\n\"guarani sign\": \"signe del guaran\\u00ed\",\n\"austral sign\": \"signe de l\\u2019austral\",\n\"hryvnia sign\": \"signe de la hr\\u00edvnia\",\n\"cedi sign\": \"signe del cedi\",\n\"livre tournois sign\": \"signe de la lliura tornesa\",\n\"spesmilo sign\": \"signe de l\\u2019spesmilo\",\n\"tenge sign\": \"signe del tenge\",\n\"indian rupee sign\": \"signe de la rupia \\u00edndia\",\n\"turkish lira sign\": \"signe de la lira turca\",\n\"nordic mark sign\": \"signe del marc n\\u00f2rdic\",\n\"manat sign\": \"signe del manat\",\n\"ruble sign\": \"signe del ruble\",\n\"yen character\": \"signe del ien\",\n\"yuan character\": \"signe del iuan\",\n\"yuan character, in hong kong and taiwan\": \"signe del iuan en Hong Kong i Taiwan\",\n\"yen\\/yuan character variant one\": \"variaci\\u00f3 1 del signe del ien\\/iuan\",\n\"Loading emoticons...\": \"Carregant les emoticones...\",\n\"Could not load emoticons\": \"No s'han pogut carregar les emoticones\",\n\"People\": \"Gent\",\n\"Animals and Nature\": \"Animals i natura\",\n\"Food and Drink\": \"Menjar i beure\",\n\"Activity\": \"Activitat\",\n\"Travel and Places\": \"Viatges i llocs\",\n\"Objects\": \"Objectes\",\n\"Flags\": \"Banderes\",\n\"Characters\": \"Car\\u00e0cters\",\n\"Characters (no spaces)\": \"Car\\u00e0cters (sense espais)\",\n\"{0} characters\": \"{0} car\\u00e0cters\",\n\"Error: Form submit field collision.\": \"Error: error en el camp d\\u2019enviament del formulari.\",\n\"Error: No form element found.\": \"Error: no s'ha trobat l'element del formulari.\",\n\"Update\": \"Actualitzar\",\n\"Color swatch\": \"Mostra de color\",\n\"Turquoise\": \"Turquesa\",\n\"Green\": \"Verd\",\n\"Blue\": \"Blau\",\n\"Purple\": \"Violeta\",\n\"Navy Blue\": \"Blau mar\\u00ed\",\n\"Dark Turquoise\": \"Turquesa fosc\",\n\"Dark Green\": \"Verd fosc\",\n\"Medium Blue\": \"Blau mitj\\u00e0\",\n\"Medium Purple\": \"Violeta mitj\\u00e0\",\n\"Midnight Blue\": \"Blau mitjanit\",\n\"Yellow\": \"Groc\",\n\"Orange\": \"Taronja\",\n\"Red\": \"Vermell\",\n\"Light Gray\": \"Gris clar\",\n\"Gray\": \"Gris\",\n\"Dark Yellow\": \"Groc fosc\",\n\"Dark Orange\": \"Taronja fosc\",\n\"Dark Red\": \"Vermell fosc\",\n\"Medium Gray\": \"Gris mitj\\u00e0\",\n\"Dark Gray\": \"Gris fosc\",\n\"Light Green\": \"Verd clar\",\n\"Light Yellow\": \"Groc clar\",\n\"Light Red\": \"Vermell clar\",\n\"Light Purple\": \"Porpra clar\",\n\"Light Blue\": \"Blau clar\",\n\"Dark Purple\": \"Porpra fosc\",\n\"Dark Blue\": \"Blau fosc\",\n\"Black\": \"Negre\",\n\"White\": \"Blanc\",\n\"Switch to or from fullscreen mode\": \"Canviar a o del mode de pantalla completa\",\n\"Open help dialog\": \"Obrir el quadre de di\\u00e0leg d'ajuda\",\n\"history\": \"historial\",\n\"styles\": \"estils\",\n\"formatting\": \"format\",\n\"alignment\": \"alineaci\\u00f3\",\n\"indentation\": \"sagnat\",\n\"permanent pen\": \"retolador permanent\",\n\"comments\": \"comentaris\",\n\"Format Painter\": \"Formata el Painter\",\n\"Insert\\/edit iframe\": \"Insereix\\/edita iframe\",\n\"Capitalization\": \"Capitalitzaci\\u00f3\",\n\"lowercase\": \"min\\u00fascules\",\n\"UPPERCASE\": \"MAJ\\u00daSCULES\",\n\"Title Case\": \"Caixa del t\\u00edtol\",\n\"Permanent Pen Properties\": \"Par\\u00e0metres permanents del llapis\",\n\"Permanent pen properties...\": \"Par\\u00e0metres permanents del llapis\\u2026\",\n\"Font\": \"Font\",\n\"Size\": \"Mida\",\n\"More...\": \"M\\u00e9s\\u2026\",\n\"Spellcheck Language\": \"Idioma de la comprovaci\\u00f3 d'ortografia\",\n\"Select...\": \"Selecciona\\u2026\",\n\"Preferences\": \"Par\\u00e0metres\",\n\"Yes\": \"S\\u00ed\",\n\"No\": \"No\",\n\"Keyboard Navigation\": \"Navegaci\\u00f3 per teclat\",\n\"Version\": \"Versi\\u00f3\",\n\"Anchor\": \"\\u00c0ncora\",\n\"Special character\": \"Car\\u00e0cter especial\",\n\"Code sample\": \"Mostra de codi\",\n\"Color\": \"Color\",\n\"Emoticons\": \"Emoticones\",\n\"Document properties\": \"Propietats del document\",\n\"Image\": \"Imatge\",\n\"Insert link\": \"Inserir enlla\\u00e7\",\n\"Target\": \"Dest\\u00ed\",\n\"Link\": \"Enlla\\u00e7\",\n\"Poster\": \"P\\u00f3ster\",\n\"Media\": \"Mitjans\",\n\"Print\": \"Imprimir\",\n\"Prev\": \"Anterior\",\n\"Find and replace\": \"Buscar i rempla\\u00e7ar\",\n\"Whole words\": \"Paraules senceres\",\n\"Spellcheck\": \"Comprovar ortrografia\",\n\"Caption\": \"Encap\\u00e7alament\",\n\"Insert template\": \"Inserir plantilla\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/de.js",
    "content": "tinymce.addI18n('de',{\n\"Redo\": \"Wiederholen\",\n\"Undo\": \"R\\u00fcckg\\u00e4ngig\",\n\"Cut\": \"Ausschneiden\",\n\"Copy\": \"Kopieren\",\n\"Paste\": \"Einf\\u00fcgen\",\n\"Select all\": \"Alles ausw\\u00e4hlen\",\n\"New document\": \"Neues Dokument\",\n\"Ok\": \"Ok\",\n\"Cancel\": \"Abbrechen\",\n\"Visual aids\": \"Visuelle Hilfen\",\n\"Bold\": \"Fett\",\n\"Italic\": \"Kursiv\",\n\"Underline\": \"Unterstrichen\",\n\"Strikethrough\": \"Durchgestrichen\",\n\"Superscript\": \"Hochgestellt\",\n\"Subscript\": \"Tiefgestellt\",\n\"Clear formatting\": \"Formatierung entfernen\",\n\"Align left\": \"Linksb\\u00fcndig ausrichten\",\n\"Align center\": \"Zentriert ausrichten\",\n\"Align right\": \"Rechtsb\\u00fcndig ausrichten\",\n\"Justify\": \"Blocksatz\",\n\"Bullet list\": \"Aufz\\u00e4hlung\",\n\"Numbered list\": \"Nummerierte Liste\",\n\"Decrease indent\": \"Einzug verkleinern\",\n\"Increase indent\": \"Einzug vergr\\u00f6\\u00dfern\",\n\"Close\": \"Schlie\\u00dfen\",\n\"Formats\": \"Formate\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Ihr Browser unterst\\u00fctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Strg + X \\/ C \\/ V Tastenkombinationen.\",\n\"Headers\": \"\\u00dcberschriften\",\n\"Header 1\": \"\\u00dcberschrift 1\",\n\"Header 2\": \"\\u00dcberschrift 2\",\n\"Header 3\": \"\\u00dcberschrift 3\",\n\"Header 4\": \"\\u00dcberschrift 4\",\n\"Header 5\": \"\\u00dcberschrift 5\",\n\"Header 6\": \"\\u00dcberschrift 6\",\n\"Headings\": \"\\u00dcberschriften\",\n\"Heading 1\": \"\\u00dcberschrift 1\",\n\"Heading 2\": \"\\u00dcberschrift 2\",\n\"Heading 3\": \"\\u00dcberschrift 3\",\n\"Heading 4\": \"\\u00dcberschrift 4\",\n\"Heading 5\": \"\\u00dcberschrift 5\",\n\"Heading 6\": \"\\u00dcberschrift 6\",\n\"Div\": \"Textblock\",\n\"Pre\": \"Vorformatierter Text\",\n\"Code\": \"Quelltext\",\n\"Paragraph\": \"Absatz\",\n\"Blockquote\": \"Zitat\",\n\"Inline\": \"Zeichenformate\",\n\"Blocks\": \"Absatzformate\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Einf\\u00fcgen ist nun im einfachen Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\\u00fcgt, bis Sie diese Einstellung wieder ausschalten!\",\n\"Font Family\": \"Schriftart\",\n\"Font Sizes\": \"Schriftgr\\u00f6\\u00dfe\",\n\"Class\": \"Klasse\",\n\"Browse for an image\": \"Bild...\",\n\"OR\": \"ODER\",\n\"Drop an image here\": \"Bild hier ablegen\",\n\"Upload\": \"Hochladen\",\n\"Block\": \"Block\",\n\"Align\": \"Ausrichtung\",\n\"Default\": \"Standard\",\n\"Circle\": \"Kreis\",\n\"Disc\": \"Punkt\",\n\"Square\": \"Quadrat\",\n\"Lower Alpha\": \"Kleinbuchstaben\",\n\"Lower Greek\": \"Griechische Kleinbuchstaben\",\n\"Lower Roman\": \"R\\u00f6mische Zahlen (Kleinbuchstaben)\",\n\"Upper Alpha\": \"Gro\\u00dfbuchstaben\",\n\"Upper Roman\": \"R\\u00f6mische Zahlen (Gro\\u00dfbuchstaben)\",\n\"Anchor\": \"Textmarke\",\n\"Name\": \"Name\",\n\"Id\": \"Kennung\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"Die Kennung sollte mit einem Buchstaben anfangen. Nachfolgend nur Buchstaben, Zahlen, Striche (Minus), Punkte, Kommas und Unterstriche.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"Die \\u00c4nderungen wurden noch nicht gespeichert, sind Sie sicher, dass Sie diese Seite verlassen wollen?\",\n\"Restore last draft\": \"Letzten Entwurf wiederherstellen\",\n\"Special character\": \"Sonderzeichen\",\n\"Source code\": \"Quelltext\",\n\"Insert\\/Edit code sample\": \"Codebeispiel einf\\u00fcgen\\/bearbeiten\",\n\"Language\": \"Sprache\",\n\"Code sample\": \"Codebeispiel\",\n\"Color\": \"Farbe\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"B\": \"B\",\n\"Left to right\": \"Von links nach rechts\",\n\"Right to left\": \"Von rechts nach links\",\n\"Emoticons\": \"Emoticons\",\n\"Document properties\": \"Dokumenteigenschaften\",\n\"Title\": \"Titel\",\n\"Keywords\": \"Sch\\u00fcsselw\\u00f6rter\",\n\"Description\": \"Beschreibung\",\n\"Robots\": \"Robots\",\n\"Author\": \"Verfasser\",\n\"Encoding\": \"Zeichenkodierung\",\n\"Fullscreen\": \"Vollbild\",\n\"Action\": \"Aktion\",\n\"Shortcut\": \"Shortcut\",\n\"Help\": \"Hilfe\",\n\"Address\": \"Adresse\",\n\"Focus to menubar\": \"Fokus auf Men\\u00fcleiste\",\n\"Focus to toolbar\": \"Fokus auf Werkzeugleiste\",\n\"Focus to element path\": \"Fokus auf Elementpfad\",\n\"Focus to contextual toolbar\": \"Fokus auf kontextbezogene Werkzeugleiste\",\n\"Insert link (if link plugin activated)\": \"Link einf\\u00fcgen (wenn Link-Plugin aktiviert ist)\",\n\"Save (if save plugin activated)\": \"Speichern (wenn Save-Plugin aktiviert ist)\",\n\"Find (if searchreplace plugin activated)\": \"Suchen einf\\u00fcgen (wenn Suchen\\/Ersetzen-Plugin aktiviert ist)\",\n\"Plugins installed ({0}):\": \"installierte Plugins ({0}):\",\n\"Premium plugins:\": \"Premium Plugins:\",\n\"Learn more...\": \"Erfahren Sie mehr dazu...\",\n\"You are using {0}\": \"Sie verwenden {0}\",\n\"Plugins\": \"Plugins\",\n\"Handy Shortcuts\": \"Handy Shortcuts\",\n\"Horizontal line\": \"Horizontale Linie\",\n\"Insert\\/edit image\": \"Bild einf\\u00fcgen\\/bearbeiten\",\n\"Image description\": \"Bildbeschreibung\",\n\"Source\": \"Quelle\",\n\"Dimensions\": \"Abmessungen\",\n\"Constrain proportions\": \"Seitenverh\\u00e4ltnis beibehalten\",\n\"General\": \"Allgemein\",\n\"Advanced\": \"Erweitert\",\n\"Style\": \"Stil\",\n\"Vertical space\": \"Vertikaler Abstand\",\n\"Horizontal space\": \"Horizontaler Abstand\",\n\"Border\": \"Rahmen\",\n\"Insert image\": \"Bild einf\\u00fcgen\",\n\"Image\": \"Bild\",\n\"Image list\": \"Bildliste\",\n\"Rotate counterclockwise\": \"Gegen den Uhrzeigersinn drehen\",\n\"Rotate clockwise\": \"Im Uhrzeigersinn drehen\",\n\"Flip vertically\": \"Vertikal spiegeln\",\n\"Flip horizontally\": \"Horizontal spiegeln\",\n\"Edit image\": \"Bild bearbeiten\",\n\"Image options\": \"Bildeigenschaften\",\n\"Zoom in\": \"Ansicht vergr\\u00f6\\u00dfern\",\n\"Zoom out\": \"Ansicht verkleinern\",\n\"Crop\": \"Bescheiden\",\n\"Resize\": \"Skalieren\",\n\"Orientation\": \"Ausrichtung\",\n\"Brightness\": \"Helligkeit\",\n\"Sharpen\": \"Sch\\u00e4rfen\",\n\"Contrast\": \"Kontrast\",\n\"Color levels\": \"Farbwerte\",\n\"Gamma\": \"Gamma\",\n\"Invert\": \"Invertieren\",\n\"Apply\": \"Anwenden\",\n\"Back\": \"Zur\\u00fcck\",\n\"Insert date\\/time\": \"Datum\\/Uhrzeit einf\\u00fcgen \",\n\"Date\\/time\": \"Datum\\/Uhrzeit\",\n\"Insert link\": \"Link einf\\u00fcgen\",\n\"Insert\\/edit link\": \"Link einf\\u00fcgen\\/bearbeiten\",\n\"Text to display\": \"Anzuzeigender Text\",\n\"Url\": \"URL\",\n\"Target\": \"Ziel\",\n\"None\": \"Keine\",\n\"New window\": \"Neues Fenster\",\n\"Remove link\": \"Link entfernen\",\n\"Anchors\": \"Textmarken\",\n\"Link\": \"Link\",\n\"Paste or type a link\": \"Link einf\\u00fcgen oder eintippen\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"Diese Adresse scheint eine E-Mail-Adresse zu sein. M\\u00f6chten Sie das dazu ben\\u00f6tigte \\\"mailto:\\\" voranstellen?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"Diese Adresse scheint ein externer Link zu sein. M\\u00f6chten Sie das dazu ben\\u00f6tigte \\\"http:\\/\\/\\\" voranstellen?\",\n\"Link list\": \"Linkliste\",\n\"Insert video\": \"Video einf\\u00fcgen\",\n\"Insert\\/edit video\": \"Video einf\\u00fcgen\\/bearbeiten\",\n\"Insert\\/edit media\": \"Medien einf\\u00fcgen\\/bearbeiten\",\n\"Alternative source\": \"Alternative Quelle\",\n\"Poster\": \"Poster\",\n\"Paste your embed code below:\": \"F\\u00fcgen Sie Ihren Einbettungscode hier ein:\",\n\"Embed\": \"Einbetten\",\n\"Media\": \"Medium\",\n\"Nonbreaking space\": \"Gesch\\u00fctztes Leerzeichen\",\n\"Page break\": \"Seitenumbruch\",\n\"Paste as text\": \"Als Text einf\\u00fcgen\",\n\"Preview\": \"Vorschau\",\n\"Print\": \"Drucken\",\n\"Save\": \"Speichern\",\n\"Find\": \"Suchen\",\n\"Replace with\": \"Ersetzen durch\",\n\"Replace\": \"Ersetzen\",\n\"Replace all\": \"Alles ersetzen\",\n\"Prev\": \"Zur\\u00fcck\",\n\"Next\": \"Weiter\",\n\"Find and replace\": \"Suchen und ersetzen\",\n\"Could not find the specified string.\": \"Die Zeichenfolge wurde nicht gefunden.\",\n\"Match case\": \"Gro\\u00df-\\/Kleinschreibung beachten\",\n\"Whole words\": \"Nur ganze W\\u00f6rter\",\n\"Spellcheck\": \"Rechtschreibpr\\u00fcfung\",\n\"Ignore\": \"Ignorieren\",\n\"Ignore all\": \"Alles Ignorieren\",\n\"Finish\": \"Ende\",\n\"Add to Dictionary\": \"Zum W\\u00f6rterbuch hinzuf\\u00fcgen\",\n\"Insert table\": \"Tabelle einf\\u00fcgen\",\n\"Table properties\": \"Tabelleneigenschaften\",\n\"Delete table\": \"Tabelle l\\u00f6schen\",\n\"Cell\": \"Zelle\",\n\"Row\": \"Zeile\",\n\"Column\": \"Spalte\",\n\"Cell properties\": \"Zelleneigenschaften\",\n\"Merge cells\": \"Zellen verbinden\",\n\"Split cell\": \"Zelle aufteilen\",\n\"Insert row before\": \"Neue Zeile davor einf\\u00fcgen \",\n\"Insert row after\": \"Neue Zeile danach einf\\u00fcgen\",\n\"Delete row\": \"Zeile l\\u00f6schen\",\n\"Row properties\": \"Zeileneigenschaften\",\n\"Cut row\": \"Zeile ausschneiden\",\n\"Copy row\": \"Zeile kopieren\",\n\"Paste row before\": \"Zeile davor einf\\u00fcgen\",\n\"Paste row after\": \"Zeile danach einf\\u00fcgen\",\n\"Insert column before\": \"Neue Spalte davor einf\\u00fcgen\",\n\"Insert column after\": \"Neue Spalte danach einf\\u00fcgen\",\n\"Delete column\": \"Spalte l\\u00f6schen\",\n\"Cols\": \"Spalten\",\n\"Rows\": \"Zeilen\",\n\"Width\": \"Breite\",\n\"Height\": \"H\\u00f6he\",\n\"Cell spacing\": \"Zellenabstand\",\n\"Cell padding\": \"Zelleninnenabstand\",\n\"Caption\": \"Beschriftung\",\n\"Left\": \"Linksb\\u00fcndig\",\n\"Center\": \"Zentriert\",\n\"Right\": \"Rechtsb\\u00fcndig\",\n\"Cell type\": \"Zellentyp\",\n\"Scope\": \"G\\u00fcltigkeitsbereich\",\n\"Alignment\": \"Ausrichtung\",\n\"H Align\": \"Horizontale Ausrichtung\",\n\"V Align\": \"Vertikale Ausrichtung\",\n\"Top\": \"Oben\",\n\"Middle\": \"Mitte\",\n\"Bottom\": \"Unten\",\n\"Header cell\": \"Kopfzelle\",\n\"Row group\": \"Zeilengruppe\",\n\"Column group\": \"Spaltengruppe\",\n\"Row type\": \"Zeilentyp\",\n\"Header\": \"Kopfzeile\",\n\"Body\": \"Inhalt\",\n\"Footer\": \"Fu\\u00dfzeile\",\n\"Border color\": \"Rahmenfarbe\",\n\"Insert template\": \"Vorlage einf\\u00fcgen \",\n\"Templates\": \"Vorlagen\",\n\"Template\": \"Vorlage\",\n\"Text color\": \"Textfarbe\",\n\"Background color\": \"Hintergrundfarbe\",\n\"Custom...\": \"Benutzerdefiniert...\",\n\"Custom color\": \"Benutzerdefinierte Farbe\",\n\"No color\": \"Keine Farbe\",\n\"Table of Contents\": \"Inhaltsverzeichnis\",\n\"Show blocks\": \"Bl\\u00f6cke anzeigen\",\n\"Show invisible characters\": \"Unsichtbare Zeichen anzeigen\",\n\"Words: {0}\": \"W\\u00f6rter: {0}\",\n\"{0} words\": \"{0} W\\u00f6rter\",\n\"File\": \"Datei\",\n\"Edit\": \"Bearbeiten\",\n\"Insert\": \"Einf\\u00fcgen\",\n\"View\": \"Ansicht\",\n\"Format\": \"Format\",\n\"Table\": \"Tabelle\",\n\"Tools\": \"Werkzeuge\",\n\"Powered by {0}\": \"Betrieben von {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Rich-Text- Area. Dr\\u00fccken Sie ALT-F9 f\\u00fcr das Men\\u00fc. Dr\\u00fccken Sie ALT-F10 f\\u00fcr Symbolleiste. Dr\\u00fccken Sie ALT-0 f\\u00fcr Hilfe\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/es.js",
    "content": "tinymce.addI18n('es',{\n\"Redo\": \"Rehacer\",\n\"Undo\": \"Deshacer\",\n\"Cut\": \"Cortar\",\n\"Copy\": \"Copiar\",\n\"Paste\": \"Pegar\",\n\"Select all\": \"Seleccionar todo\",\n\"New document\": \"Nuevo documento\",\n\"Ok\": \"Ok\",\n\"Cancel\": \"Cancelar\",\n\"Visual aids\": \"Ayudas visuales\",\n\"Bold\": \"Negrita\",\n\"Italic\": \"It\\u00e1lica\",\n\"Underline\": \"Subrayado\",\n\"Strikethrough\": \"Tachado\",\n\"Superscript\": \"Super\\u00edndice\",\n\"Subscript\": \"Sub\\u00edndice\",\n\"Clear formatting\": \"Limpiar formato\",\n\"Align left\": \"Alinear a la izquierda\",\n\"Align center\": \"Alinear al centro\",\n\"Align right\": \"Alinear a la derecha\",\n\"Justify\": \"Justificar\",\n\"Bullet list\": \"Lista de vi\\u00f1etas\",\n\"Numbered list\": \"Lista numerada\",\n\"Decrease indent\": \"Disminuir sangr\\u00eda\",\n\"Increase indent\": \"Incrementar sangr\\u00eda\",\n\"Close\": \"Cerrar\",\n\"Formats\": \"Formatos\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Tu navegador no soporta acceso directo al portapapeles. Por favor usa las teclas Crtl+X\\/C\\/V de tu teclado\",\n\"Headers\": \"Encabezados\",\n\"Header 1\": \"Encabezado 1\",\n\"Header 2\": \"Encabezado 2 \",\n\"Header 3\": \"Encabezado 3\",\n\"Header 4\": \"Encabezado 4\",\n\"Header 5\": \"Encabezado 5 \",\n\"Header 6\": \"Encabezado 6\",\n\"Headings\": \"Encabezados\",\n\"Heading 1\": \"Encabezado 1\",\n\"Heading 2\": \"Encabezado 2\",\n\"Heading 3\": \"Encabezado 3\",\n\"Heading 4\": \"Encabezado 4\",\n\"Heading 5\": \"Encabezado 5\",\n\"Heading 6\": \"Encabezado 6\",\n\"Div\": \"Capa\",\n\"Pre\": \"Pre\",\n\"Code\": \"C\\u00f3digo\",\n\"Paragraph\": \"P\\u00e1rrafo\",\n\"Blockquote\": \"Bloque de cita\",\n\"Inline\": \"en l\\u00ednea\",\n\"Blocks\": \"Bloques\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Pegar est\\u00e1 ahora en modo de texto plano. El contenido se pegar\\u00e1 como texto plano hasta que desactive esta opci\\u00f3n.\",\n\"Font Family\": \"Familia de fuentes\",\n\"Font Sizes\": \"Tama\\u00f1os de fuente\",\n\"Class\": \"Clase\",\n\"Browse for an image\": \"Exporador de imagenes\",\n\"OR\": \"O\",\n\"Drop an image here\": \"Arrastre una imagen aqu\\u00ed\",\n\"Upload\": \"Subir\",\n\"Block\": \"Bloque\",\n\"Align\": \"Alinear\",\n\"Default\": \"Por defecto\",\n\"Circle\": \"C\\u00edrculo\",\n\"Disc\": \"Disco\",\n\"Square\": \"Cuadrado\",\n\"Lower Alpha\": \"Inferior Alfa\",\n\"Lower Greek\": \"Inferior Griega\",\n\"Lower Roman\": \"Inferior Romana\",\n\"Upper Alpha\": \"Superior Alfa\",\n\"Upper Roman\": \"Superior Romana\",\n\"Anchor\": \"Ancla\",\n\"Name\": \"Nombre\",\n\"Id\": \"Id\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"Deber\\u00eda comenzar por una letra, seguida solo de letras, n\\u00fameros, guiones, puntos, dos puntos o guiones bajos.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"Tiene cambios sin guardar. \\u00bfEst\\u00e1 seguro de que quiere salir?\",\n\"Restore last draft\": \"Restaurar el \\u00faltimo borrador\",\n\"Special character\": \"Car\\u00e1cter especial\",\n\"Source code\": \"C\\u00f3digo fuente\",\n\"Insert\\/Edit code sample\": \"Insertar\\/editar c\\u00f3digo de prueba\",\n\"Language\": \"Idioma\",\n\"Code sample\": \"Ejemplo de c\\u00f3digo\",\n\"Color\": \"Color\",\n\"R\": \"R\",\n\"G\": \"V\",\n\"B\": \"A\",\n\"Left to right\": \"De izquierda a derecha\",\n\"Right to left\": \"De derecha a izquierda\",\n\"Emoticons\": \"Emoticonos\",\n\"Document properties\": \"Propiedades del documento\",\n\"Title\": \"T\\u00edtulo\",\n\"Keywords\": \"Palabras clave\",\n\"Description\": \"Descripci\\u00f3n\",\n\"Robots\": \"Robots\",\n\"Author\": \"Autor\",\n\"Encoding\": \"Codificaci\\u00f3n\",\n\"Fullscreen\": \"Pantalla completa\",\n\"Action\": \"Acci\\u00f3n\",\n\"Shortcut\": \"Atajo\",\n\"Help\": \"Ayuda\",\n\"Address\": \"Direcci\\u00f3n\",\n\"Focus to menubar\": \"Enfocar la barra del men\\u00fa\",\n\"Focus to toolbar\": \"Enfocar la barra de herramientas\",\n\"Focus to element path\": \"Enfocar la ruta del elemento\",\n\"Focus to contextual toolbar\": \"Enfocar la barra de herramientas contextual\",\n\"Insert link (if link plugin activated)\": \"Insertar enlace (si el complemento de enlace est\\u00e1 activado)\",\n\"Save (if save plugin activated)\": \"Guardar (si el componente de salvar est\\u00e1 activado)\",\n\"Find (if searchreplace plugin activated)\": \"Buscar (si el complemento buscar-remplazar est\\u00e1 activado)\",\n\"Plugins installed ({0}):\": \"Plugins instalados ({0}):\",\n\"Premium plugins:\": \"Complementos premium:\",\n\"Learn more...\": \"Aprende m\\u00e1s...\",\n\"You are using {0}\": \"Estas usando {0}\",\n\"Plugins\": \"Complementos\",\n\"Handy Shortcuts\": \"Accesos directos\",\n\"Horizontal line\": \"L\\u00ednea horizontal\",\n\"Insert\\/edit image\": \"Insertar\\/editar imagen\",\n\"Image description\": \"Descripci\\u00f3n de la imagen\",\n\"Source\": \"Enlace\",\n\"Dimensions\": \"Dimensiones\",\n\"Constrain proportions\": \"Restringir proporciones\",\n\"General\": \"General\",\n\"Advanced\": \"Avanzado\",\n\"Style\": \"Estilo\",\n\"Vertical space\": \"Espacio vertical\",\n\"Horizontal space\": \"Espacio horizontal\",\n\"Border\": \"Borde\",\n\"Insert image\": \"Insertar imagen\",\n\"Image\": \"Imagen\",\n\"Image list\": \"Lista de im\\u00e1genes\",\n\"Rotate counterclockwise\": \"Girar a la izquierda\",\n\"Rotate clockwise\": \"Girar a la derecha\",\n\"Flip vertically\": \"Invertir verticalmente\",\n\"Flip horizontally\": \"Invertir horizontalmente\",\n\"Edit image\": \"Editar imagen\",\n\"Image options\": \"Opciones de imagen\",\n\"Zoom in\": \"Acercar\",\n\"Zoom out\": \"Alejar\",\n\"Crop\": \"Recortar\",\n\"Resize\": \"Redimensionar\",\n\"Orientation\": \"Orientaci\\u00f3n\",\n\"Brightness\": \"Brillo\",\n\"Sharpen\": \"Forma\",\n\"Contrast\": \"Contraste\",\n\"Color levels\": \"Niveles de color\",\n\"Gamma\": \"Gamma\",\n\"Invert\": \"Invertir\",\n\"Apply\": \"Aplicar\",\n\"Back\": \"Atr\\u00e1s\",\n\"Insert date\\/time\": \"Insertar fecha\\/hora\",\n\"Date\\/time\": \"Fecha\\/hora\",\n\"Insert link\": \"Insertar enlace\",\n\"Insert\\/edit link\": \"Insertar\\/editar enlace\",\n\"Text to display\": \"Texto para mostrar\",\n\"Url\": \"URL\",\n\"Target\": \"Destino\",\n\"None\": \"Ninguno\",\n\"New window\": \"Nueva ventana\",\n\"Remove link\": \"Quitar enlace\",\n\"Anchors\": \"Anclas\",\n\"Link\": \"Enlace\",\n\"Paste or type a link\": \"Pega o introduce un enlace\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"El enlace que has introducido no parece ser una direcci\\u00f3n de correo electr\\u00f3nico. Quieres a\\u00f1adir el prefijo necesario mailto: ?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"El enlace que has introducido no parece ser una enlace externo. Quieres a\\u00f1adir el prefijo necesario http:\\/\\/ ?\",\n\"Link list\": \"Lista de enlaces\",\n\"Insert video\": \"Insertar video\",\n\"Insert\\/edit video\": \"Insertar\\/editar video\",\n\"Insert\\/edit media\": \"Insertar\\/editar medio\",\n\"Alternative source\": \"Enlace alternativo\",\n\"Poster\": \"Miniatura\",\n\"Paste your embed code below:\": \"Pega tu c\\u00f3digo embebido debajo\",\n\"Embed\": \"Incrustado\",\n\"Media\": \"Media\",\n\"Nonbreaking space\": \"Espacio fijo\",\n\"Page break\": \"Salto de p\\u00e1gina\",\n\"Paste as text\": \"Pegar como texto\",\n\"Preview\": \"Previsualizar\",\n\"Print\": \"Imprimir\",\n\"Save\": \"Guardar\",\n\"Find\": \"Buscar\",\n\"Replace with\": \"Reemplazar con\",\n\"Replace\": \"Reemplazar\",\n\"Replace all\": \"Reemplazar todo\",\n\"Prev\": \"Anterior\",\n\"Next\": \"Siguiente\",\n\"Find and replace\": \"Buscar y reemplazar\",\n\"Could not find the specified string.\": \"No se encuentra la cadena de texto especificada\",\n\"Match case\": \"Coincidencia exacta\",\n\"Whole words\": \"Palabras completas\",\n\"Spellcheck\": \"Corrector ortogr\\u00e1fico\",\n\"Ignore\": \"Ignorar\",\n\"Ignore all\": \"Ignorar todos\",\n\"Finish\": \"Finalizar\",\n\"Add to Dictionary\": \"A\\u00f1adir al Diccionario\",\n\"Insert table\": \"Insertar tabla\",\n\"Table properties\": \"Propiedades de la tabla\",\n\"Delete table\": \"Eliminar tabla\",\n\"Cell\": \"Celda\",\n\"Row\": \"Fila\",\n\"Column\": \"Columna\",\n\"Cell properties\": \"Propiedades de la celda\",\n\"Merge cells\": \"Combinar celdas\",\n\"Split cell\": \"Dividir celdas\",\n\"Insert row before\": \"Insertar fila antes\",\n\"Insert row after\": \"Insertar fila despu\\u00e9s \",\n\"Delete row\": \"Eliminar fila\",\n\"Row properties\": \"Propiedades de la fila\",\n\"Cut row\": \"Cortar fila\",\n\"Copy row\": \"Copiar fila\",\n\"Paste row before\": \"Pegar la fila antes\",\n\"Paste row after\": \"Pegar la fila despu\\u00e9s\",\n\"Insert column before\": \"Insertar columna antes\",\n\"Insert column after\": \"Insertar columna despu\\u00e9s\",\n\"Delete column\": \"Eliminar columna\",\n\"Cols\": \"Columnas\",\n\"Rows\": \"Filas\",\n\"Width\": \"Ancho\",\n\"Height\": \"Alto\",\n\"Cell spacing\": \"Espacio entre celdas\",\n\"Cell padding\": \"Relleno de celda\",\n\"Caption\": \"Subt\\u00edtulo\",\n\"Left\": \"Izquierda\",\n\"Center\": \"Centrado\",\n\"Right\": \"Derecha\",\n\"Cell type\": \"Tipo de celda\",\n\"Scope\": \"\\u00c1mbito\",\n\"Alignment\": \"Alineaci\\u00f3n\",\n\"H Align\": \"Alineamiento Horizontal\",\n\"V Align\": \"Alineamiento Vertical\",\n\"Top\": \"Arriba\",\n\"Middle\": \"Centro\",\n\"Bottom\": \"Abajo\",\n\"Header cell\": \"Celda de la cebecera\",\n\"Row group\": \"Grupo de filas\",\n\"Column group\": \"Grupo de columnas\",\n\"Row type\": \"Tipo de fila\",\n\"Header\": \"Cabecera\",\n\"Body\": \"Cuerpo\",\n\"Footer\": \"Pie de p\\u00e1gina\",\n\"Border color\": \"Color del borde\",\n\"Insert template\": \"Insertar plantilla\",\n\"Templates\": \"Plantillas\",\n\"Template\": \"Plantilla\",\n\"Text color\": \"Color del texto\",\n\"Background color\": \"Color de fondo\",\n\"Custom...\": \"Personalizar...\",\n\"Custom color\": \"Color personalizado\",\n\"No color\": \"Sin color\",\n\"Table of Contents\": \"Tabla de contenidos\",\n\"Show blocks\": \"Mostrar bloques\",\n\"Show invisible characters\": \"Mostrar caracteres invisibles\",\n\"Words: {0}\": \"Palabras: {0}\",\n\"{0} words\": \"{0} palabras\",\n\"File\": \"Archivo\",\n\"Edit\": \"Editar\",\n\"Insert\": \"Insertar\",\n\"View\": \"Ver\",\n\"Format\": \"Formato\",\n\"Table\": \"Tabla\",\n\"Tools\": \"Herramientas\",\n\"Powered by {0}\": \"Desarrollado por {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"\\u00c1rea de texto enriquecido. Pulse ALT-F9 para el menu. Pulse ALT-F10 para la barra de herramientas. Pulse ALT-0 para ayuda\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/fr.js",
    "content": "tinymce.addI18n('fr',{\n\"Redo\": \"R\\u00e9tablir\",\n\"Undo\": \"Annuler\",\n\"Cut\": \"Couper\",\n\"Copy\": \"Copier\",\n\"Paste\": \"Coller\",\n\"Select all\": \"Tout s\\u00e9lectionner\",\n\"New document\": \"Nouveau document\",\n\"Ok\": \"Ok\",\n\"Cancel\": \"Annuler\",\n\"Visual aids\": \"Aides visuelle\",\n\"Bold\": \"Gras\",\n\"Italic\": \"Italique\",\n\"Underline\": \"Soulign\\u00e9\",\n\"Strikethrough\": \"Barr\\u00e9\",\n\"Superscript\": \"Exposant\",\n\"Subscript\": \"Indice\",\n\"Clear formatting\": \"Effacer la mise en forme\",\n\"Align left\": \"Aligner \\u00e0 gauche\",\n\"Align center\": \"Centrer\",\n\"Align right\": \"Aligner \\u00e0 droite\",\n\"Justify\": \"Justifier\",\n\"Bullet list\": \"Puces\",\n\"Numbered list\": \"Num\\u00e9rotation\",\n\"Decrease indent\": \"Diminuer le retrait\",\n\"Increase indent\": \"Augmenter le retrait\",\n\"Close\": \"Fermer\",\n\"Formats\": \"Formats\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Votre navigateur ne supporte pas la copie directe. Merci d'utiliser les touches Ctrl+X\\/C\\/V.\",\n\"Headers\": \"Titres\",\n\"Header 1\": \"Titre 1\",\n\"Header 2\": \"Titre 2\",\n\"Header 3\": \"Titre 3\",\n\"Header 4\": \"Titre 4\",\n\"Header 5\": \"Titre 5\",\n\"Header 6\": \"Titre 6\",\n\"Headings\": \"En-t\\u00eates\",\n\"Heading 1\": \"En-t\\u00eate 1\",\n\"Heading 2\": \"En-t\\u00eate 2\",\n\"Heading 3\": \"En-t\\u00eate 3\",\n\"Heading 4\": \"En-t\\u00eate 4\",\n\"Heading 5\": \"En-t\\u00eate 5\",\n\"Heading 6\": \"En-t\\u00eate 6\",\n\"Preformatted\": \"Pr\\u00e9-formatt\\u00e9\",\n\"Div\": \"Div\",\n\"Pre\": \"Pre\",\n\"Code\": \"Code\",\n\"Paragraph\": \"Paragraphe\",\n\"Blockquote\": \"Citation\",\n\"Inline\": \"En ligne\",\n\"Blocks\": \"Blocs\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Le presse-papiers est maintenant en mode \\\"texte plein\\\". Les contenus seront coll\\u00e9s sans retenir les formatages jusqu'\\u00e0 ce que vous d\\u00e9sactiviez cette option.\",\n\"Font Family\": \"Police\",\n\"Font Sizes\": \"Taille de police\",\n\"Class\": \"Classe\",\n\"Browse for an image\": \"Parcourir pour s\\u00e9lectionner une image\",\n\"OR\": \"OU\",\n\"Drop an image here\": \"Glisser une image ici\",\n\"Upload\": \"D\\u00e9poser\",\n\"Block\": \"Bloquer\",\n\"Align\": \"Aligner\",\n\"Default\": \"Par d\\u00e9faut\",\n\"Circle\": \"Cercle\",\n\"Disc\": \"Disque\",\n\"Square\": \"Carr\\u00e9\",\n\"Lower Alpha\": \"Alpha minuscule\",\n\"Lower Greek\": \"Grec minuscule\",\n\"Lower Roman\": \"Romain minuscule\",\n\"Upper Alpha\": \"Alpha majuscule\",\n\"Upper Roman\": \"Romain majuscule\",\n\"Anchor\": \"Ancre\",\n\"Name\": \"Nom\",\n\"Id\": \"Id\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"L'Id doit commencer par une lettre suivi par des lettres, nombres, tirets, points, deux-points ou underscores\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"Vous avez des modifications non enregistr\\u00e9es, \\u00eates-vous s\\u00fbr de quitter la page?\",\n\"Restore last draft\": \"Restaurer le dernier brouillon\",\n\"Special character\": \"Caract\\u00e8res sp\\u00e9ciaux\",\n\"Source code\": \"Code source\",\n\"Insert\\/Edit code sample\": \"Ins\\u00e9rer \\/ modifier une exemple de code\",\n\"Language\": \"Langue\",\n\"Code sample\": \"Extrait de code\",\n\"Color\": \"Couleur\",\n\"R\": \"R\",\n\"G\": \"V\",\n\"B\": \"B\",\n\"Left to right\": \"Gauche \\u00e0 droite\",\n\"Right to left\": \"Droite \\u00e0 gauche\",\n\"Emoticons\": \"Emotic\\u00f4nes\",\n\"Document properties\": \"Propri\\u00e9t\\u00e9 du document\",\n\"Title\": \"Titre\",\n\"Keywords\": \"Mots-cl\\u00e9s\",\n\"Description\": \"Description\",\n\"Robots\": \"Robots\",\n\"Author\": \"Auteur\",\n\"Encoding\": \"Encodage\",\n\"Fullscreen\": \"Plein \\u00e9cran\",\n\"Action\": \"Action\",\n\"Shortcut\": \"Raccourci\",\n\"Help\": \"Aide\",\n\"Address\": \"Adresse\",\n\"Focus to menubar\": \"Cibler la barre de menu\",\n\"Focus to toolbar\": \"Cibler la barre d'outils\",\n\"Focus to element path\": \"Cibler le chemin vers l'\\u00e9l\\u00e9ment\",\n\"Focus to contextual toolbar\": \"Cibler la barre d'outils contextuelle\",\n\"Insert link (if link plugin activated)\": \"Ins\\u00e9rer un lien (si le module link est activ\\u00e9)\",\n\"Save (if save plugin activated)\": \"Enregistrer (si le module save est activ\\u00e9)\",\n\"Find (if searchreplace plugin activated)\": \"Rechercher (si le module searchreplace est activ\\u00e9)\",\n\"Plugins installed ({0}):\": \"Modules install\\u00e9s ({0}) : \",\n\"Premium plugins:\": \"Modules premium :\",\n\"Learn more...\": \"En savoir plus...\",\n\"You are using {0}\": \"Vous utilisez {0}\",\n\"Plugins\": \"Plugins\",\n\"Handy Shortcuts\": \"Raccourci\",\n\"Horizontal line\": \"Ligne horizontale\",\n\"Insert\\/edit image\": \"Ins\\u00e9rer\\/modifier une image\",\n\"Image description\": \"Description de l'image\",\n\"Source\": \"Source\",\n\"Dimensions\": \"Dimensions\",\n\"Constrain proportions\": \"Conserver les proportions\",\n\"General\": \"G\\u00e9n\\u00e9ral\",\n\"Advanced\": \"Avanc\\u00e9\",\n\"Style\": \"Style\",\n\"Vertical space\": \"Espacement vertical\",\n\"Horizontal space\": \"Espacement horizontal\",\n\"Border\": \"Bordure\",\n\"Insert image\": \"Ins\\u00e9rer une image\",\n\"Image\": \"Image\",\n\"Image list\": \"Liste d'images\",\n\"Rotate counterclockwise\": \"Rotation anti-horaire\",\n\"Rotate clockwise\": \"Rotation horaire\",\n\"Flip vertically\": \"Retournement vertical\",\n\"Flip horizontally\": \"Retournement horizontal\",\n\"Edit image\": \"Modifier l'image\",\n\"Image options\": \"Options de l'image\",\n\"Zoom in\": \"Zoomer\",\n\"Zoom out\": \"D\\u00e9zoomer\",\n\"Crop\": \"Rogner\",\n\"Resize\": \"Redimensionner\",\n\"Orientation\": \"Orientation\",\n\"Brightness\": \"Luminosit\\u00e9\",\n\"Sharpen\": \"Affiner\",\n\"Contrast\": \"Contraste\",\n\"Color levels\": \"Niveaux de couleur\",\n\"Gamma\": \"Gamma\",\n\"Invert\": \"Inverser\",\n\"Apply\": \"Appliquer\",\n\"Back\": \"Retour\",\n\"Insert date\\/time\": \"Ins\\u00e9rer date\\/heure\",\n\"Date\\/time\": \"Date\\/heure\",\n\"Insert link\": \"Ins\\u00e9rer un lien\",\n\"Insert\\/edit link\": \"Ins\\u00e9rer\\/modifier un lien\",\n\"Text to display\": \"Texte \\u00e0 afficher\",\n\"Url\": \"Url\",\n\"Target\": \"Cible\",\n\"None\": \"n\\/a\",\n\"New window\": \"Nouvelle fen\\u00eatre\",\n\"Remove link\": \"Enlever le lien\",\n\"Anchors\": \"Ancres\",\n\"Link\": \"Lien\",\n\"Paste or type a link\": \"Coller ou taper un lien\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"L'URL que vous avez entr\\u00e9e semble \\u00eatre une adresse e-mail. Voulez-vous ajouter le pr\\u00e9fixe mailto: n\\u00e9cessaire?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"L'URL que vous avez entr\\u00e9e semble \\u00eatre un lien externe. Voulez-vous ajouter le pr\\u00e9fixe http:\\/\\/ n\\u00e9cessaire?\",\n\"Link list\": \"Liste de liens\",\n\"Insert video\": \"Ins\\u00e9rer une vid\\u00e9o\",\n\"Insert\\/edit video\": \"Ins\\u00e9rer\\/modifier une vid\\u00e9o\",\n\"Insert\\/edit media\": \"Ins\\u00e9rer\\/modifier un m\\u00e9dia\",\n\"Alternative source\": \"Source alternative\",\n\"Poster\": \"Publier\",\n\"Paste your embed code below:\": \"Collez votre code d'int\\u00e9gration ci-dessous :\",\n\"Embed\": \"Int\\u00e9grer\",\n\"Media\": \"M\\u00e9dia\",\n\"Nonbreaking space\": \"Espace ins\\u00e9cable\",\n\"Page break\": \"Saut de page\",\n\"Paste as text\": \"Coller comme texte\",\n\"Preview\": \"Pr\\u00e9visualiser\",\n\"Print\": \"Imprimer\",\n\"Save\": \"Enregistrer\",\n\"Find\": \"Chercher\",\n\"Replace with\": \"Remplacer par\",\n\"Replace\": \"Remplacer\",\n\"Replace all\": \"Tout remplacer\",\n\"Prev\": \"Pr\\u00e9c \",\n\"Next\": \"Suiv\",\n\"Find and replace\": \"Trouver et remplacer\",\n\"Could not find the specified string.\": \"Impossible de trouver la cha\\u00eene sp\\u00e9cifi\\u00e9e.\",\n\"Match case\": \"Respecter la casse\",\n\"Whole words\": \"Mots entiers\",\n\"Spellcheck\": \"V\\u00e9rification orthographique\",\n\"Ignore\": \"Ignorer\",\n\"Ignore all\": \"Tout ignorer\",\n\"Finish\": \"Finie\",\n\"Add to Dictionary\": \"Ajouter au dictionnaire\",\n\"Insert table\": \"Ins\\u00e9rer un tableau\",\n\"Table properties\": \"Propri\\u00e9t\\u00e9s du tableau\",\n\"Delete table\": \"Supprimer le tableau\",\n\"Cell\": \"Cellule\",\n\"Row\": \"Ligne\",\n\"Column\": \"Colonne\",\n\"Cell properties\": \"Propri\\u00e9t\\u00e9s de la cellule\",\n\"Merge cells\": \"Fusionner les cellules\",\n\"Split cell\": \"Diviser la cellule\",\n\"Insert row before\": \"Ins\\u00e9rer une ligne avant\",\n\"Insert row after\": \"Ins\\u00e9rer une ligne apr\\u00e8s\",\n\"Delete row\": \"Effacer la ligne\",\n\"Row properties\": \"Propri\\u00e9t\\u00e9s de la ligne\",\n\"Cut row\": \"Couper la ligne\",\n\"Copy row\": \"Copier la ligne\",\n\"Paste row before\": \"Coller la ligne avant\",\n\"Paste row after\": \"Coller la ligne apr\\u00e8s\",\n\"Insert column before\": \"Ins\\u00e9rer une colonne avant\",\n\"Insert column after\": \"Ins\\u00e9rer une colonne apr\\u00e8s\",\n\"Delete column\": \"Effacer la colonne\",\n\"Cols\": \"Colonnes\",\n\"Rows\": \"Lignes\",\n\"Width\": \"Largeur\",\n\"Height\": \"Hauteur\",\n\"Cell spacing\": \"Espacement inter-cellulles\",\n\"Cell padding\": \"Espacement interne cellule\",\n\"Caption\": \"Titre\",\n\"Left\": \"Gauche\",\n\"Center\": \"Centr\\u00e9\",\n\"Right\": \"Droite\",\n\"Cell type\": \"Type de cellule\",\n\"Scope\": \"Etendue\",\n\"Alignment\": \"Alignement\",\n\"H Align\": \"Alignement H\",\n\"V Align\": \"Alignement V\",\n\"Top\": \"Haut\",\n\"Middle\": \"Milieu\",\n\"Bottom\": \"Bas\",\n\"Header cell\": \"Cellule d'en-t\\u00eate\",\n\"Row group\": \"Groupe de lignes\",\n\"Column group\": \"Groupe de colonnes\",\n\"Row type\": \"Type de ligne\",\n\"Header\": \"En-t\\u00eate\",\n\"Body\": \"Corps\",\n\"Footer\": \"Pied\",\n\"Border color\": \"Couleur de la bordure\",\n\"Insert template\": \"Ajouter un th\\u00e8me\",\n\"Templates\": \"Th\\u00e8mes\",\n\"Template\": \"Mod\\u00e8le\",\n\"Text color\": \"Couleur du texte\",\n\"Background color\": \"Couleur d'arri\\u00e8re-plan\",\n\"Custom...\": \"Personnalis\\u00e9...\",\n\"Custom color\": \"Couleur personnalis\\u00e9e\",\n\"No color\": \"Aucune couleur\",\n\"Table of Contents\": \"Table des mati\\u00e8res\",\n\"Show blocks\": \"Afficher les blocs\",\n\"Show invisible characters\": \"Afficher les caract\\u00e8res invisibles\",\n\"Words: {0}\": \"Mots : {0}\",\n\"{0} words\": \"{0} mots\",\n\"File\": \"Fichier\",\n\"Edit\": \"Editer\",\n\"Insert\": \"Ins\\u00e9rer\",\n\"View\": \"Voir\",\n\"Format\": \"Format\",\n\"Table\": \"Tableau\",\n\"Tools\": \"Outils\",\n\"Powered by {0}\": \"Propuls\\u00e9 par {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/he.js",
    "content": "tinymce.addI18n('he_IL',{\n\"Redo\": \"\\u05d1\\u05e6\\u05e2 \\u05e9\\u05d5\\u05d1\",\n\"Undo\": \"\\u05d1\\u05d8\\u05dc \\u05e4\\u05e2\\u05d5\\u05dc\\u05d4\",\n\"Cut\": \"\\u05d2\\u05d6\\u05d5\\u05e8\",\n\"Copy\": \"\\u05d4\\u05e2\\u05ea\\u05e7\",\n\"Paste\": \"\\u05d4\\u05d3\\u05d1\\u05e7\",\n\"Select all\": \"\\u05d1\\u05d7\\u05e8 \\u05d4\\u05db\\u05dc\",\n\"New document\": \"\\u05de\\u05e1\\u05de\\u05da \\u05d7\\u05d3\\u05e9\",\n\"Ok\": \"\\u05d0\\u05d9\\u05e9\\u05d5\\u05e8\",\n\"Cancel\": \"\\u05d1\\u05d8\\u05dc\",\n\"Visual aids\": \"\\u05e2\\u05d6\\u05e8\\u05d9\\u05dd \\u05d7\\u05d6\\u05d5\\u05ea\\u05d9\\u05d9\\u05dd\",\n\"Bold\": \"\\u05de\\u05d5\\u05d3\\u05d2\\u05e9\",\n\"Italic\": \"\\u05e0\\u05d8\\u05d5\\u05d9\",\n\"Underline\": \"\\u05e7\\u05d5 \\u05ea\\u05d7\\u05ea\\u05d9\",\n\"Strikethrough\": \"\\u05e7\\u05d5 \\u05d7\\u05d5\\u05e6\\u05d4\",\n\"Superscript\": \"\\u05db\\u05ea\\u05d1 \\u05e2\\u05d9\\u05dc\\u05d9\",\n\"Subscript\": \"\\u05db\\u05ea\\u05d1 \\u05ea\\u05d7\\u05ea\\u05d9\",\n\"Clear formatting\": \"\\u05e0\\u05e7\\u05d4 \\u05e2\\u05d9\\u05e6\\u05d5\\u05d1\",\n\"Align left\": \"\\u05d9\\u05d9\\u05e9\\u05e8 \\u05dc\\u05e9\\u05de\\u05d0\\u05dc\",\n\"Align center\": \"\\u05de\\u05e8\\u05db\\u05d6\",\n\"Align right\": \"\\u05d9\\u05d9\\u05e9\\u05e8 \\u05dc\\u05d9\\u05de\\u05d9\\u05df\",\n\"Justify\": \"\\u05de\\u05ea\\u05d7 \\u05dc\\u05e6\\u05d3\\u05d3\\u05d9\\u05dd\",\n\"Bullet list\": \"\\u05e8\\u05e9\\u05d9\\u05de\\u05ea \\u05ea\\u05d1\\u05dc\\u05d9\\u05d8\\u05d9\\u05dd\",\n\"Numbered list\": \"\\u05e8\\u05e9\\u05d9\\u05de\\u05d4 \\u05de\\u05de\\u05d5\\u05e1\\u05e4\\u05e8\\u05ea\",\n\"Decrease indent\": \"\\u05d4\\u05e7\\u05d8\\u05df \\u05d4\\u05d6\\u05d7\\u05d4\",\n\"Increase indent\": \"\\u05d4\\u05d2\\u05d3\\u05dc \\u05d4\\u05d6\\u05d7\\u05d4\",\n\"Close\": \"\\u05e1\\u05d2\\u05d5\\u05e8\",\n\"Formats\": \"\\u05e2\\u05d9\\u05e6\\u05d5\\u05d1\\u05d9\\u05dd\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"\\u05d4\\u05d3\\u05e4\\u05d3\\u05e4\\u05df \\u05e9\\u05dc\\u05da \\u05d0\\u05d9\\u05e0\\u05d5 \\u05de\\u05d0\\u05e4\\u05e9\\u05e8 \\u05d2\\u05d9\\u05e9\\u05d4 \\u05d9\\u05e9\\u05d9\\u05e8\\u05d4 \\u05dc\\u05dc\\u05d5\\u05d7. \\u05d0\\u05e0\\u05d0 \\u05d4\\u05e9\\u05ea\\u05de\\u05e9 \\u05d1\\u05e7\\u05d9\\u05e6\\u05d5\\u05e8\\u05d9 \\u05d4\\u05de\\u05e7\\u05dc\\u05d3\\u05ea Ctrl+X\\/C\\/V \\u05d1\\u05de\\u05e7\\u05d5\\u05dd.\",\n\"Headers\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05d5\\u05ea\",\n\"Header 1\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea 1\",\n\"Header 2\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea 2\",\n\"Header 3\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea 3\",\n\"Header 4\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea 4\",\n\"Header 5\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea 5\",\n\"Header 6\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea 6\",\n\"Headings\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05d5\\u05ea\",\n\"Heading 1\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05d5\\u05ea 1\",\n\"Heading 2\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05d5\\u05ea 2\",\n\"Heading 3\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05d5\\u05ea 3\",\n\"Heading 4\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05d5\\u05ea 4\",\n\"Heading 5\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05d5\\u05ea 5\",\n\"Heading 6\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05d5\\u05ea 6\",\n\"Preformatted\": \"\\u05e2\\u05e6\\u05d1 \\u05de\\u05d7\\u05d3\\u05e9\",\n\"Div\": \"\\u05de\\u05e7\\u05d8\\u05e2 \\u05e7\\u05d5\\u05d3 Div\",\n\"Pre\": \"\\u05e7\\u05d8\\u05e2 \\u05de\\u05e7\\u05d3\\u05d9\\u05dd Pre\",\n\"Code\": \"\\u05e7\\u05d5\\u05d3\",\n\"Paragraph\": \"\\u05e4\\u05d9\\u05e1\\u05e7\\u05d4\",\n\"Blockquote\": \"\\u05de\\u05e7\\u05d8\\u05e2 \\u05e6\\u05d9\\u05d8\\u05d5\\u05d8\",\n\"Inline\": \"\\u05d1\\u05d2\\u05d5\\u05e3 \\u05d4\\u05d8\\u05e7\\u05e1\\u05d8\",\n\"Blocks\": \"\\u05de\\u05d1\\u05e0\\u05d9\\u05dd\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"\\u05d4\\u05d3\\u05d1\\u05e7\\u05d4 \\u05d1\\u05de\\u05e6\\u05d1 \\u05d8\\u05e7\\u05e1\\u05d8 \\u05e8\\u05d2\\u05d9\\u05dc. \\u05ea\\u05db\\u05e0\\u05d9\\u05dd \\u05d9\\u05d5\\u05d3\\u05d1\\u05e7\\u05d5 \\u05de\\u05e2\\u05ea\\u05d4 \\u05db\\u05d8\\u05e7\\u05e1\\u05d8 \\u05e8\\u05d2\\u05d9\\u05dc \\u05e2\\u05d3 \\u05e9\\u05ea\\u05db\\u05d1\\u05d4 \\u05d0\\u05e4\\u05e9\\u05e8\\u05d5\\u05ea \\u05d6\\u05d5.\",\n\"Font Family\": \"\\u05e1\\u05d5\\u05d2 \\u05d2\\u05d5\\u05e4\\u05df\",\n\"Font Sizes\": \"\\u05d2\\u05d5\\u05d3\\u05dc \\u05d2\\u05d5\\u05e4\\u05df\",\n\"Class\": \"\\u05de\\u05d7\\u05dc\\u05e7\\u05d4\",\n\"Browse for an image\": \"\\u05d1\\u05d7\\u05e8 \\u05ea\\u05de\\u05d5\\u05e0\\u05d4 \\u05dc\\u05d4\\u05e2\\u05dc\\u05d5\\u05ea\",\n\"OR\": \"\\u05d0\\u05d5\",\n\"Drop an image here\": \"\\u05e9\\u05d7\\u05e8\\u05e8 \\u05ea\\u05de\\u05d5\\u05e0\\u05d4 \\u05db\\u05d0\\u05df\",\n\"Upload\": \"\\u05d4\\u05e2\\u05dc\\u05d4\",\n\"Block\": \"\\u05d1\\u05dc\\u05d5\\u05e7\",\n\"Align\": \"\\u05d9\\u05d9\\u05e9\\u05e8\",\n\"Default\": \"\\u05d1\\u05e8\\u05d9\\u05e8\\u05ea \\u05de\\u05d7\\u05d3\\u05dc\",\n\"Circle\": \"\\u05e2\\u05d9\\u05d2\\u05d5\\u05dc\",\n\"Disc\": \"\\u05d7\\u05d9\\u05e9\\u05d5\\u05e7\",\n\"Square\": \"\\u05e8\\u05d9\\u05d1\\u05d5\\u05e2\",\n\"Lower Alpha\": \"\\u05d0\\u05d5\\u05ea\\u05d9\\u05d5\\u05ea \\u05d0\\u05e0\\u05d2\\u05dc\\u05d9\\u05d5\\u05ea \\u05e7\\u05d8\\u05e0\\u05d5\\u05ea\",\n\"Lower Greek\": \"\\u05d0\\u05d5\\u05ea\\u05d9\\u05d5\\u05ea \\u05d9\\u05d5\\u05d5\\u05e0\\u05d9\\u05d5\\u05ea \\u05e7\\u05d8\\u05e0\\u05d5\\u05ea\",\n\"Lower Roman\": \"\\u05e1\\u05e4\\u05e8\\u05d5\\u05ea \\u05e8\\u05d5\\u05de\\u05d9\\u05d5\\u05ea \\u05e7\\u05d8\\u05e0\\u05d5\\u05ea\",\n\"Upper Alpha\": \"\\u05d0\\u05d5\\u05ea\\u05d9\\u05d5\\u05ea \\u05d0\\u05e0\\u05d2\\u05dc\\u05d9\\u05d5\\u05ea \\u05d2\\u05d3\\u05d5\\u05dc\\u05d5\\u05ea\",\n\"Upper Roman\": \"\\u05e1\\u05e4\\u05e8\\u05d5\\u05ea \\u05e8\\u05d5\\u05de\\u05d9\\u05d5\\u05ea \\u05d2\\u05d3\\u05d5\\u05dc\\u05d5\\u05ea\",\n\"Anchor\": \"\\u05de\\u05e7\\u05d5\\u05dd \\u05e2\\u05d9\\u05d2\\u05d5\\u05df\",\n\"Name\": \"\\u05e9\\u05dd\",\n\"Id\": \"\\u05de\\u05d6\\u05d4\\u05d4\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"\\u05d4\\u05de\\u05d6\\u05d4\\u05d4 \\u05d7\\u05d9\\u05d9\\u05d1 \\u05dc\\u05d4\\u05ea\\u05d7\\u05d9\\u05dc \\u05d1\\u05d0\\u05d5\\u05ea \\u05d5\\u05dc\\u05d0\\u05d7\\u05e8\\u05d9\\u05d4 \\u05e8\\u05e7 \\u05d0\\u05d5\\u05ea\\u05d9\\u05d5\\u05ea, \\u05de\\u05e1\\u05e4\\u05e8\\u05d9\\u05dd, \\u05de\\u05e7\\u05e4\\u05d9\\u05dd, \\u05e0\\u05e7\\u05d5\\u05d3\\u05d5\\u05ea, \\u05e0\\u05e7\\u05d5\\u05d3\\u05ea\\u05d9\\u05d9\\u05dd \\u05d0\\u05d5 \\u05e7\\u05d5\\u05d5\\u05d9\\u05dd \\u05ea\\u05d7\\u05ea\\u05d9\\u05d9\\u05dd.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"\\u05d4\\u05e9\\u05d9\\u05e0\\u05d5\\u05d9\\u05d9\\u05dd \\u05dc\\u05d0 \\u05e0\\u05e9\\u05de\\u05e8\\u05d5. \\u05d1\\u05d8\\u05d5\\u05d7 \\u05e9\\u05d1\\u05e8\\u05e6\\u05d5\\u05e0\\u05da \\u05dc\\u05e6\\u05d0\\u05ea \\u05de\\u05d4\\u05d3\\u05e3?\",\n\"Restore last draft\": \"\\u05e9\\u05d7\\u05d6\\u05e8 \\u05d8\\u05d9\\u05d5\\u05d8\\u05d4 \\u05d0\\u05d7\\u05e8\\u05d5\\u05e0\\u05d4\",\n\"Special character\": \"\\u05ea\\u05d5\\u05d5\\u05d9\\u05dd \\u05de\\u05d9\\u05d5\\u05d7\\u05d3\\u05d9\\u05dd\",\n\"Source code\": \"\\u05e7\\u05d5\\u05d3 \\u05de\\u05e7\\u05d5\\u05e8\",\n\"Insert\\/Edit code sample\": \"\\u05d4\\u05db\\u05e0\\u05e1\\/\\u05e2\\u05e8\\u05d5\\u05da \\u05d3\\u05d5\\u05d2\\u05de\\u05ea \\u05e7\\u05d5\\u05d3\",\n\"Language\": \"\\u05e9\\u05e4\\u05d4\",\n\"Code sample\": \"\\u05d3\\u05d5\\u05d2\\u05de\\u05ea \\u05e7\\u05d5\\u05d3\",\n\"Color\": \"\\u05e6\\u05d1\\u05e2\",\n\"R\": \"\\u05d0'\",\n\"G\": \"\\u05d9'\",\n\"B\": \"\\u05db'\",\n\"Left to right\": \"\\u05de\\u05e9\\u05de\\u05d0\\u05dc \\u05dc\\u05d9\\u05de\\u05d9\\u05df\",\n\"Right to left\": \"\\u05de\\u05d9\\u05de\\u05d9\\u05df \\u05dc\\u05e9\\u05de\\u05d0\\u05dc\",\n\"Emoticons\": \"\\u05de\\u05d7\\u05d5\\u05d5\\u05ea\",\n\"Document properties\": \"\\u05de\\u05d0\\u05e4\\u05d9\\u05d9\\u05e0\\u05d9 \\u05de\\u05e1\\u05de\\u05da\",\n\"Title\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n\"Keywords\": \"\\u05de\\u05d9\\u05dc\\u05d5\\u05ea \\u05de\\u05e4\\u05ea\\u05d7\",\n\"Description\": \"\\u05ea\\u05d9\\u05d0\\u05d5\\u05e8\",\n\"Robots\": \"\\u05e8\\u05d5\\u05d1\\u05d5\\u05d8\\u05d9\\u05dd\",\n\"Author\": \"\\u05de\\u05d7\\u05d1\\u05e8\",\n\"Encoding\": \"\\u05e7\\u05d9\\u05d3\\u05d5\\u05d3\",\n\"Fullscreen\": \"\\u05de\\u05e1\\u05da \\u05de\\u05dc\\u05d0\",\n\"Action\": \"\\u05e4\\u05e2\\u05d5\\u05dc\\u05d4\",\n\"Shortcut\": \"\\u05e7\\u05d9\\u05e6\\u05d5\\u05e8\",\n\"Help\": \"\\u05e2\\u05d6\\u05e8\\u05d4\",\n\"Address\": \"\\u05db\\u05ea\\u05d5\\u05d1\\u05ea\",\n\"Focus to menubar\": \"\\u05d4\\u05e2\\u05d1\\u05e8 \\u05de\\u05d9\\u05e7\\u05d5\\u05d3 \\u05dc\\u05e1\\u05e8\\u05d2\\u05dc \\u05d4\\u05ea\\u05e4\\u05e8\\u05d8\\u05d9\\u05dd\",\n\"Focus to toolbar\": \"\\u05d4\\u05e2\\u05d1\\u05e8 \\u05de\\u05d9\\u05e7\\u05d5\\u05d3 \\u05dc\\u05e1\\u05e8\\u05d2\\u05dc \\u05d4\\u05db\\u05dc\\u05d9\\u05dd\",\n\"Focus to element path\": \"\\u05e2\\u05d1\\u05e8 \\u05de\\u05d9\\u05e7\\u05d5\\u05d3 \\u05dc\\u05db\\u05ea\\u05d5\\u05d1\\u05ea \\u05d4\\u05e4\\u05e8\\u05d9\\u05d8\",\n\"Focus to contextual toolbar\": \"\\u05d4\\u05e2\\u05d1\\u05e8 \\u05de\\u05d9\\u05e7\\u05d5\\u05d3 \\u05dc\\u05e1\\u05e8\\u05d2\\u05dc \\u05ea\\u05d5\\u05db\\u05df\",\n\"Insert link (if link plugin activated)\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8 (\\u05d0\\u05dd \\u05ea\\u05d5\\u05e1\\u05e3 \\\"\\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\\u05d9\\u05dd\\\" \\u05e4\\u05e2\\u05d9\\u05dc)\",\n\"Save (if save plugin activated)\": \"\\u05e9\\u05de\\u05d5\\u05e8 (\\u05d0\\u05dd \\u05ea\\u05d5\\u05e1\\u05e3 \\\"\\u05e9\\u05de\\u05d9\\u05e8\\u05d4\\\" \\u05e4\\u05e2\\u05d9\\u05dc)\",\n\"Find (if searchreplace plugin activated)\": \"\\u05d7\\u05e4\\u05e9 (\\u05d0\\u05dd \\u05ea\\u05d5\\u05e1\\u05e3 \\\"\\u05d7\\u05e4\\u05e9 \\u05d5\\u05d4\\u05d7\\u05dc\\u05e3\\\" \\u05e4\\u05e2\\u05d9\\u05dc)\",\n\"Plugins installed ({0}):\": \"\\u05ea\\u05d5\\u05e1\\u05e4\\u05d9\\u05dd \\u05de\\u05d5\\u05ea\\u05e7\\u05e0\\u05d9\\u05dd ({0}):\",\n\"Premium plugins:\": \"\\u05ea\\u05d5\\u05e1\\u05e4\\u05d9\\u05dd \\u05d1\\u05ea\\u05e9\\u05dc\\u05d5\\u05dd:\",\n\"Learn more...\": \"\\u05dc\\u05de\\u05d3 \\u05e2\\u05d5\\u05d3...\",\n\"You are using {0}\": \"\\u05d0\\u05ea\\\\\\u05d4 \\u05de\\u05e9\\u05ea\\u05de\\u05e9\\\\\\u05ea {0}\",\n\"Plugins\": \"\\u05ea\\u05d5\\u05e1\\u05e4\\u05d9\\u05dd\",\n\"Handy Shortcuts\": \"\\u05e7\\u05d9\\u05e6\\u05d5\\u05e8\\u05d9\\u05dd \\u05e9\\u05d9\\u05de\\u05d5\\u05e9\\u05d9\\u05d9\\u05dd\",\n\"Horizontal line\": \"\\u05e7\\u05d5 \\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\",\n\"Insert\\/edit image\": \"\\u05d4\\u05db\\u05e0\\u05e1\\/\\u05e2\\u05e8\\u05d5\\u05da \\u05ea\\u05de\\u05d5\\u05e0\\u05d4\",\n\"Image description\": \"\\u05ea\\u05d9\\u05d0\\u05d5\\u05e8 \\u05d4\\u05ea\\u05de\\u05d5\\u05e0\\u05d4\",\n\"Source\": \"\\u05de\\u05e7\\u05d5\\u05e8\",\n\"Dimensions\": \"\\u05de\\u05d9\\u05de\\u05d3\\u05d9\\u05dd\",\n\"Constrain proportions\": \"\\u05d4\\u05d2\\u05d1\\u05dc\\u05ea \\u05e4\\u05e8\\u05d5\\u05e4\\u05d5\\u05e8\\u05e6\\u05d9\\u05d5\\u05ea\",\n\"General\": \"\\u05db\\u05dc\\u05dc\\u05d9\",\n\"Advanced\": \"\\u05de\\u05ea\\u05e7\\u05d3\\u05dd\",\n\"Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df\",\n\"Vertical space\": \"\\u05de\\u05e8\\u05d5\\u05d5\\u05d7 \\u05d0\\u05e0\\u05db\\u05d9\",\n\"Horizontal space\": \"\\u05de\\u05e8\\u05d5\\u05d5\\u05d7 \\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\",\n\"Border\": \"\\u05de\\u05e1\\u05d2\\u05e8\\u05ea\",\n\"Insert image\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05ea\\u05de\\u05d5\\u05e0\\u05d4\",\n\"Image\": \"\\u05ea\\u05de\\u05d5\\u05e0\\u05d4\",\n\"Image list\": \"\\u05e8\\u05e9\\u05d9\\u05de\\u05ea \\u05ea\\u05de\\u05d5\\u05e0\\u05d5\\u05ea\",\n\"Rotate counterclockwise\": \"\\u05e1\\u05d5\\u05d1\\u05d1 \\u05d1\\u05db\\u05d9\\u05d5\\u05d5\\u05df \\u05d4\\u05e4\\u05d5\\u05da \\u05dc\\u05e9\\u05e2\\u05d5\\u05df\",\n\"Rotate clockwise\": \"\\u05e1\\u05d5\\u05d1\\u05d1 \\u05d1\\u05db\\u05d9\\u05d5\\u05d5\\u05df \\u05d4\\u05e9\\u05e2\\u05d5\\u05df\",\n\"Flip vertically\": \"\\u05d4\\u05e4\\u05d5\\u05da \\u05d0\\u05e0\\u05db\\u05d9\\u05ea\",\n\"Flip horizontally\": \"\\u05d4\\u05e4\\u05d5\\u05da \\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\\u05ea\",\n\"Edit image\": \"\\u05e2\\u05e8\\u05d5\\u05da \\u05ea\\u05de\\u05d5\\u05e0\\u05d4\",\n\"Image options\": \"\\u05d0\\u05e4\\u05e9\\u05e8\\u05d5\\u05d9\\u05d5\\u05ea \\u05ea\\u05de\\u05d5\\u05e0\\u05d4\",\n\"Zoom in\": \"\\u05d4\\u05d2\\u05d3\\u05dc \\u05ea\\u05e6\\u05d5\\u05d2\\u05d4\",\n\"Zoom out\": \"\\u05d4\\u05e7\\u05d8\\u05df \\u05ea\\u05e6\\u05d5\\u05d2\\u05d4\",\n\"Crop\": \"\\u05e7\\u05e6\\u05e5\",\n\"Resize\": \"\\u05e9\\u05e0\\u05d4 \\u05d2\\u05d5\\u05d3\\u05dc\",\n\"Orientation\": \"\\u05db\\u05d9\\u05d5\\u05d5\\u05df \\u05dc\\u05d0\\u05d5\\u05e8\\u05da \\/ \\u05dc\\u05e8\\u05d5\\u05d7\\u05d1\",\n\"Brightness\": \"\\u05d1\\u05d4\\u05d9\\u05e8\\u05d5\\u05ea\",\n\"Sharpen\": \"\\u05d7\\u05d3\\u05d3\",\n\"Contrast\": \"\\u05e0\\u05d9\\u05d2\\u05d5\\u05d3\\u05d9\\u05d5\\u05ea\",\n\"Color levels\": \"\\u05e8\\u05de\\u05d5\\u05ea \\u05e6\\u05d1\\u05e2\\u05d9\\u05dd\",\n\"Gamma\": \"\\u05d2\\u05d0\\u05de\\u05d4\",\n\"Invert\": \"\\u05d4\\u05d9\\u05e4\\u05d5\\u05da \\u05e6\\u05d1\\u05e2\\u05d9\\u05dd\",\n\"Apply\": \"\\u05d9\\u05d9\\u05e9\\u05dd\",\n\"Back\": \"\\u05d7\\u05d6\\u05d5\\u05e8\",\n\"Insert date\\/time\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05ea\\u05d0\\u05e8\\u05d9\\u05da\\/\\u05e9\\u05e2\\u05d4\",\n\"Date\\/time\": \"\\u05ea\\u05d0\\u05e8\\u05d9\\u05da\\/\\u05e9\\u05e2\\u05d4\",\n\"Insert link\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n\"Insert\\/edit link\": \"\\u05d4\\u05db\\u05e0\\u05e1\\/\\u05e2\\u05e8\\u05d5\\u05da \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n\"Text to display\": \"\\u05d8\\u05e7\\u05e1\\u05d8 \\u05dc\\u05d4\\u05e6\\u05d2\\u05d4\",\n\"Url\": \"\\u05db\\u05ea\\u05d5\\u05d1\\u05ea \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n\"Target\": \"\\u05de\\u05d8\\u05e8\\u05d4\",\n\"None\": \"\\u05dc\\u05dc\\u05d0\",\n\"New window\": \"\\u05d7\\u05dc\\u05d5\\u05df \\u05d7\\u05d3\\u05e9\",\n\"Remove link\": \"\\u05de\\u05d7\\u05e7 \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n\"Anchors\": \"\\u05e2\\u05d5\\u05d2\\u05e0\\u05d9\\u05dd\",\n\"Link\": \"\\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n\"Paste or type a link\": \"\\u05d4\\u05d3\\u05d1\\u05e7 \\u05d0\\u05d5 \\u05d4\\u05e7\\u05dc\\u05d3 \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"\\u05e0\\u05e8\\u05d0\\u05d4 \\u05e9\\u05d4\\u05db\\u05ea\\u05d5\\u05d1\\u05ea \\u05e9\\u05d4\\u05db\\u05e0\\u05e1\\u05ea \\u05d4\\u05d9\\u05d0 \\u05db\\u05ea\\u05d5\\u05d1\\u05ea \\u05d0\\u05d9\\u05de\\u05d9\\u05d9\\u05dc. \\u05d4\\u05d0\\u05dd \\u05d1\\u05e8\\u05e6\\u05d5\\u05e0\\u05da \\u05dc\\u05d4\\u05d5\\u05e1\\u05d9\\u05e3 \\u05d0\\u05ea \\u05d4\\u05e7\\u05d9\\u05d3\\u05d5\\u05de\\u05ea :mailto?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"\\u05e0\\u05e8\\u05d0\\u05d4 \\u05e9\\u05d4\\u05db\\u05ea\\u05d5\\u05d1\\u05ea \\u05e9\\u05d4\\u05db\\u05e0\\u05e1\\u05ea \\u05d4\\u05d9\\u05d0 \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8 \\u05d7\\u05d9\\u05e6\\u05d5\\u05e0\\u05d9 \\u05d4\\u05d0\\u05dd \\u05d1\\u05e8\\u05e6\\u05d5\\u05e0\\u05da \\u05dc\\u05d4\\u05d5\\u05e1\\u05d9\\u05e3 \\u05e7\\u05d9\\u05d3\\u05d5\\u05de\\u05ea http:\\/\\/?\",\n\"Link list\": \"\\u05e8\\u05e9\\u05d9\\u05de\\u05ea \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\\u05d9\\u05dd\",\n\"Insert video\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05e1\\u05e8\\u05d8\\u05d5\\u05df\",\n\"Insert\\/edit video\": \"\\u05d4\\u05db\\u05e0\\u05e1\\/\\u05e2\\u05e8\\u05d5\\u05da \\u05e1\\u05e8\\u05d8\\u05d5\\u05df\",\n\"Insert\\/edit media\": \"\\u05d4\\u05db\\u05e0\\u05e1\\/\\u05e2\\u05e8\\u05d5\\u05da \\u05de\\u05d3\\u05d9\\u05d4\",\n\"Alternative source\": \"\\u05de\\u05e7\\u05d5\\u05e8 \\u05de\\u05e9\\u05e0\\u05d9\",\n\"Poster\": \"\\u05e4\\u05d5\\u05e1\\u05d8\\u05e8\",\n\"Paste your embed code below:\": \"\\u05d4\\u05d3\\u05d1\\u05e7 \\u05e7\\u05d5\\u05d3 \\u05d4\\u05d8\\u05de\\u05e2\\u05d4 \\u05de\\u05ea\\u05d7\\u05ea:\",\n\"Embed\": \"\\u05d4\\u05d8\\u05de\\u05e2\",\n\"Media\": \"\\u05de\\u05d3\\u05d9\\u05d4\",\n\"Nonbreaking space\": \"\\u05e8\\u05d5\\u05d5\\u05d7 (\\u05dc\\u05dc\\u05d0 \\u05e9\\u05d1\\u05d9\\u05e8\\u05ea \\u05e9\\u05d5\\u05e8\\u05d4)\",\n\"Page break\": \"\\u05d3\\u05e3 \\u05d7\\u05d3\\u05e9\",\n\"Paste as text\": \"\\u05d4\\u05d3\\u05d1\\u05e7 \\u05db\\u05d8\\u05e7\\u05e1\\u05d8\",\n\"Preview\": \"\\u05ea\\u05e6\\u05d5\\u05d2\\u05d4 \\u05de\\u05e7\\u05d3\\u05d9\\u05de\\u05d4\",\n\"Print\": \"\\u05d4\\u05d3\\u05e4\\u05e1\",\n\"Save\": \"\\u05e9\\u05de\\u05d9\\u05e8\\u05d4\",\n\"Find\": \"\\u05d7\\u05e4\\u05e9\",\n\"Replace with\": \"\\u05d4\\u05d7\\u05dc\\u05e3 \\u05d1\",\n\"Replace\": \"\\u05d4\\u05d7\\u05dc\\u05e3\",\n\"Replace all\": \"\\u05d4\\u05d7\\u05dc\\u05e3 \\u05d4\\u05db\\u05dc\",\n\"Prev\": \"\\u05e7\\u05d5\\u05d3\\u05dd\",\n\"Next\": \"\\u05d4\\u05d1\\u05d0\",\n\"Find and replace\": \"\\u05d7\\u05e4\\u05e9 \\u05d5\\u05d4\\u05d7\\u05dc\\u05e3\",\n\"Could not find the specified string.\": \"\\u05de\\u05d7\\u05e8\\u05d5\\u05d6\\u05ea \\u05dc\\u05d0 \\u05e0\\u05de\\u05e6\\u05d0\\u05d4\",\n\"Match case\": \"\\u05d4\\u05d1\\u05d7\\u05df \\u05d1\\u05d9\\u05df \\u05d0\\u05d5\\u05ea\\u05d9\\u05d5\\u05ea \\u05e7\\u05d8\\u05e0\\u05d5\\u05ea \\u05dc\\u05d2\\u05d3\\u05d5\\u05dc\\u05d5\\u05ea\",\n\"Whole words\": \"\\u05de\\u05d9\\u05dc\\u05d4 \\u05e9\\u05dc\\u05de\\u05d4\",\n\"Spellcheck\": \"\\u05d1\\u05d5\\u05d3\\u05e7 \\u05d0\\u05d9\\u05d5\\u05ea\",\n\"Ignore\": \"\\u05d4\\u05ea\\u05e2\\u05dc\\u05dd\",\n\"Ignore all\": \"\\u05d4\\u05ea\\u05e2\\u05dc\\u05dd \\u05de\\u05d4\\u05db\\u05dc\",\n\"Finish\": \"\\u05e1\\u05d9\\u05d9\\u05dd\",\n\"Add to Dictionary\": \"\\u05d4\\u05d5\\u05e1\\u05e3 \\u05dc\\u05de\\u05d9\\u05dc\\u05d5\\u05df\",\n\"Insert table\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05d8\\u05d1\\u05dc\\u05d4\",\n\"Table properties\": \"\\u05de\\u05d0\\u05e4\\u05d9\\u05d9\\u05e0\\u05d9 \\u05d8\\u05d1\\u05dc\\u05d4\",\n\"Delete table\": \"\\u05de\\u05d7\\u05e7 \\u05d8\\u05d1\\u05dc\\u05d4\",\n\"Cell\": \"\\u05ea\\u05d0\",\n\"Row\": \"\\u05e9\\u05d5\\u05e8\\u05d4\",\n\"Column\": \"\\u05e2\\u05de\\u05d5\\u05d3\\u05d4\",\n\"Cell properties\": \"\\u05de\\u05d0\\u05e4\\u05d9\\u05d9\\u05e0\\u05d9 \\u05ea\\u05d0\",\n\"Merge cells\": \"\\u05de\\u05d6\\u05d2 \\u05ea\\u05d0\\u05d9\\u05dd\",\n\"Split cell\": \"\\u05e4\\u05e6\\u05dc \\u05ea\\u05d0\",\n\"Insert row before\": \"\\u05d4\\u05d5\\u05e1\\u05e3 \\u05e9\\u05d5\\u05e8\\u05d4 \\u05dc\\u05e4\\u05e0\\u05d9\",\n\"Insert row after\": \"\\u05d4\\u05d5\\u05e1\\u05e3 \\u05e9\\u05d5\\u05e8\\u05d4 \\u05d0\\u05d7\\u05e8\\u05d9\",\n\"Delete row\": \"\\u05de\\u05d7\\u05e7 \\u05e9\\u05d5\\u05e8\\u05d4\",\n\"Row properties\": \"\\u05de\\u05d0\\u05e4\\u05d9\\u05d9\\u05e0\\u05d9 \\u05e9\\u05d5\\u05e8\\u05d4\",\n\"Cut row\": \"\\u05d2\\u05d6\\u05d5\\u05e8 \\u05e9\\u05d5\\u05e8\\u05d4\",\n\"Copy row\": \"\\u05d4\\u05e2\\u05ea\\u05e7 \\u05e9\\u05d5\\u05e8\\u05d4\",\n\"Paste row before\": \"\\u05d4\\u05d3\\u05d1\\u05e7 \\u05e9\\u05d5\\u05e8\\u05d4 \\u05dc\\u05e4\\u05e0\\u05d9\",\n\"Paste row after\": \"\\u05d4\\u05e2\\u05ea\\u05e7 \\u05e9\\u05d5\\u05e8\\u05d4 \\u05d0\\u05d7\\u05e8\\u05d9\",\n\"Insert column before\": \"\\u05d4\\u05e2\\u05ea\\u05e7 \\u05e2\\u05de\\u05d5\\u05d3\\u05d4 \\u05dc\\u05e4\\u05e0\\u05d9\",\n\"Insert column after\": \"\\u05d4\\u05e2\\u05ea\\u05e7 \\u05e2\\u05de\\u05d5\\u05d3\\u05d4 \\u05d0\\u05d7\\u05e8\\u05d9\",\n\"Delete column\": \"\\u05de\\u05d7\\u05e7 \\u05e2\\u05de\\u05d5\\u05d3\\u05d4\",\n\"Cols\": \"\\u05e2\\u05de\\u05d5\\u05d3\\u05d5\\u05ea\",\n\"Rows\": \"\\u05e9\\u05d5\\u05e8\\u05d5\\u05ea\",\n\"Width\": \"\\u05e8\\u05d5\\u05d7\\u05d1\",\n\"Height\": \"\\u05d2\\u05d5\\u05d1\\u05d4\",\n\"Cell spacing\": \"\\u05e9\\u05d5\\u05dc\\u05d9\\u05d9\\u05dd \\u05d7\\u05d9\\u05e6\\u05d5\\u05e0\\u05d9\\u05dd \\u05dc\\u05ea\\u05d0\",\n\"Cell padding\": \"\\u05e9\\u05d5\\u05dc\\u05d9\\u05d9\\u05dd \\u05e4\\u05e0\\u05d9\\u05de\\u05d9\\u05d9\\u05dd \\u05dc\\u05ea\\u05d0\",\n\"Caption\": \"\\u05db\\u05d9\\u05ea\\u05d5\\u05d1\",\n\"Left\": \"\\u05e9\\u05de\\u05d0\\u05dc\",\n\"Center\": \"\\u05de\\u05e8\\u05db\\u05d6\",\n\"Right\": \"\\u05d9\\u05de\\u05d9\\u05df\",\n\"Cell type\": \"\\u05e1\\u05d5\\u05d2 \\u05ea\\u05d0\",\n\"Scope\": \"\\u05d4\\u05d9\\u05e7\\u05e3\",\n\"Alignment\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8\",\n\"H Align\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\",\n\"V Align\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05d0\\u05e0\\u05db\\u05d9\",\n\"Top\": \"\\u05e2\\u05dc\\u05d9\\u05d5\\u05df\",\n\"Middle\": \"\\u05d0\\u05de\\u05e6\\u05e2\",\n\"Bottom\": \"\\u05ea\\u05d7\\u05ea\\u05d9\\u05ea\",\n\"Header cell\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea \\u05dc\\u05ea\\u05d0\",\n\"Row group\": \"\\u05e7\\u05d9\\u05d1\\u05d5\\u05e5 \\u05e9\\u05d5\\u05e8\\u05d5\\u05ea\",\n\"Column group\": \"\\u05e7\\u05d9\\u05d1\\u05d5\\u05e5 \\u05e2\\u05de\\u05d5\\u05d3\\u05d5\\u05ea\",\n\"Row type\": \"\\u05e1\\u05d5\\u05d2 \\u05e9\\u05d5\\u05e8\\u05d4\",\n\"Header\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n\"Body\": \"\\u05d2\\u05d5\\u05e3 \\u05d4\\u05d8\\u05d1\\u05dc\\u05d0\",\n\"Footer\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea \\u05ea\\u05d7\\u05ea\\u05d5\\u05e0\\u05d4\",\n\"Border color\": \"\\u05e6\\u05d1\\u05e2 \\u05d2\\u05d1\\u05d5\\u05dc\",\n\"Insert template\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05ea\\u05d1\\u05e0\\u05d9\\u05ea\",\n\"Templates\": \"\\u05ea\\u05d1\\u05e0\\u05d9\\u05d5\\u05ea\",\n\"Template\": \"\\u05ea\\u05d1\\u05e0\\u05d9\\u05ea\",\n\"Text color\": \"\\u05e6\\u05d1\\u05e2 \\u05d4\\u05db\\u05ea\\u05d1\",\n\"Background color\": \"\\u05e6\\u05d1\\u05e2 \\u05e8\\u05e7\\u05e2\",\n\"Custom...\": \"\\u05de\\u05d5\\u05ea\\u05d0\\u05dd \\u05d0\\u05d9\\u05e9\\u05d9\\u05ea...\",\n\"Custom color\": \"\\u05e6\\u05d1\\u05e2 \\u05de\\u05d5\\u05ea\\u05d0\\u05dd \\u05d0\\u05d9\\u05e9\\u05d9\\u05ea\",\n\"No color\": \"\\u05dc\\u05dc\\u05d0 \\u05e6\\u05d1\\u05e2\",\n\"Table of Contents\": \"\\u05ea\\u05d5\\u05db\\u05df \\u05e2\\u05e0\\u05d9\\u05d9\\u05e0\\u05d9\\u05dd\",\n\"Show blocks\": \"\\u05d4\\u05e6\\u05d2 \\u05ea\\u05d9\\u05d1\\u05d5\\u05ea\",\n\"Show invisible characters\": \"\\u05d4\\u05e6\\u05d2 \\u05ea\\u05d5\\u05d5\\u05d9\\u05dd \\u05dc\\u05d0 \\u05e0\\u05e8\\u05d0\\u05d9\\u05dd\",\n\"Words: {0}\": \"\\u05de\\u05d9\\u05dc\\u05d9\\u05dd: {0}\",\n\"{0} words\": \"{0} \\u05de\\u05d9\\u05dc\\u05d9\\u05dd\",\n\"File\": \"\\u05e7\\u05d5\\u05d1\\u05e5\",\n\"Edit\": \"\\u05e2\\u05e8\\u05d9\\u05db\\u05d4\",\n\"Insert\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05d4\",\n\"View\": \"\\u05ea\\u05e6\\u05d5\\u05d2\\u05d4\",\n\"Format\": \"\\u05e4\\u05d5\\u05e8\\u05de\\u05d8\",\n\"Table\": \"\\u05d8\\u05d1\\u05dc\\u05d4\",\n\"Tools\": \"\\u05db\\u05dc\\u05d9\\u05dd\",\n\"Powered by {0}\": \"\\u05de\\u05d5\\u05e4\\u05e2\\u05dc \\u05e2\\\"\\u05d9 {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"\\u05ea\\u05d9\\u05d1\\u05ea \\u05e2\\u05e8\\u05d9\\u05db\\u05d4 \\u05d7\\u05db\\u05de\\u05d4. \\u05dc\\u05d7\\u05e5 Alt-F9 \\u05dc\\u05ea\\u05e4\\u05e8\\u05d9\\u05d8. Alt-F10 \\u05dc\\u05ea\\u05e6\\u05d5\\u05d2\\u05ea \\u05db\\u05e4\\u05ea\\u05d5\\u05e8\\u05d9\\u05dd, Alt-0 \\u05dc\\u05e2\\u05d6\\u05e8\\u05d4\",\n\"_dir\": \"rtl\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/hr.js",
    "content": "tinymce.addI18n('hr',{\n\"Redo\": \"Vrati\",\n\"Undo\": \"Poni\\u0161ti\",\n\"Cut\": \"Izre\\u017ei\",\n\"Copy\": \"Kopiraj\",\n\"Paste\": \"Zalijepi\",\n\"Select all\": \"Ozna\\u010di sve\",\n\"New document\": \"Novi dokument\",\n\"Ok\": \"U redu\",\n\"Cancel\": \"Odustani\",\n\"Visual aids\": \"Vizualna pomo\\u0107\",\n\"Bold\": \"Podebljano\",\n\"Italic\": \"Kurziv\",\n\"Underline\": \"Crta ispod\",\n\"Strikethrough\": \"Crta kroz sredinu\",\n\"Superscript\": \"Eksponent\",\n\"Subscript\": \"Indeks\",\n\"Clear formatting\": \"Ukloni oblikovanje\",\n\"Align left\": \"Poravnaj lijevo\",\n\"Align center\": \"Poravnaj po sredini\",\n\"Align right\": \"Poravnaj desno\",\n\"Justify\": \"Obostrano poravnanje\",\n\"Bullet list\": \"Lista\",\n\"Numbered list\": \"Numerirana lista\",\n\"Decrease indent\": \"Smanji uvla\\u010denje\",\n\"Increase indent\": \"Pove\\u0107aj uvla\\u010denje\",\n\"Close\": \"Zatvori\",\n\"Formats\": \"Formati\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Va\\u0161 preglednik ne podr\\u017eava direktan pristup me\\u0111uspremniku. Molimo Vas da umjesto toga koristite tipkovni\\u010dke kratice Ctrl+X\\/C\\/V.\",\n\"Headers\": \"Zaglavlja\",\n\"Header 1\": \"Zaglavlje 1\",\n\"Header 2\": \"Zaglavlje 2\",\n\"Header 3\": \"Zaglavlje 3\",\n\"Header 4\": \"Zaglavlje 4\",\n\"Header 5\": \"Zaglavlje 5\",\n\"Header 6\": \"Zaglavlje 6\",\n\"Headings\": \"Naslovi\",\n\"Heading 1\": \"Naslov 1\",\n\"Heading 2\": \"Naslov 2\",\n\"Heading 3\": \"Naslov 3\",\n\"Heading 4\": \"Naslov 4\",\n\"Heading 5\": \"Naslov 5\",\n\"Heading 6\": \"Naslov 6\",\n\"Div\": \"DIV\",\n\"Pre\": \"PRE\",\n\"Code\": \"CODE oznaka\",\n\"Paragraph\": \"Paragraf\",\n\"Blockquote\": \"BLOCKQUOTE\",\n\"Inline\": \"Unutarnje\",\n\"Blocks\": \"Blokovi\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Akcija zalijepi od sada lijepi \\u010disti tekst. Sadr\\u017eaj \\u0107e biti zaljepljen kao \\u010disti tekst sve dok ne isklju\\u010dite ovu opciju.\",\n\"Font Family\": \"Obitelj fonta\",\n\"Font Sizes\": \"Veli\\u010dine fonta\",\n\"Class\": \"Class\",\n\"Browse for an image\": \"Browse for an image\",\n\"OR\": \"OR\",\n\"Drop an image here\": \"Drop an image here\",\n\"Upload\": \"Upload\",\n\"Default\": \"Zadano\",\n\"Circle\": \"Krug\",\n\"Disc\": \"To\\u010dka\",\n\"Square\": \"Kvadrat\",\n\"Lower Alpha\": \"Mala slova\",\n\"Lower Greek\": \"Mala gr\\u010dka slova\",\n\"Lower Roman\": \"Mala rimska slova\",\n\"Upper Alpha\": \"Velika slova\",\n\"Upper Roman\": \"Velika rimska slova\",\n\"Anchor\": \"Sidro\",\n\"Name\": \"Ime\",\n\"Id\": \"Id\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"Id treba po\\u010dinjati slovom, a nakon toga slijede samo slova, brojevi, crtice, to\\u010dke, dvoto\\u010dke i podvlake.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"Postoje ne pohranjene izmjene, jeste li sigurni da \\u017eelite oti\\u0107i?\",\n\"Restore last draft\": \"Vrati posljednju skicu\",\n\"Special character\": \"Poseban znak\",\n\"Source code\": \"Izvorni kod\",\n\"Insert\\/Edit code sample\": \"Umetni\\/Uredi primjer k\\u00f4da\",\n\"Language\": \"Jezik\",\n\"Color\": \"Boja\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"B\": \"B\",\n\"Left to right\": \"S lijeva na desno\",\n\"Right to left\": \"S desna na lijevo\",\n\"Emoticons\": \"Emotikoni\",\n\"Document properties\": \"Svojstva dokumenta\",\n\"Title\": \"Naslov\",\n\"Keywords\": \"Klju\\u010dne rije\\u010di\",\n\"Description\": \"Opis\",\n\"Robots\": \"Roboti pretra\\u017eiva\\u010da\",\n\"Author\": \"Autor\",\n\"Encoding\": \"Kodna stranica\",\n\"Fullscreen\": \"Cijeli ekran\",\n\"Action\": \"Action\",\n\"Shortcut\": \"Shortcut\",\n\"Help\": \"Help\",\n\"Address\": \"Address\",\n\"Focus to menubar\": \"Focus to menubar\",\n\"Focus to toolbar\": \"Focus to toolbar\",\n\"Focus to element path\": \"Focus to element path\",\n\"Focus to contextual toolbar\": \"Focus to contextual toolbar\",\n\"Insert link (if link plugin activated)\": \"Insert link (if link plugin activated)\",\n\"Save (if save plugin activated)\": \"Save (if save plugin activated)\",\n\"Find (if searchreplace plugin activated)\": \"Find (if searchreplace plugin activated)\",\n\"Plugins installed ({0}):\": \"Plugins installed ({0}):\",\n\"Premium plugins:\": \"Premium plugins:\",\n\"Learn more...\": \"Learn more...\",\n\"You are using {0}\": \"You are using {0}\",\n\"Horizontal line\": \"Horizontalna linija\",\n\"Insert\\/edit image\": \"Umetni\\/izmijeni sliku\",\n\"Image description\": \"Opis slike\",\n\"Source\": \"Izvor\",\n\"Dimensions\": \"Dimenzije\",\n\"Constrain proportions\": \"Zadr\\u017ei proporcije\",\n\"General\": \"Op\\u0107enito\",\n\"Advanced\": \"Napredno\",\n\"Style\": \"Stil\",\n\"Vertical space\": \"Okomit razmak\",\n\"Horizontal space\": \"Horizontalan razmak\",\n\"Border\": \"Rub\",\n\"Insert image\": \"Umetni sliku\",\n\"Image\": \"Slika\",\n\"Image list\": \"Image list\",\n\"Rotate counterclockwise\": \"Rotiraj lijevo\",\n\"Rotate clockwise\": \"Rotiraj desno\",\n\"Flip vertically\": \"Obrni vertikalno\",\n\"Flip horizontally\": \"Obrni horizontalno\",\n\"Edit image\": \"Uredi sliku\",\n\"Image options\": \"Opcije slike\",\n\"Zoom in\": \"Pove\\u0107aj\",\n\"Zoom out\": \"Smanji\",\n\"Crop\": \"Obre\\u017ei\",\n\"Resize\": \"Promjeni veli\\u010dinu\",\n\"Orientation\": \"Orijentacija\",\n\"Brightness\": \"Svjetlina\",\n\"Sharpen\": \"Izo\\u0161travanje\",\n\"Contrast\": \"Kontrast\",\n\"Color levels\": \"Razine boje\",\n\"Gamma\": \"Gamma\",\n\"Invert\": \"Invertiraj\",\n\"Apply\": \"Primijeni\",\n\"Back\": \"Natrag\",\n\"Insert date\\/time\": \"Umetni datum\\/vrijeme\",\n\"Date\\/time\": \"Datum\\/vrijeme\",\n\"Insert link\": \"Umetni poveznicu\",\n\"Insert\\/edit link\": \"Umetni\\/izmijeni poveznicu\",\n\"Text to display\": \"Tekst za prikaz\",\n\"Url\": \"Url\",\n\"Target\": \"Meta\",\n\"None\": \"Ni\\u0161ta\",\n\"New window\": \"Novi prozor\",\n\"Remove link\": \"Ukloni poveznicu\",\n\"Anchors\": \"Kra\\u0107e poveznice\",\n\"Link\": \"Link\",\n\"Paste or type a link\": \"Zalijepi ili upi\\u0161i link\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"Izgleda da je URL koji ste upisali e-mail adresa. \\u017delite li dodati obavezan mailto: prefiks?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"Izgleda da je URL koji ste upisali vanjski link. \\u017delite li dodati obavezan http:\\/\\/ prefiks?\",\n\"Link list\": \"Link list\",\n\"Insert video\": \"Umetni video\",\n\"Insert\\/edit video\": \"Umetni\\/izmijeni video\",\n\"Insert\\/edit media\": \"Umetni\\/uredi mediju\",\n\"Alternative source\": \"Alternativni izvor\",\n\"Poster\": \"Poster\",\n\"Paste your embed code below:\": \"Umetnite va\\u0161 kod za ugradnju ispod:\",\n\"Embed\": \"Ugradi\",\n\"Media\": \"Media\",\n\"Nonbreaking space\": \"Neprekidaju\\u0107i razmak\",\n\"Page break\": \"Prijelom stranice\",\n\"Paste as text\": \"Zalijepi kao tekst\",\n\"Preview\": \"Pregled\",\n\"Print\": \"Ispis\",\n\"Save\": \"Spremi\",\n\"Find\": \"Tra\\u017ei\",\n\"Replace with\": \"Zamijeni s\",\n\"Replace\": \"Zamijeni\",\n\"Replace all\": \"Zamijeni sve\",\n\"Prev\": \"Prethodni\",\n\"Next\": \"Slijede\\u0107i\",\n\"Find and replace\": \"Prona\\u0111i i zamijeni\",\n\"Could not find the specified string.\": \"Tra\\u017eeni tekst nije prona\\u0111en\",\n\"Match case\": \"Pazi na mala i velika slova\",\n\"Whole words\": \"Cijele rije\\u010di\",\n\"Spellcheck\": \"Provjeri pravopis\",\n\"Ignore\": \"Zanemari\",\n\"Ignore all\": \"Zanemari sve\",\n\"Finish\": \"Zavr\\u0161i\",\n\"Add to Dictionary\": \"Dodaj u rje\\u010dnik\",\n\"Insert table\": \"Umetni tablicu\",\n\"Table properties\": \"Svojstva tablice\",\n\"Delete table\": \"Izbri\\u0161i tablicu\",\n\"Cell\": \"Polje\",\n\"Row\": \"Redak\",\n\"Column\": \"Stupac\",\n\"Cell properties\": \"Svojstva polja\",\n\"Merge cells\": \"Spoji polja\",\n\"Split cell\": \"Razdvoji polja\",\n\"Insert row before\": \"Umetni redak prije\",\n\"Insert row after\": \"Umetni redak nakon\",\n\"Delete row\": \"Izbri\\u0161i redak\",\n\"Row properties\": \"Svojstva redka\",\n\"Cut row\": \"Izre\\u017ei redak\",\n\"Copy row\": \"Kopiraj redak\",\n\"Paste row before\": \"Zalijepi redak prije\",\n\"Paste row after\": \"Zalijepi redak nakon\",\n\"Insert column before\": \"Umetni stupac prije\",\n\"Insert column after\": \"Umetni stupac nakon\",\n\"Delete column\": \"Izbri\\u0161i stupac\",\n\"Cols\": \"Stupci\",\n\"Rows\": \"Redci\",\n\"Width\": \"\\u0160irina\",\n\"Height\": \"Visina\",\n\"Cell spacing\": \"Razmak izme\\u0111u polja\",\n\"Cell padding\": \"Razmak unutar polja\",\n\"Caption\": \"Natpis\",\n\"Left\": \"Lijevo\",\n\"Center\": \"Sredina\",\n\"Right\": \"Desno\",\n\"Cell type\": \"Vrsta polja\",\n\"Scope\": \"Doseg\",\n\"Alignment\": \"Poravnanje\",\n\"H Align\": \"H Poravnavanje\",\n\"V Align\": \"V Poravnavanje\",\n\"Top\": \"Vrh\",\n\"Middle\": \"Sredina\",\n\"Bottom\": \"Dno\",\n\"Header cell\": \"Polje zaglavlja\",\n\"Row group\": \"Grupirani redci\",\n\"Column group\": \"Grupirani stupci\",\n\"Row type\": \"Vrsta redka\",\n\"Header\": \"Zaglavlje\",\n\"Body\": \"Sadr\\u017eaj\",\n\"Footer\": \"Podno\\u017eje\",\n\"Border color\": \"Boja ruba\",\n\"Insert template\": \"Umetni predlo\\u017eak\",\n\"Templates\": \"Predlo\\u0161ci\",\n\"Template\": \"Predlo\\u017eak\",\n\"Text color\": \"Boja teksta\",\n\"Background color\": \"Boja pozadine\",\n\"Custom...\": \"Prilago\\u0111eno...\",\n\"Custom color\": \"Prilago\\u0111ena boja\",\n\"No color\": \"Bez boje\",\n\"Table of Contents\": \"Sadr\\u017eaj\",\n\"Show blocks\": \"Prika\\u017ei blokove\",\n\"Show invisible characters\": \"Prika\\u017ei nevidljive znakove\",\n\"Words: {0}\": \"Rije\\u010di: {0}\",\n\"File\": \"Datoteka\",\n\"Edit\": \"Izmijeni\",\n\"Insert\": \"Umetni\",\n\"View\": \"Pogled\",\n\"Format\": \"Oblikuj\",\n\"Table\": \"Tablica\",\n\"Tools\": \"Alati\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Pritisni ALT-F9 za izbornik. Pritisni ALT-F10 za alatnu traku. Pritisni ALT-0 za pomo\\u0107\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/hu.js",
    "content": "tinymce.addI18n('hu',{\n\"Cut\": \"Kiv\\u00e1g\\u00e1s\",\n\"Heading 5\": \"Fejl\\u00e9c 5\",\n\"Header 2\": \"C\\u00edmsor 2\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"A b\\u00f6ng\\u00e9sz\\u0151d nem t\\u00e1mogatja a k\\u00f6zvetlen hozz\\u00e1f\\u00e9r\\u00e9st a v\\u00e1g\\u00f3laphoz. K\\u00e9rlek haszn\\u00e1ld a Ctrl+X\\/C\\/V billenty\\u0171ket.\",\n\"Heading 4\": \"Fejl\\u00e9c 4\",\n\"Div\": \"Div\",\n\"Heading 2\": \"Fejl\\u00e9c 2\",\n\"Paste\": \"Beilleszt\\u00e9s\",\n\"Close\": \"Bez\\u00e1r\",\n\"Font Family\": \"Bet\\u0171t\\u00edpus\",\n\"Pre\": \"El\\u0151\",\n\"Align right\": \"Jobbra igaz\\u00edt\",\n\"New document\": \"\\u00daj dokumentum\",\n\"Blockquote\": \"Id\\u00e9zetblokk\",\n\"Numbered list\": \"Sz\\u00e1moz\\u00e1s\",\n\"Heading 1\": \"Fejl\\u00e9c 1\",\n\"Headings\": \"Fejl\\u00e9cek\",\n\"Increase indent\": \"Beh\\u00faz\\u00e1s n\\u00f6vel\\u00e9se\",\n\"Formats\": \"Form\\u00e1tumok\",\n\"Headers\": \"C\\u00edmsorok\",\n\"Select all\": \"Minden kijel\\u00f6l\\u00e9se\",\n\"Header 3\": \"C\\u00edmsor 3\",\n\"Blocks\": \"Blokkok\",\n\"Undo\": \"Visszavon\\u00e1s\",\n\"Strikethrough\": \"\\u00c1th\\u00fazott\",\n\"Bullet list\": \"Felsorol\\u00e1s\",\n\"Header 1\": \"C\\u00edmsor 1\",\n\"Superscript\": \"Fels\\u0151 index\",\n\"Clear formatting\": \"Form\\u00e1z\\u00e1s t\\u00f6rl\\u00e9se\",\n\"Font Sizes\": \"Bet\\u0171m\\u00e9retek\",\n\"Subscript\": \"Als\\u00f3 index\",\n\"Header 6\": \"C\\u00edmsor 6\",\n\"Redo\": \"Ism\\u00e9t\",\n\"Paragraph\": \"Bekezd\\u00e9s\",\n\"Ok\": \"Rendben\",\n\"Bold\": \"F\\u00e9lk\\u00f6v\\u00e9r\",\n\"Code\": \"K\\u00f3d\",\n\"Italic\": \"D\\u0151lt\",\n\"Align center\": \"K\\u00f6z\\u00e9pre z\\u00e1r\",\n\"Header 5\": \"C\\u00edmsor 5\",\n\"Heading 6\": \"Fejl\\u00e9c 6\",\n\"Heading 3\": \"Fejl\\u00e9c 3\",\n\"Decrease indent\": \"Beh\\u00faz\\u00e1s cs\\u00f6kkent\\u00e9se\",\n\"Header 4\": \"C\\u00edmsor 4\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Beilleszt\\u00e9s mostant\\u00f3l egyszer\\u0171 sz\\u00f6veg m\\u00f3dban. A tartalmak mostant\\u00f3l egyszer\\u0171 sz\\u00f6vegk\\u00e9nt lesznek beillesztve, am\\u00edg nem kapcsolod ki ezt az opci\\u00f3t.\",\n\"Underline\": \"Al\\u00e1h\\u00fazott\",\n\"Cancel\": \"M\\u00e9gse\",\n\"Justify\": \"Sorkiz\\u00e1r\\u00e1s\",\n\"Inline\": \"Vonalon bel\\u00fcl\",\n\"Copy\": \"M\\u00e1sol\\u00e1s\",\n\"Align left\": \"Balra igaz\\u00edt\",\n\"Visual aids\": \"Vizu\\u00e1lis seg\\u00e9deszk\\u00f6z\\u00f6k\",\n\"Lower Greek\": \"Kis g\\u00f6r\\u00f6g sz\\u00e1m\",\n\"Square\": \"N\\u00e9gyzet\",\n\"Default\": \"Alap\\u00e9rtelmezett\",\n\"Lower Alpha\": \"Kisbet\\u0171\",\n\"Circle\": \"K\\u00f6r\",\n\"Disc\": \"Pont\",\n\"Upper Alpha\": \"Nagybet\\u0171\",\n\"Upper Roman\": \"Nagy r\\u00f3mai sz\\u00e1m\",\n\"Lower Roman\": \"Kis r\\u00f3mai sz\\u00e1m\",\n\"Name\": \"N\\u00e9v\",\n\"Anchor\": \"Horgony\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"Nem mentett m\\u00f3dos\\u00edt\\u00e1said vannak, biztos hogy el akarsz navig\\u00e1lni?\",\n\"Restore last draft\": \"Utols\\u00f3 piszkozat vissza\\u00e1ll\\u00edt\\u00e1sa\",\n\"Special character\": \"Speci\\u00e1lis karakter\",\n\"Source code\": \"Forr\\u00e1sk\\u00f3d\",\n\"B\": \"B\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"Color\": \"Sz\\u00edn\",\n\"Right to left\": \"Jobbr\\u00f3l balra\",\n\"Left to right\": \"Balr\\u00f3l jobbra\",\n\"Emoticons\": \"Vigyorok\",\n\"Robots\": \"Robotok\",\n\"Document properties\": \"Dokumentum tulajdons\\u00e1gai\",\n\"Title\": \"C\\u00edm\",\n\"Keywords\": \"Kulcsszavak\",\n\"Encoding\": \"K\\u00f3dol\\u00e1s\",\n\"Description\": \"Le\\u00edr\\u00e1s\",\n\"Author\": \"Szerz\\u0151\",\n\"Fullscreen\": \"Teljes k\\u00e9perny\\u0151\",\n\"Horizontal line\": \"V\\u00edzszintes vonal\",\n\"Horizontal space\": \"Horizont\\u00e1lis hely\",\n\"Insert\\/edit image\": \"K\\u00e9p beilleszt\\u00e9se\\/szerkeszt\\u00e9se\",\n\"General\": \"\\u00c1ltal\\u00e1nos\",\n\"Advanced\": \"Halad\\u00f3\",\n\"Source\": \"Forr\\u00e1s\",\n\"Border\": \"Szeg\\u00e9ly\",\n\"Constrain proportions\": \"M\\u00e9retar\\u00e1ny\",\n\"Vertical space\": \"Vertik\\u00e1lis hely\",\n\"Image description\": \"K\\u00e9p le\\u00edr\\u00e1sa\",\n\"Style\": \"St\\u00edlus\",\n\"Dimensions\": \"M\\u00e9retek\",\n\"Insert image\": \"K\\u00e9p besz\\u00far\\u00e1sa\",\n\"Zoom in\": \"Nagy\\u00edt\\u00e1s\",\n\"Contrast\": \"Kontraszt\",\n\"Back\": \"Vissza\",\n\"Gamma\": \"Gamma\",\n\"Flip horizontally\": \"V\\u00edzszintes t\\u00fckr\\u00f6z\\u00e9s\",\n\"Resize\": \"\\u00c1tm\\u00e9retez\\u00e9s\",\n\"Sharpen\": \"\\u00c9less\\u00e9g\",\n\"Zoom out\": \"Kicsiny\\u00edt\\u00e9s\",\n\"Image options\": \"K\\u00e9p be\\u00e1ll\\u00edt\\u00e1sok\",\n\"Apply\": \"Ment\\u00e9s\",\n\"Brightness\": \"F\\u00e9nyer\\u0151\",\n\"Rotate clockwise\": \"Forgat\\u00e1s az \\u00f3ramutat\\u00f3 j\\u00e1r\\u00e1s\\u00e1val megegyez\\u0151en\",\n\"Rotate counterclockwise\": \"Forgat\\u00e1s az \\u00f3ramutat\\u00f3 j\\u00e1r\\u00e1s\\u00e1val ellent\\u00e9tesen\",\n\"Edit image\": \"K\\u00e9p szerkeszt\\u00e9se\",\n\"Color levels\": \"Sz\\u00ednszint\",\n\"Crop\": \"K\\u00e9p v\\u00e1g\\u00e1s\",\n\"Orientation\": \"K\\u00e9p t\\u00e1jol\\u00e1s\",\n\"Flip vertically\": \"F\\u00fcgg\\u0151leges t\\u00fckr\\u00f6z\\u00e9s\",\n\"Invert\": \"Inverz k\\u00e9p\",\n\"Insert date\\/time\": \"D\\u00e1tum\\/id\\u0151 beilleszt\\u00e9se\",\n\"Remove link\": \"Hivatkoz\\u00e1s t\\u00f6rl\\u00e9se\",\n\"Url\": \"Url\",\n\"Text to display\": \"Megjelen\\u0151 sz\\u00f6veg\",\n\"Anchors\": \"Horgonyok\",\n\"Insert link\": \"Link beilleszt\\u00e9se\",\n\"New window\": \"\\u00daj ablak\",\n\"None\": \"Nincs\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"Az URL amit megadt\\u00e1l k\\u00fcls\\u0151 c\\u00edmnek t\\u0171nik. Szeretn\\u00e9d hozz\\u00e1adni a sz\\u00fcks\\u00e9ges http:\\/\\/ el\\u0151tagot?\",\n\"Target\": \"C\\u00e9l\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"Az URL amit megadt\\u00e1l email c\\u00edmnek t\\u0171nik. Szeretn\\u00e9d hozz\\u00e1adni a sz\\u00fcks\\u00e9ges mailto: el\\u0151tagot?\",\n\"Insert\\/edit link\": \"Link beilleszt\\u00e9se\\/szerkeszt\\u00e9se\",\n\"Insert\\/edit video\": \"Vide\\u00f3 beilleszt\\u00e9se\\/szerkeszt\\u00e9se\",\n\"Poster\": \"El\\u0151n\\u00e9zeti k\\u00e9p\",\n\"Alternative source\": \"Alternat\\u00edv forr\\u00e1s\",\n\"Paste your embed code below:\": \"Illeszd be a be\\u00e1gyaz\\u00f3 k\\u00f3dot alulra:\",\n\"Insert video\": \"Vide\\u00f3 beilleszt\\u00e9se\",\n\"Embed\": \"Be\\u00e1gyaz\\u00e1s\",\n\"Nonbreaking space\": \"Nem t\\u00f6rhet\\u0151 hely\",\n\"Page break\": \"Oldalt\\u00f6r\\u00e9s\",\n\"Paste as text\": \"Beilleszt\\u00e9s sz\\u00f6vegk\\u00e9nt\",\n\"Preview\": \"El\\u0151n\\u00e9zet\",\n\"Print\": \"Nyomtat\\u00e1s\",\n\"Save\": \"Ment\\u00e9s\",\n\"Could not find the specified string.\": \"A be\\u00edrt kifejez\\u00e9s nem tal\\u00e1lhat\\u00f3.\",\n\"Replace\": \"Csere\",\n\"Next\": \"K\\u00f6vetkez\\u0151\",\n\"Whole words\": \"Csak ha ez a teljes sz\\u00f3\",\n\"Find and replace\": \"Keres\\u00e9s \\u00e9s csere\",\n\"Replace with\": \"Csere erre\",\n\"Find\": \"Keres\\u00e9s\",\n\"Replace all\": \"Az \\u00f6sszes cser\\u00e9je\",\n\"Match case\": \"Kis \\u00e9s nagybet\\u0171k megk\\u00fcl\\u00f6nb\\u00f6ztet\\u00e9se\",\n\"Prev\": \"El\\u0151z\\u0151\",\n\"Spellcheck\": \"Helyes\\u00edr\\u00e1s ellen\\u0151rz\\u00e9s\",\n\"Finish\": \"Befejez\\u00e9s\",\n\"Ignore all\": \"Mindent figyelmen k\\u00edv\\u00fcl hagy\",\n\"Ignore\": \"Figyelmen k\\u00edv\\u00fcl hagy\",\n\"Add to Dictionary\": \"Sz\\u00f3t\\u00e1rhoz ad\",\n\"Insert row before\": \"Sor besz\\u00far\\u00e1sa el\\u00e9\",\n\"Rows\": \"Sorok\",\n\"Height\": \"Magass\\u00e1g\",\n\"Paste row after\": \"Sor beilleszt\\u00e9se m\\u00f6g\\u00e9\",\n\"Alignment\": \"Igaz\\u00edt\\u00e1s\",\n\"Border color\": \"Szeg\\u00e9ly sz\\u00edne\",\n\"Column group\": \"Oszlop csoport\",\n\"Row\": \"Sor\",\n\"Insert column before\": \"Oszlop besz\\u00far\\u00e1sa el\\u00e9\",\n\"Split cell\": \"Cell\\u00e1k sz\\u00e9tv\\u00e1laszt\\u00e1sa\",\n\"Cell padding\": \"Cella m\\u00e9rete\",\n\"Cell spacing\": \"Cell\\u00e1k t\\u00e1vols\\u00e1ga\",\n\"Row type\": \"Sor t\\u00edpus\",\n\"Insert table\": \"T\\u00e1bl\\u00e1zat beilleszt\\u00e9se\",\n\"Body\": \"Sz\\u00f6vegt\\u00f6rzs\",\n\"Caption\": \"Felirat\",\n\"Footer\": \"L\\u00e1bl\\u00e9c\",\n\"Delete row\": \"Sor t\\u00f6rl\\u00e9se\",\n\"Paste row before\": \"Sor beilleszt\\u00e9se el\\u00e9\",\n\"Scope\": \"Hat\\u00f3k\\u00f6r\",\n\"Delete table\": \"T\\u00e1bl\\u00e1zat t\\u00f6rl\\u00e9se\",\n\"H Align\": \"V\\u00edzszintes igaz\\u00edt\\u00e1s\",\n\"Top\": \"Fel\\u00fcl\",\n\"Header cell\": \"Fejl\\u00e9c cella\",\n\"Column\": \"Oszlop\",\n\"Row group\": \"Sor csoport\",\n\"Cell\": \"Cella\",\n\"Middle\": \"K\\u00f6z\\u00e9pen\",\n\"Cell type\": \"Cella t\\u00edpusa\",\n\"Copy row\": \"Sor m\\u00e1sol\\u00e1sa\",\n\"Row properties\": \"Sor tulajdons\\u00e1gai\",\n\"Table properties\": \"T\\u00e1bl\\u00e1zat tulajdons\\u00e1gok\",\n\"Bottom\": \"Alul\",\n\"V Align\": \"F\\u00fcgg\\u0151leges igaz\\u00edt\\u00e1s\",\n\"Header\": \"Fejl\\u00e9c\",\n\"Right\": \"Jobb\",\n\"Insert column after\": \"Oszlop besz\\u00far\\u00e1sa m\\u00f6g\\u00e9\",\n\"Cols\": \"Oszlopok\",\n\"Insert row after\": \"Sor besz\\u00far\\u00e1sa m\\u00f6g\\u00e9\",\n\"Width\": \"Sz\\u00e9less\\u00e9g\",\n\"Cell properties\": \"Cella tulajdons\\u00e1gok\",\n\"Left\": \"Bal\",\n\"Cut row\": \"Sor kiv\\u00e1g\\u00e1sa\",\n\"Delete column\": \"Oszlop t\\u00f6rl\\u00e9se\",\n\"Center\": \"K\\u00f6z\\u00e9p\",\n\"Merge cells\": \"Cell\\u00e1k egyes\\u00edt\\u00e9se\",\n\"Insert template\": \"Sablon beilleszt\\u00e9se\",\n\"Templates\": \"Sablonok\",\n\"Background color\": \"H\\u00e1tt\\u00e9r sz\\u00edn\",\n\"Custom...\": \"Egy\\u00e9ni...\",\n\"Custom color\": \"Egy\\u00e9ni sz\\u00edn\",\n\"No color\": \"Nincs sz\\u00edn\",\n\"Text color\": \"Sz\\u00f6veg sz\\u00edne\",\n\"Show blocks\": \"Blokkok mutat\\u00e1sa\",\n\"Show invisible characters\": \"L\\u00e1thatatlan karakterek mutat\\u00e1sa\",\n\"Words: {0}\": \"Szavak: {0}\",\n\"Insert\": \"Beilleszt\\u00e9s\",\n\"File\": \"F\\u00e1jl\",\n\"Edit\": \"Szerkeszt\\u00e9s\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Rich Text ter\\u00fclet. Nyomj ALT-F9-et a men\\u00fch\\u00f6z. Nyomj ALT-F10-et az eszk\\u00f6zt\\u00e1rhoz. Nyomj ALT-0-t a s\\u00fag\\u00f3hoz\",\n\"Tools\": \"Eszk\\u00f6z\\u00f6k\",\n\"View\": \"N\\u00e9zet\",\n\"Table\": \"T\\u00e1bl\\u00e1zat\",\n\"Format\": \"Form\\u00e1tum\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/it.js",
    "content": "tinymce.addI18n('it',{\n\"Redo\": \"Ripeti\",\n\"Undo\": \"Indietro\",\n\"Cut\": \"Taglia\",\n\"Copy\": \"Copia\",\n\"Paste\": \"Incolla\",\n\"Select all\": \"Seleziona Tutto\",\n\"New document\": \"Nuovo Documento\",\n\"Ok\": \"Ok\",\n\"Cancel\": \"Annulla\",\n\"Visual aids\": \"Elementi Visivi\",\n\"Bold\": \"Grassetto\",\n\"Italic\": \"Corsivo\",\n\"Underline\": \"Sottolineato\",\n\"Strikethrough\": \"Barrato\",\n\"Superscript\": \"Apice\",\n\"Subscript\": \"Pedice\",\n\"Clear formatting\": \"Cancella Formattazione\",\n\"Align left\": \"Allinea a Sinistra\",\n\"Align center\": \"Allinea al Cento\",\n\"Align right\": \"Allinea a Destra\",\n\"Justify\": \"Giustifica\",\n\"Bullet list\": \"Elenchi Puntati\",\n\"Numbered list\": \"Elenchi Numerati\",\n\"Decrease indent\": \"Riduci Rientro\",\n\"Increase indent\": \"Aumenta Rientro\",\n\"Close\": \"Chiudi\",\n\"Formats\": \"Formattazioni\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Il tuo browser non supporta l'accesso diretto negli Appunti. Per favore usa i tasti di scelta rapida Ctrl+X\\/C\\/V.\",\n\"Headers\": \"Intestazioni\",\n\"Header 1\": \"Intestazione 1\",\n\"Header 2\": \"Header 2\",\n\"Header 3\": \"Intestazione 3\",\n\"Header 4\": \"Intestazione 4\",\n\"Header 5\": \"Intestazione 5\",\n\"Header 6\": \"Intestazione 6\",\n\"Headings\": \"Intestazioni\",\n\"Heading 1\": \"Intestazione 1\",\n\"Heading 2\": \"Intestazione 2\",\n\"Heading 3\": \"Intestazione 3\",\n\"Heading 4\": \"Intestazione 4\",\n\"Heading 5\": \"Intestazione 5\",\n\"Heading 6\": \"Intestazione 6\",\n\"Preformatted\": \"Preformattato\",\n\"Div\": \"Div\",\n\"Pre\": \"Pre\",\n\"Code\": \"Codice\",\n\"Paragraph\": \"Paragrafo\",\n\"Blockquote\": \"Blockquote\",\n\"Inline\": \"Inlinea\",\n\"Blocks\": \"Blocchi\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Incolla \\u00e8 in modalit\\u00e0 testo normale. I contenuti sono incollati come testo normale se non disattivi l'opzione.\",\n\"Font Family\": \"Famiglia font\",\n\"Font Sizes\": \"Dimensioni font\",\n\"Class\": \"Classe\",\n\"Browse for an image\": \"Scegli un'immagine\",\n\"OR\": \"o\",\n\"Drop an image here\": \"Incolla un'immagine qui\",\n\"Upload\": \"Carica\",\n\"Block\": \"Blocco\",\n\"Align\": \"Allinea\",\n\"Default\": \"Default\",\n\"Circle\": \"Cerchio\",\n\"Disc\": \"Disco\",\n\"Square\": \"Quadrato\",\n\"Lower Alpha\": \"Alpha Minore\",\n\"Lower Greek\": \"Greek Minore\",\n\"Lower Roman\": \"Roman Minore\",\n\"Upper Alpha\": \"Alpha Superiore\",\n\"Upper Roman\": \"Roman Superiore\",\n\"Anchor\": \"Fissa\",\n\"Name\": \"Nome\",\n\"Id\": \"Id\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"L'id dovrebbe cominciare con una lettera, seguito solo da lettere, numeri, linee, punti, virgole.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"Non hai salvato delle modifiche, sei sicuro di andartene?\",\n\"Restore last draft\": \"Ripristina l'ultima bozza.\",\n\"Special character\": \"Carattere Speciale\",\n\"Source code\": \"Codice Sorgente\",\n\"Insert\\/Edit code sample\": \"Inserisci\\/Modifica esempio di codice\",\n\"Language\": \"Lingua\",\n\"Code sample\": \"Esempio di codice\",\n\"Color\": \"Colore\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"B\": \"B\",\n\"Left to right\": \"Da Sinistra a Destra\",\n\"Right to left\": \"Da Destra a Sinistra\",\n\"Emoticons\": \"Emoction\",\n\"Document properties\": \"Propriet\\u00e0 Documento\",\n\"Title\": \"Titolo\",\n\"Keywords\": \"Parola Chiave\",\n\"Description\": \"Descrizione\",\n\"Robots\": \"Robot\",\n\"Author\": \"Autore\",\n\"Encoding\": \"Codifica\",\n\"Fullscreen\": \"Schermo Intero\",\n\"Action\": \"Azione\",\n\"Shortcut\": \"Scorciatoia\",\n\"Help\": \"Aiuto\",\n\"Address\": \"Indirizzo\",\n\"Focus to menubar\": \"Focus sulla barra del menu\",\n\"Focus to toolbar\": \"Focus sulla barra degli strumenti\",\n\"Focus to element path\": \"Focus sul percorso dell'elemento\",\n\"Focus to contextual toolbar\": \"Focus sulla barra degli strumenti contestuale\",\n\"Insert link (if link plugin activated)\": \"Inserisci link (se il plugin link \\u00e8 attivato)\",\n\"Save (if save plugin activated)\": \"Salva (se il plugin save \\u00e8 attivato)\",\n\"Find (if searchreplace plugin activated)\": \"Trova (se il plugin searchreplace \\u00e8 attivato)\",\n\"Plugins installed ({0}):\": \"Plugin installati ({0}):\",\n\"Premium plugins:\": \"Plugin Premium:\",\n\"Learn more...\": \"Per saperne di pi\\u00f9...\",\n\"You are using {0}\": \"Stai usando {0}\",\n\"Plugins\": \"Plugin\",\n\"Handy Shortcuts\": \"Scorciatoia pratica\",\n\"Horizontal line\": \"Linea Orizzontale\",\n\"Insert\\/edit image\": \"Aggiungi\\/Modifica Immagine\",\n\"Image description\": \"Descrizione Immagine\",\n\"Source\": \"Fonte\",\n\"Dimensions\": \"Dimenzioni\",\n\"Constrain proportions\": \"Mantieni Proporzioni\",\n\"General\": \"Generale\",\n\"Advanced\": \"Avanzato\",\n\"Style\": \"Stile\",\n\"Vertical space\": \"Spazio Verticale\",\n\"Horizontal space\": \"Spazio Orizzontale\",\n\"Border\": \"Bordo\",\n\"Insert image\": \"Inserisci immagine\",\n\"Image\": \"Immagine\",\n\"Image list\": \"Elenco immagini\",\n\"Rotate counterclockwise\": \"Ruota in senso antiorario\",\n\"Rotate clockwise\": \"Ruota in senso orario\",\n\"Flip vertically\": \"Rifletti verticalmente\",\n\"Flip horizontally\": \"Rifletti orizzontalmente\",\n\"Edit image\": \"Modifica immagine\",\n\"Image options\": \"Opzioni immagine\",\n\"Zoom in\": \"Ingrandisci\",\n\"Zoom out\": \"Rimpicciolisci\",\n\"Crop\": \"Taglia\",\n\"Resize\": \"Ridimensiona\",\n\"Orientation\": \"Orientamento\",\n\"Brightness\": \"Luminosit\\u00e0\",\n\"Sharpen\": \"Contrasta\",\n\"Contrast\": \"Contrasto\",\n\"Color levels\": \"Livelli colore\",\n\"Gamma\": \"Gamma\",\n\"Invert\": \"Inverti\",\n\"Apply\": \"Applica\",\n\"Back\": \"Indietro\",\n\"Insert date\\/time\": \"Inserisci Data\\/Ora\",\n\"Date\\/time\": \"Data\\/Ora\",\n\"Insert link\": \"Inserisci il Link\",\n\"Insert\\/edit link\": \"Inserisci\\/Modifica Link\",\n\"Text to display\": \"Testo da Visualizzare\",\n\"Url\": \"Url\",\n\"Target\": \"Target\",\n\"None\": \"No\",\n\"New window\": \"Nuova Finestra\",\n\"Remove link\": \"Rimuovi link\",\n\"Anchors\": \"Anchors\",\n\"Link\": \"Collegamento\",\n\"Paste or type a link\": \"Incolla o digita un collegamento\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"L'URL inserito sembra essere un indirizzo email. Vuoi aggiungere il prefisso necessario mailto:?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"L'URL inserito sembra essere un collegamento esterno. Vuoi aggiungere il prefisso necessario http:\\/\\/?\",\n\"Link list\": \"Elenco link\",\n\"Insert video\": \"Inserisci Video\",\n\"Insert\\/edit video\": \"Inserisci\\/Modifica Video\",\n\"Insert\\/edit media\": \"Inserisci\\/Modifica Media\",\n\"Alternative source\": \"Alternativo\",\n\"Poster\": \"Anteprima\",\n\"Paste your embed code below:\": \"Incolla il codice d'incorporamento qui:\",\n\"Embed\": \"Incorporare\",\n\"Media\": \"Media\",\n\"Nonbreaking space\": \"Spazio unificatore\",\n\"Page break\": \"Interruzione di pagina\",\n\"Paste as text\": \"incolla come testo\",\n\"Preview\": \"Anteprima\",\n\"Print\": \"Stampa\",\n\"Save\": \"Salva\",\n\"Find\": \"Trova\",\n\"Replace with\": \"Sostituisci Con\",\n\"Replace\": \"Sostituisci\",\n\"Replace all\": \"Sostituisci Tutto\",\n\"Prev\": \"Precedente\",\n\"Next\": \"Successivo\",\n\"Find and replace\": \"Trova e Sostituisci\",\n\"Could not find the specified string.\": \"Impossibile trovare la parola specifica.\",\n\"Match case\": \"Maiuscole\\/Minuscole \",\n\"Whole words\": \"Parole Sbagliate\",\n\"Spellcheck\": \"Controllo ortografico\",\n\"Ignore\": \"Ignora\",\n\"Ignore all\": \"Ignora Tutto\",\n\"Finish\": \"Termina\",\n\"Add to Dictionary\": \"Aggiungi al Dizionario\",\n\"Insert table\": \"Inserisci Tabella\",\n\"Table properties\": \"Propiet\\u00e0 della Tabella\",\n\"Delete table\": \"Cancella Tabella\",\n\"Cell\": \"Cella\",\n\"Row\": \"Riga\",\n\"Column\": \"Colonna\",\n\"Cell properties\": \"Propiet\\u00e0 della Cella\",\n\"Merge cells\": \"Unisci Cella\",\n\"Split cell\": \"Dividi Cella\",\n\"Insert row before\": \"Inserisci una Riga Prima\",\n\"Insert row after\": \"Inserisci una Riga Dopo\",\n\"Delete row\": \"Cancella Riga\",\n\"Row properties\": \"Propriet\\u00e0 della Riga\",\n\"Cut row\": \"Taglia Riga\",\n\"Copy row\": \"Copia Riga\",\n\"Paste row before\": \"Incolla una Riga Prima\",\n\"Paste row after\": \"Incolla una Riga Dopo\",\n\"Insert column before\": \"Inserisci una Colonna Prima\",\n\"Insert column after\": \"Inserisci una Colonna Dopo\",\n\"Delete column\": \"Cancella Colonna\",\n\"Cols\": \"Colonne\",\n\"Rows\": \"Righe\",\n\"Width\": \"Larghezza\",\n\"Height\": \"Altezza\",\n\"Cell spacing\": \"Spaziatura della Cella\",\n\"Cell padding\": \"Padding della Cella\",\n\"Caption\": \"Didascalia\",\n\"Left\": \"Sinistra\",\n\"Center\": \"Centro\",\n\"Right\": \"Destra\",\n\"Cell type\": \"Tipo di Cella\",\n\"Scope\": \"Campo\",\n\"Alignment\": \"Allineamento\",\n\"H Align\": \"Allineamento H\",\n\"V Align\": \"Allineamento V\",\n\"Top\": \"In alto\",\n\"Middle\": \"In mezzo\",\n\"Bottom\": \"In fondo\",\n\"Header cell\": \"cella d'intestazione\",\n\"Row group\": \"Gruppo di Righe\",\n\"Column group\": \"Gruppo di Colonne\",\n\"Row type\": \"Tipo di Riga\",\n\"Header\": \"Header\",\n\"Body\": \"Body\",\n\"Footer\": \"Footer\",\n\"Border color\": \"Colore bordo\",\n\"Insert template\": \"Inserisci Template\",\n\"Templates\": \"Template\",\n\"Template\": \"Modello\",\n\"Text color\": \"Colore Testo\",\n\"Background color\": \"Colore Background\",\n\"Custom...\": \"Personalizzato...\",\n\"Custom color\": \"Colore personalizzato\",\n\"No color\": \"Nessun colore\",\n\"Table of Contents\": \"Tabella dei contenuti\",\n\"Show blocks\": \"Mostra Blocchi\",\n\"Show invisible characters\": \"Mostra Caratteri Invisibili\",\n\"Words: {0}\": \"Parole: {0}\",\n\"{0} words\": \"{0} parole\",\n\"File\": \"File\",\n\"Edit\": \"Modifica\",\n\"Insert\": \"Inserisci\",\n\"View\": \"Visualiza\",\n\"Format\": \"Formato\",\n\"Table\": \"Tabella\",\n\"Tools\": \"Strumenti\",\n\"Powered by {0}\": \"Fornito da {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Rich Text Area. Premi ALT-F9 per il men\\u00f9. Premi ALT-F10 per la barra degli strumenti. Premi ALT-0 per l'aiuto.\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/nl.js",
    "content": "tinymce.addI18n('nl',{\n\"Redo\": \"Opnieuw\",\n\"Undo\": \"Ongedaan maken\",\n\"Cut\": \"Knippen\",\n\"Copy\": \"Kopi\\u00ebren\",\n\"Paste\": \"Plakken\",\n\"Select all\": \"Alles selecteren\",\n\"New document\": \"Nieuw document\",\n\"Ok\": \"Ok\\u00e9\",\n\"Cancel\": \"Annuleren\",\n\"Visual aids\": \"Hulpmiddelen\",\n\"Bold\": \"Vet\",\n\"Italic\": \"Cursief\",\n\"Underline\": \"Onderstreept\",\n\"Strikethrough\": \"Doorhalen\",\n\"Superscript\": \"Superscript\",\n\"Subscript\": \"Subscript\",\n\"Clear formatting\": \"Opmaak verwijderen\",\n\"Align left\": \"Links uitlijnen\",\n\"Align center\": \"Centreren\",\n\"Align right\": \"Rechts uitlijnen\",\n\"Justify\": \"Uitlijnen\",\n\"Bullet list\": \"Opsommingsteken\",\n\"Numbered list\": \"Nummering\",\n\"Decrease indent\": \"Inspringen verkleinen\",\n\"Increase indent\": \"Inspringen vergroten\",\n\"Close\": \"Sluiten\",\n\"Formats\": \"Opmaak\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Uw browser ondersteunt geen toegang tot het clipboard. Gelieve ctrl+X\\/C\\/V sneltoetsen te gebruiken.\",\n\"Headers\": \"Kopteksten\",\n\"Header 1\": \"Kop 1\",\n\"Header 2\": \"Kop 2\",\n\"Header 3\": \"Kop 3\",\n\"Header 4\": \"Kop 4\",\n\"Header 5\": \"Kop 5\",\n\"Header 6\": \"Kop 6\",\n\"Headings\": \"Koppen\",\n\"Heading 1\": \"Kop 1\",\n\"Heading 2\": \"Kop 2\",\n\"Heading 3\": \"Kop 3\",\n\"Heading 4\": \"Kop 4\",\n\"Heading 5\": \"Kop 5\",\n\"Heading 6\": \"Kop 6\",\n\"Div\": \"Div\",\n\"Pre\": \"Pre\",\n\"Code\": \"Code\",\n\"Paragraph\": \"Paragraaf\",\n\"Blockquote\": \"Quote\",\n\"Inline\": \"Inlijn\",\n\"Blocks\": \"Blok\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Plakken gebeurt nu als platte tekst. Tekst wordt nu ingevoegd zonder opmaak tot deze optie uitgeschakeld wordt.\",\n\"Font Family\": \"Lettertype\",\n\"Font Sizes\": \"Tekengrootte\",\n\"Class\": \"Class\",\n\"Browse for an image\": \"Zoek naar een afbeelding\",\n\"OR\": \"OF\",\n\"Drop an image here\": \"Plaats hier een afbeelding\",\n\"Upload\": \"Uploaden\",\n\"Block\": \"Blok\",\n\"Align\": \"Uitlijnen\",\n\"Default\": \"Standaard\",\n\"Circle\": \"Cirkel\",\n\"Disc\": \"Bolletje\",\n\"Square\": \"Vierkant\",\n\"Lower Alpha\": \"Kleine letters\",\n\"Lower Greek\": \"Griekse letters\",\n\"Lower Roman\": \"Romeinse cijfers klein\",\n\"Upper Alpha\": \"Hoofdletters\",\n\"Upper Roman\": \"Romeinse cijfers groot\",\n\"Anchor\": \"Anker\",\n\"Name\": \"Naam\",\n\"Id\": \"ID\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"ID moet beginnen met een letter, gevolgd door letters, nummers, streepjes, punten, dubbele punten of underscores.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"U hebt niet alles opgeslagen bent u zeker dat u de pagina wenst te verlaten?\",\n\"Restore last draft\": \"Herstel het laatste concept\",\n\"Special character\": \"Speciale karakters\",\n\"Source code\": \"Broncode\",\n\"Insert\\/Edit code sample\": \"Broncode invoegen\\/bewerken\",\n\"Language\": \"Programmeertaal\",\n\"Code sample\": \"Broncode voorbeeld\",\n\"Color\": \"Kleur\",\n\"R\": \"Rood\",\n\"G\": \"Groen\",\n\"B\": \"Blauw\",\n\"Left to right\": \"Links naar rechts\",\n\"Right to left\": \"Rechts naar links\",\n\"Emoticons\": \"Emoticons\",\n\"Document properties\": \"Document eigenschappen\",\n\"Title\": \"Titel\",\n\"Keywords\": \"Sleutelwoorden\",\n\"Description\": \"Omschrijving\",\n\"Robots\": \"Robots\",\n\"Author\": \"Auteur\",\n\"Encoding\": \"Codering\",\n\"Fullscreen\": \"Volledig scherm\",\n\"Action\": \"Actie\",\n\"Shortcut\": \"Snelkoppeling\",\n\"Help\": \"Help\",\n\"Address\": \"Adres\",\n\"Focus to menubar\": \"Menubalk selecteren\",\n\"Focus to toolbar\": \"Werkbalk selecteren\",\n\"Focus to element path\": \"Element pad selecteren\",\n\"Focus to contextual toolbar\": \"Contextuele werkbalk selecteren\",\n\"Insert link (if link plugin activated)\": \"Link invoegen (als link plug-in geactiveerd is)\",\n\"Save (if save plugin activated)\": \"Opslaan (als opslaan plug-in ingeschakeld is)\",\n\"Find (if searchreplace plugin activated)\": \"Zoeken (als zoeken\\/vervangen plug-in ingeschakeld is)\",\n\"Plugins installed ({0}):\": \"Plug-ins ge\\u00efnstalleerd ({0}):\",\n\"Premium plugins:\": \"Premium plug-ins:\",\n\"Learn more...\": \"Leer meer...\",\n\"You are using {0}\": \"Je gebruikt {0}\",\n\"Plugins\": \"Plug-ins\",\n\"Handy Shortcuts\": \"Handige snelkoppelingen\",\n\"Horizontal line\": \"Horizontale lijn\",\n\"Insert\\/edit image\": \"Afbeelding invoegen\\/bewerken\",\n\"Image description\": \"Afbeelding omschrijving\",\n\"Source\": \"Bron\",\n\"Dimensions\": \"Afmetingen\",\n\"Constrain proportions\": \"Verhoudingen behouden\",\n\"General\": \"Algemeen\",\n\"Advanced\": \"Geavanceerd\",\n\"Style\": \"Stijl\",\n\"Vertical space\": \"Verticale ruimte\",\n\"Horizontal space\": \"Horizontale ruimte\",\n\"Border\": \"Rand\",\n\"Insert image\": \"Afbeelding invoegen\",\n\"Image\": \"Afbeelding\",\n\"Image list\": \"Afbeeldingenlijst\",\n\"Rotate counterclockwise\": \"Linksom draaien\",\n\"Rotate clockwise\": \"Rechtsom draaien\",\n\"Flip vertically\": \"Verticaal spiegelen\",\n\"Flip horizontally\": \"Horizontaal spiegelen\",\n\"Edit image\": \"Bewerk afbeelding\",\n\"Image options\": \"Afbeelding opties\",\n\"Zoom in\": \"Inzoomen\",\n\"Zoom out\": \"Uitzoomen\",\n\"Crop\": \"Uitsnijden\",\n\"Resize\": \"Formaat aanpassen\",\n\"Orientation\": \"Orientatie\",\n\"Brightness\": \"Helderheid\",\n\"Sharpen\": \"Scherpte\",\n\"Contrast\": \"Contrast\",\n\"Color levels\": \"Kleurniveau's\",\n\"Gamma\": \"Gamma\",\n\"Invert\": \"Omkeren\",\n\"Apply\": \"Toepassen\",\n\"Back\": \"Terug\",\n\"Insert date\\/time\": \"Voeg datum\\/tijd in\",\n\"Date\\/time\": \"Datum\\/tijd\",\n\"Insert link\": \"Hyperlink invoegen\",\n\"Insert\\/edit link\": \"Hyperlink invoegen\\/bewerken\",\n\"Text to display\": \"Linktekst\",\n\"Url\": \"Url\",\n\"Target\": \"Doel\",\n\"None\": \"Geen\",\n\"New window\": \"Nieuw venster\",\n\"Remove link\": \"Link verwijderen\",\n\"Anchors\": \"Anker\",\n\"Link\": \"Link\",\n\"Paste or type a link\": \"Plak of typ een link\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"De ingegeven URL lijkt op een e-mailadres. Wil je er \\\"mailto:\\\" aan toevoegen?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"De ingegeven URL verwijst naar een extern adres. Wil je er \\\"http:\\/\\/\\\" aan toevoegen?\",\n\"Link list\": \"Linklijst\",\n\"Insert video\": \"Video invoegen\",\n\"Insert\\/edit video\": \"Video invoegen\\/bewerken\",\n\"Insert\\/edit media\": \"Media invoegen\\/bewerken\",\n\"Alternative source\": \"Alternatieve bron\",\n\"Poster\": \"Poster\",\n\"Paste your embed code below:\": \"Plak u in te sluiten code hieronder:\",\n\"Embed\": \"Insluiten\",\n\"Media\": \"Media\",\n\"Nonbreaking space\": \"Vaste spatie invoegen\",\n\"Page break\": \"Pagina einde\",\n\"Paste as text\": \"Plakken als tekst\",\n\"Preview\": \"Voorbeeld\",\n\"Print\": \"Print\",\n\"Save\": \"Opslaan\",\n\"Find\": \"Zoeken\",\n\"Replace with\": \"Vervangen door\",\n\"Replace\": \"Vervangen\",\n\"Replace all\": \"Alles vervangen\",\n\"Prev\": \"Vorige\",\n\"Next\": \"Volgende\",\n\"Find and replace\": \"Zoek en vervang\",\n\"Could not find the specified string.\": \"Geen resultaten gevonden\",\n\"Match case\": \"Identieke hoofd\\/kleine letters\",\n\"Whole words\": \"Alleen hele woorden\",\n\"Spellcheck\": \"Spellingscontrole\",\n\"Ignore\": \"Negeren\",\n\"Ignore all\": \"Alles negeren\",\n\"Finish\": \"Einde\",\n\"Add to Dictionary\": \"Toevoegen aan woordenlijst\",\n\"Insert table\": \"Tabel invoegen\",\n\"Table properties\": \"Tabel eigenschappen\",\n\"Delete table\": \"Verwijder tabel\",\n\"Cell\": \"Cel\",\n\"Row\": \"Rij\",\n\"Column\": \"Kolom\",\n\"Cell properties\": \"Cel eigenschappen\",\n\"Merge cells\": \"Cellen samenvoegen\",\n\"Split cell\": \"Cel splitsen\",\n\"Insert row before\": \"Voeg rij boven toe\",\n\"Insert row after\": \"Voeg rij onder toe\",\n\"Delete row\": \"Verwijder rij\",\n\"Row properties\": \"Rij eigenschappen\",\n\"Cut row\": \"Knip rij\",\n\"Copy row\": \"Kopieer rij\",\n\"Paste row before\": \"Plak rij boven\",\n\"Paste row after\": \"Plak rij onder\",\n\"Insert column before\": \"Voeg kolom in voor\",\n\"Insert column after\": \"Voeg kolom in na\",\n\"Delete column\": \"Verwijder kolom\",\n\"Cols\": \"Kolommen\",\n\"Rows\": \"Rijen\",\n\"Width\": \"Breedte\",\n\"Height\": \"Hoogte\",\n\"Cell spacing\": \"Celruimte\",\n\"Cell padding\": \"Ruimte binnen cel\",\n\"Caption\": \"Onderschrift\",\n\"Left\": \"Links\",\n\"Center\": \"Midden\",\n\"Right\": \"Rechts\",\n\"Cell type\": \"Celtype\",\n\"Scope\": \"Bereik\",\n\"Alignment\": \"Uitlijning\",\n\"H Align\": \"Links uitlijnen\",\n\"V Align\": \"Boven uitlijnen\",\n\"Top\": \"Bovenaan\",\n\"Middle\": \"Centreren\",\n\"Bottom\": \"Onderaan\",\n\"Header cell\": \"Kopcel\",\n\"Row group\": \"Rijgroep\",\n\"Column group\": \"Kolomgroep\",\n\"Row type\": \"Rijtype\",\n\"Header\": \"Koptekst\",\n\"Body\": \"Body\",\n\"Footer\": \"Voettekst\",\n\"Border color\": \"Randkleur\",\n\"Insert template\": \"Sjabloon invoegen\",\n\"Templates\": \"Sjablonen\",\n\"Template\": \"Sjabloon\",\n\"Text color\": \"Tekstkleur\",\n\"Background color\": \"Achtergrondkleur\",\n\"Custom...\": \"Eigen...\",\n\"Custom color\": \"Eigen kleur\",\n\"No color\": \"Geen kleur\",\n\"Table of Contents\": \"Inhoudsopgave\",\n\"Show blocks\": \"Blokken tonen\",\n\"Show invisible characters\": \"Onzichtbare karakters tonen\",\n\"Words: {0}\": \"Woorden: {0}\",\n\"{0} words\": \"{0} woorden\",\n\"File\": \"Bestand\",\n\"Edit\": \"Bewerken\",\n\"Insert\": \"Invoegen\",\n\"View\": \"Beeld\",\n\"Format\": \"Opmaak\",\n\"Table\": \"Tabel\",\n\"Tools\": \"Gereedschap\",\n\"Powered by {0}\": \"Gemaakt door {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Rich Text Area. Druk ALT-F9 voor het menu. Druk ALT-F10 voor de toolbar. Druk ALT-0 voor help.\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/pt-BR.js",
    "content": "tinymce.addI18n('pt-BR',{\n\"Redo\": \"Refazer\",\n\"Undo\": \"Desfazer\",\n\"Cut\": \"Recortar\",\n\"Copy\": \"Copiar\",\n\"Paste\": \"Colar\",\n\"Select all\": \"Selecionar tudo\",\n\"New document\": \"Novo documento\",\n\"Ok\": \"Ok\",\n\"Cancel\": \"Cancelar\",\n\"Visual aids\": \"Ajuda visual\",\n\"Bold\": \"Negrito\",\n\"Italic\": \"It\\u00e1lico\",\n\"Underline\": \"Sublinhar\",\n\"Strikethrough\": \"Riscar\",\n\"Superscript\": \"Sobrescrito\",\n\"Subscript\": \"Subscrever\",\n\"Clear formatting\": \"Limpar formata\\u00e7\\u00e3o\",\n\"Align left\": \"Alinhar \\u00e0 esquerda\",\n\"Align center\": \"Centralizar\",\n\"Align right\": \"Alinhar \\u00e0 direita\",\n\"Justify\": \"Justificar\",\n\"Bullet list\": \"Lista n\\u00e3o ordenada\",\n\"Numbered list\": \"Lista ordenada\",\n\"Decrease indent\": \"Diminuir recuo\",\n\"Increase indent\": \"Aumentar recuo\",\n\"Close\": \"Fechar\",\n\"Formats\": \"Formatos\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Seu navegador n\\u00e3o suporta acesso direto \\u00e0 \\u00e1rea de transfer\\u00eancia. Por favor use os atalhos Ctrl+X - C - V do teclado\",\n\"Headers\": \"Cabe\\u00e7alhos\",\n\"Header 1\": \"Cabe\\u00e7alho 1\",\n\"Header 2\": \"Cabe\\u00e7alho 2\",\n\"Header 3\": \"Cabe\\u00e7alho 3\",\n\"Header 4\": \"Cabe\\u00e7alho 4\",\n\"Header 5\": \"Cabe\\u00e7alho 5\",\n\"Header 6\": \"Cabe\\u00e7alho 6\",\n\"Headings\": \"Cabe\\u00e7alhos\",\n\"Heading 1\": \"Cabe\\u00e7alho 1\",\n\"Heading 2\": \"Cabe\\u00e7alho 2\",\n\"Heading 3\": \"Cabe\\u00e7alho 3\",\n\"Heading 4\": \"Cabe\\u00e7alho 4\",\n\"Heading 5\": \"Cabe\\u00e7alho 5\",\n\"Heading 6\": \"Cabe\\u00e7alho 6\",\n\"Div\": \"Div\",\n\"Pre\": \"Pre\",\n\"Code\": \"C\\u00f3digo\",\n\"Paragraph\": \"Par\\u00e1grafo\",\n\"Blockquote\": \"Aspas\",\n\"Inline\": \"Em linha\",\n\"Blocks\": \"Blocos\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"O comando colar est\\u00e1 agora em modo texto plano. O conte\\u00fado ser\\u00e1 colado como texto plano at\\u00e9 voc\\u00ea desligar esta op\\u00e7\\u00e3o.\",\n\"Font Family\": \"Fonte\",\n\"Font Sizes\": \"Tamanho\",\n\"Class\": \"Classe\",\n\"Browse for an image\": \"Procure uma imagem\",\n\"OR\": \"OU\",\n\"Drop an image here\": \"Largue uma imagem aqui\",\n\"Upload\": \"Carregar\",\n\"Block\": \"Bloco\",\n\"Align\": \"Alinhamento\",\n\"Default\": \"Padr\\u00e3o\",\n\"Circle\": \"C\\u00edrculo\",\n\"Disc\": \"Disco\",\n\"Square\": \"Quadrado\",\n\"Lower Alpha\": \"a. b. c. ...\",\n\"Lower Greek\": \"\\u03b1. \\u03b2. \\u03b3. ...\",\n\"Lower Roman\": \"i. ii. iii. ...\",\n\"Upper Alpha\": \"A. B. C. ...\",\n\"Upper Roman\": \"I. II. III. ...\",\n\"Anchor\": \"\\u00c2ncora\",\n\"Name\": \"Nome\",\n\"Id\": \"Id\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"Id deve come\\u00e7ar com uma letra, seguido apenas por letras, n\\u00fameros, tra\\u00e7os, pontos, dois pontos ou sublinhados.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"Voc\\u00ea tem mudan\\u00e7as n\\u00e3o salvas. Voc\\u00ea tem certeza que deseja sair?\",\n\"Restore last draft\": \"Restaurar \\u00faltimo rascunho\",\n\"Special character\": \"Caracteres especiais\",\n\"Source code\": \"C\\u00f3digo fonte\",\n\"Insert\\/Edit code sample\": \"Inserir\\/Editar c\\u00f3digo de exemplo\",\n\"Language\": \"Idioma\",\n\"Code sample\": \"Exemplo de c\\u00f3digo\",\n\"Color\": \"Cor\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"B\": \"B\",\n\"Left to right\": \"Da esquerda para a direita\",\n\"Right to left\": \"Da direita para a esquerda\",\n\"Emoticons\": \"Emoticons\",\n\"Document properties\": \"Propriedades do documento\",\n\"Title\": \"T\\u00edtulo\",\n\"Keywords\": \"Palavras-chave\",\n\"Description\": \"Descri\\u00e7\\u00e3o\",\n\"Robots\": \"Rob\\u00f4s\",\n\"Author\": \"Autor\",\n\"Encoding\": \"Codifica\\u00e7\\u00e3o\",\n\"Fullscreen\": \"Tela cheia\",\n\"Action\": \"A\\u00e7\\u00e3o\",\n\"Shortcut\": \"Atalho\",\n\"Help\": \"Ajuda\",\n\"Address\": \"Endere\\u00e7o\",\n\"Focus to menubar\": \"Foco no menu\",\n\"Focus to toolbar\": \"Foco na barra de ferramentas\",\n\"Focus to element path\": \"Foco no caminho do elemento\",\n\"Focus to contextual toolbar\": \"Foco na barra de ferramentas contextual\",\n\"Insert link (if link plugin activated)\": \"Inserir link (se o plugin de link estiver ativado)\",\n\"Save (if save plugin activated)\": \"Salvar (se o plugin de salvar estiver ativado)\",\n\"Find (if searchreplace plugin activated)\": \"Procurar (se o plugin de procurar e substituir estiver ativado)\",\n\"Plugins installed ({0}):\": \"Plugins instalados ({0}):\",\n\"Premium plugins:\": \"Plugins premium:\",\n\"Learn more...\": \"Saiba mais...\",\n\"You are using {0}\": \"Voc\\u00ea est\\u00e1 usando {0}\",\n\"Plugins\": \"Plugins\",\n\"Handy Shortcuts\": \"Atalhos \\u00fateis\",\n\"Horizontal line\": \"Linha horizontal\",\n\"Insert\\/edit image\": \"Inserir\\/editar imagem\",\n\"Image description\": \"Inserir descri\\u00e7\\u00e3o\",\n\"Source\": \"Endere\\u00e7o da imagem\",\n\"Dimensions\": \"Dimens\\u00f5es\",\n\"Constrain proportions\": \"Manter propor\\u00e7\\u00f5es\",\n\"General\": \"Geral\",\n\"Advanced\": \"Avan\\u00e7ado\",\n\"Style\": \"Estilo\",\n\"Vertical space\": \"Espa\\u00e7amento vertical\",\n\"Horizontal space\": \"Espa\\u00e7amento horizontal\",\n\"Border\": \"Borda\",\n\"Insert image\": \"Inserir imagem\",\n\"Image\": \"Imagem\",\n\"Image list\": \"Lista de Imagens\",\n\"Rotate counterclockwise\": \"Girar em sentido hor\\u00e1rio\",\n\"Rotate clockwise\": \"Girar em sentido anti-hor\\u00e1rio\",\n\"Flip vertically\": \"Virar verticalmente\",\n\"Flip horizontally\": \"Virar horizontalmente\",\n\"Edit image\": \"Editar imagem\",\n\"Image options\": \"Op\\u00e7\\u00f5es de Imagem\",\n\"Zoom in\": \"Aumentar zoom\",\n\"Zoom out\": \"Diminuir zoom\",\n\"Crop\": \"Cortar\",\n\"Resize\": \"Redimensionar\",\n\"Orientation\": \"Orienta\\u00e7\\u00e3o\",\n\"Brightness\": \"Brilho\",\n\"Sharpen\": \"Aumentar nitidez\",\n\"Contrast\": \"Contraste\",\n\"Color levels\": \"N\\u00edveis de cor\",\n\"Gamma\": \"Gama\",\n\"Invert\": \"Inverter\",\n\"Apply\": \"Aplicar\",\n\"Back\": \"Voltar\",\n\"Insert date\\/time\": \"Inserir data\\/hora\",\n\"Date\\/time\": \"data\\/hora\",\n\"Insert link\": \"Inserir link\",\n\"Insert\\/edit link\": \"Inserir\\/editar link\",\n\"Text to display\": \"Texto para mostrar\",\n\"Url\": \"Url\",\n\"Target\": \"Alvo\",\n\"None\": \"Nenhum\",\n\"New window\": \"Nova janela\",\n\"Remove link\": \"Remover link\",\n\"Anchors\": \"\\u00c2ncoras\",\n\"Link\": \"Link\",\n\"Paste or type a link\": \"Cole ou digite um Link\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"A URL que voc\\u00ea informou parece ser um link externo. Deseja incluir o prefixo http:\\/\\/?\",\n\"Link list\": \"Lista de Links\",\n\"Insert video\": \"Inserir v\\u00eddeo\",\n\"Insert\\/edit video\": \"Inserir\\/editar v\\u00eddeo\",\n\"Insert\\/edit media\": \"Inserir\\/editar imagem\",\n\"Alternative source\": \"Fonte alternativa\",\n\"Poster\": \"Autor\",\n\"Paste your embed code below:\": \"Insira o c\\u00f3digo de incorpora\\u00e7\\u00e3o abaixo:\",\n\"Embed\": \"Incorporar\",\n\"Media\": \"imagem\",\n\"Nonbreaking space\": \"Espa\\u00e7o n\\u00e3o separ\\u00e1vel\",\n\"Page break\": \"Quebra de p\\u00e1gina\",\n\"Paste as text\": \"Colar como texto\",\n\"Preview\": \"Pr\\u00e9-visualizar\",\n\"Print\": \"Imprimir\",\n\"Save\": \"Salvar\",\n\"Find\": \"Localizar\",\n\"Replace with\": \"Substituir por\",\n\"Replace\": \"Substituir\",\n\"Replace all\": \"Substituir tudo\",\n\"Prev\": \"Anterior\",\n\"Next\": \"Pr\\u00f3ximo\",\n\"Find and replace\": \"Localizar e substituir\",\n\"Could not find the specified string.\": \"N\\u00e3o foi poss\\u00edvel encontrar o termo especificado\",\n\"Match case\": \"Diferenciar mai\\u00fasculas e min\\u00fasculas\",\n\"Whole words\": \"Palavras inteiras\",\n\"Spellcheck\": \"Corretor ortogr\\u00e1fico\",\n\"Ignore\": \"Ignorar\",\n\"Ignore all\": \"Ignorar tudo\",\n\"Finish\": \"Finalizar\",\n\"Add to Dictionary\": \"Adicionar ao Dicion\\u00e1rio\",\n\"Insert table\": \"Inserir tabela\",\n\"Table properties\": \"Propriedades da tabela\",\n\"Delete table\": \"Excluir tabela\",\n\"Cell\": \"C\\u00e9lula\",\n\"Row\": \"Linha\",\n\"Column\": \"Coluna\",\n\"Cell properties\": \"Propriedades da c\\u00e9lula\",\n\"Merge cells\": \"Agrupar c\\u00e9lulas\",\n\"Split cell\": \"Dividir c\\u00e9lula\",\n\"Insert row before\": \"Inserir linha antes\",\n\"Insert row after\": \"Inserir linha depois\",\n\"Delete row\": \"Excluir linha\",\n\"Row properties\": \"Propriedades da linha\",\n\"Cut row\": \"Recortar linha\",\n\"Copy row\": \"Copiar linha\",\n\"Paste row before\": \"Colar linha antes\",\n\"Paste row after\": \"Colar linha depois\",\n\"Insert column before\": \"Inserir coluna antes\",\n\"Insert column after\": \"Inserir coluna depois\",\n\"Delete column\": \"Excluir coluna\",\n\"Cols\": \"Colunas\",\n\"Rows\": \"Linhas\",\n\"Width\": \"Largura\",\n\"Height\": \"Altura\",\n\"Cell spacing\": \"Espa\\u00e7amento da c\\u00e9lula\",\n\"Cell padding\": \"Espa\\u00e7amento interno da c\\u00e9lula\",\n\"Caption\": \"Legenda\",\n\"Left\": \"Esquerdo\",\n\"Center\": \"Centro\",\n\"Right\": \"Direita\",\n\"Cell type\": \"Tipo de c\\u00e9lula\",\n\"Scope\": \"Escopo\",\n\"Alignment\": \"Alinhamento\",\n\"H Align\": \"Alinhamento H\",\n\"V Align\": \"Alinhamento V\",\n\"Top\": \"Superior\",\n\"Middle\": \"Meio\",\n\"Bottom\": \"Inferior\",\n\"Header cell\": \"C\\u00e9lula cabe\\u00e7alho\",\n\"Row group\": \"Agrupar linha\",\n\"Column group\": \"Agrupar coluna\",\n\"Row type\": \"Tipo de linha\",\n\"Header\": \"Cabe\\u00e7alho\",\n\"Body\": \"Corpo\",\n\"Footer\": \"Rodap\\u00e9\",\n\"Border color\": \"Cor da borda\",\n\"Insert template\": \"Inserir modelo\",\n\"Templates\": \"Modelos\",\n\"Template\": \"Modelo\",\n\"Text color\": \"Cor do texto\",\n\"Background color\": \"Cor do fundo\",\n\"Custom...\": \"Personalizado...\",\n\"Custom color\": \"Cor personalizada\",\n\"No color\": \"Nenhuma cor\",\n\"Table of Contents\": \"\\u00edndice de Conte\\u00fado\",\n\"Show blocks\": \"Mostrar blocos\",\n\"Show invisible characters\": \"Exibir caracteres invis\\u00edveis\",\n\"Words: {0}\": \"Palavras: {0}\",\n\"{0} words\": \"{0} palavras\",\n\"File\": \"Arquivo\",\n\"Edit\": \"Editar\",\n\"Insert\": \"Inserir\",\n\"View\": \"Visualizar\",\n\"Format\": \"Formatar\",\n\"Table\": \"Tabela\",\n\"Tools\": \"Ferramentas\",\n\"Powered by {0}\": \"Distribu\\u00eddo por  {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"\\u00c1rea de texto formatado. Pressione ALT-F9 para exibir o menu, ALT-F10 para exibir a barra de ferramentas ou ALT-0 para exibir a ajuda\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/readme.md",
    "content": "Download from https://www.tiny.cloud/get-tiny/language-packages/\n"
  },
  {
    "path": "resources/vendor/tinymce/langs/ru.js",
    "content": "tinymce.addI18n('ru',{\n\"Cut\": \"\\u0412\\u044b\\u0440\\u0435\\u0437\\u0430\\u0442\\u044c\",\n\"Heading 5\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 5\",\n\"Header 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"\\u0412\\u0430\\u0448 \\u0431\\u0440\\u0430\\u0443\\u0437\\u0435\\u0440 \\u043d\\u0435 \\u043f\\u043e\\u0434\\u0434\\u0435\\u0440\\u0436\\u0438\\u0432\\u0430\\u0435\\u0442 \\u043f\\u0440\\u044f\\u043c\\u043e\\u0439 \\u0434\\u043e\\u0441\\u0442\\u0443\\u043f \\u043a \\u0431\\u0443\\u0444\\u0435\\u0440\\u0443 \\u043e\\u0431\\u043c\\u0435\\u043d\\u0430. \\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430, \\u0438\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u0443\\u0439\\u0442\\u0435 \\u0441\\u043b\\u0435\\u0434\\u0443\\u044e\\u0449\\u0438\\u0435 \\u0441\\u043e\\u0447\\u0435\\u0442\\u0430\\u043d\\u0438\\u044f \\u043a\\u043b\\u0430\\u0432\\u0438\\u0448: Ctrl+X\\/C\\/V.\",\n\"Heading 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\"Div\": \"\\u0411\\u043b\\u043e\\u043a\",\n\"Heading 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n\"Paste\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\",\n\"Close\": \"\\u0417\\u0430\\u043a\\u0440\\u044b\\u0442\\u044c\",\n\"Font Family\": \"\\u0428\\u0440\\u0438\\u0444\\u0442\",\n\"Pre\": \"\\u041f\\u0440\\u0435\\u0434\\u0432\\u0430\\u0440\\u0438\\u0442\\u0435\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"Align right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n\"New document\": \"\\u041d\\u043e\\u0432\\u044b\\u0439 \\u0434\\u043e\\u043a\\u0443\\u043c\\u0435\\u043d\\u0442\",\n\"Blockquote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n\"Numbered list\": \"\\u041d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n\"Heading 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n\"Headings\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043a\\u0438\",\n\"Increase indent\": \"\\u0423\\u0432\\u0435\\u043b\\u0438\\u0447\\u0438\\u0442\\u044c \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\"Formats\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\",\n\"Headers\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043a\\u0438\",\n\"Select all\": \"\\u0412\\u044b\\u0434\\u0435\\u043b\\u0438\\u0442\\u044c \\u0432\\u0441\\u0435\",\n\"Header 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n\"Blocks\": \"\\u0411\\u043b\\u043e\\u043a\\u0438\",\n\"Undo\": \"\\u0412\\u0435\\u0440\\u043d\\u0443\\u0442\\u044c\",\n\"Strikethrough\": \"\\u0417\\u0430\\u0447\\u0435\\u0440\\u043a\\u043d\\u0443\\u0442\\u044b\\u0439\",\n\"Bullet list\": \"\\u041c\\u0430\\u0440\\u043a\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n\"Header 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n\"Superscript\": \"\\u0412\\u0435\\u0440\\u0445\\u043d\\u0438\\u0439 \\u0438\\u043d\\u0434\\u0435\\u043a\\u0441\",\n\"Clear formatting\": \"\\u041e\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044c \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\",\n\"Font Sizes\": \"\\u0420\\u0430\\u0437\\u043c\\u0435\\u0440 \\u0448\\u0440\\u0438\\u0444\\u0442\\u0430\",\n\"Subscript\": \"\\u041d\\u0438\\u0436\\u043d\\u0438\\u0439 \\u0438\\u043d\\u0434\\u0435\\u043a\\u0441\",\n\"Header 6\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 6\",\n\"Redo\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Paragraph\": \"\\u041f\\u0430\\u0440\\u0430\\u0433\\u0440\\u0430\\u0444\",\n\"Ok\": \"\\u041e\\u043a\",\n\"Bold\": \"\\u041f\\u043e\\u043b\\u0443\\u0436\\u0438\\u0440\\u043d\\u044b\\u0439\",\n\"Code\": \"\\u041a\\u043e\\u0434\",\n\"Italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n\"Align center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n\"Header 5\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 5\",\n\"Heading 6\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 6\",\n\"Heading 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n\"Decrease indent\": \"\\u0423\\u043c\\u0435\\u043d\\u044c\\u0448\\u0438\\u0442\\u044c \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\"Header 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u043a\\u0430 \\u043e\\u0441\\u0443\\u0449\\u0435\\u0441\\u0442\\u0432\\u043b\\u044f\\u0435\\u0442\\u0441\\u044f \\u0432 \\u0432\\u0438\\u0434\\u0435 \\u043f\\u0440\\u043e\\u0441\\u0442\\u043e\\u0433\\u043e \\u0442\\u0435\\u043a\\u0441\\u0442\\u0430, \\u043f\\u043e\\u043a\\u0430 \\u043d\\u0435 \\u043e\\u0442\\u043a\\u043b\\u044e\\u0447\\u0438\\u0442\\u044c \\u0434\\u0430\\u043d\\u043d\\u0443\\u044e \\u043e\\u043f\\u0446\\u0438\\u044e.\",\n\"Underline\": \"\\u041f\\u043e\\u0434\\u0447\\u0435\\u0440\\u043a\\u043d\\u0443\\u0442\\u044b\\u0439\",\n\"Cancel\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Justify\": \"\\u041f\\u043e \\u0448\\u0438\\u0440\\u0438\\u043d\\u0435\",\n\"Inline\": \"\\u0421\\u0442\\u0440\\u043e\\u0447\\u043d\\u044b\\u0435\",\n\"Copy\": \"\\u041a\\u043e\\u043f\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c\",\n\"Align left\": \"\\u041f\\u043e \\u043b\\u0435\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n\"Visual aids\": \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u044b\\u0432\\u0430\\u0442\\u044c \\u043a\\u043e\\u043d\\u0442\\u0443\\u0440\\u044b\",\n\"Lower Greek\": \"\\u0421\\u0442\\u0440\\u043e\\u0447\\u043d\\u044b\\u0435 \\u0433\\u0440\\u0435\\u0447\\u0435\\u0441\\u043a\\u0438\\u0435 \\u0431\\u0443\\u043a\\u0432\\u044b\",\n\"Square\": \"\\u041a\\u0432\\u0430\\u0434\\u0440\\u0430\\u0442\\u044b\",\n\"Default\": \"\\u0421\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u044b\\u0439\",\n\"Lower Alpha\": \"\\u0421\\u0442\\u0440\\u043e\\u0447\\u043d\\u044b\\u0435 \\u043b\\u0430\\u0442\\u0438\\u043d\\u0441\\u043a\\u0438\\u0435 \\u0431\\u0443\\u043a\\u0432\\u044b\",\n\"Circle\": \"\\u041e\\u043a\\u0440\\u0443\\u0436\\u043d\\u043e\\u0441\\u0442\\u0438\",\n\"Disc\": \"\\u041a\\u0440\\u0443\\u0433\\u0438\",\n\"Upper Alpha\": \"\\u0417\\u0430\\u0433\\u043b\\u0430\\u0432\\u043d\\u044b\\u0435 \\u043b\\u0430\\u0442\\u0438\\u043d\\u0441\\u043a\\u0438\\u0435 \\u0431\\u0443\\u043a\\u0432\\u044b\",\n\"Upper Roman\": \"\\u0417\\u0430\\u0433\\u043b\\u0430\\u0432\\u043d\\u044b\\u0435 \\u0440\\u0438\\u043c\\u0441\\u043a\\u0438\\u0435 \\u0446\\u0438\\u0444\\u0440\\u044b\",\n\"Lower Roman\": \"\\u0421\\u0442\\u0440\\u043e\\u0447\\u043d\\u044b\\u0435 \\u0440\\u0438\\u043c\\u0441\\u043a\\u0438\\u0435 \\u0446\\u0438\\u0444\\u0440\\u044b\",\n\"Name\": \"\\u0418\\u043c\\u044f\",\n\"Anchor\": \"\\u042f\\u043a\\u043e\\u0440\\u044c\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"\\u0423 \\u0432\\u0430\\u0441 \\u0435\\u0441\\u0442\\u044c \\u043d\\u0435 \\u0441\\u043e\\u0445\\u0440\\u0430\\u043d\\u0435\\u043d\\u043d\\u044b\\u0435 \\u0438\\u0437\\u043c\\u0435\\u043d\\u0435\\u043d\\u0438\\u044f. \\u0412\\u044b \\u0443\\u0432\\u0435\\u0440\\u0435\\u043d\\u044b, \\u0447\\u0442\\u043e \\u0445\\u043e\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0439\\u0442\\u0438?\",\n\"Restore last draft\": \"\\u0412\\u043e\\u0441\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e \\u043f\\u0440\\u043e\\u0435\\u043a\\u0442\\u0430\",\n\"Special character\": \"\\u0421\\u043f\\u0435\\u0446\\u0438\\u0430\\u043b\\u044c\\u043d\\u044b\\u0435 \\u0441\\u0438\\u043c\\u0432\\u043e\\u043b\\u044b\",\n\"Source code\": \"\\u0418\\u0441\\u0445\\u043e\\u0434\\u043d\\u044b\\u0439 \\u043a\\u043e\\u0434\",\n\"B\": \"B\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"Color\": \"\\u0426\\u0432\\u0435\\u0442\",\n\"Right to left\": \"\\u041d\\u0430\\u043f\\u0440\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u0441\\u043f\\u0440\\u0430\\u0432\\u0430 \\u043d\\u0430\\u043b\\u0435\\u0432\\u043e\",\n\"Left to right\": \"\\u041d\\u0430\\u043f\\u0440\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u0441\\u043b\\u0435\\u0432\\u0430 \\u043d\\u0430\\u043f\\u0440\\u0430\\u0432\\u043e\",\n\"Emoticons\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u043c\\u0430\\u0439\\u043b\",\n\"Robots\": \"\\u0420\\u043e\\u0431\\u043e\\u0442\\u044b\",\n\"Document properties\": \"\\u0421\\u0432\\u043e\\u0439\\u0441\\u0442\\u0432\\u0430 \\u0434\\u043e\\u043a\\u0443\\u043c\\u0435\\u043d\\u0442\\u0430\",\n\"Title\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a\",\n\"Keywords\": \"\\u041a\\u043b\\u044e\\u0447\\u0438\\u0432\\u044b\\u0435 \\u0441\\u043b\\u043e\\u0432\\u0430\",\n\"Encoding\": \"\\u041a\\u043e\\u0434\\u0438\\u0440\\u043e\\u0432\\u043a\\u0430\",\n\"Description\": \"\\u041e\\u043f\\u0438\\u0441\\u0430\\u043d\\u0438\\u0435\",\n\"Author\": \"\\u0410\\u0432\\u0442\\u043e\\u0440\",\n\"Fullscreen\": \"\\u041f\\u043e\\u043b\\u043d\\u043e\\u044d\\u043a\\u0440\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0440\\u0435\\u0436\\u0438\\u043c\",\n\"Horizontal line\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0430\\u044f \\u043b\\u0438\\u043d\\u0438\\u044f\",\n\"Horizontal space\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u044b\\u0439 \\u0438\\u043d\\u0442\\u0435\\u0440\\u0432\\u0430\\u043b\",\n\"Insert\\/edit image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\\/\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\"General\": \"\\u041e\\u0431\\u0449\\u0435\\u0435\",\n\"Advanced\": \"\\u0420\\u0430\\u0441\\u0448\\u0438\\u0440\\u0435\\u043d\\u043d\\u044b\\u0435\",\n\"Source\": \"\\u0418\\u0441\\u0442\\u043e\\u0447\\u043d\\u0438\\u043a\",\n\"Border\": \"\\u0420\\u0430\\u043c\\u043a\\u0430\",\n\"Constrain proportions\": \"\\u0421\\u043e\\u0445\\u0440\\u0430\\u043d\\u044f\\u0442\\u044c \\u043f\\u0440\\u043e\\u043f\\u043e\\u0440\\u0446\\u0438\\u0438\",\n\"Vertical space\": \"\\u0412\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u044b\\u0439 \\u0438\\u043d\\u0442\\u0435\\u0440\\u0432\\u0430\\u043b\",\n\"Image description\": \"\\u041e\\u043f\\u0438\\u0441\\u0430\\u043d\\u0438\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n\"Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c\",\n\"Dimensions\": \"\\u0420\\u0430\\u0437\\u043c\\u0435\\u0440\",\n\"Insert image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\"Zoom in\": \"\\u041f\\u0440\\u0438\\u0431\\u043b\\u0438\\u0437\\u0438\\u0442\\u044c\",\n\"Contrast\": \"\\u041a\\u043e\\u043d\\u0442\\u0440\\u0430\\u0441\\u0442\",\n\"Back\": \"\\u041d\\u0430\\u0437\\u0430\\u0434\",\n\"Gamma\": \"\\u0413\\u0430\\u043c\\u043c\\u0430\",\n\"Flip horizontally\": \"\\u041e\\u0442\\u0440\\u0430\\u0437\\u0438\\u0442\\u044c \\u043f\\u043e \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u0438\",\n\"Resize\": \"\\u0418\\u0437\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u0440\\u0430\\u0437\\u043c\\u0435\\u0440\",\n\"Sharpen\": \"\\u0427\\u0435\\u0442\\u043a\\u043e\\u0441\\u0442\\u044c\",\n\"Zoom out\": \"\\u041e\\u0442\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c\",\n\"Image options\": \"\\u041d\\u0430\\u0441\\u0442\\u0440\\u043e\\u0439\\u043a\\u0438 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n\"Apply\": \"\\u041f\\u0440\\u0438\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Brightness\": \"\\u042f\\u0440\\u043a\\u043e\\u0441\\u0442\\u044c\",\n\"Rotate clockwise\": \"\\u041f\\u043e\\u0432\\u0435\\u0440\\u043d\\u0443\\u0442\\u044c \\u043f\\u043e \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e\\u0439 \\u0441\\u0442\\u0440\\u0435\\u043b\\u043a\\u0435\",\n\"Rotate counterclockwise\": \"\\u041f\\u043e\\u0432\\u0435\\u0440\\u043d\\u0443\\u0442\\u044c \\u043f\\u0440\\u043e\\u0442\\u0438\\u0432 \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e\\u0439 \\u0441\\u0442\\u0440\\u0435\\u043b\\u043a\\u0438\",\n\"Edit image\": \"\\u0420\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\"Color levels\": \"\\u0426\\u0432\\u0435\\u0442\\u043e\\u0432\\u044b\\u0435 \\u0443\\u0440\\u043e\\u0432\\u043d\\u0438\",\n\"Crop\": \"\\u041e\\u0431\\u0440\\u0435\\u0437\\u0430\\u0442\\u044c\",\n\"Orientation\": \"\\u041e\\u0440\\u0438\\u0435\\u043d\\u0442\\u0430\\u0446\\u0438\\u044f\",\n\"Flip vertically\": \"\\u041e\\u0442\\u0440\\u0430\\u0437\\u0438\\u0442\\u044c \\u043f\\u043e \\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u0438\",\n\"Invert\": \"\\u0418\\u043d\\u0432\\u0435\\u0440\\u0441\\u0438\\u044f\",\n\"Insert date\\/time\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0434\\u0430\\u0442\\u0443\\/\\u0432\\u0440\\u0435\\u043c\\u044f\",\n\"Remove link\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"Url\": \"\\u0410\\u0434\\u0440\\u0435\\u0441 \\u0441\\u0441\\u044b\\u043b\\u043a\\u0438\",\n\"Text to display\": \"\\u041e\\u0442\\u043e\\u0431\\u0440\\u0430\\u0436\\u0430\\u0435\\u043c\\u044b\\u0439 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n\"Anchors\": \"\\u042f\\u043a\\u043e\\u0440\\u044f\",\n\"Insert link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"New window\": \"\\u0412 \\u043d\\u043e\\u0432\\u043e\\u043c \\u043e\\u043a\\u043d\\u0435\",\n\"None\": \"\\u041d\\u0435\\u0442\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"\\u0412\\u0432\\u0435\\u0434\\u0451\\u043d\\u043d\\u044b\\u0439 URL \\u044f\\u0432\\u043b\\u044f\\u0435\\u0442\\u0441\\u044f \\u0432\\u043d\\u0435\\u0448\\u043d\\u0435\\u0439 \\u0441\\u0441\\u044b\\u043b\\u043a\\u043e\\u0439. \\u0412\\u044b \\u0436\\u0435\\u043b\\u0430\\u0435\\u0442\\u0435 \\u0434\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u043f\\u0440\\u0435\\u0444\\u0438\\u043a\\u0441 \\u00abhttp:\\/\\/\\u00bb?\",\n\"Target\": \"\\u041e\\u0442\\u043a\\u0440\\u044b\\u0432\\u0430\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"\\u0412\\u0432\\u0435\\u0434\\u0451\\u043d\\u043d\\u044b\\u0439 URL \\u044f\\u0432\\u043b\\u044f\\u0435\\u0442\\u0441\\u044f \\u043a\\u043e\\u0440\\u0440\\u0435\\u043a\\u0442\\u043d\\u044b\\u043c \\u0430\\u0434\\u0440\\u0435\\u0441\\u043e\\u043c \\u044d\\u043b\\u0435\\u043a\\u0442\\u0440\\u043e\\u043d\\u043d\\u043e\\u0439 \\u043f\\u043e\\u0447\\u0442\\u044b. \\u0412\\u044b \\u0436\\u0435\\u043b\\u0430\\u0435\\u0442\\u0435 \\u0434\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u043f\\u0440\\u0435\\u0444\\u0438\\u043a\\u0441 \\u00abmailto:\\u00bb?\",\n\"Insert\\/edit link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\\/\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"Insert\\/edit video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\\/\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0432\\u0438\\u0434\\u0435\\u043e\",\n\"Poster\": \"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\"Alternative source\": \"\\u0410\\u043b\\u044c\\u0442\\u0435\\u0440\\u043d\\u0430\\u0442\\u0438\\u0432\\u043d\\u044b\\u0439 \\u0438\\u0441\\u0442\\u043e\\u0447\\u043d\\u0438\\u043a\",\n\"Paste your embed code below:\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u044c\\u0442\\u0435 \\u0432\\u0430\\u0448 \\u043a\\u043e\\u0434 \\u043d\\u0438\\u0436\\u0435:\",\n\"Insert video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0432\\u0438\\u0434\\u0435\\u043e\",\n\"Embed\": \"\\u041a\\u043e\\u0434 \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438\",\n\"Nonbreaking space\": \"\\u041d\\u0435\\u0440\\u0430\\u0437\\u0440\\u044b\\u0432\\u043d\\u044b\\u0439 \\u043f\\u0440\\u043e\\u0431\\u0435\\u043b\",\n\"Page break\": \"\\u0420\\u0430\\u0437\\u0440\\u044b\\u0432 \\u0441\\u0442\\u0440\\u0430\\u043d\\u0438\\u0446\\u044b\",\n\"Paste as text\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043a\\u0430\\u043a \\u0442\\u0435\\u043a\\u0441\\u0442\",\n\"Preview\": \"\\u041f\\u0440\\u0435\\u0434\\u043f\\u0440\\u043e\\u0441\\u043c\\u043e\\u0442\\u0440\",\n\"Print\": \"\\u041f\\u0435\\u0447\\u0430\\u0442\\u044c\",\n\"Save\": \"\\u0421\\u043e\\u0445\\u0440\\u0430\\u043d\\u0438\\u0442\\u044c\",\n\"Could not find the specified string.\": \"\\u0417\\u0430\\u0434\\u0430\\u043d\\u043d\\u0430\\u044f \\u0441\\u0442\\u0440\\u043e\\u043a\\u0430 \\u043d\\u0435 \\u043d\\u0430\\u0439\\u0434\\u0435\\u043d\\u0430\",\n\"Replace\": \"\\u0417\\u0430\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Next\": \"\\u0412\\u043d\\u0438\\u0437\",\n\"Whole words\": \"\\u0421\\u043b\\u043e\\u0432\\u043e \\u0446\\u0435\\u043b\\u0438\\u043a\\u043e\\u043c\",\n\"Find and replace\": \"\\u041f\\u043e\\u0438\\u0441\\u043a \\u0438 \\u0437\\u0430\\u043c\\u0435\\u043d\\u0430\",\n\"Replace with\": \"\\u0417\\u0430\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u043d\\u0430\",\n\"Find\": \"\\u041d\\u0430\\u0439\\u0442\\u0438\",\n\"Replace all\": \"\\u0417\\u0430\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u0432\\u0441\\u0435\",\n\"Match case\": \"\\u0423\\u0447\\u0438\\u0442\\u044b\\u0432\\u0430\\u0442\\u044c \\u0440\\u0435\\u0433\\u0438\\u0441\\u0442\\u0440\",\n\"Prev\": \"\\u0412\\u0432\\u0435\\u0440\\u0445\",\n\"Spellcheck\": \"\\u041f\\u0440\\u043e\\u0432\\u0435\\u0440\\u0438\\u0442\\u044c \\u043f\\u0440\\u0430\\u0432\\u043e\\u043f\\u0438\\u0441\\u0430\\u043d\\u0438\\u0435\",\n\"Finish\": \"\\u0417\\u0430\\u043a\\u043e\\u043d\\u0447\\u0438\\u0442\\u044c\",\n\"Ignore all\": \"\\u0418\\u0433\\u043d\\u043e\\u0440\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0432\\u0441\\u0435\",\n\"Ignore\": \"\\u0418\\u0433\\u043d\\u043e\\u0440\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c\",\n\"Add to Dictionary\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u0432 \\u0441\\u043b\\u043e\\u0432\\u0430\\u0440\\u044c\",\n\"Insert row before\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043f\\u0443\\u0441\\u0442\\u0443\\u044e \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u0432\\u0435\\u0440\\u0445\\u0443\",\n\"Rows\": \"\\u0421\\u0442\\u0440\\u043e\\u043a\\u0438\",\n\"Height\": \"\\u0412\\u044b\\u0441\\u043e\\u0442\\u0430\",\n\"Paste row after\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u043d\\u0438\\u0437\\u0443\",\n\"Alignment\": \"\\u0412\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"Border color\": \"\\u0426\\u0432\\u0435\\u0442 \\u0440\\u0430\\u043c\\u043a\\u0438\",\n\"Column group\": \"\\u0413\\u0440\\u0443\\u043f\\u043f\\u0430 \\u043a\\u043e\\u043b\\u043e\\u043d\\u043e\\u043a\",\n\"Row\": \"\\u0421\\u0442\\u0440\\u043e\\u043a\\u0430\",\n\"Insert column before\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446 \\u0441\\u043b\\u0435\\u0432\\u0430\",\n\"Split cell\": \"\\u0420\\u0430\\u0437\\u0431\\u0438\\u0442\\u044c \\u044f\\u0447\\u0435\\u0439\\u043a\\u0443\",\n\"Cell padding\": \"\\u0412\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0438\\u0439 \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\"Cell spacing\": \"\\u0412\\u043d\\u0435\\u0448\\u043d\\u0438\\u0439 \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\"Row type\": \"\\u0422\\u0438\\u043f \\u0441\\u0442\\u0440\\u043e\\u043a\\u0438\",\n\"Insert table\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0443\",\n\"Body\": \"\\u0422\\u0435\\u043b\\u043e\",\n\"Caption\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a\",\n\"Footer\": \"\\u041d\\u0438\\u0437\",\n\"Delete row\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443\",\n\"Paste row before\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u0432\\u0435\\u0440\\u0445\\u0443\",\n\"Scope\": \"Scope\",\n\"Delete table\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0443\",\n\"H Align\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"Top\": \"\\u041f\\u043e \\u0432\\u0435\\u0440\\u0445\\u0443\",\n\"Header cell\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a\",\n\"Column\": \"\\u0421\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446\",\n\"Row group\": \"\\u0413\\u0440\\u0443\\u043f\\u043f\\u0430 \\u0441\\u0442\\u0440\\u043e\\u043a\",\n\"Cell\": \"\\u042f\\u0447\\u0435\\u0439\\u043a\\u0430\",\n\"Middle\": \"\\u041f\\u043e \\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0435\",\n\"Cell type\": \"\\u0422\\u0438\\u043f \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n\"Copy row\": \"\\u041a\\u043e\\u043f\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443\",\n\"Row properties\": \"\\u041f\\u0430\\u0440\\u0430\\u043c\\u0435\\u0442\\u0440\\u044b \\u0441\\u0442\\u0440\\u043e\\u043a\\u0438\",\n\"Table properties\": \"\\u0421\\u0432\\u043e\\u0439\\u0441\\u0442\\u0432\\u0430 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044b\",\n\"Bottom\": \"\\u041f\\u043e \\u043d\\u0438\\u0437\\u0443\",\n\"V Align\": \"\\u0412\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"Header\": \"\\u0428\\u0430\\u043f\\u043a\\u0430\",\n\"Right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n\"Insert column after\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446 \\u0441\\u043f\\u0440\\u0430\\u0432\\u0430\",\n\"Cols\": \"\\u0421\\u0442\\u043e\\u043b\\u0431\\u0446\\u044b\",\n\"Insert row after\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043f\\u0443\\u0441\\u0442\\u0443\\u044e \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u043d\\u0438\\u0437\\u0443\",\n\"Width\": \"\\u0428\\u0438\\u0440\\u0438\\u043d\\u0430\",\n\"Cell properties\": \"\\u041f\\u0430\\u0440\\u0430\\u043c\\u0435\\u0442\\u0440\\u044b \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n\"Left\": \"\\u041f\\u043e \\u043b\\u0435\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n\"Cut row\": \"\\u0412\\u044b\\u0440\\u0435\\u0437\\u0430\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443\",\n\"Delete column\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446\",\n\"Center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n\"Merge cells\": \"\\u041e\\u0431\\u044a\\u0435\\u0434\\u0438\\u043d\\u0438\\u0442\\u044c \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n\"Insert template\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0448\\u0430\\u0431\\u043b\\u043e\\u043d\",\n\"Templates\": \"\\u0428\\u0430\\u0431\\u043b\\u043e\\u043d\\u044b\",\n\"Background color\": \"\\u0426\\u0432\\u0435\\u0442 \\u0444\\u043e\\u043d\\u0430\",\n\"Custom...\": \"\\u0412\\u044b\\u0431\\u0440\\u0430\\u0442\\u044c\\u2026\",\n\"Custom color\": \"\\u041f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044c\\u0441\\u043a\\u0438\\u0439 \\u0446\\u0432\\u0435\\u0442\",\n\"No color\": \"\\u0411\\u0435\\u0437 \\u0446\\u0432\\u0435\\u0442\\u0430\",\n\"Text color\": \"\\u0426\\u0432\\u0435\\u0442 \\u0442\\u0435\\u043a\\u0441\\u0442\\u0430\",\n\"Show blocks\": \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u044b\\u0432\\u0430\\u0442\\u044c \\u0431\\u043b\\u043e\\u043a\\u0438\",\n\"Show invisible characters\": \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u044b\\u0432\\u0430\\u0442\\u044c \\u043d\\u0435\\u0432\\u0438\\u0434\\u0438\\u043c\\u044b\\u0435 \\u0441\\u0438\\u043c\\u0432\\u043e\\u043b\\u044b\",\n\"Words: {0}\": \"\\u041a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e \\u0441\\u043b\\u043e\\u0432: {0}\",\n\"Insert\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\",\n\"File\": \"\\u0424\\u0430\\u0439\\u043b\",\n\"Edit\": \"\\u0418\\u0437\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"\\u0422\\u0435\\u043a\\u0441\\u0442\\u043e\\u0432\\u043e\\u0435 \\u043f\\u043e\\u043b\\u0435. \\u041d\\u0430\\u0436\\u043c\\u0438\\u0442\\u0435 ALT-F9 \\u0447\\u0442\\u043e\\u0431\\u044b \\u0432\\u044b\\u0437\\u0432\\u0430\\u0442\\u044c \\u043c\\u0435\\u043d\\u044e, ALT-F10 \\u043f\\u0430\\u043d\\u0435\\u043b\\u044c \\u0438\\u043d\\u0441\\u0442\\u0440\\u0443\\u043c\\u0435\\u043d\\u0442\\u043e\\u0432, ALT-0 \\u0434\\u043b\\u044f \\u0432\\u044b\\u0437\\u043e\\u0432\\u0430 \\u043f\\u043e\\u043c\\u043e\\u0449\\u0438.\",\n\"Tools\": \"\\u0418\\u043d\\u0441\\u0442\\u0440\\u0443\\u043c\\u0435\\u043d\\u0442\\u044b\",\n\"View\": \"\\u0412\\u0438\\u0434\",\n\"Table\": \"\\u0422\\u0430\\u0431\\u043b\\u0438\\u0446\\u0430\",\n\"Format\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/langs/sk.js",
    "content": "tinymce.addI18n('sk',{\n\"Redo\": \"Znova\",\n\"Undo\": \"Vr\\u00e1ti\\u0165\",\n\"Cut\": \"Vystrihn\\u00fa\\u0165\",\n\"Copy\": \"Kop\\u00edrova\\u0165\",\n\"Paste\": \"Vlo\\u017ei\\u0165\",\n\"Select all\": \"Ozna\\u010di\\u0165 v\\u0161etko\",\n\"New document\": \"Nov\\u00fd dokument\",\n\"Ok\": \"Ok\",\n\"Cancel\": \"Zru\\u0161i\\u0165\",\n\"Visual aids\": \"Vizu\\u00e1lne pom\\u00f4cky\",\n\"Bold\": \"Tu\\u010dn\\u00e9\",\n\"Italic\": \"Kurz\\u00edva\",\n\"Underline\": \"Pod\\u010diarknut\\u00e9\",\n\"Strikethrough\": \"Pre\\u010diarknut\\u00e9\",\n\"Superscript\": \"Horn\\u00fd index\",\n\"Subscript\": \"Spodn\\u00fd index\",\n\"Clear formatting\": \"Vymaza\\u0165 form\\u00e1tovanie\",\n\"Align left\": \"Zarovna\\u0165 v\\u013eavo\",\n\"Align center\": \"Zarovna\\u0165 na stred\",\n\"Align right\": \"Zarovna\\u0165 vpravo\",\n\"Justify\": \"Zarovna\\u0165\",\n\"Bullet list\": \"Odr\\u00e1\\u017eky\",\n\"Numbered list\": \"\\u010c\\u00edslovan\\u00fd zoznam\",\n\"Decrease indent\": \"Zmen\\u0161i\\u0165 odsadenie\",\n\"Increase indent\": \"Zv\\u00e4\\u010d\\u0161i\\u0165 odsadenie\",\n\"Close\": \"Zatvori\\u0165\",\n\"Formats\": \"Form\\u00e1ty\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"V\\u00e1\\u0161 prehliada\\u010d nepodporuje priamy pr\\u00edstup do schr\\u00e1nky. Pou\\u017eite kl\\u00e1vesov\\u00e9 skratky Ctrl+X\\/C\\/V.\",\n\"Headers\": \"Nadpisy\",\n\"Header 1\": \"Nadpis 1\",\n\"Header 2\": \"Nadpis 2\",\n\"Header 3\": \"Nadpis 3\",\n\"Header 4\": \"Nadpis 4\",\n\"Header 5\": \"Nadpis 5\",\n\"Header 6\": \"Nadpis 6\",\n\"Headings\": \"Nadpisy\",\n\"Heading 1\": \"Nadpis 1\",\n\"Heading 2\": \"Nadpis 2\",\n\"Heading 3\": \"Nadpis 3\",\n\"Heading 4\": \"Nadpis 4\",\n\"Heading 5\": \"Nadpis 5\",\n\"Heading 6\": \"Nadpis 6\",\n\"Div\": \"Blok\",\n\"Pre\": \"Preform\\u00e1tovan\\u00fd\",\n\"Code\": \"K\\u00f3d\",\n\"Paragraph\": \"Odsek\",\n\"Blockquote\": \"Cit\\u00e1cia\",\n\"Inline\": \"\\u0160t\\u00fdly\",\n\"Blocks\": \"Bloky\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Vkladanie je v m\\u00f3de neform\\u00e1tovan\\u00e9ho textu. Vkladan\\u00fd obsah bude vlo\\u017een\\u00fd ako neform\\u00e1tovan\\u00fd, a\\u017e pok\\u00fdm t\\u00fato mo\\u017enos\\u0165 nevypnete.\",\n\"Font Family\": \"P\\u00edsmo\",\n\"Font Sizes\": \"Ve\\u013ekos\\u0165 p\\u00edsma\",\n\"Class\": \"Trieda\",\n\"Browse for an image\": \"N\\u00e1js\\u0165 obr\\u00e1zok\",\n\"OR\": \"ALEBO\",\n\"Drop an image here\": \"Pretiahnite obr\\u00e1zok sem\",\n\"Upload\": \"Nahra\\u0165\",\n\"Default\": \"V\\u00fdchodzie\",\n\"Circle\": \"Kruh\",\n\"Disc\": \"Disk\",\n\"Square\": \"\\u0160tvorec\",\n\"Lower Alpha\": \"Mal\\u00e9 p\\u00edsmen\\u00e1\",\n\"Lower Greek\": \"Mal\\u00e9 gr\\u00e9cke p\\u00edsmen\\u00e1\",\n\"Lower Roman\": \"Mal\\u00e9 r\\u00edmske \\u010d\\u00edslice\",\n\"Upper Alpha\": \"Ve\\u013ek\\u00e9 p\\u00edsmen\\u00e1\",\n\"Upper Roman\": \"Ve\\u013ek\\u00e9 r\\u00edmske \\u010d\\u00edslice\",\n\"Anchor\": \"Odkaz\",\n\"Name\": \"N\\u00e1zov\",\n\"Id\": \"Id\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"Id by malo za\\u010d\\u00edna\\u0165 p\\u00edsmenom, nasledovan\\u00e9 p\\u00edsmenami, \\u010d\\u00edslami, pom\\u013a\\u010dkami, bodkami, dvojbodkami alebo podtr\\u017en\\u00edkmi.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"M\\u00e1te neulo\\u017een\\u00e9 zmeny, naozaj chcete opusti\\u0165 str\\u00e1nku?\",\n\"Restore last draft\": \"Obnovi\\u0165 posledn\\u00fd koncept\",\n\"Special character\": \"\\u0160peci\\u00e1lny znak\",\n\"Source code\": \"Zdrojov\\u00fd k\\u00f3d\",\n\"Insert\\/Edit code sample\": \"Vlo\\u017ei\\u0165\\/upravi\\u0165 vzorku k\\u00f3du\",\n\"Language\": \"Jazyk\",\n\"Color\": \"Farba\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"B\": \"B\",\n\"Left to right\": \"Z\\u013eava doprava\",\n\"Right to left\": \"Sprava do\\u013eava\",\n\"Emoticons\": \"Smajl\\u00edci\",\n\"Document properties\": \"Vlastnosti dokumentu\",\n\"Title\": \"Nadpis\",\n\"Keywords\": \"K\\u013e\\u00fa\\u010dov\\u00e9 slov\\u00e1\",\n\"Description\": \"Popis\",\n\"Robots\": \"Preh\\u013ead\\u00e1vacie roboty\",\n\"Author\": \"Autor\",\n\"Encoding\": \"K\\u00f3dovanie\",\n\"Fullscreen\": \"Na cel\\u00fa obrazovku\",\n\"Action\": \"Action\",\n\"Shortcut\": \"Shortcut\",\n\"Help\": \"Help\",\n\"Address\": \"Address\",\n\"Focus to menubar\": \"Focus to menubar\",\n\"Focus to toolbar\": \"Focus to toolbar\",\n\"Focus to element path\": \"Focus to element path\",\n\"Focus to contextual toolbar\": \"Focus to contextual toolbar\",\n\"Insert link (if link plugin activated)\": \"Insert link (if link plugin activated)\",\n\"Save (if save plugin activated)\": \"Save (if save plugin activated)\",\n\"Find (if searchreplace plugin activated)\": \"Find (if searchreplace plugin activated)\",\n\"Plugins installed ({0}):\": \"Plugins installed ({0}):\",\n\"Premium plugins:\": \"Premium plugins:\",\n\"Learn more...\": \"Learn more...\",\n\"You are using {0}\": \"You are using {0}\",\n\"Horizontal line\": \"Horizont\\u00e1lna \\u010diara\",\n\"Insert\\/edit image\": \"Vlo\\u017ei\\u0165\\/upravi\\u0165 obr\\u00e1zok\",\n\"Image description\": \"Popis obr\\u00e1zku\",\n\"Source\": \"Zdroj\",\n\"Dimensions\": \"Rozmery\",\n\"Constrain proportions\": \"Vymedzen\\u00e9 proporcie\",\n\"General\": \"Hlavn\\u00e9\",\n\"Advanced\": \"Pokro\\u010dil\\u00e9\",\n\"Style\": \"\\u0160t\\u00fdl\",\n\"Vertical space\": \"Vertik\\u00e1lny priestor\",\n\"Horizontal space\": \"Horizont\\u00e1lny priestor\",\n\"Border\": \"Or\\u00e1movanie\",\n\"Insert image\": \"Vlo\\u017ei\\u0165 obr\\u00e1zok\",\n\"Image\": \"Obr\\u00e1zok\",\n\"Image list\": \"Zoznam obr\\u00e1zkov\",\n\"Rotate counterclockwise\": \"Oto\\u010di\\u0165 proti smeru hodinov\\u00fdch ru\\u010di\\u010diek\",\n\"Rotate clockwise\": \"Oto\\u010di\\u0165 v smere hodinov\\u00fdch ru\\u010di\\u010diek\",\n\"Flip vertically\": \"Preklopi\\u0165 vertik\\u00e1lne\",\n\"Flip horizontally\": \"Preklopi\\u0165 horizont\\u00e1lne\",\n\"Edit image\": \"Upravi\\u0165 obr\\u00e1zok\",\n\"Image options\": \"Mo\\u017enosti obr\\u00e1zku\",\n\"Zoom in\": \"Pribl\\u00ed\\u017ei\\u0165\",\n\"Zoom out\": \"Oddiali\\u0165\",\n\"Crop\": \"Vyreza\\u0165\",\n\"Resize\": \"Zmeni\\u0165 ve\\u013ekos\\u0165\",\n\"Orientation\": \"Orient\\u00e1cia\",\n\"Brightness\": \"Jas\",\n\"Sharpen\": \"Zaostri\\u0165\",\n\"Contrast\": \"Kontrast\",\n\"Color levels\": \"\\u00darovne farieb\",\n\"Gamma\": \"Gama\",\n\"Invert\": \"Invertova\\u0165\",\n\"Apply\": \"Pou\\u017ei\\u0165\",\n\"Back\": \"Sp\\u00e4\\u0165\",\n\"Insert date\\/time\": \"Vlo\\u017ei\\u0165 d\\u00e1tum\\/\\u010das\",\n\"Date\\/time\": \"D\\u00e1tum\\/\\u010das\",\n\"Insert link\": \"Vlo\\u017ei\\u0165 odkaz\",\n\"Insert\\/edit link\": \"Vlo\\u017ei\\u0165\\/upravi\\u0165 odkaz\",\n\"Text to display\": \"Zobrazen\\u00fd text\",\n\"Url\": \"Url\",\n\"Target\": \"Cie\\u013e\",\n\"None\": \"\\u017diadne\",\n\"New window\": \"Nov\\u00e9 okno\",\n\"Remove link\": \"Odstr\\u00e1ni\\u0165 odkaz\",\n\"Anchors\": \"Kotvy\",\n\"Link\": \"Odkaz\",\n\"Paste or type a link\": \"Prilepte alebo nap\\u00ed\\u0161te odkaz\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"URL, ktor\\u00fa ste vlo\\u017eili je pravdepodobne emailov\\u00e1 adresa. \\u017del\\u00e1te si prida\\u0165 vy\\u017eadovan\\u00fa mailto: predponu?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"URL adresa ktor\\u00fa ste zadali vyzer\\u00e1 ako extern\\u00fd odkaz. Chcete prida\\u0165 vy\\u017eadovan\\u00fa http:\\/\\/ predponu?\",\n\"Link list\": \"Zoznam odkazov\",\n\"Insert video\": \"Vlo\\u017ei\\u0165 video\",\n\"Insert\\/edit video\": \"Vlo\\u017ei\\u0165\\/upravi\\u0165 video\",\n\"Insert\\/edit media\": \"Vlo\\u017ei\\u0165\\/upravi\\u0165 m\\u00e9di\\u00e1\",\n\"Alternative source\": \"Alternat\\u00edvny zdroj\",\n\"Poster\": \"Uk\\u00e1\\u017eka\",\n\"Paste your embed code below:\": \"Vlo\\u017ete k\\u00f3d pre vlo\\u017eenie na str\\u00e1nku:\",\n\"Embed\": \"Vlo\\u017een\\u00e9\",\n\"Media\": \"M\\u00e9di\\u00e1\",\n\"Nonbreaking space\": \"Nedelite\\u013en\\u00e1 medzera\",\n\"Page break\": \"Zalomenie str\\u00e1nky\",\n\"Paste as text\": \"Vlo\\u017ei\\u0165 ako text\",\n\"Preview\": \"N\\u00e1h\\u013ead\",\n\"Print\": \"Tla\\u010di\\u0165\",\n\"Save\": \"Ulo\\u017ei\\u0165\",\n\"Find\": \"H\\u013eada\\u0165\",\n\"Replace with\": \"Nahradi\\u0165 za\",\n\"Replace\": \"Nahradi\\u0165\",\n\"Replace all\": \"Nahradi\\u0165 v\\u0161etko\",\n\"Prev\": \"Predch\\u00e1dzaj\\u00face\",\n\"Next\": \"Nasleduj\\u00face\",\n\"Find and replace\": \"Vyh\\u013eada\\u0165 a nahradi\\u0165\",\n\"Could not find the specified string.\": \"Zadan\\u00fd re\\u0165azec sa nena\\u0161iel.\",\n\"Match case\": \"Rozli\\u0161ova\\u0165 ve\\u013ek\\u00e9\\/mal\\u00e9\",\n\"Whole words\": \"Cel\\u00e9 slov\\u00e1\",\n\"Spellcheck\": \"Kontrola pravopisu\",\n\"Ignore\": \"Ignorova\\u0165\",\n\"Ignore all\": \"Ignorova\\u0165 v\\u0161etko\",\n\"Finish\": \"Dokon\\u010di\\u0165\",\n\"Add to Dictionary\": \"Prida\\u0165 do slovn\\u00edka\",\n\"Insert table\": \"Vlo\\u017ei\\u0165 tabu\\u013eku\",\n\"Table properties\": \"Nastavenia tabu\\u013eky\",\n\"Delete table\": \"Zmaza\\u0165 tabu\\u013eku\",\n\"Cell\": \"Bunka\",\n\"Row\": \"Riadok\",\n\"Column\": \"St\\u013apec\",\n\"Cell properties\": \"Vlastnosti bunky\",\n\"Merge cells\": \"Spoji\\u0165 bunky\",\n\"Split cell\": \"Rozdeli\\u0165 bunku\",\n\"Insert row before\": \"Vlo\\u017ei\\u0165 nov\\u00fd riadok pred\",\n\"Insert row after\": \"Vlo\\u017ei\\u0165 nov\\u00fd riadok za\",\n\"Delete row\": \"Zmaza\\u0165 riadok\",\n\"Row properties\": \"Vlastnosti riadku\",\n\"Cut row\": \"Vystrihn\\u00fa\\u0165 riadok\",\n\"Copy row\": \"Kop\\u00edrova\\u0165 riadok\",\n\"Paste row before\": \"Vlo\\u017ei\\u0165 riadok pred\",\n\"Paste row after\": \"Vlo\\u017ei\\u0165 riadok za\",\n\"Insert column before\": \"Prida\\u0165 nov\\u00fd st\\u013apec pred\",\n\"Insert column after\": \"Prida\\u0165 nov\\u00fd st\\u013apec za\",\n\"Delete column\": \"Vymaza\\u0165 st\\u013apec\",\n\"Cols\": \"St\\u013apce\",\n\"Rows\": \"Riadky\",\n\"Width\": \"\\u0160\\u00edrka\",\n\"Height\": \"V\\u00fd\\u0161ka\",\n\"Cell spacing\": \"Priestor medzi bunkami\",\n\"Cell padding\": \"Odsadenie v bunk\\u00e1ch\",\n\"Caption\": \"Popisok\",\n\"Left\": \"V\\u013eavo\",\n\"Center\": \"Na stred\",\n\"Right\": \"Vpravo\",\n\"Cell type\": \"Typ bunky\",\n\"Scope\": \"Oblas\\u0165\",\n\"Alignment\": \"Zarovnanie\",\n\"H Align\": \"Horizont\\u00e1lne zarovnanie\",\n\"V Align\": \"Vertik\\u00e1lne zarovnanie\",\n\"Top\": \"Vrch\",\n\"Middle\": \"Stred\",\n\"Bottom\": \"Spodok\",\n\"Header cell\": \"Bunka z\\u00e1hlavia\",\n\"Row group\": \"Skupina riadkov\",\n\"Column group\": \"Skupina st\\u013apcov\",\n\"Row type\": \"Typ riadku\",\n\"Header\": \"Z\\u00e1hlavie\",\n\"Body\": \"Telo\",\n\"Footer\": \"P\\u00e4ti\\u010dka\",\n\"Border color\": \"Farba or\\u00e1movania\",\n\"Insert template\": \"Vlo\\u017ei\\u0165 \\u0161abl\\u00f3nu\",\n\"Templates\": \"\\u0160abl\\u00f3ny\",\n\"Template\": \"\\u0160abl\\u00f3na\",\n\"Text color\": \"Farba textu\",\n\"Background color\": \"Farba pozadia\",\n\"Custom...\": \"Vlastn\\u00e1...\",\n\"Custom color\": \"Vlastn\\u00e1 farba\",\n\"No color\": \"Bez farby\",\n\"Table of Contents\": \"Obsah\",\n\"Show blocks\": \"Zobrazi\\u0165 bloky\",\n\"Show invisible characters\": \"Zobrazi\\u0165 skryt\\u00e9 znaky\",\n\"Words: {0}\": \"Slov: {0}\",\n\"File\": \"S\\u00fabor\",\n\"Edit\": \"Upravi\\u0165\",\n\"Insert\": \"Vlo\\u017ei\\u0165\",\n\"View\": \"Zobrazi\\u0165\",\n\"Format\": \"Form\\u00e1t\",\n\"Table\": \"Tabu\\u013eka\",\n\"Tools\": \"N\\u00e1stroje\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Textov\\u00e9 pole. Stla\\u010dte ALT-F9 pre zobrazenie menu, ALT-F10 pre zobrazenie panela n\\u00e1strojov, ALT-0 pre n\\u00e1povedu.\"\n});"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/.gitignore",
    "content": "node_modules/\nbower_components/\n"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/.jshintrc",
    "content": "{\n    // --------------------------------------------------------------------\n    // JSHint Configuration, Strict Edition\n    // --------------------------------------------------------------------\n    //\n    // This is a options template for [JSHint][1], using [JSHint example][2]\n    // and [Ory Band's example][3] as basis and setting config values to\n    // be most strict:\n    //\n    // * set all enforcing options to true\n    // * set all relaxing options to false\n    // * set all environment options to false, except the browser value\n    // * set all JSLint legacy options to false\n    //\n    // [1]: http://www.jshint.com/\n    // [2]: https://github.com/jshint/node-jshint/blob/master/example/config.json\n    // [3]: https://github.com/oryband/dotfiles/blob/master/jshintrc\n    //\n    // @author http://michael.haschke.biz/\n    // @license http://unlicense.org/\n\n    // == Enforcing Options ===============================================\n    //\n    // These options tell JSHint to be more strict towards your code. Use\n    // them if you want to allow only a safe subset of JavaScript, very\n    // useful when your codebase is shared with a big number of developers\n    // with different skill levels.\n\n    \"bitwise\"       : false,     // Prohibit bitwise operators (&, |, ^, etc.).\n    \"curly\"         : true,     // Require {} for every new block or scope.\n    \"eqeqeq\"        : true,     // Require triple equals i.e. `===`.\n    \"forin\"         : true,     // Tolerate `for in` loops without `hasOwnPrototype`.\n    \"immed\"         : true,     // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );`\n    \"latedef\"       : true,     // Prohibit variable use before definition.\n    \"newcap\"        : true,     // Require capitalization of all constructor functions e.g. `new F()`.\n    \"noarg\"         : true,     // Prohibit use of `arguments.caller` and `arguments.callee`.\n    \"noempty\"       : true,     // Prohibit use of empty blocks.\n    \"nonew\"         : true,     // Prohibit use of constructors for side-effects.\n    \"plusplus\"      : false,     // Prohibit use of `++` & `--`.\n    \"regexp\"        : true,     // Prohibit `.` and `[^...]` in regular expressions.\n    \"undef\"         : true,     // Require all non-global variables be declared before they are used.\n    \"strict\"        : true,     // Require `use strict` pragma in every file.\n    \"trailing\"      : true,     // Prohibit trailing whitespaces.\n\t\"quotmark\"\t\t: true,\n    \n    // == Relaxing Options ================================================\n    //\n    // These options allow you to suppress certain types of warnings. Use\n    // them only if you are absolutely positive that you know what you are\n    // doing.\n    \n    \"asi\"           : false,    // Tolerate Automatic Semicolon Insertion (no semicolons).\n    \"boss\"          : false,    // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments.\n    \"debug\"         : false,    // Allow debugger statements e.g. browser breakpoints.\n    \"eqnull\"        : false,    // Tolerate use of `== null`.\n    \"es5\"           : false,    // Allow EcmaScript 5 syntax.\n    \"esnext\"        : false,    // Allow ES.next specific features such as `const` and `let`.\n    \"evil\"          : false,    // Tolerate use of `eval`.\n    \"expr\"          : false,    // Tolerate `ExpressionStatement` as Programs.\n    \"funcscope\"     : false,    // Tolerate declarations of variables inside of control structures while accessing them later from the outside.\n    \"globalstrict\"  : false,    // Allow global \"use strict\" (also enables 'strict').\n    \"iterator\"      : false,    // Allow usage of __iterator__ property.\n    \"lastsemic\"     : false,    // Tolerat missing semicolons when the it is omitted for the last statement in a one-line block.\n    \"laxbreak\"      : false,    // Tolerate unsafe line breaks e.g. `return [\\n] x` without semicolons.\n    \"laxcomma\"      : false,    // Suppress warnings about comma-first coding style.\n    \"loopfunc\"      : false,    // Allow functions to be defined within loops.\n    \"multistr\"      : false,    // Tolerate multi-line strings.\n    \"onecase\"       : false,    // Tolerate switches with just one case.\n    \"proto\"         : false,    // Tolerate __proto__ property. This property is deprecated.\n    \"regexdash\"     : false,    // Tolerate unescaped last dash i.e. `[-...]`.\n    \"scripturl\"     : false,    // Tolerate script-targeted URLs.\n    \"smarttabs\"     : false,    // Tolerate mixed tabs and spaces when the latter are used for alignmnent only.\n    \"shadow\"        : false,    // Allows re-define variables later in code e.g. `var x=1; x=2;`.\n    \"sub\"           : false,    // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`.\n    \"supernew\"      : false,    // Tolerate `new function () { ... };` and `new Object;`.\n    \"validthis\"     : false,    // Tolerate strict violations when the code is running in strict mode and you use this in a non-constructor function.\n    \n    // == Environments ====================================================\n    //\n    // These options pre-define global variables that are exposed by\n    // popular JavaScript libraries and runtime environments—such as\n    // browser or node.js.\n    \n    \"browser\"       : true,     // Standard browser globals e.g. `window`, `document`.\n    \"couch\"         : false,    // Enable globals exposed by CouchDB.\n    \"devel\"         : false,    // Allow development statements e.g. `console.log();`.\n    \"dojo\"          : false,    // Enable globals exposed by Dojo Toolkit.\n    \"jquery\"        : false,    // Enable globals exposed by jQuery JavaScript library.\n    \"mootools\"      : false,    // Enable globals exposed by MooTools JavaScript framework.\n    \"node\"          : false,    // Enable globals available when code is running inside of the NodeJS runtime environment.\n    \"nonstandard\"   : false,    // Define non-standard but widely adopted globals such as escape and unescape.\n    \"prototypejs\"   : false,    // Enable globals exposed by Prototype JavaScript framework.\n    \"rhino\"         : false,    // Enable globals available when your code is running inside of the Rhino runtime environment.\n    \"wsh\"           : false,    // Enable globals available when your code is running as a script for the Windows Script Host.\n    \n    // == JSLint Legacy ===================================================\n    //\n    // These options are legacy from JSLint. Aside from bug fixes they will\n    // not be improved in any way and might be removed at any point.\n    \n    \"nomen\"         : false,    // Prohibit use of initial or trailing underbars in names.\n    \"onevar\"        : false,    // Allow only one `var` statement per function.\n    \"passfail\"      : false,    // Stop on first error.\n    \"white\"         : false,    // Check against strict whitespace and indentation rules.\n    \n    // == Undocumented Options ============================================\n    //\n    // While I've found these options in [example1][2] and [example2][3]\n    // they are not described in the [JSHint Options documentation][4].\n    //\n    // [4]: http://www.jshint.com/options/\n\n    \"maxerr\"        : 100,      // Maximum errors before stopping.\n    \"predef\"        : [         // Extra globals.\n        //\"exampleVar\",\n        //\"anotherCoolGlobal\",\n        //\"iLoveDouglas\"\n    ],\n    \"indent\"        : 4         // Specify indentation spacing\n}"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/.travis.yml",
    "content": "language: node_js\nnode_js:\n    - \"5.7\"\nbranches:\n  only:\n    - master"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/README.md",
    "content": "# tinyMCE mention\n\n[![Travis](https://travis-ci.org/StevenDevooght/tinyMCE-mention.svg?branch=master)](https://travis-ci.org/StevenDevooght/tinyMCE-mention)\n\nMentions plugin for tinyMCE WYSIWYG editor.\n\n![preview](https://static.cognistreamer.com/mention-plugin/mention-4.0.0.png)\n\n## Browser compatibility\n\n* IE7+\n* Chrome\n* Safari\n* Firefox\n* Opera\n\n## Dependencies\n\n* [tinyMCE](http://www.tinymce.com/)\n* [jQuery](http://jquery.com/)\n\n> NOTE: Use v3.x if you're using tinyMCE v3.5.x, use v4.x if you're using tinyMCE v4.x\n\n## Usage\n\nInstall using bower.\n\n```\nbower install tinymce-mention\n```\n\nOr copy the source of the plugin to the plugins directory of your tinyMCE installation.\nAdd the mention plugin to your tinyMCE configuration.\n\n```javascript\nplugins : \"advlink, paste, mention\",\n```\n\nAdd configuration options for the mention plugin. `source` is the only required setting.\n> NOTE: `source` can also be a function. see the options section below.\n\n```javascript\nmentions: {\n    source: [\n        { name: 'Tyra Porcelli' }, \n        { name: 'Brigid Reddish' },\n        { name: 'Ashely Buckler' },\n        { name: 'Teddy Whelan' }\n    ]\n},\n```\n\n## Configuration\n\n### source (required)\n\nThe source parameter can be configured as an array or a function.\n\n#### array\n\n```javascript\nsource: [\n    { name: 'Tyra Porcelli' }, \n    { name: 'Brigid Reddish' },\n    { name: 'Ashely Buckler' },\n    { name: 'Teddy Whelan' }\n]\n```\n\n#### function\n\n```javascript\nsource: function (query, process, delimiter) {\n    // Do your ajax call\n    // When using multiple delimiters you can alter the query depending on the delimiter used\n    if (delimiter === '@') {\n       $.getJSON('ajax/users.json', function (data) {\n          //call process to show the result\n          process(data)\n       });\n    }\n}\n```\n\n### queryBy\n\nThe name of the property used to do the lookup in the `source`.\n\n**Default**: `'name'`.\n\n### delimiter\n\nCharacter that will trigger the mention plugin. Can be configured as a character or an array of characters.\n\n#### character\n\n```javascript\ndelimiter: '@'\n```\n\n#### array\n\n```javascript\ndelimiter: ['@', '#']\n```\n\n**Default**: `'@'`.\n\n### delay\n\nDelay of the lookup in milliseconds when typing a new character.\n\n**Default**: `500`.\n\n### items\n\nMaximum number of items displayed in the dropdown.\n\n**Default**: `10`\n\n### matcher\n\nChecks for a match in the source collection.\n\n```javascript\nmatcher: function(item) {\n    //only match Peter Griffin\n    if(item[this.options.queryBy] === 'Peter Griffin') {\n        return true;\n    }\n}\n```\n\n### highlighter\n\nHighlights the part of the query in the matched result.\n\n```javascript\nhighlighter: function(text) {\n    //make matched block italic\n    return text.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {\n        return '<i>' + match + '</i>';\n    });\n}\n```\n\n### insertFrom\nKey used in the default `insert` implementation.\n\n**Default**: `queryBy` value\n\n> NOTE: key can be any property defined in`source` option.\n\n### insert\n\nCallback to set the content you want to insert in tinyMCE.\n\n```javascript\ninsert: function(item) {\n    return '<span>' + item.name + '</span>';\n}\n```\n\n> NOTE: item parameter has all properties defined in the `source` option.\n\n### render\n\nCallback to set the HTML of an item in the autocomplete dropdown.\n\n```javascript\nrender: function(item) {\n    return '<li>' +\n               '<a href=\"javascript:;\"><span>' + item.name + '</span></a>' +\n           '</li>';\n}\n```\n\n> NOTE: item parameter has all properties defined in the `source` option.\n\n### renderDropdown\n\nCallback to set the wrapper HTML for the autocomplete dropdown.\n\n```javascript\nrenderDropdown: function() {\n    //add twitter bootstrap dropdown-menu class\n    return '<ul class=\"rte-autocomplete dropdown-menu\"></ul>';\n}\n```\n\n## License\n\nMIT licensed\n\nCopyright (C) 2013 Cognistreamer, [http://cognistreamer.com](http://cognistreamer.com)"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/bower.json",
    "content": "{\n  \"name\": \"tinymce-mention\",\n  \"version\": \"4.0.0\",\n  \"description\": \"Mention/Autocomplete plugin for tinyMCE WYSIWYG editor.\",\n  \"main\": \"mention/plugin.min.js\",\n  \"keywords\": [\n    \"tinyMCE\",\n    \"autocomplete\",\n    \"mention\"\n  ],\n  \"authors\": [\n    \"Steven Devooght\"\n  ],\n  \"license\": \"MIT\",\n  \"homepage\": \"http://cognistreamer.github.io/tinyMCE-mention\",\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"bower_components\",\n    \"test\",\n    \"tests\",\n    \"gulpfile.js\",\n    \"package.json\"\n  ],\n  \"dependencies\": {\n    \"tinymce-dist\": \"~4\",\n    \"jquery\": \"~3\"\n  },\n  \"devDependencies\": {\n    \"qunit\": \"~1.21.0\"\n  }\n}\n"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/css/autocomplete.css",
    "content": ".rte-autocomplete{\n    position: absolute;\n    top: 0px;\n    left: 0px;\n    display: block;\n    z-index: 1000;\n    float: left;\n    min-width: 160px;\n    padding: 5px 0;\n    margin: 2px 0 0;\n    list-style: none;\n    background-color: #fff;\n    border: 1px solid #ccc;\n    border: 1px solid rgba(0,0,0,0.2);\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n    -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2);\n    -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.2);\n    box-shadow: 0 5px 10px rgba(0,0,0,0.2);\n    -webkit-background-clip: padding-box;\n    -moz-background-clip: padding;\n    background-clip: padding-box;\n    font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n    font-size: 14px;\n}\n\n.rte-autocomplete:before {\n    content: '';\n    display: inline-block;\n    border-left: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid #ccc;\n    border-bottom-color: rgba(0, 0, 0, 0.2);\n    position: absolute;\n    top: -7px;\n    left: 9px;\n}\n\n.rte-autocomplete:after {\n    content: '';\n    display: inline-block;\n    border-left: 6px solid transparent;\n    border-right: 6px solid transparent;\n    border-bottom: 6px solid white;\n    position: absolute;\n    top: -6px;\n    left: 10px;\n}\n\n.rte-autocomplete > li.loading {\n\tbackground: url(\"https://www.ajaxload.info/cache/FF/FF/FF/00/00/00/1-0.gif\") center no-repeat;\n\theight: 16px;\n}\n\n.rte-autocomplete > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: 20px;\n    color: #333;\n    white-space: nowrap;\n    text-decoration: none;\n}\n\n.rte-autocomplete >li > a:hover, .rte-autocomplete > li > a:focus, .rte-autocomplete:hover > a, .rte-autocomplete:focus > a {\n    color: #fff;\n    text-decoration: none;\n    background-color: #0081c2;\n    background-image: -moz-linear-gradient(top,#08c,#0077b3);\n    background-image: -webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));\n    background-image: -webkit-linear-gradient(top,#08c,#0077b3);\n    background-image: -o-linear-gradient(top,#08c,#0077b3);\n    background-image: linear-gradient(to bottom,#08c,#0077b3);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft;\n}\n\n.rte-autocomplete >.active > a, .rte-autocomplete > .active > a:hover, .rte-autocomplete > .active > a:focus {\n    color: #fff;\n    text-decoration: none;\n    background-color: #0081c2;\n    background-image: -moz-linear-gradient(top,#08c,#0077b3);\n    background-image: -webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));\n    background-image: -webkit-linear-gradient(top,#08c,#0077b3);\n    background-image: -o-linear-gradient(top,#08c,#0077b3);\n    background-image: linear-gradient(to bottom,#08c,#0077b3);\n    background-repeat: repeat-x;\n    outline: 0;\n    filter: progid:DXImageTransform.Microsoft;\n}\n"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/css/rte-content.css",
    "content": "span#autocomplete {\n    font-weight: bold;\n}"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/examples/commonjs/.gitignore",
    "content": "dist/\n"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/examples/commonjs/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>tinyMCE-mention</title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\"/>\n    <link rel=\"stylesheet\" href=\"../../css/autocomplete.css\" type=\"text/css\" media=\"screen\">\n\t<link rel=\"stylesheet\" href=\"node_modules/tinymce/skins/lightgray/skin.min.css\" type=\"text/css\" media=\"screen\">\n\t<script src=\"dist/bundle.js\"></script>\n</head>\n<body>\n\n    <textarea id=\"rte\" style=\"width: 100%;\"></textarea>\n\n</body>\n</html>"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/examples/commonjs/main.js",
    "content": "var tinymce = require('tinymce/tinymce');\n\nrequire('tinymce/themes/modern/theme');\nrequire('tinymce-mention');\n\ntinymce.init({\n  selector: '#rte',\n  skin: false,\n  plugins: ['mention'],\n  mentions: {\n    source: [\n      { name: 'Tyra Porcelli' }, \n      { name: 'Brigid Reddish' },\n      { name: 'Ashely Buckler' },\n      { name: 'Teddy Whelan' }\n    ]\n  }\n});"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/examples/commonjs/package.json",
    "content": "{\n  \"name\": \"tinyMCE-mention-webpack\",\n  \"version\": \"4.0.0\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/CogniStreamer/tinyMCE-mention.git\"\n  },\n  \"description\": \"Mention/Autocomplete plugin for tinyMCE WYSIWYG editor\",\n  \"author\": \"Steven Devooght\",\n  \"bugs\": {\n    \"url\": \"https://github.com/CogniStreamer/tinyMCE-mention/issues\"\n  },\n  \"private\": true,\n  \"engines\": {\n    \"node\": \">=0.10.26\"\n  },\n  \"dependencies\": {\n    \"tinymce\": \"^4.3.13\",\n    \"tinymce-mention\": \"^4.0.1\"\n  },\n  \"devDependencies\": {\n    \"exports-loader\": \"^0.6.3\",\n    \"imports-loader\": \"^0.6.5\",\n    \"webpack\": \"^1.13.1\"\n  }\n}\n"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/examples/commonjs/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar path = require('path');\n\nmodule.exports = {\n    entry: './main.js',\n    output: {\n        filename: './dist/bundle.js'\n    },\n    resolve: {\n        alias: {\n            'jquery': path.join(__dirname, 'node_modules/jquery/dist/jquery')\n        }\n    },\n    module: {\n        loaders: [\n            {\n                test: require.resolve('tinymce/tinymce'),\n                loaders: [\n                  'imports?this=>window',\n                  'exports?window.tinymce'\n                ]\n              }\n        ]\n    },\n    debug: true,\n    watch: false\n};"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/gulpfile.js",
    "content": "var gulp = require('gulp'),\n    bower = require('gulp-bower'),\n    jshint = require('gulp-jshint'),\n    qunit = require('gulp-qunit');\n\ngulp.task('lint', function () {\n    return gulp.src(['./mention/plugin.js', './tests/test_mention.js'])\n        .pipe(jshint())\n        .pipe(jshint.reporter('default'))\n        .pipe(jshint.reporter('fail'));\n});\n\ngulp.task('bower', function () {\n    return bower();\n});\n\ngulp.task('test', ['bower'], function () {\n    return gulp.src('./tests/test_runner.html')\n        .pipe(qunit({ timeout: 10 }));\n});\n\ngulp.task('default', ['lint']);"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/mention/plugin.js",
    "content": "/*global tinymce, module, require, define, global, self */\n\n;(function (f) {\n  'use strict';\n\n  // CommonJS\n  if (typeof exports === 'object' && typeof module !== 'undefined') {\n    module.exports = f(require('jquery'));\n\n  // RequireJS\n  } else if (typeof define === 'function'  && define.amd) {\n    define(['jquery'], f);\n\n  // <script>\n  } else {\n    var g;\n    if (typeof window !== 'undefined') {\n      g = window;\n    } else if (typeof global !== 'undefined') {\n      g = global;\n    } else if (typeof self !== 'undefined') {\n      g = self;\n    } else {\n      g = this;\n    }\n    \n    f(g.jQuery);\n  }\n\n})(function ($) {\n    'use strict';\n\n    var AutoComplete = function (ed, options) {\n        this.editor = ed;\n\n        this.options = $.extend({}, {\n            source: [],\n            delay: 500,\n            queryBy: 'name',\n            items: 10\n        }, options);\n\n        this.options.insertFrom = this.options.insertFrom || this.options.queryBy;\n\n        this.matcher = this.options.matcher || this.matcher;\n        this.sorter = this.options.sorter || this.sorter;\n        this.renderDropdown = this.options.renderDropdown || this.renderDropdown;\n        this.render = this.options.render || this.render;\n        this.insert = this.options.insert || this.insert;\n        this.highlighter = this.options.highlighter || this.highlighter;\n\n        this.query = '';\n        this.hasFocus = true;\n\n        this.renderInput();\n\n        this.bindEvents();\n    };\n\n    AutoComplete.prototype = {\n\n        constructor: AutoComplete,\n\n        renderInput: function () {\n            var rawHtml =  '<span id=\"autocomplete\">' +\n                                '<span id=\"autocomplete-delimiter\">' + this.options.delimiter + '</span>' +\n                                '<span id=\"autocomplete-searchtext\"><span class=\"dummy\">\\uFEFF</span></span>' +\n                            '</span>';\n\n            this.editor.execCommand('mceInsertContent', false, rawHtml);\n            this.editor.focus();\n            this.editor.selection.select(this.editor.selection.dom.select('span#autocomplete-searchtext span')[0]);\n            this.editor.selection.collapse(0);\n        },\n\n        bindEvents: function () {\n            this.editor.on('keyup', this.editorKeyUpProxy = $.proxy(this.rteKeyUp, this));\n            this.editor.on('keydown', this.editorKeyDownProxy = $.proxy(this.rteKeyDown, this), true);\n            this.editor.on('click', this.editorClickProxy = $.proxy(this.rteClicked, this));\n\n            $('body').on('click', this.bodyClickProxy = $.proxy(this.rteLostFocus, this));\n\n            $(this.editor.getWin()).on('scroll', this.rteScroll = $.proxy(function () { this.cleanUp(true); }, this));\n        },\n\n        unbindEvents: function () {\n            this.editor.off('keyup', this.editorKeyUpProxy);\n            this.editor.off('keydown', this.editorKeyDownProxy);\n            this.editor.off('click', this.editorClickProxy);\n\n            $('body').off('click', this.bodyClickProxy);\n\n            $(this.editor.getWin()).off('scroll', this.rteScroll);\n        },\n\n        rteKeyUp: function (e) {\n            switch (e.which || e.keyCode) {\n            //DOWN ARROW\n            case 40:\n            //UP ARROW\n            case 38:\n            //SHIFT\n            case 16:\n            //CTRL\n            case 17:\n            //ALT\n            case 18:\n                break;\n\n            //BACKSPACE\n            case 8:\n                if (this.query === '') {\n                    this.cleanUp(true);\n                } else {\n                    this.lookup();\n                }\n                break;\n\n            //TAB\n            case 9:\n            //ENTER\n            case 13:\n                var item = (this.$dropdown !== undefined) ? this.$dropdown.find('li.active') : [];\n                if (item.length) {\n                    this.select(item.data());\n                    this.cleanUp(false);\n                } else {\n                    this.cleanUp(true);\n                }\n                break;\n\n            //ESC\n            case 27:\n                this.cleanUp(true);\n                break;\n\n            default:\n                this.lookup();\n            }\n        },\n\n        rteKeyDown: function (e) {\n            switch (e.which || e.keyCode) {\n             //TAB\n            case 9:\n            //ENTER\n            case 13:\n            //ESC\n            case 27:\n                e.preventDefault();\n                break;\n\n            //UP ARROW\n            case 38:\n                e.preventDefault();\n                if (this.$dropdown !== undefined) {\n                    this.highlightPreviousResult();\n                }\n                break;\n            //DOWN ARROW\n            case 40:\n                e.preventDefault();\n                if (this.$dropdown !== undefined) {\n                    this.highlightNextResult();\n                }\n                break;\n            }\n\n            e.stopPropagation();\n        },\n\n        rteClicked: function (e) {\n            var $target = $(e.target);\n\n            if (this.hasFocus && $target.parent().attr('id') !== 'autocomplete-searchtext') {\n                this.cleanUp(true);\n            }\n        },\n\n        rteLostFocus: function () {\n            if (this.hasFocus) {\n                this.cleanUp(true);\n            }\n        },\n\n        lookup: function () {\n            this.query = $.trim($(this.editor.getBody()).find('#autocomplete-searchtext').text()).replace('\\ufeff', '');\n\n            if (this.$dropdown === undefined) {\n                this.show();\n            }\n\n            clearTimeout(this.searchTimeout);\n            this.searchTimeout = setTimeout($.proxy(function () {\n                // Added delimiter parameter as last argument for backwards compatibility.\n                var items = $.isFunction(this.options.source) ? this.options.source(this.query, $.proxy(this.process, this), this.options.delimiter) : this.options.source;\n                if (items) {\n                    this.process(items);\n                }\n            }, this), this.options.delay);\n        },\n\n        matcher: function (item) {\n            return ~item[this.options.queryBy].toLowerCase().indexOf(this.query.toLowerCase());\n        },\n\n        sorter: function (items) {\n            var beginswith = [],\n                caseSensitive = [],\n                caseInsensitive = [],\n                item;\n\n            while ((item = items.shift()) !== undefined) {\n                if (!item[this.options.queryBy].toLowerCase().indexOf(this.query.toLowerCase())) {\n                    beginswith.push(item);\n                } else if (~item[this.options.queryBy].indexOf(this.query)) {\n                    caseSensitive.push(item);\n                } else {\n                    caseInsensitive.push(item);\n                }\n            }\n\n            return beginswith.concat(caseSensitive, caseInsensitive);\n        },\n\n        highlighter: function (text) {\n            return text.replace(new RegExp('(' + this.query.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1') + ')', 'ig'), function ($1, match) {\n                return '<strong>' + match + '</strong>';\n            });\n        },\n\n        show: function () {\n            var offset = this.editor.inline ? this.offsetInline() : this.offset();\n\n            this.$dropdown = $(this.renderDropdown())\n                                .css({ 'top': offset.top, 'left': offset.left });\n\n            $('body').append(this.$dropdown);\n\n            this.$dropdown.on('click', $.proxy(this.autoCompleteClick, this));\n        },\n\n        process: function (data) {\n            if (!this.hasFocus) {\n                return;\n            }\n\n            var _this = this,\n                result = [],\n                items = $.grep(data, function (item) {\n                    return _this.matcher(item);\n                });\n\n            items = _this.sorter(items);\n\n            items = items.slice(0, this.options.items);\n\n            $.each(items, function (i, item) {\n                var $element = $(_this.render(item, i));\n\n                $element.html($element.html().replace($element.text(), _this.highlighter($element.text())));\n\n                $.each(items[i], function (key, val) {\n                    $element.attr('data-' + key, val);\n                });\n\n                result.push($element[0].outerHTML);\n            });\n\n            if (result.length) {\n                this.$dropdown.html(result.join('')).show();\n            } else {\n                this.$dropdown.hide();\n                this.$dropdown.find('li').removeClass('active');\n            }\n        },\n\n        renderDropdown: function () {\n            return '<ul class=\"rte-autocomplete dropdown-menu\"><li class=\"loading\"></li></ul>';\n        },\n\n        render: function (item, index) {\n            return '<li>' +\n                        '<a href=\"javascript:;\"><span>' + item[this.options.queryBy] + '</span></a>' +\n                    '</li>';\n        },\n\n        autoCompleteClick: function (e) {\n            var item = $(e.target).closest('li').data();\n            if (!$.isEmptyObject(item)) {\n                this.select(item);\n                this.cleanUp(false);\n            }\n            e.stopPropagation();\n            e.preventDefault();\n        },\n\n        highlightPreviousResult: function () {\n            var currentIndex = this.$dropdown.find('li.active').index(),\n                index = (currentIndex === 0) ? this.$dropdown.find('li').length - 1 : --currentIndex;\n\n            this.$dropdown.find('li').removeClass('active').eq(index).addClass('active');\n        },\n\n        highlightNextResult: function () {\n            var currentIndex = this.$dropdown.find('li.active').index(),\n                index = (currentIndex === this.$dropdown.find('li').length - 1) ? 0 : ++currentIndex;\n\n            this.$dropdown.find('li').removeClass('active').eq(index).addClass('active');\n        },\n\n        select: function (item) {\n            this.editor.focus();\n            var selection = this.editor.dom.select('span#autocomplete')[0];\n            this.editor.dom.remove(selection);\n            this.editor.execCommand('mceInsertContent', false, this.insert(item));\n        },\n\n        insert: function (item) {\n            return '<span>' + item[this.options.insertFrom] + '</span>&nbsp;';\n        },\n\n        cleanUp: function (rollback) {\n            this.unbindEvents();\n            this.hasFocus = false;\n\n            if (this.$dropdown !== undefined) {\n                this.$dropdown.remove();\n                delete this.$dropdown;\n            }\n\n            if (rollback) {\n                var text = this.query,\n                    $selection = $(this.editor.dom.select('span#autocomplete'));\n\n                if (!$selection.length) {\n                    return;\n                }\n                    \n                var replacement = $('<p>' + this.options.delimiter + text + '</p>')[0].firstChild,\n                    focus = $(this.editor.selection.getNode()).offset().top === ($selection.offset().top + (($selection.outerHeight() - $selection.height()) / 2));\n\n                this.editor.dom.replace(replacement, $selection[0]);\n\n                if (focus) {\n                    this.editor.selection.select(replacement);\n                    this.editor.selection.collapse();\n                }\n            }\n        },\n\n        offset: function () {\n            var rtePosition = $(this.editor.getContainer()).offset(),\n                contentAreaPosition = $(this.editor.getContentAreaContainer()).position(),\n                nodePosition = $(this.editor.dom.select('span#autocomplete')).position();\n\n            return {\n                top: rtePosition.top + contentAreaPosition.top + nodePosition.top + $(this.editor.selection.getNode()).innerHeight() - $(this.editor.getDoc()).scrollTop() + 5,\n                left: rtePosition.left + contentAreaPosition.left + nodePosition.left\n            };\n        },\n\n        offsetInline: function () {\n            var nodePosition = $(this.editor.dom.select('span#autocomplete')).offset();\n\n            return {\n                top: nodePosition.top + $(this.editor.selection.getNode()).innerHeight() + 5,\n                left: nodePosition.left\n            };\n        }\n\n    };\n\n    tinymce.create('tinymce.plugins.Mention', {\n\n        init: function (ed) {\n\n            var autoComplete,\n                autoCompleteData = ed.getParam('mentions');\n\n            // If the delimiter is undefined set default value to ['@'].\n            // If the delimiter is a string value convert it to an array. (backwards compatibility)\n            autoCompleteData.delimiter = (autoCompleteData.delimiter !== undefined) ? !$.isArray(autoCompleteData.delimiter) ? [autoCompleteData.delimiter] : autoCompleteData.delimiter : ['@'];\n\n            function prevCharIsSpace() {\n                var start = ed.selection.getRng(true).startOffset,\n                      text = ed.selection.getRng(true).startContainer.data || '',\n                      charachter = text.substr(start > 0 ? start - 1 : 0, 1);\n\n                return (!!$.trim(charachter).length) ? false : true;\n            }\n\n            ed.on('keypress', function (e) {\n                var delimiterIndex = $.inArray(String.fromCharCode(e.which || e.keyCode), autoCompleteData.delimiter);\n                if (delimiterIndex > -1 && prevCharIsSpace()) {\n                    if (autoComplete === undefined || (autoComplete.hasFocus !== undefined && !autoComplete.hasFocus)) {\n                        e.preventDefault();\n                        // Clone options object and set the used delimiter.\n                        autoComplete = new AutoComplete(ed, $.extend({}, autoCompleteData, { delimiter: autoCompleteData.delimiter[delimiterIndex] }));\n                    }\n                }\n            });\n\n        },\n\n        getInfo: function () {\n            return {\n                longname: 'mention',\n                author: 'Steven Devooght',\n                version: tinymce.majorVersion + '.' + tinymce.minorVersion\n            };\n        }\n    });\n\n    tinymce.PluginManager.add('mention', tinymce.plugins.Mention);\n  \n});"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/package.json",
    "content": "{\n    \"name\": \"tinymce-mention\",\n    \"version\": \"4.0.2\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/StevenDevooght/tinyMCE-mention\"\n    },\n    \"description\": \"Mention/Autocomplete plugin for tinyMCE WYSIWYG editor\",\n    \"author\": \"Steven Devooght\",\n    \"bugs\": {\n        \"url\": \"https://github.com/StevenDevooght/tinyMCE-mention/issues\"\n    },\n    \"engines\": {\n        \"node\": \">=0.10.26\"\n    },\n    \"dependencies\": {\n        \"jquery\": \">=1.8.3\"\n    },\n    \"devDependencies\": {\n        \"gulp\": \"~3.9.1\",\n        \"gulp-qunit\": \"~1.3.1\",\n        \"gulp-bower\": \"~0.0.13\",\n        \"gulp-jshint\": \"~2.0.0\",\n        \"jshint\": \"~2.9.1\"\n    },\n    \"main\": \"mention/plugin.js\",\n    \"scripts\": {\n        \"test\": \"gulp lint test\"\n    }\n}"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/plugin.js",
    "content": "/*global tinymce, module, require, define, global, self */\n\n;(function (f) {\n  'use strict';\n\n  // CommonJS\n  if (typeof exports === 'object' && typeof module !== 'undefined') {\n    module.exports = f(require('jquery'));\n\n  // RequireJS\n  } else if (typeof define === 'function'  && define.amd) {\n    define(['jquery'], f);\n\n  // <script>\n  } else {\n    var g;\n    if (typeof window !== 'undefined') {\n      g = window;\n    } else if (typeof global !== 'undefined') {\n      g = global;\n    } else if (typeof self !== 'undefined') {\n      g = self;\n    } else {\n      g = this;\n    }\n    \n    f(g.jQuery);\n  }\n\n})(function ($) {\n    'use strict';\n\n    var AutoComplete = function (ed, options) {\n        this.editor = ed;\n\n        this.options = $.extend({}, {\n            source: [],\n            delay: 500,\n            queryBy: 'name',\n            items: 10\n        }, options);\n\n        this.options.insertFrom = this.options.insertFrom || this.options.queryBy;\n\n        this.matcher = this.options.matcher || this.matcher;\n        this.sorter = this.options.sorter || this.sorter;\n        this.renderDropdown = this.options.renderDropdown || this.renderDropdown;\n        this.render = this.options.render || this.render;\n        this.insert = this.options.insert || this.insert;\n        this.highlighter = this.options.highlighter || this.highlighter;\n\n        this.query = '';\n        this.hasFocus = true;\n\n        this.renderInput();\n\n        this.bindEvents();\n    };\n\n    AutoComplete.prototype = {\n\n        constructor: AutoComplete,\n\n        renderInput: function () {\n            var rawHtml =  '<span id=\"autocomplete\">' +\n                                '<span id=\"autocomplete-delimiter\">' + this.options.delimiter + '</span>' +\n                                '<span id=\"autocomplete-searchtext\"><span class=\"dummy\">\\uFEFF</span></span>' +\n                            '</span>';\n\n            this.editor.execCommand('mceInsertContent', false, rawHtml);\n            this.editor.focus();\n            this.editor.selection.select(this.editor.selection.dom.select('span#autocomplete-searchtext span')[0]);\n            this.editor.selection.collapse(0);\n        },\n\n        bindEvents: function () {\n            this.editor.on('keyup', this.editorKeyUpProxy = $.proxy(this.rteKeyUp, this));\n            this.editor.on('keydown', this.editorKeyDownProxy = $.proxy(this.rteKeyDown, this), true);\n            this.editor.on('click', this.editorClickProxy = $.proxy(this.rteClicked, this));\n\n            $('body').on('click', this.bodyClickProxy = $.proxy(this.rteLostFocus, this));\n\n            $(this.editor.getWin()).on('scroll', this.rteScroll = $.proxy(function () { this.cleanUp(true); }, this));\n        },\n\n        unbindEvents: function () {\n            this.editor.off('keyup', this.editorKeyUpProxy);\n            this.editor.off('keydown', this.editorKeyDownProxy);\n            this.editor.off('click', this.editorClickProxy);\n\n            $('body').off('click', this.bodyClickProxy);\n\n            $(this.editor.getWin()).off('scroll', this.rteScroll);\n        },\n\n        rteKeyUp: function (e) {\n            switch (e.which || e.keyCode) {\n            //DOWN ARROW\n            case 'ArrowDown':\n            //UP ARROW\n            case 'ArrowUp':\n            //SHIFT\n            case 'Shift':\n            //CTRL\n            case 'Ctrl':\n            //ALT\n            case 'Alt':\n                break;\n\n            //BACKSPACE\n            case 8:\n                if (this.query === '') {\n                    this.cleanUp(true);\n                } else {\n                    this.lookup();\n                }\n                break;\n\n            //TAB\n            case 9:\n            //ENTER\n            case 13:\n                var item = (this.$dropdown !== undefined) ? this.$dropdown.find('li.active') : [];\n                if (item.length) {\n                    this.select(item.data());\n                    this.cleanUp(false);\n                } else {\n                    this.cleanUp(true);\n                }\n                break;\n\n            //ESC\n            case 27:\n                this.cleanUp(true);\n                break;\n\n            default:\n                this.lookup();\n            }\n        },\n\n        rteKeyDown: function (e) {\n            switch (e.code) {\n             //TAB\n            case 9:\n            //ENTER\n            case 13:\n            //ESC\n            case 27:\n                e.preventDefault();\n                break;\n\n            //UP ARROW\n            case 38:\n                e.preventDefault();\n                if (this.$dropdown !== undefined) {\n                    this.highlightPreviousResult();\n                }\n                break;\n            //DOWN ARROW\n            case 'ArrowDown':\n                e.preventDefault();\n                if (this.$dropdown !== undefined) {\n                    this.highlightNextResult();\n                }\n                break;\n            }\n\n            e.stopPropagation();\n        },\n\n        rteClicked: function (e) {\n            var $target = $(e.target);\n\n            if (this.hasFocus && $target.parent().attr('id') !== 'autocomplete-searchtext') {\n                this.cleanUp(true);\n            }\n        },\n\n        rteLostFocus: function () {\n            if (this.hasFocus) {\n                this.cleanUp(true);\n            }\n        },\n\n        lookup: function () {\n            this.query = $.trim($(this.editor.getBody()).find('#autocomplete-searchtext').text()).replace('\\ufeff', '');\n\n            if (this.$dropdown === undefined) {\n                this.show();\n            }\n\n            clearTimeout(this.searchTimeout);\n            this.searchTimeout = setTimeout($.proxy(function () {\n                // Added delimiter parameter as last argument for backwards compatibility.\n                var items = $.isFunction(this.options.source) ? this.options.source(this.query, $.proxy(this.process, this), this.options.delimiter) : this.options.source;\n                if (items) {\n                    this.process(items);\n                }\n            }, this), this.options.delay);\n        },\n\n        matcher: function (item) {\n            return ~item[this.options.queryBy].toLowerCase().indexOf(this.query.toLowerCase());\n        },\n\n        sorter: function (items) {\n            var beginswith = [],\n                caseSensitive = [],\n                caseInsensitive = [],\n                item;\n\n            while ((item = items.shift()) !== undefined) {\n                if (!item[this.options.queryBy].toLowerCase().indexOf(this.query.toLowerCase())) {\n                    beginswith.push(item);\n                } else if (~item[this.options.queryBy].indexOf(this.query)) {\n                    caseSensitive.push(item);\n                } else {\n                    caseInsensitive.push(item);\n                }\n            }\n\n            return beginswith.concat(caseSensitive, caseInsensitive);\n        },\n\n        highlighter: function (text) {\n            return text.replace(new RegExp('(' + this.query.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1') + ')', 'ig'), function ($1, match) {\n                return '<strong>' + match + '</strong>';\n            });\n        },\n\n        show: function () {\n            var offset = this.editor.inline ? this.offsetInline() : this.offset();\n\n            this.$dropdown = $(this.renderDropdown())\n                                .css({ 'top': offset.top, 'left': offset.left });\n\n            $('body').append(this.$dropdown);\n\n            // Out of bounds?\n            if (this.$dropdown.width() + offset.left > $(document).width()) {\n                this.$dropdown.css({'right':0, 'left': 'auto'});\n            }\n\n            this.$dropdown.on('click', $.proxy(this.autoCompleteClick, this));\n        },\n\n        process: function (data) {\n            if (!this.hasFocus) {\n                return;\n            }\n\n            var _this = this,\n                result = [],\n                items = $.grep(data, function (item) {\n                    return _this.matcher(item);\n                });\n\n            items = _this.sorter(items);\n\n            items = items.slice(0, this.options.items);\n\n            $.each(items, function (i, item) {\n                var $element = $(_this.render(item, i));\n\n                $element.html($element.html().replace($element.text(), _this.highlighter($element.text())));\n\n                $.each(items[i], function (key, val) {\n                    $element.attr('data-' + key, val);\n                });\n\n                result.push($element[0].outerHTML);\n            });\n\n            if (result.length) {\n                this.$dropdown.html(result.join('')).show();\n            } else {\n                this.$dropdown.hide();\n                this.$dropdown.find('li').removeClass('active');\n            }\n        },\n\n        renderDropdown: function () {\n            return '<ul class=\"rte-autocomplete dropdown-menu\"><li class=\"loading\"></li></ul>';\n        },\n\n        render: function (item, index) {\n            return '<li>' +\n                        '<a href=\"javascript:;\"><span>' + item[this.options.queryBy] + '</span></a>' +\n                    '</li>';\n        },\n\n        autoCompleteClick: function (e) {\n            var item = $(e.target).closest('li').data();\n            if (!$.isEmptyObject(item)) {\n                this.select(item);\n                this.cleanUp(false);\n            }\n            e.stopPropagation();\n            e.preventDefault();\n        },\n\n        highlightPreviousResult: function () {\n            var currentIndex = this.$dropdown.find('li.active').index(),\n                index = (currentIndex === 0) ? this.$dropdown.find('li').length - 1 : --currentIndex;\n\n            this.$dropdown.find('li').removeClass('active').eq(index).addClass('active');\n        },\n\n        highlightNextResult: function () {\n            var currentIndex = this.$dropdown.find('li.active').index(),\n                index = (currentIndex === this.$dropdown.find('li').length - 1) ? 0 : ++currentIndex;\n\n            this.$dropdown.find('li').removeClass('active').eq(index).addClass('active');\n        },\n\n        select: function (item) {\n            this.editor.focus();\n            var selection = this.editor.dom.select('span#autocomplete')[0];\n            this.editor.dom.remove(selection);\n            this.editor.execCommand('mceInsertContent', false, this.insert(item));\n        },\n\n        insert: function (item) {\n            return '<span>' + item[this.options.insertFrom] + '</span>&nbsp;';\n        },\n\n        cleanUp: function (rollback) {\n            this.unbindEvents();\n            this.hasFocus = false;\n\n            if (this.$dropdown !== undefined) {\n                this.$dropdown.remove();\n                delete this.$dropdown;\n            }\n\n            if (rollback) {\n                var text = this.query,\n                    $selection = $(this.editor.dom.select('span#autocomplete'));\n\n                if (!$selection.length) {\n                    return;\n                }\n                    \n                var replacement = $('<p>' + this.options.delimiter + text + '</p>')[0].firstChild,\n                    focus = $(this.editor.selection.getNode()).offset().top === ($selection.offset().top + (($selection.outerHeight() - $selection.height()) / 2));\n\n                this.editor.dom.replace(replacement, $selection[0]);\n\n                if (focus) {\n                    this.editor.selection.select(replacement);\n                    this.editor.selection.collapse();\n                }\n            }\n        },\n\n        offset: function () {\n            var rtePosition = $(this.editor.getContainer()).offset(),\n                contentAreaPosition = $(this.editor.getContentAreaContainer()).position(),\n                nodePosition = $(this.editor.dom.select('span#autocomplete')).position();\n\n            return {\n                top: rtePosition.top + contentAreaPosition.top + nodePosition.top + $(this.editor.selection.getNode()).innerHeight() - $(this.editor.getDoc()).scrollTop() + 5,\n                left: rtePosition.left + contentAreaPosition.left + nodePosition.left\n            };\n        },\n\n        offsetInline: function () {\n            var nodePosition = $(this.editor.dom.select('span#autocomplete')).offset();\n\n            return {\n                top: nodePosition.top + $(this.editor.selection.getNode()).innerHeight() + 5,\n                left: nodePosition.left\n            };\n        }\n\n    };\n\n    tinymce.create('tinymce.plugins.Mention', {\n\n        init: function (ed) {\n\n            var autoComplete,\n                autoCompleteData = ed.getParam('mentions');\n\n            // If the delimiter is undefined set default value to ['@'].\n            // If the delimiter is a string value convert it to an array. (backwards compatibility)\n            autoCompleteData.delimiter = (autoCompleteData.delimiter !== undefined) ? !$.isArray(autoCompleteData.delimiter) ? [autoCompleteData.delimiter] : autoCompleteData.delimiter : ['@'];\n\n            function prevCharIsSpace() {\n                var start = ed.selection.getRng(true).startOffset,\n                      text = ed.selection.getRng(true).startContainer.data || '',\n                      charachter = text.substr(start > 0 ? start - 1 : 0, 1);\n\n                return (!!$.trim(charachter).length) ? false : true;\n            }\n\n            ed.on('keypress', function (e) {\n                var delimiterIndex = $.inArray(String.fromCharCode(e.which || e.keyCode), autoCompleteData.delimiter);\n                if (delimiterIndex > -1 && prevCharIsSpace()) {\n                    if (autoComplete === undefined || (autoComplete.hasFocus !== undefined && !autoComplete.hasFocus)) {\n                        e.preventDefault();\n                        // Clone options object and set the used delimiter.\n                        autoComplete = new AutoComplete(ed, $.extend({}, autoCompleteData, { delimiter: autoCompleteData.delimiter[delimiterIndex] }));\n                    }\n                }\n            });\n\n        },\n\n        getInfo: function () {\n            return {\n                longname: 'mention',\n                author: 'Steven Devooght',\n                version: tinymce.majorVersion + '.' + tinymce.minorVersion\n            };\n        }\n    });\n\n    tinymce.PluginManager.add('mention', tinymce.plugins.Mention);\n  \n});"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/tests/test_mention.js",
    "content": "/*global QUnit, tinymce, jQuery */\n\n(function(tinymce, $, QUnit){\n    'use strict';\n\n    var editor;\n\n    function pressDelimiter() {\n        editor.fire('keypress', { which: 64 });\n        editor.fire('keyup');\n    }\n\n    function pressArrowUp() {\n        editor.fire('keydown', { which: 38 });\n        editor.fire('keyup', { which: 38 });\n    }\n\n    function pressArrowDown() {\n        editor.fire('keydown', { which: 40 });\n        editor.fire('keyup', { which: 40 });\n    }\n\n    function pressEscape() {\n        editor.fire('keydown', { which: 27 });\n        editor.fire('keyup', { which: 27 });\n    }\n\n    function pressEnter() {\n        editor.fire('keydown', { which: 13 });\n        editor.fire('keyup', { which: 13 });\n    }\n\n    function insertText(text) {\n        var i;\n        for (i = 0; i < text.length; i++) {\n            editor.insertContent(text[i]);\n            editor.fire('keyup', { which: text.charCodeAt(i) });\n        }\n    }\n\n    QUnit.config.autostart = false;\n\n    QUnit.module('Mention', {\n        setup: function () {\n            editor = tinymce.get('rte');\n        }\n    });\n\n    QUnit.testDone(function () {\n        pressEscape();\n        editor.setContent('');\n    });\n\n    QUnit.test('basic test', function (assert) {\n        assert.expect(2);\n\n        pressDelimiter();\n\n        assert.ok($('.rte-autocomplete li.loading').length, 'Loading entries...');\n\n        var done = assert.async();\n\n        setTimeout(function () {\n            assert.equal($('.rte-autocomplete li').length, 10, 'First 10 entries loaded.');\n            done();\n        }, 600);\n    });\n\n    QUnit.test('keyboard navigation', function (assert) {\n        assert.expect(5);\n\n        pressDelimiter();\n\n        var done = assert.async();\n\n        setTimeout(function () {\n            pressArrowDown();\n\n            assert.ok($('.rte-autocomplete li:eq(0)').hasClass('active'), 'First entry highlighted.');\n            assert.ok(!$('.rte-autocomplete li:eq(1)').hasClass('active'), 'Second entry not highlighted.');\n\n            pressArrowDown();\n\n            assert.ok(!$('.rte-autocomplete li:eq(0)').hasClass('active'), 'First entry not highlighted.');\n            assert.ok($('.rte-autocomplete li:eq(1)').hasClass('active'), 'Second entry highlighted.');\n\n            pressArrowUp();\n            pressArrowUp();\n\n            assert.ok($('.rte-autocomplete li:last').hasClass('active'), 'Last entry highlighted.');\n\n            done();\n        }, 600);\n    });\n\n    QUnit.test('search entry', function (assert) {\n        assert.expect(2);\n\n        pressDelimiter();\n        insertText('st');\n\n        var done = assert.async();\n\n        setTimeout(function () {\n            assert.equal($('.rte-autocomplete li').length, 5, '5 entries filtered.');\n\n            insertText('o');\n            var done2 = assert.async();\n\n            setTimeout(function () {\n                assert.equal($('.rte-autocomplete li').length, 1, '1 entry filtered.');\n\n                done2();\n            }, 600);\n\n            done();\n        }, 600);\n    });\n\n    QUnit.test('pick entry', function (assert) {\n        assert.expect(4);\n\n        pressDelimiter();\n\n        var done = assert.async();\n\n        setTimeout(function () {\n            assert.equal($('.rte-autocomplete li').length, 10, 'First 10 entries loaded.');\n\n            $('.rte-autocomplete li:eq(1)').click();\n\n            assert.equal(editor.getContent(), '<p>Jenniffer Caffey&nbsp;</p>', 'Entry submitted.');\n\n            insertText('will look into this. ');\n            insertText('Can you also have a look ');\n            pressDelimiter();\n            insertText('eliz');\n\n            var done2 = assert.async();\n\n            setTimeout(function () {\n                assert.equal($('.rte-autocomplete li').length, 1, '1 entry loaded.');\n\n                pressArrowDown();\n                pressArrowDown();\n                pressEnter();\n\n                assert.equal(editor.getContent(), '<p>Jenniffer Caffey&nbsp;will&nbsp;look&nbsp;into&nbsp;this.&nbsp;Can&nbsp;you&nbsp;also&nbsp;have&nbsp;a&nbsp;look&nbsp;Elizabet Gebhart&nbsp;</p>', 'Second entry submitted.');\n\n                done2();\n            }, 600);\n\n            done();\n        }, 600);\n    });\n\n    QUnit.test('cancel out', function (assert) {\n        assert.expect(4);\n\n        pressDelimiter();\n        insertText('ta');\n\n        var done = assert.async();\n\n        setTimeout(function () {\n            assert.equal($('.rte-autocomplete li').length, 3, '3 entries loaded.');\n\n            pressEscape();\n\n            assert.equal(editor.getContent(), '<p>@ta</p>', 'Original text present.');\n\n            pressDelimiter();\n            insertText('ba');\n\n            var done2 = assert.async();\n\n            setTimeout(function () {\n                assert.equal($('.rte-autocomplete li').length, 2, '2 entries loaded.');\n\n                editor.fire('click');\n\n                assert.equal(editor.getContent(), '<p>@ta@ba</p>', 'Original text present.');\n\n                done2();\n            }, 600);\n\n            done();\n        }, 600);\n    });\n\n}(tinymce, jQuery, QUnit));"
  },
  {
    "path": "resources/vendor/tinymce/plugins/mention/tests/test_runner.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>tinyMCE-mention</title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\"/>\n    <link rel=\"stylesheet\" href=\"../bower_components/qunit/qunit/qunit.css\" type=\"text/css\" media=\"screen\">\n    <link rel=\"stylesheet\" href=\"../css/autocomplete.css\" type=\"text/css\" media=\"screen\">\n    <script src=\"../bower_components/jquery/dist/jquery.min.js\"></script>\n    <script src=\"../bower_components/qunit/qunit/qunit.js\"></script>\n    <script src=\"../bower_components/tinymce-dist/tinymce.min.js\"></script>\n    <script type=\"text/javascript\" src=\"test_mention.js\"></script>\n    <script type=\"text/javascript\" src=\"../mention/plugin.js\"></script>\n    <script type=\"text/javascript\">\n\n        tinyMCE.init({\n            mode : \"exact\",\n            elements : \"rte\",\n            plugins : 'mention',\n            mentions: {\n                source: [\n                    { name: 'Jammie Marbury'},\n                    { name: 'Jenniffer Caffey'},\n                    { name: 'Paul Hollen'},\n                    { name: 'Isabel Lenzi'},\n                    { name: 'Rebecka Kennell'},\n                    { name: 'Collette Janis'},\n                    { name: 'Bryon Kawamoto'},\n                    { name: 'Jerald Mozingo'},\n                    { name: 'Carlena Bachelor'},\n                    { name: 'Jacinta Diver'},\n                    { name: 'Cameron Libbey'},\n                    { name: 'Romana Matsunaga'},\n                    { name: 'Laurette Ernst'},\n                    { name: 'Gilma Groom'},\n                    { name: 'Lewis Gillis'},\n                    { name: 'Weston Defoor'},\n                    { name: 'Alejandrina Simmer'},\n                    { name: 'Alejandra Helbing'},\n                    { name: 'Yvette Fielding'},\n                    { name: 'Shirely Besaw'},\n                    { name: 'Laurel Dafoe'},\n                    { name: 'Shantel Calley'},\n                    { name: 'Aleta Bolyard'},\n                    { name: 'Tuyet Ybarbo'},\n                    { name: 'Christy Voris'},\n                    { name: 'Hilda Hamlett'},\n                    { name: 'Ying Tefft'},\n                    { name: 'Lilliana Fulford'},\n                    { name: 'Jama Brough'},\n                    { name: 'Minerva Bixby'},\n                    { name: 'Jacquelin Lauber'},\n                    { name: 'Lanette Hoke'},\n                    { name: 'Virgil Roehr'},\n                    { name: 'Melodi Rathburn'},\n                    { name: 'Tressa Cade'},\n                    { name: 'Florentina Seigel'},\n                    { name: 'Santina Maust'},\n                    { name: 'Sean Spidle'},\n                    { name: 'Henrietta Murtagh'},\n                    { name: 'Matilde Tynan'},\n                    { name: 'Claude Putman'},\n                    { name: 'Ardell Castiglia'},\n                    { name: 'Alona Mally'},\n                    { name: 'Elizabet Gebhart'},\n                    { name: 'Maye Wilken'},\n                    { name: 'Xenia Gin'},\n                    { name: 'Edith Schebler'},\n                    { name: 'Brianna Repka'},\n                    { name: 'Marcella Thronson'},\n                    { name: 'Theresia Provenzano'}\n                ]\n            },\n            init_instance_callback : function(ed) {\n                QUnit.start();\n            }\n        });\n\n    </script>\n</head>\n<body>\n\n    <div id=\"qunit\"></div>\n    <div id=\"qunit-fixture\"></div>\n\n    <textarea id=\"rte\" style=\"width: 100%;\"></textarea>\n\n</body>\n</html>"
  },
  {
    "path": "resources/views/abilities/abilities.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('abilities.abilities', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('abilities.abilities', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n\n    @include('entities.pages.subpage', [\n        'active' => 'abilities',\n        'view' => 'abilities.panels.abilities',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/abilities/entities/_form.blade.php",
    "content": "<?php /** @var \\App\\Models\\Ability $model */?>\n\n<x-helper>\n    <p>{{ __('abilities.children.create.helper', ['name' => $model->name]) }}</p>\n</x-helper>\n\n<x-grid type=\"1/1\">\n    <x-forms.foreign\n        field=\"entities\"\n        required\n        label=\"entities.entries\"\n        multiple=\"multiple\"\n        name=\"entities[]\"\n        id=\"entities[]\"\n        :campaign=\"$campaign\"\n        :route=\"route('search.ability-entities', [$campaign, 'exclude-entity' => $model->entity->id])\"\n    >\n    </x-forms.foreign>\n\n    @include('cruds.fields.visibility_id', ['model' => null])\n</x-grid>\n"
  },
  {
    "path": "resources/views/abilities/entities/actions/delete.blade.php",
    "content": "@can('update', $model->entity)\n<x-dropdowns.item\n    link=\"#\"\n    css=\"text-error-content hover:bg-error\"\n    :dialog=\"route('confirm-delete', [$campaign, 'route' => route('entities.entity_abilities.destroy', [\n    $campaign,\n    'entity' => $model->entity,\n    'entity_ability' => $model->id,\n    'from' => 'ability'\n    ]), 'name' => $model->entity->name, 'permanent' => true])\"\n    icon=\"trash\">\n    {{ __('crud.remove') }}\n</x-dropdowns.item>\n@endcan\n"
  },
  {
    "path": "resources/views/abilities/entities/create.blade.php",
    "content": "<?php /** @var \\App\\Models\\Ability $model */ ?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('abilities.children.create.title'),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($model->entity)->list(),\n        Breadcrumb::show(),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"$formOptions\">\n        @include('partials.forms._dialog', [\n            'title' => __('abilities.children.create.title'),\n            'content' => 'abilities.entities._form',\n        ])\n        <input type=\"hidden\" name=\"ability_id\" value=\"{{ $model->entity->id }}\" />\n    </x-form>\n\n@endsection\n"
  },
  {
    "path": "resources/views/abilities/entities.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . __('entities.entries'),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        @can('update', $entity)\n            <a href=\"{{ route('abilities.entity-add', [$campaign, $model]) }}\" class=\"btn2 btn-sm\"\n               data-toggle=\"dialog\" data-url=\"{{ route('abilities.entity-add', [$campaign, $model]) }}\">\n                <x-icon class=\"plus\" /> <span class=\"hidden md:inline\">{{ __('abilities.children.actions.attach') }}</span>\n            </a>\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'entities',\n        'view' => 'abilities.panels.entities',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/abilities/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Ability::class, 'trans' => 'abilities'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.charges')\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/abilities/panels/abilities.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Ability $model */\n// Only get the data by AJAX if this is included with a 'onload' param\n$allChildren = (request()->get('m') == \\App\\Enums\\Descendants::All->value || (!request()->has('m') && $campaign->defaultDescendantsMode() === \\App\\Enums\\Descendants::All));\n$datagridOptions = [];\n\nif (!empty($onload)) {\n    $routeOptions = [\n        $campaign,\n        $entity->child,\n        'init' => 1,\n    ];\n    if ($allChildren) {\n        $routeOptions['m'] = \\App\\Enums\\Descendants::All;\n    }\n    $routeOptions = Datagrid::initOptions($routeOptions);\n    $datagridOptions =\n        ['datagridUrl' => route('abilities.abilities', $routeOptions)]\n    ;\n}\n?>\n@if (!empty($onload))\n    @php\n    $direct = $entity->descendants()->count();\n    $all = $entity->children()->count();\n    @endphp\n<div class=\"flex gap-2 items-center\">\n    <h3 class=\"text-xl grow\">\n        {!! \\App\\Facades\\Module::plural(config('entities.ids.ability'), __('entities.abilities')) !!}\n    </h3>\n    <div class=\"flex gap-2 flex-wrap overflow-auto\">\n        @if (!$allChildren)\n            <a href=\"{{ route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::All, '#abilities-abilities']) }}\" class=\"btn2 btn-sm\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">\n                    {{ __('crud.filters.lists.desktop.all', ['count' => $all]) }}\n                </span>\n                <span class=\"xl:hidden\">\n                    {{ $all }}\n                </span>\n            </a>\n        @else\n            <a href=\"{{ route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::Direct, '#abilities-abilities']) }}\" class=\"btn2 btn-sm\">\n                <x-icon class=\"filter\" />\n\n                <span class=\"hidden xl:inline\">\n                    {{ __('crud.filters.lists.desktop.filtered', ['count' => $direct]) }}\n                </span>\n                <span class=\"xl:hidden\">\n                    {{ $direct  }}\n                </span>\n            </a>\n        @endif\n    </div>\n</div>\n@endif\n<div id=\"abilities-abilities\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', $datagridOptions)\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/abilities/panels/entities.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n<div id=\"ability-entities\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/abilities/show.blade.php",
    "content": "@inject('attributeService', 'App\\Services\\AttributeService')\n\n<div class=\"entity-grid flex flex-col gap-5\">\n\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n            @includeWhen($entity->entityAttributes->count() > 0, 'entities.pages.attributes._story')\n\n            @includeWhen($entity->children()->count() > 0, 'abilities.panels.abilities', ['onload' => true])\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n\n\n"
  },
  {
    "path": "resources/views/account/billing/information/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('settings.billing.placeholder') }}</p>\n    </x-helper>\n\n    <textarea name=\"profile[billing]\" placeholder=\"\" class=\"w-full rounded border p-2 mb-2\" rows=\"5\" maxlength=\"1024\">{!! old('profile[billing]', \\Illuminate\\Support\\Arr::get($user->profile, 'billing')) !!}</textarea>\n</x-grid>\n"
  },
  {
    "path": "resources/views/account/billing/information/form.blade.php",
    "content": "<x-form :action=\"['account.billing.info-save']\" method=\"PATCH\">\n    @include('partials.forms._dialog', [\n        'title' => __('billing/information.title'),\n        'content' => 'account.billing.information._form',\n        'submit' => __('settings.billing.save')\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/account/email/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('account/email.subtitle') }}</p>\n    </x-helper>\n\n    <x-forms.field field=\"email\" required :label=\"__('account/email.fields.email')\" :helper=\"__('account/email.helpers.email')\">\n        <input type=\"email\" name=\"email\" value=\"{{ old('email', $user->email) }}\" placeholder=\"{{ __('profiles.placeholders.email') }}\" autocomplete=\"email\" />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/account/email/form.blade.php",
    "content": "<x-form :action=\"['account.email-save']\" method=\"PATCH\">\n    @include('partials.forms._dialog', [\n        'title' => __('account/email.title'),\n        'content' => 'account.email._form',\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/account/password/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('account/password.subtitle') }}</p>\n    </x-helper>\n\n    <x-forms.field field=\"new-password\" required :label=\"__('profiles.fields.new_password')\" :helper=\"__('account/password.helpers.password')\">\n        <input type=\"password\" name=\"password_new\" placeholder=\"{{ __('profiles.placeholders.new_password') }}\" autocomplete=\"new-password\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"password-confirm\" required :label=\"__('profiles.fields.new_password_confirmation')\" :helper=\"__('account/password.helpers.password-confirmation')\">\n        <input type=\"password\" name=\"password_new_confirmation\" placeholder=\"{{ __('profiles.placeholders.new_password_confirmation') }}\" autocomplete=\"new-password\" />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/account/password/form.blade.php",
    "content": "<x-form :action=\"['account.password-save']\" method=\"PATCH\">\n    @include('partials.forms._dialog', [\n        'title' => __('account/password.title'),\n        'content' => 'account.password._form',\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/account/social/form.blade.php",
    "content": "<x-form :action=\"['account.social-save']\" method=\"PATCH\">\n    @include('partials.forms._dialog', [\n        'title' => __('account/social.title'),\n        'content' => 'account.password._form',\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/ads/anchor.blade.php",
    "content": "<x-ad section=\"siderail_right\" :campaign=\"isset($campaign) ? $campaign : null\">\n    <div id=\"ad-nitro-sticky\"></div>\n\n    <script>\n        window['nitroAds'].createAd('ad-nitro-sticky', {\n            \"format\": \"anchor-v2\",\n            \"anchor\": \"bottom\",\n            \"anchorBgColor\": \"rgb(0 0 0 / 80%)\",\n            \"anchorClose\": true,\n            \"anchorPersistClose\": false,\n            \"anchorStickyOffset\": 0,\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"top-right\"\n            },\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n</x-ad>\n"
  },
  {
    "path": "resources/views/ads/cta.blade.php",
    "content": "<x-ad section=\"leaderboard\" :campaign=\"isset($campaign) ? $campaign : null\">\n\n    \n</x-ad>\n"
  },
  {
    "path": "resources/views/ads/inline.blade.php",
    "content": "<x-ad section=\"leaderboard\" :campaign=\"isset($campaign) ? $campaign : null\">\n    @php\n        $adId = 'nitro-inline' . (isset($postCount) ? '-' . $postCount : null);\n        $adIdMobile = 'nitro-inline-mobile' . (isset($postCount) ? '-' . $postCount : null);\n    @endphp\n    <div id=\"{{ $adId }}\"></div>\n\n    <script>\n        window['nitroAds'].createAd('{{ $adId }}', {\n            \"sizes\": [\n                [\n                    \"300\",\n                    \"250\"\n                ],\n                [\n                    \"728\",\n                    \"90\"\n                ],\n                [\n                    \"970\",\n                    \"90\"\n                ],\n                [\n                    \"970\",\n                    \"250\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(min-width: 1025px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n\n    <div id=\"{{ $adIdMobile }}\"></div>\n\n    <script>\n        window['nitroAds'].createAd('{{ $adIdMobile }}', {\n            \"sizes\": [\n                [\n                    \"320\",\n                    \"50\"\n                ],\n                [\n                    \"320\",\n                    \"100\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(max-width: 767px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n\n    @isset($cta)\n        @php $amount = auth()->check() && auth()->user()->currency() === 'brl' ? 20 : 5; @endphp\n        <p class=\"italic mb-4 mx-4\">\n            {!! __('misc.ads.remove_v5', [\n            'amount' => $amount,\n            'currency' => auth()->check() ? auth()->user()->currencySymbol() : '$',\n            'premium' =>  __('concept.premium-campaigns'),\n            ]) !!}\n            <a href=\"{{ route('settings.subscription') }}\" class=\"text-link\">\n                {{ __('misc.ads.member') }}\n            </a>\n        </p>\n    @endif\n</x-ad>\n"
  },
  {
    "path": "resources/views/ads/nitro/styles.blade.php",
    "content": "<x-ad section=\"leaderboard\" script :campaign=\"isset($campaign) ? $campaign : null\">\n    <script data-cfasync=\"false\">window.nitroAds=window.nitroAds||{createAd:function(){return new Promise(e=>{window.nitroAds.queue.push([\"createAd\",arguments,e])})},addUserToken:function(){window.nitroAds.queue.push([\"addUserToken\",arguments])},queue:[]};</script>\n    <script data-cfasync=\"false\" async src=\"https://s.nitropay.com/ads-2222.js\"></script>\n</x-ad>\n"
  },
  {
    "path": "resources/views/ads/siderail_left.blade.php",
    "content": "<x-ad section=\"siderail_left\" :campaign=\"isset($campaign) ? $campaign : null\">\n    <div id=\"ad-nitro-siderail-left\"></div>\n\n    <script>\n        window['nitroAds'].createAd('ad-nitro-siderail-left', {\n            \"sizes\": [\n                [\n                    \"160\",\n                    \"600\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(min-width: 1025px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n\n    <div id=\"ad-nitro-siderail-left-mobile\"></div>\n\n    <script>\n        window['nitroAds'].createAd('ad-nitro-siderail-left-mobile', {\n            \"sizes\": [\n                [\n                    \"320\",\n                    \"100\"\n                ],\n                [\n                    \"320\",\n                    \"50\"\n                ],\n                [\n                    \"300\",\n                    \"250\"\n                ],\n                [\n                    \"320\",\n                    \"480\"\n                ],\n                [\n                    \"336\",\n                    \"280\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(max-width: 767px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n</x-ad>\n"
  },
  {
    "path": "resources/views/ads/siderail_right.blade.php",
    "content": "<x-ad section=\"siderail_right\" :campaign=\"isset($campaign) ? $campaign : null\">\n    <div id=\"ad-nitro-siderail-right\"></div>\n\n    <script>\n        window['nitroAds'].createAd('ad-nitro-siderail-right', {\n            \"sizes\": [\n                [\n                    \"160\",\n                    \"600\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(min-width: 1025px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n\n\n    <div id=\"ad-nitro-siderail-right-mobile\"></div>\n\n    <script>\n        window['nitroAds'].createAd('ad-nitro-siderail-right-mobile', {\n            \"sizes\": [\n                [\n                    \"320\",\n                    \"100\"\n                ],\n                [\n                    \"320\",\n                    \"50\"\n                ],\n                [\n                    \"300\",\n                    \"250\"\n                ],\n                [\n                    \"320\",\n                    \"480\"\n                ],\n                [\n                    \"336\",\n                    \"280\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(max-width: 767px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n</x-ad>\n"
  },
  {
    "path": "resources/views/ads/table.blade.php",
    "content": "<x-ad section=\"leaderboard\" :campaign=\"isset($campaign) ? $campaign : null\">\n    @php\n        $adId = 'nitro-row-' . $rows;\n        $adIdMobile = 'nitro-row-mobile-' . $rows;\n    @endphp\n    <div id=\"{{ $adId }}\"></div>\n\n    <script>\n        window['nitroAds'].createAd('{{ $adId }}', {\n            \"sizes\": [\n                [\n                    \"300\",\n                    \"250\"\n                ],\n                [\n                    \"728\",\n                    \"90\"\n                ],\n                [\n                    \"970\",\n                    \"90\"\n                ],\n                [\n                    \"970\",\n                    \"250\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(min-width: 1025px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n\n    <div id=\"{{ $adIdMobile }}\"></div>\n\n    <script>\n        window['nitroAds'].createAd('{{ $adIdMobile }}', {\n            \"sizes\": [\n                [\n                    \"320\",\n                    \"50\"\n                ],\n                [\n                    \"320\",\n                    \"100\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(max-width: 767px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n\n    @isset($cta)\n        @php $amount = auth()->check() && auth()->user()->currency() === 'brl' ? 20 : 5; @endphp\n        <p class=\"italic mb-4 mx-4\">\n            {!! __('misc.ads.remove_v5', [\n            'amount' => $amount,\n            'currency' => auth()->check() ? auth()->user()->currencySymbol() : '$',\n            'premium' =>  __('concept.premium-campaigns'),\n            ]) !!}\n            <a href=\"{{ route('settings.subscription') }}\" class=\"text-link\">\n                {{ __('misc.ads.member') }}\n            </a>\n        </p>\n    @endif\n</x-ad>\n"
  },
  {
    "path": "resources/views/ads/top.blade.php",
    "content": "<x-ad section=\"leaderboard\" :campaign=\"isset($campaign) ? $campaign : null\">\n    <div id=\"ad-nitro-leaderboard\"></div>\n\n    <script>\n        window['nitroAds'].createAd('ad-nitro-leaderboard', {\n            \"sizes\": [\n                [\n                    \"728\",\n                    \"90\"\n                ],\n                [\n                    \"970\",\n                    \"90\"\n                ],\n                [\n                    \"970\",\n                    \"250\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"bottom-right\"\n            },\n            \"mediaQuery\": \"(min-width: 1025px)\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n\n    <div id=\"ad-nitro-top-mobile\"></div>\n    <script>\n        window['nitroAds'].createAd('ad-nitro-top-mobile', {\n            \"sizes\": [\n                [\n                    \"320\",\n                    \"50\"\n                ],\n                [\n                    \"320\",\n                    \"100\"\n                ]\n            ],\n            \"report\": {\n                \"enabled\": true,\n                \"icon\": true,\n                \"wording\": \"Report Ad\",\n                \"position\": \"top-right\"\n            },\n            \"mediaQuery\": \"(max-width: 767px)\"\n        });\n    </script>\n\n    @php $amount = auth()->check() && auth()->user()->currency() === 'brl' ? 20 : 5; @endphp\n    <p class=\"italic mb-4 mx-4\">\n        {!! __('misc.ads.remove_v5', [\n        'amount' => $amount,\n        'currency' => auth()->check() ? auth()->user()->currencySymbol() : '$',\n        'premium' =>  __('concept.premium-campaigns'),\n        ]) !!}\n        <a href=\"{{ route('settings.subscription') }}\" class=\"text-link\">\n            {{ __('misc.ads.member') }}\n        </a>\n    </p>\n</x-ad>\n"
  },
  {
    "path": "resources/views/ads/video.blade.php",
    "content": "<x-ad section=\"video\" :campaign=\"isset($campaign) ? $campaign : null\">\n    <div id=\"ad-nitro-video\" class=\"mx-auto\"></div>\n    <script>\n        window['nitroAds'].createAd('ad-nitro-video', {\n            \"format\": \"floating\",\n            \"demo\": {{ request()->filled('nitro_demo') ? \"true\" : \"false\" }}\n        });\n    </script>\n\n</x-ad>\n"
  },
  {
    "path": "resources/views/attribute_templates/datagrid.blade.php",
    "content": "<?php /** @var \\App\\Models\\AttributeTemplate $model */ ?>\n\n{!! $datagrid\n    ->columns([\n        // Name\n        'name',\n        [\n            'type' => 'parent',\n        ],\n        [\n            'label' => __('entries/tabs.properties'),\n            'render' => function($model) {\n                return \\Illuminate\\Support\\Number::format($model->entity->attributes_count);\n            },\n            'disableSort' => true,\n        ],\n        [\n            'label' => __('attribute_templates.fields.auto_apply'),\n            'render' => function($model) {\n                return $model->entityType ? $model->entityType->name() : null;\n            },\n            'field' => 'entity_type_id'\n        ],\n        [\n            'label' => __('attribute_templates.fields.is_enabled'),\n            'field' => 'is_enabled',\n            'render' => function($model) {\n                if ($model->is_enabled) {\n                    return '<i class=\"fa-solid fa-check\" title=\"' . __('attribute_templates.fields.is_enabled') . '\"></i>';\n                }\n                return '';\n            },\n        ],\n\n        [\n            'label' => '<i class=\"' . $entityType->icon() . '\" title=\"' . $entityType->plural() . '\" aria-hidden=\"true\"></i>',\n            'render' => function($model) {\n                return \\Illuminate\\Support\\Number::format($model->children_count);\n            },\n            'disableSort' => true,\n        ],\n        [\n            'type' => 'is_private',\n        ]\n    ])\n    ->options([\n        'route' => 'attribute_templates.index',\n        'baseRoute' => 'attribute_templates',\n        'trans' => 'attribute_templates.fields.',\n    ]\n) !!}\n"
  },
  {
    "path": "resources/views/attribute_templates/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n\n    @include('cruds.fields.parent')\n\n    <x-forms.field field=\"entity-type\" :helper=\"__('attribute_templates.hints.entity_type')\">\n        @include('components.form.entity_types', ['options' => [\n            'model' => (isset($model) && $model->entityType ? $model->entityType : FormCopy::field('entityType')->related())\n        ], 'label' => 'attribute_templates.fields.auto_apply'])\n    </x-forms.field>\n\n    <x-forms.field field=\"enabled\" :label=\" __('attribute_templates.fields.is_enabled')\">\n        <input type=\"hidden\" name=\"is_enabled\" value=\"0\" />\n        <x-checkbox :text=\"__('attribute_templates.hints.is_enabled')\">\n            <input type=\"checkbox\" name=\"is_enabled\" value=\"1\" @if (isset($model) && !$model->is_enabled) @else checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/attribute_templates/show.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            <x-box>\n                @can('update', $entity)\n                    <p class=\"text-right\">\n                        <a href=\"{{ route('entities.attributes.edit', [$campaign, 'entity' => $entity]) }}\" class=\"btn2 btn-sm\">\n                            <x-icon class=\"fa-solid fa-list\" />\n                            <span class=\"hidden md:inline\">{{ __('entities/attributes.actions.manage') }}</span>\n                        </a>\n                    </p>\n                @endcan\n\n                @include('entities.pages.attributes.render', ['entity' => $entity])\n            </x-box>\n            @include('entities.components.posts')\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/auth/login.blade.php",
    "content": "@extends('layouts.login', ['title' => __('auth.login.title')])\n\n@section('content')\n    <h1 class=\"text-2xl leading-tight dark:text-slate-200\">{{ __('auth.login.title') }}</h1>\n\n    @if (session()->has('info'))\n        <div class=\"p-4 rounded bg-blue-200 text-blue-800\">\n            {!! session()->get('info')  !!}\n        </div>\n    @endif\n    @if (session()->has('error'))\n        <div class=\"p-4 rounded bg-red-500 text-red-800\">\n            {!! session()->get('error')  !!}\n        </div>\n    @endif\n\n\n    @if(config('auth.user_list'))\n        <ul class=\"\">\n            @foreach (\\App\\Models\\User::with('passwordSecurity')->limit(10)->orderBy('last_login_at', 'desc')->get() as $user)\n                <li>\n                    @if ($user->passwordSecurity) <i class=\"fa-solid fa-qrcode\" data-tooltip=\"2FA enabled\"></i> @endif\n                    <a href=\"{{ route('login-as-user', ['user' => $user]) }}\" class=\"text-blue-500 hover:text-blue-900\">\n                        {!! $user->name !!} @if ($user->pledge) ({!! $user->pledge !!}) @endif\n                    </a>\n                </li>\n            @endforeach\n        </ul>\n\n        <form method=\"GET\" action=\"{{ route('login-as') }}\" class=\"w-full flex flex-col gap-3\">\n            {{ csrf_field() }}\n            <select id=\"user\" name=\"user\" class=\"rounded border p-2 w-full dark:bg-slate-800 dark:border-slate-500\">\n                @foreach (\\App\\Models\\User::limit(30)->get() as $user)\n                    <option value=\"{{ $user->id }}\">{!! $user->name !!} @if ($user->pledge) ({!! $user->pledge !!}) @endif</option>\n                @endforeach\n            </select>\n\n            <button type=\"submit\" class=\"w-full rounded border border-blue-500 text-blue-500 uppercase px-6 py-2 transition-all bg-white hover:shadow-xs hover:bg-blue-500 hover:text-white dark:bg-slate-800\">\n                {{ __('auth.login.submit') }}\n            </button>\n        </form>\n    @else\n        <form method=\"POST\" action=\"{{ route('login') }}\" class=\"w-full flex flex-col gap-3\">\n            {{ csrf_field() }}\n            <div class=\"{{ $errors->has('email') ? ' has-error' : '' }}\">\n                <input id=\"email\" autocomplete=\"email\" type=\"email\" class=\"rounded border p-2 w-full dark:bg-slate-800 dark:border-slate-500\" name=\"email\" value=\"{{ old('email') }}\" placeholder=\"{{ __('auth.login.fields.email') }}\" required autofocus>\n\n                @if ($errors->has('email'))\n                    <span class=\"text-red-500\">\n                    {{ $errors->first('email') }}\n                    </span>\n                @endif\n            </div>\n\n            <div class=\"{{ $errors->has('password') ? ' has-error' : '' }}\">\n                <div class=\"flex items-stretch w-full\">\n                    <input id=\"password\" autocomplete=\"current-password\" type=\"password\" class=\"border rounded w-full p-2 dark:bg-slate-800 dark:border-slate-500\" name=\"password\" required placeholder=\"{{ __('auth.login.fields.password') }}\">\n                    <a href=\"#\" id=\"toggle-password\" class=\"input-group-addon p-2\" title=\"{{ __('auth.helpers.password') }}\">\n                        <i id=\"toggle-password-icon\" class=\"fa-regular fa-eye\" aria-hidden=\"true\"></i>\n                        <span class=\"sr-only\">{{ __('auth.helpers.password') }}</span>\n                    </a>\n                </div>\n\n                @if ($errors->has('password'))\n                    <span class=\"text-red-500\">\n                        {{ $errors->first('password') }}\n                    </span>\n                @endif\n            </div>\n\n            <input type=\"hidden\" name=\"remember\" value=\"1\" />\n\n            <button type=\"submit\" class=\"w-full rounded border border-blue-500 text-blue-500 uppercase px-6 py-2 transition-all bg-white hover:shadow-xs hover:bg-blue-500 hover:text-white dark:bg-slate-800\">\n                {{ __('auth.login.submit') }}\n            </button>\n        </form>\n    @endif\n\n    @if(config('auth.register_enabled'))\n        <p class=\"text-center text-sm\">\n            {{ __('auth.login.no-account') }}\n            <a class=\"text-blue-500 hover:text-blue-800 transition-all duration-150\" href=\"{{ route('register') }}\">\n                {{ __('auth.login.sign-up') }}\n            </a>\n        </p>\n    @endif\n\n@if(config('auth.register_enabled'))\n    <div class=\"social-auth-links flex flex-col gap-2\">\n        <p class=\"text-gray-500 dark:text-slate-200 text-center w-full\">- {{ __('auth.login.or') }} -</p>\n        @if(config('services.facebook.client_id'))\n        <a href=\"{{ route('auth.provider', ['provider' => 'facebook']) }}\" class=\"rounded border border-blue-500 text-blue-500 hover:text-white hover:bg-blue-500 px-6 py-2 transition-all duration-150 flex gap-3 items-center\" title=\"{{ __('auth.continue.facebook') }}\">\n            <x-icon class=\"fa-brands fa-facebook-f\" />\n            {{ __('auth.continue.facebook') }}\n        </a>\n        @endif\n\n        @if(config('services.google.client_id'))\n        <a href=\"{{ route('auth.provider', ['provider' => 'google']) }}\" class=\"rounded border border-red-400 text-red-400 hover:text-white hover:bg-red-400 px-6 py-2 transition-all duration-150 flex gap-3 items-center\" title=\"{{ __('auth.continue.google') }}\">\n            <x-icon class=\"fa-brands fa-google\" />\n            {{ __('auth.continue.google') }}\n        </a>\n        @endif\n\n        @if(config('services.twitter.client_id'))\n        <a href=\"{{ route('auth.provider', ['provider' => 'twitter']) }}\" class=\"rounded border border-blue-300 text-blue-300 hover:text-white hover:bg-blue-300 px-6 py-2 transition-all duration-150 flex gap-3 items-center\" title=\"{{ __('auth.continue.x') }}\">\n            <x-icon class=\"fa-brands fa-x-twitter\" />\n            {{ __('auth.continue.x') }}\n        </a>\n        @endif\n    </div>\n@endif\n    <a class=\"text-blue-500 hover:text-blue-800 transition-all duration-150\" href=\"{{ route('password.request') }}\">\n        {{ __('auth.login.password_forgotten') }}\n    </a>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/otp.blade.php",
    "content": "@extends('layouts.login', ['title' => __('auth.login.title')])\n\n@section('content')\n\n    <h1 class=\"text-2xl leading-tight mb-3\">{{ __('auth.tfa.title') }}</h1>\n\n    <p class=\"text-gray-500 mb-3\">\n        {{ __('auth.tfa.helper') }}\n    </p>\n\n    <x-form method=\"POST\" action=\"auth.verify-2fa\">\n        <div class=\"mb-3 {{ $errors->has('one_time_password') ? ' has-error' : '' }}\">\n            <input id=\"one_time_password\" type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"one-time-code\" class=\"rounded border p-4 w-full dark:bg-slate-800\" name=\"one_time_password\" required autofocus>\n\n            @if ($errors->has('password'))\n                <span class=\"text-sm text-red-500\">\n                    <strong>{{ __('auth.confirm.error') }}</strong>\n                </span>\n            @endif\n        </div>\n\n        <div class=\"mb-3 \">\n            <button type=\"submit\" class=\"rounded border border-blue-500 text-blue-500 uppercase px-6 py-2 transition-all bg-white hover:shadow-xs hover:bg-blue-500 hover:text-white dark:bg-slate-800\">\n                {{ __('auth.confirm.confirm') }}\n            </button>\n        </div>\n    </x-form>\n\n    <hr class=\"my-5\" />\n\n    <x-form action=\"auth.cancel-2fa\">\n        <button type=\"submit\" class=\"rounded border border-red-500 text-red-500 uppercase px-6 py-2 transition-all bg-white hover:shadow-xs hover:bg-red-500 hover:text-white dark:bg-slate-800\">\n            {{ __('crud.cancel') }}\n        </button>\n    </x-form>\n@endsection\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "resources/views/auth/passwords/confirm.blade.php",
    "content": "@extends('layouts.login', ['title' => __('auth.confirm.title')])\n\n@section('content')\n    <h1 class=\"text-2xl leading-tight mb-3\">{{ __('auth.confirm.title') }}</h1>\n\n    <p class=\"text-gray-500 mb-2\">\n        {{ __('auth.confirm.helper') }}\n    </p>\n\n    @if (session('status'))\n        <x-alert type=\"success\">\n            {{ session('status') }}\n        </x-alert>\n    @endif\n\n    <form class=\"form-horizontal\" method=\"POST\" action=\"{{ route('password.confirm') }}\" class=\"w-full\">\n        {{ csrf_field() }}\n\n        <div class=\"mb-2\">\n            <input id=\"password\" type=\"password\" class=\"rounded p-2 w-full border dark:bg-slate-800\" name=\"password\" required autofocus>\n\n            @if ($errors->has('password'))\n                <span class=\"text-red-500\">\n                    {{ __('auth.confirm.error') }}\n                </span>\n            @endif\n        </div>\n\n        <div class=\"mb-2\">\n            <button type=\"submit\" class=\"w-full rounded px-6 py-2 uppercase text-blue-500 border border-blue-500 hover:shadow-xs hover:text-white hover:bg-blue-500 dark:bg-slate-800\">\n                {{ __('auth.confirm.confirm') }}\n            </button>\n        </div>\n    </form>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/passwords/email.blade.php",
    "content": "@extends('layouts.login', ['title' => __('auth.reset.title')])\n\n@section('content')\n    <h1 class=\"text-2xl leading-tight mb-3\">{{ __('auth.reset.title') }}</h1>\n\n        @if (session('status'))\n            <div class=\"p-4 rounded bg-blue-200 text-blue-800 mb-2\">\n                {{ session('status') }}\n            </div>\n        @endif\n\n        <form class=\"w-full\" method=\"POST\" action=\"{{ route('password.email') }}\">\n            {{ csrf_field() }}\n\n            <div class=\"mb-3 {{ $errors->has('email') ? ' has-error' : '' }}\">\n                <input id=\"email\" type=\"email\" class=\"rounded border p-2 w-full dark:bg-slate-800\" name=\"email\" value=\"{{ old('email') }}\" required placeholder=\"{{ __('auth.reset.fields.email') }}\">\n\n                @if ($errors->has('email'))\n                    <span class=\"text-red-500 text-sm\">\n                        {{ $errors->first('email') }}\n                    </span>\n                @endif\n            </div>\n\n            <button type=\"submit\" class=\"rounded border border-blue-500 text-blue-500 uppercase px-6 py-2 transition-all bg-white hover:shadow-xs hover:bg-blue-500 hover:text-white dark:bg-slate-800\">\n                {{ __('auth.reset.send') }}\n            </button>\n        </form>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/passwords/reset.blade.php",
    "content": "@extends('layouts.login', ['title' => __('auth.reset.title')])\n\n\n@section('content')\n   <h1 class=\"text-2xl leading-tight mb-3\">{{ __('auth.reset.title') }}</h1>\n\n    <form class=\"w-full\" method=\"POST\" action=\"{{ route('password.request') }}\">\n        {{ csrf_field() }}\n\n        <input type=\"hidden\" name=\"token\" value=\"{{ $token }}\">\n\n        <div class=\"mb-3 {{ $errors->has('email') ? ' has-error' : '' }}\">\n            <label for=\"email\" class=\"\">{{ __('auth.reset.fields.email') }}</label>\n\n            <input id=\"email\" type=\"email\" class=\"rounded border p-2 w-full dark:bg-slate-800\" name=\"email\" value=\"{{ $email ?? old('email') }}\" required autofocus>\n\n            @if ($errors->has('email'))\n                <span class=\"text-red-500 text-sm\">\n                    {{ $errors->first('email') }}\n                </span>\n            @endif\n        </div>\n\n        <div class=\"mb-3 {{ $errors->has('password') ? ' has-error' : '' }}\">\n            <label for=\"password\" class=\"\">{{ __('auth.reset.fields.password') }}</label>\n\n            <input id=\"password\" type=\"password\" class=\"rounded border p-2 w-full dark:bg-slate-800\" name=\"password\" required>\n\n            @if ($errors->has('password'))\n                <span class=\"text-red-500 text-sm\">\n                    {{ $errors->first('password') }}\n                </span>\n            @endif\n        </div>\n\n        <div class=\"mb-3 {{ $errors->has('password_confirmation') ? ' has-error' : '' }}\">\n            <label for=\"password-confirm\" class=\"\">{{ __('auth.reset.fields.password_confirmation') }}</label>\n            <input id=\"password-confirm\" type=\"password\" class=\"rounded border p-2 w-full dark:bg-slate-800\" name=\"password_confirmation\" required>\n\n            @if ($errors->has('password_confirmation'))\n                <span class=\"text-red-500 text-sm\">\n                    {{ $errors->first('password_confirmation') }}\n                </span>\n            @endif\n        </div>\n\n\n        <button type=\"submit\" class=\"rounded border border-blue-500 text-blue-500 uppercase px-6 py-2 transition-all bg-white hover:shadow-xs hover:bg-blue-500 hover:text-white dark:bg-slate-800\">\n            {{ __('auth.reset.submit') }}\n        </button>\n    </form>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/register.blade.php",
    "content": "@extends('layouts.login', [\n    'title' => __('auth.register.title')\n])\n\n@php\n    if (config('auth.fast_registration')) {\n        $name = 'Kanka' . rand(100, 9999999);\n        $email = $name . '@kanka.io';\n    }\n@endphp\n\n@section('content')\n    <h1 class=\"text-2xl leading-tight dark:text-slate-200\">\n        {{ __('auth.register.title') }}\n    </h1>\n\n\n    @if (session()->has('info'))\n        <div class=\"p-4 rounded bg-blue-200 text-blue-800\">\n            {!! session()->get('info') !!}\n        </div>\n    @endif\n    @if (count($errors) > 0)\n        <div class=\"p-4 rounded bg-red-200 text-red-800\">\n            <strong>{{ trans('partials.errors.title') }}</strong>\n            {{ trans('partials.errors.description') }}<br>\n            <ul>\n                @foreach ($errors->all() as $error)\n                    <li>{{ $error }}</li>\n                @endforeach\n            </ul>\n        </div>\n    @endif\n\n    <form method=\"POST\" action=\"{{ route('register') }}\" class=\"submit-lock w-full flex flex-col gap-3\" id=\"registration\">\n        {{ csrf_field() }}\n\n        <div class=\"has-feedback{{ $errors->has('name') ? ' has-error' : '' }}\">\n            <div class=\"flex items-stretch w-full\">\n                <input id=\"name\" autocomplete=\"username\" type=\"text\" class=\"rounded border p-2 w-full dark:bg-slate-800 dark:border-slate-500\" name=\"name\" @if (config('auth.fast_registration')) value=\"{{ $name }}\" @else value=\"{!! old('name') !!}\" @endif placeholder=\"{{ __('auth.register.fields.name') }}\" required autofocus>\n            </div>\n            @if ($errors->has('name'))\n                <span class=\"text-red-500\">{{ $errors->first('name') }}</span>\n            @endif\n        </div>\n\n        <div class=\"has-feedback{{ $errors->has('email') ? ' has-error' : '' }}\">\n            <input id=\"email\" autocomplete=\"email\" type=\"email\" class=\"rounded border p-2 w-full dark:bg-slate-800 dark:border-slate-500\" name=\"email\" @if (config('auth.fast_registration')) value=\"{{ $email }}\" @else value=\"{!! old('email') !!}\" @endif placeholder=\"{{ __('auth.register.fields.email') }}\" required>\n\n            @if ($errors->has('email'))\n                <span class=\"text-red-500\">{{ $errors->first('email') }}</span>\n            @endif\n        </div>\n\n        <div class=\"{{ $errors->has('password') ? ' has-error' : '' }}\">\n            <div class=\"flex items-stretch w-full\">\n                <input id=\"password\" autocomplete=\"new-password\" type=\"password\" class=\"rounded border p-2 w-full dark:bg-slate-800 dark:border-slate-500\" name=\"password\" required @if (config('auth.fast_registration')) value=\"{{ $name }}\" @endif placeholder=\"{{ __('auth.register.fields.password') }}\">\n                <a href=\"#\" id=\"toggle-password\" class=\"p-2\" tabindex=\"-1\" title=\"{{ __('auth.helpers.password') }}\">\n                    <i id=\"toggle-password-icon\" class=\"fa-regular fa-eye\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">{{ __('auth.helpers.password') }}</span>\n                </a>\n            </div>\n\n            @if ($errors->has('password'))\n                <span class=\"text-red-500\">{{ $errors->first('password') }}</span>\n            @endif\n        </div>\n        <div class=\"\">\n            <div class=\"text-gray-500 text-sm\">\n                <label for=\"newsletter\" class=\"dark:text-slate-200\">\n                    <input id=\"newsletter\" type=\"checkbox\" name=\"newsletter\" value=\"1\" />\n                    {!! __('front/newsletter.groups.all') !!}\n                </label>\n            </div>\n        </div>\n\n        <div class=\"\">\n            <div id=\"btn-wait\" class=\"rounded border border-gray-200 px-6 py-2 bg-gray-200 disabled\" style=\"display: none;\">\n                <x-icon class=\"load\" />\n            </div>\n\n            <button id=\"btn-save\" type=\"submit\" class=\"@if (config('auth.recaptcha.enabled')) g-recaptcha @endif rounded border border-blue-500 text-blue-500 uppercase px-6 py-2 transition-all  hover:shadow-xs hover:bg-blue-500 hover:text-white w-full\"\n                    @if (config('auth.recaptcha.enabled'))data-sitekey=\"{{ config('auth.recaptcha.key') }}\" data-callback=\"tokenValidated\" data-action=\"submit\" @endif>\n                {{ __('auth.register.submit') }}\n            </button>\n        </div>\n\n    </form>\n\n\n    <p class=\"text-center text-sm\">\n        {!! __('auth.register.already', ['login' => '<a href=\"' . route('login') . '\" class=\"text-blue-500\" hover:text-blue-800\">' . __('auth.register.log-in') . '</a>']) !!}\n    </p>\n\n    <div class=\"social-auth-links text-center\">\n        <p class=\"mb-2 text-gray-500 dark:text-slate-200\">- {{ __('auth.login.or') }} -</p>\n\n        <div class=\"flex flex-col gap-2\">\n            @if(config('services.facebook.client_id'))\n                <a href=\"{{ route('auth.provider', ['provider' => 'facebook']) }}\" class=\"rounded border border-blue-500 text-blue-500 hover:text-white hover:bg-blue-500 px-6 py-2 transition-all duration-150 flex gap-3 items-center\" title=\"{{ __('auth.continue.facebook') }}\">\n                    <x-icon class=\"fa-brands fa-facebook-f\" />\n                    {{ __('auth.continue.facebook') }}\n                </a>\n            @endif\n\n            @if(config('services.google.client_id'))\n                <a href=\"{{ route('auth.provider', ['provider' => 'google']) }}\" class=\"rounded border border-red-400 text-red-400 hover:text-white hover:bg-red-400 px-6 py-2 transition-all duration-150 flex gap-3 items-center\" title=\"{{ __('auth.continue.google') }}\">\n                    <x-icon class=\"fa-brands fa-google\" />\n                    {{ __('auth.continue.google') }}\n                </a>\n            @endif\n\n            @if(config('services.twitter.client_id'))\n                <a href=\"{{ route('auth.provider', ['provider' => 'twitter']) }}\" class=\"rounded border border-blue-300 text-blue-300 hover:text-white hover:bg-blue-300 px-6 py-2 transition-all duration-150 flex gap-3 items-center\" title=\"{{ __('auth.continue.x') }}\">\n                    <x-icon class=\"fa-brands fa-x-twitter\" />\n                    {{ __('auth.continue.x') }}\n                </a>\n            @endif\n        </div>\n    </div>\n\n    <div class=\"grow text-sm text-gray-500\">\n        {!! __('auth.register.tos', [\n'terms' => '<a href=\"https://kanka.io/terms-and-conditions\" class=\"text-blue-500 hover:text-blue-800\">' . __('footer.terms') . '</a>',\n'privacy' => '<a href=\"https://kanka.io/privacy-policy\" class=\"text-blue-500 hover:text-blue-800\">' . __('footer.privacy') . '</a>',\n]) !!}\n    </div>\n</div>\n\n@endsection\n\n@section('scripts')\n    @if (config('auth.recaptcha.enabled'))\n    <script src=\"https://www.google.com/recaptcha/api.js\"></script>\n    <script>\n        function tokenValidated(token) {\n            document.getElementById(\"registration\").requestSubmit();\n        }\n    </script>\n    @endif\n@endsection\n"
  },
  {
    "path": "resources/views/billing/history.blade.php",
    "content": "<?php /** @var \\Laravel\\Cashier\\Invoice $invoice */?>\n@extends('layouts.app', [\n    'title' => __('billing/invoices.title'),\n    'description' => '',\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">\n            {{ __('billing/invoices.title') }}\n        </x-slot>\n        <x-slot name=\"subtitle\">\n            {{ __('billing/invoices.description') }}\n            {{ __('billing/invoices.paypal') }}\n        </x-slot>\n    </x-hero>\n\n    <x-grid type=\"1/1\">\n        <table class=\"table table-default table-borderless table-hover\">\n            <thead>\n            <tr>\n                <th>{{ __('billing/invoices.fields.date') }}</th>\n                <th>{{ __('billing/invoices.fields.amount') }}</th>\n                <th>{{ __('billing/invoices.fields.status') }}</th>\n                <th>{{ __('billing/invoices.fields.invoice') }}</th>\n            </tr>\n            </thead>\n            <tbody>\n            @forelse ($invoices as $invoice)\n                <tr>\n                    <td>{{ $invoice->date()->toFormattedDateString() }}</td>\n                    <td>{{ $invoice->total() }}</td>\n                    <td>{{ $invoice->paid ? __('billing/invoices.status.paid') : __('billing/invoices.status.pending') }}</td>\n                    <td>\n                        <a href=\"{{ route('billing.history.download', ['invoice' => $invoice->id]) }}\" class=\"text-link\">\n                            <x-icon class=\"fa-regular fa-download\" /> {{  __('billing/invoices.actions.download') }}\n                        </a>\n\n                    </td>\n                </tr>\n            @empty\n                <tr>\n                    <td colspan=\"4\">\n                    <em>No invoices found.</em>\n                    </td>\n                </tr>\n            @endforelse\n            </tbody>\n        </table>\n    </x-grid>\n@endsection\n"
  },
  {
    "path": "resources/views/billing/payment-method.blade.php",
    "content": "@php use Illuminate\\Support\\Arr; @endphp\n<?php /**\n * @var \\App\\Models\\CampaignBoost $boost\n * @var \\App\\Models\\Campaign $campaign\n */\n?>\n@extends('layouts.app', [\n    'title' => __('billing/payment_methods.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">\n            {{ __('billing/payment_methods.title') }}\n        </x-slot>\n        <x-slot name=\"subtitle\">\n            {!! __('settings.subscription.billing.helper', [\n                'stripe' => '<a href=\"https://www.stripe.com\" rel=\"nofollow\" class=\"text-link\">Stripe</a>'\n            ]) !!}\n        </x-slot>\n    </x-hero>\n\n    @include('partials.errors')\n\n    <x-box class=\"mb-12\" id=\"billing\">\n        <x-slot name=\"title\">\n            {{ __('settings.subscription.billing.saved') }}\n        </x-slot>\n\n        <billing-management\n                api_token=\"{{ $stripeApiToken }}\"\n                trans=\"{{ $translations }}\"\n        ></billing-management>\n    </x-box>\n\n    <x-box class=\"mb-12\" id=\"currency\">\n        <x-slot name=\"title\">{{ __('settings.subscription.fields.currency') }}\n        </x-slot>\n\n        <x-form :action=\"['billing.payment-method.save']\" method=\"PATCH\" direct>\n            <x-grid type=\"1/1\">\n                @if (auth()->user()->subscribed('kanka'))\n                    @include('settings.subscription.currency._blocked')\n                @else\n                    @if (auth()->user()->subscription('kanka')?->ended())\n                        @include('settings.subscription.currency._reset')\n                    @endif\n                    <x-forms.field field=\"currency\" :label=\"__('settings.subscription.fields.currency')\">\n                        <x-forms.select name=\"currency\" :options=\"$currencies\" :selected=\"auth()->user()->currency()\" />\n                    </x-forms.field>\n                    @if (auth()->user()->subscription('kanka')?->ended())\n                        <x-forms.field field=\"reset_billing\" required :label=\" __('settings.subscription.fields.reset')\">\n                            <input type=\"hidden\" name=\"reset_billing\" value=\"0\" />\n                            <x-checkbox :text=\"__('settings.subscription.fields.reset_billing')\">\n                                <input type=\"checkbox\" name=\"reset_billing\" value=\"1\" required/>\n                            </x-checkbox>\n                        </x-forms.field>\n                    @endif\n                    <div class=\"text-right\">\n                        <x-buttons.confirm type=\"primary\">\n                            <x-icon class=\"save\" />\n                            <span>\n                        {{ __('settings.subscription.actions.update_currency') }}</span>\n                        </x-buttons.confirm>\n                    </div>\n                @endif\n            </x-grid>\n        </x-form>\n    </x-box>\n\n\n    <x-box class=\"mb-12\">\n        <x-slot name=\"title\">\n            {{ __('settings.billing.title') }}\n        </x-slot>\n\n        <div class=\"flex flex-col gap-4\">\n            <div class=\"flex gap-2 justify-between\">\n                @if (\\Illuminate\\Support\\Arr::exists($user->profile ?? [], 'billing'))\n                    <x-helper>\n                        <p>{!! nl2br($user->profile['billing']) !!}</p>\n                    </x-helper>\n                @else\n                    <x-helper>\n                        <p>{{ __('billing/information.helper') }}</p>\n                    </x-helper>\n                @endif\n                <div class=\"\">\n                    <button class=\"btn2 btn-outline\" data-toggle=\"dialog\" data-url=\"{{  route('account.billing.info') }}\">\n                        {{ __('billing/information.actions.update') }}\n                    </button>\n                </div>\n            </div>\n        </div>\n    </x-box>\n@endsection\n\n\n@section('scripts')\n    @parent\n    @vite('resources/js/billing.js')\n@endsection\n"
  },
  {
    "path": "resources/views/bookmarks/datagrid.blade.php",
    "content": "<?php /** @var \\App\\Models\\Bookmark $model */ ?>\n\n{!! $datagrid\n    ->columns([\n        // Name\n        'name',\n        'position',\n        [\n            'label' => __('crud.fields.type'),\n            'render' => function ($model) {\n                if ($model->isDashboard()) {\n                    return '<i class=\"fa-regular fa-th-large\"></i> ' . __('bookmarks.fields.dashboard');\n                } elseif ($model->isEntity()) {\n                    return '<i class=\"fa-regular fa-star\"></i> ' . __('entities.entry');\n                } elseif ($model->isList()) {\n                    return '<i class=\"fa-regular fa-th-list\"></i> ' . __('crud.fields.category');\n                } elseif ($model->isRandom()) {\n                    return '<i class=\"fa-regular fa-question\"></i> ' . __('dashboards/widgets/random.name');\n                }\n                return '';\n            },\n            'disableSort' => true,\n\n        ],\n        [\n            'label' => __('bookmarks.fields.target'),\n            'render' => function (\\App\\Models\\Bookmark $model) {\n                if ($model->isDashboard()) {\n                    return $model->dashboard->name;\n                } elseif ($model->isEntity()) {\n                    if (!$model->target) {\n                        return __('crud.users.unknown');\n                    }\n                    return '<a href=\"' . $model->target->url() . '\" class=\"text-link\">' . $model->target->name . '</a>';\n                } elseif ($model->isList()) {\n                    return $model->entityType->plural();\n                } elseif ($model->isRandom()) {\n                    return $model->random_entity_type == 'any' ? __('bookmarks.random_types.any') : $model->randomEntityType?->name();\n                }\n                return '';\n            },\n            'disableSort' => true,\n        ],\n        [\n            'label' => __('bookmarks.fields.active'),\n            'render' => function ($model) {\n                if ($model->is_active) {\n                    return '<i class=\"fa-regular fa-check-circle\" aria-hidden=\"true\"></i>';\n                }\n                return '';\n            },\n            'field' => 'is_active',\n        ],\n        [\n            'type' => 'is_private',\n        ]\n    ])\n    ->options(    [\n        'route' => 'bookmarks.index',\n        'baseRoute' => 'bookmarks',\n        'trans' => 'bookmarks.fields.',\n        'disableEntity' => true,\n    ]\n) !!}\n"
  },
  {
    "path": "resources/views/bookmarks/forms/_dashboard.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('bookmarks.helpers.dashboard') }}</p>\n    </x-helper>\n\n@if($campaign->boosted())\n    <x-grid>\n        <x-forms.field field=\"dashboard\" :label=\"__('bookmarks.fields.dashboard')\">\n            <x-forms.select name=\"dashboard_id\" :options=\"$dashboards\" :selected=\"$source->dashboard_id ?? $model->dashboard_id ?? null\" />\n        </x-forms.field>\n\n        <input type=\"hidden\" name=\"options[default_dashboard]\" value=\"0\" />\n        <x-forms.field field=\"default\" :label=\"__('bookmarks.fields.default_dashboard')\">\n            <x-checkbox :text=\"__('bookmarks.helpers.default_dashboard')\">\n                <input type=\"checkbox\" name=\"options[default_dashboard]\" value=\"1\" @if (old('options[default_dashboard]', empty($model->options) ? false : \\Illuminate\\Support\\Arr::get($model->options, 'default_dashboard'))) checked=\"checked\" @endif/>\n            </x-checkbox>\n        </x-forms.field>\n    </x-grid>\n@else\n    <x-premium-cta :campaign=\"$campaign\">\n        <p>{{ __('dashboard.dashboards.pitch') }}</p>\n    </x-premium-cta>\n@endif\n</x-grid>\n"
  },
  {
    "path": "resources/views/bookmarks/forms/_entity.blade.php",
    "content": "<?php\n\n$tabs = [\n        'notes' => __('entities.notes'),\n        'calendars' => __('entities.calendars'),\n        'attribute' => __('entries/tabs.properties'),\n];\n$menus = [\n        'abilities' => __('crud.tabs.abilities'),\n        'attributes' => __('entries/tabs.properties'),\n        'assets' => __('entries/tabs.media'),\n        'reminders' => __('crud.tabs.reminders'),\n        'organisations' => __('entities.organisations')  . ' (' . __('entities.characters') . ', ' . __('entities.organisations') . ')',\n        __('entities.maps') => [\n            'explore' => __('maps.actions.explore'),\n            'maps' => __('entities.maps'),\n        ],\n        __('entities.tags') => [\n            //'children' => __('tags.show.tabs.children'),\n            'tags' => __('entities.tags'),\n        ],\n        __('entities.locations') => [\n            'characters' => __('entities.characters'),\n            'locations' => __('entities.locations'),\n        ],\n        __('entities.families') => [\n            'families' => __('entities.families')\n        ],\n        __('entities.items') => [\n            'inventories' => __('items.show.tabs.inventories')\n        ],\n        __('entities.organisations') => [\n            'organisations' => __('entities.organisations')\n        ],\n        __('entities.races') => [\n            'races' => __('entities.races')\n        ],\n        __('entities.journals') => [\n            'journals' => __('entities.journals')\n        ],\n        __('entities.quests') => [\n            'quest_elements.index' => __('quests.show.tabs.elements')\n        ],\n\n        'inventory' => __('crud.tabs.inventory'),\n        'relations' => __('entries/tabs.relations'),\n];\nasort($menus);\n$menus = array_merge(['' => __('crud.tabs.overview')], $menus);\n?>\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('bookmarks.helpers.entity', [\n            'menu' => '<span class=\"font-extrabold\">' . __('bookmarks.fields.menu') . '</span>',\n        ]) !!}</p>\n    </x-helper>\n\n    <x-grid>\n        @include('cruds.fields.entity', [\n            'name' => 'entity_id',\n            'required' => true,\n            'preset' => !empty($model) && $model->target ? $model->target : null,\n            'label' => __('entities.entry'),\n        ])\n\n        <x-forms.field field=\"menu\" :label=\"__('bookmarks.fields.menu')\">\n            <x-forms.select name=\"menu\" id=\"entity-selector\" :options=\"$menus\" :selected=\"$model->menu ?? null\" />\n        </x-forms.field>\n\n        <x-forms.field field=\"filter\" :label=\"__('bookmarks.fields.filters')\" :hidden=\"true\">\n            <input type=\"text\" name=\"options[subview_filter]\" value=\"{{ old('options[subview_filter]', $model->options['subview_filter'] ?? null) }}\" maxlength=\"191\" class=\"w-full\" placeholder=\"k=name&s=desc\" />\n        </x-forms.field>\n    </x-grid>\n</x-grid>\n"
  },
  {
    "path": "resources/views/bookmarks/forms/_entry.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Bookmark $model\n * @var \\App\\Services\\EntityService $entityService\n * @var \\App\\Services\\Campaign\\Sidebar\\SetupService $sidebar\n */\n\n$tab = empty($model) || old('entity_id') || $model->entity_id ? 'entity' : 'type';\n\n$isEntity = $isDashboard = $isRandom = $isList = false;\nif (isset($model)) {\n    if ($model->isDashboard()) {\n        $isDashboard = true;\n    } elseif ($model->isEntity()) {\n        $isEntity = true;\n    } elseif ($model->isList()) {\n        $isList = true;\n    } elseif ($model->isRandom()) {\n        $isRandom = true;\n    }\n}\n$settingsLink = '<a href=\"' . route('settings.premium', ['campaign' => $campaign]) . '\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>';\n$premiumLink = '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>';\n?>\n<x-box class=\"flex flex-col gap-4\">\n    @include('cruds.fields.name', ['trans' => 'bookmarks'])\n\n    <x-grid>\n\n        <x-forms.field\n            field=\"position\"\n            :label=\"__('bookmarks.fields.position')\"\n            tooltip\n            :helper=\"__('entities/links.helpers.parent')\">\n            <x-forms.select name=\"parent\" :options=\"$parents\"\n                            :selected=\"$model->parent ?? 'bookmarks'\"/>\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"active\"\n            :label=\"__('bookmarks.fields.active')\"\n            tooltip\n            :helper=\"__('bookmarks.helpers.active')\">\n            <input type=\"hidden\" name=\"is_active\" value=\"0\"/>\n\n            <x-checkbox :text=\"__('bookmarks.visibilities.is_active')\">\n                <input type=\"checkbox\" name=\"is_active\" value=\"1\"\n                       @if (old('is_active', $model->is_active ?? true)) checked=\"checked\" @endif />\n            </x-checkbox>\n        </x-forms.field>\n\n        @include('cruds.fields.icon', ['suggestions' => \\App\\Facades\\BookmarkCache::iconSuggestion()])\n\n        <x-forms.field\n            field=\"class\"\n            :label=\"__('dashboard.widgets.fields.class')\"\n            :helper=\"__('dashboard.widgets.helpers.class')\"\n        >\n            @if ($campaign->boosted())\n                <input type=\"text\" name=\"css\" value=\"{{ old('css', $model->css ?? null) }}\" class=\"w-full\"\n                       maxlength=\"45\" id=\"config[class]\"/>\n                <p class=\"text-neutral-content md:hidden\">\n                    {{ __('bookmarks.helpers.class') }}\n                </p>\n            @else\n                <x-slot name=\"helper\">\n                    @can('boost', auth()->user())\n                        {!! __('callouts.booster.pitches.element-class', ['boosted-campaign' => $settingsLink]) !!}\n                    @else\n                        {!! __('callouts.booster.pitches.element-class', ['boosted-campaign' => $premiumLink]) !!}\n                    @endif\n                </x-slot>\n            @endif\n        </x-forms.field>\n    </x-grid>\n\n    @includeWhen(auth()->user()->isAdmin(), 'cruds.fields.privacy_callout')\n</x-box>\n\n\n<x-box class=\"flex flex-col gap-4\">\n    <div class=\"text-xl\">{{ __('bookmarks.fields.selector') }}</div>\n\n    <x-helper>\n        <p>{{ __('bookmarks.helpers.selector') }}</p>\n    </x-helper>\n\n    <x-forms.field field=\"target\" :label=\"__('bookmarks.fields.target')\">\n        <select name=\"type\" class=\"\" id=\"bookmark-selector\">\n            <option value=\"\">{{ __('bookmarks.targets.select') }}</option>\n            <option value=\"entity\" @if($isEntity) selected=\"selected\" @endif data-target=\"#bookmark-entity\">\n                {{ __('bookmarks.targets.entity') }}\n            </option>\n            <option value=\"type\" @if($isList) selected=\"selected\" @endif data-target=\"#bookmark-list\">\n                {{ __('bookmarks.targets.type') }}\n            </option>\n            <option value=\"random\" @if($isRandom) selected=\"selected\" @endif data-target=\"#bookmark-random\">\n                {{ __('bookmarks.targets.random') }}\n            </option>\n            <option value=\"dashboard\" @if($isDashboard) selected=\"selected\" @endif data-target=\"#bookmark-dashboard\">\n                {{ __('bookmarks.targets.dashboard') }}\n            </option>\n        </select>\n    </x-forms.field>\n    <div>\n        <div\n            class=\"bookmark-subform transition-opacity duration-300 ease-in-out @if(!$isEntity) opacity-0 invisible h-0 @endif\"\n            id=\"bookmark-entity\">\n            @include('bookmarks.forms._entity')\n        </div>\n        <div\n            class=\"bookmark-subform transition-opacity duration-300 ease-in-out @if(!$isList) opacity-0 invisible h-0 @endif\"\n            id=\"bookmark-list\">\n            @include('bookmarks.forms._type')\n        </div>\n        <div\n            class=\"bookmark-subform transition-opacity duration-300 ease-in-out @if(!$isRandom) opacity-0 invisible h-0 @endif\"\n            id=\"bookmark-random\">\n            @include('bookmarks.forms._random')\n        </div>\n        <div\n            class=\"bookmark-subform transition-opacity duration-300 ease-in-out @if(!$isDashboard) opacity-0 invisible h-0 @endif\"\n            id=\"bookmark-dashboard\">\n            @include('bookmarks.forms._dashboard')\n        </div>\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/bookmarks/forms/_random.blade.php",
    "content": "@inject('entityTypeService', 'App\\Services\\EntityTypeService')\n@php\n$entityTypes = ['' => '', 'any' => __('bookmarks.random_types.any')];\n$entityTypes = $entityTypeService->campaign($campaign)->exclude(['bookmark'])->prepend($entityTypes)->toSelect();\n@endphp\n\n\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('bookmarks.helpers.random') }}</p>\n    </x-helper>\n\n    <x-grid>\n        <x-forms.field field=\"random-type\" :label=\"__('bookmarks.fields.random_type')\">\n            <x-forms.select name=\"random_entity_type\" :options=\"$entityTypes\" :selected=\"$source->random_entity_type ?? $model->random_entity_type ?? null\" />\n        </x-forms.field>\n\n        <div>\n            <input type=\"hidden\" name=\"save_tags\" value=\"1\" />\n            <x-forms.tags\n                :campaign=\"$campaign\"\n                :model=\"$model ?? null\">\n            </x-forms.tags>\n        </div>\n    </x-grid>\n</x-grid>\n"
  },
  {
    "path": "resources/views/bookmarks/forms/_type.blade.php",
    "content": "@inject('entityTypeService', 'App\\Services\\EntityTypeService')\n@php\n/** @var \\App\\Services\\EntityTypeService $entityTypeService */\n$entityTypes = $entityTypeService->campaign($campaign)->exclude([config('entities.ids.bookmark')])->prepend(['' => ''])->toSelect();\n@endphp\n<x-grid type=\"1/1\">\n\n    <x-helper>\n        <p>\n        {!! __('bookmarks.helpers.type', [\n            'filter' => '<span class=\"text-extrabold\">' . __('bookmarks.fields.filters') . '</span>',\n            '?' => '<code>?</code>',\n        ]) !!}\n        </p>\n    </x-helper>\n\n    <x-grid>\n        <x-forms.field field=\"entity_type_id\" :label=\"__('crud.fields.category')\">\n            <x-forms.select name=\"entity_type_id\" :options=\"$entityTypes\" :selected=\"$source->entity_type_id ?? $model->entity_type_id ?? null\" />\n        </x-forms.field>\n\n        <x-forms.field field=\"filters\" :label=\"__('bookmarks.fields.filters')\">\n            <input type=\"text\" name=\"filters\" value=\"{{ old('filters', $source->filters ?? $model->filters ?? null) }}\" placeholder=\"{{ __('bookmarks.placeholders.filters') }}\" maxlength=\"191\" />\n        </x-forms.field>\n    </x-grid>\n</x-grid>\n"
  },
  {
    "path": "resources/views/bookmarks/forms/create.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $title,\n    'breadcrumbs' => [\n        ['url' => Breadcrumb::campaign($campaign)->index($name), 'label' => $plural],\n        __('crud.create'),\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n])\n\n@section('content')\n    <x-form\n        :action=\"['bookmarks.store', $campaign]\"\n        files\n        unsaved\n        class=\"entity-form\"\n        id=\"entity-form\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars')]\">\n\n        <x-grid type=\"1/1\" class=\"\">\n            @include('cruds.forms._errors')\n\n            <h1 class=\"text-lg\">{{ __('bookmarks.create.title') }}</h1>\n\n            @include('bookmarks.forms._entry')\n\n            <div class=\"flex items-center justify-end \">\n                @include('cruds.fields.save', ['disableCancel' => true, 'target' => 'entity-form', 'disableCopy' => true])\n            </div>\n        </x-grid>\n    </x-form>\n@endsection\n\n@include('editors.editor')\n\n\n@includeIf($name . '.forms._tutorial')\n"
  },
  {
    "path": "resources/views/bookmarks/forms/edit.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('crud.titles.editing', ['name' => $model->name])  . ' - ' . __('entities.' . $name),\n    'breadcrumbs' => [\n        __('crud.edit'),\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n])\n\n\n\n@section('content')\n    <x-form\n        method=\"PATCH\"\n        :action=\"['bookmarks.update', $campaign, $model]\"\n        unsaved\n        class=\"entity-form\"\n        id=\"entity-form\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars')]\">\n\n        <x-grid type=\"1/1\" class=\"\">\n            @include('cruds.forms._errors')\n\n            <h1 class=\"text-lg\">{{ __('bookmarks.edit.title', ['name' => $model->name]) }}</h1>\n\n            @include('bookmarks.forms._entry')\n\n            <div class=\"flex items-center justify-end \">\n                @include('cruds.fields.save', ['disableCancel' => true, 'target' => 'entity-form', 'disableCopy' => true])\n            </div>\n        </x-grid>\n    </x-form>\n@endsection\n\n@include('editors.editor')\n"
  },
  {
    "path": "resources/views/bookmarks/reorder.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Bookmark $link\n */ ?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('bookmarks.reorder.title'),\n    'description' => '',\n    'breadcrumbs' => [\n        __('bookmarks.reorder.title')\n    ],\n    'mainTitle' => false,\n    'bodyClass' => 'bookmarks-reorder'\n])\n\n\n@section('content')\n    <x-form :action=\"['bookmarks.reorder-save', $campaign]\">\n    <x-grid type=\"1/1\">\n        @include('partials.errors')\n\n        <h1 class=\"text-2xl\">\n            {{ __('bookmarks.reorder.title') }}\n        </h1>\n\n        <div class=\"box-entity-story-reorder max-w-4xl flex flex-col gap-5\">\n            <div class=\"element-live-reorder sortable-elements flex flex-col gap-2\">\n                @foreach($links as $link)\n                    <x-reorder.child :id=\"$link->id\">\n                        <input type=\"hidden\" name=\"bookmark[]\" value=\"{{ $link->id }}\" />\n                        <div class=\"dragger\">\n                            <x-icon class=\"sort\" />\n                        </div>\n                        <div class=\"grow flex items-center flex-no-wrap gap-2 overflow-hidden\">\n                            <i class=\"{{ $link->iconClass() }}\" aria-hidden=\"true\"></i>\n                            <span class=\"truncate\">\n                                {!! $link->name !!}\n                            </span>\n                        </div>\n                        <div class=\"self-end\">\n                            @if ($link->is_private)\n                                <i class=\"fa-regular fa-lock\" data-title=\"{{ __('crud.is_private') }}\"\n                                   data-toggle=\"tooltip\"></i>\n                            @endif\n                        </div>\n                    </x-reorder.child>\n                @endforeach\n            </div>\n        </div>\n        <button class=\"btn2 btn-primary btn-block\">\n            {{ __('crud.save') }}\n        </button>\n    </x-grid>\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/_calendar.blade.php",
    "content": "<?php\n/** @var \\App\\Renderers\\CalendarRenderer $renderer\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Calendar $model\n */\nif ($model->missingDetails()): ?>\n    <x-alert type=\"warning\">\n        {{ __('calendars.show.missing_details') }}\n    </x-alert>\n<?php return;\nendif;\n$weekNumber = 1;\n?>\n@inject('renderer', 'App\\Renderers\\CalendarRenderer')\n@inject('colours', 'App\\Services\\ColourService')\n@php\n    $canEdit = auth()->check() && auth()->user()->can('update', $entity);\n    $renderer\n        ->campaign($campaign)\n        ->calendar($model)\n        ->request(request())\n        ->prepare()\n@endphp\n\n<div class=\"calendar-toolbar flex gap-2 items-center flex-wrap\">\n    <a\n        href=\"{{ route('entities.show', [$campaign, 'entity' => $entity, 'month' => $renderer->currentMonthId(), 'year' => $renderer->currentYear()]) }}\"\n        class=\"btn2 btn-sm @if ($renderer->todayButtonIsDisabled()) btn-disabled\" disabled=\"disabled @endif\"\n        rel=\"nofollow\"\n    >\n        {{ __('calendars.actions.today') }}\n    </a>\n\n    @if (!$renderer->isYearlyLayout())\n    <div class=\"join\">\n        <a\n            href=\"{{ $renderer->previous() }}\"\n            class=\"btn2 join-item btn-sm\"\n            data-calendar-nav=\"previous\"\n            data-title=\"{{ $renderer->previous(true) }} (Ctrl <i class='fa-solid fa-arrow-left' aria-hidden='true'></i>)\"\n            data-html=\"true\"\n            data-toggle=\"tooltip\"\n            rel=\"nofollow\">\n            <x-icon class=\"fa-solid fa-chevron-left\" />\n        </a>\n        <div class=\"btn2 join-item btn-sm btn-disabled\" disabled>\n            {!! $renderer->currentMonthName() !!}\n        </div>\n        <a\n            href=\"{{ $renderer->next() }}\"\n            class=\"btn2 join-item btn-sm\"\n            data-calendar-nav=\"next\"\n            data-title=\"{{ $renderer->next(true) }} (Ctrl <i class='fa-solid fa-arrow-right' aria-hidden='true'></i>)\"\n            data-html=\"true\"\n            data-toggle=\"tooltip\"\n            rel=\"nofollow\">\n            <x-icon class=\"fa-solid fa-chevron-right\" />\n        </a>\n    </div>\n    @endif\n    <div class=\"join grow\">\n        <a\n            href=\"{{ $renderer->linkToYear(false) }}\"\n            class=\"btn2 join-item btn-sm\"\n            @if ($renderer->isYearlyLayout()) data-calendar-nav=\"previous\" data-title=\"{{ $renderer->titleToYear(false) }} (Ctrl <i class='fa-solid fa-arrow-left' aria-hidden='true'></i>)\"\n            data-html=\"true\" @else data-title=\"{{ $renderer->titleToYear(false) }}\" @endif\n            data-toggle=\"tooltip\"\n            rel=\"nofollow\">\n            <x-icon class=\"fa-solid fa-chevron-left\" />\n        </a>\n        <div data-toggle=\"dialog\" data-target=\"calendar-year-switcher\" title=\"{{ __('calendars.modals.switcher.title') }}\"\n             class=\"btn2 join-item btn-sm\">\n            {!! $renderer->currentYearName() !!}\n        </div>\n        <a\n            href=\"{{ $renderer->linkToYear() }}\"\n            class=\"btn2 join-item btn-sm\"\n            @if ($renderer->isYearlyLayout()) data-calendar-nav=\"next\" data-title=\"{{ $renderer->titleToYear() }} (Ctrl <i class='fa-solid fa-arrow-right' aria-hidden='true'></i>)\" data-html=\"true\" @else data-title=\"{{ $renderer->titleToYear() }}\" @endif\n            data-toggle=\"tooltip\"\n            rel=\"nofollow\">\n            <x-icon class=\"fa-solid fa-chevron-right\" />\n        </a>\n    </div>\n\n    <div class=\"join\">\n        <a\n            href=\"{{ route('entities.show', [$campaign, $entity, 'layout' => 'year', 'year' => $renderer->currentYear()]) }}\"\n            class=\"btn2 join-item btn-sm  <?=($renderer->isYearlyLayout() ? 'btn-disabled\" disabled=\"disabled' : null)?>\"\n            rel=\"nofollow\">\n            {{ __('calendars.layouts.year') }}\n        </a>\n        <a\n            href=\"{{ route('entities.show', array_merge([$campaign, $entity, 'year' => $renderer->currentYear()], $model->defaultLayout() === 'year' ? ['layout' => 'month'] : [])) }}\"\n            class=\"btn2 join-item btn-sm <?=(!$renderer->isYearlyLayout() ? ' btn-disabled\" disabled=\"disabled' : null)?>\"\n            rel=\"nofollow\">\n            {{ __('calendars.layouts.month') }}\n        </a>\n    </div>\n    <div class=\"month-alias help-block m-0\">{!! $renderer->monthAlias() !!}</div>\n</div>\n\n<x-box :padding=\"false\">\n@php $intercalary = $renderer->isIntercalaryMonth() @endphp\n<table class=\"calendar table table-striped table-fixed\">\n    <thead>\n    <tr>\n        @foreach ($model->weekdays() as $weekday)\n            <th>{{ $intercalary ? '' : $weekday }}</th>\n        @endforeach\n    </tr>\n    </thead>\n    <tbody>\n    @if ($renderer->isYearlyLayout())\n        <tr>\n        @foreach ($renderer->buildForYear() as $key => $day)\n            @if($key % count($model->weekdays()) == 0)\n                </tr><tr>\n                @if (!empty($day) && !empty($day['week']))\n                    @if ($renderer->isNamedWeek($day['week']))\n                        <tr class=\"named_week italic h-4 week-nr-{{ $day['week'] }}\">\n                            <td colspan=\"{{ count($model->weekdays()) }}\" class=\"bg-week h-1 wrap-break-word\">\n                                {{ $renderer->namedWeek($day['week']) }}\n                            </td>\n                        </tr>\n                    @endif\n                @endif\n            @endif\n            @include('calendars._day', ['showMonth' => true])\n        @endforeach\n        </tr>\n    @else\n        @foreach ($renderer->buildForMonth() as $week => $days)\n            @if (!empty($days) && $renderer->isNamedWeek($week))\n                <tr class=\"named_week italic week-nr-{{ $week }}\">\n                    <td colspan=\"{{ count($model->weekdays()) }}\" class=\"h-4 wrap-break-word\">\n                        {{ $renderer->namedWeek($week) }}\n                    </td>\n                </tr>\n            @endif\n            <tr>\n                @foreach ($days as $day)\n                    @include('calendars._day')\n                @endforeach\n            </tr>\n        @endforeach\n    @endif\n    </tbody>\n</table>\n</x-box>\n\n@section('modals')\n    @parent\n    <x-form :action=\"['entities.show', $campaign, $entity]\" method=\"GET\">\n        <x-dialog id=\"calendar-year-switcher\" :title=\"__('calendars.modals.switcher.title')\" footer=\"calendars.year-switcher._footer\">\n            <x-forms.field field=\"year\" :label=\"__('calendars.fields.year')\">\n                <input type=\"number\" name=\"year\" autofocus placeholder=\"{{ $renderer->currentYear() }}\" />\n            </x-forms.field>\n\n            @if ($renderer->isYearlyLayout() && !$model->yearlyLayout())\n                <input type=\"hidden\" name=\"layout\" value=\"year\">\n            @else\n                @if ($model->yearlyLayout())\n                    <input type=\"hidden\" name=\"layout\" value=\"month\">\n                @endif\n                <input type=\"hidden\" name=\"month\" value=\"{{ $renderer->currentMonthId() }}\" />\n            @endif\n        </x-dialog>\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/_day.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Calendar $model\n * @var \\App\\Models\\EntityEvent $event\n */?>\n@if(empty($day))\n    <td class=\"h-24\"></td>\n@else\n\n    @php\n        $routeOptions = [\n            $campaign,\n            $model,\n            'date' => $day['date']\n    ];\n    if ($renderer->isYearlyLayout() && !$model->yearlyLayout()) {\n        $routeOptions['layout'] = 'year';\n    } elseif (!$renderer->isYearlyLayout() && $model->yearlyLayout()) {\n        $routeOptions['layout'] = 'month';\n    }\n    @endphp\n\n    <td class=\"h-24 text-center wrap-break-word align-top {{ $day['isToday'] ? 'today bg-base-200' : null }}\" data-date=\"{{ \\Illuminate\\Support\\Arr::get($day, 'date', null) }}\" @if ($canEdit) data-dbclick data-url=\"{{ route('calendars.event.create', $routeOptions) }}\" @endif>\n        <div class=\"flex flex-col gap-1\">\n        @if ($day['day'])\n            <div class=\"flex gap-1 items-center\">\n                <div class=\"text-base day-name {{ $day['isToday'] ? \"badge badge-primary\" : null}}\">\n                    <span class=\"day-number\">{{ $day['day'] }}</span>\n                    <span class=\"julian-number\">{{ $day['julian'] }}</span>\n                </div>\n                <div class=\"grow truncate\">\n                @if ($day['day'] == 1 && !empty($showMonth))\n                    <span class=\"hidden md:inline month-name\">{{ $day['month'] }}</span>\n                @endif\n                </div>\n                @if ($canEdit)\n                <div class=\"dropdown\">\n                    <a class=\"btn2 btn-xs\" data-dropdown aria-expanded=\"false\" data-placement=\"right\">\n                        <i class=\"fa-regular fa-ellipsis-h\" data-tree=\"escape\"></i>\n                        <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n                    </a>\n\n                    <div class=\"dropdown-menu hidden\" role=\"menu\">\n                        @php $data = ['toggle' => 'dialog', 'date' => $day['date'], 'target' => 'primary-dialog', 'url' => route('calendars.event.create', $routeOptions)]; @endphp\n                        <x-dropdowns.item link=\"#\" :data=\"$data\" icon=\"plus\">\n                            {{ __('calendars.actions.add_reminder') }}\n                        </x-dropdowns.item>\n\n                        @php $data = ['toggle' => 'dialog', 'date' => $day['date'], 'target' => 'primary-dialog', 'url' => route('calendars.calendar_weather.create', $routeOptions)]; @endphp\n                        <x-dropdowns.item link=\"#\" :data=\"$data\" icon=\"fa-regular fa-snowflake\">\n                            {{ __('calendars.actions.' .  (!empty($day['weather']) ? 'update_weather' : 'add_weather')) }}\n                        </x-dropdowns.item>\n\n                        @if (!\\Illuminate\\Support\\Arr::get($day, 'isToday', false))\n                            <x-dropdowns.divider />\n                            @php $data = ['date' => $day['date']]; @endphp\n                            <x-dropdowns.item :link=\"route('calendars.today', $routeOptions)\" :data=\"$data\" icon=\"check\">\n                                {{ __('calendars.actions.set_today') }}\n                            </x-dropdowns.item>\n                        @endif\n                    </div>\n                </div>\n               @endif\n            </div>\n            @if (!empty($day['moons']))\n                @foreach ($day['moons'] as $moon)\n                    <i class=\"moon {{ $moon['class'] }}\"  style=\"color:{{ \\Illuminate\\Support\\Arr::get($moon, 'colour', '#6B7280')}};\" data-title=\"{{ __('calendars.show.moon_' . $moon['type'], ['moon' => $moon['name']]) }}\" data-toggle=\"tooltip\"></i>\n                @endforeach\n            @endif\n            @if (!empty($day['season']))\n                <div class=\"badge calendar-season bg-season block w-full text-xs!\" data-toggle=\"tooltip\" data-title=\"{{ __('calendars.parameters.seasons.name') }}\">\n                    {{ $day['season'] }}\n                </div>\n            @endif\n\n            @if (!empty($day['weather']))\n                <div class=\"weather weather-{{ $day['weather']->weather }}\" data-html=\"true\" data-toggle=\"tooltip\" data-title=\"{!! $day['weather']->tooltip() !!}\">\n                    <x-icon class=\"fa-solid fa-{{ $day['weather']->weather }}\" />\n                    {{ $day['weather']->weatherName() }}\n                </div>\n            @endif\n            @if (!empty($day['events']))\n                @foreach ($day['events'] as $event)\n                    <div class=\"calendar-event-block text-left rounded-sm p-1 relative cursor-pointer text-sm flex gap-1 flex-col   {{ $event->getLabelColour() }}\" style=\"background-color: {{ $event->getLabelBackgroundColour() }}; @if (\\Illuminate\\Support\\Str::startsWith($event->colour, '#')) color: {{ $colours->contrastBW($event->colour) }};\"@endif\n                        @if ($canEdit && $event->isEntity())\n                            @php unset($routeOptions[0]); unset($routeOptions['date']); @endphp\n                            data-toggle=\"dialog\" data-url=\"{{ route('reminders.edit', ($event->calendar_id !== $model->id ? [$campaign, $event->id, 'from' => $entity->parent->entity_id, 'next' => 'calendar.' . $model->id] : [$campaign, $event->id, 'next' => 'calendar.' . $model->id]) + $routeOptions) }}\"\n\n                        @elseif ($canEdit && $event->isPost())\n                            @php unset($routeOptions[0]); unset($routeOptions['date']); @endphp\n                            data-toggle=\"dialog\" data-url=\"{{ route('reminders.edit', ($event->calendar_id !== $model->id ? [$campaign, $event->id, 'from' => $entity->parent->entity_id, 'next' => 'calendar.' . $model->id] : [$campaign, $event->id, 'next' => 'calendar.' . $model->id]) + $routeOptions) }}\"\n                        @elseif ($event->isPost())\n                            data-url=\"{{ route('entities.show', [$campaign, $event->remindable->entity, '#post-' . $event->remindable_id]) }}\"\n                        @else\n                            data-url=\"{{ $event->remindable->url() }}\"\n                        @endif\n                        >\n                        <div class=\"flex gap-1 items-center\">\n                            @if ($event->isEntity() && Avatar::entity($event->remindable)->hasImage())\n                                <div class=\"hidden md:inline grow-0\">\n                                    <a href=\"{{ $event->remindable->url() }}\" class=\"entity-image w-7 h-7 cover-background\" style=\"background-image: url('{{ Avatar::size(40)->thumbnail() }}');\"></a>\n                                </div>\n                            @endif\n\n                            <span data-toggle=\"tooltip-ajax\" data-id=\"{{ $event->isEntity() ? $event->remindable->id : $event->remindable->entity->id}}\" data-url=\"{{ route('entities.tooltip', [$campaign, $event->remindable->entity ?? $event->remindable]) }}\" class=\"grow truncate\">\n                                {{ $event->remindable->name }}\n                                @if ($renderer->isEventStartDate($event, $day['date']))\n                                    <span class=\"text-xs\">{{ __('calendars.events.start')}}</span>\n                                @elseif ($renderer->isEventEndDate($event, $day['date']))\n                                    <span class=\"text-xs\">{{ __('calendars.events.end')}}</span>\n                                @endif\n                            </span>\n                            @if ($event->isBirth())\n                                @if ($event->year === $day['year'])\n                                    <x-icon class=\"fa-regular fa-baby\" title=\"{{ __('entities/events.types.birth') }}\" tooltip />\n                                @else\n                                    <x-icon class=\"fa-regular fa-birthday-cake\" title=\"{{ __('entities/events.types.birthday') }}\" tooltip />\n                                @endif\n                            @endif\n                            @if ($event->isDeath())\n                                <x-icon class=\"fa-regular fa-skull\" title=\"{{ __('entities/events.types.death') }}\" tooltip />\n                            @endif\n                            @if ($event->is_recurring)\n                                <x-icon class=\"fa-regular fa-arrows-rotate\" tooltip :title=\"__('calendars.fields.is_recurring')\" />\n                            @endif\n                        </div>\n                        <div class=\"reminder-comment\">\n                            @if (!empty($event->comment))\n                            <span class=\"calendar-event-comment grow text-xs\" data-toggle=\"tooltip\" data-title=\"{{ $event->comment }}\">\n                                {!! $event->comment !!}\n                            </span>\n                            @endif\n\n                        </div>\n                    </div>\n                @endforeach\n            @endif\n        @endif\n        </div>\n    </td>\n@endif\n"
  },
  {
    "path": "resources/views/calendars/_intercalary.blade.php",
    "content": "<x-alert type=\"success\">\n    {{ $day['name'] }}\n</x-alert>\n"
  },
  {
    "path": "resources/views/calendars/_week.blade.php",
    "content": "<tr>\n    @foreach ($days as $day)\n        @include('calendar._day')\n    @endforeach\n</tr>"
  },
  {
    "path": "resources/views/calendars/events.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . __('crud.tabs.reminders'),\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'mainTitle' => false,\n])\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if (!request()->has('before_id'))\n            <a href=\"{{ route('calendars.events', [$campaign, $model, 'before_id' => 1]) }}\" class=\"btn2 btn-sm\">\n                {{ __('calendars.events.filters.show_before') }}\n            </a>\n        @endif\n        @if (!request()->has('after_id'))\n            <a href=\"{{ route('calendars.events', [$campaign, $model, 'after_id' => 1]) }}\" class=\"btn2 btn-sm\">\n                {{ __('calendars.events.filters.show_after') }}\n            </a>\n        @endif\n        @if (request()->has('after_id') || request()->has('before_id'))\n            <a href=\"{{ route('calendars.events', [$campaign, $model]) }}\" class=\"btn2 btn-sm\">\n                {{ __('calendars.events.filters.show_all') }}\n            </a>\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'events',\n        'view' => 'calendars.panels.events',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/form/_calendar.blade.php",
    "content": "<?php /** @var \\App\\Models\\Calendar $model */?>\n<x-grid>\n    <div class=\"flex gap-5 flex-col\">\n\n        <x-forms.field field=\"skip-zero\" :label=\"__('calendars.fields.skip_year_zero')\">\n            <input type=\"hidden\" name=\"skip_year_zero\" value=\"0\" />\n            <x-checkbox :text=\"__('calendars.hints.skip_year_zero')\">\n                <input type=\"checkbox\" name=\"skip_year_zero\" value=\"1\" @if (old('skip_year_zero', $source->child->skip_year_zero ?? $model->skip_year_zero ?? false)) checked=\"checked\" @endif />\n            </x-checkbox>\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"start-offset\"\n            :label=\"__('calendars.fields.start_offset')\"\n            tooltip\n            :helper=\"__('calendars.helpers.start_offset')\">\n            <input type=\"number\" name=\"start_offset\" value=\"{{ FormCopy::field('start_offset')->string(0) ?: old('start_offset', $source->child->start_offset ?? $model->start_offset ?? null) }}\" />\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"reset\"\n            :label=\"__('calendars.fields.reset')\"\n            tooltip\n            :helper=\"__('calendars.hints.reset')\">\n            <x-forms.select name=\"reset\" :options=\"__('calendars.options.resets')\" :selected=\"$source->child->reset ?? $model->reset ?? null\" />\n        </x-forms.field>\n\n        <input type=\"hidden\" name=\"calendar_id\" value=\"\" />\n        @include('cruds.fields.calendar', ['isParent' => true, 'helper' => __('calendars.hints.parent_calendar'), 'allowNew' => false])\n\n        <x-forms.field\n            field=\"layout\"\n            :label=\"__('calendars.fields.default_layout')\"\n            tooltip\n            :helper=\"__('calendars.helpers.default_layout')\">\n            <x-forms.select name=\"parameters[layout]\" :options=\"['' => __('calendars.layouts.monthly'), 'yearly' => __('calendars.layouts.yearly')]\" :selected=\"$source->child->parameters['layout'] ?? $model->parameters['layout'] ?? null\" />\n        </x-forms.field>\n\n        @include('cruds.fields.format')\n\n        <x-forms.field field=\"incrementing\" :label=\"__('calendars.fields.is_incrementing')\">\n            <input type=\"hidden\" name=\"is_incrementing\" value=\"0\" />\n            <x-checkbox :text=\"__('calendars.hints.is_incrementing')\">\n                <input type=\"checkbox\" name=\"is_incrementing\" value=\"1\" @if (old('is_incrementing', $source->child->is_incrementing ?? $model->is_incrementing ?? false)) checked=\"checked\" @endif />\n            </x-checkbox>\n        </x-forms.field>\n\n        <x-forms.field field=\"birthdays\" :label=\"__('calendars.fields.show_birthdays')\">\n            <input type=\"hidden\" name=\"show_birthdays\" value=\"0\" />\n            <x-checkbox :text=\"__('calendars.hints.show_birthdays')\">\n                <input type=\"checkbox\" name=\"show_birthdays\" value=\"1\" @if (old('show_birthdays', $source->show_birthdays ?? $model->show_birthdays ?? false)) checked=\"checked\" @endif />\n            </x-checkbox>\n        </x-forms.field>\n    </div>\n    <div class=\"flex gap-5 flex-col\">\n        <x-forms.field field=\"years\" :label=\" __('calendars.panels.years')\" :helper=\"__('calendars.hints.years')\">\n        </x-forms.field>\n\n\n        <button class=\"btn2 btn-sm btn-outline dynamic-row-add\" data-template=\"template_year\" data-target=\"calendar-years\" title=\"{{ __('calendars.actions.add_year') }}\">\n            <x-icon class=\"plus\" /> {{ __('calendars.actions.add_year') }}\n        </button>\n\n        <?php\n        $years = [];\n        $numbers = old('year_number');\n        $names = old('year_name');\n        if (!empty($numbers) && is_array($numbers)) {\n            $cpt = 0;\n            foreach ($numbers as $number) {\n                if (!empty($number) || !empty($names[$cpt])) {\n                    $years[$number] = $names[$cpt];\n                }\n                $cpt++;\n            }\n        } elseif (isset($model)) {\n            $years = $model->years();\n        } elseif (isset($source)) {\n            $years = $source->child->years();\n        } ?>\n        <div class=\"calendar-years sortable-elements\" data-handle=\".sortable-handler\">\n            @foreach ($years as $year => $name)\n                <div class=\"parent-delete-row\">\n                    <x-grid>\n                        <div class=\"flex gap-2 items-center\">\n                            <div class=\"sortable-handler p-2 cursor-move\">\n                                <x-icon class=\"fa-regular fa-grip-vertical\" />\n                            </div>\n                            <div class=\"grow field\">\n                                <label class=\"sr-only\">{{ __('calendars.parameters.year.number') }}</label>\n                                <input type=\"text\" name=\"year_number[]\" value=\"{{ $year }}\" maxlength=\"191\" class=\"w-full\" aria-label=\"{{ __('calendars.parameters.year.number') }}\" placeholder=\"{{ __('calendars.parameters.year.number') }}\" />\n                            </div>\n                        </div>\n                        <div class=\"flex gap-2 items-center\">\n                            <div class=\"grow field\">\n                                <label class=\"sr-only\">{{ __('calendars.parameters.year.name') }}</label>\n                                <input type=\"text\" name=\"year_name[]\" value=\"{{ $name }}\" maxlength=\"191\" class=\"w-full\" aria-label=\"{{ __('calendars.parameters.year.name') }}\" placeholder=\"{{ __('calendars.parameters.year.name') }}\" />\n                            </div>\n\n                            <span class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" data-remove=\"4\" title=\"{{ __('crud.remove') }}\">\n                                <x-icon class=\"trash\" />\n                            </span>\n                        </div>\n                    </x-grid>\n                </div>\n            @endforeach\n        </div>\n\n        <hr class=\"m-0\" />\n\n        <x-forms.field field=\"leap-year\" :label=\"__('calendars.fields.leap_year')\">\n            <input type=\"hidden\" name=\"has_leap_year\" value=\"0\" />\n            <x-checkbox :text=\"__('calendars.hints.leap_year')\">\n                <input type=\"checkbox\" name=\"has_leap_year\" id=\"has_leap_year\" value=\"1\" @if (old('has_leap_year', $source->child->has_leap_year ?? $model->has_leap_year ?? false)) checked=\"checked\" @endif />\n            </x-checkbox>\n        </x-forms.field>\n        <div class=\"grid grid-cols-2 gap-2 md:gap-5 @if (isset($model) && $model->has_leap_year || request()->old('has_leap_year') || (isset($source) && $source->child->has_leap_year))@else hidden @endif\" id=\"calendar-leap-year\">\n            <x-forms.field field=\"year-amount\" :label=\"__('calendars.fields.leap_year_amount')\">\n                <input type=\"number\" name=\"leap_year_amount\" value=\"{{ FormCopy::field('leap_year_amount')->string(0) ?: old('leap_year_amount', $source->child->leap_year_amount ?? $model->leap_year_amount ?? null) }}\" class=\"w-full\" maxlength=\"191\" placeholder=\"{{ __('calendars.placeholders.leap_year_amount') }}\"/>\n            </x-forms.field>\n            <x-forms.field field=\"leap-month\" :label=\"__('calendars.fields.leap_year_month')\">\n                <input type=\"number\" name=\"leap_year_month\" value=\"{{ FormCopy::field('leap_year_month')->string(0) ?: old('leap_year_month', $source->child->leap_year_month ?? $model->leap_year_month ?? null) }}\" class=\"w-full\" maxlength=\"191\" placeholder=\"{{ __('calendars.placeholders.leap_year_month') }}\"/>\n            </x-forms.field>\n            <x-forms.field field=\"leap-offset\" :label=\"__('calendars.fields.leap_year_offset')\">\n                <input type=\"number\" name=\"leap_year_offset\" value=\"{{ FormCopy::field('leap_year_offset')->string(0) ?: old('leap_year_offset', $source->child->leap_year_offset ?? $model->leap_year_offset ?? null) }}\" class=\"w-full\" maxlength=\"191\" placeholder=\"{{ __('calendars.placeholders.leap_year_offset') }}\"/>\n            </x-forms.field>\n            <x-forms.field field=\"leap-start\" :label=\"__('calendars.fields.leap_year_start')\">\n                <input type=\"number\" name=\"leap_year_start\" value=\"{{ FormCopy::field('leap_year_start')->string(0) ?: old('leap_year_start', $source->child->leap_year_start ?? $model->leap_year_start ?? null) }}\" class=\"w-full\" maxlength=\"191\" placeholder=\"{{ __('calendars.placeholders.leap_year_start') }}\"/>\n            </x-forms.field>\n        </div>\n    </div>\n</x-grid>\n\n\n@section('modals')\n    @parent\n    <template id=\"template_year\">\n        <div class=\"parent-delete-row\">\n            <x-grid>\n                <div class=\"flex gap-2 items-center\">\n                    <div class=\"sortable-handler p-2 cursor-move\">\n                        <x-icon class=\"fa-regular fa-grip-vertical\" />\n                    </div>\n                    <div class=\"grow field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.year.number') }}</label>\n                        <input type=\"number\" name=\"year_number[]\" value=\"\" class=\"w-full\" maxlength=\"191\" placeholder=\"{{ __('calendars.parameters.year.number') }}\"/>\n                    </div>\n                </div>\n\n                <div class=\"flex gap-2 items-center\">\n                    <div class=\"grow field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.year.name') }}</label>\n                        <input type=\"text\" name=\"year_number[]\" value=\"\" maxlength=\"191\" class=\"w-full\" aria-label=\"{{ __('calendars.parameters.year.number') }}\" placeholder=\"{{ __('calendars.parameters.year.number') }}\" />\n                    </div>\n                    <span class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" data-remove=\"4\" title=\"{{ __('crud.remove') }}\">\n                        <x-icon class=\"trash\" />\n                    </span>\n                </div>\n            </x-grid>\n        </div>\n    </template>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/form/_entry.blade.php",
    "content": "<?php /** @var \\App\\Models\\Calendar $model */ ?>\n<x-grid>\n    @include('cruds.fields.entity-name')\n\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Calendar::class, 'trans' => 'calendars'])\n\n    @include('cruds.fields.parent')\n\n    <div class=\"current grid grid-cols-3 gap-2\">\n\n        <x-forms.field\n            field=\"year\"\n            :label=\"__('calendars.fields.current_year')\">\n\n            <input type=\"number\" name=\"current_year\" class=\"w-full\" value=\"{{ !empty($model) ? $model->currentDate('year') : (isset($source) ? $source->child->currentDate('year') : null) }}\" placeholder=\"{{ __('calendars.fields.current_year') }}\" aria-label=\"{{ __('calendars.fields.current_year') }}\" />\n        </x-forms.field>\n        <x-forms.field\n            field=\"month\"\n            :label=\"__('calendars.fields.current_month')\">\n            <input type=\"number\" name=\"current_month\" class=\"w-full\" value=\"{{ !empty($model) ? $model->currentDate('month') : (isset($source) ? $source->child->currentDate('month') : null) }}\" placeholder=\"{{ __('calendars.fields.current_month') }}\" min=\"1\" aria-label=\"{{ __('calendars.fields.current_month') }}\" />\n        </x-forms.field>\n        <x-forms.field\n            field=\"day\"\n            :label=\"__('calendars.fields.current_day')\">\n            <input type=\"number\" name=\"current_day\" class=\"w-full\" value=\"{{ !empty($model) ? $model->currentDate('date') : (isset($source) ? $source->child->currentDate('date') : null) }}\" placeholder=\"{{ __('calendars.fields.current_day') }}\" min=\"1\" aria-label=\"{{ __('calendars.fields.current_day') }}\" />\n        </x-forms.field>\n\n    </div>\n\n    <x-forms.field\n        field=\"suffix\"\n        :label=\"__('calendars.fields.suffix')\">\n        <input type=\"text\" name=\"suffix\" value=\"{{ old('suffix', $source->child->suffix ?? $model->suffix ?? null) }}\" maxlength=\"45\" class=\"w-full\" placeholder=\"{{ __('calendars.placeholders.suffix') }}\" />\n    </x-forms.field>\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.tags')\n\n    @include('cruds.fields.image')\n</x-grid>\n\n@if (request()->has('redirect'))\n    <input type=\"hidden\" name=\"redirect\" value=\"{{ request()->get('redirect') }}\"/>\n@endif\n\n@section('scripts')\n    @parent\n    @vite('resources/js/forms/calendar.js')\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/form/_months.blade.php",
    "content": "<?php /** @var \\App\\Models\\Calendar $model */?>\n<x-grid type=\"1/1\">\n\n    <x-forms.field field=\"months\" required :label=\"__('calendars.fields.months')\" :helper=\"__('calendars.hints.months')\">\n        <input type=\"hidden\" name=\"month_name\" />\n    </x-forms.field>\n\n    <button class=\"btn2 btn-sm btn-outline dynamic-row-add\" data-template=\"template_month\" data-target=\"calendar-months\" title=\"{{ __('calendars.actions.add_month') }}\">\n        <x-icon class=\"plus\" /> {{ __('calendars.actions.add_month') }}\n    </button>\n\n    <?php\n    $months = [];\n    $names = old('month_name');\n    $lengths = old('month_length');\n    $aliases = old('month_alias');\n    $types = old('month_type');\n    if (!empty($names) && is_array($names)) {\n        $cpt = 0;\n        foreach ($names as $name) {\n            if (!empty($name) || !empty($lengths[$cpt])) {\n                $months[] = [\n                    'name' => $name,\n                    'length' => $lengths[$cpt],\n                    'alias' => $aliases[$cpt],\n                    'type' => $types[$cpt],\n                ];\n            }\n            $cpt++;\n        }\n    } elseif (isset($model)) {\n        $months = $model->months();\n    } elseif (isset($source)) {\n        $months = $source->child->months();\n    }\n    $monthTypes = [\n        'intercalary' => __('calendars.month_types.intercalary'),\n        'standard' => __('calendars.month_types.standard'),\n    ];\n    ?>\n    <div class=\"flex flex-col gap-2 calendar-months sortable-elements\" data-handle=\".sortable-handler\">\n        <div class=\"grid gap-2 grid-cols-2 md:grid-cols-4 md:gap-4\">\n            <div class=\"\">{{ __('calendars.parameters.month.name') }}</div>\n            <div class=\"\">{{ __('calendars.parameters.month.length') }}</div>\n            <div class=\"\">{{ __('calendars.parameters.month.alias') }}</div>\n            <div class=\"\">{{ __('calendars.parameters.month.type') }}\n                <x-icon class=\"question\" tooltip title=\"{{ __('calendars.helpers.month_type') }}\" />\n            </div>\n        </div>\n        @foreach ($months as $month)\n            <div class=\"parent-delete-row\">\n                <div class=\"grid gap-2 grid-cols-2 md:grid-cols-4 md:gap-4\">\n                    <div class=\"flex items-center gap-2\">\n                        <div class=\"sortable-handler p-2 cursor-move\">\n                            <x-icon class=\"fa-regular fa-grip-vertical\" />\n                        </div>\n                        <div class=\"field\">\n                            <label class=\"sr-only\">{{ __('calendars.parameters.month.name') }}</label>\n                            <input type=\"text\" name=\"month_name[]\" value=\"{{ $month['name'] }}\" maxlength=\"191\" class=\"w-full\" aria-label=\"{{ __('calendars.parameters.month.name') }}\" placeholder=\"{{ __('calendars.parameters.month.name') }}\" />\n                        </div>\n                    </div>\n\n                    <div class=\"field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.month.length') }}</label>\n                        <input type=\"number\" name=\"month_length[]\" class=\"w-full\" value=\"{{ $month['length'] }}\" maxlength=\"4\" aria-label=\"{{ __('calendars.parameters.month.length') }}\" placeholder=\"{{ __('calendars.parameters.month.length') }}\" />\n                    </div>\n\n                    <div class=\"field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.month.alias') }}</label>\n                        <input type=\"text\" name=\"month_alias[]\" value=\"{{ \\Illuminate\\Support\\Arr::get($month, 'alias', '') }}\" maxlength=\"191\" class=\"w-full\" aria-label=\"{{ __('calendars.parameters.month.alias') }}\" placeholder=\"{{ __('calendars.parameters.month.alias') }}\" />\n                    </div>\n\n                    <div class=\"flex items-center gap-2\">\n                        <div class=\"field\">\n                            <label class=\"sr-only\">{{ __('calendars.parameters.month.type') }}</label>\n                            <x-forms.select name=\"month_type[]\" :options=\"$monthTypes\" :selected=\"\\Illuminate\\Support\\Arr::get($month, 'type', 'standard')\" class=\"w-full\" :label=\"__('calendars.parameters.month.type')\" />\n                        </div>\n                        <div>\n                            <span class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" data-remove=\"4\" title=\"{{ __('crud.remove') }}\">\n                                <x-icon class=\"trash\" />\n                            </span>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        @endforeach\n    </div>\n</x-grid>\n@section('modals')\n    @parent\n<template id=\"template_month\">\n    <div class=\"parent-delete-row\">\n        <div class=\"grid gap-2 grid-cols-2 md:grid-cols-4 md:gap-4\">\n            <div class=\"flex gap-2 items-center\">\n                <div class=\"sortable-handler p-2 cursor-move\">\n                    <x-icon class=\"fa-regular fa-grip-vertical\" />\n                </div>\n                <div class=\"field\">\n                    <label class=\"sr-only\">{{ __('calendars.parameters.month.name') }}</label>\n                    <input type=\"text\" name=\"month_name[]\" value=\"\" placeholder=\"{{ __('calendars.parameters.month.name') }}\" aria-label=\"{{ __('calendars.parameters.month.name') }}\" maxlength=\"191\" class=\"w-full\" />\n                </div>\n            </div>\n            <div class=\"field\">\n                <label class=\"sr-only\">{{ __('calendars.parameters.month.length') }}</label>\n                <input type=\"number\" name=\"month_length[]\" class=\"w-full\" value=\"\" maxlength=\"4\" aria-label=\"{{ __('calendars.parameters.month.length') }}\" placeholder=\"{{ __('calendars.parameters.month.length') }}\" />\n            </div>\n            <div class=\"field\">\n                <label class=\"sr-only\">{{ __('calendars.parameters.month.alias') }}</label>\n                <input type=\"text\" name=\"month_alias[]\" value=\"\" placeholder=\"{{ __('calendars.parameters.month.alias') }}\" aria-label=\"{{ __('calendars.parameters.month.alias') }}\" maxlength=\"191\" class=\"w-full\" />\n            </div>\n            <div class=\"flex gap-2 items-center\">\n                <div class=\"field\">\n                    <label class=\"sr-only\">{{ __('calendars.parameters.month.type') }}</label>\n                    <x-forms.select name=\"month_type[]\" :options=\"$monthTypes\" selected=\"standard\" :label=\"__('calendars.parameters.month.type')\" />\n                </div>\n                <div class=\"\">\n                    <span class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" data-remove=\"4\" title=\"{{ __('crud.remove') }}\">\n                        <x-icon class=\"trash\" />\n                    </span>\n                </div>\n            </div>\n        </div>\n    </div>\n</template>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/form/_moons.blade.php",
    "content": "<?php /** @var \\App\\Models\\Calendar $model */?>\n<x-grid type=\"1/1\">\n\n    <p class=\"text-neutral-content m-0\">{{ __('calendars.hints.moons') }}</p>\n\n    <button class=\"btn2 btn-sm btn-outline dynamic-row-add\" data-template=\"template_moon\" data-target=\"calendar-moons\" title=\"{{ __('calendars.actions.add_moon') }}\">\n        <x-icon class=\"plus\" />\n        {{ __('calendars.actions.add_moon') }}\n    </button>\n<?php\n$moons = [];\n$moonNames = old('moon_name');\n$moonFullmoons = old('moon_fullmoon');\n$moonOffsets = old('moon_offset');\n$moonColours = old('moon_colour');\n$moonIds = old('moon_id');\nif (!empty($moonNames) && is_array($moonNames)) {\n    $cpt = 0;\n    foreach ($moonNames as $name) {\n        if (!empty($name) || !empty($moonFullmoons[$cpt])) {\n            $moons[] = [\n                'name' => $name,\n                'fullmoon' => $moonFullmoons[$cpt],\n                'offset' => $moonOffsets[$cpt],\n                'colour' => $moonColours[$cpt],\n                'id' => $moonIds[$cpt],\n            ];\n        }\n        $cpt++;\n    }\n} elseif (isset($model)) {\n    $moons = $model->moons();\n} elseif (isset($source)) {\n    $moons = $source->child->moons();\n}?>\n<div class=\"flex flex-col gap-2 calendar-moons sortable-elements\" data-handle=\".sortable-handler\">\n    <div class=\"grid gap-2 grid-cols-2 md:grid-cols-4 md:gap-4\">\n        <div class=\"\">{{ __('calendars.parameters.moon.name') }}</div>\n        <div class=\"\">{{ __('calendars.parameters.moon.fullmoon') }}</div>\n        <div class=\"\">{{ __('crud.fields.colour') }}</div>\n        <div class=\"\">\n            {{ __('calendars.parameters.moon.offset') }}\n            <x-helpers.tooltip :title=\"__('calendars.helpers.moon_offset')\" />\n        </div>\n    </div>\n    @foreach ($moons as $fullmoon)\n        <div class=\"parent-delete-row\">\n            <x-grid>\n                <div class=\"grid grid-cols-2 gap-2\">\n                    <div class=\"flex gap-2 items-center\">\n                        <div class=\"sortable-handler p-2 cursor-move\">\n                            <x-icon class=\"fa-regular fa-grip-vertical\" />\n                        </div>\n                        <div class=\"grow field\">\n                            <label class=\"sr-only\">{{ __('calendars.parameters.moon.name') }}</label>\n                            <input type=\"text\" name=\"moon_name[]\" value=\"{{ $fullmoon['name'] }}\" maxlength=\"191\" class=\"w-full\" aria-label=\"{{ __('calendars.parameters.moon.name') }}\" placeholder=\"{{ __('calendars.parameters.moon.name') }}\" />\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.moon.fullmoon') }}</label>\n                        <input type=\"number\" name=\"moon_fullmoon[]\" class=\"w-full\" value=\"{{  $fullmoon['fullmoon'] }}\" step=\"any\" min=\"1\" placeholder=\"{{ __('calendars.parameters.moon.fullmoon') }}\" aria-label=\"{{ __('calendars.parameters.moon.fullmoon') }}\" />\n                    </div>\n                </div>\n                <div class=\"grid grid-cols-2 gap-2\">\n                    <x-forms.field field=\"moon_colour[]\">\n                        <span>\n                            <input type=\"text\" name=\"moon_colour[]\" value=\"{{ \\Illuminate\\Support\\Arr::get($fullmoon, 'colour', 'grey') }}\"\n                            maxlength=\"7\" class=\"spectrum\" @if (isset($dropdownParent)) data-append-to=\"{{ $dropdownParent }}\" @endif />\n                        </span>\n                    </x-forms.field>\n                    <div class=\"flex gap-2 items-center\">\n                        <div class=\"grow field\">\n                            <label class=\"sr-only\">{{ __('calendars.parameters.moon.offset') }}</label>\n                            <input type=\"number\" name=\"moon_offset[]\" class=\"w-full\" value=\"{{  $fullmoon['offset'] }}\" placeholder=\"{{ __('calendars.parameters.moon.offset') }}\" aria-label=\"{{ __('calendars.parameters.moon.offset') }}\" />\n                        </div>\n                        <div class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" title=\"{{ __('crud.remove') }}\">\n                            <x-icon class=\"trash\" />\n                        </div>\n                    </div>\n                </div>\n            </x-grid>\n        </div>\n        <input type=\"hidden\" name=\"moon_id[]\" value=\"{{ $fullmoon['id'] }}\" />\n    @endforeach\n</div>\n</x-grid>\n@section('modals')\n    @parent\n<template id=\"template_moon\">\n    <div class=\"parent-delete-row\">\n        <x-grid>\n            <div class=\"grid grid-cols-2 gap-2\">\n                <div class=\"flex gap-2 items-center\">\n                    <div class=\"sortable-handler p-2 cursor-move\">\n                        <x-icon class=\"fa-regular fa-grip-vertical\" />\n                    </div>\n                    <div class=\"grow field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.moon.name') }}</label>\n                        <input type=\"text\" name=\"moon_name[]\" value=\"\" placeholder=\"{{ __('calendars.parameters.moon.name') }}\" aria-label=\"{{ __('calendars.parameters.moon.name') }}\" maxlength=\"191\" class=\"w-full\" />\n                    </div>\n                </div>\n                <div class=\"field\">\n                    <label class=\"sr-only\">{{ __('calendars.parameters.moon.fullmoon') }}</label>\n                    <input type=\"number\" name=\"moon_fullmoon[]\" class=\"w-full\" value=\"\" step=\"any\" min=\"1\" placeholder=\"{{ __('calendars.parameters.moon.fullmoon') }}\" aria-label=\"{{ __('calendars.parameters.moon.fullmoon') }}\" />\n                </div>\n            </div>\n            <div class=\"grid grid-cols-2 gap-2\">\n                <x-forms.field field=\"moon_colour[]\">\n                    <span>\n                        <input type=\"text\" name=\"moon_colour[]\" value=\"grey\"\n                        maxlength=\"7\" class=\"spectrum\" @if (isset($dropdownParent)) data-append-to=\"{{ $dropdownParent }}\" @endif />\n                    </span>\n                </x-forms.field>\n                <div class=\"flex gap-2 items-center\">\n                    <div class=\"grow field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.moon.offset') }}</label>\n                        <input type=\"number\" name=\"moon_offset[]\" class=\"w-full\" value=\"\" placeholder=\"{{ __('calendars.parameters.moon.offset') }}\" aria-label=\"{{ __('calendars.parameters.moon.offset') }}\" />\n                    </div>\n                    <div class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" title=\"{{ __('crud.remove') }}\">\n                        <x-icon class=\"trash\" />\n                    </div>\n                </div>\n            </div>\n        </x-grid>\n        <input type=\"hidden\" name=\"moon_id[]\" value=\"\" />\n    </div>\n</template>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/form/_panes.blade.php",
    "content": "<div class=\"tab-pane pane-calendar {{ (request()->get('tab') == 'form-calendar' ? ' active' : '') }}\" id=\"form-calendar\">\n    @include('calendars.form._calendar')\n</div>\n<div class=\"tab-pane pane-months {{ (request()->get('tab') == 'form-months' ? ' active' : '') }}\" id=\"form-months\">\n    @include('calendars.form._months')\n</div>\n<div class=\"tab-pane pane-weeks {{ (request()->get('tab') == 'form-weeks' ? ' active' : '') }}\" id=\"form-weeks\">\n    @include('calendars.form._weeks')\n</div>\n<div class=\"tab-pane pane-moons {{ (request()->get('tab') == 'form-moons' ? ' active' : '') }}\" id=\"form-moons\">\n    @include('calendars.form._moons')\n</div>\n<div class=\"tab-pane pane-seasons {{ (request()->get('tab') == 'form-seasons' ? ' active' : '') }}\" id=\"form-seasons\">\n    @include('calendars.form._seasons')\n</div>\n"
  },
  {
    "path": "resources/views/calendars/form/_seasons.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <p class=\"text-neutral-content m-0\">{{ __('calendars.hints.seasons') }}</p>\n\n    <button class=\"btn2 btn-sm btn-outline dynamic-row-add\" data-template=\"template_season\" data-target=\"calendar-seasons\" title=\"{{ __('calendars.actions.add_season') }}\">\n        <x-icon class=\"plus\" /> {{ __('calendars.actions.add_season') }}\n    </button>\n\n    <?php\n    $seasons = [];\n    $seasonNames = old('season_name');\n    $seasonMonths = old('season_month');\n    $seasonDays = old('season_day');\n    if (!empty($seasonNames) && is_array($seasonNames)) {\n        $cpt = 0;\n        foreach ($seasonNames as $name) {\n            if (!empty($name) || !empty($seasonMonths[$cpt])) {\n                $seasons[] = [\n                    'name' => $name,\n                    'month' => $seasonMonths[$cpt],\n                    'day' => $seasonDays[$cpt]\n                ];\n            }\n            $cpt++;\n        }\n    } elseif (isset($model)) {\n        $seasons = $model->seasons();\n    } elseif (isset($source)) {\n        $seasons = $source->child->seasons();\n    }?>\n    <div class=\"calendar-seasons sortable-elements flex flex-col gap-2\" data-handle=\".sortable-handler\">\n        <x-grid type=\"3/3\">\n            <div class=\"\">{{ __('calendars.parameters.seasons.name') }}</div>\n            <div class=\"\">{{ __('calendars.parameters.seasons.month') }}</div>\n            <div class=\"\">{{ __('calendars.parameters.seasons.day') }}</div>\n        </x-grid>\n        @foreach ($seasons as $season)\n            <div class=\"parent-delete-row\">\n                <x-grid type=\"3/3\">\n                    <div class=\"flex gap-2 items-center\">\n                        <div class=\"sortable-handler p-2 cursor-move\">\n                            <x-icon class=\"fa-regular fa-grip-vertical\" />\n                        </div>\n                        <div class=\"grow field\">\n                            <label class=\"sr-only\">{{ __('calendars.parameters.seasons.name') }}</label>\n                            <input type=\"text\" name=\"season_name[]\" value=\"{{ $season['name'] }}\" maxlength=\"191\" class=\"w-full\" />\n                        </div>\n                    </div>\n\n                    <div class=\"field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.seasons.month') }}</label>\n                        <input type=\"number\" name=\"season_month[]\" class=\"w-full\" value=\"{{ $season['month'] }}\" placeholder=\"{{ __('calendars.parameters.seasons.month') }}\" />\n                    </div>\n\n                    <div class=\"flex gap-2 items-center\">\n                        <div class=\"grow field\">\n                            <label class=\"sr-only\">{{ __('calendars.parameters.seasons.day') }}</label>\n                            <input type=\"number\" name=\"season_day[]\" class=\"w-full\" value=\"{{ $season['day'] }}\" placeholder=\"{{ __('calendars.parameters.seasons.day') }}\" />\n\n                        </div>\n                        <div class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" title=\"{{ __('crud.remove') }}\">\n                            <x-icon class=\"trash\" />\n                        </div>\n                    </div>\n                </x-grid>\n            </div>\n        @endforeach\n    </div>\n\n</x-grid>\n\n@section('modals')\n    @parent\n<template id=\"template_season\">\n    <div class=\"parent-delete-row\">\n        <x-grid type=\"3/3\">\n            <div class=\"flex gap-2 items-center\">\n                <div class=\"sortable-handler p-2 cursor-move\">\n                    <x-icon class=\"fa-regular fa-grip-vertical\" />\n                </div>\n                <div class=\"grow field\">\n                    <label class=\"sr-only\">{{ __('calendars.parameters.seasons.name') }}</label>\n                    <input type=\"text\" name=\"season_name[]\" value=\"\" placeholder=\"{{ __('calendars.parameters.seasons.name') }}\" aria-label=\"{{ __('calendars.parameters.seasons.name') }}\" maxlength=\"191\" class=\"w-full\" />\n                </div>\n            </div>\n\n            <div class=\"field\">\n                <label class=\"sr-only\">{{ __('calendars.parameters.seasons.month') }}</label>\n                <input type=\"number\" name=\"season_month[]\" class=\"w-full\" value=\"\" placeholder=\"{{ __('calendars.parameters.seasons.month') }}\" />\n            </div>\n\n            <div class=\"flex gap-2 items-center\">\n                <div class=\"grow field\">\n                    <label class=\"sr-only\">{{ __('calendars.parameters.seasons.day') }}</label>\n                    <input type=\"number\" name=\"season_day[]\" class=\"w-full\" value=\"\" placeholder=\"{{ __('calendars.parameters.seasons.day') }}\" />\n                </div>\n                <div class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" title=\"{{ __('crud.remove') }}\">\n                    <x-icon class=\"trash\" />\n                </div>\n            </div>\n        </x-grid>\n    </div>\n</template>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/form/_tabs.blade.php",
    "content": "<x-tab.tab target=\"calendar\" :title=\"__('entities.calendar')\"></x-tab.tab>\n<x-tab.tab target=\"months\" :title=\"__('calendars.panels.months')\"></x-tab.tab>\n<x-tab.tab target=\"weeks\" :title=\"__('calendars.panels.weeks')\"></x-tab.tab>\n<x-tab.tab target=\"moons\" :title=\"__('calendars.fields.moons')\" icon=\"fa-regular fa-moon\"></x-tab.tab>\n<x-tab.tab target=\"seasons\" :title=\"__('calendars.fields.seasons')\"></x-tab.tab>\n\n"
  },
  {
    "path": "resources/views/calendars/form/_weeks.blade.php",
    "content": "<?php /** @var \\App\\Models\\Calendar $model */?>\n\n<x-grid>\n    <x-grid type=\"1/1\">\n        <x-forms.field field=\"weeks\" required :label=\"__('calendars.fields.weekdays')\" :helper=\"__('calendars.hints.weekdays')\">\n            <input type=\"hidden\" name=\"weekday\" />\n        </x-forms.field>\n\n        <button class=\"btn2 btn-sm btn-outline dynamic-row-add\" data-template=\"template_weekday\" data-target=\"calendar-weekdays\" title=\"{{ __('calendars.actions.add_weekday') }}\">\n            <x-icon class=\"plus\" /> {{ __('calendars.actions.add_weekday') }}\n        </button>\n\n        <?php\n        $weekdays = [];\n        $names = old('weekday');\n        if (!empty($names) && is_array($names)) {\n            foreach ($names as $name) {\n                if (!empty($name)) {\n                    $weekdays[] = $name;\n                }\n            }\n        } elseif (isset($model)) {\n            $weekdays = $model->weekdays();\n        } elseif (isset($source)) {\n            $weekdays = $source->child->weekdays();\n        } ?>\n        <div class=\"calendar-weekdays sortable-elements\" data-handle=\".sortable-handler\">\n            @foreach ($weekdays as $weekday)\n                <div class=\"parent-delete-row\">\n                    <div class=\"flex items-center gap-2\">\n                        <div class=\"sortable-handler p-2 cursor-move\">\n                            <x-icon class=\"fa-regular fa-grip-vertical\" />\n                        </div>\n                        <div class=\"grow field\">\n                            <label class=\"sr-only\">{{ __('calendars.parameters.weeks.name') }}</label>\n                            <input type=\"text\" name=\"weekday[]\" value=\"{{ $weekday }}\" placeholder=\"{{ __('calendars.parameters.weeks.name') }}\" aria-label=\"{{ __('calendars.parameters.weeks.name') }}\" maxlength=\"191\" class=\"w-full\" />\n                        </div>\n                        <div class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" title=\"{{ __('crud.remove') }}\">\n                            <x-icon class=\"trash\" />\n                            <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                        </div>\n                    </div>\n                </div>\n            @endforeach\n        </div>\n    </x-grid>\n\n    <x-grid type=\"1/1\">\n        <x-forms.field field=\"week-names\" :label=\"__('calendars.fields.week_names')\" :helper=\"__('calendars.hints.weeks')\">\n        </x-forms.field>\n\n        <button class=\"btn2 btn-sm btn-outline dynamic-row-add\" data-template=\"template_week\" data-target=\"calendar-weeks\" title=\"{{ __('calendars.actions.add_week') }}\">\n            <x-icon class=\"plus\" />\n            {{ __('calendars.actions.add_week') }}\n        </button>\n\n        <?php\n        $weeks = [];\n        $numbers = old('week_number');\n        $names = old('week_name');\n        if (!empty($numbers) && is_array($numbers)) {\n            $cpt = 0;\n            foreach ($numbers as $number) {\n                if (!empty($number) || !empty($names[$cpt])) {\n                    $weeks[$number] = $names[$cpt];\n                }\n                $cpt++;\n            }\n        } elseif (isset($model)) {\n            $weeks = $model->weeks();\n        } elseif (isset($source)) {\n            $weeks = $source->child->weeks();\n        } ?>\n        <div class=\"flex flex-col gap-2 calendar-weeks sortable-elements\"  data-handle=\".sortable-handler\">\n            <x-grid>\n                <div>{{ __('calendars.parameters.weeks.number') }}</div>\n                <div>{{ __('calendars.parameters.weeks.name') }}</div>\n            </x-grid>\n            @foreach ($weeks as $week => $name)\n                <div class=\"parent-delete-row \">\n                    <div class=\"grid grid-cols-2 gap-2\">\n                        <div class=\"flex items-center gap-2\">\n                            <div class=\"sortable-handler p-2 cursor-move\">\n                                <x-icon class=\"fa-regular fa-grip-vertical\" />\n                            </div>\n                            <div class=\"grow field\">\n                                <label class=\"sr-only\">{{ __('calendars.parameters.weeks.number') }}</label>\n                                <input type=\"text\" name=\"week_number[]\" value=\"{{ $week }}\" placeholder=\"{{ __('calendars.parameters.weeks.number') }}\" aria-label=\"{{ __('calendars.parameters.weeks.number') }}\" maxlength=\"191\" class=\"w-full\" />\n                            </div>\n                        </div>\n                        <div class=\"flex items-center gap-2\">\n                            <div class=\"grow field\">\n                                <label class=\"sr-only\">{{ __('calendars.parameters.weeks.name') }}</label>\n                                <input type=\"text\" name=\"week_name[]\" value=\"{{ $name }}\" placeholder=\"{{ __('calendars.parameters.weeks.name') }}\" aria-label=\"{{ __('calendars.parameters.weeks.name') }}\" maxlength=\"191\" class=\"w-full\" />\n                            </div>\n                            <div class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" title=\"{{ __('crud.remove') }}\">\n                                <x-icon class=\"trash\" />\n                                <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            @endforeach\n        </div>\n    </x-grid>\n</x-grid>\n\n@section('modals')\n    @parent\n    <template id=\"template_weekday\">\n        <div class=\"parent-delete-row\">\n            <div class=\"flex items-center gap-2\">\n                <div class=\"sortable-handler p-2 cursor-move\">\n                    <x-icon class=\"fa-regular fa-grip-vertical\" />\n                </div>\n                <div class=\"grow field\">\n                    <label class=\"sr-only\">{{ __('calendars.parameters.weeks.name') }}</label>\n                    <input type=\"text\" name=\"weekday[]\" value=\"\" placeholder=\"{{ __('calendars.parameters.weeks.name') }}\" aria-label=\"{{ __('calendars.parameters.weeks.name') }}\" maxlength=\"191\" class=\"w-full\" />\n                </div>\n                <div class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" title=\"{{ __('crud.remove') }}\">\n                    <x-icon class=\"trash\" />\n                </div>\n            </div>\n        </div>\n    </template>\n\n    <template id=\"template_week\">\n        <div class=\"parent-delete-row \">\n            <div class=\"grid grid-cols-2 gap-2\">\n                <div class=\"flex items-center gap-2\">\n                    <div class=\"sortable-handler p-2 cursor-move\">\n                        <x-icon class=\"fa-regular fa-grip-vertical\" />\n                    </div>\n                    <div class=\"grow field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.weeks.number') }}</label>\n                        <input type=\"number\" name=\"week_number[]\" class=\"w-full\" value=\"\" placeholder=\"{{ __('calendars.parameters.weeks.number') }}\" />\n                    </div>\n                </div>\n                <div class=\"flex items-center gap-2\">\n                    <div class=\"grow field\">\n                        <label class=\"sr-only\">{{ __('calendars.parameters.weeks.name') }}</label>\n                        <input type=\"text\" name=\"week_name[]\" value=\"\" placeholder=\"{{ __('calendars.parameters.weeks.name') }}\" aria-label=\"{{ __('calendars.parameters.weeks.name') }}\" maxlength=\"191\" class=\"w-full\" />\n                    </div>\n                    <div class=\"dynamic-row-delete btn2 btn-error btn-outline btn-sm\" title=\"{{ __('crud.remove') }}\">\n                        <x-icon class=\"trash\" />\n                        <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </template>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/panels/events.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Calendar $model */\n/** @var \\App\\Models\\Reminder $event */\n?>\n<div id=\"calendar-events\">\n    @if(Datagrid::hasBulks())\n        <x-form :action=\"['calendars.entity-events.bulk', $campaign, 'calendar' => $model]\"> @endif\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table')\n            </div>\n            @if(Datagrid::hasBulks()) </x-form>\n    @endif\n</div>\n\n@section('modals')\n    @parent\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms(), 'params' => []])\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/reminders/_entity_form.blade.php",
    "content": "<?php\n$onlyOneCalendar = count($calendars) == 1;\n?>\n<x-grid type=\"1/1\">\n    @empty($model)\n        <x-helper>\n            <p>{{ __('entities/events.create.helper', ['name' => $entity->name]) }}</p>\n        </x-helper>\n    @endif\n\n    <div id=\"entity-calendar-modal-form w-full\">\n        <div class=\"field-calendar entOrity-calendar-selector w-full\">\n            <x-forms.foreign\n                :campaign=\"$campaign\"\n                name=\"calendar_id\"\n                key=\"calendar\"\n                :allowNew=\"false\"\n                :allowClear=\"true\"\n                :route=\"route('search-list', [$campaign, config('entities.ids.calendar')] + (isset($model) ? ['exclude' => $model->id] : []))\"\n                :selected=\"$onlyOneCalendar ? $calendars->first() : null\"\n                :dropdownParent=\"$dropdownParent ?? (request()->ajax() ? '#primary-dialog' : null)\"\n                :entityTypeID=\"config('entities.ids.calendar')\">\n            </x-forms.foreign>\n        </div>\n    </div>\n\n\n    <x-grid type=\"1/1\" class=\"entity-calendar-subform {{ $onlyOneCalendar ? '' : 'hidden' }}\">\n        @include('calendars.reminders._subform')\n    </x-grid>\n\n</x-grid>\n\n<div class=\"entity-calendar-loading hidden\">\n    <p class=\"text-center\">\n        <x-icon class=\"load\" />\n    </p>\n</div>\n\n<input type=\"hidden\" name=\"calendar-data-url\" data-url=\"{{ route('calendars.month-list', [$campaign, 'calendar' => 0]) }}\">\n"
  },
  {
    "path": "resources/views/calendars/reminders/_form.blade.php",
    "content": "\n<x-grid type=\"1/1\">\n@if (!empty($from))\n    <x-alert type=\"warning\" class=\"w-full\">\n        <p>{!! __('calendars.event.helpers.other_calendar', ['calendar' => '<a href=\"' . $from->entity?->url() . '\" class=\"text-link\">' . $from->name . '</a>']) !!}</p>\n    </x-alert>\n@endif\n\n@if (!empty($reminder) && $reminder->isEntity())\n    @include('cruds.fields.entity', ['route' => null, 'preset' => $reminder->remindable, 'name' => 'entity_id', 'dropdownParent' => $dropdownParent ?? '#primary-dialog', 'allowClear' => false])\n@endif\n\n<div id=\"calendar-event-subform\" class=\"flex flex-col gap-4 md:gap-6\">\n    @if (empty($reminder))\n        <div class=\"flex gap-2 md:gap-4 items-center\">\n            <div class=\"grow calendar-existing-event-field\">\n                @php $eventModule = \\App\\Models\\EntityType::find(config('entities.ids.event')) @endphp\n                @include('cruds.fields.entity', [\n                    'dropdownParent' => $dropdownParent ?? (request()->ajax() ? '#primary-dialog' : null),\n                    'required' => true,\n                    'dynamicNew' => auth()->user()->can('create', [$eventModule, $campaign]),\n                    'dynamicTag' => __('crud.titles.new', ['module' => $eventModule->name()])\n                ])\n            </div>\n        </div>\n    @endif\n    @include('calendars.reminders._subform')\n</div>\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/calendars/reminders/_subform.blade.php",
    "content": "<?php /** @var \\App\\Models\\Reminder $reminder */?>\n<x-grid type=\"3/3\">\n    <x-forms.field\n        field=\"year\"\n        :label=\"__('calendars.fields.year')\">\n        <input type=\"number\" name=\"year\" value=\"{{ $year ?? old('year', $reminder->year ?? null) }}\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"month\"\n        :label=\"__('calendars.fields.month')\">\n        <x-forms.select\n                name=\"month\"\n                id=\"reminder_month\"\n                :options=\"isset($calendar) ? $calendar->monthList() : []\"\n                :selected=\"$month ?? $reminder->month ?? null\"\n                :optionAttributes=\"!empty($calendar) ? $calendar->monthDataProperties() : []\"\n        />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"day\"\n        :label=\"__('calendars.fields.day')\">\n        <x-forms.select\n                name=\"day\"\n                id=\"reminder_day\"\n                :options=\"isset($calendar) ? $calendar->dayList($month ?? $reminder->month ?? $calendar->month) : []\"\n                :selected=\"$day ?? $source->day ?? $reminder->day ?? null\"\n        />\n    </x-forms.field>\n</x-grid>\n<x-grid>\n    <x-forms.field field=\"comment\" css=\"col-span-2\" :label=\"__('calendars.fields.comment')\">\n        <input type=\"text\" name=\"comment\" value=\"{{ old('comment', $reminder->comment ?? null) }}\" maxlength=\"191\" class=\"w-full\" placeholder=\"{{ __('calendars.placeholders.comment') }}\" />\n    </x-forms.field>\n    <div id=\"entity-calendar-modal-add\">\n        <x-forms.field\n            field=\"length\"\n            :label=\"__('calendars.fields.length')\"\n            :helper=\"__('calendars.hints.event_length')\"\n            tooltip>\n            <input type=\"number\" name=\"length\" id=\"reminder_length\" class=\"w-full\" value=\"{{ old('length', $reminder->length ?? 1) }}\" placeholder=\"{{ __('calendars.placeholders.length') }}\" aria-label=\"{{ __('calendars.placeholders.length') }}\" data-url=\"{{ route('calendars.event-length', [$campaign, 'calendar' => $calendar ?? 0]) }}\" />\n            <p class=\"length-warning hidden text-error-content\">\n                {!!  __('calendars.warnings.event_length', ['documentation' => '<a target=\"_blank\" href=\"https://docs.kanka.io/en/latest/entries/calendars.html#long-lasting-reminders\"><i class=\"fa-regular fa-external-link\" aria-hidden=\"true\"></i> ' . __('footer.documentation') . '</a>'])!!}\n            </p>\n        </x-forms.field>\n</div>\n    @include('cruds.fields.colour_picker', ['default' => '#cccccc', 'model' => $reminder ?? null])\n\n    <x-forms.field\n        field=\"recurring\"\n        :label=\"__('calendars.fields.is_recurring')\">\n        <x-forms.select name=\"recurring_periodicity\" :options=\"isset($calendar) ? $calendar->recurringOptions() : []\" :selected=\"$reminder->recurring_periodicity ?? null\" class=\"w-full reminder-periodicity\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"recurring-until\" :hidden=\"!isset($reminder) || !$reminder->is_recurring\" :label=\"__('calendars.fields.recurring_until')\"  id=\"add_event_recurring_until\">\n        <input type=\"text\" name=\"recurring_until\" value=\"{{ old('recurring_until', $reminder->recurring_until ?? null) }}\" maxlength=\"12\" class=\"w-full\" placeholder=\"{{ __('calendars.placeholders.recurring_until') }}\" />\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id', ['model' => $reminder ?? null])\n    @if (!empty($entity) && $entity->isCharacter() && (!isset($reminder) || isset($reminder) && $reminder->isEntity()))\n        <x-forms.field\n            field=\"type\"\n            :label=\"__('entities/events.fields.type')\"\n            :helper=\" __('entities/events.helpers.characters', ['more' => '<a target=\\'_blank\\' href=\\'https://docs.kanka.io/en/latest/advanced/age.html\\'>' . __('crud.actions.find_out_more') . '</a>'])\">\n            <x-forms.select name=\"type_id\" :options=\"[null => '', 2 => __('entities/events.types.birth'), 3 =>  __('entities/events.types.death')]\" :selected=\"$reminder->type_id ?? null\" />\n        </x-forms.field>\n    @endif\n    @if (!empty($entity) && in_array($entity->typeId(), [config('entities.ids.location'), config('entities.ids.family'), config('entities.ids.organisation')]))\n        <x-forms.field\n            field=\"type\"\n            :label=\"__('entities/events.fields.type')\"\n            :helper=\"__('entities/events.helpers.founding', ['type' => '<code>' . __('entities/events.types.founded') . '</code>'])\">\n                <x-forms.select name=\"type_id\" :options=\"[null => '', 5 => __('entities/events.types.founded')]\" :selected=\"$reminder->type_id ?? null\" />\n        </x-forms.field>\n    @endif\n</x-grid>\n\n\n"
  },
  {
    "path": "resources/views/calendars/reminders/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => trans('calendars.event.create.title', ['name' => $calendar->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        ['url' => route('calendars.index', $campaign), 'label' => __('entities.calendars')],\n        ['url' => route('calendars.show', [$campaign, $calendar->id]), 'label' => $calendar->name],\n        trans('crud.tabs.reminders'),\n    ],\n    'canonical' => true,\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['calendars.event.store', $campaign, $calendar->id]\" class=\"entity-calendar-subform\">\n\n    @include('partials.forms._dialog', [\n        'title' => __('calendars.event.create.title', ['name' => $calendar->name]),\n        'content' => 'calendars.reminders._form',\n        'dropdownParent' => '#primary-dialog',\n    ])\n\n    @if (request()->has('layout'))\n        <input type=\"hidden\" name=\"layout\" value=\"{{ request()->get('layout') }}\" />\n    @endif\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/reminders/create_from_entity.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('calendars.event.create.title', ['name' => $entity->name]),\n    'breadcrumbs' => [\n        ['url' => route('calendars.index', $campaign), 'label' => __('entities.calendars')],\n        ['url' => $entity->url(), 'label' => $entity->name],\n        __('crud.tabs.reminders'),\n    ],\n    'canonical' => true,\n    'centered' => true,\n])\n@section('content')\n\n    <x-form :action=\"['entities.reminders.store', $campaign, $entity->id]\" class=\"\">\n\n    @include('partials.forms._dialog', [\n        'title' => __('calendars.event.create.title', ['name' => $entity->name]),\n        'content' => 'calendars.reminders._entity_form',\n        'dropdownParent' => request()->ajax() ? '#primary-dialog' : null,\n    ])\n\n    <input type=\"hidden\" name=\"entity_id\" value=\"{{ $entity->id }}\" />\n    @if (!empty($next))\n        <input type=\"hidden\" name=\"next\" value=\"{{ $next }}\" />\n    @endif\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/reminders/edit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('calendars.event.edit.title', ['name' => $entity->name]),\n    'breadcrumbs' => isset($next) && $next == 'entity.reminders' ? [\n        $entity->entityType->plural(),\n        ['url' => $entity->url(), 'label' => $entity->name],\n        __('crud.tabs.reminders'),\n        __('crud.update'),\n    ] : [\n        Breadcrumb::campaign($campaign)->entity($reminder->calendar->entity)->list(),\n        Breadcrumb::show(),\n        __('crud.tabs.reminders'),\n        __('crud.update'),\n    ],\n    'canonical' => true,\n    'centered' => true,\n])\n@section('content')\n    <x-form method=\"PATCH\" :action=\"['reminders.update', $campaign, $reminder->id]\" class=\"entity-calendar-subform\">\n\n    @include('partials.forms._dialog', [\n        'title' => __('calendars.event.edit.title', ['name' => '<a href=\"' . $entity->url() . '\" class=\"text-link\">' . $entity->name . '</a>']),\n        'content' => 'calendars.reminders._form',\n        'deleteID' => '#delete-reminder-' . $reminder->id,\n        'dropdownParent' => request()->ajax() ? '#primary-dialog' : null,\n    ])\n\n\n    @if (!empty($next))\n        <input type=\"hidden\" name=\"next\" value=\"{{ $next }}\" />\n    @endif\n    @if (request()->has('layout'))\n        <input type=\"hidden\" name=\"layout\" value=\"{{ request()->get('layout') }}\" />\n    @endif\n    </x-form>\n    <x-form :action=\"['reminders.destroy', $campaign, $reminder->id]\" method=\"DELETE\" id=\"delete-reminder-{{ $reminder->id }}\">\n    @if (request()->has('layout'))\n        <input type=\"hidden\" name=\"layout\" value=\"{{ request()->get('layout') }}\" />\n    @endif\n    @if (!empty($from))\n        <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" />\n    @endif\n    @if (!empty($next))\n        <input type=\"hidden\" name=\"next\" value=\"{{ $next }}\" />\n    @endif\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/show.blade.php",
    "content": "<?php /** @var \\App\\Models\\Calendar $model */\n$model = $entity->child;\n$options = [$campaign, $model];\n$redirect = [];\nif (request()->get('layout') === 'year') {\n    $redirect[] = 'layout=year';\n}\nif (request()->has('year') && is_numeric(request()->has('year'))) {\n    $redirect[] = 'year=' . request()->get('year');\n}\nif (request()->has('month') && is_numeric(request()->has('month'))) {\n    $redirect[] = 'month=' . request()->get('month');\n}\nif (!empty($redirect)) {\n    $options['redirect'] = implode(\"&\", $redirect);\n}\n?>\n@section('entity-header-actions-override')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @include('entities.headers.toggle')\n        @include('entities.headers.actions')\n    </div>\n@endsection\n\n<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header', [\n        'entityHeaderActions' => 'entity-header-actions-override',\n    ])\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story', 'withPins'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.entry')\n            @include('calendars._calendar')\n            @includeWhen($entity->posts()->count() > 0, 'entities.components.posts')\n\n            @include('entities.pages.logs.history')\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/calendars/weather/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    @empty($model)\n        <x-helper>\n            <p>{{ __('calendars/weather.create.helper') }}</p>\n        </x-helper>\n    @endif\n    <x-forms.field\n        field=\"weather\"\n        required\n        :label=\"__('calendars/weather.fields.weather')\">\n        <x-forms.select name=\"weather\" :options=\"__('calendars/weather.options.weather')\" :selected=\"$model->weather ?? null\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"name\"\n        :label=\"__('calendars/weather.fields.name')\">\n        <input type=\"text\" name=\"name\" placeholder=\"{{ __('calendars/weather.placeholders.name') }}\" maxlength=\"40\" value=\"{!! htmlspecialchars(old('name', $source->name ?? $weather->name ?? null)) !!}\" />\n    </x-forms.field>\n\n    <x-grid>\n        <x-forms.field\n            field=\"temperature\"\n            :label=\"__('calendars/weather.fields.temperature')\">\n            <input type=\"text\" name=\"temperature\" value=\"{{ old('temperature', $weather->temperature ?? null) }}\" placeholder=\"{{ __('calendars/weather.placeholders.temperature') }}\" aria-label=\"{{ __('calendars/weather.placeholders.temperature') }}\" maxlength=\"191\" class=\"w-full\" />\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"precipitation\"\n            :label=\"__('calendars/weather.fields.precipitation')\">\n            <input type=\"text\" name=\"precipitation\" value=\"{{ old('precipitation', $weather->precipitation ?? null) }}\" placeholder=\"{{ __('calendars/weather.placeholders.precipitation') }}\" aria-label=\"{{ __('calendars/weather.placeholders.precipitation') }}\" maxlength=\"191\" class=\"w-full\" />\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"winds\"\n            :label=\"__('calendars/weather.fields.wind')\">\n            <input type=\"text\" name=\"wind\" value=\"{{ old('wind', $weather->wind ?? null) }}\" placeholder=\"{{ __('calendars/weather.placeholders.wind') }}\" aria-label=\"{{ __('calendars/weather.placeholders.wind') }}\" maxlength=\"191\" class=\"w-full\" />\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"effect\"\n            :label=\"__('calendars/weather.fields.effect')\">\n            <input type=\"text\" name=\"effect\" value=\"{{ old('effect', $weather->effect ?? null) }}\" placeholder=\"{{ __('calendars/weather.placeholders.effect') }}\" aria-label=\"{{ __('calendars/weather.placeholders.effect') }}\" maxlength=\"191\" class=\"w-full\" />\n        </x-forms.field>\n\n        @include('cruds.fields.visibility_id', ['model' => $weather ?? null])\n    </x-grid>\n</x-grid>\n"
  },
  {
    "path": "resources/views/calendars/weather/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('calendars/weather.create.title', ['name' => $calendar->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($calendar->entity)->list(),\n        Breadcrumb::show(),\n        __('calendars.show.tabs.weather'),\n    ],\n    'canonical' => true,\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['calendars.calendar_weather.store', $campaign, $calendar->id]\">\n\n    @include('partials.forms._dialog', [\n        'title' => __('calendars/weather.create.title', ['name' => $calendar->name]),\n        'content' => 'calendars.weather._form',\n    ])\n\n    <input type=\"hidden\" name=\"year\" value=\"{{ $year }}\" />\n    <input type=\"hidden\" name=\"month\" value=\"{{ $month }}\" />\n    <input type=\"hidden\" name=\"day\" value=\"{{ $day }}\" />\n    @if (request()->has('layout'))\n        <input type=\"hidden\" name=\"layout\" value=\"{{ request()->get('layout') }}\" />\n    @endif\n\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/weather/edit.blade.php",
    "content": "<?php /** @var \\App\\Models\\CalendarWeather $weather */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('calendars/weather.edit.title'),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($weather->calendar->entity)->list(),\n        Breadcrumb::show(),\n        __('calendars.show.tabs.weather'),\n        __('crud.update'),\n    ],\n    'canonical' => true,\n    'centered' => true,\n])\n@section('content')\n    <x-form method=\"PATCH\" :action=\"['calendars.calendar_weather.update', $campaign, $weather->calendar->id, $weather->id]\">\n\n    @include('partials.forms._dialog', [\n        'title' => __('calendars/weather.edit.title'),\n        'content' => 'calendars.weather._form',\n        'deleteID' => '#delete-weather-' . $weather->id,\n    ])\n\n    <input type=\"hidden\" name=\"year\" value=\"{{ $weather->year }}\" />\n    <input type=\"hidden\" name=\"month\" value=\"{{ $weather->month }}\" />\n    <input type=\"hidden\" name=\"day\" value=\"{{ $weather->day }}\" />\n    @if (request()->has('layout'))\n        <input type=\"hidden\" name=\"layout\" value=\"{{ request()->get('layout') }}\" />\n    @endif\n    </x-form>\n\n\n    <x-form method=\"DELETE\" :action=\"['calendars.calendar_weather.destroy', $campaign, $weather->calendar->id, $weather->id]\" id=\"delete-weather-{{ $weather->id }}\">\n    @if (request()->has('layout'))\n        <input type=\"hidden\" name=\"layout\" value=\"{{ request()->get('layout') }}\" />\n        <input type=\"hidden\" name=\"year\" value=\"{{ $year }}\" />\n        <input type=\"hidden\" name=\"month\" value=\"{{ $month }}\" />\n        <input type=\"hidden\" name=\"day\" value=\"{{ $day }}\" />\n    @endif\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/calendars/year-switcher/_footer.blade.php",
    "content": "    <div class=\"flex justify-center w-full\">\n        <button class=\"btn2 btn-primary\">\n            {{ __('crud.actions.confirm') }}\n        </button>\n    </div>\n"
  },
  {
    "path": "resources/views/campaigns/_overview.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */\n?>\n\n<div class=\"grid grid-cols-1 md:grid-cols-2 gap-5\">\n    @if (config('limits.campaigns.premium'))\n    <x-box class=\"flex items-center gap-5 rounded-xl \">\n        @if ($campaign->boosted())\n            @php\n                $booster = $campaign->boosts()->first();\n                if ($booster) {\n                    $link = '<a href=\"' . route('users.profile', [$booster->user]) . '\" class=\"text-link\">' . $booster->user->name . '</a>';\n                } else {\n                    $link = __('crud.unknown');\n                }\n            @endphp\n        @endif\n        <div class=\"rounded {{ $campaign->boosted() ? 'bg-green-200' : 'bg-error' }} w-12 h-12 flex items-center justify-center text-xl flex-none\">\n            <x-icon class=\"fa-regular {{ $campaign->boosted() ? 'fa-gem text-success-content' : 'fa-times text-error-content' }}\" />\n        </div>\n        <div class=\"flex flex-col gap-1 grow\">\n            <span>{!! __('campaigns.status.title') !!}</span>\n            @if ($campaign->premium())\n                <span class=\"text-success-content\">\n                    {!! __('campaigns.status.premium', ['name' => $link]) !!}\n                </span>\n            @elseif ($campaign->boosted())\n                <span class=\"text-success-content\">\n                    {{ __('campaigns.fields.' . ($campaign->superboosted() ? 'superboosted' : 'boosted')) }}\n                    {!! $link !!}\n                </span>\n            @else\n                <span class=\"text-neutral-content\">{!! __('campaigns.status.free') !!}</span>\n            @endif\n        </div>\n        @if (!$campaign->boosted() && auth()->check())\n            @if (auth()->user()->hasBoosterNomenclature())\n                <a class=\"rounded-full border border-base-300 h-12 w-12 gap-2 flex items-center justify-center cursor-pointer neutral-link hover:bg-base-200 flex-none\" href=\"{{ route('settings.boost', ['campaign' => $campaign->id]) }}\">\n                    <x-icon class=\"fa-regular fa-angle-right\" />\n                </a>\n            @else\n                <a class=\"rounded-full border border-base-300 h-12 w-12 flex gap-2 items-center justify-center cursor-pointer neutral-link hover:bg-base-200 flex-none\" href=\"{{ route('settings.premium', ['campaign' => $campaign->id]) }}\" data-tooltip data-title=\"{{ __('campaigns/overview.premium.enable') }}\">\n                    <x-icon class=\"fa-regular fa-angle-right\" />\n                </a>\n            @endif\n        @elseif (auth()->check())\n            <a class=\"rounded-full border border-base-300 h-12 w-12 flex items-center justify-center cursor-pointer neutral-link hover:bg-base-200 flex-none\" href=\"{{ route('settings.premium') }}\" >\n                <x-icon class=\"fa-regular fa-angle-right\" />\n            </a>\n        @endif\n    </x-box>\n    @endif\n\n\n    <x-infoBox\n        title=\"{{ __('crud.fields.visibility') }}\"\n        icon=\"{{ $campaign->isUnlisted() ? 'fa-regular fa-user-secret text-neutral-content' : ($campaign->isPublic() ? 'fa-regular fa-check text-success-content' : 'fa-regular fa-lock text-neutral-content') }}\"\n        subtitle=\"{{ $campaign->isUnlisted() ? __('campaigns/visibilities.titles.unlisted') : ($campaign->isPublic() ? __('campaigns/visibilities.titles.public') : __('campaigns/visibilities.titles.private')) }}\"\n        background=\"{{ $campaign->isPublic() ? 'bg-green-200' : 'bg-neutral' }}\"\n        subtitleColour=\"{{ $campaign->isPublic() ? 'text-success-content' : 'text-neutral-content' }}\"\n        :campaign=\"$campaign\"\n        :url=\"auth()->check() && auth()->user()->can('update', $campaign) ? route('campaign-visibility', [$campaign, 'from' => 'overview']) : null\"\n        :urlTooltip=\"__('campaigns/public.title')\"\n        ajax\n    ></x-infoBox>\n\n    @can('member', $campaign)\n        <x-infoBox\n            title=\"{{ __('campaigns/overview.member.title') }}\"\n            icon=\"fa-regular fa-clock text-neutral-content\"\n            subtitle=\"{{ __('users/profile.fields.member_since', ['date' => $campaign->members()->where('user_id', auth()->user()->id)->first()?->created_at?->isoFormat('MMMM D, Y')]) }}\"\n            :campaign=\"$campaign\"\n            :url=\"route('campaign.leave', $campaign)\"\n            :urlTooltip=\"__('campaigns.leave.action')\"\n            urlIcon=\"fa-regular fa-person-walking text-error-content\"\n            urlButton=\"border-error\"\n            ajax\n        ></x-infoBox>\n    @endif\n\n    @if ($campaign->isPublic())\n        <x-infoBox\n            :title=\"__('campaigns/overview.followers.title')\"\n            icon=\"fa-regular fa-users text-neutral-content\"\n            :subtitle=\"trans_choice('campaigns.overview.follower-count', $campaign->follower(), ['amount' => \\Illuminate\\Support\\Number::format($campaign->follower())])\"\n        ></x-infoBox>\n    @endif\n</div>\n\n"
  },
  {
    "path": "resources/views/campaigns/achievements/_finished.blade.php",
    "content": "@php\n    use \\Illuminate\\Support\\Arr;\n@endphp\n<div class=\"achievement shadow-xs hover:shadow-md rounded-xl bg-base-100 w-full sm:w-80 md:w-96 flex flex-col gap-2 md:gap-3 p-5 md:p-5 level-{{ $stat['level'] }}\" data-achievement=\"{{ $key }}\">\n\n    <div class=\"flex gap-2 md:gap-5 items-center grow\">\n        <div class=\"flex-none text-accent text-4xl border-accent border-opacity-20 rounded-full border-4 flex items-center justify-center w-20 h-20\">\n            <x-icon class=\"fa-duotone fa-crown\" />\n        </div>\n        <div class=\"grow\">\n            <p class=\"text-neutral-content\">\n                {{  __('campaigns/achievements.congratulations') }}\n            </p>\n            <p class=\"text-lg\">\n                {{  __('campaigns/achievements.goal_reached') }}\n            </p>\n            <p class=\"text-accent text-xl\">\n                {{  __('campaigns/achievements.titles.' . $key) }}\n            </p>\n\n            @if (!empty(Arr::get($stat, 'url')))\n                <p class=\"mt-2\">\n                    <a href=\"{{ Arr::get($stat, 'url') }}\"\n                       class=\"underline\"\n                       rel=\"noopener noreferrer\">\n                        {{ __('campaigns/achievements.spotlight.active.cta') }}\n                    </a>\n                </p>\n            @endif\n        </div>\n    </div>\n\n    <div class=\"achievement-progress rounded-xl bg-accent h-2 w-full\" role=\"progressbar\"></div>\n\n    <div class=\"text-center text-neutral-content text-xs\">\n\n        {{ trans_choice('campaigns/achievements.' . Arr::get($stat, 'history', 'created'), Arr::get($stat, 'amount', 0), [\n'singular' => Arr::get($stat, 'module.singular', 'Forgot singular'),\n'plural' => Arr::get($stat, 'module.plural', 'Forgot plural'),\n'amount' => \\Illuminate\\Support\\Number::format(Arr::get($stat, 'amount', 0)) . ' / ' . \\Illuminate\\Support\\Number::format(Arr::get($stat, 'target', 0))\n]) }}\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/campaigns/achievements/_locked.blade.php",
    "content": "@php\n    use \\Illuminate\\Support\\Arr;\n@endphp\n<div class=\"achievement shadow-xs hover:shadow-md rounded-xl bg-base-100 w-full sm:w-80 md:w-96 flex flex-col gap-2 md:gap-3 p-5 level-{{ $stat['level'] }}\" data-achievement=\"{{ $key }}\">\n\n    <div class=\"achievement-header flex gap-2 items-center\">\n        <div class=\"grow text-xl\">\n            {{  __('campaigns/achievements.titles.' . $key) }}\n        </div>\n        @if ($key !== 'spotlighted')\n        <div class=\"flex-none bg-base-200 rounded-lg p-2\">\n            {{  __('campaigns/achievements.level', ['number' => Arr::get($stat, 'level', 0)]) }}\n        </div>\n        @endif\n    </div>\n\n    <div class=\"achievement-motivation flex gap-2 md:gap-6 grow\">\n        <div class=\"flex-none w-20 h-20 rounded-full  text-4xl flex items-center justify-center\n            @if ($key === 'spotlighted' && !$campaign->isPublic()) bg-base-300 text-neutral-content' @else bg-primary text-primary-content @endif\">\n            <x-icon class=\"{{ $stat['icon'] }}\" />\n        </div>\n        <div class=\"grow flex flex-col\">\n            @if ($key === 'spotlighted')\n                @if ($campaign->isPublic())\n                    <x-helper>\n                        <p>{{ __('campaigns/achievements.spotlight.public.helper') }}</p>\n                    </x-helper>\n                    <a href=\"{{ route('spotlights.application', ['campaign' => $campaign]) }}\" class=\"text-link\">\n                        {{ __('campaigns/achievements.spotlight.public.cta') }}\n                    </a>\n                @else\n                    <x-helper>\n                        <p>{{ __('campaigns/achievements.spotlight.private.helper') }}</p>\n                    </x-helper>\n                    @can('update', $campaign)\n\n                        <a href=\"{{ route('campaigns.edit', ['campaign' => $campaign]) }}\" class=\"text-link\">\n                            {{ __('campaigns/achievements.spotlight.private.cta') }}\n                        </a>\n                    @endif\n                @endif\n            @else\n                <div class=\"text-2xl\">\n                    @php\n                        $remaining = Arr::get($stat, 'target', 0) - Arr::get($stat, 'amount', 0);\n                    @endphp\n                    {{ $remaining }}\n                </div>\n                <div class=\"text-neutral-content\">\n                    {{  __('campaigns/achievements.remaining.generic') }}\n                </div>\n            @endif\n        </div>\n    </div>\n\n    <div class=\"flex gap-2 w-full items-end\">\n        <div class=\"grow flex flex-col gap-2\">\n            <div class=\"achievement-progress rounded-xl bg-primary-content h-2 w-full\" role=\"progressbar\">\n                <div class=\"h-2 bg-primary rounded-xl\" style=\"width: {{ Arr::get($stat, 'progress', 0) }}%\"></div>\n            </div>\n            <div class=\"flex gap-2 text-neutral-content text-xs\">\n                <div class=\"grow\">\n                    {{ trans_choice('campaigns/achievements.' . Arr::get($stat, 'history', 'created'), Arr::get($stat, 'amount', 0), [\n'singular' => Arr::get($stat, 'module.singular', 'Forgot singular'),\n'plural' => Arr::get($stat, 'module.plural', 'Forgot plural'),\n'amount' => \\Illuminate\\Support\\Number::format(Arr::get($stat, 'amount', 0))\n]) }}\n                </div>\n                <div class=\"flex-none\">\n                    {{  __('campaigns/achievements.goal', ['number' => \\Illuminate\\Support\\Number::format(Arr::get($stat, 'target', 0))]) }}\n                </div>\n            </div>\n        </div>\n        <div class=\"flex-none text-2xl text-primary mb-2\">\n            @if ($stat['level'] === 0)\n                <x-icon class=\"fa-duotone fa-coin\" />\n            @elseif ($stat['level'] === 1)\n                <x-icon class=\"fa-duotone fa-coins\" />\n            @elseif ($stat['level'] === 2)\n                <x-icon class=\"fa-duotone fa-gem\" />\n            @elseif ($stat['level'] === 3)\n                <x-icon class=\"fa-duotone fa-treasure-chest\" />\n            @elseif ($stat['level'] === 4)\n                <x-icon class=\"fa-duotone fa-crown\" />\n            @endif\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/campaigns/achievements/index.blade.php",
    "content": "@php\nuse \\Illuminate\\Support\\Arr;\n@endphp\n@extends('layouts.app', [\n    'title' => __('campaigns.show.tabs.achievements') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.achievements')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n\n    <div class=\"flex gap-5 flex-col achievements\">\n        <div class=\"flex gap-2 items-center\">\n            <h1 class=\"inline-block grow text-2xl\">\n            {{ __('campaigns.show.tabs.achievements') }}\n            </h1>\n\n            <x-learn-more url=\"features/campaigns/achievements.html\" />\n        </div>\n        @if (!$campaign->superboosted())\n            <x-premium-cta :campaign=\"$campaign\" superboost>\n                <p>{{ __('campaigns/achievements.pitch') }}</p>\n            </x-premium-cta>\n        @else\n\n            <p>{!! __('campaigns/achievements.tutorial') !!}</p>\n\n        <div class=\"flex flex-wrap gap-5\">\n        @foreach ($achievements as $key => $stat)\n                @if ($stat['level'] === 5)\n                    @include('campaigns.achievements._finished')\n                @else\n                    @include('campaigns.achievements._locked')\n                @endif\n            @endforeach\n        </div>\n        @endif\n    </div>\n@endsection\n\n"
  },
  {
    "path": "resources/views/campaigns/applications/_apply.blade.php",
    "content": "<x-grid type=\"1/1\">\n    @include('partials.errors')\n\n    <p class=\"text-neutral-content m-0\">{{ __('campaigns/applications.apply.help') }}</p>\n\n    <x-forms.field \n        field=\"character_concept\" \n        :label=\"__('campaigns/applications.fields.character_concept')\">\n        <textarea \n            name=\"character_concept\" \n            class=\"w-full p-2 border rounded\" \n            rows=\"5\" \n            placeholder=\"{{ __('campaigns/applications.placeholders.character_concept') }}\"\n        >{{ old('character_concept', $application->character_concept ?? '') }}</textarea>\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"experience\"\n        required\n        :label=\"__('campaigns/applications.fields.experience_level')\"\n        :helper=\"__('campaigns/applications.helpers.experience_level')\">\n        \n        <x-forms.select \n            name=\"experience\" \n            radio \n            :options=\"[\n                0 => __('campaigns/applications.experience.new'),\n                1 => __('campaigns/applications.experience.intermediate'),\n                2 => __('campaigns/applications.experience.veteran'),\n            ]\" \n            :selected=\"old('experience', $application->experience ?? 0)\" \n        />\n    </x-forms.field>\n\n    <div class=\"col-span-full space-y-4 mt-4\">\n        <h3 class=\"text-lg font-medium text-gray-900\">{{ __('campaigns/applications.headers.availability') }}</h3>\n        \n        <x-forms.field \n            field=\"availability_days\" \n            :label=\"__('campaigns/applications.fields.availability_days')\"\n            :helper=\"__('campaigns/applications.helpers.availability_days')\">\n            \n            <div class=\"flex flex-wrap gap-4 mt-2\">\n                @foreach(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] as $day)\n                    <label class=\"inline-flex items-center\">\n                        <input \n                            type=\"checkbox\" \n                            name=\"availability_days[]\" \n                            value=\"{{ $day }}\"\n                            class=\"rounded border-gray-300 text-indigo-600 shadow-sm\"\n                            @checked(in_array($day, old('availability_days', $application->availability_days ?? [])))\n                        >\n                        <span class=\"ml-2 text-sm text-gray-600\">{{ __('campaigns/applications.weekdays.' . $day) }}</span>\n                    </label>\n                @endforeach\n            </div>\n        </x-forms.field>\n\n        <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n            <x-forms.field field=\"time_start\" :label=\"__('campaigns/applications.fields.time_start')\">\n                <input \n                    type=\"time\" \n                    name=\"time_start\" \n                    class=\"w-full border-gray-300 rounded-md shadow-sm\"\n                    value=\"{{ old('time_start', isset($application->time_start) ? \\Carbon\\Carbon::parse($application->time_start)->format('H:i') : '') }}\" \n                />\n            </x-forms.field>\n\n            <x-forms.field field=\"time_end\" :label=\"__('campaigns/applications.fields.time_end')\">\n                <input \n                    type=\"time\" \n                    name=\"time_end\" \n                    class=\"w-full border-gray-300 rounded-md shadow-sm\"\n                    value=\"{{ old('time_end', isset($application->time_end) ? \\Carbon\\Carbon::parse($application->time_end)->format('H:i') : '') }}\" \n                />\n            </x-forms.field>\n\n            <x-forms.field field=\"timezone\" :label=\"__('campaigns/applications.fields.timezone')\">\n                <x-forms.select \n                    name=\"timezone\" \n                    :options=\"$timezones\" \n                    :selected=\"old('timezone', $application->timezone ?? $campaign->getFilter(\\App\\Enums\\CampaignFilterType::Timezone))\" \n                />\n            </x-forms.field>\n        </div>\n    </div>\n\n    <div class=\"col-span-full mt-6 space-y-6\">\n        <h3 class=\"text-lg font-medium text-gray-900\">{{ __('campaigns/applications.headers.preferences') }}</h3>\n        <x-forms.field field=\"pref_rp_combat\" :label=\"__('campaigns/applications.fields.pref_rp_combat')\">\n            <div class=\"flex justify-between text-xs font-medium opacity-80 mb-1\">\n                <span>{{ __('campaigns/applications.labels.rp_heavy') }}</span>\n                <span>{{ __('campaigns/applications.labels.combat_focused') }}</span>\n            </div>\n            <input \n                type=\"range\" \n                name=\"pref_rp_combat\" \n                min=\"0\" max=\"2\" step=\"1\" \n                value=\"{{ old('pref_rp_combat', $application->pref_rp_combat ?? 1) }}\"\n                class=\"w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer\"\n            >\n        </x-forms.field>\n\n        <x-forms.field field=\"pref_tone\" :label=\"__('campaigns/applications.fields.pref_tone')\">\n            <div class=\"flex justify-between text-xs font-medium opacity-80 mb-1\">\n                <span>{{ __('campaigns/applications.labels.serious') }}</span>\n                <span>{{ __('campaigns/applications.labels.casual') }}</span>\n            </div>\n            <input \n                type=\"range\" \n                name=\"pref_tone\" \n                min=\"0\" max=\"2\" step=\"1\" \n                value=\"{{ old('pref_tone', $application->pref_tone ?? 1) }}\"\n                class=\"w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer\"\n            >\n        </x-forms.field>\n    </div>\n\n    <x-forms.field \n        field=\"external_link\" \n        :label=\"__('campaigns/applications.fields.external_link')\"\n        :helper=\"__('campaigns/applications.helpers.external_link')\">\n        <input \n            type=\"url\" \n            name=\"external_link\" \n            placeholder=\"https://dndbeyond.com/characters/...\" \n            class=\"w-full border-gray-300 rounded-md shadow-sm\"\n            value=\"{{ old('external_link', $application->external_link ?? '') }}\"\n        />\n    </x-forms.field>\n\n    <x-forms.field \n        field=\"additional_notes\" \n        :label=\"__('campaigns/applications.fields.additional_notes')\">\n        <input \n            type=\"text\" \n            name=\"additional_notes\" \n            placeholder=\"{{ __('campaigns/applications.placeholders.additional_notes') }}\" \n            class=\"w-full border-gray-300 rounded-md shadow-sm\"\n            value=\"{{ old('additional_notes', $application->additional_notes ?? '') }}\"\n            maxlength=\"255\"\n        />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/campaigns/applications/_list.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Application[] $applications */\n?>\n\n<div class=\"grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-2 lg:gap-4 xl:gap-5\">\n    @foreach($applications as $application)\n        <div class=\"bg-base-100 shadow-xs hover:shadow-md rounded-xl flex p-4 items-center justify-center gap-3\">\n            @if ($application->user->hasAvatar())\n                <x-users.avatar :user=\"$application->user\" class=\"h-10 w-10\" />\n            @else\n                <div class=\"rounded-full bg-base-300 h-8 w-8\"></div>\n            @endif\n            <div class=\"grow flex flex-col gap-0.5 overflow-hidden\">\n                <p class=\"truncate\">{!! $application->user->name !!}</p>\n                <p class=\"text-neutral-content text-sm\">{{ $application->created_at->diffForHumans() }}</p>\n                @if ($application->character_concept)\n                    <p class=\"text-neutral-content text-sm truncate\">{{ \\Illuminate\\Support\\Str::limit($application->character_concept, 20) }}</p>\n                @endif\n            </div>\n\n            <div class=\"rounded-full border border-base-300 h-8 w-8 flex items-center justify-center flex-none cursor-pointer\" data-toggle=\"dialog\" data-url=\"{{  route('applications.show', [$campaign, $application])}}\">\n                <x-icon class=\"fa-solid fa-angle-right\" />\n            </div>\n        </div>\n    @endforeach\n</div>\n{!! $applications->onEachSide(0)->links() !!}\n"
  },
  {
    "path": "resources/views/campaigns/applications/_requirements.blade.php",
    "content": "@php\n/** @var \\App\\Models\\Campaign $campaign */\n@endphp\n<div class=\"grid grid-cols-1 md:grid-cols-2 gap-5\">\n    <x-box class=\"flex items-center gap-5 rounded-xl\">\n        <div class=\"rounded {{ !$campaign->isPrivate() ? 'bg-green-200' : 'bg-error' }} w-12 h-12 flex items-center justify-center flex-none\">\n            <x-icon class=\"fa-solid {{ !$campaign->isPrivate() ? 'fa-check text-success-content' : 'fa-times text-error-content' }}\" />\n        </div>\n        <div class=\"flex flex-col gap-0 grow\">\n            <span>{!! __('campaigns/applications.public.title') !!}</span>\n            @if (!$campaign->isPrivate())\n                <span class=\"text-success-content\">{!! __('campaigns/applications.public.public') !!}</span>\n            @else\n                <span class=\"text-error-content\">{!! __('campaigns/applications.public.private') !!}</span>\n            @endif\n        </div>\n        <div class=\"rounded-full border border-base-300 h-12 w-12 flex items-center justify-center cursor-pointer hover:bg-base-200 flex-none\" data-url=\"{{ route('campaign-visibility', $campaign) }}\" data-toggle=\"dialog\">\n            <x-icon class=\"fa-solid fa-angle-right\" />\n        </div>\n    </x-box>\n\n    <x-box class=\"flex items-center gap-5 rounded-xl\">\n        <div class=\"rounded {{ $campaign->isOpen() ? 'bg-green-200' : 'bg-error' }} w-12 h-12 flex items-center justify-center flex-none\">\n            <x-icon class=\"fa-solid {{ $campaign->isOpen() ? 'fa-check text-success-content' : 'fa-times text-error-content' }}\" />\n        </div>\n        <div class=\"flex flex-col gap-0 grow\">\n            <span>{!! __('campaigns/applications.open.title') !!}</span>\n            @if ($campaign->isOpen())\n                <span class=\"text-success-content\">{!! __('campaigns/applications.open.open') !!}</span>\n            @else\n                <span class=\"text-error-content\">{!! __('campaigns/applications.open.closed') !!}</span>\n            @endif\n        </div>\n        <div class=\"rounded-full border border-base-300 h-12 w-12 flex items-center justify-center cursor-pointer hover:bg-base-200 flex-none\" data-url=\"{{ route('campaign-applications', $campaign) }}\" data-target=\"application-dialog\" data-toggle=\"dialog\">\n            <x-icon class=\"fa-solid fa-angle-right\" />\n        </div>\n    </x-box>\n\n    <x-box class=\"flex items-center gap-5 rounded-xl\">\n        @can('canOpen', $campaign)\n            <div class=\"rounded bg-green-200 w-12 h-12 flex items-center justify-center flex-none\">\n                <x-icon class=\"fa-solid fa-check text-success-content\" />\n            </div>\n        @else\n            <div class=\"rounded bg-error w-12 h-12 flex items-center justify-center flex-none\">\n                <x-icon class=\"fa-solid fa-times text-error-content\" />\n            </div>\n        @endcan\n        <div class=\"flex flex-col gap-0 grow\">\n            <span>{!! __('campaigns/applications.setup.title') !!}</span>\n            @can('canOpen', $campaign)\n                <span class=\"text-success-content\">{!! __('campaigns/applications.setup.done') !!}</span>\n            @else\n                <span class=\"text-error-content\">{!! __('campaigns/applications.setup.setup') !!}</span>\n            @endcan\n        </div>\n        <a href=\"{{ route('campaign-applications.setup', $campaign) }}\"\n        class=\"rounded-full border border-base-300 h-12 w-12 flex items-center justify-center cursor-pointer hover:bg-base-200 flex-none\">\n            <x-icon class=\"fa-solid fa-angle-right\" />\n        </a>\n    </x-box>\n\n    @if ($campaign->isOpen())\n        @php $hasJoinWidget = $campaign->widgets()->where('widget', \\App\\Enums\\Widget::Join)->exists(); @endphp\n        <x-box class=\"flex items-center gap-5 rounded-xl\">\n            <div class=\"rounded {{ $hasJoinWidget ? 'bg-green-200' : 'bg-error' }} w-12 h-12 flex items-center justify-center flex-none\">\n                <x-icon class=\"fa-solid {{ $hasJoinWidget ? 'fa-check text-success-content' : 'fa-times text-error-content' }}\" />\n            </div>\n            <div class=\"flex flex-col gap-0 grow\">\n                <span>{!! __('campaigns/applications.dashboard_widget.title') !!}</span>\n                @if ($hasJoinWidget)\n                    <span class=\"text-success-content\">{!! __('campaigns/applications.dashboard_widget.has_widget') !!}</span>\n                @else\n                    <span class=\"text-error-content\">{!! __('campaigns/applications.dashboard_widget.no_widget') !!}</span>\n                @endif\n            </div>\n            <a href=\"{{ route('campaign-applications.dashboard-widget', $campaign) }}\"\n            class=\"rounded-full border border-base-300 h-12 w-12 flex items-center justify-center cursor-pointer hover:bg-base-200 flex-none\">\n                <x-icon class=\"fa-solid fa-angle-right\" />\n            </a>\n        </x-box>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/applications/_toggle.blade.php",
    "content": "<x-form :action=\"['campaign-applications.save', $campaign]\" class=\"text-left w-full max-w-lg\">\n    @include('partials.forms._dialog', [\n        'title' => __('campaigns/applications.toggle.title'),\n        'content' => 'campaigns.applications._toggle_form',\n        'save' => __('crud.actions.apply'),\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/campaigns/applications/_toggle_form.blade.php",
    "content": "@php\n    $canOpen = auth()->user()->can('canOpen', $campaign);\n    $statusOptions = [\n        0 => __('campaigns/applications.toggle.closed')\n    ];\n\n    if ($canOpen) {\n        $statusOptions[1] = __('campaigns/applications.toggle.open');\n    }\n@endphp\n\n<x-forms.field\n    field=\"status\"\n    required\n    :label=\"__('campaigns/applications.toggle.label')\"\n    :helper=\"$canOpen ? __('campaigns/applications.helpers.modal') : __('campaigns/applications.helpers.fill_setup')\">\n    \n    <x-forms.select \n        name=\"status\" \n        radio \n        :options=\"$statusOptions\" \n        :selected=\"$campaign->is_open ?? 0\" \n    />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/campaigns/applications/_view.blade.php",
    "content": "<div class=\"flex flex-col gap-4\">\n    <div class=\"flex items-start gap-4\">\n        @if ($application->user->hasAvatar())\n            <x-users.avatar :user=\"$application->user\" class=\"h-14 w-14 rounded-full\" size=\"80\" />\n        @endif\n\n        <div class=\"flex flex-col\">\n            <div class=\"flex items-baseline gap-3\">\n                <span class=\"text-xl font-bold\">{!! $application->user->name !!}</span>\n\n                @php\n                    $expLabel = match($application->experience) {\n                        0 => __('campaigns/applications.experience.new'),\n                        1 => __('campaigns/applications.experience.intermediate'),\n                        2 => __('campaigns/applications.experience.veteran'),\n                        default => 'Unknown'\n                    };\n                @endphp\n                <span class=\"badge badge-primary badge-outline capitalize\">\n                    {{ $expLabel }}\n                </span>\n            </div>\n\n            <span class=\"text-neutral-content text-sm\" title=\"{{ $application->created_at }}\">\n                Applied {{ $application->created_at->diffForHumans() }}\n            </span>\n        </div>\n    </div>\n\n    <hr />\n\n    <div class=\"space-y-1\">\n        <p class=\"text-sm font-medium text-base-content/70\">\n            {{ __('campaigns/applications.fields.character_concept') }}\n        </p>\n        <div class=\"text-sm\">\n            @if($application->character_concept)\n                {!! nl2br(e($application->character_concept)) !!}\n            @else\n                <span class=\"italic opacity-50\">{{ __('campaigns/applications.placeholders.character_concept') }}</span>\n            @endif\n        </div>\n    </div>\n\n    @if($application->external_link)\n        <div class=\"space-y-1\">\n            <p class=\"text-sm font-medium text-base-content/70\">\n                {{ __('campaigns/applications.fields.external_link') }}\n            </p>\n            <div class=\"flex items-center gap-2 text-sm\">\n                <i class=\"fa-solid fa-link\" aria-hidden=\"true\"></i>\n                <a href=\"{{ $application->external_link }}\" target=\"_blank\" class=\"text-link break-all\">\n                    {{ $application->external_link }}\n                </a>\n            </div>\n        </div>\n    @endif\n\n    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 bg-base-200 p-4 rounded-lg\">\n\n        <div class=\"space-y-3\">\n            <p class=\"text-sm font-medium text-base-content/70\">\n                {{ __('campaigns/applications.headers.availability') }}\n            </p>\n\n            <div class=\"flex flex-wrap gap-2\">\n                @forelse($application->availability_days ?? [] as $day)\n                    <span class=\"badge badge-primary badge-outline capitalize\">\n                        {{ __('campaigns/applications.weekdays.' . $day) }}\n                    </span>\n                @empty\n                    <span class=\"text-sm opacity-60\">Unspecified</span>\n                @endforelse\n            </div>\n\n            <div class=\"text-sm\">\n                <span class=\"opacity-70\">Time:</span>\n                <span class=\"font-medium\">\n                    {{ $application->time_start ? \\Carbon\\Carbon::parse($application->time_start)->format('H:i') : '?' }}\n                    -\n                    {{ $application->time_end ? \\Carbon\\Carbon::parse($application->time_end)->format('H:i') : '?' }}\n                </span>\n                <div class=\"text-xs opacity-60 mt-1\">\n                    ({{ $application->timezone ?? 'UTC' }})\n                </div>\n            </div>\n        </div>\n\n        <div class=\"space-y-4\">\n            <p class=\"text-sm font-medium text-base-content/70\">\n                {{ __('campaigns/applications.headers.preferences') }}\n            </p>\n\n            <div>\n                <div class=\"flex justify-between text-xs opacity-70 mb-2\">\n                    <span>{{ __('campaigns/applications.labels.rp_heavy') }}</span>\n                    <span>{{ __('campaigns/applications.labels.combat_focused') }}</span>\n                </div>\n                <div class=\"relative w-full h-6 flex items-center\">\n                    <div class=\"relative w-full h-1.5 rounded-full bg-base-300\">\n                        <div class=\"absolute h-full rounded-full bg-primary\" style=\"width: {{ ($application->pref_rp_combat ?? 1) * 50 }}%;\"></div>\n                    </div>\n                    <div class=\"absolute w-5 h-5 bg-base-100 border-2 border-primary rounded-full shadow-md z-10 transition-all duration-300\"\n                        style=\"left: {{ ($application->pref_rp_combat ?? 1) * 50 }}%; transform: translateX(-50%);\">\n                        <div class=\"absolute inset-1 bg-primary/20 rounded-full\"></div>\n                    </div>\n                </div>\n            </div>\n\n            <div>\n                <div class=\"flex justify-between text-xs opacity-70 mb-2\">\n                    <span>{{ __('campaigns/applications.labels.serious') }}</span>\n                    <span>{{ __('campaigns/applications.labels.casual') }}</span>\n                </div>\n                <div class=\"relative w-full h-6 flex items-center\">\n                    <div class=\"relative w-full h-1.5 rounded-full bg-base-300\">\n                        <div class=\"absolute h-full rounded-full bg-primary\" style=\"width: {{ ($application->pref_tone ?? 1) * 50 }}%;\"></div>\n                    </div>\n                    <div class=\"absolute w-5 h-5 bg-base-100 border-2 border-primary rounded-full shadow-md z-10 transition-all duration-300\"\n                        style=\"left: {{ ($application->pref_tone ?? 1) * 50 }}%; transform: translateX(-50%);\">\n                        <div class=\"absolute inset-1 bg-primary/20 rounded-full\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    @if($application->additional_notes)\n        <div class=\"space-y-1\">\n            <p class=\"text-sm font-medium text-base-content/70\">\n                {{ __('campaigns/applications.fields.additional_notes') }}\n            </p>\n            <div class=\"text-sm\">\n                {!! nl2br(e($application->additional_notes)) !!}\n            </div>\n        </div>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/applications/apply.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/applications.apply.title', ['name' => $campaign->name]),\n    'breadcrumbs' => [\n        __('dashboard.actions.join')\n    ]\n])\n\n@section('content')\n    <x-dialog.header>\n        {{ __('campaigns/applications.apply.title', ['name' => $campaign->name]) }}\n    </x-dialog.header>\n    <x-form :action=\"['campaign.apply.save', $campaign]\">\n        <x-dialog.article>\n            @include('partials.errors')\n            @include('campaigns.applications._apply')\n        </x-dialog.article>\n\n        <x-dialog.footer>\n            @if($application)\n                <x-slot:cancel>\n                    <x-button.delete-confirm target=\"#delete-application\" />\n                </x-slot:cancel>\n            @endif\n\n            <button type=\"submit\" class=\"btn2 btn-primary\">\n                {{ empty($application) ? __('campaigns/applications.apply.apply') : __('crud.update') }}\n            </button>\n        </x-dialog.footer>\n    </x-form>\n\n    @if($application)\n        <x-form method=\"DELETE\" :action=\"['campaign.apply.remove', $campaign]\" id=\"delete-application\" />\n    @endif\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/applications/dashboard_widget.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */ ?>\n@extends('layouts.app', [\n    'title' => __('campaigns/applications.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns/applications.title')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n@section('content')\n    @include('ads.top')\n\n    <div class=\"flex gap-2 items-center justify-between\">\n        <h1 class=\"text-2xl\">\n            {{ __('campaigns/applications.dashboard_widget.title') }}\n        </h1>\n    </div>\n\n    @include('partials.errors')\n\n    <x-box class=\"flex flex-col gap-6 mt-4\">\n        @if ($hasJoinWidget)\n            <div class=\"flex items-center gap-4\">\n                <div class=\"rounded bg-green-200 w-12 h-12 flex items-center justify-center flex-none\">\n                    <x-icon class=\"fa-solid fa-check text-success-content\" />\n                </div>\n                <div class=\"flex flex-col gap-1\">\n                    <span class=\"font-medium\">{{ __('campaigns/applications.dashboard_widget.has_widget') }}</span>\n                    <span class=\"text-sm text-base-content/70\">{{ __('campaigns/applications.dashboard_widget.has_widget_help') }}</span>\n                </div>\n            </div>\n        @else\n            <div class=\"flex items-center gap-4\">\n                <div class=\"rounded bg-error w-12 h-12 flex items-center justify-center flex-none\">\n                    <x-icon class=\"fa-solid fa-times text-error-content\" />\n                </div>\n                <div class=\"flex flex-col gap-1\">\n                    <span class=\"font-medium\">{{ __('campaigns/applications.dashboard_widget.no_widget') }}</span>\n                    <span class=\"text-sm text-base-content/70\">{{ __('campaigns/applications.dashboard_widget.no_widget_help') }}</span>\n                </div>\n            </div>\n\n            <x-form method=\"POST\" :action=\"['campaign-applications.dashboard-widget.store', $campaign]\">\n                <button type=\"submit\" class=\"btn2 btn-primary\">\n                    <x-icon class=\"fa-solid fa-plus\" />\n                    {{ __('campaigns/applications.dashboard_widget.add') }}\n                </button>\n            </x-form>\n        @endif\n    </x-box>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/applications/edit.blade.php",
    "content": "<x-dialog.header>\n    @if($action === 'approve')\n        {{ __('campaigns/applications.actions.accept') }}\n    @else\n        {{ __('campaigns/applications.actions.reject') }}\n    @endif\n</x-dialog.header>\n<x-dialog.article>\n    <x-form :action=\"['applications.update', $campaign, $application->id]\" method=\"PATCH\" class=\"entity-form w-full max-w-lg text-left\">\n        @if($action === 'approve')\n\n            <x-grid type=\"1/1\">\n                <p class=\"m-0\">{{ __('campaigns/applications.update.approve') }}</p>\n\n                <x-forms.field\n                    field=\"role\"\n                    :label=\"__('campaigns.members.fields.role')\"\n                    required>\n                    <x-forms.select name=\"role_id\" :options=\"$campaign->roles()->where('is_public', false)->orderBy('is_admin')->pluck('name', 'id')\" class=\"w-full\" />\n                </x-forms.field>\n\n                <x-forms.field\n                    field=\"message\"\n                    :label=\"__('campaigns/applications.fields.approval')\">\n                    <input type=\"text\" name=\"message\" value=\"{!! old('message') !!}\" maxlength=\"191\" class=\"w-full\" />\n                </x-forms.field>\n\n                <x-buttons.confirm type=\"primary\" full=\"true\">\n                    <x-icon class=\"check\" />\n                    {{ __('campaigns/applications.actions.accept') }}\n                </x-buttons.confirm>\n            </x-grid>\n        @else\n        <x-grid type=\"1/1\">\n            <p class=\"m-0\">{{ __('campaigns/applications.update.reject') }}</p>\n\n            <x-forms.field\n                field=\"message\"\n                :label=\"__('campaigns/applications.fields.rejection')\">\n\n                <input type=\"text\" name=\"rejection\" value=\"{!! old('rejection') !!}\" maxlength=\"191\" class=\"w-full\" />\n            </x-forms.field>\n\n            <x-buttons.confirm type=\"danger\" full=\"true\">\n                <x-icon class=\"fa-solid fa-times\" />\n                {{ __('campaigns/applications.actions.reject') }}\n            </x-buttons.confirm>\n        </x-grid>\n        @endif\n\n    <input type=\"hidden\" name=\"action\" value=\"{{ $action }}\" />\n    </x-form>\n</x-dialog.article>\n\n"
  },
  {
    "path": "resources/views/campaigns/applications/index.blade.php",
    "content": "@php\n/** @var \\App\\Models\\Campaign $campaign */\n    use \\Illuminate\\Support\\Arr;\n@endphp\n@extends('layouts.app', [\n    'title' => __('campaigns/applications.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns/applications.title')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('ads.top')\n    @include('partials.errors')\n    @if(!$campaign->isOpen() && $campaign->isPublic())\n        <x-alert type=\"info\" :dismissible=\"true\">\n            <strong>{{ __('campaigns/applications.warnings.applications_closed') }}</strong><br/>\n            <p>{{ __('campaigns/applications.helpers.applications_closed') }}</p>\n        </x-alert>\n    @endif\n    @if($campaign->isOpen() && auth()->user()->cannot('canOpen', $campaign))\n        <x-alert type=\"info\" :dismissible=\"true\">\n            <strong>{{ __('campaigns/applications.warnings.filters_incomplete') }}</strong><br/>\n            <p>{{ __('campaigns/applications.helpers.filters_incomplete') }}</p>\n        </x-alert>\n    @endif\n    <div class=\"flex gap-5 flex-col\">\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('campaigns/applications.title') }}\n            </h1>\n            <x-learn-more url=\"features/campaigns/applications.html\" />\n        </div>\n\n        <p>{!! __('campaigns/applications.tutorial') !!}</p>\n\n        @include('campaigns.applications._requirements')\n\n        <div class=\"flex gap-2 items-center justify-end\">\n            <div class=\"dropdown\">\n                <button type=\"button\" class=\"btn2 btn-default btn-sm\" data-dropdown aria-expanded=\"false\">\n                    <i class=\"fa-regular fa-filter\" aria-hidden=\"true\"></i>\n                    {{ __('campaigns/applications.filters.title') }}\n                </button>\n                <div class=\"dropdown-menu hidden\" role=\"menu\">\n                    <x-dropdowns.item\n                        :link=\"route('applications.index', ['campaign' => $campaign])\"\n                        icon=\"fa-regular fa-clock\"\n                        :css=\"!isset($filter) ? 'font-semibold' : ''\">\n                        {{ __('campaigns/applications.filters.pending') }}\n                    </x-dropdowns.item>\n                    <x-dropdowns.item\n                        :link=\"route('applications.index', ['campaign' => $campaign, 'filter' => 'approved'])\"\n                        icon=\"fa-regular fa-check\"\n                        :css=\"($filter ?? '') === 'approved' ? 'font-semibold' : ''\">\n                        {{ __('campaigns/applications.filters.approved') }}\n                    </x-dropdowns.item>\n                    <x-dropdowns.item\n                        :link=\"route('applications.index', ['campaign' => $campaign, 'filter' => 'rejected'])\"\n                        icon=\"fa-regular fa-xmark\"\n                        :css=\"($filter ?? '') === 'rejected' ? 'font-semibold' : ''\">\n                        {{ __('campaigns/applications.filters.rejected') }}\n                    </x-dropdowns.item>\n                    <x-dropdowns.divider />\n                    <x-dropdowns.item\n                        :link=\"route('applications.index', ['campaign' => $campaign, 'filter' => 'all'])\"\n                        icon=\"fa-regular fa-filter-slash\"\n                        :css=\"($filter ?? '') === 'all' ? 'font-semibold' : ''\">\n                        {{ __('campaigns/applications.filters.all') }}\n                    </x-dropdowns.item>\n                </div>\n            </div>\n        </div>\n\n        @includeWhen(!$applications->isEmpty(), 'campaigns.applications._list')\n        @if($applications->isEmpty())\n            <div class=\"flex flex-col gap-2 justify-center items-center\">\n                <div class=\"text-xl font-light\">\n                    {{ __('campaigns/applications.helpers.no_applications_title') }}\n                </div>\n                <div class=\"text-sm text-neutral-content text-center max-w-md\">\n                    <p>{!! __('campaigns/applications.helpers.no_applications_v2') !!}</p>\n                </div>\n            </div>\n        @endif\n    </div>\n@endsection\n\n\n@section('modals')\n    <x-dialog id=\"application-dialog\" loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/applications/setup.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $model\n */ ?>\n@extends('layouts.app', [\n    'title' => __('campaigns/applications.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns/applications.title')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n@section('content')\n    @include('ads.top')\n\n    <div class=\"flex gap-2 items-center justify-between\">\n        <h1 class=\"text-2xl\">\n            {{ __('campaigns/applications.setup.title') }}\n        </h1>\n        <x-learn-more url=\"features/campaigns/applications.html\" />\n    </div>\n\n\n    @include('partials.errors')\n    <x-form\n        method=\"POST\"\n        :action=\"['campaign-applications.setup.save', $campaign]\"\n        unload\n        class=\"entity-form\"\n    >\n        <x-box class=\"flex flex-col gap-4\">\n\n            <p>{!! __('campaigns/applications.setup.tutorial') !!}</p>\n\n            <x-forms.field\n                field=\"intro\"\n                :label=\"__('campaigns/applications.fields.intro')\">\n                <textarea\n                    name=\"intro\"\n                    id=\"intro\"\n                    class=\"w-full\"\n                    placeholder=\"{{ __('campaigns/applications.placeholders.intro') }}\"\n                >{{ old('intro', $campaign->getFilter(\\App\\Enums\\CampaignFilterType::Intro)) }}</textarea>\n            </x-forms.field>\n\n            @include('campaigns.forms.panes._discovery', ['model' => $campaign, 'hideLocale' => true, 'hideRequired' => true])\n\n            <x-forms.field\n                field=\"tags\"\n                :label=\"__('campaigns/applications.fields.playstyle_tags')\">\n                <input type=\"hidden\" name=\"playstyle_tags\" value=\"1\">\n                @include('components.form.playstyles', ['options' => [\n                    'model' => $campaign ?? null,\n                    'quickCreator' => false\n                ]])\n            </x-forms.field>\n\n            <h4 class=\"m-0 text-lg\">{{ __('campaigns/applications.timezone') }}</h4>\n\n            <x-forms.field\n                field=\"locale\"\n                :label=\"__('campaigns.fields.locale')\"\n                :helper=\"__('campaigns.sharing.language')\">\n                <x-forms.select name=\"locale\" :options=\"$languages\" :selected=\"old('locale', $campaign->locale)\" />\n            </x-forms.field>\n\n            <x-forms.field\n                field=\"timezone\"\n                :label=\"__('campaigns/applications.fields.timezone')\">\n\n                <x-forms.select\n                    name=\"timezone\"\n                    :options=\"$timezones\"\n                    :selected=\"old('timezone', $campaign->getFilter(\\App\\Enums\\CampaignFilterType::Timezone) ?? 'UTC +00:00')\"\n                />\n            </x-forms.field>\n\n            <x-forms.field\n                field=\"schedule\"\n                :label=\"__('campaigns/applications.fields.schedule')\">\n                <input\n                    type=\"text\"\n                    name=\"schedule\"\n                    value=\"{{ old('schedule', $campaign->getFilter(\\App\\Enums\\CampaignFilterType::Schedule)) }}\"\n                    maxlength=\"45\"\n                    class=\"w-full\"\n                    placeholder=\"{{ __('campaigns/applications.fields.schedule-placeholder') }}\"\n                />\n            </x-forms.field>\n\n            <x-forms.field\n                field=\"players\"\n                :label=\"__('campaigns/applications.fields.player_count')\">\n                <input\n                    type=\"text\"\n                    name=\"players\"\n                    value=\"{{ old('players', $campaign->getFilter(\\App\\Enums\\CampaignFilterType::PlayerCount)) }}\"\n                    maxlength=\"45\"\n                    class=\"w-full\"\n                    placeholder=\"{{ __('campaigns/applications.placeholders.player_count') }}\"\n                />\n            </x-forms.field>\n\n            <div class=\"flex flex-col gap-2\">\n                <h4 class=\"m-0 text-lg\">{{ __('campaigns/applications.setup.prioritise') }}</h4>\n\n                @if (!$isElemental)\n                    <label class=\"flex items-start gap-3 opacity-50 cursor-not-allowed select-none\">\n                        <input type=\"checkbox\" disabled class=\"mt-1 shrink-0\" />\n                        <span class=\"flex flex-col gap-1\">\n                            <span class=\"font-medium\">{{ __('campaigns/applications.setup.prioritise') }}</span>\n                            <span class=\"text-sm text-base-content/70\">{{ __('campaigns/applications.setup.prioritise_help') }}</span>\n                            <span class=\"text-sm\">\n                                {!! __('campaigns/applications.setup.prioritise_upgrade', [\n                                    'link' => '<a href=\"' . route('settings.subscription') . '\" class=\"text-link\">Elemental</a>',\n                                ]) !!}\n                            </span>\n                        </span>\n                    </label>\n                @elseif ($prioritisedCampaign)\n                    <label class=\"flex items-start gap-3 opacity-50 cursor-not-allowed select-none\">\n                        <input type=\"checkbox\" disabled class=\"mt-1 shrink-0\" />\n                        <span class=\"flex flex-col gap-1\">\n                            <span class=\"font-medium\">{{ __('campaigns/applications.setup.prioritise') }}</span>\n                            <span class=\"text-sm text-base-content/70\">{{ __('campaigns/applications.setup.prioritise_help') }}</span>\n                            <span class=\"text-sm\">\n                                {!! __('campaigns/applications.setup.prioritise_conflict', [\n                                    'campaign' => '<a href=\"' . route('campaign-applications.setup', $prioritisedCampaign) . '\" class=\"text-link\">' . e($prioritisedCampaign->name) . '</a>',\n                                ]) !!}\n                            </span>\n                        </span>\n                    </label>\n                @else\n                    <label class=\"flex items-start gap-3 cursor-pointer\">\n                        <input\n                            type=\"checkbox\"\n                            name=\"is_prioritised\"\n                            value=\"1\"\n                            class=\"mt-1 shrink-0\"\n                            {{ old('is_prioritised', $campaign->is_prioritised) ? 'checked' : '' }}\n                        />\n                        <span class=\"flex flex-col gap-1\">\n                            <span class=\"font-medium\">{{ __('campaigns/applications.setup.prioritise') }}</span>\n                            <span class=\"text-sm text-base-content/70\">{{ __('campaigns/applications.setup.prioritise_help') }}</span>\n                        </span>\n                    </label>\n                @endif\n            </div>\n\n            <div class=\"sticky bottom-4 ml-auto z-50\">\n                <button type=\"submit\" class=\"btn2 btn-primary\">\n                    <x-icon class=\"save\" />\n                    {{ __('crud.save') }}\n                </button>\n            </div>\n        </x-box>\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/applications/show.blade.php",
    "content": "<?php /** @var \\App\\Models\\Application $application */ ?>\n<x-dialog.header>\n    {{ __('campaigns/applications.fields.new_application') }}\n</x-dialog.header>\n<x-form :action=\"['applications.update', $campaign, $application->id]\" method=\"PATCH\" class=\"entity-form w-full max-w-lg text-left\" direct>\n    <x-dialog.article>\n        @include('campaigns.applications._view')\n\n        <x-forms.field\n            field=\"reason\"\n            :label=\"__('campaigns/applications.fields.reason')\"\n            :helper=\"__('campaigns/applications.helpers.reason')\">\n            <input type=\"text\" name=\"reason\" value=\"{{ old('reason') }}\" maxlength=\"191\" class=\"w-full\" autocomplete=\"off\" placeholder=\"{{ __('campaigns/applications.placeholders.reason') }}\" />\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"role\"\n            :label=\"__('campaigns.members.fields.role')\"\n            :helper=\"__('campaigns/applications.helpers.role')\">\n            <x-forms.select name=\"role_id\" :options=\"$campaign->roles()->where('is_public', false)->orderBy('is_admin')->pluck('name', 'id')\" class=\"w-full\" />\n        </x-forms.field>\n    </x-dialog.article>\n\n    <x-dialog.footer>\n        <x-slot:cancel>\n            <button type=\"submit\" class=\"btn2 btn-error btn-outline\" name=\"action\" value=\"reject\">\n                <x-icon class=\"fa-regular fa-times\" />\n                {{ __('campaigns/applications.actions.reject') }}\n            </button>\n        </x-slot:cancel>\n\n        <button type=\"submit\" class=\"btn2 btn-primary\" name=\"action\" value=\"accept\">\n            <x-icon class=\"check\" />\n            {{ __('campaigns/applications.actions.accept') }}\n        </button>\n    </x-dialog.footer>\n</x-form>\n"
  },
  {
    "path": "resources/views/campaigns/applications/view.blade.php",
    "content": "<?php /** @var \\App\\Models\\Application $application */ ?>\n<x-dialog.header>\n    {{ __('campaigns/applications.fields.new_application') }}\n</x-dialog.header>\n<x-dialog.article>\n    @include('campaigns.applications._view')\n</x-dialog.article>\n\n"
  },
  {
    "path": "resources/views/campaigns/default-images/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('campaigns/default-images.create.helper') }}</p>\n    </x-helper>\n    <x-forms.field\n        field=\"entity-type\"\n        required\n        :label=\"__('campaigns/categories.tab')\">\n\n        <x-forms.select name=\"entity_type\" :options=\"$entityTypes\" class=\"w-full\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"file\"\n        required\n        :label=\"__('entities/files.fields.file')\">\n        <input type=\"file\" name=\"default_entity_image\" class=\"image w-full\" accept=\"image/*\" />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/campaigns/default-images/_thumbnail.blade.php",
    "content": "<div class=\"rounded-xl overflow-hidden flex gap-5 items-center bg-box p-2 shadow-xs hover:shadow-xs\">\n    <div class=\"flex-initial w-20 h-20 cover-background rounded-xl\" style=\"background-image: url('{{ Img::crop(96, 96)->url($image['path']) }}')\">\n    </div>\n    <div class=\"grow flex flex-col gap-1\">\n        <span class=\"text-lg\">\n            {!! $entityTypes[$image['type']]->plural() !!}\n        </span>\n        <span class=\"text-sm text-neutral-content\">\n            {{ __('campaigns/default-images.helper') }}\n        </span>\n    </div>\n    @can('recover', $campaign)\n        <x-buttons.confirm-delete :route=\"route('campaign.default-images.delete', $campaign)\">\n            <input type=\"hidden\" name=\"entity_type\" value=\"{{ $entityTypes[$image['type']]->id }}\" />\n        </x-buttons.confirm-delete>\n    @endcan\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/default-images/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/default-images.create.title', ['name' => $campaign->name]),\n    'breadcrumbs' => [\n        ['url' => route('campaign.default-images', $campaign), 'label' => trans('campaigns/default-images.index.title')]\n    ]\n])\n\n@section('content')\n\n    <x-form :action=\"['campaign.default-images.store', $campaign]\" files>\n    @include('partials.forms.form', [\n        'title' => __('campaigns/default-images.create.title', ['name' => $campaign->name]),\n        'content' => 'campaigns.default-images._form',\n    ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/default-images/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */?>\n@extends('layouts.app', [\n    'title' => __('campaigns/default-images.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns/default-images.title')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n\n    <div class=\"flex gap-5 flex-col\">\n        @include('partials.errors')\n        <div class=\"flex gap-2 items-center\">\n            <h1 class=\"inline-block grow text-2xl\">\n                {{ __('campaigns/default-images.title') }}\n            </h1>\n            <x-learn-more url=\"features/campaigns/default-thumbnails.html\" />\n            @if ($campaign->boosted())\n                @can('recover', $campaign)\n                <a href=\"{{ route('campaign.default-images.create', $campaign) }}\" class=\"btn2 btn-primary btn-sm\"\n                   data-toggle=\"dialog\"\n                   data-url=\"{{ route('campaign.default-images.create', $campaign) }}\">\n                    <x-icon class=\"plus\" />\n                    {{ __('campaigns/default-images.actions.add') }}\n                </a>\n\n                <a href=\"#\" class=\"btn2 btn-sm\" data-toggle=\"dialog\" data-target=\"reset-confirm\">\n                    <x-icon class=\"fa-regular fa-eraser\" />\n                    {{ __('crud.actions.reset') }}\n                </a>\n                @endif\n            @endif\n        </div>\n        @if ($campaign->boosted())\n            <p>{{ __('campaigns/default-images.tutorial') }}</p>\n            @if (empty($images))\n                <p class=\"italic\">{{ __('campaigns/default-images.empty') }}</p>\n            @endif\n            <div class=\"grid grid-cols-1 gap-2 md:gap-3 xl:grid-cols-2 xl:gap-5\">\n                @foreach ($images as $image)\n                    @if (!\\Illuminate\\Support\\Arr::has($entityTypes, $image['type']))\n                        @continue\n                    @endif\n                    @include('campaigns.default-images._thumbnail')\n                @endforeach\n\n            </div>\n        @else\n            <x-premium-cta :campaign=\"$campaign\">\n                <p>{{ __('campaigns/default-images.call-to-action') }}</p>\n            </x-premium-cta>\n        @endif\n    </div>\n@endsection\n\n@section('modals')\n    @parent\n\n    <x-dialog id=\"reset-confirm\" :title=\"__('campaigns/default-images.reset.title')\">\n        <x-grid type=\"1/1\">\n            <x-helper>\n                <p>{{ __('campaigns/default-images.reset.helper') }}</p>\n                <p>{{ __('campaigns/default-images.reset.warning') }}</p>\n            </x-helper>\n\n            <div class=\"grid grid-cols-2 gap-2 w-full\">\n                <x-buttons.confirm type=\"ghost\" full=\"true\" dismiss=\"dialog\">\n                    {{ __('crud.cancel') }}\n                </x-buttons.confirm>\n\n                <x-form method=\"DELETE\" :action=\"['campaign.default-images.reset', $campaign]\">\n                <x-buttons.confirm type=\"danger\" full=\"true\" outline=\"true\">\n                    {{ __('crud.actions.confirm') }}\n                </x-buttons.confirm>\n                </x-form>\n            </div>\n        </x-grid>\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/defaults/index.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Campaign $campaign */\n$visibilities = [\n    '' => __('crud.visibilities.all'),\n    'admin' => __('crud.visibilities.admin'),\n    'members' => __('crud.visibilities.members'),\n    'self' => __('crud.visibilities.self'),\n    'admin-self' => __('crud.visibilities.admin-self')\n];\n?>\n@extends('layouts.app', [\n    'title' => __('campaigns.show.tabs.defaults') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.defaults')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n\n    <x-form :action=\"['campaign-defaults-save', $campaign]\" class=\"defaults-form form-inline\">\n        <div class=\"flex gap-5 flex-col\">\n            @include('partials.errors')\n\n            <div class=\"flex gap-2 items-center\">\n                <h1 class=\"inline-block grow text-2xl\">\n                    {{ __('campaigns.show.tabs.defaults') }}\n                </h1>\n\n                <x-learn-more url=\"features/campaigns/defaults.html\" />\n            </div>\n\n            <p>\n                {!! __('campaigns/defaults.tutorial') !!}\n            </p>\n\n            <div class=\"text-lg\">{{ __('campaigns/defaults.sections.entity') }}</div>\n            <x-box>\n                <x-grid type=\"1/1\">\n\n                    <x-helper>\n                        <p>{{  __('campaigns/defaults.helpers.entity') }}</p>\n                    </x-helper>\n\n                    <x-forms.field\n                        field=\"privacy\"\n                        :label=\"__('campaigns/defaults.fields.entity_privacy')\"\n                        :helper=\"__('campaigns/defaults.helpers.entity_privacy')\">\n                        <x-forms.select name=\"entity_visibility\" :options=\"[0 => __('campaigns.privacy.visible'), 1 => __('campaigns.privacy.private')]\" :selected=\"$campaign->entity_visibility ?? null\" />\n                    </x-forms.field>\n\n                    <x-forms.field\n                        field=\"related-visibility\"\n                        :label=\"__('campaigns/defaults.fields.related_visibility')\"\n                        :helper=\"__('campaigns/defaults.helpers.related_visibility')\">\n                        <x-forms.select name=\"settings[default_visibility]\" :options=\"$visibilities\" :selected=\"$campaign->settings['default_visibility'] ?? null\" />\n                    </x-forms.field>\n\n                    <x-forms.field\n                        field=\"character_personality_visibility\"\n                        :label=\"__('campaigns/defaults.fields.character_personality_visibility')\"\n                        :helper=\"__('campaigns/defaults.helpers.character_visibility')\">\n                        <x-forms.select name=\"entity_personality_visibility\" :options=\"[0 => __('campaigns.privacy.visible'), 1 => __('campaigns.privacy.private')]\" :selected=\"$campaign->entity_personality_visibility ?? null\" />\n                    </x-forms.field>\n                </x-grid>\n            </x-box>\n\n            <div class=\"text-lg\">{{ __('campaigns/defaults.sections.media') }}</div>\n            <x-box>\n                <x-forms.field\n                    field=\"gallery-visibility\"\n                    :label=\"__('campaigns/defaults.fields.gallery_visibility')\"\n                    :helper=\"__('campaigns/defaults.helpers.gallery_visibility')\">\n                    <x-forms.select name=\"settings[gallery_visibility]\" :options=\"$visibilities\" :selected=\"$campaign->settings['gallery_visibility'] ?? null\" />\n                </x-forms.field>\n            </x-box>\n\n            <div class=\"text-lg\">{{ __('campaigns/defaults.sections.mention') }}</div>\n            <x-box>\n                <x-forms.field\n                    field=\"private_mention_visibility\"\n                    :label=\"__('campaigns/defaults.fields.private_mention_visibility')\"\n                    :helper=\"__('campaigns/defaults.helpers.private_mention_visibility')\">\n                    <x-forms.select name=\"settings[private_mention_visibility]\" :options=\"[0 => __('campaigns/defaults.values.mentions.private'), 1 => __('campaigns/defaults.values.mentions.visible')]\" :selected=\"$campaign->settings['private_mention_visibility'] ?? null\" />\n                </x-forms.field>\n            </x-box>\n\n\n            <div class=\"text-lg\">{{ __('campaigns/defaults.sections.display') }}</div>\n            <x-box>\n                <x-grid type=\"1/1\">\n                    <x-helper>\n                        <p>{{  __('campaigns/defaults.helpers.display') }}</p>\n                    </x-helper>\n\n                    <x-forms.field\n                        field=\"connections\"\n                        :label=\"__('campaigns/defaults.fields.connections')\"\n                        :helper=\"__('campaigns/defaults.helpers.connections')\"\n                    >\n                        <x-forms.select name=\"ui_settings[connections]\" :options=\"[0 => __('campaigns/defaults.values.connections.explorer'), 1 => __('campaigns/defaults.values.connections.list')]\" :selected=\"$campaign->ui_settings['connections'] ?? null\"  />\n                    </x-forms.field>\n\n                    <x-forms.field\n                        field=\"connections-mode\"\n                        :label=\"__('campaigns/defaults.fields.connections_mode')\"\n                        :helper=\"__('campaigns/defaults.helpers.connections_mode')\"\n                    >\n                        <x-forms.select name=\"ui_settings[connections_mode]\" :options=\"[0 => __('campaigns/defaults.values.collapsed.default'), 1 => __('entities/relations.options.only_relations'), 2 => __('entities/relations.options.related'), 3 => __('entities/relations.options.mentions')]\" :selected=\"$campaign->ui_settings['connections_mode'] ?? null\"  />\n                    </x-forms.field>\n\n                    <x-forms.field\n                        field=\"post-collapsed\"\n                        :label=\"__('campaigns/defaults.fields.post_collapsed')\"\n                        :helper=\"__('campaigns/defaults.helpers.post_collapsed')\"\n                    >\n                        <x-forms.select name=\"ui_settings[post_collapsed]\" :options=\"[0 => __('campaigns/defaults.values.collapsed.expanded'), 1 => __('campaigns/defaults.values.collapsed.collapsed')]\" :selected=\"$campaign->ui_settings['post_collapsed'] ?? null\"  />\n                    </x-forms.field>\n\n                    <x-forms.field\n                        field=\"descendants\"\n                        :label=\"__('campaigns/defaults.fields.descendants')\"\n                        :helper=\"__('campaigns/defaults.helpers.descendants')\"\n                    >\n                        <x-forms.select name=\"ui_settings[descendants]\" :options=\"[0 => __('campaigns/defaults.values.descendants.direct'), 1 => __('campaigns/defaults.values.descendants.all')]\" :selected=\"$campaign->ui_settings['descendants'] ?? null\"  />\n                    </x-forms.field>\n                </x-grid>\n            </x-box>\n\n            <div class=\"sticky bottom-4 ml-auto z-50\">\n                <button type=\"submit\" class=\"btn2 btn-primary\">\n                    <x-icon class=\"save\" />\n                    {{ __('crud.save') }}\n                </button>\n            </div>\n        </div>\n    </x-form>\n\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/delete.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/delete.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.deletion')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    <div class=\"flex gap-5 flex-col\">\n        @include('ads.top')\n        @include('partials.errors')\n\n        <h1 class=\"text-2xl\">\n            {{ __('campaigns/delete.title') }}\n        </h1>\n\n        <p class=\"\">\n            {!! __('campaigns/delete.helper', [\n    'backup' => '<a href=\"' . route('campaign.export', $campaign) . '\" class=\"text-link\">'. __('campaigns/delete.backup'). ' </a>'\n]) !!}\n        </p>\n\n        <x-box>\n            @cannot('delete', $campaign)\n                <p class=\"mb-2\">{{ __('campaigns/delete.issue') }}</p>\n\n                <a href=\"{{ route('campaign_users.index', $campaign) }}\" class=\"text-link\">\n                    <x-icon class=\"fa-solid fa-circle-xmark\" />\n                    {{ __('campaigns/delete.members') }}\n\n                </a>\n            @else\n                <x-form method=\"DELETE\" :action=\"['campaigns.destroy', $campaign]\">\n                    <x-grid type=\"1/1\">\n                        <p class=\"\">\n                            {!! __('campaigns/delete.confirm', [\n                                'campaign' => '<strong>' . $campaign->name . '</strong>',\n                                'code' => '<code>delete</code>'\n                            ]) !!}\n                        </p>\n\n                        <div class=\"required field flex gap-2 flex-wrap\">\n                            <input type=\"text\" name=\"delete\" value=\"{{ old('delete', config('app.debug') ? 'delete' : null) }}\" autofocus maxlength=\"10\" required id=\"campaign-delete-form\" class=\"w-full\" />\n                        </div>\n\n\n                        <x-buttons.confirm type=\"danger\" full=\"true\">\n                            <x-icon class=\"trash\" />\n                            {!! __('campaigns/delete.confirm-button', [\n                                'name' => $campaign->name]) !!}\n                        </x-buttons.confirm>\n\n                    </x-grid>\n                </x-form>\n            @endcannot\n        </x-box>\n    </div>\n@endsection\n\n@section('modals')\n\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/_actions.blade.php",
    "content": "<div class=\"submit-group\">\n    <a href=\"{{ route('entity_types.confirm', [$campaign, $entityType]) }}\" class=\"btn2 btn-error btn-outline\">\n        {{ __('crud.remove') }}\n    </a>\n    <button class=\"btn2 btn-primary\">\n        {{ __('crud.actions.save-changes') }}\n    </button>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/_form.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\EntityType $entityType\n */\n?>\n<x-grid type=\"1/1\">\n    @if (!isset($entityType))\n        <x-helper>\n            <p>\n                {{ __('campaigns/modules.create.helper') }}\n            </p>\n        </x-helper>\n    @endif\n\n\n    <x-forms.field\n        field=\"status\"\n        :label=\"__('campaigns/modules.fields.status')\"\n        :helper=\"__('campaigns/modules.helpers.status')\">\n        <input type=\"hidden\" name=\"is_enabled\" value=\"0\" />\n        <x-checkbox :text=\"__('campaigns/modules.status.enabled')\">\n            <input type=\"checkbox\" name=\"is_enabled\" value=\"1\" @if (old('enabled', $entityType?->isEnabled() ?? true)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    <hr />\n\n    <x-forms.field\n        field=\"singular\"\n        :label=\"__('campaigns/modules.fields.singular')\"\n        :helper=\"__('campaigns/modules.helpers.singular')\"\n    >\n        <input type=\"text\" name=\"singular\" value=\"{!! old('singular', $entityType->singular ?? '') !!}\" maxlength=\"45\" class=\"w-full\" placeholder=\"{{ '' }}\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"plural\"\n        :label=\"__('campaigns/modules.fields.plural')\"\n        :helper=\"__('campaigns/modules.helpers.plural')\">\n        <input type=\"text\" name=\"plural\" value=\"{!! old('plural', $entityType->plural ?? '') !!}\" maxlength=\"45\" class=\"w-full\" placeholder=\"{{ '' }}\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"icon\"\n        :label=\"__('campaigns/modules.fields.icon')\"\n        :helper=\"__('campaigns/modules.helpers.icon', [\n        'fontawesome' => '<a href=\\'' . config('fontawesome.search') . '\\' class=\\'text-link\\'>FontAwesome</a>',\n        'example' => '<i class=\\'fa-solid fa-flask-round-potion\\' aria-hidden=\\'true\\'></i>  <code>fa-solid fa-flask-round-potion</code>',\n        ])\"\n    >\n        <input type=\"text\" name=\"icon\" value=\"{{ old('icon', $entityType->icon ?? '') }}\" maxlength=\"100\" placeholder=\"fa-solid fa-car\" class=\"w-full\" list=\"module-icon-list\" autocomplete=\"off\" data-paste=\"fontawesome\" />\n        <div class=\"hidden\">\n            <datalist id=\"module-icon-list\">\n                @foreach (\\App\\Facades\\MapMarkerCache::campaign($campaign)->iconSuggestion() as $icon)\n                    <option value=\"{{ $icon }}\">{{ $icon }}</option>\n                @endforeach\n            </datalist>\n        </div>\n    </x-forms.field>\n\n    @if (!isset($entityType))\n        <hr />\n\n\n        <x-forms.field\n            field=\"roles\"\n            :label=\"__('campaigns.members.fields.roles')\"\n            :helper=\"__('campaigns/modules.helpers.roles')\"\n        >\n            @include('components.form.role', ['options' => [\n                'dropdownParent' => '#primary-dialog',\n                'multiple' => true,\n            ]])\n        </x-forms.field>\n    @else\n        <x-forms.field\n            field=\"update-name\">\n            <input type=\"hidden\" name=\"update_name\" value=\"\" />\n            <x-checkbox :text=\"__('campaigns/modules.fields.update_name')\">\n                <input type=\"checkbox\" name=\"update_name\" value=\"1\" checked=\"checked\" />\n            </x-checkbox>\n        </x-forms.field>\n    @endif\n\n    @include('cruds.fields.image-old', ['model' => $entityType ?? null, 'campaignImage' => true, 'imageLabel' => 'campaigns/modules.fields.image', 'isModule' => true, 'image' => isset($image) ? Img::crop(96, 96)->url($image['path']) : null])\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/box/custom.blade.php",
    "content": "@php\n    /**\n     * @var \\App\\Models\\EntityType $entityType\n     * @var \\App\\Models\\Campaign $campaign\n     */\n@endphp\n\n<x-box class=\"hidden box-module overflow-hidden flex flex-wrap flex-col select-none {{ $entityType->isEnabled() ? 'module-enabled' : null }} \" id=\"{{ $entityType->code }}\" :padding=\"false\">\n    <div class=\"header p-2 bg-neutral text-neutral-content flex items-center gap-2 transition-all duration-300\">\n        <x-icon class=\"flex-0 text-lg {{ $entityType->icon() }}\" />\n        <span class=\"text-lg grow break-all\">\n            {!! $entityType->plural() !!}\n        </span>\n        @can('update', $campaign)\n            <button\n                class=\"hover:shadow-sm text-xl transition-all hover:rotate-45 flex items-center\"\n                data-toggle=\"dialog\"\n                data-url=\"{{ route('entity_types.edit', [$campaign, $entityType]) }}\"\n                data-target=\"rename-dialog\"\n                title=\"{{ __('campaigns/modules.actions.customise') }}\">\n                    <span class=\"fill-current h-6 w-6 inline-block\">\n                        @include('icons.svg.cog')\n                    </span>\n                    <span class=\"sr-only\">\n                    {{ __('campaigns/modules.actions.customise') }}\n                </span>\n            </button>\n        @endcan\n    </div>\n    <div class=\"grow flex flex-wrap flex-col\">\n        <div class=\"body p-4 grow flex flex-col gap-2\">\n            <p class=\"text-break\">\n                {{ __('campaigns/modules.helpers.custom') }}\n            </p>\n        </div>\n        @can('update', $campaign)\n        <div class=\"footer text-center my-4\">\n            <label class=\"toggle\">\n                <input type=\"checkbox\" id=\"toggle_{{ $entityType->code }}\" name=\"enabled\" data-url=\"{{ route('entity_types.toggle', [$campaign, $entityType]) }}\" @if ($entityType->isEnabled()) checked=\"checked\" @endif>\n                <span class=\"slider module-enabled\"></span>\n                <span class=\"sr-only\">Check to enable the {{ $entityType->name() }} module</span>\n            </label>\n            <div class=\"action-loading hidden\">\n                <x-icon class=\"load\" />\n            </div>\n        </div>\n        @endcan\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/box/default.blade.php",
    "content": "@php\n/**\n * @var \\App\\Models\\EntityType $entityType\n * @var \\App\\Models\\Campaign $campaign\n */\n$enabled = $campaign->enabled($entityType);\n@endphp\n\n<div class=\"w-full bg-base-100 p-4 rounded-xl hover:shadow-xs flex flex-col gap-2 \">\n    <div class=\"flex justify-between items-center gap-2\">\n        <div class=\"flex gap-1 items-center text-lg\">\n            @if ($enabled)\n                <x-icon class=\"fa-regular fa-check-circle text-success-content\" tooltip title=\"{{ __('campaigns/modules.states.enabled') }}\" ></x-icon>\n            @else\n                <x-icon class=\"fa-regular fa-times text-error-content\" tooltip title=\"{{ __('campaigns/modules.states.disabled') }}\" ></x-icon>\n            @endif\n            <span class=\"break-all\">\n                {!! $entityType->plural() !!}\n            </span>\n        </div>\n        <div class=\"flex gap-1 items-center\">\n        @can('update', $campaign)\n            <button\n                class=\"btn2 btn-default btn-sm\"\n                data-toggle=\"dialog\"\n                data-url=\"{{ route('modules.edit', [$campaign, $entityType]) }}\"\n                data-target=\"rename-dialog\"\n                title=\"{{ __('campaigns/modules.actions.customise') }}\">\n                <span class=\"fill-current h-6 w-6 inline-block\">\n                    @include('icons.svg.cog')\n                </span>\n                {{ __('crud.edit') }}\n            </button>\n        @endcan\n        </div>\n    </div>\n\n\n    @if ($entityType->isDeprecated())\n        <div class=\"text-xs\">\n            <span data-toggle=\"tooltip\" data-title=\"{{ __('campaigns.settings.deprecated.help') }}\">\n                <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n                {{ __('campaigns.settings.deprecated.title') }}\n            </span>\n            <span class=\"md:hidden\">{{ __('campaigns.settings.deprecated.help') }}</span>\n        </div>\n    @endif\n\n    <p class=\"text-neutral-content text-sm text-break\">\n        {{ __('campaigns.settings.helpers.' . $entityType->pluralCode()) }}\n    </p>\n</div>\n\n<x-box class=\"hidden box-module overflow-hidden flex flex-wrap flex-col select-none {{ $enabled ? 'module-enabled' : null }} {{ isset($deprecated) ? 'box-deprecated' : null }} \" id=\"{{ $entityType->code }}\" :padding=\"false\">\n    <div class=\"header p-2 bg-neutral text-neutral-content flex items-center gap-2 transition-all duration-300\">\n        <x-icon class=\"flex-0 text-lg {{ $entityType->icon() }}\" />\n        <span class=\"text-lg grow break-all\">\n            {!! $entityType->plural() !!}\n        </span>\n\n    </div>\n    <div class=\"grow flex flex-wrap flex-col\">\n        <div class=\"body p-4 grow flex flex-col gap-2\">\n\n        </div>\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/box/new.blade.php",
    "content": "@php\n    /**\n     * @var \\App\\Models\\Campaign $campaign\n     */\n@endphp\n\n<a\n    class=\"btn2 btn-primary btn-sm\"\n    data-toggle=\"dialog\"\n    data-url=\"{{ route('entity_types.create', [$campaign]) }}\"\n    title=\"{{ __('campaigns/modules.actions.new') }}\">\n    <x-icon class=\"plus\" />\n    {{ __('crud.create') }}\n</a>\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/confirm.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/modules.delete.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns/categories.tab')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    <div class=\"flex gap-5 flex-col\">\n        @include('ads.top')\n        @include('partials.errors')\n        <h3 class=\"text-xl font-light\">{{ __('campaigns/modules.delete.title') }}</h3>\n\n        <p>\n            {!! __('campaigns/modules.delete.helper', ['name' => $entityType->name()]) !!}\n\n            {!! __('crud.delete_modal.permanent') !!}\n        </p>\n\n\n        <x-box>\n            <x-form :action=\"['entity_types.destroy', $campaign, $entityType]\" method=\"DELETE\" class=\"w-full\">\n                <x-grid type=\"1/1\">\n                    <p class=\"\">\n                        {!! __('campaigns/modules.delete.confirm', [\n                            'name' => '<strong>' . $entityType->name . '</strong>',\n                            'code' => '<code>delete</code>'\n                        ]) !!}\n\n                    </p>\n                    @if ($entityCount > 0)\n                        <p class=\"\">\n                            {!! trans_choice('campaigns/modules.delete.entities', $entityCount, ['count' => $entityCount]) !!}\n                        </p>\n                    @endif\n                    <div class=\"required field flex gap-2 flex-wrap\">\n                        <input type=\"text\" name=\"delete\" @if (config('app.debug')) value=\"delete\" @endif autofocus maxlength=\"10\" required id=\"module-delete-form\" class=\"w-full\" />\n                    </div>\n\n\n                    <x-buttons.confirm type=\"danger\" full=\"true\">\n                        <x-icon class=\"trash\" />\n                        {!! trans_choice('campaigns/modules.delete.confirm-button', $entityCount,\n                            ['count' => $entityCount, 'name' => $entityType->name()])\n                        !!}\n                    </x-buttons.confirm>\n\n                </x-grid>\n            </x-form>\n        </x-box>\n    </div>\n\n@endsection\n\n\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/create.blade.php",
    "content": "<x-form :action=\"['entity_types.store', $campaign]\" method=\"POST\" class=\"w-full max-w-lg\" files>\n    @include('partials.forms._dialog', [\n        'title' => __('campaigns/modules.create.title'),\n        'content' => 'campaigns.entity-types._form',\n        'submit' => __('campaigns/modules.actions.create')\n    ])\n</x-form>\n\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/edit.blade.php",
    "content": "<x-form :action=\"['entity_types.update', $campaign, $entityType]\" method=\"PATCH\" class=\"w-full max-w-lg\" files>\n    @include('partials.forms._dialog', [\n        'title' => __('campaigns/modules.rename.title', ['module' => $entityType->plural()]),\n        'content' => 'campaigns.entity-types._form',\n        'actions' => 'campaigns.entity-types._actions',\n    ])\n</x-form>\n\n"
  },
  {
    "path": "resources/views/campaigns/entity-types/max-reached.blade.php",
    "content": "\n@if ($limit >= config('limits.campaigns.modules.elemental'))\n    <p class=\"p-5\">{!! __('campaigns/modules.errors.limit', ['max' => '<code>' . $limit . '</code>']) !!}</p>\n@else\n    <x-dialog.header>\n        {{ __('campaigns/modules.errors.limit-title') }}\n    </x-dialog.header>\n    <x-dialog.article class=\"max-w-3xl\">\n        <x-helper>\n            <p>{{ __('campaigns/modules.errors.subscription-limit') }}</p>\n        </x-helper>\n    </x-dialog.article>\n@endif"
  },
  {
    "path": "resources/views/campaigns/entity-types/not-premium.blade.php",
    "content": "<x-premium-cta :campaign=\"$campaign\" premium>\n    <x-slot name=\"title\">\n        <x-icon class=\"premium\"></x-icon>\n        {{ __('campaigns/modules.pitch-title') }}\n    </x-slot>\n    <p>{{ __('campaigns/modules.pitch-custom') }}</p>\n</x-premium-cta>\n"
  },
  {
    "path": "resources/views/campaigns/export.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/export.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.export')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    <div class=\"flex gap-5 flex-col\">\n        @include('ads.top')\n        @include('partials.errors')\n\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('campaigns/export.title') }}\n            </h1>\n            <div class=\"flex gap-2 flex-wrap items-center\">\n                <x-learn-more url=\"features/campaigns/export.html\" />\n                <a href=\"#\" class=\"btn2 btn-sm btn-primary\" data-toggle=\"dialog\" data-target=\"export-confirm\">\n                    <x-icon class=\"fa-regular fa-download\" />\n                    {{ __('campaigns/export.actions.export') }}\n                </a>\n            </div>\n        </div>\n\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @livewire('campaigns.exports-table', ['campaign' => $campaign])\n        </div>\n    </div>\n@endsection\n\n@section('modals')\n    @parent\n    <x-dialog id=\"export-confirm\" :title=\"__('campaigns/export.confirm.title', ['name' => $campaign->name])\">\n        @can('export', $campaign)\n            <x-helper>\n                <p>{!! __('campaigns/export.confirm.warning', ['name' => '<strong>' . $campaign->name . '</strong>']) !!}</p>\n            </x-helper>\n            <x-form :action=\"['campaign.export-process', $campaign]\">\n                <x-grid type=\"1/1\">\n                    <x-forms.field\n                        field=\"type\"\n                        required\n                        :label=\"__('campaigns/export.confirm.type')\">\n                        <div class=\"grid grid-cols-2 gap-4\">\n\n\n                            <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start hover:shadow-sm @if(!$campaign->premium()) cursor-not-allowed bg-base-200 @else cursor-pointer @endif\">\n                                <input type=\"radio\" name=\"type\" id=\"md\" value=\"2\"\n                                       @if(!$campaign->premium()) disabled=\"disabled\" @else checked=\"checked\" @endif class=\"mt-2\">\n\n                                <label for=\"md\" class=\"w-full @if(!$campaign->premium()) cursor-not-allowed @else cursor-pointer @endif flex flex-col gap-0.5\">\n                                    <span class=\"text-semibold text-lg\">\n                                        <x-icon class=\"fa-brands fa-markdown\" />\n                                        {{ __('campaigns/export.types.md') }}\n                                    </span>\n                                    <p class=\"text-xs text-neutral-content\">\n                                        {{ __('campaigns/export.helpers.markdown') }}\n                                    </p>\n                                    @if(!$campaign->premium())\n                                        <a href=\"{{ route('settings.subscription', ['f' => 'export', 'w' => $campaign->id]) }}\" class=\"text-xs text-link\">\n                                            {{ __('campaigns/export.helpers.premium') }}</a>\n                                    @endif\n                                </label>\n                            </div>\n\n                            <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-pointer hover:shadow-sm\">\n                                <input type=\"radio\" name=\"type\" id=\"json\" value=\"1\" @if (!$campaign->premium()) checked=\"checked\" @endif class=\"mt-2\">\n\n                                <label for=\"json\" class=\"w-full cursor-pointer flex flex-col gap-0.5\">\n                                    <span class=\"text-semibold text-lg\">\n                                        <x-icon class=\"fa-regular fa-code\" />\n                                        {{ __('campaigns/export.types.json') }}\n                                    </span>\n                                    <p class=\"text-xs text-neutral-content\">\n                                        {{ __('campaigns/export.helpers.json') }}\n                                    </p>\n                                </label>\n                            </div>\n                        </div>\n                    </x-forms.field>\n\n                        <p class=\"text-xs text-neutral-content\">\n                            {!! __('campaigns/export.confirm.notification', ['admin' => '<a href=\"' . route(\n            'campaigns.campaign_roles.admin',\n            $campaign,\n        ) . '\" class=\"text-link\">' . $campaign->adminRoleName() . '</a>']) !!}\n                        </p>\n\n                    <div class=\"grid grid-cols-2 gap-2 w-full\">\n                        <x-buttons.confirm type=\"ghost\" full=\"true\" dismiss=\"dialog\">\n                            {{ __('crud.cancel') }}\n                        </x-buttons.confirm>\n\n                        <x-buttons.confirm type=\"primary\" full=\"true\">\n                            {{ __('crud.actions.confirm') }}\n                        </x-buttons.confirm>\n                    </div>\n                </x-grid>\n            </x-form>\n        @else\n            <x-helper>\n                <p>\n                    {{ __('campaigns/export.errors.limit') }}\n                </p>\n            </x-helper>\n        @endif\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/forms/_tabs.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $model */?>\n<div class=\"flex gap-2 items-center justify-between \">\n    <div class=\"overflow-x-auto\">\n        <ul class=\"nav-tabs flex items-stretch w-full\" role=\"tablist\">\n            <x-tab.tab target=\"entry\" :default=\"true\" :title=\"__('crud.tabs.overview')\"></x-tab.tab>\n            <x-tab.tab target=\"public\" :title=\"__('campaigns.panels.sharing')\" />\n            <x-tab.tab target=\"ui\" :title=\"__('campaigns.panels.ui')\" />\n            <x-tab.tab target=\"dashboard\" :title=\"__('campaigns.panels.dashboard')\" />\n        </ul>\n    </div>\n    @include('cruds.fields.save', ['disableCopy' => true, 'disableNew' => true, 'disableCancel' => true, 'target' => 'entity-form', 'entityType' => 'campaign'])\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/forms/_visibility.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n */\nuse App\\Enums\\CampaignVisibility;\n?>\n\n<x-forms.field\n    field=\"public\"\n    :label=\"__('campaigns.fields.public')\"\n>\n\n    <div class=\"flex flex-col gap-2\">\n        <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-pointer hover:shadow-sm\">\n            <input type=\"radio\" name=\"visibility_id\" id=\"visibility-private\" value=\"{{ CampaignVisibility::private->value }}\" class=\"mt-1\" @if (!$campaign || $campaign->isPrivate()) checked=\"checked\" @endif>\n            <div class=\"flex flex-col gap-0 w-full\">\n                <label for=\"visibility-private\" class=\"w-full cursor-pointer\">\n                    {{ __('campaigns/visibilities.titles.private') }}\n\n                    <p class=\"text-xs text-neutral-content\">\n                        {{ __('campaigns/visibilities.helpers.private') }}\n                    </p>\n                </label>\n            </div>\n        </div>\n\n        <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-pointer hover:shadow-sm\">\n            <input type=\"radio\" name=\"visibility_id\" id=\"visibility-public\" value=\"{{ CampaignVisibility::public->value }}\" class=\"mt-1\" @if ($campaign && $campaign->isPublic()) checked=\"checked\" @endif>\n            <div class=\"flex flex-col gap-0 w-full\">\n                <label for=\"visibility-public\" class=\"w-full cursor-pointer\">\n                    {{ __('campaigns/visibilities.titles.public') }}\n                    <p class=\"text-xs text-neutral-content\">\n                        {{ __('campaigns/visibilities.helpers.public') }}<br />\n                        {{ __('campaigns/visibilities.directory.public') }}\n                    </p>\n                </label>\n            </div>\n        </div>\n\n        @if ($campaign && $campaign->premium())\n            <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-pointer hover:shadow-sm\">\n                <input type=\"radio\" name=\"visibility_id\" id=\"visibility-unlisted\" value=\"{{ CampaignVisibility::unlisted->value }}\" class=\"mt-1\" @if ($campaign->isUnlisted()) checked=\"checked\" @endif>\n                <div class=\"flex flex-col gap-0 w-full\">\n                    <label for=\"visibility-unlisted\" class=\"w-full cursor-pointer\">\n                        {{ __('campaigns/visibilities.titles.unlisted') }}\n                        <p class=\"text-xs text-neutral-content\">\n                            {{ __('campaigns/visibilities.helpers.public') }}<br />\n                            {{ __('campaigns/visibilities.directory.unlisted') }}\n                        </p>\n                    </label>\n                </div>\n            </div>\n        @elseif (config('limits.campaigns.premium'))\n            <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-not-allowed hover:shadow-sm\">\n                <input type=\"radio\" name=\"visibility\" id=\"visibility-unlisted\" value=\"unlisted\" class=\"mt-1\" disabled=\"disabled\" />\n                <div class=\"flex flex-col gap-0 w-full\">\n                    <label for=\"visibility-unlisted\" class=\"w-full cursor-not-allowed\">\n                        <x-icon class=\"premium\" /> {{ __('campaigns/visibilities.titles.unlisted') }}\n                        <p class=\"text-xs text-neutral-content\">\n                            {{ __('campaigns/visibilities.helpers.public') }}<br />\n                            {{ __('campaigns/visibilities.directory.unlisted') }}<br />\n                        </p>\n                        <p>\n                            {{ __('campaigns/visibilities.helpers.premium') }}\n                        </p>\n                    </label>\n                </div>\n            </div>\n        @endif\n    </div>\n\n    @if (isset($campaign))\n        <x-helper>\n            <p>\n                <x-icon class=\"fa-regular fa-circle-info\" />\n                {!! __('campaigns/public.helpers.permissions', ['public' => '<a href=\"' . route('campaigns.campaign_roles.public', $campaign). '\" class=\"text-link\">' .  __('campaigns.members.roles.public') . '</a>']) !!}\n                <a href=\"https://www.youtube.com/watch?v=VpY_D2PAguM\" target=\"_blank\" class=\"text-link\">\n                    {{ __('general.tutorial') }} <x-icon class=\"link\" />\n                </a>\n            </p>\n        </x-helper>\n    @endif\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/campaigns/forms/create.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns.create.title'),\n    'breadcrumbs' => false,\n    'skipBannerAd' => true,\n    'startUI' => $start,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n    <x-form :action=\"['create-campaign']\" files class=\"entity-form\" unsaved>\n    @include('campaigns.forms.standard')\n    </x-form>\n@endsection\n\n\n@include('editors.editor')\n\n"
  },
  {
    "path": "resources/views/campaigns/forms/dashboard-header/_form.blade.php",
    "content": "<div class=\"tab-pane\" id=\"form-dashboard\">\n    <x-helper>\n        <p>{{ __('campaigns.helpers.dashboard') }}</p>\n    </x-helper>\n\n    <x-grid type=\"1/1\">\n        <x-forms.field\n            field=\"excerpt\"\n            :label=\"__('campaigns.fields.billboard')\"\n            tooltip\n            :helper=\"__('campaigns.helpers.excerpt')\"\n        >\n            <textarea name=\"excerpt\" id=\"excerpt\" class=\"w-full html-editor\">{!! old('excerpt', $campaign->excerptForEdition) !!}</textarea>\n        </x-forms.field>\n\n        <x-forms.field field=\"header\" :label=\"__('campaigns.fields.header_image')\" tooltip :helper=\"__('campaigns.helpers.header_image')\">\n            <input type=\"hidden\" name=\"remove-header_image\" />\n            <div class=\"grid gap-2 grid-cols-4\">\n                <div class=\"col-span-3 flex flex-col gap-2 \">\n                    <div class=\"field field-header-image\">\n                        <input type=\"file\" name=\"header_image\" class=\"image w-full\" id=\"header_image\" accept=\"image/*\" />\n                    </div>\n                    <div class=\"field field-header-url\">\n                        <input type=\"text\" name=\"header_image_url\" value=\"{{ old('header_image_url') }}\" maxlength=\"255\" class=\"w-full\" placeholder=\"{{ __('crud.placeholders.image_url') }}\" />\n                    </div>\n\n                    <x-helper>\n                        {{ __('crud.hints.image_limitations', ['formats' => 'PNG, JPG, GIF, WebP', 'size' => Limit::readable()->upload()]) }}\n                        {{ __('crud.hints.image_recommendation', ['width' => '1200', 'height' => '400']) }}\n                        @include('cruds.fields.helpers.share', ['max' => 25])\n                    </x-helper>\n                </div>\n                @if (!empty($campaign->header_image))\n                    <div class=\"basis-1/4 preview\">\n                        @include('cruds.fields._image_preview', [\n                            'image' => $campaign->thumbnail(200, 160, 'header_image'),\n                            'title' => $campaign->name,\n                            'target' => 'remove-header_image'\n                        ])\n                    </div>\n                @endif\n            </div>\n        </x-forms.field>\n    </x-grid>\n</div>\n\n@if(!request()->ajax())\n@include('editors.editor')\n@endif\n"
  },
  {
    "path": "resources/views/campaigns/forms/dashboard-header/edit.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/dashboard-header.edit.title', ['name' => $campaign->name]),\n    'breadcrumbs' => [],\n    'mainTitle' => false,\n])\n\n@section('content')\n\n    <x-form :action=\"['campaigns.dashboard-header.update', $campaign, $campaign]\" method=\"PATCH\" files class=\"entity-form\">\n        @include('partials.forms._dialog', [\n            'title' => __('campaigns/dashboard-header.edit.title'),\n            'content' => 'campaigns.forms.dashboard-header._form',\n            'deleteID' => !empty($widget) ? '#delete-widget-' . $widget->id : null,\n        ])\n    </x-form>\n\n    @if (!empty($widget))\n        <x-form method=\"DELETE\" :action=\"['campaign_dashboard_widgets.destroy', $campaign, $widget]\" id=\"delete-widget-{{ $widget->id }}\" />\n    @endif\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/forms/edit.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('crud.titles.editing', ['name' => $model->name]),\n    'breadcrumbs' => [\n        ['url' => route('overview', $campaign), 'label' => __('entities.campaign')],\n        __('crud.edit')\n    ],\n    'canonical' => true,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n\n@section('content')\n    @include('partials.errors')\n\n    <x-form\n        method=\"PATCH\"\n        :action=\"['campaigns.update', $campaign]\"\n        files\n        unload\n        class=\"entity-form\"\n    >\n        @include('campaigns.forms.standard')\n\n        @if(!empty($model) && $campaign->hasEditingWarning())\n            <input type=\"hidden\" id=\"editing-keep-alive\" data-url=\"{{ route('campaigns.keep-alive', $campaign) }}\" />\n        @endif\n    </x-form>\n@endsection\n\n\n@include('editors.editor')\n\n@section('modals')\n    @parent\n    @includeWhen(!empty($editingUsers) && !empty($model), 'cruds.forms.edit_warning', ['model' => $model])\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/forms/modals/_image.blade.php",
    "content": "<x-grid type=\"1/1\">\n\n    <x-helper>\n        <p>{!! __('campaigns/sidebar.helpers.image') !!}</p>\n    </x-helper>\n\n    @include('cruds.fields.image-old', ['model' => $campaign, 'campaignImage' => true, 'imageLabel' => 'campaigns.fields.image', 'recommended' => '240x208'])\n</x-grid>\n"
  },
  {
    "path": "resources/views/campaigns/forms/modals/_visibility-form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('campaigns/public.helpers.new') }}</p>\n    </x-helper>\n\n    @include('campaigns.forms._visibility')\n</x-grid>\n"
  },
  {
    "path": "resources/views/campaigns/forms/modals/image.blade.php",
    "content": "<x-form :action=\"['campaign.sidebar.image-save', $campaign]\" files>\n    @include('partials.forms.form', [\n        'title' => __('campaigns.fields.image'),\n        'content' => 'campaigns.forms.modals._image',\n        'submit' => __('crud.actions.apply')\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/campaigns/forms/modals/visibility.blade.php",
    "content": "\n<x-form :action=\"['campaign-visibility.save', $campaign]\">\n    @include('partials.forms._dialog', [\n        'title' => __('campaigns/public.title'),\n        'content' => 'campaigns.forms.modals._visibility-form',\n        'save' => __('crud.actions.apply')\n    ])\n    @if (isset($from) && $from === 'overview')\n        <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" />\n    @endif\n</x-form>\n\n"
  },
  {
    "path": "resources/views/campaigns/forms/panes/_discovery.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $model */?>\n<h4 class=\"text-lg\">{{ __('campaigns.fields.public_campaign_filters') }}</h4>\n\n<x-helper>\n    <p>\n        {!! __('campaigns.sharing.filters', [\n'public-campaigns' => '<a href=\"https://kanka.io/campaigns\" target=\"_blank\" class=\"text-link\">' . __('footer.public-campaigns') . '</a>'\n]) !!}\n    </p>\n</x-helper>\n\n<x-grid>\n    @unless(isset($hideLocale) && $hideLocale)\n    <x-forms.field\n            field=\"locale\"\n            required\n            :label=\"__('campaigns.fields.locale')\"\n            :helper=\"__('campaigns.sharing.language')\">\n        <x-forms.select name=\"locale\" :options=\"$languages\" :selected=\"$campaign->locale ?? null\" />\n    </x-forms.field>\n    @endunless\n    @php\n        $selected = [];\n        if (isset($model)) {\n            foreach ($model->systems as $system) {\n                $selected[$system->id] = $system->name;\n            }\n        }\n    @endphp\n    <x-forms.foreign\n        field=\"systems\"\n        label=\"campaigns.fields.system\"\n        :required=\"!(isset($hideRequired) && $hideRequired)\"\n        :multiple=\"true\"\n        :helper=\"__('campaigns.sharing.system')\"\n        name=\"systems[]\"\n        id=\"systems[]\"\n        :placeholder=\"__('campaigns.placeholders.system')\"\n        allowClear=\"true\"\n        :route=\"route('search.systems')\"\n        :selected=\"$selected\">\n    >\n    </x-forms.foreign>\n\n    <x-forms.field\n        field=\"genre\"\n        :required=\"!(isset($hideRequired) && $hideRequired)\"\n        :label=\"__('campaigns.fields.genre')\">\n        <input type=\"hidden\" name=\"campaign_genre\" value=\"1\">\n        @include('components.form.genres', ['options' => [\n            'model' => $model ?? null,\n            'quickCreator' => false\n        ]])\n    </x-forms.field>\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/campaigns/forms/panes/dashboard.blade.php",
    "content": "<div class=\"tab-pane\" id=\"form-dashboard\">\n    <x-grid type=\"1/1\">\n        <x-helper>\n            <p>{{ __('campaigns.helpers.dashboard') }}</p>\n        </x-helper>\n\n        <x-forms.field\n            field=\"excerpt\"\n            :label=\"__('campaigns.fields.billboard')\"\n            :helper=\"__('campaigns.helpers.excerpt')\"\n            >\n            @include('cruds.fields.entry', ['fieldName' => 'excerpt', 'model' => $campaign ?? null])\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"header\"\n            :label=\"__('campaigns.fields.header_image')\">\n            <p class=\"text-neutral-content m-0 md:hidden\">{{ __('campaigns.helpers.header_image') }}</p>\n            <input type=\"hidden\" name=\"remove-header_image\" />\n            <div class=\"flex gap-2 \">\n                <div class=\"basis-3/4 flex flex-col gap-2\">\n                    <x-forms.field\n                        field=\"header-image\">\n                        <input type=\"file\" name=\"header_image\" class=\"image w-full\" id=\"header_image\" accept=\"image/*\" />\n                    </x-forms.field>\n                    <x-forms.field\n                        field=\"image-url\">\n                        <input type=\"text\" name=\"header_image_url\" value=\"{{ old('header_image_url') }}\" maxlength=\"255\" class=\"w-full\" placeholder=\"{{ __('crud.placeholders.image_url') }}\" />\n                    </x-forms.field>\n\n                    <x-slot name=\"helper\">\n                        {{ __('crud.hints.image_limitations', ['formats' => 'PNG, JPG, GIF, WebP', 'size' => Limit::readable()->upload()]) }}\n                        {{ __('crud.hints.image_recommendation', ['width' => '1200', 'height' => '400']) }}\n                        @include('cruds.fields.helpers.share', ['max' => 25])\n                    </x-slot>\n                </div>\n                <div class=\"basis-1/4 preview\">\n                    @if (!empty($model->header_image))\n                        @include('cruds.fields._image_preview', [\n                            'image' => $model->thumbnail(200, 160, 'header_image'),\n                            'title' => $model->name,\n                            'target' => 'remove-header_image'\n                        ])\n                    @endif\n                </div>\n            </div>\n        </x-forms.field>\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/forms/panes/entry.blade.php",
    "content": "@php /** @var \\App\\Models\\Campaign $model */ @endphp\n<div class=\"tab-pane {{ (request()->get('tab') == null ? ' active' : '') }}\" id=\"form-entry\">\n    <x-grid type=\"1/1\">\n        <x-forms.field\n            field=\"name\"\n            required\n            :label=\"__('campaigns.fields.name')\"\n            :helper=\"__('campaigns.helpers.name')\">\n            <input type=\"text\" name=\"name\" placeholder=\"{{ __('campaigns.placeholders.name') }}\" data-live-disabled=\"1\" maxlength=\"191\" required value=\"{!! old('name', $model->name ?? null) !!}\" />\n        </x-forms.field>\n\n\n\n        <x-forms.field\n            field=\"description\"\n            :label=\"__('fields.description.label')\">\n            @include('cruds.fields.entry', ['fieldName' => 'description', 'model' => $campaign ?? null])\n        </x-forms.field>\n\n        @include('cruds.fields.image-old', ['model' => $campaign ?? null, 'campaignImage' => true, 'imageLabel' => 'campaigns.fields.image', 'recommended' => '240x208'])\n\n        <x-forms.field\n            field=\"vanity\"\n            :label=\"__('campaigns.fields.vanity')\">\n            @if (isset($model) && $model->hasVanity())\n                <x-helper>\n                    <p>{!! __('campaigns/vanity.set', ['vanity' => '<code>' . $model->slug . '</code>']) !!}</p>\n                </x-helper>\n            @elseif(isset($model) && $model->premium())\n                <x-helper>\n                    <p>{!! __('campaigns/vanity.helper-v2', [\n    'default' => '<code>kanka.io/w/' . (isset($model) ? $model->id : 123456) . '</code>',\n    'example' => '<code>kanka.io/w/exandria-unlimited</code>',\n    ]) !!}</p>\n                </x-helper>\n\n                <input type=\"text\" maxlength=\"45\" name=\"vanity\" class=\"w-full\" data-url=\"{{ route('campaign.vanity-validate', $model) }}\" value=\"{{ old('vanity') }}\" placeholder=\"exandria-unlimited\" />\n                <p class=\"text-neutral-content text-xs\">\n                    <x-icon class=\"fa-regular fa-circle-info\" />\n                    {!! __('campaigns/vanity.forever', ['docs' => '<a href=\"https://docs.kanka.io/en/latest/features/campaigns/vanity-url.html\" class=\"text-link\">' . __('general.learn-more') . '</a>']) !!}\n                </p>\n                <p class=\"hidden\" id=\"vanity-loading\">\n                    <x-icon class=\"loading\" />\n                </p>\n                <p class=\"text-error-content hidden\" id=\"vanity-error\"></p>\n                <div class=\"alert alert-success my-1 rounded px-2 py-1 hidden\" id=\"vanity-success\">\n                    <p>{!! __('campaigns/vanity.available', ['vanity' => '<code></code>']) !!}</p>\n                </div>\n            @else\n                <x-helper>\n                    <p>{!! __('campaigns/vanity.helper-v2', [\n    'default' => '<code>kanka.io/w/' . (isset($model) ? $model->id : 123456) . '</code>',\n    'example' => '<code>kanka.io/w/exandria-unlimited</code>',\n    ]) !!}</p>\n                </x-helper>\n                @if (isset($model))\n                    @if ($model->legacyBoosted())\n                        <a href=\"{{ route('settings.boost') }}\" class=\"text-link\">Switch to premium campaigns to unlock vanity urls on campaigns.</a>\n                    @else\n                        <a href=\"{{ route('settings.premium') }}\" class=\"text-link\">{{ __('callouts.premium.unlock', ['campaign' => $campaign->name]) }}</a>\n                    @endif\n                @else\n                    <input type=\"text\" maxlength=\"45\" name=\"\" class=\"w-full\" readonly=\"readonly\" />\n                @endif\n            @endif\n        </x-forms.field>\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/forms/panes/public.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $model */?>\n<div class=\"tab-pane\" id=\"form-public\">\n    <x-grid type=\"1/1\">\n\n        <x-grid type=\"1/1\">\n            @include('campaigns.forms._visibility', ['campaign' => $model ?? null])\n\n            @if (isset($model) && $model->isPublic())\n                <x-helper>\n                    <p>{!! __('campaigns.helpers.view_public', ['link' => '<a href=\"' . route('dashboard', $campaign) . '\" class=\"text-link\">' . route('dashboard', $campaign) . '</a>']) !!}</p>\n                </x-helper>\n\n                @if ($model->publicHasNoVisibility())\n                    <x-alert type=\"warning\">\n                        {!! __('campaigns.helpers.public_no_visibility', [\n                    'public' => $campaign->publicRole->name,\n        'fix' => '<a href=\"' . route('campaigns.campaign_roles.public', $campaign) . '\" class=\"text-link\">' . __('crud.fix-this-issue') . '</a>',\n        ]) !!}\n                    </x-alert>\n                @endif\n            @endif\n            <hr />\n\n            @includeWhen(config('limits.campaigns.premium'), 'campaigns.forms.panes._discovery')\n\n        </x-grid>\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/forms/panes/ui.blade.php",
    "content": "@php\n/** @var \\App\\Models\\Campaign $model */\n$themes = [null => __('campaigns.themes.none')];\nforeach (\\App\\Models\\Theme::all() as $theme):\n    $themes[$theme->id] = $theme->__toString();\nendforeach;\n\n$role = isset($model) ? $model->adminRole() : null;\n$boostedFormFields = [\n    'class' => 'w-full',\n];\nif (!isset($model) || !$model->boosted()) {\n    $boostedFormFields['disabled'] = 'disabled';\n}\n@endphp\n\n<div class=\"tab-pane\" id=\"form-ui\">\n    <x-grid type=\"1/1\">\n        @if (isset($model) && $model->boosted())\n            <x-helper>\n                <p>{!! __('campaigns.helpers.premium', ['settings' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaigns') . '</a>']) !!}</p>\n            </x-helper>\n        @else\n            <x-helper>\n                <p>{!! __('campaigns.helpers.premium', ['settings' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaigns') . '</a>']) !!}</p>\n            </x-helper>\n        @endif\n\n        <x-grid>\n            <x-forms.field\n                field=\"theme\"\n                :label=\"__('campaigns.fields.theme')\"\n                :helper=\"__('campaigns.ui.helpers.theme')\"\n                >\n                @php $dizzy = [];\n                if (!isset($campaign) || !$campaign->boosted()) {\n                    foreach ($themes as $i => $n) {\n                        if (empty($i)) continue;\n                        $dizzy[$i] = ['disabled' => true];\n                    }\n                }\n                @endphp\n                <x-forms.select name=\"theme_id\" :options=\"$themes\" :selected=\"$campaign->theme_id ?? null\" :optionAttributes=\"$dizzy\" />\n            </x-forms.field>\n\n            <x-forms.field\n                field=\"member-list\"\n                :label=\"__('campaigns.ui.fields.member_list')\"\n                :helper=\"__('campaigns.ui.helpers.member-list')\"\n                >\n                @php $dizzy = [];\n                if (!isset($campaign) || !$campaign->boosted()) {\n                    $dizzy = [1 => ['disabled' => true]];\n                }\n                @endphp\n                <x-forms.select name=\"ui_settings[hide_members]\" :options=\"[0 => __('campaigns.ui.members.visible'), 1 => __('campaigns.ui.members.hidden')]\" :selected=\"$campaign->ui_settings['hide_members'] ?? null\" :optionAttributes=\"$dizzy\" />\n                @if (!isset($model) || !$model->boosted())\n                    <input type=\"hidden\" name=\"ui_settings[hide_members]\" value=\"0\" />\n                @endif\n            </x-forms.field>\n\n            <x-forms.field\n                field=\"entity-history\"\n                :label=\"__('campaigns.ui.fields.entity_history')\"\n                :helper=\"__('campaigns.ui.helpers.entity-history')\"\n                >\n                @php $dizzy = [];\n                if (!isset($campaign) || !$campaign->boosted()) {\n                    $dizzy = [1 => ['disabled' => true]];\n                }\n                @endphp\n                <x-forms.select name=\"ui_settings[hide_history]\" :options=\"[0 => __('campaigns.ui.entity_history.visible'), 1 => __('campaigns.ui.entity_history.hidden')]\" :selected=\"$campaign->ui_settings['hide_history'] ?? null\" :optionAttributes=\"$dizzy\" />\n                @if (!isset($model) || !$model->boosted())\n                    <input type=\"hidden\" name=\"ui_settings[hide_history]\" value=\"0\" />\n                @endif\n            </x-forms.field>\n        </x-grid>\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/forms/standard.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $model\n */ ?>\n<div class=\"nav-tabs-custom bg-base-100 p-4 rounded-xl flex flex-col gap-6\">\n    @include('campaigns.forms._tabs')\n\n    <div class=\"tab-content\">\n        @include('campaigns.forms.panes.entry')\n        @include('campaigns.forms.panes.dashboard')\n        @include('campaigns.forms.panes.public')\n        @include('campaigns.forms.panes.ui')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/import/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/import.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.import')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    <div class=\"flex gap-5 flex-col\">\n        @include('ads.top')\n        @include('partials.errors')\n\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('campaigns/import.title') }}\n            </h1>\n            <x-learn-more url=\"features/campaigns/import.html\" />\n        </div>\n\n        <p class=\"max-w-2xl\">{{ __('campaigns/import.description_v2') }}</p>\n\n        @can('import', $campaign)\n            @if (empty($token))\n                <div class=\"flex gap-2 items-center rounded bg-base-100 text-base-content p-4\">\n                    <p class=\"grow\">\n                    {!! __('Include with all subscription levels to Kanka.') !!}\n                    </p>\n                    <a href=\"{{ route('settings.subscription') }}\" class=\"btn2 btn-primary btn-sm\">{{ __('upgrade') }}</a>\n                </div>\n            @else\n                @if($token->isPrepared())\n                    <form id=\"campaign-import-form\" class=\"p-4 rounded-xl bg-base-100\" method=\"post\" action=\"{{ \\App\\Facades\\Domain::importer() }}\">\n                        {{ csrf_field() }}\n                            <x-grid type=\"1/1\">\n                                <h2 class=\"text-lg font-light\">{{ __('campaigns/import.form') }}</h4>\n\n                                <div class=\"field field-entities flex flex-col gap-1\">\n                                    <label>{{ __('campaigns/import.fields.file_v2') }}</label>\n\n                                    <input type=\"file\" name=\"file\" class=\"w-full\" id=\"export-files\" accept=\".zip, .csv\" />\n                                    <x-helper>\n                                        <p>{{ __('campaigns/import.limitation_v2', ['size' => '512 MiB']) }}</p>\n                                    </x-helper>\n                                </div>\n\n                                <button type=\"submit\" class=\"btn2 btn-primary\">\n                                    {{ __('campaigns/import.actions.import') }}\n                                </button>\n\n                                <input type=\"hidden\" name=\"campaign\" value=\"{{ $campaign->id }}\" />\n                                <input type=\"hidden\" name=\"token\" value=\"{{ $token->id }}\" />\n                            </x-grid>\n                    </form>\n\n                    <div class=\"progress w-full bg-gray hidden\">\n                        <div class=\"text-center text-2xl py-4\">\n                            <x-icon class=\"load\" />\n                            <p class=\"progress-uploading\">\n                                {{ __('campaigns/import.progress.uploading') }} <span class=\"progress-percent\">0</span>%\n                            </p>\n                            <p class=\"progress-validating hidden\">\n                                {{ __('campaigns/import.status.validating') }}\n                            </p>\n                        </div>\n                        <div class=\"h-0.5 bg-aqua\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 0%\">\n                            <span class=\"sr-only\"></span>\n                        </div>\n                    </div>\n                @endif\n\n                <div id=\"datagrid-parent\" class=\"table-responsive\">\n                    @include('layouts.datagrid._table')\n                </div>\n            @endif\n        @else\n        <x-box class=\"mx-auto max-w-xl flex flex-col gap-4\">\n            <p class=\"text-2xl\">\n                {{ __('callouts.premium.title') }}\n            </p>\n            <p class=\"\">\n                {!! __('campaigns/import.subscription.pitch', ['wyvern' => 'Wyvern', 'elemental' =>  'Elemental']) !!}\n            </p>\n            <a href=\"{{ route('settings.subscription', ['f' => 'cta', 'w' => $campaign->id]) }}\" class=\"btn2 btn-primary btn-block\">\n                {{ __('callouts.actions.subscription') }}\n            </a>\n        </x-box>\n        @endif\n    </div>\n@endsection\n\n@section('modals')\n\n@endsection\n\n@section('scripts')\n    @parent\n    @vite('resources/js/campaigns/import.js')\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/import/process-csv.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/import.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.import')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    <div class=\"flex gap-5 flex-col\">\n        @include('ads.top')\n        @include('partials.errors')\n\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('campaigns/import.title') }}\n            </h1>\n            <x-learn-more url=\"features/campaigns/import.html\" />\n        </div>\n\n        <p class=\"max-w-2xl\">{{ __('campaigns/import.description_v2') }}</p>\n\n        @can('import', $campaign)\n            @livewire('campaigns.csv-import', ['campaignImport' => $import, 'campaign' => $campaign])\n        @endif\n    </div>\n@endsection\n\n@section('modals')\n\n@endsection\n\n@section('scripts')\n    @parent\n    @vite('resources/js/campaigns/import.js')\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/invites/_form.blade.php",
    "content": "@php\n$usages = [\n    '' => __('campaigns.invites.usages.no_limit'),\n    '1' => __('campaigns.invites.usages.once'),\n    '5' => __('campaigns.invites.usages.five'),\n    '10' => __('campaigns.invites.usages.ten'),\n];\n@endphp\n\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('campaigns/invites.create.helper') }}</p>\n    </x-helper>\n    <x-forms.field\n        field=\"usage\"\n        required\n        :label=\"__('campaigns.invites.fields.usage')\"\n        :helper=\"__('campaigns.invites.helpers.usage')\">\n        <x-forms.select name=\"validity\" :options=\"$usages\" class=\"w-full\"  />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"role\"\n        required\n        :label=\"__('campaigns.invites.fields.role')\"\n        :helper=\"__('campaigns.invites.helpers.role')\"\n    >\n        <x-forms.select name=\"role_id\" :options=\"$campaign->roles()->where(['is_public' => false, 'is_admin' => false])->orderBy('name')->pluck('name', 'id')\" class=\"w-full select\" />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/campaigns/invites/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns.invites.create.title', ['campaign' => $campaign->name]),\n    'breadcrumbs' => [\n        ['url' => route('overview', $campaign), 'label' => __('entities.campaign')],\n        ['url' => route('campaign_users.index', $campaign), 'label' => __('campaigns.show.tabs.members')]\n    ],\n    'sidebar' => 'campaign',\n])\n\n@section('content')\n    <x-form :action=\"['campaign_invites.store', $campaign]\">\n        @include('partials.forms.form', [\n            'title' => __('campaigns.invites.actions.link'),\n            'content' => 'campaigns.invites._form',\n            'submit' => __('campaigns.invites.create.buttons.create'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/leave/_actions.blade.php",
    "content": "<x-buttons.confirm type=\"danger\" outline=\"true\">\n    <x-icon class=\"fa-regular fa-sign-out-alt\" />\n    {{ __('campaigns.leave.confirm-button') }}\n</x-buttons.confirm>\n"
  },
  {
    "path": "resources/views/campaigns/leave/_body.blade.php",
    "content": "<x-helper>\n    <p>\n        {!! __('campaigns.leave.confirm', ['name' => '<strong>' . $campaign->name . '</strong>']) !!}\n    </p>\n</x-helper>\n"
  },
  {
    "path": "resources/views/campaigns/leave.blade.php",
    "content": "\n@can('leave', $campaign)\n    <x-form :action=\"['campaign.leave-process', $campaign, $campaign->id]\">\n        @include('partials.forms._dialog', [\n            'mode' => 'edit',\n            'title' => __('campaigns.leave.title'),\n            'content' => 'campaigns.leave._body',\n            'actions' => 'campaigns.leave._actions'\n        ])\n    </x-form>\n@else\n    <x-dialog.header>\n        {{ __('campaigns.leave.title') }}\n    </x-dialog.header>\n\n    <article class=\"max-w-xl p-4 md:px-6\">\n        <p class=\"\">{{ __('campaigns.leave.no-admin-left') }}</p>\n        <a href=\"{{ route('campaign_users.index', $campaign) }}\" class=\"btn2 btn-outline\">\n            <x-icon class=\"arrow\" />\n            {{ __('campaigns.leave.fix') }}\n        </a>\n    </article>\n@endcan\n"
  },
  {
    "path": "resources/views/campaigns/logs/_list.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\UserLog $log\n * @var \\Illuminate\\Support\\Collection $users\n */\n?>\n<p>{!! __('campaigns/logs.helpers.list', ['amount' => '<code>' . $premium . '</code>']) !!}</p>\n\n<table  class=\"table table-hover table-condensed bg-box rounded\">\n    <thead>\n    <tr>\n        <th>{{ __('history.fields.who') }}</th>\n        <th>{{ __('campaigns/categories.tab') }}</th>\n        <th>{{ __('history.fields.action') }}</th>\n        <th>{{ __('history.fields.details') }}</th>\n        <th>{{ __('history.fields.when') }}</th>\n    </tr>\n    </thead>\n    <tbody>\n    @foreach($logs as $log)\n        @if ($log->requiresPremium() && !$campaign->premium())\n            <tr>\n                <td colspan=\"4\" class=\"text-neutral-content text-xs\">\n                    <span class=\"\">\n                        <x-icon class=\"premium\" />\n                        {!! __('campaigns/logs.premium.helper', ['amount' => '<strong>' . $cutoff . '</strong>']) !!}\n                    </span>\n                </td>\n                <td>\n                    <x-since :date=\"$log->created_at\" />\n                </td>\n            </tr>\n        @else\n        <tr>\n            <td>\n                @if ($log->user)\n                    <a href=\"{{ route('users.profile', $log->user) }}\" class=\"text-link\">\n                    {!! $log->user->name !!}\n                    </a>\n                @else\n                    <span>[deleted user]</span>\n                @endif\n\n                @if ($log->impersonator)\n                    <span class=\"text-xs text-neutral-content\" data-toggle=\"tooltip\" data-title=\"{{ __('entities/logs.impersonated', ['name' => $log->impersonator->name]) }}\">\n                        ({!! $log->impersonator->name !!})\n                    </span>\n                @endif\n            </td>\n            <td>\n                {{ \\Illuminate\\Support\\Arr::get($log->data, 'module') }}\n            </td>\n            <td>\n                {{ \\Illuminate\\Support\\Arr::get($log->data, 'action') }}\n            </td>\n            <td class=\"\">\n                <div class=\"flex flex-wrap gap-1\">\n                @foreach ($log->data as $key => $val)\n                    @if (in_array($key, ['module', 'action']) || is_array($key)) @continue @endif\n                        <div class=\"text-xs rounded-2xl px-2 py-1 border border-base-300\">\n                            {{ $key }}: {{ $val }}\n                        </div>\n                @endforeach\n                </div>\n            </td>\n            <td>\n                <x-since :date=\"$log->created_at\" />\n            </td>\n        </tr>\n       @endif\n    @endforeach\n    </tbody>\n</table>\n{!! $logs->links() !!}\n"
  },
  {
    "path": "resources/views/campaigns/logs/index.blade.php",
    "content": "@php\n/** @var \\App\\Models\\Campaign $campaign */\n    use \\Illuminate\\Support\\Arr;\n@endphp\n@extends('layouts.app', [\n    'title' => __('campaigns/logs.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns/logs.title')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('ads.top')\n    @include('partials.errors')\n\n    <div class=\"flex gap-5 flex-col\">\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('campaigns/logs.title') }}\n            </h1>\n            <x-learn-more url=\"features/campaigns/logs\" />\n        </div>\n\n        @includeWhen(!$logs->isEmpty(), 'campaigns.logs._list')\n        @if($logs->isEmpty())\n            <div class=\"flex flex-col gap-2 justify-center items-center\">\n                <div class=\"text-xl font-light\">\n                    {{ __('campaigns/logs.helpers.title') }}\n                </div>\n                <div class=\"text-sm text-neutral-content text-center max-w-md flex flex-col gap-4\">\n                    <p>{!! __('campaigns/logs.helpers.nothing', ['amount' => '<code>' . $cutoff . '</code>']) !!}</p>\n                </div>\n            </div>\n        @endif\n\n\n        @if (!$campaign->premium())\n            <x-premium-cta :campaign=\"$campaign\" premium>\n                <p>\n                    {!! __('campaigns/logs.pitch', ['amount' => '<code>' . config('limits.campaigns.logs.premium') . '</code>']) !!}\n                </p>\n            </x-premium-cta>\n        @endif\n    </div>\n@endsection\n\n"
  },
  {
    "path": "resources/views/campaigns/markdown.blade.php",
    "content": "@if ($campaign->image)\n![image]({!! $campaign->thumbnail(0) !!})\n@endif\n\n# {!! $campaign->name !!}\n\n@if ($campaign->type)\n**{!! __('crud.fields.type') !!}:** {{ $campaign->type }}\n\n@endif\n\n**{!! __('crud.fields.visibility') !!}:** {{ $campaign->isUnlisted() ? 'Discreet' : ($campaign->isPublic() ? 'Public' : 'Private') }}\n\n@if ($campaign->is_hidden)\n**{!! __('export.hidden_campaign') !!}**\n@endif\n\n@if($campaign->hasEntry())\n---\n## {!! __('fields.description.label') !!}\n{!! $converter->convert((string) $campaign->entry) !!}\n\n---\n\n@endif\n"
  },
  {
    "path": "resources/views/campaigns/members/_form.blade.php",
    "content": "@php\n$helper = __('campaigns/members.roles.admin', ['admin' => '<a href=\"' . route('campaigns.campaign_roles.admin', $campaign) . '\" class=\"text-link\">' . CampaignCache::campaign($campaign)->adminRole()['name'] . '</a>']);\n@endphp\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('campaigns/members.roles.helper', ['user' => '<a href=\"' . route('users.profile', $campaignUser->user) . '\" class=\"text-link\">' . $campaignUser->user->name . '</a>']) !!}</p>\n    </x-helper>\n    <input type=\"hidden\" name=\"save_roles\" value=\"1\">\n    <x-forms.field field=\"roles\" :label=\"__('campaigns.members.fields.roles')\" :helper=\"$helper\">\n        @include('components.form.role', ['options' => [\n            'multiple' => true,\n            'model' => $campaignUser,\n            'roles' => $roles ?? false\n        ]])\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/campaigns/members/_invites.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignUser[] $users\n * @var \\App\\Models\\CampaignRole[] $roles\n * @var \\App\\Models\\CampaignInvite[] $invitations\n */\n?>\n@can('invite', $campaign)\n\n    <div class=\"flex gap-2 items-center\">\n        <h2 class=\"inline-block grow text-xl font-light\">\n            {{ __('campaigns.members.invite.title') }}\n        </h3>\n        <button class=\"btn2 btn-sm btn-ghost\" data-toggle=\"dialog\" data-target=\"invite-help\">\n            <x-icon class=\"question\" />\n            {{ __('general.learn-more') }}\n        </button>\n\n        <a href=\"{{ route('campaign_invites.create', $campaign) }}\" class=\"btn2 btn-primary btn-sm\"\n            data-toggle=\"dialog\" data-url=\"{{ route('campaign_invites.create', $campaign) }}\">\n            <x-icon class=\"fa-solid fa-user-plus\" />\n            <span class=\"hidden lg:inline\">{{ __('campaigns.invites.actions.link') }}</span>\n        </a>\n    </div>\n\n    @if($invitations->count() > 0)\n            <div class=\"table-responsive\">\n                <table id=\"campaign-invites\" class=\"table table-hover rounded-xl bg-base-100\">\n                    <thead>\n                        <tr>\n                            <th>{{ __('campaigns.invites.fields.token') }}</th>\n                            <th class=\"hidden md:table-cell\">{{ __('campaigns.invites.fields.usage') }}</th>\n                            <th>{{ __('campaigns.invites.fields.role') }}</th>\n                            <th class=\"hidden md:table-cell\">{{ __('crud.fields.creator') }}</th>\n                            <th class=\"hidden md:table-cell\">{{ __('campaigns.invites.fields.created') }}</th>\n                            <th class=\"text-right\"></th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                    @foreach ($invitations as $relation)\n                        <tr>\n                            <td>\n                                <a href=\"{{ route('campaigns.join', [$campaign, 'token' => $relation->token]) }}\" class=\"text-link\">\n                                    {{ substr($relation->token, 0, 6) . '...' }}\n                                </a>\n                                <a href=\"#\" data-title=\"{{ __('campaigns.invites.actions.copy') }}\" data-clipboard=\"{{ route('campaigns.join', ['token' => $relation->token]) }}\" data-toggle=\"tooltip\" data-toast=\"{{ __('crud.alerts.copy_invite') }}\" class=\"text-link\">\n                                    <x-icon class=\"fa-solid fa-copy\" />\n                                    <span class=\"sr-only\">{{ __('Copy') }}</span>\n                                </a>\n                            </td>\n                            <td class=\"hidden md:table-cell\">\n                                {{ $relation->validity !== null ? $relation->validity : __('campaigns.invites.unlimited_validity') }}\n                            </td>\n                            <td>\n                                @if ($relation->role)\n                                    @can('update', $relation->role)\n                                        <a href=\"{{ route('campaign.members.roles', [$campaign, $relation->role]) }}\" class=\"text-link\">\n                                            {!! $relation->role->name !!}\n                                        </a>\n                                    @else\n                                        {!! $relation->role->name !!}\n                                    @endif\n                                @endif\n                            </td>\n                            <td class=\"hidden md:table-cell\">\n                                @if ($relation->creator)\n                                    <a href=\"{{ route('users.profile', $relation->creator) }}\" class=\"text-link\">\n                                        {!! $relation->creator?->name !!}\n                                    </a>\n                            @endif\n                            <td class=\"hidden md:table-cell\">\n                                <span data-title=\"{{ $relation->created_at }}+00:00\" data-toggle=\"tooltip\">\n                                    {{ $relation->created_at->diffForHumans() }}\n                                </span>\n                            </td>\n                            </td>\n                            <td class=\"text-right\">\n                                <x-buttons.confirm-delete :route=\"route('campaign_invites.destroy', [$campaign, $relation->id])\" />\n                            </td>\n                        </tr>\n                    @endforeach\n                    </tbody>\n                </table>\n            </div>\n            @if($invitations->hasPages())\n                <div class=\"text-right\">\n                    {{ $invitations->links() }}\n                </div>\n            @endif\n        @else\n        <x-box>\n            <x-helper>\n                <p>{!! __('campaigns.members.invite.description', ['campaign' => $campaign->link()]) !!}</p>\n            </x-helper>\n        </x-box>\n        @endif\n@endif\n\n\n@section('modals')\n    <x-dialog id=\"new-invite\" :loading=\"true\" />\n    @parent\n    @include('partials.helper-modal', [\n        'id' => 'invite-help',\n        'title' => __('campaigns.members.invite.title'),\n        'textes' => [\n            __('campaigns.members.invite.description', ['campaign' => $campaign->link()]),\n            __('campaigns.members.invite.more', [\n                        'link' =>\n                            '<a href=\"' . route('campaign_roles.index', $campaign) . '\" class=\"text-link\">'\n                            . __('campaigns.show.tabs.roles') . '</a>'\n                    ])\n        ]\n    ])\n\n    <div class=\"modal fade\" id=\"small-modal\" role=\"dialog\" aria-labelledby=\"deleteConfirmLabel\">\n        <div class=\"modal-dialog modal-sm\" role=\"document\">\n            <div class=\"modal-content rounded-2xl bg-base-100\" id=\"small-modal-content\"></div>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/members/delete.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\CampaignUser $campaignUser\n */\n?>\n<x-dialog.header>\n    {!! __('crud.delete_modal.title') !!}\n</x-dialog.header>\n<article class=\"text-left max-w-2xl p-4 md:px-6\">\n    @include('partials.errors')\n\n    <x-form method=\"DELETE\" :action=\"['campaign_users.destroy', $campaign, $campaignUser->id]\">\n\n    <p class=\"\">\n        {!! __('campaigns.members.removal', ['member' => '<strong>' . $campaignUser->user->name. '</strong>']) !!}<br />\n        <span class=\"permanent\">\n            {{ __('crud.delete_modal.permanent') }}\n        </span>\n    </p>\n\n    <x-dialog.footer>\n        <button type=\"submit\" class=\"btn2 btn-error btn-outline\">\n            <x-icon class=\"fa-solid fa-trash-can\" />\n            <span class=\"remove-button-label\">{{ __('crud.remove') }}</span>\n        </button>\n    </x-dialog.footer>\n    </x-form>\n</article>\n\n"
  },
  {
    "path": "resources/views/campaigns/members/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns.show.tabs.members') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.members')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('ads.top')\n    @include('partials.errors')\n    <div class=\"flex gap-5 flex-col\">\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('campaigns.show.tabs.members') }} <span class=\"text-sm\">({{ $rows->total() }} / @if ($limit = $campaign->memberLimit()){{ $limit }}@else <x-icon class=\"fa-solid fa-infinity\" /> @endif)</span>\n            </h1>\n            <x-learn-more url=\"features/campaigns/members.html\" />\n        </div>\n\n        <x-grid>\n            <x-infoBox\n                title=\"{{ __('campaigns/members.overview.title') }}\"\n                icon=\"{{ $unlimited ? 'fa-solid fa-infinity text-success-content' : 'fa-solid fa-warning text-error-content' }}\"\n                subtitle=\"{{  __('campaigns/members.overview.' . ($unlimited ? 'unlimited' : 'limited'), ['total' => $campaign->memberLimit(), 'amount' => $rows->total()]) }}\"\n                background=\"{{ $unlimited ? 'bg-green-200' : 'bg-error' }}\"\n                :campaign=\"$campaign\"\n                premium\n            ></x-infoBox>\n        </x-grid>\n\n        @if(Datagrid::hasBulks())\n            <x-form :action=\"['campaign_roles.bulk', $campaign]\" direct>\n                <div id=\"datagrid-parent\" class=\"table-responsive\">\n                    @include('layouts.datagrid._table')\n                </div>\n            </x-form>\n        @else\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table')\n            </div>\n        @endif\n\n        @include('campaigns.members._invites')\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/members/update.blade.php",
    "content": "<x-form :action=\"['campaign_users.update-roles', $campaign, $campaignUser]\">\n    @include('partials.forms._dialog', [\n        'title' => __('campaigns/members.roles.title'),\n        'content' => 'campaigns.members._form',\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/campaigns/modules/_custom.blade.php",
    "content": "<div class=\"flex gap-2 items-center justify-between\">\n    <h3 id=\"custom\" class=\"text-xl font-light\">{{ __('campaigns/modules.sections.custom')}}</h3>\n\n    <a\n        class=\"btn2 btn-primary btn-sm\"\n        data-toggle=\"dialog\"\n        data-url=\"{{ route('entity_types.create', [$campaign]) }}\"\n        title=\"{{ __('campaigns/modules.actions.new') }}\">\n        <x-icon class=\"plus\" />\n        {{ __('crud.create') }}\n    </a>\n</div>\n\n@if ($customEntityTypes->isEmpty())\n    <x-helper>\n        <p>{{ __('campaigns/modules.errors.empty-custom') }}</p>\n    </x-helper>\n@else\n\n    <div class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-2 md:gap-4\">\n        @foreach ($customEntityTypes as $entityType)\n            <div class=\"cell col-span-1 flex\" id=\"{{ $entityType->code }}\">\n                <x-campaigns.module-box :campaign=\"$campaign\" :entityType=\"$entityType\" :thumbnail=\"$thumbnails[$entityType->pluralCode()]['path'] ?? ''\"></x-campaigns.module-box>\n            </div>\n        @endforeach\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/campaigns/modules/_default.blade.php",
    "content": "<h3 id=\"default\" class=\"text-xl font-light\">{{ __('campaigns/modules.sections.default')}}</h3>\n\n<div class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-2 md:gap-4\">\n    @foreach ($entityTypes as $entityType)\n        <div class=\"cell col-span-1 flex\" id=\"{{ $entityType->code }}\">\n            <x-campaigns.module-box :campaign=\"$campaign\" :entityType=\"$entityType\" :thumbnail=\"$thumbnails[$entityType->pluralCode()]['path'] ?? ''\"></x-campaigns.module-box>\n        </div>\n    @endforeach\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/modules/_features.blade.php",
    "content": "<h3 id=\"features\" class=\"text-xl font-light\">{{ __('campaigns/modules.sections.features')}}</h3>\n\n<div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-2 md:gap-4\">\n\n    <div class=\"cell col-span-1 flex\">\n        @include('campaigns.modules.box', [\n    'icon' => 'fa-regular fa-suitcase',\n    'module' => 'inventories',\n    'name' => __('entities.inventories')\n    ])\n    </div>\n    <div class=\"cell col-span-1 flex\">\n        @include('campaigns.modules.box', [\n    'icon' => 'fa-regular fa-table',\n    'module' => 'entity_attributes',\n    'name' => __('entries/tabs.properties')\n    ])\n    </div>\n    <div class=\"cell col-span-1 flex\">\n        @include('campaigns.modules.box', [\n    'icon' => 'fa-regular fa-folder',\n    'module' => 'media',\n    'name' => __('entries/tabs.media'),\n    'helper' => __('campaigns/categories.helpers.media')\n    ])\n    </div>\n    <div class=\"cell col-span-1 flex\">\n        @include('campaigns.modules.box', [\n    'icon' => 'fa-regular fa-folder',\n    'module' => 'aliases',\n    'name' => __('entries/tabs.aliases'),\n    'helper' => __('campaigns/categories.helpers.aliases')\n    ])\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/modules/_form.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\EntityType $entityType\n */\n?>\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>\n            {{ __('campaigns/modules.rename.helper') }}\n        </p>\n    </x-helper>\n\n    <x-forms.field\n        field=\"status\"\n        :label=\"__('campaigns/modules.fields.status')\"\n        :helper=\"__('campaigns/modules.helpers.status')\">\n        <input type=\"hidden\" name=\"enabled\" value=\"0\" />\n        <x-checkbox :text=\"__('campaigns/modules.status.enabled')\">\n            <input type=\"checkbox\" name=\"enabled\" value=\"1\" @if ($campaign->enabled($entityType)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    <hr />\n\n    <x-forms.field\n        field=\"singular\"\n        :label=\"__('campaigns/modules.fields.singular')\"\n        :helper=\"__('campaigns/modules.helpers.singular')\">\n        <input type=\"text\" name=\"singular\" value=\"{!! old('singular', $singular) !!}\" maxlength=\"45\" class=\"w-full @if (!$campaign->boosted()) form-control @endif\" placeholder=\"{{ $entityType->name() }}\" @if (!$campaign->boosted()) disabled=\"disabled\" @endif\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"plural\"\n        :label=\"__('campaigns/modules.fields.plural')\"\n        :helper=\"__('campaigns/modules.helpers.plural')\">\n        <input type=\"text\" name=\"plural\" value=\"{!! old('plural', $plural) !!}\" maxlength=\"45\" class=\"w-full @if (!$campaign->boosted()) form-control @endif\" placeholder=\"{{ $entityType->plural() }}\" @if (!$campaign->boosted()) disabled=\"disabled\" @endif />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"icon\"\n        :label=\"__('campaigns/modules.fields.icon')\"\n        :helper=\"__('campaigns/modules.helpers.icon', [\n        'fontawesome' => '<a href=\\'' . config('fontawesome.search') . '\\' class=\\'text-link\\'>FontAwesome</a>',\n        'example' => '<i class=\\'fa-solid fa-horse\\' aria-hidden=\\'true\\'></i> <span class=\\'font-bold\\'>fa-solid fa-horse</span>',\n        ])\">\n        <input type=\"text\" name=\"icon\" value=\"{{ old('icon', $icon) }}\" maxlength=\"60\" class=\"w-full @if (!$campaign->boosted()) form-control @endif\" list=\"module-icon-list\" placeholder=\"{{ $entityType->icon() }}\" @if (!$campaign->boosted()) disabled=\"disabled\" @endif />\n    </x-forms.field>\n\n    @includeWhen(!$entityType->isBookmark() && $campaign->boosted(), 'cruds.fields.image-old', ['model' => $entityType ?? null, 'campaignImage' => true, 'imageLabel' => 'campaigns/modules.fields.image', 'isModule' => true, 'image' => isset($image) ? Img::crop(96, 96)->url($image['path']) : null])\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/campaigns/modules/box.blade.php",
    "content": "@php\n$enabled = $campaign->enabled($module);\n@endphp\n<x-box class=\"box-module overflow-hidden flex flex-wrap flex-col select-none {{ $enabled ? 'module-enabled' : null }}\" id=\"{{ $module }}\" :padding=\"false\">\n    <div class=\"header p-2 bg-neutral text-neutral-content flex items-center gap-2 transition-all duration-300\">\n        <x-icon class=\"flex-0 text-lg {{ $icon }}\" />\n        <span class=\"text-lg grow break-all\">\n            {!! $name !!}\n        </span>\n    </div>\n    <div class=\"grow flex flex-wrap flex-col\">\n        <div class=\"body p-4 grow flex flex-col gap-2\">\n            <x-helper>\n                <p class=\"text-xs\">\n                    {{ $helper ?? __('campaigns.settings.helpers.' . $module) }}\n                </p>\n            </x-helper>\n        </div>\n        @can('update', $campaign)\n        <div class=\"footer text-center my-4\">\n            <label class=\"toggle\">\n                <input type=\"checkbox\" id=\"toggle_{{ $module }}\" name=\"enabled\" data-url=\"{{ route('campaign.features.toggle', [$campaign, 'module' => $module]) }}\" @if ($enabled) checked=\"checked\" @endif>\n                <span class=\"slider module-enabled\"></span>\n                <span class=\"sr-only\">Check to enable the {{ $name }} category</span>\n            </label>\n            <div class=\"action-loading hidden\">\n                <x-icon class=\"load\" />\n            </div>\n        </div>\n        @endcan\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/campaigns/modules/edit.blade.php",
    "content": "<x-form :action=\"['modules.update', $campaign, $entityType->id]\" method=\"PATCH\" class=\"w-full max-w-lg\" files>\n    @include('partials.forms._dialog', [\n        'title' => __('campaigns/modules.rename.title', ['module' => __('entities.' . $entityType->pluralCode())]),\n        'content' => 'campaigns.modules._form',\n        'submit' => __('crud.actions.save-changes')\n    ])\n</x-form>\n\n"
  },
  {
    "path": "resources/views/campaigns/modules/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/categories.tab') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns/categories.tab')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('ads.top')\n    @include('partials.errors')\n    <div class=\"grow flex flex-col gap-5\" id=\"campaign-modules\">\n\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"inline-block text-2xl\">\n                {{ __('campaigns/categories.tab') }}\n            </h1>\n            <div class=\"flex gap-1\">\n                <x-learn-more url=\"features/campaigns/modules.html\" />\n                @can('update', $campaign)\n                @if ($canReset)\n                    <a href=\"#\" class=\"btn2 btn-sm\" data-toggle=\"dialog\" data-target=\"reset-confirm\">\n                        <x-icon class=\"fa-regular fa-eraser\" />\n                        {{ __('crud.actions.reset') }}\n                    </a>\n                @endif\n                @endcan\n            </div>\n        </div>\n\n        <p>\n            {{ __('campaigns/modules.helpers.tutorial') }}\n        </p>\n\n        @includeWhen(config('entities.custom'), 'campaigns.modules._custom')\n        @include('campaigns.modules._default')\n        @include('campaigns.modules._features')\n    </div>\n@endsection\n\n@section('modals')\n    @parent\n    <x-dialog id=\"rename-dialog\" :loading=\"true\"></x-dialog>\n\n    <x-dialog id=\"reset-confirm\" :title=\"__('campaigns/modules.reset.title')\">\n        <x-helper>\n            <p>{{ __('campaigns/modules.reset.warning') }}</p>\n            <p>{{ __('campaigns/modules.reset.default') }}</p>\n        </x-helper>\n\n        <div class=\"grid grid-cols-2 gap-2 w-full\">\n            <x-buttons.confirm type=\"ghost\" full=\"true\" dismiss=\"dialog\">\n                {{ __('crud.cancel') }}\n            </x-buttons.confirm>\n\n            <x-form method=\"DELETE\" :action=\"['modules.reset', $campaign]\">\n            <x-buttons.confirm type=\"danger\" full=\"true\" outline=\"true\">\n                {{ __('crud.actions.confirm') }}\n            </x-buttons.confirm>\n            </x-form>\n        </div>\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/modules/not-premium.blade.php",
    "content": "<x-premium-cta :campaign=\"$campaign\" premium>\n    <p>\n        {{ __('campaigns/modules.pitch') }}\n    </p>\n</x-premium-cta>\n"
  },
  {
    "path": "resources/views/campaigns/plugins/confirm.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Plugin $plugin\n * @var \\App\\Models\\CampaignPlugin $version\n */\n?>\n<x-dialog.header>\n    {!! __('campaigns/plugins.import.title', ['plugin' => $plugin->name]) !!}\n</x-dialog.header>\n\n<article class=\"text-left max-w-2xl p-4 md:px-6\">\n    @include('partials.errors')\n\n    <x-form :action=\"['campaign_plugins.import', $campaign, $plugin]\">\n        <x-grid type=\"1/1\">\n            <x-helper>\n                <p>{!! __('campaigns/plugins.import.helper', [\n                'count' => $version->version->entities()->count(),\n                'plugin' => '<a href=\"' . $plugin->libraryUrl() . '\" class=\"text-link\">' . $plugin->name . '</a>'\n            ]) !!}</p>\n            </x-helper>\n\n            <x-forms.field field=\"force_private\" :label=\" __('campaigns/plugins.import.fields.private')\">\n                <input type=\"hidden\" name=\"force_private\" value=\"0\" />\n                <x-checkbox :text=\"__('campaigns/plugins.import.option_private')\">\n                    <input type=\"checkbox\" name=\"force_private\" />\n                </x-checkbox>\n            </x-forms.field>\n\n            <x-forms.field field=\"only_new\" :label=\" __('campaigns/plugins.import.fields.only_new')\">\n                <input type=\"hidden\" name=\"only_new\" value=\"0\" />\n                <x-checkbox :text=\"__('campaigns/plugins.import.option_only_import')\">\n                    <input type=\"checkbox\" name=\"only_new\" />\n                </x-checkbox>\n            </x-forms.field>\n        </x-grid>\n\n        <x-dialog.footer>\n            <input type=\"submit\" value=\"{{ __('campaigns/plugins.import.button') }}\" class=\"btn2 btn-primary\" />\n        </x-dialog.footer>\n    </x-form>\n</article>\n\n"
  },
  {
    "path": "resources/views/campaigns/plugins/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Plugin $plugin\n */?>\n<div class=\"flex gap-2 items-center justify-between\">\n    <h1 class=\"inline-block text-2xl\">\n        {{ __('campaigns.show.tabs.plugins') }}\n    </h1>\n    <a href=\"{{ config('marketplace.url') }}\" class=\"btn2 btn-primary btn-sm\">\n        {{ __('campaigns/plugins.actions.find-plugins') }} <x-icon class=\"link\" />\n    </a>\n</div>\n\n@if($campaign->boosted())\n    @if(Datagrid::hasBulks())\n        <x-form :action=\"['campaign_plugins.bulk', $campaign]\" direct>\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table', ['empty' => __('campaigns/plugins.empty_list')])\n            </div>\n        </x-form>\n    @else\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @include('layouts.datagrid._table', ['empty' => __('campaigns/plugins.empty_list')])\n        </div>\n    @endif\n@else\n    <x-premium-cta :campaign=\"$campaign\">\n        <p>\n            {!! __('campaigns/plugins.pitch', ['marketplace' => '<a href=\"' . config('marketplace.url') . '\" class=\"text-link\">' . __('footer.plugins'). '</a>']) !!}\n        </p>\n    </x-premium-cta>\n@endif\n\n\n@section('modals')\n    @parent\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms()])\n\n    <x-dialog id=\"plugin-update\" :loading=\"true\"></x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/plugins/info.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Plugin $plugin\n * @var \\App\\Models\\PluginVersion $version\n *\n */\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/plugins.info.title', ['plugin' => $plugin->name]),\n    'breadcrumbs' => [\n        ['url' => route('overview', $campaign), 'label' => __('entities.campaign')],\n        ['url' => route('campaign_plugins.index', $campaign), 'label' => __('campaigns.show.tabs.plugins')],\n        __('campaigns/plugins.info.title', ['plugin' => $plugin->name]),\n    ],\n    'canonical' => true,\n    'sidebar' => 'campaign',\n])\n\n\n@section('content')\n    <x-dialog.header>\n        {!! $plugin->name !!}\n    </x-dialog.header>\n    <article class=\"text-left max-w-2xl p-4 md:px-6\">\n        <x-helper>\n            <p>{!! __('campaigns/plugins.info.description', ['plugin' => $plugin->name]) !!}</p>\n        </x-helper>\n        <div class=\"flex flex-col gap-4 w-full\">\n            <div class=\"plugin-summary grow\">\n                @if (!empty($plugin->summary))\n                    {!! $plugin->summary !!}\n                @else\n                    {!! \\Illuminate\\Support\\Str::limit($plugin->entry, 300) !!}\n                @endif\n            </div>\n\n            @if($plugin->hasUpdate($plugin->created_by === auth()->user()->id))\n                <x-form :action=\"['campaign_plugins.update', $campaign, $plugin]\" class=\"inline-block\">\n                    <button type=\"submit\" class=\"btn2 btn-primary btn-sm\">\n                        <x-icon class=\"fa-regular fa-download\" />\n                        {{ __('campaigns/plugins.actions.update-to', ['version' => $plugin->updateVersionNumber()]) }}\n                    </button>\n                </x-form>\n            @endif\n            <div class=\"text-lg mt-6\">\n                {{ __('campaigns/plugins.info.versions') }}\n            </div>\n\n            @php $first = true; @endphp\n            @foreach ($versions as $version)\n                @if (!$first) <hr /> @endif\n                <div class=\"plugin-box w-full\">\n                    <div class=\"plugin-head flex items-center gap-2 justify-between\">\n                        <div class=\"flex gap-2 items-center\">\n                            <x-icon class=\"fa-solid fa-code-branch\" />\n                            <strong>{{ $version->version }}</strong>\n                            @if($version->id == $plugin->pivot->plugin_version_id)\n                                <x-badge type=\"accent\">\n                                    <span class=\"text-xs\">\n                                        {{ __('campaigns/plugins.info.installed') }}\n                                    </span>\n                                </x-badge>\n                            @elseif ($version->isDraft())\n                                <x-badge>\n                                    DRAFT\n                                </x-badge>\n                            @endif\n                        </div>\n                        <div class=\"\">\n                            <span class=\"text-xs text-neutral-content\">{{ $version->updated_at->diffForHumans() }}</span>\n\n                        </div>\n                    </div>\n\n                    <div class=\"plugin-body text-neutral-content text-sm\">\n                        {!! $version->entry !!}\n                    </div>\n                </div>\n                @php $first = false; @endphp\n            @endforeach\n        </div>\n    </article>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/plugins.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/plugins.title', ['name' => $campaign->name]),\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.plugins')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    <div class=\"flex gap-5 flex-col campaign-plugins\">\n\n        @include('partials.errors')\n        @include('ads.top')\n\n        @if(session('plugin_entities_created'))\n            <x-alert type=\"info\" :dismissible=\"true\">\n                <strong>{{ __('campaigns/plugins.import.created') }}</strong><br/>\n                <p>{!! session('plugin_entities_created') !!}</p>\n            </x-alert>\n        @endif\n        @if(session('plugin_entities_updated'))\n            <x-alert type=\"info\" :dismissible=\"true\">\n                <strong>{{ __('campaigns/plugins.import.updated') }}</strong><br/>\n                <p>{!! session('plugin_entities_updated') !!}</p>\n            </x-alert>\n        @endif\n        @if(session('plugin_only_new') == 'on' && session('plugin_entities_created') == 0)\n            <x-alert type=\"warning\" :dismissible=\"true\">\n                <strong>{{ __('campaigns/plugins.import.no_new_entities') }}</strong>\n            </x-alert>\n        @endif\n        @include('campaigns.plugins.index')\n    </div>\n@endsection\n\n\n"
  },
  {
    "path": "resources/views/campaigns/recovery/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/recovery.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.recovery')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    <div class=\"flex gap-5 flex-col\">\n        @include('partials.errors')\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('campaigns/recovery.title') }}\n            </h1>\n\n            <x-learn-more url=\"features/campaigns/recovery.html\" />\n        </div>\n\n        <p>{!! __('campaigns/recovery.tutorial', ['amount' => '<span class=\"font-extrabold\">' . config('entities.hard_delete') . '</span>']) !!}</p>\n        <div id=\"recovery\">\n            <recovery\n                api=\"{{ route('recovery.setup', [$campaign]) }}\"\n            ></recovery>\n        </div>\n    </div>\n\n@endsection\n\n@section('scripts')\n    @parent\n    @vite('resources/js/recovery/recovery.js')\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/roles/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    @empty($role)\n        <x-helper>\n            <p>{{ __('campaigns/roles.create.helper') }}</p>\n        </x-helper>\n    @endif\n<x-forms.field\n    field=\"name\"\n    required\n    :label=\"__('campaigns.roles.fields.name')\"\n    >\n    <input type=\"text\" name=\"name\" placeholder=\"{{ __('campaigns.roles.placeholders.name') }}\" maxlength=\"45\" required value=\"{!! htmlspecialchars(old('name', $role->name ?? null)) !!}\" />\n</x-forms.field>\n@if (isset($roleId))\n    <x-forms.field\n        field=\"duplicate\"\n        :label=\"__('campaigns.roles.fields.copy_permissions')\">\n        <input type=\"hidden\" name=\"role_id\" value=\"{{ $roleId }}\" />\n        <input type=\"hidden\" name=\"duplicate\" value=\"0\" />\n        <x-checkbox :text=\"__('campaigns.roles.helper.permissions_helper')\">\n            <input type=\"checkbox\" name=\"duplicate\" value=\"1\" @if (old('duplicate', true)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n@endif\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/campaigns/roles/_members.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignRole $role\n * @var \\App\\Models\\CampaignRoleUser[]|\\Illuminate\\Pagination\\LengthAwarePaginator $members\n */\n?>\n<h2 class=\"text-xl font-light\">\n    {{ __('campaigns.roles.members') }} ({{ $members->count() }})\n</h2>\n\n\n<div class=\"flex flex-wrap gap-2 flex-stretch\">\n    @if ($members->isNotEmpty())\n        @foreach ($members as $relation)\n            <div class=\"flex items-center gap-2 rounded bg-box p-2 w-48 \">\n                <div class=\"grow flex flex-col gap-1 overflow-hidden text-ellipsis\">\n                    <div class=\"truncate\" data-toggle=\"tooltip\" data-title=\"{{ $relation->user->name }}\">\n                        {{ $relation->user->name }}\n                    </div>\n                @if (config('app.debug'))\n                    <span class=\"text-neutral-content text-xs\">\n                        {{ $relation->user->email }}\n                    </span>\n                @endif\n                </div>\n                @can('delete', [$relation, $role])\n                    <a href=\"#\" class=\"btn2 btn-error btn-outline btn-sm\"\n                       data-toggle=\"dialog\"\n                       data-url=\"{{ route('confirm-delete', [$campaign, 'route' => route('campaign_roles.campaign_role_users.destroy', [$campaign, $role, 'campaign_role_user' => $relation->id]), 'name' => __('campaigns.roles.users.actions.remove', ['user' => $relation->user->name, 'role' => $role->name]), 'permanent' => true]) }}\"\n                       title=\"{{ __('campaigns.roles.users.actions.remove_user') }}\">\n                        <x-icon class=\"fa-solid fa-user-slash\" />\n                    </a>\n                @endcan\n\n            </div>\n        @endforeach\n    @else\n        <x-alert type=\"info grow\">\n            <div class=\"\">{{__('campaigns.roles.hints.empty_role')}}</div>\n        </x-alert>\n    @endif\n    @can('user', $role)\n        <a href=\"{{ route('campaign_roles.campaign_role_users.create', [$campaign, 'campaign_role' => $role]) }}\"\n           class=\"btn2 btn-primary\"\n           data-toggle=\"dialog\" data-target=\"new-member\"\n           data-url=\"{{ route('campaign_roles.campaign_role_users.create', [$campaign, 'campaign_role' => $role]) }}\">\n            <x-icon class=\"plus\" />\n            {{ __('campaigns.roles.users.actions.add') }}\n        </a>\n    @endcan\n</div>\n@if($members->hasPages())\n    <div class=\"\">\n        {{ $members->onEachSide(0)->links() }}\n    </div>\n@endif\n\n@section('modals')\n    @parent\n    <x-dialog id=\"new-member\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/roles/_pretty.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Services\\Permissions\\RolePermissionService $permissionService\n * @var \\App\\Models\\CampaignRole $role\n */\n$first = true;\n?>\n\n<h2 class=\"text-xl font-light\">{{ __('campaigns/roles.permissions.content-modules') }}</h2>\n<x-box class=\"overflow-y-auto\">\n    <div class=\"grid grid-cols-6 md:grid-cols-7 gap-2\">\n    @foreach ($permissionService->permissions() as $permissions)\n        @if ($first)\n            <div class=\"hidden sm:block\"></div>\n            @foreach ($permissions['permissions'] as $perm)\n                <div class=\"flex flex-col gap-1 items-center tooltip-wide  md:w-40 flex gap-2 justify-center\">\n                    <span class=\"hidden sm:inline\">\n                        {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                        <i class=\"fa-regular fa-question-circle text-link cursor-pointer\" aria-hidden=\"true\" data-target=\"permission-modal\" data-toggle=\"dialog\"></i>\n                        <br />\n                    </span>\n\n                    <a href=\"#\" class=\"permission-toggle\" data-action=\"{{ $perm['action'] }}\" title=\"{{ __('campaigns/roles.permissions.toggle.tooltip', ['action' => $perm['label']]) }}\">\n                        {{ __('campaigns/roles.permissions.toggle.action') }}\n                    </a>\n                </div>\n            @endforeach\n            @php $first = false; @endphp\n        @endif\n        <div class=\"col-span-7 md:col-span-1 md:w-40\">\n            <div class=\"font-extrabold truncate inline\">\n                {!! $permissions['entityType']->plural() !!}\n            </div>\n            @if (($permissions['entityType']->isCustom() && !$permissions['entityType']->isEnabled()) || ($permissions['entityType']->isStandard() && !$campaign->enabled($permissions['entityType']->pluralCode())))\n                <div class=\"inline\" data-toggle=\"tooltip\" data-title=\"{{ __('campaigns/categories.errors.permission-disabled') }}\">\n                    <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n                    <span class=\"inline sm:hidden text-sm\">{{ __('campaigns/categories.errors.permission-disabled') }}</span>\n                </div>\n            @endif\n        </div>\n        @foreach ($permissions['permissions'] as $perm)\n            <div class=\"text-center md:w-40 overflow-hidden\">\n                <div class=\"pretty p-icon p-toggle p-plain\" data-title=\"{{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\" data-toggle=\"tooltip\">\n                    <input type=\"checkbox\" name=\"permissions[{{ $perm['key'] }}]\" value=\"{{ $permissions['entityType']->id }}\" @if ($perm['enabled']) checked=\"checked\" @endif data-action=\"{{ $perm['action'] }}\" />\n                    <div class=\"state p-success-o p-on\">\n                        <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                        <label class=\"sm:hidden\">\n                            {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                        </label>\n                    </div>\n                    <div class=\"state p-off\">\n                        <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                        <label class=\"sm:hidden\">\n                            {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                        </label>\n                    </div>\n                </div>\n            </div>\n        @endforeach\n    @endforeach\n    </div>\n\n    @php $first = true; @endphp\n</x-box>\n\n<h2 class=\"text-xl font-light\">{{ __('campaigns/roles.permissions.campaign-features') }}</h2>\n\n<x-box class=\"flex flex-col gap-2 overflow-y-auto\">\n    <div class=\"grid grid-cols-3 md:grid-cols-4 gap-2\">\n        @foreach ($permissionService->campaignPermissions() as $entity => $permissions)\n            @if ($first && false)\n                <div class=\"hidden sm:inline\">\n                </div>\n\n                @foreach ($permissions as $perm)\n                    <div class=\"hidden sm:flex text-center tooltip-wide gap-2 justify-center\">\n                        <label>\n                <span class=\"hidden sm:inline\">{{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}@if($perm['action'] == \\App\\Enums\\Permission::Posts->value)\n                        <i class=\"fa-regular fa-question-circle\" data-placement=\"bottom\" data-toggle=\"tooltip\" data-title=\"{{ __('campaigns.roles.permissions.helpers.articles') }}\"></i>\n                    @endif<br /></span>\n                            <input type=\"checkbox\" class=\"permission-toggle\" data-action=\"{{ $perm['action'] }}\" title=\"{{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\" />\n\n                            <span class=\"inline sm:hidden\">{{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}</span>\n                        </label>\n                    </div>\n                @endforeach\n                @php $first = false; @endphp\n            @endif\n\n            <div class=\"col-span-3 md:col-span-1\">\n                <strong>{{ __('entities.' . $entity) }}</strong>\n            </div>\n            @foreach ($permissions as $perm)\n                <div class=\"md:w-40 overflow-hidden\">\n                    <div class=\"pretty p-icon p-toggle p-plain\" data-title=\"{{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\" data-toggle=\"tooltip\">\n                        <input type=\"checkbox\" name=\"permissions[{{ $perm['key'] }}]\" value=\"{{ $entity }}\" @if ($perm['enabled']) checked=\"checked\" @endif data-action=\"{{ $perm['action'] }}\" />\n                        <div class=\"state p-success-o p-on\">\n                            <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                            <label class=\"sm:hidden\">\n                                {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                            </label>\n                        </div>\n                        <div class=\"state p-off\">\n                            <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                            <label class=\"sm:hidden\">\n                                {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                            </label>\n                        </div>\n                    </div>\n                </div>\n            @endforeach\n\n        @endforeach\n    </div>\n\n<div class=\"grid grid-cols-3 md:grid-cols-4 gap-2\">\n    <div class=\"col-span-3 md:col-span-1\">\n        <strong>{{ __('sidebar.gallery') }}</strong>\n    </div>\n    @foreach ($permissionService->galleryPermissions() as $entity => $permissions)\n        @foreach ($permissions as $perm)\n            <div class=\"md:w-40 overflow-hidden\">\n                <div class=\"pretty p-icon p-toggle p-plain\" data-title=\"{{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\" data-toggle=\"tooltip\">\n                    <input type=\"checkbox\" name=\"permissions[{{ $perm['key'] }}]\" value=\"{{ $entity }}\" @if ($perm['enabled']) checked=\"checked\" @endif data-action=\"{{ $perm['action'] }}\" />\n                    <div class=\"state p-success-o p-on\">\n                        <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                        <label class=\"sm:hidden\">\n                            {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                        </label>\n                    </div>\n                    <div class=\"state p-off\">\n                        <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                        <label class=\"sm:hidden\">\n                            {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                        </label>\n                    </div>\n                </div>\n            </div>\n        @endforeach\n    @endforeach\n</div>\n\n<div class=\"grid grid-cols-3 md:grid-cols-4 gap-2\">\n    <div class=\"col-span-3 md:col-span-1\">\n        <strong>{{ __('entities.archetypes') }} / {{ __('entities.templates') }}</strong>\n    </div>\n    @foreach ($permissionService->templatePermissions() as $entity => $permissions)\n        @foreach ($permissions as $perm)\n            <div class=\"md:w-40 overflow-hidden\">\n                <div class=\"pretty p-icon p-toggle p-plain\" data-title=\"{{ __('entities.' . $perm['label']) }}\" data-toggle=\"tooltip\">\n                    <input type=\"checkbox\" name=\"permissions[{{ $perm['key'] }}]\" value=\"{{ $entity }}\" @if ($perm['enabled']) checked=\"checked\" @endif data-action=\"{{ $perm['action'] }}\" />\n                    <div class=\"state p-success-o p-on\">\n                        <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                        <label class=\"sm:hidden\">\n                            {{ __('entities.' . $perm['label']) }}\n                        </label>\n                    </div>\n                    <div class=\"state p-off\">\n                        <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                        <label class=\"sm:hidden\">\n                            {{ __('entities.' . $perm['label']) }}\n                        </label>\n                    </div>\n                </div>\n            </div>\n        @endforeach\n    @endforeach\n</div>\n\n<div class=\"grid grid-cols-3 md:grid-cols-4 gap-2\">\n    <div class=\"col-span-3 md:col-span-1\">\n        <strong>{{ __('entities.bookmarks') }}</strong>\n    </div>\n    @foreach ($permissionService->bookmarkPermissions() as $entity => $permissions)\n        @foreach ($permissions as $perm)\n            <div class=\"md:w-40 overflow-hidden\">\n                <div class=\"pretty p-icon p-toggle p-plain\" data-title=\"{{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\" data-toggle=\"tooltip\">\n                    <input type=\"checkbox\" name=\"permissions[{{ $perm['key'] }}]\" value=\"{{ $entity }}\" @if ($perm['enabled']) checked=\"checked\" @endif data-action=\"{{ $perm['action'] }}\" />\n                    <div class=\"state p-success-o p-on\">\n                        <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                        <label class=\"sm:hidden\">\n                            {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                        </label>\n                    </div>\n                    <div class=\"state p-off\">\n                        <x-icon class=\"icon {{ $perm['icon'] }}\" />\n                        <label class=\"sm:hidden\">\n                            {{ __('campaigns.roles.permissions.actions.' . $perm['label']) }}\n                        </label>\n                    </div>\n                </div>\n            </div>\n        @endforeach\n    @endforeach\n</div>\n\n</x-box>\n"
  },
  {
    "path": "resources/views/campaigns/roles/_public.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Services\\PermissionService $permissionService\n * @var \\App\\Models\\CampaignRole $role\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\EntityType $entityType\n */\n?>\n<div class=\"flex flex-col gap-5\">\n    <div class=\"flex gap-2 justify-between\">\n        <h1 class=\"text-2xl\">\n            {{ __('crud.permissions.title') }}\n        </h1>\n        <a href=\"#\" data-url=\"{{ route('campaign-visibility', $campaign) }}\" data-target=\"campaign-visibility\" data-toggle=\"dialog\" class=\"btn2 btn-sm btn-primary\" >\n            <x-icon class=\"fa-solid fa-user-secret\" />\n            {{ __('campaigns/roles.actions.status', [\n            'status' => $campaign->isUnlisted() ? __('campaigns/visibilities.titles.unlisted') : ($campaign->isPublic() ? __('campaigns/visibilities.titles.public') : __('campaigns/visibilities.titles.private'))\n            ]) }}\n        </a>\n    </div>\n\n    <p>\n        {!! __('campaigns/roles.public.helpers.intro') !!}\n    </p>\n    <p>\n        {!! __('campaigns/roles.public.helpers.main') !!}\n    </p>\n    <div class=\"flex gap-4\">\n        <a href=\"{{ route('dashboard', [$campaign, 'goal' => 'incognito']) }}\" target=\"_blank\" class=\"text-link\">\n            {!! __('campaigns/roles.public.helpers.preview') !!}\n            <x-icon class=\"link\" />\n        </a>\n        <a href=\"https://www.youtube.com/watch?v=VpY_D2PAguM\" target=\"_blank\" class=\"text-link\">\n            {{ __('general.tutorial') }}\n            <x-icon class=\"link\" />\n        </a>\n    </div>\n\n    <h2 class=\"text-xl font-light\">\n        {{ __('campaigns/categories.tab') }}\n    </h2>\n\n    <x-helper>\n        <p>{{ __('campaigns/roles.public.helpers.click') }}</p>\n    </x-helper>\n\n    <div class=\"grid gap-5 grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5\">\n        @foreach ($modules as $entityType)\n            <div class=\"public-permission flex flex-col gap-2 rounded items-center text-center justify-center break-all overflow-x-hidden cursor-pointer text-lg px-2 py-5 select-none {{ $permissionService->type($entityType->id)->can(\\App\\Enums\\Permission::View) ? \"enabled\": null }}\" data-url=\"{{ route('campaign_roles.toggle', [$campaign, $role, 'entityType' => $entityType, 'action' => \\App\\Enums\\Permission::View->value]) }}\">\n                <div class=\"block text-2xl\">\n                    <div class=\"module-icon\">\n                        <x-icon class=\"{{ $entityType->icon() }}\" />\n                    </div>\n                    <div class=\"loading-animation hidden\">\n                        <x-icon class=\"load\" />\n                    </div>\n                </div>\n\n                <div class=\"\">{!! $entityType->plural() !!}</div>\n                @if (($entityType->isStandard() && !$campaign->enabled($entityType)) || ($entityType->isCustom() && !$entityType->isEnabled()))\n                    <div class=\"rounded bg-warning text-warning-content\" data-toggle=\"tooltip\" data-title=\"{{ __('campaigns/categories.errors.permission-disabled') }}\">\n                        <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n                        <span class=\"md:hidden text-sm inline\">{{ __('campaigns/categories.errors.permission-disabled') }}</span>\n                    </div>\n                @endif\n            </div>\n        @endforeach\n    </div>\n</div>\n\n@section('modals')\n    @parent\n\n    <x-dialog id=\"campaign-visibility\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/roles/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns.roles.create.title', ['name' => $model->name]),\n    'breadcrumbs' => [\n        ['url' => route('overview', $campaign), 'label' => __('entities.campaign')],\n        ['url' => route('campaign_roles.index', $campaign), 'label' => __('campaigns.show.tabs.roles')],\n        __('campaigns.roles.actions.add')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n])\n\n@section('content')\n    <x-form :action=\"['campaign_roles.store', $campaign]\">\n\n    @include('partials.forms.form', [\n            'title' => __('campaigns.roles.create.title'),\n            'content' => 'campaigns.roles._form',\n            'submit' => __('crud.create'),\n            'model' => null,\n        ])\n\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/roles/edit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => trans('campaigns.roles.edit.title', ['name' => $role->name]),\n    'breadcrumbs' => [\n        ['url' => route('overview', $campaign), 'label' => __('entities.campaign')],\n        ['url' => route('campaign_roles.index', $campaign), 'label' => trans('campaigns.show.tabs.roles')],\n        $role->name,\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n])\n\n@section('content')\n    <x-form :action=\"['campaign_roles.update', $campaign, $role->id]\" method=\"PATCH\" class=\"entity-form\">\n        @include('partials.forms.form', [\n            'title' => __('campaigns.roles.edit.title', ['name' => $role->name]),\n            'content' => 'campaigns.roles._form',\n            'submit' => __('campaigns.roles.actions.rename'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/roles/index.blade.php",
    "content": "<div class=\"flex gap-2 items-center justify-between\">\n    <h1 class=\"text-2xl\">\n        {{ __('campaigns.show.tabs.roles') }}\n    </h1>\n    <div class=\"flex gap-2\">\n    <button class=\"btn2 btn-sm btn-ghost\" data-toggle=\"dialog\"\n            data-target=\"roles-help\">\n        <x-icon class=\"question\" />\n        {{ __('general.learn-more') }}\n    </button>\n    @if (auth()->user()->can('update', $campaign))\n        <a href=\"{{ route('campaign_roles.create', $campaign) }}\" class=\"btn2 btn-primary btn-sm\"\n           data-toggle=\"dialog\" data-target=\"role-dialog\"\n           data-url=\"{{ route('campaign_roles.create', $campaign) }}\"\n        >\n            <x-icon class=\"plus\" />\n            {{ __('campaigns.roles.actions.add') }}\n        </a>\n    @endif\n    </div>\n</div>\n\n<x-grid>\n    <x-infoBox\n        title=\"{{ __('campaigns/roles.overview.title') }}\"\n        icon=\"{{ $unlimited ? 'fa-solid fa-infinity text-success-content' : 'fa-solid fa-warning text-error-content' }}\"\n        subtitle=\"{{  __('campaigns/roles.overview.' . ($unlimited ? 'unlimited' : 'limited'), ['total' => $campaign->roleLimit(), 'amount' => $roles->total()]) }}\"\n        background=\"{{ $unlimited ? 'bg-green-200' : 'bg-error' }}\"\n        :campaign=\"$campaign\"\n        premium\n    ></x-infoBox>\n</x-grid>\n\n<?php /** @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignRole $plugin\n */?>\n    @if(Datagrid::hasBulks())\n        <x-form :action=\"['campaign_roles.bulk', $campaign]\" direct>\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table')\n            </div>\n        </x-form>\n    @else\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @include('layouts.datagrid._table')\n        </div>\n    @endif\n\n@section('modals')\n    @parent\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms()])\n\n    @include('partials.helper-modal', [\n        'id' => 'roles-help',\n        'title' => __('campaigns.show.tabs.roles'),\n        'textes' => [\n            __('campaigns.roles.helper.1', [\n                'admin' => '<a href=\"' . route(\n                    'campaigns.campaign_roles.admin',\n                    $campaign,\n                ) . '\" class=\"text-link\">' .\n                    $campaign->adminRoleName() . '</a>',\n            ]),\n            __('campaigns.roles.helper.2'),\n            __('campaigns.roles.helper.3'),\n            __('campaigns.roles.helper.4'),\n        ]\n    ])\n    <x-dialog id=\"role-dialog\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/roles/rows/permissions.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignRole $model\n * @var \\App\\Models\\Campaign $campaign\n */\n?>\n<div class=\"flex gap-2 items-center\">\n\n@if (!$model->isAdmin())\n    <a\n        href=\"{{ route('campaign_roles.show', [$campaign, 'campaign_role' => $model]) }}\"\n        title=\"{{ __('campaigns.roles.actions.permissions') }}\">\n        {{ \\Illuminate\\Support\\Number::format($model->role_permissions_count) }}\n    </a>\n@endif\n\n@if ($model->isPublic() && $campaign->isPrivate() && $model->role_permissions_count > 0)\n    <div class=\"hidden sm:block\">\n        <x-icon class=\"fa-regular fa-exclamation-triangle\" tooltip title=\"{{ __('campaigns.roles.hints.campaign_not_public') }}\" />\n    </div>\n    <div class=\"sm:hidden cursor-pointer\" x-data=\"{open: false}\" @click=\"open = !open\">\n        <span role=\"button\" class=\"btn2 btn-xs\" >\n            <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n        </span>\n        <span x-show=\"open\" class=\"help-block text-xs\">\n            {{ __('campaigns.roles.hints.campaign_not_public') }}\n        </span>\n    </div>\n@endif\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/roles/show.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignRole $role\n */\n?>\n@extends('layouts.app', [\n    'title' => $role->name . ' - ' . $model->name,\n    'breadcrumbs' => [\n        ['url' => route('campaign_roles.index', $campaign), 'label' => __('campaigns.show.tabs.roles')],\n        $role->name,\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n\n    @if ($role->isPublic())\n        @include('campaigns.roles._public')\n    @else\n    <div class=\"flex flex-col gap-5 relative\">\n\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">{{ __('crud.permissions.title') }}</h1>\n            <button class=\"btn2 btn-sm btn-ghost\" data-target=\"permission-modal\" data-toggle=\"dialog\">\n                <x-icon class=\"question\" />\n                {{ __('general.learn-more') }}\n            </button>\n        </div>\n        @if (!$role->isAdmin())\n            <p>{!! __('campaigns.roles.hints.role_permissions', ['name' => '<span class=\"font-semibold\">' . $role->name . '</span>']) !!}</p>\n        @else\n            <p>{!! __('campaigns.roles.hints.role_admin', ['name' => '<span class=\"font-semibold\">' . $role->name . '</span>']) !!} </p>\n        @endif\n\n        @include('campaigns.roles._members')\n\n        @if (!$role->isAdmin())\n            @can('permission', $role)\n                <x-form :action=\"['campaign_roles.savePermissions', $campaign, 'campaign_role' => $role]\">\n                    <div class=\"w-full flex flex-col gap-4\">\n                        @include('campaigns.roles._pretty')\n\n                        <div class=\"sticky bottom-4 ml-auto z-50\">\n                            <button class=\"btn2 btn-primary\">\n                                <x-icon class=\"save\" />\n                                {{ __('crud.save') }}\n                            </button>\n                        </div>\n                    </div>\n                </x-form>\n            @endif\n        @endif\n    </div>\n    @endif\n@endsection\n\n@section('modals')\n    <x-dialog id=\"permission-modal\" :title=\"__('campaigns.roles.modals.details.title')\">\n        <p class=\"m-0\">\n            {!! __('campaigns.roles.modals.details.entities') !!}\n        </p>\n        <ul>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.read') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.read') }}\n            </li>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.edit') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.edit') }}\n            </li>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.add') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.add') }}\n            </li>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.delete') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.delete') }}\n            </li>\n            <li>\n                <code>{{ __('entities.articles') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.articles') }}\n            </li>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.permission') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.permission') }}\n            </li>\n        </ul>\n\n        <p class=\"m-0\">\n            {!! __('campaigns.roles.modals.details.campaign') !!}\n        </p>\n\n        <ul>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.manage') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.manage') }}\n            </li>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.dashboard') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.dashboard') }}\n            </li>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.members') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.members') }}\n            </li>\n        </ul>\n\n\n        <p class=\"m-0\">\n            {!! __('sidebar.gallery') !!}\n        </p>\n\n        <ul>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.gallery.manage') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.gallery.manage') }}\n            </li>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.gallery.browse') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.gallery.browse') }}\n            </li>\n            <li>\n                <code>{{ __('campaigns.roles.permissions.actions.gallery.upload') }}</code>\n                {{ __('campaigns.roles.permissions.helpers.gallery.upload') }}\n            </li>\n        </ul>\n\n        <p class=\"m-0\">\n            <a href=\"https://www.youtube.com/watch?v=ikNPzNgjYmg\" target=\"_blank\" class=\"inline-block py-5\">\n                {{ __('campaigns.roles.modals.details.more') }}\n            </a>\n        </p>\n    </x-dialog>\n@endsection\n\n@section('styles')\n    <!-- Needed to show the icons instead of the checkbox input fields -->\n    <link href=\"/vendor/pretty-checkbox/pretty-checkbox.min.css\" rel=\"stylesheet\">\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/roles/users/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n<x-forms.field field=\"user\" required :label=\"__('campaigns.members.fields.name')\">\n\n    <x-forms.select name=\"user_id\" :options=\"$campaign->membersList($role->users->pluck('user_id')->toArray())\" class=\"w-full select2\" />\n</x-forms.field>\n\n@if($role->isAdmin())\n    <x-alert type=\"warning\">\n        <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n        <p>\n            {!! __('campaigns/roles.warnings.adding-to-admin', ['name' => $role->name, 'amount' => '<strong>15</strong>']) !!}\n        </p>\n    </x-alert>\n@endif\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/campaigns/roles/users/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns.roles.users.create.title', ['name' => $role->name]),\n    'breadcrumbs' => [\n        ['url' => route('overview', $campaign), 'label' => __('entities.campaign')],\n        ['url' => route('campaign_roles.index', $campaign), 'label' => __('campaigns.show.tabs.roles')],\n        ['url' => route('campaign_roles.show', [$campaign, $role]), 'label' => $role->name],\n    ]\n])\n\n@section('content')\n    @include('partials.errors')\n\n    <x-form :action=\"['campaign_roles.campaign_role_users.store', $campaign, 'campaign_role' => $role]\">\n\n    @include('partials.forms.form', [\n        'title' => __('campaigns.roles.users.actions.add'),\n        'content' => 'campaigns.roles.users._form',\n        'submit' => __('campaigns.roles.users.actions.add'),\n    ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/roles.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => trans('campaigns.roles.title', ['name' => $campaign->name]),\n    'breadcrumbs' => [\n        trans('campaigns.show.tabs.roles')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n    <div class=\"flex flex-col gap-5\">\n        @include('campaigns.roles.index')\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/share/setup.blade.php",
    "content": "@php\n    $shareTranslations = [\n        'title'                  => __('campaigns/share.title'),\n        'status_private'         => __('campaigns/share.status.private'),\n        'status_public'          => __('campaigns/share.status.public'),\n        'status_unlisted'        => __('campaigns.visibilities.titles.unlisted'),\n        'helper_private'         => __('campaigns/share.helpers.private_explanation'),\n        'helper_public'          => __('campaigns/share.helpers.public_explanation'),\n        'helper_unlisted'        => __('campaigns/share.helpers.unlisted_explanation'),\n        'label_member_link'      => __('campaigns/share.labels.member_link'),\n        'label_public_link'      => __('campaigns/share.labels.public_link'),\n        'btn_make_public'        => __('campaigns/share.buttons.make_public'),\n        'btn_copy_public_link'   => __('campaigns/share.buttons.copy_public_link'),\n        'btn_change_visibility'  => __('campaigns/share.buttons.change_visibility'),\n        'btn_copy'               => __('campaigns/share.buttons.copy'),\n        'btn_close'              => __('crud.actions.close'),\n        'success_copied_public'  => __('campaigns/share.success.copied_public'),\n        'success_copied_members' => __('campaigns/share.success.copied_members'),\n        'error_generic'          => __('errors.500.body.1'),\n    ];\n@endphp\n\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/share.title'),\n])\n\n@section('content')\n\n<div id=\"campaign-share-container\">\n    <campaign-share-modal\n        initial-visibility=\"{{ $campaign->visibility_id->name }}\"\n        url=\"{{ route('dashboard', $campaign) }}\"\n        save-endpoint=\"{{ route('campaign.share.save', $campaign) }}\"\n        settings-url=\"{{ route('campaign-visibility', $campaign) }}\"\n        :trans='@json($shareTranslations)'\n    ></campaign-share-modal>\n</div>\n\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/show.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */?>\n@extends('layouts.app', [\n    'title' => __('campaigns.show.title', ['name' => $campaign->name]),\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('og')\n    <meta property=\"og:description\" content=\"{{ $campaign->preview() }}\" />\n    @if ($campaign->image)<meta property=\"og:image\" content=\"{{ Img::crop(280, 280)->url($campaign->image)  }}\" />\n    <meta property=\"og:image:width\" content=\"280\" />\n    <meta property=\"og:image:height\" content=\"280\" />@endif\n    <meta property=\"og:url\" content=\"{{ route('overview', $campaign)  }}\" />\n@endsection\n\n@section('content')\n    @include('partials.errors')\n    @include('ads.top')\n\n    <div class=\"flex gap-5 flex-col\">\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"inline-block text-2xl\">\n                {!! $campaign->name !!}\n            </h1>\n\n            <div class=\"flex gap-2\">\n                @can('update', $campaign)\n                    <a href=\"{{ route('campaigns.edit', $campaign) }}\" class=\"btn2 \" title=\"{{ __('campaigns.show.actions.edit') }}\">\n                        <x-icon class=\"edit\" />\n                        {{ __('campaigns.show.actions.edit') }}\n                    </a>\n                @endcan\n                @can('member', $campaign)\n                    <div class=\"dropdown\">\n                        <button type=\"button\" class=\"btn2\" data-dropdown\n                                aria-expanded=\"false\">\n                            <x-icon class=\"fa-regular fa-ellipsis-h\" />\n                            <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n                        </button>\n                        <div class=\"dropdown-menu hidden\" role=\"menu\">\n                            <x-dropdowns.item\n                                link=\"#\"\n                                css=\"text-error-content hover:bg-error\"\n                                :dialog=\"route('campaign.leave', $campaign)\"\n                                icon=\"fa-regular fa-person-walking \">\n                                {{ __('campaigns.leave.action') }}\n                            </x-dropdowns.item>\n                        </div>\n                    </div>\n                @endcan\n            </div>\n        </div>\n\n        @include('campaigns._overview')\n\n        @can('update', $campaign)\n            @if(!$campaign->isPrivate() && $campaign->publicHasNoVisibility())\n                <x-alert type=\"warning\">\n                    <p>{!! __('campaigns.helpers.public_no_visibility', [\n                    'public' => $campaign->publicRole->name,\n'fix' => '<a href=\"' . route('campaigns.campaign_roles.public', $campaign) . '\">' . __('crud.fix-this-issue') . '</a>'\n]) !!}</p>\n                </x-alert>\n            @endif\n        @endcan\n\n        <div class=\"flex flex-col gap-2\">\n            <x-box class=\"rounded-xl\">\n                @if (auth()->check() && auth()->user()->can('update', $campaign) && empty($campaign->entry))\n                    <a href=\"{{ route('campaigns.edit', $campaign) }}\" class=\"text-link\">\n                        {{ __('campaigns.helpers.no_entry') }}\n                    </a>\n                @else\n                <div class=\"entity-content\">\n                    {!! $campaign->parsedEntry() !!}\n                </div>\n                @endif\n            </x-box>\n\n            <div class=\"entity-modification-history\">\n                <div class=\"help-block text-right italic text-xs\">\n                    @if (!empty($campaign->created_at) && !empty($campaign->updated_at))\n                    {!! __('crud.history.created_date_clean', [\n                        'date' => '<span data-toggle=\"tooltip\" data-title=\"' . $campaign->created_at . ' UTC' . '\">' . $campaign->created_at->diffForHumans() . '</span>'\n                    ]) !!}. {!! __('crud.history.updated_date_clean', [\n                        'date' => '<span data-toggle=\"tooltip\" data-title=\"' . $campaign->updated_at . ' UTC' . '\">' . $campaign->updated_at->diffForHumans() . '</span>'\n                    ]) !!}\n                    @endif\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n\n\n@section('modals')\n    @parent\n\n    <x-dialog id=\"leave-confirm\" :loading=\"true\" />\n\n\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/sidebar/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */?>\n@extends('layouts.app', [\n    'title' => __('campaigns.show.tabs.sidebar') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.sidebar')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n\n    <div class=\"flex gap-5 flex-col\">\n        @include('partials.errors')\n\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"inline-block text-2xl\">\n                {{ __('campaigns.show.tabs.sidebar') }}\n            </h1>\n\n            <x-learn-more url=\"features/campaigns/sidebar.html\" />\n        </div>\n\n        @if (!$campaign->boosted())\n            <x-premium-cta :campaign=\"$campaign\">\n                <p>\n                    {{ __('campaigns/sidebar.call-to-action') }}\n                </p>\n            </x-premium-cta>\n        @else\n            <p>\n                {!! __('campaigns/sidebar.helpers.reordering')  !!} {!! __('campaigns/sidebar.helpers.bookmarks', ['position' => '<strong>' . __('bookmarks.fields.position') . '</strong>'])  !!}\n            </p>\n\n        <x-form :action=\"['campaign-sidebar-save', $campaign]\" class=\"sidebar-setup form-inline form-mobile-inline flex flex-col gap-4\">\n        <x-box>\n            <x-grid type=\"1/1\">\n            <ul class=\"list-none m-0 p-0 flex flex-col gap-2 sidebar-sortable nested-sortable\">\n            @foreach ($layout as $name => $setup)\n                <li class=\"flex md:items-center flex-wrap @if (isset($setup['fixed'])) fixed-position @endif\" id=\"{{ $name }}\">\n                    <p class=\"text-neutral-content text-xs basis-full mb-0 visible md:hidden\">({{ $setup['label'] ?? __($setup['label_key']) }})</p>\n\n                    <div class=\"flex flex-col md:flex-row items-center gap-2\">\n                        <div class=\"flex gap-2\">\n                            <span class=\"bg-base-300 p-2 w-10 rounded dnd-handle cursor-move flex-none text-center\">\n                                <x-icon class=\"inline-block {{ $setup['custom_icon'] ?? $setup['icon'] }}\" />\n                            </span>\n                            <input type=\"text\" class=\"w-20 lg:w-40\" name=\"{{ $name }}_icon\" value=\"{{ $setup['custom_icon'] ?? null }}\" placeholder=\"{{ $setup['icon'] }}\" maxlength=\"50\" data-paste=\"fontawesome\" />\n                        </div>\n                        <input type=\"text\" class=\"w-40 lg:w-80\" name=\"{{ $name }}_label\" value=\"{!! $setup['custom_label'] ?? null !!}\" placeholder=\"{{ $setup['label'] ?? __($setup['label_key'])  }}\" maxlength=\"90\" />\n                        <span class=\"text-neutral-content text-xs hidden md:inline!\">( {{ $setup['label'] ?? __($setup['label_key']) }} )</span>\n                        <input type=\"hidden\" name=\"order[{{ $name }}]\" value=\"1\" />\n                    </div>\n\n                    @if (empty($setup['children']))\n                        @continue\n                    @endif\n\n                    <input type=\"hidden\" name=\"order[{{ $name }}_start]\" value=\"1\" />\n                    <input type=\"hidden\" name=\"section_{{ $name }}_start\" value=\"1\" />\n                    <ul class=\"list-none mt-2 m-0 p-0 pl-4 sidebar-sortable nested-sortable basis-full flex flex-col gap-2\">\n                        @foreach ($setup['children'] as $childName => $child)\n                            <li class=\"flex md:items-center flex-wrap @if (\\Illuminate\\Support\\Arr::get($child, 'disabled') === true) alert-warning @endif\" id=\"{{ $childName }}\">\n                                <p class=\"text-neutral-content text-xs visible md:hidden mb-0 basis-full\">({{ $child['label'] ?? __($child['label_key'])}})</p>\n\n                                <div class=\"flex flex-col md:flex-row items-center gap-2\">\n                                    <div class=\"flex gap-2\">\n                                        <span class=\"bg-base-300 p-2 w-10 text-center flex-none rounded dnd-handle cursor-move\">\n                                            <x-icon class=\"inline-block w-6 {{ $child['custom_icon'] ?? $child['icon'] ?? 'fa-regular fa-question-circle' }}\" />\n                                        </span>\n                                        <input type=\"text\" class=\"w-20 lg:w-40\" name=\"{{ $childName }}_icon\" value=\"{{ $child['custom_icon'] ?? null }}\" placeholder=\"{{ $child['icon'] ?? null }}\" data-paste=\"fontawesome\" maxlength=\"50\" />\n                                    </div>\n                                    <input type=\"text\" class=\"w-40 lg:w-80\" name=\"{{ $childName }}_label\" value=\"{!! $child['custom_label'] ?? null !!}\" placeholder=\"{{ $child['label'] ?? __($child['label_key']) }}\" maxlength=\"90\" />\n                                    <span class=\"hidden md:flex text-neutral-content text-xs\">\n                                        ( {{ $child['label'] ?? __($child['label_key']) }}\n                                        @if (\\Illuminate\\Support\\Arr::get($child, 'disabled') === true)\n                                            <i class=\"fa-regular fa-exclamation-triangle\" aria-hidden=\"true\" data-toggle=\"tooltip\" data-title=\"{{ __('campaigns/categories.errors.permission-disabled') }}\"></i>\n                                        @endif\n                                        )\n                                    </span>\n                                </div>\n                                <input type=\"hidden\" name=\"order[{{ $childName }}]\" value=\"1\" />\n                            </li>\n                        @endforeach\n                    </ul>\n                    <input type=\"hidden\" name=\"order[{{ $name }}_end]\" value=\"1\" />\n                    <input type=\"hidden\" name=\"section_{{ $name }}_end\" value=\"1\" />\n                </li>\n            @endforeach\n            </ul>\n            </x-grid>\n\n\n        </x-box>\n            <div class=\"sticky bottom-4 z-50 flex justify-between\">\n                <a href=\"#\" class=\"btn2 btn-error\" data-toggle=\"dialog\" data-target=\"reset-confirm\">\n                    <x-icon class=\"trash\" />\n                    {{ __('campaigns/sidebar.actions.reset') }}\n                </a>\n                <button type=\"submit\" class=\"btn2 btn-primary\">\n                    <x-icon class=\"save\" />\n                    {{ __('crud.save') }}\n                </button>\n            </div>\n        </x-form>\n        @endif\n    </div>\n\n@endsection\n\n@section('modals')\n\n    <x-form method=\"DELETE\" :action=\"['campaign-sidebar-reset', $campaign]\">\n    <x-dialog id=\"reset-confirm\" :title=\"__('campaigns/sidebar.reset.title')\">\n        <p>{{ __('campaigns/sidebar.reset.warning') }}</p>\n\n        <div class=\"grid grid-cols-2 gap-2 w-full\">\n            <x-buttons.confirm type=\"ghost\" full=\"true\" dismiss=\"dialog\">\n                {{ __('crud.cancel') }}\n            </x-buttons.confirm>\n\n                <x-buttons.confirm type=\"danger\" full=\"true\" outline=\"true\">\n                    {{ __('crud.actions.confirm') }}\n                </x-buttons.confirm>\n        </div>\n    </x-dialog>\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/stats/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */?>\n@extends('layouts.app', [\n    'title' => __('campaigns/stats.title2') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.stats')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n    @include('ads.top')\n\n    <div class=\"flex gap-5 flex-col\">\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                {!! __('campaigns/stats.title2') !!}\n            </h1>\n        </div>\n\n            <p>\n                {{ __('campaigns/stats.tutorial', ['amount' => 24]) }}\n            </p>\n\n        <x-grid>\n\n            <div class=\"flex flex-col gap-5 stats-entities\">\n                <h3 class=\"text-xl font-light\">{{ __('campaigns/categories.tab') }}</h3>\n                <x-box>\n                    <div class=\"grid grid-cols-2 gap-2 items-center\">\n                        <div class=\"entity-total font-bold\">\n                            {{ __('campaigns/stats.fields.entries') }}\n                        </div>\n                        <div class=\"entity-count font-bold\">\n                            {{ \\Illuminate\\Support\\Number::format($stats['entities']) }}\n                        </div>\n                        <hr class=\"col-span-2\" />\n                        @foreach ($stats['types'] as $type => $count)\n                            @if (!\\Illuminate\\Support\\Arr::has($entityTypes, $type))\n                                @continue\n                            @endif\n                            <div class=\"entity-type\" data-type=\"{{ $type }}\">\n                                {{ $entityTypes[$type]->plural() }}\n                            </div>\n                            <div class=\"entity-count\">\n                                {!! \\Illuminate\\Support\\Number::format($count) !!}\n                            </div>\n                        @endforeach\n                    </div>\n                </x-box>\n            </div>\n\n            <div class=\"flex flex-col gap-5\">\n                <div class=\"flex flex-col gap-5 stats-modules\">\n                    <h3 class=\"text-xl font-light\">{{ __('campaigns/modules.sections.features') }}</h3>\n                    <x-box>\n                        <div class=\"grid grid-cols-2 gap-2 items-center\">\n                            @foreach ($stats['modules'] as $module => $count)\n                                <div class=\"module-type\" data-type=\"{{ $module }}\">\n                                    {{ __('entities.' . $module) }}\n                                </div>\n                                <div class=\"entity-count\">\n                                    {!! \\Illuminate\\Support\\Number::format($count) !!}\n                                </div>\n                            @endforeach\n                        </div>\n                    </x-box>\n                </div>\n\n                <div class=\"flex flex-col gap-5 stats-permissions\">\n                    <h3 class=\"text-xl font-light\">{{ __('campaigns/stats.fields.general') }}</h3>\n                    <x-box>\n                        <div class=\"grid grid-cols-2 gap-2 items-center\">\n                            @if ($campaign->creator)\n                                <div class=\"permission-name\">\n                                    {{ __('campaigns/stats.fields.creator') }}\n                                </div>\n                                <div class=\"permission-count\">\n                                    <a href=\"{{ route('users.profile', [$campaign->creator->id]) }}\" class=\"text-link\">\n                                        {!! $campaign->creator->name !!}\n                                    </a>\n                                </div>\n                            @endif\n                            <div class=\"permission-name\">\n                                {{ __('campaigns/stats.fields.created') }}\n                            </div>\n                            <div class=\"permission-count\">\n                                {{ $campaign->created_at->isoFormat('MMMM D, Y') }}\n                            </div>\n                            <div class=\"permission-name\">\n                                {{ __('campaigns.fields.followers') }}\n                            </div>\n                            <div class=\"permission-count\">\n                                {{ \\Illuminate\\Support\\Number::format($stats['permissions']['followers']) }}\n                            </div>\n                            <div class=\"permission-name\">\n                                {{ __('campaigns.show.tabs.members') }}\n                            </div>\n                            <div class=\"permission-count\">\n                                {{ \\Illuminate\\Support\\Number::format($stats['permissions']['users']) }}\n                            </div>\n                            <div class=\"permission-name\">\n                                {{ __('campaigns.show.tabs.roles') }}\n                            </div>\n                            <div class=\"permission-count\">\n                                {{ \\Illuminate\\Support\\Number::format($stats['permissions']['roles']) }}\n                            </div>\n\n                            <div class=\"permission-name\">\n                                {{ __('campaigns/stats.fields.words') }}\n                            </div>\n                            <div class=\"permission-count\">\n                                {{ \\Illuminate\\Support\\Number::format(\\Illuminate\\Support\\Arr::get($stats, 'words.total', 0)) }}\n                            </div>\n\n                            <div class=\"permission-name\">\n                                {{ __('campaigns/stats.fields.from-entities') }}\n                            </div>\n                            <div class=\"permission-count\">\n                                {{ \\Illuminate\\Support\\Number::format(\\Illuminate\\Support\\Arr::get($stats, 'words.entities', 0)) }}\n                            </div>\n                            <div class=\"permission-name\">\n                                {{ __('campaigns/stats.fields.from-posts') }}\n                            </div>\n                            <div class=\"permission-count\">\n                                {{ \\Illuminate\\Support\\Number::format(\\Illuminate\\Support\\Arr::get($stats, 'words.posts', 0)) }}\n                            </div>\n                            <div class=\"permission-name\">\n                                {{ __('campaigns/stats.fields.from-elements') }}\n                            </div>\n                            <div class=\"permission-count\">\n                                {{ \\Illuminate\\Support\\Number::format(\\Illuminate\\Support\\Arr::get($stats, 'words.elements', 0)) }}\n                            </div>\n                        </div>\n                    </x-box>\n                </div>\n            </div>\n        </x-grid>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/styles/_form-footer.blade.php",
    "content": "<div class=\"submit-group\">\n    <input id=\"submit-mode\" type=\"hidden\" value=\"true\"/>\n    <div class=\"join\">\n        <button class=\"btn2 btn-primary join-item\" id=\"form-submit-main\">\n            {{ __('crud.save') }}\n        </button>\n        <div class=\"dropdown\">\n            <button type=\"button\" class=\"btn2 btn-primary join-item\" data-dropdown\n                    aria-expanded=\"false\">\n                <x-icon class=\"fa-solid fa-caret-down\" />\n                <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n            </button>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\">\n                    {{ __('crud.save') }}\n                </x-dropdowns.item>\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'submit-update']\">\n                    {{ __('crud.save_and_update') }}\n                </x-dropdowns.item>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/styles/_form.blade.php",
    "content": "<x-forms.field\n    field=\"name\"\n    required\n    :label=\"__('campaigns/styles.fields.name')\">\n    <input type=\"text\" name=\"name\" placeholder=\"{{ __('campaigns/styles.placeholders.name') }}\" maxlength=\"191\" required value=\"{!! htmlspecialchars(old('name', $style->name ?? null)) !!}\" data-1p-ignore=\"true\" />\n</x-forms.field>\n\n<x-forms.field\n    field=\"content\"\n    required\n    :label=\"__('campaigns/styles.fields.content')\"\n    :helper=\"__('campaigns.helpers.css')\">\n    <textarea name=\"content\" id=\"css\" class=\"codemirror\" spellcheck=\"false\">{!! old('content', $style->content ?? null) !!}</textarea>\n</x-forms.field>\n\n<x-forms.field field=\"enabled\" :label=\" __('campaigns/styles.fields.is_enabled')\">\n    <input type=\"hidden\" name=\"is_enabled\" value=\"0\" />\n    <x-checkbox :text=\"__('campaigns/styles.helpers.is_enabled')\">\n        <input type=\"checkbox\" name=\"is_enabled\" value=\"1\" @if (old('is_enabled', $style->is_enabled ?? true)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/campaigns/styles/_preview.blade.php",
    "content": "<h2 class=\"\">Preview</h2>\n<div class=\"grid grid-cols-4 gap-2\">\n    <a href=\"#\" class=\"btn2\">\n        Default\n    </a>\n    <a href=\"#\" class=\"btn2 btn-primary\">\n        Primary\n    </a>\n    <a href=\"#\" class=\"btn2 btn-secondary\">\n        Secondary\n    </a>\n    <a href=\"#\" class=\"btn2 btn-accent\">\n        Accent\n    </a>\n\n    <a href=\"#\" class=\"btn2 btn-info\">\n        Info\n    </a>\n    <a href=\"#\" class=\"btn2 btn-success\">\n        Success\n    </a>\n    <a href=\"#\" class=\"btn2 btn-warning\">\n        Warning\n    </a>\n    <a href=\"#\" class=\"btn2 btn-error\">\n        Error\n    </a>\n\n    <div class=\"badge\">Default</div>\n    <div class=\"badge badge-primary\">Primary</div>\n    <div class=\"badge badge-secondary\">Secondary</div>\n    <div class=\"badge badge-accent\">Accent</div>\n\n    <div class=\"col-span-2 flex flex-col gap-5\">\n        <div class=\"nav-tabs-custom\">\n            <div class=\"flex gap-2 items-center \">\n                <div class=\"grow overflow-x-auto\">\n                    <ul class=\"nav-tabs flex inline-flex items-stretch w-full\" role=\"tablist\">\n                        <x-tab.tab target=\"entry\" title=\"Tab\"></x-tab.tab>\n                        <x-tab.tab target=\"entry\" :default=\"true\" title=\"Tab\"></x-tab.tab>\n                        <x-tab.tab target=\"entry\" title=\"Tab\"></x-tab.tab>\n                    </ul>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"dropdown\">\n            <button type=\"button\" class=\"btn2 btn-sm\" data-dropdown\n                    aria-expanded=\"false\">\n                <x-icon class=\"fa-solid fa-caret-down\" />\n                <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n                Dropdown menu\n            </button>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                <x-dropdowns.item link=\"#\">\n                    Action 1\n                </x-dropdowns.item>\n                <x-dropdowns.item link=\"#\">\n                    Action 2\n                </x-dropdowns.item>\n                <x-dropdowns.divider />\n                <x-dropdowns.item link=\"#\" css=\"text-error-content hover:bg-error\">\n                    Action 3\n                </x-dropdowns.item>\n            </div>\n        </div>\n\n        <span class=\"btn2 btn-link btn-sm\" data-toggle=\"tooltip-demo\">Hover me tooltip</span>\n    </div>\n\n    <div class=\"col-span-2 bg-box p-4 rounded\">\n        <p>Rutrum adipiscing enim pellentesque mi <a href=\"#\">link</a> eget amet nisl dolor maecenas adipiscing diam orci commodo suspendisse tincidunt tristique gravida leo arcu condimentum <span class=\"attribute inline-block\">attribute mention</span> nunc.</p>\n    </div>\n\n    <div class=\"col-span-2 bg-box p-4 rounded\">\n        <p>Rutrum adipiscing enim pellentesque mi rutrum lacus eget amet nisl dolor maecenas adipiscing diam orci commodo suspendisse tincidunt tristique gravida leo arcu condimentum fusce nunc.</p>\n        <p>Ipsum condimentum placerat tincidunt nunc facilisis eu sollicitudin phasellus metus arcu nec quam quam quam tincidunt leo ipsum scelerisque orci tristique quam aliquam adipiscing a.</p>\n    </div>\n    <div class=\"bg-base-200 p-4 rounded\">\n        <p>Vel ac commodo placerat enim lacus facilisis nisl tincidunt quisque accumsan portaest nunc aliquam tortor nunc gravida bibendum placerat tristique metus proin phasellus rutrum eget.</p>\n    </div>\n    <div class=\"bg-base-300 p-4 rounded\">\n        <p>Nulla purus dolor consectetur lorem maecenas nunc portaest euismod ex interdum maximus consectetur arcu cursus varius aliquam suspendisse vel interdum erat ac metus nec suspendisse.</p>\n    </div>\n\n    <div class=\"col-span-2 field-default\">\n        <input type=\"text\" class=\"w-full\" value=\"Default\" placeholder=\"Placeholder\" />\n    </div>\n    <div class=\"col-span-2 field-select\">\n        <select class=\"select2\">\n            <option>Option</option>\n        </select>\n    </div>\n\n    <div class=\"col-span-2\">\n        <h1 class=\"text-2xl\">Heading 1</h1>\n        <h2 class=\"text-xl\">Heading 2</h2>\n        <h3 class=\"text-lg\">Heading 3</h3>\n        <h4>Heading 4</h4>\n        <h5>Heading 5</h5>\n        <h6>Heading 6</h6>\n    </div>\n    <div class=\"col-span-2\">\n        <x-box :padding=\"0\">\n            <x-menu>\n                <x-menu>\n                    <x-menu.element\n                        :active=\"true\"\n                        route=\"#\"\n                    >\n                        Menu item 1\n                    </x-menu.element>\n                    <x-menu.element\n                        route=\"#\"\n                        :badge=\"2\"\n                    >\n                        Menu item 1\n                    </x-menu.element>\n                    <x-menu.element\n                        route=\"#\"\n                    >\n                        Menu item 3\n                    </x-menu.element>\n                </x-menu>\n            </x-menu>\n        </x-box>\n    </div>\n\n\n    <div class=\"col-span-2\">\n        <x-alert type=\"success\">\n            Success alert\n        </x-alert>\n    </div>\n    <div class=\"col-span-2\">\n        <x-alert type=\"info\">\n            Information alert\n        </x-alert>\n    </div>\n    <div class=\"col-span-2\">\n        <x-alert type=\"error\">\n            Error alert\n        </x-alert>\n    </div>\n    <div class=\"col-span-2\">\n        <x-alert type=\"warning\">\n            Warning alert\n        </x-alert>\n    </div>\n\n    <div class=\"col-span-4\">\n        <pre><code><strong>Pre</strong> Vel ac commodo placerat enim lacus facilisis nisl tincidunt quisque accumsan portaest nunc aliquam tortor nunc gravida bibendum placerat tristique metus proin phasellus rutrum eget.</code>\n        </pre>\n    </div>\n    <div class=\"col-span-4 bg-box p-2 rounded\">\n        <blockquote class=\"\"><strong>Blockquote</strong> Vel ac commodo placerat enim lacus facilisis nisl tincidunt quisque accumsan portaest nunc aliquam tortor nunc gravida bibendum placerat tristique metus proin phasellus rutrum eget.\n        </blockquote>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/campaigns/styles/_reorder.blade.php",
    "content": "<x-form :action=\"['campaign_styles.reorder-save', $campaign]\">\n<div class=\"flex flex-col gap-5\">\n    <h3 class=\"text-xl font-light\">\n        {{ __('campaigns/styles.reorder.title') }}\n    </h3>\n    <div class=\"box-entity-story-reorder flex flex-col gap-5\">\n        <div class=\"element-live-reorder sortable-elements flex flex-col gap-1\">\n            @foreach($reorderStyles as $style)\n                <x-reorder.child :id=\"$style->id\">\n                    <input type=\"hidden\" name=\"style[]\" value=\"{{ $style->id }}\"/>\n                    <div class=\"\">\n                        <span class=\"fa-regular fa-ellipsis-v\"></span>\n                    </div>\n                    <div class=\"name overflow-hidden grow\">\n                        {!! $style->name !!}\n                    </div>\n                    <div class=\"self-end\">\n                        @if ($style->is_enabled) <x-icon class=\"fa-solid fa-check-circle\" />@endif\n                    </div>\n                </x-reorder.child>\n            @endforeach\n        </div>\n        <div class=\"\">\n            <button class=\"btn2 btn-primary btn-block\">\n                {{ __('campaigns/styles.reorder.save') }}\n            </button>\n        </div>\n    </div>\n</div>\n</x-form>\n"
  },
  {
    "path": "resources/views/campaigns/styles/builder.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/builder.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        ['url' => route('campaign_styles.index', $campaign), 'label' => __('campaigns.show.tabs.styles')],\n        __('campaigns/builder.title')\n    ],\n    'mainTitle' => '',\n    'sidebar' => 'campaign',\n])\n\n@section('content')\n\n    <div class=\"max-w-4xl\">\n        <x-grid type=\"1/1\">\n            <x-alert type=\"info\">\n                <p class=\"m-0\">\n                    {!! __('campaigns/builder.help', [\n                    'docs' => '<a target=\"_blank\" href=\"https://docs.kanka.io/en/latest/features/campaigns/theme-builder.html\">' . __('footer.documentation') . '</a>'\n                ]) !!}\n            </x-alert>\n\n            <x-form :action=\"['campaign_styles.builder-save', $campaign]\" id=\"theme-builder\">\n\n            @include('partials.errors')\n            <x-box>\n                <div class=\"grid grid-cols-2 gap-4\">\n                    <div class=\"grid gap-2\">\n                        <div class=\"flex items-center gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-primary\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"p\" />\n                            Primary\n                        </div>\n                        <div class=\"flex items-center gap-2 \">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-secondary\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"s\" />\n                            Secondary\n                        </div>\n                        <div class=\"flex items-center gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-accent\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"a\" />\n                            Accent\n                        </div>\n                        <div class=\"flex gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-neutral\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"n\" />\n                            <div class=\"wrap-break-word\">\n                                <p class=\"m-0\">Neutral </p>\n                                <x-helper>\n                                    <p>Used for tooltips, default tags and calendar weather</p>\n                                </x-helper>\n                            </div>\n                        </div>\n                        <div class=\"flex gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-base-100\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"b\" />\n                            <div class=\"wrap-break-word\">\n                                <p class=\"m-0\">Content </p>\n                                <x-helper>\n                                    <p>Used for menus, boxes, panels, forms. Its contrast is used as the main text colour.</p>\n                                </x-helper>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"grid gap-2\">\n                        <div class=\"flex items-center gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-info\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" id=\"picker-info\" data-target=\"in\" />\n                            Information alert\n                        </div>\n                        <div class=\"flex items-center gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-success\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"su\" />\n                            Success alert\n                        </div>\n                        <div class=\"flex items-center gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-warning\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"wa\" />\n                            Warning alert\n                        </div>\n                        <div class=\"flex items-center gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border !bg-error\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"er\" />\n                            Error alert\n                        </div>\n                        <div class=\"flex items-center gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border bg-wrapper\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"w\" />\n                            Main background colour\n                        </div>\n                        <div class=\"flex items-center gap-2\">\n                            <input type=\"text\" class=\"picker rounded flex-none h-6 w-6 cursor-pointer border bg-sidebar\" data-toggle=\"tooltip\" data-title=\"Click me to change the colour\" data-target=\"si\" />\n                            Campaign sidebar\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"mt-5 flex gap-2 md:gap-5\">\n                    <div class=\"grow\">\n                        @if (request()->ajax())\n                            <button type=\"button\" class=\"btn2 btn-ghost btn-full\" data-dismiss=\"modal\">\n                                {{ __('crud.cancel') }}\n                            </button>\n                        @else\n                            <a href=\"{{ (!empty($cancel) ? $cancel : url()->previous()) }}\" class=\"btn2 btn-ghost\">\n                                {{ __('crud.cancel') }}\n                            </a>\n                        @endif\n\n                        @if (!empty($config))\n                            <x-button.delete-confirm target=\"#delete-reset\" :text=\"__('crud.actions.reset')\" />\n                        @endif\n                    </div>\n                    <button class=\"btn2 btn-primary join-item\" id=\"form-submit-main\">\n                        {{ __('crud.save') }}\n                    </button>\n                </div>\n            </x-box>\n\n\n            <div class=\"hidden\">\n                <textarea id=\"field-theme\" name=\"config\">{!! $config !!}</textarea>\n            </div>\n            </x-form>\n\n            @if(!empty($config))\n                <x-form method=\"DELETE\" :action=\"['campaign_styles.builder-reset', $campaign]\" id=\"delete-reset\" />\n            @endif\n\n            @include('campaigns.styles._preview')\n        </div>\n    </x-grid>\n@endsection\n\n\n@section('scripts')\n    @parent\n    @vite('resources/js/campaigns/theme-builder.js')\n@endsection\n\n@section('styles')\n    @parent\n    <style>\n        .box-default {\n            --tw-border-opacity: 1;\n            border-color:hsl(var(--b2)/var(--tw-border-opacity));\n            --tw-bg-opacity: 1;\n            background-color:hsl(var(--b2)/var(--tw-bg-opacity));\n            color:hsl(var(--bc)/var(--tw-text-opacity));\n        }\n        .box-primary {\n            --tw-border-opacity: 1;\n            border-color:hsl(var(--pf)/var(--tw-border-opacity));\n            --tw-bg-opacity: 1;\n            background-color:hsl(var(--pf)/var(--tw-bg-opacity));\n            color:hsl(var(--pc)/var(--tw-text-opacity));\n        }\n        .box-accent {\n            --tw-border-opacity: 1;\n            border-color:hsl(var(--af)/var(--tw-border-opacity));\n            --tw-bg-opacity: 1;\n            background-color:hsl(var(--af)/var(--tw-bg-opacity));\n            color:hsl(var(--ac)/var(--tw-text-opacity));\n        }\n    </style>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/styles/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/styles.create.title', ['name' => $campaign->name]),\n    'breadcrumbs' => [\n        ['url' => route('campaign_styles.index', $campaign), 'label' => __('campaigns.show.tabs.styles')]\n    ],\n    'sidebar' => 'campaign',\n])\n\n@section('content')\n\n    <x-form :action=\"['campaign_styles.store', $campaign]\" id=\"campaign-style\" :extra=\"['data-max-content' => \\App\\Http\\Requests\\StoreCampaignStyle::MAX, 'data-error' => '#max-content-error']\">\n    <x-box>\n        <x-grid type=\"1/1\">\n            @include('partials.errors')\n\n            <x-alert type=\"error\" id=\"max-content-error\" class=\"hidden\">\n                {{ __('campaigns/styles.errors.max_content', ['amount' => \\Illuminate\\Support\\Number::format(\\App\\Http\\Requests\\StoreCampaignStyle::MAX)]) }}\n            </x-alert>\n\n            @include('campaigns.styles._form')\n        </x-grid>\n\n        <x-dialog.footer>\n            @include('campaigns.styles._form-footer')\n        </x-dialog.footer>\n    </x-box>\n    </x-form>\n@endsection\n\n\n@section('scripts')\n    @parent\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/lib/codemirror.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/mode/css/css.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/hint/show-hint.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/hint/css-hint.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/search/search.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/search/searchcursor.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/dialog/dialog.js\"></script>\n@endsection\n\n@section('styles')\n    @parent\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/codemirror/lib/codemirror.css\">\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/hint/show-hint.css\">\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/dialog/dialog.css\">\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/codemirror/theme/dracula.css\">\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/styles/edit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/styles.update.title', ['name' => $campaign->name]),\n    'breadcrumbs' => [\n        ['url' => route('campaign_styles.index', $campaign), 'label' => __('campaigns.show.tabs.styles')]\n    ],\n    'sidebar' => 'campaign',\n])\n\n@section('content')\n    <x-form :action=\"['campaign_styles.update', $campaign, $style]\" method=\"PATCH\" id=\"campaign-style\" :extra=\"['data-max-content' => \\App\\Http\\Requests\\StoreCampaignStyle::MAX, 'data-error' => '#max-content-error']\">\n        <x-box>\n            <x-grid type=\"1/1\">\n                @include('partials.errors')\n\n                <x-alert type=\"error\" id=\"max-content-error\" class=\"hidden\">\n                    {{ __('campaigns/styles.errors.max_content', ['amount' => \\Illuminate\\Support\\Number::format(\\App\\Http\\Requests\\StoreCampaignStyle::MAX)]) }}\n                </x-alert>\n\n                @include('campaigns.styles._form')\n            </x-grid>\n            <x-dialog.footer>\n                @include('campaigns.styles._form-footer')\n            </x-dialog.footer>\n        </x-box>\n    </x-form>\n@endsection\n\n@section('scripts')\n    @parent\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/lib/codemirror.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/mode/css/css.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/hint/show-hint.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/hint/css-hint.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/search/search.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/search/searchcursor.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/dialog/dialog.js\"></script>\n@endsection\n\n@section('styles')\n    @parent\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/codemirror/lib/codemirror.css\">\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/hint/show-hint.css\">\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/codemirror/addon/dialog/dialog.css\">\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/codemirror/theme/dracula.css\">\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/styles/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\CampaignStyle $style */\nuse App\\Facades\\Datagrid ?>\n@extends('layouts.app', [\n    'title' => __('campaigns/styles.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        __('campaigns.show.tabs.styles')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n\n    <div class=\"flex gap-5 flex-col\">\n        <div class=\"flex gap-2 justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('campaigns.show.tabs.styles') }}\n            </h1>\n            <div class=\"flex gap-2 flex-wrap items-center justify-end\">\n                <x-learn-more url=\"features/campaigns/theming.html\" />\n                @if ($campaign->boosted())\n                    <a href=\"{{ route('campaign_styles.builder', $campaign) }}\" class=\"btn2 btn-primary btn-sm\">\n                        <x-icon class=\"fa-regular fa-palette\" />\n                        {{ __('campaigns/styles.actions.builder') }}\n                    </a>\n                    <a href=\"{{ route('campaign_styles.create', $campaign) }}\" class=\"btn2 btn-primary btn-sm\">\n                        <x-icon class=\"plus\" />\n                        {{ __('campaigns/styles.actions.new') }}\n                    </a>\n                @endif\n            </div>\n        </div>\n\n\n        <p>\n            {!! __('campaigns/styles.helpers.tutorial') !!}\n        </p>\n\n        @if (!$campaign->boosted())\n            <x-premium-cta :campaign=\"$campaign\">\n                <p>{!! __('campaigns/styles.pitch') !!}</p>\n            </x-premium-cta>\n        @endif\n\n        <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5\">\n\n            <x-infoBox\n                :title=\"__('campaigns/styles.theme.override')\"\n                :icon=\"!empty($theme) ? 'fa-solid fa-check text-success-content' : 'fa-solid fa-user text-neutral-content'\"\n                :subtitle=\"!empty($theme) ? $theme->__toString() : __('campaigns/styles.theme.none')\"\n                background=\"{{ !empty($theme) ? 'bg-green-200' : 'bg-neutral' }}\"\n                :campaign=\"$campaign\"\n                :url=\"$campaign->boosted() ? route('campaign-theme', $campaign) : null\"\n                :urlTooltip=\"__('campaigns/styles.theme.title')\"\n                ajax\n            ></x-infoBox>\n        </div>\n        @if ($styles->count() === 0)\n            <x-box>\n                <x-helper>\n                    <p>{!! __('campaigns/styles.helpers.main', ['here' => '<a href=\"https://blog.kanka.io/category/tutorials\" target=\"_blank\" class=\"text text-link\">' . __('campaigns/styles.helpers.here') . '</a>']) !!}</p>\n                </x-helper>\n            </x-box>\n        @else\n            @if(Datagrid::hasBulks())\n                <x-form :action=\"['campaign_styles.bulk', $campaign]\" direct>\n                    <div id=\"datagrid-parent\" class=\"table-responsive\">\n                        @include('layouts.datagrid._table', ['rows' => $styles])\n                    </div>\n                </x-form>\n            @else\n                <div id=\"datagrid-parent\" class=\"table-responsive\">\n                    @include('layouts.datagrid._table', ['rows' => $styles])\n                </div>\n            @endif\n        @endif\n\n        @includeWhen($campaign->boosted() && $reorderStyles->count() > 1, 'campaigns.styles._reorder')\n    </div>\n@endsection\n\n\n@section('modals')\n\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms()])\n\n    @include('partials.helper-modal', [\n        'id' => 'theming-help',\n        'title' => __('campaigns.show.tabs.styles'),\n        'textes' => [\n            __('campaigns/styles.helpers.main', ['here' => '<a href=\"https://blog.kanka.io/category/tutorials\" target=\"_blank\">' . __('campaigns/styles.helpers.here') . '</a>']),\n    ]])\n\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/styles/theme.blade.php",
    "content": "<x-dialog.header>\n    {!! __('campaigns/styles.theme.title') !!}\n</x-dialog.header>\n<x-dialog.article>\n    <x-form :action=\"['campaign-theme.save', $campaign]\" class=\"w-full max-w-lg text-left\">\n        <x-forms.field field=\"theme\" :label=\"__('campaigns.fields.theme')\" :helper=\"__('campaigns.helpers.theme')\">\n            <x-forms.select name=\"theme_id\" :options=\"$themes\" :selected=\"$campaign->theme_id ?? null\" />\n        </x-forms.field>\n\n        <x-dialog.footer>\n            <button class=\"btn2 btn-primary\">{{ __('crud.actions.apply') }}</button>\n        </x-dialog.footer>\n    </x-form>\n</x-dialog.article>\n"
  },
  {
    "path": "resources/views/campaigns/webhooks/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-forms.field\n        field=\"action\"\n        required\n        :label=\"__('campaigns/webhooks.fields.event')\"\n        >\n        @php\n            $options= [\\App\\Enums\\WebhookAction::CREATED->value => __('campaigns/webhooks.fields.events.new'),\n            \\App\\Enums\\WebhookAction::EDITED->value => __('campaigns/webhooks.fields.events.edited'),\n            \\App\\Enums\\WebhookAction::DELETED->value => __('campaigns/webhooks.fields.events.deleted'),\n            ];\n        @endphp\n        <x-forms.select name=\"action\" :options=\"$options\" :selected=\"$webhook->action ?? null\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"url\"\n        required\n        :label=\"__('campaigns/webhooks.fields.url')\"\n        >\n        <input type=\"text\" name=\"url\" value=\"{{ old('url', $webhook->url ?? null) }}\" maxlength=\"191\" required class=\"w-full\" placeholder=\"{{ __('campaigns/webhooks.placeholders.url') }}\"/>\n    </x-forms.field>\n\n    <x-forms.field field=\"target\" :label=\"__('campaigns/webhooks.fields.type')\">\n        <select name=\"type\" class=\"\" id=\"webhook-selector\">\n            <option value=\"1\" @if(isset($webhook) && $webhook->type == 1) selected=\"selected\" @endif data-target=\"#webhook-custom\">\n                {{ __('campaigns/webhooks.fields.types.custom') }}\n            </option>\n            <option value=\"2\" @if(isset($webhook) && $webhook->type == 2) selected=\"selected\" @endif>\n                {{ __('campaigns/webhooks.fields.types.payload') }}\n            </option>\n\n        </select>\n    </x-forms.field>\n\n    <div class=\"webhook-subform @if(isset($webhook) && $webhook->type == 2)) hidden @endif\" id=\"webhook-custom\">\n        <x-forms.field\n            field=\"message\"\n            required\n            :label=\"__('campaigns/webhooks.fields.message')\"\n            tooltip\n            :helper=\"__('campaigns/webhooks.helper.message')\"\n            link=\"https://docs.kanka.io/en/latest/features/campaigns/webhooks.html#mappings\"\n            >\n\n            <textarea name=\"message\" class=\"w-full\" rows=\"4\" placeholder=\"{{ __('campaigns/webhooks.placeholders.message') }}\" maxlength=\"400\">{!! old('message', $webhook->message ?? null) !!}</textarea>\n        </x-forms.field>\n    </div>\n\n    <x-forms.field field=\"tags\">\n        <input type=\"hidden\" name=\"save-tags\" value=\"1\" />\n\n        <x-forms.tags\n            :campaign=\"$campaign\"\n            :model=\"$webhook ?? null\"\n            allowClear=\"false\"\n            :dropdownParent=\"$dropdownParent ?? null\"\n        ></x-forms.tags>\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"status\"\n        :label=\"__('campaigns/webhooks.fields.enabled')\">\n        <input type=\"hidden\" name=\"status\" value=\"0\" />\n        <x-checkbox :text=\"__('campaigns/webhooks.helper.active')\">\n            <input type=\"checkbox\" name=\"status\" value=\"1\" @if (old('status', $webhook->status ?? true)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    <x-forms.field field=\"skip-private\" :label=\"__('campaigns/webhooks.fields.private_entities.skip')\">\n        <input type=\"hidden\" name=\"settings[skip_private]\" value=\"0\" />\n        <x-checkbox :text=\"__('campaigns/webhooks.fields.private_entities.helper')\">\n            <input type=\"checkbox\" name=\"settings[skip_private]\" value=\"1\" @if (isset($webhook) && $webhook->skipPrivate()) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/campaigns/webhooks/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/webhooks.create.title'),\n    'breadcrumbs' => [\n        ['url' => route('overview', $campaign), 'label' => __('entities.campaign')],\n        ['url' => route('webhooks.index', $campaign), 'label' => __('campaigns.show.tabs.webhooks')],\n        __('campaigns/webhooks.actions.add')\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n])\n\n@section('content')\n    <x-form :action=\"['webhooks.store', $campaign]\">\n        @include('partials.forms.form', [\n            'title' => __('campaigns/webhooks.create.title'),\n            'content' => 'campaigns/webhooks._form',\n            'save' => __('campaigns/webhooks.actions.add'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/webhooks/edit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('campaigns/webhooks.edit.title'),\n    'breadcrumbs' => [\n        ['url' => route('overview', $campaign), 'label' => __('entities.campaign')],\n        ['url' => route('webhooks.index', $campaign), 'label' => trans('campaigns.show.tabs.webhooks')],\n        $webhook->name,\n    ],\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n])\n\n@section('content')\n    <x-form :action=\"['webhooks.update', $campaign, $webhook->id]\" method=\"PATCH\">\n        @include('partials.forms.form', [\n            'title' => __('campaigns/webhooks.edit.title'),\n            'content' => 'campaigns/webhooks._form',\n            'submit' => __('crud.update'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/webhooks/index.blade.php",
    "content": "<div class=\"flex gap-2 items-center justify-between\">\n    <h1 class=\"inline-block text-2xl\">\n        {{ __('campaigns.show.tabs.webhooks') }}\n    </h1>\n    <div class=\"flex gap-1\">\n    <x-learn-more url=\"features/campaigns/webhooks.html\" />\n    @can('update', $campaign)\n        <a\n            href=\"{{ route('webhooks.create', $campaign) }}\"\n            class=\"btn2 btn-primary btn-sm\"\n            data-toggle=\"dialog\"\n            data-url=\"{{ route('webhooks.create', $campaign) }}\"\n        >\n            <x-icon class=\"plus\" />\n            {{ __('campaigns/webhooks.actions.add') }}\n        </a>\n    @endif\n    </div>\n</div>\n\n<p>\n    {!! __('campaigns/webhooks.helper.tutorial') !!}\n</p>\n\n<?php /** @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Webhook $webhook\n */?>\n    @if(Datagrid::hasBulks())\n        <x-form :action=\"['webhooks.bulk', $campaign]\" direct>\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table')\n            </div>\n        </x-form>\n    @else\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n    @endif\n@section('modals')\n    @parent\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms()])\n\n    @include('partials.helper-modal', [\n        'id' => 'webhooks-help',\n        'title' => __('campaigns.show.tabs.webhooks'),\n        'textes' => [\n            __('campaigns/webhooks.helper.1'),\n            __('campaigns/webhooks.helper.2'),\n            __('campaigns/webhooks.helper.3'),\n        ]\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/campaigns/webhooks.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('campaigns/webhooks.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        trans('campaigns.show.tabs.webhooks')\n    ],\n    'canonical' => true,\n    'mainTitle' => false,\n    'sidebar' => 'campaign',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n    <div class=\"flex flex-col gap-5\">\n        @include('campaigns/webhooks.index')\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/characters/families/_reorder.blade.php",
    "content": "<?php /** @var \\App\\Models\\CharacterFamily[] $families */?>\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('characters.families.helper', ['name' => $character->name]) !!}</p>\n    </x-helper>\n    @if (!$families)\n        <x-alert type=\"warning\">\n            <p>{{ __('crud.reorder.empty') }}</p>\n        </x-alert>\n    @else\n        <div class=\"w-full character-families-reorder flex flex-col gap-2\">\n            <div class=\"@if ($families->count() > 1) element-live-reorder sortable-elements @endif flex flex-col gap-2\">\n                @foreach($families as $family)\n                    <x-reorder.child id=\"element-{{ $family->family_id }}\">\n                        <input type=\"hidden\" name=\"character_family[]\" value=\"{{ $family->family_id }}\" />\n                        @if ($families->count() > 1)\n                            <div class=\"dragger\">\n                                <x-icon class=\"fa-solid fa-sort\" />\n                            </div>\n                        @endif\n                        <div class=\"flex flex-wrap md:flex-no-wrap gap-2 md:gap-2 member-row items-center grow\">\n                            <x-entities.thumbnail :entity=\"$family->family->entity\" :title=\"$family->family->name\" />\n                            <x-entity-link\n                                :entity=\"$family->family->entity\"\n                                :campaign=\"$campaign\" />\n                        </div>\n                        <div class=\"grow-0 px-2 text-lg\" x-data=\"{ isPrivate: {{ $family->is_private }} }\">\n                            <input type=\"hidden\" name=\"family_privates[{{ $family->family_id }}]\" :value=\"isPrivate ? 1 : 0\" />\n                            <i\n                                class=\"cursor-pointer hover:text-accent\"\n                                @click=\"isPrivate = !isPrivate\"\n                                :class=\"isPrivate ? 'fa-solid fa-lock-keyhole' : 'fa-regular fa-unlock-keyhole'\"\n                                :title=\"isPrivate ? '{{ __('entities/attributes.visibility.private') }}' : '{{ __('entities/attributes.visibility.public') }}'\"></i>\n                        </div>\n                    </x-reorder.child>\n                @endforeach\n            </div>\n        </div>\n    @endif\n</x-grid>\n\n\n\n"
  },
  {
    "path": "resources/views/characters/families/reorder.blade.php",
    "content": "<x-form :action=\"['characters.families.save', $campaign, $character]\">\n    @include('partials.forms._dialog', [\n        'title' => __('characters.families.title2'),\n        'content' => 'characters.families._reorder',\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/characters/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Character::class, 'trans' => 'characters'])\n    @include('cruds.fields.title')\n    @include('cruds.fields.families', ['quickCreator' => true])\n    @include('cruds.fields.locations', ['from' => $entity ?? null, 'quickCreator' => true, 'model' => $entity ?? $source ?? null])\n    @include('cruds.fields.races', ['quickCreator' => true])\n    @include('cruds.fields.entry2')\n    @php\n        $fieldID = uniqid('age_');\n    @endphp\n    <x-forms.field\n        field=\"age\"\n        :label=\"__('characters.fields.age')\"\n        :helper=\"__('characters.helpers.age', ['more' => '<a href=\\'https://docs.kanka.io/en/latest/advanced/age.html\\' class=\\'text-link\\'>' . __('crud.actions.find_out_more') . '</a>'])\"\n        :id=\"$fieldID\">\n        <input id=\"{{ $fieldID }}\" type=\"text\" name=\"age\" value=\"{{ old('age', FormCopy::field('age')->child()->string() ?: $model->age ?? null) }}\" maxlength=\"25\" class=\"w-full\"  autocomplete=\"off\" placeholder=\"{{ __('characters.placeholders.age') }}\" />\n    </x-forms.field>\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.sex')\n\n    @include('cruds.fields.pronouns')\n\n    @include('cruds.fields.tags')\n\n    @include('cruds.fields.image')\n</x-grid>\n\n@section('scripts')\n    @parent\n    @vite('resources/js/forms/character.js')\n@endsection\n"
  },
  {
    "path": "resources/views/characters/form/_organisations.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\OrganisationMember $organisation\n * @var \\App\\Models\\Character $model\n */\n$organisations = isset($model) ?\n    $model->organisationMemberships()->with('organisation')->has('organisation')->orderBy('role', 'ASC')->get() :\n    FormCopy::characterOrganisation();\n$isAdmin = auth()->user()->isAdmin();\n\n$singular = App\\Facades\\Module::singular(config('entities.ids.organisation'), __('entities.organisation'));\n$options = [\n    '' => __('organisations.members.pinned.none'),\n    App\\Enums\\OrganisationMemberPin::character->value => \\App\\Facades\\Module::singular(\n        config('entities.ids.character'),\n        __('entities.character')\n    ),\n    App\\Enums\\OrganisationMemberPin::organisation->value => $singular,\n    App\\Enums\\OrganisationMemberPin::both->value => __('organisations.members.pinned.both'),\n];\n\n$statuses = [\n    App\\Enums\\OrganisationMemberStatus::active->value => __('organisations.members.status.active'),\n    App\\Enums\\OrganisationMemberStatus::inactive->value => __('organisations.members.status.inactive'),\n    App\\Enums\\OrganisationMemberStatus::unknown->value => __('organisations.members.status.unknown'),\n];\n\n?>\n<x-grid type=\"1/1\">\n    <div class=\"character-organisations flex flex-col gap-2 md:gap-4\">\n        @foreach ($organisations as $organisation)\n            <div class=\"flex flex-wrap md:flex-nowrap items-center gap-2 md:gap-2 member-row\">\n                <div class=\"field\">\n                    <select name=\"organisations[{{ $organisation->id }}]\" class=\"w-full select2\" style=\"width: 100%\"\n                        data-url=\"{{ route('search-list', [$campaign, config('entities.ids.organisation')]) }}\"\n                        data-placeholder=\"{{ __('crud.placeholders.search') }}\"\n                        data-language=\"{{ LaravelLocalization::getCurrentLocale() }}\"\n                        data-allow-clear=\"false\"\n                    >\n                        <option value=\"{{ $organisation->organisation->id }}\">{{ $organisation->organisation->name }}</option>\n                    </select>\n                </div>\n                <div class=\"grow field\">\n                    <label class=\"sr-only\">{{ __('organisations.members.fields.role') }}</label>\n                    <input type=\"text\" name=\"organisation_roles[{{ $organisation->id }}]\" value=\"{{ $organisation->role }}\" placeholder=\"{{ __('organisations.members.placeholders.role') }}\" aria-label=\"{{ __('organisations.members.placeholders.role') }}\" maxlength=\"191\" spellcheck=\"true\"  class=\"w-full\" />\n                </div>\n                <div class=\"field\">\n                    <label class=\"sr-only\">{{ __('organisations.members.fields.status') }}</label>\n                    <x-forms.select name=\"organisation_statuses[{{ $organisation->id }}]\" :options=\"$statuses\" :selected=\"$organisation->status_id ?? null\" :label=\"__('organisations.members.fields.status')\" />\n                </div>\n                <div class=\"field\">\n                    <label class=\"sr-only\">{{ __('organisations.members.fields.pinned') }}</label>\n                    <x-forms.select name=\"organisation_pins[{{ $organisation->id }}]\" :options=\"$options\" :selected=\"$organisation->pin_id ?? null\" :label=\"__('organisations.members.fields.pinned')\" />\n                </div>\n                @if ($isAdmin)\n                    <div class=\"text-lg\" x-data=\"{ isPrivate: {{ $organisation->is_private }} }\">\n                        <input type=\"hidden\" name=\"organisation_privates[{{ $organisation->id }}]\" :value=\"isPrivate ? 1 : 0\" />\n                        <i\n                            class=\"cursor-pointer hover:text-accent\"\n                            @click=\"isPrivate = !isPrivate\"\n                            :class=\"isPrivate ? 'fa-solid fa-lock-keyhole' : 'fa-regular fa-unlock-keyhole'\"\n                            :title=\"isPrivate ? '{{ __('entities/attributes.visibility.private') }}' : '{{ __('entities/attributes.visibility.public') }}'\"></i>\n                    </div>\n                @endif\n                <div class=\"flex items-center\">\n                    <div class=\"member-delete cursor-pointer hover:text-error-content text-base-content text-lg\" title=\"{{ __('crud.remove') }}\" role=\"button\" tabindex=\"0\" data-target=\".member-row\">\n                        <x-icon class=\"trash\" />\n                        <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                    </div>\n                </div>\n            </div>\n        @endforeach\n    </div>\n\n    <button class=\"btn2 btn-sm btn-outline\" id=\"add_organisation\" href=\"#\">\n        <x-icon class=\"plus\" />\n        {!! $singular !!}\n    </button>\n</x-grid>\n\n\n<input type=\"hidden\" name=\"character_save_organisations\" value=\"1\"/>\n\n@section('modals')\n    @parent\n    <template id=\"template_organisation\">\n        <div class=\"flex flex-wrap md:flex-nowrap items-center gap-2 md:gap-2 member-row\">\n            <div class=\"field\">\n                <select name=\"organisations[]\" class=\"w-full tmp-org\" style=\"width: 100%\"\n                        data-url=\"{{ route('search-list', [$campaign, config('entities.ids.organisation')]) }}\"\n                        data-placeholder=\"{{ __('crud.placeholders.search') }}\"\n                        data-language=\"{{ LaravelLocalization::getCurrentLocale() }}\"\n                >\n                </select>\n            </div>\n            <div class=\"grow field\">\n                <label class=\"sr-only\">{{ __('organisations.members.fields.role') }}</label>\n                <input type=\"text\" name=\"organisation_roles[]\" value=\"\" placeholder=\"{{ __('organisations.members.placeholders.role') }}\" aria-label=\"{{ __('organisations.members.placeholders.role') }}\" maxlength=\"191\" spellcheck=\"true\"  class=\"w-full\" />\n            </div>\n            <div class=\"field\">\n                <label class=\"sr-only\">{{ __('organisations.members.fields.status') }}</label>\n                <x-forms.select name=\"organisation_statuses[]\" :options=\"$statuses\" :label=\"__('organisations.members.fields.status')\" />\n            </div>\n            <div class=\"field\">\n                <label class=\"sr-only\">{{ __('organisations.members.fields.pinned') }}</label>\n                <x-forms.select name=\"organisation_pins[]\" :options=\"$options\" :label=\"__('organisations.members.fields.pinned')\" />\n            </div>\n            @if ($isAdmin)\n                <div class=\"text-lg\">\n                    <input type=\"hidden\" name=\"organisation_privates[]\" value=\"0\"/>\n                    <i class=\"fa-regular fa-unlock-keyhole cursor-pointer hover:text-accent \" data-toggle=\"private\" data-private=\"{{ __('entities/attributes.visibility.private') }}\" data-public=\"{{ __('entities/attributes.visibility.public') }}\"></i>\n                </div>\n            @endif\n            <div class=\"text-lg\">\n                <span class=\"member-delete cursor-pointer hover:text-error-content text-base-content\" title=\"{{ __('crud.remove') }}\" role=\"button\" tabindex=\"0\" data-target=\".parent-row\">\n                    <x-icon class=\"trash\" />\n                    <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                </span>\n            </div>\n        </div>\n    </template>\n@endsection\n\n"
  },
  {
    "path": "resources/views/characters/form/_panes.blade.php",
    "content": "<div class=\"tab-pane {{ (request()->get('tab') == 'traits' ? ' active' : '') }}\" id=\"form-traits\">\n    @include('characters.form._traits')\n</div>\n<div class=\"tab-pane {{ (request()->get('tab') == 'organisations' ? ' active' : '') }}\" id=\"form-organisations\">\n    @include('characters.form._organisations')\n</div>"
  },
  {
    "path": "resources/views/characters/form/_tabs.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityType $module */?>\n<x-tab.tab target=\"traits\" :title=\"__('characters.fields.traits')\"></x-tab.tab>\n\n@if ($campaign->enabled('organisations'))\n    @php $module = \\App\\Models\\EntityType::find(config('entities.ids.organisation')); @endphp\n    <x-tab.tab target=\"organisations\" :icon=\"$module->icon()\" :title=\"$module->plural()\"></x-tab.tab>\n@endif\n"
  },
  {
    "path": "resources/views/characters/form/_traits.blade.php",
    "content": "<x-grid>\n    <x-grid type=\"1/1\">\n        <x-forms.field\n            field=\"appearance\"\n            :label=\"__('characters.sections.appearance')\">\n            <x-slot name=\"action\">\n\n                <button class=\"text-link dynamic-row-add p-1 cursor-pointer text-center\" data-template=\"template_appearance\" data-target=\"character-appearance\" data-toggle=\"tooltip\" data-title=\"{{ __('characters.actions.add_appearance') }}\">\n                    <x-icon class=\"plus\" />\n                    {{ __('crud.add') }}\n                </button>\n            </x-slot>\n            <div class=\"flex flex-col gap-2 character-appearance sortable-elements\" data-handle=\".sortable-handler\">\n                @foreach ((isset($model) ? $model->characterTraits()->appearance()->orderBy('default_order', 'ASC')->get() : FormCopy::characterAppearance()) as $trait)\n                    <div class=\"grid grid-cols-3 w-full parent-delete-row gap-1\">\n                        <div class=\"flex gap-1 items-center\">\n                            <div class=\"sortable-handler px-1 cursor-move\">\n                                <x-icon class=\"sort\" />\n                            </div>\n                            <div class=\"grow field\">\n                                <label class=\"sr-only\">{{ __('characters.labels.appearance.name') }}</label>\n                                <input type=\"text\" name=\"appearance_name[{{ $trait->id }}]\" value=\"{{ $trait->name }}\" class=\"w-full\" placeholder=\"{{ __('characters.placeholders.appearance_name') }}\" spellcheck=\"true\" aria-label=\"{{ __('characters.labels.appearance.name') }}\" maxlength=\"191\" />\n                            </div>\n                        </div>\n                        <div class=\"flex gap-1 items-center col-span-2\">\n                            <div class=\"grow field\">\n                                <label class=\"sr-only\">{{ __('characters.labels.appearance.entry') }}</label>\n                                <input type=\"text\" name=\"appearance_entry[{{ $trait->id }}]\" value=\"{{ $trait->entry }}\" class=\"w-full\" placeholder=\"{{ __('characters.placeholders.appearance_entry') }}\" spellcheck=\"true\" aria-label=\"{{ __('characters.labels.appearance.entry') }}\"  maxlength=\"191\" />\n                            </div>\n                            <div class=\"dynamic-row-delete cursor-pointer hover:text-error-content text-base-content text-lg\" title=\"{{ __('crud.remove') }}\" role=\"button\" tabindex=\"0\">\n                                <x-icon class=\"trash\" />\n                                <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                            </div>\n                        </div>\n                    </div>\n                @endforeach\n            </div>\n            <button class=\"text-link dynamic-row-add p-1 cursor-pointer text-center\" data-template=\"template_appearance\" data-target=\"character-appearance\">\n                <x-icon class=\"plus\" />\n                {{ __('characters.actions.add_appearance') }}\n            </button>\n        </x-forms.field>\n\n        <x-forms.field\n            field=\"appearance-pinned\"\n            :label=\"__('characters.fields.is_appearance_pinned')\">\n            <input type=\"hidden\" name=\"is_appearance_pinned\" value=\"0\" />\n\n            <x-checkbox :text=\"__('characters.hints.is_appearance_pinned')\">\n                <input type=\"checkbox\" name=\"is_appearance_pinned\" value=\"1\" @if (old('is_appearance_pinned', $source->child->is_appearance_pinned ?? $model->is_appearance_pinned ?? true)) checked=\"checked\" @endif/>\n            </x-checkbox>\n        </x-forms.field>\n    </x-grid>\n\n    <x-grid type=\"1/1\">\n        <x-forms.field\n            field=\"personality\"\n            :label=\"__('characters.sections.personality')\">\n            @if (!isset($model) || auth()->user()->can('personality', $model))\n                <x-slot name=\"action\">\n                    <button class=\"text-link cursor-pointer dynamic-row-add\" data-template=\"template_personality\" data-target=\"character-personality\" data-toggle=\"tooltip\" data-title=\"{{ __('characters.actions.add_personality') }}\">\n                        <x-icon class=\"plus\" />\n                        {{ __('crud.add') }}\n                    </button>\n                </x-slot>\n            <div class=\"flex flex-col gap-2 character-personality sortable-elements\" data-handle=\".sortable-handler\">\n                @foreach ((isset($model) ? $model->characterTraits()->personality()->orderBy('default_order', 'ASC')->get() : FormCopy::characterPersonality()) as $trait)\n                    <div class=\"flex flex-col gap-2 parent-delete-row\">\n                        <div class=\"flex gap-1 items-center\">\n                            <div class=\"sortable-handler px-1 cursor-move\">\n                                <x-icon class=\"sort\" />\n                            </div>\n                            <div class=\"grow field\">\n                                <label class=\"sr-only\">{{ __('characters.labels.personality.name') }}</label>\n                                <input type=\"text\" name=\"personality_name[{{ $trait->id }}]\" value=\"{{ $trait->name }}\" class=\"w-full\" placeholder=\"{{ __('characters.placeholders.personality_name') }}\" spellcheck=\"true\" aria-label=\"{{ __('characters.labels.personality.name') }}\" maxlength=\"191\" />\n                            </div>\n                            <div class=\"dynamic-row-delete cursor-pointer hover:text-error-content text-base-content text-lg\" role=\"button\" tabindex=\"0\" >\n                                <x-icon class=\"trash\" />\n                                <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                            </div>\n                        </div>\n                        <div class=\"field-personality-entry\">\n                            <label class=\"sr-only field\">{{ __('characters.labels.personality.entry') }}</label>\n                            <textarea name=\"personality_entry[{{ $trait->id }}]\" placeholder=\"{{ __('characters.placeholders.personality_entry') }}\" class=\"w-full\" rows=\"2\" spellcheck=\"true\" aria-label=\"{{ __('characters.labels.personality.entry') }}\">{!! old('personality_entry[' . $trait->id . ']', $trait->entry) !!}</textarea>\n                        </div>\n                    </div>\n                @endforeach\n            </div>\n            <button class=\"text-link cursor-pointer p-1 dynamic-row-add\" data-template=\"template_personality\" data-target=\"character-personality\">\n                <x-icon class=\"plus\" />\n                {{ __('characters.actions.add_personality') }}\n            </button>\n            @else\n                <x-alert type=\"warning\">\n                    <p>\n                        <x-icon class=\"lock\" />\n                        {!! __('characters.warnings.personality_hidden', ['name' => $entity->name]) !!}\n                    </p>\n                </x-alert>\n            @endif\n        </x-forms.field>\n\n\n        @if (!isset($model) || auth()->user()->can('personality', $model))\n            <x-forms.field\n                field=\"personality-pinned\"\n                :label=\"__('characters.fields.is_personality_pinned')\"\n            >\n                <input type=\"hidden\" name=\"is_personality_pinned\" value=\"0\" />\n                <x-checkbox :text=\"__('characters.hints.is_appearance_pinned')\">\n                    <input type=\"checkbox\" name=\"is_personality_pinned\" value=\"1\" @if (old('is_personality_pinned', $source->child->is_personality_pinned ?? $model->is_personality_pinned ?? true)) checked=\"checked\" @endif/>\n                </x-checkbox>\n            </x-forms.field>\n        @endif\n\n        @can('admin', $campaign)\n                <hr>\n            <input type=\"hidden\" name=\"is_personality_visible\" value=\"0\" />\n            <x-forms.field\n                field=\"personality-visible\"\n                :label=\"__('characters.fields.is_personality_visible')\"\n            >\n                <x-forms.select\n                    name=\"is_personality_visible\"\n                    radio\n                    :selected=\"old('is_personality_visible', $source->child->is_personality_visible ?? $model->is_personality_visible ?? 1)\"\n                    :options=\"[\n                        1 => '' . __('characters.personality_visibility.all'),\n                        0 => '<i class=\\'fa-regular fa-lock\\' aria-hidden=\\'true\\'></i> ' . __('characters.personality_visibility.admin', ['admin' => '<a href=\\'' . route('campaigns.campaign_roles.admin', $campaign) . '\\' class=\\'text-link\\'>' . $campaign->adminRoleName() . '</a>']),\n    ]\">\n                </x-forms.select>\n            </x-forms.field>\n        @elseif (!isset($model))\n            <input type=\"hidden\" name=\"is_personality_visible\" value=\"1\" />\n        @endif\n    </x-grid>\n</x-grid>\n\n\n@section('modals')\n    @parent\n    <template id=\"template_appearance\">\n        <div class=\"grid grid-cols-3 w-full parent-delete-row gap-1\">\n            <div class=\"flex gap-1 items-center\">\n                <div class=\"sortable-handler px-1 cursor-move\">\n                    <x-icon class=\"sort\" />\n                </div>\n                <div class=\"grow field\">\n                    <label class=\"sr-only\">{{ __('characters.labels.appearance.name') }}</label>\n                    <input type=\"text\" name=\"appearance_name[]\" class=\"w-full\" placeholder=\"{{ __('characters.placeholders.appearance_name') }}\" spellcheck=\"true\" aria-label=\"{{ __('characters.labels.appearance_name') }}\" maxlength=\"191\" />\n                </div>\n            </div>\n            <div class=\"flex gap-1 items-center col-span-2\">\n                <div class=\"grow field\">\n                    <label class=\"sr-only\">{{ __('characters.labels.appearance.entry') }}</label>\n                    <input type=\"text\" name=\"appearance_entry[]\" class=\"w-full\" placeholder=\"{{ __('characters.placeholders.appearance_entry') }}\" spellcheck=\"true\" aria-label=\"{{ __('characters.labels.appearance.entry') }}\" maxlength=\"191\" />\n                </div>\n                <div class=\"dynamic-row-delete cursor-pointer hover:text-error-content text-base-content text-lg\" role=\"button\" tabindex=\"0\">\n                    <x-icon class=\"trash\" />\n                    <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                </div>\n            </div>\n        </div>\n    </template>\n    <template id=\"template_personality\">\n        <div class=\"flex flex-col w-full gap-1 parent-delete-row\">\n            <div class=\"flex gap-1 items-center\">\n                @if(!isset($model))\n                <div class=\"sortable-handler px-1 cursor-move\">\n                    <x-icon class=\"sort\" />\n                </div>\n                @endif\n                <div class=\"grow field\">\n                    <label class=\"sr-only\">{{ __('characters.labels.personality.name') }}</label>\n                    <input type=\"text\" name=\"personality_name[]\" class=\"w-full\" placeholder=\"{{ __('characters.placeholders.personality_name') }}\" spellcheck=\"true\" aria-label=\"{{ __('characters.labels.personality.name') }}\" maxlength=\"191\" />\n                </div>\n                <div class=\"dynamic-row-delete cursor-pointer hover:text-error-content text-base-content text-lg\" title=\"{{ __('crud.remove') }}\" role=\"button\" tabindex=\"0\">\n                    <x-icon class=\"trash\" />\n                    <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                </div>\n            </div>\n            <div class=\"field-personality-entry field\">\n                <label class=\"sr-only\">{{ __('characters.labels.personality.entry') }}</label>\n\n                <textarea name=\"personality_entry[]\" placeholder=\"{{ __('characters.placeholders.personality_entry') }}\" class=\"w-full\" rows=\"2\" spellcheck=\"true\" aria-label=\"{{ __('characters.labels.personality.entry') }}\"></textarea>\n            </div>\n        </div>\n    </template>\n\n@endsection\n"
  },
  {
    "path": "resources/views/characters/organisations/_form.blade.php",
    "content": "@php\n$options = [\n    '' => __('organisations.members.pinned.none'),\n    App\\Enums\\OrganisationMemberPin::character->value => App\\Facades\\Module::singular(\n        config('entities.ids.character'),\n        __('entities.character')\n    ),\n    App\\Enums\\OrganisationMemberPin::organisation->value => App\\Facades\\Module::singular(\n        config('entities.ids.organisation'),\n        __('entities.organisation')\n    ),\n    App\\Enums\\OrganisationMemberPin::both->value => __('organisations.members.pinned.both'),\n];\n$statuses = [\n    App\\Enums\\OrganisationMemberStatus::active->value => __('organisations.members.status.active'),\n    App\\Enums\\OrganisationMemberStatus::inactive->value => __('organisations.members.status.inactive'),\n    App\\Enums\\OrganisationMemberStatus::unknown->value => __('organisations.members.status.unknown'),\n];\n$fromOrg = request()->get('from') === 'org';\n@endphp\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('organisations.members.edit.helper', ['name' => $model->name]) !!}</p>\n    </x-helper>\n\n@if ($fromOrg)\n        <input type=\"hidden\" name=\"organisation_id\" value=\"{{ $member->organisation_id }}\" />\n@else\n    @include('cruds.fields.organisation', [\n        'model' => $member ?? null,\n        'allowNew' => false,\n        'required' => true,\n        'allowClear' => false,\n        'dropdownParent' => $dropdownParent ?? (request()->ajax() ? '#primary-dialog' : null),\n    ])\n@endif\n\n@if ($fromOrg)\n    <input type=\"hidden\" name=\"parent_id\" value=\"\" />\n    @include('cruds.fields.character', [\n        'name' => 'parent_id',\n        'preset' => $member->parent ?? null,\n        'allowNew' => false,\n        'allowClear' => true,\n        'label' => __('organisations.members.fields.parent'),\n        'placeholder' => __('organisations.members.placeholders.parent'),\n        'route' => 'search.organisation-member',\n        'model' => $member->organisation,\n        'dropdownParent' => $dropdownParent ?? (request()->ajax() ? '#primary-dialog' : null),\n    ])\n@endif\n    <x-forms.field\n        field=\"org-role\"\n        :label=\"__('characters.organisations.fields.role')\">\n        <input type=\"text\" name=\"role\" value=\"{{ old('role', $source->role ?? $member->role ?? null) }}\" maxlength=\"45\" class=\"w-full\" placeholder=\"{{ __('organisations.members.placeholders.role') }}\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"org-status\"\n        :label=\"__('organisations.members.fields.status')\">\n        <x-forms.select name=\"status_id\" :options=\"$statuses\" :selected=\"$member->status_id ?? null\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"org-pinned\"\n        :label=\"__('organisations.members.fields.pinned')\"\n        :helper=\"__('organisations.members.helpers.pinned')\"\n        tooltip>\n        <x-forms.select name=\"pin_id\" :options=\"$options\" :selected=\"$member->pin_id ?? null\" />\n    </x-forms.field>\n\n    @includeWhen(auth()->user()->isAdmin(), 'cruds.fields.privacy_callout', ['model' => $member ?? null])\n</x-grid>\n\n\n"
  },
  {
    "path": "resources/views/characters/organisations/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('characters.organisations.create.title'),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($model->entity)->list(),\n        Breadcrumb::show(),\n        \\App\\Facades\\Module::plural(config('entities.ids.organisation'), __('entities.organisations'))\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['characters.character_organisations.store', $campaign, $model->id]\">\n        @include('partials.forms._dialog', [\n            'title' => __('characters.organisations.create.title'),\n            'content' => 'characters.organisations._form',\n            'submit' => __('crud.add'),\n            'dropdownParent' => '#primary-dialog',\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/characters/organisations/edit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => trans('characters.organisations.edit.title', ['name' => $model->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($model->entity)->list(),\n        Breadcrumb::show()\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n    <x-form :action=\"['characters.character_organisations.update', $campaign, $model->id, $member->id]\" method=\"PATCH\" >\n        @include('partials.forms._dialog', [\n            'title' => __('characters.organisations.edit.title', ['name' => $model->name]),\n            'content' => 'characters.organisations._form',\n            'deleteID' => '#delete-character-organisation-' . $member->id,\n            'dropdownParent' => '#primary-dialog',\n        ])\n\n        @if (request()->has('from'))\n            <input type=\"hidden\" name=\"from\" value=\"{{ request()->get('from') }}\" />\n        @endif\n    </x-form>\n    <x-form method=\"DELETE\" :action=\"['characters.character_organisations.destroy', $campaign, $model->id, $member->id]\" id=\"delete-character-organisation-{{ $member->id }}\" />\n\n@endsection\n\n"
  },
  {
    "path": "resources/views/characters/organisations.blade.php",
    "content": "@php\n$plural = \\App\\Facades\\Module::plural(config('entities.ids.organisation'), __('entities.organisations'));\n@endphp\n@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $plural,\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    @include('characters.panels._buttons')\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'organisations',\n        'view' => 'characters.panels.organisations',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/characters/panels/_appearance.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */\n$appearances = $entity->child->appearances;\n?>\n\n@if (count($appearances) > 0)\n    <div class=\"flex flex-col gap-3 post-block post-block character-appearances\">\n        <div class=\"post-header flex gap-1 md:gap-2 items-center\">\n            <div class=\"flex gap-2 items-center cursor-pointer element-toggle group\" data-animate=\"collapse\" data-target=\"#character-appearance-body\">\n                <x-icon class=\"fa-solid fa-chevron-up icon-show transition-transform duration-200 group-hover:-translate-y-0.5\" />\n                <x-icon class=\"fa-solid fa-chevron-down icon-hide transition-transform duration-200 group-hover:translate-y-0.5\" />\n                <h3 class=\"post-title truncate text-xl\">\n                    {{ __('characters.sections.appearance') }}\n                </h3>\n            </div>\n        </div>\n        <div class=\"bg-box rounded-lg\" id=\"character-appearance\">\n            <div class=\"entity-content overflow-hidden\" id=\"character-appearance-body\">\n                <div class=\"flex flex-col gap-4 md:grid md:grid-cols-2 xl:grid-cols-3 p-4\">\n        @foreach ($appearances as $trait)\n                <p class=\"entity-appearance-{{ \\Illuminate\\Support\\Str::slug($trait->name) }}\" data-word-count=\"{{ $trait->words }}\">\n                    <b>{{ $trait->name }}</b><br />\n                    {!! $trait->entry !!}\n                </p>\n        @endforeach\n                </div>\n            </div>\n        </div>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/characters/panels/_buttons.blade.php",
    "content": "\n<div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n    @can('update', $entity ?? $model->entity)\n        <a href=\"{{ route('characters.character_organisations.create', [$campaign, $model]) }}\"\n            class=\"btn2 btn-sm\" data-toggle=\"dialog\"\n            data-url=\"{{ route('characters.character_organisations.create', [$campaign, $model]) }}\">\n            <x-icon class=\"plus\" />\n            <span class=\"hidden lg:inline\">{!! \\App\\Facades\\Module::singular(config('entities.ids.organisation'), __('entities.organisation')) !!}</span>\n        </a>\n    @endcan\n    @include('entities.headers.actions', ['edit' => false])\n</div>\n\n\n@section('modals')\n    @parent\n    <x-dialog id=\"organisation-dialog\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/characters/panels/_personality.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */\n$traits = $entity->child->personality;\n?>\n\n@if (((auth()->check() && auth()->user()->can('personality', $entity->child)) || $entity->child->is_personality_visible) && count($traits) > 0)\n\n    <div class=\"flex flex-col gap-3 post-block character-personalities\">\n        <div class=\"post-header flex gap-1 md:gap-2 items-center justify-between\">\n            <div class=\"flex gap-2 items-center cursor-pointer element-toggle group\" data-animate=\"collapse\" data-target=\"#character-personality-body\">\n                <x-icon class=\"fa-solid fa-chevron-up icon-show transition-transform duration-200 group-hover:-translate-y-0.5\n\" />\n                <x-icon class=\"fa-solid fa-chevron-down icon-hide transition-transform duration-200 group-hover:translate-y-0.5\n\" />\n                <h3 class=\"post-title truncate text-xl\">\n                    {{ __('characters.sections.personality') }}\n                </h3>\n            </div>\n            @can('personality', $entity->child)\n                <div class=\"\">\n                    @if (!$entity->child->is_personality_visible)\n                        <x-icon class=\"lock\" tooltip title=\"{{ __('characters.hints.personality_not_visible') }}\" />\n                    @else\n                        <x-icon class=\"fa-regular fa-lock-open\" tooltip title=\"{{ __('characters.hints.personality_visible') }}\" />\n                    @endif\n                </div>\n            @endif\n        </div>\n        <div class=\"bg-box rounded-lg\" id=\"character-personality\">\n            <div class=\"entity-content overflow-hidden\" id=\"character-personality-body\">\n                <div class=\"flex flex-col gap-3 md:grid md:grid-cols-2 xl:grid-cols-3 p-4\">\n                    @foreach ($traits as $trait)\n                        <p class=\"entity-trait-{{ \\Illuminate\\Support\\Str::slug($trait->name) }}\" data-word-count=\"{{ $trait->words }}\">\n                            <b>{{ $trait->name }}</b><br />\n                            {!! nl2br(\\App\\Facades\\Mentions::mapAny($trait, 'entry')) !!}\n                        </p>\n                    @endforeach\n                </div>\n            </div>\n        </div>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/characters/panels/organisations.blade.php",
    "content": "@if(isset($character))\n    @php\n        Datagrid::layout(\\App\\Renderers\\Layouts\\Character\\Organisation::class)\n                    ->route('characters.organisations', [$campaign, $character]);\n\n        $rows = $character\n            ->organisationMemberships()\n            ->with(['organisation', 'organisation.entity', 'organisation.entity.image', 'organisation.entity.tags', 'organisation.entity.tags.entity', 'organisation.entity.entityType'])\n            ->rows()\n            ->paginate();\n        $rows->withPath(route('characters.organisations', [$campaign, $character]));\n    @endphp\n@endif\n<div class=\"overflow-x-auto\" id=\"character-organisations\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n\n@section('modals')\n    @parent\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms(), 'params' => []])\n    <x-dialog id=\"edit-dialog\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/characters/races/_reorder.blade.php",
    "content": "<?php /** @var \\App\\Models\\Race[] $races */?>\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('characters.races.helper', ['name' => $character->name]) !!}</p>\n    </x-helper>\n\n    @if (!$races)\n        <x-alert type=\"warning\">\n            <p>{{ __('crud.reorder.empty') }}</p>\n        </x-alert>\n    @else\n        <div class=\"w-full character-races-reorder flex flex-col gap-2\">\n            <div class=\"@if ($races->count() > 1) element-live-reorder sortable-elements @endif flex flex-col gap-2\">\n                @foreach($races as $race)\n                    <x-reorder.child id=\"element-{{ $race->race_id }}\">\n                        <input type=\"hidden\" name=\"character_race[]\" value=\"{{ $race->race_id }}\" />\n                        @if ($races->count() > 1)\n                            <div class=\"dragger\">\n                                <x-icon class=\"fa-solid fa-sort\" />\n                            </div>\n                        @endif\n                        <div class=\"flex flex-wrap md:flex-no-wrap gap-2 md:gap-2 member-row items-center grow\">\n                            <x-entities.thumbnail :entity=\"$race->race->entity\" :title=\"$race->race->name\" />\n                            <x-entity-link\n                                :entity=\"$race->race->entity\"\n                                :campaign=\"$campaign\" />\n                        </div>\n                        <div class=\"grow-0 px-2 text-lg\" x-data=\"{ isPrivate: {{ $race->is_private }} }\">\n                            <input type=\"hidden\" name=\"race_privates[{{ $race->race_id }}]\" :value=\"isPrivate ? 1 : 0\" />\n                            <i class=\"cursor-pointer hover:text-accent\"\n                               @click=\"isPrivate = !isPrivate\"\n                               :class=\"isPrivate ? 'fa-solid fa-lock-keyhole' : 'fa-regular fa-unlock-keyhole'\"\n                               :title=\"isPrivate ? '{{ __('entities/attributes.visibility.private') }}' : '{{ __('entities/attributes.visibility.public') }}'\"></i>\n                        </div>\n                    </x-reorder.child>\n                @endforeach\n            </div>\n        </div>\n    @endif\n</x-grid>\n\n\n\n"
  },
  {
    "path": "resources/views/characters/races/reorder.blade.php",
    "content": "<x-form :action=\"['characters.races.save', $campaign, $character]\">\n    @include('partials.forms._dialog', [\n        'title' => __('characters.races.title2'),\n        'content' => 'characters.races._reorder',\n    ])\n</x-form>\n"
  },
  {
    "path": "resources/views/components/ad.blade.php",
    "content": "@if (!$script)<div class=\"{{ uniqid(\"ven-ad-\") }}\">@endif\n{!! $slot !!}\n@if (!$script)</div>@endif\n"
  },
  {
    "path": "resources/views/components/ads/native.blade.php",
    "content": "<?php /** @var \\App\\Models\\Ad $ad */?>\n<div @if ($ad->isSidebar())\n    class=\"ads-space nativead-manager text-center\" data-video=\"true\"\n@else\n    class=\"ads-space overflow-hidden nativead-manager text-center\" data-video=\"true\" style=\"max-height: 228px;\"\n@endif\n>\n    {!! $ad->html !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/alert.blade.php",
    "content": "@php $unique = 'alert-' . uniqid(); @endphp\n<div class=\"alert alert-{{ $type }} {!! $class ?? null !!} border-0 rounded-2xl p-4 flex shadow-xs gap-2 items-center {{ $hidden ? 'hidden' : null }}\n@if ($dismissible) opacity-100 duration-150 transition-opacity {{ $unique }} @endif\"\n     @if ($id) id=\"{{ $id }}\" @endif\n>\n    <div class=\"grow flex flex-col gap-2\">\n        {!! $slot !!}\n    </div>\n    @if ($dismissible)\n    <div class=\"flex-none\">\n        <button type=\"button\" class=\"text-xl opacity-50 hover:opacity-100 focus:opacity-100 cursor-pointer text-decoration-none\" data-dismisses=\".{{ $unique }}\" aria-label=\"{{ __('Close') }}\">\n            <x-icon class=\"fa-regular fa-circle-xmark\" />\n            <span class=\"sr-only\">{{ __('Close') }}</span>\n    </div>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/components/badge.blade.php",
    "content": "<div class=\"badge flex gap-1 items-center {{ $colour }} {{ $css }}\" @if ($title) data-toggle=\"tooltip\" data-title=\"{!! $title !!}\" @endif\n>\n    {!! $slot !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/box/footer.blade.php",
    "content": "<div class=\"box-footer flex flex-col gap-5\">\n    <hr />\n    {!! $slot !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/box.blade.php",
    "content": "<div {{ $attributes->merge(['class' => 'rounded-lg ' . ($padding ? 'p-4' : ''). ' shadow-xs bg-box w-full transition-all duration-150']) }}\n@if(!empty($id)) id=\"{{ $id }}\" @endif\n@if ($url) data-url=\"{{ $url }}\" @endif\n@if ($href) href=\"{{ $href }}\" @endif\n@foreach ($extra as $k => $v) data-{{ $k }}=\"{{ $v }}\" @endforeach\n>\n    @if (isset($title))\n        <div class=\"text-2xl mb-6 font-light\">{{ $title }}</div>\n    @endif\n    {!! $slot !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/button/delete-confirm.blade.php",
    "content": "<a role=\"button\" tabindex=\"0\" class=\"btn2 btn-error btn-outline transform duration-200 @if ($size === 'sm') btn-sm @endif {{ $css ?? null }}\"\n   data-toggle=\"confirm-delete\"\n   data-confirm=\"{{ __('crud.delete_modal.confirm') }}\"\n   data-target=\"{{ $target }}\"\n>\n    <x-icon class=\"trash\" />\n        <span class=\"hidden @if(!$iconOnly) md:inline @endif\">{{ $text ?? __('crud.remove') }}</span>\n</a>\n"
  },
  {
    "path": "resources/views/components/buttons/confirm-delete.blade.php",
    "content": "<div x-data=\"{ confirm: false }\" @click.away=\"confirm = false\" class=\"btn2 btn-error btn-outline btn-sm\">\n    <form method=\"POST\" action=\"{{ $route }}\">\n        @csrf\n        <input type=\"hidden\" name=\"_method\" value=\"DELETE\" />\n        <button type=\"button\" @click=\"confirm ? $el.closest('form').submit() : confirm = true\">\n            <x-icon class=\"trash\" />\n            <span x-text=\"confirm ? '{{ __($confirm) }}' : '{{ __($delete) }}'\"></span>\n        </button>\n        {!! $slot !!}\n    </form>\n</div>\n"
  },
  {
    "path": "resources/views/components/buttons/confirm.blade.php",
    "content": "<{{ $element }}\n    class=\"btn2 btn-primary {{ $sizes }}\n    @if ($full) w-full @endif {{ $colours }}\"\n    @if ($target) data-toggle=\"dialog\" data-target=\"{{ $target }}\"@endif\n    @if ($name) name=\"{{ $name }}\"@endif\n    @if ($dismiss === 'dialog') onclick=\"this.closest('dialog').close('close')\"@endif\n    @if ($id) id=\"{{ $id }}\" @endif\n>\n    <div class=\"flex gap-2 items-center justify-center\">\n    {!! $slot !!}\n    </div>\n</{{ $element }}>\n"
  },
  {
    "path": "resources/views/components/campaigns/module-box.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\EntityType $entityType\n * @var \\App\\Models\\Campaign $campaign\n */\n?>\n<div class=\"module module-{{ $entityType->isStandard() ? 'standard' : 'custom'}} w-full @if ($enabled) bg-base-100 @else bg-base-200 @endif p-4 rounded-xl hover:shadow-xs flex flex-col gap-3 \">\n    <div class=\"flex justify-between items-center gap-2\">\n        <div class=\"flex gap-2 items-center text-lg\">\n            @if ($enabled)\n                <x-icon class=\"fa-regular fa-check-circle text-green-500\" tooltip title=\"{{ __('campaigns/modules.states.enabled') }}\" ></x-icon>\n            @else\n                <x-icon class=\"fa-regular fa-times text-red-500 text-xl\" tooltip title=\"{{ __('campaigns/modules.states.disabled') }}\" ></x-icon>\n            @endif\n            @if ($image)\n                <div class=\"w-6 h-6 rounded-full bg-cover bg-center overflow-hidden\">\n                    <div class=\"w-full h-full bg-cover bg-center transition-transform duration-300 hover:scale-125\n\" style=\"background-image: url('{{ $image }}')\"></div>\n                </div>\n            @else\n                <i class=\"{!! $entityType->icon() !!} @if (!$enabled) opacity-60 @endif\" aria-hidden=\"true\"></i>\n            @endif\n            <span class=\"break-all @if (!$enabled) text-neutral-content @endif\">\n                {!! $entityType->plural() !!}\n            </span>\n        </div>\n        <div class=\"flex gap-1 items-center\">\n            @can('update', $campaign)\n                <button\n                    class=\"btn2 btn-default btn-sm\"\n                    data-toggle=\"dialog\"\n                    @if ($entityType->isStandard())\n                    data-url=\"{{ route('modules.edit', [$campaign, $entityType]) }}\"\n                    @else\n                    data-url=\"{{ route('entity_types.edit', [$campaign, $entityType]) }}\"\n                    @endif\n                    data-target=\"rename-dialog\"\n                    title=\"{{ __('campaigns/modules.actions.customise') }}\">\n                    <x-icon class=\"cog\"></x-icon>\n                    {{ __('crud.edit') }}\n                </button>\n            @endcan\n        </div>\n    </div>\n\n\n    @if ($entityType->isDeprecated())\n        <div class=\"rounded-xl border border-base-300 px-2 py-0.5 bg-base-300\" data-toggle=\"tooltip\" data-title=\"{{ __('campaigns.settings.deprecated.help') }}\">\n            <span >\n                ⚠️\n                {{ __('campaigns.settings.deprecated.title') }}\n            </span>\n            <span class=\"md:hidden\">{{ __('campaigns.settings.deprecated.help') }}</span>\n        </div>\n    @endif\n\n    <p class=\"text-neutral-content text-xs text-break\">\n        @if ($entityType->isStandard())\n            {{ __('campaigns.settings.helpers.' . $entityType->pluralCode()) }}\n        @else\n            {{ __('crud.history.created_date_clean', ['date' => $entityType->created_at->diffForHumans()]) }}.\n        @endif\n    </p>\n</div>\n"
  },
  {
    "path": "resources/views/components/character-sheet.blade.php",
    "content": "<div class=\"marketplace-template-{{ $plugin->plugin->uuid }}\">\n    {!! $renderer->render() !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/checkbox.blade.php",
    "content": "<label class=\"font-normal text-neutral-content flex gap-2\"\n@if (!empty($dataProperties)) @foreach ($dataProperties as $key => $val) data-{{ $key }}=\"{{ $val }}\" @endforeach\n    @endif>\n    <div class=\"flex gap-2\">\n        <span>{!! $slot !!}</span>\n        <div class=\"select-none cursor-pointer flex flex-col gap-1\">\n            <p>{!! $text !!}</p>\n            @if (isset($extra)) {!! $extra !!} @endif\n        </div>\n    </div>\n</label>\n"
  },
  {
    "path": "resources/views/components/dashboards/widgets/selection.blade.php",
    "content": "<a href=\"#\" class=\"flex gap-4 p-2 px-3 rounded-xl border border-base-300 items-center text-base-content hover:text-primary hover:border-primary focus:border-primary hover:shadow-xs\" data-url=\"{{ route('campaign_dashboard_widgets.create', [$campaign, 'widget' => $widget->value, 'dashboard' => $dashboard]) }}\" data-toggle=\"dialog\">\n    <x-icon class=\"fa-regular {{ $icon }} text-xl\" />\n    <div class=\"flex flex-col gap-0\">\n        <p>{{ __('dashboards/widgets/' . $widget->value . '.name') }}</p>\n        <p class=\"text-neutral-content text-xs\">\n            {{ __('dashboards/widgets/' . $widget->value . '.description') }}\n        </p>\n    </div>\n</a>\n"
  },
  {
    "path": "resources/views/components/date.blade.php",
    "content": "<span data-format=\"{{ $format() }}\" data-date=\"{{ $date }}\">\n    {!! $formatted !!}\n</span>\n"
  },
  {
    "path": "resources/views/components/dialog/article.blade.php",
    "content": "<article {{ $attributes->merge(['class' => \"py-4 px-4 md:px-6\"]) }}>\n    {{ $slot }}\n</article>\n"
  },
  {
    "path": "resources/views/components/dialog/close.blade.php",
    "content": "<button type=\"button\" class=\"text-2xl opacity-60 hover:opacity-100 hover:bg-base-200 focus:bg-base-200 cursor-pointer w-8 h-8 flex items-center justify-center rounded-lg\" data-dismiss=\"{{ $dismiss ?? 'modal' }}\" title=\"{{ __('crud.actions.close') }}\" @if (!empty($id)) id=\"{{ $id }}-close\" @endif onclick=\"this.closest('dialog').close('close')\" aria-label=\"Close dialog\" >\n    <svg class=\"w-3 h-3\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\">\n        <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\"></path>\n    </svg>\n</button>\n"
  },
  {
    "path": "resources/views/components/dialog/footer.blade.php",
    "content": "<div {{ $attributes->merge(['class' => 'mt-5 flex gap-2 md:gap-5 text-left w-full justify-between p-4 md:p-6']) }}>\n    @if (isset($cancel))\n        {!! $cancel !!}\n    @else\n    <menu class=\"flex flex-wrap gap-3 ps-0 ms-0\">\n        <button type=\"button\" class=\"btn2 btn-outline\" onclick=\"this.closest('dialog').close('close')\">\n            {{ __('crud.cancel') }}\n        </button>\n    </menu>\n    @endif\n    {!! $slot !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/dialog/header.blade.php",
    "content": "<header class=\"flex gap-6 items-center p-4 md:p-6 justify-between\">\n    <h4 id=\"dialog-label-{{ $id }}\" class=\"text-lg font-normal\">\n        {!! $slot !!}\n    </h4>\n    @if ($dismissible)\n    <x-dialog.close id=\"$id\" />\n    @endif\n</header>\n"
  },
  {
    "path": "resources/views/components/dialog.blade.php",
    "content": "<dialog class=\"dialog rounded-t-2xl md:rounded-2xl bg-base-100 min-w-fit shadow-sm text-base-content mx-auto\" id=\"{{ $id }}\" aria-modal=\"true\" aria-hidden=\"true\" aria-labelledby=\"dialog-label-{{ $id }}\" @if (!$dismissible) data-dismissible=\"false\" @endif>\n    <x-dialog.header :id=\"$id\">\n        @if ($loading)\n            {{ __('Loading') }}\n        @else\n            {!! $title !!}\n        @endif\n    </x-dialog.header>\n    @if (!empty($form)) {!! $form !!} @endif\n        <article class=\"py-4 px-4 md:px-6 @if (!$full) max-w-2xl @endif\">\n            @if ($loading)\n                <div class=\"my-8 text-center text-lg w-40\">\n                    <x-icon class=\"load\" />\n                </div>\n            @endif\n            {{ $slot }}\n        </article>\n        @if (isset($footer))\n            <x-dialog.footer>\n                @includeIf($footer)\n            </x-dialog.footer>\n        @endif\n    @if (!empty($form)) </form> @endif\n</dialog>\n"
  },
  {
    "path": "resources/views/components/dropdowns/divider.blade.php",
    "content": "<hr class=\"my-1 mx-3\" />\n"
  },
  {
    "path": "resources/views/components/dropdowns/item.blade.php",
    "content": "<a\n    href=\"{{ $link }}\"\n    @if (isset($target)) target=\"_blank\" @endif\n    class=\"{{ $css }} group px-2 py-2 hover:bg-base-200 rounded-xl flex items-center gap-1.5 transition-all duration-150 text-xs @if ($active) pointer-events-none @else text-base-content @endif \"\n    @if (isset($dialog)) data-toggle=\"dialog\" data-url=\"{{ $dialog }}\" @endif\n    @if (isset($popup)) data-toggle=\"dialog\" data-target=\"{{ $popup }}\" @endif\n    @if (isset($dataProperties))\n        @foreach ($dataProperties as $key => $prop)\n            data-{{ $key }}=\"{{ $prop }}\"\n        @endforeach\n    @endif\n>\n    <div class=\"flex gap-2 justify-between w-full\">\n        <div class=\"flex gap-1\">\n            @if (isset($icon))\n                <span class=\"shrink-0 w-6 text-neutral-content text-center flex-none\">\n                    <x-icon :class=\"$icon\" />\n                </span>\n            @endif\n            <span class=\"@if ($active) text-neutral-content  @endif\">\n            {!! $slot !!}\n            </span>\n        </div>\n        @if ($active)\n            <x-icon class=\"fa-regular fa-check\" />\n        @endif\n        @if (!empty($shortcut))\n            <span class=\"text-neutral-content hidden md:inline-block px-1\" data-title=\"Keyboard shortcut\" data-tooltip>\n                {!! $shortcut !!}\n            </span>\n        @endif\n    </div>\n</a>\n"
  },
  {
    "path": "resources/views/components/dropdowns/section.blade.php",
    "content": "<div class=\"px-2 py-2 mt-2 text-neutral-content text-xs font-medium flex items-center gap-1.5\">\n    <div class=\"w-4 shrink-0\"></div>\n    {!! $slot !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/entities/submenu.blade.php",
    "content": "<?php\nuse \\Illuminate\\Support\\Arr;\n?>\n<div class=\"hidden md:flex flex-col gap-5\">\n    @foreach ($items as $section => $menuItems)\n        <x-box class=\"entity-menu{{ $section }}\" :padding=\"0\">\n            <x-menu>\n                @foreach ($menuItems as $key => $menuItem)\n                    @if (Arr::has($menuItem, 'perm'))\n                        @cannot($menuItem['perm'], [$entity, $campaign])\n                            @continue\n                        @endcannot\n                    @endif\n                    <x-menu.element\n                        :active=\"!empty($active) && $active == $key\"\n                        :route=\"route($menuItem['route'], [$campaign, (!isset($menuItem['entity']) ? $entity->child : $entity)])\"\n                        :badge=\"$menuItem['count'] ?? 0\"\n                        :button=\"$menuItem['button'] ?? null\"\n                        :ajax=\"Arr::get($menuItem, 'ajax') ? route($menuItem['route'], [$campaign, (!isset($menuItem['entity']) ? $entity->child : $entity)]) : null\"\n                        :id=\"$menuItem['id'] ?? null\"\n                    >\n                        {!! $menuItem['name'] !!}\n                    </x-menu.element>\n\n                @endforeach\n            </x-menu>\n        </x-box>\n    @endforeach\n</div>\n\n@php $firstBlock = true @endphp\n<div class=\"md:hidden\" id=\"sm-a\">\n    <select name=\"menu-switcher\" class=\"w-full submenu-switcher\">\n        @foreach ($items as $section => $menuItems)\n            @if (!$firstBlock)\n                <option disabled>----</option>\n            @endif\n            @foreach ($menuItems as $key => $menuItem)\n                <option\n                    name=\"{{ $key }}\"\n                    data-route=\"{{ route($menuItem['route'], [$campaign, (!isset($menuItem['entity']) ? $entity->child : $entity)]) }}\"\n                    @if($key == $active) selected=\"selected\" @endif\n                    @if(Arr::get($menuItem, 'ajax')) data-toggle=\"dialog\" data-url=\"{{ route($menuItem['route'], [$campaign, (!isset($menuItem['entity']) ? $entity->child : $entity)]) }}\" @endif\n                >\n                    {{  $menuItem['name'] }}\n                    @if (!empty($menuItem['count']))\n                        ({{ $menuItem['count'] }})\n                    @endif\n                </option>\n            @endforeach\n            @php $firstBlock = false @endphp\n        @endforeach\n    </select>\n</div>\n"
  },
  {
    "path": "resources/views/components/entities/thumbnail.blade.php",
    "content": "<a class=\"entity-image overflow-hidden rounded-full w-10 h-10\"\n    title=\"{{ $title }}\"\n    href=\"{{ $entity->url() }}\">\n    <img alt=\"{{ $title }}\" loading=\"lazy\" src=\"{{ Avatar::entity($entity)->size($size)->fallback()->thumbnail() }}\" />\n</a>\n"
  },
  {
    "path": "resources/views/components/entity-link.blade.php",
    "content": "<a class=\"name text-link\"\n   data-toggle=\"tooltip-ajax\"\n   data-id=\"{{ $entity->id }}\"\n   data-url=\"{{ route('entities.tooltip', [$campaign, $entity->id]) }}\"\n   data-theme=\"entity-tooltip\"\n@if ($bottom) data-placement=\"bottom\" @endif\n   href=\"{{ $entity->url('show', $bookmark ? ['bookmark' => $bookmark] : []) }}{{ $post() }}\">\n    @if(isset($slot) && $slot->isNotEmpty()) {!! $slot !!} @else {!! $entity->name !!} @endif</a>\n"
  },
  {
    "path": "resources/views/components/faq-element.blade.php",
    "content": "<div\n    class=\"bg-base-100 rounded-2xl shadow-xs hover:shadow-md overflow-hidden\"\n>\n    <button class=\"flex justify-between items-center w-full gap-2 px-6 py-4 text-left focus:outline-none\" data-animate=\"collapse\" data-target=\"#{{ $id }}\">\n        <span class=\"text-lg font-medium\">{{ $question }}</span>\n        <svg class=\"flex-none w-5 h-5 transition-transform\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n        </svg>\n    </button>\n\n    <div id=\"{{ $id }}\" class=\"hidden px-6 pb-4 text-neutral-content\">\n        {!! $answer !!}\n    </div>\n\n    <!-- Order your soul. Reduce your wants. - Augustine -->\n</div>\n"
  },
  {
    "path": "resources/views/components/form/abilities.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n * @var \\App\\Models\\MiscModel $model\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model', null);\n$enableNew = Arr::get($options, 'enableNew', true);\n$label = Arr::get($options, 'label', true);\n$filterOptions = Arr::get($options, 'filterOptions', []);\nif (!is_array($filterOptions)) {\n    $filterOptions = [$filterOptions];\n}\n// From source to exclude duplicates\n$searchParams = [$campaign, config('entities.ids.ability')];\nif (Arr::has($options, 'exclude', false)) {\n    $searchParams['exclude'] = Arr::get($options, 'exclude');\n} elseif (Arr::has($options, 'exclude-entity', false)) {\n    $searchParams['exclude-entity'] = Arr::get($options, 'exclude-entity');\n}\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('abilities[]');\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model) && !empty($model->entity)) {\n    foreach ($model->entity->abilities()->with('entity')->has('entity')->get() as $ability) {\n        $selectedOption[$ability->id] = $ability;\n    }\n} elseif (!empty($filterOptions)) {\n    foreach ($filterOptions as $abilityId) {\n        if (!empty($abilityId)) {\n            $ability = \\App\\Models\\Ability::find($abilityId);\n            if ($ability) {\n                $selectedOption[$ability->id] = $ability;\n            }\n        }\n    }\n}\n?>\n@if ($label)\n<label>\n    {!! \\App\\Facades\\Module::plural(config('entities.ids.ability'), __('entities.abilities')) !!}\n</label>\n@endif\n\n<select\n    multiple=\"multiple\"\n    name=\"abilities[]\"\n    id=\"{{ Arr::get($options, 'id', 'abilities[]') }}\"\n    class=\"w-full form-tags form-abilities\"\n    style=\"width: 100%\"\n    data-url=\"{{ route('search-list', $searchParams) }}\"\n    data-allow-new=\"{{ $enableNew ? 'true' : 'false' }}\"\n    data-allow-clear=\"{{ Arr::get($options, 'allowClear', 'true') }}\"\n    data-new-tag=\"{{ __('abilities.new_ability') }}\"\n    data-placeholder=\"\"\n    @if (!empty($dropdownParent)) data-dropdown-parent=\"{{ $dropdownParent }}\" @endif\n>\n    @foreach ($selectedOption as $key => $ability)\n        <option value=\"{{ $key }}\" class=\"select2-ability\" selected=\"selected\">{{ $ability->name }}</option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/components/form/characters.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model');\n$dynamicNew = Arr::get($options, 'dynamicNew', false);\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('characters[]');\n$fieldUniqIdentifier = 'characters_' . uniqid();\n\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model) ) {\n    /** @var \\App\\Models\\Character $character */\n    foreach ($model->members() as $character) {\n        $selectedOption[$character->character->id] = strip_tags($character->character->name);\n    }\n}\n?>\n\n<x-forms.field\n    field=\"characters\"\n    :required=\"$required\"\n    :label=\"\\App\\Facades\\Module::plural(config('entities.ids.character'), __('entities.characters'))\">\n\n<select multiple=\"multiple\" name=\"characters[]\" class=\"w-full select2 join-item\" data-tags=\"true\" style=\"width: 100%\" data-url=\"{{ route('search-list', [$campaign, config('entities.ids.character')]) }}\" data-new-tag=\"{{ __('crud.actions.new') }}\" data-allow-clear=\"true\" data-allow-new=\"{{ $dynamicNew ? 'true' : 'false' }}\" data-placeholder=\"\" id=\"{{ $fieldUniqIdentifier }}\">\n    @foreach ($selectedOption as $key => $val)\n        <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n    @endforeach\n</select>\n\n</x-forms.field>\n\n\n"
  },
  {
    "path": "resources/views/components/form/entity_types.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$types = \\App\\Models\\EntityType::inCampaign($campaign)->where('code', '<>', 'bookmark')->orderBy('code')->get();\n$entityTypes = [];\n\nforeach ($types as $option) {\n    $entityTypes[] = ['id' => $option->id, 'name' => $option->name];\n}\n\n$names = array_column($entityTypes, 'name');\narray_multisort($names, SORT_ASC, $entityTypes);\n\n$showEmpty = Arr::get($options, 'show-empty', true);\n$model = Arr::get($options, 'model', null);\n$fieldId = 'entity_type_id';\n?>\n\n<label>{{ __($label ?? 'campaigns/categories.tab') }}</label>\n<select name=\"{{ $fieldId }}\" class=\"w-full select2-local\" style=\"width: 100%\" data-language=\"{{ LaravelLocalization::getCurrentLocale() }}\" data-placeholder=\"{{ __('colours.none') }}\">\n    <option value=\"\"></option>\n    @foreach ($entityTypes as $option)\n        <option value=\"{{ $option['id'] }}\" @if ($model && $model->id == $option['id']) selected=\"selected\" @endif>{{ $option['name'] }}</option>\n    @endforeach\n</select>\n\n"
  },
  {
    "path": "resources/views/components/form/families.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model');\n$dynamicNew = Arr::get($options, 'dynamicNew', false);\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('families[]');\n$fieldUniqIdentifier = 'families_' . uniqid();\n\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model)) {\n    /** @var \\App\\Models\\Family $family */\n    foreach ($model->characterFamilies as $family) {\n        $selectedOption[$family->family->id] = strip_tags($family->family->name);\n    }\n}\n?>\n\n<x-forms.field\n    field=\"families\"\n    :label=\"\\App\\Facades\\Module::plural(config('entities.ids.family'), __('entities.families'))\">\n\n\n<select\n    multiple=\"multiple\"\n    name=\"families[]\"\n    class=\"w-full select2 join-item\"\n    data-tags=\"true\"\n    style=\"width: 100%\"\n    data-url=\"{{ route('search-list', [$campaign, config('entities.ids.family')]) }}\"\n    data-new-tag=\"{{ __('crud.actions.new') }}\"\n    data-allow-clear=\"true\"\n    data-placeholder=\"{{ __('crud.placeholders.search') }}\"\n    data-allow-new=\"{{ $dynamicNew ? 'true' : 'false' }}\"\n    data-placeholder=\"\"\n    id=\"{{ $fieldUniqIdentifier }}\">\n    @foreach ($selectedOption as $key => $val)\n        <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n    @endforeach\n</select>\n\n</x-forms.field>\n\n"
  },
  {
    "path": "resources/views/components/form/family_members.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model', null);\n$source = Arr::get($options, 'source', null);\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('members');\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model)) {\n    /** @var \\App\\Models\\Character $member */\n    foreach ($model->members()->has('entity')->with('entity')->get() as $member) {\n        // If this is a copy, we need to add the member's real id. Also no copying of roles in this constellation\n        if (!empty($source)) {\n            $selectedOption[$member->id] = strip_tags($member->name);\n        } else {\n            $selectedOption['m_' . $member->id] = strip_tags($member->name);\n        }\n    }\n}\n?>\n<label>{{ __('organisations.fields.members') }}</label>\n\n<select multiple=\"multiple\" name=\"members[]\" id=\"members\" class=\"w-full form-members\" style=\"width: 100%\" data-url=\"{{ route('search-list', [$campaign, config('entities.ids.character'), 'with-family' => '1']) }}\" data-placeholder=\"{{ __('crud.placeholders.search') }}\">\n    @foreach ($selectedOption as $key => $val)\n        <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/components/form/genres.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\nuse App\\Models\\Genre;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model');\n$genres = Genre::get();\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('genres[]');\n$fieldUniqIdentifier = 'genres_' . uniqid();\n\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model)) {\n    /** @var \\App\\Models\\Genre $genre */\n    foreach ($model->genres as $genre) {\n        $selectedOptions[$genre->id] = __('genres.' . $genre->slug);\n    }\n}\n?>\n\n<select multiple=\"multiple\" name=\"genres[]\" class=\"w-full select2 join-item campaign-genres\" style=\"width: 100%\" data-placeholder=\"\" id=\"{{ $fieldUniqIdentifier }}\">\n    @foreach ($genres as $genre)\n        <option value=\"{{ $genre->id }}\" @if (!empty($selectedOptions[$genre->id])) selected=\"selected\" @endif>{{ __('genres.' . $genre->slug) }}</option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/components/form/locations.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model');\n$source = Arr::get($options, 'source');\n$dynamicNew = Arr::get($options, 'dynamicNew', false);\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('locations[]');\n$fieldUniqIdentifier = 'locations_' . uniqid();\n\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model)) {\n    /** @var \\App\\Models\\Location $location */\n    // Get locations from entity for models using entity_locations (Character, Organisation, Race, Creature)\n    $locationsSource = $model->entity?->locations ?? $model->locations ?? collect();\n    foreach ($locationsSource as $location) {\n        $selectedOption[$location->id] = strip_tags($location->name);\n    }\n}\n?>\n\n<x-forms.field\n    field=\"locations\"\n    :label=\"\\App\\Facades\\Module::plural(config('entities.ids.location'), __('entities.locations'))\">\n\n\n<select\n    multiple=\"multiple\"\n    name=\"locations[]\"\n    class=\"w-full select2 join-item\"\n    data-tags=\"true\" style=\"width: 100%\"\n    data-url=\"{{ route('search-list', [$campaign, config('entities.ids.location')]) }}\"\n    data-allow-clear=\"true\"\n    data-new-tag=\"{{ __('crud.actions.new') }}\"\n    data-allow-new=\"{{ $dynamicNew ? 'true' : 'false' }}\"\n    data-placeholder=\"{{ __('crud.placeholders.search') }}\"\n    id=\"{{ $fieldUniqIdentifier }}\">\n    @foreach ($selectedOption as $key => $val)\n        <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n    @endforeach\n</select>\n\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/components/form/members.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model', null);\n$source = Arr::get($options, 'source', null);\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('members[]');\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model)) {\n    /** @var \\App\\Models\\OrganisationMember $member */\n    foreach ($model->members()->has('character')->with('character')->get() as $member) {\n        // If this is a copy, we need to add the member's real id. Also no copying of roles in this constellation\n        if (!empty($source)) {\n            $selectedOption[$member->character_id] = strip_tags($member->character->name);\n        } else {\n            $selectedOption['m_' . $member->id] = strip_tags($member->character->name) . (!empty($member->role) ? ' (' . strip_tags($member->role) . ')' : null);\n        }\n    }\n}\n?>\n<label>{{ __('organisations.fields.members') }}</label>\n\n<select multiple=\"multiple\" name=\"members[]\" id=\"members\" class=\" form-members\" style=\"width: 100%\" data-url=\"{{ route('search-list', [$campaign, config('entities.ids.character')]) }}\" data-placeholder=\"{{ __('crud.placeholders.search') }}\">\n    @foreach ($selectedOption as $key => $val)\n        <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/components/form/organisations.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model', null);\n$source = Arr::get($options, 'source', null);\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('organisations[]');\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model)) {\n    /** @var \\App\\Models\\OrganisationMember $member */\n    foreach ($model->organisations as $organisation) {\n        $selectedOption[$organisation->id] = strip_tags($organisation->name);\n    }\n}\n?>\n<label>{{ \\App\\Facades\\Module::plural(config('entities.ids.organisation'), __('entities.organisations')) }}</label>\n\n<select multiple=\"multiple\" name=\"organisations[]\" class=\" select2\" data-tags=\"true\" style=\"width: 100%\" data-url=\"{{ route('search-list', [$campaign, config('entities.ids.organisation')]) }}\" data-allow-clear=\"true\" data-allow-new=\"false\" data-placeholder=\"\">\n    @foreach ($selectedOption as $key => $val)\n        <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/components/form/playstyles.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\nuse App\\Models\\Playstyle;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOptions = [];\n\n$model = Arr::get($options, 'model');\n$playstyles = Playstyle::get();\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('playstyles');\n$fieldUniqIdentifier = 'playstyles_' . uniqid();\n\nif (!empty($previous)) {\n    foreach ($previous as $id) {\n        $selectedOptions[$id] = true;\n    }\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model)) {\n    /** @var \\App\\Models\\Playstyle $playstyle */\n    foreach ($model->playstyles as $playstyle) {\n        $selectedOptions[$playstyle->id] = __('playstyles.' . $playstyle->slug);\n    }\n}\n?>\n\n<select multiple=\"multiple\" name=\"playstyles[]\" class=\"w-full select2 join-item campaign-playstyles\" style=\"width: 100%\" data-placeholder=\"\" id=\"{{ $fieldUniqIdentifier }}\">\n    @foreach ($playstyles as $playstyle)\n        <option value=\"{{ $playstyle->id }}\" @if (!empty($selectedOptions[$playstyle->id])) selected=\"selected\" @endif>{{ __('playstyles.' . $playstyle->slug) }}</option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/components/form/races.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n\n$model = Arr::get($options, 'model');\n$dynamicNew = Arr::get($options, 'dynamicNew', false);\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('races[]');\n$fieldUniqIdentifier = 'races_' . uniqid();\n\nif (!empty($previous)) {\n    //dd($previous);\n}\n// If we didn't get anything, and there is a model sent, use that\nelseif(!empty($model)) {\n    /** @var \\App\\Models\\Race $race */\n    foreach ($model->characterRaces as $race) {\n        $selectedOption[$race->race->id] = strip_tags($race->race->name);\n    }\n}\n?>\n<x-forms.field\n    field=\"races\"\n    :label=\"\\App\\Facades\\Module::plural(config('entities.ids.race'), __('entities.races'))\">\n\n    <select\n        id=\"{{ $fieldUniqIdentifier }}\"\n        multiple=\"multiple\"\n        name=\"races[]\"\n        class=\" select2 join-item\"\n        data-tags=\"true\"\n        style=\"width: 100%\"\n        data-url=\"{{ route('search-list', [$campaign, config('entities.ids.race')]) }}\"\n        data-placeholder=\"{{ __('crud.placeholders.search') }}\"\n        data-allow-clear=\"true\"\n        data-allow-new=\"{{ $dynamicNew ? 'true' : 'false' }}\"\n        data-new-tag=\"{{ __('crud.actions.new') }}\"\n        data-placeholder=\"\">\n        @foreach ($selectedOption as $key => $val)\n            <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n        @endforeach\n    </select>\n\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/components/form/role.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n$model = Arr::get($options, 'model');\n$roles = Arr::get($options, 'roles', false);\n\n// Try to load what was sent with the form first, in case there was a form validation error\n$previous = old('userRoles[]');\n$fieldUniqIdentifier = 'user_roles_' . uniqid();\n\nif(!empty($model) && !empty($roles)) {\n    foreach ($roles as $role) {\n        if ($campaignUser->user->hasCampaignRole($role->id)) {\n            $selectedOption[$role->id] = strip_tags($role->name);\n        }\n    }\n}\n\n$dropdownParent = Arr::get($options, 'dropdownParent');\n$multiple = Arr::get($options, 'multiple');\n?>\n<select name=\"{{ $multiple ? 'roles[]' : 'role'}}\" id=\"{{ $multiple ? 'roles' : 'role'}}\"\n    class=\"select2 form-role w-100\"\n    @if (isset($multiple) && $multiple) multiple @endif\n    data-url=\"{{ route('roles.find', ['campaign' => $campaign, 'with-admin' => true]) }}\"\n    @if (!empty($dropdownParent)) data-dropdown-parent=\"{{ $dropdownParent }}\" @endif>\n\n    @foreach ($selectedOption as $key => $val)\n        <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/components/form/user.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Arr;\n/**\n * We want to pre-load the data from the model, or what has been sent with the form.\n */\n$selectedOption = [];\n$dropdownParent = Arr::get($options, 'dropdownParent');\n$multiple = Arr::get($options, 'multiple');\n?>\n<select name=\"{{ $multiple ? 'users[]' : 'user' }}\"\n        id=\"{{ $multiple ? 'users' : 'user' }}\"\n        @if (isset($multiple) && $multiple) multiple @endif\n        data-allow-clear=\"false\"\n        class=\" select2 form-role w-100\" data-url=\"{{ route('users.find', $campaign) }}\"\n        @if (!empty($dropdownParent)) data-dropdown-parent=\"{{ $dropdownParent }}\" @endif data-placeholder=\"{{ __('crud.placeholders.user') }}\">\n</select>\n"
  },
  {
    "path": "resources/views/components/form.blade.php",
    "content": "<form\n    method=\"{{ $method == 'GET' ? 'GET' : 'POST' }}\"\n    action=\"{{ $action() }}\"\n    role=\"form\"\n@if (in_array($method, ['POST', 'PATCH']) && !$direct)    data-maintenance=\"1\" @endif\n@if ($files) enctype=\"multipart/form-data\" @endif\n@if ($unsaved) data-unload=\"1\" @endif\n@if ($shortcut && $method !== 'DELETE') data-shortcut=\"1\" @endif\n    class=\"w-full {{ $class }}\"\n@if (!empty($id)) id=\"{{ $id }}\" @endif\n\n{!! $extra() !!}\n>\n    @if ($method !== 'GET')\n        @csrf\n    @endif\n    @if (!in_array($method, ['GET', 'POST']))\n        <input type=\"hidden\" name=\"_method\" value=\"{{ $method }}\">\n    @endif\n    {!! $slot !!}\n</form>\n"
  },
  {
    "path": "resources/views/components/forms/field.blade.php",
    "content": "<div class=\"field field-{{ $field }} flex flex-col gap-1 {{ $css ?? null }}\n    @if ($hidden) hidden @endif\"\n     @if ($attributes->has('x-show')) x-show=\"{{ $attributes->get('x-show') }}\" @endif\n>\n    @if (isset($label) && !empty($label))\n        <div class=\"flex items-center justify-between @if (isset($required) && $required) required @endif\">\n            <label class=\"\" @if (isset($id)) for=\"{{ $id }}\" @endif>\n                <span class=\"text-xs font-medium opacity-80\">{!! $label !!}</span>\n                @if ($tooltip && isset($helper))\n                    @if (isset($link))\n                        <a href=\"{{ $link }}\" class=\"text-link\">\n                            <x-helpers.tooltip :title=\"$helper\" />\n                        </a>\n                    @else\n                        <x-helpers.tooltip :title=\"$helper\" />\n                    @endif\n                @endif\n            </label>\n            @isset($action)\n                {!! $action !!}\n            @endisset\n        </div>\n    @endif\n    {!! $slot !!}\n    @if (isset($helper) && !empty($helper))\n        <p class=\"m-0 text-neutral-content text-xs @if ($tooltip) md:hidden @endif\">\n            <x-icon class=\"fa-regular fa-circle-info\" />\n            {!! $helper !!}\n            @if (isset($link))\n                <a href=\"{{ $link }}\" class=\"text-link\">\n                    <x-icon class=\"fa-regular fa-book\" />\n                    {{ __('general.documentation') }}\n                </a>\n            @endif\n        </p>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/components/forms/foreign.blade.php",
    "content": "\n<x-forms.field\n    field=\"{{ $key }}\"\n    :required=\"$required\"\n    :label=\"__($label)\"\n    :helper=\"$helper\"\n>\n\n    <select\n            @if ($multiple) multiple=\"multiple\" @endif\n            name=\"{{ $name }}\"\n            id=\"{{ $id }}\"\n            class=\"w-full select2 join-item\"\n            style=\"width: 100%\"\n            data-url=\"{{ $route }}\"\n            data-placeholder=\"{!! $placeholder ?? __('crud.placeholders.parent') !!}\"\n            data-allow-new=\"{{ ($canNew || $dynamicNew) ? 'true' : 'false' }}\"\n            data-new-tag=\"{{ __('crud.actions.new') }}\"\n            data-language=\"{{ LaravelLocalization::getCurrentLocale() }}\"\n            data-allow-clear=\"{{ $allowClear ? 'true' : 'false' }}\"\n            @if (!empty($dropdownParent)) data-dropdown-parent=\"{{ $dropdownParent }}\" @endif\n            @if ($dynamicNew) data-new-tag=\"{{ $dynamicTag ?? __('crud.actions.new') }}\" @endif\n    >\n        @foreach ($options as $key => $value)\n            <option value=\"{{ $key }}\" selected=\"selected\">{!! $value !!}</option>\n        @endforeach\n    </select>\n\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/components/forms/select.blade.php",
    "content": "@if ($radio)\n    <div class=\"flex flex-col gap-2\">\n    @foreach ($options as $k => $v)\n        <div class=\"flex gap-2 items-center\">\n            <input type=\"radio\" name=\"{{ $name }}\" id=\"{{ $fieldId() . '_' . $k }}\" @if(isset($disabled) && isset($disabled[$k])) disabled='disabled' @endif value=\"{{ $k }}\" @if ($isSelected($k)) checked=\"checked\" @endif />\n            <label for=\"{{  $fieldId() . '_' . $k }}\" class=\"cursor-pointer\">{!! $v !!}</label>\n        </div>\n    @endforeach\n    </div>\n@else\n<select\n    name=\"{{ $name }}\"\n    id=\"{{ $fieldId() }}\"\n    class=\"w-full {{ $class }}\"\n@if ($required) required=\"required\" @endif\n@if ($multiple) multiple @endif\n@if (!empty($label)) aria-label=\"{!! $label !!}\" @endif\n@foreach ($extra as $k => $v)   {{ $k }}=\"{{ $v }}\" @endforeach\n@if ($attributes->has('x-model')) x-model=\"{{ $attributes->get('x-model') }}\" @endif\n>\n@foreach ($options as $k => $v)\n    @if (is_array($v))\n        <optgroup label=\"{{ $k }}\">\n            @foreach ($v as $k2 => $v2)\n                <option value=\"{{ $k2 }}\" @if ($isSelected($k2)) selected=\"selected\" @endif>{!! $v2 !!}</option>\n            @endforeach\n        </optgroup>\n    @else\n        <option value=\"{{ $k }}\" @if ($isSelected($k)) selected=\"selected\" @endif @foreach ($optionAttributes($k) as $ov => $ok) {{ $ov }}=\"{{ $ok }}\" @endforeach @if(isset($disabled) && isset($disabled[$k])) disabled='disabled' @endif >{!! $v !!}</option>\n    @endif\n@endforeach\n</select>\n@endif\n"
  },
  {
    "path": "resources/views/components/forms/tags.blade.php",
    "content": "\n@if (!empty($label))\n    <label>\n        <span class=\"text-xs font-medium opacity-80\">\n            {{ \\App\\Facades\\Module::plural(config('entities.ids.tag'), __('entities.tags')) }}\n        </span>\n        @if(!empty($helper))\n            <x-helpers.tooltip :title=\"$helper\" />\n        @endif\n    </label>\n@endif\n\n<select\n    multiple=\"multiple\"\n    name=\"tags[]\"\n    id=\"{{ $id }}\"\n    class=\"form-tags\"\n    data-url=\"{{ $model instanceof App\\Models\\Tag ? route('search-list', [$campaign, config('entities.ids.tag'), 'exclude' => $model->id] ) : route('search-list', [$campaign, config('entities.ids.tag')]) }}\"\n    data-allow-new=\"{{ $allowNew ? 'true' : 'false' }}\"\n    data-placeholder=\"{{ __('crud.placeholders.search') }}\"\n@if ($allowClear)   data-allow-clear=\"true\" @endif\n    data-new-tag=\"{{ __('tags.create.title') }}\"\n@if (!empty($dropdownParent))   data-dropdown-parent=\"{{ $dropdownParent }}\" @endif\n>\n    <?php /** @var \\App\\Models\\Tag $tag */?>\n    @foreach ($tags as $key => $tag)\n        <option value=\"{{ $key }}\" data-colour=\"{{ $tag->colour }}\" data-colour-style=\"{{ $tag->colourStyle() }}\" selected=\"selected\">{{ $tag->name }} </option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/components/forms/visibility-picker-field.blade.php",
    "content": "<?php\n/**\n * @var string $id\n * @var int $selected\n * @var array $options\n * @var array $iconMap\n * @var array $visibilityKeys\n * @var string $adminUrl\n * @var string $adminName\n * @var string $entityName\n * @var \\App\\Models\\Campaign $campaign\n */\n\n$adminLink = '<a href=\"' . e($adminUrl) . '\" class=\"text-link\">' . e($adminName) . '</a>';\n?>\n<span id=\"{{ $id }}\" class=\"visibility-picker-field\" data-selected=\"{{ $selected }}\">\n    <input type=\"hidden\" name=\"visibility_id\" value=\"{{ $selected }}\">\n    <button class=\"btn2 btn-outline visibility-picker-field-trigger\" type=\"button\">\n        <i class=\"{{ $iconMap[$selected] ?? 'fa-regular fa-eye' }}\" aria-hidden=\"true\"></i>\n        <span class=\"sr-only\">{{ __('visibilities.title') }}</span>\n    </button>\n\n    <div class=\"visibility-picker-field-dropdown hidden\" role=\"radiogroup\" aria-label=\"{{ __('visibilities.title') }}\">\n        <div class=\"flex flex-col gap-0.5 p-1 min-w-72\">\n            @foreach ($options as $value => $name)\n                <button\n                    type=\"button\"\n                    role=\"radio\"\n                    aria-checked=\"{{ $value === $selected ? 'true' : 'false' }}\"\n                    class=\"visibility-picker-field-option flex items-start gap-2.5 p-2 px-3 rounded-lg cursor-pointer text-left transition-colors hover:bg-base-200/50 {{ $value === $selected ? 'bg-primary/5 ring-1 ring-primary/30' : '' }}\"\n                    data-value=\"{{ $value }}\"\n                    data-icon=\"{{ $iconMap[$value] }}\"\n                    @if(count($options) === 1) disabled @endif\n                >\n                    <x-icon class=\"{{ $iconMap[$value] }} text-neutral-content mt-0.5 w-5 text-center shrink-0\" />\n                    <div class=\"flex flex-col gap-1 flex-1 min-w-0\">\n                        <span class=\"text-xs font-semibold\">{{ $name }}</span>\n                        <span class=\"text-xs text-neutral-content leading-relaxed\">\n                            {!! __('visibilities.picker.' . $visibilityKeys[$value], [\n                                'entity' => e($entityName),\n                                'admin' => $adminLink,\n                            ]) !!}\n                        </span>\n                    </div>\n                    <div class=\"visibility-picker-field-status w-5 shrink-0 mt-0.5 text-center\">\n                        @if ($value === $selected)\n                            <i class=\"fa-regular fa-check text-primary\" aria-hidden=\"true\"></i>\n                        @endif\n                    </div>\n                </button>\n            @endforeach\n        </div>\n    </div>\n</span>\n"
  },
  {
    "path": "resources/views/components/forms/visibility-picker.blade.php",
    "content": "<?php\n/**\n * @var string $id\n * @var string $url\n * @var int $selected\n * @var array $options\n * @var array $iconMap\n * @var string $adminUrl\n * @var string $adminName\n * @var string $entityName\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n */\n\n$visibilityKeys = [\n    \\App\\Enums\\Visibility::All->value => 'all',\n    \\App\\Enums\\Visibility::Admin->value => 'admin',\n    \\App\\Enums\\Visibility::AdminSelf->value => 'admin-self',\n    \\App\\Enums\\Visibility::Self->value => 'self',\n    \\App\\Enums\\Visibility::Member->value => 'member',\n];\n\n$adminLink = '<a href=\"' . e($adminUrl) . '\" class=\"text-link\">' . e($adminName) . '</a>';\n?>\n<span id=\"{{ $id }}\" class=\"visibility-picker\" data-selected=\"{{ $selected }}\" data-url=\"{{ $url }}\">\n    <button class=\"btn2 btn-sm visibility-picker-trigger\" type=\"button\">\n        <i class=\"{{ $iconMap[$selected] ?? 'fa-regular fa-eye' }}\" aria-hidden=\"true\"></i>\n        <span class=\"sr-only\">{{ __('visibilities.title') }}</span>\n    </button>\n\n    <div class=\"visibility-picker-dropdown hidden\" role=\"radiogroup\" aria-label=\"{{ __('visibilities.title') }}\">\n        <div class=\"flex flex-col gap-0.5 p-1 min-w-72\">\n            @foreach ($options as $value => $name)\n                <button\n                    type=\"button\"\n                    role=\"radio\"\n                    aria-checked=\"{{ $value === $selected ? 'true' : 'false' }}\"\n                    class=\"visibility-picker-option flex items-start gap-2.5 p-2 px-3 rounded-lg cursor-pointer text-left transition-colors hover:bg-base-200/50 {{ $value === $selected ? 'bg-primary/5 ring-1 ring-primary/30' : '' }}\"\n                    data-value=\"{{ $value }}\"\n                    data-icon=\"{{ $iconMap[$value] }}\"\n                    @if(count($options) === 1) disabled @endif\n                >\n                    <x-icon class=\"{{ $iconMap[$value] }} text-neutral-content mt-0.5 w-5 text-center shrink-0\" />\n                    <div class=\"flex flex-col gap-1 flex-1 min-w-0\">\n                        <span class=\"text-xs font-semibold\">{{ $name }}</span>\n                        <span class=\"text-xs text-neutral-content leading-relaxed\">\n                            {!! __('visibilities.picker.' . $visibilityKeys[$value], [\n                                'entity' => e($entityName),\n                                'admin' => $adminLink,\n                            ]) !!}\n                        </span>\n                    </div>\n                    <div class=\"visibility-picker-status w-5 shrink-0 mt-0.5 text-center\">\n                        @if ($value === $selected)\n                            <i class=\"fa-regular fa-check text-primary\" aria-hidden=\"true\"></i>\n                        @endif\n                    </div>\n                </button>\n            @endforeach\n        </div>\n    </div>\n</span>\n"
  },
  {
    "path": "resources/views/components/grid.blade.php",
    "content": "<?php /** @var \\Illuminate\\View\\ComponentAttributeBag $attributes */?>\n<div class=\"flex flex-col @if ($type !== '1/1') md:grid @endif gap-4 md:gap-6 xl:gap-8 w-full\n@if ($type === '3/4') grid-cols-4\n@elseif ($type === '3/3') md:grid-cols-3\n@elseif ($type !== '1/1') grid-cols-1 md:grid-cols-2 @endif\n{{ $attributes->get('class') }}\n@if ($hidden) hidden @endif\"\n@if ($id) id=\"{{ $id }}\" @endif\n@if ($show) x-show=\"{{ $show }}\" @endif\n@if ($xdata) x-data=\"{{ $xdata }}\" @endif\n>\n    {!! $slot !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/helper.blade.php",
    "content": "<div {{ $attributes->merge(['class' => \"text-neutral-content help-block flex flex-col gap-2\"]) }}>\n    {!! $slot !!}\n\n    @if (!empty($docs))\n        <a href=\"https://docs.kanka.io/en/latest/{{ $docs }}\" class=\"text-link\">\n            <x-icon class=\"fa-regular fa-book\" />\n            @if (empty($doc))\n            {{ __('general.documentation') }}\n            @else\n            {!! $doc !!}\n            @endif\n        </a>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/components/helpers/tooltip.blade.php",
    "content": "<span class=\"hidden md:inline\" data-toggle=\"tooltip\" data-title=\"{{ $title }}\" @if ($html) data-html=\"true\" @endif @if (request()->ajax()) data-append=\"parent\" @endif>\n    <x-icon class=\"question\" />\n</span>\n"
  },
  {
    "path": "resources/views/components/hero.blade.php",
    "content": "<section id=\"hero\" class=\"mb-8\">\n    <div class=\"container\">\n        <div class=\"row roomy\">\n            <div class=\"w-full\">\n                <h1 class=\"mb-6\">{{ $title }}</h1>\n                @if (isset($subtitle))\n                <p class=\"text-xl max-w-xl mb-2\">{{ $subtitle ?? null }}</p>\n                @endif\n                {!! $link ?? null !!}\n                {!! $slot !!}\n            </div>\n        </div>\n    </div>\n</section>\n"
  },
  {
    "path": "resources/views/components/icon.blade.php",
    "content": "@if ($tooltip) <span data-title=\"{{ $title }}\" data-toggle=\"tooltip\" data-html=\"true\" @if (request()->ajax()) data-append=\"parent\" @endif>@endif\n<i class=\"{{ $class ?? null }} {{ $size }}\" aria-hidden=\"true\"\n@if (!$tooltip && $title) title=\"{{ $title }}\" @endif\n@if ($label) aria-label=\"{{ $label }}\" @endif\n@if ($show) x-show=\"{{ $show }}\" @endif\n></i>\n@if ($tooltip) </span> @endif\n"
  },
  {
    "path": "resources/views/components/info-box.blade.php",
    "content": "<x-box class=\"flex items-center gap-5 rounded-xl shadow-xs justify-between\">\n    <div class=\"flex gap-5\">\n        <div class=\"rounded {{ $background }} w-12 h-12 text-xl flex items-center justify-center flex-none\">\n            <x-icon class=\"{{ $icon }}\" />\n        </div>\n        <div class=\"flex flex-col gap-1\">\n            <span>{!! $title !!}</span>\n            @if (isset($subtitle))\n                <span class=\"{{ $subtitleColour }}\">{!! $subtitle !!}</span>\n            @endif\n        </div>\n    </div>\n    @if ($url)\n        @if ($ajax)\n            <div class=\"{{ $attributes->get('urlButton', 'border-base-300') }} rounded-full border h-12 w-12 flex items-center justify-center cursor-pointer hover:bg-base-200 flex-none \" data-target=\"{{ $target }}\" data-url=\"{{ $url }}\" data-toggle=\"dialog\" @if ($urlTooltip) data-tooltip data-title=\"{{ $urlTooltip }}\" @endif>\n                <x-icon class=\"{{ $urlIcon }}\"/>\n            </div>\n        @else\n            <a class=\"roundeappd-full border h-12 w-12 flex items-center justify-center cursor-pointer hover:bg-base-200 flex-none\" href=\"{{ $route }}\" @if ($urlTooltip) data-tooltip data-title=\"{{ $urlTooltip }}\" @endif >\n                <x-icon class=\"{{ $urlIcon }}\" />\n            </a>\n        @endif\n    @elseif ($premium && !$campaign->boosted())\n        <a class=\"rounded-full border h-12 w-12 flex items-center justify-center cursor-pointer neutral-link flex-none\" href=\"{{ route('settings.premium', ['campaign' => $campaign->id]) }}\" data-tooltip data-title=\"{{ __('settings/premium.actions.unlock') }}\">\n            <x-icon class=\"premium\" />\n        </a>\n    @endif\n</x-box>\n"
  },
  {
    "path": "resources/views/components/learn-more.blade.php",
    "content": "<a\n    href=\"https://docs.kanka.io/en/latest/{{ $url }}\"\n    {{ $attributes->merge(['class' => 'btn2 btn-ghost btn-sm']) }}\n    data-toggle=\"tooltip\"\n    data-title=\"{{ __('general.documentation') }}\">\n    <x-icon class=\"fa-regular fa-book\" />\n    {{ __('general.learn-more') }}\n</a>\n"
  },
  {
    "path": "resources/views/components/lists/empty-state.blade.php",
    "content": "<?php\n    /** @var \\App\\Models\\EntityType $entityType */\n?>\n<div class=\"flex flex-col gap-4 items-center justify-center mx-auto\">\n    <h2>{!! __('lists.empty.title', ['singular' => strtolower($entityType->name()), 'plural' => strtolower($entityType->plural())]) !!}</h2>\n    <x-helper>\n        <p>{{ __($entityType->pluralCode() . '.lists.empty') }}</p>\n    </x-helper>\n\n    @can('create', [$entityType, $campaign])\n        <a href=\"{{ $entityType->createRoute($campaign) }}\" class=\"btn2 btn-primary mb-6\">\n            <x-icon class=\"plus\"></x-icon>\n            {!! $entityType->name() !!}\n        </a>\n    @endif\n\n    <div class=\"flex gap-4 items-center justify-center flex-col lg:flex-row\">\n        <a href=\"{{ \\App\\Facades\\Domain::toFront('campaigns') }}\" class=\"text-link\">\n            <x-icon class=\"fa-regular fa-sparkles\" />\n            {{ __('lists.actions.public') }}\n        </a>\n        @if (isset($enityType) && $enityType->isStandard())\n            <a href=\"https://docs.kanka.io/en/latest/entries/{{ ($entityType->isAttributeTemplate() ? 'property-kits' : \\Illuminate\\Support\\Str::replace('_', '-', $entityType->pluralCode())) }}.html\" class=\"text-link\">\n                <x-icon class=\"fa-regular fa-book\" />\n                {{ __('lists.actions.learn') }}\n            </a>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/menu/element.blade.php",
    "content": "<li class=\"relative w-full flex items-center rounded overflow-hidden  @if ($active) active @endif \">\n    <a href=\"{{ $route }}\" class=\"flex justify-between max-h-14 grow select-none gap-2 py-2 px-2 transition-all duration-150 cursor-pointer text-inherit items-center overflow-hidden group\"\n        @if (!empty($ajax)) data-toggle=\"dialog\" data-url=\"{{ $ajax }}\" @endif\n        @if (!empty($id)) id=\"{{ $id }}\" @endif\n    >\n        <span class=\"truncate block\">\n        {!! $slot !!}\n        </span>\n\n        @if ($badge > 0)\n            <div class=\"text-neutral-content bg-base-200 group-hover:bg-base-100 rounded-lg px-2 py-0.5 text-xs flex items-center justify-center\">\n                {{ \\Illuminate\\Support\\Number::format($badge) }}\n            </div>\n        @endif\n    </a>\n    @if (!empty($button))\n        <a href=\"{{ $button['url'] }}\" class=\"icon py-2 px-2 text-neutral-content\" @if(!empty($button['tooltip'])) data-title=\"{{ $button['tooltip'] }}\" data-toggle=\"tooltip\"  aria-label=\"{{ $button['tooltip'] }}\" @else aria-label=\"\" @endif>\n            <i class=\"{{ $button['icon'] }}\" aria-hidden=\"true\"></i>\n            <span class=\"sr-only\">{{ !empty($button['tooltip']) ? $button['tooltip'] : 'Helper icon' }}</span>\n        </a>\n    @endif\n</li>\n"
  },
  {
    "path": "resources/views/components/menu.blade.php",
    "content": "<ul class=\"list-none menu entity-menu flex flex-col flex-wrap p-2 m-0 text-sm gap-0.5 \">\n    {!! $slot !!}\n</ul>\n"
  },
  {
    "path": "resources/views/components/posts/tags.blade.php",
    "content": "<div class=\"post-tags flex gap-1 items-center flex-wrap\" data-count=\"{{ count($tags) }}\">\n    @foreach ($tags as $tag)\n        <x-tags.bubble :tag=\"$tag\" :campaign=\"$campaign\" />\n    @endforeach\n</div>\n"
  },
  {
    "path": "resources/views/components/premium-cta-footer.blade.php",
    "content": "<div {{ $attributes->merge(['class' => 'flex flex-col gap-2 w-full' . (request()->ajax() ? ' p-4 md:p-6' : null)]) }}>\n    <a href=\"{{ route('settings.subscription', ['f' => 'cta', 'w' => $campaign->id]) }}\" class=\"btn2 btn-primary btn-block\">\n        {{ __('callouts.actions.subscription') }}\n    </a>\n\n    <div class=\"text-center\">\n        <a href=\"https://kanka.io/premium\" class=\"text-neutral-content hover:text-primary text-xs\">\n            {!! __('callouts.premium.learn-more') !!}\n        </a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/premium-cta.blade.php",
    "content": "<div class=\"rounded-xl bg-box p-4 md:p-6 flex flex-col gap-4 shadow-xs mx-auto max-w-2xl\">\n    <h2 class=\"text-2xl\">\n        @isset ($title)\n            {{ $title }}\n        @elseif ($legacy)\n            @if ($premium)\n                {{ __('callouts.premium.title') }}\n            @elseif ($superboosted)\n                {{ __('callouts.booster.titles.superboosted') }}\n            @else\n                {{ __('callouts.booster.titles.boosted') }}\n            @endif\n        @else\n            {{ __('callouts.premium.title') }}\n        @endif\n    </h2>\n    <x-grid type=\"1/1\">\n        <x-helper>\n            {!! $slot !!}\n        </x-helper>\n        @if (isset($doc))\n            <p>\n                <a\n                    href=\"https://docs.kanka.io/en/latest/{{ $doc }}\" class=\"link text-link\">\n                    <x-icon class=\"fa-regular fa-book\" />\n                    {{ __('general.documentation') }}\n                </a>\n            </p>\n        @endif\n    </x-grid>\n\n\n    <x-premium-cta-footer :campaign=\"$campaign\" />\n</div>\n"
  },
  {
    "path": "resources/views/components/premium-dialog.blade.php",
    "content": "<x-dialog.header>\n    {{ $title ?? __('concept.premium-feature') }}\n</x-dialog.header>\n<x-dialog.article class=\"max-w-xl\">\n    <x-grid type=\"1/1\">\n        <p>{!! $pitch !!}</p>\n\n        @if (isset($doc))\n            <p>\n                <a\n                    href=\"https://docs.kanka.io/en/latest/{{ $doc }}\" class=\"link text-link\">\n                    <x-icon class=\"fa-regular fa-book\" />\n                    {{ __('general.documentation') }}\n                </a>\n            </p>\n        @endif\n    </x-grid>\n</x-dialog.article>\n<x-premium-cta-footer :campaign=\"$campaign\" />\n"
  },
  {
    "path": "resources/views/components/profile/social-link.blade.php",
    "content": "\n<a class=\"btn-round rounded-full\" href=\"{{ $link }}\" title=\"{{ $domain() }}\" data-toggle=\"tooltip\" rel=\"nofollow\" target=\"_blank\">\n    <x-icon class=\"fa-regular fa-external-link\" />\n    {{ $domain() }}\n</a>\n"
  },
  {
    "path": "resources/views/components/reorder/child.blade.php",
    "content": "<div {{ $attributes->merge(['class' => 'element bg-base-100 hover:bg-base-200 p-2 transition-all duration-150 rounded-xl flex items-center gap-2']) }} data-id=\"{{ $id }}\">\n    {!! $slot !!}\n</div>\n"
  },
  {
    "path": "resources/views/components/sidebar/account.blade.php",
    "content": "<aside class=\"main-sidebar main-sidebar-placeholder absolute z-20 h-full flex flex-col background-cover\" @if ($user->avatar) style=\"--sidebar-placeholder: url({{ Img::crop(240, 208)->url($user->avatar) }})\" @endif>\n    <section class=\"sidebar-campaign h-52 flex-none overflow-hidden flex items-end\">\n        <div class=\"px-4 py-4\">\n            <div class=\"campaign-head\">\n                <div class=\"campaign-name truncate text-xl\">\n                    {{ $user->name }}\n                </div>\n            </div>\n        </div>\n    </section>\n    <section class=\"sidebar grow\">\n        <ul class=\"sidebar-menu overflow-hidden whitespace-no-wrap list-none m-0 p-0\">\n            <li class=\"px-2 {{ $active('profile') }}\">\n                <x-sidebar.element\n                    :url=\"route('settings.profile')\"\n                    icon=\"fa-regular fa-user\"\n                    :text=\"__('settings.menu.profile')\"\n                ></x-sidebar.element>\n            </li>\n            <li class=\"px-2 {{ $active('account') }}\">\n                <x-sidebar.element\n                    :url=\"route('settings.account')\"\n                    icon=\"fa-regular fa-lock\"\n                    :text=\"__('settings.menu.account')\"\n                ></x-sidebar.element>\n            </li>\n            <li class=\"px-2 {{ $active('appearance') }}\">\n                <x-sidebar.element\n                    :url=\"route('settings.appearance')\"\n                    icon=\"fa-regular fa-swatchbook\"\n                    :text=\"__('settings.menu.appearance')\"\n                ></x-sidebar.element>\n            </li>\n            <li class=\"px-2 {{ $active('newsletter') }}\">\n                <x-sidebar.element\n                    :url=\"route('settings.newsletter')\"\n                    icon=\"fa-regular fa-bell\"\n                    :text=\"__('settings.menu.notifications')\"\n                ></x-sidebar.element>\n            </li>\n\n            <li class=\"section-subscription pt-4\">\n                <x-sidebar.section :text=\"__('settings.menu.subscription')\" />\n                <ul class=\"sidebar-submenu list-none p-0 m-0\">\n                    @if (config('services.stripe.enabled'))\n                        <li class=\"px-2 {{ $active('subscription') }} subsection\">\n                            <x-sidebar.element\n                                :url=\"route('settings.subscription')\"\n                                icon=\"fa-regular fa-heart\"\n                                :text=\"__('billing/menu.overview')\"\n                            ></x-sidebar.element>\n                        </li>\n                        @if (auth()->user()->hasBoosterNomenclature())\n                            <li class=\"px-2 {{ $active('boosters') }} subsection\">\n                                <x-sidebar.element\n                                    :url=\"route('settings.boost')\"\n                                    icon=\"fa-regular fa-rocket\"\n                                    :text=\"__('settings.menu.boosters')\"\n                                ></x-sidebar.element>\n                            </li>\n                        @else\n                            <li class=\"px-2 {{ $active('premium') }} subsection\">\n                                <x-sidebar.element\n                                    :url=\"route('settings.premium')\"\n                                    icon=\"fa-regular fa-gem\"\n                                    :text=\"__('settings.menu.premium')\"\n                                ></x-sidebar.element>\n                            </li>\n                        @endif\n                    @endif\n\n                    @if (config('services.stripe.enabled'))\n                        <li class=\"px-2 {{ $active('payment-method', 3) }} subsection\">\n                            <x-sidebar.element\n                                :url=\"route('billing.payment-method')\"\n                                icon=\"fa-regular fa-credit-card\"\n                                :text=\"__('billing/menu.payment-method')\"\n                            ></x-sidebar.element>\n                        </li>\n                        <li class=\"px-2 {{ $active('history', 3) }} subsection\">\n                            <x-sidebar.element\n                                :url=\"route('billing.history')\"\n                                icon=\"fa-regular fa-receipt\"\n                                :text=\"__('billing/menu.history')\"\n                            ></x-sidebar.element>\n                        </li>\n                    @endif\n                </ul>\n            </li>\n\n            <li class=\"section-other pt-4\">\n                <x-sidebar.section :text=\"__('settings.menu.other')\" />\n\n                <ul class=\"sidebar-submenu list-none p-0 m-0\">\n                    @if (auth()->user()->isLegacyPatron() || app()->isLocal())\n                        <li class=\"px-2 {{ $active('patreon') }} subsection\">\n                            <x-sidebar.element\n                                :url=\"route('settings.patreon')\"\n                                icon=\"fa-brands fa-patreon\"\n                                :text=\"__('settings.menu.patreon')\"\n                            ></x-sidebar.element>\n                        </li>@endif\n\n                    <li class=\"px-2 {{ $active('apps') }} subsection\">\n                        <x-sidebar.element\n                            :url=\"route('settings.apps')\"\n                            icon=\"fa-brands fa-discord\"\n                            :text=\"__('settings.menu.apps')\"\n                        ></x-sidebar.element>\n                    </li>\n                        <li class=\"px-2 {{ $active('referrals') }} subsection\">\n                            <x-sidebar.element\n                                :url=\"route('settings.referrals')\"\n                                icon=\"fa-regular fa-users\"\n                                :text=\"__('settings.referrals.title')\"\n                            ></x-sidebar.element>\n                        </li>\n                    <li class=\"px-2 {{ $active('api') }} subsection\">\n                        <x-sidebar.element\n                            :url=\"route('settings.api')\"\n                            icon=\"fa-regular fa-code\"\n                            :text=\"__('settings.menu.api')\"\n                        ></x-sidebar.element>\n                    </li>\n                </ul>\n            </li>\n\n        </ul>\n    </section>\n</aside>\n"
  },
  {
    "path": "resources/views/components/sidebar/campaign.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n */\n?>\n<aside class=\"main-sidebar main-sidebar-placeholder absolute z-840 h-auto min-h-full flex flex-col background-cover @can('member', $campaign)main-sidebar-member @else main-sidebar-public @endif\" @if ($campaign->image) style=\"--sidebar-placeholder: url({{ Img::crop(240, 208)->url($campaign->image) }})\" @endif>\n\n    @include('layouts.sidebars._campaign')\n\n    <section class=\"sidebar grow\">\n        <ul class=\"sidebar-menu overflow-hidden whitespace-no-wrap list-none m-0 p-0 flex flex-col gap-0.5\">\n            @foreach ($layout as $name => $element)\n                @if ($name === 'bookmarks')\n                    @if ($campaign->enabled('bookmarks'))\n                        <li class=\"px-2 {{ $active('bookmarks') }} sidebar-quick-links sidebar-bookmarks\">\n                            <x-sidebar.element\n                                :url=\"auth()->check() && auth()->user()->can('create', new App\\Models\\Bookmark()) ? route('bookmarks.index', $campaign) : null\"\n                                :icon=\"$element['custom_icon'] ?? $element['icon'] ?? 'fa-solid fa-question'\"\n                                :text=\"$element['custom_label'] ?? $element['label'] ?? __($element['label_key']) ?? 'unknown'\"\n                            ></x-sidebar.element>\n                            <ul class=\"sidebar-submenu list-none p-0 pl-3 m-0\">\n                                @foreach ($bookmarks('bookmarks') as $bookmark)\n                                    @include('layouts.sidebars.bookmark', ['bookmark' => $bookmark])\n                                @endforeach\n                            </ul>\n                        </li>\n                    @endif\n                    @continue\n                @elseif (!empty($element['perm']))\n                    @if (auth()->guest() || !auth()->user()->can($element['perm'], $campaign))\n                        @continue\n                    @endif\n                @endif\n                <li class=\"px-2 {{ (!isset($element['route']) || $element['route'] !== false ? $active($name) : null) }} section-{{ $name }}\">\n                    @if (!isset($element['route']) && isset($element['type']))\n                        <x-sidebar.element\n                            :url=\"route('entities.index', [$campaign, config('entities.ids.' . $element['type'])])\"\n                            :icon=\"$element['custom_icon'] ?? $element['icon'] ?? 'fa-solid fa-question'\"\n                            :text=\"$element['custom_label'] ?? __($element['label_key']) ?? 'unknown'\"\n                        ></x-sidebar.element>\n                    @elseif ($element['route'] !== false)\n                        @php\n                            $route = $element['route'];\n                        @endphp\n                        <x-sidebar.element\n                            :url=\"route($route, [$campaign])\"\n                            :icon=\"$element['custom_icon'] ?? $element['icon'] ?? 'fa-solid fa-question'\"\n                            :text=\"$element['custom_label'] ?? __($element['label_key']) ?? 'unknown'\"\n                        ></x-sidebar.element>\n                    @else\n                        <x-sidebar.element\n                            :icon=\"$element['custom_icon'] ?? $element['icon'] ?? 'fa-solid fa-question'\"\n                            :text=\"$element['custom_label'] ?? __($element['label_key']) ?? 'unknown'\"\n                        ></x-sidebar.element>\n                    @endif\n                    @if (!empty($element['children']))\n\n                        <ul class=\"sidebar-submenu list-none p-0 pl-3 m-0 flex flex-col gap-0.5\">\n                            @foreach($element['children'] as $childName => $child)\n                                <li class=\"p-0 m-0 {{ (!isset($child['route']) || $child['route'] !== false ? $active($childName) : null) }} subsection section-{{ $childName }}\">\n                                    @if (!isset($child['route']) && isset($child['type']))\n                                        <x-sidebar.element\n                                            :url=\"route('entities.index', [$campaign, config('entities.ids.' . $child['type'])])\"\n                                            :icon=\"$child['custom_icon'] ?? $child['icon'] ?? 'fa-solid fa-question'\"\n                                            :text=\"$child['custom_label'] ?? __($child['label_key']) ?? 'unknown'\"\n                                        ></x-sidebar.element>\n                                    @else\n                                        <x-sidebar.element\n                                            :url=\"route($child['route'], $campaign)\"\n                                            :icon=\"$child['custom_icon'] ?? $child['icon'] ?? 'fa-solid fa-question'\"\n                                            :text=\"$child['custom_label'] ?? __($child['label_key']) ?? 'unknown'\"\n                                        ></x-sidebar.element>\n                                    @endif\n                                </li>\n                                @includeWhen($hasBookmarks($childName), 'layouts.sidebars.bookmarks', ['links' => $bookmarks($childName)])\n                            @endforeach\n                        </ul>\n                    @endif\n\n                    @includeWhen($hasBookmarks($name), 'layouts.sidebars.bookmarks', ['links' => $bookmarks($name), 'css' => 'px-2'])\n                </li>\n            @endforeach\n        </ul>\n    </section>\n</aside>\n"
  },
  {
    "path": "resources/views/components/sidebar/element-link.blade.php",
    "content": "<a href=\"{{ $url }}\" class=\"px-2 py-1.5 flex items-center gap-2 rounded text-sm {{ $class }}\" title=\"{{ $text }}\">\n    @if (!empty($icon))\n    <span class=\"w-5 text-center\">\n        <i class=\"shrink-0 text-sm {{ $icon }}\"></i>\n    </span>\n    @endif\n    <span class=\"truncate\">{!! $text !!}</span>\n</a>\n"
  },
  {
    "path": "resources/views/components/sidebar/element-text.blade.php",
    "content": "<div class=\"px-2 py-1.5 flex items-center gap-2 my-0.5 rounded text-sm {{ $class }}\" title=\"{{ $text }}\">\n    <span class=\"w-5 text-center\">\n        <i class=\"shrink-0 text-xs  {{ $icon }}\"></i>\n    </span>\n    <span>{!! $text !!}</span>\n</div>\n"
  },
  {
    "path": "resources/views/components/sidebar/profile.blade.php",
    "content": "<div class=\"sidebar-section-box sidebar-section-profile overflow-hidden flex flex-col gap-2\">\n    <div class=\"sidebar-section-title cursor-pointer group user-select border-b element-toggle\" data-animate=\"collapse\" data-target=\"#sidebar-profile-elements\">\n        <x-icon class=\"fa-regular fa-chevron-up icon-show transition-transform duration-200 group-hover:-translate-y-0.5\" />\n        <x-icon class=\"fa-regular fa-chevron-down icon-hide transition-transform duration-200 group-hover:translate-y-0.5\" />\n        <span class=\"text-lg\">{{ __('crud.tabs.profile') }}</span>\n    </div>\n\n    <div class=\"sidebar-elements grid overflow-hidden\" id=\"sidebar-profile-elements\">\n        <div class=\"flex flex-col gap-2\">\n            {!! $slot !!}\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/sidebar/section.blade.php",
    "content": "<div {{ $attributes->merge(['class' => 'px-4 py-1.5 text-xs font-semibold uppercase tracking-wider'])}} >\n    {{ $text }}\n</div>\n"
  },
  {
    "path": "resources/views/components/sidebar/settings.blade.php",
    "content": "@php /** @var \\App\\Models\\Campaign $campaign */ @endphp\n<aside class=\"main-sidebar main-sidebar-placeholder z-20 h-auto min-h-full absolute flex flex-col @can('member', $campaign)main-sidebar-member @else main-sidebar-public @endif\" @if ($campaign->image) style=\"--sidebar-placeholder: url({{ Img::crop(240, 208)->url($campaign->image) }})\" @endif>\n    @include('layouts.sidebars._campaign')\n\n    <section class=\"sidebar grow\">\n        <ul class=\"sidebar-menu overflow-hidden whitespace-no-wrap list-none m-0 p-0\">\n            <li class=\"px-2 section-dashboard\">\n                <x-sidebar.element\n                    :url=\"route('dashboard', [$campaign])\"\n                    icon=\"fa-duotone fa-house\"\n                    :text=\"__('sidebar.dashboard')\"\n                ></x-sidebar.element>\n            </li>\n            <li class=\"px-2 section-overview {{ $active('overview') }}\">\n                <x-sidebar.element\n                    :url=\"route('overview', [$campaign])\"\n                    icon=\"fa-duotone fa-block\"\n                    :text=\"__('crud.tabs.overview')\"\n                ></x-sidebar.element>\n            </li>\n            @can('update', $campaign)\n                <li class=\"px-2 section-overview {{ $active('recovery') }}\">\n                    <x-sidebar.element\n                        :url=\"route('recovery', [$campaign])\"\n                        icon=\"fa-duotone fa-trash-restore\"\n                        :text=\"__('campaigns.show.tabs.recovery')\"\n                        premium\n                    ></x-sidebar.element>\n                </li>\n            @endcan\n            @if (config('limits.campaigns.premium'))\n            <li class=\"px-2 section-achievements {{ $active('achievements') }}\">\n                <x-sidebar.element\n                    :url=\"route('campaign.achievements', [$campaign])\"\n                    icon=\"fa-duotone fa-trophy\"\n                    :text=\"__('campaigns.show.tabs.achievements')\"\n                    premium\n                ></x-sidebar.element>\n            </li>\n            @endif\n            <li class=\"px-2 section-stats {{ $active('stats') }}\">\n                <x-sidebar.element\n                    :url=\"route('campaign.stats', [$campaign])\"\n                    icon=\"fa-duotone fa-bars\"\n                    :text=\"__('campaigns.show.tabs.stats')\"\n                ></x-sidebar.element>\n            </li>\n            @if (auth()->check() && (auth()->user()->can('members', $campaign) || auth()->user()->can('applications', $campaign) || auth()->user()->can('roles', $campaign)))\n                <li class=\"section-management pt-4\">\n                    <x-sidebar.section :text=\"__('campaigns.show.tabs.management')\" />\n                    <ul class=\"sidebar-submenu list-none p-0 m-0\">\n                        @can('members', $campaign)\n                            <li class=\"px-2 section-members {{ $active('campaign_users') }}\">\n                                <x-sidebar.element\n                                    :url=\"route('campaign_users.index', [$campaign])\"\n                                    icon=\"fa-duotone fa-users\"\n                                    :text=\"__('campaigns.show.tabs.members')\"\n                                ></x-sidebar.element>\n                            </li>\n                        @endif\n                        @can('roles', $campaign)\n                            <li class=\"px-2 section-roles {{ $active('campaign_roles') }}\">\n                                <x-sidebar.element\n                                    :url=\"route('campaign_roles.index', [$campaign])\"\n                                    icon=\"fa-duotone fa-user-shield\"\n                                    :text=\"__('campaigns.show.tabs.roles')\"\n                                ></x-sidebar.element>\n                            </li>\n                        @endif\n                        @can('applications', $campaign)\n                            <li class=\"px-2 section-applications {{ $active('applications') }}\">\n                                <x-sidebar.element\n                                    :url=\"route('applications.index', [$campaign])\"\n                                    icon=\"fa-duotone fa-inbox\"\n                                    :text=\"__('campaigns/applications.title')\"\n                                ></x-sidebar.element>\n                            </li>\n                        @endif\n                    </ul>\n                </li>\n            @endif\n\n            <li class=\"section-customisation pt-4\">\n                <x-sidebar.section :text=\"__('campaigns.show.tabs.customisation')\" />\n                <ul class=\"sidebar-submenu list-none p-0 m-0\">\n\n                    @can('setting', $campaign)\n                        <li class=\"px-2 section-modules {{ $active(['modules', 'entity_types']) }}\">\n                            <x-sidebar.element\n                                :url=\"route('campaign.modules', [$campaign])\"\n                                icon=\"fa-duotone fa-floppy-disks\"\n                                :text=\"__('campaigns/categories.tab')\"\n                            ></x-sidebar.element>\n                        </li>\n                    @endcan\n                    @can('update', $campaign)\n                        <li class=\"px-2 section-defaults {{ $active('campaign-defaults') }}\">\n                            <x-sidebar.element\n                                :url=\"route('campaign-defaults', [$campaign])\"\n                                icon=\"fa-duotone fa-sliders\"\n                                :text=\"__('campaigns.show.tabs.defaults')\"\n                                premium\n                            ></x-sidebar.element>\n                        </li>\n                    @endif\n                    @if (config('limits.campaigns.premium'))\n                    <li class=\"px-2 section-placeholders {{ $active('placeholder-images') }}\">\n                        <x-sidebar.element\n                            :url=\"route('campaign.default-images', [$campaign])\"\n                            icon=\"fa-duotone fa-image\"\n                            :text=\"__('campaigns/default-images.title')\"\n                            premium\n                        ></x-sidebar.element>\n                    </li>\n\n\n                    @can('update', $campaign)\n                        <li class=\"px-2 section-styles {{ $active(['campaign_styles', 'theme-builder']) }}\">\n                            <x-sidebar.element\n                                :url=\"route('campaign_styles.index', [$campaign])\"\n                                icon=\"fa-duotone fa-palette\"\n                                :text=\"__('campaigns.show.tabs.styles')\"\n                                premium\n                            ></x-sidebar.element>\n                        </li>\n                    @endif\n\n                    @if(config('marketplace.enabled'))\n                        <li class=\"px-2 section-plugins {{ $active('plugins') }}\">\n                            <x-sidebar.element\n                                :url=\"route('campaign_plugins.index', [$campaign])\"\n                                icon=\"fa-duotone fa-puzzle-piece\"\n                                :text=\"__('campaigns.show.tabs.plugins')\"\n                                premium\n                            ></x-sidebar.element>\n                        </li>\n                    @endif\n                    @can('update', $campaign)\n                        <li class=\"px-2 section-sidebar {{ $active('sidebar-setup') }}\">\n                            <x-sidebar.element\n                                :url=\"route('campaign-sidebar', [$campaign])\"\n                                icon=\"fa-duotone fa-bars-staggered\"\n                                :text=\"__('campaigns.show.tabs.sidebar')\"\n                                premium\n                            ></x-sidebar.element>\n                        </li>\n                    @endif\n                    @endif\n                </ul>\n            </li>\n\n            @can('update', $campaign)\n                <li class=\"section-management pt-4\">\n                    <x-sidebar.section :text=\"__('campaigns.show.tabs.data')\" />\n                    <ul class=\"sidebar-submenu list-none p-0 m-0\">\n                        <li class=\"px-2 section-export {{ $active('campaign-export') }}\">\n                            <x-sidebar.element\n                                :url=\"route('campaign.export', [$campaign])\"\n                                icon=\"fa-duotone fa-download\"\n                                :text=\"__('campaigns.show.tabs.export')\"\n                            ></x-sidebar.element>\n                        </li>\n                        @if (config('limits.campaigns.premium'))\n                        <li class=\"px-2 section-import {{ $active('campaign-import') }}\">\n                            <x-sidebar.element\n                                :url=\"route('campaign.import', [$campaign])\"\n                                icon=\"fa-duotone fa-upload\"\n                                :text=\"__('campaigns.show.tabs.import')\"\n                            ></x-sidebar.element>\n                        </li>\n                        @can('webhooks', $campaign)\n                            <li class=\"px-2 section-webhooks {{ $active('webhooks') }}\">\n                                <x-sidebar.element\n                                    :url=\"route('webhooks.index', [$campaign])\"\n                                    icon=\"fa-duotone fa-webhook\"\n                                    :text=\"__('campaigns.show.tabs.webhooks')\"\n                                    premium\n                                ></x-sidebar.element>\n                            </li>\n                        @endif\n                        @can('logs', $campaign)\n                            <li class=\"px-2 section-logs {{ $active('logs') }}\">\n                                <x-sidebar.element\n                                    :url=\"route('campaign.logs', [$campaign])\"\n                                    icon=\"fa-duotone fa-history\"\n                                    :text=\"__('campaigns/logs.title')\"\n                                ></x-sidebar.element>\n                            </li>\n                        @endif\n                        @endif\n                    </ul>\n                </li>\n            @endif\n\n            @can('roles', $campaign)\n                <li class=\"section-management pt-4\">\n                    <x-sidebar.section :text=\"__('campaigns.show.tabs.danger')\" />\n                    <ul class=\"sidebar-submenu list-none p-0 m-0\">\n                        <li class=\"px-2 section-deletion {{ $active('deletion') }}\">\n                            <x-sidebar.element\n                                :url=\"route('campaign.delete', [$campaign])\"\n                                icon=\"fa-duotone fa-radiation\"\n                                :text=\"__('campaigns.show.tabs.deletion')\"\n                            ></x-sidebar.element>\n                        </li>\n                    </ul>\n                </li>\n            @endcan\n        </ul>\n    </section>\n</aside>\n"
  },
  {
    "path": "resources/views/components/since.blade.php",
    "content": "<?php /** @var \\Carbon\\Carbon $date */?>\n<span data-toggle=\"tooltip\" data-title=\"{{ $formatted }}@if ($withTime) UTC @endif\" {{ $attributes->merge(['class' => \"text-xs text-neutral-content elapsed\"]) }} data-date=\"{{ $date }}\">\n    {{ $elapsed() }}\n</span>\n"
  },
  {
    "path": "resources/views/components/tab/nav.blade.php",
    "content": "<div>\n    <!-- An unexamined life is not worth living. - Socrates -->\n</div>"
  },
  {
    "path": "resources/views/components/tab/tab.blade.php",
    "content": "<li role=\"presentation\" class=\"tab-{{ $target }} flex items-stretch {{ (request()->get('tab') == ($default ? null : 'form-' . $target) ? ' active' : '') }} border-b-2 text-primary-content hover:text-primary transform-all duration-150\">\n    <a href=\"#form-{{ $target }}\" class=\"whitespace-nowrap flex gap-2\" title=\"{{ $title }}\"  aria-controls=\"form-{{ $target }}\">\n        @if ($icon) <x-icon :class=\"$icon\" /> @endif\n        {{ $title }}\n    </a>\n</li>\n"
  },
  {
    "path": "resources/views/components/tags/bubble.blade.php",
    "content": "<?php /** @var \\App\\Models\\Tag $tag */ ?>\n<a\n    href=\"{{ $tag->getLink() }}\"\n    class=\"{{ $css }}\"\n    @if($inlineStyle) style=\"{{ $inlineStyle }}\" @endif\n    data-toggle=\"tooltip-ajax\"\n    data-url=\"{{ route('entities.tooltip', [$campaign, $tag->entity->id]) }}\"\n    data-tag-id=\"{{ $tag->id }}\"\n    data-tag-slug=\"{{ $tag->slug }}\"\n    data-entity-id=\"{{ $tag->entity->id }}\">\n    @if ($tag->hasIcon())\n        <i class=\"{{ $tag->icon }}\" aria-hidden=\"true\"></i>\n    @else\n        {{ $tag->shortName() }}\n    @endif\n</a>\n"
  },
  {
    "path": "resources/views/components/toggles/filter-button.blade.php",
    "content": "<a href=\"{{ $route }}\" class=\"btn2 btn-sm\" data-toggle=\"tooltip\" data-title=\"{{ __('crud.filters.lists.paginated') }}\">\n    <x-icon class=\"filter\" />\n    <span class=\"hidden xl:inline\">\n        @if ($all)\n            {{ __('crud.filters.lists.desktop.all', ['count' => $count]) }}\n        @else\n            {{ __('crud.filters.lists.desktop.filtered', ['count' => $count]) }}\n        @endif\n    </span>\n    <span class=\"xl:hidden\">\n        {{ $count }}\n    </span>\n</a>\n"
  },
  {
    "path": "resources/views/components/tutorial.blade.php",
    "content": "<div class=\"alert p-4 @if ($type) alert-{{ $type }}  @else alert-info @endif tutorial rounded-2xl\" id=\"{{ $id }}\">\n    @auth\n    <button type=\"button\" class=\"text-xl opacity-50 hover:opacity-100 focus:opacity-100 cursor-pointer text-decoration-none float-right\" data-dismiss=\"tutorial\" data-target=\"#{{ $id }}\" aria-hidden=\"true\" data-url=\"{{ route('tutorials.dismiss', ['code' => $code]) }}\">\n        <x-icon class=\"fa-regular fa-circle-xmark\" tooltip=\"1\" title=\"{{ __('crud.actions.close') }}\" />\n    </button>\n    @endauth\n    <div class=\"flex flex-col gap-2\">\n        @if (!empty($title))\n            <p class=\"text-lg font-semibold\">\n                {!! $title !!}\n            </p>\n        @endif\n        {!! $slot !!}\n        @if (!empty($doc))\n            <p>\n                <a href=\"{{ $doc }}\" class=\"text-link\">\n                    <x-icon class=\"fa-regular fa-book\" />\n                    {{ __('general.documentation') }}\n                </a>\n            </p>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/users/avatar.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */ ?>\n<div {{ $attributes->merge(['class' => 'rounded-full cover-background']) }}\n     style=\"background-image: url('{{ $user->getAvatarUrl($size) }}')\">\n</div>\n"
  },
  {
    "path": "resources/views/components/users/link.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */ ?>\n<a href=\"{{  route('users.profile', $user) }}\" class=\"flex items-center gap-2 text-link\">\n    @if ($user->hasAvatar())\n        <img src=\"{{ $user->getAvatarUrl($size) }}\" loading=\"lazy\" class=\"rounded-full w-10 h-10\" />\n    @endif\n    {!! $user->name !!}\n</a>\n"
  },
  {
    "path": "resources/views/components/widgets/filtered-link.blade.php",
    "content": "@if ($isLink)\n    <a href=\"{{ $url }}\" class=\"text-link\">{!! $title !!}</a>\n@else\n    {!! $title !!}\n@endif\n"
  },
  {
    "path": "resources/views/components/widgets/forms/advanced.blade.php",
    "content": "<div class=\"flex flex-col gap-4 md:gap-6 w-full\" x-data=\"{open: false}\">\n    <span class=\"cursor-pointer text-sm border-dotted border-b w-full mt-4 md:mt-6\" @click=\"open = !open\">\n        <x-icon class=\"fa-solid fa-caret-down\" />\n        {{ __('dashboard.widgets.tabs.advanced') }}\n    </span>\n    <div x-show=\"open\" class=\"flex flex-col gap-4 md:gap-6\">\n        {!! $slot !!}\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/widgets/previews/body.blade.php",
    "content": "<div class=\"widget-body @if($widget->conf('full') === '2') p-0 @else p-4 @endif\">\n    @if ($widget->conf('full') === '1')\n        @include('dashboard.widgets.previews._full')\n    @elseif ($widget->conf('full') === '2')\n        <iframe src=\"{{ route('entities.attributes-dashboard', [$campaign, $entity]) }}\" class=\"entity-attributes w-full\"></iframe>\n    @else\n        @include('dashboard.widgets.previews._preview')\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/components/widgets/previews/head.blade.php",
    "content": "@php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Character $model\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n */\n@endphp\n<div\n    class=\"widget-header\"\n>\n    @if (!empty($images['wide_xl']))\n        <a href=\"{{ $entity->url() }}\"\n            class=\"widget-image cover-background bg-center aspect-video \"\n            >\n            <picture class=\"entity-image-wide\">\n                <source srcset=\"{{ $images['wide_xl'] }}\" media=\"(min-width: 768px)\" />\n                <img src=\"{{ $images['wide_sm'] }}\" class=\"w-full entity-picture-wide rounded-t-lg\" alt=\"{{ $entity->name }}\" />\n            </picture>\n            <picture class=\"entity-image-square hidden\">\n                <source srcset=\"{{ $images['square_xl'] }}\" media=\"(min-width: 768px)\" />\n                <img src=\"{{ $images['square_sm'] }}\" class=\"w-full entity-picture-square rounded-t-lg\" alt=\"{{ $entity->name }}\" />\n            </picture>\n        </a>\n    @endif\n    <a href=\"{{ $entity->url() }}\" class=\"flex gap-1 text-lg p-4 pb-0 text-link\">\n        @if ($entity->is_private)\n            <x-icon class=\"lock\" :title=\"__('crud.is_private')\" tooltip />\n        @endif\n        <span class=\"grow truncate\">\n        @if(!empty($customName))\n            {{ $customName }}\n        @elseif (!empty($widget->conf('text')))\n            {{ $widget->conf('text') }}\n        @else\n            {!! $entity->name !!}\n        @endif\n        </span>\n\n        @if ($entity->status?->icon)\n            <x-icon class=\"{{ $entity->status->icon() }}\" tooltip :title=\"$entity->status->setRelation('entityType', $entity->entityType)->name()\" />\n        @endif\n        {!! $slot !!}\n    </a>\n</div>\n"
  },
  {
    "path": "resources/views/components/word-count.blade.php",
    "content": "<div class=\"word-count text-xs text-neutral-content text-right @if (!config('app.debug')) hidden @endif\">\n    {{ __('crud.fields.word-count', ['number' => \\Illuminate\\Support\\Number::format($count ?? 0)]) }}\n</div>\n"
  },
  {
    "path": "resources/views/confirms/delete.blade.php",
    "content": "<form method=\"post\" action=\"{{ $route }}\">\n    @csrf\n    <input type=\"hidden\" name=\"_method\" value=\"DELETE\" />\n    <x-dialog.header>\n        {{ __('confirm.delete.title') }}\n    </x-dialog.header>\n    <x-dialog.article>\n        <x-grid type=\"1/1\">\n        <p class=\"text-neutral-content\">\n            {!! __('confirm.delete.helper', ['name' => '<span class=\"font-bold\">' . $name . '</span>']) !!}\n        </p>\n        @if ($permanent)\n            <p class=\"permanent text-neutral-content\">\n                {{ __('crud.delete_modal.permanent') }}\n            </p>\n        @endif\n\n        @if ($mirrored)\n        <div class=\"field field-delete-confirm checkbox\">\n            <label>\n                <input type=\"checkbox\" id=\"delete-confirm-mirror-checkbox\" name=\"delete-mirror\">\n                {{ __('entities/relations.delete_mirrored.option') }}\n                <x-helpers.tooltip :title=\"__('entities/relations.delete_mirrored.helper')\" />\n            </label>\n            <p class=\"text-neutral-content md:hidden\">\n                {{ __('entities/relations.delete_mirrored.helper') }}\n            </p>\n        </div>\n        @endif\n\n        @includeWhen(!$permanent, 'layouts.callouts.recoverable')\n\n        </x-grid>\n    </x-dialog.article>\n    <footer class=\"flex flex-wrap gap-2 justify-between items-start p-4 md:p-6\">\n        <menu class=\"flex flex-wrap gap-3 ps-0 ms-0\">\n            <button autofocus type=\"button\" class=\"btn2 btn-outline\" onclick=\"this.closest('dialog').close('close')\">\n                {{ __('crud.cancel') }}\n            </button>\n        </menu>\n        <menu class=\"flex flex-wrap gap-3 ps-0\">\n            <button type=\"submit\" class=\"btn2 btn-error btn-outline delete-confirm-submit px-8 ml-5 rounded-full\">\n                <x-icon class=\"trash\" />\n                {{ __('crud.remove') }}\n            </button>\n        </menu>\n    </footer>\n</form>\n"
  },
  {
    "path": "resources/views/confirms/editing.blade.php",
    "content": "<form method=\"post\" action=\"\">\n    <x-dialog.header :dismissible=\"false\">\n        {{ __('confirm/editing.title') }}\n    </x-dialog.header>\n    <x-dialog.article>\n        <x-grid type=\"1/1\">\n            <p class=\"m-0 max-w-sm\">\n                {{ __('confirm/editing.description') }}\n            </p>\n            <p class=\"m-0\">\n                {{ __('confirm/editing.members') }}\n            </p>\n            <ul>\n                @foreach ($editingUsers as $user)\n                    <li class=\"user-id-{{ $user->id }}\">\n                        {!! __('confirm/editing.user', [\n                            'user' => '<strong>' . $user->name . '</strong>',\n                            'since' => \\Carbon\\Carbon::createFromTimeString($user->pivot->created_at)->diffForHumans()\n                        ]); !!}\n                    </li>\n                @endforeach\n            </ul>\n        </x-grid>\n    </x-dialog.article>\n    <footer class=\"flex flex-wrap gap-3 justify-between items-start p-3 md:rounded-b\">\n        <menu class=\"flex flex-wrap gap-3 ps-0 ms-0\">\n            <a class=\"btn2 btn-outline\" id=\"entity-edit-warning-back\" href=\"{{ $show }}\">\n                {{ __('confirm/editing.back') }}\n            </a>\n        </menu>\n        <menu class=\"flex flex-wrap gap-3 ps-0\">\n            <button type=\"button\" class=\"btn2 btn-error btn-outline\" id=\"entity-edit-warning-ignore\" data-url=\"{{ $url }}\">\n                {{ __('confirm/editing.ignore') }}\n            </button>\n        </menu>\n    </footer>\n</form>\n"
  },
  {
    "path": "resources/views/connections/web-premium.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <p class=\"max-w-2xl\">\n        {!! __('connections/web.cta.text', ['amount' => '<strong>' . config('limits.campaigns.web') . '</strong>']) !!}\n    </p>\n\n    <x-premium-cta-footer :campaign=\"$campaign\" />\n</x-grid>\n"
  },
  {
    "path": "resources/views/connections/web.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */?>\n@extends('layouts.rich', [\n    'title' => __('connections/web.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'pageClass' => 'connections-web-page'\n])\n\n@section('content')\n<div id=\"web\">\n    <connections-web\n        api=\"{{ route('connections.web.api', [$campaign]) }}\"\n        :premium=\"@js($campaign->boosted())\"\n        :creator=\"{{ auth()->check() && !empty($campaign) && auth()->user()->can('member', $campaign) ? 1 : 0 }}\"\n    >\n    </connections-web>\n</div>\n\n@endsection\n\n\n@section('scripts')\n    @vite('resources/js/connections/web.js')\n@endsection\n\n@section('modals')\n    <x-dialog id=\"web-premium\" :title=\"__('connections/web.cta.title', ['amount' => config('limits.campaigns.web')])\">\n        @include('connections.web-premium')\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/conversations/form/_entry.blade.php",
    "content": "<?php\n$targets = [\n    \\App\\Enums\\ConversationTarget::users->value => __('conversations.targets.members'),\n    \\App\\Enums\\ConversationTarget::characters->value => __('conversations.targets.characters'),\n];\n?>\n\n<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Conversation::class, 'trans' => 'conversations'])\n\n    <x-forms.field\n        field=\"participants\"\n        required\n        :label=\"__('conversations.fields.participants')\">\n        <x-forms.select name=\"target_id\" :options=\"$targets\" :selected=\"$source->target_id ?? $model->target_id ?? null\" />\n    </x-forms.field>\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.closed')\n\n    @include('cruds.fields.image')\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/conversations/participants/_actions.blade.php",
    "content": "<?php /** @var \\App\\Models\\Conversation $model */?>\n@can('update', $model->entity)\n    <?php $memberList = $campaign->membersList($model->participantsList(false, true)); ?>\n    @if($model->forCharacters() || count($memberList) > 0)\n        <x-form :action=\"['conversations.conversation_participants.store', $campaign, $model]\">\n        <div class=\"flex gap-2 items-end w-full\">\n            <div class=\"grow\">\n                @if ($model->forCharacters())\n                    @include('cruds.fields.character', ['allowNew' => false])\n                @else\n                    <x-forms.select name=\"user_id\" :options=\"$memberList\" :selected=\"$source->user_id ?? $model->user_id ?? null\" />\n                @endif\n            </div>\n            <div class=\"\">\n                <button type=\"submit\" class=\"btn2 btn-primary btn-sm\">\n                    <x-icon class=\"plus\" /> {{ __('crud.add') }}\n                </button>\n            </div>\n        </div>\n        <input type=\"hidden\" name=\"conversation_id\" value=\"{{ $model->id }}\" />\n        </x-form>\n    @endif\n@endcan\n"
  },
  {
    "path": "resources/views/conversations/participants/_form.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Conversation $model\n */?>\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('conversations.participants.helper', ['name' => $model->name]) !!}</p>\n    </x-helper>\n\n    <div class=\"flex flex-col gap-2\">\n    @forelse ($model->participants as $participant)\n        @if ($participant->isMember() || (auth()->check() && auth()->user()->can('view', $participant->entity()->entity ?? false)))\n        <div class=\"flex items-center gap-2 justify-between hover:bg-base-200 rounded p-2\">\n            @if ($participant->isMember())\n                <x-users.link :user=\"$participant->entity()\" class=\"w-10 h-10\" />\n            @else\n                <a href=\"{{ route('characters.show', [$campaign, $participant->entity()]) }}\" class=\"flex items-center gap-2 text-link\">\n                    <div class=\"cover-background rounded-full h-10 w-10\" style=\"background-image: url('{{ \\App\\Facades\\Avatar::entity($participant->entity()->entity)->size(40)->fallback()->thumbnail() }}')\"></div>\n                    {!! $participant->entity()->name !!}\n                </a>\n            @endif\n\n            @can('update', $model->entity)\n                <div>\n                    <x-form method=\"DELETE\" :action=\"['conversations.conversation_participants.destroy', $campaign, $model, $participant]\">\n                        <button class=\"btn2 btn-error btn-outline btn-sm\">\n                            <x-icon class=\"trash\" />\n                            <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                        </button>\n                    </x-form>\n                </div>\n            @endcan\n        </div>\n        @endif\n    @empty\n        <x-helper>\n            <p>{{ __('conversations.hints.empty') }}</p>\n        </x-helper>\n    @endforelse\n    </div>\n\n\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/conversations/participants.blade.php",
    "content": "@extends('layouts.ajax', [\n    'title' => __('conversations.participants.title', ['name' => $model->name]),\n    'breadcrumbs' => [\n        ['url' => route('conversations.index', $campaign), 'label' => __('entities.conversations')],\n        ['url' => route('conversations.show', [$campaign, $model->id]), 'label' => $model->name],\n        __('crud.update'),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.forms._dialog', [\n        'title' => __('conversations.participants.modal', ['name' => $model->name]),\n        'content' => 'conversations.participants._form',\n        'actions' => 'conversations.participants._actions',\n        'skipCancel' => true,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/conversations/show.blade.php",
    "content": "<?php /** @var \\App\\Models\\Conversation $model */ ?>\n@php\n$translations = json_encode([\n'edit' => __('crud.edit'),\n'remove' => __('crud.remove'),\n'is_updated' => __('conversations.messages.is_updated'),\n'is_closed' => __('conversations.show.is_closed'),\n'load_previous' => __('conversations.messages.load_previous'),\n'user_unknown' => __('crud.users.unknown'),\n]);\n@endphp\n\n@section('entity-header-actions-override')\n    <div class=\"header-buttons flex gap-2 items-center justify-end\">\n    @can('update', $entity)\n            <a\n                class=\"btn2 btn-sm\"\n                data-toggle=\"dialog\"\n                data-url=\"{{ route('conversations.conversation_participants.index', [$campaign, $entity->child]) }}\">\n                <x-icon class=\"fa-solid fa-users\" />\n                {{ __('conversations.fields.participants') }} {{ $entity->child->participants->count() }}\n            </a>\n            @include('entities.headers.toggle')\n        @include('entities.headers.actions')\n    @endcan\n    </div>\n@endsection\n\n\n<div class=\"entity-grid flex flex-col gap-5\">\n\n    @include('entities.components.header', [\n        'entityHeaderActions' => 'entity-header-actions-override',\n    ])\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            <div class=\"box-conversation\" id=\"conversation\">\n                <conversation\n                        id=\"{{ $entity->child->id }}\"\n                        api=\"{{ route('conversations.conversation_messages.index', [$campaign, $entity->child]) }}\"\n                        target=\"{{ $entity->child->forCharacters() ? 'character' : 'user'}}\"\n                        :targets=\"{{ $entity->child->jsonParticipants() }}\"\n                        :disabled=\"{{ ($entity->child->is_closed ? 'true' : 'false') }}\"\n                        send=\"{{ route('conversations.conversation_messages.store', [$campaign, $entity->child]) }}\"\n                        trans=\"{{ $translations }}\"\n                >\n                </conversation>\n            </div>\n\n            @include('entities.components.posts')\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n\n@section('scripts')\n@parent\n@vite('resources/js/conversation.js')\n@endsection\n"
  },
  {
    "path": "resources/views/creatures/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Creature::class, 'trans' => 'creatures'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.locations', ['from' => $model ?? null, 'quickCreator' => true])\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/creatures/panels/creatures.blade.php",
    "content": "<div id=\"creature-creatures\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/creatures/show.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/_table.blade.php",
    "content": "<?php /** @var \\Illuminate\\Pagination\\LengthAwarePaginator $models */?>\n@if (isset($entityType) && $models->isEmpty() && !$filterService->hasFilters())\n    <x-lists.empty-state :entityType=\"$entityType\" :campaign=\"$campaign\" />\n@else\n<div class=\"flex gap-1 items-start\">\n    <x-box :padding=\"false\" >\n        <div class=\"table-responsive\">\n            @include($name . '.datagrid')\n        </div>\n    </x-box>\n</div>\n@include('ads.inline')\n\n@includeWhen($models->hasPages() && !$models->onFirstPage() && auth()->check(), 'cruds.helpers.pagination', ['action' => 'index'])\n@includeWhen(isset($datagridActions) && auth()->check() && $filteredCount > 0, 'cruds.datagrids.bulks.actions')\n\n@if ($unfilteredCount != $filteredCount)\n    <x-helper>\n        <p>\n            {{ __('crud.filters.filtered', ['count' => $filteredCount, 'total' => $unfilteredCount, 'entity' => __('entities.' . $name)]) }}\n        </p>\n    </x-helper>\n@endif\n\n@if($models->hasPages())\n        {{ $models\n            ->appends(isset($filterService) ? $filterService->pagination() : null)\n            ->onEachSide(0)\n            ->links(null, [\n                'settingsLink' => base64_encode(route($route . '.index', $campaign))\n]) }}\n@endif\n@endif\n"
  },
  {
    "path": "resources/views/cruds/clear-filters.blade.php",
    "content": "\n<div class=\"flex flex-stretch gap-2 items-center\">\n    <div class=\"text-muted grow\">\n        <x-icon class=\"fa-regular fa-filter\" />\n        {{ __('filters.helpers.guest') }}\n    </div>\n\n    @if ($filterService->activeFiltersCount() > 0)\n        @if (isset($entityType))\n            <a href=\"{{ route('entities.index', [$campaign, $entityType, 'reset-filter' => 'true']) }}\" class=\"btn2 btn-ghost btn-sm\">\n                <x-icon class=\"fa-regular fa-eraser\" /> {{ __('crud.filters.clear') }}\n            </a>\n        @else\n            <a href=\"{{ route($route . '.index', [$campaign, 'reset-filter' => 'true']) }}\" class=\"btn2 btn-ghost btn-sm\">\n                <x-icon class=\"fa-regular fa-eraser\" /> {{ __('crud.filters.clear') }}\n            </a>\n        @endif\n    @endif\n</div>"
  },
  {
    "path": "resources/views/cruds/datagrids/_grid.blade.php",
    "content": "@php\n    if ($model->child) {\n        $model = $model->child;\n    }\n    if (empty($model->entity)) {\n        return;\n    }\n    $stacked = !isset($flat) && method_exists($model, 'children') && !isset($isParent) ? min(2, $model->children_count) : null;\n    $dataAttributes = [];\n    if ($model->is_private) {\n        $dataAttributes[] = 'private';\n    }\n    $statusKey = $model->entity->statusKey();\n    $statusClass = '';\n    if ($statusKey !== null) {\n        $dataAttributes[] = $statusKey;\n        $statusClass = $model->entity->entityType->code . '-' . $statusKey;\n    }\n@endphp\n@if ($stacked > 0)\n    <div class=\"stack inline-grid items-center align-items-end w-[47%] xs:w-[25%] sm:w-48 \" data-stack=\"{{ $stacked }}\">\n        <div class=\"entity overflow-hidden rounded shadow-xs hover:shadow-md aspect-square w-full flex flex-col bg-box {{ $statusClass }}\" title=\"{{ $model->name }}\" @foreach ($dataAttributes as $att) data-{{ $att }}=\"true\" @endforeach data-entity=\"{{ $model->entity->id }}\" data-entity-type=\"{{ $model->entity->entityType->code }}\" @if (!empty($model->entity->type)) data-type=\"{{ \\Illuminate\\Support\\Str::slug($model->entity->type) }}\" @endif>\n            <a href=\"{{ route($route, [$campaign, 'parent_id' => $model->id]) }}\"  class=\"block avatar grow relative cover-background overflow-hidden text-center\" style=\"background-image: url('{{ Avatar::entity($model->entity)->fallback()->size(192, 144)->thumbnail() }}')\">\n\n                @if ($model->is_private)\n                    <div class=\"bubble-private absolute left-1.5 top-1.5 shadow-xs flex justify-center align-items-center items-center aspect-square rounded-full w-6 h-6 bg-box text-xs opacity-80 text-base-content\">\n                        <x-icon class=\"fa-regular fa-lock\" :title=\"__('crud.is_private')\" />\n                    </div>\n                @endif\n            </a>\n            <div class=\"flex items-center\" data-toggle=\"tooltip-ajax\"  data-id=\"{{ $model->entity->id }}\" data-url=\"{{ route('entities.tooltip', [$campaign, $model->entity->id]) }}\">\n                <a href=\"{{ $model->getLink() }}\" class=\"block text-center relative truncate h-12 px-2 py-4 grow text-link\">\n                    {!! $model->name !!}\n                </a>\n                @if ($model instanceof \\App\\Models\\Map && $model->explorable())\n                    <a href=\"{{ $model->getLink('explore') }}\" class=\"block text-center h-12 p-4 text-link\" target=\"_blank\" title=\"{{ __('maps.actions.explore') }}\">\n                        <x-icon class=\"fa-regular fa-map\" />\n                        <span class=\"sr-only\">{{ __('maps.actions.explore') }}</span>\n                    </a>\n                @elseif ($model instanceof \\App\\Models\\Whiteboard)\n                    <a href=\"{{ $model->getLink('draw') }}\" class=\"block text-center h-12 p-4 text-link\" target=\"_blank\" title=\"{{ __('whiteboards.actions.draw') }}\">\n                        <x-icon class=\"fa-regular fa-chalkboard\" />\n                        <span class=\"sr-only\">{{ __('whiteboards.actions.draw') }}</span>\n                    </a>\n                @endif\n            </div>\n        </div>\n        @for ($s = 0; $s < $stacked; $s++)\n            <div class=\"entity entity-stack bg-base-300 w-full overflow-hidden rounded aspect-square flex flex-col shadow-xs\" title=\"{{ __('datagrids.tooltips.nested') }}\" data-stack=\"{{ $s }}\">\n                <div class=\"block grow\"></div>\n                <div class=\"block h-12 p-4 bg-box\"></div>\n            </div>\n        @endfor\n    </div>\n@else\n    <div class=\"entity overflow-hidden rounded shadow-xs hover:shadow-md w-[47%] xs:w-[25%] sm:w-48 aspect-square flex flex-col bg-box @if (isset($isParent)) shadow-lg stacking-parent font-bold @endif {{ $statusClass }}\" title=\"{{ $model->name }}\" @foreach ($dataAttributes as $att) data-{{ $att }}=\"true\" @endforeach data-entity=\"{{ $model->entity->id }}\" data-entity-type=\"{{ $model->entity->entityType->code }}\" @if (!empty($model->entity->type)) data-type=\"{{ \\Illuminate\\Support\\Str::slug($model->entity->type) }}\" @endif>\n        <a href=\"{{ $model->getLink() }}\" class=\"block avatar grow relative cover-background\" style=\"background-image: url('{{ Avatar::entity($model->entity)->fallback()->size(192, 144)->thumbnail() }}')\">\n            @if ($model->is_private)\n                <div class=\"bubble-private absolute left-1.5 top-1.5 shadow-xs flex justify-center align-items-center items-center aspect-square rounded-full w-6 h-6 text-xs bg-box opacity-80 text-base-content\">\n                    <x-icon class=\"fa-regular fa-lock\" :title=\"__('crud.is_private')\" />\n                </div>\n            @endif\n        </a>\n        <div class=\"flex items-center\" data-toggle=\"tooltip-ajax\"  data-id=\"{{ $model->entity->id }}\" data-url=\"{{ route('entities.tooltip', [$campaign, $model->entity->id]) }}\">\n            <a href=\"{{ $model->getLink() }}\" class=\"block text-center relative truncate h-12 px-2 py-4 grow text-link\" >\n                {!! $model->name !!}\n            </a>\n            @if ($model instanceof \\App\\Models\\Map && $model->explorable())\n                <a href=\"{{ $model->getLink('explore') }}\" class=\"block text-center h-12 p-4 text-link\" target=\"_blank\" title=\"{{ __('maps.actions.explore') }}\">\n                    <x-icon class=\"fa-regular fa-map\" />\n                    <span class=\"sr-only\">{{ __('maps.actions.explore') }}</span>\n                </a>\n            @elseif ($model instanceof \\App\\Models\\Whiteboard)\n                <a href=\"{{ $model->getLink('draw') }}\" class=\"block text-center h-12 p-4 text-link\" target=\"_blank\" title=\"{{ __('whiteboards.actions.draw') }}\">\n                    <x-icon class=\"fa-regular fa-chalkboard\" />\n                    <span class=\"sr-only\">{{ __('whiteboards.actions.draw') }}</span>\n                </a>\n            @endif\n        </div>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/datagrids/_row-actions.blade.php",
    "content": "<?php /** @var \\App\\Models\\MiscModel $model\n * @var \\App\\Models\\Campaign $campaign\n */\n?>\n\n\n<div class=\"dropdown\" >\n    <a role=\"button\" class=\"cursor-pointer rounded-full w-8 h-8 aspect-square hover:bg-base-200 flex items-center justify-center\" data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"datagrid-submenu-{{ $model->id }}\" aria-label=\"Quick actions menu\" data-tree=\"escape\">\n        <i class=\"fa-regular fa-ellipsis-v\" data-tree=\"escape\"></i>\n        <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n    </a>\n    <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"datagrid-submenu-{{ $model->id }}\">\n        @foreach ($actions as $action)\n            @if (is_null($action))\n                <x-dropdowns.divider />\n            @elseif (is_array($action))\n                <x-dropdowns.item :link=\"$action['route']\" :icon=\"$action['icon']\">\n                    {{ __($action['label']) }}\n                </x-dropdowns.item>\n            @endif\n        @endforeach\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/actions.blade.php",
    "content": "<?php /** @var \\App\\Datagrids\\Actions\\DatagridActions $datagridActions */?>\n\n@php\n$dropdownActions = [];\nif (auth()->check() && auth()->user()->isAdmin()) {\n    if ($datagridActions->hasBulkEditing()) {\n        $dropdownActions[] = [\n            'data' => ['target' => 'bulk-edit', 'bulk-action' => 'batch', 'toggle' => 'dialog'],\n            'class' => 'bulk-edit',\n            'icon' => 'edit',\n            'text' => __('crud.bulk.actions.edit')\n        ];\n    }\n    if ($datagridActions->hasBulkPermissions()) {\n        $dropdownActions[] = [\n             'data' => ['target' => 'primary-dialog', 'bulk-action' => 'ajax', 'toggle' => 'dialog', 'url' => route('bulk.permissions', [$campaign, 'entity_type' => $entityType->id])],\n            'class' => 'bulk-permissions',\n            'icon' => 'lock',\n            'text' => __('crud.bulk.actions.permissions')\n        ];\n    }\n    if ($datagridActions->hasBulkTemplate() && $campaign->enabled('entity_attributes')) {\n        $dropdownActions[] = [\n             'data' => ['target' => 'primary-dialog', 'bulk-action' => 'ajax', 'toggle' => 'dialog', 'url' => route('bulk.templates', [$campaign, 'entity_type' => $entityType->id])],\n            'class' => 'bulk-templates',\n            'icon' => 'fa-regular fa-th-list',\n            'text' => __('crud.bulk.actions.kits')\n        ];\n    }\n    if ($datagridActions->hasBulkTransform()) {\n        $dropdownActions[] = [\n             'data' => ['target' => 'primary-dialog', 'bulk-action' => 'ajax', 'toggle' => 'dialog', 'url' => route('bulk.transform', [$campaign, 'entity_type' => $entityType->id])],\n            'class' => 'bulk-transform',\n            'icon' => 'fa-regular fa-arrows-rotate',\n            'text' => __('entities/actions.convert')\n        ];\n    }\n    if ($datagridActions->hasBulkCopy()) {\n        $dropdownActions[] = [\n            'data' => ['target' => 'primary-dialog', 'bulk-action' => 'ajax', 'toggle' => 'dialog', 'url' => route('bulk.copy-to-campaign', [$campaign, 'entity_type' => $entityType->id])],\n            'class' => 'bulk-copy-campaign',\n            'icon' => 'fa-regular fa-clone',\n            'text' => __('crud.actions.copy_to_campaign')\n        ];\n    }\n}\nif ($datagridActions->hasBulkPrint()) {\n    $dropdownActions[] = [\n        'class' => 'bulk-print',\n        'icon' => 'fa-regular fa-print',\n        'text' => __('crud.actions.print'),\n    ];\n}\nif ($model instanceof \\App\\Models\\Relation && auth()->user()->can('delete', $model)) {\n    $dropdownActions[] = 'divider';\n    $dropdownActions[] = [\n        'data' => ['target' => 'primary-dialog', 'bulk-action' => 'ajax', 'toggle' => 'dialog', 'url' => route('bulk.delete-relations', [$campaign])],\n        'class' => 'text-error-content hover:bg-error',\n        'icon' => 'trash',\n        'text' => __('crud.remove')\n    ];\n} elseif (isset($entityType) && auth()->check() && auth()->user()->can('deleteEntities', [$entityType, $campaign])) {\n    $dropdownActions[] = 'divider';\n    $dropdownActions[] = [\n        'data' => ['target' => 'primary-dialog', 'bulk-action' => 'ajax', 'toggle' => 'dialog', 'url' => route('bulk.delete', [$campaign, 'entity_type' => $entityType->id])],\n        'class' => 'text-error-content hover:bg-error',\n        'icon' => 'trash',\n        'text' => __('crud.remove')\n    ];\n}\n\n\n@endphp\n\n@if (!empty($dropdownActions))\n<div class=\"datagrid-bulk-actions inline-block\">\n    <div class=\"dropdown\"  id=\"batch-actions-dropdown\">\n        <a role=\"button\" tabindex=\"0\" class=\"btn2\" data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"batch-actions-submenu\" aria-label=\"Batch actions\" data-append=\"#batch-actions-dropdown\">\n            <x-icon class=\"fa-solid fa-caret-down\" />\n            {{ __('crud.bulk.buttons.label') }}\n        </a>\n        <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"batch-actions-submenu\" data-tippy-root>\n            @foreach ($dropdownActions as $dropdownAction)\n                @if ($dropdownAction === 'divider')\n                    <x-dropdowns.divider />\n                    @continue\n                @elseif (!is_array($dropdownAction))\n                    @continue\n                @elseif ($dropdownAction['class'] === 'bulk-print')\n                    <button type=\"submit\" name=\"action\" value=\"print\" class=\"px-2 py-2 hover:bg-base-200 rounded-xl flex items-center gap-1.5 text-sm transition-all duration-150 cursor-pointer\">\n                        <span class=\"shrink-0 w-5 text-center text-neutral-content flex-none\">\n                            <x-icon :class=\"$dropdownAction['icon']\" />\n                        </span>\n                        {!! $dropdownAction['text'] !!}\n                    </button>\n                @else\n                    <x-dropdowns.item link=\"#\" :css=\"$dropdownAction['class']\" :data=\"$dropdownAction['data'] ?? []\" :icon=\"$dropdownAction['icon']\">\n                        {!! $dropdownAction['text'] !!}\n                    </x-dropdowns.item>\n                @endif\n            @endforeach\n        </div>\n    </div>\n</div>\n@endif\n\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/_batch-footer.blade.php",
    "content": "<menu class=\"flex flex-wrap gap-3 ps-0\">\n    <button class=\"btn2 btn-primary\" type=\"submit\">\n        <x-icon class=\"save\" />\n        {{ __('crud.actions.apply') }}\n    </button>\n</menu>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/_batch.blade.php",
    "content": "<x-form :action=\"['bulk.batch.apply', $campaign, $entityType]\" direct>\n    @include('partials.forms._dialog', [\n        'title' => __('crud.bulk.edit.title'),\n        'content' => 'cruds.datagrids.bulks.modals.forms._batch',\n    ])\n    @foreach ($entities as $id)\n        <input type=\"hidden\" name=\"entities[]\" value=\"{{ $id }}\" />\n    @endforeach\n</x-form>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/_copy_campaign.blade.php",
    "content": "<x-form :action=\"['bulk.copy-to-campaign.apply', $campaign, $entityType]\" direct>\n    @include('partials.forms._dialog', [\n        'title' => __('crud.copy_to_campaign.bulk_title'),\n        'content' => 'cruds.datagrids.bulks.modals.forms._copy',\n        'submit' => __('crud.actions.copy_to_campaign'),\n    ])\n    @if (!empty($entities))\n        @foreach ($entities as $id)\n            <input type=\"hidden\" name=\"entities[]\" value=\"{{ $id }}\" />\n        @endforeach\n    @else\n        <input type=\"hidden\" name=\"models\" />\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/_permissions.blade.php",
    "content": "<x-form :action=\"['bulk.permissions.apply', $campaign, $entityType]\" direct>\n    @include('partials.forms._dialog', [\n        'title' => __('crud.bulk.permissions.title'),\n        'content' => 'cruds.datagrids.bulks.modals.forms._permissions',\n        'submit' => __('crud.bulk.actions.permissions'),\n    ])\n    @if (!empty($entities))\n        @foreach ($entities as $id)\n            <input type=\"hidden\" name=\"entities[]\" value=\"{{ $id }}\" />\n        @endforeach\n    @else\n    <input type=\"hidden\" name=\"models\" />\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/_templates.blade.php",
    "content": "<x-form :action=\"['bulk.templates.apply', $campaign, $entityType]\" direct>\n    @include('partials.forms._dialog', [\n        'title' => __('crud.bulk_templates.bulk_title'),\n        'content' => 'cruds.datagrids.bulks.modals.forms._templates',\n        'submit' => __('crud.actions.apply'),\n    ])\n    @if (!empty($entities))\n        @foreach ($entities as $id)\n            <input type=\"hidden\" name=\"entities[]\" value=\"{{ $id }}\" />\n        @endforeach\n    @else\n        <input type=\"hidden\" name=\"models\" />\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/_transform.blade.php",
    "content": "<x-form :action=\"['bulk.transform.apply', $campaign, $entityType]\" direct>\n    @include('partials.forms._dialog', [\n        'title' => __('entities/transform.panel.bulk_title'),\n        'content' => 'cruds.datagrids.bulks.modals.forms._transform',\n        'submit' => __('entities/transform.actions.convert'),\n    ])\n    @if (!empty($entities))\n        @foreach ($entities as $id)\n            <input type=\"hidden\" name=\"entities[]\" value=\"{{ $id }}\" />\n        @endforeach\n    @else\n        <input type=\"hidden\" name=\"models\" />\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/ajax.blade.php",
    "content": "<x-form :action=\"['bulk.process', $campaign]\" direct>\n    <div class=\"modal fade\" id=\"bulk-ajax\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"clickConfirmLabel\">\n        <div class=\"modal-dialog modal-lg\" role=\"document\">\n            <div class=\"modal-content bg-base-100\">\n            </div>\n        </div>\n    </div>\n    <input type=\"hidden\" name=\"mode\" value=\"{{ $mode }}\" />\n    <input type=\"hidden\" name=\"models\" value=\"\" id=\"datagrid-bulk-ajax-models\" />\n</x-form>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/batch.blade.php",
    "content": "<?php /** @var \\App\\Datagrids\\Bulks\\Bulk $bulk */ $fieldCount = 0;?>\n<x-form :action=\"['bulk.process', $campaign]\" direct>\n<x-dialog id=\"bulk-edit\" :title=\"__('crud.bulk.edit.title')\" footer=\"cruds.datagrids.bulks.modals._batch-footer\">\n    <x-grid>\n        @foreach ($bulk->fields() as $field)\n            @php\n                $trimmed = \\Illuminate\\Support\\Str::before($field, '_id');\n                $isParent = isset($entityType) ? \\Illuminate\\Support\\Str::contains($trimmed, $entityType->code) : false;\n            @endphp\n\n            {!! $fieldCount % 2 === 0 ? '' : null !!}\n            @include('cruds.fields.' . $trimmed, [\n                'trans' => $name,\n                'base' => $model,\n                'bulk' => true,\n                'parent' => \\Illuminate\\Support\\Str::plural($trimmed) == $name,\n                'allowNew' => false,\n                'dropdownParent' => '#bulk-edit',\n                'route' => null,\n                'isParent' => $isParent,\n            ])\n            @php $fieldCount++; @endphp\n        @endforeach\n    </x-grid>\n</x-dialog>\n<input type=\"hidden\" name=\"datagrid-action\" value=\"batch\" />\n<input type=\"hidden\" name=\"entity\" value=\"{{ $name }}\" />\n<input type=\"hidden\" name=\"mode\" value=\"{{ $mode }}\" />\n    @if (!empty($entities))\n        @foreach ($entities as $id)\n            <input type=\"hidden\" name=\"entities[]\" value=\"{{ $id }}\" />\n        @endforeach\n    @else\n        <input type=\"hidden\" name=\"models\" value=\"\" id=\"datagrid-bulk-batch-models\" />\n    @endif\n@isset($entityType) <input type=\"hidden\" name=\"entity_type\" value=\"{{ $entityType->id }}\" />@endisset\n</x-form>\n\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/delete/_footer.blade.php",
    "content": "\n<menu class=\"flex flex-wrap gap-3 ps-0 ms-0\">\n    <button autofocus type=\"button\" class=\"btn2 btn-outline btn-full\" onclick=\"this.closest('dialog').close('close')\">\n        {{ __('crud.cancel') }}\n    </button>\n</menu>\n<menu class=\"flex flex-wrap gap-3 ps-0\">\n    <button type=\"submit\" class=\"btn2 btn-error btn-outline\" name=\"datagrid-action\" value=\"delete\">\n        <x-icon class=\"trash\" />\n        <span class=\"remove-button-label\">{{ __('crud.remove') }}</span>\n    </button>\n</menu>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/delete/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <p class=\"text-neutral-content\">\n        {{ __('confirm.delete.bulk') }}\n    </p>\n    @if(isset($datagrid) && !$datagrid->hasBulkPermissions())\n        <p class=\"text-neutral-content permanent\">\n        {{ __('crud.delete_modal.permanent') }}\n        </p>\n    @endif\n    <div class=\"recoverable\">\n        @includeWhen(!isset($datagrid) || $datagrid->hasBulkPermissions(), 'layouts.callouts.recoverable')\n        @includeWhen(isset($datagrid) && $datagrid instanceof \\App\\Datagrids\\Actions\\RelationDatagridActions, 'cruds.datagrids.bulks.modals.delete._mirrored')\n    </div>\n</x-grid>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/delete/_mirrored.blade.php",
    "content": "<p>\n<x-forms.field field=\"delete-mirror\" :label=\"__('entities/relations.bulk.fields.delete_mirrored')\">\n    <input type=\"hidden\" name=\"delete_mirrored\" value=\"0\"/>\n    <x-checkbox :text=\"__('entities/relations.bulk.helpers.delete_mirrored')\">\n        <input type=\"checkbox\" name=\"delete_mirrored\" value=\"1\" @if (old('delete_mirrored', false)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n</p>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/delete/delete.blade.php",
    "content": "<?php /** @var \\App\\Datagrids\\Datagrid $datagrid */?>\n\n<x-form :action=\"['bulk.delete.apply', $campaign, $entityType]\" direct>\n    @include('partials.forms._dialog', [\n        'title' =>__('crud.delete_modal.title'),\n        'content' => 'cruds.datagrids.bulks.modals.delete._form',\n        'footer' => 'cruds.datagrids.bulks.modals.delete._footer',\n    ])\n    @if (!empty($entities))\n        @foreach ($entities as $id)\n            <input type=\"hidden\" name=\"entities[]\" value=\"{{ $id }}\" />\n        @endforeach\n    @else\n        <input type=\"hidden\" name=\"models\" />\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/delete/relation.blade.php",
    "content": "<?php /** @var \\App\\Datagrids\\Datagrid $datagrid */?>\n\n<x-form :action=\"['bulk.delete-relations.apply', $campaign]\" direct>\n    @include('partials.forms._dialog', [\n        'title' =>__('crud.delete_modal.title'),\n        'content' => 'cruds.datagrids.bulks.modals.delete._form',\n        'footer' => 'cruds.datagrids.bulks.modals.delete._footer',\n    ])\n    <input type=\"hidden\" name=\"models\" />\n</x-form>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/forms/_batch.blade.php",
    "content": "<?php /** @var \\App\\Datagrids\\Bulks\\ $bulk */ $fieldCount = 0;?>\n<x-grid>\n    @foreach ($bulk->fields() as $field)\n        @php\n            $trimmed = \\Illuminate\\Support\\Str::before($field, '_id');\n            $isParent = $field === 'parent_id';\n        @endphp\n\n        {!! $fieldCount % 2 === 0 ? '' : null !!}\n        @include('cruds.fields.' . $trimmed, [\n            'trans' => $isParent || $trimmed === 'type' ? 'crud' : $entityType->pluralCode(),\n            'base' => $model ?? null,\n            'bulk' => true,\n            'parent' => false,\n            'allowNew' => false,\n            'dropdownParent' => '#primary-dialog',\n            'route' => null,\n            'isParent' => $isParent,\n        ])\n        @php $fieldCount++; @endphp\n    @endforeach\n</x-grid>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/forms/_copy.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>\n        {{ __('entities/move.panel.description_bulk_copy') }}\n        </p>\n    </x-helper>\n\n    <x-forms.field field=\"campaign\" :label=\"__('entities/move.fields.campaign')\">\n        <x-forms.select name=\"campaign\" :options=\"$campaigns\" class=\"w-full\" />\n    </x-forms.field>\n\n    @includeIf($type . '.bulk.modals._copy_to_campaign')\n</x-grid>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/forms/_permissions.blade.php",
    "content": "<?php\n$actions = [\n    'allow' => __('crud.permissions.actions.bulk_entity.allow'),\n    'ignore' => __('crud.permissions.actions.bulk.ignore'),\n    'deny' => __('crud.permissions.actions.bulk_entity.deny'),\n    'inherit' => __('crud.permissions.actions.bulk_entity.inherit'),\n];\n?>\n<table id=\"crud_permissions\" class=\"table table-hover\">\n    <tbody>\n    <tr>\n        <th>{{ __('crud.permissions.fields.role') }}</th>\n        <th>{{ __('crud.permissions.actions.view') }}</th>\n        <th>{{ __('crud.permissions.actions.edit') }}</th>\n        <th>{{ __('crud.permissions.actions.delete') }}</th>\n        <th>{{ __('entities.articles') }}</th>\n    </tr>\n    <?php /** @var \\App\\Models\\CampaignRole $role */ ?>\n    @foreach ($campaign->roles()->withoutAdmin()->get() as $role)\n        <tr>\n            <td>{{ $role->name }}</td>\n            <td class=\"field\">\n                <x-forms.select name=\"role[{{ $role->id }}][{{ \\App\\Enums\\Permission::View->value }}]\" :options=\"$actions\" selected=\"ignore\" />\n            </td>\n            @if (!$role->is_public)\n                <td class=\"field\">\n                    <x-forms.select name=\"role[{{ $role->id }}][{{ \\App\\Enums\\Permission::Update->value }}]\" :options=\"$actions\" selected=\"ignore\" />\n                </td>\n                <td class=\"field\">\n                    <x-forms.select name=\"role[{{ $role->id }}][{{ \\App\\Enums\\Permission::Delete->value }}]\" :options=\"$actions\" selected=\"ignore\" />\n                </td>\n                <td class=\"field\">\n                    <x-forms.select name=\"role[{{ $role->id }}][{{ \\App\\Enums\\Permission::Posts->value }}]\" :options=\"$actions\" selected=\"ignore\" />\n                </td>\n            @else\n                <td colspan=\"3\"></td>\n            @endif\n        </tr>\n    @endforeach\n    <tr>\n        <td colspan=\"5\">&nbsp;</td>\n    </tr>\n    <tr>\n        <th>{{ __('crud.permissions.fields.member') }}</th>\n        <th>{{ __('crud.permissions.actions.view') }}</th>\n        <th>{{ __('crud.permissions.actions.edit') }}</th>\n        <th>{{ __('crud.permissions.actions.delete') }}</th>\n        <th>{{ __('entities.articles') }}</th>\n    </tr>\n    <?php /** @var \\App\\Models\\CampaignUser $member */ ?>\n    @foreach ($campaign->members()->with('user')->withoutAdmins()->paginate(20) as $member)\n        <tr>\n            <td>{{ $member->user->name }}</td>\n            <td class=\"field\">\n                <x-forms.select name=\"user[{{ $member->user_id }}][{{ \\App\\Enums\\Permission::View->value }}]\" :options=\"$actions\" selected=\"ignore\" />\n            </td>\n            <td class=\"field\">\n                <x-forms.select name=\"user[{{ $member->user_id }}][{{ \\App\\Enums\\Permission::Update->value }}]\" :options=\"$actions\" selected=\"ignore\" />\n            </td>\n            <td class=\"field\">\n                <x-forms.select name=\"user[{{ $member->user_id }}][{{ \\App\\Enums\\Permission::Delete->value }}]\" :options=\"$actions\" selected=\"ignore\" />\n            </td>\n            <td class=\"field\">\n                <x-forms.select name=\"user[{{ $member->user_id }}][{{ \\App\\Enums\\Permission::Posts->value }}]\" :options=\"$actions\" selected=\"ignore\" />\n            </td>\n        </tr>\n    @endforeach\n    </tbody>\n</table>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/forms/_templates.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-forms.field\n        field=\"template\"\n        required\n        :label=\"__('entities/attributes.fields.kit')\"\n        :helper=\"__('attributes/templates.pitch', [\n            'boosted-campaign' => '<a href=\\'https://kanka.io/premium\\' class=\\'text-link\\'>' . __('concept.premium-campaigns') . '</a>',\n            'marketplace' => '<a href=\\'' . config('marketplace.url') . '/character-sheets\\' class=\\'text-link\\'>' . __('footer.plugins') . '</a>'\n        ])\">\n        <x-forms.select name=\"template_id\" :options=\"$templates\" class=\"w-full\" :placeholder=\"__('entities/attributes.placeholders.kit')\" required />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals/forms/_transform.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>\n        {{ __('entities/transform.panel.bulk_description') }}\n        </p>\n    </x-helper>\n\n    <x-forms.field field=\"target\" :label=\"__('entities/transform.fields.target')\">\n        <x-forms.select name=\"target\" :options=\"$entityTypes\" class=\"w-full\" required />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/bulks/modals.blade.php",
    "content": "@includeWhen(isset($bulk), 'cruds.datagrids.bulks.modals.batch')\n"
  },
  {
    "path": "resources/views/cruds/datagrids/explore.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\MiscModel $model\n * @var \\App\\Models\\EntityType $entityType\n * */?>\n<div class=\"flex gap-1 items-start\">\n    <div class=\"entities-grid flex flex-wrap gap-3 lg:gap-5 w-full\">\n        @if (!empty($parent))\n            <a href=\"{{ route($route, array_merge($parent->parent ? [$campaign, 'parent_id' => $parent->parent->id] : [$campaign], isset($entityType) && $entityType->isCustom() ? ['entityType' => $entityType] : [])) }}\" class=\"entity w-[47%] xs:w-[25%] sm:w-48 overflow-hidden rounded flex flex-col shadow-sm hover:shadow-md sm\">\n                <div class=\"w-46 flex items-center justify-center grow  text-6xl\">\n                    <i class=\"fa-solid fa-arrow-left\" aria-hidden=\"true\"></i>\n                </div>\n                <div class=\"block text-center p-4 h-12 bg-box\">\n                    @if ($parent->parent)\n                    {{ __('datagrids.actions.back_to', ['name' => $parent->parent->name]) }}\n                    @else\n                        {{ __('crud.actions.back') }}\n                    @endif\n                </div>\n            </a>\n            @includeWhen(!isset($entityType) || $entityType->isCustom(), 'entities.index._entity', ['model' => $parent, 'isParent' => true])\n            @includeWhen(isset($entityType) && $entityType->isStandard(), 'cruds.datagrids._grid', ['model' => $parent, 'isParent' => true])\n        @endif\n        @forelse ($models as $model)\n            @includeWhen(!isset($entityType) || $entityType->isCustom(), 'entities.index._entity')\n            @includeWhen(isset($entityType) && $entityType->isStandard(), 'cruds.datagrids._grid')\n        @empty\n            @isset($entityType)\n            <x-lists.empty-state :entityType=\"$entityType\" :campaign=\"$campaign\">\n            </x-lists.empty-state>\n            @else\n            <p class=\"italic\">\n                {{ __('search.no_results') }}\n            </p>\n            @endif\n        @endforelse\n    </div>\n</div>\n\n@include('ads.inline')\n\n\n@if($models instanceof \\Illuminate\\Pagination\\LengthAwarePaginator && $models->hasPages())\n        {{ $models\n            ->appends(isset($filterService) ? $filterService->pagination() : (isset($term) ? ['term' => $term] : null))\n            ->onEachSide(0)\n            ->links(null, ['settingsLink' => base64_encode(route($route, $route === 'entities.index' ? [$campaign, $entityType] : $campaign))])\n }}\n@endif\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_archived.blade.php",
    "content": "<select class=\"filter-select w-full entity-list-filter\" id=\"{{ $field }}\" name=\"{{ $field }}\">\n    <option value=\"\"></option>\n    <option value=\"1\"  @if ($filterService->filterValue($field) === '1') selected=\"selected\" @endif>{{ __('crud.filters.options.show') }}</option>\n</select>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_array.blade.php",
    "content": "\n@php\n    $options = [\n        '' => __('crud.filters.options.include'),\n        'children' => __('crud.filters.options.children'),\n        'exclude' => __('crud.filters.options.exclude'),\n        'none' => __('crud.filters.options.none'),\n    ];\n    if (!isset($field['withChildren']) || $field['withChildren'] !== true) {\n        unset($options['children']);\n    }\n    if ($field['type'] == 'selectMultiple' && isset($models)) {\n        $selectedModels = $models;\n        $ids = array_keys($selectedModels);\n    } elseif (!empty($model) ) {\n        $selectedModels = [$model->id => $model->name];\n    } else {\n        $selectedModels = [];\n    }\n@endphp\n<div class=\"grid grid-cols-4 gap-2\">\n    <div class=\"col-span-3 text-left\">\n        @if ($field['type'] == 'selectMultiple')\n        <input type=\"hidden\" name=\"{{ $field['field'] . '[]' }}\" value=\"\" />\n        @endif\n        <x-forms.select\n            :name=\"($field['type'] == 'selectMultiple') ? $field['field'] . '[]' : $field['field']\"\n            :options=\"$selectedModels\"\n            :selected=\"$ids ?? null\"\n            class=\"select2 entity-list-filter\"\n            :multiple=\"$field['type'] == 'selectMultiple'\"\n            :extra=\"[\n                'data-url' => $field['route'],\n                'data-placeholder' => $field['placeholder'],\n                'data-dropdown-parent' => '#datagrid-filters',\n                'data-allow-clear' => $field['type'] == 'select2' ? 'true' : 'false',\n            ]\" />\n    </div>\n    <div class=\"col-span-1 field\">\n\n        <x-forms.select\n            :name=\"$field['field'] . '_option'\"\n            :options=\"$options\"\n            :selected=\"$filterService->single($field['field'] . '_option')\"\n            class=\"entity-list-option\" />\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_attributes.blade.php",
    "content": "<x-grid>\n    <x-forms.field field=\"filter-name\" :label=\"__('entities/attributes.filters.name')\">\n        <input type=\"text\" class=\"w-full entity-list-filter\" name=\"attribute_name\" value=\"{{ $filterService->single('attribute_name') }}\" />\n    </x-forms.field>\n    <x-forms.field field=\"filter-value\" :label=\"__('entities/attributes.filters.value')\">\n        <input type=\"text\" class=\"w-full entity-list-filter\" name=\"attribute_value\" value=\"{{ $filterService->single('attribute_value') }}\" />\n    </x-forms.field>\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_choice.blade.php",
    "content": "<select class=\"filter-select w-full entity-list-filter\" id=\"{{ $field }}\" name=\"{{ $field }}\">\n    <option value=\"\"></option>\n    <option value=\"0\" @if ($filterService->filterValue($field) === '0') selected=\"selected\" @endif>{{ __('general.no') }}</option>\n    <option value=\"1\"  @if ($filterService->filterValue($field) === '1') selected=\"selected\" @endif>{{ __('general.yes') }}</option>\n</select>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_connection.blade.php",
    "content": "@php \n    if ($filterService->single('connection_target')) {\n        $model = \\App\\Models\\Entity::find($filterService->single('connection_target'));\n    }\n@endphp\n\n<x-grid>\n    <x-forms.foreign\n        field=\"connection_target\"\n        :required=\"false\"\n        label=\"entities/relations.filters.name\"\n        name=\"connection_target\"\n        id=\"connection_target\"\n        :campaign=\"$campaign\"\n        :route=\"route('search.entities-with-relations', [$campaign])\"\n        :selected=\"$model\"\n        allow-clear=\"true\"\n    >\n    </x-forms.foreign>\n\n    <x-forms.field field=\"filter-connection-name\" :label=\"__('entities/relations.filters.connection')\">\n        <input type=\"text\" class=\"w-full entity-list-filter\" name=\"connection_name\" value=\"{{ $filterService->single('connection_name') }}\" />\n    </x-forms.field>\n</x-grid>"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_date-range.blade.php",
    "content": "\n<div class=\"grid gap-2 md:gap-4 grid-cols-1 sm:grid-cols-2\">\n    <input type=\"date\" class=\"w-full entity-list-filter\" name=\"date_start\" value=\"{{ $filterService->single('date_start') }}\" />\n    <input type=\"date\" class=\"w-full entity-list-filter\" name=\"date_end\" value=\"{{ $filterService->single('date_end') }}\" />\n</div>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_date.blade.php",
    "content": "<input type=\"date\" class=\"w-full entity-list-filter\" name=\"{{ $field }}\" value=\"{{ $filterService->single($field) }}\" />\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_element-role.blade.php",
    "content": "<input type=\"text\" class=\"w-full entity-list-filter\" name=\"{{ $field }}\" value=\"{{ $filterService->single($field) }}\" autocomplete=\"off\" list=\"entity-role-list\" />\n<div class=\"hidden\">\n    <datalist id=\"entity-role-list\">\n        @foreach (\\App\\Facades\\QuestCache::campaign($campaign)->roleSuggestion() as $suggestion)\n            <option value=\"{{ $suggestion }}\">{{ $suggestion }}</option>\n        @endforeach\n    </datalist>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_select.blade.php",
    "content": "<input type=\"hidden\" name=\"{{ $field['id'] }}\" value=\"\" />\n<x-forms.select\n    :name=\"$field['field']\"\n    :options=\"array_merge(['' => ''], $field['data'])\"\n    :selected=\"$value\"\n    :id=\"$field['field']\"\n    class=\"select2 entity-list-filter\"\n    :extra=\"['data-dropdown-parent' => '#datagrid-filters']\" />\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_sex.blade.php",
    "content": "<input type=\"text\" class=\"w-full entity-list-filter\" name=\"{{ $field }}\" value=\"{{ $filterService->single($field) }}\" autocomplete=\"off\" list=\"entity-gender-list\" />\n\n<datalist id=\"entity-gender-list\">\n    @foreach (\\App\\Facades\\CharacterCache::campaign($campaign)->genderSuggestion() as $suggestion)\n        <option value=\"{{ $suggestion }}\">{{ $suggestion }}</option>\n    @endforeach\n</datalist>\n\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_status.blade.php",
    "content": "@php\n    $categoryStatuses = \\App\\Models\\CategoryStatus::where('category_id', $entityType->id)\n        ->orderBy('sort_order')\n        ->get();\n    $currentValue = $filterService->filterValue($field);\n@endphp\n<select class=\"filter-select w-full entity-list-filter\" id=\"{{ $field }}\" name=\"{{ $field }}\">\n    <option value=\"\"></option>\n    @foreach ($categoryStatuses as $catStatus)\n        <option value=\"{{ $catStatus->id }}\" @if ((string) $catStatus->id === $currentValue) selected=\"selected\" @endif>\n            {{ $catStatus->setRelation('entityType', $entityType)->name() }}\n        </option>\n    @endforeach\n</select>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_tag.blade.php",
    "content": "<div class=\"grid gap-2 md:gap-4 grid-cols-4\">\n    <div class=\"col-span-3\">\n        <x-forms.tags\n            :campaign=\"$campaign\"\n            label=\"\"\n            allowClear=\"true\"\n            :options=\"$value\"\n            dropdownParent=\"#datagrid-filters\">\n        </x-forms.tags>\n    </div>\n    <div class=\"\">\n        <x-forms.select\n            :name=\"$field['field'] . '_option'\"\n            :options=\"['' => __('crud.filters.options.include'),\n                'exclude' => __('crud.filters.options.exclude'),\n                'any' => __('crud.filters.options.any'),\n                'none' => __('crud.filters.options.none'),]\"\n            :selected=\"$filterService->single($field['field'] . '_option')\"\n            class=\"select2 entity-list-filter\" />\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_template.blade.php",
    "content": "<select class=\"filter-select w-full entity-list-filter\" id=\"{{ $field }}\" name=\"{{ $field }}\">\n    <option value=\"\"></option>\n    <option value=\"0\" @if ($filterService->filterValue($field) === '0') selected=\"selected\" @endif>{{ __('crud.filters.options.hide') }}</option>\n    <option value=\"1\"  @if ($filterService->filterValue($field) === '1') selected=\"selected\" @endif>{{ __('crud.filters.options.show') }}</option>\n</select>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/_type.blade.php",
    "content": "<input type=\"text\" class=\"w-full entity-list-filter\" name=\"{{ $field }}\" value=\"{{ $filterService->single($field) }}\" autocomplete=\"off\" list=\"entity-type-list\" />\n\n<datalist id=\"entity-type-list\">\n    @foreach (\\App\\Facades\\EntityCache::campaign($campaign)->typeSuggestion($entityType) as $suggestion)\n        <option value=\"{{ $suggestion }}\">{{ $suggestion }}</option>\n    @endforeach\n</datalist>\n"
  },
  {
    "path": "resources/views/cruds/datagrids/filters/datagrid-filter.blade.php",
    "content": "@php\n/**\n * @var \\App\\Services\\FilterService $filterService\n */\n$activeFilters = $filterService->activeFiltersCount();\n@endphp\n\n\n<div class=\"grow flex gap-2\">\n    <div class=\"inline-block cursor-pointer btn2 btn-sm break-keep\" data-toggle=\"dialog\" data-target=\"datagrid-filters\" data-url=\"{{ isset($entityType) ? route('filters.form', [$campaign, $entityType, 'm' => $mode]) : route('filters.form-connection', [$campaign, 'm' => $mode]) }}\">\n        <x-icon class=\"fa-regular fa-filter\" />\n        <span class=\"hidden sm:inline\">{{ __('crud.filters.title') }}</span>\n        @if ($activeFilters > 0)\n            <x-badge type=\"primary\">\n                {{ $activeFilters }}\n            </x-badge>\n        @endif\n    </div>\n\n    @if ($activeFilters > 0)\n        @if (empty($bookmark) && isset($entityType))\n        @can('create', \\App\\Models\\Bookmark::class)\n            <div class=\"inline-block cursor-pointer btn2 btn-sm btn-primary break-keep\" role=\"button\" aria-label=\"{{ __('filters.actions.bookmark') }}\" data-toggle=\"dialog\" data-target=\"datagrid-filters\" data-url=\"{{ route('filters.modal_form', [$campaign, $entityType, 'm' => $mode]) }}\">\n                <x-icon class=\"fa-regular fa-bookmark\" />\n                <span class=\"hidden sm:inline\">{{ __('filters.actions.bookmark') }}</span>\n            </div>\n        @endcan\n        @endif\n        @if (isset($entityType))\n            <a href=\"{{ route('entities.index', [$campaign, $entityType, 'reset-filter' => 'true']) }}\" class=\"btn2 btn-ghost btn-sm\">\n                <x-icon class=\"fa-regular fa-eraser\" /> {{ __('crud.filters.clear') }}\n            </a>\n        @else\n            <a href=\"{{ route($route, [$campaign, 'reset-filter' => 'true']) }}\" class=\"btn2 btn-ghost btn-sm\">\n                <x-icon class=\"fa-regular fa-eraser\" /> {{ __('crud.filters.clear') }}\n            </a>\n        @endif\n    @endif\n</div>\n\n@section('modals')\n    @parent()\n    <x-dialog id=\"datagrid-filters\" :loading=\"true\" full=\"true\">\n\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/cruds/datagrids/sorters/simple-sorter.blade.php",
    "content": "<?php /** @var \\App\\Datagrids\\Sorters\\DatagridSorter $datagridSorter */?>\n@if (!empty($datagridSorter) && auth()->check())\n    @php\n        $baseRoute = request()->url() . '?' . (!empty($allMembers) ? 'all_members=1&' : (isset($filter) ? $filter : null));\n    @endphp\n    <div class=\"dropdown\">\n        <a role=\"button\" class=\"btn2 btn-sm\" data-dropdown aria-expanded=\"false\">\n            <i class=\"fa-regular fa-arrow-down-a-z\" aria-hidden=\"true\" data-tree=\"escape\"></i>\n            <span class=\"sr-only\">Order by</span>\n        </a>\n        <div class=\"dropdown-menu hidden\" role=\"menu\">\n            @foreach ($datagridSorter->options($campaign) as $key => $val)\n                @if ($key === 'today')\n                    <x-dropdowns.item\n                        :active=\"$datagridSorter->isSelected($key)\"\n                        :link=\"$baseRoute . $datagridSorter->fieldname() . '=' . $key . $datagridSorter->direction()\">\n                        {{ __('calendars.sorters.after') }}\n                    </x-dropdowns.item>\n\n                    <x-dropdowns.item\n                        :link=\"$baseRoute . $datagridSorter->fieldname() . '=' . $key . $datagridSorter->direction(false)\"\n                        :active=\"$datagridSorter->isSelected($key, flase)\">\n                        {{ __('calendars.sorters.before') }}\n                    </x-dropdowns.item>\n                @else\n                    <x-dropdowns.item\n                        :link=\"$baseRoute . $datagridSorter->fieldname() . '=' . $key . $datagridSorter->direction()\"\n                        :active=\"$datagridSorter->isSelected($key)\">\n                        {{ __('crud.filters.sorting.asc', ['field' => __($val)]) }}\n                    </x-dropdowns.item>\n\n                    <x-dropdowns.item\n                        :link=\"$baseRoute . $datagridSorter->fieldname() . '=' . $key . $datagridSorter->direction(false)\"\n                        :active=\"$datagridSorter->isSelected($key, false)\">\n                        {{ __('crud.filters.sorting.desc', ['field' => __($val)]) }}\n                    </x-dropdowns.item>\n                @endif\n            @endforeach\n        </div>\n    </div>\n@endif\n\n"
  },
  {
    "path": "resources/views/cruds/fields/_image_preview.blade.php",
    "content": "<div class=\"preview-v2\">\n    <div class=\"image rounded h-28 cover-background relative w-full flex items-end \" style=\"background-image: url('{{ $image }}')\" aria-title=\"{{ $title }}\">\n        @if (isset($target) && !empty($target))\n        <a href=\"#\" data-img=\"delete\" class=\"text-center block rounded w-full p-2 overflow-hidden m-1 text-white hover:bg-error backdrop-blur-sm duration-150 transition-opacity truncate\" data-target=\"{{ $target }}\" data-tooltip data-title=\"{{ __('crud.remove') }}\" aria-label=\"{{ __('crud.remove') }}\">\n            <x-icon class=\"trash\" /> {{ __('crud.remove') }}\n        </a>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/ability.blade.php",
    "content": "@if (!$campaign->enabled('abilities'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->ability) {\n    $preset = $model->ability;\n} elseif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Ability::class);\n}\n@endphp\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"ability_id\"\n    key=\"ability\"\n    :allowNew=\"$allowNew ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.ability')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.ability')\">\n</x-forms.foreign>\n\n"
  },
  {
    "path": "resources/views/cruds/fields/age.blade.php",
    "content": "@php\n    $fieldID = uniqid('age_');\n@endphp\n<x-forms.field\n    field=\"age\"\n    :label=\"__($trans . '.fields.age')\"\n    :helper=\"isset($bulk) && $bulk ? __('crud.bulk.age.helper') : null\"\n    :id=\"$fieldID\">\n\n    <input id=\"{{ $fieldID }}\" type=\"text\" name=\"age\" value=\"{{ old('age', $source->age ?? $model->age ?? null) }}\" maxlength=\"9\" class=\"w-full\"  autocomplete=\"off\" placeholder=\"{{ __($trans . '.placeholders.age') }}\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/attitude.blade.php",
    "content": "<x-forms.field\n    field=\"attitude\"\n    :label=\"__('entities/relations.fields.attitude')\"\n    :helper=\"__('entities/relations.hints.attitude')\"\n    tooltip>\n    <input type=\"number\" name=\"attitude\" class=\"w-full\" value=\"{{ old('attitude', $model->attitude ?? null) }}\" min=\"-100\" max=\"100\" placeholder=\"{{ __('entities/relations.placeholders.attitude') }}\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/attribute_template.blade.php",
    "content": "@inject('attributeTemplateService', 'App\\Services\\AttributeService')\n@php $attributeTemplates = $attributeTemplateService->campaign($campaign)->templateList() @endphp\n@if (empty($attributeTemplates))\n    <?php return ?>\n@endif\n\n<div class=\"max-w-xl\">\n    <x-forms.field\n        field=\"template\"\n        :label=\"__('entities.attribute_template')\"\n        tooltip\n        entityT\n        :helper=\"__('crud.hints.kit')\"\n        :entityTypeID=\"config('entities.ids.attribute_template')\">\n        <x-forms.select name=\"template_id\" :options=\"$attributeTemplates\" id=\"template_id\" placeholder=\"{{ __('entities/attributes.placeholders.template') }}\" />\n    </x-forms.field>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/author.blade.php",
    "content": "\n<input type=\"hidden\" name=\"author_id\" value=\"\" />\n    @include('cruds.fields.entity', [\n    'name' => 'author_id',\n    'preset' => !empty($model) && $model->author ? $model->author : null,\n    'relation' => 'author',\n    'label' => __('journals.fields.author'),\n])\n"
  },
  {
    "path": "resources/views/cruds/fields/auto_applied_choice.blade.php",
    "content": "<x-forms.field\n    field=\"auto-apply\"\n    :label=\"__('tags.fields.is_auto_applied')\">\n    <select name=\"is_auto_applied\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('general.no') }}</option>\n        <option value=\"1\">{{ __('general.yes') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/calendar.blade.php",
    "content": "@if (!$campaign->enabled('calendars'))\n    <?php return ?>\n@endif\n\n@if (!isset($preset))\n@php\n    $preset = null;\n    if (isset($model) && $model->calendar) {\n        $preset = $model->calendar;\n    } elseif (isset($model) && $model->parent) {\n        $preset = $model->parent;\n    } elseif (!isset($bulk)) {\n        $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Calendar::class);\n    }\n@endphp\n@endif\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"calendar_id\"\n    key=\"calendar\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.calendar')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.calendar')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/character.blade.php",
    "content": "@if (isset($campaign) && !$campaign->enabled('characters'))\n    @php return @endphp\n@endif\n\n@if (!isset($preset))\n    @php\n    $preset = null;\n    if (isset($model) && $model->character) {\n        $preset = $model->character;\n    } else {\n        $preset = FormCopy::field('character')->child()->select();\n    }\n    @endphp\n@endif\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    :name=\"$name ?? 'character_id'\"\n    key=\"character\"\n    :label=\"$label ?? null\"\n    :placeholder=\"$placeholder ?? null\"\n    :allowNew=\"$allowNew ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route($route ?? 'search-list', [$campaign, config('entities.ids.character')] + (isset($model) ? ['exclude' => $model->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.character')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/characters.blade.php",
    "content": "@if (!$campaign->enabled('characters'))\n    <?php return ?>\n@endif\n\n<div class=\"characters\">\n    <input type=\"hidden\" name=\"save_characters\" value=\"1\">\n    @include('components.form.characters', ['options' => [\n        'model' => $model ?? FormCopy::model(),\n        'dynamicNew' => $dynamicNew ?? $quickCreator ?? false,\n        'required'  => $required ?? false\n    ]])\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/charges.blade.php",
    "content": "<x-forms.field\n    field=\"charges\"\n    :label=\"__('abilities.fields.charges')\">\n\n    <input type=\"text\" name=\"charges\" value=\"{{ old('charges', $source->charges ?? $model->charges ?? null) }}\" maxlength=\"120\" class=\"w-full\"  autocomplete=\"off\" placeholder=\"{{ __('abilities.placeholders.charges') }}\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/closed.blade.php",
    "content": "<x-forms.field\n    field=\"closed\"\n    :label=\"__('crud.fields.closed')\">\n    <input type=\"hidden\" name=\"is_closed\" value=\"0\" />\n    <x-checkbox :text=\"__('crud.fields.is_closed')\">\n        <input type=\"checkbox\" name=\"is_closed\" value=\"1\" @if (old('is_closed', $source->child->is_closed ?? $model->is_closed ?? false)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/colour.blade.php",
    "content": "<x-forms.field\n    field=\"colour\"\n    :required=\"$required ?? false\"\n    :label=\"__('crud.fields.colour')\"\n>\n    <x-forms.select name=\"colour\" :options=\"FormCopy::child()->colours()\" :selected=\"$source?->child->colour ?? $model->colour ?? $default ?? null\" class=\"w-full select2-colour\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/colour_picker.blade.php",
    "content": "<x-forms.field\n    field=\"colour\"\n    :label=\"__('crud.fields.colour')\">\n    <span>\n        <input type=\"text\" name=\"colour\" value=\"{{ old('colour', $model->colour ?? $default ?? null) }}\"\n           maxlength=\"7\" class=\"spectrum\" @if (isset($dropdownParent)) data-append-to=\"{{ $dropdownParent }}\" @endif />\n    </span>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/completed_choice.blade.php",
    "content": "\n<div class=\"completed\">\n    <label for=\"status_id\">{{ trans('quests.fields.status') }}</label>\n    <select name=\"status_id\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ trans('quests.status.not_started') }}</option>\n        <option value=\"1\">{{ trans('quests.status.ongoing') }}</option>\n        <option value=\"2\">{{ trans('quests.status.completed') }}</option>\n        <option value=\"3\">{{ trans('quests.status.abandoned') }}</option>\n    </select>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/creators.blade.php",
    "content": "<?php\n$selectedOption = [];\n$model = $model ?? FormCopy::model();\n$fieldUniqIdentifier = 'creators_' . uniqid();\n\n$previous = old('creators[]');\n\nif (!empty($previous)) {\n    // Form validation error, reload previous\n} elseif (!empty($model)) {\n    foreach ($model->itemCreators as $itemCreator) {\n        $selectedOption[$itemCreator->creator->id] = strip_tags($itemCreator->creator->name);\n    }\n}\n?>\n\n@if (isset($bulk) && $bulk)\n    <div class=\"grid gap-2 md:gap-4 grid-cols-2\">\n@endif\n\n<x-forms.field\n    field=\"creators\"\n    :label=\"__('items.fields.creators')\">\n\n<select\n    multiple=\"multiple\"\n    name=\"creators[]\"\n    class=\"w-full select2 join-item\"\n    data-tags=\"true\"\n    style=\"width: 100%\"\n    data-url=\"{{ route('search.entities-with-relations', [$campaign]) }}\"\n    data-allow-clear=\"true\"\n    data-placeholder=\"{{ __('crud.placeholders.search') }}\"\n    data-allow-new=\"false\"\n    id=\"{{ $fieldUniqIdentifier }}\">\n    @foreach ($selectedOption as $key => $val)\n        <option value=\"{{ $key }}\" selected=\"selected\">{{ $val }}</option>\n    @endforeach\n</select>\n\n</x-forms.field>\n\n@if (isset($bulk) && $bulk)\n    <x-forms.field field=\"bulk-creators\" :label=\"__('items.bulk.creators.action')\">\n        <label class=\"flex items-center gap-2\">\n            <input type=\"checkbox\" name=\"bulk-creators\" value=\"remove\" />\n            {{ __('items.bulk.creators.remove') }}\n        </label>\n    </x-forms.field>\n    </div>\n@else\n    <input type=\"hidden\" name=\"save_creators\" value=\"1\">\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/creature.blade.php",
    "content": "@if (!$campaign->enabled('creatures'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Creature::class);\n}\n@endphp\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"creature_id\"\n    key=\"creature\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.creature')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.creature')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/date.blade.php",
    "content": "<x-forms.field field=\"date\" :label=\"__(($trans ?? 'quests') . '.fields.date')\">\n    <input type=\"date\" name=\"date\" value=\"{{ old('date', $source->date ?? $model->date ?? null) }}\" class=\"w-full date-picker\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/dead_choice.blade.php",
    "content": "<x-forms.field field=\"dead\" :label=\"__('characters.fields.status')\">\n    <select name=\"status_id\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('characters.status.alive') }}</option>\n        <option value=\"1\">{{ __('characters.status.dead') }}</option>\n        <option value=\"2\">{{ __('characters.status.missing') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/defunct_choice.blade.php",
    "content": "<x-forms.field field=\"defunct\" :label=\"__('organisations.fields.is_defunct')\">\n    <select name=\"is_defunct\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('general.no') }}</option>\n        <option value=\"1\">{{ __('general.yes') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/destroyed.blade.php",
    "content": "<x-forms.field field=\"destroyed\" :label=\"__('locations.fields.is_destroyed')\">\n    <input type=\"hidden\" name=\"is_destroyed\" value=\"0\" />\n    <x-checkbox :text=\"__('locations.hints.is_destroyed')\">\n        <input type=\"checkbox\" name=\"is_destroyed\" value=\"1\" @if (old('is_destroyed', $source->child->is_destroyed ?? $model->is_destroyed ?? false)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/destroyed_choice.blade.php",
    "content": "<x-forms.field field=\"destroyed\" :label=\"__('locations.fields.is_destroyed')\">\n    <select name=\"is_destroyed\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('general.no') }}</option>\n        <option value=\"1\">{{ __('general.yes') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/draggable_choice.blade.php",
    "content": "<x-forms.field field=\"is-draggable\" :label=\"__('maps/markers.fields.is_draggable')\">\n    <select name=\"is_draggable\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('general.no') }}</option>\n        <option value=\"1\">{{ __('general.yes') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/enabled_choice.blade.php",
    "content": "<x-forms.field field=\"enabled\" :label=\"__('attribute_templates.fields.is_enabled')\">\n    <select name=\"is_enabled\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('general.no') }}</option>\n        <option value=\"1\">{{ __('general.yes') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/entity-name.blade.php",
    "content": "<?php\n$required = !isset($bulk);\n$fieldID = uniqid('name_');\n\n$endPoint = route('search-list', [$campaign, $entityType]);\n$entityId = $entity->id ?? null;\n$placeholder = __('entries/fields.name.placeholder');\n// Entity names can contain \", ', emojis, & and other special characters\n$modelValue = htmlspecialchars(old('name', str_replace('&amp;', '&', $model->name ?? '')));\n$label = __('crud.fields.name');\n\n// Existing aliases serialised for the Vue component (empty on create)\n$entityAliasCount = isset($entity) && $entity->id ? $entity->aliases()->count() : 0;\n$existingAliases = isset($entity) && $entity->id\n    ? $entity->aliases()->get()->map(fn (\\App\\Models\\EntityAsset $a) => [\n        'id'         => $a->id,\n        'name'       => $a->name,\n        'visibility' => match ($a->visibility_id) {\n            \\App\\Enums\\Visibility::Admin => 'admin',\n            \\App\\Enums\\Visibility::AdminSelf => 'admin-self',\n            \\App\\Enums\\Visibility::Self => 'self',\n            \\App\\Enums\\Visibility::Member => 'members',\n            default => 'all',\n        },\n    ])->toArray()\n    : [];\n\n// Compute effective alias limit for this entity's component.\n// null = unlimited (boosted campaign), integer = remaining slots for this entity.\nif ($campaign->boosted() || empty(config('limits.campaigns.aliases'))) {\n    $aliasLimit = null;\n} else {\n    $campaignAliasCount = $campaign->entityAliases()->count();\n    $campaignMaxAliases = config('limits.campaigns.aliases');\n    $aliasLimit = max(0, $campaignMaxAliases - $campaignAliasCount + $entityAliasCount);\n}\n\n$upgradeUrl = route('settings.premium');\n\n$i18n = json_encode([\n    'addAlias'          => __('entities/aliases.actions.add'),\n    'aliasPlaceholder'  => __('entities/aliases.placeholders.name'),\n    'duplicateWarning'  => __('entities.creator.duplicate'),\n    'save'              => __('crud.save'),\n    'delete'            => __('crud.remove'),\n    'aliasLimitReached' => __('entities/aliases.limit', [\n        'amount' => $campaignAliasCount ?? 0,\n        'max' => config('limits.campaigns.aliases'),\n        'upgrade' => '<a href=\"' . route('settings.premium') . '\" class=\"font-extrabold\">' . __('callouts.actions.upgrade') . '</a>'\n    ]),\n    'upgrade' => 'Upgrade to Premium',\n    'visibilityAll'      => __('crud.visibilities.all'),\n    'visibilityMembers'  => __('crud.visibilities.members'),\n    'visibilityAdmin'    => __('crud.visibilities.admin'),\n    'visibilityAdminSelf'=> __('crud.visibilities.admin-self'),\n    'visibilitySelf'     => __('crud.visibilities.self'),\n]);\n?>\n\n<div class=\"field-entity-name\">\n    <entity-name\n        label=\"{{ $label }}\"\n        placeholder=\"{{ $placeholder }}\"\n        end-point=\"{{ $endPoint }}\"\n        entity-id=\"{{ $entityId }}\"\n        model-value=\"{!! $modelValue !!}\"\n        :required=\"{{ $required ? 'true' : 'false' }}\"\n        aliases=\"{{ json_encode($existingAliases) }}\"\n        @if ($aliasLimit !== null) :alias-limit=\"{{ $aliasLimit }}\" @else :alias-limit=\"null\" @endif\n        upgrade-url=\"{{ $upgradeUrl }}\"\n        i18n=\"{{ $i18n }}\"\n    ></entity-name>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/entity.blade.php",
    "content": "@if (!isset($preset))\n    @php\n        $preset = null;\n        if (isset($model) && $model->{$relation ?? 'entity'}) {\n            $preset = $model->{$relation ?? 'entity'};\n        } elseif (!isset($bulk)) {\n            $preset = FormCopy::field($relation ?? 'entity')->child()->select($isParent ?? false, \\App\\Models\\Entity::class);\n        }\n    @endphp\n@endif\n@if (isset($required))\n    @php $allowClear = false;@endphp\n@endif\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    :name=\"$name ?? 'entity_id'\"\n    :key=\"$key ?? 'entity'\"\n    :required=\"$required ?? false\"\n    :label=\"$label ?? __('entities.entry')\"\n    :placeholder=\"$placeholder ?? __('search.placeholders.entry')\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :dynamicTag=\"$dynamicTag ?? null\"\n    :route=\"route($route ?? 'search.entities-with-relations', [$campaign] + (isset($model) ? ['exclude' => $model->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/entity_header.blade.php",
    "content": "@php\n$name = 'entity_header_uuid';\n$label = __('fields.gallery-header.description');\n$description = __('crud.fields.image');\n\nif (isset($bulk)) {\n    $name = 'entity_header';\n    $label = __('fields.header-image.title');\n    $description = '';\n}\n\n$preset = null;\nif (isset($model) && $model->entity && $model->entity->header_uuid) {\n    $preset = $model->entity->header;\n} else {\n    $preset = FormCopy::field('header')->select();\n}\n@endphp\n\n@if (isset($bulk) && !$campaign->boosted())\n    @include('cruds.fields.helpers.boosted', ['key' => 'fields.header-image.boosted-description'])\n@else\n    @php\n    // If the image is from the gallery and the user can't browse or upload, hide the field\n    $canBrowse = auth()->user()->can('browse', [\\App\\Models\\Image::class, $campaign]);\n    if (!empty($model->entity) && !empty($model->entity->header) && !$canBrowse) {\n        @endphp <input type=\"hidden\" name=\"{{ $name }}\" value=\"{{ $model->entity->header_uuid }}\" />@php\n        return;\n    }\n    @endphp\n    <x-forms.field\n        field=\"header-gallery\"\n        :label=\"$label\">\n        <x-grid type=\"{{ isset($bulk) ? '1-1' : '3/4' }}\">\n            <div class=\"col-span-3\">\n                <x-forms.foreign\n                    :campaign=\"$campaign\"\n                    :name=\"$name\"\n                    :allowClear=\"true\"\n                    :route=\"route('images.find', $campaign)\"\n                    :label=\"$description\"\n                    :placeholder=\"__('fields.gallery.placeholder')\"\n                    :selected=\"$preset\">\n                </x-forms.foreign>\n            </div>\n\n            @if (!isset($bulk))\n            <div class=\"preview\">\n                @if (!empty($model->entity) && !empty($model->entity->header_uuid) && !empty($model->entity->header))\n                    @include('cruds.fields._image_preview', [\n                        'image' => $model->entity->header->getUrl(194, 144, 'header_image'),\n                        'title' => $model->name,\n                    ])\n                @endif\n            </div>\n            @endif\n        </x-grid>\n    </x-forms.field>\n@endif\n@if (!empty($model->entity) && !empty($model->entity->image_uuid) && empty($model->entity->image))\n    <input type=\"hidden\" name=\"entity_image_uuid\" value=\"{{ $model->entity->image_uuid }}\" />\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/entity_image.blade.php",
    "content": "\n@php\n$preset = null;\n$name = 'entity_image_uuid';\n\nif (isset($bulk)) {\n    $name = 'entity_image';\n}\nif (isset($model) && $model->entity && $model->entity->image_uuid) {\n    $preset = $model->entity->image;\n} else {\n    $preset = FormCopy::field('image')->select();\n}\n@endphp\n@if(!isset($bulk))\n    <x-helper>\n        <p>{{ __('fields.gallery-image.description') }}</p>\n    </x-helper>\n@endif\n<x-grid type=\"{{ isset($bulk) ? '1-1' : '3/4' }}\">\n    <div class=\"col-span-3\">\n        <x-forms.foreign\n            field=\"image-gallery\"\n            :campaign=\"$campaign\"\n            :name=\"$name\"\n            :allowClear=\"true\"\n            :route=\"route('images.find', $campaign)\"\n            :label=\"__('crud.fields.image')\"\n            :placeholder=\"__('fields.gallery.placeholder')\"\n            :selected=\"$preset\">\n        </x-forms.foreign>\n    </div>\n        @if (!isset($bulk) && !empty($model->entity) && !empty($model->entity->image_uuid) && !empty($model->entity->image))\n            <div class=\"preview-v2\">\n                <a class=\"h-28 cover-background relative inline-block w-full text-white bg-red-900/50 hover:bg-red-900/90\" href=\"{{ route('gallery', [$campaign, 'folder_id' => $model->entity->image->folder_id]) }}\" style=\"background-image: url('{{ $model->entity->image->getUrl(240,112) }}')\" title=\"{{ $model->name }}\">\n                </a>\n            </div>\n        @endif\n</x-grid>\n@if (!empty($model->entity) && !empty($model->entity->image_uuid) && empty($model->entity->image))\n    <input type=\"hidden\" name=\"entity_image_uuid\" value=\"{{ $model->entity->image_uuid }}\" />\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/entity_link.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n@if ($entity)\n    @dd('Unknow call')\n    <x-forms.field field=\"entity\" :label=\"__('fields.entry.label')\">\n        <x-entity-link\n            :entity=\"$entity\"\n            :campaign=\"$campaign\"\n            bottom />\n    </x-forms.field>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/entity_locations.blade.php",
    "content": "@if (!$campaign->enabled('locations'))\n    <?php return ?>\n@endif\n@if (isset($bulk) && $bulk)\n    <div class=\"grid gap-2 md:gap-4 grid-cols-2\">\n@endif\n<input type=\"hidden\" name=\"save_locations\" value=\"1\">\n<x-forms.field field=\"locations\">\n    @include('components.form.locations', ['options' => [\n        'model' => $model->entity ?? $source ?? null,\n        'source' => $source ?? null,\n        'dynamicNew' => $dynamicNew ?? $quickCreator ?? false\n    ]])\n</x-forms.field>\n\n@if (isset($bulk) && $bulk)\n    <x-forms.field field=\"bulk-locations\" :label=\"__('crud.bulk.edit.locations')\">\n        <select name=\"bulk-locations\" class=\"w-full\">\n            <option value=\"add\">{{ __('crud.bulk.edit.tags.add') }}</option>\n            <option value=\"remove\">{{ __('crud.bulk.edit.tags.remove') }}</option>\n        </select>\n    </x-forms.field>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/entity_type.blade.php",
    "content": "<x-forms.field field=\"entity-type\" :label=\"__('attribute_templates.fields.auto_apply')\">\n    <select name=\"entity_type_id\" class=\"w-full\">\n        <option value=\"\"></option>\n        @if (isset($bulk) && $bulk)\n            <option value=\"0\">{{ __('attribute_templates.bulk.entity_type.unset') }}</option>\n        @endif\n        @foreach (\\App\\Models\\EntityType::inCampaign($campaign)->where('code', '<>', 'bookmark')->orderBy('code')->get() as $option)\n            <option value=\"{{ $option->id }}\">{{ $option->name() }}</option>\n        @endforeach\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/entry.blade.php",
    "content": "@php\n    $editor = auth()->user()->editor;\n    if (request()->has('tiptap')) {\n        $editor = 'tiptap';\n    } elseif (request()->has('tinymce')) {\n        $editor = 'legacy';\n    } elseif (request()->has('summernote')) {\n        $editor = '';\n    }\n    $fieldName = $fieldName ?? 'entry';\n    $fieldNameForEdition = $fieldName . 'ForEdition';\n@endphp\n\n@if ($editor === 'tiptap')\n    @include('editors.tiptap_editor', ['model' => $model, 'fieldName' => $fieldName, 'contentFieldName' => $fieldNameForEdition])\n@else\n    <textarea\n        id=\"{{ $fieldName }}\"\n        name=\"{{ $fieldName }}\"\n        class=\"w-full html-editor\"\n        rows=\"3\">\n        {!! FormCopy::field($fieldNameForEdition)->string() ?: old($fieldName, $model->{$fieldNameForEdition} ?? null) !!}\n    </textarea>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/entry2.blade.php",
    "content": "<?php\n$old = old('entry');\n?>\n<div class=\"field-entry md:col-span-2 entry flex flex-col gap-1\">\n    <div class=\"flex gap-2 items-center\">\n        <label class=\"grow m-0 text-xs font-medium opacity-80\">\n            {{ __('fields.description.label') }}\n        </label>\n\n        <a\n            href=\"//docs.kanka.io/en/latest/features/mentions.html\"\n            class=\"btn2 btn-xs btn-link\"\n            data-title=\"{{ __('helpers.link.description') }}\"\n            data-toggle=\"tooltip\">\n            {{ __('crud.helpers.linking') }}\n        </a>\n    </div>\n\n    @include('cruds.fields.entry', ['model' => $entity ?? null])\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/event.blade.php",
    "content": "@if (!$campaign->enabled('events'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Event::class);\n}\n@endphp\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"event_id\"\n    key=\"event\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.event')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.event')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/extinct_choice.blade.php",
    "content": "<x-forms.field field=\"extinct\" :label=\"__('creatures.fields.is_extinct')\">\n    <select name=\"is_extinct\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('general.no') }}</option>\n        <option value=\"1\">{{ __('general.yes') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/families.blade.php",
    "content": "@if (!$campaign->enabled('families'))\n    <?php return ?>\n@endif\n\n<div class=\"families\">\n    <input type=\"hidden\" name=\"save_families\" value=\"1\">\n    @include('components.form.families', ['options' => [\n        'model' => $model ?? FormCopy::model(),\n        'dynamicNew' => $dynamicNew ?? $quickCreator ?? false\n    ]])\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/family.blade.php",
    "content": "@if (!$campaign->enabled('families'))\n    <?php return ?>\n@endif\n\n@php\n    $preset = null;\n    if (isset($model) && $model->parent) {\n        $preset = $model->parent;\n    } elseif (!isset($bulk)) {\n        $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Family::class);\n    }\n@endphp\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"family_id\"\n    key=\"family\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.family')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.family')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/format.blade.php",
    "content": "<x-forms.field\n    field=\"format\"\n    :label=\"__('calendars.fields.format')\"\n    tooltip\n    :helper=\"__('calendars.helpers.format')\"\n    link=\"https://docs.kanka.io/en/latest/entries/calendars.html#date-format\">\n\n    <input type=\"text\" name=\"format\" value=\"{{ old('format', $source->format ?? $model->format ?? null) }}\" maxlength=\"191\" class=\"w-full\"  />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/helpers/boosted.blade.php",
    "content": "<x-alert type=\"info\">\n    <p>\n    @can('boost', auth()->user())\n        {!! __($key, ['boosted-campaign' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.boosted-campaign') . '</a>']) !!}\n    @else\n        {!! __($key, ['boosted-campaign' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>']) !!}\n    @endif\n    </p>\n</x-alert>\n"
  },
  {
    "path": "resources/views/cruds/fields/helpers/private.blade.php",
    "content": "<x-helper>\n    <p>{!! __('crud.fields.is_private_v3', [\n    'admin-role' => '<a href=\"' . route(\n        'campaigns.campaign_roles.admin',\n        $campaign,\n    ) . '\" class=\"text-link\">' .\n    $campaign->adminRoleName() . '</a>',\n\n]) !!}</p>\n</x-helper>\n"
  },
  {
    "path": "resources/views/cruds/fields/helpers/share.blade.php",
    "content": "@auth\n    @if (isset($campaign) && !$campaign->boosted())\n        @can('boost', auth()->user())\n            <p>\n                <a href=\"{{ route('settings.boost', ['campaign' => $campaign]) }}\" class=\"text-link\">\n                    <x-icon class=\"premium\" />\n                    {!! __('callouts.subscribe.share-booster', ['campaign' => $campaign->name]) !!}\n                </a>\n            </p>\n        @else\n            <p>\n                <a href=\"{{ route('settings.premium', ['campaign' => $campaign]) }}\" class=\"text-link\">\n                    <x-icon class=\"premium\" />\n                    {!! __('callouts.subscribe.share-premium', ['campaign' => $campaign->name]) !!}\n                </a>\n            </p>\n        @endif\n    @endif\n@else\n    <a href=\"{{ \\App\\Facades\\Domain::toFront('pricing') }}\" class=\"text-link\">{{ __('callouts.subscribe.pitch-image', ['max' => $max]) }}</a>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/helpers/superboosted.blade.php",
    "content": "<x-alert type=\"info\">\n    <p>\n        @can('boost', auth()->user())\n            {!! __($key, ['boosted-campaign' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.superboosted-campaign') . '</a>']) !!}\n        @else\n            {!! __($key, ['boosted-campaign' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>']) !!}\n        @endif\n    </p>\n</x-alert>\n"
  },
  {
    "path": "resources/views/cruds/fields/hide_choice.blade.php",
    "content": "<x-forms.field\n    field=\"hidden\"\n    :label=\"__('tags.fields.is_hidden')\">\n    <select name=\"is_hidden\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('general.no') }}</option>\n        <option value=\"1\">{{ __('general.yes') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/icon.blade.php",
    "content": "<?php\n$required = !isset($bulk);\n$fieldname = $iconFieldName ?? 'icon';\n?>\n<x-forms.field\n    field=\"icon\"\n    :label=\"__('entities/links.fields.icon')\">\n    @if($campaign->boosted())\n        <input type=\"text\" name=\"{{ $fieldname }}\" value=\"{{ !isset($bulk) ? old($fieldname, $source->{$fieldname} ?? $model->icon ?? null) : null }}\" placeholder=\"{{ $placeholder ?? 'fa-regular fa-users' }}\" list=\"link-icon-list\" class=\"w-full\" autocomplete=\"off\" data-paste=\"fontawesome\" maxlength=\"45\" />\n        <div class=\"hidden\">\n            <datalist id=\"link-icon-list\">\n                @foreach ($suggestions ?? \\App\\Facades\\EntityAssetCache::campaign($campaign)->iconSuggestion() as $icon)\n                    <option value=\"{{ $icon }}\">{{ $icon }}</option>\n                @endforeach\n            </datalist>\n        </div>\n        <x-slot name=\"helper\">\n            {!! __('entities/links.helpers.icon', [\n                'fontawesome' => '<a href=\"' . config('fontawesome.search') .'\" class=\"text-link\">FontAwesome</a>',\n                'rpgawesome' => '<a href=\"https://nagoshiashumari.github.io/Rpg-Awesome/\" class=\"text-link\">RPGAwesome</a>',\n                'docs' => '<a href=\"https://docs.kanka.io/en/latest/articles/available-icons.html\" class=\"text-link\">' . __('footer.documentation') . '</a>',\n                'example' => '<i class=\"fa-solid fa-horse\" aria-hidden=\"true\"></i> <code>fa-solid fa-horse</code>',\n            ]) !!}\n        </x-slot>\n    @else\n        <x-slot name=\"helper\">\n        @can('boost', auth()->user())\n            {!! __('callouts.booster.pitches.icon', [\n                'boosted-campaign' => '<a href=\"' . route('settings.premium', ['campaign' => $campaign]) . '\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>',\n                'fontawesome' => '<a href=\"' . config('fontawesome.search') .'\" class=\"text-link\">FontAwesome</a>',\n            ]) !!}\n        @else\n            {!! __('callouts.booster.pitches.icon', [\n                'boosted-campaign' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>',\n                'fontawesome' => '<a href=\"' . config('fontawesome.search') .'\" class=\"text-link\">FontAwesome</a>',\n            ]) !!}\n        @endif\n        </x-slot>\n    @endif\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/image-gallery.blade.php",
    "content": "<?php\nif (!isset($entity) && isset($model) && !empty($model->entity)) {\n    $entity = $model->entity;\n}\nelseif (!isset($entity) && isset($source)) {\n    $entity = $source instanceof \\App\\Models\\Entity ? $source : $source->child;\n}\n$formats = 'PNG, JPG, GIF, WebP';\n$inputFileTypes = '.jpg, .jpeg, .png, .gif, .webp';\n$max = 25;\n$from = null;\nif (isset($size) && $size == 'map') {\n    $formats = 'PNG, JPG, SVG, WebP';\n    $inputFileTypes = '.jpg, .jpeg, .png, .gif, .webp, .svg';\n    $max = 50;\n    $from = 'map';\n}\n$isUnlimited = empty($from === 'map' ? config('limits.filesize.map') : config('limits.filesize.image.standard'));\n$label = $imageLabel ?? 'crud.fields.image';\n\n$previewThumbnail = null;\nif (!empty($entity) && $entity->hasImage()) {\n    $previewThumbnail = Avatar::entity($entity)->size(192, 144)->thumbnail();\n} elseif (isset($model) && method_exists($model, 'thumbnail') && !empty($model->image)) {\n    $previewThumbnail = $model->thumbnail(192, 144);\n} elseif (isset($source) && !empty($source->entity->image_uuid) && !empty($source->entity->image)) {\n    $previewThumbnail = $source->entity->image->getUrl(192, 144);\n}\n\n// If the image is from the gallery and the user can't browse or upload, disable the field\n$canBrowse = isset($campaign) && (auth()->user()->can('browse', [\\App\\Models\\Image::class, $campaign]) || auth()->user()->can('create', [\\App\\Models\\Image::class, $campaign]));\n$fieldname = $fieldname ?? 'entity_image_uuid';\nif (!empty($entity) && !empty($entity->image) && !$canBrowse) {\n    ?><input type=\"hidden\" name=\"{{ $fieldname }}\" value=\"{{ $entity->image_uuid }}\" /><?php\n    return;\n}\n\n$old = isset($entity) && !empty($entity->image_path) || isset($model) && !empty($model->image_path);\n\n?>\n@php\n    $translations = json_encode([\n        'cancel' => __('crud.cancel'),\n        'remove' => __('crud.remove'),\n        'url' => __('gallery.actions.url'),\n        'gallery' => __('gallery.actions.gallery'),\n        'unauthorized' => __('gallery.download.errors.unauthorized'),\n        'browse' => [\n            'title' => __('gallery.browse.title'),\n            'layouts' => [\n                'small' => __('gallery.browse.layouts.small'),\n                'large' => __('gallery.browse.layouts.large'),\n            ],\n            'search' => [\n                'placeholder' => __('gallery.browse.search.placeholder'),\n            ],\n            'unauthorized' => __('gallery.browse.unauthorized'),\n        ],\n        'cta_title' => __('gallery.cta.title'),\n        'cta_action' => __('gallery.cta.action'),\n        'cta_helper' => __('gallery.cta.helper', [\n            'premium-campaign' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>',\n            'size' => \\Illuminate\\Support\\Number::format(config('limits.gallery.premium') / (1024 * 1024), 2)\n            ]),\n    ]);\n@endphp\n\n\n@php\n    $uuid = null;\n    if (isset($entity) && $entity->image_uuid) {\n        $uuid = $entity->image_uuid;\n    }\n@endphp\n\n<div class=\"field field-image flex flex-col gap-1\">\n    <label class=\"text-xs font-medium opacity-80\">{{ __($label) }}</label>\n    <div class=\"gallery-selection col-span-2\">\n        <gallery-selection\n            file=\"{{ route('gallery.upload.file', [$campaign, $from]) }}\"\n            url=\"{{ route('gallery.upload.url', [$campaign, $from]) }}\"\n            accepts=\"{{ $inputFileTypes }}\"\n            uuid=\"{{ $entity->image_uuid ?? $model->image_uuid ??$source->entity->image_uuid ?? null }}\"\n            field=\"{{ $fieldname }}\"\n            thumbnail=\"{{ $previewThumbnail }}\"\n            browse=\"{{ route('gallery.browse', [$campaign]) }}\"\n            old=\"{{ $old ? 'true' : 'false' }}\"\n            i18n=\"{{ $translations }}\"\n            premium=\"{{ $campaign->boosted() || $isUnlimited ? 'true' : 'false' }}\"\n            cta=\"{{ route('settings.premium', ['campaign' => $campaign->id, $from]) }}\"\n        >\n            <x-icon class=\"load\" />\n        </gallery-selection>\n    </div>\n\n    <x-helper class=\"text-xs\">\n        <p>\n            @if ($isUnlimited)\n                {{ __('crud.hints.image_formats', ['formats' => $formats]) }}\n            @else\n                {{ __('crud.hints.image_limitations', ['formats' => $formats, 'size' => (isset($size) ? Limit::readable()->map()->upload() : Limit::readable()->upload())]) }}\n                @includeWhen(config('services.stripe.enabled'), 'cruds.fields.helpers.share')\n            @endif\n            @if (isset($recommended)) {{ __('crud.hints.image_dimension', ['dimension' => $recommended]) }} @endif\n        </p>\n    </x-helper>\n</div>\n\n"
  },
  {
    "path": "resources/views/cruds/fields/image-old.blade.php",
    "content": "<?php\n/**\n * Options:\n * bool $imageRequired set to true if the image is required and can't be removed\n */\n$formats = 'PNG, JPG, GIF, WebP';\n$inputFileTypes = '.jpg, .jpeg, .png, .gif, .webp';\n$max = 25;\nif (isset($size) && $size == 'map') {\n    $formats = 'PNG, JPG, SVG, WebP';\n    $inputFileTypes = '.jpg, .jpeg, .png, .gif, .webp, .svg';\n    $max = 50;\n}\n$isUnlimited = empty(isset($size) && $size === 'map' ? config('limits.filesize.map') : config('limits.filesize.image.standard'));\n$label = $imageLabel ?? 'crud.fields.image';\n\n$previewThumbnail = null;\n$canDelete = true;\nif (!empty($model->entity) && !empty($model->entity->image_uuid) && !empty($model->entity->image)) {\n    $previewThumbnail = $model->entity->image->getUrl(192, 144);\n    $canDelete = false;\n} elseif (!empty($entity) && !empty($entity->image_path)) {\n    $previewThumbnail = Avatar::entity($entity)->size(192, 144)->thumbnail();\n} elseif (isset($model) && method_exists($model, 'thumbnail') && !empty($model->image)) {\n    $previewThumbnail = $model->thumbnail(200, 160);\n} elseif (isset($image)) {\n   $previewThumbnail = $image;\n}\n\n// If the image is from the gallery and the user can't browse or upload, disable the field\n$canBrowse = isset($campaign) && auth()->user()->can('browse', [\\App\\Models\\Image::class, $campaign]);\nif (!empty($model->entity) && !empty($model->entity->image) && !$canBrowse) {\n    ?><input type=\"hidden\" name=\"entity_image_uuid\" value=\"{{ $model->entity->image_uuid }}\" /><?php\n                                                                                                   return;\n                                                                                               }\n                                                                                               ?>\n<input type=\"hidden\" name=\"remove-image\" />\n<div class=\"field field-image flex flex-col gap-1 col-span-2 @if (!empty($imageRequired) && $imageRequired) required @endif\">\n\n    <label>{{ __($label) }}</label>\n\n    <div class=\"flex flex-row gap-2 justify-between\">\n        <div class=\" flex flex-col gap-2\">\n            <div class=\"image-file field\">\n                <input\n                    type=\"file\"\n                    name=\"{{ isset($isModule) ? 'default_entity_image' : 'image'}}\"\n                    class=\"image w-full\"\n                    id=\"image_field_{{ rand() }}\"\n                    accept=\"{{ $inputFileTypes }}\" />\n            </div>\n            @if(!isset($isModule))\n                <div class=\"image-url field\">\n                    <input type=\"text\" name=\"image_url\" value=\"{{ old('image_url', ((!empty($source) && $source->entity->image_path) ? Avatar::entity($source->entity)->original() : '')) }}\" placeholder=\"{{ __('crud.placeholders.image_url') }}\" class=\"w-full\" />\n                </div>\n            @endif\n            @php\n                $preset = null;\n                if (isset($model) && $model->entity && $model->entity->image_uuid) {\n                    $preset = $model->entity->image;\n                } else {\n                    $preset = FormCopy::field('image')->select();\n                }\n            @endphp\n            @if (isset($campaign) && (!isset($campaignImage) || !$campaignImage) && !isset($gallery))\n                <x-forms.foreign\n                    :campaign=\"$campaign\"\n                    name=\"entity_image_uuid\"\n                    label=\"\"\n                    :allowClear=\"true\"\n                    :route=\"route('images.find', $campaign)\"\n                    :placeholder=\"__('fields.gallery.placeholder')\"\n                    :dropdownParent=\"$dropdownParent ?? null\"\n                    :selected=\"$preset\">\n                </x-forms.foreign>\n                @if (!empty($model->entity) && !empty($model->entity->image_uuid) && empty($model->entity->image))\n                    <input type=\"hidden\" name=\"entity_image_uuid\" value=\"{{ $model->entity->image_uuid }}\" />\n                @endif\n            @endif\n\n\n            <x-helper class=\"text-xs\">\n                <p><x-icon class=\"fa-regular fa-question-circle\" />\n                    @if ($isUnlimited)\n                        {{ __('crud.hints.image_formats', ['formats' => $formats]) }}\n                    @else\n                        {{ __('crud.hints.image_limitations', ['formats' => $formats, 'size' => (isset($size) ? Limit::readable()->map()->upload() : Limit::readable()->upload())]) }}\n                        @includeWhen(config('services.stripe.enabled'), 'cruds.fields.helpers.share')\n                    @endif\n                    @if (isset($recommended)) {{ __('crud.hints.image_dimension', ['dimension' => $recommended]) }} @endif\n                </p>\n            </x-helper>\n        </div>\n        @if (!empty($previewThumbnail))\n            <div class=\"preview w-32\">\n                @include('cruds.fields._image_preview', [\n                    'image' => $previewThumbnail,\n                    'title' => $model->name,\n                    'target' => !isset($removable) && $canDelete && (empty($imageRequired) || !$imageRequired) ? 'remove-image' : null,\n                ])\n            </div>\n        @elseif (isset($campaignImage) && $campaignImage && !isset($isModule))\n            <div class=\"preview w-32\">\n                @include('cruds.fields._image_preview', [\n                    'image' => 'https://th.kanka.io/UngNKwPxKUPKSZ4z_Qjc9QiyeQs=/280x210/smart/src/app/backgrounds/mountain-background-medium.jpg',\n                    'title' => 'Default',\n                ])\n            </div>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/image.blade.php",
    "content": "@include('cruds.fields.image-gallery')\n"
  },
  {
    "path": "resources/views/cruds/fields/instigator.blade.php",
    "content": "<x-forms.field field=\"instigator\">\n    <input type=\"hidden\" name=\"instigator_id\" value=\"\" />\n        @include('cruds.fields.entity', [\n        'name' => 'instigator_id',\n        'preset' => !empty($model) && $model->instigator ? $model->instigator : null,\n        'relation' => 'instigator',\n        'label' => __('quests.fields.instigator'),\n    ])\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/is_active.blade.php",
    "content": "<x-forms.field\n    field=\"active\"\n    :label=\"__('bookmarks.fields.active')\">\n    <select name=\"is_active\" id=\"is_active\">\n        <option value=\"\"></option>\n        <option value=\"1\">{{ __('general.yes') }}</option>\n        <option value=\"0\">{{ __('general.no') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/is_pinned.blade.php",
    "content": "@php\n    $pinnedOptions = [\n        0 => __('pins.options.no'),\n        1 => __('pins.options.yes')\n    ];\n@endphp\n<x-forms.field\n    field=\"pinned\"\n    :label=\"__('crud.fields.is_star')\"\n    :helper=\"__('crud.hints.is_star')\"\n    tooltip\n    link=\"https://docs.kanka.io/en/latest/features/profile-sidebar/how-to-pin-elements.html\">\n    <x-forms.select name=\"{{ $fieldName ?? 'is_pinned' }}\" :options=\"$pinnedOptions\" :selected=\"isset($model) && $model->isPinned()\" class=\"w-full\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/item.blade.php",
    "content": "@if (!$campaign->enabled('items'))\n    <?php return ?>\n@endif\n\n@if (!isset($preset))\n    @php\n    $preset = null;\n    if (isset($model) && $model->parent) {\n        $preset = $model->parent;\n    } elseif (!isset($bulk)) {\n        $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Item::class);\n    }\n    @endphp\n@endif\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    :name=\"isset($multiple) && $multiple ? 'item_id[]' : 'item_id'\"\n    :key=\"isset($multiple) && $multiple ? 'items' : 'item'\"\n    :required=\"$required ?? false\"\n    :allowNew=\"$allowNew ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :placeholder=\"isset($multiple) && $multiple ? __('crud.placeholders.search') : null\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.item')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :multiple=\"isset($multiple) ? $multiple : false\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.item')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/journal.blade.php",
    "content": "@if (!$campaign->enabled('journals'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Journal::class);\n}\n@endphp\n\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"journal_id\"\n    key=\"journal\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.journal')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.journal')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/location.blade.php",
    "content": "@if (!$campaign->enabled('locations'))\n    <?php return ?>\n@endif\n\n@php\n    $preset = null;\n    if (isset($model) && $model->location) {\n        $preset = $model->location;\n    } elseif (isset($model) && ($isParent ?? false) && $model->parent) {\n        $preset = $model->parent;\n    } elseif (!isset($bulk)) {\n        $preset = FormCopy::field(isset($isParent) && $isParent ? 'parent' : 'location')->child()->select($isParent ?? false, \\App\\Models\\Location::class);\n    }\n@endphp\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"location_id\"\n    key=\"location\"\n    :allowNew=\"$allowNew ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.location')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.location')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/locations.blade.php",
    "content": "@if (!$campaign->enabled('locations'))\n    <?php return ?>\n@endif\n@if (isset($bulk) && $bulk)\n    <div class=\"grid gap-2 md:gap-4 grid-cols-2\">\n@endif\n<input type=\"hidden\" name=\"save_locations\" value=\"1\">\n<x-forms.field field=\"locations\">\n    @include('components.form.locations', ['options' => [\n        'model' => $model ?? FormCopy::model(),\n        'source' => $source ?? null,\n        'dynamicNew' => $dynamicNew ?? $quickCreator ?? false\n    ]])\n</x-forms.field>\n\n@if (isset($bulk) && $bulk)\n    <x-forms.field field=\"bulk-locations\" :label=\"__('crud.bulk.edit.locations')\">\n        <select name=\"bulk-locations\" class=\"w-full\">\n            <option value=\"add\">{{ __('crud.bulk.edit.tags.add') }}</option>\n            <option value=\"remove\">{{ __('crud.bulk.edit.tags.remove') }}</option>\n        </select>\n    </x-forms.field>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/map.blade.php",
    "content": "@if (!$campaign->enabled('maps'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Map::class);\n}\n@endphp\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"map_id\"\n    key=\"map\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.map')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.map')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/name.blade.php",
    "content": "<?php\n$required = !isset($bulk);\n$fieldID = uniqid('name_');\n?>\n<x-forms.field\n    field=\"name\"\n    :label=\"__('crud.fields.name')\"\n    :required=\"$required\"\n    :id=\"$fieldID\">\n    <input id=\"{{ $fieldID }}\" type=\"text\" name=\"name\" placeholder=\"{{ __('entries/fields.name.placeholder') }}\" maxlength=\"191\"\n           @if (isset($entityType)) data-live=\"{{ route('search-list', [$campaign, $entityType]) }}\"\n           data-duplicate=\".duplicate-warning\" data-1p-ignore=\"true\"\n           data-id=\"{{ $entity->id ?? null }}\"\n           @endif\n           @if ($required) required=\"required\" @endif\n    value=\"{{ old('name', html_entity_decode($model->name ?? '', ENT_QUOTES | ENT_HTML5, 'UTF-8')) }}\" />\n\n    <div class=\"text-warning-content duplicate-warning flex flex-col gap-1 hidden\">\n        <span>{{ __('entities.creator.duplicate') }}</span>\n        <div class=\"duplicates flex flex-wrap gap-2 items-center\"></div>\n    </div>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/note.blade.php",
    "content": "@if (!$campaign->enabled('notes'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Note::class);\n}\n@endphp\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"note_id\"\n    key=\"note\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.note')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.note')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/organisation.blade.php",
    "content": "@if (!$campaign->enabled('organisations'))\n    <?php return ?>\n@endif\n\n@php\n    $field = isset($isParent) && $isParent ? 'parent' : 'organisation';\n    $preset = null;\n    if (isset($model) && $model->$field) {\n        $preset = $model->$field;\n    } elseif (!isset($bulk)) {\n        $preset = FormCopy::field($field)->child()->select($isParent ?? false, \\App\\Models\\Organisation::class);\n    }\n@endphp\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"organisation_id\"\n    key=\"organisation\"\n    :required=\"$required ?? false\"\n    :allowNew=\"$allowNew ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.organisation')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.organisation')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/organisations.blade.php",
    "content": "@if (!$campaign->enabled('organisations'))\n    <?php return ?>\n@endif\n\n<input type=\"hidden\" name=\"save_organisations\" value=\"1\">\n<x-forms.field field=\"organisations\">\n    @include('components.form.organisations', ['options' => [\n        'model' => $model ?? FormCopy::model(),\n        'source' => $source ?? null,\n    ]])\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/owner.blade.php",
    "content": "@php\n$required = !isset($bulk);\n$preset = $owner ?? null;\n@endphp\n\n@include('cruds.fields.entity', [\n    'name' => 'owner_id',\n    'label' => __('entities/relations.fields.owner'),\n    'allowClear' => false,\n    'route' => null,\n])\n"
  },
  {
    "path": "resources/views/cruds/fields/parent.blade.php",
    "content": "@php\n    $preset = null;\n    if (isset($entity) && $entity instanceof \\App\\Models\\Entity && $entity->parent) {\n        $preset = $entity->parent;\n    } elseif (isset($model) && $model instanceof \\App\\Models\\Entity && $model->parent) {\n        $preset = $model->parent;\n    } elseif (!isset($bulk)) {\n        $preset = FormCopy::field('parent')->select(true, \\App\\Models\\Entity::class);\n    }\n@endphp\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"parent_id\"\n    key=\"parent_id\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? true\"\n    :selected=\"$preset\"\n    :route=\"route('search-list', [$campaign, $entityType, 'entity' => true] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :helper=\"__('crud.helpers.parent')\"\n    :entityTypeID=\"$entityType->id\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/parent_attribute_template.blade.php",
    "content": "@php\n    $preset = null;\n    if (isset($model) && $model->parent) {\n        $preset = $model->parent;\n    } elseif (!isset($bulk)) {\n        $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\AttributeTemplate::class);\n    }\n@endphp\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"attribute_template_id\"\n    key=\"attribute_template_id\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? true\"\n    :selected=\"$preset\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.attribute_template')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.attribute_template')\"\n    :helper=\"__('attribute_templates.hints.parent_attribute_template')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/pinned.blade.php",
    "content": "@php\n    $pinnedOptions = [\n        0 => __('pins.options.no'),\n        1 => __('pins.options.yes')\n    ];\n@endphp\n<x-forms.field\n    field=\"pinned\"\n    :label=\"__('crud.fields.is_star')\"\n    :helper=\"__('crud.hints.is_star')\"\n    tooltip\n    link=\"https://docs.kanka.io/en/latest/features/profile-sidebar/how-to-pin-elements.html\">\n    <x-forms.select name=\"{{ $fieldName ?? 'is_pinned' }}\" :options=\"$pinnedOptions\" :selected=\"isset($model) && $model->isPinned()\" class=\"w-full\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/pinned_choice.blade.php",
    "content": "<x-forms.field\n    field=\"pinned\"\n    :label=\"__('crud.fields.is_star')\">\n    <select name=\"is_pinned\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ trans('general.no') }}</option>\n        <option value=\"1\">{{ trans('general.yes') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/position.blade.php",
    "content": "<?php\n?><x-forms.field\n    field=\"position\"\n    :label=\"__($trans . '.fields.position')\"\n    :helper=\"__($trans . '.helpers.position')\">\n\n    <input type=\"number\" name=\"position\" class=\"w-full\" value=\"{{ FormCopy::field('position')->string() ?: old('position', $model->position ?? null) }}\" maxlength=\"1\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/price.blade.php",
    "content": "<x-forms.field\n    field=\"price\"\n    label=\"{{ __($trans . '.fields.price') }}\">\n    <input type=\"text\" name=\"price\" value=\"{!! old('price', $source->price ?? $model->price ?? null ) !!}\" placeholder=\"{{ __($trans . '.placeholders.price') }}\" maxlength=\"191\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/privacy_callout.blade.php",
    "content": "@php\n$isPrivate = old('is_private', $source->is_private ?? $model->is_private ?? $campaign->entity_visibility)\n@endphp\n<div\n    class=\"privacy-callout rounded-xl p-4 border border-red-300\"\n    x-data=\"{ isPrivate: {{ $isPrivate ? 'true' : 'false' }} }\"\n    x-init=\"$watch('isPrivate', value => { $dispatch('entity-privacy-changed', value) })\"\n>\n    <input type=\"hidden\" name=\"is_private\" value=\"0\" />\n    <label class=\"flex! items-start gap-2 cursor-pointer\">\n        <input type=\"checkbox\" name=\"is_private\" value=\"1\" x-model=\"isPrivate\" class=\"\" />\n\n        <div>\n            <p class=\"font-semibold \">\n                {{ __('crud.permissions.actions.private') }}\n            </p>\n            <x-helper>\n                <p>{!! __('crud.fields.is_private_v3', [\n        'admin-role' => '<a href=\\'' . route('campaigns.campaign_roles.admin', $campaign) . '\\' class=\"text-link\">' . $campaign->adminRoleName() . '</a>'\n        ]) !!}\n                <br /><a href=\"https://docs.kanka.io/en/latest/features/permissions.html#entity-permissions\" class=\"text-link\">\n                    <x-icon class=\"fa-regular fa-book\" />\n                    {{ __('general.documentation') }}\n                </a></p>\n            </x-helper>\n        </div>\n    </label>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/fields/private_choice.blade.php",
    "content": "@can('admin', $campaign)\n    <x-forms.field\n        field=\"private\"\n        :label=\"__('crud.fields.is_private')\">\n        <select name=\"is_private\" id=\"private_choice\" class=\"w-full\">\n            <option value=\"\"></option>\n            <option value=\"0\">{{ __('general.yes') }}</option>\n            <option value=\"1\">{{ __('general.no') }}</option>\n        </select>\n    </x-forms.field>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/pronouns.blade.php",
    "content": "@php\n    $fieldID = uniqid('pronouns_');\n@endphp\n<x-forms.field\n    field=\"pronouns\"\n    :label=\"__('characters.fields.pronouns')\"\n    :id=\"$fieldID\">\n    <input id=\"{{ $fieldID }}\" type=\"text\" name=\"pronouns\" value=\"{!! htmlspecialchars(old('pronouns', str_replace('&amp;', '&', FormCopy::field('pronouns')->child()->string() ?: $model->pronouns ?? ''))) !!}\"\n           placeholder=\"{{ __('characters.placeholders.pronouns') }}\" maxlength=\"45\" list=\"entity-pronoun-list\" spellcheck=\"true\" />\n    <datalist id=\"entity-pronoun-list\">\n    @foreach (\\App\\Facades\\CharacterCache::campaign($campaign)->pronounSuggestion() as $suggestion)\n        <option value=\"{{ $suggestion }}\">{{ $suggestion }}</option>\n    @endforeach\n</datalist>\n\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/quest.blade.php",
    "content": "@if (!$campaign->enabled('quests'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Quest::class);\n}\n@endphp\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"quest_id\"\n    key=\"quest\"\n    :allowNew=\"$allowNew ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.quest')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.quest')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/race.blade.php",
    "content": "@if (!$campaign->enabled('races'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Race::class);\n}\n@endphp\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"race_id\"\n    key=\"race\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.race')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.race')\">\n</x-forms.foreign>\n\n"
  },
  {
    "path": "resources/views/cruds/fields/races.blade.php",
    "content": "@if (!$campaign->enabled('races'))\n    <?php return ?>\n@endif\n<x-forms.field field=\"races\">\n    <input type=\"hidden\" name=\"save_races\" value=\"1\">\n    @include('components.form.races', ['options' => [\n        'model' => $model ?? FormCopy::model(),\n        'dynamicNew' => $dynamicNew ?? $quickCreator ?? false\n    ]])\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/relation.blade.php",
    "content": "<x-forms.field\n    field=\"relation\"\n    :required=\"!isset($bulk)\"\n    :label=\"__('entities/relations.fields.role')\">\n    <input type=\"text\" name=\"relation\" value=\"{!! htmlspecialchars(old('relation', $source->relation ?? $relation->relation ?? null)) !!}\" maxlength=\"191\" class=\"w-full\"  placeholder=\"{{ __('entities/relations.placeholders.role') }}\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/save.blade.php",
    "content": "@if (isset($onlySave))\n    <button class=\"btn2 btn-primary\" id=\"form-submit-main\" data-target=\"{{ isset($target) ? $target : null }}\">\n        <span>{{ __('crud.save') }}</span>\n        <i class=\"fa-solid fa-spinner fa-spin spinner\" aria-hidden=\"true\" style=\"display: none\"></i>\n    </button>\n@else\n    <input id=\"submit-mode\" type=\"hidden\" value=\"true\"/>\n    <div class=\"join\">\n        <button class=\"btn2 join-item btn-primary btn-{{ !isset($model) ? 'save' : 'edit' }}-{{ isset($entityType) ? 'entity' : 'other' }}\" id=\"form-submit-main\" @if (isset($entityType))data-entity-type=\"{{ $entityType }}\"@endif data-target=\"{{ isset($target) ? $target : null }}\">\n            <span>{{ __('crud.save') }}</span>\n            <i class=\"fa-solid fa-spinner fa-spin spinner\" aria-hidden=\"true\" style=\"display: none\"></i>\n        </button>\n        <div class=\"dropdown\">\n            <button type=\"button\" class=\"btn2 join-item btn-primary\" data-dropdown aria-expanded=\"false\">\n                <x-icon class=\"fa-regular fa-caret-down\" />\n                <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n            </button>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" shortcut=\"Ctrl S\">\n                    <span class=\"grow\">{{ __('crud.save') }}</span>\n                </x-dropdowns.item>\n\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'submit-new']\" shortcut=\"Ctrl Alt S\">\n                    <span class=\"grow w-40\">{{ __('crud.save_and_new') }}</span>\n                </x-dropdowns.item>\n\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'submit-update']\" shortcut=\"Ctrl Shift S\">\n                    <span class=\"grow\">{{ __('crud.save_and_update') }}</span>\n                </x-dropdowns.item>\n                @if(!isset($disableCopy))\n                    @if (empty($model))\n                        <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'submit-view']\">\n                            {{ __('crud.save_and_view') }}\n                        </x-dropdowns.item>\n                    @else\n                        <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'submit-close']\">\n                            {{ __('crud.save_and_close') }}\n                        </x-dropdowns.item>\n\n                        <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'submit-copy']\" shortcut=\"Ctrl Alt C\">\n                            <span class=\"grow\">{{ __('crud.save_and_copy') }}</span>\n                        </x-dropdowns.item>\n                    @endif\n                @endif\n            </div>\n        </div>\n        @includeWhen(!isset($disableCancel), 'partials.or_cancel')\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/sex.blade.php",
    "content": "@php\n$fieldID = uniqid('gender_');\n@endphp\n<x-forms.field\n    field=\"sex\"\n    :label=\"__('characters.fields.sex')\"\n    :id=\"$fieldID\">\n\n    <input id=\"{{ $fieldID }}\" type=\"text\" name=\"sex\" value=\"{!! htmlspecialchars(old('sex', str_replace('&amp;', '&', FormCopy::field('sex')->child()->string() ?: $model->sex ?? ''))) !!}\" placeholder=\"{{ __('characters.placeholders.sex') }}\" list=\"entity-gender-list\" autocomplete=\"off\" maxlength=\"45\" spellcheck=\"true\" />\n    <datalist id=\"entity-gender-list\">\n        @foreach (\\App\\Facades\\CharacterCache::campaign($campaign)->genderSuggestion() as $gender)\n            <option value=\"{{ $gender }}\">{!! $gender !!}</option>\n        @endforeach\n    </datalist>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/size.blade.php",
    "content": "<x-forms.field\n    field=\"size\"\n    label=\"{{ __($trans . '.fields.size') }}\">\n    <input type=\"text\" name=\"size\" value=\"{{ old('size', $source->size ?? $model->size ?? null) }}\" placeholder=\"{{ __($trans . '.placeholders.size') }}\" maxlength=\"191\" class=\"w-full\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/status.blade.php",
    "content": "@php\n    $statusEntityType = $entityType ?? $entity->entityType ?? null;\n    $categoryStatuses = $statusEntityType\n        ? \\App\\Models\\CategoryStatus::where('category_id', $statusEntityType->id)->orderBy('sort_order')->get()\n        : collect();\n    $isBulk = $bulk ?? false;\n@endphp\n@if ($categoryStatuses->isNotEmpty())\n    @php\n        $hasDefault = $categoryStatuses->contains('is_default', true);\n        $statusOptions = [];\n        if ($isBulk) {\n            $statusOptions[''] = '';\n            $statusOptions['remove'] = __('entities/statuses.remove');\n        } elseif (! $hasDefault) {\n            $statusOptions[''] = '';\n        }\n        foreach ($categoryStatuses as $catStatus) {\n            $statusOptions[$catStatus->id] = $catStatus->setRelation('entityType', $statusEntityType)->name();\n        }\n        $selectedStatus = $isBulk ? '' : old('status_id', $source->status_id ?? $entity->status_id ?? ($hasDefault ? $categoryStatuses->firstWhere('is_default', true)->id : ''));\n    @endphp\n    <x-forms.field field=\"status_id\" :label=\"__('entities.status')\">\n        <x-forms.select name=\"status_id\" :options=\"$statusOptions\" :selected=\"$selectedStatus\" />\n    </x-forms.field>\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/tag.blade.php",
    "content": "@if (!$campaign->enabled('tags'))\n    <?php return ?>\n@endif\n\n@php\n$preset = null;\nif (isset($model) && $model->parent) {\n    $preset = $model->parent;\n} elseif (!isset($bulk)) {\n    $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Tag::class);\n}\n@endphp\n\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"tag_id\"\n    key=\"tag\"\n    :label=\"$label ?? null\"\n    :allowNew=\"$allowNew ?? true\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.tag')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.tag')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/tags.blade.php",
    "content": "@if ($campaign->enabled('tags'))\n    @if (isset($bulk) && $bulk)\n        <div class=\"grid gap-2 md:gap-4 grid-cols-2\">\n    @endif\n    <x-forms.field field=\"tags\">\n        <input type=\"hidden\" name=\"save-tags\" value=\"1\" />\n\n        <x-forms.tags\n            :campaign=\"$campaign\"\n            :model=\"$model ?? $source ?? null\"\n            :dropdownParent=\"$dropdownParent ?? null\"\n            :allowNew=\"isset($bulk) ? false : $enableNew ?? true\"\n            allowClear=\"false\"\n            enableAuto=\"true\"\n            :entityTypeID=\"config('entities.ids.tag')\"\n        ></x-forms.tags>\n    </x-forms.field>\n\n    @if (isset($bulk) && $bulk)\n        <x-forms.field field=\"tagging\" :label=\"__('crud.bulk.edit.tagging')\">\n            <select name=\"bulk-tagging\" class=\"w-full\">\n                <option value=\"add\">{{ __('crud.bulk.edit.tags.add') }}</option>\n                <option value=\"remove\">{{ __('crud.bulk.edit.tags.remove') }}</option>\n            </select>\n        </x-forms.field>\n        </div>\n    @endif\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/target.blade.php",
    "content": "@php\n$required = !isset($bulk);\n$preset = $target ?? null;\n@endphp\n@if(empty($relation) && $required)\n    <x-forms.foreign\n        field=\"targets\"\n        required\n        label=\"entities/relations.fields.targets\"\n        :multiple=\"true\"\n        name=\"targets[]\"\n        id=\"targets[]\"\n        :campaign=\"$campaign\"\n        :placeholder=\"__('crud.placeholders.search')\"\n        :route=\"route('search.entities-with-relations', [$campaign])\"\n    >\n    </x-forms.foreign>\n@else\n    @include('cruds.fields.entity', [\n        'name' => 'target_id',\n        'label' => __('entities/relations.fields.targets'),\n        'placeholder' => __('crud.placeholders.search'),\n        'allowClear' => false,\n        'route' => null,\n    ])\n@endif\n"
  },
  {
    "path": "resources/views/cruds/fields/template.blade.php",
    "content": "@if (isset($required))\n    @php $allowClear = false;@endphp\n@endif\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    :name=\"$name ?? 'template_id'\"\n    :key=\"$key ?? 'template'\"\n    :required=\"$required ?? false\"\n    :label=\"$label ?? null\"\n    :placeholder=\"$placeholder ?? null\"\n    :allowClear=\"$allowClear ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :dynamicTag=\"$dynamicTag ?? null\"\n    :route=\"route($route ?? 'search.templates', [$campaign, $entityType])\"\n    :selected=\"$preset ?? null\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/timeline.blade.php",
    "content": "@if (!$campaign->enabled('timelines'))\n    <?php return ?>\n@endif\n@php\n    $preset = null;\n    if (isset($model) && $model->parent) {\n        $preset = $model->parent;\n    } elseif (!isset($bulk)) {\n        $preset = FormCopy::field('parent')->child()->select($isParent ?? false, \\App\\Models\\Timeline::class);\n    }\n@endphp\n<x-forms.foreign\n    :campaign=\"$campaign\"\n    name=\"timeline_id\"\n    key=\"timeline\"\n    :allowNew=\"$allowNew ?? true\"\n    :dynamicNew=\"$dynamicNew ?? false\"\n    :allowClear=\"$allowClear ?? true\"\n    :parent=\"$isParent ?? false\"\n    :route=\"route('search-list', [$campaign, config('entities.ids.timeline')] + (isset($entity) ? ['exclude' => $entity->id] : []))\"\n    :selected=\"$preset\"\n    :helper=\"$helper ?? null\"\n    :dropdownParent=\"$dropdownParent ?? null\"\n    :entityTypeID=\"config('entities.ids.timeline')\">\n</x-forms.foreign>\n"
  },
  {
    "path": "resources/views/cruds/fields/title.blade.php",
    "content": "@php\n    $fieldID = uniqid('title_');\n@endphp\n<x-forms.field\n    field=\"title\"\n    :label=\"__('characters.fields.title')\"\n    :id=\"$fieldID\">\n\n    <input id=\"{{ $fieldID }}\" type=\"text\" name=\"title\"\n           placeholder=\"{{ __('characters.placeholders.title') }}\" maxlength=\"191\" spellcheck=\"true\"\n           value=\"{!! htmlspecialchars(old('title', str_replace('&amp;', '&', FormCopy::field('title')->child()->string() ?: $model->title ?? ''))) !!}\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/tooltip_choice.blade.php",
    "content": "<x-forms.field field=\"has-tooltip\" :label=\"__('maps/markers.fields.has_tooltip')\">\n    <select name=\"is_popupless\" class=\"w-full\">\n        <option value=\"\"></option>\n        <option value=\"0\">{{ __('general.yes') }}</option>\n        <option value=\"1\">{{ __('general.no') }}</option>\n    </select>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/type.blade.php",
    "content": "@php\n    $fieldID = uniqid('type_');\n@endphp\n<x-forms.field\n    field=\"type\"\n    label=\"{{ __('crud.fields.type') }}\"\n    :id=\"$fieldID\">\n\n    <input id=\"{{ $fieldID }}\" type=\"text\" name=\"type\"\n           placeholder=\"{{ $placeholder ?? __($trans . '.placeholders.type') }}\" maxlength=\"45\" list=\"entity-type-list-{{ $trans }}\"\n           spellcheck=\"true\" autocomplete=\"off\"\n           value=\"{!! htmlspecialchars(str_replace('&amp;', '&', old('type', $source->type ?? $entity->type ?? ''))) !!}\"/>\n    <div class=\"hidden\">\n        <datalist id=\"entity-type-list-<?=$trans?>\">\n            @foreach (\\App\\Facades\\EntityCache::campaign($campaign)->typeSuggestion($entityType ?? $entity->entityType) as $name)\n                <option value=\"{{ $name }}\">{!! $name !!}</option>\n            @endforeach\n        </datalist>\n    </div>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/unmirror.blade.php",
    "content": "<x-forms.field field=\"unmirror\" :label=\"__('entities/relations.bulk.fields.unmirror')\">\n    <input type=\"hidden\" name=\"unmirror\" value=\"0\"/>\n    <x-checkbox :text=\"__('entities/relations.bulk.helpers.unmirror')\">\n        <input type=\"checkbox\" name=\"unmirror\" value=\"1\" @if (old('unmirror', false)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/update_mirrored.blade.php",
    "content": "<x-forms.field field=\"mirror\" :label=\"__('entities/relations.bulk.fields.update_mirrored')\">\n    <input type=\"hidden\" name=\"update_mirrored\" value=\"0\"/>\n    <x-checkbox :text=\"__('entities/relations.bulk.helpers.update_mirrored')\">\n        <input type=\"checkbox\" name=\"update_mirrored\" value=\"1\" @if (old('update_mirrored', false)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/visibility.blade.php",
    "content": "@include('cruds.fields.visibility_id')\n"
  },
  {
    "path": "resources/views/cruds/fields/visibility_id.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Post $model\n */\nuse App\\Enums\\Visibility;\n\n$options = [];\nif (isset($bulk)) {\n    $options[''] = null;\n}\n\n$options[Visibility::All->value] = __('crud.visibilities.all');\n\nif (auth()->user()->isAdmin()) {\n    $options[Visibility::Admin->value] = __('crud.visibilities.admin');\n    $options[Visibility::Member->value] = __('crud.visibilities.members');\n}\nif (!isset($model) || ($model->created_by == auth()->user()->id)) {\n    $options[Visibility::Self->value] = __('crud.visibilities.self');\n    $options[Visibility::AdminSelf->value] = __('crud.visibilities.admin-self');\n}\n\n// If it's a visibility self & admin, and we're not the creator, we can't change this\nif (isset($model) && $model->visibility_id === Visibility::AdminSelf && $model->created_by !== auth()->user()->id) {\n    $options = [Visibility::AdminSelf->value => __('crud.visibilities.admin-self')];\n}\n\n// The visibility is set to admin, but we're not an admin, don't allow changing\n// as it's a custom permission for the user to be able to edit this model.\nif (isset($model)) {\n    $locked = false;\n    // Set to admin but not an admin? An admin created this element, and with custom permissions (like on a post)\n    // is allowing a non-admin to edit the post, so we can't have them changing the visibility.\n    if ($model->visibility_id === Visibility::Admin && !auth()->user()->isAdmin()) {\n        $locked = true;\n    }\n    // If the visibility is set to self but the user didn't create it, don't allow changing it, as only the person\n    // who created is allowed to change the visibility.\n    if (in_array($model->visibility_id, [Visibility::Self, Visibility::AdminSelf]) && $model->created_by != auth()->user()->id) {\n        $locked = true;\n    }\n    if ($locked) {\n        ?><input type=\"hidden\" name=\"visibility_id\" value=\"{{ $model->visibility_id }}\" /><?php return;\n    }\n}\n$visibilityUniqueID = uniqid('visibility_');\n?>\n<x-forms.field\n    field=\"visibility\"\n    label=\"{{ __('crud.fields.visibility') }}\"\n    tooltip\n    :helper=\"__('visibilities.tooltip')\"\n    link=\"//docs.kanka.io/en/latest/advanced/visibility.html\">\n    <x-forms.select\n        name=\"visibility_id\"\n        :options=\"$options\"\n        :selected=\"empty($model) ? (isset($bulk) ? null : $campaign->defaultVisibility()->value) : ($model->visibility_id instanceof Visibility ? $model->visibility_id->value : $model->visibility_id)\"\n        class=\"w-full\"\n        :id=\"$visibilityUniqueID\"\n        />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/fields/weight.blade.php",
    "content": "<x-forms.field\n    field=\"weight\"\n    label=\"{{ __($trans . '.fields.weight') }}\">\n    <input type=\"text\" name=\"weight\" value=\"{{ old('weight', $source->weight ?? $model->weight ?? null) }}\" placeholder=\"{{ __($trans . '.placeholders.weight') }}\" maxlength=\"191\" class=\"w-full\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/cruds/forms/_attributes.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Attribute $attribute\n * @var \\App\\Models\\AttributeTemplate $attributeTemplate\n */\nif (isset($model)) {\n    $entity = $model->entity;\n} elseif (isset($source)) {\n    if ($source instanceof \\App\\Models\\Entity) {\n        if (auth()->user()->can('attributes', [$source])) {\n            $entity = $source;\n        }\n    }\n    elseif (auth()->user()->can('view-attributes', [$source->entity, $campaign])) {\n        $entity = $source->entity;\n    }\n}\n?>\n<x-grid type=\"1/1\">\n    <div id=\"attributes-manager\">\n        @if (!empty($entity))\n            <attributes-manager api=\"{{ route('attributes.api-entity', [$campaign, $entity]) }}\" />\n        @elseif (!empty($source))\n            <attributes-manager api=\"{{ route('attributes.api', [$campaign, 'entity_type' => $entityType->id, 'source' => $entity->id]) }}\" />\n        @else\n            <attributes-manager api=\"{{ route('attributes.api', [$campaign, 'entity_type' => $entityType->id]) }}\" />\n        @endif\n    </div>\n</x-grid>\n@section('scripts')\n    @parent\n    @vite('resources/js/attributes.js')\n    @vite('resources/js/attributes-manager.js')\n@endsection\n"
  },
  {
    "path": "resources/views/cruds/forms/_calendar.blade.php",
    "content": "<?php\n/**\n * View used in Quest and Journals form \"calendar\" button\n * @var \\App\\Models\\Journal $model\n * @var \\App\\Models\\Post $post\n */\n$calendars = \\App\\Models\\Calendar::get();\n$onlyOneCalendar = count($calendars) == 1;\n$oldCalendarID = old('calendar_id');\n$sourceRemidner = null;\n// Make sure the user has access to the source's calendar\nif (!empty($source) && empty($post) && $source->calendarReminder()) {\n    $oldCalendarID = $source->calendarReminder()->calendar_id;\n    $sourceReminder = $source->calendarReminder();\n} elseif (!empty($post) && $post->calendarReminder()) {\n    $oldCalendarID = $post->calendarReminder()->calendar_id;\n    $sourceReminder = $post->calendarReminder();\n}\n\nif (!empty($post)) {\n    $model = $post;\n} elseif (isset($entity)) {\n    $model = $entity;\n}\n\n$calendar = null;\nif (!empty($oldCalendarID)) {\n    $calendar = \\App\\Models\\Calendar::find($oldCalendarID);\n}\n$opened = (isset($model) && $model->hasCalendar()) || !empty($oldCalendarID);\n?>\n@if (isset($model) && $model->hasCalendarButNoAccess())\n    <input type=\"hidden\" name=\"calendar_id\" value=\"{{ $model->calendarReminder()->calendar_id }}\" />\n    <input type=\"hidden\" name=\"calendar_skip\" value=\"1\" />\n    @php return; @endphp\n@endif\n<div class=\"field-calendar-date flex flex-col gap-4\" x-data=\"{ opened: {{ $opened ? 'true' : 'false' }} }\">\n    <div class=\"flex flex-col gap-1 items-start\" >\n        <label class=\"text-xs font-medium opacity-80\">{{ __('crud.fields.calendar_date') }}</label>\n        <span role=\"button\" id=\"entity-calendar-form-add\" class=\"btn2 btn-sm <?=(!empty($model) && $model->hasCalendar() || !empty($oldCalendarID) ? \"hidden\" : null)?>\" data-default-calendar=\"{{ ($onlyOneCalendar ? $calendars->first()->id : null) }}\" @click=\"opened = !opened\" x-show=\"!opened\">\n        @php $calendarModule = \\App\\Models\\EntityType::default()->where('code', 'calendar')->first(); @endphp\n            <x-icon :class=\"$calendarModule->icon()\" />\n            {{ __('entities/reminders.actions.add') }}\n        </span>\n\n        <x-helper>\n            <p class=\"text-xs\">{{ __('entities/reminders.helpers.pitch') }}</p>\n        </x-helper>\n    </div>\n\n    <div class=\"entity-calendar-form transition-all duration-150 flex flex-col gap-4\" x-show=\"opened\">\n        @if (count($calendars) == 1)\n            <input type=\"hidden\" name=\"calendar_id\" value=\"{{ isset($model) && $model->hasCalendar() ? $model->calendarReminder()->calendar_id : $source->calendar_id ?? null }}\" />\n        @else\n            <input type=\"hidden\" name=\"calendar_id\" />\n            <div class=\"grid gap-2 md:gap-4 md:grid-cols-3\">\n                <div class=\"field-calendar entity-calendar-selector\">\n                    <x-forms.foreign\n                        :campaign=\"$campaign\"\n                        name=\"calendar_id\"\n                        key=\"calendar\"\n                        :allowClear=\"true\"\n                        :route=\"route('search-list', [$campaign, config('entities.ids.calendar')])\"\n                        :selected=\"isset($model) && $model->calendarReminder() && $model->calendarReminder()->calendar ? $model->calendarReminder()->calendar : FormCopy::field('calendar')->select()\"\n                        :dropdownParent=\"$dropdownParent ?? null\"\n                        :entityTypeID=\"config('entities.ids.calendar')\">\n                    </x-forms.foreign>\n                </div>\n            </div>\n        @endif\n\n        <div class=\"entity-calendar-subform @if (!$opened) hidden @endif\">\n            <div class=\"grid gap-2 md:gap-4 md:grid-cols-3\">\n                <x-forms.field\n                    field=\"year\"\n                    :label=\"__('calendars.fields.year')\">\n\n                    <input type=\"number\" name=\"calendar_year\" class=\"w-full\" value=\"{{ old('calendar_year', $source->calendar_year ?? $model->calendar_year ?? null) }}\" />\n                </x-forms.field>\n\n                <x-forms.field\n                    field=\"month\"\n                    :label=\"__('calendars.fields.month')\">\n                    <x-forms.select\n                        name=\"calendar_month\"\n                        id=\"reminder_month\"\n                        :options=\"(!empty($model) && $model->hasCalendar() ? $model->calendarReminder()->calendar->monthList(): (!empty($calendar) ? $calendar->monthList() : []))\"\n                        :selected=\"$source->calendar_month ?? $model->calendar_month ?? null\"\n                        :optionAttributes=\"(!empty($model) && $model->hasCalendar() ? $model->calendarReminder()->calendar->monthDataProperties(): (!empty($calendar) ? $calendar->monthDataProperties() : []))\" />\n                </x-forms.field>\n\n                <x-forms.field\n                    field=\"day\"\n                    :label=\"__('calendars.fields.day')\">\n                    <x-forms.select\n                        name=\"calendar_day\"\n                        id=\"reminder_day\"\n                        :options=\"(!empty($model) && $model->hasCalendar() ? $model->calendarReminder()->calendar->dayList($model->calendarReminder()->month) : (!empty($calendar) ? $calendar->dayList() : []))\"\n                        :selected=\"$source->calendar_day ?? $model->calendar_day ?? null\"\n                    />\n                </x-forms.field>\n\n                <x-forms.field\n                    field=\"length\"\n                    :label=\"__('calendars.fields.length')\">\n                    <input type=\"number\" name=\"calendar_length\" id=\"reminder_length\" class=\"w-full\" value=\"{{ FormCopy::field('calendar_length')->string() ?: old('calendar_length', $source->calendar_length ?? $model->calendar_length ?? null) }}\" />\n                </x-forms.field>\n\n                <x-forms.field\n                    field=\"colour\"\n                    :label=\"__('crud.fields.colour')\">\n                    <span>\n                        <input type=\"text\" name=\"calendar_colour\" value=\"{{ old('calendar_colour', $source->calendar_colour ?? $model->calendar_colour ?? null) }}\" maxlength=\"7\" class=\"spectrum\" />\n                    </span>\n                </x-forms.field>\n\n                <x-forms.field\n                    field=\"periodicity\"\n                    :label=\"__('calendars.fields.is_recurring')\">\n                    <x-forms.select\n                        name=\"calendar_recurring_periodicity\"\n                        :options=\"(!empty($model) && $model->hasCalendar() ? $model->calendarReminder()->calendar->recurringOptions(): (!empty($calendar) ? $calendar->recurringOptions() : []))\"\n                        :selected=\"$source->calendar_recurring_periodicity ?? $model->calendar_recurring_periodicity ?? null\"\n                        class=\"reminder-periodicity\"\n                        />\n                </x-forms.field>\n            </div>\n        </div>\n        <div class=\"entity-calendar-loading text-center p-4 hidden\">\n            <x-icon class=\"load\" />\n        </div>\n\n\n        <div class=\"text-right\">\n            <a href=\"#\" id=\"entity-calendar-form-cancel\" class=\"btn2 btn-outline btn-error btn-sm @if ((((isset($model) && $model->hasCalendar()) || empty($model))) && $onlyOneCalendar) @else hidden @endif\" @click=\"opened = false\">\n                <x-icon class=\"fa-regular fa-eraser\" />\n                {{ __('entities/reminders.actions.remove') }}\n            </a>\n        </div>\n    </div>\n</div>\n\n<input type=\"hidden\" name=\"calendar-data-url\" data-url=\"{{ route('calendars.month-list', [$campaign, 'calendar' => 0]) }}\">\n"
  },
  {
    "path": "resources/views/cruds/forms/_copy.blade.php",
    "content": "<x-helper>\n    <p>{{ __('crud.helpers.copy_options') }}</p>\n</x-helper>\n<x-forms.field\n    field=\"copy-posts\">\n    <input type=\"hidden\" name=\"copy_posts\" value=\"0\" />\n    <x-checkbox :text=\"__('crud.fields.copy_posts')\">\n        <input type=\"checkbox\" name=\"copy_posts\" value=\"1\" @if (old('copy_posts', true)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n<x-forms.field\n    field=\"replace-mentions\">\n    <input type=\"hidden\" name=\"replace_mentions\" value=\"0\" />\n    <x-checkbox :text=\"__('crud.fields.replace_mentions')\">\n        <input type=\"checkbox\" name=\"replace_mentions\" value=\"1\" @if (old('replace_mentions', true)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n<x-forms.field\n    field=\"copy-abilities\">\n    <input type=\"hidden\" name=\"copy_abilities\" value=\"0\" />\n    <x-checkbox :text=\"__('crud.fields.copy_abilities')\">\n        <input type=\"checkbox\" name=\"copy_abilities\" value=\"1\" @if (old('copy_abilities', request()->filled('template'))) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n<x-forms.field\n    field=\"copy-inventory\">\n    <input type=\"hidden\" name=\"copy_inventory\" value=\"0\" />\n    <x-checkbox :text=\"__('crud.fields.copy_inventory')\">\n        <input type=\"checkbox\" name=\"copy_inventory\" value=\"1\" @if (old('copy_inventory', request()->filled('template'))) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n<x-forms.field\n    field=\"copy-reminders\">\n    <input type=\"hidden\" name=\"copy_reminders\" value=\"0\" />\n    <x-checkbox :text=\"__('crud.fields.copy_reminders')\">\n        <input type=\"checkbox\" name=\"copy_reminders\" value=\"1\" @if (old('copy_reminders', request()->filled('template'))) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n@if ($campaign->boosted())\n    <x-forms.field\n        field=\"copy-links\">\n        <input type=\"hidden\" name=\"copy_links\" value=\"0\" />\n        <x-checkbox :text=\"__('crud.fields.copy_links')\">\n            <input type=\"checkbox\" name=\"copy_links\" value=\"1\" @if (old('copy_links', request()->filled('template'))) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n@endif\n\n<x-forms.field\n    field=\"copy-permissions\">\n    <input type=\"hidden\" name=\"copy_permissions\" value=\"0\" />\n    <x-checkbox :text=\"__('crud.fields.copy_permissions')\">\n        <input type=\"checkbox\" name=\"copy_permissions\" value=\"1\" @if (old('copy_permissions', request()->filled('template'))) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n\n@if (view()->exists($entityType->pluralCode() . '.form._copy'))\n    @include($entityType->pluralCode() . '.form._copy')\n@endif\n<input type=\"hidden\" name=\"copy_source_id\"\n    value=\"{{ !empty($source) ? $source->id : old('copy_source_id') }}\">\n"
  },
  {
    "path": "resources/views/cruds/forms/_errors.blade.php",
    "content": "@include('partials.errors')\n\n<x-alert type=\"error\" :hidden=\"true\" id=\"entity-form-generic-error\">\n    <strong>{{ __('partials.errors.title') }}</strong>\n    {{ __('partials.errors.description') }}<br>\n    <div class=\"error-logs\"></div>\n</x-alert>\n<x-alert type=\"error\" :hidden=\"true\"  id=\"entity-form-403-error\">\n    <strong>{{ __('errors.403.title') }}</strong><br />\n    <p>{!! __('errors.403.body') !!}</p>\n    <p>{!! __('errors.403-form.help') !!}</p>\n</x-alert>\n"
  },
  {
    "path": "resources/views/cruds/forms/_permission.blade.php",
    "content": "@inject('permissionService', 'App\\Services\\PermissionService')\n@php\n/**\n * @var \\App\\Services\\PermissionService $permissionService\n * @var \\App\\Models\\CampaignUser $member\n * @var \\App\\Models\\CampaignRole $role\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\EntityType $entityType\n */\nif (isset($source)) {\n    $permissionService->entityPermissions($source);\n}\nif (isset($entity)) {\n    $permissionService->entityPermissions($entity);\n    $permissionService->entityType($entity->entityType);\n} else {\n    $permissionService->entityType($entityType);\n}\n$actions = [\n    'allow' => __('crud.permissions.actions.bulk_entity.allow'),\n    'deny' => __('crud.permissions.actions.bulk_entity.deny'),\n    'inherit' => __('crud.permissions.actions.bulk_entity.inherit'),\n];\n\n$hidden = false;\nif (!empty($source) && $source->is_private) {\n    $hidden = true;\n} elseif (!empty($model) && $model->is_private) {\n    $hidden = true;\n}\n@endphp\n\n<x-grid type=\"1/1\">\n    @can('admin', $campaign)\n        @include('cruds.fields.privacy_callout', ['privacyToggle' => true])\n    @endif\n\n    <div\n        id=\"entity-is-private\"\n        x-data=\"{ show: {{ $hidden ? 'true' : 'false' }} }\"\n        @entity-privacy-changed.window=\"show = $event.detail\"\n        x-show=\"show\">\n    <x-alert type=\"warning\" class=\"rounded-xl\">\n        <strong>{{ __('entities/permissions.privacy.warning') }}</strong>\n        <p>{!! __('entities/permissions.privacy.text', [\n        'admin' => '<a href=\"' . route(\n            'campaigns.campaign_roles.admin',\n            $campaign,\n        ) . '\" class=\"text-link\">' .\n        $campaign->adminRoleName() . '</a>',\n    ]) !!}</p>\n    </x-alert>\n    </div>\n\n    @include('cruds.permissions.permissions_table', ['skipUsers' => true, 'campaign'])\n</x-grid>\n"
  },
  {
    "path": "resources/views/cruds/forms/_premium.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n\n@php\n    $translations = json_encode([\n        'cancel' => __('crud.actions.cancel'),\n        'remove' => __('crud.remove'),\n        'url' => __('gallery.actions.url'),\n        'gallery' => __('gallery.actions.gallery'),\n        'browse' => [\n            'title' => __('gallery.browse.title'),\n            'layouts' => [\n                'small' => __('gallery.browse.layouts.small'),\n                'large' => __('gallery.browse.layouts.large'),\n            ],\n            'search' => [\n                'placeholder' => __('gallery.browse.search.placeholder'),\n            ],\n        ],\n    ]);\n@endphp\n\n<x-grid type=\"1/1\">\n    <x-forms.field\n        field=\"tooltips\"\n        :label=\"__('entities/tooltips.label')\">\n        @if($campaign->boosted())\n            <x-helper>\n                <p>{{ __('entities/tooltips.helper') }}</p>\n            </x-helper>\n\n            <textarea name=\"tooltip\" class=\"\" id=\"tooltip\" rows=\"3\" placeholder=\"{{ __('entities/tooltips.placeholder') }}\">{!! old('tooltip', FormCopy::field('tooltip')->string() ?: $entity->tooltip ?? null) !!}</textarea>\n\n            <x-slot name=\"helper\">\n                @php\n                $tooltipTags = [\n                    'text' => '<em>b, i, strong, a, h1-6</em>',\n                    'layout' => '<em>p, div, span</em>',\n];\n                @endphp\n                {!! __('entities/tooltips.formatting', $tooltipTags) !!}\n            </x-slot>\n        @else\n            @include('cruds.fields.helpers.boosted', ['key' => 'entities/tooltips.premium'])\n        @endif\n    </x-forms.field>\n\n\n    <x-forms.field\n        field=\"header\"\n        :label=\"__('fields.header-image.title')\">\n        @if ($campaign->boosted())\n            @php\n            $headerUrlPreset = null;\n\n            if (!empty($source) && $source->header_image) {\n                $headerUrlPreset = Storage::url($source->header_image);\n            } elseif (!empty($source) && $source->header) {\n                $headerUrlPreset = $source->header->getUrl(192, 144);\n            } elseif (isset($entity) && $entity->header) {\n                $headerUrlPreset = $entity->header->getUrl(192, 144);\n            }\n            @endphp\n            <p class=\"text-neutral-content\">{{ __('fields.header-image.description') }}</p>\n\n            @if (isset($entity) && $entity->header_image)\n                <input type=\"hidden\" name=\"remove-header_image\" />\n                <div class=\"flex flex-row gap-2\">\n                    <div class=\"flex flex-col gap-2 col-span-4\">\n\n                    </div>\n\n                    <div class=\"preview w-32\">\n                    @include('cruds.fields._image_preview', [\n                        'image' => $entity->thumbnail(120),\n                        'title' => $entity->name,\n                        'target' => 'remove-header_image',\n                    ])\n                    </div>\n                </div>\n            @else\n                <div class=\"gallery-selection\">\n                    <gallery-selection\n                        file=\"{{ route('gallery.upload.file', [$campaign]) }}\"\n                        url=\"{{ route('gallery.upload.url', [$campaign]) }}\"\n                        accepts=\".jpg, .jpeg, .png, .gif, .webp\"\n                        uuid=\"{{ $source->header_uuid ?? $entity->header_uuid ?? null }}\"\n                        field=\"entity_header_uuid\"\n                        thumbnail=\"{{ $headerUrlPreset }}\"\n                        browse=\"{{ route('gallery.browse', [$campaign]) }}\"\n                        old=\"false\"\n                        i18n=\"{{ $translations }}\"\n                        premium=\"true\"\n                        cta=\"{{ route('settings.premium', ['campaign' => $campaign->id]) }}\"\n                    >\n                        <x-icon class=\"load\" />\n                    </gallery-selection>\n                </div>\n            @endif\n        @else\n            @include('cruds.fields.helpers.boosted', ['key' => 'fields.header-image.boosted-description'])\n        @endif\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/cruds/forms/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => $title,\n    'breadcrumbs' => [\n        ['url' => Breadcrumb::campaign($campaign)->index($name), 'label' => $plural],\n        __('crud.create'),\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n])\n\n@section('content')\n    @include('ads.top')\n\n    @if ($entityType->isCharacter() && request()->get('from') === 'onboarding')\n        <div class=\"flex flex-col gap-2 bg-primary text-primary-content p-4 rounded-xl mb-6\">\n            <p class=\"text-lg font-semibold mb-2\">\n                {{ __('onboarding/characters.title') }}\n            </p>\n            <p>\n                {{ __('onboarding/characters.text') }}\n            </p>\n            <p>\n                {{ __('onboarding/characters.finisher') }}\n            </p>\n        </div>\n    @elseif ($entityType->isLocation() && request()->get('from') === 'onboarding')\n        <div class=\"flex flex-col gap-2 bg-primary text-primary-content p-4 rounded-xl mb-6\">\n            <p class=\"text-lg font-semibold mb-2\">\n                {{ __('onboarding/locations.title') }}\n            </p>\n            <p>\n                {{ __('onboarding/locations.text') }}\n            </p>\n            <p>\n                {{ __('onboarding/locations.finisher') }}\n            </p>\n        </div>\n    @endif\n    <x-form\n        :action=\"[$name . '.store', $campaign]\"\n        files\n        unsaved\n        class=\"entity-form\"\n        id=\"entity-form\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars')]\">\n\n        <x-grid type=\"1/1\">\n            @include('cruds.forms._errors')\n\n            <div class=\"nav-tabs-custom bg-base-100 p-4 rounded-xl flex flex-col gap-6 relative\">\n                <div class=\"flex gap-2 items-center justify-between sticky z-10 top-12 bg-base-100\">\n                    <div class=\"overflow-x-auto\">\n                        <ul class=\"nav-tabs flex items-stretch w-full\" role=\"tablist\">\n                            <x-tab.tab target=\"entry\" :default=\"true\" :title=\"__('entries/tabs.identity')\"></x-tab.tab>\n\n                            @includeIf($name . '.form._tabs')\n\n                            @if ($tabBoosted && config('limits.campaigns.premium'))\n                                <x-tab.tab target=\"premium\" icon=\"premium\" :title=\"__('crud.tabs.premium')\"></x-tab.tab>\n                            @endif\n                            @if ($tabAttributes)\n                                <x-tab.tab target=\"attributes\" icon=\"attributes\" :title=\"__('entries/tabs.properties')\"></x-tab.tab>\n                            @endif\n                            @if ($tabPermissions)\n                                <x-tab.tab target=\"permissions\" icon=\"permissions\" :title=\"__('crud.tabs.permissions')\"></x-tab.tab>\n                            @endif\n\n                            @if ((!empty($source) || !empty(old('copy_source_id'))) && $tabCopy)\n                                <x-tab.tab target=\"copy\" :title=\"__('crud.forms.copy_options')\"></x-tab.tab>\n                            @endif\n                        </ul>\n                    </div>\n\n                    @include('cruds.fields.save', ['disableCancel' => true, 'target' => 'entity-form'])\n                </div>\n\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane pane-entry {{ (request()->get('tab') == null ? ' active' : '') }}\" id=\"form-entry\">\n                        <x-grid type=\"1/1\">\n                            @include($name . '.form._entry')\n                        </x-grid>\n                    </div>\n                    @includeIf($name . '.form._panes')\n\n                    @if ($tabBoosted && config('limits.campaigns.premium'))\n                        <div class=\"tab-pane pane-premium {{ (request()->get('tab') == 'premium' ? ' active' : '') }}\" id=\"form-premium\">\n                            <x-grid type=\"1/1\">\n                                @include('cruds.forms._premium')\n                            </x-grid>\n                        </div>\n                    @endif\n                    @if ((!empty($source) || !empty(old('copy_source_id'))) && $tabCopy)\n                        <div class=\"tab-pane pane-copy {{ (request()->get('tab') == 'copy' ? ' active' : '') }}\" id=\"form-copy\">\n                            <x-grid type=\"1/1\">\n                                @include('cruds.forms._copy')\n                            </x-grid>\n                        </div>\n                    @endif\n                    @if ($tabAttributes)\n                        <div class=\"tab-pane pane-attributes {{ (request()->get('tab') == 'attributes' ? ' active' : '') }}\" id=\"form-attributes\">\n                            <x-grid type=\"1/1\">\n                                @include('cruds.forms._attributes')\n                            </x-grid>\n                        </div>\n                    @endif\n                    @if ($tabPermissions)\n                        <div class=\"tab-pane pane-permissions {{ (request()->get('tab') == 'permissions' ? ' active' : '') }}\" id=\"form-permissions\">\n                            <x-grid type=\"1/1\">\n                                @include('cruds.forms._permission')\n                            </x-grid>\n                        </div>\n                    @endif\n                </div>\n            </div>\n        </x-grid>\n    </x-form>\n@endsection\n\n@include('editors.editor')\n\n\n@includeIf($name . '.forms._tutorial')\n"
  },
  {
    "path": "resources/views/cruds/forms/edit.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\MiscModel $model */\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('crud.titles.editing', ['name' => $model->name])  . ' - ' . __('entities.' . $name),\n    'breadcrumbs' => (isset($entity) ? [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('crud.edit'),\n    ] : [\n        __('crud.edit'),\n    ]),\n    'mainTitle' => false,\n    'entity' => null,\n    'centered' => true,\n])\n\n@section('content')\n    @include('ads.top')\n    <x-form\n        method=\"PATCH\"\n        :action=\"[$name . '.update', $campaign, $entity->id]\"\n        files\n        unsaved\n        class=\"entity-form\"\n        id=\"entity-form\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars')]\">\n        <x-grid type=\"1/1\">\n            @include('cruds.forms._errors')\n            <div class=\"nav-tabs-custom bg-base-100 p-4 rounded-xl flex flex-col gap-6 relative\">\n                <div class=\"flex gap-2 items-center justify-between sticky z-10 top-12 bg-base-100\">\n                    <div class=\"overflow-x-auto\">\n                        <ul class=\"nav-tabs flex items-stretch w-full\" role=\"tablist\">\n                            <x-tab.tab target=\"entry\" :default=\"true\" :title=\"__('entries/tabs.identity')\"></x-tab.tab>\n\n                            @includeIf($name . '.form._tabs', ['source' => null])\n                            @if ($tabBoosted && config('limits.campaigns.premium'))\n                                <x-tab.tab target=\"premium\" icon=\"premium\" :title=\"__('crud.tabs.premium')\"></x-tab.tab>\n                            @endif\n                            @if ($tabAttributes)\n                                <x-tab.tab target=\"attributes\" icon=\"attributes\" :title=\"__('entries/tabs.properties')\"></x-tab.tab>\n                            @endif\n                            @if ($tabPermissions)\n                                <x-tab.tab target=\"permissions\" icon=\"permissions\" :title=\"__('crud.tabs.permissions')\"></x-tab.tab>\n                            @endif\n                        </ul>\n                    </div>\n\n                    <div class=\"\">\n                        @include('cruds.fields.save', ['disableCancel' => true, 'target' => 'entity-form'])\n                    </div>\n                </div>\n\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane flex flex-col gap-5 {{ (request()->get('tab') == null ? ' active' : '') }}\" id=\"form-entry\">\n                        @include($name . '.form._entry', ['source' => null])\n                    </div>\n                    @includeIf($name . '.form._panes', ['source' => null])\n                    @if ($tabBoosted && config('limits.campaigns.premium'))\n                        <div class=\"tab-pane flex flex-col gap-5 {{ (request()->get('tab') == 'premium' ? ' active' : '') }}\" id=\"form-premium\">\n                            @include('cruds.forms._premium', ['source' => null])\n                        </div>\n                    @endif\n                    @if ($tabAttributes)\n                        <div class=\"tab-pane flex flex-col gap-5 {{ (request()->get('tab') == 'attributes' ? ' active' : '') }}\" id=\"form-attributes\">\n                            @include('cruds.forms._attributes', ['source' => null])\n                        </div>\n                    @endif\n                    @if ($tabPermissions)\n                        <div class=\"tab-pane flex flex-col gap-5 {{ (request()->get('tab') == 'permission' ? ' active' : '') }}\" id=\"form-permissions\">\n                            @include('cruds.forms._permission', ['source' => null])\n                        </div>\n                    @endif\n                </div>\n            </div>\n        </x-grid>\n\n        @if(!empty($entity) && $campaign->hasEditingWarning())\n            <input type=\"hidden\" id=\"editing-keep-alive\" data-url=\"{{ route('entities.keep-alive', [$campaign, $entity->id]) }}\" />\n        @endif\n    </x-form>\n@endsection\n\n@include('editors.editor')\n\n@section('modals')\n    @parent\n    @includeWhen(!empty($editingUsers) && !empty($entity), 'cruds.forms.edit_warning', ['model' => $model])\n@endsection\n"
  },
  {
    "path": "resources/views/cruds/forms/edit_warning.blade.php",
    "content": "<?php\nif ($model instanceof \\App\\Models\\Post) {\n    $modelName = 'Post';\n    $modelId = $model->id;\n} elseif ($model instanceof \\App\\Models\\Campaign) {\n    $modelName = null;\n    $modelId = $model->id;\n} elseif ($model instanceof \\App\\Models\\TimelineElement) {\n    $modelName = 'TimelineElement';\n    $modelId = $model->id;\n} elseif ($model instanceof \\App\\Models\\QuestElement) {\n    $modelName = 'TimelineElement';\n    $modelId = $model->id;\n} else {\n    $modelName = 'Entity';\n    $modelId = $model->id;\n}\n?>\n<x-dialog id=\"edit-warning\" :loading=\"true\" :dismissible=\"false\"></x-dialog>\n<input type=\"hidden\" name=\"edit-warning\" data-url=\"{{ route('campaign.editing-warning', [$campaign, 'model' => $modelName, 'id' => $modelId]) }}\" />\n"
  },
  {
    "path": "resources/views/cruds/forms/limit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __($name . '.create.title'),\n    'breadcrumbs' => [\n        ['url' => Breadcrumb::campaign($campaign)->index($name), 'label' => __('entities.' . $name)],\n        __('crud.create'),\n    ]\n])\n\n\n@section('content')\n    <x-premium-cta :campaign=\"$campaign\">\n        <x-slot name=\"title\">{{ __('campaigns/limits.title') }}</x-slot>\n        <p>{{ __('campaigns/limits.pitch', ['limit' => $limit, 'thing' => $thing]) }}</p>\n    </x-premium-cta>\n@endsection\n"
  },
  {
    "path": "resources/views/cruds/helpers/pagination.blade.php",
    "content": "\n<x-tutorial code=\"pagination\">\n    <p class=\"m-0\">{!! __('crud.helpers.pagination.text', ['settings' => '<a href=\"' . route('settings.appearance', ['highlight' => 'pagination', 'from' => base64_encode(route($route . '.' . $action, $campaign))]) . '\" class=\"text-link\">' . __('crud.helpers.pagination.settings') . '</a>']) !!}</p>\n</x-tutorial>\n"
  },
  {
    "path": "resources/views/cruds/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $titleKey ?? __('entities.' . $langKey),\n    'seoTitle' => ($titleKey ?? __('entities.' . $langKey)) . ' - ' . $campaign->name,\n\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'bodyClass' => 'kanka-' . $name,\n])\n\n@section('entity-header')\n    <div class=\"flex gap-2 items-center mb-5 justify-between\">\n        <h1 class=\"text-2xl category-title truncate\">{!! $titleKey ?? __('entities.' . $langKey) !!}</h1>\n        <div class=\"flex flex-wrap gap-2 justify-end\">\n            @if($mode === 'table' && $parent)\n                @include('entities.index.actions.parent')\n            @endif\n            @includeWhen(isset($route) && $route !== 'relations', 'layouts.datagrid._togglers', ['route' => $name . '.index'])\n            @if (isset($entityType))\n                @includeIf('entities.index.actions.' . $entityType->code)\n                @includeWhen(isset($model) && auth()->check() && auth()->user()->can('create', [$entityType, $campaign]), 'cruds.lists._create')\n            @else\n                @includeWhen(isset($route) && $route === 'relations', 'entities.index.actions.connection')\n                @includeWhen(isset($model) && auth()->check() && auth()->user()->can('create', $model), 'cruds.lists._create')\n            @endif\n        </div>\n    </div>\n@endsection\n\n@section('content')\n    @include('partials.errors')\n\n    @include('ads.top')\n\n    <div class=\"flex flex-col gap-5\">\n    @if (auth()->guest())\n        @include('cruds.clear-filters')\n    @else\n        @if (isset($route))\n            <div class=\"flex flex-stretch gap-2 items-center\">\n                    @includeWhen(isset($model) && $model->hasSearchableFields(), 'layouts.datagrid.search', ['route' => [$route . '.index', $campaign]])\n                    @includeWhen(isset($filter) && $filter !== false, 'cruds.datagrids.filters.datagrid-filter', ['route' => $route . '.index', $campaign])\n            </div>\n        @endif\n    @endif\n\n    @if (!isset($mode) || $mode === 'grid')\n        @include('cruds.datagrids.explore', ['route' => $route . '.index'])\n    @else\n        @if (isset($entityType))\n            <x-form class=\"flex flex-col gap-5\" :action=\"['bulk.print', [$campaign, 'entity_type' => $entityType]]\" direct>\n                @include('cruds._table')\n                <input type=\"hidden\" name=\"page\" value=\"{{ request()->get('page') }}\" />\n            </x-form>\n            <input type=\"hidden\" class=\"list-treeview\" value=\"1\" data-url=\"{{ route($route . '.index', $campaign) }}\">\n        @else\n            @include('cruds._table')\n        @endif\n\n\n    @endif\n    </div>\n@endsection\n\n@section('modals')\n    @parent\n    @includeWhen(auth()->check(), 'cruds.datagrids.bulks.modals')\n@endsection\n\n@section('og')\n    <meta property=\"og:description\" content=\"{{ __('seo.entity-list', ['module' => ($titleKey ?? __('entities.' . $langKey)), 'campaign' => $campaign->name]) }}\" />\n@endsection\n\n"
  },
  {
    "path": "resources/views/cruds/lists/_create.blade.php",
    "content": "<div class=\"join\">\n    <a href=\"{{ route($route . '.create', $campaign) }}\" class=\"btn2 btn-primary join-item btn-new-entity\" data-entity-type=\"{{ $name }}\"\n       aria-label=\"Create {!! isset($entityType) ? $entityType->name() : $singular !!}\">\n        <x-icon class=\"plus\" />\n        <span class=\"hidden md:inline\">{!! isset($entityType) ? $entityType->name() : $singular !!}</span>\n    </a>\n    @if(!in_array($name, ['bookmarks', 'relations']))\n        <div class=\"dropdown\">\n            <button type=\"button\" class=\"btn2 btn-primary join-item\" data-dropdown aria-expanded=\"false\" aria-label=\"Create from template\" aria-haspopup=\"menu\" aria-controls=\"templates-submenu\">\n                <x-icon class=\"fa-regular fa-caret-down\" />\n                <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n            </button>\n            <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"templates-submenu\">\n                @if (auth()->user()->can('useTemplates', $campaign) && $templates->isNotEmpty())\n                    @foreach ($templates as $entityTemplate)\n                        <x-dropdowns.item\n                            :link=\"route($route . '.create', [$campaign, 'copy' => $entityTemplate->id, 'template' => true])\"\n                            css=\"new-entity-from-template\" icon=\"fa-regular fa-star\">\n                            {{ $entityTemplate->name  }}\n                        </x-dropdowns.item>\n                    @endforeach\n                    <x-dropdowns.divider />\n                @endif\n                <x-dropdowns.item link=\"https://docs.kanka.io/en/latest/guides/archetypes.html\" target=\"_blank\" icon=\"link\">\n                        {{ __('entries/archetypes.helpers.how') }}\n                </x-dropdowns.item>\n            </div>\n        </div>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/cruds/overview.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/cruds/permissions/permissions_table.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Services\\PermissionService $permissionService\n * @var \\App\\Models\\CampaignUser $member\n * @var \\App\\Models\\EntityType? $entityType\n * @var \\App\\Models\\Entity? $entityType\n * @var \\App\\Models\\CampaignRole $role\n * @var \\App\\Models\\Campaign $campaign\n */\nuse App\\Models\\CampaignPermission;\n$actions = [\n    'allow' => __('crud.permissions.actions.bulk_entity.allow'),\n    'deny' => __('crud.permissions.actions.bulk_entity.deny'),\n    'inherit' => __('crud.permissions.actions.bulk_entity.inherit'),\n];\n$permissionService->campaign($campaign);\n$hasActionCol = isset($showPermissionActions) && auth()->user()->isAdmin();\n$cols = 'md:grid-cols-5';\nif ($hasActionCol) {\n    $cols = 'md:grid-cols-6';\n}\n$moduleName = isset($entityType) ? $entityType->name() : $entity->entityType->name();\n?>\n\n<x-helper>\n    <p>{!! __('crud.permissions.helpers.setup', [\n        'allow' => '<code>' . __('crud.permissions.actions.bulk_entity.allow') . '</code>',\n        'deny' => '<code>' . __('crud.permissions.actions.bulk_entity.deny') . '</code>',\n        'inherit' => '<code>' . __('crud.permissions.actions.bulk_entity.inherit') . '</code>',\n    ]) !!}</p>\n</x-helper>\n\n<div id=\"crud_permissions\" class=\"flex flex-col gap-10\">\n    <div id=\"roles-permissions\" class=\"flex flex-col gap-2 relative\">\n        <div class=\"hidden md:grid {{ $cols }} gap-2 @if (!request()->ajax()) sticky top-12 z-10 bg-base-100 py-2 @endif \">\n            <div class=\"w-40 \">\n                <span class=\"font-medium\">{{ __('crud.permissions.fields.role') }}</span>\n            </div>\n            <div class=\"\" data-title=\"{{ __('permissions.helpers.view') }}\" data-tooltip>\n                <span class=\"hidden md:inline font-medium\">{{ __('crud.permissions.actions.view') }}</span>\n                <x-icon class=\"fa-regular fa-eye md:hidden\" />\n            </div>\n            <div class=\"\" data-title=\"{{ __('permissions.helpers.edit') }}\" data-tooltip>\n                <span class=\"hidden md:inline font-medium\">{{ __('crud.permissions.actions.edit') }}</span>\n                <x-icon class=\"fa-regular fa-edit md:hidden\" />\n            </div>\n            <div class=\"\" data-title=\"{{ __('permissions.helpers.delete') }}\" data-tooltip>\n                <span class=\"hidden md:inline font-medium\">{{ __('crud.permissions.actions.delete') }}</span>\n                <x-icon class=\"fa-regular fa-trash-can md:hidden\" />\n            </div>\n            <div class=\"\" data-title=\"{{ __('campaigns.roles.permissions.helpers.articles') }}\" data-tooltip>\n                <span class=\"hidden md:inline font-medium\">{{ __('entities.articles') }}</span>\n                <x-icon class=\"fa-regular fa-note-sticky md:hidden\" />\n            </div>\n            @if ($hasActionCol)\n                <div class=\"\">\n                    <span class=\"hidden md:inline font-medium\">{{ __('crud.actions.actions') }}</span>\n                </div>\n            @endif\n        </div>\n        @foreach ($campaign->roles()->withoutAdmin()->get() as $role)\n            @php $permissionService->reset()->role($role) @endphp\n            <div class=\"grid grid-cols-2 {{ $cols }} gap-2 items-center\">\n                <div class=\"w-40 col-span-2 md:col-span-1\">\n                    @can('update', $role)\n                        <a href=\"{{ route('campaign_roles.show', [$campaign, $role]) }}\" class=\"text-link\">\n                            {!! $role->name !!}\n                        </a>\n                        @if ($role->isPublic() && !$campaign->isPublic())\n                            <x-icon class=\"fa-regular fa-exclamation-triangle\" tooltip :title=\"__('campaigns.roles.permissions.helpers.not_public')\" />\n                        @endif\n                    @else\n                        {!! $role->name !!}\n                    @endcan\n                </div>\n                <div class=\"\">\n                    <div class=\"join w-full field\">\n                        <x-forms.select\n                            name=\"role[{{ $role->id }}][{{ \\App\\Enums\\Permission::View->value }}]\"\n                            :options=\"$actions\"\n                            :selected=\"$permissionService->action(\\App\\Enums\\Permission::View)->selected('role')\"\n                            class=\"join-item permission-control\"\n                            :label=\"__('permissions.helpers.view')\" />\n                    @if ($permissionService->inherited())\n                        <span class=\"join-item flex items-center bg-base-200 p-2 rounded\" data-title=\"{{ __('permissions.roles.inherited', ['role' => $role->name, 'module' => $moduleName]) }}\" data-toggle=\"tooltip\" data-append=\"parent\">\n                                <x-icon class=\"text-green-500 fa-solid fa-check-circle\" />\n                        </span>\n                        <span class=\"sr-only\">{{ __('permissions.roles.inherited', ['role' => $role->name, 'module' => $moduleName]) }}</span>\n                    @endif\n                    </div>\n                </div>\n                @if (!$role->isPublic())\n                    <div class=\"\">\n                        <div class=\"join w-full field\">\n                            <x-forms.select\n                                name=\"role[{{ $role->id }}][{{ \\App\\Enums\\Permission::Update->value }}]\"\n                                :options=\"$actions\"\n                                :selected=\"$permissionService->action(\\App\\Enums\\Permission::Update)->selected('role')\"\n                                class=\"join-item permission-control\"\n                                :label=\"__('permissions.helpers.edit')\" />\n                            @if ($permissionService->inherited())\n                                <span class=\"join-item flex items-center bg-base-200 p-2 rounded\" data-title=\"{{ __('permissions.roles.inherited', ['role' => $role->name, 'module' => $moduleName]) }}\" data-toggle=\"tooltip\" data-append=\"parent\">\n                                    <x-icon class=\"text-green-500 fa-solid fa-check-circle\" />\n                                </span>\n                                <span class=\"sr-only\">{{ __('permissions.roles.inherited', ['role' => $role->name, 'module' => $moduleName]) }}</span>\n                            @endif\n                        </div>\n                    </div>\n                    <div class=\"\">\n                        <div class=\"join w-full field\">\n                            <x-forms.select\n                                name=\"role[{{ $role->id }}][{{ \\App\\Enums\\Permission::Delete->value }}]\"\n                                :options=\"$actions\"\n                                :selected=\"$permissionService->action(\\App\\Enums\\Permission::Delete)->selected('role')\"\n                                class=\"join-item permission-control\"\n                                :label=\"__('permissions.helpers.delete')\" />\n                            @if ($permissionService->inherited())\n                                <span class=\"join-item flex items-center bg-base-200 p-2 rounded\" data-title=\"{{ __('permissions.roles.inherited', ['role' => $role->name, 'module' => $moduleName]) }}\" data-toggle=\"tooltip\" data-append=\"parent\">\n                                    <x-icon class=\"text-green-500 fa-solid fa-check-circle\" />\n                                </span>\n                                <span class=\"sr-only\">{{ __('permissions.roles.inherited', ['role' => $role->name, 'module' => $moduleName]) }}</span>\n                            @endif\n                        </div>\n                    </div>\n                    <div class=\"\">\n                        <div class=\"join w-full field\">\n                            <x-forms.select\n                                name=\"role[{{ $role->id }}][{{ \\App\\Enums\\Permission::Posts->value }}]\"\n                                :options=\"$actions\"\n                                :selected=\"$permissionService->action(\\App\\Enums\\Permission::Posts)->selected('role')\"\n                                class=\"join-item permission-control\"\n                                :label=\"__('entities.articles')\" />\n                            @if ($permissionService->inherited())\n                                <span class=\"join-item flex items-center bg-base-200 p-2 rounded\" data-title=\"{{ __('permissions.roles.inherited', ['role' => $role->name, 'module' => $moduleName]) }}\" data-toggle=\"tooltip\" data-append=\"parent\">\n                                    <x-icon class=\"text-green-500 fa-solid fa-check-circle\" />\n                                </span>\n                                <span class=\"sr-only\">{{ __('permissions.roles.inherited', ['role' => $role->name, 'module' => $moduleName]) }}</span>\n                            @endif\n                        </div>\n                    </div>\n                @else\n                    <div></div>\n                    <div></div>\n                    <div></div>\n                @endif\n            </div>\n        @endforeach\n    </div>\n\n    @if (isset($skipUsers) && $skipUsers && $campaign->nonAdminMembers->count() > config('limits.campaigns.members'))\n        <x-helper>\n            <p>{{ __('crud.permissions.too_many_members', ['number' => config('limits.campaigns.members')]) }}</p>\n        </x-helper>\n        <input type=\"hidden\" name=\"permissions_too_many\" value=\"1\" />\n    @else\n\n        <div id=\"members-permissions\" class=\"relative flex flex-col gap-2\">\n            <div class=\"hidden md:grid {{ $cols }} gap-2 justify-center @if (!request()->ajax()) sticky top-12 z-10 bg-base-100 py-2 @endif\">\n                <div class=\"font-medium\">{{ __('crud.permissions.fields.member') }}</div>\n\n                <div class=\"\" data-title=\"{{ __('permissions.helpers.view') }}\" data-tooltip>\n                    <span class=\"hidden md:inline font-medium\">{{ __('crud.permissions.actions.view') }}</span>\n                    <x-icon class=\"fa-regular fa-eye md:hidden\" />\n                </div>\n                <div class=\"\" data-title=\"{{ __('permissions.helpers.edit') }}\" data-tooltip>\n                    <span class=\"hidden md:inline font-medium\">{{ __('crud.permissions.actions.edit') }}</span>\n                    <x-icon class=\"fa-regular fa-edit md:hidden\" />\n                </div>\n                <div class=\"\" data-title=\"{{ __('permissions.helpers.delete') }}\" data-tooltip>\n                    <span class=\"hidden md:inline font-medium\">{{ __('crud.permissions.actions.delete') }}</span>\n                    <x-icon class=\"fa-regular fa-trash-can md:hidden\"  />\n                </div>\n                <div class=\"\" data-title=\"{{ __('campaigns.roles.permissions.helpers.articles') }}\" data-tooltip>\n                    <span class=\"hidden md:inline font-medium\">{{ __('entities.articles') }}</span>\n                    <x-icon class=\"fa-regular fa-sticky-note md:hidden\" />\n                </div>\n                @if ($hasActionCol)\n                    <div class=\"\">\n                        <span class=\"hidden md:inline font-medium\">{{ __('crud.actions.actions') }}</span>\n                    </div>\n                @endif\n            </div>\n            @foreach ($campaign->nonAdminMembers as $member)\n                @php\n                    $permissionService->reset()->user($member->user);\n                @endphp\n                <div class=\"grid grid-cols-2 {{ $cols }} md: gap-2\">\n                    <div class=\"col-span-2 md:col-span-1 flex items-center gap-2\">\n                        <div class=\"flex-none\">\n                            @if ($member->user->hasAvatar())\n                                <x-users.avatar :user=\"$member->user\" class=\"w-8 h-8\" />\n                            @else\n                                <div class=\"rounded-full w-8 h-8 cover-background bg-neutral text-neutral-content uppercase flex items-center justify-center\">\n                                    {{ $member->user->initials() }}\n                                </div>\n                            @endif\n                        </div>\n                        <div class=\"truncate\">\n                            {!! $member->user->name !!}\n                        </div>\n                    </div>\n                    <div class=\"\">\n                        <div class=\"join w-full field\">\n                            <x-forms.select\n                                name=\"user[{{ $member->user_id }}][{{ \\App\\Enums\\Permission::View->value }}]\"\n                                :options=\"$actions\"\n                                :selected=\"$permissionService->action(\\App\\Enums\\Permission::View)->selected('user')\"\n                                class=\"join-item permission-control\"\n                                :label=\"__('permissions.helpers.view')\" />\n                            @if ($permissionService->inherited())\n                                @php\n                                    $inheritedHelper = __('permissions.members.inherited', [\n                                        'role' => e($permissionService->inheritedRoleName()),\n                                        'member' => $member->user->name\n                                    ]);\n                                @endphp\n                                <span class=\"join-item flex items-center bg-base-200 p-2 rounded\" data-title=\"{{ $inheritedHelper }}\" data-toggle=\"tooltip\" data-append=\"parent\">\n                                    <i class=\"text-{{ $permissionService->inheritedRoleAccess() ? 'green-500' : 'red-500' }} fa-solid fa-check-circle\" aria-hidden=\"true\"></i>\n                                    <span class=\"sr-only\">{{ $inheritedHelper }}</span>\n                                </span>\n                            @endif\n                        </div>\n                    </div>\n                    <div class=\"\">\n                        <div class=\"join w-full field\">\n                            <x-forms.select\n                                name=\"user[{{ $member->user_id }}][{{ \\App\\Enums\\Permission::Update->value }}]\"\n                                :options=\"$actions\"\n                                :selected=\"$permissionService->action(\\App\\Enums\\Permission::Update)->selected('user')\"\n                                class=\"join-item permission-control\"\n                                :label=\"__('permissions.helpers.edit')\" />\n                            @if ($permissionService->inherited())\n                                @php\n                                    $inheritedHelper = __('permissions.members.inherited', [\n                                        'role' => e($permissionService->inheritedRoleName()),\n                                        'member' => $member->user->name\n                                    ]);\n                                @endphp\n                                <span class=\"join-item flex items-center bg-base-200 p-2 rounded\" data-title=\"{{ $inheritedHelper }}\" data-toggle=\"tooltip\" data-append=\"parent\">\n                                    <i class=\"text-{{ $permissionService->inheritedRoleAccess() ? 'green-500' : 'red-500' }} fa-solid fa-check-circle\" aria-hidden=\"true\"></i>\n                                    <span class=\"sr-only\">{{ $inheritedHelper }}</span>\n                                </span>\n                            @endif\n                        </div>\n                    </div>\n                    <div class=\"\">\n                        <div class=\"join w-full field\">\n                            <x-forms.select\n                                name=\"user[{{ $member->user_id }}][{{ \\App\\Enums\\Permission::Delete->value }}]\"\n                                :options=\"$actions\"\n                                :selected=\"$permissionService->action(\\App\\Enums\\Permission::Delete)->selected('user')\"\n                                class=\"join-item permission-control\"\n                                :label=\"__('permissions.helpers.delete')\" />\n                            @if ($permissionService->inherited())\n                                @php\n                                    $inheritedHelper = __('permissions.members.inherited', [\n                                        'role' => e($permissionService->inheritedRoleName()),\n                                        'member' => $member->user->name\n                                    ]);\n                                @endphp\n                                <span class=\"join-item flex items-center bg-base-200 p-2 rounded\" data-title=\"{{ $inheritedHelper }}\" data-toggle=\"tooltip\" data-append=\"parent\">\n                                    <i class=\"text-{{ $permissionService->inheritedRoleAccess() ? 'green-500' : 'red-500' }} fa-solid fa-check-circle\" aria-hidden=\"true\"></i>\n                                    <span class=\"sr-only\">{{  $inheritedHelper }}</span>\n                                </span>\n                            @endif\n                        </div>\n                    </div>\n                    <div class=\"\">\n                        <div class=\"join w-full field\">\n                            <x-forms.select\n                                name=\"user[{{ $member->user_id }}][{{ \\App\\Enums\\Permission::Posts->value }}]\"\n                                :options=\"$actions\"\n                                :selected=\"$permissionService->action(\\App\\Enums\\Permission::Posts)->selected('user')\"\n                                class=\"join-item permission-control\"\n                                :label=\"__('entities.articles')\" />\n                            @if ($permissionService->inherited())\n                                @php\n                                    $inheritedHelper = __('permissions.members.inherited', [\n                                        'role' => e($permissionService->inheritedRoleName()),\n                                        'member' => $member->user->name\n                                    ]);\n                                @endphp\n                                <span class=\"join-item flex items-center bg-base-200 p-2 rounded\" data-title=\"{{ $inheritedHelper }}\" data-toggle=\"tooltip\" data-append=\"parent\">\n                                    <i class=\"text-{{ $permissionService->inheritedRoleAccess() ? 'green-500' : 'red-500' }} fa-solid fa-check-circle\" aria-hidden=\"true\"></i>\n                                    <span class=\"sr-only\">{{ $inheritedHelper}}</span>\n                                </span>\n                            @endif\n                        </div>\n                    </div>\n                    @if ($hasActionCol)\n                        @can('switch', $member)\n                            <div class=\"flex items-center\">\n                                <a class=\"btn2 btn-outline btn-xs btn-view-as\" href=\"{{ route('identity.switch-entity', [$campaign, $member, $entity]) }}\" data-title=\"{{ __('campaigns.members.helpers.switch') }}\" data-toggle=\"tooltip\">\n                                    {{ __('campaigns.members.actions.switch-entity') }}\n                                    <x-icon class=\"fa-solid fa-sign-in-alt\" />\n                                </a>\n                            </div>\n                        @endcan\n                    @endif\n                </div>\n            @endforeach\n        </div>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/cruds/permissions.blade.php",
    "content": "<?php\n/**\n * entities/<id>/permissions\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\CampaignRole $role\n * @var \\App\\Models\\CampaignUser $member\n * @var \\App\\Services\\PermissionService $permissionService\n */\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('crud.permissions.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('crud.edit'),\n    ]\n])\n\n@section('content')\n    @inject('permissionService', 'App\\Services\\PermissionService')\n@php\n$permissions = $permissionService->entityType($entity->entityType)->entityPermissions($entity);\n@endphp\n    <x-form :action=\"['entities.permissions-process', $campaign, $entity->id]\" direct>\n        @include('partials.forms._dialog', [\n            'title' => __('crud.permissions.title', ['name' => $entity->name]),\n            'content' => 'cruds.permissions.permissions_table',\n            'articleClass' => 'max-w-3xl',\n            'showPermissionActions' => true\n        ])\n        <input type=\"hidden\" name=\"entity_id\" value=\"{{ $entity->id }}\" />\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/cruds/show.blade.php",
    "content": "<?php /** @var \\App\\Models\\MiscModel $model */?>\n@php\n$headerImage = true;\n@endphp\n\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => $entity->name . ' - ' . $campaign->name,\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-story',\n])\n\n@include('entities.components.og')\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        @include('entities.headers.toggle')\n        @include('entities.headers.actions')\n    </div>\n@endsection\n\n\n\n@section('content')\n    @if($entity->entityType->isStandard() && view()->exists($entity->entityType->pluralCode() . '.show'))\n        @include($entity->entityType->pluralCode() . '.show')\n    @else\n        @include('cruds.overview')\n    @endif\n@endsection\n"
  },
  {
    "path": "resources/views/cruds/subview.blade.php",
    "content": "@include('entities.components.og')\n@include($fullview)\n"
  },
  {
    "path": "resources/views/dashboard/_widget.blade.php",
    "content": "<?php /** @var \\App\\Models\\CampaignDashboardWidget $widget */\nuse App\\Enums\\Widget;\n?>\n\n\n<div class=\"col-span-{{ $widget->colSize() }}\">\n    <div class=\"{{ $widgetClass }} cursor-pointer widget-{{ $widget->widget->value }} cover-background {{ $widget->widget->isHeader() ? 'h-28' : null }}\"\n    @if($widget->widget == Widget::Campaign)\n         data-toggle=\"dialog\"\n         data-url=\"{{ route('campaigns.dashboard-header.edit', ['campaign' => $campaign, 'campaignDashboardWidget' => $widget]) }}\"\n    @else\n         data-toggle=\"dialog\"\n         data-url=\"{{ route('campaign_dashboard_widgets.edit', [$campaign, $widget]) }}\"\n    @endif\n    @if ($widget->widget == Widget::Campaign && $campaign->header_image)\n         style=\"background-image: url('{{ Img::crop(1200, 400)->url($campaign->header_image) }}')\"\n    @endif\n    >\n        <div class=\"rounded-xl bg-box flex gap-2 flex-col p-4 h-full overflow-y-auto\">\n            <div class=\"flex gap-4 items-center w-full \">\n                <div class=\"grow truncate\">\n                    <x-icon :class=\"$widget->widgetIcon()\" tooltip title=\"{{ __('dashboards/widgets/' . $widget->widget->value . '.name') }}\" />\n                    @if (!empty($widget->conf('text')))\n                        {{ $widget->conf('text') }} ({{ __('dashboards/widgets/' . $widget->widget->value . '.name') }})\n                    @else\n                        {{ __('dashboards/widgets/' . $widget->widget->value . '.name') }}\n                    @endif\n                </div>\n                <div class=\"hidden md:block flex-none handle cursor-move text-neutral-content\" data-toggle=\"tooltip\" data-title=\"{{ __('dashboard.setup.reorder.helper') }}\">\n                    <x-icon class=\"fa-regular fa-arrows\" />\n                </div>\n            </div>\n\n            @if ($widget->entity)\n                <div class=\"widget-entity flex items-center gap-2 w-full\">\n                    <div class=\"rounded entity-picture w-9 h-9 flex-none\" style=\"background-image: url('{!! Avatar::entity($widget->entity)->size(40)->fallback()->thumbnail() !!}');\"></div>\n                    <div class=\"truncate text-md\">\n                        <a href=\"{{ $widget->entity->url() }}\" class=\"text-link\">\n                            {!! $widget->entity->name !!}\n                        </a>\n                    </div>\n                </div>\n            @endif\n            @if (in_array($widget->widget, [Widget::Recent, Widget::Random]))\n                <p class=\"text-neutral-content text-sm\">\n                    <x-icon class=\"fa-regular fa-search\" />\n                @if ($widget->entityType)\n                    {!! $widget->entityType->plural() !!}\n                @elseif (!empty($widget->conf('singular')))\n                    {{ __('dashboard.widgets.recent.singular') }}\n                @else\n                    {{ __('dashboard.widgets.recent.all-entities') }}\n                @endif\n                    @if (!empty($widget->conf('filters')))\n                        <x-icon class=\"fa-regular fa-filter\" tooltip title=\"{{ $widget->conf('filters') }}\" />\n                    @endif\n                </p>\n            @endif\n            @if ($widget->widget === Widget::Gallery && !empty($widget->conf('folder_id')))\n                @php $galleryFolder = \\App\\Models\\Image::find($widget->conf('folder_id')); @endphp\n                @if ($galleryFolder)\n                    <p class=\"text-neutral-content text-sm\">\n                        <x-icon class=\"fa-regular fa-folder\" />\n                        {{ $galleryFolder->name }}\n                    </p>\n                @endif\n            @endif\n\n            @if ($widget->tags->isNotEmpty())\n                <div class=\"flex flex-wrap gap-1 items-center tags\">\n                    @foreach ($widget->tags as $tag)\n                        @include ('tags._badge')\n                    @endforeach\n                </div>\n            @endif\n        </div>\n        <input type=\"hidden\" name=\"widgets[]\" value=\"{{ $widget->id }}\" />\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/dashboards/_form.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignDashboard $dashboard\n */\n?>\n<x-grid type=\"1/1\">\n    @empty($dashboard)\n    <x-helper>\n        <p>{!! __('dashboard.dashboards.create.helper', ['name' => $campaign->name]) !!}</p>\n    </x-helper>\n    @endif\n\n    <x-forms.field\n        field=\"name\"\n        required\n        :label=\"__('dashboard.dashboards.fields.name')\">\n\n        <input type=\"text\" name=\"name\" placeholder=\"{{ __('dashboard.dashboards.placeholders.name') }}\" maxlength=\"45\" required value=\"{!! htmlspecialchars(old('name', $dashboard->name ?? null)) !!}\" />\n    </x-forms.field>\n\n    <div class=\"field grid grid-cols-2 gap-2 items-center\">\n        <div class=\"font-extrabold\">{{ __('campaigns.members.fields.role') }}</div>\n        <div class=\"font-extrabold\">{{ __('dashboard.dashboards.fields.visibility') }}</div>\n\n        @foreach($campaign->roles as $role)\n            <div class=\"truncate\">\n                <a href=\"{{ route('campaign_roles.show', [$campaign, $role]) }}\" class=\"text-link\">\n                    {!! $role->name !!}\n                </a>\n            </div>\n            <select name=\"roles[{{ $role->id }}]\">\n                @if(!$role->is_admin)\n                <option value=\"\">{{ __('dashboard.dashboards.visibility.none') }}</option>\n                @endif\n\n                <option value=\"visible\" @if(!empty($dashboard) && $dashboard->permission($role)) selected=\"selected\" @endif>{{ __('dashboard.dashboards.visibility.visible') }}</option>\n                <option value=\"default\" @if(!empty($dashboard) && $dashboard->permission($role, true)) selected=\"selected\" @endif>{{ __('dashboard.dashboards.visibility.default') }}</option>\n            </select>\n        @endforeach\n    </div>\n\n\n    @if(!empty($source))\n        <input type=\"hidden\" name=\"copy_widgets\" value=\"0\" />\n        <x-forms.field field=\"copy\" :label=\"__('dashboard.dashboards.fields.copy_widgets')\">\n            <x-checkbox :text=\"__('dashboard.dashboards.helpers.copy_widgets', ['name' => $source->name])\">\n                <input type=\"checkbox\" name=\"copy_widgets\" value=\"1\" @if (old('copy_widgets', true)) checked=\"checked\" @endif />\n            </x-checkbox>\n            <input type=\"hidden\" name=\"source\" value=\"{{ $source->id }}\" />\n        </x-forms.field>\n    @endif\n</x-grid>\n"
  },
  {
    "path": "resources/views/dashboard/dashboards/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => trans('dashboard.dashboards.create.title'),\n    'description' => '',\n    'breadcrumbs' => []\n])\n\n@section('content')\n\n    <x-form :action=\"['campaign_dashboards.store', $campaign]\">\n    @include('partials.forms._dialog', [\n        'title' => __('dashboard.dashboards.create.title'),\n        'content' => 'dashboard.dashboards._form',\n    ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/dashboard/dashboards/update.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('dashboard.dashboards.update.title', ['name' => $dashboard->name]),\n    'description' => '',\n    'breadcrumbs' => []\n])\n\n@section('content')\n    <x-form :action=\"['campaign_dashboards.update', $campaign, $dashboard]\" method=\"PATCH\">\n        @include('partials.forms._dialog', [\n            'title' => __('dashboard.dashboards.update.title', ['name' => $dashboard->name]),\n            'content' => 'dashboard.dashboards._form',\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/dashboard/dialogs/onboarding.blade.php",
    "content": "@php\n    $translations = json_encode([\n    'title' => __('dashboards/onboarding.title'),\n    'intro' => __('dashboards/onboarding.intro'),\n    'name' => __('dashboards/onboarding.fields.name'),\n    'placeholder' => __('dashboards/onboarding.placeholders.name'),\n    'type-title' => __('dashboards/onboarding.selection.title'),\n    'type-intro' => __('dashboards/onboarding.selection.intro'),\n    'type-helper' => __('dashboards/onboarding.selection.helper'),\n    'skip' => __('dashboards/onboarding.actions.skip'),\n    'continue' => __('dashboards/onboarding.actions.continue'),\n    'worldbuilding' => __('dashboards/onboarding.selection.worldbuilding'),\n    'worldbuilding-description' => __('dashboards/onboarding.selection.worldbuilding-description'),\n    'campaign' => __('dashboards/onboarding.selection.campaign'),\n    'campaign-description' => __('dashboards/onboarding.selection.campaign-description'),\n    'story' => __('dashboards/onboarding.selection.story'),\n    'story-description' => __('dashboards/onboarding.selection.story-description'),\n    ]);\n@endphp\n<div id=\"onboarding\">\n    <onboarding\n        api=\"{{ route('campaign.onboarding.initial', $campaign) }}\"\n        skip=\"{{ route('campaign.onboarding.initial-skip', $campaign) }}\"\n        i18n=\"{{ $translations }}\"\n        campaign=\"{{ $campaign->name }}\"\n    ></onboarding>\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/setup.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('dashboard.setup.title'),\n    'breadcrumbs' => [\n        __('dashboard.setup.title')\n    ],\n    'mainTitle' => '',\n    'centered' => true,\n])\n\n@php\n$widgetClass = 'widget rounded-xl h-28 shadow-xs hover:shadow-md cursor-pointer bg-box' ;\n$overlayClass = 'rounded-xl flex gap-2 flex-col p-2 items-center h-full';\n\n$hasDashboards = !$dashboards->isEmpty() || !empty($dashboard);\n@endphp\n\n@section('content')\n    <x-grid type=\"1/1\">\n        <div class=\"flex gap-2 items-center justify-between\">\n            @if ($hasDashboards)\n                <div class=\"flex gap-1 items-center dropdown\" role=\"button\" data-dropdown aria-expanded=\"false\">\n                    <h4 class=\"text-lg group cursor-pointer\" data-tooltip data-title=\"{{ __('dashboards/setup.tooltips.switch') }}\">\n                        @if ($dashboard)\n                            {!! $dashboard->name !!}\n                        @else\n                            {{ __('dashboard.dashboards.default.title') }}\n                        @endif\n\n                        <x-icon class=\"fa-regular fa-caret-down group-hover:text-primary duration-150 transition-colors\" />\n                    </h4>\n\n                    <div class=\"dropdown-menu hidden\" role=\"menu\">\n                        <x-dropdowns.section>\n                            {{ __('dashboards/setup.sections.switch') }}\n                        </x-dropdowns.section>\n                        @if (!empty($dashboard))\n                            <x-dropdowns.item :link=\"route('dashboard.setup', $campaign)\" icon=\"cog\">\n                                {{ __('dashboard.dashboards.default.title')}}\n                            </x-dropdowns.item>\n                        @endif\n                        @foreach ($dashboards as $dash)\n                            <x-dropdowns.item :link=\"route('dashboard.setup', [$campaign, 'dashboard' => $dash->id])\" icon=\"cog\">\n                                {!! $dash->name !!}\n                            </x-dropdowns.item>\n                        @endforeach\n                    </div>\n                </div>\n            @else\n                <h4 class=\"text-lg\">\n                @if ($dashboard)\n                    {!! $dashboard->name !!}\n                @else\n                    {{ __('dashboard.dashboards.default.title') }}\n                @endif\n                </h4>\n            @endif\n            \n            @if (config('limits.campaigns.premium'))\n            <div class=\"flex items-center gap-2\">\n                <div class=\"inline-block\">\n                    <a href=\"{{ route('dashboard', isset($dashboard) ? [$campaign, 'dashboard' => $dashboard->id] : [$campaign]) }}\" class=\"btn2 btn-sm\" title=\"{{ __('dashboard.setup.actions.back_to_dashboard') }}\">\n                        <x-icon class=\"fa-regular fa-arrow-left\" />\n                        <span class=\"hidden sm:inline\">{{ __('dashboard.setup.actions.back_to_dashboard') }}</span>\n                    </a>\n                </div>\n\n\n\n                @if($dashboard)\n                <div class=\"dropdown\">\n                    <button type=\"button\" class=\"btn2 btn-sm\" data-dropdown aria-expanded=\"false\">\n                        <span class=\"hidden sm:inline\">{{ __('crud.actions.actions') }}</span>\n                        <x-icon class=\"fa-regular fa-caret-down\" />\n                    </button>\n                    <div class=\"dropdown-menu hidden\" role=\"menu\">\n\n                        @php $url = route('campaign_dashboards.edit', [$campaign, $dashboard]); @endphp\n                        <x-dropdowns.item link=\"#\" :dialog=\"$url\" icon=\"edit\">\n                            {{ __('dashboard.dashboards.actions.edit') }}\n                        </x-dropdowns.item>\n\n                        @php $url = route('campaign_dashboards.create', [$campaign, 'source' => $dashboard]); @endphp\n                        <x-dropdowns.item link=\"#\" :dialog=\"$url\" icon=\"copy\">\n                            {{ __('crud.actions.copy') }}\n                        </x-dropdowns.item>\n\n                        @php $data = route('confirm-delete', [$campaign, 'route' => route('campaign_dashboards.destroy', [$campaign, $dashboard]), 'name' => $dashboard->name, 'permanent' => true]); @endphp\n                        <x-dropdowns.divider />\n                        <x-dropdowns.item link=\"#\" css=\"text-error-content hover:bg-error\" :dialog=\"$data\" icon=\"trash\">\n                            {{ __('crud.remove') }}\n                        </x-dropdowns.item>\n                    </div>\n                </div>\n                @endif\n                <a class=\"btn2 btn-primary btn-sm\"\n                   data-toggle=\"dialog\"\n                   data-url=\"{{ route('campaign_dashboards.create', $campaign) }}\"\n                >\n                    <x-icon class=\"plus\" />\n                    <span class=\"hidden sm:inline\">{{ __('dashboard.dashboards.actions.new') }}</span>\n                </a>\n            </div>\n            @endif\n        </div>\n\n        @empty($dashboard)\n        <x-helper>\n            <p>{!! __('dashboard.dashboards.default.text', ['campaign' => $campaign->name]) !!}</p>\n        </x-helper>\n        @endif\n\n        @include('partials.errors')\n\n        <x-tutorial code=\"dashboard_setup\">\n            <p>\n                {!! __('dashboard.setup.tutorial.text', [\n'blog' => '<a href=\"https://blog.kanka.io/2020/09/20/how-to-style-your-kanka-campaign-dashboard/\" class=\"text-link\">' . __('dashboard.setup.tutorial.blog') . '</a>',\n]) !!}\n            </p>\n        </x-tutorial>\n\n        <div class=\"campaign-dashboard-widgets\">\n            <div class=\"grid grid-cols-12 gap-2 md:gap-5\" id=\"widgets\" data-url=\"{{ route('dashboard.reorder', $campaign) }}\">\n                @if (empty($dashboard))\n                <div class=\"col-span-12\">\n                    <div class=\"{{ $widgetClass }} border-dashboard widget-campaign cover-background h-auto p-4 \" @if($campaign->header_image) style=\"background-image: url({{ Img::crop(1200, 400)->url($campaign->header_image) }})\" @endif\n                        data-toggle=\"dialog\"\n                         data-url=\"{{ route('campaigns.dashboard-header.edit', $campaign) }}\"\n                    >\n                        <div class=\"{{ $overlayClass }} backdrop-blur-sm bg-box opacity-60\">\n                            <span class=\"widget-type\">{{ __('dashboards/widgets/campaign.name') }}</span>\n                        </div>\n                    </div>\n                </div>\n                @endif\n                @foreach ($widgets as $widget)\n                    @includeWhen($widget->visible(), '.dashboard._widget')\n                @endforeach\n\n                <div class=\"col-span-4 widget rounded-xl h-28 hover:border-primary text-primary transition-all duration-150 cursor-pointer border-dashed border-2 py-6\" data-toggle=\"dialog\" data-url=\"{{ route('campaign_dashboard_widgets.index', [$campaign, 'dashboard' => $dashboard]) }}\" data-tooltip data-title=\"{{ __('dashboards/setup.tooltips.add') }}\">\n                    <div class=\"text-md xl:text-xl flex gap-2 items-center justify-center p-2 align-middle h-full\">\n                        <x-icon class=\"plus\" />\n                        <span class=\"uppercase\">{{ __('dashboards/setup.actions.add') }}</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </x-grid>\n\n    @include('editors.editor', ['dialogsInBody' => true])\n@endsection\n\n@section('scripts')\n    @vite('resources/js/dashboard.js')\n@endsection\n\n@section('styles')\n    @vite('resources/css/dashboard.css')\n@endsection\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_actions.blade.php",
    "content": "@can ('follow', $campaign)\n    <button id=\"campaign-follow\" class=\"btn2 btn-sm btn-outline hidden\" data-id=\"{{ $campaign->id }}\"\n            data-following=\"{{ $campaign->isFollowing() ? true : false }}\"\n            data-follow=\"{{ __('dashboard.actions.follow') }}\"\n            data-unfollow=\"{{ __('dashboard.actions.unfollow') }}\"\n            data-url=\"{{ route('campaign.follow', $campaign) }}\"\n            data-toggle=\"tooltip\" data-title=\"{{ __('dashboard.helpers.follow') }}\"\n            data-placement=\"bottom\"\n    >\n        <x-icon class=\"fa-solid fa-star\" />\n        <span id=\"campaign-follow-text\"></span>\n    </button>\n@endcan\n@can('apply', $campaign)\n    <button id=\"campaign-apply\" class=\"btn2 btn-sm btn-outline\" data-id=\"{{ $campaign->id }}\"\n            data-url=\"{{ route('campaign.apply', $campaign) }}\"\n            data-toggle=\"dialog\" data-title=\"{{ __('dashboard.helpers.join') }}\"\n            data-target=\"apply-dialog\"\n            data-placement=\"bottom\"\n    >\n        <x-icon class=\"fa-regular fa-door-open\" />\n        {{ __('dashboard.actions.join') }}\n    </button>\n@endcan\n\n@cannot('update', $campaign)\n    @if(!empty($dashboards))\n        <div class=\"dropdown \">\n            <button type=\"button\" class=\"btn2 btn-sm btn-outline\" data-dropdown aria-expanded=\"false\">\n                <x-icon class=\"fa-regular fa-th-large\" />\n            </button>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                @if (!empty($dashboard))\n                    <x-dropdowns.item :link=\"route('dashboard', [$campaign, 'dashboard' => 'default'])\" icon=\"fa-regular fa-home\">\n                        {{ __('dashboard.dashboards.default.title')}}\n                    </x-dropdowns.item>\n                @endif\n                @foreach ($dashboards as $dash)\n                    @if (!empty($dashboard) && $dash->id == $dashboard->id)\n                        @continue\n                    @endif\n                    <x-dropdowns.item :link=\"route('dashboard', [$campaign, 'dashboard' => $dash->id])\" icon=\"fa-regular fa-th-large\">\n                        {!! $dash->name !!}\n                    </x-dropdowns.item>\n                @endforeach\n\n                @can('dashboard', $campaign)\n                    <x-dropdowns.divider />\n\n                    <x-dropdowns.item :link=\"route('dashboard.setup', !empty($dashboard) ? [$campaign, 'dashboard' => $dashboard->id] : [$campaign])\" icon=\"cog\">\n                        {{ __('dashboard.actions.customise') }}\n                    </x-dropdowns.item>\n                @endcan\n            </div>\n        </div>\n    @else\n        @can('dashboard', $campaign)\n            <a href=\"{{ route('dashboard.setup', [$campaign]) }}\" class=\"btn2 btn-sm btn-outline\">\n                <x-icon class=\"cog\" /> {{ __('dashboard.actions.customise') }}\n            </a>\n        @endcan\n    @endif\n@endcannot\n\n@can('update', $campaign)\n    <div class=\"dropdown\">\n        <button class=\"btn2 btn-sm btn-outline\" data-dropdown aria-expanded=\"false\">\n            <x-icon class=\"fa-regular fa-ellipsis-h\" />\n        </button>\n        <div class=\"dropdown-menu hidden\" role=\"menu\">\n\n            <x-dropdowns.section>\n                @if ($dashboard)\n                    {!! $dashboard->name !!}\n                @else\n                    {{ __('dashboard.dashboards.default.title') }}\n                @endif\n            </x-dropdowns.section>\n\n            <x-dropdowns.item :link=\"route('dashboard.setup', !empty($dashboard) ? [$campaign, 'dashboard' => $dashboard->id] : [$campaign])\" icon=\"cog\">\n                {{ __('dashboard.actions.customise') }}\n            </x-dropdowns.item>\n\n            @if(auth()->user()->isAdmin())\n                <x-dropdowns.section>\n                    {{ __('campaigns.panels.sharing') }}\n                </x-dropdowns.section>\n                <x-dropdowns.item\n                    link=\"{{ route('campaign.share.setup', $campaign) }}\"\n                    :dialog=\"route('campaign.share.setup', $campaign)\"\n                    icon=\"fa-regular fa-share-nodes\"\n                >\n                    {{ __('campaigns/share.title') }}\n                </x-dropdowns.item>\n            @endif\n            @if (!empty($dashboard) || !empty($dashboards))\n            <x-dropdowns.section>\n                {{ __('dashboards/setup.sections.switch') }}\n            </x-dropdowns.section>\n            @endif\n            @if (!empty($dashboard))\n                <x-dropdowns.item :link=\"route('dashboard', [$campaign, 'dashboard' => 'default'])\" icon=\"fa-regular fa-home\">\n                    {{ __('dashboard.dashboards.default.title')}}\n                </x-dropdowns.item>\n            @endif\n            @foreach ($dashboards as $dash)\n                @if (!empty($dashboard) && $dash->id == $dashboard->id)\n                    @continue\n                @endif\n                <x-dropdowns.item :link=\"route('dashboard', [$campaign, 'dashboard' => $dash->id])\" icon=\"fa-regular fa-th-large\">\n                    {!! $dash->name !!}\n                </x-dropdowns.item>\n            @endforeach\n            <x-dropdowns.section>\n                {{ __('campaigns.show.tabs.management') }}\n            </x-dropdowns.section>\n\n            <x-dropdowns.item :link=\"route('campaigns.edit', $campaign)\" icon=\"pencil\">\n                {{ __('campaigns.show.actions.edit') }}\n            </x-dropdowns.item>\n\n            <x-dropdowns.item :link=\"route('campaign_users.index', $campaign)\" icon=\"fa-regular fa-users\">\n                {{ __('campaigns.show.tabs.members') }}\n            </x-dropdowns.item>\n            <x-dropdowns.item :link=\"route('campaign_roles.index', $campaign)\" icon=\"fa-regular fa-user-shield\">\n                {{ __('campaigns.show.tabs.roles') }}\n            </x-dropdowns.item>\n\n            <x-dropdowns.item :link=\"route('campaign.modules', $campaign)\" icon=\"fa-regular fa-floppy-disks\">\n                {{ __('campaigns/categories.tab') }}\n            </x-dropdowns.item>\n        </div>\n    </div>\n@endcan\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_calendar.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Calendar $calendar\n * @var \\App\\Models\\EntityEvent $event\n */\n$entity = $widget->entity;\n$calendar = $entity->child;\n// Todo: move this to the query\nif (empty($calendar) || $calendar->missingDetails()) {\n    return;\n}\n?>\n<x-box padding=\"0\" class=\"widget-calendar {{ $widget->customClass($campaign) }}\" id=\"dashboard-widget-{{ $widget->id }}\">\n    <x-widgets.previews.head :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\" />\n    <div class=\"p-4\" data-render=\"{{ route('dashboard.calendar.render', [$campaign, $widget->id]) }}\" data-id=\"{{ $widget->id }}\">\n        <div class=\"text-center py-10 text-2xl\" id=\"widget-loading-{{ $widget->id }}\">\n            <x-icon class=\"load\" />\n        </div>\n        <div id=\"widget-body-{{ $widget->id }}\"></div>\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_campaign.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */ ?>\n@section('content-header')\n<div\n    class=\"campaign-header cover-background p-4 relative z-821 @if(!empty($campaign->header_image))campaign-imaged-header px-4 md:px-10 py-6 md:py-14 pt-12 md:pt-24 @else no-header @endif \"\n    @if(!empty($campaign->header_image)) style=\"background-image: url('{{ Img::crop(1200, 400)->url($campaign->header_image) }}')\" @endif>\n\n    <div class=\"campaign-header-content bg-base-100 bg-opacity-60 max-w-7xl mx-auto p-4 @if(!empty($campaign->header_image)) backdrop-blur-lg rounded @else rounded-2xl  @endif\">\n        <div class=\"campaign-content flex flex-col gap-2 \">\n            <div class=\"campaign-head flex gap-2 justify-between items-center\">\n                <div class=\"truncate\">\n                    <a href=\"{{ route('overview', $campaign) }}\" title=\"{!! $campaign->name !!}\" class=\"campaign-title text-2xl text-link\">\n                        {!! $campaign->name !!}\n                    </a>\n                </div>\n                <div class=\"flex gap-2 action-bar\">\n                    @include('dashboard.widgets._actions')\n                </div>\n            </div>\n            @if ($campaign->hasPreview())\n                <div class=\"preview entity-content\">\n                    {!! $campaign->preview() !!}\n                </div>\n            @endif\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_gallery.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n */\n?>\n<livewire:widgets.gallery-carousel\n    :campaign=\"$campaign\"\n    :widget=\"$widget\"/>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_header.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\CampaignDashboardWidget $widget\n*/\n?>\n{{-- Check if the header is linked to an entity\n     and if the user has read permissions on it --}}\n@if ($widget->entity && !$widget->entity->isMissingChild())\n    <a href=\"{{ $widget->entity->url() }}\">\n        <{{ $widget->customSize() }} class=\"text-2xl widget-header-text text-center my-4  {{ $widget->customClass($campaign) }}\" id=\"dashboard-widget-{{ $widget->id }}\">\n            {{ $widget->conf('text') }}\n        </{{ $widget->customSize() }}>\n    </a>\n@else\n    <{{ $widget->customSize() }} class=\"widget-header-text text-center my-4 {{ $widget->customClass($campaign) }} text-2xl \" id=\"dashboard-widget-{{ $widget->id }}\">\n        {{ $widget->conf('text') }}\n    </{{ $widget->customSize() }}>\n@endif\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_help.blade.php",
    "content": "<x-box class=\"widget-help\" id=\"dashboard-widget-{{ $widget->id }}\">\n    <span class=\"widget-title block text-lg mb-4\">\n        {{ __('dashboards/widgets/help.title') }}\n    </span>\n    <div class=\"\">\n        <ul class=\"flex flex-col gap-2 lg:gap-3 xl:gap-4 list-none m-0 px-1\">\n        <li>\n            <a href=\"https://docs.kanka.io/\" class=\"text-link\">\n               <x-icon class=\"fa-regular fa-book\" />\n               {{ __('footer.documentation') }}\n            </a>\n        </li>\n        <li>\n            <a href=\"{{ \\App\\Facades\\Domain::toFront('kb') }}\" class=\"text-link\">\n               <x-icon class=\"fa-regular fa-question-circle\" />\n               {{ __('footer.kb') }}\n            </a>\n        </li>\n        <li>\n            <a href=\"{{ \\App\\Facades\\Domain::toFront('go/discord') }}\" class=\"text-link\">\n               <x-icon class=\"fa-brands fa-discord\" />\n               Discord\n            </a>\n        </li>\n            <li>\n                <a href=\"{{ \\App\\Facades\\Domain::toFront('campaigns') }}\" class=\"text-link\">\n                    <x-icon class=\"fa-regular fa-globe\" />\n                    {{ __('footer.public-campaigns') }}\n                </a>\n            </li>\n            <li>\n                <a href=\"{{ route('settings.subscription') }}\" class=\"text-link\">\n                    <x-icon class=\"fa-regular fa-gem\" />\n                    {{ trim(__('misc.ads.member'), '.') }}\n                </a>\n            </li>\n        </ul>\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_join.blade.php",
    "content": "<x-box class=\"widget-join\" id=\"dashboard-widget-{{ $widget->id }}\">\n    <span class=\"widget-title block text-lg mb-4\">\n        {{ __('dashboards/widgets/join.title') }}\n    </span>\n    <div class=\"entity-content\" id=\"players-wanted\">\n        <span>\n            {!! $campaign->getFilter(\\App\\Enums\\CampaignFilterType::Intro) !!}\n        </span>\n\n        <span>\n            <h4 class=\"m-0 text-lg\">{{ __('campaigns/applications.fields.schedule') }}</h4>\n            {!! $campaign->getFilter(\\App\\Enums\\CampaignFilterType::Schedule) !!}, {!! $campaign->getFilter(\\App\\Enums\\CampaignFilterType::Timezone) !!}\n        </span>\n\n        <span>\n            <h4 class=\"m-0 text-lg\">{{ __('campaigns/applications.fields.player_count') }}</h4>\n            <p>Current players: {{$campaign->users()->count() }}</p>\n            <p>Max players: {{ $campaign->getFilter(\\App\\Enums\\CampaignFilterType::PlayerCount)}}</p>\n        </span>\n\n        <br/>\n        @guest\n            <a href=\"{{ route('register', ['next' => 'dashboard.' . $campaign->slug]) }}\" class=\"btn2 btn-block btn-primary\">\n                <x-icon class=\"fa-regular fa-door-open\" />\n                {{ __('dashboards/widgets/join.register') }}\n            </a>\n        @endguest\n        @can('apply', $campaign)\n            <button id=\"campaign-apply\" class=\"btn2 btn-block btn-primary\" data-id=\"{{ $campaign->id }}\"\n                    data-url=\"{{ route('campaign.apply', $campaign) }}\"\n                    data-toggle=\"dialog\" data-title=\"{{ __('dashboard.helpers.join') }}\"\n                    data-target=\"apply-dialog\"\n                    data-placement=\"bottom\"\n            >\n                <x-icon class=\"fa-regular fa-door-open\" />\n                @if(auth()->user()->applications()->where('campaign_id', $campaign->id)->exists())\n                    {{ __('dashboards/widgets/join.update') }}\n                @else\n                    {{ __('dashboards/widgets/join.apply') }}\n                @endif\n\n            </button>\n        @endcan\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_onboarding.blade.php",
    "content": "<x-box class=\"widget-welcome\" id=\"dashboard-widget-{{ $widget->id }}\">\n    <div class=\"entity-content\" id=\"getting-started\">\n        <getting-started\n            api=\"{{ route('campaign.widgets.getting-started', [$campaign]) }}\"\n            name=\"{{ __('dashboards/widgets/onboarding.name') }}\"\n        ></getting-started>\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_preview.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var \\App\\Models\\Entity $entity\n */\n$entity = $entity ?? $widget->entity;\n\nif (empty($entity) || $entity->isMissingChild()) {\n    return;\n}\n\n$specificPreview = 'dashboard.widgets.previews.' . $entity->entityType->code;\n$customName = !empty($widget->conf('text')) ? str_replace('{name}', $entity->name, $widget->conf('text')) : null;\n\n\\App\\Facades\\Dashboard::add($entity);\nforeach ($entity->mentions as $mention) {\n    if (!$mention->isEntity() || !$mention->target) {\n        continue;\n    }\n    \\App\\Facades\\Mentions::preloadEntity($mention->target);\n}\n?>\n<x-box padding=\"0\" class=\"widget-preview {{ $widget->customClass($campaign) }} entity-{{ $entity->id }}\" id=\"dashboard-widget-{{ $widget->id }}\">\n@if(view()->exists($specificPreview))\n    @include($specificPreview, ['entity' => $entity])\n@else\n        <x-widgets.previews.head :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\" />\n        <x-widgets.previews.body :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\" />\n@endif\n</x-box>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_random.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n */\n?>\n<livewire:widgets.random-entity\n    :campaign=\"$campaign\"\n    :widget=\"$widget\"/>\n\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_recent.blade.php",
    "content": "@inject('moduleService', 'App\\Services\\Campaign\\ModuleService')\n\n<?php\nuse Illuminate\\Support\\Str;\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var \\App\\Models\\Tag $tag\n */\n$entityType = $widget->conf('entity');\n$entities = $widget->entities();\nif (($widget->conf('singular'))) {\n    $entityString = !empty($entityType) ? (!$widget->conf('singular') ? $entityType : $moduleService->singular($entityType, 'entities.' . Str::plural($entityType))) : null;\n\n    if ($entities->count() > 0) {\n        $entity = $entities[0];\n        if (!$entity->isMissingChild()) {\n            ?>\n            @include('dashboard.widgets._preview', [\n    'entity' => $entity,\n])\n            <?php\n            return;\n        }\n    }\n} else {\n    $entityString = !empty($entityType) ? ($widget->conf('singular') ? $entityType : $moduleService->plural($entityType, 'entities.' . Str::plural($entityType))) : null;\n}\n?>\n<x-box padding=\"0\" class=\"widget-list {{ $widget->customClass($campaign) }}\" id=\"dashboard-widget-{{ $widget->id }}\">\n    <h4 class=\"text-lg mb-3 px-4 pt-4 flex gap-2\">\n        <span class=\"grow\">\n            <x-widgets.filteredLink :campaign=\"$campaign\" :widget=\"$widget\" :entityString=\"$entityString\" />\n        </span>\n\n        @if (!empty($widget->tags))\n            <span class=\"flex-none flex gap-1\">\n                @foreach ($widget->tags as $tag)\n                    <x-tags.bubble :tag=\"$tag\" :campaign=\"$campaign\" />\n                @endforeach\n            </span>\n        @endif\n    </h4>\n    @if (!empty($widget->conf('singular')))\n    <div class=\"widget-body widget-recent-body p-4\">\n        <p class=\"italic\">{{ __('search.lookup.empty') }}</p>\n    </div>\n    @else\n    <div class=\"widget-recent-list overflow-auto px-4 pb-4 max-h-[400px]\">\n        @include('dashboard.widgets._recent_list')\n    </div>\n    @endif\n</x-box>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_recent_list.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity[]|\\Illuminate\\Pagination\\LengthAwarePaginator $entities */?>\n<div>\n@livewire('entity-listing', ['widget' => $widget, 'campaign' => $campaign])\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_selection.blade.php",
    "content": "<?php use App\\Enums\\Widget; ?>\n@php $newWidgetListClass = 'rounded-xl border cursor-pointer btn-outline flex gap-2 p-2 px-4 items-center'; @endphp\n<x-grid type=\"1/1\">\n    <x-helper>\n        @if ($dashboard)\n            <p>{!! __('dashboard.widgets.create.helper', ['name' => $dashboard->name]) !!}</p>\n        @else\n            <p>{!! __('dashboard.widgets.create.helper-default') !!}</p>\n        @endif\n    </x-helper>\n    <div class=\"flex flex-col gap-2 xl:gap-4\">\n        <x-dashboards.widgets.selection\n            :widget=\"Widget::Recent\"\n            :campaign=\"$campaign\"\n            :dashboard=\"$dashboard\"\n            icon=\"fa-list\"\n        ></x-dashboards.widgets.selection>\n\n        <x-dashboards.widgets.selection\n            :widget=\"Widget::Preview\"\n            :campaign=\"$campaign\"\n            :dashboard=\"$dashboard\"\n            icon=\"fa-align-justify\"\n        ></x-dashboards.widgets.selection>\n\n        @php $calendarModule = \\App\\Models\\EntityType::default()->where('code', 'calendar')->first(); @endphp\n        <x-dashboards.widgets.selection\n            :widget=\"Widget::Calendar\"\n            :campaign=\"$campaign\"\n            :dashboard=\"$dashboard\"\n            icon=\"{{ $calendarModule->icon() }}\"\n        ></x-dashboards.widgets.selection>\n\n        <x-dashboards.widgets.selection\n            :widget=\"Widget::Header\"\n            :campaign=\"$campaign\"\n            :dashboard=\"$dashboard\"\n            icon=\"fa-heading\"\n        ></x-dashboards.widgets.selection>\n\n        <x-dashboards.widgets.selection\n            :widget=\"Widget::Random\"\n            :campaign=\"$campaign\"\n            :dashboard=\"$dashboard\"\n            icon=\"fa-dice-d20\"\n        ></x-dashboards.widgets.selection>\n        <x-dashboards.widgets.selection\n            :widget=\"Widget::Gallery\"\n            :campaign=\"$campaign\"\n            :dashboard=\"$dashboard\"\n            icon=\"fa-images\"\n        ></x-dashboards.widgets.selection>\n        @if($campaign->isOpen())\n            <x-dashboards.widgets.selection\n                :widget=\"Widget::Join\"\n                :campaign=\"$campaign\"\n                :dashboard=\"$dashboard\"\n                icon=\"fa-door-open\"\n            ></x-dashboards.widgets.selection>\n        @endif\n        @if(!empty($dashboard))\n            <x-dashboards.widgets.selection\n                :widget=\"Widget::Campaign\"\n                :campaign=\"$campaign\"\n                :dashboard=\"$dashboard\"\n                icon=\"fa-th-list\"\n            ></x-dashboards.widgets.selection>\n        @endif\n        @if ($withOnboarding)\n        <x-dashboards.widgets.selection\n            :widget=\"Widget::Onboarding\"\n            :campaign=\"$campaign\"\n            :dashboard=\"$dashboard\"\n            icon=\"fa-calendar-check\"\n        ></x-dashboards.widgets.selection>\n        @endif\n        @if ($withHelp)\n        <x-dashboards.widgets.selection\n            :widget=\"Widget::Help\"\n            :campaign=\"$campaign\"\n            :dashboard=\"$dashboard\"\n            icon=\"fa-comments\"\n        ></x-dashboards.widgets.selection>\n        @endif\n    </div>\n</x-grid>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/_welcome.blade.php",
    "content": "<x-box class=\"widget-welcome\" id=\"dashboard-widget-{{ $widget->id }}\">\n    <span class=\"widget-title block text-lg mb-4\">\n        {{ __('dashboards/widgets/welcome.title', ['kanka' => config('app.name')]) }}\n    </span>\n    <div class=\" entity-content\">\n    <p>\n        {!! __('dashboards/widgets/welcome.intros.1', [\n'user' => auth()->check() ? '<strong>' . auth()->user()->name . '</strong>' : __('crud.users.unknown'),\n'characters' => '<a href=\"' . route('characters.index', [$campaign]) . '\" class=\"text-link\">' . __('entities.characters') . '</a>',\n'locations' => '<a href=\"' . route('locations.index', [$campaign]) . '\" class=\"text-link\">' . __('entities.locations') . '</a>',\n]) !!}\n    </p>\n\n    <p>\n        {!! __('dashboards/widgets/welcome.intros.2', [\n            'new-entity' => '<a class=\"btn2 btn-primary btn-xs\" href=\"#\" tabindex=\"0\" role=\"button\" data-pulse=\".quick-creator-button\" data-content=\"' . __('dashboards/widgets/welcome.focus.text') . '\">\n                <i class=\"fa-regular fa-plus\" aria-hidden=\"true\"></i> ' . __('crud.create') . '\n            </a>',\n            'letter' => '<kbd>N</kbd>',\n            'characters' => '<span class=\"badge border select-none flex items-center gap-2\"><i class=\"fa-regular fa-user\" aria-hidden=\"true\"></i> ' . __('entities.character') . '</span>',\n            'entities' => '<a target=\"_blank\" href=\"https://docs.kanka.io/en/latest/entries/overview.html\" class=\"text-link\">' . __('entities.entries') . ' <i class=\"fa-regular fa-external-link\" aria-hidden=\"true\"></i></a>',\n        ]) !!}\n    </p>\n    <p class=\"font-bold\">\n        {!! __('dashboards/widgets/welcome.intros.3', [\n]) !!}\n    </p>\n\n    <ul class=\"flex flex-col gap-2\">\n        <li class=\"\">\n            {!! __('dashboards/widgets/welcome.tricks.1', [\n    'code' => '<code>@</code>',\n    'mention' => '<a target=\"_blank\" href=\"https://docs.kanka.io/en/latest/features/mentions.html\" class=\"text-link\">' . __('dashboards/widgets/welcome.tricks.mention') . ' <i class=\"fa-regular fa-external-link\" aria-hidden=\"true\"></i></a>',\n]) !!}\n        </li>\n        <li class=\"\">\n            {!! __('dashboards/widgets/welcome.tricks.2', [\n'world' => '<a href=\"' . route('overview', $campaign) . '\" class=\"text-link\"><i class=\"fa-regular fa-cog\" aria-hidden=\"true\"></i> ' . __('sidebar.settings') . '</a>',\n'edit' => '<span class=\"badge border select-none flex items-center gap-2\"><i class=\"fa-regular fa-pencil\" aria-hidden=\"true\"></i> ' . __('campaigns.show.actions.edit') . '</span>',\n]) !!}\n        </li>\n        <li class=\"\">\n            {!! __('dashboards/widgets/welcome.tricks.3', [\n    'posts' => '<a target=\"_blank\" href=\"https://docs.kanka.io/en/latest/features/articles.html\" class=\"text-link\">' . __('entities.articles') . ' <i class=\"fa-regular fa-external-link\" aria-hidden=\"true\"></i></a>']) !!}\n        </li>\n        <li class=\"\">\n            {!! __('dashboards/widgets/welcome.tricks.4', [\n 'world' => '<a href=\"' . route('overview', $campaign) . '\" class=\"text-link\"><i class=\"fa-regular fa-cog\" aria-hidden=\"true\"></i> ' . __('sidebar.settings') . '</a>',\n'members' => '<a href=\"' . route('campaign_users.index', $campaign) . '\" class=\"text-link\">' . __('campaigns.show.tabs.members') . '</a>',\n]) !!}\n        </li>\n        <li class=\"\">\n            {!! __('dashboards/widgets/welcome.tricks.5', [\n'button' => '<span class=\"badge border select-none flex items-center gap-2\"><i class=\"fa-regular fa-cog\" aria-hidden=\"true\"></i> ' . __('dashboard.actions.customise') . '</span>'\n]) !!}\n        </li>\n    </ul>\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/calendar/_reminder.blade.php",
    "content": "<?php /** @var \\App\\Models\\Reminder $reminder */?>\n<?php\nif ($reminder->remindable instanceof \\App\\Models\\Post && !$reminder->remindable->entity) {\n    return;\n}\n?>\n<li data-ago=\"{{ isset($future) ? $reminder->inDays() : $reminder->daysAgo() }}\" class=\"flex gap-2 justify-between overflow-hidden\">\n    <div class=\"truncate\">\n        @if ($reminder->isPost())\n            <x-entity-link :entity=\"$reminder->remindable->entity\" :campaign=\"$campaign\">\n                {!! $reminder->remindable->name !!} ({!! $reminder->remindable->entity->name !!})\n            </x-entity-link>\n        @else\n            <x-entity-link :entity=\"$reminder->remindable\" :campaign=\"$campaign\">\n                {!! $reminder->remindable->name !!}\n            </x-entity-link>\n        @endif\n        @if (config('app.debug'))\n            @if (isset($future))\n                <span class=\"text-xs text-neutral-content\">({{ $reminder->date() }}, in {{ $reminder->inDays() }} days)</span>\n            @else\n                <span class=\"text-xs text-neutral-content\">({{ $reminder->date() }}, {{ $reminder->daysAgo() }} days ago)</span>\n            @endif\n        @endif\n    </div>\n\n    <div class=\"flex gap-1 items-center\">\n        @if (!empty($reminder->comment))\n            <x-icon class=\"fa-regular fa-comment\" tooltip title=\"{{ $reminder->comment }}\" />\n        @endif\n        @if ($reminder->is_recurring)\n            <x-icon class=\"fa-regular fa-arrows-rotate\" title=\"{{ __('calendars.fields.is_recurring') }}\" tooltip />\n        @endif\n        <x-icon class=\"fa-regular fa-calendar\" title=\"{{ $reminder->readableDate() }}\" tooltip />\n    </div>\n</li>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/calendar/body.blade.php",
    "content": "@inject ('reminderService', 'App\\Services\\Calendars\\ReminderService')\n<?php\n/**\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Calendar $calendar\n * @var \\App\\Models\\EntityEvent $event\n * @var \\App\\Models\\EntityEvent $reminder\n * @var \\App\\Models\\EntityEvent $event\n * @var \\App\\Services\\Calendars\\ReminderService $reminderService\n */\n$entity = $widget->entity;\nif (empty($entity)) {\n    return;\n}\n$calendar = $calendar ?? $entity->child;\n\n$upcomingEvents = $reminderService->calendar($calendar)->upcoming();\n$previousEvents = $reminderService->past();\n//$previousEvents = new \\Illuminate\\Support\\Collection();\n\n// Get the current day's weather effect.\n$weather = $calendar->calendarWeather()\n    ->year($calendar->currentYear())\n    ->month($calendar->currentMonth())\n    ->where('day', $calendar->currentDay())\n    ->first();\n\n$daysService = new \\App\\Services\\Calendars\\DaysService();\n$totalDays = $daysService->calendar($calendar)\n    ->intercalary(true)\n    ->year($calendar->currentYear())\n    ->month($calendar->currentMonth())\n    ->daysToDate();\n\n$moonService = new \\App\\Services\\Calendars\\MoonService();\n$moonService->calendar($calendar);\n\n$moonService->build(\n    $totalDays,\n    $calendar->daysInYear()\n);\n$currentMoons = $moonService->get($calendar->currentDay());\n\n$weekdays = $calendar->weekdays();\n$weekdayCount = count($weekdays);\n$currentWeekdayName = null;\nif ($weekdayCount > 0) {\n    $weekdayIndex = (($totalDays + $calendar->start_offset + $calendar->currentDay() - 1) % $weekdayCount + $weekdayCount) % $weekdayCount;\n    $currentWeekdayName = $weekdays[$weekdayIndex] ?? null;\n}\n?>\n<div class=\"flex flex-col gap-2\">\n\n    <div class=\"current-date text-center text-lg flex items-center justify-center gap-2\" id=\"widget-date-{{ $widget->id }}\">\n        @can('update', $entity)\n            <a href=\"#\" class=\"widget-calendar-switch text-link\" data-url=\"{{ route('dashboard.calendar.sub', [$campaign, $widget]) }}\" data-widget=\"{{ $widget->id }}\"  data-toggle=\"tooltip\" data-title=\"{{ __('dashboard.widgets.calendar.actions.previous') }}\" role=\"button\">\n                <x-icon class=\"fa-regular fa-chevron-circle-left\" />\n                <span class=\"sr-only\">{{ __('dashboard.widgets.calendar.actions.previous') }}</span>\n            </a>\n            <span>{{ $calendar->niceDate() }}</span>\n\n            <a href=\"#\" class=\"widget-calendar-switch text-link\" data-url=\"{{ route('dashboard.calendar.add', [$campaign, $widget]) }}\" data-widget=\"{{ $widget->id }}\"  data-toggle=\"tooltip\" data-title=\"{{ __('dashboard.widgets.calendar.actions.next') }}\" role=\"button\">\n                <x-icon class=\"fa-regular fa-chevron-circle-right\" />\n                <span class=\"sr-only\">{{ __('dashboard.widgets.calendar.actions.next') }}</span>\n            </a>\n        @else\n            {{ $calendar->niceDate() }}\n        @endcan\n\n        @if (!empty($currentMoons))\n            <div class=\"flex gap-1 moons\">\n                @foreach ($currentMoons as $moon)\n                    <i\n                        class=\"{{ $moon['class'] }} text-{{ $moon['colour'] }}\"\n                        data-id=\"{{ $moon['id'] }}\"\n                        data-toggle=\"tooltip\"\n                        data-title=\"{{ __('calendars.show.moon_' . $moon['type'], ['moon' => $moon['name']]) }}\"\n                    ></i>\n                @endforeach\n            </div>\n        @endif\n\n    </div>\n\n    @if ($currentWeekdayName)\n        <div class=\"text-center text-muted\">\n            {{ $currentWeekdayName }}\n        </div>\n    @endif\n\n    @if ($weather)\n        <div class=\"col-span-2 text-center\">\n            <div class=\"weather weather-{{ $weather->weather }}\" data-html=\"true\" data-toggle=\"tooltip\" data-title=\"{!! $weather->tooltip() !!}\">\n                <x-icon class=\"fa-solid fa-{{ $weather->weather }}\" />\n                {{ $weather->weatherName() }}\n            </div>\n        </div>\n    @endif\n\n    <x-grid>\n        @if ($previousEvents->isNotEmpty())\n            <div class=\"flex flex-col gap-2 @if ($upcomingEvents->isEmpty()) col-span-2 @endif\">\n                <div class=\"text-lg\">\n                    {{ __('dashboard.widgets.calendar.previous_events') }}\n                    <a href=\"//docs.kanka.io/en/latest/guides/dashboard.html#known-limitations\"  class=\"text-link\" data-toggle=\"tooltip\" data-title=\"{{ __('helpers.calendar-widget.info') }}\">\n                        <x-icon class=\"question\" />\n                        <span class=\"sr-only\">{{ __('helpers.calendar-widget.info') }}</span>\n                    </a>\n                </div>\n                <ul class=\"style-none p-0\">\n                    @foreach ($previousEvents->take(5) as $reminder)\n                        @includeWhen($reminder->remindable, 'dashboard.widgets.calendar._reminder')\n                    @endforeach\n                </ul>\n            </div>\n        @endif\n\n        @if ($upcomingEvents->isNotEmpty())\n            <div class=\"flex flex-col gap-2 @if ($previousEvents->isEmpty()) col-span-2 @endif\">\n                <div class=\"text-lg\">\n                    {{ __('dashboard.widgets.calendar.upcoming_events') }}\n                    <a href=\"//docs.kanka.io/en/latest/guides/dashboard.html#known-limitations\"  class=\"text-link\" data-toggle=\"tooltip\" data-title=\"{{ __('helpers.calendar-widget.info') }}\">\n                        <x-icon class=\"question\" />\n                        <span class=\"sr-only\">{{ __('helpers.calendar-widget.info') }}</span>\n                    </a>\n                </div>\n                <ul class=\"style-none p-0\">\n                    @foreach ($upcomingEvents->take(5) as $reminder)\n                        @includeWhen($reminder->remindable, 'dashboard.widgets.calendar._reminder', ['future' => true])\n\n                    @endforeach\n                </ul>\n            </div>\n        @endif\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_boosted.blade.php",
    "content": "<div class=\"flex gap-2 items-center align-center\">\n    <div class=\"flex-0\">\n        @include ('partials.boost_icon')\n    </div>\n    <div>\n        <p class=\"\">{!! __('callouts.premium.multiple', ['campaign' => $campaign->name]) !!}</p>\n\n        @can('boost', auth()->user())\n            <a href=\"{{ route('settings.premium', ['campaign' => $campaign]) }}\" class=\"btn2 bg-boost text-white btn-sm\">\n                {!! __('settings/premium.actions.unlock', ['campaign' => $campaign->name]) !!}\n            </a>\n        @else\n            <a href=\"{{ \\App\\Facades\\Domain::toFront('premium') }}\" class=\"btn2 bg-boost text-white btn-sm\">\n                {!! __('callouts.premium.learn-more') !!}\n            </a>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_calendar.blade.php",
    "content": "@php $boosted = $campaign->boosted() @endphp\n<x-grid type=\"1/1\">\n    <div class=\"col-span-2\">\n        @include('cruds.fields.entity', [\n'required' => true, 'allowClear' => false, 'allowNew' => false,\n'route' => 'search.calendars'])\n    </div>\n    @include('dashboard.widgets.forms._name')\n\n    @include('dashboard.widgets.forms._width')\n\n    @includeWhen(!empty($dashboards), 'dashboard.widgets.forms._dashboard')\n</x-grid>\n\n<x-widgets.forms.advanced>\n    @includeWhen(!$boosted, 'dashboard.widgets.forms._boosted')\n    @include('dashboard.widgets.forms._class')\n</x-widgets.forms.advanced>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_campaign.blade.php",
    "content": "<x-helper>\n    <p>{{ __('dashboard.widgets.campaign.helper') }}</p>\n</x-helper>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_class.blade.php",
    "content": "<x-forms.field\n    field=\"class\"\n    :label=\"__('dashboard.widgets.fields.class')\"\n    :helper=\"__('dashboard.widgets.helpers.class')\"\n    tooltip\n>\n    <input type=\"text\" name=\"config[class]\" value=\"{{ old('config[class]', $model->config['class'] ?? null) }}\" maxlength=\"191\" class=\"w-full @if (!$boosted) bg-base-200 @endif\" id=\"config[class]\" @if (!$boosted) disabled=\"disabled\" @endif placeholder=\"\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_dashboard.blade.php",
    "content": "<x-forms.field field=\"dashboard\" :label=\"__('dashboard.widgets.fields.dashboard')\">\n    <x-forms.select name=\"dashboard_id\" :options=\"$dashboards\" :selected=\"$source->dashboard_id ?? $model->dashboard_id ?? null\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_display.blade.php",
    "content": "@php\n    $displayOptions = [\n        0 => __('dashboard.widgets.preview.displays.expand'),\n        1 => __('dashboard.widgets.preview.displays.full'),\n        2 => __('entries/tabs.properties'),\n    ];\n@endphp\n<x-forms.field\n    field=\"display\"\n    :label=\"__('dashboard.widgets.preview.fields.display')\">\n    <x-forms.select name=\"config[full]\" :options=\"$displayOptions\" :selected=\"$source->config['full'] ?? $model->config['full'] ?? null\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_gallery.blade.php",
    "content": "@inject('imageModel', 'App\\Models\\Image')\n\n@php\n    $boosted = $campaign->premium();\n\n    $folders = $imageModel::where('campaign_id', $campaign->id)\n        ->where('is_folder', true)\n        ->orderBy('name', 'asc')\n        ->pluck('name', 'id')\n        ->prepend(__('crud.select'), '')\n        ->toArray();\n@endphp\n\n<x-grid>\n    <x-forms.field field=\"gallery-folder\" required :label=\"__('dashboards/widgets/gallery.fields.folder')\">\n        <x-forms.select name=\"config[folder_id]\" :options=\"$folders\" :selected=\"old('config.folder_id', $model->config['folder_id'] ?? null)\" class=\"w-full\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"gallery-show-name\" :label=\"__('dashboards/widgets/gallery.fields.show_name')\">\n        <x-checkbox :text=\"__('dashboards/widgets/gallery.helpers.show_name')\">\n            <input type=\"checkbox\" name=\"config[show_name]\" value=\"1\" @if (old('config[show_name]', isset($model) ? $model->conf('show_name') : false)) checked=\"checked\" @endif id=\"config-show-name\" />\n        </x-checkbox>\n    </x-forms.field>\n\n    @include('dashboard.widgets.forms._name')\n\n    @include('dashboard.widgets.forms._width')\n\n    @includeWhen(!empty($dashboards), 'dashboard.widgets.forms._dashboard')\n</x-grid>\n\n<x-widgets.forms.advanced>\n    @includeWhen(!$boosted, 'dashboard.widgets.forms._boosted')\n    <x-grid>\n        @include('dashboard.widgets.forms._class')\n    </x-grid>\n</x-widgets.forms.advanced>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_header.blade.php",
    "content": "@php $boosted = $campaign->boosted() @endphp\n\n<x-grid type=\"1/1\">\n    @include('dashboard.widgets.forms._name')\n\n    @include('dashboard.widgets.forms._width')\n\n    @include('dashboard.widgets.forms._size')\n\n    @include('cruds.fields.entity', ['label' => __('dashboard.widgets.fields.optional-entity')])\n</x-grid>\n\n\n<x-widgets.forms.advanced>\n    @includeWhen(!$boosted, 'dashboard.widgets.forms._boosted')\n    @include('dashboard.widgets.forms._class')\n</x-widgets.forms.advanced>\n\n\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_header_select.blade.php",
    "content": "<input type=\"hidden\" name=\"config[entity-header]\" value=\"0\" />\n<x-forms.field field=\"header\" :label=\"__('dashboard.widgets.recent.entity-header')\">\n    <x-checkbox :text=\"__('dashboard.widgets.recent.helpers.entity-header')\">\n        <input type=\"checkbox\" name=\"config[entity-header]\" value=\"1\" @if (old('config[entity-header]', isset($model) ? $model->conf('entity-header') : false)) checked=\"checked\" @endif id=\"config-entity-header\" @if (!$boosted) disabled=\"disabled\" @endif />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_help.blade.php",
    "content": "<x-helper>\n    <p>{{ __('dashboards/widgets/help.description') }}</p>\n</x-helper>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_join.blade.php",
    "content": "<x-helper>\n    <p>{{ __('dashboards/widgets/join.description') }}</p>\n</x-helper>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_name.blade.php",
    "content": "<x-forms.field\n    field=\"name\"\n    :label=\"__('dashboard.widgets.fields.name')\"\n    tooltip\n    :helper=\"isset($random) ?__('dashboard.widgets.random.helpers.name') : null\">\n    <input type=\"text\" name=\"config[text]\" value=\"{{ old('config[text]', $model->config['text'] ?? null) }}\" maxlength=\"191\" class=\"w-full\" id=\"config[text]\" placeholder=\"\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_onboarding.blade.php",
    "content": "<x-helper>\n    <p>{{ __('dashboards/widgets/onboarding.description') }}</p>\n</x-helper>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_preview.blade.php",
    "content": "@php $boosted = $campaign->boosted() @endphp\n<x-grid>\n    <div class=\"col-span-2\">\n        @include('cruds.fields.entity', ['required' => true])\n    </div>\n\n    @include('dashboard.widgets.forms._display')\n\n    @include('dashboard.widgets.forms._name')\n\n    @include('dashboard.widgets.forms._width')\n\n    @includeWhen(!empty($dashboards), 'dashboard.widgets.forms._dashboard')\n</x-grid>\n\n\n\n<x-widgets.forms.advanced>\n    @includeWhen(!$boosted, 'dashboard.widgets.forms._boosted')\n\n    <x-grid>\n        @include('dashboard.widgets.forms._header_select')\n        @include('dashboard.widgets.forms._related')\n        @include('dashboard.widgets.forms._class')\n    </x-grid>\n</x-widgets.forms.advanced>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_random.blade.php",
    "content": "@inject('entityTypeService', 'App\\Services\\EntityTypeService')\n\n\n@php\n    $boosted = $campaign->boosted();\n\n    $entityTypes = $entityTypeService\n        ->campaign($campaign)\n        ->exclude([config('entities.ids.bookmark')])\n        ->prepend(['' => __('dashboard.widgets.random.type.all')])\n        ->toSelect();\n@endphp\n\n<x-grid>\n    <x-forms.field field=\"random-type\" required :label=\"__('bookmarks.fields.random_type')\">\n        <x-forms.select name=\"entity_type_id\" :options=\"$entityTypes\" :selected=\"$model->entityType->id ?? null\" class=\"w-full recent-entity-type\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"recent-filters\"\n        :hidden=\"empty($model) || empty($model->entityType)\"\n        :label=\"__('dashboard.widgets.recent.filters')\"\n        tooltip\n        link=\"https://docs.kanka.io/en/latest/guides/dashboard.html\"\n        :helper=\"__('dashboard.widgets.helpers.filters')\">\n        <input type=\"text\" name=\"config[filters]\" value=\"{{ old('config[filters]', $model?->config['filters'] ?? null) }}\" maxlength=\"191\" class=\"w-full\" id=\"config[filters]\" placeholder=\"\" />\n    </x-forms.field>\n\n    @include('dashboard.widgets.forms._name', ['random' => true])\n    @include('dashboard.widgets.forms._display')\n\n    @include('dashboard.widgets.forms._width')\n\n    @include('dashboard.widgets.forms._tags')\n    @includeWhen(!empty($dashboards), 'dashboard.widgets.forms._dashboard')\n</x-grid>\n\n\n<x-widgets.forms.advanced>\n    @includeWhen(!$boosted, 'dashboard.widgets.forms._boosted')\n    <x-grid>\n        @include('dashboard.widgets.forms._header_select')\n        @include('dashboard.widgets.forms._related')\n        @include('dashboard.widgets.forms._class')\n    </x-grid>\n</x-widgets.forms.advanced>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_recent.blade.php",
    "content": "@inject('entityTypeService', 'App\\Services\\EntityTypeService')\n@php\n    $advancedFilters = [\n        '' => '',\n        'unmentioned' => __('dashboard.widgets.recent.advanced_filters.unmentioned'),\n        'mentionless' => __('dashboard.widgets.recent.advanced_filters.mentionless'),\n    ];\n    $boosted = $campaign->boosted();\n@endphp\n\n@php $singularChecked = old('config[singular]', isset($model) ? $model->conf('singular') : false); @endphp\n<x-grid :xdata=\"'{ singular: ' . ($singularChecked ? 'true' : 'false') . ' }'\">\n    <x-forms.field field=\"entity-type\" required :label=\"__('campaigns/categories.tab')\">\n        <x-forms.select name=\"entity_type_id\" :options=\"$entityTypes\" :selected=\"$model->entityType->id ?? null\" class=\"w-full recent-entity-type\" :extra=\"['data-animate' => 'reveal', 'data-target' => '.field-recent-filters']\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"recent-filters\"\n        :label=\"__('dashboard.widgets.recent.filters')\"\n        link=\"https://docs.kanka.io/en/latest/guides/dashboard.html\"\n        tooltip\n        :helper=\"__('dashboard.widgets.helpers.filters')\"\n        :hidden=\"empty($model) || empty($model->entityType)\">\n        <input type=\"text\" name=\"config[filters]\" value=\"{{ old('config[filters]', $model->config['filters'] ?? null) }}\" maxlength=\"191\" class=\"w-full\" id=\"config[filters]\" placeholder=\"\" />\n    </x-forms.field>\n\n    @include('dashboard.widgets.forms._tags')\n\n    <x-forms.field field=\"advanced-filters\" :label=\"__('dashboard.widgets.recent.advanced_filter')\">\n        <x-forms.select name=\"config[adv_filter]\" :options=\"$advancedFilters\" :selected=\"$model?->conf('adv_filter') ?? null\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"singular\" css=\"col-span-2\" :label=\"__('dashboard.widgets.recent.singular')\">\n        <input type=\"hidden\" name=\"config[singular]\" value=\"0\" />\n        <div class=\"checkbox\">\n            <x-checkbox :text=\"__('dashboard.widgets.recent.help')\">\n                <input type=\"checkbox\" name=\"config[singular]\" value=\"1\" x-model=\"singular\" />\n            </x-checkbox>\n        </div>\n    </x-forms.field>\n\n    <div class=\"col-span-2\" x-show=\"singular\" id=\"widget-advanced\">\n        @if($campaign->boosted())\n            @include('dashboard.widgets.forms._header_select')\n            @include('dashboard.widgets.forms._related')\n        @else\n            <x-helper>\n                <p>{!! __('dashboard.widgets.advanced_options_boosted', [\n        'boosted_campaign' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaigns') . '</a>']) !!}</p>\n            </x-helper>\n        @endif\n    </div>\n    @include('dashboard.widgets.forms._name')\n    @include('dashboard.widgets.forms._width')\n\n    <x-forms.field field=\"order\" :label=\"__('dashboard.widgets.fields.order')\">\n        <x-forms.select name=\"config[order]\" :options=\"['' => __('dashboard.widgets.orders.recent'),\n    'oldest' => __('dashboard.widgets.orders.oldest'),\n    'name_asc' => __('dashboard.widgets.orders.name_asc'),\n    'name_desc' => __('dashboard.widgets.orders.name_desc')]\" :selected=\"$model?->conf('order') ?? null\" />\n    </x-forms.field>\n\n    @includeWhen(!empty($dashboards), 'dashboard.widgets.forms._dashboard')\n\n</x-grid>\n\n<x-widgets.forms.advanced>\n    @includeWhen(!$boosted, 'dashboard.widgets.forms._boosted')\n    @include('dashboard.widgets.forms._class')\n</x-widgets.forms.advanced>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_related.blade.php",
    "content": "\n<div class=\"\">\n    <input type=\"hidden\" name=\"config[attributes]\" value=\"0\" />\n    <x-forms.field field=\"attributes\" :label=\"__('dashboard.widgets.recent.show_attributes')\">\n        <x-checkbox :text=\"__('dashboard.widgets.recent.helpers.show_attributes')\">\n            <input type=\"checkbox\" name=\"config[attributes]\" value=\"1\" @if (old('config[attributes]', isset($model) ? $model->conf('attributes') : false)) checked=\"checked\" @endif id=\"config-attributes\" @if (!$boosted) disabled=\"disabled\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n</div>\n\n<div class=\"\">\n    <input type=\"hidden\" name=\"config[relations]\" value=\"0\" />\n    <x-forms.field field=\"relations\" :label=\"__('dashboard.widgets.recent.show_relations')\">\n        <x-checkbox :text=\"__('dashboard.widgets.recent.helpers.show_relations')\">\n            <input type=\"checkbox\" name=\"config[relations]\" value=\"1\" @if (old('config[relations]', isset($model) ? $model->conf('relations') : false)) checked=\"checked\" @endif id=\"config-relations\" @if (!$boosted) disabled=\"disabled\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n</div>\n\n<div class=\"\">\n    <input type=\"hidden\" name=\"config[members]\" value=\"0\" />\n    <x-forms.field field=\"members\" :label=\"__('dashboard.widgets.recent.show_members')\">\n        <x-checkbox :text=\"__('dashboard.widgets.recent.helpers.show_members')\">\n            <input type=\"checkbox\" name=\"config[members]\" value=\"1\" @if (old('config[members]', isset($model) ? $model->conf('members') : false)) checked=\"checked\" @endif id=\"config-members\" @if (!$boosted) disabled=\"disabled\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_size.blade.php",
    "content": "@php $options = [\n    'h1' => 'H1',\n    'h2' => 'H2',\n    null => 'H3',\n    'h4' => 'H4',\n    'h5' => 'H5',\n    'h6' => 'H6',\n];\n@endphp\n<x-forms.field\n    field=\"size\"\n    :label=\"__('dashboard.widgets.fields.size')\">\n    <x-forms.select name=\"config[size]\" :options=\"$options\" :selected=\"$source->config['size'] ?? $model->config['size'] ?? null\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_tags.blade.php",
    "content": "<x-forms.field field=\"tags\">\n    <x-forms.tags\n        :campaign=\"$campaign\"\n        :model=\"$model ?? null\"\n        allowClear=\"true\"\n        :dropdownParent=\"$dropdownParent ?? null\"\n    ></x-forms.tags>\n    <p class=\"text-neutral-content md:hidden\">\n        {{ __('dashboard.widgets.recent.tags') }}\n    </p>\n    <input type=\"hidden\" name=\"save_tags\" value=\"1\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_welcome.blade.php",
    "content": "<x-helper>\n    <p>{{ __('dashboards/widgets/welcome.description') }}</p>\n</x-helper>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/_width.blade.php",
    "content": "@php $options = [\n    0 => __('dashboard.widgets.widths.0'),\n    12 => __('dashboard.widgets.widths.12'),\n    3 => __('dashboard.widgets.widths.3'),\n    4 => __('dashboard.widgets.widths.4'),\n    6 => __('dashboard.widgets.widths.6'),\n    8 => __('dashboard.widgets.widths.8'),\n    9 => __('dashboard.widgets.widths.9')\n];\n@endphp\n<x-forms.field\n    field=\"width\"\n    :label=\"__('dashboard.widgets.fields.width')\">\n    <x-forms.select name=\"width\" :options=\"$options\" :selected=\"$source->width ?? $model->width ?? null\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/create.blade.php",
    "content": "\n@php $mode = 'create'; @endphp\n<x-form :action=\"['campaign_dashboard_widgets.store', $campaign]\">\n    @include('partials.forms._dialog', [\n        'title' => __('dashboard.widgets.create.title'),\n        'content' => 'dashboard.widgets.forms._' . $widget,\n    ])\n\n    <input type=\"hidden\" name=\"widget\" value=\"{{ $widget }}\">\n    @if(empty($dashboards) && !empty($dashboard))\n        <input type=\"hidden\" name=\"dashboard_id\" value=\"{{ $dashboard->id }}\">\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/forms/edit.blade.php",
    "content": "@include('partials.errors')\n\n<x-form :action=\"['campaign_dashboard_widgets.update', $campaign, $model]\" method=\"PATCH\">\n    @include('partials.forms._dialog', [\n        'mode' => 'edit',\n        'title' => __('dashboards/widgets/' . $model->widget->value . '.name'),\n        'titleIcon' => '<i class=\"' . $model->widgetIcon() . '\" aria-hidden=\"true\"></i>',\n        'content' => 'dashboard.widgets.forms._' . $widget,\n        'deleteID' => '#delete-form-widget-' . $model->id,\n    ])\n    <input type=\"hidden\" name=\"widget\" value=\"{{ $widget }}\">\n    @if(empty($dashboards) && !empty($dashboard))\n        <input type=\"hidden\" name=\"dashboard_id\" value=\"{{ $dashboard->id }}\">\n    @endif\n</x-form>\n\n<x-form method=\"DELETE\" :action=\"['campaign_dashboard_widgets.destroy', $campaign, $model]\"\n        id=\"delete-form-widget-{{ $model->id }}\"/>\n\n\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/_attributes.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var \\App\\Models\\MiscModel $model\n */\n?>\n@if(!$campaign->boosted() || !$widget->showAttributes())\n    @php return @endphp\n@endif\n\n@inject('attributeService', 'App\\Services\\AttributeService')\n\n<div class=\"widget-advanced-attributes\">\n    <ul class=\"m-0 p-0 list-none\">\n\n    @include('entities.components.attributes')\n    </ul>\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/_full.blade.php",
    "content": "{!! $slot !!}\n\n@if ($entity->hasEntry())\n<div class=\"entity-content\">\n    {!! $entity->parsedEntry() !!}\n</div>\n@endif\n\n@include('dashboard.widgets.previews._members')\n@include('dashboard.widgets.previews._relations')\n@include('dashboard.widgets.previews._attributes')\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/_members.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var \\App\\Models\\MiscModel $model\n * @var \\App\\Models\\Entity $entity\n */\n?>\n@if(!$campaign->boosted() || !$widget->showMembers($entity))\n    @php return @endphp\n@endif\n\n@php\n$child = null;\nif (isset($model)) {\n    $child = $model;\n} else {\n    $child = $entity->child;\n}\n$members = $entity->isFamily()\n    ? $child->members()->with('entity')->orderBy('name')->get()\n    : $child->members()->with(['character', 'character.entity'])\n        ->leftJoin('characters', 'characters.id', '=', 'organisation_member.character_id')\n        ->orderBy('characters.name')\n        ->get();\n@endphp\n\n<div class=\"widget-advanced-members mt-5\">\n\n@if($entity->isFamily())\n    <div class=\"flex flex-col gap-2 members\">\n<?php /** @var \\App\\Models\\CharacterFamily $member */?>\n        @foreach ($members as $member)\n            @if (empty($member->entity)) @continue @endif\n            <div class=\"\">\n                <x-entity-link\n                    :entity=\"$member->entity\"\n                    :campaign=\"$campaign\" />\n            </div>\n        @endforeach\n    </div>\n@else\n    <div class=\"flex flex-col gap-2 members\">\n<?php /** @var \\App\\Models\\OrganisationMember $member */?>\n        @foreach ($members as $member)\n            @if (empty($member->character)) @continue @endif\n            <div class=\"grid grid-cols-2 gap-2 members\" data-role=\"{{ Illuminate\\Support\\Str::slug($member->role) }}\"  data-status=\"{{ $member->status_id }}\">\n                <div class=\"font-extrabold\">{{ $member->role }}</div>\n                <div>\n                    <x-entity-link\n                        :entity=\"$member->character->entity\"\n                        :campaign=\"$campaign\" />\n                </div>\n            </div>\n        @endforeach\n    </div>\n@endif\n\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/_preview.blade.php",
    "content": "<div x-data=\"{open: false}\">\n    <div :class=\"{ 'preview max-h-52': !open, 'overflow-hidden relative': true }\" id=\"widget-preview-body-{{ $widget->id }}\">\n        {!! $slot !!}\n        @if ($entity->hasEntry())\n        <div class=\"entity-content\">\n            {!! $entity->parsedEntry() !!}\n        </div>\n        @endif\n\n        @include('dashboard.widgets.previews._members')\n        @include('dashboard.widgets.previews._relations')\n        @include('dashboard.widgets.previews._attributes')\n        <div class=\"absolute w-full bottom-0 h-52 gradient-to-base-100\" x-show=\"!open\" x-cloak></div>\n    </div>\n    <span role=\"button\" class=\"inline-block w-full text-center\"\n       id=\"widget-preview-switch-{{ $widget->id }}\" data-widget=\"{{ $widget->id }}\" data-toggle=\"tooltip\" data-title=\"{{ __('Click to toggle') }}\" @click=\"open = !open\">\n        <x-icon class=\"fa-regular fa-chevron-down\" show=\"!open\" x-cloak   />\n        <x-icon class=\"fa-regular fa-chevron-up\" show=\"open\" x-cloak />\n        <span class=\"sr-only\">{{ __('Click to toggle') }}</span>\n    </span>\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/_relations.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var \\App\\Models\\MiscModel $model\n */\n?>\n@if(!$campaign->boosted() || !$widget->showRelations())\n    @php return @endphp\n@endif\n\n@inject('attributeService', 'App\\Services\\AttributeService')\n\n<div class=\"widget-advanced-relations\">\n    <dl class=\"dl-horizontal\">\n    @include('entities.components.relations')\n    </dl>\n</div>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/character.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n */\n?>\n<x-widgets.previews.head :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\">\n</x-widgets.previews.head>\n<x-widgets.previews.body  :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\">\n</x-widgets.previews.body>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/conversation.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Conversation $conversation\n * @var \\App\\Models\\ConversationMessage $message\n */\n$conversation = $entity->child;\n?>\n<x-box padding=\"0\" class=\"widget-conversation {{ $widget->customClass($campaign) }}\">\n    <x-widgets.previews.head :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\">\n        <span class=\"\" data-toggle=\"tooltip\" data-title=\"{{ __('conversations.tabs.participants') }}\">\n            <x-badge>\n                <x-icon class=\"fa-regular fa-users\" />\n                {{ $conversation->participants()->count() }}\n            </x-badge>\n        </span>\n    </x-widgets.previews.head>\n\n    <div class=\"widget-body p-4\">\n        <div class=\"direct-chat-messages flex flex-col gap-2\">\n\n        @foreach ($conversation->messages()->with(['character', 'user'])->orderByDesc('created_at')->take(5)->get() as $message)\n            @if (empty($message->user) && empty($message->character))\n                @continue\n            @endif\n            <div class=\"direct-chat-msg flex flex-3 flex-col @if ($message->isMine()) right @endif\">\n                <div class=\"direct-chat-info flex gap-2 items-center\">\n                    @if ($message->isMine())\n                        <span class=\"direct-chat-timestamp text-xs grow\">{{ $message->created_at->diffForHumans() }}</span>\n                        <span class=\"direct-chat-name\">\n                            @if ($message->user)\n                                {{ $message->user->name }}\n                            @elseif ($message->character)\n                                <a href=\"{{ $message->character->getLink() }}\" class=\"text-link\">{{ $message->character->name }}</a>\n                            @endif\n                        </span>\n                    @elseif (!empty($message->user_id))\n                        <span class=\"direct-chat-name grow\">\n                            {{ $message->user ? $message->user->name : null }}\n                        </span>\n                        <span class=\"direct-chat-timestamp\">{{ $message->created_at->diffForHumans() }}</span>\n                    @else\n                        <span class=\"direct-chat-name grow\">\n                            <a href=\"{{ $message->character->getLink() }}\" class=\"text-link\">{{ $message->character->name }}</a>\n                        </span>\n                        <span class=\"direct-chat-timestamp\">{{ $message->created_at->diffForHumans() }}</span>\n                    @endif\n                </div>\n                <div class=\"flex gap-2 items-center\">\n                @if (!empty($message->user_id))\n                    @if ($message->user->hasAvatar())\n                        <x-users.avatar :user=\"$message->user\" class=\"w-6 h-6\" />\n                    @endif\n                @elseif (!empty($message->character_id))\n                    <img class=\"entity-image cover-background w-6 h-6 rounded-full\" src=\"{{ \\App\\Facades\\Avatar::entity($message->character->entity)->fallback()->size(40)->thumbnail() }}\" alt=\"{{ $message->character->name }}\">\n                @endif\n                    <div class=\"direct-chat-text grow\">\n                        {{ $message->message }}\n                    </div>\n                </div>\n            </div>\n        @endforeach\n        </div>\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/map.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var \\App\\Models\\Map $map\n * @var \\App\\Models\\Entity $entity\n */\n$map = $entity->child;\n?>\n\n\n@if(!$map->explorable())\n    <x-alert type=\"warning\">\n        <a href=\"{{ $entity->url() }}\" class=\"text-link\">{!! $entity->name !!}</a>\n        <p class=\"\">{{ __('maps.errors.dashboard.missing') }}</p>\n    </x-alert>\n    @php return @endphp\n@endif\n\n<div class=\"widget-map\">\n    <div class=\"map map-dashboard rounded\" id=\"map{{ $map->id }}\" style=\"width: 100%; height: 100%;\">\n        <a href=\"{{ route('maps.explore', [$campaign, $map]) }}\" class=\"btn2 btn-primary btn-xs btn-map-explore z-820 absolute bottom-3 right-3\">\n            <x-icon class=\"map\" />\n            {{ __('maps.actions.explore') }}\n        </a>\n    </div>\n</div>\n\n\n\n@section('scripts')\n    @parent\n    <script type=\"text/javascript\">\n        var labelShapeIcon = new L.Icon({\n            iconUrl: '/images/transparent.png',\n            iconSize: [150, 35],\n            iconAnchor: [75, 15],\n            popupAnchor: [0, -20],\n        });\n\n        var markers = [];\n        @foreach ($map->markers as $marker)\n            @if(!$marker->visible())\n                @continue\n            @endif\n            var marker{{ $marker->id }} = {!! $marker->multiplier($map->is_real)->marker() !!};\n            markers.push('marker' + {{ $marker->id }});\n        @endforeach\n    </script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.layerstree.js\"></script>\n    @include('maps._setup')\n\n    <script type=\"text/javascript\">\n        /** Add markers outside a group directly to the page **/\n        @foreach ($map->markers as $marker)\n            @if (!$marker->visible())\n                @continue\n            @endif\n            @if ($marker->visible() && empty($marker->group_id))\n                @if ($map->isClustered())\n                    clusterMarkers{{ $map->id }}.addLayer(marker{{ $marker->id }});\n                @else\n                    marker{{ $marker->id }}.addTo(map{{ $map->id }});\n                @endif\n            @elseif (!empty($marker->group_id))\n                marker{{ $marker->id }}.addTo(group{{ $marker->group_id }})\n            @endif\n        @endforeach\n\n        @if ($map->isClustered())\n            map{{ $map->id }}.addLayer(clusterMarkers{{ $map->id }});\n\n            /** Add the groups to the cluster **/\n            clusterMarkers{{ $map->id }}.checkIn({{ $map->checkinGroups() }});\n\n            /** Add the groups to the map **/\n            @foreach ($map->groups as $group)\n                @if (!$group->is_shown)\n                    @continue\n                @endif\n                group{{ $group->id }}.addTo(map{{ $map->id }});\n            @endforeach\n        @endif\n\n        @foreach ($map->markers as $marker)\n            @if(!$marker->visible())\n                @continue\n            @endif\n            @if (empty($marker->group_id))\n                marker{{ $marker->id }}.addTo(map{{ $map->id }});\n            @endif\n        @endforeach\n    </script>\n@endsection\n\n\n\n@section('styles')\n    @parent\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.layerstree.css\"/>\n    <style>\n        @foreach ($map->markers as $marker)\n            @if(!$marker->visible())\n                @continue\n            @endif\n            .marker-{{ $marker->id }}  {\n                @if(!empty($marker->font_colour))\n                    color: {{ $marker->font_colour }};\n                @endif\n            }\n\n            @if ($marker->entity && $marker->icon == 4)\n                .marker-{{ $marker->id }} .marker-pin::after {\n                    background-image: url('{{ \\App\\Facades\\Avatar::entity($marker->entity)->fallback()->size(276)->thumbnail() }}');\n                    @if(!empty($marker->pin_size))\n                        width: {{ $marker->pinSize(false) - 4 }}px;\n                        height: {{ $marker->pinSize(false) - 4 }}px;\n                        margin: 2px 0 0 -{{ ceil(($marker->pinSize(false)-4)/2) }}px;\n                    @endif\n                }\n            @endif\n\n            @if(!empty($marker->pin_size))\n                .marker-{{ $marker->id }} .marker-pin {\n                    width: {{ $marker->pinSize() }};\n                    height: {{ $marker->pinSize() }};\n                    margin: -{{ $marker->pinSize(false) / 2 }}px 0 0 -{{ $marker->pinSize(false) / 2 }}px;\n                }\n                .marker-{{ $marker->id }} i {\n                    font-size: {{ $marker->pinSize(false) / 2 }}px;\n                }\n            @endif\n        @endforeach\n    </style>\n@endsection\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/quest.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Character $model\n * @var \\App\\Models\\Quest $model\n */\n?>\n<x-widgets.previews.head :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\">\n</x-widgets.previews.head>\n<x-widgets.previews.body  :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\">\n    @if (!empty($entity->child?->instigator))\n        <dl class=\"dl-horizontal\">\n            <dt>{{ __('quests.fields.instigator') }}</dt>\n            <dd>\n                <x-entity-link\n                    :entity=\"$entity->child->instigator\"\n                    :campaign=\"$campaign\" />\n            </dd>\n        </dl>\n    @endif\n</x-widgets.previews.body>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/previews/random-map.blade.php",
    "content": "<x-alert type=\"info\">\n    {{ __('Rendering a random map isn\\'t currently supported.') }}\n</x-alert>\n"
  },
  {
    "path": "resources/views/dashboard/widgets/selection/footer.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/dashboard/widgets/selection.blade.php",
    "content": "@include('partials.forms._dialog', [\n    'title' => __('dashboard.widgets.create.title'),\n    'content' => 'dashboard.widgets._selection',\n    'footer' => 'dashboard.widgets.selection.footer',\n])\n"
  },
  {
    "path": "resources/views/datagrids/subscription.blade.php",
    "content": "<x-dialog.header>\n    {{ __('datagrids.subscription.title') }}\n</x-dialog.header>\n<x-dialog.article>\n    <x-helper>\n        <p class=\"max-w-xl\">{!! __('datagrids.subscription.helper', ['max' => '<code>100</code>']) !!}</p>\n    </x-helper>\n\n</x-dialog.article>\n<x-dialog.footer>\n    <a href=\"{{ route('settings.subscription', ['f' => 'datagrid']) }}\" class=\"btn2 btn-primary\">\n        {{ __('datagrids.subscription.cta') }}\n    </a>\n</x-dialog.footer>\n\n"
  },
  {
    "path": "resources/views/dice_rolls/_results.blade.php",
    "content": "<?php $r = $entity->child->diceRollResults()->with('creator')->orderBy('created_at', 'DESC')->paginate(); ?>\n\n<div class=\"flex gap-2 items-center justify-between\">\n    <h4 class=\"text-lg\">{{ __('dice_rolls.index.actions.results') }}</h4>\n    @can('view', $entity)\n        <a href=\"{{ route('dice_rolls.roll', [$campaign, 'dice_roll' => $entity->child]) }}\" class=\"btn2 btn-sm\">\n            <x-icon class=\"plus\" /> {{ __('dice_rolls.results.actions.add') }}\n        </a>\n    @endcan\n</div>\n\n<x-box :padding=\"false\">\n<table id=\"dice-rolls-results\" class=\"table table-hover\">\n    <thead><tr>\n        <th>{{ __('dice_rolls.results.fields.creator') }}</th>\n        <th>{{ __('dice_rolls.results.fields.result') }}</th>\n        <th>{{ __('dice_rolls.results.fields.date') }}</th>\n        <th class=\"text-right\">\n\n        </th>\n    </tr></thead><tbody>\n    @foreach ($r as $relation)\n        <tr>\n            <td>\n                {{ $relation->creator->name }}\n            </td>\n            <td>{{ $relation->results }}</td>\n            <td>{{ $relation->updated_at->diffForHumans() }}</td>\n            <td class=\"text-right\">\n                @can('delete', $entity)\n                    <x-form method=\"DELETE\" :action=\"['dice_rolls.destroy_roll', $campaign, $entity->child, $relation->id]\">\n                        <button class=\"btn2 btn-xs btn-error btn-outline\" data-title=\"{{ __('crud.remove') }}\" data-toggle=\"tooltip\">\n                            <x-icon class=\"trash\" />\n                        </button>\n                    </x-form>\n                @endcan\n            </td>\n        </tr>\n    @endforeach\n    </tbody></table>\n</x-box>\n@if ($r->hasPages())\n    <div class=\"text-right\">\n        {{ $r->fragment('tab_relation')->links() }}\n    </div>\n@endif\n\n"
  },
  {
    "path": "resources/views/dice_rolls/datagrid.blade.php",
    "content": "<?php /** @var \\App\\Models\\DiceRoll $model */ ?>\n\n{!! $datagrid\n    ->columns([\n        // Avatar\n        [\n            'type' => 'avatar'\n        ],\n        // Name\n        'name',\n        'parameters',\n        [\n            'label' => __('entities.character'),\n            'field' => 'character.name',\n            'render' => function(\\App\\Models\\DiceRoll $model) use ($campaign) {\n                if ($model->character && $model->character->entity) {\n                    return \\Illuminate\\Support\\Facades\\Blade::renderComponent(\n                        new \\App\\View\\Components\\EntityLink($model->character->entity, $campaign)\n                    );\n                }\n            }\n        ],\n        [\n            'label' => __('dice_rolls.fields.rolls'),\n            'render' => function($model) {\n                return $model->diceRollResults()->count();\n            },\n            'disableSort' => true,\n        ],\n        [\n            'type' => 'is_private',\n        ],\n    ])\n    ->options([\n        'route' => 'dice_rolls.index',\n        'baseRoute' => 'dice_rolls',\n        'trans' => 'dice_rolls.fields.',\n    ]\n) !!}\n"
  },
  {
    "path": "resources/views/dice_rolls/form/_entry.blade.php",
    "content": "\n<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.character', ['name' => 'character_id'])\n    @include('cruds.fields.tags')\n\n    <x-forms.field\n        field=\"parameters\"\n        required\n        :label=\"__('dice_rolls.fields.parameters')\">\n        <input type=\"text\" name=\"parameters\" value=\"{{ old('parameters', $source->parameters ?? $model->parameters ?? null) }}\" maxlength=\"191\" class=\"w-full\" placeholder=\"{{ __('dice_rolls.placeholders.parameters') }}\" />\n        <a href=\"//docs.kanka.io/en/latest/entries/dice-rolls.html#creating-a-dice-roll-template\"  class=\"text-link\">{{ __('dice_rolls.hints.parameters') }}</a>\n    </x-forms.field>\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/dice_rolls/results.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('dice_roll_results.index.title'),\n    'seoTitle' =>  __('dice_roll_results.index.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'bodyClass' => 'kanka-dice-roll-results',\n])\n\n@section('entity-header')\n    <div class=\"flex gap-2 items-center mb-5\">\n        <h1 class=\"grow text-2xl category-title truncate\">{!! __('dice_roll_results.index.title') !!}</h1>\n        <div class=\"flex flex-wrap gap-2 justify-end\">\n            <a href=\"{{ route('dice_rolls.index', $campaign) }}\" class=\"btn2 btn-\">\n                <x-icon class=\"fa-solid fa-square\"></x-icon>\n                {{ __('entities.dice_rolls') }}\n            </a>\n        </div>\n    </div>\n@endsection\n\n@section('content')\n    @include('partials.errors')\n\n    @include('ads.top')\n\n    <div class=\"flex flex-col gap-5\">\n        <div class=\"flex gap-1 items-start\">\n            <x-box :padding=\"false\" >\n                <div class=\"table-responsive\">\n                    <table class=\"table table-striped table-entities\">\n                        <thead>\n                            <tr>\n                                <th >{{ __('entities.dice_roll') }}</th>\n                                <th>{{ __('entities.character') }}</th>\n                                <th>{{ __('crud.fields.creator') }}</th>\n                                <th>{{ __('dice_rolls.fields.results') }}</th>\n                                <th>{{ __('dice_rolls.results.fields.date') }}</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                        @foreach ($models as $model)\n                            <tr>\n                                <td>\n                                    <x-entity-link :entity=\"$model->diceRoll->entity\" :campaign=\"$campaign\" />\n                                </td>\n                                <td>\n                                    <x-entity-link :entity=\"$model->diceRoll->character->entity\" :campaign=\"$campaign\" />\n                                </td>\n                                <td>\n                                    {!! $model->user->name !!}\n                                </td>\n                                <td>\n                                    {!! \\Illuminate\\Support\\Number::format($model->results ?? 0) !!}\n                                </td>\n                                <td>\n                                    <span title=\"{{ $model->updated_at }} UTC\">\n                                    {{ $model->updated_at->diffForHumans() }}\n                                    </span>\n                                </td>\n                            </tr>\n                        @endforeach\n                        </tbody>\n                    </table>\n                </div>\n            </x-box>\n        </div>\n\n\n        @if($models->hasPages())\n            <div class=\"\">\n                {{ $models->onEachSide(0)->links() }}\n            </div>\n        @endif\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/dice_rolls/show.blade.php",
    "content": "\n<div class=\"entity-grid flex flex-col gap-5\">\n\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('dice_rolls._results')\n            @include('entities.components.posts')\n\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/editors/ckeditor.blade.php",
    "content": "@section('scripts')\n    <script src=\"https://cdn.ckeditor.com/4.11.3/full/ckeditor.js\" defer></script>\n@endsection\n\n@section('styles')\n@endsection"
  },
  {
    "path": "resources/views/editors/editor.blade.php",
    "content": "@php\n$editor = auth()->user()->editor;\nif (request()->has('tiptap')) {\n    $editor = 'tiptap';\n} elseif (request()->has('tinymce')) {\n    $editor = 'legacy';\n} elseif (request()->has('summernote')) {\n    $editor = '';\n}\n@endphp\n\n@if ($editor === 'tiptap')\n    @once\n        @include('editors.tiptap')\n    @endonce\n@elseif($editor === 'legacy')\n    @include('editors.tinymce')\n@else\n    @once\n    @include('editors.summernote')\n    @endonce\n@endif\n"
  },
  {
    "path": "resources/views/editors/summernote.blade.php",
    "content": "@section('scripts')\n    @parent\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/0.9.1/summernote.min.js\" defer></script>\n\n    @vite('resources/js/editors/summernote.js')\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/plugin/embed/summernote-embed-plugin.js\" defer></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/plugin/summernote-table-headers/summernote-table-headers.js\" defer></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/plugin/kanka/summernote-gallery.min.js\" defer></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/plugin/summernote-toc-kanka/summernote-toc.js\" defer></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/plugin/summernote-aroba-kanka/summernote-aroba.js\" defer></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/plugin/summernote-table-ext.js\" defer></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/plugin/summernote-image-attribute.js\" defer></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/summernote/plugin/kanka/summernote-prettify-kanka.min.js\" defer></script>\n\n    @if (!in_array(app()->getLocale(), ['en-US', 'en']))\n        <script src=\"{{ config('app.asset_url') }}/vendor/summernote/0.9.1/lang/summernote-{{ app()->getLocale() }}-{{ strtoupper(app()->getLocale()) }}.js\" defer></script>\n    @endif\n@endsection\n\n@section('styles')\n@parent\n<link href=\"{{ config('app.asset_url') }}/vendor/summernote/0.9.1/summernote.min.css\" rel=\"stylesheet\">\n\n@if (config('app.asset_url'))\n    <link href=\"{{ config('app.asset_url') }}/vendor/bootstrap/bootstrap-summernote.css?v={{ config('app.version') }}\" rel=\"stylesheet\">\n@else\n    <link href=\"/css/bootstrap-summernote.css?v={{ config('app.version') }}\" rel=\"stylesheet\">\n@endif\n@endsection\n\n@section('modals')\n    @parent\n\n    <div\n        id=\"summernote-config\"\n        data-mention=\"{{ isset($campaign) ? route('search.live', $campaign) : null }}\"\n        data-advanced-mention=\"{{ auth()->user()->alwaysAdvancedMentions() }}\"\n        data-months=\"{{ isset($campaign) ? route('search.calendar-months', $campaign) : null }}\"\n        data-gallery-title=\"{{ __('sidebar.gallery') }}\"\n        data-gallery-close=\"{{ __('crud.actions.close') }}\"\n        data-gallery-add=\"{{ __('crud.add') }}\"\n        data-gallery-select-all=\"{{ __('general.select_all') }}\"\n        data-gallery-deselect-all=\"{{ __('general.deselect_all') }}\"\n        data-gallery-error=\"generic.gallery.error\"\n        data-filesize=\"{{ Limit::upload() }}\"\n        data-placeholder=\"{{ $editorPlaceholder ?? __('crud.placeholders.entry') }}\"\n        data-dialogs=\"{{ isset($dialogsInBody) ? '1' : '0' }}\"\n@if(isset($campaign) && $campaign !== null)\n        data-gallery=\"{{ route('campaign.gallery.summernote', $campaign) }}\"\n        data-gallery-upload=\"{{ route('campaign.gallery.ajax-upload', $campaign) }}\"\n@endif\n@if (!empty($model) && !($model instanceof \\App\\Models\\Campaign) && $model->entity)        data-attributes=\"{{ route('search.attributes', [$campaign, $model->entity]) }}\"\n@elseif (!empty($entity))        data-attributes=\"{{ route('search.attributes', [$campaign, $entity]) }}\"\n\n@endif\n        data-locale=\"{{ app()->getLocale() }}\"></div>\n\n@if(isset($campaign) && $campaign !== null)\n    <div class=\"modal fade\" id=\"campaign-imageupload-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"deleteConfirmLabel\">\n        <div class=\"modal-dialog\" role=\"document\">\n            <div class=\"modal-content bg-base-100 rounded-2xl\">\n                <div class=\"modal-body text-center\">\n                    <x-alert type=\"error\" id=\"campaign-imageupload-error\" hidden></x-alert>\n                    <x-alert type=\"error\" id=\"campaign-imageupload-permission\" hidden>\n                        <p>{!! __('campaigns/gallery.errors.permissions', [\n    'permission' => '<code>' . __('campaigns.roles.permissions.actions.gallery.upload') . '</code>']\n    ) !!}</p>\n                    </x-alert>\n                </div>\n            </div>\n        </div>\n    </div>\n@endif\n\n@endsection\n"
  },
  {
    "path": "resources/views/editors/tinymce.blade.php",
    "content": "\n@section('styles')\n    @parent\n    @if (config('app.asset_url'))\n        <link href=\"{{ config('app.asset_url') }}/vendor/bootstrap/bootstrap-summernote.css?v={{ config('app.version') }}\" rel=\"stylesheet\">\n    @else\n        <link href=\"/css/bootstrap-summernote.css?v={{ config('app.version') }}\" rel=\"stylesheet\">\n    @endif\n@endsection\n@section('scripts')\n    @parent\n    <script src=\"{{ '/js/tinymce/tinymce.min.js' }}\"></script>\n    <script>\n        var advancedRequest = false;\n        var editor_config = {\n            path_absolute : \"/\",\n            language: '{{ App::getLocale() == 'en-US' ? 'en' : App::getLocale() }}',\n            selector: \"textarea.html-editor\",\n            plugins: [\n                \"save autosave advlist autolink lists link image hr anchor pagebreak\",\n                \"searchreplace code fullscreen\",\n                \"insertdatetime media nonbreaking table directionality\",\n                \"emoticons paste textcolor colorpicker textpattern\",\n                \"fullpage @if(!empty($campaign)) mention @endif media\"\n            ],\n            toolbar: \"undo redo | styleselect | bold italic underline strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | hr | link image table media | code fullscreen\",\n            nanospell_server: \"php\",\n            browser_spellcheck: true,\n            relative_urls: false,\n            remove_script_host: false,\n            branding: false,\n            media_live_embeds: true,\n            menubar: false,\n            content_css: '{{ Vite::asset('resources/css/vendors/tinymce.css') }}',\n            extended_valid_elements: \"+@[data-mention]\",\n            @if (!empty($campaign))\n            mentions: {\n                delimiter: ['@', '#', '['@if(!empty($model) && method_exists($model, 'hasEntity') && $model->hasEntity()), '{'@endif],\n                delay: 250,\n                source: function(query, process, delimiter) {\n                    if (delimiter === '#') {\n                        $.getJSON('{{ route('search.calendar-months', $campaign) }}?q='+ query, function(data) {\n                            process(data)\n                        })\n                    } @if(!empty($model) && method_exists($model, 'hasEntity') && $model->hasEntity() && $model->entity)else if(delimiter === '{') {\n                        $.getJSON('{{ route('search.attributes', [$campaign, $model->entity]) }}?q='+ query, function(data) {\n                            process(data)\n                        })\n                    }@endif else {\n                        if (delimiter === '[') {\n                            advancedRequest = true;\n                        } else {\n                            advancedRequest = false;\n                        }\n                        $.getJSON('{{ route('search.live', $campaign) }}?q='+ query + '&new=1', function(data) {\n                            process(data)\n                        })\n                    }\n                },\n                insert: function(item) {\n                    // Attribute\n                    if (item.value) {\n                        @if (auth()->user()->alwaysAdvancedMentions())\n                            return '{attribute:' + item.id + '}';\n                        @else\n                            return '<a href=\"#\" class=\"attribute attribute-mention\" data-attribute=\"{attribute:' + item.id + '}\">{' + item.name + '}</a>'\n                        @endif\n                    }\n                    else if (item.id) {\n                        var mention = '[' + item.model_type + ':' + item.id + ']';\n                        @if (auth()->user()->alwaysAdvancedMentions())\n                        return mention;\n                        @else\n                        if (advancedRequest) {\n                            return mention;\n                        }\n                        return '<a href=\"#\" class=\"mention\" data-mention=\"' + mention + '\">' + item.fullname + '</a>';\n                        @endif\n                    }\n                    else if (item.url) {\n                        if (item.tooltip) {\n                            var str = '<a href=\"' + item.url + '\" data-title=\"' + item.tooltip.replace(/[\"]/g, '\\'') + '\" data-toggle=\"tooltip\" data-html=\"true\" >' + item.fullname + '</a>';\n                            return str;\n                        }\n                        return '<a href=\"' + item.url + '\">' + item.fullname + '</a>';\n                    }\n                    else if (item.inject) {\n                        return item.inject;\n                    }\n                    return item.fullname;\n                },\n                render: function(item) {\n                    if (item.value) {\n                        return '<li><a href=\"javascript:;\"><span>' + item.name +  (item.value ? ' (' + item.value + ')' : '') + '</span></a></li>';\n                    }\n                    return '<li>' +\n                        '<a href=\"javascript:;\"><span>' + (item.image ? item.image : '') + item.fullname + (item.type ? ' (' + item.type + ')' : '') + '</span></a>' +\n                        '</li>';\n                }\n            },\n            @endif\n            setup: function (editor) {\n                editor.on('init', function () {\n                    var style = getComputedStyle(document.documentElement);\n                    var vars = ['--mention-background', '--mention-text', '--p', '--pc'];\n                    var declarations = vars\n                        .map(function (v) { return { name: v, value: style.getPropertyValue(v).trim() }; })\n                        .filter(function (entry) { return entry.value !== ''; })\n                        .map(function (entry) { return entry.name + ': ' + entry.value; })\n                        .join('; ');\n                    if (declarations) {\n                        editor.dom.addStyle(':root { ' + declarations + ' }');\n                    }\n                });\n            },\n            save_onsavecallback: function () {\n                // Set the global dirty check off\n                window.entityFormHasUnsavedChanges = false;\n                tinymce.activeEditor.setDirty(false);\n                $(\"form[data-shortcut='1']\").submit();\n            }\n        };\n\n        tinymce.init(editor_config);\n    </script>\n@endsection\n\n"
  },
  {
    "path": "resources/views/editors/tiptap.blade.php",
    "content": "\n@section('scripts')\n    @parent\n    @vite('resources/js/editors/tiptap/index.js')\n@endsection\n"
  },
  {
    "path": "resources/views/editors/tiptap_editor.blade.php",
    "content": "@php\n    $fieldName = $fieldName ?? 'entry';\n    $contentModel = $source ?? $model ?? null;\n    $contentFieldName = $contentFieldName ?? $fieldName;\n    $content = $contentModel?->{$contentFieldName} ?? '';\n@endphp\n<div class=\"tiptap-editor entity-content\" data-content=\"{{ $content }}\" data-field-name=\"{{ $fieldName }}\">\n    <tiptap\n        @if (isset($campaign))\n            @php\n                $mentionUrlParams = [$campaign];\n                if (isset($entity)) {\n                    $mentionUrlParams['entity'] = $entity;\n                }\n            @endphp\n        mentions=\"{{ route('search.mention', $mentionUrlParams) }}\"\n        gallery=\"{{ route('gallery.tiptap', [$campaign]) }}\"\n        galleryUpload=\"{{ route('campaign.gallery.ajax-upload', $campaign) }}\"\n        @endif\n    />\n</div>\n"
  },
  {
    "path": "resources/views/emails/2024/base.blade.php",
    "content": "<?php /** This is the old email system, check out vendor/mail/html/layout.blade.php instead */?>\n<!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\" dir=\"ltr\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"format-detection\" content=\"telephone=no, date=no, address=no, email=no, url=no\">\n    <meta name=\"x-apple-disable-message-reformatting\">\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap\" rel=\"stylesheet\">\n    <style>\n        @media screen {\n            body {\n                font-family: 'Inter', sans-serif;\n            }\n        }\n        html, body, .document { margin: 0 !important; padding: 0 !important; width: 100% !important; height: 100% !important; }\n        body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility;}\n        img { border: 0; outline: none; text-decoration: none;  -ms-interpolation-mode: bicubic; }\n        table { border-collapse: collapse; }\n        table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }\n        body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }\n        h1, h2, h3, h4, h5, p { margin:0;}\n        @media all and (max-width:639px) {\n            .wrapper{ width:100%!important; }\n            .container{ width:100%!important; min-width:100%!important; padding: 0 !important; }\n            .row{padding-left: 20px!important; padding-right: 20px!important;}\n        }\n    </style>\n</head>\n<body style=\"margin: 0 !important; padding: 0 !important; background-color: #F4F7FA\">\n    <div class=\"document\" role=\"article\" aria-roledescription=\"email\" aria-label=\"\" lang=\"{{ app()->getLocale() }}\" dir=\"ltr\" style=\"background-color:#F4F7FA; line-height: 100%; font-size:medium; font-size:max(16px, 1rem);\">\n\n        <table width=\"100%\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n            <tbody>\n            <tr>\n                <td class=\"\" background=\"\" bgcolor=\"#F4F7FA\" align=\"center\" valign=\"top\" style=\"padding: 0 8px;\">\n                    <table width=\"640\" class=\"wrapper\" align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"\n                            max-width: 640px;\n                            border:1px solid #EAECED;\n                            border-radius:8px; border-collapse: separate!important; overflow: hidden;\n                            \">\n                        <tbody>\n                        <tr>\n                            <td align=\"center\">\n                                @include('emails.2024.header')\n                                @yield('content')\n                                @include('emails.2024.footer')\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </td>\n            </tr>\n            </tbody>\n        </table>\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/emails/2024/footer.blade.php",
    "content": "<table class=\"ml-default\" width=\"100%\" bgcolor=\"\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"\">\n<tbody><tr>\n<td style=\"\">\n<table class=\"container ml-21 ml-default-border\" width=\"640\" bgcolor=\"#ffffff\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"width: 640px; min-width: 640px;\">\n<tbody><tr>\n<td class=\"ml-default-border container\" height=\"20\" style=\"line-height: 20px; min-width: 640px;\"></td>\n</tr>\n<tr>\n<td class=\"row\" style=\"padding: 0 50px;\">\n<table align=\"center\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n<tbody><tr>\n<td class=\"col\" align=\"left\" width=\"250\" valign=\"top\" style=\"text-align: left!important;\">\n\n<h5 style=\"font-family: 'Inter', sans-serif; color: #000000; font-size: 15px; line-height: 125%; font-weight: bold; font-style: normal; text-decoration: none; margin-bottom: 6px;\">Owlchester SNC</h5>\n\nChemin Ella Maillart 16, Geneve<br>Switzerland\n\n<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n<tbody><tr>\n<td height=\"16\" style=\"line-height: 16px;\"></td>\n</tr>\n<tr>\n<td>\n\n<table class=\"social-links\" role=\"presentation\" cellpadding=\"\" cellspacing=\"5\" border=\"0\">\n<tbody><tr>\n    <td align=\"center\" valign=\"middle\" width=\"18\" >\n        <a href=\"https://kanka.io/go/discord\" target=\"blank\" style=\"text-decoration: none;\">\n            <img src=\"https://assets.mlcdn.com/ml/images/icons/default/rounded_corners/black/discord.png\" width=\"18\" alt=\"discord\">\n        </a>\n    </td>\n    <td align=\"center\" valign=\"middle\" width=\"18\" >\n        <a href=\"https://kanka.io/go/youtube\" target=\"blank\" style=\"text-decoration: none;\">\n            <img src=\"https://assets.mlcdn.com/ml/images/icons/default/rounded_corners/black/youtube.png\" width=\"18\" alt=\"youtube\">\n        </a>\n    </td>\n    <td align=\"center\" valign=\"middle\" width=\"18\" >\n        <a href=\"https://kanka.io/go/github\" target=\"blank\" style=\"text-decoration: none;\">\n            <img src=\"https://assets.mlcdn.com/ml/images/icons/default/rounded_corners/black/github.png\" width=\"18\" alt=\"github\">\n        </a>\n    </td>\n    <td align=\"center\" valign=\"middle\" width=\"18\" >\n        <a href=\"https://kanka.io/go/instagram\" target=\"blank\" style=\"text-decoration: none;\">\n            <img src=\"https://assets.mlcdn.com/ml/images/icons/default/rounded_corners/black/instagram.png\" width=\"18\" alt=\"instagram\">\n        </a>\n    </td>\n</tr>\n</tbody></table>\n</td>\n</tr>\n</tbody></table>\n</td>\n<td class=\"col\" width=\"40\" height=\"30\" style=\"line-height: 30px;\"></td>\n<td class=\"col\" align=\"left\" width=\"250\" valign=\"top\" style=\"text-align: left!important;\">\n\n<p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 14px; line-height: 150%; margin-bottom: 6px; display: inline-block;\">\n@if ($layout != 'welcome')\n<i>This email was automatically sent to you by <a href=\"https://kanka.io\">Kanka.io</a>.</i>\n@else\n{{ __('emails/welcome/2024.why') }}\n@endif\n</p>\n</td>\n</tr>\n</tbody></table>\n</td>\n</tr>\n<tr>\n<td height=\"20\" style=\"line-height: 20px;\"></td>\n</tr>\n</tbody>\n</table>\n</td>\n</tr>\n</tbody></table>\n"
  },
  {
    "path": "resources/views/emails/2024/header.blade.php",
    "content": "<table class=\"ml-default\" width=\"100%\" bgcolor=\"\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody><tr>\n<td style=\"\">\n<table class=\"container ml-4 ml-default-border\" width=\"640\" bgcolor=\"#ffffff\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"width: 640px; min-width: 640px;\">\n<tbody><tr>\n<td class=\"ml-default-border container\" height=\"20\" style=\"line-height: 20px; min-width: 640px;\"></td>\n</tr>\n<tr>\n<td>\n<table align=\"center\" width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody><tr>\n<td class=\"row\" align=\"left\" style=\"padding: 0 50px;\">\n<a href=\"{{ route('home', ['utm_source' => $utmSource ?? 'welcome', 'utm_medium' => 'email']) }}\">\n<img src=\"https://kanka-app-assets.s3.eu-central-1.amazonaws.com/emails/emblem-colors-small.png\" border=\"0\" alt=\"\" width=\"120\"  style=\"max-width: 120px; display: inline-block;\">\n</a>\n</td>\n</tr>\n</tbody></table>\n</td>\n</tr>\n<tr>\n<td height=\"30\" style=\"line-height: 30px;\"></td>\n</tr>\n</tbody>\n</table>\n</td>\n</tr>\n</tbody>\n</table>\n"
  },
  {
    "path": "resources/views/emails/activity/email-change-md.blade.php",
    "content": "<x-mail::message>\n# Updated Email\n\n{{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n\n{{ __('emails/activity/email.first', [\n    'email' => '[' . $user->email . '](mailto:' . $user->email . ')'\n]) }}\n\n{!! __('emails/activity/password.help', [\n    'email' => '[' . config('app.email') . '](mailto:' . config('app.email') . ')'\n]) !!}\n\n_Jay & Jon_\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/activity/password.blade.php",
    "content": "<x-mail::message>\n# New password\n\n{{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n\n{{ __('emails/activity/password.first') }}\n\n{!! __('emails/activity/password.help', [\n    'email' => '[' . config('app.email') . '](mailto:' . config('app.email') . ')'\n]) !!}\n\n_Jay & Jon_\n\n</x-mail::message>\n\n"
  },
  {
    "path": "resources/views/emails/base.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\n    <link href=\"https://fonts.googleapis.com/css2?family=Open+Sans&display=swap\" rel=\"stylesheet\">\n</head>\n<body>\n<style>\n    body {\n        padding: 0;\n        margin: 0;\n    }\n    .primary {\n        padding-bottom: 20px;\n        font-family: 'Open Sans', sans-serif;\n        background-color: #eee;\n    }\n    .content {\n        border-radius: 15px;\n        max-width: 700px;\n        background-color: #fff;\n        padding: 20px;\n        margin: -200px auto 60px auto;\n        left: 0;\n        right: 0;\n    }\n    .header {\n        height: 420px !important;\n    }\n    .footer {\n        text-align: center;\n        padding-top: 20px;\n        padding-bottom: 20px;\n        background-color: #eee;\n        margin-top: 35px;\n        border-radius: 5px;\n        font-size: 0.8rem;\n    }\n\n    .social {\n        margin-right: 5px;\n        margin-left: 5px;\n        color: white;\n    }\n\n    .mail-btn {\n        padding: 10px 20px;\n        border-radius: 20px;\n        background-color: #1919ad;\n        color: #efefef;\n        text-decoration: none;\n        margin: 20px 0;\n        display: inline-block;\n    }\n    .main-btn:hover {\n        font-weight: 900;\n    }\n\n    @media(max-width: 992px) {\n        .content {\n            width: auto;\n            margin: 0 10%;\n        }\n    }\n    @media(max-width: 768px) {\n        .content {\n            width: auto;\n            margin: 0 5%\n        }\n    }\n</style>\n<div class=\"primary\">\n\n    <div class=\"header\" style=\"background-image: url(https://kanka-app-assets.s3.amazonaws.com/emails/email-banner.jpg); background-position: top center; background-size: cover; width: 100%; height: 220px; text-align: center;\">\n        <a href=\"{{ route('home', ['utm_source' => ($utmSource ?? 'notification'), 'utm_medium' => 'email', 'utm_campaign' => ($utmCampaign ?? 'notification')]) }}\">\n            <img src=\"https://th.kanka.io/cHKXasGfCKw8sQTzvc2ujNmni_A=/120x120/smart/src/app/logos/kanka-logo-large.png\" alt=\"Kanka logo\" title=\"Kanka logo\" style=\"margin: 50px;\" width=\"120px\" height=\"120px\">\n        </a>\n    </div>\n\n    <div class=\"content\" style=\"background-color: #fff; padding: 20px;\">\n        @yield('content')\n\n        <div class=\"footer\">\n            <p>\n                <a href=\"https://kanka.io/go/discord\" class=\"social\" target=\"discord\" title=\"Discord\" rel=\"noreferrer\">\n                    <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/socials/discord-brands.png\" /></a>\n                <a href=\"https://kanka.io/go/facebook\" class=\"social\" target=\"facebook\" title=\"Facebook\" rel=\"noreferrer\">\n                    <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/socials/facebook-brands.png\" /></a>\n                <a href=\"https://kanka.io/go/instagram\" class=\"social\" target=\"instagram\" title=\"Instagram\" rel=\"noreferrer\">\n                    <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/socials/instagram-brands.png\" /></a>\n                <a href=\"https://kanka.io/go/youtube\" class=\"social\" target=\"youtube\" title=\"Youtube\" rel=\"noreferrer\">\n                    <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/socials/youtube-brands.png\" /></a>\n                <a href=\"https://kanka.io/go/twitter\" class=\"social\" target=\"twitter\" title=\"Twitter\" rel=\"noreferrer\">\n                    <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/socials/twitter-brands.png\" /></a>\n            </p>\n\n            @if (!empty($user))\n                <i>This email was automatically sent to {{ $user->email }} by <a href=\"https://kanka.io\">Kanka.io</a>.</i>\n            @endif\n\n            <p class=\"copy\">Copyright &copy; {{ date('Y') }} Owlchester SNC</p>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/emails/purge/first/md.blade.php",
    "content": "<x-mail::message>\n{{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n\n@if (!empty($campaigns))\n{{ __('emails/purge/first.intro_campaigns', [\n'amount' => config('purge.users.first.limit'),\n'duration' => config('purge.users.first.inactivity'),\n]) }} {{ __('emails/purge/first.warning.campaigns', [\n'email' => $user->email\n]) }}\n\n@foreach ($campaigns as $campaign)\n- [{{ $campaign->name }}]({{ route('dashboard', $campaign) }})\n@endforeach\n@else\n{{ __('emails/purge/first.intro_account', [\n'amount' => config('purge.users.first.limit'),\n'duration' => config('purge.users.first.inactivity')\n]) }} {{ __('emails/purge/first.warning.account', [\n'email' => $user->email\n]) }}\n\n@endif\n\n{{ __('emails/purge/first.keep', ['amount' => config('purge.users.first.limit')]) }}\n\n{{ __('emails/purge/first.assure') }}\n\n{!! __('emails/purge/first.help', [\n'discord' => '[Discord](https://kanka.io/go/discord)',\n'email' => '[' . config('app.email') . '](mailto:' . config('app.email') . ')',\n]) !!}\n\n_Jay & Jon_\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/purge/second/md.blade.php",
    "content": "<x-mail::message>\n{{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n\n{{ __('emails/purge/second.intro', [\n'amount' => config('purge.users.second.limit'),\n'duration' => config('purge.users.first.inactivity'),\n'email' => $user->email\n]) }}\n@if (!empty($campaigns))\n{{ __('emails/purge/first.warning.campaigns', [\n'email' => $user->email\n]) }}\n@foreach ($campaigns as $campaign)\n- [{{ $campaign->name }}]({{ route('dashboard', $campaign) }})\n@endforeach\n@else\n{{ __('emails/purge/first.warning.account', [\n'email' => $user->email\n]) }}\n@endif\n\n{{ __('emails/purge/first.keep', ['amount' => config('purge.users.second.limit')]) }}\n\n{{ __('emails/purge/first.assure') }}\n\n{!! __('emails/purge/first.help', [\n'discord' => '[Discord](https://kanka.io/go/discord)',\n'email' => '[' . config('app.email') . '](mailto:' . config('app.email') . ')',\n]) !!}\n\n_Jay & Jon_\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/cancelled/md.blade.php",
    "content": "<x-mail::message layout=\"admin\">\n# Subscription cancellation\n\n[{{ $user->name }}](https://admin.kanka.io/users/{{ $user->id }}) cancelled.\n\n**Reason:**\n\n{{ __('settings.subscription.cancel.options.' . ($cancellation->reason === 'custom' ? 'other' : $cancellation->reason)) }}\n\n@if (!empty($cancellation->secondary))\n**Secondary:**\n\n{{ __('subscriptions/cancellation.secondary.' . $cancellation->reason . '.' . $cancellation->secondary) }}\n@endif\n\n@if (!empty($cancellation->custom))\n**Custom:**\n\n> {!! nl2br(e($cancellation->custom)) !!}\n@endif\n\n**Subscribed since:**\n\n{{ $user->subscription('kanka')?->created_at->isoFormat('MMMM D, Y') }}\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/cancelled/user-md.blade.php",
    "content": "<x-mail::message>\n**Cancellation confirmation**\nWe're sorry to see you go, {{ $user->name }}. You’re always welcome to rejoin our party and renew your subscription at any time to:\n\n- Regain access to all your changes, exactly the way you left them\n- Ad free experience\n- Increased upload size\n- [And way more](https:{{ \\App\\Facades\\Domain::toFront('pricing')  }})\n\nThis email serves as confirmation that you have cancelled the renewal of your **{{ $cancellation->tier }}** subscription on Kanka. You will continue to have access to your subscription bonuses until **{{ $user->subscription('kanka')?->ends_at?->isoFormat('MMMM D, Y') }}**.\n\nThank you for being part of our community!\n\n__Jay & Jon__\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/changed/md.blade.php",
    "content": "<x-mail::message layout=\"admin\">\n# Subscription change\n\nChanged subscription for {{ $user->pledge }} [{{ $user->name }}](https://admin.kanka.io/users/{{ $user->id }}) (#{{ $user->id }}) [{{ $user->email }}](mailto:{{ $user->email }})\n\n@if (!empty($custom))\n**Reason provided:**\n\n{!! nl2br(e($custom)) !!}\n\n@elseif (!empty($reason))\n**Reason provided:**\n\n{{ __('settings.subscription.cancel.options.' . $reason) }}\n\n@endif\n</x-mail::message>"
  },
  {
    "path": "resources/views/emails/subscriptions/charge-failed/user-md.blade.php",
    "content": "<x-mail::message>\n\n# Subscription issue\n\n{{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n\nThis is an automatic notification. We were unable to charge your card for your Kanka subscription. Our system will try again in a few days.\n\nIn the meantime, please verify your card details in your [billing information](https://app.kanka.io/settings/billing/payment-method?s=charge-failed\"). If we are unable to charge your card, we'll unfortunately have to cancel your subscription to Kanka.\n\n{{ __('emails/subscriptions/upcoming.closing') }}\n\n__Jay & Jon__\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/deleted/user-html.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\n    <link href=\"https://fonts.googleapis.com/css2?family=Open+Sans&display=swap\" rel=\"stylesheet\">\n</head>\n<body>\n    <p>\n        Dear {{ $user->name }},\n    </p>\n    <p>We're having trouble charging your payment method. Please verify your details in your Kanka account and update them if necessary. We'll try again in a few days. If the charge fails 3 times, your subscription will be automatically cancelled.\n    </p>\n    <p>The Kanka Team</p>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/expiring/user-md.blade.php",
    "content": "<x-mail::message>\n\n# {{ __('emails/subscriptions/expiring.title') }}\n\n{{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n\n{{ __('emails/subscriptions/expiring.primary', [\n'brand' => ucfirst($user->pm_type),\n'last' => $user->pm_last_four,\n]) }}\n\n{!! __('emails/subscriptions/expiring.valid', ['action' => '[' . __('emails/subscriptions/expiring.action') . '](' . route('billing.payment-method') . ')']) !!}\n\n{{ __('emails/subscriptions/upcoming.closing') }}\n\n__Jay & Jon__\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/failed/user-html.blade.php",
    "content": "@extends('emails.base', [\n    'utmSource' => 'subscription',\n    'utmCampaign' => 'expiring-card'\n])\n\n@section('content')\n    <p>\n        <strong>Subscription issue</strong>\n    </p>\n    <p>\n        {{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n    </p>\n    <p>\n        This is an automatic notification. We tried and failed to charge your card three times, and subsequently your subscription has been automatically cancelled. We hope to see you back soon!\n    </p>\n\n    <p>\n        {{ __('emails/subscriptions/upcoming.closing') }}<\n        The Kanka Team\n    </p>\n@endsection\n"
  },
  {
    "path": "resources/views/emails/subscriptions/new/elemental.blade.php",
    "content": "<x-mail::message>\n\nHi {{ $user->name }},\n\nThank you for becoming an {{ $tier->name }}! We just wanted to write a few words to let you know that we appreciate your support, and that we’re here if you need anything. You can contact us via email, or you can also link your Kanka account to [Discord](https://kanka.io/go/discord) in your [account settings]({{ route('settings.apps') }}), and get access to the exclusive {{ $tier->name }} channel there.\n\nYou can now enjoy Kanka with bigger upload sizes, vote on the [roadmap]({{ route('roadmap') }}), and [premium campaigns]({{ route('settings.premium') }}).\n\n<x-mail::button url=\"{{ route('settings.premium', ['utm_source' => 'newsletter', 'utm_medium' => 'email', 'utm_campaign' => $tier->code]) }}\" color=\"blue\">\nUnlock premium features\n</x-mail::button>\n\nPart of being an Elemental means that you get more say in how we shape community votes. If you have any priorities that you would like to see added, feel free to share them with us, and we will see how we can fit them into the votes, or if they overlap with requests made by other Elementals.\n\nGood to have you among us {{ $user->name }},\n\n__Jay & Jon__\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/new/md.blade.php",
    "content": "<x-mail::message layout=\"admin\">\n@if ($trial)\n# Free trial conversion\n@else\n# New subscription\n@endif\n\n- **User ID:** {{ $user->id }}\n- **Username:** [{{ $user->name }}](https://admin.kanka.io/users/{{ $user->id }})\n- **Email:** {{ $user->email }}\n- **Account age:** {{ $user->created_at->diffForHumans() }} ({{ $user->created_at->format('d.m.Y') }})\n- **Subscription tier:** {{ $user->pledge ?? 'N/A' }}\n- **Subscription currency:** {{ $user->currencySymbol() }}\n- **User country:** {{ $country ?? 'N/A' }}\n\n@if ($trial)\n- **Trial started:** {{ $trial->created_at->format('d.m.Y') }}\n@endif\n\n@if ($lastCancel)\n---\n\n### Previous subscription info\n\n- **Previously cancelled:** {{ $lastCancel->tier }}  \n  {{ $lastCancel->created_at->diffForHumans() }} ({{ $lastCancel->created_at->format('d.m.Y') }})\n\n- **Reason provided:**  \n  {{ $lastCancel->reason }}\n\n@if (!empty($lastCancel->custom))\n- **Custom message:**  \n  {!! nl2br(e($lastCancel->custom)) !!}\n@endif\n@endif\n\n@if ($discord = $user->apps->where('app', 'discord')->first())\n- **Discord:** {{ $discord->settings['username'] }}\n@endif\n\n@if ($user->referrer)\n- **Referred by:** [{{ $user->referrer->name }}](https://admin.kanka.io/users/{{ $user->referrer->id }})\n@endif\n\n@if (!empty($user->settings['tracking']))\n- **Ad campaign:**  \n  {{ is_array($user->settings['tracking']) ? collect($user->settings['tracking'])->implode(' ') : $user->settings['tracking'] }}\n@endif\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/new/owlbear.blade.php",
    "content": "\n<x-mail::message>\n\nHi {{ $user->name }},\n\nThank you for becoming a {{ $tier->name }}! We just wanted to write a few words to let you know that we appreciate your support, and that we’re here if you need anything. You can contact us via email, or you can also link your Kanka account to [Discord](https://kanka.io/go/discord) in your [account settings]({{ route('settings.apps') }}), and get access to the exclusive {{ $tier->name }} channel there.\n\nYou can now enjoy Kanka with bigger upload sizes, vote on the [roadmap]({{ route('roadmap') }}), and [premium campaigns]({{ route('settings.premium') }}).\n\n<x-mail::button url=\"{{ route('settings.premium', ['utm_source' => 'newsletter', 'utm_medium' => 'email', 'utm_campaign' => $tier->code]) }}\" color=\"blue\">\nUnlock premium features\n</x-mail::button>\n\nGood to have you among us {{ $user->name }},\n\n__Jay & Jon__\n\n</x-mail::message>\n\n"
  },
  {
    "path": "resources/views/emails/subscriptions/new/wyvern.blade.php",
    "content": "<x-mail::message>\n\nHi {{ $user->name }},\n\nThank you for becoming a {{ $tier->name }}! We just wanted to write a few words to let you know that we appreciate your support, and that we’re here if you need anything. You can contact us via email, or you can also link your Kanka account to [Discord](https://kanka.io/go/discord) in your [account settings]({{ route('settings.apps') }}), and get access to the exclusive {{ $tier->name }} channel there.\n\nYou can now enjoy Kanka with bigger upload sizes, vote on the [roadmap]({{ route('roadmap') }}), and [premium campaigns]({{ route('settings.premium') }}).\n\n<x-mail::button url=\"{{ route('settings.premium', ['utm_source' => 'newsletter', 'utm_medium' => 'email', 'utm_campaign' => $tier->code]) }}\" color=\"blue\">\nUnlock premium features\n</x-mail::button>\n\nGood to have you among us {{ $user->name }},\n\n__Jay & Jon__\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/paypal-expiring/user.blade.php",
    "content": "<x-mail::message>\n\n{{ __('emails/subscriptions/paypal-expiring.dear', ['name' => $user->name]) }},\n\n{{ __('emails/subscriptions/paypal-expiring.intro', ['date' => $expiryDate]) }}\n\n{{ __('emails/subscriptions/paypal-expiring.loss.title') }}\n\n@if ($premiumCampaignName)\n- {{ trans_choice('emails/subscriptions/paypal-expiring.loss.campaign', $premiumCampaignCount - 1, ['campaign' => $premiumCampaignName, 'count' => $premiumCampaignCount - 1]) }}\n@if ($players > 0)\n  - {{ trans_choice('emails/subscriptions/paypal-expiring.loss.players', $players, ['count' => $players]) }}\n@endif\n@if ($plugins > 0)\n  - {{ trans_choice('emails/subscriptions/paypal-expiring.loss.plugins', $plugins, ['count' => $plugins]) }}\n@endif\n@endif\n- {{ __('emails/subscriptions/paypal-expiring.loss.ads') }}\n@if ($discord)\n- {{ __('emails/subscriptions/paypal-expiring.loss.discord', ['role' => $user->pledge]) }}\n@endif\n\n<x-mail::button :url=\"$renewUrl\">\n{{ __('emails/subscriptions/paypal-expiring.cta') }}\n</x-mail::button>\n\n{{ __('emails/subscriptions/paypal-expiring.closing') }}\n\n__Jay & Jon__\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/trial/md.blade.php",
    "content": "<x-mail::message layout=\"admin\">\n# New subscription trial accepted\n\nNew subscription trial for user [{{ $user->name }}](https://admin.kanka.io/users/{{ $user->id }}) (#{{ $user->id }}) {{ $user->email }}.\n\nAccount created {{ $user->created_at->diffForHumans() }} ({{ $user->created_at->format('d.m.Y') }}).\n\n@if ($discord = $user->apps->where('app', 'discord')->first())\nDiscord: {{ $discord->settings['username'] }}\n\n@endif\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/upcoming/user.blade.php",
    "content": "<x-mail::message>\n\n{{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n\n{{ __('emails/subscriptions/upcoming.primary', [\n    'brand' => ucfirst($user->pm_type),\n    'last' => $user->pm_last_four,\n    'date' => now()->addDays(15)->isoFormat('MMMM D, Y')\n]) }}\n\n{{ __('emails/subscriptions/upcoming.notice') }}\n\n{{ __('emails/subscriptions/upcoming.valid') }}\n\n{!! __('emails/subscriptions/upcoming.cancel', ['link' =>  '[' . __('emails/subscriptions/upcoming.link') . '](' . route('settings.subscription') . ')']) !!}\n\n{{ __('emails/subscriptions/upcoming.closing') }}\n\n__Jay & Jon_\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/subscriptions/validation/user-html.blade.php",
    "content": "@extends('emails.base', [\n    'utmSource' => 'validation',\n    'utmCampaign' => 'failed-charge'\n])\n\n@section('content')\n    <p>\n        <strong>Email Validation</strong>\n    </p>\n    <p>\n        {{ __('emails/subscriptions/upcoming.dear', ['name' => $user->name]) }},\n    </p>\n\n    <p>This is an automatic notification.</p>\n    <p>To validate the email for your Kanka account click <a href=\"{{ $url }}\">here</a>. This link will expire in 24 hours.</p>\n    <p>If the above link doesnt work, open the following URL in your web browser {{ $url }}</p>\n    <p>\n        {{ __('emails/subscriptions/upcoming.closing') }}<br />\n        The Kanka Team\n    </p>\n\n@endsection\n"
  },
  {
    "path": "resources/views/emails/welcome/2024/html.blade.php",
    "content": "@extends('emails.2024.base', [\n    'utmSource' => 'welcome',\n    'utmCampaign' => 'onboarding'\n])\n\n@section('content')\n\n    <div style=\"display: none\"></div>\n\n    <!-- heading -->\n    <table class=\"ml-default\" width=\"100%\" bgcolor=\"\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n        <tbody><tr>\n            <td style=\"\">\n                <table class=\"container ml-6 ml-default-border\" width=\"640\" bgcolor=\"#ffffff\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"color: #515856; width: 640px; min-width: 640px;\">\n                    <tbody><tr>\n                        <td class=\"ml-default-border container\" height=\"20\" style=\"line-height: 20px; min-width: 640px;\"></td>\n                    </tr>\n                    <tr>\n                        <td class=\"row\" style=\"padding: 0 50px;\">\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"></p><h1 style=\"font-family: 'Inter', sans-serif; color: #000000; font-size: 28px; line-height: 125%; font-weight: bold; font-style: normal; text-decoration: none; ;margin-bottom: 10px; text-align: center;\">{!! __('emails/welcome/2024.header', ['name' => $user->name]) !!}</h1>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"></p>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\">{!! __('emails/welcome/2024.lead_1', ['name' => $user->name]) !!}</p>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"></p>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\">{!! __('emails/welcome/2024.lead_2', ['name' => $user->name]) !!}</p>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 0;\"></p>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td height=\"20\" style=\"line-height: 20px;\"></td>\n                    </tr>\n                    </tbody></table>\n            </td>\n        </tr>\n        </tbody>\n    </table>\n\n    <!-- useful links -->\n    <table class=\"ml-default\" width=\"100%\" bgcolor=\"\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n        <tbody><tr>\n            <td style=\"\">\n                <table class=\"container ml-11 ml-default-border\" width=\"640\" bgcolor=\"#404790\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"color: #ffffff; width: 640px; min-width: 640px;\">\n                    <tbody><tr>\n                        <td class=\"ml-default-border container\" height=\"20\" style=\"line-height: 20px; min-width: 640px;\"></td>\n                    </tr>\n                    <tr>\n                        <td class=\"row\" style=\"padding: 0 50px;\">\n                            <p style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"></p>\n                            <h2 style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 28px; line-height: 125%; font-weight: bold; font-style: normal; text-decoration: none; ;margin-bottom: 10px; text-align: center;\"><strong>{{ __('emails/welcome/2024.what_now') }}</strong></h2>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"></p>\n                            <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\">\n                                {!! __('emails/welcome/2024.what_1', [\n    'start' => '<a href=\"' . route('start', ['utm_source' => 'welcome', 'utm_medium' => 'email']) . '\" style=\"color: #2CB191; font-weight: normal; font-style: normal; text-decoration: underline;\"><strong>' . __('emails/welcome/2024.what_new') . '</strong></a>'\n    ]) !!}\n                            <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\">{{ __('emails/welcome/2024.what_2') }}</p>\n                            <ul style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\">\n                                <li dir=\"ltr\">\n                                    <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 0;\">{!! __('emails/welcome/2024.what_3', ['kb' => '<a href=\"https://kanka.io/kb?utm_source=welcome&utm_medium=email\" style=\"color: #2CB191; font-weight: normal; font-style: normal; text-decoration: underline;\"><strong>' . __('footer.kb') . '</strong></a>']) !!}</p>\n                                </li>\n                                <li dir=\"ltr\">\n                                    <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 0;\">{!! __('emails/welcome/2024.what_4', [\n    'doc' => '<a href=\"https://docs.kanka.io/?utm_source=welcome&utm_medium=email\" style=\"color: #2CB191; font-weight: normal; font-style: normal; text-decoration: underline;\"><strong>' . __('footer.documentation') . '</strong></a>'\n    ]) !!}</p>\n                                </li>\n                                <li dir=\"ltr\">\n                                    <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 0;\">{!! __('emails/welcome/2024.what_5', [\n    'campaigns' => '<a href=\"https://kanka.io/campaigns?utm_source=welcome&utm_medium=email\" style=\"color: #2CB191; font-weight: normal; font-style: normal; text-decoration: underline;\"><strong>' . __('footer.public-campaigns') . '</strong></a>'\n    ]) !!}</p>\n                                </li>\n                            </ul>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #ffffff; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 0;\"></p>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td height=\"20\" style=\"line-height: 20px;\"></td>\n                    </tr>\n                    </tbody>\n                </table>\n            </td>\n        </tr>\n        </tbody>\n    </table>\n\n    <!-- ending -->\n    <table class=\"ml-default\" width=\"100%\" bgcolor=\"\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n        <tbody><tr>\n            <td style=\"\">\n                <table class=\"container ml-16 ml-default-border\" width=\"640\" bgcolor=\"#ffffff\" align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"color: #515856; width: 640px; min-width: 640px;\">\n                    <tbody><tr>\n                        <td class=\"ml-default-border container\" height=\"20\" style=\"line-height: 20px; min-width: 640px;\"></td>\n                    </tr>\n                    <tr>\n                        <td class=\"row\" style=\"padding: 0 50px;\">\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"></p>\n                            <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\">\n                                {{ __('emails/welcome/2024.closing') }}</p>\n                            <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"><br></p>\n                            <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"><em>Jay &amp; Jon</em></p>\n                            <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"><br></p>\n                            <p dir=\"ltr\" style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\">{!! __('emails/welcome/2024.ps', [\n    'discord' => '<a href=\"https://kanka.io/go/discord\" style=\"color: #2CB191; font-weight: normal; font-style: normal; text-decoration: underline;\"></strong>Discord<strong></a>',\n    'email' => '<a href=\"mailto:' . config('app.email') . '\" style=\"color: #2CB191; font-weight: normal; font-style: normal; text-decoration: underline;\"><strong>' . config('app.email') . '</strong></a>',\n    ]) !!}</p>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 10px;\"><br></p>\n                            <p style=\"font-family: 'Inter', sans-serif; color: #515856; font-size: 16px; line-height: 165%; margin-top: 0; margin-bottom: 0;\"></p>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td height=\"20\" style=\"line-height: 20px;\"></td>\n                    </tr>\n                    </tbody>\n                </table>\n            </td>\n        </tr>\n        </tbody>\n    </table>\n@endsection\n"
  },
  {
    "path": "resources/views/emails/welcome/2024/text.blade.php",
    "content": "<x-mail::message layout=\"welcome\">\n\n# **{!! __('emails/welcome/2024.header', ['name' => $user->name]) !!}**\n\n{!! __('emails/welcome/2024.lead_1') !!}\n\n{!! __('emails/welcome/2024.lead_2') !!}\n\n\n<x-mail::panel>\n\n## **{!! __('emails/welcome/2024.what_now') !!}**\n\n{!! __('emails/welcome/2024.what_1', [\n    'start' => __('emails/welcome/2024.what_new'),\n]) !!}\n\n\n{!! __('emails/welcome/2024.what_2') !!}\n\n- {!! __('emails/welcome/2024.what_3', [\n    'kb' => '[' . __('footer.kb') . '](' . \\App\\Facades\\Domain::toFront('kb') . ')',\n]) !!}\n- {!! __('emails/welcome/2024.what_4', [\n    'doc' => '[' . __('footer.documentation') . '](https://docs.kanka.io/en/latest/index.html)',\n]) !!}\n- {!! __('emails/welcome/2024.what_5', [\n    'campaigns' => '[' . __('footer.public-campaigns') . '](https://kanka.io/campaigns)',\n]) !!}\n\n</x-mail::panel>\n\n{!! __('emails/welcome/2024.closing') !!}\n\n_Jay and Jon_\n\n{!! __('emails/welcome/2024.ps', [\n    'email' => '[' . config('app.email') . '](mailto:' . config('app.email') . ')',\n    'discord' => '[Discord](https://kanka.io/go/discord)',\n]) !!}\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/emails/welcome/html.blade.php",
    "content": "@extends('emails.base', [\n    'utmSource' => 'newsletter',\n    'utmCampaign' => 'onboarding'\n])\n\n@section('content')\n    <div style=\"display: none\">{{ __('emails/welcome.2023.preview', ['name' => $user->name]) }}</div>\n\n    <p><b>{{ __('emails/welcome.2023.intro.header', [\n        'name' => $user->name\n    ]) }}</b></p>\n\n    <p>{{ __('emails/welcome.2023.intro.text_1', ['name' => $user->name]) }}</p>\n    <p>{{ __('emails/welcome.2023.intro.text_2') }}</p>\n\n    <p style=\"text-align: center;\">\n        <a href=\"{{ route('home', ['utm_source' => 'newsletter', 'utm_medium' => 'email', 'utm_campaign' => 'onboarding']) }}\" class=\"mail-btn\">{{ __('emails/welcome.2023.intro.link') }}</a>\n    </p>\n\n    <p><b>{{ __('emails/welcome.2023.basics.title') }}</b></p>\n    <p>{!! __('emails/welcome.2023.basics.text_1', [\n        'kb' => '<a target=\"_blank\" href=\"https://kanka.io/kb\">' . __('footer.kb') . '</a>',\n        'doc' => '<a target=\"_blank\" href=\"https://docs.kanka.io/en/latest/index.html\"> ' . __('footer.documentation') . '</a>',\n    ]) !!}</p>\n\n    <p><b>{{ __('emails/welcome.2023.chat.title') }}</b></p>\n    <p>{!! __('emails/welcome.2023.chat.text_1', [\n        'discord' => '<a href=\"https://kanka.io/go/discord\">Discord</a>',\n        'email' => '<a href=\"mailto:' . config('app.email') . '\">' . config('app.email') . '</a>'\n    ]) !!}</p>\n\n    <i>Jay & Jon</i>\n@endsection\n"
  },
  {
    "path": "resources/views/emails/welcome/text.blade.php",
    "content": "\n{!! __('emails/welcome.2023.intro.text_1', [\n    'name' => $user->name,\n]) !!}\n\n{!! __('emails/welcome.2023.intro.text_2') !!}\n\n{{ __('emails/welcome.2023.basics.title') }}\n\n{!! __('emails/welcome.2023.basics.text_1', [\n    'kb' => __('footer.kb') . ' (' . \\App\\Facades\\Domain::toFront('kb') . ')',\n    'doc' => __('footer.documentation') . ' (https://docs.kanka.io/en/latest/index.html)',\n]) !!}\n\n{{ __('emails/welcome.2023.chat.title') }}\n\n{!! __('emails/welcome.2023.chat.text_1', [\n    'email' => config('app.email'),\n    'discord' => 'Discord (https://kanka.io/go/discord)',\n]) !!}\n\n\nJay & Jon\n\n\n"
  },
  {
    "path": "resources/views/entities/components/_files.blade.php",
    "content": "@foreach ($entity->files as $file)\n    <a href=\"{{ Storage::url($file->path) }}\" target=\"_blank\" class=\"entity-file text-link\">\n        {{ $file->name }}\n    </a>\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/components/assets.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\EntityAsset $asset\n */\n?>\n@foreach ($entity->pinnedFiles as $asset)\n    @if ($asset->hiddenImage()) @continue @endif\n    @if ($asset->isAudio())\n        <div class=\"pinned-asset child icon\" data-asset=\"{{ \\Illuminate\\Support\\Str::slug($asset->name) }}\" data-target=\"{{ $asset->id }}\">\n                <x-icon class=\"fa-regular fa-file-music\" />\n                {!! $asset->name !!}\n            <audio controls preload=\"none\" class=\"music-player w-full h-8\" onloadstart=\"this.volume=0.25\">\n                <source src=\"{{ $asset->url() }}\" type=\"{{ $asset->metadata['type'] }}\">\n            </audio>\n        </div>\n    @else\n        <a href=\"{{ $asset->url() }}\" target=\"_blank\" class=\"pinned-asset child icon\" data-asset=\"{{ \\Illuminate\\Support\\Str::slug($asset->name) }}\" data-target=\"{{ $asset->id }}\">\n            {!! $asset->name !!}\n        </a>\n    @endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/components/attributes.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Attribute $attribute\n * @var \\App\\Models\\Entity $entity\n */\n$attributes = $entity->starredAttributes();\n?>\n@if (count($attributes) > 0)\n    @foreach ($attributes as $attribute)\n        <div class=\"pinned-attribute flex gap-2 flex-wrap @if ($attribute->isSection()) border-t pinned-attribute-section text-center @elseif ($attribute->value == null) pinned-attribute-empty @endif\" data-attribute=\"{{ $attribute->name }}\" data-target=\"{{ $attribute->id }}\" @if ($attribute->is_private) data-private=\"true\" @endif>\n            <strong>\n                {!! $attribute->name() !!}\n            </strong>\n            @if ($attribute->isCheckbox())\n                <span class=\"live-edit grow text-right\" data-id=\"{{ $attribute->id }}\">\n                @if ($attribute->value)\n                    <x-icon class=\"fa-regular fa-check \" />\n                @else\n                    <span class=\"\">\n                        {{ __('general.no') }}\n                    </span>\n                @endif\n                </span>\n            @elseif ($attribute->isText())\n                <p class=\"m-0 grow w-full live-edit @if (trim($attribute->value) === '') empty-value @endif\" data-id=\"{{ $attribute->id }}\">\n                    {!! nl2br($attribute->mappedValue()) !!}\n                </p>\n            @elseif (!$attribute->isSection())\n                <p class=\"live-edit @if (trim($attribute->value) === '') empty-value @endif text-right grow m-0 inline-block\" data-id=\"{{ $attribute->id }}\">\n                    {!! $attribute->mappedValue() !!}\n                </p>\n            @endif\n        </div>\n    @endforeach\n    <input type=\"hidden\" name=\"live-attribute-config\" data-live=\"{{ route('entities.attributes.live.edit', [$campaign, $entity]) }}\" />\n@endif\n\n@section('scripts')\n    @parent\n    @vite('resources/js/attributes.js')\n@endsection\n\n@section('modals')\n    @parent\n    <x-dialog id=\"live-attribute-dialog\" :loading=\"true\"></x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/components/calendar.blade.php",
    "content": "<?php /** @var \\App\\Models\\MiscModel $model */ ?>\n@if ($entity->hasCalendar() && $model->calendar)\n    <p>\n        <b>\n            {{ __('crud.fields.calendar_date') }}\n        </b><br />\n        <a href=\"{{ route('calendars.show', [$campaign, $model->calendar, 'year' => $model->calendar_year, 'month' => $model->calendar_month]) }}\" class=\"text-link\">{{ $model->calendar->name }}</a>\n        <x-date :date=\"$entity->getDate()\" />\n    </p>\n@endif\n"
  },
  {
    "path": "resources/views/entities/components/elasped_events.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\EntityEvent $event\n* @var \\App\\Models\\EntityEvent|null $birth\n* @var \\App\\Models\\EntityEvent|null $death\n* @var \\App\\Models\\EntityEvent[] $elapsed\n* @var \\App\\Models\\Entity $entity\n*/\n$elapsed = $entity->elapsedEvents;\n\n// Prepare the birth and death events\n$distinctCalendars = [];\n$birth = null;\n$death = null;\nforeach ($elapsed as $event) {\n    if (empty($event->calendar) || $event->isCalendarDate()) {\n        continue;\n    }\n    if ($event->isBirth()) {\n        $distinctCalendars[$event->calendar_id]['birth'] = $event;\n    } elseif ($event->isDeath()) {\n        if (!isset($distinctCalendars[$event->calendar_id]['death'])) {\n            $distinctCalendars[$event->calendar_id]['death'] = $event;\n            continue;\n        }\n\n        // Already have a death? Take the new one if it's older\n        $older = false;\n        /** @var \\App\\Models\\EntityEvent $previous */\n        $previous = $distinctCalendars[$event->calendar_id]['death'];\n        if ($previous->year < $event->year) {\n            $older = true;\n        } elseif ($previous->year == $event->year) {\n            if ($previous->month < $event->month) {\n                $older = true;\n            } elseif ($previous->month == $event->month) {\n                if ($previous->day < $event->day) {\n                    $older = true;\n                }\n            }\n        }\n\n        if ($older) {\n            $distinctCalendars[$event->calendar_id]['death'] = $event;\n        }\n    }\n}\n?>\n@foreach ($distinctCalendars as $calendarId => $calendarEvents)\n    @php\n    /**\n     * @var \\App\\Models\\EntityEvent|null $birth\n     * @var \\App\\Models\\EntityEvent|null $death\n     */\n    $birth = $calendarEvents['birth'] ?? null;\n    $death = $calendarEvents['death'] ?? null;\n    @endphp\n    @if (!empty($birth) && !empty($death))\n        <li class=\"flex\">\n            <div class=\"grow font-bold\">{{ __('characters.fields.life') }}</div>\n            <div class=\"grow text-right\">\n                <a href=\"{{ $birth->calendar->getLink() }}?year={{ $birth->year }}&month={{ $birth->month }}\" data-title=\"{{ $birth->calendar->name }}\" data-toggle=\"tooltip\" class=\"text-link\">\n                    {{ $birth->readableDate() }}\n                </a> &#10013; <a href=\"{{ $death->calendar->getLink() }}?year={{ $death->year }}&month={{ $death->month }}\" data-title=\"{{ $death->calendar->name }}\" data-toggle=\"tooltip\" class=\"text-link\">\n                    {{ $death->readableDate() }}\n                </a> ({{ $birth->calcElapsed($death) }})\n            </div>\n        </li>\n    @elseif (!empty($birth))\n        <li class=\"flex\">\n            <div class=\"grow font-bold\">{{ __('entities/events.types.birth') }}</div>\n            <div class=\"grow text-right\">\n                <a href=\"{{ $birth->calendar->getLink() }}?year={{ $birth->year }}&month={{ $birth->month }}\" data-title=\"{{ $birth->calendar->name }}\" data-toggle=\"tooltip\" class=\"text-link\">\n                {{ $birth->readableDate() }}\n                </a> ({{ $birth->calcElapsed() }})\n            </div>\n        </li>\n    @elseif (!empty($death))\n        <li class=\"flex\">\n            <div class=\"grow font-bold\">{{ __('entities/events.types.death') }}</div>\n            <div class=\"grow text-right\">\n                <a href=\"{{ $death->calendar->getLink() }}?year={{ $death->year }}&month={{ $death->month }}\" data-title=\"{{ $death->calendar->name }}\" data-toggle=\"tooltip\" class=\"text-link\">\n                {{ $death->readableDate() }}\n                </a> ({{ $death->calcElapsed() }})\n            </div>\n        </li>\n    @endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/components/entry.blade.php",
    "content": "@if ($entity->hasEntry())\n    <article class=\"bg-box rounded-lg box-entity-entry\">\n    <div class=\"p-4 entity-content overflow-x-auto\" data-word-count=\"{{ $entity->words }}\">\n        @if (auth()->check())\n            @can('update', [$entity])\n                <div class=\"float-right ml-2 mb-2\">\n                    <a href=\"{{ route('entities.entry.edit', [$campaign, $entity]) }}\" data-title=\"{{ __('crud.edit') }}\" role=\"button\" class=\"\" data-toggle=\"tooltip\">\n                        <x-icon class=\"edit\" />\n                        <span class=\"sr-only\">{{ __('crud.edit') }}</span>\n                    </a>\n                </div>\n            @endcan\n        @endif\n        {!! $entity->parsedEntry() !!}\n        <x-word-count :count=\"$entity->words\" />\n    </div>\n</article>\n@endif\n\n@include('ads.inline', ['cta' => true])\n\n@includeWhen($entity->isCharacter() && $entity->child->is_appearance_pinned, 'characters.panels._appearance')\n@includeWhen($entity->isCharacter() && $entity->child->is_personality_pinned, 'characters.panels._personality')\n\n\n"
  },
  {
    "path": "resources/views/entities/components/header.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Tag $tag\n */\n\n$imageUrl = $imagePath = $headerImageUrl = $imagePathXL = $imagePathMobile = null;\n$imageUrl = Avatar::entity($entity)->original();\n$imagePath = Avatar::entity($entity)->size(192)->thumbnail();\n$imagePathXL = Avatar::entity($entity)->size(400)->thumbnail();\n$imagePathMobile = Avatar::entity($entity)->size(192)->thumbnail();\n$imageVisibility = $entity->image ? $entity->image->visibility_id : null;\n$imageClass = (!empty($imageVisibility) ? 'visibility-' . strtolower($imageVisibility->name) : null);\n$entityType = $entityType ?? $entity->entityType;\n\n$addTagsUrl = route('entity.tags-add', [$campaign, $entity]);\n\n/** @var \\App\\Models\\Tag[] $entityTags */\n$entityTags = $entity->visibleTags();\n\n$buttonsClass = 1;\n$headerStatus = $entity->status;\nif ($headerStatus && $headerStatus->icon) {\n    $buttonsClass++;\n}\nif (auth()->check() && auth()->user()->isAdmin()) {\n    $buttonsClass ++;\n}\n\n$hasBanner = false;\nif($campaign->boosted() && $entity->hasHeaderImage()) {\n    $hasBanner = true;\n    $headerImageUrl = $entity->getHeaderUrl();\n    $headerImageSquare = $entity->getHeaderUrl(400, 400);\n    $headerImageS = $entity->getHeaderUrl(800, 267);\n    $headerImageM = $entity->getHeaderUrl(1200, 400);\n    $headerImageL = $entity->getHeaderUrl(1800, 400);\n    $headerImageXL = $entity->getHeaderUrl(2400, 400);\n\n}\n\n$breadcrumb = Breadcrumb::campaign($campaign)->entity($entity)->list();\n\n?>\n<div class=\"w-full h-full entity-header flex-wrap md:flex-no-wrap flex gap-2 md:gap-5 items-end relative @if ($hasBanner) with-entity-banner p-4 text-white aspect-3/1 xl:aspect-auto @endif\">\n    @if ($imageUrl)\n    <div class=\"entity-header-image relative w-28 flex-none md:w-48 self-start md:self-auto z-10\">\n\n        @can('update', $entity)\n            @if(isset($printing) && $printing)\n                <img src=\"{{ $imagePath }}\" class=\"entity-print-image\" alt=\"{{ $entity->name }}\"/>\n            @endif\n\n            @if (!isset($printing))\n            <a class=\"cursor-pointer relative cover-background sm:hidden\" href=\"{{ $imageUrl }}\" target=\"_blank\" aria-label=\"Open original image\">\n                <img src=\"{{ $imagePathMobile }}\" loading=\"lazy\" alt=\"{{ $entity->name }}\" class=\"w-28 \" />\n            </a>\n            @endif\n            <div class=\"dropdown\">\n                <div class=\"cursor-pointer hidden sm:block print-none entity-picture relative {{ $imageClass }}\" data-dropdown aria-expanded=\"false\">\n                    @if ($imageVisibility && $imageVisibility !== \\App\\Enums\\Visibility::All)\n                        <div class=\"absolute bottom-0 right-0 flex items-center justify-center w-6 h-6\" data-toggle=\"tooltip\" data-title=\"{{ __('entities/image.gallery_permissions.' . strtolower($entity->image->visibility_id->name), ['admin' => $campaign->adminRoleName(), 'creator' => $entity->image->creator?->name]) }}\">\n                            <x-icon :class=\"$entity->image->visibilityIcon()['class']\" />\n                        </div>\n                    @endif\n                    <picture class=\"\">\n                        <source media=\"(min-width:766px)\" srcset=\"{{ $imagePathXL }}\" class=\"\">\n                        <img src=\"{{ $imagePath }}\" alt=\"{{ $entity->name }}\" class=\"w-auto\">\n                    </picture>\n                </div>\n\n                <div class=\"dropdown-menu hidden\" role=\"menu\">\n                    <x-dropdowns.item\n                        :link=\"$imageUrl\"\n                        icon=\"link\"\n                        target=\"_blank\">\n                        {{ __('entities/image.actions.view') }}\n                    </x-dropdowns.item>\n                    <x-dropdowns.item\n                        link=\"#\"\n                        icon=\"fa-regular fa-copy\"\n                        :data=\"['clipboard' => $imageUrl, 'toast' => __('entities/image.actions.copy_url_success')]\">\n                        {{ __('entities/image.actions.copy_url') }}\n                    </x-dropdowns.item>\n                    <x-dropdowns.divider />\n                    <x-dropdowns.item\n                        icon=\"fa-regular fa-shuffle\"\n                        :link=\"route('entities.image.replace', [$campaign, $entity])\"\n                        :dialog=\"route('entities.image.replace', [$campaign, $entity])\">\n                        {{ __('entities/image.actions.replace_image') }}\n                    </x-dropdowns.item>\n\n                    @if ($campaign->boosted())\n                        <x-dropdowns.item\n                            icon=\"fa-regular fa-crosshairs\"\n                            :link=\"route('entities.image.focus', [$campaign, $entity])\">\n                            {{ __('entities/image.actions.change_focus') }}</x-dropdowns.item>\n                    @else\n                        <x-dropdowns.item\n                            link=\"#\"\n                            icon=\"fa-regular fa-crosshairs\"\n                            popup=\"booster-cta\">\n                            {{ __('entities/image.actions.change_focus') }}</x-dropdowns.item>\n                    @endif\n\n                    @if ($entity->image)\n                    <x-dropdowns.item\n                        icon=\"fa-regular fa-eye\"\n                        :link=\"route('gallery.file.visibility', [$campaign, $entity->image])\"\n                        :dialog=\"route('gallery.file.visibility', [$campaign, $entity->image])\"\n                        >\n                        {{ __('entities/image.actions.change_visibility') }}</x-dropdowns.item>\n                    @endif\n                </div>\n            </div>\n        @else\n            @if(isset($printing) && $printing)\n                <img src=\"{{ $imagePath }}\" class=\"entity-print-image\" alt=\"{{ $entity->name }}\"/>\n            @else\n            <a class=\"entity-image block\" href=\"{{ $imageUrl }}\" target=\"_blank\" >\n                <picture class=\"\">\n                    <source media=\"(min-width:766px)\" srcset=\"{{ $imagePathXL }}\" class=\"\">\n                    <img src=\"{{ $imagePathMobile }}\" alt=\"{{ $entity->name }}\" loading=\"lazy\" class=\"w-auto\">\n                </picture>\n            </a>\n            @endif\n        @endcan\n    </div>\n    @endif\n    <div class=\"entity-header-text grow flex flex-col gap-1 md:gap-2  z-10\">\n        <ol class=\"entity-breadcrumb text-sm m-0 p-0\">\n            <li class=\"inline-block\">\n                @if (!empty($bookmark))\n                    <a href=\"{{ route('entities.index', [$campaign, $entity->entityType, 'bookmark' => $bookmark->id, '_from' => 'bookmark']) }}\" class=\"\" title=\"{{ $bookmark->name }}\">\n                        {!! $bookmark->name !!}\n                    </a>\n                @else\n                    <a href=\"{{ $breadcrumb['url'] }}\" class=\"\" title=\"{{ $breadcrumb['label'] }}\">\n                        {!! $breadcrumb['label'] !!}\n                    </a>\n                @endif\n            </li>\n        </ol>\n        <div class=\"entity-name-header flex gap-3 items-center\">\n            <h1 class=\"entity-name text-lg md:text-4xl break-all\">\n                {!! $entity->name !!}\n            </h1>\n            @if ($headerStatus && $headerStatus->icon)\n                <span class=\"entity-name-icon md:text-2xl\" data-toggle=\"tooltip\" data-title=\"{{ $headerStatus->setRelation('entityType', $entity->entityType)->name() }}\">\n                    <x-icon class=\"{{ $headerStatus->icon() }} entity-icons\" />\n                    <span class=\"sr-only\">{{ $headerStatus->name() }}</span>\n                </span>\n            @endif\n            @can('admin', $campaign)\n                <span role=\"button\" tabindex=\"0\" class=\"entity-privacy-icon md:text-2xl hover:text-primary\" data-toggle=\"dialog\" data-url=\"{{ route('entities.quick-privacy', [$campaign, $entity]) }}\" aria-haspopup=\"dialog\">\n                        <i class=\"fa-regular fa-lock entity-icons\" data-title=\"{{ __('entities/permissions.quick.title') }}\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i>\n                        <i class=\"fa-regular fa-lock-open entity-icons\" data-title=\"{{ __('entities/permissions.quick.title') }}\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i>\n                        <span class=\"sr-only\">{{ __('entities/permissions.quick.screen-reader') }}</span>\n                    </span>\n            @endif\n        </div>\n\n        @if (($entity->isCharacter() || $entity->isLocation()) && !empty($entity->child->title))\n            <div class=\"entity-title entity-header-line\">\n                {!! $entity->child->title !!}\n            </div>\n        @endif\n\n        <div class=\"entity-tags entity-header-line text-xs\">\n            <div class=\"flex flex-wrap gap-2 items-center\">\n        @if($entityTags->count() > 0)\n            @foreach ($entityTags as $tag)\n                @if (!$tag->entity) @continue @endif\n                <a href=\"{{ route('entities.show', [$campaign, $tag->entity]) }}\" data-toggle=\"tooltip-ajax\"\n                   data-id=\"{{ $tag->entity->id }}\" data-url=\"{{ route('entities.tooltip', [$campaign, $tag->entity->id]) }}\"\n                   data-tag-slug=\"{{ $tag->slug }}\"\n                >\n                    @include ('tags._badge')\n                </a>\n            @endforeach\n        @endif\n            @can('update', $entity)\n                <span role=\"button\" tabindex=\"0\" class=\"entity-tag-icon text-xl hover:text-primary\" data-toggle=\"dialog\" data-url=\"{{ $addTagsUrl }}\" aria-haspopup=\"dialog\">\n                    <x-icon class=\"fa-regular fa-tag\" tooltip=\"1\" :title=\"__('entities/tags.create.title')\" />\n                    <span class=\"sr-only\">{{ __('entities/tags.create.title')  }}</span>\n                </span>\n            @endcan\n            </div>\n        </div>\n\n        <div class=\"entity-header-sub flex gap-4 items-center flex-wrap\">\n            @if ($entity->entityType->isCustom())\n                @includeIf('entities.headers._custom')\n            @else\n                @includeIf('entities.headers._' . $entity->entityType->code)\n            @endif\n        </div>\n\n        @yield($entityHeaderActions ?? 'entity-header-actions')\n    </div>\n\n    @if ($hasBanner && $entity->header && $entity->header->visibility_id !== \\App\\Enums\\Visibility::All)\n        @php\n            $headerHelper = __('entities/image.gallery_permissions.' . strtolower($entity->header->visibility_id->name), ['admin' => $campaign->adminRoleName(), 'creator' => $entity->header->creator?->name]);\n        @endphp\n        @can('visibility', $entity->header)\n        <span\n            role=\"button\"\n            tabindex=\"0\"\n            class=\"header-visibility absolute top-2 right-2 rounded cursor-pointer z-10\"\n            data-toggle=\"dialog\"\n            data-url=\"{{ route('gallery.file.visibility', [$campaign, $entity->header]) }}\"\n            aria-haspopup=\"dialog\"\n        >\n            <x-icon :class=\"$entity->header->visibilityIcon()['class']\" :title=\"$headerHelper\" tooltip />\n        </span>\n        @else\n            <span\n                class=\"header-visibility absolute top-2 right-2 rounded z-10\">\n                <x-icon :class=\"$entity->header->visibilityIcon()['class']\" :title=\"$headerHelper\" tooltip />\n            </span>\n        @endcan\n    @endif\n        @if ($hasBanner)\n            <picture class=\"entity-banner absolute top-0 left-0 w-full h-full\">\n                <source media=\"(min-width:2400px)\" srcset=\"{{ $headerImageXL }}\">\n                <source media=\"(min-width:1600px)\" srcset=\"{{ $headerImageL }}\">\n                <source media=\"(min-width:800px)\" srcset=\"{{ $headerImageM }}\">\n                <source media=\"(min-width:600px)\" srcset=\"{{ $headerImageS }}\">\n                <img\n                    src=\"{{ $headerImageSquare }}\"\n                    alt=\"{{ $entity->name }} header image\"\n                    class=\"absolute inset-0 w-full h-full z-0 object-cover\"\n                >\n            </picture>\n        @endif\n</div>\n\n@section('modals')\n    @parent\n\n    @if (!$campaign->boosted())\n        <x-dialog id=\"booster-cta\" :title=\"__('callouts.booster.titles.boosted')\">\n            <p class=\"\">{{ __('entities/image.call-to-action') }}</p>\n            @can('boost', auth()->user())\n            <a href=\"{{ route('settings.premium', ['campaign' => $campaign]) }}\" class=\"btn2 bg-boost text-white btn-block\">\n                {!! __('callouts.premium.unlock', ['campaign' => $campaign->name]) !!}\n            </a>\n            @else\n                <p class=\"\">{{ __('callouts.booster.limitation') }}</p>\n                <a href=\"{{ \\App\\Facades\\Domain::toFront('premium')  }}\" class=\"btn2 bg-boost text-white btn-block\">\n                    {!! __('callouts.premium.learn-more') !!}\n                </a>\n            @endif\n        </x-dialog>\n    @endif\n\n    <x-dialog id=\"quick-privacy\" :title=\"__('Loading')\">\n        <div class=\"p-5 text-center\">\n            <x-icon class=\"fa-solid fa-spinner fa-spin fa-2x\" />\n        </div>\n    </x-dialog>\n@endsection\n\n\n@if ($entity->archived_at)\n    <x-alert type=\"warning\">\n        <div class=\"flex items-center justify-between gap-4\">\n            <span>\n                <x-icon class=\"fa-regular fa-archive\" />\n                {{ __('entries/archive.banner') }}\n            </span>\n            @can('update', $entity)\n                <a href=\"{{ route('entities.archive', [$campaign, $entity]) }}\" class=\"btn2 btn-sm btn-warning\">\n                    {{ __('entities/actions.unarchive.title') }}\n                </a>\n            @endcan\n        </div>\n    </x-alert>\n@endif\n\n@section('styles')\n    @parent\n    <style>\n        /** Entity Images URL**/\n        :root {\n            @if ($imageUrl) --entity-image-url: url('{{ $imageUrl }}'); @endif\n            @if ($headerImageUrl) --entity-header-image-url: url('{{ $headerImageUrl }}'); @endif\n        }\n    </style>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/components/history.blade.php",
    "content": "<div class=\"sidebar-section-box entity-history overflow-hidden flex flex-col gap-2\">\n    <div class=\"sidebar-section-title cursor-pointer user-select border-b element-toggle group\" data-animate=\"collapse\" data-target=\"#sidebar-history\">\n        <x-icon class=\"fa-regular fa-chevron-up icon-show transition-transform duration-200 group-hover:-translate-y-0.5\" />\n        <x-icon class=\"fa-regular fa-chevron-down icon-hide transition-transform duration-200 group-hover:translate-y-0.5\" />\n        <span class=\"text-lg\">{{ __('entities/profile.history') }}</span>\n    </div>\n    <div class=\"sidebar-elements overflow-hidden\" id=\"sidebar-history\">\n        <div class=\"flex flex-col gap-2 text-xs\">\n        @if ($entity)\n            <p class=\"m-0\">\n            {!! __('crud.history.created_clean', [\n                'name' => (!empty($entity->created_by) ? '<a href=\"' . route('users.profile', $entity->created_by) . '\" class=\"text-link\">' . e(\\App\\Facades\\UserCache::name($entity->created_by)) . '</a>' : __('crud.history.unknown')),\n                'date' => '<span data-toggle=\"tooltip\" data-title=\"' . $entity->created_at . ' UTC' . '\">' . $entity->created_at->diffForHumans() . '</span>',\n            ]) !!}\n            </p>\n            @if (!$entity->created_at->equalTo($entity->updated_at))\n            <p class=\"m-0\">{!! __('crud.history.updated_clean', [\n            'name' => (!empty($entity->updated_by) ? '<a href=\"' . route('users.profile', $entity->updated_by) . '\" class=\"text-link\">' . e(\\App\\Facades\\UserCache::name($entity->updated_by)) . '</a>' : __('crud.history.unknown')),\n            'date' => '<span data-toggle=\"tooltip\" data-title=\"' . $entity->updated_at . ' UTC' . '\">' . $entity->updated_at->diffForHumans() . '</span>',\n        ]) !!}\n            </p>\n            @endif\n            @can('update', $entity)\n                <a href=\"{{ route('entities.logs', [$campaign, $entity]) }}\" title=\"{{ __('crud.history.view') }}\" class=\"print-none text-link\">\n                    <x-icon class=\"fa-regular fa-history\" />\n                    <span class=\"hidden md:inline\">{{ __('crud.history.view') }}</span>\n                </a>\n            @endcan\n        @else\n            <p class=\"m-0\">\n            {!! __('crud.history.created_clean', [\n                'name' => (!empty($model->created_by) ? '<a href=\"' . route('users.profile', $model->created_by) . '\" class=\"text-link\">' . e(\\App\\Facades\\UserCache::name($model->created_by)) . '</a>' : __('crud.history.unknown')),\n                'date' => '<span data-toggle=\"tooltip\" data-title=\"' . $model->created_at . ' UTC' . '\">' . $model->created_at->diffForHumans() . '</span>',\n            ]) !!}\n            </p>\n            <p class=\"m-0\">{!! __('crud.history.updated_clean', [\n            'name' => (!empty($model->updated_by) ? '<a href=\"' . route('users.profile', $model->updated_by) . '\" class=\"text-link\">' . e(\\App\\Facades\\UserCache::name($model->updated_by)) . '</a>' : __('crud.history.unknown')),\n            'date' =>'<span data-toggle=\"tooltip\" data-title=\"' . $model->updated_at . ' UTC' . '\">' . $model->updated_at->diffForHumans() . '</span>',\n        ]) !!}\n            </p>\n        @endif\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/components/links.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityAsset $asset */?>\n\n<div class=\"sidebar-section-box entity-links overflow-hidden flex flex-col gap-2\">\n    <div class=\"sidebar-section-title cursor-pointer group user-select border-b element-toggle\" data-animate=\"collapse\" data-target=\"#sidebar-link-elements\">\n        <x-icon class=\"fa-regular fa-chevron-up icon-show transition-transform duration-200 group-hover:-translate-y-0.5\" />\n        <x-icon class=\"fa-regular fa-chevron-down icon-hide transition-transform duration-200 group-hover:translate-y-0.5\" />\n        <span class=\"text-lg\">{{ __('entities/pins.links') }}</span>\n    </div>\n    <div class=\"sidebar-elements overflow-hidden\" id=\"sidebar-link-elements\">\n        <div class=\"flex flex-col gap-2\">\n            @foreach ($entity->assets->where('type_id', \\App\\Enums\\EntityAssetType::link) as $asset)\n                <a\n                    href=\"{{ route('entities.entity_assets.go', [$campaign, 'entity' => $entity, 'entity_asset' => $asset]) }}\"\n                    title=\"{!! $asset->name !!}\"\n                    target=\"_blank\" rel=\"noreferrer nofollow\"\n                    data-target=\"{{ $asset->id }}\"\n                    data-visibility=\"{{ $asset->visibility_id }}\"\n                    class=\"entity-link flex gap-2 text-link\">\n                    <x-icon class=\"{{ $asset->icon() }} text-xl flex-0\" />\n                    <span class=\"grow\">\n                        {!! $asset->name !!}\n                    </span>\n                </a>\n            @endforeach\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/components/members.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\OrganisationMember $member\n */\n$models = $entity->child->pinnedMembers;\n$previousRelation = null;\n?>\n@foreach ($models as $member)\n    @if(!empty($previousRelation) && $previousRelation == $member->role)\n    <div class=\"pinned-member flex gap-2\" data-character=\"{{ $member->character_id }}\" data-organisation=\"{{ $member->organisation_id }}\" data-role=\"{{ $member->role }}\" data-private=\"{{ $member->is_private }}\">\n        <div class=\"grow text-right\">\n            @if ($entity->isCharacter() && $member->organisation->entity)\n                <x-entity-link\n                    :entity=\"$member->organisation->entity\"\n                    :campaign=\"$campaign\" />\n            @elseif ($member->character && $member->character->entity)\n                <x-entity-link\n                    :entity=\"$member->character->entity\"\n                    :campaign=\"$campaign\" />\n            @endif\n        </div>\n    </div>\n    @else\n    <div class=\"pinned-member flex gap-2 flex-wrap\" data-character=\"{{ $member->character_id }}\" data-organisation=\"{{ $member->organisation_id }}\" data-role=\"{{ $member->role }}\" data-private=\"{{ $member->is_private }}\">\n        <strong class=\"flex-none\">\n            {{ $member->role }}\n        </strong>\n        <div class=\"grow text-right\">\n            @if ($entity->isCharacter())\n                <x-entity-link\n                    :entity=\"$member->organisation->entity\"\n                    :campaign=\"$campaign\" />\n            @else\n                <x-entity-link\n                    :entity=\"$member->character->entity\"\n                    :campaign=\"$campaign\" />\n           @endif\n        </div>\n    </div>\n@php $previousRelation = $member->role @endphp\n    @endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/components/menu.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Campaign $campaign\n */\n?>\n<x-entities.submenu :entity=\"$entity\" :campaign=\"$campaign\" :active=\"$active\" />\n"
  },
  {
    "path": "resources/views/entities/components/menu_v2.blade.php",
    "content": "<div class=\"entity-submenu md:w-48 md:flex-none\">\n    @includeWhen(isset($withPins), 'entities.components.pins')\n    @include('entities.components.menu')\n\n    @include('ads.siderail_left')\n</div>\n"
  },
  {
    "path": "resources/views/entities/components/og.blade.php",
    "content": "@php /** @var \\App\\Models\\Entity $entity */ @endphp\n@section('og')\n    @if ($tooltip = $entity->mappedPreview())<meta property=\"og:description\" content=\"{{ $tooltip }}\" />@endif\n    @if ($entity->hasImage())<meta property=\"og:image\" content=\"{{ \\App\\Facades\\Avatar::entity($entity)->size(276)->thumbnail()  }}\" />@endif\n    <meta property=\"og:url\" content=\"{{ $entity->url()  }}\" />\n    <meta name=\"twitter:card\" content=\"summary_large_image\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/components/pins.blade.php",
    "content": "@php\n/** @var \\App\\Models\\Entity $entity */\n$forceShow = false;\nif ($entity->entityType->isStandard() && method_exists($entity->child, 'pinnedMembers') && !$entity->child->pinnedMembers->isEmpty()) {\n    $forceShow = true;\n}\nif (auth()->check() && auth()->user()->can('update', $entity)) {\n    $forceShow = true;\n}\n@endphp\n<aside class=\"entity-sidebar relative grid grid-cols-2 md:flex md:flex-col gap-5 items-stretch md:w-48 flex-none\">\n    @if ($forceShow || $entity->hasPins())\n        <div class=\"col-span-2 sidebar-section-box entity-pins overflow-hidden flex flex-col gap-2 {{ $entity->hasPins() ? '' : 'entity-empty-pin' }}\">\n            <div class=\"sidebar-section-title cursor-pointer user-select border-b element-toggle flex items-center gap-2 justify-between group\" data-animate=\"collapse\" data-target=\"#sidebar-pinned-elements\">\n                <div>\n                    <x-icon class=\"fa-regular fa-chevron-up icon-show transition-transform duration-200 group-hover:-translate-y-0.5\" />\n                    <x-icon class=\"fa-regular fa-chevron-down icon-hide transition-transform duration-200 group-hover:translate-y-0.5\" />\n                    <span class=\"text-lg \">{{ __('entities/pins.title') }}</span>\n                </div>\n                <a href=\"https://docs.kanka.io/en/latest/features/profile-sidebar.html\" data-toggle=\"tooltip\" data-title=\"{{ __('general.documentation') }}\" class=\"text-link\">\n                    <x-icon class=\"question\" />\n                    <span class=\"sr-only\">{{ __('general.documentation') }}</span>\n                </a>\n            </div>\n            <div class=\"sidebar-elements grid overflow-hidden\" id=\"sidebar-pinned-elements\">\n                <div class=\"pins flex flex-col gap-2\">\n                    @includeWhen(!$entity->pinnedFiles->isEmpty(), 'entities.components.assets')\n                    @include('entities.components.relations')\n                    @includeWhen($entity->entityType->isStandard() && method_exists($entity->child, 'pinnedMembers') && !$entity->child->pinnedMembers->isEmpty(), 'entities.components.members')\n                    @can('view-attributes', [$entity, $campaign])\n                        @include('entities.components.attributes')\n                    @endcan\n                </div>\n            </div>\n        </div>\n    @endif\n\n    @if ($entity->entityType->isCustom())\n            @includeIf('entities.components.profile.custom')\n    @else\n        @includeIf('entities.components.profile.' . $entity->entityType->pluralCode())\n    @endif\n\n    @includeWhen(!isset($printing) && $campaign->boosted() && $entity->hasLinks(), 'entities.components.links')\n\n    @include('entities.components.history')\n\n    <div class=\"col-span-2\">\n        @include('ads.siderail_right')\n    </div>\n</aside>\n"
  },
  {
    "path": "resources/views/entities/components/posts/children.blade.php",
    "content": "<?php\n\n$route = 'entities.children';\n\n$routeOptions = [\n    $campaign,\n    $entity,\n    'init' => 1,\n];\n\n$datagridOptions = [];\n\nif (request()->get('m') == \\App\\Enums\\Descendants::All->value || (!request()->has('m') && $campaign->defaultDescendantsMode() === \\App\\Enums\\Descendants::All)) {\n    $routeOptions['m'] = \\App\\Enums\\Descendants::All;\n}\n$routeOptions = Datagrid::initOptions($routeOptions);\n$datagridOptions =\n    ['datagridUrl' => route($route, $routeOptions)]\n;\n\n?>\n\n<div class=\"overflow-x-auto\" id=\"entity-children\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', $datagridOptions)\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/components/posts/custom.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\MiscModel $model\n* @var \\App\\Models\\Entity $entity\n* @var \\App\\Models\\Post $post\n*/\n/** @var \\App\\Models\\Tag[] $entityTags */\n$entityTags = $post->visibleTags();\n?>\n<article id=\"post-{{ $post->id }}\" class=\"flex flex-col gap-2 post-block post-{{ $post->id }} post-position-{{ $post->position }}@if (isset($post->settings['class'])) {{ $post->settings['class'] }}@endif @foreach ($entityTags as $tag) tag-{{ $tag->slug }} @endforeach\" data-visibility=\"{{ $post->visibility_id }}\" data-position=\"{{ $post->position }}\" data-word-count=\"{{ $post->words }}\">\n    <div class=\"post-header flex gap-1 md:gap-2 items-center justify-between overflow-hidden\">\n        <h3 class=\"post-title truncate text-xl\" >\n            {!! $post->name !!}\n        </h3>\n        <div class=\"post-buttons flex gap-1 md:gap-2 items-center flex-wrap\">\n            @if (app()->hasDebugModeEnabled())\n                <span class=\"text-xs text-neutral-content\">({{ $post->position }})</span>\n            @endif\n            @auth\n                @can('visibility', $post)\n                    <x-forms.visibility-picker\n                        :entity=\"$entity\"\n                        :campaign=\"$campaign\"\n                        :selected=\"$post->visibility_id instanceof \\App\\Enums\\Visibility ? $post->visibility_id->value : (int) $post->visibility_id\"\n                        :url=\"route('posts.update.visibility', [$campaign, $entity->id, $post->id])\"\n                        :options=\"$post->visibilityOptions()\"\n                    />\n                @else\n                    @include('icons.visibility', ['icon' => $post->visibilityIcon()])\n                @endif\n                <div class=\"dropdown\">\n                    <a role=\"button\" class=\"btn2 btn-ghost btn-sm\" data-dropdown aria-expanded=\"false\" data-tree=\"escape\">\n                        <x-icon class=\"fa-regular fa-ellipsis-v\" />\n                        <span class=\"sr-only\">{{__('crud.actions.actions') }}</span>\n                    </a>\n                    <div class=\"dropdown-menu hidden\" role=\"menu\">\n                        @include('entities.pages.posts._actions')\n                    </div>\n                </div>\n            @endif\n        </div>\n    </div>\n    <x-posts.tags :post=\"$post\" :campaign=\"$campaign\"></x-posts.tags>\n\n    @if($post->layout?->code == 'inventory')\n        @include('entities.pages.inventory._grid', ['isPost' => true])\n    @elseif ($post->layout?->code == 'attributes')\n        <x-box class=\"box-entity-attributes\">\n            @include('entities.pages.attributes.render', ['isPost' => true])\n        </x-box>\n        <input type=\"hidden\" name=\"live-attribute-config\" data-live=\"{{ route('entities.attributes.live.edit', [$campaign, $entity]) }}\" />\n    @elseif ($post->layout?->code == 'abilities')\n        @include('entities.pages.abilities._abilities', ['isPost' => true])\n    @elseif ($post->layout?->code == 'assets')\n        @include('entities.pages.assets._assets', ['assets' => $entity->assets, 'isPost' => true])\n    @elseif ($post->layout?->code == 'connection_map')\n        @include('entities.pages.relations._map', ['option' => null, 'isPost' => true, 'mode' => 'map'])\n    @elseif($post->layout?->code == 'children')\n        @include('entities.components.posts.children')\n    @elseif ($post->layout?->code == 'character_orgs' && $entity->isCharacter())\n        @include('characters.panels.organisations', ['character' => $entity->child])\n    @elseif ($post->layout?->code == 'quest_elements' && $entity->isQuest())\n        @include('quests.elements._post')\n    @elseif ($post->layout?->code == 'location_characters' && $entity->isLocation())\n        @include('locations.panels.characters', ['init' => true])\n    @elseif ($post->layout?->code == 'location_events' && $entity->isLocation())\n        @include('locations.panels.events', ['init' => true])\n    @elseif ($post->layout?->code == 'location_quests' && $entity->isLocation())\n        @include('locations.panels.quests', ['init' => true])\n    @elseif ($post->layout?->code == 'reminders')\n        @include('entities.pages.reminders._post')\n    @endif\n</article>\n"
  },
  {
    "path": "resources/views/entities/components/posts/standard.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Entity $entity\n* @var \\App\\Models\\Post $post\n*/\n\n/** @var \\App\\Models\\Tag[] $entityTags */\n$entityTags = $post->visibleTags();\n?>\n<article class=\"flex flex-col gap-2 post-block post-{{ $post->id }} entity-note-{{ $post->id }} entity-note-position-{{ $post->position }} post-position-{{ $post->position }}@if (isset($post->settings['class']) && $campaign->boosted()) {{ $post->settings['class'] }}@endif @foreach ($entityTags as $tag) tag-{{ $tag->slug }} @endforeach\" data-visibility=\"{{ $post->visibility_id }}\" data-position=\"{{ $post->position }}\" data-template=\"{{ $post->isTemplate() ? '1' : '0' }}\" id=\"post-{{ $post->id }}\" data-word-count=\"{{ $post->words }}\">\n    <div class=\"post-header flex gap-1 md:gap-2 items-center justify-between \">\n        <div class=\"flex gap-2 items-center cursor-pointer element-toggle group overflow-hidden {{ $post->collapsed() ? \"animate-collapsed\" : null }}\" data-animate=\"collapse\" data-target=\"#post-body-{{ $post->id }}\">\n            <x-icon class=\"fa-regular fa-chevron-up icon-show transition-transform duration-200 group-hover:-translate-y-0.5\" />\n            <x-icon class=\"fa-regular fa-chevron-down icon-hide transition-transform duration-200 group-hover:translate-y-0.5\" />\n            <h3 class=\"post-title truncate text-xl {{ $post->collapsed() ? \"collapsed\" : null }}\"  >\n                {!! $post->name !!}\n            </h3>\n        </div>\n        <div class=\"post-buttons flex gap-1 md:gap-2 items-center\">\n            @if (app()->hasDebugModeEnabled())\n                <span class=\"text-xs text-neutral-content\">({{ $post->position }})</span>\n            @endif\n            @can('post', [$entity, 'edit', $post])\n                @can('visibility', $post)\n                    <x-forms.visibility-picker\n                        :entity=\"$entity\"\n                        :campaign=\"$campaign\"\n                        :selected=\"$post->visibility_id instanceof \\App\\Enums\\Visibility ? $post->visibility_id->value : (int) $post->visibility_id\"\n                        :url=\"route('posts.update.visibility', [$campaign, $entity->id, $post->id])\"\n                        :options=\"$post->visibilityOptions()\"\n                    />\n                @else\n                    @include('icons.visibility', ['icon' => $post->visibilityIcon()])\n                @endif\n                <div class=\"dropdown\">\n                    <div\n                        role=\"button\"\n                        tabindex=\"0\"\n                        class=\"btn2 btn-sm\"\n                        data-dropdown aria-expanded=\"false\"\n                        data-placement=\"right\"\n                        data-tree=\"escape\">\n                        <x-icon class=\"fa-regular fa-ellipsis\" />\n                        <span class=\"sr-only\">{{__('crud.actions.actions') }}</span>\n                    </div>\n                    <div class=\"dropdown-menu hidden\" role=\"menu\">\n                        @include('entities.pages.posts._actions')\n                    </div>\n                </div>\n            @endif\n        </div>\n    </div>\n    <div class=\"bg-box rounded-lg post entity-note\">\n        <div class=\"entity-content overflow-hidden @if ($post->collapsed()) hidden @endif\" id=\"post-body-{{ $post->id }}\">\n            <div class=\"flex flex-col gap-2 p-4\">\n                <x-posts.tags :post=\"$post\" :campaign=\"$campaign\"></x-posts.tags>\n\n                @if ($post->location || $post->calendarReminder()?->calendar_id)\n                <div class=\"post-details entity-note-details\">\n                    @if ($post->location && $post->location->entity)\n                        <span class=\"entity-note-detail-element entity-note-location post-detail-element post-location\">\n                            <x-entity-link :entity=\"$post->location->entity\" :campaign=\"$campaign\" />\n                        </span>\n                    @endif\n                    @if ($post->calendarReminder()?->calendar_id)\n                        <span class=\"entity-note-detail-element entity-note-reminder post-detail-element post-reminder\">\n                            <a href=\"{{ $post->calendarReminder()->calendar->getLink() . '?year=' . $post->calendarReminder()->year . '&month=' . $post->calendarReminder()->month }} \" class=\"text-link\"> {{ $post->calendarReminder()->readableDate() }} </a>\n                        </span>\n                    @endif\n                </div>\n                @endif\n\n                <div class=\"entity-note-body post-body overflow-x-auto\">\n                    {!! $post->parsedEntry() !!}\n                </div>\n\n                <div class=\"post-footer entity-note-footer text-right text-muted text-xs \">\n\n                @can('update', $entity)\n                <a href=\"{{ route('entities.posts.logs', [$campaign, $entity, $post]) }}\" title=\"{{ __('crud.history.view') }}\" class=\"print-none text-link\">\n                    <x-icon class=\"fa-regular fa-history\" />\n                </a>\n                @endcan\n\n                    <span class=\"post-footer-element post-created entity-note-footer-element entity-note-created\" data-title=\"{{ __('entities/notes.footer.created', [\n        'user' => $post->created_by ? e(\\App\\Facades\\UserCache::name($post->created_by)) : __('crud.users.unknown'),\n        'date' => $post->created_at->isoFormat('MMMM Do Y, hh:mm a')]) }}\" data-toggle=\"tooltip\">\n                        {{ $post->created_at->isoFormat('MMMM Do, Y') }}\n                    </span>\n                        @if ($post->updated_at->greaterThan($post->created_at))\n                            <span class=\"post-footer-element post-updated entity-note-footer-element entity-note-updated\" data-title=\"{{ __('entities/notes.footer.updated', [\n        'user' => $post->updated_by ? e(\\App\\Facades\\UserCache::name($post->updated_by)) : __('crud.users.unknown'),\n        'date' => $post->updated_at->isoFormat('MMMM Do Y, hh:mm a')]) }}\" data-toggle=\"tooltip\">\n                        {{ $post->updated_at->isoFormat('MMMM Do, Y') }}\n                    </span>\n                    @endif\n                </div>\n                <x-word-count :count=\"$post->words\" />\n            </div>\n        </div>\n    </div>\n</article>\n"
  },
  {
    "path": "resources/views/entities/components/posts.blade.php",
    "content": "@php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Post $post\n * @var \\Illuminate\\Database\\Eloquent\\Collection $posts\n */\n$wrapper = false;\n$entryShown = false;\n$adShown = false;\nif (!isset($posts)) {\n    $pagination = config('limits.pagination');\n    $posts = $entity->posts()->with([\n            'permissions',\n            'calendarDate',\n            'calendarDate.calendar',\n            'calendarDate.calendar.entity',\n            'location',\n            'location',\n            'layout',\n            'tags' => function ($sub) { $sub->select('tags.id', 'tags.name', 'tags.slug', 'tags.colour', 'tags.icon', 'tags.is_hidden'); }\n        ])->ordered()->paginate($pagination);\n    $wrapper = true;\n}\n\n$first = $posts->first();\n$postCount = 0;\n@endphp\n\n@if (isset($withEntry) && ($posts->count() === 0 || (!empty($first) && $first->position >= 0)))\n    @include('entities.components.entry')\n    @php $entryShown = true; $adShown = true; @endphp\n@endif\n\n\n@if ($wrapper && $posts->count() > 0)\n<div class=\"entity-posts entity-notes flex flex-col gap-5\">\n@endif\n    @foreach ($posts as $post)\n        @if ($post->layout_id && isset($printing) && $printing === true)\n            @continue\n        @endif\n        @if (isset($withEntry) && !$entryShown && $post->position >= 0)\n            @include('entities.components.entry')\n            @php $entryShown = true @endphp\n        @endif\n        @if ($post->layout_id && !$campaign->superboosted())\n            @continue\n        @endif\n        @include('entities.pages.posts.show')\n        @includeWhen($postCount > 0 && $postCount % 3 === 0, 'ads.inline', ['count' => $postCount])\n        @php $postCount++; @endphp\n    @endforeach\n\n\n    @if (isset($withEntry) && !$entryShown)\n        @include('entities.components.entry')\n        @php $entryShown = true; $adShown = true; @endphp\n    @endif\n\n    <div id=\"post-anchor-loader\" data-url=\"{{ route('entities.posts.show', [$campaign, $entity, 'post' => 0]) }}\"></div>\n\n    @if ($posts->currentPage() < $posts->lastPage())\n        <div class=\"text-center\">\n            @if (auth()->check())\n            <a href=\"#\" class=\"btn2 btn-sm story-load-more\" data-url=\"{{ route('entities.story.load-more', [$campaign, $entity, 'page' => $posts->currentPage() + 1]) }}\">\n                <i class=\"fa-regular fa-arrows-rotate\" aria-hidden=\"true\"></i> {{ __('entities/story.actions.load_more') }}\n            </a>\n\n            <i class=\"fa-solid fa-spinner fa-spin fa-2x\" id=\"story-more-spinner\" style=\"display: none\"></i>\n            @else\n            <a href=\"{{ route('login') }}\" class=\"btn2 btn-sm\">\n                {{ __('entities/story.actions.login_for_more') }}\n            </a>\n\n            @endif\n        </div>\n    @endif\n\n@if ($wrapper && $posts->count() > 0)\n</div>\n@endif\n\n@if (!request()->ajax() && $entity && !$entity->isType([config('entities.ids.map'), config('entities.ids.timeline'), config('entities.ids.calendar')]))\n@can('post', [$entity])\n    <div class=\"text-center row-add-note-button\">\n        <a href=\"{{ route('entities.posts.create', [$campaign, $entity]) }}\" class=\"btn2 btn-sm btn-new-post  btn-block\"\n           data-entity-type=\"post\" data-toggle=\"tooltip\" data-title=\"{{ __('posts.helpers.new') }}\">\n            <x-icon class=\"fa-regular fa-pen-to-square\" />\n            {{ __('crud.actions.new_post') }}\n        </a>\n    </div>\n@endcan\n@endif\n"
  },
  {
    "path": "resources/views/entities/components/profile/_aliases.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityAsset $alias */?>\n@php $firstAlias = true @endphp\n<div class=\"element profile-family\">\n    <div class=\"title text-uppercase text-xs\">\n        {{ __('entities/profile.aliases') }}\n    </div>\n    <div class=\"comma-separated\">\n    @foreach ($entity->aliases as $alias)\n        <span class=\"element\">\n            <a\n                href=\"#\"\n                class=\"text-link\"\n                data-clipboard=\"[{{ $entity->entityType->code }}:{{ $entity->id }}|alias:{{ $alias->id }}]\"\n                data-toast=\"{{ __('entities/assets.copy_alias.success') }}\"\n                data-title=\"{{ __('entities/assets.copy_alias.title') }}\"\n                data-toggle=\"tooltip\"\n                data-asset=\"{{ \\Illuminate\\Support\\Str::slug($alias->name) }}\"\n                data-target=\"{{ $alias->id }}\" data-visibility=\"{{ $alias->visibility_id }}\"\n            >\n                {!! $alias->name !!}\n            </a>\n            @includeWhen(!$alias->isVisibleAll(), 'icons.visibility', ['icon' => $alias->visibilityIcon()])\n        </span>\n    @endforeach\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/components/profile/_events.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\EntityEvent $event\n * @var \\App\\Models\\EntityEvent $birth\n * @var \\App\\Models\\EntityEvent $death\n * @var \\App\\Models\\EntityEvent[] $elapsed\n * @var \\App\\Models\\Entity $entity\n */\n$elapsed = $entity->elapsedEvents;\n\n// Prepare birth and death events\n$distinctCalendars = [];\n$birth = null;\n$death = null;\nforeach ($elapsed as $event) {\n    if (empty($event->calendar) || $event->isCalendarDate()) {\n        continue;\n    }\n    if ($event->isBirth() || $event->isFounded()) {\n        $distinctCalendars[$event->calendar_id]['birth'] = $event;\n    } elseif ($event->isDeath()) {\n        if (!isset($distinctCalendars[$event->calendar_id]['death'])) {\n            $distinctCalendars[$event->calendar_id]['death'] = $event;\n            continue;\n        }\n\n        // Already have a death? Take the new one if it's older\n        $older = false;\n        /** @var \\App\\Models\\EntityEvent $previous */\n        $previous = $distinctCalendars[$event->calendar_id]['death'];\n        if ($previous->year < $event->year) {\n            $older = true;\n        } elseif ($previous->year == $event->year) {\n            if ($previous->month < $event->month) {\n                $older = true;\n            } elseif ($previous->month == $event->month) {\n                if ($previous->day < $event->day) {\n                    $older = true;\n                }\n            }\n        }\n\n        if ($older) {\n            $distinctCalendars[$event->calendar_id]['death'] = $event;\n        }\n    }\n}\n?>\n@foreach ($distinctCalendars as $calendarId => $calendarEvents)\n    @php $birth = $calendarEvents['birth'] ?? null; $death = $calendarEvents['death'] ?? null; @endphp\n    @if (!empty($birth) && !empty($death))\n        <div class=\"element profile-life\">\n            <div class=\"title text-uppercase text-xs\">{{ __('characters.fields.life') }}</div>\n            <a href=\"{{ $birth->calendar->getLink() }}?year={{ $birth->year }}&month={{ $birth->month }}\" data-title=\"{{ $birth->calendar->name }}\" data-toggle=\"tooltip\" class=\"text-link\">\n                {{ $birth->readableDate() }}\n            </a> &#10013; <a href=\"{{ $death->calendar->getLink() }}?year={{ $death->year }}&month={{ $death->month }}\" data-title=\"{{ $death->calendar->name }}\" data-toggle=\"tooltip\" class=\"text-link\">\n                {{ $death->readableDate() }}\n            </a> ({{ $birth->calcElapsed($death) }})\n        </div>\n\n    @elseif (!empty($birth))\n        @php $yearsAgo = $birth->calcElapsed() @endphp\n        <div class=\"element profile-life profile-birth\">\n            @if ($birth->isBirth())\n                <div class=\"title text-uppercase text-xs\">{{ __('entities/events.types.birth') }}</div>\n            @else\n                <div class=\"title text-uppercase text-xs\">{{ __('entities/events.types.founded') }}</div>\n            @endif\n            <a href=\"{{ $birth->calendar->getLink() }}?year={{ $birth->year }}&month={{ $birth->month }}\" data-title=\"{{ $birth->calendar->name }}\" data-toggle=\"tooltip\" class=\"text-link\">\n            {{ $birth->readableDate() }}\n            </a> ({{ $event->isBirth() ? $yearsAgo : trans_choice('entities/events.years-ago', $yearsAgo, ['count' => $yearsAgo]) }})\n        </div>\n\n    @elseif (!empty($death))\n        <div class=\"element profile-life\">\n            <div class=\"title text-uppercase text-xs\">{{ __('entities/events.types.death') }}</div>\n            <a href=\"{{ $death->calendar->getLink() }}?year={{ $death->year }}&month={{ $death->month }}\" data-title=\"{{ $death->calendar->name }}\" data-toggle=\"tooltip\" class=\"text-link\">\n            {{ $death->readableDate() }}\n            </a> (&#10013;{{ $death->calcElapsed() }})\n        </div>\n    @endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/components/profile/_location.blade.php",
    "content": "@if ($campaign->enabled('locations') && !empty($child->location) && $child->location->entity)\n    <div class=\"element profile-location\">\n        <div class=\"title text-uppercase text-xs\">{!! \\App\\Facades\\Module::singular(config('entities.ids.location'), __('entities.location')) !!}</div>\n        <x-entity-link\n            :entity=\"$child->location->entity\"\n            :campaign=\"$campaign\" />\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/components/profile/_locations.blade.php",
    "content": "@if ($campaign->enabled('locations') && !$entity->locations->isEmpty())\n    <div class=\"element profile-location\">\n        <div class=\"title text-uppercase text-xs\">\n            {!! \\App\\Facades\\Module::plural(config('entities.ids.location'), __('entities.locations')) !!}\n        </div>\n        @php $existingLocations = []; @endphp\n        @foreach ($entity->locations as $location)\n            @if(!empty($existingLocations[$location->id]))\n                @continue\n            @endif\n            @php $existingLocations[$location->id] = true; @endphp\n            <x-entity-link\n                :entity=\"$location->entity\"\n                :campaign=\"$campaign\" />\n        @endforeach\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/components/profile/_reminder.blade.php",
    "content": "@if ($entity->calendarReminder())\n    <div class=\"element profile-date\">\n        <div class=\"title text-uppercase text-xs\">{{ __('crud.fields.calendar_date') }}</div>\n        <a href=\"{{ route('calendars.show', [$campaign, $entity->calendarDate->calendar_id, 'year' => $entity->calendarReminder()->year, 'month' => $entity->calendarReminder()->month]) }}\" class=\"text-link\">\n            {{ $entity->calendarReminder()->readableDate() }}\n        </a>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/components/profile/_type.blade.php",
    "content": "@if (!empty($entity->type))\n    <div class=\"element profile-type\">\n        <div class=\"title text-uppercase text-xs\">{{ __('crud.fields.type') }}</div>\n        @auth\n            <a href=\"{{ route('entities.index', [$campaign, $entity->entityType] + ['_clean' => true, 'type' => $entity->type]) }}\" class=\"text-link\">\n                {!! $entity->type !!}\n            </a>\n        @else\n            {!! $entity->type !!}\n        @endauth\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/components/profile/abilities.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Ability $model\n */\n$child = $entity->child;\n?>\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @if (!empty($child->charges))\n        <div class=\"element profile-charges\">\n            <div class=\"title text-uppercase text-xs\">{{ __('abilities.fields.charges') }}</div>\n            {{ $child->charges }}\n        </div>\n    @endif\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/attribute_templates.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\AttributeTemplate $model\n */\n$child = $entity->child;\n?>\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @if (!empty($child->attributeTemplate))\n        <div class=\"element profile-attribute-template\">\n            <div class=\"title text-uppercase text-xs\">{{ __('crud.fields.parent') }}</div>\n            <x-entity-link\n                :entity=\"$child->attributeTemplate->entity\"\n                :campaign=\"$campaign\" />\n        </div>\n    @endif\n\n    <div class=\"element profile-is-enabled\">\n        <div class=\"title text-uppercase text-xs\">{{ __('attribute_templates.fields.is_enabled') }}</div>\n        @if ($child->is_enabled)\n            {{ __('general.yes')}}\n        @else\n            {{ __('general.no')}}\n        @endif\n    </div>\n\n    @if (!empty($child->entityType))\n        <div class=\"element profile-entity-type\">\n            <div class=\"title text-uppercase text-xs\">{{ __('attribute_templates.fields.auto_apply') }}</div>\n            {!! $child->entityType->name() !!}\n        </div>\n    @endif\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/character_families.blade.php",
    "content": "@php $existingFamilies = []; @endphp\n@foreach ($child->characterFamilies as $family)\n    @if(!empty($existingFamilies[$family->family_id]))\n        @continue\n    @endif\n    @php $existingFamilies[$family->family_id] = true; @endphp\n    <span class=\"element\">\n                    <x-entity-link\n                        :entity=\"$family->family->entity\"\n                        :campaign=\"$campaign\" />\n                </span>\n    @if ($family->is_private) <x-icon class=\"lock\" /> @endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/components/profile/character_races.blade.php",
    "content": "@php $existingRaces = []; @endphp\n@foreach ($child->characterRaces as $race)\n    @if(!empty($existingRaces[$race->race_id]))\n        @continue\n    @endif\n    @php $existingRaces[$race->race_id] = true; @endphp\n    <span class=\"element\">\n        <x-entity-link\n                :entity=\"$race->race->entity\"\n                :campaign=\"$campaign\" />\n        @if ($race->is_private) <x-icon class=\"lock\" /> @endif\n    </span>\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/components/profile/characters.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Character $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n@php\n//$appearances = $child->characterTraits()->appearance()->orderBy('default_order')->get();\n//$traits = $child->characterTraits()->personality()->orderBy('default_order')->get();\n\n@endphp\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @if ($campaign->enabled('families') && !$child->characterFamilies->isEmpty())\n        <div class=\"element profile-family\">\n            <div class=\"title text-uppercase text-xs\">\n                {!! \\App\\Facades\\Module::singular(config('entities.ids.family'), __('entities.families')) !!}\n                @can('update', $entity)\n                    <span role=\"button\" tabindex=\"0\" class=\"entity-families-icon hover:text-primary\" data-toggle=\"dialog\" data-url=\"{{ route('characters.families.management', [$campaign, $entity->child]) }}\" aria-haspopup=\"dialog\">\n                        <x-icon class=\"cog\" tooltip title=\"{{ __('characters.families.title2') }}\" />\n                    </span>\n                @endif\n            </div>\n            <div class=\"comma-separated\">\n                @include('entities.components.profile.character_families')\n            </div>\n        </div>\n    @endif\n\n    @if (!$child->characterRaces->isEmpty() || $child->hasAge())\n        @if (!$child->characterRaces->isEmpty() && !$child->hasAge())\n        <div class=\"element profile-race\">\n            <div class=\"title text-uppercase text-xs\">\n                {!! \\App\\Facades\\Module::plural(config('entities.ids.race'), __('entities.races')) !!}\n                @can('update', $entity)\n                    <span role=\"button\" tabindex=\"0\" class=\"entity-races-icon hover:text-primary\" data-toggle=\"dialog\" data-url=\"{{ route('characters.races.management', [$campaign, $entity->child]) }}\" aria-haspopup=\"dialog\">\n                        <x-icon class=\"cog\" tooltip title=\"{{ __('characters.races.title2') }}\" />\n                    </span>\n                @endif\n            </div>\n            <div class=\"comma-separated\">\n                @include('entities.components.profile.character_races')\n            </div>\n        </div>\n        @elseif ($child->characterRaces->isEmpty() && $child->hasAge())\n        <div class=\"element profile-age\">\n            <div class=\"title text-uppercase text-xs\">{{ __('characters.fields.age') }}</div>\n            <span>{{ is_numeric($child->age) ? \\Illuminate\\Support\\Number::format($child->age) : $child->age }}</span>\n        </div>\n        @else\n        <div class=\"element profile-race-age\">\n            <div class=\"title text-uppercase text-xs\">\n                {!! \\App\\Facades\\Module::plural(config('entities.ids.race'), __('entities.races')) !!}\n                @can('update', $entity)\n                    <span role=\"button\" tabindex=\"0\" class=\"entity-races-icon hover:text-primary\" data-toggle=\"dialog\" data-url=\"{{ route('characters.races.management', [$campaign, $child]) }}\" aria-haspopup=\"dialog\">\n                        <x-icon class=\"cog\" tooltip title=\"{{ __('characters.races.title2') }}\" />\n                    </span>\n                @endif\n                ,\n                {{ __('characters.fields.age') }}\n\n            </div>\n            <div class=\"comma-separated inline\">\n                @include('entities.components.profile.character_races')\n            </div>,\n            <span>{{ is_numeric($child->age) ? \\Illuminate\\Support\\Number::format($child->age) : $child->age }}</span>\n        </div>\n        @endif\n    @endif\n\n\n    @if (!empty($child->sex) || !empty($child->pronouns))\n        @if (!empty($child->sex) && empty($child->pronouns))\n            <div class=\"element profile-gender\">\n                <div class=\"title text-uppercase text-xs\">{{ __('characters.fields.sex') }}</div>\n                <span>{!! $child->sex !!}</span>\n            </div>\n        @elseif (empty($child->sex) && !empty($child->pronouns))\n            <div class=\"element profile-pronouns\">\n                <div class=\"title text-uppercase text-xs\">{{ __('characters.fields.pronouns') }}</div>\n                <span>{!! $child->pronouns !!}</span>\n            </div>\n        @else\n            <div class=\"element profile-gender-pronouns\">\n                <div class=\"title text-uppercase text-xs\">{{ __('characters.fields.sex') }}, {{ __('characters.fields.pronouns') }}</div>\n                <span>{!! $child->sex !!}</span>,\n                <span>{!! $child->pronouns !!}</span>\n            </div>\n        @endif\n    @endif\n\n\n    @include('entities.components.profile._events')\n\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/conversations.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Conversation $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    <div class=\"element profile-target\">\n        <div class=\"title text-uppercase text-xs\">{{ __('conversations.fields.participants') }}</div>\n        {{ __('conversations.targets.' . ($child->forCharacters() ? 'characters' : 'members')) }}\n    </div>\n\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/creatures.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Creature $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._locations')\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/custom.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n */\n$child = $entity;\n?>\n\n@if (empty($entity->type) && $entity->locations->isEmpty() && $entity->aliases->isEmpty())\n    @php return @endphp\n@endif\n\n\n<x-sidebar.profile>\n    @include('entities.components.profile._type')\n    @include('entities.components.profile._locations')\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/dice_rolls.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\DiceRoll $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @if ($child->parameters)\n        <div class=\"element profile-parameters\">\n            <div class=\"title text-uppercase text-xs\">{{ __('dice_rolls.fields.parameters') }}</div>\n            {{ $child->parameters }}\n        </div>\n    @endif\n    @if ($child->character)\n        <div class=\"element profile-parameters\">\n            <div class=\"title text-uppercase text-xs\">\n                {!! \\App\\Facades\\Module::singular(config('entities.ids.character'), __('entities.character')) !!}\n            </div>\n            <x-entity-link\n                :entity=\"$child->character->entity\"\n                :campaign=\"$campaign\" />\n        </div>\n    @endif\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/events.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Event $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._locations')\n    @include('entities.components.profile._type')\n    @include('entities.components.profile._reminder')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/families.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Family $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @if (!empty($entity->parent))\n        <div class=\"element profile-family\">\n            <div class=\"title text-uppercase text-xs\">\n                {!! \\App\\Facades\\Module::singular(config('entities.ids.family'), __('entities.family')) !!}\n            </div>\n            <x-entity-link\n                :entity=\"$entity->parent\"\n                :campaign=\"$campaign\" />\n        </div>\n    @endif\n\n    @include('entities.components.profile._type')\n    @include('entities.components.profile._events')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/items.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Item $model\n */\n$child = $entity->child;\n?>\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @if ($child->price)\n        <div class=\"element profile-price\">\n            <div class=\"title text-uppercase text-xs\">{{ __('items.fields.price') }}</div>\n            {!! $child->price !!}\n        </div>\n    @endif\n    @if ($child->size)\n        <div class=\"element profile-size\">\n            <div class=\"title text-uppercase text-xs\">{{ __('items.fields.size') }}</div>\n            {!! $child->size !!}\n        </div>\n    @endif\n\n    @if ($child->weight)\n        <div class=\"element profile-weight\">\n            <div class=\"title text-uppercase text-xs\">{{ __('items.fields.weight') }}</div>\n            {!! $child->weight !!}\n        </div>\n    @endif\n\n    @include('entities.components.profile._location')\n\n    @if ($child->itemCreators->isNotEmpty())\n        <div class=\"element profile-creator\">\n            <div class=\"title text-uppercase text-xs\">{{ __('items.fields.creators') }}</div>\n            @foreach ($child->itemCreators as $itemCreator)\n                <span class=\"element\">\n                    <x-entity-link\n                        :entity=\"$itemCreator->creator\"\n                        :campaign=\"$campaign\" />\n                </span>\n            @endforeach\n        </div>\n    @endif\n\n\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/journals.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Journal $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._location')\n    @if ($child->date)\n        <div class=\"element profile-date\">\n            <div class=\"title text-uppercase text-xs\">{{ __('journals.fields.date') }}</div>\n            <x-date :date=\"$child->date\" />\n        </div>\n    @endif\n\n    @if ($child->author)\n        <div class=\"element profile-character\">\n            <div class=\"title text-uppercase text-xs\">{{ __('journals.fields.author') }}</div>\n            <x-entity-link\n                :entity=\"$child->author\"\n                :campaign=\"$campaign\" />\n        </div>\n    @endif\n    @include('entities.components.profile._reminder')\n\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/locations.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Location $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._type')\n    @include('entities.components.profile._events')\n\n    @if (!$child->maps->isEmpty())\n        <div class=\"profile-maps\">\n            <div class=\"title text-uppercase text-xs\">\n                {!! \\App\\Facades\\Module::singular(config('entities.ids.map'), __('entities.map')) !!}\n            </div>\n            @foreach ($child->maps as $map)\n                <x-entity-link\n                    :entity=\"$map->entity\"\n                    :campaign=\"$campaign\" />\n                @include('maps._explore-link')<br />\n            @endforeach\n        </div>\n    @endif\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/maps.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Map $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/notes.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Note $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/organisations.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Organisation $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._locations')\n    @include('entities.components.profile._type')\n    @include('entities.components.profile._events')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/quests.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Quest $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @if (!empty($child->instigator))\n        <div class=\"element profile-instigator\">\n            <div class=\"title text-uppercase text-xs\">{{ __('quests.fields.instigator') }}</div>\n            <x-entity-link\n                :entity=\"$child->instigator\"\n                :campaign=\"$campaign\" />\n        </div>\n    @endif\n\n    @if ($child->date)\n        <div class=\"element profile-date\">\n            <div class=\"title text-uppercase text-xs\">{{ __('journals.fields.date') }}</div>\n            <x-date :date=\"$child->date\" />\n        </div>\n    @endif\n    @include('entities.components.profile._reminder')\n    @include('entities.components.profile._location')\n\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/races.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Race $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._locations')\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/tags.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Tag $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @if ($child->hasColour())\n        <div class=\"element profile-colour\">\n            <div class=\"title text-uppercase text-xs\">{{ __('crud.fields.colour') }}</div>\n            <div class=\"flex items-center gap-2\">\n                <span class=\"inline-block rounded-full w-4 h-4\" style=\"{{ $child->colourStyle() }}\"></span>\n                {{ $child->colour }}\n            </div>\n        </div>\n    @endif\n    @if ($child->hasIcon())\n        <div class=\"element profile-icon\">\n            <div class=\"title text-uppercase text-xs\">{{ __('tags.fields.icon') }}</div>\n            <i class=\"{{ $child->icon }}\" aria-hidden=\"true\"></i> {{ $child->icon }}\n        </div>\n    @endif\n\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/profile/timelines.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Timeline $model\n */\n$child = $entity->child;\n?>\n\n@if (!$child->showProfileInfo())\n    @php return @endphp\n@endif\n\n<x-sidebar.profile>\n    @includeWhen($entity->aliases->isNotEmpty(), 'entities.components.profile._aliases')\n    @include('entities.components.profile._type')\n</x-sidebar.profile>\n"
  },
  {
    "path": "resources/views/entities/components/relations.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Relation $relation\n */\n$models = $entity->pinnedRelations;\n$previousRelation = null;\n\nif (count($models) === 0) {\n    return;\n}\n?>\n@foreach ($models as $relation)\n    @if(!empty($previousRelation) && $previousRelation == $relation->relation)\n    <div class=\"pinned-relation relation-repeat\" data-relation=\"{{ $relation->target->name }}\" data-target=\"{{ $relation->target_id }}\" data-visibility=\"{{ $relation->visibility_id }}\" data-attitude=\"{{ $relation->attitude }}\">\n        <div class=\"text-right\">\n            <x-entity-link\n                :entity=\"$relation->target\"\n                :campaign=\"$campaign\" />\n        </div>\n    </div>\n    @else\n    <div class=\"pinned-relation flex gap-2 flex-wrap\" data-target=\"{{ $relation->target_id }}\" data-relation=\"{{ $relation->target->name }}\" data-visibility=\"{{ $relation->visibility_id }}\" data-attitude=\"{{ $relation->attitude }}\">\n        <strong class=\"\">\n            {{ $relation->relation }}\n        </strong>\n        <span class=\"grow text-right\">\n            <x-entity-link\n                :entity=\"$relation->target\"\n                :campaign=\"$campaign\" />\n        </span>\n    </div>\n@php $previousRelation = $relation->relation @endphp\n    @endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/components/tooltip.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Tag $tag\n */\n?>\n<div class=\"tooltip-content flex flex-col gap-2 {{ implode(' ', $tagClasses) }}\" >\n    <div\n        class=\"flex gap-4 items-end tooltip-header @if ($hasImage) px-4 h-32 w-full rounded-t-xl  @else px-4 pt-4 @endif\"\n        @if ($hasImage)\n            style=\"--tooltip-background: url('{{ Avatar::entity($entity)->size(378, 256)->thumbnail() }}')\"\n        @endif>\n        <div class=\"grow entity-names flex flex-col gap-0.5 overflow-hidden\">\n            <div class=\"flex gap-1 overflow-hidden items-center text-xl \">\n                <a href=\"{{ $entity->url() }}\" class=\"entity-name truncate text-link\">\n                    @if (!$hasImage)\n                        <span class=\"entity-icon\" title=\"{{ $entity->entityType->name() }}\">\n                            <i class=\"{{ $entity->entityType->icon() }}\" aria-hidden=\"true\"></i>\n                        </span>\n                    @endif\n                    {!! $entity->name !!}\n                </a>\n                @if ($entity->status?->icon)\n                    <x-icon class=\"{{ $entity->status->icon() }}\" tooltip :title=\"$entity->status->setRelation('entityType', $entity->entityType)->name()\" />\n                @endif\n            </div>\n\n\n            @if ($entity->entityType->isStandard() && method_exists($entity->child, 'tooltipSubtitle'))\n                <span class=\"entity-subtitle italic\">{!! $entity->child->tooltipSubtitle() !!}</span>\n            @endif\n        </div>\n    </div>\n    @if ($tags->isNotEmpty())<div class=\"tooltip-tags flex flex-wrap gap-2 px-4\">\n        @foreach ($tags as $tag)\n            @if (!$tag->entity) @continue @endif\n            <a href=\"{{ $tag->getLink() }}\" class=\"tooltip-tag\" data-id=\"{{ $tag->entity->id }}\" data-tag-slug=\"{{ $tag->slug }}\" title=\"{{ $tag->name }}\">\n                @include ('tags._badge')\n            </a>\n        @endforeach\n    </div>@endif\n    @if ($campaign->premium() && $render === 'attributes')\n        <iframe src=\"{{ route('entities.attributes-dashboard', [$campaign, $entity]) }}\" class=\"tooltip-render w-full h-44\"></iframe>\n    @else\n    <div class=\"tooltip-text flex flex-col gap-2 px-4 pb-4 overflow-auto\">\n        @if ($entity->hasEntry())\n            {!! $tooltip !!}\n        @else\n            <span class=\"text-neutral-content\">\n                {!! __('entities/tooltips.empty', ['name' => $entity->name]) !!}\n            </span>\n            @if (auth()->check() and auth()->user()->can('update', $entity))\n            <a href=\"{{ route('entities.entry.edit', [$campaign, $entity]) }}\" class=\"text-link\">\n                {{ __('entities/tooltips.fix') }}\n            </a>\n            @endif\n        @endif\n    </div>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/_created.blade.php",
    "content": "<x-alert type=\"success\" :dismissible=\"$dismissable ?? true\">\n    <p>{!! $success !!}</p>\n</x-alert>\n"
  },
  {
    "path": "resources/views/entities/creator/form.blade.php",
    "content": "<?php $enableNew = true; ?>\n@if (isset($entityType))\n    <form method=\"post\" id=\"entity-creator-form\" action=\"{{ route('entity-creator.store', [$campaign, 'entity_type' => $entityType]) }}\" autocomplete=\"off\" class=\"entity-creator-form-{{ $entityType->code }} w-full\">\n@else\n    <form method=\"post\" id=\"entity-creator-form\" action=\"{{ route('entity-creator.post', [$campaign]) }}\" autocomplete=\"off\" class=\"entity-creator-form-post w-full\">\n@endif\n    @csrf\n\n    <x-dialog.header>\n        @if (isset($origin))\n            <div class=\"sm:w-80 text-left\">{{ __('entities.creator.modes.default') }}</div>\n        @endif\n    </x-dialog.header>\n    <article class=\"p-4 md:px-6\">\n\n        <div class=\"entity-creator-body-{{ $entityType->code ?? 'post' }} flex flex-col gap-5 w-full\">\n            @if (!isset($origin))\n                @include('entities.creator.header.header')\n            @endif\n            <div class=\"quick-creator-body flex flex-col gap-5\" x-data=\"{ showMore: {{ isset($entityType) ? 'false' : 'true' }} }\">\n\n                @includeWhen(!empty($success), 'entities.creator._created')\n\n                <?php\n                $fieldID = $mode === 'bulk' ? 'qq-name-field' : (!isset($entityType) ? 'qq-post-name-field' : 'qq-name-field');\n                ?>\n                <x-forms.field\n                    field=\"name\"\n                    required\n                    :label=\"$mode === 'bulk' ? __('crud.fields.names') : __('crud.fields.name')\"\n                    :helper=\"$mode === 'bulk' ? __('entities.creator.bulk_names') : null\"\n                    :id=\"$fieldID\">\n                    @if ($mode === 'bulk')\n                        <textarea\n                            name=\"name\"\n                            autocomplete=\"off\"\n                            class=\"w-full\"\n                            id=\"qq-name-field\"\n                            rows=\"4\"\n                            @if (isset($entityType))\n                            data-live=\"{{ route('search-list', [$campaign, $entityType]) }}\"\n                            @endif\n                            placeholder=\"{{ __('entities.creator.bulk_names') }}\"></textarea>\n                    @else\n\n                        <input\n                            type=\"text\"\n                            name=\"name\"\n                            placeholder=\"{{ !isset($entityType) ? __('posts.placeholders.name') : __('entries/fields.name.placeholder') }}\"\n                            autocomplete=\"off\"\n                            value=\"{!! old('name') !!}\"\n                            maxlength=\"191\"\n                            required\n                            @if (isset($entityType)) data-live=\"{{ route('search-list', [$campaign, $entityType]) }}\" @endif\n                            data-bulk=\"true\"\n                            id=\"{{ !isset($entityType) ? 'qq-post-name-field' : 'qq-name-field' }}\"\n                            data-1p-ignore=\"true\" />\n                    @endif\n                    <x-alert type=\"warning\" class=\"my-1 duplicate-entity-warning\" hidden>\n                        {{ __('entities.creator.duplicate') }}<br />\n                        <span class=\"duplicate-entities\"></span>\n                    </x-alert>\n                </x-forms.field>\n\n                @includeWhen($mode === 'bulk', '.entities.creator.forms.template')\n\n                <span role=\"button\" class=\"qq-action-more text-uppercase cursor-pointer text-sm border-dotted border-base-300 border-b\" x-show=\"!showMore\" @click.prevent=\"showMore = true\">\n                    <x-icon class=\"fa-regular fa-caret-down\" />\n                    {{ __('entities.creator.actions.more') }}\n                </span>\n                <div class=\"qq-more-fields flex flex-col gap-5\" x-show=\"showMore\">\n                    @php $allowNew = false; $dropdownParent = '#primary-dialog';@endphp\n                    @if (isset($entityType))\n                        @if ($entityType->isCustom())\n                            @include('entities.creator.forms.custom')\n                        @else\n                            @include('entities.creator.forms.' . $entityType->code)\n                        @endif\n                    @else\n                        @include('entities.creator.forms.post')\n                    @endif\n\n                    @if (!isset($entityType) || !in_array($entityType->id, [config('entities.ids.attribute_template')]))\n                        <div id=\"quick-creator-tags-field\" class=\"relative\">\n                            @include('cruds.fields.tags', ['dropdownParent' => '#quick-creator-tags-field'])\n                        </div>\n                    @endif\n\n                    @if (isset($entityType) && auth()->user()->isAdmin())\n                        @include('cruds.fields.privacy_callout')\n                    @endif\n                </div>\n            </div>\n            <div class=\"quick-creator-loading p-8 text-center text-lg hidden\">\n                <x-icon class=\"load\" />\n            </div>\n        </div>\n    </article>\n    <x-dialog.footer>\n        @if (empty($origin))\n            <menu class=\"flex gap-4\">\n\n                @if ($mode !== 'bulk')\n                    <button type=\"submit\" class=\"btn2 btn-outline quick-creator-submit\" data-entity-type=\"{{ $entityType->code ?? 'post' }}\" title=\"{{ __('entities.creator.tooltips.edit') }}\" name=\"next\" value=\"edit\">\n                    <span>\n                        {{ __('crud.edit') }}\n                    </span>\n                    </button>\n                @endif\n                <div class=\"join\">\n                    <button type=\"submit\" class=\"join-item btn2 btn-primary quick-creator-submit\" data-entity-type=\"{{ $entityType->code ?? 'post'}}\" title=\"{{ __('entities.creator.tooltips.create') }}\" name=\"next\">\n                        <span>\n                            {!! __('entities.creator.actions.create', ['type' => isset($entityType) ? $entityType->name() : $singular]) !!}\n                        </span>\n                    </button>\n                    <button type=\"submit\" class=\"join-item btn2 btn-primary quick-creator-submit\" name=\"next\" data-entity-type=\"{{ $entityType->code ?? 'post' }}\" value=\"more\" title=\"{{ __('entities.creator.tooltips.create_more') }}\">\n                        <span>\n                            <x-icon class=\"fa-regular fa-plus-square\" />\n                        </span>\n                    </button>\n                </div>\n\n            </menu>\n        @else\n            <button class=\"btn2 btn-primary quick-creator-submit\" data-entity-type=\"{{ $entityType->code }}\">\n                <span>\n                    <x-icon class=\"plus\" /> {{ __('entities.creator.actions.create', ['type' => $entityType->name()]) }}\n                </span>\n            </button>\n        @endif\n    </x-dialog.footer>\n@if (!empty($target))\n    <input type=\"hidden\" name=\"_target\" value=\"{{ $target }}\" />\n@endif\n@if (!empty($multi))\n    <input type=\"hidden\" name=\"_multi\" value=\"1\" />\n@endif\n    <input type=\"hidden\" name=\"action\" value=\"\" />\n    <input type=\"hidden\" name=\"quick-creator\" value=\"1\" />\n</form>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/ability.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Ability::class, 'trans' => 'abilities'])\n\n    @include('cruds.fields.parent')\n\n    <x-forms.field\n        field=\"charges\"\n        :label=\"__('abilities.fields.charges')\">\n        <input type=\"text\" name=\"charges\" value=\"{!! htmlspecialchars(old('charges', $source->charges ?? $model->charges ?? null)) !!}\" maxlength=\"191\" class=\"w-full\" placeholder=\"{{ __('abilities.placeholders.charges') }}\" autocomplete=\"off\" />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/attribute_template.blade.php",
    "content": "\n@include('cruds.fields.parent')\n"
  },
  {
    "path": "resources/views/entities/creator/forms/calendar.blade.php",
    "content": "\n<div class=\"grid grid-cols-2 gap-5\">\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Calendar::class, 'trans' => 'calendars'])\n\n    @include('cruds.fields.parent')\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/character.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.title')\n\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Character::class, 'trans' => 'characters'])\n\n    @include('cruds.fields.families', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.family'))->first(), $campaign])])\n\n    @include('cruds.fields.races', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.race'))->first(), $campaign])])\n\n    @include('cruds.fields.locations', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.location'))->first(), $campaign])])\n\n    @include('cruds.fields.sex', ['base' => \\App\\Models\\Character::class, 'trans' => 'characters'])\n\n    @include('cruds.fields.age', ['trans' => 'characters'])\n</x-grid>\n\n\n\n<input type=\"hidden\" name=\"is_personality_visible\" value=\"{{ $campaign->entity_personality_visibility ? 0 : 1 }}\" />\n"
  },
  {
    "path": "resources/views/entities/creator/forms/conversation.blade.php",
    "content": "<?php\n$targets = [\n    \\App\\Enums\\ConversationTarget::users->value => __('conversations.targets.members'),\n    \\App\\Enums\\ConversationTarget::characters->value => __('conversations.targets.characters'),\n];\n?>\n<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Conversation::class, 'trans' => 'conversations'])\n\n    <x-forms.field\n        field=\"participants\"\n        :label=\"__('conversations.fields.participants')\">\n        <x-forms.select name=\"target_id\" :options=\"$targets\" class=\"w-full\" :selected=\"$source->target_id ?? $model->target_id ?? null\" />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/creature.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Creature::class, 'trans' => 'creatures'])\n    @include('cruds.fields.parent')\n    @include('cruds.fields.locations', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.location'))->first(), $campaign])])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/custom.blade.php",
    "content": "@include('cruds.fields.type', ['trans' => 'entries', 'placeholder' => __('entries/fields.type.placeholder')])\n\n"
  },
  {
    "path": "resources/views/entities/creator/forms/dice_roll.blade.php",
    "content": "\n"
  },
  {
    "path": "resources/views/entities/creator/forms/event.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Event::class, 'trans' => 'events'])\n\n    <x-forms.field\n        field=\"date\"\n        :label=\"__('events.fields.date')\">\n        <input type=\"text\" name=\"date\" value=\"{!! htmlspecialchars(old('date', $source->date ?? $model->date ?? null)) !!}\" maxlength=\"191\" class=\"w-full\" placeholder=\"{{ __('events.placeholders.date') }}\" />\n    </x-forms.field>\n\n    @include('cruds.fields.location')\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/family.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Timeline::class, 'trans' => 'families'])\n    @include('cruds.fields.parent')\n    @include('cruds.fields.location', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.location'))->first(), $campaign])])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/item.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Item::class, 'trans' => 'items'])\n\n    @include('cruds.fields.parent')\n\n    @include('cruds.fields.price', ['trans' => 'items'])\n    @include('cruds.fields.size', ['trans' => 'items'])\n    @include('cruds.fields.weight', ['trans' => 'items'])\n\n    @include('cruds.fields.location', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.location'))->first(), $campaign])])\n\n    @include('cruds.fields.creators')\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/journal.blade.php",
    "content": "\n<div class=\"grid gap-5 grid-cols-1 md:grid-cols-2\">\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Journal::class, 'trans' => 'journals'])\n    @include('cruds.fields.parent')\n</div>\n\n@include('cruds.fields.author')\n"
  },
  {
    "path": "resources/views/entities/creator/forms/location.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Location::class, 'trans' => 'locations'])\n\n    @include('cruds.fields.parent')\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/entities/creator/forms/map.blade.php",
    "content": "\n<div class=\"grid grid-cols-2 gap-5\">\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Map::class, 'trans' => 'maps'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.location', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.location'))->first(), $campaign])])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/note.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Note::class, 'trans' => 'notes'])\n    @include('cruds.fields.parent')\n\n    <x-forms.field field=\"entry\" css=\"col-span-2\" :label=\"__('fields.description.label')\">\n            <textarea name=\"entry\"\n                      class=\"resize-y\"\n                      rows=\"5\"\n            >{!! FormCopy::field('entry')->string() !!}</textarea>\n    </x-forms.field>\n</x-grid>\n\n\n"
  },
  {
    "path": "resources/views/entities/creator/forms/organisation.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Organisation::class, 'trans' => 'organisations'])\n    @include('cruds.fields.parent')\n    @include('cruds.fields.locations', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.location'))->first(), $campaign])])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/post.blade.php",
    "content": "<x-grid>\n    <div class=\"col-span-2\">\n        @include('cruds.fields.entity', ['required' => true])\n    </div>\n\n    <x-forms.field field=\"entry\" css=\"col-span-2\" :label=\"__('posts.fields.description')\">\n        <textarea\n            name=\"entry\"\n            class=\"resize-y\"\n            rows=\"5\"\n        >{!! FormCopy::field('entry')->string() !!}</textarea>\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id')\n\n    <x-forms.field field=\"position\" :label=\"__('entities/notes.fields.position')\">\n        <x-forms.select name=\"position\" :options=\"[0 => __('posts.position.last'), 1 => __('posts.position.first')]\" class=\"w-full\" />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/quest.blade.php",
    "content": "@include('cruds.fields.type', ['base' => \\App\\Models\\Quest::class, 'trans' => 'quests'])\n<x-grid>\n    @include('cruds.fields.parent')\n    @include('cruds.fields.instigator')\n    @include('cruds.fields.location', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.location'))->first(), $campaign])])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/race.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Race::class, 'trans' => 'races'])\n    @include('cruds.fields.parent')\n    @include('cruds.fields.locations', ['dynamicNew' => auth()->user()->can('create', [$campaign->getEntityTypes()->where('id', config('entities.ids.location'))->first(), $campaign])])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/tag.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Tag::class, 'trans' => 'tags'])\n\n    @include('cruds.fields.parent')\n\n    @include('cruds.fields.colour_picker', ['dropdownParent' => '#primary-dialog'])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/template.blade.php",
    "content": "\n@include('cruds.fields.template', ['helper' => __('entities.creator.helpers.archetype'), 'label' => __('entities.archetype'), 'placeholder' => __('crud.placeholders.search')])\n\n"
  },
  {
    "path": "resources/views/entities/creator/forms/timeline.blade.php",
    "content": "\n\n<div class=\"grid grid-cols-2 gap-5\">\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Timeline::class, 'trans' => 'timelines'])\n\n    @include('cruds.fields.parent')\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/forms/whiteboard.blade.php",
    "content": "\n\n<div class=\"grid grid-cols-2 gap-5\">\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Whiteboard::class, 'trans' => 'whiteboards'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/header/_dropdown.blade.php",
    "content": "@php\n@endphp\n\n@if ($dropdownEntityType == $entityType)\n    <x-dropdowns.item\n        css=\"disabled\"\n        link=\"#\"\n        icon=\"check\">\n        {!! $entityType->name() !!}\n    </x-dropdowns.item>\n@else\n    @php $data = [\n         'toggle' => 'entity-creator',\n         'url' => $dropdownEntityType instanceof \\App\\Models\\EntityType ?\n            route('entity-creator.form', [$campaign, 'entity_type' =>  $dropdownEntityType, 'mode' => $mode ?? null]) :\n            route('entity-creator.post', [$campaign, 'mode' => $mode ?? null]),\n         'entity-type' => 'entity',\n         'type' => 'inline',\n    ]; @endphp\n    <x-dropdowns.item\n        link=\"#\"\n        :data=\"$data\"\n        icon=\"fa-solid\">\n        @if ($dropdownEntityType instanceof \\App\\Models\\EntityType)\n        {!! $dropdownEntityType->name() !!}\n        @else\n        {{ __('entities.article') }}\n        @endif\n    </x-dropdowns.item>\n@endif\n"
  },
  {
    "path": "resources/views/entities/creator/header/header.blade.php",
    "content": "<div class=\"quick-creator-header pb-4 border-b border-base-300 \">\n    <div class=\"flex gap-1\">\n        <div class=\"grow flex flex-col gap-2 items-start\">\n            <div class=\"qq-mode text-sm text-uppercase sm:w-96\">\n                @if ($mode === 'bulk')\n                    {{ __('entities.creator.modes.bulk') }}\n                @elseif ($mode === 'templates')\n                    {{ __('entities.creator.modes.archetypes') }}\n                @else\n                    {{ __('entities.creator.modes.default') }}\n                @endif\n            </div>\n            @if (empty($target))\n                <div class=\"dropdown\">\n                    <div role=\"button\" class=\"text-2xl group\" data-dropdown aria-expanded=\"false\"  data-append=\"#primary-dialog\">\n                        {!! $newLabel !!}\n                        <x-icon class=\"fa-regular fa-chevron-down group-hover:text-primary transition duration-150\" />\n                        <span class=\"sr-only\">Change type</span>\n                    </div>\n                    <div class=\"dropdown-menu hidden\" role=\"menu\" data-tippy-root>\n                        <div class=\"overflow-y-auto max-h-80\">\n                        @foreach ($orderedEntityTypes as $dropdownEntityType)\n                            @include('entities.creator.header._dropdown')\n                        @endforeach\n                        <x-dropdowns.divider />\n\n                        @php $data = ['toggle' => 'entity-creator', 'url' => route('entity-creator.selection', $campaign), 'entity-type' => 'return']; @endphp\n                        <x-dropdowns.item link=\"#\" icon=\"fa-regular fa-arrow-left\" :data=\"$data\">\n                            {{ __('entities.creator.back') }}\n                        </x-dropdowns.item>\n                        </div>\n                    </div>\n                </div>\n            @else\n                <div>\n                    <div class=\"text-2xl\">\n                        {!! $newLabel !!}\n                    </div>\n                </div>\n            @endif\n        </div>\n        @if (empty($target))\n            <div class=\"qq-toggles flex text-right items-center content-center justify-end gap-2\">\n                @if (isset($entityType))\n                    <div\n                        class=\"qq-mode-toggle btn2 self-end @if (empty($mode)) btn-outline  @endif\"\n                        data-mode=\"single\"\n                        data-url=\"{{ route('entity-creator.form', [$campaign, 'entity_type' => $entityType]) }}\"\n                        aria-label=\"{{ __('entities.creator.modes.default') }}\"\n                        data-title=\"{{ __('entities.creator.modes.default') }}\"\n                        data-tooltip\n                        data-toggle=\"dialog\">\n                        <x-icon class=\"fa-regular fa-user\" />\n                    </div>\n                    <div\n                        class=\"qq-mode-toggle btn2 self-end @if ($mode == 'bulk') btn-outline  @endif\"\n                        data-mode=\"bulk\"\n                        data-url=\"{{ route('entity-creator.form', [$campaign, 'entity_type' => $entityType, 'mode' => 'bulk']) }}\"\n                        aria-label=\"{{ __('entities.creator.modes.bulk') }}\"\n                        data-title=\"{{ __('entities.creator.modes.bulk') }}\"\n                        data-tooltip\n                        data-toggle=\"dialog\">\n                        <x-icon class=\"fa-regular fa-users\" />\n                    </div>\n                    <div\n                        class=\"qq-mode-toggle btn2 self-end @if ($mode == 'templates') btn-outline  @endif\"\n                        data-mode=\"templates\"\n                        data-url=\"{{ route('entity-creator.form', [$campaign, 'entity_type' => $entityType, 'mode' => 'templates']) }}\"\n                        aria-label=\"{{ __('entities.creator.modes.archetypes') }}\"\n                        data-title=\"{{ __('entities.creator.modes.archetypes') }}\"\n                        data-tooltip\n                        data-toggle=\"dialog\">\n                        <x-icon class=\"fa-regular fa-address-book\" />\n                    </div>\n                @else\n\n                    <div class=\"qq-mode-toggle btn2 self-end @if (empty($mode)) btn-outline  @endif\" data-mode=\"single\" data-url=\"{{ route('entity-creator.post', [$campaign]) }}\" aria-label=\"{{ __('entities.creator.modes.default') }}\" data-title=\"{{ __('entities.creator.modes.default') }}\" data-toggle=\"tooltip\">\n                        <x-icon class=\"fa-regular fa-user\" />\n                    </div>\n                @endif\n            </div>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_abilities.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'ability',\n        'plural' => 'abilities',\n        'id' => config('entities.ids.ability'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'abilities'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_attribute_templates.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'attribute_template',\n        'plural' => 'attribute_templates',\n        'id' => config('entities.ids.attribute_template'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'attribute_templates'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_calendars.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'calendar',\n        'plural' => 'calendars',\n        'id' => config('entities.ids.calendar'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'calendars'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_characters.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'character',\n        'plural' => 'characters',\n        'id' => config('entities.ids.character'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'characters'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_conversations.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'conversation',\n        'plural' => 'conversations',\n        'id' => config('entities.ids.conversation'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'conversations'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_creatures.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'creature',\n        'plural' => 'creatures',\n        'id' => config('entities.ids.creature'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'creatures'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_dice_rolls.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'dice_roll',\n        'plural' => 'dice_rolls',\n        'id' => config('entities.ids.dice_roll'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'dice_rolls'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_events.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'event',\n        'plural' => 'events',\n        'id' => config('entities.ids.event'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'events'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_families.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'family',\n        'plural' => 'families',\n        'id' => config('entities.ids.family'),\n    ])\n\n    @include('entities.creator.selection._full', ['key' => 'families'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_full.blade.php",
    "content": "<a href=\"{{ $entityType->isCustom() ? route('entities.create', [$campaign, $entityType]) : route($entityType->pluralCode() . '.create', $campaign) }}\" class=\"full-form text-link\" aria-label=\"{{ __('entities.creator.actions.full') }}\" data-title=\"{{ __('entities.creator.actions.full') }}\" data-toggle=\"tooltip\">\n    <x-icon class=\"fa-regular fa-pen-to-square\" />\n    <span class=\"sr-only\">Go to the full form for creating a new {{ $entityType->name() }}</span>\n</a>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_items.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'item',\n        'plural' => 'items',\n        'id' => config('entities.ids.item'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'items'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_journals.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'journal',\n        'plural' => 'journals',\n        'id' => config('entities.ids.journal'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'journals'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_locations.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'location',\n        'plural' => 'locations',\n        'id' => config('entities.ids.location'),\n    ])\n\n    @include('entities.creator.selection._full', ['key' => 'locations'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_main.blade.php",
    "content": "@php\n/** @var \\App\\Models\\EntityType $entityType $entityType */\n@endphp\n<a href=\"#\" class=\"quick-creator-selection flex gap-2 items-center min-w-0 text-link\" data-toggle=\"entity-creator\" data-url=\"{{ route('entity-creator.form', [$campaign, 'entity_type' => $entityType]) }}\" data-entity-type=\"{{ $entityType->code }}\" aria-label=\"Reveal {{ $entityType->name() }} quick creator form\">\n    <div class=\"w-4 text-center\">\n        <x-icon class=\" {{ $entityType->icon() }}\" />\n    </div>\n    <span class=\"truncate block\">\n        {!! $entityType->name() !!}\n    </span>\n</a>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_maps.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'map',\n        'plural' => 'maps',\n        'id' => config('entities.ids.map'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'maps'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_notes.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'note',\n        'plural' => 'notes',\n        'id' => config('entities.ids.note'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'notes'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_organisations.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'organisation',\n        'plural' => 'organisations',\n        'id' => config('entities.ids.organisation'),\n    ])\n\n    @include('entities.creator.selection._full', ['key' => 'organisations'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_posts.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'post',\n        'plural' => 'posts',\n        'icon' => 'fa-duotone fa-pen'\n    ])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_quests.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'quest',\n        'plural' => 'quests',\n        'id' => config('entities.ids.quest'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'quests'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_races.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'race',\n        'plural' => 'races',\n        'id' => config('entities.ids.race'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'races'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_tags.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'tag',\n        'plural' => 'tags',\n        'id' => config('entities.ids.tag'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'tags'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/_timelines.blade.php",
    "content": "<div class=\"option flex gap-2\">\n\n    @include('entities.creator.selection._main', [\n        'singular' => 'timeline',\n        'plural' => 'timelines',\n        'id' => config('entities.ids.timeline'),\n    ])\n    @include('entities.creator.selection._full', ['key' => 'timelines'])\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/all.blade.php",
    "content": "@php\n$half = ceil(count($entityTypes)  / 2);\n$i = 0;\n@endphp\n<div class=\"text-xs uppercase font-semibold text-neutral-content mb-4\">\n    {{ __('entities.creator.titles.everything') }}\n</div>\n<div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-5 selection\">\n    <div class=\"column flex flex-col gap-4 \" data-i=\"{{ $i }}\" data-half=\"{{ $half }}\">\n    @foreach ($entityTypes as $entityType)\n        @if ($i == $half) </div><div class=\"column flex flex-col gap-4\"> @endif\n        <div class=\"option flex gap-2 justify-between\">\n            @if ($entityType instanceof \\App\\Models\\EntityType)\n                @include('entities.creator.selection._main')\n                @include('entities.creator.selection._full')\n            @else\n                <a href=\"#\" class=\"quick-creator-selection flex gap-2 items-center text-link\" data-toggle=\"entity-creator\" data-url=\"{{ route('entity-creator.post', [$campaign]) }}\" data-entity-type=\"post\">\n                    <x-icon class=\"w-4 text-center fa-duotone fa-pen\" />\n                    <span class=\"truncate block min-w-0\">{!! __('entities.article') !!}</span>\n                </a>\n            @endif\n        </div>\n        @php $i++; @endphp\n    @endforeach\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection/popular.blade.php",
    "content": "<div class=\"text-xs uppercase font-semibold text-neutral-content mb-4\">\n    {{ __('entities.creator.titles.quick-access') }}\n</div>\n<div class=\"selection flex flex-col gap-4 sm:pr-4\">\n    @foreach ($popular as $entityType)\n        <div class=\"option flex justify-between gap-1\">\n            @include('entities.creator.selection._main')\n            @include('entities.creator.selection._full')\n        </div>\n    @endforeach\n</div>\n"
  },
  {
    "path": "resources/views/entities/creator/selection.blade.php",
    "content": "@if (!isset($new))\n<x-dialog.header>\n    <span class=\"sr-only\" id=\"dialog-label-primary-dialog\">{{ __('Quick creator dialog') }}</span>\n</x-dialog.header>\n@endif\n<article id=\"qq-modal-selection\" class=\"p-4 md:px-6\">\n    <div class=\"quick-creator-body flex flex-col gap-5 w-full\">\n        @includeWhen(isset($new), 'entities.creator._created', ['success' => $new ?? null, 'dismissable' => false])\n\n        <div class=\"options flex flex-col gap-10 sm:gap-5 sm:flex-row w-full\">\n            @if ($popular->isNotEmpty())\n            <div class=\"popular sm:border-r border-base-300 sm:w-60\">\n                @include('entities.creator.selection.popular')\n            </div>\n            @endif\n            <div class=\"all w-full\">\n                @include('entities.creator.selection.all')\n            </div>\n        </div>\n    </div>\n</article>\n<x-dialog.footer>\n    <x-slot name=\"cancel\">\n        <p class=\"text-neutral-content text-xs\">{!! __('entities.creator.missing_v2', [\n        'learn-more' => '<a href=\"//docs.kanka.io/en/latest/features/quick-creator.html\" class=\"text-link\">' .\n            '<i class=\"fa-regular fa-external-link\" aria-hidden=\"true\"></i> ' . __('front/newsletter.actions.learn_more') . '</a>']) !!}</p>\n    </x-slot>\n</x-dialog.footer>\n"
  },
  {
    "path": "resources/views/entities/creator/templates.blade.php",
    "content": "<x-dialog.header>\n    @if (isset($origin))\n        <div class=\"sm:w-80 text-left\">{{ __('entities.creator.modes.default') }}</div>\n    @endif\n</x-dialog.header>\n<article class=\"p-4 md:px-6\">\n\n<div class=\"entity-creator-body-{{ $entityType->code }}\">\n\n    @include('entities.creator.header.header')\n    <div class=\"quick-creator-body\">\n        @if ($templates->isEmpty())\n            <p class=\"\">\n                <a href=\"//docs.kanka.io/en/latest/guides/archetypes.html\" class=\"text-link\">\n                    <x-icon class=\"link\" />\n                    {{ __('entries/archetypes.helpers.how') }}\n                </a>\n            </p>\n        @else\n            <ul class=\"flex flex-col gap-1 mt-4\">\n                @foreach ($templates as $template)\n                    <li class=\"border border-base-200 rounded-xl px-4 py-2\">\n                        @if ($entityType->isCustom())\n                            <a\n                                href=\"{{ route('entities.create', [$campaign, $entityType, 'copy' => $template->id, 'template' => true]) }}\"\n                                class=\"new-entity-from-template text-link w-full\"\n                                data-entity-type=\"{{ $entityType->plural() }}\">\n                                {{ $template->name  }}\n                            </a>\n                        @else\n                            <a\n                                href=\"{{ route($entityType->pluralCode() . '.create', [$campaign, 'copy' => $template->id, 'template' => true]) }}\"\n                                class=\"new-entity-from-template  text-link  w-full\"\n                                data-entity-type=\"{{ $entityType->plural() }}\">\n                                {{ $template->name  }}\n                            </a>\n                        @endif\n                    </li>\n                @endforeach\n            </ul>\n        @endif\n    </div>\n\n    <div class=\"quick-creator-loading p-8 text-center text-lg\" style=\"display: none\">\n        <x-icon class=\"load\" />\n    </div>\n</div>\n\n</article>\n"
  },
  {
    "path": "resources/views/entities/forms/create.blade.php",
    "content": "<?php\n    /**\n     * @var \\App\\Models\\EntityType $entityType\n     * @var \\App\\Models\\Campaign $campaign\n     */\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities.creator.title') . ' - ' . $entityType->name(),\n    'breadcrumbs' => [\n        ['url' => Breadcrumb::campaign($campaign)->entityType($entityType)->index(), 'label' => $entityType->plural()],\n        __('crud.create'),\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n])\n\n@section('content')\n    <x-form\n        :action=\"['entities.store', $campaign, $entityType]\"\n        files\n        unsaved\n        class=\"entity-form\"\n        id=\"entity-form\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars')]\">\n\n        <x-grid type=\"1/1\">\n        @include('cruds.forms._errors')\n\n        <div class=\"nav-tabs-custom bg-base-100 p-4 rounded-xl flex flex-col gap-6 relative\">\n            <div class=\"flex gap-2 items-center justify-between sticky z-10 top-12 bg-base-100\">\n                <div class=\"overflow-x-auto\">\n                    <ul class=\"nav-tabs flex items-stretch w-full\" role=\"tablist\">\n                        <x-tab.tab target=\"entry\" :default=\"true\" :title=\"__('entries/tabs.identity')\"></x-tab.tab>\n\n                        @if (config('limits.campaigns.premium'))\n                            <x-tab.tab target=\"premium\" icon=\"premium\" :title=\"__('crud.tabs.premium')\"></x-tab.tab>\n                        @endif\n                        <x-tab.tab target=\"attributes\" icon=\"attributes\" :title=\"__('entries/tabs.properties')\"></x-tab.tab>\n\n                        <x-tab.tab target=\"permissions\" icon=\"permissions\" :title=\"__('crud.tabs.permissions')\"></x-tab.tab>\n\n                        @if ((!empty($source) || !empty(old('copy_source_id'))) && $tabCopy)\n                            <x-tab.tab target=\"copy\" :title=\"__('crud.forms.copy_options')\"></x-tab.tab>\n                        @endif\n                    </ul>\n                </div>\n\n                @include('cruds.fields.save', ['disableCancel' => true, 'target' => 'entity-form'])\n            </div>\n\n            <div class=\"tab-content\">\n                <div class=\"tab-pane pane-entry {{ (request()->get('tab') == null ? ' active' : '') }}\" id=\"form-entry\">\n                    <x-grid type=\"1/1\">\n                        @include('entities.forms.entry')\n                    </x-grid>\n                </div>\n\n                @if (config('limits.campaigns.premium'))\n                    <div class=\"tab-pane pane-premium {{ (request()->get('tab') == 'premium' ? ' active' : '') }}\" id=\"form-premium\">\n                        <x-grid type=\"1/1\">\n                            @include('cruds.forms._premium')\n                        </x-grid>\n                    </div>\n                @endif\n                @if ((!empty($source) || !empty(old('copy_source_id'))) && $tabCopy)\n                    <div class=\"tab-pane pane-copy {{ (request()->get('tab') == 'copy' ? ' active' : '') }}\" id=\"form-copy\">\n                        <x-grid type=\"1/1\">\n                            @include('cruds.forms._copy')\n                        </x-grid>\n                    </div>\n                @endif\n                <div class=\"tab-pane pane-attributes {{ (request()->get('tab') == 'attributes' ? ' active' : '') }}\" id=\"form-attributes\">\n                    <x-grid type=\"1/1\">\n                        @include('cruds.forms._attributes')\n                    </x-grid>\n                </div>\n                <div class=\"tab-pane pane-permissions {{ (request()->get('tab') == 'permissions' ? ' active' : '') }}\" id=\"form-permissions\">\n                    <x-grid type=\"1/1\">\n                        @include('cruds.forms._permission')\n                    </x-grid>\n                </div>\n            </div>\n        </div>\n        </x-grid>\n    </x-form>\n@endsection\n\n@include('editors.editor')\n\n\n@includeIf($entityType->pluralCode() . '.forms._tutorial')\n"
  },
  {
    "path": "resources/views/entities/forms/edit.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Entity $entity */\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('crud.titles.editing', ['name' => $entity->name]) . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('crud.edit'),\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n    'entity' => null,\n])\n\n@section('content')\n    <x-form\n        method=\"PATCH\"\n        :action=\"['entities.update', $campaign, $entity]\"\n        files\n        unsaved\n        class=\"entity-form\"\n        id=\"entity-form\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars')]\">\n    <x-grid type=\"1/1\">\n        @include('cruds.forms._errors')\n\n        <div class=\"nav-tabs-custom bg-base-100 p-4 rounded-xl flex flex-col gap-6 relative\">\n            <div class=\"flex gap-2 items-center justify-between sticky z-10 top-12 bg-base-100\">\n                <div class=\"overflow-x-auto\">\n                    <ul class=\"nav-tabs flex items-stretch w-full\" role=\"tablist\">\n                        <x-tab.tab target=\"entry\" :default=\"true\" :title=\"__('entries/tabs.identity')\"></x-tab.tab>\n\n                        @includeIf($entity->entityType->pluralCode() . '.form._tabs', ['source' => null])\n                        @if (config('limits.campaigns.premium'))\n                            <x-tab.tab target=\"premium\" icon=\"premium\" :title=\"__('crud.tabs.premium')\"></x-tab.tab>\n                        @endif\n                        @if ($tabAttributes)\n                            <x-tab.tab target=\"attributes\" icon=\"attributes\" :title=\"__('entries/tabs.properties')\"></x-tab.tab>\n                        @endif\n                        @if ($tabPermissions)\n                            <x-tab.tab target=\"permissions\" icon=\"permissions\" :title=\"__('crud.tabs.permissions')\"></x-tab.tab>\n                        @endif\n                    </ul>\n                </div>\n\n                <div class=\"\">\n                    @include('cruds.fields.save', ['disableCancel' => true, 'target' => 'entity-form', 'model' => $entity])\n                </div>\n            </div>\n\n            <div class=\"tab-content\">\n                <div class=\"tab-pane flex flex-col gap-5 {{ (request()->get('tab') == null ? ' active' : '') }}\" id=\"form-entry\">\n                    @if ($entity->entityType->isCustom())\n                        @include('entities.forms.entry', ['source' => null, 'model' => $entity])\n                    @else\n                        @include($entity->entityType->pluralCode() . '.form._entry', ['source' => null])\n                    @endif\n                </div>\n                @includeIf($name . '.form._panes', ['source' => null])\n                @if (config('limits.campaigns.premium'))\n                    <div class=\"tab-pane flex flex-col gap-5 {{ (request()->get('tab') == 'premium' ? ' active' : '') }}\" id=\"form-premium\">\n                        @include('cruds.forms._premium', ['source' => null])\n                    </div>\n                @endif\n                @if ($tabAttributes)\n                    <div class=\"tab-pane flex flex-col gap-5 {{ (request()->get('tab') == 'attributes' ? ' active' : '') }}\" id=\"form-attributes\">\n                        @include('cruds.forms._attributes', ['source' => null])\n                    </div>\n                @endif\n                @if ($tabPermissions)\n                <div class=\"tab-pane flex flex-col gap-5 {{ (request()->get('tab') == 'permission' ? ' active' : '') }}\" id=\"form-permissions\">\n                    @include('cruds.forms._permission', ['source' => null])\n                </div>\n                @endif\n            </div>\n        </div>\n    </x-grid>\n\n    @if($entity && $campaign->hasEditingWarning())\n        <input type=\"hidden\" id=\"editing-keep-alive\" data-url=\"{{ route('entities.keep-alive', [$campaign, $entity->id]) }}\" />\n    @endif\n    </x-form>\n@endsection\n\n@include('editors.editor')\n\n@section('modals')\n    @parent\n    @includeWhen(!empty($editingUsers), 'cruds.forms.edit_warning', ['model' => $entity])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/forms/entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['trans' => 'crud'])\n    @include('cruds.fields.parent', ['trans' => 'crud', 'is_parent' => true])\n    @include('cruds.fields.locations', ['from' => $entity ?? null, 'quickCreator' => true, 'model' => $entity ?? $source ?? null])\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/headers/__entity-locations.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Entity $entity */\nuse Illuminate\\Support\\Facades\\Blade;\nif (!$campaign->enabled('locations') || $entity->locations->isEmpty()) {\n    return;\n}\n?>\n<div class=\"entity-header-sub-element flex gap-2 items-center\">\n    <x-icon :class=\"$entity->locations[0]->entity->entityType->icon()\" :title=\"$entity->locations[0]->entity->entityType->name()\" />\n    <ul class=\"list-none p-0\">\n    @foreach ($entity->locations as $location)\n        <li class=\"inline after:content-[','] after:mr-1 last:after:content-none\">\n        <x-entity-link\n            :entity=\"$location->entity\"\n            :campaign=\"$campaign\" />\n        </li>\n    @endforeach\n    </ul>\n\n</div>\n"
  },
  {
    "path": "resources/views/entities/headers/__location.blade.php",
    "content": "<?php\nuse Illuminate\\Support\\Facades\\Blade;\nif (!$campaign->enabled('locations') || !$entity->child->location || !$entity->child->location->entity) {\n    return;\n}\n?>\n<div class=\"entity-header-sub-element\">\n    <x-icon :class=\"$entity->child->location->entity->entityType->icon()\" :title=\"$entity->child->location->entity->entityType->name()\" />\n    @if ($entity->child->location->parent && $entity->child->location->parent->entity)\n        {!! __('crud.fields.locations', [\n            'first' => Blade::renderComponent(\n                new \\App\\View\\Components\\EntityLink($entity->child->location->entity, $campaign)\n                ),\n            'second' => Blade::renderComponent(\n                new \\App\\View\\Components\\EntityLink($entity->child->location->parent->entity, $campaign)\n                ),\n        ]) !!}\n    @else\n        <x-entity-link\n            :entity=\"$entity->child->location->entity\"\n            :campaign=\"$campaign\" />\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/entities/headers/__parent.blade.php",
    "content": "@if ($entity->parent)\n    <div class=\"entity-header-sub-element\">\n        <span class=\"\" data-title=\"{{ __('crud.fields.parent') }}\" data-toggle=\"tooltip\">\n            <x-icon :class=\"\\App\\Facades\\Module::duoIcon($entityType)\" />\n        </span>\n        <x-entity-link\n            :entity=\"$entity->parent\"\n            :campaign=\"$campaign\" />\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/headers/__parent_location.blade.php",
    "content": "<?php\nif (!$campaign->enabled('locations') || !$entity->parent) {\n    return;\n}\n?>\n<div class=\"entity-header-sub-element\">\n    <x-icon :class=\"$entityType->icon()\" :title=\"__('crud.fields.parent')\" />\n    @if ($entity->parent->parent)\n        {!! __('crud.fields.locations', [\n            'first' => \\Illuminate\\Support\\Facades\\Blade::renderComponent(\n                new \\App\\View\\Components\\EntityLink($entity->parent, $campaign)\n                ),\n            'second' => \\Illuminate\\Support\\Facades\\Blade::renderComponent(\n                new \\App\\View\\Components\\EntityLink($entity->parent->parent, $campaign)\n                ),\n        ]) !!}\n    @else\n        <x-entity-link\n            :entity=\"$entity->parent\"\n            :campaign=\"$campaign\" />\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/entities/headers/_ability.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/_calendar.blade.php",
    "content": "@if ($entity->child->date)\n    <div class=\"entity-header-sub-element\">\n        <span data-title=\"{{ __('calendars.fields.date') }}\" data-toggle=\"tooltip\">\n            <x-icon class=\"fa-regular fa-clock\" />\n            {!! $entity->child->niceDate() !!}\n        </span>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/headers/_character.blade.php",
    "content": "<?php\n?>\n\n\n@if (!$campaign->enabled('locations') || $entity->locations->isEmpty())\n    <?php return ?>\n@endif\n\n<div class=\"entity-header-sub entity-header-line\">\n    @include('entities.headers.__entity-locations')\n</div>\n\n\n"
  },
  {
    "path": "resources/views/entities/headers/_creature.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/_custom.blade.php",
    "content": "@if ($entity->parent)\n    <div class=\"entity-header-sub-element\">\n        <span class=\"\" data-title=\"{{ __('crud.fields.parent') }}\" data-toggle=\"tooltip\">\n            <x-icon :class=\"$entity->entityType->icon()\" />\n        </span>\n        <x-entity-link\n            :entity=\"$entity->parent\"\n            :campaign=\"$campaign\" />\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/headers/_event.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n\n@if($entity->child->date)\n    <div class=\"entity-header-sub-element\">\n        <span data-title=\"{{ __('events.fields.date') }}\" data-toggle=\"tooltip\">\n            <x-icon class=\"fa-regular fa-calendar-day\" /> {{ $entity->child->date }}\n        </span>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/headers/_family.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n@include('entities.headers.__location')\n"
  },
  {
    "path": "resources/views/entities/headers/_item.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/_journal.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n@if($entity->child->date)\n    <div class=\"entity-header-sub-element\">\n        <span data-title=\"{{ __('journals.fields.date') }}\" data-toggle=\"tooltip\">\n            <x-icon class=\"fa-regular fa-calendar-day\" />\n            <x-date :date=\"$entity->child->date\" />\n        </span>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/headers/_location.blade.php",
    "content": "@include('entities.headers.__parent_location')\n"
  },
  {
    "path": "resources/views/entities/headers/_map.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n@includeWhen($entity->child->location, 'entities.headers.__location')\n\n\n"
  },
  {
    "path": "resources/views/entities/headers/_note.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/_organisation.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/_quest.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/_race.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/_tag.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/_timeline.blade.php",
    "content": "@includeWhen($entity->parent, 'entities.headers.__parent')\n"
  },
  {
    "path": "resources/views/entities/headers/actions.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Campaign $campaign\n * */\n$create = false;\n$manage = false;\n$system = false;\n$data = false;\n$delete = false;\n\n?>\n\n@if (!isset($edit) || $edit !== false)\n@can('update', $entity)\n    <a href=\"{{ $entity->url('edit') }}\" class=\"btn2 btn-sm\" data-tooltip data-title=\"<div class='flex gap-3 items-center'><span>{{ __('entities/actions.tooltips.edit') }}</span><span class='inline-block rounded border-base-300 border px-1'>E</span></div>\" data-html=\"true\" data-shortcut=\"e\">\n        <x-icon class=\"pencil\" />\n        {{ __('crud.edit') }}\n    </a>\n@endcan\n@endif\n\n\n<div class=\"dropdown entity-actions-dropdown flex items-center\">\n    <div role=\"button\" tabindex=\"0\" data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"entity-submenu\" class=\"btn2 btn-sm entity-actions-button\">\n        <span class=\"sr-only\">{{ __('Open action menu') }}</span>\n        <x-icon class=\"fa-regular fa-ellipsis-h\" />\n    </div>\n    <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"entity-submenu\">\n        @if (isset($edit) && $edit === false)\n            @can('update', $entity)\n                <x-dropdowns.item\n                    :link=\"$entity->url('edit')\"\n                    icon=\"pencil\"\n                    shortcut=\"E\"\n                >\n                    {{ __('crud.edit') }}\n                </x-dropdowns.item>\n            @endif\n        @endif\n        <!-- Create & Link section -->\n        @can('create', [$entity->entityType, $campaign])\n            @php $create = true; @endphp\n            <x-dropdowns.item :link=\"$entity->entityType->createRoute($campaign)\" icon=\"fa-regular fa-plus\">\n                {{ __('crud.actions.new') }}\n            </x-dropdowns.item>\n            @if ($entity->entityType->isNested())\n                <x-dropdowns.item :link=\"$entity->entityType->createRoute($campaign, ['parent_id' => $entity->id])\" icon=\"fa-regular fa-plus\">\n                    {{ __('crud.actions.new_child') }}\n                </x-dropdowns.item>\n            @endif\n        @endcan\n        @if ($entity && auth()->check())\n            @can('post', [$entity])\n                @php $create = true; @endphp\n                <x-dropdowns.item :link=\"route('entities.posts.create', [$campaign, $entity])\" icon=\"fa-regular fa-pen-to-square\">\n                    {{ __('crud.actions.new_post') }}\n                </x-dropdowns.item>\n            @endcan\n\n            @can('update', $entity)\n                @php $create = true; @endphp\n                <x-dropdowns.item link=\"{{ route('entities.relations.create', [$campaign, 'entity' => $entity, 'mode' => 'table']) }}\" :dialog=\"route('entities.relations.create', [$campaign, 'entity' => $entity, 'mode' => 'table'])\" icon=\"fa-regular fa-people-arrows\">\n                    {{ __('entities/relations.create.new_title') }}\n                </x-dropdowns.item>\n            @endcan\n        @endif\n\n        @if ($create) <x-dropdowns.divider /> @endif\n\n        <!-- Manage section -->\n        @can('create', [$entity->entityType, $campaign])\n            @php $manage = true; @endphp\n            <x-dropdowns.item link=\"{{ $entity->entityType->createRoute($campaign, ['copy' => $entity->id]) }}\" icon=\"fa-regular fa-copy\">\n                {{ __('crud.actions.copy') }}\n            </x-dropdowns.item>\n        @endcan\n        @auth\n            @php $manage = true; @endphp\n            <x-dropdowns.item link=\"#\" :data=\"['title' => $entity->entityType->code . ':' . $entity->id, 'toggle' => 'tooltip', 'clipboard' => '[' . $entity->entityType->code . ':' . $entity->id .']', 'toast' => __('crud.alerts.copy_mention')]\" icon=\"fa-regular fa-at\">\n                {{ __('crud.actions.copy_mention') }}\n            </x-dropdowns.item>\n            @can('setTemplates', $campaign)\n                <x-dropdowns.item :link=\"route('entities.template', [$campaign, $entity])\" :icon=\"$entity->isTemplate() ? 'fa-regular fa-star' : 'fa-solid fa-star'\">\n                    @if($entity->isTemplate())\n                        {{ __('entities/actions.archetype.unset') }}\n                    @else\n                        {{ __('entities/actions.archetype.set') }}\n                    @endif\n                </x-dropdowns.item>\n            @endcan\n\n\n            @can('update', $entity)\n                <x-dropdowns.item :link=\"route('entities.story.reorder', [$campaign, $entity])\" icon=\"fa-regular fa-list-ol\">\n                    {{ __('entities/story.reorder.icon_tooltip') }}\n                </x-dropdowns.item>\n            @endcan\n\n            @can('update', $entity)\n                @if ($entity->isTimeline())\n                    <x-dropdowns.item :link=\"route('timelines.reorder', [$campaign, $entity->child])\" icon=\"fa-regular fa-list-ol\">\n                        {{ __('timelines.show.tabs.reorder-elements') }}\n                    </x-dropdowns.item>\n                @endif\n            @endcan\n        @endif\n\n        @if ($manage) <x-dropdowns.divider /> @endif\n\n\n        <!-- System section -->\n        @auth\n            @if ((empty($disableCopyCampaign) || !$disableCopyCampaign))\n                @php /** todo: the option should be visible even if a user has no other campaigns to show that its possible, and the page should then warn the user about them not having another campaign */ @endphp\n                @php $system = true; @endphp\n                @can('update', $entity)\n                    <x-dropdowns.item link=\"{{ route('entities.move', [$campaign, $entity]) }}\" icon=\"fa-regular fa-share-from-square\">\n                        {{ __('entities/actions.transfer') }}\n                    </x-dropdowns.item>\n                @else\n                    <x-dropdowns.item link=\"{{ route('entities.move', [$campaign, $entity]) }}\" icon=\"copy\">\n                        {{ __('entities/actions.copy-campaign') }}\n                    </x-dropdowns.item>\n                @endcan\n            @endif\n\n            @if ((empty($disableMove) || !$disableMove) && auth()->user()->can('move', $entity))\n                @php $system = true; @endphp\n                <x-dropdowns.item link=\"{{ route('entities.transform', [$campaign, $entity]) }}\" icon=\"fa-regular fa-arrows-rotate\">\n                    {{ __('entities/actions.convert') }}\n                </x-dropdowns.item>\n            @endif\n        @endauth\n\n        @if ($system) <x-dropdowns.divider /> @endif\n\n\n        <!-- Data/Export section -->\n        <x-dropdowns.item link=\"{{ route('entities.html-export', [$campaign, $entity]) }}\" icon=\"fa-regular fa-print\">\n            {{ __('crud.actions.print') }}\n        </x-dropdowns.item>\n        @auth\n            <x-dropdowns.item link=\"{{ route('entities.json.export', [$campaign, $entity]) }}\" icon=\"fa-regular fa-download\">\n                {{ __('entities/actions.json-export') }}\n            </x-dropdowns.item>\n            <x-dropdowns.item link=\"{{ route('entities.markdown.export', [$campaign, $entity]) }}\" icon=\"fa-brands fa-markdown\">\n                {{ __('entities/actions.markdown-export') }}\n            </x-dropdowns.item>\n\n            @can('update', $entity)\n                <x-dropdowns.item link=\"{{ route('entities.share.setup', [$campaign, 'entity' => $entity]) }}\" :dialog=\"route('entities.share.setup', [$campaign, 'entity' => $entity])\" icon=\"fa-regular fa-share\">\n                    {{ __('crud.actions.share') }}\n                </x-dropdowns.item>\n            @endcan\n        @endauth\n\n        @can('update', $entity)\n            <x-dropdowns.divider />\n            <x-dropdowns.item :link=\"route('entities.archive', [$campaign, $entity])\" icon=\"fa-regular fa-archive\">\n                @if ($entity->archived_at)\n                    {{ __('entities/actions.unarchive.title') }}\n                @else\n                    {{ __('entities/actions.archive.title') }}\n                @endif\n            </x-dropdowns.item>\n            @php $delete = true; @endphp\n        @endcan\n\n        @can('delete', $entity)\n            @if (!$delete)\n            <x-dropdowns.divider />\n            @endif\n            @php\n                $url = route('confirm-delete', [$campaign, 'route' => route('entities.destroy', [$campaign, $entity]), 'name' => $entity->name]);\n            @endphp\n            <x-dropdowns.item\n                link=\"#\"\n                css=\"hover:bg-error\"\n                :data=\"['toggle' => 'dialog', 'target' => 'primary-dialog', 'url' => $url, 'shortcut' => 'ctrl+delete']\"\n                icon=\"trash\"\n                shortcut=\"Ctrl Del\"\n            >\n                <span class=\"text-error-content\">\n                    {{ __('crud.remove') }}\n                </span>\n            </x-dropdowns.item>\n        @endcan\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/headers/toggle.blade.php",
    "content": "<div class=\"join\">\n    <div class=\"btn2 btn-sm btn-post-collapse join-item\" data-title=\"{{ __('entities/story.actions.collapse_all') }}\" data-toggle=\"tooltip\">\n        <x-icon class=\"fa-regular fa-grip-lines\" />\n    </div>\n    <div class=\"btn2 btn-sm btn-post-expand join-item\" data-title=\"{{ __('entities/story.actions.expand_all') }}\" data-toggle=\"tooltip\">\n        <x-icon class=\"fa-regular fa-bars\" />\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/index/_actions.blade.php",
    "content": "@foreach ($actions as $action)\n    @if (empty($action['policy']) || (auth()->check() && auth()->user()->can($action['policy'], $model)))\n        <a href=\"{{ $action['route'] }}\" class=\"btn2 btn-{{ $action['class'] }}\" @if ($action['blank'])target=\"_blank\"@endif>\n            {!! $action['label'] !!}\n        </a>\n    @endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/index/_create.blade.php",
    "content": "<div class=\"join\">\n    <a href=\"{{  $entityType->createRoute($campaign) }}\" class=\"btn2 btn-primary join-item btn-new-entity\" data-entity-type=\"{{ $entityType->code }}\"\n       aria-label=\"Create {!!$entityType->name() !!}\">\n        <x-icon class=\"plus\" />\n        <span class=\"hidden md:inline\">{!! $entityType->name() !!}</span>\n    </a>\n    <div class=\"dropdown\">\n        <button type=\"button\" class=\"btn2 btn-primary join-item\" data-dropdown aria-expanded=\"false\" aria-label=\"Create from template\" aria-haspopup=\"menu\" aria-controls=\"templates-submenu\">\n            <x-icon class=\"fa-regular fa-caret-down\" />\n            <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n        </button>\n        <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"templates-submenu\">\n            @if (auth()->user()->can('useTemplates', $campaign) && $templates->isNotEmpty())\n                @foreach ($templates as $entityTemplate)\n                    <x-dropdowns.item\n                        :link=\"$entityType->createRoute($campaign, ['copy' => $entityTemplate->id, 'template' => true])\"\n                        css=\"new-entity-from-template\" icon=\"fa-solid fa-regular\">\n                        {{ $entityTemplate->name  }}\n                    </x-dropdowns.item>\n                @endforeach\n                <x-dropdowns.divider />\n            @endif\n            <x-dropdowns.item link=\"https://docs.kanka.io/en/latest/guides/archetypes.html\" target=\"_blank\" icon=\"link\">\n                    {{ __('entries/archetypes.helpers.how') }}\n            </x-dropdowns.item>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/index/_entity.blade.php",
    "content": "@php\n/** @var \\App\\Models\\Entity $model */\n    $stacked = !isset($flat) && !isset($isParent) ? min(2, $model->children_count) : null;\n    $dataAttributes = [];\n    if ($model->is_private) {\n        $dataAttributes[] = 'private';\n    }\n@endphp\n@if ($stacked > 0)\n    <div class=\"stack inline-grid items-center align-items-end w-[47%] xs:w-[25%] sm:w-48 \" data-stack=\"{{ $stacked }}\">\n        <div class=\"entity overflow-hidden rounded shadow-sm hover:shadow-md aspect-square w-full flex flex-col bg-box\" title=\"{{ $model->name }}\" @foreach ($dataAttributes as $att) data-{{ $att }}=\"true\" @endforeach data-entity=\"{{ $model->id }}\" data-entity-type=\"{{ $model->entityType->code }}\" @if (!empty($model->type)) data-type=\"{{ \\Illuminate\\Support\\Str::slug($model->type) }}\" @endif>\n            <a href=\"{{ route('entities.index', [$campaign, $entityType, 'parent_id' => $model->id]) }}\"  class=\"block avatar grow relative cover-background overflow-hidden text-center\" style=\"background-image: url('{{ Avatar::entity($model)->fallback()->size(192, 144)->thumbnail() }}')\">\n\n                @if ($model->is_private)\n                    <div class=\"bubble-private absolute left-1.5 top-1.5 text-base shadow-xs flex justify-center align-items-center items-center aspect-square rounded-full w-6 h-6 bg-box opacity-80 text-base-content\">\n                        <x-icon class=\"lock\" :title=\"__('crud.is_private')\" />\n                    </div>\n                @endif\n            </a>\n            <a href=\"{{ $model->url() }}\" class=\"block text-center relative truncate h-12 p-4\" data-toggle=\"tooltip-ajax\" data-id=\"{{ $model->id }}\"\n               data-url=\"{{ route('entities.tooltip', [$campaign, $model->id]) }}\">\n                {!! $model->name !!}\n            </a>\n        </div>\n        @for ($s = 0; $s < $stacked; $s++)\n            <div class=\"entity entity-stack bg-base-300 w-full overflow-hidden rounded aspect-square flex flex-col shadow-sm\" title=\"{{ __('datagrids.tooltips.nested') }}\" data-stack=\"{{ $s }}\">\n                <div class=\"block grow\"></div>\n                <div class=\"block h-12 p-4 bg-box\"></div>\n            </div>\n        @endfor\n    </div>\n@else\n    <div class=\"entity overflow-hidden rounded shadow-sm hover:shadow-md w-[47%] xs:w-[25%] sm:w-48 aspect-square flex flex-col bg-box @if (isset($isParent)) shadow-lg stacking-parent font-bold @endif\" title=\"{{ $model->name }}\" @foreach ($dataAttributes as $att) data-{{ $att }}=\"true\" @endforeach data-entity=\"{{ $model->id }}\" data-entity-type=\"{{ $model->entityType->code }}\" @if (!empty($model->type)) data-type=\"{{ \\Illuminate\\Support\\Str::slug($model->type) }}\" @endif>\n        <a href=\"{{ $model->url() }}\" class=\"block avatar grow relative cover-background\" style=\"background-image: url('{{ Avatar::entity($model)->fallback()->size(192, 144)->thumbnail() }}')\">\n            @if ($model->is_private)\n                <div class=\"bubble-private absolute left-1.5 top-1.5 shadow-xs flex justify-center align-items-center items-center aspect-square rounded-full w-6 h-6 text-base bg-box opacity-80 text-base-content\">\n                    <x-icon class=\"lock\" :title=\"__('crud.is_private')\" />\n                </div>\n            @endif\n        </a>\n        <a href=\"{{ $model->url() }}\" class=\"block truncate text-center px-2 py-4 h-12\" data-toggle=\"tooltip-ajax\" data-id=\"{{ $model->id }}\"\n        data-url=\"{{ route('entities.tooltip', [$campaign, $model->id]) }}\">\n            {!! $model->name !!}\n        </a>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/index/actions/attribute_template.blade.php",
    "content": "<a href=\"//docs.kanka.io/en/latest/entries/property-sets.html\" class=\"btn2\">\n    <x-icon class=\"fa-regular fa-book\"></x-icon>\n    <span class=\"hidden lg:inline\">\n        {{ __('general.learn-more') }}\n    </span>\n</a>\n<a href=\"{{ route('dice_rolls.results', $campaign) }}\" class=\"btn2\">\n    <x-icon class=\"fa-regular\"></x-icon>\n    <span class=\"hidden lg:inline\">\n        {{ __('dice_rolls.index.actions.results') }}\n    </span>\n</a>\n"
  },
  {
    "path": "resources/views/entities/index/actions/bookmark.blade.php",
    "content": "<div class=\"dropdown\">\n    <div role=\"button\" class=\"btn2\" data-dropdown aria-expanded=\"false\">\n        <x-icon class=\"fa-regular fa-cog\" />\n        <span class=\"hidden lg:inline\">\n            {{ __('Configure') }}\n        </span>\n    </div>\n    <div class=\"dropdown-menu hidden\" role=\"menu\">\n        <div class=\"overflow-y-auto max-h-80\">\n            <x-dropdowns.item\n                icon=\"fa-regular fa-shuffle\"\n                :link=\"route('bookmarks.reorder', [$campaign])\">\n                {{ __('bookmarks.reorder.title') }}\n            </x-dropdowns.item>\n            <x-dropdowns.item\n                icon=\"fa-regular fa-bars-staggered\"\n                :link=\"route('campaign-sidebar', [$campaign])\">\n                {{ __('bookmarks.actions.customise') }}\n            </x-dropdowns.item>\n            <x-dropdowns.divider></x-dropdowns.divider>\n            <x-dropdowns.item\n                icon=\"fa-regular fa-book\"\n                link=\"https://docs.kanka.io/en/latest/advanced/bookmarks.html\">\n                {{ __('general.learn-more') }}\n            </x-dropdowns.item>\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/entities/index/actions/connection.blade.php",
    "content": "<a\n    href=\"{{ route('connections.web', $campaign) }}\"\n    class=\"btn2 btn-sm\">\n    <x-icon class=\"fa-regular fa-circle-nodes\" />\n    {{ __('connections/web.actions.view') }}\n</a>\n\n"
  },
  {
    "path": "resources/views/entities/index/actions/conversation.blade.php",
    "content": "<a href=\"//docs.kanka.io/en/latest/entries/conversations.html\" class=\"btn2\">\n    <x-icon class=\"fa-regular fa-book\"></x-icon>\n    <span class=\"hidden lg:inline\">\n        {{ __('general.learn-more') }}\n    </span>\n</a>\n"
  },
  {
    "path": "resources/views/entities/index/actions/dice_roll.blade.php",
    "content": "\n<a href=\"//docs.kanka.io/en/latest/entries/dice-rolls.html\" class=\"btn2\">\n    <x-icon class=\"fa-regular fa-book\"></x-icon>\n    <span class=\"hidden lg:inline\">\n        {{ __('general.learn-more') }}\n    </span>\n</a>\n\n<a href=\"{{ route('dice_rolls.results', $campaign) }}\" class=\"btn2\">\n    <x-icon class=\"fa-regular fa-list\"></x-icon>\n    <span class=\"hidden lg:inline\">\n        {{ __('dice_rolls.index.actions.results') }}\n    </span>\n</a>\n"
  },
  {
    "path": "resources/views/entities/index/actions/parent.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $parent */?>\n@if ($parent->parent)\n    <a href=\"{{ route($route . '.index', [$campaign, 'parent_id' => $parent->parent->id]) }}\" class=\"btn2\">\n<x-icon class=\"fa-regular fa-arrow-left\"></x-icon>\n        <span class=\"hidden lg:inline\">\n            {!! $parent->parent->name !!}\n        </span>\n    </a>\n@else\n\n    <a href=\"{{ route($route . '.index', [$campaign]) }}\" class=\"btn2\">\n        <x-icon class=\"fa-regular fa-arrow-left\"></x-icon>\n        <span class=\"hidden lg:inline\">\n            {{ __('crud.actions.back') }}\n        </span>\n    </a>\n@endif\n\n"
  },
  {
    "path": "resources/views/entities/index/explore.blade.php",
    "content": "<div class=\"flex gap-1 items-start\" id=\"entities-explorer\">\n    <entities-explorer\n        mode=\"{{ $mode }}\"\n        api=\"{{ route('entities.index-api', $apiParams) }}\"\n        module=\"{{ $title }}\"\n        csrf=\"{{ csrf_token() }}\"\n    ></entities-explorer>\n</div>\n\n@section('scripts')\n    @parent\n    @vite(['resources/js/entities/explore.js'])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/index/filters.blade.php",
    "content": "@php\n    /**\n     * @var \\App\\Models\\Campaign $campaign\n     * @var \\App\\Models\\EntityType $entityType\n     * @var \\App\\Services\\FilterService $filterService\n     */\n    use Illuminate\\Support\\Arr;\n@endphp\n<x-form :action=\"['entities.index', $campaign, $entityType]\" method=\"GET\" id=\"crud-filters-form\" class=\"block\">\n    <x-dialog.header>\n        {{ __('crud.filters.title') }}\n    </x-dialog.header>\n    <x-dialog.article>\n        @if (auth()->guest())\n            <x-helper>\n                <p>{{ __('filters.helpers.guest') }}</p>\n            </x-helper>\n        @else\n            <x-grid class=\"max-w-3xl\">\n\n                <div class=\"field flex flex-col gap-1 field-name\">\n                    <label>{!! __('crud.fields.name') !!}</label>\n                    <input type=\"text\" class=\"w-full entity-list-filter\" name=\"name\" value=\"{{ $filterService->single('name') }}\" data-1p-ignore=\"true\" />\n                </div>\n                <div class=\"field flex flex-col gap-1 field-locations\">\n                    <label>{!! __('crud.fields.type') !!}</label>\n                    @include('cruds.datagrids.filters._type', ['field' => 'type'])\n                </div>\n                <div class=\"field flex flex-col gap-1 field-type\">\n                    <label>{{ \\App\\Facades\\Module::singular(config('entities.ids.location'), __('entities.location')) }}</label>\n                    @include('cruds.datagrids.filters._array', ['field' => ['id' => uniqid('locations_'), 'field' => 'locations', 'data' => []], 'value' => $filterService->filterValue('locations')])\n                </div>\n\n                <div class=\"field flex flex-col gap-1 field-is_private\">\n                    <label>{!! __('crud.fields.is_private') !!}</label>\n                    @include('cruds.datagrids.filters._choice', ['field' => 'is_private'])\n                </div>\n                <div class=\"field flex flex-col gap-1 field-has_image\">\n                    <label>{!! __('crud.fields.has_image') !!}</label>\n                    @include('cruds.datagrids.filters._choice', ['field' => 'has_image'])\n                </div>\n                <div class=\"field flex flex-col gap-1 field-has_entity_files\">\n                    <label>{!! __('crud.fields.has_entity_files') !!}</label>\n                    @include('cruds.datagrids.filters._choice', ['field' => 'has_entity_files'])\n                </div>\n                <div class=\"field flex flex-col gap-1 field-has_entry\">\n                    <label>{!! __('crud.fields.has_entry') !!}</label>\n                    @include('cruds.datagrids.filters._choice', ['field' => 'has_entry'])\n                </div>\n                <div class=\"field flex flex-col gap-1 field-has_posts\">\n                    <label>{!! __('crud.fields.has_posts') !!}</label>\n                    @include('cruds.datagrids.filters._choice', ['field' => 'has_posts'])\n                </div>\n                <div class=\"field flex flex-col gap-1 field-template\">\n                    <label>{!! __('crud.fields.template') !!}</label>\n                    @include('cruds.datagrids.filters._choice', ['field' => 'template'])\n                </div>\n                <div class=\"field flex flex-col gap-1 field-archived\">\n                    <label>{!! __('crud.fields.archived') !!}</label>\n                    @include('cruds.datagrids.filters._archived', ['field' => 'archived'])\n                </div>\n                <div class=\"field flex flex-col gap-1 field-tags\">\n                    <label>{!! __('entities.tags') !!}</label>\n                    @include('cruds.datagrids.filters._tag', ['value' => $filterService->filterValue('tags'), 'field' => ['field' => 'tags']])\n                </div>\n            </x-grid>\n            @include('cruds.datagrids.filters._attributes')\n        @endif\n        <br class=\"clear-both\" />\n    </x-dialog.article>\n    @if (auth()->check())\n        <footer class=\"flex flex-wrap gap-3 justify-between items-start p-3\">\n            <menu class=\"flex flex-wrap gap-3 ps-0\">\n            <span role=\"button\" class=\"flex-none btn2 btn-sm flex gap-2 items-center {{ $filterService->activeFiltersCount() === 0 ? 'btn-disabled' : null }} \"\n                  @if ($filterService->activeFiltersCount() > 0) data-clipboard=\"{{ $filterService->clipboardFilters() }}\" data-toast=\"{{ __('filters.alerts.copy') }}\" onclick=\"return false\"  @endif data-toggle=\"tooltip\" data-title=\"{{ __('crud.filters.copy_helper') }}\">\n                <x-icon class=\"fa-regular fa-clipboard\" />\n                <span class=\"max-sm:hidden\">{{ __('crud.filters.copy_to_clipboard') }}</span>\n                <span class=\"visible md:hidden\">{{ __('crud.filters.mobile.copy') }}</span>\n            </span>\n\n                @if ($filterService->activeFiltersCount() > 0)\n                    <a href=\"{{ route('entities.index', [$campaign, $entityType, 'reset-filter' => 'true']) }}\" class=\"btn2 btn-sm btn-error btn-outline\">\n                        <x-icon class=\"fa-regular fa-eraser\" />\n                        {{ __('crud.filters.mobile.clear') }}\n                    </a>\n                @endif\n\n                <a class=\"btn2 btn-sm btn-link\" href=\"//docs.kanka.io/en/latest/advanced/filters.html\" target=\"_blank\" title=\"{{ __('helpers.filters.title') }}\">\n                    {{ __('helpers.filters.title') }}\n                </a>\n            </menu>\n            <menu class=\"flex flex-wrap gap-3 ps-0\">\n                <button type=\"submit\" class=\"btn2 btn-primary btn-sm\">\n                    <x-icon class=\"fa-regular fa-filter\" />\n                    {{ __('crud.filter') }}\n                </button>\n            </menu>\n        </footer>\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/entities/index/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $title,\n    'skipTitle' => true,\n    'seoTitle' => $title . ' - ' . $campaign->name,\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'bodyClass' => 'kanka-' . $entityType->code,\n])\n\n@section('content')\n    @include('partials.errors')\n\n    @include('ads.top')\n\n    @include('entities.index.explore')\n@endsection\n\n@section('modals')\n    @parent\n    @includeWhen(auth()->check(), 'cruds.datagrids.bulks.modals')\n    <x-dialog id=\"datagrid-filters\" :loading=\"true\" full=\"true\" />\n@endsection\n\n\n@section('og')\n    <meta property=\"og:description\" content=\"{{ __('seo.entity-list', ['module' => $entityType->plural(), 'campaign' => $campaign->name]) }}\" />\n@endsection\n\n\n"
  },
  {
    "path": "resources/views/entities/markdown/_locations.blade.php",
    "content": "@if ($campaign->enabled('locations') && $entity->locations->isNotEmpty())\n## {!! __('crud.tabs.profile') !!}\n\n- **{!! \\App\\Facades\\Module::plural(config('entities.ids.location'), __('entities.locations')) !!}:** {!! $entity->locations->pluck('name')->map(fn($name) => html_entity_decode($name, ENT_QUOTES, 'UTF-8'))->implode(', ') !!}\n@endif\n"
  },
  {
    "path": "resources/views/entities/markdown/aliases.blade.php",
    "content": "## {{ __('entries/tabs.aliases') }}\n\n@foreach ($entity->aliases as $alias)\n- {!! $alias->name !!}\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/markdown/base.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Entity $entity\n */?>\n\n@if ($entity->image)\n![avatar]({!! $entity->image->url() !!})\n@endif\n@if ($entity->header)\n![header]({!! $entity->header->getUrl(480, 270) !!})\n@endif\n\n# {!! html_entity_decode($entity->name, ENT_QUOTES, 'UTF-8') !!}\n\n@if ($entity->type)\n- **{!! __('crud.fields.type') !!}:** {!! html_entity_decode($entity->type, ENT_QUOTES, 'UTF-8') !!}\n@endif\n@if ($entity->tags->count() > 0)\n- **{!! __('entities.tags') !!}:** {!! implode(', ', $entityData['tags']) !!}\n@endif\n- **{!! __('crud.fields.visibility') !!}:** {!! $entity->is_private ? __('campaigns/visibilities.titles.private') : __('campaigns/visibilities.titles.public') !!}\n\n@if($entity->hasEntry())\n---\n## {!! __('fields.description.label') !!}\n{!! $converter->convert((string) $entityData['entry']) !!}\n\n---\n\n@endif\n@if ($entity->is_template || $entity->archived_at)\n### {!! __('entities.notes') !!}\n@endif\n@if ($entity->is_template)\n- {!! __('crud.fields.template') !!}: Yes\n@endif\n@if ($entity->archived_at)\n- {!! __('crud.fields.archived') !!}: Yes\n@endif\n\n@if (!empty($entityData['attributes']))\n## {!! __('entries/tabs.properties') !!}\n\n{!! $entityData['attributes'] !!}\n\n@endif\n@if (!empty($entityData['relations']))\n## {!! __('entries/tabs.relations') !!}\n\n{!! $entityData['relations'] !!}\n\n@endif\n@includeWhen($entity->isCharacter(), 'entities.markdown.characters')\n@includeWhen($entity->isQuest(), 'entities.markdown.quests')\n@includeWhen($entity->isOrganisation(), 'entities.markdown.organisations')\n@includeWhen($entity->isLocation(), 'entities.markdown.locations')\n@includeWhen($entity->isCreature(), 'entities.markdown.creatures')\n@includeWhen($entity->isRace(), 'entities.markdown.races')\n@includeWhen($entity->isEvent(), 'entities.markdown.events')\n@includeWhen($entity->isFamily(), 'entities.markdown.families')\n@includeWhen($entity->isItem(), 'entities.markdown.items')\n@includeWhen($entity->aliases->isNotEmpty(), 'entities.markdown.aliases')\n\n@if ($entity->hasPins())\n## {!! __('entities/pins.title') !!}\n\n| {!! __('crud.fields.name') !!} | {!! __('export.content') !!} |\n|:-|:-|\n@if(!$entity->pinnedFiles->isEmpty())\n@foreach ($entity->pinnedFiles as $asset)\n| {!! $asset->name !!} | {!! $asset->url() !!} |\n@endforeach\n@endif\n@if($entity->hasChild() && method_exists($entity->child, 'pinnedMembers') && !$entity->child->pinnedMembers->isEmpty())\n@foreach ($entity->child->pinnedMembers as $member)\n@if ($member instanceof \\App\\Models\\Character)\n| {!! $member->organisation->name !!} | {!! $member->role !!} |\n@else\n| {!! $member->character->name !!} | {!! $member->role !!} |\n@endif\n@endforeach\n@endif\n@endif\n\n@foreach ($entity->posts as $post)\n@if(isset($entityData['posts'][$post->id]))\n## {!! $post->name !!}\n{!! $converter->convert($entityData['posts'][$post->id]) !!}\n@endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/markdown/characters.blade.php",
    "content": "@if ($entity->status || !empty($entity->child->title) || !empty($entity->child->age) || !empty($entity->child->sex) || !empty($entity->child->pronouns))\n## {!! __('crud.tabs.profile') !!}\n@endif\n\n@if (!empty($entity->child->title))\n- **{!! __('characters.fields.title') !!}** {!! $entity->child->title !!}\n@endif\n@if (!empty($entity->child->age))\n- **{!! __('characters.fields.age') !!}** {!! $entity->child->age !!}\n@endif\n@if (!empty($entity->child->sex))\n- **{!! __('characters.fields.sex') !!}** {!! $entity->child->sex !!}\n@endif\n@if (!empty($entity->child->pronouns))\n- **{!! __('characters.fields.pronouns') !!}** {!! $entity->child->pronouns !!}\n@endif\n@if ($entity->status)\n- {!! $entity->status->setRelation('entityType', $entity->entityType)->name() !!}\n@endif\n@if ($entity->child->characterTraits->count() > 0)\n\n@foreach ($entity->child->characterTraits->groupBy('section_id') as $sectionId => $traits)\n### {!! $sectionId == App\\Models\\CharacterTrait::SECTION_APPEARANCE ? __('characters.sections.appearance') : __('characters.sections.personality') !!}\n\n@foreach ($traits as $trait)\n- {!! $trait->name !!}@if($sectionId == App\\Models\\CharacterTrait::SECTION_APPEARANCE): {!! $trait->entry !!}@endif\n\n@endforeach\n\n@endforeach\n@endif\n"
  },
  {
    "path": "resources/views/entities/markdown/creatures.blade.php",
    "content": "@if ($entity->status)\n## {!! __('crud.tabs.profile') !!}\n@endif\n\n* {{ $entity->status->setRelation('entityType', $entity->entityType)->name() }}\n"
  },
  {
    "path": "resources/views/entities/markdown/events.blade.php",
    "content": "@include('entities.markdown._locations')\n"
  },
  {
    "path": "resources/views/entities/markdown/families.blade.php",
    "content": "@if ($entity->status)\n## {!! __('crud.tabs.profile') !!}\n\n* {{ $entity->status->setRelation('entityType', $entity->entityType)->name() }}\n@endif\n"
  },
  {
    "path": "resources/views/entities/markdown/index.blade.php",
    "content": "@php\nuse Illuminate\\Support\\Str;\n@endphp\n# {!! __('export.index') !!}\n\n@foreach ($index as $key => $subIndex)\n### {!! Str::beforeLast($key, '_') !!}\n@foreach($subIndex as $entity){!! $entity !!}@endforeach @endforeach\n"
  },
  {
    "path": "resources/views/entities/markdown/items.blade.php",
    "content": "@if (!empty($entity->child->price) || !empty($entity->child->size) || !empty($entity->child->weight) || $entity->child->itemCreators->isNotEmpty())\n## {!! __('crud.tabs.profile') !!}\n@endif\n\n@if (!empty($entity->child->price))\n- **{!! __('items.fields.price') !!}** {!! $entity->child->price !!}\n@endif\n@if (!empty($entity->child->size))\n- **{!! __('items.fields.size') !!}** {!! $entity->child->size !!}\n@endif\n@if (!empty($entity->child->weight))\n- **{!! __('items.fields.weight') !!}** {!! $entity->child->weight !!}\n@endif\n@if ($entity->child->itemCreators->isNotEmpty())\n- **{!! __('items.fields.creators') !!}** @foreach ($entity->child->itemCreators as $itemCreator){!! $itemCreator->creator->name !!}@if (!$loop->last), @endif @endforeach\n\n@endif\n"
  },
  {
    "path": "resources/views/entities/markdown/locations.blade.php",
    "content": "@if (!empty($entity->child->title) || $entity->status)\n## {!! __('crud.tabs.profile') !!}\n@endif\n\n@if (!empty($entity->child->title))\n- **{!! __('locations.fields.title') !!}** {!! $entity->child->title !!}\n@endif\n@if ($entity->status)\n* {{ $entity->status->setRelation('entityType', $entity->entityType)->name() }}\n@endif"
  },
  {
    "path": "resources/views/entities/markdown/organisations.blade.php",
    "content": "@if ($entity->status)\n## {!! __('crud.tabs.profile') !!}\n\n* {{ __('organisations.hints.is_defunct') }}\n@endif"
  },
  {
    "path": "resources/views/entities/markdown/quests.blade.php",
    "content": "@if ($entity->child->status_id !== \\App\\Enums\\QuestStatus::notStarted)\n## {!! __('crud.tabs.profile') !!}\n\n* {{ __('quests.fields.status') }}: {{ __('quests.status.' . ['not_started', 'ongoing', 'completed', 'abandoned'][$entity->child->status_id->value]) }}\n@endif"
  },
  {
    "path": "resources/views/entities/markdown/races.blade.php",
    "content": "@if ($entity->status)\n## {!! __('crud.tabs.profile') !!}\n\n* {{ $entity->status->setRelation('entityType', $entity->entityType)->name() }}\n@endif"
  },
  {
    "path": "resources/views/entities/pages/abilities/_abilities.blade.php",
    "content": "<div id=\"abilities\">\n    <abilities\n            id=\"{{ $entity->id }}\"\n            api=\"{{ route('entities.entity_abilities.api', [$campaign, $entity]) }}\"\n            permission=\"{{ auth()->check() && auth()->user()->can('update', $entity) }}\"\n    ></abilities>\n</div>\n\n@section('scripts')\n    @parent\n    @vite('resources/js/abilities.js')\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/_buttons.blade.php",
    "content": "<div class=\"join flex items-center\">\n    <a href=\"{{ route('entities.entity_abilities.create', [$campaign, $entity]) }}\" class=\"btn2 btn-sm join-item\"\n        data-toggle=\"dialog\" data-target=\"abilities-dialog\" data-url=\"{{ route('entities.entity_abilities.create', [$campaign, $entity]) }}\">\n        <x-icon class=\"plus\" />\n        <span class=\"hidden md:inline\">{{ __('entities/abilities.actions.add') }}</span>\n        <span class=\"md:hidden\">{{ __('crud.add') }}</span>\n    </a>\n\n    <div class=\"dropdown entity-actions-dropdown flex items-center join-item\">\n\n        <div data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"abilities-submenu\" class=\"btn2 btn-sm join-item entity-actions-button\">\n            <x-icon class=\"fa-regular fa-caret-down\" />\n        </div>\n\n        <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"abilities-submenu\">\n            @if ($entity->isCharacter())\n                @php $raceModule = \\App\\Models\\EntityType::default()->where('code', 'race')->first(); @endphp\n                <x-dropdowns.item\n                    link=\"#\"\n                    :dialog=\" route('entities.entity_abilities.import.confirm', [$campaign, $entity]) \"\n                    icon=\"{{ $raceModule->icon() }}\"\n                    data-toggle=\"dialog\" data-target=\"abilities-dialog\" data-url=\"{{ route('entities.entity_abilities.import.confirm', [$campaign, $entity]) }}\" data-title=\"{{ __('entities/abilities.helpers.sync') }}\" data-toggle=\"tooltip\"\n                >\n                    <span class=\"grow\">{{ __('entities/abilities.actions.sync') }}</span>\n                </x-dropdowns.item>\n            @endif\n\n            <x-dropdowns.item :link=\"route('entities.entity_abilities.reset', [$campaign, $entity])\" icon=\"fa-regular fa-redo\">\n                <span class=\"grow\">{{ __('entities/abilities.actions.reset') }}</span>\n            </x-dropdowns.item>\n\n            <x-dropdowns.item :link=\"route('entities.entity_abilities.reorder', [$campaign, $entity])\"\n                              icon=\"fa-regular fa-arrow-up-arrow-down\">\n                <span class=\"grow\">{{ __('entities/abilities.show.reorder') }}</span>\n            </x-dropdowns.item>\n\n            <x-dropdowns.divider />\n\n            <x-dropdowns.item :link=\"'https://docs.kanka.io/en/latest/entries/abilities.html#entity-abilities'\" icon=\"fa-regular fa-book\">\n                <span class=\"grow\">{{ __('general.learn-more') }}</span>\n            </x-dropdowns.item>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/_edit_form.blade.php",
    "content": "\n<x-grid type=\"1/1\">\n    <x-forms.field\n        field=\"ability\"\n        :label=\"__('entities.ability')\">\n        <x-entity-link\n            :entity=\"$ability->ability->entity\"\n            :campaign=\"$campaign\" />\n        <input type=\"hidden\" name=\"ability_id\" value=\"{{ $ability->ability_id }}\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"note\"\n        :label=\"__('entities/abilities.fields.note')\">\n        <textarea name=\"note\" class=\"w-full\" rows=\"4\">{!! $ability->note ?? null !!}</textarea>\n        <x-slot name=\"helper\">\n            {!! __('entities/abilities.helpers.note', [\n                'code' => '<code>[character:4092]</code>',\n                'attr' => '<code>{Strength}</code>'\n            ]) !!}\n        </x-slot>\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id', ['model' => $ability])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('entities/abilities.create.helper', ['name' => $entity->name]) }}</p>\n    </x-helper>\n    <x-forms.field field=\"abilities\" required >\n        @include('components.form.abilities', ['options' => ['exclude-entity' => $entity->id]])\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id')\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/_import.blade.php",
    "content": "<x-grid type=\"1/1\">\n    @if (!empty($races))\n        <x-helper>\n            <p>{!! __('entities/abilities.import.helper', ['name' => $entity->name]) !!}</p>\n        </x-helper>\n        <ul>\n            @foreach ($races as $name => $count)\n                <li> \n                    <span>{!! trans_choice('entities/abilities.import.race_abilities', $count, ['name' => $name, 'count' => $count]) !!}</span>\n                </li>\n            @endforeach\n        </ul>\n    @else \n        <x-helper>\n            <p>{!! __('entities/abilities.import.no_abilities', ['name' => $entity->name]) !!}</p>\n        </x-helper>\n    @endif\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/abilities.create.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_abilities.index', [$campaign, $entity]), 'label' => __('entities.ability')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.entity_abilities.store', $campaign, $entity]\">\n\n    @include('partials.forms.form', [\n        'title' => __('entities/abilities.create.title', ['name' => $entity->name]),\n        'content' => 'entities.pages.abilities._form',\n    ])\n\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/import.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/abilities.actions.sync'),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_abilities.index', [$campaign, $entity]), 'label' => __('entities.ability')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form method=\"GET\" :action=\"['entities.entity_abilities.import', $campaign, $entity]\">\n        @include('partials.forms.form', [\n            'title' => __('entities/abilities.actions.sync'),\n            'content' => 'entities.pages.abilities._import',\n            'submit' => __('entities/abilities.actions.add'),\n            'disableSubmit' => empty($races),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Ability $ability */?>\n@extends('layouts.app', [\n    'title' =>  __('crud.tabs.abilities') . \" - {$entity->name} - {$campaign->name}\",\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-abilities'\n])\n\n@include('entities.components.og')\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        @can('update', $entity)\n            @include('entities.pages.abilities._buttons')\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'abilities',\n        'view' => 'entities.pages.abilities.render',\n        'entity' => $entity,\n    ])\n@endsection\n\n@section('modals')\n    @parent\n    <x-dialog id=\"abilities-dialog\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/render.blade.php",
    "content": "<x-tutorial code=\"abilities\" doc=\"https://docs.kanka.io/en/latest/entries/abilities.html\">\n    <p>{!! __('entities/abilities.show.helper', ['name' => $entity->name]) !!}</p>\n</x-tutorial>\n@include('entities.pages.abilities._abilities')\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/reorder/_reorder.blade.php",
    "content": "<?php /** @var \\App\\Models\\TimelineEra[] $abilities */?>\n<x-form :action=\"['entities.entity_abilities.reorder-save', $campaign, $entity]\">\n<div class=\"box-abilities-reorder w-max-4xl flex flex-col gap-5\">\n    @foreach($parents as $key => $parent)\n        <div class=\"element-live-reorder flex flex-col gap-1\">\n            <div class=\"element bg-base-200 rounded flex flex-col gap-2 p-2\">\n                <div class=\"name overflow-hidden grow\">\n                    @if ($key === \"\")\n                        {{ __('entities/abilities.reorder.parentless') }}\n                    @else\n                        {!! $parent[0]->ability->entity->parent?->name !!}\n                    @endif\n                </div>\n                <div class=\"children sortable-elements flex flex-col gap-1\">\n                    @foreach($parent as $ability)\n                        <x-reorder.child id=\"$ability->id\">\n                            <input type=\"hidden\" name=\"ability[]\" value=\"{{ $ability->id }}\" />\n                            <div class=\"dragger relative\">\n                                <x-icon class=\"fa-regular fa-sort\" />\n                            </div>\n                            <div class=\"overflow-hidden grow flex flex-no-wrap items-center gap-2\">\n                                <span class=\"truncate\">{!! $ability->ability->name !!}</span>\n                                @if ($ability->ability->type)\n                                <span class=\"text-xs text-neutral-content\">\n                                    ({!! $ability->ability->type!!})\n                                </span>\n                                @endif\n                            </div>\n                        </x-reorder.child>\n                    @endforeach\n                </div>\n            </div>\n        </div>\n    @endforeach\n\n    <button class=\"btn2 btn-primary btn-block\">\n        {{ __('crud.save') }}\n    </button>\n</div>\n</x-form>\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/reorder/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Ability $ability */?>\n@extends('layouts.app', [\n    'title' => __('entities/abilities.show.title', ['name' => $entity->name]),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-abilities'\n])\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'abilities',\n        'view' => 'entities.pages.abilities.reorder._reorder',\n        'entity' => $entity,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/abilities/update.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => trans('entities/abilities.update.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_abilities.index', [$campaign, $entity]), 'label' => __('entities.ability')],\n    ],\n    'centered' => true,\n])\n\n\n@section('content')\n    <x-form :action=\"['entities.entity_abilities.update', $campaign, $entity->id, $ability]\" method=\"PATCH\">\n        @include('partials.forms.form', [\n            'title' => __('entities/abilities.update.title', ['name' => $entity->name]),\n            'content' => 'entities.pages.abilities._edit_form',\n            'deleteID' => '#delete-ability-' . $ability->id,\n        ])\n    </x-form>\n\n    <x-form method=\"DELETE\" :action=\"['entities.entity_abilities.destroy', $campaign, 'entity' => $entity, 'entity_ability' => $ability]\" id=\"delete-ability-{{ $ability->id }}\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/aliases/_form.blade.php",
    "content": "@if (!isset($entityAsset))\n    <x-helper>\n        <p>{!! __('entities/aliases.create.helper', ['name' => $entity->name, 'code' => '<code>@</code>']) !!}</p>\n    </x-helper>\n@endif\n\n<x-grid>\n    <x-forms.field field=\"name\" required css=\"col-span-2\" :label=\"__('entities/links.fields.name')\">\n        <input type=\"text\" name=\"name\" value=\"{!! htmlspecialchars(old('name', $entityAsset->name ?? null)) !!}\" maxlength=\"45\" class=\"w-full\" placeholder=\"{{ __('entities/aliases.placeholders.name') }}\" data-1p-ignore=\"true\" />\n    </x-forms.field>\n\n    @include('cruds.fields.is_pinned', ['model' => $entityAsset ?? null, 'fieldName' => 'is_pinned'])\n    @include('cruds.fields.visibility_id', ['model' => $entityAsset ?? null])\n</x-grid>\n<input type=\"hidden\" name=\"type_id\" value=\"{{ \\App\\Enums\\EntityAssetType::alias }}\" />\n"
  },
  {
    "path": "resources/views/entities/pages/aliases/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/aliases.create.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_assets.index', [$campaign, $entity->id]), 'label' => __('entries/tabs.media')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.entity_assets.store', $campaign, $entity]\">\n\n    @include('partials.forms.form', [\n            'title' => __('entities/aliases.create.title', ['name' => $entity->name]),\n            'content' => 'entities.pages.aliases._form',\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/aliases/not-premium.blade.php",
    "content": "<x-premium-dialog :campaign=\"$campaign\" pitch=\"entities/aliases.limit\" />\n"
  },
  {
    "path": "resources/views/entities/pages/aliases/update.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityAsset $entityAsset */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/aliases.update.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_assets.index', [$campaign, $entity->id]), 'label' => __('entries/tabs.media')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.entity_assets.update', $campaign, $entity->id, $entityAsset]\" method=\"PATCH\">\n        @include('partials.forms.form', [\n            'title' => __('entities/aliases.update.title', ['name' => $entity->name]),\n            'content' => 'entities.pages.aliases._form',\n            'deleteID' => '#delete-alias-' . $entityAsset->id,\n        ])\n    </x-form>\n\n    <x-form method=\"DELETE\" :action=\"['entities.entity_assets.destroy', $campaign, 'entity' => $entity, 'entity_asset' => $entityAsset]\" id=\"delete-alias-{{ $entityAsset->id }}\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/assets/_assets.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityAsset $asset */?>\n<div class=\"entity-assets\">\n    <div class=\"flex flex-col lg:flex-row flex-wrap gap-4 max-w-7xl entity-assets-row\">\n        @forelse ($assets as $asset)\n            @if ($asset->hiddenImage()) @continue @endif\n            @includeWhen($asset->isFile(), 'entities.pages.assets._file')\n            @includeWhen($asset->isLink(), 'entities.pages.assets._link')\n        @empty\n        @endforelse\n    </div>\n</div>\n\n\n@section('modals')\n    @parent\n    <x-dialog id=\"asset-update-dialog\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/assets/_buttons.blade.php",
    "content": "<div class=\"dropdown entity-actions-dropdown\">\n    <div data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"assets-submenu\" class=\"btn2 btn-sm join-item entity-actions-button\">\n        {{ __('crud.add') }}\n        <x-icon class=\"fa-regular fa-caret-down\" />\n    </div>\n    <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"assets-submenu\">\n        <x-dropdowns.item link=\"#\" icon=\"fa-regular fa-upload\" :dialog=\"route('entities.entity_assets.create', [$campaign, $entity, 'type' => \\App\\Enums\\EntityAssetType::file])\">\n            {{ __('entities/assets.actions.file') }}\n        </x-dropdowns.item>\n\n        <x-dropdowns.item link=\"#\" icon=\"fa-regular fa-link\" :dialog=\"route('entities.entity_assets.create', [$campaign, $entity, 'type' => \\App\\Enums\\EntityAssetType::link])\">\n            {{ __('entities/assets.actions.link') }}\n        </x-dropdowns.item>\n        <x-dropdowns.divider />\n\n        <x-dropdowns.item :link=\"'https://docs.kanka.io/en/latest/features/assets.html'\" icon=\"fa-regular fa-book\">\n            <span class=\"grow\">{{ __('general.learn-more') }}</span>\n        </x-dropdowns.item>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/assets/_file.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityAsset $asset */?>\n<div class=\"entity-asset asset-file flex gap-2 items-center lg:w-80\">\n    <a href=\"{{ $asset->url() }}\" target=\"_blank\"\n       class=\"flex-none w-32 h-20 cover-background  icon rounded flex items-center align-center justify-center bg-black/10 text-3xl \" @if($asset->isImage()) style=\"background-image: url({{ $asset->imageUrl() }})\"@endif>\n        @if (!$asset->isImage())\n            <x-icon :class=\"$asset->previewIcon()\" />\n        @endif\n    </a>\n    <div class=\"grow text flex flex-col gap-1 overflow-hidden\">\n        <div class=\"asset-name truncate\" data-toggle=\"tooltip\" data-title=\"{{ $asset->name }}\">\n            {!! $asset->name !!}\n        </div>\n\n        <div class=\"text-lg\">\n        @can('update', $entity)\n            <a href=\"#\" data-toggle=\"dialog\" data-target=\"asset-update-dialog\" data-url=\"{{ route('entities.entity_assets.edit', [$campaign, $entity, $asset]) }}\">\n                <x-icon class=\"pencil\" title=\"{{ __('crud.edit') }}\" tooltip />\n            </a>\n        @endif\n        @include('icons.visibility', ['icon' => $asset->visibilityIcon()])\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/assets/_link.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityAsset $asset */?>\n<div class=\"entity-asset asset-link flex gap-2 items-center lg:w-80 \">\n    <a href=\"{{ route('entities.entity_assets.go', [$campaign, $entity, $asset]) }}\" target=\"_blank\"\n       class=\"flex-none w-32 h-20 text-center icon rounded flex items-center align-center justify-center bg-black/10 \">\n        <x-icon class=\"text-3xl {{ $asset->icon() }}\" />\n    </a>\n    <div class=\"grow text flex flex-col gap-1 overflow-hidden\">\n        <div class=\"asset-name truncate\" data-toggle=\"tooltip\" data-title=\"{{ $asset->name }}\">\n            {!! $asset->name !!}\n        </div>\n        <div class=\"asset-url truncate\" data-toggle=\"tooltip\" data-title=\"{{ $asset->metadata['url'] }}\">\n            {{ \\Illuminate\\Support\\Str::after($asset->metadata['url'], '//') }}\n        </div>\n\n        <div class=\"text-lg\">\n        @can('update', $entity)\n            <a href=\"#\" data-toggle=\"dialog\" data-target=\"asset-update-dialog\" data-url=\"{{ route('entities.entity_assets.edit', [$campaign, $entity, $asset]) }}\">\n                <i class=\"fa-regular fa-pencil\" aria-hidden=\"true\" aria-label=\"{{ __('crud.edit') }}\"></i>\n            </a>\n        @endif\n        @include('icons.visibility', ['icon' => $asset->visibilityIcon()])\n        </div>\n\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/assets/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\EntityAsset $asset */\n?>\n@extends('layouts.app', [\n    'title' =>  __('entries/tabs.media') . \" - {$entity->name} - {$campaign->name}\",\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-assets'\n])\n@include('entities.components.og')\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        @can('update', $entity)\n            @include('entities.pages.assets._buttons')\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'assets',\n        'view' => 'entities.pages.assets._assets',\n        'entity' => $entity,\n    ])\n@endsection\n\n@section('modals')\n    @parent\n    <x-dialog id=\"asset-dialog\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/attribute-templates/_actions.blade.php",
    "content": "<div class=\"submit-group\">\n    <input id=\"submit-mode\" type=\"hidden\" value=\"true\"/>\n    <div class=\"join\">\n        <button class=\"btn2 join-item btn-primary\" id=\"form-submit-main\"\n    >{{ __('crud.actions.apply') }}</button>\n\n        <div class=\"dropdown\">\n            <button type=\"button\" class=\"btn2 join-item btn-primary\" data-dropdown aria-expanded=\"false\">\n                <x-icon class=\"fa-regular fa-caret-down\" />\n                <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n            </button>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\">\n                    {{ __('crud.actions.apply') }}\n                </x-dropdowns.item>\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'update']\">\n                    {{ __('entities/attributes.actions.save_and_edit') }}\n                </x-dropdowns.item>\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'story']\">\n                    {{ __('entities/attributes.actions.save_and_story') }}\n                </x-dropdowns.item>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/attribute-templates/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-forms.field\n        field=\"template\"\n        :label=\"__('entities/attributes.fields.kit')\"\n        required>\n        <x-forms.select name=\"template_id\" :options=\"$templates\" :placeholder=\"__('entities/attributes.placeholders.template')\" class=\"w-full\" required />\n        <x-slot name=\"helper\">\n            {!! __('attributes/templates.pitch', [\n    'boosted-campaign' => '<a href=\\'https://kanka.io/premium\\' class=\"text-link\">' . __('concept.premium-campaigns') . '</a>',\n    'marketplace' => '<a href=\\'' . config('marketplace.url') . '/character-sheets\\' class=\"text-link\">' . __('footer.plugins') . '</a>'\n    ]) !!}\n        </x-slot>\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/attribute-templates/apply.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/attributes.template.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entities.attribute_template')\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n\n    <x-form :action=\"['entities.attributes.template-process', $campaign, $entity->id]\">\n    @include('partials.forms.form', [\n            'title' => __('entities.attribute_template'),\n            'content' => 'entities.pages.attribute-templates._form',\n            'actions' => 'entities.pages.attribute-templates._actions',\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/_buttons.blade.php",
    "content": "@can('update', $entity)\n<a href=\"{{ route('entities.attributes.edit', [$campaign, 'entity' => $entity]) }}\" class=\"btn2 btn-sm\">\n    <x-icon class=\"fa-regular fa-list\" />\n    {{ __('entities/attributes.actions.manage') }}\n</a>\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/_story.blade.php",
    "content": "<div class=\"entity-attributes flex flex-col gap-2\">\n    <h3 class=\"text-xl\">\n        <x-icon class=\"fa-regular fa-th-list\" />\n        {{ __('entries/tabs.properties') }}\n    </h3>\n    <x-box>\n        @include('entities.pages.attributes.render')\n    </x-box>\n</div>\n\n<input type=\"hidden\" name=\"live-attribute-config\" data-live=\"{{ route('entities.attributes.live.edit', [$campaign, $entity]) }}\" />\n\n@section('scripts')\n    @parent\n    @vite('resources/js/attributes.js')\n@endsection\n\n@section('modals')\n    @parent\n    <x-dialog id=\"live-attribute-dialog\" :loading=\"true\"></x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/dashboard.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Inventory $item */?>\n@extends('layouts.widget', [\n    'title' => __('entities/attributes.show.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-attributes'\n])\n\n\n\n@section('content')\n    <div class=\"entity-main-block flex flex-col gap-4\">\n        @include('entities.pages.attributes.render')\n    </div>\n@endsection\n\n\n@section('scripts')\n    @parent\n    @vite('resources/js/attributes.js')\n@endsection\n\n@section('styles')\n    @parent\n    <style>\n        dl { display: flex; flex-wrap: wrap; width: 100%; gap: 0.25rem; }\n        dt { flex: 25% 0; text-align: right; font-weight: 900; overflow: hidden; margin-right: 2%;\n            text-overflow: ellipsis;\n            white-space: nowrap; }\n        dd { flex: 0 70% }\n        @media (min-width: 768px) {\n            dl { display: unset;}\n        }\n    </style>\n@endsection\n\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/edit.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Attribute $attribute\n * @var \\App\\Models\\Entity $entity\n */\n$isAdmin = auth()->user()->isAdmin();\n?>\n@extends('layouts.app', [\n    'title' => __('entities/attributes.index.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entries/tabs.properties'),\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n])\n\n@section('content')\n    <x-form\n        :action=\"['entities.attributes.save', $campaign, $entity]\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars'),]\"\n        unload\n        class=\"entity-form \"\n    >\n\n        <x-box class=\"flex flex-col gap-4\">\n            <div class=\"flex gap-2 items-center\">\n                <a href=\"{{ url()->previous() }}\" class=\"btn2 btn-outline\">\n                    {{ __('crud.cancel') }}\n                </a>\n                <div class=\"grow text-right\">\n                    <button class=\"btn2 btn-primary\">\n                        {{ __('crud.save') }}\n                    </button>\n                </div>\n            </div>\n\n            <div id=\"attributes-manager\" class=\"flex-1 min-h-0 h-full overflow-hidden\">\n                <attributes-manager api=\"{{ route('attributes.api-entity', [$campaign, $entity]) }}\" />\n            </div>\n\n            @if (auth()->user()->isAdmin() && $entity->is_attributes_private)\n                <div class=\"flex flex-col gap-2\">\n                    <hr />\n                    <x-forms.field field=\"attributes-private\"\n                                   :label=\"__('entities/attributes.fields.is_private')\">\n                        <input type=\"hidden\" name=\"is_attributes_private\" value=\"0\" />\n                        <x-checkbox :text=\"__('entities/attributes.helpers.is_private', [\n    'admin-role' => '<a href=\\'' . route('campaigns.campaign_roles.admin', $campaign) . '\\' target=\\'_blank\\'>' . $campaign->adminRoleName() . '</a>',\n    ])\">\n                            <input type=\"checkbox\" name=\"is_attributes_private\" value=\"1\" @if (old('is_attributes_private', $entity->is_attributes_private ?? false)) checked=\"checked\" @endif />\n                        </x-checkbox>\n                    </x-forms.field>\n\n                <x-alert type=\"warning\">\n                    <p>This feature is deprecated. By unchecking it, you will no longer be able to activate it. You can now toggle the private status of all attributes of the entity at once instead.</p>\n                </x-alert>\n            </div>\n            @endif\n        </x-box>\n    </x-form>\n@endsection\n@section('scripts')\n    @vite('resources/js/attributes.js')\n    @vite('resources/js/attributes-manager.js')\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Inventory $item */?>\n@extends('layouts.' . (request()->ajax() || request()->filled('dashboard') ? 'ajax' : 'app'), [\n    'title' =>  __('entries/tabs.properties') . \" - {$entity->name} - {$campaign->name}\",\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-attributes'\n])\n\n@include('entities.components.og')\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        <x-learn-more url=\"features/properties.html\" />\n        @can('attributes', [$entity])\n            @include('entities.pages.attributes._buttons')\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'attributes',\n        'view' => 'entities.pages.attributes.main',\n        'entity' => $entity,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/live/_form.blade.php",
    "content": "<?php /* @var \\App\\Models\\Attribute $attribute */?>\n<x-forms.field field=\"name\" css=\"w-full\">\n    <label for=\"name\">{!! $attribute->name() !!}</label>\n    @if ($attribute->isCheckbox())\n        <div>\n            <input type=\"hidden\" name=\"value\" value=\"\" />\n            <input type=\"checkbox\" name=\"value\" id=\"name\" @if($attribute->value) checked=\"checked\" @endif />\n        </div>\n    @elseif ($attribute->isText())\n        <textarea name=\"value\" class=\"w-full\" rows=\"4\">{!! $attribute->value !!}</textarea>\n    @elseif ($attribute->isNumber())\n        <input type=\"number\" name=\"value\" class=\"\" maxlength=\"20\" value=\"{{ $attribute->value }}\"\n               @if ($attribute->validConstraints()) max=\"{{ $attribute->numberMax() }}\" min=\"{{ $attribute->numberMin() }}\" @endif />\n    @elseif ($attribute->validConstraints())\n        <select name=\"value\" class=\"\">\n            @foreach ($attribute->listRange() as $option)\n                <option value=\"{{ $option }}\" @if ($option == $attribute->value) selected=\"selected\" @endif>{{ \\App\\Facades\\Mentions::onlyName()->mapText($option) }}</option>\n            @endforeach\n        </select>\n        <x-helper>\n            <p>{{ __('entities/attributes.ranges.text', ['options' => $attribute->listRangeText()]) }}</p>\n        </x-helper>\n    @else\n        <input type=\"text\" name=\"value\" class=\"w-full\" maxlength=\"191\" value=\"{{ $attribute->value }}\" />\n    @endif\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/live/edit.blade.php",
    "content": "<?php /** @var \\App\\Models\\Attribute $attribute */?>\n\n<x-form :action=\"['entities.attributes.live.save', $campaign, $entity, $attribute]\" class=\"live-attribute-form\" direct>\n    @include('partials.forms._dialog', [\n            'title' =>__('entities/attributes.live.title', ['attribute' => $attribute->name()]),\n            'content' => 'entities.pages.attributes.live._form',\n            'submit' => __('crud.update'),\n            'dropdownParent' => '#primary-dialog',\n        ])\n    @if (!empty($uid))<input type=\"hidden\" name=\"uid\" value=\"{{ $uid }}\" />@endif\n</x-form>\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/main.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n<x-tutorial code=\"attributes\" doc=\"https://docs.kanka.io/en/latest/features/properties.html\">\n    <x-slot name=\"title\">\n        {{ __('onboarding/attributes.title') }}\n    </x-slot>\n    <p>{!! __('onboarding/attributes.text', [\n        'name' => $entity->name,\n    ]) !!}</p>\n\n</x-tutorial>\n\n@include('entities.pages.attributes.render')\n\n<input type=\"hidden\" name=\"live-attribute-config\" data-live=\"{{ route('entities.attributes.live.edit', [$campaign, $entity]) }}\" />\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/render.blade.php",
    "content": "@inject('templateService', 'App\\Services\\Attributes\\TemplateService')\n<?php\n/**\n * @var \\App\\Services\\Attributes\\TemplateService $templateService\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n */\n/** @var ?\\App\\Models\\Attribute $layout */\n$layout = $entity->entityAttributes->where('name', '_layout')->first();\n\nif (!empty($layout)) {\n    $template = $template ?? $templateService->communityTemplate($layout->value);\n    $marketplaceTemplate = $marketplaceTemplate ?? $templateService->campaign($campaign)->marketplaceTemplate($layout->value);\n}\n?>\n\n@if (!empty($template) && $entity->hasChild())\n    <x-box class=\"box-entity-attributes\">\n        @include($template->view(), ['model' => $model ?? $entity->child])\n    </x-box>\n@elseif (!empty($marketplaceTemplate))\n    @include('entities.pages.attributes.rendering.marketplace', ['plugin' => $marketplaceTemplate])\n@else\n    @include('entities.pages.attributes.rendering.default', [\n        'attributes' => $entity->attributes()->with('entity')->ordered()->get()\n    ])\n@endif\n\n@section('scripts')\n    @parent\n    @vite('resources/js/attributes.js')\n@endsection\n\n@section('modals')\n    @parent\n    <x-dialog id=\"live-attribute-dialog\" :loading=\"true\"></x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/rendering/default.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Attribute $attribute */\n$inSection = false;\nif ($attributes->count() === 0) {\n    return;\n}\n$sections = \\App\\Facades\\Attributes::organise($attributes);\n$uid = 1;\n?>\n\n<div class=\"box-entity-attributes flex flex-col gap-5 max-w-7xl\">\n@foreach ($sections as $section)\n    <div class=\"rounded-2xl p-2 flex flex-col gap-2 bg-base-100\">\n        <div class=\"flex items-center gap-5 text-lg cursor-pointer p-2\" data-animate=\"collapse\" data-target=\"#attribute-section-body-{{ $section['id'] }}\">\n            <div class=\"section-name grow\">\n                @if (!empty($section['id']))\n                    @if (auth()->check() && auth()->user()->isAdmin() && $section['is_private'] == true)\n                        <x-icon class=\"lock\" tooltip :title=\"__('crud.is_private')\"/>\n                    @endif\n                    {!! $section['name'] !!}\n                @else\n                    {{ __('entities/attributes.sections.unorganised') }}\n                @endif\n            </div>\n            <div class=\"flex-none\">\n                <x-icon class=\"fa-regular fa-chevron-up collapsed:flip transition-all duration-150\" />\n            </div>\n        </div>\n        <div class=\"section-attributes overflow-hidden flex flex-col gap-1\" id=\"attribute-section-body-{{ $section['id'] }}\">\n            @foreach ($section['attributes'] as $attribute)\n                <div class=\"flex items-center gap-5 w-full p-1 rounded-2xl odd:bg-base-200\">\n                    <div class=\"attribute-icon w-8 p-2 text-accent\">\n                        @if ($attribute->isNumber())\n                            <x-icon class=\"fa-regular fa-hashtag\" />\n                        @elseif ($attribute->isCheckbox())\n                            <x-icon class=\"fa-regular fa-user-check\" />\n                        @else\n                            <x-icon class=\"fa-regular fa-circle-notch\" />\n                        @endif\n                    </div>\n                    <div class=\"flex flex-col gap-1 p-2 w-full\">\n                        <div class=\"attribute-name\">\n                            <div class=\"cursor-pointer inline-block\" data-title=\"{attribute:{{ $attribute->id }}}\" data-toggle=\"tooltip\"\n                            data-clipboard=\"{attribute:{{ $attribute->id }}}\"\n                            data-toast=\"{{ __('crud.alerts.copy_attribute') }}\">\n                                @if (auth()->check() && auth()->user()->isAdmin() && $attribute->is_private)\n                                    <x-icon class=\"lock\" tooltip :title=\"__('crud.is_private')\" />\n                                @endif\n                                @if ($attribute->validConstraints())\n                                    <span class=\"font-extrabold\">{!! $attribute->name() !!}</span>\n                                @else\n                                    <span class=\"font-extrabold\">{!! $attribute->name() !!}</span>\n                                @endif\n                            </div>\n                        </div>\n                        <div class=\"attribute-value grow\" data-live-id=\"{{ $attribute->id }}\">\n                            @if ($attribute->isCheckbox())\n                                @if ($attribute->value)\n                                    <x-icon class=\"fa-regular fa-check\" label=\"checked\" />\n                                @else\n                                    <x-icon class=\"fa-regular fa-xmark\" label=\"unchecked\" />\n                                @endif\n                            @elseif ($attribute->isText())\n                                {!! nl2br($attribute->mappedValue()) !!}\n                            @else\n                                {!! $attribute->mappedValue() !!}\n                            @endif\n\n                            @if(\\App\\Facades\\Attributes::isLoop($attribute->name))\n                                <x-icon class=\"fa-regular fa-warning\" title=\"{{ __('entities/attributes.errors.loop') }}\" tooltip />\n                            @endif\n                        </div>\n                    </div>\n                    @if (!isset($fromDashboard) || !$fromDashboard)\n                        @can('update', $entity)\n                            <div class=\"flex-none p-2\">\n                                <a href=\"{{ route('entities.attributes.live.edit2', [$campaign, $entity, $attribute, 'uid' => $uid++]) }}\" data-toggle=\"dialog\" data-url=\"{{ route('entities.attributes.live.edit2', [$campaign, $entity, $attribute, 'target' => '[data-live-id=' . $attribute->id . ']', 'uid' => $uid++]) }}\"  title=\"{{ __('crud.edit') }}\">\n                                    <x-icon class=\"fa-regular fa-pen-to-square\" />\n                                </a>\n                            </div>\n                            @endcan\n                    @endif\n                </div>\n            @endforeach\n        </div>\n    </div>\n@endforeach\n\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/attributes/rendering/marketplace.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Plugin $plugin\n * @var \\App\\Models\\Attribute $attribute\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\MiscModel $model\n */\nif (!isset($entity)) {\n    $entity = $model->entity;\n}\n?>\n\n@if ($plugin->version->isDraft())\n    <x-alert type=\"warning\" class=\"max-w-4xl\">\n        {{ __('This plugin is a draft, meaning only its authors can see it rendered.') }}\n    </x-alert>\n@endif\n\n<div class=\"box-entity-attributes\" data-plugin=\"{{ $plugin->id }}\" data-version=\"{{ $plugin->version->id }}\">\n    <x-character-sheet :plugin=\"$plugin\" :entity=\"$entity\" :campaign=\"$campaign\" />\n</div>\n\n@section('styles')\n    @parent\n    <style>\n        {!! $plugin->version->css !!}\n\n        /** Entity attributes **/\n        :root {\n        @foreach ($entity->allAttributes as $attribute) @if ($attribute->isText()) @continue @endif\n--attribute-{{ $attribute->exposedName() }}: {{ trim(preg_replace('/\\s+/', ' ', $attribute->value)) }};\n        @endforeach\n}\n    </style>\n@endsection\n\n@section('scripts')\n    @parent\n    <script>\n        const entityData = {\n            name: `{{ $entity->name }}`,\n            is_private: {{ $entity->is_private ? 'true' : 'false' }},\n            type: {\n                id: {{ $entity->type_id }},\n                code: \"{{ $entity->entityType->code }}\",\n                custom: `{!! \\App\\Facades\\Module::singular($entity->type_id) !!}`,\n            },\n            type_field: `{{ $entity->type }}`,\n            attributes: {\n@foreach ($entity->allAttributes as $attr)\n\"{{ $attr->exposedName() }}\": `{!! $attr->value !!}`,\n@endforeach\n            },\n@if ($entity->isCharacter() && $entity->child)\n            gender: `{{ $entity->child->sex }}`,\n            pronouns: `{{ $entity->child->pronouns }}`,\n            title: `{{ $entity->child->title }}`,\n            age: `{{ $entity->child->age }}`,\n            traits: [@foreach ($entity->child->characterTraits as $trait)\n            {\n                name: `{{ $trait->name }}`,\n                entry: `{{ $trait->entry }}`,\n                section_id: {{ $trait->section_id }},\n                section: '{{ $trait->section_id === 1 ? 'appearance' : 'personality' }}',\n            },\n            @endforeach ],\n            races: [@foreach ($entity->child->characterRaces as $race)\n            {\n                id: {{ $race->race->id }},\n                name: `{{ $race->race->name }}`,\n                url: `{{ $race->race->getLink() }}`\n            },\n            @endforeach ],\n            families: [@foreach ($entity->child->characterFamilies as $family)\n            {\n                id: {{ $family->family->id }},\n                name: `{{ $family->family->name }}`,\n                url: `{{ $family->family->getLink() }}`\n            },\n            @endforeach ],\n@endif\n@if ($entity->status)\n            status: `{{ $entity->status->key }}`,\n@endif\n@if ($entity->hasChild() && $entity->child->location)\n            location: {\n                id: {{ $entity->child->location->id }},\n                name: `{{ $entity->child->location->name }}`,\n                url: `{{ $entity->child->location->getLink() }}`\n            },\n@endif\n\n            tags: [@foreach ($entity->tags as $tag)\n            {\n                id: {{ $tag->id }},\n                name: `{{ $tag->name }}`,\n                slug: `{{ $tag->slug }}`,\n                url: `{{ $tag->getLink() }}`\n            },\n            @endforeach ],\n        }\n        const attributeApis = {\n            all: {\n                method: 'GET',\n                url: '{{ route('entities.attributes.live-api.index', [$campaign, $entity]) }}'\n            },\n            create: {\n                method: 'POST',\n                url: '{{ route('entities.attributes.live-api.create', [$campaign, $entity]) }}'\n            },\n        }\n        const abilityApis = {\n            all: {\n                method: 'GET',\n                url: '{{ route('entities.entity_abilities.api', [$campaign, $entity]) }}'\n            },\n        }\n    </script>\n    <script>\n        {!! $plugin->version->javascript !!}\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/children/children.blade.php",
    "content": "<div class=\"overflow-x-auto\" id=\"entity-children\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/children/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\EntityMention $mention */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/children.title') . ' - ' . $entity->name,\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-children'\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('entities.children', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$entity->descendants()->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('entities.children', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'children',\n        'view' => 'entities.pages.children.children',\n        'entity' => $entity,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/entry/edit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/story.update.title', ['entity' => $entity->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('fields.description.label'),\n        __('crud.edit')\n    ],\n    'mainTitle' => false,\n    'entity' => null\n])\n\n\n@section('content')\n\n    <x-form :action=\"['entities.entry.update', $campaign, $entity]\" method=\"PATCH\" class=\"entity-form entity-entry-form\" unsaved>\n        @include('partials.errors')\n        <div class=\"flex gap-2 items-center mb-4\">\n            <div class=\"grow\">\n                @include('partials.footer_cancel')\n            </div>\n            <button class=\"btn2 btn-primary\" id=\"form-submit-main\">{{ __('crud.update') }}</button>\n        </div>\n\n            <x-forms.field field=\"entry\">\n                @include('cruds.fields.entry', ['model' => $entity ?? null])\n            </x-forms.field>\n\n\n    </x-form>\n\n    {{-- For bragi --}}\n    @if ($entity->isCharacter())\n        <input type=\"hidden\" name=\"name\" value=\"{{ $entity->name }}\" />\n    @endif\n@endsection\n\n@include('editors.editor', $entity->isCharacter() ? ['name' => 'characters'] : [])\n"
  },
  {
    "path": "resources/views/entities/pages/files/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n@if(!isset($entityAsset))\n    <x-helper>\n        <p>{{ __('entities/files.create.helper', ['name' => $entity->name]) }}</p>\n    </x-helper>\n\n    <x-forms.field\n        field=\"files[]\"\n        required\n        :label=\"__('entities/files.fields.files')\">\n        <input type=\"file\" multiple accept=\"image/*, .pdf, .pdf, .xls, .xlsx, .csv, .mp3, .ogg, .json\" name=\"files[]\" class=\"image w-full\" id=\"file_{{ rand() }}\" />\n\n        <x-slot name=\"helper\">\n            {{ __('crud.files.hints.limitations', ['formats' => 'jpg, jpeg, png, gif, webp, pdf, xls(x), csv, mp3, ogg, json', 'size' => Limit::readable()->upload()]) }}\n            @include('cruds.fields.helpers.share', ['max' => 25])\n        </x-slot>\n    </x-forms.field>\n@endif\n\n    <x-forms.field\n        field=\"file\"\n        :required=\"isset($entityAsset)\"\n        :label=\"__('entities/files.fields.name')\">\n        <input type=\"text\" name=\"name\" value=\"{!! htmlspecialchars(old('name', $entityAsset->name ?? null)) !!}\" maxlength=\"45\" class=\"w-full\" placeholder=\"{{ __('entities/files.fields.name') }}\" data-1p-ignore=\"true\" />\n    </x-forms.field>\n\n    <x-grid>\n        @include('cruds.fields.is_pinned', ['model' => $entityAsset ?? null, 'fieldName' => 'is_pinned'])\n        @include('cruds.fields.visibility_id', ['model' => $entityAsset ?? null])\n    </x-grid>\n</x-grid>\n\n\n\n"
  },
  {
    "path": "resources/views/entities/pages/files/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/files.create.title', ['entity' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_assets.index', [$campaign, $entity->id]), 'label' => __('entries/tabs.media')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.entity_assets.store', $campaign, $entity]\" files>\n        @include('partials.forms.form', [\n            'title' => __('entities/files.create.title', ['entity' => $entity->name]),\n            'content' => 'entities.pages.files._form',\n        ])\n        <input type=\"hidden\" name=\"type_id\" value=\"{{ \\App\\Enums\\EntityAssetType::file }}\" />\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/files/max.blade.php",
    "content": "<x-dialog.header>\n    @if ($campaign->superboosted())\n        {{ __('entities/files.call-to-action.max.limit') }}\n    @else\n        {!! __('entities/files.call-to-action.upgrade.limit', ['limit' => config('limits.campaigns.files.standard')]) !!}\n    @endif\n</x-dialog.header>\n<x-dialog.article class=\"max-w-3xl\">\n    @if ($campaign->superboosted())\n        <x-helper>\n            <p>{{ __('entities/files.call-to-action.max.helper') }}</p>\n        </x-helper>\n    @else\n        <x-helper>\n            <p>\n                {!! __('entities/files.call-to-action.upgrade.premium') !!}\n            </p>\n        </x-helper>\n        <x-premium-cta-footer :campaign=\"$campaign\" />\n    @endif\n</x-dialog.article>\n"
  },
  {
    "path": "resources/views/entities/pages/files/update.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityAsset $entityAsset */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n        'title' => __('entities/files.update.title'),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_assets.index', [$campaign, $entity]), 'label' => __('entries/tabs.media')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.entity_assets.update', $campaign, $entity->id, $entityAsset]\" method=\"PATCH\">\n\n    @include('partials.forms.form', [\n        'title' => __('entities/files.update.title'),\n        'content' => 'entities.pages.files._form',\n        'deleteID' => '#delete-file-' . $entityAsset->id,\n    ])\n\n    </x-form>\n\n    <x-form method=\"DELETE\" :action=\"['entities.entity_assets.destroy', $campaign, 'entity' => $entity, 'entity_asset' => $entityAsset]\" id=\"delete-file-{{ $entityAsset->id }}\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/image/_form.blade.php",
    "content": "\n<x-grid type=\"1/1\">\n    @include('cruds.fields.image', ['imageRequired' => false, 'dropdownParent' => '#primary-dialog'])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/image/focus.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */ ?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => trans('entities/image.focus.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entities/image.focus.breadcrumb')\n    ],\n    'bodyClass' => 'entity-image-focus',\n    'centered' => true,\n    'entity' => null\n])\n\n@php\n$source = empty($entity->image_path) && !empty($entity->image_uuid) ? $entity->image : $entity;\n@endphp\n\n\n@section('content')\n\n    @include('partials.errors')\n\n    @if ($campaign->boosted() && empty($entity->image_path) && !empty($entity->image_uuid))\n        <x-alert type=\"warning\">\n            <p>{!! __('entities/image.focus.warning', ['gallery' => '<a href=\"' . route('gallery', $campaign) . '\">' . __('sidebar.gallery') . '</a>']) !!}</p>\n        </x-alert>\n    @endif\n\n    <x-box>\n    @if ($campaign->boosted())\n        <x-grid type=\"1/1\">\n        @if(!empty($entity->image_path))\n            <x-helper>\n                <p>{{ __('entities/image.focus.helper') }}</p>\n            </x-helper>\n        @endif\n\n        <div class=\"focus-selector relative flex mx-auto max-w-sm\">\n            <div class=\"focus absolute text-white shadow-sm cursor-pointer text-2xl @if(empty($source->focus_x))hidden @endif\" data-focus-x=\"{{ $source->focus_x }}\" data-focus-y=\"{{ $source->focus_y }}\" >\n                <x-icon class=\"fa-duotone fa-arrow-up-left-from-circle fa-2x hover:text-error-content\" />\n            </div>\n\n            <img class=\"focus-image cursor-crosshair\" src=\"{{ \\App\\Facades\\Avatar::entity($entity)->original() }}\" alt=\"img\" />\n        </div>\n        </x-grid>\n\n        <x-form :action=\"['entities.image.focus', $campaign, $entity]\">\n            <x-dialog.footer>\n                <button type=\"submit\" class=\"btn2 btn-primary\">\n                    {{ __('entities/image.actions.save_focus') }}\n                </button>\n            </x-dialog.footer>\n            <input type=\"hidden\" name=\"focus_x\" />\n            <input type=\"hidden\" name=\"focus_y\" />\n        </x-form>\n    @else\n        <x-alert type=\"warning\">\n            <p>\n            {!! __('entities/image.focus.unboosted', [\n    'boosted-campaigns' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaigns') . '</a>'\n]) !!}\n            </p>\n        </x-alert>\n        <a href=\"{{ $model->getLink() }}\" class=\"text-link\">\n            <x-icon class=\"fa-regular fa-arrow-left\" />\n            {{ __('crud.actions.back') }}\n        </a>\n    @endif\n    </x-box>\n@endsection\n\n\n@section('scripts')\n    @parent\n    @vite('resources/js/story.js')\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/image/replace.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */ ?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => trans('entities/image.replace.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entities/image.replace.breadcrumb')\n    ],\n    'mainTitle' => false,\n    'bodyClass' => 'entity-image-replace'\n])\n\n\n@section('content')\n    <x-form :action=\"['entities.image.replace', $campaign, $entity]\" files>\n        @include('partials.forms.form', [\n            'title' => __('entities/image.replace.title', ['name' => $entity->name]),\n            'content' => 'entities.pages.image._form',\n            'submit' => __('entities/image.actions.save-replace'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_buttons.blade.php",
    "content": "<div class=\"dropdown entity-actions-dropdown join-item\">\n    <div data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"inventories-submenu\" class=\"btn2 btn-sm join-item entity-actions-button\">\n        {{ __('crud.add') }}\n        <x-icon class=\"fa-regular fa-caret-down\" />\n    </div>\n\n    <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"inventories-submenu\">\n        <x-dropdowns.item\n            link=\"#\"\n            :dialog=\"route('entities.inventories.create', [$campaign, $entity])\"\n            icon=\"plus\"\n            data-toggle=\"dialog\" data-target=\"inventories-dialog\" data-url=\"{{ route('entities.inventories.create', [$campaign, $entity]) }}\" data-title=\"{{ __('entities/inventories.actions.create') }}\" data-toggle=\"tooltip\"\n        >\n            {{ __('entities/inventories.actions.multiple') }}\n        </x-dropdowns.item>\n\n        <x-dropdowns.item\n            link=\"#\"\n            :dialog=\"route('entities.inventory.generate', [$campaign, $entity])\"\n            icon=\"fa-regular fa-dice\"\n            data-toggle=\"dialog\" data-target=\"inventories-dialog\" data-url=\"{{ route('entities.inventory.generate', [$campaign, $entity]) }}\" data-title=\"{{ __('entities/inventories.actions.generate') }}\" data-toggle=\"tooltip\"\n        >\n            {{ __('entities/inventories.actions.generate') }}\n        </x-dropdowns.item>\n\n        <x-dropdowns.item\n            link=\"#\"\n            :dialog=\"route('entities.inventory.copy', [$campaign, $entity])\"\n            icon=\"fa-regular fa-copy\"\n            data-toggle=\"dialog\" data-target=\"inventories-dialog\" data-url=\"{{ route('entities.inventory.copy', [$campaign, $entity]) }}\" data-title=\"{{ __('entities/inventories.actions.copy_from') }}\" data-toggle=\"tooltip\"\n        >\n            {{ __('entities/inventories.actions.copy_from_entity') }}\n        </x-dropdowns.item>\n\n        <x-dropdowns.divider />\n\n        <x-dropdowns.item :link=\"'https://docs.kanka.io/en/latest/features/inventory.html'\" icon=\"fa-regular fa-book\">\n            <span class=\"grow\">{{ __('general.learn-more') }}</span>\n        </x-dropdowns.item>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_copy.blade.php",
    "content": "<?php /** @var \\App\\Models\\Inventory $inventory */?>\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('entities/inventories.copy.helper', ['name' => $entity->name]) }}</p>\n    </x-helper>\n    @include('cruds.fields.entity', [\n        'name' => 'entity_id',\n        'required' => true,\n        'label' => __('entities.entry'),\n    ])\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_form.blade.php",
    "content": "<?php /** @var \\App\\Models\\Inventory $inventory */?>\n@php\n$preset = null;\n\nif (isset($inventory) && $inventory->image_uuid) {\n    $preset = $inventory->image;\n}\nif (isset($inventory)) {\n    $positionPreset = $inventory->position;\n}\n@endphp\n\n@if (!isset($inventory))\n    <x-helper>\n        <p>{{ __('entities/inventories.create.helper', ['name' => $entity->name]) }}</p>\n    </x-helper>\n@endif\n<x-grid type=\"3/3\">\n\n\n    <x-forms.field\n        field=\"name\"\n        required\n        :label=\"__('entities/inventories.fields.name')\">\n        <input type=\"text\" name=\"name\" value=\"{!! htmlspecialchars(old('name', $inventory->name ?? null)) !!}\" maxlength=\"45\" class=\"w-full\" placeholder=\"{{ __('entities/inventories.placeholders.name') }}\" data-1p-ignore=\"true\" />\n        <x-slot name=\"helper\">{{ __('entities/inventories.helpers.name') }}</x-slot>\n    </x-forms.field>\n\n    <input type=\"hidden\" name=\"item_id\" value=\"\" />\n    @include('cruds.fields.item', [\n        'preset' => (!empty($inventory) && $inventory->item ? $inventory->item: false),\n        'allowNew' => false,\n        'dropdownParent' => request()->ajax() ? '#primary-dialog' : null,\n        'required' => true,\n        'multiple' => isset($multiple),\n    ])\n\n    <x-forms.field\n        css=\"row-span-2\"\n        field=\"image-uuid\"\n        :label=\"__('crud.fields.image')\">\n\n                <x-forms.foreign\n                    field=\"image-uuid\"\n                    :campaign=\"$campaign\"\n                    name=\"image_uuid\"\n                    :allowClear=\"true\"\n                    :route=\"route('images.find', $campaign)\"\n                    :placeholder=\"__('fields.gallery.placeholder')\"\n                    :selected=\"$preset\">\n                </x-forms.foreign>\n\n            @if (!empty($inventory) && !empty($inventory->image_uuid) && !empty($inventory->image))\n                <div class=\"preview w-32\">\n                    @include('cruds.fields._image_preview', [\n                        'image' => $inventory->image->getUrl(192, 144),\n                        'title' => $inventory->name,\n                    ])\n                </div>\n            @endif\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"amount\"\n        required\n        :label=\"__('entities/inventories.fields.amount')\"\n        :helper=\"__('entities/inventories.helpers.amount')\">\n\n        <input type=\"number\" name=\"amount\" class=\"w-full\" value=\"{{ old('amount', $inventory->amount ?? 1) }}\" min=\"0\" step=\"1\" max=\"1000000000\" required />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"position\"\n        :label=\"__('entities/inventories.fields.position')\">\n        <x-forms.select name=\"position\" :options=\"$positionOptions\" :selected=\"$positionPreset\" class=\"w-full position-dropdown\" :extra=\"['data-placeholder' => __('entities/inventories.placeholders.position')]\" />\n    </x-forms.field>\n\n\n    <x-forms.field field=\"equipped\" :label=\"__('entities/inventories.fields.is_equipped')\">\n        <input type=\"hidden\" name=\"is_equipped\" value=\"0\" />\n        <x-checkbox :text=\"__('entities/inventories.helpers.is_equipped')\">\n            <input type=\"checkbox\" name=\"is_equipped\" value=\"1\" @if (old('is_equipped', $inventory->is_equipped ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    <x-forms.field field=\"copy\" :label=\"__('entities/inventories.fields.copy_entity_entry_v2')\">\n        <input type=\"hidden\" name=\"copy_item_entry\" value=\"0\" />\n        <x-checkbox :text=\"__('entities/inventories.helpers.copy_entity_entry_v2')\">\n            <input type=\"checkbox\" name=\"copy_item_entry\" value=\"1\" @if (old('copy_item_entry', $inventory->copy_item_entry ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id', ['model' => $inventory ?? null])\n\n    <x-forms.field field=\"description\" css=\"col-span-3\" :label=\"__('entities/inventories.fields.description')\">\n        <input type=\"text\" name=\"description\" value=\"{!! old('description', $inventory->description ?? null) !!}\" maxlength=\"191\" class=\"w-full\" placeholder=\"{{ __('entities/inventories.placeholders.description') }}\" />\n        <x-slot name=\"helper\">{{ __('entities/inventories.helpers.description') }}</x-slot>\n    </x-forms.field>\n\n</x-grid>\n\n\n\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_generate.blade.php",
    "content": "<?php /** @var \\App\\Models\\Inventory $inventory */?>\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('entities/inventories.generate.helper', ['name' => $entity->name]) }}</p>\n    </x-helper>\n\n    <x-forms.field\n        field=\"item_amount\"\n        :label=\"__('entities/inventories.fields.item_amount')\">\n        <input type=\"number\" name=\"item_amount\" class=\"w-full\" placeholder=\"{{ __('entities/inventories.fields.item_amount') }}\" aria-label=\"{{ __('entities/inventories.fields.item_amount') }}\" />\n    </x-forms.field>\n\n    <x-grid type=\"2/2\">\n        <div id=\"generate-tags\">\n        @include('cruds.fields.tags')\n        </div>\n\n        <x-forms.field field=\"match_all\" :label=\"__('entities/inventories.fields.match_all')\">\n            <select name=\"match_all\" class=\"w-full\">\n                <option value=\"0\">{{ __('general.no') }}</option>\n                <option value=\"1\">{{ __('general.yes') }}</option>\n            </select>\n        </x-forms.field>\n    </x-grid>\n\n    <x-forms.field field=\"replace\" css=\"col-span-2\" :label=\"__('entities/inventories.fields.replace')\">\n        <input type=\"hidden\" name=\"replace\" value=\"0\" />\n        <x-checkbox :text=\"__('entities/inventories.helpers.replace')\">\n            <input type=\"checkbox\" name=\"replace\" value=\"1\" />\n        </x-checkbox>\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_grid.blade.php",
    "content": "@php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Inventory $item\n */\n@endphp\n<div class=\"flex flex-col gap-4\" x-data=\"{ showPrice: {{ $entity->isLocation() ? 'true' : 'false' }}, showQuantity: true, showWeight: false, showSize: false }\">\n    <div class=\"flex gap-2 inventory-toggles flex-wrap justify-center md:justify-start join\">\n        <span role=\"button\" @click=\"showQuantity = !showQuantity\" class=\"btn2 btn-sm\">\n            <x-icon class=\"fa-regular fa-hashtag\" />\n            <span x-cloak x-show=\"!showQuantity\">\n                {{ __('entities/inventories.togglers.show.quantity') }}\n            </span>\n            <span x-cloak x-show=\"showQuantity\">\n                {{ __('entities/inventories.togglers.hide.quantity') }}\n            </span>\n        </span>\n        <span role=\"button\" @click=\"showPrice = !showPrice\" class=\"btn2 btn-sm\">\n            <x-icon class=\"fa-regular fa-coins\" />\n            <span x-cloak x-show=\"!showPrice\">\n                {{ __('entities/inventories.togglers.show.price') }}\n            </span>\n            <span x-cloak x-show=\"showPrice\">\n                {{ __('entities/inventories.togglers.hide.price') }}\n            </span>\n        </span>\n        <span role=\"button\" @click=\"showSize = !showSize\" class=\"btn2 btn-sm\">\n            <x-icon class=\"fa-regular fa-up-right-and-down-left-from-center\" />\n            <span x-cloak x-show=\"!showSize\">\n                {{ __('entities/inventories.togglers.show.size') }}\n            </span>\n            <span x-cloak x-show=\"showSize\">\n                {{ __('entities/inventories.togglers.hide.size') }}\n            </span>\n        </span>\n        <span role=\"button\" @click=\"showWeight = !showWeight\" class=\"btn2 btn-sm\">\n            <x-icon class=\"fa-regular fa-weight-hanging\" />\n            <span x-cloak x-show=\"!showWeight\">\n                {{ __('entities/inventories.togglers.show.weight') }}\n            </span>\n            <span x-cloak x-show=\"showWeight\">\n                {{ __('entities/inventories.togglers.hide.weight') }}\n            </span>\n        </span>\n    </div>\n    @foreach ($entity->orderedInventory() as $position => $items)\n        <div class=\"flex flex-col gap-4\" data-position=\"{{ \\Illuminate\\Support\\Str::slug($position) }}\">\n            <div class=\"section-title flex justify-between gap-4 items-center\">\n                <div class=\"overflow-hidden text-xl flex items-center gap-1 cursor-pointer inventory-position grow\" data-animate=\"collapse\" data-target=\"#inventory-section-body-{{ \\Illuminate\\Support\\Str::slug($position) }}\">\n                    <x-icon class=\"fa-regular fa-chevron-up collapsed:flip transition-all duration-150\" />\n                    <span class=\"truncate\">{!! $position ?? __('entities/inventories.show.unsorted') !!}</span>\n                </div>\n                <div class=\"flex items-center gap-2 lg:gap-4\">\n                    @can('inventory', $entity)\n                        <a\n                            href=\"{{ route('entities.inventories.create', [$campaign, $entity, 'position' => $position]) }}\"\n                            class=\"btn2 btn-default btn-sm\"\n                            data-toggle=\"dialog\"\n                            data-url=\"{{ route('entities.inventories.create', [$campaign, $entity, 'position' => $position]) }}\"\n                        >\n                            <x-icon class=\"plus\" />\n                        </a>\n                        <a\n                            href=\"#\"\n                            class=\"btn2 btn-default btn-sm text-error-content\"\n                            role=\"button\"\n                            data-toggle=\"dialog\"\n                            data-url=\"{{ route('confirm-delete', [$campaign, 'route' => route('entities.inventory.delete.section', [$campaign, $entity, $items['0']]), 'name' => $position, 'permanent' => true]) }}\"\n                            title=\"{{ __('crud.remove') }}\">\n                                <x-icon class=\"trash\" />\n                                <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                        </a>\n                    @endcan\n                </div>\n            </div>\n            <div class=\"flex gap-4 flex-wrap\" id=\"inventory-section-body-{{ \\Illuminate\\Support\\Str::slug($position) }}\">\n                @foreach ($items as $item)\n                    @include('entities.pages.inventory._item')\n                @endforeach\n            </div>\n        </div>\n    @endforeach\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_inventory.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Inventory $item */?>\n\n<div class=\"table-responsive\">\n<table class=\"table table-striped table-entity-inventory mb-0\">\n    <thead>\n    <tr>\n        <th colspan=\"2\">{{ __('entities.item') }}</th>\n        <th>{{ __('entities/inventories.fields.qty') }}</th>\n        @auth\n            <th>\n                <i class=\"fa-regular fa-user-lock\" data-title=\"{{ __('crud.fields.visibility') }}\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i>\n                <span class=\"sr-only\">{{ __('crud.fields.visibility') }}</span>\n            </th>\n            <th><br /></th>\n        @endif\n    </tr>\n    </thead>\n    <tbody>\n    <?php $previousPosition = null; $posCount = 0 ?>\n    @foreach ($inventory as $item)\n        @if (!empty($item->item_id) && empty($item->item))\n            @continue\n        @endif\n        @if ($previousPosition != $item->position)\n            @php $posCount++; @endphp\n            <tr class=\"active cursor-pointer\" data-animate=\"collapse\" data-target=\".inventory-group-{{ $posCount }}\">\n                <th colspan=\"@if (auth()->check())5 @else 4 @endif\" class=\"text-neutral-content text-left\">\n                    {!! $item->position ?: '<i>' . __('entities/inventories.show.unsorted') . '</i>' !!}\n\n                    <a class=\"print-none\" href=\"{{ route('entities.inventories.create', [$campaign, $entity, 'position' => $item->position]) }}\"\n                        data-toggle=\"dialog\"\n                        data-url=\"{{ route('entities.inventories.create', [$campaign, $entity, 'position' => $item->position]) }}\"\n                    >\n                        <x-icon class=\"plus\" />\n                    </a>\n                </th>\n            </tr>\n            <?php $previousPosition = $item->position; ?>\n        @endif\n        <tr class=\"overflow-hidden inventory-group-{{ $posCount }}\">\n            <td style=\"width: 50px\">\n                @if ($item->is_equipped)\n                    <i class=\"fa-regular fa-check\" data-title=\"{{ __('entities/inventories.fields.is_equipped') }}\" data-animate=\"collapse\" aria-hidden=\"true\"></i>\n                    <span class=\"sr-only\">{{ __('entities/inventories.fields.is_equipped') }}</span>\n                @endif\n            </td>\n            <td>\n                @if ($item->item)\n                    <x-entity-link\n                        :entity=\"$item->entity\"\n                        :campaign=\"$campaign\">\n                        {!! $item->name !!}\n                    </x-entity-link>\n                @else\n                    {!! $item->name !!}\n                @endif<br />\n                <span class=\"text-sm text-muted\">\n                    @if ($item->item && $item->item->entity && $item->copy_item_entry)\n                        {!! $item->item->entity->parsedEntry() !!}\n                    @else\n                    {{ $item->description }}\n                    @endif\n                </span>\n            </td>\n            <td>\n                {{ \\Illuminate\\Support\\Number::format($item->amount ?? 0) }}\n            </td>\n            @auth\n                <td>\n                    @include('icons.visibility', ['icon' => $item->visibilityIcon()])\n                </td>\n                @can('inventory', $entity)\n                    <td class=\"text-right print-none\">\n                        <a href=\"{{ route('entities.inventories.edit', [$campaign, $entity, $item]) }}\"\n                           class=\"btn2 btn-outline btn-xs\"\n                           data-toggle=\"dialog\"\n                           data-url=\"{{ route('entities.inventories.edit', [$campaign, $entity, $item]) }}\"\n                           title=\"{{ __('crud.edit') }}\">\n                            <x-icon class=\"edit\" /> {{ __('crud.edit') }}\n                        </a>\n                    </td>\n                @endcan\n            @endif\n        </tr>\n    @endforeach\n    </tbody>\n</table>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_item.blade.php",
    "content": "@php\n /** @var \\App\\Models\\Inventory $item **/\n$image = false;\nif ($item->item && $item->item->entity->hasImage()) {\n    $image = \\App\\Facades\\Avatar::entity($item->item->entity)->size(192)->thumbnail();\n} elseif ($item->image) {\n    $image = $item->image->getUrl(192);\n}\n$itemName = '';\nif ($item->item) {\n    $itemName = $item->name ?: $item->item->name;\n} else {\n    $itemName = $item->name;\n}\n@endphp\n\n<div class=\"flex flex-col gap-0 relative item-wrapper\">\n    <a\n        class=\"w-40 h-40 rounded relative flex flex-col cursor-pointer overflow-hidden bg-base-200 shadow-xs hover:shadow-md\"\n    @if ($item->item) data-object-size=\"{{ $item->item->size }}\"\n    data-object-price=\"{{ $item->item->price }}\"\n    data-object-weight=\"{{ $item->item->weight }}\" @endif\n    data-visibility=\"{{ $item->visibility_id }}\"\n    data-toggle=\"dialog\"\n    data-url=\"{{ route('entities.inventory.details', [$campaign, $entity, $item]) }}\"\n    >\n        @if ($image !== false)\n            <img loading=\"lazy\" class=\"z-5 absolute\" src=\"{{ $image }}\" alt=\"{{ $itemName }}\" />\n        @endif\n\n\n    @if ($item->isEquipped())\n        <div class=\"left-2 top-2 absolute flex gap-1 text-neutral-content z-10\">\n            <div class=\"rounded-full bg-base-200 w-6 h-6 flex items-center justify-center\">\n                <x-icon class=\"fa-regular fa-backpack\" tooltip=\"1\" :title=\"__('entities/inventories.tooltips.equipped')\" />\n            </div>\n            @if (!$item->isVisibleAll())\n                <div class=\"rounded-full bg-base-200 w-6 h-6 flex items-center justify-center\">\n                    @include('icons.visibility', ['icon' => $item->visibilityIcon()])\n                </div>\n            @endif\n\n        </div>\n\n    @endif\n\n        <div class=\"grow flex items-center justify-center text-neutral-content text-4xl text-opacity-50\">\n            @if ($image === false)\n                <x-icon class=\"fa-regular fa-treasure-chest\"></x-icon>\n            @endif\n        </div>\n        <div class=\"flex flex-col gap-0 items-center overflow-hidden bg-base-100 p-1 px-1.5 text-base-content justify-center h-12 z-10\" >\n            <div class=\"flex gap-1 items-center justify-center w-full\">\n                <span class=\"item-name truncate\" data-toggle=\"tooltip\" data-title=\"{{ $itemName }}\">\n                   {!! $itemName !!}\n                </span>\n            </div>\n\n            <div class=\"flex gap-2 items-center justify-center w-full\">\n                @if ($item->amount > 1)\n                    <div class=\"item-amount\" x-cloak x-show=\"showQuantity\">\n                        x{!! \\Illuminate\\Support\\Number::format($item->amount) !!}\n                    </div>\n                @endif\n                @if ($item->item)\n                    @if (!empty($item->item->price))\n                        <div class=\"object-price truncate\" x-cloak x-show=\"showPrice\" data-toggle=\"tooltip\" data-title=\"{{ $item->item->price }}\">\n                            <x-icon class=\"fa-duotone fa-coins text-accent\" />\n                            {{ $item->item->price }}\n                        </div>\n                    @endif\n                    @if (!empty($item->item->size))\n                        <div class=\"object-size truncate\" x-cloak x-show=\"showSize\" data-toggle=\"tooltip\" data-title=\"{{ $item->item->size }}\">\n                            <x-icon class=\"fa-duotone fa-up-right-and-down-left-from-center text-accent\" />\n                            {{ $item->item->size }}\n                        </div>\n                    @endif\n                    @if (!empty($item->item->weight))\n                        <div class=\"object-weight truncate\" x-cloak x-show=\"showWeight\" data-toggle=\"tooltip\" data-title=\"{{ $item->item->weight }}\">\n                            <x-icon class=\"fa-duotone fa-weight-hanging text-accent\" />\n                            {{ $item->item->weight }}\n                        </div>\n                    @endif\n                @endif\n            </div>\n\n            <p class=\"text-xs text-neutral-content text-center mx-4 overflow-hidden cursor-pointer item-description hidden item-description\" data-toggle=\"dialog\" data-url=\"{{ route('entities.inventory.details', [$campaign, $entity, $item]) }}\">\n                @if ($item->item && $item->copy_item_entry)\n                    {!! \\Illuminate\\Support\\Str::limit(strip_tags($item->item->entity->parsedEntry()) ?? '', 100) !!}\n                @else\n                    {!! \\Illuminate\\Support\\Str::limit($item->description ?? '', 100) !!}\n                @endif\n            </p>\n        </div>\n    </a>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_table.blade.php",
    "content": "<x-box :padding=\"false\" class=\"box-entity-inventory\">\n    @includeWhen($inventory->count() > 0, 'entities.pages.inventory._inventory')\n</x-box>\n\n@section('modals')\n    @parent\n    <x-dialog id=\"inventory-dialog\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/_thumbnail.blade.php",
    "content": "@php /** @var \\App\\Models\\Inventory $item **/ @endphp\n@if ($item->item && $item->item->entity->hasImage())\n    <div class=\"w-24 h-24 rounded-full cover-background\" style=\"background-image: url('{{ \\App\\Facades\\Avatar::entity($item->item->entity)->size(192)->thumbnail() }}')\" >\n    </div>\n@elseif ($item->image)\n    <div class=\"w-24 h-24 rounded-full cover-background\" style=\"background-image: url('{{ $item->image->getUrl(192) }}')\" >\n    </div>\n@else\n    <div class=\"w-24 h-24 rounded-full bg-base-200 flex items-center justify-center align-center\">\n        <x-icon class=\"fa-duotone fa-gem text-6xl text-accent\" />\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/copy.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/inventories.create.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.inventory', [$campaign, $entity->id]), 'label' => __('crud.tabs.inventory')],\n    ]\n])\n\n@section('content')\n    <x-form :action=\"['entities.inventory.copy.store', $campaign, $entity->id]\">\n    @include('partials.forms.form', [\n            'title' => __('entities/inventories.actions.copy_inventory', ['name' => $entity->name]),\n            'content' => 'entities.pages.inventory._copy',\n            'submit' => __('entities/inventories.actions.copy_inventory'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/inventories.create.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.inventory', [$campaign, $entity->id]), 'label' => __('crud.tabs.inventory')],\n    ]\n])\n\n@section('content')\n    <x-form :action=\"['entities.inventories.store', $campaign, $entity->id]\">\n        @include('partials.forms.form', [\n            'title' => __('entities/inventories.create.title', ['name' => $entity->name]),\n            'content' => 'entities.pages.inventory._form',\n            'submit' => __('entities/inventories.actions.multiple'),\n            'multiple' => true,\n        ])\n    <input type=\"hidden\" name=\"entity_id\" value=\"{{ $entity->id }}\" />\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/details.blade.php",
    "content": "<?php\n    /** @var \\App\\Models\\Inventory $inventory */\n?>\n    <x-dialog.header>\n        {!! $inventory->itemName() !!}\n    </x-dialog.header>\n    <article class=\"max-w-2xl p-4 md:px-6\">\n        <div class=\"flex flex-col gap-4\">\n            <div class=\"flex gap-4\">\n                <div class=\"text-center self-center\">\n                    @include('entities.pages.inventory._thumbnail', ['item' => $inventory])\n                </div>\n                <div class=\"grid grid-cols-2 gap-4\">\n                    @if ($inventory->item)\n                        @if ($inventory->item->price)\n                            <div class=\"flex gap-2 items-center\">\n                                <div class=\"text-accent text-3xl\">\n                                    <x-icon class=\"fa-duotone fa-coins\" />\n                                </div>\n                                <div class=\"flex flex-col gap-0\">\n                                    <div class=\"font-extrabold text-xl\">\n                                        {{ $inventory->item->price }}\n                                    </div>\n                                    <div class=\"text-neutral-content\">\n                                        {{ __('items.fields.price') }}\n                                    </div>\n                                </div>\n                            </div>\n                        @endif\n\n                        @if ($inventory->item->size)\n                            <div class=\"flex gap-2 items-center\">\n                                <div class=\"text-accent text-3xl\">\n                                    <x-icon class=\"fa-duotone fa-up-right-and-down-left-from-center\" />\n                                </div>\n                                <div class=\"flex flex-col gap-0\">\n                                    <div class=\"font-extrabold text-xl\">\n                                        {{ $inventory->item->size }}\n                                    </div>\n                                    <div class=\"text-neutral-content\">\n                                        {{ __('items.fields.size') }}\n                                    </div>\n                                </div>\n                            </div>\n                        @endif\n\n                        @if ($inventory->item->weight)\n                            <div class=\"flex gap-2 items-center\">\n                                <div class=\"text-accent text-3xl\">\n                                    <x-icon class=\"fa-duotone fa-weight-hanging\" />\n                                </div>\n                                <div class=\"flex flex-col gap-0\">\n                                    <div class=\"font-extrabold text-xl\">\n                                        {{ $inventory->item->weight }}\n                                    </div>\n                                    <div class=\"text-neutral-content\">\n                                        {{ __('items.fields.weight') }}\n                                    </div>\n                                </div>\n                            </div>\n                        @endif\n\n                        @if ($inventory->item->location)\n                            <div class=\"flex gap-2 items-center\">\n                                <div class=\"text-accent text-3xl\">\n                                    <x-icon class=\"fa-duotone fa-location-dot\" />\n                                </div>\n                                <div class=\"flex flex-col gap-0\">\n                                    <div class=\"font-extrabold text-xl\">\n                                        <x-entity-link\n                                            :entity=\"$inventory->item->location->entity\"\n                                            :campaign=\"$campaign\" />\n                                    </div>\n                                    <div class=\"text-neutral-content\">\n                                        {{ \\App\\Facades\\Module::singular(config('entities.ids.location'), __('entities.location'))  }}\n                                    </div>\n                                </div>\n                            </div>\n                        @endif\n                    @endif\n\n                    <div class=\"flex gap-2 items-center \">\n                        <div class=\"text-accent text-3xl\">\n                            @include('icons.visibility', ['icon' => $inventory->visibilityIcon()])\n                        </div>\n                        <div class=\"flex flex-col gap-0\">\n                            <div class=\"font-extrabold text-xl \">\n                                {{ __($inventory->visibilityName()) }}\n                            </div>\n                            <div class=\"text-neutral-content\">\n                                {{ __('crud.fields.visibility') }}\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n        </div>\n\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl\">\n                @if ($inventory->item)\n                    <x-entity-link\n                        :entity=\"$inventory->item->entity\"\n                        :campaign=\"$campaign\" />\n                @else\n                    {!! $inventory->name !!}\n                @endif\n            </h1>\n\n        @if ($inventory->item)\n            <div class=\"flex gap-2 item-entity-tags\">\n                @foreach ($inventory->item->entity->tags()->with('entity')->get() as $tag)\n                    @if (!$tag->entity) @continue @endif\n                    <x-tags.bubble :tag=\"$tag\" :campaign=\"$campaign\" />\n                @endforeach\n            </div>\n        @endif\n        </div>\n\n        <p class=\"text-neutral-content\">\n            @if ($inventory->item && $inventory->copy_item_entry)\n                {!! $inventory->item->entity->parsedEntry() !!}\n            @else\n                {!! $inventory->description !!}\n            @endif\n        </p>\n    </article>\n    <x-dialog.footer class=\"\">\n        @can('inventory', $entity)\n            <a href=\"{{ route('entities.inventories.edit', [$campaign, $entity, $inventory]) }}\"\n               class=\"btn2 btn-outline\"\n               data-toggle=\"dialog\"\n               data-url=\"{{ route('entities.inventories.edit', [$campaign, $entity, $inventory]) }}\"\n               title=\"{{ __('crud.edit') }}\">\n                <x-icon class=\"edit\" />\n                {{ __('crud.edit') }}\n            </a>\n        @endcan\n    </x-dialog.footer>\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/generate.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/inventories.generate.title'),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.inventory', [$campaign, $entity->id]), 'label' => __('crud.tabs.inventory')],\n    ]\n])\n\n@section('content')\n    <x-form :action=\"['entities.inventory.generate.store', $campaign, $entity->id]\">\n    @include('partials.forms.form', [\n            'title' => __('entities/inventories.generate.title'),\n            'content' => 'entities.pages.inventory._generate',\n            'submit' => __('entities/inventories.actions.generate'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/grid.blade.php",
    "content": "<div class=\"box-entity-inventory\">\n    @includeWhen($entity->orderedInventory()->count() > 0, 'entities.pages.inventory._grid')\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Inventory $item */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' =>  __('crud.tabs.inventory') . \" - {$entity->name} - {$campaign->name}\",\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-inventory',\n])\n\n@include('entities.components.og')\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        @can('inventory', $entity)\n            @include('entities.pages.inventory._buttons')\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'inventory',\n        'view' => 'entities.pages.inventory.render',\n        'entity' => $entity,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/render.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n<x-tutorial code=\"inventory\" doc=\"https://docs.kanka.io/en/latest/features/inventory.html\">\n    <p>{!! __('entities/inventories.tutorials.all', ['name' => $entity->name]) !!}</p>\n</x-tutorial>\n@include('entities.pages.inventory.grid')\n"
  },
  {
    "path": "resources/views/entities/pages/inventory/update.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/inventories.update.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.inventory', [$campaign, $entity->id]), 'label' => __('crud.tabs.inventory')],\n    ]\n])\n\n@section('content')\n    <x-form method=\"PATCH\" :action=\"['entities.inventories.update', $campaign, $entity->id, $inventory]\">\n    @include('partials.forms.form', [\n        'title' => __('entities/inventories.update.title', ['name' => $entity->name]),\n        'content' => 'entities.pages.inventory._form',\n        'deleteID' => '#delete-inventory-' . $inventory->id,\n    ])\n\n    <input type=\"hidden\" name=\"entity_id\" value=\"{{ $entity->id }}\" />\n    </x-form>\n\n    <x-form method=\"DELETE\" :action=\"['entities.inventories.destroy', $campaign, 'entity' => $entity, 'inventory' => $inventory]\" id=\"delete-inventory-{{ $inventory->id }}\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/links/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    @if (!isset($entityAsset))\n        <x-helper>\n            <p>{{ __('entities/links.create.helper', ['name' => $entity->name]) }}</p>\n        </x-helper>\n    @endif\n    <x-forms.field\n        field=\"name\"\n        :label=\"__('entities/links.fields.name')\"\n        required>\n        <input type=\"text\" name=\"name\" value=\"{!! htmlspecialchars(old('name', $entityAsset->name ?? null)) !!}\" maxlength=\"45\" class=\"w-full\" placeholder=\"{{ __('entities/links.placeholders.name') }}\" data-1p-ignore=\"true\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"url\"\n        :label=\"__('entities/links.fields.url')\"\n        required>\n        <input type=\"text\" name=\"metadata[url]\" value=\"{{ old('metadata[url]', $entityAsset->metadata['url'] ?? null) }}\" maxlength=\"255\" class=\"w-full\" placeholder=\"{{ __('entities/links.placeholders.url') }}\" />\n    </x-forms.field>\n\n    @include('cruds.fields.icon', ['iconFieldName' => 'metadata[icon]', 'placeholder' => 'fa-brands fa-d-and-d-beyond, ra ra-aura', 'model' => $entityAsset ?? null])\n    @include('cruds.fields.visibility_id', ['model' => $entityAsset ?? null])\n</x-grid>\n<input type=\"hidden\" name=\"type_id\" value=\"{{ \\App\\Enums\\EntityAssetType::link }}\" />\n"
  },
  {
    "path": "resources/views/entities/pages/links/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/links.create.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_assets.index', [$campaign, $entity->id]), 'label' => trans('entries/tabs.media')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.entity_assets.store', $campaign, $entity]\">\n        @include('partials.forms.form', [\n            'title' => __('entities/links.create.title', ['name' => $entity->name]),\n            'content' => 'entities.pages.links._form',\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/links/go.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\EntityAsset $entityAsset */?>\n@extends('layouts.app', [\n    'title' => __('entities/links.go.title', ['name' => $entity->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entities/assets.actions.link')\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n])\n\n@section('content')\n    <x-box class=\"flex flex-col gap-4 items-center align-middle\">\n        <h1 class=\"text-2xl\">{{ __('entities/links.go.title') }}</h1>\n\n        <p>\n            {!! __('entities/links.go.description', ['link' => '<strong>' . $entityAsset->metadata['url'] . '</strong>']) !!}\n        </p>\n        <div class=\"flex gap-2 items-center justify-center\">\n            <a href=\"{{ $entity->url('show') }}\" class=\"btn2 btn-outline\">\n                {{ __('crud.cancel') }}\n            </a>\n            <a href=\"{{ $entityAsset->metadata['url'] }}\" rel=\"noreferrer nofollow\" class=\"btn2 btn-primary\">\n                {{ __('entities/links.go.actions.confirm') }}\n            </a>\n        </div>\n        <a href=\"{{ $entityAsset->metadata['url'] }}\" rel=\"noreferrer nofollow\" class=\"domain-trust text-link\" data-domain=\"{{ $entityAsset->urlDomain() }}\">\n            {{ __('entities/links.go.actions.trust') }}\n        </a>\n    </x-box>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/links/update.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityAsset $entityAsset */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/links.update.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.entity_assets.index', [$campaign, $entity->id]), 'label' => __('entries/tabs.media')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.entity_assets.update', $campaign, $entity, $entityAsset]\" method=\"PATCH\">\n        @include('partials.forms.form', [\n    'title' => __('entities/links.update.title', ['name' => $entity->name]),\n            'content' => 'entities.pages.links._form',\n            'deleteID' => '#delete-link-' . $entityAsset->id,\n        ])\n    </x-form>\n\n    <x-form method=\"DELETE\" :action=\"['entities.entity_assets.destroy', $campaign, 'entity' => $entity, 'entity_asset' => $entityAsset]\" id=\"delete-link-{{ $entityAsset->id }}\" />\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/logs/_logs.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityLog $log */ ?>\n<div class=\"entity-logs\">\n    <div class=\"flex flex-col gap-2 lg:gap-5\">\n        <x-form :action=\"['entities.logs', $campaign, $entity]\" method=\"GET\">\n            <div class=\"flex gap-2 justify-between\">\n                <div class=\"flex gap-2 items-center\">\n                    <input type=\"text\" name=\"q\"  class=\"grow\" value=\"{!! old('q', htmlentities($q)) !!}\" placeholder=\"{{ __('entities/logs.filters.keywords') }}\" />\n                    <x-forms.select name=\"action\" :options=\"$actions\" :selected=\"$action\" />\n                </div>\n                <button class=\"btn2 btn-primary btn-sm\">\n                    {{ __('crud.actions.apply') }}\n                </button>\n            </div>\n        </x-form>\n        @foreach ($logs as $log)\n            <div class=\"rounded p-4 shadow-xs bg-box entity-log flex flex-col gap-2\" x-data=\"{ opened: @if (!$expanded) false @else true @endif }\">\n                <div class=\"log-title flex gap-2 justify-between\">\n                    <div class=\"action flex gap-2 items-center\">\n                        @if ($log->isPost())\n                            <a href=\"{{ route('entities.show', [$campaign, $entity, '#post-' . $log->parent->id]) }}\" data-title=\"{{ __('entities/logs.tooltips.post') }}\" data-toggle=\"tooltip\" class=\"text-link\">\n                                {!! $log->parent->name !!}\n                            </a>\n                            <x-icon class=\"fa-regular fa-chevron-right\" />\n                        @endif\n                        <span class=\"font-bold \">{!! __('entities/logs.actions.' . $log->actionCode()) !!}</span>\n                    </div>\n                    <div class=\"text-xs\">\n                        <span data-title=\"{{ $log->created_at }} UTC\" data-toggle=\"tooltip\" class=\"text-neutral-content\">\n                            {{ $log->created_at->diffForHumans() }}\n                        </span>\n                    </div>\n                </div>\n                <div class=\"flex gap-2 justify-between\">\n                    <div class=\"log-author\">\n                        @if ($log->user)\n                            <x-users.link :user=\"$log->user\" class=\"w-10 h-10\" />\n                        @else\n                            <span class=\"text-italic unknown-author\">\n                                {{  __('crud.history.unknown') }}\n                            </span>\n                        @endif\n\n                        @if ($log->impersonator)\n                            <span class=\"impersonator\">\n                                ({{ __('entities/logs.impersonated', ['name' => $log->impersonator->name]) }})\n                            </span>\n                        @endif\n                    </div>\n                    <div class=\"\">\n                        @if ($campaign->superboosted() && !empty($log->changes))\n                            <a @click=\"opened = !opened\" class=\"btn2 btn-xs btn-outline\">\n                                <x-icon class=\"fa-regular fa-eye\" />\n                                {{ __('entities/logs.actions.reveal') }}\n                            </a>\n                        @elseif (!$campaign->superboosted())\n                            <a @click=\"opened = !opened\" class=\"btn2 btn-sm btn-outline\">\n                                <x-icon class=\"fa-regular fa-eye\" />\n                                {{ __('entities/logs.actions.reveal') }}\n                            </a>\n                        @endif\n                    </div>\n                </div>\n                <div class=\"log-cta\" x-show=\"opened\" id=\"log-cta-{{ $log->id }} x-cloak\">\n                    @if ($campaign->superboosted() && !empty($log->changes))\n                        <p class=\"text-neutral-content\">{{ __('history.helpers.changes') }}</p>\n                        <ul>\n                            @foreach ($log->changes as $attribute => $value)\n                                @if (is_array($value)) @continue @endif\n                                <li>\n                                    <span class=\"log-field\">\n                                        {!! $log->attributeKey($transKey, $attribute) !!}@if (!empty($value) || $log->isBoolean($attribute)):@endif\n                                    </span>\n                                    <span class=\"log-value break-all\">\n                                                @if ($log->isBoolean($attribute))\n                                            @if ($value) {{ __('general.yes') }} @else {{ __('general.no') }} @endif\n                                        @elseif (!empty($value))\n                                            {!! $value !!}\n                                        @endif\n                                            </span>\n                                </li>\n                            @endforeach\n                        </ul>\n                    @elseif (!$campaign->superboosted())\n                        <div class=\"flex flex-col gap-2\">\n                            <x-helper>\n                                <p>\n                                    <x-icon class=\"premium\" />\n                                    {!! __('entities/logs.call-to-action', ['amount' => config('entities.logs')]) !!}\n                                </p>\n                            </x-helper>\n                            @can('boost', auth()->user())\n                                <a href=\"{{ route('settings.premium', ['campaign' => $campaign]) }}\" class=\"btn2 bg-boost text-white\">\n                                    {!! __('settings/premium.actions.unlock', ['campaign' => $campaign->name]) !!}\n                                </a>\n                            @else\n                                <a href=\"{{ \\App\\Facades\\Domain::toFront('premium')  }}\" class=\"btn2 bg-boost text-white\">\n                                    {!! __('callouts.premium.learn-more') !!}\n                                </a>\n                            @endif\n                        </div>\n                    @endif\n                </div>\n            </div>\n        @endforeach\n\n        @if ($logs->hasPages())\n            {{ $logs->onEachSide(0)->links() }}\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/logs/_modal.blade.php",
    "content": "<form class=\"pagination-ajax-body max-w-2xl\">\n    <x-dialog.header>\n        {!! $entity->name !!}\n        @if (isset($post)) - {!! $post->name !!} @endif\n    </x-dialog.header>\n    <x-dialog.article>\n        <div class=\"modal-loading text-center text-xl p-5 hidden\">\n            <x-icon class=\"load\" />\n        </div>\n        <div class=\"pagination-ajax-content w-full\">\n\n\n            {{--                <table class=\"table table-hover break-all\">--}}\n            {{--                    <thead>--}}\n            {{--                        <tr>--}}\n            {{--                            <th>{{ __('entities/logs.fields.action') }}</th>--}}\n            {{--                            <th>{{ __('campaigns.members.fields.name') }}</th>--}}\n            {{--                            <th>{{ __('entities/logs.fields.date') }}</th>--}}\n            {{--                            <th></th>--}}\n            {{--                        </tr>--}}\n            {{--                    </thead>--}}\n            {{--                    <tbody>--}}\n            {{--                    @foreach ($logs as $log)--}}\n            {{--                        @if ($log->action < 7 || $log->post)--}}\n            {{--                            <tr>--}}\n            {{--                                <td class=\"wrap-break-word\">--}}\n            {{--                                    {{ __('entities/logs.actions.' . $log->actionCode(), ['post' => $log->post?->name]) }}--}}\n            {{--                                </td>--}}\n            {{--                                <td class=\"\">@if ($log->user)--}}\n            {{--                                         <a href=\"{{  route('users.profile', $log->user) }}\">{!! $log->user->name !!}</a>--}}\n            {{--                                    @else--}}\n            {{--                                        {{  __('crud.history.unknown') }}--}}\n            {{--                                    @endif--}}\n\n            {{--                                    @if ($log->impersonator)--}}\n            {{--                                        ({{ __('entities/logs.impersonated', ['name' => $log->impersonator->name]) }})--}}\n            {{--                                    @endif--}}\n            {{--                                </td>--}}\n            {{--                                <td>--}}\n            {{--                                    <span data-title=\"{{ $log->created_at }} UTC\" data-toggle=\"tooltip\" class=\"text-xs\">--}}\n            {{--                                        {{ $log->created_at->diffForHumans() }}--}}\n            {{--                                    </span>--}}\n            {{--                                </td>--}}\n            {{--                                <td class=\"text-right\">--}}\n            {{--                                    @if ($campaign->superboosted())--}}\n            {{--                                        @if(!empty($log->changes))--}}\n            {{--                                            <a href=\"#log-{{ $log->id }}\" data-animate=\"collapse\">--}}\n            {{--                                                <x-icon class=\"fa-solid fa-scroll\" />--}}\n            {{--                                                <span class=\"hidden md:inline\">{{ __('entities/logs.actions.view') }}</span>--}}\n            {{--                                            </a>--}}\n            {{--                                        @endif--}}\n            {{--                                    @else--}}\n            {{--                                    <a href=\"#log-cta\" data-animate=\"collapse\">--}}\n            {{--                                        <x-icon class=\"fa-solid fa-scroll\" />--}}\n            {{--                                        <span class=\"hidden md:inline\">{{ __('entities/logs.actions.view') }}</span>--}}\n            {{--                                    </a>--}}\n            {{--                                    @endif--}}\n            {{--                                </td>--}}\n            {{--                            </tr>--}}\n            {{--                        @endif--}}\n            {{--                        @if ($campaign->superboosted() && !empty($log->changes))--}}\n            {{--                        <tr id=\"log-{{ $log->id }}\" class=\"hidden\">--}}\n            {{--                            <td colspan=\"4\">--}}\n            {{--                                <dl class=\"dl-horizontal\">--}}\n            {{--                                    @foreach ($log->changes as $attribute => $value)--}}\n            {{--                                        @if (is_array($value)) @continue @endif--}}\n            {{--                                        <dt>{!! $log->attributeKey($transKey, $attribute) !!}</dt>--}}\n            {{--                                        <dd class=\"break-all\">{{ $value }}</dd>--}}\n            {{--                                    @endforeach--}}\n            {{--                                </dl>--}}\n            {{--                            </td>--}}\n            {{--                        </tr>--}}\n            {{--                        @endif--}}\n            {{--                    @endforeach--}}\n            {{--                    @if (!$campaign->superboosted())--}}\n            {{--                    <tr id=\"log-cta\" class=\"hidden\">--}}\n            {{--                        <td colspan=\"4\">--}}\n            {{--                                <x-helper>{!! __('entities/logs.call-to-action', [--}}\n            {{--'amount' => config('entities.logs'),--}}\n            {{--]) !!}</x-helper>--}}\n            {{--                            @can('boost', auth()->user())--}}\n            {{--                                <a href=\"{{ route('settings.premium', ['campaign' => $campaign]) }}\" class=\"btn2 bg-boost text-white\">--}}\n            {{--                                    {!! __('settings/premium.actions.unlock', ['campaign' => $campaign->name]) !!}--}}\n            {{--                                </a>--}}\n            {{--                            @else--}}\n            {{--                                <a href=\"{{ \\App\\Facades\\Domain::toFront('premium')  }}\" class=\"btn2 bg-boost text-white\">--}}\n            {{--                                    {!! __('callouts.premium.learn-more') !!}--}}\n            {{--                                </a>--}}\n            {{--                            @endif--}}\n            {{--                        </td>--}}\n            {{--                    </tr>--}}\n            {{--                    @endif--}}\n            {{--                    </tbody>--}}\n            {{--                </table>--}}\n        </div>\n    </x-dialog.article>\n\n</form>\n"
  },
  {
    "path": "resources/views/entities/pages/logs/history.blade.php",
    "content": "<?php /** @var \\App\\Models\\MiscModel|\\App\\Models\\Entity $model */?>\n@can('history', [$model->entity, $campaign])\n<div class=\"entity-modification-history\">\n    <p class=\"text-neutral-content text-right italic text-xs m-0\">\n    @if ($entity)\n        {!! __('crud.history.created_clean', [\n            'name' => (!empty($entity->created_by) ? '<a href=\"' . route('users.profile', $entity->created_by) . '\" class=\"text-link\">' . e(\\App\\Facades\\UserCache::name($entity->created_by)) . '</a>' : __('crud.history.unknown')),\n            'date' => '<span data-toggle=\"tooltip\" data-title=\"' . $model->created_at . ' UTC' . '\">' . $model->created_at->diffForHumans() . '</span>',\n        ]) !!}. {!! __('crud.history.updated_clean', [\n            'name' => (!empty($entity->updated_by) ? '<a href=\"' . route('users.profile', $entity->updated_by) . '\" class=\"text-link\">' . e(\\App\\Facades\\UserCache::name($entity->updated_by)) . '</a>' : __('crud.history.unknown')),\n            'date' => '<span data-toggle=\"tooltip\" data-title=\"' . $model->updated_at . ' UTC' . '\">' . $model->updated_at->diffForHumans() . '</span>',\n        ]) !!}\n        @can('update', $entity)\n            <br /><a href=\"{{ route('entities.logs', [$campaign, $entity]) }}\" title=\"{{ __('crud.history.view') }}\" class=\"text-link\">\n                <x-icon class=\"fa-regular fa-history\" />\n                <span class=\"hidden md:inline\">{{ __('crud.history.view') }}</span>\n            </a>\n        @endcan\n    @else\n        {!! __('crud.history.created_clean', [\n            'name' => (!empty($model->created_by) ? '<a href=\"' . route('users.profile', $model->created_by) . '\" class=\"text-link\">' . e(\\App\\Facades\\UserCache::name($model->created_by)) . '</a>': __('crud.history.unknown')),\n            'date' => '<span data-toggle=\"tooltip\" data-title=\"' . $model->created_at . ' UTC' . '\">' . $model->created_at->diffForHumans() . '</span>',\n        ]) !!}. {!! __('crud.history.updated_clean', [\n            'name' => (!empty($model->updated_by) ? '<a href=\"' . route('users.profile', $model->updated_by) . ' class=\"text-link\"\">' . e(\\App\\Facades\\UserCache::name($model->updated_by)). '</a>': __('crud.history.unknown')),\n            'date' =>'<span data-toggle=\"tooltip\" data-title=\"' . $model->updated_at . ' UTC' . '\">' . $model->updated_at->diffForHumans() . '</span>',\n        ]) !!}\n    @endif\n    </p>\n</div>\n@endcan\n"
  },
  {
    "path": "resources/views/entities/pages/logs/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/logs.show.title', ['name' => $entity->name]),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-logs'\n])\n@include('entities.components.og')\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        <x-learn-more url=\"features/history.html\" />\n\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'logs',\n        'view' => 'entities.pages.logs._logs',\n        'entity' => $entity,\n    ])\n\n\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/mentions/mentions.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\EntityMention $mention */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/mentions.show.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-mentions'\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        <button class=\"btn2 btn-sm btn-ghost\" data-toggle=\"dialog\"\n                data-target=\"dialog-help\">\n            <x-icon class=\"question\" />\n            <div class=\"hidden lg:inline\">{{ __('crud.actions.help') }}</div>\n        </button>\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'mentions',\n        'view' => 'entities.pages.mentions.render',\n        'entity' => $entity,\n    ])\n@endsection\n\n\n@section('modals')\n    <x-dialog id=\"dialog-help\" :title=\"__('crud.tabs.mentions')\">\n        <p class=\"\">\n            {{ __('entities/mentions.helper') }}\n        </p>\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/mentions/render.blade.php",
    "content": "<div class=\"overflow-x-auto\" id=\"entity-mentions\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/move/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('entities/move.title', ['name' => $entity->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entities/actions.transfer'),\n    ],\n    'centered' => true,\n    'entity' => null,\n])\n\n@section('content')\n    @include('partials.errors')\n    <x-form :action=\"['entities.move-process', $campaign, $entity]\">\n    <x-box>\n        <x-grid type=\"1/1\">\n            <x-helper>\n                <p>{{ __('entities/move.panel.description') }}</p>\n            </x-helper>\n\n            <x-forms.field field=\"campaign\" :label=\"__('entities/move.fields.campaign')\">\n                <x-forms.select name=\"campaign\" :options=\"$campaigns\" class=\"w-full\" />\n            </x-forms.field>\n\n            @can('update', $entity)\n                <x-forms.field field=\"copy\" css=\"form-check\" :label=\"__('entities/move.fields.copy')\">\n                    <x-checkbox :text=\"__('entities/move.helpers.copy')\">\n                        <input type=\"checkbox\" name=\"copy\" value=\"1\" @if (old('copy', true)) checked=\"checked\" @endif />\n                    </x-checkbox>\n                </x-forms.field>\n            @else\n                <input type=\"hidden\" name=\"copy\" value=\"1\" />\n            @endcan\n\n            @if ($entity->entityType->isCustom())\n                <x-alert type=\"warning\">\n                    {!! __('entities/move.warnings.custom', ['module' => $entity->entityType->plural()]) !!}\n                </x-alert>\n            @endif\n\n            @includeIf($entity->entityType->pluralCode() . '.bulk.modals._copy_to_campaign')\n        </x-grid>\n\n        <x-dialog.footer class=\"px-0!\">\n            <button class=\"btn2 btn-primary\">\n                @can('update', $entity)\n                    <x-icon class=\"fa-regular fa-share-from-square\" />\n                    {{ __('entities/actions.transfer') }}\n                @else\n                    <x-icon class=\"copy\" />\n                    {{ __('entities/move.actions.copy') }}\n                @endcan\n            </button>\n        </x-dialog.footer>\n    </x-box>\n\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/posts/_actions.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Post $post\n * @var \\App\\Models\\Entity $entity\n */\n?>\n@can('post', [$entity, 'edit', $post])\n    <x-dropdowns.item :link=\"route('entities.posts.edit', [$campaign, 'entity' => $entity, 'post' => $post, 'from' => 'main'])\" icon=\"edit\">\n        {{ __('crud.edit') }}\n    </x-dropdowns.item>\n@endcan\n@if (!isset($more))\n    @php\n        $title = '[post:' . $post->id . ']';\n        $data = [\n            'title' => $title,\n            'toggle' => 'tooltip',\n            'clipboard' => $title,\n            'toast' => __('entities/notes.copy_mention.success')\n    ]; @endphp\n    <x-dropdowns.item link=\"#\" :data=\"$data\" icon=\"fa-regular fa-link\">\n        {{ __('entities/notes.copy_mention.copy') }}\n    </x-dropdowns.item>\n@endif\n@can('admin', $campaign)\n    <x-dropdowns.item\n        :link=\"route('posts.move', [$campaign, 'entity' => $entity, 'post' => $post, 'from' => 'main'])\"\n        :dialog=\"route('posts.move', [$campaign, 'entity' => $entity, 'post' => $post, 'from' => 'main'])\"\n        icon=\"fa-regular fa-arrows-left-right\">\n        {{ __('articles.actions.move') }}\n    </x-dropdowns.item>\n@endif\n@can('setPostTemplates', $campaign)\n    <x-dropdowns.item :link=\"route('posts.template', [$campaign, 'post' => $post])\" :icon=\"($post->isTemplate() ? 'fa-regular' : 'fa-solid') . ' fa-star'\">\n        @if ($post->isTemplate())\n            {{ __('posts/templates.actions.unset') }}\n        @else\n            {{ __('posts/templates.actions.set') }}\n        @endif\n    </x-dropdowns.item>\n@endcan\n@can('update', $entity)\n    <x-dropdowns.item :link=\"route('entities.posts.logs', [$campaign, $entity, $post])\" icon=\"fa-regular fa-history\">\n        {{ __('crud.history.view') }}\n    </x-dropdowns.item>\n@endcan\n\n@can('delete', $entity)\n    <x-dropdowns.divider />\n    @php\n        $url = route('confirm-delete', [$campaign, 'route' => route('entities.posts.destroy', [$campaign, $entity, $post]), 'name' => $post->name]);\n    @endphp\n    <x-dropdowns.item link=\"#\" css=\"text-error-content hover:bg-error\" :data=\"['toggle' => 'dialog', 'target' => 'primary-dialog', 'url' => $url]\" icon=\"trash\">\n        {{ __('posts.remove.title') }}\n    </x-dropdowns.item>\n@endcan\n"
  },
  {
    "path": "resources/views/entities/pages/posts/_boosted.blade.php",
    "content": "<p>\n    {!! __('callouts.premium.limitation', ['campaign' => $campaign->name]) !!}\n    @can('boost', auth()->user())\n        <a href=\"{{ route('settings.premium', ['campaign' => $campaign]) }}\" class=\"text-link\">\n            {!! __('settings/premium.actions.unlock', ['campaign' => $campaign->name]) !!}\n        </a>\n    @else\n        <a href=\"{{ \\App\\Facades\\Domain::toFront('premium')  }}\" class=\"text-link\">\n            {!! __('callouts.premium.learn-more') !!}\n        </a>\n    @endif\n</p>\n\n"
  },
  {
    "path": "resources/views/entities/pages/posts/_form.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Post $model\n */\n?>\n<div class=\"nav-tabs-custom flex flex-col gap-6 relative bg-base-100 p-4 rounded-xl\">\n    <div class=\"flex flex-col gap-2 z-10 \">\n        <div class=\"flex gap-2 items-center w-full\">\n            <input\n                class=\"grow min-w-0\"\n                type=\"text\"\n                name=\"name\"\n                placeholder=\"{{ __('entities/notes.placeholders.name') }}\"\n                value=\"{!! htmlspecialchars(old('name', str_replace('&amp;', '&', $model->name ?? ''))) !!}\"\n                maxlength=\"191\"\n                data-live-disabled=\"1\"\n                data-1p-ignore=\"true\" />\n            <div class=\"shrink-0\">\n                @include('entities.pages.posts.forms._visibility')\n            </div>\n            <div class=\"shrink-0\">\n                @include('entities.pages.posts.forms._save-options')\n            </div>\n        </div>\n        <div class=\"overflow-x-auto\">\n            <ul class=\"nav-tabs flex items-stretch w-full\" role=\"tablist\">\n                <x-tab.tab target=\"entry\" :default=\"true\" :title=\"__('articles.tabs.main')\"></x-tab.tab>\n                <x-tab.tab target=\"layout\" :title=\"__('articles.tabs.layout')\"></x-tab.tab>\n                @can('permissions', $entity)\n                    <x-tab.tab target=\"permissions\" :title=\"__('crud.tabs.permissions')\"></x-tab.tab>\n                @endcan\n                @if (auth()->user()->can('useTemplates', $campaign) && !empty($templates))\n                    <x-tab.tab target=\"templates\" :title=\"__('posts/templates.tab')\"></x-tab.tab>\n                @endif\n            </ul>\n        </div>\n    </div>\n    <div class=\"tab-content\">\n        @include('entities.pages.posts.forms._main')\n        @include('entities.pages.posts.forms._layout')\n        @includeWhen(auth()->user()->can('permissions', $entity), 'entities.pages.posts.forms._permissions')\n        @includeWhen(auth()->user()->can('useTemplates', $campaign) && !empty($templates), 'entities.pages.posts.forms._templates')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'seoTitle' => __('posts.create.title') . ' - ' . $entity->name . ' - ' . $campaign->name,\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entities.articles'),\n        __('posts.create.title')\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n    'entity' => null,\n])\n\n@section('content')\n    @include('ads.top')\n\n    <x-tutorial code=\"posts\" doc=\"https://docs.kanka.io/en/latest/features/articles.html\" title=\"\">\n        <x-slot name=\"title\">\n            {!! __('onboarding/posts.title') !!}\n        </x-slot>\n        <p>\n            {!! __('onboarding/posts.text') !!}\n        </p>\n    </x-tutorial>\n\n    <x-form\n        :action=\"['entities.posts.store', $campaign, $entity->id]\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars'),]\"\n        unload\n        class=\"entity-form post-form\"\n    >\n        <x-grid type=\"1/1\">\n            @include('cruds.forms._errors')\n            @include('entities.pages.posts._form')\n        </x-grid>\n    </x-form>\n@endsection\n\n@include('editors.editor', $entity->isCharacter() ? ['name' => 'characters'] : [])\n"
  },
  {
    "path": "resources/views/entities/pages/posts/dialogs/_role-footer.blade.php",
    "content": "<button class=\"btn2 btn-primary post-perm-add\" id=\"post-perm-role-add\" data-type=\"roles[]\" data-template=\"post-perm-role-template\" data-dialog=\"post-new-role\">\n    <x-icon class=\"plus\" />\n    {{ __('posts.permissions.actions.roles') }}\n</button>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/dialogs/_user-footer.blade.php",
    "content": "<button class=\"btn2 btn-primary post-perm-add\" id=\"post-perm-user-add\" data-type=\"users[]\"  data-template=\"post-perm-user-template\" data-dialog=\"post-new-user\">\n    <x-icon class=\"plus\" />\n    {{ __('posts.permissions.actions.members') }}\n</button>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/dialogs/_visibility.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('posts.visibility.helper', ['name' => $post->name]) !!}</p>\n    </x-helper>\n    @include('cruds.fields.visibility_id')\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/dialogs/visibility.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('posts.visibility.title'),\n    'breadcrumbs' => [\n    ]\n])\n\n@section('content')\n    <x-form :action=\"['posts.update.visibility', $campaign, $entity, $post]\" class=\"post-visibility\" direct>\n        @include('partials.forms.form', [\n            'title' => __('posts.visibility.title'),\n            'content' => 'entities.pages.posts.dialogs._visibility',\n            'model' => $post\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/posts/edit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('crud.edit') . ' - ' . $model->name . ' - ' . $entity->name . ' - ' . $campaign->name,\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entities.articles'),\n        __('crud.update'),\n    ],\n    'mainTitle' => false,\n    'centered' => true,\n    'entity' => null,\n])\n\n@section('content')\n    @include('ads.top')\n\n    <x-form\n        method=\"PATCH\"\n        :action=\"['entities.posts.update', $campaign, $entity->id, $model->id]\"\n        :extra=\"['data-max-fields' => ini_get('max_input_vars'),]\"\n        unload\n        class=\"entity-form post-form\"\n    >\n    <x-grid type=\"1/1\">\n        @include('cruds.forms._errors')\n        @include('entities.pages.posts._form')\n    </x-grid>\n\n    @if(!empty($model) && $campaign->hasEditingWarning())\n        <input type=\"hidden\" id=\"editing-keep-alive\" data-url=\"{{ route('posts.keep-alive', [$campaign, 'post' => $model, 'entity' => $entity]) }}\" />\n    @endif\n\n    @if(!empty($from))\n        <input type=\"hidden\" name=\"from\" value=\"main\" />\n    @endif\n    </x-form>\n\n    <form id=\"delete-post-form\" method=\"POST\" action=\"{{ route('entities.posts.destroy', [$campaign, 'entity' => $entity, 'post' => $model]) }}\" class=\"hidden\">\n        @csrf\n        @method('DELETE')\n    </form>\n@endsection\n\n@include('editors.editor', $entity->isCharacter() ? ['name' => 'characters'] : [])\n\n\n@section('modals')\n    @parent\n    @includeWhen(!empty($editingUsers) && !empty($model), 'cruds.forms.edit_warning', ['model' => $model, 'entity' => $entity])\n\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/posts/forms/_layout.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Post $model?\n * @var \\App\\Models\\Entity $entity\n */\n$collapsedOptions = [\n    0 => __('entities/notes.collapsed.open'),\n    1 => __('entities/notes.collapsed.closed')\n];\n\n$defaultCollapsed = null;\nif (!isset($model) && !empty($campaign->ui_settings['post_collapsed'])) {\n    $defaultCollapsed = 1;\n}\n?>\n\n<div class=\"tab-pane\" id=\"form-layout\">\n    <x-grid type=\"1/1\">\n        <x-forms.field field=\"display\" id=\"field-display\" :hidden=\"isset($layoutHelper)\" :label=\"__('entities/notes.fields.display')\" x-show=\"!layout\">\n            <x-forms.select\n                name=\"settings[collapsed]\"\n                :options=\"$collapsedOptions\"\n                :selected=\"$model?->collapsed() ?? $defaultCollapsed\"\n                radio\n                class=\"w-full\" />\n        </x-forms.field>\n\n        <x-forms.field field=\"class\" :label=\" __('dashboard.widgets.fields.class')\" tooltip :helper=\"__('dashboard.widgets.helpers.class')\">\n            <input type=\"text\" name=\"settings[class]\" value=\"{{ old('settings[class]', $model->settings['class'] ?? null) }}\" maxlength=\"191\" @if (!$campaign->boosted()) disabled=\"disabled\" @endif class=\"w-full\" id=\"config[class]\" />\n            @includeWhen(!$campaign->boosted(), 'entities.pages.posts._boosted')\n        </x-forms.field>\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/forms/_main.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Post $model\n */\nuse App\\Models\\PostLayout;\n\n\nif (isset($model)) {\n    $hideLayout = 1;\n    if ($model->layout_id) {\n        $layoutHelper = true;\n    }\n}\n\n$options = $entity->postPositionOptions(!empty($model->position) ? $model->position : null);\n$last = array_key_last($options);\n\n$bragiName = $entity->isCharacter() ? $entity->name : null;\n?>\n<div\n    class=\"tab-pane pane-entry active\"\n    id=\"form-entry\"\n    x-data=\"{ layout: '{{ old('layout_id', $source->layout_id ?? $model->layout_id ?? '') }}' }\"\n>\n    <x-grid type=\"1/1\">\n        @if (isset($layoutOptions))\n            <x-forms.field field=\"layout\" label=\"{{ __('posts.fields.layout') }}\">\n                <x-forms.select name=\"layout_id\" :options=\"$layoutOptions\" :selected=\"$source->layout_id ?? $model->layout_id ?? null\"  id=\"post-layout-selector\" x-model=\"layout\" :disabled=\"$disabledLayoutOptions\" />\n\n                @if (!$campaign->superboosted())\n                    <x-helper>\n                        <p class=\"text-xs\">\n                            <x-icon class=\"fa-regular fa-question-circle\"></x-icon>\n                            {{ __('post_layouts.premium') }}\n                            <a\n                                href=\"#\"\n                                data-toggle=\"dialog\"\n                                data-url=\"{{ route('posts.layouts', [$campaign, $entity]) }}\">\n                                {{ __('general.learn-more') }}\n                            </a>\n                        </p>\n                    </x-helper>\n                @endif\n            </x-forms.field>\n        @endif\n\n        @if (isset($layoutHelper))\n            @php $helper = __('post_layouts.helper', [\n        'subpage' => '<span class=\"font-bold\">' . $model->layout->name() . '</span>',\n        'name' => $entity->name\n        ]); @endphp\n            <x-forms.field field=\"layout\" label=\"{{ __('posts.fields.layout') }}\" :helper=\"$helper\">\n\n            </x-forms.field>\n        @endif\n\n        <x-forms.field field=\"entry\" id=\"field-entry\" :hidden=\"isset($layoutHelper)\" x-show=\"!layout\" :label=\"__('fields.description.label')\">\n            @include('cruds.fields.entry', ['model' => $model ?? null])\n        </x-forms.field>\n\n        <x-grid>\n            <x-forms.field field=\"location\" id=\"field-location\" :hidden=\"isset($layoutHelper)\" x-show=\"!layout\">\n                @include('cruds.fields.location', ['from' => null])\n            </x-forms.field>\n            @if (isset($model))\n                @include('cruds.forms._calendar', ['post' => $model])\n            @else\n                @include('cruds.forms._calendar')\n            @endif\n\n            <x-forms.field field=\"tags\">\n                <input type=\"hidden\" name=\"save_tags\" value=\"1\" />\n                <x-forms.tags\n                    :campaign=\"$campaign\"\n                    :model=\"$model ?? null\">\n                </x-forms.tags>\n            </x-forms.field>\n\n            <x-forms.field field=\"position\" :label=\"__('crud.fields.position')\">\n                <x-forms.select name=\"position\" :options=\"$options\" :selected=\"(!empty($model->position) ? -9999 : $last)\" class=\"w-full\" />\n            </x-forms.field>\n\n        </x-grid>\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/forms/_permissions.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Post $post\n * @var \\App\\Models\\PostPermission $perm\n */\n\n$permissions = [\n    0 => __('crud.view'),\n    1 => __('crud.edit'),\n    2 => __('crud.permissions.actions.bulk.deny')\n];\n?>\n<div class=\"tab-pane\" id=\"form-permissions\">\n    <x-helper class=\"mb-4\">\n        <p>{!! __('articles.helpers.permissions', [\n            'visibility' => '<strong>' . __('crud.fields.visibility') . '</strong>'\n        ]) !!}\n        </p>\n        <x-slot name=\"docs\">/features/articles.html#permissions</x-slot>\n    </x-helper>\n    <div class=\"max-w-4xl flex flex-col gap-2\">\n        @if(!empty($model))\n            @foreach ($model->permissions()->onlyRoles()->with('role')->get() as $perm)\n                <x-grid class=\"perm-row\">\n                    <div class=\"join\">\n                        <span class=\"join-item flex items-center p-2\">\n                            <x-icon class=\"fa-regular fa-users\" />\n                        </span>\n                        <input type=\"text\" value=\"{!! $perm->role->name !!}\" disabled=\"disabled\" class=\"\" />\n                    </div>\n\n                    <div class=\"flex items-center gap-2\">\n                        <x-forms.select name=\"perm_role_perm[]\" :options=\"$permissions\" :selected=\"$perm->permission\" class=\"grow\" />\n                        <a role=\"button\" class=\"btn2 btn-error btn-sm btn-outline post-delete-perm\">\n                            <x-icon class=\"trash\" />\n                            <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                        </a>\n                    </div>\n                    <input type=\"hidden\" name=\"perm_role[]\" value=\"{{ $perm->role_id }}\" />\n                </x-grid>\n            @endforeach\n            @foreach ($model->permissions()->onlyUsers()->with('user')->get() as $perm)\n                <x-grid class=\"perm-row\">\n                    <div class=\"join\">\n                        <span class=\"join-item flex items-center p-2\">\n                            <x-icon class=\"fa-regular fa-user\" />\n                        </span>\n                        <input type=\"text\" value=\"{!! $perm->user->name !!}\" disabled=\"disabled\" class=\"w-full\" />\n                    </div>\n\n                    <div class=\"flex items-center gap-2\">\n                        <x-forms.select name=\"perm_user_perm[]\" :options=\"$permissions\" :selected=\"$perm->permission\" class=\"grow\" />\n\n                        <a role=\"button\" class=\"btn2 btn-error btn-sm btn-outline post-delete-perm\">\n                            <x-icon class=\"trash\" />\n                        </a>\n                    </div>\n                    <input type=\"hidden\" name=\"perm_user[]\" value=\"{{ $perm->user_id }}\" />\n                </x-grid>\n            @endforeach\n        @endif\n        <div id=\"post-perm-target\" class=\"\"></div>\n    </div>\n    <div class=\"join\">\n        <a href=\"#\" class=\"join-item btn2 btn-sm btn-outline\" data-toggle=\"dialog\" data-target=\"post-new-user\">\n            <x-icon class=\"fa-regular fa-user\" />\n            {{ __('posts.permissions.actions.members') }}\n        </a>\n        <a href=\"#\" class=\"join-item btn2 btn-sm btn-outline\" data-toggle=\"dialog\" data-target=\"post-new-role\">\n            <x-icon class=\"fa-regular fa-users\" />\n            {{ __('posts.permissions.actions.roles') }}\n        </a>\n    </div>\n    <input type=\"hidden\" name=\"permissions\" value=\"1\" />\n</div>\n\n@section('modals')\n    @parent\n    <x-dialog id=\"post-new-user\" :title=\"__('entities/notes.show.advanced')\" footer=\"entities.pages.posts.dialogs._user-footer\">\n        <x-grid type=\"1/1\">\n            <x-helper>\n                <p>{{ __('posts.permissions.helpers.members') }}</p>\n            </x-helper>\n            <x-forms.field field=\"user\" :label=\"__('campaigns.roles.members')\">\n                @include('components.form.user', ['options' => [\n                    'dropdownParent' => '#post-new-user',\n                    'multiple' => true\n                ]])\n            </x-forms.field>\n        </x-grid>\n    </x-dialog>\n    <x-dialog id=\"post-new-role\" :title=\"__('entities/notes.show.advanced')\" footer=\"entities.pages.posts.dialogs._role-footer\">\n        <x-grid type=\"1/1\">\n            <x-helper>\n                <p>{{ __('posts.permissions.helpers.roles') }}</p>\n            </x-helper>\n            <x-forms.field field=\"user\" :label=\"__('crud.permissions.fields.role')\">\n                @include('components.form.role', ['options' => [\n                    'dropdownParent' => '#post-new-role',\n                    'multiple' => true,\n                ]])\n            </x-forms.field>\n        </x-grid>\n    </x-dialog>\n\n    <div class=\"hidden\" id=\"post-perm-templates\">\n        <x-grid id=\"post-perm-user-template\" class=\"perm-row\">\n            <div class=\"join\">\n                <span class=\"join-item flex items-center p-2\">\n                    <x-icon class=\"fa-regular fa-user\" />\n                </span>\n                <input type=\"text\" value=\"$SELECTEDNAME$\" disabled=\"disabled\" class=\"w-full join-item\" />\n            </div>\n\n            <div class=\"flex items-center gap-2\">\n                <x-forms.select name=\"perm_user_perm[]\" :options=\"$permissions\" class=\"grow\" />\n                <a role=\"button\" class=\"btn2 btn-error btn-sm btn-outline post-delete-perm\">\n                    <x-icon class=\"trash\" />\n                </a>\n            </div>\n            <input type=\"hidden\" name=\"perm_user[]\" value=\"$SELECTEDID$\" />\n        </x-grid>\n        <x-grid id=\"post-perm-role-template\" class=\"perm-row\">\n            <div class=\"join\">\n                <span class=\"join-item flex items-center p-2\">\n                    <x-icon class=\"fa-regular fa-users\" />\n                </span>\n                <input type=\"text\" value=\"$SELECTEDNAME$\" disabled=\"disabled\" class=\"w-full join-item\" />\n            </div>\n            <div class=\"flex items-center gap-2\">\n                <x-forms.select name=\"perm_role_perm[]\" :options=\"$permissions\" class=\"grow\" />\n                <a role=\"button\" class=\"btn2 btn-error btn-sm btn-outline post-delete-perm\">\n                    <x-icon class=\"trash\" />\n                </a>\n            </div>\n            <input type=\"hidden\" name=\"perm_role[]\" value=\"$SELECTEDID$\" />\n        </x-grid>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/posts/forms/_save-options.blade.php",
    "content": "<input id=\"submit-mode\" type=\"hidden\" value=\"true\"/>\n<div class=\"flex gap-2 items-center\">\n    @if(!empty($model) && $model->exists)\n        <x-button.delete-confirm target=\"#delete-post-form\" />\n    @endif\n    <div class=\"join\">\n        <button class=\"btn2 btn-primary join-item\" id=\"form-submit-main\" data-target=\"{{ isset($target) ? $target : null }}\">\n            <x-icon class=\"save\"></x-icon>\n            <span class=\"hidden md:inline\">{{ __('crud.save') }}</span>\n        </button>\n        <div class=\"dropdown\">\n            <button type=\"button\" class=\"btn2 btn-primary join-item\" data-dropdown aria-expanded=\"false\">\n                <x-icon class=\"fa-regular fa-caret-down\" />\n                <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n            </button>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" shortcut=\"Ctrl S\">\n                    {{ __('crud.save') }}\n                </x-dropdowns.item>\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'submit-new']\" shortcut=\"Ctrl Alt S\">\n                    {{ __('crud.save_and_new') }}\n                </x-dropdowns.item>\n                <x-dropdowns.item link=\"#\" css=\"form-submit-actions\" :data=\"['action' => 'submit-update']\" shortcut=\"Ctrl Shift S\">\n                    {{ __('crud.save_and_update') }}\n                </x-dropdowns.item>\n            </div>\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/entities/pages/posts/forms/_templates.blade.php",
    "content": "<?php /** @var \\App\\Models\\Post $template */?>\n<div class=\"tab-pane\" id=\"form-templates\">\n    <x-grid type=\"1/1\">\n        <x-helper>\n            <p>{{ __('posts/templates.helper') }}</p>\n        </x-helper>\n        <div class=\"flex flex-wrap items-center gap-2\">\n            @foreach ($templates as $template)\n                <div class=\"join\">\n                    <a href=\"{{ route('entities.posts.create', [$campaign, $entity, 'template' => $template->id]) }}\" class=\"btn2 btn-default btn-sm join-item\">\n                        <span>\n                            {!! $template->name !!}\n                        </span>\n                    </a>\n                    @can('post', [$template->entity, 'edit', $template])\n                    <a href=\"{{ route('entities.posts.edit', [$campaign, $template->entity, $template]) }}\" class=\"btn2 btn-default btn-sm join-item\" data-tooltip data-title=\"{{ __('posts/templates.tooltips.click-to-edit') }}\">\n                        <x-icon class=\"edit\"></x-icon>\n                    </a>\n                    @endcan\n                </div>\n            @endforeach\n\n            <x-learn-more url=\"/features/articles.html#templates\"></x-learn-more>\n        </div>\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/forms/_visibility.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Post $model\n * @var \\App\\Models\\Campaign $campaign\n */\nuse App\\Enums\\Visibility;\n\n$iconMap = [\n    Visibility::All->value => 'fa-regular fa-eye',\n    Visibility::Admin->value => 'fa-regular fa-lock',\n    Visibility::AdminSelf->value => 'fa-regular fa-user-lock',\n    Visibility::Self->value => 'fa-regular fa-user-secret',\n    Visibility::Member->value => 'fa-regular fa-users',\n];\n\n$visibilitySelected = (int) old('visibility_id', isset($model) && $model->exists\n    ? ($model->visibility_id instanceof Visibility ? $model->visibility_id->value : $model->visibility_id)\n    : $campaign->defaultVisibility()->value\n);\n\n// Locked: admin-only visibility edited by non-admin, or self/admin-self edited by non-creator\nif (isset($model) && $model->exists) {\n    $locked = false;\n    if ($model->visibility_id === Visibility::Admin && !auth()->user()->isAdmin()) {\n        $locked = true;\n    }\n    if (in_array($model->visibility_id, [Visibility::Self, Visibility::AdminSelf]) && $model->created_by != auth()->user()->id) {\n        $locked = true;\n    }\n    if ($locked) {\n        $lockedValue = $model->visibility_id instanceof Visibility ? $model->visibility_id->value : $model->visibility_id;\n        ?>\n        <input type=\"hidden\" name=\"visibility_id\" value=\"{{ $lockedValue }}\" />\n        <button class=\"btn2 btn-default opacity-50 cursor-not-allowed\" type=\"button\" disabled>\n            <i class=\"{{ $iconMap[$lockedValue] ?? 'fa-regular fa-eye' }}\" aria-hidden=\"true\"></i>\n            <span class=\"sr-only\">{{ __('visibilities.title') }}</span>\n        </button>\n        <?php return;\n    }\n}\n\n// Build options\nif (isset($model) && $model->exists) {\n    $visibilityOptions = $model->visibilityOptions();\n} else {\n    $visibilityOptions = [];\n    $visibilityOptions[Visibility::All->value] = __('crud.visibilities.all');\n    if (auth()->user()->isAdmin()) {\n        $visibilityOptions[Visibility::Admin->value] = __('crud.visibilities.admin');\n        $visibilityOptions[Visibility::Member->value] = __('crud.visibilities.members');\n    }\n    $visibilityOptions[Visibility::Self->value] = __('crud.visibilities.self');\n    $visibilityOptions[Visibility::AdminSelf->value] = __('crud.visibilities.admin-self');\n}\n?>\n<x-forms.visibility-picker-field\n    :campaign=\"$campaign\"\n    :entity-name=\"$entity->name\"\n    :options=\"$visibilityOptions\"\n    :selected=\"$visibilitySelected\"\n/>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/layouts/index.blade.php",
    "content": "<x-premium-cta :campaign=\"$campaign\" premium>\n    <x-slot name=\"title\">\n        <x-icon class=\"premium\"></x-icon>\n        {{ __('post_layouts.pitch.title') }}\n    </x-slot>\n    <p>{!! __('post_layouts.pitch.custom', ['entity' => $entity->name]) !!}</p>\n</x-premium-cta>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/logs/_logs.blade.php",
    "content": "<?php /** @var \\App\\Models\\EntityLog $log */ ?>\n<div class=\"entity-logs\">\n    <div class=\"flex flex-col gap-2 lg:gap-5\">\n        <x-form :action=\"['entities.posts.logs', $campaign, $entity, $post]\" method=\"GET\">\n            <div class=\"flex gap-2 justify-between\">\n                <div class=\"flex gap-2 items-center\">\n                    <input type=\"text\" name=\"q\"  class=\"grow\" value=\"{!! old('q', htmlentities($q)) !!}\" placeholder=\"{{ __('entities/logs.filters.keywords') }}\" />\n                    <x-forms.select name=\"action\" :options=\"$actions\" :selected=\"$action\" />\n                </div>\n                <button class=\"btn2 btn-primary btn-sm\">\n                    {{ __('crud.actions.apply') }}\n                </button>\n            </div>\n        </x-form>\n        @foreach ($logs as $log)\n            <div class=\"rounded p-4 shadow-xs bg-box entity-log flex flex-col gap-2\" x-data=\"{ opened: @if (!$expanded) false @else true @endif }\">\n                <div class=\"log-title flex gap-2\">\n                    <div class=\"grow font-extrabold action\">\n                        {!! __('entities/logs.actions.' . $log->actionCode()) !!}\n                        - {!! $post->name !!}\n                    </div>\n                    <div class=\"flex-0\">\n                        <span data-title=\"{{ $log->created_at }} UTC\" data-toggle=\"tooltip\" class=\"text-neutral-content\">\n                            {{ $log->created_at->diffForHumans() }}\n                        </span>\n                    </div>\n                </div>\n                <div class=\"flex gap-2 justify-between\">\n                    <div class=\"log-author\">\n                        @if ($log->user)\n                            <x-users.link :user=\"$log->user\" />\n                        @else\n                            <span class=\"text-italic unknown-author\">\n                                {{  __('crud.history.unknown') }}\n                            </span>\n                        @endif\n\n                        @if ($log->impersonator)\n                            <span class=\"impersonator\">\n                                ({{ __('entities/logs.impersonated', ['name' => $log->impersonator->name]) }})\n                            </span>\n                        @endif\n                    </div>\n                    <div class=\"\">\n                        @if ($campaign->superboosted() && !empty($log->changes))\n                            <a @click=\"opened = !opened\" class=\"btn2 btn-xs btn-outline\">\n                                <x-icon class=\"fa-regular fa-eye\" />\n                                {{ __('entities/logs.actions.reveal') }}\n                            </a>\n                        @elseif (!$campaign->superboosted())\n                            <a @click=\"opened = !opened\" class=\"btn2 btn-sm btn-outline\">\n                                <x-icon class=\"fa-regular fa-eye\" />\n                                {{ __('entities/logs.actions.reveal') }}\n                            </a>\n                        @endif\n                    </div>\n                </div>\n                <div class=\"log-cta\" x-show=\"opened\" id=\"log-cta-{{ $log->id }}\" x-cloak>\n                    @if ($campaign->superboosted() && !empty($log->changes))\n                        <p class=\"text-neutral-content\">{{ __('history.helpers.changes') }}</p>\n                        <ul>\n                            @foreach ($log->changes as $attribute => $value)\n                                @if (is_array($value)) @continue @endif\n                                <li>\n                                    <span class=\"log-field\">\n                                        {!! $log->attributeKey($transKey, $attribute) !!}@if (!empty($value) || $log->isBoolean($attribute)):@endif\n                                    </span>\n                                    <span class=\"log-value break-all\">\n                                                @if ($log->isBoolean($attribute))\n                                            @if ($value) {{ __('general.yes') }} @else {{ __('general.no') }} @endif\n                                        @elseif (!empty($value))\n                                            {!! $value !!}\n                                        @endif\n                                            </span>\n                                </li>\n                            @endforeach\n                        </ul>\n                    @elseif (!$campaign->superboosted())\n                        <div class=\"flex flex-col gap-2\">\n                            <x-helper>\n                                <p>\n                                    <x-icon class=\"premium\" />\n                                    {!! __('entities/logs.call-to-action', ['amount' => config('entities.logs')]) !!}\n                                </p>\n                            </x-helper>\n                            @can('boost', auth()->user())\n                                <a href=\"{{ route('settings.premium', ['campaign' => $campaign]) }}\" class=\"btn2 bg-boost text-white\">\n                                    {!! __('settings/premium.actions.unlock', ['campaign' => $campaign->name]) !!}\n                                </a>\n                            @else\n                                <a href=\"{{ \\App\\Facades\\Domain::toFront('premium')  }}\" class=\"btn2 bg-boost text-white\">\n                                    {!! __('callouts.premium.learn-more') !!}\n                                </a>\n                            @endif\n                        </div>\n                    @endif\n                </div>\n            </div>\n        @endforeach\n\n        @if ($logs->hasPages())\n            {{ $logs->onEachSide(0)->links() }}\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/logs/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/logs.show.title', ['name' => $entity->name]),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-logs'\n])\n@include('entities.components.og')\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'logs',\n        'view' => 'entities.pages.posts.logs._logs',\n        'entity' => $entity,\n    ])\n\n\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/posts/move/form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('posts.move.helper', ['name' => $post->name]) !!}</p>\n    </x-helper>\n    <x-forms.field field=\"entity\" :label=\"__('entities/notes.move.entity')\" required>\n        <select name=\"entity\" class=\" select2\" data-url=\"{{ route('search.entities-with-relations', $campaign) }}\" data-allow-clear=\"false\" data-allow-new=\"false\" data-placeholder=\"{{ __('entities/notes.move.description') }}\"></select>\n    </x-forms.field>\n\n    <x-forms.field field=\"copy\" css=\"form-check\" :label=\"__('entities/notes.move.copy_title')\">\n        <x-checkbox :text=\"__('posts.move.copy.helper', ['name' => $entity->name])\">\n            <input type=\"checkbox\" name=\"copy\" value=\"1\" @if (old('copy', true)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/entities/pages/posts/move/index.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('posts.move.title'),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('crud.actions.move'),\n    ],\n    'entity' => null,\n])\n\n@section('content')\n    @include('partials.errors')\n    <x-form :action=\"['posts.move-process', $campaign, $entity->id, $post->id]\">\n        @include('partials.forms.form', [\n            'title' => __('posts.move.title'),\n            'content' => 'entities.pages.posts.move.form',\n            'submit' => auth()->check() && auth()->user()->can('update', $entity) ? __('entities/move.actions.transfer') : __('entities/move.actions.copy'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/posts/show.blade.php",
    "content": "@includeWhen($post->layout_id && $campaign->superboosted(), 'entities.components.posts.custom')\n@includeWhen(!$post->layout_id, 'entities.components.posts.standard')\n"
  },
  {
    "path": "resources/views/entities/pages/print/_abilities.blade.php",
    "content": "@inject('abilities', 'App\\Services\\Abilities\\AbilityService')\n@php $entityAbilities = $abilities->campaign($campaign)->entity($entity)->get() @endphp\n\n<div class=\"print-box-abilities\">\n\n    <h2>{{ __('entities.abilities') }}</h2>\n\n    @foreach ($entityAbilities['groups'] as $parent)\n        <h3 class=\"box-title text-xl\">{{ $parent['name'] }}</h3>\n        <div class=\"parent-ability parent-ability-{{ $parent['id'] }}\">\n            @foreach ($parent['abilities'] as $ability)\n                <div class=\"ability ability-{{ $ability['ability_id'] }}\">\n                    <h3 class=\"text-xl\">\n                        <strong>{{ $ability['name'] }}</strong>\n                        @if ($ability['type']) - <i>{{ $ability['type'] }}</i>@endif\n                    </h3>\n\n                    <x-box >\n                        {!! $ability['entry'] !!}\n\n                        @if ($ability['note'])\n                            <x-helper>\n                                <p>{!! $ability['note'] !!}</p>\n                            </x-helper>\n                        @endif\n\n                        @if(!empty($ability['charges']))\n                            <div class=\"ability-charges\">\n                            @for ($i = 1; $i <= $ability['charges']; $i++)\n                                @if ($i <= $ability['used_charges'])\n                                [ x ]\n                                @else\n                                [ &nbsp; ]\n                                @endif\n                            @endfor\n                            </div>\n                        @endif\n                    </x-box>\n                </div>\n            @endforeach\n            </div>\n        </div>\n    @endforeach\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/print/_attributes.blade.php",
    "content": "<div class=\"print-box-attributes\">\n\n    <h2>{{ __('entries/tabs.properties') }}</h2>\n    @include('entities.pages.attributes.render', [\n        'attributes' => $entity\n            ->allRelationships()\n            ->get(),\n         'mode' => 'table'\n    ])\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/print/_inventory.blade.php",
    "content": "<div class=\"print-box-inventory\">\n\n    <h2>{{ __('crud.tabs.inventory') }}</h2>\n    @include('entities.pages.inventory._inventory', [\n    'inventory' =>\n            $entity->inventories()\n            ->with(['entity', 'item', 'item.entity'])\n            ->has('entity')\n            ->get()\n            ->sortBy(function($model, $key) {\n                return !empty($model->position) ? $model->position : 'zzzz' . $model->itemName();\n            })\n])\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/print/_relations.blade.php",
    "content": "@php\nDatagrid::layout(\\App\\Renderers\\Layouts\\Entity\\Relation::class)\n    ->route('entities.relations_table', [$campaign, $entity, 'mode' => 'table']);\n\n$rows = $entity\n    ->allRelationships()\n    ->sort(request()->only(['o', 'k']))\n    ->paginate()\n    ->withPath(route('entities.relations_table', [$campaign, $entity, 'mode' => 'table']));\n@endphp\n<div class=\"print-box-relations\">\n    <h2>{{ __('entries/tabs.relations') }}</h2>\n\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/print/print-bulk.blade.php",
    "content": "<?php /** @var \\App\\Models\\MiscModel $model */?>\n\n@php\n    $headerImage = true;\n@endphp\n\n@extends('layouts.print', [\n    'title' => __('Print'),\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-story'\n])\n\n\n\n\n\n@section('content')\n\n    <button class=\"btn2 btn-lg btn-print btn-primary fixed top-5 right-5\" onclick=\"javascript:window.print();\">\n        <x-icon class=\"fa-regular fa-print\" />\n        {{ __('crud.actions.print') }}\n    </button>\n\n    @foreach ($entities as $model)\n        @php\n        if ($model instanceof \\App\\Models\\Entity) {\n            $entity = $model;\n        } else {\n            $entity = $model->entity;\n        }\n            $name = $entity->entityType->pluralCode()\n        @endphp\n\n        @if(view()->exists($entity->entityType->pluralCode() . '.show'))\n            @include($entity->entityType->pluralCode() . '.show')\n        @else\n            @include('cruds.overview')\n        @endif\n        @includeIf('entities.pages.profile._' . $entity->entityType->code)\n        @includeIf($entity->entityType->pluralCode() . '._print')\n        @includeWhen($entity->abilities->count() > 0, 'entities.pages.print._abilities')\n        @includeWhen($entity->inventories->count() > 0, 'entities.pages.print._inventory')\n        @includeWhen($entity->relationships->count() > 0, 'entities.pages.print._relations')\n        @includeWhen($entity->attributes->count() > 0 && !$entity->isAttributeTemplate(), 'entities.pages.print._attributes')\n        <div class=\"pagebreak\"></div>\n    @endforeach\n\n\n\n@endsection\n\n\n\n@section('styles')\n    @parent\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/print/print.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Entity $entity\n */?>\n\n@php\n    $headerImage = true;\n@endphp\n\n@extends('layouts.print', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-story'\n])\n\n@section('content')\n\n    <button class=\"btn2 btn-lg btn-print btn-primary fixed top-5 right-5\" onclick=\"javascript:window.print();\">\n        <x-icon class=\"fa-regular fa-print\" />\n        {{ __('crud.actions.print') }}\n    </button>\n\n    @if(view()->exists($name . '.show'))\n        @include($name . '.show')\n    @else\n        @include('cruds.overview')\n    @endif\n    @includeIf('entities.pages.profile._' . $entity->entityType->code)\n    @includeIf($name . '._print')\n    @includeWhen($entity->abilities->count() > 0, 'entities.pages.print._abilities')\n    @includeWhen($entity->inventories->count() > 0, 'entities.pages.print._inventory')\n    @includeWhen($entity->relationships->count() > 0, 'entities.pages.print._relations')\n    @includeWhen($entity->attributes->count() > 0 && !$entity->isAttributeTemplate(), 'entities.pages.print._attributes')\n\n@endsection\n\n\n\n@section('styles')\n    @parent\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/_events.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\EntityEvent $event\n * @var \\App\\Models\\EntityEvent $birth\n * @var \\App\\Models\\EntityEvent $death\n * @var \\App\\Models\\EntityEvent[] $elapsed\n * @var \\App\\Models\\Entity $entity\n */\n$elapsed = $entity->elapsedEvents;\n\n// Prepare birth and death events\n$distinctCalendars = [];\n$birth = null;\n$death = null;\nforeach ($elapsed as $event) {\n    if (empty($event->calendar) || $event->isCalendarDate()) {\n        continue;\n    }\n    if ($event->isBirth() || $event->isFounded()) {\n        $distinctCalendars[$event->calendar_id]['birth'] = $event;\n    } elseif ($event->isDeath()) {\n        if (!isset($distinctCalendars[$event->calendar_id]['death'])) {\n            $distinctCalendars[$event->calendar_id]['death'] = $event;\n            continue;\n        }\n\n        // Already have a death? Take the new one if it's older\n        $older = false;\n        /** @var \\App\\Models\\EntityEvent $previous */\n        $previous = $distinctCalendars[$event->calendar_id]['death'];\n        if ($previous->year < $event->year) {\n            $older = true;\n        } elseif ($previous->year == $event->year) {\n            if ($previous->month < $event->month) {\n                $older = true;\n            } elseif ($previous->month == $event->month) {\n                if ($previous->day < $event->day) {\n                    $older = true;\n                }\n            }\n        }\n\n        if ($older) {\n            $distinctCalendars[$event->calendar_id]['death'] = $event;\n        }\n    }\n}\n?>\n@foreach ($distinctCalendars as $calendarId => $calendarEvents)\n@php $birth = $calendarEvents['birth'] ?? null; $death = $calendarEvents['death'] ?? null; @endphp\n@if (!empty($birth) && !empty($death))\n| {{ __('characters.fields.life') }} | {{ $birth->readableDate() }} &#10013; {{ $death->readableDate() }} ({{ $birth->calcElapsed($death) }}) |\n@elseif (!empty($birth))\n@php $yearsAgo = $birth->calcElapsed() @endphp\n@if ($birth->isBirth())\n| {{ __('entities/events.types.birth') }} | {{ $birth->readableDate() }} ({{ $event->isBirth() ? $yearsAgo : trans_choice('entities/events.years-ago', $yearsAgo, ['count' => $yearsAgo]) }}) |\n@else\n| {{ __('entities/events.types.founded') }} | {{ $birth->readableDate() }} ({{ $event->isBirth() ? $yearsAgo : trans_choice('entities/events.years-ago', $yearsAgo, ['count' => $yearsAgo]) }}) |\n@endif\n@elseif (!empty($death))\n| {{ __('entities/events.types.death') }} | {{ $death->readableDate() }} (&#10013;{{ $death->calcElapsed() }}) |\n@endif\n@endforeach\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/_location.blade.php",
    "content": "@if ($campaign->enabled('locations') && !empty($model->location))\n| {!! \\App\\Facades\\Module::singular(config('entities.ids.location'), __('entities.location')) !!} | {!! $model->location->name !!} |\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/_locations.blade.php",
    "content": "@if ($campaign->enabled('locations') && !$model->entity->locations->isEmpty())\n@php\n$existingLocations = [];\n$counter = 0;\n@endphp\n| {!! \\App\\Facades\\Module::plural(config('entities.ids.location'), __('entities.locations')) !!} | @foreach ($model->entity->locations as $location) @if(!empty($existingLocations[$location->id])) @continue @endif @php $existingLocations[$location->id] = true; @endphp {!! $location->name !!}@if ($counter < $model->entity->locations->count())@php $counter++; @endphp, @endif @endforeach |\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/_reminder.blade.php",
    "content": "@if ($entity->calendarReminder())\n| {{ __('crud.fields.calendar_date') }} | {{ $entity->calendarReminder()->readableDate() }} |\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/_type.blade.php",
    "content": "@if (!empty($model->type))\n@php\n$defaultOptions = [$campaign];\n@endphp\n| {{ __('crud.fields.type') }} | {{ $model->type }} |\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/abilities.blade.php",
    "content": "<?php /** @var \\App\\Models\\Ability $model */?>\n@if (!empty($model->charges))\n| {{ __('abilities.fields.charges') }} | {{ $model->charges }} |\n@endif\n@include('entities.pages.print.profile._type')"
  },
  {
    "path": "resources/views/entities/pages/print/profile/attribute_templates.blade.php",
    "content": "<?php /** @var \\App\\Models\\AttributeTemplate $model */?>\n@if (!empty($model->attributeTemplate))\n| {{ __('crud.fields.parent') }} | {!! $model->attributeTemplate->name !!} |\n@endif\n@if (!empty($model->entityType))\n| {{ __('attribute_templates.fields.auto_apply') }} | {!! $model->entityType->name() !!} |\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/characters.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Character $model\n * @var \\App\\Models\\Entity $entity\n */?>\n@if ($campaign->enabled('families') && !$model->characterFamilies->isEmpty())\n@php\n$existingFamilies = [];\n$counter = 0;\n@endphp\n| {!! \\App\\Facades\\Module::singular(config('entities.ids.family'), __('entities.families')) !!} | @foreach ($model->characterFamilies as $family) @if(!empty($existingFamilies[$family->family_id])) @continue @endif @php $existingRaces[$family->family_id] = true; @endphp {!! $family->family->name !!}@if ($counter < $model->characterFamilies->count() - 1)@php $counter++; @endphp, @endif @endforeach |\n@endif\n@if (!$model->characterRaces->isEmpty() || $model->hasAge())\n@if (!$model->characterRaces->isEmpty() && !$model->hasAge())\n@php\n$existingRaces = [];\n$counter = 0;\n@endphp\n| {!! \\App\\Facades\\Module::plural(config('entities.ids.race'), __('entities.races')) !!} | @foreach ($model->characterRaces as $race) @if(!empty($existingRaces[$race->race_id])) @continue @endif @php $existingRaces[$race->race_id] = true; @endphp {!! $race->race->name !!}@if ($counter < $model->characterRaces->count() - 1)@php $counter++; @endphp, @endif @endforeach |\n@elseif ($model->characterRaces->isEmpty() && $model->hasAge())\n| {{ __('characters.fields.age') }} | {{ $model->age }} |\n@else\n@php\n$existingRaces = [];\n$counter = 0;\n@endphp\n| {!! \\App\\Facades\\Module::plural(config('entities.ids.race'), __('entities.races')) !!} | @foreach ($model->characterRaces as $race) @if(!empty($existingRaces[$race->race_id])) @continue @endif @php $existingRaces[$race->race_id] = true; @endphp {!! $race->race->name !!}@if ($counter < $model->characterRaces->count() - 1)@php $counter++; @endphp, @endif @endforeach |\n| {{ __('characters.fields.age') }} | {{ $model->age }} |\n@endif\n@endif\n@if (!empty($model->sex) || !empty($model->pronouns))\n@if (!empty($model->sex))\n| {{ __('characters.fields.sex') }} | {{ $model->sex }} |\n@endif\n@if (!empty($model->pronouns))\n| {{ __('characters.fields.pronouns') }} | {{ $model->pronouns }} |\n@endif\n@endif\n@include('entities.pages.print.profile._events')\n@include('entities.pages.print.profile._type')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/conversations.blade.php",
    "content": "<?php /** @var \\App\\Models\\Conversation $model */?>\n| {{ __('conversations.fields.participants') }} | {{ __('conversations.targets.' . ($model->forCharacters() ? 'characters' : 'members')) }} |\n@include('entities.pages.print.profile._type')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/creatures.blade.php",
    "content": "<?php /** @var \\App\\Models\\Creature $model */?>\n@include('entities.pages.print.profile._locations')\n@include('entities.pages.print.profile._type')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/dice_rolls.blade.php",
    "content": "<?php /** @var \\App\\Models\\DiceRoll $model */?>\n@if ($model->parameters)\n| {{ __('dice_rolls.fields.parameters') }} | {{ $model->parameters }} |\n@endif\n@if ($model->character)\n| {!! \\App\\Facades\\Module::singular(config('entities.ids.character'), __('entities.character')) !!} | {!! $model->character->name !!} |\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/events.blade.php",
    "content": "<?php /** @var \\App\\Models\\Event $model */?>\n@include('entities.pages.print.profile._locations')\n@include('entities.pages.print.profile._type')\n@include('entities.pages.print.profile._reminder')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/families.blade.php",
    "content": "<?php /** @var \\App\\Models\\Family $model */?>\n@if (!empty($model->family))\n| {!! \\App\\Facades\\Module::singular(config('entities.ids.family'), __('entities.family')) !!} | {!! $model->family->name !!} |\n@endif\n@include('entities.pages.print.profile._type')\n@include('entities.pages.print.profile._events')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/items.blade.php",
    "content": "<?php /** @var \\App\\Models\\Item $model */?>\n@if ($model->price)\n{{ __('items.fields.price') }} | {{ $model->price }} |\n@endif\n@if ($model->size)\n| {{ __('items.fields.size') }} | {{ $model->size }} |\n@endif\n@if ($model->weight)\n| {{ __('items.fields.weight') }} | {{ $model->weight }} |\n@endif\n@include('entities.components.profile._location')\n@if ($model->itemCreators->isNotEmpty())\n| {{ __('items.fields.creators') }} | @foreach ($model->itemCreators as $itemCreator){!! $itemCreator->creator->name !!}@if (!$loop->last), @endif @endforeach |\n@endif\n@include('entities.pages.print.profile._type')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/journals.blade.php",
    "content": "<?php /** @var \\App\\Models\\Journal $model */?>\n@include('entities.components.profile._location')\n@if ($model->date)\n| {{ __('journals.fields.date') }} | <x-date :date=\"$model->date\" string /> |\n@endif\n@if ($model->author && $model->author)\n| {{ __('journals.fields.author') }} | {!! $model->author->name !!} |\n@endif\n@include('entities.pages.print.profile._reminder')\n@include('entities.pages.print.profile._type')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/locations.blade.php",
    "content": "<?php /** @var \\App\\Models\\Location $model */?>\n@include('entities.pages.print.profile._type')\n@include('entities.pages.print.profile._events')\n@if (!$model->maps->isEmpty())\n@php $counter = 0; @endphp\n| {!! \\App\\Facades\\Module::singular(config('entities.ids.map'), __('entities.map')) !!} | @foreach ($model->maps as $map) {!! $map->name !!} @if ($counter > $model->maps->count() - 1) @php $counter++ @endphp, @endif @endforeach |\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/maps.blade.php",
    "content": "<?php /** @var \\App\\Models\\Map $model */?>\n@include('entities.pages.print.profile._type')"
  },
  {
    "path": "resources/views/entities/pages/print/profile/notes.blade.php",
    "content": "<?php /** @var \\App\\Models\\Note $model */?>\n@include('entities.pages.print.profile._type')"
  },
  {
    "path": "resources/views/entities/pages/print/profile/organisations.blade.php",
    "content": "<?php /** @var \\App\\Models\\Organisation $model */?>\n@include('entities.pages.print.profile._location')\n@include('entities.pages.print.profile._type')\n@include('entities.pages.print.profile._events')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/quests.blade.php",
    "content": "<?php /** @var \\App\\Models\\Quest $model */?>\n@if (!empty($model->instigator))\n| {{ __('quests.fields.instigator') }} | {!! $model->instigator->name !!} |\n@endif\n@if (!empty($model->location))\n| {{ __('quests.fields.location') }} | {!! $model->location->name !!} |\n@endif\n@if ($model->date)\n| {{ __('journals.fields.date') }} | <x-date :date=\"$model->date\" string /> |\n@endif\n@include('entities.pages.print.profile._reminder')\n@include('entities.pages.print.profile._type')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/races.blade.php",
    "content": "<?php /** @var \\App\\Models\\Race $model */?>\n@include('entities.pages.print.profile._locations')\n@include('entities.pages.print.profile._type')\n"
  },
  {
    "path": "resources/views/entities/pages/print/profile/tags.blade.php",
    "content": "<?php /** @var \\App\\Models\\Tag $model */?>\n@if (!empty($model->colour))\n| {{ __('crud.fields.colour') }} | {{ $model->colour }} |\n@endif\n@include('entities.pages.print.profile._type')"
  },
  {
    "path": "resources/views/entities/pages/print/profile/timelines.blade.php",
    "content": "<?php /** @var \\App\\Models\\Timeline $model */?>\n@include('entities.pages.print.profile._type')"
  },
  {
    "path": "resources/views/entities/pages/privacy/_body.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignRole $role\n * @var \\App\\Models\\User $user\n * */?>\n<div\n    class=\"w-full\"\n    x-data=\"{ private: {{ $entity->is_private ? 1 : 0 }}, saving: false, status: '' }\"\n    x-init=\"$watch('private', value => {\n    if (saving) return;\n    saving = true;\n    status = '';\n    axios.post('{{ route('entities.quick-privacy.toggle', [$campaign, $entity]) }}', {\n                is_private: value\n            })\n            .then(response => {\n                saving = false;\n                status = response.data.status;\n            })\n            .catch(error => {\n                statusLabel = '';\n                status = '';\n                saving = false;\n            });\n    })\">\n\n    <x-grid type=\"1/1\">\n        <x-forms.field field=\"visibility\" :label=\"__('entities/permissions.toggle.label')\">\n            <div class=\"flex flex-col gap-2\">\n                <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-pointer hover:shadow-sm\">\n                    <input type=\"radio\" name=\"is_private\" id=\"visibility-private\" value=\"1\" class=\"mt-1\" @if ($entity->is_private) checked=\"checked\" @endif\" x-model=\"private\">\n                    <div class=\"flex flex-col gap-0 grow\">\n                        <label for=\"visibility-private\" class=\"w-full cursor-pointer\">\n                            {{ __('entities/permissions.toggle.private.title') }}\n                            <p class=\"text-xs text-neutral-content\">\n                                {{ __('entities/permissions.toggle.private.description', ['admin' => $campaign->adminRoleName()]) }}\n                            </p>\n                        </label>\n                    </div>\n                    <i class=\"fa-solid fa-spinner fa-spin text-neutral-content\" x-show=\"saving && private === '1'\" x-cloak aria-label=\"Saving...\"></i>\n                    <i class=\"fa-regular fa-check-double text-success\" x-show=\"status === true\" x-cloak aria-label=\"Saved\" data-title=\"{{ __('entities/permissions.quick.success.private', ['entity' => $entity->name]) }}\" data-toggle=\"tooltip\"></i>\n                </div>\n                <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-pointer hover:shadow-sm\">\n                    <input type=\"radio\" name=\"is_private\" id=\"visibility-public\" value=\"0\" class=\"mt-1\" @if (!$entity->is_private) checked=\"checked\" @endif\" x-model=\"private\">\n                    <div class=\"flex flex-col gap-0 grow\">\n                        <label for=\"visibility-public\" class=\"w-full cursor-pointer\">\n                            {{ __('entities/permissions.toggle.public.title') }}\n                            <p class=\"text-xs text-neutral-content\">\n                                {{ __('entities/permissions.toggle.public.description') }}\n                            </p>\n                        </label>\n                    </div>\n                    <i class=\"fa-solid fa-spinner fa-spin text-neutral-content\" x-show=\"saving && private === '0'\" x-cloak aria-label=\"Saving...\"></i>\n                    <i class=\"fa-regular fa-check-double text-success\" x-show=\"status === false\" x-cloak aria-label=\"Saved\" data-title=\"{{ __('entities/permissions.quick.success.public', ['entity' => $entity->name]) }}\" data-toggle=\"tooltip\"></i>\n                </div>\n            </div>\n        </x-forms.field>\n\n        <hr />\n\n        <div class=\"flex flex-col gap-1\">\n\n        <p class=\"\">\n            {{ __('entities/permissions.quick.viewable-by') }}\n        </p>\n        @if (!empty($visibility['roles']) || !empty($visibility['users']))\n            <div class=\"flex flex-wrap gap-2 items-center \" :class=\"{ 'line-through text-neutral-content': private === '1'}\">\n                @foreach ($visibility['roles'] as $role)\n                    <span>\n                        <x-icon class=\"fa-regular fa-user-group\" />\n                        @can('update', $role)\n                            <a href=\"{{ route('campaign_roles.edit', [$campaign, $role]) }}\" class=\"text-link\">\n                                {!! $role->name !!}\n                            </a>\n                        @else\n                            {!! $role->name !!}\n                        @endif\n                        @if ($role->isPublic() && $campaign->isPrivate())\n                            <x-icon class=\"fa-regular fa-exclamation-triangle text-accent\" tooltip :title=\"__('campaigns.roles.permissions.helpers.not_public')\" />\n                        @endif\n                    </span>\n                @endforeach\n                @foreach ($visibility['users'] as $user)\n                    <div class=\"flex gap-1 items-center\">\n                        @if ($user->hasAvatar())\n                            <x-users.avatar :user=\"$user\" class=\"w-5 h-5\" />\n                        @else\n                            <x-icon class=\"fa-regular fa-user\" />\n                        @endif\n                        {!! $user->name !!}\n                    </div>\n                @endforeach\n            </div>\n        @else\n            <p class=\"text-neutral-content m-0\">\n                {{ __('entities/permissions.quick.empty-permissions') }}\n            </p>\n        @endif\n        </div>\n    </x-grid>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/privacy/_footer.blade.php",
    "content": "<button class=\"btn2 btn-outline\" data-url=\"{{ route('entities.permissions', [$campaign, $entity]) }}\" data-toggle=\"dialog\">\n    <x-icon class=\"fa-regular fa-wrench\" />\n    {{ __('entities/permissions.quick.manage') }}\n</button>\n"
  },
  {
    "path": "resources/views/entities/pages/privacy/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n@include('partials.forms.form', [\n    'title' => __('entities/permissions.quick.title', ['name' => $entity->name]) ,\n    'content' => 'entities.pages.privacy._body',\n    'actions' => 'entities.pages.privacy._footer',\n])\n"
  },
  {
    "path": "resources/views/entities/pages/profile/_character.blade.php",
    "content": "<?php /** @var \\App\\Models\\Character $model */\nif ($model instanceof App\\Models\\Entity) {\n    $model = $model->character;\n}\n\n$appearances = $model->characterTraits()->appearance()->orderBy('default_order')->get();\n$traits = $model->characterTraits()->personality()->orderBy('default_order')->get();\n\n?>\n    <x-grid type=\"1/1\">\n        <x-box class=\"box-entity-profile flex flex-col gap-4\">\n            <div class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 2xl:grid-cols-6 gap-5\">\n                @if ($model->title)\n                    <p class=\"entity-character-title\">\n                        <b>{{ __('characters.fields.title') }}</b><br />\n                        {!! $model->title !!}\n                    </p>\n                @endif\n\n                @if ($entity->type)\n                    <p class=\"entity-type\">\n                        <b>{{ __('crud.fields.type') }}</b><br />\n                        {!! $entity->type !!}\n                    </p>\n                @endif\n\n                @if ($campaign->enabled('races') && !$model->characterRaces->isEmpty())\n                    @php $existingRaces = []; @endphp\n                    @foreach ($model->characterRaces as $race)\n                        @if(!empty($existingRaces[$race->race_id]))\n                            @continue\n                        @endif\n                        @php $existingRaces[$race->race_id] = true; @endphp\n                    <p class=\"entity-race\" data-foreign=\"{{ $race->race_id }}\">\n                        <b>{{ \\App\\Facades\\Module::plural(config('entities.ids.race'), __('entities.races')) }}</b><br />\n\n                        <x-entity-link\n                            :entity=\"$race->race->entity\"\n                            :campaign=\"$campaign\" />\n                    </p>\n                    @endforeach\n                @endif\n                @if ($campaign->enabled('families') && !$model->characterFamilies->isEmpty())\n                    @php $existingFamilies = []; @endphp\n                    @foreach ($model->characterFamilies as $family)\n                        @if(!empty($existingFamilies[$family->family_id]))\n                            @continue\n                        @endif\n                        @php $existingFamilies[$family->family_id] = true; @endphp\n                        <p class=\"entity-family\" data-foreign=\"{{ $family->family_id }}\">\n                            <b>{{ \\App\\Facades\\Module::plural(config('entities.ids.family'), __('entities.families')) }}</b><br />\n                            <x-entity-link\n                                :entity=\"$family->family->entity\"\n                                :campaign=\"$campaign\" />\n                        </p>\n                    @endforeach\n                @endif\n\n                @if ($model->age || $model->age === '0')\n                    <p class=\"entity-age\">\n                        <b>{{ __('characters.fields.age') }}</b><br />\n                        {{ $model->age }}\n                    </p>\n                @endif\n\n                @if ($model->sex)\n                    <p class=\"entity-gender\">\n                        <b>{{ __('characters.fields.sex') }}</b><br />\n                        {!! $model->sex !!}\n                    </p>\n                @endif\n\n                @if ($model->pronouns)\n                    <p class=\"entity-pronouns\">\n                        <b>{{ __('characters.fields.pronouns') }}</b><br />\n                        {!! $model->pronouns !!}\n                    </p>\n                @endif\n            </div>\n\n            <ul class=\"m-0 p-0\">\n                @include('entities.components.elasped_events')\n            </ul>\n        </x-box>\n\n        @if (count($appearances) > 0)\n            <div class=\"character-appearances flex flex-col gap-4 md:gap-6\">\n                <h4 class=\"text-lg\">{{ __('characters.sections.appearance') }}</h4>\n                <x-box class=\"character-appearances grid grid-cols-2 gap-5\">\n                    @foreach ($appearances as $trait)\n                        <p class=\"entity-appearance-{{ \\Illuminate\\Support\\Str::slug($trait->name) }}\">\n                            <b>{{ $trait->name }}</b><br />\n                            {{ $trait->entry }}\n                        </p>\n                    @endforeach\n                </x-box>\n            </div>\n        @endif\n\n        @if (auth()->check() && auth()->user()->can('personality', $model) && count($traits) > 0)\n\n            <div class=\"character-personalities flex flex-col gap-4 md:gap-6\">\n                <div class=\"flex items-center justify-between gap-2\">\n                    <h4 class=\"text-lg\">{{ __('characters.sections.personality') }}</h4>\n                    @can('personality', $model)\n                        @if (!$model->is_personality_visible)\n                            <x-icon class=\"lock\" tooltip :title=\"__('characters.hints.personality_not_visible')\" />\n                        @else\n                            <x-icon class=\"fa-regular fa-lock-open\" tooltip :title=\"__('characters.hints.personality_visible')\" />\n                        @endif\n                    @endif\n                </div>\n                <x-box class=\"flex flex-col gap-5\">\n\n                @foreach ($traits as $trait)\n                    <p class=\"entity-trait-{{ \\Illuminate\\Support\\Str::slug($trait->name) }}\">\n                        <b>{{ $trait->name }}</b><br />\n                        {!! nl2br(\\App\\Facades\\Mentions::mapAny($trait, 'entry')) !!}\n                    </p>\n                @endforeach\n            </x-box>\n        @endif\n    </x-grid>\n\n\n"
  },
  {
    "path": "resources/views/entities/pages/profile/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/profile.show.title', ['name' => $entity->name]),\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-profile'\n])\n\n@include('entities.components.og')\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        @can('update', $entity)\n            <a href=\"{{ $entity->url('edit') }}\" class=\"btn2 btn-sm\">\n                {{ __('entities/profile.actions.edit_profile') }}\n            </a>\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'profile',\n        'view' => 'entities.pages.profile._' . $entity->entityType->code,\n        'entity' => $entity,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/relations/_buttons.blade.php",
    "content": "@can('relation', $entity)\n    <a href=\"{{ route('entities.relations.create', [$campaign, $entity, 'mode' => $mode]) }}\" class=\"btn2 btn-sm\" data-toggle=\"dialog\" data-url=\"{{ route('entities.relations.create', [$campaign, $entity, 'mode' => $mode]) }}\">\n        <x-icon class=\"plus\" />\n        <span class=\"hidden md:inline\">\n            {{ __('entities.relation') }}\n        </span>\n    </a>\n@endcan\n"
  },
  {
    "path": "resources/views/entities/pages/relations/_form.blade.php",
    "content": "@empty($relation)<x-helper>\n    <p>{!! __('entities/relations.create.helper', ['name' => $entity->name]) !!}</p>\n</x-helper>@endif\n\n<x-grid xdata=\"{opened: {{ old('two_way', false) ? 'true' : 'false' }}}\">\n    <div class=\"col-span-2\">\n        @include('cruds.fields.target', ['target' => !empty($relation) ? $relation->target : null])\n    </div>\n\n    @include('cruds.fields.relation')\n\n    @include('cruds.fields.attitude', ['model' => $relation ?? null])\n\n@if(empty($relation) && (!isset($mirror) || $mirror == true))\n\n    @include('entities.pages.relations.fields.mirrored')\n\n@endif\n\n@if (!empty($relation) && !empty($relation->isMirrored()))\n    @include('entities.pages.relations.fields.unmirror')\n\n@endif\n\n    <hr class=\"col-span-2\" />\n\n    @include('cruds.fields.visibility_id', ['model' => isset($relation) ? $relation : null])\n\n    @include('cruds.fields.colour_picker', request()->ajax() ? ['dropdownParent' => '#primary-dialog', 'model' => $relation ?? null] : ['model' => $relation ?? null])\n\n    @include('cruds.fields.pinned', ['model' => $relation ?? null])\n</x-grid>\n@if (!empty($mode))\n    <input type=\"hidden\" name=\"mode\" value=\"{{ $mode }}\" />\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/relations/_map.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Relation $relation\n */\n\n$options = [\n    '' => __('entities/relations.options.relations'),\n    'only_relations' => __('entities/relations.options.only_relations'),\n    'related' => __('entities/relations.options.related'),\n    'mentions' => __('entities/relations.options.mentions'),\n];\n\n?>\n@if(!$campaign->boosted())\n    <x-premium-cta :campaign=\"$campaign\">\n        <p>{{ __('entities/relations.call-to-action') }}</p>\n    </x-premium-cta>\n    <?php return ?>\n@endif\n\n<x-form :action=\"['entities.relations.index', $campaign, $entity]\" method=\"GET\">\n    <div class=\"join w-full\">\n        <x-forms.select name=\"option\" :options=\"$options\" :selected=\"$option\" class=\"w-full join-item\" />\n        <input type=\"submit\" value=\"{{ __('entities/relations.options.show') }}\" class=\"btn2 btn-primary btn-sm join-item\" />\n    </div>\n    <input type=\"hidden\" name=\"mode\" value=\"map\" />\n</x-form>\n\n<x-box class=\"box-entity-relations box-entity-relations-explorer\">\n    <div class=\"text-center text-xg\" id=\"spinner\">\n        <x-icon class=\"load\" />\n    </div>\n    <div id=\"cy\" class=\"cy @isset($isPost) cy-post min-h-80 text-base-content bg-box @else min-h-screen bg-box text-base-content cy-map @endif hidden\" data-url=\"{{ route('entities.relations_map', [$campaign, $entity, 'option' => $option]) }}\"></div>\n</x-box>\n\n@section('scripts')\n    @parent\n    @vite('resources/js/relations.js')\n@endsection\n\n@section('styles')\n    @parent\n    @vite('resources/css/relations.css')\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/relations/_related.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Entity $connection\n * @var \\App\\Services\\Entity\\Connections\\RelatedService $connectionService\n */\n?>\n<h3 class=\"text-xl\">\n    {{ __('entities/relations.panels.related') }}\n</h3>\n<x-box class=\"box-entity-connections\" id=\"entity-related\" :padding=\"false\">\n    <div class=\"table-responsive\">\n        <table class=\"table table-hover\">\n            <thead>\n            <tr>\n                <th colspan=\"2\">\n                    @if(request()->get('order') == 'name' || !request()->has('order'))\n                        {{ __('fields.entry.label') }}\n                        <x-icon class=\"fa-regular fa-arrow-down\" />\n                    @else\n                        <a href=\"{{ route('entities.relations.index', [$campaign, $entity, 'mode' => 'table', '#entity-related', 'order' => 'name']) }}\" class=\"text-link\">\n                            {{ __('crud.fields.name') }}\n                        </a>\n                    @endif\n                </th>\n                <th>\n                    @if(request()->get('order') == 'type_id')\n                        {{ __('crud.fields.category') }}\n                        <x-icon class=\"fa-regular fa-arrow-down\" />\n                    @else\n                        <a href=\"{{ route('entities.relations.index', [$campaign, $entity, 'mode' => 'table', '#entity-related', 'order' => 'type_id']) }}\" class=\"text-link\">\n                            {{ __('crud.fields.category') }}\n                        </a>\n                    @endif\n                </th>\n                <th>{{ __('entities/relations.fields.role') }}</th>\n            </tr>\n            </thead>\n            <tbody>\n            @foreach ($connections as $connection)\n                <tr data-entity-id=\"{{ $connection->id }}\" data-entity-type=\"{{ $connection->entityType->code }}\">\n                    <td class=\"w-14\">\n                        <x-entities.thumbnail :entity=\"$connection\" :title=\"$connection->name\"></x-entities.thumbnail>\n                    </td>\n                    <td>\n                        <x-entity-link\n                            :entity=\"$connection\"\n                            :campaign=\"$campaign\" />\n\n                        @if ($connection->isMap() == 'map')\n                            @includeWhen($connection->map->explorable(), 'maps._explore-link', ['map' => $connection->map])\n                        @endif\n                    </td>\n                    <td>\n                        {{ $connection->entityType->name() }}\n                    </td>\n                    <td>\n                        {{ $connectionService->connectionsText($connection->id) }}\n                    </td>\n                </tr>\n            @endforeach\n            </tbody>\n        </table>\n    </div>\n    @if ($connections->hasPages())\n        <div class=\"text-right\">\n            {{ $connections->appends(['mode' => $mode, 'order' => request()->get('order')])->fragment('entity-connections')->onEachSide(0)->links() }}\n        </div>\n    @endif\n</x-box>\n"
  },
  {
    "path": "resources/views/entities/pages/relations/_tables.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Relation $relation\n */?>\n<h3 class=\"text-xl\">\n    {{ __('sidebar.relations') }}\n</h3>\n<x-box class=\"box-entity-relations box-entity-relations-table\" id=\"entity-relations-table\" :padding=\"$rows->count() === 0\">\n    @if ($rows->count() === 0)\n        <x-helper>\n            <p>{{ __('entities/relations.helpers.no_relations') }}</p>\n        </x-helper>\n        @can('relation', $entity)\n            <a href=\"{{ route('entities.relations.create', [$campaign, $entity, 'mode' => $mode]) }}\" class=\"btn2 btn-sm btn-outline\" data-toggle=\"dialog\" data-url=\"{{ route('entities.relations.create', [$campaign, $entity, 'mode' => $mode]) }}\">\n                <x-icon class=\"plus\" />\n                <span class=\"hidden md:inline\">\n                {{ __('entities.relation') }}\n            </span>\n            </a>\n        @endcan\n    @else\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @include('layouts.datagrid._table')\n        </div>\n    @endif\n</x-box>\n\n@includeWhen(!$connections->isEmpty(), 'entities.pages.relations._related')\n\n@section('modals')\n    @parent\n    <x-dialog id=\"edit-dialog\" :loading=\"true\" />\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms(), 'params' => []])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/relations/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/relations.create.new_title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.relations.index', [$campaign, $entity->id]), 'label' => __('entries/tabs.relations')],\n        __('crud.actions.new')\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.relations.store', $campaign, $entity->id]\">\n        @include('partials.forms.form', [\n                'title' => __('entities/relations.create.new_title', ['name' => $entity->name]),\n                'content' => 'entities.pages.relations._form',\n            ])\n\n        <input type=\"hidden\" name=\"entity_id\" value=\"{{ $entity->id }}\" />\n        <input type=\"hidden\" name=\"owner_id\" value=\"{{ $entity->id }}\" />\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/relations/fields/mirrored.blade.php",
    "content": "<x-forms.field\n    field=\"field-two-way\">\n    <label\n        for=\"two_way\"\n        class=\"text-xs font-medium opacity-80\">\n        {{ __('entities/relations.fields.link') }}\n    </label>\n    <label class=\"!flex gap-2\">\n                <span>\n                    <input\n                        type=\"checkbox\"\n                        name=\"two_way\"\n                        id=\"two_way\"\n                        value=\"1\" @if (old('two_way', false)) checked=\"checked\" @endif\n                        @click=\"opened = !opened\" />\n                </span>\n        <div class=\"text-neutral-content\">\n            {{ __('entities/relations.helpers.link') }}\n        </div>\n    </label>\n</x-forms.field>\n\n<div>\n    <div x-show=\"opened\">\n        <x-forms.field\n            field=\"target-relation\"\n            :label=\"__('entities/relations.fields.mirror_relation')\"\n            :helper=\"__('entities/relations.helpers.mirror_relation')\">\n            <input type=\"text\" name=\"target_relation\" value=\"{{ old('target_relation', $relation->target_relation ?? null) }}\" maxlength=\"191\" class=\"w-full\" aria-label=\"{{ __('entities/relations.placeholders.role') }}\" placeholder=\"{{ __('entities/relations.placeholders.role') }}\" />\n        </x-forms.field>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/relations/fields/unmirror.blade.php",
    "content": "<div class=\"col-span-2 bg-base-200 rounded-2xl p-4 border-left-\">\n    <h4 class=\"text-md\">{{ __('entities/relations.linked.label') }}</h4>\n    <p class=\"mb-4 text-xs\">{!! __('entities/relations.linked.helper', [\n        'link' => '<a href=\"' . $relation->target->url() . '\" data-toggle=\"tooltip-ajax\" data-id=\"' . $relation->target_id . '\" data-url=\"' . route('entities.tooltip', [$campaign, $relation->target->id]) . \"\\\" class=\\\"text-link\\\">\" . $relation->target->name . '</a>'\n        ]) !!}</p>\n    <x-forms.field field=\"unmirror\" :helper=\"__('entities/relations.linked.unmirror-helper')\">\n        <input type=\"hidden\" name=\"unmirror\" value=\"0\" />\n        <x-checkbox\n            :text=\"__('entities/relations.linked.break')\">\n            <input type=\"checkbox\" name=\"unmirror\" value=\"1\" @if (old('unmirror', false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/relations/full-form/_entry.blade.php",
    "content": "<x-grid xdata=\"{opened: false}\">\n    @include('cruds.fields.owner', ['owner' => !empty($relation) ? $relation->owner : null])\n    @include('cruds.fields.target', ['target' => !empty($relation) ? $relation->target : null])\n\n    @include('cruds.fields.relation')\n\n    @include('cruds.fields.attitude', ['model' => $relation ?? null])\n\n    @if(empty($relation) && (!isset($mirror) || $mirror == true))\n        @include('entities.pages.relations.fields.mirrored')\n    @endif\n\n    @if (!empty($relation) && !empty($relation->isMirrored()))\n        @include('entities.pages.relations.fields.unmirror')\n    @endif\n\n    <hr class=\"col-span-2\" />\n\n    @include('cruds.fields.visibility_id', ['model' => $relation ?? null])\n\n    @include('cruds.fields.colour_picker', request()->ajax() ? ['dropdownParent' => '#primary-dialog'] : [])\n\n    @include('cruds.fields.pinned')\n\n</x-grid>\n\n\n@if (!empty($mode))\n    <input type=\"hidden\" name=\"mode\" value=\"{{ $mode }}\" />\n@endif\n"
  },
  {
    "path": "resources/views/entities/pages/relations/full-form/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __($langKey . '.create.new_title'),\n    'breadcrumbs' => [\n        ['url' => Breadcrumb::campaign($campaign)->index($name), 'label' => __('entities.relations')],\n        __('crud.create'),\n    ],\n    'centered' => true,\n])\n\n\n@section('content')\n    @include('cruds.forms._errors')\n    <x-form files :action=\"['relations.store', $campaign]\" class=\"entity-form \" id=\"entity-form\" unload :direct=\"request()->get('from') === 'web'\">\n        @if(request()->get('from'))\n            <input type=\"hidden\" name=\"from\" value=\"{{ request()->get('from') }}\" />\n        @endif\n        <div class=\"nav-tabs-custom bg-base-100 p-4 rounded-xl flex flex-col gap-6 relative\">\n            <div class=\"flex gap-2 items-center justify-between sticky z-10 bg-base-100 top-12\">\n                <div class=\"overflow-x-auto\">\n                    <ul class=\"nav-tabs flex items-stretch w-full\" role=\"tablist\">\n                        <x-tab.tab target=\"entry\" :default=\"true\" :title=\"__('crud.tabs.overview')\"></x-tab.tab>\n                    </ul>\n                </div>\n                @include('cruds.fields.save', ['disableCancel' => true, 'target' => 'entity-form'])\n            </div>\n\n            <div class=\"tab-content\">\n                <div class=\"tab-pane {{ (request()->get('tab') == null ? ' active' : '') }}\" id=\"form-entry\">\n                    @include('entities.pages.relations.full-form._entry', ['source' => $source])\n                </div>\n            </div>\n        </div>\n    </x-form>\n@endsection\n\n@include('editors.editor')\n"
  },
  {
    "path": "resources/views/entities/pages/relations/full-form/update.blade.php",
    "content": "<?php /** @var \\App\\Models\\Relation $relation */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __($langKey . '.update.title', [\n        'source' => $relation->owner->name,\n        'target' => $relation->target->name,\n        ]),\n    'breadcrumbs' => [\n        ['url' => Breadcrumb::campaign($campaign)->index($name), 'label' => __('entities.relations')],\n        __('crud.update'),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    @include('cruds.forms._errors')\n    <x-form files method=\"PATCH\" :action=\"['relations.update', $campaign, $relation]\" class=\"entity-form\" id=\"entity-form\">\n        <div class=\"nav-tabs-custom bg-base-100 p-4 rounded-xl flex flex-col gap-6 relative\">\n            <div class=\"flex gap-2 items-center justify-between sticky z-10 bg-base-100 top-12\">\n                <div class=\"overflow-x-auto\">\n                    <ul class=\"nav-tabs flex items-stretch w-full\" role=\"tablist\">\n                        <x-tab.tab target=\"entry\" :default=\"true\" :title=\"__('crud.tabs.overview')\"></x-tab.tab>\n                    </ul>\n                </div>\n                <div class=\"flex gap-2 items-center\">\n                    @if(!empty($model) && $model->exists)\n                        <x-button.delete-confirm target=\"#delete-relation-form\" />\n                    @endif\n                    @include('cruds.fields.save', ['disableCancel' => true, 'target' => 'entity-form'])\n                </div>\n            </div>\n            <div class=\"tab-content\">\n                <div class=\"tab-pane {{ (request()->get('tab') == null ? ' active' : '') }}\" id=\"form-entry\">\n                    @include('entities.pages.relations.full-form._entry', ['source' => $source])\n                </div>\n            </div>\n        </div>\n    </x-form>\n\n    <form id=\"delete-relation-form\" method=\"POST\" action=\"{{ route('relations.destroy', [$campaign, $relation]) }}\" class=\"hidden\">\n        @csrf\n        @method('DELETE')\n    </form>\n@endsection\n\n@include('editors.editor')\n"
  },
  {
    "path": "resources/views/entities/pages/relations/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity\n */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' =>  __('entries/tabs.relations') . \" - {$entity->name} - {$campaign->name}\",\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-relations'\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        <x-learn-more url=\"features/connections.html\" />\n        @if ($mode == 'map' || (empty($mode) && $campaign->boosted()))\n            <a href=\"{{ route('entities.relations.index', [$campaign, $entity, 'mode' => 'table']) }}\" class=\"btn2 btn-sm\" data-toggle=\"tooltip\" data-title=\"{{ __('entities/relations.actions.mode-table') }}\">\n                <x-icon class=\"fa-regular fa-list-ul\" />\n            </a>\n        @else\n            <a href=\"{{ route('entities.relations.index', [$campaign, $entity, 'mode' => 'map']) }}\" class=\"btn2 btn-sm\" data-toggle=\"tooltip\" data-title=\"{{ __('entities/relations.actions.mode-map') }}\">\n                <x-icon class=\"map\" />\n            </a>\n        @endif\n        @include('entities.pages.relations._buttons')\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n\n\n@section('content')\n\n    @include('entities.pages.subpage', [\n        'active' => 'relations',\n        'view' => 'entities.pages.relations.render',\n        'entity' => $entity,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/relations/render.blade.php",
    "content": "\n@includeWhen($mode == 'map' || (empty($mode) && $campaign->boosted()), 'entities.pages.relations._map')\n@includeWhen($mode == 'table' || (empty($mode) && !$campaign->boosted()), 'entities.pages.relations._tables')\n"
  },
  {
    "path": "resources/views/entities/pages/relations/update.blade.php",
    "content": "<?php /** @var \\App\\Models\\Relation $relation */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/relations.update.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('entities.relations.index', [$campaign, $entity->id]), 'label' => __('entries/tabs.relations')],\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['entities.relations.update', $campaign, $entity->id, $relation]\" method=\"PATCH\" :direct=\"$from === 'web' ?? null\" class=\"p-4\">\n        @include('partials.forms.form', [\n            'title' => __('entities/relations.update.title', [\n                'source' => '<a href=\"' .$entity->url() . '\" class=\"text-link\">' . $entity->name . '</a>',\n                'target' => '<a href=\"' . $relation->target->url() . '\" class=\"text-link\">' . $relation->target->name . '</a>',\n                ]),\n            'content' => 'entities.pages.relations._form',\n            'deleteID' => '#delete-relation-' . $relation->id,\n        ])\n        @if(!empty($from))\n            <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" />\n        @endif\n        <input type=\"hidden\" name=\"owner_id\" value=\"{{ $entity->id }}\" />\n        <input type=\"hidden\" name=\"option\" value=\"{{ request()->get('option') }}\" />\n        <input type=\"hidden\" name=\"mode\" value=\"{{ request()->get('mode') }}\" />\n    </x-form>\n\n    <x-form method=\"DELETE\" :action=\"['entities.relations.destroy', 'campaign' => $campaign, 'entity' => $entity->id, 'relation' => $relation->id, 'mode' => request()->mode, 'option' => request()->option]\" id=\"delete-relation-{{ $relation->id }}\">\n    @if ($relation->isMirrored())<input type=\"hidden\" name=\"remove_mirrored\" value=\"1\" />@endif\n        @if (!empty($from)) <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" /> @endif\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/reminders/_list.blade.php",
    "content": "<x-tutorial code=\"events\" doc=\"https://docs.kanka.io/en/latest/features/reminders.html\">\n\n    <x-slot name=\"title\">\n        {!! __('onboarding/reminders.title') !!}\n    </x-slot>\n\n    <p>{!! __('onboarding/reminders.text', ['name' => $entity->name]) !!}</p>\n</x-tutorial>\n\n@if ($rows->count() > 0)\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n@endif\n\n@section('modals')\n    @parent\n    <x-dialog id=\"edit-dialog\" :loading=\"true\" />\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms(), 'params' => []])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/reminders/_post.blade.php",
    "content": "@php\n    $routeOptions = [\n        $campaign,\n        'entity' => $entity,\n        'init' => 1\n    ];\n    $routeOptions = Datagrid::initOptions($routeOptions);\n    $datagridOptions =\n        ['datagridUrl' => route('entities.reminders.index', $routeOptions)]\n    ;\n@endphp\n<div id=\"datagrid-parent\" class=\"table-responsive\">\n    @include('layouts.datagrid._table', $datagridOptions)\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/reminders/index.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Entity $entity */\n/** @var \\App\\Models\\EntityEvent $relation */\n?>\n@extends('layouts.app', [\n    'title' =>  __('crud.tabs.reminders') . \" - {$entity->name} - {$campaign->name}\",\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-reminders'\n])\n\n@include('entities.components.og')\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex flex-wrap gap-2 items-center justify-end\">\n        <x-learn-more url=\"features/reminders.html\" />\n        @can('reminders', $entity)\n            <a href=\"{{ route('entities.reminders.create', [$campaign, $entity, 'next' => 'entity.reminders']) }}\" id=\"entity-calendar-modal-add\"\n               class=\"btn2 btn-sm\" data-toggle=\"dialog\"\n               data-url=\"{{ route('entities.reminders.create', [$campaign, $entity, 'next' => 'entity.reminders']) }}\">\n                <x-icon class=\"plus\" /> {{ __('entities/events.show.actions.add') }}\n            </a>\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'reminders',\n        'view' => 'entities.pages.reminders._list',\n        'entity' => $entity,\n    ])\n@endsection\n\n"
  },
  {
    "path": "resources/views/entities/pages/share/setup.blade.php",
    "content": "@php\n    $shareTranslations = [\n        'status_hidden'          => __('entities/share.status.hidden'),\n        'helper_hidden'          => __('entities/share.helpers.hidden_explanation'),\n        'helper_hidden_unlisted' => __('entities/share.helpers.hidden_unlisted_explanation'),\n        'status_public'          => __('entities/share.status.public'),\n        'helper_public'          => __('entities/share.helpers.public_explanation'),\n        'status_unlisted'        => __('entities/share.status.unlisted'),\n        'helper_unlisted'        => __('entities/share.helpers.unlisted_explanation'),\n        'status_private'         => __('entities/share.status.private'),\n        'helper_private'         => __('entities/share.helpers.private_explanation'),\n        'warning_entity_permissions' => __('entities/share.helpers.entity_permissions_warning'),\n\n        'field_visibility_mode'  => __('entities/share.fields.visibility_mode'),\n        'option_entity_public'   => __('entities/share.options.make_entity_public', ['name' => $entity->name]),\n        'option_global_public'   => __('entities/share.options.make_all_public', ['module' => $entity->entityType->plural()]),\n\n        'field_campaign_access'  => __('entities/share.fields.campaign_access'),\n        'helper_campaign_access' => __('entities/share.helpers.campaign_access'),\n        'helper_member_link' => __('entities/share.helpers.member-link'),\n\n        'label_member_link'      => __('entities/share.labels.member_link'),\n        'label_public_link'      => __('entities/share.labels.public_link'),\n        'btn_save'               => __('crud.actions.save-changes'),\n        'btn_make_public'        => __('entities/share.buttons.make_public'),\n        'btn_copy'               => __('entities/share.buttons.copy'),\n        'btn_close'              => __('crud.actions.close'),\n        'success_copied_public'  => __('entities/share.success.copied_public'),\n        'success_copied_members' => __('entities/share.success.copied_members'),\n        'success_updated'        => __('entities/share.success.updated'),\n        'error_generic'          => __('errors.500.body.1'),\n        'title'                  => __('entities/share.title'),\n    ];\n@endphp\n\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/share.title', ['name' => $campaign->name]),\n    'breadcrumbs' => [\n        __('entities/share.title')\n    ]\n])\n\n@section('content')\n\n<div id=\"entity-share-container\">\n    <entity-share-modal\n        initial-campaign-visibility=\"{{ $campaign->visibility_id->name }}\"\n        :initial-entity-private=\"{{ $entity->is_private ? 'true' : 'false' }}\"\n        url=\"{{ $entity->url() }}\"\n        save-endpoint=\"{{ route('entities.share.save', [$campaign, $entity]) }}\"\n        :trans='@json($shareTranslations)'\n    ></entity-share-modal>\n</div>\n\n@endsection\n\n"
  },
  {
    "path": "resources/views/entities/pages/story/_reorder.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Post[]|\\Illuminate\\Support\\Collection $posts\n * @var \\App\\Models\\Post $first\n */\nuse App\\Enums\\Visibility;\n$hasEntry = false;\n\n$posts = $entity->posts()->ordered()->get();\n\n$startWithStory = false;\n$firstPost = $posts->first();\n// If the first note has a positive position, it's after the entry field\nif ($firstPost && $firstPost->position >= 0) {\n    $startWithStory = true;\n    $hasEntry = true;\n}\n?>\n\n<x-tutorial code=\"abilities\" >\n    <p>{!! __('entities/story.reorder.helper') !!}</p>\n</x-tutorial>\n<x-form :action=\"['entities.story.reorder-save', $campaign, $entity]\">\n<div class=\"box-entity-story-reorder max-w-4xl flex flex-col gap-5\">\n    <div class=\"element-live-reorder sortable-elements flex flex-col gap-1\">\n        @includeWhen($startWithStory, 'entities.pages.story.reorder._story')\n\n        @foreach($posts as $note)\n            @if (!$hasEntry && $note->position >= 0)\n                @php $hasEntry = true @endphp\n                @include('entities.pages.story.reorder._story')\n            @endif\n\n\n            <x-reorder.child :id=\"$note->id\">\n                <input type=\"hidden\" name=\"posts[{{ $note->id }}][id]\" value=\"{{ $note->id }}\" />\n                <div class=\"dragger\">\n                    <x-icon class=\"fa-regular fa-sort\" />\n                </div>\n                <div class=\"truncate grow\">\n                    {!! $note->name !!}\n                </div>\n\n                <div class=\"self-end flex gap-1\">\n                    <select name=\"posts[{{ $note->id }}][collapsed]\" class=\"w-full md:w-fit\">\n                        <option value=\"0\">{{ __('entities/notes.states.expanded') }}</option>\n                        <option value=\"1\" @if ($note->collapsed()) selected=\"selected\" @endif>{{ __('entities/notes.states.collapsed') }}</option>\n                    </select>\n                    <select name=\"posts[{{ $note->id }}][visibility_id]\" class=\"w-full md:w-fit\">\n                        @foreach ($note->visibilityOptions() as $key => $value)\n                            <option value=\"{{ $key }}\" @if ($key == $note->visibility_id->value) selected=\"selected\" @endif>\n                                {{ $value }}\n                            </option>\n                        @endforeach\n                    </select>\n                </div>\n            </x-reorder.child>\n        @endforeach\n        @includeWhen(!$hasEntry, 'entities.pages.story.reorder._story')\n    </div>\n    <button class=\"btn2 btn-primary btn-block\">\n        {{ __('entities/story.reorder.save') }}\n    </button>\n</div>\n\n</x-form>\n"
  },
  {
    "path": "resources/views/entities/pages/story/reorder/_story.blade.php",
    "content": "<x-reorder.child id=\"story\" class=\"min-h-12\">\n    <input type=\"hidden\" name=\"posts[story]\" value=\"story\" />\n    <div class=\"dragger\">\n        <x-icon class=\"fa-regular fa-sort\" />\n    </div>\n    <div class=\"overflow-hidden\">\n        <span class=\"truncate\">{{ __('fields.description.label') }}</span>\n    </div>\n</x-reorder.child>\n"
  },
  {
    "path": "resources/views/entities/pages/story/reorder.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Post[]|\\Illuminate\\Support\\Collection $notes\n * @var \\App\\Models\\Post $first\n */\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/story.reorder.panel_title') . \" - {$entity->name} - {$campaign->name}\",\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'entity-story-reorder'\n])\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'story',\n        'view' => 'entities.pages.story._reorder',\n        'entity' => $entity,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/subpage.blade.php",
    "content": "@include('partials.errors')\n@include('ads.cta')\n\n\n<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', [\n            'active' => $active,\n        ])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @includeIf($view)\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/entities/pages/tags/_form.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n<x-helper>\n    <p>{{ __('entities/tags.create.helper', ['name' => $entity->name]) }}</p>\n</x-helper>\n<x-grid type=\"1/1\">\n    @include('cruds.fields.tags', ['model' => $entity, 'enableNew' => true])\n</x-grid>\n\n\n"
  },
  {
    "path": "resources/views/entities/pages/tags/create.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */ ?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('entities/tags.create.title', ['name' => $entity->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"$formOptions\">\n        @include('partials.forms.form', [\n            'title' => __('entities/tags.create.title', ['name' => $entity->name]),\n            'content' => 'entities.pages.tags._form',\n            'submit' =>  __('crud.save'),\n        ])\n        <input type=\"hidden\" name=\"entity_id\" value=\"{{ $entity->id }}\" />\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/entities/pages/transform/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('entities/transform.title', ['name' => $entity->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($entity)->list(),\n        Breadcrumb::show(),\n        __('entities/actions.convert'),\n    ],\n    'centered' => true,\n    'entity' => null,\n])\n\n@section('content')\n    @include('partials.errors')\n\n    <x-form :action=\"['entities.transform-process', $campaign, $entity->id]\">\n        <x-box>\n            <x-grid type=\"1/1\">\n                <x-helper>\n                    <p>{{ __('entities/transform.panel.title') }}</p>\n                </x-helper>\n\n                <x-forms.field field=\"current\" :label=\"__('entities/transform.fields.current')\">\n                    <p class=\"font-bold\">{{ $entity->entityType->name() }}</p>\n                </x-forms.field>\n\n\n                <x-forms.field field=\"target\" :label=\"__('entities/transform.fields.target')\">\n                    <x-forms.select name=\"target\" :options=\"$entities\" class=\"w-full\" required />\n                </x-forms.field>\n\n                @if (!empty($confirm))\n                    <x-forms.field field=\"confirm\" required :label=\" __('entities/transform.confirm.label')\">\n                        <x-checkbox :text=\"__('entities/transform.confirm.checkbox', ['entity' => $entity->name])\">\n                            <input type=\"checkbox\" name=\"confirm\" value=\"1\" required/>\n                            <x-slot name=\"extra\">\n                                <ul>\n                                    @foreach ($confirm as $label => $number)\n                                        <li>{{ __($label) }}: {{ \\Illuminate\\Support\\Number::format($number)  }}</li>\n                                    @endforeach\n                                </ul>\n                            </x-slot>\n                        </x-checkbox>\n                    </x-forms.field>\n                @else\n                    <x-helper>\n                        <p>{{ __('entities/transform.panel.warning') }}</p>\n                        <x-slot name=\"docs\">guides/transform.html</x-slot>\n                        <x-slot name=\"doc\">{{ __('entities/transform.documentation') }}</x-slot>\n                    </x-helper>\n                    <input type=\"hidden\" name=\"confirm\" value=\"1\" />\n                @endif\n            </x-grid>\n\n            <x-dialog.footer class=\"px-0!\">\n                <button class=\"btn2 btn-primary\">\n                    <x-icon class=\"fa-regular fa-arrows-rotate\" />\n                    {{ __('entities/transform.actions.convert') }}\n                </button>\n            </x-dialog.footer>\n        </x-box>\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/errors/403.blade.php",
    "content": "@extends('layouts.error', [\n    'error' => 403\n])\n"
  },
  {
    "path": "resources/views/errors/404.blade.php",
    "content": "@extends('layouts.error', [\n    'error' => 404\n])\n"
  },
  {
    "path": "resources/views/errors/500.blade.php",
    "content": "@extends('layouts.error', [\n    'error' => 500\n])\n"
  },
  {
    "path": "resources/views/errors/503.blade.php",
    "content": "@extends('layouts.error', [\n    'error' => 503\n])\n"
  },
  {
    "path": "resources/views/errors/images/403-image.blade.php",
    "content": "<svg id=\"illustration\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 1024 768\"><defs><style>.cls-1,.cls-10,.cls-14,.cls-15,.cls-18,.cls-22,.cls-23,.cls-24,.cls-4,.cls-6,.cls-8{fill:none;}.cls-2{fill:#eaf9f3;}.cls-3{clip-path:url(#clip-path);}.cls-4,.cls-6{stroke:#b8d8c7;}.cls-10,.cls-14,.cls-15,.cls-18,.cls-22,.cls-23,.cls-24,.cls-4,.cls-6,.cls-8{stroke-linecap:round;stroke-linejoin:round;}.cls-10,.cls-14,.cls-15,.cls-18,.cls-22,.cls-23,.cls-24,.cls-4{stroke-width:1.8px;}.cls-5{fill:#b8d8c7;}.cls-6{stroke-width:1.8px;}.cls-7{fill:#22272e;}.cls-10,.cls-8{stroke:#22272e;}.cls-8{stroke-width:4px;}.cls-9{fill:#6dafa7;}.cls-11{fill:#ffe779;}.cls-12{fill:#f4c2c9;}.cls-13{fill:#e26e85;}.cls-14{stroke:#63737a;}.cls-15{stroke:#fff;}.cls-16{clip-path:url(#clip-path-2);}.cls-17{fill:#f8ab5d;}.cls-18{stroke:#e26e85;}.cls-19{fill:#fff;}.cls-20{fill:#b0d7c0;}.cls-21{fill:#63737a;}.cls-22{stroke:#6dafa7;}.cls-23{stroke:#f4c2c9;}.cls-24{stroke:#ffe779;}</style><clipPath id=\"clip-path\"><path class=\"cls-1\" d=\"M766.3,563.9,246.3,549a48.07,48.07,0,0,1-46.5-43.3l-25.1-248a48.18,48.18,0,0,1,47.2-53l578.8-8a48.21,48.21,0,0,1,48.5,54.1L815.5,521.7A48.27,48.27,0,0,1,766.3,563.9Z\"/></clipPath><clipPath id=\"clip-path-2\"><path class=\"cls-1\" d=\"M575.2,277.1c-13.9-11.5-32.7-8.7-42.1-8.3s-17.7-.2-35.9-1.8c-9.9-.9-16.3,1.3-20.1,3.6a12.86,12.86,0,0,0-5.8,7.7,81.62,81.62,0,0,0-2,19.4,124.44,124.44,0,0,0,1.9,17.8c.8,7.9,1.5,16.3,1.5,20.1,0,8.3-6.1,27.7-5.8,34.6s19.7,12.8,38,13.6,49.6-7.5,54.9-8.9,5.1-6.9,3.6-16.6c-1.1-6.9-.9-24.5.8-39.4,2.9,2.5,7,6,10.7,9.3,8-8.4,17-16.2,25.7-24.2C591.6,293,581.7,282.5,575.2,277.1Z\"/></clipPath></defs><path class=\"cls-2\" d=\"M766.3,563.9,246.3,549a48.07,48.07,0,0,1-46.5-43.3l-25.1-248a48.18,48.18,0,0,1,47.2-53l578.8-8a48.21,48.21,0,0,1,48.5,54.1L815.5,521.7A48.27,48.27,0,0,1,766.3,563.9Z\"/><g class=\"cls-3\"><path class=\"cls-4\" d=\"M341.9,608.9H-73.6a15,15,0,0,1-15-15V358.3a15,15,0,0,1,15-15H341.9a15,15,0,0,1,15,15V593.9A15,15,0,0,1,341.9,608.9Z\"/><path class=\"cls-4\" d=\"M891,593.1H471.9a15,15,0,0,1-15-15V233.8a15,15,0,0,1,15-15H891a15,15,0,0,1,15,15V578.1A15,15,0,0,1,891,593.1Z\"/><path class=\"cls-4\" d=\"M227.1,343.3H206.8a4.32,4.32,0,0,1-4.3-3.8l-1.6-14.4a4.33,4.33,0,0,1,4.3-4.8h23.5a4.34,4.34,0,0,1,4.3,4.8l-1.6,14.4A4.41,4.41,0,0,1,227.1,343.3Z\"/><path class=\"cls-5\" d=\"M214.5,320.3s-8-.8-9.6-11.6c0,0,7.2,2.1,9.5,7.2,0,0,1-11.4,6.4-12.5,0,0,2.4,8.5-1.4,12.7,0,0,2.9-4.8,10.3-4.7a13.6,13.6,0,0,1-9.2,8.8\"/><path class=\"cls-4\" d=\"M338.7,393H248.5a4.23,4.23,0,0,1-4.2-4.2V361.4a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,338.7,393Z\"/><path class=\"cls-5\" d=\"M304,366.8H283.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H304a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,304,366.8Z\"/><path class=\"cls-4\" d=\"M338.7,438.8H248.5a4.23,4.23,0,0,1-4.2-4.2V407.2a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,338.7,438.8Z\"/><path class=\"cls-5\" d=\"M304,412.6H283.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H304a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,304,412.6Z\"/><path class=\"cls-4\" d=\"M801.9,471.1H711.7a4.23,4.23,0,0,1-4.2-4.2V439.5a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,801.9,471.1Z\"/><path class=\"cls-5\" d=\"M767.2,445H746.4a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,767.2,445Z\"/><path class=\"cls-4\" d=\"M686.1,471.1H595.9a4.23,4.23,0,0,1-4.2-4.2V439.5a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,686.1,471.1Z\"/><path class=\"cls-5\" d=\"M651.4,445H630.6a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,651.4,445Z\"/><path class=\"cls-4\" d=\"M223.7,393H133.5a4.23,4.23,0,0,1-4.2-4.2V361.4a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,223.7,393Z\"/><path class=\"cls-5\" d=\"M189,366.8H168.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H189a1.54,1.54,0,0,1,1.5,1.5h0A1.42,1.42,0,0,1,189,366.8Z\"/><path class=\"cls-4\" d=\"M223.7,438.8H133.5a4.23,4.23,0,0,1-4.2-4.2V407.2a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,223.7,438.8Z\"/><path class=\"cls-5\" d=\"M189,412.6H168.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H189a1.54,1.54,0,0,1,1.5,1.5h0A1.42,1.42,0,0,1,189,412.6Z\"/><path class=\"cls-4\" d=\"M933.2,323.6h-455a4.65,4.65,0,0,1-4.6-4.6V239.3a4.65,4.65,0,0,1,4.6-4.6h455a4.65,4.65,0,0,1,4.6,4.6V319A4.53,4.53,0,0,1,933.2,323.6Z\"/><path class=\"cls-4\" d=\"M933.2,422.6h-455a4.65,4.65,0,0,1-4.6-4.6V338.3a4.65,4.65,0,0,1,4.6-4.6h455a4.65,4.65,0,0,1,4.6,4.6V418A4.59,4.59,0,0,1,933.2,422.6Z\"/><rect class=\"cls-4\" x=\"504.3\" y=\"273.3\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"514.1\" y=\"287\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"802.6\" y=\"372.1\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"812.5\" y=\"385.8\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"782.5\" y=\"372.1\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-6\" x=\"745.2\" y=\"391.52\" width=\"50.3\" height=\"9.9\" transform=\"translate(160.33 1011.69) rotate(-72.48)\"/><rect class=\"cls-4\" x=\"792.4\" y=\"385.8\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"669.1\" y=\"273.3\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"679\" y=\"287\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"571.3\" y=\"273.3\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-6\" x=\"534\" y=\"292.7\" width=\"50.3\" height=\"9.9\" transform=\"translate(106.95 741.23) rotate(-72.48)\"/><rect class=\"cls-4\" x=\"581.2\" y=\"287\" width=\"10.3\" height=\"36.6\"/><path class=\"cls-5\" d=\"M812.4,279.9l1.1-14.9a1.65,1.65,0,0,0-1.7-1.8h-8.6a1.71,1.71,0,0,0-1.7,1.8l1.1,14.9s-9,5.8-8.9,10.6c.1,3.7,2.3,21.4,3.3,29.2a4.32,4.32,0,0,0,4.3,3.8h12.4a4.32,4.32,0,0,0,4.3-3.8c1-7.8,3.2-25.5,3.3-29.2C821.4,285.7,812.4,279.9,812.4,279.9Z\"/><path class=\"cls-5\" d=\"M772.5,279.9l1.1-14.9a1.65,1.65,0,0,0-1.7-1.8h-8.6a1.71,1.71,0,0,0-1.7,1.8l1.1,14.9s-9,5.8-8.9,10.6c.1,3.7,2.3,21.4,3.3,29.2a4.32,4.32,0,0,0,4.3,3.8h12.4a4.32,4.32,0,0,0,4.3-3.8c1-7.8,3.2-25.5,3.3-29.2C781.5,285.7,772.5,279.9,772.5,279.9Z\"/><line class=\"cls-4\" x1=\"173.2\" y1=\"517\" x2=\"1129\" y2=\"517\"/></g><path class=\"cls-7\" d=\"M517.4,429.6l-1.3,6.3a5.78,5.78,0,0,1-5.6,4.6H497.6a5.76,5.76,0,0,1-5.6-4.6l-1.3-6.3L504,429Z\"/><rect class=\"cls-7\" x=\"500.3\" y=\"437.4\" width=\"7.2\" height=\"104\"/><path class=\"cls-7\" d=\"M507.4,548h-6.9a2.11,2.11,0,0,1-2.1-2.1V526.2a2.11,2.11,0,0,1,2.1-2.1h6.9a2.11,2.11,0,0,1,2.1,2.1v19.7A2.26,2.26,0,0,1,507.4,548Z\"/><path class=\"cls-8\" d=\"M504.7,542s-7.3,5.9-11.2,28\"/><path class=\"cls-8\" d=\"M502.1,543.3s-22-5.3-34,20.8\"/><path class=\"cls-8\" d=\"M505.9,542.8s19.7-3.5,32.1,24.5\"/><circle class=\"cls-9\" cx=\"468.1\" cy=\"564.1\" r=\"8.9\"/><circle class=\"cls-10\" cx=\"534.2\" cy=\"564.1\" r=\"8.9\"/><circle class=\"cls-9\" cx=\"492.4\" cy=\"576.3\" r=\"8.9\"/><ellipse class=\"cls-11\" cx=\"504.1\" cy=\"419.5\" rx=\"60.9\" ry=\"12\"/><ellipse class=\"cls-7\" cx=\"504.1\" cy=\"413.3\" rx=\"60.9\" ry=\"12\"/><path class=\"cls-12\" d=\"M431.7,550.6c.7,4.7,1.6,11.3,1.2,13.7,0,0,1.7,4.1,11.1,3.5s14.2-5.7,14.2-5.7-.3-5.6-.7-11.3A65.75,65.75,0,0,1,431.7,550.6Z\"/><path class=\"cls-13\" d=\"M430.9,545.7s.4,2.1.8,5a66.23,66.23,0,0,0,25.9.2c-.3-5.6-.6-11.3-.6-12.5C456.9,535.9,429.7,538.2,430.9,545.7Z\"/><path class=\"cls-7\" d=\"M433,562.1a66.06,66.06,0,0,0-2.1,7.1c-1.5,5.7-15.4,21.3-15,24.7s2.9,6.5,13.2,6.5,22.5.6,25.9-.8a7.79,7.79,0,0,0,3-2.8,18.66,18.66,0,0,0,3.1-12.8c-.8-7.3-2.2-19.4-2.2-20.5a6.26,6.26,0,0,0-.7-2.9s-2.8,3.9-6.2,4.6-3.7-3.5-9.1-4.6-7.8,4-8.7,4.2C433.2,564.8,433,562.9,433,562.1Z\"/><path class=\"cls-13\" d=\"M547.3,557.8c1.7-5.1,3.4-10.4,3.9-12.3,1.1-3.9-25.8-9.2-27.6-.9l-1,4.8C529.3,555,538.6,560.1,547.3,557.8Z\"/><path class=\"cls-12\" d=\"M522.6,549.4,519.5,564s1.6,2.9,8.9,5.1,15.2,0,15.2,0,1.8-5.6,3.7-11.4C538.6,560.1,529.3,555,522.6,549.4Z\"/><path class=\"cls-7\" d=\"M520.5,559.5a19.47,19.47,0,0,0-3.3,5.9c-1.6,4-18.3,23.2-18.6,26.5s3.1,6.5,6.6,7.7,27.1,4.2,31.4,2.7,6.4-10.4,6.5-19.6a98.73,98.73,0,0,1,2.3-18.6,5.85,5.85,0,0,1-4,3.3c-3,.8-4.1-5.9-9-8.2s-9.7,2.6-10.8,3.4S520.3,560.3,520.5,559.5Z\"/><path class=\"cls-7\" d=\"M471.5,363.6s-9.9,8-21.5,16.3-46.3,27.6-46.2,49.1c.1,13.4,7.6,56,12.4,77.1s-.6,29.7,5.7,37.1,25,5.5,33,2.2,12.5-11.6,8.6-23.8-6.7-34.4-5.3-51a254.56,254.56,0,0,0,.3-33.3,95.14,95.14,0,0,1,16.6-8,131.37,131.37,0,0,0,14.7-6.1s30.5-.3,32.4.6,11.9,17.7,12.5,20.2c0,0-1.9,6.7-3.9,31.3s-15.6,49.1-13.1,59.3,8.6,14.7,16.9,17.2,20.2,2.2,25.5-9.1,9.1-38.3,14.4-53.5,13.6-40.5,13-52.4-16-53.2-25.3-67.6S479.1,347.4,471.5,363.6Z\"/><path class=\"cls-14\" d=\"M458.4,437.4s-.6-6.7-1.5-9.2\"/><path class=\"cls-14\" d=\"M534.7,444s1.6-7.4,3.4-11.3\"/><circle class=\"cls-14\" cx=\"427.5\" cy=\"430.6\" r=\"16.2\"/><circle class=\"cls-14\" cx=\"563.3\" cy=\"434.7\" r=\"16.2\"/><path class=\"cls-15\" d=\"M430.8,577.3s9.1-6.9,22,.7\"/><path class=\"cls-15\" d=\"M427.5,584s9.1-6.9,22,.7\"/><path class=\"cls-15\" d=\"M516.1,574.4s11.5-5.1,22.7,6\"/><path class=\"cls-15\" d=\"M512.7,580.9s11.5-5.1,22.7,6\"/><path class=\"cls-7\" d=\"M453.1,326.3s-2.4-1.2-4.6-6.4,5.2-6.9,5.9-4S453.1,326.3,453.1,326.3Z\"/><path class=\"cls-12\" d=\"M416.4,316.2s4,9.4,18,9.2c11-.1,43.7-10.9,45.8-11.8s12.4-13.8,8.8-27.7-13.5-12.8-13.5-12.8-11.6,4.2-33.5,19.6S416.8,308.8,416.4,316.2Z\"/><path class=\"cls-9\" d=\"M449.5,306.1s3,11.2,3.6,20.2c0,0,28-9.7,30.4-11.7s7.6-20.9,3.1-30.3S476,271.4,476,271.4a285.88,285.88,0,0,0-25.1,15.2C437.9,295.5,449.5,306.1,449.5,306.1Z\"/><path class=\"cls-10\" d=\"M458.8,324.3s-1.7-21.8-8.9-37.7\"/><path class=\"cls-11\" d=\"M575.2,277.1c-13.9-11.5-32.7-8.7-42.1-8.3s-17.7-.2-35.9-1.8c-9.9-.9-16.3,1.3-20.1,3.6a12.86,12.86,0,0,0-5.8,7.7,81.62,81.62,0,0,0-2,19.4,124.44,124.44,0,0,0,1.9,17.8c.8,7.9,1.5,16.3,1.5,20.1,0,8.3-6.1,27.7-5.8,34.6s19.7,12.8,38,13.6,49.6-7.5,54.9-8.9,5.1-6.9,3.6-16.6c-1.1-6.9-.9-24.5.8-39.4,2.9,2.5,7,6,10.7,9.3,8-8.4,17-16.2,25.7-24.2C591.6,293,581.7,282.5,575.2,277.1Z\"/><g class=\"cls-16\"><path class=\"cls-17\" d=\"M476.7,384.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,476.7,384.5Z\"/><path class=\"cls-17\" d=\"M477,368.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,477,368.8Z\"/><path class=\"cls-17\" d=\"M477.2,353.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,477.2,353.1Z\"/><path class=\"cls-17\" d=\"M477.4,337.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,477.4,337.4Z\"/><path class=\"cls-17\" d=\"M477.7,321.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,477.7,321.7Z\"/><path class=\"cls-17\" d=\"M490.8,384.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,490.8,384.7Z\"/><path class=\"cls-17\" d=\"M491.1,369l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,491.1,369Z\"/><path class=\"cls-17\" d=\"M491.3,353.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,491.3,353.3Z\"/><path class=\"cls-17\" d=\"M491.5,337.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,491.5,337.6Z\"/><path class=\"cls-17\" d=\"M491.8,321.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,491.8,321.9Z\"/><path class=\"cls-17\" d=\"M505,384.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,505,384.9Z\"/><path class=\"cls-17\" d=\"M505.2,369.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,505.2,369.2Z\"/><path class=\"cls-17\" d=\"M505.4,353.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,505.4,353.5Z\"/><path class=\"cls-17\" d=\"M505.7,337.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,505.7,337.8Z\"/><path class=\"cls-17\" d=\"M505.9,322.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,505.9,322.1Z\"/><path class=\"cls-17\" d=\"M519.1,385.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,519.1,385.1Z\"/><path class=\"cls-17\" d=\"M519.3,369.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,519.3,369.4Z\"/><path class=\"cls-17\" d=\"M519.6,353.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,519.6,353.7Z\"/><path class=\"cls-17\" d=\"M519.8,338l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,519.8,338Z\"/><path class=\"cls-17\" d=\"M520,322.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,520,322.4Z\"/><path class=\"cls-17\" d=\"M533.2,385.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,533.2,385.3Z\"/><path class=\"cls-17\" d=\"M533.5,369.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,533.5,369.6Z\"/><path class=\"cls-17\" d=\"M533.7,353.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,533.7,353.9Z\"/><path class=\"cls-17\" d=\"M533.9,338.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,533.9,338.3Z\"/><path class=\"cls-17\" d=\"M534.2,322.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,534.2,322.6Z\"/><path class=\"cls-17\" d=\"M547.3,385.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,547.3,385.5Z\"/><path class=\"cls-17\" d=\"M547.6,369.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,547.6,369.8Z\"/><path class=\"cls-17\" d=\"M547.8,354.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,547.8,354.2Z\"/><path class=\"cls-17\" d=\"M548.1,338.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,548.1,338.5Z\"/><path class=\"cls-17\" d=\"M548.3,322.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,548.3,322.8Z\"/><path class=\"cls-17\" d=\"M561.5,385.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,561.5,385.7Z\"/><path class=\"cls-17\" d=\"M561.7,370.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,561.7,370.1Z\"/><path class=\"cls-17\" d=\"M561.9,354.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,561.9,354.4Z\"/><path class=\"cls-17\" d=\"M562.2,338.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,562.2,338.7Z\"/><path class=\"cls-17\" d=\"M562.4,323l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,562.4,323Z\"/><path class=\"cls-17\" d=\"M477.9,306l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,477.9,306Z\"/><path class=\"cls-17\" d=\"M478.1,290.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,478.1,290.3Z\"/><path class=\"cls-17\" d=\"M478.4,274.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,478.4,274.7Z\"/><path class=\"cls-17\" d=\"M478.6,259l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,478.6,259Z\"/><path class=\"cls-17\" d=\"M492,306.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,492,306.2Z\"/><path class=\"cls-17\" d=\"M492.3,290.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,492.3,290.6Z\"/><path class=\"cls-17\" d=\"M492.5,274.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,492.5,274.9Z\"/><path class=\"cls-17\" d=\"M492.7,259.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,492.7,259.2Z\"/><path class=\"cls-17\" d=\"M506.1,306.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,506.1,306.5Z\"/><path class=\"cls-17\" d=\"M506.4,290.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,506.4,290.8Z\"/><path class=\"cls-17\" d=\"M506.6,275.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,506.6,275.1Z\"/><path class=\"cls-17\" d=\"M506.9,259.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,506.9,259.4Z\"/><path class=\"cls-17\" d=\"M520.3,306.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,520.3,306.7Z\"/><path class=\"cls-17\" d=\"M520.5,291l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,520.5,291Z\"/><path class=\"cls-17\" d=\"M520.7,275.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,520.7,275.3Z\"/><path class=\"cls-17\" d=\"M521,259.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,521,259.6Z\"/><path class=\"cls-17\" d=\"M534.4,306.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,534.4,306.9Z\"/><path class=\"cls-17\" d=\"M534.6,291.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,534.6,291.2Z\"/><path class=\"cls-17\" d=\"M534.9,275.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,534.9,275.5Z\"/><path class=\"cls-17\" d=\"M535.1,259.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,535.1,259.8Z\"/><path class=\"cls-17\" d=\"M548.5,307.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,548.5,307.1Z\"/><path class=\"cls-17\" d=\"M548.8,291.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,548.8,291.4Z\"/><path class=\"cls-17\" d=\"M549,275.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,549,275.7Z\"/><path class=\"cls-17\" d=\"M549.2,260l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,549.2,260Z\"/><path class=\"cls-17\" d=\"M562.6,307.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,562.6,307.3Z\"/><path class=\"cls-17\" d=\"M562.9,291.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,562.9,291.6Z\"/><path class=\"cls-17\" d=\"M563.1,275.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,563.1,275.9Z\"/><path class=\"cls-17\" d=\"M563.4,260.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,563.4,260.3Z\"/></g><path class=\"cls-12\" d=\"M502.8,279.3s-.2,11.8,12.9,12.6S539,279.2,537,270.1,502.8,266,502.8,279.3Z\"/><path class=\"cls-13\" d=\"M530,276.2c-6.3,7.2-18.7,11-26.9,5.8a12.6,12.6,0,0,0,3.6,6.5C516.6,291.9,526.1,285.6,530,276.2Z\"/><path class=\"cls-12\" d=\"M493.5,239.8a91,91,0,0,1,0,19.2c-1.1,11.1,6.2,24.7,18.1,26.5,12.8,2,25-5.1,28.6-27.1s-1.3-35.7-17.7-37S493.4,222.1,493.5,239.8Z\"/><path class=\"cls-12\" d=\"M547,242.1a36.07,36.07,0,0,1-2.8,11c-1.9,4.1-3.9,5.4-3.9,5.4l-12-6.6s-33.8,7.9-34.7-12.1a35.25,35.25,0,0,1,.3-6.6,24.54,24.54,0,0,1,5.2-12.3,10,10,0,0,1,1.4-1.5c6-5.9,15.2-8.4,26-6.7C545.7,215.6,548.4,229.1,547,242.1Z\"/><path class=\"cls-13\" d=\"M514,221.2c-12.1.2-21.4,3.5-20.5,18.6,0,0,.1,1.1.3,3,2.4-3.6,7.7-3.4,10.8-6.2A28.34,28.34,0,0,0,514,221.2Z\"/><path class=\"cls-7\" d=\"M548.7,235.5a6.85,6.85,0,0,0-1.4-4.2,7.51,7.51,0,0,0,.5-2.6,7.15,7.15,0,0,0-3.6-6.2,7.14,7.14,0,0,0-6.9-6.6,7.24,7.24,0,0,0-9.2-3.1,7.11,7.11,0,0,0-5.4-2.5,7.29,7.29,0,0,0-4.4,1.5,7.47,7.47,0,0,0-3.9-1.2,7.16,7.16,0,0,0-5.9,3.1,8.81,8.81,0,0,0-1.7-.2,7.11,7.11,0,0,0-6.8,5,7.21,7.21,0,0,0-6.1,7.1,3.08,3.08,0,0,0,.1,1c-1.3,2.6-1.1,6.7-.2,6.5a15.6,15.6,0,0,1,10.3,1c5.8,2.9,8.4,2.2,14.7,0,7-2.4,18-3.8,19.6,8.6.4,3.2-3.2,10.3,1.8,12.5,1.3.6,2.7-.4,4-2.3a16,16,0,0,0,1.1-2.9,7.05,7.05,0,0,0,3.4-6.1,6.85,6.85,0,0,0-1.4-4.2A6.64,6.64,0,0,0,548.7,235.5Z\"/><path class=\"cls-12\" d=\"M538.7,256.2s2.5-5.7,5.6-4c2.6,1.4.3,14.5-6.7,14.6\"/><path class=\"cls-7\" d=\"M510.1,252.2a9.65,9.65,0,0,1,.5,4.5,9.48,9.48,0,0,1-.5,2.3c-.3.7-.5,1.3-.8,2a6.78,6.78,0,0,0-.4,1.7,2.33,2.33,0,0,0,.7,1.4,4.4,4.4,0,0,0,3.6,1.4,4.11,4.11,0,0,1-4.5-.3,3.27,3.27,0,0,1-1.4-2.3,6.25,6.25,0,0,1,.4-2.5c.3-.7.6-1.4.9-2a10.66,10.66,0,0,0,.7-1.9C509.6,255.1,509.8,253.7,510.1,252.2Z\"/><path class=\"cls-10\" d=\"M511.7,272.2a8.38,8.38,0,0,1,8.1,2\"/><path class=\"cls-7\" d=\"M498.8,246.2c1.3-.3,2.5-1.3,5.2-1.4,1.8-.1,2.9,0,3.1-1.3.2-1-1-2.3-3-2.3C500.2,241.2,495.2,247.1,498.8,246.2Z\"/><path class=\"cls-7\" d=\"M529.8,247.6c-1.3-.4-2.3-1.5-5-1.9-1.8-.3-2.9-.3-2.9-1.6-.1-1.1,1.2-2.2,3.2-2C528.8,242.5,533.3,248.8,529.8,247.6Z\"/><path class=\"cls-7\" d=\"M504,256.1h0a1.83,1.83,0,0,0,1.8-1.6v-1a1.83,1.83,0,0,0-1.6-1.8h0a1.83,1.83,0,0,0-1.8,1.6v1A1.63,1.63,0,0,0,504,256.1Z\"/><path class=\"cls-7\" d=\"M523.6,256.9h0a1.83,1.83,0,0,0,1.8-1.6v-1a1.83,1.83,0,0,0-1.6-1.8h0a1.83,1.83,0,0,0-1.8,1.6v1A1.68,1.68,0,0,0,523.6,256.9Z\"/><path class=\"cls-7\" d=\"M543,257.1c-.4-.1-.8-.1-.9.1a1.17,1.17,0,0,0-.2.7,3.08,3.08,0,0,0-.1,1c0,.4-.1.7-.1,1.1a7.5,7.5,0,0,1-.7,2.3,2,2,0,0,1-1.2,1,1.94,1.94,0,0,1-1.3-.3c.4-.2.8-.3.9-.5a.84.84,0,0,0,.2-.7c.1-.6.1-1.3.2-2.1.1-.4.1-.8.2-1.1a3.08,3.08,0,0,1,.5-1.2,1.65,1.65,0,0,1,1.3-.9A.93.93,0,0,1,543,257.1Z\"/><path class=\"cls-12\" d=\"M482.9,257.7s-4.5,3.8-12.5,18.2c-6.4,11.6-11.9,28.9-19.7,38.6a20.19,20.19,0,0,1-6,5.4,30.33,30.33,0,0,1-4.8,2.2c-11.8,3.9-28.5.9-24-16.8s34.8-39.2,44.7-54.8S483.2,251.9,482.9,257.7Z\"/><path class=\"cls-18\" d=\"M450.7,314.5a20.19,20.19,0,0,1-6,5.4,30.33,30.33,0,0,1-4.8,2.2\"/><path class=\"cls-13\" d=\"M483.9,226.6s5.4-2.6,7.3-3.5,6.3-1.8,7.9-2.3,1.8,2.1-.9,4.5-7.5,8.9-10.8,9.6S482.3,228.6,483.9,226.6Z\"/><path class=\"cls-12\" d=\"M459.7,252.2s5.9-9.7,7.6-13.3c4.2-8.7,10.3-12.3,12.3-13.9s14.7-4.2,17.9-5.4c3-1.1,2.6,1.4,1.4,2.5-3.3,3-9.9,4.2-10.7,5.1,0,0,4.7-1.4,7.1-2.4a79.42,79.42,0,0,1,10.3-2.7c1.6-.3,2.6,1.5,0,3.2s-7.3,3.8-7.9,4.2-5.3,3.3-5.3,3.3,4.7,0,6.4-.1,5.3.1,6.2.1c2.4,0,2.8,3-2.1,3.8s-8,2.1-10.6,4.2c-3,2.4,1,9.2-11.1,18.5C481.3,259.3,462.6,264.9,459.7,252.2Z\"/><path class=\"cls-18\" d=\"M492.4,232.8a9.36,9.36,0,0,0-1.8.6,13.36,13.36,0,0,0-2.9,2.1\"/><path class=\"cls-18\" d=\"M488.2,227.2s-1.7.5-2.9,1a9.89,9.89,0,0,0-2.6,2\"/><path class=\"cls-7\" d=\"M461.2,249.4c2.5-.1,11.1.8,15.6,15.6a1.09,1.09,0,0,1-.2,1.1l-3.9,5.9a.19.19,0,0,1-.3,0c-.7-2.2-5.1-15.5-15.4-16.4a.52.52,0,0,1-.4-.8c.9-1.3,2.7-3.8,3.5-4.8A1.38,1.38,0,0,1,461.2,249.4Z\"/><ellipse class=\"cls-19\" cx=\"465.45\" cy=\"254.73\" rx=\"5.1\" ry=\"4.8\" transform=\"translate(12.12 530.45) rotate(-60)\"/><path class=\"cls-7\" d=\"M578.4,336.6s4.8-1.3,13.7-11.8-7-.4-7.9,0S578.4,336.6,578.4,336.6Z\"/><path class=\"cls-12\" d=\"M623.3,337.8c-2.8-7.8-12.3-21.2-22.6-33.7-8.7,8-17.7,15.8-25.7,24.2,5.4,4.8,10.2,9,10.2,9-1.4.7-4,2.1-6.7,3.4,4.7,7.7,8.1,16.5,8.7,25.3,9.3.2,19.8.4,24.7-1.6C620.7,360.9,628.6,352.5,623.3,337.8Z\"/><path class=\"cls-12\" d=\"M569.6,345.1s-1.7-2.4-2.5-3.3-5.4-4-7.3-5.6-3.5.7-1.8,3.5,2.7,7.6,4,8.9S569.8,348.7,569.6,345.1Z\"/><path class=\"cls-9\" d=\"M604.4,308.6s-16,11.6-26,28.1c0,0-17-16.4-20.1-22s-2.8-21.4,4.4-30.4,13.5-6.3,13.5-6.3A195.34,195.34,0,0,1,604.4,308.6Z\"/><path class=\"cls-10\" d=\"M573.9,332.2s10.6-18.9,26.6-28.7\"/><path class=\"cls-18\" d=\"M585.1,337.3s10.5-6.7,19.2-5\"/><path class=\"cls-7\" d=\"M518.8,319.8l44.8-7.1a3.05,3.05,0,0,1,3.5,3.4l-7.4,50.5a3.11,3.11,0,0,1-2.3,2.5l-43.9,10.7a3,3,0,0,1-3.7-3.2l4-51.5A5.75,5.75,0,0,1,518.8,319.8Z\"/><path class=\"cls-9\" d=\"M532.2,316.6l-.3,3.7c0,.5.5.9,1.2.8l17.8-3.2a1.5,1.5,0,0,0,1.4-1.3l.2-2.7a.89.89,0,0,0-1.1-.8l-17.7,2.2A1.72,1.72,0,0,0,532.2,316.6Z\"/><path class=\"cls-12\" d=\"M569.6,345.1s-6-1.4-7.4-1-6.3,1-9.9,1.8-10.1.5-12.5,1.4a2.32,2.32,0,0,0-1.5,3.1s-2.5-.5-3.3.8c-1.2,1.9,1.3,3.1,1.3,3.1-2-.6-3.7.7-2.8,2.6.7,1.4,4,3.5,6.9,4.9a88.7,88.7,0,0,0,8.5,3.2s-2.6-.3-5.7-.6c-2.9-.2-4.2,1.2-2.5,2.8s12.2,4.6,16.1,3.7,8.2-3.3,14-4.8c2.5-.6,9-.4,16.3-.2-.6-8.8-3.9-17.6-8.7-25.3C574.1,342.9,569.6,345.1,569.6,345.1Z\"/><path class=\"cls-18\" d=\"M536.3,354.4s5.1,2.2,9.3,3.6,8.7,1.2,9.9,1.7\"/><path class=\"cls-18\" d=\"M548.9,365s3.8,1.4,5.9.7\"/><path class=\"cls-18\" d=\"M538.4,350.4a44.9,44.9,0,0,0,8.1,2.2c3.3.4,8.7.4,9.4.4\"/><circle class=\"cls-7\" cx=\"518.8\" cy=\"297\" r=\"1.2\"/><path class=\"cls-10\" d=\"M514.4,291.8s-1.2,2.5-.4,13.5\"/><path class=\"cls-20\" d=\"M285,410.3l-2.5,195.1a3.78,3.78,0,0,0,3.7,3.8h0a3.67,3.67,0,0,0,3.7-3.6l8.3-195.3Z\"/><path class=\"cls-20\" d=\"M733.9,410.3l2.5,195.1a3.78,3.78,0,0,1-3.7,3.8h0a3.67,3.67,0,0,1-3.7-3.6l-8.3-195.3Z\"/><polygon class=\"cls-9\" points=\"298.3 410.3 285 410.3 284.8 425.2 297.7 425.2 298.3 410.3\"/><polygon class=\"cls-9\" points=\"733.9 410.3 720.6 410.3 721.2 425.2 734.1 425.2 733.9 410.3\"/><path class=\"cls-20\" d=\"M341.8,406.7l-1.9,145.7a2.73,2.73,0,0,0,2.8,2.8h0a2.84,2.84,0,0,0,2.8-2.7l6.2-145.9h-9.9Z\"/><path class=\"cls-20\" d=\"M677,406.7l1.9,145.7a2.73,2.73,0,0,1-2.8,2.8h0a2.84,2.84,0,0,1-2.8-2.7l-6.2-145.9H677Z\"/><polygon class=\"cls-19\" points=\"761.7 406.3 257.2 406.3 318.2 369.2 700.7 369.2 761.7 406.3\"/><rect class=\"cls-20\" x=\"257.2\" y=\"406.3\" width=\"504.5\" height=\"8\"/><polygon class=\"cls-21\" points=\"378.6 371.7 409.6 393.2 416.2 393.3 458.5 374.4 378.6 371.7\"/><path class=\"cls-7\" d=\"M416.2,393.3l4,.1a12.86,12.86,0,0,0,5.8-1.2l30.5-14.5a3.38,3.38,0,0,0,2-3.3h-.1Z\"/><path class=\"cls-7\" d=\"M313,389.4l105.5,4.1a4.57,4.57,0,0,0,4.6-5.6L408,326a8.34,8.34,0,0,0-7.9-6.3L295,318.1a3.37,3.37,0,0,0-3.3,4.2l17,63.6A4.55,4.55,0,0,0,313,389.4Z\"/><ellipse class=\"cls-21\" cx=\"352.62\" cy=\"355.7\" rx=\"6.3\" ry=\"7.5\" transform=\"translate(-144.53 416.58) rotate(-52.23)\"/><path class=\"cls-12\" d=\"M326.3,276.7l-66.8-1.2a2.65,2.65,0,0,1-2.5-2.1l-4.5-21.5a2.17,2.17,0,0,1,2.2-2.6l66.8,1.2a2.65,2.65,0,0,1,2.5,2.1l4.5,21.5A2.22,2.22,0,0,1,326.3,276.7Z\"/><ellipse class=\"cls-7\" cx=\"269.83\" cy=\"258.81\" rx=\"2.8\" ry=\"3.5\" transform=\"translate(-102.6 291.8) rotate(-48.87)\"/><path class=\"cls-7\" d=\"M275.2,269.7l-6.3-.1a3.4,3.4,0,0,1-3.1-2.6h0a4.32,4.32,0,0,1,4.5-5.5h0a7.67,7.67,0,0,1,6.9,5.7h0A1.9,1.9,0,0,1,275.2,269.7Z\"/><path class=\"cls-9\" d=\"M301.3,265.2l-17.7-.3a.85.85,0,0,1-.8-.7l-.5-2.3a.85.85,0,0,1,.8-1l17.7.3a.85.85,0,0,1,.8.7l.5,2.3A.85.85,0,0,1,301.3,265.2Z\"/><line class=\"cls-10\" x1=\"308.3\" y1=\"259.9\" x2=\"316.7\" y2=\"267\"/><line class=\"cls-10\" x1=\"315.3\" y1=\"260\" x2=\"309.7\" y2=\"266.8\"/><path class=\"cls-11\" d=\"M394.9,312.3l-66.8-1.2a2.65,2.65,0,0,1-2.5-2.1l-4.5-21.5a2.17,2.17,0,0,1,2.2-2.6l66.8,1.2a2.65,2.65,0,0,1,2.5,2.1l4.5,21.5A2.22,2.22,0,0,1,394.9,312.3Z\"/><ellipse class=\"cls-7\" cx=\"338.41\" cy=\"294.38\" rx=\"2.8\" ry=\"3.5\" transform=\"translate(-105.92 355.63) rotate(-48.87)\"/><path class=\"cls-7\" d=\"M343.8,305.3l-6.3-.1a3.4,3.4,0,0,1-3.1-2.6h0a4.32,4.32,0,0,1,4.5-5.5h0a7.67,7.67,0,0,1,6.9,5.7h0A1.9,1.9,0,0,1,343.8,305.3Z\"/><path class=\"cls-9\" d=\"M369.8,300.8l-17.7-.3a.85.85,0,0,1-.8-.7l-.5-2.3a.85.85,0,0,1,.8-1l17.7.3a.85.85,0,0,1,.8.7l.5,2.3A.85.85,0,0,1,369.8,300.8Z\"/><line class=\"cls-10\" x1=\"376.8\" y1=\"295.5\" x2=\"385.3\" y2=\"302.6\"/><line class=\"cls-10\" x1=\"383.8\" y1=\"295.6\" x2=\"378.3\" y2=\"302.4\"/><path class=\"cls-10\" d=\"M271.1,275.7l3.7,17.4a5,5,0,0,0,4.9,4l3.9.1\"/><line class=\"cls-10\" x1=\"308\" y1=\"297.7\" x2=\"323.3\" y2=\"298\"/><path class=\"cls-7\" d=\"M306.9,291l-3.5,3.7a1.24,1.24,0,0,1-1.4.3,4,4,0,0,0-4.5.8l-3.9,4.1a3.93,3.93,0,0,0-.6,4.6,1.21,1.21,0,0,1-.2,1.4l-3.5,3.7a1.17,1.17,0,0,1-2-.5l-.3-1.4a8.61,8.61,0,0,1,2.2-8.1l7.8-8.2a8.91,8.91,0,0,1,8-2.6l1.4.3A1.17,1.17,0,0,1,306.9,291Z\"/><path class=\"cls-22\" d=\"M474.8,203.8s-4.4,4.8-10.3,0,1.7-14,4.1-11.5-10.5,7.4-10.9,1.1,6.8-6.7-3.3-14.6\"/><path class=\"cls-22\" d=\"M508.1,194s6.7-2.4,4.3-7.8-8.6,0-4.3,0,7.4-4.6,4.8-10.9\"/><path class=\"cls-22\" d=\"M552.5,204.3s8.3,3,6.1-2.8-2-7.8,3.1-5.5,5.4-2.5,7.2-3.6\"/><path class=\"cls-7\" d=\"M596.2,241.3l-3.4,3.6a1.52,1.52,0,0,0,0,2h0a1.68,1.68,0,0,0,1.9.3l3.9-2.4Z\"/><path class=\"cls-7\" d=\"M626.4,250l.9,4.8a1.47,1.47,0,0,1-1.1,1.7h0a1.38,1.38,0,0,1-1.7-.8l-2-4.1Z\"/><circle class=\"cls-9\" cx=\"615.3\" cy=\"231.7\" r=\"22.5\"/><circle class=\"cls-11\" cx=\"615.3\" cy=\"231.7\" r=\"14.5\"/><polyline class=\"cls-14\" points=\"619.4 236.9 615.3 231.7 617.4 224.5\"/><path class=\"cls-9\" d=\"M600.9,209.9a1.13,1.13,0,0,1-1.5-.8,6.49,6.49,0,0,1,11.9-4.5,1.05,1.05,0,0,1-.6,1.6Z\"/><path class=\"cls-9\" d=\"M639.2,221a1.09,1.09,0,0,0,1.7.1,6.48,6.48,0,0,0,.3-8.2,6.57,6.57,0,0,0-8-2,1.17,1.17,0,0,0-.4,1.7Z\"/><path class=\"cls-9\" d=\"M625.5,207.5l-5.9-1.7a1.8,1.8,0,0,1-1.2-2.3h0a1.8,1.8,0,0,1,2.3-1.2l5.9,1.7a1.8,1.8,0,0,1,1.2,2.3h0A1.8,1.8,0,0,1,625.5,207.5Z\"/><rect class=\"cls-9\" x=\"619.13\" y=\"206.23\" width=\"5.8\" height=\"4.4\" transform=\"translate(248.34 747.61) rotate(-73.8)\"/><path class=\"cls-12\" d=\"M576,184H544.8l-3.2,2.1a1.56,1.56,0,0,1-2.4-1.3v-22a4.12,4.12,0,0,1,4.1-4.1H576a4.12,4.12,0,0,1,4.1,4.1V180A4.17,4.17,0,0,1,576,184Z\"/><line class=\"cls-10\" x1=\"559.3\" y1=\"168.7\" x2=\"570.2\" y2=\"168.7\"/><line class=\"cls-10\" x1=\"559.3\" y1=\"174.4\" x2=\"565.9\" y2=\"174.4\"/><rect class=\"cls-10\" x=\"548\" y=\"168.7\" width=\"5.6\" height=\"5.6\"/><path class=\"cls-9\" d=\"M587,380.8a14.92,14.92,0,0,1-9.4,5.7,9.85,9.85,0,0,1-1.7.2c-9.2.7-15.9-5.9-15.9-5.9Z\"/><path class=\"cls-7\" d=\"M634.5,375.1s-3,9.8-12.6,11.5a17.36,17.36,0,0,1-4.5.2H575.9a9.85,9.85,0,0,0,1.7-.2,15.81,15.81,0,0,0,9.4-5.7,20.19,20.19,0,0,0,3.2-5.7h44.3Z\"/><path class=\"cls-21\" d=\"M752.7,322.1l-90.5-6a5.34,5.34,0,0,1-5-5.6l4.6-89.7a7.46,7.46,0,0,1,6.1-7l92.3-17.9a5.36,5.36,0,0,1,6.4,5.6l-7.4,115A6.12,6.12,0,0,1,752.7,322.1Z\"/><path class=\"cls-7\" d=\"M749.7,322l-90.5-6a5.34,5.34,0,0,1-5-5.6l4.6-89.7a7.46,7.46,0,0,1,6.1-7l92.3-17.9a5.36,5.36,0,0,1,6.4,5.6l-7.4,115A6.19,6.19,0,0,1,749.7,322Z\"/><path class=\"cls-9\" d=\"M741.6,239.4l-70.2,7.5a2,2,0,0,1-2.2-2.1l.8-15.9a1.84,1.84,0,0,1,1.7-1.8l70.5-11a2,2,0,0,1,2.3,2.1l-1.2,19.4A1.84,1.84,0,0,1,741.6,239.4Z\"/><line class=\"cls-10\" x1=\"682.8\" y1=\"225.4\" x2=\"681.7\" y2=\"245.8\"/><line class=\"cls-10\" x1=\"673.7\" y1=\"232.4\" x2=\"678.7\" y2=\"240.5\"/><line class=\"cls-10\" x1=\"679.2\" y1=\"231.6\" x2=\"673.2\" y2=\"241.2\"/><line class=\"cls-10\" x1=\"688.6\" y1=\"231.8\" x2=\"735\" y2=\"225.4\"/><line class=\"cls-10\" x1=\"688.3\" y1=\"237.8\" x2=\"713.3\" y2=\"234.6\"/><path class=\"cls-12\" d=\"M739.5,271.7l-69.6,2.7a1.92,1.92,0,0,1-2-2.1l.8-15.8a2,2,0,0,1,1.8-1.9l70-6.2a1.94,1.94,0,0,1,2.1,2.1l-1.2,19.2A2,2,0,0,1,739.5,271.7Z\"/><line class=\"cls-10\" x1=\"681.3\" y1=\"253.8\" x2=\"680.2\" y2=\"274\"/><line class=\"cls-10\" x1=\"672.2\" y1=\"260.1\" x2=\"677.2\" y2=\"268.6\"/><line class=\"cls-10\" x1=\"677.7\" y1=\"259.7\" x2=\"671.7\" y2=\"268.9\"/><line class=\"cls-10\" x1=\"687.1\" y1=\"260.6\" x2=\"733.1\" y2=\"257.3\"/><line class=\"cls-10\" x1=\"686.7\" y1=\"266.5\" x2=\"711.5\" y2=\"265.1\"/><path class=\"cls-11\" d=\"M737.4,303.8l-69-2a2,2,0,0,1-1.9-2.1l.8-15.7a2.13,2.13,0,0,1,1.9-1.9l69.4-1.4a2,2,0,0,1,2,2.1l-1.2,19.1A2,2,0,0,1,737.4,303.8Z\"/><line class=\"cls-10\" x1=\"679.8\" y1=\"282\" x2=\"678.7\" y2=\"302.1\"/><line class=\"cls-10\" x1=\"670.7\" y1=\"287.7\" x2=\"675.7\" y2=\"296.4\"/><line class=\"cls-10\" x1=\"676.2\" y1=\"287.6\" x2=\"670.3\" y2=\"296.3\"/><line class=\"cls-10\" x1=\"685.5\" y1=\"289.2\" x2=\"731.2\" y2=\"289.1\"/><line class=\"cls-10\" x1=\"685.2\" y1=\"295\" x2=\"709.8\" y2=\"295.3\"/><path class=\"cls-20\" d=\"M351.5,264.1l-14.3-67.6a2.41,2.41,0,0,1,2.4-2.9h67.3a4,4,0,0,1,3.9,3.3L422,265.2a2.42,2.42,0,0,1-2.4,2.8l-64.2-.8A3.89,3.89,0,0,1,351.5,264.1Z\"/><path class=\"cls-9\" d=\"M350,265.7l-14.3-67.6a2.41,2.41,0,0,1,2.4-2.9h67.3a4,4,0,0,1,3.9,3.3l11.2,68.3a2.42,2.42,0,0,1-2.4,2.8l-64.2-.8A4,4,0,0,1,350,265.7Z\"/><polygon class=\"cls-10\" points=\"357.7 260.3 345.8 203.9 401.4 203.9 410.7 260.9 357.7 260.3\"/><line class=\"cls-10\" x1=\"362.2\" y1=\"203.9\" x2=\"374.2\" y2=\"260.5\"/><line class=\"cls-10\" x1=\"348.8\" y1=\"218.2\" x2=\"403.4\" y2=\"218.2\"/><line class=\"cls-10\" x1=\"351.7\" y1=\"232\" x2=\"405.8\" y2=\"232\"/><line class=\"cls-10\" x1=\"355\" y1=\"246\" x2=\"408.4\" y2=\"246.7\"/><line class=\"cls-10\" x1=\"371.8\" y1=\"210.9\" x2=\"393.1\" y2=\"210.9\"/><line class=\"cls-10\" x1=\"374.6\" y1=\"225.1\" x2=\"395.9\" y2=\"225.1\"/><line class=\"cls-10\" x1=\"377.8\" y1=\"239\" x2=\"399.1\" y2=\"239.3\"/><line class=\"cls-10\" x1=\"380.8\" y1=\"252.7\" x2=\"401.3\" y2=\"253.2\"/><line class=\"cls-23\" x1=\"351.6\" y1=\"207.5\" x2=\"360.4\" y2=\"214.2\"/><line class=\"cls-23\" x1=\"358\" y1=\"207.5\" x2=\"353.5\" y2=\"214.2\"/><line class=\"cls-23\" x1=\"357.2\" y1=\"235.7\" x2=\"366\" y2=\"242.3\"/><line class=\"cls-23\" x1=\"363.6\" y1=\"235.7\" x2=\"359\" y2=\"242.3\"/><line class=\"cls-23\" x1=\"360.4\" y1=\"249.6\" x2=\"369.2\" y2=\"256.3\"/><line class=\"cls-23\" x1=\"366.8\" y1=\"249.6\" x2=\"362.3\" y2=\"256.3\"/><polyline class=\"cls-24\" points=\"355 224.3 358 227.4 362.3 221.8\"/><path class=\"cls-19\" d=\"M670.8,319.9s.1-9.5-2.4-15c0,0-27,4.9-32,7.8,0,0,4.5,4.5,5.9,10S670.6,329.2,670.8,319.9Z\"/><path class=\"cls-12\" d=\"M671.6,326.8s1.7-17.3,2.5-20.9c0,0-21.9,1.8-30.1,6.5l2.2,18.3Z\"/><path class=\"cls-19\" d=\"M695.9,340.2s-.1-12.8,3.4-18.9c0,0-20.6.4-25.2,3.1s-4,15.7-4,15.7S695,341.6,695.9,340.2Z\"/><rect class=\"cls-9\" x=\"676.6\" y=\"334.6\" width=\"22.7\" height=\"62.5\"/><circle class=\"cls-10\" cx=\"688\" cy=\"384.1\" r=\"4.4\"/><polygon class=\"cls-9\" points=\"653.9 397.2 653.9 319.9 640.3 323.2 640.3 389.1 653.9 397.2\"/><rect class=\"cls-11\" x=\"653.9\" y=\"319.9\" width=\"22.7\" height=\"77.3\"/><circle class=\"cls-10\" cx=\"665.2\" cy=\"384.1\" r=\"4.4\"/><line class=\"cls-10\" x1=\"659.7\" y1=\"367.2\" x2=\"670.8\" y2=\"367.2\"/><line class=\"cls-10\" x1=\"659.7\" y1=\"371.6\" x2=\"670.8\" y2=\"371.6\"/></svg>\n"
  },
  {
    "path": "resources/views/errors/images/404-image.blade.php",
    "content": "<svg id=\"illustration\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 1024 768\"><defs><style>.cls-1,.cls-14,.cls-15,.cls-16,.cls-17,.cls-18,.cls-21,.cls-22,.cls-4{fill:none;}.cls-2{fill:#eaf9f3;}.cls-3{clip-path:url(#clip-path);}.cls-4{stroke:#b8d8c7;}.cls-14,.cls-15,.cls-16,.cls-17,.cls-18,.cls-21,.cls-22,.cls-4{stroke-linecap:round;stroke-linejoin:round;}.cls-14,.cls-15,.cls-17,.cls-18,.cls-21,.cls-4{stroke-width:1.8px;}.cls-5{fill:#b8d8c7;}.cls-6{fill:#f8ab5d;}.cls-7{fill:#ffe779;}.cls-8{fill:#22272e;}.cls-9{fill:#63737a;}.cls-10{fill:#b0d7c0;}.cls-11{fill:#f4c2c9;}.cls-12{fill:#6dafa7;}.cls-13{fill:#fff;}.cls-14{stroke:#fff;}.cls-15,.cls-16{stroke:#63737a;}.cls-16{stroke-width:1.8px;}.cls-17,.cls-22{stroke:#22272e;}.cls-18{stroke:#e26e85;}.cls-19{fill:#e26e85;}.cls-20{clip-path:url(#clip-path-2);}.cls-21{stroke:#f8ab5d;}.cls-22{stroke-width:1.8px;}</style><clipPath id=\"clip-path\"><path class=\"cls-1\" d=\"M766.3,546.8l-520-14.9a48.07,48.07,0,0,1-46.5-43.3l-25.1-248a48.18,48.18,0,0,1,47.2-53l578.8-8a48.21,48.21,0,0,1,48.5,54.1L815.5,504.6A48.27,48.27,0,0,1,766.3,546.8Z\"/></clipPath><clipPath id=\"clip-path-2\"><path class=\"cls-1\" d=\"M322.9,252.6c2.2-6.5,10.6-10.4,17.4-9.8,7,.6,20.4.8,33.3,4.8,22,6.8,27.3,10.8,28.6,12,7.3,7,6.6,17.4,2.4,46.1-2.7,18.9-5,23.7-4.4,33s2.3,25.8,3.4,29.2-1.7,9.3-4.1,11.4-21.8,6.5-39.8,6.1-46.3-5.3-50.8-8.3-7.7-8.2-6.7-12.7A200.52,200.52,0,0,1,307,344c2.8-9.5,3-21.9,7.4-41.8C317.8,287.5,318.3,266.2,322.9,252.6Z\"/></clipPath></defs><path class=\"cls-2\" d=\"M766.3,546.8l-520-14.9a48.07,48.07,0,0,1-46.5-43.3l-25.1-248a48.18,48.18,0,0,1,47.2-53l578.8-8a48.21,48.21,0,0,1,48.5,54.1L815.5,504.6A48.27,48.27,0,0,1,766.3,546.8Z\"/><g class=\"cls-3\"><path class=\"cls-4\" d=\"M610.6,558.6l1.8,40.5a15,15,0,0,1-15,15H181.8a15,15,0,0,1-15-15V363.4a15,15,0,0,1,15-15H597.3a15,15,0,0,1,15,15V522.8\"/><path class=\"cls-4\" d=\"M703.7,523.8V291.7a15,15,0,0,1,15-15h124a15,15,0,0,1,15,15V636a15,15,0,0,1-15,15h-124a15,15,0,0,1-15-15V561.1\"/><path class=\"cls-4\" d=\"M259.9,278.1H170v-8.9h89.9a1.79,1.79,0,0,1,1.8,1.8v5.2A1.76,1.76,0,0,1,259.9,278.1Z\"/><path class=\"cls-4\" d=\"M246.2,348.4H225.9a4.32,4.32,0,0,1-4.3-3.8L220,330.2a4.33,4.33,0,0,1,4.3-4.8h23.5a4.34,4.34,0,0,1,4.3,4.8l-1.6,14.4A4.25,4.25,0,0,1,246.2,348.4Z\"/><path class=\"cls-5\" d=\"M233.7,325.5s-8-.8-9.6-11.6c0,0,7.2,2.1,9.5,7.2,0,0,1-11.4,6.4-12.5,0,0,2.4,8.5-1.4,12.7,0,0,2.9-4.8,10.3-4.7a13.6,13.6,0,0,1-9.2,8.8\"/><path class=\"cls-4\" d=\"M792.3,276.7H772a4.32,4.32,0,0,1-4.3-3.8l-1.6-14.4a4.33,4.33,0,0,1,4.3-4.8h23.5a4.34,4.34,0,0,1,4.3,4.8l-1.6,14.4A4.32,4.32,0,0,1,792.3,276.7Z\"/><path class=\"cls-5\" d=\"M779.7,253.8s-8-.8-9.6-11.6c0,0,7.2,2.1,9.5,7.2,0,0,1-11.4,6.4-12.5,0,0,2.4,8.5-1.4,12.7,0,0,2.9-4.8,10.3-4.7a13.6,13.6,0,0,1-9.2,8.8\"/><path class=\"cls-4\" d=\"M594.2,398.1H504a4.23,4.23,0,0,1-4.2-4.2V366.5a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,594.2,398.1Z\"/><path class=\"cls-5\" d=\"M559.4,372H538.6a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,559.4,372Z\"/><path class=\"cls-4\" d=\"M594.2,444H504a4.23,4.23,0,0,1-4.2-4.2V412.4a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,594.2,444Z\"/><path class=\"cls-5\" d=\"M559.4,417.8H538.6a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,559.4,417.8Z\"/><path class=\"cls-4\" d=\"M479.2,398.1H389a4.23,4.23,0,0,1-4.2-4.2V366.5a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,479.2,398.1Z\"/><path class=\"cls-5\" d=\"M444.5,372H423.7a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,444.5,372Z\"/><path class=\"cls-4\" d=\"M479.2,444H389a4.23,4.23,0,0,1-4.2-4.2V412.4a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,479.2,444Z\"/><path class=\"cls-5\" d=\"M444.5,417.8H423.7a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,444.5,417.8Z\"/><path class=\"cls-4\" d=\"M594.2,488.8H504a4.23,4.23,0,0,1-4.2-4.2V457.2A4.23,4.23,0,0,1,504,453h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,594.2,488.8Z\"/><path class=\"cls-5\" d=\"M559.4,462.7H538.6a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,559.4,462.7Z\"/><path class=\"cls-4\" d=\"M479.2,488.8H389a4.23,4.23,0,0,1-4.2-4.2V457.2A4.23,4.23,0,0,1,389,453h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,479.2,488.8Z\"/><path class=\"cls-5\" d=\"M444.5,462.7H423.7a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,444.5,462.7Z\"/><path class=\"cls-4\" d=\"M884.9,381.5H725a4.65,4.65,0,0,1-4.6-4.6V297.2a4.65,4.65,0,0,1,4.6-4.6H884.9a4.65,4.65,0,0,1,4.6,4.6v79.7A4.53,4.53,0,0,1,884.9,381.5Z\"/><path class=\"cls-4\" d=\"M884.9,480.5H725a4.65,4.65,0,0,1-4.6-4.6V396.2a4.65,4.65,0,0,1,4.6-4.6H884.9a4.65,4.65,0,0,1,4.6,4.6v79.7A4.59,4.59,0,0,1,884.9,480.5Z\"/><rect class=\"cls-4\" x=\"751.1\" y=\"331.2\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"760.9\" y=\"345\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"213.8\" y=\"218.9\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"223.6\" y=\"232.6\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"193.6\" y=\"239.8\" width=\"9.9\" height=\"29.4\"/><rect class=\"cls-4\" x=\"203.5\" y=\"210.3\" width=\"10.3\" height=\"58.8\"/><path class=\"cls-5\" d=\"M754.8,436.8l1.1-14.9a1.65,1.65,0,0,0-1.7-1.8h-8.5a1.71,1.71,0,0,0-1.7,1.8l1.1,14.9s-9,5.8-8.9,10.6c.1,3.7,2.3,21.4,3.3,29.2a4.32,4.32,0,0,0,4.3,3.8h12.4a4.32,4.32,0,0,0,4.3-3.8c1-7.8,3.2-25.5,3.3-29.2C763.8,442.6,754.8,436.8,754.8,436.8Z\"/><path class=\"cls-5\" d=\"M803,337.9l1.1-14.9a1.65,1.65,0,0,0-1.7-1.8h-8.6a1.71,1.71,0,0,0-1.7,1.8l1.1,14.9s-9,5.8-8.9,10.6c.1,3.7,2.3,21.4,3.3,29.2a4.32,4.32,0,0,0,4.3,3.8h12.4a4.32,4.32,0,0,0,4.3-3.8c1-7.8,3.2-25.5,3.3-29.2C812,343.7,803,337.9,803,337.9Z\"/><line class=\"cls-4\" x1=\"180.4\" y1=\"518.1\" x2=\"883.4\" y2=\"525.8\"/></g><path class=\"cls-6\" d=\"M550.5,162.2c-3.9,8.3-12.9,13.8-19.2,12.1-5.5-1.5-6.5-8-3-14.5,3.4-6.2,10.2-11.2,16.1-11.3C550.9,148.3,554.1,154.3,550.5,162.2Z\"/><path class=\"cls-7\" d=\"M548.6,160.5c-3.9,8.3-12.9,13.8-19.2,12.1-5.5-1.5-6.5-8-3-14.5,3.4-6.2,10.2-11.2,16.1-11.3C549,146.6,552.2,152.6,548.6,160.5Z\"/><path class=\"cls-6\" d=\"M545.4,160.1c-2.9,6.2-9.7,10.4-14.5,9.3-4.3-1-5.3-6-2.6-11.1,2.6-4.9,8.1-8.8,12.6-8.8C546,149.6,548.2,154.2,545.4,160.1Z\"/><path class=\"cls-7\" d=\"M532.4,165.4l.4-.7c.1-.3.1-.5-.1-.6a1.77,1.77,0,0,1-1.1-.7c-.1-.1-.1-.4.1-.7l.1-.1c.2-.3.6-.4.7-.2a2.33,2.33,0,0,0,1.3.7,2.36,2.36,0,0,0,2.5-1.4,1.55,1.55,0,0,0-.6-2.2,2.05,2.05,0,0,1-.8-3,4.13,4.13,0,0,1,3-2.3c.2,0,.4-.2.6-.5l.4-.7a.75.75,0,0,1,.7-.5h0c.2,0,.3.2.2.5l-.3.6c-.1.3-.1.5.2.5a1.88,1.88,0,0,1,.9.4c.2.1.1.4-.1.7l-.1.1c-.2.3-.6.4-.7.2a1.9,1.9,0,0,0-1.2-.4,2.27,2.27,0,0,0-2.2,1.3c-.4.8-.1,1.3.8,2a2.26,2.26,0,0,1,.7,3.3,4.45,4.45,0,0,1-3.4,2.5.74.74,0,0,0-.6.5l-.4.8a.87.87,0,0,1-.7.5h0C532.3,166,532.2,165.7,532.4,165.4Z\"/><path class=\"cls-8\" d=\"M732.8,340.9,694,338.5a4.83,4.83,0,0,1-4.5-5.2l5.9-79.6a5.58,5.58,0,0,1,5.2-5.1l39.7-2.4a4.86,4.86,0,0,1,5.1,5.2l-6.6,84.4A5.71,5.71,0,0,1,732.8,340.9Z\"/><path class=\"cls-8\" d=\"M730.1,340.9l-38.8-2.4a4.83,4.83,0,0,1-4.5-5.2l5.9-79.6a5.58,5.58,0,0,1,5.2-5.1l39.7-2.4a4.86,4.86,0,0,1,5.1,5.2l-6.6,84.4A5.71,5.71,0,0,1,730.1,340.9Z\"/><path class=\"cls-9\" d=\"M718.2,255.5l-7.4.4a.94.94,0,0,1-1-1h0a1.11,1.11,0,0,1,1.1-1.1l7.4-.4a.94.94,0,0,1,1,1h0A1.11,1.11,0,0,1,718.2,255.5Z\"/><path class=\"cls-9\" d=\"M722.5,255.3h-.2a.94.94,0,0,1-1-1h0a1.38,1.38,0,0,1,1.2-1.2h.2a.94.94,0,0,1,1,1h0A1.38,1.38,0,0,1,722.5,255.3Z\"/><path class=\"cls-9\" d=\"M710.9,268.8l-9.9.3a1.69,1.69,0,0,1-1.7-1.9h0a2.24,2.24,0,0,1,2-2l9.9-.4a1.69,1.69,0,0,1,1.7,1.9h0A2.16,2.16,0,0,1,710.9,268.8Z\"/><path class=\"cls-9\" d=\"M708.3,303.2l-9.8-.1a1.8,1.8,0,0,1-1.7-1.9h0a2.14,2.14,0,0,1,2-1.9l9.8.1a1.74,1.74,0,0,1,1.7,1.9h0A2.05,2.05,0,0,1,708.3,303.2Z\"/><path class=\"cls-9\" d=\"M706.2,331l-9.8-.5a1.83,1.83,0,0,1-1.7-2h0a1.88,1.88,0,0,1,1.9-1.8l9.8.4a1.77,1.77,0,0,1,1.7,2h0A1.9,1.9,0,0,1,706.2,331Z\"/><path class=\"cls-10\" d=\"M729,290.9l-29.2.1a2.1,2.1,0,0,1-2.1-2.3l.9-12.7a2.05,2.05,0,0,1,2-1.9l29.3-.8a2.1,2.1,0,0,1,2.1,2.3l-1,13.3A2,2,0,0,1,729,290.9Z\"/><path class=\"cls-7\" d=\"M707.6,320.3l-10-.4a2.08,2.08,0,0,1-2-2.3l.6-7.6a2,2,0,0,1,2.1-1.9l10.1.2a2.22,2.22,0,0,1,2.1,2.3l-.6,7.8A2.28,2.28,0,0,1,707.6,320.3Z\"/><path class=\"cls-11\" d=\"M726.6,320.9l-10.7-.4a2.08,2.08,0,0,1-2-2.3l.6-7.9a2,2,0,0,1,2.1-1.9l10.8.2a2.22,2.22,0,0,1,2.1,2.3l-.6,8.1A2.26,2.26,0,0,1,726.6,320.9Z\"/><path class=\"cls-8\" d=\"M487.2,217.8l-32.5,1.5a4,4,0,0,1-4.1-4.7l5.4-54a6.38,6.38,0,0,1,5.2-5.6l33.1-4.3c2.9-.4,4.9,1.7,4.6,4.6l-6.1,57.1A6.18,6.18,0,0,1,487.2,217.8Z\"/><path class=\"cls-8\" d=\"M484.8,216.7l-32.5,1.5a4,4,0,0,1-4.1-4.7l5.4-54a6.38,6.38,0,0,1,5.2-5.6l33.1-4.3c2.9-.4,4.9,1.7,4.6,4.6l-6.1,57.1A6.08,6.08,0,0,1,484.8,216.7Z\"/><path class=\"cls-11\" d=\"M486.3,167.8,461,170.5a1.27,1.27,0,0,1-1.4-1.4l.6-6.2a1.18,1.18,0,0,1,1.1-1.1l25.4-3a1.27,1.27,0,0,1,1.4,1.4l-.7,6.5A1.11,1.11,0,0,1,486.3,167.8Z\"/><path class=\"cls-10\" d=\"M462.8,185l-3.3.3a1.27,1.27,0,0,1-1.4-1.4l.4-3.6a1.18,1.18,0,0,1,1.1-1.1l3.3-.3a1.27,1.27,0,0,1,1.4,1.4l-.4,3.6A1.18,1.18,0,0,1,462.8,185Z\"/><path class=\"cls-10\" d=\"M484.7,183.1l-3.6.3a1.27,1.27,0,0,1-1.4-1.4l.4-3.8a1.18,1.18,0,0,1,1.1-1.1l3.6-.4a1.27,1.27,0,0,1,1.4,1.4l-.4,3.8A1.28,1.28,0,0,1,484.7,183.1Z\"/><path class=\"cls-10\" d=\"M473.6,184l-3.4.3a1.27,1.27,0,0,1-1.4-1.4l.4-3.7a1.18,1.18,0,0,1,1.1-1.1l3.4-.3a1.27,1.27,0,0,1,1.4,1.4l-.4,3.7A1.11,1.11,0,0,1,473.6,184Z\"/><path class=\"cls-10\" d=\"M461.5,197.3l-3.3.2a1.31,1.31,0,0,1-1.4-1.4l.4-3.6a1.28,1.28,0,0,1,1.2-1.1l3.3-.3a1.27,1.27,0,0,1,1.4,1.4l-.4,3.6A1.29,1.29,0,0,1,461.5,197.3Z\"/><path class=\"cls-10\" d=\"M483.4,195.8l-3.6.3a1.31,1.31,0,0,1-1.4-1.4l.4-3.7a1.28,1.28,0,0,1,1.2-1.1l3.6-.3A1.27,1.27,0,0,1,485,191l-.4,3.8A1.57,1.57,0,0,1,483.4,195.8Z\"/><path class=\"cls-10\" d=\"M472.3,196.6l-3.4.2a1.31,1.31,0,0,1-1.4-1.4l.4-3.7a1.28,1.28,0,0,1,1.2-1.1l3.4-.3a1.27,1.27,0,0,1,1.4,1.4l-.4,3.7A1.49,1.49,0,0,1,472.3,196.6Z\"/><path class=\"cls-10\" d=\"M460.2,209.6l-3.2.2a1.24,1.24,0,0,1-1.3-1.4l.4-3.6a1.28,1.28,0,0,1,1.2-1.1l3.2-.2a1.19,1.19,0,0,1,1.3,1.4l-.4,3.6A1.2,1.2,0,0,1,460.2,209.6Z\"/><path class=\"cls-7\" d=\"M482,208.4l-3.6.2a1.24,1.24,0,0,1-1.3-1.4l.4-3.7a1.28,1.28,0,0,1,1.2-1.1l3.6-.2a1.19,1.19,0,0,1,1.3,1.4l-.4,3.8A1.29,1.29,0,0,1,482,208.4Z\"/><path class=\"cls-7\" d=\"M471,209l-3.4.2a1.24,1.24,0,0,1-1.3-1.4l.4-3.6a1.28,1.28,0,0,1,1.2-1.1l3.4-.2a1.19,1.19,0,0,1,1.3,1.4l-.4,3.7A1.29,1.29,0,0,1,471,209Z\"/><path class=\"cls-6\" d=\"M518.7,217.2,675.3,201a4.65,4.65,0,0,1,5.1,5L667,358.4a7,7,0,0,1-7.3,6.4l-152.1-8.2a4.68,4.68,0,0,1-4.4-4.9l9.2-127.9A7.15,7.15,0,0,1,518.7,217.2Z\"/><path class=\"cls-7\" d=\"M513,215.5l158.4-16.4a4.63,4.63,0,0,1,5.1,5.1L663,358.3a6.93,6.93,0,0,1-7.4,6.4l-153.9-8.3a4.64,4.64,0,0,1-4.4-5L506.6,222A7.33,7.33,0,0,1,513,215.5Z\"/><polygon class=\"cls-12\" points=\"529.4 248.7 522.2 249.1 521.3 262.5 528.4 262.3 529.4 248.7\"/><polygon class=\"cls-10\" points=\"521.3 262.5 520.8 269.1 527.9 268.9 528.4 262.3 521.3 262.5\"/><polygon class=\"cls-12\" points=\"544.9 230.5 537.7 231 536.5 248.3 543.6 248 544.9 230.5\"/><polygon class=\"cls-10\" points=\"536.5 248.3 535 268.7 542.1 268.5 543.6 248 536.5 248.3\"/><polygon class=\"cls-12\" points=\"551.5 236.8 550.7 247.6 557.8 247.2 558.6 236.3 551.5 236.8\"/><polygon class=\"cls-10\" points=\"550.7 247.6 549.2 268.4 556.3 268.2 557.8 247.2 550.7 247.6\"/><polygon class=\"cls-12\" points=\"572 246.4 564.9 246.8 564.4 254.4 571.5 254 572 246.4\"/><polygon class=\"cls-10\" points=\"564.4 254.4 563.4 268 570.5 267.8 571.5 254 564.4 254.4\"/><polygon class=\"cls-12\" points=\"587.1 234.3 586.2 245.7 585.7 253.2 578.6 253.6 579.1 246 580 234.8 587.1 234.3\"/><polygon class=\"cls-10\" points=\"578.6 253.6 577.5 267.6 584.6 267.5 585.7 253.2 578.6 253.6\"/><path class=\"cls-8\" d=\"M644.2,226.1l-12.7,20.1-11.1-15.1a27.35,27.35,0,0,1,15.2-6.3A19.74,19.74,0,0,1,644.2,226.1Z\"/><path class=\"cls-11\" d=\"M654.1,244.6l-22.6,1.6,12.7-20.1C651.2,228.9,655.3,235.9,654.1,244.6Z\"/><path class=\"cls-10\" d=\"M654.1,244.6c0,.3-.1.6-.1.9-2.1,11.9-13.2,21.8-24.9,22.7l2.4-22Z\"/><path class=\"cls-13\" d=\"M631.5,246.2l-2.4,22a12.1,12.1,0,0,1-1.9.1c-11.9,0-19.2-9.7-16.7-21.4a28.35,28.35,0,0,1,9.9-15.7Z\"/><path class=\"cls-12\" d=\"M650.9,285.3,645.7,336,515,333.6l.2-3.9,28.3-19.5a3.6,3.6,0,0,1,4.3.1l10.6,7.8a3.7,3.7,0,0,0,5.2-.8l10.5-14a3.7,3.7,0,0,1,6,.1l9.3,12.9a3.72,3.72,0,0,0,5.3.8h0a3.76,3.76,0,0,1,4.4-.1l6.6,4.7a3.76,3.76,0,0,0,5.3-1l14.8-22.8a3.76,3.76,0,0,1,5.3-1l4.3,3.1a3.69,3.69,0,0,0,5.2-.8Z\"/><path class=\"cls-13\" d=\"M555.8,301.4h-5.7a.91.91,0,0,0-.7.3l-1.3,1.3a1,1,0,0,1-1.4,0l-1-1.3a.91.91,0,0,0-.7-.3h-5.5a.77.77,0,0,1-.8-.9l.8-10.8a1.08,1.08,0,0,1,1-1l16.3-.6a.9.9,0,0,1,.9.9l-.9,11.3A1,1,0,0,1,555.8,301.4Z\"/><path class=\"cls-11\" d=\"M609.2,306.8l-5.7-.1a.91.91,0,0,0-.7.3l-1.3,1.3a.9.9,0,0,1-1.4-.1l-1-1.3a.91.91,0,0,0-.7-.3l-5.4-.1c-.5,0-.8-.4-.8-1l.8-10.9a1.07,1.07,0,0,1,.9-1l16.3-.4a.92.92,0,0,1,.9,1l-.9,11.6A.94.94,0,0,1,609.2,306.8Z\"/><path class=\"cls-8\" d=\"M335.3,595.3c-.4,1.3-1.3,6.5-2,11.3a41.74,41.74,0,0,1-22.1-2.7c.5-5,1-10.2,1-10.2C312.2,590.9,336.1,592.9,335.3,595.3Z\"/><path class=\"cls-11\" d=\"M333.3,606.5c-.6,4.2-1.2,7.9-1.2,7.9s-2.7,6.3-9.5,6.3-12.3-5.7-12.2-8.1c.1-1.1.4-4.9.8-8.8A41.48,41.48,0,0,0,333.3,606.5Z\"/><path class=\"cls-8\" d=\"M310.5,610.7a42.12,42.12,0,0,0,3.1,3.1c1.1,1,4.5-2.1,9.3-1.5s6.3,2.5,6.3,2.5a8.54,8.54,0,0,0,3.1-1.3,22.58,22.58,0,0,0,1.5,7.3c1.5,3.9,9.1,15.3,9.1,17.5s-.5,3.9-2.1,4.6-12.2.8-21.1,1-15.8.7-16.8-2.8,3.1-14.4,4.8-21.1S309.1,610.8,310.5,610.7Z\"/><path class=\"cls-14\" d=\"M312,629.2s10.7-5.7,20.9,0\"/><path class=\"cls-14\" d=\"M314,623.6a31.1,31.1,0,0,1,17,0\"/><path class=\"cls-8\" d=\"M439.1,602.2c-11.4,3.9-23.2,1.5-23.1,1.6-.4-5.6-.9-11.5-.9-11.5,1.5-3.5,23-5.1,23.2-3.6C438.3,589.5,438.7,596.1,439.1,602.2Z\"/><path class=\"cls-11\" d=\"M439.7,612.8s-1.5,4.7-8,7.1-14.8-4.1-14.9-6c-.1-.8-.4-5.4-.8-10.1,0-.1,11.7,2.3,23.1-1.6C439.4,607.7,439.7,612.8,439.7,612.8Z\"/><path class=\"cls-8\" d=\"M416.6,612.5c-.7,0-1.2,1-1.6,7.3s-2.4,20.2,0,22.3,50.3,1.5,55.8,1.1,8.5-4,6.8-6.4S464.1,630,453.7,623s-12.9-8.5-14.1-10.2c0,0,.6-5.7-2.5-4.8s-5.2,8.3-9.2,9.3S423.4,612.1,416.6,612.5Z\"/><path class=\"cls-14\" d=\"M456,623.2s-2.7-.8-8.8,5.7\"/><path class=\"cls-14\" d=\"M449.4,618.9s-4.8-.2-10.3,6.9\"/><line class=\"cls-15\" x1=\"315\" y1=\"605.2\" x2=\"315.6\" y2=\"601.2\"/><line class=\"cls-15\" x1=\"321.9\" y1=\"606.7\" x2=\"322.5\" y2=\"602.7\"/><line class=\"cls-15\" x1=\"329.5\" y1=\"607\" x2=\"330.2\" y2=\"603.4\"/><line class=\"cls-15\" x1=\"420.5\" y1=\"604.3\" x2=\"420.2\" y2=\"600.1\"/><line class=\"cls-15\" x1=\"428.8\" y1=\"604.2\" x2=\"428.5\" y2=\"599.6\"/><line class=\"cls-15\" x1=\"436.3\" y1=\"603\" x2=\"436\" y2=\"598.7\"/><path class=\"cls-8\" d=\"M308.3,371.4a124.2,124.2,0,0,0-2.8,24c-.3,13.7,10.4,56.6,14.3,71.1s3.1,16.8,2.5,19.6-6.6,25-8.6,48-9.2,41.5-8.4,48.6c1.1,9.6,5.2,12.4,6.9,13.5s15.7,5.6,25.2,3.4c0,0,10.1-6.4,12-15.4s.8-19.9,7.3-49.3,9.5-41.5,10.4-53.2c.5-7,.6-27,.7-42.3.1-10.4.1-18.7.2-19.5.3-2,5.2.3,7.8-6.1,1.1-2.9,1.7-8.4,1.8-14.3.2-7.5-.3-15.7-1.3-20.2C374.7,371,309.9,362.6,308.3,371.4Z\"/><path class=\"cls-8\" d=\"M445.5,584.5c-1.7,4.2-4.8,9-7.6,10.1s-15.4,2.8-21.8,2.2c0,0-10.7-3.1-11.8-11.2s.8-17.1-2.8-35.3-6.7-50.4-7.6-59.9-20.5-37.8-29.7-54.9-19.1-48.4-10.9-55.7,37.5-10.6,46.2-4.7c0,0,10.1,24.6,20.2,54,9.3,27,11.2,36.1,12.5,43.9a15.52,15.52,0,0,0,.4,2.1c.4,2.4.9,8.6,1.6,16.6,1.6,20.3,3.5,51.8,4.3,59C439.6,560.7,447.2,580.3,445.5,584.5Z\"/><path class=\"cls-15\" d=\"M362.4,421.4a126.22,126.22,0,0,1,20-5.4\"/><ellipse class=\"cls-16\" cx=\"347.63\" cy=\"488.44\" rx=\"13.4\" ry=\"13.2\" transform=\"matrix(0.2, -0.98, 0.98, 0.2, -199.27, 734.04)\"/><path class=\"cls-15\" d=\"M434.2,491.6a13,13,0,0,1-10.2,4.9,13.3,13.3,0,0,1-.1-26.6,13,13,0,0,1,8.3,3\"/><path class=\"cls-15\" d=\"M310.6,418.7a34.72,34.72,0,0,0,11.2-25.6,82.88,82.88,0,0,1-11.2-1.4\"/><path class=\"cls-15\" d=\"M367.8,439.4c.1-10.4.1-18.7.2-19.5.3-2,5.2.3,7.8-6.1,1.1-2.9,1.7-8.4,1.8-14.3\"/><path class=\"cls-12\" d=\"M397.3,256.9s8.2.4,21.4,26.8,17.9,35.9,17.9,35.9,8.7-2.1,22.9-4.4,34.2-5.2,34.2-5.2,5.4.1,7.7,7.8a12.16,12.16,0,0,1-2.4,11.4,4.5,4.5,0,0,1-1.9,1.4c-6.1,2.6-41.7,17.6-53.8,20.2-13.3,2.8-19.8,2.4-31.6-13.8s-21.1-28.8-25.4-35.3C382,294.9,378.9,257.9,397.3,256.9Z\"/><path class=\"cls-17\" d=\"M419.8,346.2s-.7-5.3,9.6-5.3,15.6,7.7,13.1,9.9\"/><path class=\"cls-17\" d=\"M436.6,319.5s-4.3,2-5.2,5\"/><path class=\"cls-11\" d=\"M494.2,310.8s4.4-1.6,5.5-2.2,3.5-4.8,5.5-7.4,7.7-4.1,9.3-3.8a3.28,3.28,0,0,1,2.2,1.3s5-1.8,8.4-3.2,9.7-4.5,10.6-2c.5,1.5-3.4,3.7-6.1,5.2-3.3,1.9-5.5,3.3-5.5,3.3a4.19,4.19,0,0,1,2,2.9c.4,2.1,1.5,4.4-.5,7.6-.6.9,1.7,3.4-.1,5.7-3.1,3.7-10.6,5.6-14.6,6.8s-13.4,1.8-13.4,1.8-3-.7-4.3-7.2S494.2,310.8,494.2,310.8Z\"/><path class=\"cls-18\" d=\"M516.7,298.7s.7,1.8,1.5,4.5,1.4,4.8-.7,4.9-4-3.1-4.8-4.7\"/><path class=\"cls-18\" d=\"M514.1,305.7s2.3,4.6-3,8.6\"/><line class=\"cls-18\" x1=\"524.2\" y1=\"302\" x2=\"518.6\" y2=\"304.6\"/><path class=\"cls-18\" d=\"M515.8,307.5s-1,1.6,0,2.5,6.5-1.1,10.5-3.4\"/><path class=\"cls-18\" d=\"M516.7,310.2a2.06,2.06,0,0,0-.9,2.7c.8,1.8,5.1,1.1,9.8-.4\"/><path class=\"cls-18\" d=\"M517.6,314s-2.5.3-1.2,2.8c.8,1.5,5.6,1,6.6,1.4\"/><path class=\"cls-17\" d=\"M488.4,311.7c-.8,1.4-1.8,4.1-1.1,8.9a13.89,13.89,0,0,0,6.2,10.3\"/><path class=\"cls-11\" d=\"M364.9,220.3s-3.2,16.1-5,20.5,8,11.3,17.8,11.7,8.8-5.3,8.8-5.3l2.9-16C389.4,231.3,368.4,216.6,364.9,220.3Z\"/><path class=\"cls-19\" d=\"M369.3,225.1c-1.4,12.2,7.4,18.1,17.2,22.7v-.6l1.6-8.5C380.8,236.3,374.4,231.1,369.3,225.1Z\"/><path class=\"cls-7\" d=\"M322.9,252.6c2.2-6.5,10.6-10.4,17.4-9.8,7,.6,20.4.8,33.3,4.8,22,6.8,27.3,10.8,28.6,12,7.3,7,6.6,17.4,2.4,46.1-2.7,18.9-5,23.7-4.4,33s2.3,25.8,3.4,29.2-1.7,9.3-4.1,11.4-21.8,6.5-39.8,6.1-46.3-5.3-50.8-8.3-7.7-8.2-6.7-12.7A200.52,200.52,0,0,1,307,344c2.8-9.5,3-21.9,7.4-41.8C317.8,287.5,318.3,266.2,322.9,252.6Z\"/><g class=\"cls-20\"><ellipse class=\"cls-6\" cx=\"402.81\" cy=\"228.98\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-59.88 204.46) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"419.31\" cy=\"240.2\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-63.16 213.03) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"382.62\" cy=\"239.1\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-66.55 196.5) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"399.21\" cy=\"250.28\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-69.8 205.1) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"418.01\" cy=\"259.38\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-71.88 214.48) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"434.51\" cy=\"270.6\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-75.16 223.05) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"397.83\" cy=\"269.5\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-78.55 206.52) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"414.42\" cy=\"280.68\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-81.79 215.12) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"362.53\" cy=\"249.18\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-73.18 188.57) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"379.03\" cy=\"260.4\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-76.46 197.14) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"342.3\" cy=\"259.21\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-79.81 180.58) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"358.89\" cy=\"270.39\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-83.06 189.18) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"377.69\" cy=\"279.49\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-85.15 198.56) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"394.23\" cy=\"290.81\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-88.46 207.16) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"357.5\" cy=\"289.62\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-91.81 190.6) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"374.09\" cy=\"300.8\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-95.06 199.2) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"433.62\" cy=\"290.58\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-84.19 224.76) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"450.13\" cy=\"301.8\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-87.47 233.33) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"413.39\" cy=\"300.61\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-90.82 216.77) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"429.99\" cy=\"311.79\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-94.07 225.38) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"448.83\" cy=\"320.98\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-96.19 234.78) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"465.33\" cy=\"332.2\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-99.47 243.35) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"428.6\" cy=\"331.01\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-102.82 226.79) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"445.19\" cy=\"342.19\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-106.07 235.39) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"393.3\" cy=\"310.69\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-97.46 208.84) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"409.8\" cy=\"321.91\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-100.73 217.41) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"373.11\" cy=\"320.81\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-104.12 200.88) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"389.71\" cy=\"331.99\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-107.37 209.49) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"408.5\" cy=\"341.09\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-109.45 218.86) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"425.01\" cy=\"352.32\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-112.73 227.43) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"404.91\" cy=\"362.39\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-119.37 219.5) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"322\" cy=\"269.39\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-86.51 172.57) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"338.51\" cy=\"280.62\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-89.79 181.14) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"301.91\" cy=\"279.47\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-93.15 164.65) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"318.41\" cy=\"290.7\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-96.42 173.22) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"337.21\" cy=\"299.8\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-98.51 182.59) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"353.8\" cy=\"310.98\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-101.76 191.2) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"317.11\" cy=\"309.88\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-105.14 174.66) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"333.61\" cy=\"321.1\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-108.42 183.23) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"281.72\" cy=\"289.6\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-99.81 156.68) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"298.32\" cy=\"300.77\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-103.06 165.29) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"261.58\" cy=\"299.59\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-106.41 148.73) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"278.13\" cy=\"310.9\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-109.72 157.33) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"296.93\" cy=\"320\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-111.81 166.7) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"313.52\" cy=\"331.18\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-115.06 175.31) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"276.79\" cy=\"329.99\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-118.41 158.74) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"293.29\" cy=\"341.21\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-121.69 167.32) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"332.73\" cy=\"341.07\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-117.45 184.95) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"384.62\" cy=\"372.58\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-126.07 211.5) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"347.88\" cy=\"371.39\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-129.42 194.94) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"364.43\" cy=\"382.7\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-132.73 203.54) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"312.5\" cy=\"351.11\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-124.08 176.96) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"329.09\" cy=\"362.28\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-127.33 185.56) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"292.4\" cy=\"361.19\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-130.72 169.03) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"308.9\" cy=\"372.41\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-134 177.6) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"327.7\" cy=\"381.51\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-136.08 186.97) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"344.29\" cy=\"392.69\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-139.33 195.58) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"307.6\" cy=\"391.59\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-142.72 179.05) rotate(-26.58)\"/><ellipse class=\"cls-6\" cx=\"324.11\" cy=\"402.81\" rx=\"4.9\" ry=\"2.4\" transform=\"translate(-145.99 187.62) rotate(-26.58)\"/></g><path class=\"cls-21\" d=\"M350.4,325.9a183.07,183.07,0,0,0,33.8,3.9,3.11,3.11,0,0,1,3,2.7,19.84,19.84,0,0,0,5.1,10.8,2.79,2.79,0,0,1,.8,2c.1,4.2.3,18.4-2.5,20.6-3.2,2.4-37.2,4.6-58.3-1.3a3.19,3.19,0,0,1-2.4-3c.1-4.1.3-12.7,1-18.1a3.47,3.47,0,0,1,1.9-2.5c3.3-1.5,10.9-5.5,13.6-13A3.57,3.57,0,0,1,350.4,325.9Z\"/><path class=\"cls-12\" d=\"M358.6,238.4a1.57,1.57,0,0,1,2.5-.5c1.9,2,6,5,13.4,6.4,11.3,2.1,12.4.4,12.4.4s1.8.6,2,2.1a26.91,26.91,0,0,1-.8,7.2c-.6,1.9-9,2.1-15.7.7a30.38,30.38,0,0,1-15.7-8.1,2.3,2.3,0,0,1-.5-2.6C356.8,242.5,357.8,240.3,358.6,238.4Z\"/><path class=\"cls-11\" d=\"M407.9,201.3a35.58,35.58,0,0,1-2,12.6c-2,5.2-5.3,19.7-11.8,24.4s-20.7,3.8-26.9-8.3-4.2-24.8-1-35,16.4-13.9,27.9-9.7S407.9,196.8,407.9,201.3Z\"/><path class=\"cls-8\" d=\"M365.9,208.3a13.91,13.91,0,0,1,1.7,2.9c.9,2.1,2.8.9,3.5-2.9s2.3-6.5,3.5-6.3a7,7,0,0,0,7.9-3.7c2.5-4.6,3.6-3.9,3.6-3.9s2-4.8,7.2,2.1,8.5,12.3,14.7,11.2,11.7-11.2,7-20.9-19.5-12-30.5-9.1-16.7.5-23.3,6.1-5,11.5-5.4,18.1-3.8,10.1.7,16,3.3,11.4,5.8,14.7c0,0,2.7-8.7,2.4-15S365.9,208.3,365.9,208.3Z\"/><path class=\"cls-17\" d=\"M395.6,213.8a9.78,9.78,0,0,1-9.6,9.5,9.38,9.38,0,0,1-9.3-9.7,9.84,9.84,0,0,1,9.8-9.9A9.5,9.5,0,0,1,395.6,213.8Z\"/><ellipse class=\"cls-22\" cx=\"404.96\" cy=\"217.95\" rx=\"9\" ry=\"6.3\" transform=\"translate(82.47 545.81) rotate(-73.76)\"/><path class=\"cls-17\" d=\"M399.1,215.9s-.1-2-3.6-.9\"/><line class=\"cls-17\" x1=\"377.5\" y1=\"209.5\" x2=\"365.9\" y2=\"207.4\"/><path class=\"cls-11\" d=\"M366.9,210.1s-.9-5.3-5.2-5.4-6.9,13.1,3.8,14.9\"/><path class=\"cls-8\" d=\"M361,208.8a2.53,2.53,0,0,1,2.7,1,3.29,3.29,0,0,1,.4,1.7c0,.3-.1.5-.1.8s-.1.4-.1.6a3.75,3.75,0,0,0-.1,1,.84.84,0,0,0,.2.7,6.21,6.21,0,0,0,1.9,1.4,3.36,3.36,0,0,1-2.9-.3,2.37,2.37,0,0,1-.9-1.5,4.19,4.19,0,0,1,.1-1.6c.1-.2.1-.5.2-.7s.1-.3.1-.5a1.1,1.1,0,0,0,0-.8A2.85,2.85,0,0,0,361,208.8Z\"/><path class=\"cls-8\" d=\"M397.7,214.3a11.38,11.38,0,0,0,.7,3.3,5.39,5.39,0,0,0,.7,1.3,4.47,4.47,0,0,1,.9,1.7,4.7,4.7,0,0,1-.8,3.9,4.36,4.36,0,0,1-1.4,1.3,2.9,2.9,0,0,1-1.8.5,5.35,5.35,0,0,0,1.9-2.6,4.3,4.3,0,0,0,.3-2.7,5.73,5.73,0,0,0-.7-1.3,6,6,0,0,1-.6-1.9A6.94,6.94,0,0,1,397.7,214.3Z\"/><path class=\"cls-17\" d=\"M387.7,230.2a7.57,7.57,0,0,1-6.6-4.4\"/><path class=\"cls-8\" d=\"M383.6,215.7h0a1.49,1.49,0,0,1-1.1-1.8l.4-1.5a1.49,1.49,0,0,1,1.8-1.1h0a1.49,1.49,0,0,1,1.1,1.8l-.4,1.5A1.49,1.49,0,0,1,383.6,215.7Z\"/><path class=\"cls-8\" d=\"M399.5,219.8h0a1.49,1.49,0,0,1-1.1-1.8l.4-1.5a1.49,1.49,0,0,1,1.8-1.1h0a1.49,1.49,0,0,1,1.1,1.8l-.4,1.5A1.49,1.49,0,0,1,399.5,219.8Z\"/><path class=\"cls-8\" d=\"M387.6,208.8c-1.1.2-1.6-1.3-3.2-1.2-2.5.1-3.9.6-4.1-.5-.1-.8,1.8-2.3,4.2-2.4C388,204.7,389.6,208.5,387.6,208.8Z\"/><path class=\"cls-8\" d=\"M399.5,211.8c.7.6,1.7-.5,2.7.2,1.5.9,2,1.7,2.5,1s0-2.4-1.4-3.3C401,208.1,398,210.7,399.5,211.8Z\"/><path class=\"cls-11\" d=\"M273.5,379a14.54,14.54,0,0,0-1.3,4.5c0,1.7,1.4,17.4,1,20.5s-1.4,9.2-2,10.1-4.2-1.9-4.3-11.3-3.3-22.3-.6-23.8S272.7,377.8,273.5,379Z\"/><path class=\"cls-8\" d=\"M208,425.4l24-37.8a3.72,3.72,0,0,1,5.2-1.1l56.5,35.9a3.72,3.72,0,0,1,1.1,5.2l-24,37.8a3.72,3.72,0,0,1-5.2,1.1l-56.5-35.9A3.81,3.81,0,0,1,208,425.4Z\"/><path class=\"cls-12\" d=\"M274.3,454.3l12-18.8a1.45,1.45,0,0,1,2.4-.1l1.9,2.5a1.5,1.5,0,0,1,.1,1.7l-10.8,17a1.29,1.29,0,0,1-1.5.6l-3.1-.6A1.6,1.6,0,0,1,274.3,454.3Z\"/><path class=\"cls-11\" d=\"M270.8,378s-.6,17.4-.7,21.1.1,11-.8,14.5-2.4,12.3-5.1,12.9.2-10.8.2-13a52.85,52.85,0,0,0-1.2-7.5s-1,5.5-1.7,7.9-5.3,9.9-7.1,9.6.4-5.9,1.8-9.3c1.3-3.1,1.8-9.6,1.8-9.6a51.87,51.87,0,0,1-2.7,5.8c-1.2,2-5.3,8.2-7,7.9s1.1-6.6,2.8-9.5a12.11,12.11,0,0,0,1.8-5s-2.7,2.7-4.4,4-7.7,4.2-8.2,2.7,2.2-3.1,4.7-5.4,5.2-6.9,5.8-7.7-1.1-7.8,1.6-12.5,4.3-6.6,5-9.8S270.5,375.7,270.8,378Z\"/><path class=\"cls-12\" d=\"M333.3,242.8s-11.4-1.1-25.1,16.1-27.2,31.6-31,38.4-12.2,32.3-16.4,52.4-4.6,23.7-4.5,25.9c.1,2,10.2,4.8,16.8,4.7a2.84,2.84,0,0,0,2.7-1.8c2.6-6.1,11.7-26.9,15.3-34.5,4.2-8.9,9.1-22.1,9.7-23s27.9-28.7,33-36,10-19.1,8.9-29.5C341.5,244.2,335.7,242.7,333.3,242.8Z\"/><path class=\"cls-17\" d=\"M278.6,295s3.1-4.3,7-.4c4.1,4.1,2.3,13-3.4,18.6-4.7,4.6-11.4,2.7-10.8-1.6\"/><path class=\"cls-17\" d=\"M257.7,370.8c2.7,1.3,10.8,4.9,18.7,3.9\"/><path class=\"cls-8\" d=\"M519.5,399.2l16.8-55a3.66,3.66,0,0,1,3.5-2.5l99.4,2.8a2.52,2.52,0,0,1,2.4,3.2l-19.5,67.1a3.51,3.51,0,0,1-3.9,2.5l-96.5-14.9A2.45,2.45,0,0,1,519.5,399.2Z\"/><path class=\"cls-9\" d=\"M518.6,402l-57.8,5.4,99.1,24.4a15,15,0,0,0,7.3,0L621,417.9Z\"/><path class=\"cls-8\" d=\"M560,431.8l-99.1-24.4h0a4.17,4.17,0,0,0,3.1,4l93.4,24.8a22.24,22.24,0,0,0,12-.2l49-14.4a3.87,3.87,0,0,0,2.8-3.8h0l-53.8,13.9A14.32,14.32,0,0,1,560,431.8Z\"/><path class=\"cls-13\" d=\"M584.8,353.9l-7,23.8a1.5,1.5,0,0,1-1.4,1l-39.3-3.4a1.35,1.35,0,0,1-1.2-1.7l6.6-21.8a1.38,1.38,0,0,1,1.3-1l39.7,1.4A1.38,1.38,0,0,1,584.8,353.9Z\"/><polygon class=\"cls-11\" points=\"577.3 358.2 572.9 372.5 542.3 370.3 543.4 367.1 554.7 362.1 561.1 367.1 577.3 358.2\"/><path class=\"cls-7\" d=\"M554.4,387.4l-2.9,9a1.35,1.35,0,0,1-1.5.9l-18.9-2.5a1.29,1.29,0,0,1-1.1-1.7l2.5-8.4a1.5,1.5,0,0,1,1.4-1l19.3,2A1.24,1.24,0,0,1,554.4,387.4Z\"/><path class=\"cls-12\" d=\"M584,390.4l-3.2,9.9a1.35,1.35,0,0,1-1.5.9l-18-2.4a1.35,1.35,0,0,1-1.1-1.8l3-9.3a1.3,1.3,0,0,1,1.4-.9l18.2,1.8A1.35,1.35,0,0,1,584,390.4Z\"/><path class=\"cls-11\" d=\"M618,393.8l-3.4,11a1.35,1.35,0,0,1-1.5.9l-21.7-2.9a1.35,1.35,0,0,1-1.1-1.8l3.3-10.3a1.3,1.3,0,0,1,1.4-.9l21.7,2.2A1.39,1.39,0,0,1,618,393.8Z\"/><path class=\"cls-7\" d=\"M606.3,358.7a6.85,6.85,0,0,1-6.8,5.1c-2.9-.2-4.4-2.7-3.6-5.5a6.86,6.86,0,0,1,6.3-4.7A4.07,4.07,0,0,1,606.3,358.7Z\"/><line class=\"cls-15\" x1=\"613.4\" y1=\"355.4\" x2=\"628\" y2=\"355.9\"/><line class=\"cls-15\" x1=\"590.6\" y1=\"374.4\" x2=\"621.9\" y2=\"376.6\"/><line class=\"cls-15\" x1=\"611.7\" y1=\"361.3\" x2=\"626.3\" y2=\"361.9\"/><path class=\"cls-12\" d=\"M691.8,211.9l-76,5.9a3.2,3.2,0,0,1-3.4-3.4l3.2-43.9a5.54,5.54,0,0,1,4.8-5.1l77.2-10.5a3.21,3.21,0,0,1,3.6,3.4l-4.3,48.6A5.65,5.65,0,0,1,691.8,211.9Z\"/><path class=\"cls-10\" d=\"M689.3,210.3l-76,5.9a3.2,3.2,0,0,1-3.4-3.4l3.2-43.9a5.54,5.54,0,0,1,4.8-5.1l77.2-10.5a3.21,3.21,0,0,1,3.6,3.4l-4.3,48.6A5.47,5.47,0,0,1,689.3,210.3Z\"/><path class=\"cls-8\" d=\"M638.7,180.9a6.7,6.7,0,0,1-5.7,6,4.28,4.28,0,0,1-4.8-4.8,6.6,6.6,0,0,1,5.6-6C636.8,175.7,638.9,177.9,638.7,180.9Z\"/><path class=\"cls-8\" d=\"M637.2,200l-10.4,1a3.46,3.46,0,0,1-3.8-3.9h0a12,12,0,0,1,10.1-10.7h0c5.2-.6,9.2,3.4,8.7,8.9h0A5.31,5.31,0,0,1,637.2,200Z\"/><line class=\"cls-15\" x1=\"651\" y1=\"175.5\" x2=\"683.4\" y2=\"171.7\"/><line class=\"cls-15\" x1=\"650.2\" y1=\"184.4\" x2=\"682.6\" y2=\"180.9\"/><line class=\"cls-15\" x1=\"649.5\" y1=\"193.3\" x2=\"669\" y2=\"191.4\"/><path class=\"cls-6\" d=\"M605.6,133.9c-3.9-3.9-9.4-6.2-16.2-7a24.2,24.2,0,0,0-13.3,1.8c-4.8,2.1-8.4,5.8-11.1,11.2l-4.5,1.9,2.6,2.7,11.7,2.1a16.46,16.46,0,0,1,4.1-6.7c2-2,4.7-2.8,8.1-2.3s5.7,1.8,6.6,3.9a9.63,9.63,0,0,1,.3,6.7,11.27,11.27,0,0,1-3.4,5.3,13.25,13.25,0,0,1-3.4,2.2l-4,2c-3.9,1.9-6.5,3.7-7.8,5.5a29.28,29.28,0,0,0-3.1,6.4l-4,1.3,2.6,2.7,12,3.3a20.45,20.45,0,0,1,2.2-5.5,11,11,0,0,1,5-4.2l4.1-1.9a41.18,41.18,0,0,0,9-5.2,18.61,18.61,0,0,0,6.1-10.1C610.9,143.4,609.7,138,605.6,133.9Z\"/><path class=\"cls-6\" d=\"M575,180.8l-.4-.1a6.7,6.7,0,0,0-8.2,5,7.28,7.28,0,0,0,4.3,9l.4.2c3.6,1.2,7.4-1,8.5-5S578.6,181.8,575,180.8Z\"/><path class=\"cls-7\" d=\"M573.6,126a26.18,26.18,0,0,1,13.3-1.8c6.8.8,12.2,3.1,16.2,7s5.3,9.5,3.5,16.3a19,19,0,0,1-6.1,10.1c-1.7,1.5-4.7,3.2-9,5.2l-4.1,1.9a11,11,0,0,0-5,4.2,26.69,26.69,0,0,0-2.2,5.5l-12-3.3c1.7-5.2,3.1-8.6,4.5-10.4s3.9-3.6,7.8-5.5l4-2a14.24,14.24,0,0,0,3.4-2.2,10.15,10.15,0,0,0,3.4-5.3,10.88,10.88,0,0,0-.3-6.7c-.8-2.1-3.1-3.4-6.6-3.9s-6.1.3-8.1,2.3a15.26,15.26,0,0,0-4.1,6.7L560.5,142C563.3,133.9,567.5,128.7,573.6,126Zm-1.3,53.2.4.1a7.26,7.26,0,0,1,4.6,9h0c-1.1,4-5,6.2-8.5,5l-.4-.2a7.28,7.28,0,0,1-4.3-9h0A6.76,6.76,0,0,1,572.3,179.2Z\"/><path class=\"cls-11\" d=\"M301.5,187.7h38.4l3.9,2.5a1.88,1.88,0,0,0,2.9-1.6V161.5a5,5,0,0,0-5-5H301.5a5,5,0,0,0-5,5v21.2A5,5,0,0,0,301.5,187.7Z\"/><line class=\"cls-17\" x1=\"334.3\" y1=\"165.4\" x2=\"308.7\" y2=\"165.4\"/><line class=\"cls-17\" x1=\"334.3\" y1=\"172.4\" x2=\"308.7\" y2=\"172.4\"/><line class=\"cls-17\" x1=\"334.3\" y1=\"179.4\" x2=\"319.6\" y2=\"179.4\"/></svg>\n"
  },
  {
    "path": "resources/views/errors/images/500-image.blade.php",
    "content": "<svg id=\"illustration\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 1024 768\"><defs><style>.cls-1,.cls-10,.cls-14,.cls-15,.cls-18,.cls-22,.cls-23,.cls-24,.cls-4,.cls-6,.cls-8{fill:none;}.cls-2{fill:#eaf9f3;}.cls-3{clip-path:url(#clip-path);}.cls-4,.cls-6{stroke:#b8d8c7;}.cls-10,.cls-14,.cls-15,.cls-18,.cls-22,.cls-23,.cls-24,.cls-4,.cls-6,.cls-8{stroke-linecap:round;stroke-linejoin:round;}.cls-10,.cls-14,.cls-15,.cls-18,.cls-22,.cls-23,.cls-24,.cls-4{stroke-width:1.8px;}.cls-5{fill:#b8d8c7;}.cls-6{stroke-width:1.8px;}.cls-7{fill:#22272e;}.cls-10,.cls-8{stroke:#22272e;}.cls-8{stroke-width:4px;}.cls-9{fill:#6dafa7;}.cls-11{fill:#ffe779;}.cls-12{fill:#f4c2c9;}.cls-13{fill:#e26e85;}.cls-14{stroke:#63737a;}.cls-15{stroke:#fff;}.cls-16{clip-path:url(#clip-path-2);}.cls-17{fill:#f8ab5d;}.cls-18{stroke:#e26e85;}.cls-19{fill:#fff;}.cls-20{fill:#b0d7c0;}.cls-21{fill:#63737a;}.cls-22{stroke:#6dafa7;}.cls-23{stroke:#f4c2c9;}.cls-24{stroke:#ffe779;}</style><clipPath id=\"clip-path\"><path class=\"cls-1\" d=\"M766.3,563.9,246.3,549a48.07,48.07,0,0,1-46.5-43.3l-25.1-248a48.18,48.18,0,0,1,47.2-53l578.8-8a48.21,48.21,0,0,1,48.5,54.1L815.5,521.7A48.27,48.27,0,0,1,766.3,563.9Z\"/></clipPath><clipPath id=\"clip-path-2\"><path class=\"cls-1\" d=\"M575.2,277.1c-13.9-11.5-32.7-8.7-42.1-8.3s-17.7-.2-35.9-1.8c-9.9-.9-16.3,1.3-20.1,3.6a12.86,12.86,0,0,0-5.8,7.7,81.62,81.62,0,0,0-2,19.4,124.44,124.44,0,0,0,1.9,17.8c.8,7.9,1.5,16.3,1.5,20.1,0,8.3-6.1,27.7-5.8,34.6s19.7,12.8,38,13.6,49.6-7.5,54.9-8.9,5.1-6.9,3.6-16.6c-1.1-6.9-.9-24.5.8-39.4,2.9,2.5,7,6,10.7,9.3,8-8.4,17-16.2,25.7-24.2C591.6,293,581.7,282.5,575.2,277.1Z\"/></clipPath></defs><path class=\"cls-2\" d=\"M766.3,563.9,246.3,549a48.07,48.07,0,0,1-46.5-43.3l-25.1-248a48.18,48.18,0,0,1,47.2-53l578.8-8a48.21,48.21,0,0,1,48.5,54.1L815.5,521.7A48.27,48.27,0,0,1,766.3,563.9Z\"/><g class=\"cls-3\"><path class=\"cls-4\" d=\"M341.9,608.9H-73.6a15,15,0,0,1-15-15V358.3a15,15,0,0,1,15-15H341.9a15,15,0,0,1,15,15V593.9A15,15,0,0,1,341.9,608.9Z\"/><path class=\"cls-4\" d=\"M891,593.1H471.9a15,15,0,0,1-15-15V233.8a15,15,0,0,1,15-15H891a15,15,0,0,1,15,15V578.1A15,15,0,0,1,891,593.1Z\"/><path class=\"cls-4\" d=\"M227.1,343.3H206.8a4.32,4.32,0,0,1-4.3-3.8l-1.6-14.4a4.33,4.33,0,0,1,4.3-4.8h23.5a4.34,4.34,0,0,1,4.3,4.8l-1.6,14.4A4.41,4.41,0,0,1,227.1,343.3Z\"/><path class=\"cls-5\" d=\"M214.5,320.3s-8-.8-9.6-11.6c0,0,7.2,2.1,9.5,7.2,0,0,1-11.4,6.4-12.5,0,0,2.4,8.5-1.4,12.7,0,0,2.9-4.8,10.3-4.7a13.6,13.6,0,0,1-9.2,8.8\"/><path class=\"cls-4\" d=\"M338.7,393H248.5a4.23,4.23,0,0,1-4.2-4.2V361.4a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,338.7,393Z\"/><path class=\"cls-5\" d=\"M304,366.8H283.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H304a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,304,366.8Z\"/><path class=\"cls-4\" d=\"M338.7,438.8H248.5a4.23,4.23,0,0,1-4.2-4.2V407.2a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,338.7,438.8Z\"/><path class=\"cls-5\" d=\"M304,412.6H283.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H304a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,304,412.6Z\"/><path class=\"cls-4\" d=\"M801.9,471.1H711.7a4.23,4.23,0,0,1-4.2-4.2V439.5a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,801.9,471.1Z\"/><path class=\"cls-5\" d=\"M767.2,445H746.4a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,767.2,445Z\"/><path class=\"cls-4\" d=\"M686.1,471.1H595.9a4.23,4.23,0,0,1-4.2-4.2V439.5a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,686.1,471.1Z\"/><path class=\"cls-5\" d=\"M651.4,445H630.6a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,651.4,445Z\"/><path class=\"cls-4\" d=\"M223.7,393H133.5a4.23,4.23,0,0,1-4.2-4.2V361.4a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,223.7,393Z\"/><path class=\"cls-5\" d=\"M189,366.8H168.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H189a1.54,1.54,0,0,1,1.5,1.5h0A1.42,1.42,0,0,1,189,366.8Z\"/><path class=\"cls-4\" d=\"M223.7,438.8H133.5a4.23,4.23,0,0,1-4.2-4.2V407.2a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,223.7,438.8Z\"/><path class=\"cls-5\" d=\"M189,412.6H168.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H189a1.54,1.54,0,0,1,1.5,1.5h0A1.42,1.42,0,0,1,189,412.6Z\"/><path class=\"cls-4\" d=\"M933.2,323.6h-455a4.65,4.65,0,0,1-4.6-4.6V239.3a4.65,4.65,0,0,1,4.6-4.6h455a4.65,4.65,0,0,1,4.6,4.6V319A4.53,4.53,0,0,1,933.2,323.6Z\"/><path class=\"cls-4\" d=\"M933.2,422.6h-455a4.65,4.65,0,0,1-4.6-4.6V338.3a4.65,4.65,0,0,1,4.6-4.6h455a4.65,4.65,0,0,1,4.6,4.6V418A4.59,4.59,0,0,1,933.2,422.6Z\"/><rect class=\"cls-4\" x=\"504.3\" y=\"273.3\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"514.1\" y=\"287\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"802.6\" y=\"372.1\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"812.5\" y=\"385.8\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"782.5\" y=\"372.1\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-6\" x=\"745.2\" y=\"391.52\" width=\"50.3\" height=\"9.9\" transform=\"translate(160.33 1011.69) rotate(-72.48)\"/><rect class=\"cls-4\" x=\"792.4\" y=\"385.8\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"669.1\" y=\"273.3\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"679\" y=\"287\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"571.3\" y=\"273.3\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-6\" x=\"534\" y=\"292.7\" width=\"50.3\" height=\"9.9\" transform=\"translate(106.95 741.23) rotate(-72.48)\"/><rect class=\"cls-4\" x=\"581.2\" y=\"287\" width=\"10.3\" height=\"36.6\"/><path class=\"cls-5\" d=\"M812.4,279.9l1.1-14.9a1.65,1.65,0,0,0-1.7-1.8h-8.6a1.71,1.71,0,0,0-1.7,1.8l1.1,14.9s-9,5.8-8.9,10.6c.1,3.7,2.3,21.4,3.3,29.2a4.32,4.32,0,0,0,4.3,3.8h12.4a4.32,4.32,0,0,0,4.3-3.8c1-7.8,3.2-25.5,3.3-29.2C821.4,285.7,812.4,279.9,812.4,279.9Z\"/><path class=\"cls-5\" d=\"M772.5,279.9l1.1-14.9a1.65,1.65,0,0,0-1.7-1.8h-8.6a1.71,1.71,0,0,0-1.7,1.8l1.1,14.9s-9,5.8-8.9,10.6c.1,3.7,2.3,21.4,3.3,29.2a4.32,4.32,0,0,0,4.3,3.8h12.4a4.32,4.32,0,0,0,4.3-3.8c1-7.8,3.2-25.5,3.3-29.2C781.5,285.7,772.5,279.9,772.5,279.9Z\"/><line class=\"cls-4\" x1=\"173.2\" y1=\"517\" x2=\"1129\" y2=\"517\"/></g><path class=\"cls-7\" d=\"M517.4,429.6l-1.3,6.3a5.78,5.78,0,0,1-5.6,4.6H497.6a5.76,5.76,0,0,1-5.6-4.6l-1.3-6.3L504,429Z\"/><rect class=\"cls-7\" x=\"500.3\" y=\"437.4\" width=\"7.2\" height=\"104\"/><path class=\"cls-7\" d=\"M507.4,548h-6.9a2.11,2.11,0,0,1-2.1-2.1V526.2a2.11,2.11,0,0,1,2.1-2.1h6.9a2.11,2.11,0,0,1,2.1,2.1v19.7A2.26,2.26,0,0,1,507.4,548Z\"/><path class=\"cls-8\" d=\"M504.7,542s-7.3,5.9-11.2,28\"/><path class=\"cls-8\" d=\"M502.1,543.3s-22-5.3-34,20.8\"/><path class=\"cls-8\" d=\"M505.9,542.8s19.7-3.5,32.1,24.5\"/><circle class=\"cls-9\" cx=\"468.1\" cy=\"564.1\" r=\"8.9\"/><circle class=\"cls-10\" cx=\"534.2\" cy=\"564.1\" r=\"8.9\"/><circle class=\"cls-9\" cx=\"492.4\" cy=\"576.3\" r=\"8.9\"/><ellipse class=\"cls-11\" cx=\"504.1\" cy=\"419.5\" rx=\"60.9\" ry=\"12\"/><ellipse class=\"cls-7\" cx=\"504.1\" cy=\"413.3\" rx=\"60.9\" ry=\"12\"/><path class=\"cls-12\" d=\"M431.7,550.6c.7,4.7,1.6,11.3,1.2,13.7,0,0,1.7,4.1,11.1,3.5s14.2-5.7,14.2-5.7-.3-5.6-.7-11.3A65.75,65.75,0,0,1,431.7,550.6Z\"/><path class=\"cls-13\" d=\"M430.9,545.7s.4,2.1.8,5a66.23,66.23,0,0,0,25.9.2c-.3-5.6-.6-11.3-.6-12.5C456.9,535.9,429.7,538.2,430.9,545.7Z\"/><path class=\"cls-7\" d=\"M433,562.1a66.06,66.06,0,0,0-2.1,7.1c-1.5,5.7-15.4,21.3-15,24.7s2.9,6.5,13.2,6.5,22.5.6,25.9-.8a7.79,7.79,0,0,0,3-2.8,18.66,18.66,0,0,0,3.1-12.8c-.8-7.3-2.2-19.4-2.2-20.5a6.26,6.26,0,0,0-.7-2.9s-2.8,3.9-6.2,4.6-3.7-3.5-9.1-4.6-7.8,4-8.7,4.2C433.2,564.8,433,562.9,433,562.1Z\"/><path class=\"cls-13\" d=\"M547.3,557.8c1.7-5.1,3.4-10.4,3.9-12.3,1.1-3.9-25.8-9.2-27.6-.9l-1,4.8C529.3,555,538.6,560.1,547.3,557.8Z\"/><path class=\"cls-12\" d=\"M522.6,549.4,519.5,564s1.6,2.9,8.9,5.1,15.2,0,15.2,0,1.8-5.6,3.7-11.4C538.6,560.1,529.3,555,522.6,549.4Z\"/><path class=\"cls-7\" d=\"M520.5,559.5a19.47,19.47,0,0,0-3.3,5.9c-1.6,4-18.3,23.2-18.6,26.5s3.1,6.5,6.6,7.7,27.1,4.2,31.4,2.7,6.4-10.4,6.5-19.6a98.73,98.73,0,0,1,2.3-18.6,5.85,5.85,0,0,1-4,3.3c-3,.8-4.1-5.9-9-8.2s-9.7,2.6-10.8,3.4S520.3,560.3,520.5,559.5Z\"/><path class=\"cls-7\" d=\"M471.5,363.6s-9.9,8-21.5,16.3-46.3,27.6-46.2,49.1c.1,13.4,7.6,56,12.4,77.1s-.6,29.7,5.7,37.1,25,5.5,33,2.2,12.5-11.6,8.6-23.8-6.7-34.4-5.3-51a254.56,254.56,0,0,0,.3-33.3,95.14,95.14,0,0,1,16.6-8,131.37,131.37,0,0,0,14.7-6.1s30.5-.3,32.4.6,11.9,17.7,12.5,20.2c0,0-1.9,6.7-3.9,31.3s-15.6,49.1-13.1,59.3,8.6,14.7,16.9,17.2,20.2,2.2,25.5-9.1,9.1-38.3,14.4-53.5,13.6-40.5,13-52.4-16-53.2-25.3-67.6S479.1,347.4,471.5,363.6Z\"/><path class=\"cls-14\" d=\"M458.4,437.4s-.6-6.7-1.5-9.2\"/><path class=\"cls-14\" d=\"M534.7,444s1.6-7.4,3.4-11.3\"/><circle class=\"cls-14\" cx=\"427.5\" cy=\"430.6\" r=\"16.2\"/><circle class=\"cls-14\" cx=\"563.3\" cy=\"434.7\" r=\"16.2\"/><path class=\"cls-15\" d=\"M430.8,577.3s9.1-6.9,22,.7\"/><path class=\"cls-15\" d=\"M427.5,584s9.1-6.9,22,.7\"/><path class=\"cls-15\" d=\"M516.1,574.4s11.5-5.1,22.7,6\"/><path class=\"cls-15\" d=\"M512.7,580.9s11.5-5.1,22.7,6\"/><path class=\"cls-7\" d=\"M453.1,326.3s-2.4-1.2-4.6-6.4,5.2-6.9,5.9-4S453.1,326.3,453.1,326.3Z\"/><path class=\"cls-12\" d=\"M416.4,316.2s4,9.4,18,9.2c11-.1,43.7-10.9,45.8-11.8s12.4-13.8,8.8-27.7-13.5-12.8-13.5-12.8-11.6,4.2-33.5,19.6S416.8,308.8,416.4,316.2Z\"/><path class=\"cls-9\" d=\"M449.5,306.1s3,11.2,3.6,20.2c0,0,28-9.7,30.4-11.7s7.6-20.9,3.1-30.3S476,271.4,476,271.4a285.88,285.88,0,0,0-25.1,15.2C437.9,295.5,449.5,306.1,449.5,306.1Z\"/><path class=\"cls-10\" d=\"M458.8,324.3s-1.7-21.8-8.9-37.7\"/><path class=\"cls-11\" d=\"M575.2,277.1c-13.9-11.5-32.7-8.7-42.1-8.3s-17.7-.2-35.9-1.8c-9.9-.9-16.3,1.3-20.1,3.6a12.86,12.86,0,0,0-5.8,7.7,81.62,81.62,0,0,0-2,19.4,124.44,124.44,0,0,0,1.9,17.8c.8,7.9,1.5,16.3,1.5,20.1,0,8.3-6.1,27.7-5.8,34.6s19.7,12.8,38,13.6,49.6-7.5,54.9-8.9,5.1-6.9,3.6-16.6c-1.1-6.9-.9-24.5.8-39.4,2.9,2.5,7,6,10.7,9.3,8-8.4,17-16.2,25.7-24.2C591.6,293,581.7,282.5,575.2,277.1Z\"/><g class=\"cls-16\"><path class=\"cls-17\" d=\"M476.7,384.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,476.7,384.5Z\"/><path class=\"cls-17\" d=\"M477,368.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,477,368.8Z\"/><path class=\"cls-17\" d=\"M477.2,353.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,477.2,353.1Z\"/><path class=\"cls-17\" d=\"M477.4,337.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,477.4,337.4Z\"/><path class=\"cls-17\" d=\"M477.7,321.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,477.7,321.7Z\"/><path class=\"cls-17\" d=\"M490.8,384.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,490.8,384.7Z\"/><path class=\"cls-17\" d=\"M491.1,369l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,491.1,369Z\"/><path class=\"cls-17\" d=\"M491.3,353.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,491.3,353.3Z\"/><path class=\"cls-17\" d=\"M491.5,337.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,491.5,337.6Z\"/><path class=\"cls-17\" d=\"M491.8,321.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,491.8,321.9Z\"/><path class=\"cls-17\" d=\"M505,384.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,505,384.9Z\"/><path class=\"cls-17\" d=\"M505.2,369.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,505.2,369.2Z\"/><path class=\"cls-17\" d=\"M505.4,353.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,505.4,353.5Z\"/><path class=\"cls-17\" d=\"M505.7,337.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,505.7,337.8Z\"/><path class=\"cls-17\" d=\"M505.9,322.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,505.9,322.1Z\"/><path class=\"cls-17\" d=\"M519.1,385.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,519.1,385.1Z\"/><path class=\"cls-17\" d=\"M519.3,369.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,519.3,369.4Z\"/><path class=\"cls-17\" d=\"M519.6,353.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,519.6,353.7Z\"/><path class=\"cls-17\" d=\"M519.8,338l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,519.8,338Z\"/><path class=\"cls-17\" d=\"M520,322.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,520,322.4Z\"/><path class=\"cls-17\" d=\"M533.2,385.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,533.2,385.3Z\"/><path class=\"cls-17\" d=\"M533.5,369.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,533.5,369.6Z\"/><path class=\"cls-17\" d=\"M533.7,353.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,533.7,353.9Z\"/><path class=\"cls-17\" d=\"M533.9,338.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,533.9,338.3Z\"/><path class=\"cls-17\" d=\"M534.2,322.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,534.2,322.6Z\"/><path class=\"cls-17\" d=\"M547.3,385.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,547.3,385.5Z\"/><path class=\"cls-17\" d=\"M547.6,369.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,547.6,369.8Z\"/><path class=\"cls-17\" d=\"M547.8,354.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,547.8,354.2Z\"/><path class=\"cls-17\" d=\"M548.1,338.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,548.1,338.5Z\"/><path class=\"cls-17\" d=\"M548.3,322.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,548.3,322.8Z\"/><path class=\"cls-17\" d=\"M561.5,385.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,561.5,385.7Z\"/><path class=\"cls-17\" d=\"M561.7,370.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,561.7,370.1Z\"/><path class=\"cls-17\" d=\"M561.9,354.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,561.9,354.4Z\"/><path class=\"cls-17\" d=\"M562.2,338.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,562.2,338.7Z\"/><path class=\"cls-17\" d=\"M562.4,323l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,562.4,323Z\"/><path class=\"cls-17\" d=\"M477.9,306l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,477.9,306Z\"/><path class=\"cls-17\" d=\"M478.1,290.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,478.1,290.3Z\"/><path class=\"cls-17\" d=\"M478.4,274.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,478.4,274.7Z\"/><path class=\"cls-17\" d=\"M478.6,259l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,478.6,259Z\"/><path class=\"cls-17\" d=\"M492,306.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,492,306.2Z\"/><path class=\"cls-17\" d=\"M492.3,290.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,492.3,290.6Z\"/><path class=\"cls-17\" d=\"M492.5,274.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,492.5,274.9Z\"/><path class=\"cls-17\" d=\"M492.7,259.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,492.7,259.2Z\"/><path class=\"cls-17\" d=\"M506.1,306.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,506.1,306.5Z\"/><path class=\"cls-17\" d=\"M506.4,290.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,506.4,290.8Z\"/><path class=\"cls-17\" d=\"M506.6,275.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,506.6,275.1Z\"/><path class=\"cls-17\" d=\"M506.9,259.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,506.9,259.4Z\"/><path class=\"cls-17\" d=\"M520.3,306.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,520.3,306.7Z\"/><path class=\"cls-17\" d=\"M520.5,291l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,520.5,291Z\"/><path class=\"cls-17\" d=\"M520.7,275.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,520.7,275.3Z\"/><path class=\"cls-17\" d=\"M521,259.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,521,259.6Z\"/><path class=\"cls-17\" d=\"M534.4,306.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,534.4,306.9Z\"/><path class=\"cls-17\" d=\"M534.6,291.2l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,534.6,291.2Z\"/><path class=\"cls-17\" d=\"M534.9,275.5l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,534.9,275.5Z\"/><path class=\"cls-17\" d=\"M535.1,259.8l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,535.1,259.8Z\"/><path class=\"cls-17\" d=\"M548.5,307.1l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,548.5,307.1Z\"/><path class=\"cls-17\" d=\"M548.8,291.4l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,548.8,291.4Z\"/><path class=\"cls-17\" d=\"M549,275.7l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,549,275.7Z\"/><path class=\"cls-17\" d=\"M549.2,260l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,549.2,260Z\"/><path class=\"cls-17\" d=\"M562.6,307.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,562.6,307.3Z\"/><path class=\"cls-17\" d=\"M562.9,291.6l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,562.9,291.6Z\"/><path class=\"cls-17\" d=\"M563.1,275.9l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.72,1.72,0,0,1,563.1,275.9Z\"/><path class=\"cls-17\" d=\"M563.4,260.3l.9,1a1.72,1.72,0,0,1,0,2.4l-1,.9a1.72,1.72,0,0,1-2.4,0l-.9-1a1.72,1.72,0,0,1,0-2.4l1-.9A1.63,1.63,0,0,1,563.4,260.3Z\"/></g><path class=\"cls-12\" d=\"M502.8,279.3s-.2,11.8,12.9,12.6S539,279.2,537,270.1,502.8,266,502.8,279.3Z\"/><path class=\"cls-13\" d=\"M530,276.2c-6.3,7.2-18.7,11-26.9,5.8a12.6,12.6,0,0,0,3.6,6.5C516.6,291.9,526.1,285.6,530,276.2Z\"/><path class=\"cls-12\" d=\"M493.5,239.8a91,91,0,0,1,0,19.2c-1.1,11.1,6.2,24.7,18.1,26.5,12.8,2,25-5.1,28.6-27.1s-1.3-35.7-17.7-37S493.4,222.1,493.5,239.8Z\"/><path class=\"cls-12\" d=\"M547,242.1a36.07,36.07,0,0,1-2.8,11c-1.9,4.1-3.9,5.4-3.9,5.4l-12-6.6s-33.8,7.9-34.7-12.1a35.25,35.25,0,0,1,.3-6.6,24.54,24.54,0,0,1,5.2-12.3,10,10,0,0,1,1.4-1.5c6-5.9,15.2-8.4,26-6.7C545.7,215.6,548.4,229.1,547,242.1Z\"/><path class=\"cls-13\" d=\"M514,221.2c-12.1.2-21.4,3.5-20.5,18.6,0,0,.1,1.1.3,3,2.4-3.6,7.7-3.4,10.8-6.2A28.34,28.34,0,0,0,514,221.2Z\"/><path class=\"cls-7\" d=\"M548.7,235.5a6.85,6.85,0,0,0-1.4-4.2,7.51,7.51,0,0,0,.5-2.6,7.15,7.15,0,0,0-3.6-6.2,7.14,7.14,0,0,0-6.9-6.6,7.24,7.24,0,0,0-9.2-3.1,7.11,7.11,0,0,0-5.4-2.5,7.29,7.29,0,0,0-4.4,1.5,7.47,7.47,0,0,0-3.9-1.2,7.16,7.16,0,0,0-5.9,3.1,8.81,8.81,0,0,0-1.7-.2,7.11,7.11,0,0,0-6.8,5,7.21,7.21,0,0,0-6.1,7.1,3.08,3.08,0,0,0,.1,1c-1.3,2.6-1.1,6.7-.2,6.5a15.6,15.6,0,0,1,10.3,1c5.8,2.9,8.4,2.2,14.7,0,7-2.4,18-3.8,19.6,8.6.4,3.2-3.2,10.3,1.8,12.5,1.3.6,2.7-.4,4-2.3a16,16,0,0,0,1.1-2.9,7.05,7.05,0,0,0,3.4-6.1,6.85,6.85,0,0,0-1.4-4.2A6.64,6.64,0,0,0,548.7,235.5Z\"/><path class=\"cls-12\" d=\"M538.7,256.2s2.5-5.7,5.6-4c2.6,1.4.3,14.5-6.7,14.6\"/><path class=\"cls-7\" d=\"M510.1,252.2a9.65,9.65,0,0,1,.5,4.5,9.48,9.48,0,0,1-.5,2.3c-.3.7-.5,1.3-.8,2a6.78,6.78,0,0,0-.4,1.7,2.33,2.33,0,0,0,.7,1.4,4.4,4.4,0,0,0,3.6,1.4,4.11,4.11,0,0,1-4.5-.3,3.27,3.27,0,0,1-1.4-2.3,6.25,6.25,0,0,1,.4-2.5c.3-.7.6-1.4.9-2a10.66,10.66,0,0,0,.7-1.9C509.6,255.1,509.8,253.7,510.1,252.2Z\"/><path class=\"cls-10\" d=\"M511.7,272.2a8.38,8.38,0,0,1,8.1,2\"/><path class=\"cls-7\" d=\"M498.8,246.2c1.3-.3,2.5-1.3,5.2-1.4,1.8-.1,2.9,0,3.1-1.3.2-1-1-2.3-3-2.3C500.2,241.2,495.2,247.1,498.8,246.2Z\"/><path class=\"cls-7\" d=\"M529.8,247.6c-1.3-.4-2.3-1.5-5-1.9-1.8-.3-2.9-.3-2.9-1.6-.1-1.1,1.2-2.2,3.2-2C528.8,242.5,533.3,248.8,529.8,247.6Z\"/><path class=\"cls-7\" d=\"M504,256.1h0a1.83,1.83,0,0,0,1.8-1.6v-1a1.83,1.83,0,0,0-1.6-1.8h0a1.83,1.83,0,0,0-1.8,1.6v1A1.63,1.63,0,0,0,504,256.1Z\"/><path class=\"cls-7\" d=\"M523.6,256.9h0a1.83,1.83,0,0,0,1.8-1.6v-1a1.83,1.83,0,0,0-1.6-1.8h0a1.83,1.83,0,0,0-1.8,1.6v1A1.68,1.68,0,0,0,523.6,256.9Z\"/><path class=\"cls-7\" d=\"M543,257.1c-.4-.1-.8-.1-.9.1a1.17,1.17,0,0,0-.2.7,3.08,3.08,0,0,0-.1,1c0,.4-.1.7-.1,1.1a7.5,7.5,0,0,1-.7,2.3,2,2,0,0,1-1.2,1,1.94,1.94,0,0,1-1.3-.3c.4-.2.8-.3.9-.5a.84.84,0,0,0,.2-.7c.1-.6.1-1.3.2-2.1.1-.4.1-.8.2-1.1a3.08,3.08,0,0,1,.5-1.2,1.65,1.65,0,0,1,1.3-.9A.93.93,0,0,1,543,257.1Z\"/><path class=\"cls-12\" d=\"M482.9,257.7s-4.5,3.8-12.5,18.2c-6.4,11.6-11.9,28.9-19.7,38.6a20.19,20.19,0,0,1-6,5.4,30.33,30.33,0,0,1-4.8,2.2c-11.8,3.9-28.5.9-24-16.8s34.8-39.2,44.7-54.8S483.2,251.9,482.9,257.7Z\"/><path class=\"cls-18\" d=\"M450.7,314.5a20.19,20.19,0,0,1-6,5.4,30.33,30.33,0,0,1-4.8,2.2\"/><path class=\"cls-13\" d=\"M483.9,226.6s5.4-2.6,7.3-3.5,6.3-1.8,7.9-2.3,1.8,2.1-.9,4.5-7.5,8.9-10.8,9.6S482.3,228.6,483.9,226.6Z\"/><path class=\"cls-12\" d=\"M459.7,252.2s5.9-9.7,7.6-13.3c4.2-8.7,10.3-12.3,12.3-13.9s14.7-4.2,17.9-5.4c3-1.1,2.6,1.4,1.4,2.5-3.3,3-9.9,4.2-10.7,5.1,0,0,4.7-1.4,7.1-2.4a79.42,79.42,0,0,1,10.3-2.7c1.6-.3,2.6,1.5,0,3.2s-7.3,3.8-7.9,4.2-5.3,3.3-5.3,3.3,4.7,0,6.4-.1,5.3.1,6.2.1c2.4,0,2.8,3-2.1,3.8s-8,2.1-10.6,4.2c-3,2.4,1,9.2-11.1,18.5C481.3,259.3,462.6,264.9,459.7,252.2Z\"/><path class=\"cls-18\" d=\"M492.4,232.8a9.36,9.36,0,0,0-1.8.6,13.36,13.36,0,0,0-2.9,2.1\"/><path class=\"cls-18\" d=\"M488.2,227.2s-1.7.5-2.9,1a9.89,9.89,0,0,0-2.6,2\"/><path class=\"cls-7\" d=\"M461.2,249.4c2.5-.1,11.1.8,15.6,15.6a1.09,1.09,0,0,1-.2,1.1l-3.9,5.9a.19.19,0,0,1-.3,0c-.7-2.2-5.1-15.5-15.4-16.4a.52.52,0,0,1-.4-.8c.9-1.3,2.7-3.8,3.5-4.8A1.38,1.38,0,0,1,461.2,249.4Z\"/><ellipse class=\"cls-19\" cx=\"465.45\" cy=\"254.73\" rx=\"5.1\" ry=\"4.8\" transform=\"translate(12.12 530.45) rotate(-60)\"/><path class=\"cls-7\" d=\"M578.4,336.6s4.8-1.3,13.7-11.8-7-.4-7.9,0S578.4,336.6,578.4,336.6Z\"/><path class=\"cls-12\" d=\"M623.3,337.8c-2.8-7.8-12.3-21.2-22.6-33.7-8.7,8-17.7,15.8-25.7,24.2,5.4,4.8,10.2,9,10.2,9-1.4.7-4,2.1-6.7,3.4,4.7,7.7,8.1,16.5,8.7,25.3,9.3.2,19.8.4,24.7-1.6C620.7,360.9,628.6,352.5,623.3,337.8Z\"/><path class=\"cls-12\" d=\"M569.6,345.1s-1.7-2.4-2.5-3.3-5.4-4-7.3-5.6-3.5.7-1.8,3.5,2.7,7.6,4,8.9S569.8,348.7,569.6,345.1Z\"/><path class=\"cls-9\" d=\"M604.4,308.6s-16,11.6-26,28.1c0,0-17-16.4-20.1-22s-2.8-21.4,4.4-30.4,13.5-6.3,13.5-6.3A195.34,195.34,0,0,1,604.4,308.6Z\"/><path class=\"cls-10\" d=\"M573.9,332.2s10.6-18.9,26.6-28.7\"/><path class=\"cls-18\" d=\"M585.1,337.3s10.5-6.7,19.2-5\"/><path class=\"cls-7\" d=\"M518.8,319.8l44.8-7.1a3.05,3.05,0,0,1,3.5,3.4l-7.4,50.5a3.11,3.11,0,0,1-2.3,2.5l-43.9,10.7a3,3,0,0,1-3.7-3.2l4-51.5A5.75,5.75,0,0,1,518.8,319.8Z\"/><path class=\"cls-9\" d=\"M532.2,316.6l-.3,3.7c0,.5.5.9,1.2.8l17.8-3.2a1.5,1.5,0,0,0,1.4-1.3l.2-2.7a.89.89,0,0,0-1.1-.8l-17.7,2.2A1.72,1.72,0,0,0,532.2,316.6Z\"/><path class=\"cls-12\" d=\"M569.6,345.1s-6-1.4-7.4-1-6.3,1-9.9,1.8-10.1.5-12.5,1.4a2.32,2.32,0,0,0-1.5,3.1s-2.5-.5-3.3.8c-1.2,1.9,1.3,3.1,1.3,3.1-2-.6-3.7.7-2.8,2.6.7,1.4,4,3.5,6.9,4.9a88.7,88.7,0,0,0,8.5,3.2s-2.6-.3-5.7-.6c-2.9-.2-4.2,1.2-2.5,2.8s12.2,4.6,16.1,3.7,8.2-3.3,14-4.8c2.5-.6,9-.4,16.3-.2-.6-8.8-3.9-17.6-8.7-25.3C574.1,342.9,569.6,345.1,569.6,345.1Z\"/><path class=\"cls-18\" d=\"M536.3,354.4s5.1,2.2,9.3,3.6,8.7,1.2,9.9,1.7\"/><path class=\"cls-18\" d=\"M548.9,365s3.8,1.4,5.9.7\"/><path class=\"cls-18\" d=\"M538.4,350.4a44.9,44.9,0,0,0,8.1,2.2c3.3.4,8.7.4,9.4.4\"/><circle class=\"cls-7\" cx=\"518.8\" cy=\"297\" r=\"1.2\"/><path class=\"cls-10\" d=\"M514.4,291.8s-1.2,2.5-.4,13.5\"/><path class=\"cls-20\" d=\"M285,410.3l-2.5,195.1a3.78,3.78,0,0,0,3.7,3.8h0a3.67,3.67,0,0,0,3.7-3.6l8.3-195.3Z\"/><path class=\"cls-20\" d=\"M733.9,410.3l2.5,195.1a3.78,3.78,0,0,1-3.7,3.8h0a3.67,3.67,0,0,1-3.7-3.6l-8.3-195.3Z\"/><polygon class=\"cls-9\" points=\"298.3 410.3 285 410.3 284.8 425.2 297.7 425.2 298.3 410.3\"/><polygon class=\"cls-9\" points=\"733.9 410.3 720.6 410.3 721.2 425.2 734.1 425.2 733.9 410.3\"/><path class=\"cls-20\" d=\"M341.8,406.7l-1.9,145.7a2.73,2.73,0,0,0,2.8,2.8h0a2.84,2.84,0,0,0,2.8-2.7l6.2-145.9h-9.9Z\"/><path class=\"cls-20\" d=\"M677,406.7l1.9,145.7a2.73,2.73,0,0,1-2.8,2.8h0a2.84,2.84,0,0,1-2.8-2.7l-6.2-145.9H677Z\"/><polygon class=\"cls-19\" points=\"761.7 406.3 257.2 406.3 318.2 369.2 700.7 369.2 761.7 406.3\"/><rect class=\"cls-20\" x=\"257.2\" y=\"406.3\" width=\"504.5\" height=\"8\"/><polygon class=\"cls-21\" points=\"378.6 371.7 409.6 393.2 416.2 393.3 458.5 374.4 378.6 371.7\"/><path class=\"cls-7\" d=\"M416.2,393.3l4,.1a12.86,12.86,0,0,0,5.8-1.2l30.5-14.5a3.38,3.38,0,0,0,2-3.3h-.1Z\"/><path class=\"cls-7\" d=\"M313,389.4l105.5,4.1a4.57,4.57,0,0,0,4.6-5.6L408,326a8.34,8.34,0,0,0-7.9-6.3L295,318.1a3.37,3.37,0,0,0-3.3,4.2l17,63.6A4.55,4.55,0,0,0,313,389.4Z\"/><ellipse class=\"cls-21\" cx=\"352.62\" cy=\"355.7\" rx=\"6.3\" ry=\"7.5\" transform=\"translate(-144.53 416.58) rotate(-52.23)\"/><path class=\"cls-12\" d=\"M326.3,276.7l-66.8-1.2a2.65,2.65,0,0,1-2.5-2.1l-4.5-21.5a2.17,2.17,0,0,1,2.2-2.6l66.8,1.2a2.65,2.65,0,0,1,2.5,2.1l4.5,21.5A2.22,2.22,0,0,1,326.3,276.7Z\"/><ellipse class=\"cls-7\" cx=\"269.83\" cy=\"258.81\" rx=\"2.8\" ry=\"3.5\" transform=\"translate(-102.6 291.8) rotate(-48.87)\"/><path class=\"cls-7\" d=\"M275.2,269.7l-6.3-.1a3.4,3.4,0,0,1-3.1-2.6h0a4.32,4.32,0,0,1,4.5-5.5h0a7.67,7.67,0,0,1,6.9,5.7h0A1.9,1.9,0,0,1,275.2,269.7Z\"/><path class=\"cls-9\" d=\"M301.3,265.2l-17.7-.3a.85.85,0,0,1-.8-.7l-.5-2.3a.85.85,0,0,1,.8-1l17.7.3a.85.85,0,0,1,.8.7l.5,2.3A.85.85,0,0,1,301.3,265.2Z\"/><line class=\"cls-10\" x1=\"308.3\" y1=\"259.9\" x2=\"316.7\" y2=\"267\"/><line class=\"cls-10\" x1=\"315.3\" y1=\"260\" x2=\"309.7\" y2=\"266.8\"/><path class=\"cls-11\" d=\"M394.9,312.3l-66.8-1.2a2.65,2.65,0,0,1-2.5-2.1l-4.5-21.5a2.17,2.17,0,0,1,2.2-2.6l66.8,1.2a2.65,2.65,0,0,1,2.5,2.1l4.5,21.5A2.22,2.22,0,0,1,394.9,312.3Z\"/><ellipse class=\"cls-7\" cx=\"338.41\" cy=\"294.38\" rx=\"2.8\" ry=\"3.5\" transform=\"translate(-105.92 355.63) rotate(-48.87)\"/><path class=\"cls-7\" d=\"M343.8,305.3l-6.3-.1a3.4,3.4,0,0,1-3.1-2.6h0a4.32,4.32,0,0,1,4.5-5.5h0a7.67,7.67,0,0,1,6.9,5.7h0A1.9,1.9,0,0,1,343.8,305.3Z\"/><path class=\"cls-9\" d=\"M369.8,300.8l-17.7-.3a.85.85,0,0,1-.8-.7l-.5-2.3a.85.85,0,0,1,.8-1l17.7.3a.85.85,0,0,1,.8.7l.5,2.3A.85.85,0,0,1,369.8,300.8Z\"/><line class=\"cls-10\" x1=\"376.8\" y1=\"295.5\" x2=\"385.3\" y2=\"302.6\"/><line class=\"cls-10\" x1=\"383.8\" y1=\"295.6\" x2=\"378.3\" y2=\"302.4\"/><path class=\"cls-10\" d=\"M271.1,275.7l3.7,17.4a5,5,0,0,0,4.9,4l3.9.1\"/><line class=\"cls-10\" x1=\"308\" y1=\"297.7\" x2=\"323.3\" y2=\"298\"/><path class=\"cls-7\" d=\"M306.9,291l-3.5,3.7a1.24,1.24,0,0,1-1.4.3,4,4,0,0,0-4.5.8l-3.9,4.1a3.93,3.93,0,0,0-.6,4.6,1.21,1.21,0,0,1-.2,1.4l-3.5,3.7a1.17,1.17,0,0,1-2-.5l-.3-1.4a8.61,8.61,0,0,1,2.2-8.1l7.8-8.2a8.91,8.91,0,0,1,8-2.6l1.4.3A1.17,1.17,0,0,1,306.9,291Z\"/><path class=\"cls-22\" d=\"M474.8,203.8s-4.4,4.8-10.3,0,1.7-14,4.1-11.5-10.5,7.4-10.9,1.1,6.8-6.7-3.3-14.6\"/><path class=\"cls-22\" d=\"M508.1,194s6.7-2.4,4.3-7.8-8.6,0-4.3,0,7.4-4.6,4.8-10.9\"/><path class=\"cls-22\" d=\"M552.5,204.3s8.3,3,6.1-2.8-2-7.8,3.1-5.5,5.4-2.5,7.2-3.6\"/><path class=\"cls-7\" d=\"M596.2,241.3l-3.4,3.6a1.52,1.52,0,0,0,0,2h0a1.68,1.68,0,0,0,1.9.3l3.9-2.4Z\"/><path class=\"cls-7\" d=\"M626.4,250l.9,4.8a1.47,1.47,0,0,1-1.1,1.7h0a1.38,1.38,0,0,1-1.7-.8l-2-4.1Z\"/><circle class=\"cls-9\" cx=\"615.3\" cy=\"231.7\" r=\"22.5\"/><circle class=\"cls-11\" cx=\"615.3\" cy=\"231.7\" r=\"14.5\"/><polyline class=\"cls-14\" points=\"619.4 236.9 615.3 231.7 617.4 224.5\"/><path class=\"cls-9\" d=\"M600.9,209.9a1.13,1.13,0,0,1-1.5-.8,6.49,6.49,0,0,1,11.9-4.5,1.05,1.05,0,0,1-.6,1.6Z\"/><path class=\"cls-9\" d=\"M639.2,221a1.09,1.09,0,0,0,1.7.1,6.48,6.48,0,0,0,.3-8.2,6.57,6.57,0,0,0-8-2,1.17,1.17,0,0,0-.4,1.7Z\"/><path class=\"cls-9\" d=\"M625.5,207.5l-5.9-1.7a1.8,1.8,0,0,1-1.2-2.3h0a1.8,1.8,0,0,1,2.3-1.2l5.9,1.7a1.8,1.8,0,0,1,1.2,2.3h0A1.8,1.8,0,0,1,625.5,207.5Z\"/><rect class=\"cls-9\" x=\"619.13\" y=\"206.23\" width=\"5.8\" height=\"4.4\" transform=\"translate(248.34 747.61) rotate(-73.8)\"/><path class=\"cls-12\" d=\"M576,184H544.8l-3.2,2.1a1.56,1.56,0,0,1-2.4-1.3v-22a4.12,4.12,0,0,1,4.1-4.1H576a4.12,4.12,0,0,1,4.1,4.1V180A4.17,4.17,0,0,1,576,184Z\"/><line class=\"cls-10\" x1=\"559.3\" y1=\"168.7\" x2=\"570.2\" y2=\"168.7\"/><line class=\"cls-10\" x1=\"559.3\" y1=\"174.4\" x2=\"565.9\" y2=\"174.4\"/><rect class=\"cls-10\" x=\"548\" y=\"168.7\" width=\"5.6\" height=\"5.6\"/><path class=\"cls-9\" d=\"M587,380.8a14.92,14.92,0,0,1-9.4,5.7,9.85,9.85,0,0,1-1.7.2c-9.2.7-15.9-5.9-15.9-5.9Z\"/><path class=\"cls-7\" d=\"M634.5,375.1s-3,9.8-12.6,11.5a17.36,17.36,0,0,1-4.5.2H575.9a9.85,9.85,0,0,0,1.7-.2,15.81,15.81,0,0,0,9.4-5.7,20.19,20.19,0,0,0,3.2-5.7h44.3Z\"/><path class=\"cls-21\" d=\"M752.7,322.1l-90.5-6a5.34,5.34,0,0,1-5-5.6l4.6-89.7a7.46,7.46,0,0,1,6.1-7l92.3-17.9a5.36,5.36,0,0,1,6.4,5.6l-7.4,115A6.12,6.12,0,0,1,752.7,322.1Z\"/><path class=\"cls-7\" d=\"M749.7,322l-90.5-6a5.34,5.34,0,0,1-5-5.6l4.6-89.7a7.46,7.46,0,0,1,6.1-7l92.3-17.9a5.36,5.36,0,0,1,6.4,5.6l-7.4,115A6.19,6.19,0,0,1,749.7,322Z\"/><path class=\"cls-9\" d=\"M741.6,239.4l-70.2,7.5a2,2,0,0,1-2.2-2.1l.8-15.9a1.84,1.84,0,0,1,1.7-1.8l70.5-11a2,2,0,0,1,2.3,2.1l-1.2,19.4A1.84,1.84,0,0,1,741.6,239.4Z\"/><line class=\"cls-10\" x1=\"682.8\" y1=\"225.4\" x2=\"681.7\" y2=\"245.8\"/><line class=\"cls-10\" x1=\"673.7\" y1=\"232.4\" x2=\"678.7\" y2=\"240.5\"/><line class=\"cls-10\" x1=\"679.2\" y1=\"231.6\" x2=\"673.2\" y2=\"241.2\"/><line class=\"cls-10\" x1=\"688.6\" y1=\"231.8\" x2=\"735\" y2=\"225.4\"/><line class=\"cls-10\" x1=\"688.3\" y1=\"237.8\" x2=\"713.3\" y2=\"234.6\"/><path class=\"cls-12\" d=\"M739.5,271.7l-69.6,2.7a1.92,1.92,0,0,1-2-2.1l.8-15.8a2,2,0,0,1,1.8-1.9l70-6.2a1.94,1.94,0,0,1,2.1,2.1l-1.2,19.2A2,2,0,0,1,739.5,271.7Z\"/><line class=\"cls-10\" x1=\"681.3\" y1=\"253.8\" x2=\"680.2\" y2=\"274\"/><line class=\"cls-10\" x1=\"672.2\" y1=\"260.1\" x2=\"677.2\" y2=\"268.6\"/><line class=\"cls-10\" x1=\"677.7\" y1=\"259.7\" x2=\"671.7\" y2=\"268.9\"/><line class=\"cls-10\" x1=\"687.1\" y1=\"260.6\" x2=\"733.1\" y2=\"257.3\"/><line class=\"cls-10\" x1=\"686.7\" y1=\"266.5\" x2=\"711.5\" y2=\"265.1\"/><path class=\"cls-11\" d=\"M737.4,303.8l-69-2a2,2,0,0,1-1.9-2.1l.8-15.7a2.13,2.13,0,0,1,1.9-1.9l69.4-1.4a2,2,0,0,1,2,2.1l-1.2,19.1A2,2,0,0,1,737.4,303.8Z\"/><line class=\"cls-10\" x1=\"679.8\" y1=\"282\" x2=\"678.7\" y2=\"302.1\"/><line class=\"cls-10\" x1=\"670.7\" y1=\"287.7\" x2=\"675.7\" y2=\"296.4\"/><line class=\"cls-10\" x1=\"676.2\" y1=\"287.6\" x2=\"670.3\" y2=\"296.3\"/><line class=\"cls-10\" x1=\"685.5\" y1=\"289.2\" x2=\"731.2\" y2=\"289.1\"/><line class=\"cls-10\" x1=\"685.2\" y1=\"295\" x2=\"709.8\" y2=\"295.3\"/><path class=\"cls-20\" d=\"M351.5,264.1l-14.3-67.6a2.41,2.41,0,0,1,2.4-2.9h67.3a4,4,0,0,1,3.9,3.3L422,265.2a2.42,2.42,0,0,1-2.4,2.8l-64.2-.8A3.89,3.89,0,0,1,351.5,264.1Z\"/><path class=\"cls-9\" d=\"M350,265.7l-14.3-67.6a2.41,2.41,0,0,1,2.4-2.9h67.3a4,4,0,0,1,3.9,3.3l11.2,68.3a2.42,2.42,0,0,1-2.4,2.8l-64.2-.8A4,4,0,0,1,350,265.7Z\"/><polygon class=\"cls-10\" points=\"357.7 260.3 345.8 203.9 401.4 203.9 410.7 260.9 357.7 260.3\"/><line class=\"cls-10\" x1=\"362.2\" y1=\"203.9\" x2=\"374.2\" y2=\"260.5\"/><line class=\"cls-10\" x1=\"348.8\" y1=\"218.2\" x2=\"403.4\" y2=\"218.2\"/><line class=\"cls-10\" x1=\"351.7\" y1=\"232\" x2=\"405.8\" y2=\"232\"/><line class=\"cls-10\" x1=\"355\" y1=\"246\" x2=\"408.4\" y2=\"246.7\"/><line class=\"cls-10\" x1=\"371.8\" y1=\"210.9\" x2=\"393.1\" y2=\"210.9\"/><line class=\"cls-10\" x1=\"374.6\" y1=\"225.1\" x2=\"395.9\" y2=\"225.1\"/><line class=\"cls-10\" x1=\"377.8\" y1=\"239\" x2=\"399.1\" y2=\"239.3\"/><line class=\"cls-10\" x1=\"380.8\" y1=\"252.7\" x2=\"401.3\" y2=\"253.2\"/><line class=\"cls-23\" x1=\"351.6\" y1=\"207.5\" x2=\"360.4\" y2=\"214.2\"/><line class=\"cls-23\" x1=\"358\" y1=\"207.5\" x2=\"353.5\" y2=\"214.2\"/><line class=\"cls-23\" x1=\"357.2\" y1=\"235.7\" x2=\"366\" y2=\"242.3\"/><line class=\"cls-23\" x1=\"363.6\" y1=\"235.7\" x2=\"359\" y2=\"242.3\"/><line class=\"cls-23\" x1=\"360.4\" y1=\"249.6\" x2=\"369.2\" y2=\"256.3\"/><line class=\"cls-23\" x1=\"366.8\" y1=\"249.6\" x2=\"362.3\" y2=\"256.3\"/><polyline class=\"cls-24\" points=\"355 224.3 358 227.4 362.3 221.8\"/><path class=\"cls-19\" d=\"M670.8,319.9s.1-9.5-2.4-15c0,0-27,4.9-32,7.8,0,0,4.5,4.5,5.9,10S670.6,329.2,670.8,319.9Z\"/><path class=\"cls-12\" d=\"M671.6,326.8s1.7-17.3,2.5-20.9c0,0-21.9,1.8-30.1,6.5l2.2,18.3Z\"/><path class=\"cls-19\" d=\"M695.9,340.2s-.1-12.8,3.4-18.9c0,0-20.6.4-25.2,3.1s-4,15.7-4,15.7S695,341.6,695.9,340.2Z\"/><rect class=\"cls-9\" x=\"676.6\" y=\"334.6\" width=\"22.7\" height=\"62.5\"/><circle class=\"cls-10\" cx=\"688\" cy=\"384.1\" r=\"4.4\"/><polygon class=\"cls-9\" points=\"653.9 397.2 653.9 319.9 640.3 323.2 640.3 389.1 653.9 397.2\"/><rect class=\"cls-11\" x=\"653.9\" y=\"319.9\" width=\"22.7\" height=\"77.3\"/><circle class=\"cls-10\" cx=\"665.2\" cy=\"384.1\" r=\"4.4\"/><line class=\"cls-10\" x1=\"659.7\" y1=\"367.2\" x2=\"670.8\" y2=\"367.2\"/><line class=\"cls-10\" x1=\"659.7\" y1=\"371.6\" x2=\"670.8\" y2=\"371.6\"/></svg>\n"
  },
  {
    "path": "resources/views/errors/images/503-image.blade.php",
    "content": "<svg id=\"illustration\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 1024 768\"><defs><style>.cls-1,.cls-13,.cls-16,.cls-17,.cls-19,.cls-21,.cls-4,.cls-6{fill:none;}.cls-2{fill:#eaf9f3;}.cls-3{clip-path:url(#clip-path);}.cls-4,.cls-6{stroke:#b8d8c7;}.cls-13,.cls-16,.cls-17,.cls-19,.cls-21,.cls-4,.cls-6{stroke-linecap:round;stroke-linejoin:round;}.cls-13,.cls-16,.cls-17,.cls-19,.cls-21,.cls-4{stroke-width:1.8px;}.cls-5{fill:#b8d8c7;}.cls-6{stroke-width:1.8px;}.cls-7{fill:#22272e;}.cls-8{fill:#63737a;}.cls-9{fill:#fff;}.cls-10{fill:#f4c2c9;}.cls-11{fill:#b0d7c0;}.cls-12{fill:#ffe779;}.cls-13{stroke:#63737a;}.cls-14{fill:#f8ab5d;}.cls-15{fill:#6dafa7;}.cls-16{stroke:#22272e;}.cls-17{stroke:#000;}.cls-18{fill:#e26e85;}.cls-19{stroke:#e26e85;}.cls-20{clip-path:url(#clip-path-2);}.cls-21{stroke:#f8ab5d;}</style><clipPath id=\"clip-path\"><path class=\"cls-1\" d=\"M766.3,584.5l-520-14.9a48.07,48.07,0,0,1-46.5-43.3l-25.1-248a48.18,48.18,0,0,1,47.2-53l578.8-8a48.21,48.21,0,0,1,48.5,54.1L815.5,542.3A48.19,48.19,0,0,1,766.3,584.5Z\"/></clipPath><clipPath id=\"clip-path-2\"><path class=\"cls-1\" d=\"M418.1,273.5c1.7-9.6,5.3-24.5,40-24.6,29.6-.1,43.3,4.3,50.5,9.8s8,20,5.7,42.7-2.7,36.2-1.4,50.3,7,20.2-.6,27.8a176.93,176.93,0,0,1-49.9,7.2c-28,0-41.9-7.8-42.5-10s-3.3-2.9-.8-8.6,4.2-25.8,2.6-37.9c-.9-7.1-3.5-17.1-4.6-29A109.62,109.62,0,0,1,418.1,273.5Z\"/></clipPath></defs><path class=\"cls-2\" d=\"M766.3,584.5l-520-14.9a48.07,48.07,0,0,1-46.5-43.3l-25.1-248a48.18,48.18,0,0,1,47.2-53l578.8-8a48.21,48.21,0,0,1,48.5,54.1L815.5,542.3A48.19,48.19,0,0,1,766.3,584.5Z\"/><g class=\"cls-3\"><path class=\"cls-4\" d=\"M341.9,629.5H-73.6a15,15,0,0,1-15-15V378.9a15,15,0,0,1,15-15H341.9a15,15,0,0,1,15,15V614.5A15,15,0,0,1,341.9,629.5Z\"/><path class=\"cls-4\" d=\"M891,613.7H471.9a15,15,0,0,1-15-15V254.4a15,15,0,0,1,15-15H891a15,15,0,0,1,15,15V598.7A15,15,0,0,1,891,613.7Z\"/><path class=\"cls-4\" d=\"M242.3,293.5H152.4v-8.9h89.9a1.79,1.79,0,0,1,1.8,1.8v5.2A1.82,1.82,0,0,1,242.3,293.5Z\"/><path class=\"cls-4\" d=\"M226,284.6H205.7a4.32,4.32,0,0,1-4.3-3.8l-1.6-14.4a4.33,4.33,0,0,1,4.3-4.8h23.5a4.34,4.34,0,0,1,4.3,4.8l-1.6,14.4A4.32,4.32,0,0,1,226,284.6Z\"/><path class=\"cls-5\" d=\"M213.4,261.7s-8-.8-9.6-11.6c0,0,7.2,2.1,9.5,7.2,0,0,1-11.4,6.4-12.5,0,0,2.4,8.5-1.4,12.7,0,0,2.9-4.8,10.3-4.7a13.6,13.6,0,0,1-9.2,8.8\"/><path class=\"cls-4\" d=\"M761.7,344.3H741.4a4.32,4.32,0,0,1-4.3-3.8l-1.6-14.4a4.33,4.33,0,0,1,4.3-4.8h23.5a4.34,4.34,0,0,1,4.3,4.8L766,340.5A4.41,4.41,0,0,1,761.7,344.3Z\"/><path class=\"cls-5\" d=\"M749.2,321.3s-8-.8-9.6-11.6c0,0,7.2,2.1,9.5,7.2,0,0,1-11.4,6.4-12.5,0,0,2.4,8.5-1.4,12.7,0,0,2.9-4.8,10.3-4.7a13.6,13.6,0,0,1-9.2,8.8\"/><path class=\"cls-4\" d=\"M338.7,413.6H248.5a4.23,4.23,0,0,1-4.2-4.2V382a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,338.7,413.6Z\"/><path class=\"cls-5\" d=\"M304,387.5H283.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H304a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,304,387.5Z\"/><path class=\"cls-4\" d=\"M338.7,459.4H248.5a4.23,4.23,0,0,1-4.2-4.2V427.8a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,338.7,459.4Z\"/><path class=\"cls-5\" d=\"M304,433.3H283.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H304a1.54,1.54,0,0,1,1.5,1.5h0A1.54,1.54,0,0,1,304,433.3Z\"/><path class=\"cls-4\" d=\"M801.9,491.8H711.7a4.23,4.23,0,0,1-4.2-4.2V460.2a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,801.9,491.8Z\"/><path class=\"cls-5\" d=\"M767.2,465.6H746.4a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,767.2,465.6Z\"/><path class=\"cls-4\" d=\"M686.1,491.8H595.9a4.23,4.23,0,0,1-4.2-4.2V460.2a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.23,4.23,0,0,1,686.1,491.8Z\"/><path class=\"cls-5\" d=\"M651.4,465.6H630.6a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,651.4,465.6Z\"/><path class=\"cls-4\" d=\"M569.5,491.8H479.3a4.23,4.23,0,0,1-4.2-4.2V460.2a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,569.5,491.8Z\"/><path class=\"cls-5\" d=\"M534.8,465.6H514a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5h20.8a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,534.8,465.6Z\"/><path class=\"cls-4\" d=\"M223.7,413.6H133.5a4.23,4.23,0,0,1-4.2-4.2V382a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,223.7,413.6Z\"/><path class=\"cls-5\" d=\"M189,387.5H168.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H189a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,189,387.5Z\"/><path class=\"cls-4\" d=\"M223.7,459.4H133.5a4.23,4.23,0,0,1-4.2-4.2V427.8a4.23,4.23,0,0,1,4.2-4.2h90.2a4.23,4.23,0,0,1,4.2,4.2v27.4A4.1,4.1,0,0,1,223.7,459.4Z\"/><path class=\"cls-5\" d=\"M189,433.3H168.2a1.54,1.54,0,0,1-1.5-1.5h0a1.54,1.54,0,0,1,1.5-1.5H189a1.54,1.54,0,0,1,1.5,1.5h0A1.47,1.47,0,0,1,189,433.3Z\"/><path class=\"cls-4\" d=\"M933.2,344.3h-455a4.65,4.65,0,0,1-4.6-4.6V260a4.65,4.65,0,0,1,4.6-4.6h455a4.65,4.65,0,0,1,4.6,4.6v79.7A4.59,4.59,0,0,1,933.2,344.3Z\"/><path class=\"cls-4\" d=\"M933.2,443.2h-455a4.65,4.65,0,0,1-4.6-4.6V358.9a4.65,4.65,0,0,1,4.6-4.6h455a4.65,4.65,0,0,1,4.6,4.6v79.7A4.59,4.59,0,0,1,933.2,443.2Z\"/><rect class=\"cls-4\" x=\"504.3\" y=\"293.9\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"514.1\" y=\"307.7\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"802.6\" y=\"392.8\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"812.5\" y=\"406.5\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"782.5\" y=\"392.8\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-6\" x=\"745.21\" y=\"412.12\" width=\"50.3\" height=\"9.9\" transform=\"translate(140.69 1026.1) rotate(-72.48)\"/><rect class=\"cls-4\" x=\"792.4\" y=\"406.5\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"669.1\" y=\"293.9\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-4\" x=\"679\" y=\"307.7\" width=\"10.3\" height=\"36.6\"/><rect class=\"cls-4\" x=\"571.3\" y=\"293.9\" width=\"9.9\" height=\"50.3\"/><rect class=\"cls-6\" x=\"534.01\" y=\"313.3\" width=\"50.3\" height=\"9.9\" transform=\"translate(87.31 755.64) rotate(-72.48)\"/><rect class=\"cls-4\" x=\"581.2\" y=\"307.7\" width=\"10.3\" height=\"36.6\"/><path class=\"cls-5\" d=\"M812.4,300.5l1.1-14.9a1.65,1.65,0,0,0-1.7-1.8h-8.6a1.71,1.71,0,0,0-1.7,1.8l1.1,14.9s-9,5.8-8.9,10.6c.1,3.7,2.3,21.4,3.3,29.2a4.32,4.32,0,0,0,4.3,3.8h12.4a4.32,4.32,0,0,0,4.3-3.8c1-7.8,3.2-25.5,3.3-29.2C821.4,306.3,812.4,300.5,812.4,300.5Z\"/><path class=\"cls-5\" d=\"M712.2,399.6l1.1-14.9a1.65,1.65,0,0,0-1.7-1.8H703a1.71,1.71,0,0,0-1.7,1.8l1.1,14.9s-9,5.8-8.9,10.6c.1,3.7,2.3,21.4,3.3,29.2a4.32,4.32,0,0,0,4.3,3.8h12.4a4.32,4.32,0,0,0,4.3-3.8c1-7.8,3.2-25.5,3.3-29.2C721.2,405.4,712.2,399.6,712.2,399.6Z\"/><line class=\"cls-4\" x1=\"173.2\" y1=\"547.6\" x2=\"1129\" y2=\"547.6\"/><path class=\"cls-4\" d=\"M281.3,363.9H205.8a6.12,6.12,0,0,1-6.1-6.1V342a6.12,6.12,0,0,1,6.1-6.1h75.5a6.12,6.12,0,0,1,6.1,6.1v15.8A6.06,6.06,0,0,1,281.3,363.9Z\"/><line class=\"cls-4\" x1=\"207.2\" y1=\"340.5\" x2=\"208.1\" y2=\"340.5\"/><path class=\"cls-4\" d=\"M273.2,356.3H214a5,5,0,0,1,5-5h49.1a5,5,0,0,1,5.1,5Z\"/><rect class=\"cls-4\" x=\"222.3\" y=\"314.5\" width=\"42.6\" height=\"21.5\"/></g><path class=\"cls-7\" d=\"M587.4,408.5l-39.4-15a2.84,2.84,0,0,1-1.8-2.7h0l63.2-9.2s7.8,13.1,7,13.4S587.4,408.5,587.4,408.5Z\"/><path class=\"cls-8\" d=\"M546.2,390.9l42.2,14.8L612.6,394s-5.3-11.9-5.9-11.8S546.2,390.9,546.2,390.9Z\"/><path class=\"cls-7\" d=\"M586.6,406l13.8-58.6a6.61,6.61,0,0,1,6.1-5l63.3-1.7a2.44,2.44,0,0,1,2.4,3.1l-12.9,45a6.49,6.49,0,0,1-4.7,4.5l-65,15.6A2.39,2.39,0,0,1,586.6,406Z\"/><ellipse class=\"cls-8\" cx=\"636.72\" cy=\"371.08\" rx=\"6\" ry=\"3.8\" transform=\"matrix(0.28, -0.96, 0.96, 0.28, 101.14, 877.32)\"/><path class=\"cls-8\" d=\"M687.2,311.1,542.4,303a6.49,6.49,0,0,1-6.1-7.1l12.4-126.5a8.74,8.74,0,0,1,7.9-7.8L708.4,150a6.43,6.43,0,0,1,6.9,7.3l-19,146.3A8.75,8.75,0,0,1,687.2,311.1Z\"/><path class=\"cls-7\" d=\"M683.2,311.1,537.7,303a6.43,6.43,0,0,1-6.1-7.1L544,168.8a8.66,8.66,0,0,1,8-7.8l152.5-11.7a6.55,6.55,0,0,1,7,7.3l-19.1,147A9,9,0,0,1,683.2,311.1Z\"/><polygon class=\"cls-9\" points=\"680.5 248.4 678.4 264.9 657.8 264.5 659.7 248.3 680.5 248.4\"/><polygon class=\"cls-10\" points=\"639.1 248.2 637.2 264.1 616.2 263.8 617.9 248.2 639.1 248.2\"/><polygon class=\"cls-11\" points=\"657.8 264.5 655.8 280.6 635.3 279.9 637.2 264.1 657.8 264.5\"/><path class=\"cls-8\" d=\"M575.1,176.7l-17.1,1a1.11,1.11,0,0,1-1.1-1.1l.3-2.9a1.91,1.91,0,0,1,1.6-1.6L576,171a1,1,0,0,1,1.1,1.1l-.3,3A1.91,1.91,0,0,1,575.1,176.7Z\"/><path class=\"cls-11\" d=\"M585.9,211.2l-30.2.9a2.1,2.1,0,0,1-2.1-2.3l1.6-15.8a2.78,2.78,0,0,1,2.6-2.5l30.4-1.5a2,2,0,0,1,2.1,2.3l-1.8,16.4A2.7,2.7,0,0,1,585.9,211.2Z\"/><path class=\"cls-12\" d=\"M632.5,209.8l-33.1,1a2.1,2.1,0,0,1-2.1-2.3l1.8-16.7a2.78,2.78,0,0,1,2.6-2.5l33.4-1.6a2,2,0,0,1,2.1,2.3l-2,17.3A2.88,2.88,0,0,1,632.5,209.8Z\"/><path class=\"cls-10\" d=\"M683.2,208.3l-36.5,1.1a2.05,2.05,0,0,1-2.1-2.3l2.1-17.6a2.87,2.87,0,0,1,2.6-2.5l36.7-1.8a2,2,0,0,1,2.1,2.3l-2.3,18.3A2.78,2.78,0,0,1,683.2,208.3Z\"/><path class=\"cls-13\" d=\"M593.6,294.4l75.8,3.4a5.41,5.41,0,0,0,5.5-4.6l8.4-66.2a5.21,5.21,0,0,0-5.3-5.9l-77.5,1.5a5.38,5.38,0,0,0-5.2,4.7l-6.7,61.3A5.25,5.25,0,0,0,593.6,294.4Z\"/><line class=\"cls-13\" x1=\"594.6\" y1=\"232.7\" x2=\"682.6\" y2=\"231.8\"/><line class=\"cls-13\" x1=\"619.7\" y1=\"233.1\" x2=\"612.6\" y2=\"295.2\"/><line class=\"cls-13\" x1=\"640.9\" y1=\"232.9\" x2=\"633.4\" y2=\"296.2\"/><line class=\"cls-13\" x1=\"661.6\" y1=\"232.8\" x2=\"653.8\" y2=\"297.1\"/><line class=\"cls-13\" x1=\"618\" y1=\"248.2\" x2=\"680.5\" y2=\"248.4\"/><line class=\"cls-13\" x1=\"616.2\" y1=\"263.8\" x2=\"678.4\" y2=\"264.9\"/><line class=\"cls-13\" x1=\"614.4\" y1=\"279.3\" x2=\"676.3\" y2=\"281.2\"/><path class=\"cls-8\" d=\"M683.8,166.9a3.11,3.11,0,0,1-2.4,2.7c-1.2.1-2-1-1.8-2.4a3.11,3.11,0,0,1,2.4-2.7A1.89,1.89,0,0,1,683.8,166.9Z\"/><path class=\"cls-8\" d=\"M674,167.6a2.78,2.78,0,0,1-2.4,2.6c-1.2.1-2-1-1.8-2.4a2.78,2.78,0,0,1,2.4-2.6C673.4,165.1,674.2,166.2,674,167.6Z\"/><path class=\"cls-8\" d=\"M664.4,168.2a2.88,2.88,0,0,1-2.4,2.6c-1.1.1-1.9-1-1.8-2.3a2.88,2.88,0,0,1,2.4-2.6C663.8,165.7,664.5,166.8,664.4,168.2Z\"/><path class=\"cls-14\" d=\"M376.2,290.9l-93.3,7.4c-2.9.2-5.5-2.4-5.7-5.8l-5.5-86.4c-.2-3.4,2.3-6.5,5.2-6.2l89.9,9a6.2,6.2,0,0,1,5.5,5.7l7.3,72.1A3.63,3.63,0,0,1,376.2,290.9Z\"/><path class=\"cls-12\" d=\"M380.7,290.1l-94.4,7.5c-3,.2-5.6-2.4-5.8-5.8l-5.4-86.9c-.2-3.5,2.4-6.6,5.3-6.3l91,8.9a6.29,6.29,0,0,1,5.6,5.7l7.4,72.5A4.19,4.19,0,0,1,380.7,290.1Z\"/><path class=\"cls-7\" d=\"M318.4,280l-21.6,1a3.07,3.07,0,0,1-3-3l-4-58.7c-.1-1.6,1.1-3.1,2.5-3l21.3,1.5a2.93,2.93,0,0,1,2.6,2.9l4.5,56.4A2.69,2.69,0,0,1,318.4,280Z\"/><path class=\"cls-15\" d=\"M320.3,279.1l-21.7,1.1a3.07,3.07,0,0,1-3-3l-4-58.9c-.1-1.6,1.1-3.1,2.5-3l21.4,1.5a2.93,2.93,0,0,1,2.6,2.9l4.5,56.6A2.65,2.65,0,0,1,320.3,279.1Z\"/><line class=\"cls-16\" x1=\"302.6\" y1=\"219.8\" x2=\"305.9\" y2=\"220\"/><line class=\"cls-16\" x1=\"307.7\" y1=\"220.1\" x2=\"308\" y2=\"220.1\"/><line class=\"cls-16\" x1=\"291.9\" y1=\"222.9\" x2=\"318.5\" y2=\"224.4\"/><line class=\"cls-16\" x1=\"295.3\" y1=\"272.6\" x2=\"322.2\" y2=\"271.7\"/><path class=\"cls-15\" d=\"M363.8,220.8l-21-1.6a2,2,0,0,0-2.2,2.2l.7,8.2a2.06,2.06,0,0,0,2,1.9l21,.8a2.08,2.08,0,0,0,2.2-2.3l-.7-7.4A2.35,2.35,0,0,0,363.8,220.8Z\"/><path class=\"cls-15\" d=\"M347.8,241.8a2.36,2.36,0,0,1-2.5,2.5,3,3,0,0,1-3-2.6,2.39,2.39,0,0,1,2.6-2.5A3,3,0,0,1,347.8,241.8Z\"/><line class=\"cls-13\" x1=\"352.4\" y1=\"241.9\" x2=\"366.7\" y2=\"242.1\"/><path class=\"cls-15\" d=\"M348.6,250.6a2.49,2.49,0,0,1-2.5,2.6,3,3,0,0,1-3-2.5,2.46,2.46,0,0,1,2.6-2.6A2.92,2.92,0,0,1,348.6,250.6Z\"/><line class=\"cls-13\" x1=\"353.2\" y1=\"250.5\" x2=\"367.4\" y2=\"250.3\"/><path class=\"cls-15\" d=\"M349.4,259.3a2.49,2.49,0,0,1-2.5,2.6,2.79,2.79,0,0,1-3-2.4,2.46,2.46,0,0,1,2.6-2.6A2.82,2.82,0,0,1,349.4,259.3Z\"/><line class=\"cls-13\" x1=\"353.9\" y1=\"259.1\" x2=\"368.1\" y2=\"258.5\"/><path class=\"cls-15\" d=\"M333.4,354.6c-1.3,0,4.5-13.8,10.5-11.9S341,354.7,333.4,354.6Z\"/><path class=\"cls-15\" d=\"M334.1,356.5s-6.5-8.2-13-6.3S322.7,361.3,334.1,356.5Z\"/><path class=\"cls-15\" d=\"M332.2,348.3s9.7-16.7,5.6-20.7C330.5,320.5,321.3,341.5,332.2,348.3Z\"/><path class=\"cls-7\" d=\"M348.4,386.3l-14.2,3.2a8.39,8.39,0,0,1-9.6-5l-6.5-15.6a5.27,5.27,0,0,1,3.7-7.2l25.8-5.8a5.23,5.23,0,0,1,6.4,4.9l.8,16.8A8.1,8.1,0,0,1,348.4,386.3Z\"/><path class=\"cls-17\" d=\"M335,360s-4.5-13.7-2.8-20.1\"/><path class=\"cls-10\" d=\"M385.6,416.6s-.6,6.9-2.2,11-4.4,9.1-3.5,16,7.5,17,10.1,16.7,1.2-4.7,1.2-4.7,2.6,3.7,5.1,2.6-.9-9.1-.9-9.1,3.1,5,5.9,4.4-2.8-8.5-2.8-8.5,3.7,4.1,4.7,3.5,1.9-.3,0-5,1.2-20,1.1-23.5S390.6,413.4,385.6,416.6Z\"/><path class=\"cls-12\" d=\"M422.7,430.5l19.5,40.8a3.21,3.21,0,0,1-1.5,4.3l-57.9,29.2a3.22,3.22,0,0,1-4.5-1.7l-21.7-55.8a3.24,3.24,0,0,1,2.3-4.3L419,428.8A3.12,3.12,0,0,1,422.7,430.5Z\"/><path class=\"cls-15\" d=\"M395.2,476l3.2,7.7a1.87,1.87,0,0,1-1,2.5l-8.2,3.7a1.9,1.9,0,0,1-2.6-1l-3.3-8.1a1.92,1.92,0,0,1,1.1-2.5l8.2-3.3A2.12,2.12,0,0,1,395.2,476Z\"/><line class=\"cls-13\" x1=\"378.9\" y1=\"469.9\" x2=\"370.7\" y2=\"449.6\"/><line class=\"cls-13\" x1=\"385\" y1=\"467.7\" x2=\"376.8\" y2=\"447.9\"/><path class=\"cls-10\" d=\"M413.5,468.6l3,6.8a1.87,1.87,0,0,1-1,2.5l-6.4,2.9a2,2,0,0,1-2.6-1l-3.1-7.1a2,2,0,0,1,1-2.6l6.5-2.6A2.18,2.18,0,0,1,413.5,468.6Z\"/><line class=\"cls-13\" x1=\"399.1\" y1=\"462.6\" x2=\"391.1\" y2=\"444\"/><line class=\"cls-13\" x1=\"404.3\" y1=\"460.7\" x2=\"396.3\" y2=\"442.6\"/><polygon class=\"cls-17\" points=\"428.5 460.6 432.9 470 424.4 473.9 419.9 464.1 428.5 460.6\"/><line class=\"cls-13\" x1=\"416.4\" y1=\"456.4\" x2=\"408.6\" y2=\"439.3\"/><line class=\"cls-13\" x1=\"420.8\" y1=\"454.8\" x2=\"413.1\" y2=\"438.1\"/><path class=\"cls-10\" d=\"M405.1,418.9a47.43,47.43,0,0,0,1.6,9.1,86,86,0,0,1,2.2,15.6c.1,2.7-4,1.8-6.3-2.4s-3.4-5.4-5.4-6.5a9.17,9.17,0,0,1-5-6C391,425,401.7,414.8,405.1,418.9Z\"/><path class=\"cls-15\" d=\"M437.8,253.1c-5.7,0-21.1,2.2-34.3,31.7-11,24.5-17.4,38.2-19,49.3s-2.9,37.6-1.8,57,2,27.6,2,27.6,9,5.9,20.9,0c0,0,3.1-23.8,5.5-37.8s3.3-28.1,2.7-34.4c0,0,15.7-27.6,22.7-38.6C443.7,296.9,470,253.1,437.8,253.1Z\"/><path class=\"cls-17\" d=\"M384.1,411.2a26.32,26.32,0,0,0,22.5,0\"/><path class=\"cls-17\" d=\"M384.9,331.4a8.62,8.62,0,0,1,7-5.4c6.8-1,10.6,5.9,9,14.1s-7.8,12.3-12.8,11.4a5.88,5.88,0,0,1-4.5-3.7\"/><path class=\"cls-13\" d=\"M514.5,645.3a14.54,14.54,0,0,1,5.8-10c5.4-3.8,11.6,3.2-2.5,8.9\"/><path class=\"cls-13\" d=\"M519.8,643.4s5.8-2.7,8.8.7-5.5,5.7-10,2.7\"/><path class=\"cls-13\" d=\"M427.7,645.3s8.5-9.9,15.9-10-1,8.2-10.3,11.1\"/><path class=\"cls-13\" d=\"M434.1,645.3s10.4-4,11.7,0-11,2.9-11,2.9\"/><path class=\"cls-10\" d=\"M489.5,619.3s-.4,17.8,0,22.7,9.4,8,16.6,5.7,7.4-7,7.4-7,1.6-21.5,1.6-25.6S489.6,611.2,489.5,619.3Z\"/><path class=\"cls-7\" d=\"M489.5,619.3s-.1,4.3-.1,9.3c8.1,3.1,18,2.1,25,.9.4-6,.8-12.5.8-14.6C515.1,610.9,489.6,611.2,489.5,619.3Z\"/><path class=\"cls-7\" d=\"M489.3,639s-1.4-.2-2.8,10.4-2.5,17,1.7,17.8,44.1,0,48.4,0,7.2-2.3,7-5.1-11-7.2-16-11.2-12.3-8.8-13.1-11.5c-1.4-4.5-4.2-6.2-6.6-.4-1.9,4.5-6.9,5-13.1,4.2A6.42,6.42,0,0,1,489.3,639Z\"/><path class=\"cls-13\" d=\"M529.1,652s-8.3,1.8-7.1,12.1\"/><path class=\"cls-10\" d=\"M408,615.9s-2.2,22.1-2,25.1,9.8,3.9,16,3.1,7-2.7,7-2.7,4.9-20.7,4.9-25.4S410,610.1,408,615.9Z\"/><path class=\"cls-7\" d=\"M408,615.9s-.4,3.9-.8,8.7c8.1,3.8,16.4,4.1,24.9,3.4,1-5,1.9-10,1.9-12C434.1,611.2,410,610.1,408,615.9Z\"/><path class=\"cls-7\" d=\"M406.1,635.3a66.09,66.09,0,0,0-2.3,10c-.6,4.7-4.9,20.1-2,22.3s44.4,0,48,0,8.1-2.2,7.6-6.1-8.2-5.5-13.8-9.4A120.66,120.66,0,0,1,430.8,641s1.2-6,.2-7.7-4.1,5.1-6.3,5.9-6.9,1.5-14.4,0A5.34,5.34,0,0,1,406.1,635.3Z\"/><path class=\"cls-13\" d=\"M443.6,652s-7,2.4-7.9,12.1\"/><path class=\"cls-7\" d=\"M512.6,372.5s3.5,12.1,5.5,37.2,4.7,70.9,5.5,79.9.8,32.9-1.6,61.8-1.2,52.8-.4,58.3-3.1,10.2-7,11.7-21.5,1.6-25.1,0c0,0-8.6-4.7-7.4-12.9s1.6-24.7-2.3-55.2,0-52.5,0-52.5-4.5-13.8-9.6-28.1c-1.8-5.1-3.7-10.3-5.4-15a116.89,116.89,0,0,0-6.2-14.5c-5.1-8.6-9-46.2-3.1-65.8C461.3,358,502.8,358,512.6,372.5Z\"/><path class=\"cls-7\" d=\"M421,371.3s-10.2,27.4-7.4,58.7,8.6,67.7,7.4,70.5-5.5,16.8-9.8,48.1-13.7,55.2-11.4,61.1,8.8,9,10.5,9.4,19.7,2.3,24,1.6,11-7.8,11-16,.8-25.8,9-54,11.1-36.5,14-49.4,5.6-81.3,5.6-81.3,7.3-34.1-15.9-41.1C434.8,371.7,421,371.3,421,371.3Z\"/><path class=\"cls-13\" d=\"M443.3,442s16.3-2.6,22.2,1.6\"/><path class=\"cls-13\" d=\"M420.4,396s9.9,3.5,26.9,5.2c0,0-1.8,17.6-2.9,21.3s-8.6,6.9-14.2,6.9c-5.2,0-10.9-5.7-12.1-9.9C416.6,413.8,420.4,396,420.4,396Z\"/><path class=\"cls-13\" d=\"M466.5,401.4s16.8,1.8,29.3-2.8c0,0,1.9,18.9,1.6,22s-7.3,8.9-12.5,10.1c-4.4,1-11.6-2.3-15-5.3S466.5,401.4,466.5,401.4Z\"/><path class=\"cls-13\" d=\"M519.1,424.5s-7.9-4.8-8.7-26\"/><path class=\"cls-13\" d=\"M470.1,472.8c-1.8-5.1-3.7-10.3-5.4-15a116.89,116.89,0,0,0-6.2-14.5\"/><path class=\"cls-13\" d=\"M429.9,499.4s12.1-2.7,19.4,0\"/><path class=\"cls-13\" d=\"M479.7,500.9a26,26,0,0,1,12.2-1.4\"/><path class=\"cls-13\" d=\"M411.6,622.6s-.4,3.5-.4,4.3\"/><path class=\"cls-13\" d=\"M419.3,624.3s-.2,3.7-.4,4.4\"/><path class=\"cls-13\" d=\"M429.1,624.7s-.5,3.5-.6,4\"/><path class=\"cls-13\" d=\"M493.2,625.8v4.7\"/><path class=\"cls-13\" d=\"M502.2,626.1a42.3,42.3,0,0,1-.6,4.9\"/><path class=\"cls-13\" d=\"M511.3,626.1s-.2,3-.3,4.3\"/><ellipse class=\"cls-17\" cx=\"490.1\" cy=\"211.9\" rx=\"7.2\" ry=\"8.7\"/><path class=\"cls-10\" d=\"M490,192.3s2.6,4.6,1.8,14.5,1.4,18.1.2,24.6a13.94,13.94,0,0,1-9.3,10.6c-2.7.8-16.7,2.7-23.6-6.5s-13.2-36.3-2-41.5S485.3,187,490,192.3Z\"/><path class=\"cls-10\" d=\"M491.9,231.4c1.3-6.6-1.1-14.6-.2-24.6s-1.8-14.5-1.8-14.5c-4.7-5.3-21.6-3.4-32.9,1.8-8.5,3.9-6.9,20.4-2.7,32.1,8.1,9,19.7,14.7,32.1,12.8a7.17,7.17,0,0,0,1.3-.1A12.84,12.84,0,0,0,491.9,231.4Z\"/><path class=\"cls-18\" d=\"M454.4,226.2a39.09,39.09,0,0,0,4.7,9.4c6.9,9.2,20.8,7.2,23.6,6.5a14.84,14.84,0,0,0,5.1-3C487.2,239,476.6,245.7,454.4,226.2Z\"/><line class=\"cls-17\" x1=\"485.3\" y1=\"211.8\" x2=\"497.3\" y2=\"211.4\"/><path class=\"cls-10\" d=\"M471,236.2s5.2,1.9,8.3,5.3c0,0-1,5.8-.6,8.7s-3.8,9.1-12.9,8.6-16.9-7.4-16.9-7.4,1.1-12.6,2.6-16.3S471,236.2,471,236.2Z\"/><path class=\"cls-19\" d=\"M476.6,239.1h0a5.61,5.61,0,0,1,2.3,5.2,29.08,29.08,0,0,0-.2,5.8\"/><path class=\"cls-7\" d=\"M484.6,212.4a8.52,8.52,0,0,0,2.9-4.2c.7-2.6,1.1-4.6,1.1-4.6a11.39,11.39,0,0,0,3.2,2c1.9.7,6.8-4.5,7.5-11.6s-2.6-14.5-10.7-17.6c-3.1-1.2-7.8-1.4-12.5-1.1a39.44,39.44,0,0,0-18.5,6.1,11.5,11.5,0,0,1-4.4,1.6c-5.8.8-9.4,3.1-12.8,11.2s-3.8,14.3.8,24,6,10.3,6.7,14.3-.2,8.5,3,7.8c8.8-2,17.8.5,19.9-.8s9.1-13.7,9.9-19.7S483.3,211.7,484.6,212.4Z\"/><path class=\"cls-10\" d=\"M485.9,213s-2.1-5.6-6.1-3.9c-5.4,2.3-2.1,11.8,3.1,13.4\"/><path d=\"M480,214a2.23,2.23,0,0,1,0-1.4,1.53,1.53,0,0,1,.5-.7,1.39,1.39,0,0,1,1.5-.3,1,1,0,0,1,.5.4c.1.1.2.3.3.4s.1.3.2.4a3.18,3.18,0,0,1,.2,1.3c.1.8,0,1.6.1,2.1s.5.9,1.4,1.1a1.48,1.48,0,0,1-1.3.4,2.16,2.16,0,0,1-1.4-.9,6.9,6.9,0,0,1-.6-2.6c0-.4-.1-.8-.1-1v-.3h.1c-.1-.1-.3-.1-.6.1A2.54,2.54,0,0,0,480,214Z\"/><path class=\"cls-15\" d=\"M448,250.2s.9-6.4,1.5-7.5,15.6-2.2,24.2,0,7.8,9.5,7.8,9.5S466,250.4,448,250.2Z\"/><path class=\"cls-12\" d=\"M418.1,273.5c1.7-9.6,5.3-24.5,40-24.6,29.6-.1,43.3,4.3,50.5,9.8s8,20,5.7,42.7-2.7,36.2-1.4,50.3,7,20.2-.6,27.8a176.93,176.93,0,0,1-49.9,7.2c-28,0-41.9-7.8-42.5-10s-3.3-2.9-.8-8.6,4.2-25.8,2.6-37.9S413.9,297.6,418.1,273.5Z\"/><g class=\"cls-20\"><rect class=\"cls-14\" x=\"423.4\" y=\"386.44\" width=\"5.1\" height=\"5.1\" transform=\"translate(-150.01 420.87) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"423.22\" y=\"369.86\" width=\"5.1\" height=\"5.1\" transform=\"translate(-138.22 415.77) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"422.97\" y=\"353.21\" width=\"5.1\" height=\"5.1\" transform=\"translate(-126.41 410.59) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"422.86\" y=\"336.56\" width=\"5.1\" height=\"5.1\" transform=\"translate(-114.55 405.52) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"422.68\" y=\"319.98\" width=\"5.1\" height=\"5.1\" transform=\"translate(-102.77 400.42) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"438.28\" y=\"386.29\" width=\"5.1\" height=\"5.1\" transform=\"translate(-145.44 431.45) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"438.17\" y=\"369.64\" width=\"5.1\" height=\"5.1\" transform=\"translate(-133.59 426.38) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"437.99\" y=\"353.07\" width=\"5.1\" height=\"5.1\" transform=\"translate(-121.8 421.28) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"437.81\" y=\"336.49\" width=\"5.1\" height=\"5.1\" transform=\"translate(-110.01 416.18) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"437.7\" y=\"319.84\" width=\"5.1\" height=\"5.1\" transform=\"translate(-98.16 411.1) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"453.3\" y=\"386.15\" width=\"5.1\" height=\"5.1\" transform=\"translate(-140.83 442.14) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"453.12\" y=\"369.57\" width=\"5.1\" height=\"5.1\" transform=\"translate(-129.05 437.04) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"452.94\" y=\"352.85\" width=\"5.1\" height=\"5.1\" transform=\"translate(-117.16 431.89) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"452.76\" y=\"336.27\" width=\"5.1\" height=\"5.1\" transform=\"translate(-105.38 426.79) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"452.58\" y=\"319.7\" width=\"5.1\" height=\"5.1\" transform=\"translate(-93.59 421.69) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"468.18\" y=\"386.01\" width=\"5.1\" height=\"5.1\" transform=\"translate(-136.27 452.72) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"468.07\" y=\"369.36\" width=\"5.1\" height=\"5.1\" transform=\"translate(-124.41 447.65) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"467.89\" y=\"352.78\" width=\"5.1\" height=\"5.1\" transform=\"translate(-112.63 442.55) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"467.71\" y=\"336.2\" width=\"5.1\" height=\"5.1\" transform=\"translate(-100.84 437.44) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"467.6\" y=\"319.55\" width=\"5.1\" height=\"5.1\" transform=\"translate(-88.98 432.37) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"483.21\" y=\"385.87\" width=\"5.1\" height=\"5.1\" transform=\"translate(-131.66 463.41) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"483.03\" y=\"369.29\" width=\"5.1\" height=\"5.1\" transform=\"translate(-119.87 458.3) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"482.85\" y=\"352.57\" width=\"5.1\" height=\"5.1\" transform=\"translate(-107.99 453.16) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"482.67\" y=\"335.99\" width=\"5.1\" height=\"5.1\" transform=\"translate(-96.2 448.06) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"482.49\" y=\"319.41\" width=\"5.1\" height=\"5.1\" transform=\"translate(-84.42 442.96) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"498.16\" y=\"385.65\" width=\"5.1\" height=\"5.1\" transform=\"translate(-127.02 474.02) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"497.98\" y=\"369.07\" width=\"5.1\" height=\"5.1\" transform=\"translate(-115.24 468.92) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"497.8\" y=\"352.5\" width=\"5.1\" height=\"5.1\" transform=\"translate(-103.45 463.82) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"497.69\" y=\"335.85\" width=\"5.1\" height=\"5.1\" transform=\"translate(-91.6 458.74) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"497.51\" y=\"319.27\" width=\"5.1\" height=\"5.1\" transform=\"translate(-79.81 453.64) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"513.11\" y=\"385.58\" width=\"5.1\" height=\"5.1\" transform=\"translate(-122.49 484.68) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"513\" y=\"368.93\" width=\"5.1\" height=\"5.1\" transform=\"translate(-110.63 479.6) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"512.75\" y=\"352.28\" width=\"5.1\" height=\"5.1\" transform=\"translate(-98.82 474.43) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"512.57\" y=\"335.7\" width=\"5.1\" height=\"5.1\" transform=\"translate(-87.03 469.33) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"512.46\" y=\"319.05\" width=\"5.1\" height=\"5.1\" transform=\"translate(-75.17 464.25) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"422.5\" y=\"303.4\" width=\"5.1\" height=\"5.1\" transform=\"translate(-90.98 395.32) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"422.39\" y=\"286.75\" width=\"5.1\" height=\"5.1\" transform=\"translate(-79.12 390.24) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"422.21\" y=\"270.17\" width=\"5.1\" height=\"5.1\" transform=\"translate(-67.34 385.14) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"422.03\" y=\"253.59\" width=\"5.1\" height=\"5.1\" transform=\"translate(-55.55 380.04) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"437.45\" y=\"303.19\" width=\"5.1\" height=\"5.1\" transform=\"translate(-86.34 405.93) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"437.27\" y=\"286.61\" width=\"5.1\" height=\"5.1\" transform=\"translate(-74.56 400.83) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"437.16\" y=\"269.96\" width=\"5.1\" height=\"5.1\" transform=\"translate(-62.7 395.75) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"436.98\" y=\"253.38\" width=\"5.1\" height=\"5.1\" transform=\"translate(-50.92 390.65) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"452.47\" y=\"303.05\" width=\"5.1\" height=\"5.1\" transform=\"translate(-81.74 416.61) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"452.29\" y=\"286.47\" width=\"5.1\" height=\"5.1\" transform=\"translate(-69.95 411.51) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"452.11\" y=\"269.89\" width=\"5.1\" height=\"5.1\" transform=\"translate(-58.16 406.41) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"452\" y=\"253.24\" width=\"5.1\" height=\"5.1\" transform=\"translate(-46.31 401.34) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"467.43\" y=\"302.97\" width=\"5.1\" height=\"5.1\" transform=\"translate(-77.2 427.27) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"467.24\" y=\"286.25\" width=\"5.1\" height=\"5.1\" transform=\"translate(-65.31 422.13) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"467.06\" y=\"269.68\" width=\"5.1\" height=\"5.1\" transform=\"translate(-53.53 417.02) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"466.88\" y=\"253.1\" width=\"5.1\" height=\"5.1\" transform=\"translate(-41.74 411.92) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"482.38\" y=\"302.76\" width=\"5.1\" height=\"5.1\" transform=\"translate(-72.56 437.88) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"482.2\" y=\"286.18\" width=\"5.1\" height=\"5.1\" transform=\"translate(-60.78 432.78) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"482.02\" y=\"269.6\" width=\"5.1\" height=\"5.1\" transform=\"translate(-48.99 427.68) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"481.91\" y=\"252.95\" width=\"5.1\" height=\"5.1\" transform=\"translate(-37.13 422.61) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"497.33\" y=\"302.69\" width=\"5.1\" height=\"5.1\" transform=\"translate(-68.03 448.54) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"497.15\" y=\"285.97\" width=\"5.1\" height=\"5.1\" transform=\"translate(-56.14 443.39) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"496.97\" y=\"269.39\" width=\"5.1\" height=\"5.1\" transform=\"translate(-44.35 438.29) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"496.79\" y=\"252.81\" width=\"5.1\" height=\"5.1\" transform=\"translate(-32.57 433.19) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"512.28\" y=\"302.48\" width=\"5.1\" height=\"5.1\" transform=\"translate(-63.39 459.15) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"512.1\" y=\"285.9\" width=\"5.1\" height=\"5.1\" transform=\"translate(-51.6 454.05) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"511.99\" y=\"269.25\" width=\"5.1\" height=\"5.1\" transform=\"translate(-39.75 448.98) rotate(-45.57)\"/><rect class=\"cls-14\" x=\"511.81\" y=\"252.67\" width=\"5.1\" height=\"5.1\" transform=\"translate(-27.96 443.88) rotate(-45.57)\"/></g><path class=\"cls-10\" d=\"M553.8,249s2.3-7.5,2-10.2-2.5-8.7-3.5-10.9-.2-8.4-.4-11.5,3.4-2.3,4.4.8a14,14,0,0,0,2.2,4.5s3.9-9,4.5-11.5,2.2-10.5,4.6-12.4,3.3.1,2,5.5a23.08,23.08,0,0,0-.8,6.1c0,.3,2.9.8,4.1,2.5a12.73,12.73,0,0,1,.9,3.3,5.4,5.4,0,0,1,2.4.6c.7.4,1.5,1.7,2.2,2.3a13,13,0,0,1,1.9,2.2c.9,1.3,1.6,3.9-1.1,14.9-1.5,6-4.2,8.1-6.2,22.1C570.7,271.3,551.8,257.9,553.8,249Z\"/><path class=\"cls-8\" d=\"M555.4,242.3c-.6,3.1-1.6,6.6-1.6,6.6-2,8.9,16.9,22.3,19,8.3.5-3.6,1.1-6.5,1.6-8.8C569.5,243.3,563,240.4,555.4,242.3Z\"/><ellipse class=\"cls-9\" cx=\"567.8\" cy=\"246.62\" rx=\"4.5\" ry=\"4.9\" transform=\"translate(-50.92 266.83) rotate(-25.35)\"/><path class=\"cls-15\" d=\"M505.6,256.8s7.9,0,19.1,15.1,13.5,19,13.5,19a211.8,211.8,0,0,1,7-20.2,168.08,168.08,0,0,0,6.4-20.1,5,5,0,0,1,3.7-3.7c4.1-.9,11.5-1,17.8,8.2a5.2,5.2,0,0,1,.8,3.6c-1,5.8-3.9,23.7-6.3,41.1-2.9,21.1-4.5,38.9-18.8,40.7-10.3,1.3-25.3-12.2-35.8-22.7-4.1-4.1-7.5-7.8-9.6-10-5.3-5.4-13.6-15.9-13.6-31C489.8,260.2,502.1,255.8,505.6,256.8Z\"/><path class=\"cls-21\" d=\"M513,317.9c-4.1-4.1-7.5-7.8-9.6-10-5.3-5.4-13.6-15.9-13.6-31\"/><path class=\"cls-17\" d=\"M538.2,290.8s12.9,16.8,16,24.9\"/><path class=\"cls-17\" d=\"M542.4,339.6c-.7-.5-1.5-1.5-1.4-3.6.2-3.8,4-9.9,11.2-11.4,6.1-1.3,9.2.6,9.8,2.6\"/><path class=\"cls-17\" d=\"M550.8,253.6s12.8-5.6,22.3,9.7\"/><path class=\"cls-19\" d=\"M568.6,209.3s-.2,3.4-.3,4-1,4.3-1.1,5.7\"/><path class=\"cls-19\" d=\"M573.6,215.1V218a25.83,25.83,0,0,1-.5,3.4\"/><path class=\"cls-19\" d=\"M577.9,218.2a16.58,16.58,0,0,1,.3,2.7,32.06,32.06,0,0,1-.5,3.9\"/><path class=\"cls-19\" d=\"M558.4,221.6a9.89,9.89,0,0,1-1.3,2.3\"/><path class=\"cls-15\" d=\"M507.8,111.9s-6.1,24.3,2.9,40.7a2.65,2.65,0,0,0,3.6,1.1l12.2-6.8-4.9-36.8Z\"/><path class=\"cls-12\" d=\"M510.5,112.4s-5.8,24.1,8.2,41.7a2.74,2.74,0,0,0,3.5.6l15.3-9.2-12.6-36.8C524.8,108.8,512.5,109.4,510.5,112.4Z\"/><polygon class=\"cls-11\" points=\"507.8 111.9 513.6 113.1 546.3 100.5 540.1 99.5 507.8 111.9\"/><path class=\"cls-15\" d=\"M546.3,100.5s.5,16,19.7,28.1a2.62,2.62,0,0,1,0,4.5l-30.6,18.1a2.68,2.68,0,0,1-2.6.1C513.3,141,513.6,113,513.6,113Z\"/><path class=\"cls-12\" d=\"M537.9,120.7a3.63,3.63,0,0,0-.9-.8,3,3,0,0,0-4.2,3.1,12.08,12.08,0,0,0,1.1,3.5,4.36,4.36,0,0,1,1.2-1.9,8.53,8.53,0,0,1,2.1-1.4,8.91,8.91,0,0,1,5.5-.7,7.2,7.2,0,0,1,4.4,2.8,6.56,6.56,0,0,1,1.2,5.1c-.3,1.9-1.7,3.6-4.4,5a8.52,8.52,0,0,1-8.2,0,12.38,12.38,0,0,1-4.9-5.4,17.42,17.42,0,0,1-1.6-3.6,8.91,8.91,0,0,1-.5-4.4,5.92,5.92,0,0,1,1.3-2.9,7.66,7.66,0,0,1,3-2.1,8.67,8.67,0,0,1,5.1-.7,5.86,5.86,0,0,1,3.8,2.3C540.3,119.5,539.5,119.9,537.9,120.7ZM539,133a4.74,4.74,0,0,0,3.1-.2,3,3,0,0,0,1.7-2,3.36,3.36,0,0,0-.7-2.6,4.07,4.07,0,0,0-2.4-1.8,4.15,4.15,0,0,0-2.7.2,3.17,3.17,0,0,0-1.6,1.4,3,3,0,0,0,.3,3.1A4.35,4.35,0,0,0,539,133Z\"/><path class=\"cls-10\" d=\"M407.2,172.8h33l3.4,2.2a1.63,1.63,0,0,0,2.5-1.4V150.3a4.27,4.27,0,0,0-4.3-4.3H407.2a4.27,4.27,0,0,0-4.3,4.3v18.2A4.27,4.27,0,0,0,407.2,172.8Z\"/><polyline class=\"cls-16\" points=\"412.7 155.3 414.4 157 417.7 153.7\"/><line class=\"cls-16\" x1=\"422.8\" y1=\"155.8\" x2=\"434.4\" y2=\"155.8\"/><polyline class=\"cls-16\" points=\"412.7 163.4 414.4 165.1 417.7 161.8\"/><line class=\"cls-16\" x1=\"422.8\" y1=\"163.9\" x2=\"434.4\" y2=\"163.9\"/><path class=\"cls-7\" d=\"M561.8,462.4l-3,3.2a1.27,1.27,0,0,0,0,1.8h0a1.24,1.24,0,0,0,1.7.2l3.5-2.1Z\"/><path class=\"cls-7\" d=\"M588.5,470.2l.8,4.3a1.33,1.33,0,0,1-1,1.5h0a1.23,1.23,0,0,1-1.5-.7l-1.8-3.7Z\"/><circle class=\"cls-15\" cx=\"578.7\" cy=\"454\" r=\"19.9\"/><circle class=\"cls-12\" cx=\"578.7\" cy=\"454\" r=\"12.8\"/><polyline class=\"cls-13\" points=\"582.3 458.6 578.7 454 580.6 447.6\"/><path class=\"cls-15\" d=\"M566,434.8a1,1,0,0,1-1.3-.7,5.8,5.8,0,0,1,3.6-6.3,5.68,5.68,0,0,1,6.9,2.3,1,1,0,0,1-.5,1.4Z\"/><path class=\"cls-15\" d=\"M599.7,444.6a.94.94,0,0,0,1.5.1,5.75,5.75,0,0,0-6.8-9,1,1,0,0,0-.3,1.5Z\"/><path class=\"cls-15\" d=\"M587.7,432.6l-5.2-1.5a1.58,1.58,0,0,1-1.1-2h0a1.58,1.58,0,0,1,2-1.1l5.2,1.5a1.58,1.58,0,0,1,1.1,2h0A1.51,1.51,0,0,1,587.7,432.6Z\"/><rect class=\"cls-15\" x=\"582.1\" y=\"431.5\" width=\"5.1\" height=\"3.9\" transform=\"translate(5.29 873.96) rotate(-73.8)\"/></svg>\n"
  },
  {
    "path": "resources/views/errors/maintenance.blade.php",
    "content": "<!doctype html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n    @php AdCache::adless() @endphp\n    @include('layouts.tracking.tracking')\n\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <meta name=\"description\" content=\"{{ __('front.meta.description') }}\">\n    <meta name=\"author\" content=\"{{ config('app.name') }}\">\n\n    <meta property=\"og:title\" content=\"{{ $title ?? __('front.meta.title', ['kanka' => config('app.name')]) }}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n\n    <title>{{ __('errors.503.title') }}</title>\n    <meta content='width=device-width, initial-scale=1, maximum-scale=5' name='viewport'>\n    @include('layouts.links.icons')\n\n    <link rel=\"dns-prefetch\" href=\"//cdnjs.cloudflare.com\">\n    <link rel=\"dns-prefetch\" href=\"//kit.fontawesome.com\">\n    <link rel=\"dns-prefetch\" href=\"//www.googletagmanager.com\">\n    @vite('resources/css/front.css')\n</head>\n\n<body id=\"page-top\">\n\n@include('layouts.front.nav', ['minimal' => true])\n\n<section class=\"bg-purple text-white gap-16\">\n    <div class=\"px-6 py-20 lg:max-w-7xl mx-auto text-center flex flex-col gap-8\">\n        @if (false)\n        <h2 id=\"maintenance\">Server maintenance</h2>\n\n        <p class=\"lg:max-w-2xl mx-auto text-center\">Kanka is currently unavailable due to planned server maintenance.</p>\n\n        <p class=\"lg:max-w-2xl mx-auto text-center\">This maintenance is planned to last until <a href=\"https://everytimezone.com/s/6d60e3d1\" target=\"_blank\" class=\"link-light\"><x-icon class=\"link\" />  15:30 UTC</a>.</p>\n        @else\n\n        <h2 id=\"maintenance\">{{ __('errors.503.title') }}</h2>\n\n        <p class=\"lg:max-w-2xl mx-auto text-center\">{{ __('errors.503.body.1') }}</p>\n        <p  class=\"lg:max-w-2xl mx-auto text-center\">{{ __('errors.503.body.2') }}</p>\n        @endif\n\n\n        <p class=\"lg:max-w-2xl mx-auto text-center\">Join us over on our <a href=\"https://kanka.io/go/discord\" class=\"link-light\">Discord</a> to be notified as soon as the maintenance is over.</p>\n    </div>\n</section>\n\n@yield('content')\n\n@includeWhen(Route::has('home'), 'front.footer')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/errors/private-campaign.blade.php",
    "content": "@extends('layouts.error', [\n    'error' => 403\n])\n\n@section('content')\n    <h2>{{ __('errors.private-campaign.title') }}</h2>\n    @guest\n        <p class=\"lg:max-w-2xl mx-auto text-center\">\n            {{ __('errors.private-campaign.guest.helper') }}\n        </p>\n        <p class=\"lg:max-w-2xl mx-auto text-center\">\n            <a href=\"{{ route('login') }}\" class=\"btn-round rounded-full\">{{ __('errors.private-campaign.guest.login') }}</a>\n        </p>\n    @else\n        <p class=\"lg:max-w-2xl mx-auto text-center\">\n            {{ __('errors.private-campaign.auth.helper') }}\n        </p>\n    @endguest\n\n@endsection\n"
  },
  {
    "path": "resources/views/events/events.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('events.events', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('events.events', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'events',\n        'view' => 'events.panels.events',\n    ])\n@endsection\n\n"
  },
  {
    "path": "resources/views/events/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Event::class, 'trans' => 'events'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.entity_locations')\n\n    <x-forms.field field=\"date\" :label=\"__('events.fields.date')\" :helper=\"__('events.helpers.date')\">\n        <input type=\"text\" name=\"date\" value=\"{{ old('date', $source->date ?? $model->date ?? null) }}\" class=\"w-full\" maxlength=\"191\" placeholder=\"{{  __('events.placeholders.date') }}\" />\n    </x-forms.field>\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n\n</x-grid>\n@include('cruds.forms._calendar', ['source' => $source])\n"
  },
  {
    "path": "resources/views/events/panels/events.blade.php",
    "content": "<div id=\"event-events\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/families/families.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */?>\n@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('families.families', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('families.families', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'families',\n        'view' => 'families.panels.families',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/families/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Family::class, 'trans' => 'families'])\n\n    @include('cruds.fields.parent')\n\n    @include('cruds.fields.location')\n\n    @include('cruds.fields.entry2')\n\n    @if ($campaign->enabled('characters'))\n        <x-forms.field field=\"members\">\n            <input type=\"hidden\" name=\"sync_family_members\" value=\"1\">\n            @include('components.form.family_members', ['options' => [\n                'model' => $model ?? FormCopy::model(),\n                'source' => $source ?? null,\n            ]])\n        </x-forms.field>\n    @endif\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.tags')\n\n    @include('cruds.fields.image')\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/families/members/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{{ __('families.members.create.helper', ['name' => $model->name]) }}</p>\n    </x-helper>\n\n    @include('cruds.fields.characters', ['quickCreator' => false, 'required' => true, 'model' => null])\n</x-grid>\n"
  },
  {
    "path": "resources/views/families/members/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('families.members.create.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($model->entity)->list(),\n        Breadcrumb::show()\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['families.members.store', $campaign, $model->id]\">\n        @include('partials.forms._dialog', [\n            'title' => __('families.members.create.title', ['name' => $model->name]),\n            'content' => 'families.members._form',\n            'submit' => __('organisations.members.actions.add_multiple'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/families/members.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . \\App\\Facades\\Module::plural(config('entities.ids.character'), __('entities.characters')),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'members',\n        'view' => 'families.panels._members',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/families/panels/_members.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Family $model\n * @var \\App\\Models\\Character $member\n */\n$allMembers = false;\n$model = $entity->child;\n$datagridOptions = [\n    $campaign,\n    $model,\n    'init' => 1\n];\nif (request()->get('m') == \\App\\Enums\\Descendants::All->value || (!request()->has('m') && $campaign->defaultDescendantsMode() === \\App\\Enums\\Descendants::All)) {\n    $allMembers = true;\n    $datagridOptions['m'] = \\App\\Enums\\Descendants::All;\n}\n$datagridOptions = Datagrid::initOptions($datagridOptions);\n$direct = \\Illuminate\\Support\\Number::format($model->members()->has('entity')->count());\n$all = \\Illuminate\\Support\\Number::format($model->allMembers()->count());\n?>\n<div class=\"flex gap-2 items-center justify-between flex-wrap\">\n    <h3 class=\"members-title text-xl\">\n        {{ __('organisations.fields.members') }}\n    </h3>\n    <div class=\"flex gap-2 flex-wrap overflow-auto\">\n        @if (!$allMembers)\n            <a href=\"{{ route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::All]) }}\" class=\"btn2 btn-sm\"data-toggle=\"tooltip\" data-title=\"{{ __('crud.filters.lists.paginated') }}\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">\n                    {{ __('crud.filters.lists.desktop.all', ['count' => $all]) }}\n                </span>\n                <span class=\"xl:hidden\">\n                    {{ $all }}\n                </span>\n            </a>\n        @else\n            <a href=\"{{ route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::Direct]) }}\" class=\"btn2 btn-sm\" data-toggle=\"tooltip\" data-title=\"{{ __('crud.filters.lists.paginated') }}\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">\n                    {{ __('crud.filters.lists.desktop.filtered', ['count' => $direct]) }}\n                </span>\n                <span class=\"xl:hidden\">\n                    {{ $direct  }}\n                </span>\n            </a>\n        @endif\n        @can('update', $entity)\n            <a href=\"{{ route('families.members.create', [$campaign, 'family' => $model]) }}\" class=\"btn2 btn-sm\"\n               data-toggle=\"dialog\" data-url=\"{{ route('families.members.create', [$campaign, $model]) }}\">\n                <x-icon class=\"plus\" />\n                <span class=\"hidden lg:inline\">{{ __('organisations.members.actions.add_multiple') }}</span>\n            </a>\n        @endcan\n    </div>\n</div>\n<div id=\"family-members\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', ['datagridUrl' => route('families.members', $datagridOptions)])\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/families/panels/families.blade.php",
    "content": "<div id=\"family-families\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/families/panels/tree.blade.php",
    "content": "\n<div id=\"family-tree\">\n    <family-tree\n        permission=\"{{ auth()->check() && auth()->user()->can('update', $family->entity) }}\"\n        api=\"{{ route('families.family-tree.api', [$campaign, $family]) }}\"\n        save_api=\"{{ route('families.family-tree.api-save', [$campaign, $family]) }}\"\n        entity_api=\"{{ route('families.family-tree.entity-api', [$campaign, 0]) }}\"\n        search_api=\"{{ route('search.entities-with-relations', [$campaign, 'only' => config('entities.ids.character')]) }}\"\n        subscribe_url=\"{{ route('settings.subscription', ['f' => 'cta', 'w' => $campaign->id]) }}\"\n    >\n    </family-tree>\n</div>\n\n@section('scripts')\n    @parent\n    @vite('resources/js/family-tree-vue.js')\n@endsection\n@section('styles')\n    @parent\n    @vite('resources/css/families/tree.css')\n@endsection\n"
  },
  {
    "path": "resources/views/families/show.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n            @include('families.panels._members')\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/families/trees/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('families/trees.title', ['name' => $family->name]),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'tree',\n        'view' => 'families.panels.tree',\n        'entity' => $family->entity,\n        'model' => $family,\n    ])\n@endsection\n\n\n"
  },
  {
    "path": "resources/views/filters/form.blade.php",
    "content": "@php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\EntityType $entityType\n * @var \\App\\Services\\FilterService $filterService\n */\n    use Illuminate\\Support\\Arr;\n\n    if (isset($entityType) && $entityType->hasEntity()) {\n        $formRoute = ['entities.index', $campaign, $entityType];\n        $resetRoute = route('entities.index', [$campaign, $entityType, 'reset-filter' => 'true']);\n    } else {\n        $formRoute = [$route, $campaign];\n        $resetRoute = route($route, [$campaign, 'reset-filter' => 'true']);\n    }\n@endphp\n<x-form :action=\"$formRoute\" method=\"GET\" id=\"crud-filters-form-za2\" class=\"block\">\n<x-dialog.header>\n    {{ __('crud.filters.title') }}\n</x-dialog.header>\n<x-dialog.article>\n    @if (auth()->guest())\n        <x-helper>\n            <p>{{ __('filters.helpers.guest') }}</p>\n        </x-helper>\n    @else\n        <x-grid class=\"max-w-3xl\">\n            @foreach ($filters as $field)\n\n                @if ($field === 'attributes')\n                    @php $hasAttributeFilters = true @endphp\n                    @continue\n                @elseif ($field === 'connections')\n                    @php $hasConnectionFilters = true @endphp\n                    @continue\n                @endif\n                <div class=\"field flex flex-col gap-1 field-{{ $field['field'] ?? 'unknown' }}\">\n                    @if (is_array($field))\n                        <label class=\"text-xs font-medium opacity-80\">{!! Arr::get($field, 'label', __('crud.fields.' . $field['field'])) !!}</label>\n                            <?php\n                            $model = $models = null;\n                            $value = $filterService->single($field['field']);\n                            if (!empty($value) && $field['type'] == 'select2') {\n                                $modelclass = new $field['model'];\n                                $model = $modelclass->find($value);\n                            }\n                            // Support for fields with multiple models selected\n                            if (Arr::get($field, 'multiple') === true && $field['type'] == 'selectMultiple') {\n                                $value = $filterService->filterValue($field['field']);\n                                if (!empty($value)) {\n                                    $modelclass = new $field['model'];\n                                    $models = $modelclass->whereIn('id', $value)->get()->pluck('name', 'id')->toArray();\n                                }\n                            }\n                            ?>\n\n                        @if ($field['type'] === 'tag')\n                            @include('cruds.datagrids.filters._tag', ['value' => $filterService->filterValue('tags')])\n                        @elseif ($field['type'] === 'text')\n                            <input type=\"text\" class=\"w-full field-{{ $field['field'] }}\" name=\"{{ $field['field'] }}\" value=\"{{ $filterService->single($field['field']) }}\" data-1p-ignore=\"true\" placeholder=\"{{ $field['placeholder'] ?? null }}\" />\n                        @elseif ($field['type'] === 'number')\n                            <input type=\"number\" class=\"w-full field-{{ $field['field'] }}\" name=\"{{ $field['field'] }}\" value=\"{{ $filterService->single($field['field']) }}\" data-1p-ignore=\"true\" placeholder=\"{{ $field['placeholder'] ?? null }}\" min=\"{{ $field['min'] ?? 0 }}\" max=\"{{ $field['max'] ?? 100 }}\" />\n                        @elseif ($field['type'] === 'select')\n                            @include('cruds.datagrids.filters._select')\n                        @else\n                            @include('cruds.datagrids.filters._array')\n                        @endif\n                    @else\n                        @php $labelField = $field === 'status_id' ? 'status' : $field; @endphp\n                        <label class=\"text-xs font-medium opacity-80\">\n                            @if ($field === 'status_id')\n                                {{ __('entities.status') }}\n                            @else\n                                {{ __((in_array($labelField, ['name', 'type', 'is_private', 'has_image', 'has_attributes', 'has_entity_files', 'has_entry', 'has_posts', 'date_range', 'template', 'archived']) ? 'crud.fields.' : $langKey . '.fields.') . $labelField) }}\n                            @endif\n                        </label>\n                        @if ($field === 'status_id' && isset($entityType))\n                            @include('cruds.datagrids.filters._status')\n                        @elseif ($filterService->isCheckbox($field))\n                            @include('cruds.datagrids.filters._choice')\n                        @elseif ($field === 'type' && !empty($entityModel))\n                            @include('cruds.datagrids.filters._type')\n                        @elseif ($field === 'sex' && !empty($entityModel))\n                            @include('cruds.datagrids.filters._sex')\n                        @elseif ($field === 'date')\n                            @include('cruds.datagrids.filters._date')\n                        @elseif ($field === 'element_role')\n                            @include('cruds.datagrids.filters._element-role')\n                        @elseif ($field === 'date_range')\n                            @include('cruds.datagrids.filters._date-range')\n                        @elseif ($field === 'template')\n                            @include('cruds.datagrids.filters._template')\n                        @elseif ($field === 'archived')\n                            @include('cruds.datagrids.filters._archived')\n                        @else\n                            <input type=\"text\" class=\"w-full entity-list-filter\" name=\"{{ $field }}\" value=\"{{ $filterService->single($field) }}\" data-1p-ignore=\"true\" />\n                        @endif\n                    @endif\n                </div>\n            @endforeach\n        </x-grid>\n        @includeWhen($hasAttributeFilters, 'cruds.datagrids.filters._attributes')\n        @includeWhen(isset($hasConnectionFilters), 'cruds.datagrids.filters._connection')\n@endif\n<br class=\"clear-both\" />\n</x-dialog.article>\n@if (auth()->check())\n    <footer class=\"flex flex-wrap gap-3 justify-between items-start p-3\">\n        <menu class=\"flex flex-wrap gap-3 ps-0\">\n            <span role=\"button\" class=\"flex-none btn2 btn-sm flex gap-2 items-center {{ $filterService->activeFiltersCount() === 0 ? 'btn-disabled' : null }} \"\n               @if ($filterService->activeFiltersCount() > 0) data-clipboard=\"{{ $filterService->clipboardFilters() }}\" data-toast=\"{{ __('filters.alerts.copy') }}\" onclick=\"return false\"  @endif data-toggle=\"tooltip\" data-title=\"{{ __('crud.filters.copy_helper') }}\">\n                <x-icon class=\"fa-regular fa-clipboard\" />\n                <span class=\"max-sm:hidden\">{{ __('crud.filters.copy_to_clipboard') }}</span>\n                <span class=\"visible md:hidden\">{{ __('crud.filters.mobile.copy') }}</span>\n            </span>\n\n            @if ($filterService->activeFiltersCount() > 0)\n                <a href=\"{{ $resetRoute }}\" class=\"btn2 btn-sm btn-error btn-outline\">\n                    <x-icon class=\"fa-regular fa-eraser\" />\n                    {{ __('crud.filters.mobile.clear') }}\n                </a>\n            @endif\n\n            <a class=\"btn2 btn-sm btn-link\" href=\"//docs.kanka.io/en/latest/advanced/filters.html\" target=\"_blank\" title=\"{{ __('helpers.filters.title') }}\">\n                {{ __('helpers.filters.title') }}\n            </a>\n        </menu>\n        <menu class=\"flex flex-wrap gap-3 ps-0\">\n            <button type=\"submit\" class=\"btn2 btn-primary btn-sm\">\n                <x-icon class=\"fa-regular fa-filter\" />\n                {{ __('crud.filter') }}\n            </button>\n        </menu>\n    </footer>\n@endif\n</x-form>\n"
  },
  {
    "path": "resources/views/filters/save_form.blade.php",
    "content": "<x-form :action=\"['save-filters', $campaign, $entityType, 'm' => $mode]\" method=\"GET\" id=\"crud-filters-form\"\n        class=\"block\">\n    <x-dialog.header>\n        {{ __('filters.actions.bookmark') }}\n    </x-dialog.header>\n    <x-dialog.article>\n        <x-helper>\n            <p>{{ __('filters.bookmark.helper') }}</p>\n        </x-helper>\n        <x-grid type=\"1/1\">\n            <x-forms.field\n                    field=\"name\"\n                    :label=\"__('crud.fields.name')\">\n                <input type=\"text\" name=\"name\"\n                       value=\"{{  __('filters.bookmark.name', ['module' => $entityType->plural()]) }}\" maxlength=\"191\"\n                       class=\"w-full\" autocomplete=\"off\"/>\n            </x-forms.field>\n\n            @if ($campaign->boosted())\n                <x-forms.field\n                        field=\"icon\"\n                        :label=\"__('maps/markers.fields.icon')\"\n                        :helper=\"__('filters.helpers.icon', [\n            'fontawesome' => '<a href=\\'' . config('fontawesome.search') . '\\' class=\\'text-link\\'>FontAwesome</a>',\n            'example' => '<i class=\\'fa-regular fa-user-beard-bolt\\' aria-hidden=\\'true\\'></i> <code>fa-solid fa-horse</code>',\n            ])\">\n                    <input type=\"text\" name=\"icon\" value=\"fa-solid fa-th-list\" maxlength=\"191\" class=\"w-full\"\n                           autocomplete=\"off\"/>\n                </x-forms.field>\n            @else\n                <x-forms.field\n                        field=\"icon\"\n                        :label=\"__('entities/links.fields.icon')\">\n                    <x-slot name=\"helper\">\n                        {!! __('filters.helpers.icon-premium', [\n                            'fontawesome' => '<a href=\"' . config('fontawesome.search') . '\" class=\"text-link\">FontAwesome</a>',\n                            'example' => '<i class=\\'fa-regular fa-user-beard-bolt\\' aria-hidden=\\'true\\'></i> <code>fa-solid fa-horse</code>',\n                            'premium' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>',\n                        ]) !!}\n                    </x-slot>\n                </x-forms.field>\n                <input type=\"hidden\" name=\"icon\" value=\"fa-solid fa-th-list\"/>\n            @endif\n\n\n            <x-forms.field\n                    field=\"position\"\n                    :label=\"__('bookmarks.fields.position')\"\n                    tooltip\n                    :helper=\"__('entities/links.helpers.parent')\">\n                <x-forms.select name=\"parent\" :options=\"$parents\"\n                                :selected=\"$entityType->plural() ?? 'bookmarks'\"/>\n                <p class=\"text-neutral-content md:hidden\">\n                    {!! __('entities/links.helpers.parent') !!}\n                </p>\n            </x-forms.field>\n        </x-grid>\n        <br class=\"clear-both\"/>\n    </x-dialog.article>\n    @if (auth()->check())\n        <footer class=\"flex flex-wrap gap-3 justify-between items-start p-3\">\n            <menu class=\"flex flex-wrap gap-3 ps-0\">\n                <button type=\"submit\" class=\"btn2 btn-primary btn-sm\">\n                    <x-icon class=\"fa-solid fa-filter\"/>\n                    {{ __('crud.save') }}\n                </button>\n            </menu>\n        </footer>\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/front/_campaign.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign $campaign */?>\n<div class=\"flex flex-col gap-5 text-left w-72\" title=\"{!! $campaign->name !!}\">\n    <a href=\"{{ route('dashboard', $campaign) }}\" class=\"relative\">\n        <img src=\"{{ $campaign->image ? $campaign->thumbnail(320, 240) : 'https://th.kanka.io/zzKcBpijSBvm4rPWdzRpI82pTNQ=/320x240/smart/src/app/backgrounds/mountain-background-medium.jpg' }}\" alt=\"{{ $campaign->name }}\" class=\"w-80 h-60\">\n        @if ($campaign->is_prioritised)\n            <span class=\"absolute top-2 left-2 bg-purple text-white text-xs font-semibold px-2 py-1 rounded\">\n                <x-icon class=\"fa-regular fa-star\" />\n                {{ __('campaigns/applications.setup.prioritised') }}\n            </span>\n        @endif\n    </a>\n\n    <div class=\"flex flex-col gap-2\">\n        <a class=\"flex gap-2\" href=\"{{ route('dashboard', $campaign) }}\">\n            <h3 class=\"block\" >{!! $campaign->name !!}</h3>\n        </a>\n\n        @if ($campaign->spotlight)\n            <a class=\"text-sm text-light hover:font-semibold\" href=\"{{ $campaign->spotlight->url }}\">View spotlight</a>\n\n        @endif\n        <div class=\"flex flex-wrap gap-6 text-sm\">\n\n            <span class=\"\" title=\"{{ __('campaigns.fields.entity_count') }}\" data-toggle=\"tooltip\">\n                <x-icon class=\"pencil\" />\n                {{ \\Illuminate\\Support\\Number::format($campaign->visible_entity_count) }}\n            </span>\n            <span class=\"\" title=\"{{ __('campaigns.fields.followers') }}\" data-toggle=\"tooltip\">\n                <x-icon class=\"fa-regular fa-eye\" />\n                {{ \\Illuminate\\Support\\Number::format($campaign->follower) }}\n            </span>\n            @if ($campaign->locale)\n                <span class=\"\" title=\"{{ __('languages.codes.' . $campaign->locale) }}\" data-toggle=\"tooltip\">\n                    <x-icon class=\"fa-regular fa-language\" />\n                    {{ $campaign->locale }}\n                </span>\n            @endif\n            @if ($campaign->systems->isNotEmpty())\n                <span class=\"\" title=\"{{ __('campaigns.fields.system') }}\" data-toggle=\"tooltip\">\n                    <x-icon class=\"cog\" />\n                    {{ $campaign->getSystems() }}\n                </span>\n            @endif\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/front/boosters.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/front/features.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/front/footer.blade.php",
    "content": "<footer class=\"bg-dark text-light py-12 px-6\">\n    <div class=\"mx-auto lg:max-w-7xl flex flex-col gap-10\">\n        <div class=\"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-5\">\n            <div class=\"flex-col gap-8 hidden lg:flex col-span-2 \">\n                <div class=\"flex\">\n                    <a href=\"{{ route('home') }}\" class=\"text-white\">\n                        <svg class=\"h-28 w-28\"  alt=\"Kanka Logo\" class=\"text-white\" >\n                            <use href=\"/images/svgs/sprites.svg#kanka-logo\"></use>\n                        </svg>\n                    </a>\n                </div>\n\n                <div class=\"flex items-center gap-5 text-3xl flex-wrap\">\n                    @include('layouts._socials')\n                </div>\n                <div class=\"text-xs\">\n                    <p class=\"text-xs\">\n                        {{ __('footer.made') }}\n                    </p>\n                    <p class=\"text-xs\">\n                        {{ __('footer.thanks') }}\n                    </p>\n                    <p class=\"text-xs\">\n                        {!! __('footer.copyright', ['copy' => '&copy;', 'year' => date('Y'), 'company' => 'Owlchester SNC'])!!}\n                    </p>\n                </div>\n            </div>\n\n            <div class=\"flex flex-col gap-3 text-sm\">\n                <span class=\"block text-nav uppercase\">{{ __('footer.platform') }}</span>\n                <a href=\"{{ Domain::toFront('features') }}\">{{ __('footer.features') }}</a>\n                <a href=\"{{ Domain::toFront('premium') }}\">{{ __('footer.premium') }}</a>\n                <a href=\"{{ Domain::toFront('pricing') }}\">{{ __('footer.pricing') }}</a>\n                <a href=\"{{ config('marketplace.url') }}\" >{{ __('footer.plugins') }}</a>\n            </div>\n\n            <div class=\"flex flex-col gap-3 text-sm\">\n                <span class=\"block text-nav uppercase\">{{ __('footer.resources') }}</span>\n                <a href=\"{{ Domain::toFront('kb') }}\">{{ __('footer.kb') }}</a>\n                <a href=\"https://docs.kanka.io/en/latest/index.html\" target=\"_blank\">{{ __('footer.documentation') }}</a>\n                <a href=\"{{ route('larecipe.index') }}\" target=\"_blank\">{{ __('front.features.api.link') }}</a>\n                <a href=\"https://blog.kanka.io\" target=\"_blank\">{{ __('footer.blog') }}</a>\n                <a href=\"https://status.kanka.io\" target=\"_blank\">{{ __('footer.status') }}</a>\n            </div>\n\n            <div class=\"flex flex-col gap-3 text-sm\">\n                <span class=\"block text-nav uppercase\">{{ __('footer.community') }}</span>\n                <a href=\"https://blog.kanka.io/category/news\">{{ __('footer.whats-new') }}</a>\n                <a href=\"{{ Domain::toFront('campaigns') }}\">{{ __('footer.public-campaigns') }}</a>\n                <a href=\"{{ Domain::toFront('showcase') }}\">{{ __('footer.showcase') }}</a>\n                <a href=\"{{ route('roadmap') }}\">{{ __('footer.roadmap') }}</a>\n                <a href=\"{{ Domain::toFront('hall-of-fame') }}\">{{ __('front/hall-of-fame.title') }}</a>\n            </div>\n\n            <div class=\"flex flex-col gap-3 text-sm\">\n                <span class=\"block text-nav uppercase\">{{ __('footer.company') }}</span>\n                <a href=\"{{ Domain::toFront('about') }}\">{{ __('footer.about') }}</a>\n                <a href=\"{{ Domain::toFront('contact') }}\">{{ __('footer.contact') }}</a>\n                <a href=\"{{ Domain::toFront('privacy-policy') }}\">{{ __('footer.privacy') }}</a>\n                <a href=\"{{ Domain::toFront('terms-and-conditions') }}\">{{ __('footer.terms') }}</a>\n                <a href=\"{{ Domain::toFront('security') }}\">{{ __('footer.security') }}</a>\n                <a href=\"{{ Domain::toFront('press-kit') }}\">{{ __('footer.press-kit') }}</a>\n            </div>\n        </div>\n\n        <div class=\"lg:hidden flex flex-col gap-5 text-center\">\n            <div class=\"flex justify-center\">\n                <a href=\"{{ route('home') }}\">\n                    <svg class=\"h-28 w-28\"  alt=\"Kanka Logo\" >\n                        <use href=\"/images/svgs/sprites.svg#kanka-logo\"></use>\n                    </svg>\n                </a>\n            </div>\n\n            <div class=\"flex justify-center gap-5 text-3xl\">\n                @include('layouts._socials')\n            </div>\n\n            <div class=\"text-center text-sm\">\n                Kanka {!! __('footer.copyright', ['copy' => '&copy;', 'year' => date('Y'), 'company' => 'Owlchester SNC'])!!}\n            </div>\n        </div>\n\n        <span data-ccpa-link=\"1\"></span>\n        <div id=\"ncmp-consent-link\"></div>\n    </div>\n</footer>\n"
  },
  {
    "path": "resources/views/front/home.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/front/sitemap.blade.php",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n@if (!empty($urls))\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n@foreach ($urls as $link)\n    <url>\n        <loc>{{ $link }}</loc>\n    </url>\n@endforeach\n</urlset>\n@endif\n@if (!empty($sitemaps))\n<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n@foreach ($sitemaps as $link)\n    <sitemap>\n        <loc>{{ $link }}</loc>\n    </sitemap>\n@endforeach\n</sitemapindex>\n@endif"
  },
  {
    "path": "resources/views/gallery/_image.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Image $image\n*/\n?>\n\n<li tabindex=\"0\" class=\"overflow-hidden rounded shadow-sm aspect-square w-[25%] sm:w-48 cursor-pointer flex flex-col bg-box select-none hover:shadow-md focus:shadow-md  @if ($image->is_folder) items-center justify-center @endif\"\n    aria-label=\"{{ $image->name }}\"\n    data-id=\"{{ $image->id }}\"\n    data-url=\"{{ route('images.edit', [$campaign, $image]) }}\"\n    @if ($image->is_folder) data-folder=\"{{ route('gallery', [$campaign, 'folder_id' => $image->id]) }}\" @endif\n    title=\"{{ $image->name }}\">\n    @if ($image->isFolder())\n        <div class=\"w-full flex flex-col items-center gap-2\">\n            <x-icon class=\"fa-regular fa-folder text-lg\" />\n            <div class=\"text-base overflow-hidden text-center px-2\">\n\n                @if ($image->visibility_id != \\App\\Enums\\Visibility::All)\n                    @include('icons.visibility', ['icon' => $image->visibilityIcon()])\n                @endif\n                {{ $image->name }}\n            </div>\n        </div>\n    @else\n        @if ($image->hasThumbnail())\n            <a class=\"block avatar grow relative cover-background\"\n                style=\"background-image: url('{{ $image->getUrl(192, 144) }}')\">\n            </a>\n        @else\n            <div class=\"grow w-full flex flex-col justify-center items-center gap-2\">\n                <x-icon class=\"fa-regular fa-file text-4xl\" />\n            </div>\n        @endif\n        <div class=\"block px-2 py-4 h-12 truncate\">\n            @include('icons.visibility', ['icon' => $image->visibilityIcon()])\n            {{ $image->name }}\n        </div>\n    @endif\n</li>\n"
  },
  {
    "path": "resources/views/gallery/file/_actions.blade.php",
    "content": "\n@can('edit', [$image, $campaign])\n    @if ($image->hasThumbnail())\n        <a href=\"#\" class=\"btn2 btn-ghost\" data-toggle=\"dialog\" data-url=\"{{  route('campaign.gallery.focus', [$campaign, $image]) }}\">\n            <x-icon class=\"fa-regular fa-bullseye\" />\n            <span class=\"hidden md:inline\">\n                {{ __('campaigns/gallery.actions.focus_point') }}\n            </span>\n        </a>\n    @endif\n@endcan\n@if (!$image->isFolder() )\n<a class=\"btn2 btn-ghost\" href=\"{{ $image->url() }}\" target=\"_blank\">\n    <x-icon class=\"fa-regular fa-link\" />\n    <span class=\"hidden md:inline\">\n        {{ __('crud.actions.open') }}\n    </span>\n</a>\n@endif\n@can('edit', [$image, $campaign])\n<div class=\"submit-group\">\n    <button class=\"btn2 btn-primary\">\n        <x-icon class=\"save\" />\n        <span class=\"hidden sm:inline\">{{ $submit ?? __('crud.save') }}</span>\n    </button>\n</div>\n@endcan\n"
  },
  {
    "path": "resources/views/gallery/file/_form.blade.php",
    "content": "    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5\">\n        <div class=\"\">\n            @if($image->isFolder())\n                <div class=\"text-center my-5\">\n                    <x-icon class=\"fa-regular fa-folder fa-4x\" />\n                </div>\n            @else\n\n                @if ($image->hasThumbnail())\n                    <div class=\"text-center\">\n                        <img src=\"{{ $image->getUrl(192, 144) }}\" class=\"max-w-full rounded\" alt=\"{{ $image->name }}\" />\n                    </div>\n                @else\n                    <x-helper>\n                        <p>This file can't be previewed.</p>\n                    </x-helper>\n                @endif\n\n                <hr />\n\n                <div class=\"grid grid-cols-1 gap-5\">\n                    @if (!$image->isFont())\n                        <p class=\"{{ $image->inEntitiesCount() === 0 ? 'text-muted' : '' }} m-0\">\n                            {{ trans_choice('campaigns/gallery.fields.image_used_in', $image->inEntitiesCount(), ['count' => $image->inEntitiesCount()]) }}\n                        </p>\n                        @if($image->inEntitiesCount() > 0)\n                            <div class=\"grid grid-cols-2 gap-2\">\n                                @foreach($image->inEntities() as $entity)\n                                    <a href=\"{{ $entity->url() }}\" class=\"text-link\">{{ $entity->name }}</a>\n                                @endforeach\n                            </div>\n                        @endif\n                    @endif\n\n                    @if($image->mentions->count() > 0)\n                        <p class=\"{{ $image->mentions->count() === 0 ? 'text-muted' : '' }} m-0\">\n                            {{ trans_choice('campaigns/gallery.fields.image_mentioned_in', $image->mentions->count(), ['count' => $image->mentions->count()]) }}\n                        </p>\n                        <div class=\"grid grid-cols-2 gap-2\">\n                            @foreach($image->mentions as $mention)\n                                @if($mention->isPost())\n                                    <a href=\"{{ $mention->entity->url() }}?#post-{{ $mention->post_id }}\"  class=\"text-link\">{{ $mention->post->name }}</a>\n                                @else\n                                    <a href=\"{{ $mention->entity->url() }}\" class=\"text-link\">{{ $mention->entity->name }}</a>\n                                @endif\n                            @endforeach\n                        </div>\n                    @endif\n                </div>\n            @endif\n        </div>\n        <x-grid type=\"1/1\">\n            <div class=\"flex gap-2 items-center flex-wrap\">\n                @if(!$image->isFolder())\n                    <x-badge :title=\"__('campaigns/gallery.fields.ext')\">\n                        <x-icon class=\"fa-regular fa-image\" />\n                        {{ strtoupper($image->ext) }}\n                    </x-badge>\n                    <x-badge :title=\"__('campaigns/gallery.fields.size')\">\n                        <x-icon class=\"fa-regular fa-weight-hanging\" />\n                        {{ $image->niceSize() }}\n                    </x-badge>\n                @endif\n                <x-badge :title=\"__('campaigns/gallery.fields.created_by')\" css=\"text-xs\">\n                    <x-icon class=\"fa-regular fa-user\" />\n                    <div class=\"text-ellipsis truncate\">\n                        {{ $image->user ? $image->user->name : __('crud.users.unknown') }}\n                    </div>\n                </x-badge>\n            </div>\n\n            @can('edit', [$image, $campaign])\n            <x-forms.field field=\"name\" :label=\"__('crud.fields.name')\" required>\n                <input type=\"text\" name=\"name\" maxlength=\"45\" required value=\"{!! htmlspecialchars(old('name', $image->name ?? null)) !!}\" />\n            </x-forms.field>\n\n            @if(!$image->isFolder())\n                <x-forms.field field=\"folder\" :label=\"__('campaigns/gallery.fields.folder')\">\n                    <x-forms.select name=\"folder_id\" :options=\"$folders\" :selected=\"$image->folder_id ?? null\" />\n                </x-forms.field>\n            @endif\n\n            @include('cruds.fields.visibility_id', ['model' => $image])\n            @endcan\n        </x-grid>\n    </div>\n"
  },
  {
    "path": "resources/views/gallery/file/edit.blade.php",
    "content": "<?php /** @var \\App\\Models\\Image $image */\n$imageCount = 0;\n?>\n@can('edit', [$image, $campaign])\n    <x-form :action=\"['images.update', $campaign, $image]\" method=\"PUT\" class=\"flex flex-col gap-5\">\n        @include('partials.forms._dialog', [\n            'title' => $image->name,\n            'content' => 'gallery.file._form',\n            'submit' => __('campaigns/gallery.actions.save'),\n            'actions' => 'gallery.file._actions',\n            'deleteID' => auth()->user()->can('delete', [$image, $campaign]) && ($image->isFolder() || $image->hasNoFolders()) ? '#delete-confirm-form' : null,\n        ])\n    </x-form>\n    @if(!$image->isFolder() || $image->hasNoFolders())\n        <x-form method=\"DELETE\" :action=\"['images.destroy', $campaign, $image->id]\" id=\"delete-confirm-form\" />\n    @endif\n@else\n@include('partials.forms._dialog', [\n    'title' => $image->name,\n    'content' => 'gallery.file._form',\n    'submit' => __('campaigns/gallery.actions.save'),\n    'actions' => 'gallery.file._actions',\n    'deleteID' => auth()->user()->can('delete', [$image, $campaign]) && ($image->isFolder() || $image->hasNoFolders()) ? '#delete-confirm-form' : null,\n])\n@endcan\n"
  },
  {
    "path": "resources/views/gallery/file/focus/_actions.blade.php",
    "content": "<div>\n    <x-form :action=\"['gallery.file.update-focus', $campaign, $image, 'focusEntity' => isset($focusEntity)]\">\n        <input type=\"submit\" class=\"btn2 btn-error btn-outline\" value=\"{{ __('campaigns/gallery.actions.reset_focus') }}\">\n    </x-form>\n</div>\n<div>\n    <x-form :action=\"['gallery.file.update-focus', $campaign, $image, 'focusEntity' => isset($focusEntity)]\">\n        <input type=\"hidden\" name=\"focus_x\" />\n        <input type=\"hidden\" name=\"focus_y\" />\n        <button type=\"submit\" class=\"btn2 btn-primary\">\n            {{ __('entities/image.actions.save_focus') }}\n        </button>\n    </x-form>\n</div>\n"
  },
  {
    "path": "resources/views/gallery/file/focus/_form.blade.php",
    "content": "\n    <x-grid type=\"1/1\">\n        <p class=\"text-neutral-content\">\n            {{ __('entities/image.focus.helper') }}\n        </p>\n        <div class=\"focus-selector relative inline-block\">\n            <div class=\"focus absolute text-white shadow-sm cursor-pointer text-2xl @if(empty($image->focus_x)) hidden @else loading @endif\" data-focus-x=\"{{ $image->focus_x }}\" data-focus-y=\"{{ $image->focus_y }}\">\n                <x-icon class=\"fa-duotone fa-arrow-up-left-from-circle fa-2x hover:text-error-content\" />\n            </div>\n            <img class=\"focus-image\" src=\"{{ $image->getImagePath(0) }}\" alt=\"img\" />\n        </div>\n    </x-grid>\n"
  },
  {
    "path": "resources/views/gallery/file/focus/edit.blade.php",
    "content": "@include('partials.forms._dialog', [\n    'title' => $image->name,\n    'content' => 'gallery.file.focus._form',\n    'articleClass' => 'container',\n    'actions' => 'gallery.file.focus._actions',\n])\n"
  },
  {
    "path": "resources/views/gallery/file/visibility/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <p class=\"text-neutral-content\">\n        {{ __('entities/image.visibility.helper') }}\n    </p>\n\n    @include('cruds.fields.visibility', ['model' => $image])\n</x-grid>\n"
  },
  {
    "path": "resources/views/gallery/file/visibility/edit.blade.php",
    "content": "\n<x-form :action=\"['gallery.file.visibility-save', $campaign, $image]\" method=\"PATCH\" class=\"flex flex-col gap-5\">\n@include('partials.forms._dialog', [\n    'title' => $image->name,\n    'content' => 'gallery.file.visibility._form',\n    'articleClass' => 'container',\n    #'actions' => 'gallery.file.visibility._actions',\n])\n</x-form>\n"
  },
  {
    "path": "resources/views/gallery/folders/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-forms.field field=\"name\" :label=\"__('campaigns/gallery.fields.name')\">\n        <input type=\"text\" name=\"name\" maxlength=\"100\" class=\"w-full\" required value=\"{!! htmlspecialchars(old('name', $image->name ?? null)) !!}\" />\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id', ['model' => null])\n</x-grid>\n"
  },
  {
    "path": "resources/views/gallery/folders/create.blade.php",
    "content": "<x-form :action=\"['campaign.gallery.folders.store', $campaign]\">\n    @include('partials.forms._dialog', [\n        'title' => __('campaigns/gallery.new_folder.title'),\n        'content' => 'gallery.folders._form',\n        'submit' => __('crud.create'),\n    ])\n    @if(!empty($folder))\n        <input type=\"hidden\" name=\"folder_id\" value=\"{{ $folder->id }}\" />\n    @endif\n</x-form>\n"
  },
  {
    "path": "resources/views/gallery/images.blade.php",
    "content": "<?php /** @var \\App\\Models\\Image $image */?>\n\n\n@if(!empty($folder))\n    <li tabindex=\"0\" data-folder=\"{{ empty($folder->folder_id) ? route('gallery', $campaign) : route('gallery', [$campaign, 'folder_id' => $folder->folder_id]) }}\" class=\"overflow-hidden rounded shadow-sm aspect-square w-[25%] sm:w-48 cursor-pointer flex flex-col bg-box select-none hover:shadow-md focus:shadow-md items-center justify-center\">\n        <div class=\"w-full flex flex-col items-center gap-2 text-lg\">\n            <x-icon class=\"fa-regular fa-arrow-left\" />\n            <div class=\"text-base overflow-hidden\">\n                @if (empty($folder->folder_id))\n                    {{ __('crud.actions.back') }}\n                @else\n                    {{ $folder->imageFolder->name }}\n                @endif\n            </div>\n        </div>\n    </li>\n@endif\n\n@foreach ($images as $image)\n    @include('gallery._image')\n@endforeach\n\n<br class=\"clear-both\" />\n"
  },
  {
    "path": "resources/views/gallery/index.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Image $image\n * @var \\App\\Models\\Image $folder\n * @var \\App\\Services\\Campaign\\GalleryService $galleryService\n */\n\n$breadcrumbs[] = ['url' => route('gallery', $campaign), 'label' => __('campaigns/gallery.breadcrumb')];\nif ($folder) {\n    if (!empty($folder->folder_id)) {\n        if (!empty($folder->imageFolder->folder_id)) {\n            $breadcrumbs[] = '...';\n        }\n        $breadcrumbs[] = ['url' => route('gallery', [$campaign, 'folder_id' => $folder->folder_id]), 'label' => e($folder->imageFolder->name)];\n    }\n    $breadcrumbs[] = e($folder->name);\n}\n?>\n@extends('layouts.app', [\n    'title' => __('campaigns/gallery.breadcrumb') . ' - ' . $campaign->name,\n    'breadcrumbs' => $breadcrumbs,\n    'bodyClass' => 'campaign-gallery',\n    'mainTitle' => false,\n    'centered' => true,\n])\n\n@section('content')\n    <div id=\"gallery\">\n        <gallery\n            api=\"{{ route('gallery.setup', [$campaign]) }}\"\n        ></gallery>\n    </div>\n\n@endsection\n\n@section('scripts')\n    @parent\n    @vite('resources/js/gallery/gallery.js')\n@endsection\n"
  },
  {
    "path": "resources/views/health.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <title>{{ config('app.name', 'Laravel') }}</title>\n\n    <!-- Fonts -->\n    <link rel=\"preconnect\" href=\"https://fonts.bunny.net\">\n    <link href=\"https://fonts.bunny.net/css?family=figtree:400,600&display=swap\" rel=\"stylesheet\" />\n\n    <!-- Styles -->\n    <script src=\"https://cdn.tailwindcss.com\"></script>\n\n    <script>\n        tailwind.config = {\n            theme: {\n                extend: {\n                    fontFamily: {\n                        sans: ['Figtree', 'ui-sans-serif', 'system-ui', 'sans-serif', \"Apple Color Emoji\", \"Segoe UI Emoji\"],\n                    }\n                }\n            }\n        }\n    </script>\n</head>\n<body class=\"antialiased\">\n<div class=\"relative flex justify-center items-center min-h-screen bg-gray-100 selection:bg-red-500 selection:text-white\">\n    <div class=\"w-full sm:w-3/4 xl:w-1/2 mx-auto p-6\">\n        <div class=\"px-6 py-4 bg-white from-gray-700/50 via-transparent rounded-lg shadow-2xl shadow-gray-500/20 flex items-center focus:outline focus:outline-2 focus:outline-red-500\">\n            <div class=\"relative flex h-3 w-3 group {{ $exception ? 'status-down' : null }}\">\n                <span class=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 group-[.status-down]:bg-red-600 opacity-75\"></span>\n                <span class=\"relative inline-flex rounded-full h-3 w-3 bg-green-400 group-[.status-down]:bg-red-600\"></span>\n            </div>\n\n            <div class=\"ml-6\">\n                <h2 class=\"text-xl font-semibold text-gray-900\">Application {{ $exception ? 'experiencing problems' : 'up' }}</h2>\n\n                <p class=\"mt-2 text-gray-500 dark:text-gray-400 text-sm leading-relaxed\">\n                    HTTP request received.\n\n                    @if (defined('LARAVEL_START'))\n                        Response rendered in {{ round((microtime(true) - LARAVEL_START) * 1000) }}ms.\n                    @endif\n                </p>\n            </div>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/helpers/api-filters.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('helpers.api-filters.title'),\n    'breadcrumbs' => false,\n])\n\n@section('content')\n    @if (request()->ajax())\n    <h3 class=\"text-xl\">\n        {{ __('helpers.api-filters.title') }}\n    </h3>\n    @endif\n    <x-box>\n        <p>\n            {{ __('helpers.api-filters.description', ['name' => $type]) }}\n        </p>\n\n        <ul class=\"\">\n            @foreach ($filters as $filter)\n                <li>{{ $filter }}</li>\n            @endforeach\n        </ul>\n    </x-box>\n@endsection\n"
  },
  {
    "path": "resources/views/helpers/troubleshooting/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('assistance.title'),\n    'breadcrumbs' => false,\n])\n\n@section('content')\n\n    <div class=\"max-w-2xl mx-auto flex flex-col gap-4 \">\n        <h1 class=\"text-2xl\">{{ __('helpers.troubleshooting.subtitle') }}</h1>\n\n        <x-form action=\"troubleshooting.generate\">\n        <x-box class=\"rounded-2xl\">\n            <x-grid type=\"1/1\">\n\n            @if($token)\n                <p class=\"\">{!! __('assistance.success.opening', [\n'discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>'\n]) !!}</p>\n                <p>\n                    <strong>{{ __('assistance.success.token') }}</strong><br />\n                    <a href=\"#\" data-clipboard=\"{{ $token }}\" data-toggle=\"tooltip\" data-toast=\"Token copied to the clipboard\" data-title=\"{{__('campaigns.invites.actions.copy') }}\" class=\"text-link\">\n                        <x-icon class=\"fa-regular fa-copy\" />\n                        {{ $token }}\n                    </a>\n                </p>\n\n                <p>{{ __('assistance.success.secret') }}</p>\n            @else\n                    <x-helper>\n                        <p class=\"\">\n                            {{ __('assistance.opening') }}\n                        </p>\n                        <p class=\"\">\n                            {{ __('assistance.select') }}\n                        </p>\n                    </x-helper>\n\n                <x-forms.field field=\"campaign\" :label=\"__('assistance.fields.campaign')\">\n                    <x-forms.select name=\"campaign\" :options=\"$campaigns\" class=\"w-full\" />\n                </x-forms.field>\n            @endif\n\n            @if(!$token)\n                <div class=\" text-right\">\n                    <input type=\"submit\" class=\"btn2 btn-primary\" value=\"{{ __('helpers.troubleshooting.save_btn') }}\" />\n                </div>\n            @endif\n            </x-grid>\n        </x-box>\n        </x-form>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/history/index.blade.php",
    "content": "<?php\n    /** @var \\App\\Models\\EntityLog $log */\n?>\n@extends('layouts.app', [\n    'title' => __('history.title'),\n    'seoTitle' => __('history.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => [['url' => route('history.index', $campaign), 'label' => __('history.title')]],\n    'bodyClass' => 'campaign-history',\n    'mainTitle' => false,\n    'centered' => true,\n])\n\n@section('content')\n    <x-grid type=\"1/1\">\n    @if (!$superboosted)\n        <x-premium-cta :campaign=\"$campaign\" superboost>\n            <p>{{ __('history.cta') }}</p>\n        </x-premium-cta>\n    @else\n        <x-tutorial code=\"history\" doc=\"https://docs.kanka.io/en/latest/features/history.html\">\n            <p>{!! __('history.helpers.base', ['amount' => config('entities.logs_delete')]) !!}</p>\n        </x-tutorial>\n    @endif\n\n    @if ($superboosted)\n        <x-form :action=\"['history.index', $campaign]\" method=\"GET\" class=\"history-filters flex flex-col gap-5\">\n        <div class=\"flex items-center flex-row-reverse gap-2\">\n            <div class=\"field flex-none\">\n                <x-forms.select name=\"action\" :options=\"$actions\" :selected=\"$action\" class=\"w-full\" />\n            </div>\n            <div class=\"field flex-none\">\n                <select class=\"\" name=\"user\">\n                    <option value=\"\">{{ __('history.filters.all-users') }}</option>\n                    @foreach ($users as $member)\n                        <option value=\"{{ $member->user_id }}\" @if (isset($user) && $user == $member->user_id) selected=\"selected\" @endif>{!! $member->user->name !!}</option>\n                    @endforeach\n                </select>\n            </div>\n            @if (count($filters) > 0)\n                <div class=\"flex-none\">\n                    <a href=\"{{ route('history.index', $campaign) }}\" role=\"button\" class=\"btn2 btn-sm\">{{ __('crud.actions.reset') }}</a>\n                </div>\n            @endif\n            <div class=\"flex-none filters-loading hidden\">\n                <x-icon class=\"load\" />\n            </div>\n        </div>\n        </x-form>\n    @endif\n\n    @if ($models->count() > 0)\n        @php $count = 0; @endphp\n        @foreach ($models as $log)\n            @if ($log->day() !== $previous)\n                @if ($previous !== null) </div> @endif\n                <div class=\"font-bold\">{{ $log->created_at->format('M d, Y') }}</div>\n                <div class=\"rounded bg-box border border-base-200 border-b-0 \">\n            @endif\n            <div class=\"p-2 border-solid border-base-200 border-b\" x-data=\"{opened: false}\">\n                <div class=\"flex justify-center items-center gap-2 {{ $count > 0 && !$superboosted ? 'blur' : null }}\">\n                    <div class=\"flex-none rounded-full {{ $log->actionBackground() }} inline-block text-center text-xs p-1 h-6 w-6 \">\n                        <x-icon class=\"fa-regular {{ $log->actionIcon() }}\" />\n                    </div>\n                    <div class=\"grow\">\n                        @if ($superboosted || $count === 0)\n@php\n$postLink = null;\n/** @var \\App\\Models\\Entity $logEntity */\n$logEntity = $log->isPost() ? $log->parent?->entity : $log->parent;\nif (!$logEntity || $logEntity->trashed()) {\n$entityLink = '<a href=\"' . route('recovery', $campaign) . '\" class=\"text-link\">' . ($logEntity ? $logEntity->name : __('history.unknown.entity')) . '</a>';\n} else {\n$entityLink = \\Illuminate\\Support\\Facades\\Blade::renderComponent(\n    new \\App\\View\\Components\\EntityLink($logEntity, $campaign)\n);\n}\n@endphp\n                            {!! __('history.log.' . $log->actionCode(), [\n                                'user' => $log->userLink(),\n                                'entity' => $entityLink,\n                            ]) !!}\n                            @if ($log->isPost() && $log->parent) -\n                                @if ($log->parent->trashed() || $logEntity?->trashed())\n                                    {!! $log->parent->name !!}\n                                @else\n                                <a href=\"{{ route('entities.show', [$campaign, $logEntity, '#post-' . $log->parent?->id]) }}\"  class=\"text-link\">\n                                    {!! $log->parent->name !!}\n                                </a>\n                                @endif\n                           @endif\n                            @if ($log->impersonator)\n                                <span class=\"ml-5 text-warning\">\n                                    <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n                                {{ __('entities/logs.impersonated', ['name' => $log->impersonator->name]) }}\n                                </span>\n                            @endif\n                        @else\n                        {{ \\Illuminate\\Support\\Str::random(30) }}\n                        @endif\n                    </div>\n                    @if(!empty($log->changes))\n                        <div class=\"flex-end\">\n                            <span class=\"btn2 btn-xs btn-outline\" @click=\"opened = !opened\">\n                                <x-icon class=\"fa-regular fa-eye\" show=\"!opened\" />\n                                <x-icon class=\"fa-regular fa-eye-slash\" show=\"opened\" />\n                                {{ __('entities/logs.actions.reveal') }}\n                            </span>\n                        </div>\n                    @endif\n                    <div class=\"flex-end text-right\">\n                        @if ($superboosted || $count === 0)\n                            <x-since :date=\"$log->created_at\" />\n                        @else\n                            <span class=\"text-neutral-content text-xs\">\n                                {{ \\Illuminate\\Support\\Str::random(12) }}\n                            </span>\n                        @endif\n                    </div>\n                </div>\n                @if (!empty($log->changes) && $superboosted)\n                <div x-show=\"opened\" class=\"py-2 flex flex-col gap-2\">\n                    <p class=\"text-neutral-content\">{{ __('history.helpers.changes') }}</p>\n                    @foreach ($log->changes as $attribute => $value)\n                        @if (is_array($value)) @continue @endif\n                        <div class=\"flex\">\n                            <div class=\"flex-initial w-32 font-bold\" data-attribute=\"{{ $attribute }}\">\n                                {!! $log->attributeKey($logEntity->entityType->pluralCode(), $attribute) !!}\n                            </div>\n                            <div class=\"flex-1 break-all\">\n                                @if (\\Illuminate\\Support\\Str::contains($attribute, ['has_', 'is_']))\n                                    @if ($value) {{ __('general.yes') }} @else {{ __('general.no') }} @endif\n                                @elseif (empty($value))\n                                    <i>{{ __('history.empty') }}</i>\n                                @else\n                                    {!! $value !!}\n                                @endif\n                            </div>\n                        </div>\n                    @endforeach\n                </div>\n                @endif\n            </div>\n            @php $previous = $log->day(); $count++; @endphp\n        @endforeach\n        </div>\n    @else\n        <x-alert type=\"warning\">\n            {{ __('history.filters.no-results') }}\n        </x-alert>\n    @endif\n\n    @if ($superboosted)\n        <div class=\"text-right\">\n            {!! $models->appends($filters)->onEachSide(0)->links() !!}\n        </div>\n    @endif\n\n    </x-grid>\n@endsection\n\n@section('scripts')\n\n    @vite('resources/js/history.js')\n@endsection\n"
  },
  {
    "path": "resources/views/home.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n */ ?>\n@php\nuse App\\Enums\\Widget;\n    $position = 0;\n    $seoTitle = (!empty($dashboard) ? $dashboard->name : __('sidebar.dashboard')) .  ' - ' . $campaign->name;\n    $row = 0;\n@endphp\n\n@extends('layouts.app', [\n    'title' => __('dashboard.title') . ' ' . (!empty($dashboard) ? $dashboard->name : $campaign->name),\n    'seoTitle' => $seoTitle,\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'contentId' => 'campaign-dashboard'\n])\n\n@section('og')\n    <meta property=\"og:description\" content=\"{{ $campaign->hasPreview() ? $campaign->preview() : __('seo.dashboard', ['campaign' => $campaign->name]) }}\" />\n    @if ($campaign->image)<meta property=\"og:image\" content=\"{{ Img::crop(50, 50)->url($campaign->image)  }}\" />@endif\n    <meta property=\"og:url\" content=\"{{ route('dashboard', $campaign)  }}\" />\n@endsection\n\n@section('content')\n    <div class=\"max-w-7xl 2xl:mx-auto 2xl:min-w-7xl flex flex-col gap-4\">\n        @if (empty($dashboard))\n            @include('dashboard.widgets._campaign')\n        @endif\n\n        @include('ads.top')\n\n            @if (isset($onboarding) && $onboarding && auth()->check())\n                <p class=\"text-2xl py-2\">\n                    {!! __('dashboards/onboarding.splash', ['name' => auth()->user()->name]) !!}\n                </p>\n\n            @endif\n\n        <div class=\"dashboard-widgets grid grid-cols-12 gap-4 md:gap-5 \">\n\n{{--            <x-alert type=\"error\" class=\"col-span-12\">--}}\n{{--                <p>Dashboards are currently unavailable. We are working on bringing them back as soon as possible.</p>--}}\n{{--            </x-alert>--}}\n            @if (!$hasCampaignHeader)\n                <div class=\"col-span-12 flex gap-5 justify-end\">\n                    @include('dashboard.widgets._actions')\n                </div>\n            @endif\n            @foreach ($widgets as $widget)\n                @if($widget->widget === Widget::Campaign)\n                    @include('dashboard.widgets._campaign')\n                    @continue;\n                @endif\n                @if ($widget->missingEntity())\n                    @continue\n                @elseif ($widget->widget === Widget::Preview && !$widget->entity)\n                    @continue\n                @elseif (!$widget->visible())\n                    @continue\n                @elseif ($widget->noGuest() && auth()->guest())\n                    @continue\n                @endif\n                    <div class=\"col-span-12 md:col-span-{{ $widget->mdColSize() }} lg:col-span-{{ $widget->colSize() }} widget widget-{{ $widget->widget->value }}\" id=\"widget-col-{{ $widget->id }}\">\n                        @include('dashboard.widgets._' . $widget->widget->value)\n                    </div>\n            @endforeach\n\n        </div>\n\n        @can('dashboard', $campaign)\n            <div class=\"flex justify-center mt-8\">\n                <a href=\"{{ route('dashboard.setup', !empty($dashboard) ? [$campaign, 'dashboard' => $dashboard->id] : [$campaign]) }}\" class=\"btn2 btn-block flex gap-1\" title=\"{{ __('dashboard.settings.title') }}\">\n                    <x-icon class=\"cog\" />\n                    {{ __('dashboard.actions.customise') }}\n                </a>\n            </div>\n        @endcan\n\n    </div>\n@endsection\n\n@section('scripts')\n\n    @vite('resources/js/dashboard.js')\n\n    @if ($hasMap)\n    <script src=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.js' }}\" integrity=\"{{ config('app.leaflet_js') }}\" crossorigin=\"\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.layersupport.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomdisplay.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomcss.js\"></script>\n    @endif\n@endsection\n\n@section('styles')\n    @if ($hasMap)\n    <link rel=\"stylesheet\" href=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.css' }}\" integrity=\"{{ config('app.leaflet_css') }}\" crossorigin=\"\" />\n    @endif\n\n    @vite([\n        'resources/css/dashboard.css',\n        'resources/css/maps/maps.css'\n    ])\n@endsection\n\n@section('modals')\n    @can('apply', $campaign)\n    <x-dialog id=\"apply-dialog\" title=\"Loading\"></x-dialog>\n    @endif\n\n    @includeWhen($onboarding, 'dashboard.dialogs.onboarding')\n\n@endsection\n"
  },
  {
    "path": "resources/views/icons/kanka-svg.blade.php",
    "content": "<svg xmlns=\"http://www.w3.org/2000/svg\"\n     class=\"w-28 h-28\" viewBox=\"0 0 901.000000 815.000000\"\n     preserveAspectRatio=\"xMidYMid meet\">\n\n    <g transform=\"translate(0.000000,815.000000) scale(0.100000,-0.100000)\"\n       fill=\"currentcolor\" stroke=\"none\">\n        <path d=\"M4383 8135 c-61 -17 -144 -57 -191 -93 -26 -20 -449 -476 -546 -589\nl-23 -27 -74 75 c-117 117 -235 169 -387 169 -97 0 -203 -31 -284 -83 -35 -22\n-277 -280 -772 -822 -396 -435 -733 -805 -748 -823 l-27 -32 -572 0 c-423 0\n-582 -3 -613 -12 -53 -16 -118 -81 -134 -134 -9 -32 -12 -345 -12 -1356 l0\n-1314 25 -51 c16 -32 41 -61 67 -79 l41 -29 574 -3 573 -2 0 -538 0 -538 1593\n-920 c875 -505 1601 -919 1612 -918 11 0 733 413 1605 917 l1585 916 3 540 2\n541 585 0 c560 0 587 1 624 19 57 30 98 82 110 143 8 37 11 437 9 1358 l-3\n1305 -28 47 c-18 31 -44 57 -75 75 l-47 28 -570 5 -570 5 -81 90 c-45 50 -376\n414 -737 810 -460 505 -674 732 -716 761 -90 63 -159 86 -276 91 -87 4 -110 2\n-176 -20 -95 -30 -170 -80 -248 -163 -33 -35 -64 -64 -68 -63 -4 0 -114 117\n-243 260 -278 308 -349 377 -421 412 -114 56 -255 72 -366 42z m228 -338 c43\n-25 606 -640 591 -645 -5 -1 -88 40 -184 93 -96 52 -180 95 -186 95 -7 0 -82\n-52 -166 -116 l-155 -115 -154 115 c-84 64 -159 116 -166 116 -6 0 -91 -43\n-187 -96 -96 -53 -178 -93 -181 -90 -4 3 5 19 19 34 13 15 143 156 287 314\n144 158 271 293 283 299 64 34 138 33 199 -4z m-1386 -458 c29 -8 59 -30 108\n-81 l69 -70 -24 -27 c-14 -14 -98 -107 -188 -206 -89 -99 -168 -186 -174 -193\n-10 -10 -29 0 -91 47 -44 33 -82 58 -85 56 -128 -72 -363 -195 -367 -191 -7 6\n-13 -1 321 365 293 321 310 333 431 300z m2719 0 c25 -7 58 -29 90 -62 112\n-114 548 -598 543 -604 -5 -4 -200 97 -333 174 l-41 23 -87 -66 c-75 -56 -89\n-63 -99 -51 -7 8 -93 104 -192 212 -99 108 -181 200 -183 205 -2 4 25 39 60\n76 90 96 149 119 242 93z m-4512 -2166 c16 -15 18 -36 18 -237 1 -195 2 -219\n15 -202 8 11 66 112 130 226 83 150 122 210 140 218 34 15 508 17 536 2 10 -6\n19 -20 19 -31 0 -12 -85 -164 -190 -340 -105 -175 -190 -323 -190 -329 0 -6\n73 -133 162 -283 145 -245 162 -269 170 -247 5 14 102 288 214 610 124 354\n212 593 225 605 18 19 35 20 288 23 268 3 269 3 295 -20 22 -19 70 -145 266\n-708 132 -377 240 -694 240 -705 0 -43 -13 -45 -245 -45 -178 0 -225 3 -242\n15 -12 8 -32 48 -49 95 l-27 80 -231 0 -231 0 -28 -80 c-17 -47 -37 -86 -50\n-95 -18 -13 -86 -15 -465 -15 l-443 0 -22 23 c-12 12 -78 122 -146 245 -68\n122 -128 225 -132 228 -5 3 -9 -100 -9 -230 0 -200 -2 -237 -16 -250 -23 -24\n-455 -24 -478 0 -14 14 -16 93 -16 721 0 643 1 708 17 725 15 16 36 18 236 18\n191 0 223 -2 239 -17z m2831 6 c16 -7 85 -111 206 -310 101 -164 187 -302 192\n-305 5 -3 9 118 9 292 0 263 2 300 17 316 15 16 35 18 222 18 171 0 210 -3\n229 -16 l22 -15 0 -706 c0 -643 -1 -708 -17 -725 -14 -16 -35 -18 -209 -18\n-106 0 -200 3 -209 6 -9 4 -103 136 -208 293 l-192 286 -5 -283 c-4 -237 -7\n-284 -20 -292 -8 -5 -110 -10 -227 -10 -179 0 -214 2 -227 16 -14 14 -16 93\n-16 721 0 643 1 708 17 725 14 16 35 18 204 18 114 0 197 -4 212 -11z m1536\n-6 c20 -17 21 -28 23 -238 l3 -220 125 225 c86 155 133 228 150 237 18 9 95\n13 277 13 215 0 254 -2 267 -16 9 -8 16 -21 16 -28 0 -7 -88 -160 -194 -339\nl-195 -327 182 -306 181 -306 17 48 c281 811 433 1233 450 1249 18 19 35 20\n288 23 268 3 269 3 295 -20 22 -19 70 -145 266 -708 132 -377 240 -694 240\n-705 0 -43 -13 -45 -245 -45 -178 0 -225 3 -242 15 -12 8 -32 48 -49 95 l-27\n80 -231 0 -231 0 -28 -80 c-17 -47 -37 -86 -50 -95 -32 -22 -942 -23 -974 0\n-12 8 -81 122 -155 252 l-133 238 -3 -234 c-2 -202 -5 -237 -19 -253 -15 -17\n-34 -18 -247 -16 l-230 3 -13 25 c-10 20 -12 173 -10 723 2 679 3 699 21 713\n16 11 65 14 237 14 192 0 219 -2 238 -17z m-3601 -2523 c62 -55 117 -100 122\n-100 5 0 81 46 170 101 88 56 163 99 166 96 4 -3 -26 -45 -65 -93 -40 -47 -70\n-91 -68 -98 5 -16 3908 -21 3918 -4 4 7 -21 45 -62 95 -61 75 -79 103 -65 103\n3 0 73 -43 155 -95 83 -53 158 -98 166 -101 10 -4 51 26 116 82 114 101 137\n119 145 112 2 -3 -16 -58 -41 -123 -26 -68 -42 -122 -37 -130 4 -8 174 -136\n377 -285 204 -149 374 -275 379 -280 33 -33 -47 1 -420 180 -240 115 -428 200\n-441 198 -14 -2 -338 -330 -888 -898 -477 -492 -884 -913 -906 -935 -21 -21\n-41 -36 -44 -33 -3 3 345 423 774 932 430 509 781 933 781 941 0 13 -223 15\n-1947 13 -1286 -2 -1947 -6 -1950 -13 -1 -5 333 -408 743 -895 410 -487 762\n-904 782 -928 122 -148 -79 53 -883 882 -576 594 -915 936 -927 936 -10 0\n-208 -90 -439 -201 -367 -175 -462 -215 -423 -180 5 4 177 131 383 282 205\n150 375 279 378 287 3 7 -7 46 -22 85 -15 40 -36 93 -46 120 -14 34 -15 47 -6\n47 6 -1 63 -46 125 -100z\"/>\n        <path d=\"M2962 4668 c-38 -120 -102 -338 -102 -347 0 -7 38 -11 115 -11 91 0\n115 3 115 14 0 15 -107 366 -114 373 -2 2 -9 -11 -14 -29z\"/>\n        <path d=\"M7382 4668 c-38 -120 -102 -338 -102 -347 0 -7 38 -11 115 -11 91 0\n115 3 115 14 0 15 -107 366 -114 373 -2 2 -9 -11 -14 -29z\"/>\n    </g>\n</svg>\n"
  },
  {
    "path": "resources/views/icons/svg/cog.blade.php",
    "content": "<svg class=\"w-full h-full\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\"  viewBox=\"0 0 50 50\">\n    <path d=\"M47.16,21.221l-5.91-0.966c-0.346-1.186-0.819-2.326-1.411-3.405l3.45-4.917c0.279-0.397,0.231-0.938-0.112-1.282 l-3.889-3.887c-0.347-0.346-0.893-0.391-1.291-0.104l-4.843,3.481c-1.089-0.602-2.239-1.08-3.432-1.427l-1.031-5.886 C28.607,2.35,28.192,2,27.706,2h-5.5c-0.49,0-0.908,0.355-0.987,0.839l-0.956,5.854c-1.2,0.345-2.352,0.818-3.437,1.412l-4.83-3.45 c-0.399-0.285-0.942-0.239-1.289,0.106L6.82,10.648c-0.343,0.343-0.391,0.883-0.112,1.28l3.399,4.863 c-0.605,1.095-1.087,2.254-1.438,3.46l-5.831,0.971c-0.482,0.08-0.836,0.498-0.836,0.986v5.5c0,0.485,0.348,0.9,0.825,0.985 l5.831,1.034c0.349,1.203,0.831,2.362,1.438,3.46l-3.441,4.813c-0.284,0.397-0.239,0.942,0.106,1.289l3.888,3.891 c0.343,0.343,0.884,0.391,1.281,0.112l4.87-3.411c1.093,0.601,2.248,1.078,3.445,1.424l0.976,5.861C21.3,47.647,21.717,48,22.206,48 h5.5c0.485,0,0.9-0.348,0.984-0.825l1.045-5.89c1.199-0.353,2.348-0.833,3.43-1.435l4.905,3.441 c0.398,0.281,0.938,0.232,1.282-0.111l3.888-3.891c0.346-0.347,0.391-0.894,0.104-1.292l-3.498-4.857 c0.593-1.08,1.064-2.222,1.407-3.408l5.918-1.039c0.479-0.084,0.827-0.5,0.827-0.985v-5.5C47.999,21.718,47.644,21.3,47.16,21.221z M25,32c-3.866,0-7-3.134-7-7c0-3.866,3.134-7,7-7s7,3.134,7,7C32,28.866,28.866,32,25,32z\"></path>\n</svg>\n"
  },
  {
    "path": "resources/views/icons/visibility.blade.php",
    "content": "@if (!isset($icon['skip']))\n    <i class=\"{{ $icon['class'] }}\" data-title=\"{{ $icon['key'] }}\" data-toggle=\"tooltip\" aria-hidden=\"true\"></i>\n@endif"
  },
  {
    "path": "resources/views/items/entities.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . __('items.show.tabs.inventories'),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'inventories',\n        'view' => 'items.panels.entities',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/items/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Item::class, 'trans' => 'items'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.price', ['trans' => 'items'])\n    @include('cruds.fields.size', ['trans' => 'items'])\n    @include('cruds.fields.weight', ['trans' => 'items'])\n\n    @include('cruds.fields.location')\n\n    @include('cruds.fields.creators')\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/items/inventories.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . __('items.show.tabs.inventories'),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@dd('why')\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'inventories',\n        'view' => 'items.panels.inventories',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/items/items.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('items.items', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('items.items', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'items',\n        'view' => 'items.panels.items',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/items/panels/entities.blade.php",
    "content": "<div id=\"item-entities\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/items/panels/inventories.blade.php",
    "content": "<x-box :padding=\"0\">\n    <?php $r = $model->inventories()->orderBy('entity_id', 'ASC')->with(['entity'])->has('entity')->paginate(); ?>\n    <table id=\"item-inventories\" class=\"table table-hover\">\n        <tbody><tr>\n            <th class=\"avatar w-12\"><br /></th>\n            <th>{{ __('fields.entry.label') }}</th>\n            <th class=\"hidden md:block\">{{ __('entities/inventories.fields.amount') }}</th>\n            <th class=\"hidden md:block\">{{ __('entities/inventories.fields.position') }}</th>\n        </tr>\n        @foreach ($r as $inventory)\n            @if ($inventory->entity->child)\n            <tr data-entity-id=\"{{ $inventory->entity->id }}\" data-entity-type=\"{{ $inventory->entity->entityType->code }}\" class=\"@if($inventory->entity->is_private) entity-private @endif\">\n                <td>\n                    <x-entities.thumbnail :entity=\"$inventory->entity\" :title=\"$inventory->entity->name\"></x-entities.thumbnail>\n                </td>\n                <td>\n                    @if ($inventory->entity->is_private)\n                        <x-icon class=\"lock\" :title=\"__('crud.is_private')\" tooltip />\n                    @endif\n                    <x-entity-link\n                        :entity=\"$inventory->entity\"\n                        :campaign=\"$campaign\" />\n                </td>\n                <td class=\"hidden md:block\">{{ $inventory->amount }}</td>\n                <td class=\"hidden md:block\">{{ $inventory->position }}</td>\n            </tr>\n            @endif\n        @endforeach\n        </tbody>\n    </table>\n</x-box>\n\n@if ($r->hasPages())\n    <div class=\"text-right\">\n        {{ $r->links() }}\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/items/panels/items.blade.php",
    "content": "<?php\n$datagridOptions = [\n    $campaign,\n    $entity->child,\n    'init' => 1\n];\n$datagridOptions = Datagrid::initOptions($datagridOptions);\n?>\n\n<div class=\"item-subitems overflow-x-auto\" id=\"subitems\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', ['datagridUrl' => route('items.items', $datagridOptions)])\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/items/show.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n            @includeWhen($entity->children()->count() > 0, 'items.panels.items')\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/journals/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Journal::class, 'trans' => 'journals'])\n\n    @include('cruds.fields.parent')\n\n    @include('cruds.fields.author')\n    @include('cruds.fields.location')\n\n    @include('cruds.fields.date')\n\n    <div class=\"col-span-2\">\n        @include('cruds.forms._calendar', ['source' => $source])\n    </div>\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/journals/journals.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('journals.journals', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->allJournals()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('journals.journals', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'journals',\n        'view' => 'journals.panels.journals',\n    ])\n@endsection\n\n"
  },
  {
    "path": "resources/views/journals/panels/journals.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Journal $model\n * @var \\App\\Models\\Journal $journal\n */\n?>\n<div id=\"journal-journals\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n\n@section('modals')\n    @parent\n    @include('partials.helper-modal', [\n        'id' => 'help-modal',\n        'title' => __('crud.actions.help'),\n        'textes' => [\n            __('journals.helpers.journals')\n        ]\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/layouts/_breadcrumbs.blade.php",
    "content": "<ol class=\"breadcrumb text-xs list-none flex items-center \">\n    @if (!isset($breadcrumbsDashboard) || $breadcrumbsDashboard === true)\n        @if ($campaign)\n            <li class=\"flex items-center\">\n                <a href=\"{{ route('dashboard', $campaign) }}\" class=\"text-base-content\">\n                    <x-icon class=\"fa-regular fa-globe\" />\n                    <span class=\"hidden md:inline\">\n                        {!! $campaign->name !!}\n                    </span>\n                </a>\n            </li>\n        @else\n            <li class=\"flex items-center\">\n                <a href=\"{{ route('home') }}\" class=\"text-base-content\">\n                    <x-icon class=\"fa-regular fa-dashboard\" />\n                    <span class=\"hidden md:inline\">\n                        {{ __('dashboard.title') }}\n                    </span>\n                </a>\n            </li>\n        @endif\n    @endif\n    @if (isset($breadcrumbs))\n        @foreach ($breadcrumbs as $breadcrumb)\n            <li class=\"flex items-center\">\n                @if (!empty($breadcrumb['url']))\n                    <a href=\"{{ $breadcrumb['url'] }}\" title=\"{{ $breadcrumb['label'] }}\" class=\"text-base-content\">\n                        @if (strlen($breadcrumb['label']) > 22)\n                            {!! \\Illuminate\\Support\\Str::limit(e($breadcrumb['label']), 20) !!}\n                        @else\n                            {!! $breadcrumb['label'] !!}\n                        @endif\n                    </a>\n                @else\n                    @if (strlen($breadcrumb) > 22)\n                        <span title=\"{{ $breadcrumb }}\" class=\"text-base-content\" style=\"--tw-text-opacity: .7\">{!! \\Illuminate\\Support\\Str::limit(e($breadcrumb), 20) !!}</span>\n                    @else\n                        <span class=\"text-base-content\" style=\"--tw-text-opacity: .7\">{!! e($breadcrumb) !!}</span>\n                    @endif\n                @endif\n            </li>\n        @endforeach\n    @endif\n</ol>\n"
  },
  {
    "path": "resources/views/layouts/_lang-switcher.blade.php",
    "content": "<div id=\"language-switcher\" class=\"language-switcher\">\n    <a href=\"#\" class=\"btn2 \" data-toggle=\"dialog\" data-target=\"language-select-modal\">\n        <x-icon class=\"fa-regular fa-language\" />\n        {{ LaravelLocalization::getCurrentLocaleNative() }} (Change)\n    </a>\n</div>\n"
  },
  {
    "path": "resources/views/layouts/_socials.blade.php",
    "content": "<a href=\"https://kanka.io/go/discord\" class=\"text-link\">\n    <svg aria-label=\"Discord\" class=\"w-7 h-7\" viewBox=\"0 0 32 32\" fill=\"currentcolor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M20.992 20.163c-1.511-0.099-2.699-1.349-2.699-2.877 0-0.051 0.001-0.102 0.004-0.153l-0 0.007c-0.003-0.048-0.005-0.104-0.005-0.161 0-1.525 1.19-2.771 2.692-2.862l0.008-0c1.509 0.082 2.701 1.325 2.701 2.847 0 0.062-0.002 0.123-0.006 0.184l0-0.008c0.003 0.050 0.005 0.109 0.005 0.168 0 1.523-1.191 2.768-2.693 2.854l-0.008 0zM11.026 20.163c-1.511-0.099-2.699-1.349-2.699-2.877 0-0.051 0.001-0.102 0.004-0.153l-0 0.007c-0.003-0.048-0.005-0.104-0.005-0.161 0-1.525 1.19-2.771 2.692-2.862l0.008-0c1.509 0.082 2.701 1.325 2.701 2.847 0 0.062-0.002 0.123-0.006 0.184l0-0.008c0.003 0.048 0.005 0.104 0.005 0.161 0 1.525-1.19 2.771-2.692 2.862l-0.008 0zM26.393 6.465c-1.763-0.832-3.811-1.49-5.955-1.871l-0.149-0.022c-0.005-0.001-0.011-0.002-0.017-0.002-0.035 0-0.065 0.019-0.081 0.047l-0 0c-0.234 0.411-0.488 0.924-0.717 1.45l-0.043 0.111c-1.030-0.165-2.218-0.259-3.428-0.259s-2.398 0.094-3.557 0.275l0.129-0.017c-0.27-0.63-0.528-1.142-0.813-1.638l0.041 0.077c-0.017-0.029-0.048-0.047-0.083-0.047-0.005 0-0.011 0-0.016 0.001l0.001-0c-2.293 0.403-4.342 1.060-6.256 1.957l0.151-0.064c-0.017 0.007-0.031 0.019-0.040 0.034l-0 0c-2.854 4.041-4.562 9.069-4.562 14.496 0 0.907 0.048 1.802 0.141 2.684l-0.009-0.11c0.003 0.029 0.018 0.053 0.039 0.070l0 0c2.14 1.601 4.628 2.891 7.313 3.738l0.176 0.048c0.008 0.003 0.018 0.004 0.028 0.004 0.032 0 0.060-0.015 0.077-0.038l0-0c0.535-0.72 1.044-1.536 1.485-2.392l0.047-0.1c0.006-0.012 0.010-0.027 0.010-0.043 0-0.041-0.026-0.075-0.062-0.089l-0.001-0c-0.912-0.352-1.683-0.727-2.417-1.157l0.077 0.042c-0.029-0.017-0.048-0.048-0.048-0.083 0-0.031 0.015-0.059 0.038-0.076l0-0c0.157-0.118 0.315-0.24 0.465-0.364 0.016-0.013 0.037-0.021 0.059-0.021 0.014 0 0.027 0.003 0.038 0.008l-0.001-0c2.208 1.061 4.8 1.681 7.536 1.681s5.329-0.62 7.643-1.727l-0.107 0.046c0.012-0.006 0.025-0.009 0.040-0.009 0.022 0 0.043 0.008 0.059 0.021l-0-0c0.15 0.124 0.307 0.248 0.466 0.365 0.023 0.018 0.038 0.046 0.038 0.077 0 0.035-0.019 0.065-0.046 0.082l-0 0c-0.661 0.395-1.432 0.769-2.235 1.078l-0.105 0.036c-0.036 0.014-0.062 0.049-0.062 0.089 0 0.016 0.004 0.031 0.011 0.044l-0-0.001c0.501 0.96 1.009 1.775 1.571 2.548l-0.040-0.057c0.017 0.024 0.046 0.040 0.077 0.040 0.010 0 0.020-0.002 0.029-0.004l-0.001 0c2.865-0.892 5.358-2.182 7.566-3.832l-0.065 0.047c0.022-0.016 0.036-0.041 0.039-0.069l0-0c0.087-0.784 0.136-1.694 0.136-2.615 0-5.415-1.712-10.43-4.623-14.534l0.052 0.078c-0.008-0.016-0.022-0.029-0.038-0.036l-0-0z\"/>\n    </svg>\n</a>\n<a href=\"https://kanka.io/go/facebook\" class=\"text-link\">\n    <svg aria-label=\"Facebook\" fill=\"currentcolor\" class=\"w-7 h-7\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M12 2.03998C6.5 2.03998 2 6.52998 2 12.06C2 17.06 5.66 21.21 10.44 21.96V14.96H7.9V12.06H10.44V9.84998C10.44 7.33998 11.93 5.95998 14.22 5.95998C15.31 5.95998 16.45 6.14998 16.45 6.14998V8.61998H15.19C13.95 8.61998 13.56 9.38998 13.56 10.18V12.06H16.34L15.89 14.96H13.56V21.96C15.9164 21.5878 18.0622 20.3855 19.6099 18.57C21.1576 16.7546 22.0054 14.4456 22 12.06C22 6.52998 17.5 2.03998 12 2.03998Z\"/>\n    </svg>\n</a>\n<a href=\"https://kanka.io/go/instagram\" class=\"hidden\">\n    <svg aria-label=\"Instagram\" class=\"w-7 h-7\" viewBox=\"0 0 24 24\" fill=\"currentcolor\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 18C15.3137 18 18 15.3137 18 12C18 8.68629 15.3137 6 12 6C8.68629 6 6 8.68629 6 12C6 15.3137 8.68629 18 12 18ZM12 16C14.2091 16 16 14.2091 16 12C16 9.79086 14.2091 8 12 8C9.79086 8 8 9.79086 8 12C8 14.2091 9.79086 16 12 16Z\" />\n        <path d=\"M18 5C17.4477 5 17 5.44772 17 6C17 6.55228 17.4477 7 18 7C18.5523 7 19 6.55228 19 6C19 5.44772 18.5523 5 18 5Z\"/>\n        <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.65396 4.27606C1 5.55953 1 7.23969 1 10.6V13.4C1 16.7603 1 18.4405 1.65396 19.7239C2.2292 20.8529 3.14708 21.7708 4.27606 22.346C5.55953 23 7.23969 23 10.6 23H13.4C16.7603 23 18.4405 23 19.7239 22.346C20.8529 21.7708 21.7708 20.8529 22.346 19.7239C23 18.4405 23 16.7603 23 13.4V10.6C23 7.23969 23 5.55953 22.346 4.27606C21.7708 3.14708 20.8529 2.2292 19.7239 1.65396C18.4405 1 16.7603 1 13.4 1H10.6C7.23969 1 5.55953 1 4.27606 1.65396C3.14708 2.2292 2.2292 3.14708 1.65396 4.27606ZM13.4 3H10.6C8.88684 3 7.72225 3.00156 6.82208 3.0751C5.94524 3.14674 5.49684 3.27659 5.18404 3.43597C4.43139 3.81947 3.81947 4.43139 3.43597 5.18404C3.27659 5.49684 3.14674 5.94524 3.0751 6.82208C3.00156 7.72225 3 8.88684 3 10.6V13.4C3 15.1132 3.00156 16.2777 3.0751 17.1779C3.14674 18.0548 3.27659 18.5032 3.43597 18.816C3.81947 19.5686 4.43139 20.1805 5.18404 20.564C5.49684 20.7234 5.94524 20.8533 6.82208 20.9249C7.72225 20.9984 8.88684 21 10.6 21H13.4C15.1132 21 16.2777 20.9984 17.1779 20.9249C18.0548 20.8533 18.5032 20.7234 18.816 20.564C19.5686 20.1805 20.1805 19.5686 20.564 18.816C20.7234 18.5032 20.8533 18.0548 20.9249 17.1779C20.9984 16.2777 21 15.1132 21 13.4V10.6C21 8.88684 20.9984 7.72225 20.9249 6.82208C20.8533 5.94524 20.7234 5.49684 20.564 5.18404C20.1805 4.43139 19.5686 3.81947 18.816 3.43597C18.5032 3.27659 18.0548 3.14674 17.1779 3.0751C16.2777 3.00156 15.1132 3 13.4 3Z\"/>\n    </svg>\n</a>\n<a href=\"https://kanka.io/go/youtube\" class=\"text-link\">\n    <svg aria-label=\"Youtube\" class=\"w-7 h-7\" viewBox=\"0 -3 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n        <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"currentcolor\" fill-rule=\"evenodd\">\n            <g id=\"Dribbble-Light-Preview\" transform=\"translate(-300.000000, -7442.000000)\">\n                <g id=\"icons\" transform=\"translate(56.000000, 160.000000)\">\n                    <path d=\"M251.988432,7291.58588 L251.988432,7285.97425 C253.980638,7286.91168 255.523602,7287.8172 257.348463,7288.79353 C255.843351,7289.62824 253.980638,7290.56468 251.988432,7291.58588 M263.090998,7283.18289 C262.747343,7282.73013 262.161634,7282.37809 261.538073,7282.26141 C259.705243,7281.91336 248.270974,7281.91237 246.439141,7282.26141 C245.939097,7282.35515 245.493839,7282.58153 245.111335,7282.93357 C243.49964,7284.42947 244.004664,7292.45151 244.393145,7293.75096 C244.556505,7294.31342 244.767679,7294.71931 245.033639,7294.98558 C245.376298,7295.33761 245.845463,7295.57995 246.384355,7295.68865 C247.893451,7296.0008 255.668037,7296.17532 261.506198,7295.73552 C262.044094,7295.64178 262.520231,7295.39147 262.895762,7295.02447 C264.385932,7293.53455 264.28433,7285.06174 263.090998,7283.18289\">\n\n                    </path>\n                </g>\n            </g>\n        </g>\n    </svg>\n</a>\n<a href=\"https://kanka.io/go/github\" class=\"text-link\">\n    <svg aria-label=\"Github\" viewBox=\"0 0 98 96\" xmlns=\"http://www.w3.org/2000/svg\" class=\"w-7 h-7\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z\" fill=\"currentcolor\"></path></svg>\n</a>\n"
  },
  {
    "path": "resources/views/layouts/_theme.blade.php",
    "content": "@if($campaign->boosted() && $campaign->hasPluginTheme() && request()->get('_plugins') !== '0')\n    <link href=\"{{ route('campaign_plugins.css', [$campaign, 'ts' => $campaign->updated_at->getTimestamp()]) }}\" rel=\"stylesheet\">\n@endif\n@if ($campaign->boosted() && request()->get('_styles') !== '0')\n    <link href=\"{{ route('campaign.css', [$campaign, 'ts' => \\App\\Facades\\CampaignCache::stylesTimestamp()]) }}\" rel=\"stylesheet\">\n@endif\n"
  },
  {
    "path": "resources/views/layouts/ajax.blade.php",
    "content": "@yield('content')"
  },
  {
    "path": "resources/views/layouts/app.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n */\n$themeOverride = request()->get('_theme');\n$specificTheme = null;\n$seoTitle = isset($seoTitle) ? $seoTitle : (isset($title) ? $title : null);\n$showSidebar = (!empty($sidebar) && $sidebar === 'settings') || !empty($campaign);\n$sidebarCollapsed = Cookie::get('toggleState') === 'collapsed';\n$cleanCanonical = \\Illuminate\\Support\\Str::before(request()->fullUrl(), '%3');\n\n?><!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\" class=\"scroll-pt-16 overflow-auto\">\n<head>\n@include('layouts.tracking.tracking')\n    <meta charset=\"utf-8\">\n    <title>{!! $seoTitle !!}</title>\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta content='width=device-width, initial-scale=1, maximum-scale=5' name='viewport'>\n    <meta property=\"og:title\" content=\"{!! $seoTitle !!}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n    <link rel=\"canonical\" href=\"{{ $cleanCanonical }}\" />\n\n\n    @yield('og')\n    @include('layouts.links.icons')\n    @if (config('app.asset_url'))\n        <link rel=\"preconnect\" href=\"{{ config('app.asset_url') }}\" crossorigin>\n    @endif\n    <link rel=\"preconnect\" href=\"https://cdn.kanka.io\" crossorigin>\n    <link rel=\"preconnect\" href=\"https://images.kanka.io\" crossorigin>\n    <link rel=\"preconnect\" href=\"https://th.kanka.io\" crossorigin>\n    <link rel=\"dns-prefetch\" href=\"//cdnjs.cloudflare.com\">\n    <link rel=\"dns-prefetch\" href=\"//www.googletagmanager.com\">\n    @vite([\n        'resources/css/vendor.css',\n        'resources/css/app.css',\n    ])\n    @includeWhen(!config('fontawesome.kit'), 'layouts.styles.fontawesome')\n    @includeWhen (config('ads.nitro.enabled'), 'ads.nitro.styles')\n    @yield('styles')\n    @if (!empty($themeOverride) && in_array($themeOverride, ['dark', 'midnight', 'base']))\n        @php $specificTheme = $themeOverride; @endphp\n        @if($themeOverride != 'base')\n\n    @vite('resources/css/themes/' . $themeOverride . '.css')\n        @endif\n    @else\n        @if (!empty($campaign) && $campaign->boosted() && !empty($campaign->theme_id))\n            @if ($campaign->theme_id !== 1)\n\n        @vite('resources/css/themes/' . ($campaign->theme_id === 2 ? 'dark' : 'midnight') . '.css')\n                @php $specificTheme = ($campaign->theme_id === 2 ? 'dark' : 'midnight') @endphp\n            @endif\n        @elseif (auth()->check() && !empty(auth()->user()->theme))\n\n            @vite('resources/css/themes/' . auth()->user()->theme . '.css')\n            @php $specificTheme = auth()->user()->theme @endphp\n        @endif\n    @endif\n\n    @includeWhen(!empty($campaign), 'layouts._theme')\n    @livewireStyles\n</head>\n{{-- Hide the sidebar if the there is no current campaign --}}\n<body class=\" @if(\\App\\Facades\\DataLayer::groupB())ab-testing-second @else ab-testing-first @endif\n@if(isset($entity)){{ $entity->bodyClasses() }}@endif\n@if(isset($dashboard))dashboard-{{ $dashboard->id }}@endif @if(isset($bodyClass)){{ $bodyClass }}@endif @if (!empty($campaign) && auth()->check() && auth()->user()->isAdmin()) is-admin @endif @if(!app()->isProduction()) env-{{ app()->environment() }} @endif @if(!$showSidebar || $sidebarCollapsed) sidebar-collapse @endif antialiased\" @if(!empty($specificTheme)) data-theme=\"{{ $specificTheme }}\" @endif @if (!empty($campaign)) data-user-member=\"{{ auth()->check() && auth()->user()->can('member', $campaign) ? 1 : 0 }}\" @endif >\n\n<a href=\"#{{ isset($contentId) ? $contentId : \"main-content\" }}\" class=\"skip-nav-link absolute mx-2 top-0 btn2 btn-primary btn-sm rounded-t-none\" tabindex=\"0\">\n    {{ __('crud.navigation.skip_to_content') }}\n</a>\n    <div id=\"app\" class=\"wrapper min-h-screen relative mt-12 flex flex-col\">\n        @include('layouts.header', ['toggle' => $showSidebar])\n        @includeWhen(isset($campaign) || (isset($sidebar) && $sidebar === 'settings'), 'layouts.sidebars.' . ($sidebar ?? 'app'))\n\n        <div class=\"content-wrapper transition-all duration-150 grow\" id=\"{{ isset($contentId) ? $contentId : \"main-content\" }}\">\n            @includeWhen(!isset($skipBanners), 'layouts.banner')\n\n            @if(!view()->hasSection('content-header') && (isset($breadcrumbs) && $breadcrumbs !== false))\n                <section class=\"content-header p-4 pb-0 @if (isset($centered) && $centered) max-w-7xl mx-auto @endif\">\n                    @includeWhen(!isset($breadcrumbs) || $breadcrumbs !== false, 'layouts._breadcrumbs')\n                    @if (!view()->hasSection('entity-header'))\n                        @if (isset($mainTitle))\n                        @else\n                            <h1 class=\"truncate m-0 text-2xl\">\n                                {!! $title ?? \"Page Title\" !!}\n                            </h1>\n                        @endif\n                    @endif\n                </section>\n            @endif\n\n            @yield('content-header')\n\n            <section class=\"content p-4 flex flex-col gap-2 lg:flex-gap-5 @if (isset($centered) && $centered) max-w-7xl mx-auto  @endif\" role=\"main\">\n                @includeWhen (auth()->check() && \\App\\Facades\\Identity::isImpersonating(), 'partials.impersonate')\n                @include('partials.success')\n\n                @yield('entity-header')\n\n                @yield('content')\n            </section>\n            <div class=\"absolute bottom-0 right-0 p-4 hidden back-to-top\">\n                <a href=\"#{{ isset($contentId) ? $contentId : \"main-content\" }}\" class=\"flex items-center gap-1\">\n                    <x-icon class=\"fa-regular fa-arrow-up\" />\n                    Back to top\n                </a>\n            </div>\n\n            @include('ads.video')\n        </div>\n\n        @include('layouts.footer')\n    </div>\n\n    <x-dialog id=\"primary-dialog\" :loading=\"true\" />\n    <div id=\"dialog-backdrop\" class=\"z-1000 fixed top-0 left-0 right-0 bottom-0 h-full w-full backdrop-blur-sm hidden\" style=\"--tw-bg-opacity: 0.2\"></div>\n\n    @include('layouts.dialogs.languages')\n    @yield('modals')\n\n    <div class=\"toast-container fixed overflow-y-auto overflow-x-hidden bottom-4 right-4 max-h-full flex flex-col gap-2 z-1001\"></div>\n\n    @includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n    @vite(['resources/js/vendor-final.js', 'resources/js/app.js'])\n    @yield('scripts')\n\n@includeWhen(config('tracking.consent'), 'partials.cookieconsent')\n@include('ads.anchor')\n@livewireScripts\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/banner.blade.php",
    "content": "{{--@if (auth()->check() && auth()->user()->created_at->isBefore(\\Carbon\\Carbon::create(2024, 12, 25)))--}}\n{{--    <x-tutorial code=\"banner_s25\" type=\"info\" :auth=\"true\">--}}\n{{--        <p>--}}\n{{--            We thrive on your feedback! Take a moment to fill out our <a href=\"https://docs.google.com/forms/d/e/1FAIpQLSepB1v1Es2NV-7axGc8vGeyEHrIehvIHTwV-pU5frZMzKQC7w/viewform?usp=dialog\" target=\"_blank\" style=\"text-decoration: underline\"><x-icon class=\"fa-regular fa-external-link\" />2025 Satisfaction Survey</a> and help us improve Kanka.--}}\n{{--        </p>--}}\n{{--    </x-tutorial>--}}\n{{--@endif--}}\n\n{{--<x-tutorial code=\"banner_maria11\" type=\"warning\" :auth=\"false\">--}}\n{{--    <p>--}}\n{{--        We will be performing server maintenance work on Tuesday 8th of July 2025. As a result, Kanka will be completely unavailable from <a href=\"https://everytimezone.com/s/7ad382aa\" target=\"_blank\" class=\"underline\"><x-icon class=\"fa-regular fa-external-link\" /> 14:30 UTC</a> to 15:30 UTC. This impacts Kanka, Plugins, and the API.</p>--}}\n\n{{--    <p>--}}\n{{--        Join us on <a href=\"https://kanka.io/go/discord\" target=\"_blank\" class=\"underline\">Discord</a> to get live updates.--}}\n{{--    </p>--}}\n{{--</x-tutorial>--}}\n\n{{--<x-tutorial code=\"banner_kanka30\" type=\"warning\" :auth=\"false\">--}}\n{{--    <p>--}}\n{{--        We are releasing a big update on Wednesday 19th of February 2025. As a result, Kanka will be unavailable from <a href=\"https://everytimezone.com/s/07a5d1d9\" target=\"_blank\" class=\"underline\"><i class=\"fa-regular fa-external-link\" aria-hidden=\"true\"></i> 14:30 UTC</a> to 15:30 UTC. Join us on <a href=\"https://kanka.io/go/discord\" target=\"_blank\" class=\"underline\">Discord</a> to get updates.--}}\n{{--    </p>--}}\n{{--</x-tutorial>--}}\n\n{{--@if (auth()->check() && auth()->user()->subscriptions()->count() === 0 && \\Carbon\\Carbon::now()->between(\\Carbon\\Carbon::create('2024-11-29'), \\Carbon\\Carbon::create('2024-12-02')))--}}\n{{--    <x-tutorial code=\"bf2024\" type=\"warning\">--}}\n{{--        <p>--}}\n{{--            <a href=\"{{ route('settings.subscription') }}\" class=\"block text-warning-content\">--}}\n{{--                {!! __('banners.blackfriday24', ['code' => '<code>BF2024</code>']) !!}--}}\n{{--            </a>--}}\n{{--        </p>--}}\n{{--    </x-tutorial>--}}\n{{--@endif--}}\n\n@can('freeTrial', auth()->user())\n    <x-tutorial code=\"banner_free_trial\" type=\"info\">\n            <p>\n                {!! __('subscriptions/free-trial.pitch.title') !!}<br />\n\n                <a href=\"{{ route('settings.free-trial') }}\" class=\"font-bold underline text-link\">\n                    <x-icon class=\"fa-duotone fa-sparkles\" /> {!! __('subscriptions/free-trial.actions.accept') !!}\n                </a>\n            </p>\n\n        </x-tutorial>\n@endif\n"
  },
  {
    "path": "resources/views/layouts/callouts/recoverable.blade.php",
    "content": "<x-helper>\n    @if ($campaign->boosted())\n        <p>\n            {!! __('confirm.delete.recover', [\n                'recover' => '<a href=\"' . route('recovery', [$campaign]) . '\" class=\"text-link\">' . __('campaigns.show.tabs.recovery') . '</a>',\n                'day' => '<span class=\"amount\">' . config('entities.hard_delete') . '</span>'\n            ])!!}\n        </p>\n    @else\n        <p>\n            {!! __('confirm.delete.recoverable', [\n                'premium-campaign' => '<a href=\"' . \\App\\Facades\\Domain::toFront('premium') . '\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>',\n                'day' => '<span class=\"amount\">' . config('entities.hard_delete') . '</span>'\n            ])!!}\n        </p>\n    @endif\n</x-helper>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/_column.blade.php",
    "content": "<td class=\"align-middle! {{ $column->css() }}\">\n    {!! $column !!}\n</td>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/_head.blade.php",
    "content": "<?php /** @var \\App\\Renderers\\Layouts\\Header $head */\nuse Illuminate\\Support\\Str;\n?>\n<a href=\"#\" data-url=\"{{ $head->route() }}\" class=\"text-link\">\n    <x-icon :class=\"$head->icon()\" />{!! $head->label() !!}\n</a>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/_header.blade.php",
    "content": "<?php /** @var \\App\\Renderers\\Layouts\\Header $header */?>\n@if ($header->bulk())\n    <th>\n        <input type=\"checkbox\" name=\"all\" id=\"datagrid-select-all\" />\n    </th>\n@else\n    <th class=\"{{ $header->css() }}\">{!! $header !!}</th>\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/_table.blade.php",
    "content": "@if (!empty($datagridUrl))\n    <table class=\"table table-hover\" data-render=\"datagrid2-onload\" data-url=\"{!! $datagridUrl !!}\"></table>\n    <x-box class=\"text-center\">\n        <x-icon class=\"load\" />\n    </x-box>\n<?php return; ?>\n@endif\n\n<div class=\"flex flex-col gap-4\">\n<table class=\"table table-hover m-0 w-full shadow-xs bg-box rounded-xl\" data-render=\"datagrid2\">\n    <thead>\n        <tr>\n            @foreach (Datagrid::headers() as $header)\n                @include('layouts.datagrid._header')\n            @endforeach\n        </tr>\n    </thead>\n    <tbody>\n    @forelse ($rows as $row)\n        @if ($row instanceof \\App\\Models\\MiscModel && empty($row->entity))\n            @continue\n        @endif\n        <tr class=\"{{ method_exists($row, 'rowClasses') ? $row->rowClasses() : null }} @if (Datagrid::isHighlighted($row)) warning row-highlighted @endif\" @if (method_exists($row, 'rowAttributes')) {!! Datagrid::rowAttributes($row) !!} @endif>\n            @foreach (Datagrid::columns($row) as $column)\n                @include('layouts.datagrid._column')\n            @endforeach\n        </tr>\n    @empty\n        <tr>\n            <td colspan=\"{{ count(Datagrid::headers()) }}\" class=\"align-middle!\">\n                <i>{{ __('crud.datagrid.empty') }}</i>\n            </td>\n        </tr>\n    @endforelse\n    </tbody>\n    <tfoot class=\"hidden\">\n    <tr>\n        <th class=\"text-center text-lg\">\n            <x-icon class=\"load\" />\n        </th>\n    </tr>\n    </tfoot>\n</table>\n\n@if ($rows->hasPages() || Datagrid::hasBulks() )\n    <div class=\"flex justify-between gap-2\">\n        @includeWhen(Datagrid::hasBulks(), 'layouts.datagrid.bulks')\n        {!! $rows->appends(Datagrid::paginationFilters())->onEachSide(0)->links() !!}\n    </div>\n@endif\n</div>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/_togglers.blade.php",
    "content": "@if (isset($model) && $mode === 'grid' && auth()->check() && $entityType->isStandard())\n    <div class=\"dropdown\">\n        <a role=\"button\" tabindex=\"0\" class=\"btn2\" data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"toggler-submenu\" aria-label=\"Order by\">\n            <i class=\"fa-regular fa-arrow-down-a-z\" aria-hidden=\"true\" data-tree=\"escape\"></i>\n            <span class=\"sr-only\">Order by</span>\n        </a>\n        <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"toggler-submenu\">\n            @foreach ($model->datagridSortableColumns() as $field => $translation)\n                @php\n                    $options = [$campaign, 'order' => $field];\n                    if (isset($bookmark)) {\n                        $options['bookmark'] = $bookmark;\n                    }\n                    $icon = null;\n                    if (isset($order) && $order === $field) {\n                        if (isset($desc) && $desc == 1) {\n                            $icon = 'fa-solid fa-arrow-down-a-z';\n                        } else {\n                            $options['desc'] = 1;\n                            $icon = 'fa-solid fa-arrow-up-a-z';\n                        }\n                    }\n                @endphp\n                <x-dropdowns.item :link=\"route($route, $options)\" :css=\"isset($order) && $order === $field ? 'font-bold' : null\" :icon=\"$icon\">\n                    {{ $translation }}\n                </x-dropdowns.item>\n            @endforeach\n        </div>\n    </div>\n@endif\n\n@if (empty($forceMode))\n    @if (!isset($mode) || $mode === 'grid')\n        <a class=\"btn2 \" href=\"{{ route($route, [$campaign, 'm' => 'table', 'bookmark' => $bookmark ?? null]) }}\" data-toggle=\"tooltip\" data-title=\"{{ __('datagrids.modes.table') }}\">\n            <x-icon class=\"fa-solid fa-list-ul\" />\n            <span class=\"sr-only\">{{ __('datagrids.modes.table') }}</span>\n        </a>\n    @else\n        <a class=\"btn2\" href=\"{{ route($route, [$campaign, 'm' => 'grid', 'bookmark' => $bookmark ?? null]) }}\" data-toggle=\"tooltip\" data-title=\"{{ __('datagrids.modes.grid') }}\">\n            <x-icon class=\"fa-regular fa-grid-2\" />\n            <span class=\"sr-only\">{{ __('datagrids.modes.grid') }}</span>\n        </a>\n    @endif\n@endif\n\n@if ((isset($nestable) && empty($forceMode)) || (isset($entityType) && $entityType->isCustom()))\n    @if ($nestable)\n        <a class=\"btn2\" href=\"{{ route($route, array_merge([$campaign, 'n' => false, 'bookmark' => $bookmark ?? null], [isset($entityType) && $entityType->isCustom() ? $entityType : null])) }}\" data-toggle=\"tooltip\" data-title=\"{{ __('datagrids.modes.flatten') }}\">\n            <x-icon class=\"fa-regular fa-boxes-stacked\" />\n            <span class=\"sr-only\">{{ __('datagrids.modes.flatten') }}</span>\n        </a>\n    @else\n        <a class=\"btn2\" href=\"{{ route($route, array_merge([$campaign, 'n' => true, 'bookmark' => $bookmark ?? null], [isset($entityType) && $entityType->isCustom() ? $entityType : null])) }}\" data-toggle=\"tooltip\" data-title=\"{{ __('datagrids.modes.nested') }}\">\n            <x-icon class=\"fa-regular fa-layer-group\" />\n            <span class=\"sr-only\">{{ __('datagrids.modes.nested') }}</span>\n        </a>\n    @endif\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/actions.blade.php",
    "content": "@if (empty($actions))\n    @php return; @endphp\n@endif\n<div class=\"dropdown\">\n    <a role=\"button\" class=\"cursor-pointer w-8 h-8 rounded-full hover:bg-base-300 flex items-center justify-center align-middle\" data-dropdown aria-expanded=\"false\" data-placement=\"right\" data-tree=\"escape\" aria-haspopup=\"menu\" aria-controls=\"actions-submenu\" aria-label=\"{{ __('crud.actions.actions') }}\">\n        <i class=\"fa-regular fa-ellipsis-v \" data-tree=\"escape\"></i>\n        <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n    </a>\n    <div class=\"dropdown-menu hidden\" role=\"menu\" id=\"actions-submenu\">\n        @foreach ($actions as $action)\n                @if ($action === \\App\\Renderers\\Layouts\\Layout::ACTION_EDIT)\n                    <x-dropdowns.item\n                        :link=\"route($model->url('edit'), method_exists($model, 'routeParams') ? $model->routeParams($params + ['campaign' => $campaign]) : [$campaign, $model])\"\n                        icon=\"pencil\">\n                        {{ __('crud.edit') }}\n                    </x-dropdowns.item>\n                @elseif ($action === \\App\\Renderers\\Layouts\\Layout::ACTION_COPY)\n                    <x-dropdowns.item\n                        :link=\"route($model->url('create'), method_exists($model, 'routeCopyParams') ? $model->routeCopyParams($params + ['campaign' => $campaign]) : [$campaign, $model])\"\n                        icon=\"copy\">\n                        {{ __('crud.actions.copy') }}\n                    </x-dropdowns.item>\n                @elseif ($action === \\App\\Renderers\\Layouts\\Layout::ACTION_EDIT_DIALOG)\n                    <x-dropdowns.item\n                        :link=\"route($model->url('edit'), method_exists($model, 'routeParams') ? $model->routeParams($params + ['campaign' => $campaign]) : ['campaign' => $campaign, $model])\"\n                        :dialog=\"route($model->url('edit'), method_exists($model, 'routeParams') ? $model->routeParams($params + [$campaign]) : [$campaign, $model])\"\n                        icon=\"pencil\">\n                        {{ __('crud.edit') }}\n                    </x-dropdowns.item>\n                @elseif ($action === \\App\\Renderers\\Layouts\\Layout::ACTION_DELETE)\n                <x-dropdowns.item\n                    link=\"#\"\n                    css=\"text-error-content hover:bg-error\"\n                    :dialog=\"route('confirm-delete', [$campaign, 'route' => route($model->url('destroy'), method_exists($model, 'routeParams') ? $model->routeParams(['campaign' => $campaign] + $params) : [$campaign, $model]), 'name' => (method_exists($model, 'deleteName') ? $model->deleteName() : $model->name), 'permanent' => true] + (method_exists($model, 'actionDeleteConfirmOptions') ? $model->actionDeleteConfirmOptions() : []))\"\n                    icon=\"trash\">\n                    {{ __('crud.remove') }}\n                </x-dropdowns.item>\n                @elseif (is_string($action) && view()->exists($action))\n                    @include($action)\n\n                @elseif (is_array($action))\n                    @if (\\Illuminate\\Support\\Arr::get($action, 'type') === 'dialog-ajax')\n                        <x-dropdowns.item\n                            :css=\"$action['css'] ?? ''\"\n                            :link=\"route($action['route'], [$campaign, $model])\"\n                            :dialog=\"route($action['route'], [$campaign, $model])\"\n                            :icon=\"$action['icon']\">\n                            {{ __($action['label']) }}\n                        </x-dropdowns.item>\n                        @continue\n                    @endif\n\n                    <x-dropdowns.item\n                        :link=\"route($action['route'], (method_exists($model, 'routeParams') ? $model->routeParams($params) : [$campaign, $model]))\"\n                        :icon=\"$action['icon']\">\n                        {{ __($action['label']) }}\n                    </x-dropdowns.item>\n                @endif\n\n        @endforeach\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/bulks/_calendar-event.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\EntityEvent $model */\n?>\n<x-grid>\n\n    <x-forms.foreign\n        field=\"entity_id\"\n        :required=\"false\"\n        label=\"fields.entry.label\"\n        :multiple=\"false\"\n        name=\"entity_id\"\n        id=\"entity_id\"\n        :campaign=\"$campaign\"\n        :route=\"route('search.entities-with-relations', [$campaign])\"\n        :dropdownParent=\"$dropdownParent ?? (request()->ajax() ? '#primary-dialog' : null)\"\n    >\n    </x-forms.foreign>\n    <x-forms.field field=\"comment\" css=\"col-span-2\" :label=\"__('calendars.fields.comment')\">\n\n        <input type=\"text\" name=\"comment\" value=\"{{ old('comment', $source->comment ?? $model->comment ?? null) }}\" class=\"w-full\" maxlength=\"191\" placeholder=\"{{  __('calendars.placeholders.comment') }}\" />\n    </x-forms.field>\n\n    <x-forms.field\n            field=\"length\"\n            :label=\"__('calendars.fields.length')\"\n            :helper=\"__('calendars.hints.event_length')\"\n            tooltip>\n        <input type=\"number\" name=\"length\" class=\"w-full\" value=\"{{ old('length', $model->length ?? 1) }}\" placeholder=\"{{ __('calendars.placeholders.length') }}\" aria-label=\"{{ __('calendars.placeholders.length') }}\" data-url=\"{{ route('calendars.event-length', [$campaign, 'calendar' => $calendar ?? 0]) }}\" />\n            <p class=\"length-warning hidden text-error-content\">\n                {!!  __('calendars.warnings.event_length', ['documentation' => '<a target=\"_blank\" href=\"https://docs.kanka.io/en/latest/entries/calendars.html#long-lasting-reminders\"><i class=\"fa-regular fa-external-link\" aria-hidden=\"true\"></i> ' . __('footer.documentation') . '</a>'])!!}\n            </p>\n    </x-forms.field>\n\n    @include('cruds.fields.colour_picker', ['dropdownParent' => request()->ajax() ? '#primary-dialog' : null])\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/bulks/_map-group.blade.php",
    "content": "<?php\n    $typeOptions = [\n        '' => null,\n        0 => __('general.no'),\n        1 => __('general.yes'),\n    ];\n?>\n<x-grid type=\"1/1\">\n    <x-forms.field field=\"group-shown\" :label=\"__('maps/groups.fields.is_shown')\">\n        <x-forms.select name=\"is_shown\" :options=\"$typeOptions\" class=\"w-full\" />\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id', ['bulk' => true])\n</x-grid>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/bulks/_map-layer.blade.php",
    "content": "<?php\n    $typeOptions = [\n        '' => null,\n        0 => __('maps/layers.types.standard'),\n        1 => __('maps/layers.types.overlay'),\n        2 => __('maps/layers.types.overlay_shown'),\n    ];\n?>\n<x-grid type=\"1/1\">\n    <x-forms.field field=\"type\" :label=\"__('maps/layers.fields.type')\">\n        <x-forms.select name=\"type_id\" :options=\"$typeOptions\"  class=\"w-full\" />\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id', ['bulk' => true])\n</x-grid>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/bulks/_map-marker.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\MapMarker $model */\n\n$iconOptions = [\n    '' => null,\n    1 => __('maps/markers.icons.marker'),\n    2 => __('maps/markers.icons.question'),\n    3 => __('maps/markers.icons.exclamation'),\n    4 => __('maps/markers.icons.entity'),\n];\n\n$sizeOptions = [\n    '' => null,\n    1 => __('maps/markers.circle_sizes.tiny'),\n    2 => __('maps/markers.circle_sizes.small'),\n    3 => __('maps/markers.circle_sizes.standard'),\n    4 => __('maps/markers.circle_sizes.large'),\n    5 => __('maps/markers.circle_sizes.huge'),\n    6 => __('maps/markers.circle_sizes.custom'),\n];\n\n$groups = $model->groupOptions();\n$groups[-1] = __('crud.filters.options.none');\n?>\n<x-grid>\n    <x-forms.field field=\"icon\" :label=\"__('maps/markers.fields.icon')\">\n        <x-forms.select name=\"icon\" :options=\"$iconOptions\" class=\"w-full\" id=\"icon\" />\n    </x-forms.field>\n\n    @if ($campaign->boosted())\n    <x-forms.field field=\"custom-icon\" :label=\"__('maps/markers.fields.custom_icon')\">\n\n        <input type=\"text\" name=\"custom_icon\" value=\"{{ old('custom_icon', $model->custom_icon ?? null) }}\" class=\"w-full\" placeholder=\"{{ __('maps/markers.placeholders.custom_icon', ['example1' => '\"fa-solid fa-gem\"', 'example2' => '\"ra ra-sword\"']) }}\" autocomplete=\"off\" list=\"map-marker-icon-list\" />\n\n        <div class=\"hidden\">\n            <datalist id=\"map-marker-icon-list\">\n                @foreach (\\App\\Facades\\MapMarkerCache::campaign($campaign)->iconSuggestion() as $icon)\n                    <option value=\"{{ $icon }}\">{{ $icon }}</option>\n                @endforeach\n            </datalist>\n        </div>\n    </x-forms.field>\n    @endif\n    @include('maps.markers.fields.font_colour', ['dropdownParent' => '#primary-dialog'])\n\n    @include('cruds.fields.draggable_choice')\n    \n    @include('cruds.fields.tooltip_choice')\n\n    <x-forms.field field=\"opacity\" :label=\"__('maps/markers.fields.opacity')\">\n        <input type=\"number\" name=\"opacity\" class=\"w-full\" value=\"{{ $source->opacity ?? old('opacity', $model->opacity ?? null) }}\" min=\"0\" step=\"10\" max=\"100\" id=\"opacity\" maxlength=\"3\" />\n    </x-forms.field>\n\n    @include('maps.markers.fields.background_colour', ['dropdownParent' => '#primary-dialog'])\n\n    <x-forms.field field=\"group\" :label=\"__('maps/markers.fields.group')\">\n        <x-forms.select name=\"group_id\" :options=\"$groups\" class=\"w-full\" />\n    </x-forms.field>\n    @include('cruds.fields.visibility_id', ['bulk' => true])\n</x-grid>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/bulks/update.blade.php",
    "content": "<form method=\"POST\" action=\"{{ $route }}\" data-shortcut=\"1\" class=\"w-full ajax-submit datagrid2-bulk-update\">\n    @csrf\n    @include('partials.forms._dialog', [\n        'title' => __('crud.bulk.edit.title'),\n        'content' => 'layouts.datagrid.bulks.' . $view,\n        'submit' => __('crud.actions.apply'),\n    ])\n\n@foreach ($models as $model)\n    <input type=\"hidden\" name=\"model[]\" value=\"{{ $model }}\" />\n@endforeach\n<input type=\"hidden\" name=\"action\" value=\"patch\" />\n</form>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/bulks.blade.php",
    "content": "<?php\nuse App\\Facades\\Datagrid;\n$hasOthers = false;\n?>\n<div class=\"dropdown datagrid-bulk-actions\">\n    <a class=\"btn2 btn-disabled break-keep\" data-dropdown aria-expanded=\"false\" data-tree=\"escape\">\n        {{ __('crud.bulk.buttons.label') }}\n        <x-icon class=\"fa-regular fa-caret-down\" />\n    </a>\n    <div class=\"dropdown-menu hidden\" role=\"menu\">\n        @foreach (\\App\\Facades\\Datagrid::bulks() as $bulk)\n            @if ($bulk === \\App\\Renderers\\Layouts\\Layout::ACTION_EDIT)\n                <x-dropdowns.item link=\"#\" css=\"datagrid-bulk\" :data=\"['action' => 'edit']\" icon=\"pencil\">\n                    {{ __('crud.bulk.actions.edit') }}\n                </x-dropdowns.item>\n            @elseif ($bulk === \\App\\Renderers\\Layouts\\Layout::ACTION_DELETE)\n                @if ($hasOthers) <x-dropdowns.divider /> @endif\n                <x-dropdowns.item link=\"#\" css=\"text-error-content text-error hover:bg-error datagrid-submit\" :data=\"['action' => 'delete']\" icon=\"trash\">\n                    {{ __('crud.remove') }}\n                </x-dropdowns.item>\n            @elseif (is_array($bulk))\n                @php $hasOthers = true; @endphp\n                <x-dropdowns.item link=\"#\" css=\"datagrid-submit\" :data=\"['action' => $bulk['action']]\" :icon=\"$bulk['icon'] ?? null\">\n                    {{ __($bulk['label']) }}\n                </x-dropdowns.item>\n            @endif\n        @endforeach\n    </div>\n</div>\n<input type=\"hidden\" name=\"action\" value=\"\" />\n\n@section('modals')\n    @parent\n    <x-dialog id=\"datagrid-bulk-delete\" :title=\"__('crud.delete_modal.title')\">\n        <x-grid type=\"1/1\">\n            <p class=\"text-neutral-content\">\n                {{ __('confirm.delete.bulk') }}</p>\n            <p class=\"text-neutral-content\">\n                {{ __('crud.delete_modal.permanent') }}\n            </p>\n        </x-grid>\n\n        <x-dialog.footer :dialog=\"true\">\n            <button type=\"button\" class=\"btn2 btn-error btn-outline\" id=\"datagrid-action-confirm\">\n                <x-icon class=\"trash\" />\n                <span class=\"remove-button-label\">{{ __('crud.remove') }}</span>\n            </button>\n        </x-dialog.footer>\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/layouts/datagrid/delete-forms.blade.php",
    "content": "@if (!request()->ajax())<div id=\"datagrid-delete-forms\">@endif\n@foreach($models as $model)\n\n    <x-form method=\"DELETE\" :action=\"[$model->url('destroy'), method_exists($model, 'routeParams') ? $model->routeParams(['campaign' => $campaign] + $params) : [$campaign, $model]]\" id=\"delete-form-{{ $model->id }}\">\n        @if ($model instanceof \\App\\Models\\Relation)\n            <input type=\"hidden\" name=\"remove_mirrored\" value=\"0\" />\n        @endif\n    </x-form>\n@endforeach\n@if (!request()->ajax())</div>@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/fulltext_search.blade.php",
    "content": "<form method=\"GET\" action=\"{{ $route }}\" class=\"flex-0 w-fit! datagrid-search inline-block\" role=\"form\">\n    <div class=\"field field-search\">\n        <input type=\"text\" name=\"term\" value=\"{{ $term ?? null }}\" placeholder=\"{{ __('crud.search') }}\" />\n    </div>\n</form>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/character.blade.php",
    "content": "<?php /** @var \\App\\Models\\Character $model */?>\n@if ($model instanceof \\App\\Models\\Character)\n    @if ($model->entity->is_private)\n        <x-icon class=\"lock\" title=\"{{ __('crud.is_private') }}\" tooltip></x-icon>\n    @endif\n    <x-entity-link\n        :entity=\"$model->entity\"\n        :campaign=\"$campaign\" />\n    @if ($model->entity->status)\n        <x-icon class=\"{{ $model->entity->status->icon() }}\" title=\"{{ $model->entity->status->setRelation('entityType', $model->entity->entityType)->name() }}\"></x-icon>\n    @endif\n    <br />\n    <span class=\"italic character-title text-xs\">{!! $model->title !!}</span>\n    <?php return ?>\n@endif\n\n@if ($model->character->entity->is_private)\n    <x-icon class=\"lock\" title=\"{{ __('crud.is_private') }}\" tooltip></x-icon>\n@endif\n<x-entity-link\n    :entity=\"$model->character->entity\"\n    :campaign=\"$campaign\" />\n@if ($model->status)\n    <x-icon class=\"{{ $model->status->icon() }}\" title=\"{{ $model->status->setRelation('entityType', $model->entityType)->name() }}\" tooltip></x-icon>\n@endif\n<br />\n<span class=\"italic character-title text-xs\">{!! $model->character->title !!}</span>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/date.blade.php",
    "content": "@if (!empty($model->date))\n    <x-date :date=\"$model->date\" />\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/entitylink.blade.php",
    "content": "@if ($model instanceof \\App\\Models\\Entity)\n    @if ($model->is_private)\n        <x-icon class=\"lock\" :title=\"__('crud.is_private')\" tooltip />\n    @endif\n    <x-entity-link\n        :entity=\"$model\"\n        :campaign=\"$campaign\" />\n@elseif (!empty($with))\n    @if ($model->{$with} instanceof \\App\\Models\\Entity)\n        @if ($model->{$with}->is_private)\n            <x-icon class=\"lock\" :title=\"__('crud.is_private')\" tooltip />\n        @endif\n        <x-entity-link\n            :entity=\"$model->{$with}\"\n            :campaign=\"$campaign\" />\n    @elseif (!empty($model->{$with}) && $model->{$with} && $model->{$with}->entity)\n        @if ($model->{$with}->entity->is_private)\n            <x-icon class=\"lock\" :title=\"__('crud.is_private')\" tooltip />\n        @endif\n        <x-entity-link\n            :entity=\"$model->{$with}->entity\"\n            :campaign=\"$campaign\" />\n    @endif\n@elseif($model instanceof \\App\\Models\\Post)\n    @if ($model->entity->is_private)\n        <x-icon class=\"lock\" :title=\"__('crud.is_private')\" tooltip />\n    @endif\n    <x-entity-link\n        :post=\"$model->id\"\n        :entity=\"$model->entity\"\n        :campaign=\"$campaign\">\n        {!! $model->name !!} ({!! $model->entity->name !!})\n    </x-entity-link>\n@elseif($model->entity)\n    @if ($model->entity->is_private)\n        <x-icon class=\"lock\" :title=\"__('crud.is_private')\" tooltip />\n    @endif\n    <x-entity-link\n        :entity=\"$model->entity\"\n        :campaign=\"$campaign\" />\n@elseif($model->remindable)\n    @if ($model->remindable->is_private)\n        <x-icon class=\"lock\" :title=\"__('crud.is_private')\" tooltip />\n    @endif\n\n\n    @if ($model instanceof \\App\\Models\\Reminder && $model->isPost())\n        <x-entity-link\n        :entity=\"$model->remindable->entity\"\n        :post=\"$model->remindable->id\"\n        :campaign=\"$campaign\">\n            {!! $model->remindable->name !!} ({!! $model->remindable->entity->name !!})\n        </x-entity-link>\n    @else\n        <x-entity-link\n        :entity=\"$model->remindable\"\n        :campaign=\"$campaign\" />\n    @endif\n\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/entitylist.blade.php",
    "content": "\n<div class=\"flex flex-wrap gap-1\">\n@if (is_array($with))\n    @foreach ($model->{$with[0]} as $rel)\n        @if (!$rel->{$with[1]}->entity)\n            @continue\n        @endif\n        <x-entity-link\n            :entity=\"$rel->{$with[1]}->entity\"\n            :campaign=\"$campaign\" />\n    @endforeach\n@else\n    @foreach ($model->$with as $rel)\n        @if (!$rel->entity)\n            @continue\n        @endif\n        <x-entity-link\n            :entity=\"$rel->entity\"\n            :campaign=\"$campaign\" />\n    @endforeach\n@endif\n</div>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/image.blade.php",
    "content": "<?php /** @var \\App\\Models\\MiscModel|\\App\\Models\\Entity $model */?>\n@if ($model instanceof \\App\\Models\\Entity)\n    <x-entities.thumbnail :entity=\"$model\" :title=\"$model->name\"></x-entities.thumbnail>\n@elseif ($model instanceof \\App\\Models\\MiscModel || $model instanceof \\App\\Models\\Post)\n    <x-entities.thumbnail :entity=\"$model->entity\" :title=\"$model->name\"></x-entities.thumbnail>\n@elseif ($model instanceof \\App\\Models\\Reminder && $model->isPost())\n    <x-entities.thumbnail :entity=\"$model->remindable->entity\" :title=\"$model->remindable->name\"></x-entities.thumbnail>\n@elseif ($model instanceof \\App\\Models\\Reminder && $model->isEntity())\n    <x-entities.thumbnail :entity=\"$model->remindable\" :title=\"$model->remindable->name\"></x-entities.thumbnail>\n@elseif ($model instanceof \\App\\Models\\MapLayer && $model->hasImage())\n    <a class=\"w-10 h-10 entity-image cover-background\"\n       style=\"background-image: url('{{ $model->thumbnail(40) }}');\"\n       title=\"{{ $model->name }}\"\n       href=\"{{ $model->getLink() }}\"></a>\n@elseif (!empty($with))\n    @php $target = \\Illuminate\\Support\\Arr::get($with, 'target', false); @endphp\n    <a class=\"entity-image w-10 h-10 cover-background\" style=\"background-image: url('{{ \\App\\Facades\\Avatar::entity($model->$target->entity)->size(40)->fallback()->thumbnail() }}');\" title=\"{{ $model->$target->name }}\" href=\"{{ $model->$target->getLink() }}\"></a>\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/location.blade.php",
    "content": "@if (empty($with) && $model->location)\n    <x-entity-link\n        :entity=\"$model->location->entity\"\n        :campaign=\"$campaign\" />\n@elseif ($model->{$with} && $model->{$with}->location)\n    <x-entity-link\n        :entity=\"$model->{$with}->location->entity\"\n        :campaign=\"$campaign\" />\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/locations.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity */ ?>\n@php\n$target = empty($with) ? $model->entity : data_get($model, $with);\n@endphp\n@if ($target?->locations->isNotEmpty())\n    @foreach ($target->locations as $location)\n        <x-entity-link\n            :entity=\"$location->entity\"\n            :campaign=\"$campaign\" />\n    @endforeach\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/mention-link.blade.php",
    "content": "@php\n    /** @var \\App\\Models\\EntityMention $model */\n@endphp\n@if ($model->entity_id && !$model->entity)\n    {{ __('crud.hidden') }}\n    @php return @endphp\n@endif\n@if ($model->entity)\n    @if ($model->entity->is_private)\n        <x-icon class=\"lock\" tooltip />\n    @endif\n    <x-entity-link :entity=\"$model->entity\" :campaign=\"$campaign\" />\n@endif\n\n@if ($model->isQuestElement())\n    @if ($model->questElement && $model->entity)\n        - @include('icons.visibility', ['icon' => $model->questElement->skipAllIcon()->visibilityIcon()])\n        <a href=\"{{ $model->getLink() }}\" class=\"text-link\">{!! $model->questElement->name() !!}</a>\n    @endif\n@elseif ($model->isTimelineElement())\n    @if ($model->timelineElement && $model->entity)\n        - @include('icons.visibility', ['icon' => $model->timelineElement->skipAllIcon()->visibilityIcon()])\n        <a href=\"{{ $model->getLink() }}\" class=\"text-link\">{!! $model->timelineElement->elementName() !!}</a>\n    @endif\n@elseif ($model->isPost())\n    @if ($model->post && $model->entity)\n        - @include('icons.visibility', ['icon' => $model->post->skipAllIcon()->visibilityIcon()])\n        <a href=\"{{ $model->getLink() }}\" class=\"text-link\">{!! $model->post->name !!}</a>\n    @endif\n@elseif ($model->isCampaign())\n    <a href=\"{{ route('overview', $campaign) }}\" class=\"text-link\">{!! $campaign->name !!}</a>\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/parentlink.blade.php",
    "content": "@if ($model->parent )\n    <x-entity-link\n        :entity=\"$model->parent\"\n        :campaign=\"$campaign\" />\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/since.blade.php",
    "content": "@if (!empty($model->{$key}))\n    <x-since :date=\"$model->{$key}\" />\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/tags.blade.php",
    "content": "<?php /** @var \\App\\Models\\MiscModel|\\App\\Models\\Entity $model */?>\n@php $target = empty($with) ? $model : data_get($model, $with) @endphp\n\n<div class=\"flex gap-1 flex-wrap\">\n\n@if ($target instanceof \\App\\Models\\MiscModel)\n    @foreach ($target->entity->visibleTags() as $tag)\n        @if (!$tag->entity) @continue @endif\n        <x-tags.bubble :tag=\"$tag\" :campaign=\"$campaign\" />\n    @endforeach\n@elseif ($target instanceof \\App\\Models\\Entity || $model instanceof \\App\\Models\\Post)\n    @foreach ($target->visibleTags() as $tag)\n        @if (!$tag->entity) @continue @endif\n        <x-tags.bubble :tag=\"$tag\" :campaign=\"$campaign\" />\n    @endforeach\n@elseif ($target instanceof \\App\\Models\\CharacterRace || $target instanceof \\App\\Models\\CharacterFamily)\n    @foreach ($target->character->entity->visibleTags() as $tag)\n        @if (!$tag->entity) @continue @endif\n        <x-tags.bubble :tag=\"$tag\" :campaign=\"$campaign\" />\n    @endforeach\n@else\n    @foreach ($target->tags() as $tag)\n        @if (!$tag->entity) @continue @endif\n        <x-tags.bubble :tag=\"$tag\" :campaign=\"$campaign\" />\n    @endforeach\n@endif\n</div>\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/view.blade.php",
    "content": "@include($with)\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/visibility.blade.php",
    "content": "<?php /** @var \\App\\Models\\Concerns\\HasVisibility $model */ ?>\n@includeWhen(auth()->check(), 'icons.visibility', ['icon' => $model->visibilityIcon()])\n"
  },
  {
    "path": "resources/views/layouts/datagrid/rows/visibility_pivot.blade.php",
    "content": "@if (auth()->check())\n    @php\n    /** @var \\App\\Models\\Visibility $pivot */\n    $pivot = new \\App\\Models\\EntityAbility();\n    $pivot->visibility_id = $model->pivot->visibility_id;\n    @endphp\n    @include('icons.visibility', ['icon' => $pivot->visibilityIcon()])\n@endif\n"
  },
  {
    "path": "resources/views/layouts/datagrid/search.blade.php",
    "content": "<x-form method=\"GET\" :action=\"$route\" class=\"flex-0 w-fit! datagrid-search inline-block\">\n<div class=\"field field-search\">\n    <input type=\"text\" name=\"search\" value=\"{{ $filterService->search() ?? null }}\" placeholder=\"{{ __('crud.search') }}\" />\n</div>\n<input type=\"hidden\" name=\"m\" value=\"{{ $mode }}\" />\n</x-form>\n"
  },
  {
    "path": "resources/views/layouts/dialogs/languages.blade.php",
    "content": "<x-dialog id=\"language-select-modal\" :title=\"__('footer.language-switcher.title')\">\n    @php\n        $currentUrl = url()->full();\n        if (\\Illuminate\\Support\\Str::contains($currentUrl, '?')) {\n            $currentUrl .= '&lang=';\n        } else {\n            $currentUrl .= '?lang=';\n        }\n    @endphp\n    <div class=\"grid grid-cols-2 gap-4\">\n        <ul class=\"list-none p-0 m-0\">\n            <li class=\"py-2\">\n                <a rel=\"nofollow\" href=\"{{ $currentUrl . 'en-US' }}\" class=\"text-link\">\n                    US English\n                </a>\n            </li>\n            <li class=\"py-2\">\n                <a rel=\"nofollow\" href=\"{{ $currentUrl . 'en' }}\" class=\"text-link\">\n                    UK English\n                </a>\n            </li>\n            <li class=\"py-2\">\n                <a rel=\"nofollow\" href=\"{{ $currentUrl . 'pt-BR' }}\" class=\"text-link\">\n                    Português do Brasil\n                </a>\n            </li>\n        </ul>\n        <ul class=\"list-none p-0 m-0\">\n            <li class=\"py-2\">\n                <a rel=\"nofollow\" href=\"{{ $currentUrl . 'de' }}\" class=\"text-link\">\n                    Deutsch\n                </a>\n            </li>\n            <li class=\"py-2\">\n                <a rel=\"nofollow\" href=\"{{ $currentUrl . 'fr' }}\" class=\"text-link\">\n                    Français\n                </a>\n            </li>\n            <li class=\"py-2\">\n                <a rel=\"nofollow\" href=\"{{ $currentUrl . 'es' }}\" class=\"text-link\">\n                    Español\n                </a>\n            </li>\n        </ul>\n    </div>\n    <div class=\"text-left w-full my-4\">\n        {{ __('footer.language-switcher.other') }}\n    </div>\n    <div class=\"w-full\">\n        <div class=\"grid grid-cols-2 gap-4\">\n            <ul class=\"list-none p-0 m-0\">\n                <li class=\"py-2\">\n                    <a rel=\"nofollow\" href=\"{{ $currentUrl . 'it' }}\" class=\"text-link\">\n                        Italiano\n                    </a>\n                </li>\n                <li class=\"py-2\">\n                    <a rel=\"nofollow\" href=\"{{ $currentUrl . 'pl' }}\" class=\"text-link\">\n                        Polska\n                    </a>\n                </li>\n            </ul>\n            <ul class=\"list-none p-0 m-0\">\n                <li class=\"py-2\">\n                    <a rel=\"nofollow\" href=\"{{ $currentUrl . 'ru' }}\" class=\"text-link\">\n                        Pусский\n                    </a>\n                </li>\n                <li class=\"py-2\">\n                    <a rel=\"nofollow\" href=\"{{ $currentUrl . 'sk' }}\" class=\"text-link\">\n                        Slovenský\n                    </a>\n                </li>\n            </ul>\n        </div>\n    </div>\n</x-dialog>\n"
  },
  {
    "path": "resources/views/layouts/dialogs/subscription.blade.php",
    "content": "<x-dialog.header>\n    {{ $title ?? __('concept.premium-feature') }}\n</x-dialog.header>\n<x-dialog.article class=\"max-w-xl\">\n    <x-grid type=\"1/1\">\n        <p>\n            {{ __('settings/premium.create.pitch_2026') }}\n        </p>\n    </x-grid>\n</x-dialog.article>\n<x-premium-cta-footer :campaign=\"$campaign\" />\n"
  },
  {
    "path": "resources/views/layouts/error.blade.php",
    "content": "<!doctype html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n@php AdCache::adless() @endphp\n@include('layouts.tracking.tracking')\n\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <meta name=\"description\" content=\"{{ __('front.meta.description', ['kanka' => config('app.name')]) }}\">\n    <meta name=\"author\" content=\"{{ config('app.name') }}\">\n\n    <meta property=\"og:title\" content=\"{{ $title ?? __('front.meta.title', ['kanka' => config('app.name')]) }} - {{ config('app.name') }}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n\n    <title>{{ $error }} {{ __('errors.' . $error . '.title') }}</title>\n\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta content='width=device-width, initial-scale=1, maximum-scale=5' name='viewport'>\n    @include('layouts.links.icons')\n    @includeWhen(!config('fontawesome.kit'), 'layouts.styles.fontawesome')\n\n    @if (config('app.asset_url'))\n        <link rel=\"dns-prefetch\" href=\"{{ config('app.asset_url') }}\">\n    @endif\n    <link rel=\"dns-prefetch\" href=\"//cdnjs.cloudflare.com\">\n    <link rel=\"dns-prefetch\" href=\"//www.googletagmanager.com\">\n\n</head>\n\n<body id=\"page-top\">\n@vite('resources/css/front.css')\n<noscript id=\"deferred-styles\">\n</noscript>\n\n@include('layouts.front.nav', ['minimal' => $error === 503])\n<section class=\"bg-purple text-white gap-16\" id=\"error-{{ $error }}\">\n    <div class=\"px-6 py-20 lg:max-w-7xl mx-auto text-center flex flex-col gap-8\">\n        @hasSection('content')\n            @yield('content')\n        @else\n            <h2>{{ __('errors.' . $error . '.title') }}</h2>\n            @if (is_array(__('errors.' . $error . '.body')))\n                @foreach (__('errors.' . $error . '.body') as $text)\n                    <p class=\"lg:max-w-2xl mx-auto text-center\">{{ $text }}</p>\n                @endforeach\n            @else\n                <p class=\"lg:max-w-2xl mx-auto text-center\">{{ __('errors.' . $error . '.body') }}</p>\n            @endif\n\n            @guest\n                <p class=\"lg:max-w-2xl mx-auto text-center\">{{ __('errors.log-in') }}</p>\n            @endguest\n        @endif\n\n        <p class=\"lg:max-w-2xl mx-auto text-center\">\n            {!! __('errors.footer', [\n    'discord' => '<a href=\"https://kanka.io/go/discord\" class=\"link-light\">Discord</a>',\n    'email' => '<a href=\"mailto:' . config('app.email') . '\" class=\"link-light\">' . config('app.email') . '</a>',\n]) !!}\n        </p>\n    </div>\n</section>\n\n<section class=\"lg:max-w-7xl mx-auto flex flex-col gap-10 lg:gap-10 py-10 lg:py-12 px-4 xl:px-0 text-dark text-center\" >\n    @if ($error !== 503 && auth()->check() && !\\App\\Facades\\Identity::isImpersonating())\n        <p class=\"text-md\">{{ __('errors.back-to-campaigns') }}</p>\n        <div class=\"flex flex-wrap justify-center items-center gap-10 max-w-3xl mx-auto\">\n\n        @foreach (auth()->user()->campaigns as $campaign)\n            <a href=\"{{ route('dashboard', $campaign) }}\" class=\"btn-round rounded flex gap-2 items-center\">\n                <x-icon class=\"fa-regular fa-arrow-right\" />\n                {!! $campaign->name !!}\n            </a>\n        @endforeach\n        </div>\n    @endif\n</section>\n\n@includeWhen(Route::has('home'), 'front.footer')\n@vite('resources/js/front.js')\n@includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n\n@includeWhen(config('tracking.consent'), 'partials.cookieconsent')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/footer.blade.php",
    "content": "<footer id=\"footer\" class=\"main-footer px-4 py-10 print:hidden\">\n    <div class=\"lg:max-w-7xl lg:mx-auto\">\n        <div class=\"flex flex-col gap-10\">\n            <div class=\"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-5\">\n                <div class=\"flex-col gap-4 hidden lg:flex col-span-2 \">\n                    <div class=\"flex\">\n                        <a href=\"{{ route('home') }}\" class=\"logo text-link\">\n                            <svg class=\"h-28 w-28\"  alt=\"Kanka Logo\" >\n                                <use href=\"/images/svgs/sprites.svg#kanka-logo\" fill=\"red\"></use>\n                            </svg>\n                        </a>\n                    </div>\n\n\n                    <div class=\"flex items-center gap-5 text-3xl flex-wrap\">\n                        @include('layouts._socials')\n                    </div>\n\n                    @include('layouts._lang-switcher')\n\n                    <div class=\"text-xs text-neutral-content\">\n                        <p>\n                            {{ __('footer.made') }}\n                        </p>\n                        <p>\n                            {{ __('footer.thanks') }}\n                        </p>\n                        <p>\n                            {!! __('footer.copyright', ['copy' => '&copy;', 'year' => date('Y'), 'company' => 'Owlchester SNC'])!!}\n                        </p>\n                    </div>\n\n                    <div class=\"text-xs text-neutral-content\">\n                        <p>\n                            Kanka v{{ config('app.version') }} - <span data-toggle=\"tooltip\" data-html=\"true\" data-title=\"{{ __('footer.server-time', ['server' => gethostname()]) }}<br />Page generated in {{ round((microtime(true) - LARAVEL_START) * 1000, 2) }} ms\">{{ \\Carbon\\Carbon::now()->isoFormat('MMMM Do YYYY, h:mm A') }}</span>\n                        </p>\n                    </div>\n                </div>\n                <div class=\"flex flex-col gap-3 text-sm\">\n                    <span class=\"block text-nav uppercase text-xs text-neutral-content font-semibold\">{{ __('footer.platform') }}</span>\n                    <a href=\"{{ Domain::toFront('features') }}\" class=\"text-link\">{{ __('footer.features') }}</a>\n                    <a href=\"{{ Domain::toFront('premium') }}\" class=\"text-link\">{{ __('footer.premium') }}</a>\n                    <a href=\"{{ Domain::toFront('pricing') }}\" class=\"text-link\">{{ __('footer.pricing') }}</a>\n                    <a href=\"{{ config('marketplace.url') }}\" class=\"text-link\">{{ __('footer.plugins') }}</a>\n                </div>\n\n                <div class=\"flex flex-col gap-3 text-sm\">\n                    <span class=\"block text-nav uppercase text-xs text-neutral-content font-semibold\">{{ __('footer.resources') }}</span>\n                    <a href=\"{{ Domain::toFront('kb') }}\" class=\"text-link\">{{ __('footer.kb') }}</a>\n                    <a href=\"https://docs.kanka.io/en/latest/index.html\" target=\"_blank\" class=\"text-link\">{{ __('footer.documentation') }}</a>\n                    <a href=\"{{ route('larecipe.index') }}\" target=\"_blank\" class=\"text-link\">{{ __('front.features.api.link') }}</a>\n                    <a href=\"https://blog.kanka.io\" target=\"_blank\" class=\"text-link\">{{ __('footer.blog') }}</a>\n                    <a href=\"https://status.kanka.io\" target=\"_blank\" class=\"text-link\">{{ __('footer.status') }}</a>\n                    <a href=\"{{ Domain::toFront('newsletter') }}\" class=\"text-link\">{{ __('footer.newsletter') }}</a>\n                </div>\n\n                <div class=\"flex flex-col gap-3 text-sm\">\n                    <span class=\"block text-nav uppercase text-xs text-neutral-content font-semibold\">{{ __('footer.community') }}</span>\n                    <a href=\"https://blog.kanka.io/category/news/\" class=\"text-link\" target=\"_blank\">{{ __('footer.whats-new') }}</a>\n                    <a href=\"{{ Domain::toFront('campaigns') }}\" class=\"text-link\">{{ __('footer.public-campaigns') }}</a>\n                    <a href=\"{{ route('roadmap') }}\" class=\"text-link\">{{ __('footer.roadmap') }}</a>\n                    <a href=\"{{ Domain::toFront('hall-of-fame') }}\" class=\"text-link\">{{ __('front/hall-of-fame.title') }}</a>\n                </div>\n\n                <div class=\"flex flex-col gap-3 text-sm\">\n                    <span class=\"block text-nav uppercase text-xs text-neutral-content font-semibold\">{{ __('footer.company') }}</span>\n                    <a href=\"{{ Domain::toFront('about') }}\" class=\"text-link\">{{ __('footer.about') }}</a>\n                    <a href=\"{{ Domain::toFront('contact') }}\" class=\"text-link\">{{ __('footer.contact') }}</a>\n                    <a href=\"{{ Domain::toFront('privacy-policy') }}\" class=\"text-link\">{{ __('footer.privacy') }}</a>\n                    <a href=\"{{ Domain::toFront('terms-and-conditions') }}\" class=\"text-link\">{{ __('footer.terms') }}</a>\n                    <a href=\"{{ Domain::toFront('security') }}\" class=\"text-link\">{{ __('footer.security') }}</a>\n                    <a href=\"{{ Domain::toFront('press-kit') }}\" class=\"text-link\">{{ __('footer.press-kit') }}</a>\n                </div>\n            </div>\n            <div class=\"lg:hidden flex flex-col gap-5 text-center\">\n                <div class=\"logo text-center\">\n                    <div class=\"inline-block\">\n                        <a href=\"{{ route('home') }}\" class=\"logo text-link\">\n\n                            <svg class=\"h-28 w-28\" alt=\"Kanka Logo\" >\n                                <use href=\"/images/svgs/sprites.svg#kanka-logo\"></use>\n                            </svg>\n                        </a>\n                    </div>\n                </div>\n\n                <div class=\"flex justify-center gap-5 text-3xl\">\n                    @include('layouts._socials')\n                </div>\n\n                @include('layouts._lang-switcher')\n\n                <div class=\"text-center text-sm\">\n\n                    <p>Kanka v{{ config('app.version') }} - {!! __('footer.copyright', ['copy' => '&copy;', 'year' => date('Y'), 'company' => 'Owlchester SNC'])!!}</p>\n\n                    <p>{{ \\Carbon\\Carbon::now()->isoFormat('MMMM Do YYYY, h:mm a') }} ({{ gethostname() }})</p>\n                </div>\n            </div>\n            <span data-ccpa-link=\"1\"></span>\n            <div id=\"ncmp-consent-link\"></div>\n        </div>\n    </div>\n</footer>\n"
  },
  {
    "path": "resources/views/layouts/front/nav.blade.php",
    "content": "<nav class=\"flex items-center justify-between gap-16 lg:gap-20 h-32 px-5 max-w-7xl mx-auto\">\n    <a href=\"/\" class=\"text-dark\">\n        <svg class=\"h-28 w-28\"  alt=\"Kanka Logo\" >\n            <use href=\"/images/svgs/sprites.svg#kanka-logo\"></use>\n        </svg>\n    </a>\n    <div class=\"gap-8 lg:gap-12 items-center grow hidden lg:flex\">\n        <a href=\"{{ Domain::toFront('features') }}\" class=\"link text-nav\">\n            {{ __('footer.features') }}\n        </a>\n        <a href=\"{{ Domain::toFront('pricing') }}\" class=\"link text-nav\">\n            {{ __('footer.pricing') }}\n        </a>\n        <a href=\"{{ Domain::toFront('campaigns') }}\" class=\"link text-nav\">\n            {{ __('footer.public-campaigns') }}\n        </a>\n    </div>\n    @if (!isset($minimal) || !$minimal)\n    <div class=\"gap-2.5 items-center hidden lg:flex\">\n        @guest()\n            <a href=\"{{ route('login', request()->is('roadmap') ? ['next' => 'roadmap'] : []) }}\" class=\"btn-login transition-all duration-200\">\n                {{ __('front.menu.login') }}\n            </a>\n            @if (config('auth.register_enabled'))\n            <a href=\"{{ route('register', request()->is('roadmap') ? ['next' => 'roadmap'] : []) }}\" class=\"btn-register transition-all duration-200\">\n                {{ __('front.menu.register') }}\n            </a>\n            @endif\n        @else\n            <a href=\"{{ route('home') }}\" class=\"btn-register transition-all duration-200\">\n                {{ __('front.menu.dashboard') }}\n            </a>\n        @endif\n    </div>\n    @endif\n    <div class=\"block lg:hidden text-5xl text-blue\" id=\"nav-mobile-toggler\">\n        <div class=\"cursor-pointer open\" aria-label=\"Open menu\">\n            <x-icon class=\"fa-thin fa-bars\" />\n        </div>\n        <div class=\"cursor-pointer close\" aria-label=\"Close menu\">\n            <x-icon class=\"fa-thin fa-times\" />\n        </div>\n\n        <div class=\"mobile-menu fixed top-0 bottom-0 left-0 right-0 px-5 w-full bg-white\">\n            <div class=\"h-32 flex justify-end items-center\">\n                <x-icon class=\"fa-thin fa-times text-5xl text-blue cursor-pointer\" />\n            </div>\n            <div class=\"px-16 flex flex-col gap-6 items-center\">\n                @auth()\n                    <a href=\"/\" class=\"link text-nav\">\n                        {{ __('front.menu.dashboard') }}\n                    </a>\n                @endif\n                <a href=\"https://kanka.io/features\" class=\"link text-nav\">\n                    {{ __('footer.features') }}\n                </a>\n                <a href=\"https://kanka.io/pricing\" class=\"link text-nav\">\n                    {{ __('footer.pricing') }}\n                </a>\n                <a href=\"https://kanka.io/campaigns\" class=\"link text-nav\">\n                    {{ __('footer.public-campaigns') }}\n                </a>\n\n\n                @if (!isset($minimal) || !$minimal)\n                    @guest()\n                        <a href=\"{{ route('login') }}\" class=\"btn-login transition-all duration-200\">\n                            {{ __('front.menu.login') }}\n                        </a>\n                        @if (config('auth.register_enabled'))\n                        <a href=\"{{ route('register') }}\" class=\"btn-register transition-all duration-200\">\n                            {{ __('front.menu.register') }}\n                        </a>\n                        @endif\n                    @else\n                        <a href=\"{{ route('home') }}\" class=\"btn-register transition-all duration-200\">\n                            {{ __('front.menu.dashboard') }}\n                        </a>\n                    @endif\n                @endif\n            </div>\n        </div>\n    </div>\n</nav>\n"
  },
  {
    "path": "resources/views/layouts/front.blade.php",
    "content": "@php\n\n$cleanCanonical = \\Illuminate\\Support\\Str::before(request()->fullUrl(), '%3');\n@endphp\n<html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content='width=device-width, initial-scale=1, maximum-scale=5, shrink-to-fit=no'>\n    <meta name=\"author\" content=\"{{ config('app.name') }}\">\n    <meta name=\"description\" content=\"{{ $metaDescription ?? __('front.home.seo.meta-description', ['kanka' =>  config('app.name')]) }}\">\n    <meta name=\"keywords\" content=\"{{  $metaKeywords ?? __('front.seo.keywords') }}\">\n\n    <meta property=\"og:title\" content=\"{{ $title ?? __('front.meta.title', ['kanka' =>  config('app.name')]) }}@if (!isset($skipEnding)) - {{ config('app.name') }} @endif\">\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\">\n    <meta property=\"og:type\" content=\"website\" />\n    <meta name=\"twitter:card\" content=\"summary_large_image\" />\n    <meta name=\"twitter:image\" content=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/front/preview-background.png\" />\n    <meta name=\"twitter:image:alt\" content=\"{{ config('app.name') }} showcase of a character view\" />\n@if(config('services.facebook.client_id'))  <meta property=\"fb:app_id\" content=\"{{ config('services.facebook.client_id') }}\" />@endif\n\n    @yield('og')\n@if(config('app.admin'))\n    @if (!isset($ogImage) || !$ogImage)\n    <meta property=\"og:image\" content=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/front/preview-background.png\" />\n    <meta property=\"og:image:type\" content=\"image/png\" />\n    <meta property=\"og:image:width\" content=\"1920\" />\n    <meta property=\"og:image:height\" content=\"1024\" />\n    <meta property=\"og:image:alt\" content=\"{{ config('app.name') }} showcase of a character view\" />\n    @endif\n    <script type=\"application/ld+json\">\n      {\n        \"@id\": \"#product\",\n        \"@type\": \"WebApplication\",\n        \"@context\": \"http://schema.org/\",\n        \"name\": \"{{ config('app.name') }}\",\n        \"description\": \"{{ $metaDescription ?? __('front.home.seo.meta-description') }}\",\n        \"url\": \"{{ config('app.url') }}\",\n        \"applicationCategory\": \"Game, Note taking\",\n        \"operatingSystem\": \"all\",\n        \"image\": [\"https://th.kanka.io/o-ZrT3jpQVW_Nd_1g5eBAGg7wpU=/1920x1024/smart/src/app/front/preview-background.png\"],\n        \"screenshot\": \"https://th.kanka.io/T35QId2XP7bbGxy0c237Qr9woSs=/600x320/smart/src/app/front/preview-background.png\",\n        \"creator\": {\n          \"@type\": \"Organization\",\n          \"@id\": \"#organization\",\n          \"url\": \"{{ config('app.url') }}\",\n          \"name\": \"{{ config('app.name') }}\",\n          \"logo\": { \"@type\": \"ImageObject\", \"url\": \"https://th.kanka.io/z4Y8iu74nWLlIPFWld-QY5jHQWM=/226x205/smart/src/app/logos/kanka-logo-large.png\", \"width\": \"226\", \"height\": \"205\" }\n        }\n      }\n    </script>@endif\n\n    <title>{{ $title }} - {{ config('app.name') }}</title>\n\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n\n    @include('layouts.links.icons')\n\n    <link rel=\"canonical\" href=\"{{ $cleanCanonical }}\" />\n\n    <link rel=\"dns-prefetch\" href=\"//cdnjs.cloudflare.com\">\n    <link rel=\"dns-prefetch\" href=\"//kit.fontawesome.com\">\n    <link rel=\"dns-prefetch\" href=\"//www.googletagmanager.com\">\n\n    @vite('resources/css/front.css')\n    @livewireStyles\n    @yield('styles')\n    @include('layouts.tracking.tracking', ['frontLayout' => true])\n</head>\n\n<body id=\"page-top\" class=\"\">\n<noscript id=\"deferred-styles\">\n</noscript>\n\n<div id=\"top\"></div>\n@include('layouts.front.nav')\n\n    @yield('content')\n@include('front.footer')\n\n@vite(['resources/js/front.js'])\n@includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n@includeWhen(config('tracking.consent'), 'partials.cookieconsent')\n<div id=\"dialog-backdrop\" class=\"z-1000 fixed top-0 left-0 right-0 bottom-0 h-full w-full backdrop-blur-sm hidden\" style=\"--tw-bg-opacity: 0.2\"></div>\n@yield('modals')\n@yield('scripts')\n@livewireScripts\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/header/qq.blade.php",
    "content": "<div class=\"flex-none\">\n    <a\n        href=\"#\"\n        data-url=\"{{ route('entity-creator.selection', $campaign) }}\"\n        data-toggle=\"dialog\"\n        class=\"quick-creator-button btn2 btn-default btn-sm\"\n        data-shortcut=\"n\"\n        data-title=\"{{ __('header.qq.tooltip') }} [ N ]\"\n        data-tooltip\n        tabindex=\"0\">\n        <x-icon class=\"flex-none fa-regular fa-plus\" />\n        <span class=\"grow hidden sm:inline-block\">\n            {{ __('crud.create') }}\n        </span>\n    </a>\n</div>\n"
  },
  {
    "path": "resources/views/layouts/header.blade.php",
    "content": "<header id=\"header\" class=\"fixed top-0 h-12 w-full bg-navbar bg-base-100 z-900\">\n    <nav class=\"flex gap-2 justify-center items-center h-full px-3\">\n        <noscript>\n                <span class=\"bg-error text-error-content p-1 rounded text-sm\">\n                    Kanka requires Javascript to work properly. Please enable it.\n                </span>\n        </noscript>\n        <div class=\"flex-none flex md:w-sidebar justify-items items-center toggle-and-search gap-2\">\n        @if (isset($toggle) && $toggle)\n            <nav-toggler\n                text=\"{{ __('header.toggle_navigation') }}\"\n                title=\"{{ __('crud.keyboard-shortcut', ['code' => '<code>]</code>']) }}\"\n            ></nav-toggler>\n        @endif\n\n        @if (!empty($campaign))\n            <nav-search\n                api_lookup=\"{{ route('search.live', $campaign) }}\"\n                api_recent=\"{{ route('search.recent', $campaign) }}\"\n                placeholder=\"{{ __('search.placeholder') }}\"\n                keyboard_tooltip=\"{!! __('crud.keyboard-shortcut', ['code' => '<code>K</code>']) !!}\"\n            ></nav-search>\n        @endif\n        </div>\n\n        @includeWhen(auth()->check() && !empty($campaign) && auth()->user()->can('member', $campaign) && (!isset($qq) || $qq), 'layouts.header.qq')\n\n        <div class=\"flex-1 navbar-actions\">\n\n            <div class=\"flex justify-end items-center gap-2\">\n                @guest\n                    <a href=\"{{ route('login') }}\" class=\"text-link\">\n                        {{ __('front.menu.login') }}\n                    </a>\n                    @if(config('auth.register_enabled'))\n                        <a href=\"{{ route('register') }}\" class=\"btn2 btn-primary btn-xs\">\n                            {{ __('front.menu.register') }}\n                        </a>\n                    @endif\n                @endguest\n\n                @auth()\n                    @if (config('app.debug'))\n                        @php\n                            $themeUrl = \\Illuminate\\Support\\Str::before(request()->fullUrl(), '_theme=');\n                            $themeUrl .= \\Illuminate\\Support\\Str::contains($themeUrl, '?') ? '&' : '?';\n                            $premiumUrl = \\Illuminate\\Support\\Str::before(request()->fullUrl(), '_boosted=');\n                            $premiumUrl .= \\Illuminate\\Support\\Str::contains($premiumUrl, '?') ? '&' : '?';\n                        @endphp\n                        <div class=\"dropdown\">\n                            <button type=\"button\" class=\"text-neutral-content hover:text-accent text-2xl\" data-dropdown aria-expanded=\"false\">\n                                <x-icon class=\"fa-regular fa-gem\" />\n                            </button>\n                            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                                @if (request()->has('_boosted'))\n                                <x-dropdowns.item\n                                    link=\"{!! $premiumUrl !!}\">\n                                    Reset\n                                </x-dropdowns.item>\n                                @else\n                                <x-dropdowns.item\n                                    link=\"{!! $premiumUrl . '_boosted=0' !!}\">\n                                    Disable premium\n                                </x-dropdowns.item>\n                                @endif\n                            </div>\n                        </div>\n                        <div class=\"dropdown\">\n                            <button type=\"button\" class=\"text-neutral-content hover:text-accent text-2xl\" data-dropdown aria-expanded=\"false\">\n                                <x-icon class=\"fa-regular fa-palette\" />\n                            </button>\n                            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                                @if (request()->has('_theme'))\n                                <x-dropdowns.item\n                                    link=\"{!! $themeUrl . '' !!}\">\n                                    Reset\n                                </x-dropdowns.item>\n                                @endif\n                                <x-dropdowns.item\n                                    link=\"{!! $themeUrl . '_theme=base' !!}\">\n                                    Light\n                                </x-dropdowns.item>\n                                <x-dropdowns.item\n                                    link=\"{!! $themeUrl . '_theme=dark' !!}\">\n                                    Dark\n                                </x-dropdowns.item>\n                                <x-dropdowns.item\n                                    link=\"{!! $themeUrl . '_theme=midnight' !!}\">\n                                    Midnight\n                                </x-dropdowns.item>\n                            </div>\n                        </div>\n                    @endif\n                    <nav-switcher\n                        user_id=\"{{ auth()->user()->id }}\"\n                        api=\"{{ route('layout.navigation') }}\"\n                        fetch=\"{{ route('notifications.refresh') }}\"\n                        initials=\"{{ auth()->user()->initials() }}\"\n                        avatar=\"{{ auth()->user()->getAvatarUrl(36) }}\"\n                        campaign_id=\"{{ !empty($campaign) ? $campaign->id : null }}\"\n                        :has_alerts=\"{{ auth()->user()->hasUnread() ? 'true' : 'false'}}\"\n                    ></nav-switcher>\n                    <form id=\"logout-form\" action=\"{{ route('logout') }}\" method=\"POST\" class=\"hidden\">\n                        {{ csrf_field() }}\n                    </form>\n                @endauth\n            </div>\n        </div>\n    </nav>\n</header>\n"
  },
  {
    "path": "resources/views/layouts/links/icons.blade.php",
    "content": "<link rel=\"icon\" type=\"image/svg+xml\" href=\"https://d3a4xjr8r2ldhu.cloudfront.net/images/favicon/favicon.svg\" />\n<link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://d3a4xjr8r2ldhu.cloudfront.net/images/favicon/favicon-32x32.png\">\n<link rel=\"apple-touch-icon\" href=\"https://d3a4xjr8r2ldhu.cloudfront.net/images/favicon/apple-touch-icon.png\" />\n<link rel=\"manifest\" href=\"https://d3a4xjr8r2ldhu.cloudfront.net/images/favicon/site.webmanifest\" />\n\n<meta name=\"apple-mobile-web-app-title\" content=\"{{ $campaign->name ?? config('app.name') }}\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"#40479e\">\n"
  },
  {
    "path": "resources/views/layouts/login.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n@include('layouts.tracking.tracking')\n    <meta charset=\"utf-8\">\n    <title>{{ $title ?? __('default.page_title') }} - {{ config('app.name', 'Laravel') }}</title>\n    <!-- CSRF Token -->\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>\n    <meta name=\"robots\" content=\"noindex, follow\">\n    <meta property=\"og:title\" content=\"{{ $title ?? '' }} - {{ config('app.name') }}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n    @include('layouts.links.icons')\n\n    @vite('resources/css/auth.css')\n    @includeWhen(!config('fontawesome.kit'), 'layouts.styles.fontawesome')\n</head>\n<body class=\"hold-transition register-page\">\n    <div class=\"login-box mx-auto\">\n\n        <!-- Content Header (Page header) -->\n        <div class=\"bg-white dark:bg-slate-800 md:rounded-xl p-5 md:mt-28 dark:text-slate-400 m-5 rounded-xl flex flex-col gap-4 md:gap-5\">\n            <div class=\"text-center w-full login-logo\">\n                <a href=\"{{ route('home') }}\" tabindex=\"-1\">\n                    <img src=\"https://th.kanka.io/DRTLkY7Tkqz9WqPC_PzgfW0IfUY=/80x72/smart/src/app/logos/kanka-logo-large.png\" alt=\"{{ config('app.name') }}\" title=\"{{ config('app.name') }}\" class=\"w-20 inline dark:hidden\" />\n                    <img src=\"https://th.kanka.io/ibvg9Hwlnd3yYMUgyYJAcHlwjxU=/80x72/smart/src/app/logos/logo-small-white.png\" alt=\"{{ config('app.name') }}\" title=\"{{ config('app.name') }}\" class=\"w-20 inline hidden dark:inline\" />\n                </a>\n            </div>\n            @yield('content')\n        </div>\n    </div>\n\n    @includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n    @vite(['resources/js/auth.js'])\n@yield('scripts')\n\n@includeWhen(config('tracking.consent'), 'partials.cookieconsent')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/map.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Map $map\n */\n$themeOverride = request()->get('_theme');\n$specificTheme = null;\n?><!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n    @include('layouts.tracking.tracking')\n    <meta charset=\"utf-8\">\n    <title>{{ $title ?? __('default.page_title') }} - {{ config('app.name') }}</title>\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>\n    <meta property=\"og:title\" content=\"{{ $title ?? '' }} - {{ config('app.name') }}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n    @yield('og')\n    @include('layouts.links.icons')\n\n    @vite([\n        'resources/css/vendor.css',\n        'resources/css/app.css',\n        'resources/css/maps/maps.css'\n    ])\n    @includeWhen(!config('fontawesome.kit'), 'layouts.styles.fontawesome')\n    <link rel=\"stylesheet\" href=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.css' }}\" integrity=\"{{ config('app.leaflet_css') }}\" crossorigin=\"\" />\n    @if (!empty($themeOverride) && in_array($themeOverride, ['dark', 'midnight', 'base']))\n        @php $specificTheme = $themeOverride; @endphp\n        @if($themeOverride != 'base')\n            @vite('resources/css/themes/' . request()->get('_theme') . '.css')\n        @endif\n    @else\n        @if (!empty($campaign) && $campaign->boosted() && !empty($campaign->theme_id))\n            @if ($campaign->theme_id !== 1)\n                @vite('resources/css/themes/' . ($campaign->theme_id === 2 ? 'dark' : 'midnight') . '.css')\n                @php $specificTheme = ($campaign->theme_id === 2 ? 'dark' : 'midnight') @endphp\n            @endif\n        @elseif (auth()->check() && !empty(auth()->user()->theme))\n            @vite('resources/css/themes/' . auth()->user()->theme . '.css')\n            @php $specificTheme = auth()->user()->theme @endphp\n        @endif\n    @endif\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.layerstree.css\"/>\n    @includeWhen(!empty($campaign), 'layouts._theme')\n@yield('styles')\n</head>\n<body id=\"map-body\" class=\"map-page sidebar-collapse @if(\\App\\Facades\\DataLayer::groupB())ab-testing-second @else ab-testing-first @endif @if (!empty($campaign) && auth()->check() && auth()->user()->isAdmin()) is-admin @endif\" @if(!empty($specificTheme)) data-theme=\"{{ $specificTheme }}\" @endif @if(isset($noHeader)) style=\"margin-bottom: -30px;\" @endif>\n@if (!isset($noHeader))\n    <div id=\"app\" class=\"wrapper h-full relative overflow-x-hidden overflow-y-auto mt-12\">\n        <!-- Header -->\n        @includeWhen(!isset($noHeader), 'layouts.header', ['toggle' => true])\n        <aside class=\"main-sidebar overflow-hidden absolute z-20 h-full flex flex-col\">\n            <section class=\"sidebar grow mb-20\" style=\"height: auto\">\n\n                <div id=\"sidebar-content\" class=\"p-0 overflow-auto h-sidebar\">\n                    <!-- The legend / overview default sidebar of the map -->\n                    <div id=\"sidebar-map\">\n                        <div class=\"marker-header\">\n                            <div class=\"marker-header-lower\">\n                                <div class=\"marker-name text-2xl p-3\">\n                                    {{ $map->name }}\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class=\"marker-entry px-3 entity-content\">\n                            {!! \\App\\Facades\\Mentions::map($map) !!}\n                        </div>\n\n                        <div class=\"marker-actions text-center\">\n                            @can('update', $map->entity)\n                                <div class=\"join\">\n                                    <a href=\"{{ route('maps.edit', [$campaign, $map]) }}\" class=\"btn2 btn-primary btn-sm join-item\">\n                                        <x-icon class=\"map\" /> {{ __('maps.actions.edit') }}\n                                    </a>\n                                    <div class=\"dropdown\">\n                                        <button type=\"button\" class=\"btn2 btn-primary btn-sm join-item\" data-dropdown aria-expanded=\"false\">\n                                            <x-icon class=\"fa-regular fa-caret-down\" />\n                                            <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n                                        </button>\n                                        <div class=\"dropdown-menu hidden\" role=\"menu\">\n                                            <x-dropdowns.item\n                                                :link=\"route('maps.map_layers.index', [$campaign, $map])\"\n                                                icon=\"fa-regular fa-layer-group\">\n                                                {{ __('maps.panels.layers') }}\n                                            </x-dropdowns.item>\n                                            <x-dropdowns.item\n                                                :link=\"route('maps.map_groups.index', [$campaign, $map])\"\n                                                icon=\"fa-regular fa-map-signs\">\n                                                {{ __('maps.panels.groups') }}\n                                            </x-dropdowns.item>\n                                            <x-dropdowns.item\n                                                :link=\"route('maps.map_markers.index', [$campaign, $map])\"\n                                                icon=\"fa-regular fa-map-pin\">\n                                                {{ __('maps.panels.markers') }}\n                                            </x-dropdowns.item>\n                                        </div>\n                                    </div>\n                                </div>\n                            @endcan\n                        </div>\n\n\n                        <div class=\"map-legend p-3\">\n                            @include('maps.explore.legend')\n                        </div>\n                        <div class=\"sidebar-menu\" style=\"display: none\">\n                            <!-- used for the sidebar toggle plugin -->\n                        </div>\n\n                        <div class=\"map-legend text-center\">\n                            <a href=\"{{ $map->getLink() }}\" class=\"btn2 btn-ghost btn-sm\">{{ __('maps.actions.back', ['name' => $map->name]) }}</a>\n                        </div>\n                    </div>\n\n                    <!-- When clicking on a marker, this menu pops up -->\n                    <div id=\"sidebar-marker\"></div>\n                    <div class=\"spinner text-center text-lg\" style=\"display: none; margin-top: 10px;\">\n                        <x-icon class=\"load\" />\n                    </div>\n                </div>\n\n            </section>\n        </aside>\n\n        <div class=\"content-wrapper\">\n        @yield('content')\n        </div>\n    </div>\n    <x-dialog id=\"primary-dialog\" :loading=\"true\" />\n    <div id=\"dialog-backdrop\" class=\"z-1000 fixed top-0 left-0 right-0 bottom-0 h-full w-full backdrop-blur-sm hidden\" style=\"--tw-bg-opacity: 0.2\"></div>\n\n    <div class=\"toast-container fixed overflow-y-auto overflow-x-hidden bottom-4 right-4 max-h-full\"></div>\n@else\n    @yield('content')\n@endif\n\n@vite(['resources/js/vendor-final.js', 'resources/js/app.js'])\n@includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n<!-- Make sure you put this AFTER Leaflet's CSS -->\n<script src=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.js' }}\" integrity=\"{{ config('app.leaflet_js') }}\" crossorigin=\"\"></script>\n<script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomdisplay.js\" type=\"text/javascript\" ></script>\n<script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.js\"></script>\n<script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.layersupport.js\"></script>\n<script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomcss.js\"></script>\n@if ($map->isReal())\n<script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.ruler.js\"></script>\n@else\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.ruler-kanka.js\"></script>\n@endif\n<script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.path.drag.js\"></script>\n<script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.editable.js\"></script>\n<script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.layerstree.js\"></script>\n@vite('resources/js/location/map-v3.js')\n@yield('scripts')\n@livewireScripts\n@yield('modals')\n@includeWhen(config('tracking.consent'), 'partials.cookieconsent')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/print.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n */\n$themeOverride = request()->get('_theme', 'base');\n$specificTheme = null;\n?><!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>{!! $title ?? '' !!}</title>\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta content='width=device-width, initial-scale=1, maximum-scale=5' name='viewport'>\n    <meta property=\"og:title\" content=\"{{ $title ?? '' }}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n\n    @include('layouts.links.icons')\n    @vite([\n        'resources/css/vendor.css',\n        'resources/css/app.css',\n    ])\n    @includeWhen(!config('fontawesome.kit'), 'layouts.styles.fontawesome')\n    @yield('styles')\n    @if (!empty($themeOverride) && in_array($themeOverride, ['dark', 'midnight', 'base']))\n        @php $specificTheme = $themeOverride; @endphp\n        @if($themeOverride != 'base')\n            @vite('resources/css/themes/' . request()->get('_theme') . '.css')\n        @endif\n    @else\n        @if (!empty($campaign) && $campaign->boosted() && !empty($campaign->theme_id))\n            @if ($campaign->theme_id !== 1)\n                @vite('resources/css/themes/' . ($campaign->theme_id === 2 ? 'dark' : 'midnight') . '.css')\n                @php $specificTheme = ($campaign->theme_id === 2 ? 'dark' : 'midnight') @endphp\n            @endif\n        @elseif (auth()->check() && !empty(auth()->user()->theme))\n            @vite('resources/css/themes/' . auth()->user()->theme . '.css')\n            @php $specificTheme = auth()->user()->theme @endphp\n        @endif\n    @endif\n    @includeWhen(!empty($campaign), 'layouts._theme')\n    @vite([\n    'resources/css/print/print.css',\n    ])\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Roboto&display=swap\">\n</head>\n\n<body class=\"{{ $entity->bodyClasses() }}  @if(isset($bodyClass)){{ $bodyClass }}@endif\" @if(!empty($specificTheme)) data-theme=\"{{ $specificTheme }}\" @endif>\n    <div id=\"app\" class=\"wrapper\">\n\n        <div class=\"content-wrapper\" @if(isset($contentId)) id=\"{{ $contentId }}\" @endif>\n            @if(!view()->hasSection('content-header'))\n            <section class=\"content-header\">\n                @includeWhen(!isset($breadcrumbs) || $breadcrumbs !== false, 'layouts._breadcrumbs')\n\n                @if (!View::hasSection('entity-header'))\n                    @if (isset($mainTitle))\n                    @else\n                        <h1>\n                            {!! $title ?? \"Page Title\" !!}\n                        </h1>\n                    @endif\n                @endif\n            </section>\n            @endif\n\n            @yield('content-header')\n\n            <section class=\"content\">\n                @include('partials.success')\n                @yield('entity-header')\n                @yield('content')\n            </section>\n        </div>\n\n    </div>\n\n    @includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n    @vite(['resources/js/vendor-final.js', 'resources/js/app.js'])\n    @yield('scripts')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/rich.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $campaign\n */\n$themeOverride = request()->get('_theme');\n$specificTheme = null;\n?><!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n    @include('layouts.tracking.tracking')\n    <meta charset=\"utf-8\">\n    <title>{{ $title ?? __('default.page_title') }} - {{ config('app.name') }}</title>\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>\n    <meta property=\"og:title\" content=\"{{ $title ?? '' }} - {{ config('app.name') }}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n    @yield('og')\n    @include('layouts.links.icons')\n\n    @vite([\n        'resources/css/vendor.css',\n        'resources/css/app.css',\n    ])\n    @includeWhen(!config('fontawesome.kit'), 'layouts.styles.fontawesome')\n    @if (!empty($themeOverride) && in_array($themeOverride, ['dark', 'midnight', 'base']))\n        @php $specificTheme = $themeOverride; @endphp\n        @if($themeOverride != 'base')\n            @vite('resources/css/themes/' . request()->get('_theme') . '.css')\n        @endif\n    @else\n        @if (!empty($campaign) && $campaign->boosted() && !empty($campaign->theme_id))\n            @if ($campaign->theme_id !== 1)\n                @vite('resources/css/themes/' . ($campaign->theme_id === 2 ? 'dark' : 'midnight') . '.css')\n                @php $specificTheme = ($campaign->theme_id === 2 ? 'dark' : 'midnight') @endphp\n            @endif\n        @elseif (auth()->check() && !empty(auth()->user()->theme))\n            @vite('resources/css/themes/' . auth()->user()->theme . '.css')\n            @php $specificTheme = auth()->user()->theme @endphp\n        @endif\n    @endif\n    @includeWhen(!empty($campaign), 'layouts._theme')\n    @yield('styles')\n</head>\n<body id=\"app\" class=\"{{ $pageClass ?? 'rich-page' }} @if (!empty($campaign) && auth()->check() && auth()->user()->isAdmin()) is-admin @endif\" @if(!empty($specificTheme)) data-theme=\"{{ $specificTheme }}\" @endif>\n\n@yield('content')\n<x-dialog id=\"primary-dialog\" :loading=\"true\" />\n<div id=\"dialog-backdrop\" class=\"z-1000 fixed top-0 left-0 right-0 bottom-0 h-full w-full backdrop-blur-sm hidden\" style=\"--tw-bg-opacity: 0.2\"></div>\n\n<div class=\"toast-container fixed overflow-y-auto overflow-x-hidden bottom-4 right-4 max-h-full\"></div>\n\n@vite(['resources/js/vendor-final.js', 'resources/js/app.js'])\n@includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n\n@yield('scripts')\n@livewireScripts\n@yield('modals')\n@includeWhen(config('tracking.consent'), 'partials.cookieconsent')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/scripts/fontawesome.blade.php",
    "content": "<script src=\"https://kit.fontawesome.com/{{ config('fontawesome.kit') }}.js\" crossorigin=\"anonymous\"></script>\n"
  },
  {
    "path": "resources/views/layouts/sidebars/_campaign.blade.php",
    "content": "<section class=\"sidebar-campaign h-52 flex-none overflow-hidden flex items-end\">\n    <div class=\"campaign-block px-4 py-4 w-full\">\n        <div class=\"campaign-head\">\n            @if (!$campaign->image && auth()->check() && auth()->user()->can('update', $campaign))\n                <div class=\"flex gap-2 items-center\">\n                    <div class=\"campaign-name grow truncate text-xl\">\n                        {!! $campaign->name !!}\n                    </div>\n                    <a href=\"#\" class=\"text-sidebar-content\" data-toggle=\"dialog\"\n                       data-url=\"{{ route('campaign.sidebar.image', [$campaign]) }}\" data-tooltip data-title=\"{{ __('campaigns/sidebar.tooltips.image') }}\">\n                        <x-icon class=\"fa-regular fa-image\" />\n                    </a>\n                </div>\n            @else\n            <div class=\"campaign-name truncate text-xl\">\n                {!! $campaign->name !!}\n            </div>\n            @endif\n\n            <div class=\"campaign-updated text-xs truncate\">\n                {{ __('sidebar.campaign_switcher.updated') }} {{ $campaign->updated_at->diffForHumans() }}\n            </div>\n        </div>\n    </div>\n</section>\n"
  },
  {
    "path": "resources/views/layouts/sidebars/app.blade.php",
    "content": "@if (!empty($campaign))\n    <x-sidebar.campaign :campaign=\"$campaign\" :entity=\"$entity ?? null\"/>\n@endif\n"
  },
  {
    "path": "resources/views/layouts/sidebars/bookmark.blade.php",
    "content": "<?php /** @var \\App\\Models\\Bookmark $bookmark */\n$bookmark->setRelation('campaign', $campaign);\n?>\n@auth\n    @php \\App\\Facades\\Dashboard::user(auth()->user()); @endphp\n@endif\n@if ($bookmark->dashboard && $campaign->boosted() && $bookmark->isValidDashboard($campaign))\n    <li class=\"{{ $css ?? null }} p-0 m-0 subsection sidebar-bookmark sidebar-bookmark-{{ $bookmark->position }} {{ $bookmark->customClass($campaign) }}\">\n        <x-sidebar.bookmark :bookmark=\"$bookmark\" :campaign=\"$campaign\" />\n    </li>\n@elseif ($bookmark->target)\n    <li class=\"p-0 m-0 subsection sidebar-bookmark sidebar-bookmark-{{ $bookmark->position }} {{ $bookmark->customClass($campaign) }}\">\n        <x-sidebar.bookmark :bookmark=\"$bookmark\" :campaign=\"$campaign\" />\n    </li>\n@elseif ($bookmark->entityType)\n    <li class=\"p-0 m-0 subsection sidebar-bookmark sidebar-bookmark-{{ $bookmark->position }} {{ $bookmark->customClass($campaign) }} {{ $bookmark->activeModule($campaign, $entityType ?? $entity ?? null) }}\">\n        <x-sidebar.bookmark :bookmark=\"$bookmark\" :campaign=\"$campaign\" />\n    </li>\n@elseif ($bookmark->isRandom())\n    <li class=\"p-0 m-0 subsection sidebar-bookmark sidebar-bookmark-{{ $bookmark->position }} {{ $bookmark->customClass($campaign) }}\">\n        <x-sidebar.bookmark :bookmark=\"$bookmark\" :campaign=\"$campaign\" />\n    </li>\n@endif\n"
  },
  {
    "path": "resources/views/layouts/sidebars/bookmarks.blade.php",
    "content": "@foreach ($links as $bookmark)\n        <?php /** @var \\App\\Models\\Bookmark $bookmark */ ?>\n    @include('layouts.sidebars.bookmark', ['bookmark' => $bookmark])\n@endforeach\n"
  },
  {
    "path": "resources/views/layouts/sidebars/campaign.blade.php",
    "content": "<x-sidebar.settings :campaign=\"$campaign\" />\n"
  },
  {
    "path": "resources/views/layouts/sidebars/settings.blade.php",
    "content": "<x-sidebar.account :user=\"auth()->user()\"/>\n"
  },
  {
    "path": "resources/views/layouts/styles/fontawesome.blade.php",
    "content": "<link href=\"/vendor/fontawesome/6.0.0/css/all.min.css\" rel=\"stylesheet\">\n"
  },
  {
    "path": "resources/views/layouts/tracking/fallback.blade.php",
    "content": "@if (!empty(config('tracking.gtm')))\n    <!-- Google Tag Manager (noscript) -->\n    <noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id={{ config('tracking.gtm') }}\"\n                      height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\n    <!-- End Google Tag Manager (noscript) -->\n@endif"
  },
  {
    "path": "resources/views/layouts/tracking/tracking.blade.php",
    "content": "@if (!empty(config('tracking.ga')))\n    @php isset($campaign) ? \\App\\Facades\\DataLayer::campaign($campaign) : null @endphp\n    @php if (auth()->check()) {\n        \\App\\Facades\\DataLayer::user(auth()->user());\n    } @endphp\n    <!-- Google Analytics -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id={{ config('tracking.ga') }}\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        dataLayer.push({!! \\App\\Facades\\DataLayer::base() !!});\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', '{{ config('tracking.ga') }}');\n        gtag('consent', 'default', {\n            'ad_storage': 'denied',\n            'ad_user_data': 'denied',\n            'ad_personalization': 'denied',\n            'analytics_storage': 'denied'\n        });\n    @if (!empty(config('tracking.ga_convo')))\n        gtag('config', '{{ config('tracking.ga_convo') }}');\n    @endif\n    </script>\n    @if (isset($gaTrackingEvent) && !empty($gaTrackingEvent))\n    <script> gtag('event', 'conversion', {'send_to': '{{ config('tracking.ga_convo') }}/{{ $gaTrackingEvent }}'}); </script>\n    @endif\n    @if (isset($gaPurchase) && !empty($gaPurchase))\n    <script> gtag('event', 'purchase', {\n        'value': {{ $gaPurchase['value'] }},\n        'currency': '{{ $gaPurchase['currency'] }}',\n        'coupon': {{ $gaPurchase['coupon'] ?? 'null' }},\n        'items': [{\n            'item_id': '{{ $gaPurchase['item_id'] }}',\n            'item_name': '{{ $gaPurchase['item_name'] }}',\n            'price': {{ $gaPurchase['value'] }},\n            'coupon': {{ $gaPurchase['coupon'] ?? 'null' }},\n            'quantity': 1,\n        }]\n    }); </script>\n    @endif\n    <!-- End Google Analytics -->\n@endif\n"
  },
  {
    "path": "resources/views/layouts/whiteboard.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Whiteboard $whiteboard\n */\n$themeOverride = request()->get('_theme');\n$specificTheme = null;\n?><!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n    @include('layouts.tracking.tracking')\n    <meta charset=\"utf-8\">\n    <title>{{ $title ?? __('default.page_title') }} - {{ config('app.name') }}</title>\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>\n    <meta property=\"og:title\" content=\"{{ $title ?? '' }} - {{ config('app.name') }}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n    @yield('og')\n    @include('layouts.links.icons')\n\n    @vite([\n        'resources/css/vendor.css',\n        'resources/css/app.css',\n    ])\n    @includeWhen(!config('fontawesome.kit'), 'layouts.styles.fontawesome')\n    @if (!empty($themeOverride) && in_array($themeOverride, ['dark', 'midnight', 'base']))\n        @php $specificTheme = $themeOverride; @endphp\n        @if($themeOverride != 'base')\n            @vite('resources/css/themes/' . request()->get('_theme') . '.css')\n        @endif\n    @else\n        @if (!empty($campaign) && $campaign->boosted() && !empty($campaign->theme_id))\n            @if ($campaign->theme_id !== 1)\n                @vite('resources/css/themes/' . ($campaign->theme_id === 2 ? 'dark' : 'midnight') . '.css')\n                @php $specificTheme = ($campaign->theme_id === 2 ? 'dark' : 'midnight') @endphp\n            @endif\n        @elseif (auth()->check() && !empty(auth()->user()->theme))\n            @vite('resources/css/themes/' . auth()->user()->theme . '.css')\n            @php $specificTheme = auth()->user()->theme @endphp\n        @endif\n    @endif\n    @includeWhen(!empty($campaign), 'layouts._theme')\n@yield('styles')\n</head>\n<body id=\"app\" class=\"whiteboard-page @if (!empty($campaign) && auth()->check() && auth()->user()->isAdmin()) is-admin @endif\" @if(!empty($specificTheme)) data-theme=\"{{ $specificTheme }}\" @endif>\n\n    @yield('content')\n    <x-dialog id=\"primary-dialog\" :loading=\"true\" />\n    <div id=\"dialog-backdrop\" class=\"z-1000 fixed top-0 left-0 right-0 bottom-0 h-full w-full backdrop-blur-sm hidden\" style=\"--tw-bg-opacity: 0.2\"></div>\n\n    <div class=\"toast-container fixed overflow-y-auto overflow-x-hidden bottom-4 right-4 max-h-full\"></div>\n\n@vite(['resources/js/vendor-final.js', 'resources/js/app.js', 'resources/js/whiteboards.js'])\n    @includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n\n@yield('scripts')\n@yield('modals')\n@includeWhen(config('tracking.consent'), 'partials.cookieconsent')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/widget.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n */\n$themeOverride = request()->get('_theme');\n$specificTheme = null;\n$seoTitle = isset($seoTitle) ? $seoTitle : (isset($title) ? $title : null);\n$showSidebar = (!empty($sidebar) && $sidebar === 'settings') || !empty($campaign);\n?><!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\" class=\"scroll-pt-16 overflow-auto\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>{!! $seoTitle !!}</title>\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>\n    <meta property=\"og:title\" content=\"{!! $seoTitle !!} - {{ config('app.name') }}\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.site_name') }}\" />\n    @vite([\n        'resources/css/vendor.css',\n        'resources/css/app.css',\n    ])\n    @includeWhen(!config('fontawesome.kit'), 'layouts.styles.fontawesome')\n    @yield('styles')\n    @if (!empty($themeOverride) && in_array($themeOverride, ['dark', 'midnight', 'base']))\n        @php $specificTheme = $themeOverride; @endphp\n        @if($themeOverride != 'base')\n            @vite('resources/css/themes/' . request()->get('_theme') . '.css')\n        @endif\n    @else\n        @if (!empty($campaign) && $campaign->boosted() && !empty($campaign->theme_id))\n            @if ($campaign->theme_id !== 1)\n                @vite('resources/css/themes/' . ($campaign->theme_id === 2 ? 'dark' : 'midnight') . '.css')\n                @php $specificTheme = ($campaign->theme_id === 2 ? 'dark' : 'midnight') @endphp\n            @endif\n        @elseif (auth()->check() && !empty(auth()->user()->theme))\n            @vite('resources/css/themes/' . auth()->user()->theme . '.css')\n            @php $specificTheme = auth()->user()->theme @endphp\n        @endif\n    @endif\n    @includeWhen(!empty($campaign), 'layouts._theme')\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Roboto&display=swap\">\n</head>\n{{-- Hide the sidebar if the there is no current campaign --}}\n<body class=\"@if(isset($entity)){{ $entity->bodyClasses() }}@endif @if(isset($bodyClass)){{ $bodyClass }}@endif @if (!empty($campaign) && auth()->check() && auth()->user()->isAdmin()) is-admin @endif @if(!app()->isProduction()) env-{{ app()->environment() }} @endif \" @if(!empty($specificTheme)) data-theme=\"{{ $specificTheme }}\" @endif @if (!empty($campaign)) data-user-member=\"{{ auth()->check() && auth()->user()->can('member', $campaign) ? 1 : 0 }}\" @endif>\n\n    <div id=\"app\" class=\"wrapper \">\n        <div class=\"content-wrapper\">\n            <section class=\"\" role=\"main\">\n                @yield('content')\n            </section>\n        </div>\n    </div>\n\n    @yield('modals')\n\n    @includeWhen(config('fontawesome.kit'), 'layouts.scripts.fontawesome')\n    @vite(['resources/js/vendor-final.js', 'resources/js/app.js'])\n    @yield('scripts')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/widgets/editor.blade.php",
    "content": "@if (Auth::user()->editor != 'legacy')\n    @include('layouts.widgets.summernote')\n@else\n    @include('layouts.widgets.tinymce')\n@endif\n"
  },
  {
    "path": "resources/views/layouts/widgets/summernote.blade.php",
    "content": "<input type=\"hidden\" id=\"mention-route-entities\" value=\"{{ route('search.live') }}\"/>\n<input type=\"hidden\" id=\"mention-route-months\" value=\"{{ route('search.calendar-months') }}\"/>\n\n@section('scripts')\n    <script src=\"//cdnjs.cloudflare.com/ajax/libs/summernote/0.8.11/summernote-lite.js\" defer></script>\n\n    @vite(['resources/js/summernote.js'])\n@endsection\n\n@section('styles')\n    <link href=\"//cdnjs.cloudflare.com/ajax/libs/summernote/0.8.11/summernote-lite.css\" rel=\"stylesheet\">\n@endsection\n"
  },
  {
    "path": "resources/views/livewire/campaigns/csv-import.blade.php",
    "content": "<x-box>\n    @if (!$canAssign)\n        <form wire:submit=\"selectEntity\">\n            <div class=\"flex flex-col gap-4\">\n                <h2 class=\"text-2xl\">{{ __('campaigns/import.csv.select_module') }}</h2>\n                <x-helper>\n                    <p>{{ __('campaigns/import.csv.type_helper') }}</p>\n                </x-helper>\n\n                <div class=\"field field-type flex flex-col gap-1\">\n                    <label class=\"font-semibold text-xs opacity-80\">{{ __('crud.fields.category') }}</label>\n                    <select wire:model=\"entityType\" class=\"form-control w-full\" required>\n                        @foreach ($entityTypes as $value => $label)\n                            <option value=\"{{ $value }}\">\n                                {{ $label }}\n                            </option>\n                        @endforeach\n                    </select>\n                </div>\n\n                <input type=\"submit\" value=\"{{ __('campaigns/import.csv.continue') }}\" class=\"btn2 btn-primary\" />\n            </div>\n        </form>\n    @else\n        <form wire:submit.prevent=\"submit\">\n            <div class=\"flex flex-col gap-4\">\n\n\n                <h2 class=\"text-2xl\">{{ __('campaigns/import.csv.set_fields') }}</h2>\n\n                <x-helper>\n                    <p>\n                        {{ __('campaigns/import.csv.fields_helper') }}\n                    </p>\n                </x-helper>\n\n                @foreach ($fillableFields as $index => $field)\n                    <div class=\"field field-type flex flex-col gap-1\">\n                        <label class=\"text-xs font-semibold opacity-80\">\n                            {{ $field }}\n                        </label>\n\n                        <select\n                            wire:model.live=\"columnMap.{{ $index }}\"\n                            class=\"form-control w-full\"\n                            @if ($index == 'name') required @endif\n                        >\n                            <option value=\"\">{{ __('campaigns/import.csv.set_column') }}</option>\n\n                            @if ($index == 'name')\n                                @foreach ($fullColumns as $value => $label)\n                                    <option value=\"{{ $value }}\">\n                                        {{ $label }}\n                                    </option>\n                                @endforeach\n                            @else\n                                @foreach ($headers as $value => $label)\n                                    <option value=\"{{ $value }}\">\n                                        {{ $label }}\n                                    </option>\n                                @endforeach\n                            @endif\n                        </select>\n                    </div>\n                @endforeach\n\n                @if ($type->id == config('entities.ids.character'))\n                    <div class=\"flex flex-col gap-1\">\n                        <div class=\"flex gap-2 justify-between\">\n                            <label class=\"text-xs font-semibold opacity-80\">\n                                {{ __('characters.sections.personality') }}\n                            </label>\n                            <button type=\"button\" wire:click=\"addPersonality\" class=\"btn2 btn-sm btn-outline\">\n                                <x-icon class=\"plus\" /> {{ __('characters.actions.add_personality') }}\n                            </button>\n                        </div>\n\n                        @foreach($personalities as $index => $selection)\n                            <div class=\"flex gap-2 align-items-center\">\n                                <select wire:model=\"personalities.{{ $index }}\" class=\"form-control\">\n                                    <option value=\"\"> {{ __('campaigns/import.csv.select_one') }} </option>\n                                    @foreach($headers as $value => $label)\n                                        <option value=\"{{ $value }}\">{{ $label }}</option>\n                                    @endforeach\n                                </select>\n\n                                <button type=\"button\"\n                                        wire:click=\"removePersonality({{ $index }})\"\n                                        class=\"btn2 btn-sm btn-error btn-outline\">\n                                    <x-icon class=\"trash\" tooltip :title=\"__('generic.remove')\" />\n                                </button>\n                            </div>\n                        @endforeach\n                    </div>\n\n\n                    <div class=\"flex flex-col gap-1\">\n                        <div class=\"flex gap-1 justify-between\">\n                            <label class=\"text-xs font-semibold opacity-80\">\n                                {{ __('characters.sections.appearance') }}\n                            </label>\n\n                            <button type=\"button\" wire:click=\"addAppearance\" class=\"btn2 btn-sm btn-outline\">\n                                <x-icon class=\"plus\" /> {{ __('characters.actions.add_appearance') }}\n                            </button>\n                        </div>\n\n                        @foreach($appearances as $index => $selection)\n                            <div class=\"flex gap-2 align-items-center\">\n                                <select wire:model=\"appearances.{{ $index }}\" class=\"form-control\">\n                                    <option value=\"\"> {{ __('campaigns/import.csv.select_one') }} </option>\n                                    @foreach($headers as $value => $label)\n                                        <option value=\"{{ $value }}\">{{ $label }}</option>\n                                    @endforeach\n                                </select>\n\n\n                                <button type=\"button\"\n                                        wire:click=\"removeAppearance({{ $index }})\"\n                                        class=\"btn2 btn-sm btn-error btn-outline\">\n                                    <x-icon class=\"fa-regular fa-trash-can\" tooltip :title=\"__('generic.remove')\" />\n                                </button>\n                            </div>\n                        @endforeach\n                    </div>\n                @endif\n\n                <h2 class=\"text-xl\">{{ $tagLabel }}</h2>\n\n                <livewire:campaigns.tags\n                    :campaign=\"$campaign\"\n                    wire:model=\"tags\"\n                />\n\n                <div class=\"overflow-x-auto flex flex-col gap-4 mt-6\">\n                    @if (count($columnMap) != 0)\n                        <h2 class=\"text-2xl\">{{ __('campaigns/import.csv.preview') }}</h2>\n\n                        <table class=\"table-auto w-full border-collapse border\">\n                            <thead>\n                                <tr>\n                                    @foreach ($columnMap as $field => $columnIndex)\n                                        <th class=\"border px-2 py-1 text-left\">\n                                            {{  $this->fieldName($field) }}\n                                        </th>\n                                    @endforeach\n                                    @if (!empty($tags))\n                                        <th class=\"border px-2 py-1 text-left\">\n                                            {{  $tagLabel }}\n                                        </th>\n                                    @endif\n\n                                </tr>\n                            </thead>\n\n                            <tbody>\n                                @foreach (array_slice($preview, 1) as $row)\n                                    <tr>\n                                        @foreach ($columnMap as $field => $columnIndex)\n                                            <td class=\"border px-2 py-1\">\n                                                {{ $row[$columnIndex] ?? '' }}\n                                            </td>\n                                        @endforeach\n                                        @if (!empty($tags))\n                                            <td class=\"border px-2 py-1\">\n                                                @foreach ($tags as $tag)\n                                                    {{ $tag['label']}}\n                                                @endforeach\n                                            </td>\n                                        @endif\n                                    </tr>\n                                @endforeach\n                            </tbody>\n                        </table>\n                    @else\n                        <x-helper>\n                            <p>{{ __('campaigns/import.csv.no_preview') }}</p>\n                        </x-helper>\n                    @endif\n                </div>\n\n                <input type=\"submit\" value=\"{{ __('campaigns/import.csv.submit') }}\" class=\"btn2 btn-primary\" />\n            </div>\n        </form>\n    @endif\n</x-box>\n"
  },
  {
    "path": "resources/views/livewire/campaigns/exports-table.blade.php",
    "content": "<div>\n    <table class=\"table table-hover bg-box shadow-xs rounded-xl\">\n        <thead>\n            <tr>\n                <th wire:click=\"sortBy('status')\" style=\"cursor: pointer;\">\n                    <a href=\"#\" class=\"text-link\">\n                        @if ($sortColumn === 'status')\n                            <span>{!! $this->sortIcon() !!}</span>\n                        @endif\n                        {{ __('campaigns/plugins.fields.status') }}\n                    </a>\n                </th>\n                <th wire:click=\"sortBy('created_by')\" style=\"cursor: pointer;\">\n                    <a href=\"#\" class=\"text-link\">\n                        @if ($sortColumn === 'created_by')\n                            <span>{!! $this->sortIcon() !!}</span>\n                        @endif\n                        {{ __('campaigns.members.fields.name') }}\n                    </a>\n                </th>\n                <th wire:click=\"sortBy('created_at')\" style=\"cursor: pointer;\">\n                    <a href=\"#\" class=\"text-link\">\n                        @if ($sortColumn === 'created_at')\n                            <span>{!! $this->sortIcon() !!}</span>\n                        @endif\n                        {{ __('campaigns.invites.fields.created') }}\n                    </a>\n                </th>\n                <th>\n                    {{ __('campaigns/export.type') }}\n                </th>\n                <th>\n                    {{ __('campaigns/export.progress') }}\n                </th>\n                <th>\n                    {{ __('campaigns/export.size') }}\n                </th>\n                <th>\n                    {{ __('campaigns/export.actions.download') }}\n                </th>\n            </tr>\n        </thead>\n        <tbody wire:poll.{{$updateInterval}}s>\n            @forelse ($campaignExports as $campaignExport)\n                <tr>\n                    <td>{{ $this->status($campaignExport) }}</td>\n                    <td>\n                        @if ($campaignExport->created_by)\n                            <a class=\"block break-all truncate\" href=\"{!! route('users.profile', [$campaignExport->user]) !!}\" target=\"_blank\">\n                                {{ $campaignExport->user->name }}\n                            </a>\n                        @endif\n                    </td>\n                    <td>\n                        <x-since :date=\"$campaignExport->created_at\" />\n                    </td>\n                    <td>\n                        {!! $this->type($campaignExport) !!}\n                    </td>\n                    <td>\n                        {!! $this->progress($campaignExport) !!}\n                    </td>\n                    <td>\n                        {!! $this->size($campaignExport) !!}\n                    </td>\n                    <td>\n                        {!! $this->download($campaignExport) !!}\n                    </td>\n                </tr>\n            @empty\n                <tr>\n                    <td colspan=\"5\" class=\"text-center\">{{ __('crud.datagrid.empty') }}</td>\n                </tr>\n            @endforelse\n        </tbody>\n    </table>\n\n    <!-- Pagination -->\n    <div>\n        {{ $campaignExports->links() }}\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/livewire/campaigns/tags.blade.php",
    "content": "<div class=\"relative flex flex-col gap-1\" wire:click.away=\"$set('open', false)\">\n    <label class=\"text-xs font-semibold opacity-80\">\n        {{ __('campaigns/import.csv.selected_tags') }}\n    </label>\n    <div class=\"flex flex-wrap gap-2 \">\n        @foreach ($selected as $tag)\n            <span class=\"bg-neutral text-neutral-content px-2 py-1 rounded-2xl text-xs flex items-center gap-1\">\n                {{ $tag['label'] }}\n                <button\n                    type=\"button\"\n                    wire:click=\"remove('{{ $tag['id'] }}')\"\n                    class=\"font-bold cursor-pointer\"\n                >\n                    ✕\n                </button>\n            </span>\n        @endforeach\n    </div>\n\n    <input\n        type=\"text\"\n        wire:model.live.debounce.350ms=\"search\"\n        wire:focus=\"show\"\n        class=\"w-full border rounded px-3 py-2\"\n        placeholder=\"Search tags\"\n        autocomplete=\"off\"\n    >\n    @if ($open && count($options))\n        <ul class=\"tippy-box \">\n            @foreach ($options as $option)\n                <li\n                    wire:click=\"select('{{ $option['id'] }}', '{{ $option['label'] }}')\"\n                    class=\" px-1.5 py-1.5 hover:bg-base-200 rounded flex items-center gap-1.5 text-sm text-base-content transition-all duration-150\"\n                >\n                    {{ $option['label'] }}\n                </li>\n            @endforeach\n        </ul>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/livewire/dashboards/entity-listing.blade.php",
    "content": "\n<?php /** @var \\App\\Models\\Entity[]|\\Illuminate\\Pagination\\LengthAwarePaginator $entities */?>\n<div class=\"flex flex-col gap-2\">\n@foreach ($entities as $entity)\n    @if ($entity->entityType->isStandard() && empty($entity->entity_id))\n        @continue\n    @endif\n    <div class=\"flex items-center gap-2 justify-between\" data-entity-type=\"{{ $entity->entityType->pluralCode() }}\">\n        <div class=\"flex items-center gap-2 overflow-hidden\">\n            <a class=\"entity-picture inline-block rounded-full cover-background w-9 h-9 shrink-0\" style=\"background-image: url('{{ Avatar::entity($entity)->fallback()->size(80)->thumbnail() }}');\"\n                title=\"{{ $entity->name }}\"\n                href=\"{{ $entity->url() }}\">\n            </a>\n\n            <div class=\"break-all truncate\">\n                <x-entity-link\n                    :entity=\"$entity\"\n                    :campaign=\"$campaign\" />\n\n                @if ($entity->status?->icon)\n                    <x-icon class=\"{{ $entity->status->icon() }}\" tooltip :title=\"$entity->status->setRelation('entityType', $entity->entityType)->name()\" />\n                @endif\n                @if ($entity->is_private)\n                    <x-icon class=\"lock\" tooltip title=\"{{ __('crud.is_private') }}\" />\n                @endif\n            </div>\n        </div>\n\n        <div class=\"blame flex flex-col gap-0.5 text-xs items-end\">\n            <span class=\"author block\">\n                @if (empty($entity->updated_by) && !empty($entity->created_by))\n                    {{ \\App\\Facades\\UserCache::name($entity->created_by) }}\n                @elseif (!empty($entity->updated_by))\n                    {{ \\App\\Facades\\UserCache::name($entity->updated_by) }}\n                @else\n                    {{ __('crud.history.unknown') }}\n                @endif\n            </span>\n@can('history', [$entity, $campaign])\n            @if (!empty($entity->updated_at))\n            <span class=\"elapsed text-neutral-content text-xs\" title=\"{{ $entity->updated_at }} UTC\">\n                {{ $entity->updated_at->diffForHumans() }}\n            </span>\n            @endif\n@endcan\n        </div>\n    </div>\n@endforeach\n\n@if($hasMorePages)\n    <div class=\"text-center\">\n        <a\n            class=\"cursor-pointer\"\n            wire:click=\"loadEntities\"\n        >\n            {{ __('entities/story.actions.load_more') }}\n        </a>\n    </div>\n@endif\n\n</div>\n"
  },
  {
    "path": "resources/views/livewire/front-pagination.blade.php",
    "content": "@php\nif (! isset($scrollTo)) {\n    $scrollTo = 'body';\n}\n\n$scrollIntoViewJsSnippet = ($scrollTo !== false)\n    ? <<<JS\n       (\\$el.closest('{$scrollTo}') || document.querySelector('{$scrollTo}')).scrollIntoView()\n    JS\n    : '';\n@endphp\n\n@if ($paginator->hasPages())\n    <nav role=\"navigation\" aria-label=\"Pagination Navigation\" class=\"flex items-center justify-between mt-6\">\n        {{-- Mobile View --}}\n        <div class=\"flex justify-between flex-1 sm:hidden\">\n            {{-- Previous Button --}}\n            @if ($paginator->onFirstPage())\n                <span class=\"px-4 py-2 text-sm text-gray-400 bg-gray-100 rounded\">Previous</span>\n            @else\n                <button wire:click=\"previousPage('page')\" wire:loading.attr=\"disabled\"\n                        x-on:click=\"{{ $scrollIntoViewJsSnippet }}\"\n                        class=\"px-4 py-2 text-sm text-gray-700 bg-white border rounded hover:bg-light\">\n                    Previous\n                </button>\n            @endif\n\n            {{-- Next Button --}}\n            @if ($paginator->hasMorePages())\n                <button wire:click=\"nextPage('page')\" wire:loading.attr=\"disabled\"\n                        x-on:click=\"{{ $scrollIntoViewJsSnippet }}\"\n                        class=\"px-4 py-2 text-sm text-gray-700 bg-white border rounded hover:bg-light\">\n                    Next\n                </button>\n            @else\n                <span class=\"px-4 py-2 text-sm text-gray-400 bg-gray-100 rounded\">Next</span>\n            @endif\n        </div>\n\n        {{-- Desktop View --}}\n        <div class=\"hidden sm:flex-1 sm:flex sm:items-center sm:justify-between\">\n            <div>\n                <p class=\"text-sm text-gray-600\">\n                    Showing\n                    <span class=\"font-medium\">{{ $paginator->firstItem() }}</span>\n                    to\n                    <span class=\"font-medium\">{{ $paginator->lastItem() }}</span>\n                    of\n                    <span class=\"font-medium\">{{ $paginator->total() }}</span>\n                    results\n                </p>\n            </div>\n\n            <div>\n                <span class=\"inline-flex items-center space-x-1\">\n                    {{-- Previous --}}\n                    @if ($paginator->onFirstPage())\n                        <span class=\"px-3 py-2 text-sm text-gray-400 bg-gray-100 border rounded-l\">‹</span>\n                    @else\n                        <button wire:click=\"previousPage('page')\" wire:loading.attr=\"disabled\"\n                                x-on:click=\"{{ $scrollIntoViewJsSnippet }}\"\n                                class=\"px-3 py-2 text-sm text-gray-700 bg-white border rounded-l hover:bg-gray-100\">\n                            ‹\n                        </button>\n                    @endif\n\n                    {{-- Page Numbers --}}\n                    @foreach ($elements as $element)\n                        @if (is_string($element))\n                            <span class=\"px-3 py-2 text-sm text-gray-500 bg-white border\">{{ $element }}</span>\n                        @endif\n\n                        @if (is_array($element))\n                            @foreach ($element as $page => $url)\n                                @if ($page == $paginator->currentPage())\n                                    <span class=\"px-3 py-2 text-sm text-white bg-purple border border-blue-600\">{{ $page }}</span>\n                                @else\n                                    <button wire:click=\"gotoPage({{ $page }}, 'page')\" wire:loading.attr=\"disabled\"\n                                            x-on:click=\"{{ $scrollIntoViewJsSnippet }}\"\n                                            class=\"px-3 py-2 text-sm text-gray-700 bg-white border hover:bg-gray-100\">\n                                        {{ $page }}\n                                    </button>\n                                @endif\n                            @endforeach\n                        @endif\n                    @endforeach\n\n                    {{-- Next --}}\n                    @if ($paginator->hasMorePages())\n                        <button wire:click=\"nextPage('page')\" wire:loading.attr=\"disabled\"\n                                x-on:click=\"{{ $scrollIntoViewJsSnippet }}\"\n                                class=\"px-3 py-2 text-sm text-gray-700 bg-white border rounded-r hover:bg-gray-100\">\n                            ›\n                        </button>\n                    @else\n                        <span class=\"px-3 py-2 text-sm text-gray-400 bg-gray-100 border rounded-r\">›</span>\n                    @endif\n                </span>\n            </div>\n        </div>\n    </nav>\n@endif\n"
  },
  {
    "path": "resources/views/livewire/roadmap/form.blade.php",
    "content": "<form wire:submit=\"save\">\n    <div class=\"bg-purple text-white rounded-2xl p-5 flex flex-col gap-5\">\n        <h3>Share your ideas</h3>\n        <p class=\"text-light\">Have an idea to improve Kanka? Share it with our development team.</p>\n\n        @if ($success)\n            <div class=\"rounded bg-green-300 p-2 text-dark\">\n                Your idea has been submitted! Once approved, you will receive a notification and others will be able to upvote it.\n            </div>\n        @endif\n\n        @auth()\n            @cannot ('create', \\App\\Models\\Feature::class)\n                <p>You have reached the daily limit of 10 submitted ideas! Please try again tomorrow.</p>\n            @else\n                <div class=\"field field-name\">\n                    <label>One sentence that summarises your idea</label>\n                    <input type=\"text\" maxlength=\"80\" class=\"rounded text-dark w-full p-2 bg-white\" wire:model.blur=\"title\" />\n                    <div>\n                        @error('title') <span class=\"text-red-300\">{{ $message }}</span> @enderror\n                    </div>\n\n                    @if (isset($duplicates) && !empty($duplicates) && !$duplicates->isEmpty())\n                        <div class=\"text-orange-300\">\n                            <p>This idea might already exist. Here are some similar named ideas already being voted on.</p>\n                            <ul>\n                                @foreach ($duplicates as $dup)\n                                    <li>\n                                        <span role=\"button\" class=\"text-orange-300 hover:text-orange-500\" wire:click=\"open({{ $dup }})\">\n                                        {!! $dup->name !!}\n                                        </span>\n                                    </li>\n                                @endforeach\n                            </ul>\n                        </div>\n                    @endif\n                </div>\n\n                <div class=\"field field-description\">\n                    <label>Why your idea is useful, who should benefit and how should it work?</label>\n                    <textarea wire:model=\"description\" class=\"rounded text-dark w-full p-2 bg-white\" rows=\"5\"></textarea>\n                    <div>\n                        @error('description') <span class=\"text-red-300\">{{ $message }}</span> @enderror\n                    </div>\n                </div>\n\n                <div class=\"field field-description\">\n                    <label>An image is worth a thousand words. Show us how you think the idea should look like.</label>\n                    <input type=\"file\" wire:model=\"file\" class=\"w-full bg-white rounded text-dark p-2\" accept=\"image/*\" id=\"upload-{{ $iteration }}\">\n                    <div>\n                        @error('file') <span class=\"text-red-300\">{{ $message }}</span> @enderror\n                    </div>\n                </div>\n\n                <p class=\"text-light\">Once reviewed, your idea will show up in the ideas section. If we have questions, we'll contact you on the <a href=\"https://kanka.io/go/discord\" class=\"link link-light\">Discord</a>.</p>\n\n                <input type=\"submit\" value=\"Submit idea\" class=\"btn-round rounded-full\" />\n            @endif\n        @else\n\n            <a href=\"{{ route('login') }}\" class=\"btn-round rounded-full text-center\">Log in to submit ideas</a>\n        @endauth\n    </div>\n</form>\n"
  },
  {
    "path": "resources/views/livewire/roadmap/ideas.blade.php",
    "content": "<?php /** @var \\App\\Models\\Feature $idea **/ ?>\n<div>\n    <div class=\"flex items-center mb-5 gap-2\">\n        <input type=\"text\" wire:model.live.debounce.200ms=\"search\" class=\"block-input grow\" placeholder=\"Name of an idea\">\n    </div>\n\n    <div class=\"flex flex-col gap-5\">\n        @foreach ($ideas as $idea)\n            <div class=\"rounded-2xl overflow-hidden flex\" wire:key=\"idea-block-{{ $idea->id }}\">\n                <div class=\"flex-none w-40 py-5 bg-purple text-white\">\n                    <div class=\"flex gap-2 align-center items-center justify-center text-md\">\n                        @livewire('roadmap.upvote', ['feature' => $idea], key(\"idea-{$idea->id}\"))\n                    </div>\n                </div>\n                <div class=\"bg-gray-200 p-5 grow flex flex-col gap-5 cursor-pointer hover:bg-light transition-all duration-300\" wire:click=\"open({{ $idea }})\">\n                    <h2 class=\"text-md\">{{ $idea->name }}</h2>\n                    {!! $idea->cleanDescription() !!}\n                </div>\n            </div>\n        @endforeach\n\n        {{ $ideas->links('livewire.front-pagination', data: ['scrollTo' => '#ideas']) }}\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/livewire/roadmap/upvote.blade.php",
    "content": "<div class=\"flex gap-2 align-center items-center justify-center @if ($col) flex-col @endif text-center\">\n    <div wire:click=\"upvote\" class=\"hover:text-red-300 cursor-pointer\">\n        @if (auth()->check())\n            @if ($feature->uservote)\n                <i class=\"fa-solid fa-heart text-red-300\" aria-hidden=\"true\"></i>\n            @else\n                <i class=\"fa-regular fa-heart\" aria-hidden=\"true\"></i>\n            @endif\n        @else\n            <i class=\"fa-regular fa-heart\" aria-hidden=\"true\"></i>\n        @endif\n        {{ \\Illuminate\\Support\\Number::format($count) }}\n    </div>\n\n    @if ($isGuest)\n        <a href=\"{{ route('login') }}\" class=\"link-light\">Log in to upvote</a>\n    @elseif ($isUnsubbed)\n        <a href=\"{{ route('settings.subscription') }}\" class=\"link-light\">Subscribe to upvote</a>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/livewire/roadmap.blade.php",
    "content": "<div>\n    <div class=\"flex items-center mb-5\">\n        <span role=\"button\" wire:click=\"inProgress()\" class=\"px-2 border-b border-blue-900 hover:font-bold hover:border-b-2 @if (!isset($status) || $status === 'in-progress') font-bold border-b-2 @endif\">\n            In progress\n        </span>\n        <span role=\"button\" wire:click=\"ideas()\" class=\"px-2 border-b border-blue-900 hover:font-bold hover:border-b-2 @if (isset($status) && $status === 'ideas') font-bold border-b-2 @endif\">\n            Ideas\n        </span>\n        <span role=\"button\" wire:click=\"done()\" class=\"px-2 border-b border-blue-900 hover:font-bold hover:border-b-2 @if (isset($status) && $status === 'done') font-bold border-b-2 @endif\">\n            Done\n        </span>\n    </div>\n    @if (!isset($status) || $status === 'in-progress')\n    <div id=\"in-progress\">\n        <div class=\"flex flex-col gap-10\">\n            @php /** @var \\App\\Models\\FeatureCategory $category **/ @endphp\n            @foreach ($categories as $category)\n                @if ($category->nothingPlanned())\n                    @continue\n                @endif\n                <div class=\"rounded-2xl bg-gray-200 overflow-hidden\">\n                    <h3 class=\"bg-purple text-white p-5\">{{ $category->name }}</h3>\n                    <div class=\"p-5 grid grid-cols-1 xl:grid-cols-4 gap-5\">\n                        <div class=\"border-r xl:col-span-2\">\n                            <h4 class=\"mb-5\">Now</h4>\n                            <div class=\"grid xl:grid-cols-2 gap-5\">\n                                @foreach ($category->now as $feat)\n                                    @include('roadmap.feature._progress', ['feature' => $feat])\n                                @endforeach\n                            </div>\n                        </div>\n                        <div class=\"border-r\">\n                            <h4 class=\"mb-5\">Next</h4>\n                            <div class=\"flex flex-col gap-5\">\n                                @foreach ($category->next as $feat)\n                                    @include('roadmap.feature._progress', ['feature' => $feat])\n                                @endforeach\n                            </div>\n                        </div>\n                        <div class=\"\">\n                            <h4 class=\"mb-5\">Later</h4>\n                            <div class=\"flex flex-col gap-5\">\n                                @foreach ($category->later as $feat)\n                                    @include('roadmap.feature._progress', ['feature' => $feat])\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            @endforeach\n        </div>\n    </div>\n    @elseif ($status === 'ideas')\n    <div id=\"ideas\">\n        <div class=\"grid xl:grid-cols-4 gap-5\">\n            <div class=\"xl:col-span-3 flex flex-col gap-5\">\n                @livewire('roadmap.ideas')\n            </div>\n\n            @livewire('roadmap.form')\n\n        </div>\n    </div>\n    @elseif ($status === 'done')\n        <div id=\"done\">\n            <div class=\"flex flex-col gap-10\">\n                @php /** @var \\App\\Models\\FeatureCategory $category **/ @endphp\n                @foreach ($categories as $category)\n                    @if ($category->nothingDone())\n                        @continue\n                    @endif\n                    <div class=\"rounded-2xl bg-gray-200 overflow-hidden\">\n                        <h3 class=\"bg-purple text-white p-5\">{{ $category->name }}</h3>\n                        <div class=\"p-5 grid grid-cols-1 xl:grid-cols-4 gap-5\">\n                            <div class=\"border-r xl:col-span-4\">\n                                <div class=\"grid xl:grid-cols-4 gap-5\">\n                                    @foreach ($category->done as $feat)\n                                        @include('roadmap.feature._progress', ['feature' => $feat])\n                                    @endforeach\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                @endforeach\n            </div>\n        </div>\n\n    @endif\n\n\n    @script\n    <script>\n        const openIdea = (url) => {\n            window.openDialog('feature-dialog', url);\n        };\n\n        @if ($feature)\n        //console.log('opening idea');\n        openIdea('{{ route('roadmap.feature.show', $feature) }}');\n        @endif\n\n        Livewire.on('open-idea-dialog', (data) => {\n            //console.log('opening', data.url);\n            openIdea(data.url);\n        });\n\n        const target = document.getElementById('feature-dialog');\n        target.addEventListener('close', function (event) {\n            $wire.dispatch('idea-closed');\n        });\n    </script>\n    @endscript\n</div>\n"
  },
  {
    "path": "resources/views/livewire/users/otp.blade.php",
    "content": "<div>\n<x-box class=\"mb-12 rounded-2xl\">\n    <x-slot name=\"title\">\n        {{ __('settings.account.2fa.title') }}\n    </x-slot>\n\n    @if (session()->has('disable-success'))\n        <span class=\"text-green-600\">\n            {{ session('disable-success') }}\n        </span>\n    @endif\n\n    @if ($user->passwordSecurity?->google2fa_enable)\n        <p class=\"hep-block\">{{ __('settings.account.2fa.enabled') }}</p>\n\n        <div class=\"text-right\">\n            <button wire:click=\"disable2fa\" class=\"btn2 btn-error\"> @if ($clickedBefore) {{ __('settings.account.2fa.actions.disable-confirm') }} @else {{ __('settings.account.2fa.actions.disable') }} @endif  </button>\n        </div>\n    @else\n        @if(auth()->user()->isSocialLogin())\n                <p>{{ __('settings.account.2fa.social') }}</p>\n        @elseif(empty($user->passwordSecurity))\n                <p>\n                    {{ __('settings.account.2fa.helper') }} <a href=\"https://docs.kanka.io/en/latest/account/security/two-factor-authentication.html\" class=\"text-link\">{{ __('settings.account.2fa.learn_more') }}</a>\n                </p>\n\n                <p>{!! __('settings.account.2fa.enable_instructions', [\n                    'android' => '<a target=\"_blank\" href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\">Android</a>',\n                    'ios' => '<a target=\"_blank\" href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\">iOS</a>',\n                ]) !!}</p>\n\n                <div class=\"text-right\">\n                    <button wire:click=\"generate2faSecretCode\" class=\"btn2 btn-primary\"> {{ __('settings.account.2fa.generate_qr') }} </button>\n                </div>\n        @elseif(!$user->passwordSecurity->google2fa_enable)\n                <div>\n                    <x-grid type=\"1/1\">\n                        <p>{{ __('settings.account.2fa.activation_helper') }}</p>\n\n                        <x-forms.field field=\"qr-code\" required :label=\"__('settings.account.2fa.fields.qrcode')\">\n                            {!! $user->passwordSecurity->getGoogleQR() !!}\n                        </x-forms.field>\n                    </x-grid>\n                    <div class=\"flex flex-wrap gap-2 justify-between items-end\">\n                        <div class=\"field field-name\">\n                            <label>{{__('settings.account.2fa.fields.otp')}}</label>\n\n                            <input type=\"password\" wire:model=\"otp\" name=\"otp\" maxlength=\"12\" class=\"input rounded text-dark  w-full p-2\" />\n                            <div>\n                                @error('otp') <span class=\"text-error-content\">{{ $message }}</span> @enderror\n                            </div>\n                            @if (session()->has('otp-error'))\n                                <span class=\"text-error-content\">\n                                    {{ session('otp-error') }}\n                                </span>\n                            @endif\n                        </div>\n                        <div class=\"text-right\">\n                            <button wire:click=\"enable2fa\" class=\"btn2 btn-primary\"> {{ __('settings.account.2fa.actions.finish') }} </button>\n                        </div>\n                    </div>\n                </div>\n       @endif\n  @endif\n</x-box>\n</div>\n\n"
  },
  {
    "path": "resources/views/livewire/widgets/gallery-carousel.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n * @var array $images\n * @var bool $showName\n * @var bool $readyToLoad\n */\n?>\n<div wire:init=\"loadImages\">\n    @if (!$readyToLoad)\n        <x-icon class=\"loading\"></x-icon>\n    @elseif (count($images) > 0)\n        <x-box padding=\"0\" class=\"widget-gallery {{ $widget->customClass($campaign) }}\" id=\"dashboard-widget-{{ $widget->id }}\">\n            <div\n                x-data=\"{\n                    current: 0,\n                    total: {{ count($images) }},\n                    images: @js($images),\n                    timer: null,\n                    next() { this.current = (this.current + 1) % this.total },\n                    prev() { this.current = (this.current - 1 + this.total) % this.total },\n                    startTimer() { this.timer = setInterval(() => this.next(), 5000) },\n                    resetTimer() { clearInterval(this.timer); this.startTimer() },\n                    init() { if (this.total > 1) this.startTimer() }\n                }\"\n                @mouseenter=\"clearInterval(timer)\"\n                @mouseleave=\"resetTimer()\"\n                class=\"relative overflow-hidden rounded-lg aspect-4/3\"\n            >\n                <template x-for=\"(image, index) in images\" :key=\"index\">\n                    <a :href=\"image.full\" target=\"_blank\"\n                       class=\"absolute inset-0 transition-opacity duration-300\"\n                       :class=\"current === index ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n                    >\n                        <img :src=\"image.url\" :alt=\"image.name || ''\" class=\"w-full h-full object-cover\" loading=\"lazy\" />\n                    </a>\n                </template>\n\n                @if (count($images) > 1)\n                    <button\n                        @click=\"prev(); resetTimer()\"\n                        class=\"absolute left-2 top-1/2 -translate-y-1/2 z-10 bg-base-100/70 hover:bg-base-100 rounded-full w-8 h-8 flex items-center justify-center transition-colors\"\n                        type=\"button\"\n                    >\n                        <x-icon class=\"fa-solid fa-chevron-left\" />\n                    </button>\n\n                    <button\n                        @click=\"next(); resetTimer()\"\n                        class=\"absolute right-2 top-1/2 -translate-y-1/2 z-10 bg-base-100/70 hover:bg-base-100 rounded-full w-8 h-8 flex items-center justify-center transition-colors\"\n                        type=\"button\"\n                    >\n                        <x-icon class=\"fa-solid fa-chevron-right\" />\n                    </button>\n\n                    <div class=\"absolute bottom-2 left-1/2 -translate-x-1/2 z-10 flex gap-1\">\n                        <template x-for=\"(_, index) in images\" :key=\"'dot-'+index\">\n                            <button\n                                @click=\"current = index\"\n                                :class=\"current === index ? 'bg-primary' : 'bg-base-100/70'\"\n                                class=\"w-2 h-2 rounded-full transition-colors\"\n                                type=\"button\"\n                            ></button>\n                        </template>\n                    </div>\n                @endif\n\n                @if ($showName)\n                    <div class=\"absolute bottom-0 left-0 right-0 z-10 bg-gradient-to-t from-black/60 to-transparent p-3 pt-8\" x-show=\"images[current]?.name\">\n                        <p class=\"text-white text-sm\" x-text=\"images[current]?.name\"></p>\n                    </div>\n                @endif\n            </div>\n        </x-box>\n    @else\n        <x-box class=\"widget-gallery {{ $widget->customClass($campaign) }}\" id=\"dashboard-widget-{{ $widget->id }}\">\n            <p class=\"text-neutral-content text-center\">{{ __('Nothing to show') }}</p>\n        </x-box>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/livewire/widgets/random-entity.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignDashboardWidget $widget\n */\n?>\n<div wire:init=\"loadEntity\">\n    @if (!$readyToLoad)\n        <x-icon class=\"loading\"></x-icon>\n    @elseif ($entity)\n        <x-box padding=\"0\" class=\"widget-random {{ $widget->customClass($campaign) }}\" id=\"dashboard-widget-{{ $widget->id }}\">\n            @if(view()->exists($specificPreview))\n                @include($specificPreview, ['entity' => $entity, 'customName' => $customName])\n            @else\n                <x-widgets.previews.head :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\" />\n                <x-widgets.previews.body :widget=\"$widget\" :campaign=\"$campaign\" :entity=\"$entity\" />\n            @endif\n        </x-box>\n    @else\n        <p>{{ __('Nothing to show') }}</p>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/locations/characters.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' ' . \\App\\Facades\\Module::plural(config('entities.ids.character'), __('entities.characters')),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        <a href=\"#\" class=\"btn2 btn-sm\" data-toggle=\"dialog\" data-target=\"help-modal\">\n            <x-icon class=\"question\" />\n            <span class=\"hidden lg:inline\">{{ __('crud.actions.help') }}</span>\n        </a>\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('locations.characters', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->allCharacters()->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('locations.characters', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$model->allCharacters(true)->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'characters',\n        'view' => 'locations.panels.characters',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/locations/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n\n    @include('cruds.fields.title')\n\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Location::class, 'trans' => 'locations'])\n\n    @include('cruds.fields.parent')\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/locations/locations.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'mainTitle' => false,\n])\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('locations.locations', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('locations.locations', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'locations',\n        'view' => 'locations.panels.locations',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/locations/panels/characters.blade.php",
    "content": "@isset($init)\n    @php\n        $routeOptions = [\n            $campaign,\n            'location' => $entity->child,\n            'init' => 1\n        ];\n        $routeOptions = Datagrid::initOptions($routeOptions);\n        $datagridOptions =\n            ['datagridUrl' => route('locations.characters', $routeOptions)]\n        ;\n    @endphp\n@endif\n\n<div id=\"location-characters\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', $datagridOptions ?? [])\n    </div>\n</div>\n\n@section('modals')\n    @parent\n\n    @include('partials.helper-modal', [\n        'id' => 'help-modal',\n        'title' => __('crud.actions.help'),\n        'textes' => [\n            __('locations.helpers.characters')\n        ]\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/locations/panels/events.blade.php",
    "content": "@isset($init)\n    @php\n        $routeOptions = [\n            $campaign,\n            'location' => $entity->child,\n            'init' => 1\n        ];\n        $routeOptions = Datagrid::initOptions($routeOptions);\n        $datagridOptions =\n            ['datagridUrl' => route('locations.events', $routeOptions)]\n        ;\n    @endphp\n@endif\n<div id=\"location-events\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', $datagridOptions ?? null)\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/locations/panels/locations.blade.php",
    "content": "<div id=\"location-locations\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/locations/panels/quests.blade.php",
    "content": "@isset($init)\n    @php\n        $routeOptions = [\n            $campaign,\n            'location' => $entity->child,\n            'init' => 1\n        ];\n        $routeOptions = Datagrid::initOptions($routeOptions);\n        $datagridOptions =\n            ['datagridUrl' => route('locations.quests', $routeOptions)]\n        ;\n    @endphp\n@endif\n<div id=\"location-quests\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', $datagridOptions ?? [])\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/maps/_explore-link.blade.php",
    "content": "@php\n /** @var \\App\\Models\\Map $map */\nif (!$map->explorable()) {\n    return '';\n}\nif ($map->isChunked()) {\n    if ($map->chunkingError()) {\n        return '<i class=\"fa-regular fa-exclamation-triangle\" data-toggle=\"tooltip\" data-title=\"' .\n            __('maps.errors.chunking.error', ['discord' => 'Discord']) . '\"></i>';\n    } elseif ($map->chunkingRunning()) {\n        return '<i class=\"fa-solid fa-spin fa-spinner\" data-toggle=\"tooltip\" data-title=\"' .\n        __('maps.tooltips.chunking.running') . '\"></i>';\n    }\n}\n@endphp\n<a href=\"{{ route('maps.explore', [$campaign, $map->id]) }}\" target=\"_blank\"\n   data-toggle=\"tooltip\" data-title=\"{{ __('maps.actions.explore') }}\" class=\"text-link\">\n    <x-icon class=\"map\" />\n</a>\n"
  },
  {
    "path": "resources/views/maps/_marker.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\MapMarker $marker\n */\n?>\n<div class=\"marker\" style=\"\">\n\n</div>\n"
  },
  {
    "path": "resources/views/maps/_preview.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n*/\n?>\n\n@section('content')\n\n    <div class=\"map map-preview\" id=\"map{{ $map->id }}\" style=\"width: 100%; height: 100%;\">\n        <a href=\"{{ route('maps.explore', [$campaign, $map]) }}\" target=\"_blank\" class=\"btn2 btn-primary btn-xs btn-map-explore z-820 absolute bottom-3 right-3\">\n            <x-icon class=\"map\" />\n            {{ __('maps.actions.explore') }}\n        </a>\n    </div>\n\n@endsection\n@section('scripts')\n    @parent\n    <script type=\"text/javascript\">\n        var labelShapeIcon = new L.Icon({\n            iconUrl: '/images/transparent.png',\n            iconSize: [150, 35],\n            iconAnchor: [75, 15],\n            popupAnchor: [0, -20],\n        });\n\n        var markers = [];\n        @foreach ($map->markers as $marker)\n            @if(!$marker->visible())\n                @continue\n            @endif\n            var marker{{ $marker->id }} = {!! $marker->multiplier($map->is_real)->marker() !!};\n            markers.push('marker' + {{ $marker->id }});\n        @endforeach\n    </script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.layerstree.js\"></script>\n    @include('maps._setup')\n\n    <script type=\"text/javascript\">\n        window.exploreEditMode = false;\n        window.drawingPolygon = false;\n        window.map = map{{ $map->id }};\n\n        /** Add markers outside a group directly to the page **/\n        @foreach ($map->markers as $marker)\n            @if (!$marker->visible())\n                @continue\n            @endif\n            @if ($marker->visible() && empty($marker->group_id))\n                @if ($map->isClustered())\n                    clusterMarkers{{ $map->id }}.addLayer(marker{{ $marker->id }});\n                @else\n                    marker{{ $marker->id }}.addTo(map{{ $map->id }});\n                @endif\n            @elseif (!empty($marker->group_id))\n                marker{{ $marker->id }}.addTo(group{{ $marker->group_id }})\n            @endif\n        @endforeach\n\n        @if ($map->isClustered())\n            map{{ $map->id }}.addLayer(clusterMarkers{{ $map->id }});\n\n            /** Add the groups to the cluster **/\n            clusterMarkers{{ $map->id }}.checkIn({{ $map->checkinGroups() }});\n\n            /** Add the groups to the map **/\n            @foreach ($map->groups as $group)\n                @if (!$group->is_shown)\n                    @continue\n                @endif\n                group{{ $group->id }}.addTo(map{{ $map->id }});\n            @endforeach\n        @endif\n\n        @foreach ($map->markers as $marker)\n            @if(!$marker->visible())\n                @continue\n            @endif\n            @if (empty($marker->group_id))\n                marker{{ $marker->id }}.addTo(map{{ $map->id }});\n            @endif\n        @endforeach\n    </script>\n@endsection\n\n\n\n@section('styles')\n    @parent\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.layerstree.css\"/>\n    <style>\n        @foreach ($map->markers as $marker)\n            @if(!$marker->visible())\n                @continue\n            @endif\n            .marker-{{ $marker->id }}  {\n                @if(!empty($marker->font_colour))\n                    color: {{ $marker->font_colour }};\n                @endif\n            }\n\n            @if ($marker->entity && $marker->icon == 4)\n                .marker-{{ $marker->id }} .marker-pin::after {\n                    background-image: url('{{ \\App\\Facades\\Avatar::entity($marker->entity)->fallback()->size(276)->thumbnail() }}');\n                    @if(!empty($marker->pin_size))\n                        width: {{ $marker->pinSize(false) - 4 }}px;\n                        height: {{ $marker->pinSize(false) - 4 }}px;\n                        margin: 2px 0 0 -{{ ceil(($marker->pinSize(false)-4)/2) }}px;\n                    @endif\n                }\n            @endif\n\n            @if(!empty($marker->pin_size))\n                .marker-{{ $marker->id }} .marker-pin {\n                    width: {{ $marker->pinSize() }};\n                    height: {{ $marker->pinSize() }};\n                    margin: -{{ $marker->pinSize(false) / 2 }}px 0 0 -{{ $marker->pinSize(false) / 2 }}px;\n                }\n                .marker-{{ $marker->id }} i {\n                    font-size: {{ $marker->pinSize(false) / 2 }}px;\n                }\n            @endif\n        @endforeach\n    </style>\n@endsection"
  },
  {
    "path": "resources/views/maps/_setup.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Map $map\n */\n$focus = $map->centerFocus();\n\nif (isset($single) && $single) {\n    $focus = \"$model->latitude, $model->longitude\";\n} elseif (request()->has('lat') && request()->has('lng')) {\n    $focus = ((float) request()->get('lat')) . ', ' . ((float) request()->get('lng'));\n} elseif (request()->has('focus')) {\n    /** @var \\App\\Models\\MapMarker $pin */\n    $pin = $map->markers->where('id', request()->get('focus', 0))->first();\n    if ($pin) {\n        $focus = \"$pin->latitude, $pin->longitude\";\n    }\n}\n?>\n<script type=\"text/javascript\">\n    /** Kanka map {{ $map->id }} setup **/\n    var bounds{{ $map->id }} = {{ $map->bounds() }};\n    var maxBounds{{ $map->id }} = {{ $map->bounds(true) }};\n    @if ($map->isReal())\n    var baseLayer{{ $map->id }} = L.imageOverlay('', bounds{{ $map->id }});\n    @else\n    var baseLayer{{ $map->id }} = L.imageOverlay('{{ \\App\\Facades\\Avatar::entity($map->entity)->original() }}', bounds{{ $map->id }});\n    @endif\n\n    /** Layers Init **/\n@foreach ($map->layers as $layer)\n    @if (!$layer->hasImage())\n        @continue\n    @endif\n    @if ($layer->image)\n        var layer{{ $layer->id }} = L.imageOverlay('{{ $layer->image->url() }}', bounds{{ $map->id }});\n    @else\n        var layer{{ $layer->id }} = L.imageOverlay('{{ Storage::url($layer->image_path) }}', bounds{{ $map->id }});\n    @endif\n@endforeach\n\n    var baseMaps{{ $map->id }} = [\n@foreach ($map->layers->where('type_id', '<', 1)->sortBy('position') as $layer)\n@if (!$layer->hasImage()) @continue @endif\n        {\n        label: '{{ $layer->name }}',\n        layer: layer{{ $layer->id }},\n        },\n@endforeach\n        {\n        label: \"{{ __('maps/layers.base') }}\",\n        layer: baseLayer{{ $map->id }},\n        },\n    ];\n\n@if(!isset($single) || !$single)\n    /** Groups Init **/\n@foreach($map->groups()->with('children')->get() as $group)\n    @if ($map->isClustered())\n    var group{{ $group->id }} = L.layerGroup(/**[{{ $group->markerGroupHtml() }}]**/);\n    @else\n    var group{{ $group->id }} = L.layerGroup([{{ $group->markerGroupHtml() }}]);\n    @endif\n@endforeach\n\n    var overlayMaps{{ $map->id }} = {\n        label: \"{{ __('maps.panels.groups') }}\",\n        selectAllCheckbox: 'True',\n        children: [\n@foreach($map->layers->where('type_id', '>', 0)->sortBy('position') as $layer)\n@if (!$layer->hasImage()) @continue @endif\n    {\n       label: \"{{ $layer->name }} ({{ $layer->position }})\",\n       layer: layer{{ $layer->id }},\n    },\n@endforeach\n            /** Map Group Tree **/\n            {!! $map->buildGroupTree() !!}\n        ],\n    }\n@else\n    var overlayMaps{{ $map->id }} = {};\n@endif\n    @if (!$map->isReal() && !$map->isChunked())\n\n    var map{{ $map->id }} = L.map('map{{ $map->id }}', {\n        crs: L.CRS.Simple,\n        center: [ {{ $focus }} ],\n        noWrap: true,\n        maxBounds: maxBounds{{ $map->id }},\n        maxBoundsViscosity: 0.5,\n        dragging: true,\n        tap: false,\n        attributionControl: false,\n        zoom: {{ $map->initialZoom() }},\n        zoomSnap: 0.25,\n        minZoom: {{ $map->minZoom() }},\n        maxZoom: {{ $map->maxZoom() }},\n        layers: [{{ $map->activeLayers(!isset($single)) }}],\n        @if (isset($editable) && $editable)\n        editable: true,\n        @endif\n    });\n\n    L.control.layers.tree(baseMaps{{ $map->id }}, overlayMaps{{ $map->id }}).addTo(map{{ $map->id }});\n    @else\n\n    var map{{ $map->id }} = L.map('map{{ $map->id }}', {\n        @if ($map->isChunked())\n        crs: L.CRS.Simple,\n        maxBounds: maxBounds{{ $map->id }},\n        maxBoundsViscosity: 0.5,\n        @endif\n        noWrap: true,\n        dragging: true,\n        tap: false,\n        attributionControl: false,\n        minZoom: {{ $map->minZoom() }},\n        maxZoom: {{ $map->maxZoom() }},\n        @if (isset($editable) && $editable)\n        editable: true,\n        @endif\n    }).setView([ {{ $focus }} ], {{ $map->initialZoom() }});\n\n    @if ($map->isReal())\n    L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {\n        attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n    }).addTo(map{{ $map->id }});\n    @else\n    L.tileLayer('{{ route('maps.chunks', [$campaign, $map->id]) }}/?z={z}&x={x}&y={y}', {\n        attribution: '&copy; Kanka',\n    }).addTo(map{{ $map->id }});\n    @endif\n\n    L.control.layers.tree(null, overlayMaps{{ $map->id }}).addTo(map{{ $map->id }});\n\n    @endif\n\n    @if ($map->isClustered())\n    // This is where we group markers into cluster groups\n    var clusterMarkers{{ $map->id }} = L.markerClusterGroup.layerSupport({ chunkedLoading: true });\n    @endif\n</script>\n"
  },
  {
    "path": "resources/views/maps/_ticker.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Map $map\n * @var \\App\\Models\\MapMarker $marker\n */\n?>\n"
  },
  {
    "path": "resources/views/maps/bulk/modals/_copy_to_campaign.blade.php",
    "content": "<x-forms.field field=\"copy-elements\" :label=\"__('maps/markers.fields.copy_elements')\">\n    <x-checkbox :text=\"__('maps/markers.helpers.copy_elements_to_campaign')\">\n        <input type=\"checkbox\" name=\"copy_elements\" value=\"1\" @if (old('copy_elements', true)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/maps/explore/legend.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Map $map\n * @var \\App\\Models\\MapMarker $marker\n */\n?>\n<h4 class=\"text-sidebar-content flex gap-2 items-center text-lg\">\n    <span class=\"\">{{ __('maps.panels.legend') }}</span>\n    <button class=\"btn2 btn-xs btn-ghost\" data-animate=\"collapse\" data-target=\".map-legend-group-markers\" data-toggle=\"tooltip\" data-title=\"{{ __('maps/explore.toggle') }}\">\n        <x-icon class=\"fa-regular fa-folder-tree\" />\n    </button>\n</h4>\n<ul>\n    @foreach ($map->legendMarkers(false) as $marker)\n        <li>\n            @if(isset($marker['markers']))\n                <a href=\"#\" class=\"map-legend-group\" data-animate=\"collapse\" data-target=\".map-legend-group-{{ $marker['id'] }}\">\n                    <span class=\"map-legend-group-{{ $marker['id'] }}\"><x-icon class=\"fa-regular fa-folder-open\" /></span>\n                    <span class=\"hidden map-legend-group-{{ $marker['id'] }}\"><x-icon class=\"fa-regular fa-folder\" /></span>\n                    {!! $marker['name'] !!}\n                </a>\n\n                <ul class=\"overflow-hidden map-legend-group-markers map-legend-group-{{ $marker['id'] }}\" >\n                    @foreach ($marker['markers'] as $mk)\n                        <li>\n                            <a href=\"#\" class=\"map-legend-marker\" data-lng=\"{{ $mk['longitude'] }}\" data-lat=\"{{ $mk['latitude'] }}\" data-id=\"marker{{ $mk['id'] }}\">\n                                {!! $mk['name'] !!}\n                                @if (\\Illuminate\\Support\\Arr::has($marker, 'visibility')) {!! $marker['visibility'] !!}@endif\n                            </a>\n                        </li>\n                    @endforeach\n                </ul>\n            @else\n                <a href=\"#\" class=\"map-legend-marker \" data-lng=\"{{ $marker['longitude'] }}\" data-lat=\"{{ $marker['latitude'] }}\" data-id=\"marker{{ $marker['id'] }}\">\n                    {!! stripcslashes($marker['name']) !!}\n                    @includeWhen(\\Illuminate\\Support\\Arr::has($marker, 'visibility'), 'icons.visibility', ['icon' => $marker['visibility']])\n                </a>\n            @endif\n        </li>\n    @endforeach\n</ul>\n\n"
  },
  {
    "path": "resources/views/maps/explore.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n*/\n?>\n\n@extends('layouts.map', [\n    'title' => $map->name,\n    'map' => $map,\n])\n\n@section('content')\n    @can('update', $map->entity)\n        <div class=\"map-actions absolute bottom-0 right-0 m-2\">\n            <button class=\"btn2 btn-mode-enable\">\n                <x-icon class=\"plus\" />\n                {{ __('maps/explore.actions.enter-edit-mode') }}\n            </button>\n            <button class=\"btn2 btn-default btn-mode-disable\">\n                <x-icon class=\"fa-regular fa-ban\" />\n                {{ __('maps/explore.actions.exit-edit-mode') }}\n            </button>\n            <button class=\"btn2 btn-mode-drawing\">\n                <x-icon class=\"pencil\" />\n                {{ __('maps/explore.actions.finish-drawing') }}\n            </button>\n        </div>\n    @endif\n    <div class=\"map map-explore\" id=\"map{{ $map->id }}\" style=\"width: 100%; height: 100%;\">\n\n    </div>\n\n    <input type=\"hidden\" id=\"ticker-config\" data-timeout=\"20000\" data-url=\"{{ route('maps.ticker', [$campaign, $map]) }}\" data-ts=\"{{ \\Carbon\\Carbon::now() }}\" />\n@endsection\n\n@section('scripts')\n    @parent\n    <script type=\"text/javascript\">\n        var labelShapeIcon = new L.Icon({\n            iconUrl: '/images/transparent.png',\n            iconSize: [150, 35],\n            iconAnchor: [75, 15],\n            popupAnchor: [0, -20],\n        });\n\n        var markers = [];\n        @foreach ($map->markers as $marker)\n            @if (!$marker->visible())\n                @continue\n            @endif\n\n        /** Marker{{ $marker->id }} **/\n        var marker{{ $marker->id }} = {!! $marker->exploring()->multiplier($map->is_real)->marker() !!};\n            markers.push('marker' + {{ $marker->id }});\n        @endforeach\n\n    </script>\n\n    @include('maps._setup', ['editable' => true])\n\n    <script type=\"text/javascript\">\n        window.exploreEditMode = false;\n        window.drawingPolygon = false;\n        window.map = map{{ $map->id }};\n        /** Add markers outside of a group directly to the page **/\n        @foreach ($map->markers as $marker)\n            @if (!$marker->visible())\n                @continue\n            @endif\n            @if(empty($marker->group_id))\n                @if ($map->isClustered())\n                clusterMarkers{{ $map->id }}.addLayer(marker{{ $marker->id }});\n                @else\n                marker{{ $marker->id }}.addTo(map{{ $map->id }});\n                @endif\n            @elseif (!empty($marker->group_id))\n                  marker{{ $marker->id }}.addTo(group{{ $marker->group_id }})\n            @endif\n        @endforeach\n\n    @if ($map->hasDistanceUnit())\n    var rulerOptions = {\n        lengthUnit: {\n            factor: {{ $map->config['distance_measure'] }},\n            display: '{{ $map->config['distance_name'] ?? 'Km' }}',\n            decimal: 2\n        },\n    };\n    L.control.ruler(rulerOptions).addTo(window.map);\n    @endif\n\n    @if ($map->isClustered())\n        map{{ $map->id }}.addLayer(clusterMarkers{{ $map->id }});\n\n        /** Add the groups to the cluster **/\n        clusterMarkers{{ $map->id }}.checkIn({{ $map->checkinGroups() }});\n\n        /** Add the groups to the map **/\n        @foreach ($map->groups as $group)\n            @if (!$group->is_shown) @continue @endif\n            group{{ $group->id }}.addTo(map{{ $map->id }});\n        @endforeach\n   @endif\n\n        @can('update', $map->entity)\n        map{{ $map->id }}.on('click', function(ev) {\n            window.handleExploreMapClick(ev);\n        });\n    @endcan\n    </script>\n    <script type=\"text/javascript\">\n        @if (!empty($map->grid))\n            // Leaflet grid\n            @foreach ($map->grids() as $id => $line)\n                var polyline{{ $id }} = L.polyline([[{{ $line[0] }}, {{ $line[1] }}],[{{ $line[2] }},\n                {{ $line[3] }}]], {color: 'grey', opacity: 0.5}).addTo(map{{ $map->id }});\n            @endforeach\n        @endif\n    </script>\n@endsection\n\n\n@section('styles')\n    @parent\n\n    <style>\n@foreach ($map->markers as $marker)\n    @if ($marker->visible())\n\n        .marker-{{ $marker->id }} {\n            @if (!empty($marker->font_colour))\n                color: {{ $marker->font_colour }};\n            @endif\n        }\n\n        .marker-{{ $marker->id }} .marker-pin::after {\n            @if (!empty($marker->entity_id) && $marker->entity && $marker->icon == 4)background-image: url('{{ \\App\\Facades\\Avatar::entity($marker->entity)->fallback()->size(276)->thumbnail() }}');\n\n                @if (!empty($marker->pin_size))\n                    width: {{ $marker->pinSize(false) - 4 }}px;\n                    height: {{ $marker->pinSize(false) - 4 }}px;\n                    margin: 2px 0 0 -{{ ceil(($marker->pinSize(false) - 4) / 2) }}px;\n                @endif\n\n            @endif\n        }\n\n    @endif\n\n    @if (!empty($marker->pin_size)).marker-{{ $marker->id }} .marker-pin {\n            width: {{ $marker->pinSize() }};\n            height: {{ $marker->pinSize() }};\n            margin: -{{ $marker->pinSize(false) / 2 }}px 0 0 -{{ $marker->pinSize(false) / 2 }}px;\n        }\n\n        .marker-{{ $marker->id }} i {\n            font-size: {{ $marker->pinSize(false) / 2 }}px;\n        }\n    @endif\n@endforeach\n    </style>\n@endsection\n\n@section('modals')\n    <x-dialog id=\"map-marker-modal\" loading full></x-dialog>\n\n    @can('update', $map->entity)\n    <x-form :action=\"['maps.map_markers.store', $campaign, $map]\" id=\"map-marker-form\">\n    <x-dialog\n        id=\"marker-modal\"\n        :title=\"__('maps/markers.create.title', ['name' => $map->name])\"\n        footer=\"maps.markers._new-footer\">\n        @include('partials.errors')\n        @include('maps.markers._form', ['model' => null, 'map' => $map, 'activeTab' => 1, 'dropdownParent' => '#marker-modal', 'from' => 'explore'])\n    </x-dialog>\n    </x-form>\n@endcan\n@endsection\n"
  },
  {
    "path": "resources/views/maps/form/_copy.blade.php",
    "content": "<x-forms.field field=\"copy-elements\" :label=\"__('maps/markers.fields.copy_elements')\">\n    <x-checkbox :text=\"__('maps/markers.helpers.copy_elements')\">\n        <input type=\"checkbox\" name=\"copy_elements\" value=\"1\" @if (old('copy_elements', true)) checked=\"checked\" @endif />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/maps/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Map::class, 'trans' => 'maps'])\n\n    @include('cruds.fields.parent')\n\n    @include('cruds.fields.location')\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image', ['size' => 'map'])\n</x-grid>\n"
  },
  {
    "path": "resources/views/maps/form/_groups_max.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/groups.create.title', ['name' => $map->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('maps.map_groups.index', [$campaign, $map]), 'label' => __('maps.panels.groups')],\n        __('maps/groups.create.title')\n    ]\n])\n\n@section('content')\n    <x-dialog.header>\n        @if ($campaign->boosted())\n            {{ __('maps/groups.pitch.max.limit') }}\n        @else\n            {!! __('maps/groups.pitch.upgrade.limit', ['limit' => config('limits.campaigns.groups.standard')]) !!}\n        @endif\n    </x-dialog.header>\n\n    <x-dialog.article class=\"max-w-3xl\">\n        @if ($campaign->boosted())\n            <x-helper>\n                <p>{{ __('maps/groups.pitch.max.helper', ['limit' => $max]) }}</p>\n            </x-helper>\n        @else\n            <x-helper>\n                <p>{{ __('maps/groups.pitch.upgrade.upgrade', ['limit' => $max]) }}</p>\n            </x-helper>\n            <x-premium-cta-footer :campaign=\"$campaign\" />\n        @endif\n    </x-dialog.article>\n@endsection\n"
  },
  {
    "path": "resources/views/maps/form/_layers_max.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/layers.create.title', ['name' => $map->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('maps.map_layers.index', [$campaign, $map]), 'label' => __('maps.panels.layers')],\n        __('maps/layers.create.title')\n    ]\n])\n\n@section('content')\n\n    @if ($campaign->boosted())\n        <x-box class=\"rounded-xl flex flex-col gap-4 p-6\">\n            <h2 class=\"text-2xl\">\n                <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n                {{ __('maps/groups.pitch.max.limit') }}\n            </h2>\n            <x-helper>\n                <p>{{ __('maps/layers.pitch.max.helper', ['limit' => $max]) }}</p>\n            </x-helper>\n        </x-box>\n    @else\n        <x-premium-cta :campaign=\"$campaign\">\n            <p>{{ __('maps/layers.pitch.upgrade.upgrade', ['limit' => $max]) }}</p>\n        </x-premium-cta>\n    @endif\n\n@endsection\n"
  },
  {
    "path": "resources/views/maps/form/_markers.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\MapMarker $marker\n* @var \\App\\Models\\Map $model\n*/\n?>\n@if (!isset($model) || !$model->explorable())\n    <x-alert type=\"warning\">\n        <p>{{ __('maps.helpers.missing_image') }}</p>\n    </x-alert>\n@else\n    <x-tutorial code=\"map_markers\" doc=\"https://docs.kanka.io/en/latest/entries/maps/markers.html\">\n        <p>{{ __('maps/markers.helpers.base') }}</p>\n    </x-tutorial>\n\n    <div class=\"map\" id=\"map{{ $model->id }}\" style=\"width: 100%; height: 50%;\">\n        <div class=\"map-actions absolute bottom-0 right-0 m-4\">\n            <button class=\"btn2 btn-sm btn-mode-drawing\">\n                <x-icon class=\"pencil\" />\n                {{ __('maps/explore.actions.finish-drawing') }}\n            </button>\n        </div>\n    </div>\n\n@section('scripts')\n    @parent\n    <!-- Make sure you put this AFTER Leaflet's CSS -->\n    <script src=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.js' }}\" integrity=\"{{ config('app.leaflet_js') }}\" crossorigin=\"\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomdisplay.js\" type=\"text/javascript\" ></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.layersupport.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.path.drag.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.editable.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomcss.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.layerstree.js\"></script>\n    @vite([\n        'resources/js/location/map-v3.js',\n    ])\n\n    <script type=\"text/javascript\">\n        var labelShapeIcon = new L.Icon({\n            iconUrl: '/images/transparent.png',\n            iconSize: [150, 35],\n            iconAnchor: [75, 15],\n            popupAnchor: [0, -20],\n        });\n\n        var markers = {};\n        @foreach ($model->markers as $marker)\n            var marker{{ $marker->id }} = {!! $marker->multiplier($model->is_real)->marker() !!};\n        @endforeach\n\n    </script>\n    @include('maps._setup', ['map' => $model, 'editable' => true])\n\n    <script type=\"text/javascript\">\n        window.map = map{{ $model->id }};\n        //window.map\n        window.exploreEditMode = true;\n        /** Add markers outside of a group directly to the page **/\n        @foreach ($model->markers as $marker)\n            @if ($marker->visible() && empty($marker->group_id))\n                @if ($model->isClustered())\n                    clusterMarkers{{ $model->id }}.addLayer(marker{{ $marker->id }});\n                @else\n                    marker{{ $marker->id }}.addTo(map{{ $model->id }});\n                @endif\n            @elseif (!empty($marker->group_id))\n                marker{{ $marker->id }}.addTo(group{{ $marker->group_id }})\n            @endif\n        @endforeach\n\n        @if ($model->isClustered())\n            map{{ $model->id }}.addLayer(clusterMarkers{{ $model->id }});\n\n            /** Add the groups to the cluster **/\n            clusterMarkers{{ $model->id }}.checkIn({{ $model->checkinGroups() }});\n\n            /** Add the groups to the map **/\n            @foreach ($model->groups as $group)\n                @if (!$group->is_shown) @continue @endif\n                group{{ $group->id }}.addTo(map{{ $model->id }});\n            @endforeach\n        @endif\n\n        map{{ $model->id }}.on('click', function(ev) {\n            window.handleExploreMapClick(ev);\n        });\n\n        window.map = map{{ $model->id }};\n\n    </script>\n@endsection\n\n@section('styles')\n    @parent\n    <link rel=\"stylesheet\" href=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.layerstree.css\"/>\n    <link rel=\"stylesheet\" href=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.css' }}\" integrity=\"{{ config('app.leaflet_css') }}\" crossorigin=\"\" />\n    @vite('resources/css/maps/maps.css')\n\n    <style>\n        @foreach ($model->markers as $marker)\n        .marker-{{ $marker->id }} {\n            @if (!empty($marker->font_colour))color: {{ $marker->font_colour }};\n            @endif\n        }\n\n        @if ($marker->entity && $marker->icon == 4).marker-{{ $marker->id }} .marker-pin::after {\n            background-image: url('{{ \\App\\Facades\\Avatar::entity($marker->entity)->fallback()->size(276)->thumbnail() }}');\n            @if (!empty($marker->pin_size))width: {{ $marker->pinSize(false) - 4 }}px;\n            height: {{ $marker->pinSize(false) - 4 }}px;\n            margin: 2px 0 0 -{{ ceil(($marker->pinSize(false) - 4) / 2) }}px;\n            @endif\n        }\n\n        @endif\n        @if (!empty($marker->pin_size)).marker-{{ $marker->id }} .marker-pin {\n            width: {{ $marker->pinSize() }};\n            height: {{ $marker->pinSize() }};\n            margin: -{{ $marker->pinSize(false) / 2 }}px 0 0 -{{ $marker->pinSize(false) / 2 }}px;\n        }\n\n        .marker-{{ $marker->id }} i {\n            font-size: {{ $marker->pinSize(false) / 2 }}px;\n        }\n\n        @endif\n\n        @endforeach\n\n    </style>\n@endsection\n\n@section('modals')\n    @parent\n    <x-form :action=\"['maps.map_markers.store', $campaign, $model]\">\n    <x-dialog\n        id=\"marker-modal\"\n        :title=\"__('maps/markers.create.title', ['name' => $model->name])\"\n        footer=\"maps.markers._new-footer\">\n        @include('maps.markers._form', ['model' => null, 'map' => $model, 'activeTab' => 1, 'dropdownParent' => '#marker-modal', 'from' => base64_encode('maps.map_markers.index:' . $model->id)])\n    </x-dialog>\n    </x-form>\n@endsection\n\n@endif\n"
  },
  {
    "path": "resources/views/maps/form/_panes.blade.php",
    "content": "<div class=\"tab-pane {{ (request()->get('tab') == 'form-settings' ? ' active' : '') }}\" id=\"form-settings\">\n    @include('maps.form._settings')\n</div>\n"
  },
  {
    "path": "resources/views/maps/form/_settings.blade.php",
    "content": "<?php\n/** @var Map $model */\nuse App\\Models\\Map;\n$minInitial = Map::MIN_ZOOM;\n$maxInitial = Map::MAX_ZOOM_REAL;\n$defaultInitial = 0;\n\nif (isset($model) && $model->isChunked()) {\n    $minInitial = Map::MIN_ZOOM_CHUNK;\n    $maxInitial = Map::MAX_ZOOM_CHUNK;\n    $defaultInitial = $minInitial;\n}\n?>\n<x-grid>\n    <x-forms.field\n        field=\"real\"\n        :label=\"__('maps.fields.is_real')\">\n        <input type=\"hidden\" name=\"is_real\" value=\"0\" />\n        <x-checkbox :text=\"__('maps.helpers.is_real')\">\n            <input type=\"checkbox\" name=\"is_real\" value=\"1\" @if (old('is_real', $model->is_real ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"clustering\"\n        :label=\"__('maps.fields.has_clustering')\">\n        <input type=\"hidden\" name=\"has_clustering\" value=\"0\" />\n        <x-checkbox :text=\"__('maps.helpers.has_clustering')\">\n            <input type=\"checkbox\" name=\"has_clustering\" value=\"1\" @if (old('has_clustering', $model->has_clustering ?? true)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    <hr class=\"m-0 col-span-2\"/>\n\n@if (isset($model) && $model->isChunked())\n    <x-alert type=\"info\">\n        <p>{{ __('maps.helpers.chunked_zoom') }}</p>\n    </x-alert>\n@else\n    <x-forms.field\n        field=\"max-zoom\"\n        :label=\"__('maps.fields.max_zoom')\"\n        :helper=\"__('maps.helpers.max_zoom', ['max' => Map::MAX_ZOOM, 'default' => 5])\">\n        <input type=\"number\" name=\"max_zoom\" class=\"w-full\" value=\"{{ FormCopy::field('max_zoom')->string() ?: old('max_zoom', $model->max_zoom ?? null) }}\" maxlength=\"2\" placeholder=\"5\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"min-zoom\"\n        :label=\"__('maps.fields.min_zoom')\"\n        :helper=\"__('maps.helpers.min_zoom', ['min' => Map::MIN_ZOOM, 'default' => -2])\"\n    >\n        <input type=\"number\" name=\"min_zoom\" class=\"w-full\" value=\"{{ FormCopy::field('min_zoom')->string() ?: old('min_zoom', $model->min_zoom ?? null) }}\" maxlength=\"3\" placeholder=\"-2\" />\n    </x-forms.field>\n@endif\n\n    <x-forms.field\n        field=\"initial-zoom\"\n        :label=\"__('maps.fields.initial_zoom')\"\n        :helper=\" __('maps.helpers.initial_zoom', ['min' => $minInitial, 'max' => $maxInitial, 'default' => $defaultInitial])\">\n        <input type=\"number\" name=\"initial_zoom\" class=\"w-full\" value=\"{{ FormCopy::field('initial_zoom')->string() ?: old('initial_zoom', $model->initial_zoom ?? null) }}\" maxlength=\"3\" placeholder=\"5\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"grid\"\n        :label=\"__('maps.fields.grid')\"\n        :helper=\" __('maps.helpers.grid')\">\n        <input type=\"number\" name=\"grid\" class=\"w-full\" value=\"{{ FormCopy::field('grid')->string() ?: old('grid', $model->grid ?? null) }}\" maxlength=\"4\" placeholder=\"{{ __('maps.placeholders.grid') }}\" />\n    </x-forms.field>\n\n    <hr class=\"col-span-2 m-0\" />\n\n    <x-forms.field\n        field=\"distance-name\"\n        :label=\"__('maps.fields.distance_name')\">\n\n        <input type=\"text\" name=\"config[distance_name]\" value=\"{{ old('config[distance_name]', $source->config['distance_name'] ?? $model->config['distance_name'] ?? null) }}\" class=\"w-full\" placeholder=\"{{ __('maps.placeholders.distance_name') }}\" maxlength=\"20\" list=\"map-marker-icon-list\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"distance-measure\"\n        :label=\"__('maps.fields.distance_measure')\"\n        tooltip\n        :helper=\"__('maps.helpers.distance_measure') . ' ' . __('maps.helpers.distance_measure_2')\"\n        >\n        <input type=\"number\" name=\"config[distance_measure]\" class=\"w-full\" value=\"{{ $source->config['distance_measure'] ?? old('config[distance_measure]', $model->config['distance_measure'] ?? null) }}\" min=\"0.001\" max=\"100.99\" step=\"0.0001\"/>\n    </x-forms.field>\n\n    <hr class=\"col-span-2 m-0\" />\n\n    <x-forms.field field=\"centering col-span-2\" :label=\"__('maps.fields.centering') \">\n        <p class=\"text-neutral-content\">\n            {{ __('maps.helpers.centering') }}\n        </p>\n\n        <div class=\"nav-tabs-custom\">\n            <ul class=\"nav-tabs bg-base-300 p-1! rounded\" role=\"tablist\">\n                <li class=\"active rounded\">\n                    <a data-toggle=\"tab\" href=\"#coordinates\">\n                        {{ __('maps.fields.tabs.coordinates') }}\n                    </a>\n                </li>\n                <li class=\"{{ (isset($model) && !empty($model))? '' : 'disabled cursor-' }}\">\n                    <a class=\"{{ (isset($model) && !empty($model))? '' : 'cursor-none' }}\" data-toggle=\"tab\"\n                        href=\"#marker\">\n                        {{ __('maps.fields.tabs.marker') }}\n                    </a>\n                </li>\n            </ul>\n            <div class=\"tab-content bg-base-100 p-4\">\n                <div id=\"coordinates\" class=\"tab-pane active\">\n                    <x-helper>\n                        <p>{{ __('maps.helpers.center') }}</p>\n                    </x-helper>\n                    <x-grid>\n                        <x-forms.field field=\"center-y\" :label=\"__('maps.fields.center_y')\">\n                            <input type=\"number\" name=\"center_y\" class=\"w-full\" value=\"{{ FormCopy::field('center_y')->string() ?: old('center_y', $model->center_y ?? null) }}\" min=\"-90\" step=\"0.001\" placeholder=\"{{ __('maps.placeholders.center_y') }}\" />\n                        </x-forms.field>\n\n                        <x-forms.field field=\"center-x\" :label=\"__('maps.fields.center_x')\">\n                            <input type=\"number\" name=\"center_x\" class=\"w-full\" value=\"{{ FormCopy::field('center_x')->string() ?: old('center_x', $model->center_x ?? null) }}\" min=\"-180\" step=\"0.001\" placeholder=\"{{ __('maps.placeholders.center_x') }}\" />\n                        </x-forms.field>\n                    </x-grid>\n                </div>\n                <div id=\"marker\" class=\"tab-pane\">\n                    @if (isset($model) && !empty($model))\n                    <?php\n                        //get the current center marker or null\n                        $preset = null;\n                        if (isset($model) && $model->centerMarker) {\n                            $preset = $model->centerMarker;\n                        }\n                    ?>\n                    <x-forms.foreign\n                        name=\"center_marker_id\"\n                        :label=\"__('maps.fields.center_marker')\"\n                        :placeholder=\"__('maps.placeholders.center_marker')\"\n                        :allowClear=\"true\"\n                        :route=\"route('markers.find', [$campaign, 'include' => $model->id])\"\n                        :selected=\"$preset\">\n                    </x-forms.foreign>\n                    @else\n                        <p class=\"text-neutral-content\">\n                            Add markers to the map first.\n                        </p>\n                    @endif\n                </div>\n            </div>\n        </div>\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/maps/form/_tabs.blade.php",
    "content": "<x-tab.tab target=\"settings\"  :title=\"__('maps.panels.settings')\"></x-tab.tab>\n"
  },
  {
    "path": "resources/views/maps/groups/_actions.blade.php",
    "content": "\n<input id=\"submit-mode\" type=\"hidden\" value=\"true\"/>\n<div class=\"join float-right\">\n    <button class=\"btn2 btn-primary join-item btn-xm\" id=\"form-submit-main\" data-target=\"{{ $target ?? null }}\">\n        {{ __('crud.save') }}\n    </button>\n    <div class=\"dropdown\">\n        <button type=\"button\" class=\"btn2 btn-primary join-item\" data-dropdown aria-expanded=\"false\">\n            <x-icon class=\"fa-regular fa-caret-down\" />\n            <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n        </button>\n        <div class=\"dropdown-menu hidden\" role=\"menu\">\n            <x-dropdowns.item\n                link=\"#\"\n                css=\"form-submit-actions\">\n                {{ __('crud.save') }}\n            </x-dropdowns.item>\n            <x-dropdowns.item\n                link=\"#\"\n                css=\"form-submit-actions\"\n                :data=\"['action' => 'submit-new']\">\n                {{ __('crud.save_and_new') }}\n            </x-dropdowns.item>\n            <x-dropdowns.item\n                link=\"#\"\n                css=\"form-submit-actions\"\n                :data=\"['action' => 'submit-update']\">\n                {{ __('crud.save_and_update') }}\n            </x-dropdowns.item>\n            <x-dropdowns.item\n                link=\"#\"\n                css=\"form-submit-actions\"\n                :data=\"['action' => 'submit-explore']\">\n                {{ __('maps/markers.actions.save_and_explore') }}\n            </x-dropdowns.item>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/maps/groups/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    @empty($model)\n        <x-helper>\n            <p>{!! __('maps/groups.create.helper', ['name' => $map->name]) !!}</p>\n        </x-helper>\n    @endif\n    <x-forms.field\n        required\n        :label=\"__('crud.fields.name')\"\n        field=\"name\"\n        css=\"col-span-2\">\n        <input type=\"text\" name=\"name\" maxlength=\"191\" placeholder=\"{{ __('maps/groups.placeholders.name') }}\" required value=\"{!! htmlspecialchars(old('name', $model->name ?? null)) !!}\" />\n    </x-forms.field>\n    \n\n    <x-forms.foreign\n        :campaign=\"$campaign\"\n        name=\"parent_id\"\n        key=\"parent\"\n        :allowNew=\"false\"\n        :dynamicNew=\"false\"\n        :allowClear=\"true\"\n        :parent=\"true\"\n        :route=\"route('map-groups-list', [$campaign, $map] + (isset($model) ? ['exclude' => $model->id] : []))\"\n        :selected=\"$model->parent ?? null\"\n        :dropdownParent=\"$dropdownParent ?? null\">\n    </x-forms.foreign>\n\n    <x-forms.field\n        field=\"shown col-span-2\"\n        :label=\"__('maps/groups.fields.is_shown')\">\n        <input type=\"hidden\" name=\"is_shown\" value=\"0\" />\n        <x-checkbox :text=\"__('maps/groups.hints.is_shown')\">\n            <input type=\"checkbox\" name=\"is_shown\" value=\"1\" @if (old('is_shown', $model->is_shown ?? true)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    @php\n        $options = $map->groupPositionOptions(!empty($model->position) ? $model->position : null);\n        $last = array_key_last($options);\n    @endphp\n    <x-forms.field\n        field=\"position\"\n        :label=\"__('maps/groups.fields.position')\">\n        <x-forms.select name=\"position\" :options=\"$options\" :selected=\"$model->position ?? $last\" />\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id')\n</x-grid>\n"
  },
  {
    "path": "resources/views/maps/groups/_reorder.blade.php",
    "content": "\n<h3 class=\"text-xl\">\n    {{ __('maps/groups.reorder.title') }}\n</h3>\n<x-form :action=\"['maps.groups.reorder-save', $campaign, 'map' => $model]\">\n<div class=\"box-entity-story-reorder flex flex-col gap-5\">\n    <div class=\"element-live-reorder sortable-elements flex flex-col gap-1\">\n        @foreach($groups as $group)\n            <x-reorder.child :id=\"$group->id\">\n                <input type=\"hidden\" name=\"group[]\" value=\"{{ $group->id }}\" />\n                <div class=\"dragger\">\n                    <x-icon class=\"fa-regular fa-sort\" />\n                </div>\n                <div class=\"overflow-hidden grow flex flex-no-wrap items-center\">\n                    <span class=\"truncate\">{!! $group->name !!}</span>\n                </div>\n            </x-reorder.child>\n        @endforeach\n    </div>\n    <button class=\"btn2 btn-primary btn-block\">\n        {{ __('maps/groups.reorder.save') }}\n    </button>\n</div>\n</x-form>\n"
  },
  {
    "path": "resources/views/maps/groups/create.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n* @var \\App\\Models\\MapGroup $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/groups.create.title', ['name' => $map->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('maps.map_groups.index', [$campaign, $map]), 'label' => __('maps.panels.groups')],\n        __('maps/groups.create.title')\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['maps.map_groups.store', $campaign, $map]\">\n        @include('partials.forms._dialog', [\n            'title' => __('maps/groups.create.title', ['name' => $map->name]),\n            'content' => 'maps.groups._form',\n            'formParams' => ['model' => null, 'map' => $map],\n            'actions' => 'maps.groups._actions',\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/maps/groups/edit.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n* @var \\App\\Models\\MapGroup $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/groups.edit.title', ['name' => $model->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('maps.map_groups.index', [$campaign, $map]), 'label' => __('maps.panels.groups')],\n        __('maps/groups.edit.title', ['name' => $model->name])\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['maps.map_groups.update', 'campaign' => $campaign, 'map' => $map, 'map_group' => $model]\" method=\"PATCH\" id=\"map-group-form\" files>\n        @include('partials.forms._dialog', [\n            'title' => __('maps/groups.edit.title', ['name' => $map->name]),\n            'content' => 'maps.groups._form',\n            'actions' => 'maps.groups._actions',\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/maps/groups/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('maps/groups.index.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @can('update', $entity)\n            <a href=\"https://docs.kanka.io/en/latest/entries/maps/groups.html\" class=\"btn2 btn-sm\" target=\"_blank\">\n                <x-icon class=\"question\" />\n                <span class=\"hidden xl:inline\">{{ __('crud.actions.help') }}</span>\n            </a>\n            @if ($model->explorable())\n                <a href=\"{{ route('maps.explore', [$campaign, $model]) }}\" class=\"btn2 btn-primary btn-sm\">\n                    <x-icon class=\"map\" />\n                    <span class=\"hidden xl:inline\">{{ __('maps.actions.explore') }}</span>\n                </a>\n            @endif\n            <a href=\"{{ route('maps.map_groups.create', [$campaign, $model]) }}\" class=\"btn2 btn-sm\"\n                data-toggle=\"dialog\"\n                data-url=\"{{ route('maps.map_groups.create', [$campaign, $model]) }}\"\n            >\n                <x-icon class=\"plus\" />\n                <span class=\"hidden xl:inline\">{{ __('maps/groups.actions.add') }}</span>\n            </a>\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n\n    @include('entities.pages.subpage', [\n        'active' => 'groups',\n        'view' => 'maps.panels.groups',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/maps/layers/_form.blade.php",
    "content": "<?php\n$typeOptions = [\n        0 => __('maps/layers.types.standard'),\n        1 => __('maps/layers.types.overlay'),\n        2 => __('maps/layers.types.overlay_shown'),\n];\n\n?>\n<x-grid>\n    <x-forms.field\n        field=\"name\"\n        required\n        :label=\"__('crud.fields.name')\">\n        <input type=\"text\" name=\"name\" maxlength=\"191\" placeholder=\"{{ __('maps/layers.placeholders.name') }}\" required value=\"{!! htmlspecialchars(old('name', $model->name ?? null)) !!}\" />\n    </x-forms.field>\n    @php\n        $options = $map->layerPositionOptions(!empty($model->position) ? $model->position : null);\n        $last = array_key_last($options);\n    @endphp\n    <x-forms.field\n        field=\"type\"\n        :label=\"__('maps/layers.fields.type')\">\n        <x-forms.select name=\"type_id\" :options=\"$typeOptions\" :selected=\"$model->type_id ?? null\" />\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"entry col-span-2\"\n        :label=\"__('fields.description.label')\">\n            @include('cruds.fields.entry', ['model' => $model])\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id')\n\n    <x-forms.field\n        field=\"position\"\n        :label=\"__('maps/layers.fields.position')\">\n        <x-forms.select name=\"position\" :options=\"$options\" :selected=\"$model->position ?? $last\" />\n    </x-forms.field>\n\n    @if (!$model || empty($model->image_path))\n    <div class=\"col-span-2\">\n        @include('cruds.fields.image', ['fieldname' => 'image_uuid', 'size' => 'map'])\n    </div>\n    @endif\n</x-grid>\n\n@include('editors.editor')\n"
  },
  {
    "path": "resources/views/maps/layers/_reorder.blade.php",
    "content": "<h3 class=\"text-xl\">\n    {{ __('maps/layers.reorder.title') }}\n</h3>\n<x-form :action=\"['maps.layers.reorder-save', $campaign, 'map' => $model]\">\n<div class=\"box-entity-story-reorder flex flex-col gap-5\">\n    <div class=\"element-live-reorder sortable-elements flex flex-col gap-1\">\n        @foreach($layers as $layer)\n            <x-reorder.child :id=\"$layer->id\">\n                <input type=\"hidden\" name=\"layer[]\" value=\"{{ $layer->id }}\" />\n                <div class=\"dragger\">\n                    <x-icon class=\"fa-regular fa-sort\" />\n                </div>\n                <div class=\"overflow-hidden grow flex flex-no-wrap items-center gap-2\">\n                    <span class=\"truncate\">{!! $layer->name !!}</span>\n                    <span class=\"text-neutral-content text-xs\">\n                        ({{ __('maps/layers.short_types.' . $layer->typeName()) }})\n                    </span>\n                </div>\n            </x-reorder.child>\n        @endforeach\n    </div>\n    <button class=\"btn2 btn-primary btn-block\">\n        {{ __('maps/layers.reorder.save') }}\n    </button>\n</div>\n</x-form>\n"
  },
  {
    "path": "resources/views/maps/layers/create.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n* @var \\App\\Models\\MapLayer $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/layers.create.title', ['name' => $map->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('maps.map_layers.index', [$campaign, $map]), 'label' => __('maps.panels.layers')],\n        __('maps/layers.create.title')\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n    <x-form :action=\"['maps.map_layers.store', $campaign, $map]\" files id=\"map-layer-form\">\n        <x-box>\n            @include('maps.layers._form', ['model' => null])\n\n            <div class=\"flex justify-between gap-2 mt-4\">\n                <div class=\"\">\n                    @include('partials.footer_cancel')\n                </div>\n                @include('maps.groups._actions')\n            </div>\n        </x-box>\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/maps/layers/edit.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n* @var \\App\\Models\\MapLayer $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/layers.edit.title', ['name' => $model->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('maps.map_layers.index', [$campaign, $map]), 'label' => __('maps.panels.layers')],\n        __('maps/layers.edit.title', ['name' => $model->name])\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n    <x-form :action=\"['maps.map_layers.update', $campaign, 'map' => $map, 'map_layer' => $model]\" method=\"PATCH\" id=\"map-layer-form\" files>\n        <x-box>\n            @include('maps.layers._form')\n\n            <div class=\"flex justify-between gap-2 mt-4\">\n                <div>\n                    @include('partials.footer_cancel')\n                </div>\n                @include('maps.groups._actions')\n            </div>\n        </x-box>\n\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/maps/layers/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Map $model */?>\n@extends('layouts.app', [\n    'title' => __('maps/layers.index.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @can('update', $entity)\n            <a href=\"https://docs.kanka.io/en/latest/entries/maps/layers.html\" class=\"btn2 btn-sm\" target=\"_blank\">\n                <x-icon class=\"question\" />\n                <span class=\"hidden xl:inline\">{{ __('crud.actions.help') }}</span>\n            </a>\n            @if ($model->explorable())\n                <a href=\"{{ route('maps.explore', [$campaign, $model]) }}\" class=\"btn2 btn-primary btn-sm\">\n                    <x-icon class=\"map\" />\n                    <span class=\"hidden xl:inline\">{{ __('maps.actions.explore') }}</span>\n                </a>\n            @endif\n            <a href=\"{{ route('maps.map_layers.create', [$campaign, $model]) }}\" class=\"btn2 btn-sm\"\n                data-url=\"{{ route('maps.map_layers.create', [$campaign, $model]) }}\"\n            >\n                <x-icon class=\"plus\" />\n                <span class=\"hidden xl:inline\">{{ __('maps/layers.actions.add') }}</span>\n            </a>\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'layers',\n        'view' => 'maps.panels.layers',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/maps/layers/migrate.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n* @var \\App\\Models\\MapLayer $layer\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/layers.migrate.title', ['name' => $layer->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('maps.map_layers.index', [$campaign, $map]), 'label' => __('maps.panels.layers')],\n        __('maps/layers.edit.title', ['name' => $layer->name])\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['maps.layers.migrate', $campaign, 'map' => $map, 'map_layer' => $layer]\">\n    <x-box>\n        @include('partials.errors')\n\n        <x-alert type=\"warning\">\n            <p>This layer's image needs to be migrated to the <a href=\"{{ route('gallery', $campaign) }}\">campaign gallery</a> before it can be edited.</p>\n        </x-alert>\n\n        <x-box.footer>\n            <div class=\"flex gap-2\">\n                <div class=\"grow\">\n                    @include('partials.footer_cancel')\n                </div>\n                <button type=\"submit\" class=\"btn2 btn-primary\">\n                    Migrate\n                </button>\n            </div>\n\n        </x-box.footer>\n    </x-box>\n\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/maps/maps.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' ' . $entity->entityType->plural(),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('maps.maps', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('maps.maps', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'maps',\n        'view' => 'maps.panels.maps',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/maps/markers/_actions.blade.php",
    "content": "<div class=\"submit-group\">\n    <input id=\"submit-mode\" type=\"hidden\" value=\"true\"/>\n    <div class=\"join\">\n        <button class=\"btn2 join-item btn-primary\" id=\"form-submit-main\"\n            data-action=\"{{ request()->from == 'explore' ? 'submit-explore' : null }}\"\n            data-target=\"{{ isset($target) ? $target : null }}\">{{ __('crud.save') }}\n        </button>\n        <div class=\"dropup\">\n            <button type=\"button\" class=\"btn2 join-item btn-primary \" data-dropdown\n                aria-expanded=\"false\">\n                <x-icon class=\"fa-regular fa-caret-down\" />\n                <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n            </button>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                <x-dropdowns.item\n                    link=\"#\"\n                    css=\"form-submit-actions\">\n                    {{ __('crud.save') }}\n                </x-dropdowns.item>\n                <x-dropdowns.item\n                    link=\"#\"\n                    css=\"form-submit-actions\"\n                    :data=\"['action' => 'submit-update']\">\n                    {{ __('crud.save_and_update') }}\n                </x-dropdowns.item>\n                <x-dropdowns.item\n                    link=\"#\"\n                    css=\"form-submit-actions\"\n                    :data=\"['action' => 'submit-explore']\">\n                    {{ __('maps/markers.actions.save_and_explore') }}\n                </x-dropdowns.item>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/maps/markers/_form.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\MapMarker $model */\n\n$sizeOptions = [\n    1 => __('maps/markers.circle_sizes.tiny'),\n    2 => __('maps/markers.circle_sizes.small'),\n    3 => __('maps/markers.circle_sizes.standard'),\n    4 => __('maps/markers.circle_sizes.large'),\n    5 => __('maps/markers.circle_sizes.huge'),\n    6 => __('maps/markers.circle_sizes.custom'),\n];\n?>\n\n<div class=\"nav-tabs-custom\">\n    <ul class=\"nav-tabs bg-base-300 p-1! rounded\" role=\"tablist\">\n        <li role=\"presentation\" @if($activeTab == 1) class=\"active\" @endif>\n            <a href=\"#marker-pin\" data-nohash=\"true\" data-toggle=\"tooltip\" class=\"text-center\" data-title=\"{{ __('maps/markers.tabs.marker') }}\">\n                <x-icon class=\"fa-regular fa-2x fa-map-pin\" />\n                <br />\n                {{ __('maps/markers.tabs.marker') }}\n            </a>\n        </li>\n        <li role=\"presentation\" @if($activeTab == 2) class=\"active\" @endif>\n            <a href=\"#marker-label\" data-nohash=\"true\"  data-toggle=\"tooltip\" class=\"text-center\" data-title=\"{{ __('maps/markers.tabs.label') }}\">\n                <x-icon class=\"fa-regular fa-2x fa-font\" />\n                <br />\n                {{ __('maps/markers.tabs.label') }}\n            </a>\n        </li>\n        <li role=\"presentation\" @if($activeTab == 3) class=\"active\" @endif>\n            <a href=\"#marker-circle\" data-nohash=\"true\"  data-toggle=\"tooltip\" class=\"text-center\" data-title=\"{{ __('maps/markers.tabs.circle') }}\">\n                <x-icon class=\"fa-regular fa-2x fa-circle\" />\n                <br />\n                {{ __('maps/markers.tabs.circle') }}\n            </a>\n        </li>\n        <li role=\"presentation\" @if($activeTab == 5) class=\"active\" @endif>\n            <a href=\"#marker-poly\" data-nohash=\"true\"  data-toggle=\"tooltip\" class=\"text-center\" data-title=\"{{ __('maps/markers.tabs.polygon') }}\">\n                <x-icon class=\"fa-regular fa-2x fa-draw-polygon\" />\n                <br />\n                {{ __('maps/markers.tabs.polygon') }}\n            </a>\n        </li>\n        <li role=\"presentation\">\n            <a href=\"#presets\" data-nohash=\"true\" class=\"text-center\" data-presets=\"{{ route('preset_types.presets.index', [$campaign, 'preset_type' => \\App\\Models\\PresetType::MARKER, 'from' => $from ?? null]) }}\">\n                <x-icon class=\"fa-regular fa-2x fa-wand-magic-sparkles\" />\n                <br />\n                {{ __('maps/markers.tabs.preset') }}\n            </a>\n        </li>\n    </ul>\n\n    <div class=\"tab-content bg-base-100 shadow-sm rounded mb-5 p-4 rounded-bl rounded-br w-full\">\n        <div class=\"tab-pane @if($activeTab == 1) active @endif\" id=\"marker-pin\">\n            <x-grid>\n                @include('maps.markers.fields.icon')\n                @include('maps.markers.fields.custom_icon')\n\n                @include('maps.markers.fields.pin_size')\n                @include('maps.markers.fields.font_colour')\n\n                <x-forms.field field=\"draggable\" css=\"\" :label=\"__('maps/markers.fields.is_draggable')\">\n                    <input type=\"hidden\" name=\"is_draggable\" value=\"0\" />\n                    <x-checkbox :text=\"__('maps/markers.helpers.draggable')\">\n                        <input type=\"checkbox\" name=\"is_draggable\" value=\"1\" @if (old('is_draggable', $source->is_draggable ?? $model->is_draggable ?? false)) checked=\"checked\" @endif />\n                    </x-checkbox>\n                </x-forms.field>\n            </x-grid>\n        </div>\n        <div class=\"tab-pane @if($activeTab == 2) active @endif\" id=\"marker-label\">\n            <x-helper>\n                <p>{{ __('maps/markers.helpers.label') }}</p>\n            </x-helper>\n        </div>\n        <div class=\"tab-pane @if($activeTab == 3) active @endif\" id=\"marker-circle\">\n            <x-grid>\n                <x-forms.field field=\"size\" :label=\"__('maps/markers.fields.size')\">\n                    <x-forms.select name=\"size_id\" :options=\"$sizeOptions\" :selected=\"$source->size_id ?? $model->size_id ?? null\" id=\"size_id\" />\n                </x-forms.field>\n\n                <x-forms.field field=\"radius\" :label=\"__('maps/markers.fields.circle_radius')\">\n                    <input type=\"text\" name=\"circle_radius\" value=\"{{ old('circle_radius', $source->circle_radius ?? $model->circle_radius ?? null) }}\" class=\"w-full map-marker-circle-radius {{ ($source?->isCircle() ?? $model?->isCircle() ?? false) ? null : 'hidden' }}\" id=\"circle_radius\" />\n                    <div class=\"map-marker-circle-helper\">\n                        <x-helper>\n                            <p>{{ __('maps/markers.helpers.custom_radius') }}</p>\n                        </x-helper>\n                    </div>\n                </x-forms.field>\n            </x-grid>\n        </div>\n        <div class=\"tab-pane @if($activeTab == 5) active @endif\" id=\"marker-poly\">\n            <x-grid>\n                <div class=\"field field-shape flex flex-col gap-2 col-span-2\">\n                    <div class=\"flex\">\n                        <div class=\"grow field\">\n                            <label>{{ __('maps/markers.fields.custom_shape') }}</label>\n                            @if ($campaign->boosted())\n                                @if(isset($model))\n                                    <x-helper>\n                                        <p>{{ __('maps/markers.helpers.polygon.edit') }}</p>\n                                    </x-helper>\n                                </div>\n\n                                <a href=\"#\" id=\"reset-polygon\" class=\"btn2 btn-error btn-outline btn-sm\" style=\"\">\n                                    <x-icon class=\"fa-regular fa-eraser\" />\n                                    {{ __('maps/markers.actions.reset-polygon') }}\n                                </a>\n                            </div>\n                                @else\n                        </div>\n                    </div>\n                    <div>\n                        <a href=\"#\" id=\"start-drawing-polygon\" class=\"btn2 btn-primary btn-sm\" data-toast=\"{{ __('maps/explore.notifications.start-drawing') }}\">\n                            <x-icon class=\"pencil\" />\n                            {{ __('maps/markers.actions.start-drawing') }}\n                        </a>\n                        <a href=\"#\" id=\"reset-polygon\" class=\"btn2 btn-error btn-outline btn-sm hidden\">\n                            <x-icon class=\"fa-regular fa-eraser\" />\n                            {{ __('maps/markers.actions.reset-polygon') }}\n                        </a>\n                    </div>\n                    @endif\n                        <textarea name=\"custom_shape\" class=\"w-full\" rows=\"2\" placeholder=\"{{ __('maps/markers.placeholders.custom_shape') }}\">{!! \\App\\Facades\\FormCopy::field('custom_shape')->string() ?: old('custom_shape', $model->custom_shape ?? null) !!}</textarea>\n                    @else\n                        <x-premium-cta :campaign=\"$campaign\">\n                            <p>{{ __('maps/markers.pitches.poly') }}</p>\n                        </x-premium-cta>\n                        </div>\n                    </div>\n                    @endif\n                </div>\n\n                <x-forms.field field=\"stroke\" :label=\"__('maps/markers.fields.polygon_style.stroke')\">\n                    <span>\n\n                    <input type=\"text\" name=\"polygon_style[stroke]\" value=\"{{ old('polygon_style[stroke]', $source->polygon_style['stroke'] ?? $model->polygon_style['stroke'] ?? null) }}\" class=\"w-full spectrum\" maxlength=\"7\" data-append-to=\"#marker-modal\" />\n                    </span>\n                </x-forms.field>\n\n                <x-forms.field field=\"width\" :label=\"__('maps/markers.fields.polygon_style.stroke-width')\">\n                    <input type=\"number\" name=\"polygon_style[stroke-width]\" value=\"{{ $source->polygon_style['stroke-width'] ?? old('polygon_style[stroke-width]', $model->polygon_style['stroke-width'] ?? null) }}\" id=\"stroke-width\" step=\"1\" min=\"0\" max=\"99\" maxlength=\"2\" />\n                </x-forms.field>\n\n                <x-forms.field field=\"opacity\" :label=\"__('maps/markers.fields.polygon_style.stroke-opacity')\">\n                    <input type=\"number\" name=\"polygon_style[stroke-opacity]\" value=\"{{ $source->polygon_style['stroke-opacity'] ?? old('polygon_style[stroke-opacity]', $model->polygon_style['stroke-opacity'] ?? null) }}\" id=\"stroke-opacity\" step=\"10\" min=\"0\" max=\"100\" maxlength=\"3\" />\n                </x-forms.field>\n            </x-grid>\n        </div>\n\n        <div class=\"tab-pane pane-presets\" id=\"presets\">\n            <x-grid type=\"1/1\">\n                <x-helper>\n                    <p>{!! __('maps/markers.presets.helper') !!}</p>\n                </x-helper>\n\n                <div class=\"marker-preset-list rounded\">\n                    <div class=\"text-center\">\n                        <x-icon class=\"load\" />\n                    </div>\n                </div>\n\n                @can('mapPresets', $campaign)\n                    <a href=\"{{ route('preset_types.presets.create', [$campaign, 'preset_type' => \\App\\Models\\PresetType::MARKER, 'from' => $from ?? null]) }}\" class=\"btn2 btn-primary btn-sm\">\n                        {{ __('presets.actions.create') }}\n                    </a>\n                @endcan\n            </x-grid>\n        </div>\n    </div>\n</div>\n\n<div id=\"marker-main-fields\" class=\"flex flex-col gap-5 w-full\">\n    <x-grid>\n        <x-forms.field field=\"name\" :label=\"__('crud.fields.name')\">\n            <input type=\"text\" name=\"name\" maxlength=\"191\" placeholder=\"{{ __('maps/markers.placeholders.name') }}\" value=\"{!! htmlspecialchars(old('name', $source->name ?? $model->name ?? null)) !!}\" id=\"name\" />\n        </x-forms.field>\n\n        @include('cruds.fields.entity')\n\n        @if (!isset($model))\n            <div class=\"md:col-span-2\">\n                <x-alert type=\"info\">\n                    {{ __('maps/markers.hints.entry') }}\n                </x-alert>\n            </div>\n        @else\n        <div class=\"md:col-span-2 {{ ($model->hasEntry() ? 'hidden' : '') }}\">\n            <a href=\"#\" class=\"map-marker-entry-click text-link\">{{ __('maps/markers.actions.entry') }}</a>\n        </div>\n        <div class=\"md:col-span-2 map-marker-entry-entry {{ (!$model->hasEntry() ? 'hidden' : '') }}\" style=\"\">\n            <x-forms.field field=\"entry\" :label=\" __('fields.description.label')\">\n                @include('cruds.fields.entry', ['model' => $model])\n            </x-forms.field>\n        </div>\n        @endif\n\n        <x-forms.field\n            field=\"css\"\n            :label=\"__('dashboard.widgets.fields.class')\"\n            :helper=\"__('maps/markers.helpers.css')\"\n        >\n        <input type=\"text\" name=\"css\" value=\"{{ old('css', $model->css ?? $source->css ?? null) }}\" class=\"w-full\"\n                maxlength=\"45\" id=\"css\"/>\n        <p class=\"text-neutral-content md:hidden\">\n            {{ __('maps/markers.helpers.css') }}\n        </p>\n\n        </x-forms.field>\n        @include('maps.markers.fields.opacity')\n\n        <div class=\"\" id=\"map-marker-bg-colour\" @if((isset($model) && $model->isLabel()) || (isset($source) && $source->isLabel())) style=\"display: none;\"@endif>\n            @include('maps.markers.fields.background_colour')\n        </div>\n\n        <x-forms.field field=\"group\" :label=\"__('maps/markers.fields.group')\">\n            <x-forms.select name=\"group_id\" :options=\"$map->groupOptions()\" :selected=\"$source->group_id ?? $model->group_id ?? null\" id=\"group_id\" />\n        </x-forms.field>\n\n        <x-forms.field field=\"is_popupless\" :label=\"__('maps/markers.fields.popupless')\">\n            <input type=\"hidden\" name=\"is_popupless\" value=\"0\" />\n            <x-checkbox :text=\"__('maps/markers.helpers.is_popupless')\">\n                <input type=\"checkbox\" name=\"is_popupless\" value=\"1\" @if ($source->is_popupless ?? old('is_popupless', $model->is_popupless ?? false)) checked=\"checked\" @endif />\n            </x-checkbox>\n        </x-forms.field>\n\n        @include('cruds.fields.visibility_id')\n\n    </x-grid>\n\n    <x-grid :hidden=\"!$model && empty($source)\">\n        <x-forms.field field=\"latitude\" :label=\"__('maps/markers.fields.latitude')\">\n            <input type=\"number\" name=\"latitude\" value=\"{{ \\App\\Facades\\FormCopy::field('latitude')->string() ?: old('latitude', $model->latitude ?? null) }}\" id=\"marker-latitude\" step=\"0.001\" />\n        </x-forms.field>\n\n        <x-forms.field field=\"longitude\" :label=\"__('maps/markers.fields.longitude')\">\n            <input type=\"number\" name=\"longitude\" value=\"{{ \\App\\Facades\\FormCopy::field('longitude')->string() ?: old('longitude', $model->longitude ?? null) }}\" id=\"marker-longitude\" step=\"0.001\" />\n        </x-forms.field>\n    </x-grid>\n</div>\n\n<input type=\"hidden\" name=\"shape_id\" value=\"{{ $source->shape_id ?? $model->shape_id ?? 1 }}\" />\n@if (isset($from))\n    <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" />\n@endif\n@includeWhen(isset($model), 'editors.editor')\n"
  },
  {
    "path": "resources/views/maps/markers/_new-footer.blade.php",
    "content": "<menu>\n@include('maps.markers._actions')\n</menu>\n"
  },
  {
    "path": "resources/views/maps/markers/create.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n* @var \\App\\Models\\MapMarker $model\n* @var \\App\\Models\\MapMarker $source\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/markers.create.title', ['name' => $map->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        __('maps/markers.create.title')\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['maps.map_markers.store', $campaign, $map]\" id=\"map-marker-form\">\n    <x-box>\n        @if (request()->ajax())\n            <div class=\"modal-header\">\n                <x-dialog.close />\n                <h4 class=\"modal-title text-lg\">\n                    {{ __('maps/markers.create.title', ['name' => $map->name]) }}\n                </h4>\n            </div>\n        @endif\n        <div class=\"map mb-4\" id=\"map{{ $map->id }}\" style=\"width: 100%; height: 100%;\"></div>\n            @include('partials.errors')\n\n\n        <x-grid type=\"1/1\">\n            @include('maps.markers._form', ['model' => null])\n            <x-box.footer>\n                <div class=\"submit-group flex items-center justify-between gap-2\">\n                    <div class=\"\">\n                        @include('partials.footer_cancel', ['ajax' => null])\n                    </div>\n                    @include('maps.markers._actions')\n                </div>\n            </x-box.footer>\n        </x-grid>\n    </x-box>\n    </x-form>\n@endsection\n\n@section('scripts')\n    @parent\n    <!-- Make sure you put this AFTER Leaflet's CSS -->\n    <script src=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.js' }}\" integrity=\"{{ config('app.leaflet_js') }}\" crossorigin=\"\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomdisplay.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomcss.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.layersupport.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.path.drag.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.editable.js\"></script>\n    @vite([\n        'resources/js/location/map-v3.js',\n    ])\n    @if (!request()->ajax() && !empty($source))\n        @include('maps._setup', ['single' => true, 'model' => $source, 'editable' => true])\n        <script type=\"text/javascript\">\n            var labelShapeIcon = new L.Icon({\n                iconUrl: '/images/transparent.png',\n                iconSize: [150, 35],\n                iconAnchor: [75, 15],\n                popupAnchor: [0, -20],\n            });\n\n            var marker{{ $source->id }} = {!! $source->editing()->multiplier($map->isReal())->marker() !!}.addTo(map{{ $map->id }});\n            @if ($source->isPolygon())\n                window.polygon = marker{{ $source->id }};\n                window.polygon.enableEdit();\n                window.polygon.on('editable:dragend', markerUpdateHandler);\n                window.polygon.on('editable:vertex:dragend', markerUpdateHandler);\n                window.polygon.on('editable:vertex:dragend', markerUpdateHandler);\n            @endif\n\n            window.map = map{{ $map->id }};\n\n            @if ($source->isPolygon())\n            function markerUpdateHandler(data) {\n                window.markerUpdateHandler(data)\n            }\n            @endif\n\n        </script>\n    @endif\n@endsection\n\n@section('styles')\n    @parent\n    <link rel=\"stylesheet\" href=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.css' }}\" integrity=\"{{ config('app.leaflet_css') }}\" crossorigin=\"\" />\n    @vite('resources/css/maps/maps.css')\n@endsection\n"
  },
  {
    "path": "resources/views/maps/markers/details.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\MapMarker $marker\n * @var \\App\\Models\\Campaign $campaign\n */\n$class = $backgroundImage = null;\n$hasImage = $marker->entity && $marker->entity->hasImage();\nif ($hasImage) {\n    $class = 'with-image cover-background';\n    $backgroundImage = \"background-image: url('\" . \\App\\Facades\\Avatar::entity($marker->entity)->size(400, 200)->thumbnail();\n}\n?>\n@if (!request()->has('mobile'))\n<div class=\"marker-header flex flex-col gap-2 {{ $class }}\" style=\"{{ $backgroundImage }}\">\n\n        <div class=\"p-1 text-right\">\n            <span class=\"marker-close\" data-tooltip data-title=\"{{ __('crud.actions.close') }}\">\n                <x-icon class=\"fa-regular fa-close\" />\n            </span>\n        </div>\n    <div class=\"marker-header-fade grow flex p-2 items-end\">\n        <div class=\"marker-header-lower grow flex gap-2\">\n            <div class=\"marker-name overflow-hidden grow text-xl\">\n                @if ($marker->entity)\n                    <a href=\"{{ $marker->entity->url() }}\" class=\"text-sidebar-content\">\n                        @if (!empty($marker->name))\n                            {!! $marker->name !!}\n                        @else\n                            {!! $marker->entity->name !!}\n                        @endif\n                    </a>\n                @else\n                    {{ $marker->name }}\n                @endif\n            </div>\n            <div class=\"flex-none marker-actions flex gap-3 items-center text-2xl\">\n                @if($marker->entity && $marker->entity->isMap())\n                    <a href=\"{{ route('maps.explore', [$campaign, $marker->entity->child]) }}\" class=\"marker-map-link text-sidebar-content\" data-tooltip data-title=\"{{  __('maps.actions.explore') }}\">\n                        <x-icon class=\"map\" />\n                    </a>\n                @endif\n                @can('update', $marker->map->entity)\n                    <a href=\"{{ route('maps.map_markers.edit', [$campaign, $marker->map, $marker, 'from' => 'explore']) }}\" class=\"marker-edit-link text-sidebar-content\" data-tooltip data-title=\"{{ __('maps/markers.actions.update') }}\">\n                        <x-icon class=\"edit\" />\n                    </a>\n                @endcan\n            </div>\n        </div>\n    </div>\n</div>\n@endif\n\n@if ($marker->entity)\n    @if(!$hasImage && $marker->entity->isMap())\n        <div class=\"marker-map-link text-center m-3\">\n            <a href=\"{{ $marker->entity->url('explore') }}\" class=\"btn2 btn-primary btn-sm\">\n                <x-icon class=\"map\" />\n                {{ __('maps.actions.explore') }}\n            </a>\n        </div>\n    @endif\n\n    @if($marker->entity->isLocation() && !$marker->entity->child->maps->isEmpty())\n        <div class=\"marker-explore-links text-center m-3\">\n            @foreach ($marker->entity->child->maps as $map)\n                <a href=\"{{ route('maps.explore', [$campaign, $map]) }}\" class=\"btn2 btn-block btn-primary btn-sm\">\n                    <x-icon class=\"map\" />\n                    {{ __('maps.actions.explore') }} {!! $map->name !!}\n                </a>\n            @endforeach\n        </div>\n    @endif\n@endif\n\n<div class=\"flex flex-col gap-3 md:px-3\">\n    @if ($marker->entity && $marker->entity->tags->isNotEmpty())\n        <div class=\"marker-tags flex flex-wrap gap-2\">\n            @foreach ($marker->entity->visibleTags() as $tag)\n                @if (!$tag->entity) @continue @endif\n                <a href=\"{{ $tag->getLink() }}\" class=\"tooltip-tag\" data-id=\"{{ $tag->entity->id }}\" data-tag-slug=\"{{ $tag->slug }}\" title=\"{{ $tag->name }}\">\n                    @include ('tags._badge')\n                </a>\n            @endforeach\n        </div>\n    @endif\n    @if ($marker->hasEntry())\n        <div class=\"marker-entry entity-content marker-custom-entry\" data-word-count=\"{{ $marker->words }}\">\n            {!! \\App\\Facades\\Mentions::mapAny($marker) !!}\n            <x-word-count :count=\"$marker->words\" />\n        </div>\n    @endif\n    @if ($marker->entity && $marker->entity->hasEntry())\n        @if ($marker->hasEntry())\n        <span class=\"marker-entity-entry text-xl\">\n            {{ __('maps/markers.details.from-entity') }}\n        </span>\n        @endif\n        <div class=\"marker-entry entity-content marker-entity-entry\">\n            {!! $marker->entity->parsedEntry() !!}\n        </div>\n    @endif\n\n    @can('update', $marker->map->entity)\n        <div class=\"marker-actions text-center sm:rounded-t\">\n            <x-buttons.confirm-delete :route=\"route('maps.map_markers.destroy', [$campaign, $marker->map, $marker])\">\n                <input name=\"from\" type=\"hidden\" value=\"explore\" />\n            </x-buttons.confirm-delete>\n        </div>\n    @endcan\n</div>\n"
  },
  {
    "path": "resources/views/maps/markers/dialog_details.blade.php",
    "content": "<x-dialog.header>\n {!! $name !!}\n</x-dialog.header>\n<article class=\"max-w-xl container p-4 md:px-6\">\n    @if ($marker->hasEntry())\n        <div class=\"marker-entry entity-content\">\n            {!! \\App\\Facades\\Mentions::mapAny($marker) !!}\n        </div>\n    @endif\n    @if ($marker->entity && $marker->entity->hasEntry())\n        <div class=\"marker-entry entity-content\">\n            {!! $marker->entity->parsedEntry() !!}\n        </div>\n    @endif\n    <x-dialog.footer :dialog=\"true\">\n        @can('update', $marker->map->entity)\n            <a href=\"{{ route('maps.map_markers.edit', [$campaign, $marker->map, $marker, 'from' => 'explore']) }}\" class=\"btn2 btn-ghost btn-sm join-item\">\n                <x-icon class=\"fa-regular fa-map-pin\" />\n                {{ __('maps/markers.actions.update') }}\n            </a>\n        @endcan\n    </x-dialog.footer>\n</article>\n"
  },
  {
    "path": "resources/views/maps/markers/edit.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Map $map\n* @var \\App\\Models\\MapMarker $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('maps/markers.edit.title', ['name' => $model->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($map->entity)->list(),\n        Breadcrumb::show(),\n        __('maps/markers.edit.title', ['name' => $model->name])\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-box>\n        @if (request()->ajax())\n            <div class=\"modal-heading\">\n                <x-dialog.close />\n                <h4 class=\"text-lg\">\n                    {{ __('maps/markers.edit.title', ['name' => $model->name]) }}\n                </h4>\n            </div>\n        @endif\n        @if (!$map->explorable())\n            <x-alert type=\"warning\">\n                <p>{{ __('maps.helpers.missing_image') }}</p>\n            </x-alert>\n        @else\n            <div class=\"map mb-4\" id=\"map{{ $map->id }}\" style=\"width: 100%; height: 100%;\"></div>\n            @include('partials.errors')\n\n            <x-form :action=\"['maps.map_markers.update', $campaign, 'map' => $map, 'map_marker' => $model]\" method=\"PATCH\" id=\"map-marker-form\">\n            <x-grid type=\"1/1\">\n                @include('maps.markers._form')\n\n                <x-box.footer>\n                    <div class=\"submit-group flex items-center gap-2\">\n                        <div class=\"inline-block grow\">\n                            <x-button.delete-confirm target=\"#delete-marker-confirm-form-{{ $model->id}}\" />\n                        </div>\n                        @include('partials.footer_cancel', ['ajax' => null])\n\n                        @include('maps.markers._actions')\n                    </div>\n                </x-box.footer>\n            </x-grid>\n            @if (isset($from) && $from === 'explore')\n                <input type=\"hidden\" name=\"from\" value=\"explore\" />\n            @endif\n            </x-form>\n            @endif\n    </x-box>\n\n    <x-form method=\"DELETE\" :action=\"['maps.map_markers.destroy', $campaign, $model->map_id, $model->id]\" id=\"delete-marker-confirm-form-{{ $model->id }}\" />\n@endsection\n\n@if ($map->explorable())\n@section('scripts')\n    @parent\n    <!-- Make sure you put this AFTER Leaflet's CSS -->\n    <script src=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.js' }}\" integrity=\"{{ config('app.leaflet_js') }}\" crossorigin=\"\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomdisplay.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.zoomcss.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.markercluster.layersupport.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.path.drag.js\"></script>\n    <script src=\"{{ config('app.asset_url') }}/vendor/leaflet/leaflet.editable.js\"></script>\n    @vite([\n        'resources/js/location/map-v3.js',\n    ])\n\n    @include('maps._setup', ['single' => true, 'editable' => true])\n    <script type=\"text/javascript\">\n        var labelShapeIcon = new L.Icon({\n            iconUrl: '/images/transparent.png',\n            iconSize: [150, 35],\n            iconAnchor: [75, 15],\n            popupAnchor: [0, -20],\n        });\n\n        var marker{{ $model->id }} = {!! $model->editing()->multiplier($map->isReal())->marker() !!}.addTo(map{{ $map->id }});\n        @if (!$model->isCircle())\n        window.polygon = marker{{ $model->id }};\n        window.polygon.enableEdit();\n        window.polygon.on('editable:dragend', markerUpdateHandler);\n        window.polygon.on('editable:vertex:dragend', markerUpdateHandler);\n        window.polygon.on('editable:vertex:dragend', markerUpdateHandler);\n        @endif\n\n        window.map = map{{ $map->id }};\n\n        function markerUpdateHandler(data) {\n            window.markerUpdateHandler(data)\n        }\n    </script>\n@endsection\n\n@section('styles')\n    @parent\n    <link rel=\"stylesheet\" href=\"{{ 'https://unpkg.com/leaflet@' . config('app.leaflet_source') . '/dist/leaflet.css' }}\" integrity=\"{{ config('app.leaflet_css') }}\" crossorigin=\"\" />\n    @vite('resources/css/maps/maps.css')\n\n    <style>\n        .marker-{{ $model->id }} {\n            @if (!empty($model->font_colour))color: {{ $model->font_colour }};\n            @endif\n        }\n\n        @if ($model->entity && $model->icon == 4).marker-{{ $model->id }} .marker-pin::after {\n            background-image: url('{{ \\App\\Facades\\Avatar::entity($model->entity)->fallback()->size(276)->thumbnail() }}');\n            @if (!empty($model->pin_size))width: {{ $model->pinSize(false) - 4 }}px;\n            height: {{ $model->pinSize(false) - 4 }}px;\n            margin: 2px 0 0 -{{ ceil(($model->pinSize(false) - 4) / 2) }}px;\n            @endif\n        }\n\n        @endif\n\n        @if (!empty($model->pin_size)).marker-{{ $model->id }} .marker-pin {\n            width: {{ $model->pinSize() }};\n            height: {{ $model->pinSize() }};\n            margin: -{{ $model->pinSize(false) / 2 }}px 0 0 -{{ $model->pinSize(false) / 2 }}px;\n        }\n\n        .marker-{{ $model->id }} i {\n            font-size: {{ $model->pinSize(false) / 2 }}px;\n        }\n\n        @endif\n    </style>\n@endsection\n@endif\n"
  },
  {
    "path": "resources/views/maps/markers/fields/background_colour.blade.php",
    "content": "@php $fieldname = $fieldname ?? 'colour'; @endphp\n<x-forms.field field=\"bg-colour\" :label=\" __('maps/markers.fields.bg_colour')\">\n    <span>\n        <input type=\"text\" name=\"{{ $fieldname }}\" value=\"{!! old($fieldname, $source->$fieldname ?? $model->$fieldname ?? null) !!}\" class=\"spectrum\" maxlength=\"7\" data-append-to=\"{{ !isset($model) || empty($model) ? '#marker-modal' : $dropdownParent ?? null }}\" />\n    </span>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/maps/markers/fields/custom_icon.blade.php",
    "content": "@php $helper = __('maps/markers.helpers.custom_icon_v2', [\n        'rpgawesome' => '<a href=\"https://nagoshiashumari.github.io/Rpg-Awesome/\" target=\"_blank\">RPG Awesome</a>',\n'fontawesome' => '<a href=\"' . config('fontawesome.search') . '\" target=\"_blank\">Font Awesome</a>',\n'docs' => '<a href=\"https://docs.kanka.io/en/latest/entries/maps/markers.html#custom-icon\" target=\"_blank\">' . __('footer.documentation') . '</a>',\n]);\n $fieldname = $fieldname ?? 'custom_icon';\n @endphp\n<x-forms.field\n    field=\"icon\"\n    :label=\"__('maps/markers.fields.custom_icon')\"\n    :helper=\"$helper\"\n    >\n\n    <input type=\"text\" name=\"{{ $fieldname }}\" value=\"{{ old($fieldname, $source->{$fieldname} ?? $model->{$fieldname} ?? null) }}\" placeholder=\"{{ __('maps/markers.placeholders.custom_icon', ['example1' => '\"fa-solid fa-gem\"', 'example2' => '\"ra ra-aura\"']) }}\" list=\"map-marker-icon-list\" autocomplete=\"off\" data-paste=\"fontawesome\" @if (!$campaign->boosted()) disabled=\"disabled\" @endif />\n    @if (!$campaign->boosted())\n        @can('boost', auth()->user())\n            <x-helper>\n                <p><x-icon class=\"premium\" /> {!! __('crud.errors.boosted_campaigns', ['boosted' => '<a href=\"' . route('settings.premium', ['campaign' => $campaign]) . '\">' . __('concept.premium-campaign') . '</a>']) !!}</p>\n            </x-helper>\n        @else\n            <x-helper>\n                <p><x-icon class=\"premium\" /> {!! __('crud.errors.boosted_campaigns', ['boosted' => '<a href=\"https://kanka.io/premium\">' . __('concepts.premium-campaign') . '</a>']) !!}</p>\n            </x-helper>\n        @endif\n    @endif\n\n    <div class=\"hidden\">\n        <datalist id=\"map-marker-icon-list\">\n            @foreach (\\App\\Facades\\MapMarkerCache::campaign($campaign)->iconSuggestion() as $icon)\n                <option value=\"{{ $icon }}\">{{ $icon }}</option>\n            @endforeach\n        </datalist>\n    </div>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/maps/markers/fields/font_colour.blade.php",
    "content": "@php $fieldname = $fieldname ?? 'font_colour'; @endphp\n<x-forms.field field=\"font-colour\" :label=\"__('maps/markers.fields.font_colour')\">\n    <span>\n        <input type=\"text\" name=\"{{ $fieldname }}\" value=\"{{ old($fieldname, $source->$fieldname ?? $model->$fieldname ?? null) }}\" class=\"spectrum\" maxlength=\"7\" data-append-to=\"{{ !isset($model) || empty($model) ? '#marker-modal' : $dropdownParent ?? null }}\" />\n    </span>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/maps/markers/fields/icon.blade.php",
    "content": "@php\n    $default = isset($fieldname) ? [null => ''] : [];\n    $iconOptions = [\n        1 => __('maps/markers.icons.marker'),\n        2 => __('maps/markers.icons.question'),\n        3 => __('maps/markers.icons.exclamation'),\n        4 => __('maps/markers.icons.entity'),\n    ];\n    $iconOptions = $default + $iconOptions;\n@endphp\n<x-forms.field\n    field=\"icon\"\n    :label=\"__('maps/markers.fields.icon')\">\n    <x-forms.select :name=\"$fieldname ?? 'icon'\" :options=\"$iconOptions\" :selected=\"$source->icon ?? $model->icon ?? null\" id=\"icon\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/maps/markers/fields/opacity.blade.php",
    "content": "<x-forms.field field=\"opacity\" :label=\"__('maps/markers.fields.opacity')\">\n    <input type=\"number\"\n           name=\"{{ $fieldname ?? 'opacity' }}\"\n           value=\"{{ $source->opacity ?? old($fieldname ?? 'opacity', $model->opacity ?? (!isset($fieldname) ? 100 : null)) }}\"\n           class=\"w-full\"\n           maxlength=\"3\"\n           step=\"1\"\n           max=\"100\"\n           min=\"0\"\n           placeholder=\"1% - 100%\"\n           id=\"{{ $fieldname ?? 'opacity' }}\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/maps/markers/fields/pin_size.blade.php",
    "content": "<x-forms.field field=\"pin-size\" :label=\"__('maps/markers.fields.pin_size')\">\n    <input\n        type=\"number\"\n        name=\"{{ $fieldname ?? 'pin_size' }}\"\n        value=\"{{ $source->pin_size ?? old($fieldname ?? 'pin_size', $model->pin_size ?? null) }}\"\n        class=\"w-full\"\n        maxlength=\"3\"\n        step=\"2\"\n        max=\"100\"\n        min=\"10\"\n        placeholder=\"40\"\n        id=\"{{ $fieldname ?? 'pin_size' }}\" />\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/maps/markers/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Map $model */?>\n@extends('layouts.app', [\n    'title' => __('maps/markers.index.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @can('update', $entity)\n            <a href=\"https://docs.kanka.io/en/latest/entries/maps/markers.html\" class=\"btn2 btn-sm\" target=\"_blank\">\n                <x-icon class=\"question\" />\n                <span class=\"hidden xl:inline\">{{ __('crud.actions.help') }}</span>\n            </a>\n            @if ($model->explorable())\n                <a href=\"{{ route('maps.explore', [$campaign, $model]) }}\" class=\"btn2 btn-primary btn-sm\">\n                    <x-icon class=\"map\" />\n                    <span class=\"hidden xl:inline\">{{ __('maps.actions.explore') }}</span>\n                </a>\n            @endif\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'markers',\n        'view' => 'maps.panels.markers',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/maps/panels/groups.blade.php",
    "content": "<x-tutorial code=\"map_groups\" doc=\"https://docs.kanka.io/en/latest/entries/maps/groups.html\">\n    <p>\n        {{ __('maps/groups.helper.amount_v3') }}\n    </p>\n</x-tutorial>\n\n<h3 class=\"text-xl\">\n    {{ __('maps.panels.groups') }}\n</h3>\n\n<div id=\"map-groups\" class=\"\">\n    @if(Datagrid::hasBulks())\n        <x-form :action=\"['maps.groups.bulk', $campaign, 'map' => $model]\" direct>\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table')\n            </div>\n        </x-form>\n    @else\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @include('layouts.datagrid._table')\n        </div>\n    @endif\n</div>\n\n@includeWhen($groups->count() > 1, 'maps.groups._reorder')\n\n"
  },
  {
    "path": "resources/views/maps/panels/layers.blade.php",
    "content": "<x-tutorial code=\"map_layers\" doc=\"https://docs.kanka.io/en/latest/entries/maps/layers.html\">\n    <p>\n        {{ __('maps/layers.helper.amount_v2') }}\n    </p>\n</x-tutorial>\n\n<h3 class=\"text-xl\">\n    {{ __('maps.panels.layers') }}\n</h3>\n\n<div class=\"\" id=\"map-layers\">\n    @if(Datagrid::hasBulks())\n        <x-form :action=\"['maps.layers.bulk', $campaign, 'map' => $model]\" direct>\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table')\n            </div>\n        </x-form>\n    @else\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @include('layouts.datagrid._table')\n        </div>\n    @endif\n\n</div>\n@includeWhen($layers->count() > 1, 'maps.layers._reorder')\n\n\n"
  },
  {
    "path": "resources/views/maps/panels/maps.blade.php",
    "content": "<div class=\"\" id=\"map-maps\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/maps/panels/markers.blade.php",
    "content": "@include('maps.form._markers', ['source' => null])\n\n<h3 class=\"text-xl\">\n    {{ __('maps.panels.markers') }}\n</h3>\n<div class=\"\" id=\"map-markers\">\n    @if(Datagrid::hasBulks())\n        <x-form :action=\"['maps.markers.bulk', $campaign, 'map' => $model]\" direct>\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table')\n            </div>\n        </x-form>\n    @else\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @include('layouts.datagrid._table')\n        </div>\n    @endif\n</div>\n\n@section('modals')\n    @parent\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms(), 'params' => []])\n@endsection\n"
  },
  {
    "path": "resources/views/maps/preview.blade.php",
    "content": "<?php /** @var \\App\\Models\\Entity $entity **/\n$map = $entity->child;\n?>\n@extends('layouts.map', [\n    'title' => $entity->name,\n    'map' => $entity->child,\n    'noHeader' => true,\n])\n\n@section('content')\n    @include('maps._preview')\n@endsection\n"
  },
  {
    "path": "resources/views/maps/show.blade.php",
    "content": "<?php /** @var \\App\\Models\\Map $model */?>\n\n<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">@if ($entity->child->explorable())\n                @if ($entity->child->isChunked() && $entity->child->chunkingError())\n                    <x-alert type=\"error\">\n                        {!! __('maps.errors.chunking.error', ['discord' => '<a href=\"https://kanka.io/go/discord\">Discord</a>']) !!}\n                    </x-alert>\n                @elseif ($entity->child->isChunked() && !$entity->child->chunkingReady())\n                    <x-alert type=\"warning\">\n                        {{ __('maps.errors.chunking.running.explore') }}\n                        {{ __('maps.errors.chunking.running.time') }}\n                    </x-alert>\n                @else\n                    <p>\n                        <a href=\"{{ route('maps.explore', [$campaign, $entity->child]) }}\" class=\"btn2 btn-block btn-primary\" target=\"_blank\">\n                            <x-icon class=\"map\" /> {{ __('maps.actions.explore') }}\n                        </a>\n                    </p>\n                @endif\n            @endif\n\n            @include('entities.components.posts', ['withEntry' => true])\n\n\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/notes/_subnotes.blade.php",
    "content": "<h3 class=\"text-xl\">\n    {!! \\App\\Facades\\Module::plural(config('entities.ids.note'), __('entities.notes')) !!}\n</h3>\n<x-box>\n    <div class=\"grid grid-cols-2 gap-5 md:grid-cols-2 xl:grid-cols-5\">\n        @foreach ($entity->children->sortBy('name') as $childEntity)\n            <span>\n                <x-entity-link\n                    :entity=\"$childEntity\"\n                    :campaign=\"$campaign\" />\n                @if($childEntity->is_private) <x-icon class=\"lock\" /> @endif\n            </span>\n        @endforeach\n    </div>\n</x-box>\n"
  },
  {
    "path": "resources/views/notes/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Note::class, 'trans' => 'notes'])\n\n    @include('cruds.fields.parent')\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/notes/show.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n\n            @includeWhen(!$entity->children->isEmpty(), 'notes._subnotes')\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/notifications/_notification.blade.php",
    "content": "<?php /** @var \\Illuminate\\Notifications\\DatabaseNotification $notification */\nuse \\Illuminate\\Support\\Arr;\nuse \\Illuminate\\Support\\Str;\n?>\n<tr class=\"@if(!$notification->read()) info @endif\">\n    <td>\n        @if (!empty($notification->data['icon']))\n            <i class=\"fa-regular fa-{{ $notification->data['icon'] }} text-{{ $notification->data['colour'] }}\"></i>\n            @if(Arr::has($notification->data['params'], 'link'))\n                @php\n                    $url = $notification->data['params']['link'];\n                    if (!Str::startsWith($url, 'http')) {\n                        $url = url(app()->getLocale() . '/' . $url);\n                    }\n                    // Fix to new links?\n                    //$url = \\Illuminate\\Support\\Str::replace(['/campaign/'], ['/w/'], $url);\n                @endphp\n                <a href=\"{{ $url }}\" class=\"text-link\">\n                    {!! __('notifications.' . $notification->data['key'], $notification->data['params']) !!}\n                </a>\n            @elseif (Arr::has($notification->data['params'], 'route'))\n                <a href=\"{{ route($notification->data['params']['route']) }}\" class=\"text-link\">\n                    {!! __('notifications.' . $notification->data['key'], $notification->data['params']) !!}\n                </a>\n            @else\n                {!! __('notifications.' . $notification->data['key'], $notification->data['params']) !!}\n            @endif\n        @else\n            <p>{!! __('notifications.' . $notification->data['key'] . '.body')!!}</p>\n        @endif\n    </td>\n    <td class=\"text-right\">\n        <x-since :date=\"$notification->created_at\" />\n    </td>\n</tr>\n"
  },
  {
    "path": "resources/views/notifications/index.blade.php",
    "content": "<?php /** @var \\Illuminate\\Notifications\\DatabaseNotificationCollection|\\Illuminate\\Pagination\\LengthAwarePaginator  $notifications */\n\n?>\n@extends('layouts.app', [\n    'title' => __('notifications.index.title'),\n    'breadcrumbs' => false,\n])\n\n@section('content')\n    <div class=\"max-w-4xl mx-auto flex flex-col gap-4\">\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"grow text-2xl\">{{ __('notifications.index.title') }}</h1>\n\n            @if ($notifications->count() >= 0)\n            <x-buttons.confirm type=\"danger\" target=\"delete-confirm-notifications\" size=\"sm\">\n                <x-icon class=\"trash\" />\n                <span>{{ __('notifications.clear.action') }}</span>\n            </x-buttons.confirm>\n            @endif\n        </div>\n\n        <x-box :padding=\"0\">\n            @if ($notifications->count() === 0)\n                <x-helper>\n                    <p>{{ __('notifications.no_notifications') }}</p>\n                </x-helper>\n            @else\n            <div class=\"table-responsive\">\n                <table class=\"table table-hover mb-0\">\n                    <tbody>\n                    @foreach ($notifications as $notification)\n                        @include('notifications._notification')\n                    @endforeach\n                    </tbody>\n                </table>\n            </div>\n        @endif\n        </x-box>\n        @if ($notifications->hasPages())\n            {!! $notifications->links() !!}\n        @endif\n    </div>\n    <input type=\"hidden\" id=\"notification-clear\" />\n@endsection\n\n@section('modals')\n    <x-dialog id=\"delete-confirm-notifications\" :title=\"__('notifications.clear.title')\">\n        <p class=\"\">\n            {{ __('crud.delete_modal.permanent') }}\n        </p>\n\n        <div class=\"grid grid-cols-2 gap-2\">\n            <x-buttons.confirm type=\"ghost\" full=\"true\" dismiss=\"dialog\">\n                {{ __('crud.cancel') }}\n            </x-buttons.confirm>\n            <x-form :action=\"['notifications.clear-all']\" id=\"notifications-clear\">\n                <x-buttons.confirm type=\"danger\" full=\"true\" ouline=\"true\">\n                    <x-icon class=\"trash\" />\n                    <span>{{ __('crud.remove') }}</span>\n                </x-buttons.confirm>\n            </x-form>\n        </div>\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/organisations/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Organisation::class, 'trans' => 'organisations'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.locations', ['from' => $model ?? null, 'quickCreator' => true])\n\n    @include('cruds.fields.entry2')\n\n@if ($campaign->enabled('characters'))\n    <x-forms.field field=\"member\">\n        <input type=\"hidden\" name=\"sync_org_members\" value=\"1\">\n        @include('components.form.members', ['options' => [\n            'model' => $model ?? FormCopy::model(),\n            'source' => $source ?? null\n        ]])\n    </x-forms.field>\n@endif\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/organisations/members/_form.blade.php",
    "content": "@php\n$options = [\n    '' => __('organisations.members.pinned.none'),\n    App\\Enums\\OrganisationMemberPin::character->value => App\\Facades\\Module::singular(\n        config('entities.ids.character'),\n        __('entities.character')\n    ),\n    App\\Enums\\OrganisationMemberPin::organisation->value => App\\Facades\\Module::singular(\n        config('entities.ids.organisation'),\n        __('entities.organisation')\n    ),\n    App\\Enums\\OrganisationMemberPin::both->value => __('organisations.members.pinned.both'),\n];\n$statuses = [\n    App\\Enums\\OrganisationMemberStatus::active->value => __('organisations.members.status.active'),\n    App\\Enums\\OrganisationMemberStatus::inactive->value => __('organisations.members.status.inactive'),\n    App\\Enums\\OrganisationMemberStatus::unknown->value => __('organisations.members.status.unknown'),\n];\n@endphp\n\n<x-grid type=\"1/1\">\n\n    @empty($member)\n        <x-helper>\n            <p>{{ __('organisations.members.create.helper', ['name' => $model->name]) }}</p>\n        </x-helper>\n    @endif\n\n        @include('cruds.fields.characters', ['quickCreator' => false, 'required' => true])\n\n    <div>\n        <input type=\"hidden\" name=\"parent_id\" value=\"\" />\n\n        @include('cruds.fields.character', [\n            'name' => 'parent_id',\n            'label' => __('organisations.members.fields.parent'),\n            'placeholder' => __('organisations.members.placeholders.parent'),\n            'route' => 'search.organisation-member',\n            'dropdownParent' => request()->ajax() ? '#primary-dialog' : null,\n            'allowNew' => false,\n            'allowClear' => false,\n        ])\n    </div>\n\n    <x-forms.field field=\"role\" :label=\"__('organisations.members.fields.role')\">\n        <input type=\"text\" name=\"role\" value=\"{{ old('role', $model->role ?? null) }}\" placeholder=\"{{ __('organisations.members.placeholders.role') }}\" maxlength=\"45\" />\n    </x-forms.field>\n    <x-forms.field field=\"status\" :label=\"__('organisations.members.fields.status')\">\n        <x-forms.select name=\"status_id\" :options=\"$statuses\" :selected=\"$model->status_id ?? null\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"pinned\" :label=\"__('organisations.members.fields.pinned')\" :helper=\"__('organisations.members.helpers.pinned')\" tooltip>\n        <x-forms.select name=\"pin_id\" :options=\"$options\" :selected=\"$model->pin_id ?? null\" />\n    </x-forms.field>\n\n        @includeWhen(auth()->user()->isAdmin(), 'cruds.fields.privacy_callout', ['model' => !empty($member) ? $member : null])\n</x-grid>\n\n\n\n\n"
  },
  {
    "path": "resources/views/organisations/members/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('families.members.create.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($model->entity)->list(),\n        Breadcrumb::show()\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['organisations.organisation_members.store', $campaign, $model->id]\">\n        @include('partials.forms._dialog', [\n            'title' => __('families.members.create.title', ['name' => $model->name]),\n            'content' => 'organisations.members._form',\n            'submit' => __('organisations.members.actions.add_multiple'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/organisations/members/edit.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('organisations.members.edit.title', ['name' => $model->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($model->entity)->list(),\n        Breadcrumb::show()\n    ]\n])\n@section('content')\n    <x-form :action=\"['organisations.organisation_members.update', $campaign, $model->id, $member->id]\" method=\"PATCH\">\n        @include('partials.forms._dialog', [\n            'title' => __('organisations.members.edit.title', ['name' => $model->name]),\n            'content' => 'organisations.members._form',\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/organisations/members.blade.php",
    "content": "@extends('layouts.app', [\n    'title' =>  $entity->name . ' ' . __('organisations.fields.members'),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'members',\n        'view' => 'organisations.panels.members',\n    ])\n@endsection\n\n"
  },
  {
    "path": "resources/views/organisations/organisations.blade.php",
    "content": "@extends('layouts.app', [\n    'title' =>  $model->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('organisations.organisations', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('organisations.organisations', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'organisations',\n        'view' => 'organisations.panels.organisations',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/organisations/panels/members.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Organisation $model\n */\n$allMembers = false;\n$model = $entity->child;\n$datagridOptions = [\n    $campaign,\n    $model->id,\n    'init' => 1,\n];\nif (request()->get('m') == \\App\\Enums\\Descendants::All->value || (!request()->has('m') && $campaign->defaultDescendantsMode() === \\App\\Enums\\Descendants::All)) {\n    $datagridOptions['m'] = \\App\\Enums\\Descendants::All;\n    $allMembers = true;\n}\n$datagridOptions = Datagrid::initOptions($datagridOptions);\n\n$datagridCall = ['datagridUrl' => route('organisations.members', $datagridOptions)];\nif (!empty($rows)) {\n    $datagridCall = [];\n}\n$direct = \\Illuminate\\Support\\Number::format($model->members()->has('character')->count());\n$all = \\Illuminate\\Support\\Number::format($model->allMembersCount());\n?>\n<div class=\"flex gap-2 items-center justify-between flex-wrap\">\n    <h3 class=\"members-title text-xl\">\n        {{ __('organisations.fields.members') }}\n    </h3>\n    <div class=\"flex gap-2 flex-wrap overflow-auto\">\n        @if (!$allMembers)\n            <a href=\"{{ isset($from) && $from === 'overview' ? route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::All, '#organisation-members']) : route('organisations.members', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\" class=\"btn2 btn-sm\" data-toggle=\"tooltip\" data-title=\"{{ __('crud.filters.lists.paginated') }}\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">\n                    {{ __('crud.filters.lists.desktop.all', ['count' => $all]) }}\n                </span>\n                <span class=\"xl:hidden\">\n                    {{ $all }}\n                </span>\n            </a>\n        @else\n            <a href=\"{{ isset($from) && $from === 'overview' ? route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::Direct, '#organisation-members']) : route('organisations.members', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\" class=\"btn2 btn-sm\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">\n                    {{ __('crud.filters.lists.desktop.filtered', ['count' => $direct]) }}\n                </span>\n                <span class=\"xl:hidden\">\n                    {{ $direct  }}\n                </span>\n            </a>\n        @endif\n\n        @can('update', $entity)\n            <a href=\"{{ route('organisations.organisation_members.create', [$campaign, 'organisation' => $model->id]) }}\" class=\"btn2 btn-sm\"\n               data-toggle=\"dialog\" data-url=\"{{ route('organisations.organisation_members.create', [$campaign, $model->id]) }}\">\n                <x-icon class=\"plus\" />\n                <span class=\"hidden lg:inline\">\n                    {{ __('organisations.members.actions.add_multiple') }}\n                </span>\n            </a>\n        @endcan\n    </div>\n</div>\n<div id=\"organisation-members\" class=\"overflow-x-auto\">\n    @if ($direct === 0 && !$allMembers)\n        <x-box>\n            <x-helper>\n                <p>{{ __('organisations.members.helpers.' . ($allMembers ? 'all_' : null) . 'members') }}</p>\n            </x-helper>\n        </x-box>\n    @else\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @include('layouts.datagrid._table', $datagridCall)\n        </div>\n    @endif\n\n</div>\n\n@section('modals')\n    @parent\n    <div id=\"datagrid-delete-forms\"></div>\n@endsection\n"
  },
  {
    "path": "resources/views/organisations/panels/organisations.blade.php",
    "content": "<div class=\"overflow-x-auto\" id=\"organisation-suborganisations\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/organisations/show.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n            @include('organisations.panels.members', ['from' => 'overview'])\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/partials/boost_icon.blade.php",
    "content": "<div class=\"text-boost \">\n    <x-icon class=\"premium\" />\n</div>\n"
  },
  {
    "path": "resources/views/partials/cookieconsent.blade.php",
    "content": "@inject('countryService', 'App\\Services\\CountryService')\n@php\n$cookieconsent = [\n    'header' => __('cookieconsent.header'),\n    'message' => __('cookieconsent.message'),\n    'dismiss' => __('cookieconsent.dismiss'),\n    'allow' => __('cookieconsent.allow'),\n    'deny' => __('cookieconsent.reject'),\n    'link' => __('cookieconsent.link'),\n    'href' => 'https://kanka.io/privacy-policy',\n    'close' => '&#x274c;',\n    'policy' => __('cookieconsent.policy'),\n    'target' => '_blank',\n];\n@endphp\n<div\n    id=\"cookieconsent\"\n    class=\"hidden\"\n    data-api=\"{{ route('cookieconsent.country') }}\"\n    data-country=\"{{ $countryService->getCountry() }}\"\n    data-setup='{{ json_encode($cookieconsent) }}'\n@if (!empty(config('tracking.ga'))) data-gtag=\"{{ config('tracking.ga') }}\" @endif\n@if (!empty(config('tracking.gtm'))) data-gtm=\"{{ config('tracking.gtm') }}\" @endif\n></div>\n\n@vite(['resources/js/cookieconsent.js'])\n"
  },
  {
    "path": "resources/views/partials/errors.blade.php",
    "content": "@if (count($errors) > 0)\n    <x-alert type=\"error\">\n        <strong>{{ __('partials.errors.title') }}</strong>\n        {{ __('partials.errors.description') }}<br>\n        <ul class=\"list-disc\">\n            @foreach ($errors as $error)\n                <li>{!! $error !!}</li>\n            @endforeach\n        </ul>\n    </x-alert>\n@endif\n"
  },
  {
    "path": "resources/views/partials/footer_cancel.blade.php",
    "content": "@if(request()->ajax() || (isset($ajax) && $ajax))\n    <button type=\"button\" class=\"btn2 btn-outline\" data-dismiss=\"modal\" aria-label=\"{{ __('crud.actions.close') }}\">\n        {{ __('crud.cancel') }}\n    </button>\n@else\n    <a href=\"{{ url()->previous() }}\" class=\"btn2 btn-outline\">\n        {{ __('crud.cancel') }}\n    </a>\n@endif\n"
  },
  {
    "path": "resources/views/partials/forms/_dialog.blade.php",
    "content": "<x-dialog.header>\n    @if (isset($titleIcon) && !empty($titleIcon))\n        <span>{!! $titleIcon !!}</span>\n    @endif\n    {!! $title !!}\n</x-dialog.header>\n<article class=\"max-w-2xl py-4 px-4 md:px-6 {{ $articleClass ?? null }}\">\n    @include('partials.errors')\n    @include($content)\n</article>\n\n<footer class=\"flex flex-wrap gap-2 justify-between items-start p-4 md:p-6\">\n    @if (isset($footer))\n        @include($footer)\n    @else\n        @include('partials.forms.dialog.footer')\n    @endif\n</footer>\n"
  },
  {
    "path": "resources/views/partials/forms/_panel.blade.php",
    "content": "<div class=\"bg-box rounded-xl p-4 flex flex-col gap-6 lg:gap-12 shadow-xs\">\n    <div class=\"flex flex-col gap-4\">\n        @include('partials.errors')\n        @include($content)\n    </div>\n    <div class=\"flex gap-2 items-center justify-between\">\n        <div class=\"flex gap-2 items-center\">\n            @include('partials.footer_cancel')\n\n            @if (isset($actions))\n                @include($actions)\n            @endif\n\n            @if (isset($deleteID) && !empty($deleteID))\n                <x-button.delete-confirm target=\"{{ $deleteID }}\" />\n            @endif\n        </div>\n\n        <button class=\"btn2 btn-primary\">\n            {{ $submit ?? __('crud.save') }}\n        </button>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/partials/forms/dialog/footer.blade.php",
    "content": "\n@if (!isset($skipCancel))\n    <menu class=\"flex flex-wrap gap-3 ps-0 ms-0\">\n        <button autofocus type=\"button\" class=\"btn2 btn-outline\" onclick=\"this.closest('dialog').close('close')\">\n            {{ __('crud.cancel') }}\n        </button>\n    </menu>\n@endif\n<menu class=\"flex flex-wrap gap-3 ps-0\">\n    @if (isset($deleteID) && !empty($deleteID))\n        <x-button.delete-confirm target=\"{{ $deleteID }}\" />\n    @endif\n    @if (isset($actions))\n        @includeWhen(!empty($actions), $actions)\n    @else\n        <div class=\"submit-group\">\n            <button class=\"btn2 @if (isset($disableSubmit) && $disableSubmit == true)btn-disabled btn-block @else btn-primary @endif\">\n                {{ $submit ?? __('crud.save') }}\n            </button>\n        </div>\n    @endif\n</menu>\n"
  },
  {
    "path": "resources/views/partials/forms/form.blade.php",
    "content": "@includeWhen(request()->ajax(), 'partials.forms._dialog')\n@includeWhen(!request()->ajax(), 'partials.forms._panel')\n"
  },
  {
    "path": "resources/views/partials/helper-modal.blade.php",
    "content": "<x-dialog :id=\"$id\" :title=\"$title\">\n    @foreach ($textes as $text)\n        <p class=\"text-justify\">{!! $text !!}</p>\n    @endforeach\n</x-dialog>\n"
  },
  {
    "path": "resources/views/partials/images/boosted-image.blade.php",
    "content": "<img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/images/svgs/boosted.svg\" alt=\"Premium campaign CTA\" />\n"
  },
  {
    "path": "resources/views/partials/impersonate.blade.php",
    "content": "<x-alert type=\"warning\">\n    <div class=\"flex flex-col gap-2\">\n        <div class=\"m-0 p-0 text-lg\">\n            <i class=\"icon fa-regular fa-exclamation-triangle\" aria-hidden=\"true\"></i>\n            {{ __('campaigns.members.impersonating.title', ['name' => auth()->user()->name]) }}\n        </div>\n        <p class=\"text-justify\">\n            {{ __('campaigns.members.impersonating.message', ['name' => auth()->user()->name, 'campaign' => $campaign->name]) }}\n        </p>\n\n        <a href=\"{{ route('identity.back', $campaign) }}\" class=\"btn2 btn-sm switch-back decoration-none\">\n            <x-icon class=\"fa-solid fa-sign-out-alt\" />\n            {{ __('campaigns.members.actions.switch-back') }}\n        </a>\n    </div>\n</x-alert>\n"
  },
  {
    "path": "resources/views/partials/koinks.blade.php",
    "content": "({{ $cost }} <img src=\"/images/koink.png\" alt=\"koinks\" class=\"koink\" data-toggle=\"tooltip\" title=\"Action cost in Koinks\" />)\n"
  },
  {
    "path": "resources/views/partials/modals/close.blade.php",
    "content": "<x-dialog.close :modal=\"true\"/>\n"
  },
  {
    "path": "resources/views/partials/newsletter.blade.php",
    "content": "\n<div class=\"card @if (!isset($onlyForm)) mt-4 @endif\">\n    <div class=\"card-body\">\n        @if (!isset($onlyForm))\n        <h3 class=\"card-title\">\n            {{ __('front/newsletter.title') }}\n        </h3>\n        <div class=\"text-neutral-content\">{{ __('front/newsletter.headline', ['kanka' => config('app.name')]) }}</div>\n\n        <a class=\"btn2 btn-ghost\" data-animate=\"collapse\" data-target=\"#newsletter-collapse\" href=\"#newsletter-collapse\" role=\"button\" aria-expanded=\"false\" aria-controls=\"collapseExample\">\n            {{ __('front/newsletter.actions.learn_more') }}\n        </a>\n\n\n        <div class=\"hidden my-2\" id=\"newsletter-collapse\">\n        @endif\n            <div id=\"mc_embed_signup\">\n                <form action=\"https://kanka.us19.list-manage.com/subscribe/post?u=e971e01b5e0f6f2597dad7d8f&amp;id=2fb0754d39\" method=\"post\" id=\"mc-embedded-subscribe-form\" name=\"mc-embedded-subscribe-form\" class=\"validate\" target=\"_blank\" novalidate>\n                    <div id=\"mc_embed_signup_scroll\">\n                        <div class=\"mc-field-group form-group row\">\n                            <label for=\"mce-EMAIL\" class=\"col-sm-2 col-form-label\">{{ __('auth.login.fields.email') }}  <span class=\"asterisk text-danger\">*</span>\n                            </label>\n                            <div class=\"col-sm-10\">\n                                <input type=\"email\" value=\"\" name=\"EMAIL\" class=\" required email\" required id=\"mce-EMAIL\">\n                            </div>\n                        </div>\n                        <div class=\"mc-field-group form-group row\">\n                            <label for=\"mce-FNAME\" class=\"col-sm-2 col-form-label\">{{ __('front/newsletter.fields.firstname') }}</label>\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" value=\"\" name=\"FNAME\" class=\"\" id=\"mce-FNAME\">\n                            </div>\n                        </div>\n                        <div class=\"mc-field-group form-group row\">\n                            <label for=\"mce-LNAME\" class=\"col-sm-2 col-form-label\">{{ __('front/newsletter.fields.lastname') }}</label>\n                            <div class=\"col-sm-10\">\n                                <input type=\"text\" value=\"\" name=\"LNAME\" class=\"\" id=\"mce-LNAME\">\n                            </div>\n                        </div>\n                        <div class=\"form-group row\">\n                            <div class=\"col-sm-2\">{{ __('settings.menu.notifications') }}</div>\n\n                            <div class=\"col-sm-10\">\n                                <div class=\"form-check\">\n                                    <input type=\"checkbox\" value=\"2\" name=\"group[4868][2]\" id=\"mce-group[4868]-4868-1\" checked=\"checked\" class=\"form-check-input\">\n                                    <label for=\"mce-group[4868]-4868-1\" class=\"form-check-label\">\n                                        {{ __('front/newsletter.groups.all') }}\n                                    </label>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div id=\"mce-responses\" class=\"clear\">\n                            <div class=\"response\" id=\"mce-error-response\" style=\"display:none\"></div>\n                            <div class=\"response\" id=\"mce-success-response\" style=\"display:none\"></div>\n\n                        </div>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->\n                        <div style=\"position: absolute; left: -5000px;\" aria-hidden=\"true\"><input type=\"text\" name=\"b_e971e01b5e0f6f2597dad7d8f_2fb0754d39\" tabindex=\"-1\" value=\"\"></div>\n\n                        <div class=\"mc-field-group form-group row\">\n                            <div class=\"col-sm-2\"></div>\n                            <div class=\"col-sm-10\">\n                                <div class=\"clear\">\n                                    <input type=\"submit\" value=\"{{ __('front/newsletter.actions.subscribe') }}\" name=\"subscribe\" id=\"mc-embedded-subscribe\" class=\"btn2 btn-primary\">\n                                </div>\n                            </div>\n                        </div>\n\n\n                    </div>\n                </form>\n            </div>\n            <script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script><script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>\n                    <!--End mc_embed_signup-->\n\n        @if (!isset($onlyForm))</div>@endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/partials/or_cancel.blade.php",
    "content": "{!! __('crud.navigation.or_cancel', ['cancel' => '<a href=\"' . (!empty($cancel) ? $cancel : url()->previous()) . '\" class=\"text-link\">' . __('crud.navigation.cancel') . '</a>']) !!}\n"
  },
  {
    "path": "resources/views/partials/success.blade.php",
    "content": "@if (session('success') or session('success_raw'))\n    <x-alert type=\"success\" class=\"alert-header\" :dismissible=\"true\"><span>\n        @if (session('success_raw'))\n            {!! session('success_raw') !!}\n        @else\n            {{ session('success') }}\n        @endif\n        @if (session('success_docs'))\n            <x-learn-more :url=\"session('success_docs')\"/>\n        @endif\n        </span>\n    </x-alert>\n@endif\n@if (session('warning'))\n    <x-alert type=\"warning\" class=\"alert-header\" :dismissible=\"true\">\n        <span>{{ session('warning') }}</span>\n    </x-alert>\n@endif\n@if (session('error') or session('error_raw'))\n    <x-alert type=\"error\" class=\"alert-header\" :dismissible=\"true\">\n        @if (session('error_raw'))\n            <span>{!! session('error_raw') !!}</span>\n        @else\n            <span>{{ session('error') }}</span>\n        @endif\n    </x-alert>\n@endif\n\n@if (session('tiptap_survey'))\n    <x-tutorial code=\"tiptap_survey\" type=\"info\">\n        <span>\n        {!! __('tiptap.survey', [\n            'share' => '<a class=\"text-link\" href=\"https://docs.google.com/forms/d/e/1FAIpQLSccG0m-Ka1uTNHunCqOeSyhHq84iVxQO8z2hzOT0ALsjUPdMw/viewform?usp=publish-editor\">' . __('tiptap.share'). '</a>'\n        ]) !!}</span>\n    </x-tutorial>\n@endif\n"
  },
  {
    "path": "resources/views/partials/superboosted.blade.php",
    "content": "@if(isset($callout) && $callout)\n    <x-alert type=\"info\">\n        <h4 class=\"text-lg\"><x-icon class=\"premium\" /> {{ __('crud.errors.unavailable_feature') }}</h4>\n        <p>\n            {!! __('crud.errors.boosted_campaigns', ['boosted' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaigns') . '</a>']) !!}\n        </p>\n    </x-alert>\n@else\n    <x-helper>\n        <p>{!! __('crud.errors.boosted_campaigns', ['boosted' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaigns') . '</a>']) !!}</p>\n    </x-helper>\n@endif\n"
  },
  {
    "path": "resources/views/presets/forms/_form.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/presets/forms/_marker.blade.php",
    "content": "@php\n$types = [\n    1 => __('maps/markers.tabs.marker'),\n    2 => __('maps/markers.tabs.label'),\n    3 => __('maps/markers.tabs.circle'),\n];\n@endphp\n<x-grid>\n    <x-forms.field field=\"name\" required :label=\" __('presets.fields.name')\">\n        <input type=\"text\" name=\"name\" maxlength=\"191\" placeholder=\"{{ __('presets.placeholders.name') }}\" autofocus required value=\"{!! htmlspecialchars(old('name', $preset->name ?? null)) !!}\" />\n    </x-forms.field>\n\n    @include('maps.markers.fields.icon', ['fieldname' => 'config[icon]'])\n    @include('maps.markers.fields.custom_icon', ['fieldname' => 'config[custom_icon]'])\n    @include('maps.markers.fields.pin_size', ['fieldname' => 'config[pin_size]'])\n    @include('maps.markers.fields.font_colour', ['fieldname' => 'config[font_colour]'])\n    @include('maps.markers.fields.opacity', ['fieldname' => 'config[opacity]'])\n    @include('maps.markers.fields.background_colour', ['fieldname' => 'config[colour]'])\n\n    @include('cruds.fields.visibility_id', ['model' => $preset ?? null])\n</x-grid>\n"
  },
  {
    "path": "resources/views/presets/forms/create.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('presets.create.title'),\n    'centered' => true,\n])\n\n\n@section('content')\n\n    <form method=\"POST\" action=\"{{ route('presets.store', [$campaign, $presetType]) }}\">\n        @include('partials.forms._panel', [\n           'title' => __('presets.create.title'),\n           'content' => 'presets.forms._' . $presetType->code,\n        ])\n        <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" />\n        @csrf\n    </form>\n\n@endsection\n"
  },
  {
    "path": "resources/views/presets/forms/edit.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('presets.edit.title', ['name' => $preset->name]),\n    'centered' => true,\n])\n\n\n@section('content')\n\n    <x-form :action=\"['preset_types.presets.update', $campaign, $presetType, $preset]\" method=\"PATCH\">\n        @include('partials.forms._panel', [\n            'title' => __('presets.edit.title', ['name' => $preset->name]),\n            'content' => 'presets.forms._' . $presetType->code,\n            'deleteID' => '#delete-form-preset-' . $preset->id,\n        ])\n        <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" />\n    </x-form>\n\n@endsection\n\n@section('modals')\n    @parent\n    <x-form method=\"DELETE\" :action=\"['preset_types.presets.destroy', $campaign, 'preset_type' => $presetType, 'preset' => $preset]\" id=\"delete-form-preset-{{ $preset->id }}\">\n    <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" />\n    </x-form>\n\n@endsection\n"
  },
  {
    "path": "resources/views/presets/list.blade.php",
    "content": "@if (!$presets->isEmpty())\n    <div class=\"grid grid-cols-4 gap-2\">\n        @foreach ($presets as $preset)\n            <div class=\"preset p-2 bg-base-300 hover:shadow-md flex gap-2  rounded\">\n                <span role=\"button\" class=\"preset-use cursor-pointer hover:underline grow\" data-url=\"{{ route('preset_types.presets.show', [$campaign, $presetType, $preset]) }}\">\n                    <i class=\"fa-solid fa-spin fa-spinner\" style=\"display: none\" aria-hidden=\"true\"></i>\n                    {{ $preset->name }}\n                </span>\n                <a href=\"{{ route('preset_types.presets.edit', [$campaign, $presetType, $preset, 'from' => $from]) }}\" class=\"preset-edit px-1 text-link\">\n                    <x-icon class=\"pencil\" />\n                </a>\n            </div>\n        @endforeach\n    </div>\n@else\n    <x-alert type=\"warning\">\n        {!! __('presets.lists.empty') !!}\n    </x-alert>\n@endif\n"
  },
  {
    "path": "resources/views/quests/elements/_actions.blade.php",
    "content": "<x-dropdowns.item\n    :link=\"route('quests.quest_elements.edit', [$campaign, $model, $element])\"\n    icon=\"edit\">\n    {{ __('crud.edit') }}\n</x-dropdowns.item>\n<x-dropdowns.divider></x-dropdowns.divider>\n@php\n    $url = route('confirm-delete', [$campaign, 'route' => route('quests.quest_elements.destroy', [$campaign, $model, $element]), 'name' => $element->name(), 'permanent' => true]);\n@endphp\n<x-dropdowns.item link=\"#\" css=\"text-error-content hover:bg-error\" :data=\"['toggle' => 'dialog', 'target' => 'primary-dialog', 'url' => $url]\" icon=\"trash\">\n    {{ __('crud.remove') }}\n</x-dropdowns.item>\n"
  },
  {
    "path": "resources/views/quests/elements/_buttons.blade.php",
    "content": "<div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n    @can('update', $entity)\n        @include('cruds.datagrids.sorters.simple-sorter', ['target' => '#entity-main-block'])\n\n        <a href=\"{{ route('quests.quest_elements.create', [$campaign, $model]) }}\" class=\"btn2 btn-sm\">\n            <x-icon class=\"plus\" />\n            <span class=\"hidden lg:inline\">{{ __('quests.show.actions.add_element') }}</span>\n        </a>\n    @endcan\n    @include('entities.headers.actions', ['edit' => false])\n</div>\n"
  },
  {
    "path": "resources/views/quests/elements/_element.blade.php",
    "content": "<?php /** @var \\App\\Models\\QuestElement $element */?>\n<article class=\"rounded overflow-hidden flex flex-col bg-box widget-user-2 box-quest-element\" id=\"quest-element-{{ $element->id }}\" @if ($element->entity)data-entity-id=\"{{ $element->entity->id }}\" data-entity-type=\"{{ $element->entity->entityType->code }}\"@endif data-word-count=\"{{ $element->words }}\">\n    <div class=\"flex p-4 gap-4 items-center h-20 {{ $element->colourClass() }}\">\n        @if ($element->entity && $element->entity->hasImage())\n            <img class=\"flex-none entity-image rounded-full pull-left w-10 h-10\" src=\"{{ Avatar::entity($element->entity)->size(80)->thumbnail() }}\" title=\"{{ $element->entity->name }}\" alt=\"{{ $element->entity->name }}\" />\n\n        @endif\n        <div class=\"flex flex-col grow gap-1 truncate\">\n            <h3 class=\"widget-user-username truncate m-0 p-0\">\n                @if($element->entity)\n                    @if ($element->entity->is_private)\n                        <x-icon class=\"lock\" title=\"{{ __('crud.is_private') }}\" tooltip></x-icon>\n                    @endif\n                    <x-entity-link\n                        :entity=\"$element->entity\"\n                        :campaign=\"$campaign\">\n                        {!! $element->name !!}\n                    </x-entity-link>\n                @else\n                    <span class=\"name\">\n                        {!! $element->name !!}\n                    </span>\n                @endif\n            </h3>\n            @if (!empty($element->role))\n                <h5 class=\"quest-element-role m-0 truncate\">{!! $element->role !!}</h5>\n            @endif\n        </div>\n            @can('update', $entity)\n                <div class=\"dropdown\">\n                    <a role=\"button\" class=\"btn2 btn-ghost btn-sm\" data-dropdown aria-expanded=\"false\" data-tree=\"escape\">\n                        <x-icon class=\"fa-regular fa-ellipsis-v\" />\n                        <span class=\"sr-only\">{{__('crud.actions.actions') }}</span>\n                    </a>\n                    <div class=\"dropdown-menu hidden\" role=\"menu\">\n                        @include('quests.elements._actions')\n                    </div>\n                </div>\n            @endcan\n    </div>\n    <div class=\"p-4 flex-1 entity-content\">\n        @if ($element->entity && $element->copy_entity_entry)\n            {!! $element->entity->parsedEntry() !!}\n        @else\n            {!! $element->parsedEntry() !!}\n        @endif\n\n        <div class=\"flex justify-between\">\n\n            @include('icons.visibility', ['icon' => $element->visibilityIcon()])\n            <x-word-count :count=\"$element->words\" />\n        </div>\n    </div>\n\n</article>\n\n"
  },
  {
    "path": "resources/views/quests/elements/_elements.blade.php",
    "content": "<?php /** @var \\App\\Models\\QuestElement[] $elements */?>\n@php $count = 0; @endphp\n\n<div class=\"\" id=\"quest-elements\">\n    <x-grid>\n    @foreach ($elements as $element)\n        @if ($element->entity_id && !$element->entity)\n            @continue\n        @endif\n        @php $count++; @endphp\n            @include('quests.elements._element')\n    @endforeach\n    </x-grid>\n</div>\n\n{!! $elements->fragment('quest-elements')->links() !!}\n"
  },
  {
    "path": "resources/views/quests/elements/_form.blade.php",
    "content": "<x-helper>\n    <p>{{ __('quests.elements.fields.entity_or_name') }}</p>\n</x-helper>\n<x-grid>\n    <x-forms.field field=\"entity\" required>\n        <input type=\"hidden\" name=\"entity_id\" value=\"\" />\n        @include('cruds.fields.entity')\n    </x-forms.field>\n    <x-forms.field field=\"name\" required :label=\"__('crud.fields.name')\">\n        <input type=\"text\" name=\"name\" maxlength=\"100\" spellcheck=\"true\" placeholder=\"{{ __('quests.elements.placeholders.name') }}\" value=\"{!! htmlspecialchars(old('name', $model->name ?? null)) !!}\" />\n    </x-forms.field>\n\n    <hr class=\"col-span-2\" />\n\n    <x-forms.field\n        field=\"role\"\n        css=\"col-span-2\"\n        :label=\"__('quests.fields.role')\">\n        <input type=\"text\" name=\"role\" value=\"{{ old('role', $model->role ?? null) }}\" spellcheck=\"true\" maxlength=\"45\" autocomplete=\"off\" list=\"quest-element-roles\" />\n        <div class=\"hidden\">\n            <datalist id=\"quest-element-roles\">\n                @foreach (\\App\\Facades\\QuestCache::campaign($campaign)->roleSuggestion() as $name)\n                    <option value=\"{{ $name }}\">{{ $name }}</option>\n                @endforeach\n            </datalist>\n        </div>\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"description\"\n        css=\"col-span-2\"\n        :label=\"__('fields.description.label')\">\n\n        @include('cruds.fields.entry', ['model' => $model ?? null])\n    </x-forms.field>\n\n    <x-forms.field field=\"copy\" css=\"col-span-2\" :label=\"__('quests.elements.fields.copy_entity_entry')\">\n        <input type=\"hidden\" name=\"copy_entity_entry\" value=\"0\" />\n        <x-checkbox :text=\"__('quests.elements.helpers.copy_entity_entry')\">\n            <input type=\"checkbox\" name=\"copy_entity_entry\" value=\"1\" @if (old('copy_entity_entry', $model->copy_entity_entry ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    @include('cruds.fields.colour')\n    @include('cruds.fields.visibility_id')\n</x-grid>\n\n"
  },
  {
    "path": "resources/views/quests/elements/_post.blade.php",
    "content": "@php\n    $datagridSorter = new \\App\\Datagrids\\Sorters\\QuestElementSorter();\n        $elements = $entity->child\n                ->elements()\n                ->simpleSort($datagridSorter)\n                ->paginate();\n        $elements->withPath(route('quests.quest_elements.index', [$campaign, $entity->child]));\n        $model = $entity->child;\n@endphp\n@include('quests.elements._elements', ['elements' => $elements])\n"
  },
  {
    "path": "resources/views/quests/elements/create.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('quests.elements.create.title', ['name' => $quest->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($quest->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('quests.quest_elements.index', [$campaign, $quest->id]), 'label' => __('quests.show.tabs.elements')],\n        __('crud.create'),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['quests.quest_elements.store', $campaign, $quest->id]\">\n    <x-box>\n        @include('partials.errors')\n\n        @include('quests.elements._form')\n        <x-dialog.footer>\n            <input id=\"submit-mode\" type=\"hidden\" value=\"true\"/>\n            <div class=\"join\">\n                <button class=\"btn2 btn-primary join-item\" id=\"form-submit-main\">\n                    {{ __('crud.save') }}\n                </button>\n                <div class=\"dropdown\">\n                    <button type=\"button\" class=\"btn2 btn-primary join-item\" data-dropdown aria-expanded=\"false\">\n                        <x-icon class=\"fa-regular fa-caret-down\" />\n                        <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n                    </button>\n                    <div class=\"dropdown-menu hidden\" role=\"menu\">\n                        <x-dropdowns.item\n                            link=\"#\"\n                            css=\"form-submit-actions\">\n                            {{ __('crud.save') }}\n                        </x-dropdowns.item>\n                        <x-dropdowns.item\n                            link=\"#\"\n                            css=\"form-submit-actions\"\n                            :data=\"['action' => 'submit-update']\">\n                            {{ __('crud.save_and_update') }}\n                        </x-dropdowns.item>\n                        <x-dropdowns.item\n                            link=\"#\"\n                            css=\"form-submit-actions\"\n                            :data=\"['action' => 'submit-new']\">\n                            {{ __('crud.save_and_new') }}\n                        </x-dropdowns.item>\n                    </div>\n                </div>\n            </div>\n        </x-dialog.footer>\n    </x-box>\n    </x-form>\n@endsection\n\n@include('editors.editor')\n"
  },
  {
    "path": "resources/views/quests/elements/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\QuestElement $element */?>\n@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . __('quests.show.tabs.elements'),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    @include('quests.elements._buttons')\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'elements',\n        'view' => 'quests.elements._elements',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/quests/elements/update.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('quests.elements.edit.title', ['name' => $quest->name]),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($quest->entity)->list(),\n        Breadcrumb::show(),\n        ['url' => route('quests.quest_elements.index', [$campaign, $quest->id]), 'label' => __('quests.show.tabs.elements')],\n        __('crud.update'),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['quests.quest_elements.update', $campaign, $quest, $model->id]\" method=\"PATCH\">\n        <x-box>\n            @include('partials.errors')\n            @include('quests.elements._form')\n            <x-dialog.footer>\n                <input id=\"submit-mode\" type=\"hidden\" value=\"true\"/>\n                <div class=\"join\">\n                    <button class=\"btn2 btn-primary join-item\" id=\"form-submit-main\">\n                        {{ __('crud.save') }}\n                    </button>\n                    <div class=\"dropdown \">\n                        <button type=\"button\" class=\"btn2 btn-primary join-item\" data-dropdown aria-expanded=\"false\">\n                            <x-icon class=\"fa-regular fa-caret-down\" />\n                            <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n                        </button>\n                        <div class=\"dropdown-menu hidden\" role=\"menu\">\n                            <x-dropdowns.item\n                                link=\"#\"\n                                css=\"form-submit-actions\">\n                                {{ __('crud.save') }}\n                            </x-dropdowns.item>\n                            <x-dropdowns.item\n                                link=\"#\"\n                                css=\"form-submit-actions\"\n                                :data=\"['action' => 'submit-update']\">\n                                {{ __('crud.save_and_update') }}\n                            </x-dropdowns.item>\n                            <x-dropdowns.item\n                                link=\"#\"\n                                css=\"form-submit-actions\"\n                                :data=\"['action' => 'submit-new']\">\n                                {{ __('crud.save_and_new') }}\n                            </x-dropdowns.item>\n                        </div>\n                    </div>\n                </div>\n            </x-dialog.footer>\n        </x-box>\n    </x-form>\n    @if(!empty($model) && $campaign->hasEditingWarning())\n        <input type=\"hidden\" id=\"editing-keep-alive\" data-url=\"{{ route('quest-elements.keep-alive', [$campaign, $model->id]) }}\" />\n    @endif\n@endsection\n\n@include('editors.editor')\n\n@section('modals')\n    @parent\n    @includeWhen(!empty($editingUsers) && !empty($model), 'cruds.forms.edit_warning', ['model' => $model])\n@endsection\n"
  },
  {
    "path": "resources/views/quests/form/_copy.blade.php",
    "content": "<x-forms.field\n    field=\"copy-posts\">\n    <input type=\"hidden\" name=\"copy_elements\" />\n    <x-checkbox :text=\"__('quests.fields.copy_elements')\">\n        <input type=\"checkbox\" name=\"copy_elements\" value=\"1\" checked=\"checked\" />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/quests/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Quest::class, 'trans' => 'quests'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.instigator')\n    @include('cruds.fields.location')\n\n    @include('cruds.fields.date')\n\n    <div class=\"col-span-2\">\n        @include('cruds.forms._calendar', ['source' => $source])\n    </div>\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/quests/panels/quests.blade.php",
    "content": "<?php\n$datagridOptions = [\n    $campaign,\n    $entity->child,\n    'init' => 1\n];\nif (request()->has('parent_id')) {\n    $datagridOptions['parent_id'] = (int) request()->get('parent_id');\n}\n$datagridOptions = Datagrid::initOptions($datagridOptions);\n\n$direct = $entity->children()->count();\n$all = $entity->descendants()->count();\n?>\n<div class=\"flex gap-2 items-center justify-between\">\n    <h3 class=\"text-xl\">\n        {!! \\App\\Facades\\Module::plural(config('entities.ids.quest'), __('entities.quests')) !!}\n    </h3>\n    <div class=\"flex gap-2 flex-wrap\">\n        @if (request()->has('parent_id'))\n            <a href=\"{{ $entity->url() }}\" class=\"btn2 btn-sm\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">\n                    {{ __('crud.filters.lists.desktop.filtered', ['count' => $direct]) }}\n                </span>\n                <span class=\"xl:hidden\">\n                    {{ $direct  }}\n                </span>\n            </a>\n        @else\n            <a href=\"{{ route('entities.show', [$campaign, $entity, 'parent_id' => $entity->child->id]) }}\" class=\"btn2 btn-sm\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">\n                    {{ __('crud.filters.lists.desktop.all', ['count' => $all]) }}\n                </span>\n                <span class=\"xl:hidden\">\n                    {{ $all }}\n                </span>\n            </a>\n        @endif\n    </div>\n</div>\n<div class=\"quest-subquests overflow-x-auto\" id=\"subquests\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', ['datagridUrl' => route('quests.quests', $datagridOptions)])\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/quests/show.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n            @includeWhen($entity->children()->count() > 0, 'quests.panels.quests')\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/races/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Race::class, 'trans' => 'races'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.locations', ['from' => $model ?? null, 'quickCreator' => true])\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.status')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/races/members/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('races.members.create.helper', ['name' => $model->name]) !!}</p>\n    </x-helper>\n\n    <x-forms.field field=\"member\" :label=\"__('races.fields.members')\">\n        <select multiple=\"multiple\" name=\"members[]\" id=\"members\" class=\"form-members\" style=\"width: 100%\" data-url=\"{{ route('search-list', [$campaign, config('entities.ids.character')]) }}\" data-placeholder=\"{{ __('crud.placeholders.search') }}\">\n        </select>\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/races/members/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('races.members.create.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($model->entity)->list(),\n        Breadcrumb::show(),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['races.members.store', $campaign, $model->id]\">\n        @include('partials.forms._dialog', [\n            'title' => __('races.members.create.title', ['name' => $model->name]),\n            'content' => 'races.members._form',\n            'submit' => __('races.members.create.submit'),\n        ])\n        <input type=\"hidden\" name=\"race_id\" value=\"{{ $model->id }}\" />\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/races/panels/characters.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Race $model\n * @var \\App\\Models\\Character $character\n */\n\n$allMembers = false;\n$datagridOptions = [\n    $campaign,\n    $entity->child,\n    'init' => 1\n];\nif (request()->get('m') == \\App\\Enums\\Descendants::All->value || (!request()->has('m') && $campaign->defaultDescendantsMode() === \\App\\Enums\\Descendants::All)) {\n    $datagridOptions['m'] = \\App\\Enums\\Descendants::All;\n    $allMembers = true;\n}\n$datagridOptions = Datagrid::initOptions($datagridOptions);\n?>\n\n<div class=\"flex gap-2 items-center justify-between\">\n    <h3 class=\"text-xl\">\n        {!! \\App\\Facades\\Module::plural(config('entities.ids.character'), __('entities.characters')) !!}\n    </h3>\n    <div class=\"gap-2 flex-wrap overflow-auto\">\n        @if (!$allMembers)\n            <a href=\"{{ route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::All]) }}\" class=\"btn2 btn-sm\" data-toggle=\"tooltip\" data-title=\"{{ __('crud.filters.lists.paginated') }}\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">{{ __('crud.filters.all') }}</span>\n                ({{ $entity->child->allCharacters()->count() }})\n            </a>\n        @else\n            <a href=\"{{ route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::Direct]) }}\" class=\"btn2 btn-sm\" data-toggle=\"tooltip\" data-title=\"{{ __('crud.filters.lists.paginated') }}\">\n                <x-icon class=\"filter\" />\n                <span class=\"hidden xl:inline\">{{ __('crud.filters.direct') }}</span>\n                ({{ $entity->child->characters()->count() }})\n            </a>\n        @endif\n        @can('update', $entity)\n            <a href=\"{{ route('races.members.create', [$campaign, $entity->child]) }}\" class=\"btn2 btn-primary btn-sm\"\n               data-toggle=\"dialog\" data-url=\"{{ route('races.members.create', [$campaign, $entity->child]) }}\">\n                <x-icon class=\"plus\" />\n                <span class=\"hidden xl:inline\">{{ __('crud.add') }}</span>\n            </a>\n        @endcan\n    </div>\n</div>\n<div id=\"race-characters\">\n    <div id=\"datagrid-parent\" class=\"overflow-auto table-responsive\">\n        @include('layouts.datagrid._table', ['datagridUrl' => route('races.characters', $datagridOptions)])\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/races/panels/races.blade.php",
    "content": "<div id=\"race-races\" class=\"overflow-x-auto\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/races/races.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('races.races', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('races.races', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'races',\n        'view' => 'races.panels.races',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/races/show.blade.php",
    "content": "<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n            @include('races.panels.characters')\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/relations/datagrid.blade.php",
    "content": "<?php /** @var \\App\\Models\\Relation $model */?>\n\n{!! $datagrid\n    ->columns([\n        [\n            'field' => 'owner.name',\n            'label' => __('entities/relations.fields.owner'),\n            'class' => null,\n            'render' => function(\\App\\Models\\Relation $model) use ($campaign) {\n                return \\Illuminate\\Support\\Facades\\Blade::renderComponent(\n                    new \\App\\View\\Components\\EntityLink($model->owner, $campaign)\n                );\n            }\n        ],\n        [\n            'field' => 'target.name',\n            'label' => __('entities/relations.fields.target'),\n            'class' => null,\n            'render' => function(\\App\\Models\\Relation $model)  use($campaign) {\n                return \\Illuminate\\Support\\Facades\\Blade::renderComponent(\n                    new \\App\\View\\Components\\EntityLink($model->target, $campaign)\n                );\n            }\n        ],\n        [\n            'field' => 'relation',\n            'label' => __('entities/relations.fields.role'),\n            'render' => function(\\App\\Models\\Relation $model) {\n                if (empty($model->colour)) {\n                    return $model->relation;\n                }\n                $html = '<div class=\"flex items-center gap-1\">';\n                $colour = '<div class=\"flex-0 w-5 h-5 inline-block rounded-2xl items-center justify-center\" style=\"background-color: ' . $model->colour . '; \"></div>';\n                return $html . $colour . '<div class=\"grow\">' . $model->relation . '</div></div>';\n            }\n        ],\n        [\n            'field' => 'mirror_id',\n            'label' => '<i class=\"fa-regular fa-link\" title=\"' . __('entities/relations.hints.mirrored.title') . '\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('entities/relations.hints.mirrored.title') . '</span>',\n            'render' => function (\\App\\Models\\Relation $model) {\n                return $model->isMirrored() ? '<i class=\"fa-regular fa-link\" aria-hidden=\"true\" data-toggle=\"tooltip\" data-title=\"' . __('entities/relations.hints.mirrored.title') . '\"></i>' : null;\n            }\n        ],\n        [\n            'field' => 'is_pinned',\n            'label' => '<i class=\"fa-regular fa-thumbtack\" title=\"' . __('entities/relations.fields.is_star') . '\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('entities/relations.fields.is_star') . '</span>',\n            'render' => function (\\App\\Models\\Relation $model) {\n                return $model->isPinned() ? '<i class=\"fa-regular fa-thumbtack\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('entities/relations.fields.is_star') . '</span>' : null;\n            }\n        ],\n        [\n            'field' => 'attitude',\n            'label' => __('entities/relations.fields.attitude'),\n        ],\n        [\n            'field' => 'visibility_id',\n            'label' => '<i class=\"fa-regular fa-eye\" title=\"' . __('crud.fields.visibility') . '\" aria-hidden=\"true\"></i><span class=\"sr-only\">' . __('crud.fields.visibility') . '</span>',\n            'render' => function (\\App\\Models\\Relation $model) {\n                return view('icons.visibility', ['icon' => $model->visibilityIcon()]);\n            }\n        ],\n    ])\n    ->options(    [\n        'route' => 'relations.index',\n        'baseRoute' => 'relations',\n        'trans' => 'relations.fields.',\n        'disableEntity' => true,\n    ]\n) !!}\n"
  },
  {
    "path": "resources/views/roadmap/feature/_form.blade.php",
    "content": "<form method=\"POST\" action=\"{{ route('roadmap.store') }}\">\n    {{ csrf_field() }}\n    <div class=\"bg-purple text-white rounded-2xl p-5 flex flex-col gap-5\">\n        <h3>Share your ideas</h3>\n        <p class=\"text-light\">Have an idea to improve Kanka? Share it with our development team.</p>\n\n        @cannot ('create', \\App\\Models\\Feature::class)\n            <p>You have reached the daily limit of 10 submitted ideas! Please try again tomorrow.</p>\n        @else\n            <div class=\"field field-name\">\n                <label>One sentence that summarises your idea</label>\n                <input type=\"text\" maxlength=\"90\" class=\"rounded text-dark  w-full p-2\" name=\"name\" />\n            </div>\n\n            <div class=\"field field-description\">\n                <label>Why your idea is useful, who should benefit and how should it work?</label>\n                <textarea name=\"description\" class=\"rounded text-dark w-full p-2\" rows=\"5\"></textarea>\n            </div>\n\n            <p class=\"text-light\">Once reviewed, your idea will show up in the ideas section. If we have questions, we'll contact you on the <a href=\"https://kanka.io/go/discord\">Discord</a>.</p>\n\n            <input type=\"submit\" value=\"Submit idea\" class=\"btn-round rounded-full\" />\n        @endif\n    </div>\n</form>\n"
  },
  {
    "path": "resources/views/roadmap/feature/_idea.blade.php",
    "content": "<?php /** @var \\App\\Models\\Feature $feature */ ?>\n<div class=\"rounded-2xl overflow-hidden flex\" wire:key=\"idea-block-{{ $feature->id }}\">\n    <div class=\"flex-none w-40 py-5 bg-purple text-white\">\n\n        <div class=\"flex gap-2 align-center items-center justify-center text-md\">\n            @livewire('roadmap.upvote', ['feature' => $feature], key(\"idea-{$feature->id}\"))\n        </div>\n    </div>\n    <div class=\"bg-gray-200 p-5 grow flex flex-col gap-5\">\n        <h2 class=\"text-md\">{{ $feature->name }}</h2>\n        {!! $feature->cleanDescription() !!}\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/roadmap/feature/_progress.blade.php",
    "content": "<?php /** @var \\App\\Models\\Feature $feature */ ?>\n<div class=\"rounded-2xl bg-white p-5 flex flex-col gap-5 hover:bg-light cursor-pointer\" wire:click=\"open({{ $feature }})\">\n    <h5 class=\"break-all\">{!! $feature->name !!}</h5>\n\n    <div class=\"self-end flex align-center items-center justify-center gap-2\">\n        @include('roadmap.feature._upvote')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/roadmap/feature/_upvote.blade.php",
    "content": "<?php /** @var \\App\\Models\\Feature $feature */?>\n@if (auth()->check() && $feature->uservote)\n    <i class=\"fa-solid fa-heart\" aria-hidden=\"true\"></i>\n@else\n    <i class=\"fa-regular fa-heart\" aria-hidden=\"true\"></i>\n@endif\n{{ \\Illuminate\\Support\\Number::format($feature->upvote_count) }}\n"
  },
  {
    "path": "resources/views/roadmap/feature/show.blade.php",
    "content": "<?php /** @var \\App\\Models\\Feature $feature */ ?>\n\n<header class=\"bg-purple text-white rounded-t-2xl flex flex-col gap-2 p-4\">\n    <div class=\"flex gap-2 w-full justify-between\">\n        <h4 class=\"text-md text-left!\">\n            {!! $feature->name !!}\n        </h4>\n        <button autofocus type=\"button\" class=\"text-md\" onclick=\"this.closest('dialog').close('close')\" title=\"{{ __('crud.actions.close') }}\">\n            <x-icon class=\"fa-regular fa-times\" />\n            <span class=\"sr-only\">{{ __('crud.actions.close') }}</span>\n        </button>\n    </div>\n    <div class=\"flex gap-5 w-full\">\n        <p class=\"m-0 grow text-light\">\n            @if ($feature->category){!! $feature->category->name !!}@endif\n        </p>\n\n        <div class=\"self-end flex align-center items-center justify-center gap-2\">\n            @livewire('roadmap.upvote', ['feature' => $feature, 'col' => false])\n        </div>\n    </div>\n</header>\n<article class=\"max-w-2xl p-4 \">\n    {!! $feature->cleanDescription() !!}\n</article>\n<footer class=\"flex flex-wrap gap-3 justify-between items-start p-3 md:rounded-b\">\n\n</footer>\n"
  },
  {
    "path": "resources/views/roadmap/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */?>\n@extends('layouts.front', [\n    'title' => __('footer.roadmap'),\n    'skipPerf' => true,\n])\n\n\n@section('content')\n\n    <section class=\"bg-purple text-white gap-16\">\n        <div class=\"px-6 py-20 lg:max-w-7xl mx-auto flex flex-col gap-8\">\n            <div class=\"flex gap-10\">\n                <div class=\"grow flex flex-col gap-3 max-w-2xl\">\n                    <h1 class=\"\">Public roadmap</h1>\n\n                    <p class=\"text-light\">Welcome to Kanka's public roadmap, where you'll find features we are working on and upvote on features that you want to see added to Kanka.</p>\n\n                    <p>\n                    <a href=\"https://docs.kanka.io/en/latest/guides/roadmap.html\" class=\"text-white underline\">Learn more about the roadmap</a>\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <section class=\"p-5 max-w-7xl mx-auto\">\n        @livewire('roadmap')\n    </section>\n@endsection\n\n@section('modals')\n    <x-dialog id=\"feature-dialog\" :loading=\"true\" />\n@endsection\n"
  },
  {
    "path": "resources/views/search/fulltext.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('search/fulltext.title'),\n    'seoTitle' => __('search/fulltext.title') . ' - ' . $campaign->name,\n    'breadcrumbs' => false,\n    'canonical' => true,\n    'bodyClass' => 'kanka-fulltext',\n])\n\n\n@section('content')\n    @include('partials.errors')\n\n    <div class=\"flex flex-col gap-5\">\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h1 class=\"text-2xl category-title\">{{ __('search/fulltext.title') }}</h1>\n            <x-learn-more url=\"advanced/fulltext-search.html\" />\n        </div>\n        @include('layouts.datagrid.fulltext_search', ['route' => route('search.fulltext', $campaign), 'term' => $term])\n\n        @include('ads.top')\n\n        @if (!empty($term))\n            <p class=\"text-lg\">{!! __('search/fulltext.searching', ['term' => '<span class=\"italic\">' . $term . '</span>']) !!}</p>\n        @endif\n\n        @include('cruds.datagrids.explore', ['flat' => true, 'skipPaginationHelper' => true])\n\n    </div>\n@endsection\n\n\n"
  },
  {
    "path": "resources/views/settings/_tfa.blade.php",
    "content": "<x-box class=\"mb-12 rounded-2xl\">\n    <x-slot name=\"title\">\n        {{ __('settings.account.2fa.title') }}\n    </x-slot>\n\n    @if ($user->passwordSecurity?->google2fa_enable)\n        <p class=\"hep-block\">{{ __('settings.account.2fa.enabled') }}</p>\n\n        <div class=\"text-right\">\n            <x-buttons.confirm type=\"danger\" outline=\"true\" target=\"deactivate-2fa\">\n                {{ __('settings.account.2fa.actions.disable') }}\n            </x-buttons.confirm>\n        </div>\n    @else\n        @if(auth()->user()->isSocialLogin())\n                <p>{{ __('settings.account.2fa.social') }}</p>\n        @elseif(empty($user->passwordSecurity))\n                <p>\n                    {{ __('settings.account.2fa.helper') }} <a href=\"https://docs.kanka.io/en/latest/account/security/two-factor-authentication.html\" class=\"text-link\">{{ __('settings.account.2fa.learn_more') }}</a>\n                </p>\n\n                <p>{!! __('settings.account.2fa.enable_instructions', [\n                    'android' => '<a target=\"_blank\" href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\">Android</a>',\n                    'ios' => '<a target=\"_blank\" href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\">iOS</a>',\n                ]) !!}</p>\n                <x-form action=\"settings.security.generate-2fa\">\n                <div class=\"text-right\">\n                    <x-buttons.confirm type=\"primary\">\n                        {{ __('settings.account.2fa.generate_qr') }}\n                    </x-buttons.confirm>\n                </div>\n            </x-form>\n        @elseif(!$user->passwordSecurity->google2fa_enable)\n            <x-form action=\"settings.security.enable-2fa\">\n                <x-grid type=\"1/1\">\n                    <p>{{ __('settings.account.2fa.activation_helper') }}</p>\n\n                    <x-forms.field field=\"qr-code\" required :label=\"__('settings.account.2fa.fields.qrcode')\">\n                        {!! $user->passwordSecurity->getGoogleQR() !!}\n                    </x-forms.field>\n                </x-grid>\n                <div class=\"flex flex-wrap gap-2 justify-between items-end\">\n                    <x-forms.field field=\"otp\" required :label=\"__('settings.account.2fa.fields.otp')\">\n                        <input type=\"password\" name=\"otp\" maxlength=\"12\" />\n                    </x-forms.field>\n\n                        <x-buttons.confirm type=\"primary\">\n                            {{ __('settings.account.2fa.actions.finish') }}\n                        </x-buttons.confirm>\n                </div>\n            </x-form>\n       @endif\n  @endif\n</x-box>\n\n@section('modals')\n    @parent\n    @if($user->passwordSecurity?->google2fa_enable)\n        <x-form :action=\"['settings.security.disable-2fa']\">\n            <x-dialog id=\"deactivate-2fa\" :title=\"__('settings.account.2fa.disable.title')\">\n                <p class=\"\">\n                    {{ __('settings.account.2fa.disable.helper') }}\n                </p>\n                <div class=\"w-full\">\n                    <x-buttons.confirm type=\"danger\" outline=\"true\" full=\"true\">\n                        <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n                        {{ __('crud.actions.confirm') }}\n                    </x-buttons.confirm>\n                </div>\n            </x-dialog>\n        </x-form>\n    @endif\n@endsection\n"
  },
  {
    "path": "resources/views/settings/account.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */?>\n@extends('layouts.app', [\n    'title' => __('settings.account.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n\n    <x-box class=\"mb-12 rounded-2xl\">\n        <x-slot name=\"title\">\n            {{ __('settings/account.title') }}\n        </x-slot>\n        <div class=\"flex flex-col gap-4\">\n            <div class=\"flex gap-2 items-center flex-wrap\">\n                <div class=\"w-40 font-extrabold\">\n                    {{ __('auth.login.fields.email') }}\n                </div>\n                <div class=\"grow\">\n                    {{ auth()->user()->email }}\n                </div>\n                <div class=\"flex-none\">\n                    <button class=\"btn2 btn-outline\" data-toggle=\"dialog\" data-url=\"{{  route('account.email') }}\">\n                        {{ __('account/email.actions.update') }}\n                    </button>\n                </div>\n            </div>\n            <hr />\n            <div class=\"flex gap-2 items-center flex-wrap\">\n                <div class=\"w-40 font-extrabold\">\n                    {{ __('auth.login.fields.password') }}\n                </div>\n                @if (!$user->isSocialLogin())\n                <div class=\"grow\">\n                    *********\n                </div>\n                <div class=\"flex-none\">\n                    <button class=\"btn2 btn-outline\" data-toggle=\"dialog\" data-url=\"{{  route('account.password') }}\">\n                        {{ __('account/password.actions.update') }}\n                    </button>\n                </div>\n                @else\n                    <div class=\"grow\">\n                        {!! __('account/social.info', ['provider' => '<strong>' . ucfirst($user->provider ?? 'debug') . '</strong>']) !!}\n                    </div>\n                    <div class=\"flex-none\">\n                        <button class=\"btn2 btn-outline\" data-toggle=\"dialog\" data-url=\"{{  route('account.social') }}\">\n                            {{ __('settings.account.actions.social') }}\n                        </button>\n                    </div>\n                @endif\n            </div>\n        </div>\n    </x-box>\n    @if (config('google2fa.enabled'))\n        @livewire('users.otp')\n    @endif\n\n    <x-box class=\"border-error border rounded-2xl\">\n        <x-slot name=\"title\">\n            <span class=\"text-error-content\">{{ __('profiles.sections.dangerzone') }}</span>\n        </x-slot>\n\n        <div class=\"flex flex-col md:flex-row gap-4 md:justify-between\">\n            <div class=\"flex flex-col gap-4\">\n                <p>{{ __('profiles.sections.delete.helper') }}</p>\n\n                @if (auth()->user()->subscribed('kanka') && !auth()->user()->subscription('kanka')->canceled())\n                    <p>\n                        {!! __('profiles.sections.delete.subscribed', [\n        'subscription' => '<a href=\"' . route('settings.subscription') . '\" class=\"text-link\">' . __('settings.menu.subscription') . '</a>'\n    ]) !!}\n                    </p>\n                @endif\n                @if (!auth()->user()->subscribed('kanka') || auth()->user()->subscription('kanka')->canceled())\n                    <div class=\"flex justify-end\">\n                    <x-buttons.confirm type=\"danger\" outline target=\"delete-account\">\n                        <x-icon class=\"trash\" />\n                        <span>{{ __('profiles.sections.delete.delete') }}</span>\n                    </x-buttons.confirm>\n                    </div>\n                @endif\n            </div>\n        </div>\n    </x-box>\n\n@endsection\n\n@section('modals')\n    @parent\n    <x-dialog id=\"delete-account\" :title=\"__('profiles.sections.delete.title')\">\n        <p class=\"\">\n            {{ __('profiles.sections.delete.helper') }}\n        </p>\n        <p class=\"\">\n            {{ __('profiles.sections.delete.warning') }}\n        </p>\n\n        <x-form :action=\"['settings.account.destroy']\" method=\"PATCH\" class=\"w-full\">\n            <x-grid type=\"1/1\">\n                <p>\n                    {!! __('profiles.sections.delete.goodbye', ['code' => '<code>goodbye</code>']) !!}\n                </p>\n                <x-forms.field field=\"goodbye\" required>\n                    <input type=\"text\" name=\"goodbye\" @if (config('app.debug')) value=\"goodbye\" @endif required  />\n                </x-forms.field>\n                <x-buttons.confirm type=\"danger\" full=\"true\">\n                    <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n                    {{ __('profiles.sections.delete.confirm') }}\n                </x-buttons.confirm>\n            </x-grid>\n        </x-form>\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/api/_form.blade.php",
    "content": "\n<x-grid type=\"1/1\">\n    <x-forms.field\n        field=\"name\"\n        required=\"true\"\n        label=\"{{ __('settings/api.tokens.form.name') }}\">\n        <input type=\"text\" name=\"name\" placeholder=\"{{ __('settings/api.tokens.form.name_placeholder') }}\" maxlength=\"40\" />\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/api/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('settings.api.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['settings.api.store']\">\n        @include('partials.forms.form', [\n            'title' => __('settings/api.tokens.new'),\n            'content' => 'settings.api._form',\n            'submit' => __('crud.save'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/api.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('settings.api.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n    <div class=\"container mx-auto p-4 max-w-4xl flex flex-col gap-4\">\n        <x-hero>\n            <x-slot name=\"title\">{{ __('settings.api.title') }}</x-slot>\n            <x-slot name=\"subtitle\">{{ __('settings.api.helper') }}</x-slot>\n            <x-slot name=\"link\">\n                <a href=\"{{ route('larecipe.index') }}\" class=\"text-link\">\n                    <x-icon class=\"link\" />\n                    {{ __('front.features.api.link') }}\n                </a>\n            </x-slot>\n        </x-hero>\n\n        <div class=\"flex justify-between items-center\">\n            <span class=\"text-lg\">\n                {{ __('settings/api.tokens.title') }}\n            </span>\n            <a href=\"{{ route('settings.api.create') }}\" class=\"btn2 btn-primary btn-outline btn-sm\"\n                data-toggle=\"dialog\" data-url=\"{{ route('settings.api.create') }}\">\n                <x-icon class=\"fa-regular fa-plus\" />\n                <span class=\"hidden lg:inline\"> {{ __('settings/api.tokens.new') }}</span>\n            </a>\n        </div>\n        @if (session('new_token'))\n            <x-box>\n                <p><strong>{{ __('settings/api.new.title') }}</strong></p>\n                <span class=\"cursor-pointer text-link break-all\" data-clipboard=\"{{ session('new_token') }}\" data-toast=\"{{ __('settings/api.new.copy') }}\" data-toggle=\"tooltip\" data-title=\"Click to copy to the clipboard\">\n                    {{ session('new_token') }}\n                    <x-icon class=\"copy\" />\n                </span>\n            </x-box>\n        @endif\n        @if (empty($tokens))\n            <p>\n                {{ __('settings/api.tokens.empty') }}\n            </p>\n        @else\n            <div class=\"table-responsive\">\n                <table class=\"table table-default table-borderless table-hover\">\n                    <thead>\n                        <tr class=\" \">\n                            <th >{{ __('crud.fields.name') }}</th>\n                            <th class=\"text-right\">{{ __('crud.actions.actions') }}</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        @foreach ($tokens as $token)\n                            <tr class=\"\">\n                                <td class=\"align-middle\">\n                                    {{ $token['name'] }}\n                                </td>\n                                <td class=\"align-middle text-right\">\n                                    <form action=\"{{ route('settings.api.revoke', ['token' => $token['id']]) }}\" method=\"POST\" class=\"inline\">\n                                        <x-buttons.confirm-delete :route=\"route('settings.api.revoke', ['token' => $token['id']])\" />\n                                    </form>\n                                </td>\n                            </tr>\n                        @endforeach\n                    </tbody>\n                </table>\n            </div>\n        @endif\n        @if ($tokens->hasPages())\n            {!! $tokens->links() !!}\n        @endif\n    @if($applications->count() > 0)\n        <div class=\"flex justify-between items-center \">\n            <span class=\"text-lg\">\n                {{ __('settings/api.applications.title') }}\n            </span>\n        </div>\n\n            <table class=\"table table-default table-borderless table-hover\">\n            <thead>\n                <tr class=\" \">\n                    <th >{{ __('crud.fields.name') }}</th>\n                    <th >{{ __('settings/api.fields.scopes') }}</th>\n                    <th class=\"text-right\">{{ __('crud.actions.actions') }}</th>\n                </tr>\n            </thead>\n            <tbody>\n                @foreach ($applications as $application)\n                    <tr class=\"\">\n                        <td class=\"align-middle\">\n                            {{ $application->client['name'] }}\n                        </td>\n                        <td class=\"align-middle\">\n                            {{implode(\", \", $application['scopes'])}}\n                        </td>\n                        <td class=\"align-middle text-right\">\n                            <form action=\"{{ route('settings.api.revoke', ['token' => $application['id']]) }}\" method=\"POST\" class=\"inline\">\n                                <x-buttons.confirm-delete :route=\"route('settings.api.revoke', ['token' => $application['id']])\" confirm=\"settings/api.revoke-confirm\" delete=\"settings/api.revoke\"/>\n                            </form>\n                        </td>\n                    </tr>\n                @endforeach\n            </tbody>\n        </table>\n    @endif\n    @if (request()->has('clients'))\n            <div class=\"flex justify-between items-center\">\n                <span class=\"text-lg\">\n                    {{ __('settings/api.clients.title') }}\n                </span>\n\n                <a href=\"{{ route('settings.client.create') }}\" class=\"btn2 btn-primary btn-outline btn-sm\"\n                    data-toggle=\"dialog\" data-url=\"{{ route('settings.client.create') }}\">\n                    <x-icon class=\"fa-regular fa-plus\" />\n                    <span class=\"hidden lg:inline\">{{ __('settings/api.clients.new') }}</span>\n                </a>\n            </div>\n\n            @if ($clients->count() == 0)\n                <p>{{ __('settings/api.clients.empty') }}</p>\n            @else\n                <div class=\"table-responsive\">\n                    <table class=\"table table-default table-borderless table-hover\">\n                        <thead>\n                            <tr class=\" \">\n                                <th >{{ __('settings/api.fields.client') }}</th>\n                                <th >{{ __('crud.fields.name') }}</th>\n                                <th >{{ __('settings/api.fields.secret') }}</th>\n                                <th class=\"text-right\">{{ __('crud.actions.actions') }}</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            @foreach ($clients as $client)\n                                <tr class=\"\">\n                                    <td class=\"align-middle\">\n                                        {{ $client['id'] }}\n                                    </td>\n                                    <td class=\"align-middle\">\n                                        {{ $client['name'] }}\n                                    </td>\n                                    <td class=\"align-middle\">\n                                        <code>******</code>\n                                    </td>\n                                    <td class=\"align-middle text-right\">\n                                        <a href=\"{{ route('settings.client.edit', ['client' => $client['id']]) }}\" class=\"btn2 btn-primary btn-outline btn-sm\"\n                                            data-toggle=\"dialog\" data-url=\"{{ route('settings.client.edit', ['client' => $client['id']]) }}\">\n                                            <x-icon class=\"fa-regular fa-pencil\" />\n                                            <span class=\"hidden lg:inline\">Edit</span>\n                                        </a>\n                                        <form action=\"{{ route('settings.client.revoke', ['client' => $client['id']]) }}\" method=\"POST\" class=\"inline\">\n                                            <x-buttons.confirm-delete :route=\"route('settings.client.revoke', ['client' => $client['id']])\" />\n                                        </form>\n                                    </td>\n                                </tr>\n                            @endforeach\n                        </tbody>\n                    </table>\n            @endif\n        @if ($clients->hasPages())\n            {!! $clients->links() !!}\n        @endif\n    @endif\n@endsection\n"
  },
  {
    "path": "resources/views/settings/appearance.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('settings.layout.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n@php\n$boxClass = \"rounded-2xl p-4 bg-box flex flex-col gap-2 hover:shadow-xs\";\n$highlightClass = 'shadow-xs border-primary border-solid border-2';\n@endphp\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">{{ __('settings.menu.appearance') }}</x-slot>\n        <x-slot name=\"subtitle\">{{ __('settings/appearance.dismissible.main') }}</x-slot>\n    </x-hero>\n    <x-grid type=\"1/1\">\n        <x-form :action=\"['settings.appearance.update']\" method=\"PATCH\">\n            <div class=\"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4 lg:gap-8\">\n                <div class=\"{{ $boxClass }} {{ $highlight === 'dark' ? $highlightClass : '' }}\">\n                    <div class=\"flex gap-2 justify-between items-center mb-2\">\n                        <div class=\"font-light text-xl flex items-center gap-2\">\n                            <x-icon class=\"fa-regular fa-moon-over-sun\" />\n                            {{ __('settings/appearance.fields.theme') }}\n                        </div>\n                        <a href=\"https://docs.kanka.io/en/latest/account/appearance.html#theme\" target=\"_blank\" class=\"text-link\" data-tooltip data-title=\"{{ __('settings/appearance.actions.learn-more') }}\">\n                            <x-icon class=\"fa-regular fa-arrow-up-right-from-square\" /> {{ __('general.learn-more') }}\n                        </a>\n                    </div>\n                    <x-helper>\n                        <p>{{ __('settings/appearance.helpers.theme')}}</p>\n                        <p>{{ __('settings/appearance.helpers.overridable')}}</p>\n                    </x-helper>\n                    <x-forms.select\n                        name=\"theme\"\n                        :options=\"[\n                            '' => __('profiles.theme.themes.default'),\n                            'dark' => __('profiles.theme.themes.dark'),\n                            'midnight' => __('profiles.theme.themes.midnight'),]\"\n                        radio\n                        :selected=\"auth()->user()->theme\" class=\"self-end w-full border rounded p-2\" />\n                </div>\n\n                <div class=\"{{ $boxClass }}\">\n                    <div class=\"flex gap-2 justify-between items-center mb-2\">\n                        <div class=\"font-light text-xl flex items-center gap-2\">\n                            <x-icon class=\"fa-regular fa-calendar\" />\n                            {{ __('settings/appearance.fields.date-format') }}\n                        </div>\n                        <a href=\"https://docs.kanka.io/en/latest/account/appearance.html#date-formatting\" target=\"_blank\" class=\"text-link\" data-tooltip data-title=\"{{ __('settings/appearance.actions.learn-more') }}\">\n                            <x-icon class=\"fa-regular fa-arrow-up-right-from-square\" /> {{ __('general.learn-more') }}\n                        </a>\n                    </div>\n\n                    <x-helper>\n                        <p>{{ __('settings/appearance.helpers.date-format')}}</p>\n                    </x-helper>\n                    <x-forms.select name=\"date_format\" :options=\"[\n                        null => 'Month d, Y',\n                        'Y-m-d' => 'Y-m-d',\n                        'd.m.Y' => 'd.m.Y',\n                        'd-m-y' => 'd-m-y',\n                        'm/d/Y' => 'm/d/Y',\n                        ]\" :selected=\"auth()->user()->date_format\" class=\"self-end w-full border rounded p-2\" />\n\n                </div>\n\n                <div class=\"{{ $boxClass }} {{ $highlight === 'campaign-switcher' ? $highlightClass : '' }}\">\n                    <div class=\"flex gap-2 justify-between items-center mb-2\">\n                        <div class=\"font-light text-xl flex items-center gap-2\">\n                            <x-icon class=\"fa-regular fa-arrow-down-a-z\" />\n                            {{ __('settings/appearance.fields.campaign-order') }}\n                        </div>\n                        <a href=\"https://docs.kanka.io/en/latest/account/appearance.html#campaign-order\" target=\"_blank\" class=\"text-link\" data-tooltip data-title=\"{{ __('settings/appearance.actions.learn-more') }}\">\n                            <x-icon class=\"fa-regular fa-arrow-up-right-from-square\" /> {{ __('general.learn-more') }}\n                        </a>\n                    </div>\n\n                    <x-helper>\n                        <p>{{ __('settings/appearance.helpers.campaign-order')}}</p>\n                    </x-helper>\n\n                    <x-forms.select name=\"campaign_switcher_order_by\" :options=\"[\n                        null => __('settings/appearance.campaign-switcher.date_created'),\n                        'r_date_created' => __('settings/appearance.campaign-switcher.r_date_created'),\n                        'alphabetical' => __('settings/appearance.campaign-switcher.alphabetical'),\n                        'r_alphabetical' => __('settings/appearance.campaign-switcher.r_alphabetical'),\n                        'date_joined' => __('settings/appearance.campaign-switcher.date_joined'),\n                        'r_date_joined' => __('settings/appearance.campaign-switcher.r_date_joined'),\n                        ]\" :selected=\"auth()->user()->campaignSwitcherOrderBy\" class=\"self-end w-full border rounded p-2\" />\n                </div>\n\n                @if (!empty($editorOptions))\n                    <div\n                        class=\"{{ $boxClass }}\"\n                        x-data=\"{ editor: '{{ auth()->user()->editor }}' }\">\n                        <div class=\"flex gap-2 justify-between\">\n                            <div class=\"font-light text-xl flex items-center gap-2\">\n                                <x-icon class=\"fa-regular fa-typewriter\" />\n                                {{ __('settings/appearance.fields.editor') }}\n                            </div>\n                            <a href=\"https://docs.kanka.io/en/latest/account/appearance.html#text-editor\" target=\"_blank\" class=\"text-link\" data-tooltip data-title=\"{{ __('settings/appearance.actions.learn-more') }}\">\n                                <x-icon class=\"fa-regular fa-arrow-up-right-from-square\" /> {{ __('general.learn-more') }}\n                            </a>\n                        </div>\n                        <p class=\"text-sm grow\">{{ __('settings/appearance.helpers.editors') }}</p>\n                        <x-forms.select\n                            x-model=\"editor\"\n                            name=\"editor\"\n                            :options=\"$editorOptions\"\n                            :selected=\"auth()->user()->editor\"\n                            class=\"self-end w-full border rounded p-2\" />\n\n                        <x-helper class=\"text-xs\" x-show=\"editor === 'legacy'\" x-cloak>\n                            <p>{{ __('settings/appearance.editors.helpers.legacy') }}</p>\n                        </x-helper>\n\n                        <x-helper class=\"text-xs\" x-show=\"editor === 'tiptap'\" x-cloak>\n                            <p>{{ __('settings/appearance.editors.helpers.tiptap') }}</p>\n                            <a href=\"https://docs.google.com/forms/d/e/1FAIpQLSccG0m-Ka1uTNHunCqOeSyhHq84iVxQO8z2hzOT0ALsjUPdMw/viewform?usp=publish-editor\" target=\"_blank\" class=\"text-link\">\n                                <p>{{ __('settings/appearance.editors.helpers.feedback') }}</p>\n                            </a>\n                        </x-helper>\n                    </div>\n                @endif\n\n                <div class=\"{{ $boxClass }}\">\n                    <div class=\"flex gap-2 justify-between items-center mb-2\">\n                        <div class=\"font-light text-xl flex items-center gap-2\">\n                            <x-icon class=\"fa-regular fa-at\" />\n                            {{ __('settings/appearance.fields.mentions') }}\n                        </div>\n                        <a href=\"https://docs.kanka.io/en/latest/account/appearance.html#mentions\" target=\"_blank\" class=\"text-link\" data-tooltip data-title=\"{{ __('settings/appearance.actions.learn-more') }}\">\n                            <x-icon class=\"fa-regular fa-arrow-up-right-from-square\" /> {{ __('general.learn-more') }}\n                        </a>\n                    </div>\n                    <x-helper>\n                        <p>{!! __('settings/appearance.helpers.advanced-mentions') !!}</p>\n                    </x-helper>\n                    <div class=\"note-editing-area\">\n                        <x-forms.select name=\"advanced_mentions\" radio :options=\"[\n                                0 => __('settings/appearance.mentions.default', ['mention' => '<span class=\\'mention\\'>Entity</span>']),\n                                1 => __('settings/appearance.mentions.advanced', ['code' => '<code>[entity:123]</code>']),\n                            ]\" :selected=\"auth()->user()->alwaysAdvancedMentions()\" class=\"self-end w-full border rounded p-2\"/>\n                    </div>\n                </div>\n\n            </div>\n\n            <div class=\"text-center py-4\">\n                <x-buttons.confirm type=\"primary\" >\n                    <x-icon class=\"save\" />\n                    <span>{{ __('settings/appearance.actions.save') }}</span>\n                </x-buttons.confirm>\n            </div>\n            @if (!empty($from))\n                <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\" />\n            @endif\n        </x-form>\n    </x-grid>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/apps.blade.php",
    "content": "<?php /** @var \\App\\Models\\UserApp $discord */?>\n@extends('layouts.app', [\n    'title' => __('settings.apps.title'),\n    'description' => '',\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">{{ __('settings.apps.title') }}</x-slot>\n        <x-slot name=\"subtitle\">{{ __('settings.apps.benefits') }}</x-slot>\n    </x-hero>\n\n    <x-grid type=\"1/1\">\n        @include('partials.errors')\n            <x-box>\n                <x-grid type=\"1/1\">\n                    <div class=\"flex gap-2 items-center \">\n                        <div class=\"flex-0\">\n                            <x-icon class=\"fa-brands fa-discord fa-2x text-indigo-400\" />\n                        </div>\n                        <div class=\"grow text-xl truncate\">\n                            Discord\n                        </div>\n                        <div class=\"flex-0\">\n                            @if($discord = auth()->user()->apps()->app('discord')->first())\n                                <x-buttons.confirm type=\"danger\" target=\"remove-discord\" outline=\"true\" size=\"sm\">\n                                    <x-icon class=\"fa-solid fa-link-slash\" />\n                                    <span>\n                                        {{ __('settings.apps.actions.remove') }}\n                                        @if (!empty($discord->settings)) {{ $discord->settings['username'] }} @endif\n                                    </span>\n                                </x-buttons.confirm>\n                            @else\n                                <a href=\"https://discord.com/api/oauth2/authorize?client_id={{ config('discord.client_id') }}&redirect_uri={{ url('/settings/discord-callback') }}&response_type=code&scope=identify+guilds+guilds.join\" class=\"btn2 btn-primary btn-sm\">\n                                    {{ __('settings.apps.actions.connect') }}\n                                </a>\n                            @endif\n                        </div>\n                    </div>\n\n                    <p class=\"text-neutral-content\">\n                        {{ __('settings.apps.discord.text') }}\n                    </p>\n                </x-grid>\n            </x-box>\n    </x-grid>\n@endsection\n\n@section('modals')\n    @parent\n\n    <x-dialog id=\"remove-discord\" :title=\"__('crud.delete_modal.title')\">\n        <p class=\"my-4\">{{ __('settings.apps.discord.confirm') }}</p>\n\n        <div class=\"grid grid-cols-2 gap-2 w-full\">\n            <x-buttons.confirm type=\"ghost\" full=\"true\" dismiss=\"dialog\">\n                {{ __('crud.cancel') }}\n            </x-buttons.confirm>\n\n            <x-form method=\"DELETE\" :action=\"['settings.discord.destroy']\" id=\"delete-form-discord\">\n                <x-buttons.confirm type=\"danger\" outline=\"true\" full=\"true\">\n                    {{ __('crud.actions.confirm') }}\n                </x-buttons.confirm>\n            </x-form>\n        </div>\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/boosters/_campaign.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignBoost $boost\n */\n$boost = isset($boost) ? $boost : $campaign->boosts->first();?>\n<div class=\"flex rounded-2xl shadow-xs hover:shadow-md gap-3 px-3 bg-box py-3 flex-nowrap justify-between items-center\">\n    <div class=\"flex gap-4 items-center\">\n        @if ($campaign->image)\n            <img src=\"{{ $campaign->thumbnail(320, 240) }}\" alt=\"{{ $campaign->name }}\" loading=\"lazy\" class=\"rounded-full w-16 h-16\" />\n        @else\n            <img src=\"https://th.kanka.io/zzKcBpijSBvm4rPWdzRpI82pTNQ=/320x240/smart/src/app/backgrounds/mountain-background-medium.jpg\" alt=\"{{ $campaign->name }}\" loading=\"lazy\" class=\"rounded-full w-16 h-16\" />\n        @endif\n        <div class=\"flex flex-col gap-1\">\n            <a class=\"name text-xl\" href=\"{{ route('dashboard', $campaign) }}\">\n                {!! \\Illuminate\\Support\\Str::limit($campaign->name, 28) !!}\n            </a>\n\n            <p class=\"mb-0 text-neutral-content\">\n                @if ($campaign->premium())\n                    <x-icon class=\"premium\" />\n                    {!! __('settings/boosters.campaign.premium', [\n        'user' => '<a href=\"' . route('users.profile', $boost->user_id) . '\" class=\"text-link\">' . $boost->user->displayName() . '</a>',\n        'time' => $boost->created_at->format('M Y')\n        ]) !!}\n                @elseif ($campaign->superboosted())\n                    <x-icon class=\"fa-regular fa-rocket\" />\n                    {!! __('settings/boosters.campaign.superboosted', [\n        'user' => '<a href=\"' . route('users.profile', $boost->user_id) . '\" class=\"text-link\">' . $boost->user->displayName() . '</a>',\n        'time' => $boost->created_at->format('M Y')\n        ]) !!}\n                @elseif ($campaign->boosted())\n                    <x-icon class=\"fa-regular fa-rocket\" />\n                    {!! __('settings/boosters.campaign.boosted', [\n        'user' => '<a href=\"' . route('users.profile', $boost->user_id) . '\" class=\"text-link\">' . $boost->user->displayName() . '</a>',\n        'time' => $boost->created_at->format('M Y')\n            ]) !!}\n                @else\n                    {{ __('settings/boosters.campaign.standard') }}\n                @endif\n            </p>\n        </div>\n\n    </div>\n    <div class=\"\">\n        @if (auth()->user()->hasBoosterNomenclature())\n        <div class=\"dropdown\">\n            <a class=\"dropdown-toggle p-2 btn2 btn-ghost\" data-dropdown aria-expanded=\"false\" data-placement=\"right\" data-tree=\"escape\">\n                <i class=\"fa-regular fa-ellipsis-h\" data-tree=\"escape\"></i>\n                <span class=\"sr-only\">{{ __('crud.actions.actions') }}</span>\n            </a>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                @if (!$campaign->boosted())\n                    <x-dropdowns.item\n                        link=\"#\"\n                        :dialog=\"route('campaign_boosts.create', ['campaign' => $campaign, 'boost' => 1])\">\n                        {!! __('settings/boosters.boost.title', ['campaign' => \\Illuminate\\Support\\Str::limit($campaign->name, 25)]) !!}\n                    </x-dropdowns.item>\n                    <x-dropdowns.item\n                        link=\"#\"\n                        :dialog=\"route('campaign_boosts.create', ['campaign' => $campaign, 'superboost' => 1])\">\n                        {!! __('settings/boosters.superboost.title', ['campaign' => \\Illuminate\\Support\\Str::limit($campaign->name, 25)]) !!}\n                    </x-dropdowns.item>\n                @elseif (auth()->user()->can('destroy', $boost))\n                    @if (!$campaign->superboosted())\n                        <x-dropdowns.item\n                            link=\"#\"\n                            :dialog=\"route('campaign_boosts.edit', [$boost])\">\n                            {!! __('settings/boosters.superboost.title', ['campaign' => \\Illuminate\\Support\\Str::limit($campaign->name, 25)]) !!}\n                        </x-dropdowns.item>\n                        <x-dropdowns.divider />\n                        <x-dropdowns.item\n                            link=\"#\"\n                            :dialog=\"route('campaign_boost.confirm-destroy', $boost)\">\n                            {!! __('settings/boosters.boost.actions.remove', ['campaign' => \\Illuminate\\Support\\Str::limit($campaign->name, 25)]) !!}\n                        </x-dropdowns.item>\n                    @else\n                        <x-dropdowns.item\n                            link=\"#\"\n                            css=\"text-error-content hover:bg-error\"\n                            :dialog=\"route('campaign_boost.confirm-destroy', $boost)\">\n                            {!! __('settings/boosters.superboost.actions.remove', ['campaign' => \\Illuminate\\Support\\Str::limit($campaign->name, 25)]) !!}\n                        </x-dropdowns.item>\n                    @endif\n                @endif\n            </div>\n        </div>\n        @else\n            @if (!$campaign->premium())\n                <a href=\"#\" class=\"btn2 btn-outline btn-sm\" data-toggle=\"dialog\" data-url=\"{{ route('campaign_boosts.create', ['campaign' => $campaign]) }}\">\n                    <x-icon class=\"premium\" />\n                    {!! __('settings/premium.actions.unlock', ['campaign' => \\Illuminate\\Support\\Str::limit($campaign->name, 25)]) !!}\n                </a>\n            @elseif (auth()->user()->can('destroy', $boost))\n                <a href=\"#\" class=\"btn2 btn-error btn-outline btn-sm\" data-toggle=\"dialog\" data-url=\"{{ route('campaign_boost.confirm-destroy', $boost) }}\">\n                    <x-icon class=\"trash\" />\n                    <span class=\"hidden lg:inline\">\n                    {!! __('settings/premium.actions.remove', ['campaign' => \\Illuminate\\Support\\Str::limit($campaign->name, 25)]) !!}\n                    </span>\n                    <span class=\"lg:hidden\">{{ __('crud.remove') }}</span>\n                </a>\n            @endif\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/settings/boosters/create/_actions.blade.php",
    "content": "@if ($campaign->boosted())\n    <?php return; ?>\n@elseif (auth()->user()->availableBoosts() < $cost)\n    <?php return; ?>\n@endif\n\n<button type=\"submit\" class=\"btn2 btn-primary\">\n    <x-icon class=\"fa-regular fa-rocket\" />\n    <span class=\"\">{{ __('settings/boosters.' . ($superboost ? 'superboost' : 'boost') . '.actions.confirm') }}</span>\n</button>\n@if (isset($canSuperboost) && $canSuperboost)\n    <button type=\"submit\" class=\"btn2 btn-primary\" name=\"superboost\">\n        <x-icon class=\"fa-regular fa-rocket\" />\n        <span class=\"\">{!! __('settings/boosters.superboost.actions.instead', ['count' => '<strong>3</strong>']) !!}</span>\n    </button>\n@endif\n"
  },
  {
    "path": "resources/views/settings/boosters/create/_footer.blade.php",
    "content": "ASAS\n"
  },
  {
    "path": "resources/views/settings/boosters/create/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n\n@if ($campaign->boosted())\n    <p>{!! __('settings/boosters.boost.errors.boosted', ['campaign' => $campaign->name])!!}</p>\n@elseif(auth()->user()->availableBoosts() < $cost)\n    @can('boost', auth()->user())\n        <p class=\"\">\n            {!! __('settings/boosters.boost.errors.out-of-boosters', [\n                'upgrade' => '<a href=\"' . route('settings.subscription') . '\" class=\"text-link\">' . __('settings/boosters.boost.upgrade') . '</a>',\n                'cost' => '<code>' . $cost . '</code>',\n                'available' => '<strong>' . auth()->user()->availableBoosts() . '</strong>'\n            ]) !!}\n        </p>\n\n        <div class=\"text-center\">\n            <button type=\"button\" class=\"btn px-8 rounded-full mr-5\" data-dismiss=\"modal\">\n                {{ __('crud.cancel') }}\n            </button>\n            <a href=\"{{ route('settings.subscription') }}\" class=\"btn2 bg-boost text-white rounded-full px-8\">\n                {!! __('settings/boosters.boost.actions.upgrade') !!}\n            </a>\n        </div>\n    @else\n        <p class=\"\">\n            {{ __('settings/boosters.boost.pitch') }}\n        </p>\n\n        <div class=\"text-center \">\n            <a href=\"{{ \\App\\Facades\\Domain::toFront('premium')  }}\" target=\"_blank\" class=\"btn2 bg-boost text-white rounded-full px-8 mr-5\">\n                {!! __('callouts.booster.learn-more') !!}\n            </a>\n            <a href=\"{{ route('settings.subscription') }}\" class=\"btn2 bg-boost text-white rounded-full px-8\">\n                {!! __('settings/boosters.boost.actions.subscribe') !!}\n            </a>\n        </div>\n    @endif\n@else\n    <p class=\"\">\n        {!! __('settings/boosters.' . ($superboost ? 'superboost' : 'boost') . '.confirm', [\n    'cost' => '<code>' . $cost . '</code>',\n    'campaign' => '<strong>' . $campaign->name . '</strong>'\n    ])!!}\n    </p>\n    <p class=\"\">{{ __('settings/boosters.boost.duration') }}</p>\n@endif\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/boosters/create.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignBoost $boost\n */\n?>\n<x-form :action=\"['campaign_boosts.store']\">\n\n    <div class=\"flex flex-col gap-5 rounded p-4 shadow-sm\">\n        @include('settings.boosters.create._form')\n        <div class=\"flex gap-5 justify-end\">\n            @include('settings.boosters.create._actions')\n        </div>\n    </div>\n    <input type=\"hidden\" name=\"action\" value=\"{{ $superboost ? 'superboost' : 'boost' }}\" />\n    <input type=\"hidden\" name=\"campaign_id\" value=\"{{ $campaign->id }}\" />\n</x-form>\n"
  },
  {
    "path": "resources/views/settings/boosters/index.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\CampaignBoost $boost\n * @var \\App\\Models\\Campaign $campaign\n */\n?>\n@extends('layouts.app', [\n    'title' => __('settings/boosters.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n])\n\n@section('content')\n    <x-grid type=\"1/1\">\n        @include('partials.errors')\n\n        <h1 class=\"text-2xl\">\n            <x-icon class=\"premium\" />\n            {{ __('settings/boosters.title') }}\n        </h1>\n\n        @if (auth()->user()->hasBoosterNomenclature())\n            <x-alert type=\"warning\">\n                <x-grid type=\"1/1\">\n                    <h3 class=\"m-0 text-xl\">Legacy boosters</h3>\n                    <p>\n                        Dear user, you are still using our legacy campaign boosters concept. Switching to premium campaigns will unboost your campaigns and give you a number of premium campaigns based on your subscription.\n                    </p>\n                    <p>\n                        As a reminder, premium campaigns are just a renamed superboosted campaign, plus a bunch of new features like <strong>family trees</strong> and <strong>custom modules</strong>. Owlbears get 1, Wyverns 3, and Elementals 7.\n                    </p>\n                    <p>\n                        This action is permanent and cannot be reverted.\n                    </p>\n\n                    <button class=\"btn2 btn-block btn-secondary\"\n                            data-toggle=\"dialog\"\n                            data-target=\"switch-dialog\">\n                        Switch to premium\n                    </button>\n                </x-grid>\n            </x-alert>\n        @endif\n\n        <x-box>\n            <x-grid type=\"1/1\">\n                <h3 class=\"text-xl\">{{ __('settings/boosters.pitch.title') }}</h3>\n                <p class=\"\">{{ __('settings/boosters.pitch.description') }}</p>\n\n                <h4 class=\"text-lg\">{{ __('settings/boosters.pitch.benefits.title') }}</h4>\n                <div class=\"grid grid-cols-2 lg:grid-cols-3 gap-1\">\n                    <div class=\"flex items-center\">\n                        <div class=\"p-1 w-12 flex-none\">\n                            <x-icon class=\"fa-solid fa-palette fa-2x\" />\n                        </div>\n                        <div class=\"p-1\">\n                            {{ __('settings/boosters.pitch.benefits.customisable') }}\n                        </div>\n                    </div>\n                    <div class=\"flex items-center\">\n                        <div class=\"p-1 w-12 flex-none\">\n                            <i class=\"fa-solid fa-image-portrait fa-2x\" aria-hidden=\"true\"></i>\n                        </div>\n                        <div class=\"p-1\">\n                            {{ __('settings/boosters.pitch.benefits.entities') }}\n                        </div>\n                    </div>\n                    <div class=\"flex items-center\">\n                        <div class=\"p-1 w-12 flex-none\">\n                            <i class=\"fa-solid fa-hourglass-half fa-2x\" aria-hidden=\"true\"></i>\n                        </div>\n                        <div class=\"p-1\">\n                            {{ __('settings/boosters.pitch.benefits.backup', ['amount' => config('entities.hard_delete')]) }}\n                        </div>\n                    </div>\n                    <div class=\"flex items-center\">\n                        <div class=\"p-1 w-12 flex-none\">\n                            <i class=\"fa-solid fa-horse-head fa-2x\" aria-hidden=\"true\"></i>\n                        </div>\n                        <div class=\"p-1\">\n                            {{ __('settings/boosters.pitch.benefits.icons') }}\n                        </div>\n                    </div>\n                    <div class=\"flex items-center\">\n                        <div class=\"p-1 w-12 flex-none\">\n                            <i class=\"fa-solid fa-camera fa-2x\" aria-hidden=\"true\"></i>\n                        </div>\n                        <div class=\"p-1\">\n                            {{ __('settings/boosters.pitch.benefits.upload') }}\n                        </div>\n                    </div>\n                    <div class=\"flex items-center\">\n                        <div class=\"p-1 w-12 flex-none\">\n                            <i class=\"fa-solid fa-user-group fa-2x\" aria-hidden=\"true\"></i>\n                        </div>\n                        <div class=\"p-1\">\n                            {{ __('settings/boosters.pitch.benefits.relations') }}\n                        </div>\n                    </div>\n                </div>\n                <p>{!! __('settings/boosters.pitch.more', ['boosters' => '<a href=\"https://kanka.io/premiumutm_source=boosters&utm_medium=referral&utm_campaign=findoutmore\" class=\"text-link\">' . __('concept.premium-campaigns') . '</a>']) !!}</p>\n            </x-grid>\n        </x-box>\n\n\n        <h2 class=\"\">\n            {{ __('settings/boosters.ready.title') }}\n\n            @can('boost', auth()->user())\n                <div class=\"badge bg-boost flex gap-1 badge-lg ml-2\" data-toggle=\"tooltip\" data-title=\"{{ __('settings/boosters.ready.available') }}\">\n                    <x-icon class=\"premium\" />\n                    {{ auth()->user()->availableBoosts() }}\n                </div>\n            @endif\n        </h2>\n        @if (!auth()->user()->isGoblin())\n        <p>{!! __('settings/boosters.ready.pricing', [\n        'amount' => '<strong>' . __('settings/boosters.ready.pricing-amount', [\n            'currency' => auth()->user()->currencySymbol(),\n            'amount' => '5.00'\n        ]) . '</strong>'\n        ]) !!}</p>\n        @endif\n\n        @if ($focus)\n            @include('settings.boosters.create', [\n                'campaign' => $focus,\n                'superboost' => $superboost,\n                'cost' => $superboost ? 3 : 1,\n                'canSuperboost' => auth()->user()->availableBoosts() >= 3\n            ])\n        @endif\n\n        <div class=\"grid grid-cols-1 gap-2 campaign-list\">\n            @foreach ($boosts as $boost)\n                @include('settings.boosters._campaign', ['campaign' => $boost->campaign])\n            @endforeach\n            @foreach ($campaigns as $c)\n                @include('settings.boosters._campaign', ['campaign' => $c])\n            @endforeach\n        </div>\n    </x-grid>\n@endsection\n\n@section('modals')\n    @parent\n\n    <x-dialog id=\"switch-dialog\" title=\"Switch to premium\">\n        <div class=\"\">\n            <p>\n               Are you sure you want to switch to premium campaigns? This will unboost your campaigns and give you a number of premium campaigns based on your subscription.\n            </p>\n            <p>This action cannot be reverted.</p>\n        </div>\n\n        <div class=\"grid grid-cols-2 gap-2 w-full\">\n            <x-buttons.confirm type=\"ghost\" full=\"true\" dismiss=\"dialog\">\n                {{ __('crud.cancel') }}\n            </x-buttons.confirm>\n            <form method=\"POST\" action=\"{{ route('settings.switch-to-premium') }}\" class=\"w-full\">\n            <x-buttons.confirm type=\"primary\" full=\"true\">\n                Yes, switch to premium\n            </x-buttons.confirm>\n                @csrf\n            </form>\n        </div>\n    </x-dialog>\n@endsection\n\n@section('scripts')\n    @parent\n    @vite('resources/js/settings.js')\n@endsection\n"
  },
  {
    "path": "resources/views/settings/boosters/unboost/_actions.blade.php",
    "content": "@if (!$boost->inCooldown())\n    <button type=\"submit\" class=\"btn2 btn-error\">\n        <span class=\"\">{{ __('settings/boosters.unboost.confirm') }}</span>\n    </button>\n@endif\n"
  },
  {
    "path": "resources/views/settings/boosters/unboost/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <p class=\"m-0\">\n        @if ($boost->inCooldown())\n            {!! __('settings/premium.remove.cooldown', [\n                'campaign' => '<strong>' . $campaign->name . '</strong>',\n                'date' => $boost->created_at->addDays(7)->diffForHumans()\n            ])!!}\n        @else\n            {!! __('settings/boosters.unboost.warning', [\n        'action' => $campaign->superboosted() ? __('settings/boosters.unboost.status.superboosting') : __('settings/boosters.unboost.status.boosting'),\n        'campaign' => '<strong>' . $campaign->name . '</strong>'])!!}\n        @endif\n    </p>\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/boosters/unboost.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignBoost $boost\n */\n?>\n\n<x-form method=\"DELETE\" :action=\"['campaign_boosts.destroy', $boost->id]\">\n@include('partials.forms._dialog', [\n  'title' => __('settings/boosters.unboost.title'),\n  'content' => 'settings.boosters.unboost._form',\n  'actions' => 'settings.boosters.unboost._actions',\n])\n</x-form>\n\n"
  },
  {
    "path": "resources/views/settings/boosters/update/_actions.blade.php",
    "content": "@if ($campaign->premium() || ($campaign->superboosted() && $boost->inCooldown()))\n        <?php return; ?>\n@elseif (auth()->user()->availableBoosts() < $cost)\n        <?php return; ?>\n@endif\n<button type=\"submit\" class=\"btn2 btn-primary\">\n    <span class=\"fa-solid fa-rocket\" aria-hidden=\"true\"></span>\n    <span class=\"\">{{ __('settings/boosters.superboost.actions.confirm') }}</span>\n</button>\n"
  },
  {
    "path": "resources/views/settings/boosters/update/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    @if ($campaign->superboosted())\n        <p>{!! __('settings/boosters.superboost.errors.boosted', ['campaign' => $campaign->name])!!}</p>\n    @elseif(auth()->user()->availableBoosts() < $cost)\n        @can('boost', auth()->user())\n            <p class=\"\">\n                {!! __('settings/boosters.boost.errors.out-of-boosters', [\n                    'upgrade' => '<a href=\"' . route('settings.subscription') . '\" class=\"text-link\">' . __('settings/boosters.boost.upgrade') . '</a>',\n                    'cost' => '<code>' . $cost . '</code>',\n                    'available' => '<strong>' . auth()->user()->availableBoosts() . '</strong>'\n                ]) !!}\n            </p>\n\n            <div class=\"text-center \">\n                <button type=\"button\" class=\"btn px-8 rounded-full mr-5\" data-dismiss=\"modal\">\n                    {{ __('crud.cancel') }}\n                </button>\n                <a href=\"{{ route('settings.subscription') }}\" class=\"btn2 bg-boost text-white rounded-full px-8\">\n                    {!! __('settings/boosters.boost.actions.upgrade') !!}\n                </a>\n            </div>\n        @else\n            <p class=\"\">\n                {{ __('settings/boosters.boost.pitch') }}\n            </p>\n\n            <div class=\"text-center my-5\">\n                <a href=\"{{ \\App\\Facades\\Domain::toFront('premium')  }}\" target=\"_blank\" class=\"btn2 bg-boost text-white rounded-full px-8 mr-5\">\n                    {!! __('callouts.booster.learn-more') !!}\n                </a>\n                <a href=\"{{ route('settings.subscription') }}\" class=\"btn2 bg-boost text-white rounded-full px-8\">\n                    {!! __('settings/boosters.boost.actions.subscribe') !!}\n                </a>\n            </div>\n        @endif\n    @else\n\n        <p class=\"\">\n            {!! __('settings/boosters.superboost.upgrade', [\n    'cost' => '<code>' . $cost . '</code>',\n    'campaign' => '<strong>' . $campaign->name . '</strong>'\n    ])!!}\n        </p>\n\n        <p class=\"\">{{ __('settings/boosters.boost.duration') }}</p>\n    @endif\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/boosters/update.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignBoost $boost\n */\n?>\n\n<x-form :action=\"['campaign_boosts.update', $boost]\" method=\"PATCH\">\n    @include('partials.forms._dialog', [\n        'title' => __('settings/boosters.superboost.title', ['campaign' => $campaign->name]),\n        'content' => 'settings.boosters.update._form',\n        'actions' => 'settings.boosters.update._actions',\n    ])\n    <input type=\"hidden\" name=\"action\" value=\"superboost\" />\n    <input type=\"hidden\" name=\"campaign_id\" value=\"{{ $campaign->id }}\" />\n</x-form>\n\n"
  },
  {
    "path": "resources/views/settings/bragi.blade.php",
    "content": "<?php /** @var \\App\\Models\\BragiLog $log */?>\n@extends('layouts.app', [\n    'title' => 'Bragi',\n    'description' => '',\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">{{ __('Bragi Logs') }}</x-slot>\n        <x-slot name=\"subtitle\">{{ __('Find info about your available Bragi tokens.') }}</x-slot>\n    </x-hero>\n    <x-grid type=\"1/1\">\n        @include('partials.errors')\n\n        <div class=\"rounded p-2 bg-info text-slate-800\">\n            <p><strong>Tokens</strong> {{ auth()->user()->availableTokens() }} / {{ auth()->user()->maxTokens() }}</p>\n            <p class=\"mb-0\">Your tokens refill on <strong>{{ auth()->user()->tokenRenewalDate() }}</strong>.</p>\n        </div>\n\n        @foreach ($logs as $log)\n            <x-box>\n                <div class=\"flex mb-1\">\n                    <div class=\"flex-1 font-bold text-uppercase\">{{ $log->prompt }}</div>\n                    <div class=\"text-right flex-none\">\n                        <span class=\"text-xs\" data-toggle=\"tooltip\" data-title=\"{{ $log->created_at }} UTC\">{{ $log->created_at->diffForHumans() }}</span>\n                    </div>\n                </div>\n                <div class=\"col-span-2 break-all text-justify\">{!! $log->result !!}</div>\n                @if ($isAdmin)\n                    <div class=\"grid gap-2 grid-cols-{{ count($log->data) }} rounded p-3 bg-orange-100 text-slate-800\">\n                        @foreach($log->data as $key => $value)\n\n                            <div class=\"text-center text-xs\">\n                                {{ $key }}: {{ $value }}\n                            </div>\n                        @endforeach\n                    </div>\n                @endif\n            </x-box>\n        @endforeach\n        @if ($logs->hasPages())\n            <div class=\"text-right\">\n                {{ $logs->links() }}\n            </div>\n        @endif\n    </x-grid>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/client/_form.blade.php",
    "content": "\n<x-grid type=\"1/1\">\n    <x-forms.field\n        field=\"name\"\n        required=\"true\"\n        label=\"{{ __('settings/api.clients.form.name') }}\">\n        <input type=\"text\" name=\"name\" placeholder=\"{{ __('settings/api.clients.form.name_placeholder') }}\" maxlength=\"40\" value=\"{{ $client->name ?? '' }}\"/>\n        <span class=\"text-sm text-neutral-content\">\n            {{ __('settings/api.clients.form.name_helper') }}\n        </span>\n    </x-forms.field>\n\n    <x-forms.field\n        field=\"redirect\"\n        required=\"true\"\n        label=\"{{ __('settings/api.clients.form.redirect') }}\">\n        <input type=\"text\" name=\"redirect\" placeholder=\"{{ __('settings/api.clients.form.redirect_placeholder') }}\" maxlength=\"120\" value=\"{{ $client->redirect ?? '' }}\"/>\n        <span class=\"text-sm text-neutral-content\">\n            {{ __('settings/api.clients.form.redirect_helper') }}\n        </span>\n    </x-forms.field>\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/client/create.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('settings.api.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['settings.client.store']\">\n        @include('partials.forms.form', [\n            'title' => __('settings/api.clients.new'),\n            'content' => 'settings.client._form',\n            'submit' => __('crud.save'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/client/update.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('settings.api.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['settings.client.update', $client]\" method=\"PUT\">\n        @include('partials.forms.form', [\n            'title' => __('settings/api.clients.update'),\n            'content' => 'settings.client._form',\n            'submit' => __('crud.save'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/notifications.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */?>\n@extends('layouts.app', [\n    'title' => __('profiles.newsletter.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">\n            {{ __('profiles.newsletter.title') }}\n        </x-slot>\n        <x-slot name=\"subtitle\">\n            {{ __('profiles.newsletter.helpers.header') }}\n        </x-slot>\n    </x-hero>\n    <x-grid type=\"1/1\">\n        @include('partials.errors')\n        <x-forms.field field=\"mail-release\" :label=\"__('profiles.newsletter.options.monthly')\">\n            <x-checkbox :text=\"__('front/newsletter.groups.all')\">\n                <input type=\"checkbox\" name=\"mail_release\" value=\"1\" @if (old('mail_release', $user->mail_release ?? false)) checked=\"checked\" @endif />\n            </x-checkbox>\n        </x-forms.field>\n    </x-grid>\n\n    <input type=\"hidden\" id=\"newsletter-api\" value=\"{{ route('settings.newsletter-api') }}\" />\n@endsection\n\n@section('scripts')\n    @parent\n    @vite('resources/js/profile.js')\n@endsection\n"
  },
  {
    "path": "resources/views/settings/patreon.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('settings.patreon.title'),\n    'description' => __('settings.patreon.description'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">{{ __('settings.patreon.title') }}</x-slot>\n    </x-hero>\n    <x-grid type=\"1/1\">\n        @include('partials.errors')\n\n    @if(!auth()->user()->isLegacyPatron())\n        <x-box>\n            <x-grid type=\"1/1\">\n                @includeIf('settings.tiers._' . strtolower(auth()->user()->pledge ?: 'kobold'))\n\n                <div>\n                    <x-buttons.confirm type=\"danger\" outline=\"true\" target=\"remove-patreon\">\n                        <x-icon class=\"fa-solid fa-link-slash\" />\n                        <span>\n                            {{ __('settings.patreon.remove.button') }}\n                        </span>\n                    </x-buttons.confirm>\n                </div>\n            </x-grid>\n        </x-box>\n    @else\n        <x-alert type=\"warning\">\n            <p>\n                {!! __('settings.patreon.deprecated', ['subscription' => '<a href=\"' . route('settings.subscription') . '\" class=\"text-link\">' . __('settings.menu.subscription') . '</a>']) !!}\n            </p>\n        </x-alert>\n    @endif\n    </x-grid>\n@endsection\n\n@section('modals')\n    <x-dialog id=\"remove-patreon\" :title=\"__('settings.patreon.remove.title')\">\n        <p class=\"\">\n            {{ __('settings.patreon.remove.text') }}\n        </p>\n\n        <x-form method=\"DELETE\" :action=\"['settings.patreon.unlink']\" class=\"text-center\">\n            <x-buttons.confirm type=\"danger\" outline=\"true\" full=\"true\">\n                {{ __('crud.actions.confirm') }}\n            </x-buttons.confirm>\n        </x-form>\n    </x-dialog>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/premium/create/_actions.blade.php",
    "content": "@if ($campaign->boosted())\n        <?php return; ?>\n@elseif (auth()->user()->availableBoosts() < 1)\n        <?php return; ?>\n@endif\n<button type=\"submit\" class=\"btn2 btn-primary\">\n    <x-icon class=\"premium\" />\n    <span class=\"\">{{ __('settings/premium.create.actions.confirm') }}</span>\n</button>\n"
  },
  {
    "path": "resources/views/settings/premium/create/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n@if ($campaign->premium())\n    <p>{!! __('settings/premium.create.errors.boosted', ['campaign' => $campaign->name])!!}</p>\n@elseif(auth()->user()->availableBoosts() < 1)\n    @can('boost', auth()->user())\n        <p>\n            {!! __('settings/boosters.boost.errors.out-of-boosters', [\n                'upgrade' => '<a href=\"' . route('settings.subscription') . '\" class=\"text-link\">' . __('settings/boosters.boost.upgrade') . '</a>',\n                'cost' => '<code>' . 1 . '</code>',\n                'available' => '<strong>' . auth()->user()->availableBoosts() . '</strong>'\n            ]) !!}\n        </p>\n\n        <div class=\"text-center\">\n            <button type=\"button\" class=\"btn px-8 rounded-full mr-5\" data-dismiss=\"modal\">\n                {{ __('crud.cancel') }}\n            </button>\n            <a href=\"{{ route('settings.subscription') }}\" class=\"btn2 bg-boost text-white rounded-full px-8\">\n                {!! __('settings/boosters.boost.actions.upgrade') !!}\n            </a>\n        </div>\n    @else\n        <p>error</p>\n    @endif\n\n@else\n    <p class=\"\">\n        {!! __('settings/premium.create.confirm', [\n    'campaign' => '<strong>' . $campaign->name . '</strong>'\n    ])!!}\n    </p>\n    <p class=\"\">{{ __('settings/premium.create.duration') }}</p>\n@endif\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/premium/create.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignBoost $boost\n */\n?>\n<x-form :action=\"['campaign_boosts.store']\">\n    @include('partials.forms._dialog', [\n        'title' => __('settings/premium.actions.unlock'),\n        'content' => 'settings.premium.create._form',\n        'actions' => 'settings.premium.create._actions',\n    ])\n\n    <input type=\"hidden\" name=\"campaign_id\" value=\"{{ $campaign->id }}\" />\n</x-form>\n"
  },
  {
    "path": "resources/views/settings/premium/index.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\CampaignBoost $boost\n * @var \\App\\Models\\Campaign $campaign\n */\n?>\n@extends('layouts.app', [\n    'title' => __('settings.menu.premium'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-grid type=\"1/1\">\n        @include('partials.errors')\n\n        <div class=\"flex gap-1 justify-between\">\n            <h1 class=\"text-2xl\">\n                {{ __('settings.menu.premium') }}\n            </h1>\n\n            @if (config('app.debug'))\n                <a href=\"{{ route('settings.switch-back') }}\" class=\"btn2 btn-xs btn-outline btn-error\">\n                    Switch to legacy\n                </a>\n            @endif\n        </div>\n\n        <x-box>\n            <x-grid type=\"1/1\">\n                <h3 class=\"text-xl\">{{ __('settings/boosters.pitch.title') }}</h3>\n                <p class=\"\">{{ __('settings/premium.pitch.description') }}</p>\n\n                <div class=\"flex flex-col gap-2\">\n                    <h4 class=\"text-lg\">{{ __('settings/premium.pitch.title') }}</h4>\n                    <div class=\"grid grid-cols-2 lg:grid-cols-3 gap-1 mb-3\">\n                        <div class=\"flex items-center\">\n                            <div class=\"p-1 w-12 flex-none text-center\">\n                                <x-icon class=\"fa-regular fa-palette fa-2x text-neutral-content\" />\n                            </div>\n                            <div class=\"p-1\">\n                                {{ __('settings/boosters.pitch.benefits.customisable') }}\n                            </div>\n                        </div>\n                        <div class=\"flex items-center\">\n                            <div class=\"p-1 w-12 flex-none text-center\">\n                                <x-icon class=\"fa-regular fa-puzzle-piece fa-2x text-neutral-content\" />\n                            </div>\n                            <div class=\"p-1\">\n                                {{ __('settings/boosters.pitch.benefits.plugins') }}\n                            </div>\n                        </div>\n                        <div class=\"flex items-center\">\n                            <div class=\"p-1 w-12 flex-none text-center\">\n                                <x-icon class=\"fa-regular fa-hourglass-half fa-2x text-neutral-content\" />\n                            </div>\n                            <div class=\"p-1\">\n                                {{ __('settings/boosters.pitch.benefits.backup', ['amount' => config('entities.hard_delete')]) }}\n                            </div>\n                        </div>\n                        <div class=\"flex items-center\">\n                            <div class=\"p-1 w-12 flex-none text-center\">\n                                <x-icon class=\"fa-regular fa-horse-head fa-2x text-neutral-content\" />\n                            </div>\n                            <div class=\"p-1\">\n                                {{ __('settings/boosters.pitch.benefits.icons') }}\n                            </div>\n                        </div>\n                        <div class=\"flex items-center\">\n                            <div class=\"p-1 w-12 flex-none text-center\">\n                                <x-icon class=\"fa-regular fa-camera fa-2x text-neutral-content\" />\n                            </div>\n                            <div class=\"p-1\">\n                                {{ __('settings/boosters.pitch.benefits.upload') }}\n                            </div>\n                        </div>\n                        <div class=\"flex items-center\">\n                            <div class=\"p-1 w-12 flex-none text-center\">\n                                <x-icon class=\"fa-regular fa-circle-nodes fa-2x text-neutral-content\" />\n                            </div>\n                            <div class=\"p-1\">\n                                {{ __('settings/boosters.pitch.benefits.visual') }}\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <p>\n                    <a href=\"https://kanka.io/premium?utm_source=premium\" class=\"text-link\">\n                        {!! __('callouts.premium.learn-more') !!}\n                    </a>\n                </p>\n            </x-grid>\n        </x-box>\n\n\n        <div class=\"flex gap-2 items-center justify-between\">\n            <h2 class=\"\">\n                {{ __('settings/premium.ready.title') }}\n            </h2>\n            @can('boost', auth()->user())\n                <div class=\"badge bg-boost flex gap-2 items-center\" data-toggle=\"tooltip\" data-title=\"{{ __('settings/premium.ready.available') }}\">\n                    <x-icon class=\"premium\" />\n                    {{ auth()->user()->availableBoosts() }} / {{ auth()->user()->maxBoosts() }}\n                </div>\n            @endif\n        </div>\n\n        @if (!auth()->user()->isGoblin())\n        <p>{!! __('settings/premium.ready.pricing', [\n        'amount' => '<strong>' . __('settings/boosters.ready.pricing-amount', [\n            'currency' => auth()->user()->currencySymbol(),\n            'amount' => '5.00'\n        ]) . '</strong>'\n        ]) !!}</p>\n        @endif\n\n        <div class=\"grid grid-cols-1 gap-2 campaign-list\">\n            @foreach ($premiums as $premium)\n                @include('settings.boosters._campaign', ['campaign' => $premium->campaign])\n            @endforeach\n            @foreach ($campaigns as $userCampaign)\n                @include('settings.boosters._campaign', ['campaign' => $userCampaign])\n            @endforeach\n        </div>\n    </x-grid>\n\n@endsection\n\n@section('modals')\n    @parent\n    @if ($focus)\n        <input type=\"hidden\" id=\"focus-modal\" data-url=\"{{ route('campaign_boosts.create', ['campaign' => $focus, 'boost' => 1]) }}\" data-target=\"primary-dialog\" />\n    @endif\n@endsection\n\n@section('scripts')\n    @parent\n    @vite('resources/js/settings.js')\n@endsection\n"
  },
  {
    "path": "resources/views/settings/premium/remove/_actions.blade.php",
    "content": "@if ($boost->inCooldown()) <?php return ?> @endif\n<button type=\"submit\" class=\"btn2 btn-error\">\n    <span class=\"\">{{ __('settings/premium.remove.confirm') }}</span>\n</button>\n"
  },
  {
    "path": "resources/views/settings/premium/remove/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <p class=\"m-0\">\n    @if ($boost->inCooldown())\n        {!! __('settings/premium.remove.cooldown', [\n            'campaign' => '<strong>' . $campaign->name . '</strong>',\n            'date' => $boost->created_at->addDays(7)->diffForHumans()\n        ])!!}\n    @else\n        {!! __('settings/premium.remove.warning', [\n        'campaign' => '<strong>' . $campaign->name . '</strong>']) !!}\n    @endif\n    </p>\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/premium/remove.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\CampaignBoost $boost\n */\n?>\n\n<x-form method=\"DELETE\" :action=\"['campaign_boosts.destroy', $boost->id]\">\n@include('partials.forms._dialog', [\n    'title' => __('settings/premium.remove.title'),\n    'content' => 'settings.premium.remove._form',\n    'actions' => 'settings.premium.remove._actions',\n])\n</x-form>\n"
  },
  {
    "path": "resources/views/settings/profile.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */?>\n@extends('layouts.app', [\n    'title' => __('settings.profile.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n\n    <x-box class=\"mb-12 rounded-2xl\">\n        <x-slot name=\"title\">\n            {{ __('settings.profile.title') }}\n        </x-slot>\n\n        <x-form :action=\"['settings.profile-process']\" method=\"PATCH\" files>\n            <div class=\"flex flex-col md:flex-row gap-5\">\n                <div class=\"grow flex flex-col gap-5\">\n                    <x-forms.field field=\"name\" :label=\"__('profiles.fields.name')\" required>\n                        <input type=\"text\" name=\"name\" maxlength=\"191\" placeholder=\"{{ __('profiles.placeholders.name') }}\" class=\"rounded border p-2 w-full\" value=\"{!! old('name', $user->name ?? null) !!}\" />\n                    </x-forms.field>\n\n                    @php $helper =  __('profiles.helpers.profile-name', [\n    'marketplace' => '<a href=\"' . config('marketplace.url') . '\" class=\"text-link\">' . __('footer.plugins'). '</a>',\n    'profile' => '<a href=\"' . route('users.profile', $user) . '\" class=\"text-link\">' . __('profiles.settings.helpers.profile') . '</a>']) @endphp\n                    <x-forms.field field=\"marketplace-name\" :label=\"__('profiles.fields.profile-name')\" :helper=\"$helper\">\n                        <input type=\"text\" name=\"settings[marketplace_name]\" maxlength=\"32\" placeholder=\"{{ __('profiles.fields.profile-name') }}\" class=\"rounded border p-2 w-full\" value=\"{!! old('settings[marketplace_name]', $user->settings['marketplace_name'] ?? null) !!}\" />\n                    </x-forms.field>\n\n                    @php $helper =  __('profiles.helpers.pronouns', [\n                        'marketplace' => '<a href=\"' . config('marketplace.url') . '\" class=\"text-link\">' . __('footer.plugins'). '</a>',\n                        'profile' => '<a href=\"' . route('users.profile', $user) . '\" class=\"text-link\">' . __('profiles.settings.helpers.profile') . '</a>'])\n                    @endphp\n                    <x-forms.field field=\"pronouns\" :label=\"__('profiles.fields.pronouns')\" :helper=\"$helper\">\n                        <input type=\"text\" name=\"settings[pronouns]\" maxlength=\"45\" placeholder=\"{{ __('profiles.fields.pronouns') }}\" class=\"rounded border p-2 w-full\" value=\"{!! old('settings[pronouns]', $user->settings['pronouns'] ?? null) !!}\" />\n                    </x-forms.field>\n\n                    @php $helper = __('profiles.settings.helpers.bio', [\n    'link' => '<a href=\"' . route('users.profile', $user) . '\" class=\"text-link\">' . __('profiles.settings.helpers.profile') . '</a>'\n    ]); @endphp\n                    <x-forms.field field=\"bio\" :label=\"__('profiles.fields.bio')\" :helper=\"$helper\">\n                        <textarea name=\"profile[bio]\" placeholder=\"{{ __('profiles.placeholders.bio') }}\" class=\"w-full rounded border p-2\" rows=\"5\" maxlength=\"300\">{!! old('profile[bio]', \\Illuminate\\Support\\Arr::get($user->profile, 'bio')) !!}</textarea>\n                    </x-forms.field>\n\n                    @php $helper =  __('profiles.helpers.link', [\n                        'marketplace' => '<a href=\"' . config('marketplace.url') . '\" class=\"text-link\">' . __('footer.plugins'). '</a>',\n                        'profile' => '<a href=\"' . route('users.profile', $user) . '\"  class=\"text-link\">' . __('profiles.settings.helpers.profile') . '</a>'])\n                    @endphp\n                    <x-forms.field field=\"link\" :label=\"__('profiles.fields.link')\" :helper=\"$helper\">\n                        <input type=\"text\" name=\"settings[link]\" maxlength=\"90\" placeholder=\"{{ __('profiles.fields.link') }}\" class=\"rounded border p-2 w-full\" value=\"{!! old('settings[link]', $user->settings['link'] ?? null) !!}\" />\n                    </x-forms.field>\n\n                    <x-forms.field field=\"share-login\" :label=\"__('profiles.fields.login_sharing')\">\n                        <input type=\"hidden\" name=\"has_last_login_sharing\" value=\"0\" />\n                        <x-checkbox :text=\"__('profiles.fields.last_login_share')\">\n                            <input type=\"checkbox\" name=\"has_last_login_sharing\" value=\"1\" @if (old('has_last_login_sharing', auth()->user()->has_last_login_sharing ?? false)) checked=\"checked\" @endif />\n                        </x-checkbox>\n                    </x-forms.field>\n\n                    @if (auth()->user()->isSubscriber())\n                        <x-forms.field field=\"hide-sub\" :label=\"__('profiles.fields.subscription_hiding')\">\n                            <input type=\"hidden\" name=\"settings[hide_subscription]\" value=\"0\" />\n                            <x-checkbox :text=\"__('profiles.fields.hide_subscription', [\n    'hall_of_fame' => '<a href=\\'https://kanka.io/hall-of-fame\\' class=\\'text-link\\'>' . __('front/hall-of-fame.title') . '</a>',\n    ])\">\n                                <input type=\"checkbox\" name=\"settings[hide_subscription]\" value=\"1\" @if (old('settings[hide_subscription]', auth()->user()->settings['hide_subscription'] ?? false)) checked=\"checked\" @endif />\n                            </x-checkbox>\n                        </x-forms.field>\n                    @endif\n                </div>\n                <x-forms.field field=\"avatar\" :label=\"__('settings.profile.avatar')\">\n                    <input type=\"file\" name=\"avatar\" class=\"image w-full\" id=\"header_image\" accept=\"image/*\" />\n\n                    @if (!empty(auth()->user()->avatar) && auth()->user()->hasAvatar())\n                        <div class=\"rounded-full\">\n                            <img class=\"avatar rounded-full avatar-user\" src=\"{{ auth()->user()->getAvatarUrl(200) }}\" width=\"200\" height=\"200\" alt=\"{{ auth()->user()->name }}\">\n                        </div>\n                    @endif\n                </x-forms.field>\n            </div>\n            <div class=\"text-right\">\n                <x-buttons.confirm type=\"primary\">\n                    {{ __('settings.profile.actions.update_profile') }}\n                </x-buttons.confirm>\n            </div>\n        </x-form>\n    </x-box>\n\n        @if (!app()->isProduction())\n            <x-box class=\"border-error border rounded-2xl\">\n                <x-slot name=\"title\">\n                    Reset Tutorials\n                </x-slot>\n                <div class=\"flex flex-col gap-4\">\n                <p>This will reset all tutorials, and make all the dismissible helper texts reappear.</p>\n                <x-form :action=\"['tutorials.reset']\" method=\"PATCH\">\n                    <x-buttons.confirm type=\"danger\" outline>\n                        <x-icon class=\"trash\" />\n                        Reset all tutorials\n                    </x-buttons.confirm>\n                </x-form>\n                </div>\n            </x-box>\n        @endif\n@endsection\n"
  },
  {
    "path": "resources/views/settings/referrals/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('settings.referrals.title'),\n    'description' => '',\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">{{ __('referrals.title') }}</x-slot>\n        <x-slot name=\"subtitle\">{{ __('referrals.benefits') }}</x-slot>\n    </x-hero>\n\n    <x-grid type=\"1/1\">\n        @include('partials.errors')\n\n        <x-box>\n            {{ __('referrals.fields.link') }}<br />\n\n            <div class=\"flex gap-4 items-center\">\n                <a\n                    href=\"{{ route('referrals', $referral) }}\"\n                    class=\"text-link\">\n                    {{ route('referrals', $referral) }}\n                </a>\n\n                <span\n                    class=\"btn2 btn-xs btn-outline\"\n                    role=\"button\"\n                    data-clipboard=\"{{ route('referrals', $referral) }}\"\n                    data-toast=\"{{ __('referrals.toasts.copied') }}\">\n                    <x-icon class=\"copy\"></x-icon>\n                    {{ __('referrals.actions.copy') }}\n                </span>\n            </div>\n        </x-box>\n\n        <x-box>\n            @if (empty($users))\n                <x-helper>\n                    <p>{{ __('referrals.stats.empty') }}</p>\n                </x-helper>\n            @else\n            <div class=\"flex flex-col gap-2\">\n                <p>{{ __('referrals.stats.invited') }} {{ trans_choice('referrals.stats.users', $users, ['amount' => \\Illuminate\\Support\\Number::format($users)]) }}</p>\n                <p>{{ __('referrals.stats.subscribers', ['amount' => \\Illuminate\\Support\\Number::format($subscribers)]) }}</p>\n                <p>{{ __('referrals.stats.badge', ['level' => $badge]) }}</p>\n            </div>\n            @endif\n        </x-box>\n    </x-grid>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/subscription/_cancel.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */ ?>\n@php\ndd('who is calling dis');\n    $endDate = date($user->date_format, $user->upcomingInvoice()?->period_end);\n@endphp\n<x-form :action=\"['settings.subscription.cancel']\" id=\"cancellation-confirm\" class=\"subscription-form text-left\">\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('settings.subscription.cancel.text', ['date' => $endDate])!!}</p>\n    </x-helper>\n\n<x-forms.field field=\"cancel-reason\" :label=\"__('settings.subscription.fields.reason')\">\n    <x-grid type=\"1/1\">\n        @php $reasons = [\n            '' => __('crud.select'),\n            'financial' => __('settings.subscription.cancel.options.financial'),\n            'not_for' => __('settings.subscription.cancel.options.not_for'),\n            'not_using' => __('settings.subscription.cancel.options.not_using'),\n            'not_playing' => __('settings.subscription.cancel.options.not_playing'),\n            'missing_features' => __('settings.subscription.cancel.options.missing_features'),\n            'competitor' => __('settings.subscription.cancel.options.competitor'),\n            'custom' => __('settings.subscription.cancel.options.other')\n        ]; @endphp\n        <x-forms.select name=\"reason\" :options=\"$reasons\" class=\"w-full\" />\n\n        <textarea name=\"reason_custom\" placeholder=\"{{ __('settings.subscription.placeholders.reason') }}\" class=\"w-full\" rows=\"4\" id=\"cancel-reason-custom\"></textarea>\n    </x-grid>\n</x-forms.field>\n\n    <button class=\"btn2 btn-lg btn-block btn-primary btn-error btn-outline subscription-confirm-button\" data-text=\"{{ __('settings.subscription.actions.subscribe') }}\">\n        <span>{{ __('settings.subscription.actions.cancel_sub') }}</span>\n        <span class=\"spinner hidden\">\n            <x-icon class=\"load\" />\n        </span>\n    </button>\n</x-grid>\n\n<input type=\"hidden\" name=\"tier\" value=\"{{ $tier }}\" />\n<input type=\"hidden\" name=\"period\" value=\"{{ $period }}\" />\n<input type=\"hidden\" name=\"payment_id\" value=\"{{ $card ? $card->id : null }}\" />\n<input type=\"hidden\" name=\"subscription-intent-token\" value=\"{{ $intent->client_secret }}\" />\n<input type=\"hidden\" name=\"is_downgrade\" value=\"true\" />\n</x-form>\n"
  },
  {
    "path": "resources/views/settings/subscription/_promo.blade.php",
    "content": "@if ($isYearly)\n    @if ($user->subscribed('kanka'))\n{{--        <x-helper>--}}\n{{--            Looking for the promotion? Unfortunately it is only available for new and returning subscribers.--}}\n{{--        </x-helper>--}}\n    @else\n        <div class=\"flex flex-col gap-2\">\n            <div class=\"field text-left \">\n                <label>{{ __('settings.subscription.coupon.label') }}</label>\n                <input type=\"text\" name=\"coupon-check\" maxlength=\"12\" id=\"coupon-check\" class=\"w-full\" data-url=\"{{ route('subscription.check-coupon', ['tier' => $tier]) }}\" />\n            </div>\n            <div id=\"coupon-validating\" class=\"p-2 text-center hidden\">\n                <x-icon class=\"loading\" />\n            </div>\n            <x-alert type=\"success\" :hidden=\"true\" id=\"coupon-success\"></x-alert>\n            <x-alert type=\"warning\" :hidden=\"true\" id=\"coupon-invalid\">\n                {{ __('settings.subscription.coupon.invalid') }}\n            </x-alert>\n        </div>\n    @endif\n@else\n{{--    <x-alert type=\"success\">--}}\n{{--        Psst! Our yearly subscriptions are 20% of during black friday!--}}\n{{--    </x-alert>--}}\n@endif\n"
  },
  {
    "path": "resources/views/settings/subscription/_recap.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\User $user\n * @var \\App\\Models\\TierPrice $current\n * */?>\n@php\n$cols = 1;\n$colClass = 'lg:grid-cols-1';\nif ($user->isLegacyPatron()) {\n    $cols = 3;\n    $colClass = 'lg:grid-cols-3';\n} else {\n    $colClass = 'lg:grid-cols-4';\n    $cols = 4;\n    if ($user->subscribed('kanka')) {\n        $colClass = 'lg:grid-cols-5';\n        $cols = 5;\n        if ($status == \\App\\Services\\SubscriptionService::STATUS_GRACE) {\n            $cols = 6;\n            $colClass = 'lg:grid-cols-6';\n        }\n    }\n}\n$box = 'rounded-2xl p-2 lg:p-3 bg-box shadow-xs hover:shadow-md flex flex-col items-center justify-center gap-2';\n\n@endphp\n\n<div class=\"grid grid-flow-row-dense grid-cols-1 sm:grid-cols-2 {{ $colClass }} gap-2 lg:gap-4\">\n    @if ($user->isLegacyPatron())\n        <div class=\"{{ $box }}\">\n            <div class=\"text-xl text-center\">\n                {{ empty($user->pledge) ? 'Kobold' : $user->pledge }}\n            </div>\n            <div class=\"text-muted\">\n                {{ __('settings.subscription.fields.plan') }}\n            </div>\n        </div>\n        <div class=\"{{ $box }}\">\n            <div class=\"text-xl text-center\">\n                Patreon\n            </div>\n            <div class=\"text-muted\">\n                {{ __('settings.subscription.fields.billing') }}\n            </div>\n        </div>\n    @else\n        <div class=\"{{ $box }}\">\n            <div class=\"text-xl  text-center\">\n                @if ($user->hasPayPal() || $user->hasManualSubscription())\n                    {{ $user->pledge }}\n                @else\n                {{ $current->tier->name ?? \\App\\Models\\Pledge::KOBOLD }}\n                @endif\n            </div>\n            <div class=\"text-muted\">\n                {{ __('settings.subscription.fields.plan') }}\n            </div>\n        </div>\n        @if (!$user->hasPayPal())\n        <div class=\"{{ $box }}\">\n            <div class=\"text-xl text-center\">\n                @if (!empty($current))\n                    @if ($current->isYearly())\n                        {{ __('settings.subscription.plans.cost_yearly', ['amount' => \\Illuminate\\Support\\Number::format($current->cost, 2), 'currency' => \\Illuminate\\Support\\Str::upper($current->currency)]) }}\n                    @else\n                        {{ __('settings.subscription.plans.cost_monthly', ['amount' => \\Illuminate\\Support\\Number::format($current->cost, 2), 'currency' => \\Illuminate\\Support\\Str::upper($current->currency)]) }}\n                    @endif\n                @else\n                    {{ __('front.pricing.tier.free') }}\n                @endif\n            </div>\n            <div class=\"text-muted\">\n                {{ __('settings.subscription.fields.billing') }}\n            </div>\n        </div>\n        @endif\n        <a class=\"{{ $box }}\" href=\"#\" data-toggle=\"dialog\"\n           data-url=\"{{ route('billing.currency') }}\">\n            <div class=\"text-xl text-center\">\n                <span class=\"uppercase\">{{ $user->currency() }}</span>\n                <x-icon class=\"fa-solid fa-pencil-alt\" />\n                <span class=\"sr-only\">{{ __('crud.edit') }}</span>\n            </div>\n            <div class=\"text-muted\">\n                {{ __('settings.subscription.fields.currency') }}\n            </div>\n        </a>\n        @if ($user->subscribed('kanka'))\n            <div class=\"{{ $box }}\">\n                <div class=\"text-xl text-center\">\n                    {{ $user->subscription('kanka')->created_at->isoFormat('MMMM D, Y') }}\n                </div>\n                <div class=\"text-muted\">\n                    {{ __('settings.subscription.fields.active_since') }}\n                </div>\n            </div>\n            @if ($status == \\App\\Services\\SubscriptionService::STATUS_GRACE)\n                <div class=\"{{ $box }}\">\n                    <div class=\"text-xl text-center\">\n                        {{ $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y') }}\n                    </div>\n                    <div class=\"text-muted\">\n                        {{ __('settings.subscription.fields.active_until') }}\n                    </div>\n                </div>\n            @endif\n        @endif\n    @endif\n\n    @if ($user->hasDefaultPaymentMethod())\n        <div class=\"{{ $box }}\">\n            <div class=\"text-xl text-center\">\n                @php $method = $user->defaultPaymentMethod(); @endphp\n                {{ __('settings.subscription.payment_method.saved', ['brand' => ucfirst($method->card?->brand), 'last4' => $method->card?->last4]) }}\n            </div>\n            <div class=\"text-muted\">\n                {{ __('settings.subscription.fields.payment_method') }}\n            </div>\n        </div>\n    @else\n        <a href=\"{{ route('billing.payment-method') }}\" class=\"{{ $box }}\">\n            <div class=\"text-xl text-center\">\n                {{ __('settings.subscription.payment_method.actions.add' ) }}\n                <x-icon class=\"fa-solid fa-credit-card\" />\n            </div>\n\n            <div class=\"text-muted\">\n                {{ __('settings.subscription.fields.payment_method') }}\n            </div>\n        </a>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/settings/subscription/cancellation/form.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */ ?>\n@php\n    $endDate = $user->subscription('kanka')->upcomingInvoice()?->date()->isoFormat('MMMM D, Y');\n    $secondaryKeys = [\n        'financial'   => ['lower_price', 'not_often', 'forgot'],\n        'not_for'     => ['expected_different', 'terminology', 'too_complex', 'better_fit'],\n        'not_using'   => ['on_break', 'too_busy', 'lost_motivation'],\n        'not_playing' => ['campaign_finished', 'group_fell_apart', 'on_break'],\n        'competitor'  => ['world_anvil', 'legend_keeper', 'notion_obsidian', 'other'],\n    ];\n    $secondaryOptions = [];\n    foreach ($secondaryKeys as $primaryReason => $keys) {\n        foreach ($keys as $key) {\n            $secondaryOptions[$primaryReason][$key] = __('subscriptions/cancellation.secondary.' . $primaryReason . '.' . $key);\n        }\n    }\n@endphp\n<x-dialog.header>\n    {{ __('settings.subscription.cancel.title') }}\n</x-dialog.header>\n\n<article class=\"text-center max-w-xl container p-4 md:px-6\">\n\n    <x-form :action=\"['settings.subscription.cancel']\" id=\"cancellation-confirm\" class=\"subscription-form text-left\">\n        <x-grid type=\"1/1\">\n\n            <x-helper>\n                <p>{!! __('subscriptions/cancellation.intro', ['date' => $endDate])!!}</p>\n            </x-helper>\n\n            <div class=\"flex flex-col gap-2\">\n                <span class=\"font-semibold\">\n                    {{ __('subscriptions/cancellation.loss.title') }}\n                </span>\n\n                @if ($premiumCampaign)\n                <div class=\"flex flex-col gap-0.5\">\n                    <div>\n                        <x-icon class=\"fa-regular fa-times text-red-500\"></x-icon>\n                        {{ trans_choice('subscriptions/cancellation.loss.premium.title', $premiumCampaigns->count() - 1, ['campaign' => $premiumCampaign->name, 'count' => $premiumCampaigns->count() - 1 ]) }}\n                    </div>\n                    @if ($players > 0)\n                    <div class=\"pl-4\">\n                        <x-icon class=\"fa-regular fa-arrow-right\"></x-icon>\n                        {{ trans_choice('subscriptions/cancellation.loss.premium.players', $players, ['count' => $players]) }}\n                    </div>\n                    @endif\n                    @if ($plugins > 0)\n                    <div class=\"pl-4\">\n                        <x-icon class=\"fa-regular fa-arrow-right\"></x-icon>\n                        {{ trans_choice('subscriptions/cancellation.loss.premium.plugins', $plugins, ['count' => $plugins]) }}\n                    </div>\n                    @endif\n                </div>\n                @endif\n\n                <div class=\"flex flex-col gap-0.5\">\n                    <div>\n                        <x-icon class=\"fa-regular fa-times text-red-500\"></x-icon>\n                        {{ __('subscriptions/cancellation.loss.ads.title') }}\n                    </div>\n                </div>\n\n                @if ($discord)\n                <div class=\"flex flex-col gap-0.5\">\n                    <div>\n                        <x-icon class=\"fa-regular fa-times text-red-500\"></x-icon>\n                        {{ __('subscriptions/cancellation.loss.discord.title', ['role' => auth()->user()->pledge]) }}\n                    </div>\n                </div>\n                @endif\n            </div>\n\n            <div\n                x-data=\"{\n                    reason: '',\n                    secondary: '',\n                    canDowngrade: '{{ !$user->isOwlbear() }}',\n                    secondaryOptions: @js($secondaryOptions)\n                }\"\n                x-init=\"$watch('reason', () => { secondary = '' })\"\n                class=\"space-y-4\"\n            >\n                <x-forms.field field=\"cancel-reason\" :label=\"__('settings.subscription.fields.reason')\">\n                    @php\n                        $reasons = [\n                            'financial'        => __('settings.subscription.cancel.options.financial'),\n                            'not_for'          => __('settings.subscription.cancel.options.not_for'),\n                            'not_using'        => __('settings.subscription.cancel.options.not_using'),\n                            'not_playing'      => __('settings.subscription.cancel.options.not_playing'),\n                            'missing_features' => __('settings.subscription.cancel.options.missing_features'),\n                            'competitor'       => __('settings.subscription.cancel.options.competitor'),\n                        ];\n\n                        if ($user->subscription('kanka') && $user->subscription('kanka')->created_at->greaterThanOrEqualTo(\\Carbon\\Carbon::now()->subHour())) {\n                            $reasons['testing'] = __('settings.subscription.cancel.options.testing');\n                        }\n\n                        $reasons['custom'] = __('settings.subscription.cancel.options.other');\n                    @endphp\n\n                    <div class=\"flex flex-col gap-2\">\n                        @foreach($reasons as $value => $label)\n                            <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-pointer hover:shadow-sm\">\n                                <input\n                                    type=\"radio\"\n                                    name=\"reason\"\n                                    id=\"cancel-reason-{{ $value }}\"\n                                    value=\"{{ $value }}\"\n                                    class=\"mt-1\"\n                                    x-model=\"reason\"\n                                >\n                                <label for=\"cancel-reason-{{ $value }}\" class=\"w-full cursor-pointer\">\n                                    {{ $label }}\n                                </label>\n                            </div>\n                        @endforeach\n                    </div>\n                </x-forms.field>\n\n                <input type=\"hidden\" name=\"reason_secondary\" :value=\"secondary\">\n\n                <div x-show=\"secondaryOptions[reason]\" x-cloak class=\"flex flex-col gap-2\">\n                    <x-forms.field field=\"cancel-reason\" :label=\"__('subscriptions/cancellation.secondary.label')\">\n                    <template x-for=\"[value, label] in Object.entries(secondaryOptions[reason] ?? {})\" :key=\"value\">\n                        <div class=\"rounded-xl border border-base-300 p-2 flex gap-2 items-start cursor-pointer hover:shadow-sm\">\n                            <input\n                                type=\"radio\"\n                                :id=\"'cancel-secondary-' + value\"\n                                :value=\"value\"\n                                class=\"mt-1\"\n                                x-model=\"secondary\"\n                            >\n                            <label :for=\"'cancel-secondary-' + value\" class=\"w-full cursor-pointer\" x-text=\"label\"></label>\n                        </div>\n                    </template>\n                    </x-forms.field>\n                </div>\n\n                <div x-show=\"reason === 'missing_features'\" x-cloak>\n                    {!! __('subscriptions/cancellation.loss.roadmap', ['roadmap' => '<a href=\"' . route('roadmap', ['from' => 'cancellation']) . '\" class=\"text-link font-semibold\">' . __('footer.roadmap') . '</a>']) !!}\n                </div>\n\n                <div x-show=\"reason === 'financial' && canDowngrade\" x-cloak>\n                    {{ __('subscriptions/cancellation.loss.downgrade') }}\n                </div>\n\n                <x-forms.field field=\"reason_custom\" :label=\"__('subscriptions/cancellation.custom.label')\">\n                    <textarea\n                        name=\"reason_custom\"\n                        placeholder=\"{{ __('subscriptions/cancellation.custom.placeholder') }}\"\n                        class=\"w-full\"\n                        rows=\"4\"\n                        id=\"cancel-reason-custom\"\n                    ></textarea>\n                </x-forms.field>\n\n                <div class=\"flex flex-col gap-1\">\n                    <button\n                        class=\"btn2 btn-block subscription-confirm-button\"\n                        :class=\"{ 'btn-disabled btn-default': !reason, 'btn-error btn-outline ': reason }\"\n                        data-text=\"{{ __('settings.subscription.actions.subscribe') }}\"\n                        :disabled=\"!reason\"\n                    >\n                        <span>{{ __('settings.subscription.actions.cancel_sub') }}</span>\n                        <span class=\"spinner hidden\">\n                            <x-icon class=\"load\" />\n                        </span>\n                    </button>\n                    <p x-show=\"!reason\" x-cloak class=\"text-xs text-center text-neutral-content\">\n                        {{ __('subscriptions/cancellation.select_reason') }}\n                    </p>\n                </div>\n            </div>\n        </x-grid>\n    </x-form>\n</article>\n"
  },
  {
    "path": "resources/views/settings/subscription/cancellation/grace.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */ ?>\n@php\n    $endDate = $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y');\n@endphp\n<x-dialog.header>\n    {{ __('settings.subscription.cancel.grace.title') }}\n</x-dialog.header>\n\n<article class=\"text-center max-w-xl container p-4 md:px-6\">\n\n    <x-helper>\n        <p class=\"text-left\">\n            {!! __('settings.subscription.cancel.grace.text', ['date' => '<span class=\"text-error-content\">' . $endDate . '</span>'])!!}\n        </p>\n    </x-helper>\n</article>\n"
  },
  {
    "path": "resources/views/settings/subscription/cancelled.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\CampaignBoost $boost\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\User $user\n */\n\n?>\n@extends('layouts.app', [\n    'title' => __('subscriptions/cancelled.seo_title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n\n    <x-hero>\n        <x-slot name=\"title\">\n            💔\n            {!! __('subscriptions/cancelled.title', ['name' => $user->name]) !!}\n        </x-slot>\n        <x-slot name=\"subtitle\">{{ __('subscriptions/cancelled.subtitle') }}</x-slot>\n    </x-hero>\n\n    <x-grid type=\"1/1\">\n        <x-box class=\"flex flex-col gap-4\">\n                <div class=\"text-xl\">\n                    ⏳\n                    {{ __('subscriptions/cancelled.active.title') }}\n                </div>\n                <p>\n                    {!! __('subscriptions/cancelled.active.helper', [\n    'date' => '<strong>' . $endDate . '</strong>'\n]) !!}\n                </p>\n            <ul>\n                <li>{!! __('subscriptions/cancelled.active.premium' ) !!}</li>\n                <li>{!! __('subscriptions/cancelled.active.discord', ['discord' => '<a href=\"' . \\App\\Facades\\Domain::toFront('go/discord') . '\" class=\"text-link\">Discord</a>'] ) !!}</li>\n                <li>{!! __('subscriptions/cancelled.active.adfree' ) !!}</li>\n                <li>{!! __('subscriptions/cancelled.active.limit' ) !!}</li>\n                <li>{!! __('subscriptions/cancelled.active.more' ) !!}</li>\n            </ul>\n        </x-box>\n\n        <x-box class=\"flex flex-col gap-4\">\n                <div class=\"text-xl\">\n                    ❌\n                    {{ __('subscriptions/cancelled.next.title') }}\n                </div>\n                <p>{!! __('subscriptions/cancelled.next.helper', [\n]) !!}</p>\n            <ul>\n                <li>{!! __('subscriptions/cancelled.next.premium' ) !!}</li>\n                <li>{!! __('subscriptions/cancelled.next.discord', ['discord' => '<a href=\"' . \\App\\Facades\\Domain::toFront('go/discord') . '\" class=\"text-link\">Discord</a>'] ) !!}</li>\n                <li>{!! __('subscriptions/cancelled.next.data' ) !!}</li>\n            </ul>\n        </x-box>\n\n        <x-box class=\"flex flex-col gap-4\">\n                <div class=\"text-xl\">\n                    💡\n                    {{ __('subscriptions/cancelled.change.title') }}\n                </div>\n                <p>{!! __('subscriptions/cancelled.change.helper', [\n]) !!}</p>\n            <p>\n                <a href=\"{{ route('settings.subscription') }}\" class=\"btn2 btn-primary btn-sm\">\n                    {{ __('subscriptions/cancelled.change.action') }}\n                </a>\n            </p>\n        </x-box>\n\n        <x-box class=\"flex flex-col gap-4\">\n            <div class=\"text-xl\">\n                👋\n                {{ __('subscriptions/cancelled.contact.title') }}\n            </div>\n            <p>{!! __('subscriptions/cancelled.contact.helper', []) !!}</p>\n            <p>\n                {!! __('subscriptions/cancelled.contact.feedback', []) !!}\n                <a href=\"{{ \\App\\Facades\\Domain::toFront('contact') }}\" class=\"text-link\">\n                    {{ __('subscriptions/cancelled.contact.send') }}\n                </a>\n            </p>\n        </x-box>\n    </x-grid>\n@endsection\n\n\n\n@section('scripts')\n    @parent\n    @vite('resources/js/subscription.js')\n@endsection\n\n@section('styles')\n    @vite('resources/css/subscription.css')\n@endsection\n"
  },
  {
    "path": "resources/views/settings/subscription/change.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */ ?>\n<x-dialog.header>\n    {{ __('subscriptions/confirm.title', ['name' => $tier->name]) }}\n</x-dialog.header>\n\n<article class=\"max-w-xl container p-4 md:px-6\">\n\n    <x-grid type=\"1/1\">\n    @if ($user->isFrauding())\n        <x-alert type=\"warning\">\n            {{ __('emails/validation.modal') }}\n        </x-alert></div><?php return; ?>\n    @endif\n\n    <div class=\"flex gap-4\">\n        <div class=\"flex-none\">\n            <img class=\"rounded-full w-fit flex-none\" src=\"{{ $tier->image() }}\" alt=\"{{ $tier->name }}\"/>\n        </div>\n        <div class=\"flex flex-col gap-2 grow\">\n            <div class=\"text-xl\">\n        @if ($user->hasManualSubscription())\n                    You currently have a manual subscription managed by our team. Please contact us at <a href=\"mailto:{{ config('app.email') }}\" class=\"text-link\">{{ config('app.email') }}</a> for assistance.\n        @elseif ($user->hasPayPal())\n            {!! __('settings.subscription.change.text.upgrade_paypal', [\n                'upgrade' => \"<strong>$currency\" . \\Illuminate\\Support\\Number::format($upgrade, 2) . \"</strong>\",\n                'tier' => \"<strong>$tier->name</strong>\",\n                'amount' => \"<strong>$currency$amount</strong>\",\n                'date' => $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y')\n            ]) !!}\n        @else\n            @if ($isDowngrading)\n                {!! __('settings.subscription.change.text.downgrade_' . ($period->isYearly() ? 'yearly' : 'monthly'), [\n                    'downgrade' => \"<strong>$currency<span id='pricing-now'>\" . \\Illuminate\\Support\\Number::format($upgrade, 2) . \"</span></strong>\",\n                    'tier' => \"<strong>$tier->name</strong>\",\n                    'amount' => \"<strong>$currency$amount</strong>\"\n                ]) !!}\n            @else\n                {!! __('settings.subscription.change.text.upgrade_' . ($period->isYearly() ? 'yearly' : 'monthly'), [\n                    'upgrade' => \"<strong>$currency<span id='pricing-now'>\" . \\Illuminate\\Support\\Number::format($upgrade, 2) . \"</span></strong>\",\n                    'tier' => \"<strong>$tier->name</strong>\",\n                    'amount' => \"<strong>$currency$amount</strong>\"\n                ]) !!}\n            @endif\n        @endif\n            </div>\n            @if (!$isDowngrading)\n            <div class=\"text-sm text-neutral-content\">\n                {{ __('subscriptions/confirm.helpers.tiny') }}\n            </div>\n            @endif\n        </div>\n    </div>\n\n    @if ($user->hasManualSubscription())\n        @php return @endphp\n    @endif\n    <x-alert type=\"error\" :hidden=\"true\"></x-alert>\n\n    <div class=\"flex flex-col gap-2\">\n        <select name=\"select-method\" class=\"select\">\n            @if (! $limited)\n                <option value=\"card\">\n                    {{ __('billing/payment_methods.types.card') }}\n                </option>\n            @endif\n            <option value=\"paypal\">\n                PayPal\n            </option>\n        </select>\n    </div>\n\n        @if (! $limited)\n        <div class=\"transition-all duration-150\" id=\"card-panel\">\n            <x-form :action=\"['settings.subscription.subscribe', 'tier' => $tier]\" id=\"subscription-confirm\" direct>\n\n            <x-grid type=\"1/1\" css=\"text-left\">\n                @if (!$card)\n                    <x-forms.field field=\"card-name\" :label=\"__('settings.subscription.payment_method.card_name')\">\n                        <input type=\"text\" name=\"card-holder-name\"  />\n                    </x-forms.field>\n\n                    <x-forms.field field=\"card-number\" :label=\"__('settings.subscription.payment_method.card')\">\n                        <div id=\"card-element\" class=\"\"></div>\n                    </x-forms.field>\n                @else\n                    <div class=\"text-center\">\n                        <strong>{{ __('settings.subscription.fields.payment_method') }}</strong><br />\n                        <x-icon class=\"fa-solid fa-credit-card\" /> **** {{ $card->card->last4 }} {{ $card->card->exp_month }}/{{ $card->card->exp_year }}\n                        <p><a href=\"{{ route('billing.payment-method') }}\" class=\"text-link\">{{ __('settings.subscription.payment_method.actions.change') }}</a></p>\n                    </div>\n                    @if ($isDowngrading)\n\n                        <x-helper>\n                            <p>{!! __('settings.subscription.upgrade_downgrade.downgrade.provide_reason')!!}</p>\n                        </x-helper>\n\n                        <div class=\"field-reason\">\n                            <label>{{ __('settings.subscription.fields.reason') }}</label>\n\n                            @php $reasons = [\n                                '' => __('crud.select'),\n                                'financial' => __('settings.subscription.cancel.options.financial'),\n                                'not_using' => __('settings.subscription.cancel.options.not_using'),\n                                'missing_features' => __('settings.subscription.cancel.options.missing_features'),\n                                'custom' => __('settings.subscription.cancel.options.other')\n                            ]; @endphp\n                            <div class=\"flex flex-col gap-2\">\n                                <x-forms.select name=\"reason\" :options=\"$reasons\" class=\"w-full select-reveal-field\" :extra=\"['data-change-target' => '#downgrade-reason-custom']\" />\n\n                                <textarea name=\"reason_custom\" placeholder=\"{{ __('settings.subscription.placeholders.downgrade_reason') }}\" class=\"w-full\" rows=\"4\" id=\"downgrade-reason-custom\"></textarea>\n                            </div>\n                        </div>\n\n                    @endif\n                @endif\n\n                @includeWhen($hasPromo, 'settings.subscription._promo')\n                <div class=\"text-center\">\n                    <button class=\"btn2 btn-block btn-primary subscription-confirm-button\">\n                        {{ __('subscriptions/confirm.actions.subscribe', [\n    'currency' => $currency,\n    'amount' => $amount,\n]) }}\n                    </button>\n                </div>\n\n\n                <div class=\"text-neutral-content flex flex-col gap-2 text-left\">\n                    <div class=\"flex gap-1\">\n                        <x-icon class=\"fa-regular fa-question-circle w-5 flex-none\" />\n                        <p class=\"text-xs\">\n                            @if ($isYearly)\n                                {!! __('subscriptions/confirm.helpers.auto-renew.yearly', ['date' => $nextBillingDate->isoFormat('MMMM D, Y')]) !!}\n                            @else\n                                {!! __('subscriptions/confirm.helpers.auto-renew.monthly', ['date' => $nextBillingDate->isoFormat('MMMM D, Y')]) !!}\n                            @endif\n                        </p>\n                    </div>\n                    <div class=\"flex gap-1\">\n                        <x-icon class=\"fa-regular fa-shield w-5 flex-none\" />\n                        <p class=\"text-xs\">{!! __('settings.subscription.helpers.stripe', ['stripe' => '<a href=\"https://stripe.com\" class=\"text-link\">Stripe</a>']) !!}</p>\n                    </div>\n                    @if($isYearly)\n                        <div class=\"flex gap-1\">\n                            <x-icon class=\"fa-regular fa-handshake w-5 flex-none\" />\n                            <p class=\"text-xs grow\">\n                                {!! __('subscriptions/confirm.helpers.refund', ['email' => '<a href=\"mailto' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>']) !!}\n                            </p>\n                        </div>\n                    @endif\n                </div>\n            </x-grid>\n\n            <input type=\"hidden\" name=\"coupon\" id=\"coupon\" value=\"\" />\n            <input type=\"hidden\" name=\"period\" value=\"{{ $period->isYearly() ? 'yearly' : 'monthly' }}\" />\n            <input type=\"hidden\" name=\"payment_id\" value=\"{{ $card ? $card->id : null }}\" />\n            <input type=\"hidden\" name=\"subscription-intent-token\" value=\"{{ $intent->client_secret }}\" />\n            </x-form>\n        </div>\n        @endif\n        <div class=\"transition-all duration-150 {{ $limited ? '' : 'hidden' }}\" id=\"paypal-panel\">\n\n            <x-grid type=\"1/1\" css=\"text-left\">\n            @if (!$period->isYearly())\n                <x-alert type=\"warning\">\n                    {{ __('settings.subscription.helpers.alternatives_yearly', ['method' => 'PayPal']) }}\n                </x-alert>\n            @else\n                @if ($user->subscribed('kanka') && !$user->hasPayPal())\n                    <x-alert type=\"warning\">\n                        {{ __('settings.subscription.helpers.alternatives_warning') }}\n                    </x-alert>\n                @else\n\n                @if ($hasPromo)\n                    <x-alert type=\"warning alert-coupon\" hidden class=\"paypal-coupon\">\n                        Promotional codes aren't available when subscribing through PayPal.\n                    </x-alert>\n                @endif\n\n                <x-form :action=\"['paypal.process-transaction', 'tier' => $tier]\" class=\"subscription-form flex flex-row gap-5\">\n                    <x-grid type=\"1/1\">\n                        <x-helper>\n                            <p>{{ __('settings.subscription.helpers.paypal_v3') }}</p>\n                        </x-helper>\n\n                        <button class=\"btn2 btn-block btn-primary subscription-confirm-button\" data-text=\"{{ __('settings.subscription.actions.subscribe') }}\">\n                            <x-icon class=\"fa-brands fa-paypal\" />\n                            {!! __('subscriptions/confirm.actions.paypal', [\n'currency' => $currency,\n'amount' => $amount,\n]) !!}\n                        </button>\n\n                        <div class=\"text-neutral-content flex flex-col gap-2 text-left\">\n                            <div class=\"flex gap-1\">\n                                <x-icon class=\"fa-regular fa-question-circle w-5 flex-none\" />\n                                <p class=\"text-xs\">\n                                    {!! __('subscriptions/confirm.helpers.auto-renew.none', ['date' => $nextBillingDate->isoFormat('MMMM D, Y')]) !!}\n                                </p>\n                            </div>\n                            <div class=\"flex gap-1\">\n                                <x-icon class=\"fa-regular fa-shield w-5 flex-none\" />\n                                <p class=\"text-xs\">{!! __('subscriptions/confirm.helpers.paypal') !!}</p>\n                            </div>\n                            @if($isYearly)\n                                <div class=\"flex gap-1\">\n                                    <x-icon class=\"fa-regular fa-handshake w-5 flex-none\" />\n                                    <p class=\"text-xs grow\">\n                                        {!! __('subscriptions/confirm.helpers.refund', ['email' => '<a href=\"mailto' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>']) !!}\n                                    </p>\n                                </div>\n                            @endif\n                        </div>\n                    </x-grid>\n                    <input type=\"hidden\" name=\"coupon\" id=\"coupon\" value=\"\" />\n                    <input type=\"hidden\" name=\"period\" value=\"{{ $period->isYearly() ? 'yearly' : 'monthly' }}\" />\n                    <input type=\"hidden\" name=\"payment_id\" value=\"{{ $card ? $card->id : null }}\" />\n                    <input type=\"hidden\" name=\"subscription-intent-token\" value=\"{{ $intent->client_secret }}\" />\n                </x-form>\n                @endif\n            @endif\n            </x-grid>\n        </div>\n    </div>\n    </x-grid>\n</article>\n"
  },
  {
    "path": "resources/views/settings/subscription/change_blocked.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */ ?>\n<x-dialog.header>\n    {{ __('settings.subscription.change.title') }}\n</x-dialog.header>\n\n<article class=\"text-center max-w-xl container p-4 md:px-6\">\n    <x-alert type=\"warning\" class=\"w-full text-left\">\n        {{ __('subscription.errors.grace', ['date' => $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y')]) }}\n    </x-alert>\n\n</article>\n"
  },
  {
    "path": "resources/views/settings/subscription/currency/_blocked.blade.php",
    "content": "<x-grid type=\"1/1\">\n<x-alert type=\"warning\">\n    <p>\n        {!! __('settings.subscription.helpers.currency_block', ['email' => '<a href=\"mailto' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>'])!!}\n    </p>\n</x-alert>\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/subscription/currency/_form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    @if (auth()->user()->subscription('kanka')?->ended())\n        @include('settings.subscription.currency._reset')\n    @endif\n\n    <x-forms.field field=\"currency\" :label=\"__('settings.subscription.fields.currency')\">\n        <x-forms.select name=\"currency\" :options=\"$currencies\" :selected=\"auth()->user()->currency()\" />\n    </x-forms.field>\n\n    @if (auth()->user()->subscription('kanka')?->ended())\n        <x-forms.field field=\"reset_billing\" required :label=\" __('settings.subscription.fields.reset')\">\n            <input type=\"hidden\" name=\"reset_billing\" value=\"0\" />\n            <x-checkbox :text=\"__('settings.subscription.fields.reset_billing')\">\n                <input type=\"checkbox\" name=\"reset_billing\" value=\"1\" required/>\n            </x-checkbox>\n        </x-forms.field>\n    @endif\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/subscription/currency/_reset.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-alert type=\"warning\">\n        <p>\n            {!! __('settings.subscription.helpers.currency_reset') !!}\n        </p>\n    </x-alert>\n</x-grid>\n"
  },
  {
    "path": "resources/views/settings/subscription/currency/edit.blade.php",
    "content": "<x-form :action=\"['billing.payment-method.save']\" method=\"PATCH\">\n    @include('partials.forms._dialog', [\n        'title' => __('settings.subscription.currency.title'),\n        'content' => 'settings.subscription.currency.' . $content,\n        'submit' => __('settings.subscription.actions.update_currency'),\n    ])\n    <input type=\"hidden\" name=\"from\" value=\"{{ 'settings.subscription' }}\" />\n</x-form>\n"
  },
  {
    "path": "resources/views/settings/subscription/faq.blade.php",
    "content": "<section id=\"faq\" class=\"max-w-4xl mx-auto py-16 px-4\">\n    <h2 class=\"text-center mb-12\">{{ __('subscriptions/faq.title') }}</h2>\n\n    <div class=\"space-y-4\">\n\n        @foreach (['why', 'help', 'cost', 'methods', 'cancellation', 'renewal', 'trial', 'data' , 'downgrade', 'refund', 'discount', 'sharing', 'security', 'update', 'fail'] as $key)\n            <x-faq-element id=\"{{ $key }}\">\n                <x-slot name=\"question\">\n                    {{ __('subscriptions/faq.' . $key . '.question') }}\n                </x-slot>\n                <x-slot name=\"answer\">\n                    <p>\n                        {!! __('subscriptions/faq.' . $key . '.answer', [\n    'billing' => '<a href=\"' . route('billing.payment-method') . '\" class=\"text-link\">' . __('billing/menu.payment-method') . '</a>',\n    'stripe' => '<a href=\"https://stripe.com\" class=\"text-link\">Stripe</a>',\n    'email' => '<a href=\"mailto:' . config('app.email') . '\" class=\"text-link\">' . config('app.email') . '</a>'\n]) !!}\n                    </p>\n                </x-slot>\n            </x-faq-element>\n        @endforeach\n\n    </div>\n</section>\n"
  },
  {
    "path": "resources/views/settings/subscription/finish.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\User $user\n */\n\n?>\n@extends('layouts.app', [\n    'title' => __('subscriptions/finish.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">\n            {{ $isTrial ? __('subscriptions/free-trial.started.title') : __('subscriptions/finish.title') }}\n        </x-slot>\n        <x-slot name=\"subtitle\">\n            {{ $isTrial ? __('subscriptions/free-trial.started.header') : __('subscriptions/finish.header') }}\n        </x-slot>\n    </x-hero>\n    <x-grid type=\"1/1\">\n        <p>{{ __('subscriptions/finish.next') }}</p>\n\n        <div id=\"premium\" class=\"flex flex-col gap-4 bg-box p-4 rounded-2xl\">\n            <h2 class=\"text-2xl\">\n                <x-icon class=\"premium\" />\n                {{ __('subscriptions/finish.premium.title') }}\n            </h2>\n            <p>{!! __('subscriptions/finish.premium.helper', [\n    'plugins' => '<a href=\"' . config('marketplace.url') . '\" class=\"text-link\">' . __('footer.plugins') . '</a>'\n]) !!}</p>\n            <div class=\"flex flex-col gap-4\">\n                @foreach ($availableCampaigns as $availableCampaign)\n                    <div id=\"campaign-{{ $availableCampaign->id }}\" class=\"flex gap-4 border border-base-200 shadow-xs hover:shadow-md rounded-2xl px-4 py-2 items-center\">\n                        @if ($availableCampaign->image)\n                            <img src=\"{{ $availableCampaign->thumbnail(320, 240) }}\" alt=\"{{ $availableCampaign->name }}\" loading=\"lazy\" class=\"rounded-full w-12 h-12\" />\n                        @else\n                            <img src=\"https://th.kanka.io/zzKcBpijSBvm4rPWdzRpI82pTNQ=/320x240/smart/src/app/backgrounds/mountain-background-medium.jpg\" alt=\"{{ $availableCampaign->name }}\" loading=\"lazy\" class=\"rounded-full w-12 h-12\" />\n                        @endif\n\n                        <div class=\"flex gap-4 w-full items-center justify-between\">\n                            <div class=\"flex flex-col gap-1\">\n                                <a class=\"text-xl\" href=\"{{ route('dashboard', [$availableCampaign]) }}\">\n                                    {!! $availableCampaign->name !!}\n                                </a>\n                                <x-helper>\n                                    <p>{{ __('settings/boosters.campaign.standard') }}</p>\n                                </x-helper>\n                            </div>\n                            <a href=\"#\" data-toggle=\"dialog\" data-url=\"{{ route('campaign_boosts.create', ['campaign' => $availableCampaign, 'next' => 'subscription.finish']) }}\" class=\"btn2 btn-outline btn-sm\">\n                                <x-icon class=\"premium\" />\n                                {!! __('settings/premium.actions.unlock') !!}\n                            </a>\n                        </div>\n\n                    </div>\n                @endforeach\n            </div>\n        </div>\n\n        <div id=\"discord\" class=\"flex flex-col gap-4 bg-box p-4 rounded-2xl\">\n            <h2 class=\"text-2xl\">\n                <x-icon class=\"fa-brands fa-discord\" />\n                {{ __('subscriptions/finish.discord.title') }}\n            </h2>\n            <p>{!! __('subscriptions/finish.discord.helper', [\n]) !!}</p>\n            <p>\n            @if (!$user->discord())\n                <a href=\"{{ route('settings.apps') }}\" class=\"text-link\">\n                    {{ __('subscriptions/finish.discord.action') }}\n                </a>\n            @else\n                <a href=\"{{ \\App\\Facades\\Domain::toFront('go/discord') }}\" class=\"text-link\">\n                    {{ __('subscriptions/finish.discord.enjoy') }}\n                </a>\n            @endif\n            </p>\n        </div>\n\n        <div id=\"roadmap\" class=\"flex flex-col gap-4 bg-box p-4 rounded-2xl\">\n            <h2 class=\"text-2xl\">\n                <x-icon class=\"fa-regular fa-box-ballot\" />\n                {{ __('subscriptions/finish.roadmap.title') }}\n            </h2>\n            <p>{!! __('subscriptions/finish.roadmap.helper', [\n]) !!}</p>\n            <p>\n            <a href=\"{{ route('roadmap') }}\" class=\"text-link\">\n                {{ __('subscriptions/finish.roadmap.action') }}\n            </a>\n            </p>\n        </div>\n\n        <div id=\"help\" class=\"flex flex-col gap-4\">\n            <h2 class=\"text-2xl\">\n                {{ __('subscriptions/finish.help.title') }}\n            </h2>\n            <p>{!! __('subscriptions/finish.help.helper', [\n    'contact-us' => '<a href=\"' . \\App\\Facades\\Domain::toFront('contact') . '\" class=\"text-link\">' . __('subscriptions/finish.help.contact-us') . '</a>',\n    'docs' => '<a href=\"https://docs.kanka.io\" class=\"text-link\">' . __('footer.documentation') . '</a>'\n]) !!}</p>\n        </div>\n    </x-grid>\n@endsection\n\n\n\n@section('scripts')\n    @parent\n    @vite('resources/js/subscription.js')\n\n@if($tracking == 'subscribed')\n    <script>\n        gtag('event', 'conversion', {\n            'send_to': 'AW-659212134/z5nbCLmq0fsBEOaOq7oC',\n            'transaction_id': '{{ auth()->user()->id }}'\n        });\n    </script>\n@endif\n@endsection\n\n@section('styles')\n    @vite('resources/css/subscription.css')\n@endsection\n"
  },
  {
    "path": "resources/views/settings/subscription/free-trial.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\User $user\n */\n\n?>\n@extends('layouts.app', [\n    'title' => __('subscriptions/free-trial.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n    'skipBanners' => true\n])\n\n@section('content')\n    <x-hero>\n        <x-slot name=\"title\">{{ __('subscriptions/free-trial.title') }}</x-slot>\n        <x-slot name=\"subtitle\">{!! __('subscriptions/free-trial.header', [\n    'what' => '<strong>' . __('subscriptions/free-trial.what', [\n        'amount' => 15,\n        'tier' => 'Owlbear'\n]) . '</strong>'\n]) !!}</x-slot>\n        <x-form method=\"POST\" :action=\"['settings.free-trial.accept']\">\n        <button type=\"submit\" class=\"btn2 btn-primary mt-4 mb-1\">\n            <x-icon class=\"fa-regular fa-gift\" />\n            {{ __('subscriptions/free-trial.actions.accept') }}\n        </button>\n        <x-helper class=\"text-xs\">\n            {{ __('subscriptions/free-trial.actions.magic') }}\n        </x-helper>\n        </x-form>\n    </x-hero>\n\n    <x-grid type=\"1/1\">\n        <div id=\"included\" class=\"flex flex-col gap-4 bg-box p-4 rounded-2xl\">\n            <h2 class=\"text-2xl\">\n                <x-icon class=\"fa-regular fa-check-square\" />\n                {{ __('subscriptions/free-trial.included.title') }}\n            </h2>\n\n            <div class=\"flex flex-col gap-1 w-fit\">\n            @include('settings.subscription.tiers.benefits._owlbear')\n            </div>\n\n            <p>\n                {!! __('subscriptions/free-trial.included.upsell.pitch', [\n    'tier' => 'Owlbear',\n]) !!}\n                <a href=\"{{ route('settings.subscription') }}\" class=\"text-link\">\n                    {{ __('subscriptions/free-trial.included.upsell.action') }}\n                </a>\n\n            </p>\n        </div>\n\n        <div id=\"why\" class=\"flex flex-col gap-4 bg-box p-4 rounded-2xl\">\n            <h2 class=\"text-2xl\">\n                <x-icon class=\"fa-regular fa-trophy\" />\n                {{ __('subscriptions/free-trial.why.title') }}\n            </h2>\n            <p>{!! __('subscriptions/free-trial.why.helper', [\n    'plugins' => '<a href=\"' . config('marketplace.url') . '\" class=\"text-link\">' . __('footer.plugins') . '</a>'\n]) !!}</p>\n        </div>\n\n\n        <div id=\"tease\" class=\"flex flex-col gap-4 bg-box p-4 rounded-2xl\">\n            <h2 class=\"text-2xl\">\n                <x-icon class=\"fa-regular fa-mountain\" />\n                {{ __('subscriptions/free-trial.tease.title') }}\n            </h2>\n            <p>{!! __('subscriptions/free-trial.tease.helper', [\n    'subscription' => '<a href=\"' . route('settings.subscription') . '\" class=\"text-link\">' . __('billing/menu.overview') . '</a>'\n]) !!}</p>\n        </div>\n\n        <x-form method=\"POST\" :action=\"['settings.free-trial.accept']\">\n        <div class=\"flex flex-col gap-2\">\n            <p>\n                <button type=\"submit\" class=\"btn2 btn-primary mt-4 mb-1\">\n                    <x-icon class=\"fa-regular fa-gift\" />\n                    {{ __('subscriptions/free-trial.final.title') }}\n                </button>\n            </p>\n            <x-helper class=\"text-xs\">\n                {{ __('subscriptions/free-trial.final.magic') }}\n            </x-helper>\n        </div>\n        </x-form>\n\n    </x-grid>\n@endsection\n\n\n@section('scripts')\n    @parent\n    @vite('resources/js/subscription.js')\n@endsection\n\n@section('styles')\n    @vite('resources/css/subscription.css')\n@endsection\n"
  },
  {
    "path": "resources/views/settings/subscription/index.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\CampaignBoost $boost\n * @var \\App\\Models\\Campaign $campaign\n * @var \\App\\Models\\User $user\n */\n\n?>\n@extends('layouts.app', [\n    'title' => __('settings.subscription.manage_subscription'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n    <x-grid type=\"1/1\">\n        <h1 class=\"text-2xl\">{{ __('settings.subscription.manage_subscription') }}</h1>\n\n        <p class=\"\">\n            {!! __('subscription.benefits.main', [\n                'more' => '<a href=\"https://kanka.io/pricing\" class=\"text-link\">' . __('subscription.benefits.more') . '</a>',\n                'boosters' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaigns') . '</a>',\n                'stripe' => '<a href=\"https://stripe.com\" class=\"text-link\">Stripe</a>'\n            ]) !!}\n        </p>\n\n        @include('partials.errors')\n\n        @can('renewPaypalSubscription', $user)\n            <x-alert type=\"warning\">\n                <p class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n                    <span>\n                        {!! __('settings.subscription.paypal_expiring', [\n                            'date' => '<strong>' . $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y') . '</strong>',\n                        ]) !!}\n                    </span>\n                    <a href=\"{{ route('paypal.renew') }}\" class=\"btn2 btn-warning btn-sm whitespace-nowrap\">\n                        {{ __('subscriptions/renew.actions.renew') }}\n                    </a>\n                </p>\n            </x-alert>\n        @endcan\n\n        @include('settings.subscription._recap')\n\n        <h2 class=\"text-xl m-0\">\n            {{ __('settings.subscription.tiers') }}\n        </h2>\n\n            <p>\n                {!! __('tiers.why', ['tiny' => '<a href=\"' . \\App\\Facades\\Domain::toFront('about') . '\" class=\"text-link\" >' . __('tiers.tiny') . '</a>']) !!}\n            </p>\n\n        @if (!$isPayPal && !$hasManual)\n            <div class=\"flex justify-center\">\n                <div class=\"grid grid-cols-2 gap-2 rounded-2xl bg-base-200 p-0.5 items-center justify-items-stretch font-bold w-full xl:w-auto\">\n                    <div class=\"rounded-2xl px-3 py-2 bg-base-100 flex items-center cursor-pointer justify-center transition-all duration-150\" data-period=\"monthly\" role=\"button\">\n                        {{ __('tiers.actions.pay.monthly') }}\n                    </div>\n                    <div class=\"rounded-2xl px-3 py-2 flex items-center cursor-pointer justify-center text-neutral-content gap-1 transition-all duration-150\" data-period=\"yearly\" role=\"button\">\n                        <span>{{ __('tiers.actions.pay.yearly') }}</span>\n                        <span class=\"text-primary text-xs\">{{ __('tiers.actions.pay.save') }}</span>\n                    </div>\n                </div>\n            </div>\n        @endif\n\n        <div class=\"grid grid-cols-1 @if ($user->isSubscriber()) lg:grid-cols-3 @else md:grid-cols-2 xl:grid-cols-4 @endif gap-4 @if ($isPayPal || $hasManual) period-year @else period-month @endif mx-auto lg:mx-0\" id=\"pricing-overview\">\n            @php /** @var \\App\\Models\\Tier $tier **/ @endphp\n            @foreach ($tiers as $tier)\n                @if ($tier->isFree() && $user->isSubscriber())\n                    @continue\n                @endif\n                <article class=\"rounded-2xl bg-box flex flex-col gap-4 p-4 relative max-w-2xl lg:max-w-none @if ($tier->isCurrent($user)) border-primary border  @endif shadow-xs hover:shadow-md \">\n                    <div class=\"flex gap-2 flex-col \">\n                        <div class=\"flex justify-between gap-2\">\n                            <img class=\"w-16 h-16 \" src=\"{{ $tier->image() }}\" alt=\"{{ $tier->name }}\"/>\n                        </div>\n                        <div class=\"grow flex flex-col gap-2 w-full\">\n                            <div class=\"text-lg\">\n                                {{ $tier->name }}\n                            </div>\n                            @if ($tier->isFree())\n                                <div class=\"price text-neutral-content\">\n                                    {{ __('front.features.patreon.free') }}\n                                </div>\n                            @else\n                                <div class=\"price price-monthly flex gap-2 w-full items-end\">\n                                    <div class=\"text-2xl\">\n                                        {{ $user->currencySymbol() }}\n                                        {{ \\Illuminate\\Support\\Number::format($tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Monthly), 2) }}\n                                    </div>\n                                    <span class=\"text-sm text-neutral-content \">{{ __('tiers.periods.billed_monthly') }}</span>\n                                </div>\n                                <div class=\"price price-yearly flex gap-2 w-full items-end\">\n                                    <div class=\"text-2xl\">\n                                        {{ $user->currencySymbol() }}\n                                        {{ \\Illuminate\\Support\\Number::format($tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Yearly), 2) }}\n                                    </div>\n                                    <span class=\"text-sm text-neutral-content \">{{ __('tiers.periods.billed_yearly') }}</span>\n                                </div>\n                            @endif\n\n                            @if ($tier->code === 'owlbear')\n                                <p class=\"\">{{ __('tiers.target.owlbear') }}</p>\n                            @elseif ($tier->isWyvern())\n                                <p class=\"\">{{ __('tiers.target.wyvern') }}</p>\n                            @elseif ($tier->code === 'elemental')\n                                <p class=\"\">{{ __('tiers.target.elemental') }}</p>\n                            @endif\n                        </div>\n                    </div>\n                    @if (!$user->isLegacyPatron() && !$user->hasIncompletePayment('kanka'))\n                        <div class=\"flex flex-col gap-1\">\n                            @include('settings.subscription.tiers.actions._' . $tier->code)\n                        </div>\n                    @endif\n                    <div class=\"flex flex-col gap-2\">\n                        @includeIf('settings.subscription.tiers.benefits._' . $tier->code)\n                    </div>\n                    @if (!$tier->isFree() && $tier->isCurrent($user) && $user->subscribed('kanka') && !$hasManual && !$user->hasPayPal())\n                        <div class=\"self-bottom\">\n                            @if ($user->subscription('kanka')?->onGracePeriod())\n                                <a class=\"btn2 btn-block btn-sm btn-primary \" data-toggle=\"dialog\" data-target=\"subscribe-confirm\" data-url=\"{{ route('settings.subscription.change', [$tier]) }}\">\n                                    {{ __('subscriptions/renew.actions.renew') }}\n                                </a>\n                            @else\n                                <a class=\"btn2 btn-block btn-sm btn-error \" data-toggle=\"dialog\" data-target=\"subscribe-confirm\" data-url=\"{{ route('settings.subscription.unsubscribe') }}\">\n                                    {{ __('settings.subscription.subscription.actions.cancel') }}\n                                </a>\n                            @endif\n                        </div>\n                    @endif\n                </article>\n            @endforeach\n        </div>\n\n        @include('settings.subscription.faq')\n    </x-grid>\n    <input type=\"hidden\" id=\"stripe-token\" value=\"{{ config('services.stripe.key') }}\" />\n@endsection\n\n@section('modals')\n    @parent\n\n    <x-dialog id=\"subscribe-confirm\" :loading=\"true\" ></x-dialog>\n@endsection\n\n\n@section('scripts')\n    @parent\n    @vite('resources/js/subscription.js')\n    <script src=\"https://js.stripe.com/v3/\"></script>\n\n    @if (!$user->isSubscriber())\n        <script>\n            gtag('event', 'view_item_list', {\n                item_list_id: 'pricing_tiers',\n                item_list_name: '{{ __('settings.subscription.manage_subscription') }}'\n            });\n        </script>\n    @endif\n@endsection\n\n@section('styles')\n    @vite('resources/css/subscription.css')\n@endsection\n"
  },
  {
    "path": "resources/views/settings/subscription/paypal-renew.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\User $user\n * @var \\Illuminate\\Database\\Eloquent\\Collection|\\App\\Models\\Tier[] $tiers\n */\n?>\n@extends('layouts.app', [\n    'title' => __('subscriptions/renew.title'),\n    'breadcrumbs' => false,\n    'sidebar' => 'settings',\n    'centered' => true,\n])\n\n@section('content')\n<x-grid type=\"1/1\">\n    <h1 class=\"text-2xl\">{{ __('subscriptions/renew.title') }}</h1>\n\n    <x-helper>\n        <p>\n            {!! __('subscriptions/paypal-renew.intro', [\n                'date' => '<strong>' . $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y') . '</strong>',\n            ]) !!}\n        </p>\n    </x-helper>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n        @foreach ($tiers as $tier)\n            <article class=\"rounded-2xl bg-box flex flex-col gap-4 p-4 relative shadow-xs hover:shadow-md @if ($tier->isCurrent($user)) border-primary border @endif\">\n                <div class=\"flex gap-2 flex-col \">\n                    <div class=\"flex justify-between gap-2\">\n                        <img class=\"w-16 h-16 \" src=\"{{ $tier->image() }}\" alt=\"{{ $tier->name }}\"/>\n                    </div>\n                    <div class=\"grow flex flex-col gap-2 w-full\">\n                        <div class=\"text-lg\">\n                            {{ $tier->name }}\n                        </div>\n                        @if ($tier->isFree())\n                            <div class=\"price text-neutral-content\">\n                                {{ __('front.features.patreon.free') }}\n                            </div>\n                        @else\n                            <div class=\"price price-yearly flex gap-2 w-full items-end\">\n                                <div class=\"text-2xl\">\n                                    {{ $user->currencySymbol() }}\n                                    {{ \\Illuminate\\Support\\Number::format($tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Yearly), 2) }}\n                                </div>\n                                <span class=\"text-sm text-neutral-content \">{{ __('tiers.periods.billed_yearly') }}</span>\n                            </div>\n                        @endif\n\n                        @if ($tier->code === 'owlbear')\n                            <p class=\"\">{{ __('tiers.target.owlbear') }}</p>\n                        @elseif ($tier->isWyvern())\n                            <p class=\"\">{{ __('tiers.target.wyvern') }}</p>\n                        @elseif ($tier->code === 'elemental')\n                            <p class=\"\">{{ __('tiers.target.elemental') }}</p>\n                        @endif\n                    </div>\n                </div>\n\n                @php\n                    $isDowngrade = match($user->pledge) {\n                        'Elemental' => in_array($tier->name, ['Owlbear', 'Wyvern']),\n                        'Wyvern'    => $tier->name === 'Owlbear',\n                        default     => false,\n                    };\n                @endphp\n\n                @if (!$isDowngrade)\n                    <x-form :action=\"['paypal.renew-process', 'tier' => $tier]\" class=\"w-full\" direct>\n                        <button type=\"submit\" class=\"btn2 btn-primary btn-block\">\n                                {{ $tier->isCurrent($user)\n                                    ? __('subscriptions/renew.actions.renew')\n                                    : __('tiers.actions.subscribe.upgrade', ['tier' => $tier->name]) }}\n                        </button>\n                    </x-form>\n                @endif\n\n                <div class=\"flex flex-col gap-2\">\n                    @include('settings.subscription.tiers.benefits._' . strtolower($tier->name))\n                </div>\n\n\n            </article>\n        @endforeach\n    </div>\n</x-grid>\n@endsection\n"
  },
  {
    "path": "resources/views/settings/subscription/renew.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */ ?>\n@php\n    $endDate = $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y');\n@endphp\n<x-dialog.header>\n    {{ __('subscriptions/renew.title') }}\n</x-dialog.header>\n\n<article class=\"text-center max-w-xl container p-4 md:px-6\">\n    <x-grid type=\"1/1\">\n        <x-helper>\n            <p class=\"text-left\">\n                {!! __('settings.subscription.cancel.grace.text', ['date' => '<span class=\"text-error-content\">' . $endDate . '</span>'])!!}\n            </p>\n        </x-helper>\n        <x-helper>\n            <p class=\"text-left\">\n                {!! __('subscriptions/renew.helper')!!}\n            </p>\n        </x-helper>\n    </x-grid>\n\n    <x-form :action=\"['settings.subscription.renew']\">\n\n        <x-buttons.confirm type=\"primary\">\n            <x-icon class=\"fa-solid fa-repeat\" />\n            <span>\n                {{ __('subscriptions/renew.actions.renew') }}\n            </span>\n        </x-buttons.confirm>\n    </x-form>\n</article>\n"
  },
  {
    "path": "resources/views/settings/subscription/tiers/actions/_elemental.blade.php",
    "content": "@php\n    /**\n     * @var \\App\\Models\\User $user\n     * @var \\App\\Models\\Tier $tier\n     */\n@endphp\n@if ($user->hasPayPal())\n    @if (!$user->isElemental())\n        <a class=\"btn2 btn-block btn-primary\" data-toggle=\"dialog\" data-target=\"subscribe-confirm\" data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'yearly']) }}\">\n            {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n        </a>\n    @endif\n@else\n    @if($user->subscribedToPrice($tier->monthlyPlans(), 'kanka'))\n        <a class=\"btn2 btn-block disabled\">\n            {{ __('tiers.current') }}\n        </a>\n    @elseif ($user->subscribedToPrice($tier->plans(), 'kanka'))\n        <a class=\"btn2 btn-block disabled\">\n            {{ __('settings.subscription.subscription.actions.downgrading') }}\n        </a>\n    @else\n        <a class=\"btn2 btn-block btn-primary price-monthly\"\n           data-toggle=\"dialog\"\n           data-target=\"subscribe-confirm\"\n           data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'monthly']) }}\"\n           data-id=\"{{ $tier->code . '-monthly' }}\"\n           data-name=\"{{ $tier->name }} Monthly\"\n           data-price=\"{{ $tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Monthly) }}\">\n            @if (in_array($tier->id, $upgrades))\n                {{ __('tiers.actions.subscribe.upgrade', ['tier' => $tier->name]) }}\n            @elseif (in_array($tier->id, $downgrades))\n                {{ __('tiers.actions.subscribe.downgrade', ['tier' => $tier->name]) }}\n            @else\n                {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n            @endif\n        </a>\n    @endif\n\n    @if($user->subscribedToPrice($tier->yearlyPlans(), 'kanka'))\n        <a class=\"btn2 btn-block disabled price-yearly\">\n            {{ __('tiers.current') }}\n        </a>\n    @else\n        <a\n            class=\"btn2 btn-block btn-primary price-yearly\"\n            data-toggle=\"dialog\"\n            data-target=\"subscribe-confirm\"\n            data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'yearly']) }}\"\n            data-id=\"{{ $tier->code . '-yearly' }}\"\n            data-name=\"{{ $tier->name }} Yearly\"\n            data-price=\"{{ $tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Yearly) }}\">\n            @if (in_array($tier->id, $upgrades))\n                {{ __('tiers.actions.subscribe.upgrade', ['tier' => $tier->name]) }}\n            @elseif (in_array($tier->id, $downgrades))\n                {{ __('tiers.actions.subscribe.downgrade', ['tier' => $tier->name]) }}\n            @else\n                {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n            @endif\n        </a>\n    @endif\n@endif\n"
  },
  {
    "path": "resources/views/settings/subscription/tiers/actions/_kobold.blade.php",
    "content": "<?php /** @var \\App\\Models\\TierPrice $current */?>\n@if (!$user->hasPayPal())\n    @if(empty($current))\n        <span class=\"btn2 btn-block\">\n            {{ __('tiers.current') }}\n        </span>\n    @else\n        <a class=\"btn2 btn-block btn-error \" data-toggle=\"dialog\" data-target=\"subscribe-confirm\" data-url=\"{{ route('settings.subscription.change', ['tier' => 1]) }}\">\n            {{ __('settings.subscription.subscription.actions.cancel') }}\n        </a>\n    @endif\n@endif\n"
  },
  {
    "path": "resources/views/settings/subscription/tiers/actions/_owlbear.blade.php",
    "content": "@php\n/**\n * @var \\App\\Models\\User $user\n * @var \\App\\Models\\Tier $tier\n */\n@endphp\n@if ($user->hasPayPal())\n    @if (!$user->isWyvern() && !$user->isElemental())\n        <a class=\"btn2 btn-block btn-primary\" data-toggle=\"dialog\" data-target=\"subscribe-confirm\" data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'yearly']) }}\">\n            {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n        </a>\n    @endif\n@else\n    @if($user->subscribedToPrice($tier->monthlyPlans(), 'kanka'))\n        <a class=\"btn2 btn-block disabled price-monthly\">\n            {{ __('tiers.current') }}\n        </a>\n    @else\n        <a\n            class=\"btn2 btn-block btn-primary price-monthly\"\n            data-toggle=\"dialog\"\n            data-target=\"subscribe-confirm\"\n            data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'monthly']) }}\"\n            data-id=\"{{ $tier->code . '-monthly' }}\"\n            data-name=\"{{ $tier->name }} Monthly\"\n            data-price=\"{{ $tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Monthly) }}\"\n        >\n            @if (in_array($tier->id, $downgrades))\n                {{ __('tiers.actions.subscribe.downgrade', ['tier' => $tier->name]) }}\n            @else\n                {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n            @endif\n        </a>\n\n        @if($user->subscribedToPrice($tier->yearlyPlans(), 'kanka'))\n            <a class=\"btn2 btn-block disabled price-yearly\">\n                {{ __('tiers.current') }}\n            </a>\n        @else\n            <a\n                class=\"btn2 btn-block btn-primary price-yearly\"\n                data-toggle=\"dialog\"\n                data-target=\"subscribe-confirm\"\n                data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'yearly']) }}\"\n                data-id=\"{{ $tier->code . '-yearly' }}\"\n                data-name=\"{{ $tier->name }} Yearly\"\n                data-price=\"{{ $tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Yearly) }}\"\n            >\n                @if (in_array($tier->id, $upgrades))\n                    {{ __('tiers.actions.subscribe.upgrade', ['tier' => $tier->name]) }}\n                @elseif (in_array($tier->id, $downgrades))\n                    {{ __('tiers.actions.subscribe.downgrade', ['tier' => $tier->name]) }}\n                @else\n                    {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n                @endif\n            </a>\n        @endif\n    @endif\n@endif\n"
  },
  {
    "path": "resources/views/settings/subscription/tiers/actions/_wyvern.blade.php",
    "content": "@php\n    /**\n     * @var \\App\\Models\\User $user\n     * @var \\App\\Models\\Tier $tier\n     */\n@endphp\n@if ($user->hasPayPal())\n    @if (!$user->isWyvern() && !$user->isElemental())\n        <a class=\"btn2 btn-block btn-primary\" data-toggle=\"dialog\" data-target=\"subscribe-confirm\" data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'yearly']) }}\">\n            {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n        </a>\n    @endif\n@else\n    @if($user->subscribedToPrice($tier->monthlyPlans(), 'kanka'))\n        <a class=\"btn2 btn-block disabled\">\n            {{ __('tiers.current') }}\n        </a>\n    @elseif ($user->subscribedToPrice($tier->plans(), 'kanka'))\n        <a class=\"btn2 btn-block disabled\">\n            {{ __('settings.subscription.subscription.actions.downgrading') }}\n        </a>\n    @else\n        <a\n            class=\"btn2 btn-block btn-primary price-monthly\"\n            data-toggle=\"dialog\"\n            data-target=\"subscribe-confirm\"\n            data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'monthly']) }}\"\n            data-id=\"{{ $tier->code . '-monthly' }}\"\n            data-name=\"{{ $tier->name }} Monthly\"\n            data-price=\"{{ $tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Monthly) }}\"\n        >\n            @if (in_array($tier->id, $upgrades))\n                {{ __('tiers.actions.subscribe.upgrade', ['tier' => $tier->name]) }}\n            @elseif (in_array($tier->id, $downgrades))\n                {{ __('tiers.actions.subscribe.downgrade', ['tier' => $tier->name]) }}\n            @else\n                {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n            @endif\n        </a>\n    @endif\n\n\n    @if($user->subscribedToPrice($tier->yearlyPlans(), 'kanka'))\n        <a class=\"btn2 btn-block disabled\">\n            {{ __('tiers.current') }}\n        </a>\n    @else\n        <a\n            class=\"btn2 btn-block btn-primary price-yearly\"\n            data-toggle=\"dialog\"\n            data-target=\"subscribe-confirm\"\n            data-url=\"{{ route('settings.subscription.change', ['tier' => $tier, 'period' => 'yearly']) }}\"\n            data-id=\"{{ $tier->code . '-yearly' }}\"\n            data-name=\"{{ $tier->name }} Yearly\"\n            data-price=\"{{ $tier->price($user->currency(), \\App\\Enums\\PricingPeriod::Yearly) }}\"\n        >\n            @if (in_array($tier->id, $upgrades))\n                {{ __('tiers.actions.subscribe.upgrade', ['tier' => $tier->name]) }}\n            @elseif (in_array($tier->id, $downgrades))\n                {{ __('tiers.actions.subscribe.downgrade', ['tier' => $tier->name]) }}\n            @else\n                {{ __('tiers.actions.subscribe.choose', ['tier' => $tier->name]) }}\n            @endif\n        </a>\n    @endif\n@endif\n"
  },
  {
    "path": "resources/views/settings/subscription/tiers/benefits/_elemental.blade.php",
    "content": "<div class=\"flex gap-1 text-base\">\n    <div class=\"w-8 shrink-0 text-center\">\n        @if (auth()->user()->hasBoosterNomenclature())\n            <x-icon class=\"fa-regular fa-rocket text-boost\" />\n        @else\n            <x-icon class=\"fa-regular fa-gem text-boost\" />\n        @endif\n    </div>\n\n    <div class=\"flex flex-col gap-0.5\">\n        <a href=\"https://kanka.io/premium?utm_source=subscription&utm_medium=referral&utm_campaign=elemental\" class=\"text-link\">\n        @if (auth()->user()->hasBoosterNomenclature())\n            10 {{ __('tiers.features.boosters') }}\n        @else\n            7 {{ __('concept.premium-campaigns') }}\n       @endif\n        </a>\n        <span class=\"text-xs text-neutral-content\">\n            {{ __('tiers.features.premium', ['storage' => config('limits.gallery.elemental') / 1024 / 1024, 'modules' => config('limits.campaigns.modules.elemental')]) }}\n        </span>\n    </div>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-image\" />\n    </div>\n    {{ __('tiers.features.file_size', ['size' => config('limits.filesize.image.elemental') . ' MiB']) }}\n</div>\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    {{ __('tiers.features.no_ads') }}\n</div>\n\n<hr class=\"my-4\" />\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-upload\" />\n    </div>\n    <a href=\"https://docs.kanka.io/en/latest/features/campaigns/import.html\" class=\"text-link\">\n        {{ __('tiers.features.import') }}\n    </a>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-webhook\" />\n    </div>\n    <a href=\"{{ route('larecipe.index') }}\" class=\"text-link\">\n        {{ __('tiers.features.api_requests', ['amount' => config('limits.api.throttle.subscriber')]) }}\n    </a>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    {{ __('tiers.features.nice_image') }}\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    <a href=\"{{ route('roadmap', ['utm_source' => 'subscription', 'utm_campaign' => 'elemental']) }}\" class=\"text-link\">{{ __('tiers.features.roadmap') }}</a>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    <div>\n        {!! __('tiers.features.discord', ['discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>',]) !!}\n    </div>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    {{ __('tiers.features.feature_influence') }}\n</div>\n"
  },
  {
    "path": "resources/views/settings/subscription/tiers/benefits/_kobold.blade.php",
    "content": "<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-image\" />\n    </div>\n    {{ __('tiers.features.file_size', ['size' => '1 MiB']) }}\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-webhook\" />\n    </div>\n    <a href=\"{{ route('larecipe.index') }}\" class=\"text-link\">\n        {{ __('tiers.features.api_requests', ['amount' => config('limits.api.throttle.standard')]) }}\n    </a>\n</div>\n"
  },
  {
    "path": "resources/views/settings/subscription/tiers/benefits/_owlbear.blade.php",
    "content": "<div class=\"flex gap-1 text-base\">\n    <div class=\"w-8 shrink-0 text-center\">\n        @if (auth()->user()->hasBoosterNomenclature())\n            <x-icon class=\"fa-regular fa-rocket text-boost\" />\n        @else\n            <x-icon class=\"fa-regular fa-gem text-boost\" />\n        @endif\n    </div>\n    <div class=\"flex flex-col gap-0.5\">\n        <a href=\"https://kanka.io/premium?utm_source=subscription&utm_medium=referral&utm_campaign=owlbear\" class=\"text-link\">\n            @if (auth()->user()->hasBoosterNomenclature())\n                3 {{ __('tiers.features.boosters') }}\n            @else\n                1 {{ __('concept.premium-campaign') }}<br />\n            @endif\n        </a>\n        <span class=\"text-xs text-neutral-content\">\n            {{ __('tiers.features.premium', ['storage' => config('limits.gallery.premium') / 1024 / 1024, 'modules' => config('limits.campaigns.modules.premium')]) }}\n        </span>\n    </div>\n</div>\n\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-image\" />\n    </div>\n    {{ __('tiers.features.file_size', ['size' => config('limits.filesize.image.owlbear') . ' MiB']) }}\n</div>\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    {{ __('tiers.features.no_ads') }}\n</div>\n\n<hr class=\"my-4\" />\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-webhook\" />\n    </div>\n    <a href=\"{{ route('larecipe.index') }}\" class=\"text-link\">\n        {{ __('tiers.features.api_requests', ['amount' => config('limits.api.throttle.subscriber')]) }}\n    </a>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    {{ __('tiers.features.nice_image') }}\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    <a href=\"{{ route('roadmap', ['utm_source' => 'subscription', 'utm_campaign' => 'owlbear']) }}\" class=\"text-link\">{{ __('tiers.features.roadmap') }}</a>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    <div>\n        {!! __('tiers.features.discord', ['discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>',]) !!}\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/settings/subscription/tiers/benefits/_wyvern.blade.php",
    "content": "<div class=\"flex gap-1 text-base\">\n    <div class=\"w-8 shrink-0 text-center\">\n        @if (auth()->user()->hasBoosterNomenclature())\n            <x-icon class=\"fa-regular fa-rocket text-boost\" />\n        @else\n            <x-icon class=\"fa-regular fa-gem text-boost\" />\n        @endif\n    </div>\n    <div class=\"flex flex-col gap-0.5\">\n        <a href=\"https://kanka.io/premium?utm_source=subscription&utm_medium=referral&utm_campaign=wyvern\" class=\"text-link\">\n            @if (auth()->user()->hasBoosterNomenclature())\n                6 {{ __('tiers.features.boosters') }}\n            @else\n                3 {{ __('concept.premium-campaigns') }}\n            @endif\n        </a>\n\n        <span class=\"text-xs text-neutral-content\">\n            {{ __('tiers.features.premium', ['storage' => config('limits.gallery.wyvern') / 1024 / 1024, 'modules' => config('limits.campaigns.modules.wyvern')]) }}\n        </span>\n    </div>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-image\" />\n    </div>\n    {{ __('tiers.features.file_size', ['size' => config('limits.filesize.image.wyvern') . ' MiB']) }}\n</div>\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    {{ __('tiers.features.no_ads') }}\n</div>\n\n<hr class=\"my-4\" />\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-upload\" />\n    </div>\n    <a href=\"https://docs.kanka.io/en/latest/features/campaigns/import.html\" class=\"text-link\">\n        {{ __('tiers.features.import') }}\n    </a>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"fa-regular fa-webhook\" />\n    </div>\n    <a href=\"{{ route('larecipe.index') }}\" class=\"text-link\">\n        {{ __('tiers.features.api_requests', ['amount' => config('limits.api.throttle.subscriber')]) }}\n    </a>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    {{ __('tiers.features.nice_image') }}\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    <a href=\"{{ route('roadmap', ['utm_source' => 'subscription', 'utm_campaign' => 'wyvern']) }}\" class=\"text-link\">{{ __('tiers.features.roadmap') }}</a>\n</div>\n\n<div class=\"flex gap-1\">\n    <div class=\"w-8 shrink-0 text-center\">\n        <x-icon class=\"check\" />\n    </div>\n    <div>\n        {!! __('tiers.features.discord', ['discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>',]) !!}\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/settings/tiers/_elemental.blade.php",
    "content": "\n    <div class=\"flex gap-2 items-center\">\n        <div class=\"flex-0\">\n            <img class=\"w-16 h-16\" src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/elemental-128.png\" alt=\"Elemental\">\n        </div>\n        <div class=\"grow\">\n            <h3 class=\"text-xl\">Elemental</h3>\n            <h5>{{ auth()->user()->currencySymbol() }}25 / {{ __('front.pricing.tier.month') }}</h5>\n        </div>\n    </div>\n    <div class=\"grid grid-cols-2 gap-3 w-fit\">\n\n        <div class=\"\">{{ __('front.features.patreon.upload_limit') }}</div>\n        <div class=\"\">25 MiB</div>\n        <div class=\"\">{{ __('front.features.patreon.upload_limit_map') }}</div>\n        <div class=\"\">50 MiB</div>\n        <div class=\"\">{!! __('front.features.patreon.discord', ['discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>']) !!}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.default_image') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{!! __('front.features.patreon.hall_of_fame', ['link' => '<a href=\"https://kanka.io/hall-of-fame\" class=\"text-link\">' . __('front/hall-of-fame.title') . '</a>']) !!}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.api_calls') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.pagination') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.monthly_vote') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.boosts') }}</div>\n        <div class=\"\">10</div>\n\n\n        <div class=\"\">{{ __('front.features.patreon.curation') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.impact') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n    </div>\n\n"
  },
  {
    "path": "resources/views/settings/tiers/_goblin.blade.php",
    "content": "    <div class=\"flex gap-2 items-center\">\n        <div class=\"flex-0\">\n            <img class=\"w-16 h-16\" src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/goblin-128.png\" alt=\"Goblin\">\n        </div>\n        <div class=\"grow\">\n            <h3 class=\"text-xl\">Goblin</h3>\n            <h5>{{ auth()->user()->currencySymbol() }}3 / {{ __('front.pricing.tier.month') }}</h5>\n        </div>\n    </div>\n    <div class=\"grid grid-cols-2 gap-3 w-fit\">\n\n        <div class=\"\">{{ __('front.features.patreon.upload_limit') }}</div>\n        <div class=\"\">8 MiB</div>\n\n        <div class=\"\">{{ __('front.features.patreon.upload_limit_map') }}</div>\n        <div class=\"\">10 MiB</div>\n\n        <div class=\"\">{!! __('front.features.patreon.discord', ['discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>']) !!}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n\n        <div class=\"\">{{ __('front.features.patreon.default_image') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n\n        <div class=\"\">{!! __('front.features.patreon.hall_of_fame', ['link' => '<a href=\"https://kanka.io/hall-of-fame\" class=\"text-link\">' . __('front/hall-of-fame.title') . '</a>']) !!}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n\n        <div class=\"\">{{ __('front.features.patreon.api_calls') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n\n        <div class=\"\">{{ __('front.features.patreon.pagination') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n\n        <div class=\"\">{{ __('front.features.patreon.monthly_vote') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n\n        <div class=\"\">{{ __('front.features.patreon.boosts') }}</div>\n        <div class=\"\">1</div>\n    </div>\n\n"
  },
  {
    "path": "resources/views/settings/tiers/_kobold.blade.php",
    "content": "\n    <div class=\"flex gap-2 items-center\">\n        <div class=\"flex-0\">\n            <img class=\"w-16 h-16\" src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/kobold-128.png\" alt=\"Kobold\">\n        </div>\n        <div class=\"grow\">\n            <h3 class=\"text-xl\">Kobold</h3>\n            <h5>{{ auth()->user()->currencySymbol() }}1 / {{ __('front.pricing.tier.month') }}</h5>\n        </div>\n    </div>\n    <div class=\"grid grid-cols-2 gap-3 w-fit\">\n\n        <div class=\"\">{{ __('front.features.patreon.upload_limit') }}</div>\n        <div class=\"\">8 MiB</div>\n\n        <div class=\"\">{{ __('front.features.patreon.upload_limit_map') }}</div>\n        <div class=\"\">10 MiB</div>\n\n        <div class=\"\">{!! __('front.features.patreon.discord', ['discord' => '<a href=\"https://kanka.io/go/discord\" class=\"text-link\">Discord</a>']) !!}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n    </div>\n\n"
  },
  {
    "path": "resources/views/settings/tiers/_owlbear.blade.php",
    "content": "    <div class=\"flex gap-2 items-center\">\n        <div class=\"flex-0\">\n            <img class=\"w-16 h-16\" src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/owlbear-128.png\" alt=\"Owlbear\">\n        </div>\n        <div class=\"grow\">\n            <h3 class=\"text-xl\">Owlbear</h3>\n            <h5>{{ auth()->user()->currencySymbol() }}5 / {{ __('front.pricing.tier.month') }}</h5>\n        </div>\n    </div>\n    <div class=\"grid grid-cols-2 gap-3 w-fit\">\n\n        <div class=\"\">{{ __('front.features.patreon.upload_limit') }}</div>\n        <div class=\"\">8 MiB</div>\n        <div class=\"\">{{ __('front.features.patreon.upload_limit_map') }}</div>\n        <div class=\"\">10 MiB</div>\n        <div class=\"\">{!! __('front.features.patreon.discord', ['discord' => '<a href=\"https://kanka.io/go/discord\">Discord</a>']) !!}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.default_image') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{!! __('front.features.patreon.hall_of_fame', ['link' => '<a href=\"https://kanka.io/hall-of-fame\">' . __('front/hall-of-fame.title') . '</a>']) !!}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.api_calls') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.pagination') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.monthly_vote') }}</div>\n        <div class=\"\"><x-icon class=\"fa-solid fa-check-circle\" /></div>\n        <div class=\"\">{{ __('front.features.patreon.boosts') }}</div>\n        <div class=\"\">3</div>\n    </div>\n\n"
  },
  {
    "path": "resources/views/setup.blade.php",
    "content": "<?php phpinfo() ?>\n"
  },
  {
    "path": "resources/views/spotlights/field.blade.php",
    "content": "<div id=\"{{ $field }}\" class=\"flex flex-col gap-4\">\n    <label for=\"{{ $field }}\" class=\"text-md @if ($errors->has($field)) text-red-400 @endif\">\n        {{ __('spotlights.questions.' . $field) }}\n    </label>\n    @if ($content?->isApproved() || $content?->isApplied())\n        <span class=\"text-light\">{!! \\Illuminate\\Support\\Arr::get($content->content_json, $field) !!}</span>\n    @else\n        <textarea\n            name=\"{{ $field }}\"\n            id=\"{{ $field }}\"\n            rows=\"5\"\n            class=\"rounded border border-dark w-full p-2 bg-white\"\n            placeholder=\"{{ __('spotlights.placeholders.' . $field) }}\"\n        >{!! old($field, \\Illuminate\\Support\\Arr::get($content?->content_json, $field)) !!}</textarea>\n        @error($field)\n            <span class=\"text-red-400 text-xs\">{{ $message }}\n        @enderror\n    @endif\n\n    @if ($field === 'kanka')\n        <div class=\"flex\">\n            <label>\n                <input type=\"checkbox\" @if (old('share', \\Illuminate\\Support\\Arr::get($content?->content_json, 'share'))) checked=\"checked\" @endif name=\"share\">\n                {{ __('spotlights.questions.share') }}\n            </label>\n        </div>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/spotlights/form.blade.php",
    "content": "<?php /** @var ?\\App\\Models\\SpotlightContent $content */?>\n@extends('layouts.front', [\n    'title' => __('spotlights.form.title') . ' - ' . $campaign->name,\n    'skipPerf' => true,\n])\n\n@section('content')\n\n    <section class=\"bg-purple text-white gap-16\">\n        <div class=\"px-6 py-20 lg:max-w-7xl mx-auto flex flex-col gap-8\">\n            <div class=\"flex gap-10\">\n                <div class=\"grow flex flex-col gap-3 max-w-2xl\">\n                    <h1 class=\"\">{{ __('spotlights.form.title') }}</h1>\n\n                    <p class=\"text-light\">\n                        {!! __('spotlights.form.preset', ['campaign' => '<strong>' . $campaign->name . '</strong>']) !!}\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <section class=\"p-5 max-w-7xl mx-auto text-dark flex flex-col gap-10\">\n        @if (!$campaign->isPublic())\n            <div class=\"p-5 rounded bg-orange-300 text-black\">\n                <p>{{ __('spotlights.form.not-public') }}</p>\n            </div>\n        @else\n            @if ($content?->isApplied())\n            <div class=\"bg-light rounded-2xl p-6 flex flex-col gap-4\">\n                <h2 class=\"text-lg font-bold\">{{ __('spotlights.applied.title') }}</h2>\n                <p class=\"text-dark\">{{ __('spotlights.applied.description') }}</p>\n                <form method=\"POST\" action=\"{{ route('spotlights.retract', ['campaign' => $campaign]) }}\">\n                    @csrf\n                    <button type=\"submit\" class=\"rounded p-2 bg-red-400 text-white cursor-pointer\">{{ __('spotlights.applied.actions.retract') }}</button>\n                </form>\n            </div>\n            @elseif ($content?->isApproved())\n                <div class=\"bg-light rounded-2xl p-6 flex flex-col gap-4\">\n                    <h2 class=\"text-lg font-bold\">{{ __('spotlights.approved.title') }}</h2>\n                    <p class=\"text-dark\">{!! __('spotlights.approved.description', ['spotlight' => '<a href=\"' . \\App\\Facades\\Domain::toFront('spotlight') . '\" class=\"underline\">Spotlight</a>']) !!}</p>\n                </div>\n            @elseif ($content?->isRejected())\n                <div class=\"bg-light rounded-2xl p-6 flex flex-col gap-4\">\n                    <h2 class=\"text-lg font-bold\">{{ __('spotlights.rejected.title') }}</h2>\n                    <p class=\"text-dark\">{{ __('spotlights.rejected.description') }}</p>\n                </div>\n            @endif\n            <form class=\"flex flex-col gap-10\" method=\"POST\" action=\"{{ route('spotlights.save', ['campaign' => $campaign]) }}\">\n                @csrf\n\n                @if ($errors->any() || session('error'))\n                    <div class=\"rounded-2xl p-4 bg-red-400 text-white flex flex-col gap-1\">\n                        <strong>{{ __('partials.errors.title') }}</strong>\n                        <span>{{ __('partials.errors.description') }}</span>\n\n                        @if (session('error')) {!! session('error') !!} @endif\n                    </div>\n                @endif\n\n                @include('spotlights.field', ['field' => 'time'])\n                @include('spotlights.field', ['field' => 'world'])\n                @include('spotlights.field', ['field' => 'proud'])\n                @include('spotlights.field', ['field' => 'inspiration'])\n                @include('spotlights.field', ['field' => 'stories'])\n                @include('spotlights.field', ['field' => 'kanka'])\n\n                @if (empty($content) || $content->isDraft())\n                <div class=\"flex items-center justify-between\">\n                    <p class=\"text-purple\">\n                        {{ __('spotlights.form.draft') }}\n                    </p>\n                    <div class=\"flex items-center gap-2\">\n\n                        <button type=\"submit\" class=\"btn2 btn-primary\">{{ __('spotlights.form.actions.save') }}</button>\n                        @if ($content)\n                            <button type=\"submit\" class=\"btn2 btn-primary\" name=\"action\" value=\"apply\">\n                                {{ __('spotlights.form.actions.apply') }}\n                            </button>\n                        @endif\n                    </div>\n                </div>\n                @endif\n            </form>\n        @endif\n    </section>\n@endsection\n"
  },
  {
    "path": "resources/views/spotlights/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Campaign? $campaign */?>\n@extends('layouts.front', [\n    'title' => __('spotlights.title'),\n    'skipPerf' => true,\n])\n\n@section('content')\n\n    <section class=\"bg-purple text-white gap-16\">\n        <div class=\"px-6 py-20 lg:max-w-7xl mx-auto flex flex-col gap-8\">\n            <div class=\"flex gap-10\">\n                <div class=\"grow flex flex-col gap-3 max-w-2xl\">\n                    <h1 class=\"\">{{ __('spotlights.title') }}</h1>\n\n                    <p class=\"text-light\">\n                        {!! __('spotlights.rules', [\n    'showcase' => '<a href=\"' . Domain::toFront('showcase') . '\" class=\"font-semibold text-light\">' . __('footer.showcase') . '</a>'\n]) !!}\n                    </p>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <section class=\"p-5 max-w-7xl mx-auto text-dark\">\n        <div class=\"flex flex-col gap-10\">\n            @if (!empty($campaign))\n                @if ($campaign->isPublic())\n                    <div class=\"flex gap-5\">\n                        <a href=\"{{ route('spotlights.form', $campaign) }}\" class=\"btn-round\">\n                            {!! __('spotlights.overview.cta', ['name' => $campaign->name]) !!}\n                        </a>\n                        <a href=\"{{ \\App\\Facades\\Domain::toFront('showcase') }}\" class=\"btn-round\">\n                            {!! __('spotlights.overview.showcase') !!}\n                        </a>\n                    </div>\n                @else\n                    <p>\n                        {!! __('spotlights.overview.campaign-not-public', ['name' => $campaign->name]) !!}\n                    </p>\n                @endif\n            @else\n                <p class=\"text-purple text-md\">{{ __('spotlights.started') }}</p>\n\n                <div class=\"flex flex-wrap gap-8\">\n                    <?php /** @var \\App\\Models\\Campaign $world */?>\n                    @foreach ($campaigns as $world)\n                        <a\n                            href=\"{{ route('spotlights.form', $world) }}\"\n                            class=\"flex flex-col gap-5 text-left w-72\"\n                            title=\"{!! $world->name !!}\"\n                        >\n                            <img src=\"{{ $world->image ? $world->thumbnail(320, 240) : 'https://th.kanka.io/zzKcBpijSBvm4rPWdzRpI82pTNQ=/320x240/smart/src/app/backgrounds/mountain-background-medium.jpg' }}\" alt=\"{{ $world->name }}\" class=\"w-80 h-60\">\n\n                            <div class=\"flex flex-col gap-2\">\n                                <div class=\"flex gap-2\">\n                                    <h3 class=\"text-md truncate\">{!! $world->name !!}</h3>\n                                </div>\n                            </div>\n                        </a>\n                    @endforeach\n                </div>\n                @endif\n        </div>\n    </section>\n\n    <section class=\"p-5 max-w-7xl mx-auto text-dark\" id=\"faq\">\n        <div class=\"flex flex-col gap-10\">\n            <div class=\"flex flex-col gap-2\">\n                <span class=\"block text-md font-bold\">\n                    {{ __('spotlights.faq.what.q') }}\n                </span>\n                <p>\n                    {{ __('spotlights.faq.what.a') }}\n                </p>\n            </div>\n            <div class=\"flex flex-col gap-2\">\n                <span class=\"block text-md font-bold\">\n                    {{ __('spotlights.faq.who.q') }}\n                </span>\n                <p>\n                    {{ __('spotlights.faq.who.a.lead') }}\n                </p>\n                <p>\n                    {{ __('spotlights.faq.who.a.requirements') }}\n                </p>\n                <ul class=\"mx-5 list-disc\">\n                    <li> {{ __('spotlights.faq.who.a.req1') }}</li>\n                    <li> {{ __('spotlights.faq.who.a.req2') }}</li>\n                    <li> {{ __('spotlights.faq.who.a.req3') }}</li>\n                </ul>\n            </div>\n            <div class=\"flex flex-col gap-2\">\n                <span class=\"block text-md font-bold\">\n                    {{ __('spotlights.faq.how.q') }}\n                </span>\n                <p>\n                    {{ __('spotlights.faq.how.a.lead') }}\n                </p>\n                <p>\n                    {{ __('spotlights.faq.how.a.requirements') }}\n                </p>\n                <ul class=\"mx-5 list-disc\">\n                    <li> {{ __('spotlights.faq.how.a.req1') }}</li>\n                    <li> {{ __('spotlights.faq.how.a.req2') }}</li>\n                    <li> {{ __('spotlights.faq.how.a.req3') }}</li>\n                </ul>\n            </div>\n            <div class=\"flex flex-col gap-2\">\n                <span class=\"block text-md font-bold\">\n                    {{ __('spotlights.faq.selected.q') }}\n                </span>\n                <p>\n                    {{ __('spotlights.faq.selected.a.lead') }}\n                </p>\n                <ul class=\"mx-5 list-disc\">\n                    <li>{{ __('spotlights.faq.selected.a.req1') }}</li>\n                    <li>{!! __('spotlights.faq.selected.a.req2', [\n    'blog' => '<a class=\"text-blue font-medium\" href=\"https://blog.kanka.io\">Blog</a>',\n    'showcase' => '<a class=\"text-blue font-medium\" href=\"' . \\App\\Facades\\Domain::toFront('showcase') . '\">' . __('footer.showcase') . '</a>'\n]) !!}</li>\n                    <li>{{ __('spotlights.faq.selected.a.req3') }}</li>\n                </ul>\n                <p>\n                    {{ __('spotlights.faq.selected.a.end') }}\n                </p>\n            </div>\n\n            <div class=\"flex flex-col gap-2\">\n                <span class=\"block text-md font-bold\">\n                    {{ __('spotlights.faq.reapply.q') }}\n                </span>\n                <p>\n                    {{ __('spotlights.faq.reapply.a') }}\n                </p>\n            </div>\n\n            <p class=\"text-purple text-sm\">\n            {{ __('spotlights.faq.finisher') }}\n            </p>\n        </div>\n    </section>\n\n@endsection\n"
  },
  {
    "path": "resources/views/tags/_badge.blade.php",
    "content": "<?php /** @var \\App\\tags\\Tag $tag */ ?>\n<span class=\"rounded-xl px-3 py-1 bg-base-200 text-base-content text-xs flex items-center gap-1 {{ ($tag->hasColour() ? $tag->colourClass() . ' border-0' : '') }}\" @if($tag->hasColour()) style=\"{{ $tag->colourStyle() }}\" @endif>\n    @if ($tag->hasIcon())\n        <i class=\"{{ $tag->icon }}\" aria-hidden=\"true\"></i>\n    @else\n        {!! $tag->name !!}\n    @endif\n</span>\n"
  },
  {
    "path": "resources/views/tags/children.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('tags.children.title', ['name' => $entity->name]),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'entities',\n        'view' => 'tags.panels.children',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/tags/entities/_form.blade.php",
    "content": "<?php /** @var \\App\\Models\\Tag $model */?>\n<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('tags.children.create.helper', ['name' => $model->name]) !!}</p>\n    </x-helper>\n    <x-forms.foreign\n        field=\"entities\"\n        required\n        label=\"entities.entries\"\n        :multiple=\"true\"\n        name=\"entities[]\"\n        id=\"entities[]\"\n        :campaign=\"$campaign\"\n        :route=\"route('search.tag-children', [$campaign, 'exclude-entity' => $model->id])\"\n    >\n    </x-forms.foreign>\n</x-grid>\n\n\n"
  },
  {
    "path": "resources/views/tags/entities/create.blade.php",
    "content": "<?php /** @var \\App\\Models\\Tag $model */ ?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('tags.children.create.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($model->entity)->list(),\n        Breadcrumb::show(),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"$formOptions\">\n        @include('partials.forms._dialog', [\n            'title' => __('tags.children.create.title', ['name' => $model->name]),\n            'content' => 'tags.entities._form',\n            'submit' =>  __('tags.children.actions.add'),\n        ])\n        <input type=\"hidden\" name=\"tag_id\" value=\"{{ $model->entity->id }}\" />\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/tags/form/_entry.blade.php",
    "content": "<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Tag::class, 'trans' => 'tags'])\n\n    @include('cruds.fields.parent')\n    @include('cruds.fields.colour_picker')\n\n    @php $iconHelper = __('tags.helpers.icon', [\n        'fontawesome' => '<a href=\"' . config('fontawesome.search') . '\" target=\"_blank\">Font Awesome</a>',\n        'rpgawesome' => '<a href=\"https://nagoshiashumari.github.io/Rpg-Awesome/\" target=\"_blank\">RPG Awesome</a>',\n    ]) @endphp\n    <x-forms.field field=\"icon\" :label=\"__('tags.fields.icon')\" :helper=\"$iconHelper\">\n        <input type=\"text\" name=\"icon\" value=\"{{ old('icon', $source->child->icon ?? $model->icon ?? null) }}\" placeholder=\"{{ __('tags.placeholders.icon', ['example1' => '\"fa-solid fa-gem\"', 'example2' => '\"ra ra-aura\"']) }}\" autocomplete=\"off\" data-paste=\"fontawesome\" @if (!$campaign->boosted()) disabled=\"disabled\" @endif />\n        @if (!$campaign->boosted())\n            @can('boost', auth()->user())\n                <x-helper>\n                    <p><x-icon class=\"premium\" /> {!! __('crud.errors.boosted_campaigns', ['boosted' => '<a href=\"' . route('settings.premium', ['campaign' => $campaign]) . '\">' . __('concept.premium-campaign') . '</a>']) !!}</p>\n                </x-helper>\n            @else\n                <x-helper>\n                    <p><x-icon class=\"premium\" /> {!! __('crud.errors.boosted_campaigns', ['boosted' => '<a href=\"https://kanka.io/premium\">' . __('concepts.premium-campaign') . '</a>']) !!}</p>\n                </x-helper>\n            @endif\n        @endif\n    </x-forms.field>\n\n    @include('cruds.fields.entry2')\n\n    <x-forms.field field=\"auto-apply\" :label=\"__('tags.fields.is_auto_applied')\">\n        <input type=\"hidden\" name=\"is_auto_applied\" value=\"0\" />\n        <x-checkbox :text=\"__('tags.hints.is_auto_applied')\">\n            <input type=\"checkbox\" name=\"is_auto_applied\" value=\"1\" @if (old('is_auto_applied', $source->child->is_auto_applied ?? $model->is_auto_applied ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n    <x-forms.field field=\"hidden\" :label=\"__('tags.fields.is_hidden')\">\n        <input type=\"hidden\" name=\"is_hidden\" value=\"0\" />\n        <x-checkbox :text=\"__('tags.hints.is_hidden')\">\n            <input type=\"checkbox\" name=\"is_hidden\" value=\"1\" @if (old('is_hidden', $source->child->is_hidden ?? $model->is_hidden ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n\n</x-grid>\n"
  },
  {
    "path": "resources/views/tags/panels/children.blade.php",
    "content": "<?php\n$allMembers = false;\n$addEntityUrl = route('tags.entity-add', [$campaign, $entity->child]);\n$datagridOptions = [];\n\nif (!empty($onload)) {\n    $routeOptions = [\n        $campaign,\n        $entity->child,\n        'init' => 1,\n    ];\n    if (request()->get('m') == \\App\\Enums\\Descendants::All->value || (!request()->has('m') && $campaign->defaultDescendantsMode() === \\App\\Enums\\Descendants::All)) {\n        $routeOptions['m'] = \\App\\Enums\\Descendants::All;\n        $allMembers = true;\n    }\n    $routeOptions = Datagrid::initOptions($routeOptions);\n    $datagridOptions =\n        ['datagridUrl' => route('tags.children', $routeOptions)]\n    ;\n}\n\n$all = $entity->child->allChildren()->count();\n$direct = $entity->child->entities()->count();\n?>\n<div class=\"flex gap-2 justify-between items-center\">\n    <h3 class=\"text-xl\">\n        {{ __('tags.show.tabs.children') }}\n    </h3>\n    <div class=\"gap-2 flex-wrap overflow-auto flex\">\n        <div class=\"dropdown flex items-center\">\n            <div role=\"button\" tabindex=\"0\" data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" class=\"btn2 btn-sm\">\n                <x-icon class=\"filter\" />\n                @if ($allMembers)\n                    <span class=\"hidden xl:inline\">{{ __('crud.filters.lists.desktop.all', ['count' => $all]) }}</span>\n                    <span class=\"xl:hidden\">{{ $all }}</span>\n                @else\n                    <span class=\"hidden xl:inline\">{{ __('crud.filters.lists.desktop.filtered', ['count' => $direct]) }}</span>\n                    <span class=\"xl:hidden\">{{ $direct }}</span>\n                @endif\n                <x-icon class=\"fa-solid fa-caret-down\" />\n            </div>\n            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                <x-dropdowns.item\n                    :link=\"route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::Direct, '#tag-children'])\"\n                    icon=\"fa-regular fa-filter\"\n                    :active=\"!$allMembers\"\n                >\n                    {{ __('crud.filters.lists.desktop.filtered', ['count' => $direct]) }}\n                </x-dropdowns.item>\n                <x-dropdowns.item\n                    :link=\"route('entities.show', [$campaign, $entity, 'm' => \\App\\Enums\\Descendants::All, '#tag-children'])\"\n                    icon=\"fa-regular fa-filter-list\"\n                    :active=\"$allMembers\"\n                >\n                    {{ __('crud.filters.lists.desktop.all', ['count' => $all]) }}\n                </x-dropdowns.item>\n            </div>\n        </div>\n\n        {{-- Actions dropdown --}}\n        @if ($all > 0)\n            @can('update', $entity)\n                <div class=\"dropdown flex items-center\">\n                    <div role=\"button\" tabindex=\"0\" data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" class=\"btn2 btn-sm\">\n                        <x-icon class=\"fa-regular fa-ellipsis-h\" />\n                    </div>\n                    <div class=\"dropdown-menu hidden\" role=\"menu\">\n                        <x-dropdowns.item\n                            :link=\"$addEntityUrl\"\n                            :dialog=\"$addEntityUrl\"\n                            icon=\"plus\"\n                        >\n                            {{ __('tags.children.actions.add') }}\n                        </x-dropdowns.item>\n                        <x-dropdowns.item\n                            :link=\"route('tags.transfer', [$campaign, $entity->child])\"\n                            :dialog=\"route('tags.transfer', [$campaign, $entity->child])\"\n                            icon=\"fa-regular fa-arrow-right\"\n                        >\n                            {{ __('tags.transfer.transfer') }}\n                        </x-dropdowns.item>\n                    </div>\n                </div>\n            @endcan\n        @endif\n    </div>\n</div>\n@if ($all === 0)\n<div class=\"\" id=\"tag-children\">\n    <x-box>\n        <x-helper>\n            <p>{{ __('tags.helpers.no_children') }}</p>\n        </x-helper>\n        @can('update', $entity)\n            <a href=\"{{ $addEntityUrl }}\" class=\"btn2 btn-primary btn-sm\"\n                data-toggle=\"dialog\" data-url=\"{{ $addEntityUrl }}\">\n                <x-icon class=\"plus\" />\n                <span class=\"hidden xl:inline\">{{ __('tags.children.actions.add') }}</span>\n            </a>\n        @endcan\n    </x-box>\n</div>\n@else\n<div class=\"overflow-x-auto\" id=\"tag-children\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', $datagridOptions)\n    </div>\n</div>\n@endif\n"
  },
  {
    "path": "resources/views/tags/panels/posts.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Entity $entity\n * @var \\App\\Models\\Tag $model\n */\n$model = $entity->child;\n$datagridOptions = [];\n\nif (!empty($onload)) {\n    $routeOptions = [\n        $campaign,\n        $model,\n        'init' => 1,\n    ];\n    $routeOptions = Datagrid::initOptions($routeOptions);\n    $datagridOptions =\n        ['datagridUrl' => route('tags.posts', $routeOptions)]\n    ;\n}\n\n$all = $model->posts()->count();\n?>\n<div class=\"flex gap-2 items-center justify-between\">\n    <h3 class=\"text-xl\">\n        {{ __('entities.articles') }}\n    </h3>\n    @if ($all > 0)\n        @can('update', $entity)\n            <div class=\"dropdown flex items-center\">\n                <div role=\"button\" tabindex=\"0\" data-dropdown aria-expanded=\"false\" aria-haspopup=\"menu\" class=\"btn2 btn-sm\">\n                    <x-icon class=\"fa-regular fa-ellipsis-h\" />\n                </div>\n                <div class=\"dropdown-menu hidden\" role=\"menu\">\n\n                    <x-dropdowns.item\n                        :link=\"route('tags.transfer.posts', [$campaign, $model])\"\n                        icon=\"fa-regular fa-arrow-right\"\n                    >\n                        {{ __('tags.transfer.transfer') }}\n                    </x-dropdowns.item>\n                </div>\n            </div>\n        @endcan\n    @endif\n</div>\n@if ($all === 0)\n<div class=\"\" id=\"tag-children\">\n    <x-box>\n        <x-helper>\n            <p>{{ __('tags.helpers.no_posts') }}</p>\n        </x-helper>\n    </x-box>\n</div>\n@else\n<div class=\"\" id=\"tag-children\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table', $datagridOptions)\n    </div>\n</div>\n@endif\n"
  },
  {
    "path": "resources/views/tags/panels/tags.blade.php",
    "content": "<?php\n/** @var \\App\\Models\\Tag $model*/\n$filters = [];\nif (request()->has('tag_id')) {\n    $filters['tag_id'] = request()->get('tag_id');\n}\n?>\n<div class=\"overflow-x-auto\" id=\"tag-tags\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n\n@section('modals')\n    @parent\n    @include('partials.helper-modal', [\n        'id' => 'help-modal',\n        'title' => __('crud.actions.help'),\n        'textes' => [\n            __('tags.hints.tag')\n        ]\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/tags/show.blade.php",
    "content": "<?php /** @var \\App\\Models\\Tag $model */?>\n<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header')\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            @include('entities.components.posts', ['withEntry' => true])\n            @include('tags.panels.children', ['onload' => true])\n            @include('tags.panels.posts', ['onload' => true])\n\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/tags/tags.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n@section('entity-header-actions')\n    <div class=\"header-buttons inline-block ml-auto\">\n        <a href=\"#\" class=\"btn2 btn-sm\" data-toggle=\"dialog\" data-target=\"help-modal\">\n            <x-icon class=\"question\" /> {{ __('crud.actions.help') }}\n        </a>\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('tags.tags', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$entity->descendants()->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('tags.tags', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'tags',\n        'view' => 'tags.panels.tags',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/tags/transfer/entities/form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('tags.transfer.entities.helper', ['name' => $tag->name]) !!}</p>\n    </x-helper>\n\n    @include('cruds.fields.tag', ['model' => $tag->entity, 'allowNew' => false])\n</x-grid>\n"
  },
  {
    "path": "resources/views/tags/transfer/entities/transfer.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('tags.transfer.entities.title'),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($tag->entity)->list(),\n        Breadcrumb::show(),\n        __('tags.transfer.transfer'),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['tags.transfer-process', $campaign, $tag->id]\">\n        @include('partials.forms._dialog', [\n            'title' => __('tags.transfer.entities.title'),\n            'content' => 'tags.transfer.entities.form',\n            'submit' =>  __('tags.transfer.transfer'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/tags/transfer/posts/form.blade.php",
    "content": "<x-grid type=\"1/1\">\n    <x-helper>\n        <p>{!! __('tags.transfer.posts.helper', ['name' => $tag->name]) !!}</p>\n    </x-helper>\n\n    @include('cruds.fields.tag', ['model' => $tag->entity, 'allowNew' => false])\n</x-grid>\n"
  },
  {
    "path": "resources/views/tags/transfer/posts/transfer.blade.php",
    "content": "@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('tags.transfer.posts.title'),\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($tag->entity)->list(),\n        Breadcrumb::show(),\n        __('tags.transfer.transfer'),\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    <x-form :action=\"['tags.transfer.posts-process', $campaign, $tag->id]\">\n        @include('partials.forms._dialog', [\n            'title' => __('tags.transfer.posts.title'),\n            'content' => 'tags.transfer.posts.form',\n            'submit' =>  __('tags.transfer.transfer'),\n        ])\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/timelines/_element.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Timeline $timeline\n * @var \\App\\Models\\TimelineEra $era\n * @var \\App\\Models\\TimelineElement $element\n */\n?>\n<li id=\"timeline-element-{{ $element->id }}\" class=\"relative mr-2\">\n    @include('timelines.elements._icon')\n\n    <div class=\"timeline-item p-0 pb-2 relative rounded-sm ml-16 mr-4\" data-word-count=\"{{ $element->words }}\">\n        <x-box class=\"flex gap-2 flex-col p-2\" :padding=\"0\">\n            <div class=\"timeline-item-head flex gap-2 items-center\">\n                <h3 class=\"grow flex gap-2 items-center cursor-pointer element-toggle m-0 overflow-hidden {{ $element->collapsed() ? 'animate-collapsed' : null }} text-base\" data-animate=\"collapse\" data-target=\"#timeline-element-body-{{ $element->id }}\">\n                    <x-icon class=\"fa-solid fa-chevron-up icon-show\" />\n                    <x-icon class=\"fa-solid fa-chevron-down icon-hide\" />\n\n                    <span class=\"truncate\">\n                    @if ($element->entity)\n                        <x-entity-link :entity=\"$element->entity\" :campaign=\"$campaign\">\n                            {!! $element->name !!}\n                        </x-entity-link>\n\n                        @if($element->entity && $element->entity->is_private)\n                            <x-icon class=\"fa-solid fa-lock\" title=\"{{ __('timelines/elements.helpers.entity_is_private') }}\" tooltip />\n                        @endif\n                    @else\n                        <span>{!! $element->name !!}</span>\n                    @endif\n                    </span>\n                </h3>\n\n                @if (isset($element->date) || $element->use_event_date && isset($element->entity->event->date))\n                    <span class=\"text-neutral-content text-sm truncate\">{{isset($element->entity->event->date) && $element->use_event_date ? $element->entity->event->date : $element->date}}</span>\n                @endif\n                <div class=\"flex-none flex items-center gap-2\">\n                    @includeWhen(auth()->check(), 'icons.visibility', ['icon' => $element->visibilityIcon('')])\n\n                    @can('update', $timeline->entity)\n                        <div class=\"dropdown inline\">\n                            <a class=\"btn2 btn-xs btn-ghost\" data-dropdown aria-expanded=\"false\" data-placement=\"right\">\n                                <x-icon class=\"fa-regular fa-ellipsis-v\" />\n                                <span class=\"sr-only\">{{__('crud.actions.actions') }}</span>\n                            </a>\n                            <div class=\"dropdown-menu hidden\" role=\"menu\">\n                                <x-dropdowns.item\n                                    :link=\"route('timelines.timeline_elements.edit', [$campaign, $timeline, $element, 'from' => 'view'])\"\n                                    icon=\"edit\">{{ __('crud.edit') }}\n                                </x-dropdowns.item>\n                                <x-dropdowns.item\n                                    link=\"#\"\n                                    css=\"text-error-content hover:bg-error\"\n                                    :dialog=\"route('confirm-delete', [$campaign, 'route' => route('timelines.timeline_elements.destroy', [$campaign, $timeline, $element, 'from' => 'view']), 'name' => $element->elementName(), 'permanent' => true])\"\n                                    icon=\"trash\">{{ __('crud.remove') }}\n                                </x-dropdowns.item>\n                                <x-dropdowns.divider />\n\n                                @php\n                                    $title = '[timeline:' . $timeline->entity->id . '|anchor:timeline-element-' . $element->id . ']';\n                                    $data = [\n                                        'title' => $title,\n                                        'toggle' => 'tooltip',\n                                        'clipboard' => $title,\n                                        'toast' => __('timelines/elements.copy_mention.success')\n                                ]; @endphp\n                                <x-dropdowns.item link=\"#\" :data=\"$data\" icon=\"fa-solid fa-link\">\n                                    {{ __('entities/notes.copy_mention.copy') }}\n                                </x-dropdowns.item>\n                                @php $mentionName = $element->mentionName() @endphp\n\n                                @php\n                                    $title = '[timeline:' . $timeline->entity->id . '|anchor:timeline-element-' . $element->id . '|' . $mentionName . ']';\n                                    $data = [\n                                        'title' => $title,\n                                        'toggle' => 'tooltip',\n                                        'clipboard' => $title,\n                                        'toast' => __('timelines/elements.copy_mention.success')\n                                ]; @endphp\n                                <x-dropdowns.item link=\"#\" :data=\"$data\" icon=\"fa-solid fa-link\">\n                                    {{ __('timelines/elements.copy_mention.copy_with_name') }}\n                                </x-dropdowns.item>\n                            </div>\n                        </div>\n                    @endcan\n                </div>\n            </div>\n            <div class=\"timeline-item-body entity-content overflow-hidden @if ($element->collapsed()) hidden @endif\" id=\"timeline-element-body-{{ $element->id }}\">\n                {!! \\App\\Facades\\Mentions::mapAny($element) !!}\n\n                @if ($element->use_entity_entry && $element->entity && $element->entity->hasEntry())\n                    <div class=\"timeline-entity-content\">\n                        {!! $element->entity->parsedEntry() !!}\n                    </div>\n                @endif\n                <x-word-count :count=\"$element->words\" />\n            </div>\n        </x-box>\n    </div>\n</li>\n"
  },
  {
    "path": "resources/views/timelines/_timeline.blade.php",
    "content": "<?php\n/**\n * @var \\App\\Models\\Timeline $timeline\n * @var \\App\\Models\\TimelineEra $era\n * @var \\App\\Models\\TimelineElement $element\n */\n$eras = $timeline->eras()->with(['orderedElements', 'orderedElements.entity', 'orderedElements.entity.event'])->ordered()->get();\n$loadedElements = [];\n?>\n@forelse ($eras as $era)\n    @php\n    $position = 1;\n    @endphp\n\n    <x-box class=\"flex gap-2 flex-col p-2 timeline-era post entity-note\" :padding=\"0\" id=\"era{{ $era->id }}\" data-word-count=\"{{ $era->words }}\">\n        <div class=\"timeline-era-head flex gap-2 items-center\">\n            <h3 class=\"grow cursor-pointer flex gap-2 items-center element-toggle text-base m-0 {{ $era->collapsed() ? 'animate-collapsed' : null }}\" data-animate=\"collapse\" data-target=\"#era-items-{{ $era->id }}\">\n\n                <x-icon class=\"fa-solid fa-chevron-up icon-show\" />\n                <x-icon class=\"fa-solid fa-chevron-down icon-hide\" />\n\n                {!! $era->name !!} @if(!empty($era->abbreviation)) ({{ $era->abbreviation }}) @endif\n\n                <span class=\"text-xs\">\n                    {!! $era->ages()!!}\n                </span>\n            </h3>\n\n            <div class=\"flex-none flex items-center gap-2\">\n                @can('update', $timeline->entity)\n                    <a href=\"{{ route('timelines.timeline_eras.edit', [$campaign, $timeline, $era, 'from' => 'view']) }}\"\n                       class=\"btn2 btn-ghost btn-xs \" role=\"button\"\n                       title=\"{{ __('crud.edit') }}\"\n                    >\n                        <x-icon class=\"edit\" />\n                        <span class=\"sr-only\">{{ __('crud.edit') }}</span>\n                    </a>\n\n                    <a href=\"#\" class=\"btn2 btn-ghost btn-xs text-error\n                       role=\"button\"\n                       data-toggle=\"dialog\"\n                       data-url=\"{{ route('confirm-delete', [$campaign, 'route' => route('timelines.timeline_eras.destroy', [$campaign, $timeline, $era, 'from' => 'view']), 'name' => $era->name, 'permanent' => true]) }}\"\n                       title=\"{{ __('crud.remove') }}\">\n                        <x-icon class=\"trash\" />\n                        <span class=\"sr-only\">{{ __('crud.remove') }}</span>\n                    </a>\n                @endcan\n            </div>\n        </div>\n        <div class=\"timeline-era-body entity-content\">\n            {!! \\App\\Facades\\Mentions::mapAny($era)  !!}\n            <x-word-count :count=\"$era->words\" />\n        </div>\n    </x-box>\n\n    <ul class=\"timeline relative m-0 p-0 list-none @if ($era->collapsed()) hidden @endif\" id=\"era-items-{{ $era->id }}\">\n    @foreach($era->orderedElements as $element)\n        @php\n            $position = $element->position + 1;\n            $loadedElements[] = $element;\n        @endphp\n        @includeWhen($element->visible(), 'timelines._element')\n    @endforeach\n    </ul>\n\n    @can('update', $timeline->entity)\n        <div class=\"text-center\">\n            <a href=\"{{ route('timelines.timeline_elements.create', [$campaign, $entity->child, 'era_id' => $era, 'position' => $position]) }}\" class=\"btn2 btn-sm\"\n                title=\"{{ __('crud.create') }}\"\n            >\n                <x-icon class=\"plus\" />\n                <span class=\"hidden lg:inline\">{!! __('timelines.actions.add_element', ['era' => $era->name]) !!}</span>\n            </a>\n        </div>\n    @endcan\n    </ul>\n@empty\n    <x-alert type=\"warning\">\n        <x-grid type=\"1/1\">\n            <p>\n                {{ __('timelines.helpers.no_era_v2') }}\n            </p>\n            @can('update', $timeline->entity)\n                <div>\n            <a href=\"{{ route('timelines.timeline_eras.create', [$campaign, 'timeline' => $entity->child, 'from' => 'view']) }}\" class=\"btn2 btn-sm\">\n                <x-icon class=\"plus\" /> {{ __('timelines/eras.actions.add') }}\n            </a></div>\n            @endcan\n        </x-grid>\n    </x-alert>\n@endforelse\n@if (!$timeline->eras->isEmpty())\n    @can('update', $timeline->entity)\n        <div class=\"text-center\">\n            <a href=\"{{ route('timelines.timeline_eras.create', [$campaign, 'timeline' => $entity->child, 'from' => 'view']) }}\" class=\"btn2 btn-sm\">\n                <x-icon class=\"plus\" />\n                {{ __('timelines/eras.actions.add') }}\n            </a>\n        </div>\n    @endcan\n@endif\n\n\n\n"
  },
  {
    "path": "resources/views/timelines/elements/_form.blade.php",
    "content": "<?php\n\n$oldPosition = !empty($model->position) ? $model->position : null;\n$positions = [];\nif (!empty($era)) {\n    $positions = $era->positionOptions(null, true);\n    $oldPosition = count($positions);\n} elseif (!empty($model)) {\n    $positions = $model->era->positionOptions($oldPosition);\n}\n?>\n\n\n<x-grid>\n    <x-forms.field field=\"era\" css=\"md:col-span-2\" required :label=\"__('timelines/elements.fields.era')\">\n        <x-forms.select name=\"era_id\" :options=\"$timeline->eras->pluck('name', 'id')\" :selected=\"$era->id ?? $source->era_id ?? $model->era_id ?? null\" id=\"element-era-id\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"name\" :label=\"__('crud.fields.name')\">\n        <input type=\"text\" name=\"name\" placeholder=\"{{ __('timelines/elements.placeholders.name') }}\" value=\"{!! htmlspecialchars(old('name', $model->name ?? null)) !!}\" maxlength=\"191\" />\n    </x-forms.field>\n\n    @include('cruds.fields.entity')\n\n    <x-forms.field field=\"entry\" css=\"md:col-span-2\" :label=\"__('fields.description.label')\">\n\n        @include('cruds.fields.entry', ['model' => $model])\n        <input type=\"hidden\" name=\"use_entity_entry\" value=\"0\" />\n        <x-checkbox :text=\"__('timelines/elements.fields.use_entity_entry')\">\n            <input type=\"checkbox\" name=\"use_entity_entry\" value=\"1\" @if (old('use_entity_entry', $model->use_entity_entry ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    <x-forms.field field=\"date\" :label=\"__('timelines/elements.fields.date')\">\n        <input type=\"text\" name=\"date\" value=\"{{ old('date', $source->date ?? $model->date ?? null) }}\" placeholder=\"{{ __('timelines/elements.placeholders.date') }}\" maxlength=\"45\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"event-date\" :label=\"__('timelines/elements.fields.use_event_date')\">\n        <input type=\"hidden\" name=\"use_event_date\" value=\"0\" />\n        <x-checkbox :text=\"__('timelines/elements.helpers.date')\">\n            <input type=\"checkbox\" name=\"use_event_date\" value=\"1\" @if (old('use_event_date', $model->use_event_date ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n\n    <x-forms.field field=\"position\" :label=\"__('crud.fields.position')\">\n        <x-forms.select name=\"position\" :options=\"$positions\" :selected=\"(!empty($model->position) ? -9999 : $oldPosition)\" />\n    </x-forms.field>\n\n    @include('cruds.fields.colour', ['default' => 'grey'])\n\n    <x-forms.field field=\"icon\" :label=\"__('timelines/elements.fields.icon')\">\n\n        <input type=\"text\" name=\"icon\" value=\"{{ old('icon', $source->icon ?? $model->icon ?? null) }}\" placeholder=\"fa-solid fa-gem, ra ra-sword\" class=\"w-full\" autocomplete=\"off\" data-paste=\"fontawesome\" list=\"timeline-element-icon-list\" maxlength=\"45\" @if (!$campaign->boosted()) disabled=\"disabled\" @endif />\n        <div class=\"hidden\">\n            <datalist id=\"timeline-element-icon-list\">\n                @foreach (\\App\\Facades\\TimelineElementCache::campaign($campaign)->iconSuggestion() as $icon)\n                    <option value=\"{{ $icon }}\">{{ $icon }}</option>\n                @endforeach\n            </datalist>\n        </div>\n            <x-helper>\n                <p>{!! __('timelines/elements.helpers.icon', [\n        'rpgawesome' => '<a href=\"https://nagoshiashumari.github.io/Rpg-Awesome/\" class=\"text-link\">RPG Awesome</a>',\n        'fontawesome' => '<a href=\"' . config('fontawesome.search') . '\" class=\"text-link\">Font Awesome</a>'\n        ]) !!}</p>\n            </x-helper>\n\n        @if (!$campaign->boosted())\n            @can('boost', auth()->user())\n                <x-helper>\n                    <p>\n                    <x-icon class=\"premium\" />\n                    {!! __('crud.errors.boosted_campaigns', ['boosted' => '<a href=\"' . route('settings.premium', ['campaign' => $campaign]) . '\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>']) !!}\n                    </p>\n                </x-helper>\n            @else\n                <x-helper>\n                    <p>\n                    <x-icon class=\"premium\" />\n                    {!! __('crud.errors.boosted_campaigns', ['boosted' => '<a href=\"https://kanka.io/premium\" class=\"text-link\">' . __('concept.premium-campaign') . '</a>']) !!}\n                    </p>\n                </x-helper>\n            @endif\n        @endif\n    </x-forms.field>\n\n    @include('cruds.fields.visibility_id')\n\n    <x-forms.field field=\"collapsed\" :label=\"__('timelines/eras.fields.is_collapsed')\">\n        <input type=\"hidden\" name=\"is_collapsed\" value=\"0\" />\n        <x-checkbox :text=\"__('timelines/elements.helpers.is_collapsed')\">\n            <input type=\"checkbox\" name=\"is_collapsed\" value=\"1\" @if (old('is_collapsed', $model->is_collapsed ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n</x-grid>\n\n<input type=\"hidden\" name=\"era-data-url\" data-url=\"{{ route('timelines.era-list', [$campaign, 'timeline' => $timeline->id, 'timeline_era' => 0, 'new' => !empty($model)]) }}\">\n<input type=\"hidden\" name=\"oldPosition\" data-url=\"{{ $oldPosition }}\">\n\n\n@include('editors.editor')\n\n@if (request()->ajax())\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n@if(auth()->user()->editor != 'legacy')\n                window.initSummernote();\n@else\n                var editorId = 'element-entry';\n                // First we remove in case it was already loaded\n                tinyMCE.EditorManager.execCommand('mceFocus', false, editorId);\n                tinyMCE.EditorManager.execCommand('mceRemoveEditor', true, editorId);\n                // And add again\n                tinymce.EditorManager.execCommand('mceAddEditor', false, editorId);\n@endif\n        });\n    </script>\n@endif\n"
  },
  {
    "path": "resources/views/timelines/elements/_icon.blade.php",
    "content": "<?php\nif (!isset($absolute)) {\n    $absolute = true;\n}\n$min = $absolute ? 'absolute top-0 text-center w-8 h-8 rounded-full' : 'rounded-full';\n?>\n\n@if (!empty($element->icon))\n    @if (Illuminate\\Support\\Str::startsWith($element->icon, '<i class='))\n        {!! str_replace('<i class=\"', '<i class=\"bg-' . $element->colour . ' ' . $min . ' ', $element->icon) !!}\n    @else\n        <i class=\"bg-{{ $element->colour }} {{ $element->icon }} {{ $min }}\" aria-hidden=\"true\"></i>\n    @endif\n@else\n    <i class=\"fa fa-solid fa-hourglass-half bg-{{ $element->colour }} {{ $min }}\" aria-hidden=\"true\"></i>\n@endif\n"
  },
  {
    "path": "resources/views/timelines/elements/create.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Timeline $timeline\n* @var \\App\\Models\\TimelineElement $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('timelines/elements.create.title', ['name' => $timeline->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($timeline->entity)->list(),\n        Breadcrumb::show(),\n        __('timelines/elements.create.title')\n    ],\n    'centered' => true,\n])\n\n@section('content')\n    @include('partials.errors')\n\n    <x-form :action=\"['timelines.timeline_elements.store', $campaign, $timeline]\" id=\"timeline-element-form\" files>\n    <x-box>\n        @include('timelines.elements._form', ['model' => null])\n        <x-dialog.footer>\n            <div class=\"form-element\">\n                <div class=\"submit-group\">\n                    <button class=\"btn2 btn-primary\">{{ trans('crud.save') }}</button>\n                </div>\n            </div>\n        </x-dialog.footer>\n    </x-box>\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/timelines/elements/edit.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Timeline $timeline\n* @var \\App\\Models\\TimelineElement $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('timelines/elements.edit.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($timeline->entity)->list(),\n        Breadcrumb::show(),\n        __('timelines/elements.edit.title', ['name' => $model->name])\n    ],\n    'centered' => true,\n])\n\n\n@section('content')\n    @include('partials.errors')\n\n    <x-form :action=\"['timelines.timeline_elements.update', $campaign, 'timeline' => $timeline, 'timeline_element' => $model]\" method=\"PATCH\" id=\"timeline-element-form\">\n    <x-box>\n        @include('timelines.elements._form')\n\n        <x-dialog.footer>\n            <div class=\"form-element\">\n                <div class=\"submit-group\">\n                    <button class=\"btn2 btn-primary\">{{ trans('crud.save') }}</button>\n                </div>\n            </div>\n        </x-dialog.footer>\n    </x-box>\n    </x-form>\n\n    @if(!empty($model) && $campaign->hasEditingWarning())\n        <input type=\"hidden\" id=\"editing-keep-alive\" data-url=\"{{ route('timeline-elements.keep-alive', [$campaign, $model->id]) }}\" />\n    @endif\n@endsection\n\n@section('scripts')\n    @parent\n@endsection\n\n@section('modals')\n    @parent\n    @includeWhen(!empty($editingUsers) && !empty($model), 'cruds.forms.edit_warning', ['model' => $model])\n@endsection\n"
  },
  {
    "path": "resources/views/timelines/eras/_form.blade.php",
    "content": "<x-grid>\n    <x-forms.field field=\"name\" required :label=\"__('crud.fields.name')\">\n        <input type=\"text\" name=\"name\"  placeholder=\"{{ __('timelines/eras.placeholders.name') }}\" value=\"{!! htmlspecialchars(old('name', $model->name ?? null)) !!}\" maxlength=\"191\" required />\n    </x-forms.field>\n\n    <x-forms.field field=\"abbrev\" :label=\"__('timelines/eras.fields.abbreviation')\">\n        <input type=\"text\" name=\"abbreviation\" value=\"{{ old('abbreviation', $source->abbreviation ?? $model->abbreviation ?? null) }}\" placeholder=\"{{ __('timelines/eras.placeholders.abbreviation') }}\" class=\"w-full\" maxlength=\"191\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"entry\" css=\"col-span-2\" :label=\"__('fields.description.label')\">\n        @include('cruds.fields.entry', ['model' => $model])\n    </x-forms.field>\n\n    <x-forms.field field=\"start\" :label=\"__('timelines/eras.fields.start_year')\">\n        <input type=\"number\" name=\"start_year\" class=\"w-full\" maxlength=\"8\" aria-label=\"{{ __('timelines/eras.placeholders.start_year') }}\" placeholder=\"{{ __('timelines/eras.placeholders.start_year') }}\" value=\"{{ old('start_year', $source->start_year ?? $model->start_year ?? null) }}\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"end\" :label=\"__('timelines/eras.fields.end_year')\">\n        <input type=\"number\" name=\"end_year\" class=\"w-full\" maxlength=\"8\" aria-label=\"{{ __('timelines/eras.placeholders.end_year') }}\" placeholder=\"{{ __('timelines/eras.placeholders.end_year') }}\" value=\"{{ old('end_year', $source->end_year ?? $model->end_year ?? null) }}\" />\n    </x-forms.field>\n\n    <x-forms.field field=\"collapsed\" css=\"col-span-2\" :label=\"__('timelines/eras.fields.is_collapsed')\">\n        <input type=\"hidden\" name=\"is_collapsed\" value=\"0\" />\n        <x-checkbox :text=\"__('timelines/eras.helpers.is_collapsed')\">\n            <input type=\"checkbox\" name=\"is_collapsed\" value=\"1\" @if (old('is_collapsed', $model->is_collapsed ?? false)) checked=\"checked\" @endif />\n        </x-checkbox>\n    </x-forms.field>\n</x-grid>\n\n@include('editors.editor', (request()->ajax() ? ['dialogsInBody' => true] : []))\n\n@if (request()->ajax())\n    <script type=\"text/javascript\">\n        $(document).ready(function () {\n@if(auth()->user()->editor != 'legacy')\n            window.initSummernote();\n@else\n            var editorId = 'era-entry';\n            // First we remove in case it was already loaded\n            tinyMCE.EditorManager.execCommand('mceFocus', false, editorId);\n            tinyMCE.EditorManager.execCommand('mceRemoveEditor', true, editorId);\n            // And add again\n            tinymce.EditorManager.execCommand('mceAddEditor', false, editorId);\n@endif\n        });\n    </script>\n@endif\n"
  },
  {
    "path": "resources/views/timelines/eras/create.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Timeline $timeline\n* @var \\App\\Models\\TimelineEra $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('timelines/eras.create.title', ['name' => $timeline->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($timeline->entity)->list(),\n        Breadcrumb::show(),\n        __('timelines/eras.create.title')\n    ],\n    'centered' => true,\n])\n@section('content')\n    @include('partials.errors')\n\n    <x-form :action=\"['timelines.timeline_eras.store', $campaign, $timeline]\" id=\"timeline-era-form\">\n        <x-box>\n            @include('timelines.eras._form', ['model' => null])\n\n            <x-dialog.footer>\n                <div class=\"form-era\">\n                    <div class=\"submit-group\">\n                        <button class=\"btn2 btn-primary\">{{ __('crud.save') }}</button>\n                    </div>\n                </div>\n            </x-dialog.footer>\n        </x-box>\n        @if (!empty($from))\n            <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\">\n        @endif\n    </x-form>\n@endsection\n"
  },
  {
    "path": "resources/views/timelines/eras/edit.blade.php",
    "content": "<?php\n/**\n* @var \\App\\Models\\Timeline $timeline\n* @var \\App\\Models\\TimelineEra $model\n*/\n?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('timelines/eras.edit.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => [\n        Breadcrumb::campaign($campaign)->entity($timeline->entity)->list(),\n        Breadcrumb::show(),\n        __('timelines/eras.edit.title', ['name' => $model->name])\n    ],\n    'centered' => true,\n])\n@section('content')\n    @include('partials.errors')\n    <x-form\n        :action=\"['timelines.timeline_eras.update', $campaign, 'timeline' => $timeline, 'timeline_era' => $model]\"\n        method=\"PATCH\"\n        id=\"timeline-era-form\">\n    <x-box>\n            @include('timelines.eras._form')\n        <x-dialog.footer>\n            <div class=\"form-era\">\n                <div class=\"submit-group\">\n                    <button class=\"btn2 btn-primary\">{{ __('crud.save') }}</button>\n                </div>\n            </div>\n        </x-dialog.footer>\n    </x-box>\n        @if (!empty($from))\n            <input type=\"hidden\" name=\"from\" value=\"{{ $from }}\">\n        @endif\n    </x-form>\n@endsection\n\n"
  },
  {
    "path": "resources/views/timelines/eras/index.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => __('timelines/eras.index.title', ['name' => $model->name]),\n    'description' => '',\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @can('update', $entity)\n            <a href=\"{{ route('timelines.timeline_eras.create', [$campaign, 'timeline' => $model]) }}\" class=\"btn2 btn-sm\"\n            >\n                <x-icon class=\"plus\" />\n                <span class=\"hidden lg:inline\">{{ __('timelines/eras.actions.add') }}</span>\n            </a>\n        @endcan\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'eras',\n        'view' => 'timelines.panels.eras',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/timelines/form/_copy.blade.php",
    "content": "<x-forms.field\n    field=\"copy-eras\">\n    <input type=\"hidden\" name=\"copy_eras\" value=\"\" />\n    <x-checkbox :text=\"__('timelines.fields.copy_eras')\">\n        <input type=\"checkbox\" name=\"copy_eras\" value=\"1\" checked=\"checked\" />\n    </x-checkbox>\n</x-forms.field>\n\n<x-forms.field\n    field=\"copy-elements\">\n    <input type=\"hidden\" name=\"copy_elements\" value=\"\" />\n    <x-checkbox :text=\"__('timelines.fields.copy_elements')\">\n        <input type=\"checkbox\" name=\"copy_elements\" value=\"1\" checked=\"checked\" />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/timelines/form/_entry.blade.php",
    "content": "<?php /** @var \\App\\Models\\Timeline $model */ ?>\n<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Timeline::class, 'trans' => 'timelines'])\n\n    @include('cruds.fields.parent')\n\n    @include('cruds.fields.entry2')\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/timelines/panels/eras.blade.php",
    "content": "<div class=\"\" id=\"timeline-eras\">\n    @if(Datagrid::hasBulks())\n        <x-form :action=\"['timelines.eras.bulk', $campaign, 'timeline' => $model]\" direct>\n            <div id=\"datagrid-parent\" class=\"table-responsive\">\n                @include('layouts.datagrid._table')\n            </div>\n        </x-form>\n    @else\n        <div id=\"datagrid-parent\" class=\"table-responsive\">\n            @include('layouts.datagrid._table')\n        </div>\n    @endif\n\n</div>\n\n@section('modals')\n    @parent\n    @include('layouts.datagrid.delete-forms', ['models' => Datagrid::deleteForms(), 'params' => []])\n@endsection\n"
  },
  {
    "path": "resources/views/timelines/panels/timelines.blade.php",
    "content": "<div class=\"overflow-x-auto\" id=\"timeline-timelines\">\n    <div id=\"datagrid-parent\" class=\"table-responsive\">\n        @include('layouts.datagrid._table')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/timelines/reorder/_reorder.blade.php",
    "content": "<?php /** @var \\App\\Models\\TimelineEra[] $eras */?>\n\n@if ($eras->isEmpty())\n    <x-alert type=\"warning\">\n        <p>{{ __('timelines.reorder.empty') }}</p>\n    </x-alert>\n    <?php return; ?>\n@endif\n<x-form :action=\"['timelines.reorder-save', $campaign, $timeline]\">\n<div class=\"max-w-4xl box-timeline-reorder flex flex-col gap-5\">\n    <div class=\"element-live-reorder sortable-elements flex flex-col gap-5\">\n        @foreach($eras as $era)\n            <div class=\"element bg-base-200 rounded flex flex-col gap-2 p-2\" data-id=\"{{ $era->id }}\">\n                <input type=\"hidden\" name=\"timeline_era[]\" value=\"{{ $era->id }}\" />\n                <div class=\"flex gap-2 items-center\">\n                    <div class=\"dragger grow-0\">\n                        <x-icon class=\"fa-solid fa-sort\" />\n                    </div>\n                    <div class=\"overflow-hidden grow flex flex-no-wrap items-center gap-2\">\n                        <span class=\"truncate\">{!! $era->name !!}</span>\n                        <span class=\"text-xs text-neutral-content\">\n                            {!! $era->ages()!!}\n                        </span>\n                    </div>\n                </div>\n\n                @if (!$era->orderedElements->isEmpty())\n                    <div class=\"children sortable-elements flex flex-col gap-1\">\n                    @foreach ($era->orderedElements as $element)\n                        @if ($element->invisibleEntity())\n                            @continue\n                        @endif\n                            <x-reorder.child id=\"element-{{ $element->id }}\">\n                                <input type=\"hidden\" name=\"timeline_element[{{ $era->id }}][]\" value=\"{{ $element->id }}\" />\n                                <x-icon class=\"fa-solid fa-sort\" />\n                                <div class=\"dragger relative rounded-full text-2xl text-center grow-0 w-8\">\n                                    @include('timelines.elements._icon', ['absolute' => false])\n                                </div>\n                                <div class=\"overflow-hidden grow\">\n                                    @if ($element->entity)\n                                        <x-entity-link :entity=\"$element->entity\" :campaign=\"$campaign\">\n                                            {!! $element->name !!}\n                                        </x-entity-link>\n                                    @else\n                                        {!! $element->name !!}\n                                    @endif\n                                    @if (isset($element->date))\n                                        <span class=\"text-xs text-neutral-content\">({{ $element->date }})</span>\n                                    @endif\n                                </div>\n                            </x-reorder.child>\n                    @endforeach\n                </div>\n                @endif\n            </div>\n        @endforeach\n    </div>\n\n    <button class=\"btn2 btn-primary btn-block\">\n        {{ __('crud.save') }}\n    </button>\n</div>\n</x-form>\n"
  },
  {
    "path": "resources/views/timelines/reorder/index.blade.php",
    "content": "<?php /**\n * @var \\App\\Models\\TimelineEra $era */?>\n@extends('layouts.' . (request()->ajax() ? 'ajax' : 'app'), [\n    'title' => __('timelines.reorder.title', ['name' => $timeline->name]),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'bodyClass' => 'timeline-eras-reorder'\n])\n\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'reorder',\n        'model' => $timeline,\n        'view' => 'timelines.reorder._reorder',\n        'entity' => $timeline->entity,\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/timelines/show.blade.php",
    "content": "@section('entity-header-actions-override')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @include('entities.headers.toggle')\n        @include('entities.headers.actions')\n    </div>\n@endsection\n\n<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header', [\n        'entityHeaderActions' => 'entity-header-actions-override',\n    ])\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            <x-tutorial code=\"timeline\" type=\"info\">\n                <span>\n                    We know timelines need work. Tell us what you'd actually want. \n                <a class=\"text-link\" href=\"https://forms.gle/iMWZzPcNronKuEPr6\">5 minute survey</a>\n                </span>\n            </x-tutorial>\n            \n            @include('entities.components.posts', ['withEntry' => true])\n            @include('timelines._timeline', ['timeline' => $entity->child])\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/timelines/timelines.blade.php",
    "content": "@extends('layouts.app', [\n    'title' => $entity->name . ' - ' . $entity->entityType->plural(),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('entity-header-actions')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @if ($mode === \\App\\Enums\\Descendants::Direct)\n            <x-toggles.filter-button\n                route=\"{{ route('timelines.timelines', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::All]) }}\"\n                :count=\"$model->descendants()->has('entity')->count()\"\n                all\n            />\n        @else\n            <x-toggles.filter-button\n                route=\"{{ route('timelines.timelines', [$campaign, $model, 'm' => \\App\\Enums\\Descendants::Direct]) }}\"\n                :count=\"$entity->children()->count()\"\n            />\n        @endif\n        @include('entities.headers.actions', ['edit' => false])\n    </div>\n@endsection\n\n@section('content')\n    @include('entities.pages.subpage', [\n        'active' => 'timelines',\n        'view' => 'timelines.panels.timelines',\n    ])\n@endsection\n"
  },
  {
    "path": "resources/views/tutorials/content.blade.php",
    "content": "<div class=\"modal-header\">\n    <h4 class=\"modal-title\" id=\"tutorialModalTitle\">@yield('title')</h4>\n</div>\n<div class=\"modal-body\">\n    @yield('body')\n</div>\n\n@if (view()->hasSection('footer'))\n<div class=\"modal-footer\">\n    @yield('footer')\n</div>\n@endif\n"
  },
  {
    "path": "resources/views/tutorials/dashboard_1.blade.php",
    "content": "@extends('tutorials.content')\n\n@section('title')\n    {{ __('tutorials/home.dashboard_1.title') }}\n@endsection\n\n@section('body')\n    <p>{{ __('tutorials/home.dashboard_1.first') }}</p>\n    <p>{{ __('tutorials/home.dashboard_1.second') }}</p>\n    <p>{{ __('tutorials/home.dashboard_1.third') }}</p>\n@endsection\n\n@section('footer')\n    <button class=\"btn2 pull-left\" data-tutorial=\"disable\" data-url=\"{{ route('settings.tutorial.dismiss') }}\">\n        {{ __('tutorials/actions.disable') }}\n    </button>\n    <button class=\"btn2 btn-ghost\" data-tutorial=\"close\">\n        {{ __('tutorials/actions.close') }}\n    </button>\n@endsection\n"
  },
  {
    "path": "resources/views/tutorials/modal.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/tw.blade.php",
    "content": "This file is never loaded, but needed to trick tailwind to include some classes which aren't clearly written in the code. For example `bg-{{ $colour }}` won't be detected. For this, we have this file.\n\n<div class=\"hover:bg-primary-focus hover:bg-primary-content bg-primary-content\"></div>\n\n<div class=\"md:col-span-1 md:col-span-2 md:col-span-3 md:col-span-4 md:col-span-5 md:col-span-6 md:col-span-7 md:col-span-8 md:col-span-9 md:col-span-10 md:col-span-11 md:col-span-12\"></div>\n<div class=\"lg:col-span-1 lg:col-span-2 lg:col-span-3 lg:col-span-4 lg:col-span-5 lg:col-span-6 lg:col-span-7 lg:col-span-8 lg:col-span-9 lg:col-span-10 lg:col-span-11 lg:col-span-12\"></div>\n<div class=\"col-span-1 col-span-2 col-span-3 col-span-4 col-span-5 col-span-6 col-span-6 col-span-7 col-span-8 col-span-9 col-span-10 col-span-11 col-span-12\"></div>\n\n<div class=\"border-red-500 \"></div>\n\n<div class=\"md:table-cell sm:table-cell lg:table-cell rounded-tl-2xl rounded-tr-2xl rounded-l-2xl rounded-r-2xl\"></div>\n<div class=\"bg-green-500 bg-orange-400 bg-red-500 mix-blend-color-dodge\"></div>\n\n<template id=\"moon-colours\">\n    <div class=\"text-white\"></div>\n    <div class=\"text-blue-500\"></div>\n    <div class=\"text-orange-900\"></div>\n    <div class=\"text-green-500\"></div>\n    <div class=\"text-blue-300\"></div>\n    <div class=\"text-pink-800\"></div>\n    <div class=\"text-blue-900\"></div>\n    <div class=\"text-orange-500\"></div>\n    <div class=\"text-pink-500\"></div>\n    <div class=\"text-purple-500\"></div>\n    <div class=\"text-red-500\"></div>\n    <div class=\"text-teal-500\"></div>\n    <div class=\"text-yellow-500\"></div>\n    <div class=\"text-gray-500\"></div>\n\n    <div class=\"inset-x-0\"></div>\n</template>\n"
  },
  {
    "path": "resources/views/users/_badges.blade.php",
    "content": "<div class=\"card profile-badges text-center my-5\">\n    <div class=\"card-body\">\n        <h5 class=\"card-title\">{{ __('users/profile.fields.achievements') }}</h5>\n        @if($user->isWordsmith())\n        <span class=\"badge badge-wordsmith\" data-title=\"{{ __('users/profile.achievements.wordsmith') }}\" data-toggle=\"tooltip\">\n            <x-icon class=\"fa-regular fa-feather-pointed\" />\n        </span>\n        @endif\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/users/profile.blade.php",
    "content": "<?php /** @var \\App\\Models\\User $user */?>\n@extends('layouts.front', [\n    'title' => __('users/profile.title', ['name' => $user->displayName()]),\n    'skipPerf' => true,\n    'ogImage' => (bool) $user->avatar,\n])\n\n@section('og')\n    @if (!empty($user->profile['bio']))<meta property=\"og:description\" content=\"{{ $user->profile['bio'] }}\" />@endif\n    <meta property=\"og:url\" content=\"{{ route('users.profile', $user) }}\" />\n    @if ($user->hasAvatar())\n        <meta property=\"og:image\" content=\"{{ $user->getAvatarUrl(200)  }}\" />\n        <meta property=\"og:image:type\" content=\"image/png\" />\n        <meta property=\"og:image:width\" content=\"200\" />\n        <meta property=\"og:image:height\" content=\"200\" />\n    @endif\n@endsection\n\n@section('content')\n    <section class=\"bg-purple text-white gap-16\">\n        <div class=\"px-6 py-20 lg:max-w-7xl mx-auto flex flex-col gap-8\">\n            <div class=\"flex gap-10\">\n                <div class=\"grow flex flex-col gap-3\">\n                    <h1 class=\"flex items-center gap-2\">\n                        {!! $user->displayName() !!}\n                        @if(isset($user->settings['pronouns']))\n                            <span class=\"text-md\">\n                            ({{ $user->settings['pronouns']}})\n                        </span>\n                        @endif\n                    </h1>\n\n                    @if ($user->isBanned())\n                        <x-alert type=\"warning\">\n                            {{__('users/profile.fields.banned')}}\n                        </x-alert>\n                    @endif\n                    @if (!empty($user->profile['bio']))\n                        <p class=\"text-light\">\n                            {!! nl2br($user->profile['bio']) !!}\n                        </p>\n                    @endif\n\n                    <div class=\"flex flex-wrap gap-3\">\n                    @if ($discord = $user->discord())\n                        <span class=\"btn-round rounded-full\" data-title=\"Discord\" data-toggle=\"tooltip\">\n                            <x-icon class=\"fa-brands fa-discord\" />\n                            {{ $discord->settings['username'] }}\n                        </span>\n                    @endif\n\n                    @if ($user->hasPlugins())\n                        <a class=\"btn-round rounded-full\" href=\"{{ config('marketplace.url') . '/profiles/' . $user->id }}\" title=\"Marketplace\" data-toggle=\"tooltip\">\n                            <x-icon class=\"fa-regular fa-shop\" />\n                            {{ __('footer.plugins') }}\n                        </a>\n                    @endif\n\n                    @isset($user->settings['link'])\n                        <x-profile.social-link :link=\"$user->settings['link']\" />\n                    @endif\n\n                    @if (auth()->check() && !\\App\\Facades\\Identity::isImpersonating() && auth()->user()->id === $user->id)\n                        <a href=\"{{ route('settings.profile') }}\" class=\"btn-round rounded-full\" target=\"_blank\" data-title=\"{{ __('crud.edit') }}\" data-toggle=\"tooltip\">\n                            <x-icon class=\"pencil\" />\n                            {{ __('settings.profile.actions.update_profile') }}\n                        </a>\n                    @endif\n                    </div>\n                </div>\n                <div class=\"w-60 profile-pledge flex flex-col items-center justify-center gap-3\">\n                    @if ($user->isElemental())\n                        <a href=\"https://kanka.io/hall-of-fame\">\n                            <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/elemental-128.png\"\n                                 class=\"profile-subscriber\" title=\"Elemental\" />\n                        </a>\n                        <div class=\"text-uppercase text-md\">Elemental</div>\n                    @elseif ($user->isWyvern())\n                        <a href=\"https://kanka.io/hall-of-fame\">\n                            <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/wyvern-128.png\"\n                                class=\"profile-subscriber\" title=\"Wyvern\" />\n                        </a>\n                        <div class=\"text-uppercase text-md\">Wyvern</div>\n\n                    @elseif ($user->isOwlbear())\n                        <a href=\"https://kanka.io/hall-of-fame\">\n                        <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/tiers/owlbear-128.png\"\n                                 class=\"profile-subscriber\" title=\"Owlbear\" />\n                        </a>\n                        <div class=\"text-uppercase text-md\">Owlbear</div>\n                    @elseif ($user->hasRole('admin'))\n                        <a href=\"https://kanka.io/about\">\n                            <img src=\"https://d3a4xjr8r2ldhu.cloudfront.net/app/logos/icon.png\"\n                                 class=\"profile-subscriber w-20 h-20\" title=\"Kanka Team\" />\n                        </a>\n                        <div class=\"text-uppercase text-md text-center\">\n                            Kanka Team\n                        </div>\n                    @endif\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <section class=\"lg:max-w-7xl lg:mx-auto flex flex-col gap-10 lg:gap-10 py-10 lg:py-12 px-4 xl:px-0 text-dark\" id=\"profile\">\n\n        <div class=\"flex gap-10 w-full justify-between\">\n            <div class=\"flex flex-col gap-10\">\n                @if (!$campaigns->isEmpty())\n                    <h2>{{ __('users/profile.fields.public_campaigns') }}</h2>\n\n                    <div class=\"flex gap-5 md:gap-10 flex-wrap\">\n                        @foreach ($campaigns as $campaign)\n                            <div class=\"\">\n                                @include('front._campaign', ['campaign' => $campaign, 'featured' => false])\n                            </div>\n                        @endforeach\n                    </div>\n                @endif\n            </div>\n            <div class=\"w-60 flex flex-col gap-10\">\n                <div class=\"flex flex-col text-center\">\n                    <p>\n                        {!! __('users/profile.fields.member_since', ['date' => '</p><p class=\"mb-3 text-light\">' . $user->created_at->format('M d, Y')]) !!}\n                    </p>\n\n                    @if ($user->subscribed('kanka'))\n                        <p>\n                            {!! __('users/profile.fields.subscriber_since', ['date' => '</p><p class=\"mb-3 text-light\">' . $user->subscription('kanka')->created_at->format('M d, Y')]) !!}\n                        </p>\n                    @endif\n\n                    <p>\n                        {!! __('users/profile.fields.entities_created', [\n'count' => '</p><p class=\"text-light mb-3\">' . $user->createdEntitiesCount(),\n'help' => '<i class=\"fa-regular fa-question-circle\" title=\"' . __('users/profile.helpers.entities_created') . '\"></i>',\n]) !!}</p>\n                </div>\n\n\n                @includeWhen($user->hasAchievements(), 'users._badges')\n            </div>\n        </div>\n    </section>\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/cashier/invoice.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n    <title>Invoice</title>\n\n    <style>\n        body {\n            background: #fff none;\n            font-family: DejaVu Sans, 'sans-serif';\n            font-size: 12px;\n        }\n\n        .container {\n            padding-top: 30px;\n        }\n\n        .table th {\n            border-bottom: 1px solid #ddd;\n            font-weight: bold;\n            padding: 8px 8px 8px 0;\n            vertical-align: bottom;\n        }\n\n        .table tr.row td {\n            border-bottom: 1px solid #ddd;\n        }\n\n        .table td {\n            padding: 8px 8px 8px 0;\n            vertical-align: top;\n        }\n\n        .table th:last-child,\n        .table td:last-child {\n            padding-right: 0;\n        }\n\n        .dates {\n            color: #555;\n            font-size: 10px;\n        }\n    </style>\n</head>\n<body>\n\n<div class=\"container\">\n    <table style=\"margin-left: auto; margin-right: auto;\" width=\"100%\">\n        <tr valign=\"top\">\n            <td width=\"160\">\n                <span style=\"font-size: 28px;\">\n                    Receipt\n                </span>\n\n                <!-- Invoice Info -->\n                <p>\n                    @isset ($product)\n                        <strong>Product:</strong> {{ $product }}<br>\n                    @endisset\n\n                    <strong>Date:</strong> {{ $invoice->date()->toFormattedDateString() }}<br>\n\n                    @if ($dueDate = $invoice->dueDate())\n                        <strong>Due date:</strong> {{ $dueDate->toFormattedDateString() }}<br>\n                    @endif\n\n                    @if ($invoiceId = $id ?? $invoice->number)\n                        <strong>Invoice Number:</strong> {{ $invoiceId }}<br>\n                    @endif\n                </p>\n            </td>\n\n            <!-- Account Name / Header Image -->\n            <td align=\"right\">\n                <span style=\"font-size: 28px; color: #ccc;\">\n                    <strong>{{ $header ?? $vendor ?? $invoice->account_name }}</strong>\n                </span>\n            </td>\n        </tr>\n        <tr valign=\"top\">\n            <td width=\"50%\">\n                <!-- Account Details -->\n                <strong>{{ $vendor ?? $invoice->account_name }}</strong><br>\n\n                @isset($street)\n                    {{ $street }}<br>\n                @endisset\n\n                @isset($location)\n                    {{ $location }}<br>\n                @endisset\n\n                @isset($country)\n                    {{ $country }}<br>\n                @endisset\n\n                @isset($phone)\n                    {{ $phone }}<br>\n                @endisset\n\n                @isset($email)\n                    {{ $email }}<br>\n                @endisset\n\n                @isset($url)\n                    <a href=\"{{ $url }}\">{{ $url }}</a><br>\n                @endisset\n\n                @isset($vendorVat)\n                    {{ $vendorVat }}<br>\n                @else\n                    @foreach ($invoice->accountTaxIds() as $taxId)\n                        {{ $taxId->value }}<br>\n                    @endforeach\n                @endisset\n            </td>\n            <td width=\"50%\">\n                <!-- Customer Details -->\n                <strong>Recipient</strong><br>\n                {{ $invoice->customer_name ?? $invoice->customer_email }}<br>\n                @if ($address = $invoice->customer_address)\n                    @if ($address->line1)\n                        {{ $address->line1 }}<br>\n                    @endif\n\n                    @if ($address->line2)\n                        {{ $address->line2 }}<br>\n                    @endif\n\n                    @if ($address->city)\n                        {{ $address->city }}<br>\n                    @endif\n\n                    @if ($address->state || $address->postal_code)\n                        {{ implode(' ', [$address->state, $address->postal_code]) }}<br>\n                    @endif\n\n                    @if ($address->country)\n                        {{ $address->country }}<br>\n                    @endif\n                @endif\n\n                @if ($invoice->customer_phone)\n                    {{ $invoice->customer_phone }}<br>\n                @endif\n\n                @if ($invoice->customer_name)\n                    {{ $invoice->customer_email }}<br>\n                @endif\n\n                @foreach ($invoice->customerTaxIds() as $taxId)\n                    {{ $taxId->value }}<br>\n                @endforeach\n                <span style=\"white-space: pre;\">{{ $billing }}</span>\n            </td>\n        </tr>\n        <tr valign=\"top\">\n            <td colspan=\"2\">\n                <!-- Memo / Description -->\n                @if ($invoice->description)\n                    <p>\n                        {{ $invoice->description }}\n                    </p>\n                @endif\n\n                <!-- Extra / VAT Information -->\n                @if (isset($vat))\n                    <p>\n                        {{ $vat }}\n                    </p>\n                @endif\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\">\n                <!-- Invoice Table -->\n                <table width=\"100%\" class=\"table\" border=\"0\">\n                    <tr>\n                        <th align=\"left\">Description</th>\n                        <th align=\"left\">Qty</th>\n                        <th align=\"left\">Unit price</th>\n\n                        @if ($invoice->hasTax())\n                            <th align=\"right\">Tax</th>\n                        @endif\n\n                        <th align=\"right\">Amount</th>\n                    </tr>\n\n                    <!-- Display The Invoice Line Items -->\n                    @foreach ($invoice->invoiceLineItems() as $item)\n                        <tr class=\"\">\n                            <td>\n                                {{ $item->description }}\n\n                                @if ($item->hasPeriod() && ! $item->periodStartAndEndAreEqual())\n                                    <br><span class=\"dates\">\n                                        {{ $item->startDate() }} - {{ $item->endDate() }}\n                                    </span>\n                                @endif\n                            </td>\n\n                            <td>{{ $item->quantity }}</td>\n                            <td>{{ $item->unitAmountExcludingTax() }}</td>\n\n                            @if ($invoice->hasTax())\n                                <td align=\"right\">\n                                    @if ($inclusiveTaxPercentage = $item->inclusiveTaxPercentage())\n                                        {{ $inclusiveTaxPercentage }}% incl.\n                                    @endif\n\n                                    @if ($item->hasBothInclusiveAndExclusiveTax())\n                                        +\n                                    @endif\n\n                                    @if ($exclusiveTaxPercentage = $item->exclusiveTaxPercentage())\n                                        {{ $exclusiveTaxPercentage }}%\n                                    @endif\n                                </td>\n                            @endif\n\n                            <td align=\"right\">{{ $item->total() }}</td>\n                        </tr>\n                    @endforeach\n\n                    <!-- Display The Subtotal -->\n                    @if ($invoice->hasDiscount() || $invoice->hasTax() || $invoice->hasStartingBalance())\n                        <tr>\n                            <td></td>\n                            <td colspan=\"{{ $invoice->hasTax() ? 3 : 2 }}\">Subtotal</td>\n                            <td align=\"right\">{{ $invoice->subtotal() }}</td>\n                        </tr>\n                    @endif\n\n                    <!-- Display The Discount -->\n                    @if ($invoice->hasDiscount())\n                        @foreach ($invoice->discounts() as $discount)\n                            @php($coupon = $discount->coupon())\n\n                            <tr>\n                                <td></td>\n                                <td colspan=\"{{ $invoice->hasTax() ? 3 : 2 }}\" align=\"right\">\n                                    @if ($coupon->isPercentage())\n                                        {{ $coupon->name() }} ({{ $coupon->percentOff() }}% Off)\n                                    @else\n                                        {{ $coupon->name() }} ({{ $coupon->amountOff() }} Off)\n                                    @endif\n                                </td>\n\n                                <td align=\"right\">-{{ $invoice->discountFor($discount) }}</td>\n                            </tr>\n                        @endforeach\n                    @endif\n\n                    <!-- Display The Taxes -->\n                    @unless ($invoice->isNotTaxExempt())\n                        <tr>\n                            <td></td>\n                            <td colspan=\"{{ $invoice->hasTax() ? 3 : 2 }}\" align=\"right\">\n                                @if ($invoice->isTaxExempt())\n                                    Tax is exempted\n                                @else\n                                    Tax to be paid on reverse charge basis\n                                @endif\n                            </td>\n                            <td align=\"right\"></td>\n                        </tr>\n                    @else\n                        @foreach ($invoice->taxes() as $tax)\n                            <tr>\n                                <td></td>\n                                <td colspan=\"3\">\n                                    {{ $tax->display_name }} {{ $tax->jurisdiction ? ' - '.$tax->jurisdiction : '' }}\n                                    ({{ $tax->percentage }}%{{ $tax->isInclusive() ? ' incl.' : '' }})\n                                </td>\n                                <td align=\"right\">{{ $tax->amount() }}</td>\n                            </tr>\n                        @endforeach\n                    @endunless\n\n                    <!-- Display The Final Total -->\n                    <tr>\n                        <td></td>\n                        <td colspan=\"{{ $invoice->hasTax() ? 3 : 2 }}\">\n                            Total\n                        </td>\n                        <td align=\"right\">\n                            {{ $invoice->realTotal() }}\n                        </td>\n                    </tr>\n\n                    <!-- Applied Balance -->\n                    @if ($invoice->hasAppliedBalance())\n                        <tr>\n                            <td></td>\n                            <td colspan=\"{{ $invoice->hasTax() ? 3 : 2 }}\">\n                                Applied balance\n                            </td>\n                            <td align=\"right\">{{ $invoice->appliedBalance() }}</td>\n                        </tr>\n                    @endif\n\n                    <!-- Display The Amount Due -->\n                    <tr>\n                        <td></td>\n                        <td colspan=\"{{ $invoice->hasTax() ? 3 : 2 }}\">\n                            <strong>Amount due</strong>\n                        </td>\n                        <td align=\"right\">\n                            <strong>{{ $invoice->amountDue() }}</strong>\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    </table>\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/larecipe/default.blade.php",
    "content": "<!doctype html>\n<html>\n<head>\n    <!-- META Tags -->\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <title>{{ isset($title) ? $title . ' | ' : null }}{{ config('app.name') }}</title>\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <!-- SEO -->\n    <meta name=\"author\" content=\"{{ config('larecipe.seo.author') }}\">\n    <meta name=\"description\" content=\"{{ config('larecipe.seo.description') }}\">\n    <meta name=\"keywords\" content=\"{{ config('larecipe.seo.keywords') }}\">\n    <meta name=\"twitter:card\" value=\"summary\">\n    @if (isset($canonical) && $canonical)\n        <link rel=\"canonical\" href=\"{{ url($canonical) }}\" />\n    @endif\n    @if($openGraph = config('larecipe.seo.og'))\n        @foreach($openGraph as $key => $value)\n            @if($value)\n                <meta property=\"og:{{ $key }}\" content=\"{{ $value }}\" />\n            @endif\n        @endforeach\n    @endif\n\n    <!-- CSS -->\n    <link rel=\"stylesheet\" href=\"{{ larecipe_assets('css/app.css') }}\">\n\n    @if (config('larecipe.ui.fav'))\n        <!-- Favicon -->\n        <link rel=\"apple-touch-icon\" href=\"{{ asset(config('larecipe.ui.fav')) }}\">\n        <link rel=\"shortcut icon\" type=\"image/png\" href=\"{{ asset(config('larecipe.ui.fav')) }}\"/>\n    @endif\n\n    <!-- FontAwesome -->\n    <link rel=\"stylesheet\" href=\"{{ larecipe_assets('css/font-awesome.css') }}\">\n    @if (config('larecipe.ui.fa_v4_shims', true))\n        <link rel=\"stylesheet\" href=\"{{ larecipe_assets('css/font-awesome-v4-shims.css') }}\">\n    @endif\n\n    <!-- Dynamic Colors -->\n    @include('larecipe::style')\n\n    <!-- CSRF Token -->\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n\n    @foreach(LaRecipe::allStyles() as $name => $path)\n        @if (preg_match('/^https?:\\/\\//', $path))\n            <link rel=\"stylesheet\" href=\"{{ $path }}\">\n        @else\n            <link rel=\"stylesheet\" href=\"{{ route('larecipe.styles', $name) }}\">\n        @endif\n    @endforeach\n\n</head>\n<body>\n<div id=\"app\" v-cloak>\n    @include('larecipe::partials.nav')\n\n    @include('larecipe::plugins.search')\n\n    @yield('content')\n\n    @include('layouts.tracking.tracking')\n\n    <larecipe-back-to-top></larecipe-back-to-top>\n</div>\n\n\n<script>\n    window.config = @json([]);\n</script>\n\n<script type=\"text/javascript\">\n    if(localStorage.getItem('larecipeSidebar') == null) {\n        localStorage.setItem('larecipeSidebar', !! {{ config('larecipe.ui.show_side_bar') ?: 0 }});\n    }\n</script>\n\n<script src=\"{{ larecipe_assets('js/app.js') }}\"></script>\n\n<script>\n    window.LaRecipe = new CreateLarecipe(config)\n</script>\n\n<!-- Google Analytics -->\n@if(config('larecipe.settings.ga_id'))\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id={{ config('larecipe.settings.ga_id') }}\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n\n        gtag('config', \"{{ config('larecipe.settings.ga_id') }}\");\n    </script>\n@endif\n<!-- /Google Analytics -->\n\n@foreach (LaRecipe::allScripts() as $name => $path)\n    @if (preg_match('/^https?:\\/\\//', $path))\n        <script src=\"{{ $path }}\"></script>\n    @else\n        <script src=\"{{ route('larecipe.scripts', $name) }}\"></script>\n    @endif\n@endforeach\n\n<script>\n    LaRecipe.run()\n</script>\n\n@includeWhen(config('tracking.consent'), 'partials.cookieconsent')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/larecipe/partials/logo.blade.php",
    "content": "<img src=\"https://th.kanka.io/cIWvFrRM7i3FXtFfa3vq_0d-pjI=/40x40/smart/src/app/logos/icon.png\" />\n"
  },
  {
    "path": "resources/views/vendor/livewire/tailwind.blade.php",
    "content": "@php\nif (! isset($scrollTo)) {\n    $scrollTo = 'body';\n}\n\n$scrollIntoViewJsSnippet = ($scrollTo !== false)\n    ? <<<JS\n       (\\$el.closest('{$scrollTo}') || document.querySelector('{$scrollTo}')).scrollIntoView()\n    JS\n    : '';\n@endphp\n\n<div>\n    @if ($paginator->hasPages())\n        <nav role=\"navigation\" aria-label=\"{{ __('Pagination Navigation') }}\"class=\"flex items-center justify-between grow\">\n            <div class=\"flex justify-between flex-1 sm:hidden\">\n                <span>\n                    @if ($paginator->onFirstPage())\n                        <span class=\"btn2 btn-sm btn-disabled\">\n                            {!! __('pagination.previous') !!}\n                        </span>\n                    @else\n                        <button type=\"button\" wire:click=\"previousPage('{{ $paginator->getPageName() }}')\" x-on:click=\"{{ $scrollIntoViewJsSnippet }}\" wire:loading.attr=\"disabled\" dusk=\"previousPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}.before\" class=\"btn2 btn-sm\">\n                            {!! __('pagination.previous') !!}\n                        </button>\n                    @endif\n                </span>\n\n                <span>\n                    @if ($paginator->hasMorePages())\n                        <button type=\"button\" wire:click=\"nextPage('{{ $paginator->getPageName() }}')\" x-on:click=\"{{ $scrollIntoViewJsSnippet }}\" wire:loading.attr=\"disabled\" dusk=\"nextPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}.before\" class=\"btn2 btn-sm\">\n                            {!! __('pagination.next') !!}\n                        </button>\n                    @else\n                        <span class=\"btn2 btn-sm btn-disabled\">\n                            {!! __('pagination.next') !!}\n                        </span>\n                    @endif\n                </span>\n            </div>\n\n            <div class=\"hidden sm:flex-1 sm:flex sm:items-center sm:justify-between gap-2 my-2\">\n                <p class=\"help-block italic m-0 text-sm\">\n                    {!! __('pagination.showing') !!}\n                    @if ($paginator->firstItem())\n                        <span class=\"font-medium\">{{ $paginator->firstItem() }}</span>\n                        {!! __('pagination.to') !!}\n                        <span class=\"font-medium\">{{ $paginator->lastItem() }}</span>\n                    @else\n                        {{ $paginator->count() }}\n                    @endif\n                    {!! __('pagination.of') !!}\n                    <span class=\"font-medium\">{{ $paginator->total() }}</span>\n                    {!! __('pagination.results') !!}\n                </p>\n\n                <div>\n                    <span class=\"relative z-0 inline-flex shadow-sm rounded-md join\">\n                        <span>\n                            {{-- Previous Page Link --}}\n                            @if ($paginator->onFirstPage())\n                                <span aria-disabled=\"true\" aria-label=\"{{ __('pagination.previous') }}\" class=\"btn2 btn-sm btn-disabled join-item\">\n                                    <span aria-hidden=\"true\">\n                                        <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                                            <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n                                        </svg>\n                                    </span>\n                                </span>\n                            @else\n                                <button type=\"button\" wire:click=\"previousPage('{{ $paginator->getPageName() }}')\" x-on:click=\"{{ $scrollIntoViewJsSnippet }}\" dusk=\"previousPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}.after\" class=\"btn2 btn-sm join-item\" aria-label=\"{{ __('pagination.previous') }}\">\n                                    <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                                        <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n                                    </svg>\n                                </button>\n                            @endif\n                        </span>\n\n                        {{-- Pagination Elements --}}\n                        @foreach ($elements as $element)\n                            {{-- \"Three Dots\" Separator --}}\n                            @if (is_string($element))\n                                <span aria-disabled=\"true\" class=\"btn2 btn-sm join-item btn-disabled\">\n                                    <span>{{ $element }}</span>\n                                </span>\n                            @endif\n\n                            {{-- Array Of Links --}}\n                            @if (is_array($element))\n                                @foreach ($element as $page => $url)\n                                    <span wire:key=\"paginator-{{ $paginator->getPageName() }}-page{{ $page }}\">\n                                        @if ($page == $paginator->currentPage())\n                                            <span aria-current=\"page\" class=\"btn2 btn-sm btn-disabled join-item\">\n                                                <span>{{ $page }}</span>\n                                            </span>\n                                        @else\n                                            <button type=\"button\" wire:click=\"gotoPage({{ $page }}, '{{ $paginator->getPageName() }}')\" x-on:click=\"{{ $scrollIntoViewJsSnippet }}\" class=\"btn2 btn-sm join-item\" aria-label=\"{{ __('Go to page :page', ['page' => $page]) }}\">\n                                                {{ $page }}\n                                            </button>\n                                        @endif\n                                    </span>\n                                @endforeach\n                            @endif\n                        @endforeach\n\n                        <span>\n                            {{-- Next Page Link --}}\n                            @if ($paginator->hasMorePages())\n                                <button type=\"button\" wire:click=\"nextPage('{{ $paginator->getPageName() }}')\" x-on:click=\"{{ $scrollIntoViewJsSnippet }}\" dusk=\"nextPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}.after\" class=\"btn2 btn-sm join-item\" aria-label=\"{{ __('pagination.next') }}\">\n                                    <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                                        <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\n                                    </svg>\n                                </button>\n                            @else\n                                <span aria-disabled=\"true\" aria-label=\"{{ __('pagination.next') }}\" class=\"btn2 btn-sm btn-disabled join-item\">\n                                    <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                                        <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\n                                    </svg>\n                                </span>\n                            @endif\n                        </span>\n                    </span>\n                </div>\n            </div>\n        </nav>\n    @endif\n</div>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/button.blade.php",
    "content": "@props([\n    'url',\n    'color' => 'primary',\n    'align' => 'center',\n])\n<table class=\"action\" align=\"{{ $align }}\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td align=\"{{ $align }}\">\n<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td align=\"{{ $align }}\">\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td>\n<a href=\"{{ $url }}\" class=\"button button-{{ $color }}\" target=\"_blank\" rel=\"noopener\">{{ $slot }}</a>\n</td>\n</tr>\n</table>\n</td>\n</tr>\n</table>\n</td>\n</tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/footer.blade.php",
    "content": "<tr>\n<td>\n<table class=\"footer\" align=\"center\" width=\"570\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td class=\"content-cell\" align=\"center\">\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</td>\n</tr>\n</table>\n</td>\n</tr>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/header.blade.php",
    "content": "@props(['url'])\n<tr>\n<td class=\"header\">\n<a href=\"{{ $url }}\" style=\"display: inline-block;\">\n<img src=\"https://kanka-app-assets.s3.amazonaws.com/images/logos/logo-blue-white.png\" alt=\"Kanka logo\" title=\"Kanka logo\" style=\"margin: 50px;\" width=\"120px\" height=\"120px\">\n</a>\n</td>\n</tr>"
  },
  {
    "path": "resources/views/vendor/mail/html/layout.blade.php",
    "content": "@props([\n    'layout' => 'user',\n])\n\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html lang=\"{{ app()->getLocale() }}\" dir=\"ltr\"  xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>{{ config('app.name') }}</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n    <meta name=\"color-scheme\" content=\"light\">\n    <meta name=\"supported-color-schemes\" content=\"light\">\n    <meta name=\"format-detection\" content=\"telephone=no, date=no, address=no, email=no, url=no\">\n    <meta name=\"x-apple-disable-message-reformatting\">\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap\" rel=\"stylesheet\">\n    <style>\n        @media screen {\n            body {\n                font-family: 'Inter', sans-serif;\n            }\n        }\n        html, body, .document { margin: 0 !important; padding: 0 !important; width: 100% !important; height: 100% !important; }\n        body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility;}\n        img { border: 0; outline: none; text-decoration: none;  -ms-interpolation-mode: bicubic; }\n        table { border-collapse: collapse; }\n        table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }\n        body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }\n        p {padding-left: 50px; padding-right: 50px;}\n        ul {padding-left: 65px; padding-right: 65px;}\n        h1, h2, h3, h4, h5, p { margin:0;}\n        @media all and (max-width:639px) {\n            .wrapper{ width:100%!important; }\n            .container{ width:100%!important; min-width:100%!important; padding: 0 !important; }\n            .row{padding-left: 20px!important; padding-right: 20px!important;}\n            p { padding-left: 20px!important; padding-right: 20px!important; }\n            ul { padding-left: 35px!important; padding-right: 35px!important; }\n        }\n    </style>\n</head>\n<body style=\"margin: 0 !important; padding: 0 !important; background-color: #F4F7FA\">\n    <div class=\"document\" role=\"article\" aria-roledescription=\"email\" aria-label=\"\" lang=\"{{ app()->getLocale() }}\" dir=\"ltr\" style=\"background-color:#F4F7FA; line-height: 100%; font-size:medium; font-size:max(16px, 1rem);\">\n\n        <table width=\"100%\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n            <tbody>\n                <tr>\n                    <td class=\"\" background=\"\" bgcolor=\"#F4F7FA\" align=\"center\" valign=\"top\" style=\"padding: 0 8px;\">\n                        <table width=\"640\" class=\"wrapper\" align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"\n                            max-width: 640px;\n                            border-radius:8px; border-collapse: separate!important; overflow: hidden;\n                        \">\n                            <tbody>\n                                <tr>\n                                    <td align=\"center\" bgcolor=\"#ffffff\">\n\n                                        @include('emails.2024.header')\n\n                                        {{ Illuminate\\Mail\\Markdown::parse($slot) }}\n\n                                        {{ $subcopy ?? '' }}\n                                        @includeWhen($layout != 'admin', 'emails.2024.footer', ['layout' => $layout])\n                                    </td>\n                                </tr>\n                            </tbody>\n                        </table>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/message.blade.php",
    "content": "@props([\n    'layout' => 'user',\n])\n<x-mail::layout :layout=\"$layout\">\n\n{{-- Body --}}\n{{ $slot }}\n\n</x-mail::layout>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/panel.blade.php",
    "content": "<table class=\"panel\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td class=\"panel-content\">\n<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td class=\"panel-item\" style=\"color: #ffffff;\">\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</td>\n</tr>\n</table>\n</td>\n</tr>\n</table>\n\n"
  },
  {
    "path": "resources/views/vendor/mail/html/subcopy.blade.php",
    "content": "<table class=\"subcopy\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td>\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</td>\n</tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/table.blade.php",
    "content": "<div class=\"table\">\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</div>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/themes/default.css",
    "content": "\n/* Base */\n\nbody,\nbody *:not(html):not(style):not(br):not(tr):not(code) {\n    box-sizing: border-box;\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,\n        'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n    position: relative;\n}\n\nbody {\n    -webkit-text-size-adjust: none;\n    background-color: #ffffff;\n    color: #718096;\n    height: 100%;\n    line-height: 1.4;\n    margin: 0;\n    padding: 0;\n    width: 100% !important;\n}\n\np,\nul,\nol,\nblockquote {\n    line-height: 1.4;\n    text-align: left;\n}\n\na {\n    color: #2CB191;\n}\n\na img {\n    border: none;\n}\n\n/* Typography */\n\nh1 {\n    color: #000000;\n    font-size: 28px;\n    font-weight: bold;\n    margin-top: 0;\n    margin-bottom: 20px;\n    padding: 20px;\n    text-align: center;\n    line-height: 1.4;\n}\n\nh2 {\n    color: #ffffff;\n    font-size: 28px;\n    font-weight: bold;\n    margin-top: 0;\n    margin-bottom: 20px;\n    padding: 20px;\n    text-align: center;\n    line-height: 1.4;\n}\n\nh3 {\n    font-size: 14px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\np {\n    font-size: 16px;\n    line-height: 1.5em;\n    margin-top: 0;\n    margin-bottom: 1.2rem;\n    text-align: left;\n}\n\np.sub {\n    font-size: 12px;\n}\n\nimg {\n    max-width: 100%;\n}\n\n/* Layout */\n\n.wrapper {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    background-color: #edf2f7;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n.content {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n/* Header */\n\n.header {\n    padding: 25px 0;\n    text-align: center;\n}\n\n.header a {\n    color: #3d4852;\n    font-size: 19px;\n    font-weight: bold;\n    text-decoration: none;\n}\n\n/* Logo */\n\n.logo {\n    height: 75px;\n    max-height: 75px;\n    width: 75px;\n}\n\n/* Body */\n\n.body {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    background-color: #edf2f7;\n    border-bottom: 1px solid #edf2f7;\n    border-top: 1px solid #edf2f7;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n.inner-body {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 570px;\n    background-color: #ffffff;\n    border-color: #e8e5ef;\n    border-radius: 2px;\n    border-width: 1px;\n    box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015);\n    margin: 0 auto;\n    padding: 0;\n    width: 570px;\n}\n\n.inner-body a {\n    word-break: break-all;\n}\n\n/* Subcopy */\n\n.subcopy {\n    border-top: 1px solid #e8e5ef;\n    margin-top: 25px;\n    padding-top: 25px;\n}\n\n.subcopy p {\n    font-size: 14px;\n}\n\n/* Footer */\n\n.footer {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 570px;\n    margin: 0 auto;\n    padding: 0;\n    text-align: center;\n    width: 570px;\n}\n\n.footer p {\n    color: #b0adc5;\n    font-size: 12px;\n    text-align: center;\n}\n\n.footer a {\n    color: #b0adc5;\n    text-decoration: underline;\n}\n\n/* Tables */\n\n.table table {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 30px auto;\n    width: 100%;\n}\n\n.table th {\n    border-bottom: 1px solid #edeff2;\n    margin: 0;\n    padding-bottom: 8px;\n}\n\n.table td {\n    color: #74787e;\n    font-size: 15px;\n    line-height: 18px;\n    margin: 0;\n    padding: 10px 0;\n}\n\n.content-cell {\n    max-width: 100vw;\n    padding: 32px;\n}\n\ntable.social-links {\n    border-spacing: 5px;\n    border-collapse: separate;\n}\n\n/* Buttons */\n\n.action {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 30px auto;\n    padding: 0;\n    text-align: center;\n    width: 100%;\n    float: unset;\n}\n\n.button {\n    -webkit-text-size-adjust: none;\n    border-radius: 4px;\n    color: #fff;\n    display: inline-block;\n    overflow: hidden;\n    text-decoration: none;\n}\n\n.button-blue {\n    padding: 10px 20px;\n    border-radius: 20px;\n    background-color: #1919ad;\n    color: #efefef;\n    text-decoration: none;\n    margin: 20px 0;\n    display: inline-block;\n}\n\n.button-primary {\n    background-color: #2d3748;\n    border-bottom: 8px solid #2d3748;\n    border-left: 18px solid #2d3748;\n    border-right: 18px solid #2d3748;\n    border-top: 8px solid #2d3748;\n}\n\n.button-green,\n.button-success {\n    background-color: #48bb78;\n    border-bottom: 8px solid #48bb78;\n    border-left: 18px solid #48bb78;\n    border-right: 18px solid #48bb78;\n    border-top: 8px solid #48bb78;\n}\n\n.button-red,\n.button-error {\n    background-color: #e53e3e;\n    border-bottom: 8px solid #e53e3e;\n    border-left: 18px solid #e53e3e;\n    border-right: 18px solid #e53e3e;\n    border-top: 8px solid #e53e3e;\n}\n\n/* Panels */\n\n.panel {\n    /* border-left: #2d3748 solid 4px; */\n    width: calc(100% + 64px);\n    margin: 21px;\n    margin-left: -32px;\n}\n\n.panel-content {\n    background-color: #404790;\n    color: #718096;\n    padding: 32px;\n}\n\n.panel-content p {\n    color: #ffffff;\n}\n\n.panel-item {\n    padding: 0;\n}\n\n.panel-item p:last-of-type {\n    margin-bottom: 0;\n    padding-bottom: 0;\n}\n\n/* Utilities */\n\n.break-all {\n    word-break: break-all;\n}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/button.blade.php",
    "content": "{{ $slot }}: {{ $url }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/footer.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/header.blade.php",
    "content": "{{ $slot }}: {{ $url }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/layout.blade.php",
    "content": "{!! strip_tags($header ?? '') !!}\n\n{!! strip_tags($slot) !!}\n@isset($subcopy)\n\n{!! strip_tags($subcopy) !!}\n@endisset\n\n{!! strip_tags($footer ?? '') !!}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/message.blade.php",
    "content": "<x-mail::layout>\n    {{-- Header --}}\n    <x-slot:header>\n        <x-mail::header :url=\"config('app.url')\">\n            {{ config('app.name') }}\n        </x-mail::header>\n    </x-slot:header>\n\n    {{-- Body --}}\n    {{ $slot }}\n\n    {{-- Subcopy --}}\n    @isset($subcopy)\n        <x-slot:subcopy>\n            <x-mail::subcopy>\n                {{ $subcopy }}\n            </x-mail::subcopy>\n        </x-slot:subcopy>\n    @endisset\n\n    {{-- Footer --}}\n    <x-slot:footer>\n        <x-mail::footer>\n            © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')\n        </x-mail::footer>\n    </x-slot:footer>\n</x-mail::layout>\n"
  },
  {
    "path": "resources/views/vendor/mail/text/panel.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/subcopy.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/table.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/pagination/tailwind.blade.php",
    "content": "@if ($paginator->hasPages())\n    <nav role=\"navigation\" aria-label=\"{{ __('Pagination Navigation') }}\" class=\"flex items-center justify-between grow\">\n        <div class=\"flex justify-between flex-1 sm:hidden\">\n            @if ($paginator->onFirstPage())\n                <span class=\"btn2 btn-sm btn-disabled\">\n                    {!! __('pagination.previous') !!}\n                </span>\n            @else\n                <a href=\"{{ $paginator->previousPageUrl() }}\" class=\"btn2 btn-sm\">\n                    {!! __('pagination.previous') !!}\n                </a>\n            @endif\n\n            @if ($paginator->hasMorePages())\n                <a href=\"{{ $paginator->nextPageUrl() }}\" class=\"btn2 btn-sm\">\n                    {!! __('pagination.next') !!}\n                </a>\n            @else\n                <span class=\"btn2 btn-sm btn-disabled\">\n                    {!! __('pagination.next') !!}\n                </span>\n            @endif\n        </div>\n\n        <div class=\"hidden sm:flex-1 sm:flex sm:items-center sm:justify-between gap-2\">\n            <div class=\"flex gap-2\">\n                <x-helper>\n                    <p class=\"text-xs\">\n                        {!! __('pagination.showing') !!}\n                        @if ($paginator->firstItem())\n                            <span class=\"font-medium\">{{ $paginator->firstItem() }}</span>\n                            {!! __('pagination.to') !!}\n                            <span class=\"font-medium\">{{ $paginator->lastItem() }}</span>\n                        @else\n                            {{ $paginator->count() }}\n                        @endif\n                        {!! __('pagination.of') !!}\n                        <span class=\"font-medium\">{{ $paginator->total() }}</span>\n                        {!! __('pagination.results') !!}\n                    </p>\n                </x-helper>\n\n                @if (isset($settingsLink))\n                    &dash; <a href=\"{{ route('settings.appearance', ['highlight' => 'pagination', 'from' => $settingsLink]) }}\" class=\"link text-link\">\n                        {!! __('crud.helpers.per-page') !!}\n                    </a>\n                @endif\n            </div>\n\n\n            <div>\n                <span class=\"relative z-0 inline-flex shadow-sm rounded-md join\">\n                    {{-- Previous Page Link --}}\n                    @if ($paginator->onFirstPage())\n                        <span aria-disabled=\"true\" aria-label=\"{{ __('pagination.previous') }}\" class=\"btn2 btn-sm btn-disabled join-item\">\n                            <span aria-hidden=\"true\">\n                                <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                                    <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n                                </svg>\n                            </span>\n                        </span>\n                    @else\n                        <a href=\"{{ $paginator->previousPageUrl() }}\" rel=\"prev\" class=\"btn2 btn-sm join-item\" aria-label=\"{{ __('pagination.previous') }}\">\n                            <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                                <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n                            </svg>\n                        </a>\n                    @endif\n\n                    {{-- Pagination Elements --}}\n                    @foreach ($elements as $element)\n                        {{-- \"Three Dots\" Separator --}}\n                        @if (is_string($element))\n                            <span aria-disabled=\"true\" class=\"btn2 btn-sm join-item btn-disabled\">\n                                <span>{{ $element }}</span>\n                            </span>\n                        @endif\n\n                        {{-- Array Of Links --}}\n                        @if (is_array($element))\n                            @foreach ($element as $page => $url)\n                                @if ($page == $paginator->currentPage())\n                                    <span aria-current=\"page\" class=\"btn2 btn-sm btn-disabled join-item\">\n                                        <span class=\"\">{{ $page }}</span>\n                                    </span>\n                                @else\n                                    <a href=\"{{ $url }}\" class=\"btn2 btn-sm join-item\" aria-label=\"{{ __('Go to page :page', ['page' => $page]) }}\">\n                                        {{ $page }}\n                                    </a>\n                                @endif\n                            @endforeach\n                        @endif\n                    @endforeach\n\n                    {{-- Next Page Link --}}\n                    @if ($paginator->hasMorePages())\n                        <a href=\"{{ $paginator->nextPageUrl() }}\" rel=\"next\" class=\"btn2 btn-sm join-item\" aria-label=\"{{ __('pagination.next') }}\">\n                            <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                                <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\n                            </svg>\n                        </a>\n                    @else\n                        <span aria-disabled=\"true\" aria-label=\"{{ __('pagination.next') }}\" class=\"btn2 btn-sm btn-disabled join-item\">\n                            <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                                <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\n                            </svg>\n                        </span>\n                    @endif\n                </span>\n            </div>\n        </div>\n    </nav>\n@endif\n"
  },
  {
    "path": "resources/views/vendor/passport/authorize.blade.php",
    "content": "@extends('layouts.login', [\n    'title' => 'Kanka oAuth Authorization',\n])\n\n@section('content')\n    <h1 class=\"text-2xl leading-tight dark:text-slate-200\">\n        {{ __('Authorization Request') }}\n    </h1>\n\n    <p>The application <strong>{{ $client->name }}</strong> is requesting permission to access your Kanka account.</p>\n\n    <!-- Scope List -->\n    @if (count($scopes) > 0)\n        <div class=\"scopes\">\n            <p><strong>This application will be able to:</strong></p>\n\n            <ul>\n                @foreach ($scopes as $scope)\n                    <li>{{ $scope->description }}</li>\n                @endforeach\n            </ul>\n        </div>\n    @else\n        <p class=\"text-orange-500 dark:text-orange-300\">\n            <x-icon class=\"fa-regular fa-exclamation-triangle\" />\n           This application will have full access to your account and campaigns.\n        </p>\n    @endif\n\n    <div class=\"flex flex-col md:grid grid-cols-2 gap-4\">\n        <!-- Authorize Button -->\n        <form method=\"post\" action=\"{{ route('passport.authorizations.approve') }}\">\n            @csrf\n\n            <input type=\"hidden\" name=\"state\" value=\"{{ $request->state }}\">\n            <input type=\"hidden\" name=\"client_id\" value=\"{{ $client->id }}\">\n            <input type=\"hidden\" name=\"auth_token\" value=\"{{ $authToken }}\">\n            <button type=\"submit\" class=\"w-full rounded border border-blue-500 text-blue-500 uppercase px-6 py-2 transition-all bg-white hover:shadow-xs hover:bg-blue-500 hover:text-white dark:bg-slate-800\">\n                <x-icon class=\"check\" />\n                Authorize\n            </button>\n        </form>\n\n        <!-- Cancel Button -->\n        <form method=\"post\" action=\"{{ route('passport.authorizations.deny') }}\">\n            @csrf\n            @method('DELETE')\n\n            <input type=\"hidden\" name=\"state\" value=\"{{ $request->state }}\">\n            <input type=\"hidden\" name=\"client_id\" value=\"{{ $client->id }}\">\n            <input type=\"hidden\" name=\"auth_token\" value=\"{{ $authToken }}\">\n            <button class=\"w-full rounded border border-red-500 text-red-500 uppercase px-6 py-2 transition-all bg-white hover:shadow-xs hover:bg-red-500 hover:text-white dark:bg-slate-800\">\n                <x-icon class=\"fa-regular fa-ban\" />\n                Deny\n            </button>\n        </form>\n    </div>\n\n    <hr class=\"border-gray-800 dark:border-gray-700\" />\n    <p class=\"text-sm\">If you are unsure why you are seeing this, contact us at <a class=\"text-blue-500 hover:text-blue-800 transition-all duration-150\" href=\"mailto:{{ config('app.email') }}\">{{ config('app.email') }}</a> or reach out directly on <a href=\"https://kanka.io/go/discord\" class=\"text-blue-500 hover:text-blue-800 transition-all duration-150\">Discord</a>.</p>\n\n@endsection\n"
  },
  {
    "path": "resources/views/whiteboards/_draw-link.blade.php",
    "content": "@php\n /** @var \\App\\Models\\Whiteboard $model */\n@endphp\n<a href=\"{{ route('whiteboards.draw', [$campaign, $model->id]) }}\" target=\"_blank\" class=\"text-link\"\n   data-toggle=\"tooltip\" data-title=\"{{ __('whiteboards.actions.draw') }}\">\n    <x-icon class=\"fa-regular fa-chalkboard\" />\n</a>\n"
  },
  {
    "path": "resources/views/whiteboards/cta.blade.php",
    "content": "<?php /** @var \\App\\Models\\Whiteboard $whiteboard */ ?>\n@extends('layouts.app', [\n    'title' => __('entities.whiteboards'),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('content')\n    <x-grid type=\"1/1\">\n        <h1 class=\"\">{{ __('whiteboards.cta.title') }}</h1>\n\n        <p class=\"max-w-2xl\">\n            {!! __('whiteboards.cta.text', ['wyvern' => '<strong>Wyvern</strong>', 'elemental' => '<strong>Elemental</strong>']) !!}\n        </p>\n\n        <x-premium-cta-footer :campaign=\"$campaign\" />\n    </x-grid>\n\n@endsection\n"
  },
  {
    "path": "resources/views/whiteboards/draw.blade.php",
    "content": "@extends('layouts.rich', [\n    'title' => $whiteboard->name,\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n    'pageClass' => 'whiteboard-page'\n])\n\n@section('content')\n    <div id=\"whiteboard\">\n        <whiteboard\n            save=\"{{ route('whiteboards.shapes.store', [$campaign, $whiteboard]) }}\"\n            load=\"{{ route('whiteboards.api', [$campaign, $whiteboard]) }}\"\n            gallery=\"{{ route('gallery.browse', $campaign) }}\"\n            search=\"{{ route('search.live', $campaign) }}\"\n            entity=\"{{ route('entities.json.export', [$campaign, 0]) }}\"\n            user=\"{{ auth()->check() }}\"\n            :readonly=\"{{ auth()->check() && auth()->user()->can('update', $whiteboard->entity) && auth()->user()->can('whiteboards', $campaign) ? 0 : 1 }}\"\n            :creator=\"{{ auth()->check() && !empty($campaign) && auth()->user()->can('member', $campaign) ? 1 : 0 }}\"\n            :whiteboard=\"{{ $whiteboard->id }}\"\n        />\n    </div>\n\n@endsection\n\n@section('scripts')\n    @parent\n    @vite('resources/js/whiteboards.js')\n@endsection\n"
  },
  {
    "path": "resources/views/whiteboards/form/_copy.blade.php",
    "content": "<x-forms.field\n    field=\"copy-eras\">\n    <input type=\"hidden\" name=\"copy_eras\" value=\"\" />\n    <x-checkbox :text=\"__('timelines.fields.copy_eras')\">\n        <input type=\"checkbox\" name=\"copy_eras\" value=\"1\" checked=\"checked\" />\n    </x-checkbox>\n</x-forms.field>\n\n<x-forms.field\n    field=\"copy-elements\">\n    <input type=\"hidden\" name=\"copy_elements\" value=\"\" />\n    <x-checkbox :text=\"__('timelines.fields.copy_elements')\">\n        <input type=\"checkbox\" name=\"copy_elements\" value=\"1\" checked=\"checked\" />\n    </x-checkbox>\n</x-forms.field>\n"
  },
  {
    "path": "resources/views/whiteboards/form/_entry.blade.php",
    "content": "<?php /** @var \\App\\Models\\Timeline $model */ ?>\n<x-grid>\n    @include('cruds.fields.entity-name')\n    @include('cruds.fields.type', ['base' => \\App\\Models\\Whiteboard::class, 'trans' => 'whiteboards'])\n\n    @include('cruds.fields.tags')\n    @include('cruds.fields.image')\n</x-grid>\n"
  },
  {
    "path": "resources/views/whiteboards/index.blade.php",
    "content": "<?php /** @var \\App\\Models\\Whiteboard $whiteboard */ ?>\n@extends('layouts.app', [\n    'title' => __('entities.whiteboards'),\n    'breadcrumbs' => false,\n    'mainTitle' => false,\n])\n\n\n@section('content')\n\n    <div class=\"flex gap-2 justify-between items-center\">\n        <h3 class=\"text-xl\">{{ __('entities.whiteboards') }}</h3>\n        <a href=\"{{ route('whiteboards.create', $campaign) }}\" class=\"btn2 btn-primary\">\n            <x-icon class=\"plus\" />\n            {{ __('entities.whiteboard') }}\n        </a>\n    </div>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-2 xl:flex flex-wrap gap-4 w-full\">\n        @foreach ($models as $whiteboard)\n            <a href=\"{{ route('whiteboards.show', [$campaign, $whiteboard]) }}\" class=\"rounded-xl hover:shadow-md bg-base-100 xl:w-80 overflow-hidden flex flex-col\">\n                <div class=\"bg-base-200 w-full h-40\"></div>\n                <div class=\"flex gap-1 p-4 \">\n                    <div class=\"flex flex-col gap-1\">\n                        <span class=\"whiteboard-name text-md\">\n                            {!! $whiteboard->name !!}\n                        </span>\n                        <span class=\"whiteboard-timestamp text-neutral-content text-xs\" title=\"{{ $whiteboard->created_at }}\">\n                            {{ __('crud.timestamps.edited', ['ago' => $whiteboard->created_at->diffForHumans()]) }}\n                        </span>\n                    </div>\n                </div>\n            </a>\n        @endforeach\n    </div>\n\n    {!! $models->links() !!}\n@endsection\n"
  },
  {
    "path": "resources/views/whiteboards/show.blade.php",
    "content": "@section('entity-header-actions-override')\n    <div class=\"header-buttons flex gap-2 items-center justify-end flex-wrap\">\n        @include('entities.headers.toggle')\n        @include('entities.headers.actions')\n    </div>\n@endsection\n\n<div class=\"entity-grid flex flex-col gap-5\">\n    @include('entities.components.header', [\n        'entityHeaderActions' => 'entity-header-actions-override',\n    ])\n\n    <div class=\"entity-body flex flex-col md:flex-row gap-5\">\n        @include('entities.components.menu_v2', ['active' => 'story'])\n\n        <div class=\"entity-main-block grow flex flex-col gap-5 min-w-0\">\n            <a href=\"{{ route('whiteboards.draw', [$campaign, $entity->child]) }}\" class=\"btn2 btn-block btn-primary draw-link\" target=\"_blank\">\n                <x-icon class=\"fa-duotone fa-chalkboard\" /> {{ __('whiteboards.actions.draw') }}\n            </a>\n\n            @include('entities.components.posts', ['withEntry' => true])\n        </div>\n\n        @include('entities.components.pins')\n    </div>\n</div>\n"
  },
  {
    "path": "routes/api-public.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Api\\Public\\CampaignController;\nuse App\\Http\\Controllers\\Api\\Public\\HallOfFameController;\nuse App\\Http\\Controllers\\Api\\Public\\KbController;\nuse App\\Http\\Controllers\\Api\\Public\\ShowcaseController;\nuse App\\Http\\Controllers\\Api\\Public\\VoteController;\n\nRoute::get('hall-of-fame', [HallOfFameController::class, 'index']);\nRoute::get('campaigns', [CampaignController::class, 'index']);\nRoute::get('showcase', [ShowcaseController::class, 'index']);\nRoute::get('campaigns-setup', [CampaignController::class, 'setup']);\nRoute::get('votes', [VoteController::class, 'index']);\nRoute::get('votes/{community_vote}', [VoteController::class, 'show']);\nRoute::get('kb', [KbController::class, 'index']);\n"
  },
  {
    "path": "routes/api.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| API Routes\n|--------------------------------------------------------------------------\n|\n| Here is where you can register API routes for your application. These\n| routes are loaded by the RouteServiceProvider within a group which\n| is assigned the \"api\" middleware group. Enjoy building your API!\n|\n*/\n\n/*Route::group([\n    'middleware' => ['auth:api', 'throttle:rate_limit,1'],\n    'namespace'  => 'Api\\v1',\n    'prefix'     => 'v1',\n], function() {\n    require base_path('routes/api.v1.php');\n});*/\n\nRoute::group([\n    'middleware' => ['auth:api', 'throttle:rate_limit,1'],\n    'namespace' => 'Api\\v1',\n    'prefix' => '1.0',\n], function () {\n    require base_path('routes/api.v1.php');\n});\n\nRoute::group([\n    'namespace' => 'Api\\Public',\n    'prefix' => 'public',\n], function () {\n    require base_path('routes/api-public.php');\n});\n"
  },
  {
    "path": "routes/api.v1.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Api\\v1\\ApplicationApiController;\nuse App\\Http\\Controllers\\Api\\v1\\CalendarEventApiController;\nuse App\\Http\\Controllers\\Api\\v1\\Calendars\\AdvancerApiController;\nuse App\\Http\\Controllers\\Api\\v1\\Campaigns\\CategoryStatusController;\nuse App\\Http\\Controllers\\Api\\v1\\Campaigns\\UserApiController;\nuse App\\Http\\Controllers\\Api\\v1\\DefaultThumbnailApiController;\nuse App\\Http\\Controllers\\Api\\v1\\Entities\\Attributes\\PatchController;\nuse App\\Http\\Controllers\\Api\\v1\\Entities\\Attributes\\PutController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityArchiveApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityImageApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityMentionApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityMoveApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityPermissionApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityRecoveryApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityTemplateApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityTransformApiController;\nuse App\\Http\\Controllers\\Api\\v1\\EntityTypeApiController;\nuse App\\Http\\Controllers\\Api\\v1\\FamilyTreeApiController;\nuse App\\Http\\Controllers\\Api\\v1\\FilterApiController;\nuse App\\Http\\Controllers\\Api\\v1\\FullTextSearchApiController;\nuse App\\Http\\Controllers\\Api\\v1\\HealthController;\nuse App\\Http\\Controllers\\Api\\v1\\PostLayoutApiController;\nuse App\\Http\\Controllers\\Api\\v1\\PostRecoveryApiController;\nuse App\\Http\\Controllers\\Api\\v1\\ProfileApiController;\nuse App\\Http\\Controllers\\Api\\v1\\RecentEntityApiController;\nuse App\\Http\\Controllers\\Api\\v1\\RelationApiController;\nuse App\\Http\\Controllers\\Api\\v1\\SearchApiController;\nuse App\\Http\\Controllers\\Api\\v1\\VisibilityController;\n\n/*\n|--------------------------------------------------------------------------\n| API Routes\n|--------------------------------------------------------------------------\n|\n| Here is where you can register API routes for your application. These\n| routes are loaded by the RouteServiceProvider within a group which\n| is assigned the \"api\" middleware group. Enjoy building your API!\n|\n*/\n\nRoute::apiResources([\n    'campaigns' => 'CampaignApiController',\n    'campaigns.abilities' => 'AbilityApiController',\n    'campaigns.attribute_templates' => 'AttributeTemplateApiController',\n    'campaigns.bookmarks' => 'BookmarkApiController',\n    // 'campaigns.campaign_users' => 'CampaignUserApiController',\n    'campaigns.calendars' => 'CalendarApiController',\n    'campaigns.calendars.calendar_weather' => 'CalendarWeatherApiController',\n    'campaigns.characters' => 'CharacterApiController',\n    'campaigns.creatures' => 'CreatureApiController',\n    'campaigns.dice_rolls' => 'DiceRollApiController',\n    'campaigns.events' => 'EventApiController',\n    'campaigns.families' => 'FamilyApiController',\n    'campaigns.items' => 'ItemApiController',\n    'campaigns.journals' => 'JournalApiController',\n    'campaigns.locations' => 'LocationApiController',\n    'campaigns.maps' => 'MapApiController',\n    'campaigns.maps.map_layers' => 'MapLayerApiController',\n    'campaigns.maps.map_groups' => 'MapGroupApiController',\n    'campaigns.maps.map_markers' => 'MapMarkerApiController',\n    'campaigns.notes' => 'NoteApiController',\n    'campaigns.organisations' => 'OrganisationApiController',\n    'campaigns.organisations.organisation_members' => 'OrganisationMemberApiController',\n    'campaigns.quests' => 'QuestApiController',\n    'campaigns.quests.quest_elements' => 'QuestElementApiController',\n    'campaigns.races' => 'RaceApiController',\n    'campaigns.tags' => 'TagApiController',\n    'campaigns.timelines' => 'TimelineApiController',\n    'campaigns.timelines.timeline_eras' => 'TimelineEraApiController',\n    'campaigns.timelines.timeline_elements' => 'TimelineElementApiController',\n    'campaigns.conversations' => 'ConversationApiController',\n    'campaigns.conversations.conversation_participants' => 'ConversationParticipantApiController',\n    'campaigns.conversations.conversation_messages' => 'ConversationMessageApiController',\n    // 'campaigns.' => 'ApiController',\n\n    // Entity elements\n    'campaigns.entities.attributes' => 'EntityAttributeApiController',\n    'campaigns.entities.posts' => 'PostApiController',\n    'campaigns.entities.reminders' => 'ReminderApiController',\n    'campaigns.entities.relations' => 'EntityRelationApiController',\n    'campaigns.entities.entity_tags' => 'EntityTagApiController',\n    'campaigns.entities.inventory' => 'EntityInventoryApiController',\n    'campaigns.entities.entity_abilities' => 'EntityAbilityApiController',\n    'campaigns.entities.entity_assets' => 'EntityAssetApiController',\n    'campaigns.entities.entity_permissions' => 'EntityPermissionApiController',\n\n    'campaigns.campaign_dashboard_widgets' => 'CampaignDashboardWidgetApiController',\n    'campaigns.campaign_styles' => 'CampaignStyleApiController',\n\n    'campaigns.images' => 'CampaignImageApiController',\n    'campaigns.entity_types' => 'Campaigns\\EntityTypeApiController',\n]);\n\nRoute::get('campaigns/{campaign}/entities/{entity}/image', [EntityImageApiController::class, 'show']);\nRoute::post('campaigns/{campaign}/entities/{entity}/image', [EntityImageApiController::class, 'put']);\nRoute::delete('campaigns/{campaign}/entities/{entity}/image', [EntityImageApiController::class, 'destroy']);\nRoute::get('campaigns/{campaign}/roles', 'CampaignRoleApiController@index');\n\nRoute::get('campaigns/{campaign}/category_statuses', [CategoryStatusController::class, 'index']);\n\nRoute::get('campaigns/{campaign}/relations', [RelationApiController::class, 'index']);\nRoute::get('campaigns/{campaign}/search/{query}', [SearchApiController::class, 'index']);\n\nRoute::get('campaigns/{campaign}/entities/templates', [EntityTemplateApiController::class, 'index']);\nRoute::post('campaigns/{campaign}/entities/templates/{entity}/switch', [EntityTemplateApiController::class, 'switch']);\n\nRoute::get('campaigns/{campaign}/entities/archived', [EntityArchiveApiController::class, 'index']);\nRoute::post('campaigns/{campaign}/entities/{entity}/archive', [EntityArchiveApiController::class, 'switch']);\n\nRoute::get('campaigns/{campaign}/entities', [EntityApiController::class, 'index']);\nRoute::get('campaigns/{campaign}/entities/recent', [RecentEntityApiController::class, 'index']);\nRoute::post('campaigns/{campaign}/entities/{entity_type}', [EntityApiController::class, 'put']);\nRoute::get('campaigns/{campaign}/entities/{entity}', [EntityApiController::class, 'show']);\nRoute::put('campaigns/{campaign}/entities/{entity}', [EntityApiController::class, 'edit']);\nRoute::patch('campaigns/{campaign}/entities/{entity}', [EntityApiController::class, 'patch']);\nRoute::delete('campaigns/{campaign}/entities/{entity}', [EntityApiController::class, 'destroy']);\nRoute::get('campaigns/{campaign}/entities/{entity}/mentions', [EntityMentionApiController::class, 'index']);\n\nRoute::get('campaigns/{campaign}/users', 'Campaigns\\UserApiController@index');\nRoute::get('campaigns/{campaign}/users/{user}', 'Campaigns\\UserApiController@show');\nRoute::post('campaigns/{campaign}/users', 'Campaigns\\UserApiController@add');\nRoute::delete('campaigns/{campaign}/users', 'Campaigns\\UserApiController@remove');\n\nRoute::get('campaigns/{campaign}/users', [UserApiController::class, 'index']);\nRoute::get('campaigns/{campaign}/users/{user}', [UserApiController::class, 'show']);\nRoute::post('campaigns/{campaign}/users', [UserApiController::class, 'add']);\nRoute::delete('campaigns/{campaign}/users', [UserApiController::class, 'remove']);\n\nRoute::post('campaigns/{campaign}/permissions/test', [EntityPermissionApiController::class, 'test']);\n\nRoute::get('campaigns/{campaign}/calendars/{calendar}/reminders', [CalendarEventApiController::class, 'index']);\nRoute::post('campaigns/{campaign}/calendars/{calendar}/advance', [AdvancerApiController::class, 'advance']);\nRoute::post('campaigns/{campaign}/calendars/{calendar}/retreat', [AdvancerApiController::class, 'retreat']);\n\nRoute::get('visibilities', [VisibilityController::class, 'index']);\nRoute::get('post-layouts', [PostLayoutApiController::class, 'index']);\n\nRoute::get('campaigns/{campaign}/recovery', [EntityRecoveryApiController::class, 'index']);\nRoute::post('campaigns/{campaign}/recover', [EntityRecoveryApiController::class, 'recover']);\n\nRoute::get('campaigns/{campaign}/recovery/posts', [PostRecoveryApiController::class, 'index']);\nRoute::post('campaigns/{campaign}/recover/posts', [PostRecoveryApiController::class, 'recover']);\n\nRoute::post('campaigns/{campaign}/transform', [EntityTransformApiController::class, 'transform']);\n\nRoute::post('campaigns/{campaign}/transfer', [EntityMoveApiController::class, 'transfer']);\n\nRoute::get('campaigns/{campaign}/default-thumbnails', [DefaultThumbnailApiController::class, 'index']);\nRoute::post('campaigns/{campaign}/default-thumbnails', [DefaultThumbnailApiController::class, 'upload']);\nRoute::delete('campaigns/{campaign}/default-thumbnails', [DefaultThumbnailApiController::class, 'delete']);\n\nRoute::get('campaigns/{campaign}/fulltext-search', [FullTextSearchApiController::class, 'index']);\n\nRoute::get('campaigns/{campaign}/families/{family}/tree', [FamilyTreeApiController::class, 'show']);\nRoute::post('campaigns/{campaign}/families/{family}/tree', [FamilyTreeApiController::class, 'store']);\nRoute::put('campaigns/{campaign}/families/{family}/tree', [FamilyTreeApiController::class, 'store']);\nRoute::delete('campaigns/{campaign}/families/{family}/tree', [FamilyTreeApiController::class, 'destroy']);\n\nRoute::get('profile', [ProfileApiController::class, 'index']);\nRoute::get('version', function () {\n    return config('app.version');\n});\n\nRoute::get('health', [HealthController::class, 'index']);\nRoute::get('entity-types', [EntityTypeApiController::class, 'index']);\nRoute::get('filters', [FilterApiController::class, 'index']);\nRoute::get('filters/{entityType}', [FilterApiController::class, 'show']);\n\nRoute::get('campaigns/{campaign}/applications', [ApplicationApiController::class, 'index']);\nRoute::get('campaigns/{campaign}/applications/{application}', [ApplicationApiController::class, 'show']);\nRoute::post('campaigns/{campaign}/applications/{application}/approve', [ApplicationApiController::class, 'approve']);\nRoute::post('campaigns/{campaign}/applications/{application}/reject', [ApplicationApiController::class, 'reject']);\n\n// Bulk entity attributes\nRoute::put('campaigns/{campaign}/entities/{entity}/attributes', [PutController::class, 'put']);\nRoute::patch('campaigns/{campaign}/entities/{entity}/attributes', [PatchController::class, 'patch']);\n"
  },
  {
    "path": "routes/auth.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Auth\\AuthController;\nuse App\\Http\\Controllers\\Auth\\ForgotPasswordController;\nuse App\\Http\\Controllers\\Auth\\LoginController;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Route;\n\nAuth::routes(['register' => config('auth.register_enabled')]);\n\nRoute::post('/logout', [AuthController::class, 'logout'])->name('logout');\nRoute::get('/login-as-user/{user}', [LoginController::class, 'loginAsUser'])->name('login-as-user');\nRoute::get('/login-as', [LoginController::class, 'loginAs'])->name('login-as');\n\n// OAuth Routes\nRoute::get('auth/{provider}', [AuthController::class, 'redirectToProvider'])->name('auth.provider');\n\n// Password Reset Routes...\nRoute::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email');\n\ninclude 'oauth.php';\n/*\nRoute::get('login', 'Auth\\LoginController@showLoginForm')->name('login');\nRoute::post('login', 'Auth\\LoginController@login');\n\nRoute::post('logout', 'Auth\\LoginController@logout')->name('logout');\n\n\n\n// Registration Routes...\nif (config('auth.register_enabled')) {\n    Route::get('register', 'Auth\\LoginController@showRegistrationForm')->name('register');\n    Route::post('register', 'Auth\\LoginController@register');\n}\n\n\n\n// Password Confirmation Routes...\nRoute::get('password/confirm', 'Auth\\ConfirmPasswordController@showConfirmForm')->name('password.confirm');\nRoute::post('password/confirm', 'Auth\\ConfirmPasswordController@confirm');\n\n// Email Verification Routes...\nRoute::get('email/verify', 'Auth\\VerificationController@show')->name('verification.notice');\nRoute::get('email/verify/{id}/{hash}', 'Auth\\VerificationController@verify')->name('verification.verify');\nRoute::post('email/resend', 'Auth\\VerificationController@resend')->name('verification.resend');\n*/\n"
  },
  {
    "path": "routes/campaigns/bulks.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Bulks\\BatchController;\nuse App\\Http\\Controllers\\Bulks\\CopyController;\nuse App\\Http\\Controllers\\Bulks\\DeleteController;\nuse App\\Http\\Controllers\\Bulks\\DeleteRelationController;\nuse App\\Http\\Controllers\\Bulks\\PermissionController;\nuse App\\Http\\Controllers\\Bulks\\PrintController;\nuse App\\Http\\Controllers\\Bulks\\TemplateController;\nuse App\\Http\\Controllers\\Bulks\\TransformController;\n\nRoute::get('/w/{campaign}/bulk/{entity_type}/batch', [BatchController::class, 'index'])->name('bulk.batch');\nRoute::post('/w/{campaign}/bulk/{entity_type}/batch', [BatchController::class, 'apply'])->name('bulk.batch.apply');\n\nRoute::get('/w/{campaign}/bulk/{entity_type}/templates', [TemplateController::class, 'index'])->name('bulk.templates');\nRoute::post('/w/{campaign}/bulk/{entity_type}/templates', [TemplateController::class, 'apply'])->name('bulk.templates.apply');\n\nRoute::get('/w/{campaign}/bulk/{entity_type}/transform', [TransformController::class, 'index'])->name('bulk.transform');\nRoute::post('/w/{campaign}/bulk/{entity_type}/transform', [TransformController::class, 'apply'])->name('bulk.transform.apply');\n\nRoute::get('/w/{campaign}/bulk/{entity_type}/permissions', [PermissionController::class, 'index'])->name('bulk.permissions');\nRoute::post('/w/{campaign}/bulk/{entity_type}/permissions', [PermissionController::class, 'apply'])->name('bulk.permissions.apply');\n\nRoute::get('/w/{campaign}/bulk/{entity_type}/copy-to-campaign', [CopyController::class, 'index'])->name('bulk.copy-to-campaign');\nRoute::post('/w/{campaign}/bulk/{entity_type}/copy-to-campaign', [CopyController::class, 'apply'])->name('bulk.copy-to-campaign.apply');\n\nRoute::get('/w/{campaign}/bulk/{entity_type}/delete', [DeleteController::class, 'index'])->name('bulk.delete');\nRoute::post('/w/{campaign}/bulk/{entity_type}/delete', [DeleteController::class, 'apply'])->name('bulk.delete.apply');\n\nRoute::get('/w/{campaign}/bulk/relations-delete', [DeleteRelationController::class, 'index'])->name('bulk.delete-relations');\nRoute::post('/w/{campaign}/bulk/relations-delete', [DeleteRelationController::class, 'apply'])->name('bulk.delete-relations.apply');\n\nRoute::post('/w/{campaign}/bulk/{entity_type}/print', [PrintController::class, 'index'])->name('bulk.print');\n"
  },
  {
    "path": "routes/campaigns/campaign.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Attributes\\ApiController;\nuse App\\Http\\Controllers\\Bragi\\BragiController;\nuse App\\Http\\Controllers\\Campaign\\CssController;\nuse App\\Http\\Controllers\\Campaign\\EntityTypeController;\nuse App\\Http\\Controllers\\Campaign\\LogController;\nuse App\\Http\\Controllers\\Campaign\\MemberController;\nuse App\\Http\\Controllers\\Campaign\\Members\\RoleController;\nuse App\\Http\\Controllers\\Campaign\\ModuleController;\nuse App\\Http\\Controllers\\Campaign\\Plugins\\BulkController;\nuse App\\Http\\Controllers\\Campaign\\Plugins\\ImportController;\nuse App\\Http\\Controllers\\Campaign\\Plugins\\ToggleController;\nuse App\\Http\\Controllers\\Campaign\\Plugins\\UpdateController;\nuse App\\Http\\Controllers\\Campaign\\ShareController;\nuse App\\Http\\Controllers\\Campaign\\StatController;\nuse App\\Http\\Controllers\\Campaign\\StyleController;\nuse App\\Http\\Controllers\\Campaign\\ThemeBuilderController;\nuse App\\Http\\Controllers\\Campaign\\VanityController;\nuse App\\Http\\Controllers\\Campaign\\WebController;\nuse App\\Http\\Controllers\\Campaign\\WebhookController;\nuse App\\Http\\Controllers\\ConfirmController;\nuse App\\Http\\Controllers\\Crud\\CampaignController;\nuse App\\Http\\Controllers\\DashboardController;\nuse App\\Http\\Controllers\\Dashboards\\GettingStartedController;\nuse App\\Http\\Controllers\\EditingController;\nuse App\\Http\\Controllers\\Gallery\\BrowseController;\nuse App\\Http\\Controllers\\Gallery\\CreateController;\nuse App\\Http\\Controllers\\Gallery\\DeleteController;\nuse App\\Http\\Controllers\\Gallery\\ImageController;\nuse App\\Http\\Controllers\\Gallery\\SearchController;\nuse App\\Http\\Controllers\\Gallery\\SetupController;\nuse App\\Http\\Controllers\\Gallery\\ShowController;\nuse App\\Http\\Controllers\\Gallery\\TiptapController;\nuse App\\Http\\Controllers\\Gallery\\UploadController;\nuse App\\Http\\Controllers\\Gallery\\VisibilityController;\nuse App\\Http\\Controllers\\HistoryController;\nuse App\\Http\\Controllers\\Onboarding\\InitialController;\nuse App\\Http\\Controllers\\PresetController;\nuse App\\Http\\Controllers\\Templates\\LoadController;\nuse App\\Http\\Controllers\\Widgets\\CalendarWidgetController;\nuse App\\Models\\PresetType;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('/w/{campaign}', [DashboardController::class, 'index'])->name('dashboard');\n\nRoute::post('/w/{campaign}/follow', 'Campaign\\FollowController@update')->name('campaign.follow');\n\nRoute::get('/w/{campaign}/apply', 'Campaign\\ApplyController@index')->name('campaign.apply');\nRoute::post('/w/{campaign}/apply', 'Campaign\\ApplyController@save')->name('campaign.apply.save');\nRoute::delete('/w/{campaign}/remove', 'Campaign\\ApplyController@remove')->name('campaign.apply.remove');\n\nRoute::get('/w/{campaign}/gallery', 'GalleryController@index')->name('gallery');\nRoute::get('/w/{campaign}/gallery-index', 'GalleryController@index')->name('campaign.gallery.index');\n\nRoute::post('/w/{campaign}/gallery/ajax-upload', 'Summernote\\GalleryController@upload')->name('campaign.gallery.ajax-upload');\nRoute::get('/w/{campaign}/gallery/ajax-gallery', 'Summernote\\GalleryController@index')->name('campaign.gallery.summernote');\n\nRoute::post('/w/{campaign}/gallery/upload/file', [UploadController::class, 'file'])->name('gallery.upload.file');\nRoute::post('/w/{campaign}/gallery/upload/files', [UploadController::class, 'files'])->name('gallery.upload.files');\nRoute::post('/w/{campaign}/gallery/upload/url', [UploadController::class, 'url'])->name('gallery.upload.url');\nRoute::get('/w/{campaign}/gallery/browse', [BrowseController::class, 'index'])->name('gallery.browse');\n\nRoute::get('/w/{campaign}/gallery/tiptap', [TiptapController::class, 'index'])->name('gallery.tiptap');\nRoute::post('/w/{campaign}/gallery/tiptap', [UploadController::class, 'file'])->name('gallery.tiptap.save');\n\nRoute::get('/w/{campaign}/gallery/setup', [SetupController::class, 'index'])->name('gallery.setup');\nRoute::get('/w/{campaign}/gallery/open/{image}', [ImageController::class, 'show'])->name('gallery.show');\nRoute::get('/w/{campaign}/gallery/search/{term?}', [SearchController::class, 'index'])->name('gallery.search');\nRoute::post('/w/{campaign}/gallery/delete', [DeleteController::class, 'destroy'])->name('gallery.delete');\nRoute::post('/w/{campaign}/gallery/create', [CreateController::class, 'index'])->name('gallery.create');\nRoute::post('/w/{campaign}/gallery/update/bulk', [App\\Http\\Controllers\\Gallery\\UpdateController::class, 'bulk'])->name('gallery.update');\nRoute::get('/w/{campaign}/gallery/{image}', [ShowController::class, 'show'])->name('gallery.file.show');\nRoute::post('/w/{campaign}/gallery/{image}/update', [App\\Http\\Controllers\\Gallery\\UpdateController::class, 'process'])->name('gallery.file.update');\nRoute::delete('/w/{campaign}/gallery/{image}/delete', [DeleteController::class, 'file'])->name('gallery.file.delete');\nRoute::post('/w/{campaign}/gallery/{image}/update-focus', [App\\Http\\Controllers\\Gallery\\UpdateController::class, 'focus'])->name('gallery.file.update-focus');\n\nRoute::get('/w/{campaign}/gallery/{image}/visibility', [VisibilityController::class, 'index'])->name('gallery.file.visibility');\nRoute::patch('/w/{campaign}/gallery/{image}/visibility', [VisibilityController::class, 'save'])->name('gallery.file.visibility-save');\n\n// Campaign\nRoute::get('/w/{campaign}/editing-warning', [EditingController::class, 'index'])->name('campaign.editing-warning');\nRoute::post('/w/{campaign}/editing/confirm-editing', 'EditingController@confirmCampaign')->name('campaigns.confirm-editing');\nRoute::post('/w/{campaign}/editing/keep-alive', 'EditingController@keepAliveCampaign')->name('campaigns.keep-alive');\n\n// Permission save\nRoute::post('/w/{campaign}/campaign_roles/{campaign_role}/savePermissions', 'Campaign\\RoleController@savePermissions')->name('campaign_roles.savePermissions');\nRoute::post('/w/{campaign}/campaign_roles/{campaign_role}/toggle/{entityType}/{action}', 'Campaign\\RoleController@toggle')->name('campaign_roles.toggle');\nRoute::post('/w/{campaign}/campaign_roles/bulk', 'Campaign\\RoleController@bulk')->name('campaign_roles.bulk');\n\n// Impersonator\nRoute::get('/w/{campaign}/members/switch/{campaign_user}', 'Campaign\\MemberController@switch')->name('identity.switch');\nRoute::get('/w/{campaign}/members/back', 'Campaign\\MemberController@back')->name('identity.back');\nRoute::get('/w/{campaign}/members/switch/{campaign_user}/{entity}', 'Campaign\\MemberController@switch')->name('identity.switch-entity');\n\nRoute::get('/w/{campaign}/campaign_users/{campaign_user}/delete', [MemberController::class, 'delete'])->name('campaign_users.delete');\nRoute::get('/w/{campaign}/campaign_user_roles/{campaign_user}', [RoleController::class, 'index'])->name('campaign.members.roles');\nRoute::post('/w/{campaign}/campaign_user_roles/{campaign_user}', [RoleController::class, 'save'])->name('campaign_users.update-roles');\n\n// Recovery\nRoute::get('/w/{campaign}/recovery', 'Campaign\\RecoveryController@index')->name('recovery');\nRoute::post('/w/{campaign}/recovery', 'Campaign\\RecoveryController@recover')->name('recovery.save');\nRoute::get('/w/{campaign}/recovery-setup', 'Campaign\\RecoveryController@setup')->name('recovery.setup');\n\n// Stats\nRoute::get('/w/{campaign}/achievements', 'Campaign\\AchievementController@index')->name('campaign.achievements');\n\n// User search\nRoute::get('/w/{campaign}/users/search', 'Campaign\\UserController@search')->name('users.find');\nRoute::get('/w/{campaign}/roles/search', 'Campaign\\RoleController@search')->name('roles.find');\n\nRoute::get('/w/{campaign}/placeholder-images', 'Campaign\\DefaultImageController@index')\n    ->name('campaign.default-images');\nRoute::get('/w/{campaign}/placeholder-images/create', 'Campaign\\DefaultImageController@create')\n    ->name('campaign.default-images.create');\nRoute::post('/w/{campaign}/placeholder-images/create', 'Campaign\\DefaultImageController@store')\n    ->name('campaign.default-images.store');\nRoute::delete('/w/{campaign}/placeholder-images', 'Campaign\\DefaultImageController@destroy')\n    ->name('campaign.default-images.delete');\nRoute::delete('/w/{campaign}/placeholder-images/reset', 'Campaign\\DefaultImageController@reset')\n    ->name('campaign.default-images.reset');\n\nRoute::resources([\n    '/w/{campaign}/campaign_users' => 'Campaign\\UserController',\n    '/w/{campaign}/applications' => 'Campaign\\ApplicationController',\n\n    // Permission manager\n    '/w/{campaign}/campaign_roles' => 'Campaign\\RoleController',\n    '/w/{campaign}/campaign_roles.campaign_role_users' => 'Campaign\\RoleUserController',\n    '/w/{campaign}/campaign_styles' => 'Campaign\\StyleController',\n    '/w/{campaign}/campaign_invites' => 'Campaign\\InviteController',\n\n    '/w/{campaign}/campaign_dashboards' => 'Campaign\\DashboardController',\n    '/w/{campaign}/campaign_dashboard_widgets' => 'Campaign\\DashboardWidgetController',\n\n    '/w/{campaign}/preset_types.presets' => 'PresetController',\n\n    '/w/{campaign}/webhooks' => 'Campaign\\WebhookController',\n    '/w/{campaign}/entity_types' => 'Campaign\\EntityTypeController',\n]);\nRoute::get('/w/{campaign}/leave', 'Campaign\\LeaveController@index')->name('campaign.leave');\nRoute::post('/w/{campaign}/leave-for-real', 'Campaign\\LeaveController@process')->name('campaign.leave-process');\n\n// Campaign CRUD\nRoute::get('/w/{campaign}/edit', [CampaignController::class, 'edit'])->name('campaigns.edit');\nRoute::patch('/w/{campaign}/update', [CampaignController::class, 'update'])->name('campaigns.update');\n\nRoute::post('/w/{campaign}/campaign_styles/bulk', 'Campaign\\StyleController@bulk')->name('campaign_styles.bulk');\nRoute::get('/w/{campaign}/campaign_styles/{campaign_style}/toggle', [StyleController::class, 'toggle'])->name('campaign_styles.toggle');\nRoute::post('/w/{campaign}/campaign_styles/reorder', 'Campaign\\StyleController@reorder')->name('campaign_styles.reorder-save');\nRoute::get('/w/{campaign}/theme-builder', [ThemeBuilderController::class, 'index'])->name('campaign_styles.builder');\nRoute::post('/w/{campaign}/theme-builder', [ThemeBuilderController::class, 'save'])->name('campaign_styles.builder-save');\nRoute::delete('/w/{campaign}/theme-builder', [ThemeBuilderController::class, 'reset'])->name('campaign_styles.builder-reset');\n\nRoute::get('/w/{campaign}/dashboard-header/{campaignDashboardWidget?}', 'Campaign\\DashboardHeaderController@edit')->name('campaigns.dashboard-header.edit');\nRoute::patch('/w/{campaign}/dashboard-header', 'Campaign\\DashboardHeaderController@update')->name('campaigns.dashboard-header.update');\n\n// Helper links\nRoute::get('/w/{campaign}/campaign-roles/admin', 'Campaign\\RoleController@admin')->name('campaigns.campaign_roles.admin');\nRoute::get('/w/{campaign}/campaign-roles/public', 'Campaign\\RoleController@public')->name('campaigns.campaign_roles.public');\nRoute::get('/w/{campaign}/campaign-roles/{campaign_role}/duplicate', 'Campaign\\RoleController@duplicate')->name('campaign_roles.duplicate');\n\n// Marketplace plugin route\nif (config('marketplace.enabled')) {\n    Route::get('/w/{campaign}/plugins', 'Campaign\\PluginController@index')->name('campaign_plugins.index');\n    Route::delete('/w/{campaign}/plugins/{plugin}/delete', 'Campaign\\PluginController@delete')->name('campaign_plugins.destroy');\n    Route::get('/w/{campaign}/plugins/{plugin}/enable', [ToggleController::class, 'enable'])->name('campaign_plugins.enable');\n    Route::get('/w/{campaign}/plugins/{plugin}/disable', [ToggleController::class, 'disable'])->name('campaign_plugins.disable');\n\n    Route::get('/w/{campaign}/plugins/{plugin}/confirm-import', [ImportController::class, 'index'])->name('campaign_plugins.confirm-import');\n    Route::post('/w/{campaign}/plugins/{plugin}/import', [ImportController::class, 'process'])->name('campaign_plugins.import');\n\n    Route::get('/w/{campaign}/plugins/{plugin}/update', [UpdateController::class, 'index'])->name('campaign_plugins.update-info');\n    Route::post('/w/{campaign}/plugins/{plugin}/update', [UpdateController::class, 'update'])->name('campaign_plugins.update');\n\n    Route::post('/w/{campaign}/plugins/bulk', [BulkController::class, 'index'])->name('campaign_plugins.bulk');\n}\n\n// Campaign Dashboard Widgets\nRoute::get('/w/{campaign}/dashboard-setup', [App\\Http\\Controllers\\Dashboards\\SetupController::class, 'index'])->name('dashboard.setup');\nRoute::post('/w/{campaign}/dashboard-setup/reorder', [App\\Http\\Controllers\\Dashboards\\SetupController::class, 'save'])->name('dashboard.reorder');\nRoute::get('/w/{campaign}/dashboard/widgets/recent/{id}', 'DashboardController@recent')->name('dashboard.recent');\nRoute::get('/w/{campaign}/dashboard/widgets/unmentioned/{id}', 'DashboardController@unmentioned')->name('dashboard.unmentioned');\nRoute::post('/w/{campaign}/dashboard/widgets/calendar/{campaignDashboardWidget}/add', [CalendarWidgetController::class, 'add'])->name('dashboard.calendar.add');\nRoute::post('/w/{campaign}/dashboard/widgets/calendar/{campaignDashboardWidget}/sub', [CalendarWidgetController::class, 'sub'])->name('dashboard.calendar.sub');\nRoute::get('/w/{campaign}/dashboard/widgets/{campaignDashboardWidget}/render', [CalendarWidgetController::class, 'render'])->name('dashboard.calendar.render');\n\n// The campaign management subpages\nRoute::get('/w/{campaign}/overview', 'Crud\\CampaignController@show')->name('overview');\nRoute::get('/w/{campaign}/modules', 'Campaign\\ModuleController@index')->name('campaign.modules');\nRoute::post('/w/{campaign}/modules/toggle/{entity_type}', [ModuleController::class, 'toggle'])->name('campaign.modules.toggle');\nRoute::post('/w/{campaign}/features/toggle/{module}', [ModuleController::class, 'toggleFeature'])->name('campaign.features.toggle');\n\n// Route::get('/w/{campaign}/entity_types/create', [\\App\\Http\\Controllers\\Campaign\\EntityTypeController::class, 'create'])->name('campaign.entity_types.create');\n// Route::post('/w/{campaign}/entity_types/create', [\\App\\Http\\Controllers\\Campaign\\EntityTypeController::class, 'store'])->name('campaign.entity_types.store');\n//\n// Route::get('/w/{campaign}/entity_types/{entity_type}/edit', [\\App\\Http\\Controllers\\Campaign\\EntityTypeController::class, 'edit'])->name('campaign.entity_types.edit');\n// Route::patch('/w/{campaign}/entity_types/{entity_type}/update', [\\App\\Http\\Controllers\\Campaign\\EntityTypeController::class, 'update'])->name('campaign.entity_types.update');\nRoute::post('/w/{campaign}/entity_types/{entity_type}/toggle', [EntityTypeController::class, 'toggle'])->name('entity_types.toggle');\n// Route::delete('/w/{campaign}/entity_types/{entity_type}/delete', [\\App\\Http\\Controllers\\Campaign\\EntityTypeController::class, 'delete'])->name('campaign.entity_types.destroy');\nRoute::get('/w/{campaign}/entity_types/{entity_type}/confirm', [EntityTypeController::class, 'confirm'])->name('entity_types.confirm');\n\nRoute::get('/w/{campaign}/campaign-theme', 'Campaign\\StyleController@theme')->name('campaign-theme');\nRoute::post('/w/{campaign}/campaign-theme', 'Campaign\\StyleController@themeSave')->name('campaign-theme.save');\nRoute::get('/w/{campaign}/campaign-export', 'Campaign\\ExportController@index')->name('campaign.export');\nRoute::post('/w/{campaign}/campaign-export', 'Campaign\\ExportController@export')->name('campaign.export-process');\nRoute::get('/w/{campaign}/campaign-import', 'Campaign\\ImportController@index')->name('campaign.import');\nRoute::post('/w/{campaign}/campaign-import', 'Campaign\\ImportController@store')->name('campaign.import-process');\nRoute::get('/w/{campaign}/campaign-import/{campaign_import}/csv', 'Campaign\\ImportController@csv')->name('campaign.import.csv');\nRoute::get('/w/{campaign}/campaign-{ts}.styles', [CssController::class, 'index'])->name('campaign.css');\nRoute::get('/w/{campaign}/campaign_plugin-{ts}.styles', 'Campaign\\Plugins\\CssController@index')->name('campaign_plugins.css');\nRoute::get('/w/{campaign}/campaign-visibility', 'Campaign\\VisibilityController@edit')->name('campaign-visibility');\nRoute::post('/w/{campaign}/campaign-visibility', 'Campaign\\VisibilityController@save')->name('campaign-visibility.save');\n\nRoute::get('/w/{campaign}/share', [ShareController::class, 'setup'])->name('campaign.share.setup');\nRoute::post('/w/{campaign}/share', [ShareController::class, 'save'])->name('campaign.share.save');\n\nRoute::get('/w/{campaign}/modules/{entity_type}/edit', [ModuleController::class, 'edit'])->name('modules.edit');\nRoute::patch('/w/{campaign}/modules/{entity_type}/update', [ModuleController::class, 'update'])->name('modules.update');\nRoute::delete('/w/{campaign}/modules/reset', [ModuleController::class, 'reset'])->name('modules.reset');\n\nRoute::get('/w/{campaign}/campaign-applications', 'Campaign\\ApplicationController@toggle')->name('campaign-applications');\nRoute::get('/w/{campaign}/campaign-applications/setup', 'Campaign\\ApplicationSetupController@setup')->name('campaign-applications.setup');\nRoute::post('/w/{campaign}/campaign-applications/setup', 'Campaign\\ApplicationSetupController@saveSetup')->name('campaign-applications.setup.save');\nRoute::get('/w/{campaign}/campaign-applications/dashboard-widget', 'Campaign\\ApplicationDashboardController@index')->name('campaign-applications.dashboard-widget');\nRoute::post('/w/{campaign}/campaign-applications/dashboard-widget', 'Campaign\\ApplicationDashboardController@store')->name('campaign-applications.dashboard-widget.store');\nRoute::post('/w/{campaign}/campaign-applications', 'Campaign\\ApplicationController@toggleSave')->name('campaign-applications.save');\n\n// Campaign sidebar setup\nRoute::get('/w/{campaign}/sidebar-setup', 'Campaign\\SidebarController@index')->name('campaign-sidebar');\nRoute::post('/w/{campaign}/sidebar-setup', 'Campaign\\SidebarController@save')->name('campaign-sidebar-save');\nRoute::delete('/w/{campaign}/sidebar-setup/reset', 'Campaign\\SidebarController@reset')->name('campaign-sidebar-reset');\n\nRoute::get('/w/{campaign}/campaign-defaults', 'Campaign\\DefaultsController@index')->name('campaign-defaults');\nRoute::post('/w/{campaign}/campaign-defaults', 'Campaign\\DefaultsController@save')->name('campaign-defaults-save');\n\nRoute::get('/w/{campaign}/presets/type/{preset_type}/list', [PresetController::class, 'presets'])->name('presets.list');\nRoute::get('/w/{campaign}/presets/type/{preset_type}/create', [PresetController::class, 'create'])->name('presets.create');\nRoute::post('/w/{campaign}/presets/type/{preset_type}/store', [PresetController::class, 'store'])->name('presets.store');\nRoute::post('/w/{campaign}/presets/{preset}/load', [PresetController::class, 'load'])->name('presets.show');\n\nRoute::model('preset_type', PresetType::class);\n\nRoute::get('/w/{campaign}/history', [HistoryController::class, 'index'])->name('history.index');\n\nRoute::get('/w/{campaign}/bragi', [BragiController::class, 'index'])->name('bragi');\nRoute::post('/w/{campaign}/bragi', [BragiController::class, 'generate'])->name('bragi.generate');\n\nRoute::get('/w/{campaign}/confirm-delete', [ConfirmController::class, 'index'])->name('confirm-delete');\nRoute::post('/w/{campaign}/vanity-validate', [VanityController::class, 'index'])->name('campaign.vanity-validate');\n\n// Permission save\nRoute::get('/w/{campaign}/webhooks/{webhook}/toggle', [WebhookController::class, 'toggle'])->name('webhooks.toggle');\nRoute::get('/w/{campaign}/webhooks/{webhook}/status', [WebhookController::class, 'status'])->name('webhooks.status');\nRoute::post('/w/{campaign}/webhooks/bulk', [WebhookController::class, 'bulk'])->name('webhooks.bulk');\nRoute::get('/w/{campaign}/webhooks/{webhook}/test', [WebhookController::class, 'test'])->name('webhooks.test');\n\nRoute::get('/w/{campaign}/attributes/api/type/{entity_type}', [ApiController::class, 'index'])->name('attributes.api');\nRoute::get('/w/{campaign}/attributes/api/entity/{entity}', [ApiController::class, 'entity'])->name('attributes.api-entity');\n\nRoute::get('/w/{campaign}/templates/load', [LoadController::class, 'index'])->name('templates.load-attributes');\n\nRoute::get('/w/{campaign}/deletion', [App\\Http\\Controllers\\Campaign\\DeleteController::class, 'show'])->name('campaign.delete');\nRoute::delete('/w/{campaign}/destroy', [App\\Http\\Controllers\\Campaign\\DeleteController::class, 'destroy'])->name('campaigns.destroy');\n\nRoute::get('/w/{campaign}/sidebar/image', [App\\Http\\Controllers\\Campaign\\ImageController::class, 'index'])->name('campaign.sidebar.image');\nRoute::post('/w/{campaign}/sidebar/image', [App\\Http\\Controllers\\Campaign\\ImageController::class, 'save'])->name('campaign.sidebar.image-save');\n\nRoute::get('/w/{campaign}/stats', [StatController::class, 'index'])->name('campaign.stats');\n\nRoute::get('/w/{campaign}/logs', [LogController::class, 'index'])->name('campaign.logs');\n\nRoute::post('/w/{campaign}/onboarding/initial', [\n    InitialController::class, 'save',\n])->name('campaign.onboarding.initial');\nRoute::post('/w/{campaign}/onboarding/initial-skip', [\n    InitialController::class, 'skip',\n])->name('campaign.onboarding.initial-skip');\n\nRoute::get('/w/{campaign}/widgets/getting-started', [\n    GettingStartedController::class, 'index',\n])->name('campaign.widgets.getting-started');\n\nRoute::get('/w/{campaign}/connections/web', [WebController::class, 'index'])->name('connections.web');\nRoute::get('/w/{campaign}/connections/web/api', [WebController::class, 'api'])->name('connections.web.api');\n"
  },
  {
    "path": "routes/campaigns/entities.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Bookmarks\\ReorderController;\nuse App\\Http\\Controllers\\Calendars\\EventController;\nuse App\\Http\\Controllers\\Characters\\MemberController;\nuse App\\Http\\Controllers\\DiceRolls\\ResultsController;\nuse App\\Http\\Controllers\\Entities\\Apis\\DocumentController;\nuse App\\Http\\Controllers\\Entities\\ChildrenController;\nuse App\\Http\\Controllers\\Entities\\CreateController;\nuse App\\Http\\Controllers\\Entities\\DeleteController;\nuse App\\Http\\Controllers\\Entities\\EditController;\nuse App\\Http\\Controllers\\Entities\\IndexController;\nuse App\\Http\\Controllers\\Entities\\ListingPreferenceController;\nuse App\\Http\\Controllers\\Entity\\AttributeController;\nuse App\\Http\\Controllers\\Entity\\Attributes\\LiveApiController;\nuse App\\Http\\Controllers\\Entity\\Attributes\\LiveController;\nuse App\\Http\\Controllers\\Entity\\EntryController;\nuse App\\Http\\Controllers\\Entity\\ImageController;\nuse App\\Http\\Controllers\\Entity\\Posts\\LayoutController;\nuse App\\Http\\Controllers\\Entity\\Posts\\VisibilityController;\nuse App\\Http\\Controllers\\Entity\\PrivacyController;\nuse App\\Http\\Controllers\\Entity\\ShowController;\nuse App\\Http\\Controllers\\Entity\\StoryController;\nuse App\\Http\\Controllers\\EntityCreatorController;\nuse App\\Http\\Controllers\\Families\\TreeController;\nuse App\\Http\\Controllers\\Filters\\FormController;\nuse App\\Http\\Controllers\\Filters\\SaveController;\nuse App\\Http\\Controllers\\Timelines\\TimelineReorderController;\nuse App\\Http\\Controllers\\Whiteboards\\ApiController;\nuse App\\Http\\Controllers\\Whiteboards\\DrawController;\nuse App\\Models\\Attribute;\nuse App\\Models\\Campaign;\nuse App\\Models\\EntityType;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('/w/{campaign}/entities/{entity}', [ShowController::class, 'index'])->name('entities.show')->where(['entity' => '[0-9]+']);\n\nRoute::get('/w/{campaign}/entities/{entity}-{slug}', [ShowController::class, 'index'])->name('entities.show-slug');\n\nRoute::get('/w/{campaign}/t/{entityType}', [IndexController::class, 'index'])->name('entities.index');\nRoute::get('/w/{campaign}/t/{entityType}/api', [IndexController::class, 'api'])->name('entities.index-api');\nRoute::patch('/w/{campaign}/t/{entityType}/preferences', [ListingPreferenceController::class, 'update'])\n    ->name('entities.listing-preferences.update');\nRoute::delete('/w/{campaign}/t/{entityType}/preferences', [ListingPreferenceController::class, 'destroy'])\n    ->name('entities.listing-preferences.destroy');\nRoute::get('/w/{campaign}/t/{entityType}/create', [CreateController::class, 'index'])->name('entities.create');\nRoute::post('/w/{campaign}/t/{entity_type}/create', [CreateController::class, 'store'])->name('entities.store');\n\nRoute::get('/w/{campaign}/entities/{entity}/edit', [EditController::class, 'index'])->name('entities.edit');\nRoute::patch('/w/{campaign}/entities/{entity}/save', [EditController::class, 'save'])->name('entities.update');\nRoute::delete('/w/{campaign}/entities/{entity}/delete', [DeleteController::class, 'index'])->name('entities.destroy');\n\nRoute::get('/w/{campaign}/entities/{entity}/children', [ChildrenController::class, 'index'])->name('entities.children');\n\n// Abilities\nRoute::get('/w/{campaign}/abilities/{ability}/abilities', 'Abilities\\AbilityController@index')->name('abilities.abilities');\nRoute::get('/w/{campaign}/abilities/{ability}/entities', 'Abilities\\EntityController@index')->name('abilities.entities');\n\nRoute::get('/w/{campaign}/abilities/{ability}/entity-add', 'Abilities\\EntityController@create')->name('abilities.entity-add');\nRoute::post('/w/{campaign}/abilities/{ability}/entity-add', 'Abilities\\EntityController@store')->name('abilities.entity-add.save');\n\n// Ability reorder\nRoute::get('/w/{campaign}/entities/{entity}/entity_abilities/reorder', [App\\Http\\Controllers\\Entity\\Abilities\\ReorderController::class, 'index'])\n    ->name('entities.entity_abilities.reorder');\nRoute::post('/w/{campaign}/entities/{entity}/entity_abilities/reorder', [App\\Http\\Controllers\\Entity\\Abilities\\ReorderController::class, 'save'])\n    ->name('entities.entity_abilities.reorder-save');\n\n// Maps\nRoute::get('/w/{campaign}/maps/{map}/maps', 'Maps\\MapController@index')->name('maps.maps');\nRoute::get('/w/{campaign}/maps/{map}/explore', 'Maps\\ExploreController@index')->name('maps.explore');\nRoute::get('/w/{campaign}/maps/{map}/chunks/', 'Maps\\ExploreController@chunks')->name('maps.chunks');\nRoute::get('/w/{campaign}/maps/{map}/ticker', 'Maps\\ExploreController@ticker')->name('maps.ticker');\nRoute::get('/w/{campaign}/maps/{map}/preview', 'Maps\\PreviewController@index')->name('maps.preview');\nRoute::get('/w/{campaign}/maps/{map}/{map_marker}/details', 'Maps\\Markers\\DetailController@index')->name('maps.markers.details');\nRoute::post('/w/{campaign}/maps/{map}/{map_marker}/move', 'Maps\\Markers\\MoveController@index')->name('maps.markers.move');\nRoute::post('/w/{campaign}/maps/{map}/groups/bulk', 'Maps\\Bulks\\GroupController@index')->name('maps.groups.bulk');\nRoute::post('/w/{campaign}/maps/{map}/groups/reorder', 'Maps\\Reorders\\GroupController@index')->name('maps.groups.reorder-save');\n\nRoute::post('/w/{campaign}/maps/{map}/layers/bulk', 'Maps\\Bulks\\LayerController@index')->name('maps.layers.bulk');\nRoute::post('/w/{campaign}/maps/{map}/layers/reorder', 'Maps\\Reorders\\LayerController@index')->name('maps.layers.reorder-save');\nRoute::post('/w/{campaign}/maps/{map}/layers/{map_layer}/migrate', 'Maps\\Layers\\MigrateController@index')->name('maps.layers.migrate');\n\nRoute::post('/w/{campaign}/maps/{map}/markers/bulk', 'Maps\\Bulks\\MarkerController@index')->name('maps.markers.bulk');\n\n// Character\nRoute::get('/w/{campaign}/characters/{character}/organisations', [MemberController::class, 'index'])->name('characters.organisations');\nRoute::get('/w/{campaign}/characters/{character}/races/management', 'Characters\\Races\\ManagementController@index')->name('characters.races.management');\nRoute::post('/w/{campaign}/characters/{character}/races/save', 'Characters\\Races\\ManagementController@save')->name('characters.races.save');\nRoute::get('/w/{campaign}/characters/{character}/families/management', 'Characters\\Families\\ManagementController@index')->name('characters.families.management');\nRoute::post('/w/{campaign}/characters/{character}/families/save', 'Characters\\Families\\ManagementController@save')->name('characters.families.save');\n\nRoute::get('/w/{campaign}/dice_rolls/{dice_roll}/roll', 'Crud\\DiceRollController@roll')->name('dice_rolls.roll');\nRoute::delete('/w/{campaign}/dice_rolls/{dice_roll}/roll/{dice_roll_result}/destroy', 'Crud\\DiceRollController@destroyRoll')->name('dice_rolls.destroy_roll');\nRoute::get('/w/{campaign}/dice_rolls/results', [ResultsController::class, 'index'])->name('dice_rolls.results');\n\n// Locations\nRoute::get('/w/{campaign}/locations/{location}/characters', 'Locations\\CharacterController@index')->name('locations.characters');\nRoute::get('/w/{campaign}/locations/{location}/locations', 'Locations\\LocationController@index')->name('locations.locations');\nRoute::get('/w/{campaign}/locations/{location}/events', 'Locations\\EventController@index')->name('locations.events');\nRoute::get('/w/{campaign}/locations/{location}/quests', 'Locations\\QuestController@index')->name('locations.quests');\n\n// Organisation menu\nRoute::get('/w/{campaign}/organisations/{organisation}/members', 'Organisation\\MemberController@index')->name('organisations.members');\nRoute::get('/w/{campaign}/organisations/{organisation}/organisations', 'Organisation\\OrganisationController@organisations')->name('organisations.organisations');\n\n// Families menu\nRoute::get('/w/{campaign}/families/{family}/members', 'Families\\MemberController@index')->name('families.members');\nRoute::get('/w/{campaign}/families/{family}/families', 'Families\\FamilyController@index')->name('families.families');\nRoute::get('/w/{campaign}/families/{family}/tree', [TreeController::class, 'index'])->name('families.family-tree');\nRoute::get('/w/{campaign}/families/{family}/tree/api', [App\\Http\\Controllers\\Families\\Trees\\ApiController::class, 'index'])->name('families.family-tree.api');\nRoute::get('/w/{campaign}/families/{entity}/tree/entity-api', [App\\Http\\Controllers\\Families\\Trees\\ApiController::class, 'entity'])->name('families.family-tree.entity-api');\nRoute::post('/w/{campaign}/families/{family}/tree/api', [App\\Http\\Controllers\\Families\\Trees\\ApiController::class, 'save'])->name('families.family-tree.api-save');\n\nRoute::post('/w/{campaign}/families/{family}/store-member', 'Families\\MemberController@store')->name('families.members.store');\nRoute::get('/w/{campaign}/families/{family}/add-member', 'Families\\MemberController@create')->name('families.members.create');\n\n// Items menu\nRoute::get('/w/{campaign}/items/{item}/inventories', 'Items\\EntityController@index')->name('items.inventories');\nRoute::get('/w/{campaign}/items/{item}/items', 'Items\\ItemController@index')->name('items.items');\n\n// Quest menus\nRoute::get('/w/{campaign}/quests/{quest}/quests', 'Quests\\QuestController@index')->name('quests.quests');\n\n// Notes menus\nRoute::get('/w/{campaign}/notes/{note}/notes', 'Notes\\NoteController@index')->name('notes.notes');\n\n// Races\nRoute::get('/w/{campaign}/races/{race}/characters', 'Races\\MemberController@index')->name('races.characters');\nRoute::get('/w/{campaign}/races/{race}/races', 'Races\\RaceController@index')->name('races.races');\nRoute::get('/w/{campaign}/races/{race}/member', 'Races\\MemberController@create')->name('races.members.create');\nRoute::post('/w/{campaign}/races/{race}/member', 'Races\\MemberController@store')->name('races.members.store');\n\n// Creatures\nRoute::get('/w/{campaign}/creatures/{creature}/creatures', 'Creatures\\CreatureController@index')->name('creatures.creatures');\n\n// Journal\nRoute::get('/w/{campaign}/journals/{journal}/journals', 'Journals\\JournalController@index')->name('journals.journals');\n\nRoute::get('/w/{campaign}/events/{event}/events', 'Events\\EventController@index')->name('events.events');\n\nRoute::get('/w/{campaign}/timelines/{timeline}/timelines', 'Timelines\\TimelineController@index')->name('timelines.timelines');\n\n// Tag menus\nRoute::get('/w/{campaign}/tags/{tag}/tags', 'Tags\\TagController@index')->name('tags.tags');\nRoute::get('/w/{campaign}/tags/{tag}/transfer', 'Tags\\TransferController@index')->name('tags.transfer');\nRoute::get('/w/{campaign}/tags/{tag}/transfer-posts', 'Tags\\TransferController@postIndex')->name('tags.transfer.posts');\nRoute::post('/w/{campaign}/tags/{tag}/transfer', 'Tags\\TransferController@process')->name('tags.transfer-process');\nRoute::post('/w/{campaign}/tags/{tag}/transfer-posts', 'Tags\\TransferController@processPosts')->name('tags.transfer.posts-process');\n\n// Tags Quick Add\nRoute::get('/w/{campaign}/tags/{tag}/children', 'Tags\\ChildController@index')->name('tags.children');\nRoute::get('/w/{campaign}/tags/{tag}/posts', 'Tags\\PostController@index')->name('tags.posts');\nRoute::get('/w/{campaign}/tags/{tag}/entity-add', 'Tags\\ChildController@create')->name('tags.entity-add');\nRoute::post('/w/{campaign}/tags/{tag}/entity-add', 'Tags\\ChildController@store')->name('tags.entity-add.save');\n\nRoute::get('/w/{campaign}/entities/{entity}/tags/add', 'Entity\\TagController@create')->name('entity.tags-add');\nRoute::post('/w/{campaign}/entities/{entity}/tags/add', 'Entity\\TagController@store')->name('entity.tags-add.save');\n\n// Multi-delete for cruds\nRoute::post('/w/{campaign}/bulk/process', 'BulkController@index')->name('bulk.process');\nRoute::get('/w/{campaign}/bulk/modal', 'BulkController@modal')->name('bulk.modal');\n\n// Calendar\nRoute::get('/w/{campaign}/calendars/{calendar}/event', 'Calendars\\EventController@create')->name('calendars.event.create');\nRoute::post('/w/{campaign}/calendars/{calendar}/event', 'Calendars\\EventController@store')->name('calendars.event.store');\nRoute::get('/w/{campaign}/calendars/{calendar}/month-list', 'Crud\\CalendarController@monthList')->name('calendars.month-list');\nRoute::get('/w/{campaign}/calendars/{calendar}/events', 'Calendars\\EventController@index')->name('calendars.events');\nRoute::get('/w/{campaign}/calendars/{calendar}/today', 'Crud\\CalendarController@today')->name('calendars.today');\nRoute::get('/w/{campaign}/calendars/{calendar}/validate-length', [EventController::class, 'eventLength'])->name('calendars.event-length');\n\nRoute::post('/w/{campaign}/calendars/{calendar}/calendar-events/bulk', 'Calendars\\Bulks\\EntityEventController@index')->name('calendars.entity-events.bulk');\n\n//        Route::get('/w/{campaign}/calendars/{calendar}/weather', 'Calendar\\CalendarWeatherController@form')->name('calendars.weather.create');\n//        Route::post('/w/{campaign}/calendars/{calendar}/weather', 'Calendar\\CalendarWeatherController@store')->name('calendars.weather.store');\n\n// Attribute multi-save\nRoute::get('/w/{campaign}/entities/{entity}/attributes', [AttributeController::class, 'index'])->name('entities.attributes');\nRoute::get('/w/{campaign}/entities/{entity}/attributes-dashboard', [AttributeController::class, 'dashboard'])->name('entities.attributes-dashboard');\nRoute::get('/w/{campaign}/entities/{entity}/attributes/edit', [AttributeController::class, 'edit'])->name('entities.attributes.edit');\nRoute::post('/w/{campaign}/entities/{entity}/attributes/save', [AttributeController::class, 'save'])->name('entities.attributes.save');\nRoute::get('/w/{campaign}/entities/{entity}/attributes/live-edit/', [AttributeController::class, 'liveEdit'])\n    ->name('entities.attributes.live.edit');\nRoute::get('/w/{campaign}/entities/{entity}/attributes/live-edit/{attribute}', [LiveController::class, 'index'])\n    ->name('entities.attributes.live.edit2');\nRoute::post('/w/{campaign}/entities/{entity}/attributes/live-edit/{attribute}/save', [LiveController::class, 'save'])\n    ->name('entities.attributes.live.save');\n\nRoute::get('/w/{campaign}/entities/{entity}/attributes/live-api', [LiveApiController::class, 'index'])\n    ->name('entities.attributes.live-api.index');\nRoute::post('/w/{campaign}/entities/{entity}/attributes/live-api', [LiveApiController::class, 'store'])\n    ->name('entities.attributes.live-api.create');\nRoute::post('/w/{campaign}/entities/{entity}/attributes/live-api/{attribute}', [LiveApiController::class, 'update'])\n    ->name('entities.attributes.live-api.update');\nRoute::post('/w/{campaign}/entities/{entity}/attributes/live-api/{attribute}/delete', [LiveApiController::class, 'destroy'])\n    ->name('entities.attributes.live-api.delete');\n\nRoute::model('attribute', Attribute::class);\n\nRoute::get('/w/{campaign}/entities/{entity}/story-reorder', [StoryController::class, 'edit'])->name('entities.story.reorder');\nRoute::post('/w/{campaign}/entities/{entity}/story-reorder', [StoryController::class, 'save'])->name('entities.story.reorder-save');\nRoute::get('/w/{campaign}/entities/{entity}/story-more', [StoryController::class, 'more'])->name('entities.story.load-more');\n\n// Image of entities\nRoute::get('/w/{campaign}/entities/{entity}/image-focus', [ImageController::class, 'focus'])->name('entities.image.focus');\nRoute::post('/w/{campaign}/entities/{entity}/image-focus', [ImageController::class, 'saveFocus'])->name('entities.image.save-focus');\n\nRoute::get('/w/{campaign}/entities/{entity}/image-replace', [ImageController::class, 'replace'])->name('entities.image.replace');\nRoute::post('/w/{campaign}/entities/{entity}/image-replace', [ImageController::class, 'update'])->name('entities.image.replace.save');\n\n// Quick privacy toggle\nRoute::get('/w/{campaign}/entities/{entity}/privacy', [PrivacyController::class, 'index'])->name('entities.quick-privacy');\nRoute::post('/w/{campaign}/entities/{entity}/privacy', [PrivacyController::class, 'toggle'])->name('entities.quick-privacy.toggle');\n// Route::post('/w/{campaign}/entities/{entity}/toggle-privacy', [\\App\\Http\\Controllers\\Entity\\PrivacyController::class, 'toggle'])->name('entities.privacy.toggle');\n\n// Entity update entry\nRoute::get('/w/{campaign}/entities/{entity}/entry', [EntryController::class, 'edit'])->name('entities.entry.edit');\nRoute::patch('w/{campaign}/entities/{entity}/entry', [EntryController::class, 'update'])->name('entities.entry.update');\n\nRoute::get('/w/{campaign}/entities/{entity}/connection/map', 'Entity\\Connections\\MapController@index')->name('entities.relations_map');\nRoute::get('/w/{campaign}/entities/{entity}/connection/table', 'Entity\\Connections\\TableController@index')->name('entities.relations_table');\n\n// Entity\nRoute::post('/w/{campaign}/entities/{entity}/confirm-editing', 'EditingController@confirm')->name('entities.confirm-editing');\nRoute::post('/w/{campaign}/entities/{entity}/keep-alive', 'EditingController@keepAlive')->name('entities.keep-alive');\n\n// Posts\nRoute::post('/w/{campaign}/editing/posts/{entity}/{post}/confirm-editing', 'EditingController@confirmPost')->name('posts.confirm-editing');\nRoute::post('/w/{campaign}/editing/posts/{entity}/{post}/keep-alive', 'EditingController@keepAlivePost')->name('posts.keep-alive');\nRoute::get('/w/{campaign}/posts/{entity}/{post}/visibility', [VisibilityController::class, 'index'])->name('posts.edit.visibility');\nRoute::post('/w/{campaign}/posts/{entity}/{post}/visibility/update', [VisibilityController::class, 'update'])->name('posts.update.visibility');\n\n// Quest Elements\nRoute::post('/w/{campaign}/editing/quest-elements/{quest_element}/confirm-editing', 'EditingController@confirmQuestElement')->name('quest-elements.confirm-editing');\nRoute::post('/w/{campaign}/editing/quest-elements/{quest_element}/keep-alive', 'EditingController@keepAliveQuestElement')->name('quest-elements.keep-alive');\n\n// Timeline Elements\nRoute::post('/w/{campaign}/editing/timeline-elements/{timeline_element}/confirm-editing', 'EditingController@confirmTimelineElement')->name('timeline-elements.confirm-editing');\nRoute::post('/w/{campaign}/editing/timeline-elements/{timeline_element}/keep-alive', 'EditingController@keepAliveTimelineElement')->name('timeline-elements.keep-alive');\nRoute::get('/w/{campaign}/timeline/{timeline}/era/{timeline_era}/list', 'Timelines\\TimelineEraController@positionList')->name('timelines.era-list');\n\nRoute::get('/w/{campaign}/bookmarks/{bookmark}/random', 'Bookmarks\\RandomController@index')\n    ->name('bookmarks.random');\n\nRoute::get('/w/{campaign}/timelines/{timeline}/reorder', [TimelineReorderController::class, 'index'])\n    ->name('timelines.reorder');\nRoute::post('/w/{campaign}/timelines/{timeline}/reorder', [TimelineReorderController::class, 'save'])\n    ->name('timelines.reorder-save');\nRoute::post('/w/{campaign}/timelines/{timeline}/eras/bulk', 'Timelines\\TimelineEraController@bulk')->name('timelines.eras.bulk');\n\nRoute::get('/w/{campaign}/bookmarks/reorder', [ReorderController::class, 'index'])\n    ->name('bookmarks.reorder');\nRoute::post('/w/{campaign}/bookmarks/reorder', [ReorderController::class, 'save'])\n    ->name('bookmarks.reorder-save');\nRoute::get('/w/{campaign}/entity_types/{entity_type}/bookmark-form', [SaveController::class, 'render'])->name('filters.modal_form');\n\n// Entity Abilities API\nRoute::get('/w/{campaign}/entities/{entity}/abilities', 'Entity\\AbilityController@index')->name('entities.abilities');\nRoute::get('/w/{campaign}/entities/{entity}/entity_abilities/api', 'Entity\\Abilities\\ApiController@index')->name('entities.entity_abilities.api');\nRoute::get('/w/{campaign}/entities/{entity}/entity_abilities/import', 'Entity\\Abilities\\ImportController@import')->name('entities.entity_abilities.import');\nRoute::get('/w/{campaign}/entities/{entity}/entity_abilities/import-confirm', 'Entity\\Abilities\\ImportController@index')->name('entities.entity_abilities.import.confirm');\nRoute::post('/w/{campaign}/entities/{entity}/entity_abilities/{entity_ability}/use', 'Entity\\Abilities\\ChargeController@use')->name('entities.entity_abilities.use');\nRoute::get('/w/{campaign}/entities/{entity}/entity_abilities/reset', 'Entity\\Abilities\\ChargeController@reset')->name('entities.entity_abilities.reset');\n\nRoute::get('/w/{campaign}/entities/{entity}/entity_assets/{entity_asset}/go', 'Entity\\AssetController@go')->name('entities.entity_assets.go');\n\nRoute::get('/w/{campaign}/entities/{entity}/profile', 'Entity\\ProfileController@index')\n    ->name('entities.profile');\n\nRoute::get('/w/{campaign}/entity_types/{entity_type}/filter-form', [FormController::class, 'index'])->name('filters.form');\nRoute::get('/w/{campaign}/connection/filter-form', [FormController::class, 'connection'])->name('filters.form-connection');\n\nRoute::get('/w/{campaign}/filters/{entity_type}/save', [SaveController::class, 'save'])->name('save-filters');\n\n// Redirect standard entity type index routes to the unified listing\n$standardEntityTypes = [\n    'abilities', 'calendars', 'characters', 'creatures', 'events', 'families',\n    'items', 'journals', 'locations', 'maps', 'notes', 'organisations',\n    'quests', 'races', 'tags', 'timelines',\n];\n\nforeach ($standardEntityTypes as $entityTypeCode) {\n    Route::get(\"/w/{campaign}/{$entityTypeCode}\", function (Campaign $campaign) use ($entityTypeCode) {\n        $entityType = EntityType::where('code', $entityTypeCode)->first();\n        if ($entityType) {\n            return redirect()->route('entities.index', array_merge(\n                [$campaign, $entityType],\n                request()->query()\n            ));\n        }\n        abort(404);\n    })->name(\"{$entityTypeCode}.index\");\n}\n\n// Route::get('/w/{campaign}/my-campaigns', 'CampaignController@index')->name('campaign');\nRoute::resources([\n    '/w/{campaign}/abilities' => 'Crud\\AbilityController',\n    '/w/{campaign}/calendars' => 'Crud\\CalendarController',\n    '/w/{campaign}/calendars.calendar_weather' => 'Calendar\\CalendarWeatherController',\n    '/w/{campaign}/characters' => 'Crud\\CharacterController',\n    '/w/{campaign}/characters.character_organisations' => 'Characters\\MembershipController',\n    '/w/{campaign}/conversations' => 'Crud\\ConversationController',\n    '/w/{campaign}/conversations.conversation_participants' => 'ConversationParticipantController',\n    '/w/{campaign}/conversations.conversation_messages' => 'ConversationMessageController',\n    '/w/{campaign}/dice_rolls' => 'Crud\\DiceRollController',\n    '/w/{campaign}/events' => 'Crud\\EventController',\n    '/w/{campaign}/locations' => 'Crud\\LocationController',\n    '/w/{campaign}/families' => 'Crud\\FamilyController',\n    '/w/{campaign}/items' => 'Crud\\ItemController',\n    '/w/{campaign}/journals' => 'Crud\\JournalController',\n    '/w/{campaign}/maps' => 'Crud\\MapController',\n    '/w/{campaign}/maps.map_layers' => 'Maps\\LayerController',\n    '/w/{campaign}/maps.map_groups' => 'Maps\\GroupController',\n    '/w/{campaign}/maps.map_markers' => 'Maps\\MarkerController',\n    '/w/{campaign}/bookmarks' => 'Crud\\BookmarkController',\n    '/w/{campaign}/organisations' => 'Crud\\OrganisationController',\n    '/w/{campaign}/organisations.organisation_members' => 'Organisation\\MemberController',\n    '/w/{campaign}/notes' => 'Crud\\NoteController',\n    '/w/{campaign}/quests' => 'Crud\\QuestController',\n    '/w/{campaign}/quests.quest_elements' => 'Quests\\ElementController',\n    '/w/{campaign}/tags' => 'Crud\\TagController',\n    '/w/{campaign}/timelines' => 'Crud\\TimelineController',\n    '/w/{campaign}/timelines.timeline_eras' => 'Timelines\\TimelineEraController',\n    '/w/{campaign}/timelines.timeline_elements' => 'Timelines\\TimelineElementController',\n    '/w/{campaign}/races' => 'Crud\\RaceController',\n    '/w/{campaign}/creatures' => 'Crud\\CreatureController',\n    '/w/{campaign}/relations' => 'RelationController',\n    '/w/{campaign}/reminders' => 'ReminderUpdateController',\n\n    // Entities\n    // 'entities.attributes' => 'AttributeController',\n    '/w/{campaign}/entities.entity_abilities' => 'Entity\\AbilityController',\n    '/w/{campaign}/entities.posts' => 'Entity\\PostController',\n    '/w/{campaign}/entities.reminders' => 'Entity\\ReminderController',\n    '/w/{campaign}/entities.entity_assets' => 'Entity\\AssetController',\n    '/w/{campaign}/entities.inventories' => 'Entity\\InventoryController',\n    '/w/{campaign}/entities.relations' => 'Entity\\RelationController',\n\n    '/w/{campaign}/attribute_templates' => 'Crud\\AttributeTemplateController',\n    '/w/{campaign}/whiteboards' => 'Whiteboards\\CrudController',\n    // 'presets' => 'PresetController',\n]);\n\n// Move\nRoute::get('/w/{campaign}/entities/{entity}/move', 'Entity\\MoveController@index')->name('entities.move');\nRoute::post('/w/{campaign}/entities/{entity}/move', 'Entity\\MoveController@move')->name('entities.move-process');\nRoute::get('/w/{campaign}/entities/{entity}/posts/{post}/move', 'Entity\\Posts\\MoveController@index')->name('posts.move');\nRoute::post('/w/{campaign}/entities/{entity}/posts/{post}/move', 'Entity\\Posts\\MoveController@move')->name('posts.move-process');\nRoute::get('/w/{campaign}/entities/{entity}/post-layouts', [LayoutController::class, 'index'])->name('posts.layouts');\n\n// Transform\nRoute::get('/w/{campaign}/entities/{entity}/transform', 'Entity\\TransformController@index')->name('entities.transform');\nRoute::post('/w/{campaign}/entities/{entity}/transform', 'Entity\\TransformController@transform')->name('entities.transform-process');\n\nRoute::get('/w/{campaign}/entities/{entity}/tooltip', 'Entity\\TooltipController@show')->name('entities.tooltip');\n\n// Entity files\nRoute::get('/w/{campaign}/entities/{entity}/logs', 'Entity\\LogController@index')->name('entities.logs');\nRoute::get('/w/{campaign}/entities/{entity}/post/{post}/logs', 'Entity\\Posts\\LogController@index')->name('entities.posts.logs');\nRoute::get('/w/{campaign}/entities/{entity}/mentions', 'Entity\\MentionController@index')->name('entities.mentions');\n\n// Inventory\nRoute::get('/w/{campaign}/entities/{entity}/inventory', 'Entity\\InventoryController@index')\n    ->name('entities.inventory');\nRoute::post('/w/{campaign}/entities/{entity}/inventory/generate/store', 'Entity\\GenerateInventoryController@store')\n    ->name('entities.inventory.generate.store');\nRoute::get('/w/{campaign}/entities/{entity}/inventory/generate', 'Entity\\GenerateInventoryController@index')\n    ->name('entities.inventory.generate');\nRoute::post('/w/{campaign}/entities/{entity}/inventory/copy_from', 'Entity\\CopyInventoryController@store')\n    ->name('entities.inventory.copy.store');\nRoute::get('/w/{campaign}/entities/{entity}/inventory/copy', 'Entity\\CopyInventoryController@index')\n    ->name('entities.inventory.copy');\nRoute::get('/w/{campaign}/entities/{entity}/inventory/{inventory}/details', 'Entity\\Inventory\\DetailController@index')\n    ->name('entities.inventory.details');\nRoute::delete('/w/{campaign}/entities/{entity}/inventory/{inventory}/delete_section', 'Entity\\InventorySectionController@delete')\n    ->name('entities.inventory.delete.section');\n\n// Export\nRoute::get('/w/{campaign}/entities/{entity}/html-export', 'Entity\\ExportController@html')->name('entities.html-export');\nRoute::get('/w/{campaign}/entities/{entity}.json', 'Entity\\ExportController@json')->name('entities.json.export');\nRoute::get('/w/{campaign}/entities/{entity}.md', 'Entity\\ExportController@markdown')->name('entities.markdown.export');\n\n// Share\nRoute::get('/w/{campaign}/entities/{entity}/share', 'Entity\\ShareController@setup')->name('entities.share.setup');\nRoute::post('/w/{campaign}/entities/{entity}/share', 'Entity\\ShareController@save')->name('entities.share.save');\n\nRoute::get('/w/{campaign}/entities/{entity}/template', 'Entity\\TemplateController@update')->name('entities.template');\nRoute::get('/w/{campaign}/posts/{post}/template', 'Entity\\Posts\\TemplateController@update')->name('posts.template');\n\n// Archive\nRoute::get('/w/{campaign}/entities/{entity}/archive', 'Entity\\ArchiveController@update')->name('entities.archive');\n\n// Attribute template\nRoute::get('/w/{campaign}/entities/{entity}/attribute-template', 'Entity\\AttributeTemplateController@index')->name('entities.attributes.template');\nRoute::post('/w/{campaign}/entities/{entity}/attribute-template', 'Entity\\AttributeTemplateController@process')->name('entities.attributes.template-process');\n\nRoute::get('/w/{campaign}/entities/{entity}/permissions', 'Entity\\PermissionController@view')->name('entities.permissions');\nRoute::post('/w/{campaign}/entities/{entity}/permissions', 'Entity\\PermissionController@store')->name('entities.permissions-process');\n\nRoute::get('/w/{campaign}/entities/{entity}/preview', 'Entity\\PreviewController@index')->name('entities.preview');\n\n// Entity quick creator\nRoute::get('/w/{campaign}/entity-creator', [EntityCreatorController::class, 'selection'])->name('entity-creator.selection');\nRoute::get('/w/{campaign}/entity-creator/{entity_type}', [EntityCreatorController::class, 'form'])->name('entity-creator.form');\nRoute::get('/w/{campaign}/entity-creator-post', [EntityCreatorController::class, 'post'])->name('entity-creator.post');\nRoute::post('/w/{campaign}/entity-creator/{entity_type}', [EntityCreatorController::class, 'store'])->name('entity-creator.store');\nRoute::post('/w/{campaign}/entity-creator-post', [EntityCreatorController::class, 'storePost'])->name('entity-creator.store-post');\n\n// Whiteboards\nRoute::get('/w/{campaign}/whiteboards/{whiteboard}/draw', [DrawController::class, 'show'])->name('whiteboards.draw');\nRoute::get('/w/{campaign}/whiteboards/{whiteboard}/api', [ApiController::class, 'index'])->name('whiteboards.api');\nRoute::put('/w/{campaign}/whiteboards/{whiteboard}/api', [ApiController::class, 'store'])->name('whiteboards.shapes.store');\nRoute::patch('/w/{campaign}/whiteboards/{whiteboard}/api/{whiteboard_shape}', [ApiController::class, 'update'])->name('whiteboards.shapes.update');\nRoute::delete('/w/{campaign}/whiteboards/{whiteboard}/api/{whiteboard_shape}', [ApiController::class, 'destroy'])->name('whiteboards.shapes.delete');\nRoute::post('/w/{campaign}/whiteboards/{whiteboard}/api/{whiteboard_shape}/stroke', [ApiController::class, 'stroke'])->name('whiteboards.shapes.stroke');\n\nRoute::get('/w/{campaign}/entities/{entity}/api/document', [DocumentController::class, 'index'])->name('entities.api.document');\n"
  },
  {
    "path": "routes/campaigns/search.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Search\\AttributeController;\nuse App\\Http\\Controllers\\Search\\CalendarController;\nuse App\\Http\\Controllers\\Search\\CampaignController;\nuse App\\Http\\Controllers\\Search\\FullTextController;\nuse App\\Http\\Controllers\\Search\\ImageController;\nuse App\\Http\\Controllers\\Search\\ListController;\nuse App\\Http\\Controllers\\Search\\LiveController;\nuse App\\Http\\Controllers\\Search\\MapGroupController;\nuse App\\Http\\Controllers\\Search\\MarkerController;\nuse App\\Http\\Controllers\\Search\\MentionController;\nuse App\\Http\\Controllers\\Search\\RecentController;\nuse App\\Http\\Controllers\\Search\\TemplateController;\nuse App\\Http\\Controllers\\SearchController;\nuse Illuminate\\Support\\Facades\\Route;\n\n// Old Search\nRoute::get('/w/{campaign}/search', [SearchController::class, 'search'])->name('search');\n\nRoute::get('/w/{campaign}/search/markers', [MarkerController::class, 'index'])->name('markers.find');\nRoute::get('/w/{campaign}/search/images', [ImageController::class, 'index'])->name('images.find');\n\nRoute::get('/w/{campaign}/search/members', [CampaignController::class, 'members'])->name('find.members');\nRoute::get('/w/{campaign}/search/roles', [CampaignController::class, 'roles'])->name('find.campaign.roles');\n\nRoute::get('/w/{campaign}/search/entity-calendars', [CalendarController::class, 'index'])->name('search.calendars');\nRoute::get('/w/{campaign}/search/months', [CalendarController::class, 'months'])->name('search.calendar-months');\n\nRoute::get('/w/{campaign}/search/entities/{entity}/attributes', [AttributeController::class, 'index'])->name('search.attributes');\n\n// Global Entity Search\nRoute::get('/w/{campaign}/search/reminder-entities', [LiveController::class, 'reminderEntities'])->name('search.entities-with-reminders');\nRoute::get('/w/{campaign}/search/relation-entities', [LiveController::class, 'relationEntities'])->name('search.entities-with-relations');\nRoute::get('/w/{campaign}/search/tag-children', [LiveController::class, 'tagChildren'])->name('search.tag-children');\nRoute::get('/w/{campaign}/search/ability-entities', [LiveController::class, 'abilityEntities'])->name('search.ability-entities');\nRoute::get('/w/{campaign}/search/organisation-member', [LiveController::class, 'organisationMembers'])->name('search.organisation-member');\n\nRoute::get('/w/{campaign}/search/type/{entity_type}', [ListController::class, 'index'])->name('search-list');\nRoute::get('/w/{campaign}/search/{map}/map_groups', [MapGroupController::class, 'index'])->name('map-groups-list');\nRoute::get('/w/{campaign}/search/type/{entity_type}/templates', [TemplateController::class, 'index'])->name('search.templates');\n\nRoute::get('/w/{campaign}/search/live', [LiveController::class, 'index'])->name('search.live');\nRoute::get('/w/{campaign}/search/recent', [RecentController::class, 'index'])->name('search.recent');\n\nRoute::get('/w/{campaign}/search/fulltext', [FullTextController::class, 'index'])->name('search.fulltext');\n\nRoute::get('/w/{campaign}/search/mention', [MentionController::class, 'index'])->name('search.mention');\nRoute::post('/w/{campaign}/search/mention', [MentionController::class, 'load'])->name('search.mention.load');\n"
  },
  {
    "path": "routes/channels.php",
    "content": "<?php\n\nuse App\\Facades\\EntityPermission;\nuse App\\Models\\User;\nuse App\\Models\\Whiteboard;\nuse Illuminate\\Support\\Facades\\Broadcast;\n\n// Broadcast::channel('App.Models.User.{id}', function ($user, $id) {\n//    return (int) $user->id === (int) $id;\n// });\n\nBroadcast::channel('whiteboard.{id}', function (User $user, $id) {\n    $whiteboard = Whiteboard::withInvisible()->findOrFail($id);\n    $entity = $whiteboard->entity()->withInvisible()->firstOrFail();\n\n    EntityPermission::campaign($entity->campaign);\n    if ($user->can('member', $entity->campaign) && $user->can('view', $entity)) {\n        return [\n            'id' => $user->id,\n            'name' => $user->name,\n            'image' => $user->hasAvatar() ? $user->getAvatarUrl() : null,\n            'url' => route('users.profile', [$user]),\n            'role' => $user->can('update', $entity) ? 'edit' : 'view',\n        ];\n    }\n\n    return false;\n});\n"
  },
  {
    "path": "routes/console.php",
    "content": "<?php\n\nuse Illuminate\\Foundation\\Inspiring;\n\n/*\n|--------------------------------------------------------------------------\n| Console Routes\n|--------------------------------------------------------------------------\n|\n| This file is where you may define all of your Closure based console\n| commands. Each Closure is bound to a command instance allowing a\n| simple approach to interacting with each command's IO methods.\n|\n*/\n\nArtisan::command('inspire', function () {\n    $this->comment(Inspiring::quote());\n})->describe('Display an inspiring quote');\n"
  },
  {
    "path": "routes/oauth.php",
    "content": "<?php\n\nRoute::prefix('oauth')->group(function () {\n    Route::get('/tokens', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\AuthorizedAccessTokenController@forUser',\n        'as' => 'tokens.index',\n    ]);\n\n    Route::delete('/tokens/{token_id}', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\AuthorizedAccessTokenController@destroy',\n        'as' => 'tokens.destroy',\n    ]);\n\n    Route::get('/clients', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\ClientController@forUser',\n        'as' => 'clients.index',\n    ]);\n\n    Route::post('/clients', [\n        'uses' => '\\App\\Http\\Controllers\\Passport\\ClientController@store',\n        'as' => 'clients.store',\n    ]);\n\n    Route::put('/clients/{client_id}', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\ClientController@update',\n        'as' => 'clients.update',\n    ]);\n\n    Route::delete('/clients/{client_id}', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\ClientController@destroy',\n        'as' => 'clients.destroy',\n    ]);\n\n    Route::get('/scopes', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\ScopeController@all',\n        'as' => 'scopes.index',\n    ]);\n\n    Route::get('/personal-access-tokens', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\PersonalAccessTokenController@forUser',\n        'as' => 'personal.tokens.index',\n    ]);\n\n    Route::post('/personal-access-tokens', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\PersonalAccessTokenController@store',\n        'as' => 'personal.tokens.store',\n    ]);\n\n    Route::delete('/personal-access-tokens/{token_id}', [\n        'uses' => '\\Laravel\\Passport\\Http\\Controllers\\PersonalAccessTokenController@destroy',\n        'as' => 'personal.tokens.destroy',\n    ]);\n});\n"
  },
  {
    "path": "routes/settings.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Account\\Billing\\InformationController;\nuse App\\Http\\Controllers\\Account\\DeleteController;\nuse App\\Http\\Controllers\\Account\\EmailController;\nuse App\\Http\\Controllers\\Account\\PasswordController;\nuse App\\Http\\Controllers\\Account\\SocialController;\nuse App\\Http\\Controllers\\Billing\\HistoryController;\nuse App\\Http\\Controllers\\Billing\\PaymentMethodController;\nuse App\\Http\\Controllers\\CampaignBoostController;\nuse App\\Http\\Controllers\\Layout\\NavigationController;\nuse App\\Http\\Controllers\\NotificationController;\nuse App\\Http\\Controllers\\PasswordSecurityController;\nuse App\\Http\\Controllers\\PayPalController;\nuse App\\Http\\Controllers\\Settings\\AccountController;\nuse App\\Http\\Controllers\\Settings\\ApiController;\nuse App\\Http\\Controllers\\Settings\\AppearanceController;\nuse App\\Http\\Controllers\\Settings\\Apps\\DiscordController;\nuse App\\Http\\Controllers\\Settings\\AppsController;\nuse App\\Http\\Controllers\\Settings\\BoostController;\nuse App\\Http\\Controllers\\Settings\\ClientController;\nuse App\\Http\\Controllers\\Settings\\NewsletterApiController;\nuse App\\Http\\Controllers\\Settings\\NewsletterController;\nuse App\\Http\\Controllers\\Settings\\PatreonController;\nuse App\\Http\\Controllers\\Settings\\PremiumController;\nuse App\\Http\\Controllers\\Settings\\ProfileController;\nuse App\\Http\\Controllers\\Settings\\ReferralController;\nuse App\\Http\\Controllers\\Settings\\ReleaseController;\nuse App\\Http\\Controllers\\Settings\\Subscription\\CancellationController;\nuse App\\Http\\Controllers\\Settings\\Subscription\\CancelledController;\nuse App\\Http\\Controllers\\Settings\\Subscription\\FinishController;\nuse App\\Http\\Controllers\\Settings\\Subscription\\FreeTrialController;\nuse App\\Http\\Controllers\\Settings\\SubscriptionController;\nuse App\\Http\\Controllers\\Settings\\TutorialController;\nuse App\\Http\\Controllers\\Subscription\\PayPal\\RenewalController;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('/', [ProfileController::class, 'index'])->name('settings');\nRoute::get('/profile', [ProfileController::class, 'index'])->name('settings.profile');\nRoute::patch('/profile', [ProfileController::class, 'update'])->name('settings.profile-process');\n\nRoute::get('/account/billing/info', [InformationController::class, 'index'])->name('account.billing.info');\nRoute::patch('/account/billing/info', [InformationController::class, 'save'])->name('account.billing.info-save');\n\nRoute::get('/boosters', [BoostController::class, 'index'])->name('settings.boost');\nRoute::get('/boosters/boost/{campaign}', [BoostController::class, 'boost'])->name('settings.campaign-boost');\nRoute::get('/boosters/unboost/{campaign}', [BoostController::class, 'unboost'])->name('settings.campaign-unboost');\n\nRoute::post('/switch-to-premium', [PremiumController::class, 'migrate'])\n    ->name('settings.switch-to-premium');\nRoute::get('/switch-back', [PremiumController::class, 'back'])\n    ->name('settings.switch-back');\nRoute::get('/premium', [PremiumController::class, 'index'])->name('settings.premium');\nRoute::get('/boosters/premium/{campaign}', [PremiumController::class, 'premium'])->name('settings.campaign-premium');\nRoute::get('/boosters/unpremium/{campaign}', [PremiumController::class, 'unpremium'])->name('settings.campaign-unpremium');\n\nRoute::post('/release/{app_release}', [ReleaseController::class, 'read'])->name('settings.release');\n\nRoute::get('/account', [AccountController::class, 'index'])->name('settings.account');\n\nRoute::get('/account/password', [PasswordController::class, 'index'])->name('account.password');\nRoute::patch('/account/password', [PasswordController::class, 'save'])->name('account.password-save');\nRoute::get('/account/email', [EmailController::class, 'index'])->name('account.email');\nRoute::patch('/account/email', [EmailController::class, 'save'])->name('account.email-save');\n\nRoute::patch('/account/destroy', [DeleteController::class, 'destroy'])->name('settings.account.destroy');\n\nRoute::get('/account/social', [SocialController::class, 'index'])->name('account.social');\nRoute::patch('/account/social', [SocialController::class, 'save'])->name('account.social-save');\n\nRoute::get('/patreon', [PatreonController::class, 'index'])->name('settings.patreon');\nRoute::delete('/patreon-unlink', [PatreonController::class, 'unlink'])->name('settings.patreon.unlink');\n\nRoute::get('/api', [ApiController::class, 'index'])->name('settings.api');\nRoute::get('/api/create', [ApiController::class, 'create'])->name('settings.api.create');\nRoute::post('/api/store', [ApiController::class, 'store'])->name('settings.api.store');\nRoute::delete('/api/revoke/{token}', [ApiController::class, 'revoke'])->name('settings.api.revoke');\nRoute::put('/client/update/{client}', [ClientController::class, 'update'])->name('settings.client.update');\nRoute::get('/client/create', [ClientController::class, 'create'])->name('settings.client.create');\nRoute::post('/client/store', [ClientController::class, 'store'])->name('settings.client.store');\nRoute::get('/client/edit/{client}', [ClientController::class, 'edit'])->name('settings.client.edit');\nRoute::delete('/client/revoke/{client}', [ClientController::class, 'revoke'])->name('settings.client.revoke');\n\nRoute::get('/appearance', [AppearanceController::class, 'index'])->name('settings.appearance');\nRoute::patch('/appearance', [AppearanceController::class, 'update'])->name('settings.appearance.update');\n\nRoute::get('/newsletter', [NewsletterController::class, 'index'])->name('settings.newsletter');\nRoute::patch('/newsletter', [NewsletterController::class, 'update'])->name('settings.newsletter.save');\n\nRoute::get('/subscription', [SubscriptionController::class, 'index'])->name('settings.subscription');\nRoute::get('/subscription/change/{tier}', [SubscriptionController::class, 'change'])->name('settings.subscription.change');\nRoute::post('/subscription/renew', [SubscriptionController::class, 'renew'])->name('settings.subscription.renew');\nRoute::get('/subscription/finish', [FinishController::class, 'index'])->name('settings.subscription.finish');\nRoute::get('/subscription/callback', [SubscriptionController::class, 'callback'])->name('settings.subscription.callback');\nRoute::post('/subscription/change/{tier}', [SubscriptionController::class, 'subscribe'])->name('settings.subscription.subscribe');\nRoute::get('/subscription/unsubscribe', [CancellationController::class, 'index'])->name('settings.subscription.unsubscribe');\nRoute::post('/subscription/cancel', [CancellationController::class, 'save'])->name('settings.subscription.cancel');\nRoute::get('/subscription/cancelled', [CancelledController::class, 'index'])->name('settings.subscription.cancelled');\nRoute::get('/billing/payment-method', [PaymentMethodController::class, 'index'])->name('billing.payment-method');\nRoute::patch('/billing/payment-method', [PaymentMethodController::class, 'save'])->name('billing.payment-method.save');\nRoute::get('/billing/currency', [PaymentMethodController::class, 'currency'])->name('billing.currency');\n\nRoute::get('/subscription/free-trial', [FreeTrialController::class, 'index'])->name('settings.free-trial');\nRoute::post('/subscription/free-trial/accept', [FreeTrialController::class, 'accept'])->name('settings.free-trial.accept');\n\nRoute::get('/billing/history', [HistoryController::class, 'index'])->name('billing.history');\nRoute::get('/billing/history/download/{invoice}', [HistoryController::class, 'download'])->name('billing.history.download');\n\nRoute::get('/bragi', 'Settings\\BragiController@index')\n    ->name('settings.bragi');\n\nRoute::get('/apps', [AppsController::class, 'index'])\n    ->name('settings.apps');\nRoute::get('/discord-me', [DiscordController::class, 'me']);\nRoute::delete('/discord', [DiscordController::class, 'destroy'])\n    ->name('settings.discord.destroy');\nRoute::get('/discord-callback', [DiscordController::class, 'callback'])\n    ->name('settings.discord.callback');\nRoute::get('/discord-setup', [DiscordController::class, 'seup']);\n\nRoute::post('newsletter-api', [NewsletterApiController::class, 'update'])\n    ->name('settings.newsletter-api');\n\n/*Route::get('/marketplace', 'Settings\\MarketplaceController@index')\n    ->name('settings.marketplace');\nRoute::post('/marketplace', 'Settings\\MarketplaceController@save')\n    ->name('settings.marketplace.save');*/\n\n// Tutorial\n// Route::get('/tutorial/{tutorial}/done/{next?}', 'Settings\\TutorialController@done')\n//    ->name('settings.tutorial.done');\n// Route::get('/tutorial/disable', 'Settings\\TutorialController@disable')\n//    ->name('settings.tutorial.disable');\n// Route::get('/tutorial/reset', 'Settings\\TutorialController@reset')\n//    ->name('settings.tutorial.reset');\nRoute::post('/tutorials/{code}/dismiss', [TutorialController::class, 'dismiss'])->name('tutorials.dismiss');\nRoute::patch('/tutorials/reset', [TutorialController::class, 'reset'])->name('tutorials.reset');\n\n// Campaign boosters\nRoute::resources([\n    'campaign_boosts' => CampaignBoostController::class,\n]);\nRoute::get(\n    'campaign_boosts/{campaign_boost}/confirm',\n    [CampaignBoostController::class, 'confirm']\n)->name('campaign_boost.confirm-destroy');\n\n/*\n--------------------------------------------------------------------------\nGoogle2FA\n--------------------------------------------------------------------------\n*/\nRoute::post('/security/cancel2fa', [PasswordSecurityController::class, 'cancel2FA'])->name('auth.cancel-2fa');\n\n// Generate a new Google2FA code if a User does not already have one\nRoute::post('/security/generate2faSecret', [PasswordSecurityController::class, 'generate2faSecretCode'])\n    ->name('settings.security.generate-2fa');\n\n// Verify 2FA if User has it enabled\nRoute::post('/security/verify2fa', function () {\n    return redirect()->route('home');\n})->name('auth.verify-2fa')->middleware('2fa');\n\n/*Route::get('/security/verify2fa', function() {\n    return redirect(URL()->previous());\n})->name('auth.verify-2fa')->middleware('2fa');*/\n\n/*\n--------------------------------------------------------------------------\nPayPal API\n--------------------------------------------------------------------------\n*/\n\nRoute::post('paypal/process-transaction/{tier}', [PayPalController::class, 'processTransaction'])\n    ->name('paypal.process-transaction');\nRoute::get('paypal/success-transaction', [PayPalController::class, 'successTransaction'])\n    ->name('paypal.transaction-success');\nRoute::get('paypal/cancel-transaction', [PayPalController::class, 'cancelTransaction'])\n    ->name('paypal.cancel-transaction');\n\n/*\n--------------------------------------------------------------------------\nPayPal Renewal\n--------------------------------------------------------------------------\n*/\n\nRoute::get('subscription/paypal/renew', [RenewalController::class, 'index'])\n    ->name('paypal.renew');\nRoute::post('subscription/paypal/renew/{tier}', [RenewalController::class, 'process'])\n    ->name('paypal.renew-process');\nRoute::get('subscription/paypal/renew/success', [RenewalController::class, 'success'])\n    ->name('paypal.renew-success');\nRoute::get('subscription/paypal/renew/cancel', [RenewalController::class, 'cancel'])\n    ->name('paypal.renew-cancel');\n\n/*\n--------------------------------------------------------------------------\nNotifications\n--------------------------------------------------------------------------\n */\nRoute::get('/notifications', [NotificationController::class, 'index'])->name('notifications');\nRoute::get('/notifications/refresh', [NotificationController::class, 'refresh'])->name('notifications.refresh');\nRoute::post('/notifications/read/{id}', [NotificationController::class, 'read'])->name('notifications.read');\nRoute::post('/notifications/clear-all', [NotificationController::class, 'clearAll'])->name('notifications.clear-all');\n\nRoute::get('/layout/navigation', [NavigationController::class, 'index'])->name('layout.navigation');\n\nRoute::get('/referrals', [ReferralController::class, 'index'])->name('settings.referrals');\n"
  },
  {
    "path": "routes/vendor.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Vsch\\TranslationManager\\Translator;\n\n// API docs\nRoute::group([\n    'prefix' => config('larecipe.docs.route'),\n    'domain' => config('larecipe.domain', null),\n    'as' => 'larecipe.',\n    'middleware' => 'web',\n], function () {\n    Route::get('/', '\\BinaryTorch\\LaRecipe\\Http\\Controllers\\DocumentationController@index')->name('index');\n    Route::get('/{version}/{page?}', '\\BinaryTorch\\LaRecipe\\Http\\Controllers\\DocumentationController@show')->where('page', '(.*)')->name('show');\n});\n\n// 3rd party\nRoute::group(['middleware' => ['auth', 'translator'], 'prefix' => 'translations'], function () {\n    Translator::routes();\n});\n"
  },
  {
    "path": "routes/web-i18n.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Campaign\\CreateController;\nuse App\\Http\\Controllers\\HomeController;\nuse App\\Http\\Controllers\\InvitationController;\nuse App\\Http\\Controllers\\TroubleshootingController;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('/', [HomeController::class, 'index'])->name('home');\n\nRoute::get('/new-campaign', [CreateController::class, 'index'])->name('start');\nRoute::post('/new-campaign', [CreateController::class, 'store'])->name('create-campaign');\n\n// Invitation's campaign comes from the token.\nRoute::get('/invitation/join/{token}', [InvitationController::class, 'join'])->name('campaigns.join');\n\nRoute::get('/assistance', [TroubleshootingController::class, 'index'])->name('troubleshooting');\nRoute::post('/assistance', [TroubleshootingController::class, 'store'])->name('troubleshooting.generate');\n"
  },
  {
    "path": "routes/web.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\CookieConsentController;\nuse App\\Http\\Controllers\\Datagrids\\SubscriptionController;\nuse App\\Http\\Controllers\\FrontendPrepareController;\nuse App\\Http\\Controllers\\HealthController;\nuse App\\Http\\Controllers\\ReferralController;\nuse App\\Http\\Controllers\\Roadmap\\FeatureController;\nuse App\\Http\\Controllers\\Roadmap\\RoadmapController;\nuse App\\Http\\Controllers\\Search\\GameSystemSearchController;\nuse App\\Http\\Controllers\\Settings\\SubscriptionApiController;\nuse App\\Http\\Controllers\\SetupController;\nuse App\\Http\\Controllers\\Spotlights\\ApplicationController;\nuse App\\Http\\Controllers\\User\\EmailValidationController;\nuse App\\Http\\Controllers\\User\\ProfileController;\nuse App\\Models\\Feature;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('/auth/{provider}/callback', 'Auth\\AuthController@handleProviderCallback')->name('auth.provider.callback');\n\nRoute::group(['prefix' => 'subscription-api'], function () {\n    Route::get('setup-intent', 'Settings\\SubscriptionApiController@setupIntent');\n    Route::post('payments', 'Settings\\SubscriptionApiController@paymentMethods');\n    Route::get('payment-methods', 'Settings\\SubscriptionApiController@getPaymentMethods');\n    Route::post('remove-payment', 'Settings\\SubscriptionApiController@removePaymentMethod');\n    Route::get('check-coupon/{tier}', [SubscriptionApiController::class, 'checkCoupon'])\n        ->name('subscription.check-coupon');\n});\n\nRoute::get('users/{user}', [ProfileController::class, 'show'])->name('users.profile');\n\nRoute::get('/_ccapi/country', [CookieConsentController::class, 'index'])\n    ->name('cookieconsent.country');\n\nRoute::get('/frontend-prepare', [FrontendPrepareController::class, 'index']);\n\nRoute::get('/_setup', [SetupController::class, 'index']);\nRoute::get('/up', [HealthController::class, 'index']);\n\nRoute::model('feature', Feature::class);\nRoute::get('roadmap', [RoadmapController::class, 'index'])->name('roadmap');\nRoute::get('roadmap/{feature}', [FeatureController::class, 'show'])->name('roadmap.feature.show');\nRoute::post('roadmap/{feature}/upvote', [FeatureController::class, 'upvote'])->name('roadmap.upvote');\nRoute::post('roadmap/submit', [FeatureController::class, 'store'])->name('roadmap.store');\n\nRoute::get('spotlights', [ApplicationController::class, 'index'])->name('spotlights.application');\nRoute::get('spotlights/{campaign}', [ApplicationController::class, 'form'])->name('spotlights.form');\nRoute::post('spotlights/{campaign}/save', [ApplicationController::class, 'save'])->name('spotlights.save');\nRoute::post('spotlights/retract/{campaign}', [ApplicationController::class, 'retract'])->name('spotlights.retract');\n\nRoute::get('/validation/{userValidation}', [EmailValidationController::class, 'validateEmail'])->name('validation.email');\n\n// Game System Search\nRoute::get('/search/systems', [GameSystemSearchController::class, 'index'])->name('search.systems');\n\nRoute::get('/r/{referral}', [ReferralController::class, 'index'])->name('referrals');\n\nRoute::get('/datagrids/subscription', [SubscriptionController::class, 'index'])->name('datagrids.subscription');\n"
  },
  {
    "path": "routes/webhooks.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\Facebook\\DeletionController;\n\nRoute::post(\n    'stripe/webhook',\n    '\\App\\Http\\Controllers\\WebhookController@handleWebhook'\n)->name('cashier.webhook');\n\nRoute::post('/facebook/data-deletion', [DeletionController::class, 'handle']);\nRoute::get('/facebook/data-deletion/status', [DeletionController::class, 'status']);\nRoute::get('/facebook/data-deletion/generate', [DeletionController::class, 'generate']);\n"
  },
  {
    "path": "server.php",
    "content": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @author   Taylor Otwell <taylor@laravel.com>\n */\n$uri = urldecode(\n    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)\n);\n\n// This file allows us to emulate Apache's \"mod_rewrite\" functionality from the\n// built-in PHP web server. This provides a convenient way to test a Laravel\n// application without having installed a \"real\" web server software here.\nif ($uri !== '/' && file_exists(__DIR__ . '/public' . $uri)) {\n    return false;\n}\n\nrequire_once __DIR__ . '/public/index.php';\n"
  },
  {
    "path": "sonar-project.properties",
    "content": "sonar.exclusions=test/**, node_modules/**, vendor/**, bower_components/**, .docker/**, database/**, public/**, VagrantFile, routes/**, hooks/**, docs/**, resources/**, storage/**, .idea/**\n"
  },
  {
    "path": "tailwind.config.js",
    "content": "import defaultTheme from 'tailwindcss/defaultTheme';\n\n/** @type {import('tailwindcss').Config} */\nexport default {\n    content: [\n        './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',\n        './storage/framework/views/*.php',\n        './resources/**/*.blade.php',\n        './resources/**/*.js',\n        './resources/**/*.vue',\n        \"./app/Models/*.php\",\n        \"./app/View/Components/**/*.php\",\n\n    ],\n    theme: {\n        extend: {\n            fontFamily: {\n                sans: ['Figtree', ...defaultTheme.fontFamily.sans],\n            },\n        },\n    },\n    plugins: [],\n};\n"
  },
  {
    "path": "tests/CreatesApplication.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Contracts\\Console\\Kernel;\nuse Illuminate\\Foundation\\Application;\n\ntrait CreatesApplication\n{\n    /**\n     * Creates the application.\n     */\n    public function createApplication(): Application\n    {\n        $app = require __DIR__ . '/../bootstrap/app.php';\n\n        $app->make(Kernel::class)->bootstrap();\n\n        return $app;\n    }\n}\n"
  },
  {
    "path": "tests/Feature/AuthTest.php",
    "content": "<?php\n\nit('rejects no token')\n    ->get('/api/1.0/profile')\n    ->assertStatus(401);\n\nit('rejects invalid token')\n    ->get('/api/1.0/profile', ['Authorization' => 'Bearer: FAKE'])\n    ->assertStatus(401);\n\nit('approves a valid token')\n    ->asUser()\n    ->get('/api/1.0/profile')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/CampaignTest.php",
    "content": "<?php\n\nit('campaigns POST invalid')\n    ->asUser()\n    ->postJson('/api/1.0/campaigns', [])\n    ->assertStatus(422);\n\nit('campaigns POST valid')\n    ->asUser()\n    ->postJson('/api/1.0/campaigns', [\n        'name' => fake()->name(),\n        'entry' => fake()->text(500),\n        'excerpt' => fake()->text(100),\n    ])\n    ->assertStatus(201);\n\nit('campaigns GET')\n    ->asUser()\n    ->withCampaign()\n    ->get('/api/1.0/campaigns')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n                'boosted',\n                'superboosted',\n                'premium',\n                'members',\n            ],\n        ],\n    ]);\n\nit('campaign GET')\n    ->asUser()\n    ->withCampaign()\n    ->get('/api/1.0/campaigns/1')\n    ->assertStatus(200)\n    ->assertJson([\n        'data' => [\n            'id' => 1,\n        ],\n    ]);\n\nit('campaign PATCH')\n    ->asUser()\n    ->withCampaign()\n    ->patchJson('/api/1.0/campaigns/1', [\n        'name' => 'New name',\n    ])\n    ->assertJson([\n        'data' => [\n            'id' => 1,\n            'name' => 'New name',\n        ],\n    ]);\n"
  },
  {
    "path": "tests/Feature/Entities/AbilityTest.php",
    "content": "<?php\n\nuse App\\Models\\Ability;\n\nit('POSTS a new ability')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/abilities', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all abilities')\n    ->asUser()\n    ->withCampaign()\n    ->withAbilities()\n    ->get('/api/1.0/campaigns/1/abilities')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific ability')\n    ->asUser()\n    ->withCampaign()\n    ->withAbilities()\n    ->get('/api/1.0/campaigns/1/abilities/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid ability')\n    ->asUser()\n    ->withCampaign()\n    ->withAbilities()\n    ->putJson('/api/1.0/campaigns/1/abilities/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid ability without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withAbilities()\n    ->putJson('/api/1.0/campaigns/1/abilities/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a ability')\n    ->asUser()\n    ->withCampaign()\n    ->withAbilities()\n    ->delete('/api/1.0/campaigns/1/abilities/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid ability')\n    ->asUser()\n    ->withCampaign()\n    ->withAbilities()\n    ->delete('/api/1.0/campaigns/1/abilities/100')\n    ->assertStatus(404);\n\nit('can GET a ability as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withAbilities()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/abilities/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private ability as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Ability::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/abilities/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/BookmarkTest.php",
    "content": "<?php\n\nit('POSTS an invalid bookmark form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/bookmarks', [])\n    ->assertStatus(422);\n\nit('POSTS a new bookmark')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/bookmarks', [\n        'name' => fake()->name(),\n        'entity_id' => 1,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all bookmarks')\n    ->asUser()\n    ->withCampaign()\n    ->withBookmarks()\n    ->get('/api/1.0/campaigns/1/bookmarks')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific bookmark')\n    ->asUser()\n    ->withCampaign()\n    ->withBookmarks()\n    ->get('/api/1.0/campaigns/1/bookmarks/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid bookmark')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withBookmarks()\n    ->putJson('/api/1.0/campaigns/1/bookmarks/1', ['name' => 'Bob', 'entity_id' => 1])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('DELETES a bookmark')\n    ->asUser()\n    ->withCampaign()\n    ->withBookmarks()\n    ->delete('/api/1.0/campaigns/1/bookmarks/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid bookmark')\n    ->asUser()\n    ->withCampaign()\n    ->withBookmarks()\n    ->delete('/api/1.0/campaigns/1/bookmarks/100')\n    ->assertStatus(404);\n"
  },
  {
    "path": "tests/Feature/Entities/CalendarTest.php",
    "content": "<?php\n\nuse App\\Models\\Calendar;\nuse Carbon\\Carbon;\n\nit('POSTS an invalid calendar form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/calendars', [])\n    ->assertStatus(422);\n\nit('POSTS a new calendar')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/calendars', [\n        'name' => 'Gregorian',\n        'months' => '[{\"name\":\"January\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"February\",\"length\":28,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"March\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"April\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"Mai\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"June\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"July\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"August\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"September\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"October\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"November\",\"length\":30,\"type\":\"standard\",\"alias\":\"\"},{\"name\":\"December\",\"length\":31,\"type\":\"standard\",\"alias\":\"\"}]',\n        'weekdays' => '[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"]',\n        'seasons' => '[{\"name\":\"Spring\",\"month\":3,\"day\":21},{\"name\":\"Summer\",\"month\":6,\"day\":21},{\"name\":\"Autumn\",\"month\":9,\"day\":21},{\"name\":\"Winter\",\"month\":12,\"day\":21}]',\n        'month_name' => ['first', 'last'],\n        'month_length' => [1, 2],\n        'weekday' => ['monday', 'sunday'],\n        'suffix' => 'AD',\n        'has_leap_year' => 1,\n        'leap_year_amount' => 1,\n        'leap_year_month' => 2,\n        'leap_year_offset' => 4,\n        'leap_year_start' => 4,\n        'skip_year_zero' => 1,\n        'start_offset' => 5,\n        'is_incrementing' => 1,\n        'date' => Carbon::now()->toDateString(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all calendars')\n    ->asUser()\n    ->withCampaign()\n    ->withCalendars()\n    ->get('/api/1.0/campaigns/1/calendars')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific calendar')\n    ->asUser()\n    ->withCampaign()\n    ->withCalendars()\n    ->get('/api/1.0/campaigns/1/calendars/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid calendar')\n    ->asUser()\n    ->withCampaign()\n    ->withCalendars()\n    ->putJson('/api/1.0/campaigns/1/calendars/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid calendar without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withCalendars()\n    ->putJson('/api/1.0/campaigns/1/calendars/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a calendar')\n    ->asUser()\n    ->withCampaign()\n    ->withCalendars()\n    ->delete('/api/1.0/campaigns/1/calendars/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid calendar')\n    ->asUser()\n    ->withCampaign()\n    ->withCalendars()\n    ->delete('/api/1.0/campaigns/1/calendars/100')\n    ->assertStatus(404);\n\nit('can GET a calendar as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withCalendars()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/calendars/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private calendar as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Calendar::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/calendars/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/CampaignDashboardWidgetTest.php",
    "content": "<?php\n\nit('POSTS an invalid widget form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/campaign_dashboard_widgets', [])\n    ->assertStatus(422);\n\nit('POSTS a new widget')\n    ->asUser()\n    ->withCampaign()\n    ->withMember()\n    ->postJson('/api/1.0/campaigns/1/campaign_dashboard_widgets', [\n        'widget' => 'header',\n    ])\n    ->assertStatus(201);\n\nit('GETS all dashboard widgets')\n    ->asUser()\n    ->withCampaign()\n    ->withDashboardWidgets()\n    ->get('/api/1.0/campaigns/1/campaign_dashboard_widgets')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            '*' => [\n                'id',\n                'widget',\n            ],\n        ],\n    ]);\n\nit('GETS a specific dashboard widget')\n    ->asUser()\n    ->withCampaign()\n    ->withDashboardWidgets()\n    ->get('/api/1.0/campaigns/1/campaign_dashboard_widgets/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'widget',\n        ],\n    ]);\n\nit('DELETES a dashboard widget')\n    ->asUser()\n    ->withCampaign()\n    ->withDashboardWidgets()\n    ->delete('/api/1.0/campaigns/1/campaign_dashboard_widgets/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid user role')\n    ->asUser()\n    ->withCampaign()\n    ->withDashboardWidgets()\n    ->delete('/api/1.0/campaigns/1/campaign_dashboard_widgets/100')\n    ->assertStatus(404);\n\nit('UPDATES a valid dashboard widget')\n    ->asUser()\n    ->withCampaign()\n    ->withDashboardWidgets()\n    ->putJson('/api/1.0/campaigns/1/campaign_dashboard_widgets/1', ['position' => 2, 'widget' => 'header'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['position' => 2]);\n"
  },
  {
    "path": "tests/Feature/Entities/CampaignImageTest.php",
    "content": "<?php\n\nuse Illuminate\\Http\\UploadedFile;\n\nit('POSTS a new image')\n    ->asUser(true)\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/images', [\n        // 'folder_id' => 1,\n        'file' => [\n            UploadedFile::fake()->image('avatar.jpg'),\n        ],\n    ])\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            '*' => [\n                'id',\n                'name',\n                'path',\n            ],\n        ],\n    ]);\n\nit('GETS all images')\n    ->asUser(true)\n    ->withCampaign()\n    ->withImages()\n    ->get('/api/1.0/campaigns/1/images')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n            ],\n        ],\n    ]);\n\nit('GETS a specific image')\n    ->asUser(true)\n    ->withCampaign()\n    ->withImages()\n    ->get('/api/1.0/campaigns/1/images/16598f1b-7d93-36d9-bea5-212bfa1e354b')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n        ],\n    ]);\n\nit('UPDATES a valid image')\n    ->asUser(true)\n    ->withCampaign()\n    ->withImages()\n    ->putJson('/api/1.0/campaigns/1/images/16598f1b-7d93-36d9-bea5-212bfa1e354b', ['name' => 'bob', 'content' => 'content', 'is_enabled' => true])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'bob']);\n\nit('DELETES a image')\n    ->asUser(true)\n    ->withCampaign()\n    ->withImages()\n    ->delete('/api/1.0/campaigns/1/images/16598f1b-7d93-36d9-bea5-212bfa1e354b')\n    ->assertStatus(204);\n\nit('DELETES an invalid image')\n    ->asUser(true)\n    ->withCampaign()\n    ->withImages()\n    ->delete('/api/1.0/campaigns/1/images/100')\n    ->assertStatus(404);\n\nit('cant GET a image as a player')\n    ->asUser(true)\n    ->withCampaign()\n    ->withImages()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/images/16598f1b-7d93-36d9-bea5-212bfa1e354b')\n    ->assertStatus(403);\n"
  },
  {
    "path": "tests/Feature/Entities/CampaignMemberTest.php",
    "content": "<?php\n\nit('POSTS an invalid user role form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/users', [])\n    ->assertStatus(422);\n\nit('POSTS a new user role')\n    ->asUser()\n    ->withCampaign()\n    ->withMember()\n    ->postJson('/api/1.0/campaigns/1/users', [\n        'user_id' => 2,\n        'role_id' => 1,\n    ])\n    ->assertJsonFragment([\n        'role successfully added to user',\n    ])\n    ->assertStatus(200);\n\nit('GETS all campaign members')\n    ->asUser()\n    ->withCampaign()\n    ->withMember()\n    ->get('/api/1.0/campaigns/1/users')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n            ],\n        ],\n    ]);\n\nit('GETS a specific campaign member')\n    ->asUser()\n    ->withCampaign()\n    ->withMember()\n    ->get('/api/1.0/campaigns/1/users/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n            ],\n        ],\n    ]);\n\nit('DELETES a user role')\n    ->asUser()\n    ->withCampaign()\n    ->withMember()\n    ->delete('/api/1.0/campaigns/1/users', [\n        'user_id' => 2,\n        'role_id' => 3,\n    ])\n    ->assertJsonFragment([\n        'role successfully removed from the user',\n    ])\n    ->assertStatus(200);\n\nit('DELETES an invalid user role')\n    ->asUser()\n    ->withCampaign()\n    ->withMember()\n    ->delete('/api/1.0/campaigns/1/users')\n    ->assertStatus(422);\n\nit('GETS all campaign roles')\n    ->asUser()\n    ->withCampaign()\n    ->withMember()\n    ->get('/api/1.0/campaigns/1/roles')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n            ],\n        ],\n    ]);\n"
  },
  {
    "path": "tests/Feature/Entities/CampaignStyleTest.php",
    "content": "<?php\n\nit('POSTS a new campaign_style')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 4])\n    ->postJson('/api/1.0/campaigns/1/campaign_styles', [\n        'name' => fake()->name(),\n        'content' => fake()->text(50),\n        'is_enabled' => false,\n        'is_theme' => false,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'campaign_id',\n            'name',\n        ],\n    ]);\n\nit('GETS all campaign_styles')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 4])\n    ->withCampaignStyles()\n    ->get('/api/1.0/campaigns/1/campaign_styles')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'campaign_id',\n                'name',\n            ],\n        ],\n    ]);\n\nit('GETS a specific campaign_style')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 4])\n    ->withCampaignStyles()\n    ->get('/api/1.0/campaigns/1/campaign_styles/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'campaign_id',\n            'name',\n        ],\n    ]);\n\nit('UPDATES a valid campaign_style')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 4])\n    ->withCampaignStyles()\n    ->putJson('/api/1.0/campaigns/1/campaign_styles/1', ['name' => 'bob', 'content' => 'content', 'is_enabled' => true])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'bob']);\n\nit('DELETES a campaign_style')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 4])\n    ->withCampaignStyles()\n    ->delete('/api/1.0/campaigns/1/campaign_styles/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid campaign_style')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 4])\n    ->withCampaignStyles()\n    ->delete('/api/1.0/campaigns/1/campaign_styles/100')\n    ->assertStatus(404);\n\nit('cant GET a campaign_style as a player')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 4])\n    ->withCampaignStyles()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/campaign_styles/1')\n    ->assertStatus(403);\n"
  },
  {
    "path": "tests/Feature/Entities/CharacterTest.php",
    "content": "<?php\n\nuse App\\Models\\Character;\n\nit('POSTS an invalid character form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/characters', [])\n    ->assertStatus(422);\n\nit('POSTS a new character')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/characters', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all characters')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->get('/api/1.0/campaigns/1/characters')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific character')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->get('/api/1.0/campaigns/1/characters/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid character')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->putJson('/api/1.0/campaigns/1/characters/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid character without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->putJson('/api/1.0/campaigns/1/characters/1', ['type' => 'character'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'character']);\n\nit('DELETES a character')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->delete('/api/1.0/campaigns/1/characters/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid character')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->delete('/api/1.0/campaigns/1/characters/100')\n    ->assertStatus(404);\n\nit('can GET a character as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/characters/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private character as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Character::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/characters/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/ConversationMessageTest.php",
    "content": "<?php\n\nit('POSTS an invalid conversation message form')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->postJson('/api/1.0/campaigns/1/conversations/1/conversation_messages', [\n    ])\n    ->assertStatus(422);\n\nit('POSTS a new conversation message')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/conversations/1/conversation_messages', [\n        'character_id' => 1,\n        'conversation_id' => 1,\n        'message' => 'cookies',\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'character_id',\n            'conversation_id',\n            'message',\n        ],\n    ]);\n\nit('GETS all conversation messages')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationMessages()\n    ->get('/api/1.0/campaigns/1/conversations/1/conversation_messages')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'character_id',\n                'conversation_id',\n            ],\n        ],\n    ]);\n\nit('GETS a specific conversation message')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationMessages()\n    ->get('/api/1.0/campaigns/1/conversations/1/conversation_messages/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'character_id',\n            'conversation_id',\n        ],\n    ]);\n\nit('UPDATES a valid conversation message')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationMessages()\n    ->putJson('/api/1.0/campaigns/1/conversations/1/conversation_messages/1', ['message' => 'cookies'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['message' => 'cookies']);\n\nit('DELETES a conversation message')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationMessages()\n    ->delete('/api/1.0/campaigns/1/conversations/1/conversation_messages/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid conversation message')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->delete('/api/1.0/campaigns/1/conversations/1/conversation_messages/100')\n    ->assertStatus(404);\n\nit('can GET a conversation as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationMessages()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/conversations/1/conversation_messages/1')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/Entities/ConversationParticipantTest.php",
    "content": "<?php\n\nit('POSTS an invalid conversation participant form')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->postJson('/api/1.0/campaigns/1/conversations/1/conversation_participants', [\n    ])\n    ->assertStatus(422);\n\nit('POSTS a new conversation participant')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/conversations/1/conversation_participants', [\n        'character_id' => 1,\n        'conversation_id' => 1,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'character_id',\n            'conversation_id',\n        ],\n    ]);\n\nit('GETS all conversation participants')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationParticipants()\n    ->get('/api/1.0/campaigns/1/conversations/1/conversation_participants')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'character_id',\n                'conversation_id',\n            ],\n        ],\n    ]);\n\nit('GETS a specific conversation participant')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationParticipants()\n    ->get('/api/1.0/campaigns/1/conversations/1/conversation_participants/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'character_id',\n            'conversation_id',\n        ],\n    ]);\n\nit('UPDATES a valid conversation participant')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationParticipants()\n    ->putJson('/api/1.0/campaigns/1/conversations/1/conversation_participants/1', ['character_id' => 2])\n    ->assertStatus(200)\n    ->assertJsonFragment(['character_id' => 2]);\n\nit('DELETES a conversation participant')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationParticipants()\n    ->delete('/api/1.0/campaigns/1/conversations/1/conversation_participants/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid conversation participant')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->delete('/api/1.0/campaigns/1/conversations/1/conversation_participants/100')\n    ->assertStatus(404);\n\nit('can GET a conversation as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->withCharacters()\n    ->withConversationParticipants()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/conversations/1/conversation_participants/1')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/Entities/ConversationTest.php",
    "content": "<?php\n\nuse App\\Models\\Conversation;\n\nit('POSTS an invalid conversation form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/conversations', [])\n    ->assertStatus(422);\n\nit('POSTS a new conversation')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/conversations', [\n        'name' => fake()->name(),\n        'target_id' => 2,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all conversations')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->get('/api/1.0/campaigns/1/conversations')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific conversation')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->get('/api/1.0/campaigns/1/conversations/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid conversation')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->putJson('/api/1.0/campaigns/1/conversations/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid conversation without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->putJson('/api/1.0/campaigns/1/conversations/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a conversation')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->delete('/api/1.0/campaigns/1/conversations/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid conversation')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->delete('/api/1.0/campaigns/1/conversations/100')\n    ->assertStatus(404);\n\nit('can GET a conversation as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withConversations()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/conversations/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private conversation as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Conversation::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/conversations/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/CreatureTest.php",
    "content": "<?php\n\nuse App\\Models\\Creature;\n\nit('POSTS an invalid creature form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/creatures', [])\n    ->assertStatus(422);\n\nit('POSTS a new creature')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/creatures', [\n        'name' => fake()->name(),\n        'entry' => 'Entity: [entity:2]',\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all creatures')\n    ->asUser()\n    ->withCampaign()\n    ->withCreatures()\n    ->get('/api/1.0/campaigns/1/creatures')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific creature')\n    ->asUser()\n    ->withCampaign()\n    ->withCreatures()\n    ->get('/api/1.0/campaigns/1/creatures/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid creature')\n    ->asUser()\n    ->withCampaign()\n    ->withCreatures()\n    ->putJson('/api/1.0/campaigns/1/creatures/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid creature without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withCreatures()\n    ->putJson('/api/1.0/campaigns/1/creatures/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a creature')\n    ->asUser()\n    ->withCampaign()\n    ->withCreatures()\n    ->delete('/api/1.0/campaigns/1/creatures/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid creature')\n    ->asUser()\n    ->withCampaign()\n    ->withCreatures()\n    ->delete('/api/1.0/campaigns/1/creatures/100')\n    ->assertStatus(404);\n\nit('can GET a creature as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withCreatures()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/creatures/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private creature as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Creature::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/creatures/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/DiceRollTest.php",
    "content": "<?php\n\nuse App\\Models\\DiceRoll;\n\nit('POSTS an invalid dice_roll form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/dice_rolls', [])\n    ->assertStatus(422);\n\nit('POSTS a new dice_roll')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/dice_rolls', [\n        'name' => fake()->name(),\n        'parameters' => '2d2',\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all dice_rolls')\n    ->asUser()\n    ->withCampaign()\n    ->withDiceRolls()\n    ->get('/api/1.0/campaigns/1/dice_rolls')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific dice_roll')\n    ->asUser()\n    ->withCampaign()\n    ->withDiceRolls()\n    ->get('/api/1.0/campaigns/1/dice_rolls/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid dice_roll')\n    ->asUser()\n    ->withCampaign()\n    ->withDiceRolls()\n    ->putJson('/api/1.0/campaigns/1/dice_rolls/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid dice_roll without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withDiceRolls()\n    ->putJson('/api/1.0/campaigns/1/dice_rolls/1', ['parameters' => '1d2'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['parameters' => '1d2']);\n\nit('DELETES a dice_roll')\n    ->asUser()\n    ->withCampaign()\n    ->withDiceRolls()\n    ->delete('/api/1.0/campaigns/1/dice_rolls/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid dice_roll')\n    ->asUser()\n    ->withCampaign()\n    ->withDiceRolls()\n    ->delete('/api/1.0/campaigns/1/dice_rolls/100')\n    ->assertStatus(404);\n\nit('can GET a dice_roll as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withDiceRolls()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/dice_rolls/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private dice_roll as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    DiceRoll::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/dice_rolls/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/EntityAssetTest.php",
    "content": "<?php\n\nuse Illuminate\\Http\\UploadedFile;\n\nit('POSTS an invalid entity_assets form')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/entity_assets', [])\n    ->assertStatus(422);\n\nit('POSTS a new Alias')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/entity_assets', [\n        'name' => fake()->name(),\n        'entity_id' => 1,\n        'type_id' => 3,\n        'visibility_id' => 1,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('POSTS a new File')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/entity_assets', [\n        'name' => fake()->name(),\n        // 'entity_id' => 1,\n        'type_id' => 1,\n        'visibility_id' => 1,\n        'file' => UploadedFile::fake()->image('avatar.jpg'),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('POSTS a new Link')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/entity_assets', [\n        'name' => fake()->name(),\n        'entity_id' => 1,\n        'type_id' => 2,\n        'visibility_id' => 1,\n        'metadata' => [\n            'url' => 'https://www.google.com',\n            'icon' => 'fa-solid fa-towers',\n        ],\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all entity_assets')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAssets()\n    ->get('/api/1.0/campaigns/1/entities/1/entity_assets')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific asset')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAssets()\n    ->get('/api/1.0/campaigns/1/entities/1/entity_assets/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid asset')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAssets()\n    ->putJson('/api/1.0/campaigns/1/entities/1/entity_assets/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('DELETES an asset')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAssets()\n    ->delete('/api/1.0/campaigns/1/entities/1/entity_assets/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid asset')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAssets()\n    ->delete('/api/1.0/campaigns/1/entities/1/entity_assets/100')\n    ->assertStatus(404);\n"
  },
  {
    "path": "tests/Feature/Entities/EntityAttributeTest.php",
    "content": "<?php\n\nit('POSTS an invalid attributes form')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/attributes', [])\n    ->assertStatus(422);\n\nit('POSTS a new attribute')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/attributes', [\n        'name' => fake()->name(),\n        'type_id' => 1,\n        'api_key' => '1',\n        'value' => 'Entity: [entity:2]',\n        'is_hidden' => 0,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all attributes')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAttributes()\n    ->get('/api/1.0/campaigns/1/entities/1/attributes')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific attribute')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAttributes()\n    ->get('/api/1.0/campaigns/1/entities/1/attributes/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid attribute')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAttributes()\n    ->putJson('/api/1.0/campaigns/1/entities/1/attributes/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid attribute without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAttributes()\n    ->putJson('/api/1.0/campaigns/1/entities/1/attributes/1', ['value' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['value' => 'Magic']);\n\nit('DELETES an attribute')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAttributes()\n    ->delete('/api/1.0/campaigns/1/entities/1/attributes/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid attribute')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withAttributes()\n    ->delete('/api/1.0/campaigns/1/entities/1/attributes/100')\n    ->assertStatus(404);\n"
  },
  {
    "path": "tests/Feature/Entities/EntityDefaultThumbnailTest.php",
    "content": "<?php\n\nuse Illuminate\\Http\\UploadedFile;\n\nit('POSTS a new default thumbnail')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 1])\n    ->postJson('/api/1.0/campaigns/1/default-thumbnails', [\n        'entity_type_id' => 2,\n        'default_entity_image' => UploadedFile::fake()->image('avatar.jpg'),\n    ])\n    ->assertJsonFragment(['data' => 'Default thumbnail successfully uploaded']);\n\nit('GETS all default thumbnails')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 1, 'default_images' => ['characters' => '16598f1b-7d93-36d9-bea5-212bfa1e354b']])\n    ->withImages()\n    ->get('/api/1.0/campaigns/1/default-thumbnails')\n    ->assertStatus(200);\n\nit('DELETES a default thumbnail')\n    ->asUser(true)\n    ->withCampaign(['boost_count' => 1, 'default_images' => ['characters' => '16598f1b-7d93-36d9-bea5-212bfa1e354b']])\n    ->withImages()\n    ->delete('/api/1.0/campaigns/1/default-thumbnails', ['entity_type_id' => 1])\n    ->assertJsonFragment(['data' => 'Default thumbnail successfully deleted']);\n"
  },
  {
    "path": "tests/Feature/Entities/EntityEventTest.php",
    "content": "<?php\n\nit('POSTS an invalid reminders form')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/reminders', [])\n    ->assertStatus(422);\n\nit('POSTS a new entity event')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCalendars()\n    ->postJson('/api/1.0/campaigns/1/entities/1/reminders', [\n        'calendar_id' => 1,\n        'day' => 2,\n        'month' => 2,\n        'year' => 2,\n        'length' => 2,\n        'visibility_id' => 1,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'calendar_id',\n        ],\n    ]);\n\nit('GETS all reminders')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCalendars()\n    ->withReminders()\n    ->get('/api/1.0/campaigns/1/entities/1/reminders')\n    ->assertStatus(200)\n    ->assertJsonFragment([\n        'id' => 1,\n    ]);\n\nit('GETS a specific entity event')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCalendars()\n    ->withReminders()\n    ->get('/api/1.0/campaigns/1/entities/1/reminders/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'calendar_id',\n        ],\n    ]);\n\nit('UPDATES a valid entity event')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCalendars()\n    ->withReminders()\n    ->putJson('/api/1.0/campaigns/1/entities/1/reminders/1', ['length' => 2])\n    ->assertStatus(200)\n    ->assertJsonFragment(['length' => 2]);\n\nit('DELETES an entity event')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCalendars()\n    ->withReminders()\n    ->delete('/api/1.0/campaigns/1/entities/1/reminders/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid entity event')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCalendars()\n    ->withReminders()\n    ->delete('/api/1.0/campaigns/1/entities/1/reminders/100')\n    ->assertStatus(404);\n"
  },
  {
    "path": "tests/Feature/Entities/EntityPostTest.php",
    "content": "<?php\n\nit('POSTS an invalid posts form')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/posts', [])\n    ->assertStatus(422);\n\nit('POSTS a new post')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/posts', [\n        'name' => fake()->name(),\n        'entity_id' => 1,\n        'position' => 1,\n        'entry' => 'Entity: [entity:2]',\n        'is_template' => false,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all posts')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withPosts()\n    ->get('/api/1.0/campaigns/1/entities/1/posts')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific post')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withPosts()\n    ->get('/api/1.0/campaigns/1/entities/1/posts/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid post')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withPosts()\n    ->putJson('/api/1.0/campaigns/1/entities/1/posts/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid post without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withPosts()\n    ->putJson('/api/1.0/campaigns/1/entities/1/posts/1', ['position' => 2])\n    ->assertStatus(200)\n    ->assertJsonFragment(['position' => 2]);\n\nit('DELETES an post')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withPosts()\n    ->delete('/api/1.0/campaigns/1/entities/1/posts/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid post')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withPosts()\n    ->delete('/api/1.0/campaigns/1/entities/1/posts/100')\n    ->assertStatus(404);\n"
  },
  {
    "path": "tests/Feature/Entities/EntityRelationTest.php",
    "content": "<?php\n\nit('POSTS an invalid relations form')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/relations', [])\n    ->assertStatus(422);\n\nit('POSTS a new relation')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/relations', [\n        'relation' => fake()->text(20),\n        'owner_id' => 1,\n        'target_id' => 2,\n        'two_way' => 0,\n        'is_pinned' => 0,\n        'visibility_id' => 1,\n    ])\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'owner_id',\n            ],\n        ],\n    ]);\n\nit('GETS all relations')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withRelations()\n    ->get('/api/1.0/campaigns/1/entities/1/relations')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'owner_id',\n            ],\n        ],\n    ]);\n\nit('GETS a specific relation')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withRelations()\n    ->get('/api/1.0/campaigns/1/entities/1/relations/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'owner_id',\n        ],\n    ]);\n\nit('UPDATES a valid relation')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withRelations()\n    ->putJson('/api/1.0/campaigns/1/entities/1/relations/1', ['attitude' => 100])\n    ->assertStatus(200)\n    ->assertJsonFragment(['attitude' => 100]);\n\nit('DELETES a relation')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withRelations()\n    ->delete('/api/1.0/campaigns/1/entities/1/relations/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid relation')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withRelations()\n    ->delete('/api/1.0/campaigns/1/entities/1/relations/100')\n    ->assertStatus(404);\n"
  },
  {
    "path": "tests/Feature/Entities/EntityTagTest.php",
    "content": "<?php\n\nit('POSTS an invalid entity_tags form')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/entities/1/entity_tags', [])\n    ->assertStatus(422);\n\nit('POSTS a new entity_tag')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withTags()\n    ->postJson('/api/1.0/campaigns/1/entities/1/entity_tags', [\n        // 'entity_id' => 1,\n        'tag_id' => 1,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'tag_id',\n        ],\n    ]);\n\nit('GETS all entity_tags')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withTags()\n    ->withEntityTags()\n    ->get('/api/1.0/campaigns/1/entities/1/entity_tags')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'tag_id',\n            ],\n        ],\n    ]);\n\nit('GETS a specific entity_tag')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withTags()\n    ->withEntityTags()\n    ->get('/api/1.0/campaigns/1/entities/1/entity_tags/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'tag_id',\n        ],\n    ]);\n\nit('UPDATES a valid entity_tag')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withTags()\n    ->withEntityTags()\n    ->putJson('/api/1.0/campaigns/1/entities/1/entity_tags/1', ['tag_id' => 2])\n    ->assertStatus(200)\n    ->assertJsonFragment(['tag_id' => 2]);\n\nit('DELETES an entity_tag')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withTags()\n    ->withEntityTags()\n    ->delete('/api/1.0/campaigns/1/entities/1/entity_tags/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid entity_tag')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withTags()\n    ->withEntityTags()\n    ->delete('/api/1.0/campaigns/1/entities/1/entity_tags/100')\n    ->assertStatus(404);\n\n// For characters, create a character with 1 tag, and make sure it's in the returned json\nit('POSTS a new character with 1 tag')\n    ->asUser()\n    ->withCampaign()\n    ->withTags()\n    ->postJson('/api/1.0/campaigns/1/characters', [\n        'name' => fake()->name(),\n        'tags' => [1],\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'tags',\n        ],\n    ])\n    ->assertJsonFragment([\n        'tags' => [1],\n    ]);\n\n// Create a character with two tags in the factory.\n// Update the character with one of those tags and a third new tag.\n// The result contains one of the original tags + the new tag.\n\nit('PUT the character with 2 tags')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacterTags()\n    ->putJson('/api/1.0/campaigns/1/characters/1', [\n        'tags' => [1, 3],\n        'name' => fake()->name(),\n    ])\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n            'tags',\n        ],\n    ])\n    ->assertJsonFragment([\n        'tags' => [1, 3],\n    ]);\n\n// Create a character with two tags,\n// one of the tags is private.\n// Get the character asPlayer() and validate that the private tag isn't visible\n\nit('POSTS a new character with a private tag')\n    ->asUser()\n    ->withCampaign()\n    ->withPrivateCharacterTags()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/characters/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'entity_id',\n            'tags',\n        ],\n    ])\n    ->assertJsonFragment([\n        'tags' => [1],\n    ]);\n"
  },
  {
    "path": "tests/Feature/Entities/EntityTest.php",
    "content": "<?php\n\nit('GETS all entities')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCreatures()\n    ->get('/api/1.0/campaigns/1/entities')\n    ->assertStatus(200);\n\nit('GETS a specific entity')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCreatures()\n    ->get('/api/1.0/campaigns/1/entities/1')\n    ->assertStatus(200);\n\nit('GETS all creatures')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withCreatures()\n    ->get('/api/1.0/campaigns/1/entities?types=creature')\n    ->assertStatus(200)\n    ->assertJsonCount(5, 'data');\n\nit('Transforms entities')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/transform', [\n        'entities' => [1, 2, 3],\n        'entity_type' => 'organisation',\n    ])\n    ->assertJsonFragment(['success' => 'Succesfully transformed 3 entities.'])\n    ->assertStatus(200);\n\nit('POSTS a new character with a mention and checks that a new entity is created', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    $response = $this->postJson('/api/1.0/campaigns/1/characters', [\n        'name' => fake()->name(),\n        'entry' => '[new:item|Mega sword]',\n    ]);\n    $this->assertStringStartsWith('<p><a href=\"', json_decode($response->content(), true)['data']['entry_parsed']);\n});\n\nit('Transfers entities')\n    ->asUser()\n    ->withCampaign()\n    ->withCampaigns(['created_by' => 1])\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/transfer', [\n        'entities' => [1, 2, 3],\n        'campaign_id' => 2,\n    ])\n    ->assertStatus(200)\n    ->assertJsonFragment(['success' => 'Succesfully transfered 3 entities.']);\n\nit('Copies entities')\n    ->asUser()\n    ->withCampaign()\n    ->withCampaigns(['created_by' => 1])\n    ->withCharacters()\n    ->postJson('/api/1.0/campaigns/1/transfer', [\n        'entities' => [1, 2, 3],\n        'campaign_id' => 2,\n        'copy' => true,\n    ])\n    ->assertStatus(200)\n    ->assertJsonFragment(['success' => 'Succesfully copied 3 entities.']);\n"
  },
  {
    "path": "tests/Feature/Entities/EventTest.php",
    "content": "<?php\n\nuse App\\Models\\Event;\n\nit('POSTS an invalid event form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/events', [])\n    ->assertStatus(422);\n\nit('POSTS a new event')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/events', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all events')\n    ->asUser()\n    ->withCampaign()\n    ->withEvents()\n    ->get('/api/1.0/campaigns/1/events')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific event')\n    ->asUser()\n    ->withCampaign()\n    ->withEvents()\n    ->get('/api/1.0/campaigns/1/events/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid event')\n    ->asUser()\n    ->withCampaign()\n    ->withEvents()\n    ->putJson('/api/1.0/campaigns/1/events/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid event without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withEvents()\n    ->putJson('/api/1.0/campaigns/1/events/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a event')\n    ->asUser()\n    ->withCampaign()\n    ->withEvents()\n    ->delete('/api/1.0/campaigns/1/events/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid event')\n    ->asUser()\n    ->withCampaign()\n    ->withEvents()\n    ->delete('/api/1.0/campaigns/1/events/100')\n    ->assertStatus(404);\n\nit('can GET a event as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withEvents()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/events/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private event as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Event::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/events/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/FamilyTest.php",
    "content": "<?php\n\nuse App\\Models\\Family;\n\nit('POSTS an invalid family form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/families', [])\n    ->assertStatus(422);\n\nit('POSTS a new family')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/families', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all families')\n    ->asUser()\n    ->withCampaign()\n    ->withFamilies()\n    ->get('/api/1.0/campaigns/1/families')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific family')\n    ->asUser()\n    ->withCampaign()\n    ->withFamilies()\n    ->get('/api/1.0/campaigns/1/families/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid family')\n    ->asUser()\n    ->withCampaign()\n    ->withFamilies()\n    ->putJson('/api/1.0/campaigns/1/families/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid family without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withFamilies()\n    ->putJson('/api/1.0/campaigns/1/families/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a family')\n    ->asUser()\n    ->withCampaign()\n    ->withFamilies()\n    ->delete('/api/1.0/campaigns/1/families/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid family')\n    ->asUser()\n    ->withCampaign()\n    ->withFamilies()\n    ->delete('/api/1.0/campaigns/1/families/100')\n    ->assertStatus(404);\n\nit('can GET a family as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withFamilies()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/families/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private family as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Family::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/families/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/ItemTest.php",
    "content": "<?php\n\nuse App\\Models\\Item;\n\nit('POSTS an invalid item form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/items', [])\n    ->assertStatus(422);\n\nit('POSTS a new item')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/items', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all items')\n    ->asUser()\n    ->withCampaign()\n    ->withItems()\n    ->get('/api/1.0/campaigns/1/items')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific item')\n    ->asUser()\n    ->withCampaign()\n    ->withItems()\n    ->get('/api/1.0/campaigns/1/items/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid item')\n    ->asUser()\n    ->withCampaign()\n    ->withItems()\n    ->putJson('/api/1.0/campaigns/1/items/1', ['name' => 'Estus Flask'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Estus Flask']);\n\nit('UPDATES a valid item without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withItems()\n    ->putJson('/api/1.0/campaigns/1/items/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a item')\n    ->asUser()\n    ->withCampaign()\n    ->withItems()\n    ->delete('/api/1.0/campaigns/1/items/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid item')\n    ->asUser()\n    ->withCampaign()\n    ->withItems()\n    ->delete('/api/1.0/campaigns/1/items/100')\n    ->assertStatus(404);\n\nit('can GET a item as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withItems()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/items/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private item as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Item::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/items/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/JournalTest.php",
    "content": "<?php\n\nuse App\\Models\\Journal;\n\nit('POSTS an invalid journal form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/journals', [])\n    ->assertStatus(422);\n\nit('POSTS a new journal')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/journals', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all journals')\n    ->asUser()\n    ->withCampaign()\n    ->withJournals()\n    ->get('/api/1.0/campaigns/1/journals')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific journal')\n    ->asUser()\n    ->withCampaign()\n    ->withJournals()\n    ->get('/api/1.0/campaigns/1/journals/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid journal')\n    ->asUser()\n    ->withCampaign()\n    ->withJournals()\n    ->putJson('/api/1.0/campaigns/1/journals/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid journal without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withJournals()\n    ->putJson('/api/1.0/campaigns/1/journals/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a journal')\n    ->asUser()\n    ->withCampaign()\n    ->withJournals()\n    ->delete('/api/1.0/campaigns/1/journals/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid journal')\n    ->asUser()\n    ->withCampaign()\n    ->withJournals()\n    ->delete('/api/1.0/campaigns/1/journals/100')\n    ->assertStatus(404);\n\nit('can GET a journal as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withJournals()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/journals/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private journal as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Journal::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/journals/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/LocationTest.php",
    "content": "<?php\n\nuse App\\Models\\Location;\n\nit('POSTS an invalid location form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/locations', [])\n    ->assertStatus(422);\n\nit('POSTS a new location')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/locations', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all locations')\n    ->asUser()\n    ->withCampaign()\n    ->withLocations()\n    ->get('/api/1.0/campaigns/1/locations')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific location')\n    ->asUser()\n    ->withCampaign()\n    ->withLocations()\n    ->get('/api/1.0/campaigns/1/locations/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid location')\n    ->asUser()\n    ->withCampaign()\n    ->withLocations()\n    ->putJson('/api/1.0/campaigns/1/locations/1', ['name' => 'Firelink Shrine'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Firelink Shrine']);\n\nit('UPDATES a valid location without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withLocations()\n    ->putJson('/api/1.0/campaigns/1/locations/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a location')\n    ->asUser()\n    ->withCampaign()\n    ->withLocations()\n    ->delete('/api/1.0/campaigns/1/locations/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid location')\n    ->asUser()\n    ->withCampaign()\n    ->withLocations()\n    ->delete('/api/1.0/campaigns/1/locations/100')\n    ->assertStatus(404);\n\nit('can GET a location as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withLocations()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/locations/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private location as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Location::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/locations/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/MapGroupTest.php",
    "content": "<?php\n\nit('POSTS an invalid map group form')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->postJson('/api/1.0/campaigns/1/maps/1/map_groups', [])\n    ->assertStatus(422);\n\nit('POSTS a new map group')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->postJson('/api/1.0/campaigns/1/maps/1/map_groups', [\n        'name' => fake()->name(),\n        'map_id' => 1,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'map_id',\n        ],\n    ]);\n\nit('GETS all maps groups')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapGroups()\n    ->get('/api/1.0/campaigns/1/maps/1/map_groups')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific map group')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapGroups()\n    ->get('/api/1.0/campaigns/1/maps/1/map_groups/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid map group')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapGroups()\n    ->putJson('/api/1.0/campaigns/1/maps/1/map_groups/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('DELETES a map group')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapGroups()\n    ->delete('/api/1.0/campaigns/1/maps/1/map_groups/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid map group')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapGroups()\n    ->delete('/api/1.0/campaigns/1/maps/1/map_groups/100')\n    ->assertStatus(404);\n\nit('can GET a map group as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapGroups()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/maps/1/map_groups/1')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/Entities/MapLayerTest.php",
    "content": "<?php\n\nit('POSTS an invalid map layer form')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->postJson('/api/1.0/campaigns/1/maps/1/map_layers', [])\n    ->assertStatus(422);\n\nit('POSTS a new map layer')\n    ->asUser()\n    ->withCampaign()\n    ->withImages()\n    ->withMaps()\n    ->postJson('/api/1.0/campaigns/1/maps/1/map_layers', [\n        'name' => fake()->name(),\n        'image_uuid' => '16598f1b-7d93-36d9-bea5-212bfa1e354b',\n        'map_id' => 1,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'map_id',\n        ],\n    ]);\n\nit('GETS all maps layers')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapLayers()\n    ->get('/api/1.0/campaigns/1/maps/1/map_layers')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific map layer')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapLayers()\n    ->get('/api/1.0/campaigns/1/maps/1/map_layers/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid map layer')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapLayers()\n    ->putJson('/api/1.0/campaigns/1/maps/1/map_layers/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('DELETES a map layer')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapLayers()\n    ->delete('/api/1.0/campaigns/1/maps/1/map_layers/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid map layer')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapLayers()\n    ->delete('/api/1.0/campaigns/1/maps/1/map_layers/100')\n    ->assertStatus(404);\n\nit('can GET a map layer as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapLayers()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/maps/1/map_layers/1')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/Entities/MapMarkerTest.php",
    "content": "<?php\n\nit('POSTS an invalid map marker form')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->postJson('/api/1.0/campaigns/1/maps/1/map_markers', [])\n    ->assertStatus(422);\n\nit('POSTS a new map marker')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->postJson('/api/1.0/campaigns/1/maps/1/map_markers', [\n        'name' => fake()->name(),\n        'map_id' => 1,\n        'longitude' => 1,\n        'latitude' => 1,\n        'icon' => 1,\n        'shape_id' => 1,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'map_id',\n        ],\n    ]);\n\nit('GETS all maps markers')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapMarkers()\n    ->get('/api/1.0/campaigns/1/maps/1/map_markers')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific map marker')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapMarkers()\n    ->get('/api/1.0/campaigns/1/maps/1/map_markers/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid map marker')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapMarkers()\n    ->putJson('/api/1.0/campaigns/1/maps/1/map_markers/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('DELETES a map marker')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapMarkers()\n    ->delete('/api/1.0/campaigns/1/maps/1/map_markers/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid map marker')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapMarkers()\n    ->delete('/api/1.0/campaigns/1/maps/1/map_markers/100')\n    ->assertStatus(404);\n\nit('can GET a map marker as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->withMapMarkers()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/maps/1/map_markers/1')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/Entities/MapTest.php",
    "content": "<?php\n\nuse App\\Models\\Map;\n\nit('POSTS an invalid map form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/maps', [])\n    ->assertStatus(422);\n\nit('POSTS a new map')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/maps', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all maps')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->get('/api/1.0/campaigns/1/maps')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific map')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->get('/api/1.0/campaigns/1/maps/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid map')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->putJson('/api/1.0/campaigns/1/maps/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid map without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->putJson('/api/1.0/campaigns/1/maps/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a map')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->delete('/api/1.0/campaigns/1/maps/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid map')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->delete('/api/1.0/campaigns/1/maps/100')\n    ->assertStatus(404);\n\nit('can GET a map as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withMaps()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/maps/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private map as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Map::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/maps/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/NoteTest.php",
    "content": "<?php\n\nuse App\\Models\\Note;\n\nit('POSTS an invalid note form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/notes', [])\n    ->assertStatus(422);\n\nit('POSTS a new note')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/notes', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all notes')\n    ->asUser()\n    ->withCampaign()\n    ->withNotes()\n    ->get('/api/1.0/campaigns/1/notes')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific note')\n    ->asUser()\n    ->withCampaign()\n    ->withNotes()\n    ->get('/api/1.0/campaigns/1/notes/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid note')\n    ->asUser()\n    ->withCampaign()\n    ->withNotes()\n    ->putJson('/api/1.0/campaigns/1/notes/1', ['name' => 'Shopping List'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Shopping List']);\n\nit('UPDATES a valid note without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withNotes()\n    ->putJson('/api/1.0/campaigns/1/notes/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a note')\n    ->asUser()\n    ->withCampaign()\n    ->withNotes()\n    ->delete('/api/1.0/campaigns/1/notes/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid note')\n    ->asUser()\n    ->withCampaign()\n    ->withNotes()\n    ->delete('/api/1.0/campaigns/1/notes/100')\n    ->assertStatus(404);\n\nit('can GET a note as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withNotes()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/notes/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private note as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Note::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/notes/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/OrganisationTest.php",
    "content": "<?php\n\nuse App\\Models\\Organisation;\n\nit('POSTS an invalid organisation form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/organisations', [])\n    ->assertStatus(422);\n\nit('POSTS a new organisation')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/organisations', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all organisations')\n    ->asUser()\n    ->withCampaign()\n    ->withOrganisations()\n    ->get('/api/1.0/campaigns/1/organisations')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific organisation')\n    ->asUser()\n    ->withCampaign()\n    ->withOrganisations()\n    ->get('/api/1.0/campaigns/1/organisations/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid organisation')\n    ->asUser()\n    ->withCampaign()\n    ->withOrganisations()\n    ->putJson('/api/1.0/campaigns/1/organisations/1', ['name' => 'Republic of Dave'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Republic of Dave']);\n\nit('UPDATES a valid organisation without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withOrganisations()\n    ->putJson('/api/1.0/campaigns/1/organisations/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a organisation')\n    ->asUser()\n    ->withCampaign()\n    ->withOrganisations()\n    ->delete('/api/1.0/campaigns/1/organisations/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid organisation')\n    ->asUser()\n    ->withCampaign()\n    ->withOrganisations()\n    ->delete('/api/1.0/campaigns/1/organisations/100')\n    ->assertStatus(404);\n\nit('can GET a organisation as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withOrganisations()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/organisations/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private organisation as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Organisation::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/organisations/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/PermissionTest.php",
    "content": "<?php\n\nit('POSTS a new permission test')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->asPlayer()\n    ->postJson('/api/1.0/campaigns/1/permissions/test', [\n        [\n            'user_id' => 2,\n            'entity_type_id' => 1,\n            'action' => 1,\n        ],\n    ])\n    ->assertStatus(200);\n\nit('POSTS a new permission')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withMember()\n    ->postJson('/api/1.0/campaigns/1/entities/1/entity_permissions', [\n        [\n            'campaign_role_id' => 2,\n            'access' => 1,\n            'action' => 1,\n        ],\n    ])\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'access',\n            ],\n        ],\n    ])\n    ->assertStatus(200);\n\nit('DELETES a permission')\n    ->asUser()\n    ->withCampaign()\n    ->withCharacters()\n    ->withPermissions()\n    ->delete('/api/1.0/campaigns/1/entities/1/entity_permissions/1')\n    ->assertStatus(204);\n"
  },
  {
    "path": "tests/Feature/Entities/QuestElementTest.php",
    "content": "<?php\n\nit('POSTS an invalid quest element form')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->postJson('/api/1.0/campaigns/1/quests/1/quest_elements', [])\n    ->assertStatus(422);\n\nit('POSTS a new quest element')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->postJson('/api/1.0/campaigns/1/quests/1/quest_elements', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all quest elements')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->withQuestElements()\n    ->get('/api/1.0/campaigns/1/quests/1/quest_elements')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n            ],\n        ],\n    ]);\n\nit('GETS a specific quest element')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->withQuestElements()\n    ->get('/api/1.0/campaigns/1/quests/1/quest_elements/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n        ],\n    ]);\n\nit('UPDATES a valid quest element')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->withQuestElements()\n    ->putJson('/api/1.0/campaigns/1/quests/1/quest_elements/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid quest element without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->withQuestElements()\n    ->putJson('/api/1.0/campaigns/1/quests/1/quest_elements/1', ['entity_id' => 2, 'role' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['role' => 'Magic']);\n\nit('UPDATES a valid quest element without a name and fails')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->withQuestElements()\n    ->putJson('/api/1.0/campaigns/1/quests/1/quest_elements/1', ['role' => 'Magic'])\n    ->assertStatus(422);\n\nit('DELETES a quest element')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->withQuestElements()\n    ->delete('/api/1.0/campaigns/1/quests/1/quest_elements/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid quest element')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->withQuestElements()\n    ->delete('/api/1.0/campaigns/1/quests/1/quest_elements/1000')\n    ->assertStatus(404);\n\nit('can GET a quest element as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->withQuestElements()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/quests/1/quest_elements/1')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/Entities/QuestTest.php",
    "content": "<?php\n\nuse App\\Models\\Quest;\n\nit('POSTS an invalid quest form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/quests', [])\n    ->assertStatus(422);\n\nit('POSTS a new quest')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/quests', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all quests')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->get('/api/1.0/campaigns/1/quests')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific quest')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->get('/api/1.0/campaigns/1/quests/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid quest')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->putJson('/api/1.0/campaigns/1/quests/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid quest without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->putJson('/api/1.0/campaigns/1/quests/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a quest')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->delete('/api/1.0/campaigns/1/quests/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid quest')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->delete('/api/1.0/campaigns/1/quests/100')\n    ->assertStatus(404);\n\nit('can GET a quest as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withQuests()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/quests/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private quest as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Quest::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/quests/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/RaceTest.php",
    "content": "<?php\n\nuse App\\Models\\Race;\n\nit('POSTS an invalid race form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/races', [])\n    ->assertStatus(422);\n\nit('POSTS a new race')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/races', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all races')\n    ->asUser()\n    ->withCampaign()\n    ->withRaces()\n    ->get('/api/1.0/campaigns/1/races')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific race')\n    ->asUser()\n    ->withCampaign()\n    ->withRaces()\n    ->get('/api/1.0/campaigns/1/races/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid race')\n    ->asUser()\n    ->withCampaign()\n    ->withRaces()\n    ->putJson('/api/1.0/campaigns/1/races/1', ['name' => 'Goblin'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Goblin']);\n\nit('UPDATES a valid race without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withRaces()\n    ->putJson('/api/1.0/campaigns/1/races/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a race')\n    ->asUser()\n    ->withCampaign()\n    ->withRaces()\n    ->delete('/api/1.0/campaigns/1/races/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid race')\n    ->asUser()\n    ->withCampaign()\n    ->withRaces()\n    ->delete('/api/1.0/campaigns/1/races/100')\n    ->assertStatus(404);\n\nit('can GET a race as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withRaces()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/races/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private race as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Race::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/races/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/RateLimitingTest.php",
    "content": "<?php\n\nit('Tests rate limit of non subscriber')\n    ->asUser()\n    ->withCampaign()\n    ->call('GET', '/api/1.0/entity-types')\n    ->assertHeader('x-ratelimit-limit', '30');\n\nit('Tests rate limit of subscriber')\n    ->asUser(true)\n    ->withCampaign()\n    ->call('GET', '/api/1.0/entity-types')\n    ->assertHeader('x-ratelimit-limit', '90');\n"
  },
  {
    "path": "tests/Feature/Entities/TagTest.php",
    "content": "<?php\n\nuse App\\Models\\Tag;\n\nit('POSTS an invalid tag form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/tags', [])\n    ->assertStatus(422);\n\nit('POSTS a new tag')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/tags', [\n        'name' => fake()->name(),\n        'is_hidden' => 0,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all tags')\n    ->asUser()\n    ->withCampaign()\n    ->withTags()\n    ->get('/api/1.0/campaigns/1/tags')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific tag')\n    ->asUser()\n    ->withCampaign()\n    ->withTags()\n    ->get('/api/1.0/campaigns/1/tags/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid tag')\n    ->asUser()\n    ->withCampaign()\n    ->withTags()\n    ->putJson('/api/1.0/campaigns/1/tags/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid tag without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withTags()\n    ->putJson('/api/1.0/campaigns/1/tags/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a tag')\n    ->asUser()\n    ->withCampaign()\n    ->withTags()\n    ->delete('/api/1.0/campaigns/1/tags/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid tag')\n    ->asUser()\n    ->withCampaign()\n    ->withTags()\n    ->delete('/api/1.0/campaigns/1/tags/100')\n    ->assertStatus(404);\n\nit('can GET a tag as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withTags()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/tags/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private tag as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Tag::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/tags/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/Entities/TimelineElementTest.php",
    "content": "<?php\n\nit('POSTS an invalid timeline element element form')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->postJson('/api/1.0/campaigns/1/timelines/1/timeline_elements', [])\n    ->assertStatus(422);\n\nit('POSTS a new timeline element')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->postJson('/api/1.0/campaigns/1/timelines/1/timeline_elements', [\n        'name' => fake()->name(),\n        'era_id' => 1,\n        'entry' => '',\n        'use_event_date' => true,\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n        ],\n    ]);\n\nit('GETS all timeline elements')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->withTimelineElements()\n    ->get('/api/1.0/campaigns/1/timelines/1/timeline_elements')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n            ],\n        ],\n    ]);\n\nit('GETS a specific timeline element')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->withTimelineElements()\n    ->get('/api/1.0/campaigns/1/timelines/1/timeline_elements/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n        ],\n    ]);\n\nit('UPDATES a valid timeline element')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->withTimelineElements()\n    ->putJson('/api/1.0/campaigns/1/timelines/1/timeline_elements/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('DELETES a timeline element')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->withTimelineElements()\n    ->delete('/api/1.0/campaigns/1/timelines/1/timeline_elements/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid timeline')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->withTimelineElements()\n    ->delete('/api/1.0/campaigns/1/timelines/1/timeline_elements/100')\n    ->assertStatus(404);\n\nit('can GET a timeline as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->withTimelineElements()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/timelines/1/timeline_elements/1')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/Entities/TimelineEraTest.php",
    "content": "<?php\n\nit('POSTS an invalid timeline era form')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->postJson('/api/1.0/campaigns/1/timelines/1/timeline_eras', [])\n    ->assertStatus(422);\n\nit('POSTS a new timeline era')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->postJson('/api/1.0/campaigns/1/timelines/1/timeline_eras', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n        ],\n    ]);\n\nit('GETS all timeline eras')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->get('/api/1.0/campaigns/1/timelines/1/timeline_eras')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'name',\n            ],\n        ],\n    ]);\n\nit('GETS a specific timeline era')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->get('/api/1.0/campaigns/1/timelines/1/timeline_eras/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n        ],\n    ]);\n\nit('UPDATES a valid timeline era')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->putJson('/api/1.0/campaigns/1/timelines/1/timeline_eras/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid timeline era without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->putJson('/api/1.0/campaigns/1/timelines/1/timeline_eras/1', ['entry' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['entry' => '<p>Magic</p>']);\n\nit('DELETES a timeline era')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->delete('/api/1.0/campaigns/1/timelines/1/timeline_eras/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid timeline')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->delete('/api/1.0/campaigns/1/timelines/1/timeline_eras/100')\n    ->assertStatus(404);\n\nit('can GET a timeline as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->withTimelineEras()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/timelines/1/timeline_eras/1')\n    ->assertStatus(200);\n"
  },
  {
    "path": "tests/Feature/Entities/TimelineTest.php",
    "content": "<?php\n\nuse App\\Models\\Timeline;\n\nit('POSTS an invalid timeline form')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/timelines', [])\n    ->assertStatus(422);\n\nit('POSTS a new timeline')\n    ->asUser()\n    ->withCampaign()\n    ->postJson('/api/1.0/campaigns/1/timelines', [\n        'name' => fake()->name(),\n    ])\n    ->assertStatus(201)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'entity_id',\n        ],\n    ]);\n\nit('GETS all timelines')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->get('/api/1.0/campaigns/1/timelines')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            [\n                'id',\n                'entity_id',\n                'name',\n                'is_private',\n            ],\n        ],\n    ]);\n\nit('GETS a specific timeline')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->get('/api/1.0/campaigns/1/timelines/1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_private',\n        ],\n    ]);\n\nit('UPDATES a valid timeline')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->putJson('/api/1.0/campaigns/1/timelines/1', ['name' => 'Bob'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['name' => 'Bob']);\n\nit('UPDATES a valid timeline without a name')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->putJson('/api/1.0/campaigns/1/timelines/1', ['type' => 'Magic'])\n    ->assertStatus(200)\n    ->assertJsonFragment(['type' => 'Magic']);\n\nit('DELETES a timeline')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->delete('/api/1.0/campaigns/1/timelines/1')\n    ->assertStatus(204);\n\nit('DELETES an invalid timeline')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->delete('/api/1.0/campaigns/1/timelines/100')\n    ->assertStatus(404);\n\nit('can GET a timeline as a player')\n    ->asUser()\n    ->withCampaign()\n    ->withTimelines()\n    ->asPlayer()\n    ->get('/api/1.0/campaigns/1/timelines/1')\n    ->assertStatus(200);\n\n/**\n * This example showcases building a custom function in the test to avoid polluting the TestCase file with lots of\n * on-off function calls.\n */\nit('can\\'t GET a private timeline as a player', function () {\n    $this->asUser()\n        ->withCampaign();\n\n    Timeline::factory()\n        ->count(5)\n        ->create(['campaign_id' => 1, 'is_private' => true]);\n\n    $this->asPlayer();\n\n    $response = $this->get('/api/1.0/campaigns/1/timelines/1');\n    expect($response->status())\n        ->toBe(403);\n});\n"
  },
  {
    "path": "tests/Feature/EnvTest.php",
    "content": "<?php\n\nit('environment:testing', function () {\n    expect(env('APP_ENV'))->toBe('testing');\n});\n\nit('environment:db', function () {\n    expect(env('DB_CONNECTION'))->toBe('sqlite')\n        ->and(env('DB_DATABASE'))->toBe(':memory:')\n        ->and(env('DB_LOGS_DATABASE'))->toBeEmpty();\n});\n"
  },
  {
    "path": "tests/Feature/FrontCampaignTest.php",
    "content": "<?php\n\nuse App\\Enums\\CampaignVisibility;\n\nit('setup GET')\n    ->asUser()\n    ->withCampaign(['visibility_id' => CampaignVisibility::public->value, 'is_featured' => true])\n    ->get('/api/public/campaigns-setup')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'filters' => [\n            'language',\n            'system[]',\n            'is_boosted',\n            'is_open',\n            'genre',\n        ],\n        'featured' => [\n            [\n                'id',\n                'name',\n                'link',\n                'thumb',\n                'entities',\n                'followers',\n                'locale',\n                'system',\n            ],\n        ],\n    ]);\n\nit('public campaigns GET')\n    ->asUser()\n    ->withCampaign(['visibility_id' => CampaignVisibility::public])\n    ->get('/api/public/campaigns')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'campaigns' => [\n            [\n                'id',\n                'name',\n                'link',\n                'thumb',\n                'entities',\n                'followers',\n                'locale',\n                'system',\n            ],\n        ],\n    ]);\n\nit('filtering GET 0 results')\n    ->asUser()\n    ->withCampaign(['visibility_id' => CampaignVisibility::public, 'is_featured' => true, 'boost_count' => 0])\n    ->get('/api/public/campaigns?is_boosted=1')\n    ->assertStatus(200)\n    ->assertJsonCount(0, 'campaigns');\n\nit('filtering premium GET')\n    ->asUser()\n    ->withCampaign(['visibility_id' => CampaignVisibility::public, 'boost_count' => 3])\n    ->get('/api/public/campaigns?is_boosted=1')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'campaigns' => [\n            [\n                'id',\n                'name',\n                'link',\n                'thumb',\n                'entities',\n                'followers',\n                'locale',\n                'system',\n            ],\n        ],\n    ]);\nit('filtering locale GET')\n    ->asUser()\n    ->withCampaign(['visibility_id' => CampaignVisibility::public, 'boost_count' => 3, 'locale' => 'fr'])\n    ->get('/api/public/campaigns?language=fr')\n    ->assertStatus(200)\n    ->assertJsonCount(1, 'campaigns');\n\nit('public campaigns GET but no results due to unlisted visibility')\n    ->asUser()\n    ->withCampaign(['visibility_id' => CampaignVisibility::unlisted])\n    ->get('/api/public/campaigns')\n    ->assertStatus(200)\n    ->assertJsonCount(0, 'campaigns');\n"
  },
  {
    "path": "tests/Feature/ProfileTest.php",
    "content": "<?php\n\nit('profile GET')\n    ->asUser()\n    ->get('/api/1.0/profile')\n    ->assertStatus(200)\n    ->assertJsonStructure([\n        'data' => [\n            'id',\n            'name',\n            'is_subscriber',\n            'rate_limit',\n        ],\n    ])\n    ->assertJson(['data' => ['id' => 1]])\n    ->assertJsonMissingPath('data.password');\n"
  },
  {
    "path": "tests/Pest.php",
    "content": "<?php\n\nuse Illuminate\\Foundation\\Testing\\DatabaseMigrations;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\nuse Tests\\TestCase;\n\n/*\n|--------------------------------------------------------------------------\n| Test Case\n|--------------------------------------------------------------------------\n|\n| The closure you provide to your test functions is always bound to a specific PHPUnit test\n| case class. By default, that class is \"PHPUnit\\Framework\\TestCase\". Of course, you may\n| need to change it using the \"uses()\" function to bind a different classes or traits.\n|\n*/\n\nuses(\n    TestCase::class,\n    // DatabaseMigrations::class,\n    RefreshDatabase::class,\n)->in('Feature');\n\n/*\n|--------------------------------------------------------------------------\n| Expectations\n|--------------------------------------------------------------------------\n|\n| When you're writing tests, you often need to check that values meet certain conditions. The\n| \"expect()\" function gives you access to a set of \"expectations\" methods that you can use\n| to assert different things. Of course, you may extend the Expectation API at any time.\n|\n*/\n\nexpect()->extend('toBeOne', function () {\n    return $this->toBe(1);\n});\n\n/*\n|--------------------------------------------------------------------------\n| Functions\n|--------------------------------------------------------------------------\n|\n| While Pest is very powerful out-of-the-box, you may have some testing code specific to your\n| project that you don't want to repeat in every file. Here you can also expose helpers as\n| global functions to help you to reduce the number of lines of code in your test files.\n|\n*/\n\nfunction something()\n{\n    // ..\n}\n"
  },
  {
    "path": "tests/TestCase.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse App\\Facades\\Avatar;\nuse App\\Facades\\BookmarkCache;\nuse App\\Facades\\CampaignCache;\nuse App\\Facades\\CampaignLocalization;\nuse App\\Facades\\CharacterCache;\nuse App\\Facades\\EntityAssetCache;\nuse App\\Facades\\EntityCache;\nuse App\\Facades\\MapMarkerCache;\nuse App\\Facades\\Mentions;\nuse App\\Facades\\Module;\nuse App\\Facades\\QuestCache;\nuse App\\Facades\\TimelineElementCache;\nuse App\\Facades\\UserCache;\nuse App\\Models\\Ability;\nuse App\\Models\\Attribute;\nuse App\\Models\\Bookmark;\nuse App\\Models\\Calendar;\nuse App\\Models\\Campaign;\nuse App\\Models\\CampaignDashboardWidget;\nuse App\\Models\\CampaignPermission;\nuse App\\Models\\CampaignRole;\nuse App\\Models\\CampaignRoleUser;\nuse App\\Models\\CampaignSetting;\nuse App\\Models\\CampaignStyle;\nuse App\\Models\\CampaignUser;\nuse App\\Models\\Character;\nuse App\\Models\\Conversation;\nuse App\\Models\\ConversationMessage;\nuse App\\Models\\ConversationParticipant;\nuse App\\Models\\Creature;\nuse App\\Models\\DiceRoll;\nuse App\\Models\\EntityAsset;\nuse App\\Models\\EntityTag;\nuse App\\Models\\EntityType;\nuse App\\Models\\Event;\nuse App\\Models\\Family;\nuse App\\Models\\Image;\nuse App\\Models\\Item;\nuse App\\Models\\Journal;\nuse App\\Models\\Location;\nuse App\\Models\\Map;\nuse App\\Models\\MapGroup;\nuse App\\Models\\MapLayer;\nuse App\\Models\\MapMarker;\nuse App\\Models\\Note;\nuse App\\Models\\Organisation;\nuse App\\Models\\Post;\nuse App\\Models\\Quest;\nuse App\\Models\\QuestElement;\nuse App\\Models\\Race;\nuse App\\Models\\Relation;\nuse App\\Models\\Reminder;\nuse App\\Models\\Tag;\nuse App\\Models\\Timeline;\nuse App\\Models\\TimelineElement;\nuse App\\Models\\TimelineEra;\nuse App\\Models\\User;\nuse App\\Services\\Permissions\\RolePermissionService;\nuse Carbon\\Carbon;\nuse Database\\Seeders\\EntityTypesTableSeeder;\nuse Database\\Seeders\\VisibilitiesTableSeeder;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Foundation\\Testing\\TestCase as BaseTestCase;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Laravel\\Cashier\\Subscription;\nuse Laravel\\Passport\\Passport;\n\nabstract class TestCase extends BaseTestCase\n{\n    use CreatesApplication;\n\n    protected bool $isPlayer = false;\n\n    protected function setUp(): void\n    {\n        parent::setUp();\n        // putenv(LaravelLocalization::ENV_ROUTE_KEY . '=' . 'en');\n\n        // putenv(LaravelLocalization::ENV_ROUTE_KEY . '=' . 'en');\n    }\n\n    public function asUser(bool $subscribed = false): self\n    {\n        $user = User::factory()->create();\n        Passport::actingAs(\n            $user,\n            ['*']\n        );\n        if ($subscribed) {\n            // Add the subscriber role\n            $user->roles()->syncWithoutDetaching([5]);\n\n            // Add the subscription to the user level\n            $user->pledge = 'Elemental';\n            $user->save();\n\n            $sub = new Subscription;\n            $sub->user_id = $user->id;\n            $sub->type = 'kanka';\n            $sub->stripe_id = 'manual_sub_' . uniqid();\n            $sub->stripe_status = 'canceled';\n            $sub->stripe_price = 'paypal_' . $user->pledge;\n            $sub->quantity = 1;\n            $sub->ends_at = Carbon::now()->addYear();\n            $sub->save();\n        }\n\n        return $this;\n    }\n\n    public function asPlayer(): self\n    {\n        $user2 = User::factory()->create();\n        Passport::actingAs(\n            $user2,\n            ['*']\n        );\n\n        $this->isPlayer = true;\n        CampaignUser::create([\n            'campaign_id' => 1,\n            'user_id' => $user2->id,\n        ]);\n\n        CampaignRoleUser::create([\n            'campaign_role_id' => 3,\n            'user_id' => $user2->id,\n        ]);\n\n        return $this;\n    }\n\n    public function withMember(): self\n    {\n        $user3 = User::factory()->create();\n\n        CampaignUser::create([\n            'campaign_id' => 1,\n            'user_id' => $user3->id,\n        ]);\n\n        CampaignRoleUser::create([\n            'campaign_role_id' => 3,\n            'user_id' => $user3->id,\n        ]);\n\n        return $this;\n    }\n\n    public function withCampaign(array $extra = []): self\n    {\n        $this->seed(VisibilitiesTableSeeder::class);\n        $this->seed(EntityTypesTableSeeder::class);\n        Storage::fake('s3');\n\n        $campaign = Campaign::factory()->create($extra + ['slug' => 'test-campaign']);\n        CampaignLocalization::forceCampaign($campaign);\n\n        CampaignUser::create([\n            'campaign_id' => 1,\n            'user_id' => 1,\n        ]);\n\n        CampaignRole::create([\n            'campaign_id' => $campaign->id,\n            'name' => __('campaigns.members.roles.owner'),\n            'is_admin' => true,\n        ]);\n\n        $readOnlyRoles = [];\n\n        $readOnlyRoles[] = CampaignRole::create([\n            'campaign_id' => $campaign->id,\n            'name' => __('campaigns.members.roles.public'),\n            'is_public' => true,\n        ]);\n\n        $readOnlyRoles[] = CampaignRole::create([\n            'campaign_id' => $campaign->id,\n            'name' => __('campaigns.members.roles.player'),\n        ]);\n\n        $entityTypes = EntityType::default()->get();\n\n        foreach ($readOnlyRoles as $readOnlyRole) {\n            foreach ($entityTypes as $entityType) {\n                CampaignPermission::create([\n                    'campaign_role_id' => $readOnlyRole->id,\n                    'access' => true,\n                    'action' => CampaignPermission::ACTION_READ,\n                    'entity_type_id' => $entityType->id,\n                ]);\n            }\n        }\n\n        CampaignRoleUser::create([\n            'campaign_role_id' => 1,\n            'user_id' => 1,\n        ]);\n\n        $setting = new CampaignSetting([\n            'campaign_id' => $campaign->id,\n            'dice_rolls' => 0,\n            'conversations' => 0,\n        ]);\n        $setting->save();\n\n        EntityCache::campaign($campaign);\n        CampaignCache::campaign($campaign);\n        UserCache::campaign($campaign);\n        Mentions::campaign($campaign);\n        Module::campaign($campaign);\n        QuestCache::campaign($campaign);\n        BookmarkCache::campaign($campaign);\n        EntityAssetCache::campaign($campaign);\n        TimelineElementCache::campaign($campaign);\n        CharacterCache::campaign($campaign);\n        MapMarkerCache::campaign($campaign);\n        Avatar::campaign($campaign);\n\n        return $this;\n    }\n\n    public function withCampaigns(array $extra = []): self\n    {\n        Campaign::factory()->create($extra + ['slug' => 'test-campaign-2']);\n\n        CampaignUser::create([\n            'campaign_id' => 2,\n            'user_id' => 1,\n        ]);\n\n        CampaignRole::create([\n            'campaign_id' => 2,\n            'name' => __('campaigns.members.roles.owner'),\n            'is_admin' => true,\n        ]);\n\n        CampaignRoleUser::create([\n            'campaign_role_id' => 4,\n            'user_id' => 1,\n        ]);\n\n        $setting = new CampaignSetting([\n            'campaign_id' => 2,\n            'dice_rolls' => 0,\n            'conversations' => 0,\n        ]);\n        $setting->save();\n\n        return $this;\n    }\n\n    public function withPermissions(array $extra = []): self\n    {\n        /** @var RolePermissionService $service */\n        $service = app()->make(RolePermissionService::class);\n        $service->role(CampaignRole::where('id', 3)->first())->entityType(EntityType::find(1))->toggle(1, 1);\n        $service->role(CampaignRole::where('id', 3)->first())->entityType(EntityType::find(1))->toggle(1, 2);\n        $service->role(CampaignRole::where('id', 3)->first())->entityType(EntityType::find(1))->toggle(1, 3);\n\n        return $this;\n    }\n\n    public function withCampaignStyles(array $extra = []): self\n    {\n        CampaignStyle::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withCreatures(array $extra = []): self\n    {\n        Creature::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withCharacters(array $extra = []): self\n    {\n        Character::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withFamilies(array $extra = []): self\n    {\n        Family::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withLocations(array $extra = []): self\n    {\n        Location::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withOrganisations(array $extra = []): self\n    {\n        Organisation::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withItems(array $extra = []): self\n    {\n        Item::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withNotes(array $extra = []): self\n    {\n        Note::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withEvents(array $extra = []): self\n    {\n        Event::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withCalendars(array $extra = []): self\n    {\n        Calendar::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withRaces(array $extra = []): self\n    {\n        Race::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withQuestElements(array $extra = []): self\n    {\n        QuestElement::factory()\n            ->count(5)\n            ->create(['quest_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withQuests(array $extra = []): self\n    {\n        Quest::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withJournals(array $extra = []): self\n    {\n        Journal::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withTags(array $extra = []): self\n    {\n        Tag::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withAbilities(array $extra = []): self\n    {\n        Ability::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withTimelines(array $extra = []): self\n    {\n        Timeline::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withTimelineEras(array $extra = []): self\n    {\n        TimelineEra::factory()\n            ->count(5)\n            ->create(['timeline_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withTimelineElements(array $extra = []): self\n    {\n        TimelineElement::factory()\n            ->count(5)\n            ->create(['timeline_id' => 1, 'era_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withDiceRolls(array $extra = []): self\n    {\n        DiceRoll::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withConversations(array $extra = []): self\n    {\n        Conversation::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withConversationParticipants(array $extra = []): self\n    {\n        ConversationParticipant::factory()\n            ->count(5)\n            ->create(['conversation_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withConversationMessages(array $extra = []): self\n    {\n        ConversationMessage::factory()\n            ->count(5)\n            ->create(['conversation_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withBookmarks(array $extra = []): self\n    {\n        Bookmark::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withMaps(array $extra = []): self\n    {\n        Map::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withMapLayers(array $extra = []): self\n    {\n        MapLayer::factory()\n            ->count(5)\n            ->create(['map_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withMapGroups(array $extra = []): self\n    {\n        MapGroup::factory()\n            ->count(5)\n            ->create(['map_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withMapMarkers(array $extra = []): self\n    {\n        MapMarker::factory()\n            ->count(5)\n            ->create(['map_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withAttributes(array $extra = []): self\n    {\n        Attribute::factory()\n            ->count(5)\n            ->create(['entity_id' => 1, 'type_id' => 1, 'api_key' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withAssets(array $extra = []): self\n    {\n        EntityAsset::factory()\n            ->count(5)\n            ->create(['entity_id' => 1, 'type_id' => 3] + $extra);\n\n        return $this;\n    }\n\n    public function withReminders(array $extra = []): self\n    {\n        Reminder::factory()\n            ->count(5)\n            ->create(['remindable_id' => 1, 'remindable_type' => 'App\\Models\\Entity'] + $extra);\n\n        return $this;\n    }\n\n    public function withPosts(array $extra = []): self\n    {\n        Post::factory()\n            ->count(5)\n            ->create(['entity_id' => 1, 'is_template' => false] + $extra);\n\n        return $this;\n    }\n\n    public function withRelations(array $extra = []): self\n    {\n        Relation::factory()\n            ->count(5)\n            ->create(['owner_id' => 1, 'target_id' => 2, 'campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withEntityTags(array $extra = []): self\n    {\n        EntityTag::factory()\n            ->count(5)\n            ->create($extra);\n\n        return $this;\n    }\n\n    public function withDashboardWidgets(array $extra = []): self\n    {\n        CampaignDashboardWidget::factory()\n            ->count(5)\n            ->create(['campaign_id' => 1]);\n\n        return $this;\n    }\n\n    public function withImages(array $extra = []): self\n    {\n        Image::factory()\n            ->count(1)\n            ->create(['campaign_id' => 1, 'id' => '16598f1b-7d93-36d9-bea5-212bfa1e354b'] + $extra);\n\n        return $this;\n    }\n\n    public function withThumbnails(array $extra = []): self\n    {\n        Image::factory()\n            ->count(1)\n            ->create(['campaign_id' => 1] + $extra);\n\n        return $this;\n    }\n\n    public function withCharacterTags(array $extra = []): self\n    {\n        Character::factory()\n            ->count(1)\n            ->create(['campaign_id' => 1]);\n\n        Tag::factory()\n            ->count(3)\n            ->create(['campaign_id' => 1] + $extra);\n\n        EntityTag::factory()->count(2)->state(\n            new Sequence(\n                ['tag_id' => 1, 'entity_id' => 1],\n                ['tag_id' => 2, 'entity_id' => 1],\n            )\n        )->create();\n\n        return $this;\n    }\n\n    public function withPrivateCharacterTags(array $extra = []): self\n    {\n        Character::factory()\n            ->count(1)\n            ->create(['campaign_id' => 1, 'is_private' => false]);\n\n        Tag::factory()\n            ->count(2)\n            ->state(\n                new Sequence(\n                    ['campaign_id' => 1],\n                    ['campaign_id' => 1, 'is_private' => true]\n                )\n            )\n            ->create();\n\n        EntityTag::factory()->count(2)->state(\n            new Sequence(\n                ['tag_id' => 1, 'entity_id' => 1],\n                ['tag_id' => 2, 'entity_id' => 1],\n            )\n        )->create();\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "vite.config.js",
    "content": "import { defineConfig } from 'vite';\nimport laravel from 'laravel-vite-plugin';\nimport vue from '@vitejs/plugin-vue';\nimport tailwindcss from '@tailwindcss/vite';\nimport { viteStaticCopy } from 'vite-plugin-static-copy';\n\n\nexport default defineConfig({\n    server: {\n        //host: '172.18.0.6',\n        hmr: {\n            host: 'kanka.test',\n        },\n        watch: {\n            ignored: [\n                '**/bootstrap/**',\n                '**/database/**',\n                '**/docs/**',\n                '**/lang/**',\n                '**/node_modules/**',\n                '**/public/**',\n                '**/resources/api-docs/**',\n                '**/resources/assets/**',\n                '**/routes/**',\n                '**/storage/**',\n                '**/storage/debugbar/**',\n                '**/tests/**',\n                '**/vendor/**',\n            ],\n        },\n    },\n    plugins: [\n        laravel({\n            input: [\n                'resources/js/app.js',\n                'resources/js/auth.js',\n                'resources/js/location/map-v3.js',\n                'resources/js/attributes.js',\n                'resources/js/abilities.js',\n                'resources/js/story.js',\n                'resources/js/conversation.js',\n                'resources/js/subscription.js',\n                'resources/js/billing.js',\n                'resources/js/forms/character.js',\n                'resources/js/forms/calendar.js',\n                'resources/js/dashboard.js',\n                'resources/js/front.js',\n                'resources/js/settings.js',\n                'resources/js/profile.js',\n                'resources/js/cookieconsent.js',\n                'resources/js/relations.js',\n                'resources/js/recovery/recovery.js',\n                'resources/js/gallery/gallery.js',\n                'resources/js/history.js',\n                'resources/js/whiteboards.js',\n                'resources/js/connections/web.js',\n                'resources/js/editors/summernote.js',\n                'resources/js/editors/tiptap/index.js',\n                'resources/js/family-tree-vue.js',\n                'resources/js/entities/explore.js',\n                'resources/js/attributes-manager.js',\n                'resources/js/campaigns/theme-builder.js',\n                'resources/js/campaigns/import.js',\n\n                'resources/css/app.css',\n                'resources/css/vendors/tinymce.css',\n                'resources/css/maps/maps.css',\n                'resources/css/subscription.css',\n                'resources/css/front.css',\n                'resources/css/auth.css',\n                'resources/css/relations.css',\n                'resources/css/dashboard.css',\n                'resources/css/families/tree.css',\n                'resources/css/vendor.css',\n                'resources/css/themes/dark.css',\n                'resources/css/themes/midnight.css',\n\n                'resources/css/print/print.css',\n\n                'resources/js/vendor-final.js',\n            ],\n            refresh: true,\n        }),\n        vue({\n            template: {\n                transformAssetUrls: {\n                    // The Vue plugin will re-write asset URLs, when referenced\n                    // in Single File Components, to point to the Laravel web\n                    // server. Setting this to `null` allows the Laravel plugin\n                    // to instead re-write asset URLs to point to the Vite\n                    // server instead.\n                    base: null,\n\n                    // The Vue plugin will parse absolute URLs and treat them\n                    // as absolute paths to files on disk. Setting this to\n                    // `false` will leave absolute URLs un-touched so they can\n                    // reference assets in the public directory as expected.\n                    includeAbsolute: false,\n                },\n            },\n        }),\n        tailwindcss(),\n        viteStaticCopy({\n            targets: [\n                {\n                    src: 'node_modules/tinymce/**/*',\n                    dest: 'js/tinymce',\n                },\n                {\n                    src: 'resources/vendor/tinymce/plugins/mention',\n                    dest: 'js/tinymce/plugins',\n                },\n                {\n                    src: 'resources/vendor/tinymce/langs/*',\n                    dest: 'js/tinymce/langs',\n                },\n            ],\n        }),\n    ],\n    build: {\n        rollupOptions: {\n            output: {\n                manualChunks(id) {\n                    if (id.includes('node_modules/@tiptap') || id.includes('node_modules/prosemirror') || id.includes('node_modules/@prosemirror')) {\n                        return 'vendor-tiptap'\n                    }\n                },\n            },\n        },\n    },\n    resolve: {\n        alias: {\n            'vue': 'vue/dist/vue.esm-bundler',\n        },\n    },\n});\n"
  }
]